ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhODRiMWIKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAorYnVpbGQvKgorY3VzdG9tcmMKZGlmZiAtLWdpdCBhLy50ZW1wbGF0ZWNvbmYgYi8udGVtcGxhdGVjb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MDk1ODAKLS0tIC9kZXYvbnVsbAorKysgYi8udGVtcGxhdGVjb25mCkBAIC0wLDAgKzEgQEAKK1RFTVBMQVRFQ09ORj0ke1RFTVBMQVRFQ09ORjotbWV0YS1waG9zcGhvci9jb25mfQpkaWZmIC0tZ2l0IGEvTElDRU5TRSBiL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uOWJiOWIxYwotLS0gL2Rldi9udWxsCisrKyBiL0xJQ0VOU0UKQEAgLTAsMCArMSBAQAoreW9jdG8tcG9reS9MSUNFTlNFClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MzA2YjAKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUUubWQKQEAgLTAsMCArMSwxMiBAQAorIyMgQnVpbGRpbmcgIyMKKworT3BlbkJNQyB1c2VzIFlvY3RvL09wZW4tRW1iZWRkZWQgZm9yIGEgYnVpbGQgc3lzdGVtLCB3aGljaCBzdXBwb3J0cyBhbiAKK291dC1vZi10cmVlIGJ1aWxkLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgY3JlYXRlIGFuIGVtcHR5IGRpcmVjdG9yeQorc29tZXdoZXJlIHRvIGhvbGQgdGhlIGJ1aWxkLiAgVGhpcyBkaXJlY3Rvcnkgd2lsbCBnZXQgYmlnLgorCitUbyBzdGFydCBhIGJ1aWxkOgorCisgICAgY2QgPGJ1aWxkZGlyPgorICAgIC4gPHJlcG9kaXI+L29wZW5ibWMtZW52CisgICAgYml0YmFrZSBvYm1jLXBob3NwaG9yLWltYWdlCisKZGlmZiAtLWdpdCBhL2JpdGJha2UgYi9iaXRiYWtlCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjdkNDgyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlCkBAIC0wLDAgKzEgQEAKK3lvY3RvLXBva3kvYml0YmFrZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24gYi9kb2N1bWVudGF0aW9uCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjM2MmQ3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uCkBAIC0wLDAgKzEgQEAKK3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEgYi9tZXRhCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjkwOTU5NTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhCkBAIC0wLDAgKzEgQEAKK3lvY3RvLXBva3kvbWV0YQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0NPUFlJTkcuTUlUIGIvbWV0YS1waG9zcGhvci9DT1BZSU5HLk1JVApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gQ09QWUlORy5NSVQKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvQ09QWUlORy5NSVQKZGlmZiAtLWdpdCBhL0NPUFlJTkcuYXBhY2hlLTIuMCBiL21ldGEtcGhvc3Bob3IvQ09QWUlORy5hcGFjaGUtMi4wCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBDT1BZSU5HLmFwYWNoZS0yLjAKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvQ09QWUlORy5hcGFjaGUtMi4wCmRpZmYgLS1naXQgYS9MSUNFTlNFIGIvbWV0YS1waG9zcGhvci9MSUNFTlNFCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMSUNFTlNFCnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL0xJQ0VOU0UKZGlmZiAtLWdpdCBhL2NsYXNzZXMvb2JtYy1waG9zcGhvci1jLWRhZW1vbi5iYmNsYXNzIGIvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3ItYy1kYWVtb24uYmJjbGFzcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWMtZGFlbW9uLmJiY2xhc3MKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWMtZGFlbW9uLmJiY2xhc3MKZGlmZiAtLWdpdCBhL2NsYXNzZXMvb2JtYy1waG9zcGhvci1jaGFzc2lzLW1nbXQuYmJjbGFzcyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWNoYXNzaXMtbWdtdC5iYmNsYXNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjbGFzc2VzL29ibWMtcGhvc3Bob3ItY2hhc3Npcy1tZ210LmJiY2xhc3MKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWNoYXNzaXMtbWdtdC5iYmNsYXNzCmRpZmYgLS1naXQgYS9jbGFzc2VzL29ibWMtcGhvc3Bob3ItZXZlbnQtbWdtdC5iYmNsYXNzIGIvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3ItZXZlbnQtbWdtdC5iYmNsYXNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjbGFzc2VzL29ibWMtcGhvc3Bob3ItZXZlbnQtbWdtdC5iYmNsYXNzCnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1ldmVudC1tZ210LmJiY2xhc3MKZGlmZiAtLWdpdCBhL2NsYXNzZXMvb2JtYy1waG9zcGhvci1mYW4tbWdtdC5iYmNsYXNzIGIvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3ItZmFuLW1nbXQuYmJjbGFzcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWZhbi1tZ210LmJiY2xhc3MKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWZhbi1tZ210LmJiY2xhc3MKZGlmZiAtLWdpdCBhL2NsYXNzZXMvb2JtYy1waG9zcGhvci1mbGFzaC1tZ210LmJiY2xhc3MgYi9tZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1mbGFzaC1tZ210LmJiY2xhc3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNsYXNzZXMvb2JtYy1waG9zcGhvci1mbGFzaC1tZ210LmJiY2xhc3MKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWZsYXNoLW1nbXQuYmJjbGFzcwpkaWZmIC0tZ2l0IGEvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWltYWdlLmJiY2xhc3MgYi9tZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1pbWFnZS5iYmNsYXNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjbGFzc2VzL29ibWMtcGhvc3Bob3ItaW1hZ2UuYmJjbGFzcwpyZW5hbWUgdG8gbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3ItaW1hZ2UuYmJjbGFzcwpkaWZmIC0tZ2l0IGEvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWxpY2Vuc2UuYmJjbGFzcyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWxpY2Vuc2UuYmJjbGFzcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWxpY2Vuc2UuYmJjbGFzcwpyZW5hbWUgdG8gbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3ItbGljZW5zZS5iYmNsYXNzCmRpZmYgLS1naXQgYS9jbGFzc2VzL29ibWMtcGhvc3Bob3ItcG9saWN5LW1nbXQuYmJjbGFzcyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLXBvbGljeS1tZ210LmJiY2xhc3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNsYXNzZXMvb2JtYy1waG9zcGhvci1wb2xpY3ktbWdtdC5iYmNsYXNzCnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1wb2xpY3ktbWdtdC5iYmNsYXNzCmRpZmYgLS1naXQgYS9jbGFzc2VzL29ibWMtcGhvc3Bob3ItcHktZGFlbW9uLmJiY2xhc3MgYi9tZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1weS1kYWVtb24uYmJjbGFzcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY2xhc3Nlcy9vYm1jLXBob3NwaG9yLXB5LWRhZW1vbi5iYmNsYXNzCnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1weS1kYWVtb24uYmJjbGFzcwpkaWZmIC0tZ2l0IGEvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLXNlbnNvci1tZ210LmJiY2xhc3MgYi9tZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1zZW5zb3ItbWdtdC5iYmNsYXNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjbGFzc2VzL29ibWMtcGhvc3Bob3Itc2Vuc29yLW1nbXQuYmJjbGFzcwpyZW5hbWUgdG8gbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3Itc2Vuc29yLW1nbXQuYmJjbGFzcwpkaWZmIC0tZ2l0IGEvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLXN5c3RlbS1tZ210LmJiY2xhc3MgYi9tZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1zeXN0ZW0tbWdtdC5iYmNsYXNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjbGFzc2VzL29ibWMtcGhvc3Bob3Itc3lzdGVtLW1nbXQuYmJjbGFzcwpyZW5hbWUgdG8gbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3Itc3lzdGVtLW1nbXQuYmJjbGFzcwpkaWZmIC0tZ2l0IGEvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLXN5c3RlbWQuYmJjbGFzcyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLXN5c3RlbWQuYmJjbGFzcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY2xhc3Nlcy9vYm1jLXBob3NwaG9yLXN5c3RlbWQuYmJjbGFzcwpyZW5hbWUgdG8gbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3Itc3lzdGVtZC5iYmNsYXNzCmRpZmYgLS1naXQgYS9jbGFzc2VzL29ibWMtcGhvc3Bob3ItdXRpbHMuYmJjbGFzcyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLXV0aWxzLmJiY2xhc3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNsYXNzZXMvb2JtYy1waG9zcGhvci11dGlscy5iYmNsYXNzCnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci11dGlscy5iYmNsYXNzCmRpZmYgLS1naXQgYS9jb21tb24vcmVjaXBlcy1waG9zcGhvci9pbWFnZXMvb2JtYy1waG9zcGhvci1pbWFnZS1uby1zeXNtZ3IuYmIgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL2ltYWdlcy9vYm1jLXBob3NwaG9yLWltYWdlLW5vLXN5c21nci5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29tbW9uL3JlY2lwZXMtcGhvc3Bob3IvaW1hZ2VzL29ibWMtcGhvc3Bob3ItaW1hZ2Utbm8tc3lzbWdyLmJiCnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL2ltYWdlcy9vYm1jLXBob3NwaG9yLWltYWdlLW5vLXN5c21nci5iYgpkaWZmIC0tZ2l0IGEvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3IvaW1hZ2VzL29ibWMtcGhvc3Bob3ItaW1hZ2UuYmIgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL2ltYWdlcy9vYm1jLXBob3NwaG9yLWltYWdlLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb21tb24vcmVjaXBlcy1waG9zcGhvci9pbWFnZXMvb2JtYy1waG9zcGhvci1pbWFnZS5iYgpyZW5hbWUgdG8gbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9pbWFnZXMvb2JtYy1waG9zcGhvci1pbWFnZS5iYgpkaWZmIC0tZ2l0IGEvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1jaGFzc2lzL2ZpbGVzL29ibWMtcGhvc3Bob3ItY2hhc3Npc2QucHkgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItY2hhc3Npcy9maWxlcy9vYm1jLXBob3NwaG9yLWNoYXNzaXNkLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWNoYXNzaXMvZmlsZXMvb2JtYy1waG9zcGhvci1jaGFzc2lzZC5weQpyZW5hbWUgdG8gbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWNoYXNzaXMvZmlsZXMvb2JtYy1waG9zcGhvci1jaGFzc2lzZC5weQpkaWZmIC0tZ2l0IGEvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1jaGFzc2lzL2ZpbGVzL29ibWMtcGhvc3Bob3ItY2hhc3Npc2Quc2VydmljZSBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1jaGFzc2lzL2ZpbGVzL29ibWMtcGhvc3Bob3ItY2hhc3Npc2Quc2VydmljZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1jaGFzc2lzL2ZpbGVzL29ibWMtcGhvc3Bob3ItY2hhc3Npc2Quc2VydmljZQpyZW5hbWUgdG8gbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWNoYXNzaXMvZmlsZXMvb2JtYy1waG9zcGhvci1jaGFzc2lzZC5zZXJ2aWNlCmRpZmYgLS1naXQgYS9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWNoYXNzaXMvb2JtYy1waG9zcGhvci1jaGFzc2lzZC5iYiBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1jaGFzc2lzL29ibWMtcGhvc3Bob3ItY2hhc3Npc2QuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItY2hhc3Npcy9vYm1jLXBob3NwaG9yLWNoYXNzaXNkLmJiCnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItY2hhc3Npcy9vYm1jLXBob3NwaG9yLWNoYXNzaXNkLmJiCmRpZmYgLS1naXQgYS9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV2ZW50L2ZpbGVzL29ibWMtcGhvc3Bob3ItZXZlbnRkLnB5IGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV2ZW50L2ZpbGVzL29ibWMtcGhvc3Bob3ItZXZlbnRkLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV2ZW50L2ZpbGVzL29ibWMtcGhvc3Bob3ItZXZlbnRkLnB5CnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZXZlbnQvZmlsZXMvb2JtYy1waG9zcGhvci1ldmVudGQucHkKZGlmZiAtLWdpdCBhL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZXZlbnQvZmlsZXMvb2JtYy1waG9zcGhvci1ldmVudGQuc2VydmljZSBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1ldmVudC9maWxlcy9vYm1jLXBob3NwaG9yLWV2ZW50ZC5zZXJ2aWNlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV2ZW50L2ZpbGVzL29ibWMtcGhvc3Bob3ItZXZlbnRkLnNlcnZpY2UKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1ldmVudC9maWxlcy9vYm1jLXBob3NwaG9yLWV2ZW50ZC5zZXJ2aWNlCmRpZmYgLS1naXQgYS9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV2ZW50L29ibWMtcGhvc3Bob3ItZXZlbnRkLmJiIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV2ZW50L29ibWMtcGhvc3Bob3ItZXZlbnRkLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV2ZW50L29ibWMtcGhvc3Bob3ItZXZlbnRkLmJiCnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZXZlbnQvb2JtYy1waG9zcGhvci1ldmVudGQuYmIKZGlmZiAtLWdpdCBhL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZmFuL2ZpbGVzL01ha2VmaWxlIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWZhbi9maWxlcy9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1mYW4vZmlsZXMvTWFrZWZpbGUKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1mYW4vZmlsZXMvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZmFuL2ZpbGVzL29ibWMtcGhvc3Bob3ItZmFuZC5jIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWZhbi9maWxlcy9vYm1jLXBob3NwaG9yLWZhbmQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1mYW4vZmlsZXMvb2JtYy1waG9zcGhvci1mYW5kLmMKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1mYW4vZmlsZXMvb2JtYy1waG9zcGhvci1mYW5kLmMKZGlmZiAtLWdpdCBhL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZmFuL2ZpbGVzL29ibWMtcGhvc3Bob3ItZmFuZC5zZXJ2aWNlIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWZhbi9maWxlcy9vYm1jLXBob3NwaG9yLWZhbmQuc2VydmljZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1mYW4vZmlsZXMvb2JtYy1waG9zcGhvci1mYW5kLnNlcnZpY2UKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1mYW4vZmlsZXMvb2JtYy1waG9zcGhvci1mYW5kLnNlcnZpY2UKZGlmZiAtLWdpdCBhL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZmFuL29ibWMtcGhvc3Bob3ItZmFuZC5iYiBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1mYW4vb2JtYy1waG9zcGhvci1mYW5kLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWZhbi9vYm1jLXBob3NwaG9yLWZhbmQuYmIKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1mYW4vb2JtYy1waG9zcGhvci1mYW5kLmJiCmRpZmYgLS1naXQgYS9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWZsYXNoL2ZpbGVzL29ibWMtcGhvc3Bob3ItZmxhc2hkLnB5IGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWZsYXNoL2ZpbGVzL29ibWMtcGhvc3Bob3ItZmxhc2hkLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWZsYXNoL2ZpbGVzL29ibWMtcGhvc3Bob3ItZmxhc2hkLnB5CnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZmxhc2gvZmlsZXMvb2JtYy1waG9zcGhvci1mbGFzaGQucHkKZGlmZiAtLWdpdCBhL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZmxhc2gvZmlsZXMvb2JtYy1waG9zcGhvci1mbGFzaGQuc2VydmljZSBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1mbGFzaC9maWxlcy9vYm1jLXBob3NwaG9yLWZsYXNoZC5zZXJ2aWNlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWZsYXNoL2ZpbGVzL29ibWMtcGhvc3Bob3ItZmxhc2hkLnNlcnZpY2UKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1mbGFzaC9maWxlcy9vYm1jLXBob3NwaG9yLWZsYXNoZC5zZXJ2aWNlCmRpZmYgLS1naXQgYS9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWZsYXNoL29ibWMtcGhvc3Bob3ItZmxhc2hkLmJiIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWZsYXNoL29ibWMtcGhvc3Bob3ItZmxhc2hkLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWZsYXNoL29ibWMtcGhvc3Bob3ItZmxhc2hkLmJiCnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZmxhc2gvb2JtYy1waG9zcGhvci1mbGFzaGQuYmIKZGlmZiAtLWdpdCBhL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItcG9saWN5L2ZpbGVzL29ibWMtcGhvc3Bob3ItcG9saWN5ZC5weSBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1wb2xpY3kvZmlsZXMvb2JtYy1waG9zcGhvci1wb2xpY3lkLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXBvbGljeS9maWxlcy9vYm1jLXBob3NwaG9yLXBvbGljeWQucHkKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1wb2xpY3kvZmlsZXMvb2JtYy1waG9zcGhvci1wb2xpY3lkLnB5CmRpZmYgLS1naXQgYS9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXBvbGljeS9maWxlcy9vYm1jLXBob3NwaG9yLXBvbGljeWQuc2VydmljZSBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1wb2xpY3kvZmlsZXMvb2JtYy1waG9zcGhvci1wb2xpY3lkLnNlcnZpY2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItcG9saWN5L2ZpbGVzL29ibWMtcGhvc3Bob3ItcG9saWN5ZC5zZXJ2aWNlCnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItcG9saWN5L2ZpbGVzL29ibWMtcGhvc3Bob3ItcG9saWN5ZC5zZXJ2aWNlCmRpZmYgLS1naXQgYS9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXBvbGljeS9vYm1jLXBob3NwaG9yLXBvbGljeWQuYmIgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItcG9saWN5L29ibWMtcGhvc3Bob3ItcG9saWN5ZC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1wb2xpY3kvb2JtYy1waG9zcGhvci1wb2xpY3lkLmJiCnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItcG9saWN5L29ibWMtcGhvc3Bob3ItcG9saWN5ZC5iYgpkaWZmIC0tZ2l0IGEvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1xZW11L2ZpbGVzL01ha2VmaWxlIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXFlbXUvZmlsZXMvTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItcWVtdS9maWxlcy9NYWtlZmlsZQpyZW5hbWUgdG8gbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXFlbXUvZmlsZXMvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItcWVtdS9maWxlcy9vYm1jLXBob3NwaG9yLXFlbXUuYyBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1xZW11L2ZpbGVzL29ibWMtcGhvc3Bob3ItcWVtdS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXFlbXUvZmlsZXMvb2JtYy1waG9zcGhvci1xZW11LmMKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1xZW11L2ZpbGVzL29ibWMtcGhvc3Bob3ItcWVtdS5jCmRpZmYgLS1naXQgYS9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXFlbXUvZmlsZXMvb2JtYy1waG9zcGhvci1xZW11LnNlcnZpY2UgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItcWVtdS9maWxlcy9vYm1jLXBob3NwaG9yLXFlbXUuc2VydmljZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1xZW11L2ZpbGVzL29ibWMtcGhvc3Bob3ItcWVtdS5zZXJ2aWNlCnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItcWVtdS9maWxlcy9vYm1jLXBob3NwaG9yLXFlbXUuc2VydmljZQpkaWZmIC0tZ2l0IGEvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1xZW11L29ibWMtcGhvc3Bob3ItcWVtdS5iYiBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1xZW11L29ibWMtcGhvc3Bob3ItcWVtdS5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1xZW11L29ibWMtcGhvc3Bob3ItcWVtdS5iYgpyZW5hbWUgdG8gbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXFlbXUvb2JtYy1waG9zcGhvci1xZW11LmJiCmRpZmYgLS1naXQgYS9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXNlbnNvci9maWxlcy9vYm1jLXBob3NwaG9yLXNlbnNvcmQucHkgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3Itc2Vuc29yL2ZpbGVzL29ibWMtcGhvc3Bob3Itc2Vuc29yZC5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1zZW5zb3IvZmlsZXMvb2JtYy1waG9zcGhvci1zZW5zb3JkLnB5CnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3Itc2Vuc29yL2ZpbGVzL29ibWMtcGhvc3Bob3Itc2Vuc29yZC5weQpkaWZmIC0tZ2l0IGEvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1zZW5zb3IvZmlsZXMvb2JtYy1waG9zcGhvci1zZW5zb3JkLnNlcnZpY2UgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3Itc2Vuc29yL2ZpbGVzL29ibWMtcGhvc3Bob3Itc2Vuc29yZC5zZXJ2aWNlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXNlbnNvci9maWxlcy9vYm1jLXBob3NwaG9yLXNlbnNvcmQuc2VydmljZQpyZW5hbWUgdG8gbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXNlbnNvci9maWxlcy9vYm1jLXBob3NwaG9yLXNlbnNvcmQuc2VydmljZQpkaWZmIC0tZ2l0IGEvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1zZW5zb3Ivb2JtYy1waG9zcGhvci1zZW5zb3JkLmJiIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXNlbnNvci9vYm1jLXBob3NwaG9yLXNlbnNvcmQuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3Itc2Vuc29yL29ibWMtcGhvc3Bob3Itc2Vuc29yZC5iYgpyZW5hbWUgdG8gbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXNlbnNvci9vYm1jLXBob3NwaG9yLXNlbnNvcmQuYmIKZGlmZiAtLWdpdCBhL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3Itc3lzL2ZpbGVzL29ibWMtcGhvc3Bob3Itc3lzZC5weSBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1zeXMvZmlsZXMvb2JtYy1waG9zcGhvci1zeXNkLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXN5cy9maWxlcy9vYm1jLXBob3NwaG9yLXN5c2QucHkKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1zeXMvZmlsZXMvb2JtYy1waG9zcGhvci1zeXNkLnB5CmRpZmYgLS1naXQgYS9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXN5cy9maWxlcy9vYm1jLXBob3NwaG9yLXN5c2Quc2VydmljZSBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1zeXMvZmlsZXMvb2JtYy1waG9zcGhvci1zeXNkLnNlcnZpY2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3Itc3lzL2ZpbGVzL29ibWMtcGhvc3Bob3Itc3lzZC5zZXJ2aWNlCnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3Itc3lzL2ZpbGVzL29ibWMtcGhvc3Bob3Itc3lzZC5zZXJ2aWNlCmRpZmYgLS1naXQgYS9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXN5cy9vYm1jLXBob3NwaG9yLXN5c2QuYmIgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3Itc3lzL29ibWMtcGhvc3Bob3Itc3lzZC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1zeXMvb2JtYy1waG9zcGhvci1zeXNkLmJiCnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3Itc3lzL29ibWMtcGhvc3Bob3Itc3lzZC5iYgpkaWZmIC0tZ2l0IGEvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3IvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtb2JtYy1waG9zcGhvci1hcHBzLmJiIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1vYm1jLXBob3NwaG9yLWFwcHMuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNvbW1vbi9yZWNpcGVzLXBob3NwaG9yL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLW9ibWMtcGhvc3Bob3ItYXBwcy5iYgpyZW5hbWUgdG8gbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1vYm1jLXBob3NwaG9yLWFwcHMuYmIKZGlmZiAtLWdpdCBhL2NvbW1vbi9yZWNpcGVzLnR4dCBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb21tb24vcmVjaXBlcy50eHQKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMudHh0CmRpZmYgLS1naXQgYS9jb25mL2JibGF5ZXJzLmNvbmYuc2FtcGxlIGIvbWV0YS1waG9zcGhvci9jb25mL2JibGF5ZXJzLmNvbmYuc2FtcGxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb25mL2JibGF5ZXJzLmNvbmYuc2FtcGxlCnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL2NvbmYvYmJsYXllcnMuY29uZi5zYW1wbGUKZGlmZiAtLWdpdCBhL2NvbmYvY29uZi1ub3Rlcy50eHQgYi9tZXRhLXBob3NwaG9yL2NvbmYvY29uZi1ub3Rlcy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNvbmYvY29uZi1ub3Rlcy50eHQKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvY29uZi9jb25mLW5vdGVzLnR4dApkaWZmIC0tZ2l0IGEvY29uZi9kaXN0cm8vb3BlbmJtYy1waG9zcGhvci5jb25mIGIvbWV0YS1waG9zcGhvci9jb25mL2Rpc3Ryby9vcGVuYm1jLXBob3NwaG9yLmNvbmYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNvbmYvZGlzdHJvL29wZW5ibWMtcGhvc3Bob3IuY29uZgpyZW5hbWUgdG8gbWV0YS1waG9zcGhvci9jb25mL2Rpc3Ryby9vcGVuYm1jLXBob3NwaG9yLmNvbmYKZGlmZiAtLWdpdCBhL2NvbmYvbGF5ZXIuY29uZiBiL21ldGEtcGhvc3Bob3IvY29uZi9sYXllci5jb25mCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb25mL2xheWVyLmNvbmYKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvY29uZi9sYXllci5jb25mCmRpZmYgLS1naXQgYS9jb25mL2xvY2FsLmNvbmYuc2FtcGxlIGIvbWV0YS1waG9zcGhvci9jb25mL2xvY2FsLmNvbmYuc2FtcGxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb25mL2xvY2FsLmNvbmYuc2FtcGxlCnJlbmFtZSB0byBtZXRhLXBob3NwaG9yL2NvbmYvbG9jYWwuY29uZi5zYW1wbGUKZGlmZiAtLWdpdCBhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NhbXBsZS5pbmMgYi9tZXRhLXBob3NwaG9yL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NhbXBsZS5pbmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNvbmYvbWFjaGluZS9pbmNsdWRlL3NhbXBsZS5pbmMKcmVuYW1lIHRvIG1ldGEtcGhvc3Bob3IvY29uZi9tYWNoaW5lL2luY2x1ZGUvc2FtcGxlLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS1zZWxmdGVzdCBiL21ldGEtc2VsZnRlc3QKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uY2UzZmQ5MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2VsZnRlc3QKQEAgLTAsMCArMSBAQAoreW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWV0YS1za2VsZXRvbiBiL21ldGEtc2tlbGV0b24KbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uZjQ3NzAyZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2tlbGV0b24KQEAgLTAsMCArMSBAQAoreW9jdG8tcG9reS9tZXRhLXNrZWxldG9uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWV0YS15b2N0byBiL21ldGEteW9jdG8KbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uYzM4NDFiMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8KQEAgLTAsMCArMSBAQAoreW9jdG8tcG9reS9tZXRhLXlvY3RvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWV0YS15b2N0by1ic3AgYi9tZXRhLXlvY3RvLWJzcApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi41YWVkMWVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS15b2N0by1ic3AKQEAgLTAsMCArMSBAQAoreW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL29lLWluaXQtYnVpbGQtZW52IGIvb2UtaW5pdC1idWlsZC1lbnYKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uZmM2MzQ4YgotLS0gL2Rldi9udWxsCisrKyBiL29lLWluaXQtYnVpbGQtZW52CkBAIC0wLDAgKzEgQEAKK3lvY3RvLXBva3kvb2UtaW5pdC1idWlsZC1lbnYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXMgYi9vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXMKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uMTdlY2ZlMAotLS0gL2Rldi9udWxsCisrKyBiL29lLWluaXQtYnVpbGQtZW52LW1lbXJlcwpAQCAtMCwwICsxIEBACit5b2N0by1wb2t5L29lLWluaXQtYnVpbGQtZW52LW1lbXJlcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL29wZW5ibWMtZW52IGIvb3BlbmJtYy1lbnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNlODYyOAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5ibWMtZW52CkBAIC0wLDAgKzEsMTYgQEAKK2lmIFsgLW4gIiRCQVNIX1NPVVJDRSIgXTsgdGhlbgorICAgT0JNQ1JPT1Q9ImBkaXJuYW1lICRCQVNIX1NPVVJDRWAiCitlbGlmIFsgLW4gIiRaU0hfTkFNRSIgXTsgdGhlbgorICAgT0JNQ1JPT1Q9ImBkaXJuYW1lICQwYCIKK2Vsc2UKKyAgIE9CTUNST09UPSJgcHdkYCIKK2ZpCisKK2lmIFsgLWYgJE9CTUNST09UL2N1c3RvbXJjIF07IHRoZW4KKyAgICBlY2hvICIjIyMgU291cmNpbmcgY3VzdG9tcmMgIyMjIgorICAgIC4gJE9CTUNST09UL2N1c3RvbXJjCitmaQorCitlY2hvICIjIyMgSW5pdGlhbGl6aW5nIE9FIGJ1aWxkIGVudiAjIyMiCisuICRPQk1DUk9PVC9vZS1pbml0LWJ1aWxkLWVudgorCmRpZmYgLS1naXQgYS9zY3JpcHRzIGIvc2NyaXB0cwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5iODAzMDdhCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cwpAQCAtMCwwICsxIEBACit5b2N0by1wb2t5L3NjcmlwdHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5Ly5naXRpZ25vcmUgYi95b2N0by1wb2t5Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIzNTgzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDI2IEBACisqLnB5YworKi5weW8KKy8qLnBhdGNoCitidWlsZCovCitweXNodGFibGVzLnB5Citwc3RhZ2UvCitzY3JpcHRzL29lLWdpdC1wcm94eS1zb2Nrcworc291cmNlcy8KK21ldGEtKi8KKyFtZXRhLXNrZWxldG9uCishbWV0YS1zZWxmdGVzdAoraG9iLWltYWdlLSouYmIKKyouc3dwCisqLm9yaWcKKyoucmVqCisqfgorIW1ldGEteW9jdG8KKyFtZXRhLXlvY3RvLWJzcAorIW1ldGEteW9jdG8taW1wb3J0ZWQKK2RvY3VtZW50YXRpb24vdXNlci1tYW51YWwvdXNlci1tYW51YWwuaHRtbAorZG9jdW1lbnRhdGlvbi91c2VyLW1hbnVhbC91c2VyLW1hbnVhbC5wZGYKK2RvY3VtZW50YXRpb24vdXNlci1tYW51YWwvdXNlci1tYW51YWwudGd6CitwdWxsLSovCitiaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL2JhY2tsb2cudHh0CitiaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL2xvZy8qCitiaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzLy5jYWNoZS8qClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS8udGVtcGxhdGVjb25mIGIveW9jdG8tcG9reS8udGVtcGxhdGVjb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NTBhNDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5Ly50ZW1wbGF0ZWNvbmYKQEAgLTAsMCArMSwyIEBACisjIFRlbXBsYXRlIHNldHRpbmdzCitURU1QTEFURUNPTkY9JHtURU1QTEFURUNPTkY6LW1ldGEteW9jdG8vY29uZn0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvTElDRU5TRSBiL3lvY3RvLXBva3kvTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWZhNmU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9MSUNFTlNFCkBAIC0wLDAgKzEsMTQgQEAKK0RpZmZlcmVudCBjb21wb25lbnRzIG9mIE9wZW5FbWJlZGRlZCBhcmUgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2VzIChhIG1peAorb2YgTUlUIGFuZCBHUEx2MikuIFBsZWFzZSBzZWU6CisKK21ldGEvQ09QWUlORy5HUEx2MiAoR1BMdjIpCittZXRhL0NPUFlJTkcuTUlUIChNSVQpCittZXRhLXNlbGZ0ZXN0L0NPUFlJTkcuTUlUIChNSVQpCittZXRhLXNrZWxldG9uL0NPUFlJTkcuTUlUIChNSVQpCisKK0FsbCBtZXRhZGF0YSBpcyBNSVQgbGljZW5zZWQgdW5sZXNzIG90aGVyd2lzZSBzdGF0ZWQuIFNvdXJjZSBjb2RlCitpbmNsdWRlZCBpbiB0cmVlIGZvciBpbmRpdmlkdWFsIHJlY2lwZXMgaXMgdW5kZXIgdGhlIExJQ0VOU0Ugc3RhdGVkIGluCit0aGUgYXNzb2NpYXRlZCByZWNpcGUgKC5iYiBmaWxlKSB1bmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZC4KKworTGljZW5zZSBpbmZvcm1hdGlvbiBmb3IgYW55IG90aGVyIGZpbGVzIGlzIGVpdGhlciBleHBsaWNpdGx5IHN0YXRlZCAKK29yIGRlZmF1bHRzIHRvIEdQTCB2ZXJzaW9uIDIuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L1JFQURNRSBiL3lvY3RvLXBva3kvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NDkzMDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L1JFQURNRQpAQCAtMCwwICsxLDU4IEBACitQb2t5Cis9PT09CisKK1Bva3kgaXMgYW4gaW50ZWdyYXRpb24gb2YgdmFyaW91cyBjb21wb25lbnRzIHRvIGZvcm0gYSBjb21wbGV0ZSBwcmVwYWNrYWdlZAorYnVpbGQgc3lzdGVtIGFuZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4gSXQgZmVhdHVyZXMgc3VwcG9ydCBmb3IgYnVpbGRpbmcKK2N1c3RvbWlzZWQgZW1iZWRkZWQgZGV2aWNlIHN0eWxlIGltYWdlcy4gVGhlcmUgYXJlIHJlZmVyZW5jZSBkZW1vIGltYWdlcworZmVhdHVyaW5nIGEgWDExL01hdGNoYm94L0dUSyB0aGVtZWQgVUkgY2FsbGVkIFNhdG8uIFRoZSBzeXN0ZW0gc3VwcG9ydHMKK2Nyb3NzLWFyY2hpdGVjdHVyZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCB1c2luZyBRRU1VIGVtdWxhdGlvbiBhbmQgYQorc3RhbmRhbG9uZSB0b29sY2hhaW4gYW5kIFNESyB3aXRoIElERSBpbnRlZ3JhdGlvbi4KKworQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGUgc3BlY2lmaWNzIG9mIGhhcmR3YXJlIHRoYXQgUG9reSBzdXBwb3J0cworaXMgYXZhaWxhYmxlIGluIFJFQURNRS5oYXJkd2FyZS4gRnVydGhlciBoYXJkd2FyZSBzdXBwb3J0IGNhbiBlYXNpbHkgYmUgYWRkZWQKK2luIHRoZSBmb3JtIG9mIGxheWVycyB3aGljaCBleHRlbmQgdGhlIHN5c3RlbXMgY2FwYWJpbGl0aWVzIGluIGEgbW9kdWxhciB3YXkuCisKK0FzIGFuIGludGVncmF0aW9uIGxheWVyIFBva3kgY29uc2lzdHMgb2Ygc2V2ZXJhbCB1cHN0cmVhbSBwcm9qZWN0cyBzdWNoIGFzIAorQml0QmFrZSwgT3BlbkVtYmVkZGVkLUNvcmUsIFlvY3RvIGRvY3VtZW50YXRpb24gYW5kIHZhcmlvdXMgc291cmNlcyBvZiBpbmZvcm1hdGlvbiAKK2UuZy4gZm9yIHRoZSBoYXJkd2FyZSBzdXBwb3J0LiBQb2t5IGlzIGluIHR1cm4gYSBjb21wb25lbnQgb2YgdGhlIFlvY3RvIFByb2plY3QuCisKK1RoZSBZb2N0byBQcm9qZWN0IGhhcyBleHRlbnNpdmUgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgc3lzdGVtIGluY2x1ZGluZyBhIAorcmVmZXJlbmNlIG1hbnVhbCB3aGljaCBjYW4gYmUgZm91bmQgYXQ6CisgICAgaHR0cDovL3lvY3RvcHJvamVjdC5vcmcvZG9jdW1lbnRhdGlvbgorCitPcGVuRW1iZWRkZWQtQ29yZSBpcyBhIGxheWVyIGNvbnRhaW5pbmcgdGhlIGNvcmUgbWV0YWRhdGEgZm9yIGN1cnJlbnQgdmVyc2lvbnMKK29mIE9wZW5FbWJlZGRlZC4gSXQgaXMgZGlzdHJvLWxlc3MgKGNhbiBidWlsZCBhIGZ1bmN0aW9uYWwgaW1hZ2Ugd2l0aAorRElTVFJPID0gIm5vZGlzdHJvIikgYW5kIGNvbnRhaW5zIG9ubHkgZW11bGF0ZWQgbWFjaGluZSBzdXBwb3J0LgorCitGb3IgaW5mb3JtYXRpb24gYWJvdXQgT3BlbkVtYmVkZGVkLCBzZWUgdGhlIE9wZW5FbWJlZGRlZCB3ZWJzaXRlOgorICAgIGh0dHA6Ly93d3cub3BlbmVtYmVkZGVkLm9yZy8KKworV2hlcmUgdG8gU2VuZCBQYXRjaGVzCis9PT09PT09PT09PT09PT09PT09PT0KKworQXMgUG9reSBpcyBhbiBpbnRlZ3JhdGlvbiByZXBvc2l0b3J5IChidWlsdCB1c2luZyBhIHRvb2wgY2FsbGVkIGNvbWJvLWxheWVyKSwKK3BhdGNoZXMgYWdhaW5zdCB0aGUgdmFyaW91cyBjb21wb25lbnRzIHNob3VsZCBiZSBzZW50IHRvIHRoZWlyIHJlc3BlY3RpdmUKK3Vwc3RyZWFtczoKKworYml0YmFrZToKKyAgICBHaXQgcmVwb3NpdG9yeTogaHR0cDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UvCisgICAgTWFpbGluZyBsaXN0OiBiaXRiYWtlLWRldmVsQGxpc3RzLm9wZW5lbWJlZGRlZC5vcmcKKworZG9jdW1lbnRhdGlvbjoKKyAgICBHaXQgcmVwb3NpdG9yeTogaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kveW9jdG8tZG9jcy8KKyAgICBNYWlsaW5nIGxpc3Q6IHlvY3RvQHlvY3RvcHJvamVjdC5vcmcKKworbWV0YS15b2N0bygtYnNwKToKKyAgICBHaXQgcmVwb3NpdG9yeTogaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvbWV0YS15b2N0bygtYnNwKQorICAgIE1haWxpbmcgbGlzdDogcG9reUB5b2N0b3Byb2plY3Qub3JnCisKK0V2ZXJ5dGhpbmcgZWxzZSBzaG91bGQgYmUgc2VudCB0byB0aGUgT3BlbkVtYmVkZGVkIENvcmUgbWFpbGluZyBsaXN0LiAgSWYgaW4KK2RvdWJ0LCBjaGVjayB0aGUgb2UtY29yZSBnaXQgcmVwb3NpdG9yeSBmb3IgdGhlIGNvbnRlbnQgeW91IGludGVuZCB0byBtb2RpZnkuCitCZWZvcmUgc2VuZGluZywgYmUgc3VyZSB0aGUgcGF0Y2hlcyBhcHBseSBjbGVhbmx5IHRvIHRoZSBjdXJyZW50IG9lLWNvcmUgZ2l0CityZXBvc2l0b3J5LgorCisgICAgR2l0IHJlcG9zaXRvcnk6IGh0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS8KKyAgICBNYWlsaW5nIGxpc3Q6IG9wZW5lbWJlZGRlZC1jb3JlQGxpc3RzLm9wZW5lbWJlZGRlZC5vcmcKKworTm90ZTogVGhlIHNjcmlwdHMgZGlyZWN0b3J5IHNob3VsZCBiZSB0cmVhdGVkIHdpdGggZXh0cmEgY2FyZSBhcyBpdCBpcyBhIG1peCBvZgorb2UtY29yZSBhbmQgcG9reS1zcGVjaWZpYyBmaWxlcy4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvUkVBRE1FLmhhcmR3YXJlIGIveW9jdG8tcG9reS9SRUFETUUuaGFyZHdhcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM3NGM1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvUkVBRE1FLmhhcmR3YXJlCkBAIC0wLDAgKzEsNTAwIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgIFBva3kgSGFyZHdhcmUgUkVBRE1FCisgICAgICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZmlsZSBnaXZlcyBkZXRhaWxzIGFib3V0IHVzaW5nIFBva3kgd2l0aCB0aGUgcmVmZXJlbmNlIG1hY2hpbmVzCitzdXBwb3J0ZWQgb3V0IG9mIHRoZSBib3guIEEgZnVsbCBsaXN0IG9mIHN1cHBvcnRlZCByZWZlcmVuY2UgdGFyZ2V0IG1hY2hpbmVzCitjYW4gYmUgZm91bmQgYnkgbG9va2luZyBpbiB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzOgorCisgICBtZXRhL2NvbmYvbWFjaGluZS8KKyAgIG1ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS8KKworSWYgeW91IGFyZSBpbiBkb3VidCBhYm91dCB1c2luZyBQb2t5L09wZW5FbWJlZGRlZCB3aXRoIHlvdXIgaGFyZHdhcmUsIGNvbnN1bHQKK3RoZSBkb2N1bWVudGF0aW9uIGZvciB5b3VyIGJvYXJkL2RldmljZS4KKworU3VwcG9ydCBmb3IgYWRkaXRpb25hbCBkZXZpY2VzIGlzIG5vcm1hbGx5IGFkZGVkIGJ5IGNyZWF0aW5nIEJTUCBsYXllcnMgLSBmb3IKK21vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSB0aGUgWW9jdG8gQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzCitHdWlkZSAtIGRvY3VtZW50YXRpb24gc291cmNlIGlzIGluIGRvY3VtZW50YXRpb24vYnNwZ3VpZGUgb3IgZG93bmxvYWQgdGhlIFBERgorZnJvbToKKworICAgaHR0cDovL3lvY3RvcHJvamVjdC5vcmcvZG9jdW1lbnRhdGlvbgorCitTdXBwb3J0IGZvciBwaHlzaWNhbCByZWZlcmVuY2UgaGFyZHdhcmUgaGFzIG5vdyBiZWVuIHNwbGl0IG91dCBpbnRvIGEKK21ldGEteW9jdG8tYnNwIGxheWVyIHdoaWNoIGNhbiBiZSByZW1vdmVkIHNlcGFyYXRlbHkgZnJvbSBvdGhlciBsYXllcnMgaWYgbm90CituZWVkZWQuCisKKworUUVNVSBFbXVsYXRpb24gVGFyZ2V0cworPT09PT09PT09PT09PT09PT09PT09PQorCitUbyBzaW1wbGlmeSBkZXZlbG9wbWVudCwgdGhlIGJ1aWxkIHN5c3RlbSBzdXBwb3J0cyBidWlsZGluZyBpbWFnZXMgdG8KK3dvcmsgd2l0aCB0aGUgUUVNVSBlbXVsYXRvciBpbiBzeXN0ZW0gZW11bGF0aW9uIG1vZGUuIFNldmVyYWwgYXJjaGl0ZWN0dXJlcworYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQ6CisKKyAgKiBBUk0gKHFlbXVhcm0pCisgICogeDg2IChxZW11eDg2KQorICAqIHg4Ni02NCAocWVtdXg4Ni02NCkKKyAgKiBQb3dlclBDIChxZW11cHBjKQorICAqIE1JUFMgKHFlbXVtaXBzKQorCitVc2Ugb2YgdGhlIFFFTVUgaW1hZ2VzIGlzIGNvdmVyZWQgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KK1RoZSBhcHByb3ByaWF0ZSBNQUNISU5FIHZhcmlhYmxlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRhcmdldCBpcyBnaXZlbgoraW4gYnJhY2tldHMuCisKKworSGFyZHdhcmUgUmVmZXJlbmNlIEJvYXJkcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZm9sbG93aW5nIGJvYXJkcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBtZXRhLXlvY3RvLWJzcCBsYXllcjoKKworICAqIFRleGFzIEluc3RydW1lbnRzIEJlYWdsZWJvbmUgKGJlYWdsZWJvbmUpCisgICogRnJlZXNjYWxlIE1QQzgzMTVFLVJEQiAobXBjODMxNWUtcmRiKQorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIGJvYXJkJ3Mgc2VjdGlvbiBiZWxvdy4gVGhlIGFwcHJvcHJpYXRlIE1BQ0hJTkUKK3ZhcmlhYmxlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJvYXJkIGlzIGdpdmVuIGluIGJyYWNrZXRzLgorCitSZWZlcmVuY2UgQm9hcmQgTWFpbnRlbmFuY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTZW5kIHB1bGwgcmVxdWVzdHMsIHBhdGNoZXMsIGNvbW1lbnRzIG9yIHF1ZXN0aW9ucyBhYm91dCBtZXRhLXlvY3RvLWJzcHMgdG8gcG9reUB5b2N0b3Byb2plY3Qub3JnCisKK01haW50YWluZXJzOiBLZXZpbiBIYW8gPGtleGluLmhhb0B3aW5kcml2ZXIuY29tPgorICAgICAgICAgICAgIEJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPgorCitDb25zdW1lciBEZXZpY2VzCis9PT09PT09PT09PT09PT09CisKK1RoZSBmb2xsb3dpbmcgY29uc3VtZXIgZGV2aWNlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBtZXRhLXlvY3RvLWJzcCBsYXllcjoKKworICAqIEludGVsIHg4NiBiYXNlZCBQQ3MgYW5kIGRldmljZXMgKGdlbmVyaWN4ODYpCisgICogVWJpcXVpdGkgTmV0d29ya3MgRWRnZVJvdXRlciBMaXRlIChlZGdlcm91dGVyKQorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIGRldmljZSdzIHNlY3Rpb24gYmVsb3cuIFRoZSBhcHByb3ByaWF0ZSBNQUNISU5FCit2YXJpYWJsZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBkZXZpY2UgaXMgZ2l2ZW4gaW4gYnJhY2tldHMuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWMgSGFyZHdhcmUgRG9jdW1lbnRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitJbnRlbCB4ODYgYmFzZWQgUENzIGFuZCBkZXZpY2VzIChnZW5lcmljeDg2KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBnZW5lcmljeDg2IE1BQ0hJTkUgaXMgdGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgcGxhdGZvcm1zOgorCitJbnRlbCBYZW9uL0NvcmUgaS1TZXJpZXM6CisgICsgSW50ZWwgUm9tbGV5IFNlcnZlcjogU2FuZHkgQnJpZGdlIFhlb24gcHJvY2Vzc29yLCBDNjAwIFBDSCAoUGF0c2J1cmcpLCAoQ2Fub2UgUGFzcyBDUkIpCisgICsgSW50ZWwgUm9tbGV5IFNlcnZlcjogSXZ5IEJyaWRnZSBYZW9uIHByb2Nlc3NvciwgQzYwMCBQQ0ggKFBhdHNidXJnKSwgKEludGVsIFNEUCBTMlIzKQorICArIEludGVsIENyeXN0YWwgRm9yZXN0IFNlcnZlcjogU2FuZHkgQnJpZGdlIFhlb24gcHJvY2Vzc29yLCBESDg5eHggUENIIChDYXZlIENyZWVrKSwgKFN0YXJnbyBDUkIpCisgICsgSW50ZWwgQ2hpZWYgUml2ZXIgTW9iaWxlOiBJdnkgQnJpZGdlIE1vYmlsZSBwcm9jZXNzb3IsIFFNNzcgUENIIChQYW50aGVyIFBvaW50LU0pLCAoRW1lcmFsZCBMYWtlIElJIENSQiwgU2FiaW5vIENhbnlvbiBDUkIpCisgICsgSW50ZWwgSHVyb24gUml2ZXIgTW9iaWxlOiBTYW5keSBCcmlkZ2UgcHJvY2Vzc29yLCBRTTY3IFBDSCAoQ291Z2FyIFBvaW50KSwgKEVtZXJhbGQgTGFrZSBDUkIsIEVWT0MgRUM3LTE4MTdMTkFSIGJvYXJkKQorICArIEludGVsIENhbHBlbGxhIFBsYXRmb3JtOiBDb3JlIGk3IHByb2Nlc3NvciwgUU01NyBQQ0ggKEliZXggUGVhay1NKSwgKFJlZCBGb3J0IENSQiwgRW1lcnNvbiBNQVRYTSBDT1JFLTQxMS1CKQorICArIEludGVsIE5laGFsZW0vV2VzdG1lcmUtRVAgU2VydmVyOiBYZW9uIDU2eHgvNTV4eCBwcm9jZXNzb3JzLCA1NTIwIGNoaXBzZXQsIElDSDEwUiBJT0ggKDgyODAxKSwgKEhhbmxhbiBDcmVlayBDUkIpCisgICsgSW50ZWwgTmVoYWxlbSBXb3Jrc3RhdGlvbjogWGVvbiA1Nnh4LzU1eHggcHJvY2Vzc29ycywgU3lzdGVtIFNDNTY1MFNDV1MgKEdyZWVuY2l0eSBDUkIpCisgICsgSW50ZWwgUGlja2V0IFBvc3QgU2VydmVyOiBYZW9uIDU2eHgvNTV4eCBwcm9jZXNzb3JzIChKYXNwZXIgRm9yZXN0KSwgMzQyMCBjaGlwc2V0IChJYmV4IFBlYWspLCAoT3NhZ2UgQ1JCKQorICArIEludGVsIFN0b3JhZ2UgUGxhdGZvcm06IFNhbmR5IEJyaWRnZSBYZW9uIHByb2Nlc3NvciwgQzYwMCBQQ0ggKFBhdHNidXJnKSwgKE9hayBDcmVlayBDYW55b24gQ1JCKQorICArIEludGVsIFNoYXJrIEJheSBDbGllbnQgUGxhdGZvcm06IEhhc3dlbGwgcHJvY2Vzc29yLCBMeW54UG9pbnQgUENILCAoV2FsbnV0IENhbnlvbiBDUkIsIExhdmEgQ2FueW9uIENSQiwgQmFza2luZyBSaWRnZSBDUkIsIEZsYXRoZWFkIENyZWVrIENSQikKKyAgKyBJbnRlbCBTaGFyayBCYXkgVWx0cmFib29rIFBsYXRmb3JtOiBIYXN3ZWxsIFVMVCBwcm9jZXNzb3IsIEx5bnggUG9pbnQtTFAgUENILCAoV2hpdGVUaXAgTW91bnRhaW4gMSBDUkIpCisKK0ludGVsIEF0b20gcGxhdGZvcm1zOgorICArIEludGVsIGVtYmVkZGVkIE1lbmxvdzogSW50ZWwgQXRvbSBaNTEwLzUzMCBDUFUsIFN5c3RlbSBDb250cm9sbGVyIEh1YiBVUzE1VyAoUG9ydHdlbGwgTkFOTy04MDQ0KQorICArIEludGVsIEx1bmEgUGllcjogSW50ZWwgQXRvbSBONHh4L0Q1eHggc2VyaWVzIENQVSAoYWthOiBQaW5ldmlldy1EICYgLU0pLCA4MjgwMUhNIEkvTyBIdWIgKElDSDhNKSwgKEFkdmFudGVjaCBBSU1CLTIxMiwgTW9vbiBDcmVlayBDUkIpCisgICsgSW50ZWwgUXVlZW5zIEJheSBwbGF0Zm9ybTogSW50ZWwgQXRvbSBFNnh4IENQVSAoYWthOiBUdW5uZWwgQ3JlZWspLCBUb3BjbGlmZiBFRzIwVCBJL08gSHViIChFbWVyc29uIE5JVFgtMzE1LCBDcm93biBCYXkgQ1JCLCBNaW5ub3cgQm9hcmQpCisgICsgSW50ZWwgRmlzaCBSaXZlciBJc2xhbmQgcGxhdGZvcm06IEludGVsIEF0b20gRTZ4eCBDUFUgKGFrYTogVHVubmVsIENyZWVrKSwgVG9wY2xpZmYgRUcyMFQgSS9PIEh1YiAoS29udHJvbiBLTTJNODA2KQorICArIEludGVsIENlZGFyIFRyYWlsIHBsYXRmb3JtOiBJbnRlbCBBdG9tIE4yMDAwICYgRDIwMDAgc2VyaWVzIENQVSAoYWthOiBDZWRhcnZpZXcpLCBOTTEwIEV4cHJlc3MgQ2hpcHNldCAoTm9yY28ga2l0IEJJUy02NjMwLCBDZWRhciBSb2NrIENSQikKKworYW5kIGlzIGxpa2VseSB0byB3b3JrIG9uIG1hbnkgdW5saXN0ZWQgQXRvbS9Db3JlL1hlb24gYmFzZWQgZGV2aWNlcy4gVGhlIE1BQ0hJTkUKK3R5cGUgc3VwcG9ydHMgZXRoZXJuZXQsIHdpZmksIHNvdW5kLCBhbmQgSW50ZWwvdmVzYSBncmFwaGljcyBieSBkZWZhdWx0IGluCithZGRpdGlvbiB0byBjb21tb24gUEMgaW5wdXQgZGV2aWNlcywgYnVzc2VzLCBhbmQgc28gb24uCisKK0RlcGVuZGluZyBvbiB0aGUgZGV2aWNlLCBpdCBjYW4gYm9vdCBmcm9tIGEgdHJhZGl0aW9uYWwgaGFyZC1kaXNrLCBhIFVTQiBkZXZpY2UsCitvciBvdmVyIHRoZSBuZXR3b3JrLiBXcml0aW5nIGdlbmVyYXRlZCBpbWFnZXMgdG8gcGh5c2ljYWwgbWVkaWEgaXMKK3N0cmFpZ2h0Zm9yd2FyZCB3aXRoIGEgY2F2ZWF0IGZvciBVU0IgZGV2aWNlcy4gVGhlIGZvbGxvd2luZyBleGFtcGxlcyBhc3N1bWUgdGhlCit0YXJnZXQgYm9vdCBkZXZpY2UgaXMgL2Rldi9zZGIsIGJlIHN1cmUgdG8gdmVyaWZ5IHRoaXMgYW5kIHVzZSB0aGUgY29ycmVjdAorZGV2aWNlIGFzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYXJlIHJ1biBhcyByb290IGFuZCBhcmUgbm90IHJldmVyc2FibGUuCisKK1VTQiBEZXZpY2U6CisgIDEuIEJ1aWxkIGEgbGl2ZSBpbWFnZS4gVGhpcyBpbWFnZSB0eXBlIGNvbnNpc3RzIG9mIGEgc2ltcGxlIGZpbGVzeXN0ZW0KKyAgICAgd2l0aG91dCBhIHBhcnRpdGlvbiB0YWJsZSwgd2hpY2ggaXMgc3VpdGFibGUgZm9yIFVTQiBrZXlzLCBhbmQgd2l0aCB0aGUKKyAgICAgZGVmYXVsdCBzZXR1cCBmb3IgdGhlIGdlbmVyaWN4ODYgbWFjaGluZSwgdGhpcyBpbWFnZSB0eXBlIGlzIGJ1aWx0CisgICAgIGF1dG9tYXRpY2FsbHkgZm9yIGFueSBpbWFnZSB5b3UgYnVpbGQuIEZvciBleGFtcGxlOgorCisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLW1pbmltYWwKKworICAyLiBVc2UgdGhlICJkZCIgdXRpbGl0eSB0byB3cml0ZSB0aGUgaW1hZ2UgdG8gdGhlIHJhdyBibG9jayBkZXZpY2UuIEZvcgorICAgICBleGFtcGxlOgorCisgICAgICMgZGQgaWY9Y29yZS1pbWFnZS1taW5pbWFsLWdlbmVyaWN4ODYuaGRkaW1nIG9mPS9kZXYvc2RiCisKKyAgSWYgdGhlIGRldmljZSBmYWlscyB0byBib290IHdpdGggIkJvb3QgZXJyb3IiIGRpc3BsYXllZCwgb3IgYXBwYXJlbnRseQorICBzdG9wcyBqdXN0IGFmdGVyIHRoZSBTWVNMSU5VWCB2ZXJzaW9uIGJhbm5lciwgaXQgaXMgbGlrZWx5IHRoZSBCSU9TIGNhbm5vdAorICB1bmRlcnN0YW5kIHRoZSBwaHlzaWNhbCBsYXlvdXQgb2YgdGhlIGRpc2sgKG9yIHJhdGhlciBpdCBleHBlY3RzIGEKKyAgcGFydGljdWxhciBsYXlvdXQgYW5kIGNhbm5vdCBoYW5kbGUgYW55dGhpbmcgZWxzZSkuIFRoZXJlIGFyZSB0d28gcG9zc2libGUKKyAgc29sdXRpb25zIHRvIHRoaXMgcHJvYmxlbToKKworICAxLiBDaGFuZ2UgdGhlIEJJT1MgVVNCIERldmljZSBzZXR0aW5nIHRvIEhERCBtb2RlLiBUaGUgbGFiZWwgd2lsbCB2YXJ5IGJ5CisgICAgIGRldmljZSwgYnV0IHRoZSBpZGVhIGlzIHRvIGZvcmNlIEJJT1MgdG8gcmVhZCB0aGUgQ3lsaW5kZXIvSGVhZC9TZWN0b3IKKyAgICAgZ2VvbWV0cnkgZnJvbSB0aGUgZGV2aWNlLgorCisgIDIuIFdpdGhvdXQgc3VjaCBhbiBvcHRpb24sIHRoZSBCSU9TIGdlbmVyYWxseSBib290cyB0aGUgZGV2aWNlIGluIFVTQi1aSVAKKyAgICAgbW9kZS4gVG8gd3JpdGUgYW4gaW1hZ2UgdG8gYSBVU0IgZGV2aWNlIHRoYXQgd2lsbCBiZSBib290YWJsZSBpbgorICAgICBVU0ItWklQIG1vZGUsIGNhcnJ5IG91dCB0aGUgZm9sbG93aW5nIGFjdGlvbnM6CisKKyAgICAgYS4gRGV0ZXJtaW5lIHRoZSBnZW9tZXRyeSBvZiB5b3VyIFVTQiBkZXZpY2UgdXNpbmcgZmRpc2s6CisKKyAgICAgIyBmZGlzayAvZGV2L3NkYgorICAgICBDb21tYW5kIChtIGZvciBoZWxwKTogcAorCisgICAgIERpc2sgL2Rldi9zZGI6IDQwMTEgTUIsIDQwMTE0OTEzMjggYnl0ZXMKKyAgICAgMTI0IGhlYWRzLCA2MiBzZWN0b3JzL3RyYWNrLCAxMDE5IGN5bGluZGVycywgdG90YWwgNzgzNDk0NCBzZWN0b3JzCisgICAgIC4uLgorCisgICAgIENvbW1hbmQgKG0gZm9yIGhlbHApOiBxCisKKyAgICAgYi4gQ29uZmlndXJlIHRoZSBVU0IgZGV2aWNlIGZvciBVU0ItWklQIG1vZGU6CisgICAgIAorICAgICAjIG1rZGlza2ltYWdlIC00IC9kZXYvc2RiIDEwMTkgMTI0IDYyCisKKyAgICAgV2hlcmUgMTAxOSwgMTI0IGFuZCA2MiBhcmUgdGhlIGN5bGluZGVyLCBoZWFkIGFuZCBzZWN0b3JzL3RyYWNrIGNvdW50cworICAgICBhcyByZXBvcnRlZCBieSBmZGlzayAoc3Vic3RpdHV0ZSB0aGUgdmFsdWVzIHJlcG9ydGVkIGZvciB5b3VyIGRldmljZSkuCisgICAgIFdoZW4gdGhlIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQgYW5kIHRoZSBhY2Nlc3MgTEVEIChpZiBhbnkpIG9uIHRoZQorICAgICBkZXZpY2Ugc3RvcHMgZmxhc2hpbmcsIHJlbW92ZSBhbmQgcmVpbnNlcnQgdGhlIGRldmljZSB0byBhbGxvdyB0aGUKKyAgICAga2VybmVsIHRvIGRldGVjdCB0aGUgbmV3IHBhcnRpdGlvbiBsYXlvdXQuCisKKyAgICAgYy4gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIGltYWdlIHRvIHRoZSBVU0ItWklQIG1vZGUgZGV2aWNlOgorCisgICAgICMgbWtkaXIgL3RtcC9pbWFnZQorICAgICAjIG1rZGlyIC90bXAvdXNia2V5CisgICAgICMgbW91bnQgLW8gbG9vcCBjb3JlLWltYWdlLW1pbmltYWwtZ2VuZXJpY3g4Ni5oZGRpbWcgIC90bXAvaW1hZ2UKKyAgICAgIyBtb3VudCAvZGV2L3NkYjQgL3RtcC91c2JrZXkKKyAgICAgIyBjcCAtcmYgL3RtcC9pbWFnZS8qIC90bXAvdXNia2V5CisKKyAgICAgZC4gSW5zdGFsbCB0aGUgc3lzbGludXggYm9vdCBsb2FkZXI6CisKKyAgICAgIyBzeXNsaW51eCAvZGV2L3NkYjQKKworICAgICBlLiBVbm1vdW50IGV2ZXJ5dGhpbmc6CisKKyAgICAgIyB1bW91bnQgL3RtcC9pbWFnZQorICAgICAjIHVtb3VudCAvdG1wL3VzYmtleQorCisgIEluc3RhbGwgdGhlIGJvb3QgZGV2aWNlIGluIHRoZSB0YXJnZXQgYm9hcmQgYW5kIGNvbmZpZ3VyZSB0aGUgQklPUyB0byBib290CisgIGZyb20gaXQuCisKKyAgRm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgVVNCLVpJUCBzY2VuYXJpbywgc2VlIHRoZSBzeXNsaW51eCBkb2N1bWVudGF0aW9uOgorICBodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvP3A9Ym9vdC9zeXNsaW51eC9zeXNsaW51eC5naXQ7YT1ibG9iX3BsYWluO2Y9ZG9jL3VzYmtleS50eHQ7aGI9SEVBRAorCisKK1RleGFzIEluc3RydW1lbnRzIEJlYWdsZWJvbmUgKGJlYWdsZWJvbmUpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgQmVhZ2xlYm9uZSBpcyBhbiBBUk0gQ29ydGV4LUE4IGRldmVsb3BtZW50IGJvYXJkIHdpdGggVVNCLCBFdGhlcm5ldCwgMkQvM0QKK2FjY2VsZXJhdGVkIGdyYXBoaWNzLCBhdWRpbywgc2VyaWFsLCBKVEFHLCBhbmQgU0QvTU1DLiBUaGUgQmxhY2sgYWRkcyBhIGZhc3RlcgorQ1BVLCBtb3JlIFJBTSwgZU1NQyBmbGFzaCBhbmQgYSBtaWNybyBIRE1JIHBvcnQuIFRoZSBiZWFnbGVib25lIE1BQ0hJTkUgaXMKK3Rlc3RlZCBvbiB0aGUgZm9sbG93aW5nIHBsYXRmb3JtczoKKworICBvIEJlYWdsZWJvbmUgQmxhY2sgQTYKKyAgbyBCZWFnbGVib25lIEE2ICh0aGUgb3JpZ2luYWwgIldoaXRlIiBtb2RlbCkKKworVGhlIEJlYWdsZWJvbmUgQmxhY2sgaGFzIGVNTUMsIHdoaWxlIHRoZSBXaGl0ZSBkb2VzIG5vdC4gUHJlc3NpbmcgdGhlIFVTRVIvQk9PVAorYnV0dG9uIHdoZW4gcG93ZXJpbmcgb24gd2lsbCB0ZW1wb3JhcmlseSBjaGFuZ2UgdGhlIGJvb3Qgb3JkZXIuIEJ1dCBmb3IgdGhlIHNha2UKK29mIHNpbXBsaWNpdHksIHRoZXNlIGluc3RydWN0aW9ucyBhc3N1bWUgeW91IGhhdmUgZXJhc2VkIHRoZSBlTU1DIG9uIHRoZSBCbGFjaywKK3NvIGl0cyBib290IGJlaGF2aW9yIG1hdGNoZXMgdGhhdCBvZiB0aGUgV2hpdGUgYW5kIGJvb3RzIG9mZiBvZiBTRCBjYXJkLiBUbyBkbwordGhpcywgaXNzdWUgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBmcm9tIHRoZSB1LWJvb3QgcHJvbXB0OgorCisgICAgIyBtbWMgZGV2IDEKKyAgICAjIG1tYyBlcmFzZSAwIDUxMgorCitUbyBmdXJ0aGVyIHRhaWxvciB0aGVzZSBpbnN0cnVjdGlvbnMgZm9yIHlvdXIgYm9hcmQsIHBsZWFzZSByZWZlciB0byB0aGUKK2RvY3VtZW50YXRpb24gYXQgaHR0cDovL3d3dy5iZWFnbGVib2FyZC5vcmcvYm9uZSBhbmQgaHR0cDovL3d3dy5iZWFnbGVib2FyZC5vcmcvYmxhY2sKKworRnJvbSBhIExpbnV4IHN5c3RlbSB3aXRoIGFjY2VzcyB0byB0aGUgaW1hZ2UgZmlsZXMgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzCithcyByb290LCByZXBsYWNpbmcgbW1jYmxrMCogd2l0aCB0aGUgU0QgY2FyZCBkZXZpY2Ugb24geW91ciBtYWNoaW5lIChzdWNoIGFzIHNkYworaWYgdXNlZCB2aWEgYSB1c2IgY2FyZCByZWFkZXIpOgorCisgIDEuIFBhcnRpdGlvbiBhbmQgZm9ybWF0IGFuIFNEIGNhcmQ6CisgICAgICMgZmRpc2sgLWx1IC9kZXYvbW1jYmxrMAorCisgICAgIERpc2sgL2Rldi9tbWNibGswOiAzOTUxIE1CLCAzOTUxMDM0MzY4IGJ5dGVzCisgICAgIDI1NSBoZWFkcywgNjMgc2VjdG9ycy90cmFjaywgNDgwIGN5bGluZGVycywgdG90YWwgNzcxNjg2NCBzZWN0b3JzCisgICAgIFVuaXRzID0gc2VjdG9ycyBvZiAxICogNTEyID0gNTEyIGJ5dGVzCisKKyAgICAgICAgICAgICBEZXZpY2UgQm9vdCAgICAgIFN0YXJ0ICAgICAgICAgRW5kICAgICAgQmxvY2tzICBJZCBTeXN0ZW0KKyAgICAgL2Rldi9tbWNibGswcDEgICAqICAgICAgICAgIDYzICAgICAgMTQ0NTg0ICAgICAgIDcyMjYxICAgYyBXaW45NSBGQVQzMiAoTEJBKQorICAgICAvZGV2L21tY2JsazBwMiAgICAgICAgICAxNDQ1ODUgICAgICA0NjU4ODQgICAgICAxNjA2NTAgIDgzIExpbnV4CisKKyAgICAgIyBta2ZzLnZmYXQgLUYgMTYgLW4gImJvb3QiIC9kZXYvbW1jYmxrMHAxCisgICAgICMgbWtlMmZzIC1qIC1MICJyb290IiAvZGV2L21tY2JsazBwMgorCisgIFRoZSBmb2xsb3dpbmcgYXNzdW1lcyB0aGUgU0QgY2FyZCBwYXJ0aXRpb25zIDEgYW5kIDIgYXJlIG1vdW50ZWQgYXQKKyAgL21lZGlhL2Jvb3QgYW5kIC9tZWRpYS9yb290IHJlc3BlY3RpdmVseS4gUmVtb3ZpbmcgdGhlIGNhcmQgYW5kIHJlaW5zZXJ0aW5nCisgIGl0IHdpbGwgZG8ganVzdCB0aGF0IG9uIG1vc3QgbW9kZXJuIExpbnV4IGRlc2t0b3AgZW52aXJvbm1lbnRzLgorCisgIFRoZSBmaWxlcyByZWZlcmVuY2VkIGJlbG93IGFyZSBtYWRlIGF2YWlsYWJsZSBhZnRlciB0aGUgYnVpbGQgaW4KKyAgYnVpbGQvdG1wL2RlcGxveS9pbWFnZXMuCisKKyAgMi4gSW5zdGFsbCB0aGUgYm9vdCBsb2FkZXJzCisgICAgICMgY3AgTUxPLWJlYWdsZWJvbmUgL21lZGlhL2Jvb3QvTUxPCisgICAgICMgY3AgdS1ib290LWJlYWdsZWJvbmUuaW1nIC9tZWRpYS9ib290L3UtYm9vdC5pbWcKKworICAzLiBJbnN0YWxsIHRoZSByb290IGZpbGVzeXN0ZW0KKyAgICAgIyB0YXIgeCAtQyAvbWVkaWEvcm9vdCAtZiBjb3JlLWltYWdlLSRJTUFHRV9UWVBFLWJlYWdsZWJvbmUudGFyLmJ6MgorCisgIDQuIElmIHVzaW5nIGNvcmUtaW1hZ2UtYmFzZSBvciBjb3JlLWltYWdlLXNhdG8gaW1hZ2VzLCB0aGUgU0QgY2FyZCBpcyByZWFkeQorICAgICBhbmQgcm9vdGZzIGFscmVhZHkgY29udGFpbnMgdGhlIGtlcm5lbCwgbW9kdWxlcyBhbmQgZGV2aWNlIHRyZWUgKERUQikKKyAgICAgZmlsZXMgbmVjZXNzYXJ5IHRvIGJlIGJvb3RlZCB3aXRoIFUtYm9vdCdzIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgc28KKyAgICAgc2tpcCBkaXJlY3RseSB0byBzdGVwIDguCisgICAgIEZvciBjb3JlLWltYWdlLW1pbmltYWwsIHByb2NlZWQgdGhyb3VnaCBuZXh0IHN0ZXBzLgorCisgIDUuIElmIHVzaW5nIGNvcmUtaW1hZ2UtbWluaW1hbCByb290ZnMsIGluc3RhbGwgdGhlIG1vZHVsZXMKKyAgICAgIyB0YXIgeCAtQyAvbWVkaWEvcm9vdCAtZiBtb2R1bGVzLWJlYWdsZWJvbmUudGd6CisKKyAgNi4gSWYgdXNpbmcgY29yZS1pbWFnZS1taW5pbWFsIHJvb3RmcywgaW5zdGFsbCB0aGUga2VybmVsIHpJbWFnZSBpbnRvIC9ib290CisgICAgIGRpcmVjdG9yeSBvZiByb290ZnMKKyAgICAgIyBjcCB6SW1hZ2UtYmVhZ2xlYm9uZS5iaW4gL21lZGlhL3Jvb3QvYm9vdC96SW1hZ2UKKworICA3LiBJZiB1c2luZyBjb3JlLWltYWdlLW1pbmltYWwgcm9vdGZzLCBhbHNvIGluc3RhbGwgZGV2aWNlIHRyZWUgKERUQikgZmlsZXMKKyAgICAgaW50byAvYm9vdCBkaXJlY3Rvcnkgb2Ygcm9vdGZzCisgICAgICMgY3AgekltYWdlLWFtMzM1eC1ib25lLmR0YiAvbWVkaWEvcm9vdC9ib290L2FtMzM1eC1ib25lLmR0YgorICAgICAjIGNwIHpJbWFnZS1hbTMzNXgtYm9uZWJsYWNrLmR0YiAvbWVkaWEvcm9vdC9ib290L2FtMzM1eC1ib25lYmxhY2suZHRiCisKKyAgOC4gVW5tb3VudCB0aGUgU0QgcGFydGl0aW9ucywgaW5zZXJ0IHRoZSBTRCBjYXJkIGludG8gdGhlIEJlYWdsZWJvbmUsIGFuZAorICAgICBib290IHRoZSBCZWFnbGVib25lCisKKworRnJlZXNjYWxlIE1QQzgzMTVFLVJEQiAobXBjODMxNWUtcmRiKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgTVBDODMxNSBQb3dlclBDIHJlZmVyZW5jZSBwbGF0Zm9ybSAoTVBDODMxNUUtUkRCKSBpcyBhaW1lZCBhdCBoYXJkd2FyZSBhbmQKK3NvZnR3YXJlIGRldmVsb3BtZW50IG9mIG5ldHdvcmsgYXR0YWNoZWQgc3RvcmFnZSAoTkFTKSBhbmQgZGlnaXRhbCBtZWRpYSBzZXJ2ZXIKK2FwcGxpY2F0aW9ucy4gVGhlIE1QQzgzMTVFLVJEQiBmZWF0dXJlcyB0aGUgUG93ZXJRVUlDQyBJSSBQcm8gcHJvY2Vzc29yLCB3aGljaAoraW5jbHVkZXMgYSBidWlsdC1pbiBzZWN1cml0eSBhY2NlbGVyYXRvci4KKworKE5vdGU6IHlvdSBtYXkgZmluZCBpdCBlYXNpZXIgdG8gb3JkZXIgTVBDODMxNUUtUkRCQTsgdGhpcyBhcHBlYXJzIHRvIGJlIHRoZQorc2FtZSBib2FyZCBpbiBhbiBlbmNsb3N1cmUgd2l0aCBhY2Nlc3Nvcmllcy4gSW4gYW55IGNhc2UgaXQgaXMgZnVsbHkKK2NvbXBhdGlibGUgd2l0aCB0aGUgaW5zdHJ1Y3Rpb25zIGdpdmVuIGhlcmUuKQorCitTZXR1cCBpbnN0cnVjdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3Ugd2lsbCBuZWVkIHRoZSBmb2xsb3dpbmc6CisqIE5GUyByb290IHNldHVwIG9uIHlvdXIgd29ya3N0YXRpb24KKyogVEZUUCBzZXJ2ZXIgaW5zdGFsbGVkIG9uIHlvdXIgd29ya3N0YXRpb24KKyogU3RyYWlnaHQtdGhydSA5LWNvbmR1Y3RvciBzZXJpYWwgY2FibGUgKERCOSwgTS9GKSBjb25uZWN0ZWQgZnJvbSB5b3VyIAorICBQQyB0byBVQVJUMQorKiBFdGhlcm5ldCBjb25uZWN0ZWQgdG8gdGhlIGZpcnN0IGV0aGVybmV0IHBvcnQgb24gdGhlIGJvYXJkCisKKy0tLSBQcmVwYXJhdGlvbiAtLS0KKworTm90ZTogaWYgeW91IGhhdmUgYWx0ZXJlZCB5b3VyIGJvYXJkJ3MgZXRoZXJuZXQgTUFDIGFkZHJlc3MoZXMpIGZyb20gdGhlCitkZWZhdWx0cywgb3IgeW91IG5lZWQgdG8gZG8gc28gYmVjYXVzZSB5b3Ugd2FudCBtdWx0aXBsZSBib2FyZHMgb24gdGhlIHNhbWUKK25ldHdvcmssIHRoZW4geW91IHdpbGwgbmVlZCB0byBjaGFuZ2UgdGhlIHZhbHVlcyBpbiB0aGUgZHRzIGZpbGUgKHBhdGNoCitsaW51eC9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxNWVyZGIuZHRzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSkuIElmCit5b3UgaGF2ZSBsZWZ0IHRoZW0gYXQgdGhlIGZhY3RvcnkgZGVmYXVsdCB0aGVuIHlvdSBzaG91bGRuJ3QgbmVlZCB0byBkbworYW55dGhpbmcgaGVyZS4KKworLS0tIEJvb3RpbmcgZnJvbSBORlMgcm9vdCAtLS0KKworTG9hZCB0aGUga2VybmVsIGFuZCBkdGIgKGRldmljZSB0cmVlIGJsb2IpLCBhbmQgYm9vdCB0aGUgc3lzdGVtIGFzIGZvbGxvd3M6CisKKyAxLiBHZXQgdGhlIGtlcm5lbCAodUltYWdlLW1wYzgzMTVlLXJkYi5iaW4pIGFuZCBkdGIgKHVJbWFnZS1tcGM4MzE1ZS1yZGIuZHRiKQorICAgIGZpbGVzIGZyb20gdGhlIHRtcC9kZXBsb3kgZGlyZWN0b3J5LCBhbmQgbWFrZSB0aGVtIGF2YWlsYWJsZSBvbiB5b3VyIFRGVFAKKyAgICBzZXJ2ZXIuCisKKyAyLiBDb25uZWN0IHRoZSBib2FyZCdzIGZpcnN0IHNlcmlhbCBwb3J0IHRvIHlvdXIgd29ya3N0YXRpb24gYW5kIHRoZW4gc3RhcnQgdXAKKyAgICB5b3VyIGZhdm91cml0ZSBzZXJpYWwgdGVybWluYWwgc28gdGhhdCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGludGVyYWN0IHdpdGgKKyAgICB0aGUgc2VyaWFsIGNvbnNvbGUuIElmIHlvdSBkb24ndCBoYXZlIGEgZmF2b3VyaXRlLCBwaWNvY29tIGlzIHN1Z2dlc3RlZDoKKworICAkIHBpY29jb20gL2Rldi90dHlVU0IwIC1iIDExNTIwMAorCisgMy4gUG93ZXIgdXAgb3IgcmVzZXQgdGhlIGJvYXJkIGFuZCBwcmVzcyBhIGtleSBvbiB0aGUgdGVybWluYWwgd2hlbiBwcm9tcHRlZAorICAgIHRvIGdldCB0byB0aGUgVS1Cb290IGNvbW1hbmQgbGluZQorCisgNC4gU2V0IHVwIHRoZSBlbnZpcm9ubWVudCBpbiBVLUJvb3Q6CisKKyA9PiBzZXRlbnYgaXBhZGRyIDxib2FyZCBpcD4KKyA9PiBzZXRlbnYgc2VydmVyaXAgPHRmdHAgc2VydmVyIGlwPgorID0+IHNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9PG5mc3Jvb3QgaXA+Ojxyb290ZnMgcGF0aD4gaXA9PGJvYXJkIGlwPjo8c2VydmVyIGlwPjo8Z2F0ZXdheSBpcD46MjU1LjI1NS4yNTUuMDptcGM4MzE1ZTpldGgwOm9mZiBjb25zb2xlPXR0eVMwLDExNTIwMAorCisgNS4gRG93bmxvYWQgdGhlIGtlcm5lbCBhbmQgZHRiLCBhbmQgYm9vdDoKKworID0+IHRmdHAgMTAwMDAwMCB1SW1hZ2UtbXBjODMxNWUtcmRiLmJpbgorID0+IHRmdHAgMjAwMDAwMCB1SW1hZ2UtbXBjODMxNWUtcmRiLmR0YgorID0+IGJvb3RtIDEwMDAwMDAgLSAyMDAwMDAwCisKKy0tLSBCb290aW5nIGZyb20gSkZGUzIgcm9vdCAtLS0KKworIDEuIEZpcnN0IGJvb3QgdGhlIGJvYXJkIHdpdGggTkZTIHJvb3QuCisKKyAyLiBFcmFzZSB0aGUgTVREIHBhcnRpdGlvbiB3aGljaCB3aWxsIGJlIHVzZWQgYXMgcm9vdDoKKworICAgICQgZmxhc2hfZXJhc2VhbGwgIC9kZXYvbXRkMworCisgMy4gQ29weSB0aGUgSkZGUzIgaW1hZ2UgdG8gdGhlIE1URCBwYXJ0aXRpb246CisKKyAgICAkIGZsYXNoY3AgY29yZS1pbWFnZS1taW5pbWFsLW1wYzgzMTVlLXJkYi5qZmZzMiAvZGV2L210ZDMKKworIDQuIFRoZW4gcmVib290IHRoZSBib2FyZCBhbmQgc2V0IHVwIHRoZSBlbnZpcm9ubWVudCBpbiBVLUJvb3Q6CisKKyAgICA9PiBzZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L210ZGJsb2NrMyByb290ZnN0eXBlPWpmZnMyIGNvbnNvbGU9dHR5UzAsMTE1MjAwCisKKworVWJpcXVpdGkgTmV0d29ya3MgRWRnZVJvdXRlciBMaXRlIChlZGdlcm91dGVyKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgRWRnZVJvdXRlciBMaXRlIGlzIHBhcnQgb2YgdGhlIEVkZ2VNYXggc2VyaWVzLiBJdCBpcyBhIE1JUFM2NCByb3V0ZXIKKyhiYXNlZCBvbiB0aGUgQ2F2aXVtIE9jdGVvbiBwcm9jZXNzb3IpIHdpdGggNTEyTUIgb2YgUkFNLCB3aGljaCB1c2VzIGFuCitpbnRlcm5hbCBVU0IgcGVuZHJpdmUgZm9yIHN0b3JhZ2UuCisKK1NldHVwIGluc3RydWN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSB3aWxsIG5lZWQgdGhlIGZvbGxvd2luZzoKKyogUko0NSAtPiBzZXJpYWwgKCJyb2xsb3ZlciIpIGNhYmxlIGNvbm5lY3RlZCBmcm9tIHlvdXIgUEMgdG8gdGhlIENPTlNPTEUKKyAgcG9ydCBvbiB0aGUgZGV2aWNlCisqIEV0aGVybmV0IGNvbm5lY3RlZCB0byB0aGUgZmlyc3QgZXRoZXJuZXQgcG9ydCBvbiB0aGUgYm9hcmQKKworSWYgdXNpbmcgTkZTIGFzIHBhcnQgb2YgdGhlIHNldHVwIHByb2Nlc3MsIHlvdSB3aWxsIGFsc28gbmVlZDoKKyogTkZTIHJvb3Qgc2V0dXAgb24geW91ciB3b3Jrc3RhdGlvbgorKiBURlRQIHNlcnZlciBpbnN0YWxsZWQgb24geW91ciB3b3Jrc3RhdGlvbiAoaWYgZmV0Y2hpbmcgdGhlIGtlcm5lbCBmcm9tCisgIFRGVFAsIHNlZSBiZWxvdykuCisKKy0tLSBQcmVwYXJhdGlvbiAtLS0KKworQnVpbGQgYW4gaW1hZ2UgKGUuZy4gY29yZS1pbWFnZS1taW5pbWFsKSB1c2luZyAiZWRnZXJvdXRlciIgYXMgdGhlIE1BQ0hJTkUuCitJbiB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9uIGl0IGlzIGJhc2VkIG9uIGNvcmUtaW1hZ2UtbWluaW1hbC4gQW5vdGhlciB0YXJnZXQKK21heSBiZSBzaW1pbGlhciB3aXRoIGl0LgorCistLS0gQm9vdGluZyBmcm9tIE5GUyByb290IC8ga2VybmVsIHZpYSBURlRQIC0tLQorCitMb2FkIHRoZSBrZXJuZWwsIGFuZCBib290IHRoZSBzeXN0ZW0gYXMgZm9sbG93czoKKworIDEuIEdldCB0aGUga2VybmVsICh2bWxpbnV4KSBmaWxlIGZyb20gdGhlIHRtcC9kZXBsb3kvaW1hZ2VzL2VkZ2Vyb3V0ZXIKKyAgICBkaXJlY3RvcnksIGFuZCBtYWtlIHRoZW0gYXZhaWxhYmxlIG9uIHlvdXIgVEZUUCBzZXJ2ZXIuCisKKyAyLiBDb25uZWN0IHRoZSBib2FyZCdzIGZpcnN0IHNlcmlhbCBwb3J0IHRvIHlvdXIgd29ya3N0YXRpb24gYW5kIHRoZW4gc3RhcnQgdXAKKyAgICB5b3VyIGZhdm91cml0ZSBzZXJpYWwgdGVybWluYWwgc28gdGhhdCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGludGVyYWN0IHdpdGgKKyAgICB0aGUgc2VyaWFsIGNvbnNvbGUuIElmIHlvdSBkb24ndCBoYXZlIGEgZmF2b3VyaXRlLCBwaWNvY29tIGlzIHN1Z2dlc3RlZDoKKworICAkIHBpY29jb20gL2Rldi90dHlTMCAtYiAxMTUyMDAKKworIDMuIFBvd2VyIHVwIG9yIHJlc2V0IHRoZSBib2FyZCBhbmQgcHJlc3MgYSBrZXkgb24gdGhlIHRlcm1pbmFsIHdoZW4gcHJvbXB0ZWQKKyAgICB0byBnZXQgdG8gdGhlIFUtQm9vdCBjb21tYW5kIGxpbmUKKworIDQuIFNldCB1cCB0aGUgZW52aXJvbm1lbnQgaW4gVS1Cb290OgorCisgPT4gc2V0ZW52IGlwYWRkciA8Ym9hcmQgaXA+CisgPT4gc2V0ZW52IHNlcnZlcmlwIDx0ZnRwIHNlcnZlciBpcD4KKworIDUuIERvd25sb2FkIHRoZSBrZXJuZWwgYW5kIGJvb3Q6CisKKyA9PiB0ZnRwIHRmdHAgJGxvYWRhZGRyIHZtbGludXgKKyA9PiBib290b2N0bGludXggJGxvYWRhZGRyIGNvcmVtYXNrPTB4MyByb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9PG5mc3Jvb3QgaXA+Ojxyb290ZnMgcGF0aD4gaXA9PGJvYXJkIGlwPjo8c2VydmVyIGlwPjo8Z2F0ZXdheSBpcD46PG5ldG1hc2s+OmVkZ2Vyb3V0ZXI6ZXRoMDpvZmYgbXRkcGFydHM9cGh5c19tYXBwZWRfZmxhc2g6NTEyayhib290MCksNTEyayhib290MSksNjRrQDMwNzJrKGVlcHJvbSkKKworLS0tIEJvb3RpbmcgZnJvbSBVU0Igcm9vdCAtLS0KKworVG8gYm9vdCBmcm9tIHRoZSBVU0IgZGlzaywgeW91IGVpdGhlciBuZWVkIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBlZGdlcm91dGVyCitib3ggYW5kIHBvcHVsYXRlIGl0IGZyb20gYW5vdGhlciBjb21wdXRlciwgb3IgdXNlIGEgcHJldmlvdXNseSBib290ZWQgTkZTCitpbWFnZSBhbmQgcG9wdWxhdGUgZnJvbSB0aGUgZWRnZXJvdXRlciBpdHNlbGYuCisKK1R5cGUgMTogTW91bnRlZCBVU0IgZGlzaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIGJvb3QgZnJvbSB0aGUgVVNCIGRpc2sgdGhlcmUgYXJlIHR3byBhdmFpbGFibGUgcGFydGl0aW9ucyBvbiB0aGUgZmFjdG9yeQorVVNCIHN0b3JhZ2UuIFRoZSByZXN0IG9mIHRoaXMgZ3VpZGUgYXNzdW1lcyB0aGF0IHRoZXNlIHBhcnRpdGlvbnMgYXJlIGxlZnQKK2ludGFjdC4gSWYgeW91IGNoYW5nZSB0aGUgcGFydGl0aW9uIHNjaGVtZSwgeW91IG11c3QgdXBkYXRlIHlvdXIgYm9vdCBtZXRob2QKK2FwcHJvcHJpYXRlbHkuCisKK1RoZSBzdGFuZGFyZCBwYXJ0aXRpb25zIGFyZToKKworICAtIDE6IHZmYXQgcGFydGl0aW9uIGNvbnRhaW5pbmcgZmFjdG9yeSBrZXJuZWxzCisgIC0gMjogZXh0MyBwYXJ0aXRpb24gZm9yIHRoZSByb290IGZpbGVzeXN0ZW0uCisKK1lvdSBjYW4gcGxhY2UgdGhlIGtlcm5lbCBvbiBlaXRoZXIgcGFydGl0aW9uIDEsIG9yIHBhcnRpdGlvbiAyLCBidXQgdGhlIHJvb2ZzCittdXN0IGdvIG9uIHBhcnRpdGlvbiAyIChkdWUgdG8gaXRzIHNpemUpLgorCitOb3RlOiBJZiB5b3UgcGxhY2UgdGhlIGtlcm5lbCBvbiB0aGUgZXh0MyBwYXJ0aXRpb24sIHlvdSBtdXN0IHJlLWNyZWF0ZSB0aGUKKyAgICAgIGV4dDMgZmlsZXN5c3RlbSwgc2luY2UgdGhlIGZhY3RvcnkgdS1ib290IGNhbiBvbmx5IGhhbmRsZSAxMjggYnl0ZSBpbm9kZXMgYW5kCisgICAgICBjYW5ub3QgcmVhZCB0aGUgcGFydGl0aW9uIG90aGVyd2lzZS4KKworU3RlcHM6CisKKyAxLiBSZW1vdmUgdGhlIFVTQiBkaXNrIGZyb20gdGhlIGVkZ2Vyb3V0ZXIgYW5kIGluc2VydCBpdCBpbnRvIGEgY29tcHV0ZXIKKyAgICB0aGF0IGhhcyBhY2Nlc3MgdG8geW91ciBidWlsZCBhcnRpZmFjdHMuCisKKyAyLiBDb3B5IHRoZSBrZXJuZWwgaW1hZ2UgdG8gdGhlIFVTQiBzdG9yYWdlIChhc3N1bWluZyBkaXNjb3ZlcmVkIGFzICdzZGInIG9uCisgICAgdGhlIGRldmVsb3BtZW50IG1hY2hpbmUpOgorCisgICAgMmEpIGlmIGJvb3RpbmcgZnJvbSB2ZmF0CisgCisgICAgICAgICMgbW91bnQgL2Rldi9zZGIxIC9tbnQKKyAgICAgICAgIyBjcCB0bXAvZGVwbG95L2ltYWdlcy9lZGdlcm91dGVyL3ZtbGludXggL21udAorICAgICAgICAjIHVtb3VudCAvbW50CisKKyAgICAyYikgaWYgYm9vdGluZyBmcm9tIGV4dDMKKworICAgICAgICAjIG1rZnMuZXh0MyAtSSAxMjggL2Rldi9zZGIyCisgICAgICAgICMgbW91bnQgL2Rldi9zZGIyIC9tbnQKKyAgICAgICAgIyBta2RpciAvbW50L2Jvb3QKKyAgICAgICAgIyBjcCB0bXAvZGVwbG95L2ltYWdlcy9lZGdlcm91dGVyL3ZtbGludXggL21udC9ib290CisgICAgICAgICMgdW1vdW50IC9tbnQKKworIDMuIEV4dHJhY3QgdGhlIHJvb3RmcyB0byB0aGUgVVNCIHN0b3JhZ2UgZXh0MyBwYXJ0aXRpb24KKworICAgICAgICAjIG1vdW50IC9kZXYvc2RiMiAvbW50CisgICAgICAgICMgdGFyIC14dmpwZiBjb3JlLWltYWdlLW1pbmltYWwtWFhYLnRhci5iejIgLUMgL21udAorICAgICAgICAjIHVtb3VudCAvbW50CisKKyA0LiBSZWJvb3QgdGhlIGJvYXJkIGFuZCBwcmVzcyBhIGtleSBvbiB0aGUgdGVybWluYWwgd2hlbiBwcm9tcHRlZCB0byBnZXQgdG8gdGhlIFUtQm9vdAorICAgIGNvbW1hbmQgbGluZToKKworIDUuIExvYWQgdGhlIGtlcm5lbCBhbmQgYm9vdDoKKworICAgIDVhKSB2ZmF0IGJvb3QKKworICAgICAgICAgPT4gZmF0bG9hZCB1c2IgMDoxICRsb2FkYWRkciB2bWxpbnV4CisKKyAgICA1YikgZXh0MyBib290CisKKyAgICAgICAgID0+IGV4dDJsb2FkIHVzYiAwOjIgJGxvYWRhZGRyIGJvb3Qvdm1saW51eAorIAorICAgID0+IGJvb3RvY3RsaW51eCAkbG9hZGFkZHIgY29yZW1hc2s9MHgzIHJvb3Q9L2Rldi9zZGEyIHJ3IHJvb3R3YWl0IG10ZHBhcnRzPXBoeXNfbWFwcGVkX2ZsYXNoOjUxMmsoYm9vdDApLDUxMmsoYm9vdDEpLDY0a0AzMDcyayhlZXByb20pCisgCisKK1R5cGUgMjogTkZTCistLS0tLS0tLS0tLQorCitOb3RlOiBJZiB5b3UgcGxhY2UgdGhlIGtlcm5lbCBvbiB0aGUgZXh0MyBwYXJ0aXRpb24sIHlvdSBtdXN0IHJlLWNyZWF0ZSB0aGUKKyAgICAgIGV4dDMgZmlsZXN5c3RlbSwgc2luY2UgdGhlIGZhY3RvcnkgdS1ib290IGNhbiBvbmx5IGhhbmRsZSAxMjggYnl0ZSBpbm9kZXMgYW5kCisgICAgICBjYW5ub3QgcmVhZCB0aGUgcGFydGl0aW9uIG90aGVyd2lzZS4KKworICAgICAgVGhlc2UgYm9vdCBpbnN0cnVjdGlvbnMgYXNzdW1lIHRoYXQgeW91IGhhdmUgcmVjcmVhdGVkIHRoZSBleHQzIGZpbGVzeXN0ZW0gd2l0aAorICAgICAgMTI4IGJ5dGUgaW5vZGVzLCB5b3UgaGF2ZSBhbiB1cGRhdGVkIHVib290IG9yIHlvdSBhcmUgcnVubmluZyBhbmQgaW1hZ2UgY2FwYWJsZQorICAgICAgb2YgbWFraW5nIHRoZSBmaWxlc3lzdGVtIG9uIHRoZSBib2FyZCBpdHNlbGYuCisKKworIDEuIEJvb3QgZnJvbSBORlMgcm9vdAorCisgMi4gTW91bnQgdGhlIFVTQiBkaXNrIHBhcnRpdGlvbiAyIGFuZCB0aGVuIGV4dHJhY3QgdGhlIGNvbnRlbnRzIG9mCisgICAgdG1wL2RlcGxveS9jb3JlLWltYWdlLVhYWFgudGFyLmJ6MiBpbnRvIGl0LgorCisgICAgQmVmb3JlIHN0YXJ0aW5nLCBjb3B5IGNvcmUtaW1hZ2UtbWluaW1hbC14eHgudGFyLmJ6MiBhbmQgdm1saW51eCBpbnRvCisgICAgcm9vdGZzIHBhdGggb24geW91ciB3b3Jrc3RhdGlvbi4KKworICAgIGFuZCB0aGVuLAorICAKKyAgICAgICMgbW91bnQgL2Rldi9zZGEyIC9tZWRpYS9zZGEyCisgICAgICAjIHRhciAteHZqcGYgY29yZS1pbWFnZS1taW5pbWFsLVhYWC50YXIuYnoyIC1DIC9tZWRpYS9zZGEyCisgICAgICAjIGNwIHZtbGludXggL21lZGlhL3NkYTIvYm9vdC92bWxpbnV4CisgICAgICAjIHVtb3VudCAvbWVkaWEvc2RhMgorICAgICAgIyByZWJvb3QKKworIDMuIFJlYm9vdCB0aGUgYm9hcmQgYW5kIHByZXNzIGEga2V5IG9uIHRoZSB0ZXJtaW5hbCB3aGVuIHByb21wdGVkIHRvIGdldCB0byB0aGUgVS1Cb290CisgICAgY29tbWFuZCBsaW5lOgorCisgICAgIyByZWJvb3QKKworIDQuIExvYWQgdGhlIGtlcm5lbCBhbmQgYm9vdDoKKworICAgICAgPT4gZXh0MmxvYWQgdXNiIDA6MiAkbG9hZGFkZHIgYm9vdC92bWxpbnV4CisgICAgICA9PiBib290b2N0bGludXggJGxvYWRhZGRyIGNvcmVtYXNrPTB4MyByb290PS9kZXYvc2RhMiBydyByb290d2FpdCBtdGRwYXJ0cz1waHlzX21hcHBlZF9mbGFzaDo1MTJrKGJvb3QwKSw1MTJrKGJvb3QxKSw2NGtAMzA3MmsoZWVwcm9tKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL0FVVEhPUlMgYi95b2N0by1wb2t5L2JpdGJha2UvQVVUSE9SUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWZkNzhmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL0FVVEhPUlMKQEAgLTAsMCArMSwxMCBAQAorVGltIEFuc2VsbCA8bWl0aHJvQG1pdGhpcy5uZXQ+CitQaGlsIEJsdW5kZWxsIDxwYkBoYW5kaGVsZHMub3JnPgorU2ViIEZyYW5rZW5ndWwgPHNlYkBmcmFua2VuZ3VsLm9yZz4KK0hvbGdlciBGcmV5dGhlciA8aG9sZ2VyQG1vaWppLW1vYmlsZS5jb20+CitNYXJjaW4gSnVzemtpZXdpY3ogPG1hcmNpbkBqdXN6a2lld2ljei5jb20ucGw+CitDaHJpcyBMYXJzb24gPGtlcmdvdGhAaGFuZGhlbGRzLm9yZz4KK1VscmljaCBMdWNrYXMgPGx1Y2thc0BtdXNvZnQuZGU+CitNaWNrZXkgTGF1ZXIgPG1pY2tleUBWYW5pbGxlLmRlPgorUmljaGFyZCBQdXJkaWUgPHJwdXJkaWVAcnBzeXMubmV0PgorSG9sZ2VyIFNjaHVyaWcgPGhvbGdlcnNjaHVyaWdAZ214LmRlPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL0NPUFlJTkcgYi95b2N0by1wb2t5L2JpdGJha2UvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTExOTA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL0NPUFlJTkcKQEAgLTAsMCArMSwzMzkgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL0NoYW5nZUxvZyBiL3lvY3RvLXBva3kvYml0YmFrZS9DaGFuZ2VMb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFjMmE2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9DaGFuZ2VMb2cKQEAgLTAsMCArMSwzMTcgQEAKK0NoYW5nZXMgaW4gQml0YmFrZSAxLjkueDoKKwktIEFkZCBQRSAoUGFja2FnZSBFcG9jaCkgc3VwcG9ydCBmcm9tIFBoaWxpcHAgWmFiZWwgKHBINSkKKwktIFRyZWF0IHB5dGhvbiBmdW5jdGlvbnMgdGhlIHNhbWUgYXMgc2hlbGwgZnVuY3Rpb25zIGZvciBsb2dnaW5nCisJLSBVc2UgVE1QRElSL2Fub25mdW5jIGFzIGEgX19hbm9uZnVuYyB0ZW1wIGRpcmVjdG9yeSAoVCkKKwktIENhdGNoIHRydW5jYXRlZCBjYWNoZSBmaWxlIGVycm9ycworCS0gQWxsb3cgb3BlcmF0aW9ucyBvdGhlciB0aGFuIGFzc2lnbm1lbnQgb24gZmxhZyB2YXJpYWJsZXMKKwktIEFkZCBjb2RlIHRvIGhhbmRsZSBpbnRlci10YXNrIGRlcGVuZGVuY2llcworCS0gRml4IGNhY2hlIGVycm9ycyB3aGVuIGdlbmVyYXRpb24gZG90R3JhcGhzCisJLSBNYWtlIHN1cmUgX19pbmhlcml0X2NhY2hlIGlzIHVwZGF0ZWQgYmVmb3JlIGNhbGxpbmcgaW5jbHVkZSgpIChmcm9tIE1pY2hhZWwgS3JlbGluKQorCS0gRml4IGJ1ZyB3aGVuIHRhcmdldCB3YXMgaW4gQVNTVU1FX1BST1ZJREVEICgjMjIzNikKKwktIFJhaXNlIFBhcnNlRXJyb3IgZm9yIGZpbGVuYW1lcyB3aXRoIG11bHRpcGxlIHVuZGVyc2NvcmVzIGluc3RlYWQgb2YgaW5maW5pdGVseSBsb29waW5nICgjMjA2MikKKwktIEZpeCBpbnZhbGlkIHJlZ2V4cCBpbiBCQk1BU0sgZXJyb3IgaGFuZGxpbmcgKG1pc3NpbmcgaW1wb3J0KSAoIzExMjQpCisJLSBQcm9tb3RlIGNlcnRhaW4gd2FybmluZ3MgZnJvbSBkZWJ1ZyB0byBub3RlIDIgbGV2ZWwKKwktIFVwZGF0ZSBtYW51YWwKKwktIENvcnJlY3RseSByZWRpcmVjdCBzdGRpbiB3aGVuIGZvcmtpbmcKKwktIElmIHBhcnNpbmcgZXJyb3JzIGFyZSBmb3VuZCwgZXhpdCwgdG9vIG1hbnkgdXNlcnMgbWlzcyB0aGUgZXJyb3JzCisJLSBSZW1vdmUgc3VwcmlvdXJzIFBSRUZFUlJFRF9QUk9WSURFUiB3YXJuaW5ncworCS0gc3ZuIGZldGNoZXI6IEFkZCBfYnVpbGRzdm5jb21tYW5kIGZ1bmN0aW9uCisJLSBJbXByb3ZlIGNlcnRhaW4gZXJyb3IgbWVzc2FnZXMKKwktIFJld3JpdGUgc3ZuIGZldGNoZXIgdG8gbWFrZSBhZGRpbmcgZXh0cmEgb3BlcmF0aW9ucyBlYXNpZXIgCisJICBhcyBwYXJ0IG9mIGZ1dHVyZSBTUkNEQVRFPSJub3ciIGZpeGVzCisJICAocmVxdWlyZXMgbmV3IEZFVENIQ01EX3N2biBkZWZpbml0aW9uIGluIGJpdGJha2UuY29uZikKKwktIENoYW5nZSBTVk5ESVIgbGF5b3V0IHRvIGJlIG1vcmUgdW5pcXVlIChmaXhlcyAjMjY0NCBhbmQgIzI2MjQpCisJLSBBZGQgQ29uZmlnUGFyc2VkIEV2ZW50IGFmdGVyIGNvbmZpZ3VyYXRpb24gcGFyc2luZyBpcyBjb21wbGV0ZQorCS0gQWRkIFNSQ1JFViBzdXBwb3J0IGZvciBzdm4gZmV0Y2hlcgorCS0gZGF0YS5lbWl0X3ZhcigpIC0gb25seSBjYWxsIGdldFZhciBpZiB3ZSBuZWVkIHRoZSB2YXJpYWJsZQorCS0gU3RvcCBnZW5lcmF0aW5nIHRoZSBBIHZhcmlhYmxlIChzZWVtcyB0byBiZSBsZWdhY3kgY29kZSkKKwktIE1ha2Ugc3VyZSBpbnRlcnRhc2sgZGVwZW5kcyBnZXQgcHJvY2Vzc2VkIGNvcnJlY3RpbmcgaW4gcmVjdXJzaXZlIGRlcGVuZHMKKwktIEFkZCBwbi1QTiB0byBvdmVycmlkZXMgd2hlbiBldmFsdWF0aW5nIFBSRUZFUlJFRF9WRVJTSU9OCisJLSBJbXByb3ZlIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3IgYnkgc2tpcHBpbmcgdGFza3MgdGhhdCBoYXZlIAorCSAgYWxyZWFkeSBydW4gYmVmb3JlIHN0YXJ0aW5nIHRoZSBidWlsZCByYXRoZXIgdGhhbiBkdXJpbmcgaXQKKwktIEFkZCBwcm9maWxpbmcgb3B0aW9uICgtUCkKKwktIEFkZCBCQl9TUkNSRVZfUE9MSUNZIHZhcmlhYmxlIChjbGVhciBvciBjYWNoZSkgdG8gY29udHJvbCBTUkNSRVYgY2FjaGUKKwktIEFkZCBTUkNSRVZfRk9STUFUIHN1cHBvcnQKKwktIEZpeCBsb2NhbCBmZXRjaGVyJ3MgbG9jYWxwYXRoIHJldHVybiB2YWx1ZXMKKwktIEFwcGx5IE9WRVJSSURFUyBiZWZvcmUgcGVyZm9ybWluZyBpbW1lZGlhdGUgZXhwYW5zaW9ucworCS0gQWxsb3cgdGhlIC1iIC1lIG9wdGlvbiBjb21iaW5hdGlvbiB0byB0YWtlIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKwktIEZpeCBoYW5kbGluZyBvZiB2YXJpYWJsZXMgd2l0aCBleHBhbnNpb24gaW4gdGhlIG5hbWUgdXNpbmcgX2FwcGVuZC9fcHJlcGVuZAorCSAgZS5nLiBSUkVDT01NRU5EU18ke1BOfV9hcHBlbmRfeHl6ID0gImFiYyIKKwktIEFkZCBwbGFpbiBtZXNzYWdlIGZ1bmN0aW9uIHRvIGJiLm1zZworCS0gU29ydCB0aGUgbGlzdCBvZiBwcm92aWRlcnMgYmVmb3JlIHByb2Nlc3Npbmcgc28gZGVwZW5kZW5jeSBwcm9ibGVtcyBhcmUgCisJICByZXByb2R1Y2libGUgcmF0aGVyIHRoYW4gZWZmZWN0aXZlbHkgcmFuZG9tCisJLSBGaXgvaW1wcm92ZSBiaXRiYWtlIC1zIG91dHB1dAorCS0gQWRkIGxvY2tpbmcgZm9yIGZldGNoZXJzIHNvIG9ubHkgb25lIHRyaWVzIHRvIGZldGNoIGEgZ2l2ZW4gZmlsZSBhdCBhIGdpdmVuIHRpbWUKKwktIEZpeCBpbnQoMCkvTm9uZSBjb25mdXNpb24gaW4gcnVucXVldWUucHkgd2hpY2ggY2F1c2VzIHJhbmRvbSBnYXBzIGluIGRlcGVuZGVuY3kgY2hhaW5zCSAgCisJLSBFeHBhbmQgZGF0YSBpbiBhZGR0YXNrcworCS0gUHJpbnQgdGhlIGxpc3Qgb2YgbWlzc2luZyBERVBFTkRTLFJERVBFTkRTIGZvciB0aGUgIk5vIGJ1aWxkYWJsZSBwcm92aWRlcnMgYXZhaWxhYmxlIGZvciByZXF1aXJlZC4uLi4iCisJICBlcnJvciBtZXNzYWdlLgorCS0gUmV3b3JrIGFkZF90YXNrIHRvIGJlIG1vcmUgZWZmaWNpZW50ICg2JSBzcGVlZHVwLCA3JSBudW1iZXIgb2YgZnVuY3Rpb24gY2FsbHMgcmVkdWN0aW9uKQorCS0gU29ydCBkaWdyYXBoIG91dHB1dCB0byBtYWtlIGJ1aWxkcyBtb3JlIHJlcHJvZHVjaWJsZQorCS0gU3BsaXQgZXhwYW5kS2V5cyBpbnRvIHR3byBmb3IgbG9vcHMgdG8gYmVuZWZpdCBmcm9tIHRoZSBleHBhbmRfY2FjaGUgKDEyJSBzcGVlZHVwKQorCS0gcnVucXVldWUucHk6IEZpeCBpZGVwZW5kcyBoYW5kbGluZyB0byBhdm9pZCBkZXBlbmRlbmN5IGVycm9ycworCS0gQ2xlYXIgdGhlIHRlcm1pbmFsIFRPU1RPUCBmbGFnIGlmIHNldCAoYW5kIHdhcm4gdGhlIHVzZXIpCisJLSBGaXggcmVncmVzc2lvbiBmcm9tIHI2NTMgYW5kIG1ha2UgU1JDREFURS9DVlNEQVRFIHdvcmsgZm9yIHBhY2thZ2VzIGFnYWluCisJLSBGaXggYSBidWcgaW4gYmIuZGVjb2RldXJsIHdoZXJlIGh0dHA6Ly9zb21lLndoZXJlLmNvbS9zb21lZmlsZS50Z3ogZGVjb2RlZCB0byBob3N0PSIiICgjMTUzMCkKKwktIFdhcm4gYWJvdXQgbWFsZm9ybWVkIFBSRUZFUlJFRF9QUk9WSURFUlMgKCMxMDcyKQorCS0gQWRkIHN1cHBvcnQgZm9yIEJCX05JQ0VfTEVWRUwgb3B0aW9uICgjMTYyNykKKwktIFBzeWNvIGlzIHVzZWQgb25seSBvbiB4ODYgYXMgdGhlcmUgaXMgbm8gc3VwcG9ydCBmb3Igb3RoZXIgYXJjaGl0ZWN0dXJlcy4KKwktIFNvcnQgaW5pdGlhbCBwcm92aWRlcnMgbGlzdCBieSBkZWZhdWx0IHByZWZlcmVuY2UgKCMxMTQ1LCAjMjAyNCkKKwktIEltcHJvdmUgcHJvdmlkZXIgc29ydGluZyBzbyBwcmVmZXJlZCB2ZXJzaW9ucyBoYXZlIHByZWZlcmVuY2Ugb3ZlciBsYXRlc3QgdmVyc2lvbnMgKCM3NjgpCisJLSBEZXRlY3QgYnVpbGRzIG9mIHRhc2tzIHdpdGggb3ZlcmxhcHBpbmcgcHJvdmlkZXJzIGFuZCB3YXJuICh3aWxsIGJlY29tZSBhIGZhdGFsIGVycm9yKSAoIzEzNTkpCisJLSBBZGQgTVVMVElfUFJPVklERVJfV0hJVEVMSVNUIHZhcmlhYmxlIHRvIGFsbG93IGtub3duIHNhZmUgbXVsdGlwbGUgcHJvdmlkZXJzIHRvIGJlIGxpc3RlZAorCS0gSGFuZGxlIHBhdGhzIGluIHN2biBmZXRjaGVyIG1vZHVsZSBwYXJhbWV0ZXIKKwktIFN1cHBvcnQgdGhlIHN5bnRheCAiZXhwb3J0IFZBUklBQkxFIgorCS0gQWRkIGJ6ciBmZXRjaGVyCisJLSBBZGQgc3VwcG9ydCBmb3IgY2xlYW5pbmcgZGlyZWN0b3JpZXMgYmVmb3JlIGEgdGFzayBpbiB0aGUgZm9ybToKKwkgIGRvX3Rhc2tuYW1lW2NsZWFuZGlyc10gPSAiZGlyIgorCS0gYnpyIGZldGNoZXIgdHdlYWtzIGZyb20gUm9iZXJ0IFNjaHVzdGVyICgjMjkxMykKKwktIEFkZCBtZXJjdXJpYWwgKGhnKSBmZXRjaGVyIGZyb20gUm9iZXJ0IFNjaHVzdGVyICgjMjkxMykKKwktIERvbid0IGFkZCBkdXBsaWNhdGVzIHRvIEJCUEFUSAorCS0gRml4IHByZWZlcnJlZF92ZXJzaW9uIHJldHVybiB2YWx1ZXMgKHByb3ZpZGVycy5weSkKKwktIEZpeCAnZGVwZW5kcycgZmxhZyBzcGxpdHRpbmcKKwktIEZpeCB1bmV4cG9ydCBoYW5kbGluZyAoIzMxMzUpCisJLSBBZGQgYmIuY29weWZpbGUgZnVuY3Rpb24gc2ltaWxhciB0byBiYi5tb3ZlZmlsZSAoYW5kIGltcHJvdmUgbW92ZWZpbGUgZXJyb3IgcmVwb3J0aW5nKQorCS0gQWxsb3cgbXVsdGlwbGUgb3B0aW9ucyBmb3IgZGVwdGFzayBmbGFnCisJLSBVc2UgZ2l0LWZldGNoIGluc3RlYWQgb2YgZ2l0LXB1bGwgcmVtb3ZpbmcgYW55IG5lZWQgZm9yIG1lcmdlcyB3aGVuIAorCSAgZmV0Y2hpbmcgKHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGluZGV4KS4gRml4ZXMgZmV0Y2ggZXJyb3JzLgorCS0gQWRkIEJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyBvcHRpb24sIHNldCB0byAwIHRvIG1ha2UgZ2l0IGZldGNoZXMgCisJICBmYXN0ZXIgYXQgdGhlIGV4cGVuc2Ugb2Ygbm90IGNyZWF0aW5nIG1pcnJvciB0YXJiYWxscy4KKwktIFNSQ1JFViBoYW5kbGluZyB1cGRhdGVzLCBpbXByb3ZlbWVudHMgYW5kIGZpeGVzIGZyb20gUG9reQorCS0gQWRkIGJiLnV0aWxzLmxvY2tmaWxlKCkgYW5kIGJiLnV0aWxzLnVubG9ja2ZpbGUoKSBmcm9tIFBva3kKKwktIEFkZCBzdXBwb3J0IGZvciB0YXNrIHNlbGZzdGFtcCBhbmQgbG9ja2ZpbGVzIGZsYWdzCisJLSBEaXNhYmxlIHRhc2sgbnVtYmVyIGFjY2VsZXJhdGlvbiBzaW5jZSBpdCBjYW4gYWxsb3cgdGhlIHRhc2tzIHRvIHJ1biAKKwkgIG91dCBvZiBzZXF1ZW5jZQorCS0gSW1wcm92ZSBydW5xdWV1ZSBjb2RlIGNvbW1lbnRzCisJLSBBZGQgdGFzayBzY2hlZHVsZXIgYWJzdHJhY3Rpb24gYW5kIHNvbWUgZXhhbXBsZSBzY2hlZHVsZXJzCisJLSBJbXByb3ZlIGNpcmN1bGFyIGRlcGVuZGVuY3kgY2hhaW4gZGVidWdnaW5nIGNvZGUgYW5kIHVzZXIgZmVlZGJhY2sKKwktIERvbid0IGdpdmUgYSBzdGFja3RyYWNlIGZvciBpbnZhbGlkIHRhc2tzLCBoYXZlIGEgdXNlciBmcmllbmRseSBtZXNzYWdlICgjMzQzMSkKKwktIEFkZCBzdXBwb3J0IGZvciAiLWUgdGFyZ2V0IiAoIzM0MzIpCisJLSBGaXggc2hlbGwgc2hvd2RhdGEgY29tbWFuZCAoIzMyNTkpCisJLSBGaXggc2hlbGwgZGF0YSB1cGRhdGluZyBwcm9ibGVtcyAoIzE4ODApCisJLSBQcm9wZXJseSByYWlzZSBlcnJvcnMgZm9yIGludmFsaWQgc291cmNlIFVSSSBwcm90b2NvbHMKKwktIENoYW5nZSB0aGUgd2dldCBmZXRjaGVyIGZhaWx1cmUgaGFuZGxpbmcgdG8gYXZvaWQgbG9ja2ZpbGUgcHJvYmxlbXMKKwktIEFkZCBzdXBwb3J0IGZvciBicmFuY2hlcyBpbiBnaXQgZmV0Y2hlciAoT3RhdmlvIFNhbHZhZG9yLCBNaWNoYWVsIExhdWVyKQorCS0gTWFrZSB0YXNrZGF0YSBhbmQgcnVucXVldWUgZXJyb3JzIG1vcmUgdXNlciBmcmllbmRseQorCS0gQWRkIG5vcmVjdXJzZSBhbmQgZnVsbHBhdGggb3B0aW9ucyB0byBjdnMgZmV0Y2hlcgorCS0gRml4IGV4aXQgY29kZSBmb3IgYnVpbGQgZmFpbHVyZXMgaW4gLS1jb250aW51ZSBtb2RlCisJLSBGaXggZ2l0IGJyYW5jaCB0YWdzIGZldGNoaW5nCisJLSBDaGFuZ2UgcGFyc2VDb25maWd1cmF0aW9uRmlsZSBzbyBpdCB3b3JrcyBvbiByZWFsIGRhdGEsIG5vdCBhIGNvcHkKKwktIEhhbmRsZSAnYmFzZScgaW5oZXJpdCBhbmQgYWxsIG90aGVyIElOSEVSSVRzIGZyb20gcGFyc2VDb25maWd1cmF0aW9uRmlsZSAKKwkgIGluc3RlYWQgb2YgQkJIYW5kbGVyCisJLSBGaXggZ2V0VmFyRmxhZ3MgYnVnIGluIGRhdGFfc21hcnQKKwktIE9wdG1pc2UgY2FjaGUgaGFuZGxpbmcgYnkgbW9yZSBxdWlja2x5IGRldGVjdGluZyBhbiBpbnZhbGlkIGNhY2hlLCBvbmx5IAorCSAgc2F2aW5nIHRoZSBjYWNoZSB3aGVuIGl0cyBjaGFuZ2VkLCBtb3ZpbmcgdGhlIGNhY2hlIHZhbGlkaXR5IGNoZWNrIGludG8KKwkgIHRoZSBwYXJzaW5nIGxvb3AgYW5kIGZhY3RvcmluZyBzb21lIGdldFZhciBjYWxscyBvdXRzaWRlIGEgZm9yIGxvb3AKKwktIENvb2tlcjogUmVtb3ZlIGEgZGVidWcgbWVzc2FnZSBmcm9tIHRoZSBwYXJzaW5nIGxvb3AgdG8gbG93ZXIgb3ZlcmhlYWQKKwktIENvbnZlcnQgYnVpbGQucHkgZXhlY190YXNrIHRvIHVzZSBnZXRWYXJGbGFncworCS0gVXBkYXRlIHNoZWxsIHRvIHVzZSBjb29rZXIuYnVpbGRGaWxlCisJLSBBZGQgU3RhbXBVcGRhdGUgZXZlbnQKKwktIENvbnZlcnQgLWIgb3B0aW9uIHRvIHVzZSB0YXNrZGF0YS9ydW5xdWV1ZQorCS0gUmVtb3ZlIGRpZ3JhcGggYW5kIHN3aXRjaCB0byBuZXcgc3RhbXAgY2hlY2tpbmcgY29kZS4gZXhlY190YXNrIG5vIGxvbmdlcgorCSAgaG9ub3VycyBkZXBlbmRlbmNpZXMKKwktIE1ha2UgZmV0Y2hlciB0aW1lc3RhbXAgdXBkYXRpbmcgbm9uLWZhdGFsIHdoZW4gcGVybWlzc2lvbnMgZG9uJ3QgYWxsb3cgCisJICB1cGRhdGVzCisJLSBBZGQgQkJfU0NIRURVTEVSIHZhcmlhYmxlL29wdGlvbiAoImNvbXBsZXRpb24iIG9yICJzcGVlZCIpIGNvbnRyb2xsaW5nCisJICB0aGUgd2F5IGJpdGJha2Ugc2NoZWR1bGVzIHRhc2tzCisJLSBBZGQgQkJfU1RBTVBfUE9MSUNZIHZhcmlhYmxlL29wdGlvbiAoInBlcmZpbGUiIG9yICJmdWxsIikgY29udHJvbGxpbmcKKwkgIGhvdyBleHRlbnNpdmVseSBzdGFtcHMgYXJlIGxvb2tlZCBhdCBmb3IgdmFsaWRpdHkKKwktIFdoZW4gaGFuZGxpbmcgYnVpbGQgdGFyZ2V0IGZhaWx1cmVzIG1ha2Ugc3VyZSBpZGVwZW5kcyBhcmUgY2hlY2tlZCBhbmQKKwkgIGZhaWxlZCB3aGVyZSBuZWVkZWQuIEZpeGVzIC0tY29udGludWUgbW9kZSBjcmFzaGVzLgorCS0gRml4IC1mIChmb3JjZSkgaW4gY29uanVuY3Rpb24gd2l0aCAtYgorCS0gRml4IHByb2JsZW1zIHdpdGggcmVjcmRlcHRhc2sgaGFuZGxpbmcgd2hlcmUgc29tZSBpZGVwZW5kcyB3ZXJlbid0IGhhbmRsZWQKKwkgIGNvcnJlY3RseS4KKwktIEhhbmRsZSBleGl0IGNvZGVzIGNvcnJlY3RseSAoZnJvbSBwSDUpCisJLSBXb3JrIGFyb3VuZCByZWZzL0hFQUQgaXNzdWVzIHdpdGggZ2l0IG92ZXIgaHR0cCAoIzM0MTApCisJLSBBZGQgcHJveHkgc3VwcG9ydCB0byB0aGUgQ1ZTIGZldGNoZXIgKGZyb20gQ3lyaWwgQ2hlbXBhcmF0aHkpCisJLSBJbXByb3ZlIHJ1bmZldGNoY21kIHNvIGVycm9ycyBhcmUgc2VlbiBhbmQgdmFyaW91cyBHSVQgdmFyaWFibGVzIGFyZSBleHBvcnRlZAorCS0gQWRkIGFiaWxpdHkgdG8gZmV0Y2hlcnMgdG8gY2hlY2sgVVJMIHZhbGlkaXR5IHdpdGhvdXQgZG93bmxvYWRpbmcKKwktIEltcHJvdmUgcnVudGltZSBQUkVGRVJSRURfUFJPVklERVJTIHdhcm5pbmcgbWVzc2FnZQorCS0gQWRkIEJCX1NUQU1QX1dISVRFTElTVCBvcHRpb24gd2hpY2ggY29udGFpbnMgYSBsaXN0IG9mIHN0YW1wcyB0byBpZ25vcmUgd2hlbgorCSAgY2hlY2tpbmcgc3RhbXAgZGVwZW5kZW5jaWVzIGFuZCB1c2luZyBhIEJCX1NUQU1QX1BPTElDWSBvZiAid2hpdGVsaXN0IgorCS0gTm8gbG9uZ2VyIHdlaWdodCBwcm92aWRlcnMgb24gdGhlIGJhc2lzIG9mIGEgcGFja2FnZSBiZWluZyAiYWxyZWFkeSBzdGFnZWQiLiBUaGlzCisJICBsZWFkcyB0byBidWlsZHMgYmVpbmcgbm9uLWRldGVybWluaXN0aWMuCisJLSBGbHVzaCBzdGRvdXQvc3RkZXJyIGJlZm9yZSBmb3JraW5nIHRvIGZpeCBkdXBsaWNhdGUgY29uc29sZSBvdXRwdXQKKwktIE1ha2Ugc3VyZSByZWNyZGVwcyB0YXNrcyBpbmNsdWRlIGFsbCBpbnRlci10YXNrIGRlcGVuZGVuY2llcyBvZiBhIGdpdmVuIGZuCisJLSBBZGQgYmIucnVucXVldWUuY2hlY2tfc3RhbXBfZm4oKSBmb3IgdXNlIGJ5IHBhY2thZ2VkLXN0YWdpbmcKKwktIEFkZCBQRVJTSVNURU5UX0RJUiB0byBzdG9yZSB0aGUgUGVyc2lzdERhdGEgaW4gYSBwZXJzaXN0ZW50CisJICBkaXJlY3RvcnkgIT0gdGhlIGNhY2hlIGRpci4KKwktIEFkZCBtZDUgYW5kIHNoYTI1NiBjaGVja3N1bSBnZW5lcmF0aW9uIGZ1bmN0aW9ucyB0byB1dGlscy5weQorCS0gQ29ycmVjdGx5IGhhbmRsZSAnLScgY2hhcmFjdGVycyBpbiBjbGFzcyBuYW1lcyAoIzI5NTgpCisJLSBNYWtlIHN1cmUgZXhwYW5kS2V5cyBoYXMgYmVlbiBjYWxsZWQgb24gdGhlIGRhdGEgZGljdGlvbmFyeSBiZWZvcmUgcnVubmluZyB0YXNrcworCS0gQ29ycmVjdGx5IGFkZCBhIHRhc2sgb3ZlcnJpZGUgaW4gdGhlIGZvcm0gdGFzay1UQVNLTkFNRS4KKwktIFJldmVydCB0aGUgJy0nIGNoYXJhY3RlciBmaXggaW4gY2xhc3MgbmFtZXMgc2luY2UgaXQgYnJlYWtzIHRoaW5ncworCS0gV2hlbiBhIHJlZ2V4cCBmYWlscyB0byBjb21waWxlIGZvciBQQUNLQUdFU19EWU5BTUlDLCBwcmludCBhIG1vcmUgdXNlZnVsIGVycm9yICgjNDQ0NCkKKwktIEFsbG93IHRvIGNoZWNrb3V0IENWUyBieSBEYXRlIGFuZCBUaW1lLiBKdXN0IGFkZCBISG1tIHRvIHRoZSBTUkNEQVRFLgorCS0gTW92ZSBwcnVuZWRpciBmdW5jdGlvbiB0byB1dGlscy5weSBhbmQgYWRkIGV4cGxvZGVfZGVwX3ZlcnNpb25zIGZ1bmN0aW9uCisJLSBSYWlzZSBhbiBleGNlcHRpb24gaWYgU1JDUkVWID09ICdJTlZBTElEJworCS0gRml4IGhnIGZldGNoZXIgdXNlcm5hbWUvcGFzc3dvcmQgaGFuZGxpbmcgYW5kIGZpeCBjcmFzaAorCS0gRml4IFBBQ0tBR0VTX0RZTkFNSUMgaGFuZGxpbmcgb2YgcGFja2FnZXMgd2l0aCAnKysnIGluIHRoZSBuYW1lCisJLSBSZW5hbWUgX19kZXBlbmRzIHRvIF9fYmFzZV9kZXBlbmRzIGFmdGVyIGNvbmZpZ3VyYXRpb24gcGFyc2luZyBzbyB3ZSBkb24ndAorCSAgcmVjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGNvbmZpZyBmaWxlcyB0aW1lIGFmdGVyIHRpbWUKKwktIEFkZCBiZXR0ZXIgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBoYW5kbGluZy4gQnkgZGVmYXVsdCBpdCB3aWxsIG5vdyBvbmx5IHBhc3MgY2VydGFpbiAKKwkgIHdoaXRlbGlzdGVkIHZhcmlhYmxlcyBpbnRvIHRoZSBkYXRhIHN0b3JlLiBJZiBCQl9QUkVTRVJWRV9FTlYgaXMgc2V0IGJpdGJha2Ugd2lsbCB1c2UKKwkgIGFsbCB2YXJpYWJsZSBmcm9tIHRoZSBlbnZpcm9ubWVudC4gSWYgQkJfRU5WX1dISVRFTElTVCBpcyBzZXQsIHRoYXQgd2hpdGVsaXN0IHdpbGwgYmUKKwkgIHVzZWQgaW5zdGVhZCBvZiB0aGUgaW50ZXJuYWwgYml0YmFrZSBvbmUuIEFsdGVybmF0aXZlbHksIEJCX0VOVl9FWFRSQVdISVRFIGNhbiBiZSB1c2VkCisJICB0byBleHRlbmQgdGhlIGludGVybmFsIHdoaXRlbGlzdC4KKwktIFBlcmZvcmNlIGZldGNoZXIgZml4IHRvIHVzZSBjb21tYW5kbGluZSBvcHRpb25zIGluc3RlYWQgb2YgYmVpbmcgb3ZlcnJpZGVuIGJ5IHRoZSBlbnZpcm9ubWVudAorCS0gYmIudXRpbHMucHJ1bmVkaXIgY2FuIGNvcGUgd2l0aCBzeW1saW5rcyB0byBkaXJlY3RvcmllZXMgd2l0aG91dCBleGNlcHRpb25zCisJLSB1c2UgQHJldiB3aGVuIGRvaW5nIGEgc3ZuIGNoZWNrb3V0CisJLSBBZGQgb3NjIGZldGNoZXIgKGZyb20gSm9zaHVhIExvY2sgaW4gUG9reSkKKwktIFdoZW4gU1JDUkVWIGF1dG9yZXZpc2lvbmluZyBmb3IgYSByZWNpcGUgaXMgaW4gdXNlLCBkb24ndCBjYWNoZSB0aGUgcmVjaXBlCisJLSBBZGQgdHJ5YWx0Y29uZmlncyBvcHRpb24gdG8gY29udHJvbCB3aGV0aGVyIGJpdGJha2UgdHJ5cyB1c2luZyBhbHRlcm5hdGl2ZSBwcm92aWRlcnMKKwkgIHRvIGZ1bGZpbCBmYWlsZWQgZGVwZW5kZW5jaWVzLiBJdCBkZWZhdWx0cyB0byBvZmYsIGNoYW5naW5nIHRoZSBkZWZhdWx0IHNpbmNlIHRoaXMKKwkgIGJlaGF2aW91ciBjb25mdXNlcyBtYW55IHVzZXJzIGFuZCBpc24ndCBvZnRlbiB1c2VmdWwuCisJLSBJbXByb3ZlIGxvY2sgZmlsZSBmdW5jdGlvbiBlcnJvciBoYW5kbGluZworCS0gQWRkIHVzZXJuYW1lIGhhbmRsaW5nIHRvIHRoZSBnaXQgZmV0Y2hlciAoUm9iZXJ0IEJyYWdnKQorCS0gQWRkIHN1cHBvcnQgZm9yIEhUVFBfUFJPWFkgYW5kIEhUVFBfUFJPWFlfSUdOT1JFIHZhcmlhYmxlcyB0byB0aGUgd2dldCBmZXRjaGVyCisJLSBFeHBvcnQgbW9yZSB2YXJpYWJsZXMgdG8gdGhlIGZldGNoZXIgY29tbWFuZHMgdG8gYWxsb3cgc3NoIGNoZWNrb3V0cyBhbmQgY2hlY2tvdXRzIHRocm91Z2ggCisJICBwcm94aWVzIHRvIHdvcmsgYmV0dGVyLiAoZnJvbSBQb2t5KQorCS0gQWxzbyBhbGxvdyB1c2VyIGFuZCBwc3dkIG9wdGlvbnMgaW4gU1JDX1VSSXMgZ2xvYmFsbHkgKGZyb20gUG9reSkKKwktIEltcHJvdmUgcHJveHkgaGFuZGxpbmcgd2hlbiB1c2luZyBtaXJyb3JzIChmcm9tIFBva3kpCisJLSBBZGQgYmIudXRpbHMucHJ1bmVfc3VmZml4IGZ1bmN0aW9uCisJLSBGaXggaGcgY2hlY2tvdXRzIG9mIHNwZWNpZmljIHJldmlzaW9ucyAoZnJvbSBQb2t5KQorCS0gRml4IHdnZXQgZmV0Y2hpbmcgb2YgdXJscyB3aXRoIHBhcmFtZXRlcnMgc3BlY2lmaWVkIChmcm9tIFBva3kpCisJLSBBZGQgdXNlcm5hbWUgaGFuZGxpbmcgdG8gZ2l0IGZldGNoZXIgKGZyb20gUG9reSkKKwktIFNldCBIT01FIGVudmlyb25tZW50YWwgdmFyaWFibGUgd2hlbiBydW5uaW5nIGZldGNoZXIgY29tbWFuZHMgKGZyb20gUG9reSkKKwktIE1ha2Ugc3VyZSBhbGxvd2VkIHZhcmlhYmxlcyBpbmhlcml0ZWQgZnJvbSB0aGUgZW52aXJvbm1lbnQgYXJlIGV4cG9ydGVkIGFnYWluIChmcm9tIFBva3kpCisJLSBXaGVuIHJ1bm5pbmcgYSBzdGFnZSB0YXNrIGluIGJic2hlbGwsIHJ1biBwb3B1bGF0ZV9zdGFnaW5nLCBub3QgdGhlIHN0YWdlIHRhc2sgKGZyb20gUG9reSkKKwktIEZpeCArIGNoYXJhY3RlciBlc2NhcGluZyBmcm9tIFBBQ0tBR0VTX0RZTkFNSUMgKHRoYW5rcyBPdGF2aW8gU2FsdmFkb3IpCisJLSBBZGRpdGlvbiBvZiBCQkNMQVNTRVhURU5EIHN1cHBvcnQgZm9yIGFsbG93aW5nIG9uZSByZWNpcGUgdG8gcHJvdmlkZSBtdWx0aXBsZSB0YXJnZXRzIChmcm9tIFBva3kpCisKK0NoYW5nZXMgaW4gQml0YmFrZSAxLjguMDoKKwktIFJlbGVhc2UgMS43LnggYXMgYSBzdGFibGUgc2VyaWVzCisKK0NoYW5nZXMgaW4gQml0QmFrZSAxLjcueDoKKwktIE1ham9yIHVwZGF0ZXMgb2YgdGhlIGRlcGVuZGVuY3kgaGFuZGxpbmcgYW5kIGV4ZWN1dGlvbgorCSAgb2YgdGFza3MuIENvZGUgZnJvbSBiaW4vYml0YmFrZSByZXBsYWNlZCB3aXRoIHJ1bnF1ZXVlLnB5CisJICBhbmQgdGFza2RhdGEucHkKKwktIE5ldyB0YXNrIGV4ZWN1dGlvbiBjb2RlIHN1cHBvcnRzIG11bHRpdGhyZWFkaW5nIHdpdGggYSBzaW1wbGlzdGljCisJICB0aHJlYWRpbmcgYWxnb3JpdGhtIGNvbnRyb2xsZWQgYnkgQkJfTlVNQkVSX1RIUkVBRFMKKwktIENoYW5nZSBvZiB0aGUgU1ZOIEZldGNoZXIgdG8ga2VlcCB0aGUgY2hlY2tvdXQgYXJvdW5kCisJICBjb3VydHNleSBvZiBQYXVsIFNva29sb3Zza3kgKCMxMzY3KQorCS0gUEFUSCBmaXggdG8gYmJpbWFnZSAoIzExMDgpCisJLSBBbGxvdyBkZWJ1ZyBkb21haW5zIHRvIGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmUgKC1sKQorCS0gQWxsb3cgJ2ludGVyYWN0aXZlJyB0YXNrcworCS0gTG9nZ2luZyBtZXNzYWdlIGltcHJvdmVtZW50cworCS0gRHJvcCBub3cgdW5lZWRlZCBCVUlMRF9BTExfREVQUyB2YXJpYWJsZQorCS0gQWRkIHN1cHBvcnQgZm9yIHdpbGRjYXJkcyB0byAtYiBvcHRpb24KKwktIE1ham9yIG92ZXJoYXVsIG9mIHRoZSBmZXRjaGVycyBtYWtpbmcgYSBsYXJnZSBhbW91bnQgb2YgY29kZSBjb21tb24KKwkgIGluY2x1ZGluZyBtaXJyb3JpbmcgY29kZQorCS0gRmV0Y2hlcnMgbm93IHRvdWNoIG1kNSBzdGFtcHMgdXBvbiBhY2Nlc3MgKHRvIHNob3cgYWN0aXZpdHkpCisJLSBGaXggLWYgZm9yY2Ugb3B0aW9uIHdoZW4gdXNlZCB3aXRob3V0IC1iIChsb25nIHN0YW5kaW5nIGJ1ZykKKwktIEFkZCBleHBhbmRfY2FjaGUgdG8gZGF0YV9jYWNoZS5weSwgY2FjaGluZyBleHBhbmRlZCBkYXRhIChzcGVlZHVwKQorCS0gQWxsb3cgdmVyc2lvbiBmaWVsZCBpbiBERVBFTkRTIChpZ25vcmVkIGZvciBub3cpCisJLSBBZGQgYWJvcnQgZmxhZyBzdXBwb3J0IHRvIHRoZSBzaGVsbAorCS0gTWFrZSBpbmhlcml0IGZhaWwgaWYgdGhlIGNsYXNzIGRvZXNuJ3QgZXhpc3QgKCMxNDc4KQorCS0gRml4IGRhdGEuZW1pdF9lbnYoKSB0byBleHBhbmQga2V5bmFtZXMgYXMgd2VsbCBhcyB2YWx1ZXMKKwktIEFkZCBzc2ggZmV0Y2hlcgorCS0gQWRkIHBlcmZvcmNlIGZldGNoZXIKKwktIE1ha2UgUFJFRkVSUkVEX1BST1ZJREVSX2Zvb2JhciBkZWZhdWx0cyB0byBmb29iYXIgaWYgYXZhaWxhYmxlCisJLSBTaGFyZSB0aGUgcGFyc2VyJ3MgbXRpbWVfY2FjaGUsIHJlZHVjaW5nIHRoZSBudW1iZXIgb2Ygc3RhdCBzeXNjYWxscworCS0gQ29tcGlsZSBhbGwgYW5vbmZ1bmNzIGF0IG9uY2UhIAorCSAgKioqIEFub25mdW5jcyBtdXN0IG5vdyB1c2UgY29tbW9uIHNwYWNpbmcgZm9ybWF0ICoqKgorCS0gTWVtb3Jpc2UgdGhlIGxpc3Qgb2YgaGFuZGxlcnMgaW4gX19CQkhBTkRMRVJTIGFuZCB0YXNrcyBpbiBfX0JCVEFTS1MKKwkgIFRoaXMgcmVtb3ZlcyAyIG1pbGxpb24gZnVuY3Rpb24gY2FsbHMgcmVzdWx0aW5nIGluIGEgNS0xMCUgc3BlZWR1cAorCS0gQWRkIG1hbnBhZ2UKKwktIFVwZGF0ZSBnZW5lcmF0ZURvdEdyYXBoIHRvIHVzZSB0YXNrRGF0YS9ydW5RdWV1ZSBpbXByb3ZpbmcgYWNjdXJhY3kKKwkgIGFuZCBhbHNvIGFkZGluZyBhIHRhc2sgZGVwZW5kZW5jeSBncmFwaAorCS0gRml4L3N0YW5kYXJkaXNlIG9uIEdQTHYyIGxpY2VuY2UKKwktIE1vdmUgbW9zdCBmdW5jdGlvbmFsaXR5IGZyb20gYmluL2JpdGJha2UgdG8gY29va2VyLnB5IGFuZCBzcGxpdCBpbnRvCisJICBzZXBhcmF0ZSBmdW5jaXRvbnMKKwktIENWUyBmZXRjaGVyOiBBZGRlZCBzdXBwb3J0IGZvciBub24tZGVmYXVsdCBwb3J0CisJLSBBZGQgQkJJTkNMVURFTE9HU19MSU5FUywgdGhlIG51bWJlciBvZiBsaW5lcyB0byByZWFkIGZyb20gYW55IGxvZ2ZpbGUKKwktIERyb3Agc2hlYmFuZ3MgZnJvbSBsaWIvYmIgc2NyaXB0cworCitDaGFuZ2VzIGluIEJpdGJha2UgMS42LjA6CisJLSBCZXR0ZXIgbXNnIGhhbmRsaW5nCisJLSBDT1cgZGljdCBpbXBsZW1lbnRhdGlvbiBmcm9tIFRpbSBBbnNlbGwgKG1pdGhybykgbGVhZGluZworCSAgdG8gYmV0dGVyIHBlcmZvcm1hbmNlCisJLSBTcGVlZCB1cCBvZiAtcworCitDaGFuZ2VzIGluIEJpdGJha2UgMS40LjQ6CisJLSBTUkNEQVRFIG5vdyBoYW5kbGluZyBjb3VydHNleSBKdXN0aW4gUGF0cmluCisJLSAjMTAxNyBmaXggdG8gd29yayB3aXRoIHJtX3dvcmsKKworQ2hhbmdlcyBpbiBCaXRCYWtlIDEuNC4yOgorCS0gU2VuZCBsb2dzIHRvIG9lLnBhc3RlYmluLmNvbSBpbnN0ZWFkIG9mIHBhc3RlYmluLmNvbQorCSAgZml4ZXMgIzg1NgorCS0gQ29weSB0aGUgaW50ZXJuYWwgYml0YmFrZSBkYXRhIGJlZm9yZSBidWlsZGluZyB0aGUKKwkgIGRlcGVuZGVuY3kgZ3JhcGguIFRoaXMgZml4ZXMgbmFubyBub3QgaGF2aW5nIGEKKwkgIHZpcnR1YWwvbGliYyBkZXBlbmRlbmN5CisJLSBBbGxvdyBtdWx0aXBsZSBUQVJCQUxMX1NUQVNIIGVudHJpZXMKKwktIENhY2hlLCBjaGVjayBpZiB0aGUgZGlyZWN0b3J5IGV4aXN0cyBiZWZvcmUgY2hhbmdpbmcKKwkgIGludG8gaXQKKwktIGdpdCBzcGVlZHVwIGNsb25pbmcgYnkgbm90IGRvaW5nIGEgY2hlY2tvdXQKKwktIGFsbG93IHRvIGhhdmUgc3BhY2VzIGluIGZpbGVuYW1lcyAoLmNvbmYsIC5iYiwgLmJiY2xhc3MpCisKK0NoYW5nZXMgaW4gQml0QmFrZSAxLjQuMDoKKwktIEZpeCB0byBjaGVjayBib3RoIFJERVBFTkRTIGFuZCBSREVQRU5EU18ke1BOfQorCS0gRml4IGEgUkRFUEVORFMgcGFyc2luZyBidWcgaW4gdXRpbHM6ZXhwbG9kZV9kZXBzKCkKKwktIFVwZGF0ZSBnaXQgZmV0Y2hlciBiZWhhdmlvdXIgdG8gbWF0Y2ggZ2l0IGNoYW5nZXMKKwktIEFTU1VNRV9QUk9WSURFRCBhbGxvd2VkIHRvIGluY2x1ZGUgcnVudGltZSBwYWNrYWdlcworCS0gZ2l0IGZldGNoZXIgY2xlYW51cCBhbmQgZWZmaWNlbmN5IGltcHJvdmVtZW50cworCS0gQ2hhbmdlIHRoZSBmb3JtYXQgb2YgdGhlIGNhY2hlCisJLSBVcGRhdGUgdXNlcm1hbnVhbCB0byBkb2N1bWVudCB0aGUgRmV0Y2hlcnMKKwktIE1ham9yIGNoYW5nZXMgdG8gY2FjaGluZyB3aXRoIGEgbmV3IHN0cmF0ZWd5CisJICBnaXZpbmcgYSBtYWpvciBwZXJmb3JtYW5jZSBpbmNyZWFzZSB3aGVuIHJlcGFyc2luZworCSAgd2l0aCBmZXcgZGF0YSBjaGFuZ2VzCisKK0NoYW5nZXMgaW4gQml0QmFrZSAxLjMuMzoKKwktIENyZWF0ZSBhIG5ldyBGZXRjaGVyIG1vZHVsZSB0byBlYXNlIHRoZQorCSAgZGV2ZWxvcG1lbnQgb2YgbmV3IEZldGNoZXJzLgorCSAgSXNzdWUgIzQzOCBmaXhlZCBieSBycHVyZGllQG9wZW5lZGhhbmQuY29tCisJLSBNYWtlIHRoZSBTdWJ2ZXJzaW9uIGZldGNoZXIgaG9ub3IgdGhlIFNSQyBEYXRlCisJICAoQ1ZTREFURSkuCisJICBJc3N1ZSAjNTU1IGZpeGVkIGJ5IGNocmlzQG9wZW5lZGhhbmQuY29tCisJLSBFeHBhbmQgUFJFRkVSUkVEX1BST1ZJREVSIHByb3Blcmx5CisJICBJc3N1ZSAjNDM2IGZpeGVkIGJ5IHJwcnVkaWVAb3BlbmVkaGFuZC5jb20KKwktIFR5cG8gZml4IGZvciBJc3N1ZSAjNTMxIGJ5IFBoaWxpcHAgWmFiZWwgZm9yIHRoZQorCSAgQml0QmFrZSBTaGVsbAorCS0gSW50cm9kdWNlIGEgbmV3IHNwZWNpYWwgdmFyaWFibGUgU1JDREFURSBhcworCSAgYSBnZW5lcmljIG5hbWluZyB0byByZXBsYWNlIENWU0RBVEUuCisJLSBJbnRyb2R1Y2UgYSBuZXcga2V5d29yZCAncmVxdWlyZWQnLiBJbiBjb250cmFzdAorCSAgdG8gJ2luY2x1ZGUnIHBhcnNpbmcgd2lsbCBmYWlsIGlmIGEgdG8gYmUgaW5jbHVkZWQKKwkgIGZpbGUgY2FuIG5vdCBiZSBmb3VuZC4KKwktIFJlbW92ZSBoYXJkY29kaW5nIG9mIHRoZSBTVEFNUCBkaXJlY3RvcnkuIFBhdGNoCisJICBjb3VydHNleSBwSGlsaXBwIFphYmVsCisJLSBUcmFjayB0aGUgUkRFUEVORFMgb2YgZWFjaCBwYWNrYWdlIChycHVyZGllQG9wZW5lZGhhbmQuY29tKQorCS0gSW50cm9kdWNlIEJVSUxEX0FMTF9ERVBTIHRvIGJ1aWxkIGFsbCBSREVQRU5EUy4gRS5nCisJICB0aGlzIGlzIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBNZXRhIFBhY2thZ2VzLgorCSAgKHJwdXJkaWVAb3BlbmVkaGFuZC5jb20pLgorCitDaGFuZ2VzIGluIEJpdEJha2UgMS4zLjI6CisJLSByZWludGVncmF0aW9uIG9mIG1ha2UucHkgaW50byBCaXRCYWtlCisJLSBiYnJlYWQgaXMgZ29uZSwgdXNlIGJpdGJha2UgLWUKKwktIGxvdHMgb2Ygc2hlbGwgdXBkYXRlcyBhbmQgYnVnZml4ZXMKKwktIEludHJvZHVjdGlvbiBvZiB0aGUgLj0gYW5kID0uIG9wZXJhdG9yCisJLSBTb3J0IHZhcmlhYmxlcywga2V5cyBhbmQgZ3JvdXBzIGluIGJpdGRvYworCS0gRml4IHJlZ3Jlc3Npb24gaW4gdGhlIGhhbmRsaW5nIG9mIEJCQ09MTEVDVElPTlMKKwktIFVwZGF0ZSB0aGUgYml0YmFrZSB1c2VybWFudWFsCisKK0NoYW5nZXMgaW4gQml0QmFrZSAxLjMuMDoKKwktIGFkZCBiaXRiYWtlIGludGVyYWN0aXZlIHNoZWxsIChiaXRiYWtlIC1pKQorCS0gcmVmYWN0b3IgYml0YmFrZSB1dGlsaXR5IGluIE9PIHN0eWxlCisJLSBraWxsIGRlZmF1bHQgYXJndW1lbnRzIGluIG1ldGhvZHMgaW4gdGhlIGJiLmRhdGEgbW9kdWxlCisJLSBraWxsIGRlZmF1bHQgYXJndW1lbnRzIGluIG1ldGhvZHMgaW4gdGhlIGJiLmZldGNoIG1vZHVsZQorCS0gdGhlIGh0dHAvaHR0cHMvZnRwIGZldGNoZXIgd2lsbCBmYWlsIGlmIHRoZSB0byBiZSAKKwkgIGRvd25sb2FkZWQgZmlsZSB3YXMgbm90IGZvdW5kIGluIERMX0RJUiAodGhpcyBpcyBuZWVkZWQKKwkgIHRvIGF2b2lkIHVucGFja2luZyB0aGUgc291cmNlZm9yZ2UgbWlycm9yIHBhZ2UpCisJLSBTd2l0Y2ggdG8gYSBjb3cgbGlrZSBkYXRhIGluc3RhbmNlIGZvciBwZXJzaXN0ZW50IGFuZCBub24KKwkgIHBlcnNpc3RpbmcgbW9kZSAoY2FsbGVkIGRhdGFfc21hcnQucHkpCisJLSBDaGFuZ2VkIHRoZSBjYWxsYmFjayBvZiBiYi5tYWtlLmNvbGxlY3RfYmJmaWxlcyB0byBjYXJyeQorCSAgYWRkaXRpb25hbCBwYXJhbWV0ZXJzCisJLSBEcmFzdGljYWxseSByZWR1Y2VkIHRoZSBhbW91bnQgb2YgbmVlZGVkIFJBTSBieSBub3QgaG9sZGluZworCSAgZWFjaCBkYXRhIGluc3RhbmNlIGluIG1lbW9yeSB3aGVuIHVzaW5nIGEgY2FjaGUvcGVyc2lzdGVudAorCSAgc3RvcmFnZQorCitDaGFuZ2VzIGluIEJpdEJha2UgMS4yLjE6CisJVGhlIDEuMi4xIHJlbGVhc2UgaXMgbWVhbnQgYXMgYSBpbnRlcm1lZGlhdGUgcmVsZWFzZSB0byBsYXkgdGhlCisJZ3JvdW5kIGZvciBtb3JlIHJhZGljYWwgY2hhbmdlcy4gVGhlIG1vc3Qgbm90YWJsZSBjaGFuZ2VzIGFyZToKKworCS0gRG8gbm90IGhhcmRjb2RlIHt9LCB1c2UgYmIuZGF0YS5pbml0KCkgaW5zdGVhZCBpZiB5b3Ugd2FudCB0bworCSAgZ2V0IGEgaW5zdGFuY2Ugb2YgYSBkYXRhIGNsYXNzCisJLSBiYi5kYXRhLmluaXQoKSBpcyBhIGZhY3RvcnkgYW5kIHRoZSBvbGQgYmIuZGF0YSBtZXRob2RzIGFyZSBkZWxlZ2F0ZXMKKwktIERvIG5vdCB1c2UgZGVlcGNvcHkgdXNlIGJiLmRhdGEuY3JlYXRlQ29weSgpIGluc3RlYWQuCisJLSBSZW1vdmVkIGRlZmF1bHQgYXJndW1lbnRzIGluIGJiLmZldGNoCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9IRUFERVIgYi95b2N0by1wb2t5L2JpdGJha2UvSEVBREVSCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NTkyNTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvSEVBREVSCkBAIC0wLDAgKzEsMTkgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisjIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvTElDRU5TRSBiL3lvY3RvLXBva3kvYml0YmFrZS9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MDE0MGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvTElDRU5TRQpAQCAtMCwwICsxLDEwIEBACitCaXRCYWtlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMC4gU2VlIENPUFlJTkcgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKworVGhlIGZvbGxvd2luZyBleHRlcm5hbCBjb21wb25lbnRzIGFyZSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc29mdHdhcmU6CisKKyogVGhlIFRvYXN0ZXIgU2ltcGxlIFVJIGFwcGxpY2F0aW9uIGlzIGJhc2VkIHVwb24gdGhlIERqYW5nbyBwcm9qZWN0IHRlbXBsYXRlLCB0aGUgZmlsZXMgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgdGhlIEJTRCBsaWNlbnNlIGFuZCBhcmUgY29weXJpZ2h0IChjKSBEamFuZ28gU29mdHdhcmUKK0ZvdW5kYXRpb24gYW5kIGluZGl2aWR1YWwgY29udHJpYnV0b3JzLgorCisqIFR3aXR0ZXIgQm9vdHN0cmFwIChpbmNsdWRpbmcgR2x5cGhpY29ucyksIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIDIuMC4KKworKiBqUXVlcnkgaXMgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTNkMTM4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZQpAQCAtMCwwICsxLDUzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGhpbCBCbHVuZGVsbAorIyBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIFJPQUQgR21iSAorIyBDb3B5cmlnaHQgKEMpIDIwMDYgICAgICAgIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWInKSkKK3RyeToKKyAgICBpbXBvcnQgYmIKK2V4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXhjOgorICAgIHN5cy5leGl0KHN0cihleGMpKQorCitmcm9tIGJiIGltcG9ydCBjb29rZXJkYXRhCitmcm9tIGJiLm1haW4gaW1wb3J0IGJpdGJha2VfbWFpbiwgQml0QmFrZUNvbmZpZ1BhcmFtZXRlcnMsIEJCTWFpbkV4Y2VwdGlvbgorCitfX3ZlcnNpb25fXyA9ICIxLjI3LjEiCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgaWYgX192ZXJzaW9uX18gIT0gYmIuX192ZXJzaW9uX186CisgICAgICAgIHN5cy5leGl0KCJCaXRiYWtlIGNvcmUgdmVyc2lvbiBhbmQgcHJvZ3JhbSB2ZXJzaW9uIG1pc21hdGNoISIpCisgICAgdHJ5OgorICAgICAgICBzeXMuZXhpdChiaXRiYWtlX21haW4oQml0QmFrZUNvbmZpZ1BhcmFtZXRlcnMoc3lzLmFyZ3YpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VyZGF0YS5Db29rZXJDb25maWd1cmF0aW9uKCkpKQorICAgIGV4Y2VwdCBCQk1haW5FeGNlcHRpb24gYXMgZXJyOgorICAgICAgICBzeXMuZXhpdChlcnIpCisgICAgZXhjZXB0IGJiLkJCSGFuZGxlZEV4Y2VwdGlvbjoKKyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICBzeXMuZXhpdCgxKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWRpZmZzaWdzIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWRpZmZzaWdzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE5NmYwYjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UtZGlmZnNpZ3MKQEAgLTAsMCArMSwxMzggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIGJpdGJha2UtZGlmZnNpZ3MKKyMgQml0QmFrZSB0YXNrIHNpZ25hdHVyZSBkYXRhIGNvbXBhcmlzb24gdXRpbGl0eQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCBmbm1hdGNoCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBsb2dnaW5nCisKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSkpLCAnbGliJykpCisKK2ltcG9ydCBiYi50aW5mb2lsCitpbXBvcnQgYmIuc2lnZ2VuCisKK2RlZiBsb2dnZXJfY3JlYXRlKG5hbWUsIG91dHB1dD1zeXMuc3RkZXJyKToKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihuYW1lKQorICAgIGNvbnNvbGUgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIob3V0cHV0KQorICAgIGZvcm1hdCA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKQorICAgIGlmIG91dHB1dC5pc2F0dHkoKToKKyAgICAgICAgZm9ybWF0LmVuYWJsZV9jb2xvcigpCisgICAgY29uc29sZS5zZXRGb3JtYXR0ZXIoZm9ybWF0KQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGNvbnNvbGUpCisgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICByZXR1cm4gbG9nZ2VyCisKK2xvZ2dlciA9IGxvZ2dlcl9jcmVhdGUoJ2JpdGJha2UtZGlmZnNpZ3MnKQorCitkZWYgZmluZF9jb21wYXJlX3Rhc2soYmJoYW5kbGVyLCBwbiwgdGFza25hbWUpOgorICAgICIiIiBGaW5kIHRoZSBtb3N0IHJlY2VudCBzaWduYXR1cmUgZmlsZXMgZm9yIHRoZSBzcGVjaWZpZWQgUE4vdGFzayBhbmQgY29tcGFyZSB0aGVtICIiIgorCisgICAgZGVmIGdldF9oYXNodmFsKHNpZ2luZm8pOgorICAgICAgICBpZiBzaWdpbmZvLmVuZHN3aXRoKCcuc2lnaW5mbycpOgorICAgICAgICAgICAgcmV0dXJuIHNpZ2luZm8ucnBhcnRpdGlvbignOicpWzJdLnBhcnRpdGlvbignXycpWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2lnaW5mby5ycGFydGl0aW9uKCcuJylbMl0KKworICAgIGlmIG5vdCBoYXNhdHRyKGJiLnNpZ2dlbiwgJ2ZpbmRfc2lnaW5mbycpOgorICAgICAgICBsb2dnZXIuZXJyb3IoJ01ldGFkYXRhIGRvZXMgbm90IHN1cHBvcnQgZmluZGluZyBzaWduYXR1cmUgZGF0YSBmaWxlcycpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBub3QgdGFza25hbWUuc3RhcnRzd2l0aCgnZG9fJyk6CisgICAgICAgIHRhc2tuYW1lID0gJ2RvXyVzJyAlIHRhc2tuYW1lCisKKyAgICBmaWxlZGF0ZXMgPSBiYi5zaWdnZW4uZmluZF9zaWdpbmZvKHBuLCB0YXNrbmFtZSwgTm9uZSwgYmJoYW5kbGVyLmNvbmZpZ19kYXRhKQorICAgIGxhdGVzdGZpbGVzID0gc29ydGVkKGZpbGVkYXRlcy5rZXlzKCksIGtleT1sYW1iZGEgZjogZmlsZWRhdGVzW2ZdKVstMzpdCisgICAgaWYgbm90IGxhdGVzdGZpbGVzOgorICAgICAgICBsb2dnZXIuZXJyb3IoJ05vIHNpZ2RhdGEgZmlsZXMgZm91bmQgbWF0Y2hpbmcgJXMgJXMnICUgKHBuLCB0YXNrbmFtZSkpCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgZWxpZiBsZW4obGF0ZXN0ZmlsZXMpIDwgMjoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdPbmx5IG9uZSBtYXRjaGluZyBzaWdkYXRhIGZpbGUgZm91bmQgZm9yIHRoZSBzcGVjaWZpZWQgdGFzayAoJXMgJXMpJyAlIChwbiwgdGFza25hbWUpKQorICAgICAgICBzeXMuZXhpdCgxKQorICAgIGVsc2U6CisgICAgICAgICMgSXQncyBwb3NzaWJsZSB0aGF0IGxhdGVzdGZpbGVzIGNvbnRhaW4gMyBlbGVtZW50cyBhbmQgdGhlIGZpcnN0IHR3byBoYXZlIHRoZSBzYW1lIGhhc2ggdmFsdWUuCisgICAgICAgICMgSW4gdGhpcyBjYXNlLCB3ZSBkZWxldGUgdGhlIHNlY29uZCBlbGVtZW50LgorICAgICAgICAjIFRoZSBhYm92ZSBjYXNlIGlzIGFjdHVhbGx5IHRoZSBtb3N0IGNvbW1vbiBvbmUuIEJlY2F1c2Ugd2UgbWF5IGhhdmUgc2lnZGF0YSBmaWxlIGFuZCBzaWdpbmZvCisgICAgICAgICMgZmlsZSBoYXZpbmcgdGhlIHNhbWUgaGFzaCB2YWx1ZS4gQ29tcGFyaW5nIHN1Y2ggdHdvIGZpbGVzIG1ha2VzIG5vIHNlbnNlLgorICAgICAgICBpZiBsZW4obGF0ZXN0ZmlsZXMpID09IDM6CisgICAgICAgICAgICBoYXNoMCA9IGdldF9oYXNodmFsKGxhdGVzdGZpbGVzWzBdKQorICAgICAgICAgICAgaGFzaDEgPSBnZXRfaGFzaHZhbChsYXRlc3RmaWxlc1sxXSkKKyAgICAgICAgICAgIGlmIGhhc2gwID09IGhhc2gxOgorICAgICAgICAgICAgICAgIGxhdGVzdGZpbGVzLnBvcCgxKQorCisgICAgICAgICMgRGVmaW5lIHJlY3Vyc2lvbiBjYWxsYmFjaworICAgICAgICBkZWYgcmVjdXJzZWNiKGtleSwgaGFzaDEsIGhhc2gyKToKKyAgICAgICAgICAgIGhhc2hlcyA9IFtoYXNoMSwgaGFzaDJdCisgICAgICAgICAgICBoYXNoZmlsZXMgPSBiYi5zaWdnZW4uZmluZF9zaWdpbmZvKGtleSwgTm9uZSwgaGFzaGVzLCBiYmhhbmRsZXIuY29uZmlnX2RhdGEpCisKKyAgICAgICAgICAgIHJlY291dCA9IFtdCisgICAgICAgICAgICBpZiBsZW4oaGFzaGZpbGVzKSA9PSAyOgorICAgICAgICAgICAgICAgIG91dDIgPSBiYi5zaWdnZW4uY29tcGFyZV9zaWdmaWxlcyhoYXNoZmlsZXNbaGFzaDFdLCBoYXNoZmlsZXNbaGFzaDJdLCByZWN1cnNlY2IpCisgICAgICAgICAgICAgICAgcmVjb3V0LmV4dGVuZChsaXN0KCcgICcgKyBsIGZvciBsIGluIG91dDIpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZWNvdXQuYXBwZW5kKCJVbmFibGUgdG8gZmluZCBtYXRjaGluZyBzaWdkYXRhIGZvciAlcyB3aXRoIGhhc2hlcyAlcyBvciAlcyIgJSAoa2V5LCBoYXNoMSwgaGFzaDIpKQorCisgICAgICAgICAgICByZXR1cm4gcmVjb3V0CisKKyAgICAgICAgIyBSZWN1cnNlIGludG8gc2lnbmF0dXJlIGNvbXBhcmlzb24KKyAgICAgICAgb3V0cHV0ID0gYmIuc2lnZ2VuLmNvbXBhcmVfc2lnZmlsZXMobGF0ZXN0ZmlsZXNbMF0sIGxhdGVzdGZpbGVzWzFdLCByZWN1cnNlY2IpCisgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgIHByaW50ICdcbicuam9pbihvdXRwdXQpCisgICAgc3lzLmV4aXQoMCkKKworCisKK3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKKyAgICBkZXNjcmlwdGlvbiA9ICJDb21wYXJlcyBzaWdpbmZvL3NpZ2RhdGEgZmlsZXMgd3JpdHRlbiBvdXQgYnkgQml0QmFrZSIsCisgICAgdXNhZ2UgPSAiIiIKKyAgJXByb2cgLXQgcmVjaXBlbmFtZSB0YXNrbmFtZQorICAlcHJvZyBzaWdkYXRhZmlsZTEgc2lnZGF0YWZpbGUyCisgICVwcm9nIHNpZ2RhdGFmaWxlMSIiIikKKworcGFyc2VyLmFkZF9vcHRpb24oIi10IiwgIi0tdGFzayIsCisgICAgICAgIGhlbHAgPSAiZmluZCB0aGUgc2lnbmF0dXJlIGRhdGEgZmlsZXMgZm9yIGxhc3QgdHdvIHJ1bnMgb2YgdGhlIHNwZWNpZmllZCB0YXNrIGFuZCBjb21wYXJlIHRoZW0iLAorICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0idGFza2FyZ3MiLCBuYXJncz0yLCBtZXRhdmFyPSdyZWNpcGVuYW1lIHRhc2tuYW1lJykKKworb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHN5cy5hcmd2KQorCitpZiBvcHRpb25zLnRhc2thcmdzOgorICAgIHRpbmZvaWwgPSBiYi50aW5mb2lsLlRpbmZvaWwoKQorICAgIHRpbmZvaWwucHJlcGFyZShjb25maWdfb25seSA9IFRydWUpCisgICAgZmluZF9jb21wYXJlX3Rhc2sodGluZm9pbCwgb3B0aW9ucy50YXNrYXJnc1swXSwgb3B0aW9ucy50YXNrYXJnc1sxXSkKK2Vsc2U6CisgICAgaWYgbGVuKGFyZ3MpID09IDE6CisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICBlbHNlOgorICAgICAgICBpbXBvcnQgY1BpY2tsZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMjoKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBiYi5zaWdnZW4uZHVtcF9zaWdmaWxlKHN5cy5hcmd2WzFdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBiYi5zaWdnZW4uY29tcGFyZV9zaWdmaWxlcyhzeXMuYXJndlsxXSwgc3lzLmFyZ3ZbMl0pCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGUpKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgZXhjZXB0IGNQaWNrbGUuVW5waWNrbGluZ0Vycm9yLCBFT0ZFcnJvcjoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBzaWduYXR1cmUgZGF0YSAtIGVuc3VyZSB5b3UgYXJlIHNwZWNpZnlpbmcgc2lnZGF0YS9zaWdpbmZvIGZpbGVzJykKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgaWYgb3V0cHV0OgorICAgICAgICAgICAgcHJpbnQgJ1xuJy5qb2luKG91dHB1dCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1kdW1wc2lnIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWR1bXBzaWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjU2ZDkzYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1kdW1wc2lnCkBAIC0wLDAgKzEsNjUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIGJpdGJha2UtZHVtcHNpZworIyBCaXRCYWtlIHRhc2sgc2lnbmF0dXJlIGR1bXAgdXRpbGl0eQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBsb2dnaW5nCisKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSkpLCAnbGliJykpCisKK2ltcG9ydCBiYi5zaWdnZW4KKworZGVmIGxvZ2dlcl9jcmVhdGUobmFtZSwgb3V0cHV0PXN5cy5zdGRlcnIpOgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKG5hbWUpCisgICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihvdXRwdXQpCisgICAgZm9ybWF0ID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpCisgICAgaWYgb3V0cHV0LmlzYXR0eSgpOgorICAgICAgICBmb3JtYXQuZW5hYmxlX2NvbG9yKCkKKyAgICBjb25zb2xlLnNldEZvcm1hdHRlcihmb3JtYXQpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoY29uc29sZSkKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIHJldHVybiBsb2dnZXIKKworbG9nZ2VyID0gbG9nZ2VyX2NyZWF0ZSgnYml0YmFrZS1kdW1wc2lnJykKKworcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgIGRlc2NyaXB0aW9uID0gIkR1bXBzIHNpZ2luZm8vc2lnZGF0YSBmaWxlcyB3cml0dGVuIG91dCBieSBCaXRCYWtlIiwKKyAgICB1c2FnZSA9ICIiIgorICAlcHJvZyBzaWdkYXRhZmlsZSIiIikKKworb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHN5cy5hcmd2KQorCitpZiBsZW4oYXJncykgPT0gMToKKyAgICBwYXJzZXIucHJpbnRfaGVscCgpCitlbHNlOgorICAgIGltcG9ydCBjUGlja2xlCisgICAgdHJ5OgorICAgICAgICBvdXRwdXQgPSBiYi5zaWdnZW4uZHVtcF9zaWdmaWxlKGFyZ3NbMV0pCisgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihlKSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBleGNlcHQgY1BpY2tsZS5VbnBpY2tsaW5nRXJyb3IsIEVPRkVycm9yOgorICAgICAgICBsb2dnZXIuZXJyb3IoJ0ludmFsaWQgc2lnbmF0dXJlIGRhdGEgLSBlbnN1cmUgeW91IGFyZSBzcGVjaWZ5aW5nIGEgc2lnZGF0YS9zaWdpbmZvIGZpbGUnKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgb3V0cHV0OgorICAgICAgICBwcmludCAnXG4nLmpvaW4ob3V0cHV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWxheWVycyBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1sYXllcnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmIxMzA0NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1sYXllcnMKQEAgLTAsMCArMSwxMDcyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBUaGlzIHNjcmlwdCBoYXMgc3ViY29tbWFuZHMgd2hpY2ggb3BlcmF0ZSBhZ2FpbnN0IHlvdXIgYml0YmFrZSBsYXllcnMsIGVpdGhlcgorIyBkaXNwbGF5aW5nIHVzZWZ1bCBpbmZvcm1hdGlvbiwgb3IgYWN0aW5nIGFnYWluc3QgdGhlbS4KKyMgU2VlIHRoZSBoZWxwIG91dHB1dCBmb3IgZGV0YWlscyBvbiBhdmFpbGFibGUgY29tbWFuZHMuCisKKyMgQ29weXJpZ2h0IChDKSAyMDExIE1lbnRvciBHcmFwaGljcyBDb3Jwb3JhdGlvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGZubWF0Y2gKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCByZQoraW1wb3J0IGh0dHBsaWIsIHVybHBhcnNlLCBqc29uCitpbXBvcnQgc3VicHJvY2VzcworCitiaW5kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCit0b3BkaXIgPSBvcy5wYXRoLmRpcm5hbWUoYmluZGlyKQorc3lzLnBhdGhbMDowXSA9IFtvcy5wYXRoLmpvaW4odG9wZGlyLCAnbGliJyldCisKK2ltcG9ydCBiYi5jYWNoZQoraW1wb3J0IGJiLmNvb2tlcgoraW1wb3J0IGJiLnByb3ZpZGVycworaW1wb3J0IGJiLnV0aWxzCitpbXBvcnQgYmIudGluZm9pbAorCisKK2RlZiBsb2dnZXJfY3JlYXRlKG5hbWUsIG91dHB1dD1zeXMuc3RkZXJyKToKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihuYW1lKQorICAgIGNvbnNvbGUgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIob3V0cHV0KQorICAgIGZvcm1hdCA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKQorICAgIGlmIG91dHB1dC5pc2F0dHkoKToKKyAgICAgICAgZm9ybWF0LmVuYWJsZV9jb2xvcigpCisgICAgY29uc29sZS5zZXRGb3JtYXR0ZXIoZm9ybWF0KQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGNvbnNvbGUpCisgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICByZXR1cm4gbG9nZ2VyCisKK2xvZ2dlciA9IGxvZ2dlcl9jcmVhdGUoJ2JpdGJha2UtbGF5ZXJzJywgc3lzLnN0ZG91dCkKKworY2xhc3MgVXNlckVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBDb21tYW5kcygpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5iYmhhbmRsZXIgPSBOb25lCisgICAgICAgIHNlbGYuYmJsYXllcnMgPSBbXQorCisgICAgZGVmIGluaXRfYmJoYW5kbGVyKHNlbGYsIGNvbmZpZ19vbmx5ID0gRmFsc2UpOgorICAgICAgICBpZiBub3Qgc2VsZi5iYmhhbmRsZXI6CisgICAgICAgICAgICBzZWxmLmJiaGFuZGxlciA9IGJiLnRpbmZvaWwuVGluZm9pbCh0cmFja2luZz1UcnVlKQorICAgICAgICAgICAgc2VsZi5iYmxheWVycyA9IChzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YS5nZXRWYXIoJ0JCTEFZRVJTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLnByZXBhcmUoY29uZmlnX29ubHkpCisgICAgICAgICAgICBsYXllcmNvbmZzID0gc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEudmFyaGlzdG9yeS5nZXRfdmFyaWFibGVfaXRlbXNfZmlsZXMoJ0JCRklMRV9DT0xMRUNUSU9OUycsIHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhKQorICAgICAgICAgICAgc2VsZi5iYmZpbGVfY29sbGVjdGlvbnMgPSB7bGF5ZXI6IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUocGF0aCkpIGZvciBsYXllciwgcGF0aCBpbiBsYXllcmNvbmZzLml0ZXJpdGVtcygpfQorCisKKyAgICBkZWYgZG9fc2hvd19sYXllcnMoc2VsZiwgYXJncyk6CisgICAgICAgICIiInNob3cgY3VycmVudCBjb25maWd1cmVkIGxheWVycyIiIgorICAgICAgICBzZWxmLmluaXRfYmJoYW5kbGVyKGNvbmZpZ19vbmx5ID0gVHJ1ZSkKKyAgICAgICAgbG9nZ2VyLnBsYWluKCIlcyAgJXMgICVzIiAlICgibGF5ZXIiLmxqdXN0KDIwKSwgInBhdGgiLmxqdXN0KDQwKSwgInByaW9yaXR5IikpCisgICAgICAgIGxvZ2dlci5wbGFpbignPScgKiA3NCkKKyAgICAgICAgZm9yIGxheWVyLCBfLCByZWdleCwgcHJpIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZS5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXM6CisgICAgICAgICAgICBsYXllcmRpciA9IHNlbGYuYmJmaWxlX2NvbGxlY3Rpb25zLmdldChsYXllciwgTm9uZSkKKyAgICAgICAgICAgIGxheWVybmFtZSA9IHNlbGYuZ2V0X2xheWVyX25hbWUobGF5ZXJkaXIpCisgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzICAlcyAgJWQiICUgKGxheWVybmFtZS5sanVzdCgyMCksIGxheWVyZGlyLmxqdXN0KDQwKSwgcHJpKSkKKworCisgICAgZGVmIGRvX2FkZF9sYXllcihzZWxmLCBhcmdzKToKKyAgICAgICAgIiIiQWRkIGEgbGF5ZXIgdG8gYmJsYXllcnMuY29uZgorCitBZGRzIHRoZSBzcGVjaWZpZWQgbGF5ZXIgdG8gYmJsYXllcnMuY29uZgorIiIiCisgICAgICAgIGxheWVyZGlyID0gb3MucGF0aC5hYnNwYXRoKGFyZ3MubGF5ZXJkaXIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsYXllcmRpcik6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJTcGVjaWZpZWQgbGF5ZXIgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3RcbiIpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGxheWVyX2NvbmYgPSBvcy5wYXRoLmpvaW4obGF5ZXJkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobGF5ZXJfY29uZik6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJTcGVjaWZpZWQgbGF5ZXIgZGlyZWN0b3J5IGRvZXNuJ3QgY29udGFpbiBhIGNvbmYvbGF5ZXIuY29uZiBmaWxlXG4iKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBiYmxheWVyc19jb25mID0gb3MucGF0aC5qb2luKCdjb25mJywgJ2JibGF5ZXJzLmNvbmYnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYmJsYXllcnNfY29uZik6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJVbmFibGUgdG8gZmluZCBiYmxheWVycy5jb25mXG4iKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICAobm90YWRkZWQsIF8pID0gYmIudXRpbHMuZWRpdF9iYmxheWVyc19jb25mKGJibGF5ZXJzX2NvbmYsIGxheWVyZGlyLCBOb25lKQorICAgICAgICBpZiBub3RhZGRlZDoKKyAgICAgICAgICAgIGZvciBpdGVtIGluIG5vdGFkZGVkOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlNwZWNpZmllZCBsYXllciAlcyBpcyBhbHJlYWR5IGluIEJCTEFZRVJTXG4iICUgaXRlbSkKKworCisgICAgZGVmIGRvX3JlbW92ZV9sYXllcihzZWxmLCBhcmdzKToKKyAgICAgICAgIiIiUmVtb3ZlIGEgbGF5ZXIgZnJvbSBiYmxheWVycy5jb25mCisKK1JlbW92ZXMgdGhlIHNwZWNpZmllZCBsYXllciBmcm9tIGJibGF5ZXJzLmNvbmYKKyIiIgorICAgICAgICBiYmxheWVyc19jb25mID0gb3MucGF0aC5qb2luKCdjb25mJywgJ2JibGF5ZXJzLmNvbmYnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYmJsYXllcnNfY29uZik6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJVbmFibGUgdG8gZmluZCBiYmxheWVycy5jb25mXG4iKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBpZiBhcmdzLmxheWVyZGlyLnN0YXJ0c3dpdGgoJyonKToKKyAgICAgICAgICAgIGxheWVyZGlyID0gYXJncy5sYXllcmRpcgorICAgICAgICBlbGlmIG5vdCAnLycgaW4gYXJncy5sYXllcmRpcjoKKyAgICAgICAgICAgIGxheWVyZGlyID0gJyovJXMnICUgYXJncy5sYXllcmRpcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGF5ZXJkaXIgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5sYXllcmRpcikKKyAgICAgICAgKF8sIG5vdHJlbW92ZWQpID0gYmIudXRpbHMuZWRpdF9iYmxheWVyc19jb25mKGJibGF5ZXJzX2NvbmYsIE5vbmUsIGxheWVyZGlyKQorICAgICAgICBpZiBub3RyZW1vdmVkOgorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gbm90cmVtb3ZlZDoKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJObyBsYXllcnMgbWF0Y2hpbmcgJXMgZm91bmQgaW4gQkJMQVlFUlNcbiIgJSBpdGVtKQorICAgICAgICAgICAgcmV0dXJuIDEKKworCisgICAgZGVmIGdldF9qc29uX2RhdGEoc2VsZiwgYXBpdXJsKToKKyAgICAgICAgcHJveHlfc2V0dGluZ3MgPSBvcy5lbnZpcm9uLmdldCgiaHR0cF9wcm94eSIsIE5vbmUpCisgICAgICAgIGNvbm4gPSBOb25lCisgICAgICAgIF9wYXJzZWR1cmwgPSB1cmxwYXJzZS51cmxwYXJzZShhcGl1cmwpCisgICAgICAgIHBhdGggPSBfcGFyc2VkdXJsLnBhdGgKKyAgICAgICAgcXVlcnkgPSBfcGFyc2VkdXJsLnF1ZXJ5CisgICAgICAgIGRlZiBwYXJzZV91cmwodXJsKToKKyAgICAgICAgICAgIHBhcnNlZHVybCA9IHVybHBhcnNlLnVybHBhcnNlKHVybCkKKyAgICAgICAgICAgIGlmIHBhcnNlZHVybC5uZXRsb2NbMF0gPT0gJ1snOgorICAgICAgICAgICAgICAgIGhvc3QsIHBvcnQgPSBwYXJzZWR1cmwubmV0bG9jWzE6XS5zcGxpdCgnXScsIDEpCisgICAgICAgICAgICAgICAgaWYgJzonIGluIHBvcnQ6CisgICAgICAgICAgICAgICAgICAgIHBvcnQgPSBwb3J0LnJzcGxpdCgnOicsIDEpWzFdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcG9ydCA9IE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgcGFyc2VkdXJsLm5ldGxvYy5jb3VudCgnOicpID09IDE6CisgICAgICAgICAgICAgICAgICAgIChob3N0LCBwb3J0KSA9IHBhcnNlZHVybC5uZXRsb2Muc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGhvc3QgPSBwYXJzZWR1cmwubmV0bG9jCisgICAgICAgICAgICAgICAgICAgIHBvcnQgPSBOb25lCisgICAgICAgICAgICByZXR1cm4gKGhvc3QsIDgwIGlmIHBvcnQgaXMgTm9uZSBlbHNlIGludChwb3J0KSkKKworICAgICAgICBpZiBwcm94eV9zZXR0aW5ncyBpcyBOb25lOgorICAgICAgICAgICAgaG9zdCwgcG9ydCA9IHBhcnNlX3VybChhcGl1cmwpCisgICAgICAgICAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbihob3N0LCBwb3J0KQorICAgICAgICAgICAgY29ubi5yZXF1ZXN0KCJHRVQiLCBwYXRoICsgIj8iICsgcXVlcnkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBob3N0LCBwb3J0ID0gcGFyc2VfdXJsKHByb3h5X3NldHRpbmdzKQorICAgICAgICAgICAgY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oaG9zdCwgcG9ydCkKKyAgICAgICAgICAgIGNvbm4ucmVxdWVzdCgiR0VUIiwgYXBpdXJsKQorCisgICAgICAgIHIgPSBjb25uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgaWYgci5zdGF0dXMgIT0gMjAwOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gcmVhZCAiICsgcGF0aCArICI6ICVkICVzIiAlIChyLnN0YXR1cywgci5yZWFzb24pKQorICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhyLnJlYWQoKSkKKworCisgICAgZGVmIGdldF9sYXllcl9kZXBzKHNlbGYsIGxheWVybmFtZSwgbGF5ZXJpdGVtcywgbGF5ZXJicmFuY2hlcywgbGF5ZXJkZXBlbmRlbmNpZXMsIGJyYW5jaG51bSwgc2VsZm5hbWU9RmFsc2UpOgorICAgICAgICBkZWYgbGF5ZXJpdGVtc19pbmZvX2lkKGl0ZW1zX25hbWUsIGxheWVyaXRlbXMpOgorICAgICAgICAgICAgbGl0ZW1zX2lkID0gTm9uZQorICAgICAgICAgICAgZm9yIGxpIGluIGxheWVyaXRlbXM6CisgICAgICAgICAgICAgICAgaWYgbGlbJ25hbWUnXSA9PSBpdGVtc19uYW1lOgorICAgICAgICAgICAgICAgICAgICBsaXRlbXNfaWQgPSBsaVsnaWQnXQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmV0dXJuIGxpdGVtc19pZAorCisgICAgICAgIGRlZiBsYXllcmJyYW5jaGVzX2luZm8oaXRlbXNfaWQsIGxheWVyYnJhbmNoZXMpOgorICAgICAgICAgICAgbGJyYW5jaCA9IHt9CisgICAgICAgICAgICBmb3IgbGIgaW4gbGF5ZXJicmFuY2hlczoKKyAgICAgICAgICAgICAgICBpZiBsYlsnbGF5ZXInXSA9PSBpdGVtc19pZCBhbmQgbGJbJ2JyYW5jaCddID09IGJyYW5jaG51bToKKyAgICAgICAgICAgICAgICAgICAgbGJyYW5jaFsnaWQnXSA9IGxiWydpZCddCisgICAgICAgICAgICAgICAgICAgIGxicmFuY2hbJ3Zjc19zdWJkaXInXSA9IGxiWyd2Y3Nfc3ViZGlyJ10KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHJldHVybiBsYnJhbmNoCisKKyAgICAgICAgZGVmIGxheWVyZGVwZW5kZW5jaWVzX2luZm8obGJfaWQsIGxheWVyZGVwZW5kZW5jaWVzKToKKyAgICAgICAgICAgIGxkX2RlcHMgPSBbXQorICAgICAgICAgICAgZm9yIGxkIGluIGxheWVyZGVwZW5kZW5jaWVzOgorICAgICAgICAgICAgICAgIGlmIGxkWydsYXllcmJyYW5jaCddID09IGxiX2lkIGFuZCBub3QgbGRbJ2RlcGVuZGVuY3knXSBpbiBsZF9kZXBzOgorICAgICAgICAgICAgICAgICAgICBsZF9kZXBzLmFwcGVuZChsZFsnZGVwZW5kZW5jeSddKQorICAgICAgICAgICAgaWYgbm90IGxkX2RlcHM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJUaGUgZGVwZW5kZW5jeSBvZiBsYXllckRlcGVuZGVuY2llcyBpcyBub3QgZm91bmQuIikKKyAgICAgICAgICAgIHJldHVybiBsZF9kZXBzCisKKyAgICAgICAgZGVmIGxheWVyaXRlbXNfaW5mb19uYW1lX3N1YmRpcihpdGVtc19pZCwgbGF5ZXJpdGVtcyk6CisgICAgICAgICAgICBsaXRlbXMgPSB7fQorICAgICAgICAgICAgZm9yIGxpIGluIGxheWVyaXRlbXM6CisgICAgICAgICAgICAgICAgaWYgbGlbJ2lkJ10gPT0gaXRlbXNfaWQ6CisgICAgICAgICAgICAgICAgICAgIGxpdGVtc1sndmNzX3VybCddID0gbGlbJ3Zjc191cmwnXQorICAgICAgICAgICAgICAgICAgICBsaXRlbXNbJ25hbWUnXSA9IGxpWyduYW1lJ10KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHJldHVybiBsaXRlbXMKKworICAgICAgICBpZiBzZWxmbmFtZToKKyAgICAgICAgICAgIHNlbGZpZCA9IGxheWVyaXRlbXNfaW5mb19pZChsYXllcm5hbWUsIGxheWVyaXRlbXMpCisgICAgICAgICAgICBsYmluZm8gPSBsYXllcmJyYW5jaGVzX2luZm8oc2VsZmlkLCBsYXllcmJyYW5jaGVzKQorICAgICAgICAgICAgaWYgbGJpbmZvOgorICAgICAgICAgICAgICAgIHNlbGZzdWJkaXIgPSBsYmluZm9bJ3Zjc19zdWJkaXInXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIiVzIGlzIG5vdCBmb3VuZCBpbiB0aGUgc3BlY2lmaWVkIGJyYW5jaCIgJSBsYXllcm5hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmdXJsID0gbGF5ZXJpdGVtc19pbmZvX25hbWVfc3ViZGlyKHNlbGZpZCwgbGF5ZXJpdGVtcylbJ3Zjc191cmwnXQorICAgICAgICAgICAgaWYgc2VsZnVybDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZnVybCwgc2VsZnN1YmRpcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNhbm5vdCBnZXQgbGF5ZXIgJXMgZ2l0IHJlcG8gYW5kIHN1YmRpciIgJSBsYXllcm5hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGxkaWN0ID0ge30KKyAgICAgICAgaXRlbXNpZCA9IGxheWVyaXRlbXNfaW5mb19pZChsYXllcm5hbWUsIGxheWVyaXRlbXMpCisgICAgICAgIGlmIG5vdCBpdGVtc2lkOgorICAgICAgICAgICAgcmV0dXJuIGxheWVybmFtZSwgTm9uZQorICAgICAgICBsYmlkID0gbGF5ZXJicmFuY2hlc19pbmZvKGl0ZW1zaWQsIGxheWVyYnJhbmNoZXMpCisgICAgICAgIGlmIGxiaWQ6CisgICAgICAgICAgICBsYmlkID0gbGF5ZXJicmFuY2hlc19pbmZvKGl0ZW1zaWQsIGxheWVyYnJhbmNoZXMpWydpZCddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIiVzIGlzIG5vdCBmb3VuZCBpbiB0aGUgc3BlY2lmaWVkIGJyYW5jaCIgJSBsYXllcm5hbWUpCisgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorICAgICAgICBmb3IgZGVwZW5kZW5jeSBpbiBsYXllcmRlcGVuZGVuY2llc19pbmZvKGxiaWQsIGxheWVyZGVwZW5kZW5jaWVzKToKKyAgICAgICAgICAgIGxuYW1lID0gbGF5ZXJpdGVtc19pbmZvX25hbWVfc3ViZGlyKGRlcGVuZGVuY3ksIGxheWVyaXRlbXMpWyduYW1lJ10KKyAgICAgICAgICAgIGx1cmwgPSBsYXllcml0ZW1zX2luZm9fbmFtZV9zdWJkaXIoZGVwZW5kZW5jeSwgbGF5ZXJpdGVtcylbJ3Zjc191cmwnXQorICAgICAgICAgICAgbHN1YmRpciA9IGxheWVyYnJhbmNoZXNfaW5mbyhkZXBlbmRlbmN5LCBsYXllcmJyYW5jaGVzKVsndmNzX3N1YmRpciddCisgICAgICAgICAgICBsZGljdFtsbmFtZV0gPSBsdXJsLCBsc3ViZGlyCisgICAgICAgIHJldHVybiBOb25lLCBsZGljdAorCisKKyAgICBkZWYgZ2V0X2ZldGNoX2xheWVyKHNlbGYsIGZldGNoZGlyLCB1cmwsIHN1YmRpciwgZmV0Y2hfbGF5ZXIpOgorICAgICAgICBsYXllcm5hbWUgPSBzZWxmLmdldF9sYXllcl9uYW1lKHVybCkKKyAgICAgICAgaWYgb3MucGF0aC5zcGxpdGV4dChsYXllcm5hbWUpWzFdID09ICcuZ2l0JzoKKyAgICAgICAgICAgIGxheWVybmFtZSA9IG9zLnBhdGguc3BsaXRleHQobGF5ZXJuYW1lKVswXQorICAgICAgICByZXBvZGlyID0gb3MucGF0aC5qb2luKGZldGNoZGlyLCBsYXllcm5hbWUpCisgICAgICAgIGxheWVyZGlyID0gb3MucGF0aC5qb2luKHJlcG9kaXIsIHN1YmRpcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHJlcG9kaXIpOgorICAgICAgICAgICAgaWYgZmV0Y2hfbGF5ZXI6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5jYWxsKCdnaXQgY2xvbmUgJXMgJXMnICUgKHVybCwgcmVwb2RpciksIHNoZWxsID0gVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiByZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRmFpbGVkIHRvIGRvd25sb2FkICVzIiAlIHVybCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGF5ZXJuYW1lLCBsYXllcmRpcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIlJlcG9zaXRvcnkgJXMgbmVlZHMgdG8gYmUgZmV0Y2hlZCIgJSB1cmwpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxheWVybmFtZSwgbGF5ZXJkaXIKKyAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhsYXllcmRpcik6CisgICAgICAgICAgICByZXR1cm4gbGF5ZXJuYW1lLCBsYXllcmRpcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCIlcyBpcyBub3QgaW4gJXMiICUgKHVybCwgc3ViZGlyKSkKKyAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKworCisgICAgZGVmIGRvX2xheWVyaW5kZXhfZmV0Y2goc2VsZiwgYXJncyk6CisgICAgICAgICIiIkZldGNoZXMgYSBsYXllciBmcm9tIGEgbGF5ZXIgaW5kZXggYWxvbmcgd2l0aCBpdHMgZGVwZW5kZW50IGxheWVycywgYW5kIGFkZHMgdGhlbSB0byBjb25mL2JibGF5ZXJzLmNvbmYuCisiIiIKKyAgICAgICAgc2VsZi5pbml0X2JiaGFuZGxlcihjb25maWdfb25seSA9IFRydWUpCisgICAgICAgIGFwaXVybCA9IHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJMQVlFUlNfTEFZRVJJTkRFWF9VUkwnLCBUcnVlKQorICAgICAgICBpZiBub3QgYXBpdXJsOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJDYW5ub3QgZ2V0IEJCTEFZRVJTX0xBWUVSSU5ERVhfVVJMIikKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBhcGl1cmxbLTFdICE9ICcvJzoKKyAgICAgICAgICAgICAgICBhcGl1cmwgKz0gJy8nCisgICAgICAgICAgICBhcGl1cmwgKz0gImFwaS8iCisgICAgICAgIGFwaWxpbmtzID0gc2VsZi5nZXRfanNvbl9kYXRhKGFwaXVybCkKKyAgICAgICAgYnJhbmNoZXMgPSBzZWxmLmdldF9qc29uX2RhdGEoYXBpbGlua3NbJ2JyYW5jaGVzJ10pCisKKyAgICAgICAgYnJhbmNobnVtID0gMAorICAgICAgICBmb3IgYnJhbmNoIGluIGJyYW5jaGVzOgorICAgICAgICAgICAgaWYgYnJhbmNoWyduYW1lJ10gPT0gYXJncy5icmFuY2g6CisgICAgICAgICAgICAgICAgYnJhbmNobnVtID0gYnJhbmNoWydpZCddCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgYnJhbmNobnVtID09IDA6CisgICAgICAgICAgICB2YWxpZGJyYW5jaGVzID0gJywgJy5qb2luKFticmFuY2hbJ25hbWUnXSBmb3IgYnJhbmNoIGluIGJyYW5jaGVzXSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBsYXllciBicmFuY2ggbmFtZSAiJXMiLiBWYWxpZCBicmFuY2hlczogJXMnICUgKGFyZ3MuYnJhbmNoLCB2YWxpZGJyYW5jaGVzKSkKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgaWdub3JlX2xheWVycyA9IFtdCisgICAgICAgIGZvciBjb2xsZWN0aW9uIGluIHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJGSUxFX0NPTExFQ1RJT05TJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgIGxuYW1lID0gc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQkxBWUVSU19MQVlFUklOREVYX05BTUVfJXMnICUgY29sbGVjdGlvbiwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGxuYW1lOgorICAgICAgICAgICAgICAgIGlnbm9yZV9sYXllcnMuYXBwZW5kKGxuYW1lKQorCisgICAgICAgIGlmIGFyZ3MuaWdub3JlOgorICAgICAgICAgICAgaWdub3JlX2xheWVycy5leHRlbmQoYXJncy5pZ25vcmUuc3BsaXQoJywnKSkKKworICAgICAgICBsYXllcml0ZW1zID0gc2VsZi5nZXRfanNvbl9kYXRhKGFwaWxpbmtzWydsYXllckl0ZW1zJ10pCisgICAgICAgIGxheWVyYnJhbmNoZXMgPSBzZWxmLmdldF9qc29uX2RhdGEoYXBpbGlua3NbJ2xheWVyQnJhbmNoZXMnXSkKKyAgICAgICAgbGF5ZXJkZXBlbmRlbmNpZXMgPSBzZWxmLmdldF9qc29uX2RhdGEoYXBpbGlua3NbJ2xheWVyRGVwZW5kZW5jaWVzJ10pCisgICAgICAgIGludmFsdWVuYW1lcyA9IFtdCisgICAgICAgIHJlcG91cmxzID0ge30KKyAgICAgICAgcHJpbnRsYXllcnMgPSBbXQorICAgICAgICBkZWYgcXVlcnlfZGVwZW5kZW5jaWVzKGxheWVycywgbGF5ZXJpdGVtcywgbGF5ZXJicmFuY2hlcywgbGF5ZXJkZXBlbmRlbmNpZXMsIGJyYW5jaG51bSk6CisgICAgICAgICAgICBkZXBzbGF5ZXIgPSBbXQorICAgICAgICAgICAgZm9yIGxheWVybmFtZSBpbiBsYXllcnM6CisgICAgICAgICAgICAgICAgaW52YWx1ZW5hbWUsIGxheWVyZGljdCA9IHNlbGYuZ2V0X2xheWVyX2RlcHMobGF5ZXJuYW1lLCBsYXllcml0ZW1zLCBsYXllcmJyYW5jaGVzLCBsYXllcmRlcGVuZGVuY2llcywgYnJhbmNobnVtKQorICAgICAgICAgICAgICAgIGlmIGxheWVyZGljdDoKKyAgICAgICAgICAgICAgICAgICAgcmVwb3VybHNbbGF5ZXJuYW1lXSA9IHNlbGYuZ2V0X2xheWVyX2RlcHMobGF5ZXJuYW1lLCBsYXllcml0ZW1zLCBsYXllcmJyYW5jaGVzLCBsYXllcmRlcGVuZGVuY2llcywgYnJhbmNobnVtLCBzZWxmbmFtZT1UcnVlKQorICAgICAgICAgICAgICAgICAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJkaWN0OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxheWVyIGluIGlnbm9yZV9sYXllcnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwc2xheWVyLmFwcGVuZChsYXllcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50bGF5ZXJzLmFwcGVuZCgobGF5ZXJuYW1lLCBsYXllciwgbGF5ZXJkaWN0W2xheWVyXVswXSwgbGF5ZXJkaWN0W2xheWVyXVsxXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGF5ZXIgaW4gaWdub3JlX2xheWVycyBhbmQgbm90IGxheWVyIGluIHJlcG91cmxzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG91cmxzW2xheWVyXSA9IChsYXllcmRpY3RbbGF5ZXJdWzBdLCBsYXllcmRpY3RbbGF5ZXJdWzFdKQorICAgICAgICAgICAgICAgIGlmIGludmFsdWVuYW1lIGFuZCBub3QgaW52YWx1ZW5hbWUgaW4gaW52YWx1ZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICBpbnZhbHVlbmFtZXMuYXBwZW5kKGludmFsdWVuYW1lKQorICAgICAgICAgICAgcmV0dXJuIGRlcHNsYXllcgorCisgICAgICAgIGRlcHNsYXllcnMgPSBxdWVyeV9kZXBlbmRlbmNpZXMoYXJncy5sYXllcm5hbWUsIGxheWVyaXRlbXMsIGxheWVyYnJhbmNoZXMsIGxheWVyZGVwZW5kZW5jaWVzLCBicmFuY2hudW0pCisgICAgICAgIHdoaWxlIGRlcHNsYXllcnM6CisgICAgICAgICAgICBkZXBzbGF5ZXIgPSBxdWVyeV9kZXBlbmRlbmNpZXMoZGVwc2xheWVycywgbGF5ZXJpdGVtcywgbGF5ZXJicmFuY2hlcywgbGF5ZXJkZXBlbmRlbmNpZXMsIGJyYW5jaG51bSkKKyAgICAgICAgICAgIGRlcHNsYXllcnMgPSBkZXBzbGF5ZXIKKyAgICAgICAgaWYgaW52YWx1ZW5hbWVzOgorICAgICAgICAgICAgZm9yIGludmFsdWVuYW1lIGluIGludmFsdWVuYW1lczoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0xheWVyICIlcyIgbm90IGZvdW5kIGluIGxheWVyIGluZGV4JyAlIGludmFsdWVuYW1lKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgbG9nZ2VyLnBsYWluKCIlcyAgJXMgICVzICAlcyIgJSAoIkxheWVyIi5sanVzdCgxOSksICJSZXF1aXJlZCBieSIubGp1c3QoMTkpLCAiR2l0IHJlcG9zaXRvcnkiLmxqdXN0KDU0KSwgIlN1YmRpcmVjdG9yeSIpKQorICAgICAgICBsb2dnZXIucGxhaW4oJz0nICogMTE1KQorICAgICAgICBmb3IgbGF5ZXJuYW1lIGluIGFyZ3MubGF5ZXJuYW1lOgorICAgICAgICAgICAgbGF5ZXJ1cmwgPSByZXBvdXJsc1tsYXllcm5hbWVdCisgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzICVzICVzICVzIiAlIChsYXllcm5hbWUubGp1c3QoMjApLCAnLScubGp1c3QoMjApLCBsYXllcnVybFswXS5sanVzdCg1NSksIGxheWVydXJsWzFdKSkKKyAgICAgICAgcHJpbnRlZGxheWVycyA9IFtdCisgICAgICAgIGZvciBsYXllciwgZGVwZW5kZW5jeSwgZ2l0cmVwbywgc3ViZGlyZWN0b3J5IGluIHByaW50bGF5ZXJzOgorICAgICAgICAgICAgaWYgZGVwZW5kZW5jeSBpbiBwcmludGVkbGF5ZXJzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzICVzICVzICVzIiAlIChkZXBlbmRlbmN5LmxqdXN0KDIwKSwgbGF5ZXIubGp1c3QoMjApLCBnaXRyZXBvLmxqdXN0KDU1KSwgc3ViZGlyZWN0b3J5KSkKKyAgICAgICAgICAgIHByaW50ZWRsYXllcnMuYXBwZW5kKGRlcGVuZGVuY3kpCisKKyAgICAgICAgaWYgcmVwb3VybHM6CisgICAgICAgICAgICBmZXRjaGRpciA9IHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJMQVlFUlNfRkVUQ0hfRElSJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBmZXRjaGRpcjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNhbm5vdCBnZXQgQkJMQVlFUlNfRkVUQ0hfRElSIikKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZldGNoZGlyKToKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhmZXRjaGRpcikKKyAgICAgICAgICAgIGFkZGxheWVycyA9IFtdCisgICAgICAgICAgICBmb3IgcmVwb3VybCwgc3ViZGlyIGluIHJlcG91cmxzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIG5hbWUsIGxheWVyZGlyID0gc2VsZi5nZXRfZmV0Y2hfbGF5ZXIoZmV0Y2hkaXIsIHJlcG91cmwsIHN1YmRpciwgbm90IGFyZ3Muc2hvd19vbmx5KQorICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lOgorICAgICAgICAgICAgICAgICAgICAjIEVycm9yIGFscmVhZHkgc2hvd24KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgICAgICBhZGRsYXllcnMuYXBwZW5kKChzdWJkaXIsIG5hbWUsIGxheWVyZGlyKSkKKyAgICAgICAgaWYgbm90IGFyZ3Muc2hvd19vbmx5OgorICAgICAgICAgICAgZm9yIHN1YmRpciwgbmFtZSwgbGF5ZXJkaXIgaW4gc2V0KGFkZGxheWVycyk6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobGF5ZXJkaXIpOgorICAgICAgICAgICAgICAgICAgICBpZiBzdWJkaXI6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIkFkZGluZyBsYXllciBcIiVzXCIgdG8gY29uZi9iYmxheWVycy5jb25mIiAlIHN1YmRpcikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiQWRkaW5nIGxheWVyIFwiJXNcIiB0byBjb25mL2JibGF5ZXJzLmNvbmYiICUgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxhcmdzID0gYXJncGFyc2UuTmFtZXNwYWNlKCkKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxhcmdzLmxheWVyZGlyID0gbGF5ZXJkaXIKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kb19hZGRfbGF5ZXIobG9jYWxhcmdzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKworICAgIGRlZiBkb19sYXllcmluZGV4X3Nob3dfZGVwZW5kcyhzZWxmLCBhcmdzKToKKyAgICAgICAgIiIiRmluZCBsYXllciBkZXBlbmRlbmNpZXMgZnJvbSBsYXllciBpbmRleC4KKyIiIgorICAgICAgICBhcmdzLnNob3dfb25seSA9IFRydWUKKyAgICAgICAgYXJncy5pZ25vcmUgPSBbXQorICAgICAgICBzZWxmLmRvX2xheWVyaW5kZXhfZmV0Y2goYXJncykKKworCisgICAgZGVmIHZlcnNpb25fc3RyKHNlbGYsIHBlLCBwdiwgcHIgPSBOb25lKToKKyAgICAgICAgdmVyc3RyID0gIiVzIiAlIHB2CisgICAgICAgIGlmIHByOgorICAgICAgICAgICAgdmVyc3RyID0gIiVzLSVzIiAlICh2ZXJzdHIsIHByKQorICAgICAgICBpZiBwZToKKyAgICAgICAgICAgIHZlcnN0ciA9ICIlczolcyIgJSAocGUsIHZlcnN0cikKKyAgICAgICAgcmV0dXJuIHZlcnN0cgorCisKKyAgICBkZWYgZG9fc2hvd19vdmVybGF5ZWQoc2VsZiwgYXJncyk6CisgICAgICAgICIiImxpc3Qgb3ZlcmxheWVkIHJlY2lwZXMgKHdoZXJlIHRoZSBzYW1lIHJlY2lwZSBleGlzdHMgaW4gYW5vdGhlciBsYXllcikKKworTGlzdHMgdGhlIG5hbWVzIG9mIG92ZXJsYXllZCByZWNpcGVzIGFuZCB0aGUgYXZhaWxhYmxlIHZlcnNpb25zIGluIGVhY2gKK2xheWVyLCB3aXRoIHRoZSBwcmVmZXJyZWQgdmVyc2lvbiBmaXJzdC4gTm90ZSB0aGF0IHNraXBwZWQgcmVjaXBlcyB0aGF0CithcmUgb3ZlcmxheWVkIHdpbGwgYWxzbyBiZSBsaXN0ZWQsIHdpdGggYSAiIChza2lwcGVkKSIgc3VmZml4LgorIiIiCisgICAgICAgIHNlbGYuaW5pdF9iYmhhbmRsZXIoKQorCisgICAgICAgIGl0ZW1zX2xpc3RlZCA9IHNlbGYubGlzdF9yZWNpcGVzKCdPdmVybGF5ZWQgcmVjaXBlcycsIE5vbmUsIFRydWUsIGFyZ3Muc2FtZV92ZXJzaW9uLCBhcmdzLmZpbGVuYW1lcywgVHJ1ZSwgTm9uZSkKKworICAgICAgICAjIENoZWNrIGZvciBvdmVybGF5ZWQgLmJiY2xhc3MgZmlsZXMKKyAgICAgICAgY2xhc3NlcyA9IGRlZmF1bHRkaWN0KGxpc3QpCisgICAgICAgIGZvciBsYXllcmRpciBpbiBzZWxmLmJibGF5ZXJzOgorICAgICAgICAgICAgY2xhc3NkaXIgPSBvcy5wYXRoLmpvaW4obGF5ZXJkaXIsICdjbGFzc2VzJykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNsYXNzZGlyKToKKyAgICAgICAgICAgICAgICBmb3IgY2xhc3NmaWxlIGluIG9zLmxpc3RkaXIoY2xhc3NkaXIpOgorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLnNwbGl0ZXh0KGNsYXNzZmlsZSlbMV0gPT0gJy5iYmNsYXNzJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXNbY2xhc3NmaWxlXS5hcHBlbmQoY2xhc3NkaXIpCisKKyAgICAgICAgIyBMb2NhdGluZyBjbGFzc2VzIGFuZCBvdGhlciBmaWxlcyBpcyBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gcmVjaXBlcyAtCisgICAgICAgICMgbGF5ZXIgcHJpb3JpdHkgaXMgbm90IGEgZmFjdG9yOyBpbnN0ZWFkIEJpdEJha2UgdXNlcyB0aGUgZmlyc3QgbWF0Y2hpbmcKKyAgICAgICAgIyBmaWxlIGluIEJCUEFUSCwgd2hpY2ggaXMgbWFuaXB1bGF0ZWQgZGlyZWN0bHkgYnkgZWFjaCBsYXllcidzCisgICAgICAgICMgY29uZi9sYXllci5jb25mIGluIHR1cm4sIHRodXMgdGhlIG9yZGVyIG9mIGxheWVycyBpbiBiYmxheWVycy5jb25mIGlzIGEKKyAgICAgICAgIyBmYWN0b3IgLSBob3dldmVyLCBlYWNoIGxheWVyLmNvbmYgaXMgZnJlZSB0byBlaXRoZXIgcHJlcGVuZCBvciBhcHBlbmQgdG8KKyAgICAgICAgIyBCQlBBVEggKG9yIGluZGVlZCBkbyBjcmF6eSBzdHVmZiB3aXRoIGl0KS4gVGh1cyB0aGUgb3JkZXIgaW4gQkJQQVRIIG1pZ2h0CisgICAgICAgICMgbm90IGJlIGV4YWN0bHkgdGhlIG9yZGVyIHByZXNlbnQgaW4gYmJsYXllcnMuY29uZiBlaXRoZXIuCisgICAgICAgIGJicGF0aCA9IHN0cihzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YS5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpKQorICAgICAgICBvdmVybGF5ZWRfY2xhc3NfZm91bmQgPSBGYWxzZQorICAgICAgICBmb3IgKGNsYXNzZmlsZSwgY2xhc3NkaXJzKSBpbiBjbGFzc2VzLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBsZW4oY2xhc3NkaXJzKSA+IDE6CisgICAgICAgICAgICAgICAgaWYgbm90IG92ZXJsYXllZF9jbGFzc19mb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCc9PT0gT3ZlcmxheWVkIGNsYXNzZXMgPT09JykKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmxheWVkX2NsYXNzX2ZvdW5kID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgbWFpbmZpbGUgPSBiYi51dGlscy53aGljaChiYnBhdGgsIG9zLnBhdGguam9pbignY2xhc3NlcycsIGNsYXNzZmlsZSkpCisgICAgICAgICAgICAgICAgaWYgYXJncy5maWxlbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbignJXMnICUgbWFpbmZpbGUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBXZSBlZmZlY3RpdmVseSBoYXZlIHRvIGd1ZXNzIHRoZSBsYXllciBoZXJlCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbignJXM6JyAlIGNsYXNzZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgbWFpbmxheWVybmFtZSA9ICc/JworICAgICAgICAgICAgICAgICAgICBmb3IgbGF5ZXJkaXIgaW4gc2VsZi5iYmxheWVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZGlyID0gb3MucGF0aC5qb2luKGxheWVyZGlyLCAnY2xhc3NlcycpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtYWluZmlsZS5zdGFydHN3aXRoKGNsYXNzZGlyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlubGF5ZXJuYW1lID0gc2VsZi5nZXRfbGF5ZXJfbmFtZShsYXllcmRpcikKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCcgICVzJyAlIG1haW5sYXllcm5hbWUpCisgICAgICAgICAgICAgICAgZm9yIGNsYXNzZGlyIGluIGNsYXNzZGlyczoKKyAgICAgICAgICAgICAgICAgICAgZnVsbHBhdGggPSBvcy5wYXRoLmpvaW4oY2xhc3NkaXIsIGNsYXNzZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZnVsbHBhdGggIT0gbWFpbmZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBhcmdzLmZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnICAlcycgJSBmdWxscGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyAgJXMnICUgc2VsZi5nZXRfbGF5ZXJfbmFtZShvcy5wYXRoLmRpcm5hbWUoY2xhc3NkaXIpKSkKKworICAgICAgICBpZiBvdmVybGF5ZWRfY2xhc3NfZm91bmQ6CisgICAgICAgICAgICBpdGVtc19saXN0ZWQgPSBUcnVlOworCisgICAgICAgIGlmIG5vdCBpdGVtc19saXN0ZWQ6CisgICAgICAgICAgICBsb2dnZXIucGxhaW4oJ05vIG92ZXJsYXllZCBmaWxlcyBmb3VuZC4nKQorCisKKyAgICBkZWYgZG9fc2hvd19yZWNpcGVzKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJsaXN0IGF2YWlsYWJsZSByZWNpcGVzLCBzaG93aW5nIHRoZSBsYXllciB0aGV5IGFyZSBwcm92aWRlZCBieQorCitMaXN0cyB0aGUgbmFtZXMgb2YgcmVjaXBlcyBhbmQgdGhlIGF2YWlsYWJsZSB2ZXJzaW9ucyBpbiBlYWNoCitsYXllciwgd2l0aCB0aGUgcHJlZmVycmVkIHZlcnNpb24gZmlyc3QuIE9wdGlvbmFsbHkgeW91IG1heSBzcGVjaWZ5CitwbnNwZWMgdG8gbWF0Y2ggYSBzcGVjaWZpZWQgcmVjaXBlIG5hbWUgKHN1cHBvcnRzIHdpbGRjYXJkcykuIE5vdGUgdGhhdAorc2tpcHBlZCByZWNpcGVzIHdpbGwgYWxzbyBiZSBsaXN0ZWQsIHdpdGggYSAiIChza2lwcGVkKSIgc3VmZml4LgorIiIiCisgICAgICAgIHNlbGYuaW5pdF9iYmhhbmRsZXIoKQorCisgICAgICAgIGluaGVyaXRsaXN0ID0gYXJncy5pbmhlcml0cy5zcGxpdCgnLCcpIGlmIGFyZ3MuaW5oZXJpdHMgZWxzZSBbXQorICAgICAgICBpZiBpbmhlcml0bGlzdCBvciBhcmdzLnBuc3BlYyBvciBhcmdzLm11bHRpcGxlOgorICAgICAgICAgICAgdGl0bGUgPSAnTWF0Y2hpbmcgcmVjaXBlczonCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0aXRsZSA9ICdBdmFpbGFibGUgcmVjaXBlczonCisgICAgICAgIHNlbGYubGlzdF9yZWNpcGVzKHRpdGxlLCBhcmdzLnBuc3BlYywgRmFsc2UsIEZhbHNlLCBhcmdzLmZpbGVuYW1lcywgYXJncy5tdWx0aXBsZSwgaW5oZXJpdGxpc3QpCisKKworICAgIGRlZiBsaXN0X3JlY2lwZXMoc2VsZiwgdGl0bGUsIHBuc3BlYywgc2hvd19vdmVybGF5ZWRfb25seSwgc2hvd19zYW1lX3Zlcl9vbmx5LCBzaG93X2ZpbGVuYW1lcywgc2hvd19tdWx0aV9wcm92aWRlcl9vbmx5LCBpbmhlcml0cyk6CisgICAgICAgIGlmIGluaGVyaXRzOgorICAgICAgICAgICAgYmJwYXRoID0gc3RyKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJQQVRIJywgVHJ1ZSkpCisgICAgICAgICAgICBmb3IgY2xhc3NuYW1lIGluIGluaGVyaXRzOgorICAgICAgICAgICAgICAgIGNsYXNzZmlsZSA9ICdjbGFzc2VzLyVzLmJiY2xhc3MnICUgY2xhc3NuYW1lCisgICAgICAgICAgICAgICAgaWYgbm90IGJiLnV0aWxzLndoaWNoKGJicGF0aCwgY2xhc3NmaWxlLCBoaXN0b3J5PUZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVXNlckVycm9yKCdObyBjbGFzcyBuYW1lZCAlcyBmb3VuZCBpbiBCQlBBVEgnICUgY2xhc3NmaWxlKQorCisgICAgICAgIHBrZ19wbiA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZS5wa2dfcG4KKyAgICAgICAgKGxhdGVzdF92ZXJzaW9ucywgcHJlZmVycmVkX3ZlcnNpb25zKSA9IGJiLnByb3ZpZGVycy5maW5kUHJvdmlkZXJzKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLCBzZWxmLmJiaGFuZGxlci5jb29rZXIucmVjaXBlY2FjaGUsIHBrZ19wbikKKyAgICAgICAgYWxscHJvdmlkZXJzID0gYmIucHJvdmlkZXJzLmFsbFByb3ZpZGVycyhzZWxmLmJiaGFuZGxlci5jb29rZXIucmVjaXBlY2FjaGUpCisKKyAgICAgICAgIyBFbnN1cmUgd2UgbGlzdCBza2lwcGVkIHJlY2lwZXMKKyAgICAgICAgIyBXZSBhcmUgbGFyZ2VseSBndWVzc2luZyBhYm91dCBQTiwgUFYgYW5kIHRoZSBwcmVmZXJyZWQgdmVyc2lvbiBoZXJlLAorICAgICAgICAjIGJ1dCB3ZSBoYXZlIG5vIGNob2ljZSBzaW5jZSBza2lwcGVkIHJlY2lwZXMgYXJlIG5vdCBmdWxseSBwYXJzZWQKKyAgICAgICAgc2tpcGxpc3QgPSBzZWxmLmJiaGFuZGxlci5jb29rZXIuc2tpcGxpc3Qua2V5cygpCisgICAgICAgIHNraXBsaXN0LnNvcnQoIGtleT1sYW1iZGEgZmlsZWl0ZW06IHNlbGYuYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLmNhbGNfYmJmaWxlX3ByaW9yaXR5KGZpbGVpdGVtKSApCisgICAgICAgIHNraXBsaXN0LnJldmVyc2UoKQorICAgICAgICBmb3IgZm4gaW4gc2tpcGxpc3Q6CisgICAgICAgICAgICByZWNpcGVfcGFydHMgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoZm4pKVswXS5zcGxpdCgnXycpCisgICAgICAgICAgICBwID0gcmVjaXBlX3BhcnRzWzBdCisgICAgICAgICAgICBpZiBsZW4ocmVjaXBlX3BhcnRzKSA+IDE6CisgICAgICAgICAgICAgICAgdmVyID0gKE5vbmUsIHJlY2lwZV9wYXJ0c1sxXSwgTm9uZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmVyID0gKE5vbmUsICd1bmtub3duJywgTm9uZSkKKyAgICAgICAgICAgIGFsbHByb3ZpZGVyc1twXS5hcHBlbmQoKHZlciwgZm4pKQorICAgICAgICAgICAgaWYgbm90IHAgaW4gcGtnX3BuOgorICAgICAgICAgICAgICAgIHBrZ19wbltwXSA9ICdkdW1teScKKyAgICAgICAgICAgICAgICBwcmVmZXJyZWRfdmVyc2lvbnNbcF0gPSAodmVyLCBmbikKKworICAgICAgICBkZWYgcHJpbnRfaXRlbShmLCBwbiwgdmVyLCBsYXllciwgaXNwcmVmKToKKyAgICAgICAgICAgIGlmIGYgaW4gc2tpcGxpc3Q6CisgICAgICAgICAgICAgICAgc2tpcHBlZCA9ICcgKHNraXBwZWQpJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBza2lwcGVkID0gJycKKyAgICAgICAgICAgIGlmIHNob3dfZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgIGlmIGlzcHJlZjoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCIlcyVzIiwgZiwgc2tpcHBlZCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiAgJXMlcyIsIGYsIHNraXBwZWQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGlzcHJlZjoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCIlczoiLCBwbikKKyAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiAgJXMgJXMlcyIsIGxheWVyLmxqdXN0KDIwKSwgdmVyLCBza2lwcGVkKQorCisgICAgICAgIGdsb2JhbF9pbmhlcml0ID0gKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignSU5IRVJJVCcsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGNsc19yZSA9IHJlLmNvbXBpbGUoJ2NsYXNzZXMvJykKKworICAgICAgICBwcmVmZmlsZXMgPSBbXQorICAgICAgICBpdGVtc19saXN0ZWQgPSBGYWxzZQorICAgICAgICBmb3IgcCBpbiBzb3J0ZWQocGtnX3BuKToKKyAgICAgICAgICAgIGlmIHBuc3BlYzoKKyAgICAgICAgICAgICAgICBpZiBub3QgZm5tYXRjaC5mbm1hdGNoKHAsIHBuc3BlYyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGxlbihhbGxwcm92aWRlcnNbcF0pID4gMSBvciBub3Qgc2hvd19tdWx0aV9wcm92aWRlcl9vbmx5OgorICAgICAgICAgICAgICAgIHByZWYgPSBwcmVmZXJyZWRfdmVyc2lvbnNbcF0KKyAgICAgICAgICAgICAgICByZWFsZm4gPSBiYi5jYWNoZS5DYWNoZS52aXJ0dWFsZm4ycmVhbGZuKHByZWZbMV0pCisgICAgICAgICAgICAgICAgcHJlZmZpbGUgPSByZWFsZm5bMF0KKworICAgICAgICAgICAgICAgICMgV2Ugb25seSBkaXNwbGF5IG9uY2UgcGVyIHJlY2lwZSwgd2Ugc2hvdWxkIHByZWZlciBub24gZXh0ZW5kZWQgdmVyc2lvbnMgb2YgdGhlCisgICAgICAgICAgICAgICAgIyByZWNpcGUgaWYgcHJlc2VudCAoc28gZS5nLiBpbiBPcGVuRW1iZWRkZWQsIG9wZW5zc2wgcmF0aGVyIHRoYW4gbmF0aXZlc2RrLW9wZW5zc2wKKyAgICAgICAgICAgICAgICAjIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBzb3J0IGZpcnN0KS4KKyAgICAgICAgICAgICAgICBpZiByZWFsZm5bMV0gYW5kIHJlYWxmblswXSBpbiBzZWxmLmJiaGFuZGxlci5jb29rZXIucmVjaXBlY2FjaGUucGtnX2ZuOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgaW5oZXJpdHM6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoY291bnQgPSAwCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZV9pbmhlcml0cyA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLmluaGVyaXRzLmdldChwcmVmZmlsZSwgW10pCisgICAgICAgICAgICAgICAgICAgIGZvciBjbHMgaW4gcmVjaXBlX2luaGVyaXRzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xzX3JlLm1hdGNoKGNscyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShjbHMpKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xhc3NuYW1lIGluIGdsb2JhbF9pbmhlcml0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGNsYXNzbmFtZSBpbiBpbmhlcml0czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2hjb3VudCAhPSBsZW4oaW5oZXJpdHMpOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBObyBtYXRjaCAtIHNraXAgdGhpcyByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBwcmVmZmlsZSBub3QgaW4gcHJlZmZpbGVzOgorICAgICAgICAgICAgICAgICAgICBwcmVmbGF5ZXIgPSBzZWxmLmdldF9maWxlX2xheWVyKHByZWZmaWxlKQorICAgICAgICAgICAgICAgICAgICBtdWx0aWxheWVyID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgc2FtZV92ZXIgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIHByb3ZzID0gW10KKyAgICAgICAgICAgICAgICAgICAgZm9yIHByb3YgaW4gYWxscHJvdmlkZXJzW3BdOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmZpbGUgPSBiYi5jYWNoZS5DYWNoZS52aXJ0dWFsZm4ycmVhbGZuKHByb3ZbMV0pWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBwcm92bGF5ZXIgPSBzZWxmLmdldF9maWxlX2xheWVyKHByb3ZmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdnMuYXBwZW5kKChwcm92ZmlsZSwgcHJvdmxheWVyLCBwcm92WzBdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByb3ZsYXllciAhPSBwcmVmbGF5ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlsYXllciA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByb3ZbMF0gIT0gcHJlZlswXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lX3ZlciA9IEZhbHNlCisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG11bHRpbGF5ZXIgb3Igbm90IHNob3dfb3ZlcmxheWVkX29ubHkpIGFuZCAoc2FtZV92ZXIgb3Igbm90IHNob3dfc2FtZV92ZXJfb25seSk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXRlbXNfbGlzdGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbignPT09ICVzID09PScgJSB0aXRsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc19saXN0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludF9pdGVtKHByZWZmaWxlLCBwLCBzZWxmLnZlcnNpb25fc3RyKHByZWZbMF1bMF0sIHByZWZbMF1bMV0pLCBwcmVmbGF5ZXIsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHByb3ZmaWxlLCBwcm92bGF5ZXIsIHByb3Z2ZXIpIGluIHByb3ZzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByb3ZmaWxlICE9IHByZWZmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludF9pdGVtKHByb3ZmaWxlLCBwLCBzZWxmLnZlcnNpb25fc3RyKHByb3Z2ZXJbMF0sIHByb3Z2ZXJbMV0pLCBwcm92bGF5ZXIsIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBFbnN1cmUgd2UgZG9uJ3Qgc2hvdyB0d28gZW50cmllcyBmb3IgQkJDTEFTU0VYVEVORGVkIHJlY2lwZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWZmaWxlcy5hcHBlbmQocHJlZmZpbGUpCisKKyAgICAgICAgcmV0dXJuIGl0ZW1zX2xpc3RlZAorCisKKyAgICBkZWYgZG9fZmxhdHRlbihzZWxmLCBhcmdzKToKKyAgICAgICAgIiIiZmxhdHRlbiBsYXllciBjb25maWd1cmF0aW9uIGludG8gYSBzZXBhcmF0ZSBvdXRwdXQgZGlyZWN0b3J5LgorCitUYWtlcyB0aGUgc3BlY2lmaWVkIGxheWVycyAob3IgYWxsIGxheWVycyBpbiB0aGUgY3VycmVudCBsYXllcgorY29uZmlndXJhdGlvbiBpZiBub25lIGFyZSBzcGVjaWZpZWQpIGFuZCBidWlsZHMgYSAiZmxhdHRlbmVkIiBkaXJlY3RvcnkKK2NvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIGFsbCBsYXllcnMsIHdpdGggYW55IG92ZXJsYXllZCByZWNpcGVzIHJlbW92ZWQKK2FuZCBiYmFwcGVuZHMgYXBwZW5kZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVjaXBlcy4gTm90ZSB0aGF0IHNvbWUgbWFudWFsCitjbGVhbnVwIG1heSBzdGlsbCBiZSBuZWNlc3NhcnkgYWZ0ZXJ3YXJkcywgaW4gcGFydGljdWxhcjoKKworKiB3aGVyZSBub24tcmVjaXBlIGZpbGVzIChzdWNoIGFzIHBhdGNoZXMpIGFyZSBvdmVyd3JpdHRlbiAodGhlIGZsYXR0ZW4KKyAgY29tbWFuZCB3aWxsIHNob3cgYSB3YXJuaW5nIGZvciB0aGVzZSkKKyogd2hlcmUgYW55dGhpbmcgYmV5b25kIHRoZSBub3JtYWwgbGF5ZXIgc2V0dXAgaGFzIGJlZW4gYWRkZWQgdG8KKyAgbGF5ZXIuY29uZiAob25seSB0aGUgbG93ZXN0IHByaW9yaXR5IG51bWJlciBsYXllcidzIGxheWVyLmNvbmYgaXMgdXNlZCkKKyogb3ZlcnJpZGRlbi9hcHBlbmRlZCBpdGVtcyBmcm9tIGJiYXBwZW5kcyB3aWxsIG5lZWQgdG8gYmUgdGlkaWVkIHVwCisqIHdoZW4gdGhlIGZsYXR0ZW5lZCBsYXllcnMgZG8gbm90IGhhdmUgdGhlIHNhbWUgZGlyZWN0b3J5IHN0cnVjdHVyZSAodGhlCisgIGZsYXR0ZW4gY29tbWFuZCBzaG91bGQgc2hvdyBhIHdhcm5pbmcgd2hlbiB0aGlzIHdpbGwgY2F1c2UgYSBwcm9ibGVtKQorCitXYXJuaW5nOiBpZiB5b3UgZmxhdHRlbiBzZXZlcmFsIGxheWVycyB3aGVyZSBhbm90aGVyIGxheWVyIGlzIGludGVuZGVkIHRvCitiZSB1c2VkICJpbmJldHdlZW4iIHRoZW0gKGluIGxheWVyIHByaW9yaXR5IG9yZGVyKSBzdWNoIHRoYXQgcmVjaXBlcyAvCitiYmFwcGVuZHMgaW4gdGhlIGxheWVycyBpbnRlcmFjdCwgYW5kIHRoZW4gYXR0ZW1wdCB0byB1c2UgdGhlIG5ldyBvdXRwdXQKK2xheWVyIHRvZ2V0aGVyIHdpdGggdGhhdCBvdGhlciBsYXllciwgeW91IG1heSBubyBsb25nZXIgZ2V0IHRoZSBzYW1lCitidWlsZCByZXN1bHRzIChhcyB0aGUgbGF5ZXIgcHJpb3JpdHkgb3JkZXIgaGFzIGVmZmVjdGl2ZWx5IGNoYW5nZWQpLgorIiIiCisgICAgICAgIGlmIGxlbihhcmdzLmxheWVyKSA9PSAxOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdJZiB5b3Ugc3BlY2lmeSBsYXllcnMgdG8gZmxhdHRlbiB5b3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IHR3bycpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIG91dHB1dGRpciA9IGFyZ3Mub3V0cHV0ZGlyCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG91dHB1dGRpcikgYW5kIG9zLmxpc3RkaXIob3V0cHV0ZGlyKToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRGlyZWN0b3J5ICVzIGV4aXN0cyBhbmQgaXMgbm9uLWVtcHR5LCBwbGVhc2UgY2xlYXIgaXQgb3V0IGZpcnN0JyAlIG91dHB1dGRpcikKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgc2VsZi5pbml0X2JiaGFuZGxlcigpCisgICAgICAgIGxheWVycyA9IHNlbGYuYmJsYXllcnMKKyAgICAgICAgaWYgbGVuKGFyZ3MubGF5ZXIpID4gMjoKKyAgICAgICAgICAgIGxheWVybmFtZXMgPSBhcmdzLmxheWVyCisgICAgICAgICAgICBmb3VuZF9sYXllcm5hbWVzID0gW10KKyAgICAgICAgICAgIGZvdW5kX2xheWVyZGlycyA9IFtdCisgICAgICAgICAgICBmb3IgbGF5ZXJkaXIgaW4gbGF5ZXJzOgorICAgICAgICAgICAgICAgIGxheWVybmFtZSA9IHNlbGYuZ2V0X2xheWVyX25hbWUobGF5ZXJkaXIpCisgICAgICAgICAgICAgICAgaWYgbGF5ZXJuYW1lIGluIGxheWVybmFtZXM6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xheWVyZGlycy5hcHBlbmQobGF5ZXJkaXIpCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xheWVybmFtZXMuYXBwZW5kKGxheWVybmFtZSkKKworICAgICAgICAgICAgZm9yIGxheWVybmFtZSBpbiBsYXllcm5hbWVzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBsYXllcm5hbWUgaW4gZm91bmRfbGF5ZXJuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZmluZCBsYXllciAlcyBpbiBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIHBsZWFzZSBydW4gIiVzIHNob3ctbGF5ZXJzIiB0byBsaXN0IGNvbmZpZ3VyZWQgbGF5ZXJzJyAlIChsYXllcm5hbWUsIG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBsYXllcnMgPSBmb3VuZF9sYXllcmRpcnMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxheWVybmFtZXMgPSBbXQorCisgICAgICAgICMgRW5zdXJlIGEgc3BlY2lmaWVkIHBhdGggbWF0Y2hlcyBvdXIgbGlzdCBvZiBsYXllcnMKKyAgICAgICAgZGVmIGxheWVyX3BhdGhfbWF0Y2gocGF0aCk6CisgICAgICAgICAgICBmb3IgbGF5ZXJkaXIgaW4gbGF5ZXJzOgorICAgICAgICAgICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aChvcy5wYXRoLmpvaW4obGF5ZXJkaXIsICcnKSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXllcmRpcgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBhcHBsaWVkX2FwcGVuZHMgPSBbXQorICAgICAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgorICAgICAgICAgICAgb3ZlcmxheWVkID0gW10KKyAgICAgICAgICAgIGZvciBmIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLm92ZXJsYXllZC5pdGVya2V5cygpOgorICAgICAgICAgICAgICAgIGZvciBvZiBpbiBzZWxmLmJiaGFuZGxlci5jb29rZXIuY29sbGVjdGlvbi5vdmVybGF5ZWRbZl06CisgICAgICAgICAgICAgICAgICAgIGlmIG9mLnN0YXJ0c3dpdGgobGF5ZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheWVkLmFwcGVuZChvZikKKworICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCdDb3B5aW5nIGZpbGVzIGZyb20gJXMuLi4nICUgbGF5ZXIgKQorICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsobGF5ZXIpOgorICAgICAgICAgICAgICAgIGZvciBmMSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgZjFmdWxsID0gb3Muc2VwLmpvaW4oW3Jvb3QsIGYxXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZjFmdWxsIGluIG92ZXJsYXllZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbignICBTa2lwcGluZyBvdmVybGF5ZWQgZmlsZSAlcycgJSBmMWZ1bGwgKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmMSlbMV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4dCAhPSAnLmJiYXBwZW5kJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZGVzdCA9IGYxZnVsbFtsZW4obGF5ZXIpOl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZGVzdCA9IG9zLnBhdGgubm9ybXBhdGgob3Muc2VwLmpvaW4oW291dHB1dGRpcixmZGVzdF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZmRlc3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZkZXN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZjEgPT0gJ2xheWVyLmNvbmYnIGFuZCByb290LmVuZHN3aXRoKCcvY29uZicpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCcgIFNraXBwaW5nIGxheWVyIGNvbmZpZyBmaWxlICVzJyAlIGYxZnVsbCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ092ZXJ3cml0aW5nIGZpbGUgJXMnLCBmZGVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi51dGlscy5jb3B5ZmlsZShmMWZ1bGwsIGZkZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4dCA9PSAnLmJiJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFwcGVuZCBpbiBzZWxmLmJiaGFuZGxlci5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGYxZnVsbCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsYXllcl9wYXRoX21hdGNoKGFwcGVuZCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCcgIEFwcGx5aW5nIGFwcGVuZCAlcyB0byAlcycgJSAoYXBwZW5kLCBmZGVzdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hcHBseV9hcHBlbmQoYXBwZW5kLCBmZGVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWVkX2FwcGVuZHMuYXBwZW5kKGFwcGVuZCkKKworICAgICAgICAjIFRha2UgY2FyZSBvZiB3aGVuIHNvbWUgbGF5ZXJzIGFyZSBleGNsdWRlZCBhbmQgeWV0IHdlIGhhdmUgaW5jbHVkZWQgYmJhcHBlbmRzIGZvciB0aG9zZSByZWNpcGVzCisgICAgICAgIGZvciBiIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLmJiYXBwZW5kczoKKyAgICAgICAgICAgIChyZWNpcGVuYW1lLCBhcHBlbmRuYW1lKSA9IGIKKyAgICAgICAgICAgIGlmIGFwcGVuZG5hbWUgbm90IGluIGFwcGxpZWRfYXBwZW5kczoKKyAgICAgICAgICAgICAgICBmaXJzdF9hcHBlbmQgPSBOb25lCisgICAgICAgICAgICAgICAgbGF5ZXIgPSBsYXllcl9wYXRoX21hdGNoKGFwcGVuZG5hbWUpCisgICAgICAgICAgICAgICAgaWYgbGF5ZXI6CisgICAgICAgICAgICAgICAgICAgIGlmIGZpcnN0X2FwcGVuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXBwbHlfYXBwZW5kKGFwcGVuZG5hbWUsIGZpcnN0X2FwcGVuZCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZkZXN0ID0gYXBwZW5kbmFtZVtsZW4obGF5ZXIpOl0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZkZXN0ID0gb3MucGF0aC5ub3JtcGF0aChvcy5zZXAuam9pbihbb3V0cHV0ZGlyLGZkZXN0XSkpCisgICAgICAgICAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGZkZXN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLmNvcHlmaWxlKGFwcGVuZG5hbWUsIGZkZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfYXBwZW5kID0gZmRlc3QKKworICAgICAgICAjIEdldCB0aGUgcmVnZXggZm9yIHRoZSBmaXJzdCBsYXllciBpbiBvdXIgbGlzdCAod2hpY2ggaXMgd2hlcmUgdGhlIGNvbmYvbGF5ZXIuY29uZiBmaWxlIHdpbGwKKyAgICAgICAgIyBoYXZlIGNvbWUgZnJvbSkKKyAgICAgICAgZmlyc3RfcmVnZXggPSBOb25lCisgICAgICAgIGxheWVyZGlyID0gbGF5ZXJzWzBdCisgICAgICAgIGZvciBsYXllcm5hbWUsIHBhdHRlcm4sIHJlZ2V4LCBfIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZS5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXM6CisgICAgICAgICAgICBpZiByZWdleC5tYXRjaChvcy5wYXRoLmpvaW4obGF5ZXJkaXIsICd0ZXN0JykpOgorICAgICAgICAgICAgICAgIGZpcnN0X3JlZ2V4ID0gcmVnZXgKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIGZpcnN0X3JlZ2V4OgorICAgICAgICAgICAgIyBGaW5kIHRoZSBCQkZJTEVTIGVudHJpZXMgdGhhdCBtYXRjaCAod2hpY2ggd2lsbCBoYXZlIGNvbWUgZnJvbSB0aGlzIGNvbmYvbGF5ZXIuY29uZiBmaWxlKQorICAgICAgICAgICAgYmJmaWxlcyA9IHN0cihzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YS5nZXRWYXIoJ0JCRklMRVMnLCBUcnVlKSkuc3BsaXQoKQorICAgICAgICAgICAgYmJmaWxlc19sYXllciA9IFtdCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBiYmZpbGVzOgorICAgICAgICAgICAgICAgIGlmIGZpcnN0X3JlZ2V4Lm1hdGNoKGl0ZW0pOgorICAgICAgICAgICAgICAgICAgICBuZXdwYXRoID0gb3MucGF0aC5qb2luKG91dHB1dGRpciwgaXRlbVtsZW4obGF5ZXJkaXIpKzE6XSkKKyAgICAgICAgICAgICAgICAgICAgYmJmaWxlc19sYXllci5hcHBlbmQobmV3cGF0aCkKKworICAgICAgICAgICAgaWYgYmJmaWxlc19sYXllcjoKKyAgICAgICAgICAgICAgICAjIENoZWNrIHRoYXQgYWxsIGltcG9ydGFudCBsYXllciBmaWxlcyBtYXRjaCBCQkZJTEVTCisgICAgICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsob3V0cHV0ZGlyKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGYxIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmMSlbMV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4dCBpbiBbJy5iYicsICcuYmJhcHBlbmQnXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmMWZ1bGwgPSBvcy5zZXAuam9pbihbcm9vdCwgZjFdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5X2ZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBiYmZpbGVzX2xheWVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2goZjFmdWxsLCBpdGVtKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5X2ZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZW50cnlfZm91bmQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJGaWxlICVzIGRvZXMgbm90IG1hdGNoIHRoZSBmbGF0dGVuZWQgbGF5ZXIncyBCQkZJTEVTIHNldHRpbmcsIHlvdSBtYXkgbmVlZCB0byBlZGl0IGNvbmYvbGF5ZXIuY29uZiBvciBtb3ZlIHRoZSBmaWxlIGVsc2V3aGVyZSIgJSBmMWZ1bGwpCisKKyAgICBkZWYgZ2V0X2ZpbGVfbGF5ZXIoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICBsYXllcmRpciA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXJkaXIoZmlsZW5hbWUpCisgICAgICAgIGlmIGxheWVyZGlyOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2xheWVyX25hbWUobGF5ZXJkaXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJz8nCisKKyAgICBkZWYgZ2V0X2ZpbGVfbGF5ZXJkaXIoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICBsYXllciA9IGJiLnV0aWxzLmdldF9maWxlX2xheWVyKGZpbGVuYW1lLCBzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YSkKKyAgICAgICAgcmV0dXJuIHNlbGYuYmJmaWxlX2NvbGxlY3Rpb25zLmdldChsYXllciwgTm9uZSkKKworICAgIGRlZiByZW1vdmVfbGF5ZXJfcHJlZml4KHNlbGYsIGYpOgorICAgICAgICAiIiJSZW1vdmUgdGhlIGxheWVyX2RpciBwcmVmaXgsIGUuZy4sIGYgPSAvcGF0aC90by9sYXllcl9kaXIvZm9vL2JsYWgsIHRoZQorICAgICAgICAgICByZXR1cm4gdmFsdWUgd2lsbCBiZTogbGF5ZXJfZGlyL2Zvby9ibGFoIiIiCisgICAgICAgIGZfbGF5ZXJkaXIgPSBzZWxmLmdldF9maWxlX2xheWVyZGlyKGYpCisgICAgICAgIGlmIG5vdCBmX2xheWVyZGlyOgorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgcHJlZml4ID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShmX2xheWVyZGlyKSwgJycpCisgICAgICAgIHJldHVybiBmW2xlbihwcmVmaXgpOl0gaWYgZi5zdGFydHN3aXRoKHByZWZpeCkgZWxzZSBmCisKKyAgICBkZWYgZ2V0X2xheWVyX25hbWUoc2VsZiwgbGF5ZXJkaXIpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5iYXNlbmFtZShsYXllcmRpci5yc3RyaXAob3Muc2VwKSkKKworICAgIGRlZiBhcHBseV9hcHBlbmQoc2VsZiwgYXBwZW5kbmFtZSwgcmVjaXBlbmFtZSk6CisgICAgICAgIHdpdGggb3BlbihhcHBlbmRuYW1lLCAncicpIGFzIGFwcGVuZGZpbGU6CisgICAgICAgICAgICB3aXRoIG9wZW4ocmVjaXBlbmFtZSwgJ2EnKSBhcyByZWNpcGVmaWxlOgorICAgICAgICAgICAgICAgIHJlY2lwZWZpbGUud3JpdGUoJ1xuJykKKyAgICAgICAgICAgICAgICByZWNpcGVmaWxlLndyaXRlKCcjIyMjIyBiYmFwcGVuZGVkIGZyb20gJXMgIyMjIyNcbicgJSBzZWxmLmdldF9maWxlX2xheWVyKGFwcGVuZG5hbWUpKQorICAgICAgICAgICAgICAgIHJlY2lwZWZpbGUud3JpdGVsaW5lcyhhcHBlbmRmaWxlLnJlYWRsaW5lcygpKQorCisgICAgZGVmIGRvX3Nob3dfYXBwZW5kcyhzZWxmLCBhcmdzKToKKyAgICAgICAgIiIibGlzdCBiYmFwcGVuZCBmaWxlcyBhbmQgcmVjaXBlIGZpbGVzIHRoZXkgYXBwbHkgdG8KKworTGlzdHMgcmVjaXBlcyB3aXRoIHRoZSBiYmFwcGVuZHMgdGhhdCBhcHBseSB0byB0aGVtIGFzIHN1Yml0ZW1zLgorIiIiCisgICAgICAgIHNlbGYuaW5pdF9iYmhhbmRsZXIoKQorCisgICAgICAgIGxvZ2dlci5wbGFpbignPT09IEFwcGVuZGVkIHJlY2lwZXMgPT09JykKKworICAgICAgICBwbmxpc3QgPSBsaXN0KHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLnBrZ19wbi5rZXlzKCkpCisgICAgICAgIHBubGlzdC5zb3J0KCkKKyAgICAgICAgYXBwZW5kcyA9IEZhbHNlCisgICAgICAgIGZvciBwbiBpbiBwbmxpc3Q6CisgICAgICAgICAgICBpZiBzZWxmLnNob3dfYXBwZW5kc19mb3JfcG4ocG4pOgorICAgICAgICAgICAgICAgIGFwcGVuZHMgPSBUcnVlCisKKyAgICAgICAgaWYgc2VsZi5zaG93X2FwcGVuZHNfZm9yX3NraXBwZWQoKToKKyAgICAgICAgICAgIGFwcGVuZHMgPSBUcnVlCisKKyAgICAgICAgaWYgbm90IGFwcGVuZHM6CisgICAgICAgICAgICBsb2dnZXIucGxhaW4oJ05vIGFwcGVuZCBmaWxlcyBmb3VuZCcpCisKKyAgICBkZWYgc2hvd19hcHBlbmRzX2Zvcl9wbihzZWxmLCBwbik6CisgICAgICAgIGZpbGVuYW1lcyA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLnBrZ19wbltwbl0KKworICAgICAgICBiZXN0ID0gYmIucHJvdmlkZXJzLmZpbmRCZXN0UHJvdmlkZXIocG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEucGtnX3BuKQorICAgICAgICBiZXN0X2ZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShiZXN0WzNdKQorCisgICAgICAgIHJldHVybiBzZWxmLnNob3dfYXBwZW5kc19vdXRwdXQoZmlsZW5hbWVzLCBiZXN0X2ZpbGVuYW1lKQorCisgICAgZGVmIHNob3dfYXBwZW5kc19mb3Jfc2tpcHBlZChzZWxmKToKKyAgICAgICAgZmlsZW5hbWVzID0gW29zLnBhdGguYmFzZW5hbWUoZikKKyAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyLnNraXBsaXN0Lml0ZXJrZXlzKCldCisgICAgICAgIHJldHVybiBzZWxmLnNob3dfYXBwZW5kc19vdXRwdXQoZmlsZW5hbWVzLCBOb25lLCAiIChza2lwcGVkKSIpCisKKyAgICBkZWYgc2hvd19hcHBlbmRzX291dHB1dChzZWxmLCBmaWxlbmFtZXMsIGJlc3RfZmlsZW5hbWUsIG5hbWVfc3VmZml4ID0gJycpOgorICAgICAgICBhcHBlbmRlZCwgbWlzc2luZyA9IHNlbGYuZ2V0X2FwcGVuZHNfZm9yX2ZpbGVzKGZpbGVuYW1lcykKKyAgICAgICAgaWYgYXBwZW5kZWQ6CisgICAgICAgICAgICBmb3IgYmFzZW5hbWUsIGFwcGVuZHMgaW4gYXBwZW5kZWQ6CisgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCclcyVzOicsIGJhc2VuYW1lLCBuYW1lX3N1ZmZpeCkKKyAgICAgICAgICAgICAgICBmb3IgYXBwZW5kIGluIGFwcGVuZHM6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbignICAlcycsIGFwcGVuZCkKKworICAgICAgICAgICAgaWYgYmVzdF9maWxlbmFtZToKKyAgICAgICAgICAgICAgICBpZiBiZXN0X2ZpbGVuYW1lIGluIG1pc3Npbmc6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCclczogbWlzc2luZyBhcHBlbmQgZm9yIHByZWZlcnJlZCB2ZXJzaW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdF9maWxlbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBnZXRfYXBwZW5kc19mb3JfZmlsZXMoc2VsZiwgZmlsZW5hbWVzKToKKyAgICAgICAgYXBwZW5kZWQsIG5vdGFwcGVuZGVkID0gW10sIFtdCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICBfLCBjbHMgPSBiYi5jYWNoZS5DYWNoZS52aXJ0dWFsZm4ycmVhbGZuKGZpbGVuYW1lKQorICAgICAgICAgICAgaWYgY2xzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSkKKyAgICAgICAgICAgIGFwcGVuZHMgPSBzZWxmLmJiaGFuZGxlci5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGJhc2VuYW1lKQorICAgICAgICAgICAgaWYgYXBwZW5kczoKKyAgICAgICAgICAgICAgICBhcHBlbmRlZC5hcHBlbmQoKGJhc2VuYW1lLCBsaXN0KGFwcGVuZHMpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbm90YXBwZW5kZWQuYXBwZW5kKGJhc2VuYW1lKQorICAgICAgICByZXR1cm4gYXBwZW5kZWQsIG5vdGFwcGVuZGVkCisKKyAgICBkZWYgZG9fc2hvd19jcm9zc19kZXBlbmRzKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJTaG93IGRlcGVuZGVuY2llcyBiZXR3ZWVuIHJlY2lwZXMgdGhhdCBjcm9zcyBsYXllciBib3VuZGFyaWVzLgorCitGaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiByZWNpcGVzIHRoYXQgY3Jvc3MgbGF5ZXIgYm91bmRhcmllcy4KKworTk9URTogLmJiYXBwZW5kIGZpbGVzIGNhbiBpbXBhY3QgdGhlIGRlcGVuZGVuY2llcy4KKyIiIgorICAgICAgICBpZ25vcmVfbGF5ZXJzID0gKGFyZ3MuaWdub3JlIG9yICcnKS5zcGxpdCgnLCcpCisKKyAgICAgICAgc2VsZi5pbml0X2JiaGFuZGxlcigpCisKKyAgICAgICAgcGtnX2ZuID0gc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEucGtnX2ZuCisgICAgICAgIGJicGF0aCA9IHN0cihzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YS5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpKQorICAgICAgICBzZWxmLnJlcXVpcmVfcmUgPSByZS5jb21waWxlKHIicmVxdWlyZVxzKyguKykiKQorICAgICAgICBzZWxmLmluY2x1ZGVfcmUgPSByZS5jb21waWxlKHIiaW5jbHVkZVxzKyguKykiKQorICAgICAgICBzZWxmLmluaGVyaXRfcmUgPSByZS5jb21waWxlKHIiaW5oZXJpdFxzKyguKykiKQorCisgICAgICAgIGdsb2JhbF9pbmhlcml0ID0gKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignSU5IRVJJVCcsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICAgICAgIyBUaGUgYmIncyBERVBFTkRTIGFuZCBSREVQRU5EUworICAgICAgICBmb3IgZiBpbiBwa2dfZm46CisgICAgICAgICAgICBmID0gYmIuY2FjaGUuQ2FjaGUudmlydHVhbGZuMnJlYWxmbihmKVswXQorICAgICAgICAgICAgIyBHZXQgdGhlIGxheWVybmFtZSB0aGF0IHRoZSBmaWxlIGlzIGluCisgICAgICAgICAgICBsYXllcm5hbWUgPSBzZWxmLmdldF9maWxlX2xheWVyKGYpCisKKyAgICAgICAgICAgICMgVGhlIERFUEVORFMKKyAgICAgICAgICAgIGRlcHMgPSBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5kZXBzW2ZdCisgICAgICAgICAgICBmb3IgcG4gaW4gZGVwczoKKyAgICAgICAgICAgICAgICBpZiBwbiBpbiBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5wa2dfcG46CisgICAgICAgICAgICAgICAgICAgIGJlc3QgPSBiYi5wcm92aWRlcnMuZmluZEJlc3RQcm92aWRlcihwbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5wa2dfcG4pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfY3Jvc3NfZGVwZW5kcygiREVQRU5EUyIsIGxheWVybmFtZSwgZiwgYmVzdFszXSwgYXJncy5maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpCisKKyAgICAgICAgICAgICMgVGhlIFJEUEVORFMKKyAgICAgICAgICAgIGFsbF9yZGVwcyA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLnJ1bmRlcHNbZl0udmFsdWVzKCkKKyAgICAgICAgICAgICMgUmVtb3ZlIHRoZSBkdXBsaWNhdGVkIG9yIG51bGwgb25lLgorICAgICAgICAgICAgc29ydGVkX3JkZXBzID0ge30KKyAgICAgICAgICAgICMgVGhlIGFsbF9yZGVwcyBpcyB0aGUgbGlzdCBpbiBsaXN0LCBzbyB3ZSBuZWVkIHR3byBmb3IgbG9vcHMKKyAgICAgICAgICAgIGZvciBrMSBpbiBhbGxfcmRlcHM6CisgICAgICAgICAgICAgICAgZm9yIGsyIGluIGsxOgorICAgICAgICAgICAgICAgICAgICBzb3J0ZWRfcmRlcHNbazJdID0gMQorICAgICAgICAgICAgYWxsX3JkZXBzID0gc29ydGVkX3JkZXBzLmtleXMoKQorICAgICAgICAgICAgZm9yIHJkZXAgaW4gYWxsX3JkZXBzOgorICAgICAgICAgICAgICAgIGFsbF9wID0gYmIucHJvdmlkZXJzLmdldFJ1bnRpbWVQcm92aWRlcnMoc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEsIHJkZXApCisgICAgICAgICAgICAgICAgaWYgYWxsX3A6CisgICAgICAgICAgICAgICAgICAgIGlmIGYgaW4gYWxsX3A6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSByZWNpcGUgcHJvdmlkZXMgdGhpcyBvbmUgaXRzZWxmLCBpZ25vcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGJlc3QgPSBiYi5wcm92aWRlcnMuZmlsdGVyUHJvdmlkZXJzUnVuVGltZShhbGxfcCwgcmRlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEpWzBdWzBdCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfY3Jvc3NfZGVwZW5kcygiUkRFUEVORFMiLCBsYXllcm5hbWUsIGYsIGJlc3QsIGFyZ3MuZmlsZW5hbWVzLCBpZ25vcmVfbGF5ZXJzKQorCisgICAgICAgICAgICAjIFRoZSBSUkVDT01NRU5EUworICAgICAgICAgICAgYWxsX3JyZWNzID0gc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEucnVucmVjc1tmXS52YWx1ZXMoKQorICAgICAgICAgICAgIyBSZW1vdmUgdGhlIGR1cGxpY2F0ZWQgb3IgbnVsbCBvbmUuCisgICAgICAgICAgICBzb3J0ZWRfcnJlY3MgPSB7fQorICAgICAgICAgICAgIyBUaGUgYWxsX3JyZWNzIGlzIHRoZSBsaXN0IGluIGxpc3QsIHNvIHdlIG5lZWQgdHdvIGZvciBsb29wcworICAgICAgICAgICAgZm9yIGsxIGluIGFsbF9ycmVjczoKKyAgICAgICAgICAgICAgICBmb3IgazIgaW4gazE6CisgICAgICAgICAgICAgICAgICAgIHNvcnRlZF9ycmVjc1trMl0gPSAxCisgICAgICAgICAgICBhbGxfcnJlY3MgPSBzb3J0ZWRfcnJlY3Mua2V5cygpCisgICAgICAgICAgICBmb3IgcnJlYyBpbiBhbGxfcnJlY3M6CisgICAgICAgICAgICAgICAgYWxsX3AgPSBiYi5wcm92aWRlcnMuZ2V0UnVudGltZVByb3ZpZGVycyhzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YSwgcnJlYykKKyAgICAgICAgICAgICAgICBpZiBhbGxfcDoKKyAgICAgICAgICAgICAgICAgICAgaWYgZiBpbiBhbGxfcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIHJlY2lwZSBwcm92aWRlcyB0aGlzIG9uZSBpdHNlbGYsIGlnbm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgYmVzdCA9IGJiLnByb3ZpZGVycy5maWx0ZXJQcm92aWRlcnNSdW5UaW1lKGFsbF9wLCBycmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YSlbMF1bMF0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19jcm9zc19kZXBlbmRzKCJSUkVDT01NRU5EUyIsIGxheWVybmFtZSwgZiwgYmVzdCwgYXJncy5maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpCisKKyAgICAgICAgICAgICMgVGhlIGluaGVyaXQgY2xhc3MKKyAgICAgICAgICAgIGNsc19yZSA9IHJlLmNvbXBpbGUoJ2NsYXNzZXMvJykKKyAgICAgICAgICAgIGlmIGYgaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEuaW5oZXJpdHM6CisgICAgICAgICAgICAgICAgaW5oZXJpdHMgPSBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5pbmhlcml0c1tmXQorICAgICAgICAgICAgICAgIGZvciBjbHMgaW4gaW5oZXJpdHM6CisgICAgICAgICAgICAgICAgICAgICMgVGhlIGluaGVyaXRzJyBmb3JtYXQgaXMgW2NsYXNzZXMvY2xzLCAvcGF0aC90by9jbGFzc2VzL2Nsc10KKyAgICAgICAgICAgICAgICAgICAgIyBpZ25vcmUgdGhlIGNsYXNzZXMvY2xzLgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY2xzX3JlLm1hdGNoKGNscyk6CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoY2xzKSlbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsYXNzbmFtZSBpbiBnbG9iYWxfaW5oZXJpdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdF9sYXllcm5hbWUgPSBzZWxmLmdldF9maWxlX2xheWVyKGNscykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluaGVyaXRfbGF5ZXJuYW1lICE9IGxheWVybmFtZSBhbmQgbm90IGluaGVyaXRfbGF5ZXJuYW1lIGluIGlnbm9yZV9sYXllcnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGFyZ3MuZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmX3Nob3J0ID0gc2VsZi5yZW1vdmVfbGF5ZXJfcHJlZml4KGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscyA9IHNlbGYucmVtb3ZlX2xheWVyX3ByZWZpeChjbHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZl9zaG9ydCA9IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzIGluaGVyaXRzICVzIiAlIChmX3Nob3J0LCBjbHMpKQorCisgICAgICAgICAgICAjIFRoZSAncmVxdWlyZS9pbmNsdWRlIHh4eCcgaW4gdGhlIGJiIGZpbGUKKyAgICAgICAgICAgIHB2X3JlID0gcmUuY29tcGlsZShyIlwke1BWfSIpCisgICAgICAgICAgICB3aXRoIG9wZW4oZiwgJ3InKSBhcyBmbmZpbGU6CisgICAgICAgICAgICAgICAgbGluZSA9IGZuZmlsZS5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgd2hpbGUgbGluZToKKyAgICAgICAgICAgICAgICAgICAgbSwga2V5d29yZCA9IHNlbGYubWF0Y2hfcmVxdWlyZV9pbmNsdWRlKGxpbmUpCisgICAgICAgICAgICAgICAgICAgICMgRm91bmQgdGhlICdyZXF1aXJlL2luY2x1ZGUgeHh4eCcKKyAgICAgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZF9maWxlID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBSZXBsYWNlIHRoZSAke1BWfSB3aXRoIHRoZSByZWFsIFBWCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwdl9yZS5zZWFyY2gobmVlZGVkX2ZpbGUpIGFuZCBmIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLnBrZ19wZXB2cHI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHYgPSBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5wa2dfcGVwdnByW2ZdWzFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkX2ZpbGUgPSByZS5zdWIociJcJHtQVn0iLCBwdiwgbmVlZGVkX2ZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByaW50X2Nyb3NzX2ZpbGVzKGJicGF0aCwga2V5d29yZCwgbGF5ZXJuYW1lLCBmLCBuZWVkZWRfZmlsZSwgYXJncy5maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpCisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBmbmZpbGUucmVhZGxpbmUoKQorCisgICAgICAgICMgVGhlICJyZXF1aXJlL2luY2x1ZGUgeHh4IiBpbiBjb25mL21hY2hpbmUvKi5jb25mLCAuaW5jIGFuZCAuYmJjbGFzcworICAgICAgICBjb25mX3JlID0gcmUuY29tcGlsZSgiLiovY29uZi9tYWNoaW5lL1teXC9dKlwuY29uZiQiKQorICAgICAgICBpbmNfcmUgPSByZS5jb21waWxlKCIuKlwuaW5jJCIpCisgICAgICAgICMgVGhlICJpbmhlcml0IHh4eCIgaW4gLmJiY2xhc3MKKyAgICAgICAgYmJjbGFzc19yZSA9IHJlLmNvbXBpbGUoIi4qXC5iYmNsYXNzJCIpCisgICAgICAgIGZvciBsYXllcmRpciBpbiBzZWxmLmJibGF5ZXJzOgorICAgICAgICAgICAgbGF5ZXJuYW1lID0gc2VsZi5nZXRfbGF5ZXJfbmFtZShsYXllcmRpcikKKyAgICAgICAgICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsobGF5ZXJkaXIpOgorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgZiA9IG9zLnBhdGguam9pbihkaXJwYXRoLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICBzID0gY29uZl9yZS5tYXRjaChmKSBvciBpbmNfcmUubWF0Y2goZikgb3IgYmJjbGFzc19yZS5tYXRjaChmKQorICAgICAgICAgICAgICAgICAgICBpZiBzOgorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGYsICdyJykgYXMgZmZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGZmaWxlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLCBrZXl3b3JkID0gc2VsZi5tYXRjaF9yZXF1aXJlX2luY2x1ZGUobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPbmx5IGJiY2xhc3MgaGFzIHRoZSAiaW5oZXJpdCB4eHgiIGhlcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiY2xhc3M9IiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG0gYW5kIGYuZW5kc3dpdGgoIi5iYmNsYXNzIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLCBrZXl3b3JkID0gc2VsZi5tYXRjaF9pbmhlcml0KGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYmNsYXNzPSIuYmJjbGFzcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGaW5kIGEgJ3JlcXVpcmUvaW5jbHVkZSB4eHh4JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmludF9jcm9zc19maWxlcyhiYnBhdGgsIGtleXdvcmQsIGxheWVybmFtZSwgZiwgbS5ncm91cCgxKSArIGJiY2xhc3MsIGFyZ3MuZmlsZW5hbWVzLCBpZ25vcmVfbGF5ZXJzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gZmZpbGUucmVhZGxpbmUoKQorCisgICAgZGVmIHByaW50X2Nyb3NzX2ZpbGVzKHNlbGYsIGJicGF0aCwga2V5d29yZCwgbGF5ZXJuYW1lLCBmLCBuZWVkZWRfZmlsZW5hbWUsIHNob3dfZmlsZW5hbWVzLCBpZ25vcmVfbGF5ZXJzKToKKyAgICAgICAgIiIiUHJpbnQgdGhlIGRlcGVuZHMgdGhhdCBjcm9zc2VzIGEgbGF5ZXIgYm91bmRhcnkiIiIKKyAgICAgICAgbmVlZGVkX2ZpbGUgPSBiYi51dGlscy53aGljaChiYnBhdGgsIG5lZWRlZF9maWxlbmFtZSkKKyAgICAgICAgaWYgbmVlZGVkX2ZpbGU6CisgICAgICAgICAgICAjIFdoaWNoIGxheWVyIGlzIHRoaXMgZmlsZSBmcm9tCisgICAgICAgICAgICBuZWVkZWRfbGF5ZXJuYW1lID0gc2VsZi5nZXRfZmlsZV9sYXllcihuZWVkZWRfZmlsZSkKKyAgICAgICAgICAgIGlmIG5lZWRlZF9sYXllcm5hbWUgIT0gbGF5ZXJuYW1lIGFuZCBub3QgbmVlZGVkX2xheWVybmFtZSBpbiBpZ25vcmVfbGF5ZXJzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzaG93X2ZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgZiA9IHNlbGYucmVtb3ZlX2xheWVyX3ByZWZpeChmKQorICAgICAgICAgICAgICAgICAgICBuZWVkZWRfZmlsZSA9IHNlbGYucmVtb3ZlX2xheWVyX3ByZWZpeChuZWVkZWRfZmlsZSkKKyAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzICVzICVzIiAlKGYsIGtleXdvcmQsIG5lZWRlZF9maWxlKSkKKworICAgIGRlZiBtYXRjaF9pbmhlcml0KHNlbGYsIGxpbmUpOgorICAgICAgICAiIiJNYXRjaCB0aGUgaW5oZXJpdCB4eHggbGluZSIiIgorICAgICAgICByZXR1cm4gKHNlbGYuaW5oZXJpdF9yZS5tYXRjaChsaW5lKSwgImluaGVyaXRzIikKKworICAgIGRlZiBtYXRjaF9yZXF1aXJlX2luY2x1ZGUoc2VsZiwgbGluZSk6CisgICAgICAgICIiIk1hdGNoIHRoZSByZXF1aXJlL2luY2x1ZGUgeHh4IGxpbmUiIiIKKyAgICAgICAgbSA9IHNlbGYucmVxdWlyZV9yZS5tYXRjaChsaW5lKQorICAgICAgICBrZXl3b3JkID0gInJlcXVpcmVzIgorICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgIG0gPSBzZWxmLmluY2x1ZGVfcmUubWF0Y2gobGluZSkKKyAgICAgICAgICAgIGtleXdvcmQgPSAiaW5jbHVkZXMiCisgICAgICAgIHJldHVybiAobSwga2V5d29yZCkKKworICAgIGRlZiBjaGVja19jcm9zc19kZXBlbmRzKHNlbGYsIGtleXdvcmQsIGxheWVybmFtZSwgZiwgbmVlZGVkX2ZpbGUsIHNob3dfZmlsZW5hbWVzLCBpZ25vcmVfbGF5ZXJzKToKKyAgICAgICAgIiIiUHJpbnQgdGhlIERFUEVORFMvUkRFUEVORFMgZmlsZSB0aGF0IGNyb3NzZXMgYSBsYXllciBib3VuZGFyeSIiIgorICAgICAgICBiZXN0X3JlYWxmbiA9IGJiLmNhY2hlLkNhY2hlLnZpcnR1YWxmbjJyZWFsZm4obmVlZGVkX2ZpbGUpWzBdCisgICAgICAgIG5lZWRlZF9sYXllcm5hbWUgPSBzZWxmLmdldF9maWxlX2xheWVyKGJlc3RfcmVhbGZuKQorICAgICAgICBpZiBuZWVkZWRfbGF5ZXJuYW1lICE9IGxheWVybmFtZSBhbmQgbm90IG5lZWRlZF9sYXllcm5hbWUgaW4gaWdub3JlX2xheWVyczoKKyAgICAgICAgICAgIGlmIG5vdCBzaG93X2ZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICBmID0gc2VsZi5yZW1vdmVfbGF5ZXJfcHJlZml4KGYpCisgICAgICAgICAgICAgICAgYmVzdF9yZWFsZm4gPSBzZWxmLnJlbW92ZV9sYXllcl9wcmVmaXgoYmVzdF9yZWFsZm4pCisKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgJXMgJXMiICUgKGYsIGtleXdvcmQsIGJlc3RfcmVhbGZuKSkKKworCitkZWYgbWFpbigpOgorCisgICAgY21kcyA9IENvbW1hbmRzKCkKKworICAgIGRlZiBhZGRfY29tbWFuZChjbWRuYW1lLCBmdW5jdGlvbiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIyBDb252ZXJ0IGRvY3N0cmluZyBmb3IgZnVuY3Rpb24gdG8gaGVscCAob25lLWxpbmVyIHNob3duIGluIG1haW4gLS1oZWxwKSBhbmQgZGVzY3JpcHRpb24gKHNob3duIGluIHN1YmNvbW1hbmQgLS1oZWxwKQorICAgICAgICBkb2NzcGxpdCA9IGZ1bmN0aW9uLl9fZG9jX18uc3BsaXRsaW5lcygpCisgICAgICAgIGhlbHAgPSBkb2NzcGxpdFswXQorICAgICAgICBpZiBsZW4oZG9jc3BsaXQpID4gMToKKyAgICAgICAgICAgIGRlc2MgPSAnXG4nLmpvaW4oZG9jc3BsaXRbMTpdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVzYyA9IGhlbHAKKyAgICAgICAgc3VicGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKGNtZG5hbWUsICphcmdzLCBoZWxwPWhlbHAsIGRlc2NyaXB0aW9uPWRlc2MsIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5SYXdUZXh0SGVscEZvcm1hdHRlciwgKiprd2FyZ3MpCisgICAgICAgIHN1YnBhcnNlci5zZXRfZGVmYXVsdHMoZnVuYz1mdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIHN1YnBhcnNlcgorCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249IkJpdEJha2UgbGF5ZXJzIHV0aWxpdHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwaWxvZz0iVXNlICUocHJvZylzIDxzdWJjb21tYW5kPiAtLWhlbHAgdG8gZ2V0IGhlbHAgb24gYSBzcGVjaWZpYyBjb21tYW5kIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZCcsICctLWRlYnVnJywgaGVscD0nRW5hYmxlIGRlYnVnIG91dHB1dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXEnLCAnLS1xdWlldCcsIGhlbHA9J1ByaW50IG9ubHkgZXJyb3JzJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKHRpdGxlPSdzdWJjb21tYW5kcycsIG1ldGF2YXI9JzxzdWJjb21tYW5kPicpCisKKyAgICBwYXJzZXJfc2hvd19sYXllcnMgPSBhZGRfY29tbWFuZCgnc2hvdy1sYXllcnMnLCBjbWRzLmRvX3Nob3dfbGF5ZXJzKQorCisgICAgcGFyc2VyX2FkZF9sYXllciA9IGFkZF9jb21tYW5kKCdhZGQtbGF5ZXInLCBjbWRzLmRvX2FkZF9sYXllcikKKyAgICBwYXJzZXJfYWRkX2xheWVyLmFkZF9hcmd1bWVudCgnbGF5ZXJkaXInLCBoZWxwPSdMYXllciBkaXJlY3RvcnkgdG8gYWRkJykKKworICAgIHBhcnNlcl9yZW1vdmVfbGF5ZXIgPSBhZGRfY29tbWFuZCgncmVtb3ZlLWxheWVyJywgY21kcy5kb19yZW1vdmVfbGF5ZXIpCisgICAgcGFyc2VyX3JlbW92ZV9sYXllci5hZGRfYXJndW1lbnQoJ2xheWVyZGlyJywgaGVscD0nTGF5ZXIgZGlyZWN0b3J5IHRvIHJlbW92ZSAod2lsZGNhcmRzIGFsbG93ZWQsIGVuY2xvc2UgaW4gcXVvdGVzIHRvIGF2b2lkIHNoZWxsIGV4cGFuc2lvbiknKQorICAgIHBhcnNlcl9yZW1vdmVfbGF5ZXIuc2V0X2RlZmF1bHRzKGZ1bmM9Y21kcy5kb19yZW1vdmVfbGF5ZXIpCisKKyAgICBwYXJzZXJfc2hvd19vdmVybGF5ZWQgPSBhZGRfY29tbWFuZCgnc2hvdy1vdmVybGF5ZWQnLCBjbWRzLmRvX3Nob3dfb3ZlcmxheWVkKQorICAgIHBhcnNlcl9zaG93X292ZXJsYXllZC5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmlsZW5hbWVzJywgaGVscD0naW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBmb3JtYXR0aW5nLCBsaXN0IGZpbGVuYW1lcyBvZiBoaWdoZXIgcHJpb3JpdHkgcmVjaXBlcyB3aXRoIHRoZSBvbmVzIHRoZXkgb3ZlcmxheSBpbmRlbnRlZCB1bmRlcm5lYXRoJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfc2hvd19vdmVybGF5ZWQuYWRkX2FyZ3VtZW50KCctcycsICctLXNhbWUtdmVyc2lvbicsIGhlbHA9J29ubHkgbGlzdCBvdmVybGF5ZWQgcmVjaXBlcyB3aGVyZSB0aGUgdmVyc2lvbiBpcyB0aGUgc2FtZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisKKyAgICBwYXJzZXJfc2hvd19yZWNpcGVzID0gYWRkX2NvbW1hbmQoJ3Nob3ctcmVjaXBlcycsIGNtZHMuZG9fc2hvd19yZWNpcGVzKQorICAgIHBhcnNlcl9zaG93X3JlY2lwZXMuYWRkX2FyZ3VtZW50KCctZicsICctLWZpbGVuYW1lcycsIGhlbHA9J2luc3RlYWQgb2YgdGhlIGRlZmF1bHQgZm9ybWF0dGluZywgbGlzdCBmaWxlbmFtZXMgb2YgaGlnaGVyIHByaW9yaXR5IHJlY2lwZXMgd2l0aCB0aGUgb25lcyB0aGV5IG92ZXJsYXkgaW5kZW50ZWQgdW5kZXJuZWF0aCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyX3Nob3dfcmVjaXBlcy5hZGRfYXJndW1lbnQoJy1tJywgJy0tbXVsdGlwbGUnLCBoZWxwPSdvbmx5IGxpc3Qgd2hlcmUgbXVsdGlwbGUgcmVjaXBlcyAoaW4gdGhlIHNhbWUgbGF5ZXIgb3IgZGlmZmVyZW50IGxheWVycykgZXhpc3QgZm9yIHRoZSBzYW1lIHJlY2lwZSBuYW1lJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfc2hvd19yZWNpcGVzLmFkZF9hcmd1bWVudCgnLWknLCAnLS1pbmhlcml0cycsIGhlbHA9J29ubHkgbGlzdCByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgbmFtZWQgY2xhc3MnLCBtZXRhdmFyPSdDTEFTUycsIGRlZmF1bHQ9JycpCisgICAgcGFyc2VyX3Nob3dfcmVjaXBlcy5hZGRfYXJndW1lbnQoJ3Buc3BlYycsIG5hcmdzPSc/JywgaGVscD0nb3B0aW9uYWwgcmVjaXBlIG5hbWUgc3BlY2lmaWNhdGlvbiAod2lsZGNhcmRzIGFsbG93ZWQsIGVuY2xvc2UgaW4gcXVvdGVzIHRvIGF2b2lkIHNoZWxsIGV4cGFuc2lvbiknKQorCisgICAgcGFyc2VyX3Nob3dfYXBwZW5kcyA9IGFkZF9jb21tYW5kKCdzaG93LWFwcGVuZHMnLCBjbWRzLmRvX3Nob3dfYXBwZW5kcykKKworICAgIHBhcnNlcl9mbGF0dGVuID0gYWRkX2NvbW1hbmQoJ2ZsYXR0ZW4nLCBjbWRzLmRvX2ZsYXR0ZW4pCisgICAgcGFyc2VyX2ZsYXR0ZW4uYWRkX2FyZ3VtZW50KCdsYXllcicsIG5hcmdzPScqJywgaGVscD0nT3B0aW9uYWwgbGF5ZXIocykgdG8gZmxhdHRlbiAob3RoZXJ3aXNlIGFsbCBhcmUgZmxhdHRlbmVkKScpCisgICAgcGFyc2VyX2ZsYXR0ZW4uYWRkX2FyZ3VtZW50KCdvdXRwdXRkaXInLCBoZWxwPSdPdXRwdXQgZGlyZWN0b3J5JykKKworICAgIHBhcnNlcl9zaG93X2Nyb3NzX2RlcGVuZHMgPSBhZGRfY29tbWFuZCgnc2hvdy1jcm9zcy1kZXBlbmRzJywgY21kcy5kb19zaG93X2Nyb3NzX2RlcGVuZHMpCisgICAgcGFyc2VyX3Nob3dfY3Jvc3NfZGVwZW5kcy5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmlsZW5hbWVzJywgaGVscD0nc2hvdyBmdWxsIGZpbGUgcGF0aCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyX3Nob3dfY3Jvc3NfZGVwZW5kcy5hZGRfYXJndW1lbnQoJy1pJywgJy0taWdub3JlJywgaGVscD0naWdub3JlIGRlcGVuZGVuY2llcyBvbiBpdGVtcyBpbiB0aGUgc3BlY2lmaWVkIGxheWVyKHMpIChzcGxpdCBtdWx0aXBsZSBsYXllciBuYW1lcyB3aXRoIGNvbW1hcywgbm8gc3BhY2VzKScsIG1ldGF2YXI9J0xBWUVSTkFNRScpCisKKyAgICBwYXJzZXJfbGF5ZXJpbmRleF9mZXRjaCA9IGFkZF9jb21tYW5kKCdsYXllcmluZGV4LWZldGNoJywgY21kcy5kb19sYXllcmluZGV4X2ZldGNoKQorICAgIHBhcnNlcl9sYXllcmluZGV4X2ZldGNoLmFkZF9hcmd1bWVudCgnLW4nLCAnLS1zaG93LW9ubHknLCBoZWxwPSdzaG93IGRlcGVuZGVuY2llcyBhbmQgZG8gbm90aGluZyBlbHNlJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfbGF5ZXJpbmRleF9mZXRjaC5hZGRfYXJndW1lbnQoJy1iJywgJy0tYnJhbmNoJywgaGVscD0nYnJhbmNoIG5hbWUgdG8gZmV0Y2ggKGRlZmF1bHQgJShkZWZhdWx0KXMpJywgZGVmYXVsdD0nbWFzdGVyJykKKyAgICBwYXJzZXJfbGF5ZXJpbmRleF9mZXRjaC5hZGRfYXJndW1lbnQoJy1pJywgJy0taWdub3JlJywgaGVscD0nYXNzdW1lIHRoZSBzcGVjaWZpZWQgbGF5ZXJzIGRvIG5vdCBuZWVkIHRvIGJlIGZldGNoZWQvYWRkZWQgKHNlcGFyYXRlIG11bHRpcGxlIGxheWVycyB3aXRoIGNvbW1hcywgbm8gc3BhY2VzKScsIG1ldGF2YXI9J0xBWUVSJykKKyAgICBwYXJzZXJfbGF5ZXJpbmRleF9mZXRjaC5hZGRfYXJndW1lbnQoJ2xheWVybmFtZScsIG5hcmdzPScrJywgaGVscD0nbGF5ZXIgdG8gZmV0Y2gnKQorCisgICAgcGFyc2VyX2xheWVyaW5kZXhfc2hvd19kZXBlbmRzID0gYWRkX2NvbW1hbmQoJ2xheWVyaW5kZXgtc2hvdy1kZXBlbmRzJywgY21kcy5kb19sYXllcmluZGV4X3Nob3dfZGVwZW5kcykKKyAgICBwYXJzZXJfbGF5ZXJpbmRleF9zaG93X2RlcGVuZHMuYWRkX2FyZ3VtZW50KCctYicsICctLWJyYW5jaCcsIGhlbHA9J2JyYW5jaCBuYW1lIHRvIGZldGNoIChkZWZhdWx0ICUoZGVmYXVsdClzKScsIGRlZmF1bHQ9J21hc3RlcicpCisgICAgcGFyc2VyX2xheWVyaW5kZXhfc2hvd19kZXBlbmRzLmFkZF9hcmd1bWVudCgnbGF5ZXJuYW1lJywgbmFyZ3M9JysnLCBoZWxwPSdsYXllciB0byBxdWVyeScpCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgaWYgYXJncy5kZWJ1ZzoKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisgICAgZWxpZiBhcmdzLnF1aWV0OgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5FUlJPUikKKworICAgIHRyeToKKyAgICAgICAgcmV0ID0gYXJncy5mdW5jKGFyZ3MpCisgICAgZXhjZXB0IFVzZXJFcnJvciBhcyBlcnI6CisgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZXJyKSkKKyAgICAgICAgcmV0ID0gMQorCisgICAgcmV0dXJuIHJldAorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Yyg1KQorICAgIHN5cy5leGl0KHJldCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1wcnNlcnYgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UtcHJzZXJ2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE4ZDdhY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UtcHJzZXJ2CkBAIC0wLDAgKzEsNTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgoraW1wb3J0IG9zCitpbXBvcnQgc3lzLGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQorCitzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKSwnbGliJykpCisKK2ltcG9ydCBwcnNlcnYKK2ltcG9ydCBwcnNlcnYuc2VydgorCitfX3ZlcnNpb25fXz0iMS4wLjAiCisKK1BSSE9TVF9ERUZBVUxUPScwLjAuMC4wJworUFJQT1JUX0RFRkFVTFQ9ODU4NQorCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKKyAgICAgICAgdmVyc2lvbj0iQml0YmFrZSBQUiBTZXJ2aWNlIENvcmUgdmVyc2lvbiAlcywgJSVwcm9nIHZlcnNpb24gJXMiICUgKHByc2Vydi5fX3ZlcnNpb25fXywgX192ZXJzaW9uX18pLAorICAgICAgICB1c2FnZSA9ICIlcHJvZyA8IC0tc3RhcnQgfCAtLXN0b3AgPiBbb3B0aW9uc10iKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZmlsZSIsIGhlbHA9ImRhdGFiYXNlIGZpbGVuYW1lKGRlZmF1bHQ6IHByc2Vydi5zcWxpdGUzKSIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9ImRiZmlsZSIsIHR5cGU9InN0cmluZyIsIGRlZmF1bHQ9InByc2Vydi5zcWxpdGUzIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWwiLCAiLS1sb2ciLCBoZWxwPSJsb2cgZmlsZW5hbWUoZGVmYXVsdDogcHJzZXJ2LmxvZykiLCBhY3Rpb249InN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJsb2dmaWxlIiwgdHlwZT0ic3RyaW5nIiwgZGVmYXVsdD0icHJzZXJ2LmxvZyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tbG9nbGV2ZWwiLCBoZWxwPSJsb2dnaW5nIGxldmVsLCBpLmUuIENSSVRJQ0FMLCBFUlJPUiwgV0FSTklORywgSU5GTywgREVCVUciLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIHR5cGU9InN0cmluZyIsIGRlc3Q9ImxvZ2xldmVsIiwgZGVmYXVsdCA9ICJJTkZPIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1zdGFydCIsIGhlbHA9InN0YXJ0IGRhZW1vbiIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ic3RhcnQiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLXN0b3AiLCBoZWxwPSJzdG9wIGRhZW1vbiIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ic3RvcCIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0taG9zdCIsIGhlbHA9ImlwIGFkZHJlc3MgdG8gYmluZCIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9Imhvc3QiLCB0eXBlPSJzdHJpbmciLCBkZWZhdWx0PVBSSE9TVF9ERUZBVUxUKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLXBvcnQiLCBoZWxwPSJwb3J0IG51bWJlcihkZWZhdWx0OiA4NTg1KSIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InBvcnQiLCB0eXBlPSJpbnQiLCBkZWZhdWx0PVBSUE9SVF9ERUZBVUxUKQorCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHN5cy5hcmd2KQorICAgIHByc2Vydi5pbml0X2xvZ2dlcihvcy5wYXRoLmFic3BhdGgob3B0aW9ucy5sb2dmaWxlKSxvcHRpb25zLmxvZ2xldmVsKQorCisgICAgaWYgb3B0aW9ucy5zdGFydDoKKyAgICAgICAgcmV0PXByc2Vydi5zZXJ2LnN0YXJ0X2RhZW1vbihvcHRpb25zLmRiZmlsZSwgb3B0aW9ucy5ob3N0LCBvcHRpb25zLnBvcnQsb3MucGF0aC5hYnNwYXRoKG9wdGlvbnMubG9nZmlsZSkpCisgICAgZWxpZiBvcHRpb25zLnN0b3A6CisgICAgICAgIHJldD1wcnNlcnYuc2Vydi5zdG9wX2RhZW1vbihvcHRpb25zLmhvc3QsIG9wdGlvbnMucG9ydCkKKyAgICBlbHNlOgorICAgICAgICByZXQ9cGFyc2VyLnByaW50X2hlbHAoKQorICAgIHJldHVybiByZXQKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDUpCisgICAgc3lzLmV4aXQocmV0KQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2Utc2VsZnRlc3QgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2Utc2VsZnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDYyZWIxYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1zZWxmdGVzdApAQCAtMCwwICsxLDU1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMsIGxvZ2dpbmcKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpLCAnbGliJykpCisKK2ltcG9ydCB1bml0dGVzdAordHJ5OgorICAgIGltcG9ydCBiYgorZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBleGM6CisgICAgc3lzLmV4aXQoc3RyKGV4YykpCisKK2RlZiB1c2FnZSgpOgorICAgIHByaW50KCd1c2FnZTogW0JCX1NLSVBfTkVUVEVTVFM9eWVzXSAlcyBbLXZdIFt0ZXN0bmFtZTEgW3Rlc3RuYW1lMl0uLi5dJyAlIG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pKQorCit2ZXJib3NpdHkgPSAxCisKK3Rlc3RzID0gc3lzLmFyZ3ZbMTpdCitpZiAnLXYnIGluIHN5cy5hcmd2OgorICAgIHRlc3RzLnJlbW92ZSgnLXYnKQorICAgIHZlcmJvc2l0eSA9IDIKKworaWYgdGVzdHM6CisgICAgaWYgJy0taGVscCcgaW4gc3lzLmFyZ3ZbMTpdOgorICAgICAgICB1c2FnZSgpCisgICAgICAgIHN5cy5leGl0KDApCitlbHNlOgorICAgIHRlc3RzID0gWyJiYi50ZXN0cy5jb2RlcGFyc2VyIiwKKyAgICAgICAgICAgICAiYmIudGVzdHMuY293IiwKKyAgICAgICAgICAgICAiYmIudGVzdHMuZGF0YSIsCisgICAgICAgICAgICAgImJiLnRlc3RzLmZldGNoIiwKKyAgICAgICAgICAgICAiYmIudGVzdHMucGFyc2UiLAorICAgICAgICAgICAgICJiYi50ZXN0cy51dGlscyJdCisKK2ZvciB0IGluIHRlc3RzOgorICAgIHQgPSAnLicuam9pbih0LnNwbGl0KCcuJylbOjNdKQorICAgIF9faW1wb3J0X18odCkKKwordW5pdHRlc3QubWFpbihhcmd2PVsiYml0YmFrZS1zZWxmdGVzdCJdICsgdGVzdHMsIHZlcmJvc2l0eT12ZXJib3NpdHkpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS13b3JrZXIgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2Utd29ya2VyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFmMTdiODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2Utd29ya2VyCkBAIC0wLDAgKzEsNDMyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSkpLCAnbGliJykpCitmcm9tIGJiIGltcG9ydCBmZXRjaDIKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYmIKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBlcnJubworaW1wb3J0IHNpZ25hbAorCisjIFVzZXJzIHNob3VsZG4ndCBiZSBydW5uaW5nIHRoaXMgY29kZSBkaXJlY3RseQoraWYgbGVuKHN5cy5hcmd2KSAhPSAyIG9yIG5vdCBzeXMuYXJndlsxXS5zdGFydHN3aXRoKCJkZWNhZmJhZCIpOgorICAgIHByaW50KCJiaXRiYWtlLXdvcmtlciBpcyBtZWFudCBmb3IgaW50ZXJuYWwgZXhlY3V0aW9uIGJ5IGJpdGJha2UgaXRzZWxmLCBwbGVhc2UgZG9uJ3QgdXNlIGl0IHN0YW5kYWxvbmUuIikKKyAgICBzeXMuZXhpdCgxKQorCitwcm9maWxpbmcgPSBGYWxzZQoraWYgc3lzLmFyZ3ZbMV0gPT0gImRlY2FmYmFkYmFkIjoKKyAgICBwcm9maWxpbmcgPSBUcnVlCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgY1Byb2ZpbGUgYXMgcHJvZmlsZQorICAgIGV4Y2VwdDoKKyAgICAgICAgaW1wb3J0IHByb2ZpbGUKKworIyBVbmJ1ZmZlciBzdGRvdXQgdG8gYXZvaWQgbG9nIHRydW5jYXRpb24gaW4gdGhlIGV2ZW50CisjIG9mIGFuIHVub3JkZXJseSBleGl0IGFzIHdlbGwgYXMgdG8gcHJvdmlkZSB0aW1lbHkKKyMgdXBkYXRlcyB0byBsb2cgZmlsZXMgZm9yIHVzZSB3aXRoIHRhaWwKK3RyeToKKyAgICBpZiBzeXMuc3Rkb3V0Lm5hbWUgPT0gJzxzdGRvdXQ+JzoKKyAgICAgICAgc3lzLnN0ZG91dCA9IG9zLmZkb3BlbihzeXMuc3Rkb3V0LmZpbGVubygpLCAndycsIDApCitleGNlcHQ6CisgICAgcGFzcworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZSIpCisKK3RyeToKKyAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgcGlja2xlCisgICAgYmIubXNnLm5vdGUoMSwgYmIubXNnLmRvbWFpbi5DYWNoZSwgIkltcG9ydGluZyBjUGlja2xlIGZhaWxlZC4gRmFsbGluZyBiYWNrIHRvIGEgdmVyeSBzbG93IGltcGxlbWVudGF0aW9uLiIpCisKKword29ya2VyX3BpcGUgPSBzeXMuc3Rkb3V0LmZpbGVubygpCitiYi51dGlscy5ub25ibG9ja2luZ2ZkKHdvcmtlcl9waXBlKQorCitoYW5kbGVyID0gYmIuZXZlbnQuTG9nSGFuZGxlcigpCitsb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKQorCitpZiAwOgorICAgICMgQ29kZSB0byB3cml0ZSBvdXQgYSBsb2cgZmlsZSBvZiBhbGwgZXZlbnRzIHBhc3NpbmcgdGhyb3VnaCB0aGUgd29ya2VyCisgICAgbG9nZmlsZW5hbWUgPSAiL3RtcC93b3JrZXJsb2dmaWxlIgorICAgIGZvcm1hdF9zdHIgPSAiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiCisgICAgY29ubG9nZm9ybWF0ID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyKGZvcm1hdF9zdHIpCisgICAgY29uc29sZWxvZyA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIobG9nZmlsZW5hbWUpCisgICAgYmIubXNnLmFkZERlZmF1bHRsb2dGaWx0ZXIoY29uc29sZWxvZykKKyAgICBjb25zb2xlbG9nLnNldEZvcm1hdHRlcihjb25sb2dmb3JtYXQpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoY29uc29sZWxvZykKKword29ya2VyX3F1ZXVlID0gIiIKKworZGVmIHdvcmtlcl9maXJlKGV2ZW50LCBkKToKKyAgICBkYXRhID0gIjxldmVudD4iICsgcGlja2xlLmR1bXBzKGV2ZW50KSArICI8L2V2ZW50PiIKKyAgICB3b3JrZXJfZmlyZV9wcmVwaWNrbGVkKGRhdGEpCisKK2RlZiB3b3JrZXJfZmlyZV9wcmVwaWNrbGVkKGV2ZW50KToKKyAgICBnbG9iYWwgd29ya2VyX3F1ZXVlCisKKyAgICB3b3JrZXJfcXVldWUgPSB3b3JrZXJfcXVldWUgKyBldmVudAorICAgIHdvcmtlcl9mbHVzaCgpCisKK2RlZiB3b3JrZXJfZmx1c2goKToKKyAgICBnbG9iYWwgd29ya2VyX3F1ZXVlLCB3b3JrZXJfcGlwZQorCisgICAgaWYgbm90IHdvcmtlcl9xdWV1ZToKKyAgICAgICAgcmV0dXJuCisKKyAgICB0cnk6CisgICAgICAgIHdyaXR0ZW4gPSBvcy53cml0ZSh3b3JrZXJfcGlwZSwgd29ya2VyX3F1ZXVlKQorICAgICAgICB3b3JrZXJfcXVldWUgPSB3b3JrZXJfcXVldWVbd3JpdHRlbjpdCisgICAgZXhjZXB0IChJT0Vycm9yLCBPU0Vycm9yKSBhcyBlOgorICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVBR0FJTiBhbmQgZS5lcnJubyAhPSBlcnJuby5FUElQRToKKyAgICAgICAgICAgIHJhaXNlCisKK2RlZiB3b3JrZXJfY2hpbGRfZmlyZShldmVudCwgZCk6CisgICAgZ2xvYmFsIHdvcmtlcl9waXBlCisKKyAgICBkYXRhID0gIjxldmVudD4iICsgcGlja2xlLmR1bXBzKGV2ZW50KSArICI8L2V2ZW50PiIKKyAgICB0cnk6CisgICAgICAgIHdvcmtlcl9waXBlLndyaXRlKGRhdGEpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHNpZ3Rlcm1faGFuZGxlcihOb25lLCBOb25lKQorICAgICAgICByYWlzZQorCitiYi5ldmVudC53b3JrZXJfZmlyZSA9IHdvcmtlcl9maXJlCisKK2xmID0gTm9uZQorI2xmID0gb3BlbigiL3RtcC93b3JrZXJjb21tYW5kbG9nIiwgIncrIikKK2RlZiB3b3JrZXJsb2dfd3JpdGUobXNnKToKKyAgICBpZiBsZjoKKyAgICAgICAgbGYud3JpdGUobXNnKQorICAgICAgICBsZi5mbHVzaCgpCisKK2RlZiBzaWd0ZXJtX2hhbmRsZXIoc2lnbnVtLCBmcmFtZSk6CisgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgc2lnbmFsLlNJR19ERkwpCisgICAgb3Mua2lsbHBnKDAsIHNpZ25hbC5TSUdURVJNKQorICAgIHN5cy5leGl0KCkKKworZGVmIGZvcmtfb2ZmX3Rhc2soY2ZnLCBkYXRhLCB3b3JrZXJkYXRhLCBmbiwgdGFzaywgdGFza25hbWUsIGFwcGVuZHMsIHRhc2tkZXBkYXRhLCBxdWlldGVycm9ycz1GYWxzZSk6CisgICAgIyBXZSBuZWVkIHRvIHNldHVwIHRoZSBlbnZpcm9ubWVudCBCRUZPUkUgdGhlIGZvcmssIHNpbmNlCisgICAgIyBhIGZvcmsoKSBvciBleGVjKigpIGFjdGl2YXRlcyBQU0VVRE8uLi4KKworICAgIGVudmJhY2t1cCA9IHt9CisgICAgZmFrZWVudiA9IHt9CisgICAgdW1hc2sgPSBOb25lCisKKyAgICB0YXNrZGVwID0gd29ya2VyZGF0YVsidGFza2RlcHMiXVtmbl0KKyAgICBpZiAndW1hc2snIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ3VtYXNrJ106CisgICAgICAgICMgdW1hc2sgbWlnaHQgY29tZSBpbiBhcyBhIG51bWJlciBvciB0ZXh0IHN0cmluZy4uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICB1bWFzayA9IGludCh0YXNrZGVwWyd1bWFzayddW3Rhc2tuYW1lXSw4KQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgIHVtYXNrID0gdGFza2RlcFsndW1hc2snXVt0YXNrbmFtZV0KKworICAgICMgV2UgY2FuJ3QgdXNlIHRoZSBmYWtlcm9vdCBlbnZpcm9ubWVudCBpbiBhIGRyeSBydW4gYXMgaXQgcG9zc2libHkgaGFzbid0IGJlZW4gYnVpbHQKKyAgICBpZiAnZmFrZXJvb3QnIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ2Zha2Vyb290J10gYW5kIG5vdCBjZmcuZHJ5X3J1bjoKKyAgICAgICAgZW52dmFycyA9ICh3b3JrZXJkYXRhWyJmYWtlcm9vdGVudiJdW2ZuXSBvciAiIikuc3BsaXQoKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiAodmFyLnNwbGl0KCc9JykgZm9yIHZhciBpbiBlbnZ2YXJzKToKKyAgICAgICAgICAgIGVudmJhY2t1cFtrZXldID0gb3MuZW52aXJvbi5nZXQoa2V5KQorICAgICAgICAgICAgb3MuZW52aXJvbltrZXldID0gdmFsdWUKKyAgICAgICAgICAgIGZha2VlbnZba2V5XSA9IHZhbHVlCisKKyAgICAgICAgZmFrZWRpcnMgPSAod29ya2VyZGF0YVsiZmFrZXJvb3RkaXJzIl1bZm5dIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGZvciBwIGluIGZha2VkaXJzOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHApCisgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAnUnVubmluZyAlczolcyB1bmRlciBmYWtlcm9vdCwgZmFrZWRpcnM6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAoZm4sIHRhc2tuYW1lLCAnLCAnLmpvaW4oZmFrZWRpcnMpKSkKKyAgICBlbHNlOgorICAgICAgICBlbnZ2YXJzID0gKHdvcmtlcmRhdGFbImZha2Vyb290bm9lbnYiXVtmbl0gb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gKHZhci5zcGxpdCgnPScpIGZvciB2YXIgaW4gZW52dmFycyk6CisgICAgICAgICAgICBlbnZiYWNrdXBba2V5XSA9IG9zLmVudmlyb24uZ2V0KGtleSkKKyAgICAgICAgICAgIG9zLmVudmlyb25ba2V5XSA9IHZhbHVlCisgICAgICAgICAgICBmYWtlZW52W2tleV0gPSB2YWx1ZQorCisgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisKKyAgICB0cnk6CisgICAgICAgIHBpcGVpbiwgcGlwZW91dCA9IG9zLnBpcGUoKQorICAgICAgICBwaXBlaW4gPSBvcy5mZG9wZW4ocGlwZWluLCAncmInLCA0MDk2KQorICAgICAgICBwaXBlb3V0ID0gb3MuZmRvcGVuKHBpcGVvdXQsICd3YicsIDApCisgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGJiLm1zZy5mYXRhbCgiUnVuUXVldWUiLCAiZm9yayBmYWlsZWQ6ICVkICglcykiICUgKGUuZXJybm8sIGUuc3RyZXJyb3IpKQorCisgICAgaWYgcGlkID09IDA6CisgICAgICAgIGRlZiBjaGlsZCgpOgorICAgICAgICAgICAgZ2xvYmFsIHdvcmtlcl9waXBlCisgICAgICAgICAgICBwaXBlaW4uY2xvc2UoKQorCisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzaWd0ZXJtX2hhbmRsZXIpCisgICAgICAgICAgICAjIExldCBTSUdIVVAgZXhpdCBhcyBTSUdURVJNCisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdIVVAsIHNpZ3Rlcm1faGFuZGxlcikKKyAgICAgICAgICAgIGJiLnV0aWxzLnNpZ25hbF9vbl9wYXJlbnRfZXhpdCgiU0lHVEVSTSIpCisKKyAgICAgICAgICAgICMgU2F2ZSBvdXQgdGhlIFBJRCBzbyB0aGF0IHRoZSBldmVudCBjYW4gaW5jbHVkZSBpdCB0aGUKKyAgICAgICAgICAgICMgZXZlbnRzCisgICAgICAgICAgICBiYi5ldmVudC53b3JrZXJfcGlkID0gb3MuZ2V0cGlkKCkKKyAgICAgICAgICAgIGJiLmV2ZW50Lndvcmtlcl9maXJlID0gd29ya2VyX2NoaWxkX2ZpcmUKKyAgICAgICAgICAgIHdvcmtlcl9waXBlID0gcGlwZW91dAorCisgICAgICAgICAgICAjIE1ha2UgdGhlIGNoaWxkIHRoZSBwcm9jZXNzIGdyb3VwIGxlYWRlciBhbmQgZW5zdXJlIG5vCisgICAgICAgICAgICAjIGNoaWxkIHByb2Nlc3Mgd2lsbCBiZSBjb250cm9sbGVkIGJ5IHRoZSBjdXJyZW50IHRlcm1pbmFsCisgICAgICAgICAgICAjIFRoaXMgZW5zdXJlcyBzaWduYWxzIHNlbnQgdG8gdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGxpa2UgQ3RybCtDCisgICAgICAgICAgICAjIGRvbid0IHN0b3AgdGhlIGNoaWxkIHByb2Nlc3Nlcy4KKyAgICAgICAgICAgIG9zLnNldHNpZCgpCisgICAgICAgICAgICAjIE5vIHN0ZGluCisgICAgICAgICAgICBuZXdzaSA9IG9zLm9wZW4ob3MuZGV2bnVsbCwgb3MuT19SRFdSKQorICAgICAgICAgICAgb3MuZHVwMihuZXdzaSwgc3lzLnN0ZGluLmZpbGVubygpKQorCisgICAgICAgICAgICBpZiB1bWFzazoKKyAgICAgICAgICAgICAgICBvcy51bWFzayh1bWFzaykKKworICAgICAgICAgICAgZGF0YS5zZXRWYXIoIkJCX1dPUktFUkNPTlRFWFQiLCAiMSIpCisgICAgICAgICAgICBkYXRhLnNldFZhcigiQkJfVEFTS0RFUERBVEEiLCB0YXNrZGVwZGF0YSkKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJCVUlMRE5BTUUiLCB3b3JrZXJkYXRhWyJidWlsZG5hbWUiXSkKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJEQVRFIiwgd29ya2VyZGF0YVsiZGF0ZSJdKQorICAgICAgICAgICAgZGF0YS5zZXRWYXIoIlRJTUUiLCB3b3JrZXJkYXRhWyJ0aW1lIl0pCisgICAgICAgICAgICBiYi5wYXJzZS5zaWdnZW4uc2V0X3Rhc2tkYXRhKHdvcmtlcmRhdGFbInNpZ2RhdGEiXSkKKyAgICAgICAgICAgIHJldCA9IDAKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0aGVfZGF0YSA9IGJiLmNhY2hlLkNhY2hlLmxvYWREYXRhRnVsbChmbiwgYXBwZW5kcywgZGF0YSkKKyAgICAgICAgICAgICAgICB0aGVfZGF0YS5zZXRWYXIoJ0JCX1RBU0tIQVNIJywgd29ya2VyZGF0YVsicnVucV9oYXNoIl1bdGFza10pCisKKyAgICAgICAgICAgICAgICAjIGV4cG9ydGVkX3ZhcnMoKSByZXR1cm5zIGEgZ2VuZXJhdG9yIHdoaWNoICpjYW5ub3QqIGJlIHBhc3NlZCB0byBvcy5lbnZpcm9uLnVwZGF0ZSgpIAorICAgICAgICAgICAgICAgICMgc3VjY2Vzc2Z1bGx5LiBXZSBhbHNvIG5lZWQgdG8gdW5zZXQgYW55dGhpbmcgZnJvbSB0aGUgZW52aXJvbm1lbnQgd2hpY2ggc2hvdWxkbid0IGJlIHRoZXJlIAorICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBiYi5kYXRhLmV4cG9ydGVkX3ZhcnModGhlX2RhdGEpCisgICAgICAgICAgICAgICAgYmIudXRpbHMuZW1wdHlfZW52aXJvbm1lbnQoKQorICAgICAgICAgICAgICAgIGZvciBlLCB2IGluIGV4cG9ydHM6CisgICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25bZV0gPSB2CisgICAgICAgICAgICAgICAgZm9yIGUgaW4gZmFrZWVudjoKKyAgICAgICAgICAgICAgICAgICAgb3MuZW52aXJvbltlXSA9IGZha2VlbnZbZV0KKyAgICAgICAgICAgICAgICAgICAgdGhlX2RhdGEuc2V0VmFyKGUsIGZha2VlbnZbZV0pCisgICAgICAgICAgICAgICAgICAgIHRoZV9kYXRhLnNldFZhckZsYWcoZSwgJ2V4cG9ydCcsICIxIikKKworICAgICAgICAgICAgICAgIGlmIHF1aWV0ZXJyb3JzOgorICAgICAgICAgICAgICAgICAgICB0aGVfZGF0YS5zZXRWYXJGbGFnKHRhc2tuYW1lLCAicXVpZXRlcnJvcnMiLCAiMSIpCisKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmIG5vdCBxdWlldGVycm9yczoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmNyaXRpY2FsKHN0cihleGMpKQorICAgICAgICAgICAgICAgIG9zLl9leGl0KDEpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgY2ZnLmRyeV9ydW46CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICAgICAgcmV0dXJuIGJiLmJ1aWxkLmV4ZWNfdGFzayhmbiwgdGFza25hbWUsIHRoZV9kYXRhLCBjZmcucHJvZmlsZSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBvcy5fZXhpdCgxKQorICAgICAgICBpZiBub3QgcHJvZmlsaW5nOgorICAgICAgICAgICAgb3MuX2V4aXQoY2hpbGQoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByb2ZuYW1lID0gInByb2ZpbGUtJXMubG9nIiAlIChmbi5yZXBsYWNlKCIvIiwgIi0iKSArICItIiArIHRhc2tuYW1lKQorICAgICAgICAgICAgcHJvZiA9IHByb2ZpbGUuUHJvZmlsZSgpCisgICAgICAgICAgICB0cnk6IAorICAgICAgICAgICAgICAgIHJldCA9IHByb2ZpbGUuUHJvZmlsZS5ydW5jYWxsKHByb2YsIGNoaWxkKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBwcm9mLmR1bXBfc3RhdHMocHJvZm5hbWUpCisgICAgICAgICAgICAgICAgYmIudXRpbHMucHJvY2Vzc19wcm9maWxlbG9nKHByb2ZuYW1lKQorICAgICAgICAgICAgICAgIG9zLl9leGl0KHJldCkKKyAgICBlbHNlOgorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBlbnZiYWNrdXAuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGRlbCBvcy5lbnZpcm9uW2tleV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3MuZW52aXJvbltrZXldID0gdmFsdWUKKworICAgIHJldHVybiBwaWQsIHBpcGVpbiwgcGlwZW91dAorCitjbGFzcyBydW5RdWV1ZVdvcmtlclBpcGUoKToKKyAgICAiIiIKKyAgICBBYnN0cmFjdGlvbiBmb3IgYSBwaXBlIGJldHdlZW4gYSB3b3JrZXIgdGhyZWFkIGFuZCB0aGUgd29ya2VyIHNlcnZlcgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwaXBlaW4sIHBpcGVvdXQpOgorICAgICAgICBzZWxmLmlucHV0ID0gcGlwZWluCisgICAgICAgIGlmIHBpcGVvdXQ6CisgICAgICAgICAgICBwaXBlb3V0LmNsb3NlKCkKKyAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZChzZWxmLmlucHV0KQorICAgICAgICBzZWxmLnF1ZXVlID0gIiIKKworICAgIGRlZiByZWFkKHNlbGYpOgorICAgICAgICBzdGFydCA9IGxlbihzZWxmLnF1ZXVlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnF1ZXVlID0gc2VsZi5xdWV1ZSArIHNlbGYuaW5wdXQucmVhZCgxMDI0MDApCisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJvcikgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUFHQUlOOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgZW5kID0gbGVuKHNlbGYucXVldWUpCisgICAgICAgIGluZGV4ID0gc2VsZi5xdWV1ZS5maW5kKCI8L2V2ZW50PiIpCisgICAgICAgIHdoaWxlIGluZGV4ICE9IC0xOgorICAgICAgICAgICAgd29ya2VyX2ZpcmVfcHJlcGlja2xlZChzZWxmLnF1ZXVlWzppbmRleCs4XSkKKyAgICAgICAgICAgIHNlbGYucXVldWUgPSBzZWxmLnF1ZXVlW2luZGV4Kzg6XQorICAgICAgICAgICAgaW5kZXggPSBzZWxmLnF1ZXVlLmZpbmQoIjwvZXZlbnQ+IikKKyAgICAgICAgcmV0dXJuIChlbmQgPiBzdGFydCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgd2hpbGUgc2VsZi5yZWFkKCk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBsZW4oc2VsZi5xdWV1ZSkgPiAwOgorICAgICAgICAgICAgcHJpbnQoIldhcm5pbmcsIHdvcmtlciBjaGlsZCBsZWZ0IHBhcnRpYWwgbWVzc2FnZTogJXMiICUgc2VsZi5xdWV1ZSkKKyAgICAgICAgc2VsZi5pbnB1dC5jbG9zZSgpCisKK25vcm1hbGV4aXQgPSBGYWxzZQorCitjbGFzcyBCaXRiYWtlV29ya2VyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpbik6CisgICAgICAgIHNlbGYuaW5wdXQgPSBkaW4KKyAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZChzZWxmLmlucHV0KQorICAgICAgICBzZWxmLnF1ZXVlID0gIiIKKyAgICAgICAgc2VsZi5jb29rZXJjZmcgPSBOb25lCisgICAgICAgIHNlbGYuZGF0YWJ1aWxkZXIgPSBOb25lCisgICAgICAgIHNlbGYuZGF0YSA9IE5vbmUKKyAgICAgICAgc2VsZi5idWlsZF9waWRzID0ge30KKyAgICAgICAgc2VsZi5idWlsZF9waXBlcyA9IHt9CisgICAgCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHNlbGYuc2lndGVybV9leGNlcHRpb24pCisgICAgICAgICMgTGV0IFNJR0hVUCBleGl0IGFzIFNJR1RFUk0KKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSFVQLCBzZWxmLnNpZ3Rlcm1fZXhjZXB0aW9uKQorCisgICAgZGVmIHNpZ3Rlcm1fZXhjZXB0aW9uKHNlbGYsIHNpZ251bSwgc3RhY2tmcmFtZSk6CisgICAgICAgIGlmIHNpZ251bSA9PSBzaWduYWwuU0lHVEVSTToKKyAgICAgICAgICAgIGJiLndhcm4oIldvcmtlciByZWNpZXZlZCBTSUdURVJNLCBzaHV0dGluZyBkb3duLi4uIikKKyAgICAgICAgZWxpZiBzaWdudW0gPT0gc2lnbmFsLlNJR0hVUDoKKyAgICAgICAgICAgIGJiLndhcm4oIldvcmtlciByZWNpZXZlZCBTSUdIVVAsIHNodXR0aW5nIGRvd24uLi4iKQorICAgICAgICBzZWxmLmhhbmRsZV9maW5pc2hub3coTm9uZSkKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgc2lnbmFsLlNJR19ERkwpCisgICAgICAgIG9zLmtpbGwob3MuZ2V0cGlkKCksIHNpZ25hbC5TSUdURVJNKQorCisgICAgZGVmIHNlcnZlKHNlbGYpOiAgICAgICAgCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAocmVhZHksIF8sIF8pID0gc2VsZWN0LnNlbGVjdChbc2VsZi5pbnB1dF0gKyBbaS5pbnB1dCBmb3IgaSBpbiBzZWxmLmJ1aWxkX3BpcGVzLnZhbHVlcygpXSwgW10gLCBbXSwgMSkKKyAgICAgICAgICAgIGlmIHNlbGYuaW5wdXQgaW4gcmVhZHk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByID0gc2VsZi5pbnB1dC5yZWFkKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHIpID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEVPRiBvbiBwaXBlLCBzZXJ2ZXIgbXVzdCBoYXZlIHRlcm1pbmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2lndGVybV9leGNlcHRpb24oc2lnbmFsLlNJR1RFUk0sIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucXVldWUgPSBzZWxmLnF1ZXVlICsgcgorICAgICAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLnF1ZXVlKToKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9pdGVtKCJjb29rZXJjb25maWciLCBzZWxmLmhhbmRsZV9jb29rZXJjZmcpCisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfaXRlbSgid29ya2VyZGF0YSIsIHNlbGYuaGFuZGxlX3dvcmtlcmRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfaXRlbSgicnVudGFzayIsIHNlbGYuaGFuZGxlX3J1bnRhc2spCisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfaXRlbSgiZmluaXNobm93Iiwgc2VsZi5oYW5kbGVfZmluaXNobm93KQorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2l0ZW0oInBpbmciLCBzZWxmLmhhbmRsZV9waW5nKQorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2l0ZW0oInF1aXQiLCBzZWxmLmhhbmRsZV9xdWl0KQorCisgICAgICAgICAgICBmb3IgcGlwZSBpbiBzZWxmLmJ1aWxkX3BpcGVzOgorICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRfcGlwZXNbcGlwZV0ucmVhZCgpCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5idWlsZF9waWRzKToKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3Nfd2FpdHBpZCgpCisgICAgICAgICAgICB3b3JrZXJfZmx1c2goKQorCisKKyAgICBkZWYgaGFuZGxlX2l0ZW0oc2VsZiwgaXRlbSwgZnVuYyk6CisgICAgICAgIGlmIHNlbGYucXVldWUuc3RhcnRzd2l0aCgiPCIgKyBpdGVtICsgIj4iKToKKyAgICAgICAgICAgIGluZGV4ID0gc2VsZi5xdWV1ZS5maW5kKCI8LyIgKyBpdGVtICsgIj4iKQorICAgICAgICAgICAgd2hpbGUgaW5kZXggIT0gLTE6CisgICAgICAgICAgICAgICAgZnVuYyhzZWxmLnF1ZXVlWyhsZW4oaXRlbSkgKyAyKTppbmRleF0pCisgICAgICAgICAgICAgICAgc2VsZi5xdWV1ZSA9IHNlbGYucXVldWVbKGluZGV4ICsgbGVuKGl0ZW0pICsgMyk6XQorICAgICAgICAgICAgICAgIGluZGV4ID0gc2VsZi5xdWV1ZS5maW5kKCI8LyIgKyBpdGVtICsgIj4iKQorCisgICAgZGVmIGhhbmRsZV9jb29rZXJjZmcoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuY29va2VyY2ZnID0gcGlja2xlLmxvYWRzKGRhdGEpCisgICAgICAgIHNlbGYuZGF0YWJ1aWxkZXIgPSBiYi5jb29rZXJkYXRhLkNvb2tlckRhdGFCdWlsZGVyKHNlbGYuY29va2VyY2ZnLCB3b3JrZXI9VHJ1ZSkKKyAgICAgICAgc2VsZi5kYXRhYnVpbGRlci5wYXJzZUJhc2VDb25maWd1cmF0aW9uKCkKKyAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5kYXRhYnVpbGRlci5kYXRhCisKKyAgICBkZWYgaGFuZGxlX3dvcmtlcmRhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYud29ya2VyZGF0YSA9IHBpY2tsZS5sb2FkcyhkYXRhKQorICAgICAgICBiYi5tc2cubG9nZ2VyRGVmYXVsdERlYnVnTGV2ZWwgPSBzZWxmLndvcmtlcmRhdGFbImxvZ2RlZmF1bHRkZWJ1ZyJdCisgICAgICAgIGJiLm1zZy5sb2dnZXJEZWZhdWx0VmVyYm9zZSA9IHNlbGYud29ya2VyZGF0YVsibG9nZGVmYXVsdHZlcmJvc2UiXQorICAgICAgICBiYi5tc2cubG9nZ2VyVmVyYm9zZUxvZ3MgPSBzZWxmLndvcmtlcmRhdGFbImxvZ2RlZmF1bHR2ZXJib3NlbG9ncyJdCisgICAgICAgIGJiLm1zZy5sb2dnZXJEZWZhdWx0RG9tYWlucyA9IHNlbGYud29ya2VyZGF0YVsibG9nZGVmYXVsdGRvbWFpbiJdCisgICAgICAgIHNlbGYuZGF0YS5zZXRWYXIoIlBSU0VSVl9IT1NUIiwgc2VsZi53b3JrZXJkYXRhWyJwcmhvc3QiXSkKKworICAgIGRlZiBoYW5kbGVfcGluZyhzZWxmLCBfKToKKyAgICAgICAgd29ya2VybG9nX3dyaXRlKCJIYW5kbGluZyBwaW5nXG4iKQorCisgICAgICAgIGxvZ2dlci53YXJuKCJQb25nIGZyb20gYml0YmFrZS13b3JrZXIhIikKKworICAgIGRlZiBoYW5kbGVfcXVpdChzZWxmLCBkYXRhKToKKyAgICAgICAgd29ya2VybG9nX3dyaXRlKCJIYW5kbGluZyBxdWl0XG4iKQorCisgICAgICAgIGdsb2JhbCBub3JtYWxleGl0CisgICAgICAgIG5vcm1hbGV4aXQgPSBUcnVlCisgICAgICAgIHN5cy5leGl0KDApCisKKyAgICBkZWYgaGFuZGxlX3J1bnRhc2soc2VsZiwgZGF0YSk6CisgICAgICAgIGZuLCB0YXNrLCB0YXNrbmFtZSwgcXVpZXRlcnJvcnMsIGFwcGVuZHMsIHRhc2tkZXBkYXRhID0gcGlja2xlLmxvYWRzKGRhdGEpCisgICAgICAgIHdvcmtlcmxvZ193cml0ZSgiSGFuZGxpbmcgcnVudGFzayAlcyAlcyAlc1xuIiAlICh0YXNrLCBmbiwgdGFza25hbWUpKQorCisgICAgICAgIHBpZCwgcGlwZWluLCBwaXBlb3V0ID0gZm9ya19vZmZfdGFzayhzZWxmLmNvb2tlcmNmZywgc2VsZi5kYXRhLCBzZWxmLndvcmtlcmRhdGEsIGZuLCB0YXNrLCB0YXNrbmFtZSwgYXBwZW5kcywgdGFza2RlcGRhdGEsIHF1aWV0ZXJyb3JzKQorCisgICAgICAgIHNlbGYuYnVpbGRfcGlkc1twaWRdID0gdGFzaworICAgICAgICBzZWxmLmJ1aWxkX3BpcGVzW3BpZF0gPSBydW5RdWV1ZVdvcmtlclBpcGUocGlwZWluLCBwaXBlb3V0KQorCisgICAgZGVmIHByb2Nlc3Nfd2FpdHBpZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBub25lIGlzIHRoZXJlIGFyZSBubyBwcm9jZXNzZXMgYXdhaXRpbmcgcmVzdWx0IGNvbGxlY3Rpb24sIG90aGVyd2lzZQorICAgICAgICBjb2xsZWN0IHRoZSBwcm9jZXNzIGV4aXQgY29kZXMgYW5kIGNsb3NlIHRoZSBpbmZvcm1hdGlvbiBwaXBlLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGlkLCBzdGF0dXMgPSBvcy53YWl0cGlkKC0xLCBvcy5XTk9IQU5HKQorICAgICAgICAgICAgaWYgcGlkID09IDAgb3Igb3MuV0lGU1RPUFBFRChzdGF0dXMpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICB3b3JrZXJsb2dfd3JpdGUoIkV4aXQgY29kZSBvZiAlcyBmb3IgcGlkICVzXG4iICUgKHN0YXR1cywgcGlkKSkKKworICAgICAgICBpZiBvcy5XSUZFWElURUQoc3RhdHVzKToKKyAgICAgICAgICAgIHN0YXR1cyA9IG9zLldFWElUU1RBVFVTKHN0YXR1cykKKyAgICAgICAgZWxpZiBvcy5XSUZTSUdOQUxFRChzdGF0dXMpOgorICAgICAgICAgICAgIyBQZXIgc2hlbGwgY29udmVudGlvbnMgZm9yICQ/LCB3aGVuIGEgcHJvY2VzcyBleGl0cyBkdWUgdG8KKyAgICAgICAgICAgICMgYSBzaWduYWwsIHdlIHJldHVybiBhbiBleGl0IGNvZGUgb2YgMTI4ICsgU0lHTlVNCisgICAgICAgICAgICBzdGF0dXMgPSAxMjggKyBvcy5XVEVSTVNJRyhzdGF0dXMpCisKKyAgICAgICAgdGFzayA9IHNlbGYuYnVpbGRfcGlkc1twaWRdCisgICAgICAgIGRlbCBzZWxmLmJ1aWxkX3BpZHNbcGlkXQorCisgICAgICAgIHNlbGYuYnVpbGRfcGlwZXNbcGlkXS5jbG9zZSgpCisgICAgICAgIGRlbCBzZWxmLmJ1aWxkX3BpcGVzW3BpZF0KKworICAgICAgICB3b3JrZXJfZmlyZV9wcmVwaWNrbGVkKCI8ZXhpdGNvZGU+IiArIHBpY2tsZS5kdW1wcygodGFzaywgc3RhdHVzKSkgKyAiPC9leGl0Y29kZT4iKQorCisgICAgZGVmIGhhbmRsZV9maW5pc2hub3coc2VsZiwgXyk6CisgICAgICAgIGlmIHNlbGYuYnVpbGRfcGlkczoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTZW5kaW5nIFNJR1RFUk0gdG8gcmVtYWluaW5nICVzIHRhc2tzIiwgbGVuKHNlbGYuYnVpbGRfcGlkcykpCisgICAgICAgICAgICBmb3IgaywgdiBpbiBzZWxmLmJ1aWxkX3BpZHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvcy5raWxsKC1rLCBzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAgICAgICAgICAgb3Mud2FpdHBpZCgtMSwgMCkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIHBpcGUgaW4gc2VsZi5idWlsZF9waXBlczoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRfcGlwZXNbcGlwZV0ucmVhZCgpCisKK3RyeToKKyAgICB3b3JrZXIgPSBCaXRiYWtlV29ya2VyKHN5cy5zdGRpbikKKyAgICBpZiBub3QgcHJvZmlsaW5nOgorICAgICAgICB3b3JrZXIuc2VydmUoKQorICAgIGVsc2U6CisgICAgICAgIHByb2ZuYW1lID0gInByb2ZpbGUtd29ya2VyLmxvZyIKKyAgICAgICAgcHJvZiA9IHByb2ZpbGUuUHJvZmlsZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByb2ZpbGUuUHJvZmlsZS5ydW5jYWxsKHByb2YsIHdvcmtlci5zZXJ2ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHByb2YuZHVtcF9zdGF0cyhwcm9mbmFtZSkKKyAgICAgICAgICAgIGJiLnV0aWxzLnByb2Nlc3NfcHJvZmlsZWxvZyhwcm9mbmFtZSkKK2V4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6CisgICAgaWYgbm90IG5vcm1hbGV4aXQ6CisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSh0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHN0cihlKSkKK3doaWxlIGxlbih3b3JrZXJfcXVldWUpOgorICAgIHdvcmtlcl9mbHVzaCgpCit3b3JrZXJsb2dfd3JpdGUoImV4aXR0aW5nIikKK3N5cy5leGl0KDApCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0ZG9jIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRkb2MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTc2ZDg4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0ZG9jCkBAIC0wLDAgKzEsNTMxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwNSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IG9wdHBhcnNlLCBvcywgc3lzCisKKyMgYml0YmFrZQorc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2xpYicpKQoraW1wb3J0IGJiCitpbXBvcnQgYmIucGFyc2UKK2Zyb20gICBzdHJpbmcgaW1wb3J0IHNwbGl0LCBqb2luCisKK19fdmVyc2lvbl9fID0gIjAuMC4yIgorCitjbGFzcyBIVE1MRm9ybWF0dGVyOgorICAgICIiIgorICAgIFNpbXBsZSBjbGFzcyB0byBoZWxwIHRvIGdlbmVyYXRlIHNvbWUgc29ydCBvZiBIVE1MIGZpbGVzLiBJdCBpcworICAgIHF1aXRlIGluZmVyaW9yIHNvbHV0aW9uIGNvbXBhcmVkIHRvIGRvY2Jvb2ssIGd0a2RvYywgZG94eWdlbiBidXQgaXQKKyAgICBzaG91bGQgd29yayBmb3Igbm93LgorICAgIFdlJ3ZlIGEgZ2xvYmFsIGludHJvZHVjdGlvbiBzaXRlIChpbmRleC5odG1sKSBhbmQgdGhlbiBvbmUgc2l0ZSBmb3IKKyAgICB0aGUgbGlzdCBvZiBrZXlzIChhbHBoYWJldGljYWwgc29ydGVkKSBhbmQgb25lIGZvciB0aGUgbGlzdCBvZiBncm91cHMsCisgICAgb25lIHNpdGUgZm9yIGVhY2gga2V5IHdpdGggbGlua3MgdG8gdGhlIHJlbGF0aW9ucyBhbmQgZ3JvdXBzLgorCisgICAgICAgIGluZGV4Lmh0bWwKKyAgICAgICAgYWxsX2tleXMuaHRtbAorICAgICAgICBhbGxfZ3JvdXBzLmh0bWwKKyAgICAgICAgZ3JvdXBOQU1FLmh0bWwKKyAgICAgICAga2V5TkFNRS5odG1sCisgICAgIiIiCisKKyAgICBkZWYgcmVwbGFjZShzZWxmLCB0ZXh0LCAqcGFpcnMpOgorICAgICAgICAiIiIKKyAgICAgICAgRnJvbSBweWRvYy4uLiBhbG1vc3QgaWRlbnRpY2FsIGF0IGxlYXN0CisgICAgICAgICIiIgorICAgICAgICB3aGlsZSBwYWlyczoKKyAgICAgICAgICAgIChhLCBiKSA9IHBhaXJzWzBdCisgICAgICAgICAgICB0ZXh0ID0gam9pbihzcGxpdCh0ZXh0LCBhKSwgYikKKyAgICAgICAgICAgIHBhaXJzID0gcGFpcnNbMTpdCisgICAgICAgIHJldHVybiB0ZXh0CisgICAgZGVmIGVzY2FwZShzZWxmLCB0ZXh0KToKKyAgICAgICAgIiIiCisgICAgICAgIEVzY2FwZSBzdHJpbmcgdG8gYmUgY29uZm9ybSBIVE1MCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5yZXBsYWNlKHRleHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnJicsICcmYW1wOycpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJzwnLCAnJmx0OycgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJz4nLCAnJmd0OycgKSApCisgICAgZGVmIGNyZWF0ZU5hdmlnYXRvcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSB0aGUgbmF2Z2lhdG9yCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gIiIiPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0iZyIgaHJlZj0iaW5kZXguaHRtbCI+SG9tZTwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYWxsX2dyb3Vwcy5odG1sIj5Hcm91cHM8L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImFsbF9rZXlzLmh0bWwiPktleXM8L2E+PC90ZD4KKzwvdHI+PC90YWJsZT4KKyIiIgorCisgICAgZGVmIHJlbGF0ZWRLZXlzKHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIEhUTUwgdG8gbGluayB0byBmb3JlaWduIGtleXMKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbGVuKGl0ZW0ucmVsYXRlZCgpKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuICIiCisKKyAgICAgICAgdHh0ID0gIjxwPjxiPlNlZSBhbHNvOjwvYj48YnI+IgorICAgICAgICB0eHRzID0gW10KKyAgICAgICAgZm9yIGl0IGluIGl0ZW0ucmVsYXRlZCgpOgorICAgICAgICAgICAgdHh0cy5hcHBlbmQoIiIiPGEgaHJlZj0ia2V5JShpdClzLmh0bWwiPiUoaXQpczwvYT4iIiIgJSB2YXJzKCkgKQorCisgICAgICAgIHJldHVybiB0eHQgKyAiLCIuam9pbih0eHRzKQorCisgICAgZGVmIGdyb3VwcyhzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBIVE1MIHRvIGxpbmsgdG8gcmVsYXRlZCBncm91cHMKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbGVuKGl0ZW0uZ3JvdXBzKCkpID09IDA6CisgICAgICAgICAgICByZXR1cm4gIiIKKworCisgICAgICAgIHR4dCA9ICI8cD48Yj5TZWUgYWxzbzo8L2I+PGJyPiIKKyAgICAgICAgdHh0cyA9IFtdCisgICAgICAgIGZvciBncm91cCBpbiBpdGVtLmdyb3VwcygpOgorICAgICAgICAgICAgdHh0cy5hcHBlbmQoICIiIjxhIGhyZWY9Imdyb3VwJXMuaHRtbCI+JXM8L2E+ICIiIiAlIChncm91cCwgZ3JvdXApICkKKworICAgICAgICByZXR1cm4gdHh0ICsgIiwiLmpvaW4odHh0cykKKworCisgICAgZGVmIGNyZWF0ZUtleVNpdGUoc2VsZiwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgYSBzaXRlIGZvciBhIGtleS4gSXQgY29udGFpbnMgdGhlIGhlYWRlci9uYXZpZ2F0b3IsIGEgaGVhZGluZywKKyAgICAgICAgdGhlIGRlc2NyaXB0aW9uLCBsaW5rcyB0byByZWxhdGVkIGtleXMgYW5kIHRvIHRoZSBncm91cHMuCisgICAgICAgICIiIgorCisgICAgICAgIHJldHVybiAiIiI8IWRvY3R5cGUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+PGhlYWQ+PHRpdGxlPktleSAlczwvdGl0bGU+PC9oZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKyVzCis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPiVzPC9zcGFuPjwvaDI+CisKKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxoMj5TeW5vcHNpczwvaDI+Cis8cD4KKyVzCis8L3A+Cis8L2Rpdj4KKworPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGgyPlJlbGF0ZWQgS2V5czwvaDI+Cis8cD4KKyVzCis8L3A+Cis8L2Rpdj4KKworPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGgyPkdyb3VwczwvaDI+Cis8cD4KKyVzCis8L3A+Cis8L2Rpdj4KKworCis8L2JvZHk+CisiIiIgICAgICUgKGl0ZW0ubmFtZSgpLCBzZWxmLmNyZWF0ZU5hdmlnYXRvcigpLCBpdGVtLm5hbWUoKSwgCisgICAgICAgICAgIHNlbGYuZXNjYXBlKGl0ZW0uZGVzY3JpcHRpb24oKSksIHNlbGYucmVsYXRlZEtleXMoaXRlbSksIHNlbGYuZ3JvdXBzKGl0ZW0pKQorCisgICAgZGVmIGNyZWF0ZUdyb3Vwc1NpdGUoc2VsZiwgZG9jKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSB0aGUgR3JvdXAgT3ZlcnZpZXcgc2l0ZQorICAgICAgICAiIiIKKworICAgICAgICBncm91cHMgPSAiIgorICAgICAgICBzb3J0ZWRfZ3JvdXBzID0gc29ydGVkKGRvYy5ncm91cHMoKSkKKyAgICAgICAgZm9yIGdyb3VwIGluIHNvcnRlZF9ncm91cHM6CisgICAgICAgICAgICBncm91cHMgKz0gIiIiPGEgaHJlZj0iZ3JvdXAlcy5odG1sIj4lczwvYT48YnI+IiIiICUgKGdyb3VwLCBncm91cCkKKworICAgICAgICByZXR1cm4gIiIiPCFkb2N0eXBlIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPjxoZWFkPjx0aXRsZT5Hcm91cCBvdmVydmlldzwvdGl0bGU+PC9oZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKyVzCis8aDI+QXZhaWxhYmxlIEdyb3VwczwvaDI+CislcworPC9ib2R5PgorIiIiICUgKHNlbGYuY3JlYXRlTmF2aWdhdG9yKCksIGdyb3VwcykKKworICAgIGRlZiBjcmVhdGVJbmRleChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSB0aGUgaW5kZXggZmlsZQorICAgICAgICAiIiIKKworICAgICAgICByZXR1cm4gIiIiPCFkb2N0eXBlIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPjxoZWFkPjx0aXRsZT5CaXRiYWtlIERvY3VtZW50YXRpb248L3RpdGxlPjwvaGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+CislcworPGgyPkRvY3VtZW50YXRpb24gRW50cmFuY2U8L2gyPgorPGEgaHJlZj0iYWxsX2dyb3Vwcy5odG1sIj5BbGwgYXZhaWxhYmxlIGdyb3VwczwvYT48YnI+Cis8YSBocmVmPSJhbGxfa2V5cy5odG1sIj5BbGwgYXZhaWxhYmxlIGtleXM8L2E+PGJyPgorPC9ib2R5PgorIiIiICUgc2VsZi5jcmVhdGVOYXZpZ2F0b3IoKQorCisgICAgZGVmIGNyZWF0ZUtleXNTaXRlKHNlbGYsIGRvYyk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgT3ZlcnZpZXcgb2YgYWxsIGF2aWxhYmxlIGtleXMKKyAgICAgICAgIiIiCisgICAgICAgIGtleXMgPSAiIgorICAgICAgICBzb3J0ZWRfa2V5cyA9IHNvcnRlZChkb2MuZG9jX2tleXMoKSkKKyAgICAgICAgZm9yIGtleSBpbiBzb3J0ZWRfa2V5czoKKyAgICAgICAgICAgIGtleXMgKz0gIiIiPGEgaHJlZj0ia2V5JXMuaHRtbCI+JXM8L2E+PGJyPiIiIiAlIChrZXksIGtleSkKKworICAgICAgICByZXR1cm4gIiIiPCFkb2N0eXBlIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPjxoZWFkPjx0aXRsZT5LZXkgb3ZlcnZpZXc8L3RpdGxlPjwvaGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+CislcworPGgyPkF2YWlsYWJsZSBLZXlzPC9oMj4KKyVzCis8L2JvZHk+CisiIiIgJSAoc2VsZi5jcmVhdGVOYXZpZ2F0b3IoKSwga2V5cykKKworICAgIGRlZiBjcmVhdGVHcm91cFNpdGUoc2VsZiwgZ3IsIGl0ZW1zLCBfZGVzY3JpcHRpb24gPSBOb25lKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIHNpdGUgZm9yIGEgZ3JvdXA6CisgICAgICAgIEdyb3VwIHRoZSBuYW1lIG9mIHRoZSBncm91cCwgaXRlbXMgY29udGFpbiB0aGUgbmFtZSBvZiB0aGUga2V5cworICAgICAgICBpbnNpZGUgdGhpcyBncm91cAorICAgICAgICAiIiIKKyAgICAgICAgZ3JvdXBzID0gIiIKKyAgICAgICAgZGVzY3JpcHRpb24gPSAiIgorCisgICAgICAgICMgY3JlYXRlIGEgc2VjdGlvbiB3aXRoIHRoZSBncm91cCBkZXNjcmlwdGlvbnMKKyAgICAgICAgaWYgX2Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgZGVzY3JpcHRpb24gICs9ICI8aDIgRGVzY3JpcHRpb24gb2YgR3JvenAgJXM8L2gyPiIgJSBncgorICAgICAgICAgICAgZGVzY3JpcHRpb24gICs9IF9kZXNjcmlwdGlvbgorCisgICAgICAgIGl0ZW1zLnNvcnQobGFtYmRhIHgsIHk6Y21wKHgubmFtZSgpLCB5Lm5hbWUoKSkpCisgICAgICAgIGZvciBncm91cCBpbiBpdGVtczoKKyAgICAgICAgICAgIGdyb3VwcyArPSAiIiI8YSBocmVmPSJrZXklcy5odG1sIj4lczwvYT48YnI+IiIiICUgKGdyb3VwLm5hbWUoKSwgZ3JvdXAubmFtZSgpKQorCisgICAgICAgIHJldHVybiAiIiI8IWRvY3R5cGUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+PGhlYWQ+PHRpdGxlPkdyb3VwICVzPC90aXRsZT48L2hlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorJXMKKyVzCis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8aDI+S2V5cyBpbiBHcm91cCAlczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CislcworPC9wcmU+Cis8L2Rpdj4KKzwvYm9keT4KKyIiIiAlIChnciwgc2VsZi5jcmVhdGVOYXZpZ2F0b3IoKSwgZGVzY3JpcHRpb24sIGdyLCBncm91cHMpCisKKworCisgICAgZGVmIGNyZWF0ZUNTUyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSB0aGUgQ1NTIGZpbGUKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiIiIuc3lub3BzaXMsIC5jbGFzc3N5bm9wc2lzCit7CisgIGJhY2tncm91bmQ6ICNlZWVlZWU7CisgIGJvcmRlcjogc29saWQgMXB4ICNhYWFhYWE7CisgIHBhZGRpbmc6IDAuNWVtOworfQorLnByb2dyYW1saXN0aW5nCit7CisgIGJhY2tncm91bmQ6ICNlZWVlZmY7CisgIGJvcmRlcjogc29saWQgMXB4ICNhYWFhZmY7CisgIHBhZGRpbmc6IDAuNWVtOworfQorLnZhcmlhYmxlbGlzdAoreworICBwYWRkaW5nOiA0cHg7CisgIG1hcmdpbi1sZWZ0OiAzZW07Cit9CisudmFyaWFibGVsaXN0IHRkOmZpcnN0LWNoaWxkCit7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9Cit0YWJsZS5uYXZpZ2F0aW9uCit7CisgIGJhY2tncm91bmQ6ICNmZmVlZWU7CisgIGJvcmRlcjogc29saWQgMXB4ICNmZmFhYWE7CisgIG1hcmdpbi10b3A6IDAuNWVtOworICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKK30KKy5uYXZpZ2F0aW9uIGEKK3sKKyAgY29sb3I6ICM3NzAwMDA7Cit9CisubmF2aWdhdGlvbiBhOnZpc2l0ZWQKK3sKKyAgY29sb3I6ICM1NTAwMDA7Cit9CisubmF2aWdhdGlvbiAudGl0bGUKK3sKKyAgZm9udC1zaXplOiAyMDAlOworfQorZGl2LnJlZm5hbWVkaXYKK3sKKyAgbWFyZ2luLXRvcDogMmVtOworfQorZGl2LmdhbGxlcnktZmxvYXQKK3sKKyAgZmxvYXQ6IGxlZnQ7CisgIHBhZGRpbmc6IDEwcHg7Cit9CitkaXYuZ2FsbGVyeS1mbG9hdCBpbWcKK3sKKyAgYm9yZGVyLXN0eWxlOiBub25lOworfQorZGl2LmdhbGxlcnktc3BhY2VyCit7CisgIGNsZWFyOiBib3RoOworfQorYQoreworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CithOmhvdmVyCit7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBjb2xvcjogI0ZGMDAwMDsKK30KKyIiIgorCisKKworY2xhc3MgRG9jdW1lbnRhdGlvbkl0ZW06CisgICAgIiIiCisgICAgQSBjbGFzcyB0byBob2xkIGluZm9ybWF0aW9uIGFib3V0IGEgY29uZmlndXJhdGlvbgorICAgIGl0ZW0uIEl0IGNvbnRhaW5zIHRoZSBrZXkgbmFtZSwgZGVzY3JpcHRpb24sIGEgbGlzdCBvZiByZWxhdGVkIG5hbWVzLAorICAgIGFuZCB0aGUgZ3JvdXAgdGhpcyBpdGVtIGlzIGNvbnRhaW5lZCBpbi4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fZ3JvdXBzICA9IFtdCisgICAgICAgIHNlbGYuX3JlbGF0ZWQgPSBbXQorICAgICAgICBzZWxmLl9uYW1lICAgID0gIiIKKyAgICAgICAgc2VsZi5fZGVzYyAgICA9ICIiCisKKyAgICBkZWYgZ3JvdXBzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZ3JvdXBzCisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiBkZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Rlc2MKKworICAgIGRlZiByZWxhdGVkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVsYXRlZAorCisgICAgZGVmIHNldE5hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisKKyAgICBkZWYgc2V0RGVzY3JpcHRpb24oc2VsZiwgZGVzYyk6CisgICAgICAgIHNlbGYuX2Rlc2MgPSBkZXNjCisKKyAgICBkZWYgYWRkR3JvdXAoc2VsZiwgZ3JvdXApOgorICAgICAgICBzZWxmLl9ncm91cHMuYXBwZW5kKGdyb3VwKQorCisgICAgZGVmIGFkZFJlbGF0aW9uKHNlbGYsIHJlbGF0aW9uKToKKyAgICAgICAgc2VsZi5fcmVsYXRlZC5hcHBlbmQocmVsYXRpb24pCisKKyAgICBkZWYgc29ydChzZWxmKToKKyAgICAgICAgc2VsZi5fcmVsYXRlZC5zb3J0KCkKKyAgICAgICAgc2VsZi5fZ3JvdXBzLnNvcnQoKQorCisKK2NsYXNzIERvY3VtZW50YXRpb246CisgICAgIiIiCisgICAgSG9sZHMgdGhlIGRvY3VtZW50YXRpb24uLi4gd2l0aCBtYXBwaW5ncyBmcm9tIGtleSB0byBpdGVtcy4uLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9fa2V5cyAgID0ge30KKyAgICAgICAgc2VsZi5fX2dyb3VwcyA9IHt9CisKKyAgICBkZWYgaW5zZXJ0X2RvY19pdGVtKHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiIKKyAgICAgICAgSW5zZXJ0IHRoZSBEb2MgSXRlbSBpbnRvIHRoZSBpbnRlcm5hbCBsaXN0CisgICAgICAgIG9mIHJlcHJlc2VudGF0aW9uCisgICAgICAgICIiIgorICAgICAgICBpdGVtLnNvcnQoKQorICAgICAgICBzZWxmLl9fa2V5c1tpdGVtLm5hbWUoKV0gPSBpdGVtCisKKyAgICAgICAgZm9yIGdyb3VwIGluIGl0ZW0uZ3JvdXBzKCk6CisgICAgICAgICAgICBpZiBub3QgZ3JvdXAgaW4gc2VsZi5fX2dyb3VwczoKKyAgICAgICAgICAgICAgICBzZWxmLl9fZ3JvdXBzW2dyb3VwXSA9IFtdCisgICAgICAgICAgICBzZWxmLl9fZ3JvdXBzW2dyb3VwXS5hcHBlbmQoaXRlbSkKKyAgICAgICAgICAgIHNlbGYuX19ncm91cHNbZ3JvdXBdLnNvcnQoKQorCisKKyAgICBkZWYgZG9jX2l0ZW0oc2VsZiwga2V5KToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgRG9jdW1lbnRhdGlvbkluc3RhbmNlIGRlc2NyaWJpbmcgdGhlIGtleQorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19rZXlzW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBkb2Nfa2V5cyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgZG9jdW1lbnRlZCBLRVlTIChuYW1lcykKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9fa2V5cy5rZXlzKCkKKworICAgIGRlZiBncm91cHMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIG5hbWVzIG9mIGF2YWlsYWJsZSBncm91cHMKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9fZ3JvdXBzLmtleXMoKQorCisgICAgZGVmIGdyb3VwX2NvbnRlbnQoc2VsZiwgZ3JvdXBfbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIGtleXMvbmFtZXMgdGhhdCBhcmUgaW4gYSBzcGVjZWZpYworICAgICAgICBncm91cCBvciB0aGUgZW1wdHkgbGlzdAorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19ncm91cHNbZ3JvdXBfbmFtZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIFtdCisKKworZGVmIHBhcnNlX2NtZGxpbmUoYXJncyk6CisgICAgIiIiCisgICAgUGFyc2UgdGhlIENNRCBsaW5lIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIG4tdHVwbGUKKyAgICAiIiIKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlciggdmVyc2lvbiA9ICJCaXRiYWtlIERvY3VtZW50YXRpb24gVG9vbCBDb3JlIHZlcnNpb24gJXMsICUlcHJvZyB2ZXJzaW9uICVzIiAlIChiYi5fX3ZlcnNpb25fXywgX192ZXJzaW9uX18pKQorICAgIHVzYWdlICA9ICIiIiVwcm9nIFtvcHRpb25zXQorCitDcmVhdGUgYSBzZXQgb2YgaHRtbCBwYWdlcyAoZG9jdW1lbnRhdGlvbikgZm9yIGEgYml0YmFrZS5jb25mLi4uLgorIiIiCisKKyAgICAjIEFkZCB0aGUgbmVlZGVkIG9wdGlvbnMKKyAgICBwYXJzZXIuYWRkX29wdGlvbiggIi1jIiwgIi0tY29uZmlnIiwgaGVscCA9ICJVc2UgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIGZpbGUgYXMgc291cmNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJjb25maWciLCBkZWZhdWx0ID0gb3MucGF0aC5qb2luKCJjb25mIiwgImRvY3VtZW50YXRpb24uY29uZiIpICkKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCAiLW8iLCAiLS1vdXRwdXQiLCBoZWxwID0gIk91dHB1dCBkaXJlY3RvcnkgZm9yIGh0bWwgZmlsZXMiLAorICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gIm91dHB1dCIsIGRlZmF1bHQgPSAiaHRtbC8iICkKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCAiLUQiLCAgIi0tZGVidWciLCBoZWxwID0gIkluY3JlYXNlIHRoZSBkZWJ1ZyBsZXZlbCIsCisgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJjb3VudCIsIGRlc3QgPSAiZGVidWciLCBkZWZhdWx0ID0gMCApCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbiggIi12IiwgIi0tdmVyYm9zZSIsIGhlbHAgPSAib3V0cHV0IG1vcmUgY2hpdC1jaGFyIHRvIHRoZSB0ZXJtaW5hbCIsCisgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJ2ZXJib3NlIiwgZGVmYXVsdCA9IEZhbHNlICkKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyggc3lzLmFyZ3YgKQorIAorICAgIGJiLm1zZy5pbml0X21zZ2NvbmZpZyhvcHRpb25zLnZlcmJvc2UsIG9wdGlvbnMuZGVidWcpCisKKyAgICByZXR1cm4gb3B0aW9ucy5jb25maWcsIG9wdGlvbnMub3V0cHV0CisKK2RlZiBtYWluKCk6CisgICAgIiIiCisgICAgVGhlIG1haW4gTWV0aG9kCisgICAgIiIiCisKKyAgICAoY29uZmlnX2ZpbGUsIG91dHB1dF9kaXIpID0gcGFyc2VfY21kbGluZSggc3lzLmFyZ3YgKQorCisgICAgIyByaWdodCB0byBsZXQgdXMgbG9hZCB0aGUgZmlsZSBub3cKKyAgICB0cnk6CisgICAgICAgIGRvY3VtZW50YXRpb24gPSBiYi5wYXJzZS5oYW5kbGUoIGNvbmZpZ19maWxlLCBiYi5kYXRhLmluaXQoKSApCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGJiLmZhdGFsKCAiVW5hYmxlIHRvIG9wZW4gJXMiICUgY29uZmlnX2ZpbGUgKQorICAgIGV4Y2VwdCBiYi5wYXJzZS5QYXJzZUVycm9yOgorICAgICAgICBiYi5mYXRhbCggIlVuYWJsZSB0byBwYXJzZSAlcyIgJSBjb25maWdfZmlsZSApCisKKyAgICBpZiBpc2luc3RhbmNlKGRvY3VtZW50YXRpb24sIGRpY3QpOgorICAgICAgICBkb2N1bWVudGF0aW9uID0gZG9jdW1lbnRhdGlvblsiIl0KKworICAgICMgQXNzdW1pbmcgd2UndmUgdGhlIGZpbGUgbG9hZGVkIG5vdywgd2Ugd2lsbCBpbml0aWFsaXplIHRoZSAndHJlZScKKyAgICBkb2MgPSBEb2N1bWVudGF0aW9uKCkKKworICAgICMgZGVmaW5lZCBzdGF0ZXMKKyAgICBzdGF0ZV9iZWdpbiA9IDAKKyAgICBzdGF0ZV9zZWUgICA9IDEKKyAgICBzdGF0ZV9ncm91cCA9IDIKKworICAgIGZvciBrZXkgaW4gYmIuZGF0YS5rZXlzKGRvY3VtZW50YXRpb24pOgorICAgICAgICBkYXRhICAgPSBkb2N1bWVudGF0aW9uLmdldFZhckZsYWcoa2V5LCAiZG9jIikKKyAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICMgVGhlIERvY3VtZW50YXRpb24gbm93IHN0YXJ0cworICAgICAgICBkb2NfaW5zID0gRG9jdW1lbnRhdGlvbkl0ZW0oKQorICAgICAgICBkb2NfaW5zLnNldE5hbWUoa2V5KQorCisKKyAgICAgICAgdG9rZW5zID0gZGF0YS5zcGxpdCgnICcpCisgICAgICAgIHN0YXRlID0gc3RhdGVfYmVnaW4KKyAgICAgICAgc3RyaW5nPSAiIgorICAgICAgICBmb3IgdG9rZW4gaW4gdG9rZW5zOgorICAgICAgICAgICAgdG9rZW4gPSB0b2tlbi5zdHJpcCgnLCcpCisKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0ZSA9PSBzdGF0ZV9zZWUgYW5kIHRva2VuID09ICJAc2VlIjoKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlX3NlZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGlmIG5vdCBzdGF0ZSA9PSBzdGF0ZV9ncm91cCBhbmQgdG9rZW4gID09ICJAZ3JvdXAiOgorICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVfZ3JvdXAKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBzdGF0ZSA9PSBzdGF0ZV9iZWdpbjoKKyAgICAgICAgICAgICAgICBzdHJpbmcgKz0gIiAlcyIgJSB0b2tlbgorICAgICAgICAgICAgZWxpZiBzdGF0ZSA9PSBzdGF0ZV9zZWU6CisgICAgICAgICAgICAgICAgZG9jX2lucy5hZGRSZWxhdGlvbih0b2tlbikKKyAgICAgICAgICAgIGVsaWYgc3RhdGUgPT0gc3RhdGVfZ3JvdXA6CisgICAgICAgICAgICAgICAgZG9jX2lucy5hZGRHcm91cCh0b2tlbikKKworICAgICAgICAjIHNldCB0aGUgZGVzY3JpcHRpb24KKyAgICAgICAgZG9jX2lucy5zZXREZXNjcmlwdGlvbihzdHJpbmcpCisgICAgICAgIGRvYy5pbnNlcnRfZG9jX2l0ZW0oZG9jX2lucykKKworICAgICMgbGV0IHVzIGNyZWF0ZSB0aGUgSFRNTCBub3cKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3V0cHV0X2RpcikKKyAgICBvcy5jaGRpcihvdXRwdXRfZGlyKQorCisgICAgIyBMZXQgdXMgY3JlYXRlIHRoZSBzaXRlcyBub3cuIFdlIGRvIGl0IGluIHRoZSBmb2xsb3dpbmcgb3JkZXIKKyAgICAjIFN0YXJ0IHdpdGggdGhlIGluZGV4Lmh0bWwuIEl0IHdpbGwgcG9pbnQgdG8gc2l0ZXMgZXhwbGFpbmluZyBhbGwKKyAgICAjIGtleXMgYW5kIGdyb3VwcworICAgIGh0bWxfc2xhdmUgPSBIVE1MRm9ybWF0dGVyKCkKKworICAgIGYgPSBmaWxlKCdzdHlsZS5jc3MnLCAndycpCisgICAgcHJpbnQgPj4gZiwgaHRtbF9zbGF2ZS5jcmVhdGVDU1MoKQorCisgICAgZiA9IGZpbGUoJ2luZGV4Lmh0bWwnLCAndycpCisgICAgcHJpbnQgPj4gZiwgaHRtbF9zbGF2ZS5jcmVhdGVJbmRleCgpCisKKyAgICBmID0gZmlsZSgnYWxsX2dyb3Vwcy5odG1sJywgJ3cnKQorICAgIHByaW50ID4+IGYsIGh0bWxfc2xhdmUuY3JlYXRlR3JvdXBzU2l0ZShkb2MpCisKKyAgICBmID0gZmlsZSgnYWxsX2tleXMuaHRtbCcsICd3JykKKyAgICBwcmludCA+PiBmLCBodG1sX3NsYXZlLmNyZWF0ZUtleXNTaXRlKGRvYykKKworICAgICMgbm93IGZvciBlYWNoIGdyb3VwIGNyZWF0ZSB0aGUgc2l0ZQorICAgIGZvciBncm91cCBpbiBkb2MuZ3JvdXBzKCk6CisgICAgICAgIGYgPSBmaWxlKCdncm91cCVzLmh0bWwnICUgZ3JvdXAsICd3JykKKyAgICAgICAgcHJpbnQgPj4gZiwgaHRtbF9zbGF2ZS5jcmVhdGVHcm91cFNpdGUoZ3JvdXAsIGRvYy5ncm91cF9jb250ZW50KGdyb3VwKSkKKworICAgICMgbm93IGZvciB0aGUga2V5cworICAgIGZvciBrZXkgaW4gZG9jLmRvY19rZXlzKCk6CisgICAgICAgIGYgPSBmaWxlKCdrZXklcy5odG1sJyAlIGRvYy5kb2NfaXRlbShrZXkpLm5hbWUoKSwgJ3cnKQorICAgICAgICBwcmludCA+PiBmLCBodG1sX3NsYXZlLmNyZWF0ZUtleVNpdGUoZG9jLmRvY19pdGVtKGtleSkpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vaW1hZ2Utd3JpdGVyIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9pbWFnZS13cml0ZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2Q3MTE2NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vaW1hZ2Utd3JpdGVyCkBAIC0wLDAgKzEsMTIyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKGMpIDIwMTIgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSksICdsaWInKSkKK3RyeToKKyAgICBpbXBvcnQgYmIKK2V4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXhjOgorICAgIHN5cy5leGl0KHN0cihleGMpKQorCitpbXBvcnQgZ3RrCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBweWd0aworCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IEhvYkFsdEJ1dHRvbiwgSG9iQnV0dG9uCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzbWVzc2FnZWRpYWxvZyBpbXBvcnQgQ3J1bWJzTWVzc2FnZURpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmRlcGxveWltYWdlZGlhbG9nIGltcG9ydCBEZXBsb3lJbWFnZURpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmltYWdlc2VsZWN0aW9uZGlhbG9nIGltcG9ydCBJbWFnZVNlbGVjdGlvbkRpYWxvZworCisjIEkgcHV0IGFsbCB0aGUgZnMgYml0YmFrZSBzdXBwb3J0ZWQgaGVyZS4gTmVlZCBtb3JlIHRlc3QuCitERVBMT1lBQkxFX0lNQUdFX1RZUEVTID0gWyJqZmZzMiIsICJjcmFtZnMiLCAiZXh0MiIsICJleHQzIiwgImV4dDQiLCAiYnRyZnMiLCAic3F1YXNoZnMiLCAidWJpIiwgInZtZGsiXQorVGl0bGUgPSAiVVNCIEltYWdlIFdyaXRlciIKKworY2xhc3MgRGVwbG95V2luZG93KGd0ay5XaW5kb3cpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbWFnZV9wYXRoPScnKToKKyAgICAgICAgc3VwZXIoRGVwbG95V2luZG93LCBzZWxmKS5fX2luaXRfXygpCisKKyAgICAgICAgaWYgbGVuKGltYWdlX3BhdGgpID4gMDoKKyAgICAgICAgICAgIHZhbGlkID0gVHJ1ZQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGltYWdlX3BhdGgpOgorICAgICAgICAgICAgICAgIHZhbGlkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBsYmwgPSAiPGI+SW52YWxpZCBpbWFnZSBmaWxlIHBhdGg6ICVzLjwvYj5cblByZXNzIDxiPlNlbGVjdCBJbWFnZTwvYj4gdG8gc2VsZWN0IGFuIGltYWdlLiIgJSBpbWFnZV9wYXRoCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGltYWdlX3BhdGggPSBvcy5wYXRoLmFic3BhdGgoaW1hZ2VfcGF0aCkKKyAgICAgICAgICAgICAgICBleHRlbmRfbmFtZSA9IG9zLnBhdGguc3BsaXRleHQoaW1hZ2VfcGF0aClbMV1bMTpdCisgICAgICAgICAgICAgICAgaWYgZXh0ZW5kX25hbWUgbm90IGluIERFUExPWUFCTEVfSU1BR0VfVFlQRVM6CisgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgbGJsID0gIjxiPlVuZGVwbG95YWJsZSBpbWdlIHR5cGU6ICVzPC9iPlxuUHJlc3MgPGI+U2VsZWN0IEltYWdlPC9iPiB0byBzZWxlY3QgYW4gaW1hZ2UuIiAlIGV4dGVuZF9uYW1lCisKKyAgICAgICAgICAgIGlmIG5vdCB2YWxpZDoKKyAgICAgICAgICAgICAgICBpbWFnZV9wYXRoID0gJycKKyAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5TVE9DS19ESUFMT0dfSU5GTykKKyAgICAgICAgICAgICAgICBidXR0b24gPSBjcnVtYnNfZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cucnVuKCkKKyAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nLmRlc3Ryb3koKQorCisgICAgICAgIHNlbGYuZGVwbG95X2RpYWxvZyA9IERlcGxveUltYWdlRGlhbG9nKFRpdGxlLCBpbWFnZV9wYXRoLCBzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0ay5ESUFMT0dfTU9EQUwgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfTk9fU0VQQVJBVE9SLCBOb25lLCBzdGFuZGFsb25lPVRydWUpCisgICAgICAgIGNsb3NlX2J1dHRvbiA9IHNlbGYuZGVwbG95X2RpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9OTykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihjbG9zZV9idXR0b24pCisgICAgICAgIGNsb3NlX2J1dHRvbi5jb25uZWN0KCdjbGlja2VkJywgZ3RrLm1haW5fcXVpdCkKKworICAgICAgICB3cml0ZV9idXR0b24gPSBzZWxmLmRlcGxveV9kaWFsb2cuYWRkX2J1dHRvbigiV3JpdGUgVVNCIGltYWdlIiwgZ3RrLlJFU1BPTlNFX1lFUykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbih3cml0ZV9idXR0b24pCisKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlhbG9nLmNvbm5lY3QoJ3NlbGVjdF9pbWFnZV9jbGlja2VkJywgc2VsZi5zZWxlY3RfaW1hZ2VfY2xpY2tlZF9jYikKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlhbG9nLmNvbm5lY3QoJ2Rlc3Ryb3knLCBndGsubWFpbl9xdWl0KQorICAgICAgICByZXNwb25zZSA9IHNlbGYuZGVwbG95X2RpYWxvZy5zaG93KCkKKworICAgIGRlZiBzZWxlY3RfaW1hZ2VfY2xpY2tlZF9jYihzZWxmLCBkaWFsb2cpOgorICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQorICAgICAgICBkaWFsb2cgPSBJbWFnZVNlbGVjdGlvbkRpYWxvZyhjd2QsIERFUExPWUFCTEVfSU1BR0VfVFlQRVMsIFRpdGxlLCBzZWxmLCBndGsuRklMRV9DSE9PU0VSX0FDVElPTl9TQVZFICkKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9OTykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJPcGVuIiwgZ3RrLlJFU1BPTlNFX1lFUykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIGlmIG5vdCBkaWFsb2cuaW1hZ2VfbmFtZXM6CisgICAgICAgICAgICAgICAgbGJsID0gIjxiPk5vIHNlbGVjdGlvbnMgbWFkZTwvYj5cbkNsaWNrZWQgdGhlIHJhZGlvIGJ1dHRvbiB0byBzZWxlY3QgYSBpbWFnZS4iCisgICAgICAgICAgICAgICAgY3J1bWJzX2RpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuU1RPQ0tfRElBTE9HX0lORk8pCisgICAgICAgICAgICAgICAgYnV0dG9uID0gY3J1bWJzX2RpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nLnJ1bigpCisgICAgICAgICAgICAgICAgY3J1bWJzX2RpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICMgZ2V0IHRoZSBmdWxsIHBhdGggb2YgaW1hZ2UKKyAgICAgICAgICAgIGltYWdlX3BhdGggPSBvcy5wYXRoLmpvaW4oZGlhbG9nLmltYWdlX2ZvbGRlciwgZGlhbG9nLmltYWdlX25hbWVzWzBdKQorICAgICAgICAgICAgc2VsZi5kZXBsb3lfZGlhbG9nLnNldF9pbWFnZV90ZXh0X2J1ZmZlcihpbWFnZV9wYXRoKQorICAgICAgICAgICAgc2VsZi5kZXBsb3lfZGlhbG9nLnNldF9pbWFnZV9wYXRoKGltYWdlX3BhdGgpCisKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKKyAgICAgICAgICAgICAgICB1c2FnZSA9ICIiIiVwcm9nIFstaF0gW2ltYWdlX2ZpbGVdCisKKyVwcm9nIHdyaXRlcyBib290YWJsZSBpbWFnZXMgdG8gVVNCIGRldmljZXMuIFlvdSBjYW4KK3Byb3ZpZGUgdGhlIGltYWdlIGZpbGUgb24gdGhlIGNvbW1hbmQgbGluZSBvciBzZWxlY3QgaXQgdXNpbmcgdGhlIEdVSS4iIiIpCisKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisgICAgaW1hZ2VfZmlsZSA9IGFyZ3NbMV0gaWYgbGVuKGFyZ3MpID4gMSBlbHNlICcnCisgICAgZHcgPSBEZXBsb3lXaW5kb3coaW1hZ2VfZmlsZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0cnk6CisgICAgICAgIG1haW4oKQorICAgICAgICBndGsubWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvYmluL3RvYXN0ZXIgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL3RvYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDExY2UyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vdG9hc3RlcgpAQCAtMCwwICsxLDM1MiBAQAorIyEvYmluL3NoCisjIChjKSAyMDEzIEludGVsIENvcnAuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisKKyMgVGhpcyBzY3JpcHQgY2FuIGJlIHJ1biBpbiB0d28gbW9kZXMuCisKKyMgV2hlbiB1c2VkIHdpdGggInNvdXJjZSIsIGZyb20gYSBidWlsZCBkaXJlY3RvcnksCisjIGl0IGVuYWJsZXMgdG9hc3RlciBldmVudCBsb2dnaW5nIGFuZCBzdGFydHMgdGhlIGJpdGJha2UgcmVzaWRlbnQgc2VydmVyLgorIyB1c2UgYXM6ICBzb3VyY2UgdG9hc3RlciBbc3RhcnR8c3RvcF0gW25vd2ViXSBbbm91aV0KKworIyBXaGVuIGl0IGlzIGNhbGxlZCBhcyBhIHN0YW5kLWFsb25lIHNjcmlwdCwgaXQgc3RhcnRzIGp1c3QgdGhlCisjIHdlYiBzZXJ2ZXIsIGFuZCB0aGUgYnVpbGRpbmcgc2hhbGwgYmUgZG9uZSB0aHJvdWdoIHRoZSB3ZWIgaW50ZXJmYWNlLgorIyBBcyBzY3JpcHQsIGl0IHdpbGwgbm90IHJldHVybiB0byB0aGUgY29tbWFuZCBwcm9tcHQuIFN0b3Agd2l0aCBDdHJsLUMuCisKKyMgSGVscGVyIGZ1bmN0aW9uIHRvIGtpbGwgYSBiYWNrZ3JvdW5kIHRvYXN0ZXIgZGV2ZWxvcG1lbnQgc2VydmVyCisKK3dlYnNlcnZlcktpbGxBbGwoKQoreworICAgIGxvY2FsIHBpZGZpbGUKKyAgICBmb3IgcGlkZmlsZSBpbiAke0JVSUxERElSfS8udG9hc3Rlcm1haW4ucGlkOyBkbworICAgICAgICBpZiBbIC1mICR7cGlkZmlsZX0gXTsgdGhlbgorICAgICAgICAgICAgcGlkPWBjYXQgJHtwaWRmaWxlfWAKKyAgICAgICAgICAgIHdoaWxlIGtpbGwgLTAgJHBpZCAyPi9kZXYvbnVsbDsgZG8KKyAgICAgICAgICAgICAgICBraWxsIC1TSUdURVJNIC0kcGlkIDI+L2Rldi9udWxsCisgICAgICAgICAgICAgICAgc2xlZXAgMQorICAgICAgICAgICAgICAgICMgS2lsbCBwcm9jZXNzZXMgaWYgdGhleSBhcmUgc3RpbGwgcnVubmluZyAtIG1heSBoYXBwZW4gaW4gaW50ZXJhY3RpdmUgc2hlbGxzCisgICAgICAgICAgICAgICAgcHMgZnV4IHwgZ3JlcCAicHl0aG9uLiptYW5hZ2UucHkgcnVuc2VydmVyIiB8IGF3ayAne3ByaW50ICQyfScgfCB4YXJncyBraWxsCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBybSAgJHtwaWRmaWxlfQorICAgICAgICBmaQorICAgIGRvbmUKK30KKword2Vic2VydmVyU3RhcnRBbGwoKQoreworICAgICMgZG8gbm90IHN0YXJ0IGlmIHRvYXN0ZXJtYWluIHBvaW50cyB0byBhIHZhbGlkIHByb2Nlc3MKKyAgICBpZiAhIGNhdCAiJHtCVUlMRERJUn0vLnRvYXN0ZXJtYWluLnBpZCIgMj4vZGV2L251bGwgfCB4YXJncyAtSXt9IGtpbGwgLTAge30gOyB0aGVuCisgICAgICAgIHJldHZhbD0xCisgICAgICAgIHJtICIke0JVSUxERElSfS8udG9hc3Rlcm1haW4ucGlkIgorICAgIGZpCisKKyAgICByZXR2YWw9MAorICAgIGlmIFsgIiRUT0FTVEVSX01BTkFHRUQiICc9JyAnMScgXTsgdGhlbgorICAgICAgICBweXRob24gJEJCQkFTRURJUi9saWIvdG9hc3Rlci9tYW5hZ2UucHkgc3luY2RiIHx8IHJldHZhbD0xCisgICAgZWxzZQorICAgICAgICBweXRob24gJEJCQkFTRURJUi9saWIvdG9hc3Rlci9tYW5hZ2UucHkgc3luY2RiIC0tbm9pbnB1dCB8fCByZXR2YWw9MQorICAgIGZpCisgICAgcHl0aG9uICRCQkJBU0VESVIvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IG1pZ3JhdGUgb3JtIHx8IHJldHZhbD0yCisgICAgaWYgWyAkcmV0dmFsIC1lcSAxIF07IHRoZW4KKyAgICAgICAgZWNobyAiRmFpbGVkIGRiIHN5bmMsIHN0b3BwaW5nIHN5c3RlbSBzdGFydCIgMT4mMgorICAgIGVsaWYgWyAkcmV0dmFsIC1lcSAyIF07IHRoZW4KKyAgICAgICAgcHJpbnRmICJcbkVycm9yIG9uIG1pZ3JhdGlvbiwgdHJ5aW5nIHRvIHJlY292ZXIuLi4gXG4iCisgICAgICAgIHB5dGhvbiAkQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weSBtaWdyYXRlIG9ybSAwMDAxX2luaXRpYWwgLS1mYWtlCisgICAgICAgIHJldHZhbD0wCisgICAgICAgIHB5dGhvbiAkQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weSBtaWdyYXRlIG9ybSB8fCByZXR2YWw9MQorICAgIGZpCisgICAgaWYgWyAiJFRPQVNURVJfTUFOQUdFRCIgPSAnMScgXTsgdGhlbgorICAgICAgICBweXRob24gJEJCQkFTRURJUi9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBibGRjb250cm9sIHx8IHJldHZhbD0xCisgICAgICAgIHB5dGhvbiAkQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weSBjaGVja3NldHRpbmdzICAtLXRyYWNlYmFjayB8fCByZXR2YWw9MQorICAgIGZpCisgICAgaWYgWyAkcmV0dmFsIC1lcSAwIF07IHRoZW4KKyAgICAgICAgZWNobyAiU3RhcnRpbmcgd2Vic2VydmVyLi4uIgorICAgICAgICBweXRob24gJEJCQkFTRURJUi9saWIvdG9hc3Rlci9tYW5hZ2UucHkgcnVuc2VydmVyICIwLjAuMC4wOiRXRUJfUE9SVCIgPC9kZXYvbnVsbCA+PiR7QlVJTERESVJ9L3RvYXN0ZXJfd2ViLmxvZyAyPiYxICYgZWNobyAkISA+JHtCVUlMRERJUn0vLnRvYXN0ZXJtYWluLnBpZAorICAgICAgICBzbGVlcCAxCisgICAgICAgIGlmICEgY2F0ICIke0JVSUxERElSfS8udG9hc3Rlcm1haW4ucGlkIiB8IHhhcmdzIC1Je30ga2lsbCAtMCB7fSA7IHRoZW4KKyAgICAgICAgICAgIHJldHZhbD0xCisgICAgICAgICAgICBybSAiJHtCVUlMRERJUn0vLnRvYXN0ZXJtYWluLnBpZCIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyAiV2Vic2VydmVyIGFkZHJlc3M6ICBodHRwOi8vMC4wLjAuMDokV0VCX1BPUlQvIgorICAgICAgICBmaQorICAgIGZpCisgICAgcmV0dXJuICRyZXR2YWwKK30KKworIyBIZWxwZXIgZnVuY3Rpb25zIHRvIGFkZCBhIHNwZWNpYWwgY29uZmlndXJhdGlvbiBmaWxlCisKK2FkZHRvQ29uZmlndXJhdGlvbigpCit7CisgICAgZmlsZT0kMQorICAgIHNoaWZ0CisgICAgZWNobyAiI0NyZWF0ZWQgYnkgdG9hc3RlciBzdGFydCBzY3JpcHQiID4gJHtCVUlMRERJUn0vY29uZi8kZmlsZQorICAgIGZvciB2YXIgaW4gIiRAIjsgZG8gZWNobyAkdmFyID4+ICR7QlVJTERESVJ9L2NvbmYvJGZpbGU7IGRvbmUKK30KKworSU5TVE9QU1lTVEVNPTAKKworIyBkZWZpbmUgdGhlIHN0b3AgY29tbWFuZAorc3RvcF9zeXN0ZW0oKQoreworICAgICMgcHJldmVudCByZWVudHJ5CisgICAgaWYgWyAkSU5TVE9QU1lTVEVNIC1lcSAxIF07IHRoZW4gcmV0dXJuOyBmaQorICAgIElOU1RPUFNZU1RFTT0xCisgICAgaWYgWyAtZiAke0JVSUxERElSfS8udG9hc3RlcnVpLnBpZCBdOyB0aGVuCisgICAgICAgIGtpbGwgYGNhdCAke0JVSUxERElSfS8udG9hc3RlcnVpLnBpZGAgMj4vZGV2L251bGwKKyAgICAgICAgcm0gJHtCVUlMRERJUn0vLnRvYXN0ZXJ1aS5waWQKKyAgICBmaQorICAgIEJCU0VSVkVSPTAuMC4wLjA6LTEgYml0YmFrZSAtbQorICAgIHVuc2V0IEJCU0VSVkVSCisgICAgd2Vic2VydmVyS2lsbEFsbAorICAgICMgZm9yY2Ugc3RvcCBhbnkgbWlzYmVoYXZpbmcgYml0YmFrZSBzZXJ2ZXIKKyAgICBsc29mIGJpdGJha2UubG9jayB8IGF3ayAne3ByaW50ICQyfScgfCBncmVwICJbMC05XVwrIiB8IHhhcmdzIC1uMSAtciBraWxsCisgICAgdHJhcCAtIFNJR0hVUAorICAgICN0cmFwIC0gU0lHQ0hMRAorICAgIElOU1RPUFNZU1RFTT0wCit9CisKK2NoZWNrX3BpZGJ5ZmlsZSgpIHsKKyAgICBbIC1lICQxIF0gJiYga2lsbCAtMCBgY2F0ICQxYCAyPi9kZXYvbnVsbAorfQorCisKK25vdGlmeV9jaGxkZXhpdCgpIHsKKyAgICBpZiBbICROT1RPQVNURVJVSSAtZXEgMCBdOyB0aGVuCisgICAgICAgIGNoZWNrX3BpZGJ5ZmlsZSAke0JVSUxERElSfS8udG9hc3RlcnVpLnBpZCAmJiByZXR1cm4KKyAgICAgICAgc3RvcF9zeXN0ZW0KKyAgICBmaQorfQorCisKK3ZlcmlmeV9wcmVyZXEoKSB7CisgICAgIyBWZXJpZnkgcHJlcmVxdWlzaXRlcworCisgICAgaWYgISBlY2hvICJpbXBvcnQgZGphbmdvOyBwcmludCAoMSwpID09IGRqYW5nby5WRVJTSU9OWzA6MV0gYW5kIGRqYW5nby5WRVJTSU9OWzE6Ml1bMF0gaW4gKDYsKSIgfCBweXRob24gMj4vZGV2L251bGwgfCBncmVwIFRydWUgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBwcmludGYgIlRoaXMgcHJvZ3JhbSBuZWVkcyBEamFuZ28gMS42LiBQbGVhc2UgaW5zdGFsbCB3aXRoXG5cbnBpcCBpbnN0YWxsIGRqYW5nbz09MS42XG4iCisgICAgICAgIHJldHVybiAyCisgICAgZmkKKworICAgIGlmICEgZWNobyAiaW1wb3J0IHNvdXRoOyBwcmludCByZWR1Y2UobGFtYmRhIHgsIHk6IDIgaWYgeD09MiBlbHNlIDAgaWYgeCA9PSAwIGVsc2UgeSwgbWFwKGxhbWJkYSB4OiAxK2NtcCh4WzFdLXhbMF0sMCksIHppcChbMCw4LDRdLCBtYXAoaW50LHNvdXRoLl9fdmVyc2lvbl9fLnNwbGl0KFwiLlwiKSkpKSkgPiAwIiB8IHB5dGhvbiAyPi9kZXYvbnVsbCB8IGdyZXAgVHJ1ZSA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIHByaW50ZiAiVGhpcyBwcm9ncmFtIG5lZWRzIFNvdXRoIDAuOC40LiBQbGVhc2UgaW5zdGFsbCB3aXRoXG5cbnBpcCBpbnN0YWxsIHNvdXRoPT0wLjguNFxuIgorICAgICAgICByZXR1cm4gMgorICAgIGZpCisgICAgcmV0dXJuIDAKK30KKworCisjIHJlYWQgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKK2lmIFsgLW4gIiRCQVNIX1NPVVJDRSIgXSA7IHRoZW4KKyAgICBUT0FTVEVSPSR7QkFTSF9TT1VSQ0V9CitlbGlmIFsgLW4gIiRaU0hfTkFNRSIgXSA7IHRoZW4KKyAgICBUT0FTVEVSPSR7KCUpOi0leH0KK2Vsc2UKKyAgICBUT0FTVEVSPSQwCitmaQorCitCQkJBU0VESVI9YGRpcm5hbWUgJFRPQVNURVJgLy4uCisKK1JVTk5JTkc9MAorCitOT1RPQVNURVJVST0wCitXRUJTRVJWRVI9MQorVE9BU1RFUl9CUkJFPSIiCitXRUJfUE9SVD0iODAwMCIKK05PQlJPV1NFUj0wCisKK2ZvciBwYXJhbSBpbiAkKjsgZG8KKyAgICBjYXNlICRwYXJhbSBpbgorICAgIG5vdWkgKQorICAgICAgICAgICAgTk9UT0FTVEVSVUk9MQorICAgIDs7CisgICAgbm93ZWIgKQorICAgICAgICAgICAgV0VCU0VSVkVSPTAKKyAgICA7OworICAgIG5vYnJvd3NlciApCisgICAgICAgICAgICBOT0JST1dTRVI9MQorICAgIDs7CisgICAgYnJiZT0qICkKKyAgICAgICAgICAgIFRPQVNURVJfQlJCRT0kJ1xuJyJUT0FTVEVSX0JSQkU9XCIiJHtwYXJhbSMqPX0iXCIiCisgICAgOzsKKyAgICB3ZWJwb3J0PSopCisgICAgICAgICAgICBXRUJfUE9SVD0iJHtwYXJhbSMqPX0iCisgICAgZXNhYworZG9uZQorCitbIC1uICIke0JBU0hfU09VUkNFfSIgXSAmJiBTUkNGSUxFPSR7QkFTSF9TT1VSQ0V9IHx8IFNSQ0ZJTEU9JF8KKworaWYgWyBgYmFzZW5hbWUgXCIkMFwiYCA9IGBiYXNlbmFtZSBcIiR7U1JDRklMRX1cImAgXTsgdGhlbgorICAgICMgV2UgYXJlIGNhbGxlZCBhcyBzdGFuZGFsb25lLiBXZSByZWZ1c2UgdG8gcnVuIGluIGEgYnVpbGQgZW52aXJvbm1lbnQgLSB3ZSBuZWVkIHRoZSBpbnRlcmFjdGl2ZSBtb2RlIGZvciB0aGF0LgorICAgICMgU3RhcnQganVzdCB0aGUgd2ViIHNlcnZlciwgcG9pbnQgdGhlIHdlYiBicm93c2VyIHRvIHRoZSBpbnRlcmZhY2UsIGFuZCBzdGFydCBhbnkgRGphbmdvIHNlcnZpY2VzLgorCisgICAgaWYgISB2ZXJpZnlfcHJlcmVxOyB0aGVuCisgICAgICAgIGVjaG8gIkVycm9yOiBDb3VsZCBub3QgdmVyaWZ5IHRoYXQgdGhlIG5lZWRlZCBkZXBlbmRlbmNpZXMgYXJlIGluc3RhbGxlZC4gUGxlYXNlIHVzZSB2aXJ0dWFsZW52IGFuZCBwaXAgdG8gaW5zdGFsbCBkZXBlbmRlbmNpZXMgbGlzdGVkIGluIHRvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dCIgMT4mMgorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgaWYgWyAtbiAiJEJVSUxERElSIiBdOyB0aGVuCisgICAgICAgIHByaW50ZiAiRXJyb3I6IEl0IGxvb2tzIGxpa2UgeW91IHNvdXJjZWQgb2UtaW5pdC1idWlsZC1lbnYuIFRvYXN0ZXIgY2Fubm90IHN0YXJ0IGluIGJ1aWxkIG1vZGUgZnJvbSBhbiBvZS1jb3JlIGJ1aWxkIGVudmlyb25tZW50LlxuIFlvdSBzaG91bGQgYmUgc3RhcnRpbmcgVG9hc3RlciBmcm9tIGEgbmV3IHRlcm1pbmFsIHdpbmRvdy4iIDE+JjIKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKworICAgICMgRGVmaW5lIGEgZmFrZSBidWlsZGRpciB3aGVyZSBvbmx5IHRoZSBwaWQgZmlsZXMgYXJlIGFjdHVhbGx5IGNyZWF0ZWQuIE5vIHJlYWwgYnVpbGRzIHdpbGwgdGFrZSBwbGFjZSBoZXJlLgorICAgIEJVSUxERElSPS90bXAvdG9hc3Rlcl8kJAorICAgIGlmIFsgLWQgIiRCVUlMRERJUiIgXTsgdGhlbgorICAgICAgICBlY2hvICJQcmV2aW91cyB0b2FzdGVyIHJ1biBkaXJlY3RvcnkgJEJVSUxERElSIGZvdW5kLCBjb3dhcmRseSByZWZ1c2luZyB0byBzdGFydC4gUGxlYXNlIHJlbW92ZSB0aGUgZGlyZWN0b3J5IHdoZW4gdGhhdCB0b2FzdGVyIGluc3RhbmNlIGlzIG92ZXIiIDI+JjEKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIG1rZGlyIC1wICIkQlVJTERESVIiCisKKyAgICBSVU5OSU5HPTEKKyAgICB0cmFwX2N0cmxjKCkgeworICAgICAgICBlY2hvICIqKiBTdG9wcGluZyBzeXN0ZW0iCisgICAgICAgIHdlYnNlcnZlcktpbGxBbGwKKyAgICAgICAgUlVOTklORz0wCisgICAgfQorCisgICAgZG9fY2xlYW51cCgpIHsKKyAgICAgICAgZmluZCAiJEJVSUxERElSIiAtdHlwZSBmIHwgeGFyZ3Mgcm0KKyAgICAgICAgcm1kaXIgIiRCVUlMRERJUiIKKyAgICB9CisgICAgY2xlYW51cCgpIHsKKyAgICAgICAgaWYgZ3JlcCAtaXIgZXJyb3IgIiRCVUlMRERJUiIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgaWYgZ3JlcCAtaXJuICJUaGF0IHBvcnQgaXMgYWxyZWFkeSBpbiB1c2UiICIkQlVJTERESVIiOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiWW91IGNhbiB1c2UgdGhlIFwid2VicG9ydD1QT1JUTlVNQkVSXCIgcGFyYW1ldGVyIHRvIHN0YXJ0IFRvYXN0ZXIgb24gYSBkaWZmZXJlbnQgcG9ydCAocG9ydCAkV0VCX1BPUlQgaXMgYWxyZWFkeSBpbiB1c2UpIgorICAgICAgICAgICAgICAgIGRvX2NsZWFudXAKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGYgIlxuRXJyb3JzIGZvdW5kIGluIHRoZSBUb2FzdGVyIGxvZyBmaWxlcyBwcmVzZW50IGluICckQlVJTERESVInLiBEaXJlY3Rvcnkgd2lsbCBub3QgYmUgY2xlYW5lZC5cbiBQbGVhc2UgcmV2aWV3IHRoZSBlcnJvcnMgYW5kIG5vdGlmeSB0b2FzdGVyQHlvY3RvcHJvamVjdC5vcmcgb3Igc3VibWl0IGEgYnVnIGh0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9VG9hc3RlciIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVjaG8gIk5vIGVycm9ycyBmb3VuZCwgcmVtb3ZpbmcgdGhlIHJ1biBkaXJlY3RvcnkgJyRCVUlMRERJUiciCisgICAgICAgICAgICBkb19jbGVhbnVwCisgICAgICAgIGZpCisgICAgfQorICAgIFRPQVNURVJfTUFOQUdFRD0xCisgICAgZXhwb3J0IFRPQVNURVJfTUFOQUdFRD0xCisgICAgaWYgWyAkV0VCU0VSVkVSIC1ndCAwIF0gJiYgISB3ZWJzZXJ2ZXJTdGFydEFsbDsgdGhlbgorICAgICAgICBlY2hvICJGYWlsZWQgdG8gc3RhcnQgdGhlIHdlYiBzZXJ2ZXIsIHN0b3BwaW5nIiAxPiYyCisgICAgICAgIGNsZWFudXAKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICBpZiBbICRXRUJTRVJWRVIgLWd0IDAgXSAmJiBbICROT0JST1dTRVIgLWVxIDAgXSAgOyB0aGVuCisgICAgICAgIGVjaG8gIlN0YXJ0aW5nIGJyb3dzZXIuLi4iCisgICAgICAgIHhkZy1vcGVuIGh0dHA6Ly8xMjcuMC4wLjE6JFdFQl9QT1JULyA+L2Rldi9udWxsIDI+JjEgJgorICAgIGZpCisgICAgdHJhcCB0cmFwX2N0cmxjIDIKKyAgICBlY2hvICJUb2FzdGVyIGlzIG5vdyBydW5uaW5nLiBZb3UgY2FuIHN0b3AgaXQgd2l0aCBDdHJsLUMiCisgICAgd2hpbGUgWyAkUlVOTklORyAtZ3QgMCBdOyBkbworICAgICAgICBweXRob24gJEJCQkFTRURJUi9saWIvdG9hc3Rlci9tYW5hZ2UucHkgcnVuYnVpbGRzIDI+JjEgfCB0ZWUgLWEgIiRCVUlMRERJUi90b2FzdGVyLmxvZyIKKyAgICAgICAgc2xlZXAgMQorICAgIGRvbmUKKyAgICBjbGVhbnVwCisgICAgZWNobyAiKioqKiBFeGl0IgorICAgIGV4aXQgMAorZmkKKworCitpZiAhIHZlcmlmeV9wcmVyZXE7IHRoZW4KKyAgICBlY2hvICJFcnJvcjogQ291bGQgbm90IHZlcmlmeSB0aGF0IHRoZSBuZWVkZWQgZGVwZW5kZW5jaWVzIGFyZSBpbnN0YWxsZWQuIFBsZWFzZSB1c2UgdmlydHVhbGVudiBhbmQgcGlwIHRvIGluc3RhbGwgZGVwZW5kZW5jaWVzIGxpc3RlZCBpbiB0b2FzdGVyLXJlcXVpcmVtZW50cy50eHQiIDE+JjIKKyAgICByZXR1cm4gMQorZmkKKworCisjIFdlIG1ha2Ugc3VyZSB3ZSdyZSBydW5uaW5nIGluIHRoZSBjdXJyZW50IHNoZWxsIGFuZCBpbiBhIGdvb2QgZW52aXJvbm1lbnQKK2lmIFsgLXogIiRCVUlMRERJUiIgXSB8fCAgISB3aGljaCBiaXRiYWtlID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKyAgICBlY2hvICJFcnJvcjogQnVpbGQgZW52aXJvbm1lbnQgaXMgbm90IHNldHVwIG9yIGJpdGJha2UgaXMgbm90IGluIHBhdGguIiAxPiYyCisgICAgcmV0dXJuIDIKK2ZpCisKKworIyBEZXRlcm1pbmUgdGhlIGFjdGlvbi4gSWYgc3BlY2lmaWVkIGJ5IGFyZ3VtZW50cywgZmluZSwgaWYgbm90LCB0b2dnbGUgaXQKK2lmIFsgIiQxIiA9ICdzdGFydCcgXSB8fCBbICIkMSIgPSAnc3RvcCcgXTsgdGhlbgorICAgIENNRD0iJDEiCitlbHNlCisgICAgaWYgWyAteiAiJEJCU0VSVkVSIiBdOyB0aGVuCisgICAgICAgIENNRD0ic3RhcnQiCisgICAgZWxzZQorICAgICAgICBDTUQ9InN0b3AiCisgICAgZmkKK2ZpCisKK2VjaG8gIlRoZSBzeXN0ZW0gd2lsbCAkQ01ELiIKKworIyBNYWtlIHN1cmUgaXQncyBzYWZlIHRvIHJ1biBieSBjaGVja2luZyBiaXRiYWtlIGxvY2sKKworbG9jaz0xCitpZiBbIC1lICRCVUlMRERJUi9iaXRiYWtlLmxvY2sgXTsgdGhlbgorICAgIHB5dGhvbiAtYyAiaW1wb3J0IGZjbnRsOyBmY250bC5mbG9jayhvcGVuKFwiJEJVSUxERElSL2JpdGJha2UubG9ja1wiKSwgZmNudGwuTE9DS19FWHxmY250bC5MT0NLX05CKSIgMj4vZGV2L251bGwgfHwgbG9jaz0wCitmaQorCitpZiBbICR7Q01EfSA9ICdzdGFydCcgXSAmJiBbICRsb2NrIC1lcSAwIF07IHRoZW4KKyAgICBlY2hvICJFcnJvcjogYml0YmFrZSBsb2NrIHN0YXRlIGVycm9yLiBGaWxlIGxvY2tzIHNob3cgdGhhdCB0aGUgc3lzdGVtIGlzIG9uLiIgMT4mMgorICAgIGVjaG8gIlBsZWFzZSB3YWl0IGZvciB0aGUgY3VycmVudCBidWlsZCB0byBmaW5pc2gsIHN0b3AgYW5kIHRoZW4gc3RhcnQgdGhlIHN5c3RlbSBhZ2Fpbi4iIDE+JjIKKyAgICByZXR1cm4gMworZmkKKworaWYgWyAke0NNRH0gPSAnc3RhcnQnIF0gJiYgWyAtZSAkQlVJTERESVIvLnRvYXN0ZXJtYWluLnBpZCBdICYmIGtpbGwgLTAgYGNhdCAkQlVJTERESVIvLnRvYXN0ZXJtYWluLnBpZGA7IHRoZW4KKyAgICBlY2hvICJXYXJuaW5nOiBiaXRiYWtlIGFwcGVhcnMgdG8gYmUgZGVhZCwgYnV0IHRoZSBUb2FzdGVyIHdlYiBzZXJ2ZXIgaXMgcnVubmluZy4gU29tZXRoaW5nIGZpc2h5IGlzIGdvaW5nIG9uLiIgMT4mMgorICAgIGVjaG8gIkNsZWFuaW5nIHVwIHRoZSB3ZWIgc2VydmVyIHRvIHN0YXJ0IGZyb20gYSBjbGVhbiBzbGF0ZS4iCisgICAgd2Vic2VydmVyS2lsbEFsbAorZmkKKworCisjIEV4ZWN1dGUgdGhlIGNvbW1hbmRzCisKK2Nhc2UgJENNRCBpbgorICAgIHN0YXJ0ICkKKyAgICAgICAgc3RhcnRfc3VjY2Vzcz0xCisgICAgICAgIGFkZHRvQ29uZmlndXJhdGlvbiB0b2FzdGVyLmNvbmYgIklOSEVSSVQrPVwidG9hc3RlciBidWlsZGhpc3RvcnlcIiIgJFRPQVNURVJfQlJCRQorICAgICAgICBpZiBbICRXRUJTRVJWRVIgLWd0IDAgXSAmJiAhIHdlYnNlcnZlclN0YXJ0QWxsOyB0aGVuCisgICAgICAgICAgICBlY2hvICJGYWlsZWQgJHtDTUR9LiIKKyAgICAgICAgICAgIHJldHVybiA0CisgICAgICAgIGZpCisgICAgICAgIHVuc2V0IEJCU0VSVkVSCisgICAgICAgIFBSRVJFQUQ9IiIKKyAgICAgICAgaWYgWyAtZSAke0JVSUxERElSfS9jb25mL3RvYXN0ZXItcHJlLmNvbmYgXTsgdGhlbgorICAgICAgICAgICAgcm0gJHtCVUlMRERJUn0vY29uZi90b2FzdGVyLXByZS5jb25mCisgICAgICAgIGZpCisgICAgICAgIGJpdGJha2UgJFBSRVJFQUQgLS1wb3N0cmVhZCBjb25mL3RvYXN0ZXIuY29uZiAtLXNlcnZlci1vbmx5IC10IHhtbHJwYyAtQiAwLjAuMC4wOjAKKyAgICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisgICAgICAgICAgICBzdGFydF9zdWNjZXNzPTAKKyAgICAgICAgICAgIGVjaG8gIkJpdGJha2Ugc2VydmVyIHN0YXJ0IGZhaWxlZCIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXhwb3J0IEJCU0VSVkVSPTAuMC4wLjA6LTEKKyAgICAgICAgICAgIGlmIFsgJE5PVE9BU1RFUlVJIC1lcSAwIF07IHRoZW4gICAgICAgICMgd2Ugc3RhcnQgdGhlIFRPQVNURVJVSSBvbmx5IGlmIG5vdCBpbmhpYml0ZWQKKyAgICAgICAgICAgICAgICBiaXRiYWtlIC0tb2JzZXJ2ZS1vbmx5IC11IHRvYXN0ZXJ1aSA+PiR7QlVJTERESVJ9L3RvYXN0ZXJfdWkubG9nIDI+JjEgJiBlY2hvICQhID4ke0JVSUxERElSfS8udG9hc3RlcnVpLnBpZAorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAkc3RhcnRfc3VjY2VzcyAtZXEgMSBdOyB0aGVuCisgICAgICAgICAgICAjIHNldCBmYWlsIHNhZmUgc3RvcCBzeXN0ZW0gb24gdGVybWluYWwgZXhpdAorICAgICAgICAgICAgdHJhcCBzdG9wX3N5c3RlbSBTSUdIVVAKKyAgICAgICAgICAgIGVjaG8gIlN1Y2Nlc3NmdWwgJHtDTUR9LiIKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgZmFpbGVkIHN0YXJ0LCBkbyBzdG9wCisgICAgICAgICAgICBzdG9wX3N5c3RlbQorICAgICAgICAgICAgZWNobyAiRmFpbGVkICR7Q01EfS4iCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBmaQorICAgICAgICAjIHN0b3Agc3lzdGVtIG9uIHRlcm1pbmFsIGV4aXQKKyAgICAgICAgc2V0IC1vIG1vbml0b3IKKyAgICAgICAgdHJhcCBzdG9wX3N5c3RlbSBTSUdIVVAKKyAgICAgICAgI3RyYXAgbm90aWZ5X2NobGRleGl0IFNJR0NITEQKKyAgICA7OworICAgIHN0b3AgKQorICAgICAgICBzdG9wX3N5c3RlbQorICAgICAgICBlY2hvICJTdWNjZXNzZnVsICR7Q01EfS4iCisgICAgOzsKK2VzYWMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi90b2FzdGVyLWV2ZW50cmVwbGF5IGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi90b2FzdGVyLWV2ZW50cmVwbGF5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYxNWE3YWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL3RvYXN0ZXItZXZlbnRyZXBsYXkKQEAgLTAsMCArMSwxNzQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0ICAgICAgICBBbGV4IERhbWlhbgorIworIyBUaGlzIGZpbGUgcmUtdXNlcyBjb2RlIHNwcmVhZCB0aHJvdWdob3V0IG90aGVyIEJpdGJha2Ugc291cmNlIGZpbGVzLgorIyBBcyBzdWNoLCBhbGwgb3RoZXIgY29weXJpZ2h0cyBiZWxvbmcgdG8gdGhlaXIgb3duIHJpZ2h0IGhvbGRlcnMuCisjCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisKKyMgVGhpcyBjb21tYW5kIHRha2VzIGEgZmlsZW5hbWUgYXMgYSBzaW5nbGUgcGFyYW1ldGVyLiBUaGUgZmlsZW5hbWUgaXMgcmVhZAorIyBhcyBhIGJ1aWxkIGV2ZW50bG9nLCBhbmQgdGhlIFRvYXN0ZXJVSSBpcyB1c2VkIHRvIHByb2Nlc3MgZXZlbnRzIGluIHRoZSBmaWxlCisjIGFuZCBsb2cgZGF0YSBpbiB0aGUgZGF0YWJhc2UKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoraW1wb3J0IG9zCitpbXBvcnQgc3lzLCBsb2dnaW5nCisKKyMgbWFuZ2xlIHN5c3BhdGggdG8gYWxsb3cgZWFzeSBpbXBvcnQgb2YgbW9kdWxlcworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpYicpKQorCisKK2ltcG9ydCBiYi5jb29rZXIKK2Zyb20gYmIudWkgaW1wb3J0IHRvYXN0ZXJ1aQoraW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKKworaW1wb3J0IGpzb24sIHBpY2tsZQorCisKK2NsYXNzIEZpbGVSZWFkRXZlbnRzU2VydmVyQ29ubmVjdGlvbigpOgorICAgICIiIiAgRW11bGF0ZXMgYSBjb25uZWN0aW9uIHRvIGEgYml0YmFrZSBzZXJ2ZXIgdGhhdCBmZWVkcworICAgICAgICBldmVudHMgY29taW5nIGFjdHVhbGx5IHJlYWQgZnJvbSBhIHNhdmVkIGxvZyBmaWxlLgorICAgICIiIgorCisgICAgY2xhc3MgTW9ja0Nvbm5lY3Rpb24oKToKKyAgICAgICAgIiIiIGZpbGwtaW4gZm9yIHRoZSBwcm94eSB0byB0aGUgc2VydmVyLiB3ZSBqdXN0IHJldHVybiBnZW5lcmljIGRhdGEKKyAgICAgICAgIiIiCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzYyk6CisgICAgICAgICAgICBzZWxmLl9zYyA9IHNjCisKKyAgICAgICAgZGVmIHJ1bkNvbW1hbmQoc2VsZiwgY29tbWFuZEFycmF5KToKKyAgICAgICAgICAgICIiIiBlbXVsYXRlcyBydW5uaW5nIGEgY29tbWFuZCBvbiB0aGUgc2VydmVyOyBvbmx5IHJlYWQtb25seSBjb21tYW5kcyBhcmUgYWNjZXB0ZWQgIiIiCisgICAgICAgICAgICBjb21tYW5kX25hbWUgPSBjb21tYW5kQXJyYXlbMF0KKworICAgICAgICAgICAgaWYgY29tbWFuZF9uYW1lID09ICJnZXRWYXJpYWJsZSI6CisgICAgICAgICAgICAgICAgaWYgY29tbWFuZEFycmF5WzFdIGluIHNlbGYuX3NjLl92YXJpYWJsZXM6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoc2VsZi5fc2MuX3ZhcmlhYmxlc1tjb21tYW5kQXJyYXlbMV1dWyd2J10sIE5vbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIChOb25lLCAiTWlzc2luZyB2YXJpYWJsZSIpCisKKyAgICAgICAgICAgIGVsaWYgY29tbWFuZF9uYW1lID09ICJnZXRBbGxLZXlzV2l0aEZsYWdzIjoKKyAgICAgICAgICAgICAgICBkdW1wID0ge30KKyAgICAgICAgICAgICAgICBmbGFnbGlzdCA9IGNvbW1hbmRBcnJheVsxXQorICAgICAgICAgICAgICAgIGZvciBrIGluIHNlbGYuX3NjLl92YXJpYWJsZXMua2V5cygpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgay5zdGFydHN3aXRoKCJfXyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzZWxmLl9zYy5fdmFyaWFibGVzW2tdWyd2J10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wW2tdID0geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndicgOiB2ICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hpc3RvcnknIDogc2VsZi5fc2MuX3ZhcmlhYmxlc1trXVsnaGlzdG9yeSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZCBpbiBmbGFnbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFtrXVtkXSA9IHNlbGYuX3NjLl92YXJpYWJsZXNba11bZF0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKGR1bXAsIE5vbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ29tbWFuZCAlcyBub3QgaW1wbGVtZW50ZWQiICUgY29tbWFuZEFycmF5WzBdKQorCisgICAgICAgIGRlZiB0ZXJtaW5hdGVTZXJ2ZXIoc2VsZik6CisgICAgICAgICAgICAiIiIgZG8gbm90IGRvIGFueXRoaW5nICIiIgorICAgICAgICAgICAgcGFzcworCisKKworICAgIGNsYXNzIEV2ZW50UmVhZGVyKCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzYyk6CisgICAgICAgICAgICBzZWxmLl9zYyA9IHNjCisgICAgICAgICAgICBzZWxmLmZpcnN0cmFpc2UgPSAwCisKKyAgICAgICAgZGVmIF9jcmVhdGVfZXZlbnQoc2VsZiwgbGluZSk6CisgICAgICAgICAgICBkZWYgX2ltcG9ydF9jbGFzcyhuYW1lKToKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKG5hbWUpID4gMAorICAgICAgICAgICAgICAgIGFzc2VydCAiLiIgaW4gbmFtZSwgbmFtZQorCisgICAgICAgICAgICAgICAgY29tcG9uZW50cyA9IG5hbWUuc3RyaXAoKS5zcGxpdCgiLiIpCisgICAgICAgICAgICAgICAgbW9kdWxlbmFtZSA9ICIuIi5qb2luKGNvbXBvbmVudHNbOi0xXSkKKyAgICAgICAgICAgICAgICBtb2R1bGVrbGFzcyA9IGNvbXBvbmVudHNbLTFdCisKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKG1vZHVsZW5hbWUsIGZyb21saXN0PVtzdHIobW9kdWxla2xhc3MpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihtb2R1bGUsIG1vZHVsZWtsYXNzKQorCisgICAgICAgICAgICAjIHdlIGJ1aWxkIGEgdG9hc3RlciBldmVudCBvdXQgb2YgY3VycmVudCBldmVudCBsb2cgbGluZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV2ZW50X2RhdGEgPSBqc29uLmxvYWRzKGxpbmUuc3RyaXAoKSkKKyAgICAgICAgICAgICAgICBldmVudF9jbGFzcyA9IF9pbXBvcnRfY2xhc3MoZXZlbnRfZGF0YVsnY2xhc3MnXSkKKyAgICAgICAgICAgICAgICBldmVudF9vYmplY3QgPSBwaWNrbGUubG9hZHMoanNvbi5sb2FkcyhldmVudF9kYXRhWyd2YXJzJ10pKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBwcmludCgiRmFpbGVkIGxvYWRpbmcgIiwgbGluZSkKKyAgICAgICAgICAgICAgICByYWlzZSBlCisKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV2ZW50X29iamVjdCwgZXZlbnRfY2xhc3MpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXJyb3IgbG9hZGluZyBvYmplY3RzICVzIGNsYXNzICVzICIsIGV2ZW50X29iamVjdCwgZXZlbnRfY2xhc3MpCisKKyAgICAgICAgICAgIHJldHVybiBldmVudF9vYmplY3QKKworICAgICAgICBkZWYgd2FpdEV2ZW50KHNlbGYsIHRpbWVvdXQpOgorCisgICAgICAgICAgICBuZXh0bGluZSA9IHNlbGYuX3NjLl9ldmVudGZpbGUucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgbGVuKG5leHRsaW5lKSA9PSAwOgorICAgICAgICAgICAgICAgICMgdGhlIGJ1aWxkIGRhdGEgZW5kZWQsIHdoaWxlIHRvYXN0ZXJ1aSBzdGlsbCB3YWl0cyBmb3IgZXZlbnRzLgorICAgICAgICAgICAgICAgICMgdGhpcyBoYXBwZW5zIHdoZW4gdGhlIHNlcnZlciB3YXMgYWJydXB0bHkgc3RvcHBlZCwgc28gd2Ugc2ltdWxhdGUgdGhpcworICAgICAgICAgICAgICAgIHNlbGYuZmlyc3RyYWlzZSArPSAxCisgICAgICAgICAgICAgICAgaWYgc2VsZi5maXJzdHJhaXNlID09IDE6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0KCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zYy5saW5lbm8gKz0gMQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NyZWF0ZV9ldmVudChuZXh0bGluZSkKKworCisgICAgZGVmIF9yZWFkVmFyaWFibGVzKHNlbGYsIHZhcmlhYmxlbGluZSk6CisgICAgICAgIHNlbGYuX3ZhcmlhYmxlcyA9IGpzb24ubG9hZHModmFyaWFibGVsaW5lLnN0cmlwKCkpWydhbGx2YXJpYWJsZXMnXQorCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZV9uYW1lKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gRmlsZVJlYWRFdmVudHNTZXJ2ZXJDb25uZWN0aW9uLk1vY2tDb25uZWN0aW9uKHNlbGYpCisgICAgICAgIHNlbGYuX2V2ZW50ZmlsZSA9IG9wZW4oZmlsZV9uYW1lLCAiciIpCisKKyAgICAgICAgIyB3ZSBleHBlY3QgdG8gaGF2ZSB0aGUgdmFyaWFibGUgZHVtcCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUKKyAgICAgICAgc2VsZi5saW5lbm8gPSAxCisgICAgICAgIHNlbGYuX3JlYWRWYXJpYWJsZXMoc2VsZi5fZXZlbnRmaWxlLnJlYWRsaW5lKCkpCisKKyAgICAgICAgc2VsZi5ldmVudHMgPSBGaWxlUmVhZEV2ZW50c1NlcnZlckNvbm5lY3Rpb24uRXZlbnRSZWFkZXIoc2VsZikKKworCisKKworCitjbGFzcyBNb2NrQ29uZmlnUGFyYW1ldGVycygpOgorICAgICIiIiBzdGFuZC1pbiBmb3IgY29va2VyZGF0YS5Db25maWdQYXJhbWV0ZXJzOyBhcyB3ZSBkb24ndCByZWFsbHkgY29uZmlnIGEgY29va2VyLCB0aGlzCisgICAgICAgIHNlcnZlcyBqdXN0IHRvIHN1cHBseSBuZWVkZWQgaW50ZXJmYWNlcyBmb3IgdGhlIHRvYXN0ZXIgdWkgdG8gd29yayAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYub2JzZXJ2ZV9vbmx5ID0gVHJ1ZSAgICAgICAgICAgICMgd2UgY2FuIG9ubHkgcmVhZCBmaWxlcworCisKKyMgcnVuIHRvYXN0ZXIgdWkgb24gb3VyIG1vY2sgYml0YmFrZSBjbGFzcworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBpZiBsZW4oc3lzLmFyZ3YpIDwgMjoKKyAgICAgICAgcHJpbnQoIlVzYWdlOiAlcyBldmVudC5sb2cgIiAlIHN5cy5hcmd2WzBdKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZmlsZV9uYW1lID0gc3lzLmFyZ3ZbLTFdCisgICAgbW9ja19jb25uZWN0aW9uID0gRmlsZVJlYWRFdmVudHNTZXJ2ZXJDb25uZWN0aW9uKGZpbGVfbmFtZSkKKyAgICBjb25maWdQYXJhbXMgPSBNb2NrQ29uZmlnUGFyYW1ldGVycygpCisKKyAgICAjIHJ1biB0aGUgbWFpbiBwcm9ncmFtIGFuZCBzZXQgZXhpdCBjb2RlIHRvIHRoZSByZXR1cm5lZCB2YWx1ZQorICAgIHN5cy5leGl0KHRvYXN0ZXJ1aS5tYWluKG1vY2tfY29ubmVjdGlvbi5jb25uZWN0aW9uLCBtb2NrX2Nvbm5lY3Rpb24uZXZlbnRzLCBjb25maWdQYXJhbXMpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvUkVBRE1FIGIveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZTUxNTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi9SRUFETUUKQEAgLTAsMCArMSBAQAorVGhpcyBkaXJlY3RvcnkgaXMgZm9yIGFkZGl0aW9uYWwgY29udHJpYnV0ZWQgZmlsZXMgd2hpY2ggbWF5IGJlIHVzZWZ1bC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL2JiZGV2LnNoIGIveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvYmJkZXYuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNhNzg1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL2JiZGV2LnNoCkBAIC0wLDAgKzEsMzEgQEAKKyMgVGhpcyBpcyBhIHNoZWxsIGZ1bmN0aW9uIHRvIGJlIHNvdXJjZWQgaW50byB5b3VyIHNoZWxsIG9yIHBsYWNlZCBpbiB5b3VyIC5wcm9maWxlLAorIyB3aGljaCBtYWtlcyBzZXR0aW5nIHRoaW5ncyB1cCBmb3IgQml0QmFrZSBhIGJpdCBlYXNpZXIuCisjCisjIFRoZSBhdXRob3IgZGlzY2xhaW1zIGNvcHlyaWdodCB0byB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFuZCBwbGFjZXMgaXQgaW4gdGhlCisjIHB1YmxpYyBkb21haW4uCisKK2JiZGV2ICgpIHsKKwlsb2NhbCBCQkRJUiBQS0dESVIgQlVJTERESVIKKwlpZiB0ZXN0IHgiJDEiID0gIngtLWhlbHAiOyB0aGVuIGVjaG8gPiYyICJzeW50YXg6IGJiZGV2IFtiYmRpciBbcGtnZGlyIFtidWlsZGRpcl1dXSI7IHJldHVybiAxOyBmaQorCWlmIHRlc3QgeCIkMSIgPSB4OyB0aGVuIEJCRElSPWBwd2RgOyBlbHNlIEJCRElSPSQxOyBmaQorCWlmIHRlc3QgeCIkMiIgPSB4OyB0aGVuIFBLR0RJUj1gcHdkYDsgZWxzZSBQS0dESVI9JDI7IGZpCisJaWYgdGVzdCB4IiQzIiA9IHg7IHRoZW4gQlVJTERESVI9YHB3ZGA7IGVsc2UgQlVJTERESVI9JDM7IGZpCisKKwlCQkRJUj1gcmVhZGxpbmsgLWYgJEJCRElSYAorCVBLR0RJUj1gcmVhZGxpbmsgLWYgJFBLR0RJUmAKKwlCVUlMRERJUj1gcmVhZGxpbmsgLWYgJEJVSUxERElSYAorCWlmICEgKHRlc3QgLWQgJEJCRElSICYmIHRlc3QgLWQgJFBLR0RJUiAmJiB0ZXN0IC1kICRCVUlMRERJUik7IHRoZW4KKwkJZWNobyA+JjIgInN5bnRheDogYmJkZXYgW2JiZGlyIFtwa2dkaXIgW2J1aWxkZGlyXV1dIgorCQlyZXR1cm4gMQorCWZpCisJCisJUEFUSD0kQkJESVIvYmluOiRQQVRICisJQkJQQVRIPSRCQkRJUgorCWlmIHRlc3QgeCIkQkJESVIiICE9IHgiJFBLR0RJUiI7IHRoZW4KKwkJQkJQQVRIPSRQS0dESVI6JEJCUEFUSAorCWZpCisJaWYgdGVzdCB4IiRQS0dESVIiICE9IHgiJEJVSUxERElSIjsgdGhlbgorCQlCQlBBVEg9JEJVSUxERElSOiRCQlBBVEgKKwlmaQorCWV4cG9ydCBCQlBBVEgKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL2R1bXBfY2FjaGUucHkgYi95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi9kdW1wX2NhY2hlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUxZjIzMDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi9kdW1wX2NhY2hlLnB5CkBAIC0wLDAgKzEsNjggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIworIyBUaGlzIGlzIHVzZWQgZm9yIGR1bXBpbmcgdGhlIGJiX2NhY2hlLmRhdCwgdGhlIG91dHB1dCBmb3JtYXQgaXM6CisjIHJlY2lwZV9wYXRoIFBOIFBWIFBBQ0tBR0VTCisjCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworCisjIEZvciBpbXBvcnRpbmcgYmIuY2FjaGUKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmpvaW4ob3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSkpLCAnLi4vbGliJykpCitmcm9tIGJiLmNhY2hlIGltcG9ydCBDb3JlUmVjaXBlSW5mbworCitpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKKworZGVmIG1haW4oYXJndj1Ob25lKToKKyAgICAiIiIKKyAgICBHZXQgdGhlIG1hcHBpbmcgZm9yIHRoZSB0YXJnZXQgcmVjaXBlLgorICAgICIiIgorICAgIGlmIGxlbihhcmd2KSAhPSAxOgorICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICJFcnJvciwgbmVlZCBvbmUgYXJndW1lbnQhIgorICAgICAgICByZXR1cm4gMgorCisgICAgY2FjaGVmaWxlID0gYXJndlswXQorCisgICAgd2l0aCBvcGVuKGNhY2hlZmlsZSwgInJiIikgYXMgY2FjaGVmaWxlOgorICAgICAgICBwaWNrbGVkID0gcGlja2xlLlVucGlja2xlcihjYWNoZWZpbGUpCisgICAgICAgIHdoaWxlIGNhY2hlZmlsZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBrZXkgPSBwaWNrbGVkLmxvYWQoKQorICAgICAgICAgICAgICAgIHZhbCA9IHBpY2tsZWQubG9hZCgpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbCwgQ29yZVJlY2lwZUluZm8pIGFuZCAobm90IHZhbC5za2lwcGVkKToKKyAgICAgICAgICAgICAgICBwbiA9IHZhbC5wbgorICAgICAgICAgICAgICAgICMgRmlsdGVyIG91dCB0aGUgbmF0aXZlIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgaWYga2V5LnN0YXJ0c3dpdGgoJ3ZpcnR1YWw6bmF0aXZlOicpIG9yIHBuLmVuZHN3aXRoKCItbmF0aXZlIik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAjIDEuMCBpcyB0aGUgZGVmYXVsdCB2ZXJzaW9uIGZvciBhIG5vIFBWIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBpZiB2YWwuX19kaWN0X18uaGFzX2tleSgicHYiKToKKyAgICAgICAgICAgICAgICAgICAgcHYgPSB2YWwucHYKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwdiA9ICIxLjAiCisKKyAgICAgICAgICAgICAgICBwcmludCgiJXMgJXMgJXMgJXMiICUgKGtleSwgcG4sIHB2LCAnICcuam9pbih2YWwucGFja2FnZXMpKSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL3ZpbS9mdGRldGVjdC9iaXRiYWtlLnZpbSBiL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL3ZpbS9mdGRldGVjdC9iaXRiYWtlLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDBmOGFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvdmltL2Z0ZGV0ZWN0L2JpdGJha2UudmltCkBAIC0wLDAgKzEsMjQgQEAKKyIgVmltIGZpbGV0eXBlIGRldGVjdGlvbiBmaWxlCisiIExhbmd1YWdlOiAgICAgQml0QmFrZQorIiBBdXRob3I6ICAgICAgIFJpY2FyZG8gU2FsdmV0aSA8cnNhbHZldGlAcnNhbHZldGkubmV0PgorIiBDb3B5cmlnaHQ6ICAgIENvcHlyaWdodCAoQykgMjAwOCAgUmljYXJkbyBTYWx2ZXRpIDxyc2FsdmV0aUByc2FsdmV0aS5uZXQ+CisiIExpY2VuY2U6ICAgICAgWW91IG1heSByZWRpc3RyaWJ1dGUgdGhpcyB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBWaW0gaXRzZWxmCisiCisiIFRoaXMgc2V0cyB1cCB0aGUgc3ludGF4IGhpZ2hsaWdodGluZyBmb3IgQml0QmFrZSBmaWxlcywgbGlrZSAuYmIsIC5iYmNsYXNzIGFuZCAuaW5jCisKK2lmICZjb21wYXRpYmxlIHx8IHZlcnNpb24gPCA2MDAKKyAgICBmaW5pc2gKK2VuZGlmCisKKyIgLmJiLCAuYmJhcHBlbmQgYW5kIC5iYmNsYXNzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi57YmIsYmJhcHBlbmQsYmJjbGFzc30Jc2V0IGZpbGV0eXBlPWJpdGJha2UKKworIiAuaW5jCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5pbmMJCXNldCBmaWxldHlwZT1iaXRiYWtlCisKKyIgLmNvbmYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmNvbmYKKyAgICBcIGlmIChtYXRjaChleHBhbmQoIiU6cDpoIiksICJjb25mIikgPiAwKSB8CisgICAgXCAgICAgc2V0IGZpbGV0eXBlPWJpdGJha2UgfAorICAgIFwgZW5kaWYKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvdmltL2Z0cGx1Z2luL2JpdGJha2UudmltIGIveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvdmltL2Z0cGx1Z2luL2JpdGJha2UudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMGQ3NTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi92aW0vZnRwbHVnaW4vYml0YmFrZS52aW0KQEAgLTAsMCArMSwyIEBACitzZXQgc3RzPTQgc3c9NCBldAorc2V0IGNtcz0jJXMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL3ZpbS9wbHVnaW4vbmV3YmIudmltIGIveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvdmltL3BsdWdpbi9uZXdiYi52aW0KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODc0ZTMzOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL3ZpbS9wbHVnaW4vbmV3YmIudmltCkBAIC0wLDAgKzEsODQgQEAKKyIgVmltIHBsdWdpbiBmaWxlCisiIFB1cnBvc2U6CUNyZWF0ZSBhIHRlbXBsYXRlIGZvciBuZXcgYmIgZmlsZXMKKyIgQXV0aG9yOglSaWNhcmRvIFNhbHZldGkgPHJzYWx2ZXRpQGdtYWlsLmNvbT4KKyIgQ29weXJpZ2h0OglDb3B5cmlnaHQgKEMpIDIwMDggUmljYXJkbyBTYWx2ZXRpIDxyc2FsdmV0aUBnbWFpbC5jb20+CisiCisiIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UsIHNlZSBDT1BZSU5HLk1JVCBpbgorIiB0aGlzIHNvdXJjZSBkaXN0cmlidXRpb24gZm9yIHRoZSB0ZXJtcy4KKyIKKyIgQmFzZWQgb24gdGhlIGdlbnRvby1zeW50YXggcGFja2FnZQorIgorIiBXaWxsIHRyeSB0byB1c2UgZ2l0IHRvIGZpbmQgdGhlIHVzZXIgbmFtZSBhbmQgZW1haWwKKworaWYgJmNvbXBhdGlibGUgfHwgdjp2ZXJzaW9uIDwgNjAwCisgICAgZmluaXNoCitlbmRpZgorCitmdW4hIDxTSUQ+R2V0VXNlck5hbWUoKQorICAgIGxldCBsOnVzZXJfbmFtZSA9IHN5c3RlbSgiZ2l0IGNvbmZpZyAtLWdldCB1c2VyLm5hbWUiKQorICAgIGlmIHY6c2hlbGxfZXJyb3IKKyAgICAgICAgcmV0dXJuICJVbmtub3duIFVzZXIiCisgICAgZWxzZQorICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZShsOnVzZXJfbmFtZSwgIlxuIiwgIiIsICIiKQorZW5kZnVuCisKK2Z1biEgPFNJRD5HZXRVc2VyRW1haWwoKQorICAgIGxldCBsOnVzZXJfZW1haWwgPSBzeXN0ZW0oImdpdCBjb25maWcgLS1nZXQgdXNlci5lbWFpbCIpCisgICAgaWYgdjpzaGVsbF9lcnJvcgorICAgICAgICByZXR1cm4gInVua25vd0B1c2VyLm9yZyIKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBzdWJzdGl0dXRlKGw6dXNlcl9lbWFpbCwgIlxuIiwgIiIsICIiKQorZW5kZnVuCisKK2Z1biEgQkJIZWFkZXIoKQorICAgIGxldCBsOmN1cnJlbnRfeWVhciA9IHN0cmZ0aW1lKCIlWSIpCisgICAgbGV0IGw6dXNlcl9uYW1lID0gPFNJRD5HZXRVc2VyTmFtZSgpCisgICAgbGV0IGw6dXNlcl9lbWFpbCA9IDxTSUQ+R2V0VXNlckVtYWlsKCkKKyAgICAwIHB1dCA9JyMgQ29weXJpZ2h0IChDKSAnIC4gbDpjdXJyZW50X3llYXIgLgorICAgICAgICAgICAgICAgIFwgJyAnIC4gbDp1c2VyX25hbWUgLiAnIDwnIC4gbDp1c2VyX2VtYWlsIC4gJz4nCisgICAgcHV0ID0nIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCBmb3IgdGhlIHRlcm1zKScKKyAgICAkCitlbmRmdW4KKworZnVuISBOZXdCQlRlbXBsYXRlKCkKKyAgICBsZXQgbDpwYXN0ZSA9ICZwYXN0ZQorICAgIHNldCBub3Bhc3RlCisgICAgCisgICAgIiBHZXQgdGhlIGhlYWRlcgorICAgIGNhbGwgQkJIZWFkZXIoKQorCisgICAgIiBOZXcgdGhlIGJiIHRlbXBsYXRlCisgICAgcHV0ID0nREVTQ1JJUFRJT04gPSBcIlwiJworICAgIHB1dCA9J0hPTUVQQUdFID0gXCJcIicKKyAgICBwdXQgPSdMSUNFTlNFID0gXCJcIicgCisgICAgcHV0ID0nU0VDVElPTiA9IFwiXCInCisgICAgcHV0ID0nREVQRU5EUyA9IFwiXCInCisgICAgcHV0ID0nJworICAgIHB1dCA9J1NSQ19VUkkgPSBcIlwiJworCisgICAgIiBHbyB0byB0aGUgZmlyc3QgcGxhY2UgdG8gZWRpdAorICAgIDAKKyAgICAvXkRFU0NSSVBUSU9OID0vCisgICAgZXhlYyAibm9ybWFsIDJmXCIiCisKKyAgICBpZiBwYXN0ZSA9PSAxCisgICAgICAgIHNldCBwYXN0ZQorICAgIGVuZGlmCitlbmRmdW4KKworaWYgIWV4aXN0cygiZzpiYl9jcmVhdGVfb25fZW1wdHkiKQorICAgIGxldCBnOmJiX2NyZWF0ZV9vbl9lbXB0eSA9IDEKK2VuZGlmCisKKyIgZGlzYWJsZSBpbiBjYXNlIG9mIHZpbWRpZmYKK2lmIHY6cHJvZ25hbWUgPX4gInZpbWRpZmYiCisgICAgbGV0IGc6YmJfY3JlYXRlX29uX2VtcHR5ID0gMAorZW5kaWYKKworYXVncm91cCBOZXdCQgorICAgIGF1IEJ1Zk5ld0ZpbGUgKi5iYgorICAgICAgICAgICAgICAgIFwgaWYgZzpiYl9jcmVhdGVfb25fZW1wdHkgfAorICAgICAgICAgICAgICAgIFwgICAgY2FsbCBOZXdCQlRlbXBsYXRlKCkgfAorICAgICAgICAgICAgICAgIFwgZW5kaWYKK2F1Z3JvdXAgRU5ECisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL3ZpbS9zeW50YXgvYml0YmFrZS52aW0gYi95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi92aW0vc3ludGF4L2JpdGJha2UudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNTVmOTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi92aW0vc3ludGF4L2JpdGJha2UudmltCkBAIC0wLDAgKzEsMTI2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZTogICAgIEJpdEJha2UgYmIvYmJjbGFzc2VzL2luYworIiBBdXRob3I6ICAgICAgIENocmlzIExhcnNvbiA8a2VyZ290aEBoYW5kaGVsZHMub3JnPgorIiAgICAgICAgICAgICAgIFJpY2FyZG8gU2FsdmV0aSA8cnNhbHZldGlAcnNhbHZldGkubmV0PgorIiBDb3B5cmlnaHQ6ICAgIENvcHlyaWdodCAoQykgMjAwNCAgQ2hyaXMgTGFyc29uIDxrZXJnb3RoQGhhbmRoZWxkcy5vcmc+CisiICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA4ICBSaWNhcmRvIFNhbHZldGkgPHJzYWx2ZXRpQHJzYWx2ZXRpLm5ldD4KKyIKKyIgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSwgc2VlIENPUFlJTkcuTUlUIGluCisiIHRoaXMgc291cmNlIGRpc3RyaWJ1dGlvbiBmb3IgdGhlIHRlcm1zLgorIgorIiBTeW50YXggaGlnaGxpZ2h0aW5nIGZvciBiYiwgYmJjbGFzc2VzIGFuZCBpbmMgZmlsZXMuCisiCisiIEl0J3MgYW4gZW50aXJlbHkgbmV3IHR5cGUsIGp1c3QgaGFzIHNwZWNpZmljIHN5bnRheCBpbiBzaGVsbCBhbmQgcHl0aG9uIGNvZGUKKworaWYgJmNvbXBhdGlibGUgfHwgdjp2ZXJzaW9uIDwgNjAwCisgICAgZmluaXNoCitlbmRpZgoraWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgICBmaW5pc2gKK2VuZGlmCisKK3N5biBpbmNsdWRlIEBweXRob24gc3ludGF4L3B5dGhvbi52aW0KK2lmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIHVubGV0IGI6Y3VycmVudF9zeW50YXgKK2VuZGlmCisKKyIgQml0QmFrZSBzeW50YXgKKworIiBNYXRjaGluZyBjYXNlCitzeW4gY2FzZSBtYXRjaAorCisiIEluZGljYXRlcyB0aGUgZXJyb3Igd2hlbiBub3RoaW5nIGlzIG1hdGNoZWQKK3N5biBtYXRjaCBiYlVubWF0Y2hlZCAgICAgICAgICAgIi4iCisKKyIgQ29tbWVudHMKK3N5biBjbHVzdGVyIGJiQ29tbWVudEdyb3VwICAgICAgY29udGFpbnM9YmJUb2RvLEBTcGVsbAorc3luIGtleXdvcmQgYmJUb2RvICAgICAgICAgICAgICBDT01CQUsgRklYTUUgVE9ETyBYWFggY29udGFpbmVkCitzeW4gbWF0Y2ggYmJDb21tZW50ICAgICAgICAgICAgICIjLiokIiBjb250YWlucz1AYmJDb21tZW50R3JvdXAKKworIiBTdHJpbmcgaGVscGVycworc3luIG1hdGNoIGJiUXVvdGUgICAgICAgICAgICAgICArWyciXSsgY29udGFpbmVkIAorc3luIG1hdGNoIGJiRGVsaW1pdGVyICAgICAgICAgICAiWygpe309XSIgY29udGFpbmVkCitzeW4gbWF0Y2ggYmJBcnJheUJyYWNrZXRzICAgICAgICJbXFtcXV0iIGNvbnRhaW5lZAorCisiIEJpdEJha2Ugc3RyaW5ncworc3luIG1hdGNoIGJiQ29udGludWUgICAgICAgICAgICAiXFwkIgorc3luIHJlZ2lvbiBiYlN0cmluZyAgICAgICAgICAgICBtYXRjaGdyb3VwPWJiUXVvdGUgc3RhcnQ9KyIrIHNraXA9K1xcJCsgZW5kPSsiKyBjb250YWluZWQgY29udGFpbnM9YmJUb2RvLGJiQ29udGludWUsYmJWYXJEZXJlZixiYlZhclB5VmFsdWUsQFNwZWxsCitzeW4gcmVnaW9uIGJiU3RyaW5nICAgICAgICAgICAgIG1hdGNoZ3JvdXA9YmJRdW90ZSBzdGFydD0rJysgc2tpcD0rXFwkKyBlbmQ9KycrIGNvbnRhaW5lZCBjb250YWlucz1iYlRvZG8sYmJDb250aW51ZSxiYlZhckRlcmVmLGJiVmFyUHlWYWx1ZSxAU3BlbGwKKworIiBWYXJzIGRlZmluaXRpb24KK3N5biBtYXRjaCBiYkV4cG9ydCAgICAgICAgICAgICJeZXhwb3J0IiBuZXh0Z3JvdXA9YmJJZGVudGlmaWVyIHNraXB3aGl0ZQorc3luIGtleXdvcmQgYmJFeHBvcnRGbGFnICAgICAgICBleHBvcnQgY29udGFpbmVkIG5leHRncm91cD1iYklkZW50aWZpZXIgc2tpcHdoaXRlCitzeW4gbWF0Y2ggYmJJZGVudGlmaWVyICAgICAgICAgICJbYS16QS1aMC05XC1fXC5cL1wrXVwrIiBkaXNwbGF5IGNvbnRhaW5lZAorc3luIG1hdGNoIGJiVmFyRGVyZWYgICAgICAgICAgICAiJHtbYS16QS1aMC05XC1fXC5cL1wrXVwrfSIgY29udGFpbmVkCitzeW4gbWF0Y2ggYmJWYXJFcSAgICAgICAgICAgICAgICJcKDo9XHwrPVx8PStcfFwuPVx8PVwuXHw/PVx8Pz89XHw9XCkiIGNvbnRhaW5lZCBuZXh0Z3JvdXA9YmJWYXJWYWx1ZQorc3luIG1hdGNoIGJiVmFyRGVmICAgICAgICAgICAgICAiXlwoZXhwb3J0XHMqXClcP1woW2EtekEtWjAtOVwtX1wuXC9cK11cK1woX1ske31hLXpBLVowLTlcLV9cLlwvXCtdXCtcKVw/XClccypcKDo9XHwrPVx8PStcfFwuPVx8PVwuXHw/PVx8Pz89XHw9XClcQD0iIGNvbnRhaW5zPWJiRXhwb3J0RmxhZyxiYklkZW50aWZpZXIsYmJWYXJEZXJlZiBuZXh0Z3JvdXA9YmJWYXJFcQorc3luIG1hdGNoIGJiVmFyVmFsdWUgICAgICAgICAgICAiLiokIiBjb250YWluZWQgY29udGFpbnM9YmJTdHJpbmcsYmJWYXJEZXJlZixiYlZhclB5VmFsdWUKK3N5biByZWdpb24gYmJWYXJQeVZhbHVlICAgICAgICAgc3RhcnQ9KyR7QCsgc2tpcD0rXFwkKyBlbmQ9K30rIGNvbnRhaW5lZCBjb250YWlucz1AcHl0aG9uCisKKyIgVmFycyBtZXRhZGF0YSBmbGFncworc3luIG1hdGNoIGJiVmFyRmxhZ0RlZiAgICAgICAgICAiXlwoW2EtekEtWjAtOVwtX1wuXVwrXClcKFxbW2EtekEtWjAtOVwtX1wuXVwrXF1cKVxAPSIgY29udGFpbnM9YmJJZGVudGlmaWVyIG5leHRncm91cD1iYlZhckZsYWdGbGFnCitzeW4gcmVnaW9uIGJiVmFyRmxhZ0ZsYWcgICAgICAgIG1hdGNoZ3JvdXA9YmJBcnJheUJyYWNrZXRzIHN0YXJ0PSJcWyIgZW5kPSJcXVxzKlwoPVx8Kz1cfD0rXHw/PVwpXEA9IiBjb250YWluZWQgY29udGFpbnM9YmJJZGVudGlmaWVyIG5leHRncm91cD1iYlZhckVxCisKKyIgSW5jbHVkZXMgYW5kIHJlcXVpcmVzCitzeW4ga2V5d29yZCBiYkluY2x1ZGUgICAgICAgICAgIGluaGVyaXQgaW5jbHVkZSByZXF1aXJlIGNvbnRhaW5lZCAKK3N5biBtYXRjaCBiYkluY2x1ZGVSZXN0ICAgICAgICAgIi4qJCIgY29udGFpbmVkIGNvbnRhaW5zPWJiU3RyaW5nLGJiVmFyRGVyZWYKK3N5biBtYXRjaCBiYkluY2x1ZGVMaW5lICAgICAgICAgIl5cKGluaGVyaXRcfGluY2x1ZGVcfHJlcXVpcmVcKVxzXCsiIGNvbnRhaW5zPWJiSW5jbHVkZSBuZXh0Z3JvdXA9YmJJbmNsdWRlUmVzdAorCisiIEFkZCB0YWtzIGFuZCBzaW1pbGFyCitzeW4ga2V5d29yZCBiYlN0YXRlbWVudCAgICAgICAgIGFkZHRhc2sgYWRkaGFuZGxlciBhZnRlciBiZWZvcmUgRVhQT1JUX0ZVTkNUSU9OUyBjb250YWluZWQKK3N5biBtYXRjaCBiYlN0YXRlbWVudFJlc3QgICAgICAgIi4qJCIgc2tpcHdoaXRlIGNvbnRhaW5lZCBjb250YWlucz1iYlN0YXRlbWVudAorc3luIG1hdGNoIGJiU3RhdGVtZW50TGluZSAgICAgICAiXlwoYWRkdGFza1x8YWRkaGFuZGxlclx8YWZ0ZXJcfGJlZm9yZVx8RVhQT1JUX0ZVTkNUSU9OU1wpXHNcKyIgY29udGFpbnM9YmJTdGF0ZW1lbnQgbmV4dGdyb3VwPWJiU3RhdGVtZW50UmVzdAorCisiIE9FIEltcG9ydGFudCBGdW5jdGlvbnMKK3N5biBrZXl3b3JkIGJiT0VGdW5jdGlvbnMgICAgICAgZG9fZmV0Y2ggZG9fdW5wYWNrIGRvX3BhdGNoIGRvX2NvbmZpZ3VyZSBkb19jb21waWxlIGRvX3N0YWdlIGRvX2luc3RhbGwgZG9fcGFja2FnZSBjb250YWluZWQKKworIiBHZW5lcmljIEZ1bmN0aW9ucworc3luIG1hdGNoIGJiRnVuY3Rpb24gICAgICAgICAgICAiXGhbMC05QS1aYS16Xy1dKiIgZGlzcGxheSBjb250YWluZWQgY29udGFpbnM9YmJPRUZ1bmN0aW9ucworCisiIEJpdEJha2Ugc2hlbGwgbWV0YWRhdGEKK3N5biBpbmNsdWRlIEBzaGVsbCBzeW50YXgvc2gudmltCitpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICB1bmxldCBiOmN1cnJlbnRfc3ludGF4CitlbmRpZgorc3luIGtleXdvcmQgYmJTaEZha2VSb290RmxhZyAgICBmYWtlcm9vdCBjb250YWluZWQKK3N5biBtYXRjaCBiYlNoRnVuY0RlZiAgICAgICAgICAgIl5cKGZha2Vyb290XHMqXClcP1woWzAtOUEtWmEtel8ke30tXVwrXClcKHB5dGhvblwpXEA8IVwoXHMqKClccypcKVwoe1wpXEA9IiBjb250YWlucz1iYlNoRmFrZVJvb3RGbGFnLGJiRnVuY3Rpb24sYmJWYXJEZXJlZixiYkRlbGltaXRlciBuZXh0Z3JvdXA9YmJTaEZ1bmNSZWdpb24gc2tpcHdoaXRlCitzeW4gcmVnaW9uIGJiU2hGdW5jUmVnaW9uICAgICAgIG1hdGNoZ3JvdXA9YmJEZWxpbWl0ZXIgc3RhcnQ9IntccyokIiBlbmQ9Il59XHMqJCIgY29udGFpbmVkIGNvbnRhaW5zPUBzaGVsbAorCisiIFB5dGhvbiB2YWx1ZSBpbnNpZGUgc2hlbGwgZnVuY3Rpb25zCitzeW4gcmVnaW9uIHNoRGVyZWYgICAgICAgICBzdGFydD0rJHtAKyBza2lwPStcXCQrIGV4Y2x1ZGVubCBlbmQ9K30rIGNvbnRhaW5lZCBjb250YWlucz1AcHl0aG9uCisKKyIgQml0QmFrZSBweXRob24gbWV0YWRhdGEKK3N5biBrZXl3b3JkIGJiUHlGbGFnICAgICAgICAgICAgcHl0aG9uIGNvbnRhaW5lZAorc3luIG1hdGNoIGJiUHlGdW5jRGVmICAgICAgICAgICAiXlwocHl0aG9uXHNcK1wpXChbMC05QS1aYS16XyR7fS1dXCtcKVw/XChccyooKVxzKlwpXCh7XClcQD0iIGNvbnRhaW5zPWJiUHlGbGFnLGJiRnVuY3Rpb24sYmJWYXJEZXJlZixiYkRlbGltaXRlciBuZXh0Z3JvdXA9YmJQeUZ1bmNSZWdpb24gc2tpcHdoaXRlCitzeW4gcmVnaW9uIGJiUHlGdW5jUmVnaW9uICAgICAgIG1hdGNoZ3JvdXA9YmJEZWxpbWl0ZXIgc3RhcnQ9IntccyokIiBlbmQ9Il59XHMqJCIgY29udGFpbmVkIGNvbnRhaW5zPUBweXRob24KKworIiBCaXRCYWtlICdkZWYnZCBweXRob24gZnVuY3Rpb25zCitzeW4ga2V5d29yZCBiYlB5RGVmICAgICAgICAgICAgIGRlZiBjb250YWluZWQKK3N5biByZWdpb24gYmJQeURlZlJlZ2lvbiAgICAgICAgc3RhcnQ9J15cKGRlZlxzXCtcKVwoWzAtOUEtWmEtel8tXVwrXClcKFxzKiguKilccypcKTpccyokJyBlbmQ9J15cKFxzXHwkXClcQCEnIGNvbnRhaW5zPUBweXRob24KKworIiBIaWdobGlnaHRpbmcgRGVmaW5pdGlvbnMKK2hpIGRlZiBsaW5rIGJiVW5tYXRjaGVkICAgICAgICAgRXJyb3IKK2hpIGRlZiBsaW5rIGJiSW5jbHVkZSAgICAgICAgICAgSW5jbHVkZQoraGkgZGVmIGxpbmsgYmJUb2RvICAgICAgICAgICAgICBUb2RvCitoaSBkZWYgbGluayBiYkNvbW1lbnQgICAgICAgICAgIENvbW1lbnQKK2hpIGRlZiBsaW5rIGJiUXVvdGUgICAgICAgICAgICAgU3RyaW5nCitoaSBkZWYgbGluayBiYlN0cmluZyAgICAgICAgICAgIFN0cmluZworaGkgZGVmIGxpbmsgYmJEZWxpbWl0ZXIgICAgICAgICBLZXl3b3JkCitoaSBkZWYgbGluayBiYkFycmF5QnJhY2tldHMgICAgIFN0YXRlbWVudAoraGkgZGVmIGxpbmsgYmJDb250aW51ZSAgICAgICAgICBTcGVjaWFsCitoaSBkZWYgbGluayBiYkV4cG9ydCAgICAgICAgICAgIFR5cGUKK2hpIGRlZiBsaW5rIGJiRXhwb3J0RmxhZyAgICAgICAgVHlwZQoraGkgZGVmIGxpbmsgYmJJZGVudGlmaWVyCSAgICBJZGVudGlmaWVyCitoaSBkZWYgbGluayBiYlZhckRlcmVmICAgICAgICAgIFByZVByb2MKK2hpIGRlZiBsaW5rIGJiVmFyRGVmICAgICAgICAgICAgSWRlbnRpZmllcgoraGkgZGVmIGxpbmsgYmJWYXJWYWx1ZSAgICAgICAgICBTdHJpbmcKK2hpIGRlZiBsaW5rIGJiU2hGYWtlUm9vdEZsYWcgICAgVHlwZQoraGkgZGVmIGxpbmsgYmJGdW5jdGlvbiAgICAgICAgICBGdW5jdGlvbgoraGkgZGVmIGxpbmsgYmJQeUZsYWcgICAgICAgICAgICBUeXBlCitoaSBkZWYgbGluayBiYlB5RGVmICAgICAgICAgICAgIFN0YXRlbWVudAoraGkgZGVmIGxpbmsgYmJTdGF0ZW1lbnQgICAgICAgICBTdGF0ZW1lbnQKK2hpIGRlZiBsaW5rIGJiU3RhdGVtZW50UmVzdCAgICAgSWRlbnRpZmllcgoraGkgZGVmIGxpbmsgYmJPRUZ1bmN0aW9ucyAgICAgICBTcGVjaWFsCitoaSBkZWYgbGluayBiYlZhclB5VmFsdWUgICAgICAgIFByZVByb2MKKworbGV0IGI6Y3VycmVudF9zeW50YXggPSAiYmIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL0NPUFlJTkcuR1BMIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9DT1BZSU5HLkdQTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTExOTA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9DT1BZSU5HLkdQTApAQCAtMCwwICsxLDMzOSBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL0NPUFlJTkcuTUlUIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9DT1BZSU5HLk1JVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTdkNTc0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9DT1BZSU5HLk1JVApAQCAtMCwwICsxLDE3IEBACitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKK2NvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UCitTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKK0RBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SCitUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvTWFrZWZpbGUgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMjhmNGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL01ha2VmaWxlCkBAIC0wLDAgKzEsOTEgQEAKKyMgVGhpcyBpcyBhIHNpbmdsZSBNYWtlZmlsZSB0byBoYW5kbGUgYWxsIGdlbmVyYXRlZCBCaXRCYWtlIGRvY3VtZW50cy4KKyMgVGhlIE1ha2VmaWxlIG5lZWRzIHRvIGxpdmUgaW4gdGhlIGRvY3VtZW50YXRpb24gZGlyZWN0b3J5IGFuZCBhbGwgZmlndXJlcyB1c2VkCisjIGluIGFueSBtYW51YWxzIG11c3QgYmUgLlBORyBmaWxlcyBhbmQgbGl2ZSBpbiB0aGUgaW5kaXZpZHVhbCBib29rJ3MgZmlndXJlcworIyBkaXJlY3RvcnkuCisjCisjIFRoZSBNYWtlZmlsZSBoYXMgdGhlc2UgdGFyZ2V0czoKKyMKKyMgICAgcGRmOiAgICAgIGdlbmVyYXRlcyBhIFBERiB2ZXJzaW9uIG9mIGEgbWFudWFsLgorIyAgICBodG1sOiAgICAgZ2VuZXJhdGVzIGFuIEhUTUwgdmVyc2lvbiBvZiBhIG1hbnVhbC4KKyMgICAgdGFyYmFsbDogIGNyZWF0ZXMgYSB0YXJiYWxsIGZvciB0aGUgZG9jIGZpbGVzLgorIyAgICB2YWxpZGF0ZTogdmFsaWRhdGVzCisjICAgIGNsZWFuOiAgICByZW1vdmVzIGZpbGVzCisjCisjIFRoZSBNYWtlZmlsZSBnZW5lcmF0ZXMgYW4gSFRNTCB2ZXJzaW9uIG9mIGV2ZXJ5IGRvY3VtZW50LiAgVGhlCisjIHZhcmlhYmxlIERPQyBpbmRpY2F0ZXMgdGhlIGZvbGRlciBuYW1lIGZvciBhIGdpdmVuIG1hbnVhbC4KKyMKKyMgVG8gYnVpbGQgYSBtYW51YWwsIHlvdSBtdXN0IGludm9rZSAnbWFrZScgd2l0aCB0aGUgRE9DIGFyZ3VtZW50LgorIworIyBFeGFtcGxlczoKKyMKKyMgICAgIG1ha2UgRE9DPWJpdGJha2UtdXNlci1tYW51YWwKKyMgICAgIG1ha2UgcGRmIERPQz1iaXRiYWtlLXVzZXItbWFudWFsCisjCisjIFRoZSBmaXJzdCBleGFtcGxlIGdlbmVyYXRlcyB0aGUgSFRNTCB2ZXJzaW9uIG9mIHRoZSBVc2VyIE1hbnVhbC4KKyMgVGhlIHNlY29uZCBleGFtcGxlIGdlbmVyYXRlcyB0aGUgUERGIHZlcnNpb24gb2YgdGhlIFVzZXIgTWFudWFsLgorIworCitpZmVxICgkKERPQyksYml0YmFrZS11c2VyLW1hbnVhbCkKK1hTTFRPUFRTID0gLS1zdHJpbmdwYXJhbSBodG1sLnN0eWxlc2hlZXQgYml0YmFrZS11c2VyLW1hbnVhbC1zdHlsZS5jc3MgXAorICAgICAgICAgICAtLXN0cmluZ3BhcmFtICBjaGFwdGVyLmF1dG9sYWJlbCAxIFwKKyAgICAgICAgICAgLS1zdHJpbmdwYXJhbSAgc2VjdGlvbi5hdXRvbGFiZWwgMSBcCisgICAgICAgICAgIC0tc3RyaW5ncGFyYW0gIHNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIDEgXAorICAgICAgICAgICAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCB0YXJiYWxsCitUQVJGSUxFUyA9IGJpdGJha2UtdXNlci1tYW51YWwtc3R5bGUuY3NzIGJpdGJha2UtdXNlci1tYW51YWwuaHRtbCBmaWd1cmVzL2JpdGJha2UtdGl0bGUucG5nCitNQU5VQUxTID0gJChET0MpLyQoRE9DKS5odG1sCitGSUdVUkVTID0gZmlndXJlcworU1RZTEVTSEVFVCA9ICQoRE9DKS8qLmNzcworCitlbmRpZgorCisjIworIyBUaGVzZSBVUkkgc2hvdWxkIGJlIHJld3JpdHRlbiBieSB5b3VyIGRpc3RyaWJ1dGlvbidzIHhtbCBjYXRhbG9nIHRvCisjIG1hdGNoIHlvdXIgbG9jYWx5IGluc3RhbGxlZCBYU0wgc3R5bGVzaGVldHMuCitYU0xfQkFTRV9VUkkgID0gaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQKK1hTTF9YSFRNTF9VUkkgPSAkKFhTTF9CQVNFX1VSSSkveGh0bWwvZG9jYm9vay54c2wKKworYWxsOiAkKEFMTFBSRVEpCisKK3BkZjoKK2lmZXEgKCQoRE9DKSxiaXRiYWtlLXVzZXItbWFudWFsKQorCUBlY2hvICIgIgorCUBlY2hvICIqKioqKioqKioqIEJ1aWxkaW5nLiIkKERPQykKKwlAZWNobyAiICIKKwljZCAkKERPQyk7IC4uL3Rvb2xzL2RvY2Jvb2stdG8tcGRmICQoRE9DKS54bWwgLi4vdGVtcGxhdGU7IGNkIC4uCitlbmRpZgorCitodG1sOgoraWZlcSAoJChET0MpLGJpdGJha2UtdXNlci1tYW51YWwpCisjICAgICAgIFNlZSBodHRwOi8vd3d3LnNhZ2VoaWxsLm5ldC9kb2Nib29reHNsL0h0bWxPdXRwdXQuaHRtbAorCUBlY2hvICIgIgorCUBlY2hvICIqKioqKioqKiBCdWlsZGluZyAiJChET0MpCisJQGVjaG8gIiAiCisJY2QgJChET0MpOyB4c2x0cHJvYyAkKFhTTFRPUFRTKSAtbyAkKERPQykuaHRtbCAkKERPQyktY3VzdG9taXphdGlvbi54c2wgJChET0MpLnhtbDsgY2QgLi4KK2VuZGlmCisKK3RhcmJhbGw6IGh0bWwKKwlAZWNobyAiICIKKwlAZWNobyAiKioqKioqKiogQ3JlYXRpbmcgVGFyYmFsbCBvZiBkb2N1bWVudCBmaWxlcyIKKwlAZWNobyAiICIKKwljZCAkKERPQyk7IHRhciAtY3Z6ZiAkKERPQykudGd6ICQoVEFSRklMRVMpOyBjZCAuLgorCit2YWxpZGF0ZToKKwljZCAkKERPQyk7IHhtbGxpbnQgLS1wb3N0dmFsaWQgLS14aW5jbHVkZSAtLW5vb3V0ICQoRE9DKS54bWw7IGNkIC4uCisKK3B1Ymxpc2g6CisJQGlmIHRlc3QgLWYgJChET0MpLyQoRE9DKS5odG1sOyBcCisJICB0aGVuIFwKKyAgICAgICAgICAgIGVjaG8gIiAiOyBcCisgICAgICAgICAgICBlY2hvICIqKioqKioqKiBQdWJsaXNoaW5nICIkKERPQykiLmh0bWwiOyBcCisgICAgICAgICAgICBlY2hvICIgIjsgXAorICAgICAgICAgICAgc2NwIC1yICQoTUFOVUFMUykgJChTVFlMRVNIRUVUKSBkb2NzLnlwOi92YXIvd3d3L3d3dy55b2N0b3Byb2plY3Qub3JnLWRvY3MvJChWRVIpLyQoRE9DKTsgXAorICAgICAgICAgICAgY2QgJChET0MpOyBzY3AgLXIgJChGSUdVUkVTKSBkb2NzLnlwOi92YXIvd3d3L3d3dy55b2N0b3Byb2plY3Qub3JnLWRvY3MvJChWRVIpLyQoRE9DKTsgXAorCWVsc2UgXAorICAgICAgICAgIGVjaG8gIiAiOyBcCisgICAgICAgICAgZWNobyAkKERPQykiLmh0bWwgbWlzc2luZy4gIEdlbmVyYXRlIHRoZSBmaWxlIGZpcnN0IHRoZW4gdHJ5IGFnYWluLiI7IFwKKyAgICAgICAgICBlY2hvICIgIjsgXAorCWZpCisKK2NsZWFuOgorCXJtIC1yZiAkKE1BTlVBTFMpOyBybSAkKERPQykvJChET0MpLnRnejsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvUkVBRE1FIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAzY2Y4ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvUkVBRE1FCkBAIC0wLDAgKzEsMzkgQEAKK0RvY3VtZW50YXRpb24KKz09PT09PT09PT09PT0KKworVGhpcyBpcyB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIEJpdEJha2UgZG9jdW1lbnRhdGlvbi4gCisKK01hbnVhbCBPcmdhbml6YXRpb24KKz09PT09PT09PT09PT09PT09PT0KKworRm9sZGVycyBleGlzdCBmb3IgaW5kaXZpZHVhbCBtYW51YWxzIGFzIGZvbGxvd3M6CisKKyogYml0YmFrZS11c2VyLW1hbnVhbCAgICAgIC0gVGhlIEJpdEJha2UgVXNlciBNYW51YWwgCisKK0VhY2ggZm9sZGVyIGlzIHNlbGYtY29udGFpbmVkIHJlZ2FyZGluZyBjb250ZW50IGFuZCBmaWd1cmVzLgorCitJZiB5b3Ugd2FudCB0byBmaW5kIEhUTUwgdmVyc2lvbnMgb2YgdGhlIEJpdEJha2UgbWFudWFscyBvbiB0aGUgd2ViLCAKK2dvIHRvIGh0dHA6Ly93d3cub3BlbmVtYmVkZGVkLm9yZy93aWtpL0RvY3VtZW50YXRpb24uIAorCitNYWtlZmlsZQorPT09PT09PT0KKworVGhlIE1ha2VmaWxlIHByb2Nlc3NlcyBtYW51YWwgZGlyZWN0b3JpZXMgdG8gY3JlYXRlIEhUTUwsIFBERiwKK3RhcmJhbGxzLCBldGMuICBEZXRhaWxzIG9uIGhvdyB0aGUgTWFrZWZpbGUgd29yayBhcmUgZG9jdW1lbnRlZAoraW5zaWRlIHRoZSBNYWtlZmlsZS4gIFNlZSB0aGF0IGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1RvIGJ1aWxkIGEgbWFudWFsLCB5b3UgcnVuIHRoZSBtYWtlIGNvbW1hbmQgYW5kIHBhc3MgaXQgdGhlIG5hbWUKK29mIHRoZSBmb2xkZXIgY29udGFpbmluZyB0aGUgbWFudWFsJ3MgY29udGVudHMuIAorRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBydW4gZnJvbSB0aGUgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkgCitjcmVhdGVzIGFuIEhUTUwgYW5kIGEgUERGIHZlcnNpb24gb2YgdGhlIEJpdEJha2UgVXNlciBNYW51YWwuCitUaGUgRE9DIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgbWFudWFsIHlvdSBhcmUgbWFraW5nOgorCisgICAgICQgbWFrZSBET0M9Yml0YmFrZS11c2VyLW1hbnVhbAorCit0ZW1wbGF0ZQorPT09PT09PT0KK0NvbnRhaW5zIHZhcmlvdXMgdGVtcGxhdGVzLCBmb250cywgYW5kIHNvbWUgb2xkIFBORyBmaWxlcy4KKwordG9vbHMKKz09PT09CitDb250YWlucyBhIHRvb2wgdG8gY29udmVydCB0aGUgRG9jQm9vayBmaWxlcyB0byBQREYgZm9ybWF0LgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTg1ZWE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IiB2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCistLT4KKworICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvcGVybWFsaW5rcy54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9kaXZpc2lvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2dsb3NzLXBlcm1hbGlua3MueHNsIi8+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJ3VzZXItbWFudWFsLXN0eWxlLmNzcyciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIj5BPC94c2w6cGFyYW0+CisKKzwhLS0gIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUudG9jIiBzZWxlY3Q9IidhcnRpY2xlIG5vcCciPjwveHNsOnBhcmFtPiAgLS0+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1leGVjdXRpb24ueG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtZXhlY3V0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTUyZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtZXhlY3V0aW9uLnhtbApAQCAtMCwwICsxLDkxMiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCI+CisKKzxjaGFwdGVyIGlkPSJiaXRiYWtlLXVzZXItbWFudWFsLWV4ZWN1dGlvbiI+CisgICAgPHRpdGxlPkV4ZWN1dGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIHByaW1hcnkgcHVycG9zZSBmb3IgcnVubmluZyBCaXRCYWtlIGlzIHRvIHByb2R1Y2Ugc29tZSBraW5kCisgICAgICAgIG9mIG91dHB1dCBzdWNoIGFzIGEgc2luZ2xlIGluc3RhbGxhYmxlIHBhY2thZ2UsIGEga2VybmVsLCBhIHNvZnR3YXJlCisgICAgICAgIGRldmVsb3BtZW50IGtpdCwgb3IgZXZlbiBhIGZ1bGwsIGJvYXJkLXNwZWNpZmljIGJvb3RhYmxlIExpbnV4IGltYWdlLAorICAgICAgICBjb21wbGV0ZSB3aXRoIGJvb3Rsb2FkZXIsIGtlcm5lbCwgYW5kIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgT2YgY291cnNlLCB5b3UgY2FuIGV4ZWN1dGUgdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4KKyAgICAgICAgY29tbWFuZCB3aXRoIG9wdGlvbnMgdGhhdCBjYXVzZSBpdCB0byBleGVjdXRlIHNpbmdsZSB0YXNrcywKKyAgICAgICAgY29tcGlsZSBzaW5nbGUgcmVjaXBlIGZpbGVzLCBjYXB0dXJlIG9yIGNsZWFyIGRhdGEsIG9yIHNpbXBseQorICAgICAgICByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyBCaXRCYWtlJ3MgZXhlY3V0aW9uIHByb2Nlc3MgZnJvbSBzdGFydAorICAgICAgICB0byBmaW5pc2ggd2hlbiB5b3UgdXNlIGl0IHRvIGNyZWF0ZSBhbiBpbWFnZS4KKyAgICAgICAgVGhlIGV4ZWN1dGlvbiBwcm9jZXNzIGlzIGxhdW5jaGVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZAorICAgICAgICBmb3JtOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSA8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIEJpdEJha2UgY29tbWFuZCBhbmQgaXRzIG9wdGlvbnMsCisgICAgICAgIHNlZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nYml0YmFrZS11c2VyLW1hbnVhbC1jb21tYW5kJz5UaGUgQml0QmFrZSBDb21tYW5kPC9saW5rPiIKKyAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQcmlvciB0byBleGVjdXRpbmcgQml0QmFrZSwgeW91IHNob3VsZCB0YWtlIGFkdmFudGFnZSBvZiBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICBwYXJhbGxlbCB0aHJlYWQgZXhlY3V0aW9uIG9uIHlvdXIgYnVpbGQgaG9zdCBieSBzZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9OVU1CRVJfVEhSRUFEUyc+PGZpbGVuYW1lPkJCX05VTUJFUl9USFJFQURTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4geW91ciBwcm9qZWN0J3MgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBjb21tb24gbWV0aG9kIHRvIGRldGVybWluZSB0aGlzIHZhbHVlIGZvciB5b3VyIGJ1aWxkIGhvc3QgaXMgdG8gcnVuCisgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ3JlcCBwcm9jZXNzb3IgL3Byb2MvY3B1aW5mbworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHByb2Nlc3NvcnMsIHdoaWNoIHRha2VzIGludG8gCisgICAgICAgICAgICAgICAgYWNjb3VudCBoeXBlci10aHJlYWRpbmcuIAorICAgICAgICAgICAgICAgIFRodXMsIGEgcXVhZC1jb3JlIGJ1aWxkIGhvc3Qgd2l0aCBoeXBlci10aHJlYWRpbmcgbW9zdCBsaWtlbHkgCisgICAgICAgICAgICAgICAgc2hvd3MgZWlnaHQgcHJvY2Vzc29ycywgd2hpY2ggaXMgdGhlIHZhbHVlIHlvdSB3b3VsZCB0aGVuIGFzc2lnbiB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQl9OVU1CRVJfVEhSRUFEUzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIHBvc3NpYmx5IHNpbXBsZXIgc29sdXRpb24gaXMgdGhhdCBzb21lIExpbnV4IGRpc3RyaWJ1dGlvbnMKKyAgICAgICAgICAgICAgICAoZS5nLiBEZWJpYW4gYW5kIFVidW50dSkgcHJvdmlkZSB0aGUgPGZpbGVuYW1lPm5jcHVzPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdwYXJzaW5nLXRoZS1iYXNlLWNvbmZpZ3VyYXRpb24tbWV0YWRhdGEnPgorICAgICAgICA8dGl0bGU+UGFyc2luZyB0aGUgQmFzZSBDb25maWd1cmF0aW9uIE1ldGFkYXRhPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmaXJzdCB0aGluZyBCaXRCYWtlIGRvZXMgaXMgcGFyc2UgYmFzZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBtZXRhZGF0YS4KKyAgICAgICAgICAgIEJhc2UgY29uZmlndXJhdGlvbiBtZXRhZGF0YSBjb25zaXN0cyBvZiB5b3VyIHByb2plY3QncworICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRvIGRldGVybWluZSB3aGF0CisgICAgICAgICAgICBsYXllcnMgQml0QmFrZSBuZWVkcyB0byByZWNvZ25pemUsIGFsbCBuZWNlc3NhcnkKKyAgICAgICAgICAgIDxmaWxlbmFtZT5sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZXMgKG9uZSBmcm9tIGVhY2ggbGF5ZXIpLAorICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoZSBkYXRhIGl0c2VsZiBpcyBvZiB2YXJpb3VzIHR5cGVzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJlY2lwZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRGV0YWlscyBhYm91dCBwYXJ0aWN1bGFyIHBpZWNlcyBvZiBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DbGFzcyBEYXRhOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEFuIGFic3RyYWN0aW9uIG9mIGNvbW1vbiBidWlsZCBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICAoZS5nLiBob3cgdG8gYnVpbGQgYSBMaW51eCBrZXJuZWwpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvbmZpZ3VyYXRpb24gRGF0YTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBNYWNoaW5lLXNwZWNpZmljIHNldHRpbmdzLCBwb2xpY3kgZGVjaXNpb25zLAorICAgICAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gZGF0YSBhY3RzIGFzIHRoZSBnbHVlIHRvIGJpbmQgZXZlcnl0aGluZworICAgICAgICAgICAgICAgICAgICB0b2dldGhlci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlcyBhcmUgdXNlZCB0bworICAgICAgICAgICAgY29uc3RydWN0IGtleSB2YXJpYWJsZXMgc3VjaCBhcworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJGSUxFUyc+PGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gaXMgdXNlZCB0byBzZWFyY2ggZm9yCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGFuZCBjbGFzcyBmaWxlcyB1bmRlciB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5jbGFzc2VzPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGRpcmVjdG9yaWVzLCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IGlzIHVzZWQgdG8gbG9jYXRlIGJvdGggcmVjaXBlCisgICAgICAgICAgICBhbmQgcmVjaXBlIGFwcGVuZCBmaWxlcworICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIElmIHRoZXJlIGlzIG5vIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSwKKyAgICAgICAgICAgIGl0IGlzIGFzc3VtZWQgdGhlIHVzZXIgaGFzIHNldCB0aGUgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+CisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPiBkaXJlY3RseSBpbiB0aGUgZW52aXJvbm1lbnQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5leHQsIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZSBpcyBsb2NhdGVkCisgICAgICAgICAgICB1c2luZyB0aGUgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlIHRoYXQgd2FzCisgICAgICAgICAgICBqdXN0IGNvbnN0cnVjdGVkLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgdXNpbmcgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICA8ZmlsZW5hbWU+cmVxdWlyZTwvZmlsZW5hbWU+IGRpcmVjdGl2ZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFByaW9yIHRvIHBhcnNpbmcgY29uZmlndXJhdGlvbiBmaWxlcywgQml0YmFrZSBsb29rcworICAgICAgICAgICAgYXQgY2VydGFpbiB2YXJpYWJsZXMsIGluY2x1ZGluZzoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9FTlZfV0hJVEVMSVNUJz48ZmlsZW5hbWU+QkJfRU5WX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItQkJfUFJFU0VSVkVfRU5WJz48ZmlsZW5hbWU+QkJfUFJFU0VSVkVfRU5WPC9maWxlbmFtZT48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9FTlZfRVhUUkFXSElURSc+PGZpbGVuYW1lPkJCX0VOVl9FWFRSQVdISVRFPC9maWxlbmFtZT48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQklUQkFLRV9VSSc+PGZpbGVuYW1lPkJJVEJBS0VfVUk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gcGFzcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW50byB0aGUgQml0QmFrZQorICAgICAgICAgICAgZXhlY3V0aW9uIGVudmlyb25tZW50IGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Bhc3NpbmctaW5mb3JtYXRpb24taW50by10aGUtYnVpbGQtdGFzay1lbnZpcm9ubWVudCc+UGFzc2luZyBJbmZvcm1hdGlvbiBJbnRvIHRoZSBCdWlsZCBUYXNrIEVudmlyb25tZW50PC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGJhc2UgY29uZmlndXJhdGlvbiBtZXRhZGF0YSBpcyBnbG9iYWwKKyAgICAgICAgICAgIGFuZCB0aGVyZWZvcmUgYWZmZWN0cyBhbGwgcmVjaXBlcyBhbmQgdGFza3MgdGhhdCBhcmUgZXhlY3V0ZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgZmlyc3Qgc2VhcmNoZXMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgZm9yIGFuCisgICAgICAgICAgICBvcHRpb25hbCA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGV4cGVjdGVkIHRvIGNvbnRhaW4gYQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCTEFZRVJTJz48ZmlsZW5hbWU+QkJMQVlFUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHRoYXQgaXMgYSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiAnbGF5ZXInIGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgUmVjYWxsIHRoYXQgaWYgQml0QmFrZSBjYW5ub3QgZmluZCBhIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGUsIHRoZW4gaXQgaXMgYXNzdW1lZCB0aGUgdXNlciBoYXMgc2V0IHRoZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlcyBkaXJlY3RseSBpbiB0aGUgZW52aXJvbm1lbnQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBlYWNoIGRpcmVjdG9yeSAobGF5ZXIpIGluIHRoaXMgbGlzdCwgYSA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGUgaXMgbG9jYXRlZCBhbmQgcGFyc2VkIHdpdGggdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTEFZRVJESVInPjxmaWxlbmFtZT5MQVlFUkRJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgYmVpbmcgc2V0IHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGxheWVyIHdhcyBmb3VuZC4KKyAgICAgICAgICAgIFRoZSBpZGVhIGlzIHRoZXNlIGZpbGVzIGF1dG9tYXRpY2FsbHkgc2V0IHVwCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQgb3RoZXIgdmFyaWFibGVzIGNvcnJlY3RseSBmb3IgYSBnaXZlbiBidWlsZCBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgdGhlbiBleHBlY3RzIHRvIGZpbmQgdGhlIDxmaWxlbmFtZT5jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlIHNvbWV3aGVyZSBpbiB0aGUgdXNlci1zcGVjaWZpZWQgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhhdCBjb25maWd1cmF0aW9uIGZpbGUgZ2VuZXJhbGx5IGhhcyBpbmNsdWRlIGRpcmVjdGl2ZXMgdG8gcHVsbAorICAgICAgICAgICAgaW4gYW55IG90aGVyIG1ldGFkYXRhIHN1Y2ggYXMgZmlsZXMgc3BlY2lmaWMgdG8gdGhlIGFyY2hpdGVjdHVyZSwKKyAgICAgICAgICAgIHRoZSBtYWNoaW5lLCB0aGUgbG9jYWwgZW52aXJvbm1lbnQsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25seSB2YXJpYWJsZSBkZWZpbml0aW9ucyBhbmQgaW5jbHVkZSBkaXJlY3RpdmVzIGFyZSBhbGxvd2VkCisgICAgICAgICAgICBpbiBCaXRCYWtlIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgU29tZSB2YXJpYWJsZXMgZGlyZWN0bHkgaW5mbHVlbmNlIEJpdEJha2UncyBiZWhhdmlvci4KKyAgICAgICAgICAgIFRoZXNlIHZhcmlhYmxlcyBtaWdodCBoYXZlIGJlZW4gc2V0IGZyb20gdGhlIGVudmlyb25tZW50CisgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBwcmV2aW91c2x5CisgICAgICAgICAgICBtZW50aW9uZWQgb3Igc2V0IGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLXZhcmlhYmxlcy1nbG9zJz5WYXJpYWJsZXMgR2xvc3Nhcnk8L2xpbms+IgorICAgICAgICAgICAgY2hhcHRlciBwcmVzZW50cyBhIGZ1bGwgbGlzdCBvZiB2YXJpYWJsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFmdGVyIHBhcnNpbmcgY29uZmlndXJhdGlvbiBmaWxlcywgQml0QmFrZSB1c2VzIGl0cyBydWRpbWVudGFyeQorICAgICAgICAgICAgaW5oZXJpdGFuY2UgbWVjaGFuaXNtLCB3aGljaCBpcyB0aHJvdWdoIGNsYXNzIGZpbGVzLCB0byBpbmhlcml0CisgICAgICAgICAgICBzb21lIHN0YW5kYXJkIGNsYXNzZXMuCisgICAgICAgICAgICBCaXRCYWtlIHBhcnNlcyBhIGNsYXNzIHdoZW4gdGhlIGluaGVyaXQgZGlyZWN0aXZlIHJlc3BvbnNpYmxlCisgICAgICAgICAgICBmb3IgZ2V0dGluZyB0aGF0IGNsYXNzIGlzIGVuY291bnRlcmVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUgaXMgYWx3YXlzIGluY2x1ZGVkLgorICAgICAgICAgICAgT3RoZXIgY2xhc3NlcyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gdXNpbmcgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5IRVJJVCc+PGZpbGVuYW1lPklOSEVSSVQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIGFyZSBhbHNvIGluY2x1ZGVkLgorICAgICAgICAgICAgQml0QmFrZSBzZWFyY2hlcyBmb3IgY2xhc3MgZmlsZXMgaW4gYQorICAgICAgICAgICAgPGZpbGVuYW1lPmNsYXNzZXM8L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcnkgdW5kZXIKKyAgICAgICAgICAgIHRoZSBwYXRocyBpbiA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gaW4gdGhlIHNhbWUgd2F5IGFzCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIGdvb2Qgd2F5IHRvIGdldCBhbiBpZGVhIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGFuZAorICAgICAgICAgICAgdGhlIGNsYXNzIGZpbGVzIHVzZWQgaW4geW91ciBleGVjdXRpb24gZW52aXJvbm1lbnQgaXMgdG8KKyAgICAgICAgICAgIHJ1biB0aGUgZm9sbG93aW5nIEJpdEJha2UgY29tbWFuZDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1lID4gbXliYi5sb2cKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEV4YW1pbmluZyB0aGUgdG9wIG9mIHRoZSA8ZmlsZW5hbWU+bXliYi5sb2c8L2ZpbGVuYW1lPgorICAgICAgICAgICAgc2hvd3MgeW91IHRoZSBtYW55IGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGNsYXNzIGZpbGVzCisgICAgICAgICAgICB1c2VkIGluIHlvdXIgZXhlY3V0aW9uIGVudmlyb25tZW50LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBiZSBhd2FyZSBvZiBob3cgQml0QmFrZSBwYXJzZXMgY3VybHkgYnJhY2VzLgorICAgICAgICAgICAgICAgIElmIGEgcmVjaXBlIHVzZXMgYSBjbG9zaW5nIGN1cmx5IGJyYWNlIHdpdGhpbiB0aGUgZnVuY3Rpb24gYW5kCisgICAgICAgICAgICAgICAgdGhlIGNoYXJhY3RlciBoYXMgbm8gbGVhZGluZyBzcGFjZXMsIEJpdEJha2UgcHJvZHVjZXMgYSBwYXJzaW5nCisgICAgICAgICAgICAgICAgZXJyb3IuCisgICAgICAgICAgICAgICAgSWYgeW91IHVzZSBhIHBhaXIgb2YgY3VybHkgYnJhY2VzIGluIGEgc2hlbGwgZnVuY3Rpb24sIHRoZQorICAgICAgICAgICAgICAgIGNsb3NpbmcgY3VybHkgYnJhY2UgbXVzdCBub3QgYmUgbG9jYXRlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUKKyAgICAgICAgICAgICAgICB3aXRob3V0IGxlYWRpbmcgc3BhY2VzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBjYXVzZXMgQml0QmFrZSB0byBwcm9kdWNlIGEgcGFyc2luZworICAgICAgICAgICAgICAgIGVycm9yOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZmFrZXJvb3QgY3JlYXRlX3NoYXIoKSB7CisgICAgICAgICBjYXQgJmx0OyZsdDsgIkVPRiIgJmd0OyAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCisgICAgIHVzYWdlKCkKKyAgICAgeworICAgICAgIGVjaG8gInRlc3QiCisgICAgICAgIyMjIyMjIFRoZSBmb2xsb3dpbmcgIn0iIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSBjYXVzZXMgYSBwYXJzaW5nIGVycm9yICMjIyMjIworICAgICB9CisgICAgIEVPRgorICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFdyaXRpbmcgdGhlIHJlY2lwZSB0aGlzIHdheSBhdm9pZHMgdGhlIGVycm9yOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZmFrZXJvb3QgY3JlYXRlX3NoYXIoKSB7CisgICAgICAgICBjYXQgJmx0OyZsdDsgIkVPRiIgJmd0OyAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCisgICAgIHVzYWdlKCkKKyAgICAgeworICAgICAgIGVjaG8gInRlc3QiCisgICAgICAgIyMjIyMjVGhlIGZvbGxvd2luZyAifSIgd2l0aCBhIGxlYWRpbmcgc3BhY2UgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIGF2b2lkcyB0aGUgZXJyb3IgIyMjIyMjCisgICAgICB9CisgICAgIEVPRgorICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L25vdGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2xvY2F0aW5nLWFuZC1wYXJzaW5nLXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+TG9jYXRpbmcgYW5kIFBhcnNpbmcgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEdXJpbmcgdGhlIGNvbmZpZ3VyYXRpb24gcGhhc2UsIEJpdEJha2Ugd2lsbCBoYXZlIHNldAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCRklMRVMnPjxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgQml0QmFrZSBub3cgdXNlcyBpdCB0byBjb25zdHJ1Y3QgYSBsaXN0IG9mIHJlY2lwZXMgdG8gcGFyc2UsCisgICAgICAgICAgICBhbG9uZyB3aXRoIGFueSBhcHBlbmQgZmlsZXMgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgIHRvIGFwcGx5LgorICAgICAgICAgICAgPGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPiBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mCisgICAgICAgICAgICBhdmFpbGFibGUgZmlsZXMgYW5kIHN1cHBvcnRzIHdpbGRjYXJkcy4KKyAgICAgICAgICAgIEFuIGV4YW1wbGUgd291bGQgYmU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCRklMRVMgPSAiL3BhdGgvdG8vYmJmaWxlcy8qLmJiIC9wYXRoL3RvL2FwcGVuZHMvKi5iYmFwcGVuZCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEJpdEJha2UgcGFyc2VzIGVhY2ggcmVjaXBlIGFuZCBhcHBlbmQgZmlsZSBsb2NhdGVkCisgICAgICAgICAgICB3aXRoIDxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT4gYW5kIHN0b3JlcyB0aGUgdmFsdWVzIG9mCisgICAgICAgICAgICB2YXJpb3VzIHZhcmlhYmxlcyBpbnRvIHRoZSBkYXRhc3RvcmUuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBBcHBlbmQgZmlsZXMgYXJlIGFwcGxpZWQgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIGVuY291bnRlcmVkIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIEZvciBlYWNoIGZpbGUsIGEgZnJlc2ggY29weSBvZiB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGlzCisgICAgICAgICAgICBtYWRlLCB0aGVuIHRoZSByZWNpcGUgaXMgcGFyc2VkIGxpbmUgYnkgbGluZS4KKyAgICAgICAgICAgIEFueSBpbmhlcml0IHN0YXRlbWVudHMgY2F1c2UgQml0QmFrZSB0byBmaW5kIGFuZAorICAgICAgICAgICAgdGhlbiBwYXJzZSBjbGFzcyBmaWxlcyAoPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4pCisgICAgICAgICAgICB1c2luZworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgYXMgdGhlIHNlYXJjaCBwYXRoLgorICAgICAgICAgICAgRmluYWxseSwgQml0QmFrZSBwYXJzZXMgaW4gb3JkZXIgYW55IGFwcGVuZCBmaWxlcyBmb3VuZCBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25lIGNvbW1vbiBjb252ZW50aW9uIGlzIHRvIHVzZSB0aGUgcmVjaXBlIGZpbGVuYW1lIHRvIGRlZmluZQorICAgICAgICAgICAgcGllY2VzIG9mIG1ldGFkYXRhLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGluIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiB0aGUgcmVjaXBlCisgICAgICAgICAgICBuYW1lIGFuZCB2ZXJzaW9uIGFyZSB1c2VkIHRvIHNldCB0aGUgdmFyaWFibGVzCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPiBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQTiA9ICIke0BiYi5wYXJzZS5CQkhhbmRsZXIudmFyc19mcm9tX2ZpbGUoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksZClbMF0gb3IgJ2RlZmF1bHRwa2duYW1lJ30iCisgICAgIFBWID0gIiR7QGJiLnBhcnNlLkJCSGFuZGxlci52YXJzX2Zyb21fZmlsZShkLmdldFZhcignRklMRScsIEZhbHNlKSxkKVsxXSBvciAnMS4wJ30iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIGEgcmVjaXBlIGNhbGxlZCAic29tZXRoaW5nXzEuMi4zLmJiIiB3b3VsZCBzZXQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+IHRvICJzb21ldGhpbmciIGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gdG8gIjEuMi4zIi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnkgdGhlIHRpbWUgcGFyc2luZyBpcyBjb21wbGV0ZSBmb3IgYSByZWNpcGUsIEJpdEJha2UKKyAgICAgICAgICAgIGhhcyBhIGxpc3Qgb2YgdGFza3MgdGhhdCB0aGUgcmVjaXBlIGRlZmluZXMgYW5kIGEgc2V0IG9mCisgICAgICAgICAgICBkYXRhIGNvbnNpc3Rpbmcgb2Yga2V5cyBhbmQgdmFsdWVzIGFzIHdlbGwgYXMKKyAgICAgICAgICAgIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhc2tzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIGRvZXMgbm90IG5lZWQgYWxsIG9mIHRoaXMgaW5mb3JtYXRpb24uCisgICAgICAgICAgICBJdCBvbmx5IG5lZWRzIGEgc21hbGwgc3Vic2V0IG9mIHRoZSBpbmZvcm1hdGlvbiB0byBtYWtlCisgICAgICAgICAgICBkZWNpc2lvbnMgYWJvdXQgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgQml0QmFrZSBjYWNoZXMgdGhlIHZhbHVlcyBpbiB3aGljaCBpdCBpcworICAgICAgICAgICAgaW50ZXJlc3RlZCBhbmQgZG9lcyBub3Qgc3RvcmUgdGhlIHJlc3Qgb2YgdGhlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgRXhwZXJpZW5jZSBoYXMgc2hvd24gaXQgaXMgZmFzdGVyIHRvIHJlLXBhcnNlIHRoZSBtZXRhZGF0YSB0aGFuIHRvCisgICAgICAgICAgICB0cnkgYW5kIHdyaXRlIGl0IG91dCB0byB0aGUgZGlzayBhbmQgdGhlbiByZWxvYWQgaXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZXJlIHBvc3NpYmxlLCBzdWJzZXF1ZW50IEJpdEJha2UgY29tbWFuZHMgcmV1c2UgdGhpcyBjYWNoZSBvZgorICAgICAgICAgICAgcmVjaXBlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgVGhlIHZhbGlkaXR5IG9mIHRoaXMgY2FjaGUgaXMgZGV0ZXJtaW5lZCBieSBmaXJzdCBjb21wdXRpbmcgYQorICAgICAgICAgICAgY2hlY2tzdW0gb2YgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBkYXRhIChzZWUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9IQVNIQ09ORklHX1dISVRFTElTVCc+PGZpbGVuYW1lPkJCX0hBU0hDT05GSUdfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgYW5kIHRoZW4gY2hlY2tpbmcgaWYgdGhlIGNoZWNrc3VtIG1hdGNoZXMuCisgICAgICAgICAgICBJZiB0aGF0IGNoZWNrc3VtIG1hdGNoZXMgd2hhdCBpcyBpbiB0aGUgY2FjaGUgYW5kIHRoZSByZWNpcGUKKyAgICAgICAgICAgIGFuZCBjbGFzcyBmaWxlcyBoYXZlIG5vdCBjaGFuZ2VkLCBCaXRiYWtlIGlzIGFibGUgdG8gdXNlCisgICAgICAgICAgICB0aGUgY2FjaGUuCisgICAgICAgICAgICBCaXRCYWtlIHRoZW4gcmVsb2FkcyB0aGUgY2FjaGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWNpcGUKKyAgICAgICAgICAgIGluc3RlYWQgb2YgcmVwYXJzaW5nIGl0IGZyb20gc2NyYXRjaC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUmVjaXBlIGZpbGUgY29sbGVjdGlvbnMgZXhpc3QgdG8gYWxsb3cgdGhlIHVzZXIgdG8KKyAgICAgICAgICAgIGhhdmUgbXVsdGlwbGUgcmVwb3NpdG9yaWVzIG9mCisgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZXMgdGhhdCBjb250YWluIHRoZSBzYW1lCisgICAgICAgICAgICBleGFjdCBwYWNrYWdlLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIG9uZSBjb3VsZCBlYXNpbHkgdXNlIHRoZW0gdG8gbWFrZSBvbmUncworICAgICAgICAgICAgb3duIGxvY2FsIGNvcHkgb2YgYW4gdXBzdHJlYW0gcmVwb3NpdG9yeSwgYnV0IHdpdGgKKyAgICAgICAgICAgIGN1c3RvbSBtb2RpZmljYXRpb25zIHRoYXQgb25lIGRvZXMgbm90IHdhbnQgdXBzdHJlYW0uCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgQkJGSUxFUyA9ICIvc3R1ZmYvb3BlbmVtYmVkZGVkLyovKi5iYiAvc3R1ZmYvb3BlbmVtYmVkZGVkLm1vZGlmaWVkLyovKi5iYiIKKyAgICBCQkZJTEVfQ09MTEVDVElPTlMgPSAidXBzdHJlYW0gbG9jYWwiCisgICAgQkJGSUxFX1BBVFRFUk5fdXBzdHJlYW0gPSAiXi9zdHVmZi9vcGVuZW1iZWRkZWQvIgorICAgIEJCRklMRV9QQVRURVJOX2xvY2FsID0gIl4vc3R1ZmYvb3BlbmVtYmVkZGVkLm1vZGlmaWVkLyIKKyAgICBCQkZJTEVfUFJJT1JJVFlfdXBzdHJlYW0gPSAiNSIKKyAgICBCQkZJTEVfUFJJT1JJVFlfbG9jYWwgPSAiMTAiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgbGF5ZXJzIG1lY2hhbmlzbSBpcyBub3cgdGhlIHByZWZlcnJlZCBtZXRob2Qgb2YgY29sbGVjdGluZworICAgICAgICAgICAgICAgIGNvZGUuCisgICAgICAgICAgICAgICAgV2hpbGUgdGhlIGNvbGxlY3Rpb25zIGNvZGUgcmVtYWlucywgaXRzIG1haW4gdXNlIGlzIHRvIHNldCBsYXllcgorICAgICAgICAgICAgICAgIHByaW9yaXRpZXMgYW5kIHRvIGRlYWwgd2l0aCBvdmVybGFwIChjb25mbGljdHMpIGJldHdlZW4gbGF5ZXJzLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2JiLWJpdGJha2UtcHJvdmlkZXJzJz4KKyAgICAgICAgPHRpdGxlPlByb3ZpZGVyczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBc3N1bWluZyBCaXRCYWtlIGhhcyBiZWVuIGluc3RydWN0ZWQgdG8gZXhlY3V0ZSBhIHRhcmdldAorICAgICAgICAgICAgYW5kIHRoYXQgYWxsIHRoZSByZWNpcGUgZmlsZXMgaGF2ZSBiZWVuIHBhcnNlZCwgQml0QmFrZQorICAgICAgICAgICAgc3RhcnRzIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGJ1aWxkIHRoZSB0YXJnZXQuCisgICAgICAgICAgICBCaXRCYWtlIGxvb2tzIHRocm91Z2ggdGhlIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IGxpc3QKKyAgICAgICAgICAgIGZvciBlYWNoIG9mIHRoZSByZWNpcGVzLgorICAgICAgICAgICAgQSA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBsaXN0IGlzIHRoZSBsaXN0IG9mIG5hbWVzIGJ5IHdoaWNoCisgICAgICAgICAgICB0aGUgcmVjaXBlIGNhbiBiZSBrbm93bi4KKyAgICAgICAgICAgIEVhY2ggcmVjaXBlJ3MgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4gbGlzdCBpcyBjcmVhdGVkCisgICAgICAgICAgICBpbXBsaWNpdGx5IHRocm91Z2ggdGhlIHJlY2lwZSdzCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZQorICAgICAgICAgICAgYW5kIGV4cGxpY2l0bHkgdGhyb3VnaCB0aGUgcmVjaXBlJ3MKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUk9WSURFUyc+PGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSwgd2hpY2ggaXMgb3B0aW9uYWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gYSByZWNpcGUgdXNlcyA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiwgdGhhdCByZWNpcGUncworICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBjYW4gYmUgZm91bmQgdW5kZXIgYW4gYWx0ZXJuYXRpdmUgbmFtZSBvciBuYW1lcyBvdGhlcgorICAgICAgICAgICAgdGhhbiB0aGUgaW1wbGljaXQgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gbmFtZS4KKyAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHN1cHBvc2UgYSByZWNpcGUgbmFtZWQgPGZpbGVuYW1lPmtleWJvYXJkXzEuMC5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICBjb250YWluZWQgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJPVklERVMgKz0gImZ1bGxrZXlib2FyZCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBsaXN0IGZvciB0aGlzIHJlY2lwZSBiZWNvbWVzCisgICAgICAgICAgICAia2V5Ym9hcmQiLCB3aGljaCBpcyBpbXBsaWNpdCwgYW5kICJmdWxsa2V5Ym9hcmQiLCB3aGljaCBpcyBleHBsaWNpdC4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdGhlIGZ1bmN0aW9uYWxpdHkgZm91bmQgaW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5rZXlib2FyZF8xLjAuYmI8L2ZpbGVuYW1lPiBjYW4gYmUgZm91bmQgdW5kZXIgdHdvCisgICAgICAgICAgICBkaWZmZXJlbnQgbmFtZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmItYml0YmFrZS1wcmVmZXJlbmNlcyc+CisgICAgICAgIDx0aXRsZT5QcmVmZXJlbmNlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4gbGlzdCBpcyBvbmx5IHBhcnQgb2YgdGhlIHNvbHV0aW9uCisgICAgICAgICAgICBmb3IgZmlndXJpbmcgb3V0IGEgdGFyZ2V0J3MgcmVjaXBlcy4KKyAgICAgICAgICAgIEJlY2F1c2UgdGFyZ2V0cyBtaWdodCBoYXZlIG11bHRpcGxlIHByb3ZpZGVycywgQml0QmFrZSBuZWVkcworICAgICAgICAgICAgdG8gcHJpb3JpdGl6ZSBwcm92aWRlcnMgYnkgZGV0ZXJtaW5pbmcgcHJvdmlkZXIgcHJlZmVyZW5jZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgY29tbW9uIGV4YW1wbGUgaW4gd2hpY2ggYSB0YXJnZXQgaGFzIG11bHRpcGxlIHByb3ZpZGVycworICAgICAgICAgICAgaXMgInZpcnR1YWwva2VybmVsIiwgd2hpY2ggaXMgb24gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBsaXN0IGZvciBlYWNoIGtlcm5lbCByZWNpcGUuCisgICAgICAgICAgICBFYWNoIG1hY2hpbmUgb2Z0ZW4gc2VsZWN0cyB0aGUgYmVzdCBrZXJuZWwgcHJvdmlkZXIgYnkgdXNpbmcgYQorICAgICAgICAgICAgbGluZSBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgaW4gdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPSAibGludXgteW9jdG8iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgZGVmYXVsdAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRUZFUlJFRF9QUk9WSURFUic+PGZpbGVuYW1lPlBSRUZFUlJFRF9QUk9WSURFUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgaXMgdGhlIHByb3ZpZGVyIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgQml0YmFrZSBpdGVyYXRlcyB0aHJvdWdoIGVhY2ggdGFyZ2V0IGl0IG5lZWRzIHRvIGJ1aWxkIGFuZAorICAgICAgICAgICAgcmVzb2x2ZXMgdGhlbSBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIHVzaW5nIHRoaXMgcHJvY2Vzcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVW5kZXJzdGFuZGluZyBob3cgcHJvdmlkZXJzIGFyZSBjaG9zZW4gaXMgbWFkZSBjb21wbGljYXRlZCBieSB0aGUgZmFjdAorICAgICAgICAgICAgdGhhdCBtdWx0aXBsZSB2ZXJzaW9ucyBtaWdodCBleGlzdCBmb3IgYSBnaXZlbiBwcm92aWRlci4KKyAgICAgICAgICAgIEJpdEJha2UgZGVmYXVsdHMgdG8gdGhlIGhpZ2hlc3QgdmVyc2lvbiBvZiBhIHByb3ZpZGVyLgorICAgICAgICAgICAgVmVyc2lvbiBjb21wYXJpc29ucyBhcmUgbWFkZSB1c2luZyB0aGUgc2FtZSBtZXRob2QgYXMgRGViaWFuLgorICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJFRkVSUkVEX1ZFUlNJT04nPjxmaWxlbmFtZT5QUkVGRVJSRURfVkVSU0lPTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgdG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIgdmVyc2lvbi4KKyAgICAgICAgICAgIFlvdSBjYW4gaW5mbHVlbmNlIHRoZSBvcmRlciBieSB1c2luZyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERUZBVUxUX1BSRUZFUkVOQ0UnPjxmaWxlbmFtZT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCeSBkZWZhdWx0LCBmaWxlcyBoYXZlIGEgcHJlZmVyZW5jZSBvZiAiMCIuCisgICAgICAgICAgICBTZXR0aW5nIDxmaWxlbmFtZT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2ZpbGVuYW1lPiB0byAiLTEiIG1ha2VzIHRoZQorICAgICAgICAgICAgcmVjaXBlIHVubGlrZWx5IHRvIGJlIHVzZWQgdW5sZXNzIGl0IGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4KKyAgICAgICAgICAgIFNldHRpbmcgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+IHRvICIxIiBtYWtlcyBpdAorICAgICAgICAgICAgbGlrZWx5IHRoZSByZWNpcGUgaXMgdXNlZC4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVGRVJSRURfVkVSU0lPTjwvZmlsZW5hbWU+IG92ZXJyaWRlcyBhbnkKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2ZpbGVuYW1lPiBzZXR0aW5nLgorICAgICAgICAgICAgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+IGlzIG9mdGVuIHVzZWQgdG8gbWFyayBuZXdlcgorICAgICAgICAgICAgYW5kIG1vcmUgZXhwZXJpbWVudGFsIHJlY2lwZSB2ZXJzaW9ucyB1bnRpbCB0aGV5IGhhdmUgdW5kZXJnb25lCisgICAgICAgICAgICBzdWZmaWNpZW50IHRlc3RpbmcgdG8gYmUgY29uc2lkZXJlZCBzdGFibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIOKAnHZlcnNpb25z4oCdIG9mIGEgZ2l2ZW4gcmVjaXBlLAorICAgICAgICAgICAgQml0QmFrZSBkZWZhdWx0cyB0byBzZWxlY3RpbmcgdGhlIG1vc3QgcmVjZW50CisgICAgICAgICAgICB2ZXJzaW9uLCB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZC4KKyAgICAgICAgICAgIElmIHRoZSByZWNpcGUgaW4gcXVlc3Rpb24gaGFzIGEKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERUZBVUxUX1BSRUZFUkVOQ0UnPjxmaWxlbmFtZT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHNldCBsb3dlciB0aGFuIHRoZSBvdGhlciByZWNpcGVzIChkZWZhdWx0IGlzIDApLCB0aGVuCisgICAgICAgICAgICBpdCB3aWxsIG5vdCBiZSBzZWxlY3RlZC4KKyAgICAgICAgICAgIFRoaXMgYWxsb3dzIHRoZSBwZXJzb24gb3IgcGVyc29ucyBtYWludGFpbmluZworICAgICAgICAgICAgdGhlIHJlcG9zaXRvcnkgb2YgcmVjaXBlIGZpbGVzIHRvIHNwZWNpZnkKKyAgICAgICAgICAgIHRoZWlyIHByZWZlcmVuY2UgZm9yIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHZlcnNpb24uCisgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSB1c2VyIGNhbiBzcGVjaWZ5IHRoZWlyIHByZWZlcnJlZCB2ZXJzaW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB0aGUgZmlyc3QgcmVjaXBlIGlzIG5hbWVkIDxmaWxlbmFtZT5hXzEuMS5iYjwvZmlsZW5hbWU+LCB0aGVuIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUKKyAgICAgICAgICAgIHdpbGwgYmUgc2V0IHRvIOKAnGHigJ0sIGFuZCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSB3aWxsIGJlIHNldCB0byAxLjEuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRodXMsIGlmIGEgcmVjaXBlIG5hbWVkIDxmaWxlbmFtZT5hXzEuMi5iYjwvZmlsZW5hbWU+IGV4aXN0cywgQml0QmFrZQorICAgICAgICAgICAgd2lsbCBjaG9vc2UgMS4yIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgZGVmaW5lIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUgaW4gYQorICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZSB0aGF0IEJpdEJha2UgcGFyc2VzLCB5b3UKKyAgICAgICAgICAgIGNhbiBjaGFuZ2UgdGhhdCBwcmVmZXJlbmNlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVGRVJSRURfVkVSU0lPTl9hID0gIjEuMSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQgaXMgY29tbW9uIGZvciBhIHJlY2lwZSB0byBwcm92aWRlIHR3byB2ZXJzaW9ucyAtLSBhIHN0YWJsZSwKKyAgICAgICAgICAgICAgICBudW1iZXJlZCAoYW5kIHByZWZlcnJlZCkgdmVyc2lvbiwgYW5kIGEgdmVyc2lvbiB0aGF0IGlzCisgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBjaGVja2VkIG91dCBmcm9tIGEgc291cmNlIGNvZGUgcmVwb3NpdG9yeSB0aGF0CisgICAgICAgICAgICAgICAgaXMgY29uc2lkZXJlZCBtb3JlICJibGVlZGluZyBlZGdlIiBidXQgY2FuIGJlIHNlbGVjdGVkIG9ubHkKKyAgICAgICAgICAgICAgICBleHBsaWNpdGx5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaW4gdGhlIE9wZW5FbWJlZGRlZCBjb2RlYmFzZSwgdGhlcmUgaXMgYSBzdGFuZGFyZCwKKyAgICAgICAgICAgICAgICB2ZXJzaW9uZWQgcmVjaXBlIGZpbGUgZm9yIEJ1c3lCb3gsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1c3lib3hfMS4yMi4xLmJiPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgYnV0IHRoZXJlIGlzIGFsc28gYSBHaXQtYmFzZWQgdmVyc2lvbiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVzeWJveF9naXQuYmI8L2ZpbGVuYW1lPiwgd2hpY2ggZXhwbGljaXRseSBjb250YWlucyB0aGUgbGluZQorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIHRvIGVuc3VyZSB0aGF0IHRoZSBudW1iZXJlZCwgc3RhYmxlIHZlcnNpb24gaXMgYWx3YXlzIHByZWZlcnJlZAorICAgICAgICAgICAgICAgIHVubGVzcyB0aGUgZGV2ZWxvcGVyIHNlbGVjdHMgb3RoZXJ3aXNlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L25vdGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2JiLWJpdGJha2UtZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgPHRpdGxlPkRlcGVuZGVuY2llczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBFYWNoIHRhcmdldCBCaXRCYWtlIGJ1aWxkcyBjb25zaXN0cyBvZiBtdWx0aXBsZSB0YXNrcyBzdWNoIGFzCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZmV0Y2g8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnVucGFjazwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPnBhdGNoPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5jb25maWd1cmU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+Y29tcGlsZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgRm9yIGJlc3QgcGVyZm9ybWFuY2Ugb24gbXVsdGktY29yZSBzeXN0ZW1zLCBCaXRCYWtlIGNvbnNpZGVycyBlYWNoCisgICAgICAgICAgICB0YXNrIGFzIGFuIGluZGVwZW5kZW50CisgICAgICAgICAgICBlbnRpdHkgd2l0aCBpdHMgb3duIHNldCBvZiBkZXBlbmRlbmNpZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIERlcGVuZGVuY2llcyBhcmUgZGVmaW5lZCB0aHJvdWdoIHNldmVyYWwgdmFyaWFibGVzLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIGFib3V0IHZhcmlhYmxlcyBCaXRCYWtlIHVzZXMgaW4KKyAgICAgICAgICAgIHRoZSA8bGluayBsaW5rZW5kPSdyZWYtdmFyaWFibGVzLWdsb3MnPlZhcmlhYmxlcyBHbG9zc2FyeTwvbGluaz4KKyAgICAgICAgICAgIG5lYXIgdGhlIGVuZCBvZiB0aGlzIG1hbnVhbC4KKyAgICAgICAgICAgIEF0IGEgYmFzaWMgbGV2ZWwsIGl0IGlzIHN1ZmZpY2llbnQgdG8ga25vdyB0aGF0IEJpdEJha2UgdXNlcyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPiBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlcyB3aGVuCisgICAgICAgICAgICBjYWxjdWxhdGluZyBkZXBlbmRlbmNpZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBCaXRCYWtlIGhhbmRsZXMgZGVwZW5kZW5jaWVzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZGVwZW5kZW5jaWVzJz5EZXBlbmRlbmNpZXM8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi1iaXRiYWtlLXRhc2tsaXN0Jz4KKyAgICAgICAgPHRpdGxlPlRoZSBUYXNrIExpc3Q8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmFzZWQgb24gdGhlIGdlbmVyYXRlZCBsaXN0IG9mIHByb3ZpZGVycyBhbmQgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24sCisgICAgICAgICAgICBCaXRCYWtlIGNhbiBub3cgY2FsY3VsYXRlIGV4YWN0bHkgd2hhdCB0YXNrcyBpdCBuZWVkcyB0byBydW4gYW5kIGluIHdoYXQKKyAgICAgICAgICAgIG9yZGVyIGl0IG5lZWRzIHRvIHJ1biB0aGVtLgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZXhlY3V0aW5nLXRhc2tzJz5FeGVjdXRpbmcgVGFza3M8L2xpbms+IiBzZWN0aW9uIGhhcyBtb3JlCisgICAgICAgICAgICBpbmZvcm1hdGlvbiBvbiBob3cgQml0QmFrZSBjaG9vc2VzIHdoaWNoIHRhc2sgdG8gZXhlY3V0ZSBuZXh0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgYnVpbGQgbm93IHN0YXJ0cyB3aXRoIEJpdEJha2UgZm9ya2luZyBvZmYgdGhyZWFkcyB1cCB0byB0aGUgbGltaXQgc2V0IGluIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX05VTUJFUl9USFJFQURTJz48ZmlsZW5hbWU+QkJfTlVNQkVSX1RIUkVBRFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgQml0QmFrZSBjb250aW51ZXMgdG8gZm9yayB0aHJlYWRzIGFzIGxvbmcgYXMgdGhlcmUgYXJlIHRhc2tzIHJlYWR5IHRvIHJ1biwKKyAgICAgICAgICAgIHRob3NlIHRhc2tzIGhhdmUgYWxsIHRoZWlyIGRlcGVuZGVuY2llcyBtZXQsIGFuZCB0aGUgdGhyZWFkIHRocmVzaG9sZCBoYXMgbm90IGJlZW4KKyAgICAgICAgICAgIGV4Y2VlZGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB5b3UgY2FuIGdyZWF0bHkgc3BlZWQgdXAgdGhlIGJ1aWxkIHRpbWUgYnkgcHJvcGVybHkgc2V0dGluZworICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5CQl9OVU1CRVJfVEhSRUFEUzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyBlYWNoIHRhc2sgY29tcGxldGVzLCBhIHRpbWVzdGFtcCBpcyB3cml0dGVuIHRvIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGJ5IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNUQU1QJz48ZmlsZW5hbWU+U1RBTVA8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUuCisgICAgICAgICAgICBPbiBzdWJzZXF1ZW50IHJ1bnMsIEJpdEJha2UgbG9va3MgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeSB3aXRoaW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT50bXAvc3RhbXBzPC9maWxlbmFtZT4gYW5kIGRvZXMgbm90IHJlcnVuCisgICAgICAgICAgICB0YXNrcyB0aGF0IGFyZSBhbHJlYWR5IGNvbXBsZXRlZCB1bmxlc3MgYSB0aW1lc3RhbXAgaXMgZm91bmQgdG8gYmUgaW52YWxpZC4KKyAgICAgICAgICAgIEN1cnJlbnRseSwgaW52YWxpZCB0aW1lc3RhbXBzIGFyZSBvbmx5IGNvbnNpZGVyZWQgb24gYSBwZXIKKyAgICAgICAgICAgIHJlY2lwZSBmaWxlIGJhc2lzLgorICAgICAgICAgICAgU28sIGZvciBleGFtcGxlLCBpZiB0aGUgY29uZmlndXJlIHN0YW1wIGhhcyBhIHRpbWVzdGFtcCBncmVhdGVyIHRoYW4gdGhlCisgICAgICAgICAgICBjb21waWxlIHRpbWVzdGFtcCBmb3IgYSBnaXZlbiB0YXJnZXQsIHRoZW4gdGhlIGNvbXBpbGUgdGFzayB3b3VsZCByZXJ1bi4KKyAgICAgICAgICAgIFJ1bm5pbmcgdGhlIGNvbXBpbGUgdGFzayBhZ2FpbiwgaG93ZXZlciwgaGFzIG5vIGVmZmVjdCBvbiBvdGhlciBwcm92aWRlcnMKKyAgICAgICAgICAgIHRoYXQgZGVwZW5kIG9uIHRoYXQgdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZXhhY3QgZm9ybWF0IG9mIHRoZSBzdGFtcHMgaXMgcGFydGx5IGNvbmZpZ3VyYWJsZS4KKyAgICAgICAgICAgIEluIG1vZGVybiB2ZXJzaW9ucyBvZiBCaXRCYWtlLCBhIGhhc2ggaXMgYXBwZW5kZWQgdG8gdGhlCisgICAgICAgICAgICBzdGFtcCBzbyB0aGF0IGlmIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMsIHRoZSBzdGFtcCBiZWNvbWVzCisgICAgICAgICAgICBpbnZhbGlkIGFuZCB0aGUgdGFzayBpcyBhdXRvbWF0aWNhbGx5IHJlcnVuLgorICAgICAgICAgICAgVGhpcyBoYXNoLCBvciBzaWduYXR1cmUgdXNlZCwgaXMgZ292ZXJuZWQgYnkgdGhlIHNpZ25hdHVyZSBwb2xpY3kKKyAgICAgICAgICAgIHRoYXQgaXMgY29uZmlndXJlZCAoc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NoZWNrc3Vtcyc+Q2hlY2tzdW1zIChTaWduYXR1cmVzKTwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbikuCisgICAgICAgICAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGFwcGVuZCBleHRyYSBtZXRhZGF0YSB0byB0aGUgc3RhbXAgdXNpbmcKKyAgICAgICAgICAgIHRoZSAic3RhbXAtZXh0cmEtaW5mbyIgdGFzayBmbGFnLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIE9wZW5FbWJlZGRlZCB1c2VzIHRoaXMgZmxhZyB0byBtYWtlIHNvbWUgdGFza3MgbWFjaGluZS1zcGVjaWZpYy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgU29tZSB0YXNrcyBhcmUgbWFya2VkIGFzICJub3N0YW1wIiB0YXNrcy4KKyAgICAgICAgICAgIE5vIHRpbWVzdGFtcCBmaWxlIGlzIGNyZWF0ZWQgd2hlbiB0aGVzZSB0YXNrcyBhcmUgcnVuLgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCAibm9zdGFtcCIgdGFza3MgYXJlIGFsd2F5cyByZXJ1bi4KKyAgICAgICAgPC9ub3RlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGFza3MsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0YXNrcyc+VGFza3M8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2V4ZWN1dGluZy10YXNrcyc+CisgICAgICAgIDx0aXRsZT5FeGVjdXRpbmcgVGFza3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGFza3MgY2FuIGJlIGVpdGhlciBhIHNoZWxsIHRhc2sgb3IgYSBQeXRob24gdGFzay4KKyAgICAgICAgICAgIEZvciBzaGVsbCB0YXNrcywgQml0QmFrZSB3cml0ZXMgYSBzaGVsbCBzY3JpcHQgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVQnPjxmaWxlbmFtZT5UPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0vcnVuLmRvX3Rhc2tuYW1lLnBpZDwvZmlsZW5hbWU+CisgICAgICAgICAgICBhbmQgdGhlbiBleGVjdXRlcyB0aGUgc2NyaXB0LgorICAgICAgICAgICAgVGhlIGdlbmVyYXRlZCBzaGVsbCBzY3JpcHQgY29udGFpbnMgYWxsIHRoZSBleHBvcnRlZCB2YXJpYWJsZXMsCisgICAgICAgICAgICBhbmQgdGhlIHNoZWxsIGZ1bmN0aW9ucyB3aXRoIGFsbCB2YXJpYWJsZXMgZXhwYW5kZWQuCisgICAgICAgICAgICBPdXRwdXQgZnJvbSB0aGUgc2hlbGwgc2NyaXB0IGdvZXMgdG8gdGhlIGZpbGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT4ke1R9L2xvZy5kb190YXNrbmFtZS5waWQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIExvb2tpbmcgYXQgdGhlIGV4cGFuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiB0aGUgcnVuIGZpbGUgYW5kCisgICAgICAgICAgICB0aGUgb3V0cHV0IGluIHRoZSBsb2cgZmlsZXMgaXMgYSB1c2VmdWwgZGVidWdnaW5nIHRlY2huaXF1ZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIFB5dGhvbiB0YXNrcywgQml0QmFrZSBleGVjdXRlcyB0aGUgdGFzayBpbnRlcm5hbGx5IGFuZCBsb2dzCisgICAgICAgICAgICBpbmZvcm1hdGlvbiB0byB0aGUgY29udHJvbGxpbmcgdGVybWluYWwuCisgICAgICAgICAgICBGdXR1cmUgdmVyc2lvbnMgb2YgQml0QmFrZSB3aWxsIHdyaXRlIHRoZSBmdW5jdGlvbnMgdG8gZmlsZXMKKyAgICAgICAgICAgIHNpbWlsYXIgdG8gdGhlIHdheSBzaGVsbCB0YXNrcyBhcmUgaGFuZGxlZC4KKyAgICAgICAgICAgIExvZ2dpbmcgd2lsbCBiZSBoYW5kbGVkIGluIGEgd2F5IHNpbWlsYXIgdG8gc2hlbGwgdGFza3MgYXMgd2VsbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIG9yZGVyIGluIHdoaWNoIEJpdEJha2UgcnVucyB0aGUgdGFza3MgaXMgY29udHJvbGxlZCBieSBpdHMKKyAgICAgICAgICAgIHRhc2sgc2NoZWR1bGVyLgorICAgICAgICAgICAgSXQgaXMgcG9zc2libGUgdG8gY29uZmlndXJlIHRoZSBzY2hlZHVsZXIgYW5kIGRlZmluZSBjdXN0b20KKyAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucyBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzLgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGVzZSB2YXJpYWJsZXMgdGhhdCBjb250cm9sIHRoZQorICAgICAgICAgICAgYmVoYXZpb3I6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX1NDSEVEVUxFUic+PGZpbGVuYW1lPkJCX1NDSEVEVUxFUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9TQ0hFRFVMRVJTJz48ZmlsZW5hbWU+QkJfU0NIRURVTEVSUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgSXQgaXMgcG9zc2libGUgdG8gaGF2ZSBmdW5jdGlvbnMgcnVuIGJlZm9yZSBhbmQgYWZ0ZXIgYSB0YXNrJ3MgbWFpbgorICAgICAgICAgICAgZnVuY3Rpb24uCisgICAgICAgICAgICBUaGlzIGlzIGRvbmUgdXNpbmcgdGhlICJwcmVmdW5jcyIgYW5kICJwb3N0ZnVuY3MiIGZsYWdzIG9mIHRoZSB0YXNrCisgICAgICAgICAgICB0aGF0IGxpc3RzIHRoZSBmdW5jdGlvbnMgdG8gcnVuLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2NoZWNrc3Vtcyc+CisgICAgICAgIDx0aXRsZT5DaGVja3N1bXMgKFNpZ25hdHVyZXMpPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgY2hlY2tzdW0gaXMgYSB1bmlxdWUgc2lnbmF0dXJlIG9mIGEgdGFzaydzIGlucHV0cy4KKyAgICAgICAgICAgIFRoZSBzaWduYXR1cmUgb2YgYSB0YXNrIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBpZiBhIHRhc2sKKyAgICAgICAgICAgIG5lZWRzIHRvIGJlIHJ1bi4KKyAgICAgICAgICAgIEJlY2F1c2UgaXQgaXMgYSBjaGFuZ2UgaW4gYSB0YXNrJ3MgaW5wdXRzIHRoYXQgdHJpZ2dlcnMgcnVubmluZworICAgICAgICAgICAgdGhlIHRhc2ssIEJpdEJha2UgbmVlZHMgdG8gZGV0ZWN0IGFsbCB0aGUgaW5wdXRzIHRvIGEgZ2l2ZW4gdGFzay4KKyAgICAgICAgICAgIEZvciBzaGVsbCB0YXNrcywgdGhpcyB0dXJucyBvdXQgdG8gYmUgZmFpcmx5IGVhc3kgYmVjYXVzZQorICAgICAgICAgICAgQml0QmFrZSBnZW5lcmF0ZXMgYSAicnVuIiBzaGVsbCBzY3JpcHQgZm9yIGVhY2ggdGFzayBhbmQKKyAgICAgICAgICAgIGl0IGlzIHBvc3NpYmxlIHRvIGNyZWF0ZSBhIGNoZWNrc3VtIHRoYXQgZ2l2ZXMgeW91IGEgZ29vZCBpZGVhIG9mIHdoZW4KKyAgICAgICAgICAgIHRoZSB0YXNrJ3MgZGF0YSBjaGFuZ2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBjb21wbGljYXRlIHRoZSBwcm9ibGVtLCBzb21lIHRoaW5ncyBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluCisgICAgICAgICAgICB0aGUgY2hlY2tzdW0uCisgICAgICAgICAgICBGaXJzdCwgdGhlcmUgaXMgdGhlIGFjdHVhbCBzcGVjaWZpYyBidWlsZCBwYXRoIG9mIGEgZ2l2ZW4gdGFzayAtCisgICAgICAgICAgICB0aGUgd29ya2luZyBkaXJlY3RvcnkuCisgICAgICAgICAgICBJdCBkb2VzIG5vdCBtYXR0ZXIgaWYgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGNoYW5nZXMgYmVjYXVzZSBpdCBzaG91bGQgbm90CisgICAgICAgICAgICBhZmZlY3QgdGhlIG91dHB1dCBmb3IgdGFyZ2V0IHBhY2thZ2VzLgorICAgICAgICAgICAgVGhlIHNpbXBsaXN0aWMgYXBwcm9hY2ggZm9yIGV4Y2x1ZGluZyB0aGUgd29ya2luZyBkaXJlY3RvcnkgaXMgdG8gc2V0CisgICAgICAgICAgICBpdCB0byBzb21lIGZpeGVkIHZhbHVlIGFuZCBjcmVhdGUgdGhlIGNoZWNrc3VtIGZvciB0aGUgInJ1biIgc2NyaXB0LgorICAgICAgICAgICAgQml0QmFrZSBnb2VzIG9uZSBzdGVwIGJldHRlciBhbmQgdXNlcyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9IQVNIQkFTRV9XSElURUxJU1QnPjxmaWxlbmFtZT5CQl9IQVNIQkFTRV9XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHRvIGRlZmluZSBhIGxpc3Qgb2YgdmFyaWFibGVzIHRoYXQgc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkCisgICAgICAgICAgICB3aGVuIGdlbmVyYXRpbmcgdGhlIHNpZ25hdHVyZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFub3RoZXIgcHJvYmxlbSByZXN1bHRzIGZyb20gdGhlICJydW4iIHNjcmlwdHMgY29udGFpbmluZyBmdW5jdGlvbnMgdGhhdAorICAgICAgICAgICAgbWlnaHQgb3IgbWlnaHQgbm90IGdldCBjYWxsZWQuCisgICAgICAgICAgICBUaGUgaW5jcmVtZW50YWwgYnVpbGQgc29sdXRpb24gY29udGFpbnMgY29kZSB0aGF0IGZpZ3VyZXMgb3V0IGRlcGVuZGVuY2llcworICAgICAgICAgICAgYmV0d2VlbiBzaGVsbCBmdW5jdGlvbnMuCisgICAgICAgICAgICBUaGlzIGNvZGUgaXMgdXNlZCB0byBwcnVuZSB0aGUgInJ1biIgc2NyaXB0cyBkb3duIHRvIHRoZSBtaW5pbXVtIHNldCwKKyAgICAgICAgICAgIHRoZXJlYnkgYWxsZXZpYXRpbmcgdGhpcyBwcm9ibGVtIGFuZCBtYWtpbmcgdGhlICJydW4iIHNjcmlwdHMgbXVjaCBtb3JlCisgICAgICAgICAgICByZWFkYWJsZSBhcyBhIGJvbnVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTbyBmYXIgd2UgaGF2ZSBzb2x1dGlvbnMgZm9yIHNoZWxsIHNjcmlwdHMuCisgICAgICAgICAgICBXaGF0IGFib3V0IFB5dGhvbiB0YXNrcz8KKyAgICAgICAgICAgIFRoZSBzYW1lIGFwcHJvYWNoIGFwcGxpZXMgZXZlbiB0aG91Z2ggdGhlc2UgdGFza3MgYXJlIG1vcmUgZGlmZmljdWx0LgorICAgICAgICAgICAgVGhlIHByb2Nlc3MgbmVlZHMgdG8gZmlndXJlIG91dCB3aGF0IHZhcmlhYmxlcyBhIFB5dGhvbiBmdW5jdGlvbiBhY2Nlc3NlcworICAgICAgICAgICAgYW5kIHdoYXQgZnVuY3Rpb25zIGl0IGNhbGxzLgorICAgICAgICAgICAgQWdhaW4sIHRoZSBpbmNyZW1lbnRhbCBidWlsZCBzb2x1dGlvbiBjb250YWlucyBjb2RlIHRoYXQgZmlyc3QgZmlndXJlcyBvdXQKKyAgICAgICAgICAgIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gZGVwZW5kZW5jaWVzLCBhbmQgdGhlbiBjcmVhdGVzIGEgY2hlY2tzdW0gZm9yIHRoZSBkYXRhCisgICAgICAgICAgICB1c2VkIGFzIHRoZSBpbnB1dCB0byB0aGUgdGFzay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTGlrZSB0aGUgd29ya2luZyBkaXJlY3RvcnkgY2FzZSwgc2l0dWF0aW9ucyBleGlzdCB3aGVyZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIHNob3VsZCBiZSBpZ25vcmVkLgorICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB5b3UgY2FuIGluc3RydWN0IHRoZSBidWlsZCBwcm9jZXNzIHRvIGlnbm9yZSBhIGRlcGVuZGVuY3kKKyAgICAgICAgICAgIGJ5IHVzaW5nIGEgbGluZSBsaWtlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfQVJDSFNbdmFyZGVwc2V4Y2x1ZGVdID0gIk1BQ0hJTkUiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgZW5zdXJlcyB0aGF0IHRoZSA8ZmlsZW5hbWU+UEFDS0FHRV9BUkNIUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGRvZXMgbm90CisgICAgICAgICAgICBkZXBlbmQgb24gdGhlIHZhbHVlIG9mIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4sIGV2ZW4gaWYgaXQgZG9lcyByZWZlcmVuY2UgaXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEVxdWFsbHksIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRvIGFkZCBkZXBlbmRlbmNpZXMgQml0QmFrZQorICAgICAgICAgICAgaXMgbm90IGFibGUgdG8gZmluZC4KKyAgICAgICAgICAgIFlvdSBjYW4gYWNjb21wbGlzaCB0aGlzIGJ5IHVzaW5nIGEgbGluZSBsaWtlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICBQQUNLQUdFX0FSQ0hTW3ZhcmRlcHNdID0gIk1BQ0hJTkUiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgZXhwbGljaXRseSBhZGRzIHRoZSA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+IHZhcmlhYmxlIGFzIGEKKyAgICAgICAgICAgIGRlcGVuZGVuY3kgZm9yIDxmaWxlbmFtZT5QQUNLQUdFX0FSQ0hTPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENvbnNpZGVyIGEgY2FzZSB3aXRoIGluLWxpbmUgUHl0aG9uLCBmb3IgZXhhbXBsZSwgd2hlcmUgQml0QmFrZSBpcyBub3QKKyAgICAgICAgICAgIGFibGUgdG8gZmlndXJlIG91dCBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICBXaGVuIHJ1bm5pbmcgaW4gZGVidWcgbW9kZSAoaS5lLiB1c2luZyA8ZmlsZW5hbWU+LURERDwvZmlsZW5hbWU+KSwgQml0QmFrZQorICAgICAgICAgICAgcHJvZHVjZXMgb3V0cHV0IHdoZW4gaXQgZGlzY292ZXJzIHNvbWV0aGluZyBmb3Igd2hpY2ggaXQgY2Fubm90IGZpZ3VyZSBvdXQKKyAgICAgICAgICAgIGRlcGVuZGVuY2llcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGh1cyBmYXIsIHRoaXMgc2VjdGlvbiBoYXMgbGltaXRlZCBkaXNjdXNzaW9uIHRvIHRoZSBkaXJlY3QgaW5wdXRzIGludG8gYSB0YXNrLgorICAgICAgICAgICAgSW5mb3JtYXRpb24gYmFzZWQgb24gZGlyZWN0IGlucHV0cyBpcyByZWZlcnJlZCB0byBhcyB0aGUgImJhc2VoYXNoIiBpbiB0aGUKKyAgICAgICAgICAgIGNvZGUuCisgICAgICAgICAgICBIb3dldmVyLCB0aGVyZSBpcyBzdGlsbCB0aGUgcXVlc3Rpb24gb2YgYSB0YXNrJ3MgaW5kaXJlY3QgaW5wdXRzIC0gdGhlCisgICAgICAgICAgICB0aGluZ3MgdGhhdCB3ZXJlIGFscmVhZHkgYnVpbHQgYW5kIHByZXNlbnQgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFRoZSBjaGVja3N1bSAob3Igc2lnbmF0dXJlKSBmb3IgYSBwYXJ0aWN1bGFyIHRhc2sgbmVlZHMgdG8gYWRkIHRoZSBoYXNoZXMKKyAgICAgICAgICAgIG9mIGFsbCB0aGUgdGFza3Mgb24gd2hpY2ggdGhlIHBhcnRpY3VsYXIgdGFzayBkZXBlbmRzLgorICAgICAgICAgICAgQ2hvb3Npbmcgd2hpY2ggZGVwZW5kZW5jaWVzIHRvIGFkZCBpcyBhIHBvbGljeSBkZWNpc2lvbi4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBlZmZlY3QgaXMgdG8gZ2VuZXJhdGUgYSBtYXN0ZXIgY2hlY2tzdW0gdGhhdCBjb21iaW5lcyB0aGUgYmFzZWhhc2gKKyAgICAgICAgICAgIGFuZCB0aGUgaGFzaGVzIG9mIHRoZSB0YXNrJ3MgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBdCB0aGUgY29kZSBsZXZlbCwgdGhlcmUgYXJlIGEgdmFyaWV0eSBvZiB3YXlzIGJvdGggdGhlIGJhc2VoYXNoIGFuZCB0aGUKKyAgICAgICAgICAgIGRlcGVuZGVudCB0YXNrIGhhc2hlcyBjYW4gYmUgaW5mbHVlbmNlZC4KKyAgICAgICAgICAgIFdpdGhpbiB0aGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUsIHdlIGNhbiBnaXZlIEJpdEJha2Ugc29tZSBleHRyYSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgdG8gaGVscCBpdCBjb25zdHJ1Y3QgdGhlIGJhc2VoYXNoLgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQgZWZmZWN0aXZlbHkgcmVzdWx0cyBpbiBhIGxpc3Qgb2YgZ2xvYmFsIHZhcmlhYmxlCisgICAgICAgICAgICBkZXBlbmRlbmN5IGV4Y2x1ZGVzIC0gdmFyaWFibGVzIG5ldmVyIGluY2x1ZGVkIGluIGFueSBjaGVja3N1bS4KKyAgICAgICAgICAgIFRoaXMgZXhhbXBsZSB1c2VzIHZhcmlhYmxlcyBmcm9tIE9wZW5FbWJlZGRlZCB0byBoZWxwIGlsbHVzdHJhdGUKKyAgICAgICAgICAgIHRoZSBjb25jZXB0OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9IQVNIQkFTRV9XSElURUxJU1QgPz0gIlRNUERJUiBGSUxFIFBBVEggUFdEIEJCX1RBU0tIQVNIIEJCUEFUSCBETF9ESVIgXAorICAgICAgICAgU1NUQVRFX0RJUiBUSElTRElSIEZJTEVTRVhUUkFQQVRIUyBGSUxFX0RJUk5BTUUgSE9NRSBMT0dOQU1FIFNIRUxMIFRFUk0gXAorICAgICAgICAgVVNFUiBGSUxFU1BBVEggU1RBR0lOR19ESVJfSE9TVCBTVEFHSU5HX0RJUl9UQVJHRVQgQ09SRUJBU0UgUFJTRVJWX0hPU1QgXAorICAgICAgICAgUFJTRVJWX0RVTVBESVIgUFJTRVJWX0RVTVBGSUxFIFBSU0VSVl9MT0NLRE9XTiBQQVJBTExFTF9NQUtFIFwKKyAgICAgICAgIENDQUNIRV9ESVIgRVhURVJOQUxfVE9PTENIQUlOIENDQUNIRSBDQ0FDSEVfRElTQUJMRSBMSUNFTlNFX1BBVEggU0RLUEtHU1VGRklYIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgZXhjbHVkZXMgdGhlIHdvcmsgZGlyZWN0b3J5LCB3aGljaCBpcyBwYXJ0IG9mCisgICAgICAgICAgICA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBydWxlcyBmb3IgZGVjaWRpbmcgd2hpY2ggaGFzaGVzIG9mIGRlcGVuZGVudCB0YXNrcyB0byBpbmNsdWRlIHRocm91Z2gKKyAgICAgICAgICAgIGRlcGVuZGVuY3kgY2hhaW5zIGFyZSBtb3JlIGNvbXBsZXggYW5kIGFyZSBnZW5lcmFsbHkgYWNjb21wbGlzaGVkIHdpdGggYQorICAgICAgICAgICAgUHl0aG9uIGZ1bmN0aW9uLgorICAgICAgICAgICAgVGhlIGNvZGUgaW4gPGZpbGVuYW1lPm1ldGEvbGliL29lL3NzdGF0ZXNpZy5weTwvZmlsZW5hbWU+IHNob3dzIHR3byBleGFtcGxlcworICAgICAgICAgICAgb2YgdGhpcyBhbmQgYWxzbyBpbGx1c3RyYXRlcyBob3cgeW91IGNhbiBpbnNlcnQgeW91ciBvd24gcG9saWN5IGludG8gdGhlIHN5c3RlbQorICAgICAgICAgICAgaWYgc28gZGVzaXJlZC4KKyAgICAgICAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB0d28gYmFzaWMgc2lnbmF0dXJlIGdlbmVyYXRvcnMgT3BlbkVtYmVkZGVkIENvcmUKKyAgICAgICAgICAgIHVzZXM6ICAiT0VCYXNpYyIgYW5kICJPRUJhc2ljSGFzaCIuCisgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGVyZSBpcyBhIGR1bW15ICJub29wIiBzaWduYXR1cmUgaGFuZGxlciBlbmFibGVkIGluIEJpdEJha2UuCisgICAgICAgICAgICBUaGlzIG1lYW5zIHRoYXQgYmVoYXZpb3IgaXMgdW5jaGFuZ2VkIGZyb20gcHJldmlvdXMgdmVyc2lvbnMuCisgICAgICAgICAgICA8ZmlsZW5hbWU+T0UtQ29yZTwvZmlsZW5hbWU+IHVzZXMgdGhlICJPRUJhc2ljSGFzaCIgc2lnbmF0dXJlIGhhbmRsZXIgYnkgZGVmYXVsdAorICAgICAgICAgICAgdGhyb3VnaCB0aGlzIHNldHRpbmcgaW4gdGhlIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9TSUdOQVRVUkVfSEFORExFUiA/PSAiT0VCYXNpY0hhc2giCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgIk9FQmFzaWNIYXNoIiA8ZmlsZW5hbWU+QkJfU0lHTkFUVVJFX0hBTkRMRVI8L2ZpbGVuYW1lPiBpcyB0aGUgc2FtZSBhcyB0aGUKKyAgICAgICAgICAgICJPRUJhc2ljIiB2ZXJzaW9uIGJ1dCBhZGRzIHRoZSB0YXNrIGhhc2ggdG8gdGhlIHN0YW1wIGZpbGVzLgorICAgICAgICAgICAgVGhpcyByZXN1bHRzIGluIGFueSBtZXRhZGF0YSBjaGFuZ2UgdGhhdCBjaGFuZ2VzIHRoZSB0YXNrIGhhc2gsIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgIGNhdXNpbmcgdGhlIHRhc2sgdG8gYmUgcnVuIGFnYWluLgorICAgICAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBuZWVkIHRvIGJ1bXAKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YWx1ZXMsIGFuZCBjaGFuZ2VzIHRvIG1ldGFkYXRhIGF1dG9tYXRpY2FsbHkgcmlwcGxlIGFjcm9zcyB0aGUgYnVpbGQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEl0IGlzIGFsc28gd29ydGggbm90aW5nIHRoYXQgdGhlIGVuZCByZXN1bHQgb2YgdGhlc2Ugc2lnbmF0dXJlIGdlbmVyYXRvcnMgaXMgdG8KKyAgICAgICAgICAgIG1ha2Ugc29tZSBkZXBlbmRlbmN5IGFuZCBoYXNoIGluZm9ybWF0aW9uIGF2YWlsYWJsZSB0byB0aGUgYnVpbGQuCisgICAgICAgICAgICBUaGlzIGluZm9ybWF0aW9uIGluY2x1ZGVzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX0JBU0VIQVNIX3Rhc2stPC9maWxlbmFtZT48cmVwbGFjZWFibGU+dGFza25hbWU8L3JlcGxhY2VhYmxlPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2UgaGFzaGVzIGZvciBlYWNoIHRhc2sgaW4gdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQl9CQVNFSEFTSF88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5maWxlbmFtZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPjo8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBoYXNoZXMgZm9yIGVhY2ggZGVwZW5kZW50IHRhc2suCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJIQVNIREVQU188L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5maWxlbmFtZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPjo8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgdGFzayBkZXBlbmRlbmNpZXMgZm9yIGVhY2ggdGFzay4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQl9UQVNLSEFTSDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgaGFzaCBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgd29ydGggbm90aW5nIHRoYXQgQml0QmFrZSdzICItUyIgb3B0aW9uIGxldHMgeW91CisgICAgICAgICAgICBkZWJ1ZyBCaXRiYWtlJ3MgcHJvY2Vzc2luZyBvZiBzaWduYXR1cmVzLgorICAgICAgICAgICAgVGhlIG9wdGlvbnMgcGFzc2VkIHRvIC1TIGFsbG93IGRpZmZlcmVudCBkZWJ1Z2dpbmcgbW9kZXMKKyAgICAgICAgICAgIHRvIGJlIHVzZWQsIGVpdGhlciB1c2luZyBCaXRCYWtlJ3Mgb3duIGRlYnVnIGZ1bmN0aW9ucworICAgICAgICAgICAgb3IgcG9zc2libHkgdGhvc2UgZGVmaW5lZCBpbiB0aGUgbWV0YWRhdGEvc2lnbmF0dXJlIGhhbmRsZXIKKyAgICAgICAgICAgIGl0c2VsZi4KKyAgICAgICAgICAgIFRoZSBzaW1wbGVzdCBwYXJhbWV0ZXIgdG8gcGFzcyBpcyAibm9uZSIsIHdoaWNoIGNhdXNlcyBhCisgICAgICAgICAgICBzZXQgb2Ygc2lnbmF0dXJlIGluZm9ybWF0aW9uIHRvIGJlIHdyaXR0ZW4gb3V0IGludG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5TVEFNUF9ESVI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgdGFyZ2V0cyBzcGVjaWZpZWQuCisgICAgICAgICAgICBUaGUgb3RoZXIgY3VycmVudGx5IGF2YWlsYWJsZSBwYXJhbWV0ZXIgaXMgInByaW50ZGlmZiIsCisgICAgICAgICAgICB3aGljaCBjYXVzZXMgQml0QmFrZSB0byB0cnkgdG8gZXN0YWJsaXNoIHRoZSBjbG9zZXN0CisgICAgICAgICAgICBzaWduYXR1cmUgbWF0Y2ggaXQgY2FuIChlLmcuIGluIHRoZSBzc3RhdGUgY2FjaGUpIGFuZCB0aGVuCisgICAgICAgICAgICBydW4gPGZpbGVuYW1lPmJpdGJha2UtZGlmZnNpZ3M8L2ZpbGVuYW1lPiBvdmVyIHRoZSBtYXRjaGVzCisgICAgICAgICAgICB0byBkZXRlcm1pbmUgdGhlIHN0YW1wcyBhbmQgZGVsdGEgd2hlcmUgdGhlc2UgdHdvCisgICAgICAgICAgICBzdGFtcCB0cmVlcyBkaXZlcmdlLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgSXQgaXMgbGlrZWx5IHRoYXQgZnV0dXJlIHZlcnNpb25zIG9mIEJpdEJha2Ugd2lsbAorICAgICAgICAgICAgICAgIHByb3ZpZGUgb3RoZXIgc2lnbmF0dXJlIGhhbmRsZXJzIHRyaWdnZXJlZCB0aHJvdWdoCisgICAgICAgICAgICAgICAgYWRkaXRpb25hbCAiLVMiIHBhcmFtZXRlcnMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIGNoZWNrc3VtIG1ldGFkYXRhIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Rhc2stY2hlY2tzdW1zLWFuZC1zZXRzY2VuZSc+VGFzayBDaGVja3N1bXMgYW5kIFNldHNjZW5lPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc2V0c2NlbmUnPgorICAgICAgICA8dGl0bGU+U2V0c2NlbmU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHNldHNjZW5lIHByb2Nlc3MgZW5hYmxlcyBCaXRCYWtlIHRvIGhhbmRsZSAicHJlLWJ1aWx0IiBhcnRpZmFjdHMuCisgICAgICAgICAgICBUaGUgYWJpbGl0eSB0byBoYW5kbGUgYW5kIHJldXNlIHRoZXNlIGFydGlmYWN0cyBhbGxvd3MgQml0QmFrZQorICAgICAgICAgICAgdGhlIGx1eHVyeSBvZiBub3QgaGF2aW5nIHRvIGJ1aWxkIHNvbWV0aGluZyBmcm9tIHNjcmF0Y2ggZXZlcnkgdGltZS4KKyAgICAgICAgICAgIEluc3RlYWQsIEJpdEJha2UgY2FuIHVzZSwgd2hlbiBwb3NzaWJsZSwgZXhpc3RpbmcgYnVpbGQgYXJ0aWZhY3RzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIG5lZWRzIHRvIGhhdmUgcmVsaWFibGUgZGF0YSBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IGFuCisgICAgICAgICAgICBhcnRpZmFjdCBpcyBjb21wYXRpYmxlLgorICAgICAgICAgICAgU2lnbmF0dXJlcywgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLCBwcm92aWRlIGFuIGlkZWFsCisgICAgICAgICAgICB3YXkgb2YgcmVwcmVzZW50aW5nIHdoZXRoZXIgYW4gYXJ0aWZhY3QgaXMgY29tcGF0aWJsZS4KKyAgICAgICAgICAgIElmIGEgc2lnbmF0dXJlIGlzIHRoZSBzYW1lLCBhbiBvYmplY3QgY2FuIGJlIHJldXNlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgYW4gb2JqZWN0IGNhbiBiZSByZXVzZWQsIHRoZSBwcm9ibGVtIHRoZW4gYmVjb21lcyBob3cgdG8KKyAgICAgICAgICAgIHJlcGxhY2UgYSBnaXZlbiB0YXNrIG9yIHNldCBvZiB0YXNrcyB3aXRoIHRoZSBwcmUtYnVpbHQgYXJ0aWZhY3QuCisgICAgICAgICAgICBCaXRCYWtlIHNvbHZlcyB0aGUgcHJvYmxlbSB3aXRoIHRoZSAic2V0c2NlbmUiIHByb2Nlc3MuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gQml0QmFrZSBpcyBhc2tlZCB0byBidWlsZCBhIGdpdmVuIHRhcmdldCwgYmVmb3JlIGJ1aWxkaW5nIGFueXRoaW5nLAorICAgICAgICAgICAgaXQgZmlyc3QgYXNrcyB3aGV0aGVyIGNhY2hlZCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgZm9yIGFueSBvZiB0aGUKKyAgICAgICAgICAgIHRhcmdldHMgaXQncyBidWlsZGluZywgb3IgYW55IG9mIHRoZSBpbnRlcm1lZGlhdGUgdGFyZ2V0cy4KKyAgICAgICAgICAgIElmIGNhY2hlZCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUsIEJpdEJha2UgdXNlcyB0aGlzIGluZm9ybWF0aW9uIGluc3RlYWQgb2YKKyAgICAgICAgICAgIHJ1bm5pbmcgdGhlIG1haW4gdGFza3MuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgZmlyc3QgY2FsbHMgdGhlIGZ1bmN0aW9uIGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfSEFTSENIRUNLX0ZVTkNUSU9OJz48ZmlsZW5hbWU+QkJfSEFTSENIRUNLX0ZVTkNUSU9OPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSB3aXRoIGEgbGlzdCBvZiB0YXNrcyBhbmQgY29ycmVzcG9uZGluZworICAgICAgICAgICAgaGFzaGVzIGl0IHdhbnRzIHRvIGJ1aWxkLgorICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBmYXN0IGFuZCByZXR1cm5zIGEgbGlzdAorICAgICAgICAgICAgb2YgdGhlIHRhc2tzIGZvciB3aGljaCBpdCBiZWxpZXZlcyBpbiBjYW4gb2J0YWluIGFydGlmYWN0cy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTmV4dCwgZm9yIGVhY2ggb2YgdGhlIHRhc2tzIHRoYXQgd2VyZSByZXR1cm5lZCBhcyBwb3NzaWJpbGl0aWVzLAorICAgICAgICAgICAgQml0QmFrZSBleGVjdXRlcyBhIHNldHNjZW5lIHZlcnNpb24gb2YgdGhlIHRhc2sgdGhhdCB0aGUgcG9zc2libGUKKyAgICAgICAgICAgIGFydGlmYWN0IGNvdmVycy4KKyAgICAgICAgICAgIFNldHNjZW5lIHZlcnNpb25zIG9mIGEgdGFzayBoYXZlIHRoZSBzdHJpbmcgIl9zZXRzY2VuZSIgYXBwZW5kZWQgdG8gdGhlCisgICAgICAgICAgICB0YXNrIG5hbWUuCisgICAgICAgICAgICBTbywgZm9yIGV4YW1wbGUsIHRoZSB0YXNrIHdpdGggdGhlIG5hbWUgPGZpbGVuYW1lPnh4eDwvZmlsZW5hbWU+IGhhcworICAgICAgICAgICAgYSBzZXRzY2VuZSB0YXNrIG5hbWVkIDxmaWxlbmFtZT54eHhfc2V0c2NlbmU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoZSBzZXRzY2VuZSB2ZXJzaW9uIG9mIHRoZSB0YXNrIGV4ZWN1dGVzIGFuZCBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5CisgICAgICAgICAgICBhcnRpZmFjdHMgcmV0dXJuaW5nIGVpdGhlciBzdWNjZXNzIG9yIGZhaWx1cmUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIHByZXZpb3VzbHkgbWVudGlvbmVkLCBhbiBhcnRpZmFjdCBjYW4gY292ZXIgbW9yZSB0aGFuIG9uZSB0YXNrLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGl0IGlzIHBvaW50bGVzcyB0byBvYnRhaW4gYSBjb21waWxlciBpZiB5b3UKKyAgICAgICAgICAgIGFscmVhZHkgaGF2ZSB0aGUgY29tcGlsZWQgYmluYXJ5LgorICAgICAgICAgICAgVG8gaGFuZGxlIHRoaXMsIEJpdEJha2UgY2FsbHMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfU0VUU0NFTkVfREVQVkFMSUQnPjxmaWxlbmFtZT5CQl9TRVRTQ0VORV9ERVBWQUxJRDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgZnVuY3Rpb24gZm9yIGVhY2ggc3VjY2Vzc2Z1bCBzZXRzY2VuZSB0YXNrIHRvIGtub3cgd2hldGhlciBvciBub3QgaXQgbmVlZHMKKyAgICAgICAgICAgIHRvIG9idGFpbiB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoYXQgdGFzay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmluYWxseSwgYWZ0ZXIgYWxsIHRoZSBzZXRzY2VuZSB0YXNrcyBoYXZlIGV4ZWN1dGVkLCBCaXRCYWtlIGNhbGxzIHRoZQorICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVkIGluCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfU0VUU0NFTkVfVkVSSUZZX0ZVTkNUSU9OJz48ZmlsZW5hbWU+QkJfU0VUU0NFTkVfVkVSSUZZX0ZVTkNUSU9OPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB3aXRoIHRoZSBsaXN0IG9mIHRhc2tzIEJpdEJha2UgdGhpbmtzIGhhcyBiZWVuICJjb3ZlcmVkIi4KKyAgICAgICAgICAgIFRoZSBtZXRhZGF0YSBjYW4gdGhlbiBlbnN1cmUgdGhhdCB0aGlzIGxpc3QgaXMgY29ycmVjdCBhbmQgY2FuCisgICAgICAgICAgICBpbmZvcm0gQml0QmFrZSB0aGF0IGl0IHdhbnRzIHNwZWNpZmljIHRhc2tzIHRvIGJlIHJ1biByZWdhcmRsZXNzCisgICAgICAgICAgICBvZiB0aGUgc2V0c2NlbmUgcmVzdWx0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiBzZXRzY2VuZSBtZXRhZGF0YSBpbiB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0YXNrLWNoZWNrc3Vtcy1hbmQtc2V0c2NlbmUnPlRhc2sgQ2hlY2tzdW1zIGFuZCBTZXRzY2VuZTwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtZmV0Y2hpbmcueG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtZmV0Y2hpbmcueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNjhjZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1mZXRjaGluZy54bWwKQEAgLTAsMCArMSw3NjUgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiPgorCis8Y2hhcHRlcj4KKzx0aXRsZT5GaWxlIERvd25sb2FkIFN1cHBvcnQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEJpdEJha2UncyBmZXRjaCBtb2R1bGUgaXMgYSBzdGFuZGFsb25lIHBpZWNlIG9mIGxpYnJhcnkgY29kZQorICAgICAgICB0aGF0IGRlYWxzIHdpdGggdGhlIGludHJpY2FjaWVzIG9mIGRvd25sb2FkaW5nIHNvdXJjZSBjb2RlCisgICAgICAgIGFuZCBmaWxlcyBmcm9tIHJlbW90ZSBzeXN0ZW1zLgorICAgICAgICBGZXRjaGluZyBzb3VyY2UgY29kZSBpcyBvbmUgb2YgdGhlIGNvcm5lcnN0b25lcyBvZiBidWlsZGluZyBzb2Z0d2FyZS4KKyAgICAgICAgQXMgc3VjaCwgdGhpcyBtb2R1bGUgZm9ybXMgYW4gaW1wb3J0YW50IHBhcnQgb2YgQml0QmFrZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGN1cnJlbnQgZmV0Y2ggbW9kdWxlIGlzIGNhbGxlZCAiZmV0Y2gyIiBhbmQgcmVmZXJzIHRvIHRoZQorICAgICAgICBmYWN0IHRoYXQgaXQgaXMgdGhlIHNlY29uZCBtYWpvciB2ZXJzaW9uIG9mIHRoZSBBUEkuCisgICAgICAgIFRoZSBvcmlnaW5hbCB2ZXJzaW9uIGlzIG9ic29sZXRlIGFuZCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGNvZGViYXNlLgorICAgICAgICBUaHVzLCBpbiBhbGwgY2FzZXMsICJmZXRjaCIgcmVmZXJzIHRvICJmZXRjaDIiIGluIHRoaXMKKyAgICAgICAgbWFudWFsLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSd0aGUtZG93bmxvYWQtZmV0Y2gnPgorICAgICAgICA8dGl0bGU+VGhlIERvd25sb2FkIChGZXRjaCk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSB0YWtlcyBzZXZlcmFsIHN0ZXBzIHdoZW4gZmV0Y2hpbmcgc291cmNlIGNvZGUgb3IgZmlsZXMuCisgICAgICAgICAgICBUaGUgZmV0Y2hlciBjb2RlYmFzZSBkZWFscyB3aXRoIHR3byBkaXN0aW5jdCBwcm9jZXNzZXMgaW4gb3JkZXI6CisgICAgICAgICAgICBvYnRhaW5pbmcgdGhlIGZpbGVzIGZyb20gc29tZXdoZXJlIChjYWNoZWQgb3Igb3RoZXJ3aXNlKQorICAgICAgICAgICAgYW5kIHRoZW4gdW5wYWNraW5nIHRob3NlIGZpbGVzIGludG8gYSBzcGVjaWZpYyBsb2NhdGlvbiBhbmQKKyAgICAgICAgICAgIHBlcmhhcHMgaW4gYSBzcGVjaWZpYyB3YXkuCisgICAgICAgICAgICBHZXR0aW5nIGFuZCB1bnBhY2tpbmcgdGhlIGZpbGVzIGlzIG9mdGVuIG9wdGlvbmFsbHkgZm9sbG93ZWQKKyAgICAgICAgICAgIGJ5IHBhdGNoaW5nLgorICAgICAgICAgICAgUGF0Y2hpbmcsIGhvd2V2ZXIsIGlzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgbW9kdWxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgY29kZSB0byBleGVjdXRlIHRoZSBmaXJzdCBwYXJ0IG9mIHRoaXMgcHJvY2VzcywgYSBmZXRjaCwKKyAgICAgICAgICAgIGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHNyY191cmkgPSAoZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKHNyY191cmksIGQpCisgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBjb2RlIHNldHMgdXAgYW4gaW5zdGFuY2Ugb2YgdGhlIGZldGNoIGNsYXNzLgorICAgICAgICAgICAgVGhlIGluc3RhbmNlIHVzZXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBVUkxzIGZyb20gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB0aGVuIGNhbGxzIHRoZSA8ZmlsZW5hbWU+ZG93bmxvYWQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgbWV0aG9kIHRvIGRvd25sb2FkIHRoZSBmaWxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGluc3RhbnRpYXRpb24gb2YgdGhlIGZldGNoIGNsYXNzIGlzIHVzdWFsbHkgZm9sbG93ZWQgYnk6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RkaXIgPSBsLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgIGZldGNoZXIudW5wYWNrKHJvb3RkaXIpCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGNvZGUgdW5wYWNrcyB0aGUgZG93bmxvYWRlZCBmaWxlcyB0byB0aGUKKyAgICAgICAgICAgIHNwZWNpZmllZCBieSA8ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRm9yIGNvbnZlbmllbmNlLCB0aGUgbmFtaW5nIGluIHRoZXNlIGV4YW1wbGVzIG1hdGNoZXMKKyAgICAgICAgICAgICAgICB0aGUgdmFyaWFibGVzIHVzZWQgYnkgT3BlbkVtYmVkZGVkLgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHNlZSB0aGUgYWJvdmUgY29kZSBpbiBhY3Rpb24sIGV4YW1pbmUKKyAgICAgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGNsYXNzIGZpbGUgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhcmlhYmxlcyBhcmUgbm90IGhhcmRjb2RlZCBpbnRvIHRoZSBmZXRjaGVyLCBzaW5jZSB0aG9zZSBmZXRjaGVyCisgICAgICAgICAgICBtZXRob2RzIGNhbiBiZSAoYW5kIGFyZSkgY2FsbGVkIHdpdGggZGlmZmVyZW50IHZhcmlhYmxlIG5hbWVzLgorICAgICAgICAgICAgSW4gT3BlbkVtYmVkZGVkIGZvciBleGFtcGxlLCB0aGUgc2hhcmVkIHN0YXRlIChzc3RhdGUpIGNvZGUgdXNlcworICAgICAgICAgICAgdGhlIGZldGNoIG1vZHVsZSB0byBmZXRjaCB0aGUgc3N0YXRlIGZpbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHRoZSA8ZmlsZW5hbWU+ZG93bmxvYWQoKTwvZmlsZW5hbWU+IG1ldGhvZCBpcyBjYWxsZWQsCisgICAgICAgICAgICBCaXRCYWtlIHRyaWVzIHRvIHJlc29sdmUgdGhlIFVSTHMgYnkgbG9va2luZyBmb3Igc291cmNlIGZpbGVzCisgICAgICAgICAgICBpbiBhIHNwZWNpZmljIHNlYXJjaCBvcmRlcjoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmUtbWlycm9yIFNpdGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgZmlyc3QgdXNlcyBwcmUtbWlycm9ycyB0byB0cnkgYW5kIGZpbmQgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBsb2NhdGlvbnMgYXJlIGRlZmluZWQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Tb3VyY2UgVVJJOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIElmIHByZS1taXJyb3JzIGZhaWwsIEJpdEJha2UgdXNlcyB0aGUgb3JpZ2luYWwgVVJMIChlLmcgZnJvbQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NaXJyb3IgU2l0ZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgZmV0Y2ggZmFpbHVyZXMgb2NjdXIsIEJpdEJha2UgbmV4dCB1c2VzIG1pcnJvciBsb2NhdGlvbnMgYXMKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1JUlJPUlMnPjxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgZWFjaCBVUkwgcGFzc2VkIHRvIHRoZSBmZXRjaGVyLCB0aGUgZmV0Y2hlcgorICAgICAgICAgICAgY2FsbHMgdGhlIHN1Ym1vZHVsZSB0aGF0IGhhbmRsZXMgdGhhdCBwYXJ0aWN1bGFyIFVSTCB0eXBlLgorICAgICAgICAgICAgVGhpcyBiZWhhdmlvciBjYW4gYmUgdGhlIHNvdXJjZSBvZiBzb21lIGNvbmZ1c2lvbiB3aGVuIHlvdQorICAgICAgICAgICAgYXJlIHByb3ZpZGluZyBVUkxzIGZvciB0aGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nIHR3byBVUkxzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZ2l0L3Bva3k7cHJvdG9jb2w9Z2l0CisgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2dpdC9wb2t5O3Byb3RvY29sPWh0dHAKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEluIHRoZSBmb3JtZXIgY2FzZSwgdGhlIFVSTCBpcyBwYXNzZWQgdG8gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+d2dldDwvZmlsZW5hbWU+IGZldGNoZXIsIHdoaWNoIGRvZXMgbm90CisgICAgICAgICAgICB1bmRlcnN0YW5kICJnaXQiLgorICAgICAgICAgICAgVGhlcmVmb3JlLCB0aGUgbGF0dGVyIGNhc2UgaXMgdGhlIGNvcnJlY3QgZm9ybSBzaW5jZSB0aGUKKyAgICAgICAgICAgIEdpdCBmZXRjaGVyIGRvZXMga25vdyBob3cgdG8gdXNlIEhUVFAgYXMgYSB0cmFuc3BvcnQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgdGhhdCBzaG93IGNvbW1vbmx5IHVzZWQgbWlycm9yCisgICAgICAgICAgICBkZWZpbml0aW9uczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFTUlSUk9SUyA/PSAiXAorICAgICAgICAgYnpyOi8vLiovLiogICBodHRwOi8vc29tZW1pcnJvci5vcmcvc291cmNlcy8gXG4gXAorICAgICAgICAgY3ZzOi8vLiovLiogICBodHRwOi8vc29tZW1pcnJvci5vcmcvc291cmNlcy8gXG4gXAorICAgICAgICAgZ2l0Oi8vLiovLiogICBodHRwOi8vc29tZW1pcnJvci5vcmcvc291cmNlcy8gXG4gXAorICAgICAgICAgaGc6Ly8uKi8uKiAgICBodHRwOi8vc29tZW1pcnJvci5vcmcvc291cmNlcy8gXG4gXAorICAgICAgICAgb3NjOi8vLiovLiogICBodHRwOi8vc29tZW1pcnJvci5vcmcvc291cmNlcy8gXG4gXAorICAgICAgICAgcDQ6Ly8uKi8uKiAgICBodHRwOi8vc29tZW1pcnJvci5vcmcvc291cmNlcy8gXG4gXAorICAgICAgICAgc3ZuOi8vLiovLiogICBodHRwOi8vc29tZW1pcnJvci5vcmcvc291cmNlcy8gXG4iCisKKyAgICAgTUlSUk9SUyA9KyAiXAorICAgICAgICAgZnRwOi8vLiovLiogICAgICBodHRwOi8vc29tZW1pcnJvci5vcmcvc291cmNlcy8gXG4gXAorICAgICAgICAgaHR0cDovLy4qLy4qICAgICBodHRwOi8vc29tZW1pcnJvci5vcmcvc291cmNlcy8gXG4gXAorICAgICAgICAgaHR0cHM6Ly8uKi8uKiAgICBodHRwOi8vc29tZW1pcnJvci5vcmcvc291cmNlcy8gXG4iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJdCBpcyB1c2VmdWwgdG8gbm90ZSB0aGF0IEJpdEJha2Ugc3VwcG9ydHMKKyAgICAgICAgICAgIGNyb3NzLVVSTHMuCisgICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBtaXJyb3IgYSBHaXQgcmVwb3NpdG9yeSBvbiBhbiBIVFRQCisgICAgICAgICAgICBzZXJ2ZXIgYXMgYSB0YXJiYWxsLgorICAgICAgICAgICAgVGhpcyBpcyB3aGF0IHRoZSA8ZmlsZW5hbWU+Z2l0Oi8vPC9maWxlbmFtZT4gbWFwcGluZyBpbgorICAgICAgICAgICAgdGhlIHByZXZpb3VzIGV4YW1wbGUgZG9lcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU2luY2UgbmV0d29yayBhY2Nlc3NlcyBhcmUgc2xvdywgQml0YmFrZSBtYWludGFpbnMgYQorICAgICAgICAgICAgY2FjaGUgb2YgZmlsZXMgZG93bmxvYWRlZCBmcm9tIHRoZSBuZXR3b3JrLgorICAgICAgICAgICAgQW55IHNvdXJjZSBmaWxlcyB0aGF0IGFyZSBub3QgbG9jYWwgKGkuZS4KKyAgICAgICAgICAgIGRvd25sb2FkZWQgZnJvbSB0aGUgSW50ZXJuZXQpIGFyZSBwbGFjZWQgaW50byB0aGUgZG93bmxvYWQKKyAgICAgICAgICAgIGRpcmVjdG9yeSwgd2hpY2ggaXMgc3BlY2lmaWVkIGJ5IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZpbGUgaW50ZWdyaXR5IGlzIG9mIGtleSBpbXBvcnRhbmNlIGZvciByZXByb2R1Y2luZyBidWlsZHMuCisgICAgICAgICAgICBGb3Igbm9uLWxvY2FsIGFyY2hpdmUgZG93bmxvYWRzLCB0aGUgZmV0Y2hlciBjb2RlIGNhbiB2ZXJpZnkKKyAgICAgICAgICAgIFNIQS0yNTYgYW5kIE1ENSBjaGVja3N1bXMgdG8gZW5zdXJlIHRoZSBhcmNoaXZlcyBoYXZlIGJlZW4KKyAgICAgICAgICAgIGRvd25sb2FkZWQgY29ycmVjdGx5LgorICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IHRoZXNlIGNoZWNrc3VtcyBieSB1c2luZyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gdmFyaWFibGUgd2l0aCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgICAgIHZhcmZsYWdzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUklbbWQ1c3VtXSA9ICI8cmVwbGFjZWFibGU+dmFsdWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgU1JDX1VSSVtzaGEyNTZzdW1dID0gIjxyZXBsYWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgWW91IGNhbiBhbHNvIHNwZWNpZnkgdGhlIGNoZWNrc3VtcyBhcyBwYXJhbWV0ZXJzIG9uIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBhcyBzaG93biBiZWxvdzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJodHRwOi8vZXhhbXBsZS5jb20vZm9vYmFyLnRhci5iejI7bWQ1c3VtPTRhOGUwZjIzN2U5NjFmZDc3ODVkMTlkMDdmZGI5OTRkIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSWYgbXVsdGlwbGUgVVJJcyBleGlzdCwgeW91IGNhbiBzcGVjaWZ5IHRoZSBjaGVja3N1bXMgZWl0aGVyCisgICAgICAgICAgICBkaXJlY3RseSBhcyBpbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgb3IgeW91IGNhbiBuYW1lIHRoZSBVUkxzLgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzeW50YXggc2hvd3MgaG93IHlvdSBuYW1lIHRoZSBVUklzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImh0dHA6Ly9leGFtcGxlLmNvbS9mb29iYXIudGFyLmJ6MjtuYW1lPWZvbyIKKyAgICAgU1JDX1VSSVtmb28ubWQ1c3VtXSA9IDRhOGUwZjIzN2U5NjFmZDc3ODVkMTlkMDdmZGI5OTRkCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBZnRlciBhIGZpbGUgaGFzIGJlZW4gZG93bmxvYWRlZCBhbmQgaGFzIGhhZCBpdHMgY2hlY2tzdW0gY2hlY2tlZCwKKyAgICAgICAgICAgIGEgIi5kb25lIiBzdGFtcCBpcyBwbGFjZWQgaW4gPGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoaXMgc3RhbXAgZHVyaW5nIHN1YnNlcXVlbnQgYnVpbGRzIHRvIGF2b2lkCisgICAgICAgICAgICBkb3dubG9hZGluZyBvciBjb21wYXJpbmcgYSBjaGVja3N1bSBmb3IgdGhlIGZpbGUgYWdhaW4uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBJdCBpcyBhc3N1bWVkIHRoYXQgbG9jYWwgc3RvcmFnZSBpcyBzYWZlIGZyb20gZGF0YSBjb3JydXB0aW9uLgorICAgICAgICAgICAgICAgIElmIHRoaXMgd2VyZSBub3QgdGhlIGNhc2UsIHRoZXJlIHdvdWxkIGJlIGJpZ2dlciBpc3N1ZXMgdG8gd29ycnkgYWJvdXQuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfU1RSSUNUX0NIRUNLU1VNJz48ZmlsZW5hbWU+QkJfU1RSSUNUX0NIRUNLU1VNPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBpcyBzZXQsIGFueSBkb3dubG9hZCB3aXRob3V0IGEgY2hlY2tzdW0gdHJpZ2dlcnMgYW4KKyAgICAgICAgICAgIGVycm9yIG1lc3NhZ2UuCisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9OT19ORVRXT1JLJz48ZmlsZW5hbWU+QkJfTk9fTkVUV09SSzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gbWFrZSBhbnkgYXR0ZW1wdGVkIG5ldHdvcmsgYWNjZXNzIGEgZmF0YWwKKyAgICAgICAgICAgIGVycm9yLCB3aGljaCBpcyB1c2VmdWwgZm9yIGNoZWNraW5nIHRoYXQgbWlycm9ycyBhcmUgY29tcGxldGUKKyAgICAgICAgICAgIGFzIHdlbGwgYXMgb3RoZXIgdGhpbmdzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2JiLXRoZS11bnBhY2snPgorICAgICAgICA8dGl0bGU+VGhlIFVucGFjazwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgdW5wYWNrIHByb2Nlc3MgdXN1YWxseSBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBkb3dubG9hZC4KKyAgICAgICAgICAgIEZvciBhbGwgVVJMcyBleGNlcHQgR2l0IFVSTHMsIEJpdEJha2UgdXNlcyB0aGUgY29tbW9uCisgICAgICAgICAgICA8ZmlsZW5hbWU+dW5wYWNrPC9maWxlbmFtZT4gbWV0aG9kLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIG51bWJlciBvZiBwYXJhbWV0ZXJzIGV4aXN0IHRoYXQgeW91IGNhbiBzcGVjaWZ5IHdpdGhpbiB0aGUKKyAgICAgICAgICAgIFVSTCB0byBnb3Zlcm4gdGhlIGJlaGF2aW9yIG9mIHRoZSB1bnBhY2sgc3RhZ2U6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dW5wYWNrOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgdGhlIFVSTCBjb21wb25lbnRzIGFyZSB1bnBhY2tlZC4KKyAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvICIxIiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQsIHRoZSBjb21wb25lbnRzCisgICAgICAgICAgICAgICAgICAgIGFyZSB1bnBhY2tlZC4KKyAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvICIwIiwgdGhlIHVucGFjayBzdGFnZSBsZWF2ZXMgdGhlIGZpbGUgYWxvbmUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWZ1bCB3aGVuIHlvdSB3YW50IGFuIGFyY2hpdmUgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgY29waWVkIGluIGFuZCBub3QgYmUgdW5wYWNrZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZG9zOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEFwcGxpZXMgdG8gPGZpbGVuYW1lPi56aXA8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5qYXI8L2ZpbGVuYW1lPiBmaWxlcyBhbmQgc3BlY2lmaWVzIHdoZXRoZXIgdG8KKyAgICAgICAgICAgICAgICAgICAgdXNlIERPUyBsaW5lIGVuZGluZyBjb252ZXJzaW9uIG9uIHRleHQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+YmFzZXBhdGg6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3RzIHRoZSB1bnBhY2sgc3RhZ2UgdG8gc3RyaXAgdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyBmcm9tIHRoZSBzb3VyY2UgcGF0aCB3aGVuIHVucGFja2luZy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zdWJkaXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVW5wYWNrcyB0aGUgc3BlY2lmaWMgVVJMIHRvIHRoZSBzcGVjaWZpZWQgc3ViZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgcm9vdCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBUaGUgdW5wYWNrIGNhbGwgYXV0b21hdGljYWxseSBkZWNvbXByZXNzZXMgYW5kIGV4dHJhY3RzIGZpbGVzCisgICAgICAgICAgICB3aXRoICIuWiIsICIueiIsICIuZ3oiLCAiLnh6IiwgIi56aXAiLCAiLmphciIsICIuaXBrIiwgIi5ycG0iLgorICAgICAgICAgICAgIi5zcnBtIiwgIi5kZWIiIGFuZCAiLmJ6MiIgZXh0ZW5zaW9ucyBhcyB3ZWxsIGFzIHZhcmlvdXMgY29tYmluYXRpb25zCisgICAgICAgICAgICBvZiB0YXJiYWxsIGV4dGVuc2lvbnMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIG1lbnRpb25lZCwgdGhlIEdpdCBmZXRjaGVyIGhhcyBpdHMgb3duIHVucGFjayBtZXRob2QgdGhhdAorICAgICAgICAgICAgaXMgb3B0aW1pemVkIHRvIHdvcmsgd2l0aCBHaXQgdHJlZXMuCisgICAgICAgICAgICBCYXNpY2FsbHksIHRoaXMgbWV0aG9kIHdvcmtzIGJ5IGNsb25pbmcgdGhlIHRyZWUgaW50byB0aGUgZmluYWwKKyAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFRoZSBwcm9jZXNzIGlzIGNvbXBsZXRlZCB1c2luZyByZWZlcmVuY2VzIHNvIHRoYXQgdGhlcmUgaXMKKyAgICAgICAgICAgIG9ubHkgb25lIGNlbnRyYWwgY29weSBvZiB0aGUgR2l0IG1ldGFkYXRhIG5lZWRlZC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdiYi1mZXRjaGVycyc+CisgICAgICAgIDx0aXRsZT5GZXRjaGVyczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciwgdGhlIFVSTCBwcmVmaXggZGV0ZXJtaW5lcyB3aGljaAorICAgICAgICAgICAgZmV0Y2hlciBzdWJtb2R1bGUgQml0QmFrZSB1c2VzLgorICAgICAgICAgICAgRWFjaCBzdWJtb2R1bGUgY2FuIHN1cHBvcnQgZGlmZmVyZW50IFVSTCBwYXJhbWV0ZXJzLAorICAgICAgICAgICAgd2hpY2ggYXJlIGRlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2xvY2FsLWZpbGUtZmV0Y2hlcic+CisgICAgICAgICAgICA8dGl0bGU+TG9jYWwgZmlsZSBmZXRjaGVyICg8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc3VibW9kdWxlIGhhbmRsZXMgVVJMcyB0aGF0IGJlZ2luIHdpdGgKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBmaWxlbmFtZSB5b3Ugc3BlY2lmeSB3aXRoaW4gdGhlIFVSTCBjYW4gYmUKKyAgICAgICAgICAgICAgICBlaXRoZXIgYW4gYWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aCB0byBhIGZpbGUuCisgICAgICAgICAgICAgICAgSWYgdGhlIGZpbGVuYW1lIGlzIHJlbGF0aXZlLCB0aGUgY29udGVudHMgb2YgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIHVzZWQgaW4gdGhlIHNhbWUgd2F5CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiBpcyB1c2VkIHRvIGZpbmQgZXhlY3V0YWJsZXMuCisgICAgICAgICAgICAgICAgRmFpbGluZyB0aGF0LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFU0RJUic+PGZpbGVuYW1lPkZJTEVTRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgaXMgdXNlZCB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZSByZWxhdGl2ZSBmaWxlLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVNESVI8L2ZpbGVuYW1lPiBpcyBkZXByZWNhdGVkIGFuZCBjYW4KKyAgICAgICAgICAgICAgICAgICAgYmUgcmVwbGFjZWQgd2l0aCA8ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgPGZpbGVuYW1lPkZJTEVTRElSPC9maWxlbmFtZT4gaXMgbGlrZWx5IHRvIGJlCisgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQsIHlvdSBzaG91bGQgbm90IHVzZSB0aGlzIHZhcmlhYmxlIGluIGFueSBuZXcgY29kZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgSWYgdGhlIGZpbGUgY2Fubm90IGJlIGZvdW5kLCBpdCBpcyBhc3N1bWVkIHRoYXQgaXQgaXMgYXZhaWxhYmxlIGluCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGJ5IHRoZSB0aW1lIHRoZSA8ZmlsZW5hbWU+ZG93bmxvYWQoKTwvZmlsZW5hbWU+IG1ldGhvZCBpcyBjYWxsZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSBzcGVjaWZ5IGEgZGlyZWN0b3J5LCB0aGUgZW50aXJlIGRpcmVjdG9yeSBpcworICAgICAgICAgICAgICAgIHVucGFja2VkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBhIGNvdXBsZSBvZiBleGFtcGxlIFVSTHMsIHRoZSBmaXJzdCByZWxhdGl2ZSBhbmQKKyAgICAgICAgICAgICAgICB0aGUgc2Vjb25kIGFic29sdXRlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJmaWxlOi8vcmVsYXRpdmVmaWxlLnBhdGNoIgorICAgICBTUkNfVVJJID0gImZpbGU6Ly8vVXNlcnMvaWNoL3ZlcnlfaW1wb3J0YW50X3NvZnR3YXJlIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdodHRwLWZ0cC1mZXRjaGVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5IVFRQL0ZUUCB3Z2V0IGZldGNoZXIgKDxmaWxlbmFtZT5odHRwOi8vPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5mdHA6Ly88L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmh0dHBzOi8vPC9maWxlbmFtZT4pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmZXRjaGVyIG9idGFpbnMgZmlsZXMgZnJvbSB3ZWIgYW5kIEZUUCBzZXJ2ZXJzLgorICAgICAgICAgICAgICAgIEludGVybmFsbHksIHRoZSBmZXRjaGVyIHVzZXMgdGhlIHdnZXQgdXRpbGl0eS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGV4ZWN1dGFibGUgYW5kIHBhcmFtZXRlcnMgdXNlZCBhcmUgc3BlY2lmaWVkIGJ5IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GRVRDSENNRF93Z2V0PC9maWxlbmFtZT4gdmFyaWFibGUsIHdoaWNoIGRlZmF1bHRzCisgICAgICAgICAgICAgICAgdG8gc2Vuc2libGUgdmFsdWVzLgorICAgICAgICAgICAgICAgIFRoZSBmZXRjaGVyIHN1cHBvcnRzIGEgcGFyYW1ldGVyICJkb3dubG9hZGZpbGVuYW1lIiB0aGF0CisgICAgICAgICAgICAgICAgYWxsb3dzIHRoZSBuYW1lIG9mIHRoZSBkb3dubG9hZGVkIGZpbGUgdG8gYmUgc3BlY2lmaWVkLgorICAgICAgICAgICAgICAgIFNwZWNpZnlpbmcgdGhlIG5hbWUgb2YgdGhlIGRvd25sb2FkZWQgZmlsZSBpcyB1c2VmdWwKKyAgICAgICAgICAgICAgICBmb3IgYXZvaWRpbmcgY29sbGlzaW9ucyBpbgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB3aGVuIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBmaWxlcyB0aGF0IGhhdmUgdGhlIHNhbWUgbmFtZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU29tZSBleGFtcGxlIFVSTHMgYXJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImh0dHA6Ly9vZS5oYW5kaGVsZHMub3JnL25vdF90aGVyZS5hYWMiCisgICAgIFNSQ19VUkkgPSAiZnRwOi8vb2UuaGFuZGhlbGRzLm9yZy9ub3RfdGhlcmVfYXNfd2VsbC5hYWMiCisgICAgIFNSQ19VUkkgPSAiZnRwOi8veW91QG9lLmhhbmRoZWxkcy5vcmcvaG9tZS95b3Uvc2VjcmV0LnBsYW4iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICBCZWNhdXNlIFVSTCBwYXJhbWV0ZXJzIGFyZSBkZWxpbWl0ZWQgYnkgc2VtaS1jb2xvbnMsIHRoaXMgY2FuCisgICAgICAgICAgICAgICBpbnRyb2R1Y2UgYW1iaWd1aXR5IHdoZW4gcGFyc2luZyBVUkxzIHRoYXQgYWxzbyBjb250YWluIHNlbWktY29sb25zLAorICAgICAgICAgICAgICAgZm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImh0dHA6Ly9hYmMxMjMub3JnL2dpdC8/cD1nY2MvZ2NjLmdpdDthPXNuYXBzaG90O2g9YTVkZDQ3IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgIFN1Y2ggVVJMcyBzaG91bGQgc2hvdWxkIGJlIG1vZGlmaWVkIGJ5IHJlcGxhY2luZyBzZW1pLWNvbG9ucyB3aXRoICcmYW1wOycgY2hhcmFjdGVyczoKKyAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJodHRwOi8vYWJjMTIzLm9yZy9naXQvP3A9Z2NjL2djYy5naXQmYW1wO2E9c25hcHNob3QmYW1wO2g9YTVkZDQ3IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiBtb3N0IGNhc2VzIHRoaXMgc2hvdWxkIHdvcmsuIFRyZWF0aW5nIHNlbWktY29sb25zIGFuZCAnJmFtcDsnIGluIHF1ZXJpZXMKKyAgICAgICAgICAgICAgICBpZGVudGljYWxseSBpcyByZWNvbW1lbmRlZCBieSB0aGUgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSAoVzNDKS4KKyAgICAgICAgICAgICAgICBOb3RlIHRoYXQgZHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlIFVSTCwgeW91IG1heSBoYXZlIHRvIHNwZWNpZnkgdGhlIG5hbWUKKyAgICAgICAgICAgICAgICBvZiB0aGUgZG93bmxvYWRlZCBmaWxlIGFzIHdlbGw6CisgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJodHRwOi8vYWJjMTIzLm9yZy9naXQvP3A9Z2NjL2djYy5naXQmYW1wO2E9c25hcHNob3QmYW1wO2g9YTVkZDQ3O2Rvd25sb2FkZmlsZW5hbWU9bXlmaWxlLmJ6MiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3ZzLWZldGNoZXInPgorICAgICAgICAgICAgPHRpdGxlPkNWUyBmZXRjaGVyICg8ZmlsZW5hbWU+KGN2czovLzwvZmlsZW5hbWU+KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc3VibW9kdWxlIGhhbmRsZXMgY2hlY2tpbmcgb3V0IGZpbGVzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgQ1ZTIHZlcnNpb24gY29udHJvbCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgWW91IGNhbiBjb25maWd1cmUgaXQgdXNpbmcgYSBudW1iZXIgb2YgZGlmZmVyZW50IHZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5GRVRDSENNRF9jdnM8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGV4ZWN1dGFibGUgdG8gdXNlIHdoZW4gcnVubmluZworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5jdnM8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBuYW1lIGlzIHVzdWFsbHkgImN2cyIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+U1JDREFURTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGF0ZSB0byB1c2Ugd2hlbiBmZXRjaGluZyB0aGUgQ1ZTIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgQSBzcGVjaWFsIHZhbHVlIG9mICJub3ciIGNhdXNlcyB0aGUgY2hlY2tvdXQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJlIHVwZGF0ZWQgb24gZXZlcnkgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48bGluayBsaW5rZW5kPSd2YXItQ1ZTRElSJz48ZmlsZW5hbWU+Q1ZTRElSPC9maWxlbmFtZT48L2xpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgd2hlcmUgYSB0ZW1wb3JhcnkgY2hlY2tvdXQgaXMgc2F2ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gaXMgb2Z0ZW4gPGZpbGVuYW1lPkRMX0RJUi9jdnM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5DVlNfUFJPWFlfSE9TVDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSB0byB1c2UgYXMgYSAicHJveHk9IiBwYXJhbWV0ZXIgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y3ZzPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5DVlNfUFJPWFlfUE9SVDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcG9ydCBudW1iZXIgdG8gdXNlIGFzIGEgInByb3h5cG9ydD0iIHBhcmFtZXRlciB0bworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5jdnM8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgQXMgd2VsbCBhcyB0aGUgc3RhbmRhcmQgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIFVSTCBzeW50YXgsCisgICAgICAgICAgICAgICAgeW91IGNhbiBhbHNvIGNvbmZpZ3VyZSB0aGUgZmV0Y2hlciB3aXRoIHZhcmlvdXMgVVJMIHBhcmFtZXRlcnM6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBzdXBwb3J0ZWQgcGFyYW1ldGVycyBhcmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJtZXRob2QiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJvdG9jb2wgb3ZlciB3aGljaCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBDVlMgc2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBwcm90b2NvbCBpcyAicHNlcnZlciIuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiAibWV0aG9kIiBpcyBzZXQgdG8gImV4dCIsIEJpdEJha2UgZXhhbWluZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAicnNoIiBwYXJhbWV0ZXIgYW5kIHNldHMgPGZpbGVuYW1lPkNWU19SU0g8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlICJkaXIiIGZvciBsb2NhbCBkaXJlY3Rvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJtb2R1bGUiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG1vZHVsZSB0byBjaGVjayBvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzdXBwbHkgdGhpcyBwYXJhbWV0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4idGFnIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVzIHdoaWNoIENWUyBUQUcgc2hvdWxkIGJlIHVzZWQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY2hlY2tvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgVEFHIGlzIGVtcHR5LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ImRhdGUiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBkYXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm8gImRhdGUiIGlzIHNwZWNpZmllZCwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDREFURSc+PGZpbGVuYW1lPlNSQ0RBVEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBjb25maWd1cmF0aW9uIGlzIHVzZWQgdG8gY2hlY2tvdXQgYSBzcGVjaWZpYyBkYXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpYWwgdmFsdWUgb2YgIm5vdyIgY2F1c2VzIHRoZSBjaGVja291dCB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZCBvbiBldmVyeSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJsb2NhbGRpciI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZWQgdG8gcmVuYW1lIHRoZSBtb2R1bGUuCisgICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmVseSwgeW91IGFyZSByZW5hbWluZyB0aGUgb3V0cHV0IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgdG8gd2hpY2ggdGhlIG1vZHVsZSBpcyB1bnBhY2tlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhcmUgZm9yY2luZyB0aGUgbW9kdWxlIGludG8gYSBzcGVjaWFsCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgcmVsYXRpdmUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DVlNESVInPjxmaWxlbmFtZT5DVlNESVI8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4icnNoIjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBVc2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlICJtZXRob2QiIHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJzY21kYXRhIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBDVlMgbWV0YWRhdGEgdG8gYmUgbWFpbnRhaW5lZCBpbiB0aGUgdGFyYmFsbAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZldGNoZXIgY3JlYXRlcyB3aGVuIHNldCB0byAia2VlcCIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGFyYmFsbCBpcyBleHBhbmRlZCBpbnRvIHRoZSB3b3JrIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBDVlMgbWV0YWRhdGEgaXMgcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJmdWxscGF0aCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgdGhlIHJlc3VsdGluZyBjaGVja291dCBpcyBhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSBsZXZlbCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQsIG9yIGlzIGF0IGRlZXBlcgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4ibm9yZWN1cnNlIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBmZXRjaGVyIHRvIG9ubHkgY2hlY2tvdXQgdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHdpdGggbm8gcmVjdXJzZSBpbnRvIGFueSBzdWJkaXJlY3Rvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJwb3J0Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBvcnQgdG8gd2hpY2ggdGhlIENWUyBzZXJ2ZXIgY29ubmVjdHMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICBTb21lIGV4YW1wbGUgVVJMcyBhcmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiY3ZzOi8vQ1ZTUk9PVDttb2R1bGU9bXltb2R1bGU7dGFnPXNvbWUtdmVyc2lvbjttZXRob2Q9ZXh0IgorICAgICBTUkNfVVJJID0gImN2czovL0NWU1JPT1Q7bW9kdWxlPW15bW9kdWxlO2RhdGU9MjAwNjAxMjY7bG9jYWxkaXI9dXNldGhhdCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc3ZuLWZldGNoZXInPgorICAgICAgICAgICAgPHRpdGxlPlN1YnZlcnNpb24gKFNWTikgRmV0Y2hlciAoPGZpbGVuYW1lPnN2bjovLzwvZmlsZW5hbWU+KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmV0Y2hlciBzdWJtb2R1bGUgZmV0Y2hlcyBjb2RlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgU3VidmVyc2lvbiBzb3VyY2UgY29udHJvbCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgVGhlIGV4ZWN1dGFibGUgdXNlZCBpcyBzcGVjaWZpZWQgYnkKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RkVUQ0hDTURfc3ZuPC9maWxlbmFtZT4sIHdoaWNoIGRlZmF1bHRzCisgICAgICAgICAgICAgICAgdG8gInN2biIuCisgICAgICAgICAgICAgICAgVGhlIGZldGNoZXIncyB0ZW1wb3Jhcnkgd29ya2luZyBkaXJlY3RvcnkgaXMgc2V0IGJ5CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNWTkRJUic+PGZpbGVuYW1lPlNWTkRJUjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICB3aGljaCBpcyB1c3VhbGx5IDxmaWxlbmFtZT5ETF9ESVIvc3ZuPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBzdXBwb3J0ZWQgcGFyYW1ldGVycyBhcmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJtb2R1bGUiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgc3ZuIG1vZHVsZSB0byBjaGVja291dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHByb3ZpZGUgdGhpcyBwYXJhbWV0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHRoaW5rIG9mIHRoaXMgcGFyYW1ldGVyIGFzIHRoZSB0b3AtbGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBvZiB0aGUgcmVwb3NpdG9yeSBkYXRhIHlvdSB3YW50LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InByb3RvY29sIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHByb3RvY29sIHRvIHVzZSwgd2hpY2ggZGVmYXVsdHMgdG8gInN2biIuCisgICAgICAgICAgICAgICAgICAgICAgICBPdGhlciBvcHRpb25zIGFyZSAic3ZuK3NzaCIgYW5kICJyc2giLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yICJyc2giLCB0aGUgInJzaCIgcGFyYW1ldGVyIGlzIGFsc28gdXNlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJyZXYiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmV2aXNpb24gb2YgdGhlIHNvdXJjZSBjb2RlIHRvIGNoZWNrb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ImRhdGUiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGF0ZSBvZiB0aGUgc291cmNlIGNvZGUgdG8gY2hlY2tvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpYyByZXZpc2lvbnMgYXJlIGdlbmVyYWxseSBtdWNoIHNhZmVyIHRvIGNoZWNrb3V0CisgICAgICAgICAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBieSBkYXRlIGFzIHRoZXkgZG8gbm90IGludm9sdmUgdGltZXpvbmVzCisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiB0aGV5IGFyZSBtdWNoIG1vcmUgZGV0ZXJtaW5pc3RpYykuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4ic2NtZGF0YSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENhdXNlcyB0aGUg4oCcLnN2buKAnSBkaXJlY3RvcmllcyB0byBiZSBhdmFpbGFibGUgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlLXRpbWUgd2hlbiBzZXQgdG8gImtlZXAiLgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlc2UgZGlyZWN0b3JpZXMgYXJlIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4idHJhbnNwb3J0dXNlciI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gcmVxdWlyZWQsIHNldHMgdGhlIHVzZXJuYW1lIGZvciB0aGUgdHJhbnNwb3J0LgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBwYXJhbWV0ZXIgaXMgZW1wdHkuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdHJhbnNwb3J0IHVzZXJuYW1lIGlzIGRpZmZlcmVudCB0aGFuIHRoZSB1c2VybmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBpbiB0aGUgbWFpbiBVUkwsIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUgc3VidmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgdHdvIGV4YW1wbGVzIHVzaW5nIHN2bjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAic3ZuOi8vc3ZuLm9lLmhhbmRoZWxkcy5vcmcvc3ZuO21vZHVsZT12aXA7cHJvdG89aHR0cDtyZXY9NjY3IgorICAgICBTUkNfVVJJID0gInN2bjovL3N2bi5vZS5oYW5kaGVsZHMub3JnL3N2bi87bW9kdWxlPW9waWU7cHJvdG89c3ZuK3NzaDtkYXRlPTIwMDYwMTI2IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdnaXQtZmV0Y2hlcic+CisgICAgICAgICAgICA8dGl0bGU+R2l0IEZldGNoZXIgKDxmaWxlbmFtZT5naXQ6Ly88L2ZpbGVuYW1lPik8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGZldGNoZXIgc3VibW9kdWxlIGZldGNoZXMgY29kZSBmcm9tIHRoZSBHaXQKKyAgICAgICAgICAgICAgICBzb3VyY2UgY29udHJvbCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgVGhlIGZldGNoZXIgd29ya3MgYnkgY3JlYXRpbmcgYSBiYXJlIGNsb25lIG9mIHRoZQorICAgICAgICAgICAgICAgIHJlbW90ZSBpbnRvCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdJVERJUic+PGZpbGVuYW1lPkdJVERJUjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICB3aGljaCBpcyB1c3VhbGx5IDxmaWxlbmFtZT5ETF9ESVIvZ2l0MjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoaXMgYmFyZSBjbG9uZSBpcyB0aGVuIGNsb25lZCBpbnRvIHRoZSB3b3JrIGRpcmVjdG9yeSBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgdW5wYWNrIHN0YWdlIHdoZW4gYSBzcGVjaWZpYyB0cmVlIGlzIGNoZWNrZWQgb3V0LgorICAgICAgICAgICAgICAgIFRoaXMgaXMgZG9uZSB1c2luZyBhbHRlcm5hdGVzIGFuZCBieSByZWZlcmVuY2UgdG8KKyAgICAgICAgICAgICAgICBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIGR1cGxpY2F0ZSBkYXRhIG9uIHRoZSBkaXNrIGFuZAorICAgICAgICAgICAgICAgIG1ha2UgdGhlIHVucGFjayBwcm9jZXNzIGZhc3QuCisgICAgICAgICAgICAgICAgVGhlIGV4ZWN1dGFibGUgdXNlZCBjYW4gYmUgc2V0IHdpdGgKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RkVUQ0hDTURfZ2l0PC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmV0Y2hlciBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4icHJvdG9jb2wiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJvdG9jb2wgdXNlZCB0byBmZXRjaCB0aGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyAiZ2l0IiB3aGVuIGEgaG9zdG5hbWUgaXMgc2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgYSBob3N0bmFtZSBpcyBub3Qgc2V0LCB0aGUgR2l0IHByb3RvY29sIGlzICJmaWxlIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgImh0dHAiLCAiaHR0cHMiLCAic3NoIiBhbmQgInJzeW5jIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJub2NoZWNrb3V0Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGVsbHMgdGhlIGZldGNoZXIgdG8gbm90IGNoZWNrb3V0IHNvdXJjZSBjb2RlIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHVucGFja2luZyB3aGVuIHNldCB0byAiMSIuCisgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdGhpcyBvcHRpb24gZm9yIHRoZSBVUkwgd2hlcmUgdGhlcmUgaXMgYSBjdXN0b20KKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRpbmUgdG8gY2hlY2tvdXQgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzICIwIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJyZWJhc2VhYmxlIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIHVwc3RyZWFtIEdpdCByZXBvc2l0b3J5IGNhbiBiZSByZWJhc2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gIjEiIGlmCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbnMgY2FuIGJlY29tZSBkZXRhY2hlZCBmcm9tIGJyYW5jaGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgc291cmNlIG1pcnJvciB0YXJiYWxsIGlzIGRvbmUgcGVyCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbiwgd2hpY2ggaGFzIGEgbG9zcyBvZiBlZmZpY2llbmN5LgorICAgICAgICAgICAgICAgICAgICAgICAgUmViYXNpbmcgdGhlIHVwc3RyZWFtIEdpdCByZXBvc2l0b3J5IGNvdWxkIGNhdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCByZXZpc2lvbiB0byBkaXNhcHBlYXIgZnJvbSB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIHJlbWluZHMgdGhlIGZldGNoZXIgdG8gcHJlc2VydmUgdGhlIGxvY2FsIGNhY2hlCisgICAgICAgICAgICAgICAgICAgICAgICBjYXJlZnVsbHkgZm9yIGZ1dHVyZSB1c2UuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIgaXMgIjAiLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Im5vYnJhbmNoIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGVsbHMgdGhlIGZldGNoZXIgdG8gbm90IGNoZWNrIHRoZSBTSEEgdmFsaWRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBicmFuY2ggd2hlbiBzZXQgdG8gIjEiLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgIjAiLgorICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRoaXMgb3B0aW9uIGZvciB0aGUgcmVjaXBlIHRoYXQgcmVmZXJzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29tbWl0IHRoYXQgaXMgdmFsaWQgZm9yIGEgdGFnIGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBicmFuY2guCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iYmFyZWNsb25lIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGVsbHMgdGhlIGZldGNoZXIgdG8gY2xvbmUgYSBiYXJlIGNsb25lIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiBkaXJlY3Rvcnkgd2l0aG91dCBjaGVja2luZyBvdXQgYSB3b3JraW5nIHRyZWUuCisgICAgICAgICAgICAgICAgICAgICAgICBPbmx5IHRoZSByYXcgR2l0IG1ldGFkYXRhIGlzIHByb3ZpZGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaW1wbGllcyB0aGUgIm5vY2hlY2tvdXQiIHBhcmFtZXRlciBhcyB3ZWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ImJyYW5jaCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBicmFuY2goZXMpIG9mIHRoZSBHaXQgdHJlZSB0byBjbG9uZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHVuc2V0LCB0aGlzIGlzIGFzc3VtZWQgdG8gYmUgIm1hc3RlciIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGJyYW5jaCBwYXJhbWV0ZXJzIG11Y2ggbWF0Y2ggdGhlIG51bWJlciBvZgorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InJldiI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXZpc2lvbiB0byB1c2UgZm9yIHRoZSBjaGVja291dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzICJtYXN0ZXIiLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InRhZyI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHRhZyB0byB1c2UgZm9yIHRoZSBjaGVja291dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGNvcnJlY3RseSByZXNvbHZlIHRhZ3MsIEJpdEJha2UgbXVzdCBhY2Nlc3MgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHRoYXQgcmVhc29uLCB0YWdzIGFyZSBvZnRlbiBub3QgdXNlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFzIGZhciBhcyBHaXQgaXMgY29uY2VybmVkLCB0aGUgInRhZyIgcGFyYW1ldGVyIGJlaGF2ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZWx5IHRoZSBzYW1lIGFzIHRoZSAicmV2IiBwYXJhbWV0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4ic3VicGF0aCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIExpbWl0cyB0aGUgY2hlY2tvdXQgdG8gYSBzcGVjaWZpYyBzdWJwYXRoIG9mIHRoZSB0cmVlLgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHdob2xlIHRyZWUgaXMgY2hlY2tlZCBvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iZGVzdHN1ZmZpeCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBwYXRoIGluIHdoaWNoIHRvIHBsYWNlIHRoZSBjaGVja291dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBwYXRoIGlzIDxmaWxlbmFtZT5naXQvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGUgVVJMczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lm9lLmhhbmRoZWxkcy5vcmcvZ2l0L3ZpcC5naXQ7dGFnPXZlcnNpb24tMSIKKyAgICAgU1JDX1VSSSA9ICJnaXQ6Ly9naXQub2UuaGFuZGhlbGRzLm9yZy9naXQvdmlwLmdpdDtwcm90b2NvbD1odHRwIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdnaXRzbS1mZXRjaGVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5HaXQgU3VibW9kdWxlIEZldGNoZXIgKDxmaWxlbmFtZT5naXRzbTovLzwvZmlsZW5hbWU+KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmV0Y2hlciBzdWJtb2R1bGUgaW5oZXJpdHMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnaXQtZmV0Y2hlcic+R2l0IGZldGNoZXI8L2xpbms+IGFuZCBleHRlbmRzCisgICAgICAgICAgICAgICAgdGhhdCBmZXRjaGVyJ3MgYmVoYXZpb3IgYnkgZmV0Y2hpbmcgYSByZXBvc2l0b3J5J3Mgc3VibW9kdWxlcy4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBpcyBwYXNzZWQgdG8gdGhlIEdpdCBmZXRjaGVyIGFzIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZ2l0LWZldGNoZXInPkdpdCBGZXRjaGVyICg8ZmlsZW5hbWU+Z2l0Oi8vPC9maWxlbmFtZT4pPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+Tm90ZXMgYW5kIFdhcm5pbmdzPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBjbGVhbiBhIHJlY2lwZSB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAnPGZpbGVuYW1lPmdpdDovLzwvZmlsZW5hbWU+JyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICc8ZmlsZW5hbWU+Z2l0c206Ly88L2ZpbGVuYW1lPicgVVJMcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIEdpdCBTdWJtb2R1bGVzIGZldGNoZXIgaXMgbm90IGEgY29tcGxldGUgZmV0Y2hlcgorICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmV0Y2hlciBoYXMga25vd24gaXNzdWVzIHdoZXJlIGl0IGRvZXMgbm90IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbCBzb3VyY2UgbWlycm9yaW5nIGluZnJhc3RydWN0dXJlIHByb3Blcmx5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NsZWFyY2FzZS1mZXRjaGVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5DbGVhckNhc2UgRmV0Y2hlciAoPGZpbGVuYW1lPmNjcmM6Ly88L2ZpbGVuYW1lPik8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGZldGNoZXIgc3VibW9kdWxlIGZldGNoZXMgY29kZSBmcm9tIGEKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JhdGlvbmFsX0NsZWFyQ2FzZSc+Q2xlYXJDYXNlPC91bGluaz4KKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyB1c2UgdGhpcyBmZXRjaGVyLCBtYWtlIHN1cmUgeW91ciByZWNpcGUgaGFzIHByb3BlcgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDUkVWJz48ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT48L2xpbms+LCBhbmQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPiBzZXR0aW5ncy4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImNjcmM6Ly9jYy5leGFtcGxlLm9yZy9jY3JjO3ZvYj0vZXhhbXBsZV92b2I7bW9kdWxlPS9leGFtcGxlX21vZHVsZSIKKyAgICAgU1JDUkVWID0gIkVYQU1QTEVfQ0xFQVJDQVNFX1RBRyIKKyAgICAgUFYgPSAiJHtAZC5nZXRWYXIoIlNSQ1JFViIsIEZhbHNlKS5yZXBsYWNlKCIvIiwgIisiKX0iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBmZXRjaGVyIHVzZXMgdGhlIDxmaWxlbmFtZT5yY2xlYXJ0b29sPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xlYXJ0b29sPC9maWxlbmFtZT4gcmVtb3RlIGNsaWVudCwgZGVwZW5kaW5nIG9uCisgICAgICAgICAgICAgICAgd2hpY2ggb25lIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBvcHRpb25zIGZvciB0aGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT52b2I8L2ZpbGVuYW1lPjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUsIHdoaWNoIG11c3QgaW5jbHVkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmRpbmcgIi8iIGNoYXJhY3Rlciwgb2YgdGhlIENsZWFyQ2FzZSBWT0IuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBpcyByZXF1aXJlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5tb2R1bGU8L2ZpbGVuYW1lPjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1vZHVsZSwgd2hpY2ggbXVzdCBpbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZGluZyAiLyIgY2hhcmFjdGVyLCBpbiB0aGUgc2VsZWN0ZWQgVk9CLgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tb2R1bGU8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnZvYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyBhcmUgY29tYmluZWQgdG8gY3JlYXRlIHRoZSA8ZmlsZW5hbWU+bG9hZDwvZmlsZW5hbWU+IHJ1bGUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdmlldyBjb25maWcgc3BlYy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBjb25zaWRlciB0aGUgPGZpbGVuYW1lPnZvYjwvZmlsZW5hbWU+IGFuZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bW9kdWxlPC9maWxlbmFtZT4gdmFsdWVzIGZyb20gdGhlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3RhdGVtZW50IGF0IHRoZSBzdGFydCBvZiB0aGlzIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tYmluaW5nIHRob3NlIHZhbHVlcyByZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBsb2FkIC9leGFtcGxlX3ZvYi9leGFtcGxlX21vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wcm90bzwvZmlsZW5hbWU+PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJvdG9jb2wsIHdoaWNoIGNhbiBiZSBlaXRoZXIgPGZpbGVuYW1lPmh0dHA8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmh0dHBzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGZldGNoZXIgY3JlYXRlcyBhIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNhdGlvbi4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0aGlzIHNwZWNpZmljYXRpb24gd3JpdHRlbiB0byBhbiBhcmVhIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQsCisgICAgICAgICAgICAgICAgdXNlIHRoZSA8ZmlsZW5hbWU+Q0NBU0VfQ1VTVE9NX0NPTkZJR19TUEVDPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICBpbiB5b3VyIHJlY2lwZSB0byBkZWZpbmUgd2hlcmUgdGhlIHNwZWNpZmljYXRpb24gaXMgd3JpdHRlbi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPiBsb3NlcyBpdHMgZnVuY3Rpb25hbGl0eSBpZiB5b3UKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4gaXMgc3RpbGwgdXNlZCB0byBsYWJlbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZSBhZnRlciBhIGZldGNoIGV2ZW4gdGhvdWdoIGl0IGRvZXMgbm90IGRlZmluZSB3aGF0IGlzCisgICAgICAgICAgICAgICAgICAgIGZldGNoZWQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBhIGNvdXBsZSBvZiBvdGhlciBiZWhhdmlvcnMgd29ydGggbWVudGlvbmluZzoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHVzaW5nIDxmaWxlbmFtZT5jbGVhcnRvb2w8L2ZpbGVuYW1lPiwgdGhlIGxvZ2luIG9mCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xlYXJ0b29sPC9maWxlbmFtZT4gaXMgaGFuZGxlZCBieSB0aGUgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGxvZ2luIHJlcXVpcmUgbm8gc3BlY2lhbCBzdGVwcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciB0byB1c2UgPGZpbGVuYW1lPnJjbGVhcnRvb2w8L2ZpbGVuYW1lPiB3aXRoIGF1dGhlbnRpY2F0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzLCBhbiAicmNsZWFydG9vbCBsb2dpbiIgaXMgbmVjZXNzYXJ5IGJlZm9yZSB1c2luZyB0aGUgZmV0Y2hlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J290aGVyLWZldGNoZXJzJz4KKyAgICAgICAgICAgIDx0aXRsZT5PdGhlciBGZXRjaGVyczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZldGNoIHN1Ym1vZHVsZXMgYWxzbyBleGlzdCBmb3IgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBCYXphYXIgKDxmaWxlbmFtZT5ienI6Ly88L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBQZXJmb3JjZSAoPGZpbGVuYW1lPnA0Oi8vPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVHJlZXMgdXNpbmcgR2l0IEFubmV4ICg8ZmlsZW5hbWU+Z2l0YW5uZXg6Ly88L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTZWN1cmUgRlRQICg8ZmlsZW5hbWU+c2Z0cDovLzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY3VyZSBTaGVsbCAoPGZpbGVuYW1lPnNzaDovLzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlcG8gKDxmaWxlbmFtZT5yZXBvOi8vPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgT1NDICg8ZmlsZW5hbWU+b3NjOi8vPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgTWVyY3VyaWFsICg8ZmlsZW5hbWU+aGc6Ly88L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIE5vIGRvY3VtZW50YXRpb24gY3VycmVudGx5IGV4aXN0cyBmb3IgdGhlc2UgbGVzc2VyIHVzZWQKKyAgICAgICAgICAgICAgICBmZXRjaGVyIHN1Ym1vZHVsZXMuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgeW91IG1pZ2h0IGZpbmQgdGhlIGNvZGUgaGVscGZ1bCBhbmQgcmVhZGFibGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYXV0by1yZXZpc2lvbnMnPgorICAgICAgICA8dGl0bGU+QXV0byBSZXZpc2lvbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2UgbmVlZCB0byBkb2N1bWVudCA8ZmlsZW5hbWU+QVVUT1JFVjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ1JFVl9GT1JNQVQ8L2ZpbGVuYW1lPiBoZXJlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaGVsbG8ueG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaGVsbG8ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNjI4Y2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1oZWxsby54bWwKQEAgLTAsMCArMSw1MDYgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiPgorCis8YXBwZW5kaXggaWQ9J2hlbGxvLXdvcmxkLWV4YW1wbGUnPgorICAgIDx0aXRsZT5IZWxsbyBXb3JsZCBFeGFtcGxlPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSdiaXRiYWtlLWhlbGxvLXdvcmxkJz4KKyAgICAgICAgPHRpdGxlPkJpdEJha2UgSGVsbG8gV29ybGQ8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHNpbXBsZXN0IGV4YW1wbGUgY29tbW9ubHkgdXNlZCB0byBkZW1vbnN0cmF0ZSBhbnkgbmV3CisgICAgICAgICAgICBwcm9ncmFtbWluZyBsYW5ndWFnZSBvciB0b29sIGlzIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGVsbG9fd29ybGRfcHJvZ3JhbSI+SGVsbG8gV29ybGQ8L3VsaW5rPiIKKyAgICAgICAgICAgIGV4YW1wbGUuCisgICAgICAgICAgICBUaGlzIGFwcGVuZGl4IGRlbW9uc3RyYXRlcywgaW4gdHV0b3JpYWwgZm9ybSwgSGVsbG8KKyAgICAgICAgICAgIFdvcmxkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBCaXRCYWtlLgorICAgICAgICAgICAgVGhlIHR1dG9yaWFsIGRlc2NyaWJlcyBob3cgdG8gY3JlYXRlIGEgbmV3IHByb2plY3QKKyAgICAgICAgICAgIGFuZCB0aGUgYXBwbGljYWJsZSBtZXRhZGF0YSBmaWxlcyBuZWNlc3NhcnkgdG8gYWxsb3cKKyAgICAgICAgICAgIEJpdEJha2UgdG8gYnVpbGQgaXQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZXhhbXBsZS1vYnRhaW5pbmctYml0YmFrZSc+CisgICAgICAgIDx0aXRsZT5PYnRhaW5pbmcgQml0QmFrZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nb2J0YWluaW5nLWJpdGJha2UnPk9idGFpbmluZyBCaXRCYWtlPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBvYnRhaW4gQml0QmFrZS4KKyAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgdGhlIHNvdXJjZSBjb2RlIG9uIHlvdXIgbWFjaGluZSwgdGhlIEJpdEJha2UgZGlyZWN0b3J5CisgICAgICAgICAgICBhcHBlYXJzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbHMgLWFsCisgICAgIHRvdGFsIDEwMAorICAgICBkcnd4cnd4ci14LiA5IHdtYXQgd21hdCAgNDA5NiBKYW4gMzEgMTM6NDQgLgorICAgICBkcnd4cnd4ci14LiAzIHdtYXQgd21hdCAgNDA5NiBGZWIgIDQgMTA6NDUgLi4KKyAgICAgLXJ3LXJ3LXItLS4gMSB3bWF0IHdtYXQgICAzNjUgTm92IDI2IDA0OjU1IEFVVEhPUlMKKyAgICAgZHJ3eHJ3eHIteC4gMiB3bWF0IHdtYXQgIDQwOTYgTm92IDI2IDA0OjU1IGJpbgorICAgICBkcnd4cnd4ci14LiA0IHdtYXQgd21hdCAgNDA5NiBKYW4gMzEgMTM6NDQgYnVpbGQKKyAgICAgLXJ3LXJ3LXItLS4gMSB3bWF0IHdtYXQgMTY1MDEgTm92IDI2IDA0OjU1IENoYW5nZUxvZworICAgICBkcnd4cnd4ci14LiAyIHdtYXQgd21hdCAgNDA5NiBOb3YgMjYgMDQ6NTUgY2xhc3NlcworICAgICBkcnd4cnd4ci14LiAyIHdtYXQgd21hdCAgNDA5NiBOb3YgMjYgMDQ6NTUgY29uZgorICAgICBkcnd4cnd4ci14LiAzIHdtYXQgd21hdCAgNDA5NiBOb3YgMjYgMDQ6NTUgY29udHJpYgorICAgICAtcnctcnctci0tLiAxIHdtYXQgd21hdCAxNzk4NyBOb3YgMjYgMDQ6NTUgQ09QWUlORworICAgICBkcnd4cnd4ci14LiAzIHdtYXQgd21hdCAgNDA5NiBOb3YgMjYgMDQ6NTUgZG9jCisgICAgIC1ydy1ydy1yLS0uIDEgd21hdCB3bWF0ICAgIDY5IE5vdiAyNiAwNDo1NSAuZ2l0aWdub3JlCisgICAgIC1ydy1ydy1yLS0uIDEgd21hdCB3bWF0ICAgODQ5IE5vdiAyNiAwNDo1NSBIRUFERVIKKyAgICAgZHJ3eHJ3eHIteC4gNSB3bWF0IHdtYXQgIDQwOTYgSmFuIDMxIDEzOjQ0IGxpYgorICAgICAtcnctcnctci0tLiAxIHdtYXQgd21hdCAgIDE5NSBOb3YgMjYgMDQ6NTUgTUFOSUZFU1QuaW4KKyAgICAgLXJ3eHJ3eHIteC4gMSB3bWF0IHdtYXQgIDMxOTUgSmFuIDMxIDExOjU3IHNldHVwLnB5CisgICAgIC1ydy1ydy1yLS0uIDEgd21hdCB3bWF0ICAyODg3IE5vdiAyNiAwNDo1NSBUT0RPCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHlvdSBzaG91bGQgaGF2ZSBCaXRCYWtlIGNsb25lZCB0bworICAgICAgICAgICAgYSBkaXJlY3RvcnkgdGhhdCBtYXRjaGVzIHRoZSBwcmV2aW91cyBsaXN0aW5nIGV4Y2VwdCBmb3IKKyAgICAgICAgICAgIGRhdGVzIGFuZCB1c2VyIG5hbWVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctdXAtdGhlLWJpdGJha2UtZW52aXJvbm1lbnQnPgorICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCB0aGUgQml0QmFrZSBFbnZpcm9ubWVudDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGaXJzdCwgeW91IG5lZWQgdG8gYmUgc3VyZSB0aGF0IHlvdSBjYW4gcnVuIEJpdEJha2UuCisgICAgICAgICAgICBTZXQgeW91ciB3b3JraW5nIGRpcmVjdG9yeSB0byB3aGVyZSB5b3VyIGxvY2FsIEJpdEJha2UKKyAgICAgICAgICAgIGZpbGVzIGFyZSBhbmQgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCAuL2Jpbi9iaXRiYWtlIC0tdmVyc2lvbgorICAgICBCaXRCYWtlIEJ1aWxkIFRvb2wgQ29yZSB2ZXJzaW9uIDEuMjMuMCwgYml0YmFrZSB2ZXJzaW9uIDEuMjMuMAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGNvbnNvbGUgb3V0cHV0IHRlbGxzIHlvdSB3aGF0IHZlcnNpb24geW91IGFyZSBydW5uaW5nLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgcmVjb21tZW5kZWQgbWV0aG9kIHRvIHJ1biBCaXRCYWtlIGlzIGZyb20gYSBkaXJlY3Rvcnkgb2YgeW91cgorICAgICAgICAgICAgY2hvaWNlLgorICAgICAgICAgICAgVG8gYmUgYWJsZSB0byBydW4gQml0QmFrZSBmcm9tIGFueSBkaXJlY3RvcnksIHlvdSBuZWVkIHRvIGFkZCB0aGUKKyAgICAgICAgICAgIGV4ZWN1dGFibGUgYmluYXJ5IHRvIHlvdXIgYmluYXJ5IHRvIHlvdXIgc2hlbGwncyBlbnZpcm9ubWVudAorICAgICAgICAgICAgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgIEZpcnN0LCBsb29rIGF0IHlvdXIgY3VycmVudCA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGVjaG8gJFBBVEgKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE5leHQsIGFkZCB0aGUgZGlyZWN0b3J5IGxvY2F0aW9uIGZvciB0aGUgQml0QmFrZSBiaW5hcnkgdG8gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgYWRkcyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT4vaG9tZS9zY290dC1sZW5vdm8vYml0YmFrZS9iaW48L2ZpbGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgICAgIHRvIHRoZSBmcm9udCBvZiB0aGUgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBleHBvcnQgUEFUSD0vaG9tZS9zY290dC1sZW5vdm8vYml0YmFrZS9iaW46JFBBVEgKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFlvdSBzaG91bGQgbm93IGJlIGFibGUgdG8gZW50ZXIgdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGNvbW1hbmQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHdoaWxlIHdvcmtpbmcgZnJvbSBhbnkgZGlyZWN0b3J5LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3RoZS1oZWxsby13b3JsZC1leGFtcGxlJz4KKyAgICAgICAgPHRpdGxlPlRoZSBIZWxsbyBXb3JsZCBFeGFtcGxlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBvdmVyYWxsIGdvYWwgb2YgdGhpcyBleGVyY2lzZSBpcyB0byBidWlsZCBhCisgICAgICAgICAgICBjb21wbGV0ZSAiSGVsbG8gV29ybGQiIGV4YW1wbGUgdXRpbGl6aW5nIHRhc2sgYW5kIGxheWVyCisgICAgICAgICAgICBjb25jZXB0cy4KKyAgICAgICAgICAgIEJlY2F1c2UgdGhpcyBpcyBob3cgbW9kZXJuIHByb2plY3RzIHN1Y2ggYXMgT3BlbkVtYmVkZGVkIGFuZAorICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgdXRpbGl6ZSBCaXRCYWtlLCB0aGUgZXhhbXBsZQorICAgICAgICAgICAgcHJvdmlkZXMgYW4gZXhjZWxsZW50IHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nCisgICAgICAgICAgICBCaXRCYWtlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBoZWxwIHlvdSB1bmRlcnN0YW5kIGhvdyB0byB1c2UgQml0QmFrZSB0byBidWlsZCB0YXJnZXRzLAorICAgICAgICAgICAgdGhlIGV4YW1wbGUgc3RhcnRzIHdpdGggbm90aGluZyBidXQgdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGNvbW1hbmQsIHdoaWNoIGNhdXNlcyBCaXRCYWtlIHRvIGZhaWwgYW5kIHJlcG9ydCBwcm9ibGVtcy4KKyAgICAgICAgICAgIFRoZSBleGFtcGxlIHByb2dyZXNzZXMgYnkgYWRkaW5nIHBpZWNlcyB0byB0aGUgYnVpbGQgdG8KKyAgICAgICAgICAgIGV2ZW50dWFsbHkgY29uY2x1ZGUgd2l0aCBhIHdvcmtpbmcsIG1pbmltYWwgIkhlbGxvIFdvcmxkIgorICAgICAgICAgICAgZXhhbXBsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hpbGUgZXZlcnkgYXR0ZW1wdCBpcyBtYWRlIHRvIGV4cGxhaW4gd2hhdCBpcyBoYXBwZW5pbmcgZHVyaW5nCisgICAgICAgICAgICB0aGUgZXhhbXBsZSwgdGhlIGRlc2NyaXB0aW9ucyBjYW5ub3QgY292ZXIgZXZlcnl0aGluZy4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBmdXJ0aGVyIGluZm9ybWF0aW9uIHRocm91Z2hvdXQgdGhpcyBtYW51YWwuCisgICAgICAgICAgICBBbHNvLCB5b3UgY2FuIGFjdGl2ZWx5IHBhcnRpY2lwYXRlIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xpc3RzLm9wZW5lbWJlZGRlZC5vcmcvbWFpbG1hbi9saXN0aW5mby9iaXRiYWtlLWRldmVsJz48L3VsaW5rPgorICAgICAgICAgICAgZGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QgYWJvdXQgdGhlIEJpdEJha2UgYnVpbGQgdG9vbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIHdhcyBpbnNwaXJlZCBieSBhbmQgZHJldyBoZWF2aWx5IGZyb20gdGhlc2Ugc291cmNlczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20veW9jdG9AeW9jdG9wcm9qZWN0Lm9yZy9tc2cwOTM3OS5odG1sIj5NYWlsaW5nIExpc3QgcG9zdCAtIFRoZSBCaXRCYWtlIGVxdWl2YWxlbnQgb2YgIkhlbGxvLCBXb3JsZCEiPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vaGFtYmVkZGVkLm9yZy9ibG9nLzIwMTIvMTEvMjQvZnJvbS1iaXRiYWtlLWhlbGxvLXdvcmxkLXRvLWFuLWltYWdlLyI+SGFtYmVkZGVkIExpbnV4IGJsb2cgcG9zdCAtIEZyb20gQml0YmFrZSBIZWxsbyBXb3JsZCB0byBhbiBJbWFnZTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvbm90ZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIHN0YXRlZCBlYXJsaWVyLCB0aGUgZ29hbCBvZiB0aGlzIGV4YW1wbGUKKyAgICAgICAgICAgIGlzIHRvIGV2ZW50dWFsbHkgY29tcGlsZSAiSGVsbG8gV29ybGQiLgorICAgICAgICAgICAgSG93ZXZlciwgaXQgaXMgdW5rbm93biB3aGF0IEJpdEJha2UgbmVlZHMgYW5kIHdoYXQgeW91IGhhdmUKKyAgICAgICAgICAgIHRvIHByb3ZpZGUgaW4gb3JkZXIgdG8gYWNoaWV2ZSB0aGF0IGdvYWwuCisgICAgICAgICAgICBSZWNhbGwgdGhhdCBCaXRCYWtlIHV0aWxpemVzIHRocmVlIHR5cGVzIG9mIG1ldGFkYXRhIGZpbGVzOgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nY29uZmlndXJhdGlvbi1maWxlcyc+Q29uZmlndXJhdGlvbiBGaWxlczwvbGluaz4sCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdjbGFzc2VzJz5DbGFzc2VzPC9saW5rPiwgYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWNpcGVzJz5SZWNpcGVzPC9saW5rPi4KKyAgICAgICAgICAgIEJ1dCB3aGVyZSBkbyB0aGV5IGdvPworICAgICAgICAgICAgSG93IGRvZXMgQml0QmFrZSBmaW5kIHRoZW0/CisgICAgICAgICAgICBCaXRCYWtlJ3MgZXJyb3IgbWVzc2FnaW5nIGhlbHBzIHlvdSBhbnN3ZXIgdGhlc2UgdHlwZXMgb2YgcXVlc3Rpb25zCisgICAgICAgICAgICBhbmQgaGVscHMgeW91IGJldHRlciB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBpcyBnb2luZyBvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93aW5nIGlzIHRoZSBjb21wbGV0ZSAiSGVsbG8gV29ybGQiIGV4YW1wbGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSBhIFByb2plY3QgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgRmlyc3QsIHNldCB1cCBhIGRpcmVjdG9yeSBmb3IgdGhlICJIZWxsbyBXb3JsZCIgcHJvamVjdC4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGhvdyB5b3UgY2FuIGRvIHNvIGluIHlvdXIgaG9tZSBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIG1rZGlyIH4vaGVsbG8KKyAgICAgJCBjZCB+L2hlbGxvCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIGRpcmVjdG9yeSB0aGF0IEJpdEJha2Ugd2lsbCB1c2UgdG8gZG8gYWxsIG9mCisgICAgICAgICAgICAgICAgaXRzIHdvcmsuCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyBkaXJlY3RvcnkgdG8ga2VlcCBhbGwgdGhlIG1ldGFmaWxlcyBuZWVkZWQKKyAgICAgICAgICAgICAgICBieSBCaXRCYWtlLgorICAgICAgICAgICAgICAgIEhhdmluZyBhIHByb2plY3QgZGlyZWN0b3J5IGlzIGEgZ29vZCB3YXkgdG8gaXNvbGF0ZSB5b3VyCisgICAgICAgICAgICAgICAgcHJvamVjdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UnVuIEJpdGJha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB5b3UgaGF2ZSBub3RoaW5nIGJ1dCBhIHByb2plY3QgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIFJ1biB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGFuZCBzZWUgd2hhdAorICAgICAgICAgICAgICAgIGl0IGRvZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UKKyAgICAgVGhlIEJCUEFUSCB2YXJpYWJsZSBpcyBub3Qgc2V0IGFuZCBiaXRiYWtlIGRpZCBub3QKKyAgICAgZmluZCBhIGNvbmYvYmJsYXllcnMuY29uZiBmaWxlIGluIHRoZSBleHBlY3RlZCBsb2NhdGlvbi4KKyAgICAgTWF5YmUgeW91IGFjY2lkZW50YWxseSBpbnZva2VkIGJpdGJha2UgZnJvbSB0aGUgd3JvbmcgZGlyZWN0b3J5PworICAgICBERUJVRzogUmVtb3ZlZCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBmcm9tIHRoZSBlbnZpcm9ubWVudDoKKyAgICAgR05PTUVfREVTS1RPUF9TRVNTSU9OX0lELCBYREdfQ1VSUkVOVF9ERVNLVE9QLAorICAgICBHTk9NRV9LRVlSSU5HX0NPTlRST0wsIERJU1BMQVksIFNTSF9BR0VOVF9QSUQsIExBTkcsIG5vX3Byb3h5LAorICAgICBYREdfU0VTU0lPTl9QQVRILCBYQVVUSE9SSVRZLCBTRVNTSU9OX01BTkFHRVIsIFNITFZMLAorICAgICBNQU5EQVRPUllfUEFUSCwgQ09NUElaX0NPTkZJR19QUk9GSUxFLCBXSU5ET1dJRCwgRURJVE9SLAorICAgICBHUEdfQUdFTlRfSU5GTywgU1NIX0FVVEhfU09DSywgR0RNU0VTU0lPTiwgR05PTUVfS0VZUklOR19QSUQsCisgICAgIFhER19TRUFUX1BBVEgsIFhER19DT05GSUdfRElSUywgTEVTU09QRU4sIERCVVNfU0VTU0lPTl9CVVNfQUREUkVTUywKKyAgICAgXywgWERHX1NFU1NJT05fQ09PS0lFLCBERVNLVE9QX1NFU1NJT04sIExFU1NDTE9TRSwgREVGQVVMVFNfUEFUSCwKKyAgICAgVUJVTlRVX01FTlVQUk9YWSwgT0xEUFdELCBYREdfREFUQV9ESVJTLCBDT0xPUlRFUk0sIExTX0NPTE9SUworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgbWFqb3JpdHkgb2YgdGhpcyBvdXRwdXQgaXMgc3BlY2lmaWMgdG8gZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgdGhhdCBhcmUgbm90IGRpcmVjdGx5IHJlbGV2YW50IHRvIEJpdEJha2UuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlIHZlcnkgZmlyc3QgbWVzc2FnZSByZWdhcmRpbmcgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgIGlzIHJlbGV2YW50LjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBydW4gQml0QmFrZSwgaXQgYmVnaW5zIGxvb2tpbmcgZm9yIG1ldGFkYXRhIGZpbGVzLgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBpcyB3aGF0IHRlbGxzIEJpdEJha2Ugd2hlcmUgdG8gbG9vayBmb3IgdGhvc2UgZmlsZXMuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IGlzIG5vdCBzZXQgYW5kIHlvdSBuZWVkIHRvIHNldCBpdC4KKyAgICAgICAgICAgICAgICBXaXRob3V0IDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiwgQml0YmFrZSBjYW5ub3QKKyAgICAgICAgICAgICAgICBmaW5kIGFueSBjb25maWd1cmF0aW9uIGZpbGVzICg8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICBvciByZWNpcGUgZmlsZXMgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPikgYXQgYWxsLgorICAgICAgICAgICAgICAgIEJpdEJha2UgYWxzbyBjYW5ub3QgZmluZCB0aGUgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2V0dGluZyA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBGb3IgdGhpcyBleGFtcGxlLCB5b3UgY2FuIHNldCA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBpbiB0aGUgc2FtZSBtYW5uZXIgdGhhdCB5b3Ugc2V0IDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBlYXJsaWVyIGluIHRoZSBhcHBlbmRpeC4KKyAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHJlYWxpemUsIHRob3VnaCwgdGhhdCBpdCBpcyBtdWNoIG1vcmUgZmxleGlibGUgdG8gc2V0IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZSB1cCBpbiBhIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBmaWxlIGZvciBlYWNoIHByb2plY3QuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkZyb20geW91ciBzaGVsbCwgZW50ZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kcyB0byBzZXQgYW5kCisgICAgICAgICAgICAgICAgZXhwb3J0IHRoZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gdmFyaWFibGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIEJCUEFUSD0iPHJlcGxhY2VhYmxlPnByb2plY3RkaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPiIKKyAgICAgJCBleHBvcnQgQkJQQVRICisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFVzZSB5b3VyIGFjdHVhbCBwcm9qZWN0IGRpcmVjdG9yeSBpbiB0aGUgY29tbWFuZC4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhhdCBkaXJlY3RvcnkgdG8gZmluZCB0aGUgbWV0YWRhdGEgaXQgbmVlZHMgZm9yCisgICAgICAgICAgICAgICAgeW91ciBwcm9qZWN0LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNwZWNpZnlpbmcgeW91ciBwcm9qZWN0IGRpcmVjdG9yeSwgZG8gbm90IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGlsZGUgKCJ+IikgY2hhcmFjdGVyIGFzIEJpdEJha2UgZG9lcyBub3QgZXhwYW5kIHRoYXQgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgIGFzIHRoZSBzaGVsbCB3b3VsZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJ1biBCaXRiYWtlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgTm93IHRoYXQgeW91IGhhdmUgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IGRlZmluZWQsIHJ1bgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgYWdhaW46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UKKyAgICAgRVJST1I6IFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICBGaWxlICIvaG9tZS9zY290dC1sZW5vdm8vYml0YmFrZS9saWIvYmIvY29va2VyZGF0YS5weSIsIGxpbmUgMTYzLCBpbiB3cmFwcGVkCisgICAgICAgICByZXR1cm4gZnVuYyhmbiwgKmFyZ3MpCisgICAgICAgRmlsZSAiL2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvbGliL2JiL2Nvb2tlcmRhdGEucHkiLCBsaW5lIDE3MywgaW4gcGFyc2VfY29uZmlnX2ZpbGUKKyAgICAgICAgIHJldHVybiBiYi5wYXJzZS5oYW5kbGUoZm4sIGRhdGEsIGluY2x1ZGUpCisgICAgICAgRmlsZSAiL2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvbGliL2JiL3BhcnNlL19faW5pdF9fLnB5IiwgbGluZSA5OSwgaW4gaGFuZGxlCisgICAgICAgICByZXR1cm4gaFsnaGFuZGxlJ10oZm4sIGRhdGEsIGluY2x1ZGUpCisgICAgICAgRmlsZSAiL2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L0NvbmZIYW5kbGVyLnB5IiwgbGluZSAxMjAsIGluIGhhbmRsZQorICAgICAgICAgYWJzX2ZuID0gcmVzb2x2ZV9maWxlKGZuLCBkYXRhKQorICAgICAgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9wYXJzZS9fX2luaXRfXy5weSIsIGxpbmUgMTE3LCBpbiByZXNvbHZlX2ZpbGUKKyAgICAgICAgIHJhaXNlIElPRXJyb3IoImZpbGUgJXMgbm90IGZvdW5kIGluICVzIiAlIChmbiwgYmJwYXRoKSkKKyAgICAgSU9FcnJvcjogZmlsZSBjb25mL2JpdGJha2UuY29uZiBub3QgZm91bmQgaW4gL2hvbWUvc2NvdHQtbGVub3ZvL2hlbGxvCisKKyAgICAgRVJST1I6IFVuYWJsZSB0byBwYXJzZSBjb25mL2JpdGJha2UuY29uZjogZmlsZSBjb25mL2JpdGJha2UuY29uZiBub3QgZm91bmQgaW4gL2hvbWUvc2NvdHQtbGVub3ZvL2hlbGxvCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgc2FtcGxlIG91dHB1dCBzaG93cyB0aGF0IEJpdEJha2UgY291bGQgbm90IGZpbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUgcHJvamVjdAorICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgdGhlIGZpcnN0IHRoaW5nIEJpdEJha2UgbXVzdCBmaW5kIGluIG9yZGVyCisgICAgICAgICAgICAgICAgdG8gYnVpbGQgYSB0YXJnZXQuCisgICAgICAgICAgICAgICAgQW5kLCBzaW5jZSB0aGUgcHJvamVjdCBkaXJlY3RvcnkgZm9yIHRoaXMgZXhhbXBsZSBpcworICAgICAgICAgICAgICAgIGVtcHR5LCB5b3UgbmVlZCB0byBwcm92aWRlIGEgPGZpbGVuYW1lPmNvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGluZyA8ZmlsZW5hbWU+Y29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBpbmNsdWRlcyBhIG51bWJlciBvZgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIEJpdEJha2UgdXNlcyBmb3IgbWV0YWRhdGEgYW5kIHJlY2lwZQorICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgIEZvciB0aGlzIGV4YW1wbGUsIHlvdSBuZWVkIHRvIGNyZWF0ZSB0aGUgZmlsZSBpbiB5b3VyIHByb2plY3QgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgYW5kIGRlZmluZSBzb21lIGtleSBCaXRCYWtlIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHNlZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9oYW1iZWRkZWQub3JnL2Jsb2cvMjAxMi8xMS8yNC9mcm9tLWJpdGJha2UtaGVsbG8td29ybGQtdG8tYW4taW1hZ2UvI2FuLW92ZXJ2aWV3LW9mLWJpdGJha2Vjb25mJz48L3VsaW5rPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5Vc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kcyB0byBjcmVhdGUgdGhlIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaW4gdGhlIHByb2plY3QgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBta2RpciBjb25mCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZyb20gd2l0aGluIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgdXNlCisgICAgICAgICAgICAgICAgc29tZSBlZGl0b3IgdG8gY3JlYXRlIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBzbyB0aGF0IGl0IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBUTVBESVIgID0gIiR7PGxpbmsgbGlua2VuZD0ndmFyLVRPUERJUic+VE9QRElSPC9saW5rPn0vdG1wIgorICAgICA8bGluayBsaW5rZW5kPSd2YXItQ0FDSEUnPkNBQ0hFPC9saW5rPiAgID0gIiR7VE1QRElSfS9jYWNoZSIKKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNUQU1QJz5TVEFNUDwvbGluaz4gICA9ICIke1RNUERJUn0vc3RhbXBzIgorICAgICA8bGluayBsaW5rZW5kPSd2YXItVCc+VDwvbGluaz4gICAgICAgPSAiJHtUTVBESVJ9L3dvcmsiCisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CJz5CPC9saW5rPiAgICAgICA9ICIke1RNUERJUn0iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gdmFyaWFibGUgZXN0YWJsaXNoZXMgYSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICB0aGF0IEJpdEJha2UgdXNlcyBmb3IgYnVpbGQgb3V0cHV0IGFuZCBpbnRlcm1lZGlhdGUgZmlsZXMgKG90aGVyCisgICAgICAgICAgICAgICAgdGhhbiB0aGUgY2FjaGVkIGluZm9ybWF0aW9uIHVzZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc2V0c2NlbmUnPlNldHNjZW5lPC9saW5rPiBwcm9jZXNzLgorICAgICAgICAgICAgICAgIEhlcmUsIHRoZSA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gZGlyZWN0b3J5IGlzIHNldCB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5oZWxsby90bXA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+VGlwPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHdheXMgc2FmZWx5IGRlbGV0ZSB0aGUgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpbiBvcmRlciB0byByZWJ1aWxkIGEgQml0QmFrZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBwcm9jZXNzIGNyZWF0ZXMgdGhlIGRpcmVjdG9yeSBmb3IgeW91CisgICAgICAgICAgICAgICAgICAgIHdoZW4geW91IHJ1biBCaXRCYWtlLgorICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggb2YgdGhlIG90aGVyIHZhcmlhYmxlcyBkZWZpbmVkIGluIHRoaXMKKyAgICAgICAgICAgICAgICBleGFtcGxlLCBjbGljayBvbiB0aGUgbGlua3MgdG8gdGFrZSB5b3UgdG8gdGhlIGRlZmluaXRpb25zIGluCisgICAgICAgICAgICAgICAgdGhlIGdsb3NzYXJ5LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SdW4gQml0YmFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEFmdGVyIG1ha2luZyBzdXJlIHRoYXQgdGhlIDxmaWxlbmFtZT5jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBleGlzdHMsIHlvdSBjYW4gcnVuIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tbWFuZCBhZ2FpbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiskIGJpdGJha2UKK0VSUk9SOiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9jb29rZXJkYXRhLnB5IiwgbGluZSAxNjMsIGluIHdyYXBwZWQKKyAgICByZXR1cm4gZnVuYyhmbiwgKmFyZ3MpCisgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9jb29rZXJkYXRhLnB5IiwgbGluZSAxNzcsIGluIF9pbmhlcml0CisgICAgYmIucGFyc2UuQkJIYW5kbGVyLmluaGVyaXQoYmJjbGFzcywgImNvbmZpZ3VyYXRpb24gSU5IRVJJVHMiLCAwLCBkYXRhKQorICBGaWxlICIvaG9tZS9zY290dC1sZW5vdm8vYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQkJIYW5kbGVyLnB5IiwgbGluZSA5MiwgaW4gaW5oZXJpdAorICAgIGluY2x1ZGUoZm4sIGZpbGUsIGxpbmVubywgZCwgImluaGVyaXQiKQorICBGaWxlICIvaG9tZS9zY290dC1sZW5vdm8vYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQ29uZkhhbmRsZXIucHkiLCBsaW5lIDEwMCwgaW4gaW5jbHVkZQorICAgIHJhaXNlIFBhcnNlRXJyb3IoIkNvdWxkIG5vdCAlKGVycm9yX291dClzIGZpbGUgJShmbilzIiAlIHZhcnMoKSwgb2xkZm4sIGxpbmVubykKK1BhcnNlRXJyb3I6IFBhcnNlRXJyb3IgaW4gY29uZmlndXJhdGlvbiBJTkhFUklUczogQ291bGQgbm90IGluaGVyaXQgZmlsZSBjbGFzc2VzL2Jhc2UuYmJjbGFzcworCitFUlJPUjogVW5hYmxlIHRvIHBhcnNlIGJhc2U6IFBhcnNlRXJyb3IgaW4gY29uZmlndXJhdGlvbiBJTkhFUklUczogQ291bGQgbm90IGluaGVyaXQgZmlsZSBjbGFzc2VzL2Jhc2UuYmJjbGFzcworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiB0aGUgc2FtcGxlIG91dHB1dCwgQml0QmFrZSBjb3VsZCBub3QgZmluZCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xhc3Nlcy9iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGNyZWF0ZSB0aGF0IGZpbGUgbmV4dC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRpbmcgPGZpbGVuYW1lPmNsYXNzZXMvYmFzZS5iYmNsYXNzPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgY2xhc3MgZmlsZXMgdG8gcHJvdmlkZSBjb21tb24gY29kZSBhbmQgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgICAgICAgICBUaGUgbWluaW1hbGx5IHJlcXVpcmVkIGNsYXNzIGZvciBCaXRCYWtlIGlzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGFzc2VzL2Jhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT4gY2xhc3MgaXMgaW1wbGljaXRseSBpbmhlcml0ZWQgYnkKKyAgICAgICAgICAgICAgICBldmVyeSByZWNpcGUuCisgICAgICAgICAgICAgICAgQml0QmFrZSBsb29rcyBmb3IgdGhlIGNsYXNzIGluIHRoZSA8ZmlsZW5hbWU+Y2xhc3NlczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0IChpLmUgPGZpbGVuYW1lPmhlbGxvL2NsYXNzZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGluIHRoaXMgZXhhbXBsZSkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkNyZWF0ZSB0aGUgPGZpbGVuYW1lPmNsYXNzZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgJEhPTUUvaGVsbG8KKyAgICAgJCBta2RpciBjbGFzc2VzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE1vdmUgdG8gdGhlIDxmaWxlbmFtZT5jbGFzc2VzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGFuZCB0aGVuCisgICAgICAgICAgICAgICAgY3JlYXRlIHRoZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZSBieSBpbnNlcnRpbmcKKyAgICAgICAgICAgICAgICB0aGlzIHNpbmdsZSBsaW5lOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYWRkdGFzayBidWlsZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgbWluaW1hbCB0YXNrIHRoYXQgQml0QmFrZSBydW5zIGlzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19idWlsZDwvZmlsZW5hbWU+IHRhc2suCisgICAgICAgICAgICAgICAgVGhpcyBpcyBhbGwgdGhlIGV4YW1wbGUgbmVlZHMgaW4gb3JkZXIgdG8gYnVpbGQgdGhlIHByb2plY3QuCisgICAgICAgICAgICAgICAgT2YgY291cnNlLCB0aGUgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGNhbiBoYXZlIG11Y2gKKyAgICAgICAgICAgICAgICBtb3JlIGRlcGVuZGluZyBvbiB3aGljaCBidWlsZCBlbnZpcm9ubWVudHMgQml0QmFrZSBpcworICAgICAgICAgICAgICAgIHN1cHBvcnRpbmcuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIDxmaWxlbmFtZT5iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlLAorICAgICAgICAgICAgICAgIHlvdSBjYW4gbG9vayBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9oYW1iZWRkZWQub3JnL2Jsb2cvMjAxMi8xMS8yNC9mcm9tLWJpdGJha2UtaGVsbG8td29ybGQtdG8tYW4taW1hZ2UvI3Rhc2tzJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UnVuIEJpdGJha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHRoZSA8ZmlsZW5hbWU+Y2xhc3Nlcy9iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUgZXhpc3RzLCB5b3UgY2FuIHJ1biB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgYWdhaW46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UKKyAgICAgTm90aGluZyB0byBkby4gIFVzZSAnYml0YmFrZSB3b3JsZCcgdG8gYnVpbGQgZXZlcnl0aGluZywgb3IgcnVuICdiaXRiYWtlIC0taGVscCcgZm9yIHVzYWdlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIGlzIGZpbmFsbHkgcmVwb3J0aW5nIG5vIGVycm9ycy4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgY2FuIHNlZSB0aGF0IGl0IHJlYWxseSBkb2VzIG5vdCBoYXZlIGFueXRoaW5nCisgICAgICAgICAgICAgICAgdG8gZG8uCisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gY3JlYXRlIGEgcmVjaXBlIHRoYXQgZ2l2ZXMgQml0QmFrZSBzb21ldGhpbmcgdG8gZG8uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0aW5nIGEgTGF5ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBXaGlsZSBpdCBpcyBub3QgcmVhbGx5IG5lY2Vzc2FyeSBmb3Igc3VjaCBhIHNtYWxsIGV4YW1wbGUsCisgICAgICAgICAgICAgICAgaXQgaXMgZ29vZCBwcmFjdGljZSB0byBjcmVhdGUgYSBsYXllciBpbiB3aGljaCB0byBrZWVwIHlvdXIKKyAgICAgICAgICAgICAgICBjb2RlIHNlcGFyYXRlIGZyb20gdGhlIGdlbmVyYWwgbWV0YWRhdGEgdXNlZCBieSBCaXRCYWtlLgorICAgICAgICAgICAgICAgIFRodXMsIHRoaXMgZXhhbXBsZSBjcmVhdGVzIGFuZCB1c2VzIGEgbGF5ZXIgY2FsbGVkICJteWxheWVyIi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gYWRkaW5nIGEgbGF5ZXIgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2hhbWJlZGRlZC5vcmcvYmxvZy8yMDEyLzExLzI0L2Zyb20tYml0YmFrZS1oZWxsby13b3JsZC10by1hbi1pbWFnZS8jYWRkaW5nLWFuLWV4YW1wbGUtbGF5ZXInPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+TWluaW1hbGx5LCB5b3UgbmVlZCBhIHJlY2lwZSBmaWxlIGFuZCBhIGxheWVyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBmaWxlIGluIHlvdXIgbGF5ZXIuCisgICAgICAgICAgICAgICAgVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBuZWVkcyB0byBiZSBpbiB0aGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpbnNpZGUgdGhlIGxheWVyLgorICAgICAgICAgICAgICAgIFVzZSB0aGVzZSBjb21tYW5kcyB0byBzZXQgdXAgdGhlIGxheWVyIGFuZCB0aGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgJEhPTUUKKyAgICAgJCBta2RpciBteWxheWVyCisgICAgICQgY2QgbXlsYXllcgorICAgICAkIG1rZGlyIGNvbmYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTW92ZSB0byB0aGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRoYXQgaGFzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQlBBVEggLj0gIjokezxsaW5rIGxpbmtlbmQ9J3Zhci1MQVlFUkRJUic+TEFZRVJESVI8L2xpbms+fSIKKworICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJGSUxFUyc+QkJGSUxFUzwvbGluaz4gKz0gIiR7TEFZRVJESVJ9LyouYmIiCisKKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCRklMRV9DT0xMRUNUSU9OUyc+QkJGSUxFX0NPTExFQ1RJT05TPC9saW5rPiArPSAibXlsYXllciIKKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCRklMRV9QQVRURVJOJz5CQkZJTEVfUEFUVEVSTl9teWxheWVyPC9saW5rPiA6PSAiXiR7TEFZRVJESVJ9LyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZXNlIHZhcmlhYmxlcywgY2xpY2sgdGhlIGxpbmtzCisgICAgICAgICAgICAgICAgdG8gZ28gdG8gdGhlIGRlZmluaXRpb25zIGluIHRoZSBnbG9zc2FyeS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+WW91IG5lZWQgdG8gY3JlYXRlIHRoZSByZWNpcGUgZmlsZSBuZXh0LgorICAgICAgICAgICAgICAgIEluc2lkZSB5b3VyIGxheWVyIGF0IHRoZSB0b3AtbGV2ZWwsIHVzZSBhbiBlZGl0b3IgYW5kIGNyZWF0ZQorICAgICAgICAgICAgICAgIGEgcmVjaXBlIGZpbGUgbmFtZWQgPGZpbGVuYW1lPnByaW50aGVsbG8uYmI8L2ZpbGVuYW1lPiB0aGF0CisgICAgICAgICAgICAgICAgaGFzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8bGluayBsaW5rZW5kPSd2YXItREVTQ1JJUFRJT04nPkRFU0NSSVBUSU9OPC9saW5rPiA9ICJQcmludHMgSGVsbG8gV29ybGQiCisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+UE48L2xpbms+ID0gJ3ByaW50aGVsbG8nCisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+UFY8L2xpbms+ID0gJzEnCisKKyAgICAgcHl0aG9uIGRvX2J1aWxkKCkgeworICAgICAgICBiYi5wbGFpbigiKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgYmIucGxhaW4oIiogICAgICAgICAgICAgICAgICAqIik7CisgICAgICAgIGJiLnBsYWluKCIqICBIZWxsbywgV29ybGQhICAgKiIpOworICAgICAgICBiYi5wbGFpbigiKiAgICAgICAgICAgICAgICAgICoiKTsKKyAgICAgICAgYmIucGxhaW4oIioqKioqKioqKioqKioqKioqKioqIik7CisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSBmaWxlIHNpbXBseSBwcm92aWRlcyBhIGRlc2NyaXB0aW9uIG9mIHRoZQorICAgICAgICAgICAgICAgIHJlY2lwZSwgdGhlIG5hbWUsIHZlcnNpb24sIGFuZCB0aGUgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB0YXNrLCB3aGljaCBwcmludHMgb3V0ICJIZWxsbyBXb3JsZCIgdG8gdGhlIGNvbnNvbGUuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlc2UgdmFyaWFibGVzLCBmb2xsb3cgdGhlIGxpbmtzCisgICAgICAgICAgICAgICAgdG8gdGhlIGdsb3NzYXJ5LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SdW4gQml0YmFrZSBXaXRoIGEgVGFyZ2V0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgTm93IHRoYXQgYSBCaXRCYWtlIHRhcmdldCBleGlzdHMsIHJ1biB0aGUgY29tbWFuZCBhbmQgcHJvdmlkZQorICAgICAgICAgICAgICAgIHRoYXQgdGFyZ2V0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCAkSE9NRS9oZWxsbworICAgICAkIGJpdGJha2UgcHJpbnRoZWxsbworICAgICBFUlJPUjogbm8gcmVjaXBlIGZpbGVzIHRvIGJ1aWxkLCBjaGVjayB5b3VyIEJCUEFUSCBhbmQgQkJGSUxFUz8KKworICAgICBTdW1tYXJ5OiBUaGVyZSB3YXMgMSBFUlJPUiBtZXNzYWdlIHNob3duLCByZXR1cm5pbmcgYSBub24temVybyBleGl0IGNvZGUuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFdlIGhhdmUgY3JlYXRlZCB0aGUgbGF5ZXIgd2l0aCB0aGUgcmVjaXBlIGFuZCB0aGUgbGF5ZXIKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgYnV0IGl0IHN0aWxsIHNlZW1zIHRoYXQgQml0QmFrZSBjYW5ub3QKKyAgICAgICAgICAgICAgICBmaW5kIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgQml0QmFrZSBuZWVkcyBhIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiB0aGF0CisgICAgICAgICAgICAgICAgbGlzdHMgdGhlIGxheWVycyBmb3IgdGhlIHByb2plY3QuCisgICAgICAgICAgICAgICAgV2l0aG91dCB0aGlzIGZpbGUsIEJpdEJha2UgY2Fubm90IGZpbmQgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRpbmcgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZSA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgIHRvIGxvY2F0ZSBsYXllcnMgbmVlZGVkIGZvciB0aGUgcHJvamVjdC4KKyAgICAgICAgICAgICAgICBUaGlzIGZpbGUgbXVzdCByZXNpZGUgaW4gdGhlIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgb2YgdGhlIHByb2plY3QgKGkuZS4gPGZpbGVuYW1lPmhlbGxvL2NvbmY8L2ZpbGVuYW1lPiBmb3IgdGhpcworICAgICAgICAgICAgICAgIGV4YW1wbGUpLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5TZXQgeW91ciB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgPGZpbGVuYW1lPmhlbGxvL2NvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBhbmQgdGhlbiBjcmVhdGUgdGhlIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlIHNvIHRoYXQgaXQgY29udGFpbnMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTEFZRVJTID89ICIgXAorICAgICAgIC9ob21lLyZsdDt5b3UmZ3Q7L215bGF5ZXIgXAorICAgICAgICIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gcHJvdmlkZSB5b3VyIG93biBpbmZvcm1hdGlvbiBmb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW91PC9maWxlbmFtZT4gaW4gdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJ1biBCaXRiYWtlIFdpdGggYSBUYXJnZXQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBOb3cgdGhhdCB5b3UgaGF2ZSBzdXBwbGllZCB0aGUgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUsIHJ1biB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGFuZCBwcm92aWRlCisgICAgICAgICAgICAgICAgdGhlIHRhcmdldDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBwcmludGhlbGxvCisgICAgIFBhcnNpbmcgcmVjaXBlczogMTAwJSB8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI3wKKyAgICAgVGltZTogMDA6MDA6MDAKKyAgICAgUGFyc2luZyBvZiAxIC5iYiBmaWxlcyBjb21wbGV0ZSAoMCBjYWNoZWQsIDEgcGFyc2VkKS4gMSB0YXJnZXRzLCAwIHNraXBwZWQsIDAgbWFza2VkLCAwIGVycm9ycy4KKyAgICAgTk9URTogUmVzb2x2aW5nIGFueSBtaXNzaW5nIHRhc2sgcXVldWUgZGVwZW5kZW5jaWVzCisgICAgIE5PVEU6IFByZXBhcmluZyBSdW5RdWV1ZQorICAgICBOT1RFOiBFeGVjdXRpbmcgUnVuUXVldWUgVGFza3MKKyAgICAgKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiAgICAgICAgICAgICAgICAgICoKKyAgICAgKiAgSGVsbG8sIFdvcmxkISAgICoKKyAgICAgKiAgICAgICAgICAgICAgICAgICoKKyAgICAgKioqKioqKioqKioqKioqKioqKioKKyAgICAgTk9URTogVGFza3MgU3VtbWFyeTogQXR0ZW1wdGVkIDEgdGFza3Mgb2Ygd2hpY2ggMCBkaWRuJ3QgbmVlZCB0byBiZSByZXJ1biBhbmQgYWxsIHN1Y2NlZWRlZC4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQml0QmFrZSBmaW5kcyB0aGUgPGZpbGVuYW1lPnByaW50aGVsbG88L2ZpbGVuYW1lPiByZWNpcGUgYW5kCisgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IHJ1bnMgdGhlIHRhc2suCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEFmdGVyIHRoZSBmaXJzdCBleGVjdXRpb24sIHJlLXJ1bm5pbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgcHJpbnRoZWxsbzwvZmlsZW5hbWU+IGFnYWluIHdpbGwgbm90CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCBpbiBhIEJpdEJha2UgcnVuIHRoYXQgcHJpbnRzIHRoZSBzYW1lIGNvbnNvbGUKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgdGhlIGZpcnN0IHRpbWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wcmludGhlbGxvLmJiPC9maWxlbmFtZT4gcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4gdGFzayBleGVjdXRlcworICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHksIEJpdEJha2Ugd3JpdGVzIGEgc3RhbXAgZmlsZSBmb3IgdGhlIHRhc2suCisgICAgICAgICAgICAgICAgICAgIFRodXMsIHRoZSBuZXh0IHRpbWUgeW91IGF0dGVtcHQgdG8gcnVuIHRoZSB0YXNrCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoYXQgc2FtZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugbm90aWNlcyB0aGUgc3RhbXAgYW5kIHRoZXJlZm9yZSBkZXRlcm1pbmVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlIHRhc2sgZG9lcyBub3QgbmVlZCB0byBiZSByZS1ydW4uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkZWxldGUgdGhlIDxmaWxlbmFtZT50bXA8L2ZpbGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgb3IgcnVuIDxmaWxlbmFtZT5iaXRiYWtlIC1jIGNsZWFuIHByaW50aGVsbG88L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiByZS1ydW4gdGhlIGJ1aWxkLCB0aGUgIkhlbGxvLCBXb3JsZCEiIG1lc3NhZ2Ugd2lsbAorICAgICAgICAgICAgICAgICAgICBiZSBwcmludGVkIGFnYWluLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+Cis8L2FwcGVuZGl4PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaW50cm8ueG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaW50cm8ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxODg2NTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1pbnRyby54bWwKQEAgLTAsMCArMSw2ODUgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIj4KKworPGNoYXB0ZXIgaWQ9ImJpdGJha2UtdXNlci1tYW51YWwtaW50cm8iPgorICAgIDx0aXRsZT5PdmVydmlldzwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2VsY29tZSB0byB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbC4KKyAgICAgICAgVGhpcyBtYW51YWwgcHJvdmlkZXMgaW5mb3JtYXRpb24gb24gdGhlIEJpdEJha2UgdG9vbC4KKyAgICAgICAgVGhlIGluZm9ybWF0aW9uIGF0dGVtcHRzIHRvIGJlIGFzIGluZGVwZW5kZW50IGFzIHBvc3NpYmxlIHJlZ2FyZGluZworICAgICAgICBzeXN0ZW1zIHRoYXQgdXNlIEJpdEJha2UsIHN1Y2ggYXMgT3BlbkVtYmVkZGVkIGFuZCB0aGUKKyAgICAgICAgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgSW4gc29tZSBjYXNlcywgc2NlbmFyaW9zIG9yIGV4YW1wbGVzIHdpdGhpbiB0aGUgY29udGV4dCBvZgorICAgICAgICBhIGJ1aWxkIHN5c3RlbSBhcmUgdXNlZCBpbiB0aGUgbWFudWFsIHRvIGhlbHAgd2l0aCB1bmRlcnN0YW5kaW5nLgorICAgICAgICBGb3IgdGhlc2UgY2FzZXMsIHRoZSBtYW51YWwgY2xlYXJseSBzdGF0ZXMgdGhlIGNvbnRleHQuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9ImludHJvIj4KKyAgICAgICAgPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGdW5kYW1lbnRhbGx5LCBCaXRCYWtlIGlzIGEgZ2VuZXJpYyB0YXNrIGV4ZWN1dGlvbgorICAgICAgICAgICAgZW5naW5lIHRoYXQgYWxsb3dzIHNoZWxsIGFuZCBQeXRob24gdGFza3MgdG8gYmUgcnVuCisgICAgICAgICAgICBlZmZpY2llbnRseSBhbmQgaW4gcGFyYWxsZWwgd2hpbGUgd29ya2luZyB3aXRoaW4KKyAgICAgICAgICAgIGNvbXBsZXggaW50ZXItdGFzayBkZXBlbmRlbmN5IGNvbnN0cmFpbnRzLgorICAgICAgICAgICAgT25lIG9mIEJpdEJha2UncyBtYWluIHVzZXJzLCBPcGVuRW1iZWRkZWQsIHRha2VzIHRoaXMgY29yZQorICAgICAgICAgICAgYW5kIGJ1aWxkcyBlbWJlZGRlZCBMaW51eCBzb2Z0d2FyZSBzdGFja3MgdXNpbmcKKyAgICAgICAgICAgIGEgdGFzay1vcmllbnRlZCBhcHByb2FjaC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29uY2VwdHVhbGx5LCBCaXRCYWtlIGlzIHNpbWlsYXIgdG8gR05VIE1ha2UgaW4KKyAgICAgICAgICAgIHNvbWUgcmVnYXJkcyBidXQgaGFzIHNpZ25pZmljYW50IGRpZmZlcmVuY2VzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgZXhlY3V0ZXMgdGFza3MgYWNjb3JkaW5nIHRvIHByb3ZpZGVkCisgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhIHRoYXQgYnVpbGRzIHVwIHRoZSB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgTWV0YWRhdGEgaXMgc3RvcmVkIGluIHJlY2lwZSAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICBhbmQgcmVsYXRlZCByZWNpcGUgImFwcGVuZCIgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgZmlsZXMsIGNvbmZpZ3VyYXRpb24gKDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+KSBhbmQKKyAgICAgICAgICAgICAgICAgICAgdW5kZXJseWluZyBpbmNsdWRlICg8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+KSBmaWxlcywgYW5kCisgICAgICAgICAgICAgICAgICAgIGluIGNsYXNzICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBtZXRhZGF0YSBwcm92aWRlcworICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHdpdGggaW5zdHJ1Y3Rpb25zIG9uIHdoYXQgdGFza3MgdG8gcnVuIGFuZAorICAgICAgICAgICAgICAgICAgICB0aGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhvc2UgdGFza3MuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBpbmNsdWRlcyBhIGZldGNoZXIgbGlicmFyeSBmb3Igb2J0YWluaW5nIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICBjb2RlIGZyb20gdmFyaW91cyBwbGFjZXMgc3VjaCBhcyBsb2NhbCBmaWxlcywgc291cmNlIGNvbnRyb2wKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtcywgb3Igd2Vic2l0ZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGluc3RydWN0aW9ucyBmb3IgZWFjaCB1bml0IHRvIGJlIGJ1aWx0IChlLmcuIGEgcGllY2UKKyAgICAgICAgICAgICAgICAgICAgb2Ygc29mdHdhcmUpIGFyZSBrbm93biBhcyAicmVjaXBlIiBmaWxlcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbiBhbGwgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1bml0CisgICAgICAgICAgICAgICAgICAgIChkZXBlbmRlbmNpZXMsIHNvdXJjZSBmaWxlIGxvY2F0aW9ucywgY2hlY2tzdW1zLCBkZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgICAgICBhbmQgc28gb24pLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgaW5jbHVkZXMgYSBjbGllbnQvc2VydmVyIGFic3RyYWN0aW9uIGFuZCBjYW4KKyAgICAgICAgICAgICAgICAgICAgYmUgdXNlZCBmcm9tIGEgY29tbWFuZCBsaW5lIG9yIHVzZWQgYXMgYSBzZXJ2aWNlIG92ZXIKKyAgICAgICAgICAgICAgICAgICAgWE1MLVJQQyBhbmQgaGFzIHNldmVyYWwgZGlmZmVyZW50IHVzZXIgaW50ZXJmYWNlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJoaXN0b3J5LWFuZC1nb2FscyI+CisgICAgICAgIDx0aXRsZT5IaXN0b3J5IGFuZCBHb2FsczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHdhcyBvcmlnaW5hbGx5IGEgcGFydCBvZiB0aGUgT3BlbkVtYmVkZGVkIHByb2plY3QuCisgICAgICAgICAgICBJdCB3YXMgaW5zcGlyZWQgYnkgdGhlIFBvcnRhZ2UgcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbQorICAgICAgICAgICAgdXNlZCBieSB0aGUgR2VudG9vIExpbnV4IGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgIE9uIERlY2VtYmVyIDcsIDIwMDQsIE9wZW5FbWJlZGRlZCBwcm9qZWN0IHRlYW0gbWVtYmVyCisgICAgICAgICAgICBDaHJpcyBMYXJzb24gc3BsaXQgdGhlIHByb2plY3QgaW50byB0d28gZGlzdGluY3QgcGllY2VzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Qml0QmFrZSwgYSBnZW5lcmljIHRhc2sgZXhlY3V0b3I8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+T3BlbkVtYmVkZGVkLCBhIG1ldGFkYXRhIHNldCB1dGlsaXplZCBieQorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIFRvZGF5LCBCaXRCYWtlIGlzIHRoZSBwcmltYXJ5IGJhc2lzIG9mIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5vcGVuZW1iZWRkZWQub3JnLyI+T3BlbkVtYmVkZGVkPC91bGluaz4KKyAgICAgICAgICAgIHByb2plY3QsIHdoaWNoIGlzIGJlaW5nIHVzZWQgdG8gYnVpbGQgYW5kIG1haW50YWluIExpbnV4CisgICAgICAgICAgICBkaXN0cmlidXRpb25zIHN1Y2ggYXMgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmFuZ3N0cm9tLWRpc3RyaWJ1dGlvbi5vcmcvJz5BbmdzdHJvbSBEaXN0cmlidXRpb248L3VsaW5rPiwKKyAgICAgICAgICAgIGFuZCB3aGljaCBpcyBhbHNvIGJlaW5nIHVzZWQgYXMgdGhlIGJ1aWxkIHRvb2wgZm9yIExpbnV4IHByb2plY3RzCisgICAgICAgICAgICBzdWNoIGFzIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnJz5Zb2N0byBQcm9qZWN0PC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFByaW9yIHRvIEJpdEJha2UsIG5vIG90aGVyIGJ1aWxkIHRvb2wgYWRlcXVhdGVseSBtZXQgdGhlIG5lZWRzIG9mCisgICAgICAgICAgICBhbiBhc3BpcmluZyBlbWJlZGRlZCBMaW51eCBkaXN0cmlidXRpb24uCisgICAgICAgICAgICBBbGwgb2YgdGhlIGJ1aWxkIHN5c3RlbXMgdXNlZCBieSB0cmFkaXRpb25hbCBkZXNrdG9wIExpbnV4CisgICAgICAgICAgICBkaXN0cmlidXRpb25zIGxhY2tlZCBpbXBvcnRhbnQgZnVuY3Rpb25hbGl0eSwgYW5kIG5vbmUgb2YgdGhlCisgICAgICAgICAgICBhZCBob2MgQnVpbGRyb290LWJhc2VkIHN5c3RlbXMsIHByZXZhbGVudCBpbiB0aGUKKyAgICAgICAgICAgIGVtYmVkZGVkIHNwYWNlLCB3ZXJlIHNjYWxhYmxlIG9yIG1haW50YWluYWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU29tZSBpbXBvcnRhbnQgb3JpZ2luYWwgZ29hbHMgZm9yIEJpdEJha2Ugd2VyZToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIYW5kbGUgY3Jvc3MtY29tcGlsYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGFuZGxlIGludGVyLXBhY2thZ2UgZGVwZW5kZW5jaWVzIChidWlsZCB0aW1lIG9uCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBhcmNoaXRlY3R1cmUsIGJ1aWxkIHRpbWUgb24gbmF0aXZlCisgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZSwgYW5kIHJ1bnRpbWUpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgcnVubmluZyBhbnkgbnVtYmVyIG9mIHRhc2tzIHdpdGhpbiBhIGdpdmVuCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBmZXRjaGluZworICAgICAgICAgICAgICAgICAgICB1cHN0cmVhbSBzb3VyY2VzLCB1bnBhY2tpbmcgdGhlbSwgcGF0Y2hpbmcgdGhlbSwKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJpbmcgdGhlbSwgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlIExpbnV4IGRpc3RyaWJ1dGlvbiBhZ25vc3RpYyBmb3IgYm90aCBidWlsZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IHN5c3RlbXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmUgYXJjaGl0ZWN0dXJlIGFnbm9zdGljLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgbXVsdGlwbGUgYnVpbGQgYW5kIHRhcmdldCBvcGVyYXRpbmcgc3lzdGVtcworICAgICAgICAgICAgICAgICAgICAoZS5nLiBDeWd3aW4sIHRoZSBCU0RzLCBhbmQgc28gZm9ydGgpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlIHNlbGYgY29udGFpbmVkLCByYXRoZXIgdGhhbiB0aWdodGx5CisgICAgICAgICAgICAgICAgICAgIGludGVncmF0ZWQgaW50byB0aGUgYnVpbGQgbWFjaGluZSdzIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIYW5kbGUgY29uZGl0aW9uYWwgbWV0YWRhdGEgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGluZyBzeXN0ZW0sIGRpc3RyaWJ1dGlvbiwgYW5kIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmUgZWFzeSB0byB1c2UgdGhlIHRvb2xzIHRvIHN1cHBseSBsb2NhbCBtZXRhZGF0YSBhbmQgcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgYWdhaW5zdCB3aGljaCB0byBvcGVyYXRlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlIGVhc3kgdG8gdXNlIEJpdEJha2UgdG8gY29sbGFib3JhdGUgYmV0d2VlbiBtdWx0aXBsZQorICAgICAgICAgICAgICAgICAgICBwcm9qZWN0cyBmb3IgdGhlaXIgYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGUgYW4gaW5oZXJpdGFuY2UgbWVjaGFuaXNtIHRvIHNoYXJlCisgICAgICAgICAgICAgICAgICAgIGNvbW1vbiBtZXRhZGF0YSBiZXR3ZWVuIG1hbnkgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBPdmVyIHRpbWUgaXQgYmVjYW1lIGFwcGFyZW50IHRoYXQgc29tZSBmdXJ0aGVyIHJlcXVpcmVtZW50cworICAgICAgICAgICAgd2VyZSBuZWNlc3Nhcnk6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGFuZGxlIHZhcmlhbnRzIG9mIGEgYmFzZSByZWNpcGUgKGUuZy4gbmF0aXZlLCBzZGssCisgICAgICAgICAgICAgICAgICAgIGFuZCBtdWx0aWxpYikuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BsaXQgbWV0YWRhdGEgaW50byBsYXllcnMgYW5kIGFsbG93IGxheWVycworICAgICAgICAgICAgICAgICAgICB0byBlbmhhbmNlIG9yIG92ZXJyaWRlIG90aGVyIGxheWVycy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbGxvdyByZXByZXNlbnRhdGlvbiBvZiBhIGdpdmVuIHNldCBvZiBpbnB1dCB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gYSB0YXNrIGFzIGEgY2hlY2tzdW0uCisgICAgICAgICAgICAgICAgICAgIEJhc2VkIG9uIHRoYXQgY2hlY2tzdW0sIGFsbG93IGFjY2VsZXJhdGlvbiBvZiBidWlsZHMKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBwcmVidWlsdCBjb21wb25lbnRzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgQml0QmFrZSBzYXRpc2ZpZXMgYWxsIHRoZSBvcmlnaW5hbCByZXF1aXJlbWVudHMgYW5kIG1hbnkgbW9yZQorICAgICAgICAgICAgd2l0aCBleHRlbnNpb25zIGJlaW5nIG1hZGUgdG8gdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgdG8KKyAgICAgICAgICAgIHJlZmxlY3QgdGhlIGFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgRmxleGliaWxpdHkgYW5kIHBvd2VyIGhhdmUgYWx3YXlzIGJlZW4gdGhlIHByaW9yaXRpZXMuCisgICAgICAgICAgICBCaXRCYWtlIGlzIGhpZ2hseSBleHRlbnNpYmxlIGFuZCBzdXBwb3J0cyBlbWJlZGRlZCBQeXRob24gY29kZSBhbmQKKyAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBhbnkgYXJiaXRyYXJ5IHRhc2tzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9IkNvbmNlcHRzIj4KKyAgICAgICAgPHRpdGxlPkNvbmNlcHRzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgaXMgYSBwcm9ncmFtIHdyaXR0ZW4gaW4gdGhlIFB5dGhvbiBsYW5ndWFnZS4KKyAgICAgICAgICAgIEF0IHRoZSBoaWdoZXN0IGxldmVsLCBCaXRCYWtlIGludGVycHJldHMgbWV0YWRhdGEsIGRlY2lkZXMKKyAgICAgICAgICAgIHdoYXQgdGFza3MgYXJlIHJlcXVpcmVkIHRvIHJ1biwgYW5kIGV4ZWN1dGVzIHRob3NlIHRhc2tzLgorICAgICAgICAgICAgU2ltaWxhciB0byBHTlUgTWFrZSwgQml0QmFrZSBjb250cm9scyBob3cgc29mdHdhcmUgaXMKKyAgICAgICAgICAgIGJ1aWx0LgorICAgICAgICAgICAgR05VIE1ha2UgYWNoaWV2ZXMgaXRzIGNvbnRyb2wgdGhyb3VnaCAibWFrZWZpbGVzIiwgd2hpbGUKKyAgICAgICAgICAgIEJpdEJha2UgdXNlcyAicmVjaXBlcyIuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgZXh0ZW5kcyB0aGUgY2FwYWJpbGl0aWVzIG9mIGEgc2ltcGxlCisgICAgICAgICAgICB0b29sIGxpa2UgR05VIE1ha2UgYnkgYWxsb3dpbmcgZm9yIHRoZSBkZWZpbml0aW9uIG9mIG11Y2ggbW9yZQorICAgICAgICAgICAgY29tcGxleCB0YXNrcywgc3VjaCBhcyBhc3NlbWJsaW5nIGVudGlyZSBlbWJlZGRlZCBMaW51eAorICAgICAgICAgICAgZGlzdHJpYnV0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gaW50cm9kdWNlcyBzZXZlcmFsIGNvbmNlcHRzCisgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSB1bmRlcnN0b29kIGluIG9yZGVyIHRvIGJldHRlciBsZXZlcmFnZQorICAgICAgICAgICAgdGhlIHBvd2VyIG9mIEJpdEJha2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVjaXBlcyc+CisgICAgICAgICAgICA8dGl0bGU+UmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgUmVjaXBlcywgd2hpY2ggYXJlIGRlbm90ZWQgYnkgdGhlIGZpbGUgZXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+LCBhcmUgdGhlIG1vc3QgYmFzaWMgbWV0YWRhdGEgZmlsZXMuCisgICAgICAgICAgICAgICAgVGhlc2UgcmVjaXBlIGZpbGVzIHByb3ZpZGUgQml0QmFrZSB3aXRoIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlc2NyaXB0aXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSAoYXV0aG9yLCBob21lcGFnZSwgbGljZW5zZSwgYW5kIHNvIG9uKTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHZlcnNpb24gb2YgdGhlIHJlY2lwZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXhpc3RpbmcgZGVwZW5kZW5jaWVzIChib3RoIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcnVudGltZSBkZXBlbmRlbmNpZXMpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGVyZSB0aGUgc291cmNlIGNvZGUgcmVzaWRlcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvdyB0byBmZXRjaCBpdDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V2hldGhlciB0aGUgc291cmNlIGNvZGUgcmVxdWlyZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFueSBwYXRjaGVzLCB3aGVyZSB0byBmaW5kIHRoZW0sIGFuZCBob3cgdG8gYXBwbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZW08L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkhvdyB0byBjb25maWd1cmUgYW5kIGNvbXBpbGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgY29kZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V2hlcmUgb24gdGhlIHRhcmdldCBtYWNoaW5lIHRvIGluc3RhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG9yIHBhY2thZ2VzIGNyZWF0ZWQ8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2l0aGluIHRoZSBjb250ZXh0IG9mIEJpdEJha2UsIG9yIGFueSBwcm9qZWN0IHV0aWxpemluZyBCaXRCYWtlCisgICAgICAgICAgICAgICAgYXMgaXRzIGJ1aWxkIHN5c3RlbSwgZmlsZXMgd2l0aCB0aGUgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZXh0ZW5zaW9uIGFyZSByZWZlcnJlZCB0byBhcyByZWNpcGVzLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgdGVybSAicGFja2FnZSIgaXMgYWxzbyBjb21tb25seSB1c2VkIHRvIGRlc2NyaWJlIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHNpbmNlIHRoZSBzYW1lIHdvcmQgaXMgdXNlZCB0byBkZXNjcmliZSBwYWNrYWdlZAorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgZnJvbSBhIHByb2plY3QsIGl0IGlzIGJlc3QgdG8gbWFpbnRhaW4gYSBzaW5nbGUKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpdmUgdGVybSAtICJyZWNpcGVzIi4KKyAgICAgICAgICAgICAgICAgICAgUHV0IGFub3RoZXIgd2F5LCBhIHNpbmdsZSAicmVjaXBlIiBmaWxlIGlzIHF1aXRlIGNhcGFibGUKKyAgICAgICAgICAgICAgICAgICAgb2YgZ2VuZXJhdGluZyBhIG51bWJlciBvZiByZWxhdGVkIGJ1dCBzZXBhcmF0ZWx5IGluc3RhbGxhYmxlCisgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlcyIuCisgICAgICAgICAgICAgICAgICAgIEluIGZhY3QsIHRoYXQgYWJpbGl0eSBpcyBmYWlybHkgY29tbW9uLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjb25maWd1cmF0aW9uLWZpbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9uIEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBmaWxlcywgd2hpY2ggYXJlIGRlbm90ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZXh0ZW5zaW9uLCBkZWZpbmUKKyAgICAgICAgICAgICAgICB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRoYXQgZ292ZXJuIHRoZSBwcm9qZWN0J3MgYnVpbGQKKyAgICAgICAgICAgICAgICBwcm9jZXNzLgorICAgICAgICAgICAgICAgIFRoZXNlIGZpbGVzIGZhbGwgaW50byBzZXZlcmFsIGFyZWFzIHRoYXQgZGVmaW5lCisgICAgICAgICAgICAgICAgbWFjaGluZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgb3B0aW9ucywgY29tcGlsZXIgdHVuaW5nIG9wdGlvbnMsIGdlbmVyYWwgY29tbW9uCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgdXNlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuCisgICAgICAgICAgICAgICAgVGhlIG1haW4gY29uZmlndXJhdGlvbiBmaWxlIGlzIHRoZSBzYW1wbGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICBsb2NhdGVkIHdpdGhpbiB0aGUgQml0QmFrZSBzb3VyY2UgdHJlZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NsYXNzZXMnPgorICAgICAgICAgICAgPHRpdGxlPkNsYXNzZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDbGFzcyBmaWxlcywgd2hpY2ggYXJlIGRlbm90ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4gZXh0ZW5zaW9uLCBjb250YWluCisgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gdGhhdCBpcyB1c2VmdWwgdG8gc2hhcmUgYmV0d2VlbiBtZXRhZGF0YSBmaWxlcy4KKyAgICAgICAgICAgICAgICBUaGUgQml0QmFrZSBzb3VyY2UgdHJlZSBjdXJyZW50bHkgY29tZXMgd2l0aCBvbmUgY2xhc3MgbWV0YWRhdGEgZmlsZQorICAgICAgICAgICAgICAgIGNhbGxlZCA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoaXMgZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xhc3NlczwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGNsYXNzIGZpbGVzIGlzIHNwZWNpYWwgc2luY2UgaXQKKyAgICAgICAgICAgICAgICBpcyBhbHdheXMgaW5jbHVkZWQgYXV0b21hdGljYWxseSBmb3IgYWxsIHJlY2lwZXMKKyAgICAgICAgICAgICAgICBhbmQgY2xhc3Nlcy4KKyAgICAgICAgICAgICAgICBUaGlzIGNsYXNzIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciBzdGFuZGFyZCBiYXNpYyB0YXNrcyBzdWNoCisgICAgICAgICAgICAgICAgYXMgZmV0Y2hpbmcsIHVucGFja2luZywgY29uZmlndXJpbmcgKGVtcHR5IGJ5IGRlZmF1bHQpLAorICAgICAgICAgICAgICAgIGNvbXBpbGluZyAocnVucyBhbnkgTWFrZWZpbGUgcHJlc2VudCksIGluc3RhbGxpbmcgKGVtcHR5IGJ5CisgICAgICAgICAgICAgICAgZGVmYXVsdCkgYW5kIHBhY2thZ2luZyAoZW1wdHkgYnkgZGVmYXVsdCkuCisgICAgICAgICAgICAgICAgVGhlc2UgdGFza3MgYXJlIG9mdGVuIG92ZXJyaWRkZW4gb3IgZXh0ZW5kZWQgYnkgb3RoZXIgY2xhc3NlcworICAgICAgICAgICAgICAgIGFkZGVkIGR1cmluZyB0aGUgcHJvamVjdCBkZXZlbG9wbWVudCBwcm9jZXNzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2xheWVycyc+CisgICAgICAgICAgICA8dGl0bGU+TGF5ZXJzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTGF5ZXJzIGFsbG93IHlvdSB0byBpc29sYXRlIGRpZmZlcmVudCB0eXBlcyBvZgorICAgICAgICAgICAgICAgIGN1c3RvbWl6YXRpb25zIGZyb20gZWFjaCBvdGhlci4KKyAgICAgICAgICAgICAgICBXaGlsZSB5b3UgbWlnaHQgZmluZCBpdCB0ZW1wdGluZyB0byBrZWVwIGV2ZXJ5dGhpbmcgaW4gb25lIGxheWVyCisgICAgICAgICAgICAgICAgd2hlbiB3b3JraW5nIG9uIGEgc2luZ2xlIHByb2plY3QsIHRoZSBtb3JlIG1vZHVsYXIgeW91IG9yZ2FuaXplCisgICAgICAgICAgICAgICAgeW91ciBtZXRhZGF0YSwgdGhlIGVhc2llciBpdCBpcyB0byBjb3BlIHdpdGggZnV0dXJlIGNoYW5nZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGlsbHVzdHJhdGUgaG93IHlvdSBjYW4gdXNlIGxheWVycyB0byBrZWVwIHRoaW5ncyBtb2R1bGFyLAorICAgICAgICAgICAgICAgIGNvbnNpZGVyIGN1c3RvbWl6YXRpb25zIHlvdSBtaWdodCBtYWtlIHRvIHN1cHBvcnQgYSBzcGVjaWZpYyB0YXJnZXQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICBUaGVzZSB0eXBlcyBvZiBjdXN0b21pemF0aW9ucyB0eXBpY2FsbHkgcmVzaWRlIGluIGEgc3BlY2lhbCBsYXllciwKKyAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBhIGdlbmVyYWwgbGF5ZXIsIGNhbGxlZCBhIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKQorICAgICAgICAgICAgICAgIExheWVyLgorICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGUgbWFjaGluZSBjdXN0b21pemF0aW9ucyBzaG91bGQgYmUgaXNvbGF0ZWQgZnJvbQorICAgICAgICAgICAgICAgIHJlY2lwZXMgYW5kIG1ldGFkYXRhIHRoYXQgc3VwcG9ydCBhIG5ldyBHVUkgZW52aXJvbm1lbnQsIGZvcgorICAgICAgICAgICAgICAgIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgVGhpcyBzaXR1YXRpb24gZ2l2ZXMgeW91IGEgY291cGxlIG9mIGxheWVyczogb25lIGZvciB0aGUgbWFjaGluZQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIGFuZCBvbmUgZm9yIHRoZSBHVUkgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQsIGhvd2V2ZXIsIHRoYXQgdGhlIEJTUCBsYXllciBjYW4gc3RpbGwKKyAgICAgICAgICAgICAgICBtYWtlIG1hY2hpbmUtc3BlY2lmaWMgYWRkaXRpb25zIHRvIHJlY2lwZXMgd2l0aGluCisgICAgICAgICAgICAgICAgdGhlIEdVSSBlbnZpcm9ubWVudCBsYXllciB3aXRob3V0IHBvbGx1dGluZyB0aGUgR1VJIGxheWVyIGl0c2VsZgorICAgICAgICAgICAgICAgIHdpdGggdGhvc2UgbWFjaGluZS1zcGVjaWZpYyBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWNjb21wbGlzaCB0aGlzIHRocm91Z2ggYSByZWNpcGUgdGhhdCBpcyBhIEJpdEJha2UgYXBwZW5kCisgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikgZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdhcHBlbmQtYmJhcHBlbmQtZmlsZXMnPgorICAgICAgICAgICAgPHRpdGxlPkFwcGVuZCBGaWxlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFwcGVuZCBmaWxlcywgd2hpY2ggYXJlIGZpbGVzIHRoYXQgaGF2ZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBleHRlbnNpb24sIGV4dGVuZCBvcgorICAgICAgICAgICAgICAgIG92ZXJyaWRlIGluZm9ybWF0aW9uIGluIGFuIGV4aXN0aW5nIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIGV4cGVjdHMgZXZlcnkgYXBwZW5kIGZpbGUgdG8gaGF2ZSBhIGNvcnJlc3BvbmRpbmcgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHRoZSBhcHBlbmQgZmlsZSBhbmQgY29ycmVzcG9uZGluZyByZWNpcGUgZmlsZQorICAgICAgICAgICAgICAgIG11c3QgdXNlIHRoZSBzYW1lIHJvb3QgZmlsZW5hbWUuCisgICAgICAgICAgICAgICAgVGhlIGZpbGVuYW1lcyBjYW4gZGlmZmVyIG9ubHkgaW4gdGhlIGZpbGUgdHlwZSBzdWZmaXggdXNlZAorICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5mb3JtZmFjdG9yXzAuMC5iYjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb3JtZmFjdG9yXzAuMC5iYmFwcGVuZDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW5mb3JtYXRpb24gaW4gYXBwZW5kIGZpbGVzIGV4dGVuZHMgb3IKKyAgICAgICAgICAgICAgICBvdmVycmlkZXMgdGhlIGluZm9ybWF0aW9uIGluIHRoZSB1bmRlcmx5aW5nLAorICAgICAgICAgICAgICAgIHNpbWlsYXJseS1uYW1lZCByZWNpcGUgZmlsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4geW91IG5hbWUgYW4gYXBwZW5kIGZpbGUsIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgIHdpbGRjYXJkIGNoYXJhY3RlciAoJSkgdG8gYWxsb3cgZm9yIG1hdGNoaW5nIHJlY2lwZSBuYW1lcy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSBhbiBhcHBlbmQgZmlsZSBuYW1lZAorICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBidXN5Ym94XzEuMjEuJS5iYmFwcGVuZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGF0IGFwcGVuZCBmaWxlIHdvdWxkIG1hdGNoIGFueSA8ZmlsZW5hbWU+YnVzeWJveF8xLjIxLnguYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHZlcnNpb24gb2YgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBTbywgdGhlIGFwcGVuZCBmaWxlIHdvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcmVjaXBlIG5hbWVzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYnVzeWJveF8xLjIxLjEuYmIKKyAgICAgYnVzeWJveF8xLjIxLjIuYmIKKyAgICAgYnVzeWJveF8xLjIxLjMuYmIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgdGhlIDxmaWxlbmFtZT5idXN5Ym94PC9maWxlbmFtZT4gcmVjaXBlIHdhcyB1cGRhdGVkIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1c3lib3hfMS4zLjAuYmI8L2ZpbGVuYW1lPiwgdGhlIGFwcGVuZCBuYW1lIHdvdWxkIG5vdAorICAgICAgICAgICAgICAgIG1hdGNoLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBuYW1lZCB0aGUgYXBwZW5kIGZpbGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVzeWJveF8xLiUuYmJhcHBlbmQ8L2ZpbGVuYW1lPiwgdGhlbiB5b3Ugd291bGQgaGF2ZSBhIG1hdGNoLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiB0aGUgbW9zdCBnZW5lcmFsIGNhc2UsIHlvdSBjb3VsZCBuYW1lIHRoZSBhcHBlbmQgZmlsZSBzb21ldGhpbmcgYXMKKyAgICAgICAgICAgICAgICBzaW1wbGUgYXMgPGZpbGVuYW1lPmJ1c3lib3hfJS5iYmFwcGVuZDwvZmlsZW5hbWU+IHRvIGJlIGVudGlyZWx5CisgICAgICAgICAgICAgICAgdmVyc2lvbiBpbmRlcGVuZGVudC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdvYnRhaW5pbmctYml0YmFrZSc+CisgICAgICAgIDx0aXRsZT5PYnRhaW5pbmcgQml0QmFrZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIG9idGFpbiBCaXRCYWtlIHNldmVyYWwgZGlmZmVyZW50IHdheXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2xvbmluZyBCaXRCYWtlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFVzaW5nIEdpdCB0byBjbG9uZSB0aGUgQml0QmFrZSBzb3VyY2UgY29kZSByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgICAgIGlzIHRoZSByZWNvbW1lbmRlZCBtZXRob2QgZm9yIG9idGFpbmluZyBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICBDbG9uaW5nIHRoZSByZXBvc2l0b3J5IG1ha2VzIGl0IGVhc3kgdG8gZ2V0IGJ1ZyBmaXhlcworICAgICAgICAgICAgICAgICAgICBhbmQgaGF2ZSBhY2Nlc3MgdG8gc3RhYmxlIGJyYW5jaGVzIGFuZCB0aGUgbWFzdGVyCisgICAgICAgICAgICAgICAgICAgIGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBjbG9uZWQgQml0QmFrZSwgeW91IHNob3VsZCB1c2UKKyAgICAgICAgICAgICAgICAgICAgdGhlIGxhdGVzdCBzdGFibGUKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoIGZvciBkZXZlbG9wbWVudCBzaW5jZSB0aGUgbWFzdGVyIGJyYW5jaCBpcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBkZXZlbG9wbWVudCBhbmQgbWlnaHQgY29udGFpbiBsZXNzIHN0YWJsZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSB1c3VhbGx5IG5lZWQgYSB2ZXJzaW9uIG9mIEJpdEJha2UKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBtYXRjaGVzIHRoZSBtZXRhZGF0YSB5b3UgYXJlIHVzaW5nLgorICAgICAgICAgICAgICAgICAgICBUaGUgbWV0YWRhdGEgaXMgZ2VuZXJhbGx5IGJhY2t3YXJkcyBjb21wYXRpYmxlIGJ1dAorICAgICAgICAgICAgICAgICAgICBub3QgZm9yd2FyZCBjb21wYXRpYmxlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgY2xvbmVzIHRoZSBCaXRCYWtlIHJlcG9zaXRvcnk6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBjbG9uZXMgdGhlIEJpdEJha2UgR2l0IHJlcG9zaXRvcnkgaW50byBhCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBjYWxsZWQgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICBkZXNpZ25hdGUgYSBkaXJlY3RvcnkgYWZ0ZXIgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgY2xvbmU8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIGlmIHlvdSB3YW50IHRvIGNhbGwgdGhlIG5ldyBkaXJlY3Rvcnkgc29tZXRoaW5nCisgICAgICAgICAgICAgICAgICAgIG90aGVyIHRoYW4gPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgbmFtZXMgdGhlIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJkZXY8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIGJiZGV2CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGxhdGlvbiB1c2luZyB5b3VyIERpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICBQYWNrYWdlIE1hbmFnZW1lbnQgU3lzdGVtOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIG5vdAorICAgICAgICAgICAgICAgICAgICByZWNvbW1lbmRlZCBiZWNhdXNlIHRoZSBCaXRCYWtlIHZlcnNpb24gdGhhdCBpcworICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBieSB5b3VyIGRpc3RyaWJ1dGlvbiwgaW4gbW9zdCBjYXNlcywKKyAgICAgICAgICAgICAgICAgICAgaXMgc2V2ZXJhbAorICAgICAgICAgICAgICAgICAgICByZWxlYXNlcyBiZWhpbmQgYSBzbmFwc2hvdCBvZiB0aGUgQml0QmFrZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRha2luZyBhIHNuYXBzaG90IG9mIEJpdEJha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRpbmcgYSBzbmFwc2hvdCBvZiBCaXRCYWtlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb2RlIHJlcG9zaXRvcnkgZ2l2ZXMgeW91IGFjY2VzcyB0byBhIGtub3duCisgICAgICAgICAgICAgICAgICAgIGJyYW5jaCBvciByZWxlYXNlIG9mIEJpdEJha2UuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgIENsb25pbmcgdGhlIEdpdCByZXBvc2l0b3J5LCBhcyBkZXNjcmliZWQgZWFybGllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZCBmb3IgZ2V0dGluZyBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICAgICAgIENsb25pbmcgdGhlIHJlcG9zaXRvcnkgbWFrZXMgaXQgZWFzaWVyIHRvIHVwZGF0ZSBhcworICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoZXMgYXJlIGFkZGVkIHRvIHRoZSBzdGFibGUgYnJhbmNoZXMuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkb3dubG9hZHMgYSBzbmFwc2hvdCBvZgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHZlcnNpb24gMS4xNy4wOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2dldCBodHRwOi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZS9zbmFwc2hvdC9iaXRiYWtlLTEuMTcuMC50YXIuZ3oKKyAgICAgJCB0YXIgenhwdmYgYml0YmFrZS0xLjE3LjAudGFyLmd6CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgZXh0cmFjdGlvbiBvZiB0aGUgdGFyYmFsbCB1c2luZyB0aGUgdGFyIHV0aWxpdHksCisgICAgICAgICAgICAgICAgICAgIHlvdSBoYXZlIGEgZGlyZWN0b3J5IGVudGl0bGVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLTEuMTcuMDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzaW5nIHRoZSBCaXRCYWtlIHRoYXQgQ29tZXMgV2l0aCBZb3VyCisgICAgICAgICAgICAgICAgICAgIEJ1aWxkIENoZWNrb3V0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEEgZmluYWwgcG9zc2liaWxpdHkgZm9yIGdldHRpbmcgYSBjb3B5IG9mIEJpdEJha2UgaXMgdGhhdCBpdAorICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGNvbWVzIHdpdGggeW91ciBjaGVja291dCBvZiBhIGxhcmdlciBCaXRiYWtlLWJhc2VkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSwgc3VjaCBhcyBQb2t5IG9yIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIFJhdGhlciB0aGFuIG1hbnVhbGx5IGNoZWNraW5nIG91dCBpbmRpdmlkdWFsIGxheWVycyBhbmQKKyAgICAgICAgICAgICAgICAgICAgZ2x1aW5nIHRoZW0gdG9nZXRoZXIgeW91cnNlbGYsIHlvdSBjYW4gY2hlY2sKKyAgICAgICAgICAgICAgICAgICAgb3V0IGFuIGVudGlyZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoZSBjaGVja291dCB3aWxsIGFscmVhZHkgaW5jbHVkZSBhIHZlcnNpb24gb2YgQml0QmFrZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIGhhcyBiZWVuIHRob3JvdWdobHkgdGVzdGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIG90aGVyCisgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY2hlY2sgb3V0IGEgcGFydGljdWxhciBCaXRCYWtlLWJhc2VkCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSwgY29uc3VsdCB0aGF0IGJ1aWxkIHN5c3RlbSdzIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJiaXRiYWtlLXVzZXItbWFudWFsLWNvbW1hbmQiPgorICAgICAgICA8dGl0bGU+VGhlIEJpdEJha2UgQ29tbWFuZDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGlzIHRoZSBwcmltYXJ5IGludGVyZmFjZQorICAgICAgICAgICAgdG8gdGhlIEJpdEJha2UgdG9vbC4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyB0aGUgQml0QmFrZSBjb21tYW5kIHN5bnRheCBhbmQgcHJvdmlkZXMKKyAgICAgICAgICAgIHNldmVyYWwgZXhlY3V0aW9uIGV4YW1wbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzYWdlLWFuZC1zeW50YXgnPgorICAgICAgICAgICAgPHRpdGxlPlVzYWdlIGFuZCBzeW50YXg8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgdGhlIHVzYWdlIGFuZCBzeW50YXggZm9yIEJpdEJha2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWgKKyAgICAgVXNhZ2U6IGJpdGJha2UgW29wdGlvbnNdIFtyZWNpcGVuYW1lL3RhcmdldCAuLi5dCisKKyAgICAgICAgIEV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgdGFzayAoZGVmYXVsdCBpcyAnYnVpbGQnKSBmb3IgYSBnaXZlbiBzZXQgb2YgdGFyZ2V0IHJlY2lwZXMgKC5iYiBmaWxlcykuCisgICAgICAgICBJdCBpcyBhc3N1bWVkIHRoZXJlIGlzIGEgY29uZi9iYmxheWVycy5jb25mIGF2YWlsYWJsZSBpbiBjd2Qgb3IgaW4gQkJQQVRIIHdoaWNoCisgICAgICAgICB3aWxsIHByb3ZpZGUgdGhlIGxheWVyLCBCQkZJTEVTIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorCisgICAgIE9wdGlvbnM6CisgICAgICAgLS12ZXJzaW9uICAgICAgICAgICAgIHNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0CisgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAtYiBCVUlMREZJTEUsIC0tYnVpbGRmaWxlPUJVSUxERklMRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGVjdXRlIHRhc2tzIGZyb20gYSBzcGVjaWZpYyAuYmIgcmVjaXBlIGRpcmVjdGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQVJOSU5HOiBEb2VzIG5vdCBoYW5kbGUgYW55IGRlcGVuZGVuY2llcyBmcm9tIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMuCisgICAgICAgLWssIC0tY29udGludWUgICAgICAgIENvbnRpbnVlIGFzIG11Y2ggYXMgcG9zc2libGUgYWZ0ZXIgYW4gZXJyb3IuIFdoaWxlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgdGhhdCBmYWlsZWQgYW5kIGFueXRoaW5nIGRlcGVuZGluZyBvbiBpdCBjYW5ub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgYnVpbHQsIGFzIG11Y2ggYXMgcG9zc2libGUgd2lsbCBiZSBidWlsdCBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHBpbmcuCisgICAgICAgLWEsIC0tdHJ5YWx0Y29uZmlncyAgIENvbnRpbnVlIHdpdGggYnVpbGRzIGJ5IHRyeWluZyB0byB1c2UgYWx0ZXJuYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJzIHdoZXJlIHBvc3NpYmxlLgorICAgICAgIC1mLCAtLWZvcmNlICAgICAgICAgICBGb3JjZSB0aGUgc3BlY2lmaWVkIHRhcmdldHMvdGFzayB0byBydW4gKGludmFsaWRhdGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnkgZXhpc3Rpbmcgc3RhbXAgZmlsZSkuCisgICAgICAgLWMgQ01ELCAtLWNtZD1DTUQgICAgIFNwZWNpZnkgdGhlIHRhc2sgdG8gZXhlY3V0ZS4gVGhlIGV4YWN0IG9wdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIGRlcGVuZCBvbiB0aGUgbWV0YWRhdGEuIFNvbWUgZXhhbXBsZXMgbWlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgJ2NvbXBpbGUnIG9yICdwb3B1bGF0ZV9zeXNyb290JyBvciAnbGlzdHRhc2tzJyBtYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZSBhIGxpc3Qgb2YgdGhlIHRhc2tzIGF2YWlsYWJsZS4KKyAgICAgICAtQyBJTlZBTElEQVRFX1NUQU1QLCAtLWNsZWFyLXN0YW1wPUlOVkFMSURBVEVfU1RBTVAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52YWxpZGF0ZSB0aGUgc3RhbXAgZm9yIHRoZSBzcGVjaWZpZWQgdGFzayBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21waWxlJyBhbmQgdGhlbiBydW4gdGhlIGRlZmF1bHQgdGFzayBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCB0YXJnZXQocykuCisgICAgICAgLXIgUFJFRklMRSwgLS1yZWFkPVBSRUZJTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZCB0aGUgc3BlY2lmaWVkIGZpbGUgYmVmb3JlIGJpdGJha2UuY29uZi4KKyAgICAgICAtUiBQT1NURklMRSwgLS1wb3N0cmVhZD1QT1NURklMRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBhZnRlciBiaXRiYWtlLmNvbmYuCisgICAgICAgLXYsIC0tdmVyYm9zZSAgICAgICAgIE91dHB1dCBtb3JlIGxvZyBtZXNzYWdlIGRhdGEgdG8gdGhlIHRlcm1pbmFsLgorICAgICAgIC1ELCAtLWRlYnVnICAgICAgICAgICBJbmNyZWFzZSB0aGUgZGVidWcgbGV2ZWwuIFlvdSBjYW4gc3BlY2lmeSB0aGlzIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhbiBvbmNlLgorICAgICAgIC1uLCAtLWRyeS1ydW4gICAgICAgICBEb24ndCBleGVjdXRlLCBqdXN0IGdvIHRocm91Z2ggdGhlIG1vdGlvbnMuCisgICAgICAgLVMgU0lHTkFUVVJFX0hBTkRMRVIsIC0tZHVtcC1zaWduYXR1cmVzPVNJR05BVFVSRV9IQU5ETEVSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1bXAgb3V0IHRoZSBzaWduYXR1cmUgY29uc3RydWN0aW9uIGluZm9ybWF0aW9uLCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vIHRhc2sgZXhlY3V0aW9uLiBUaGUgU0lHTkFUVVJFX0hBTkRMRVIgcGFyYW1ldGVyIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgaGFuZGxlci4gVHdvIGNvbW1vbiB2YWx1ZXMgYXJlIG5vbmUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZGlmZiBidXQgdGhlIGhhbmRsZXIgbWF5IGRlZmluZSBtb3JlL2xlc3MuIG5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbnMgb25seSBkdW1wIHRoZSBzaWduYXR1cmUsIHByaW50ZGlmZiBtZWFucyBjb21wYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkdW1wZWQgc2lnbmF0dXJlIHdpdGggdGhlIGNhY2hlZCBvbmUuCisgICAgICAgLXAsIC0tcGFyc2Utb25seSAgICAgIFF1aXQgYWZ0ZXIgcGFyc2luZyB0aGUgQkIgcmVjaXBlcy4KKyAgICAgICAtcywgLS1zaG93LXZlcnNpb25zICAgU2hvdyBjdXJyZW50IGFuZCBwcmVmZXJyZWQgdmVyc2lvbnMgb2YgYWxsIHJlY2lwZXMuCisgICAgICAgLWUsIC0tZW52aXJvbm1lbnQgICAgIFNob3cgdGhlIGdsb2JhbCBvciBwZXItcmVjaXBlIGVudmlyb25tZW50IGNvbXBsZXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdmFyaWFibGVzIHdlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0L2NoYW5nZWQuCisgICAgICAgLWcsIC0tZ3JhcGh2aXogICAgICAgIFNhdmUgZGVwZW5kZW5jeSB0cmVlIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHMgaW4gdGhlIGRvdCBzeW50YXguCisgICAgICAgLUkgRVhUUkFfQVNTVU1FX1BST1ZJREVELCAtLWlnbm9yZS1kZXBzPUVYVFJBX0FTU1VNRV9QUk9WSURFRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3N1bWUgdGhlc2UgZGVwZW5kZW5jaWVzIGRvbid0IGV4aXN0IGFuZCBhcmUgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCAoZXF1aXZhbGVudCB0byBBU1NVTUVfUFJPVklERUQpLiBVc2VmdWwgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZSBkZXBlbmRlbmN5IGdyYXBocyBtb3JlIGFwcGVhbGluZworICAgICAgIC1sIERFQlVHX0RPTUFJTlMsIC0tbG9nLWRvbWFpbnM9REVCVUdfRE9NQUlOUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93IGRlYnVnIGxvZ2dpbmcgZm9yIHRoZSBzcGVjaWZpZWQgbG9nZ2luZyBkb21haW5zCisgICAgICAgLVAsIC0tcHJvZmlsZSAgICAgICAgIFByb2ZpbGUgdGhlIGNvbW1hbmQgYW5kIHNhdmUgcmVwb3J0cy4KKyAgICAgICAtdSBVSSwgLS11aT1VSSAgICAgICAgVGhlIHVzZXIgaW50ZXJmYWNlIHRvIHVzZSAoZS5nLiBrbm90dHksIGhvYiwgZGVwZXhwKS4KKyAgICAgICAtdCBTRVJWRVJUWVBFLCAtLXNlcnZlcnR5cGU9U0VSVkVSVFlQRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2Ugd2hpY2ggc2VydmVyIHRvIHVzZSwgcHJvY2VzcyBvciB4bWxycGMuCisgICAgICAgLS10b2tlbj1YTUxSUENUT0tFTiAgIFNwZWNpZnkgdGhlIGNvbm5lY3Rpb24gdG9rZW4gdG8gYmUgdXNlZCB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RpbmcgdG8gYSByZW1vdGUgc2VydmVyLgorICAgICAgIC0tcmV2aXNpb25zLWNoYW5nZWQgICBTZXQgdGhlIGV4aXQgY29kZSBkZXBlbmRpbmcgb24gd2hldGhlciB1cHN0cmVhbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdGluZyByZXZpc2lvbnMgaGF2ZSBjaGFuZ2VkIG9yIG5vdC4KKyAgICAgICAtLXNlcnZlci1vbmx5ICAgICAgICAgUnVuIGJpdGJha2Ugd2l0aG91dCBhIFVJLCBvbmx5IHN0YXJ0aW5nIGEgc2VydmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb29rZXIpIHByb2Nlc3MuCisgICAgICAgLUIgQklORCwgLS1iaW5kPUJJTkQgIFRoZSBuYW1lL2FkZHJlc3MgZm9yIHRoZSBiaXRiYWtlIHNlcnZlciB0byBiaW5kIHRvLgorICAgICAgIC0tbm8tc2V0c2NlbmUgICAgICAgICBEbyBub3QgcnVuIGFueSBzZXRzY2VuZSB0YXNrcy4gc3N0YXRlIHdpbGwgYmUgaWdub3JlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZXZlcnl0aGluZyBuZWVkZWQsIGJ1aWx0LgorICAgICAgIC0tcmVtb3RlLXNlcnZlcj1SRU1PVEVfU0VSVkVSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3QgdG8gdGhlIHNwZWNpZmllZCBzZXJ2ZXIuCisgICAgICAgLW0sIC0ta2lsbC1zZXJ2ZXIgICAgIFRlcm1pbmF0ZSB0aGUgcmVtb3RlIHNlcnZlci4KKyAgICAgICAtLW9ic2VydmUtb25seSAgICAgICAgQ29ubmVjdCB0byBhIHNlcnZlciBhcyBhbiBvYnNlcnZpbmctb25seSBjbGllbnQuCisgICAgICAgLS1zdGF0dXMtb25seSAgICAgICAgIENoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIHJlbW90ZSBiaXRiYWtlIHNlcnZlci4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYml0YmFrZS1leGFtcGxlcyc+CisgICAgICAgICAgICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJlc2VudHMgc29tZSBleGFtcGxlcyBzaG93aW5nIGhvdyB0byB1c2UgQml0QmFrZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2V4YW1wbGUtZXhlY3V0aW5nLWEtdGFzay1hZ2FpbnN0LWEtc2luZ2xlLXJlY2lwZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkV4ZWN1dGluZyBhIFRhc2sgQWdhaW5zdCBhIFNpbmdsZSBSZWNpcGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGluZyB0YXNrcyBmb3IgYSBzaW5nbGUgcmVjaXBlIGZpbGUgaXMgcmVsYXRpdmVseSBzaW1wbGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBzcGVjaWZ5IHRoZSBmaWxlIGluIHF1ZXN0aW9uLCBhbmQgQml0QmFrZSBwYXJzZXMKKyAgICAgICAgICAgICAgICAgICAgaXQgYW5kIGV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgdGFzaywgQml0QmFrZSBleGVjdXRlcyB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICB0YXNrLCB3aGljaCBpcyAiYnVpbGTigJ0uCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugb2JleXMgaW50ZXItdGFzayBkZXBlbmRlbmNpZXMgd2hlbiBkb2luZworICAgICAgICAgICAgICAgICAgICBzby4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIHJ1bnMgdGhlIGJ1aWxkIHRhc2ssIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IHRhc2ssIG9uIHRoZSA8ZmlsZW5hbWU+Zm9vXzEuMC5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYiBmb29fMS4wLmJiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIHJ1bnMgdGhlIGNsZWFuIHRhc2sgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb28uYmI8L2ZpbGVuYW1lPiByZWNpcGUgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWIgZm9vLmJiIC1jIGNsZWFuCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgIi1iIiBvcHRpb24gZXhwbGljaXRseSBkb2VzIG5vdCBoYW5kbGUgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBPdGhlciB0aGFuIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIGl0IGlzIGluc3RlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSB0aGUgc3ludGF4IHByZXNlbnRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2V4ZWN1dGluZy10YXNrcy1hZ2FpbnN0LWEtc2V0LW9mLXJlY2lwZS1maWxlcyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkV4ZWN1dGluZyBUYXNrcyBBZ2FpbnN0IGEgU2V0IG9mIFJlY2lwZSBGaWxlczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGFkZGl0aW9uYWwgY29tcGxleGl0aWVzIGludHJvZHVjZWQKKyAgICAgICAgICAgICAgICAgICAgd2hlbiBvbmUgd2FudHMgdG8gbWFuYWdlIG11bHRpcGxlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgQ2xlYXJseSB0aGVyZSBuZWVkcyB0byBiZSBhIHdheSB0byB0ZWxsIEJpdEJha2Ugd2hhdAorICAgICAgICAgICAgICAgICAgICBmaWxlcyBhcmUgYXZhaWxhYmxlIGFuZCwgb2YgdGhvc2UsIHdoaWNoIHlvdQorICAgICAgICAgICAgICAgICAgICB3YW50IHRvIGV4ZWN1dGUuCisgICAgICAgICAgICAgICAgICAgIFRoZXJlIGFsc28gbmVlZHMgdG8gYmUgYSB3YXkgZm9yIGVhY2ggcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIHRvIGV4cHJlc3MgaXRzIGRlcGVuZGVuY2llcywgYm90aCBmb3IgYnVpbGQtdGltZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgcnVudGltZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlcmUgbXVzdCBiZSBhIHdheSBmb3IgeW91IHRvIGV4cHJlc3MgcmVjaXBlIHByZWZlcmVuY2VzCisgICAgICAgICAgICAgICAgICAgIHdoZW4gbXVsdGlwbGUgcmVjaXBlcyBwcm92aWRlIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHksIG9yIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgdGhlcmUgYXJlIG11bHRpcGxlIHZlcnNpb25zIG9mIGEgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kLCB3aGVuIG5vdCB1c2luZworICAgICAgICAgICAgICAgICAgICAiLS1idWlsZGZpbGUiIG9yICItYiIgb25seSBhY2NlcHRzIGEgIlBST1ZJREVTIi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbm5vdCBwcm92aWRlIGFueXRoaW5nIGVsc2UuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGEgcmVjaXBlIGZpbGUgZ2VuZXJhbGx5ICJQUk9WSURFUyIgaXRzCisgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlbmFtZSIgYXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBmb28KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGlzIG5leHQgZXhhbXBsZSAiUFJPVklERVMiIHRoZSBwYWNrYWdlIG5hbWUgYW5kIGFsc28gdXNlcworICAgICAgICAgICAgICAgICAgICB0aGUgIi1jIiBvcHRpb24gdG8gdGVsbCBCaXRCYWtlIHRvIGp1c3QgZXhlY3V0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NsZWFuPC9maWxlbmFtZT4gdGFzazoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWMgY2xlYW4gZm9vCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdnZW5lcmF0aW5nLWRlcGVuZGVuY3ktZ3JhcGhzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+R2VuZXJhdGluZyBEZXBlbmRlbmN5IEdyYXBoczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBpcyBhYmxlIHRvIGdlbmVyYXRlIGRlcGVuZGVuY3kgZ3JhcGhzIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZG90PC9maWxlbmFtZT4gc3ludGF4LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNvbnZlcnQgdGhlc2UgZ3JhcGhzIGludG8gaW1hZ2VzIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG90PC9maWxlbmFtZT4gdG9vbCBmcm9tCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuZ3JhcGh2aXoub3JnJz5HcmFwaHZpejwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBnZW5lcmF0ZSBhIGRlcGVuZGVuY3kgZ3JhcGgsIEJpdEJha2Ugd3JpdGVzIGZvdXIgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wYWNrYWdlLWRlcGVuZHMuZG90PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93cyBCaXRCYWtlJ3Mga25vd2xlZGdlIG9mIGRlcGVuZGVuY2llcyBiZXR3ZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZSB0YXJnZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cG4tZGVwZW5kcy5kb3Q8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3dzIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGJ1aWxkLXRpbWUgdGFyZ2V0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpLmUuIHJlY2lwZXMpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dGFzay1kZXBlbmRzLmRvdDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvd3MgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGFza3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wbi1idWlsZGxpc3Q8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3dzIGEgc2ltcGxlIGxpc3Qgb2YgdGFyZ2V0cyB0aGF0IGFyZSB0byBiZSBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHN0b3AgZGVwZW5kaW5nIG9uIGNvbW1vbiBkZXBlbmRzLCB1c2UgdGhlICItSSIgZGVwZW5kCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbiBhbmQgQml0QmFrZSBvbWl0cyB0aGVtIGZyb20gdGhlIGdyYXBoLgorICAgICAgICAgICAgICAgICAgICBMZWF2aW5nIHRoaXMgaW5mb3JtYXRpb24gb3V0IGNhbiBwcm9kdWNlIG1vcmUgcmVhZGFibGUgZ3JhcGhzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHdheSwgeW91IGNhbiByZW1vdmUgZnJvbSB0aGUgZ3JhcGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPiBmcm9tIGluaGVyaXRlZCBjbGFzc2VzCisgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0d28gZXhhbXBsZXMgdGhhdCBjcmVhdGUgZGVwZW5kZW5jeSBncmFwaHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWNvbmQgZXhhbXBsZSBvbWl0cyBkZXBlbmRzIGNvbW1vbiBpbiBPcGVuRW1iZWRkZWQgZnJvbQorICAgICAgICAgICAgICAgICAgICB0aGUgZ3JhcGg6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1nIGZvbworCisgICAgICQgYml0YmFrZSAtZyAtSSB2aXJ0dWFsL2tlcm5lbCAtSSBlZ2xpYmMgZm9vCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YS54bWwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5ZDgwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhLnhtbApAQCAtMCwwICsxLDE4MzAgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiPgorCis8Y2hhcHRlciBpZD0iYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YSI+CisgICAgPHRpdGxlPlN5bnRheCBhbmQgT3BlcmF0b3JzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBCaXRiYWtlIGZpbGVzIGhhdmUgdGhlaXIgb3duIHN5bnRheC4KKyAgICAgICAgVGhlIHN5bnRheCBoYXMgc2ltaWxhcml0aWVzIHRvIHNldmVyYWwKKyAgICAgICAgb3RoZXIgbGFuZ3VhZ2VzIGJ1dCBhbHNvIGhhcyBzb21lIHVuaXF1ZSBmZWF0dXJlcy4KKyAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgYXZhaWxhYmxlIHN5bnRheCBhbmQgb3BlcmF0b3JzCisgICAgICAgIGFzIHdlbGwgYXMgcHJvdmlkZXMgZXhhbXBsZXMuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J2Jhc2ljLXN5bnRheCc+CisgICAgICAgIDx0aXRsZT5CYXNpYyBTeW50YXg8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIHNvbWUgYmFzaWMgc3ludGF4IGV4YW1wbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Jhc2ljLXZhcmlhYmxlLXNldHRpbmcnPgorICAgICAgICAgICAgPHRpdGxlPkJhc2ljIFZhcmlhYmxlIFNldHRpbmc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2V0cyA8ZmlsZW5hbWU+VkFSSUFCTEU8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgICAgICJ2YWx1ZSIuCisgICAgICAgICAgICAgICAgVGhpcyBhc3NpZ25tZW50IG9jY3VycyBpbW1lZGlhdGVseSBhcyB0aGUgc3RhdGVtZW50IGlzIHBhcnNlZC4KKyAgICAgICAgICAgICAgICBJdCBpcyBhICJoYXJkIiBhc3NpZ25tZW50LgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVkFSSUFCTEUgPSAidmFsdWUiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFzIGV4cGVjdGVkLCBpZiB5b3UgaW5jbHVkZSBsZWFkaW5nIG9yIHRyYWlsaW5nIHNwYWNlcyBhcyBwYXJ0IG9mCisgICAgICAgICAgICAgICAgYW4gYXNzaWdubWVudCwgdGhlIHNwYWNlcyBhcmUgcmV0YWluZWQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWQVJJQUJMRSA9ICIgdmFsdWUiCisgICAgIFZBUklBQkxFID0gInZhbHVlICIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgU2V0dGluZyA8ZmlsZW5hbWU+VkFSSUFCTEU8L2ZpbGVuYW1lPiB0byAiIiBzZXRzIGl0IHRvIGFuIGVtcHR5IHN0cmluZywKKyAgICAgICAgICAgICAgICB3aGlsZSBzZXR0aW5nIHRoZSB2YXJpYWJsZSB0byAiICIgc2V0cyBpdCB0byBhIGJsYW5rIHNwYWNlCisgICAgICAgICAgICAgICAgKGkuZS4gdGhlc2UgYXJlIG5vdCB0aGUgc2FtZSB2YWx1ZXMpLgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVkFSSUFCTEUgPSAiIgorICAgICBWQVJJQUJMRSA9ICIgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd2YXJpYWJsZS1leHBhbnNpb24nPgorICAgICAgICAgICAgPHRpdGxlPlZhcmlhYmxlIEV4cGFuc2lvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2Ugc3VwcG9ydHMgdmFyaWFibGVzIHJlZmVyZW5jaW5nIG9uZSBhbm90aGVyJ3MKKyAgICAgICAgICAgICAgICBjb250ZW50cyB1c2luZyBhIHN5bnRheCB0aGF0IGlzIHNpbWlsYXIgdG8gc2hlbGwgc2NyaXB0aW5nLgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHRoYXQgcmVzdWx0cyBpbiA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29udGFpbmluZyAiYXZhbCIgYW5kIDxmaWxlbmFtZT5CPC9maWxlbmFtZT4gZXZhbHVhdGluZyB0bworICAgICAgICAgICAgICAgICJwcmVhdmFscG9zdCIgYmFzZWQgb24gdGhhdCBjdXJyZW50IHZhbHVlIG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEEgPSAiYXZhbCIKKyAgICAgQiA9ICJwcmUke0F9cG9zdCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IHNob3VsZCByZWFsaXplIHRoYXQgd2hlbmV2ZXIgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBpcworICAgICAgICAgICAgICAgIHJlZmVyZW5jZWQsIGl0cyBldmFsdWF0aW9uIHdpbGwgZGVwZW5kIG9uIHRoZSBzdGF0ZSBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gYXQgdGhhdCB0aW1lLgorICAgICAgICAgICAgICAgIFRodXMsIGxhdGVyIGV2YWx1YXRpb25zIG9mIDxmaWxlbmFtZT5CPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgcHJldmlvdXMgZXhhbXBsZSBjb3VsZCByZXN1bHQgaW4gZGlmZmVyZW50IHZhbHVlcworICAgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZXR0aW5nLWEtZGVmYXVsdC12YWx1ZSc+CisgICAgICAgICAgICA8dGl0bGU+U2V0dGluZyBhIGRlZmF1bHQgdmFsdWUgKD89KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSAiPz0iIG9wZXJhdG9yIHRvIGFjaGlldmUgYSAic29mdGVyIiBhc3NpZ25tZW50CisgICAgICAgICAgICAgICAgZm9yIGEgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgVGhpcyB0eXBlIG9mIGFzc2lnbm1lbnQgYWxsb3dzIHlvdSB0byBkZWZpbmUgYSB2YXJpYWJsZSBpZiBpdAorICAgICAgICAgICAgICAgIGlzIHVuZGVmaW5lZCB3aGVuIHRoZSBzdGF0ZW1lbnQgaXMgcGFyc2VkLCBidXQgdG8gbGVhdmUgdGhlCisgICAgICAgICAgICAgICAgdmFsdWUgYWxvbmUgaWYgdGhlIHZhcmlhYmxlIGhhcyBhIHZhbHVlLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEEgPz0gImF2YWwiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMgc2V0IGF0IHRoZSB0aW1lIHRoaXMgc3RhdGVtZW50IGlzIHBhcnNlZCwKKyAgICAgICAgICAgICAgICB0aGUgdmFyaWFibGUgcmV0YWlucyBpdHMgdmFsdWUuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyBub3Qgc2V0LAorICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZSBpcyBzZXQgdG8gImF2YWwiLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGFzc2lnbm1lbnQgaXMgaW1tZWRpYXRlLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIGlmIG11bHRpcGxlICI/PSIgYXNzaWdubWVudHMKKyAgICAgICAgICAgICAgICAgICAgdG8gYSBzaW5nbGUgdmFyaWFibGUgZXhpc3QsIHRoZSBmaXJzdCBvZiB0aG9zZSBlbmRzIHVwIGdldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgdXNlZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy1hLXdlYWstZGVmYXVsdC12YWx1ZSc+CisgICAgICAgICAgICA8dGl0bGU+U2V0dGluZyBhIHdlYWsgZGVmYXVsdCB2YWx1ZSAoPz89KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIHVzZSBhICJ3ZWFrZXIiIGFzc2lnbm1lbnQgdGhhbiBpbiB0aGUKKyAgICAgICAgICAgICAgICBwcmV2aW91cyBzZWN0aW9uIGJ5IHVzaW5nIHRoZSAiPz89IiBvcGVyYXRvci4KKyAgICAgICAgICAgICAgICBUaGlzIGFzc2lnbm1lbnQgYmVoYXZlcyBpZGVudGljYWwgdG8gIj89IiBleGNlcHQgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICBhc3NpZ25tZW50IGlzIG1hZGUgYXQgdGhlIGVuZCBvZiB0aGUgcGFyc2luZyBwcm9jZXNzIHJhdGhlcgorICAgICAgICAgICAgICAgIHRoYW4gaW1tZWRpYXRlbHkuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB3aGVuIG11bHRpcGxlICI/Pz0iIGFzc2lnbm1lbnRzIGV4aXN0LCB0aGUgbGFzdAorICAgICAgICAgICAgICAgIG9uZSBpcyB1c2VkLgorICAgICAgICAgICAgICAgIEFsc28sIGFueSAiPSIgb3IgIj89IiBhc3NpZ25tZW50IHdpbGwgb3ZlcnJpZGUgdGhlIHZhbHVlIHNldCB3aXRoCisgICAgICAgICAgICAgICAgIj8/PSIuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQSA/Pz0gInNvbWV2YWx1ZSIKKyAgICAgQSA/Pz0gInNvbWVvdGhlcnZhbHVlIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzIHNldCBiZWZvcmUgdGhlIGFib3ZlIHN0YXRlbWVudHMgYXJlIHBhcnNlZCwKKyAgICAgICAgICAgICAgICB0aGUgdmFyaWFibGUgcmV0YWlucyBpdHMgdmFsdWUuCisgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyBub3Qgc2V0LAorICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZSBpcyBzZXQgdG8gInNvbWVvdGhlcnZhbHVlIi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWdhaW4sIHRoaXMgYXNzaWdubWVudCBpcyBhICJsYXp5IiBvciAid2VhayIgYXNzaWdubWVudAorICAgICAgICAgICAgICAgIGJlY2F1c2UgaXQgZG9lcyBub3Qgb2NjdXIgdW50aWwgdGhlIGVuZAorICAgICAgICAgICAgICAgIG9mIHRoZSBwYXJzaW5nIHByb2Nlc3MuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW1tZWRpYXRlLXZhcmlhYmxlLWV4cGFuc2lvbic+CisgICAgICAgICAgICA8dGl0bGU+SW1tZWRpYXRlIHZhcmlhYmxlIGV4cGFuc2lvbiAoOj0pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlICI6PSIgb3BlcmF0b3IgcmVzdWx0cyBpbiBhIHZhcmlhYmxlJ3MKKyAgICAgICAgICAgICAgICBjb250ZW50cyBiZWluZyBleHBhbmRlZCBpbW1lZGlhdGVseSwKKyAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiB3aGVuIHRoZSB2YXJpYWJsZSBpcyBhY3R1YWxseSB1c2VkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVCA9ICIxMjMiCisgICAgIEEgOj0gIiR7Qn0gJHtBfSB0ZXN0ICR7VH0iCisgICAgIFQgPSAiNDU2IgorICAgICBCID0gIiR7VH0gYnZhbCIKKyAgICAgQyA9ICJjdmFsIgorICAgICBDIDo9ICIke0N9YXBwZW5kIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gY29udGFpbnMKKyAgICAgICAgICAgICAgICAidGVzdCAxMjMiIGJlY2F1c2UgPGZpbGVuYW1lPiR7Qn08L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtBfTwvZmlsZW5hbWU+IGF0IHRoZSB0aW1lIG9mIHBhcnNpbmcgYXJlIHVuZGVmaW5lZCwKKyAgICAgICAgICAgICAgICB3aGljaCBsZWF2ZXMgInRlc3QgMTIzIi4KKyAgICAgICAgICAgICAgICBBbmQsIHRoZSB2YXJpYWJsZSA8ZmlsZW5hbWU+QzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29udGFpbnMgImN2YWxhcHBlbmQiIHNpbmNlIDxmaWxlbmFtZT4ke0N9PC9maWxlbmFtZT4gaW1tZWRpYXRlbHkKKyAgICAgICAgICAgICAgICBleHBhbmRzIHRvICJjdmFsIi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdhcHBlbmRpbmctYW5kLXByZXBlbmRpbmcnPgorICAgICAgICAgICAgPHRpdGxlPkFwcGVuZGluZyAoKz0pIGFuZCBwcmVwZW5kaW5nICg9KykgV2l0aCBTcGFjZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcHBlbmRpbmcgYW5kIHByZXBlbmRpbmcgdmFsdWVzIGlzIGNvbW1vbiBhbmQgY2FuIGJlIGFjY29tcGxpc2hlZAorICAgICAgICAgICAgICAgIHVzaW5nIHRoZSAiKz0iIGFuZCAiPSsiIG9wZXJhdG9ycy4KKyAgICAgICAgICAgICAgICBUaGVzZSBvcGVyYXRvcnMgaW5zZXJ0IGEgc3BhY2UgYmV0d2VlbiB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgIHZhbHVlIGFuZCBwcmVwZW5kZWQgb3IgYXBwZW5kZWQgdmFsdWUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXNlIG9wZXJhdG9ycyB0YWtlIGltbWVkaWF0ZSBlZmZlY3QgZHVyaW5nIHBhcnNpbmcuCisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEIgPSAiYnZhbCIKKyAgICAgQiArPSAiYWRkaXRpb25hbGRhdGEiCisgICAgIEMgPSAiY3ZhbCIKKyAgICAgQyA9KyAidGVzdCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5CPC9maWxlbmFtZT4gY29udGFpbnMKKyAgICAgICAgICAgICAgICAiYnZhbCBhZGRpdGlvbmFsZGF0YSIgYW5kIDxmaWxlbmFtZT5DPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb250YWlucyAidGVzdCBjdmFsIi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdhcHBlbmRpbmctYW5kLXByZXBlbmRpbmctd2l0aG91dC1zcGFjZXMnPgorICAgICAgICAgICAgPHRpdGxlPkFwcGVuZGluZyAoLj0pIGFuZCBQcmVwZW5kaW5nICg9LikgV2l0aG91dCBTcGFjZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBhcHBlbmQgb3IgcHJlcGVuZCB2YWx1ZXMgd2l0aG91dCBhbgorICAgICAgICAgICAgICAgIGluc2VydGVkIHNwYWNlLCB1c2UgdGhlICIuPSIgYW5kICI9LiIgb3BlcmF0b3JzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVzZSBvcGVyYXRvcnMgdGFrZSBpbW1lZGlhdGUgZWZmZWN0IGR1cmluZyBwYXJzaW5nLgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCID0gImJ2YWwiCisgICAgIEIgLj0gImFkZGl0aW9uYWxkYXRhIgorICAgICBDID0gImN2YWwiCisgICAgIEMgPS4gInRlc3QiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+IGNvbnRhaW5zCisgICAgICAgICAgICAgICAgImJ2YWxhZGRpdGlvbmFsZGF0YSIgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkM8L2ZpbGVuYW1lPiBjb250YWlucyAidGVzdGN2YWwiLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2FwcGVuZGluZy1hbmQtcHJlcGVuZGluZy1vdmVycmlkZS1zdHlsZS1zeW50YXgnPgorICAgICAgICAgICAgPHRpdGxlPkFwcGVuZGluZyBhbmQgUHJlcGVuZGluZyAoT3ZlcnJpZGUgU3R5bGUgU3ludGF4KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBhcHBlbmQgYW5kIHByZXBlbmQgYSB2YXJpYWJsZSdzIHZhbHVlCisgICAgICAgICAgICAgICAgdXNpbmcgYW4gb3ZlcnJpZGUgc3R5bGUgc3ludGF4LgorICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGlzIHN5bnRheCwgbm8gc3BhY2VzIGFyZSBpbnNlcnRlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlc2Ugb3BlcmF0b3JzIGRpZmZlciBmcm9tIHRoZSAiOj0iLCAiLj0iLCAiPS4iLCAiKz0iLCBhbmQgIj0rIgorICAgICAgICAgICAgICAgIG9wZXJhdG9ycyBpbiB0aGF0IHRoZWlyIGVmZmVjdHMgYXJlIGRlZmVycmVkCisgICAgICAgICAgICAgICAgdW50aWwgYWZ0ZXIgcGFyc2luZyBjb21wbGV0ZXMgcmF0aGVyIHRoYW4gYmVpbmcgaW1tZWRpYXRlbHkKKyAgICAgICAgICAgICAgICBhcHBsaWVkLgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCID0gImJ2YWwiCisgICAgIEJfYXBwZW5kID0gIiBhZGRpdGlvbmFsIGRhdGEiCisgICAgIEMgPSAiY3ZhbCIKKyAgICAgQ19wcmVwZW5kID0gImFkZGl0aW9uYWwgZGF0YSAiCisgICAgIEQgPSAiZHZhbCIKKyAgICAgRF9hcHBlbmQgPSAiYWRkaXRpb25hbCBkYXRhIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBiZWNvbWVzCisgICAgICAgICAgICAgICAgImJ2YWwgYWRkaXRpb25hbCBkYXRhIiBhbmQgPGZpbGVuYW1lPkM8L2ZpbGVuYW1lPiBiZWNvbWVzCisgICAgICAgICAgICAgICAgImFkZGl0aW9uYWwgZGF0YSBjdmFsIi4KKyAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgPGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPiBiZWNvbWVzCisgICAgICAgICAgICAgICAgImR2YWxhZGRpdGlvbmFsIGRhdGEiLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBjb250cm9sIGFsbCBzcGFjaW5nIHdoZW4geW91IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUgc3ludGF4LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZW1vdmluZy1vdmVycmlkZS1zdHlsZS1zeW50YXgnPgorICAgICAgICAgICAgPHRpdGxlPlJlbW92YWwgKE92ZXJyaWRlIFN0eWxlIFN5bnRheCk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHJlbW92ZSB2YWx1ZXMgZnJvbSBsaXN0cyB1c2luZyB0aGUgcmVtb3ZhbAorICAgICAgICAgICAgICAgIG92ZXJyaWRlIHN0eWxlIHN5bnRheC4KKyAgICAgICAgICAgICAgICBTcGVjaWZ5aW5nIGEgdmFsdWUgZm9yIHJlbW92YWwgY2F1c2VzIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGF0CisgICAgICAgICAgICAgICAgdmFsdWUgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSB2YXJpYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoaXMgc3ludGF4LCBCaXRCYWtlIGV4cGVjdHMgb25lIG9yIG1vcmUgc3RyaW5ncy4KKyAgICAgICAgICAgICAgICBTdXJyb3VuZGluZyBzcGFjZXMgYXJlIHJlbW92ZWQgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGT08gPSAiMTIzIDQ1NiA3ODkgMTIzNDU2IDEyMyA0NTYgMTIzIDQ1NiIKKyAgICAgRk9PX3JlbW92ZSA9ICIxMjMiCisgICAgIEZPT19yZW1vdmUgPSAiNDU2IgorICAgICBGT08yID0gImFiYyBkZWYgZ2hpIGFiY2RlZiBhYmMgZGVmIGFiYyBkZWYiCisgICAgIEZPTzJfcmVtb3ZlID0gImFiYyBkZWYiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSA8ZmlsZW5hbWU+Rk9PPC9maWxlbmFtZT4gYmVjb21lcworICAgICAgICAgICAgICAgICI3ODkgMTIzNDU2IiBhbmQgPGZpbGVuYW1lPkZPTzI8L2ZpbGVuYW1lPiBiZWNvbWVzCisgICAgICAgICAgICAgICAgImdoaSBhYmNkZWYiLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3ZhcmlhYmxlLWZsYWctc3ludGF4Jz4KKyAgICAgICAgICAgIDx0aXRsZT5WYXJpYWJsZSBGbGFnIFN5bnRheDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFZhcmlhYmxlIGZsYWdzIGFyZSBCaXRCYWtlJ3MgaW1wbGVtZW50YXRpb24gb2YgdmFyaWFibGUgcHJvcGVydGllcworICAgICAgICAgICAgICAgIG9yIGF0dHJpYnV0ZXMuCisgICAgICAgICAgICAgICAgSXQgaXMgYSB3YXkgb2YgdGFnZ2luZyBleHRyYSBpbmZvcm1hdGlvbiBvbnRvIGEgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgb3V0IGFib3V0IHZhcmlhYmxlIGZsYWdzIGluIGdlbmVyYWwgaW4gdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3ZhcmlhYmxlLWZsYWdzJz5WYXJpYWJsZSBGbGFnczwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBkZWZpbmUsIGFwcGVuZCwgYW5kIHByZXBlbmQgdmFsdWVzIHRvIHZhcmlhYmxlIGZsYWdzLgorICAgICAgICAgICAgICAgIEFsbCB0aGUgc3RhbmRhcmQgc3ludGF4IG9wZXJhdGlvbnMgcHJldmlvdXNseSBtZW50aW9uZWQgd29yaworICAgICAgICAgICAgICAgIGZvciB2YXJpYWJsZSBmbGFncyBleGNlcHQgZm9yIG92ZXJyaWRlIHN0eWxlIHN5bnRheAorICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+X3JlbW92ZTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlcyBzaG93aW5nIGhvdyB0byBzZXQgdmFyaWFibGUgZmxhZ3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGT09bYV0gPSAiYWJjIgorICAgICBGT09bYl0gPSAiMTIzIgorICAgICBGT09bYV0gKz0gIjQ1NiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5GT088L2ZpbGVuYW1lPiBoYXMgdHdvIGZsYWdzOgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5iPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIGZsYWdzIGFyZSBpbW1lZGlhdGVseSBzZXQgdG8gImFiYyIgYW5kICIxMjMiLCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5hPC9maWxlbmFtZT4gZmxhZyBiZWNvbWVzICJhYmMgNDU2Ii4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTm8gbmVlZCBleGlzdHMgdG8gcHJlLWRlZmluZSB2YXJpYWJsZSBmbGFncy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHNpbXBseSBzdGFydCB1c2luZyB0aGVtLgorICAgICAgICAgICAgICAgIE9uZSBleHRyZW1lbHkgY29tbW9uIGFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgaXMgdG8gYXR0YWNoIHNvbWUgYnJpZWYgZG9jdW1lbnRhdGlvbiB0byBhIEJpdEJha2UgdmFyaWFibGUgYXMKKyAgICAgICAgICAgICAgICBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ0FDSEVbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIGNhY2hlIG9mIHRoZSBtZXRhZGF0YS4iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2lubGluZS1weXRob24tdmFyaWFibGUtZXhwYW5zaW9uJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbmxpbmUgUHl0aG9uIFZhcmlhYmxlIEV4cGFuc2lvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGlubGluZSBQeXRob24gdmFyaWFibGUgZXhwYW5zaW9uIHRvCisgICAgICAgICAgICAgICAgc2V0IHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBEQVRFID0gIiR7QHRpbWUuc3RyZnRpbWUoJyVZJW0lZCcsdGltZS5nbXRpbWUoKSl9IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgcmVzdWx0cyBpbiB0aGUgPGZpbGVuYW1lPkRBVEU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGJlaW5nIHNldCB0byB0aGUgY3VycmVudCBkYXRlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQcm9iYWJseSB0aGUgbW9zdCBjb21tb24gdXNlIG9mIHRoaXMgZmVhdHVyZSBpcyB0byBleHRyYWN0CisgICAgICAgICAgICAgICAgdGhlIHZhbHVlIG9mIHZhcmlhYmxlcyBmcm9tIEJpdEJha2UncyBpbnRlcm5hbCBkYXRhIGRpY3Rpb25hcnksCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpbmVzIHNlbGVjdCB0aGUgdmFsdWVzIG9mIGEgcGFja2FnZSBuYW1lCisgICAgICAgICAgICAgICAgYW5kIGl0cyB2ZXJzaW9uIG51bWJlciwgcmVzcGVjdGl2ZWx5OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUE4gPSAiJHtAYmIucGFyc2UuQkJIYW5kbGVyLnZhcnNfZnJvbV9maWxlKGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpLGQpWzBdIG9yICdkZWZhdWx0cGtnbmFtZSd9IgorICAgICBQViA9ICIke0BiYi5wYXJzZS5CQkhhbmRsZXIudmFyc19mcm9tX2ZpbGUoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksZClbMV0gb3IgJzEuMCd9IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwcm92aWRpbmctcGF0aG5hbWVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Qcm92aWRpbmcgUGF0aG5hbWVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiBzcGVjaWZ5aW5nIHBhdGhuYW1lcyBmb3IgdXNlIHdpdGggQml0QmFrZSwKKyAgICAgICAgICAgICAgICBkbyBub3QgdXNlIHRoZSB0aWxkZSAoIn4iKSBjaGFyYWN0ZXIgYXMgYSBzaG9ydGN1dAorICAgICAgICAgICAgICAgIGZvciB5b3VyIGhvbWUgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIERvaW5nIHNvIG1pZ2h0IGNhdXNlIEJpdEJha2UgdG8gbm90IHJlY29nbml6ZSB0aGUKKyAgICAgICAgICAgICAgICBwYXRoIHNpbmNlIEJpdEJha2UgZG9lcyBub3QgZXhwYW5kIHRoaXMgY2hhcmFjdGVyIGluCisgICAgICAgICAgICAgICAgdGhlIHNhbWUgd2F5IGEgc2hlbGwgd291bGQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluc3RlYWQsIHByb3ZpZGUgYSBmdWxsZXIgcGF0aCBhcyB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgZXhhbXBsZSBpbGx1c3RyYXRlczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTEFZRVJTID89ICIgXAorICAgICAgIC9ob21lL3Njb3R0LWxlbm92by9MYXllckEgXAorICAgICAgICIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nY29uZGl0aW9uYWwtc3ludGF4LW92ZXJyaWRlcyc+CisgICAgICAgIDx0aXRsZT5Db25kaXRpb25hbCBTeW50YXggKE92ZXJyaWRlcyk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSB1c2VzCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItT1ZFUlJJREVTJz48ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0byBjb250cm9sIHdoYXQgdmFyaWFibGVzIGFyZSBvdmVycmlkZGVuIGFmdGVyIEJpdEJha2UKKyAgICAgICAgICAgIHBhcnNlcyByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgeW91IGNhbiB1c2UKKyAgICAgICAgICAgIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiBhcyBjb25kaXRpb25hbCBtZXRhZGF0YSwKKyAgICAgICAgICAgIHRhbGtzIGFib3V0IGtleSBleHBhbnNpb24gaW4gcmVsYXRpb25zaGlwIHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4sIGFuZCBwcm92aWRlcyBzb21lIGV4YW1wbGVzCisgICAgICAgICAgICB0byBoZWxwIHdpdGggdW5kZXJzdGFuZGluZy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjb25kaXRpb25hbC1tZXRhZGF0YSc+CisgICAgICAgICAgICA8dGl0bGU+Q29uZGl0aW9uYWwgTWV0YWRhdGE8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gdG8gY29uZGl0aW9uYWxseSBzZWxlY3QKKyAgICAgICAgICAgICAgICBhIHNwZWNpZmljIHZlcnNpb24gb2YgYSB2YXJpYWJsZSBhbmQgdG8gY29uZGl0aW9uYWxseQorICAgICAgICAgICAgICAgIGFwcGVuZCBvciBwcmVwZW5kIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2VsZWN0aW5nIGEgVmFyaWFibGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgY29sb24tY2hhcmFjdGVyLXNlcGFyYXRlZCBsaXN0IHRoYXQgY29udGFpbnMgaXRlbXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB3aGljaCB5b3Ugd2FudCB0byBzYXRpc2Z5IGNvbmRpdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaHVzLCBpZiB5b3UgaGF2ZSBhIHZhcmlhYmxlIHRoYXQgaXMgY29uZGl0aW9uYWwgb24g4oCcYXJt4oCdLCBhbmQg4oCcYXJt4oCdCisgICAgICAgICAgICAgICAgICAgICAgICBpcyBpbiA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4sIHRoZW4gdGhlIOKAnGFybeKAnS1zcGVjaWZpYworICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiB0aGUgdmFyaWFibGUgaXMgdXNlZCByYXRoZXIgdGhhbiB0aGUgbm9uLWNvbmRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBPVkVSUklERVMgPSAiYXJjaGl0ZWN0dXJlOm9zOm1hY2hpbmUiCisgICAgIFRFU1QgPSAiZGVmYXVsdCIKKyAgICAgVEVTVF9vcyA9ICJvc3NwZWNpZmljIgorICAgICBURVNUX25vb3ZlcnJpZGUgPSAib3RoZXJjb25kdmFsdWUiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGxpc3RzIHRocmVlIG92ZXJyaWRlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcmNoaXRlY3R1cmUiLCAib3MiLCBhbmQgIm1hY2hpbmUiLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5URVNUPC9maWxlbmFtZT4gYnkgaXRzZWxmIGhhcyBhIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mICJkZWZhdWx0Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzZWxlY3QgdGhlIG9zLXNwZWNpZmljIHZlcnNpb24gb2YgdGhlIDxmaWxlbmFtZT5URVNUPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGJ5IGFwcGVuZGluZyB0aGUgIm9zIiBvdmVycmlkZSB0byB0aGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIChpLmUuPGZpbGVuYW1lPlRFU1Rfb3M8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGJldHRlciB1bmRlcnN0YW5kIHRoaXMsIGNvbnNpZGVyIGEgcHJhY3RpY2FsIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGFzc3VtZXMgYW4gT3BlbkVtYmVkZGVkIG1ldGFkYXRhLWJhc2VkIExpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGluZXMgZnJvbSB0aGUgcmVjaXBlIGZpbGUgZmlyc3Qgc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGtlcm5lbCBicmFuY2ggdmFyaWFibGUgPGZpbGVuYW1lPktCUkFOQ0g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGEgZGVmYXVsdCB2YWx1ZSwgdGhlbiBjb25kaXRpb25hbGx5IG92ZXJyaWRlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBiYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBidWlsZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0JSQU5DSCA9ICJzdGFuZGFyZC9iYXNlIgorICAgICBLQlJBTkNIX3FlbXVhcm0gID0gInN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIgorICAgICBLQlJBTkNIX3FlbXVtaXBzID0gInN0YW5kYXJkL210aS1tYWx0YTMyIgorICAgICBLQlJBTkNIX3FlbXVwcGMgID0gInN0YW5kYXJkL3FlbXVwcGMiCisgICAgIEtCUkFOQ0hfcWVtdXg4NiAgPSAic3RhbmRhcmQvY29tbW9uLXBjL2Jhc2UiCisgICAgIEtCUkFOQ0hfcWVtdXg4Ni02NCAgPSAic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiCisgICAgIEtCUkFOQ0hfcWVtdW1pcHM2NCA9ICJzdGFuZGFyZC9tdGktbWFsdGE2NCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFwcGVuZGluZyBhbmQgUHJlcGVuZGluZzo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBhbHNvIHN1cHBvcnRzIGFwcGVuZCBhbmQgcHJlcGVuZCBvcGVyYXRpb25zIHRvCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB2YWx1ZXMgYmFzZWQgb24gd2hldGhlciBhIHNwZWNpZmljIGl0ZW0gaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlZCBpbiA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUEVORFMgPSAiZ2xpYmMgbmN1cnNlcyIKKyAgICAgT1ZFUlJJREVTID0gIm1hY2hpbmU6bG9jYWwiCisgICAgIERFUEVORFNfYXBwZW5kX21hY2hpbmUgPSAibGlibWFkIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+IGJlY29tZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICJnbGliYyBuY3Vyc2VzIGxpYm1hZCIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFnYWluLCB1c2luZyBhbiBPcGVuRW1iZWRkZWQgbWV0YWRhdGEtYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWwgcmVjaXBlIGZpbGUgYXMgYW4gZXhhbXBsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGxpbmVzIHdpbGwgY29uZGl0aW9uYWxseSBhcHBlbmQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGJhc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIGFyY2hpdGVjdHVyZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtLRVJORUxfRVhUUkFfRkVBVFVSRVN9IgorICAgICBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODY9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorICAgICBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODYtNjQ9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0na2V5LWV4cGFuc2lvbic+CisgICAgICAgICAgICA8dGl0bGU+S2V5IEV4cGFuc2lvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEtleSBleHBhbnNpb24gaGFwcGVucyB3aGVuIHRoZSBCaXRCYWtlIGRhdGFzdG9yZSBpcyBmaW5hbGl6ZWQKKyAgICAgICAgICAgICAgICBqdXN0IGJlZm9yZSBCaXRCYWtlIGV4cGFuZHMgb3ZlcnJpZGVzLgorICAgICAgICAgICAgICAgIFRvIGJldHRlciB1bmRlcnN0YW5kIHRoaXMsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEEke0J9ID0gIlgiCisgICAgIEIgPSAiMiIKKyAgICAgQTIgPSAiWSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBhZnRlciBhbGwgdGhlIHBhcnNpbmcgaXMgY29tcGxldGUsIGFuZAorICAgICAgICAgICAgICAgIGJlZm9yZSBhbnkgb3ZlcnJpZGVzIGFyZSBoYW5kbGVkLCBCaXRCYWtlIGV4cGFuZHMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtCfTwvZmlsZW5hbWU+IGludG8gIjIiLgorICAgICAgICAgICAgICAgIFRoaXMgZXhwYW5zaW9uIGNhdXNlcyA8ZmlsZW5hbWU+QTI8L2ZpbGVuYW1lPiwgd2hpY2ggd2FzCisgICAgICAgICAgICAgICAgc2V0IHRvICJZIiBiZWZvcmUgdGhlIGV4cGFuc2lvbiwgdG8gYmVjb21lICJYIi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd2YXJpYWJsZS1pbnRlcmFjdGlvbi13b3JrZWQtZXhhbXBsZXMnPgorICAgICAgICAgICAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRGVzcGl0ZSB0aGUgcHJldmlvdXMgZXhwbGFuYXRpb25zIHRoYXQgc2hvdyB0aGUgZGlmZmVyZW50IGZvcm1zIG9mCisgICAgICAgICAgICAgICAgdmFyaWFibGUgZGVmaW5pdGlvbnMsIGl0IGNhbiBiZSBoYXJkIHRvIHdvcmsKKyAgICAgICAgICAgICAgICBvdXQgZXhhY3RseSB3aGF0IGhhcHBlbnMgd2hlbiB2YXJpYWJsZSBvcGVyYXRvcnMsIGNvbmRpdGlvbmFsCisgICAgICAgICAgICAgICAgb3ZlcnJpZGVzLCBhbmQgdW5jb25kaXRpb25hbCBvdmVycmlkZXMgYXJlIGNvbWJpbmVkLgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBzb21lIGNvbW1vbiBzY2VuYXJpb3MgYWxvbmcKKyAgICAgICAgICAgICAgICB3aXRoIGV4cGxhbmF0aW9ucyBmb3IgdmFyaWFibGUgaW50ZXJhY3Rpb25zIHRoYXQKKyAgICAgICAgICAgICAgICB0eXBpY2FsbHkgY29uZnVzZSB1c2Vycy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlcmUgaXMgb2Z0ZW4gY29uZnVzaW9uIGNvbmNlcm5pbmcgdGhlIG9yZGVyIGluIHdoaWNoCisgICAgICAgICAgICAgICAgb3ZlcnJpZGVzIGFuZCB2YXJpb3VzICJhcHBlbmQiIG9wZXJhdG9ycyB0YWtlIGVmZmVjdC4KKyAgICAgICAgICAgICAgICBSZWNhbGwgdGhhdCBhbiBhcHBlbmQgb3IgcHJlcGVuZCBvcGVyYXRpb24gdXNpbmcgIl9hcHBlbmQiCisgICAgICAgICAgICAgICAgYW5kICJfcHJlcGVuZCIgZG9lcyBub3QgcmVzdWx0IGluIGFuIGltbWVkaWF0ZSBhc3NpZ25tZW50CisgICAgICAgICAgICAgICAgYXMgd291bGQgIis9IiwgIi49IiwgIj0rIiwgb3IgIj0uIi4KKyAgICAgICAgICAgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBPVkVSUklERVMgPSAiZm9vIgorICAgICBBID0gIloiCisgICAgIEFfZm9vX2FwcGVuZCA9ICJYIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgdGhpcyBjYXNlLCA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgdW5jb25kaXRpb25hbGx5IHNldCB0byAiWiIgYW5kICJYIiBpcworICAgICAgICAgICAgICAgIHVuY29uZGl0aW9uYWxseSBhbmQgaW1tZWRpYXRlbHkgYXBwZW5kZWQgdG8gdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkFfZm9vPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgQmVjYXVzZSBvdmVycmlkZXMgaGF2ZSBub3QgYmVlbiBhcHBsaWVkIHlldCwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QV9mb288L2ZpbGVuYW1lPiBpcyBzZXQgdG8gIlgiIGR1ZSB0byB0aGUgYXBwZW5kCisgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gc2ltcGx5IGVxdWFscyAiWiIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFwcGx5aW5nIG92ZXJyaWRlcywgaG93ZXZlciwgY2hhbmdlcyB0aGluZ3MuCisgICAgICAgICAgICAgICAgU2luY2UgImZvbyIgaXMgbGlzdGVkIGluIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICB0aGUgY29uZGl0aW9uYWwgdmFyaWFibGUgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyByZXBsYWNlZAorICAgICAgICAgICAgICAgIHdpdGggdGhlICJmb28iIHZlcnNpb24sIHdoaWNoIGlzIGVxdWFsIHRvICJYIi4KKyAgICAgICAgICAgICAgICBTbyBlZmZlY3RpdmVseSwgPGZpbGVuYW1lPkFfZm9vPC9maWxlbmFtZT4gcmVwbGFjZXMgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgY2hhbmdlcyB0aGUgb3JkZXIgb2YgdGhlIG92ZXJyaWRlIGFuZAorICAgICAgICAgICAgICAgIHRoZSBhcHBlbmQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBPVkVSUklERVMgPSAiZm9vIgorICAgICBBID0gIloiCisgICAgIEFfYXBwZW5kX2ZvbyA9ICJYIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgdGhpcyBjYXNlLCBiZWZvcmUgb3ZlcnJpZGVzIGFyZSBoYW5kbGVkLAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMgc2V0IHRvICJaIiBhbmQgPGZpbGVuYW1lPkFfYXBwZW5kX2ZvbzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaXMgc2V0IHRvICJYIi4KKyAgICAgICAgICAgICAgICBPbmNlIHRoZSBvdmVycmlkZSBmb3IgImZvbyIgaXMgYXBwbGllZCwgaG93ZXZlciwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGdldHMgYXBwZW5kZWQgd2l0aCAiWCIuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGJlY29tZXMgIlpYIi4KKyAgICAgICAgICAgICAgICBOb3RpY2UgdGhhdCBzcGFjZXMgYXJlIG5vdCBhcHBlbmRlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgaGFzIHRoZSBvcmRlciBvZiB0aGUgYXBwZW5kcyBhbmQgb3ZlcnJpZGVzIHJldmVyc2VkCisgICAgICAgICAgICAgICAgYmFjayBhcyBpbiB0aGUgZmlyc3QgZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE9WRVJSSURFUyA9ICJmb28iCisgICAgIEEgPSAiWSIKKyAgICAgQV9mb29fYXBwZW5kID0gIloiCisgICAgIEFfZm9vX2FwcGVuZCArPSAiWCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRm9yIHRoaXMgY2FzZSwgYmVmb3JlIGFueSBvdmVycmlkZXMgYXJlIHJlc29sdmVkLAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMgc2V0IHRvICJZIiB1c2luZyBhbiBpbW1lZGlhdGUgYXNzaWdubWVudC4KKyAgICAgICAgICAgICAgICBBZnRlciB0aGlzIGltbWVkaWF0ZSBhc3NpZ25tZW50LCA8ZmlsZW5hbWU+QV9mb288L2ZpbGVuYW1lPiBpcyBzZXQKKyAgICAgICAgICAgICAgICB0byAiWiIsIGFuZCB0aGVuIGZ1cnRoZXIgYXBwZW5kZWQgd2l0aAorICAgICAgICAgICAgICAgICJYIiBsZWF2aW5nIHRoZSB2YXJpYWJsZSBzZXQgdG8gIlogWCIuCisgICAgICAgICAgICAgICAgRmluYWxseSwgYXBwbHlpbmcgdGhlIG92ZXJyaWRlIGZvciAiZm9vIiByZXN1bHRzIGluIHRoZSBjb25kaXRpb25hbAorICAgICAgICAgICAgICAgIHZhcmlhYmxlIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gYmVjb21pbmcgIlogWCIgKGkuZS4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzIHJlcGxhY2VkIHdpdGggPGZpbGVuYW1lPkFfZm9vPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGZpbmFsIGV4YW1wbGUgbWl4ZXMgaW4gc29tZSB2YXJ5aW5nIG9wZXJhdG9yczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEEgPSAiMSIKKyAgICAgQV9hcHBlbmQgPSAiMiIKKyAgICAgQV9hcHBlbmQgPSAiMyIKKyAgICAgQSArPSAiNCIKKyAgICAgQSAuPSAiNSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRm9yIHRoaXMgY2FzZSwgdGhlIHR5cGUgb2YgYXBwZW5kIG9wZXJhdG9ycyBhcmUgYWZmZWN0aW5nIHRoZQorICAgICAgICAgICAgICAgIG9yZGVyIG9mIGFzc2lnbm1lbnRzIGFzIEJpdEJha2UgcGFzc2VzIHRocm91Z2ggdGhlIGNvZGUKKyAgICAgICAgICAgICAgICBtdWx0aXBsZSB0aW1lcy4KKyAgICAgICAgICAgICAgICBJbml0aWFsbHksIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMgc2V0IHRvICIxIDQ1IiBiZWNhdXNlCisgICAgICAgICAgICAgICAgb2YgdGhlIHRocmVlIHN0YXRlbWVudHMgdGhhdCB1c2UgaW1tZWRpYXRlIG9wZXJhdG9ycy4KKyAgICAgICAgICAgICAgICBBZnRlciB0aGVzZSBhc3NpZ25tZW50cyBhcmUgbWFkZSwgQml0QmFrZSBhcHBsaWVzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4gb3BlcmF0aW9ucy4KKyAgICAgICAgICAgICAgICBUaG9zZSBvcGVyYXRpb25zIHJlc3VsdCBpbiA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGJlY29taW5nICIxIDQ1MjMiLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3NoYXJpbmctZnVuY3Rpb25hbGl0eSc+CisgICAgICAgIDx0aXRsZT5TaGFyaW5nIEZ1bmN0aW9uYWxpdHk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBhbGxvd3MgZm9yIG1ldGFkYXRhIHNoYXJpbmcgdGhyb3VnaCBpbmNsdWRlIGZpbGVzCisgICAgICAgICAgICAoPGZpbGVuYW1lPi5pbmM8L2ZpbGVuYW1lPikgYW5kIGNsYXNzIGZpbGVzCisgICAgICAgICAgICAoPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgYSBwaWVjZSBvZiBjb21tb24gZnVuY3Rpb25hbGl0eQorICAgICAgICAgICAgc3VjaCBhcyBhIHRhc2sgZGVmaW5pdGlvbiB0aGF0IHlvdSB3YW50IHRvIHNoYXJlIGJldHdlZW4KKyAgICAgICAgICAgIG1vcmUgdGhhbiBvbmUgcmVjaXBlLgorICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBjcmVhdGluZyBhIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGFuZCB0aGVuIHVzaW5nCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiBkaXJlY3RpdmUgaW4geW91ciByZWNpcGVzIHRvCisgICAgICAgICAgICBpbmhlcml0IHRoZSBjbGFzcyB3b3VsZCBiZSBhIGNvbW1vbiB3YXkgdG8gc2hhcmUgdGhlIHRhc2suCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyB0aGUgbWVjaGFuaXNtcyBCaXRCYWtlIHByb3ZpZGVzIHRvCisgICAgICAgICAgICBhbGxvdyB5b3UgdG8gc2hhcmUgZnVuY3Rpb25hbGl0eSBiZXR3ZWVuIHJlY2lwZXMuCisgICAgICAgICAgICBTcGVjaWZpY2FsbHksIHRoZSBtZWNoYW5pc21zIGluY2x1ZGUgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5pbmhlcml0PC9maWxlbmFtZT4sIDxmaWxlbmFtZT5JTkhFUklUPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPnJlcXVpcmU8L2ZpbGVuYW1lPiBkaXJlY3RpdmVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2xvY2F0aW5nLWluY2x1ZGUtYW5kLWNsYXNzLWZpbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Mb2NhdGluZyBJbmNsdWRlIGFuZCBDbGFzcyBGaWxlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gbG9jYXRlIG5lZWRlZCBpbmNsdWRlIGFuZCBjbGFzcyBmaWxlcy4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIGFuYWxvZ291cyB0bworICAgICAgICAgICAgICAgIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiBvcmRlciBmb3IgaW5jbHVkZSBhbmQgY2xhc3MgZmlsZXMgdG8gYmUgZm91bmQgYnkgQml0QmFrZSwKKyAgICAgICAgICAgICAgICB0aGV5IG5lZWQgdG8gYmUgbG9jYXRlZCBpbiBhICJjbGFzc2VzIiBzdWJkaXJlY3RvcnkgdGhhdCBjYW4KKyAgICAgICAgICAgICAgICBiZSBmb3VuZCBpbiA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW5oZXJpdC1kaXJlY3RpdmUnPgorICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5pbmhlcml0PC9maWxlbmFtZT4gRGlyZWN0aXZlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiB3cml0aW5nIGEgcmVjaXBlIG9yIGNsYXNzIGZpbGUsIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbmhlcml0PC9maWxlbmFtZT4gZGlyZWN0aXZlIHRvIGluaGVyaXQgdGhlCisgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBvZiBhIGNsYXNzICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgQml0QmFrZSBvbmx5IHN1cHBvcnRzIHRoaXMgZGlyZWN0aXZlIHdoZW4gdXNlZCB3aXRoaW4gcmVjaXBlCisgICAgICAgICAgICAgICAgYW5kIGNsYXNzIGZpbGVzIChpLmUuIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW5oZXJpdDwvZmlsZW5hbWU+IGRpcmVjdGl2ZSBpcyBhIHJ1ZGltZW50YXJ5CisgICAgICAgICAgICAgICAgbWVhbnMgb2Ygc3BlY2lmeWluZyB3aGF0IGNsYXNzZXMgb2YgZnVuY3Rpb25hbGl0eSB5b3VyCisgICAgICAgICAgICAgICAgcmVjaXBlcyByZXF1aXJlLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY2FuIGVhc2lseSBhYnN0cmFjdCBvdXQgdGhlIHRhc2tzIGludm9sdmVkIGluCisgICAgICAgICAgICAgICAgYnVpbGRpbmcgYSBwYWNrYWdlIHRoYXQgdXNlcyBBdXRvY29uZiBhbmQgQXV0b21ha2UgYW5kIHB1dAorICAgICAgICAgICAgICAgIHRob3NlIHRhc2tzIGludG8gYSBjbGFzcyBmaWxlIHRoYXQgY2FuIGJlIHVzZWQgYnkgeW91ciByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHlvdXIgcmVjaXBlcyBjb3VsZCB1c2UgdGhlIGZvbGxvd2luZyBkaXJlY3RpdmUKKyAgICAgICAgICAgICAgICB0byBpbmhlcml0IGFuIDxmaWxlbmFtZT5hdXRvdG9vbHMuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgVGhlIGNsYXNzIGZpbGUgd291bGQgY29udGFpbiBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3IgdXNpbmcKKyAgICAgICAgICAgICAgICBBdXRvdG9vbHMgdGhhdCBjb3VsZCBiZSBzaGFyZWQgYWNyb3NzIHJlY2lwZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpbmhlcml0IGF1dG90b29scworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIEJpdEJha2Ugd291bGQgc2VhcmNoIGZvciB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNsYXNzZXMvYXV0b3Rvb2xzLmJiY2xhc3M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBvdmVycmlkZSBhbnkgdmFsdWVzIGFuZCBmdW5jdGlvbnMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGluaGVyaXRlZCBjbGFzcyB3aXRoaW4geW91ciByZWNpcGUgYnkgZG9pbmcgc28KKyAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhlICJpbmhlcml0IiBzdGF0ZW1lbnQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2luY2x1ZGUtZGlyZWN0aXZlJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IERpcmVjdGl2ZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgdW5kZXJzdGFuZHMgdGhlIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RpdmUuCisgICAgICAgICAgICAgICAgVGhpcyBkaXJlY3RpdmUgY2F1c2VzIEJpdEJha2UgdG8gcGFyc2Ugd2hhdGV2ZXIgZmlsZSB5b3Ugc3BlY2lmeSwKKyAgICAgICAgICAgICAgICBhbmQgdG8gaW5zZXJ0IHRoYXQgZmlsZSBhdCB0aGF0IGxvY2F0aW9uLgorICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RpdmUgaXMgbXVjaCBsaWtlIGl0cyBlcXVpdmFsZW50IGluIE1ha2UgZXhjZXB0CisgICAgICAgICAgICAgICAgdGhhdCBpZiB0aGUgcGF0aCBzcGVjaWZpZWQgb24gdGhlIGluY2x1ZGUgbGluZSBpcyBhIHJlbGF0aXZlCisgICAgICAgICAgICAgICAgcGF0aCwgQml0QmFrZSBsb2NhdGVzIHRoZSBmaXJzdCBmaWxlIGl0IGNhbiBmaW5kCisgICAgICAgICAgICAgICAgd2l0aGluIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSB5b3UgbmVlZGVkIGEgcmVjaXBlIHRvIGluY2x1ZGUgc29tZQorICAgICAgICAgICAgICAgIHNlbGYtdGVzdCBkZWZpbml0aW9uczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGluY2x1ZGUgdGVzdF9kZWZzLmluYworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gZGlyZWN0aXZlIGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgIHByb2R1Y2UgYW4gZXJyb3Igd2hlbiB0aGUgZmlsZSBjYW5ub3QgYmUgZm91bmQuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBpZiB0aGUgZmlsZSB5b3UKKyAgICAgICAgICAgICAgICAgICAgYXJlIGluY2x1ZGluZyBpcyBleHBlY3RlZCB0byBleGlzdCwgeW91IHNob3VsZCB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVxdWlyZS1pbmNsdXNpb24nPjxmaWxlbmFtZT5yZXF1aXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRG9pbmcgc28gbWFrZXMgc3VyZSB0aGF0IGFuIGVycm9yIGlzIHByb2R1Y2VkIGlmIHRoZQorICAgICAgICAgICAgICAgICAgICBmaWxlIGNhbm5vdCBiZSBmb3VuZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVxdWlyZS1pbmNsdXNpb24nPgorICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5yZXF1aXJlPC9maWxlbmFtZT4gRGlyZWN0aXZlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSB1bmRlcnN0YW5kcyB0aGUgPGZpbGVuYW1lPnJlcXVpcmU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdGl2ZS4KKyAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdGl2ZSBiZWhhdmVzIGp1c3QgbGlrZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGRpcmVjdGl2ZSB3aXRoIHRoZSBleGNlcHRpb24gdGhhdAorICAgICAgICAgICAgICAgIEJpdEJha2UgcmFpc2VzIGEgcGFyc2luZyBlcnJvciBpZiB0aGUgZmlsZSB0byBiZSBpbmNsdWRlZCBjYW5ub3QKKyAgICAgICAgICAgICAgICBiZSBmb3VuZC4KKyAgICAgICAgICAgICAgICBUaHVzLCBhbnkgZmlsZSB5b3UgcmVxdWlyZSBpcyBpbnNlcnRlZCBpbnRvIHRoZSBmaWxlIHRoYXQgaXMKKyAgICAgICAgICAgICAgICBiZWluZyBwYXJzZWQgYXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBkaXJlY3RpdmUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNpbWlsYXIgdG8gaG93IEJpdEJha2UgaGFuZGxlcworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2luY2x1ZGUtZGlyZWN0aXZlJz48ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICBpZiB0aGUgcGF0aCBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICBvbiB0aGUgcmVxdWlyZSBsaW5lIGlzIGEgcmVsYXRpdmUgcGF0aCwgQml0QmFrZSBsb2NhdGVzCisgICAgICAgICAgICAgICAgdGhlIGZpcnN0IGZpbGUgaXQgY2FuIGZpbmQgd2l0aGluIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSB0d28gdmVyc2lvbnMgb2YgYSByZWNpcGUKKyAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+Zm9vXzEuMi4yLmJiPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvb18yLjAuMC5iYjwvZmlsZW5hbWU+KSB3aGVyZQorICAgICAgICAgICAgICAgIGVhY2ggdmVyc2lvbiBjb250YWlucyBzb21lIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IHRoYXQgY291bGQgYmUKKyAgICAgICAgICAgICAgICBzaGFyZWQuCisgICAgICAgICAgICAgICAgWW91IGNvdWxkIGNyZWF0ZSBhbiBpbmNsdWRlIGZpbGUgbmFtZWQgPGZpbGVuYW1lPmZvby5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbnMgdGhlIGNvbW1vbiBkZWZpbml0aW9ucyBuZWVkZWQgdG8gYnVpbGQgImZvbyIuCisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYmUgc3VyZSA8ZmlsZW5hbWU+Zm9vLmluYzwvZmlsZW5hbWU+IGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgc2FtZSBkaXJlY3RvcnkgYXMgeW91ciB0d28gcmVjaXBlIGZpbGVzIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgT25jZSB0aGVzZSBjb25kaXRpb25zIGFyZSBzZXQgdXAsIHlvdSBjYW4gc2hhcmUgdGhlIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgICAgICAgICB1c2luZyBhIDxmaWxlbmFtZT5yZXF1aXJlPC9maWxlbmFtZT4gZGlyZWN0aXZlIGZyb20gd2l0aGluIGVhY2gKKyAgICAgICAgICAgICAgICByZWNpcGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByZXF1aXJlIGZvby5pbmMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW5oZXJpdC1jb25maWd1cmF0aW9uLWRpcmVjdGl2ZSc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPklOSEVSSVQ8L2ZpbGVuYW1lPiBDb25maWd1cmF0aW9uIERpcmVjdGl2ZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gY3JlYXRpbmcgYSBjb25maWd1cmF0aW9uIGZpbGUgKDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+KSwKKyAgICAgICAgICAgICAgICB5b3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPklOSEVSSVQ8L2ZpbGVuYW1lPiBkaXJlY3RpdmUgdG8KKyAgICAgICAgICAgICAgICBpbmhlcml0IGEgY2xhc3MuCisgICAgICAgICAgICAgICAgQml0QmFrZSBvbmx5IHN1cHBvcnRzIHRoaXMgZGlyZWN0aXZlIHdoZW4gdXNlZCB3aXRoaW4KKyAgICAgICAgICAgICAgICBhIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSB5b3UgbmVlZGVkIHRvIGluaGVyaXQgYSBjbGFzcworICAgICAgICAgICAgICAgIGZpbGUgY2FsbGVkIDxmaWxlbmFtZT5hYmMuYmJjbGFzczwvZmlsZW5hbWU+IGZyb20gYQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVCArPSAiYWJjIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlIGNhdXNlcyB0aGUgbmFtZWQKKyAgICAgICAgICAgICAgICBjbGFzcyB0byBiZSBpbmhlcml0ZWQgYXQgdGhlIHBvaW50IG9mIHRoZSBkaXJlY3RpdmUKKyAgICAgICAgICAgICAgICBkdXJpbmcgcGFyc2luZy4KKyAgICAgICAgICAgICAgICBBcyB3aXRoIHRoZSA8ZmlsZW5hbWU+aW5oZXJpdDwvZmlsZW5hbWU+IGRpcmVjdGl2ZSwgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZSBtdXN0IGJlIGxvY2F0ZWQgaW4gYQorICAgICAgICAgICAgICAgICJjbGFzc2VzIiBzdWJkaXJlY3RvcnkgaW4gb25lIG9mIHRoZSBkaXJlY3RvcmllcyBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZXMgYXJlIHBhcnNlZAorICAgICAgICAgICAgICAgICAgICBmaXJzdCBkdXJpbmcgQml0QmFrZSdzIGV4ZWN1dGlvbiwgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklOSEVSSVQ8L2ZpbGVuYW1lPiB0byBpbmhlcml0IGEgY2xhc3MgZWZmZWN0aXZlbHkKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdHMgdGhlIGNsYXNzIGdsb2JhbGx5IChpLmUuIGZvciBhbGwgcmVjaXBlcykuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2Z1bmN0aW9ucyc+CisgICAgICAgIDx0aXRsZT5GdW5jdGlvbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgd2l0aCBtb3N0IGxhbmd1YWdlcywgZnVuY3Rpb25zIGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIHRoYXQKKyAgICAgICAgICAgIGFyZSB1c2VkIHRvIGJ1aWxkIHVwIG9wZXJhdGlvbnMgaW50byB0YXNrcy4KKyAgICAgICAgICAgIEJpdEJha2Ugc3VwcG9ydHMgdGhlc2UgdHlwZXMgb2YgZnVuY3Rpb25zOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNoZWxsIEZ1bmN0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbnMgd3JpdHRlbiBpbiBzaGVsbCBzY3JpcHQgYW5kIGV4ZWN1dGVkIGVpdGhlcgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBhcyBmdW5jdGlvbnMsIHRhc2tzLCBvciBib3RoLgorICAgICAgICAgICAgICAgICAgICBUaGV5IGNhbiBhbHNvIGJlIGNhbGxlZCBieSBvdGhlciBzaGVsbCBmdW5jdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Qml0QmFrZSBTdHlsZSBQeXRob24gRnVuY3Rpb25zOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyB3cml0dGVuIGluIFB5dGhvbiBhbmQgZXhlY3V0ZWQgYnkgQml0QmFrZSBvciBvdGhlcgorICAgICAgICAgICAgICAgICAgICBQeXRob24gZnVuY3Rpb25zIHVzaW5nIDxmaWxlbmFtZT5iYi5idWlsZC5leGVjX2Z1bmMoKTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlB5dGhvbiBGdW5jdGlvbnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25zIHdyaXR0ZW4gaW4gUHl0aG9uIGFuZCBleGVjdXRlZCBieSBQeXRob24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QW5vbnltb3VzIFB5dGhvbiBGdW5jdGlvbnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUHl0aG9uIGZ1bmN0aW9ucyBleGVjdXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZworICAgICAgICAgICAgICAgICAgICBwYXJzaW5nLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgUmVnYXJkbGVzcyBvZiB0aGUgdHlwZSBvZiBmdW5jdGlvbiwgeW91IGNhbiBvbmx5CisgICAgICAgICAgICBkZWZpbmUgdGhlbSBpbiBjbGFzcyAoPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4pCisgICAgICAgICAgICBhbmQgcmVjaXBlICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPi5pbmM8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgIGZpbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NoZWxsLWZ1bmN0aW9ucyc+CisgICAgICAgICAgICA8dGl0bGU+U2hlbGwgRnVuY3Rpb25zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRnVuY3Rpb25zIHdyaXR0ZW4gaW4gc2hlbGwgc2NyaXB0IGFuZCBleGVjdXRlZCBlaXRoZXIKKyAgICAgICAgICAgICAgICBkaXJlY3RseSBhcyBmdW5jdGlvbnMsIHRhc2tzLCBvciBib3RoLgorICAgICAgICAgICAgICAgIFRoZXkgY2FuIGFsc28gYmUgY2FsbGVkIGJ5IG90aGVyIHNoZWxsIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgc2hlbGwgZnVuY3Rpb24gZGVmaW5pdGlvbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHNvbWVfZnVuY3Rpb24gKCkgeworICAgICAgICAgZWNobyAiSGVsbG8gV29ybGQiCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIHRoZXNlIHR5cGVzIG9mIGZ1bmN0aW9ucyBpbiB5b3VyIHJlY2lwZQorICAgICAgICAgICAgICAgIG9yIGNsYXNzIGZpbGVzLCB5b3UgbmVlZCB0byBmb2xsb3cgdGhlIHNoZWxsIHByb2dyYW1taW5nCisgICAgICAgICAgICAgICAgcnVsZXMuCisgICAgICAgICAgICAgICAgVGhlIHNjcmlwdHMgYXJlIGV4ZWN1dGVkIGJ5IDxmaWxlbmFtZT4vYmluL3NoPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgd2hpY2ggbWF5IG5vdCBiZSBhIGJhc2ggc2hlbGwgYnV0IG1pZ2h0IGJlIHNvbWV0aGluZworICAgICAgICAgICAgICAgIHN1Y2ggYXMgPGZpbGVuYW1lPmRhc2g8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIG5vdCB1c2UgQmFzaC1zcGVjaWZpYyBzY3JpcHQgKGJhc2hpc21zKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdiaXRiYWtlLXN0eWxlLXB5dGhvbi1mdW5jdGlvbnMnPgorICAgICAgICAgICAgPHRpdGxlPkJpdEJha2UgU3R5bGUgUHl0aG9uIEZ1bmN0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgd3JpdHRlbiBpbiBQeXRob24gYW5kIGV4ZWN1dGVkIGJ5CisgICAgICAgICAgICAgICAgQml0QmFrZSBvciBvdGhlciBQeXRob24gZnVuY3Rpb25zIHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmJ1aWxkLmV4ZWNfZnVuYygpPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgQml0QmFrZSBmdW5jdGlvbiBpczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHB5dGhvbiBzb21lX3B5dGhvbl9mdW5jdGlvbiAoKSB7CisgICAgICAgICBkLnNldFZhcigiVEVYVCIsICJIZWxsbyBXb3JsZCIpCisgICAgICAgICBwcmludCBkLmdldFZhcigiVEVYVCIsIFRydWUpCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgUHl0aG9uICJiYiIgYW5kICJvcyIgbW9kdWxlcyBhcmUgYWxyZWFkeQorICAgICAgICAgICAgICAgIGltcG9ydGVkLCB5b3UgZG8gbm90IG5lZWQgdG8gaW1wb3J0IHRoZXNlIG1vZHVsZXMuCisgICAgICAgICAgICAgICAgQWxzbyBpbiB0aGVzZSB0eXBlcyBvZiBmdW5jdGlvbnMsIHRoZSBkYXRhc3RvcmUgKCJkIikKKyAgICAgICAgICAgICAgICBpcyBhIGdsb2JhbCB2YXJpYWJsZSBhbmQgaXMgYWx3YXlzIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICBhdmFpbGFibGUuCisgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdweXRob24tZnVuY3Rpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5QeXRob24gRnVuY3Rpb25zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSB3cml0dGVuIGluIFB5dGhvbiBhbmQgYXJlIGV4ZWN1dGVkIGJ5CisgICAgICAgICAgICAgICAgb3RoZXIgUHl0aG9uIGNvZGUuCisgICAgICAgICAgICAgICAgRXhhbXBsZXMgb2YgUHl0aG9uIGZ1bmN0aW9ucyBhcmUgdXRpbGl0eSBmdW5jdGlvbnMKKyAgICAgICAgICAgICAgICB0aGF0IHlvdSBpbnRlbmQgdG8gY2FsbCBmcm9tIGluLWxpbmUgUHl0aG9uIG9yCisgICAgICAgICAgICAgICAgZnJvbSB3aXRoaW4gb3RoZXIgUHl0aG9uIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkZWYgZ2V0X2RlcGVuZHMoZCk6CisgICAgICAgICBpZiBkLmdldFZhcignU09NRUNPTkRJVElPTicsIFRydWUpOgorICAgICAgICAgICAgIHJldHVybiAiZGVwZW5kZW5jeXdpdGhjb25kIgorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICByZXR1cm4gImRlcGVuZGVuY3kiCisgICAgIFNPTUVDT05ESVRJT04gPSAiMSIKKyAgICAgREVQRU5EUyA9ICIke0BnZXRfZGVwZW5kcyhkKX0iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgd291bGQgcmVzdWx0IGluIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb250YWluaW5nIDxmaWxlbmFtZT5kZXBlbmRlbmN5d2l0aGNvbmQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSB0aGluZ3MgdG8ga25vdyBhYm91dCBQeXRob24gZnVuY3Rpb25zOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5QeXRob24gZnVuY3Rpb25zIGNhbiB0YWtlIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBCaXRCYWtlIGRhdGFzdG9yZSBpcyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgbXVzdCBwYXNzIGl0IGluIGFzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciB0byB0aGUgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSAiYmIiIGFuZCAib3MiIFB5dGhvbiBtb2R1bGVzIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgdG8gaW1wb3J0IHRoZW0uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdhbm9ueW1vdXMtcHl0aG9uLWZ1bmN0aW9ucyc+CisgICAgICAgICAgICA8dGl0bGU+QW5vbnltb3VzIFB5dGhvbiBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTb21ldGltZXMgaXQgaXMgdXNlZnVsIHRvIHJ1biBzb21lIGNvZGUgZHVyaW5nCisgICAgICAgICAgICAgICAgcGFyc2luZyB0byBzZXQgdmFyaWFibGVzIG9yIHRvIHBlcmZvcm0gb3RoZXIgb3BlcmF0aW9ucworICAgICAgICAgICAgICAgIHByb2dyYW1tYXRpY2FsbHkuCisgICAgICAgICAgICAgICAgVG8gZG8gdGhpcywgeW91IGNhbiBkZWZpbmUgYW4gYW5vbnltb3VzIFB5dGhvbiBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBjb25kaXRpb25hbGx5IHNldHMgYQorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBhbm90aGVyIHZhcmlhYmxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICAgICAgIGlmIGQuZ2V0VmFyKCdTT01FVkFSJywgVHJ1ZSkgPT0gJ3ZhbHVlJzoKKyAgICAgICAgICAgICBkLnNldFZhcignQU5PVEhFUlZBUicsICd2YWx1ZTInKQorICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSAiX19hbm9ueW1vdXMiIGZ1bmN0aW9uIG5hbWUgaXMgb3B0aW9uYWwsIHNvIHRoZQorICAgICAgICAgICAgICAgIGZvbGxvd2luZyBleGFtcGxlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIHRoZSBhYm92ZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHB5dGhvbiAoKSB7CisgICAgICAgICBpZiBkLmdldFZhcignU09NRVZBUicsIFRydWUpID09ICd2YWx1ZSc6CisgICAgICAgICAgICAgZC5zZXRWYXIoJ0FOT1RIRVJWQVInLCAndmFsdWUyJykKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIHVubGlrZSBvdGhlciBQeXRob24gZnVuY3Rpb25zIGFub255bW91cworICAgICAgICAgICAgICAgIFB5dGhvbiBmdW5jdGlvbnMgYXJlIGV4ZWN1dGVkIGR1cmluZyBwYXJzaW5nLCB0aGUKKyAgICAgICAgICAgICAgICAiZCIgdmFyaWFibGUgd2l0aGluIGFuIGFub255bW91cyBQeXRob24gZnVuY3Rpb24gcmVwcmVzZW50cworICAgICAgICAgICAgICAgIHRoZSBkYXRhc3RvcmUgZm9yIHRoZSBlbnRpcmUgcmVjaXBlLgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IGNhbiBzZXQgdmFyaWFibGUgdmFsdWVzIGhlcmUgYW5kCisgICAgICAgICAgICAgICAgdGhvc2UgdmFsdWVzIGNhbiBiZSBwaWNrZWQgdXAgYnkgb3RoZXIgZnVuY3Rpb25zLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2ZsZXhpYmxlLWluaGVyaXRhbmNlLWZvci1jbGFzcy1mdW5jdGlvbnMnPgorICAgICAgICAgICAgPHRpdGxlPkZsZXhpYmxlIEluaGVyaXRhbmNlIGZvciBDbGFzcyBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaHJvdWdoIGNvZGluZyB0ZWNobmlxdWVzIGFuZCB0aGUgdXNlIG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkVYUE9SVF9GVU5DVElPTlM8L2ZpbGVuYW1lPiwgQml0QmFrZSBzdXBwb3J0cworICAgICAgICAgICAgICAgIGV4cG9ydGluZyBhIGZ1bmN0aW9uIGZyb20gYSBjbGFzcyBzdWNoIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgY2xhc3MgZnVuY3Rpb24gYXBwZWFycyBhcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgICAgICAgIG9mIHRoZSBmdW5jdGlvbiwgYnV0IGNhbiBzdGlsbCBiZSBjYWxsZWQgaWYgYSByZWNpcGUKKyAgICAgICAgICAgICAgICBpbmhlcml0aW5nIHRoZSBjbGFzcyBuZWVkcyB0byBkZWZpbmUgaXRzIG93biB2ZXJzaW9uIG9mCisgICAgICAgICAgICAgICAgdGhlIGZ1bmN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyB1bmRlcnN0YW5kIHRoZSBiZW5lZml0cyBvZiB0aGlzIGZlYXR1cmUsIGNvbnNpZGVyCisgICAgICAgICAgICAgICAgdGhlIGJhc2ljIHNjZW5hcmlvIHdoZXJlIGEgY2xhc3MgZGVmaW5lcyBhIHRhc2sgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICBhbmQgeW91ciByZWNpcGUgaW5oZXJpdHMgdGhlIGNsYXNzLgorICAgICAgICAgICAgICAgIEluIHRoaXMgYmFzaWMgc2NlbmFyaW8sIHlvdXIgcmVjaXBlIGluaGVyaXRzIHRoZSB0YXNrCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gYXMgZGVmaW5lZCBpbiB0aGUgY2xhc3MuCisgICAgICAgICAgICAgICAgSWYgZGVzaXJlZCwgeW91ciByZWNpcGUgY2FuIGFkZCB0byB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBieSB1c2luZyB0aGUgIl9wcmVwZW5kIiBvciAiX2FwcGVuZCIgb3BlcmF0aW9ucworICAgICAgICAgICAgICAgIHJlc3BlY3RpdmVseSwgb3IgaXQgY2FuIHJlZGVmaW5lIHRoZSBmdW5jdGlvbiBjb21wbGV0ZWx5LgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIGl0IHJlZGVmaW5lcyB0aGUgZnVuY3Rpb24sIHRoZXJlIGlzCisgICAgICAgICAgICAgICAgbm8gbWVhbnMgIGZvciBpdCB0byBjYWxsIHRoZSBjbGFzcyB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RVhQT1JUX0ZVTkNUSU9OUzwvZmlsZW5hbWU+IHByb3ZpZGVzIGEgbWVjaGFuaXNtCisgICAgICAgICAgICAgICAgdGhhdCBlbmFibGVzIHRoZSByZWNpcGUncyB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiB0byBjYWxsCisgICAgICAgICAgICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBtYWtlIHVzZSBvZiB0aGlzIHRlY2huaXF1ZSwgeW91IG5lZWQgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgIHRoaW5ncyBpbiBwbGFjZToKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY2xhc3MgbmVlZHMgdG8gZGVmaW5lIHRoZSBmdW5jdGlvbiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+Y2xhc3NuYW1lPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+XzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZ1bmN0aW9ubmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYSBjbGFzcyBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFyLmJiY2xhc3M8L2ZpbGVuYW1lPiBhbmQgYSBmdW5jdGlvbiBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2ZvbzwvZmlsZW5hbWU+LCB0aGUgY2xhc3MgbXVzdCBkZWZpbmUgdGhlIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBiYXJfZG9fZm9vCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIG5lZWRzIHRvIGNvbnRhaW4gdGhlIDxmaWxlbmFtZT5FWFBPUlRfRlVOQ1RJT05TPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBFWFBPUlRfRlVOQ1RJT05TIDxyZXBsYWNlYWJsZT5mdW5jdGlvbm5hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGNvbnRpbnVpbmcgd2l0aCB0aGUgc2FtZSBleGFtcGxlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCBpbiB0aGUgPGZpbGVuYW1lPmJhci5iYmNsYXNzPC9maWxlbmFtZT4gd291bGQgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVYUE9SVF9GVU5DVElPTlMgZG9fZm9vCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gY2FsbCB0aGUgZnVuY3Rpb24gYXBwcm9wcmlhdGVseSBmcm9tIHdpdGhpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICBDb250aW51aW5nIHdpdGggdGhlIHNhbWUgZXhhbXBsZSwgaWYgeW91ciByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRzIHRvIGNhbGwgdGhlIGNsYXNzIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgaXQgc2hvdWxkIGNhbGwgPGZpbGVuYW1lPmJhcl9kb19mb288L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFzc3VtaW5nIDxmaWxlbmFtZT5kb19mb288L2ZpbGVuYW1lPiB3YXMgYSBzaGVsbCBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5FWFBPUlRfRlVOQ1RJT05TPC9maWxlbmFtZT4gd2FzIHVzZWQgYXMgYWJvdmUsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlJ3MgZnVuY3Rpb24gY291bGQgY29uZGl0aW9uYWxseSBjYWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZG9fZm9vKCkgeworICAgICAgICAgICAgIGlmIFsgc29tZWNvbmRpdGlvbiBdIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgYmFyX2RvX2ZvbworICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICMgRG8gc29tZXRoaW5nIGVsc2UKKyAgICAgICAgICAgICBmaQorICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBUbyBjYWxsIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gYXMgZGVmaW5lZAorICAgICAgICAgICAgICAgICAgICAgICAgaW4geW91ciByZWNpcGUsIGNhbGwgaXQgYXMgPGZpbGVuYW1lPmRvX2ZvbzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgV2l0aCB0aGVzZSBjb25kaXRpb25zIG1ldCwgeW91ciBzaW5nbGUgcmVjaXBlCisgICAgICAgICAgICAgICAgY2FuIGZyZWVseSBjaG9vc2UgYmV0d2VlbiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICBhcyBkZWZpbmVkIGluIHRoZSBjbGFzcyBmaWxlIGFuZCB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaW4geW91ciByZWNpcGUuCisgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBzZXQgdXAgdGhlc2UgY29uZGl0aW9ucywgeW91IGFyZSBsaW1pdGVkIHRvIHVzaW5nIG9uZSBmdW5jdGlvbgorICAgICAgICAgICAgICAgIG9yIHRoZSBvdGhlci4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd0YXNrcyc+CisgICAgICAgIDx0aXRsZT5UYXNrczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUYXNrcyBhcmUgQml0QmFrZSBleGVjdXRpb24gdW5pdHMgdGhhdCBvcmlnaW5hdGUgYXMKKyAgICAgICAgICAgIGZ1bmN0aW9ucyBhbmQgbWFrZSB1cCB0aGUgc3RlcHMgdGhhdCBCaXRCYWtlIG5lZWRzIHRvIHJ1bgorICAgICAgICAgICAgZm9yIGdpdmVuIHJlY2lwZS4KKyAgICAgICAgICAgIFRhc2tzIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiByZWNpcGUgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgb3IgPGZpbGVuYW1lPi5pbmM8L2ZpbGVuYW1lPikgYW5kIGNsYXNzCisgICAgICAgICAgICAoPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4pIGZpbGVzLgorICAgICAgICAgICAgQnkgY29udmVudGlvbiwgdGFzayBuYW1lcyBiZWdpbiB3aXRoIHRoZSBzdHJpbmcgImRvXyIuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIHRhc2sgdGhhdCBwcmludHMgb3V0IHRoZSBkYXRlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBweXRob24gZG9fcHJpbnRkYXRlICgpIHsKKyAgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgICBwcmludCB0aW1lLnN0cmZ0aW1lKCclWSVtJWQnLCB0aW1lLmdtdGltZSgpKQorICAgICB9CisgICAgIGFkZHRhc2sgcHJpbnRkYXRlIGFmdGVyIGRvX2ZldGNoIGJlZm9yZSBkb19idWlsZAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Byb21vdGluZy1hLWZ1bmN0aW9uLXRvLWEtdGFzayc+CisgICAgICAgICAgICA8dGl0bGU+UHJvbW90aW5nIGEgRnVuY3Rpb24gdG8gYSBUYXNrPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW55IGZ1bmN0aW9uIGNhbiBiZSBwcm9tb3RlZCB0byBhIHRhc2sgYnkgYXBwbHlpbmcgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFkZHRhc2s8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YWRkdGFzazwvZmlsZW5hbWU+IGNvbW1hbmQgYWxzbyBkZXNjcmliZXMKKyAgICAgICAgICAgICAgICBpbnRlci10YXNrIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBmdW5jdGlvbiBmcm9tIHRoZSBwcmV2aW91cyBzZWN0aW9uIGJ1dCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hZGR0YXNrPC9maWxlbmFtZT4gY29tbWFuZCBwcm9tb3RpbmcgaXQgdG8gYSB0YXNrCisgICAgICAgICAgICAgICAgYW5kIGRlZmluaW5nIHNvbWUgZGVwZW5kZW5jaWVzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcHl0aG9uIGRvX3ByaW50ZGF0ZSAoKSB7CisgICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICAgcHJpbnQgdGltZS5zdHJmdGltZSgnJVklbSVkJywgdGltZS5nbXRpbWUoKSkKKyAgICAgfQorICAgICBhZGR0YXNrIHByaW50ZGF0ZSBhZnRlciBkb19mZXRjaCBiZWZvcmUgZG9fYnVpbGQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhlIGV4YW1wbGUsIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFuZCB0aGVuIHByb21vdGVkCisgICAgICAgICAgICAgICAgYXMgYSB0YXNrLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fcHJpbnRkYXRlPC9maWxlbmFtZT4gdGFzayBiZWNvbWVzIGEgZGVwZW5kZW5jeSBvZgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPiB0YXNrLCB3aGljaCBpcyB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgQW5kLCB0aGUgPGZpbGVuYW1lPmRvX3ByaW50ZGF0ZTwvZmlsZW5hbWU+IHRhc2sgaXMgZGVwZW5kZW50IHVwb24KKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT4gdGFzay4KKyAgICAgICAgICAgICAgICBFeGVjdXRpb24gb2YgdGhlIDxmaWxlbmFtZT5kb19idWlsZDwvZmlsZW5hbWU+IHRhc2sgcmVzdWx0cworICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+ZG9fcHJpbnRkYXRlPC9maWxlbmFtZT4gdGFzayBydW5uaW5nIGZpcnN0LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RlbGV0aW5nLWEtdGFzayc+CisgICAgICAgICAgICA8dGl0bGU+RGVsZXRpbmcgYSBUYXNrPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgd2VsbCBhcyBiZWluZyBhYmxlIHRvIGFkZCB0YXNrcywgeW91IGNhbiBkZWxldGUgdGhlbS4KKyAgICAgICAgICAgICAgICBTaW1wbHkgdXNlIHRoZSA8ZmlsZW5hbWU+ZGVsdGFzazwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KKyAgICAgICAgICAgICAgICBkZWxldGUgYSB0YXNrLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0byBkZWxldGUgdGhlIGV4YW1wbGUgdGFzayB1c2VkIGluIHRoZSBwcmV2aW91cworICAgICAgICAgICAgICAgIHNlY3Rpb25zLCB5b3Ugd291bGQgdXNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZGVsdGFzayBwcmludGRhdGUKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgeW91IGRlbGV0ZSBhIHRhc2sgdXNpbmcgdGhlIDxmaWxlbmFtZT5kZWx0YXNrPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb21tYW5kIGFuZCB0aGUgdGFzayBoYXMgZGVwZW5kZW5jaWVzLCB0aGUgZGVwZW5kZW5jaWVzIGFyZQorICAgICAgICAgICAgICAgIG5vdCByZWNvbm5lY3RlZC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSB0aHJlZSB0YXNrcyBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19hPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5kb19iPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIDxmaWxlbmFtZT5kb19jPC9maWxlbmFtZT4gaXMgZGVwZW5kZW50IG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2I8L2ZpbGVuYW1lPiwgd2hpY2ggaW4gdHVybiBpcyBkZXBlbmRlbnQgb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEdpdmVuIHRoaXMgc2NlbmFyaW8sIGlmIHlvdSB1c2UgPGZpbGVuYW1lPmRlbHRhc2s8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRvIGRlbGV0ZSA8ZmlsZW5hbWU+ZG9fYjwvZmlsZW5hbWU+LCB0aGUgaW1wbGljaXQgZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIDxmaWxlbmFtZT5kb19jPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2E8L2ZpbGVuYW1lPiB0aHJvdWdoIDxmaWxlbmFtZT5kb19iPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBubyBsb25nZXIgZXhpc3RzLCBhbmQgPGZpbGVuYW1lPmRvX2M8L2ZpbGVuYW1lPiBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICBhcmUgbm90IHVwZGF0ZWQgdG8gaW5jbHVkZSA8ZmlsZW5hbWU+ZG9fYTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRodXMsIDxmaWxlbmFtZT5kb19jPC9maWxlbmFtZT4gaXMgZnJlZSB0byBydW4gYmVmb3JlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2E8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgZGVwZW5kZW5jaWVzIHN1Y2ggYXMgdGhlc2UgdG8gcmVtYWluIGludGFjdCwgdXNlCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5ub2V4ZWM8L2ZpbGVuYW1lPiB2YXJmbGFnIHRvIGRpc2FibGUgdGhlIHRhc2sKKyAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGVsdGFzazwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KKyAgICAgICAgICAgICAgICBkZWxldGUgaXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19iW25vZXhlY10gPSAiMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncGFzc2luZy1pbmZvcm1hdGlvbi1pbnRvLXRoZS1idWlsZC10YXNrLWVudmlyb25tZW50Jz4KKyAgICAgICAgICAgIDx0aXRsZT5QYXNzaW5nIEluZm9ybWF0aW9uIEludG8gdGhlIEJ1aWxkIFRhc2sgRW52aXJvbm1lbnQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHJ1bm5pbmcgYSB0YXNrLCBCaXRCYWtlIHRpZ2h0bHkgY29udHJvbHMgdGhlIGV4ZWN1dGlvbgorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IG9mIHRoZSBidWlsZCB0YXNrcyB0byBtYWtlCisgICAgICAgICAgICAgICAgc3VyZSB1bndhbnRlZCBjb250YW1pbmF0aW9uIGZyb20gdGhlIGJ1aWxkIG1hY2hpbmUgY2Fubm90CisgICAgICAgICAgICAgICAgaW5mbHVlbmNlIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIGlmIHlvdSBkbyB3YW50IHNvbWV0aGluZyB0byBnZXQgcGFzc2VkIGludG8gdGhlCisgICAgICAgICAgICAgICAgYnVpbGQgdGFzayBlbnZpcm9ubWVudCwgeW91IG11c3QgdGFrZSB0aGVzZSB0d28gc3RlcHM6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUZWxsIEJpdEJha2UgdG8gbG9hZCB3aGF0IHlvdSB3YW50IGZyb20gdGhlIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBkYXRhc3RvcmUuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGRvIHNvIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfRU5WX0VYVFJBV0hJVEUnPjxmaWxlbmFtZT5CQl9FTlZfRVhUUkFXSElURTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYXNzdW1lIHlvdSB3YW50IHRvIHByZXZlbnQgdGhlIGJ1aWxkIHN5c3RlbSBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NpbmcgeW91ciA8ZmlsZW5hbWU+JEhPTUUvLmNjYWNoZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgdGVsbHMgQml0QmFrZSB0byBsb2FkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q0NBQ0hFX0RJUjwvZmlsZW5hbWU+IGZyb20gdGhlIGVudmlyb25tZW50IGludG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkYXRhc3RvcmU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGV4cG9ydCBCQl9FTlZfRVhUUkFXSElURT0iJEJCX0VOVl9FWFRSQVdISVRFIENDQUNIRV9ESVIiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRlbGwgQml0QmFrZSB0byBleHBvcnQgd2hhdCB5b3UgaGF2ZSBsb2FkZWQgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzdG9yZSB0byB0aGUgdGFzayBlbnZpcm9ubWVudCBvZiBldmVyeSBydW5uaW5nIHRhc2suCisgICAgICAgICAgICAgICAgICAgICAgICBMb2FkaW5nIHNvbWV0aGluZyBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbnRvIHRoZSBkYXRhc3RvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIChwcmV2aW91cyBzdGVwKSBvbmx5IG1ha2VzIGl0IGF2YWlsYWJsZSBpbiB0aGUgZGF0YXN0b3JlLgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gZXhwb3J0IGl0IHRvIHRoZSB0YXNrIGVudmlyb25tZW50IG9mIGV2ZXJ5IHJ1bm5pbmcgdGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZSBhIGNvbW1hbmQgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIGluIHlvdXIgbG9jYWwgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IG9yIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGV4cG9ydCBDQ0FDSEVfRElSCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHNpZGUgZWZmZWN0IG9mIHRoZSBwcmV2aW91cyBzdGVwcyBpcyB0aGF0IEJpdEJha2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzIHRoZSB2YXJpYWJsZSBhcyBhIGRlcGVuZGVuY3kgb2YgdGhlIGJ1aWxkIHByb2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGluZ3MgbGlrZSB0aGUgc2V0c2NlbmUgY2hlY2tzdW1zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIGRvaW5nIHNvIHJlc3VsdHMgaW4gdW5uZWNlc3NhcnkgcmVidWlsZHMgb2YgdGFza3MsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZWxpc3QgdGhlIHZhcmlhYmxlIHNvIHRoYXQgdGhlIHNldHNjZW5lIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVzIHRoZSBkZXBlbmRlbmN5IHdoZW4gaXQgY3JlYXRlcyBjaGVja3N1bXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU29tZXRpbWVzLCBpdCBpcyB1c2VmdWwgdG8gYmUgYWJsZSB0byBvYnRhaW4gaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICBmcm9tIHRoZSBvcmlnaW5hbCBleGVjdXRpb24gZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgQml0YmFrZSBzYXZlcyBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGVudmlyb25tZW50IGludG8KKyAgICAgICAgICAgICAgICBhIHNwZWNpYWwgdmFyaWFibGUgbmFtZWQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfT1JJR0VOVic+PGZpbGVuYW1lPkJCX09SSUdFTlY8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+QkJfT1JJR0VOVjwvZmlsZW5hbWU+IHZhcmlhYmxlIHJldHVybnMgYSBkYXRhc3RvcmUKKyAgICAgICAgICAgICAgICBvYmplY3QgdGhhdCBjYW4gYmUgcXVlcmllZCB1c2luZyB0aGUgc3RhbmRhcmQgZGF0YXN0b3JlIG9wZXJhdG9ycworICAgICAgICAgICAgICAgIHN1Y2ggYXMgPGZpbGVuYW1lPmdldFZhcigsIEZhbHNlKTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBkYXRhc3RvcmUgb2JqZWN0IGlzIHVzZWZ1bCwgZm9yIGV4YW1wbGUsIHRvIGZpbmQgdGhlIG9yaWdpbmFsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU1BMQVk8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBvcmlnZW52ID0gZC5nZXRWYXIoIkJCX09SSUdFTlYiLCBGYWxzZSkKKyAgICAgYmFyID0gb3JpZ2Vudi5nZXRWYXIoIkJBUiIsIEZhbHNlKQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgZXhhbXBsZSByZXR1cm5zIDxmaWxlbmFtZT5CQVI8L2ZpbGVuYW1lPiBmcm9tIHRoZSBvcmlnaW5hbAorICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgQml0QmFrZSBjbGVhbnMgdGhlIGVudmlyb25tZW50IHRvIGluY2x1ZGUgb25seSB0aG9zZQorICAgICAgICAgICAgICAgIHRoaW5ncyBleHBvcnRlZCBvciBsaXN0ZWQgaW4gaXRzIHdoaXRlbGlzdCB0byBlbnN1cmUgdGhhdCB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBpcyByZXByb2R1Y2libGUgYW5kIGNvbnNpc3RlbnQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndmFyaWFibGUtZmxhZ3MnPgorICAgICAgICA8dGl0bGU+VmFyaWFibGUgRmxhZ3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVmFyaWFibGUgZmxhZ3MgKHZhcmZsYWdzKSBoZWxwIGNvbnRyb2wgYSB0YXNrJ3MgZnVuY3Rpb25hbGl0eQorICAgICAgICAgICAgYW5kIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIEJpdEJha2UgcmVhZHMgYW5kIHdyaXRlcyB2YXJmbGFncyB0byB0aGUgZGF0YXN0b3JlIHVzaW5nIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgIGNvbW1hbmQgZm9ybXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT52YXJpYWJsZTwvcmVwbGFjZWFibGU+ID0gZC5nZXRWYXJGbGFncygiPHJlcGxhY2VhYmxlPnZhcmlhYmxlPC9yZXBsYWNlYWJsZT4iKQorICAgICBzZWxmLmQuc2V0VmFyRmxhZ3MoIkZPTyIsIHsiZnVuYyI6IFRydWV9KQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHdvcmtpbmcgd2l0aCB2YXJmbGFncywgdGhlIHNhbWUgc3ludGF4LCB3aXRoIHRoZSBleGNlcHRpb24gb2YKKyAgICAgICAgICAgIG92ZXJyaWRlcywgYXBwbGllcy4KKyAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB5b3UgY2FuIHNldCwgYXBwZW5kLCBhbmQgcHJlcGVuZCB2YXJmbGFncyBqdXN0IGxpa2UKKyAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd2YXJpYWJsZS1mbGFnLXN5bnRheCc+VmFyaWFibGUgRmxhZyBTeW50YXg8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgZGV0YWlscy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBoYXMgYSBkZWZpbmVkIHNldCBvZiB2YXJmbGFncyBhdmFpbGFibGUgZm9yIHJlY2lwZXMgYW5kCisgICAgICAgICAgICBjbGFzc2VzLgorICAgICAgICAgICAgVGFza3Mgc3VwcG9ydCBhIG51bWJlciBvZiB0aGVzZSBmbGFncyB3aGljaCBjb250cm9sIHZhcmlvdXMKKyAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRhc2s6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Y2xlYW5kaXJzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEVtcHR5IGRpcmVjdG9yaWVzIHRoYXQgc2hvdWxkIGNyZWF0ZWQgYmVmb3JlIHRoZSB0YXNrIHJ1bnMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZGVwZW5kczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDb250cm9scyBpbnRlci10YXNrIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naW50ZXItdGFzay1kZXBlbmRlbmNpZXMnPkludGVyLVRhc2sgRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kZXB0YXNrOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIHRhc2sgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRlcGVuZGVuY2llcyc+QnVpbGQgRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kaXJzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yaWVzIHRoYXQgc2hvdWxkIGJlIGNyZWF0ZWQgYmVmb3JlIHRoZSB0YXNrIHJ1bnMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+bG9ja2ZpbGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgb25lIG9yIG1vcmUgbG9ja2ZpbGVzIHRvIGxvY2sgd2hpbGUgdGhlIHRhc2sKKyAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVzLgorICAgICAgICAgICAgICAgICAgICAgT25seSBvbmUgdGFzayBtYXkgaG9sZCBhIGxvY2tmaWxlLCBhbmQgYW55IHRhc2sgdGhhdAorICAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMgdG8gbG9jayBhbiBhbHJlYWR5IGxvY2tlZCBmaWxlIHdpbGwgYmxvY2sgdW50aWwKKyAgICAgICAgICAgICAgICAgICAgIHRoZSBsb2NrIGlzIHJlbGVhc2VkLgorICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyB2YXJpYWJsZSBmbGFnIHRvIGFjY29tcGxpc2ggbXV0dWFsCisgICAgICAgICAgICAgICAgICAgICBleGNsdXNpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+bm9leGVjOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE1hcmtzIHRoZSB0YXNrcyBhcyBiZWluZyBlbXB0eSBhbmQgbm8gZXhlY3V0aW9uIHJlcXVpcmVkLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm5vZXhlYzwvZmlsZW5hbWU+IGZsYWcgY2FuIGJlIHVzZWQgdG8gc2V0IHVwCisgICAgICAgICAgICAgICAgICAgIHRhc2tzIGFzIGRlcGVuZGVuY3kgcGxhY2Vob2xkZXJzLCBvciB0byBkaXNhYmxlIHRhc2tzIGRlZmluZWQKKyAgICAgICAgICAgICAgICAgICAgZWxzZXdoZXJlIHRoYXQgYXJlIG5vdCBuZWVkZWQgaW4gYSBwYXJ0aWN1bGFyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5ub3N0YW1wOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRlbGxzIEJpdEJha2UgdG8gbm90IGdlbmVyYXRlIGEgc3RhbXAgZmlsZSBmb3IgYSB0YXNrLAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpbXBsaWVzIHRoZSB0YXNrIHNob3VsZCBhbHdheXMgYmUgZXhlY3V0ZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cG9zdGZ1bmNzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHRhc2suCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cHJlZnVuY3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBiZWZvcmUgdGhlIHRhc2sgZXhlY3V0ZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cmRlcGVuZHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgaW50ZXItdGFzayBydW50aW1lIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdpbnRlci10YXNrLWRlcGVuZGVuY2llcyc+SW50ZXItVGFzayBEZXBlbmRlbmNpZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnJkZXB0YXNrOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIHRhc2sgcnVudGltZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncnVudGltZS1kZXBlbmRlbmNpZXMnPlJ1bnRpbWUgRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5yZWNpZGVwdGFzazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNldCBpbiBjb25qdW5jdGlvbiB3aXRoCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWNyZGVwdGFzazwvZmlsZW5hbWU+LCBzcGVjaWZpZXMgYSB0YXNrIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIGluc3BlY3RlZCBmb3IgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cmVjcmRlcHRhc2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgdGFzayByZWN1cnNpdmUgcnVudGltZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVjdXJzaXZlLWRlcGVuZGVuY2llcyc+UmVjdXJzaXZlIERlcGVuZGVuY2llczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c3RhbXAtZXh0cmEtaW5mbzo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBFeHRyYSBzdGFtcCBpbmZvcm1hdGlvbiB0byBhcHBlbmQgdG8gdGhlIHRhc2sncyBzdGFtcC4KKyAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgT3BlbkVtYmVkZGVkIHVzZXMgdGhpcyBmbGFnIHRvIGFsbG93CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtc3BlY2lmaWMgdGFza3MuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dW1hc2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHVtYXNrIHRvIHJ1biB0aGUgdGFzayB1bmRlci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU2V2ZXJhbCB2YXJmbGFncyBhcmUgdXNlZnVsIGZvciBjb250cm9sbGluZyBob3cgc2lnbmF0dXJlcyBhcmUKKyAgICAgICAgICAgIGNhbGN1bGF0ZWQgZm9yIHZhcmlhYmxlcy4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgcHJvY2Vzcywgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NoZWNrc3Vtcyc+Q2hlY2tzdW1zIChTaWduYXR1cmVzKTwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnZhcmRlcHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgdG8gYWRkIHRvIGEgdmFyaWFibGUncyBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBwdXJwb3NlcyBvZiBjYWxjdWxhdGluZyBpdHMgc2lnbmF0dXJlLgorICAgICAgICAgICAgICAgICAgICBBZGRpbmcgdmFyaWFibGVzIHRvIHRoaXMgbGlzdCBpcyB1c2VmdWwsIGZvciBleGFtcGxlLCB3aGVuCisgICAgICAgICAgICAgICAgICAgIGEgZnVuY3Rpb24gcmVmZXJzIHRvIGEgdmFyaWFibGUgaW4gYSBtYW5uZXIgdGhhdAorICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCBhbGxvdyBCaXRCYWtlIHRvIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lCisgICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlIHZhcmlhYmxlIGlzIHJlZmVycmVkIHRvLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnZhcmRlcHNleGNsdWRlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIGEgdmFyaWFibGUncyBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBwdXJwb3NlcyBvZiBjYWxjdWxhdGluZyBpdHMgc2lnbmF0dXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnZhcmRlcHZhbHVlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIElmIHNldCwgaW5zdHJ1Y3RzIEJpdEJha2UgdG8gaWdub3JlIHRoZSBhY3R1YWwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGFuZCBpbnN0ZWFkIHVzZSB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHZhcmlhYmxlJ3Mgc2lnbmF0dXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnZhcmRlcHZhbHVlZXhjbHVkZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBwaXBlLXNlcGFyYXRlZCBsaXN0IG9mIHN0cmluZ3MgdG8gZXhjbHVkZQorICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSB2YXJpYWJsZSdzIHZhbHVlIHdoZW4gY2FsY3VsYXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlJ3Mgc2lnbmF0dXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2V2ZW50cyc+CisgICAgICAgIDx0aXRsZT5FdmVudHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBhbGxvd3MgaW5zdGFsbGF0aW9uIG9mIGV2ZW50IGhhbmRsZXJzIHdpdGhpbgorICAgICAgICAgICAgcmVjaXBlIGFuZCBjbGFzcyBmaWxlcy4KKyAgICAgICAgICAgIEV2ZW50cyBhcmUgdHJpZ2dlcmVkIGF0IGNlcnRhaW4gcG9pbnRzIGR1cmluZyBvcGVyYXRpb24sCisgICAgICAgICAgICBzdWNoIGFzIHRoZSBiZWdpbm5pbmcgb2YgYW4gb3BlcmF0aW9uIGFnYWluc3QgYSBnaXZlbiByZWNpcGUKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+Ki5iYjwvZmlsZW5hbWU+IGZpbGUpLCB0aGUgc3RhcnQgb2YgYSBnaXZlbiB0YXNrLAorICAgICAgICAgICAgdGFzayBmYWlsdXJlLCB0YXNrIHN1Y2Nlc3MsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgIFRoZSBpbnRlbnQgaXMgdG8gbWFrZSBpdCBlYXN5IHRvIGRvIHRoaW5ncyBsaWtlIGVtYWlsCisgICAgICAgICAgICBub3RpZmljYXRpb24gb24gYnVpbGQgZmFpbHVyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgZXZlbnQgaGFuZGxlciB0aGF0CisgICAgICAgICAgICBwcmludHMgdGhlIG5hbWUgb2YgdGhlIGV2ZW50IGFuZCB0aGUgY29udGVudCBvZgorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5GSUxFPC9maWxlbmFtZT4gdmFyaWFibGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGFkZGhhbmRsZXIgbXljbGFzc19ldmVudGhhbmRsZXIKKyAgICAgcHl0aG9uIG15Y2xhc3NfZXZlbnRoYW5kbGVyKCkgeworICAgICAgICAgZnJvbSBiYi5ldmVudCBpbXBvcnQgZ2V0TmFtZQorICAgICAgICAgZnJvbSBiYiBpbXBvcnQgZGF0YQorICAgICAgICAgcHJpbnQoIlRoZSBuYW1lIG9mIHRoZSBFdmVudCBpcyAlcyIgJSBnZXROYW1lKGUpKQorICAgICAgICAgcHJpbnQoIlRoZSBmaWxlIHdlIHJ1biBmb3IgaXMgJXMiICUgZGF0YS5nZXRWYXIoJ0ZJTEUnLCBlLmRhdGEsIFRydWUpKQorICAgICB9CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGV2ZW50IGhhbmRsZXIgZ2V0cyBjYWxsZWQgZXZlcnkgdGltZSBhbiBldmVudCBpcworICAgICAgICAgICAgdHJpZ2dlcmVkLgorICAgICAgICAgICAgQSBnbG9iYWwgdmFyaWFibGUgIjxmaWxlbmFtZT5lPC9maWxlbmFtZT4iIGlzIGRlZmluZWQgYW5kCisgICAgICAgICAgICAiPGZpbGVuYW1lPmUuZGF0YTwvZmlsZW5hbWU+IiBjb250YWlucyBhbiBpbnN0YW5jZSBvZgorICAgICAgICAgICAgIjxmaWxlbmFtZT5iYi5kYXRhPC9maWxlbmFtZT4iLgorICAgICAgICAgICAgV2l0aCB0aGUgPGZpbGVuYW1lPmdldE5hbWUoZSk8L2ZpbGVuYW1lPiBtZXRob2QsIG9uZSBjYW4gZ2V0CisgICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgdHJpZ2dlcmVkIGV2ZW50LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZWNhdXNlIHlvdSBwcm9iYWJseSBhcmUgb25seSBpbnRlcmVzdGVkIGluIGEgc3Vic2V0IG9mIGV2ZW50cywKKyAgICAgICAgICAgIHlvdSB3b3VsZCBsaWtlbHkgdXNlIHRoZSA8ZmlsZW5hbWU+W2V2ZW50bWFza108L2ZpbGVuYW1lPiBmbGFnCisgICAgICAgICAgICBmb3IgeW91ciBldmVudCBoYW5kbGVyIHRvIGJlIHN1cmUgdGhhdCBvbmx5IGNlcnRhaW4gZXZlbnRzCisgICAgICAgICAgICB0cmlnZ2VyIHRoZSBoYW5kbGVyLgorICAgICAgICAgICAgR2l2ZW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIHN1cHBvc2UgeW91IG9ubHkgd2FudGVkIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmJ1aWxkLlRhc2tGYWlsZWQ8L2ZpbGVuYW1lPiBldmVudCB0byB0cmlnZ2VyIHRoYXQKKyAgICAgICAgICAgIGV2ZW50IGhhbmRsZXIuCisgICAgICAgICAgICBVc2UgdGhlIGZsYWcgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYWRkaGFuZGxlciBteWNsYXNzX2V2ZW50aGFuZGxlcgorICAgICBteWNsYXNzX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmJ1aWxkLlRhc2tGYWlsZWQiCisgICAgIHB5dGhvbiBteWNsYXNzX2V2ZW50aGFuZGxlcigpIHsKKyAgICAgICAgIGZyb20gYmIuZXZlbnQgaW1wb3J0IGdldE5hbWUKKyAgICAgICAgIGZyb20gYmIgaW1wb3J0IGRhdGEKKyAgICAgICAgIHByaW50KCJUaGUgbmFtZSBvZiB0aGUgRXZlbnQgaXMgJXMiICUgZ2V0TmFtZShlKSkKKyAgICAgICAgIHByaW50KCJUaGUgZmlsZSB3ZSBydW4gZm9yIGlzICVzIiAlIGRhdGEuZ2V0VmFyKCdGSUxFJywgZS5kYXRhLCBUcnVlKSkKKyAgICAgfQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEdXJpbmcgYSBzdGFuZGFyZCBidWlsZCwgdGhlIGZvbGxvd2luZyBjb21tb24gZXZlbnRzIG1pZ2h0IG9jY3VyOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5Db25maWdQYXJzZWQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LlBhcnNlU3RhcnRlZCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuUGFyc2VQcm9ncmVzcygpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LkJ1aWxkU3RhcnRlZCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuVGFza1N0YXJ0ZWQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmJ1aWxkLlRhc2tJbnZhbGlkKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5UYXNrRmFpbGVkU2lsZW50KCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5UYXNrRmFpbGVkKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5UYXNrU3VjY2VlZGVkKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5CdWlsZENvbXBsZXRlZCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuY29va2VyLkNvb2tlckV4aXQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBIZXJlIGlzIGEgbGlzdCBvZiBvdGhlciBldmVudHMgdGhhdCBvY2N1ciBiYXNlZCBvbiBzcGVjaWZpYyByZXF1ZXN0cworICAgICAgICAgICAgdG8gdGhlIHNlcnZlcjoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvblN0YXJ0ZWQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LlRyZWVEYXRhUHJlcGFyYXRpb25Qcm9ncmVzczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LlRyZWVEYXRhUHJlcGFyYXRpb25Db21wbGV0ZWQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5EZXBUcmVlR2VuZXJhdGVkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuQ29yZUJhc2VGaWxlc0ZvdW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuQ29uZmlnRmlsZVBhdGhGb3VuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LkZpbGVzTWF0Y2hpbmdGb3VuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LkNvbmZpZ0ZpbGVzRm91bmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5UYXJnZXRzVHJlZUdlbmVyYXRlZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndmFyaWFudHMtY2xhc3MtZXh0ZW5zaW9uLW1lY2hhbmlzbSc+CisgICAgICAgIDx0aXRsZT5WYXJpYW50cyAtIENsYXNzIEV4dGVuc2lvbiBNZWNoYW5pc208L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBzdXBwb3J0cyB0d28gZmVhdHVyZXMgdGhhdCBmYWNpbGl0YXRlIGNyZWF0aW5nCisgICAgICAgICAgICBmcm9tIGEgc2luZ2xlIHJlY2lwZSBmaWxlIG11bHRpcGxlIGluY2FybmF0aW9ucyBvZiB0aGF0CisgICAgICAgICAgICByZWNpcGUgZmlsZSB3aGVyZSBhbGwgaW5jYXJuYXRpb25zIGFyZSBidWlsZGFibGUuCisgICAgICAgICAgICBUaGVzZSBmZWF0dXJlcyBhcmUgZW5hYmxlZCB0aHJvdWdoIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCQ0xBU1NFWFRFTkQnPjxmaWxlbmFtZT5CQkNMQVNTRVhURU5EPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlZFUlNJT05TJz48ZmlsZW5hbWU+QkJWRVJTSU9OUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIG1lY2hhbmlzbSBmb3IgdGhpcyBjbGFzcyBleHRlbnNpb24gaXMgZXh0cmVtZWx5CisgICAgICAgICAgICAgICAgc3BlY2lmaWMgdG8gdGhlIGltcGxlbWVudGF0aW9uLgorICAgICAgICAgICAgICAgIFVzdWFsbHksIHRoZSByZWNpcGUncworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUk9WSURFUyc+PGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+LCBhbmQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgd291bGQgbmVlZCB0byBiZSBtb2RpZmllZCBieSB0aGUgZXh0ZW5zaW9uIGNsYXNzLgorICAgICAgICAgICAgICAgIEZvciBzcGVjaWZpYyBleGFtcGxlcywgc2VlIHRoZSBPRS1Db3JlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5tdWx0aWxpYjwvZmlsZW5hbWU+IGNsYXNzZXMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPkJCQ0xBU1NFWFRFTkQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3NlcyB1c2VkIHRvICJleHRlbmQiIHRoZQorICAgICAgICAgICAgICAgICAgICByZWNpcGUgZm9yIGVhY2ggdmFyaWFudC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgcmVzdWx0cyBpbiBhIHNlY29uZCBpbmNhcm5hdGlvbiBvZiB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICByZWNpcGUgYmVpbmcgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY29uZCBpbmNhcm5hdGlvbiB3aWxsIGhhdmUgdGhlICJuYXRpdmUiIGNsYXNzIGluaGVyaXRlZC4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPkJCVkVSU0lPTlM8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGFsbG93cyBhIHNpbmdsZSByZWNpcGUgdG8gYnVpbGQgbXVsdGlwbGUgdmVyc2lvbnMgb2YgYQorICAgICAgICAgICAgICAgICAgICBwcm9qZWN0IGZyb20gYSBzaW5nbGUgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGNvbmRpdGlvbmFsIG1ldGFkYXRhCisgICAgICAgICAgICAgICAgICAgICh1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU9WRVJSSURFUyc+PGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBtZWNoYW5pc20pIGZvciBhIHNpbmdsZSB2ZXJzaW9uLCBvciBhbiBvcHRpb25hbGx5IG5hbWVkIHJhbmdlIG9mIHZlcnNpb25zLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJWRVJTSU9OUyA9ICIxLjAgMi4wIGdpdCIKKyAgICAgU1JDX1VSSV9naXQgPSAiZ2l0Oi8vc29tZXVybC9zb21lcGF0aC5naXQiCisKKyAgICAgQkJWRVJTSU9OUyA9ICIxLjAuWzAtNl06MS4wLjArIFwgMS4wLls3LTldOjEuMC43KyIKKyAgICAgU1JDX1VSSV9hcHBlbmRfMS4wLjcrID0gImZpbGU6Ly9zb21lX3BhdGNoX3doaWNoX3RoZV9uZXdfdmVyc2lvbnNfbmVlZC5wYXRjaDtwYXRjaD0xIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSByYW5nZSBkZWZhdWx0cyB0byB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaW4gT3BlbkVtYmVkZGVkLCB0aGUgcmVjaXBlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvb18xLjAuMCsuYmI8L2ZpbGVuYW1lPiBjcmVhdGVzIGEgZGVmYXVsdCBuYW1lIHJhbmdlCisgICAgICAgICAgICAgICAgICAgIG9mIDxmaWxlbmFtZT4xLjAuMCs8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSB0aGUgcmFuZ2UgbmFtZSBpcyBub3Qgb25seSBwbGFjZWQKKyAgICAgICAgICAgICAgICAgICAgaW50byBvdmVycmlkZXMsIGJ1dCBpdCBpcyBhbHNvIG1hZGUgYXZhaWxhYmxlIGZvciB0aGUgbWV0YWRhdGEgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSB2YXJpYWJsZSB0aGF0IGRlZmluZXMgdGhlIGJhc2UgcmVjaXBlIHZlcnNpb25zIGZvciB1c2UgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPiBzZWFyY2ggcGF0aHMKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2RlcGVuZGVuY2llcyc+CisgICAgICAgIDx0aXRsZT5EZXBlbmRlbmNpZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gYWxsb3cgZm9yIGVmZmljaWVudCBvcGVyYXRpb24gZ2l2ZW4gbXVsdGlwbGUgcHJvY2Vzc2VzCisgICAgICAgICAgICBleGVjdXRpbmcgaW4gcGFyYWxsZWwsIEJpdEJha2UgaGFuZGxlcyBkZXBlbmRlbmNpZXMgYXQKKyAgICAgICAgICAgIHRoZSB0YXNrIGxldmVsLgorICAgICAgICAgICAgQml0QmFrZSBzdXBwb3J0cyBhIHJvYnVzdCBtZXRob2QgdG8gaGFuZGxlIHRoZXNlIGRlcGVuZGVuY2llcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBzZXZlcmFsIHR5cGVzIG9mIGRlcGVuZGVuY3kgbWVjaGFuaXNtcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkZXBlbmRlbmNpZXMtaW50ZXJuYWwtdG8tdGhlLWJiLWZpbGUnPgorICAgICAgICAgICAgPHRpdGxlPkRlcGVuZGVuY2llcyBJbnRlcm5hbCB0byB0aGUgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlIDxmaWxlbmFtZT5hZGR0YXNrPC9maWxlbmFtZT4gZGlyZWN0aXZlCisgICAgICAgICAgICAgICAgdG8gbWFuYWdlIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBpbnRlcm5hbCB0byBhIGdpdmVuIHJlY2lwZQorICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5hZGR0YXNrPC9maWxlbmFtZT4gZGlyZWN0aXZlIHRvCisgICAgICAgICAgICAgICAgaW5kaWNhdGUgd2hlbiBhIHRhc2sgaXMgZGVwZW5kZW50IG9uIG90aGVyIHRhc2tzIG9yIHdoZW4KKyAgICAgICAgICAgICAgICBvdGhlciB0YXNrcyBkZXBlbmQgb24gdGhhdCByZWNpcGUuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYWRkdGFzayBwcmludGRhdGUgYWZ0ZXIgZG9fZmV0Y2ggYmVmb3JlIGRvX2J1aWxkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5wcmludGRhdGU8L2ZpbGVuYW1lPiB0YXNrIGlzCisgICAgICAgICAgICAgICAgZGVwZW5kcyBvbiB0aGUgY29tcGxldGlvbiBvZiB0aGUgPGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB0YXNrLgorICAgICAgICAgICAgICAgIEFuZCwgdGhlIDxmaWxlbmFtZT5kb19idWlsZDwvZmlsZW5hbWU+IGRlcGVuZHMgb24gdGhlIGNvbXBsZXRpb24KKyAgICAgICAgICAgICAgICBvZiB0aGUgPGZpbGVuYW1lPnByaW50ZGF0ZTwvZmlsZW5hbWU+IHRhc2suCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGQtZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5CdWlsZCBEZXBlbmRlbmNpZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gbWFuYWdlIGJ1aWxkIHRpbWUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIFRoZSAiZGVwdGFzayIgdmFyZmxhZyBmb3IgdGFza3Mgc2lnbmlmaWVzIHRoZSB0YXNrIG9mIGVhY2gKKyAgICAgICAgICAgICAgICBpdGVtIGxpc3RlZCBpbiA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+IHRoYXQgbXVzdAorICAgICAgICAgICAgICAgIGNvbXBsZXRlIGJlZm9yZSB0aGF0IHRhc2sgY2FuIGJlIGV4ZWN1dGVkLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2NvbmZpZ3VyZVtkZXB0YXNrXSA9ICJkb19wb3B1bGF0ZV9zeXNyb290IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdGFzayBvZiBlYWNoIGl0ZW0gaW4gPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPiBtdXN0IGNvbXBsZXRlIGJlZm9yZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPiBjYW4gZXhlY3V0ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdydW50aW1lLWRlcGVuZGVuY2llcyc+CisgICAgICAgICAgICA8dGl0bGU+UnVudGltZSBEZXBlbmRlbmNpZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4sIGFuZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGVzIHRvIG1hbmFnZSBydW50aW1lIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGxpc3RzIHJ1bnRpbWUKKyAgICAgICAgICAgICAgICBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICBFYWNoIG9mIHRob3NlIHBhY2thZ2VzIGNhbiBoYXZlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+IHJ1bnRpbWUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIFRoZSAicmRlcHRhc2siIGZsYWcgZm9yIHRhc2tzIGlzIHVzZWQgdG8gc2lnbmlmeSB0aGUgdGFzayBvZiBlYWNoCisgICAgICAgICAgICAgICAgaXRlbSBydW50aW1lIGRlcGVuZGVuY3kgd2hpY2ggbXVzdCBoYXZlIGNvbXBsZXRlZCBiZWZvcmUgdGhhdAorICAgICAgICAgICAgICAgIHRhc2sgY2FuIGJlIGV4ZWN1dGVkLgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZG9fcGFja2FnZV9xYVtyZGVwdGFza10gPSAiZG9fcGFja2FnZWRhdGEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB0YXNrIG9mIGVhY2ggaXRlbSBpbiA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiBtdXN0IGhhdmUKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWQgYmVmb3JlIDxmaWxlbmFtZT5kb19wYWNrYWdlX3FhPC9maWxlbmFtZT4gY2FuIGV4ZWN1dGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVjdXJzaXZlLWRlcGVuZGVuY2llcyc+CisgICAgICAgICAgICA8dGl0bGU+UmVjdXJzaXZlIERlcGVuZGVuY2llczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUgInJlY3JkZXB0YXNrIiBmbGFnIHRvIG1hbmFnZQorICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZSB0YXNrIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIGxvb2tzIHRocm91Z2ggdGhlIGJ1aWxkLXRpbWUgYW5kIHJ1bnRpbWUKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgb2YgdGhlIGN1cnJlbnQgcmVjaXBlLCBsb29rcyB0aHJvdWdoCisgICAgICAgICAgICAgICAgdGhlIHRhc2sncyBpbnRlci10YXNrCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLCBhbmQgdGhlbiBhZGRzIGRlcGVuZGVuY2llcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgbGlzdGVkIHRhc2suCisgICAgICAgICAgICAgICAgT25jZSBCaXRCYWtlIGhhcyBhY2NvbXBsaXNoZWQgdGhpcywgaXQgcmVjdXJzaXZlbHkgd29ya3MgdGhyb3VnaAorICAgICAgICAgICAgICAgIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhvc2UgdGFza3MuCisgICAgICAgICAgICAgICAgSXRlcmF0aXZlIHBhc3NlcyBjb250aW51ZSB1bnRpbCBhbGwgZGVwZW5kZW5jaWVzIGFyZSBkaXNjb3ZlcmVkCisgICAgICAgICAgICAgICAgYW5kIGFkZGVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgbWlnaHQgd2FudCB0byBub3Qgb25seSBoYXZlIEJpdEJha2UgbG9vayBmb3IKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgb2YgdGhvc2UgdGFza3MsIGJ1dCBhbHNvIGhhdmUgQml0QmFrZSBsb29rCisgICAgICAgICAgICAgICAgZm9yIGJ1aWxkLXRpbWUgYW5kIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIG9mIHRoZSBkZXBlbmRlbnQKKyAgICAgICAgICAgICAgICB0YXNrcyBhcyB3ZWxsLgorICAgICAgICAgICAgICAgIElmIHRoYXQgaXMgdGhlIGNhc2UsIHlvdSBuZWVkIHRvIHJlZmVyZW5jZSB0aGUgdGFzayBuYW1lCisgICAgICAgICAgICAgICAgaXRzZWxmIGluIHRoZSB0YXNrIGxpc3Q6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19hW3JlY3JkZXB0YXNrXSA9ICJkb19hIGRvX2IiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2ludGVyLXRhc2stZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbnRlci1UYXNrIERlcGVuZGVuY2llczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUgImRlcGVuZHMiIGZsYWcgaW4gYSBtb3JlIGdlbmVyaWMgZm9ybQorICAgICAgICAgICAgICAgIHRvIG1hbmFnZSBpbnRlci10YXNrIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICBUaGlzIG1vcmUgZ2VuZXJpYyBmb3JtIGFsbG93cyBmb3IgaW50ZXItZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgIGNoZWNrcyBmb3Igc3BlY2lmaWMgdGFza3MgcmF0aGVyIHRoYW4gY2hlY2tzIGZvcgorICAgICAgICAgICAgICAgIHRoZSBkYXRhIGluIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZG9fcGF0Y2hbZGVwZW5kc10gPSAicXVpbHQtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB0YXNrIG9mIHRoZSB0YXJnZXQgPGZpbGVuYW1lPnF1aWx0LW5hdGl2ZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgbXVzdCBoYXZlIGNvbXBsZXRlZCBiZWZvcmUgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT4gdGFzayBjYW4gZXhlY3V0ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlICJyZGVwZW5kcyIgZmxhZyB3b3JrcyBpbiBhIHNpbWlsYXIgd2F5IGJ1dCB0YWtlcyB0YXJnZXRzCisgICAgICAgICAgICAgICAgaW4gdGhlIHJ1bnRpbWUgbmFtZXNwYWNlIGluc3RlYWQgb2YgdGhlIGJ1aWxkLXRpbWUgZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgIG5hbWVzcGFjZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdhY2Nlc3NpbmctZGF0YXN0b3JlLXZhcmlhYmxlcy11c2luZy1weXRob24nPgorICAgICAgICA8dGl0bGU+QWNjZXNzaW5nIERhdGFzdG9yZSBWYXJpYWJsZXMgVXNpbmcgUHl0aG9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEl0IGlzIG9mdGVuIG5lY2Vzc2FyeSB0byBhY2Nlc3MgdmFyaWFibGVzIGluIHRoZQorICAgICAgICAgICAgQml0QmFrZSBkYXRhc3RvcmUgdXNpbmcgUHl0aG9uIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgIFRoZSBCaXRiYWtlIGRhdGFzdG9yZSBoYXMgYW4gQVBJIHRoYXQgYWxsb3dzIHlvdSB0aGlzCisgICAgICAgICAgICBhY2Nlc3MuCisgICAgICAgICAgICBIZXJlIGlzIGEgbGlzdCBvZiBhdmFpbGFibGUgb3BlcmF0aW9uczoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGluZm9ybWFsdGFibGUgZnJhbWU9J25vbmUnPgorICAgICAgICAgICAgICAgIDx0Z3JvdXAgY29scz0nMicgYWxpZ249J2xlZnQnIGNvbHNlcD0nMScgcm93c2VwPScxJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvbHNwZWMgY29sbmFtZT0nYzEnIGNvbHdpZHRoPScxKicvPgorICAgICAgICAgICAgICAgICAgICA8Y29sc3BlYyBjb2xuYW1lPSdjMicgY29sd2lkdGg9JzEqJy8+CisgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZW1waGFzaXM+T3BlcmF0aW9uPC9lbXBoYXNpcz48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGVtcGhhc2lzPkRlc2NyaXB0aW9uPC9lbXBoYXNpcz48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5nZXRWYXIoIlgiLCBleHBhbmQ9RmFsc2UpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+UmV0dXJucyB0aGUgdmFsdWUgb2YgdmFyaWFibGUgIlgiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyAiZXhwYW5kPVRydWUiIGV4cGFuZHMgdGhlIHZhbHVlLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5zZXRWYXIoIlgiLCAidmFsdWUiKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlNldHMgdGhlIHZhcmlhYmxlICJYIiB0byAidmFsdWUiLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5hcHBlbmRWYXIoIlgiLCAidmFsdWUiKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkFkZHMgInZhbHVlIiB0byB0aGUgZW5kIG9mIHRoZSB2YXJpYWJsZSAiWCIuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLnByZXBlbmRWYXIoIlgiLCAidmFsdWUiKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkFkZHMgInZhbHVlIiB0byB0aGUgc3RhcnQgb2YgdGhlIHZhcmlhYmxlICJYIi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuZGVsVmFyKCJYIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5EZWxldGVzIHRoZSB2YXJpYWJsZSAiWCIgZnJvbSB0aGUgZGF0YXN0b3JlLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5yZW5hbWVWYXIoIlgiLCAiWSIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+UmVuYW1lcyB0aGUgdmFyaWFibGUgIlgiIHRvICJZIi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuZ2V0VmFyRmxhZygiWCIsIGZsYWcsIGV4cGFuZD1GYWxzZSk8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5HZXRzIHRoZW4gbmFtZWQgZmxhZyBmcm9tIHRoZSB2YXJpYWJsZSAiWCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nICJleHBhbmQ9VHJ1ZSIgZXhwYW5kcyB0aGUgbmFtZWQgZmxhZy48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuc2V0VmFyRmxhZygiWCIsIGZsYWcsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+U2V0cyB0aGUgbmFtZWQgZmxhZyBmb3IgdmFyaWFibGUgIlgiIHRvICJ2YWx1ZSIuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmFwcGVuZFZhckZsYWcoIlgiLCBmbGFnLCAidmFsdWUiKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkFwcGVuZHMgInZhbHVlIiB0byB0aGUgbmFtZWQgZmxhZyBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSAiWCIuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLnByZXBlbmRWYXJGbGFnKCJYIiwgZmxhZywgInZhbHVlIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5QcmVwZW5kcyAidmFsdWUiIHRvIHRoZSBuYW1lZCBmbGFnIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlICJYIi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuZGVsVmFyRmxhZygiWCIsIGZsYWcpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+RGVsZXRlcyB0aGUgbmFtZWQgZmxhZyBvbiB0aGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlgiIGZyb20gdGhlIGRhdGFzdG9yZS48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuc2V0VmFyRmxhZ3MoIlgiLCBmbGFnc2RpY3QpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+U2V0cyB0aGUgZmxhZ3Mgc3BlY2lmaWVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZmxhZ3NkaWN0KCk8L2ZpbGVuYW1lPiBwYXJhbWV0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZXRWYXJGbGFnczwvZmlsZW5hbWU+IGRvZXMgbm90IGNsZWFyIHByZXZpb3VzIGZsYWdzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGluayBvZiB0aGlzIG9wZXJhdGlvbiBhcyA8ZmlsZW5hbWU+YWRkVmFyRmxhZ3M8L2ZpbGVuYW1lPi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuZ2V0VmFyRmxhZ3MoIlgiKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlJldHVybnMgYSA8ZmlsZW5hbWU+ZmxhZ3NkaWN0PC9maWxlbmFtZT4gb2YgdGhlIGZsYWdzIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdmFyaWFibGUgIlgiLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5kZWxWYXJGbGFncygiWCIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+RGVsZXRlcyBhbGwgdGhlIGZsYWdzIGZvciB0aGUgdmFyaWFibGUgIlgiLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgICAgICA8L3Rncm91cD4KKyAgICAgICAgICAgIDwvaW5mb3JtYWx0YWJsZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd0YXNrLWNoZWNrc3Vtcy1hbmQtc2V0c2NlbmUnPgorICAgICAgICA8dGl0bGU+VGFzayBDaGVja3N1bXMgYW5kIFNldHNjZW5lPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgdXNlcyBjaGVja3N1bXMgKG9yIHNpZ25hdHVyZXMpIGFsb25nIHdpdGggdGhlIHNldHNjZW5lCisgICAgICAgICAgICB0byBkZXRlcm1pbmUgaWYgYSB0YXNrIG5lZWRzIHRvIGJlIHJ1bi4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIHByb2Nlc3MuCisgICAgICAgICAgICBUbyBoZWxwIHVuZGVyc3RhbmQgaG93IEJpdEJha2UgZG9lcyB0aGlzLCB0aGUgc2VjdGlvbiBhc3N1bWVzIGFuCisgICAgICAgICAgICBPcGVuRW1iZWRkZWQgbWV0YWRhdGEtYmFzZWQgZXhhbXBsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBsaXN0IGlzIGEgcGxhY2UgaG9sZGVyIG9mIGNvbnRlbnQgZXhpc3RlZCBmcm9tIHByZXZpb3VzIHdvcmsKKyAgICAgICAgICAgIG9uIHRoZSBtYW51YWwuCisgICAgICAgICAgICBTb21lIG9yIGFsbCBvZiBpdCBwcm9iYWJseSBuZWVkcyBpbnRlZ3JhdGVkIGludG8gdGhlIHN1YnNlY3Rpb25zCisgICAgICAgICAgICB0aGF0IG1ha2UgdXAgdGhpcyBzZWN0aW9uLgorICAgICAgICAgICAgRm9yIG5vdywgSSBoYXZlIGp1c3QgcHJvdmlkZWQgYSBzaG9ydCBnbG9zc2FyeS1saWtlIGRlc2NyaXB0aW9uCisgICAgICAgICAgICBmb3IgZWFjaCB2YXJpYWJsZS4KKyAgICAgICAgICAgIFVsdGltYXRlbHksIHRoaXMgbGlzdCBnb2VzIGF3YXkuCisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+U1RBTVA8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2UgcGF0aCB0byBjcmVhdGUgc3RhbXAgZmlsZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5TVEFNUENMRUFOPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgQWdhaW4sIHRoZSBiYXNlIHBhdGggdG8gY3JlYXRlIHN0YW1wIGZpbGVzIGJ1dCBjYW4gdXNlIHdpbGRjYXJkcworICAgICAgICAgICAgICAgICAgICBmb3IgbWF0Y2hpbmcgYSByYW5nZSBvZiBmaWxlcyBmb3IgY2xlYW4gb3BlcmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQl9TVEFNUF9XSElURUxJU1Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBzdGFtcCBmaWxlcyB0aGF0IGFyZSBsb29rZWQgYXQgd2hlbiB0aGUgc3RhbXAgcG9saWN5CisgICAgICAgICAgICAgICAgICAgIGlzICJ3aGl0ZWxpc3QiLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX1NUQU1QX1BPTElDWTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIG1vZGUgZm9yIGNvbXBhcmluZyB0aW1lc3RhbXBzIG9mIHN0YW1wIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX0hBU0hDSEVDS19GVU5DVElPTjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gY2FsbCBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlICJzZXRzY2VuZSIgcGFydCBvZiB0aGUgdGFzaydzIGV4ZWN1dGlvbiBpbiBvcmRlcgorICAgICAgICAgICAgICAgICAgICB0byB2YWxpZGF0ZSB0aGUgbGlzdCBvZiB0YXNrIGhhc2hlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT048L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBmdW5jdGlvbiB0byBjYWxsIHRoYXQgdmVyaWZpZXMgdGhlIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgcGxhbm5lZCB0YXNrIGV4ZWN1dGlvbiBiZWZvcmUgdGhlIG1haW4gdGFzayBleGVjdXRpb24KKyAgICAgICAgICAgICAgICAgICAgaGFwcGVucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQl9TRVRTQ0VORV9ERVBWQUxJRDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGZ1bmN0aW9uIEJpdEJha2UgY2FsbHMgdGhhdCBkZXRlcm1pbmVzCisgICAgICAgICAgICAgICAgICAgIHdoZXRoZXIgQml0QmFrZSByZXF1aXJlcyBhIHNldHNjZW5lIGRlcGVuZGVuY3kgdG8KKyAgICAgICAgICAgICAgICAgICAgYmUgbWV0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX1RBU0tIQVNIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgV2l0aGluIGFuIGV4ZWN1dGluZyB0YXNrLCB0aGlzIHZhcmlhYmxlIGhvbGRzIHRoZSBoYXNoCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSB0YXNrIGFzIHJldHVybmVkIGJ5IHRoZSBjdXJyZW50bHkgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgZ2VuZXJhdG9yLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtcmVmLXZhcmlhYmxlcy54bWwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1yZWYtdmFyaWFibGVzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWUxYjk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtcmVmLXZhcmlhYmxlcy54bWwKQEAgLTAsMCArMSwyMjYyIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8IS0tIER1bW15IGNoYXB0ZXIgLS0+Cis8Y2hhcHRlciBpZD0ncmVmLXZhcmlhYmxlcy1nbG9zJz4KKworPHRpdGxlPlZhcmlhYmxlcyBHbG9zc2FyeTwvdGl0bGU+CisKKzxwYXJhPgorICAgIFRoaXMgY2hhcHRlciBsaXN0cyBjb21tb24gdmFyaWFibGVzIHVzZWQgYnkgQml0QmFrZSBhbmQgZ2l2ZXMgYW4gb3ZlcnZpZXcKKyAgICBvZiB0aGVpciBmdW5jdGlvbiBhbmQgY29udGVudHMuCis8L3BhcmE+CisKKzxub3RlPgorICAgIEZvbGxvd2luZyBhcmUgc29tZSBwb2ludHMgcmVnYXJkaW5nIHRoZSB2YXJpYWJsZXMgbGlzdGVkIGluIHRoaXMgZ2xvc3Nhcnk6CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSB2YXJpYWJsZXMgbGlzdGVkIGluIHRoaXMgZ2xvc3NhcnkKKyAgICAgICAgICAgIGFyZSBzcGVjaWZpYyB0byBCaXRCYWtlLgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGUgZGVzY3JpcHRpb25zIGFyZSBsaW1pdGVkIHRvIHRoYXQgY29udGV4dC4KKyAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWxzbywgdmFyaWFibGVzIGV4aXN0IGluIG90aGVyIHN5c3RlbXMgdGhhdCB1c2UgQml0QmFrZQorICAgICAgICAgICAgKGUuZy4gVGhlIFlvY3RvIFByb2plY3QgYW5kIE9wZW5FbWJlZGRlZCkgdGhhdCBoYXZlIG5hbWVzIGlkZW50aWNhbAorICAgICAgICAgICAgdG8gdGhvc2UgZm91bmQgaW4gdGhpcyBnbG9zc2FyeS4KKyAgICAgICAgICAgIEZvciBzdWNoIGNhc2VzLCB0aGUgdmFyaWFibGVzIGluIHRob3NlIHN5c3RlbXMgZXh0ZW5kIHRoZQorICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBvZiB0aGUgdmFyaWFibGUgYXMgaXQgaXMgZGVzY3JpYmVkIGhlcmUgaW4KKyAgICAgICAgICAgIHRoaXMgZ2xvc3NhcnkuCisgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZpbmFsbHksIHRoZXJlIGFyZSB2YXJpYWJsZXMgbWVudGlvbmVkIGluIHRoaXMKKyAgICAgICAgICAgIGdsb3NzYXJ5IHRoYXQgZG8gbm90IGFwcGVhciBpbiB0aGUgQml0QmFrZSBnbG9zc2FyeS4KKyAgICAgICAgICAgIFRoZXNlIG90aGVyIHZhcmlhYmxlcyBhcmUgdmFyaWFibGVzIHVzZWQgaW4gc3lzdGVtcyB0aGF0IHVzZQorICAgICAgICAgICAgQml0QmFrZS4KKyAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorPC9ub3RlPgorCis8Z2xvc3NhcnkgaWQ9J3JlZi12YXJpYWJsZXMtZ2xvc3NhcnknPgorCisgICAgPHBhcmE+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUFTU1VNRV9QUk9WSURFRCc+QTwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQic+QjwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ0FDSEUnPkM8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFRkFVTFRfUFJFRkVSRU5DRSc+RDwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRVhDTFVERV9GUk9NX1dPUkxEJz5FPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GQUtFUk9PVCc+RjwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR0lURElSJz5HPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1IR0RJUic+SDwvbGluaz4KKzwhLS0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlDRUNDX0RJU0FCTEVEJz5JPC9saW5rPiAtLT4KKzwhLS0gICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItZ2xvc3Nhcnktaic+SjwvbGluaz4gLS0+Cis8IS0tICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LQVJDSCc+SzwvbGluaz4gLS0+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxBWUVSREVQRU5EUyc+TDwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUlSUk9SUyc+TTwvbGluaz4KKzwhLS0gICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItZ2xvc3Nhcnktbic+TjwvbGluaz4gLS0+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU9WRVJSSURFUyc+TzwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPlA8L2xpbms+Cis8IS0tICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1RTUFLRV9QUk9GSUxFUyc+UTwvbGluaz4gLS0+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz5SPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TRUNUSU9OJz5TPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UJz5UPC9saW5rPgorPCEtLSAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVUJPT1RfQ09ORklHJz5VPC9saW5rPiAtLT4KKzwhLS0gICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItZ2xvc3Nhcnktdic+VjwvbGluaz4gLS0+Cis8IS0tICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1XQVJOX1FBJz5XPC9saW5rPiAtLT4KKzwhLS0gICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItZ2xvc3NhcnkteCc+WDwvbGluaz4gLS0+Cis8IS0tICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWdsb3NzYXJ5LXknPlk8L2xpbms+IC0tPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS16Jz5aPC9saW5rPi0tPgorICAgIDwvcGFyYT4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWEnPjx0aXRsZT5BPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFTU1VNRV9QUk9WSURFRCc+PGdsb3NzdGVybT5BU1NVTUVfUFJPVklERUQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgcmVjaXBlIG5hbWVzCisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpIEJpdEJha2UgZG9lcyBub3QgYXR0ZW1wdCB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgQml0QmFrZSBhc3N1bWVzIHRoZXNlIHJlY2lwZXMgaGF2ZSBhbHJlYWR5IGJlZW4KKyAgICAgICAgICAgICAgICAgICAgYnVpbHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIE9wZW5FbWJlZGRlZCBDb3JlLCA8ZmlsZW5hbWU+QVNTVU1FX1BST1ZJREVEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbW9zdGx5IHNwZWNpZmllcyBuYXRpdmUgdG9vbHMgdGhhdCBzaG91bGQgbm90IGJlIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBBbiBleGFtcGxlIGlzIDxmaWxlbmFtZT5naXQtbmF0aXZlPC9maWxlbmFtZT4sIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIHdoZW4gc3BlY2lmaWVkIGFsbG93cyBmb3IgdGhlIEdpdCBiaW5hcnkgZnJvbSB0aGUgaG9zdCB0bworICAgICAgICAgICAgICAgICAgICBiZSB1c2VkIHJhdGhlciB0aGFuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQtbmF0aXZlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktYic+PHRpdGxlPkI8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQic+PGdsb3NzdGVybT5CPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggQml0QmFrZSBleGVjdXRlcyBmdW5jdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGEgcmVjaXBlJ3MgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9BTExPV0VEX05FVFdPUktTJz48Z2xvc3N0ZXJtPkJCX0FMTE9XRURfTkVUV09SS1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgc3BhY2UtZGVsaW1pdGVkIGxpc3Qgb2YgaG9zdHMgdGhhdCB0aGUgZmV0Y2hlcgorICAgICAgICAgICAgICAgICAgICBpcyBhbGxvd2VkIHRvIHVzZSB0byBvYnRhaW4gdGhlIHJlcXVpcmVkIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIGNvbnNpZGVyYXRpb25zIHN1cnJvdW5kaW5nIHRoaXMgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBob3N0IGxpc3QgaXMgb25seSB1c2VkIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX05PX05FVFdPUksnPjxmaWxlbmFtZT5CQl9OT19ORVRXT1JLPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZWl0aGVyIG5vdCBzZXQgb3Igc2V0IHRvICIwIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW1pdGVkIHN1cHBvcnQgZm9yIHdpbGRjYXJkIG1hdGNoaW5nIGFnYWluc3QgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5uaW5nIG9mIGhvc3QgbmFtZXMgZXhpc3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNldHRpbmcgbWF0Y2hlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQuZ251Lm9yZzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mdHAuZ251Lm9yZzwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9vLmdpdC5nbnUub3JnPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9BTExPV0VEX05FVFdPUktTID0gIiouZ251Lm9yZyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWlycm9ycyBub3QgaW4gdGhlIGhvc3QgbGlzdCBhcmUgc2tpcHBlZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZWQgaW4gZGVidWcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW1wdHMgdG8gYWNjZXNzIG5ldHdvcmtzIG5vdCBpbiB0aGUgaG9zdCBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F1c2UgYSBmYWlsdXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgPGZpbGVuYW1lPkJCX0FMTE9XRURfTkVUV09SS1M8L2ZpbGVuYW1lPiBpbgorICAgICAgICAgICAgICAgICAgICBjb25qdW5jdGlvbiB3aXRoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyB2ZXJ5IHVzZWZ1bC4KKyAgICAgICAgICAgICAgICAgICAgQWRkaW5nIHRoZSBob3N0IHlvdSB3YW50IHRvIHVzZSB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+IHJlc3VsdHMgaW4gdGhlIHNvdXJjZSBjb2RlCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGZldGNoZWQgZnJvbSBhbiBhbGxvd2VkIGxvY2F0aW9uIGFuZCBhdm9pZHMgcmFpc2luZworICAgICAgICAgICAgICAgICAgICBhbiBlcnJvciB3aGVuIGEgaG9zdCB0aGF0IGlzIG5vdCBhbGxvd2VkIGlzIGluIGEKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBiZWNhdXNlIHRoZSBmZXRjaGVyIGRvZXMgbm90IGF0dGVtcHQgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICBob3N0IGxpc3RlZCBpbiA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGFmdGVyIGEKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bCBmZXRjaCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+IG9jY3Vycy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9DT05TT0xFTE9HJz48Z2xvc3N0ZXJtPkJCX0NPTlNPTEVMT0c8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIGEgbG9nIGZpbGUgaW50byB3aGljaCBCaXRCYWtlJ3MgdXNlcgorICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2Ugd3JpdGVzIG91dHB1dCBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0NVUlJFTlRUQVNLJz48Z2xvc3N0ZXJtPkJCX0NVUlJFTlRUQVNLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrLgorICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBkb2VzIG5vdCBpbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fPC9maWxlbmFtZT4gcHJlZml4LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0RBTkdMSU5HQVBQRU5EU19XQVJOT05MWSc+PGdsb3NzdGVybT5CQl9EQU5HTElOR0FQUEVORFNfV0FSTk9OTFk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyBob3cgQml0QmFrZSBoYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgYW4gYXBwZW5kCisgICAgICAgICAgICAgICAgICAgIGZpbGUgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikgaGFzIG5vCisgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgcmVjaXBlIGZpbGUgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29uZGl0aW9uIG9mdGVuIG9jY3VycyB3aGVuIGxheWVycyBnZXQgb3V0IG9mIHN5bmMKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPm9lLWNvcmU8L2ZpbGVuYW1lPiBidW1wcyBhCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSB2ZXJzaW9uIGFuZCB0aGUgb2xkIHJlY2lwZSBubyBsb25nZXIgZXhpc3RzIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgbGF5ZXIgaGFzIG5vdCBiZWVuIHVwZGF0ZWQgdG8gdGhlIG5ldyB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZWNpcGUgeWV0KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgZmF0YWwgYmVoYXZpb3IgaXMgc2FmZXN0IGJlY2F1c2UgaXQgaXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIHNhbmUgcmVhY3Rpb24gZ2l2ZW4gc29tZXRoaW5nIGlzIG91dCBvZiBzeW5jLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB3aGVuIHlvdXIgY2hhbmdlcyBhcmUgbm8gbG9uZ2VyCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGFwcGxpZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfREVGQVVMVF9UQVNLJz48Z2xvc3N0ZXJtPkJCX0RFRkFVTFRfVEFTSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB0YXNrIHRvIHVzZSB3aGVuIG5vbmUgaXMgc3BlY2lmaWVkIChlLmcuCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIDxmaWxlbmFtZT4tYzwvZmlsZW5hbWU+IGNvbW1hbmQgbGluZSBvcHRpb24pLgorICAgICAgICAgICAgICAgICAgICBUaGUgdGFzayBuYW1lIHNwZWNpZmllZCBzaG91bGQgbm90IGluY2x1ZGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb188L2ZpbGVuYW1lPiBwcmVmaXguCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfRElTS01PTl9ESVJTJz48Z2xvc3N0ZXJtPkJCX0RJU0tNT05fRElSUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBNb25pdG9ycyBkaXNrIHNwYWNlIGFuZCBhdmFpbGFibGUgaW5vZGVzIGR1cmluZyB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgYW5kIGFsbG93cyB5b3UgdG8gY29udHJvbCB0aGUgYnVpbGQgYmFzZWQgb24gdGhlc2UKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGlzayBzcGFjZSBtb25pdG9yaW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0dGluZyB0aGlzIHZhcmlhYmxlLCB1c2UgdGhlIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0RJU0tNT05fRElSUyA9ICImbHQ7YWN0aW9uJmd0OywmbHQ7ZGlyJmd0OywmbHQ7dGhyZXNob2xkJmd0OyBbLi4uXSIKKworICAgICB3aGVyZToKKworICAgICAgICAmbHQ7YWN0aW9uJmd0OyBpczoKKyAgICAgICAgICAgQUJPUlQ6ICAgICBJbW1lZGlhdGVseSBhYm9ydCB0aGUgYnVpbGQgd2hlbgorICAgICAgICAgICAgICAgICAgICAgIGEgdGhyZXNob2xkIGlzIGJyb2tlbi4KKyAgICAgICAgICAgU1RPUFRBU0tTOiBTdG9wIHRoZSBidWlsZCBhZnRlciB0aGUgY3VycmVudGx5CisgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW5nIHRhc2tzIGhhdmUgZmluaXNoZWQgd2hlbgorICAgICAgICAgICAgICAgICAgICAgIGEgdGhyZXNob2xkIGlzIGJyb2tlbi4KKyAgICAgICAgICAgV0FSTjogICAgICBJc3N1ZSBhIHdhcm5pbmcgYnV0IGNvbnRpbnVlIHRoZQorICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHdoZW4gYSB0aHJlc2hvbGQgaXMgYnJva2VuLgorICAgICAgICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgd2FybmluZ3MgYXJlIGlzc3VlZCBhcworICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0RJU0tNT05fV0FSTklOVEVSVkFMJz5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvbGluaz4gdmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggbXVzdCBiZSBkZWZpbmVkLgorCisgICAgICAgICZsdDtkaXImZ3Q7IGlzOgorICAgICAgICAgICBBbnkgZGlyZWN0b3J5IHlvdSBjaG9vc2UuIFlvdSBjYW4gc3BlY2lmeSBvbmUgb3IKKyAgICAgICAgICAgbW9yZSBkaXJlY3RvcmllcyB0byBtb25pdG9yIGJ5IHNlcGFyYXRpbmcgdGhlCisgICAgICAgICAgIGdyb3VwaW5ncyB3aXRoIGEgc3BhY2UuICBJZiB0d28gZGlyZWN0b3JpZXMgYXJlCisgICAgICAgICAgIG9uIHRoZSBzYW1lIGRldmljZSwgb25seSB0aGUgZmlyc3QgZGlyZWN0b3J5CisgICAgICAgICAgIGlzIG1vbml0b3JlZC4KKworICAgICAgICAmbHQ7dGhyZXNob2xkJmd0OyBpczoKKyAgICAgICAgICAgRWl0aGVyIHRoZSBtaW5pbXVtIGF2YWlsYWJsZSBkaXNrIHNwYWNlLAorICAgICAgICAgICB0aGUgbWluaW11bSBudW1iZXIgb2YgZnJlZSBpbm9kZXMsIG9yCisgICAgICAgICAgIGJvdGguICBZb3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZS4gIFRvCisgICAgICAgICAgIG9taXQgb25lIG9yIHRoZSBvdGhlciwgc2ltcGx5IG9taXQgdGhlIHZhbHVlLgorICAgICAgICAgICBTcGVjaWZ5IHRoZSB0aHJlc2hvbGQgdXNpbmcgRywgTSwgSyBmb3IgR2J5dGVzLAorICAgICAgICAgICBNYnl0ZXMsIGFuZCBLYnl0ZXMsIHJlc3BlY3RpdmVseS4gSWYgeW91IGRvCisgICAgICAgICAgIG5vdCBzcGVjaWZ5IEcsIE0sIG9yIEssIEtieXRlcyBpcyBhc3N1bWVkIGJ5CisgICAgICAgICAgIGRlZmF1bHQuICBEbyBub3QgdXNlIEdCLCBNQiwgb3IgS0IuCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9ESVNLTU9OX0RJUlMgPSAiQUJPUlQsJHtUTVBESVJ9LDFHLDEwMEsgV0FSTiwke1NTVEFURV9ESVJ9LDFHLDEwMEsiCisgICAgIEJCX0RJU0tNT05fRElSUyA9ICJTVE9QVEFTS1MsJHtUTVBESVJ9LDFHIgorICAgICBCQl9ESVNLTU9OX0RJUlMgPSAiQUJPUlQsJHtUTVBESVJ9LCwxMDBLIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBleGFtcGxlIHdvcmtzIG9ubHkgaWYgeW91IGFsc28gc2V0CisgICAgICAgICAgICAgICAgICAgIHRoZSA8bGluayBsaW5rZW5kPSd2YXItQkJfRElTS01PTl9XQVJOSU5URVJWQUwnPjxmaWxlbmFtZT5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGNhdXNlcyB0aGUgYnVpbGQgc3lzdGVtIHRvIGltbWVkaWF0ZWx5CisgICAgICAgICAgICAgICAgICAgIGFib3J0IHdoZW4gZWl0aGVyIHRoZSBkaXNrIHNwYWNlIGluIDxmaWxlbmFtZT4ke1RNUERJUn08L2ZpbGVuYW1lPiBkcm9wcworICAgICAgICAgICAgICAgICAgICBiZWxvdyAxIEdieXRlIG9yIHRoZSBhdmFpbGFibGUgZnJlZSBpbm9kZXMgZHJvcHMgYmVsb3cKKyAgICAgICAgICAgICAgICAgICAgMTAwIEtieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSB0d28gZGlyZWN0b3JpZXMgYXJlIHByb3ZpZGVkIHdpdGggdGhlIHZhcmlhYmxlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGFsc28gaXNzdWVzIGEKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZyB3aGVuIHRoZSBkaXNrIHNwYWNlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtTU1RBVEVfRElSfTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBkcm9wcworICAgICAgICAgICAgICAgICAgICBiZWxvdyAxIEdieXRlIG9yIHRoZSBudW1iZXIgb2YgZnJlZSBpbm9kZXMgZHJvcHMKKyAgICAgICAgICAgICAgICAgICAgYmVsb3cgMTAwIEtieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgU3Vic2VxdWVudCB3YXJuaW5ncyBhcmUgaXNzdWVkIGR1cmluZyBpbnRlcnZhbHMgYXMKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBieSB0aGUgPGZpbGVuYW1lPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWNvbmQgZXhhbXBsZSBzdG9wcyB0aGUgYnVpbGQgYWZ0ZXIgYWxsIGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICBleGVjdXRpbmcgdGFza3MgY29tcGxldGUgd2hlbiB0aGUgbWluaW11bSBkaXNrIHNwYWNlCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+JHtUTVBESVJ9PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGRyb3BzIGJlbG93IDEgR2J5dGUuCisgICAgICAgICAgICAgICAgICAgIE5vIGRpc2sgbW9uaXRvcmluZyBvY2N1cnMgZm9yIHRoZSBmcmVlIGlub2RlcyBpbiB0aGlzIGNhc2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBleGFtcGxlIGltbWVkaWF0ZWx5IGFib3J0cyB0aGUgYnVpbGQgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGZyZWUgaW5vZGVzIGluIHRoZSA8ZmlsZW5hbWU+JHtUTVBESVJ9PC9maWxlbmFtZT4gZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIGRyb3BzIGJlbG93IDEwMCBLYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgIE5vIGRpc2sgc3BhY2UgbW9uaXRvcmluZyBmb3IgdGhlIGRpcmVjdG9yeSBpdHNlbGYgb2NjdXJzCisgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTCc+PGdsb3NzdGVybT5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBkaXNrIHNwYWNlIGFuZCBmcmVlIGlub2RlIHdhcm5pbmcgaW50ZXJ2YWxzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9maWxlbmFtZT4gdmFyaWFibGUsIHlvdSBtdXN0CisgICAgICAgICAgICAgICAgICAgIGFsc28gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfRElTS01PTl9ESVJTJz48ZmlsZW5hbWU+QkJfRElTS01PTl9ESVJTPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGFuZCBkZWZpbmUgaXRzIGFjdGlvbiBhcyAiV0FSTiIuCisgICAgICAgICAgICAgICAgICAgIER1cmluZyB0aGUgYnVpbGQsIHN1YnNlcXVlbnQgd2FybmluZ3MgYXJlIGlzc3VlZCBlYWNoIHRpbWUKKyAgICAgICAgICAgICAgICAgICAgZGlzayBzcGFjZSBvciBudW1iZXIgb2YgZnJlZSBpbm9kZXMgZnVydGhlciByZWR1Y2VzIGJ5CisgICAgICAgICAgICAgICAgICAgIHRoZSByZXNwZWN0aXZlIGludGVydmFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHByb3ZpZGUgYSA8ZmlsZW5hbWU+QkJfRElTS01PTl9XQVJOSU5URVJWQUw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgeW91IGRvIHVzZSA8ZmlsZW5hbWU+QkJfRElTS01PTl9ESVJTPC9maWxlbmFtZT4gd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgIldBUk4iIGFjdGlvbiwgdGhlIGRpc2sgbW9uaXRvcmluZyBpbnRlcnZhbCBkZWZhdWx0cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMID0gIjUwTSw1SyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNwZWNpZnlpbmcgdGhlIHZhcmlhYmxlIGluIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlLAorICAgICAgICAgICAgICAgICAgICB1c2UgdGhlIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMID0gIiZsdDtkaXNrX3NwYWNlX2ludGVydmFsJmd0OywmbHQ7ZGlza19pbm9kZV9pbnRlcnZhbCZndDsiCisKKyAgICAgd2hlcmU6CisKKyAgICAgICAgJmx0O2Rpc2tfc3BhY2VfaW50ZXJ2YWwmZ3Q7IGlzOgorICAgICAgICAgICBBbiBpbnRlcnZhbCBvZiBtZW1vcnkgZXhwcmVzc2VkIGluIGVpdGhlcgorICAgICAgICAgICBHLCBNLCBvciBLIGZvciBHYnl0ZXMsIE1ieXRlcywgb3IgS2J5dGVzLAorICAgICAgICAgICByZXNwZWN0aXZlbHkuIFlvdSBjYW5ub3QgdXNlIEdCLCBNQiwgb3IgS0IuCisKKyAgICAgICAgJmx0O2Rpc2tfaW5vZGVfaW50ZXJ2YWwmZ3Q7IGlzOgorICAgICAgICAgICBBbiBpbnRlcnZhbCBvZiBmcmVlIGlub2RlcyBleHByZXNzZWQgaW4gZWl0aGVyCisgICAgICAgICAgIEcsIE0sIG9yIEsgZm9yIEdieXRlcywgTWJ5dGVzLCBvciBLYnl0ZXMsCisgICAgICAgICAgIHJlc3BlY3RpdmVseS4gWW91IGNhbm5vdCB1c2UgR0IsIE1CLCBvciBLQi4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9ESVJTID0gIldBUk4sJHtTU1RBVEVfRElSfSwxRywxMDBLIgorICAgICBCQl9ESVNLTU9OX1dBUk5JTlRFUlZBTCA9ICI1ME0sNUsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgdmFyaWFibGVzIGNhdXNlIEJpdEJha2UgdG8KKyAgICAgICAgICAgICAgICAgICAgaXNzdWUgc3Vic2VxdWVudCB3YXJuaW5ncyBlYWNoIHRpbWUgdGhlIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAgICBkaXNrIHNwYWNlIGZ1cnRoZXIgcmVkdWNlcyBieSA1MCBNYnl0ZXMgb3IgdGhlIG51bWJlcgorICAgICAgICAgICAgICAgICAgICBvZiBmcmVlIGlub2RlcyBmdXJ0aGVyIHJlZHVjZXMgYnkgNSBLYnl0ZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1NTVEFURV9ESVJ9PC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBTdWJzZXF1ZW50IHdhcm5pbmdzIGJhc2VkIG9uIHRoZSBpbnRlcnZhbCBvY2N1ciBlYWNoIHRpbWUKKyAgICAgICAgICAgICAgICAgICAgYSByZXNwZWN0aXZlIGludGVydmFsIGlzIHJlYWNoZWQgYmV5b25kIHRoZSBpbml0aWFsIHdhcm5pbmcKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gMSBHYnl0ZXMgYW5kIDEwMCBLYnl0ZXMpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0VOVl9XSElURUxJU1QnPjxnbG9zc3Rlcm0+QkJfRU5WX1dISVRFTElTVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGludGVybmFsIHdoaXRlbGlzdCBvZiB2YXJpYWJsZXMgdG8gYWxsb3cKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCBmcm9tIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudCBpbnRvIEJpdEJha2UncworICAgICAgICAgICAgICAgICAgICBkYXRhc3RvcmUuCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgdGhlIGZvbGxvd2luZyBsaXN0IGlzIHVzZWQ6CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9QUkVTRVJWRV9FTlYnPjxmaWxlbmFtZT5CQl9QUkVTRVJWRV9FTlY8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9FTlZfV0hJVEVMSVNUJz48ZmlsZW5hbWU+QkJfRU5WX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9FTlZfRVhUUkFXSElURSc+PGZpbGVuYW1lPkJCX0VOVl9FWFRSQVdISVRFPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgZm9yIGl0IHRvIHdvcmsuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9FTlZfRVhUUkFXSElURSc+PGdsb3NzdGVybT5CQl9FTlZfRVhUUkFXSElURTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYW4gYWRkaXRpb25hbCBzZXQgb2YgdmFyaWFibGVzIHRvIGFsbG93IHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgKHdoaXRlbGlzdCkgZnJvbSB0aGUgZXh0ZXJuYWwgZW52aXJvbm1lbnQgaW50byBCaXRCYWtlJ3MKKyAgICAgICAgICAgICAgICAgICAgZGF0YXN0b3JlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGxpc3Qgb2YgdmFyaWFibGVzIGFyZSBvbiB0b3Agb2YgdGhlIGludGVybmFsIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgc2V0IGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9FTlZfV0hJVEVMSVNUJz48ZmlsZW5hbWU+QkJfRU5WX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzZXQgdGhpcyB2YXJpYWJsZSBpbiB0aGUgZXh0ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGluIG9yZGVyIGZvciBpdCB0byB3b3JrLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfRkVUQ0hfUFJFTUlSUk9ST05MWSc+PGdsb3NzdGVybT5CQl9GRVRDSF9QUkVNSVJST1JPTkxZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0IHRvICIxIiwgY2F1c2VzIEJpdEJha2UncyBmZXRjaGVyIG1vZHVsZSB0byBvbmx5CisgICAgICAgICAgICAgICAgICAgIHNlYXJjaAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJFTUlSUk9SUyc+PGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHdpbGwgbm90IHNlYXJjaCB0aGUgbWFpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1JUlJPUlMnPjxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0ZJTEVOQU1FJz48Z2xvc3N0ZXJtPkJCX0ZJTEVOQU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnRhaW5zIHRoZSBmaWxlbmFtZSBvZiB0aGUgcmVjaXBlIHRoYXQgb3ducyB0aGUgY3VycmVudGx5CisgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSA8ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPiB0YXNrIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgcmVzaWRlcyBpbiB0aGUgPGZpbGVuYW1lPm15LXJlY2lwZS5iYjwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGluZywgdGhlIDxmaWxlbmFtZT5CQl9GSUxFTkFNRTwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zICIvZm9vL3BhdGgvbXktcmVjaXBlLmJiIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMnPjxnbG9zc3Rlcm0+QkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENhdXNlcyB0YXJiYWxscyBvZiB0aGUgR2l0IHJlcG9zaXRvcmllcywgaW5jbHVkaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBHaXQgbWV0YWRhdGEsIHRvIGJlIHBsYWNlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIEFueW9uZSB3aXNoaW5nIHRvIGNyZWF0ZSBhIHNvdXJjZSBtaXJyb3Igd291bGQgd2FudCB0bworICAgICAgICAgICAgICAgICAgICBlbmFibGUgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGNyZWF0aW5nIGFuZCBwbGFjaW5nIHRhcmJhbGxzIG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBHaXQgcmVwb3NpdG9yaWVzIGlzIG5vdCB0aGUgZGVmYXVsdCBhY3Rpb24gYnkgQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMgPSAiMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0hBU0hDT05GSUdfV0hJVEVMSVNUJz48Z2xvc3N0ZXJtPkJCX0hBU0hDT05GSUdfV0hJVEVMSVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHZhcmlhYmxlcyB0aGF0IGFyZSBleGNsdWRlZCBmcm9tIGJhc2UgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBjaGVja3N1bSwgd2hpY2ggaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGNhY2hlIGNhbgorICAgICAgICAgICAgICAgICAgICBiZSByZXVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIE9uZSBvZiB0aGUgd2F5cyBCaXRCYWtlIGRldGVybWluZXMgd2hldGhlciB0byByZS1wYXJzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgbWFpbiBtZXRhZGF0YSBpcyB0aHJvdWdoIGNoZWNrc3VtcyBvZiB0aGUgdmFyaWFibGVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBkYXRhc3RvcmUgb2YgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBkYXRhLgorICAgICAgICAgICAgICAgICAgICBUaGVyZSBhcmUgdmFyaWFibGVzIHRoYXQgeW91IHR5cGljYWxseSB3YW50IHRvIGV4Y2x1ZGUgd2hlbgorICAgICAgICAgICAgICAgICAgICBjaGVja2luZyB3aGV0aGVyIG9yIG5vdCB0byByZS1wYXJzZSBhbmQgdGh1cyByZWJ1aWxkIHRoZQorICAgICAgICAgICAgICAgICAgICBjYWNoZS4KKyAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgeW91IHdvdWxkIHVzdWFsbHkgZXhjbHVkZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VElNRTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+REFURTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgdGhlc2UgdmFyaWFibGVzIGFyZSBhbHdheXMgY2hhbmdpbmcuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkaWQgbm90IGV4Y2x1ZGUgdGhlbSwgQml0QmFrZSB3b3VsZCBuZXZlciByZXVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgY2FjaGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfSEFTSEJBU0VfV0hJVEVMSVNUJz48Z2xvc3N0ZXJtPkJCX0hBU0hCQVNFX1dISVRFTElTVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyB2YXJpYWJsZXMgdGhhdCBhcmUgZXhjbHVkZWQgZnJvbSBjaGVja3N1bSBhbmQKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBkYXRhLgorICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZXMgdGhhdCBhcmUgZXhjbHVkZWQgY2FuIHRoZXJlZm9yZSBjaGFuZ2Ugd2l0aG91dAorICAgICAgICAgICAgICAgICAgICBhZmZlY3RpbmcgdGhlIGNoZWNrc3VtIG1lY2hhbmlzbS4KKyAgICAgICAgICAgICAgICAgICAgQSBjb21tb24gZXhhbXBsZSB3b3VsZCBiZSB0aGUgdmFyaWFibGUgZm9yIHRoZSBwYXRoIG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSdzIG91dHB1dCBzaG91bGQgbm90IChhbmQgdXN1YWxseSBkb2VzIG5vdCkgZGVwZW5kCisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgd2FzIGJ1aWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0hBU0hDSEVDS19GVU5DVElPTic+PGdsb3NzdGVybT5CQl9IQVNIQ0hFQ0tfRlVOQ1RJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBjYWxsIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgInNldHNjZW5lIiBwYXJ0IG9mIHRoZSB0YXNrJ3MgZXhlY3V0aW9uIGluIG9yZGVyIHRvCisgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlIHRoZSBsaXN0IG9mIHRhc2sgaGFzaGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGlzdCBvZiBzZXRzY2VuZSB0YXNrcyB0aGF0IHNob3VsZAorICAgICAgICAgICAgICAgICAgICBiZSBleGVjdXRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXQgdGhpcyBwb2ludCBpbiB0aGUgZXhlY3V0aW9uIG9mIHRoZSBjb2RlLCB0aGUgb2JqZWN0aXZlCisgICAgICAgICAgICAgICAgICAgIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIGEgZ2l2ZW4gc2V0c2NlbmUgZnVuY3Rpb24gaXMgbGlrZWx5CisgICAgICAgICAgICAgICAgICAgIHRvIHdvcmsgb3Igbm90LgorICAgICAgICAgICAgICAgICAgICBJdCdzIGVhc2llciB0byBjaGVjayB0aGUgbGlzdCBvZiBzZXRzY2VuZSBmdW5jdGlvbnMgaW4KKyAgICAgICAgICAgICAgICAgICAgb25lIHBhc3MgdGhhbiB0byBjYWxsIG1hbnkgaW5kaXZpZHVhbCB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJldHVybmVkIGxpc3QgbmVlZCBub3QgYmUgY29tcGxldGVseSBhY2N1cmF0ZS4KKyAgICAgICAgICAgICAgICAgICAgQSBnaXZlbiBzZXRzY2VuZSB0YXNrIGNhbiBzdGlsbCBsYXRlciBmYWlsLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgbW9yZSBhY2N1cmF0ZSB0aGUgZGF0YSByZXR1cm5lZCwgdGhlIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgZWZmaWNpZW50IHRoZSBidWlsZCB3aWxsIGJlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0lOVkFMSURDT05GJz48Z2xvc3N0ZXJtPkJCX0lOVkFMSURDT05GPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNvbmZpZ1BhcnNlZDwvZmlsZW5hbWU+IGV2ZW50IHRvIHRyaWdnZXIKKyAgICAgICAgICAgICAgICAgICAgcmUtcGFyc2luZyB0aGUgYmFzZSBtZXRhZGF0YSAoaS5lLiBhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMpLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkNvbmZpZ1BhcnNlZDwvZmlsZW5hbWU+IGV2ZW50IGNhbiBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIHRyaWdnZXIgdGhlIHJlLXBhcnNlLgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBiZSBjYXJlZnVsIHRvIGF2b2lkIHJlY3Vyc2l2ZSBsb29wcyB3aXRoIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9MT0dGTVQnPjxnbG9zc3Rlcm0+QkJfTE9HRk1UPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgbG9nIGZpbGVzIHNhdmVkIGludG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVCc+PGZpbGVuYW1lPlQ8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPkJCX0xPR0ZNVDwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGlzIHVuZGVmaW5lZCBhbmQgdGhlIGxvZyBmaWxlIG5hbWVzIGdldCBjcmVhdGVkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBsb2cue3Rhc2t9LntwaWR9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gZm9yY2UgbG9nIGZpbGVzIHRvIHRha2UgYSBzcGVjaWZpYyBuYW1lLAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIGluIGEgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX05JQ0VfTEVWRUwnPjxnbG9zc3Rlcm0+QkJfTklDRV9MRVZFTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbGxvd3MgQml0QmFrZSB0byBydW4gYXQgYSBzcGVjaWZpYyBwcmlvcml0eQorICAgICAgICAgICAgICAgICAgICAoaS5lLiBuaWNlIGxldmVsKS4KKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtIHBlcm1pc3Npb25zIHVzdWFsbHkgbWVhbiB0aGF0IEJpdEJha2UgY2FuIHJlZHVjZSBpdHMKKyAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHkgYnV0IG5vdCByYWlzZSBpdCBhZ2Fpbi4KKyAgICAgICAgICAgICAgICAgICAgU2VlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9UQVNLX05JQ0VfTEVWRUwnPjxmaWxlbmFtZT5CQl9UQVNLX05JQ0VfTEVWRUw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfTk9fTkVUV09SSyc+PGdsb3NzdGVybT5CQl9OT19ORVRXT1JLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERpc2FibGVzIG5ldHdvcmsgYWNjZXNzIGluIHRoZSBCaXRCYWtlIGZldGNoZXIgbW9kdWxlcy4KKyAgICAgICAgICAgICAgICAgICAgV2l0aCB0aGlzIGFjY2VzcyBkaXNhYmxlZCwgYW55IGNvbW1hbmQgdGhhdCBhdHRlbXB0cyB0bworICAgICAgICAgICAgICAgICAgICBhY2Nlc3MgdGhlIG5ldHdvcmsgYmVjb21lcyBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGlzYWJsaW5nIG5ldHdvcmsgYWNjZXNzIGlzIHVzZWZ1bCBmb3IgdGVzdGluZyBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgbWlycm9ycywgcnVubmluZyBidWlsZHMgd2hlbiBub3QgY29ubmVjdGVkIHRvIHRoZSBJbnRlcm5ldCwKKyAgICAgICAgICAgICAgICAgICAgYW5kIHdoZW4gb3BlcmF0aW5nIGluIGNlcnRhaW4ga2luZHMgb2YgZmlyZXdhbGwKKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX05VTUJFUl9USFJFQURTJz48Z2xvc3N0ZXJtPkJCX05VTUJFUl9USFJFQURTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0YXNrcyBCaXRCYWtlIHNob3VsZCBydW4gaW4gcGFyYWxsZWwKKyAgICAgICAgICAgICAgICAgICAgYXQgYW55IG9uZSB0aW1lLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtIHN1cHBvcnRzIG11bHRpcGxlIGNvcmVzLAorICAgICAgICAgICAgICAgICAgICBhIGdvb2QgcnVsZSBvZiB0aHVtYiBpcyB0byBzZXQgdGhpcyB2YXJpYWJsZSB0byB0d2ljZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGNvcmVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX05VTUJFUl9QQVJTRV9USFJFQURTJz48Z2xvc3N0ZXJtPkJCX05VTUJFUl9QQVJTRV9USFJFQURTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldHMgdGhlIG51bWJlciBvZiB0aHJlYWRzIEJpdEJha2UgdXNlcyB3aGVuIHBhcnNpbmcuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBudW1iZXIgb2YgdGhyZWFkcyBpcyBlcXVhbCB0byB0aGUgbnVtYmVyCisgICAgICAgICAgICAgICAgICAgIG9mIGNvcmVzIG9uIHRoZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfT1JJR0VOVic+PGdsb3NzdGVybT5CQl9PUklHRU5WPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnRhaW5zIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgZXh0ZXJuYWwgZW52aXJvbm1lbnQgaW4KKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggQml0QmFrZSB3YXMgcnVuLgorICAgICAgICAgICAgICAgICAgICBUaGUgY29weSBpcyB0YWtlbiBiZWZvcmUgYW55IHdoaXRlbGlzdGVkIHZhcmlhYmxlIHZhbHVlcworICAgICAgICAgICAgICAgICAgICBhcmUgZmlsdGVyZWQgaW50byBCaXRCYWtlJ3MgZGF0YXN0b3JlLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb250ZW50cyBvZiB0aGlzIHZhcmlhYmxlIGlzIGEgZGF0YXN0b3JlIG9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBjYW4gYmUgcXVlcmllZCB1c2luZyB0aGUgbm9ybWFsIGRhdGFzdG9yZQorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1BSRVNFUlZFX0VOVic+PGdsb3NzdGVybT5CQl9QUkVTRVJWRV9FTlY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGlzYWJsZXMgd2hpdGVsaXN0aW5nIGFuZCBpbnN0ZWFkIGFsbG93cyBhbGwgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggZnJvbSB0aGUgZXh0ZXJuYWwgZW52aXJvbm1lbnQgaW50byBCaXRCYWtlJ3MKKyAgICAgICAgICAgICAgICAgICAgZGF0YXN0b3JlLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZSBleHRlcm5hbAorICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgaW4gb3JkZXIgZm9yIGl0IHRvIHdvcmsuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9SVU5GTVQnPjxnbG9zc3Rlcm0+QkJfUlVORk1UPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgZXhlY3V0YWJsZSBzY3JpcHQgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gcnVuIGZpbGVzKSBzYXZlZCBpbnRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVQnPjxmaWxlbmFtZT5UPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5CQl9SVU5GTVQ8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpcyB1bmRlZmluZWQgYW5kIHRoZSBydW4gZmlsZSBuYW1lcyBnZXQgY3JlYXRlZCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcnVuLnt0YXNrfS57cGlkfQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGZvcmNlIHJ1biBmaWxlcyB0byB0YWtlIGEgc3BlY2lmaWMgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBzZXQgdGhpcyB2YXJpYWJsZSBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9SVU5UQVNLJz48Z2xvc3N0ZXJtPkJCX1JVTlRBU0s8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGRvZXMgbm90IGluY2x1ZGUgdGhlICJkb18iIHByZWZpeC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIHRhc2sgaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZzwvZmlsZW5hbWU+LCB0aGUgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgImNvbmZpZyIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfU0NIRURVTEVSJz48Z2xvc3N0ZXJtPkJCX1NDSEVEVUxFUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWxlY3RzIHRoZSBuYW1lIG9mIHRoZSBzY2hlZHVsZXIgdG8gdXNlIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGluZyBvZiBCaXRCYWtlIHRhc2tzLgorICAgICAgICAgICAgICAgICAgICBUaHJlZSBvcHRpb25zIGV4aXN0OgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5iYXNpYzwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYmFzaWMgZnJhbWV3b3JrIGZyb20gd2hpY2ggZXZlcnl0aGluZyBkZXJpdmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoaXMgb3B0aW9uIGNhdXNlcyB0YXNrcyB0byBiZSBvcmRlcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY2FsbHkgYXMgdGhleSBhcmUgcGFyc2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zcGVlZDwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGVjdXRlcyB0YXNrcyBmaXJzdCB0aGF0IGhhdmUgbW9yZSB0YXNrcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiB0aGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSAic3BlZWQiIG9wdGlvbiBpcyB0aGUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Y29tcGxldGlvbjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXVzZXMgdGhlIHNjaGVkdWxlciB0byB0cnkgdG8gY29tcGxldGUgYSBnaXZlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBvbmNlIGl0cyBidWlsZCBoYXMgc3RhcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfU0NIRURVTEVSUyc+PGdsb3NzdGVybT5CQl9TQ0hFRFVMRVJTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgY3VzdG9tIHNjaGVkdWxlcnMgdG8gaW1wb3J0LgorICAgICAgICAgICAgICAgICAgICBDdXN0b20gc2NoZWR1bGVycyBuZWVkIHRvIGJlIGRlcml2ZWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJ1blF1ZXVlU2NoZWR1bGVyPC9maWxlbmFtZT4gY2xhc3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBob3cgdG8gc2VsZWN0IGEgc2NoZWR1bGVyLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9TQ0hFRFVMRVInPjxmaWxlbmFtZT5CQl9TQ0hFRFVMRVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfU0VUU0NFTkVfREVQVkFMSUQnPjxnbG9zc3Rlcm0+QkJfU0VUU0NFTkVfREVQVkFMSUQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgZnVuY3Rpb24gQml0QmFrZSBjYWxscyB0aGF0IGRldGVybWluZXMKKyAgICAgICAgICAgICAgICAgICAgd2hldGhlciBCaXRCYWtlIHJlcXVpcmVzIGEgc2V0c2NlbmUgZGVwZW5kZW5jeSB0byBiZSBtZXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gcnVubmluZyBhIHNldHNjZW5lIHRhc2ssIEJpdEJha2UgbmVlZHMgdG8KKyAgICAgICAgICAgICAgICAgICAga25vdyB3aGljaCBkZXBlbmRlbmNpZXMgb2YgdGhhdCBzZXRzY2VuZSB0YXNrIGFsc28gbmVlZAorICAgICAgICAgICAgICAgICAgICB0byBiZSBydW4uCisgICAgICAgICAgICAgICAgICAgIFdoZXRoZXIgZGVwZW5kZW5jaWVzIGFsc28gbmVlZCB0byBiZSBydW4gaXMgaGlnaGx5CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVudCBvbiB0aGUgbWV0YWRhdGEuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiBzcGVjaWZpZWQgYnkgdGhpcyB2YXJpYWJsZSByZXR1cm5zIGEKKyAgICAgICAgICAgICAgICAgICAgIlRydWUiIG9yICJGYWxzZSIgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGRlcGVuZGVuY3kgbmVlZHMKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgbWV0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTic+PGdsb3NzdGVybT5CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgZnVuY3Rpb24gdG8gY2FsbCB0aGF0IHZlcmlmaWVzIHRoZSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIHBsYW5uZWQgdGFzayBleGVjdXRpb24gYmVmb3JlIHRoZSBtYWluIHRhc2sgZXhlY3V0aW9uCisgICAgICAgICAgICAgICAgICAgIGhhcHBlbnMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBCaXRCYWtlIGhhcyBhIGxpc3Qgb2Ygc2V0c2NlbmUKKyAgICAgICAgICAgICAgICAgICAgdGFza3MgdGhhdCBoYXZlIHJ1biBhbmQgZWl0aGVyIHN1Y2NlZWRlZCBvciBmYWlsZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiBhbGxvd3MgZm9yIGEgdGFzayBsaXN0IGNoZWNrIHRvIHNlZSBpZiB0aGV5CisgICAgICAgICAgICAgICAgICAgIG1ha2Ugc2Vuc2UuCisgICAgICAgICAgICAgICAgICAgIEV2ZW4gaWYgQml0QmFrZSB3YXMgcGxhbm5pbmcgdG8gc2tpcCBhIHRhc2ssIHRoZQorICAgICAgICAgICAgICAgICAgICByZXR1cm5lZCB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gY2FuIGZvcmNlIEJpdEJha2UgdG8gcnVuCisgICAgICAgICAgICAgICAgICAgIHRoZSB0YXNrLCB3aGljaCBpcyBuZWNlc3NhcnkgdW5kZXIgY2VydGFpbiBtZXRhZGF0YQorICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGNpcmN1bXN0YW5jZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfU0lHTkFUVVJFX0VYQ0xVREVfRkxBR1MnPjxnbG9zc3Rlcm0+QkJfU0lHTkFUVVJFX0VYQ0xVREVfRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgdmFyaWFibGUgZmxhZ3MgKHZhcmZsYWdzKQorICAgICAgICAgICAgICAgICAgICB0aGF0IGNhbiBiZSBzYWZlbHkgZXhjbHVkZWQgZnJvbSBjaGVja3N1bQorICAgICAgICAgICAgICAgICAgICBhbmQgZGVwZW5kZW5jeSBkYXRhIGZvciBrZXlzIGluIHRoZSBkYXRhc3RvcmUuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gZ2VuZXJhdGluZyBjaGVja3N1bSBvciBkZXBlbmRlbmN5IGRhdGEgZm9yIGtleXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGRhdGFzdG9yZSwgdGhlIGZsYWdzIHNldCBhZ2FpbnN0IHRoYXQga2V5IGFyZSBub3JtYWxseQorICAgICAgICAgICAgICAgICAgICBpbmNsdWRlZCBpbiB0aGUgY2hlY2tzdW0uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHZhcmZsYWdzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd2YXJpYWJsZS1mbGFncyc+VmFyaWFibGUgRmxhZ3M8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1NJR05BVFVSRV9IQU5ETEVSJz48Z2xvc3N0ZXJtPkJCX1NJR05BVFVSRV9IQU5ETEVSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHNpZ25hdHVyZSBoYW5kbGVyIEJpdEJha2UgdXNlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNpZ25hdHVyZSBoYW5kbGVyIGRlZmluZXMgdGhlIHdheSBzdGFtcCBmaWxlcyBhcmUKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCBhbmQgaGFuZGxlZCwgaWYgYW5kIGhvdyB0aGUgc2lnbmF0dXJlIGlzCisgICAgICAgICAgICAgICAgICAgIGluY29ycG9yYXRlZCBpbnRvIHRoZSBzdGFtcHMsIGFuZCBob3cgdGhlIHNpZ25hdHVyZQorICAgICAgICAgICAgICAgICAgICBpdHNlbGYgaXMgZ2VuZXJhdGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIG5ldyBzaWduYXR1cmUgaGFuZGxlciBjYW4gYmUgYWRkZWQgYnkgaW5qZWN0aW5nIGEgY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgZGVyaXZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U2lnbmF0dXJlR2VuZXJhdG9yPC9maWxlbmFtZT4gY2xhc3MgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsIG5hbWVzcGFjZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TUkNSRVZfUE9MSUNZJz48Z2xvc3N0ZXJtPkJCX1NSQ1JFVl9QT0xJQ1k8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGZldGNoZXIgd2hlbiBpdCBpbnRlcmFjdHMgd2l0aAorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgY29udHJvbCBzeXN0ZW1zIGFuZCBkeW5hbWljIHNvdXJjZSByZXZpc2lvbnMuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+QkJfU1JDUkVWX1BPTElDWTwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzCisgICAgICAgICAgICAgICAgICAgIHVzZWZ1bCB3aGVuIHdvcmtpbmcgd2l0aG91dCBhIG5ldHdvcmsuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBjYW4gYmUgc2V0IHVzaW5nIG9uZSBvZiB0d28gcG9saWNpZXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmNhY2hlPC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldGFpbnMgdGhlIHZhbHVlIHRoZSBzeXN0ZW0gb2J0YWluZWQgcHJldmlvdXNseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIHF1ZXJ5aW5nIHRoZSBzb3VyY2UgY29udHJvbCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoIHRpbWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmNsZWFyPC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXJpZXMgdGhlIHNvdXJjZSBjb250cm9scyBzeXN0ZW0gZXZlcnkgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaXRoIHRoaXMgcG9saWN5LCB0aGVyZSBpcyBubyBjYWNoZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgImNsZWFyIiBwb2xpY3kgaXMgdGhlIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1NUQU1QX1BPTElDWSc+PGdsb3NzdGVybT5CQl9TVEFNUF9QT0xJQ1k8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgbW9kZSB1c2VkIGZvciBob3cgdGltZXN0YW1wcyBvZiBzdGFtcCBmaWxlcworICAgICAgICAgICAgICAgICAgICBhcmUgY29tcGFyZWQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoZSB2YXJpYWJsZSB0byBvbmUgb2YgdGhlIGZvbGxvd2luZyBtb2RlczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cGVyZmlsZTwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lc3RhbXAgY29tcGFyaXNvbnMgYXJlIG9ubHkgbWFkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJldHdlZW4gdGltZXN0YW1wcyBvZiBhIHNwZWNpZmljIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBkZWZhdWx0IG1vZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmZ1bGw8L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZXN0YW1wIGNvbXBhcmlzb25zIGFyZSBtYWRlIGZvciBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPndoaXRlbGlzdDwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZGVudGljYWwgdG8gImZ1bGwiIG1vZGUgZXhjZXB0IHRpbWVzdGFtcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmlzb25zIGFyZSBtYWRlIGZvciByZWNpcGVzIGxpc3RlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfU1RBTVBfV0hJVEVMSVNUJz48ZmlsZW5hbWU+QkJfU1RBTVBfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YW1wIHBvbGljaWVzIGFyZSBsYXJnZWx5IG9ic29sZXRlIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRyb2R1Y3Rpb24gb2Ygc2V0c2NlbmUgdGFza3MuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TVEFNUF9XSElURUxJU1QnPjxnbG9zc3Rlcm0+QkJfU1RBTVBfV0hJVEVMSVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIGZpbGVzIHdob3NlIHN0YW1wIGZpbGUgdGltZXN0YW1wcyBhcmUgY29tcGFyZWQgd2hlbgorICAgICAgICAgICAgICAgICAgICB0aGUgc3RhbXAgcG9saWN5IG1vZGUgaXMgc2V0IHRvICJ3aGl0ZWxpc3QiLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gc3RhbXAgcG9saWNpZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX1NUQU1QX1BPTElDWSc+PGZpbGVuYW1lPkJCX1NUQU1QX1BPTElDWTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TVFJJQ1RfQ0hFQ0tTVU0nPjxnbG9zc3Rlcm0+QkJfU1RSSUNUX0NIRUNLU1VNPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldHMgYSBtb3JlIHN0cmljdCBjaGVja3N1bSBtZWNoYW5pc20gZm9yIG5vbi1sb2NhbCBVUkxzLgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gYSB2YWx1ZSBjYXVzZXMgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICB0byByZXBvcnQgYW4gZXJyb3IgaWYgaXQgZW5jb3VudGVycyBhIG5vbi1sb2NhbCBVUkwKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBkb2VzIG5vdCBoYXZlIGF0IGxlYXN0IG9uZSBjaGVja3N1bSBzcGVjaWZpZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfVEFTS19OSUNFX0xFVkVMJz48Z2xvc3N0ZXJtPkJCX1RBU0tfTklDRV9MRVZFTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbGxvd3Mgc3BlY2lmaWMgdGFza3MgdG8gY2hhbmdlIHRoZWlyIHByaW9yaXR5CisgICAgICAgICAgICAgICAgICAgIChpLmUuIG5pY2UgbGV2ZWwpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIGluIGNvbWJpbmF0aW9uIHdpdGggdGFzaworICAgICAgICAgICAgICAgICAgICBvdmVycmlkZXMgdG8gcmFpc2Ugb3IgbG93ZXIgcHJpb3JpdGllcyBvZiBzcGVjaWZpYyB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcnPllvY3RvIFByb2plY3Q8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhdXRvYnVpbGRlciwgUUVNVSBlbXVsYXRpb24gaW4gaW1hZ2VzIGlzIGdpdmVuIGEgaGlnaGVyCisgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5IGFzIGNvbXBhcmVkIHRvIGJ1aWxkIHRhc2tzIHRvIGVuc3VyZSB0aGF0IGltYWdlcworICAgICAgICAgICAgICAgICAgICBkbyBub3Qgc3VmZmVyIHRpbWVvdXRzIG9uIGxvYWRlZCBzeXN0ZW1zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1RBU0tIQVNIJz48Z2xvc3N0ZXJtPkJCX1RBU0tIQVNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdpdGhpbiBhbiBleGVjdXRpbmcgdGFzaywgdGhpcyB2YXJpYWJsZSBob2xkcyB0aGUgaGFzaAorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgdGFzayBhcyByZXR1cm5lZCBieSB0aGUgY3VycmVudGx5IGVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlIGdlbmVyYXRvci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9WRVJCT1NFX0xPR1MnPjxnbG9zc3Rlcm0+QkJfVkVSQk9TRV9MT0dTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIGhvdyB2ZXJib3NlIEJpdEJha2UgaXMgZHVyaW5nIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgSWYgc2V0LCBzaGVsbCBzY3JpcHRzIGVjaG8gY29tbWFuZHMgYW5kIHNoZWxsIHNjcmlwdCBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgYXBwZWFycyBvbiBzdGFuZGFyZCBvdXQgKHN0ZG91dCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfV09SS0VSQ09OVEVYVCc+PGdsb3NzdGVybT5CQl9XT1JLRVJDT05URVhUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGV4ZWN1dGluZyBhIHRhc2suCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugc2V0cyB0aGlzIHZhcmlhYmxlIHRvICIxIiB3aGVuIGEgdGFzayBpcworICAgICAgICAgICAgICAgICAgICBiZWluZyBleGVjdXRlZC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGlzIG5vdCBzZXQgd2hlbiB0aGUgdGFzayBpcyBpbiBzZXJ2ZXIgY29udGV4dAorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgcGFyc2luZyBvciBldmVudCBoYW5kbGluZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCQ0xBU1NFWFRFTkQnPjxnbG9zc3Rlcm0+QkJDTEFTU0VYVEVORDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbGxvd3MgeW91IHRvIGV4dGVuZCBhIHJlY2lwZSBzbyB0aGF0IGl0IGJ1aWxkcyB2YXJpYW50cworICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgIFNvbWUgZXhhbXBsZXMgb2YgdGhlc2UgdmFyaWFudHMgZm9yIHJlY2lwZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIENvcmUgbWV0YWRhdGEgYXJlICJuYXRpdmVzIiBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xdWlsdC1uYXRpdmU8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgYSBjb3B5IG9mCisgICAgICAgICAgICAgICAgICAgIFF1aWx0IGJ1aWx0IHRvIHJ1biBvbiB0aGUgYnVpbGQgc3lzdGVtOyAiY3Jvc3NlcyIgc3VjaAorICAgICAgICAgICAgICAgICAgICBhcyA8ZmlsZW5hbWU+Z2NjLWNyb3NzPC9maWxlbmFtZT4sIHdoaWNoIGlzIGEgY29tcGlsZXIKKyAgICAgICAgICAgICAgICAgICAgYnVpbHQgdG8gcnVuIG9uIHRoZSBidWlsZCBtYWNoaW5lIGJ1dCBwcm9kdWNlcyBiaW5hcmllcworICAgICAgICAgICAgICAgICAgICB0aGF0IHJ1biBvbiB0aGUgdGFyZ2V0IDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT47CisgICAgICAgICAgICAgICAgICAgICJuYXRpdmVzZGsiLCB3aGljaCB0YXJnZXRzIHRoZSBTREsgbWFjaGluZSBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT47IGFuZCAibXVsaXRsaWJzIiBpbiB0aGUgZm9ybQorICAgICAgICAgICAgICAgICAgICAiPGZpbGVuYW1lPm11bHRpbGliOjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPm11bHRpbGliX25hbWU8L3JlcGxhY2VhYmxlPiIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIGJ1aWxkIGEgZGlmZmVyZW50IHZhcmlhbnQgb2YgdGhlIHJlY2lwZSB3aXRoIGEgbWluaW1hbAorICAgICAgICAgICAgICAgICAgICBhbW91bnQgb2YgY29kZSwgaXQgdXN1YWxseSBpcyBhcyBzaW1wbGUgYXMgYWRkaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdHdvIGV4YW1wbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgIm5hdGl2ZSIgdmFyaWFudHMgYXJlIGZyb20gdGhlIE9wZW5FbWJlZGRlZCBDb3JlCisgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCQ0xBU1NFWFRFTkQgPSsgIm5hdGl2ZSBuYXRpdmVzZGsiCisgICAgIEJCQ0xBU1NFWFRFTkQgPSsgIm11bHRpbGliOjxyZXBsYWNlYWJsZT5tdWx0aWxpYl9uYW1lPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJERUJVRyc+PGdsb3NzdGVybT5CQkRFQlVHPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldHMgdGhlIEJpdEJha2UgZGVidWcgb3V0cHV0IGxldmVsIHRvIGEgc3BlY2lmaWMgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgYXMgaW5jcmVtZW50ZWQgYnkgdGhlIDxmaWxlbmFtZT4tZDwvZmlsZW5hbWU+IGNvbW1hbmQgbGluZQorICAgICAgICAgICAgICAgICAgICBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlIGV4dGVybmFsIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciBmb3IgaXQgdG8gd29yay4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkZJTEVfQ09MTEVDVElPTlMnPjxnbG9zc3Rlcm0+QkJGSUxFX0NPTExFQ1RJT05TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+TGlzdHMgdGhlIG5hbWVzIG9mIGNvbmZpZ3VyZWQgbGF5ZXJzLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBuYW1lcyBhcmUgdXNlZCB0byBmaW5kIHRoZSBvdGhlciA8ZmlsZW5hbWU+QkJGSUxFXyo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgZWFjaCBsYXllciBhcHBlbmRzIGl0cyBuYW1lIHRvIHRoaXMgdmFyaWFibGUgaW4gaXRzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCRklMRV9QQVRURVJOJz48Z2xvc3N0ZXJtPkJCRklMRV9QQVRURVJOPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+VmFyaWFibGUgdGhhdCBleHBhbmRzIHRvIG1hdGNoIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCRklMRVMnPjxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGluIGEgcGFydGljdWxhciBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZSBhbmQgbXVzdAorICAgICAgICAgICAgICAgICAgICBiZSBzdWZmaXhlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzcGVjaWZpYyBsYXllciAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJGSUxFX1BBVFRFUk5fZW1lbmxvdzwvZmlsZW5hbWU+KS48L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkZJTEVfUFJJT1JJVFknPjxnbG9zc3Rlcm0+QkJGSUxFX1BSSU9SSVRZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+QXNzaWducyB0aGUgcHJpb3JpdHkgZm9yIHJlY2lwZSBmaWxlcyBpbiBlYWNoIGxheWVyLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGlzIHZhcmlhYmxlIGlzIHVzZWZ1bCBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZSBzYW1lIHJlY2lwZSBhcHBlYXJzIGluCisgICAgICAgICAgICAgICAgICAgIG1vcmUgdGhhbiBvbmUgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhpcyB2YXJpYWJsZSBhbGxvd3MgeW91IHRvIHByaW9yaXRpemUgYQorICAgICAgICAgICAgICAgICAgICBsYXllciBhZ2FpbnN0IG90aGVyIGxheWVycyB0aGF0IGNvbnRhaW4gdGhlIHNhbWUgcmVjaXBlIC0gZWZmZWN0aXZlbHkKKyAgICAgICAgICAgICAgICAgICAgbGV0dGluZyB5b3UgY29udHJvbCB0aGUgcHJlY2VkZW5jZSBmb3IgdGhlIG11bHRpcGxlIGxheWVycy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHByZWNlZGVuY2UgZXN0YWJsaXNoZWQgdGhyb3VnaCB0aGlzIHZhcmlhYmxlIHN0YW5kcyByZWdhcmRsZXNzIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlJ3MgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUpLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYSBsYXllciB0aGF0IGhhcyBhIHJlY2lwZSB3aXRoIGEgaGlnaGVyIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+IHZhbHVlIGJ1dCBmb3IKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggdGhlIDxmaWxlbmFtZT5CQkZJTEVfUFJJT1JJVFk8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gaGF2ZSBhIGxvd2VyIHByZWNlZGVuY2Ugc3RpbGwgaGFzIGEKKyAgICAgICAgICAgICAgICAgICAgbG93ZXIgcHJlY2VkZW5jZS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+QSBsYXJnZXIgdmFsdWUgZm9yIHRoZSA8ZmlsZW5hbWU+QkJGSUxFX1BSSU9SSVRZPC9maWxlbmFtZT4gdmFyaWFibGUgcmVzdWx0cyBpbiBhIGhpZ2hlcgorICAgICAgICAgICAgICAgICAgICBwcmVjZWRlbmNlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIHZhbHVlIDYgaGFzIGEgaGlnaGVyIHByZWNlZGVuY2UgdGhhbiB0aGUgdmFsdWUgNS4KKyAgICAgICAgICAgICAgICAgICAgSWYgbm90IHNwZWNpZmllZCwgdGhlIDxmaWxlbmFtZT5CQkZJTEVfUFJJT1JJVFk8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBzZXQgYmFzZWQgb24gbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIChzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTEFZRVJERVBFTkRTJz5MQVlFUkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4gdmFyaWFibGUgZm9yCisgICAgICAgICAgICAgICAgICAgIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHByaW9yaXR5LCBpZiB1bnNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICBmb3IgYSBsYXllciB3aXRoIG5vIGRlcGVuZGVuY2llcywgaXMgdGhlIGxvd2VzdCBkZWZpbmVkIHByaW9yaXR5ICsgMQorICAgICAgICAgICAgICAgICAgICAob3IgMSBpZiBubyBwcmlvcml0aWVzIGFyZSBkZWZpbmVkKS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHRpcD4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIGNvbW1hbmQgPGZpbGVuYW1lPmJpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzPC9maWxlbmFtZT4gdG8gbGlzdAorICAgICAgICAgICAgICAgICAgICBhbGwgY29uZmlndXJlZCBsYXllcnMgYWxvbmcgd2l0aCB0aGVpciBwcmlvcml0aWVzLgorICAgICAgICAgICAgICAgIDwvdGlwPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJGSUxFUyc+PGdsb3NzdGVybT5CQkZJTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+TGlzdCBvZiByZWNpcGUgZmlsZXMgQml0QmFrZSB1c2VzIHRvIGJ1aWxkIHNvZnR3YXJlLjwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCSU5DTFVERUQnPjxnbG9zc3Rlcm0+QkJJTkNMVURFRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb250YWlucyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFsbCBvZiBhbGwgZmlsZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlJ3MgcGFyc2VyIGluY2x1ZGVkIGR1cmluZyBwYXJzaW5nIG9mIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJJTkNMVURFTE9HUyc+PGdsb3NzdGVybT5CQklOQ0xVREVMT0dTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHNldCB0byBhIHZhbHVlLCBlbmFibGVzIHByaW50aW5nIHRoZSB0YXNrIGxvZyB3aGVuCisgICAgICAgICAgICAgICAgICAgIHJlcG9ydGluZyBhIGZhaWxlZCB0YXNrLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCSU5DTFVERUxPR1NfTElORVMnPjxnbG9zc3Rlcm0+QkJJTkNMVURFTE9HU19MSU5FUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJJTkNMVURFTE9HUyc+PGZpbGVuYW1lPkJCSU5DTFVERUxPR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0LCBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmVzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIHRhc2sgbG9nIGZpbGUgdG8gcHJpbnQgd2hlbiByZXBvcnRpbmcgYSBmYWlsZWQgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBzZXQgPGZpbGVuYW1lPkJCSU5DTFVERUxPR1NfTElORVM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgdGhlIGVudGlyZSBsb2cgaXMgcHJpbnRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkxBWUVSUyc+PGdsb3NzdGVybT5CQkxBWUVSUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPkxpc3RzIHRoZSBsYXllcnMgdG8gZW5hYmxlIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgZGVmaW5lZCBpbiB0aGUgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZpbGUgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTEFZRVJTID0gIiBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEteW9jdG8gXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS15b2N0by1ic3AgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS1teWtlcm5lbCBcCisgICAgICAgIgorCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGVuYWJsZXMgZm91ciBsYXllcnMsIG9uZSBvZiB3aGljaCBpcyBhIGN1c3RvbSwgdXNlci1kZWZpbmVkIGxheWVyCisgICAgICAgICAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5tZXRhLW15a2VybmVsPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJMQVlFUlNfRkVUQ0hfRElSJz48Z2xvc3N0ZXJtPkJCTEFZRVJTX0ZFVENIX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZXRzIHRoZSBiYXNlIGxvY2F0aW9uIHdoZXJlIGxheWVycyBhcmUgc3RvcmVkLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIGxvY2F0aW9uIGlzIHNldCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtDT1JFQkFTRX08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzZXR0aW5nIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS1sYXllcnMgbGF5ZXJpbmRleC1mZXRjaDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICB0ZWxscyA8ZmlsZW5hbWU+Yml0YmFrZS1sYXllcnM8L2ZpbGVuYW1lPiB3aGVyZSB0byBwbGFjZQorICAgICAgICAgICAgICAgICAgICB0aGUgZmV0Y2hlZCBsYXllcnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJNQVNLJz48Z2xvc3N0ZXJtPkJCTUFTSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQcmV2ZW50cyBCaXRCYWtlIGZyb20gcHJvY2Vzc2luZyByZWNpcGVzIGFuZCByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kIGZpbGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPkJCTUFTSzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIHRvICJoaWRlIiB0aGVzZSA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBpZ25vcmVzIGFueSByZWNpcGUgb3IgcmVjaXBlIGFwcGVuZCBmaWxlcyB0aGF0CisgICAgICAgICAgICAgICAgICAgIG1hdGNoIHRoZSBleHByZXNzaW9uLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBhcyBpZiBCaXRCYWtlIGRvZXMgbm90IHNlZSB0aGVtIGF0IGFsbC4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBtYXRjaGluZyBmaWxlcyBhcmUgbm90IHBhcnNlZCBvciBvdGhlcndpc2UKKyAgICAgICAgICAgICAgICAgICAgdXNlZCBieSBCaXRCYWtlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIHlvdSBwcm92aWRlIGlzIHBhc3NlZCB0byBQeXRob24ncyByZWd1bGFyCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gY29tcGlsZXIuCisgICAgICAgICAgICAgICAgICAgIFRoZSBleHByZXNzaW9uIGlzIGNvbXBhcmVkIGFnYWluc3QgdGhlIGZ1bGwgcGF0aHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBGb3IgY29tcGxldGUgc3ludGF4IGluZm9ybWF0aW9uLCBzZWUgUHl0aG9uJ3MKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiBhdAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZG9jcy5weXRob24ub3JnL3JlbGVhc2UvMi4zL2xpYi9yZS1zeW50YXguaHRtbCc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSB1c2VzIGEgY29tcGxldGUgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgIHRvIHRlbGwgQml0QmFrZSB0byBpZ25vcmUgYWxsIHJlY2lwZSBhbmQgcmVjaXBlIGFwcGVuZAorICAgICAgICAgICAgICAgICAgICBmaWxlcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtdGkvcmVjaXBlcy1taXNjLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQk1BU0sgPSAibWV0YS10aS9yZWNpcGVzLW1pc2MvIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIG1hc2sgb3V0IG11bHRpcGxlIGRpcmVjdG9yaWVzIG9yIHJlY2lwZXMsCisgICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgdmVydGljYWwgYmFyIHRvIHNlcGFyYXRlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIG5leHQgZXhhbXBsZSBtYXNrcyBvdXQgbXVsdGlwbGUgZGlyZWN0b3JpZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWwgcmVjaXBlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQk1BU0sgPSAibWV0YS10aS9yZWNpcGVzLW1pc2MvfG1ldGEtdGkvcmVjaXBlcy10aS9wYWNrYWdlZ3JvdXAvIgorICAgICBCQk1BU0sgLj0gInwuKm1ldGEtb2UvcmVjaXBlcy1zdXBwb3J0LyIKKyAgICAgQkJNQVNLIC49ICJ8LipvcGVubGRhcCIKKyAgICAgQkJNQVNLIC49ICJ8LipvcGVuY3YiCisgICAgIEJCTUFTSyAuPSAifC4qbHptYSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBOb3RpY2UgaG93IHRoZSB2ZXJ0aWNhbCBiYXIgaXMgdXNlZCB0byBhcHBlbmQgdGhlIGZyYWdtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHNwZWNpZnlpbmcgYSBkaXJlY3RvcnkgbmFtZSwgdXNlIHRoZSB0cmFpbGluZworICAgICAgICAgICAgICAgICAgICAgICAgc2xhc2ggY2hhcmFjdGVyIHRvIGVuc3VyZSB5b3UgbWF0Y2gganVzdCB0aGF0IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCUEFUSCc+PGdsb3NzdGVybT5CQlBBVEg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNlZCBieSBCaXRCYWtlIHRvIGxvY2F0ZSBjbGFzcworICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4pIGFuZCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPikgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgYW5hbG9nb3VzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgcnVuIEJpdEJha2UgZnJvbSBhIGRpcmVjdG9yeSBvdXRzaWRlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBkaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgIHlvdSBtdXN0IGJlIHN1cmUgdG8gc2V0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiB0byBwb2ludCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIHZhcmlhYmxlIGFzIHlvdSB3b3VsZCBhbnkgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gcnVuIEJpdEJha2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBCQlBBVEg9IjxyZXBsYWNlYWJsZT5idWlsZF9kaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPiIKKyAgICAgJCBleHBvcnQgQkJQQVRICisgICAgICQgYml0YmFrZSA8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCU0VSVkVSJz48Z2xvc3N0ZXJtPkJCU0VSVkVSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgc2VydmVyIHRoYXQgcnVucyBtZW1vcnktcmVzaWRlbnQgQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlzIG9ubHkgdXNlZCB3aGVuIHlvdSBlbXBsb3kgbWVtb3J5LXJlc2lkZW50CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJWRVJTSU9OUyc+PGdsb3NzdGVybT5CQlZFUlNJT05TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFsbG93cyBhIHNpbmdsZSByZWNpcGUgdG8gYnVpbGQgbXVsdGlwbGUgdmVyc2lvbnMgb2YgYQorICAgICAgICAgICAgICAgICAgICBwcm9qZWN0IGZyb20gYSBzaW5nbGUgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBhbHNvIGFibGUgdG8gc3BlY2lmeSBjb25kaXRpb25hbCBtZXRhZGF0YQorICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU9WRVJSSURFUyc+PGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBtZWNoYW5pc20gZm9yIGEgc2luZ2xlIHZlcnNpb24gb3IgZm9yIGFuIG9wdGlvbmFsbHkgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2Ugb2YgdmVyc2lvbnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIDxmaWxlbmFtZT5CQlZFUlNJT05TPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3ZhcmlhbnRzLWNsYXNzLWV4dGVuc2lvbi1tZWNoYW5pc20nPlZhcmlhbnRzIC0gQ2xhc3MgRXh0ZW5zaW9uIE1lY2hhbmlzbTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQklUQkFLRV9VSSc+PGdsb3NzdGVybT5CSVRCQUtFX1VJPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFVzZWQgdG8gc3BlY2lmeSB0aGUgVUkgbW9kdWxlIHRvIHVzZSB3aGVuIHJ1bm5pbmcgQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhpcyB2YXJpYWJsZSBpcyBlcXVpdmFsZW50IHRvIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LXU8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUgb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgZm9yIGl0IHRvIHdvcmsuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRE5BTUUnPjxnbG9zc3Rlcm0+QlVJTEROQU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgbmFtZSBhc3NpZ25lZCB0byB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIGRlZmF1bHRzIHRvIGEgZGF0ZXRpbWUgc3RhbXAgb2Ygd2hlbiB0aGUgYnVpbGQgd2FzCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgYnV0IGNhbiBiZSBkZWZpbmVkIGJ5IHRoZSBtZXRhZGF0YS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CWlJESVInPjxnbG9zc3Rlcm0+QlpSRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggZmlsZXMgY2hlY2tlZCBvdXQgb2YgYSBCYXphYXIKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGFyZSBzdG9yZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWMnPjx0aXRsZT5DPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNBQ0hFJz48Z2xvc3N0ZXJtPkNBQ0hFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IEJpdEJha2UgdXNlcyB0byBzdG9yZSBhIGNhY2hlCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBtZXRhZGF0YSBzbyBpdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcnNlZCBldmVyeQorICAgICAgICAgICAgICAgICAgICB0aW1lIEJpdEJha2UgaXMgc3RhcnRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DVlNESVInPjxnbG9zc3Rlcm0+Q1ZTRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggZmlsZXMgY2hlY2tlZCBvdXQgdW5kZXIgdGhlCisgICAgICAgICAgICAgICAgICAgIENWUyBzeXN0ZW0gYXJlIHN0b3JlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktZCc+PHRpdGxlPkQ8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVGQVVMVF9QUkVGRVJFTkNFJz48Z2xvc3N0ZXJtPkRFRkFVTFRfUFJFRkVSRU5DRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSB3ZWFrIGJpYXMgZm9yIHJlY2lwZSBzZWxlY3Rpb24gcHJpb3JpdHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbW9zdCBjb21tb24gdXNhZ2Ugb2YgdGhpcyBpcyB2YXJpYWJsZSBpcyB0byBzZXQKKyAgICAgICAgICAgICAgICAgICAgaXQgdG8gIi0xIiB3aXRoaW4gYSByZWNpcGUgZm9yIGEgZGV2ZWxvcG1lbnQgdmVyc2lvbiBvZiBhCisgICAgICAgICAgICAgICAgICAgIHBpZWNlIG9mIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGUgdmFyaWFibGUgaW4gdGhpcyB3YXkgY2F1c2VzIHRoZSBzdGFibGUgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcmVjaXBlIHRvIGJ1aWxkIGJ5IGRlZmF1bHQgaW4gdGhlIGFic2VuY2Ugb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVGRVJSRURfVkVSU0lPTic+UFJFRkVSUkVEX1ZFUlNJT048L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgdXNlZCB0byBidWlsZCB0aGUgZGV2ZWxvcG1lbnQgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoZSBiaWFzIHByb3ZpZGVkIGJ5IDxmaWxlbmFtZT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyB3ZWFrIGFuZCBpcyBvdmVycmlkZGVuIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItQkJGSUxFX1BSSU9SSVRZJz5CQkZJTEVfUFJJT1JJVFk8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGhhdCB2YXJpYWJsZSBpcyBkaWZmZXJlbnQgYmV0d2VlbiB0d28gbGF5ZXJzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIHNhbWUgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFUEVORFMnPjxnbG9zc3Rlcm0+REVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBhIHJlY2lwZSdzIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIChpLmUuIG90aGVyIHJlY2lwZSBmaWxlcykuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoaXMgc2ltcGxlIGV4YW1wbGUgZm9yIHR3byByZWNpcGVzIG5hbWVkICJhIiBhbmQKKyAgICAgICAgICAgICAgICAgICAgImIiIHRoYXQgcHJvZHVjZSBzaW1pbGFybHkgbmFtZWQgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IGFwcGVhcnMgaW4gdGhlICJhIiByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVQRU5EUyA9ICJiIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEhlcmUsIHRoZSBkZXBlbmRlbmN5IGlzIHN1Y2ggdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+IHRhc2sgZm9yIHJlY2lwZSAiYSIKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kcyBvbiB0aGUgPGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0YXNrIG9mIHJlY2lwZSAiYiIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbWVhbnMgYW55dGhpbmcgdGhhdCByZWNpcGUgImIiIHB1dHMgaW50byBzeXNyb290CisgICAgICAgICAgICAgICAgICAgIGlzIGF2YWlsYWJsZSB3aGVuIHJlY2lwZSAiYSIgaXMgY29uZmlndXJpbmcgaXRzZWxmLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gcnVudGltZSBkZXBlbmRlbmNpZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVTQ1JJUFRJT04nPjxnbG9zc3Rlcm0+REVTQ1JJUFRJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSBsb25nIGRlc2NyaXB0aW9uIGZvciB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURMX0RJUic+PGdsb3NzdGVybT5ETF9ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNlbnRyYWwgZG93bmxvYWQgZGlyZWN0b3J5IHVzZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgdG8KKyAgICAgICAgICAgICAgICAgICAgc3RvcmUgZG93bmxvYWRzLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT4gZ2V0cyBmaWxlcworICAgICAgICAgICAgICAgICAgICBzdWl0YWJsZSBmb3IgbWlycm9yaW5nIGZvciBldmVyeXRoaW5nIGV4Y2VwdCBHaXQKKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0YXJiYWxscyBvZiBHaXQgcmVwb3NpdG9yaWVzLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMnPjxmaWxlbmFtZT5CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKworICAgICAgICA8L2dsb3NzZW50cnk+CisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWUnPjx0aXRsZT5FPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYQ0xVREVfRlJPTV9XT1JMRCc+PGdsb3NzdGVybT5FWENMVURFX0ZST01fV09STEQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0cyBCaXRCYWtlIHRvIGV4Y2x1ZGUgYSByZWNpcGUgZnJvbSB3b3JsZCBidWlsZHMgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2Ugd29ybGQ8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIER1cmluZyB3b3JsZCBidWlsZHMsIEJpdEJha2UgbG9jYXRlcywgcGFyc2VzIGFuZCBidWlsZHMgYWxsCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMgZm91bmQgaW4gZXZlcnkgbGF5ZXIgZXhwb3NlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIGV4Y2x1ZGUgYSByZWNpcGUgZnJvbSBhIHdvcmxkIGJ1aWxkIHVzaW5nIHRoaXMgdmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgIHNldCB0aGUgdmFyaWFibGUgdG8gIjEiIGluIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFJlY2lwZXMgYWRkZWQgdG8gPGZpbGVuYW1lPkVYQ0xVREVfRlJPTV9XT1JMRDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG1heSBzdGlsbCBiZSBidWlsdCBkdXJpbmcgYSB3b3JsZCBidWlsZCBpbiBvcmRlciB0byBzYXRpc2Z5CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyBvZiBvdGhlciByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICBBZGRpbmcgYSByZWNpcGUgdG8gPGZpbGVuYW1lPkVYQ0xVREVfRlJPTV9XT1JMRDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9ubHkgZW5zdXJlcyB0aGF0IHRoZSByZWNpcGUgaXMgbm90IGV4cGxpY2l0bHkgYWRkZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGxpc3Qgb2YgYnVpbGQgdGFyZ2V0cyBpbiBhIHdvcmxkIGJ1aWxkLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1mJz48dGl0bGU+RjwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GQUtFUk9PVCc+PGdsb3NzdGVybT5GQUtFUk9PVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgdGhlIGNvbW1hbmQgdG8gdXNlIHdoZW4gcnVubmluZyBhIHNoZWxsIHNjcmlwdAorICAgICAgICAgICAgICAgICAgICAgaW4gYSBmYWtlcm9vdCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+RkFLRVJPT1Q8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBvYnNvbGV0ZQorICAgICAgICAgICAgICAgICAgICAgYW5kIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZBS0VST09UKjwvZmlsZW5hbWU+IHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGVzZSBlbnRyaWVzIGluIHRoZSBnbG9zc2FyeSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GQUtFUk9PVEJBU0VFTlYnPjxnbG9zc3Rlcm0+RkFLRVJPT1RCQVNFRU5WPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICBMaXN0cyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IHdoZW4gZXhlY3V0aW5nCisgICAgICAgICAgICAgICAgICAgICB0aGUgY29tbWFuZCBkZWZpbmVkIGJ5CisgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRkFLRVJPT1RDTUQnPjxmaWxlbmFtZT5GQUtFUk9PVENNRDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgdGhhdCBzdGFydHMgdGhlIGJpdGJha2Utd29ya2VyIHByb2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBmYWtlcm9vdCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GQUtFUk9PVENNRCc+PGdsb3NzdGVybT5GQUtFUk9PVENNRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgdGhlIGNvbW1hbmQgdGhhdCBzdGFydHMgdGhlIGJpdGJha2Utd29ya2VyCisgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzIGluIHRoZSBmYWtlcm9vdCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GQUtFUk9PVERJUlMnPjxnbG9zc3Rlcm0+RkFLRVJPT1RESVJTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICBMaXN0cyBkaXJlY3RvcmllcyB0byBjcmVhdGUgYmVmb3JlIHJ1bm5pbmcgYSB0YXNrIGluCisgICAgICAgICAgICAgICAgICAgICB0aGUgZmFrZXJvb3QgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRkFLRVJPT1RFTlYnPjxnbG9zc3Rlcm0+RkFLRVJPT1RFTlY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgIExpc3RzIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgd2hlbiBydW5uaW5nIGEgdGFzaworICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZha2Vyb290IGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZAorICAgICAgICAgICAgICAgICAgICAgdGhlIGZha2Vyb290IGVudmlyb25tZW50LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRkFLRVJPT1RCQVNFRU5WJz48ZmlsZW5hbWU+RkFLRVJPT1RCQVNFRU5WPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GQUtFUk9PVE5PRU5WJz48Z2xvc3N0ZXJtPkZBS0VST09UTk9FTlY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgIExpc3RzIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgd2hlbiBydW5uaW5nIGEgdGFzaworICAgICAgICAgICAgICAgICAgICAgdGhhdCBpcyBub3QgaW4gdGhlIGZha2Vyb290IGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZAorICAgICAgICAgICAgICAgICAgICAgdGhlIGZha2Vyb290IGVudmlyb25tZW50LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRkFLRVJPT1RFTlYnPjxmaWxlbmFtZT5GQUtFUk9PVEVOVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRkVUQ0hDTUQnPjxnbG9zc3Rlcm0+RkVUQ0hDTUQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgY29tbWFuZCB0aGUgQml0QmFrZSBmZXRjaGVyIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICBleGVjdXRlcyB3aGVuIHJ1bm5pbmcgZmV0Y2ggb3BlcmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gdXNlIGFuIG92ZXJyaWRlIHN1ZmZpeCB3aGVuIHlvdSB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIChlLmcuIDxmaWxlbmFtZT5GRVRDSENNRF9naXQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBvciA8ZmlsZW5hbWU+RkVUQ0hDTURfc3ZuPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZJTEUnPjxnbG9zc3Rlcm0+RklMRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgYXQgdGhlIGN1cnJlbnQgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBzZXRzIHRoaXMgdmFyaWFibGUgZHVyaW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgdG8gaWRlbnRpZnkgdGhlIGZpbGUgYmVpbmcgcGFyc2VkLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGFsc28gc2V0cyB0aGlzIHZhcmlhYmxlIHdoZW4gYSByZWNpcGUgaXMgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZWQgdG8gaWRlbnRpZnkgdGhlIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZJTEVTRElSJz48Z2xvc3N0ZXJtPkZJTEVTRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBkaXJlY3RvcmllcyBCaXRCYWtlIHVzZXMgd2hlbiBzZWFyY2hpbmcgZm9yCisgICAgICAgICAgICAgICAgICAgIHBhdGNoZXMgYW5kIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgImxvY2FsIiBmZXRjaGVyIG1vZHVsZSB1c2VzIHRoZXNlIGRpcmVjdG9yaWVzIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxpbmcgPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPiBVUkxzIGlmIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgICAgIHdhcyBub3QgZm91bmQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkZJTEVTRElSPC9maWxlbmFtZT4gdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQgYW5kIHlvdSBzaG91bGQgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT4gaW4gYWxsIG5ldyBjb2RlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRVNQQVRIJz48Z2xvc3N0ZXJtPkZJTEVTUEFUSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgZGlyZWN0b3JpZXMgQml0QmFrZSB1c2VzIHdoZW4gc2VhcmNoaW5nIGZvcgorICAgICAgICAgICAgICAgICAgICBwYXRjaGVzIGFuZCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlICJsb2NhbCIgZmV0Y2hlciBtb2R1bGUgdXNlcyB0aGVzZSBkaXJlY3RvcmllcyB3aGVuCisgICAgICAgICAgICAgICAgICAgIGhhbmRsaW5nIDxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4gVVJMcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGJlaGF2ZXMgbGlrZSBhIHNoZWxsIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBpcyBhIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgYXJlIHNlYXJjaGVkIGxlZnQtdG8tcmlnaHQgaW4gb3JkZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktZyc+PHRpdGxlPkc8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItR0lURElSJz48Z2xvc3N0ZXJtPkdJVERJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIGEgbG9jYWwgY29weSBvZiBhIEdpdCByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgICAgIGlzIHN0b3JlZCB3aGVuIGl0IGlzIGNsb25lZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1oJz48dGl0bGU+SDwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1IR0RJUic+PGdsb3NzdGVybT5IR0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIGZpbGVzIGNoZWNrZWQgb3V0IG9mIGEgTWVyY3VyaWFsCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBhcmUgc3RvcmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUhPTUVQQUdFJz48Z2xvc3N0ZXJtPkhPTUVQQUdFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+V2Vic2l0ZSB3aGVyZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzb2Z0d2FyZSB0aGUgcmVjaXBlIGlzIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBmb3VuZC48L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktaSc+PHRpdGxlPkk8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5IRVJJVCc+PGdsb3NzdGVybT5JTkhFUklUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENhdXNlcyB0aGUgbmFtZWQgY2xhc3MgdG8gYmUgaW5oZXJpdGVkIGF0CisgICAgICAgICAgICAgICAgICAgIHRoaXMgcG9pbnQgZHVyaW5nIHBhcnNpbmcuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyBvbmx5IHZhbGlkIGluIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworPCEtLQorICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWonPjx0aXRsZT5KPC90aXRsZT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktayc+PHRpdGxlPks8L3RpdGxlPgorICAgIDwvZ2xvc3NkaXY+CistLT4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWwnPjx0aXRsZT5MPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxBWUVSREVQRU5EUyc+PGdsb3NzdGVybT5MQVlFUkRFUEVORFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5MaXN0cyB0aGUgbGF5ZXJzLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB1cG9uIHdoaWNoIHRoaXMgcmVjaXBlIGRlcGVuZHMuCisgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsbHksIHlvdSBjYW4gc3BlY2lmeSBhIHNwZWNpZmljIGxheWVyIHZlcnNpb24gZm9yIGEgZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgICAgICBieSBhZGRpbmcgaXQgdG8gdGhlIGVuZCBvZiB0aGUgbGF5ZXIgbmFtZSB3aXRoIGEgY29sb24sIChlLmcuICJhbm90aGVybGF5ZXI6MyIKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgY29tcGFyZWQgYWdhaW5zdAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTEFZRVJWRVJTSU9OJz48ZmlsZW5hbWU+TEFZRVJWRVJTSU9OPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPl9hbm90aGVybGF5ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIGNhc2UpLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHByb2R1Y2VzIGFuIGVycm9yIGlmIGFueSBkZXBlbmRlbmN5IGlzIG1pc3Npbmcgb3IKKyAgICAgICAgICAgICAgICAgICAgdGhlIHZlcnNpb24gbnVtYmVycyBkbyBub3QgbWF0Y2ggZXhhY3RseSAoaWYgc3BlY2lmaWVkKS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSB1c2UgdGhpcyB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGFsc28gdXNlIHRoZSBzcGVjaWZpYyBsYXllciBuYW1lIGFzIGEgc3VmZml4CisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSB2YXJpYWJsZSAoZS5nLiA8ZmlsZW5hbWU+TEFZRVJERVBFTkRTX215bGF5ZXI8L2ZpbGVuYW1lPikuPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEFZRVJESVInPjxnbG9zc3Rlcm0+TEFZRVJESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5XaGVuIHVzZWQgaW5zaWRlIHRoZSA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmlsZSwgdGhpcyB2YXJpYWJsZSBwcm92aWRlcyB0aGUgcGF0aCBvZiB0aGUgY3VycmVudCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBub3QgYXZhaWxhYmxlIG91dHNpZGUgb2YgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgcmVmZXJlbmNlcyBhcmUgZXhwYW5kZWQgaW1tZWRpYXRlbHkgd2hlbiBwYXJzaW5nIG9mIHRoZSBmaWxlIGNvbXBsZXRlcy48L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MQVlFUlZFUlNJT04nPjxnbG9zc3Rlcm0+TEFZRVJWRVJTSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+T3B0aW9uYWxseSBzcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgYSBsYXllciBhcyBhIHNpbmdsZSBudW1iZXIuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgd2l0aGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MQVlFUkRFUEVORFMnPjxmaWxlbmFtZT5MQVlFUkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGFub3RoZXIgbGF5ZXIgaW4gb3JkZXIgdG8gZGVwZW5kIG9uIGEgc3BlY2lmaWMgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgbGF5ZXIuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgdXNlIHRoaXMgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBhbHNvIHVzZSB0aGUgc3BlY2lmaWMgbGF5ZXIgbmFtZSBhcyBhIHN1ZmZpeAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgdmFyaWFibGUgKGUuZy4gPGZpbGVuYW1lPkxBWUVSREVQRU5EU19teWxheWVyPC9maWxlbmFtZT4pLjwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxJQ0VOU0UnPjxnbG9zc3Rlcm0+TElDRU5TRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBvZiBzb3VyY2UgbGljZW5zZXMgZm9yIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LW0nPjx0aXRsZT5NPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1JUlJPUlMnPjxnbG9zc3Rlcm0+TUlSUk9SUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYWRkaXRpb25hbCBwYXRocyBmcm9tIHdoaWNoIEJpdEJha2UgZ2V0cyBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB0aGUgYnVpbGQgc3lzdGVtIHNlYXJjaGVzIGZvciBzb3VyY2UgY29kZSwgaXQgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgdHJpZXMgdGhlIGxvY2FsIGRvd25sb2FkIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhhdCBsb2NhdGlvbiBmYWlscywgdGhlIGJ1aWxkIHN5c3RlbSB0cmllcyBsb2NhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBieQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJFTUlSUk9SUyc+PGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIHRoZSB1cHN0cmVhbSBzb3VyY2UsIGFuZCB0aGVuIGxvY2F0aW9ucyBzcGVjaWZpZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1JUlJPUlM8L2ZpbGVuYW1lPiBpbiB0aGF0IG9yZGVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1VTFRJX1BST1ZJREVSX1dISVRFTElTVCc+PGdsb3NzdGVybT5NVUxUSV9QUk9WSURFUl9XSElURUxJU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWxsb3dzIHlvdSB0byBzdXBwcmVzcyBCaXRCYWtlIHdhcm5pbmdzIGNhdXNlZCB3aGVuCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5nIHR3byBzZXBhcmF0ZSByZWNpcGVzIHRoYXQgcHJvdmlkZSB0aGUgc2FtZQorICAgICAgICAgICAgICAgICAgICBvdXRwdXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdGJha2Ugbm9ybWFsbHkgaXNzdWVzIGEgd2FybmluZyB3aGVuIGJ1aWxkaW5nIHR3bworICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgcmVjaXBlcyB3aGVyZSBlYWNoIHByb3ZpZGVzIHRoZSBzYW1lIG91dHB1dC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzY2VuYXJpbyBpcyB1c3VhbGx5IHNvbWV0aGluZyB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgICAgICAgICAgICAgICB3YW50LgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBjYXNlcyBkbyBleGlzdCB3aGVyZSBpdCBtYWtlcyBzZW5zZSwgcGFydGljdWxhcmx5CisgICAgICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+dmlydHVhbC8qPC9maWxlbmFtZT4gbmFtZXNwYWNlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIHRvIHN1cHByZXNzIEJpdEJha2UncyB3YXJuaW5ncy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gdXNlIHRoZSB2YXJpYWJsZSwgbGlzdCBwcm92aWRlciBuYW1lcyAoZS5nLgorICAgICAgICAgICAgICAgICAgICByZWNpcGUgbmFtZXMsIDxmaWxlbmFtZT52aXJ0dWFsL2tlcm5lbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGgpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKzwhLS0KKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1uJz48dGl0bGU+TjwvdGl0bGU+CisgICAgPC9nbG9zc2Rpdj4KKy0tPgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktbyc+PHRpdGxlPk88L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItT1ZFUlJJREVTJz48Z2xvc3N0ZXJtPk9WRVJSSURFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+IHRvIGNvbnRyb2wKKyAgICAgICAgICAgICAgICAgICAgd2hhdCB2YXJpYWJsZXMgYXJlIG92ZXJyaWRkZW4gYWZ0ZXIgQml0QmFrZSBwYXJzZXMKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIGEgc2ltcGxlIGV4YW1wbGUgdGhhdCB1c2VzIGFuIG92ZXJyaWRlcworICAgICAgICAgICAgICAgICAgICBsaXN0IGJhc2VkIG9uIG1hY2hpbmUgYXJjaGl0ZWN0dXJlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBPVkVSUklERVMgPSAiYXJtOng4NjptaXBzOnBvd2VycGMiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY29uZGl0aW9uYWwtc3ludGF4LW92ZXJyaWRlcyc+Q29uZGl0aW9uYWwgU3ludGF4IChPdmVycmlkZXMpPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXAnPjx0aXRsZT5QPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VTJz48Z2xvc3N0ZXJtPlBBQ0tBR0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGxpc3Qgb2YgcGFja2FnZXMgdGhlIHJlY2lwZSBjcmVhdGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VTX0RZTkFNSUMnPjxnbG9zc3Rlcm0+UEFDS0FHRVNfRFlOQU1JQzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIHByb21pc2UgdGhhdCB5b3VyIHJlY2lwZSBzYXRpc2ZpZXMgcnVudGltZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIG9wdGlvbmFsIG1vZHVsZXMgdGhhdCBhcmUgZm91bmQgaW4gb3RoZXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VTX0RZTkFNSUM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCBhY3R1YWxseSBzYXRpc2Z5IHRoZSBkZXBlbmRlbmNpZXMsIGl0IG9ubHkgc3RhdGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgdGhleSBzaG91bGQgYmUgc2F0aXNmaWVkLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgYSBoYXJkLCBydW50aW1lIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICBvZiBhbm90aGVyIHBhY2thZ2UgaXMgc2F0aXNmaWVkIGR1cmluZyB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VTX0RZTkFNSUM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgYnV0IGEgcGFja2FnZSB3aXRoIHRoZSBtb2R1bGUgbmFtZSBpcyBuZXZlciBhY3R1YWxseQorICAgICAgICAgICAgICAgICAgICBwcm9kdWNlZCwgdGhlbiB0aGUgb3RoZXIgcGFja2FnZSB3aWxsIGJlIGJyb2tlbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QRSc+PGdsb3NzdGVybT5QRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZXBvY2ggb2YgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyB2YXJpYWJsZSBpcyB1bnNldC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlzIHVzZWQgdG8gbWFrZSB1cGdyYWRlcyBwb3NzaWJsZSB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uaW5nIHNjaGVtZSBjaGFuZ2VzIGluIHNvbWUgYmFja3dhcmRzIGluY29tcGF0aWJsZQorICAgICAgICAgICAgICAgICAgICB3YXkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEVSU0lTVEVOVF9ESVInPjxnbG9zc3Rlcm0+UEVSU0lTVEVOVF9ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgQml0QmFrZSB1c2VzIHRvIHN0b3JlIGRhdGEgdGhhdAorICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgcHJlc2VydmVkIGJldHdlZW4gYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUgZGF0YSBzdG9yZWQgaXMgdGhlIGRhdGEgdGhhdCB1c2VzCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UncyBwZXJzaXN0ZW50IGRhdGEgQVBJIGFuZCB0aGUgZGF0YSB1c2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBQUiBTZXJ2ZXIgYW5kIFBSIFNlcnZpY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEYnPjxnbG9zc3Rlcm0+UEY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSByZWNpcGUgb3IgcGFja2FnZSBuYW1lIGFuZCBpbmNsdWRlcyBhbGwgdmVyc2lvbiBhbmQgcmV2aXNpb24KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVycyAoaS5lLiA8ZmlsZW5hbWU+ZWdsaWJjLTIuMTMtcjIwK3N2bnIxNTUwOC88L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2gtNC4yLXIxLzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QTic+PGdsb3NzdGVybT5QTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSByZWNpcGUgbmFtZS48L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUic+PGdsb3NzdGVybT5QUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSByZXZpc2lvbiBvZiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUkVGRVJSRURfUFJPVklERVInPjxnbG9zc3Rlcm0+UFJFRkVSUkVEX1BST1ZJREVSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgcmVjaXBlcyBwcm92aWRlIHRoZSBzYW1lIGl0ZW0uCisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgYWx3YXlzIHN1ZmZpeCB0aGUgdmFyaWFibGUgd2l0aCB0aGUgbmFtZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgaXRlbSwgYW5kIHlvdSBzaG91bGQgc2V0IGl0IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcmVjaXBlIHRvIHdoaWNoIHlvdSB3YW50IHRvIGdpdmUgcHJlY2VkZW5jZS4KKyAgICAgICAgICAgICAgICAgICAgU29tZSBleGFtcGxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gImxpbnV4LXlvY3RvIgorICAgICBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID0gInhzZXJ2ZXIteGY4NiIKKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2wgPz0gIm1lc2EiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUkVGRVJSRURfUFJPVklERVJTJz48Z2xvc3N0ZXJtPlBSRUZFUlJFRF9QUk9WSURFUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB3aGljaCByZWNpcGUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2UgZm9yCisgICAgICAgICAgICAgICAgICAgIGNhc2VzIHdoZXJlIG11bHRpcGxlIHJlY2lwZXMgcHJvdmlkZSB0aGUgc2FtZSBpdGVtLgorICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbmFsbHksCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVGRVJSRURfUFJPVklERVJTPC9maWxlbmFtZT4gaXMgaWRlbnRpY2FsIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVGRVJSRURfUFJPVklERVInPjxmaWxlbmFtZT5QUkVGRVJSRURfUFJPVklERVI8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSA8ZmlsZW5hbWU+UFJFRkVSUkVEX1BST1ZJREVSUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGxldHMgeW91IGRlZmluZSBwcmVmZXJlbmNlcyBmb3IgbXVsdGlwbGUKKyAgICAgICAgICAgICAgICAgICAgc2l0dWF0aW9ucyB1c2luZyB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSUyA9ICJ4eHg6eXl5IGFhYTpiYmIgLi4uIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgZm9ybSBpcyBhIGNvbnZlbmllbnQgcmVwbGFjZW1lbnQgZm9yIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSX3h4eCA9ICJ5eXkiCisgICAgIFBSRUZFUlJFRF9QUk9WSURFUl9hYWEgPSAiYmJiIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFJFRkVSUkVEX1ZFUlNJT04nPjxnbG9zc3Rlcm0+UFJFRkVSUkVEX1ZFUlNJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIHZlcnNpb25zIG9mIHJlY2lwZXMgYXZhaWxhYmxlLCB0aGlzCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGRldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlLgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBhbHdheXMgc3VmZml4IHRoZSB2YXJpYWJsZSB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB5b3Ugd2FudCB0byBzZWxlY3QsIGFuZCB5b3Ugc2hvdWxkIHNldAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhY2NvcmRpbmdseSBmb3IgcHJlY2VkZW5jZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlICI8ZmlsZW5hbWU+JTwvZmlsZW5hbWU+IiBjaGFyYWN0ZXIgYXMgYQorICAgICAgICAgICAgICAgICAgICB3aWxkY2FyZCB0byBtYXRjaCBhbnkgbnVtYmVyIG9mIGNoYXJhY3RlcnMsIHdoaWNoIGNhbiBiZQorICAgICAgICAgICAgICAgICAgICB1c2VmdWwgd2hlbiBzcGVjaWZ5aW5nIHZlcnNpb25zIHRoYXQgY29udGFpbiBsb25nIHJldmlzaW9uCisgICAgICAgICAgICAgICAgICAgIG51bWJlcnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBjaGFuZ2UuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHR3byBleGFtcGxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVGRVJSRURfVkVSU0lPTl9weXRob24gPSAiMi43LjMiCisgICAgIFBSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID0gIjMuMTAlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFJFTUlSUk9SUyc+PGdsb3NzdGVybT5QUkVNSVJST1JTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhZGRpdGlvbmFsIHBhdGhzIGZyb20gd2hpY2ggQml0QmFrZSBnZXRzIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBidWlsZCBzeXN0ZW0gc2VhcmNoZXMgZm9yIHNvdXJjZSBjb2RlLCBpdCBmaXJzdAorICAgICAgICAgICAgICAgICAgICB0cmllcyB0aGUgbG9jYWwgZG93bmxvYWQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBJZiB0aGF0IGxvY2F0aW9uIGZhaWxzLCB0aGUgYnVpbGQgc3lzdGVtIHRyaWVzIGxvY2F0aW9ucworICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGJ5IDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4sIHRoZSB1cHN0cmVhbQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UsIGFuZCB0aGVuIGxvY2F0aW9ucyBzcGVjaWZpZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1JUlJPUlMnPjxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGluIHRoYXQgb3JkZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgeW91IHdvdWxkIGFkZCBhIHNwZWNpZmljIHNlcnZlciBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0byBhdHRlbXB0IGJlZm9yZSBhbnkgb3RoZXJzIGJ5IGFkZGluZworICAgICAgICAgICAgICAgICAgICBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIHRvIHlvdXIgY29uZmlndXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVNSVJST1JTX3ByZXBlbmQgPSAiXAorICAgICBnaXQ6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBmdHA6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBodHRwOi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgaHR0cHM6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgY2hhbmdlcyBjYXVzZSB0aGUgYnVpbGQgc3lzdGVtIHRvIGludGVyY2VwdAorICAgICAgICAgICAgICAgICAgICBHaXQsIEZUUCwgSFRUUCwgYW5kIEhUVFBTIHJlcXVlc3RzIGFuZCBkaXJlY3QgdGhlbSB0bworICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmh0dHA6Ly88L2ZpbGVuYW1lPiBzb3VyY2VzIG1pcnJvci4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPiBVUkxzIHRvIHBvaW50CisgICAgICAgICAgICAgICAgICAgIHRvIGxvY2FsIGRpcmVjdG9yaWVzIG9yIG5ldHdvcmsgc2hhcmVzIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFJPVklERVMnPjxnbG9zc3Rlcm0+UFJPVklERVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGFsaWFzZXMgYnkgd2hpY2ggYSBwYXJ0aWN1bGFyIHJlY2lwZSBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAga25vd24uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGEgcmVjaXBlJ3Mgb3duCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUE4nPlBOPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIGltcGxpY2l0bHkgYWxyZWFkeSBpbiBpdHMgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgSWYgYSByZWNpcGUgdXNlcyA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiwgdGhlCisgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgYWxpYXNlcyBhcmUgc3lub255bXMgZm9yIHRoZSByZWNpcGUgYW5kIGNhbgorICAgICAgICAgICAgICAgICAgICBiZSB1c2VmdWwgc2F0aXNmeWluZyBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIgcmVjaXBlcyBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIGFzIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgZnJvbSBhIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBmaWxlIDxmaWxlbmFtZT5saWJhdl8wLjguMTEuYmI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUk9WSURFUyArPSAibGlicG9zdHByb2MiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IHN0YXRlbWVudCByZXN1bHRzIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSAibGliYXYiIHJlY2lwZSBhbHNvIGJlaW5nIGtub3duIGFzICJsaWJwb3N0cHJvYyIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFJTRVJWX0hPU1QnPjxnbG9zc3Rlcm0+UFJTRVJWX0hPU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG5ldHdvcmsgYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgc2VydmljZSBob3N0IGFuZCBwb3J0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBob3cgdGhlIDxmaWxlbmFtZT5QUlNFUlZfSE9TVDwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzCisgICAgICAgICAgICAgICAgICAgIHNldDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUlNFUlZfSE9TVCA9ICJsb2NhbGhvc3Q6MCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzZXQgdGhlIHZhcmlhYmxlIGlmIHlvdSB3YW50IHRvIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgYSBsb2NhbCBQUiBzZXJ2aWNlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCA8ZmlsZW5hbWU+UFJTRVJWX0hPU1Q8L2ZpbGVuYW1lPiB0byBvdGhlcgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgdG8gdXNlIGEgcmVtb3RlIFBSIHNlcnZpY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFYnPjxnbG9zc3Rlcm0+UFY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgdmVyc2lvbiBvZiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCis8IS0tCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktcSc+PHRpdGxlPlE8L3RpdGxlPgorICAgIDwvZ2xvc3NkaXY+CistLT4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXInPjx0aXRsZT5SPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJERVBFTkRTJz48Z2xvc3N0ZXJtPlJERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIGEgcGFja2FnZSdzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHBhY2thZ2VzKQorICAgICAgICAgICAgICAgICAgICB0aGF0IG11c3QgYmUgaW5zdGFsbGVkIGluIG9yZGVyIGZvciB0aGUgYnVpbHQgcGFja2FnZSB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgY29ycmVjdGx5LgorICAgICAgICAgICAgICAgICAgICBJZiBhIHBhY2thZ2UgaW4gdGhpcyBsaXN0IGNhbm5vdCBiZSBmb3VuZCBkdXJpbmcgdGhlIGJ1aWxkLAorICAgICAgICAgICAgICAgICAgICB5b3Ugd2lsbCBnZXQgYSBidWlsZCBlcnJvci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gdmFyaWFibGUgYXBwbGllcworICAgICAgICAgICAgICAgICAgICB0byBwYWNrYWdlcyBiZWluZyBidWlsdCwgeW91IHNob3VsZCBhbHdheXMgdXNlIHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbiBhIGZvcm0gd2l0aCBhbiBhdHRhY2hlZCBwYWNrYWdlIG5hbWUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBhcmUgYnVpbGRpbmcgYSBkZXZlbG9wbWVudCBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgZGVwZW5kcyBvbiB0aGUgPGZpbGVuYW1lPnBlcmw8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHlvdSB3b3VsZCB1c2UgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkRFUEVORFNfJHtQTn0tZGV2ICs9ICJwZXJsIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBleGFtcGxlLCB0aGUgZGV2ZWxvcG1lbnQgcGFja2FnZSBkZXBlbmRzIG9uCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+cGVybDwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRodXMsIHRoZSA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBoYXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1BOfS1kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlIG5hbWUgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugc3VwcG9ydHMgc3BlY2lmeWluZyB2ZXJzaW9uZWQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICBBbHRob3VnaCB0aGUgc3ludGF4IHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIHBhY2thZ2luZworICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIEJpdEJha2UgaGlkZXMgdGhlc2UgZGlmZmVyZW5jZXMgZnJvbSB5b3UuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGdlbmVyYWwgc3ludGF4IHRvIHNwZWNpZnkgdmVyc2lvbnMgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkRFUEVORFNfJHtQTn0gPSAiPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPiAoPHJlcGxhY2VhYmxlPm9wZXJhdG9yPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnZlcnNpb248L3JlcGxhY2VhYmxlPikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIDxmaWxlbmFtZT5vcGVyYXRvcjwvZmlsZW5hbWU+LCB5b3UgY2FuIHNwZWNpZnkgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA9CisgICAgICZsdDsKKyAgICAgJmd0OworICAgICAmbHQ7PQorICAgICAmZ3Q7PQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNldHMgdXAgYSBkZXBlbmRlbmN5IG9uIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgMS4yIG9yIGdyZWF0ZXIgb2YgdGhlIHBhY2thZ2UgPGZpbGVuYW1lPmZvbzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJERVBFTkRTXyR7UE59ID0gImZvbyAoPj0gMS4yKSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJQUk9WSURFUyc+PGdsb3NzdGVybT5SUFJPVklERVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHBhY2thZ2UgbmFtZSBhbGlhc2VzIHRoYXQgYSBwYWNrYWdlIGFsc28gcHJvdmlkZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGFsaWFzZXMgYXJlIHVzZWZ1bCBmb3Igc2F0aXNmeWluZyBydW50aW1lIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICBvZiBvdGhlciBwYWNrYWdlcyBib3RoIGR1cmluZyB0aGUgYnVpbGQgYW5kIG9uIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgKGFzIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz5SREVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgIEFzIHdpdGggYWxsIHBhY2thZ2UtY29udHJvbGxpbmcgdmFyaWFibGVzLCB5b3UgbXVzdCBhbHdheXMKKyAgICAgICAgICAgICAgICAgICB1c2UgdGhlIHZhcmlhYmxlIGluIGNvbmp1bmN0aW9uIHdpdGggYSBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUlBST1ZJREVTXyR7UE59ID0gIndpZGdldC1hYmktMiIKKyAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUlJFQ09NTUVORFMnPjxnbG9zc3Rlcm0+UlJFQ09NTUVORFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgZXh0ZW5kcyB0aGUgdXNhYmlsaXR5IG9mIGEgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhY2thZ2UgYmVpbmcgYnVpbHQgZG9lcyBub3QgZGVwZW5kIG9uIHRoaXMgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbiBvcmRlciB0byBzdWNjZXNzZnVsbHkgYnVpbGQsIGJ1dCBuZWVkcyB0aGVtIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgZXh0ZW5kZWQgdXNhYmlsaXR5LgorICAgICAgICAgICAgICAgICAgICBUbyBzcGVjaWZ5IHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGZvciBwYWNrYWdlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz5SREVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBzdXBwb3J0cyBzcGVjaWZ5aW5nIHZlcnNpb25lZCByZWNvbW1lbmRzLgorICAgICAgICAgICAgICAgICAgICBBbHRob3VnaCB0aGUgc3ludGF4IHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIHBhY2thZ2luZworICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIEJpdEJha2UgaGlkZXMgdGhlc2UgZGlmZmVyZW5jZXMgZnJvbSB5b3UuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGdlbmVyYWwgc3ludGF4IHRvIHNwZWNpZnkgdmVyc2lvbnMgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT4gdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUlJFQ09NTUVORFNfJHtQTn0gPSAiPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPiAoPHJlcGxhY2VhYmxlPm9wZXJhdG9yPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnZlcnNpb248L3JlcGxhY2VhYmxlPikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIDxmaWxlbmFtZT5vcGVyYXRvcjwvZmlsZW5hbWU+LCB5b3UgY2FuIHNwZWNpZnkgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA9CisgICAgICZsdDsKKyAgICAgJmd0OworICAgICAmbHQ7PQorICAgICAmZ3Q7PQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNldHMgdXAgYSByZWNvbW1lbmQgb24gdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAxLjIgb3IgZ3JlYXRlciBvZiB0aGUgcGFja2FnZSA8ZmlsZW5hbWU+Zm9vPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUlJFQ09NTUVORFNfJHtQTn0gPSAiZm9vICg+PSAxLjIpIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXMnPjx0aXRsZT5TPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNFQ1RJT04nPjxnbG9zc3Rlcm0+U0VDVElPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBzZWN0aW9uIGluIHdoaWNoIHBhY2thZ2VzIHNob3VsZCBiZSBjYXRlZ29yaXplZC48L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TUkNfVVJJJz48Z2xvc3N0ZXJtPlNSQ19VUkk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgb2Ygc291cmNlIGZpbGVzIC0gbG9jYWwgb3IgcmVtb3RlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHRlbGxzIEJpdEJha2Ugd2hpY2ggYml0cworICAgICAgICAgICAgICAgICAgICB0byBwdWxsIGZvciB0aGUgYnVpbGQgYW5kIGhvdyB0byBwdWxsIHRoZW0uCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgcmVjaXBlIG9yIGFwcGVuZCBmaWxlIG5lZWRzIHRvCisgICAgICAgICAgICAgICAgICAgIGZldGNoIGEgc2luZ2xlIHRhcmJhbGwgZnJvbSB0aGUgSW50ZXJuZXQsIHRoZSByZWNpcGUgb3IKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kIGZpbGUgdXNlcyBhIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZW50cnkgdGhhdCBzcGVjaWZpZXMgdGhhdCB0YXJiYWxsLgorICAgICAgICAgICAgICAgICAgICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIHJlY2lwZSBvciBhcHBlbmQgZmlsZSBuZWVkcyB0bworICAgICAgICAgICAgICAgICAgICBmZXRjaCBhIHRhcmJhbGwgYW5kIGluY2x1ZGUgYSBjdXN0b20gZmlsZSwgdGhlIHJlY2lwZSBvcgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZSBuZWVkcyBhbiA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgc3BlY2lmaWVzIGFsbCB0aG9zZSBzb3VyY2VzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGxpc3QgZXhwbGFpbnMgdGhlIGF2YWlsYWJsZSBVUkkgcHJvdG9jb2xzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZldGNoZXMgZmlsZXMsIHdoaWNoIGFyZSB1c3VhbGx5IGZpbGVzIHNoaXBwZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtZXRhZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBsb2NhbCBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwYXRoIGlzIHJlbGF0aXZlIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmJ6cjovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhemFhciByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQ6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHaXQgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+b3NjOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIE9TQyAoT3BlblNVU0UgQnVpbGQgc2VydmljZSkgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cmVwbzovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHJlcG8gKEdpdCkgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmh0dHA6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEludGVybmV0IHVzaW5nIEhUVFAuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5odHRwczovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgSW50ZXJuZXQgdXNpbmcgSFRUUFMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5mdHA6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIEludGVybmV0IHVzaW5nIEZUUC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmN2czovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIENWUyByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5oZzovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIE1lcmN1cmlhbCAoPGZpbGVuYW1lPmhnPC9maWxlbmFtZT4pIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnA0Oi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgUGVyZm9yY2UgKDxmaWxlbmFtZT5wNDwvZmlsZW5hbWU+KSByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zc2g6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzZWN1cmUgc2hlbGwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zdm46Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBTdWJ2ZXJzaW9uICg8ZmlsZW5hbWU+c3ZuPC9maWxlbmFtZT4pIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkhlcmUgYXJlIHNvbWUgYWRkaXRpb25hbCBvcHRpb25zIHdvcnRoIG1lbnRpb25pbmc6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT51bnBhY2s8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gQ29udHJvbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGV0aGVyIG9yIG5vdCB0byB1bnBhY2sgdGhlIGZpbGUgaWYgaXQgaXMgYW4gYXJjaGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBhY3Rpb24gaXMgdG8gdW5wYWNrIHRoZSBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c3ViZGlyPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFBsYWNlcyB0aGUgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciBleHRyYWN0cyBpdHMgY29udGVudHMpIGludG8gdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgZm9yIHVudXN1YWwgdGFyYmFsbHMgb3Igb3RoZXIgYXJjaGl2ZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIG5vdCBoYXZlIHRoZWlyIGZpbGVzIGFscmVhZHkgaW4gYSBzdWJkaXJlY3Rvcnkgd2l0aGluIHRoZSBhcmNoaXZlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bmFtZTwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBTcGVjaWZpZXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgdG8gYmUgdXNlZCBmb3IgYXNzb2NpYXRpb24gd2l0aCA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGNoZWNrc3VtcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4geW91IGhhdmUgbW9yZSB0aGFuIG9uZSBmaWxlIHNwZWNpZmllZCBpbiA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZG93bmxvYWRmaWxlbmFtZTwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBTcGVjaWZpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlsZW5hbWUgdXNlZCB3aGVuIHN0b3JpbmcgdGhlIGRvd25sb2FkZWQgZmlsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1JDREFURSc+PGdsb3NzdGVybT5TUkNEQVRFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRlIG9mIHRoZSBzb3VyY2UgY29kZSB1c2VkIHRvIGJ1aWxkIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGFwcGxpZXMgb25seSBpZiB0aGUgc291cmNlIHdhcyBmZXRjaGVkIGZyb20gYSBTb3VyY2UgQ29kZSBNYW5hZ2VyIChTQ00pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNSQ1JFVic+PGdsb3NzdGVybT5TUkNSRVY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJldmlzaW9uIG9mIHRoZSBzb3VyY2UgY29kZSB1c2VkIHRvIGJ1aWxkIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGFwcGxpZXMgb25seSB3aGVuIHVzaW5nIFN1YnZlcnNpb24sIEdpdCwgTWVyY3VyaWFsIGFuZCBCYXphYXIuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGJ1aWxkIGEgZml4ZWQgcmV2aXNpb24gYW5kIHlvdSB3YW50CisgICAgICAgICAgICAgICAgICAgIHRvIGF2b2lkIHBlcmZvcm1pbmcgYSBxdWVyeSBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgZXZlcnkgdGltZQorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHBhcnNlcyB5b3VyIHJlY2lwZSwgeW91IHNob3VsZCBzcGVjaWZ5IGEgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+IHRoYXQgaXMgYQorICAgICAgICAgICAgICAgICAgICBmdWxsIHJldmlzaW9uIGlkZW50aWZpZXIgYW5kIG5vdCBqdXN0IGEgdGFnLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNSQ1JFVl9GT1JNQVQnPjxnbG9zc3Rlcm0+U1JDUkVWX0ZPUk1BVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZWxwcyBjb25zdHJ1Y3QgdmFsaWQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgd2hlbiBtdWx0aXBsZSBzb3VyY2UgY29udHJvbGxlZCBVUkxzIGFyZSB1c2VkIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHN5c3RlbSBuZWVkcyBoZWxwIGNvbnN0cnVjdGluZyB0aGVzZSB2YWx1ZXMgdW5kZXIgdGhlc2UKKyAgICAgICAgICAgICAgICAgICAgY2lyY3Vtc3RhbmNlcy4KKyAgICAgICAgICAgICAgICAgICAgRWFjaCBjb21wb25lbnQgaW4gdGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgYXNzaWduZWQgYSBuYW1lIGFuZCB0aGVzZSBhcmUgcmVmZXJlbmNlZAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPlNSQ1JFVl9GT1JNQVQ8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgYW4gZXhhbXBsZSB3aXRoIFVSTHMgbmFtZWQgIm1hY2hpbmUiIGFuZCAibWV0YSIuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgPGZpbGVuYW1lPlNSQ1JFVl9GT1JNQVQ8L2ZpbGVuYW1lPiBjb3VsZCBsb29rCisgICAgICAgICAgICAgICAgICAgIGxpa2UgIm1hY2hpbmVfbWV0YSIgYW5kIHRob3NlIG5hbWVzIHdvdWxkIGhhdmUgdGhlIFNDTQorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9ucyBzdWJzdGl0dXRlZCBpbnRvIGVhY2ggcG9zaXRpb24uCisgICAgICAgICAgICAgICAgICAgIE9ubHkgb25lIDxmaWxlbmFtZT5BVVRPSU5DPC9maWxlbmFtZT4gcGxhY2Vob2xkZXIgaXMgYWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYW5kIGlmIG5lZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgQW5kLCB0aGlzIHBsYWNlaG9sZGVyIGlzIHBsYWNlZCBhdCB0aGUgc3RhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIHN0cmluZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFNUCc+PGdsb3NzdGVybT5TVEFNUDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGJhc2UgcGF0aCB1c2VkIHRvIGNyZWF0ZSByZWNpcGUgc3RhbXAgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBwYXRoIHRvIGFuIGFjdHVhbCBzdGFtcCBmaWxlIGlzIGNvbnN0cnVjdGVkIGJ5IGV2YWx1YXRpbmcgdGhpcworICAgICAgICAgICAgICAgICAgICBzdHJpbmcgYW5kIHRoZW4gYXBwZW5kaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBTVBDTEVBTic+PGdsb3NzdGVybT5TVEFNUENMRUFOPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgYmFzZSBwYXRoIHVzZWQgdG8gY3JlYXRlIHJlY2lwZSBzdGFtcCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVW5saWtlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1RBTVAnPjxmaWxlbmFtZT5TVEFNUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgPGZpbGVuYW1lPlNUQU1QQ0xFQU48L2ZpbGVuYW1lPiBjYW4gY29udGFpbgorICAgICAgICAgICAgICAgICAgICB3aWxkY2FyZHMgdG8gbWF0Y2ggdGhlIHJhbmdlIG9mIGZpbGVzIGEgY2xlYW4gb3BlcmF0aW9uCisgICAgICAgICAgICAgICAgICAgIHNob3VsZCByZW1vdmUuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyBhIGNsZWFuIG9wZXJhdGlvbiB0byByZW1vdmUgYW55IG90aGVyIHN0YW1wcworICAgICAgICAgICAgICAgICAgICBpdCBzaG91bGQgYmUgcmVtb3Zpbmcgd2hlbiBjcmVhdGluZyBhIG5ldyBzdGFtcC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVU1NQVJZJz48Z2xvc3N0ZXJtPlNVTU1BUlk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSBzaG9ydCBzdW1tYXJ5IGZvciB0aGUgcmVjaXBlLCB3aGljaCBpcyA3MiBjaGFyYWN0ZXJzIG9yIGxlc3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1ZORElSJz48Z2xvc3N0ZXJtPlNWTkRJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIGZpbGVzIGNoZWNrZWQgb3V0IG9mIGEgU3VidmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gYXJlIHN0b3JlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktdCc+PHRpdGxlPlQ8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVCc+PGdsb3NzdGVybT5UPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+UG9pbnRzIHRvIGEgZGlyZWN0b3J5IHdlcmUgQml0QmFrZSBwbGFjZXMKKyAgICAgICAgICAgICAgICAgICAgdGVtcG9yYXJ5IGZpbGVzLCB3aGljaCBjb25zaXN0IG1vc3RseSBvZiB0YXNrIGxvZ3MgYW5kCisgICAgICAgICAgICAgICAgICAgIHNjcmlwdHMsIHdoZW4gYnVpbGRpbmcgYSBwYXJ0aWN1bGFyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UT1BESVInPjxnbG9zc3Rlcm0+VE9QRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgYnVpbGQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKzwhLS0KKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS11Jz48dGl0bGU+VTwvdGl0bGU+CisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXYnPjx0aXRsZT5WPC90aXRsZT4KKyAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS13Jz48dGl0bGU+VzwvdGl0bGU+CisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXgnPjx0aXRsZT5YPC90aXRsZT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnkteSc+PHRpdGxlPlk8L3RpdGxlPgorICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS16Jz48dGl0bGU+WjwvdGl0bGU+CisgICAgPC9nbG9zc2Rpdj4KKy0tPgorCisKKzwvZ2xvc3Nhcnk+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLXN0eWxlLmNzcyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLXN0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWRhMmE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtc3R5bGUuY3NzCkBAIC0wLDAgKzEsOTg0IEBACisvKgorICAgR2VuZXJpYyBYSFRNTCAvIERvY0Jvb2sgWEhUTUwgQ1NTIFN0eWxlc2hlZXQuCisKKyAgIEJyb3dzZXIgd3JhbmdsaW5nIGFuZCB0eXBvZ3JhcGhpYyBkZXNpZ24gYnkKKyAgICAgIE95dmluZCBLb2xhcyAvIHBpcHBpbkBnaW1wLm9yZworCisgICBDdXN0b21pc2VkIGZvciBQb2t5IGJ5CisgICAgICBNYXR0aGV3IEFsbHVtIC8gbWFsbHVtQG8taGFuZC5jb20KKworICAgVGhhbmtzIHRvOgorICAgICBMaWFtIFIuIEUuIFF1aW4KKyAgICAgV2lsbGlhbSBTa2FnZ3MKKyAgICAgSmFrdWIgU3RlaW5lcgorCisgICBTdHJ1Y3R1cmUKKyAgIC0tLS0tLS0tLQorCisgICBUaGUgc3R5bGVzaGVldCBpcyBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKKworICAgICAgIFBvc2l0aW9uaW5nCisgICAgICAgICAgTWFyZ2lucywgcGFkZGluZ3MsIHdpZHRoLCBmb250LXNpemUsIGNsZWFyaW5nLgorICAgICAgIERlY29yYXRpb25zCisgICAgICAgICAgQm9yZGVycywgc3R5bGUKKyAgICAgICBDb2xvcnMKKyAgICAgICAgICBDb2xvcnMKKyAgICAgICBHcmFwaGljcworICAgICAgICAgIEdyYXBoaWNhbCBiYWNrZ3JvdW5kcworICAgICAgIE5hc3R5IElFIHR3ZWFrcworICAgICAgICAgIFdvcmthcm91bmRzIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgaW4gaW50ZXJuZXQgZXhwbG9yZXIsCisgICAgICAgICAgY3VycmVudGx5IG1ha2VzIHRoZSBzdHlsZXNoZWV0IG5vbiB2YWxpZGF0aW5nLCBidXQgdXAgdW50aWwKKyAgICAgICAgICB0aGlzIHBvaW50IGl0IGlzIHZhbGlkYXRpbmcuCisgICAgICAgTW96aWxsYSBleHRlbnNpb25zCisgICAgICAgICAgVHJhbnNwYXJlbmN5IGZvciBmb290ZXIKKwkgIFJvdW5kZWQgY29ybmVycyBvbiBib3hlcworCisqLworCisKKyAgLyoqKioqKioqKioqKioqKiAvCisgLyAgUG9zaXRpb25pbmcgICAvCisvICoqKioqKioqKioqKioqKi8KKworYm9keSB7CisgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBTYW5zLCBzYW5zLXNlcmlmOworCisgIG1pbi13aWR0aDogNjQwcHg7CisgIHdpZHRoOiA4MCU7CisgIG1hcmdpbjogIDBlbSBhdXRvOworICBwYWRkaW5nOiAyZW0gNWVtIDVlbSA1ZW07CisgIGNvbG9yOiAjMzMzOworfQorCitoMSxoMixoMyxoNCxoNSxoNixoNyB7CisgIGZvbnQtZmFtaWx5OiBBcmlhbCwgU2FuczsKKyAgY29sb3I6ICMwMDU1N0Q7CisgIGNsZWFyOiBib3RoOworfQorCitoMSB7CisgIGZvbnQtc2l6ZTogMmVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMmVtIDBlbSAwZW0gMGVtOworfQorCitoMi5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMC4xMGVtIDBlbSAzLjBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjhlbTsKKyAgcGFkZGluZy1sZWZ0OiAyMCU7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworaDIgeworICBtYXJnaW46IDJlbSAwZW0gMC42NmVtIDBlbTsKKyAgcGFkZGluZzogMC41ZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS41ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMy5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQyLjE0JTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK2gzIHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0MCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNCB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDUgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g2IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLmF1dGhvcmdyb3VwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIHBhZGRpbmctdG9wOiAyNTZweDsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL2JpdGJha2UtdGl0bGUucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdG9wOworICBtYXJnaW4tdG9wOiAtMjU2cHg7CisgIHBhZGRpbmctcmlnaHQ6IDUwcHg7CisgIG1hcmdpbi1sZWZ0OiAwcHg7CisgIHRleHQtYWxpZ246IHJpZ2h0OworICB3aWR0aDogNzQwcHg7Cit9CisKK2gzLmF1dGhvciB7CisgIG1hcmdpbjogMGVtIDBtZSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgY29sb3I6ICMzMzM7CisgIGNsZWFyOiBib3RoOworfQorCisuYXV0aG9yIHR0LmVtYWlsIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKKy50aXRsZXBhZ2UgaHIgeworICB3aWR0aDogMGVtOworICBjbGVhcjogYm90aDsKK30KKworLnJldmhpc3RvcnkgeworICBwYWRkaW5nLXRvcDogMmVtOworICBjbGVhcjogYm90aDsKK30KKworLnRvYywKKy5saXN0LW9mLXRhYmxlcywKKy5saXN0LW9mLWV4YW1wbGVzLAorLmxpc3Qtb2YtZmlndXJlcyB7CisgIHBhZGRpbmc6IDEuMzNlbSAwZW0gMi41ZW0gMGVtOworICBjb2xvcjogIzAwNTU3RDsKK30KKworLnRvYyBwLAorLmxpc3Qtb2YtdGFibGVzIHAsCisubGlzdC1vZi1maWd1cmVzIHAsCisubGlzdC1vZi1leGFtcGxlcyBwIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDAuM2VtOworICBtYXJnaW46IDEuNWVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIHAgYiwKKy5saXN0LW9mLXRhYmxlcyBwIGIsCisubGlzdC1vZi1maWd1cmVzIHAgYiwKKy5saXN0LW9mLWV4YW1wbGVzIHAgYnsKKyAgZm9udC1zaXplOiAxMDAuMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisudG9jIGRsLAorLmxpc3Qtb2YtdGFibGVzIGRsLAorLmxpc3Qtb2YtZmlndXJlcyBkbCwKKy5saXN0LW9mLWV4YW1wbGVzIGRsIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGR0IHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkZCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMi42ZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2Lmdsb3NzYXJ5IGRsLAorZGl2LnZhcmlhYmxlbGlzdCBkbCB7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHdpZHRoOiAyMGVtOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworLnZhcmlhYmxlbGlzdCBkbCBkdCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworfQorCisuZ2xvc3NhcnkgZGwgZGQsCisudmFyaWFibGVsaXN0IGRsIGRkIHsKKyAgbWFyZ2luLXRvcDogLTFlbTsKKyAgbWFyZ2luLWxlZnQ6IDI1LjVlbTsKK30KKworLmdsb3NzYXJ5IGRkIHAsCisudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCitkaXYgcC5jb3B5cmlnaHQgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCitkaXYubGVnYWxub3RpY2UgcC5sZWdhbG5vdGljZS10aXRsZSB7CisgIG1hcmdpbi1ib3R0b206IDBlbTsKK30KKworcCB7CisgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworCit9CisKK2RsIHsKKyAgcGFkZGluZy10b3A6IDBlbTsKK30KKworaHIgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworCisubWVkaWFvYmplY3QsCisubWVkaWFvYmplY3RjbyB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworaW1nIHsKKyAgYm9yZGVyOiBub25lOworfQorCit1bCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDEuNWVtOworfQorCit1bCBsaSB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKwordWwgbGkgcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK3RhYmxlIHsKKyAgd2lkdGggOjEwMCU7Cit9CisKK3RoIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBmb250LXdlaWdodDogbm9ybWFsOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0ZCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworcCBhW2lkXSB7CisgIG1hcmdpbjogMHB4OworICBwYWRkaW5nOiAwcHg7CisgIGRpc3BsYXk6IGlubGluZTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKK30KKworYSB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBjb2xvcjogIzQ0NDsKK30KKworcHJlIHsKKyAgICBvdmVyZmxvdzogYXV0bzsKK30KKworYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAvKmZvbnQtd2VpZ2h0OiBib2xkOyovCit9CisKKy8qIFRoaXMgc3R5bGUgZGVmaW5lcyBob3cgdGhlIHBlcm1hbGluayBjaGFyYWN0ZXIKKyAgIGFwcGVhcnMgYnkgaXRzZWxmIGFuZCB3aGVuIGhvdmVyZWQgb3ZlciB3aXRoCisgICB0aGUgbW91c2UuICovCisKK1thbHQ9J1Blcm1hbGluayddIHsgY29sb3I6ICNlZWU7IH0KK1thbHQ9J1Blcm1hbGluayddOmhvdmVyIHsgY29sb3I6IGJsYWNrOyB9CisKKworZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlIHsKKyAgbWFyZ2luOiAxZW0gMGVtOworICBwYWRkaW5nOiAxZW07CisgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKK30KKworCitkaXYuaW5mb3JtYWxmaWd1cmUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWx0YWJsZSBwLnRpdGxlIGIsCitkaXYuZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5leGFtcGxlIHAudGl0bGUgYiwKK2Rpdi50YWJsZSBwLnRpdGxlIGJ7CisgICAgcGFkZGluZy10b3A6IDBlbTsKKyAgICBtYXJnaW4tdG9wOiAwZW07CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiwKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiBwICB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmctdG9wOiAwLjVlbTsKKyAgcGFkZGluZy1ib3R0b206IDAuNWVtOworfQorCisuZXBpZ3JhcGggeworICBwYWRkaW5nLWxlZnQ6IDU1JTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZXBpZ3JhcGggcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5lcGlncmFwaCAucXVvdGUgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisuZXBpZ3JhcGggLmF0dHJpYnV0aW9uIHsKKyAgZm9udC1zdHlsZTogbm9ybWFsOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworc3Bhbi5hcHBsaWNhdGlvbiB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnByb2dyYW1saXN0aW5nIHsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgZm9udC1zaXplOiA4MCU7CisgIHdoaXRlLXNwYWNlOiBwcmU7CisgIG1hcmdpbjogMS4zM2VtIDBlbTsKKyAgcGFkZGluZzogMS4zM2VtOworfQorCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgbWFyZ2luLXRvcDogMWVtOworICBtYXJnaW4tYm90dG9tOiAxZW07CisKK30KKworLyogZm9yY2UgZnVsbCB3aWR0aCBvZiB0YWJsZSB3aXRoaW4gZGl2ICovCisudGlwIHRhYmxlLAorLndhcm5pbmcgdGFibGUsCisuY2F1dGlvbiB0YWJsZSwKKy5ub3RlIHRhYmxlIHsKKyAgYm9yZGVyOiBub25lOworICB3aWR0aDogMTAwJTsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgcGFkZGluZzogMC44ZW0gMC4wZW0gMC4wZW0gMC4wZW07CisgIG1hcmdpbiA6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRpcCBwLAorLndhcm5pbmcgcCwKKy5jYXV0aW9uIHAsCisubm90ZSBwIHsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuNWVtOworICBwYWRkaW5nLXJpZ2h0OiAxZW07CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5hY3JvbnltIHsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgcGFkZGluZzogMC4wOWVtIDAuM2VtOworICBtYXJnaW46IDBlbTsKK30KKworLml0ZW1pemVkbGlzdCBsaSB7CisgIGNsZWFyOiBub25lOworfQorCisuZmlsZW5hbWUgeworICBmb250LXNpemU6IG1lZGl1bTsKKyAgZm9udC1mYW1pbHk6IENvdXJpZXIsIG1vbm9zcGFjZTsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAwZW07CisgIHRvcDogMGVtOworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NkZjsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBwb3NpdGlvbjogZml4ZWQ7CisgIGxlZnQ6IDBlbTsKKyAgYm90dG9tOiAwZW07CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIHdpZHRoOiAxMDAlOworfQorCisKK2Rpdi5uYXZoZWFkZXIgdGQsCitkaXYubmF2Zm9vdGVyIHRkIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGggeworICAvKmZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBUaW1lcywgc2VyaWY7Ki8KKyAgLypmb250LXNpemU6IHgtbGFyZ2U7Ki8KKyAgZm9udC1zaXplOiA4MCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLXRvcDogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItYm90dG9tOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGEsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGEgeworICBjb2xvcjogIzc3NzsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisvKiBub3JtYWwgdGV4dCBpbiB0aGUgZm9vdGVyICovCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIHsKKyAgY29sb3I6IGJsYWNrOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6dmlzaXRlZCwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTp2aXNpdGVkIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKKworLyogbGlua3MgaW4gaGVhZGVyIGFuZCBmb290ZXIgKi8KK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTpob3ZlciwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgY29sb3I6ICMzM2E7Cit9CisKK2Rpdi5uYXZoZWFkZXIgaHIsCitkaXYubmF2Zm9vdGVyIGhyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCisucWFuZGFzZXQgdHIucXVlc3Rpb24gdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy5xYW5kYXNldCB0ci5hbnN3ZXIgdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisuYW5zd2VyIHRkIHsKKyAgcGFkZGluZy1ib3R0b206IDEuNWVtOworfQorCisuZW1waGFzaXMgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworCisgIC8qKioqKioqKioqKioqIC8KKyAvIGRlY29yYXRpb25zICAvCisvICoqKioqKioqKioqKiovCisKKy50aXRsZXBhZ2UgeworfQorCisucGFydCAudGl0bGUgeworfQorCisuc3VidGl0bGUgeworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyoKK2gxIHsKKyAgYm9yZGVyOiBub25lOworfQorCitoMiB7CisgIGJvcmRlci10b3A6IHNvbGlkIDAuMmVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2gzIHsKKyAgYm9yZGVyLXRvcDogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g0IHsKKyAgYm9yZGVyOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDUgeworICBib3JkZXI6IDBlbTsKK30KKyovCisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworLnF1ZXN0aW9uIHRkIHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOworfQorCisuYW5zd2VyIHsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBib3JkZXItdG9wOiAxcHggc29saWQ7Cit9CisKKyAgLyoqKioqKioqKiAvCisgLyAgY29sb3JzICAvCisvICoqKioqKioqKi8KKworYm9keSB7CisgIGNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworYSB7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworfQorCithOmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RlZGVkZTsKK30KKworCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoNywKK2g4IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisKK2hyIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCisKKy50aXAsIC53YXJuaW5nLCAuY2F1dGlvbiwgLm5vdGUgeworICBib3JkZXItY29sb3I6ICNmZmY7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7Cit9CisKKworLndhcm5pbmcgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy50aXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisubm90ZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGNvbG9yOiAjMDQ0OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKK3ByZS5wcm9ncmFtbGlzdGluZyB7CisgIGNvbG9yOiBibGFjazsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworICBib3JkZXItd2lkdGg6IDJweDsKK30KKworLmd1aW1lbnUsCisuZ3VpbGFiZWwsCisuZ3VpbWVudWl0ZW0geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGJvcmRlci1jb2xvcjogIzk5OTsKK30KKworCitkaXYubmF2aGVhZGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCitkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCisgIC8qKioqKioqKioqKiAvCisgLyAgZ3JhcGhpY3MgIC8KKy8gKioqKioqKioqKiovCisKKy8qCitib2R5IHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvYm9keV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLm5hdmhlYWRlciwKKy5ub3RlLAorLnRpcCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL25vdGVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy53YXJuaW5nLAorLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy93YXJuaW5nX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisuZmlndXJlLAorLmluZm9ybWFsZmlndXJlLAorLmV4YW1wbGUsCisuaW5mb3JtYWxleGFtcGxlLAorLnRhYmxlLAorLmluZm9ybWFsdGFibGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9maWd1cmVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKyovCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoN3sKK30KKworLyoKK0V4YW1wbGUgb2YgaG93IHRvIHN0aWNrIGFuIGltYWdlIGFzIHBhcnQgb2YgdGhlIHRpdGxlLgorCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvd2hpdGUtb24tYmxhY2sucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworfQorKi8KKworZGl2LnByZWZhY2UgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuY29sb3Bob24gLnRpdGxlLAorZGl2LmNoYXB0ZXIgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworfQorCitkaXYuc2VjdGlvbiBkaXYuc2VjdGlvbiAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5zZWN0MiAudGl0bGVwYWdlIC50aXRsZSB7CisgICAgYmFja2dyb3VuZDogbm9uZTsKK30KKworCitoMS50aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBoZWlnaHQ6IDI1NnB4OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworfQorCitoMi5zdWJ0aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworICB3aWR0aDogMHB4OworICBkaXNwbGF5OiBub25lOworfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gIHBpcHBpbi5naW1wLm9yZyBzcGVjaWZpYyBhbHRlcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIGNvbG9yOiAjNzc3OworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAwOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMHB4OworICBsZWZ0OiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDUwcHg7CisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9oZWFkaW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CisgIGJvcmRlcjogbm9uZTsKK30KKworZGl2LmhlYWRpbmcgYSB7CisgIGNvbG9yOiAjNDQ0OworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlcjogbm9uZTsKKyAgY29sb3I6ICNkZGQ7CisgIGZvbnQtc2l6ZTogODAlOworICB0ZXh0LWFsaWduOnJpZ2h0OworCisgIHdpZHRoOiAxMDAlOworICBwYWRkaW5nLXRvcDogMTBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDBweDsKKyAgbGVmdDogMHB4OworCisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9mb290aW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworfQorKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKiAvCisgLyAgbmFzdHkgaWUgdHdlYWtzICAvCisvICoqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7CisgIG1hcmdpbi1sZWZ0OmV4cHJlc3Npb24oIi01ZW0iKTsKK30KK2JvZHkgeworICBwYWRkaW5nOmV4cHJlc3Npb24oIjRlbSA1ZW0gMGVtIDVlbSIpOworfQorKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyBtb3ppbGxhIHZlbmRvciBzcGVjaWZpYyBjc3MgZXh0ZW5zaW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICAtbW96LW9wYWNpdHk6IDAuOGVtOworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUsCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjVlbTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjNlbTsKK30KKyovCisKK3RhYmxlIHRyIHRkIHRhYmxlIHRyIHRkIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCitociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3RhYmxlIHsKKyAgYm9yZGVyOiAwZW07Cit9CisKKyAucGhvdG8geworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiAgIDEuNWVtOworICBtYXJnaW4tYm90dG9tOiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXgtd2lkdGg6ICAgICAgMTdlbTsKKyAgYm9yZGVyOiAgICAgMXB4IHNvbGlkIGdyYXk7CisgIHBhZGRpbmc6ICAgIDNweDsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisgLnNlcGVyYXRvciB7CisgICBwYWRkaW5nLXRvcDogMmVtOworICAgY2xlYXI6IGJvdGg7CisgIH0KKworICAjdmFsaWRhdG9ycyB7CisgICAgICBtYXJnaW4tdG9wOiA1ZW07CisgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgIGNvbG9yOiAjNzc3OworICB9CisgIEBtZWRpYSBwcmludCB7CisgICAgICBib2R5IHsKKyAgICAgICAgICBmb250LXNpemU6IDhwdDsKKyAgICAgIH0KKyAgICAgIC5ub3ByaW50IHsKKyAgICAgICAgICBkaXNwbGF5OiBub25lOworICAgICAgfQorICB9CisKKworLnRpcCwKKy5ub3RlIHsKKyAgIGJhY2tncm91bmQ6ICNmMGYwZjI7CisgICBjb2xvcjogIzMzMzsKKyAgIHBhZGRpbmc6IDIwcHg7CisgICBtYXJnaW46IDIwcHg7Cit9CisKKy50aXAgaDMsCisubm90ZSBoMyB7CisgICBwYWRkaW5nOiAwZW07CisgICBtYXJnaW46IDBlbTsKKyAgIGZvbnQtc2l6ZTogMmVtOworICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICBjb2xvcjogIzMzMzsKK30KKworLnRpcCBhLAorLm5vdGUgYSB7CisgICBjb2xvcjogIzMzMzsKKyAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuZm9vdG5vdGUgeworICAgZm9udC1zaXplOiBzbWFsbDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisvKiBDaGFuZ2VzIHRoZSBhbm5vdW5jZW1lbnQgdGV4dCAqLworLnRpcCBoMywKKy53YXJuaW5nIGgzLAorLmNhdXRpb24gaDMsCisubm90ZSBoMyB7CisgICBmb250LXNpemU6bGFyZ2U7CisgICBjb2xvcjogIzAwNTU3RDsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLnhtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmZmOTMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwueG1sCkBAIC0wLDAgKzEsODggQEAKKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiPgorCis8Ym9vayBpZD0nYml0YmFrZS11c2VyLW1hbnVhbCcgbGFuZz0nZW4nCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIgorICAgICAgICB4bWxucz0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgICAgICAgID4KKyAgICA8Ym9va2luZm8+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0nZmlndXJlcy9iaXRiYWtlLXRpdGxlLnBuZycKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSdTVkcnCisgICAgICAgICAgICAgICAgICAgIGFsaWduPSdsZWZ0JyBzY2FsZWZpdD0nMScgd2lkdGg9JzEwMCUnLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgIDwvbWVkaWFvYmplY3Q+CisKKyAgICAgICAgPHRpdGxlPgorICAgICAgICAgICAgQml0QmFrZSBVc2VyIE1hbnVhbAorICAgICAgICA8L3RpdGxlPgorCisgICAgICAgIDxhdXRob3Jncm91cD4KKyAgICAgICAgICAgIDxhdXRob3I+CisgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5SaWNoYXJkIFB1cmRpZSwgQ2hyaXMgTGFyc29uLCBhbmQgPC9maXJzdG5hbWU+IDxzdXJuYW1lPlBoaWwgQmx1bmRlbGw8L3N1cm5hbWU+CisgICAgICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8b3JnbmFtZT5CaXRCYWtlIENvbW11bml0eTwvb3JnbmFtZT4KKyAgICAgICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgIDxlbWFpbD5iaXRiYWtlLWRldmVsQGxpc3RzLm9wZW5lbWJlZGRlZC5vcmc8L2VtYWlsPgorICAgICAgICAgICAgPC9hdXRob3I+CisgICAgICAgIDwvYXV0aG9yZ3JvdXA+CisKKzwhLS0KKyMgQWRkIGluIHNvbWUgcmV2aXNpb24gaGlzdG9yeSBpZiB3ZSB3YW50IGl0IGhlcmUuCisgICAgICAgIDxyZXZoaXN0b3J5PgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+eC54PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+ZGQgbW9udGggeWVhcjwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlNvbWUgcmVsZXZlbnQgY29tbWVudDwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPngueDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPmRkIG1vbnRoIHllYXI8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5Tb21lIHJlbGV2ZW50IGNvbW1lbnQ8L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj54Lng8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5kZCBtb250aCB5ZWFyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+U29tZSByZWxldmVudCBjb21tZW50PC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+eC54PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+ZGQgbW9udGggeWVhcjwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlNvbWUgcmVsZXZlbnQgY29tbWVudDwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICA8L3Jldmhpc3Rvcnk+CistLT4KKworICAgICAgICA8Y29weXJpZ2h0PgorICAgICAgICAgICAgPHllYXI+MjAwNC0yMDE1PC95ZWFyPgorICAgICAgICAgICAgPGhvbGRlcj5SaWNoYXJkIFB1cmRpZTwvaG9sZGVyPgorICAgICAgICAgICAgPGhvbGRlcj5DaHJpcyBMYXJzb248L2hvbGRlcj4KKyAgICAgICAgICAgIDxob2xkZXI+YW5kIFBoaWwgQmx1bmRlbGw8L2hvbGRlcj4KKyAgICAgICAgPC9jb3B5cmlnaHQ+CisKKyAgICAgICAgPGxlZ2Fsbm90aWNlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIExpY2Vuc2UuCisgICAgICAgICAgICAgICAgVG8gdmlldyBhIGNvcHkgb2YgdGhpcyBsaWNlbnNlLCB2aXNpdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzIuNS8iPmh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzIuNS88L3VsaW5rPgorICAgICAgICAgICAgICAgIG9yIHNlbmQgYSBsZXR0ZXIgdG8gQ3JlYXRpdmUgQ29tbW9ucywgNDQ0IENhc3RybyBTdHJlZXQsCisgICAgICAgICAgICAgICAgU3VpdGUgOTAwLCBNb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhIDk0MDQxLCBVU0EuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGVnYWxub3RpY2U+CisgICAgPC9ib29raW5mbz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImJpdGJha2UtdXNlci1tYW51YWwtaW50cm8ueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJiaXRiYWtlLXVzZXItbWFudWFsLWV4ZWN1dGlvbi54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImJpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGEueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJiaXRiYWtlLXVzZXItbWFudWFsLWZldGNoaW5nLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYml0YmFrZS11c2VyLW1hbnVhbC1yZWYtdmFyaWFibGVzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYml0YmFrZS11c2VyLW1hbnVhbC1oZWxsby54bWwiLz4KKworPC9ib29rPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2ZpZ3VyZXMvYml0YmFrZS10aXRsZS5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvZmlndXJlcy9iaXRiYWtlLXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjI5MDE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2ZpZ3VyZXMvYml0YmFrZS10aXRsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2h0bWwuY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2h0bWwuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZWRmZDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvaHRtbC5jc3MKQEAgLTAsMCArMSwyODEgQEAKKy8qIEZldWlsbGUgZGUgc3R5bGUgRG9jQm9vayBkdSBwcm9qZXQgVHJhZHVjLm9yZyAgICAgICAgICAgICAgICAqLworLyogRG9jQm9vayBDU1Mgc3R5bGVzaGVldCBvZiB0aGUgVHJhZHVjLm9yZyBwcm9qZWN0ICAgICAgICAgICAgICovCisKKy8qIChjKSBKZWFuLVBoaWxpcHBlIEd16XJhcmQgLSAxNCBhb/t0IDIwMDQgICAgICAgICAgICAgICAgICAgICAqLworLyogKGMpIEplYW4tUGhpbGlwcGUgR3XpcmFyZCAtIDE0IEF1Z3VzdCAyMDA0ICAgICAgICAgICAgICAgICAgICovCisKKy8qIENldHRlIGZldWlsbGUgZGUgc3R5bGUgZXN0IGxpYnJlLCB2b3VzIHBvdXZleiBsYSAgICAgICAgICAgICAqLworLyogcmVkaXN0cmlidWVyIGV0IGxhIG1vZGlmaWVyIHNlbG9uIGxlcyB0ZXJtZXMgZGUgbGEgTGljZW5jZSAgICovCisvKiBBcnQgTGlicmUuIFZvdXMgdHJvdXZlcmV6IHVuIGV4ZW1wbGFpcmUgZGUgY2V0dGUgTGljZW5jZSBzdXIgKi8KKy8qIGh0dHA6Ly90aWdyZXJheWUub3JnL1BldGl0LWd1aWRlLWR1LXRyYWR1Y3RldXIuaHRtbCNsaWNlbmNlLWFydC1saWJyZSAqLworCisvKiBUaGlzIHdvcmsgb2YgYXJ0IGlzIGZyZWUsIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAgICAgKi8KKy8qIG1vZGlmeSBpdCBhY2NvcmRpbmcgdG8gdGVybXMgb2YgdGhlIEZyZWUgQXJ0IGxpY2Vuc2UuIFlvdSAgICAqLworLyogd2lsbCBmaW5kIGEgc3BlY2ltZW4gb2YgdGhpcyBsaWNlbnNlIG9uIHRoZSBDb3B5bGVmdCAgICAgICAgICovCisvKiBBdHRpdHVkZSB3ZWIgc2l0ZTogaHR0cDovL2FydGxpYnJlLm9yZyBhcyB3ZWxsIGFzIG9uIG90aGVyICAgKi8KKy8qIHNpdGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogUGxlYXNlIG5vdGUgdGhhdCB0aGUgRnJlbmNoIHZlcnNpb24gb2YgdGhpcyBsaWNlbmNlIGFzIHNob3duICovCisvKiBvbiBodHRwOi8vdGlncmVyYXllLm9yZy9QZXRpdC1ndWlkZS1kdS10cmFkdWN0ZXVyLmh0bWwjbGljZW5jZS1hcnQtbGlicmUgKi8KKy8qIGlzIG9ubHkgb2ZmaWNpYWwgbGljZW5jZSBvZiB0aGlzIGRvY3VtZW50LiBUaGUgRW5nbGlzaCAgICAgICAqLworLyogaXMgb25seSBwcm92aWRlZCB0byBoZWxwIHlvdSB1bmRlcnN0YW5kIHRoaXMgbGljZW5jZS4gICAgICAgICovCisKKy8qIExhIGRlcm5p6HJlIHZlcnNpb24gZGUgY2V0dGUgZmV1aWxsZSBkZSBzdHlsZSBlc3QgdG91am91cnMgICAqLworLyogZGlzcG9uaWJsZSBzdXKgOiBodHRwOi8vdGlncmVyYXllLm9yZy9zdHlsZS5jc3MgICAgICAgICAgICAgICovCisvKiBFbGxlIGVzdCDpZ2FsZW1lbnQgZGlzcG9uaWJsZSBzdXKgOiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGh0dHA6Ly93d3cudHJhZHVjLm9yZy9kb2NzL0hPV1RPL2xlY3R1cmUvc3R5bGUuY3NzICAgICAgICAgICAqLworCisvKiBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzdHlsZXNoZWV0IGlzIGF2YWlsYWJsZSBmcm9tOiAgICAgKi8KKy8qIGh0dHA6Ly90aWdyZXJheWUub3JnL3N0eWxlLmNzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogSXQgaXMgYWxzbyBhdmFpbGFibGUgb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBodHRwOi8vd3d3LnRyYWR1Yy5vcmcvZG9jcy9IT1dUTy9sZWN0dXJlL3N0eWxlLmNzcyAgICAgICAgICAgKi8KKworLyogTido6XNpdGV6IHBhcyDgIGVudm95ZXIgdm9zIGNvbW1lbnRhaXJlcyBldCBjb3JyZWN0aW9ucyDgICAgICovCisvKiBKZWFuLVBoaWxpcHBlIEd16XJhcmQgPGplYW4tcGhpbGlwcGUuZ3VlcmFyZEB0aWdyZXJheWUub3JnPiAgKi8KKworLyogUGxlYXNlIHNlbmQgZmVlZGJhY2sgYW5kIGJ1ZyByZXBvcnRzIHRvICAgICAgICAgICAgICAgICAgICAgICovCisvKiBKZWFuLVBoaWxpcHBlIEd16XJhcmQgPGplYW4tcGhpbGlwcGUuZ3VlcmFyZEB0aWdyZXJheWUub3JnPiAgKi8KKworLyogJElkOiBzdHlsZS5jc3MsdiAxLjE0IDIwMDQvMDkvMTAgMjA6MTI6MDkgZmV2cmllciBFeHAgZmV2cmllciAkICovCisKKy8qIFBy6XNlbnRhdGlvbiBn6W7pcmFsZSBkdSBkb2N1bWVudCAqLworLyogT3ZlcmFsbCBkb2N1bWVudCBwcmVzZW50YXRpb24gKi8KKworYm9keSB7CisgICAgLyoKKyAgICBmb250LWZhbWlseTogQXBvbGxpbmUsICJVUlcgUGFsbGFkaW8gTCIsIEdhcmFtb25kLCBqR2FyYW1vbmQsCisgICAgICAgICAgICAgICAgICJCaXRzdHJlYW0gQ3liZXJiaXQiLCAiUGFsYXRpbm8gTGlub3R5cGUiLCBzZXJpZjsKKyAgICAgKi8KKyAgICBtYXJnaW46IDclOworICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworfQorCisvKiBUYWlsbGUgZHUgdGV4dGUgKi8KKy8qIFRleHQgc2l6ZSAqLworCisqIHsgZm9udC1zaXplOiAxMDAlOyB9CisKKy8qIEdlc3Rpb24gZGVzIHRleHRlcyBtaXMgZW4gcmVsaWVmIGltYnJpcXXpcyAqLworLyogRW1iZWRkZWQgZW1waGFzaXMgKi8KKworZW0geyBmb250LXN0eWxlOiBpdGFsaWM7IH0KK2VtIGVtIHsgZm9udC1zdHlsZTogbm9ybWFsOyB9CitlbSBlbSBlbSB7IGZvbnQtc3R5bGU6IGl0YWxpYzsgfQorCisvKiBUaXRyZXMgKi8KKy8qIFRpdGxlcyAqLworCitoMSB7IGZvbnQtc2l6ZTogMjAwJTsgZm9udC13ZWlnaHQ6IDkwMDsgfQoraDIgeyBmb250LXNpemU6IDE2MCU7IGZvbnQtd2VpZ2h0OiA5MDA7IH0KK2gzIHsgZm9udC1zaXplOiAxMzAlOyBmb250LXdlaWdodDogYm9sZDsgfQoraDQgeyBmb250LXNpemU6IDExNSU7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CitoNSB7IGZvbnQtc2l6ZTogMTA4JTsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KK2g2IHsgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsgfQorCisvKiBOb20gZGUgZmFtaWxsZSBlbiBwZXRpdGVzIG1hanVzY3VsZXMgKHVuaXF1ZW1lbnQgZW4gZnJhbudhaXMpICovCisvKiBMYXN0IG5hbWVzIGluIHNtYWxsIGNhcHMgKGZvciBGcmVuY2ggb25seSkgKi8KKworKltjbGFzc349InN1cm5hbWUiXTpsYW5nKGZyKSB7IGZvbnQtdmFyaWFudDogc21hbGwtY2FwczsgfQorCisvKiBCbG9jcyBkZSBjaXRhdGlvbiAqLworLyogUXVvdGF0aW9uIGJsb2NzICovCisKK2RpdltjbGFzc349ImJsb2NrcXVvdGUiXSB7CisgIGJvcmRlcjogc29saWQgMnB4ICNBQUE7CisgIHBhZGRpbmc6IDVweDsKKyAgbWFyZ2luOiA1cHg7Cit9CisKK2RpdltjbGFzc349ImJsb2NrcXVvdGUiXSA+IHRhYmxlIHsKKyAgYm9yZGVyOiBub25lOworfQorCisvKiBCbG9jcyBsaXTpcmF1eKA6IGZvbmQgZ3JpcyBjbGFpciAqLworLyogTGl0ZXJhbCBibG9jczogbGlnaHQgZ3JheSBiYWNrZ3JvdW5kICovCisKKypbY2xhc3N+PSJsaXRlcmFsbGF5b3V0Il0geworICBiYWNrZ3JvdW5kOiAjZjBmMGYwOworICBwYWRkaW5nOiA1cHg7CisgIG1hcmdpbjogNXB4OworfQorCisvKiBQcm9ncmFtbWVzIGV0IGNhcHR1cmVzIHRleHRloDogZm9uZCBibGV1IGNsYWlyICovCisvKiBMaXN0aW5nIGFuZCB0ZXh0IHNjcmVlbiBzbmFwc2hvdHM6IGxpZ2h0IGJsdWUgYmFja2dyb3VuZCAqLworCisqW2NsYXNzfj0icHJvZ3JhbWxpc3RpbmciXSwgKltjbGFzc349InNjcmVlbiJdIHsKKyAgYmFja2dyb3VuZDogI2YwZjBmZjsKKyAgcGFkZGluZzogNXB4OworICBtYXJnaW46IDVweDsKK30KKworLyogTGVzIHRleHRlcyDgIHJlbXBsYWNlciBzb250IHN1cmxpZ27pcyBlbiB2ZXJ0IHDibGUgKi8KKy8qIFJlcGxhY2VhYmxlIHRleHQgaW4gaGlnaGxpZ2h0ZWQgaW4gcGFsZSBncmVlbiAqLworCisqW2NsYXNzfj0icmVwbGFjZWFibGUiXSB7IAorICAgIGJhY2tncm91bmQtY29sb3I6ICM5OGZiOTg7CisgICAgZm9udC1zdHlsZTogbm9ybWFsOyB9CisKKy8qIFRhYmxlc6A6IGZvbmRzIGdyaXMgY2xhaXIgJiBib3JkcyBzaW1wbGVzICovCisvKiBUYWJsZXM6IGxpZ2h0IGdyYXkgYmFja2dyb3VuZCBhbmQgc29saWQgYm9yZGVycyAqLworCisqW2NsYXNzfj0idGFibGUiXSAqW2NsYXNzfj0idGl0bGUiXSB7IHdpZHRoOjEwMCU7IGJvcmRlcjogMHB4OyB9CisKK3RhYmxlIHsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjYWFhOworICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CisgICAgcGFkZGluZzogMnB4OworICAgIG1hcmdpbjogNXB4OworfQorCisvKiBMaXN0ZXMgc2ltcGxlcyBlbiBzdHlsZSB0YWJsZSAqLworLyogU2ltcGxlcyBsaXN0cyBpbiB0YWJsZSBwcmVzZW50YXRpb24gKi8KKwordGFibGVbY2xhc3N+PSJzaW1wbGVsaXN0Il0geworICAgIGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7CisgICAgbWFyZ2luOiA1cHg7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggI0FBQTsKK30KKwordGFibGVbY2xhc3N+PSJzaW1wbGVsaXN0Il0gdGQgeworICAgIGJvcmRlcjogc29saWQgMXB4ICNBQUE7Cit9CisKKy8qIExlcyB0YWJsZXMgKi8KKy8qIFRhYmxlcyAqLworCisqW2NsYXNzfj0idGFibGUiXSB0YWJsZSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjQUFBOworfQorKltjbGFzc349ImluZm9ybWFsdGFibGUiXSB0YWJsZSB7IGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7IH0KKwordGgsdGQgeworICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgIHBhZGRpbmc6IDAuMWVtIDAuM2VtOworICAgIGVtcHR5LWNlbGxzOiBzaG93OyAKK30KKworLyogQWxpZ25lbWVudCBkZXMgY29sb25uZXMgKi8KKy8qIENvbHVubXMgYWxpZ25tZW50ICovCisKK3RkW2FsaWduPWNlbnRlcl0gLCAgdGhbYWxpZ249Y2VudGVyXSAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KK3RkW2FsaWduPXJpZ2h0XSAsICAgdGhbYWxpZ249cmlnaHRdICAgeyB0ZXh0LWFsaWduOiByaWdodDsgfQordGRbYWxpZ249bGVmdF0gLCAgICB0aFthbGlnbj1sZWZ0XSAgICB7IHRleHQtYWxpZ246IGxlZnQ7IH0KK3RkW2FsaWduPWp1c3RpZnldICwgdGhbYWxpZ249anVzdGlmeV0geyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9CisKKy8qIFBhcyBkZSBtYXJnZSBhdXRvdXIgZGVzIGltYWdlcyAqLworLyogTm8gaW5zaWRlIG1hcmdpbnMgZm9yIGltYWdlcyAqLworCitpbWcgeyBib3JkZXI6IDA7IH0KKworLyogTGVzIGxpZW5zIG5lIHNvbnQgcGFzIHNvdWxpZ27pcyAqLworLyogTm8gdW5kZXJsaW5lcyBmb3IgbGlua3MgKi8KKworOmxpbmsgLCA6dmlzaXRlZCAsIDphY3RpdmUgeyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0KKworLyogUHJ1ZGVuY2WgOiBjYWRyZSBqYXVuZSBldCBmb25kIGphdW5lIGNsYWlyICovCisvKiBDYXV0aW9uOiB5ZWxsb3cgYm9yZGVyIGFuZCBsaWdodCB5ZWxsb3cgYmFja2dyb3VuZCAqLworCisqW2NsYXNzfj0iY2F1dGlvbiJdIHsKKyAgICBib3JkZXI6IHNvbGlkIDJweCB5ZWxsb3c7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZlMDsKKyAgICBwYWRkaW5nOiAxZW0gNnB4IDFlbSA7CisgICAgbWFyZ2luOiA1cHg7Cit9CisKKypbY2xhc3N+PSJjYXV0aW9uIl0gdGggeworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGUKK30KKworKltjbGFzc349ImNhdXRpb24iXSB0YWJsZSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZlMDsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKy8qIE5vdGUgaW1wb3J0YW50ZaA6IGNhZHJlIGphdW5lIGV0IGZvbmQgamF1bmUgY2xhaXIgKi8KKy8qIEltcG9ydGFudDogeWVsbG93IGJvcmRlciBhbmQgbGlnaHQgeWVsbG93IGJhY2tncm91bmQgKi8KKworKltjbGFzc349ImltcG9ydGFudCJdIHsKKyAgICBib3JkZXI6IHNvbGlkIDJweCB5ZWxsb3c7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZlMDsKKyAgICBwYWRkaW5nOiAxZW0gNnB4IDFlbTsKKyAgICBtYXJnaW46IDVweDsKK30KKworKltjbGFzc349ImltcG9ydGFudCJdIHRoIHsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlCit9CisKKypbY2xhc3N+PSJpbXBvcnRhbnQiXSB0YWJsZSAgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZTA7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKiBNaXNlIGVuIOl2aWRlbmNloDogdGV4dGUgbOln6HJlbWVudCBwbHVzIGdyYW5kICovCisvKiBIaWdobGlnaHRzOiBzbGlnaHRseSBsYXJnZXIgdGV4dHMgKi8KKworKltjbGFzc349ImhpZ2hsaWdodHMiXSB7CisgICAgZm9udC1zaXplOiAgMTEwJTsKK30KKworLyogTm90ZaA6IGNhZHJlIGJsZXUgZXQgZm9uZCBibGV1IGNsYWlyICovCisvKiBOb3RlczogYmx1ZSBib3JkZXIgYW5kIGxpZ2h0IGJsdWUgYmFja2dyb3VuZCAqLworCisqW2NsYXNzfj0ibm90ZSJdICAgeworICAgIGJvcmRlcjogc29saWQgMnB4ICM3MDk5QzU7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmZjsKKyAgICBwYWRkaW5nOiAxZW0gNnB4IDFlbSA7CisgICAgbWFyZ2luOiA1cHg7Cit9CisKKypbY2xhc3N+PSJub3RlIl0gdGggeworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGUKK30KKworKltjbGFzc349Im5vdGUiXSB0YWJsZSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmZjsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKy8qIEFzdHVjZaA6IGNhZHJlIHZlcnQgZXQgZm9uZCB2ZXJ0IGNsYWlyICovCisvKiBUaXA6IGdyZWVuIGJvcmRlciBhbmQgbGlnaHQgZ3JlZW4gYmFja2dyb3VuZCAqLworCisqW2NsYXNzfj0idGlwIl0geworICAgIGJvcmRlcjogc29saWQgMnB4ICMwMGZmMDA7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZmZmZjsKKyAgICBwYWRkaW5nOiAxZW0gNnB4IDFlbSA7CisgICAgbWFyZ2luOiA1cHg7Cit9CisKKypbY2xhc3N+PSJ0aXAiXSB0aCB7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKK30KKworKltjbGFzc349InRpcCJdIHRhYmxlIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmZmZmOworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyogQXZlcnRpc3NlbWVudKA6IGNhZHJlIHJvdWdlIGV0IGZvbmQgcm91Z2UgY2xhaXIgKi8KKy8qIFdhcm5pbmc6IHJlZCBib3JkZXIgYW5kIGxpZ2h0IHJlZCBiYWNrZ3JvdW5kICovCisKKypbY2xhc3N+PSJ3YXJuaW5nIl0geworICAgIGJvcmRlcjogc29saWQgMnB4ICNmZjAwMDA7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjBmMDsgCisgICAgcGFkZGluZzogMWVtIDZweCAxZW0gOworICAgIG1hcmdpbjogNXB4OworfQorCisqW2NsYXNzfj0id2FybmluZyJdIHRoIHsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorICAgICAgICAgICAgICAgICAgICAKKworKltjbGFzc349Indhcm5pbmciXSB0YWJsZSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjBmMDsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKy8qIEZpbiAqLworLyogVGhlIEVuZCAqLworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UuMSBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YzhkOTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UuMQpAQCAtMCwwICsxLDE0MiBAQAorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZXksIEVNQUNTOiAtKi0gbnJvZmYgLSotCisuXCIgRmlyc3QgcGFyYW1ldGVyLCBOQU1FLCBzaG91bGQgYmUgYWxsIGNhcHMKKy5cIiBTZWNvbmQgcGFyYW1ldGVyLCBTRUNUSU9OLCBzaG91bGQgYmUgMS04LCBtYXliZSB3LyBzdWJzZWN0aW9uCisuXCIgb3RoZXIgcGFyYW1ldGVycyBhcmUgYWxsb3dlZDogc2VlIG1hbig3KSwgbWFuKDEpCisuVEggQklUQkFLRSAxICJOb3ZlbWJlciAxOSwgMjAwNiIKKy5cIiBQbGVhc2UgYWRqdXN0IHRoaXMgZGF0ZSB3aGVuZXZlciByZXZpc2luZyB0aGUgbWFucGFnZS4KKy5cIgorLlwiIFNvbWUgcm9mZiBtYWNyb3MsIGZvciByZWZlcmVuY2U6CisuXCIgLm5oICAgICAgICBkaXNhYmxlIGh5cGhlbmF0aW9uCisuXCIgLmh5ICAgICAgICBlbmFibGUgaHlwaGVuYXRpb24KKy5cIiAuYWQgbCAgICAgIGxlZnQganVzdGlmeQorLlwiIC5hZCBiICAgICAganVzdGlmeSB0byBib3RoIGxlZnQgYW5kIHJpZ2h0IG1hcmdpbnMKKy5cIiAubmYgICAgICAgIGRpc2FibGUgZmlsbGluZworLlwiIC5maSAgICAgICAgZW5hYmxlIGZpbGxpbmcKKy5cIiAuYnIgICAgICAgIGluc2VydCBsaW5lIGJyZWFrCisuXCIgLnNwIDxuPiAgICBpbnNlcnQgbisxIGVtcHR5IGxpbmVzCisuXCIgZm9yIG1hbnBhZ2Utc3BlY2lmaWMgbWFjcm9zLCBzZWUgbWFuKDcpCisuU0ggTkFNRQorQml0QmFrZSBcLSBzaW1wbGUgdG9vbCBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0YXNrcworLlNIIFNZTk9QU0lTCisuQiBiaXRiYWtlCisuUkkgWyBvcHRpb25zIF0gIiBwYWNrYWdlbmFtZXMiCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhpcyBtYW51YWwgcGFnZSBkb2N1bWVudHMgYnJpZWZseSB0aGUKKy5CIGJpdGJha2UKK2NvbW1hbmQuCisuUFAKKy5cIiBUZVggdXNlcnMgbWF5IGJlIG1vcmUgY29tZm9ydGFibGUgd2l0aCB0aGUgXGZCPHdoYXRldmVyPlxmUCBhbmQKKy5cIiBcZkk8d2hhdGV2ZXI+XGZQIGVzY2FwZSBzZXF1ZW5jZXMgdG8gaW52b2RlIGJvbGQgZmFjZSBhbmQgaXRhbGljcywgCisuXCIgcmVzcGVjdGl2ZWx5LgorXGZCYml0YmFrZVxmUCBpcyBhIHByb2dyYW0gdGhhdCBleGVjdXRlcyB0aGUgc3BlY2lmaWVkIHRhc2sgKGRlZmF1bHQgaXMgJ2J1aWxkJykKK2ZvciBhIGdpdmVuIHNldCBvZiBCaXRCYWtlIGZpbGVzLgorLmJyCitJdCBleHBlY3RzIHRoYXQgQkJGSUxFUyBpcyBkZWZpbmVkLCB3aGljaCBpcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGZpbGVzIHRvCitiZSBleGVjdXRlZC4gQkJGSUxFUyBkb2VzIHN1cHBvcnQgd2lsZGNhcmRzLgorLmJyCitEZWZhdWx0IEJCRklMRVMgYXJlIHRoZSAuYmIgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorLlNIIE9QVElPTlMKK1RoaXMgcHJvZ3JhbSBmb2xsb3cgdGhlIHVzdWFsIEdOVSBjb21tYW5kIGxpbmUgc3ludGF4LCB3aXRoIGxvbmcKK29wdGlvbnMgc3RhcnRpbmcgd2l0aCB0d28gZGFzaGVzIChgLScpLgorLlRQCisuQiBcLWgsIFwtXC1oZWxwCitTaG93IHN1bW1hcnkgb2Ygb3B0aW9ucy4KKy5UUAorLkIgXC1cLXZlcnNpb24KK1Nob3cgdmVyc2lvbiBvZiBwcm9ncmFtLgorLlRQCisuQiBcLWJCVUlMREZJTEUsIFwtXC1idWlsZGZpbGU9QlVJTERGSUxFCitleGVjdXRlIHRoZSB0YXNrIGFnYWluc3QgdGhpcyAuYmIgZmlsZSwgcmF0aGVyIHRoYW4gYSBwYWNrYWdlIGZyb20gQkJGSUxFUy4KKy5UUAorLkIgXC1rLCBcLVwtY29udGludWUKK2NvbnRpbnVlIGFzIG11Y2ggYXMgcG9zc2libGUgYWZ0ZXIgYW4gZXJyb3IuIFdoaWxlIHRoZSB0YXJnZXQgdGhhdCBmYWlsZWQsIGFuZAordGhvc2UgdGhhdCBkZXBlbmQgb24gaXQsIGNhbm5vdCBiZSByZW1hZGUsIHRoZSBvdGhlciBkZXBlbmRlbmNpZXMgb2YgdGhlc2UKK3RhcmdldHMgY2FuIGJlIHByb2Nlc3NlZCBhbGwgdGhlIHNhbWUuCisuVFAKKy5CIFwtYSwgXC1cLXRyeWFsdGNvbmZpZ3MKK2NvbnRpbnVlIHdpdGggYnVpbGRzIGJ5IHRyeWluZyB0byB1c2UgYWx0ZXJuYXRpdmUgcHJvdmlkZXJzIHdoZXJlIHBvc3NpYmxlLgorLlRQCisuQiBcLWYsIFwtXC1mb3JjZQorZm9yY2UgcnVuIG9mIHNwZWNpZmllZCBjbWQsIHJlZ2FyZGxlc3Mgb2Ygc3RhbXAgc3RhdHVzCisuVFAKKy5CIFwtaSwgXC1cLWludGVyYWN0aXZlCitkcm9wIGludG8gdGhlIGludGVyYWN0aXZlIG1vZGUgYWxzbyBjYWxsZWQgdGhlIEJpdEJha2Ugc2hlbGwuCisuVFAKKy5CIFwtY0NNRCwgXC1cLWNtZD1DTUQKK1NwZWNpZnkgdGFzayB0byBleGVjdXRlLiBOb3RlIHRoYXQgdGhpcyBvbmx5IGV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgdGFzayBmb3IKK3RoZSBwcm92aWRlZSBhbmQgdGhlIHBhY2thZ2VzIGl0IGRlcGVuZHMgb24sIGkuZS4gJ2NvbXBpbGUnIGRvZXMgbm90IGltcGxpY2l0bHkKK2NhbGwgc3RhZ2UgZm9yIHRoZSBkZXBlbmRlbmNpZXMgKElPVzogdXNlIG9ubHkgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nKS4KK0RlcGVuZGluZyBvbiB0aGUgYmFzZS5iYmNsYXNzIGEgbGlzdHRhc2tzIHRhc2sgaXMgZGVmaW5lZCBhbmQgd2lsbCBzaG93CithdmFpbGFibGUgdGFza3MuCisuVFAKKy5CIFwtckZJTEUsIFwtXC1yZWFkPUZJTEUgCityZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBiZWZvcmUgYml0YmFrZS5jb25mCisuVFAKKy5CIFwtdiwgXC1cLXZlcmJvc2UKK291dHB1dCBtb3JlIGNoaXQtY2hhdCB0byB0aGUgdGVybWluYWwKKy5UUAorLkIgXC1ELCBcLVwtZGVidWcKK0luY3JlYXNlIHRoZSBkZWJ1ZyBsZXZlbC4gWW91IGNhbiBzcGVjaWZ5IHRoaXMgbW9yZSB0aGFuIG9uY2UuCisuVFAKKy5CIFwtbiwgXC1cLWRyeS1ydW4KK2Rvbid0IGV4ZWN1dGUsIGp1c3QgZ28gdGhyb3VnaCB0aGUgbW90aW9ucworLlRQCisuQiBcLXAsIFwtXC1wYXJzZS1vbmx5CitxdWl0IGFmdGVyIHBhcnNpbmcgdGhlIEJCIGZpbGVzIChkZXZlbG9wZXJzIG9ubHkpCisuVFAKKy5CIFwtcywgXC1cLXNob3ctdmVyc2lvbnMKK3Nob3cgY3VycmVudCBhbmQgcHJlZmVycmVkIHZlcnNpb25zIG9mIGFsbCBwYWNrYWdlcworLlRQCisuQiBcLWUsIFwtXC1lbnZpcm9ubWVudAorc2hvdyB0aGUgZ2xvYmFsIG9yIHBlci1yZWNpcGUgZW52aXJvbm1lbnQgKHRoaXMgaXMgd2hhdCB1c2VkIHRvIGJlIGJicmVhZCkKKy5UUAorLkIgXC1nLCBcLVwtZ3JhcGh2aXoKK2VtaXQgdGhlIGRlcGVuZGVuY3kgdHJlZXMgb2YgdGhlIHNwZWNpZmllZCBwYWNrYWdlcyBpbiB0aGUgZG90IHN5bnRheAorLlRQCisuQiBcLUlJR05PUkVEXF9ET1RcX0RFUFMsIFwtXC1pZ25vcmUtZGVwcz1JR05PUkVEX0RPVF9ERVBTCitTdG9wIHByb2Nlc3NpbmcgYXQgdGhlIGdpdmVuIGxpc3Qgb2YgZGVwZW5kZW5jaWVzIHdoZW4gZ2VuZXJhdGluZyBkZXBlbmRlbmN5CitncmFwaHMuIFRoaXMgY2FuIGhlbHAgdG8gbWFrZSB0aGUgZ3JhcGggbW9yZSBhcHBlYWxpbmcKKy5UUAorLkIgXC1sREVCVUdfRE9NQUlOUywgXC1cLWxvZy1kb21haW5zPURFQlVHX0RPTUFJTlMKK1Nob3cgZGVidWcgbG9nZ2luZyBmb3IgdGhlIHNwZWNpZmllZCBsb2dnaW5nIGRvbWFpbnMKKy5UUAorLkIgXC1QLCBcLVwtcHJvZmlsZQorcHJvZmlsZSB0aGUgY29tbWFuZCBhbmQgcHJpbnQgYSByZXBvcnQKKy5UUAorLkIgXC11VUksIFwtXC11aT1VSQorVXNlciBpbnRlcmZhY2UgdG8gdXNlLiBDdXJyZW50bHksIGhvYiwgZGVwZXhwLCBnb2dnbGUgb3IgbmN1cnNlcyBjYW4gYmUgc3BlY2lmaWVkIGFzIFVJLgorLlRQCisuQiBcLXRTRVJWRVJUWVBFLCBcLVwtc2VydmVydHlwZT1TRVJWRVJUWVBFCitDaG9vc2Ugd2hpY2ggc2VydmVyIHRvIHVzZSwgbm9uZSwgcHJvY2VzcyBvciB4bWxycGMuCisuVFAKKy5CIFwtXC1yZXZpc2lvbnMtY2hhbmdlZAorU2V0IHRoZSBleGl0IGNvZGUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdXBzdHJlYW0gZmxvYXRpbmcgcmV2aXNpb25zIGhhdmUgY2hhbmdlZCBvciBub3QuCisuVFAKKy5CIFwtXC1zZXJ2ZXItb25seQorUnVuIGJpdGJha2Ugd2l0aG91dCBVSSwgIHRoZSBmcm9udGVuZCBjYW4gY29ubmVjdCB3aXRoIGJpdGJha2Ugc2VydmVyIGl0c2VsZi4KKy5UUAorLkIgXC1CQklORCwgXC1cLWJpbmQ9QklORAorVGhlIG5hbWUvYWRkcmVzcyBmb3IgdGhlIGJpdGJha2Ugc2VydmVyIHRvIGJpbmQgdG8uCisuVFAKKy5CIFwtXC1ub1wtc2V0c2NlbmUKK0RvIG5vdCBydW4gYW55IHNldHNjZW5lIHRhc2tzLCBmb3JjZXMgYnVpbGRzLgorCisuU0ggRU5WSVJPTk1FTlQgVkFSSUFCTEVTCitiaXRiYWtlIHVzZXMgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gY29udHJvbCBpdHMKK29wZXJhdGlvbjoKKy5UUAorLkIgQklUQkFLRV9VSQorVGhlIGJpdGJha2UgdXNlciBpbnRlcmZhY2U7IG92ZXJyaWRkZW4gYnkgdGhlIFxmQi11XGZQIGNvbW1hbmRsaW5lIG9wdGlvbi4KKworLlNIIEFVVEhPUlMKK0JpdEJha2Ugd2FzIHdyaXR0ZW4gYnkgCitQaGlsIEJsdW5kZWxsLAorSG9sZ2VyIEZyZXl0aGVyLAorQ2hyaXMgTGFyc29uLAorTWlja2V5IExhdWVyLAorUmljaGFyZCBQdXJkaWUsCitIb2xnZXIgU2NodXJpZworLlBQCitUaGlzIG1hbnVhbCBwYWdlIHdhcyB3cml0dGVuIGJ5IE1hcmNpbiBKdXN6a2lld2ljeiA8bWFyY2luQGhydy5vbmUucGw+Citmb3IgdGhlIERlYmlhbiBwcm9qZWN0IChidXQgbWF5IGJlIHVzZWQgYnkgb3RoZXJzKS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvcG9reS5lbnQgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3Bva3kuZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMzJlMTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3Bva3kuZW50CkBAIC0wLDAgKzEsNTkgQEAKKzwhRU5USVRZIERJU1RSTyAiMS40Ij4KKzwhRU5USVRZIERJU1RST19OQU1FICJ0YmQiPgorPCFFTlRJVFkgWU9DVE9fRE9DX1ZFUlNJT04gIjEuNCI+Cis8IUVOVElUWSBQT0tZVkVSU0lPTiAiOC4wIj4KKzwhRU5USVRZIFlPQ1RPX1BPS1kgInBva3ktJkRJU1RST19OQU1FOy0mUE9LWVZFUlNJT047Ij4KKzwhRU5USVRZIENPUFlSSUdIVF9ZRUFSICIyMDEwLTIwMTMiPgorPCFFTlRJVFkgWU9DVE9fRExfVVJMICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fSE9NRV9VUkwgImh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19MSVNUU19VUkwgImh0dHA6Ly9saXN0cy55b2N0b3Byb2plY3Qub3JnIj4KKzwhRU5USVRZIFlPQ1RPX0JVR1pJTExBX1VSTCAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fV0lLSV9VUkwgImh0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnIj4KKzwhRU5USVRZIFlPQ1RPX0FCX1VSTCAiaHR0cDovL2F1dG9idWlsZGVyLnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fR0lUX1VSTCAiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnIj4KKzwhRU5USVRZIFlPQ1RPX0FEVFJFUE9fVVJMICJodHRwOi8vYWR0cmVwby55b2N0b3Byb2plY3Qub3JnIj4KKzwhRU5USVRZIE9FX0hPTUVfVVJMICJodHRwOi8vd3d3Lm9wZW5lbWJlZGRlZC5vcmciPgorPCFFTlRJVFkgT0VfTElTVFNfVVJMICJodHRwOi8vbGlzdHMubGludXh0b2dvLm9yZy9jZ2ktYmluL21haWxtYW4iPgorPCFFTlRJVFkgT0VfRE9DU19VUkwgImh0dHA6Ly9kb2NzLm9wZW5lbWJlZGRlZC5vcmciPgorPCFFTlRJVFkgT0hfSE9NRV9VUkwgImh0dHA6Ly9vLWhhbmQuY29tIj4KKzwhRU5USVRZIEJJVEJBS0VfSE9NRV9VUkwgImh0dHA6Ly9kZXZlbG9wZXIuYmVybGlvcy5kZS9wcm9qZWN0cy9iaXRiYWtlLyI+Cis8IUVOVElUWSBFQ0xJUFNFX01BSU5fVVJMICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2Rvd25sb2FkcyI+Cis8IUVOVElUWSBFQ0xJUFNFX0RMX1VSTCAiaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnIj4KKzwhRU5USVRZIEVDTElQU0VfRExfUExVR0lOX1VSTCAiJllPQ1RPX0RMX1VSTDsvcmVsZWFzZXMvZWNsaXBzZS1wbHVnaW4vJkRJU1RSTzsiPgorPCFFTlRJVFkgRUNMSVBTRV9VUERBVEVTX1VSTCAiJkVDTElQU0VfRExfVVJMOy90bS91cGRhdGVzLzMuMyI+Cis8IUVOVElUWSBFQ0xJUFNFX0lORElHT19VUkwgIiZFQ0xJUFNFX0RMX1VSTDsvcmVsZWFzZXMvaW5kaWdvIj4KKzwhRU5USVRZIEVDTElQU0VfSlVOT19VUkwgIiZFQ0xJUFNFX0RMX1VSTDsvcmVsZWFzZXMvanVubyI+Cis8IUVOVElUWSBFQ0xJUFNFX0lORElHT19DRFRfVVJMICImRUNMSVBTRV9ETF9VUkw7dG9vbHMvY2R0L3JlbGVhc2VzL2luZGlnbyI+Cis8IUVOVElUWSBZT0NUT19ET0NTX1VSTCAiJllPQ1RPX0hPTUVfVVJMOy9kb2NzIj4KKzwhRU5USVRZIFlPQ1RPX1NPVVJDRVNfVVJMICImWU9DVE9fSE9NRV9VUkw7L3NvdXJjZXMvIj4KKzwhRU5USVRZIFlPQ1RPX0FCX1BPUlRfVVJMICImWU9DVE9fQUJfVVJMOzo4MDEwIj4KKzwhRU5USVRZIFlPQ1RPX0FCX05JR0hUTFlfVVJMICImWU9DVE9fQUJfVVJMOy9uaWdodGx5LyI+Cis8IUVOVElUWSBZT0NUT19QT0tZX1VSTCAiJllPQ1RPX0RMX1VSTDsvcmVsZWFzZXMvcG9reS8iPgorPCFFTlRJVFkgWU9DVE9fUkVMRUFTRV9ETF9VUkwgIiZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL3lvY3RvL3lvY3RvLSZESVNUUk87Ij4KKzwhRU5USVRZIFlPQ1RPX1RPT0xDSEFJTl9ETF9VUkwgIiZZT0NUT19SRUxFQVNFX0RMX1VSTDsvdG9vbGNoYWluLyI+Cis8IUVOVElUWSBZT0NUT19FQ0xJUFNFX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy9lY2xpcHNlLXBsdWdpbi9pbmRpZ287Ij4KKzwhRU5USVRZIFlPQ1RPX0FEVElOU1RBTExFUl9ETF9VUkwgIiZZT0NUT19SRUxFQVNFX0RMX1VSTDsvYWR0X2luc3RhbGxlciI+Cis8IUVOVElUWSBZT0NUT19QT0tZX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy8mWU9DVE9fUE9LWTsudGFyLmJ6MiI+Cis8IUVOVElUWSBZT0NUT19NQUNISU5FU19ETF9VUkwgIiZZT0NUT19SRUxFQVNFX0RMX1VSTDsvbWFjaGluZXMiPgorPCFFTlRJVFkgWU9DVE9fUUVNVV9ETF9VUkwgIiZZT0NUT19NQUNISU5FU19ETF9VUkw7L3FlbXUiPgorPCFFTlRJVFkgWU9DVE9fUFlUSE9OLWk2ODZfRExfVVJMICImWU9DVE9fRExfVVJMOy9yZWxlYXNlcy9taXNjc3VwcG9ydC9weXRob24tbmF0aXZlc2RrLXN0YW5kYWxvbmUtaTY4Ni50YXIuYnoyIj4KKzwhRU5USVRZIFlPQ1RPX1BZVEhPTi14ODZfNjRfRExfVVJMICImWU9DVE9fRExfVVJMOy9yZWxlYXNlcy9taXNjc3VwcG9ydC9weXRob24tbmF0aXZlc2RrLXN0YW5kYWxvbmUteDg2XzY0LnRhci5iejIiPgorPCFFTlRJVFkgWU9DVE9fRE9DU19RU19VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0FEVF9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9hZHQtbWFudWFsL2FkdC1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX1JFRl9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0JTUF9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9ic3AtZ3VpZGUvYnNwLWd1aWRlLmh0bWwiPgorPCFFTlRJVFkgWU9DVE9fRE9DU19ERVZfVVJMICImWU9DVE9fRE9DU19VUkw7LyZZT0NUT19ET0NfVkVSU0lPTjsvZGV2LW1hbnVhbC9kZXYtbWFudWFsLmh0bWwiPgorPCFFTlRJVFkgWU9DVE9fRE9DU19LRVJORUxfVVJMICImWU9DVE9fRE9DU19VUkw7LyZZT0NUT19ET0NfVkVSU0lPTjsva2VybmVsLW1hbnVhbC9rZXJuZWwtbWFudWFsLmh0bWwiPgorPCFFTlRJVFkgWU9DVE9fQURUUEFUSF9ESVIgIi9vcHQvcG9reS8mRElTVFJPOyI+Cis8IUVOVElUWSBZT0NUT19QT0tZX1RBUkJBTEwgIiZZT0NUT19QT0tZOy50YXIuYnoyIj4KKzwhRU5USVRZIE9FX0lOSVRfUEFUSCAiJllPQ1RPX1BPS1k7L29lLWluaXQtYnVpbGQtZW52Ij4KKzwhRU5USVRZIE9FX0lOSVRfRklMRSAib2UtaW5pdC1idWlsZC1lbnYiPgorPCFFTlRJVFkgVUJVTlRVX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMICJnYXdrIHdnZXQgZ2l0LWNvcmUgZGlmZnN0YXQgdW56aXAgdGV4aW5mbyBcCisgICAgIGJ1aWxkLWVzc2VudGlhbCBjaHJwYXRoIj4KKzwhRU5USVRZIEZFRE9SQV9IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTCAiZ2F3ayBtYWtlIHdnZXQgdGFyIGJ6aXAyIGd6aXAgcHl0aG9uIHVuemlwIHBlcmwgcGF0Y2ggXAorICAgICBkaWZmdXRpbHMgZGlmZnN0YXQgZ2l0IGNwcCBnY2MgZ2NjLWMrKyBlZ2xpYmMtZGV2ZWwgdGV4aW5mbyBjaHJwYXRoIFwKKyAgICAgY2NhY2hlIj4KKzwhRU5USVRZIE9QRU5TVVNFX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMICJweXRob24gZ2NjIGdjYy1jKysgZ2l0IGNocnBhdGggbWFrZSB3Z2V0IHB5dGhvbi14bWwgXAorICAgICBkaWZmc3RhdCB0ZXhpbmZvIHB5dGhvbi1jdXJzZXMiPgorPCFFTlRJVFkgQ0VOVE9TX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMICJnYXdrIG1ha2Ugd2dldCB0YXIgYnppcDIgZ3ppcCBweXRob24gdW56aXAgcGVybCBwYXRjaCBcCisgICAgIGRpZmZ1dGlscyBkaWZmc3RhdCBnaXQgY3BwIGdjYyBnY2MtYysrIGdsaWJjLWRldmVsIHRleGluZm8gY2hycGF0aCI+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmEudHRmIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9WZXJhLnR0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGNkNmI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9WZXJhLnR0ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmEueG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9WZXJhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzgyMDQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9WZXJhLnhtbApAQCAtMCwwICsxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjxmb250LW1ldHJpY3MgdHlwZT0iVFlQRTAiPjxmb250LW5hbWU+Qml0c3RyZWFtVmVyYVNhbnM8L2ZvbnQtbmFtZT48ZW1iZWQvPjxjYXAtaGVpZ2h0PjcyOTwvY2FwLWhlaWdodD48eC1oZWlnaHQ+NTQ2PC94LWhlaWdodD48YXNjZW5kZXI+OTI4PC9hc2NlbmRlcj48ZGVzY2VuZGVyPi0yMzU8L2Rlc2NlbmRlcj48YmJveD48bGVmdD4tMTgzPC9sZWZ0Pjxib3R0b20+LTIzNTwvYm90dG9tPjxyaWdodD4xMjg3PC9yaWdodD48dG9wPjkyODwvdG9wPjwvYmJveD48ZmxhZ3M+MzI8L2ZsYWdzPjxzdGVtdj4wPC9zdGVtdj48aXRhbGljYW5nbGU+MDwvaXRhbGljYW5nbGU+PHN1YnR5cGU+VFlQRTA8L3N1YnR5cGU+PG11bHRpYnl0ZS1leHRyYXM+PGNpZC10eXBlPkNJREZvbnRUeXBlMjwvY2lkLXR5cGU+PGRlZmF1bHQtd2lkdGg+MDwvZGVmYXVsdC13aWR0aD48YmZyYW5nZXM+PGJmIGdpPSIzIiB1ZT0iMTI2IiB1cz0iMzIiLz48YmYgZ2k9IjE3MiIgdWU9IjE2MCIgdXM9IjE2MCIvPjxiZiBnaT0iMTYzIiB1ZT0iMTYxIiB1cz0iMTYxIi8+PGJmIGdpPSIxMzIiIHVlPSIxNjMiIHVzPSIxNjIiLz48YmYgZ2k9IjE4OSIgdWU9IjE2NCIgdXM9IjE2NCIvPjxiZiBnaT0iMTUwIiB1ZT0iMTY1IiB1cz0iMTY1Ii8+PGJmIGdpPSIyMzEiIHVlPSIxNjYiIHVzPSIxNjYiLz48YmYgZ2k9IjEzNCIgdWU9IjE2NyIgdXM9IjE2NyIvPjxiZiBnaT0iMTQyIiB1ZT0iMTY4IiB1cz0iMTY4Ii8+PGJmIGdpPSIxMzkiIHVlPSIxNjkiIHVzPSIxNjkiLz48YmYgZ2k9IjE1NyIgdWU9IjE3MCIgdXM9IjE3MCIvPjxiZiBnaT0iMTY5IiB1ZT0iMTcxIiB1cz0iMTcxIi8+PGJmIGdpPSIxNjQiIHVlPSIxNzIiIHVzPSIxNzIiLz48YmYgZ2k9IjI1NiIgdWU9IjE3MyIgdXM9IjE3MyIvPjxiZiBnaT0iMTM4IiB1ZT0iMTc0IiB1cz0iMTc0Ii8+PGJmIGdpPSIyMTciIHVlPSIxNzUiIHVzPSIxNzUiLz48YmYgZ2k9IjEzMSIgdWU9IjE3NiIgdXM9IjE3NiIvPjxiZiBnaT0iMTQ3IiB1ZT0iMTc3IiB1cz0iMTc3Ii8+PGJmIGdpPSIyNDEiIHVlPSIxNzkiIHVzPSIxNzgiLz48YmYgZ2k9IjE0MSIgdWU9IjE4MCIgdXM9IjE4MCIvPjxiZiBnaT0iMTUxIiB1ZT0iMTgxIiB1cz0iMTgxIi8+PGJmIGdpPSIxMzYiIHVlPSIxODIiIHVzPSIxODIiLz48YmYgZ2k9IjE5NSIgdWU9IjE4MyIgdXM9IjE4MyIvPjxiZiBnaT0iMjIxIiB1ZT0iMTg0IiB1cz0iMTg0Ii8+PGJmIGdpPSIyNDAiIHVlPSIxODUiIHVzPSIxODUiLz48YmYgZ2k9IjE1OCIgdWU9IjE4NiIgdXM9IjE4NiIvPjxiZiBnaT0iMTcwIiB1ZT0iMTg3IiB1cz0iMTg3Ii8+PGJmIGdpPSIyNDMiIHVlPSIxOTAiIHVzPSIxODgiLz48YmYgZ2k9IjE2MiIgdWU9IjE5MSIgdXM9IjE5MSIvPjxiZiBnaT0iMTczIiB1ZT0iMTkyIiB1cz0iMTkyIi8+PGJmIGdpPSIyMDEiIHVlPSIxOTMiIHVzPSIxOTMiLz48YmYgZ2k9IjE5OSIgdWU9IjE5NCIgdXM9IjE5NCIvPjxiZiBnaT0iMTc0IiB1ZT0iMTk1IiB1cz0iMTk1Ii8+PGJmIGdpPSI5OCIgdWU9IjE5NyIgdXM9IjE5NiIvPjxiZiBnaT0iMTQ0IiB1ZT0iMTk4IiB1cz0iMTk4Ii8+PGJmIGdpPSIxMDAiIHVlPSIxOTkiIHVzPSIxOTkiLz48YmYgZ2k9IjIwMyIgdWU9IjIwMCIgdXM9IjIwMCIvPjxiZiBnaT0iMTAxIiB1ZT0iMjAxIiB1cz0iMjAxIi8+PGJmIGdpPSIyMDAiIHVlPSIyMDIiIHVzPSIyMDIiLz48YmYgZ2k9IjIwMiIgdWU9IjIwMyIgdXM9IjIwMyIvPjxiZiBnaT0iMjA3IiB1ZT0iMjA0IiB1cz0iMjA0Ii8+PGJmIGdpPSIyMDQiIHVlPSIyMDciIHVzPSIyMDUiLz48YmYgZ2k9IjIzMiIgdWU9IjIwOCIgdXM9IjIwOCIvPjxiZiBnaT0iMTAyIiB1ZT0iMjA5IiB1cz0iMjA5Ii8+PGJmIGdpPSIyMTAiIHVlPSIyMTAiIHVzPSIyMTAiLz48YmYgZ2k9IjIwOCIgdWU9IjIxMiIgdXM9IjIxMSIvPjxiZiBnaT0iMTc1IiB1ZT0iMjEzIiB1cz0iMjEzIi8+PGJmIGdpPSIxMDMiIHVlPSIyMTQiIHVzPSIyMTQiLz48YmYgZ2k9IjIzOSIgdWU9IjIxNSIgdXM9IjIxNSIvPjxiZiBnaT0iMTQ1IiB1ZT0iMjE2IiB1cz0iMjE2Ii8+PGJmIGdpPSIyMTMiIHVlPSIyMTciIHVzPSIyMTciLz48YmYgZ2k9IjIxMSIgdWU9IjIxOSIgdXM9IjIxOCIvPjxiZiBnaT0iMTA0IiB1ZT0iMjIwIiB1cz0iMjIwIi8+PGJmIGdpPSIyMzQiIHVlPSIyMjEiIHVzPSIyMjEiLz48YmYgZ2k9IjIzNiIgdWU9IjIyMiIgdXM9IjIyMiIvPjxiZiBnaT0iMTM3IiB1ZT0iMjIzIiB1cz0iMjIzIi8+PGJmIGdpPSIxMDYiIHVlPSIyMjQiIHVzPSIyMjQiLz48YmYgZ2k9IjEwNSIgdWU9IjIyNSIgdXM9IjIyNSIvPjxiZiBnaT0iMTA3IiB1ZT0iMjI2IiB1cz0iMjI2Ii8+PGJmIGdpPSIxMDkiIHVlPSIyMjciIHVzPSIyMjciLz48YmYgZ2k9IjEwOCIgdWU9IjIyOCIgdXM9IjIyOCIvPjxiZiBnaT0iMTEwIiB1ZT0iMjI5IiB1cz0iMjI5Ii8+PGJmIGdpPSIxNjAiIHVlPSIyMzAiIHVzPSIyMzAiLz48YmYgZ2k9IjExMSIgdWU9IjIzMSIgdXM9IjIzMSIvPjxiZiBnaT0iMTEzIiB1ZT0iMjMyIiB1cz0iMjMyIi8+PGJmIGdpPSIxMTIiIHVlPSIyMzMiIHVzPSIyMzMiLz48YmYgZ2k9IjExNCIgdWU9IjIzNSIgdXM9IjIzNCIvPjxiZiBnaT0iMTE3IiB1ZT0iMjM2IiB1cz0iMjM2Ii8+PGJmIGdpPSIxMTYiIHVlPSIyMzciIHVzPSIyMzciLz48YmYgZ2k9IjExOCIgdWU9IjIzOSIgdXM9IjIzOCIvPjxiZiBnaT0iMjMzIiB1ZT0iMjQwIiB1cz0iMjQwIi8+PGJmIGdpPSIxMjAiIHVlPSIyNDEiIHVzPSIyNDEiLz48YmYgZ2k9IjEyMiIgdWU9IjI0MiIgdXM9IjI0MiIvPjxiZiBnaT0iMTIxIiB1ZT0iMjQzIiB1cz0iMjQzIi8+PGJmIGdpPSIxMjMiIHVlPSIyNDQiIHVzPSIyNDQiLz48YmYgZ2k9IjEyNSIgdWU9IjI0NSIgdXM9IjI0NSIvPjxiZiBnaT0iMTI0IiB1ZT0iMjQ2IiB1cz0iMjQ2Ii8+PGJmIGdpPSIxODQiIHVlPSIyNDciIHVzPSIyNDciLz48YmYgZ2k9IjE2MSIgdWU9IjI0OCIgdXM9IjI0OCIvPjxiZiBnaT0iMTI3IiB1ZT0iMjQ5IiB1cz0iMjQ5Ii8+PGJmIGdpPSIxMjYiIHVlPSIyNTAiIHVzPSIyNTAiLz48YmYgZ2k9IjEyOCIgdWU9IjI1MiIgdXM9IjI1MSIvPjxiZiBnaT0iMjM1IiB1ZT0iMjUzIiB1cz0iMjUzIi8+PGJmIGdpPSIyMzciIHVlPSIyNTQiIHVzPSIyNTQiLz48YmYgZ2k9IjE4NiIgdWU9IjI1NSIgdXM9IjI1NSIvPjxiZiBnaT0iMjUxIiB1ZT0iMjYzIiB1cz0iMjYyIi8+PGJmIGdpPSIyNTMiIHVlPSIyNjkiIHVzPSIyNjgiLz48YmYgZ2k9IjAiIHVlPSIyNzAiIHVzPSIyNzAiLz48YmYgZ2k9IjAiIHVlPSIyNzEiIHVzPSIyNzEiLz48YmYgZ2k9IjAiIHVlPSIyNzIiIHVzPSIyNzIiLz48YmYgZ2k9IjI1NSIgdWU9IjI3MyIgdXM9IjI3MyIvPjxiZiBnaT0iMjQ2IiB1ZT0iMjg3IiB1cz0iMjg2Ii8+PGJmIGdpPSIyNDgiIHVlPSIzMDQiIHVzPSIzMDQiLz48YmYgZ2k9IjIxNCIgdWU9IjMwNSIgdXM9IjMwNSIvPjxiZiBnaT0iMjI1IiB1ZT0iMzIyIiB1cz0iMzIxIi8+PGJmIGdpPSIxNzYiIHVlPSIzMzkiIHVzPSIzMzgiLz48YmYgZ2k9IjI0OSIgdWU9IjM1MSIgdXM9IjM1MCIvPjxiZiBnaT0iMjI3IiB1ZT0iMzUzIiB1cz0iMzUyIi8+PGJmIGdpPSIxODciIHVlPSIzNzYiIHVzPSIzNzYiLz48YmYgZ2k9IjIyOSIgdWU9IjM4MiIgdXM9IjM4MSIvPjxiZiBnaT0iMTY2IiB1ZT0iNDAyIiB1cz0iNDAyIi8+PGJmIGdpPSIyMTUiIHVlPSI3MTAiIHVzPSI3MTAiLz48YmYgZ2k9IjIyNCIgdWU9IjcxMSIgdXM9IjcxMSIvPjxiZiBnaT0iMjE4IiB1ZT0iNzMwIiB1cz0iNzI4Ii8+PGJmIGdpPSIyMjMiIHVlPSI3MzEiIHVzPSI3MzEiLz48YmYgZ2k9IjIxNiIgdWU9IjczMiIgdXM9IjczMiIvPjxiZiBnaT0iMjIyIiB1ZT0iNzMzIiB1cz0iNzMzIi8+PGJmIGdpPSIxNTkiIHVlPSI5MzciIHVzPSI5MzciLz48YmYgZ2k9IjE1NSIgdWU9Ijk2MCIgdXM9Ijk2MCIvPjxiZiBnaT0iMTc4IiB1ZT0iODIxMiIgdXM9IjgyMTEiLz48YmYgZ2k9IjAiIHVlPSI4MjEzIiB1cz0iODIxMyIvPjxiZiBnaT0iMCIgdWU9IjgyMTQiIHVzPSI4MjE0Ii8+PGJmIGdpPSIwIiB1ZT0iODIxNSIgdXM9IjgyMTUiLz48YmYgZ2k9IjE4MiIgdWU9IjgyMTciIHVzPSI4MjE2Ii8+PGJmIGdpPSIxOTYiIHVlPSI4MjE4IiB1cz0iODIxOCIvPjxiZiBnaT0iMCIgdWU9IjgyMTkiIHVzPSI4MjE5Ii8+PGJmIGdpPSIxODAiIHVlPSI4MjIxIiB1cz0iODIyMCIvPjxiZiBnaT0iMTk3IiB1ZT0iODIyMiIgdXM9IjgyMjIiLz48YmYgZ2k9IjAiIHVlPSI4MjIzIiB1cz0iODIyMyIvPjxiZiBnaT0iMTMwIiB1ZT0iODIyNCIgdXM9IjgyMjQiLz48YmYgZ2k9IjE5NCIgdWU9IjgyMjUiIHVzPSI4MjI1Ii8+PGJmIGdpPSIxMzUiIHVlPSI4MjI2IiB1cz0iODIyNiIvPjxiZiBnaT0iMCIgdWU9IjgyMjciIHVzPSI4MjI3Ii8+PGJmIGdpPSIwIiB1ZT0iODIyOCIgdXM9IjgyMjgiLz48YmYgZ2k9IjAiIHVlPSI4MjI5IiB1cz0iODIyOSIvPjxiZiBnaT0iMTcxIiB1ZT0iODIzMCIgdXM9IjgyMzAiLz48YmYgZ2k9IjE5OCIgdWU9IjgyNDAiIHVzPSI4MjQwIi8+PGJmIGdpPSIxOTAiIHVlPSI4MjUwIiB1cz0iODI0OSIvPjxiZiBnaT0iMjU4IiB1ZT0iODM2NCIgdXM9IjgzNjQiLz48YmYgZ2k9IjE0MCIgdWU9Ijg0ODIiIHVzPSI4NDgyIi8+PGJmIGdpPSIxNTIiIHVlPSI4NzA2IiB1cz0iODcwNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MDciIHVzPSI4NzA3Ii8+PGJmIGdpPSIwIiB1ZT0iODcwOCIgdXM9Ijg3MDgiLz48YmYgZ2k9IjAiIHVlPSI4NzA5IiB1cz0iODcwOSIvPjxiZiBnaT0iMTY4IiB1ZT0iODcxMCIgdXM9Ijg3MTAiLz48YmYgZ2k9IjE1NCIgdWU9Ijg3MTkiIHVzPSI4NzE5Ii8+PGJmIGdpPSIwIiB1ZT0iODcyMCIgdXM9Ijg3MjAiLz48YmYgZ2k9IjE1MyIgdWU9Ijg3MjEiIHVzPSI4NzIxIi8+PGJmIGdpPSIyMzgiIHVlPSI4NzIyIiB1cz0iODcyMiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjMiIHVzPSI4NzIzIi8+PGJmIGdpPSIwIiB1ZT0iODcyNCIgdXM9Ijg3MjQiLz48YmYgZ2k9IjE4OCIgdWU9Ijg3MjUiIHVzPSI4NzI1Ii8+PGJmIGdpPSIwIiB1ZT0iODcyNiIgdXM9Ijg3MjYiLz48YmYgZ2k9IjAiIHVlPSI4NzI3IiB1cz0iODcyNyIvPjxiZiBnaT0iMCIgdWU9Ijg3MjgiIHVzPSI4NzI4Ii8+PGJmIGdpPSIyNTciIHVlPSI4NzI5IiB1cz0iODcyOSIvPjxiZiBnaT0iMTY1IiB1ZT0iODczMCIgdXM9Ijg3MzAiLz48YmYgZ2k9IjAiIHVlPSI4NzMxIiB1cz0iODczMSIvPjxiZiBnaT0iMCIgdWU9Ijg3MzIiIHVzPSI4NzMyIi8+PGJmIGdpPSIwIiB1ZT0iODczMyIgdXM9Ijg3MzMiLz48YmYgZ2k9IjE0NiIgdWU9Ijg3MzQiIHVzPSI4NzM0Ii8+PGJmIGdpPSIxNTYiIHVlPSI4NzQ3IiB1cz0iODc0NyIvPjxiZiBnaT0iMTY3IiB1ZT0iODc3NiIgdXM9Ijg3NzYiLz48YmYgZ2k9IjE0MyIgdWU9Ijg4MDAiIHVzPSI4ODAwIi8+PGJmIGdpPSIwIiB1ZT0iODgwMSIgdXM9Ijg4MDEiLz48YmYgZ2k9IjAiIHVlPSI4ODAyIiB1cz0iODgwMiIvPjxiZiBnaT0iMCIgdWU9Ijg4MDMiIHVzPSI4ODAzIi8+PGJmIGdpPSIxNDgiIHVlPSI4ODA1IiB1cz0iODgwNCIvPjxiZiBnaT0iMTg1IiB1ZT0iOTY3NCIgdXM9Ijk2NzQiLz48YmYgZ2k9IjE5MiIgdWU9IjY0MjU4IiB1cz0iNjQyNTciLz48YmYgZ2k9IjAiIHVlPSI2NTUzNSIgdXM9IjY1NTM1Ii8+PC9iZnJhbmdlcz48Y2lkLXdpZHRocyBzdGFydC1pbmRleD0iMCI+PHd4IHc9IjYwMCIvPjx3eCB3PSIwIi8+PHd4IHc9IjMxNyIvPjx3eCB3PSIzMTciLz48d3ggdz0iNDAwIi8+PHd4IHc9IjQ1OSIvPjx3eCB3PSI4MzciLz48d3ggdz0iNjM2Ii8+PHd4IHc9Ijk1MCIvPjx3eCB3PSI3NzkiLz48d3ggdz0iMjc0Ii8+PHd4IHc9IjM5MCIvPjx3eCB3PSIzOTAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjgzNyIvPjx3eCB3PSIzMTciLz48d3ggdz0iMzYwIi8+PHd4IHc9IjMxNyIvPjx3eCB3PSIzMzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSIzMzYiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI4MzciLz48d3ggdz0iNTMwIi8+PHd4IHc9IjEwMDAiLz48d3ggdz0iNjg0Ii8+PHd4IHc9IjY4NiIvPjx3eCB3PSI2OTgiLz48d3ggdz0iNzcwIi8+PHd4IHc9IjYzMSIvPjx3eCB3PSI1NzUiLz48d3ggdz0iNzc0Ii8+PHd4IHc9Ijc1MSIvPjx3eCB3PSIyOTQiLz48d3ggdz0iMjk0Ii8+PHd4IHc9IjY1NSIvPjx3eCB3PSI1NTciLz48d3ggdz0iODYyIi8+PHd4IHc9Ijc0OCIvPjx3eCB3PSI3ODciLz48d3ggdz0iNjAzIi8+PHd4IHc9Ijc4NyIvPjx3eCB3PSI2OTQiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjYxMCIvPjx3eCB3PSI3MzEiLz48d3ggdz0iNjg0Ii8+PHd4IHc9Ijk4OCIvPjx3eCB3PSI2ODUiLz48d3ggdz0iNjEwIi8+PHd4IHc9IjY4NSIvPjx3eCB3PSIzOTAiLz48d3ggdz0iMzM2Ii8+PHd4IHc9IjM5MCIvPjx3eCB3PSI4MzciLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI2MTIiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjU0OSIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNjE1Ii8+PHd4IHc9IjM1MiIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNjMzIi8+PHd4IHc9IjI3NyIvPjx3eCB3PSIyNzciLz48d3ggdz0iNTc5Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSI5NzQiLz48d3ggdz0iNjMzIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjQxMSIvPjx3eCB3PSI1MjAiLz48d3ggdz0iMzkyIi8+PHd4IHc9IjYzMyIvPjx3eCB3PSI1OTEiLz48d3ggdz0iODE3Ii8+PHd4IHc9IjU5MSIvPjx3eCB3PSI1OTEiLz48d3ggdz0iNTI0Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSIzMzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjg0Ii8+PHd4IHc9IjY5OCIvPjx3eCB3PSI2MzEiLz48d3ggdz0iNzQ4Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSI3MzEiLz48d3ggdz0iNjEyIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI2MTIiLz48d3ggdz0iNjEyIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI2MTIiLz48d3ggdz0iNTQ5Ii8+PHd4IHc9IjYxNSIvPjx3eCB3PSI2MTUiLz48d3ggdz0iNjE1Ii8+PHd4IHc9IjYxNSIvPjx3eCB3PSIyNzciLz48d3ggdz0iMjc3Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSIyNzciLz48d3ggdz0iNjMzIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI2MTEiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI2MTEiLz48d3ggdz0iNjMzIi8+PHd4IHc9IjYzMyIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNjMzIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTg5Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MjkiLz48d3ggdz0iMTAwMCIvPjx3eCB3PSIxMDAwIi8+PHd4IHc9IjEwMDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI4MzciLz48d3ggdz0iOTc0Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSI4MzMiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI4MzciLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI1MTciLz48d3ggdz0iNjczIi8+PHd4IHc9Ijc1NiIvPjx3eCB3PSI1ODgiLz48d3ggdz0iNTIwIi8+PHd4IHc9IjQ3MSIvPjx3eCB3PSI0NzEiLz48d3ggdz0iNzY0Ii8+PHd4IHc9Ijk4MSIvPjx3eCB3PSI2MTEiLz48d3ggdz0iNTMwIi8+PHd4IHc9IjQwMCIvPjx3eCB3PSI4MzciLz48d3ggdz0iNjM3Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI4MzciLz48d3ggdz0iNjY4Ii8+PHd4IHc9IjYxMSIvPjx3eCB3PSI2MTEiLz48d3ggdz0iMTAwMCIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjg0Ii8+PHd4IHc9IjY4NCIvPjx3eCB3PSI3ODciLz48d3ggdz0iMTA2OSIvPjx3eCB3PSIxMDIyIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSIxMDAwIi8+PHd4IHc9IjUxOCIvPjx3eCB3PSI1MTgiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjMxNyIvPjx3eCB3PSI4MzciLz48d3ggdz0iNDk0Ii8+PHd4IHc9IjU5MSIvPjx3eCB3PSI2MTAiLz48d3ggdz0iMTY2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSIzOTkiLz48d3ggdz0iMzk5Ii8+PHd4IHc9IjYyOSIvPjx3eCB3PSI2MjkiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjMxNyIvPjx3eCB3PSIzMTciLz48d3ggdz0iNTE4Ii8+PHd4IHc9IjEzNDEiLz48d3ggdz0iNjg0Ii8+PHd4IHc9IjYzMSIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjMxIi8+PHd4IHc9IjYzMSIvPjx3eCB3PSIyOTQiLz48d3ggdz0iMjk0Ii8+PHd4IHc9IjI5NCIvPjx3eCB3PSIyOTQiLz48d3ggdz0iNzg3Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSI3ODciLz48d3ggdz0iNzMxIi8+PHd4IHc9IjczMSIvPjx3eCB3PSI3MzEiLz48d3ggdz0iMjc3Ii8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1NjIiLz48d3ggdz0iMjg0Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI1MjAiLz48d3ggdz0iNjg1Ii8+PHd4IHc9IjUyNCIvPjx3eCB3PSIzMzYiLz48d3ggdz0iNzc0Ii8+PHd4IHc9IjYxMSIvPjx3eCB3PSI2MTAiLz48d3ggdz0iNTkxIi8+PHd4IHc9IjYwNCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI0MDAiLz48d3ggdz0iNDAwIi8+PHd4IHc9IjQwMCIvPjx3eCB3PSI5NjkiLz48d3ggdz0iOTY5Ii8+PHd4IHc9Ijk2OSIvPjx3eCB3PSI3NzQiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjI5NCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNTIwIi8+PHd4IHc9IjY5OCIvPjx3eCB3PSI1NDkiLz48d3ggdz0iNjk4Ii8+PHd4IHc9IjU0OSIvPjx3eCB3PSI2MzQiLz48d3ggdz0iMzYwIi8+PHd4IHc9IjMxNyIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNDAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48L2NpZC13aWR0aHM+PC9tdWx0aWJ5dGUtZXh0cmFzPjxrZXJuaW5nIGtweDE9IjI0NiI+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMzUiPjxwYWlyIGtlcm49Ii0xNDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTQ2IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjQzIj48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE2Ij48cGFpciBrZXJuPSIzNiIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTExOCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xMTgiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMzYiIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49IjM2IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii0xMTgiIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItMjEiIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iNTUiIGtweDI9IjQ1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIzNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjExMiI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMjMiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI5MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjI1MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMTMiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMDgiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxODciPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0yMDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTEzIj48cGFpciBrZXJuPSItMTciIGtweDI9IjkxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE0NCI+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjU5Ij48cGFpciBrZXJuPSItNzIiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTE1Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjczIj48cGFpciBrZXJuPSIzMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNDEiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNzIiIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItNzIiIGtweDI9Ijc2Ii8+PHBhaXIga2Vybj0iLTE2MCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTgzIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDkiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTI0Ij48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxNjkiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzkiLz48cGFpciBrZXJuPSI3MyIga3B4Mj0iMTQ0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI0NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIwMSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xMjMiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTExIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iODkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjYwIj48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTExOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMTA5IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijc2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMjAyIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9Ijg1Ij48cGFpciBrZXJuPSItMjEiIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODAiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzEiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijc1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjkxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MSIvPjxwYWlyIGtlcm49IjQxIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODQiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNjEiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjM0Ij48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTExOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMTA5IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijc2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMjAyIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEwMCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMjIiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI5MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjQ3Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMDQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIyMTMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTIwMiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjExIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMjYyIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjIxMiIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iNTYiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjEwIj48cGFpciBrZXJuPSItMTciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTgiPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNDQiIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI4MiI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjkxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTg2Ij48cGFpciBrZXJuPSItMTQyIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE0NiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxNzUiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMDkiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMDMiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI4MSI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9Ijk4Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjEyIj48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjI5Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjM4Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEyMSI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjkxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTciPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii04NiIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii04MSIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNjciIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMjEiIGtweDI9Ijc2Ii8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjciIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjM3Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjIyNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ5Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEyMCI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjI0OSI+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSI5OCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMjciPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iOTgiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTEiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg2Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItNjMiIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE1NSIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTYwIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI4Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEwNCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjcyIj48cGFpciBrZXJuPSItMTciIGtweDI9IjkxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE5OSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xMjMiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTExIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iODkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjU0Ij48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9Ijk4Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE4MCI+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iNDMiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTg4IiBrcHgyPSIxNDQiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iNDEiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iNDciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIzNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTIwIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI1MSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iNTMiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEzNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjMzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMzkiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjIzNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iNDUiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iNDYiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTMiPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTM3Ij48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjMzIj48cGFpciBrZXJuPSItNDQiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjUzIj48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIxMSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9Ijc4Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1MiI+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEyNSI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjkxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNDIiPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTcwIj48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMTA5IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSItMTA5IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTA5IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI0NSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iLTg2IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMzciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMTUiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iOTAiPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xMDQiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIzNiI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xMjMiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTExIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iODkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjU1Ij48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItMTU1IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSI4NiIvPjxwYWlyIGtlcm49Ii0xNTEiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMjUyIi8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItMTQ2IiBrcHgyPSI4NSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTU1IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIyNTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIyMjgiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTUxIiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii0xNTEiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTExIi8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNTEiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTUxIiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xNTUiIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTE0Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjkxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjUwIj48cGFpciBrZXJuPSItMTciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iOTEiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjExNSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIzOSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjM2Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjkiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNDUiPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxNzMiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxOTciPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjQzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xODMiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE0NCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjczIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI0MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI4NSIvPjxwYWlyIGtlcm49Ii0xODMiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xODMiIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjQ3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODEiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMTgzIiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMzciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTEiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1MyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTM3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMzMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItOTUiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIzOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjM2Ii8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjQ1Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDYiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjkyIj48cGFpciBrZXJuPSItMTQyIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE0NiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI4OSI+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjQ2Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTEwNCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjIxMyIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMjEyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjEwNCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMjExIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iNTYiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTc0Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTYiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MSIvPjwva2VybmluZz48L2ZvbnQtbWV0cmljcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb0JkLnR0ZiBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYU1vQmQudHRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZTY1NDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb0JkLnR0ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb0JkLnhtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYU1vQmQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMzMxMDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb0JkLnhtbApAQCAtMCwwICsxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjxmb250LW1ldHJpY3MgbWV0cmljcy12ZXJzaW9uPSIyIiB0eXBlPSJUWVBFMCI+PGZvbnQtbmFtZT5CaXRzdHJlYW1WZXJhU2Fuc01vbm8tQm9sZDwvZm9udC1uYW1lPjxmdWxsLW5hbWU+Qml0c3RyZWFtIFZlcmEgU2FucyBNb25vIEJvbGQ8L2Z1bGwtbmFtZT48ZmFtaWx5LW5hbWU+Qml0c3RyZWFtIFZlcmEgU2FucyBNb25vPC9mYW1pbHktbmFtZT48ZW1iZWQvPjxjYXAtaGVpZ2h0PjcyOTwvY2FwLWhlaWdodD48eC1oZWlnaHQ+NTQ2PC94LWhlaWdodD48YXNjZW5kZXI+NzU5PC9hc2NlbmRlcj48ZGVzY2VuZGVyPi0yNDA8L2Rlc2NlbmRlcj48YmJveD48bGVmdD4tMTk8L2xlZnQ+PGJvdHRvbT4tMjM1PC9ib3R0b20+PHJpZ2h0PjYwNTwvcmlnaHQ+PHRvcD45Mjg8L3RvcD48L2Jib3g+PGZsYWdzPjM0PC9mbGFncz48c3RlbXY+MDwvc3RlbXY+PGl0YWxpY2FuZ2xlPjA8L2l0YWxpY2FuZ2xlPjxzdWJ0eXBlPlRZUEUwPC9zdWJ0eXBlPjxtdWx0aWJ5dGUtZXh0cmFzPjxjaWQtdHlwZT5DSURGb250VHlwZTI8L2NpZC10eXBlPjxkZWZhdWx0LXdpZHRoPjA8L2RlZmF1bHQtd2lkdGg+PGJmcmFuZ2VzPjxiZiBnaT0iMyIgdWU9IjEyNiIgdXM9IjMyIi8+PGJmIGdpPSIxNzIiIHVlPSIxNjAiIHVzPSIxNjAiLz48YmYgZ2k9IjE2MyIgdWU9IjE2MSIgdXM9IjE2MSIvPjxiZiBnaT0iMTMyIiB1ZT0iMTYzIiB1cz0iMTYyIi8+PGJmIGdpPSIxODkiIHVlPSIxNjQiIHVzPSIxNjQiLz48YmYgZ2k9IjE1MCIgdWU9IjE2NSIgdXM9IjE2NSIvPjxiZiBnaT0iMjMxIiB1ZT0iMTY2IiB1cz0iMTY2Ii8+PGJmIGdpPSIxMzQiIHVlPSIxNjciIHVzPSIxNjciLz48YmYgZ2k9IjE0MiIgdWU9IjE2OCIgdXM9IjE2OCIvPjxiZiBnaT0iMTM5IiB1ZT0iMTY5IiB1cz0iMTY5Ii8+PGJmIGdpPSIxNTciIHVlPSIxNzAiIHVzPSIxNzAiLz48YmYgZ2k9IjE2OSIgdWU9IjE3MSIgdXM9IjE3MSIvPjxiZiBnaT0iMTY0IiB1ZT0iMTcyIiB1cz0iMTcyIi8+PGJmIGdpPSIyNTYiIHVlPSIxNzMiIHVzPSIxNzMiLz48YmYgZ2k9IjEzOCIgdWU9IjE3NCIgdXM9IjE3NCIvPjxiZiBnaT0iMjE3IiB1ZT0iMTc1IiB1cz0iMTc1Ii8+PGJmIGdpPSIxMzEiIHVlPSIxNzYiIHVzPSIxNzYiLz48YmYgZ2k9IjE0NyIgdWU9IjE3NyIgdXM9IjE3NyIvPjxiZiBnaT0iMjQxIiB1ZT0iMTc5IiB1cz0iMTc4Ii8+PGJmIGdpPSIxNDEiIHVlPSIxODAiIHVzPSIxODAiLz48YmYgZ2k9IjE1MSIgdWU9IjE4MSIgdXM9IjE4MSIvPjxiZiBnaT0iMTM2IiB1ZT0iMTgyIiB1cz0iMTgyIi8+PGJmIGdpPSIxOTUiIHVlPSIxODMiIHVzPSIxODMiLz48YmYgZ2k9IjIyMSIgdWU9IjE4NCIgdXM9IjE4NCIvPjxiZiBnaT0iMjQwIiB1ZT0iMTg1IiB1cz0iMTg1Ii8+PGJmIGdpPSIxNTgiIHVlPSIxODYiIHVzPSIxODYiLz48YmYgZ2k9IjE3MCIgdWU9IjE4NyIgdXM9IjE4NyIvPjxiZiBnaT0iMjQzIiB1ZT0iMTkwIiB1cz0iMTg4Ii8+PGJmIGdpPSIxNjIiIHVlPSIxOTEiIHVzPSIxOTEiLz48YmYgZ2k9IjE3MyIgdWU9IjE5MiIgdXM9IjE5MiIvPjxiZiBnaT0iMjAxIiB1ZT0iMTkzIiB1cz0iMTkzIi8+PGJmIGdpPSIxOTkiIHVlPSIxOTQiIHVzPSIxOTQiLz48YmYgZ2k9IjE3NCIgdWU9IjE5NSIgdXM9IjE5NSIvPjxiZiBnaT0iOTgiIHVlPSIxOTciIHVzPSIxOTYiLz48YmYgZ2k9IjE0NCIgdWU9IjE5OCIgdXM9IjE5OCIvPjxiZiBnaT0iMTAwIiB1ZT0iMTk5IiB1cz0iMTk5Ii8+PGJmIGdpPSIyMDMiIHVlPSIyMDAiIHVzPSIyMDAiLz48YmYgZ2k9IjEwMSIgdWU9IjIwMSIgdXM9IjIwMSIvPjxiZiBnaT0iMjAwIiB1ZT0iMjAyIiB1cz0iMjAyIi8+PGJmIGdpPSIyMDIiIHVlPSIyMDMiIHVzPSIyMDMiLz48YmYgZ2k9IjIwNyIgdWU9IjIwNCIgdXM9IjIwNCIvPjxiZiBnaT0iMjA0IiB1ZT0iMjA3IiB1cz0iMjA1Ii8+PGJmIGdpPSIyMzIiIHVlPSIyMDgiIHVzPSIyMDgiLz48YmYgZ2k9IjEwMiIgdWU9IjIwOSIgdXM9IjIwOSIvPjxiZiBnaT0iMjEwIiB1ZT0iMjEwIiB1cz0iMjEwIi8+PGJmIGdpPSIyMDgiIHVlPSIyMTIiIHVzPSIyMTEiLz48YmYgZ2k9IjE3NSIgdWU9IjIxMyIgdXM9IjIxMyIvPjxiZiBnaT0iMTAzIiB1ZT0iMjE0IiB1cz0iMjE0Ii8+PGJmIGdpPSIyMzkiIHVlPSIyMTUiIHVzPSIyMTUiLz48YmYgZ2k9IjE0NSIgdWU9IjIxNiIgdXM9IjIxNiIvPjxiZiBnaT0iMjEzIiB1ZT0iMjE3IiB1cz0iMjE3Ii8+PGJmIGdpPSIyMTEiIHVlPSIyMTkiIHVzPSIyMTgiLz48YmYgZ2k9IjEwNCIgdWU9IjIyMCIgdXM9IjIyMCIvPjxiZiBnaT0iMjM0IiB1ZT0iMjIxIiB1cz0iMjIxIi8+PGJmIGdpPSIyMzYiIHVlPSIyMjIiIHVzPSIyMjIiLz48YmYgZ2k9IjEzNyIgdWU9IjIyMyIgdXM9IjIyMyIvPjxiZiBnaT0iMTA2IiB1ZT0iMjI0IiB1cz0iMjI0Ii8+PGJmIGdpPSIxMDUiIHVlPSIyMjUiIHVzPSIyMjUiLz48YmYgZ2k9IjEwNyIgdWU9IjIyNiIgdXM9IjIyNiIvPjxiZiBnaT0iMTA5IiB1ZT0iMjI3IiB1cz0iMjI3Ii8+PGJmIGdpPSIxMDgiIHVlPSIyMjgiIHVzPSIyMjgiLz48YmYgZ2k9IjExMCIgdWU9IjIyOSIgdXM9IjIyOSIvPjxiZiBnaT0iMTYwIiB1ZT0iMjMwIiB1cz0iMjMwIi8+PGJmIGdpPSIxMTEiIHVlPSIyMzEiIHVzPSIyMzEiLz48YmYgZ2k9IjExMyIgdWU9IjIzMiIgdXM9IjIzMiIvPjxiZiBnaT0iMTEyIiB1ZT0iMjMzIiB1cz0iMjMzIi8+PGJmIGdpPSIxMTQiIHVlPSIyMzUiIHVzPSIyMzQiLz48YmYgZ2k9IjExNyIgdWU9IjIzNiIgdXM9IjIzNiIvPjxiZiBnaT0iMTE2IiB1ZT0iMjM3IiB1cz0iMjM3Ii8+PGJmIGdpPSIxMTgiIHVlPSIyMzkiIHVzPSIyMzgiLz48YmYgZ2k9IjIzMyIgdWU9IjI0MCIgdXM9IjI0MCIvPjxiZiBnaT0iMTIwIiB1ZT0iMjQxIiB1cz0iMjQxIi8+PGJmIGdpPSIxMjIiIHVlPSIyNDIiIHVzPSIyNDIiLz48YmYgZ2k9IjEyMSIgdWU9IjI0MyIgdXM9IjI0MyIvPjxiZiBnaT0iMTIzIiB1ZT0iMjQ0IiB1cz0iMjQ0Ii8+PGJmIGdpPSIxMjUiIHVlPSIyNDUiIHVzPSIyNDUiLz48YmYgZ2k9IjEyNCIgdWU9IjI0NiIgdXM9IjI0NiIvPjxiZiBnaT0iMTg0IiB1ZT0iMjQ3IiB1cz0iMjQ3Ii8+PGJmIGdpPSIxNjEiIHVlPSIyNDgiIHVzPSIyNDgiLz48YmYgZ2k9IjEyNyIgdWU9IjI0OSIgdXM9IjI0OSIvPjxiZiBnaT0iMTI2IiB1ZT0iMjUwIiB1cz0iMjUwIi8+PGJmIGdpPSIxMjgiIHVlPSIyNTIiIHVzPSIyNTEiLz48YmYgZ2k9IjIzNSIgdWU9IjI1MyIgdXM9IjI1MyIvPjxiZiBnaT0iMjM3IiB1ZT0iMjU0IiB1cz0iMjU0Ii8+PGJmIGdpPSIxODYiIHVlPSIyNTUiIHVzPSIyNTUiLz48YmYgZ2k9IjI1MSIgdWU9IjI2MyIgdXM9IjI2MiIvPjxiZiBnaT0iMjUzIiB1ZT0iMjY5IiB1cz0iMjY4Ii8+PGJmIGdpPSIwIiB1ZT0iMjcwIiB1cz0iMjcwIi8+PGJmIGdpPSIwIiB1ZT0iMjcxIiB1cz0iMjcxIi8+PGJmIGdpPSIwIiB1ZT0iMjcyIiB1cz0iMjcyIi8+PGJmIGdpPSIyNTUiIHVlPSIyNzMiIHVzPSIyNzMiLz48YmYgZ2k9IjI0NiIgdWU9IjI4NyIgdXM9IjI4NiIvPjxiZiBnaT0iMjQ4IiB1ZT0iMzA0IiB1cz0iMzA0Ii8+PGJmIGdpPSIyMTQiIHVlPSIzMDUiIHVzPSIzMDUiLz48YmYgZ2k9IjIyNSIgdWU9IjMyMiIgdXM9IjMyMSIvPjxiZiBnaT0iMTc2IiB1ZT0iMzM5IiB1cz0iMzM4Ii8+PGJmIGdpPSIyNDkiIHVlPSIzNTEiIHVzPSIzNTAiLz48YmYgZ2k9IjIyNyIgdWU9IjM1MyIgdXM9IjM1MiIvPjxiZiBnaT0iMTg3IiB1ZT0iMzc2IiB1cz0iMzc2Ii8+PGJmIGdpPSIyMjkiIHVlPSIzODIiIHVzPSIzODEiLz48YmYgZ2k9IjE2NiIgdWU9IjQwMiIgdXM9IjQwMiIvPjxiZiBnaT0iMjE1IiB1ZT0iNzEwIiB1cz0iNzEwIi8+PGJmIGdpPSIyMjQiIHVlPSI3MTEiIHVzPSI3MTEiLz48YmYgZ2k9IjIxOCIgdWU9IjczMCIgdXM9IjcyOCIvPjxiZiBnaT0iMjIzIiB1ZT0iNzMxIiB1cz0iNzMxIi8+PGJmIGdpPSIyMTYiIHVlPSI3MzIiIHVzPSI3MzIiLz48YmYgZ2k9IjIyMiIgdWU9IjczMyIgdXM9IjczMyIvPjxiZiBnaT0iMTU5IiB1ZT0iOTM3IiB1cz0iOTM3Ii8+PGJmIGdpPSIxNTUiIHVlPSI5NjAiIHVzPSI5NjAiLz48YmYgZ2k9IjE3OCIgdWU9IjgyMTIiIHVzPSI4MjExIi8+PGJmIGdpPSIwIiB1ZT0iODIxMyIgdXM9IjgyMTMiLz48YmYgZ2k9IjAiIHVlPSI4MjE0IiB1cz0iODIxNCIvPjxiZiBnaT0iMCIgdWU9IjgyMTUiIHVzPSI4MjE1Ii8+PGJmIGdpPSIxODIiIHVlPSI4MjE3IiB1cz0iODIxNiIvPjxiZiBnaT0iMTk2IiB1ZT0iODIxOCIgdXM9IjgyMTgiLz48YmYgZ2k9IjAiIHVlPSI4MjE5IiB1cz0iODIxOSIvPjxiZiBnaT0iMTgwIiB1ZT0iODIyMSIgdXM9IjgyMjAiLz48YmYgZ2k9IjE5NyIgdWU9IjgyMjIiIHVzPSI4MjIyIi8+PGJmIGdpPSIwIiB1ZT0iODIyMyIgdXM9IjgyMjMiLz48YmYgZ2k9IjEzMCIgdWU9IjgyMjQiIHVzPSI4MjI0Ii8+PGJmIGdpPSIxOTQiIHVlPSI4MjI1IiB1cz0iODIyNSIvPjxiZiBnaT0iMTM1IiB1ZT0iODIyNiIgdXM9IjgyMjYiLz48YmYgZ2k9IjAiIHVlPSI4MjI3IiB1cz0iODIyNyIvPjxiZiBnaT0iMCIgdWU9IjgyMjgiIHVzPSI4MjI4Ii8+PGJmIGdpPSIwIiB1ZT0iODIyOSIgdXM9IjgyMjkiLz48YmYgZ2k9IjE3MSIgdWU9IjgyMzAiIHVzPSI4MjMwIi8+PGJmIGdpPSIxOTgiIHVlPSI4MjQwIiB1cz0iODI0MCIvPjxiZiBnaT0iMTkwIiB1ZT0iODI1MCIgdXM9IjgyNDkiLz48YmYgZ2k9IjI1OCIgdWU9IjgzNjQiIHVzPSI4MzY0Ii8+PGJmIGdpPSIxNDAiIHVlPSI4NDgyIiB1cz0iODQ4MiIvPjxiZiBnaT0iMTUyIiB1ZT0iODcwNiIgdXM9Ijg3MDYiLz48YmYgZ2k9IjAiIHVlPSI4NzA3IiB1cz0iODcwNyIvPjxiZiBnaT0iMCIgdWU9Ijg3MDgiIHVzPSI4NzA4Ii8+PGJmIGdpPSIwIiB1ZT0iODcwOSIgdXM9Ijg3MDkiLz48YmYgZ2k9IjE2OCIgdWU9Ijg3MTAiIHVzPSI4NzEwIi8+PGJmIGdpPSIxNTQiIHVlPSI4NzE5IiB1cz0iODcxOSIvPjxiZiBnaT0iMCIgdWU9Ijg3MjAiIHVzPSI4NzIwIi8+PGJmIGdpPSIxNTMiIHVlPSI4NzIxIiB1cz0iODcyMSIvPjxiZiBnaT0iMjM4IiB1ZT0iODcyMiIgdXM9Ijg3MjIiLz48YmYgZ2k9IjAiIHVlPSI4NzIzIiB1cz0iODcyMyIvPjxiZiBnaT0iMCIgdWU9Ijg3MjQiIHVzPSI4NzI0Ii8+PGJmIGdpPSIxODgiIHVlPSI4NzI1IiB1cz0iODcyNSIvPjxiZiBnaT0iMCIgdWU9Ijg3MjYiIHVzPSI4NzI2Ii8+PGJmIGdpPSIwIiB1ZT0iODcyNyIgdXM9Ijg3MjciLz48YmYgZ2k9IjAiIHVlPSI4NzI4IiB1cz0iODcyOCIvPjxiZiBnaT0iMjU3IiB1ZT0iODcyOSIgdXM9Ijg3MjkiLz48YmYgZ2k9IjE2NSIgdWU9Ijg3MzAiIHVzPSI4NzMwIi8+PGJmIGdpPSIwIiB1ZT0iODczMSIgdXM9Ijg3MzEiLz48YmYgZ2k9IjAiIHVlPSI4NzMyIiB1cz0iODczMiIvPjxiZiBnaT0iMCIgdWU9Ijg3MzMiIHVzPSI4NzMzIi8+PGJmIGdpPSIxNDYiIHVlPSI4NzM0IiB1cz0iODczNCIvPjxiZiBnaT0iMTU2IiB1ZT0iODc0NyIgdXM9Ijg3NDciLz48YmYgZ2k9IjE2NyIgdWU9Ijg3NzYiIHVzPSI4Nzc2Ii8+PGJmIGdpPSIxNDMiIHVlPSI4ODAwIiB1cz0iODgwMCIvPjxiZiBnaT0iMCIgdWU9Ijg4MDEiIHVzPSI4ODAxIi8+PGJmIGdpPSIwIiB1ZT0iODgwMiIgdXM9Ijg4MDIiLz48YmYgZ2k9IjAiIHVlPSI4ODAzIiB1cz0iODgwMyIvPjxiZiBnaT0iMTQ4IiB1ZT0iODgwNSIgdXM9Ijg4MDQiLz48YmYgZ2k9IjE4NSIgdWU9Ijk2NzQiIHVzPSI5Njc0Ii8+PGJmIGdpPSIxOTIiIHVlPSI2NDI1OCIgdXM9IjY0MjU3Ii8+PGJmIGdpPSIwIiB1ZT0iNjU1MzUiIHVzPSI2NTUzNSIvPjwvYmZyYW5nZXM+PGNpZC13aWR0aHMgc3RhcnQtaW5kZXg9IjAiPjx3eCB3PSI2MDIiLz48d3ggdz0iMCIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjwvY2lkLXdpZHRocz48L211bHRpYnl0ZS1leHRyYXM+PC9mb250LW1ldHJpY3M+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9WZXJhTW9uby50dGYgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb25vLnR0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzlmMGI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9WZXJhTW9uby50dGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9WZXJhTW9uby54bWwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb25vLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTBhODY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9WZXJhTW9uby54bWwKQEAgLTAsMCArMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48Zm9udC1tZXRyaWNzIG1ldHJpY3MtdmVyc2lvbj0iMiIgdHlwZT0iVFlQRTAiPjxmb250LW5hbWU+Qml0c3RyZWFtVmVyYVNhbnNNb25vLVJvbWFuPC9mb250LW5hbWU+PGZ1bGwtbmFtZT5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm88L2Z1bGwtbmFtZT48ZmFtaWx5LW5hbWU+Qml0c3RyZWFtIFZlcmEgU2FucyBNb25vPC9mYW1pbHktbmFtZT48ZW1iZWQvPjxjYXAtaGVpZ2h0PjcyOTwvY2FwLWhlaWdodD48eC1oZWlnaHQ+NTQ2PC94LWhlaWdodD48YXNjZW5kZXI+NzU5PC9hc2NlbmRlcj48ZGVzY2VuZGVyPi0yNDA8L2Rlc2NlbmRlcj48YmJveD48bGVmdD4tNDwvbGVmdD48Ym90dG9tPi0yMzU8L2JvdHRvbT48cmlnaHQ+NjA1PC9yaWdodD48dG9wPjkyODwvdG9wPjwvYmJveD48ZmxhZ3M+MzQ8L2ZsYWdzPjxzdGVtdj4wPC9zdGVtdj48aXRhbGljYW5nbGU+MDwvaXRhbGljYW5nbGU+PHN1YnR5cGU+VFlQRTA8L3N1YnR5cGU+PG11bHRpYnl0ZS1leHRyYXM+PGNpZC10eXBlPkNJREZvbnRUeXBlMjwvY2lkLXR5cGU+PGRlZmF1bHQtd2lkdGg+MDwvZGVmYXVsdC13aWR0aD48YmZyYW5nZXM+PGJmIGdpPSIzIiB1ZT0iMTI2IiB1cz0iMzIiLz48YmYgZ2k9IjE3MiIgdWU9IjE2MCIgdXM9IjE2MCIvPjxiZiBnaT0iMTYzIiB1ZT0iMTYxIiB1cz0iMTYxIi8+PGJmIGdpPSIxMzIiIHVlPSIxNjMiIHVzPSIxNjIiLz48YmYgZ2k9IjE4OSIgdWU9IjE2NCIgdXM9IjE2NCIvPjxiZiBnaT0iMTUwIiB1ZT0iMTY1IiB1cz0iMTY1Ii8+PGJmIGdpPSIyMzEiIHVlPSIxNjYiIHVzPSIxNjYiLz48YmYgZ2k9IjEzNCIgdWU9IjE2NyIgdXM9IjE2NyIvPjxiZiBnaT0iMTQyIiB1ZT0iMTY4IiB1cz0iMTY4Ii8+PGJmIGdpPSIxMzkiIHVlPSIxNjkiIHVzPSIxNjkiLz48YmYgZ2k9IjE1NyIgdWU9IjE3MCIgdXM9IjE3MCIvPjxiZiBnaT0iMTY5IiB1ZT0iMTcxIiB1cz0iMTcxIi8+PGJmIGdpPSIxNjQiIHVlPSIxNzIiIHVzPSIxNzIiLz48YmYgZ2k9IjI1NiIgdWU9IjE3MyIgdXM9IjE3MyIvPjxiZiBnaT0iMTM4IiB1ZT0iMTc0IiB1cz0iMTc0Ii8+PGJmIGdpPSIyMTciIHVlPSIxNzUiIHVzPSIxNzUiLz48YmYgZ2k9IjEzMSIgdWU9IjE3NiIgdXM9IjE3NiIvPjxiZiBnaT0iMTQ3IiB1ZT0iMTc3IiB1cz0iMTc3Ii8+PGJmIGdpPSIyNDEiIHVlPSIxNzkiIHVzPSIxNzgiLz48YmYgZ2k9IjE0MSIgdWU9IjE4MCIgdXM9IjE4MCIvPjxiZiBnaT0iMTUxIiB1ZT0iMTgxIiB1cz0iMTgxIi8+PGJmIGdpPSIxMzYiIHVlPSIxODIiIHVzPSIxODIiLz48YmYgZ2k9IjE5NSIgdWU9IjE4MyIgdXM9IjE4MyIvPjxiZiBnaT0iMjIxIiB1ZT0iMTg0IiB1cz0iMTg0Ii8+PGJmIGdpPSIyNDAiIHVlPSIxODUiIHVzPSIxODUiLz48YmYgZ2k9IjE1OCIgdWU9IjE4NiIgdXM9IjE4NiIvPjxiZiBnaT0iMTcwIiB1ZT0iMTg3IiB1cz0iMTg3Ii8+PGJmIGdpPSIyNDMiIHVlPSIxOTAiIHVzPSIxODgiLz48YmYgZ2k9IjE2MiIgdWU9IjE5MSIgdXM9IjE5MSIvPjxiZiBnaT0iMTczIiB1ZT0iMTkyIiB1cz0iMTkyIi8+PGJmIGdpPSIyMDEiIHVlPSIxOTMiIHVzPSIxOTMiLz48YmYgZ2k9IjE5OSIgdWU9IjE5NCIgdXM9IjE5NCIvPjxiZiBnaT0iMTc0IiB1ZT0iMTk1IiB1cz0iMTk1Ii8+PGJmIGdpPSI5OCIgdWU9IjE5NyIgdXM9IjE5NiIvPjxiZiBnaT0iMTQ0IiB1ZT0iMTk4IiB1cz0iMTk4Ii8+PGJmIGdpPSIxMDAiIHVlPSIxOTkiIHVzPSIxOTkiLz48YmYgZ2k9IjIwMyIgdWU9IjIwMCIgdXM9IjIwMCIvPjxiZiBnaT0iMTAxIiB1ZT0iMjAxIiB1cz0iMjAxIi8+PGJmIGdpPSIyMDAiIHVlPSIyMDIiIHVzPSIyMDIiLz48YmYgZ2k9IjIwMiIgdWU9IjIwMyIgdXM9IjIwMyIvPjxiZiBnaT0iMjA3IiB1ZT0iMjA0IiB1cz0iMjA0Ii8+PGJmIGdpPSIyMDQiIHVlPSIyMDciIHVzPSIyMDUiLz48YmYgZ2k9IjIzMiIgdWU9IjIwOCIgdXM9IjIwOCIvPjxiZiBnaT0iMTAyIiB1ZT0iMjA5IiB1cz0iMjA5Ii8+PGJmIGdpPSIyMTAiIHVlPSIyMTAiIHVzPSIyMTAiLz48YmYgZ2k9IjIwOCIgdWU9IjIxMiIgdXM9IjIxMSIvPjxiZiBnaT0iMTc1IiB1ZT0iMjEzIiB1cz0iMjEzIi8+PGJmIGdpPSIxMDMiIHVlPSIyMTQiIHVzPSIyMTQiLz48YmYgZ2k9IjIzOSIgdWU9IjIxNSIgdXM9IjIxNSIvPjxiZiBnaT0iMTQ1IiB1ZT0iMjE2IiB1cz0iMjE2Ii8+PGJmIGdpPSIyMTMiIHVlPSIyMTciIHVzPSIyMTciLz48YmYgZ2k9IjIxMSIgdWU9IjIxOSIgdXM9IjIxOCIvPjxiZiBnaT0iMTA0IiB1ZT0iMjIwIiB1cz0iMjIwIi8+PGJmIGdpPSIyMzQiIHVlPSIyMjEiIHVzPSIyMjEiLz48YmYgZ2k9IjIzNiIgdWU9IjIyMiIgdXM9IjIyMiIvPjxiZiBnaT0iMTM3IiB1ZT0iMjIzIiB1cz0iMjIzIi8+PGJmIGdpPSIxMDYiIHVlPSIyMjQiIHVzPSIyMjQiLz48YmYgZ2k9IjEwNSIgdWU9IjIyNSIgdXM9IjIyNSIvPjxiZiBnaT0iMTA3IiB1ZT0iMjI2IiB1cz0iMjI2Ii8+PGJmIGdpPSIxMDkiIHVlPSIyMjciIHVzPSIyMjciLz48YmYgZ2k9IjEwOCIgdWU9IjIyOCIgdXM9IjIyOCIvPjxiZiBnaT0iMTEwIiB1ZT0iMjI5IiB1cz0iMjI5Ii8+PGJmIGdpPSIxNjAiIHVlPSIyMzAiIHVzPSIyMzAiLz48YmYgZ2k9IjExMSIgdWU9IjIzMSIgdXM9IjIzMSIvPjxiZiBnaT0iMTEzIiB1ZT0iMjMyIiB1cz0iMjMyIi8+PGJmIGdpPSIxMTIiIHVlPSIyMzMiIHVzPSIyMzMiLz48YmYgZ2k9IjExNCIgdWU9IjIzNSIgdXM9IjIzNCIvPjxiZiBnaT0iMTE3IiB1ZT0iMjM2IiB1cz0iMjM2Ii8+PGJmIGdpPSIxMTYiIHVlPSIyMzciIHVzPSIyMzciLz48YmYgZ2k9IjExOCIgdWU9IjIzOSIgdXM9IjIzOCIvPjxiZiBnaT0iMjMzIiB1ZT0iMjQwIiB1cz0iMjQwIi8+PGJmIGdpPSIxMjAiIHVlPSIyNDEiIHVzPSIyNDEiLz48YmYgZ2k9IjEyMiIgdWU9IjI0MiIgdXM9IjI0MiIvPjxiZiBnaT0iMTIxIiB1ZT0iMjQzIiB1cz0iMjQzIi8+PGJmIGdpPSIxMjMiIHVlPSIyNDQiIHVzPSIyNDQiLz48YmYgZ2k9IjEyNSIgdWU9IjI0NSIgdXM9IjI0NSIvPjxiZiBnaT0iMTI0IiB1ZT0iMjQ2IiB1cz0iMjQ2Ii8+PGJmIGdpPSIxODQiIHVlPSIyNDciIHVzPSIyNDciLz48YmYgZ2k9IjE2MSIgdWU9IjI0OCIgdXM9IjI0OCIvPjxiZiBnaT0iMTI3IiB1ZT0iMjQ5IiB1cz0iMjQ5Ii8+PGJmIGdpPSIxMjYiIHVlPSIyNTAiIHVzPSIyNTAiLz48YmYgZ2k9IjEyOCIgdWU9IjI1MiIgdXM9IjI1MSIvPjxiZiBnaT0iMjM1IiB1ZT0iMjUzIiB1cz0iMjUzIi8+PGJmIGdpPSIyMzciIHVlPSIyNTQiIHVzPSIyNTQiLz48YmYgZ2k9IjE4NiIgdWU9IjI1NSIgdXM9IjI1NSIvPjxiZiBnaT0iMjUxIiB1ZT0iMjYzIiB1cz0iMjYyIi8+PGJmIGdpPSIyNTMiIHVlPSIyNjkiIHVzPSIyNjgiLz48YmYgZ2k9IjAiIHVlPSIyNzAiIHVzPSIyNzAiLz48YmYgZ2k9IjAiIHVlPSIyNzEiIHVzPSIyNzEiLz48YmYgZ2k9IjAiIHVlPSIyNzIiIHVzPSIyNzIiLz48YmYgZ2k9IjI1NSIgdWU9IjI3MyIgdXM9IjI3MyIvPjxiZiBnaT0iMjQ2IiB1ZT0iMjg3IiB1cz0iMjg2Ii8+PGJmIGdpPSIyNDgiIHVlPSIzMDQiIHVzPSIzMDQiLz48YmYgZ2k9IjIxNCIgdWU9IjMwNSIgdXM9IjMwNSIvPjxiZiBnaT0iMjI1IiB1ZT0iMzIyIiB1cz0iMzIxIi8+PGJmIGdpPSIxNzYiIHVlPSIzMzkiIHVzPSIzMzgiLz48YmYgZ2k9IjI0OSIgdWU9IjM1MSIgdXM9IjM1MCIvPjxiZiBnaT0iMjI3IiB1ZT0iMzUzIiB1cz0iMzUyIi8+PGJmIGdpPSIxODciIHVlPSIzNzYiIHVzPSIzNzYiLz48YmYgZ2k9IjIyOSIgdWU9IjM4MiIgdXM9IjM4MSIvPjxiZiBnaT0iMTY2IiB1ZT0iNDAyIiB1cz0iNDAyIi8+PGJmIGdpPSIyMTUiIHVlPSI3MTAiIHVzPSI3MTAiLz48YmYgZ2k9IjIyNCIgdWU9IjcxMSIgdXM9IjcxMSIvPjxiZiBnaT0iMjE4IiB1ZT0iNzMwIiB1cz0iNzI4Ii8+PGJmIGdpPSIyMjMiIHVlPSI3MzEiIHVzPSI3MzEiLz48YmYgZ2k9IjIxNiIgdWU9IjczMiIgdXM9IjczMiIvPjxiZiBnaT0iMjIyIiB1ZT0iNzMzIiB1cz0iNzMzIi8+PGJmIGdpPSIxNTkiIHVlPSI5MzciIHVzPSI5MzciLz48YmYgZ2k9IjE1NSIgdWU9Ijk2MCIgdXM9Ijk2MCIvPjxiZiBnaT0iMTc4IiB1ZT0iODIxMiIgdXM9IjgyMTEiLz48YmYgZ2k9IjAiIHVlPSI4MjEzIiB1cz0iODIxMyIvPjxiZiBnaT0iMCIgdWU9IjgyMTQiIHVzPSI4MjE0Ii8+PGJmIGdpPSIwIiB1ZT0iODIxNSIgdXM9IjgyMTUiLz48YmYgZ2k9IjE4MiIgdWU9IjgyMTciIHVzPSI4MjE2Ii8+PGJmIGdpPSIxOTYiIHVlPSI4MjE4IiB1cz0iODIxOCIvPjxiZiBnaT0iMCIgdWU9IjgyMTkiIHVzPSI4MjE5Ii8+PGJmIGdpPSIxODAiIHVlPSI4MjIxIiB1cz0iODIyMCIvPjxiZiBnaT0iMTk3IiB1ZT0iODIyMiIgdXM9IjgyMjIiLz48YmYgZ2k9IjAiIHVlPSI4MjIzIiB1cz0iODIyMyIvPjxiZiBnaT0iMTMwIiB1ZT0iODIyNCIgdXM9IjgyMjQiLz48YmYgZ2k9IjE5NCIgdWU9IjgyMjUiIHVzPSI4MjI1Ii8+PGJmIGdpPSIxMzUiIHVlPSI4MjI2IiB1cz0iODIyNiIvPjxiZiBnaT0iMCIgdWU9IjgyMjciIHVzPSI4MjI3Ii8+PGJmIGdpPSIwIiB1ZT0iODIyOCIgdXM9IjgyMjgiLz48YmYgZ2k9IjAiIHVlPSI4MjI5IiB1cz0iODIyOSIvPjxiZiBnaT0iMTcxIiB1ZT0iODIzMCIgdXM9IjgyMzAiLz48YmYgZ2k9IjE5OCIgdWU9IjgyNDAiIHVzPSI4MjQwIi8+PGJmIGdpPSIxOTAiIHVlPSI4MjUwIiB1cz0iODI0OSIvPjxiZiBnaT0iMjU4IiB1ZT0iODM2NCIgdXM9IjgzNjQiLz48YmYgZ2k9IjE0MCIgdWU9Ijg0ODIiIHVzPSI4NDgyIi8+PGJmIGdpPSIxNTIiIHVlPSI4NzA2IiB1cz0iODcwNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MDciIHVzPSI4NzA3Ii8+PGJmIGdpPSIwIiB1ZT0iODcwOCIgdXM9Ijg3MDgiLz48YmYgZ2k9IjAiIHVlPSI4NzA5IiB1cz0iODcwOSIvPjxiZiBnaT0iMTY4IiB1ZT0iODcxMCIgdXM9Ijg3MTAiLz48YmYgZ2k9IjE1NCIgdWU9Ijg3MTkiIHVzPSI4NzE5Ii8+PGJmIGdpPSIwIiB1ZT0iODcyMCIgdXM9Ijg3MjAiLz48YmYgZ2k9IjE1MyIgdWU9Ijg3MjEiIHVzPSI4NzIxIi8+PGJmIGdpPSIyMzgiIHVlPSI4NzIyIiB1cz0iODcyMiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjMiIHVzPSI4NzIzIi8+PGJmIGdpPSIwIiB1ZT0iODcyNCIgdXM9Ijg3MjQiLz48YmYgZ2k9IjE4OCIgdWU9Ijg3MjUiIHVzPSI4NzI1Ii8+PGJmIGdpPSIwIiB1ZT0iODcyNiIgdXM9Ijg3MjYiLz48YmYgZ2k9IjAiIHVlPSI4NzI3IiB1cz0iODcyNyIvPjxiZiBnaT0iMCIgdWU9Ijg3MjgiIHVzPSI4NzI4Ii8+PGJmIGdpPSIyNTciIHVlPSI4NzI5IiB1cz0iODcyOSIvPjxiZiBnaT0iMTY1IiB1ZT0iODczMCIgdXM9Ijg3MzAiLz48YmYgZ2k9IjAiIHVlPSI4NzMxIiB1cz0iODczMSIvPjxiZiBnaT0iMCIgdWU9Ijg3MzIiIHVzPSI4NzMyIi8+PGJmIGdpPSIwIiB1ZT0iODczMyIgdXM9Ijg3MzMiLz48YmYgZ2k9IjE0NiIgdWU9Ijg3MzQiIHVzPSI4NzM0Ii8+PGJmIGdpPSIxNTYiIHVlPSI4NzQ3IiB1cz0iODc0NyIvPjxiZiBnaT0iMTY3IiB1ZT0iODc3NiIgdXM9Ijg3NzYiLz48YmYgZ2k9IjE0MyIgdWU9Ijg4MDAiIHVzPSI4ODAwIi8+PGJmIGdpPSIwIiB1ZT0iODgwMSIgdXM9Ijg4MDEiLz48YmYgZ2k9IjAiIHVlPSI4ODAyIiB1cz0iODgwMiIvPjxiZiBnaT0iMCIgdWU9Ijg4MDMiIHVzPSI4ODAzIi8+PGJmIGdpPSIxNDgiIHVlPSI4ODA1IiB1cz0iODgwNCIvPjxiZiBnaT0iMTg1IiB1ZT0iOTY3NCIgdXM9Ijk2NzQiLz48YmYgZ2k9IjE5MiIgdWU9IjY0MjU4IiB1cz0iNjQyNTciLz48YmYgZ2k9IjAiIHVlPSI2NTUzNSIgdXM9IjY1NTM1Ii8+PC9iZnJhbmdlcz48Y2lkLXdpZHRocyBzdGFydC1pbmRleD0iMCI+PHd4IHc9IjYwMiIvPjx3eCB3PSIwIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PC9jaWQtd2lkdGhzPjwvbXVsdGlieXRlLWV4dHJhcz48L2ZvbnQtbWV0cmljcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFlZjA0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbApAQCAtMCwwICsxLDM5IEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM6ZD0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorICBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0iZCI+CisgIAorICA8eHNsOnRlbXBsYXRlIG5hbWU9ImNvbXBvbmVudC50aXRsZSI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9Ii4iLz4KKyAgICAKKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImxldmVsIj4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OmQ6c2VjdGlvbiI+CisgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGFuY2VzdG9yOjpkOnNlY3Rpb24pKzEiLz4KKyAgICAgICAgPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImFuY2VzdG9yOjpkOnNlY3Q1Ij42PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImFuY2VzdG9yOjpkOnNlY3Q0Ij41PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImFuY2VzdG9yOjpkOnNlY3QzIj40PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImFuY2VzdG9yOjpkOnNlY3QyIj4zPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImFuY2VzdG9yOjpkOnNlY3QxIj4yPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmVsZW1lbnQgbmFtZT0iaHskbGV2ZWwrMX0iIG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CisgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+dGl0bGU8L3hzbDphdHRyaWJ1dGU+CisgICAgICA8eHNsOmlmIHRlc3Q9IiRnZW5lcmF0ZS5pZC5hdHRyaWJ1dGVzID0gMCI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhbmNob3IiPgorICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRub2RlIi8+CisgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImNvbmRpdGlvbmFsIiBzZWxlY3Q9IjAiLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDwveHNsOmlmPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIkbm9kZSIgbW9kZT0ib2JqZWN0LnRpdGxlLm1hcmt1cCI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJhbGxvdy1hbmNob3JzIiBzZWxlY3Q9IjEiLz4KKyAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwZXJtYWxpbmsiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIkbm9kZSIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3hzbDplbGVtZW50PgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2RiLXBkZi54c2wgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2RiLXBkZi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RkMDY1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZGItcGRmLnhzbApAQCAtMCwwICsxLDY0IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisgIAorICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudC9mby9kb2Nib29rLnhzbCIgLz4KKworICA8IS0tIGNoZWNrIHByb2plY3QtcGxhbi5zaCBmb3IgaG93IHRoaXMgaXMgZ2VuZXJhdGVkLCBuZWVkZWQgdG8gdHdlYWsgCisgICAgICAgdGhlIGNvdmVyIHBhZ2UgICAgIAorICAgIC0tPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iL3RtcC90aXRsZXBhZ2UueHNsIi8+IAorCisgIDwhLS0gVG8gZm9yY2UgYSBwYWdlIGJyZWFrIGluIGRvY3VtZW50LCBpLmUgcGVyIHNlY3Rpb24gYWRkIGEgCisgICAgICA8P2hhcmQtcGFnZWJyZWFrPz4gdGFnLgorICAtLT4KKyA8eHNsOnRlbXBsYXRlIG1hdGNoPSJwcm9jZXNzaW5nLWluc3RydWN0aW9uKCdoYXJkLXBhZ2VicmVhaycpIj4KKyAgIDxmbzpibG9jayBicmVhay1iZWZvcmU9J3BhZ2UnIC8+CisgPC94c2w6dGVtcGxhdGU+CisKKyAgPCEtLUZpeCBmb3IgZGVmdWFsdCBpbmRlbnQgZ2V0dGluZyBUT0MgYWxsIHdpZXJkLi4KKyAgICAgIFNlZSBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL21sL2RvY2Jvb2stYXBwcy8yMDA1LXExL21zZzAwNDU1Lmh0bWwgCisgICAgICBGSVhNRTogbXVzdCBiZSBhIGJldHRlciBmaXgKKyAgICAtLT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJib2R5LnN0YXJ0LmluZGVudCIgc2VsZWN0PSInMCciLz4KKyAgPCEtLTx4c2w6cGFyYW0gbmFtZT0idGl0bGUubWFyZ2luLmxlZnQiIHNlbGVjdD0iJzAnIi8+LS0+CisKKyAgPCEtLSBzdG9wIGxvbmctaXNoIGhlYWRlciB0aXRsZXMgZ2V0dGluZyB3cmFwcGVkIC0tPgorICA8eHNsOnBhcmFtIG5hbWU9ImhlYWRlci5jb2x1bW4ud2lkdGhzIj4xIDEwIDE8L3hzbDpwYXJhbT4KKworICA8IS0tIGN1c3RvbWlzZSBoZWFkZXJzIGFuZCBmb290ZXJzIGEgbGl0dGxlIC0tPiAKKworICA8eHNsOnRlbXBsYXRlIG5hbWU9ImhlYWQuc2VwLnJ1bGUiPgorICAgPHhzbDppZiB0ZXN0PSIkaGVhZGVyLnJ1bGUgIT0gMCI+CisgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImJvcmRlci1ib3R0b20td2lkdGgiPjAuNXB0PC94c2w6YXR0cmlidXRlPgorICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJib3JkZXItYm90dG9tLXN0eWxlIj5zb2xpZDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYm9yZGVyLWJvdHRvbS1jb2xvciI+I2NjY2NjYzwveHNsOmF0dHJpYnV0ZT4KKyAgIDwveHNsOmlmPgorICA8L3hzbDp0ZW1wbGF0ZT4KKworICA8eHNsOnRlbXBsYXRlIG5hbWU9ImZvb3Quc2VwLnJ1bGUiPgorICAgIDx4c2w6aWYgdGVzdD0iJGZvb3Rlci5ydWxlICE9IDAiPgorICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJib3JkZXItdG9wLXdpZHRoIj4wLjVwdDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYm9yZGVyLXRvcC1zdHlsZSI+c29saWQ8L3hzbDphdHRyaWJ1dGU+CisgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImJvcmRlci10b3AtY29sb3IiPiNjY2NjY2M8L3hzbDphdHRyaWJ1dGU+CisgICAgPC94c2w6aWY+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDx4c2w6YXR0cmlidXRlLXNldCBuYW1lPSJoZWFkZXIuY29udGVudC5wcm9wZXJ0aWVzIj4KKyAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+I2NjY2NjYzwveHNsOmF0dHJpYnV0ZT4KKyAgPC94c2w6YXR0cmlidXRlLXNldD4KKworICA8eHNsOmF0dHJpYnV0ZS1zZXQgbmFtZT0iZm9vdGVyLmNvbnRlbnQucHJvcGVydGllcyI+CisgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY29sb3IiPiNjY2NjY2M8L3hzbDphdHRyaWJ1dGU+CisgIDwveHNsOmF0dHJpYnV0ZS1zZXQ+CisKKyAKKyAgPCEtLSBnZW5lcmFsIHNldHRpbmdzIC0tPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iZm9wMS5leHRlbnNpb25zIiBzZWxlY3Q9IjEiPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InBhcGVyLnR5cGUiIHNlbGVjdD0iJ0E0JyI+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSI+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0iYm9keS5mb250LmZhbWlseSIgc2VsZWN0PSIndmVyYXNhbnMnIj48L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ0aXRsZS5mb250LmZhbWlseSIgc2VsZWN0PSIndmVyYXNhbnMnIj48L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJtb25vc3BhY2UuZm9udC5mYW1pbHkiIHNlbGVjdD0iJ3ZlcmFtb25vJyI+PC94c2w6cGFyYW0+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljODQzYmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbApAQCAtMCwwICsxLDI1IEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM6ZD0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorICBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0iZCI+CisgIAorICA8eHNsOnRlbXBsYXRlIG5hbWU9ImRpdmlzaW9uLnRpdGxlIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iLiIvPgorICAgIAorICAgIDxoMT4KKyAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj50aXRsZTwveHNsOmF0dHJpYnV0ZT4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhbmNob3IiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIkbm9kZSIvPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iY29uZGl0aW9uYWwiIHNlbGVjdD0iMCIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iJG5vZGUiIG1vZGU9Im9iamVjdC50aXRsZS5tYXJrdXAiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iYWxsb3ctYW5jaG9ycyIgc2VsZWN0PSIxIi8+CisgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJG5vZGUiLz4KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC9oMT4KKyAgPC94c2w6dGVtcGxhdGU+Cis8L3hzbDpzdHlsZXNoZWV0PgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2RyYWZ0LnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZHJhZnQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMDUxYTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2RyYWZ0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2ZvcC1jb25maWcueG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9mb3AtY29uZmlnLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWNjNWNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9mb3AtY29uZmlnLnhtbApAQCAtMCwwICsxLDU4IEBACis8Zm9wIHZlcnNpb249IjEuMCI+CisKKyAgPCEtLSBTdHJpY3QgdXNlciBjb25maWd1cmF0aW9uIC0tPgorICA8c3RyaWN0LWNvbmZpZ3VyYXRpb24+dHJ1ZTwvc3RyaWN0LWNvbmZpZ3VyYXRpb24+CisKKyAgPCEtLSBTdHJpY3QgRk8gdmFsaWRhdGlvbiAtLT4KKyAgPHN0cmljdC12YWxpZGF0aW9uPnRydWU8L3N0cmljdC12YWxpZGF0aW9uPgorCisgICA8IS0tCisgICAgU2V0IHRoZSBiYXNlRGlyIHNvIGNvbW1vbi9vcGVuZWRoYW5kLnN2ZyByZWZlcmVuY2VzIGluIHBsYW5zIHN0aWxsCisgICAgd29yayBvay4gTm90ZSwgcmVsYXRpdmUgZmlsZSByZWZlcmVuY2VzIHRvIGN1cnJlbnQgZGlyIHNob3VsZCBzdGlsbCB3b3JrLgorICAgIC0tPgkKKyAgPGJhc2U+Li4vdGVtcGxhdGU8L2Jhc2U+CisgIDxmb250LWJhc2U+Li4vdGVtcGxhdGU8L2ZvbnQtYmFzZT4KKyAKKyAgPCEtLSBTb3VyY2UgcmVzb2x1dGlvbiBpbiBkcGkgKGRvdHMvcGl4ZWxzIHBlciBpbmNoKSBmb3IgZGV0ZXJtaW5pbmcgdGhlCisgICAgICAgc2l6ZSBvZiBwaXhlbHMgaW4gU1ZHIGFuZCBiaXRtYXAgaW1hZ2VzLCBkZWZhdWx0OiA3MmRwaSAtLT4KKyAgPCEtLSA8c291cmNlLXJlc29sdXRpb24+NzI8L3NvdXJjZS1yZXNvbHV0aW9uPiAtLT4KKyAgPCEtLSBUYXJnZXQgcmVzb2x1dGlvbiBpbiBkcGkgKGRvdHMvcGl4ZWxzIHBlciBpbmNoKSBmb3Igc3BlY2lmeWluZyB0aGUKKyAgICAgICB0YXJnZXQgcmVzb2x1dGlvbiBmb3IgZ2VuZXJhdGVkIGJpdG1hcHMsIGRlZmF1bHQ6IDcyZHBpIC0tPgorICA8IS0tIDx0YXJnZXQtcmVzb2x1dGlvbj43MjwvdGFyZ2V0LXJlc29sdXRpb24+IC0tPgorIAorICA8IS0tIGRlZmF1bHQgcGFnZS1oZWlnaHQgYW5kIHBhZ2Utd2lkdGgsIGluIGNhc2UKKyAgICAgICB2YWx1ZSBpcyBzcGVjaWZpZWQgYXMgYXV0byAtLT4KKyAgPGRlZmF1bHQtcGFnZS1zZXR0aW5ncyBoZWlnaHQ9IjExaW4iIHdpZHRoPSI4LjI2aW4iLz4gCisgCisgIDwhLS0gPHVzZS1jYWNoZT5mYWxzZTwvdXNlLWNhY2hlPiAtLT4KKyAKKyAgPHJlbmRlcmVycz4KKyAgICA8cmVuZGVyZXIgbWltZT0iYXBwbGljYXRpb24vcGRmIj4KKyAgICAgIDxmb250cz4KKyAgICAgICAgPGZvbnQgIG1ldHJpY3MtZmlsZT0iVmVyYU1vbm8ueG1sIgorICAgICAgICAgICAgICAga2VybmluZz0ieWVzIiAKKyAgICAgICAgICAgICAgIGVtYmVkLXVybD0iVmVyYU1vbm8udHRmIj4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFtb25vIiBzdHlsZT0ibm9ybWFsIiB3ZWlnaHQ9Im5vcm1hbCIvPgorICAgICAgICA8L2ZvbnQ+CisKKyAgICAgICAgPGZvbnQgIG1ldHJpY3MtZmlsZT0iVmVyYU1vQmQueG1sIgorICAgICAgICAgICAgICAga2VybmluZz0ieWVzIiAKKyAgICAgICAgICAgICAgIGVtYmVkLXVybD0iVmVyYU1vQmQudHRmIj4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFtb25vIiBzdHlsZT0ibm9ybWFsIiB3ZWlnaHQ9ImJvbGQiLz4KKyAgICAgICAgPC9mb250PgorCisgICAgICAgIDxmb250ICBtZXRyaWNzLWZpbGU9IlZlcmEueG1sIgorICAgICAgICAgICAgICAga2VybmluZz0ieWVzIiAKKyAgICAgICAgICAgICAgIGVtYmVkLXVybD0iVmVyYS50dGYiPgorICAgICAgICAgIDxmb250LXRyaXBsZXQgbmFtZT0idmVyYXNhbnMiIHN0eWxlPSJub3JtYWwiIHdlaWdodD0ibm9ybWFsIi8+CisgICAgICAgICAgPGZvbnQtdHJpcGxldCBuYW1lPSJ2ZXJhc2FucyIgc3R5bGU9Im5vcm1hbCIgd2VpZ2h0PSJib2xkIi8+CisgICAgICAgICAgPGZvbnQtdHJpcGxldCBuYW1lPSJ2ZXJhc2FucyIgc3R5bGU9Iml0YWxpYyIgd2VpZ2h0PSJub3JtYWwiLz4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFzYW5zIiBzdHlsZT0iaXRhbGljIiB3ZWlnaHQ9ImJvbGQiLz4KKyAgICAgICAgPC9mb250PgorICAgICAgICAKKyAgICAgICAgPGF1dG8tZGV0ZWN0Lz4KKyAgICAgIDwvZm9udHM+CisgICAgPC9yZW5kZXJlcj4KKyAgPC9yZW5kZXJlcnM+Cis8L2ZvcD4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9mb3JtYWwub2JqZWN0LmhlYWRpbmcueHNsIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9mb3JtYWwub2JqZWN0LmhlYWRpbmcueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMzkwMGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wKQEAgLTAsMCArMSwyMSBAQAorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zOmQ9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKKyAgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9ImQiPgorICAKKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYWwub2JqZWN0LmhlYWRpbmciPgorICAgIDx4c2w6cGFyYW0gbmFtZT0ib2JqZWN0IiBzZWxlY3Q9Ii4iLz4KKyAgICA8eHNsOnBhcmFtIG5hbWU9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iJG9iamVjdCIgbW9kZT0ib2JqZWN0LnRpdGxlLm1hcmt1cCI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJhbGxvdy1hbmNob3JzIiBzZWxlY3Q9IjEiLz4KKyAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICA8L3hzbDpwYXJhbT4KKyAgICA8cCBjbGFzcz0idGl0bGUiPgorICAgICAgPGI+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHRpdGxlIi8+PC9iPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBlcm1hbGluayI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRvYmplY3QiLz4KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC9wPgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9nbG9zcy1wZXJtYWxpbmtzLnhzbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZ2xvc3MtcGVybWFsaW5rcy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJmNTgxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZ2xvc3MtcGVybWFsaW5rcy54c2wKQEAgLTAsMCArMSwxNCBAQAorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCINCisgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIg0KKyAgeG1sbnM6ZD0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siDQorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+DQorDQorICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJnbG9zc2VudHJ5L2dsb3NzdGVybSI+DQorICAgIDx4c2w6YXBwbHktaW1wb3J0cy8+DQorICAgIDx4c2w6aWYgdGVzdD0iJGdlbmVyYXRlLnBlcm1hbGluayAhPSAwIj4NCisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4NCisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9Ii4uIi8+DQorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4NCisgICAgPC94c2w6aWY+DQorICA8L3hzbDp0ZW1wbGF0ZT4NCis8L3hzbDpzdHlsZXNoZWV0Pg0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvcGVybWFsaW5rcy54c2wgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL3Blcm1hbGlua3MueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYTFjMTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL3Blcm1hbGlua3MueHNsCkBAIC0wLDAgKzEsMjUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUucGVybWFsaW5rIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJwZXJtYWxpbmsudGV4dCI+wrY8L3hzbDpwYXJhbT4KKworICA8eHNsOnRlbXBsYXRlIG5hbWU9InBlcm1hbGluayI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJub2RlIi8+CisKKyAgICA8eHNsOmlmIHRlc3Q9IiRnZW5lcmF0ZS5wZXJtYWxpbmsgIT0gJzAnIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJwZXJtYWxpbmsiPgorICAgICAgICA8YSBhbHQ9IlBlcm1hbGluayIgdGl0bGU9IlBlcm1hbGluayI+CisgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iaHJlZiI+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iaHJlZi50YXJnZXQiPgorICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ib2JqZWN0IiAgc2VsZWN0PSIkbm9kZSIvPgorICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgICA8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0iJHBlcm1hbGluay50ZXh0Ii8+CisgICAgICAgIDwvYT4KKyAgICAgIDwvc3Bhbj4KKyAgICA8L3hzbDppZj4KKyAgPC94c2w6dGVtcGxhdGU+Cis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM2ZmY5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wKQEAgLTAsMCArMSw1NSBAQAorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zOmQ9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9ImQiPgorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJzZWN0aW9uIgorICAgICAgc2VsZWN0PSIoYW5jZXN0b3I6OnNlY3Rpb24gfAorICAgICAgICAgICAgICAgYW5jZXN0b3I6OnNpbXBsZXNlY3R8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2VjdDF8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2VjdDJ8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2VjdDN8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2VjdDR8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2VjdDUpW2xhc3QoKV0iLz4KKworICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVuZGVyYXMiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkc2VjdGlvbi9AcmVuZGVyYXMgPSAnc2VjdDEnIj4xPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRzZWN0aW9uL0ByZW5kZXJhcyA9ICdzZWN0MiciPjI8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iJHNlY3Rpb24vQHJlbmRlcmFzID0gJ3NlY3QzJyI+MzwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkc2VjdGlvbi9AcmVuZGVyYXMgPSAnc2VjdDQnIj40PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRzZWN0aW9uL0ByZW5kZXJhcyA9ICdzZWN0NSciPjU8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJyciLz48L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisKKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImxldmVsIj4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iJHJlbmRlcmFzICE9ICcnIj4KKyAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJlbmRlcmFzIi8+CisgICAgICAgIDwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPgorICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLmxldmVsIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRzZWN0aW9uIi8+CisgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorCisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Rpb24uaGVhZGluZyI+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ic2VjdGlvbiIgc2VsZWN0PSIkc2VjdGlvbiIvPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImxldmVsIiBzZWxlY3Q9IiRsZXZlbCIvPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InRpdGxlIj4KKyAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIkc2VjdGlvbiIgbW9kZT0ib2JqZWN0LnRpdGxlLm1hcmt1cCI+CisgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImFsbG93LWFuY2hvcnMiIHNlbGVjdD0iMSIvPgorICAgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgICAgIDx4c2w6aWYgdGVzdD0iJGxldmVsICZndDsgMCI+CisgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBlcm1hbGluayI+CisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIkc2VjdGlvbiIvPgorICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgIDwveHNsOmlmPgorICAgICAgPC94c2w6d2l0aC1wYXJhbT4KKyAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL3RpdGxlcGFnZS50ZW1wbGF0ZXMueG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS90aXRsZXBhZ2UudGVtcGxhdGVzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGVjMTFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS90aXRsZXBhZ2UudGVtcGxhdGVzLnhtbApAQCAtMCwwICsxLDEyNTkgQEAKKzwhRE9DVFlQRSB0OnRlbXBsYXRlcyBbCis8IUVOVElUWSBoc2l6ZTAgIjEwcHQiPgorPCFFTlRJVFkgaHNpemUxICIxMnB0Ij4KKzwhRU5USVRZIGhzaXplMiAiMTQuNHB0Ij4KKzwhRU5USVRZIGhzaXplMyAiMTcuMjhwdCI+Cis8IUVOVElUWSBoc2l6ZTQgIjIwLjczNnB0Ij4KKzwhRU5USVRZIGhzaXplNSAiMjQuODgzMnB0Ij4KKzwhRU5USVRZIGhzaXplMHNwYWNlICI3LjVwdCI+IDwhLS0gMC43NSAqIGhzaXplMCAtLT4KKzwhRU5USVRZIGhzaXplMXNwYWNlICI5cHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTEgLS0+Cis8IUVOVElUWSBoc2l6ZTJzcGFjZSAiMTAuOHB0Ij4gPCEtLSAwLjc1ICogaHNpemUyIC0tPgorPCFFTlRJVFkgaHNpemUzc3BhY2UgIjEyLjk2cHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTMgLS0+Cis8IUVOVElUWSBoc2l6ZTRzcGFjZSAiMTUuNTUycHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTQgLS0+Cis8IUVOVElUWSBoc2l6ZTVzcGFjZSAiMTguNjYyNHB0Ij4gPCEtLSAwLjc1ICogaHNpemU1IC0tPgorXT4KKzx0OnRlbXBsYXRlcyB4bWxuczp0PSJodHRwOi8vbndhbHNoLmNvbS9kb2Nib29rL3hzbC90ZW1wbGF0ZS8xLjAiCisJICAgICB4bWxuczpwYXJhbT0iaHR0cDovL253YWxzaC5jb20vZG9jYm9vay94c2wvdGVtcGxhdGUvMS4wL3BhcmFtIgorICAgICAgICAgICAgIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiCisgICAgICAgICAgICAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPgorCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICRJZDogdGl0bGVwYWdlLnRlbXBsYXRlcy54bWwsdiAxLjIzIDIwMDMvMTIvMTYgMDA6MzA6NDkgYm9ic3RheXRvbiBFeHAgJAorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBEb2NCb29rIFhTTCBTdHlsZXNoZWV0IGRpc3RyaWJ1dGlvbi4KKyAgICAgU2VlIC4uL1JFQURNRSBvciBodHRwOi8vZG9jYm9vay5zZi5uZXQvIGZvciBjb3B5cmlnaHQKKyAgICAgYW5kIG90aGVyIGluZm9ybWF0aW9uLgorCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJhcnRpY2xlIiB0OndyYXBwZXI9ImZvOmJsb2NrIgorICAgICAgICAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ij4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIgorICAgICAgICAgICAgIHRleHQtYWxpZ249ImNlbnRlciI+CisKKyAgICA8bWVkaWFvYmplY3QvPgorCisgICAgPHRpdGxlIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjphcnRpY2xlWzFdIgorCSAgIGtlZXAtd2l0aC1uZXh0PSJhbHdheXMiCisJICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICBmb250LXdlaWdodD0iYm9sZCIvPgorCisgICAgPHN1YnRpdGxlIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmFydGljbGVbMV0iCisJICAga2VlcC13aXRoLW5leHQ9ImFsd2F5cyIKKwkgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgIGZvbnQtd2VpZ2h0PSJib2xkIgorICAgICAgIHNwYWNlLWFmdGVyPSIwLjhlbSIvPgorCisgICAgPGNvcnBhdXRob3Igc3BhY2UtYmVmb3JlPSIwLjVlbSIKKyAgICAgICAgICAgICAgICBmb250LXNpemU9IiZoc2l6ZTM7Ii8+CisgICAgPGF1dGhvcmdyb3VwIHNwYWNlLWJlZm9yZT0iMC41ZW0iCisgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiLz4KKyAgICA8YXV0aG9yIHNwYWNlLWJlZm9yZT0iMC41ZW0iCisgICAgICAgICAgICBmb250LXNpemU9IiZoc2l6ZTI7IgorICAgICAgICAgICAgc3BhY2UtYWZ0ZXI9IjAuOGVtIi8+CisKKyAgICA8ZW1haWwgZm9udC1zaXplPSImaHNpemUyOyIvPgorCisgICAgPG90aGVyY3JlZGl0IHNwYWNlLWJlZm9yZT0iMC41ZW0iLz4KKyAgICA8cmVsZWFzZWluZm8gc3BhY2UtYmVmb3JlPSIwLjVlbSIvPgorICAgIDxjb3B5cmlnaHQgc3BhY2UtYmVmb3JlPSIwLjVlbSIvPgorICAgIDxsZWdhbG5vdGljZSB0ZXh0LWFsaWduPSJzdGFydCIKKyAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ9IjAuNWluIgorICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ9IjAuNWluIgorICAgICAgICAgICAgICAgICBmb250LWZhbWlseT0ieyRib2R5LmZvbnRzZXR9Ii8+CisgICAgPHB1YmRhdGUgc3BhY2UtYmVmb3JlPSIwLjVlbSIvPgorCTxwYXJhPjwvcGFyYT4KKyAgICA8cmV2aXNpb24gc3BhY2UtYmVmb3JlPSIwLjVlbSIvPgorICAgIDxyZXZoaXN0b3J5IHNwYWNlLWJlZm9yZT0iMC41ZW0iLz4KKyAgICA8YWJzdHJhY3Qgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKwkgICAgICB0ZXh0LWFsaWduPSJzdGFydCIKKwkgICAgICBtYXJnaW4tbGVmdD0iMC41aW4iCisgICAgICAgICAgICAgIG1hcmdpbi1yaWdodD0iMC41aW4iCisgICAgICAgICAgICAgIGZvbnQtZmFtaWx5PSJ7JGJvZHkuZm9udHNldH0iLz4KKworICAgIDxwYXJhPjwvcGFyYT4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZXQiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZGl2aXNpb24udGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpzZXRbMV0iCisJICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgc3BhY2UtYmVmb3JlPSImaHNpemU1c3BhY2U7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgIHRleHQtYWxpZ249ImNlbnRlciIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iYm9vayIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisKKyAgICAgIDxtZWRpYW9iamVjdC8+CisKKzwhLS0KKworIyBJZiB5b3UgbGVhdmUgdGhpcyBibG9jayBvZiBjb2RlIGluIHRoZW4gdGhlIHRleHQgdGl0bGUgaW4gdGhlCisjIDx0aXRsZT5CaXRCYWtlIFVzZXIgTWFudWFsPC90aXRsZT4gc3RhdGVtZW50IG9mIHRoZQorIyBiaXRiYWtlLXVzZXItbWFudWFsLnhtbCBmaWxlIGlzIHJlbmRlcmVkIG9uIHRoZSB0aXRsZSBwYWdlIGJlbG93IHRoZQorIyBpbWFnZS4gIENvbW1lbnRpbmcgaXQgb3V0IGdldHMgaXQgb3V0IG9mIHRoZXJlIHlldCBhbGxvd3MgaXQKKyMgdG8gYmUgcmV0YWluZWQgaW4gdGhlIHRhYiB0ZXh0IGZvciB0aGUgSFRNTCB2ZXJzaW9uIG9mIHRoZQorIyBtYW51YWwuCisKKyAgICAgIDx0aXRsZQorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZGl2aXNpb24udGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpib29rWzFdIgorCSAgICAgdGV4dC1hbGlnbj0iY2VudGVyIgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIHNwYWNlLWJlZm9yZT0iJmhzaXplNXNwYWNlOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKy0tPgorICAgICAgPHN1YnRpdGxlCisJCXRleHQtYWxpZ249ImNlbnRlciIKKwkJZm9udC1zaXplPSImaHNpemU0OyIKKwkJc3BhY2UtYmVmb3JlPSImaHNpemU0c3BhY2U7IgorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgICAgPGNvcnBhdXRob3IgZm9udC1zaXplPSImaHNpemUzOyIKKwkJICBrZWVwLXdpdGgtbmV4dD0iYWx3YXlzIgorCQkgIHNwYWNlLWJlZm9yZT0iMmluIi8+CisgICAgICA8YXV0aG9yZ3JvdXAgc3BhY2UtYmVmb3JlPSIyaW4iLz4KKyAgICAgIDxhdXRob3IgZm9udC1zaXplPSImaHNpemUzOyIKKwkgICAgICBzcGFjZS1iZWZvcmU9IiZoc2l6ZTJzcGFjZTsiCisJICAgICAga2VlcC13aXRoLW5leHQ9ImFsd2F5cyIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKzwhLS0KKyMgSWYgeW91IGxlYXZlIHRoaXMgYmxvY2sgb2YgY29kZSBpbiB0aGVuIHRoZSB0ZXh0IHRpdGxlIGluIHRoZQorIyA8dGl0bGU+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdGl0bGU+IHN0YXRlbWVudCBvZiB0aGUKKyMgYml0YmFrZS11c2VyLW1hbnVhbC54bWwgZmlsZSBpcyByZW5kZXJlZCBvbiB0aGUgdGl0bGUgcGFnZSBiZWxvdyB0aGUKKyMgaW1hZ2UuICBDb21tZW50aW5nIGl0IG91dCBnZXRzIGl0IG91dCBvZiB0aGVyZSB5ZXQgYWxsb3dzIGl0CisjIHRvIGJlIHJldGFpbmVkIGluIHRoZSB0YWIgdGV4dCBmb3IgdGhlIEhUTUwgdmVyc2lvbiBvZiB0aGUKKyMgbWFudWFsLgorCisgICAgICA8dGl0bGUKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImJvb2sudmVyc28udGl0bGUiCisJICAgICBmb250LXNpemU9IiZoc2l6ZTI7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorLS0+CisgICAgICA8Y29ycGF1dGhvci8+CisgICAgICA8YXV0aG9yZ3JvdXAgdDpuYW1lZC10ZW1wbGF0ZT0idmVyc28uYXV0aG9yZ3JvdXAiLz4KKyAgICAgIDxhdXRob3IvPgorICAgICAgPG90aGVyY3JlZGl0Lz4KKyAgICAgIDxwdWJkYXRlIHNwYWNlLWJlZm9yZT0iMWVtIi8+CisgICAgICA8Y29weXJpZ2h0Lz4KKyAgICAgIDxhYnN0cmFjdC8+CisgICAgICA8bGVnYWxub3RpY2UgZm9udC1zaXplPSI4cHQiLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgICA8Zm86YmxvY2sgYnJlYWstYWZ0ZXI9InBhZ2UiLz4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICAgIDxmbzpibG9jayBicmVhay1hZnRlcj0icGFnZSIvPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InBhcnQiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZGl2aXNpb24udGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpwYXJ0WzFdIgorCSAgICAgdGV4dC1hbGlnbj0iY2VudGVyIgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIHNwYWNlLWJlZm9yZT0iJmhzaXplNXNwYWNlOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgICAgZm9udC1zaXplPSImaHNpemU0OyIKKwkgICAgICBzcGFjZS1iZWZvcmU9IiZoc2l6ZTRzcGFjZTsiCisJICAgICAgZm9udC13ZWlnaHQ9J2JvbGQnCisJICAgICAgZm9udC1zdHlsZT0naXRhbGljJworCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icGFydGludHJvIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgdGV4dC1hbGlnbj0iY2VudGVyIgorCSAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgc3BhY2UtYmVmb3JlPSIxZW0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgICAgZm9udC1zaXplPSImaHNpemUyOyIKKwkgICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgICBmb250LXN0eWxlPSJpdGFsaWMiCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJyZWZlcmVuY2UiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZGl2aXNpb24udGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpyZWZlcmVuY2VbMV0iCisJICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgc3BhY2UtYmVmb3JlPSImaHNpemU1c3BhY2U7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgIHRleHQtYWxpZ249ImNlbnRlciIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InJlZnN5bm9wc2lzZGl2IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJyZWZzZWN0aW9uIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJyZWZzZWN0MSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icmVmc2VjdDIiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InJlZnNlY3QzIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImRlZGljYXRpb24iIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6ZGVkaWNhdGlvblsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icHJlZmFjZSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpwcmVmYWNlWzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgICAgPGNvcnBhdXRob3IvPgorICAgICAgPGF1dGhvcmdyb3VwLz4KKyAgICAgIDxhdXRob3IvPgorICAgICAgPG90aGVyY3JlZGl0Lz4KKyAgICAgIDxyZWxlYXNlaW5mby8+CisgICAgICA8Y29weXJpZ2h0Lz4KKyAgICAgIDxsZWdhbG5vdGljZS8+CisgICAgICA8cHViZGF0ZS8+CisgICAgICA8cmV2aXNpb24vPgorICAgICAgPHJldmhpc3RvcnkvPgorICAgICAgPGFic3RyYWN0Lz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iY2hhcHRlciIgdDp3cmFwcGVyPSJmbzpibG9jayIKKyAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ij4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIiBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iPgorICAgICAgPHRpdGxlIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmNoYXB0ZXJbMV0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKworICAgICAgPHN1YnRpdGxlIHNwYWNlLWJlZm9yZT0iMC41ZW0iCisJCWZvbnQtc3R5bGU9Iml0YWxpYyIKKwkJZm9udC1zaXplPSImaHNpemUyOyIKKwkJZm9udC13ZWlnaHQ9ImJvbGQiLz4KKworICAgICAgPGNvcnBhdXRob3IgIHNwYWNlLWJlZm9yZT0iMC41ZW0iCisJICAgICAgICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplPSImaHNpemUyOyIvPgorCisgICAgICA8YXV0aG9yZ3JvdXAgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKwkgICAgICAgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU9IiZoc2l6ZTI7Ii8+CisKKyAgICAgIDxhdXRob3IgICAgICBzcGFjZS1iZWZvcmU9IjAuNWVtIgorCSAgICAgICAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiLz4KKworICAgICAgPG90aGVyY3JlZGl0Lz4KKyAgICAgIDxyZWxlYXNlaW5mby8+CisgICAgICA8Y29weXJpZ2h0Lz4KKyAgICAgIDxsZWdhbG5vdGljZS8+CisgICAgICA8cHViZGF0ZS8+CisgICAgICA8cmV2aXNpb24vPgorICAgICAgPHJldmhpc3RvcnkvPgorICAgICAgPGFic3RyYWN0Lz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iYXBwZW5kaXgiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjphcHBlbmRpeFsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICAgIDxjb3JwYXV0aG9yLz4KKyAgICAgIDxhdXRob3Jncm91cC8+CisgICAgICA8YXV0aG9yLz4KKyAgICAgIDxvdGhlcmNyZWRpdC8+CisgICAgICA8cmVsZWFzZWluZm8vPgorICAgICAgPGNvcHlyaWdodC8+CisgICAgICA8bGVnYWxub3RpY2UvPgorICAgICAgPHB1YmRhdGUvPgorICAgICAgPHJldmlzaW9uLz4KKyAgICAgIDxyZXZoaXN0b3J5Lz4KKyAgICAgIDxhYnN0cmFjdC8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZWN0aW9uIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZWN0MSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2VjdDIiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNlY3QzIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZWN0NCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2VjdDUiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNpbXBsZXNlY3QiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iYmlibGlvZ3JhcGh5IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmJpYmxpb2dyYXBoeVsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iYmlibGlvZGl2IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZSB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpiaWJsaW9kaXZbMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTQ7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imdsb3NzYXJ5IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6Omdsb3NzYXJ5WzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJnbG9zc2RpdiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6Z2xvc3NkaXZbMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTQ7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImluZGV4IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmluZGV4WzFdIgorICAgICAgICAgICAgIHBhcmFtOnBhZ2V3aWRlPSIxIgorCSAgICAgbWFyZ2luLWxlZnQ9IjBwdCIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPCEtLSBUaGUgaW5kZXhkaXYudGl0bGUgdGVtcGxhdGUgaXMgdXNlZCBzbyB0aGF0IG1hbnVhbCBhbmQgLS0+CisgIDwhLS0gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgaW5kZXhkaXYgdGl0bGVzIGdldCB0aGUgc2FtZSAtLT4KKyAgPCEtLSBmb3JtYXR0aW5nLiAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJpbmRleGRpdiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImluZGV4ZGl2LnRpdGxlIgorCSAgICAgcGFyYW06dGl0bGU9InRpdGxlIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2V0aW5kZXgiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6c2V0aW5kZXhbMV0iCisgICAgICAgICAgICAgcGFyYW06cGFnZXdpZGU9IjEiCisJICAgICBtYXJnaW4tbGVmdD0iMHB0IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJjb2xvcGhvbiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpjb2xvcGhvblsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0idGFibGUub2YuY29udGVudHMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ1RhYmxlb2ZDb250ZW50cyciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imxpc3Qub2YudGFibGVzIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImdlbnRleHQiCisJICAgICBwYXJhbTprZXk9IidMaXN0b2ZUYWJsZXMnIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJsaXN0Lm9mLmZpZ3VyZXMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ0xpc3RvZkZpZ3VyZXMnIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJsaXN0Lm9mLmV4YW1wbGVzIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImdlbnRleHQiCisJICAgICBwYXJhbTprZXk9IidMaXN0b2ZFeGFtcGxlcyciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imxpc3Qub2YuZXF1YXRpb25zIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImdlbnRleHQiCisJICAgICBwYXJhbTprZXk9IidMaXN0b2ZFcXVhdGlvbnMnIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJsaXN0Lm9mLnByb2NlZHVyZXMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ0xpc3RvZlByb2NlZHVyZXMnIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJsaXN0Lm9mLnVua25vd25zIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImdlbnRleHQiCisJICAgICBwYXJhbTprZXk9IidMaXN0b2ZVbmtub3duJyIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWluaW11bT0iMWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5vcHRpbXVtPSIxLjVlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWF4aW11bT0iMmVtIgorCSAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemUzOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzwvdDp0ZW1wbGF0ZXM+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3Rvb2xzL2RvY2Jvb2stdG8tcGRmIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90b29scy9kb2Nib29rLXRvLXBkZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NThkZWQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdG9vbHMvZG9jYm9vay10by1wZGYKQEAgLTAsMCArMSw1MSBAQAorIyEvYmluL3NoCisJCitpZiBbIC16ICIkMSIgLW8gLXogIiQyIiBdOyB0aGVuCisgICBlY2hvICJ1c2FnZTogWy12XSAkMCA8ZG9jYm9vayBmaWxlPiA8dGVtcGxhdGVkaXI+IgorICAgZWNobworICAgZWNobyAiKk5PVEUqIHlvdSBuZWVkIHhzbHRwcm9jLCBmb3AgYW5kIG53YWxzaCBkb2Nib29rIHN0eWxlc2hlZXRzIiAKKyAgIGVjaG8gIiAgICAgICBpbnN0YWxsZWQgZm9yIHRoaXMgdG8gd29yayEiCisgICBlY2hvCisgICBleGl0IDAKK2ZpCisKK0ZPPWBlY2hvICQxIHwgc2VkIHMvLnhtbC8uZm8vYCB8fCBleGl0IDEKK1BERj1gZWNobyAkMSB8IHNlZCBzLy54bWwvLnBkZi9gIHx8IGV4aXQgMQorVEVNUExBVEVESVI9JDIKKworIyMKKyMgVGhlc2UgVVJJIHNob3VsZCBiZSByZXdyaXR0ZW4gYnkgeW91ciBkaXN0cmlidXRpb24ncyB4bWwgY2F0YWxvZyB0bworIyBtYXRjaCB5b3VyIGxvY2FseSBpbnN0YWxsZWQgWFNMIHN0eWxlc2hlZXRzLgorWFNMX0JBU0VfVVJJPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudCIKKworIyBDcmVhdGVzIGEgdGVtcG9yYXJ5IFhTTCBzdHlsZXNoZWV0IGJhc2VkIG9uIHRpdGxlcGFnZS54c2wKK3hzbHRwcm9jIC1vIC90bXAvdGl0bGVwYWdlLnhzbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJIC0teGluY2x1ZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAkWFNMX0JBU0VfVVJJL3RlbXBsYXRlL3RpdGxlcGFnZS54c2wgXAorICAgICAgICAgJFRFTVBMQVRFRElSL3RpdGxlcGFnZS50ZW1wbGF0ZXMueG1sIHx8IGV4aXQgMQorCisjIENyZWF0ZXMgdGhlIGZpbGUgbmVlZGVkIGZvciBGT1AKK3hzbHRwcm9jIC0teGluY2x1ZGUgICAgICAgICAgICAgICAgICAgIFwKKwkgLS1zdHJpbmdwYXJhbSBoeXBoZW5hdGUgZmFsc2UgXAorCSAtLXN0cmluZ3BhcmFtIGZvcm1hbC50aXRsZS5wbGFjZW1lbnQgImZpZ3VyZSBhZnRlciIgXAorCSAtLXN0cmluZ3BhcmFtIHVsaW5rLnNob3cgMSBcCisgICAgICAgICAtLXN0cmluZ3BhcmFtICBib2R5LmZvbnQubWFzdGVyICA5IFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIHRpdGxlLmZvbnQubWFzdGVyICAxMSBcCisgICAgICAgICAtLXN0cmluZ3BhcmFtIGRyYWZ0LndhdGVybWFyay5pbWFnZSAiJFRFTVBMQVRFRElSL2RyYWZ0LnBuZyIgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSAgY2hhcHRlci5hdXRvbGFiZWwgMSBcCisgICAgICAgICAtLXN0cmluZ3BhcmFtICBhcHBlbmRpeC5hdXRvbGFiZWwgQSBcCisgICAgICAgICAtLXN0cmluZ3BhcmFtICBzZWN0aW9uLmF1dG9sYWJlbCAxIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIHNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIDEgXAorICAgICAgICAgLS1vdXRwdXQgJEZPICAgICAgICAgICAgICAgXAorICAgICAgICAgJFRFTVBMQVRFRElSL2RiLXBkZi54c2wgICAgXAorCSAkMSAgICAgICAgICAgICAgICAgfHwgZXhpdCAxCisKKyMgSW52b2tlcyB0aGUgSmF2YSB2ZXJzaW9uIG9mIEZPUC4gIFVzZXMgdGhlIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBmaWxlIGNvbW1vbi9mb3AtY29uZmlnLnhtbAorZm9wIC1jICRURU1QTEFURURJUi9mb3AtY29uZmlnLnhtbCAtZm8gJEZPIC1wZGYgJFBERiAgICAgICB8fCBleGl0IDEKKworcm0gLWYgJEZPCitybSAtZiAgL3RtcC90aXRsZXBhZ2UueHNsCisKK2VjaG8KK2VjaG8gIiAjIyMjIFN1Y2Nlc3MhICRQREYgcmVhZHkuICMjIyMiCitlY2hvCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL0NPVy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvQ09XLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MTdlYzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL0NPVy5weQpAQCAtMCwwICsxLDMyMyBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgVGhpcyBpcyBhIGNvcHkgb24gd3JpdGUgZGljdGlvbmFyeSBhbmQgc2V0IHdoaWNoIGFidXNlcyBjbGFzc2VzIHRvIHRyeSBhbmQgYmUgbmljZSBhbmQgZmFzdC4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2IFRpbSBBbXNlbGwKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjUGxlYXNlIE5vdGU6CisjIEJlIGNhcmVmdWwgd2hlbiB1c2luZyBtdXRhYmxlIHR5cGVzIChpZSBEaWN0IGFuZCBMaXN0cykgLSBvcGVyYXRpb25zIGludm9sdmluZyB0aGVzZSBhcmUgU0xPVy4KKyMgQXNzaWduIGEgZmlsZSB0byBfX3dhcm5fXyB0byBnZXQgd2FybmluZ3MgYWJvdXQgc2xvdyBvcGVyYXRpb25zLgorIworCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCitpbXBvcnQgY29weQoraW1wb3J0IHR5cGVzCitJbW11dGFibGVUeXBlcyA9ICgKKyAgICB0eXBlcy5Ob25lVHlwZSwKKyAgICBib29sLAorICAgIGNvbXBsZXgsCisgICAgZmxvYXQsCisgICAgaW50LAorICAgIGxvbmcsCisgICAgdHVwbGUsCisgICAgZnJvemVuc2V0LAorICAgIGJhc2VzdHJpbmcKKykKKworTVVUQUJMRSA9ICJfX211dGFibGVfXyIKKworY2xhc3MgQ09XTWV0YSh0eXBlKToKKyAgICBwYXNzCisKK2NsYXNzIENPV0RpY3RNZXRhKENPV01ldGEpOgorICAgIF9fd2Fybl9fID0gRmFsc2UKKyAgICBfX2hhc211dGFibGVfXyA9IEZhbHNlCisgICAgX19tYXJrZXJfXyA9IHR1cGxlKCkKKworICAgIGRlZiBfX3N0cl9fKGNscyk6CisgICAgICAgICMgRklYTUU6IEkgaGF2ZSBtYWdpYyBudW1iZXJzIQorICAgICAgICByZXR1cm4gIjxDT1dEaWN0IExldmVsOiAlaSBDdXJyZW50IEtleXM6ICVpPiIgJSAoY2xzLl9fY291bnRfXywgbGVuKGNscy5fX2RpY3RfXykgLSAzKQorICAgIF9fcmVwcl9fID0gX19zdHJfXworCisgICAgZGVmIGNvdyhjbHMpOgorICAgICAgICBjbGFzcyBDKGNscyk6CisgICAgICAgICAgICBfX2NvdW50X18gPSBjbHMuX19jb3VudF9fICsgMQorICAgICAgICByZXR1cm4gQworICAgIGNvcHkgPSBjb3cKKyAgICBfX2NhbGxfXyA9IGNvdworCisgICAgZGVmIF9fc2V0aXRlbV9fKGNscywga2V5LCB2YWx1ZSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBJbW11dGFibGVUeXBlcyk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgQ09XTWV0YSk6CisgICAgICAgICAgICAgICAgY2xzLl9faGFzbXV0YWJsZV9fID0gVHJ1ZQorICAgICAgICAgICAga2V5ICs9IE1VVEFCTEUKKyAgICAgICAgc2V0YXR0cihjbHMsIGtleSwgdmFsdWUpCisKKyAgICBkZWYgX19nZXRtdXRhYmxlX18oY2xzLCBrZXksIHJlYWRvbmx5PUZhbHNlKToKKyAgICAgICAgbmtleSA9IGtleSArIE1VVEFCTEUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGNscy5fX2RpY3RfX1tua2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdmFsdWUgPSBnZXRhdHRyKGNscywgbmtleSkKKyAgICAgICAgaWYgcmVhZG9ubHk6CisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKworICAgICAgICBpZiBub3QgY2xzLl9fd2Fybl9fIGlzIEZhbHNlIGFuZCBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgQ09XTWV0YSk6CisgICAgICAgICAgICBwcmludCgiV2FybmluZzogRG9pbmcgYSBjb3B5IGJlY2F1c2UgJXMgaXMgYSBtdXRhYmxlIHR5cGUuIiAlIGtleSwgZmlsZT1jbHMuX193YXJuX18pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuY29weSgpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBlOgorICAgICAgICAgICAgdmFsdWUgPSBjb3B5LmNvcHkodmFsdWUpCisgICAgICAgIHNldGF0dHIoY2xzLCBua2V5LCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBfX2dldG1hcmtlcl9fID0gW10KKyAgICBkZWYgX19nZXRyZWFkb25seV9fKGNscywga2V5LCBkZWZhdWx0PV9fZ2V0bWFya2VyX18pOgorICAgICAgICAiIiJcCisgICAgICAgIEdldCBhIHZhbHVlIChldmVuIGlmIG11dGFibGUpIHdoaWNoIHlvdSBwcm9taXNlIG5vdCB0byBjaGFuZ2UuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gY2xzLl9fZ2V0aXRlbV9fKGtleSwgZGVmYXVsdCwgVHJ1ZSkKKworICAgIGRlZiBfX2dldGl0ZW1fXyhjbHMsIGtleSwgZGVmYXVsdD1fX2dldG1hcmtlcl9fLCByZWFkb25seT1GYWxzZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIoY2xzLCBrZXkpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBjbHMuX19nZXRtdXRhYmxlX18oa2V5LCByZWFkb25seSkKKworICAgICAgICAgICAgIyBUaGlzIGlzIGZvciB2YWx1ZXMgd2hpY2ggaGF2ZSBiZWVuIGRlbGV0ZWQKKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIGNscy5fX21hcmtlcl9fOgorICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJrZXkgJXMgZG9lcyBub3QgZXhpc3QuIiAlIGtleSkKKworICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgbm90IGRlZmF1bHQgaXMgY2xzLl9fZ2V0bWFya2VyX186CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKworICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3Ioc3RyKGUpKQorCisgICAgZGVmIF9fZGVsaXRlbV9fKGNscywga2V5KToKKyAgICAgICAgY2xzLl9fc2V0aXRlbV9fKGtleSwgY2xzLl9fbWFya2VyX18pCisKKyAgICBkZWYgX19yZXZlcnRpdGVtX18oY2xzLCBrZXkpOgorICAgICAgICBpZiBub3QgY2xzLl9fZGljdF9fLmhhc19rZXkoa2V5KToKKyAgICAgICAgICAgIGtleSArPSBNVVRBQkxFCisgICAgICAgIGRlbGF0dHIoY2xzLCBrZXkpCisKKyAgICBkZWYgX19jb250YWluc19fKGNscywga2V5KToKKyAgICAgICAgcmV0dXJuIGNscy5oYXNfa2V5KGtleSkKKworICAgIGRlZiBoYXNfa2V5KGNscywga2V5KToKKyAgICAgICAgdmFsdWUgPSBjbHMuX19nZXRyZWFkb25seV9fKGtleSwgY2xzLl9fbWFya2VyX18pCisgICAgICAgIGlmIHZhbHVlIGlzIGNscy5fX21hcmtlcl9fOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgaXRlcihjbHMsIHR5cGUsIHJlYWRvbmx5PUZhbHNlKToKKyAgICAgICAgZm9yIGtleSBpbiBkaXIoY2xzKToKKyAgICAgICAgICAgIGlmIGtleS5zdGFydHN3aXRoKCJfXyIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGtleS5lbmRzd2l0aChNVVRBQkxFKToKKyAgICAgICAgICAgICAgICBrZXkgPSBrZXlbOi1sZW4oTVVUQUJMRSldCisKKyAgICAgICAgICAgIGlmIHR5cGUgPT0gImtleXMiOgorICAgICAgICAgICAgICAgIHlpZWxkIGtleQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgcmVhZG9ubHk6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY2xzLl9fZ2V0cmVhZG9ubHlfXyhrZXkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjbHNba2V5XQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIHR5cGUgPT0gInZhbHVlcyI6CisgICAgICAgICAgICAgICAgeWllbGQgdmFsdWUKKyAgICAgICAgICAgIGlmIHR5cGUgPT0gIml0ZW1zIjoKKyAgICAgICAgICAgICAgICB5aWVsZCAoa2V5LCB2YWx1ZSkKKyAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbigpCisKKyAgICBkZWYgaXRlcmtleXMoY2xzKToKKyAgICAgICAgcmV0dXJuIGNscy5pdGVyKCJrZXlzIikKKyAgICBkZWYgaXRlcnZhbHVlcyhjbHMsIHJlYWRvbmx5PUZhbHNlKToKKyAgICAgICAgaWYgbm90IGNscy5fX3dhcm5fXyBpcyBGYWxzZSBhbmQgY2xzLl9faGFzbXV0YWJsZV9fIGFuZCByZWFkb25seSBpcyBGYWxzZToKKyAgICAgICAgICAgIHByaW50KCJXYXJuaW5nOiBJZiB5b3UgYXJuJ3QgZ29pbmcgdG8gY2hhbmdlIGFueSBvZiB0aGUgdmFsdWVzIGNhbGwgd2l0aCBUcnVlLiIsIGZpbGU9Y2xzLl9fd2Fybl9fKQorICAgICAgICByZXR1cm4gY2xzLml0ZXIoInZhbHVlcyIsIHJlYWRvbmx5KQorICAgIGRlZiBpdGVyaXRlbXMoY2xzLCByZWFkb25seT1GYWxzZSk6CisgICAgICAgIGlmIG5vdCBjbHMuX193YXJuX18gaXMgRmFsc2UgYW5kIGNscy5fX2hhc211dGFibGVfXyBhbmQgcmVhZG9ubHkgaXMgRmFsc2U6CisgICAgICAgICAgICBwcmludCgiV2FybmluZzogSWYgeW91IGFybid0IGdvaW5nIHRvIGNoYW5nZSBhbnkgb2YgdGhlIHZhbHVlcyBjYWxsIHdpdGggVHJ1ZS4iLCBmaWxlPWNscy5fX3dhcm5fXykKKyAgICAgICAgcmV0dXJuIGNscy5pdGVyKCJpdGVtcyIsIHJlYWRvbmx5KQorCitjbGFzcyBDT1dTZXRNZXRhKENPV0RpY3RNZXRhKToKKyAgICBkZWYgX19zdHJfXyhjbHMpOgorICAgICAgICAjIEZJWE1FOiBJIGhhdmUgbWFnaWMgbnVtYmVycyEKKyAgICAgICAgcmV0dXJuICI8Q09XU2V0IExldmVsOiAlaSBDdXJyZW50IEtleXM6ICVpPiIgJSAoY2xzLl9fY291bnRfXywgbGVuKGNscy5fX2RpY3RfXykgLTMpCisgICAgX19yZXByX18gPSBfX3N0cl9fCisKKyAgICBkZWYgY293KGNscyk6CisgICAgICAgIGNsYXNzIEMoY2xzKToKKyAgICAgICAgICAgIF9fY291bnRfXyA9IGNscy5fX2NvdW50X18gKyAxCisgICAgICAgIHJldHVybiBDCisKKyAgICBkZWYgYWRkKGNscywgdmFsdWUpOgorICAgICAgICBDT1dEaWN0TWV0YS5fX3NldGl0ZW1fXyhjbHMsIHJlcHIoaGFzaCh2YWx1ZSkpLCB2YWx1ZSkKKworICAgIGRlZiByZW1vdmUoY2xzLCB2YWx1ZSk6CisgICAgICAgIENPV0RpY3RNZXRhLl9fZGVsaXRlbV9fKGNscywgcmVwcihoYXNoKHZhbHVlKSkpCisKKyAgICBkZWYgX19pbl9fKGNscywgdmFsdWUpOgorICAgICAgICByZXR1cm4gQ09XRGljdE1ldGEuaGFzX2tleShyZXByKGhhc2godmFsdWUpKSkKKworICAgIGRlZiBpdGVya2V5cyhjbHMpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoInNldHMgZG9uJ3QgaGF2ZSBrZXlzIikKKworICAgIGRlZiBpdGVyaXRlbXMoY2xzKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJzZXRzIGRvbid0IGhhdmUgJ2l0ZW1zJyIpCisKKyMgVGhlc2UgYXJlIHRoZSBhY3R1YWwgY2xhc3NlcyB5b3UgdXNlIQorY2xhc3MgQ09XRGljdEJhc2Uob2JqZWN0KToKKyAgICBfX21ldGFjbGFzc19fID0gQ09XRGljdE1ldGEKKyAgICBfX2NvdW50X18gPSAwCisKK2NsYXNzIENPV1NldEJhc2Uob2JqZWN0KToKKyAgICBfX21ldGFjbGFzc19fID0gQ09XU2V0TWV0YQorICAgIF9fY291bnRfXyA9IDAKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBpbXBvcnQgc3lzCisgICAgQ09XRGljdEJhc2UuX193YXJuX18gPSBzeXMuc3RkZXJyCisgICAgYSA9IENPV0RpY3RCYXNlKCkKKyAgICBwcmludCgiYSIsIGEpCisKKyAgICBhWydhJ10gPSAnYScKKyAgICBhWydiJ10gPSAnYicKKyAgICBhWydkaWN0J10gPSB7fQorCisgICAgYiA9IGEuY29weSgpCisgICAgcHJpbnQoImIiLCBiKQorICAgIGJbJ2MnXSA9ICdiJworCisgICAgcHJpbnQoKQorCisgICAgcHJpbnQoImEiLCBhKQorICAgIGZvciB4IGluIGEuaXRlcml0ZW1zKCk6CisgICAgICAgIHByaW50KHgpCisgICAgcHJpbnQoIi0tIikKKyAgICBwcmludCgiYiIsIGIpCisgICAgZm9yIHggaW4gYi5pdGVyaXRlbXMoKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgpCisKKyAgICBiWydkaWN0J11bJ2EnXSA9ICdiJworICAgIGJbJ2EnXSA9ICdjJworCisgICAgcHJpbnQoImEiLCBhKQorICAgIGZvciB4IGluIGEuaXRlcml0ZW1zKCk6CisgICAgICAgIHByaW50KHgpCisgICAgcHJpbnQoIi0tIikKKyAgICBwcmludCgiYiIsIGIpCisgICAgZm9yIHggaW4gYi5pdGVyaXRlbXMoKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgpCisKKyAgICB0cnk6CisgICAgICAgIGJbJ2RpY3QyJ10KKyAgICBleGNlcHQgS2V5RXJyb3IgYXMgZToKKyAgICAgICAgcHJpbnQoIk9rYXkhIikKKworICAgIGFbJ3NldCddID0gQ09XU2V0QmFzZSgpCisgICAgYVsnc2V0J10uYWRkKCJvMSIpCisgICAgYVsnc2V0J10uYWRkKCJvMSIpCisgICAgYVsnc2V0J10uYWRkKCJvMiIpCisKKyAgICBwcmludCgiYSIsIGEpCisgICAgZm9yIHggaW4gYVsnc2V0J10uaXRlcnZhbHVlcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCItLSIpCisgICAgcHJpbnQoImIiLCBiKQorICAgIGZvciB4IGluIGJbJ3NldCddLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgpCisKKyAgICBiWydzZXQnXS5hZGQoJ28zJykKKworICAgIHByaW50KCJhIiwgYSkKKyAgICBmb3IgeCBpbiBhWydzZXQnXS5pdGVydmFsdWVzKCk6CisgICAgICAgIHByaW50KHgpCisgICAgcHJpbnQoIi0tIikKKyAgICBwcmludCgiYiIsIGIpCisgICAgZm9yIHggaW4gYlsnc2V0J10uaXRlcnZhbHVlcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKKworICAgIGFbJ3NldDInXSA9IHNldCgpCisgICAgYVsnc2V0MiddLmFkZCgibzEiKQorICAgIGFbJ3NldDInXS5hZGQoIm8xIikKKyAgICBhWydzZXQyJ10uYWRkKCJvMiIpCisKKyAgICBwcmludCgiYSIsIGEpCisgICAgZm9yIHggaW4gYS5pdGVyaXRlbXMoKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgiLS0iKQorICAgIHByaW50KCJiIiwgYikKKyAgICBmb3IgeCBpbiBiLml0ZXJpdGVtcyhyZWFkb25seT1UcnVlKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgpCisKKyAgICBkZWwgYlsnYiddCisgICAgdHJ5OgorICAgICAgICBwcmludChiWydiJ10pCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBwcmludCgiWWF5ISBkZWxldGVkIGtleSByYWlzZXMgZXJyb3IiKQorCisgICAgaWYgYi5oYXNfa2V5KCdiJyk6CisgICAgICAgIHByaW50KCJCb28hIikKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiWWF5IC0gaGFzX2tleSB3aXRoIGRlbGV0ZSB3b3JrcyEiKQorCisgICAgcHJpbnQoImEiLCBhKQorICAgIGZvciB4IGluIGEuaXRlcml0ZW1zKCk6CisgICAgICAgIHByaW50KHgpCisgICAgcHJpbnQoIi0tIikKKyAgICBwcmludCgiYiIsIGIpCisgICAgZm9yIHggaW4gYi5pdGVyaXRlbXMocmVhZG9ubHk9VHJ1ZSk6CisgICAgICAgIHByaW50KHgpCisgICAgcHJpbnQoKQorCisgICAgYi5fX3JldmVydGl0ZW1fXygnYicpCisKKyAgICBwcmludCgiYSIsIGEpCisgICAgZm9yIHggaW4gYS5pdGVyaXRlbXMoKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgiLS0iKQorICAgIHByaW50KCJiIiwgYikKKyAgICBmb3IgeCBpbiBiLml0ZXJpdGVtcyhyZWFkb25seT1UcnVlKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgpCisKKyAgICBiLl9fcmV2ZXJ0aXRlbV9fKCdkaWN0JykKKyAgICBwcmludCgiYSIsIGEpCisgICAgZm9yIHggaW4gYS5pdGVyaXRlbXMoKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgiLS0iKQorICAgIHByaW50KCJiIiwgYikKKyAgICBmb3IgeCBpbiBiLml0ZXJpdGVtcyhyZWFkb25seT1UcnVlKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjc5NDZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9fX2luaXRfXy5weQpAQCAtMCwwICsxLDE0MiBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBCdWlsZCBTeXN0ZW0gUHl0aG9uIExpYnJhcnkKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDAzICBIb2xnZXIgU2NodXJpZworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIworIyBCYXNlZCBvbiBHZW50b28ncyBwb3J0YWdlLnB5LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworX192ZXJzaW9uX18gPSAiMS4yNy4xIgorCitpbXBvcnQgc3lzCitpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDcsIDMpOgorICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiU29ycnksIHB5dGhvbiAyLjcuMyBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IgdGhpcyB2ZXJzaW9uIG9mIGJpdGJha2UiKQorCisKK2NsYXNzIEJCSGFuZGxlZEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICIiIgorICAgIFRoZSBiaWcgZGlsZW1tYSBmb3IgZ2VuZXJpYyBiaXRiYWtlIGNvZGUgaXMgd2hhdCBpbmZvcm1hdGlvbiB0byBnaXZlIHRoZSB1c2VyCisgICAgd2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLiBBbnkgZXhjZXB0aW9uIGluaGVyaXRpbmcgdGhpcyBiYXNlIGV4Y2VwdGlvbiBjbGFzcworICAgIGhhcyBhbHJlYWR5IHByb3ZpZGVkIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyIHZpYSBzb21lICdmaXJlZCcgbWVzc2FnZSB0eXBlIHN1Y2ggYXMKKyAgICBhbiBleHBsaWNpdGx5IGZpcmVkIGV2ZW50IHVzaW5nIGJiLmZpcmUsIG9yIGEgYmIuZXJyb3IgbWVzc2FnZS4gSWYgYml0YmFrZSAKKyAgICBlbmNvdW50ZXJzIGFuIGV4Y2VwdGlvbiBkZXJpdmVkIGZyb20gdGhpcyBjbGFzcywgbm8gYmFja3RyYWNlIG9yIG90aGVyIGluZm9ybWF0aW9uIAorICAgIHdpbGwgYmUgZ2l2ZW4gdG8gdGhlIHVzZXIsIGl0cyBhc3N1bWVkIHRoZSBlYXJsaWVyIGV2ZW50IHByb3ZpZGVkIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbi4KKyAgICAiIiIKKyAgICBwYXNzCisKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKKworCitjbGFzcyBOdWxsSGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgorICAgIGRlZiBlbWl0KHNlbGYsIHJlY29yZCk6CisgICAgICAgIHBhc3MKKworTG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXJDbGFzcygpCitjbGFzcyBCQkxvZ2dlcihMb2dnZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgaWYgbmFtZS5zcGxpdCgiLiIpWzBdID09ICJCaXRCYWtlIjoKKyAgICAgICAgICAgIHNlbGYuZGVidWcgPSBzZWxmLmJiZGVidWcKKyAgICAgICAgTG9nZ2VyLl9faW5pdF9fKHNlbGYsIG5hbWUpCisKKyAgICBkZWYgYmJkZWJ1ZyhzZWxmLCBsZXZlbCwgbXNnLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5sb2cobG9nZ2luZy5ERUJVRyAtIGxldmVsICsgMSwgbXNnLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgcGxhaW4oc2VsZiwgbXNnLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5sb2cobG9nZ2luZy5JTkZPICsgMSwgbXNnLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgdmVyYm9zZShzZWxmLCBtc2csICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLmxvZyhsb2dnaW5nLklORk8gLSAxLCBtc2csICphcmdzLCAqKmt3YXJncykKKworbG9nZ2luZy5yYWlzZUV4Y2VwdGlvbnMgPSBGYWxzZQorbG9nZ2luZy5zZXRMb2dnZXJDbGFzcyhCQkxvZ2dlcikKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UiKQorbG9nZ2VyLmFkZEhhbmRsZXIoTnVsbEhhbmRsZXIoKSkKK2xvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHIC0gMikKKworIyBUaGlzIGhhcyB0byBiZSBpbXBvcnRlZCBhZnRlciB0aGUgc2V0TG9nZ2VyQ2xhc3MsIGFzIHRoZSBpbXBvcnQgb2YgYmIubXNnCisjIGNhbiByZXN1bHQgaW4gY29uc3RydWN0aW9uIG9mIHRoZSB2YXJpb3VzIGxvZ2dlcnMuCitpbXBvcnQgYmIubXNnCisKK2Zyb20gYmIgaW1wb3J0IGZldGNoMiBhcyBmZXRjaAorc3lzLm1vZHVsZXNbJ2JiLmZldGNoJ10gPSBzeXMubW9kdWxlc1snYmIuZmV0Y2gyJ10KKworIyBNZXNzYWdpbmcgY29udmVuaWVuY2UgZnVuY3Rpb25zCitkZWYgcGxhaW4oKmFyZ3MpOgorICAgIGxvZ2dlci5wbGFpbignJy5qb2luKGFyZ3MpKQorCitkZWYgZGVidWcobHZsLCAqYXJncyk6CisgICAgaWYgaXNpbnN0YW5jZShsdmwsIGJhc2VzdHJpbmcpOgorICAgICAgICBsb2dnZXIud2FybigiUGFzc2VkIGludmFsaWQgZGVidWcgbGV2ZWwgJyVzJyB0byBiYi5kZWJ1ZyIsIGx2bCkKKyAgICAgICAgYXJncyA9IChsdmwsKSArIGFyZ3MKKyAgICAgICAgbHZsID0gMQorICAgIGxvZ2dlci5kZWJ1ZyhsdmwsICcnLmpvaW4oYXJncykpCisKK2RlZiBub3RlKCphcmdzKToKKyAgICBsb2dnZXIuaW5mbygnJy5qb2luKGFyZ3MpKQorCitkZWYgd2FybigqYXJncyk6CisgICAgbG9nZ2VyLndhcm4oJycuam9pbihhcmdzKSkKKworZGVmIGVycm9yKCphcmdzLCAqKmt3YXJncyk6CisgICAgbG9nZ2VyLmVycm9yKCcnLmpvaW4oYXJncyksIGV4dHJhPWt3YXJncykKKworZGVmIGZhdGFsKCphcmdzLCAqKmt3YXJncyk6CisgICAgbG9nZ2VyLmNyaXRpY2FsKCcnLmpvaW4oYXJncyksIGV4dHJhPWt3YXJncykKKyAgICByYWlzZSBCQkhhbmRsZWRFeGNlcHRpb24oKQorCitkZWYgZGVwcmVjYXRlZChmdW5jLCBuYW1lPU5vbmUsIGFkdmljZT0iIik6CisgICAgIiIiVGhpcyBpcyBhIGRlY29yYXRvciB3aGljaCBjYW4gYmUgdXNlZCB0byBtYXJrIGZ1bmN0aW9ucworICAgIGFzIGRlcHJlY2F0ZWQuIEl0IHdpbGwgcmVzdWx0IGluIGEgd2FybmluZyBiZWluZyBlbWl0dGVkCisgICAgd2hlbiB0aGUgZnVuY3Rpb24gaXMgdXNlZC4iIiIKKyAgICBpbXBvcnQgd2FybmluZ3MKKworICAgIGlmIGFkdmljZToKKyAgICAgICAgYWR2aWNlID0gIjogJXMiICUgYWR2aWNlCisgICAgaWYgbmFtZSBpcyBOb25lOgorICAgICAgICBuYW1lID0gZnVuYy5fX25hbWVfXworCisgICAgZGVmIG5ld0Z1bmMoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgd2FybmluZ3Mud2FybigiQ2FsbCB0byBkZXByZWNhdGVkIGZ1bmN0aW9uICVzJXMuIiAlIChuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmljZSksCisgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk9RGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgIHN0YWNrbGV2ZWw9MikKKyAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQorICAgIG5ld0Z1bmMuX19uYW1lX18gPSBmdW5jLl9fbmFtZV9fCisgICAgbmV3RnVuYy5fX2RvY19fID0gZnVuYy5fX2RvY19fCisgICAgbmV3RnVuYy5fX2RpY3RfXy51cGRhdGUoZnVuYy5fX2RpY3RfXykKKyAgICByZXR1cm4gbmV3RnVuYworCisjIEZvciBjb21wYXRpYmlsaXR5CitkZWYgZGVwcmVjYXRlX2ltcG9ydChjdXJyZW50LCBtb2R1bGVuYW1lLCBmcm9tbGlzdCwgcmVuYW1lcyA9IE5vbmUpOgorICAgICIiIkltcG9ydCBvYmplY3RzIGZyb20gb25lIG1vZHVsZSBpbnRvIGFub3RoZXIsIHdyYXBwaW5nIHRoZW0gd2l0aCBhIERlcHJlY2F0aW9uV2FybmluZyIiIgorICAgIGltcG9ydCBzeXMKKworICAgIG1vZHVsZSA9IF9faW1wb3J0X18obW9kdWxlbmFtZSwgZnJvbWxpc3QgPSBmcm9tbGlzdCkKKyAgICBmb3IgcG9zaXRpb24sIG9iam5hbWUgaW4gZW51bWVyYXRlKGZyb21saXN0KToKKyAgICAgICAgb2JqID0gZ2V0YXR0cihtb2R1bGUsIG9iam5hbWUpCisgICAgICAgIG5ld29iaiA9IGRlcHJlY2F0ZWQob2JqLCAiezB9LnsxfSIuZm9ybWF0KGN1cnJlbnQsIG9iam5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGVhc2UgdXNlIHswfS57MX0gaW5zdGVhZCIuZm9ybWF0KG1vZHVsZW5hbWUsIG9iam5hbWUpKQorICAgICAgICBpZiByZW5hbWVzOgorICAgICAgICAgICAgbmV3bmFtZSA9IHJlbmFtZXNbcG9zaXRpb25dCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuZXduYW1lID0gb2JqbmFtZQorCisgICAgICAgIHNldGF0dHIoc3lzLm1vZHVsZXNbY3VycmVudF0sIG5ld25hbWUsIG5ld29iaikKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9idWlsZC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvYnVpbGQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ4YzM5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvYnVpbGQucHkKQEAgLTAsMCArMSw3NzAgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgJ0J1aWxkJyBpbXBsZW1lbnRhdGlvbgorIworIyBDb3JlIGNvZGUgZm9yIGZ1bmN0aW9uIGV4ZWN1dGlvbiBhbmQgdGFzayBoYW5kbGluZyBpbiB0aGUKKyMgQml0QmFrZSBidWlsZCB0b29scy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMKKyMgQmFzZWQgb24gR2VudG9vJ3MgcG9ydGFnZS5weS4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEJhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZSwgQ29weXJpZ2h0IDIwMDMgSG9sZ2VyIFNjaHVyaWcKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHNobGV4CitpbXBvcnQgZ2xvYgoraW1wb3J0IHRpbWUKK2ltcG9ydCBzdGF0CitpbXBvcnQgYmIKK2ltcG9ydCBiYi5tc2cKK2ltcG9ydCBiYi5wcm9jZXNzCitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IG5lc3RlZAorZnJvbSBiYiBpbXBvcnQgZXZlbnQsIHV0aWxzCisKK2JibG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UnKQorbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuQnVpbGQnKQorCitOVUxMID0gb3Blbihvcy5kZXZudWxsLCAncisnKQorCitfX210aW1lX2NhY2hlID0ge30KKworZGVmIGNhY2hlZF9tdGltZV9ub2Vycm9yKGYpOgorICAgIGlmIGYgbm90IGluIF9fbXRpbWVfY2FjaGU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9fbXRpbWVfY2FjaGVbZl0gPSBvcy5zdGF0KGYpW3N0YXQuU1RfTVRJTUVdCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICByZXR1cm4gX19tdGltZV9jYWNoZVtmXQorCitkZWYgcmVzZXRfY2FjaGUoKToKKyAgICBnbG9iYWwgX19tdGltZV9jYWNoZQorICAgIF9fbXRpbWVfY2FjaGUgPSB7fQorCisjIFdoZW4gd2UgZXhlY3V0ZSBhIFB5dGhvbiBmdW5jdGlvbiwgd2UnZCBsaWtlIGNlcnRhaW4gdGhpbmdzCisjIGluIGFsbCBuYW1lc3BhY2VzLCBoZW5jZSB3ZSBhZGQgdGhlbSB0byBfX2J1aWx0aW5zX18uCisjIElmIHdlIGRvIG5vdCBkbyB0aGlzIGFuZCB1c2UgdGhlIGV4ZWMgZ2xvYmFscywgdGhleSB3aWxsCisjIG5vdCBiZSBhdmFpbGFibGUgdG8gc3ViZnVuY3Rpb25zLgorX19idWlsdGluc19fWydiYiddID0gYmIKK19fYnVpbHRpbnNfX1snb3MnXSA9IG9zCisKK2NsYXNzIEZ1bmNGYWlsZWQoRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSA9IE5vbmUsIGxvZ2ZpbGUgPSBOb25lKToKKyAgICAgICAgc2VsZi5sb2dmaWxlID0gbG9nZmlsZQorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIGlmIG5hbWU6CisgICAgICAgICAgICBzZWxmLm1zZyA9ICdGdW5jdGlvbiBmYWlsZWQ6ICVzJyAlIG5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubXNnID0gIkZ1bmN0aW9uIGZhaWxlZCIKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmxvZ2ZpbGUgYW5kIG9zLnBhdGguZXhpc3RzKHNlbGYubG9nZmlsZSk6CisgICAgICAgICAgICBtc2cgPSAoIiVzIChsb2cgZmlsZSBpcyBsb2NhdGVkIGF0ICVzKSIgJQorICAgICAgICAgICAgICAgICAgIChzZWxmLm1zZywgc2VsZi5sb2dmaWxlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyA9IHNlbGYubXNnCisgICAgICAgIHJldHVybiBtc2cKKworY2xhc3MgVGFza0Jhc2UoZXZlbnQuRXZlbnQpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIHRhc2sgZXZlbnRzIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdCwgbG9nZmlsZSwgZCk6CisgICAgICAgIHNlbGYuX3Rhc2sgPSB0CisgICAgICAgIHNlbGYuX3BhY2thZ2UgPSBkLmdldFZhcigiUEYiLCBUcnVlKQorICAgICAgICBzZWxmLnRhc2tmaWxlID0gZC5nZXRWYXIoIkZJTEUiLCBUcnVlKQorICAgICAgICBzZWxmLnRhc2tuYW1lID0gc2VsZi5fdGFzaworICAgICAgICBzZWxmLmxvZ2ZpbGUgPSBsb2dmaWxlCisgICAgICAgIHNlbGYudGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIGV2ZW50LkV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX21lc3NhZ2UgPSAicmVjaXBlICVzOiB0YXNrICVzOiAlcyIgJSAoZC5nZXRWYXIoIlBGIiwgVHJ1ZSksIHQsIHNlbGYuZ2V0RGlzcGxheU5hbWUoKSkKKworICAgIGRlZiBnZXRUYXNrKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdGFzaworCisgICAgZGVmIHNldFRhc2soc2VsZiwgdGFzayk6CisgICAgICAgIHNlbGYuX3Rhc2sgPSB0YXNrCisKKyAgICBkZWYgZ2V0RGlzcGxheU5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBiYi5ldmVudC5nZXROYW1lKHNlbGYpWzQ6XQorCisgICAgdGFzayA9IHByb3BlcnR5KGdldFRhc2ssIHNldFRhc2ssIE5vbmUsICJ0YXNrIHByb3BlcnR5IikKKworY2xhc3MgVGFza1N0YXJ0ZWQoVGFza0Jhc2UpOgorICAgICIiIlRhc2sgZXhlY3V0aW9uIHN0YXJ0ZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdCwgbG9nZmlsZSwgdGFza2ZsYWdzLCBkKToKKyAgICAgICAgc3VwZXIoVGFza1N0YXJ0ZWQsIHNlbGYpLl9faW5pdF9fKHQsIGxvZ2ZpbGUsIGQpCisgICAgICAgIHNlbGYudGFza2ZsYWdzID0gdGFza2ZsYWdzCisKK2NsYXNzIFRhc2tTdWNjZWVkZWQoVGFza0Jhc2UpOgorICAgICIiIlRhc2sgZXhlY3V0aW9uIGNvbXBsZXRlZCIiIgorCitjbGFzcyBUYXNrRmFpbGVkKFRhc2tCYXNlKToKKyAgICAiIiJUYXNrIGV4ZWN1dGlvbiBmYWlsZWQiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrLCBsb2dmaWxlLCBtZXRhZGF0YSwgZXJycHJpbnRlZCA9IEZhbHNlKToKKyAgICAgICAgc2VsZi5lcnJwcmludGVkID0gZXJycHJpbnRlZAorICAgICAgICBzdXBlcihUYXNrRmFpbGVkLCBzZWxmKS5fX2luaXRfXyh0YXNrLCBsb2dmaWxlLCBtZXRhZGF0YSkKKworY2xhc3MgVGFza0ZhaWxlZFNpbGVudChUYXNrQmFzZSk6CisgICAgIiIiVGFzayBleGVjdXRpb24gZmFpbGVkIChzaWxlbnRseSkiIiIKKyAgICBkZWYgZ2V0RGlzcGxheU5hbWUoc2VsZik6CisgICAgICAgICMgRG9uJ3QgbmVlZCB0byB0ZWxsIHRoZSB1c2VyIGl0IHdhcyBzaWxlbnQKKyAgICAgICAgcmV0dXJuICJGYWlsZWQiCisKK2NsYXNzIFRhc2tJbnZhbGlkKFRhc2tCYXNlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrLCBtZXRhZGF0YSk6CisgICAgICAgIHN1cGVyKFRhc2tJbnZhbGlkLCBzZWxmKS5fX2luaXRfXyh0YXNrLCBOb25lLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5fbWVzc2FnZSA9ICJObyBzdWNoIHRhc2sgJyVzJyIgJSB0YXNrCisKKworY2xhc3MgTG9nVGVlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2dlciwgb3V0ZmlsZSk6CisgICAgICAgIHNlbGYub3V0ZmlsZSA9IG91dGZpbGUKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnZXIKKyAgICAgICAgc2VsZi5uYW1lID0gc2VsZi5vdXRmaWxlLm5hbWUKKworICAgIGRlZiB3cml0ZShzZWxmLCBzdHJpbmcpOgorICAgICAgICBzZWxmLmxvZ2dlci5wbGFpbihzdHJpbmcpCisgICAgICAgIHNlbGYub3V0ZmlsZS53cml0ZShzdHJpbmcpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLm91dGZpbGUuX19lbnRlcl9fKCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjaW5mbyk6CisgICAgICAgIHNlbGYub3V0ZmlsZS5fX2V4aXRfXygqZXhjaW5mbykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8TG9nVGVlIHswfT4nLmZvcm1hdChzZWxmLm5hbWUpCisgICAgZGVmIGZsdXNoKHNlbGYpOgorICAgICAgICBzZWxmLm91dGZpbGUuZmx1c2goKQorCitkZWYgZXhlY19mdW5jKGZ1bmMsIGQsIGRpcnMgPSBOb25lKToKKyAgICAiIiJFeGVjdXRlIGEgQkIgJ2Z1bmN0aW9uJyIiIgorCisgICAgYm9keSA9IGQuZ2V0VmFyKGZ1bmMsIEZhbHNlKQorICAgIGlmIG5vdCBib2R5OgorICAgICAgICBpZiBib2R5IGlzIE5vbmU6CisgICAgICAgICAgICBsb2dnZXIud2FybigiRnVuY3Rpb24gJXMgZG9lc24ndCBleGlzdCIsIGZ1bmMpCisgICAgICAgIHJldHVybgorCisgICAgZmxhZ3MgPSBkLmdldFZhckZsYWdzKGZ1bmMpCisgICAgY2xlYW5kaXJzID0gZmxhZ3MuZ2V0KCdjbGVhbmRpcnMnKQorICAgIGlmIGNsZWFuZGlyczoKKyAgICAgICAgZm9yIGNkaXIgaW4gZC5leHBhbmQoY2xlYW5kaXJzKS5zcGxpdCgpOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKGNkaXIsIFRydWUpCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoY2RpcikKKworICAgIGlmIGRpcnMgaXMgTm9uZToKKyAgICAgICAgZGlycyA9IGZsYWdzLmdldCgnZGlycycpCisgICAgICAgIGlmIGRpcnM6CisgICAgICAgICAgICBkaXJzID0gZC5leHBhbmQoZGlycykuc3BsaXQoKQorCisgICAgaWYgZGlyczoKKyAgICAgICAgZm9yIGFkaXIgaW4gZGlyczoKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihhZGlyKQorICAgICAgICBhZGlyID0gZGlyc1stMV0KKyAgICBlbHNlOgorICAgICAgICBhZGlyID0gZC5nZXRWYXIoJ0InLCBUcnVlKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoYWRpcikKKworICAgIGlzcHl0aG9uID0gZmxhZ3MuZ2V0KCdweXRob24nKQorCisgICAgbG9ja2ZsYWcgPSBmbGFncy5nZXQoJ2xvY2tmaWxlcycpCisgICAgaWYgbG9ja2ZsYWc6CisgICAgICAgIGxvY2tmaWxlcyA9IFtmIGZvciBmIGluIGQuZXhwYW5kKGxvY2tmbGFnKS5zcGxpdCgpXQorICAgIGVsc2U6CisgICAgICAgIGxvY2tmaWxlcyA9IE5vbmUKKworICAgIHRlbXBkaXIgPSBkLmdldFZhcignVCcsIFRydWUpCisKKyAgICAjIG9yIGZ1bmMgYWxsb3dzIGl0ZW1zIHRvIGJlIGV4ZWN1dGVkIG91dHNpZGUgb2YgdGhlIG5vcm1hbAorICAgICMgdGFzayBzZXQsIHN1Y2ggYXMgYnVpbGRoaXN0b3J5CisgICAgdGFzayA9IGQuZ2V0VmFyKCdCQl9SVU5UQVNLJywgVHJ1ZSkgb3IgZnVuYworICAgIGlmIHRhc2sgPT0gZnVuYzoKKyAgICAgICAgdGFza2Z1bmMgPSB0YXNrCisgICAgZWxzZToKKyAgICAgICAgdGFza2Z1bmMgPSAiJXMuJXMiICUgKHRhc2ssIGZ1bmMpCisKKyAgICBydW5mbXQgPSBkLmdldFZhcignQkJfUlVORk1UJywgVHJ1ZSkgb3IgInJ1bi57ZnVuY30ue3BpZH0iCisgICAgcnVuZm4gPSBydW5mbXQuZm9ybWF0KHRhc2tmdW5jPXRhc2tmdW5jLCB0YXNrPXRhc2ssIGZ1bmM9ZnVuYywgcGlkPW9zLmdldHBpZCgpKQorICAgIHJ1bmZpbGUgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgcnVuZm4pCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShydW5maWxlKSkKKworICAgICMgU2V0dXAgdGhlIGNvdXJ0ZXN5IGxpbmsgdG8gdGhlIHJ1bmZuLCBvbmx5IGZvciB0YXNrcworICAgICMgd2UgY3JlYXRlIHRoZSBsaW5rICdqdXN0JyBiZWZvcmUgdGhlIHJ1biBzY3JpcHQgaXMgY3JlYXRlZAorICAgICMgaWYgd2UgY3JlYXRlIGl0IGFmdGVyLCBhbmQgaWYgdGhlIHJ1biBzY3JpcHQgZmFpbHMsIHRoZW4gdGhlCisgICAgIyBsaW5rIHdvbid0IGJlIGNyZWF0ZWQgYXMgYW4gZXhjZXB0aW9uIHdvdWxkIGJlIGZpcmVkLgorICAgIGlmIHRhc2sgPT0gZnVuYzoKKyAgICAgICAgcnVubGluayA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAncnVuLnswfScuZm9ybWF0KHRhc2spKQorICAgICAgICBpZiBydW5saW5rOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHJ1bmxpbmspCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKHJ1bmZuLCBydW5saW5rKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgd2l0aCBiYi51dGlscy5maWxlc2xvY2tlZChsb2NrZmlsZXMpOgorICAgICAgICBpZiBpc3B5dGhvbjoKKyAgICAgICAgICAgIGV4ZWNfZnVuY19weXRob24oZnVuYywgZCwgcnVuZmlsZSwgY3dkPWFkaXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleGVjX2Z1bmNfc2hlbGwoZnVuYywgZCwgcnVuZmlsZSwgY3dkPWFkaXIpCisKK19mdW5jdGlvbmZtdCA9ICIiIgorZGVmIHtmdW5jdGlvbn0oZCk6Cit7Ym9keX0KKwore2Z1bmN0aW9ufShkKQorIiIiCitsb2dmb3JtYXR0ZXIgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikKK2RlZiBleGVjX2Z1bmNfcHl0aG9uKGZ1bmMsIGQsIHJ1bmZpbGUsIGN3ZD1Ob25lKToKKyAgICAiIiJFeGVjdXRlIGEgcHl0aG9uIEJCICdmdW5jdGlvbiciIiIKKworICAgIGJiZmlsZSA9IGQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkKKyAgICBjb2RlID0gX2Z1bmN0aW9uZm10LmZvcm1hdChmdW5jdGlvbj1mdW5jLCBib2R5PWQuZ2V0VmFyKGZ1bmMsIFRydWUpKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUocnVuZmlsZSkpCisgICAgd2l0aCBvcGVuKHJ1bmZpbGUsICd3JykgYXMgc2NyaXB0OgorICAgICAgICBiYi5kYXRhLmVtaXRfZnVuY19weXRob24oZnVuYywgc2NyaXB0LCBkKQorCisgICAgaWYgY3dkOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvbGRkaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIG9sZGRpciA9IE5vbmUKKyAgICAgICAgb3MuY2hkaXIoY3dkKQorCisgICAgYmIuZGVidWcoMiwgIkV4ZWN1dGluZyBweXRob24gZnVuY3Rpb24gJXMiICUgZnVuYykKKworICAgIHRyeToKKyAgICAgICAgY29tcCA9IHV0aWxzLmJldHRlcl9jb21waWxlKGNvZGUsIGZ1bmMsIGJiZmlsZSkKKyAgICAgICAgdXRpbHMuYmV0dGVyX2V4ZWMoY29tcCwgeyJkIjogZH0sIGNvZGUsIGJiZmlsZSkKKyAgICBleGNlcHQgKGJiLnBhcnNlLlNraXBSZWNpcGUsIGJiLmJ1aWxkLkZ1bmNGYWlsZWQpOgorICAgICAgICByYWlzZQorICAgIGV4Y2VwdDoKKyAgICAgICAgcmFpc2UgRnVuY0ZhaWxlZChmdW5jLCBOb25lKQorICAgIGZpbmFsbHk6CisgICAgICAgIGJiLmRlYnVnKDIsICJQeXRob24gZnVuY3Rpb24gJXMgZmluaXNoZWQiICUgZnVuYykKKworICAgICAgICBpZiBjd2QgYW5kIG9sZGRpcjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihvbGRkaXIpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKK2RlZiBzaGVsbF90cmFwX2NvZGUoKToKKyAgICByZXR1cm4gJycnIyEvYmluL3NoXG4KKyMgRW1pdCBhIHVzZWZ1bCBkaWFnbm9zdGljIGlmIHNvbWV0aGluZyBmYWlsczoKK2JiX2V4aXRfaGFuZGxlcigpIHsKKyAgICByZXQ9JD8KKyAgICBjYXNlICRyZXQgaW4KKyAgICAwKSAgOzsKKyAgICAqKSAgY2FzZSAkQkFTSF9WRVJTSU9OIGluCisgICAgICAgICIiKSAgIGVjaG8gIldBUk5JTkc6IGV4aXQgY29kZSAkcmV0IGZyb20gYSBzaGVsbCBjb21tYW5kLiI7OworICAgICAgICAqKSAgICBlY2hvICJXQVJOSU5HOiAke0JBU0hfU09VUkNFWzBdfToke0JBU0hfTElORU5PWzBdfSBleGl0ICRyZXQgZnJvbQorICBcIiRCQVNIX0NPTU1BTkRcIiI7OworICAgICAgICBlc2FjCisgICAgICAgIGV4aXQgJHJldAorICAgIGVzYWMKK30KK3RyYXAgJ2JiX2V4aXRfaGFuZGxlcicgMAorc2V0IC1lCisnJycKKworZGVmIGV4ZWNfZnVuY19zaGVsbChmdW5jLCBkLCBydW5maWxlLCBjd2Q9Tm9uZSk6CisgICAgIiIiRXhlY3V0ZSBhIHNoZWxsIGZ1bmN0aW9uIGZyb20gdGhlIG1ldGFkYXRhCisKKyAgICBOb3RlIG9uIGRpcmVjdG9yeSBiZWhhdmlvci4gIFRoZSAnZGlycycgdmFyZmxhZyBzaG91bGQgY29udGFpbiBhIGxpc3QKKyAgICBvZiB0aGUgZGlyZWN0b3JpZXMgeW91IG5lZWQgY3JlYXRlZCBwcmlvciB0byBleGVjdXRpb24uICBUaGUgbGFzdAorICAgIGl0ZW0gaW4gdGhlIGxpc3QgaXMgd2hlcmUgd2Ugd2lsbCBjaGRpci9jZCB0by4KKyAgICAiIiIKKworICAgICMgRG9uJ3QgbGV0IHRoZSBlbWl0dGVkIHNoZWxsIHNjcmlwdCBvdmVycmlkZSBQV0QKKyAgICBkLmRlbFZhckZsYWcoJ1BXRCcsICdleHBvcnQnKQorCisgICAgd2l0aCBvcGVuKHJ1bmZpbGUsICd3JykgYXMgc2NyaXB0OgorICAgICAgICBzY3JpcHQud3JpdGUoc2hlbGxfdHJhcF9jb2RlKCkpCisKKyAgICAgICAgYmIuZGF0YS5lbWl0X2Z1bmMoZnVuYywgc2NyaXB0LCBkKQorCisgICAgICAgIGlmIGJiLm1zZy5sb2dnZXJWZXJib3NlTG9nczoKKyAgICAgICAgICAgIHNjcmlwdC53cml0ZSgic2V0IC14XG4iKQorICAgICAgICBpZiBjd2Q6CisgICAgICAgICAgICBzY3JpcHQud3JpdGUoImNkICclcydcbiIgJSBjd2QpCisgICAgICAgIHNjcmlwdC53cml0ZSgiJXNcbiIgJSBmdW5jKQorICAgICAgICBzY3JpcHQud3JpdGUoJycnCisjIGNsZWFudXAKK3JldD0kPwordHJhcCAnJyAwCitleGl0ICRyZXQKKycnJykKKworICAgIG9zLmNobW9kKHJ1bmZpbGUsIDA3NzUpCisKKyAgICBjbWQgPSBydW5maWxlCisgICAgaWYgZC5nZXRWYXJGbGFnKGZ1bmMsICdmYWtlcm9vdCcpOgorICAgICAgICBmYWtlcm9vdGNtZCA9IGQuZ2V0VmFyKCdGQUtFUk9PVCcsIFRydWUpCisgICAgICAgIGlmIGZha2Vyb290Y21kOgorICAgICAgICAgICAgY21kID0gW2Zha2Vyb290Y21kLCBydW5maWxlXQorCisgICAgaWYgYmIubXNnLmxvZ2dlckRlZmF1bHRWZXJib3NlOgorICAgICAgICBsb2dmaWxlID0gTG9nVGVlKGxvZ2dlciwgc3lzLnN0ZG91dCkKKyAgICBlbHNlOgorICAgICAgICBsb2dmaWxlID0gc3lzLnN0ZG91dAorCisgICAgZGVmIHJlYWRmaWZvKGRhdGEpOgorICAgICAgICBsaW5lcyA9IGRhdGEuc3BsaXQoJ1wwJykKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICBzcGxpdHZhbCA9IGxpbmUuc3BsaXQoJyAnLCAxKQorICAgICAgICAgICAgY21kID0gc3BsaXR2YWxbMF0KKyAgICAgICAgICAgIGlmIGxlbihzcGxpdHZhbCkgPiAxOgorICAgICAgICAgICAgICAgIHZhbHVlID0gc3BsaXR2YWxbMV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmFsdWUgPSAnJworICAgICAgICAgICAgaWYgY21kID09ICdiYnBsYWluJzoKKyAgICAgICAgICAgICAgICBiYi5wbGFpbih2YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgY21kID09ICdiYm5vdGUnOgorICAgICAgICAgICAgICAgIGJiLm5vdGUodmFsdWUpCisgICAgICAgICAgICBlbGlmIGNtZCA9PSAnYmJ3YXJuJzoKKyAgICAgICAgICAgICAgICBiYi53YXJuKHZhbHVlKQorICAgICAgICAgICAgZWxpZiBjbWQgPT0gJ2JiZXJyb3InOgorICAgICAgICAgICAgICAgIGJiLmVycm9yKHZhbHVlKQorICAgICAgICAgICAgZWxpZiBjbWQgPT0gJ2JiZmF0YWwnOgorICAgICAgICAgICAgICAgICMgVGhlIGNhbGxlciB3aWxsIGNhbGwgZXhpdCB0aGVtc2VsdmVzLCBzbyBiYi5lcnJvcigpIGlzCisgICAgICAgICAgICAgICAgIyB3aGF0IHdlIHdhbnQgaGVyZSByYXRoZXIgdGhhbiBiYi5mYXRhbCgpCisgICAgICAgICAgICAgICAgYmIuZXJyb3IodmFsdWUpCisgICAgICAgICAgICBlbGlmIGNtZCA9PSAnYmJmYXRhbF9sb2cnOgorICAgICAgICAgICAgICAgIGJiLmVycm9yKHZhbHVlLCBmb3JjZWxvZz1UcnVlKQorICAgICAgICAgICAgZWxpZiBjbWQgPT0gJ2JiZGVidWcnOgorICAgICAgICAgICAgICAgIHNwbGl0dmFsID0gdmFsdWUuc3BsaXQoJyAnLCAxKQorICAgICAgICAgICAgICAgIGxldmVsID0gaW50KHNwbGl0dmFsWzBdKQorICAgICAgICAgICAgICAgIHZhbHVlID0gc3BsaXR2YWxbMV0KKyAgICAgICAgICAgICAgICBiYi5kZWJ1ZyhsZXZlbCwgdmFsdWUpCisKKyAgICB0ZW1wZGlyID0gZC5nZXRWYXIoJ1QnLCBUcnVlKQorICAgIGZpZm9wYXRoID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdmaWZvLiVzJyAlIG9zLmdldHBpZCgpKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpZm9wYXRoKToKKyAgICAgICAgb3MudW5saW5rKGZpZm9wYXRoKQorICAgIG9zLm1rZmlmbyhmaWZvcGF0aCkKKyAgICB3aXRoIG9wZW4oZmlmb3BhdGgsICdyKycpIGFzIGZpZm86CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLmRlYnVnKDIsICJFeGVjdXRpbmcgc2hlbGwgZnVuY3Rpb24gJXMiICUgZnVuYykKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggb3Blbihvcy5kZXZudWxsLCAncisnKSBhcyBzdGRpbjoKKyAgICAgICAgICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oY21kLCBzaGVsbD1GYWxzZSwgc3RkaW49c3RkaW4sIGxvZz1sb2dmaWxlLCBleHRyYWZpbGVzPVsoZmlmbyxyZWFkZmlmbyldKQorICAgICAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuQ21kRXJyb3I6CisgICAgICAgICAgICAgICAgbG9nZm4gPSBkLmdldFZhcignQkJfTE9HRklMRScsIFRydWUpCisgICAgICAgICAgICAgICAgcmFpc2UgRnVuY0ZhaWxlZChmdW5jLCBsb2dmbikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVubGluayhmaWZvcGF0aCkKKworICAgIGJiLmRlYnVnKDIsICJTaGVsbCBmdW5jdGlvbiAlcyBmaW5pc2hlZCIgJSBmdW5jKQorCitkZWYgX3Rhc2tfZGF0YShmbiwgdGFzaywgZCk6CisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgbG9jYWxkYXRhLnNldFZhcignQkJfRklMRU5BTUUnLCBmbikKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdCQl9DVVJSRU5UVEFTSycsIHRhc2tbMzpdKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICd0YXNrLSVzOiVzJyAlCisgICAgICAgICAgICAgICAgICAgICAodGFza1szOl0ucmVwbGFjZSgnXycsICctJyksIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBGYWxzZSkpKQorICAgIGxvY2FsZGF0YS5maW5hbGl6ZSgpCisgICAgYmIuZGF0YS5leHBhbmRLZXlzKGxvY2FsZGF0YSkKKyAgICByZXR1cm4gbG9jYWxkYXRhCisKK2RlZiBfZXhlY190YXNrKGZuLCB0YXNrLCBkLCBxdWlldGVycik6CisgICAgIiIiRXhlY3V0ZSBhIEJCICd0YXNrJworCisgICAgRXhlY3V0aW9uIG9mIGEgdGFzayBpbnZvbHZlcyBhIGJpdCBtb3JlIHNldHVwIHRoYW4gZXhlY3V0aW5nIGEgZnVuY3Rpb24sCisgICAgcnVubmluZyBpdCB3aXRoIGl0cyBvd24gbG9jYWwgbWV0YWRhdGEsIGFuZCB3aXRoIHNvbWUgdXNlZnVsIHZhcmlhYmxlcyBzZXQuCisgICAgIiIiCisgICAgaWYgbm90IGQuZ2V0VmFyRmxhZyh0YXNrLCAndGFzaycpOgorICAgICAgICBldmVudC5maXJlKFRhc2tJbnZhbGlkKHRhc2ssIGQpLCBkKQorICAgICAgICBsb2dnZXIuZXJyb3IoIk5vIHN1Y2ggdGFzazogJXMiICUgdGFzaykKKyAgICAgICAgcmV0dXJuIDEKKworICAgIGxvZ2dlci5kZWJ1ZygxLCAiRXhlY3V0aW5nIHRhc2sgJXMiLCB0YXNrKQorCisgICAgbG9jYWxkYXRhID0gX3Rhc2tfZGF0YShmbiwgdGFzaywgZCkKKyAgICB0ZW1wZGlyID0gbG9jYWxkYXRhLmdldFZhcignVCcsIFRydWUpCisgICAgaWYgbm90IHRlbXBkaXI6CisgICAgICAgIGJiLmZhdGFsKCJUIHZhcmlhYmxlIG5vdCBzZXQsIHVuYWJsZSB0byBidWlsZCIpCisKKyAgICAjIENoYW5nZSBuaWNlIGxldmVsIGlmIHdlJ3JlIGFza2VkIHRvCisgICAgbmljZSA9IGxvY2FsZGF0YS5nZXRWYXIoIkJCX1RBU0tfTklDRV9MRVZFTCIsIFRydWUpCisgICAgaWYgbmljZToKKyAgICAgICAgY3VybmljZSA9IG9zLm5pY2UoMCkKKyAgICAgICAgbmljZSA9IGludChuaWNlKSAtIGN1cm5pY2UKKyAgICAgICAgbmV3bmljZSA9IG9zLm5pY2UobmljZSkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSZW5pY2UgdG8gJXMgIiAlIG5ld25pY2UpCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIodGVtcGRpcikKKworICAgICMgRGV0ZXJtaW5lIHRoZSBsb2dmaWxlIHRvIGdlbmVyYXRlCisgICAgbG9nZm10ID0gbG9jYWxkYXRhLmdldFZhcignQkJfTE9HRk1UJywgVHJ1ZSkgb3IgJ2xvZy57dGFza30ue3BpZH0nCisgICAgbG9nYmFzZSA9IGxvZ2ZtdC5mb3JtYXQodGFzaz10YXNrLCBwaWQ9b3MuZ2V0cGlkKCkpCisKKyAgICAjIERvY3VtZW50IHRoZSBvcmRlciBvZiB0aGUgdGFza3MuLi4KKyAgICBsb2dvcmRlciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnbG9nLnRhc2tfb3JkZXInKQorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGxvZ29yZGVyLCAnYScpIGFzIGxvZ29yZGVyZmlsZToKKyAgICAgICAgICAgIGxvZ29yZGVyZmlsZS53cml0ZSgnezB9ICh7MX0pOiB7Mn1cbicuZm9ybWF0KHRhc2ssIG9zLmdldHBpZCgpLCBsb2diYXNlKSkKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbigiT3BlbmluZyBsb2cgZmlsZSAnJXMnIiwgbG9nb3JkZXIpCisgICAgICAgIHBhc3MKKworICAgICMgU2V0dXAgdGhlIGNvdXJ0ZXN5IGxpbmsgdG8gdGhlIGxvZ2ZuCisgICAgbG9nbGluayA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnbG9nLnswfScuZm9ybWF0KHRhc2spKQorICAgIGxvZ2ZuID0gb3MucGF0aC5qb2luKHRlbXBkaXIsIGxvZ2Jhc2UpCisgICAgaWYgbG9nbGluazoKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKGxvZ2xpbmspCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICBvcy5zeW1saW5rKGxvZ2Jhc2UsIGxvZ2xpbmspCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICBwYXNzCisKKyAgICBwcmVmdW5jcyA9IGxvY2FsZGF0YS5nZXRWYXJGbGFnKHRhc2ssICdwcmVmdW5jcycsIGV4cGFuZD1UcnVlKQorICAgIHBvc3RmdW5jcyA9IGxvY2FsZGF0YS5nZXRWYXJGbGFnKHRhc2ssICdwb3N0ZnVuY3MnLCBleHBhbmQ9VHJ1ZSkKKworICAgIGNsYXNzIEVycm9yQ2hlY2tIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYudHJpZ2dlcmVkID0gRmFsc2UKKyAgICAgICAgICAgIGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfXyhzZWxmLCBsb2dnaW5nLkVSUk9SKQorICAgICAgICBkZWYgZW1pdChzZWxmLCByZWNvcmQpOgorICAgICAgICAgICAgaWYgZ2V0YXR0cihyZWNvcmQsICdmb3JjZWxvZycsIEZhbHNlKToKKyAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJlZCA9IEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcmVkID0gVHJ1ZQorCisgICAgIyBIYW5kbGUgbG9nZmlsZXMKKyAgICBzaSA9IG9wZW4oJy9kZXYvbnVsbCcsICdyJykKKyAgICB0cnk6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUobG9nZm4pKQorICAgICAgICBsb2dmaWxlID0gb3Blbihsb2dmbiwgJ3cnKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCJPcGVuaW5nIGxvZyBmaWxlICclcyciLCBsb2dmbikKKyAgICAgICAgcGFzcworCisgICAgIyBEdXAgdGhlIGV4aXN0aW5nIGZkcyBzbyB3ZSBkb250IGxvc2UgdGhlbQorICAgIG9zaSA9IFtvcy5kdXAoc3lzLnN0ZGluLmZpbGVubygpKSwgc3lzLnN0ZGluLmZpbGVubygpXQorICAgIG9zbyA9IFtvcy5kdXAoc3lzLnN0ZG91dC5maWxlbm8oKSksIHN5cy5zdGRvdXQuZmlsZW5vKCldCisgICAgb3NlID0gW29zLmR1cChzeXMuc3RkZXJyLmZpbGVubygpKSwgc3lzLnN0ZGVyci5maWxlbm8oKV0KKworICAgICMgUmVwbGFjZSB0aG9zZSBmZHMgd2l0aCBvdXIgb3duCisgICAgb3MuZHVwMihzaS5maWxlbm8oKSwgb3NpWzFdKQorICAgIG9zLmR1cDIobG9nZmlsZS5maWxlbm8oKSwgb3NvWzFdKQorICAgIG9zLmR1cDIobG9nZmlsZS5maWxlbm8oKSwgb3NlWzFdKQorCisgICAgIyBFbnN1cmUgUHl0aG9uIGxvZ2dpbmcgZ29lcyB0byB0aGUgbG9nZmlsZQorICAgIGhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIobG9nZmlsZSkKKyAgICBoYW5kbGVyLnNldEZvcm1hdHRlcihsb2dmb3JtYXR0ZXIpCisgICAgIyBBbHdheXMgZW5hYmxlIGZ1bGwgZGVidWcgb3V0cHV0IGludG8gdGFzayBsb2dmaWxlcworICAgIGhhbmRsZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRyAtIDIpCisgICAgYmJsb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKQorCisgICAgZXJyY2hrID0gRXJyb3JDaGVja0hhbmRsZXIoKQorICAgIGJibG9nZ2VyLmFkZEhhbmRsZXIoZXJyY2hrKQorCisgICAgbG9jYWxkYXRhLnNldFZhcignQkJfTE9HRklMRScsIGxvZ2ZuKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0JCX1JVTlRBU0snLCB0YXNrKQorCisgICAgZmxhZ3MgPSBsb2NhbGRhdGEuZ2V0VmFyRmxhZ3ModGFzaykKKworICAgIGV2ZW50LmZpcmUoVGFza1N0YXJ0ZWQodGFzaywgbG9nZm4sIGZsYWdzLCBsb2NhbGRhdGEpLCBsb2NhbGRhdGEpCisgICAgdHJ5OgorICAgICAgICBmb3IgZnVuYyBpbiAocHJlZnVuY3Mgb3IgJycpLnNwbGl0KCk6CisgICAgICAgICAgICBleGVjX2Z1bmMoZnVuYywgbG9jYWxkYXRhKQorICAgICAgICBleGVjX2Z1bmModGFzaywgbG9jYWxkYXRhKQorICAgICAgICBmb3IgZnVuYyBpbiAocG9zdGZ1bmNzIG9yICcnKS5zcGxpdCgpOgorICAgICAgICAgICAgZXhlY19mdW5jKGZ1bmMsIGxvY2FsZGF0YSkKKyAgICBleGNlcHQgRnVuY0ZhaWxlZCBhcyBleGM6CisgICAgICAgIGlmIHF1aWV0ZXJyOgorICAgICAgICAgICAgZXZlbnQuZmlyZShUYXNrRmFpbGVkU2lsZW50KHRhc2ssIGxvZ2ZuLCBsb2NhbGRhdGEpLCBsb2NhbGRhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlcnJwcmludGVkID0gZXJyY2hrLnRyaWdnZXJlZAorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihleGMpKQorICAgICAgICAgICAgZXZlbnQuZmlyZShUYXNrRmFpbGVkKHRhc2ssIGxvZ2ZuLCBsb2NhbGRhdGEsIGVycnByaW50ZWQpLCBsb2NhbGRhdGEpCisgICAgICAgIHJldHVybiAxCisgICAgZmluYWxseToKKyAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorCisgICAgICAgIGJibG9nZ2VyLnJlbW92ZUhhbmRsZXIoaGFuZGxlcikKKworICAgICAgICAjIFJlc3RvcmUgdGhlIGJhY2t1cCBmZHMKKyAgICAgICAgb3MuZHVwMihvc2lbMF0sIG9zaVsxXSkKKyAgICAgICAgb3MuZHVwMihvc29bMF0sIG9zb1sxXSkKKyAgICAgICAgb3MuZHVwMihvc2VbMF0sIG9zZVsxXSkKKworICAgICAgICAjIENsb3NlIHRoZSBiYWNrdXAgZmRzCisgICAgICAgIG9zLmNsb3NlKG9zaVswXSkKKyAgICAgICAgb3MuY2xvc2Uob3NvWzBdKQorICAgICAgICBvcy5jbG9zZShvc2VbMF0pCisgICAgICAgIHNpLmNsb3NlKCkKKworICAgICAgICBsb2dmaWxlLmNsb3NlKCkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobG9nZm4pIGFuZCBvcy5wYXRoLmdldHNpemUobG9nZm4pID09IDA6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlplcm8gc2l6ZSBsb2dmbiAlcywgcmVtb3ZpbmciLCBsb2dmbikKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShsb2dmbikKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShsb2dsaW5rKQorICAgIGV2ZW50LmZpcmUoVGFza1N1Y2NlZWRlZCh0YXNrLCBsb2dmbiwgbG9jYWxkYXRhKSwgbG9jYWxkYXRhKQorCisgICAgaWYgbm90IGxvY2FsZGF0YS5nZXRWYXJGbGFnKHRhc2ssICdub3N0YW1wJykgYW5kIG5vdCBsb2NhbGRhdGEuZ2V0VmFyRmxhZyh0YXNrLCAnc2VsZnN0YW1wJyk6CisgICAgICAgIG1ha2Vfc3RhbXAodGFzaywgbG9jYWxkYXRhKQorCisgICAgcmV0dXJuIDAKKworZGVmIGV4ZWNfdGFzayhmbiwgdGFzaywgZCwgcHJvZmlsZSA9IEZhbHNlKToKKyAgICB0cnk6CisgICAgICAgIHF1aWV0ZXJyID0gRmFsc2UKKyAgICAgICAgaWYgZC5nZXRWYXJGbGFnKHRhc2ssICJxdWlldGVycm9ycyIpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcXVpZXRlcnIgPSBUcnVlCisKKyAgICAgICAgaWYgcHJvZmlsZToKKyAgICAgICAgICAgIHByb2ZuYW1lID0gInByb2ZpbGUtJXMubG9nIiAlIChkLmdldFZhcigiUE4iLCBUcnVlKSArICItIiArIHRhc2spCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0IGNQcm9maWxlIGFzIHByb2ZpbGUKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBpbXBvcnQgcHJvZmlsZQorICAgICAgICAgICAgcHJvZiA9IHByb2ZpbGUuUHJvZmlsZSgpCisgICAgICAgICAgICByZXQgPSBwcm9maWxlLlByb2ZpbGUucnVuY2FsbChwcm9mLCBfZXhlY190YXNrLCBmbiwgdGFzaywgZCwgcXVpZXRlcnIpCisgICAgICAgICAgICBwcm9mLmR1bXBfc3RhdHMocHJvZm5hbWUpCisgICAgICAgICAgICBiYi51dGlscy5wcm9jZXNzX3Byb2ZpbGVsb2cocHJvZm5hbWUpCisKKyAgICAgICAgICAgIHJldHVybiByZXQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBfZXhlY190YXNrKGZuLCB0YXNrLCBkLCBxdWlldGVycikKKworICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIGZyb20gdHJhY2ViYWNrIGltcG9ydCBmb3JtYXRfZXhjCisgICAgICAgIGlmIG5vdCBxdWlldGVycjoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQnVpbGQgb2YgJXMgZmFpbGVkIiAlICh0YXNrKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihmb3JtYXRfZXhjKCkpCisgICAgICAgICAgICBmYWlsZWRldmVudCA9IFRhc2tGYWlsZWQodGFzaywgTm9uZSwgZCwgVHJ1ZSkKKyAgICAgICAgICAgIGV2ZW50LmZpcmUoZmFpbGVkZXZlbnQsIGQpCisgICAgICAgIHJldHVybiAxCisKK2RlZiBzdGFtcF9pbnRlcm5hbCh0YXNrbmFtZSwgZCwgZmlsZV9uYW1lLCBiYXNlb25seT1GYWxzZSk6CisgICAgIiIiCisgICAgSW50ZXJuYWwgc3RhbXAgaGVscGVyIGZ1bmN0aW9uCisgICAgTWFrZXMgc3VyZSB0aGUgc3RhbXAgZGlyZWN0b3J5IGV4aXN0cworICAgIFJldHVybnMgdGhlIHN0YW1wIHBhdGgrZmlsZW5hbWUKKworICAgIEluIHRoZSBiaXRiYWtlIGNvcmUsIGQgY2FuIGJlIGEgQ2FjaGVEYXRhIGFuZCBmaWxlX25hbWUgd2lsbCBiZSBzZXQuCisgICAgV2hlbiBjYWxsZWQgaW4gdGFzayBjb250ZXh0LCBkIHdpbGwgYmUgYSBkYXRhIHN0b3JlLCBmaWxlX25hbWUgd2lsbCBub3QgYmUgc2V0CisgICAgIiIiCisgICAgdGFza2ZsYWduYW1lID0gdGFza25hbWUKKyAgICBpZiB0YXNrbmFtZS5lbmRzd2l0aCgiX3NldHNjZW5lIikgYW5kIHRhc2tuYW1lICE9ICJkb19zZXRzY2VuZSI6CisgICAgICAgIHRhc2tmbGFnbmFtZSA9IHRhc2tuYW1lLnJlcGxhY2UoIl9zZXRzY2VuZSIsICIiKQorCisgICAgaWYgZmlsZV9uYW1lOgorICAgICAgICBzdGFtcCA9IGQuc3RhbXBfYmFzZVtmaWxlX25hbWVdLmdldCh0YXNrZmxhZ25hbWUpIG9yIGQuc3RhbXBbZmlsZV9uYW1lXQorICAgICAgICBleHRyYWluZm8gPSBkLnN0YW1wX2V4dHJhaW5mb1tmaWxlX25hbWVdLmdldCh0YXNrZmxhZ25hbWUpIG9yICIiCisgICAgZWxzZToKKyAgICAgICAgc3RhbXAgPSBkLmdldFZhckZsYWcodGFza2ZsYWduYW1lLCAnc3RhbXAtYmFzZScsIFRydWUpIG9yIGQuZ2V0VmFyKCdTVEFNUCcsIFRydWUpCisgICAgICAgIGZpbGVfbmFtZSA9IGQuZ2V0VmFyKCdCQl9GSUxFTkFNRScsIFRydWUpCisgICAgICAgIGV4dHJhaW5mbyA9IGQuZ2V0VmFyRmxhZyh0YXNrZmxhZ25hbWUsICdzdGFtcC1leHRyYS1pbmZvJywgVHJ1ZSkgb3IgIiIKKworICAgIGlmIGJhc2Vvbmx5OgorICAgICAgICByZXR1cm4gc3RhbXAKKworICAgIGlmIG5vdCBzdGFtcDoKKyAgICAgICAgcmV0dXJuCisKKyAgICBzdGFtcCA9IGJiLnBhcnNlLnNpZ2dlbi5zdGFtcGZpbGUoc3RhbXAsIGZpbGVfbmFtZSwgdGFza25hbWUsIGV4dHJhaW5mbykKKworICAgIHN0YW1wZGlyID0gb3MucGF0aC5kaXJuYW1lKHN0YW1wKQorICAgIGlmIGNhY2hlZF9tdGltZV9ub2Vycm9yKHN0YW1wZGlyKSA9PSAwOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc3RhbXBkaXIpCisKKyAgICByZXR1cm4gc3RhbXAKKworZGVmIHN0YW1wX2NsZWFubWFza19pbnRlcm5hbCh0YXNrbmFtZSwgZCwgZmlsZV9uYW1lKToKKyAgICAiIiIKKyAgICBJbnRlcm5hbCBzdGFtcCBoZWxwZXIgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgc3RhbXAgY2xlYW5pbmcgbWFzaworICAgIFJldHVybnMgdGhlIHN0YW1wIHBhdGgrZmlsZW5hbWUKKworICAgIEluIHRoZSBiaXRiYWtlIGNvcmUsIGQgY2FuIGJlIGEgQ2FjaGVEYXRhIGFuZCBmaWxlX25hbWUgd2lsbCBiZSBzZXQuCisgICAgV2hlbiBjYWxsZWQgaW4gdGFzayBjb250ZXh0LCBkIHdpbGwgYmUgYSBkYXRhIHN0b3JlLCBmaWxlX25hbWUgd2lsbCBub3QgYmUgc2V0CisgICAgIiIiCisgICAgdGFza2ZsYWduYW1lID0gdGFza25hbWUKKyAgICBpZiB0YXNrbmFtZS5lbmRzd2l0aCgiX3NldHNjZW5lIikgYW5kIHRhc2tuYW1lICE9ICJkb19zZXRzY2VuZSI6CisgICAgICAgIHRhc2tmbGFnbmFtZSA9IHRhc2tuYW1lLnJlcGxhY2UoIl9zZXRzY2VuZSIsICIiKQorCisgICAgaWYgZmlsZV9uYW1lOgorICAgICAgICBzdGFtcCA9IGQuc3RhbXBfYmFzZV9jbGVhbltmaWxlX25hbWVdLmdldCh0YXNrZmxhZ25hbWUpIG9yIGQuc3RhbXBjbGVhbltmaWxlX25hbWVdCisgICAgICAgIGV4dHJhaW5mbyA9IGQuc3RhbXBfZXh0cmFpbmZvW2ZpbGVfbmFtZV0uZ2V0KHRhc2tmbGFnbmFtZSkgb3IgIiIKKyAgICBlbHNlOgorICAgICAgICBzdGFtcCA9IGQuZ2V0VmFyRmxhZyh0YXNrZmxhZ25hbWUsICdzdGFtcC1iYXNlLWNsZWFuJywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ1NUQU1QQ0xFQU4nLCBUcnVlKQorICAgICAgICBmaWxlX25hbWUgPSBkLmdldFZhcignQkJfRklMRU5BTUUnLCBUcnVlKQorICAgICAgICBleHRyYWluZm8gPSBkLmdldFZhckZsYWcodGFza2ZsYWduYW1lLCAnc3RhbXAtZXh0cmEtaW5mbycsIFRydWUpIG9yICIiCisKKyAgICBpZiBub3Qgc3RhbXA6CisgICAgICAgIHJldHVybiBbXQorCisgICAgY2xlYW5tYXNrID0gYmIucGFyc2Uuc2lnZ2VuLnN0YW1wY2xlYW5tYXNrKHN0YW1wLCBmaWxlX25hbWUsIHRhc2tuYW1lLCBleHRyYWluZm8pCisKKyAgICByZXR1cm4gW2NsZWFubWFzaywgY2xlYW5tYXNrLnJlcGxhY2UodGFza2ZsYWduYW1lLCB0YXNrZmxhZ25hbWUgKyAiX3NldHNjZW5lIildCisKK2RlZiBtYWtlX3N0YW1wKHRhc2ssIGQsIGZpbGVfbmFtZSA9IE5vbmUpOgorICAgICIiIgorICAgIENyZWF0ZXMvdXBkYXRlcyBhIHN0YW1wIGZvciBhIGdpdmVuIHRhc2sKKyAgICAoZCBjYW4gYmUgYSBkYXRhIGRpY3Qgb3IgZGF0YUNhY2hlKQorICAgICIiIgorICAgIGNsZWFubWFzayA9IHN0YW1wX2NsZWFubWFza19pbnRlcm5hbCh0YXNrLCBkLCBmaWxlX25hbWUpCisgICAgZm9yIG1hc2sgaW4gY2xlYW5tYXNrOgorICAgICAgICBmb3IgbmFtZSBpbiBnbG9iLmdsb2IobWFzayk6CisgICAgICAgICAgICAjIFByZXNlcnZlIHNpZ2RhdGEgZmlsZXMgaW4gdGhlIHN0YW1wcyBkaXJlY3RvcnkKKyAgICAgICAgICAgIGlmICJzaWdkYXRhIiBpbiBuYW1lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAjIFByZXNlcnZlIHRhaW50IGZpbGVzIGluIHRoZSBzdGFtcHMgZGlyZWN0b3J5CisgICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCcudGFpbnQnKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisKKyAgICBzdGFtcCA9IHN0YW1wX2ludGVybmFsKHRhc2ssIGQsIGZpbGVfbmFtZSkKKyAgICAjIFJlbW92ZSB0aGUgZmlsZSBhbmQgcmVjcmVhdGUgdG8gZm9yY2UgdGltZXN0YW1wCisgICAgIyBjaGFuZ2Ugb24gYnJva2VuIE5GUyBmaWxlc3lzdGVtcworICAgIGlmIHN0YW1wOgorICAgICAgICBiYi51dGlscy5yZW1vdmUoc3RhbXApCisgICAgICAgIG9wZW4oc3RhbXAsICJ3IikuY2xvc2UoKQorCisgICAgIyBJZiB3ZSdyZSBpbiB0YXNrIGNvbnRleHQsIHdyaXRlIG91dCBhIHNpZ25hdHVyZSBmaWxlIGZvciBlYWNoIHRhc2sKKyAgICAjIGFzIGl0IGNvbXBsZXRlcworICAgIGlmIG5vdCB0YXNrLmVuZHN3aXRoKCJfc2V0c2NlbmUiKSBhbmQgdGFzayAhPSAiZG9fc2V0c2NlbmUiIGFuZCBub3QgZmlsZV9uYW1lOgorICAgICAgICBzdGFtcGJhc2UgPSBzdGFtcF9pbnRlcm5hbCh0YXNrLCBkLCBOb25lLCBUcnVlKQorICAgICAgICBmaWxlX25hbWUgPSBkLmdldFZhcignQkJfRklMRU5BTUUnLCBUcnVlKQorICAgICAgICBiYi5wYXJzZS5zaWdnZW4uZHVtcF9zaWd0YXNrKGZpbGVfbmFtZSwgdGFzaywgc3RhbXBiYXNlLCBUcnVlKQorCitkZWYgZGVsX3N0YW1wKHRhc2ssIGQsIGZpbGVfbmFtZSA9IE5vbmUpOgorICAgICIiIgorICAgIFJlbW92ZXMgYSBzdGFtcCBmb3IgYSBnaXZlbiB0YXNrCisgICAgKGQgY2FuIGJlIGEgZGF0YSBkaWN0IG9yIGRhdGFDYWNoZSkKKyAgICAiIiIKKyAgICBzdGFtcCA9IHN0YW1wX2ludGVybmFsKHRhc2ssIGQsIGZpbGVfbmFtZSkKKyAgICBiYi51dGlscy5yZW1vdmUoc3RhbXApCisKK2RlZiB3cml0ZV90YWludCh0YXNrLCBkLCBmaWxlX25hbWUgPSBOb25lKToKKyAgICAiIiIKKyAgICBDcmVhdGVzIGEgInRhaW50IiBmaWxlIHdoaWNoIHdpbGwgZm9yY2UgdGhlIHNwZWNpZmllZCB0YXNrIGFuZCBpdHMKKyAgICBkZXBlbmRlbnRzIHRvIGJlIHJlLXJ1biB0aGUgbmV4dCB0aW1lIGJ5IGluZmx1ZW5jaW5nIHRoZSB2YWx1ZSBvZiBpdHMKKyAgICB0YXNraGFzaC4KKyAgICAoZCBjYW4gYmUgYSBkYXRhIGRpY3Qgb3IgZGF0YUNhY2hlKQorICAgICIiIgorICAgIGltcG9ydCB1dWlkCisgICAgaWYgZmlsZV9uYW1lOgorICAgICAgICB0YWludGZuID0gZC5zdGFtcFtmaWxlX25hbWVdICsgJy4nICsgdGFzayArICcudGFpbnQnCisgICAgZWxzZToKKyAgICAgICAgdGFpbnRmbiA9IGQuZ2V0VmFyKCdTVEFNUCcsIFRydWUpICsgJy4nICsgdGFzayArICcudGFpbnQnCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZSh0YWludGZuKSkKKyAgICAjIFRoZSBzcGVjaWZpYyBjb250ZW50IG9mIHRoZSB0YWludCBmaWxlIGlzIG5vdCByZWFsbHkgaW1wb3J0YW50LAorICAgICMgd2UganVzdCBuZWVkIGl0IHRvIGJlIHJhbmRvbSwgc28gYSByYW5kb20gVVVJRCBpcyB1c2VkCisgICAgd2l0aCBvcGVuKHRhaW50Zm4sICd3JykgYXMgdGFpbnRmOgorICAgICAgICB0YWludGYud3JpdGUoc3RyKHV1aWQudXVpZDQoKSkpCisKK2RlZiBzdGFtcGZpbGUodGFza25hbWUsIGQsIGZpbGVfbmFtZSA9IE5vbmUpOgorICAgICIiIgorICAgIFJldHVybiB0aGUgc3RhbXAgZm9yIGEgZ2l2ZW4gdGFzaworICAgIChkIGNhbiBiZSBhIGRhdGEgZGljdCBvciBkYXRhQ2FjaGUpCisgICAgIiIiCisgICAgcmV0dXJuIHN0YW1wX2ludGVybmFsKHRhc2tuYW1lLCBkLCBmaWxlX25hbWUpCisKK2RlZiBhZGRfdGFza3ModGFza2xpc3QsIGQpOgorICAgIHRhc2tfZGVwcyA9IGQuZ2V0VmFyKCdfdGFza19kZXBzJywgRmFsc2UpCisgICAgaWYgbm90IHRhc2tfZGVwczoKKyAgICAgICAgdGFza19kZXBzID0ge30KKyAgICBpZiBub3QgJ3Rhc2tzJyBpbiB0YXNrX2RlcHM6CisgICAgICAgIHRhc2tfZGVwc1sndGFza3MnXSA9IFtdCisgICAgaWYgbm90ICdwYXJlbnRzJyBpbiB0YXNrX2RlcHM6CisgICAgICAgIHRhc2tfZGVwc1sncGFyZW50cyddID0ge30KKworICAgIGZvciB0YXNrIGluIHRhc2tsaXN0OgorICAgICAgICB0YXNrID0gZC5leHBhbmQodGFzaykKKworICAgICAgICBkLnNldFZhckZsYWcodGFzaywgJ3Rhc2snLCAxKQorCisgICAgICAgIGlmIG5vdCB0YXNrIGluIHRhc2tfZGVwc1sndGFza3MnXToKKyAgICAgICAgICAgIHRhc2tfZGVwc1sndGFza3MnXS5hcHBlbmQodGFzaykKKworICAgICAgICBmbGFncyA9IGQuZ2V0VmFyRmxhZ3ModGFzaykKKyAgICAgICAgZGVmIGdldFRhc2sobmFtZSk6CisgICAgICAgICAgICBpZiBub3QgbmFtZSBpbiB0YXNrX2RlcHM6CisgICAgICAgICAgICAgICAgdGFza19kZXBzW25hbWVdID0ge30KKyAgICAgICAgICAgIGlmIG5hbWUgaW4gZmxhZ3M6CisgICAgICAgICAgICAgICAgZGVwdGFzayA9IGQuZXhwYW5kKGZsYWdzW25hbWVdKQorICAgICAgICAgICAgICAgIHRhc2tfZGVwc1tuYW1lXVt0YXNrXSA9IGRlcHRhc2sKKyAgICAgICAgZ2V0VGFzaygnZGVwZW5kcycpCisgICAgICAgIGdldFRhc2soJ3JkZXBlbmRzJykKKyAgICAgICAgZ2V0VGFzaygnZGVwdGFzaycpCisgICAgICAgIGdldFRhc2soJ3JkZXB0YXNrJykKKyAgICAgICAgZ2V0VGFzaygncmVjcmRlcHRhc2snKQorICAgICAgICBnZXRUYXNrKCdyZWNpZGVwdGFzaycpCisgICAgICAgIGdldFRhc2soJ25vc3RhbXAnKQorICAgICAgICBnZXRUYXNrKCdmYWtlcm9vdCcpCisgICAgICAgIGdldFRhc2soJ25vZXhlYycpCisgICAgICAgIGdldFRhc2soJ3VtYXNrJykKKyAgICAgICAgdGFza19kZXBzWydwYXJlbnRzJ11bdGFza10gPSBbXQorICAgICAgICBpZiAnZGVwcycgaW4gZmxhZ3M6CisgICAgICAgICAgICBmb3IgZGVwIGluIGZsYWdzWydkZXBzJ106CisgICAgICAgICAgICAgICAgZGVwID0gZC5leHBhbmQoZGVwKQorICAgICAgICAgICAgICAgIHRhc2tfZGVwc1sncGFyZW50cyddW3Rhc2tdLmFwcGVuZChkZXApCisKKyAgICAjIGRvbid0IGFzc3VtZSBob2xkaW5nIGEgcmVmZXJlbmNlCisgICAgZC5zZXRWYXIoJ190YXNrX2RlcHMnLCB0YXNrX2RlcHMpCisKK2RlZiBhZGR0YXNrKHRhc2ssIGJlZm9yZSwgYWZ0ZXIsIGQpOgorICAgIGlmIHRhc2tbOjNdICE9ICJkb18iOgorICAgICAgICB0YXNrID0gImRvXyIgKyB0YXNrCisKKyAgICBkLnNldFZhckZsYWcodGFzaywgInRhc2siLCAxKQorICAgIGJidGFza3MgPSBkLmdldFZhcignX19CQlRBU0tTJywgRmFsc2UpIG9yIFtdCisgICAgaWYgdGFzayBub3QgaW4gYmJ0YXNrczoKKyAgICAgICAgYmJ0YXNrcy5hcHBlbmQodGFzaykKKyAgICBkLnNldFZhcignX19CQlRBU0tTJywgYmJ0YXNrcykKKworICAgIGV4aXN0aW5nID0gZC5nZXRWYXJGbGFnKHRhc2ssICJkZXBzIikgb3IgW10KKyAgICBpZiBhZnRlciBpcyBub3QgTm9uZToKKyAgICAgICAgIyBzZXQgdXAgZGVwcyBmb3IgZnVuY3Rpb24KKyAgICAgICAgZm9yIGVudHJ5IGluIGFmdGVyLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBlbnRyeSBub3QgaW4gZXhpc3Rpbmc6CisgICAgICAgICAgICAgICAgZXhpc3RpbmcuYXBwZW5kKGVudHJ5KQorICAgIGQuc2V0VmFyRmxhZyh0YXNrLCAiZGVwcyIsIGV4aXN0aW5nKQorICAgIGlmIGJlZm9yZSBpcyBub3QgTm9uZToKKyAgICAgICAgIyBzZXQgdXAgdGhpbmdzIHRoYXQgZGVwZW5kIG9uIHRoaXMgZnVuYworICAgICAgICBmb3IgZW50cnkgaW4gYmVmb3JlLnNwbGl0KCk6CisgICAgICAgICAgICBleGlzdGluZyA9IGQuZ2V0VmFyRmxhZyhlbnRyeSwgImRlcHMiKSBvciBbXQorICAgICAgICAgICAgaWYgdGFzayBub3QgaW4gZXhpc3Rpbmc6CisgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKGVudHJ5LCAiZGVwcyIsIFt0YXNrXSArIGV4aXN0aW5nKQorCitkZWYgZGVsdGFzayh0YXNrLCBkKToKKyAgICBpZiB0YXNrWzozXSAhPSAiZG9fIjoKKyAgICAgICAgdGFzayA9ICJkb18iICsgdGFzaworCisgICAgYmJ0YXNrcyA9IGQuZ2V0VmFyKCdfX0JCVEFTS1MnLCBGYWxzZSkgb3IgW10KKyAgICBpZiB0YXNrIGluIGJidGFza3M6CisgICAgICAgIGJidGFza3MucmVtb3ZlKHRhc2spCisgICAgICAgIGQuc2V0VmFyKCdfX0JCVEFTS1MnLCBiYnRhc2tzKQorCisgICAgZC5kZWxWYXJGbGFnKHRhc2ssICdkZXBzJykKKyAgICBmb3IgYmJ0YXNrIGluIGQuZ2V0VmFyKCdfX0JCVEFTS1MnLCBGYWxzZSkgb3IgW106CisgICAgICAgIGRlcHMgPSBkLmdldFZhckZsYWcoYmJ0YXNrLCAnZGVwcycpIG9yIFtdCisgICAgICAgIGlmIHRhc2sgaW4gZGVwczoKKyAgICAgICAgICAgIGRlcHMucmVtb3ZlKHRhc2spCisgICAgICAgICAgICBkLnNldFZhckZsYWcoYmJ0YXNrLCAnZGVwcycsIGRlcHMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NhY2hlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jYWNoZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjRkNjYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jYWNoZS5weQpAQCAtMCwwICsxLDgzNyBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBDYWNoZSBpbXBsZW1lbnRhdGlvbgorIworIyBDYWNoaW5nIG9mIGJpdGJha2UgdmFyaWFibGVzIGJlZm9yZSB0YXNrIGV4ZWN1dGlvbgorCisjIENvcHlyaWdodCAoQykgMjAwNiAgICAgICAgUmljaGFyZCBQdXJkaWUKKyMgQ29weXJpZ2h0IChDKSAyMDEyICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorCisjIGJ1dCBzbWFsbCBzZWN0aW9ucyBiYXNlZCBvbiBjb2RlIGZyb20gYmluL2JpdGJha2U6CisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGhpbCBCbHVuZGVsbAorIyBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIFJPQUQgR21iSAorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworCitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoraW1wb3J0IGJiLnV0aWxzCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLkNhY2hlIikKKwordHJ5OgorICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBwaWNrbGUKKyAgICBsb2dnZXIuaW5mbygiSW1wb3J0aW5nIGNQaWNrbGUgZmFpbGVkLiAiCisgICAgICAgICAgICAgICAgIkZhbGxpbmcgYmFjayB0byBhIHZlcnkgc2xvdyBpbXBsZW1lbnRhdGlvbi4iKQorCitfX2NhY2hlX3ZlcnNpb25fXyA9ICIxNDgiCisKK2RlZiBnZXRDYWNoZUZpbGUocGF0aCwgZmlsZW5hbWUsIGRhdGFfaGFzaCk6CisgICAgcmV0dXJuIG9zLnBhdGguam9pbihwYXRoLCBmaWxlbmFtZSArICIuIiArIGRhdGFfaGFzaCkKKworIyBSZWNpcGVJbmZvQ29tbW9uIGRlZmluZXMgY29tbW9uIGRhdGEgcmV0cmlldmluZyBtZXRob2RzCisjIGZyb20gbWV0YSBkYXRhIGZvciBjYWNoZXMuIENvcmVSZWNpcGVJbmZvIGFzIHdlbGwgYXMgb3RoZXIKKyMgRXh0cmEgUmVjaXBlSW5mbyBuZWVkcyB0byBpbmhlcml0IHRoaXMgY2xhc3MKK2NsYXNzIFJlY2lwZUluZm9Db21tb24ob2JqZWN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBsaXN0dmFyKGNscywgdmFyLCBtZXRhZGF0YSk6CisgICAgICAgIHJldHVybiBjbHMuZ2V0dmFyKHZhciwgbWV0YWRhdGEpLnNwbGl0KCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBpbnR2YXIoY2xzLCB2YXIsIG1ldGFkYXRhKToKKyAgICAgICAgcmV0dXJuIGludChjbHMuZ2V0dmFyKHZhciwgbWV0YWRhdGEpIG9yIDApCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGVwdmFyKGNscywgdmFyLCBtZXRhZGF0YSk6CisgICAgICAgIHJldHVybiBiYi51dGlscy5leHBsb2RlX2RlcHMoY2xzLmdldHZhcih2YXIsIG1ldGFkYXRhKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwa2d2YXIoY2xzLCB2YXIsIHBhY2thZ2VzLCBtZXRhZGF0YSk6CisgICAgICAgIHJldHVybiBkaWN0KChwa2csIGNscy5kZXB2YXIoIiVzXyVzIiAlICh2YXIsIHBrZyksIG1ldGFkYXRhKSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBwYWNrYWdlcykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0YXNrdmFyKGNscywgdmFyLCB0YXNrcywgbWV0YWRhdGEpOgorICAgICAgICByZXR1cm4gZGljdCgodGFzaywgY2xzLmdldHZhcigiJXNfdGFzay0lcyIgJSAodmFyLCB0YXNrKSwgbWV0YWRhdGEpKQorICAgICAgICAgICAgICAgICAgICBmb3IgdGFzayBpbiB0YXNrcykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmbGFnbGlzdChjbHMsIGZsYWcsIHZhcmxpc3QsIG1ldGFkYXRhLCBzcXVhc2g9RmFsc2UpOgorICAgICAgICBvdXRfZGljdCA9IGRpY3QoKHZhciwgbWV0YWRhdGEuZ2V0VmFyRmxhZyh2YXIsIGZsYWcsIFRydWUpKQorICAgICAgICAgICAgICAgICAgICBmb3IgdmFyIGluIHZhcmxpc3QpCisgICAgICAgIGlmIHNxdWFzaDoKKyAgICAgICAgICAgIHJldHVybiBkaWN0KChrLHYpIGZvciAoayx2KSBpbiBvdXRfZGljdC5pdGVyaXRlbXMoKSBpZiB2KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIG91dF9kaWN0CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZ2V0dmFyKGNscywgdmFyLCBtZXRhZGF0YSk6CisgICAgICAgIHJldHVybiBtZXRhZGF0YS5nZXRWYXIodmFyLCBUcnVlKSBvciAnJworCisKK2NsYXNzIENvcmVSZWNpcGVJbmZvKFJlY2lwZUluZm9Db21tb24pOgorICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBjYWNoZWZpbGUgPSAiYmJfY2FjaGUuZGF0IiAgIAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBtZXRhZGF0YSk6ICAgICAgCisgICAgICAgIHNlbGYuZmlsZV9kZXBlbmRzID0gbWV0YWRhdGEuZ2V0VmFyKCdfX2RlcGVuZHMnLCBGYWxzZSkKKyAgICAgICAgc2VsZi50aW1lc3RhbXAgPSBiYi5wYXJzZS5jYWNoZWRfbXRpbWUoZmlsZW5hbWUpCisgICAgICAgIHNlbGYudmFyaWFudHMgPSBzZWxmLmxpc3R2YXIoJ19fVkFSSUFOVFMnLCBtZXRhZGF0YSkgKyBbJyddCisgICAgICAgIHNlbGYuYXBwZW5kcyA9IHNlbGYubGlzdHZhcignX19CQkFQUEVORCcsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLm5vY2FjaGUgPSBzZWxmLmdldHZhcignX19CQl9ET05UX0NBQ0hFJywgbWV0YWRhdGEpCisKKyAgICAgICAgc2VsZi5za2lwcmVhc29uID0gc2VsZi5nZXR2YXIoJ19fU0tJUFBFRCcsIG1ldGFkYXRhKQorICAgICAgICBpZiBzZWxmLnNraXByZWFzb246CisgICAgICAgICAgICBzZWxmLnBuID0gc2VsZi5nZXR2YXIoJ1BOJywgbWV0YWRhdGEpIG9yIGJiLnBhcnNlLkJCSGFuZGxlci52YXJzX2Zyb21fZmlsZShmaWxlbmFtZSxtZXRhZGF0YSlbMF0KKyAgICAgICAgICAgIHNlbGYuc2tpcHBlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYucHJvdmlkZXMgID0gc2VsZi5kZXB2YXIoJ1BST1ZJREVTJywgbWV0YWRhdGEpCisgICAgICAgICAgICBzZWxmLnJwcm92aWRlcyA9IHNlbGYuZGVwdmFyKCdSUFJPVklERVMnLCBtZXRhZGF0YSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYudGFza3MgPSBtZXRhZGF0YS5nZXRWYXIoJ19fQkJUQVNLUycsIEZhbHNlKQorCisgICAgICAgIHNlbGYucG4gPSBzZWxmLmdldHZhcignUE4nLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5wYWNrYWdlcyA9IHNlbGYubGlzdHZhcignUEFDS0FHRVMnLCBtZXRhZGF0YSkKKyAgICAgICAgaWYgbm90IHNlbGYucG4gaW4gc2VsZi5wYWNrYWdlczoKKyAgICAgICAgICAgIHNlbGYucGFja2FnZXMuYXBwZW5kKHNlbGYucG4pCisKKyAgICAgICAgc2VsZi5iYXNldGFza2hhc2hlcyA9IHNlbGYudGFza3ZhcignQkJfQkFTRUhBU0gnLCBzZWxmLnRhc2tzLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5oYXNoZmlsZW5hbWUgPSBzZWxmLmdldHZhcignQkJfSEFTSEZJTEVOQU1FJywgbWV0YWRhdGEpCisKKyAgICAgICAgc2VsZi50YXNrX2RlcHMgPSBtZXRhZGF0YS5nZXRWYXIoJ190YXNrX2RlcHMnLCBGYWxzZSkgb3Igeyd0YXNrcyc6IFtdLCAncGFyZW50cyc6IHt9fQorCisgICAgICAgIHNlbGYuc2tpcHBlZCA9IEZhbHNlCisgICAgICAgIHNlbGYucGUgPSBzZWxmLmdldHZhcignUEUnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5wdiA9IHNlbGYuZ2V0dmFyKCdQVicsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnByID0gc2VsZi5nZXR2YXIoJ1BSJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuZGVmYXVsdHByZWYgPSBzZWxmLmludHZhcignREVGQVVMVF9QUkVGRVJFTkNFJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYubm90X3dvcmxkID0gc2VsZi5nZXR2YXIoJ0VYQ0xVREVfRlJPTV9XT1JMRCcsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnN0YW1wID0gc2VsZi5nZXR2YXIoJ1NUQU1QJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuc3RhbXBjbGVhbiA9IHNlbGYuZ2V0dmFyKCdTVEFNUENMRUFOJywgbWV0YWRhdGEpICAgICAgICAKKyAgICAgICAgc2VsZi5zdGFtcF9iYXNlID0gc2VsZi5mbGFnbGlzdCgnc3RhbXAtYmFzZScsIHNlbGYudGFza3MsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnN0YW1wX2Jhc2VfY2xlYW4gPSBzZWxmLmZsYWdsaXN0KCdzdGFtcC1iYXNlLWNsZWFuJywgc2VsZi50YXNrcywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuc3RhbXBfZXh0cmFpbmZvID0gc2VsZi5mbGFnbGlzdCgnc3RhbXAtZXh0cmEtaW5mbycsIHNlbGYudGFza3MsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLmZpbGVfY2hlY2tzdW1zID0gc2VsZi5mbGFnbGlzdCgnZmlsZS1jaGVja3N1bXMnLCBzZWxmLnRhc2tzLCBtZXRhZGF0YSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5wYWNrYWdlc19keW5hbWljID0gc2VsZi5saXN0dmFyKCdQQUNLQUdFU19EWU5BTUlDJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuZGVwZW5kcyAgICAgICAgICA9IHNlbGYuZGVwdmFyKCdERVBFTkRTJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYucHJvdmlkZXMgICAgICAgICA9IHNlbGYuZGVwdmFyKCdQUk9WSURFUycsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnJkZXBlbmRzICAgICAgICAgPSBzZWxmLmRlcHZhcignUkRFUEVORFMnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5ycHJvdmlkZXMgICAgICAgID0gc2VsZi5kZXB2YXIoJ1JQUk9WSURFUycsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnJyZWNvbW1lbmRzICAgICAgPSBzZWxmLmRlcHZhcignUlJFQ09NTUVORFMnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5ycHJvdmlkZXNfcGtnICAgID0gc2VsZi5wa2d2YXIoJ1JQUk9WSURFUycsIHNlbGYucGFja2FnZXMsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnJkZXBlbmRzX3BrZyAgICAgPSBzZWxmLnBrZ3ZhcignUkRFUEVORFMnLCBzZWxmLnBhY2thZ2VzLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5ycmVjb21tZW5kc19wa2cgID0gc2VsZi5wa2d2YXIoJ1JSRUNPTU1FTkRTJywgc2VsZi5wYWNrYWdlcywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuaW5oZXJpdHMgICAgICAgICA9IHNlbGYuZ2V0dmFyKCdfX2luaGVyaXRfY2FjaGUnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5mYWtlcm9vdGVudiAgICAgID0gc2VsZi5nZXR2YXIoJ0ZBS0VST09URU5WJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuZmFrZXJvb3RkaXJzICAgICA9IHNlbGYuZ2V0dmFyKCdGQUtFUk9PVERJUlMnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5mYWtlcm9vdG5vZW52ICAgID0gc2VsZi5nZXR2YXIoJ0ZBS0VST09UTk9FTlYnLCBtZXRhZGF0YSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBpbml0X2NhY2hlRGF0YShjbHMsIGNhY2hlZGF0YSk6CisgICAgICAgICMgQ2FjaGVEYXRhIGluIENvcmUgUmVjaXBlSW5mbyBDbGFzcworICAgICAgICBjYWNoZWRhdGEudGFza19kZXBzID0ge30KKyAgICAgICAgY2FjaGVkYXRhLnBrZ19mbiA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5wa2dfcG4gPSBkZWZhdWx0ZGljdChsaXN0KQorICAgICAgICBjYWNoZWRhdGEucGtnX3BlcHZwciA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5wa2dfZHAgPSB7fQorCisgICAgICAgIGNhY2hlZGF0YS5zdGFtcCA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5zdGFtcGNsZWFuID0ge30KKyAgICAgICAgY2FjaGVkYXRhLnN0YW1wX2Jhc2UgPSB7fQorICAgICAgICBjYWNoZWRhdGEuc3RhbXBfYmFzZV9jbGVhbiA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5zdGFtcF9leHRyYWluZm8gPSB7fQorICAgICAgICBjYWNoZWRhdGEuZmlsZV9jaGVja3N1bXMgPSB7fQorICAgICAgICBjYWNoZWRhdGEuZm5fcHJvdmlkZXMgPSB7fQorICAgICAgICBjYWNoZWRhdGEucG5fcHJvdmlkZXMgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgICAgICBjYWNoZWRhdGEuYWxsX2RlcGVuZHMgPSBbXQorCisgICAgICAgIGNhY2hlZGF0YS5kZXBzID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICAgICAgY2FjaGVkYXRhLnBhY2thZ2VzID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICAgICAgY2FjaGVkYXRhLnByb3ZpZGVycyA9IGRlZmF1bHRkaWN0KGxpc3QpCisgICAgICAgIGNhY2hlZGF0YS5ycHJvdmlkZXJzID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICAgICAgY2FjaGVkYXRhLnBhY2thZ2VzX2R5bmFtaWMgPSBkZWZhdWx0ZGljdChsaXN0KQorCisgICAgICAgIGNhY2hlZGF0YS5ydW5kZXBzID0gZGVmYXVsdGRpY3QobGFtYmRhOiBkZWZhdWx0ZGljdChsaXN0KSkKKyAgICAgICAgY2FjaGVkYXRhLnJ1bnJlY3MgPSBkZWZhdWx0ZGljdChsYW1iZGE6IGRlZmF1bHRkaWN0KGxpc3QpKQorICAgICAgICBjYWNoZWRhdGEucG9zc2libGVfd29ybGQgPSBbXQorICAgICAgICBjYWNoZWRhdGEudW5pdmVyc2VfdGFyZ2V0ID0gW10KKyAgICAgICAgY2FjaGVkYXRhLmhhc2hmbiA9IHt9CisKKyAgICAgICAgY2FjaGVkYXRhLmJhc2V0YXNraGFzaCA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5pbmhlcml0cyA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5mYWtlcm9vdGVudiA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5mYWtlcm9vdG5vZW52ID0ge30KKyAgICAgICAgY2FjaGVkYXRhLmZha2Vyb290ZGlycyA9IHt9CisKKyAgICBkZWYgYWRkX2NhY2hlRGF0YShzZWxmLCBjYWNoZWRhdGEsIGZuKToKKyAgICAgICAgY2FjaGVkYXRhLnRhc2tfZGVwc1tmbl0gPSBzZWxmLnRhc2tfZGVwcworICAgICAgICBjYWNoZWRhdGEucGtnX2ZuW2ZuXSA9IHNlbGYucG4KKyAgICAgICAgY2FjaGVkYXRhLnBrZ19wbltzZWxmLnBuXS5hcHBlbmQoZm4pCisgICAgICAgIGNhY2hlZGF0YS5wa2dfcGVwdnByW2ZuXSA9IChzZWxmLnBlLCBzZWxmLnB2LCBzZWxmLnByKQorICAgICAgICBjYWNoZWRhdGEucGtnX2RwW2ZuXSA9IHNlbGYuZGVmYXVsdHByZWYKKyAgICAgICAgY2FjaGVkYXRhLnN0YW1wW2ZuXSA9IHNlbGYuc3RhbXAKKyAgICAgICAgY2FjaGVkYXRhLnN0YW1wY2xlYW5bZm5dID0gc2VsZi5zdGFtcGNsZWFuCisgICAgICAgIGNhY2hlZGF0YS5zdGFtcF9iYXNlW2ZuXSA9IHNlbGYuc3RhbXBfYmFzZQorICAgICAgICBjYWNoZWRhdGEuc3RhbXBfYmFzZV9jbGVhbltmbl0gPSBzZWxmLnN0YW1wX2Jhc2VfY2xlYW4KKyAgICAgICAgY2FjaGVkYXRhLnN0YW1wX2V4dHJhaW5mb1tmbl0gPSBzZWxmLnN0YW1wX2V4dHJhaW5mbworICAgICAgICBjYWNoZWRhdGEuZmlsZV9jaGVja3N1bXNbZm5dID0gc2VsZi5maWxlX2NoZWNrc3VtcworCisgICAgICAgIHByb3ZpZGVzID0gW3NlbGYucG5dCisgICAgICAgIGZvciBwcm92aWRlIGluIHNlbGYucHJvdmlkZXM6CisgICAgICAgICAgICBpZiBwcm92aWRlIG5vdCBpbiBwcm92aWRlczoKKyAgICAgICAgICAgICAgICBwcm92aWRlcy5hcHBlbmQocHJvdmlkZSkKKyAgICAgICAgY2FjaGVkYXRhLmZuX3Byb3ZpZGVzW2ZuXSA9IHByb3ZpZGVzCisKKyAgICAgICAgZm9yIHByb3ZpZGUgaW4gcHJvdmlkZXM6CisgICAgICAgICAgICBjYWNoZWRhdGEucHJvdmlkZXJzW3Byb3ZpZGVdLmFwcGVuZChmbikKKyAgICAgICAgICAgIGlmIHByb3ZpZGUgbm90IGluIGNhY2hlZGF0YS5wbl9wcm92aWRlc1tzZWxmLnBuXToKKyAgICAgICAgICAgICAgICBjYWNoZWRhdGEucG5fcHJvdmlkZXNbc2VsZi5wbl0uYXBwZW5kKHByb3ZpZGUpCisKKyAgICAgICAgZm9yIGRlcCBpbiBzZWxmLmRlcGVuZHM6CisgICAgICAgICAgICBpZiBkZXAgbm90IGluIGNhY2hlZGF0YS5kZXBzW2ZuXToKKyAgICAgICAgICAgICAgICBjYWNoZWRhdGEuZGVwc1tmbl0uYXBwZW5kKGRlcCkKKyAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gY2FjaGVkYXRhLmFsbF9kZXBlbmRzOgorICAgICAgICAgICAgICAgIGNhY2hlZGF0YS5hbGxfZGVwZW5kcy5hcHBlbmQoZGVwKQorCisgICAgICAgIHJwcm92aWRlcyA9IHNlbGYucnByb3ZpZGVzCisgICAgICAgIGZvciBwYWNrYWdlIGluIHNlbGYucGFja2FnZXM6CisgICAgICAgICAgICBjYWNoZWRhdGEucGFja2FnZXNbcGFja2FnZV0uYXBwZW5kKGZuKQorICAgICAgICAgICAgcnByb3ZpZGVzICs9IHNlbGYucnByb3ZpZGVzX3BrZ1twYWNrYWdlXQorCisgICAgICAgIGZvciBycHJvdmlkZSBpbiBycHJvdmlkZXM6CisgICAgICAgICAgICBjYWNoZWRhdGEucnByb3ZpZGVyc1tycHJvdmlkZV0uYXBwZW5kKGZuKQorCisgICAgICAgIGZvciBwYWNrYWdlIGluIHNlbGYucGFja2FnZXNfZHluYW1pYzoKKyAgICAgICAgICAgIGNhY2hlZGF0YS5wYWNrYWdlc19keW5hbWljW3BhY2thZ2VdLmFwcGVuZChmbikKKworICAgICAgICAjIEJ1aWxkIGhhc2ggb2YgcnVudGltZSBkZXBlbmRzIGFuZCByZWNvbW1lbmRzCisgICAgICAgIGZvciBwYWNrYWdlIGluIHNlbGYucGFja2FnZXMgKyBbc2VsZi5wbl06CisgICAgICAgICAgICBjYWNoZWRhdGEucnVuZGVwc1tmbl1bcGFja2FnZV0gPSBsaXN0KHNlbGYucmRlcGVuZHMpICsgc2VsZi5yZGVwZW5kc19wa2dbcGFja2FnZV0KKyAgICAgICAgICAgIGNhY2hlZGF0YS5ydW5yZWNzW2ZuXVtwYWNrYWdlXSA9IGxpc3Qoc2VsZi5ycmVjb21tZW5kcykgKyBzZWxmLnJyZWNvbW1lbmRzX3BrZ1twYWNrYWdlXQorCisgICAgICAgICMgQ29sbGVjdCBmaWxlcyB3ZSBtYXkgbmVlZCBmb3IgcG9zc2libGUgd29ybGQtZGVwCisgICAgICAgICMgY2FsY3VsYXRpb25zCisgICAgICAgIGlmIHNlbGYubm90X3dvcmxkOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJFWENMVURFIEZST00gV09STEQ6ICVzIiwgZm4pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjYWNoZWRhdGEucG9zc2libGVfd29ybGQuYXBwZW5kKGZuKQorCisgICAgICAgICMgY3JlYXRlIGEgY29sbGVjdGlvbiBvZiBhbGwgdGFyZ2V0cyBmb3Igc2FuaXR5IGNoZWNraW5nCisgICAgICAgICMgdGFza3MsIHN1Y2ggYXMgdXBzdHJlYW0gdmVyc2lvbnMsIGxpY2Vuc2UsIGFuZCB0b29scyBmb3IKKyAgICAgICAgIyB0YXNrIGFuZCBpbWFnZSBjcmVhdGlvbi4KKyAgICAgICAgY2FjaGVkYXRhLnVuaXZlcnNlX3RhcmdldC5hcHBlbmQoc2VsZi5wbikKKworICAgICAgICBjYWNoZWRhdGEuaGFzaGZuW2ZuXSA9IHNlbGYuaGFzaGZpbGVuYW1lCisgICAgICAgIGZvciB0YXNrLCB0YXNraGFzaCBpbiBzZWxmLmJhc2V0YXNraGFzaGVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWRlbnRpZmllciA9ICclcy4lcycgJSAoZm4sIHRhc2spCisgICAgICAgICAgICBjYWNoZWRhdGEuYmFzZXRhc2toYXNoW2lkZW50aWZpZXJdID0gdGFza2hhc2gKKworICAgICAgICBjYWNoZWRhdGEuaW5oZXJpdHNbZm5dID0gc2VsZi5pbmhlcml0cworICAgICAgICBjYWNoZWRhdGEuZmFrZXJvb3RlbnZbZm5dID0gc2VsZi5mYWtlcm9vdGVudgorICAgICAgICBjYWNoZWRhdGEuZmFrZXJvb3Rub2Vudltmbl0gPSBzZWxmLmZha2Vyb290bm9lbnYKKyAgICAgICAgY2FjaGVkYXRhLmZha2Vyb290ZGlyc1tmbl0gPSBzZWxmLmZha2Vyb290ZGlycworCisKKworY2xhc3MgQ2FjaGUob2JqZWN0KToKKyAgICAiIiIKKyAgICBCaXRCYWtlIENhY2hlIGltcGxlbWVudGF0aW9uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSwgZGF0YV9oYXNoLCBjYWNoZXNfYXJyYXkpOgorICAgICAgICAjIFBhc3MgY2FjaGVzX2FycmF5IGluZm9ybWF0aW9uIGludG8gQ2FjaGUgQ29uc3RydWN0b3IKKyAgICAgICAgIyBJdCB3aWxsIGJlIHVzZWQgbGF0ZXIgZm9yIGRlY2lkaW5nIHdoZXRoZXIgd2UgCisgICAgICAgICMgbmVlZCBleHRyYSBjYWNoZSBmaWxlIGR1bXAvbG9hZCBzdXBwb3J0IAorICAgICAgICBzZWxmLmNhY2hlc19hcnJheSA9IGNhY2hlc19hcnJheQorICAgICAgICBzZWxmLmNhY2hlZGlyID0gZGF0YS5nZXRWYXIoIkNBQ0hFIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5jbGVhbiA9IHNldCgpCisgICAgICAgIHNlbGYuY2hlY2tlZCA9IHNldCgpCisgICAgICAgIHNlbGYuZGVwZW5kc19jYWNoZSA9IHt9CisgICAgICAgIHNlbGYuZGF0YSA9IE5vbmUKKyAgICAgICAgc2VsZi5kYXRhX2ZuID0gTm9uZQorICAgICAgICBzZWxmLmNhY2hlY2xlYW4gPSBUcnVlCisgICAgICAgIHNlbGYuZGF0YV9oYXNoID0gZGF0YV9oYXNoCisKKyAgICAgICAgaWYgc2VsZi5jYWNoZWRpciBpbiBbTm9uZSwgJyddOgorICAgICAgICAgICAgc2VsZi5oYXNfY2FjaGUgPSBGYWxzZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIk5vdCB1c2luZyBhIGNhY2hlLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAiU2V0IENBQ0hFID0gPGRpcmVjdG9yeT4gdG8gZW5hYmxlLiIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmhhc19jYWNoZSA9IFRydWUKKyAgICAgICAgc2VsZi5jYWNoZWZpbGUgPSBnZXRDYWNoZUZpbGUoc2VsZi5jYWNoZWRpciwgImJiX2NhY2hlLmRhdCIsIHNlbGYuZGF0YV9oYXNoKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVXNpbmcgY2FjaGUgaW4gJyVzJyIsIHNlbGYuY2FjaGVkaXIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmNhY2hlZGlyKQorCisgICAgICAgIGNhY2hlX29rID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLmNhY2hlc19hcnJheToKKyAgICAgICAgICAgIGZvciBjYWNoZV9jbGFzcyBpbiBzZWxmLmNhY2hlc19hcnJheToKKyAgICAgICAgICAgICAgICBpZiB0eXBlKGNhY2hlX2NsYXNzKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKGNhY2hlX2NsYXNzLCBSZWNpcGVJbmZvQ29tbW9uKToKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVmaWxlID0gZ2V0Q2FjaGVGaWxlKHNlbGYuY2FjaGVkaXIsIGNhY2hlX2NsYXNzLmNhY2hlZmlsZSwgc2VsZi5kYXRhX2hhc2gpCisgICAgICAgICAgICAgICAgICAgIGNhY2hlX29rID0gY2FjaGVfb2sgYW5kIG9zLnBhdGguZXhpc3RzKGNhY2hlZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVfY2xhc3MuaW5pdF9jYWNoZURhdGEoc2VsZikKKyAgICAgICAgaWYgY2FjaGVfb2s6CisgICAgICAgICAgICBzZWxmLmxvYWRfY2FjaGVmaWxlKCkKKyAgICAgICAgZWxpZiBvcy5wYXRoLmlzZmlsZShzZWxmLmNhY2hlZmlsZSk6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiT3V0IG9mIGRhdGUgY2FjaGUgZm91bmQsIHJlYnVpbGRpbmcuLi4iKQorCisgICAgZGVmIGxvYWRfY2FjaGVmaWxlKHNlbGYpOgorICAgICAgICAjIEZpcnN0bHksIHVzaW5nIGNvcmUgY2FjaGUgZmlsZSBpbmZvcm1hdGlvbiBmb3IKKyAgICAgICAgIyB2YWxpZCBjaGVja2luZworICAgICAgICB3aXRoIG9wZW4oc2VsZi5jYWNoZWZpbGUsICJyYiIpIGFzIGNhY2hlZmlsZToKKyAgICAgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuVW5waWNrbGVyKGNhY2hlZmlsZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjYWNoZV92ZXIgPSBwaWNrbGVkLmxvYWQoKQorICAgICAgICAgICAgICAgIGJpdGJha2VfdmVyID0gcGlja2xlZC5sb2FkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0ludmFsaWQgY2FjaGUsIHJlYnVpbGRpbmcuLi4nKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBpZiBjYWNoZV92ZXIgIT0gX19jYWNoZV92ZXJzaW9uX186CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0NhY2hlIHZlcnNpb24gbWlzbWF0Y2gsIHJlYnVpbGRpbmcuLi4nKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxpZiBiaXRiYWtlX3ZlciAhPSBiYi5fX3ZlcnNpb25fXzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnQml0YmFrZSB2ZXJzaW9uIG1pc21hdGNoLCByZWJ1aWxkaW5nLi4uJykKKyAgICAgICAgICAgICAgICByZXR1cm4KKworCisgICAgICAgIGNhY2hlc2l6ZSA9IDAKKyAgICAgICAgcHJldmlvdXNfcHJvZ3Jlc3MgPSAwCisgICAgICAgIHByZXZpb3VzX3BlcmNlbnQgPSAwCisKKyAgICAgICAgIyBDYWxjdWxhdGUgdGhlIGNvcnJlY3QgY2FjaGVzaXplIG9mIGFsbCB0aG9zZSBjYWNoZSBmaWxlcworICAgICAgICBmb3IgY2FjaGVfY2xhc3MgaW4gc2VsZi5jYWNoZXNfYXJyYXk6CisgICAgICAgICAgICBpZiB0eXBlKGNhY2hlX2NsYXNzKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKGNhY2hlX2NsYXNzLCBSZWNpcGVJbmZvQ29tbW9uKToKKyAgICAgICAgICAgICAgICBjYWNoZWZpbGUgPSBnZXRDYWNoZUZpbGUoc2VsZi5jYWNoZWRpciwgY2FjaGVfY2xhc3MuY2FjaGVmaWxlLCBzZWxmLmRhdGFfaGFzaCkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY2FjaGVmaWxlLCAicmIiKSBhcyBjYWNoZWZpbGU6CisgICAgICAgICAgICAgICAgICAgIGNhY2hlc2l6ZSArPSBvcy5mc3RhdChjYWNoZWZpbGUuZmlsZW5vKCkpLnN0X3NpemUKKworICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkNhY2hlTG9hZFN0YXJ0ZWQoY2FjaGVzaXplKSwgc2VsZi5kYXRhKQorICAgICAgICAKKyAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgaWYgdHlwZShjYWNoZV9jbGFzcykgaXMgdHlwZSBhbmQgaXNzdWJjbGFzcyhjYWNoZV9jbGFzcywgUmVjaXBlSW5mb0NvbW1vbik6CisgICAgICAgICAgICAgICAgY2FjaGVmaWxlID0gZ2V0Q2FjaGVGaWxlKHNlbGYuY2FjaGVkaXIsIGNhY2hlX2NsYXNzLmNhY2hlZmlsZSwgc2VsZi5kYXRhX2hhc2gpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNhY2hlZmlsZSwgInJiIikgYXMgY2FjaGVmaWxlOgorICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gcGlja2xlLlVucGlja2xlcihjYWNoZWZpbGUpICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgY2FjaGVmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHBpY2tsZWQubG9hZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwaWNrbGVkLmxvYWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZXBlbmRzX2NhY2hlLmhhc19rZXkoa2V5KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlcGVuZHNfY2FjaGVba2V5XS5hcHBlbmQodmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVwZW5kc19jYWNoZVtrZXldID0gW3ZhbHVlXQorICAgICAgICAgICAgICAgICAgICAgICAgIyBvbmx5IGZpcmUgZXZlbnRzIG9uIGV2ZW4gcGVyY2VudGFnZSBib3VuZGFyaWVzCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3Byb2dyZXNzID0gY2FjaGVmaWxlLnRlbGwoKSArIHByZXZpb3VzX3Byb2dyZXNzCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3BlcmNlbnQgPSAxMDAgKiBjdXJyZW50X3Byb2dyZXNzIC8gY2FjaGVzaXplCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50X3BlcmNlbnQgPiBwcmV2aW91c19wZXJjZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzX3BlcmNlbnQgPSBjdXJyZW50X3BlcmNlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkNhY2hlTG9hZFByb2dyZXNzKGN1cnJlbnRfcHJvZ3Jlc3MsIGNhY2hlc2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRhdGEpCisKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfcHJvZ3Jlc3MgKz0gY3VycmVudF9wcm9ncmVzcworCisgICAgICAgICMgTm90ZTogZGVwZW5kcyBjYWNoZSBudW1iZXIgaXMgY29ycmVzcG9uZGluZyB0byB0aGUgcGFyc2luZyBmaWxlIG51bWJlcnMuCisgICAgICAgICMgVGhlIHNhbWUgZmlsZSBoYXMgc2V2ZXJhbCBjYWNoZXMsIHN0aWxsIHJlZ2FyZGVkIGFzIG9uZSBpdGVtIGluIHRoZSBjYWNoZQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkNhY2hlTG9hZENvbXBsZXRlZChjYWNoZXNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihzZWxmLmRlcGVuZHNfY2FjaGUpKSwKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRhdGEpCisKKyAgICAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHZpcnR1YWxmbjJyZWFsZm4odmlydHVhbGZuKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbnZlcnQgYSB2aXJ0dWFsIGZpbGUgbmFtZSB0byBhIHJlYWwgb25lICsgdGhlIGFzc29jaWF0ZWQgc3ViY2xhc3Mga2V5d29yZAorICAgICAgICAiIiIKKworICAgICAgICBmbiA9IHZpcnR1YWxmbgorICAgICAgICBjbHMgPSAiIgorICAgICAgICBpZiB2aXJ0dWFsZm4uc3RhcnRzd2l0aCgndmlydHVhbDonKToKKyAgICAgICAgICAgIGVsZW1zID0gdmlydHVhbGZuLnNwbGl0KCc6JykKKyAgICAgICAgICAgIGNscyA9ICI6Ii5qb2luKGVsZW1zWzE6LTFdKQorICAgICAgICAgICAgZm4gPSBlbGVtc1stMV0KKyAgICAgICAgcmV0dXJuIChmbiwgY2xzKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiByZWFsZm4ydmlydHVhbChyZWFsZm4sIGNscyk6CisgICAgICAgICIiIgorICAgICAgICBDb252ZXJ0IGEgcmVhbCBmaWxlbmFtZSArIHRoZSBhc3NvY2lhdGVkIHN1YmNsYXNzIGtleXdvcmQgdG8gYSB2aXJ0dWFsIGZpbGVuYW1lCisgICAgICAgICIiIgorICAgICAgICBpZiBjbHMgPT0gIiI6CisgICAgICAgICAgICByZXR1cm4gcmVhbGZuCisgICAgICAgIHJldHVybiAidmlydHVhbDoiICsgY2xzICsgIjoiICsgcmVhbGZuCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbG9hZERhdGFGdWxsKGNscywgdmlydHVhbGZuLCBhcHBlbmRzLCBjZmdEYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIGNvbXBsZXRlIHNldCBvZiBkYXRhIGZvciBmbi4KKyAgICAgICAgVG8gZG8gdGhpcywgd2UgbmVlZCB0byBwYXJzZSB0aGUgZmlsZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgKGZuLCB2aXJ0dWFsKSA9IGNscy52aXJ0dWFsZm4ycmVhbGZuKHZpcnR1YWxmbikKKworICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlBhcnNpbmcgJXMgKGZ1bGwpIiwgZm4pCisKKyAgICAgICAgY2ZnRGF0YS5zZXRWYXIoIl9fT05MWUZJTkFMSVNFIiwgdmlydHVhbCBvciAiZGVmYXVsdCIpCisgICAgICAgIGJiX2RhdGEgPSBjbHMubG9hZF9iYmZpbGUoZm4sIGFwcGVuZHMsIGNmZ0RhdGEpCisgICAgICAgIHJldHVybiBiYl9kYXRhW3ZpcnR1YWxdCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcGFyc2UoY2xzLCBmaWxlbmFtZSwgYXBwZW5kcywgY29uZmlnZGF0YSwgY2FjaGVzX2FycmF5KToKKyAgICAgICAgIiIiUGFyc2UgdGhlIHNwZWNpZmllZCBmaWxlbmFtZSwgcmV0dXJuaW5nIHRoZSByZWNpcGUgaW5mb3JtYXRpb24iIiIKKyAgICAgICAgaW5mb3MgPSBbXQorICAgICAgICBkYXRhc3RvcmVzID0gY2xzLmxvYWRfYmJmaWxlKGZpbGVuYW1lLCBhcHBlbmRzLCBjb25maWdkYXRhKQorICAgICAgICBkZXBlbmRzID0gW10KKyAgICAgICAgZm9yIHZhcmlhbnQsIGRhdGEgaW4gc29ydGVkKGRhdGFzdG9yZXMuaXRlcml0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9bGFtYmRhIGk6IGlbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlPVRydWUpOgorICAgICAgICAgICAgdmlydHVhbGZuID0gY2xzLnJlYWxmbjJ2aXJ0dWFsKGZpbGVuYW1lLCB2YXJpYW50KQorICAgICAgICAgICAgZGVwZW5kcyA9IGRlcGVuZHMgKyAoZGF0YS5nZXRWYXIoIl9fZGVwZW5kcyIsIEZhbHNlKSBvciBbXSkKKyAgICAgICAgICAgIGlmIGRlcGVuZHMgYW5kIG5vdCB2YXJpYW50OgorICAgICAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJfX2RlcGVuZHMiLCBkZXBlbmRzKQorCisgICAgICAgICAgICBpbmZvX2FycmF5ID0gW10KKyAgICAgICAgICAgIGZvciBjYWNoZV9jbGFzcyBpbiBjYWNoZXNfYXJyYXk6CisgICAgICAgICAgICAgICAgaWYgdHlwZShjYWNoZV9jbGFzcykgaXMgdHlwZSBhbmQgaXNzdWJjbGFzcyhjYWNoZV9jbGFzcywgUmVjaXBlSW5mb0NvbW1vbik6CisgICAgICAgICAgICAgICAgICAgIGluZm8gPSBjYWNoZV9jbGFzcyhmaWxlbmFtZSwgZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgaW5mb19hcnJheS5hcHBlbmQoaW5mbykKKyAgICAgICAgICAgIGluZm9zLmFwcGVuZCgodmlydHVhbGZuLCBpbmZvX2FycmF5KSkKKworICAgICAgICByZXR1cm4gaW5mb3MKKworICAgIGRlZiBsb2FkKHNlbGYsIGZpbGVuYW1lLCBhcHBlbmRzLCBjb25maWdkYXRhKToKKyAgICAgICAgIiIiT2J0YWluIHRoZSByZWNpcGUgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgZmlsZW5hbWUsCisgICAgICAgIHVzaW5nIGNhY2hlZCB2YWx1ZXMgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgcGFyc2luZy4KKworICAgICAgICBOb3RlIHRoYXQgaWYgaXQgZG9lcyBwYXJzZSB0byBvYnRhaW4gdGhlIGluZm8sIGl0IHdpbGwgbm90CisgICAgICAgIGF1dG9tYXRpY2FsbHkgYWRkIHRoZSBpbmZvcm1hdGlvbiB0byB0aGUgY2FjaGUgb3IgdG8geW91cgorICAgICAgICBDYWNoZURhdGEuICBVc2UgdGhlIGFkZCBvciBhZGRfaW5mbyBtZXRob2QgdG8gZG8gc28gYWZ0ZXIKKyAgICAgICAgcnVubmluZyB0aGlzLCBvciB1c2UgbG9hZERhdGEgaW5zdGVhZC4iIiIKKyAgICAgICAgY2FjaGVkID0gc2VsZi5jYWNoZVZhbGlkKGZpbGVuYW1lLCBhcHBlbmRzKQorICAgICAgICBpZiBjYWNoZWQ6CisgICAgICAgICAgICBpbmZvcyA9IFtdCisgICAgICAgICAgICAjIGluZm9fYXJyYXkgaXRlbSBpcyBhIGxpc3Qgb2YgW0NvcmVSZWNpcGVJbmZvLCBYWFhSZWNpcGVJbmZvXQorICAgICAgICAgICAgaW5mb19hcnJheSA9IHNlbGYuZGVwZW5kc19jYWNoZVtmaWxlbmFtZV0KKyAgICAgICAgICAgIGZvciB2YXJpYW50IGluIGluZm9fYXJyYXlbMF0udmFyaWFudHM6CisgICAgICAgICAgICAgICAgdmlydHVhbGZuID0gc2VsZi5yZWFsZm4ydmlydHVhbChmaWxlbmFtZSwgdmFyaWFudCkKKyAgICAgICAgICAgICAgICBpbmZvcy5hcHBlbmQoKHZpcnR1YWxmbiwgc2VsZi5kZXBlbmRzX2NhY2hlW3ZpcnR1YWxmbl0pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJQYXJzaW5nICVzIiwgZmlsZW5hbWUpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJzZShmaWxlbmFtZSwgYXBwZW5kcywgY29uZmlnZGF0YSwgc2VsZi5jYWNoZXNfYXJyYXkpCisKKyAgICAgICAgcmV0dXJuIGNhY2hlZCwgaW5mb3MKKworICAgIGRlZiBsb2FkRGF0YShzZWxmLCBmbiwgYXBwZW5kcywgY2ZnRGF0YSwgY2FjaGVEYXRhKToKKyAgICAgICAgIiIiTG9hZCB0aGUgcmVjaXBlIGluZm8gZm9yIHRoZSBzcGVjaWZpZWQgZmlsZW5hbWUsCisgICAgICAgIHBhcnNpbmcgYW5kIGFkZGluZyB0byB0aGUgY2FjaGUgaWYgbmVjZXNzYXJ5LCBhbmQgYWRkaW5nCisgICAgICAgIHRoZSByZWNpcGUgaW5mb3JtYXRpb24gdG8gdGhlIHN1cHBsaWVkIENhY2hlRGF0YSBpbnN0YW5jZS4iIiIKKyAgICAgICAgc2tpcHBlZCwgdmlydHVhbHMgPSAwLCAwCisKKyAgICAgICAgY2FjaGVkLCBpbmZvcyA9IHNlbGYubG9hZChmbiwgYXBwZW5kcywgY2ZnRGF0YSkKKyAgICAgICAgZm9yIHZpcnR1YWxmbiwgaW5mb19hcnJheSBpbiBpbmZvczoKKyAgICAgICAgICAgIGlmIGluZm9fYXJyYXlbMF0uc2tpcHBlZDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlNraXBwaW5nICVzOiAlcyIsIHZpcnR1YWxmbiwgaW5mb19hcnJheVswXS5za2lwcmVhc29uKQorICAgICAgICAgICAgICAgIHNraXBwZWQgKz0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFkZF9pbmZvKHZpcnR1YWxmbiwgaW5mb19hcnJheSwgY2FjaGVEYXRhLCBub3QgY2FjaGVkKQorICAgICAgICAgICAgICAgIHZpcnR1YWxzICs9IDEKKworICAgICAgICByZXR1cm4gY2FjaGVkLCBza2lwcGVkLCB2aXJ0dWFscworCisgICAgZGVmIGNhY2hlVmFsaWQoc2VsZiwgZm4sIGFwcGVuZHMpOgorICAgICAgICAiIiIKKyAgICAgICAgSXMgdGhlIGNhY2hlIHZhbGlkIGZvciBmbj8KKyAgICAgICAgRmFzdCB2ZXJzaW9uLCBubyB0aW1lc3RhbXBzIGNoZWNrZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBmbiBub3QgaW4gc2VsZi5jaGVja2VkOgorICAgICAgICAgICAgc2VsZi5jYWNoZVZhbGlkVXBkYXRlKGZuLCBhcHBlbmRzKQorCisgICAgICAgICMgSXMgY2FjaGUgZW5hYmxlZD8KKyAgICAgICAgaWYgbm90IHNlbGYuaGFzX2NhY2hlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIGZuIGluIHNlbGYuY2xlYW46CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBjYWNoZVZhbGlkVXBkYXRlKHNlbGYsIGZuLCBhcHBlbmRzKToKKyAgICAgICAgIiIiCisgICAgICAgIElzIHRoZSBjYWNoZSB2YWxpZCBmb3IgZm4/CisgICAgICAgIE1ha2UgdGhvcm91Z2ggKHNsb3dlcikgY2hlY2tzIGluY2x1ZGluZyB0aW1lc3RhbXBzLgorICAgICAgICAiIiIKKyAgICAgICAgIyBJcyBjYWNoZSBlbmFibGVkPworICAgICAgICBpZiBub3Qgc2VsZi5oYXNfY2FjaGU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBzZWxmLmNoZWNrZWQuYWRkKGZuKQorCisgICAgICAgICMgRmlsZSBpc24ndCBpbiBkZXBlbmRzX2NhY2hlCisgICAgICAgIGlmIG5vdCBmbiBpbiBzZWxmLmRlcGVuZHNfY2FjaGU6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkNhY2hlOiAlcyBpcyBub3QgY2FjaGVkIiwgZm4pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBtdGltZSA9IGJiLnBhcnNlLmNhY2hlZF9tdGltZV9ub2Vycm9yKGZuKQorCisgICAgICAgICMgQ2hlY2sgZmlsZSBzdGlsbCBleGlzdHMKKyAgICAgICAgaWYgbXRpbWUgPT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ2FjaGU6ICVzIG5vIGxvbmdlciBleGlzdHMiLCBmbikKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlKGZuKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaW5mb19hcnJheSA9IHNlbGYuZGVwZW5kc19jYWNoZVtmbl0KKyAgICAgICAgIyBDaGVjayB0aGUgZmlsZSdzIHRpbWVzdGFtcAorICAgICAgICBpZiBtdGltZSAhPSBpbmZvX2FycmF5WzBdLnRpbWVzdGFtcDoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ2FjaGU6ICVzIGNoYW5nZWQiLCBmbikKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlKGZuKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgIyBDaGVjayBkZXBlbmRlbmNpZXMgYXJlIHN0aWxsIHZhbGlkCisgICAgICAgIGRlcGVuZHMgPSBpbmZvX2FycmF5WzBdLmZpbGVfZGVwZW5kcworICAgICAgICBpZiBkZXBlbmRzOgorICAgICAgICAgICAgZm9yIGYsIG9sZF9tdGltZSBpbiBkZXBlbmRzOgorICAgICAgICAgICAgICAgIGZtdGltZSA9IGJiLnBhcnNlLmNhY2hlZF9tdGltZV9ub2Vycm9yKGYpCisgICAgICAgICAgICAgICAgIyBDaGVjayBpZiBmaWxlIHN0aWxsIGV4aXN0cworICAgICAgICAgICAgICAgIGlmIG9sZF9tdGltZSAhPSAwIGFuZCBmbXRpbWUgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZTogJXMncyBkZXBlbmRlbmN5ICVzIHdhcyByZW1vdmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuLCBmKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZShmbikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgICAgICBpZiAoZm10aW1lICE9IG9sZF9tdGltZSk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ2FjaGU6ICVzJ3MgZGVwZW5kZW5jeSAlcyBjaGFuZ2VkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuLCBmKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZShmbikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgaGFzYXR0cihpbmZvX2FycmF5WzBdLCAnZmlsZV9jaGVja3N1bXMnKToKKyAgICAgICAgICAgIGZvciBfLCBmbCBpbiBpbmZvX2FycmF5WzBdLmZpbGVfY2hlY2tzdW1zLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmwuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgIioiIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBmLCBleGlzdCA9IGYuc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3QgPT0gIlRydWUiIGFuZCBub3Qgb3MucGF0aC5leGlzdHMoZikpIG9yIChleGlzdCA9PSAiRmFsc2UiIGFuZCBvcy5wYXRoLmV4aXN0cyhmKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkNhY2hlOiAlcydzIGZpbGUgY2hlY2tzdW0gbGlzdCBmaWxlICVzIGNoYW5nZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuLCBmKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmUoZm4pCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBhcHBlbmRzICE9IGluZm9fYXJyYXlbMF0uYXBwZW5kczoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ2FjaGU6IGFwcGVuZHMgZm9yICVzIGNoYW5nZWQiLCBmbikKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiJXMgdG8gJXMiICUgKHN0cihhcHBlbmRzKSwgc3RyKGluZm9fYXJyYXlbMF0uYXBwZW5kcykpKQorICAgICAgICAgICAgc2VsZi5yZW1vdmUoZm4pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpbnZhbGlkID0gRmFsc2UKKyAgICAgICAgZm9yIGNscyBpbiBpbmZvX2FycmF5WzBdLnZhcmlhbnRzOgorICAgICAgICAgICAgdmlydHVhbGZuID0gc2VsZi5yZWFsZm4ydmlydHVhbChmbiwgY2xzKQorICAgICAgICAgICAgc2VsZi5jbGVhbi5hZGQodmlydHVhbGZuKQorICAgICAgICAgICAgaWYgdmlydHVhbGZuIG5vdCBpbiBzZWxmLmRlcGVuZHNfY2FjaGU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZTogJXMgaXMgbm90IGNhY2hlZCIsIHZpcnR1YWxmbikKKyAgICAgICAgICAgICAgICBpbnZhbGlkID0gVHJ1ZQorCisgICAgICAgICMgSWYgYW55IG9uZSBvZiB0aGUgdmFyaWFudHMgaXMgbm90IHByZXNlbnQsIG1hcmsgYXMgaW52YWxpZCBmb3IgYWxsCisgICAgICAgIGlmIGludmFsaWQ6CisgICAgICAgICAgICBmb3IgY2xzIGluIGluZm9fYXJyYXlbMF0udmFyaWFudHM6CisgICAgICAgICAgICAgICAgdmlydHVhbGZuID0gc2VsZi5yZWFsZm4ydmlydHVhbChmbiwgY2xzKQorICAgICAgICAgICAgICAgIGlmIHZpcnR1YWxmbiBpbiBzZWxmLmNsZWFuOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkNhY2hlOiBSZW1vdmluZyAlcyBmcm9tIGNhY2hlIiwgdmlydHVhbGZuKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFuLnJlbW92ZSh2aXJ0dWFsZm4pCisgICAgICAgICAgICBpZiBmbiBpbiBzZWxmLmNsZWFuOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ2FjaGU6IE1hcmtpbmcgJXMgYXMgbm90IGNsZWFuIiwgZm4pCisgICAgICAgICAgICAgICAgc2VsZi5jbGVhbi5yZW1vdmUoZm4pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBzZWxmLmNsZWFuLmFkZChmbikKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiByZW1vdmUoc2VsZiwgZm4pOgorICAgICAgICAiIiIKKyAgICAgICAgUmVtb3ZlIGEgZm4gZnJvbSB0aGUgY2FjaGUKKyAgICAgICAgQ2FsbGVkIGZyb20gdGhlIHBhcnNlciBpbiBlcnJvciBjYXNlcworICAgICAgICAiIiIKKyAgICAgICAgaWYgZm4gaW4gc2VsZi5kZXBlbmRzX2NhY2hlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSZW1vdmluZyAlcyBmcm9tIGNhY2hlIiwgZm4pCisgICAgICAgICAgICBkZWwgc2VsZi5kZXBlbmRzX2NhY2hlW2ZuXQorICAgICAgICBpZiBmbiBpbiBzZWxmLmNsZWFuOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJNYXJraW5nICVzIGFzIHVuY2xlYW4iLCBmbikKKyAgICAgICAgICAgIHNlbGYuY2xlYW4ucmVtb3ZlKGZuKQorCisgICAgZGVmIHN5bmMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTYXZlIHRoZSBjYWNoZQorICAgICAgICBDYWxsZWQgZnJvbSB0aGUgcGFyc2VyIHdoZW4gY29tcGxldGUgKG9yIGV4aXRpbmcpCisgICAgICAgICIiIgorCisgICAgICAgIGlmIG5vdCBzZWxmLmhhc19jYWNoZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuY2FjaGVjbGVhbjoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ2FjaGUgaXMgY2xlYW4sIG5vdCBzYXZpbmcuIikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZpbGVfZGljdCA9IHt9CisgICAgICAgIHBpY2tsZXJfZGljdCA9IHt9CisgICAgICAgIGZvciBjYWNoZV9jbGFzcyBpbiBzZWxmLmNhY2hlc19hcnJheToKKyAgICAgICAgICAgIGlmIHR5cGUoY2FjaGVfY2xhc3MpIGlzIHR5cGUgYW5kIGlzc3ViY2xhc3MoY2FjaGVfY2xhc3MsIFJlY2lwZUluZm9Db21tb24pOgorICAgICAgICAgICAgICAgIGNhY2hlX2NsYXNzX25hbWUgPSBjYWNoZV9jbGFzcy5fX25hbWVfXworICAgICAgICAgICAgICAgIGNhY2hlZmlsZSA9IGdldENhY2hlRmlsZShzZWxmLmNhY2hlZGlyLCBjYWNoZV9jbGFzcy5jYWNoZWZpbGUsIHNlbGYuZGF0YV9oYXNoKQorICAgICAgICAgICAgICAgIGZpbGVfZGljdFtjYWNoZV9jbGFzc19uYW1lXSA9IG9wZW4oY2FjaGVmaWxlLCAid2IiKQorICAgICAgICAgICAgICAgIHBpY2tsZXJfZGljdFtjYWNoZV9jbGFzc19uYW1lXSA9ICBwaWNrbGUuUGlja2xlcihmaWxlX2RpY3RbY2FjaGVfY2xhc3NfbmFtZV0sIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MKQorICAgICAgICAgICAgICAgICAgIAorICAgICAgICBwaWNrbGVyX2RpY3RbJ0NvcmVSZWNpcGVJbmZvJ10uZHVtcChfX2NhY2hlX3ZlcnNpb25fXykKKyAgICAgICAgcGlja2xlcl9kaWN0WydDb3JlUmVjaXBlSW5mbyddLmR1bXAoYmIuX192ZXJzaW9uX18pCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGtleSwgaW5mb19hcnJheSBpbiBzZWxmLmRlcGVuZHNfY2FjaGUuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgZm9yIGluZm8gaW4gaW5mb19hcnJheToKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpbmZvLCBSZWNpcGVJbmZvQ29tbW9uKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlX2NsYXNzX25hbWUgPSBpbmZvLl9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlcl9kaWN0W2NhY2hlX2NsYXNzX25hbWVdLmR1bXAoa2V5KQorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlcl9kaWN0W2NhY2hlX2NsYXNzX25hbWVdLmR1bXAoaW5mbykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZvciBjYWNoZV9jbGFzcyBpbiBzZWxmLmNhY2hlc19hcnJheToKKyAgICAgICAgICAgICAgICBpZiB0eXBlKGNhY2hlX2NsYXNzKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKGNhY2hlX2NsYXNzLCBSZWNpcGVJbmZvQ29tbW9uKToKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVfY2xhc3NfbmFtZSA9IGNhY2hlX2NsYXNzLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgICAgIGZpbGVfZGljdFtjYWNoZV9jbGFzc19uYW1lXS5jbG9zZSgpCisKKyAgICAgICAgZGVsIHNlbGYuZGVwZW5kc19jYWNoZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBtdGltZShjYWNoZWZpbGUpOgorICAgICAgICByZXR1cm4gYmIucGFyc2UuY2FjaGVkX210aW1lX25vZXJyb3IoY2FjaGVmaWxlKQorCisgICAgZGVmIGFkZF9pbmZvKHNlbGYsIGZpbGVuYW1lLCBpbmZvX2FycmF5LCBjYWNoZURhdGEsIHBhcnNlZD1Ob25lLCB3YXRjaGVyPU5vbmUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGluZm9fYXJyYXlbMF0sIENvcmVSZWNpcGVJbmZvKSBhbmQgKG5vdCBpbmZvX2FycmF5WzBdLnNraXBwZWQpOgorICAgICAgICAgICAgY2FjaGVEYXRhLmFkZF9mcm9tX3JlY2lwZWluZm8oZmlsZW5hbWUsIGluZm9fYXJyYXkpCisKKyAgICAgICAgICAgIGlmIHdhdGNoZXI6CisgICAgICAgICAgICAgICAgd2F0Y2hlcihpbmZvX2FycmF5WzBdLmZpbGVfZGVwZW5kcykKKworICAgICAgICBpZiBub3Qgc2VsZi5oYXNfY2FjaGU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiAoaW5mb19hcnJheVswXS5za2lwcGVkIG9yICdTUkNSRVZJTkFDVElPTicgbm90IGluIGluZm9fYXJyYXlbMF0ucHYpIGFuZCBub3QgaW5mb19hcnJheVswXS5ub2NhY2hlOgorICAgICAgICAgICAgaWYgcGFyc2VkOgorICAgICAgICAgICAgICAgIHNlbGYuY2FjaGVjbGVhbiA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLmRlcGVuZHNfY2FjaGVbZmlsZW5hbWVdID0gaW5mb19hcnJheQorCisgICAgZGVmIGFkZChzZWxmLCBmaWxlX25hbWUsIGRhdGEsIGNhY2hlRGF0YSwgcGFyc2VkPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgU2F2ZSBkYXRhIHdlIG5lZWQgaW50byB0aGUgY2FjaGUKKyAgICAgICAgIiIiCisKKyAgICAgICAgcmVhbGZuID0gc2VsZi52aXJ0dWFsZm4ycmVhbGZuKGZpbGVfbmFtZSlbMF0KKworICAgICAgICBpbmZvX2FycmF5ID0gW10KKyAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgaWYgdHlwZShjYWNoZV9jbGFzcykgaXMgdHlwZSBhbmQgaXNzdWJjbGFzcyhjYWNoZV9jbGFzcywgUmVjaXBlSW5mb0NvbW1vbik6CisgICAgICAgICAgICAgICAgaW5mb19hcnJheS5hcHBlbmQoY2FjaGVfY2xhc3MocmVhbGZuLCBkYXRhKSkKKyAgICAgICAgc2VsZi5hZGRfaW5mbyhmaWxlX25hbWUsIGluZm9fYXJyYXksIGNhY2hlRGF0YSwgcGFyc2VkKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBsb2FkX2JiZmlsZShiYmZpbGUsIGFwcGVuZHMsIGNvbmZpZyk6CisgICAgICAgICIiIgorICAgICAgICBMb2FkIGFuZCBwYXJzZSBvbmUgLmJiIGJ1aWxkIGZpbGUKKyAgICAgICAgUmV0dXJuIHRoZSBkYXRhIGFuZCB3aGV0aGVyIHBhcnNpbmcgcmVzdWx0ZWQgaW4gdGhlIGZpbGUgYmVpbmcgc2tpcHBlZAorICAgICAgICAiIiIKKyAgICAgICAgY2hkaXJfYmFjayA9IEZhbHNlCisKKyAgICAgICAgZnJvbSBiYiBpbXBvcnQgcGFyc2UKKworICAgICAgICAjIGV4cGFuZCB0bXBkaXIgdG8gaW5jbHVkZSB0aGlzIHRvcGRpcgorICAgICAgICBjb25maWcuc2V0VmFyKCdUTVBESVInLCBjb25maWcuZ2V0VmFyKCdUTVBESVInLCBUcnVlKSBvciAiIikKKyAgICAgICAgYmJmaWxlX2xvYyA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoYmJmaWxlKSkKKyAgICAgICAgb2xkcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5nZXRjd2QoKSkKKyAgICAgICAgcGFyc2UuY2FjaGVkX210aW1lX25vZXJyb3IoYmJmaWxlX2xvYykKKyAgICAgICAgYmJfZGF0YSA9IGNvbmZpZy5jcmVhdGVDb3B5KCkKKyAgICAgICAgIyBUaGUgQ29uZkhhbmRsZXIgZmlyc3QgbG9va3MgaWYgdGhlcmUgaXMgYSBUT1BESVIgYW5kIGlmIG5vdAorICAgICAgICAjIHRoZW4gaXQgd291bGQgY2FsbCBnZXRjd2QoKS4KKyAgICAgICAgIyBQcmV2aW91c2x5LCB3ZSBjaGRpcigpZWQgdG8gYmJmaWxlX2xvYywgY2FsbGVkIHRoZSBoYW5kbGVyCisgICAgICAgICMgYW5kIGZpbmFsbHkgY2hkaXIoKWVkIGJhY2ssIGEgY291cGxlIG9mIHRob3VzYW5kIHRpbWVzLiBXZSBub3cKKyAgICAgICAgIyBqdXN0IGZpbGwgaW4gVE9QRElSIHRvIHBvaW50IHRvIGJiZmlsZV9sb2MgaWYgdGhlcmUgaXMgbm8gVE9QRElSIHlldC4KKyAgICAgICAgaWYgbm90IGJiX2RhdGEuZ2V0VmFyKCdUT1BESVInLCBGYWxzZSk6CisgICAgICAgICAgICBjaGRpcl9iYWNrID0gVHJ1ZQorICAgICAgICAgICAgYmJfZGF0YS5zZXRWYXIoJ1RPUERJUicsIGJiZmlsZV9sb2MpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGFwcGVuZHM6CisgICAgICAgICAgICAgICAgYmJfZGF0YS5zZXRWYXIoJ19fQkJBUFBFTkQnLCAiICIuam9pbihhcHBlbmRzKSkKKyAgICAgICAgICAgIGJiX2RhdGEgPSBwYXJzZS5oYW5kbGUoYmJmaWxlLCBiYl9kYXRhKQorICAgICAgICAgICAgaWYgY2hkaXJfYmFjazoKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihvbGRwYXRoKQorICAgICAgICAgICAgcmV0dXJuIGJiX2RhdGEKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaWYgY2hkaXJfYmFjazoKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihvbGRwYXRoKQorICAgICAgICAgICAgcmFpc2UKKworCitkZWYgaW5pdChjb29rZXIpOgorICAgICIiIgorICAgIFRoZSBPYmplY3RpdmU6IENhY2hlIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBkYXRhIHBvc3NpYmxlIHlldCBnZXQgdG8gdGhlCisgICAgc3RhZ2Ugb2YgYnVpbGRpbmcgcGFja2FnZXMgKGkuZS4gdHJ5QnVpbGQpIHdpdGhvdXQgcmVwYXJzaW5nIGFueSAuYmIgZmlsZXMuCisKKyAgICBUbyBkbyB0aGlzLCB3ZSBpbnRlcmNlcHQgZ2V0VmFyIGNhbGxzIGFuZCBvbmx5IGNhY2hlIHRoZSB2YXJpYWJsZXMgd2Ugc2VlCisgICAgYmVpbmcgYWNjZXNzZWQuIFdlIHJlbHkgb24gdGhlIGNhY2hlIGdldFZhciBjYWxscyBiZWluZyBtYWRlIGZvciBhbGwKKyAgICB2YXJpYWJsZXMgYml0YmFrZSBtaWdodCBuZWVkIHRvIHVzZSB0byByZWFjaCB0aGlzIHN0YWdlLiBGb3IgZWFjaCBjYWNoZWQKKyAgICBmaWxlIHdlIG5lZWQgdG8gdHJhY2s6CisKKyAgICAqIEl0cyBtdGltZQorICAgICogVGhlIG10aW1lcyBvZiBhbGwgaXRzIGRlcGVuZGVuY2llcworICAgICogV2hldGhlciBpdCBjYXVzZWQgYSBwYXJzZS5Ta2lwUmVjaXBlIGV4Y2VwdGlvbgorCisgICAgRmlsZXMgY2F1c2luZyBwYXJzaW5nIGVycm9ycyBhcmUgZXZpY3RlZCBmcm9tIHRoZSBjYWNoZS4KKworICAgICIiIgorICAgIHJldHVybiBDYWNoZShjb29rZXIuY29uZmlndXJhdGlvbi5kYXRhLCBjb29rZXIuY29uZmlndXJhdGlvbi5kYXRhX2hhc2gpCisKKworY2xhc3MgQ2FjaGVEYXRhKG9iamVjdCk6CisgICAgIiIiCisgICAgVGhlIGRhdGEgc3RydWN0dXJlcyB3ZSBjb21waWxlIGZyb20gdGhlIGNhY2hlZCBkYXRhCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2FjaGVzX2FycmF5KToKKyAgICAgICAgc2VsZi5jYWNoZXNfYXJyYXkgPSBjYWNoZXNfYXJyYXkKKyAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgaWYgdHlwZShjYWNoZV9jbGFzcykgaXMgdHlwZSBhbmQgaXNzdWJjbGFzcyhjYWNoZV9jbGFzcywgUmVjaXBlSW5mb0NvbW1vbik6CisgICAgICAgICAgICAgICAgY2FjaGVfY2xhc3MuaW5pdF9jYWNoZURhdGEoc2VsZikgICAgICAgIAorCisgICAgICAgICMgRGlyZWN0IGNhY2hlIHZhcmlhYmxlcworICAgICAgICBzZWxmLnRhc2tfcXVldWVzID0ge30KKyAgICAgICAgc2VsZi5wcmVmZXJyZWQgPSB7fQorICAgICAgICBzZWxmLnRhc2tzID0ge30KKyAgICAgICAgIyBJbmRpcmVjdCBDYWNoZSB2YXJpYWJsZXMgKHNldCBlbHNld2hlcmUpCisgICAgICAgIHNlbGYuaWdub3JlZF9kZXBlbmRlbmNpZXMgPSBbXQorICAgICAgICBzZWxmLndvcmxkX3RhcmdldCA9IHNldCgpCisgICAgICAgIHNlbGYuYmJmaWxlX3ByaW9yaXR5ID0ge30KKworICAgIGRlZiBhZGRfZnJvbV9yZWNpcGVpbmZvKHNlbGYsIGZuLCBpbmZvX2FycmF5KToKKyAgICAgICAgZm9yIGluZm8gaW4gaW5mb19hcnJheToKKyAgICAgICAgICAgIGluZm8uYWRkX2NhY2hlRGF0YShzZWxmLCBmbikKKworY2xhc3MgTXVsdGlQcm9jZXNzQ2FjaGUob2JqZWN0KToKKyAgICAiIiIKKyAgICBCaXRCYWtlIG11bHRpLXByb2Nlc3MgY2FjaGUgaW1wbGVtZW50YXRpb24KKworICAgIFVzZWQgYnkgdGhlIGNvZGVwYXJzZXIgJiBmaWxlIGNoZWNrc3VtIGNhY2hlcworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmNhY2hlZmlsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5jYWNoZWRhdGEgPSBzZWxmLmNyZWF0ZV9jYWNoZWRhdGEoKQorICAgICAgICBzZWxmLmNhY2hlZGF0YV9leHRyYXMgPSBzZWxmLmNyZWF0ZV9jYWNoZWRhdGEoKQorCisgICAgZGVmIGluaXRfY2FjaGUoc2VsZiwgZCk6CisgICAgICAgIGNhY2hlZGlyID0gKGQuZ2V0VmFyKCJQRVJTSVNURU5UX0RJUiIsIFRydWUpIG9yCisgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCJDQUNIRSIsIFRydWUpKQorICAgICAgICBpZiBjYWNoZWRpciBpbiBbTm9uZSwgJyddOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihjYWNoZWRpcikKKyAgICAgICAgc2VsZi5jYWNoZWZpbGUgPSBvcy5wYXRoLmpvaW4oY2FjaGVkaXIsIHNlbGYuX19jbGFzc19fLmNhY2hlX2ZpbGVfbmFtZSkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJVc2luZyBjYWNoZSBpbiAnJXMnIiwgc2VsZi5jYWNoZWZpbGUpCisKKyAgICAgICAgZ2xmID0gYmIudXRpbHMubG9ja2ZpbGUoc2VsZi5jYWNoZWZpbGUgKyAiLmxvY2siKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmNhY2hlZmlsZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBwID0gcGlja2xlLlVucGlja2xlcihmKQorICAgICAgICAgICAgICAgIGRhdGEsIHZlcnNpb24gPSBwLmxvYWQoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGdsZikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUoZ2xmKQorCisgICAgICAgIGlmIHZlcnNpb24gIT0gc2VsZi5fX2NsYXNzX18uQ0FDSEVfVkVSU0lPTjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuY2FjaGVkYXRhID0gZGF0YQorCisgICAgZGVmIGNyZWF0ZV9jYWNoZWRhdGEoc2VsZik6CisgICAgICAgIGRhdGEgPSBbe31dCisgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBkZWYgc2F2ZV9leHRyYXMoc2VsZiwgZCk6CisgICAgICAgIGlmIG5vdCBzZWxmLmNhY2hlZmlsZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGdsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKHNlbGYuY2FjaGVmaWxlICsgIi5sb2NrIiwgc2hhcmVkPVRydWUpCisKKyAgICAgICAgaSA9IG9zLmdldHBpZCgpCisgICAgICAgIGxmID0gTm9uZQorICAgICAgICB3aGlsZSBub3QgbGY6CisgICAgICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKHNlbGYuY2FjaGVmaWxlICsgIi5sb2NrLiIgKyBzdHIoaSksIHJldHJ5PUZhbHNlKQorICAgICAgICAgICAgaWYgbm90IGxmIG9yIG9zLnBhdGguZXhpc3RzKHNlbGYuY2FjaGVmaWxlICsgIi0iICsgc3RyKGkpKToKKyAgICAgICAgICAgICAgICBpZiBsZjoKKyAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgICAgICAgICAgbGYgPSBOb25lCisgICAgICAgICAgICAgICAgaSA9IGkgKyAxCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuY2FjaGVmaWxlICsgIi0iICsgc3RyKGkpLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgICAgIHAgPSBwaWNrbGUuUGlja2xlcihmLCAtMSkKKyAgICAgICAgICAgICAgICBwLmR1bXAoW3NlbGYuY2FjaGVkYXRhX2V4dHJhcywgc2VsZi5fX2NsYXNzX18uQ0FDSEVfVkVSU0lPTl0pCisKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShnbGYpCisKKyAgICBkZWYgbWVyZ2VfZGF0YShzZWxmLCBzb3VyY2UsIGRlc3QpOgorICAgICAgICBmb3IgaiBpbiByYW5nZSgwLGxlbihkZXN0KSk6CisgICAgICAgICAgICBmb3IgaCBpbiBzb3VyY2Vbal06CisgICAgICAgICAgICAgICAgaWYgaCBub3QgaW4gZGVzdFtqXToKKyAgICAgICAgICAgICAgICAgICAgZGVzdFtqXVtoXSA9IHNvdXJjZVtqXVtoXQorCisgICAgZGVmIHNhdmVfbWVyZ2Uoc2VsZiwgZCk6CisgICAgICAgIGlmIG5vdCBzZWxmLmNhY2hlZmlsZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGdsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKHNlbGYuY2FjaGVmaWxlICsgIi5sb2NrIikKKworICAgICAgICBkYXRhID0gc2VsZi5jYWNoZWRhdGEKKworICAgICAgICBmb3IgZiBpbiBbeSBmb3IgeSBpbiBvcy5saXN0ZGlyKG9zLnBhdGguZGlybmFtZShzZWxmLmNhY2hlZmlsZSkpIGlmIHkuc3RhcnRzd2l0aChvcy5wYXRoLmJhc2VuYW1lKHNlbGYuY2FjaGVmaWxlKSArICctJyldOgorICAgICAgICAgICAgZiA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc2VsZi5jYWNoZWZpbGUpLCBmKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihmLCAicmIiKSBhcyBmZDoKKyAgICAgICAgICAgICAgICAgICAgcCA9IHBpY2tsZS5VbnBpY2tsZXIoZmQpCisgICAgICAgICAgICAgICAgICAgIGV4dHJhZGF0YSwgdmVyc2lvbiA9IHAubG9hZCgpCisgICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiB2ZXJzaW9uICE9IHNlbGYuX19jbGFzc19fLkNBQ0hFX1ZFUlNJT046CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGYpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgc2VsZi5tZXJnZV9kYXRhKGV4dHJhZGF0YSwgZGF0YSkKKyAgICAgICAgICAgIG9zLnVubGluayhmKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmNhY2hlZmlsZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIHAgPSBwaWNrbGUuUGlja2xlcihmLCAtMSkKKyAgICAgICAgICAgIHAuZHVtcChbZGF0YSwgc2VsZi5fX2NsYXNzX18uQ0FDSEVfVkVSU0lPTl0pCisKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShnbGYpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY2FjaGVfZXh0cmEucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NhY2hlX2V4dHJhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZjQ5NTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NhY2hlX2V4dHJhLnB5CkBAIC0wLDAgKzEsNzUgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEV4dHJhIFJlY2lwZUluZm8gd2lsbCBiZSBhbGwgZGVmaW5lZCBpbiB0aGlzIGZpbGUuIEN1cnJlbnRseSwKKyMgT25seSBIb2IgKEltYWdlIENyZWF0b3IpIFJlcXVlc3RzIHNvbWUgZXh0cmEgZmllbGRzLiBTbworIyBIb2JSZWNpcGVJbmZvIGlzIGRlZmluZWQuIEl0J3MgbmFtZWQgSG9iUmVjaXBlSW5mbyBiZWNhdXNlIGl0CisjIGlzIGludHJvZHVjZWQgYnkgJ2hvYicuIFVzZXJzIGNvdWxkIGFsc28gaW50cm9kdWNlIG90aGVyCisjIFJlY2lwZUluZm8gb3Igc2ltcGx5IHVzZSB0aG9zZSBhbHJlYWR5IGRlZmluZWQgUmVjaXBlSW5mby4KKyMgSW4gdGhlIGZvbGxvd2luZyBwYXRjaCwgdGhpcyBuZXdseSBkZWZpbmVkIG5ldyBleHRyYSBSZWNpcGVJbmZvCisjIHdpbGwgYmUgZHluYW1pY2FsbHkgbG9hZGVkIGFuZCB1c2VkIGZvciBsb2FkaW5nL3NhdmluZyB0aGUgZXh0cmEKKyMgY2FjaGUgZmllbGRzICAKKworIyBDb3B5cmlnaHQgKEMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIGJiLmNhY2hlIGltcG9ydCBSZWNpcGVJbmZvQ29tbW9uCisKK2NsYXNzIEhvYlJlY2lwZUluZm8oUmVjaXBlSW5mb0NvbW1vbik6CisgICAgX19zbG90c19fID0gKCkKKworICAgIGNsYXNzbmFtZSA9ICJIb2JSZWNpcGVJbmZvIgorICAgICMgcGxlYXNlIG92ZXJyaWRlIHRoaXMgbWVtYmVyIHdpdGggdGhlIGNvcnJlY3QgZGF0YSBjYWNoZSBmaWxlCisgICAgIyBzdWNoIGFzIChiYl9jYWNoZS5kYXQsIGJiX2V4dHJhY2FjaGVfaG9iLmRhdCkgCisgICAgY2FjaGVmaWxlID0gImJiX2V4dHJhY2FjaGVfIiArIGNsYXNzbmFtZSArIi5kYXQiICAgICAgICAKKworICAgICMgb3ZlcnJpZGUgdGhpcyBtZW1iZXIgd2l0aCB0aGUgbGlzdCBvZiBleHRyYSBjYWNoZSBmaWVsZHMKKyAgICAjIHRoYXQgdGhpcyBjbGFzcyB3aWxsIHByb3ZpZGUKKyAgICBjYWNoZWZpZWxkcyA9IFsnc3VtbWFyeScsICdsaWNlbnNlJywgJ3NlY3Rpb24nLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJywgJ2hvbWVwYWdlJywgJ2J1Z3RyYWNrZXInLAorICAgICAgICAgICAgJ3ByZXZpc2lvbicsICdmaWxlc19pbmZvJ10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbWV0YWRhdGEpOgorCisgICAgICAgIHNlbGYuc3VtbWFyeSA9IHNlbGYuZ2V0dmFyKCdTVU1NQVJZJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYubGljZW5zZSA9IHNlbGYuZ2V0dmFyKCdMSUNFTlNFJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuc2VjdGlvbiA9IHNlbGYuZ2V0dmFyKCdTRUNUSU9OJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBzZWxmLmdldHZhcignREVTQ1JJUFRJT04nLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5ob21lcGFnZSA9IHNlbGYuZ2V0dmFyKCdIT01FUEFHRScsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLmJ1Z3RyYWNrZXIgPSBzZWxmLmdldHZhcignQlVHVFJBQ0tFUicsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnByZXZpc2lvbiA9IHNlbGYuZ2V0dmFyKCdQUicsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLmZpbGVzX2luZm8gPSBzZWxmLmdldHZhcignRklMRVNfSU5GTycsIG1ldGFkYXRhKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGluaXRfY2FjaGVEYXRhKGNscywgY2FjaGVkYXRhKToKKyAgICAgICAgIyBDYWNoZURhdGEgaW4gSG9iIFJlY2lwZUluZm8gQ2xhc3MKKyAgICAgICAgY2FjaGVkYXRhLnN1bW1hcnkgPSB7fQorICAgICAgICBjYWNoZWRhdGEubGljZW5zZSA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5zZWN0aW9uID0ge30KKyAgICAgICAgY2FjaGVkYXRhLmRlc2NyaXB0aW9uID0ge30KKyAgICAgICAgY2FjaGVkYXRhLmhvbWVwYWdlID0ge30KKyAgICAgICAgY2FjaGVkYXRhLmJ1Z3RyYWNrZXIgPSB7fQorICAgICAgICBjYWNoZWRhdGEucHJldmlzaW9uID0ge30KKyAgICAgICAgY2FjaGVkYXRhLmZpbGVzX2luZm8gPSB7fQorCisgICAgZGVmIGFkZF9jYWNoZURhdGEoc2VsZiwgY2FjaGVkYXRhLCBmbik6CisgICAgICAgIGNhY2hlZGF0YS5zdW1tYXJ5W2ZuXSA9IHNlbGYuc3VtbWFyeQorICAgICAgICBjYWNoZWRhdGEubGljZW5zZVtmbl0gPSBzZWxmLmxpY2Vuc2UKKyAgICAgICAgY2FjaGVkYXRhLnNlY3Rpb25bZm5dID0gc2VsZi5zZWN0aW9uCisgICAgICAgIGNhY2hlZGF0YS5kZXNjcmlwdGlvbltmbl0gPSBzZWxmLmRlc2NyaXB0aW9uCisgICAgICAgIGNhY2hlZGF0YS5ob21lcGFnZVtmbl0gPSBzZWxmLmhvbWVwYWdlCisgICAgICAgIGNhY2hlZGF0YS5idWd0cmFja2VyW2ZuXSA9IHNlbGYuYnVndHJhY2tlcgorICAgICAgICBjYWNoZWRhdGEucHJldmlzaW9uW2ZuXSA9IHNlbGYucHJldmlzaW9uCisgICAgICAgIGNhY2hlZGF0YS5maWxlc19pbmZvW2ZuXSA9IHNlbGYuZmlsZXNfaW5mbwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jaGVja3N1bS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY2hlY2tzdW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE0ZmYwYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY2hlY2tzdW0ucHkKQEAgLTAsMCArMSw5MCBAQAorIyBMb2NhbCBmaWxlIGNoZWNrc3VtIGNhY2hlIGltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IG9zCitpbXBvcnQgc3RhdAoraW1wb3J0IGJiLnV0aWxzCitpbXBvcnQgbG9nZ2luZworZnJvbSBiYi5jYWNoZSBpbXBvcnQgTXVsdGlQcm9jZXNzQ2FjaGUKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuQ2FjaGUiKQorCit0cnk6CisgICAgaW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IHBpY2tsZQorICAgIGxvZ2dlci5pbmZvKCJJbXBvcnRpbmcgY1BpY2tsZSBmYWlsZWQuICIKKyAgICAgICAgICAgICAgICAiRmFsbGluZyBiYWNrIHRvIGEgdmVyeSBzbG93IGltcGxlbWVudGF0aW9uLiIpCisKKworIyBtdGltZSBjYWNoZSAobm9uLXBlcnNpc3RlbnQpCisjIGJhc2VkIHVwb24gdGhlIGFzc3VtcHRpb24gdGhhdCBmaWxlcyBkbyBub3QgY2hhbmdlIGR1cmluZyBiaXRiYWtlIHJ1bgorY2xhc3MgRmlsZU10aW1lQ2FjaGUob2JqZWN0KToKKyAgICBjYWNoZSA9IHt9CisKKyAgICBkZWYgY2FjaGVkX210aW1lKHNlbGYsIGYpOgorICAgICAgICBpZiBmIG5vdCBpbiBzZWxmLmNhY2hlOgorICAgICAgICAgICAgc2VsZi5jYWNoZVtmXSA9IG9zLnN0YXQoZilbc3RhdC5TVF9NVElNRV0KKyAgICAgICAgcmV0dXJuIHNlbGYuY2FjaGVbZl0KKworICAgIGRlZiBjYWNoZWRfbXRpbWVfbm9lcnJvcihzZWxmLCBmKToKKyAgICAgICAgaWYgZiBub3QgaW4gc2VsZi5jYWNoZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmNhY2hlW2ZdID0gb3Muc3RhdChmKVtzdGF0LlNUX01USU1FXQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgcmV0dXJuIHNlbGYuY2FjaGVbZl0KKworICAgIGRlZiB1cGRhdGVfbXRpbWUoc2VsZiwgZik6CisgICAgICAgIHNlbGYuY2FjaGVbZl0gPSBvcy5zdGF0KGYpW3N0YXQuU1RfTVRJTUVdCisgICAgICAgIHJldHVybiBzZWxmLmNhY2hlW2ZdCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgIHNlbGYuY2FjaGUuY2xlYXIoKQorCisjIENoZWNrc3VtICsgbXRpbWUgY2FjaGUgKHBlcnNpc3RlbnQpCitjbGFzcyBGaWxlQ2hlY2tzdW1DYWNoZShNdWx0aVByb2Nlc3NDYWNoZSk6CisgICAgY2FjaGVfZmlsZV9uYW1lID0gImxvY2FsX2ZpbGVfY2hlY2tzdW1fY2FjaGUuZGF0IgorICAgIENBQ0hFX1ZFUlNJT04gPSAxCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYubXRpbWVfY2FjaGUgPSBGaWxlTXRpbWVDYWNoZSgpCisgICAgICAgIE11bHRpUHJvY2Vzc0NhY2hlLl9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgZ2V0X2NoZWNrc3VtKHNlbGYsIGYpOgorICAgICAgICBlbnRyeSA9IHNlbGYuY2FjaGVkYXRhWzBdLmdldChmKQorICAgICAgICBjbXRpbWUgPSBzZWxmLm10aW1lX2NhY2hlLmNhY2hlZF9tdGltZShmKQorICAgICAgICBpZiBlbnRyeToKKyAgICAgICAgICAgIChtdGltZSwgaGFzaHZhbCkgPSBlbnRyeQorICAgICAgICAgICAgaWYgY210aW1lID09IG10aW1lOgorICAgICAgICAgICAgICAgIHJldHVybiBoYXNodmFsCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICJmaWxlICVzIGNoYW5nZWQgbXRpbWUsIHJlY29tcHV0ZSBjaGVja3N1bSIgJSBmKQorCisgICAgICAgIGhhc2h2YWwgPSBiYi51dGlscy5tZDVfZmlsZShmKQorICAgICAgICBzZWxmLmNhY2hlZGF0YV9leHRyYXNbMF1bZl0gPSAoY210aW1lLCBoYXNodmFsKQorICAgICAgICByZXR1cm4gaGFzaHZhbAorCisgICAgZGVmIG1lcmdlX2RhdGEoc2VsZiwgc291cmNlLCBkZXN0KToKKyAgICAgICAgZm9yIGggaW4gc291cmNlWzBdOgorICAgICAgICAgICAgaWYgaCBpbiBkZXN0OgorICAgICAgICAgICAgICAgIChzbXRpbWUsIF8pID0gc291cmNlWzBdW2hdCisgICAgICAgICAgICAgICAgKGRtdGltZSwgXykgPSBkZXN0WzBdW2hdCisgICAgICAgICAgICAgICAgaWYgc210aW1lID4gZG10aW1lOgorICAgICAgICAgICAgICAgICAgICBkZXN0WzBdW2hdID0gc291cmNlWzBdW2hdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlc3RbMF1baF0gPSBzb3VyY2VbMF1baF0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29kZXBhcnNlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29kZXBhcnNlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmEzYWY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb2RlcGFyc2VyLnB5CkBAIC0wLDAgKzEsNDE0IEBACitpbXBvcnQgYXN0CitpbXBvcnQgY29kZWdlbgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgYmIudXRpbHMsIGJiLmRhdGEKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBjaGFpbgorZnJvbSBweXNoIGltcG9ydCBweXNoeWFjYywgcHlzaGxleCwgc2hlcnJvcnMKK2Zyb20gYmIuY2FjaGUgaW1wb3J0IE11bHRpUHJvY2Vzc0NhY2hlCisKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuQ29kZVBhcnNlcicpCisKK3RyeToKKyAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgcGlja2xlCisgICAgbG9nZ2VyLmluZm8oJ0ltcG9ydGluZyBjUGlja2xlIGZhaWxlZC4gIEZhbGxpbmcgYmFjayB0byBhIHZlcnkgc2xvdyBpbXBsZW1lbnRhdGlvbi4nKQorCisKK2RlZiBjaGVja19pbmRlbnQoY29kZXN0cik6CisgICAgIiIiSWYgdGhlIGNvZGUgaXMgaW5kZW50ZWQsIGFkZCBhIHRvcCBsZXZlbCBwaWVjZSBvZiBjb2RlIHRvICdyZW1vdmUnIHRoZSBpbmRlbnRhdGlvbiIiIgorCisgICAgaSA9IDAKKyAgICB3aGlsZSBjb2Rlc3RyW2ldIGluIFsiXG4iLCAiXHQiLCAiICJdOgorICAgICAgICBpID0gaSArIDEKKworICAgIGlmIGkgPT0gMDoKKyAgICAgICAgcmV0dXJuIGNvZGVzdHIKKworICAgIGlmIGNvZGVzdHJbaS0xXSA9PSAiXHQiIG9yIGNvZGVzdHJbaS0xXSA9PSAiICI6CisgICAgICAgIHJldHVybiAiaWYgMTpcbiIgKyBjb2Rlc3RyCisKKyAgICByZXR1cm4gY29kZXN0cgorCisKKyMgQmFzaWNhbGx5IHBpY2tsZSwgaW4gcHl0aG9uIDIuNy4zIGF0IGxlYXN0LCBkb2VzIGJhZGx5IHdpdGggZGF0YSBkdXBsaWNhdGlvbiAKKyMgdXBvbiBwaWNrbGluZyBhbmQgdW5waWNrbGluZy4gQ29tYmluZSB0aGlzIHdpdGggZHVwbGljYXRlIG9iamVjdHMgYW5kIHRoaW5ncworIyBhcmUgYSBtZXNzLgorIworIyBXaGVuIHRoZSBzZXRzIGFyZSBvcmlnaW5hbGx5IGNyZWF0ZWQsIHB5dGhvbiBjYWxscyBpbnRlcm4oKSBvbiB0aGUgc2V0IGtleXMKKyMgd2hpY2ggc2lnbmlmaWNhbnRseSBpbXByb3ZlcyBtZW1vcnkgdXNhZ2UuIFNhZGx5IHRoZSBwaWNrbGUvdW5waWNrbGUgcHJvY2VzcworIyBkb2Vzbid0IGNhbGwgaW50ZXJuKCkgb24gdGhlIGtleXMgYW5kIHJlc3VsdHMgaW4gdGhlIHNhbWUgc3RyaW5ncyBiZWluZyBkdXBsaWNhdGVkCisjIGluIG1lbW9yeS4gVGhpcyBhbHNvIG1lYW5zIHBpY2tsZSB3aWxsIHNhdmUgdGhlIHNhbWUgc3RyaW5nIG11bHRpcGxlIHRpbWVzIGluCisjIHRoZSBjYWNoZSBmaWxlLgorIworIyBCeSBoYXZpbmcgc2hlbGwgYW5kIHB5dGhvbiBjYWNoZWxpbmUgb2JqZWN0cyB3aXRoIHNldHN0YXRlL2dldHN0YXRlLCB3ZSBmb3JjZQorIyB0aGUgb2JqZWN0IGNyZWF0aW9uIHRocm91Z2ggb3VyIG93biByb3V0aW5lIHdoZXJlIHdlIGNhbiBjYWxsIGludGVybiAodmlhIGludGVyblNldCkuCisjCisjIFdlIGFsc28gdXNlIGhhc2hhYmxlIGZyb3plbnNldHMgYW5kIGVuc3VyZSB3ZSB1c2UgcmVmZXJlbmNlcyB0byB0aGVzZSBzbyB0aGF0CisjIGR1cGxpY2F0ZXMgY2FuIGJlIHJlbW92ZWQsIGJvdGggaW4gbWVtb3J5IGFuZCBpbiB0aGUgcmVzdWx0aW5nIHBpY2tsZWQgZGF0YS4KKyMKKyMgQnkgcGxheWluZyB0aGVzZSBnYW1lcywgdGhlIHNpemUgb2YgdGhlIGNhY2hlIGZpbGUgc2hyaW5rcyBkcmFtYXRpY2FsbHkKKyMgbWVhbmluZyBmYXN0ZXIgbG9hZCB0aW1lcyBhbmQgdGhlIHJlbG9hZGVkIGNhY2hlIGZpbGVzIGFsc28gY29uc3VtZSBtdWNoIGxlc3MKKyMgbWVtb3J5LiBTbWFsbGVyIGNhY2hlIGZpbGVzLCBmYXN0ZXIgbG9hZCB0aW1lcyBhbmQgbG93ZXIgbWVtb3J5IHVzYWdlIGlzIGdvb2QuCisjCisjIEEgY3VzdG9tIGdldHN0YXRlL3NldHN0YXRlIHVzaW5nIHR1cGxlcyBpcyBhY3R1YWxseSB3b3J0aCAxNSUgY2FjaGVzaXplIGJ5CisjIGF2b2lkaW5nIGR1cGxpY2F0aW9uIG9mIHRoZSBhdHRyaWJ1dGUgbmFtZXMhCisKK2NsYXNzIFNldENhY2hlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnNldGNhY2hlID0ge30KKworICAgIGRlZiBpbnRlcm5TZXQoc2VsZiwgaXRlbXMpOgorICAgICAgICAKKyAgICAgICAgbmV3ID0gW10KKyAgICAgICAgZm9yIGkgaW4gaXRlbXM6CisgICAgICAgICAgICBuZXcuYXBwZW5kKGludGVybihpKSkKKyAgICAgICAgcyA9IGZyb3plbnNldChuZXcpCisgICAgICAgIGlmIGhhc2gocykgaW4gc2VsZi5zZXRjYWNoZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNldGNhY2hlW2hhc2gocyldCisgICAgICAgIHNlbGYuc2V0Y2FjaGVbaGFzaChzKV0gPSBzCisgICAgICAgIHJldHVybiBzCisKK2NvZGVjYWNoZSA9IFNldENhY2hlKCkKKworY2xhc3MgcHl0aG9uQ2FjaGVMaW5lKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlZnMsIGV4ZWNzLCBjb250YWlucyk6CisgICAgICAgIHNlbGYucmVmcyA9IGNvZGVjYWNoZS5pbnRlcm5TZXQocmVmcykKKyAgICAgICAgc2VsZi5leGVjcyA9IGNvZGVjYWNoZS5pbnRlcm5TZXQoZXhlY3MpCisgICAgICAgIHNlbGYuY29udGFpbnMgPSB7fQorICAgICAgICBmb3IgYyBpbiBjb250YWluczoKKyAgICAgICAgICAgIHNlbGYuY29udGFpbnNbY10gPSBjb2RlY2FjaGUuaW50ZXJuU2V0KGNvbnRhaW5zW2NdKQorCisgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLnJlZnMsIHNlbGYuZXhlY3MsIHNlbGYuY29udGFpbnMpCisKKyAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKKyAgICAgICAgKHJlZnMsIGV4ZWNzLCBjb250YWlucykgPSBzdGF0ZQorICAgICAgICBzZWxmLl9faW5pdF9fKHJlZnMsIGV4ZWNzLCBjb250YWlucykKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIGwgPSAoaGFzaChzZWxmLnJlZnMpLCBoYXNoKHNlbGYuZXhlY3MpKQorICAgICAgICBmb3IgYyBpbiBzb3J0ZWQoc2VsZi5jb250YWlucy5rZXlzKCkpOgorICAgICAgICAgICAgbCA9IGwgKyAoYywgaGFzaChzZWxmLmNvbnRhaW5zW2NdKSkKKyAgICAgICAgcmV0dXJuIGhhc2gobCkKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiICIuam9pbihbc3RyKHNlbGYucmVmcyksIHN0cihzZWxmLmV4ZWNzKSwgc3RyKHNlbGYuY29udGFpbnMpXSkgCisKKworY2xhc3Mgc2hlbGxDYWNoZUxpbmUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhlY3MpOgorICAgICAgICBzZWxmLmV4ZWNzID0gY29kZWNhY2hlLmludGVyblNldChleGVjcykKKworICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5leGVjcykKKworICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgorICAgICAgICAoZXhlY3MpID0gc3RhdGUKKyAgICAgICAgc2VsZi5fX2luaXRfXyhleGVjcykKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuZXhlY3MpCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGYuZXhlY3MpCisKK2NsYXNzIENvZGVQYXJzZXJDYWNoZShNdWx0aVByb2Nlc3NDYWNoZSk6CisgICAgY2FjaGVfZmlsZV9uYW1lID0gImJiX2NvZGVwYXJzZXIuZGF0IgorICAgIENBQ0hFX1ZFUlNJT04gPSA3CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIE11bHRpUHJvY2Vzc0NhY2hlLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYucHl0aG9uY2FjaGUgPSBzZWxmLmNhY2hlZGF0YVswXQorICAgICAgICBzZWxmLnNoZWxsY2FjaGUgPSBzZWxmLmNhY2hlZGF0YVsxXQorICAgICAgICBzZWxmLnB5dGhvbmNhY2hlZXh0cmFzID0gc2VsZi5jYWNoZWRhdGFfZXh0cmFzWzBdCisgICAgICAgIHNlbGYuc2hlbGxjYWNoZWV4dHJhcyA9IHNlbGYuY2FjaGVkYXRhX2V4dHJhc1sxXQorCisgICAgICAgICMgVG8gYXZvaWQgZHVwbGljYXRpb24gaW4gdGhlIGNvZGVwYXJzZXIgY2FjaGUsIGtlZXAKKyAgICAgICAgIyBhIGxvb2t1cCBvZiBoYXNoZXMgb2Ygb2JqZWN0cyB3ZSBhbHJlYWR5IGhhdmUKKyAgICAgICAgc2VsZi5weXRob25jYWNoZWxpbmVzID0ge30KKyAgICAgICAgc2VsZi5zaGVsbGNhY2hlbGluZXMgPSB7fQorCisgICAgZGVmIG5ld1B5dGhvbkNhY2hlTGluZShzZWxmLCByZWZzLCBleGVjcywgY29udGFpbnMpOgorICAgICAgICBjYWNoZWxpbmUgPSBweXRob25DYWNoZUxpbmUocmVmcywgZXhlY3MsIGNvbnRhaW5zKQorICAgICAgICBoID0gaGFzaChjYWNoZWxpbmUpCisgICAgICAgIGlmIGggaW4gc2VsZi5weXRob25jYWNoZWxpbmVzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucHl0aG9uY2FjaGVsaW5lc1toXQorICAgICAgICBzZWxmLnB5dGhvbmNhY2hlbGluZXNbaF0gPSBjYWNoZWxpbmUKKyAgICAgICAgcmV0dXJuIGNhY2hlbGluZQorCisgICAgZGVmIG5ld1NoZWxsQ2FjaGVMaW5lKHNlbGYsIGV4ZWNzKToKKyAgICAgICAgY2FjaGVsaW5lID0gc2hlbGxDYWNoZUxpbmUoZXhlY3MpCisgICAgICAgIGggPSBoYXNoKGNhY2hlbGluZSkKKyAgICAgICAgaWYgaCBpbiBzZWxmLnNoZWxsY2FjaGVsaW5lczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNoZWxsY2FjaGVsaW5lc1toXQorICAgICAgICBzZWxmLnNoZWxsY2FjaGVsaW5lc1toXSA9IGNhY2hlbGluZQorICAgICAgICByZXR1cm4gY2FjaGVsaW5lCisKKyAgICBkZWYgaW5pdF9jYWNoZShzZWxmLCBkKToKKyAgICAgICAgTXVsdGlQcm9jZXNzQ2FjaGUuaW5pdF9jYWNoZShzZWxmLCBkKQorCisgICAgICAgICMgY2FjaGVkYXRhIGdldHMgcmUtYXNzaWduZWQgaW4gdGhlIHBhcmVudAorICAgICAgICBzZWxmLnB5dGhvbmNhY2hlID0gc2VsZi5jYWNoZWRhdGFbMF0KKyAgICAgICAgc2VsZi5zaGVsbGNhY2hlID0gc2VsZi5jYWNoZWRhdGFbMV0KKworICAgIGRlZiBjcmVhdGVfY2FjaGVkYXRhKHNlbGYpOgorICAgICAgICBkYXRhID0gW3t9LCB7fV0KKyAgICAgICAgcmV0dXJuIGRhdGEKKworY29kZXBhcnNlcmNhY2hlID0gQ29kZVBhcnNlckNhY2hlKCkKKworZGVmIHBhcnNlcl9jYWNoZV9pbml0KGQpOgorICAgIGNvZGVwYXJzZXJjYWNoZS5pbml0X2NhY2hlKGQpCisKK2RlZiBwYXJzZXJfY2FjaGVfc2F2ZShkKToKKyAgICBjb2RlcGFyc2VyY2FjaGUuc2F2ZV9leHRyYXMoZCkKKworZGVmIHBhcnNlcl9jYWNoZV9zYXZlbWVyZ2UoZCk6CisgICAgY29kZXBhcnNlcmNhY2hlLnNhdmVfbWVyZ2UoZCkKKworTG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXJDbGFzcygpCitjbGFzcyBCdWZmZXJlZExvZ2dlcihMb2dnZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBsZXZlbD0wLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgIExvZ2dlci5fX2luaXRfXyhzZWxmLCBuYW1lKQorICAgICAgICBzZWxmLnNldExldmVsKGxldmVsKQorICAgICAgICBzZWxmLmJ1ZmZlciA9IFtdCisgICAgICAgIHNlbGYudGFyZ2V0ID0gdGFyZ2V0CisKKyAgICBkZWYgaGFuZGxlKHNlbGYsIHJlY29yZCk6CisgICAgICAgIHNlbGYuYnVmZmVyLmFwcGVuZChyZWNvcmQpCisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIGZvciByZWNvcmQgaW4gc2VsZi5idWZmZXI6CisgICAgICAgICAgICBzZWxmLnRhcmdldC5oYW5kbGUocmVjb3JkKQorICAgICAgICBzZWxmLmJ1ZmZlciA9IFtdCisKK2NsYXNzIFB5dGhvblBhcnNlcigpOgorICAgIGdldHZhcnMgPSAoIi5nZXRWYXIiLCAiLmFwcGVuZFZhciIsICIucHJlcGVuZFZhciIpCisgICAgY29udGFpbnNmdW5jcyA9ICgiYmIudXRpbHMuY29udGFpbnMiLCAiYmFzZV9jb250YWlucyIsICJiYi51dGlscy5jb250YWluc19hbnkiKQorICAgIGV4ZWNmdW5jcyA9ICgiYmIuYnVpbGQuZXhlY19mdW5jIiwgImJiLmJ1aWxkLmV4ZWNfdGFzayIpCisKKyAgICBkZWYgd2FybihzZWxmLCBmdW5jLCBhcmcpOgorICAgICAgICAiIiJXYXJuIGFib3V0IGNhbGxzIG9mIGJpdGJha2UgQVBJcyB3aGljaCBwYXNzIGEgbm9uLWxpdGVyYWwKKyAgICAgICAgYXJndW1lbnQgZm9yIHRoZSB2YXJpYWJsZSBuYW1lLCBhcyB3ZSdyZSBub3QgYWJsZSB0byB0cmFjayBzdWNoCisgICAgICAgIGEgcmVmZXJlbmNlLgorICAgICAgICAiIiIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmdW5jc3RyID0gY29kZWdlbi50b19zb3VyY2UoZnVuYykKKyAgICAgICAgICAgIGFyZ3N0ciA9IGNvZGVnZW4udG9fc291cmNlKGFyZykKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYubG9nLmRlYnVnKDIsICdGYWlsZWQgdG8gY29udmVydCBmdW5jdGlvbiBhbmQgYXJndW1lbnQgdG8gc291cmNlIGZvcm0nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoMSwgc2VsZi51bmhhbmRsZWRfbWVzc2FnZSAlIChmdW5jc3RyLCBhcmdzdHIpKQorCisgICAgZGVmIHZpc2l0X0NhbGwoc2VsZiwgbm9kZSk6CisgICAgICAgIG5hbWUgPSBzZWxmLmNhbGxlZF9ub2RlX25hbWUobm9kZS5mdW5jKQorICAgICAgICBpZiBuYW1lIGFuZCBuYW1lLmVuZHN3aXRoKHNlbGYuZ2V0dmFycykgb3IgbmFtZSBpbiBzZWxmLmNvbnRhaW5zZnVuY3M6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUuYXJnc1swXSwgYXN0LlN0cik6CisgICAgICAgICAgICAgICAgdmFybmFtZSA9IG5vZGUuYXJnc1swXS5zCisgICAgICAgICAgICAgICAgaWYgbmFtZSBpbiBzZWxmLmNvbnRhaW5zZnVuY3MgYW5kIGlzaW5zdGFuY2Uobm9kZS5hcmdzWzFdLCBhc3QuU3RyKToKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFybmFtZSBub3QgaW4gc2VsZi5jb250YWluczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGFpbnNbdmFybmFtZV0gPSBzZXQoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRhaW5zW3Zhcm5hbWVdLmFkZChub2RlLmFyZ3NbMV0ucykKKyAgICAgICAgICAgICAgICBlbHNlOiAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWZlcmVuY2VzLmFkZChub2RlLmFyZ3NbMF0ucykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi53YXJuKG5vZGUuZnVuYywgbm9kZS5hcmdzWzBdKQorICAgICAgICBlbGlmIG5hbWUgaW4gc2VsZi5leGVjZnVuY3M6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUuYXJnc1swXSwgYXN0LlN0cik6CisgICAgICAgICAgICAgICAgc2VsZi52YXJfZXhlY3MuYWRkKG5vZGUuYXJnc1swXS5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLndhcm4obm9kZS5mdW5jLCBub2RlLmFyZ3NbMF0pCisgICAgICAgIGVsaWYgbmFtZSBhbmQgaXNpbnN0YW5jZShub2RlLmZ1bmMsIChhc3QuTmFtZSwgYXN0LkF0dHJpYnV0ZSkpOgorICAgICAgICAgICAgc2VsZi5leGVjcy5hZGQobmFtZSkKKworICAgIGRlZiBjYWxsZWRfbm9kZV9uYW1lKHNlbGYsIG5vZGUpOgorICAgICAgICAiIiJHaXZlbiBhIGNhbGxlZCBub2RlLCByZXR1cm4gaXRzIG9yaWdpbmFsIHN0cmluZyBmb3JtIiIiCisgICAgICAgIGNvbXBvbmVudHMgPSBbXQorICAgICAgICB3aGlsZSBub2RlOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLCBhc3QuQXR0cmlidXRlKToKKyAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFwcGVuZChub2RlLmF0dHIpCisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUudmFsdWUKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBhc3QuTmFtZSk6CisgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hcHBlbmQobm9kZS5pZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gJy4nLmpvaW4ocmV2ZXJzZWQoY29tcG9uZW50cykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgbG9nKToKKyAgICAgICAgc2VsZi52YXJfZXhlY3MgPSBzZXQoKQorICAgICAgICBzZWxmLmNvbnRhaW5zID0ge30KKyAgICAgICAgc2VsZi5leGVjcyA9IHNldCgpCisgICAgICAgIHNlbGYucmVmZXJlbmNlcyA9IHNldCgpCisgICAgICAgIHNlbGYubG9nID0gQnVmZmVyZWRMb2dnZXIoJ0JpdEJha2UuRGF0YS5QeXRob25QYXJzZXInLCBsb2dnaW5nLkRFQlVHLCBsb2cpCisKKyAgICAgICAgc2VsZi51bmhhbmRsZWRfbWVzc2FnZSA9ICJpbiBjYWxsIG9mICVzLCBhcmd1bWVudCAnJXMnIGlzIG5vdCBhIHN0cmluZyBsaXRlcmFsIgorICAgICAgICBzZWxmLnVuaGFuZGxlZF9tZXNzYWdlID0gIndoaWxlIHBhcnNpbmcgJXMsICVzIiAlIChuYW1lLCBzZWxmLnVuaGFuZGxlZF9tZXNzYWdlKQorCisgICAgZGVmIHBhcnNlX3B5dGhvbihzZWxmLCBub2RlKToKKyAgICAgICAgaWYgbm90IG5vZGUgb3Igbm90IG5vZGUuc3RyaXAoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGggPSBoYXNoKHN0cihub2RlKSkKKworICAgICAgICBpZiBoIGluIGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZToKKyAgICAgICAgICAgIHNlbGYucmVmZXJlbmNlcyA9IHNldChjb2RlcGFyc2VyY2FjaGUucHl0aG9uY2FjaGVbaF0ucmVmcykKKyAgICAgICAgICAgIHNlbGYuZXhlY3MgPSBzZXQoY29kZXBhcnNlcmNhY2hlLnB5dGhvbmNhY2hlW2hdLmV4ZWNzKQorICAgICAgICAgICAgc2VsZi5jb250YWlucyA9IHt9CisgICAgICAgICAgICBmb3IgaSBpbiBjb2RlcGFyc2VyY2FjaGUucHl0aG9uY2FjaGVbaF0uY29udGFpbnM6CisgICAgICAgICAgICAgICAgc2VsZi5jb250YWluc1tpXSA9IHNldChjb2RlcGFyc2VyY2FjaGUucHl0aG9uY2FjaGVbaF0uY29udGFpbnNbaV0pCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBoIGluIGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZWV4dHJhczoKKyAgICAgICAgICAgIHNlbGYucmVmZXJlbmNlcyA9IHNldChjb2RlcGFyc2VyY2FjaGUucHl0aG9uY2FjaGVleHRyYXNbaF0ucmVmcykKKyAgICAgICAgICAgIHNlbGYuZXhlY3MgPSBzZXQoY29kZXBhcnNlcmNhY2hlLnB5dGhvbmNhY2hlZXh0cmFzW2hdLmV4ZWNzKQorICAgICAgICAgICAgc2VsZi5jb250YWlucyA9IHt9CisgICAgICAgICAgICBmb3IgaSBpbiBjb2RlcGFyc2VyY2FjaGUucHl0aG9uY2FjaGVleHRyYXNbaF0uY29udGFpbnM6CisgICAgICAgICAgICAgICAgc2VsZi5jb250YWluc1tpXSA9IHNldChjb2RlcGFyc2VyY2FjaGUucHl0aG9uY2FjaGVleHRyYXNbaF0uY29udGFpbnNbaV0pCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBjb2RlID0gY29tcGlsZShjaGVja19pbmRlbnQoc3RyKG5vZGUpKSwgIjxzdHJpbmc+IiwgImV4ZWMiLAorICAgICAgICAgICAgICAgICAgICAgICBhc3QuUHlDRl9PTkxZX0FTVCkKKworICAgICAgICBmb3IgbiBpbiBhc3Qud2Fsayhjb2RlKToKKyAgICAgICAgICAgIGlmIG4uX19jbGFzc19fLl9fbmFtZV9fID09ICJDYWxsIjoKKyAgICAgICAgICAgICAgICBzZWxmLnZpc2l0X0NhbGwobikKKworICAgICAgICBzZWxmLmV4ZWNzLnVwZGF0ZShzZWxmLnZhcl9leGVjcykKKworICAgICAgICBjb2RlcGFyc2VyY2FjaGUucHl0aG9uY2FjaGVleHRyYXNbaF0gPSBjb2RlcGFyc2VyY2FjaGUubmV3UHl0aG9uQ2FjaGVMaW5lKHNlbGYucmVmZXJlbmNlcywgc2VsZi5leGVjcywgc2VsZi5jb250YWlucykKKworY2xhc3MgU2hlbGxQYXJzZXIoKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgbG9nKToKKyAgICAgICAgc2VsZi5mdW5jZGVmcyA9IHNldCgpCisgICAgICAgIHNlbGYuYWxsZXhlY3MgPSBzZXQoKQorICAgICAgICBzZWxmLmV4ZWNzID0gc2V0KCkKKyAgICAgICAgc2VsZi5sb2cgPSBCdWZmZXJlZExvZ2dlcignQml0QmFrZS5EYXRhLiVzJyAlIG5hbWUsIGxvZ2dpbmcuREVCVUcsIGxvZykKKyAgICAgICAgc2VsZi51bmhhbmRsZWRfdGVtcGxhdGUgPSAidW5hYmxlIHRvIGhhbmRsZSBub24tbGl0ZXJhbCBjb21tYW5kICclcyciCisgICAgICAgIHNlbGYudW5oYW5kbGVkX3RlbXBsYXRlID0gIndoaWxlIHBhcnNpbmcgJXMsICVzIiAlIChuYW1lLCBzZWxmLnVuaGFuZGxlZF90ZW1wbGF0ZSkKKworICAgIGRlZiBwYXJzZV9zaGVsbChzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIlBhcnNlIHRoZSBzdXBwbGllZCBzaGVsbCBjb2RlIGluIGEgc3RyaW5nLCByZXR1cm5pbmcgdGhlIGV4dGVybmFsCisgICAgICAgIGNvbW1hbmRzIGl0IGV4ZWN1dGVzLgorICAgICAgICAiIiIKKworICAgICAgICBoID0gaGFzaChzdHIodmFsdWUpKQorCisgICAgICAgIGlmIGggaW4gY29kZXBhcnNlcmNhY2hlLnNoZWxsY2FjaGU6CisgICAgICAgICAgICBzZWxmLmV4ZWNzID0gc2V0KGNvZGVwYXJzZXJjYWNoZS5zaGVsbGNhY2hlW2hdLmV4ZWNzKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXhlY3MKKworICAgICAgICBpZiBoIGluIGNvZGVwYXJzZXJjYWNoZS5zaGVsbGNhY2hlZXh0cmFzOgorICAgICAgICAgICAgc2VsZi5leGVjcyA9IHNldChjb2RlcGFyc2VyY2FjaGUuc2hlbGxjYWNoZWV4dHJhc1toXS5leGVjcykKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmV4ZWNzCisKKyAgICAgICAgc2VsZi5fcGFyc2Vfc2hlbGwodmFsdWUpCisgICAgICAgIHNlbGYuZXhlY3MgPSBzZXQoY21kIGZvciBjbWQgaW4gc2VsZi5hbGxleGVjcyBpZiBjbWQgbm90IGluIHNlbGYuZnVuY2RlZnMpCisKKyAgICAgICAgY29kZXBhcnNlcmNhY2hlLnNoZWxsY2FjaGVleHRyYXNbaF0gPSBjb2RlcGFyc2VyY2FjaGUubmV3U2hlbGxDYWNoZUxpbmUoc2VsZi5leGVjcykKKworICAgICAgICByZXR1cm4gc2VsZi5leGVjcworCisgICAgZGVmIF9wYXJzZV9zaGVsbChzZWxmLCB2YWx1ZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRva2VucywgXyA9IHB5c2h5YWNjLnBhcnNlKHZhbHVlLCBlb2Y9VHJ1ZSwgZGVidWc9RmFsc2UpCisgICAgICAgIGV4Y2VwdCBweXNobGV4Lk5lZWRNb3JlOgorICAgICAgICAgICAgcmFpc2Ugc2hlcnJvcnMuU2hlbGxTeW50YXhFcnJvcigiVW5leHBlY3RlZCBFT0YiKQorCisgICAgICAgIGZvciB0b2tlbiBpbiB0b2tlbnM6CisgICAgICAgICAgICBzZWxmLnByb2Nlc3NfdG9rZW5zKHRva2VuKQorCisgICAgZGVmIHByb2Nlc3NfdG9rZW5zKHNlbGYsIHRva2Vucyk6CisgICAgICAgICIiIlByb2Nlc3MgYSBzdXBwbGllZCBwb3J0aW9uIG9mIHRoZSBzeW50YXggdHJlZSBhcyByZXR1cm5lZCBieQorICAgICAgICBweXNoeWFjYy5wYXJzZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZGVmIGZ1bmN0aW9uX2RlZmluaXRpb24odmFsdWUpOgorICAgICAgICAgICAgc2VsZi5mdW5jZGVmcy5hZGQodmFsdWUubmFtZSkKKyAgICAgICAgICAgIHJldHVybiBbdmFsdWUuYm9keV0sIE5vbmUKKworICAgICAgICBkZWYgY2FzZV9jbGF1c2UodmFsdWUpOgorICAgICAgICAgICAgIyBFbGVtZW50IDAgb2YgZWFjaCBpdGVtIGluIHRoZSBjYXNlIGlzIHRoZSBsaXN0IG9mIHBhdHRlcm5zLCBhbmQKKyAgICAgICAgICAgICMgRWxlbWVudCAxIG9mIGVhY2ggaXRlbSBpbiB0aGUgY2FzZSBpcyB0aGUgbGlzdCBvZiBjb21tYW5kcyB0byBiZQorICAgICAgICAgICAgIyBleGVjdXRlZCB3aGVuIHRoYXQgcGF0dGVybiBtYXRjaGVzLgorICAgICAgICAgICAgd29yZHMgPSBjaGFpbigqW2l0ZW1bMF0gZm9yIGl0ZW0gaW4gdmFsdWUuaXRlbXNdKQorICAgICAgICAgICAgY21kcyAgPSBjaGFpbigqW2l0ZW1bMV0gZm9yIGl0ZW0gaW4gdmFsdWUuaXRlbXNdKQorICAgICAgICAgICAgcmV0dXJuIGNtZHMsIHdvcmRzCisKKyAgICAgICAgZGVmIGlmX2NsYXVzZSh2YWx1ZSk6CisgICAgICAgICAgICBtYWluID0gY2hhaW4odmFsdWUuY29uZCwgdmFsdWUuaWZfY21kcykKKyAgICAgICAgICAgIHJlc3QgPSB2YWx1ZS5lbHNlX2NtZHMKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzdCwgdHVwbGUpIGFuZCByZXN0WzBdID09ICJlbGlmIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hhaW4obWFpbiwgaWZfY2xhdXNlKHJlc3RbMV0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hhaW4obWFpbiwgcmVzdCkKKworICAgICAgICBkZWYgc2ltcGxlX2NvbW1hbmQodmFsdWUpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIGNoYWluKHZhbHVlLndvcmRzLCAoYXNzaWduWzFdIGZvciBhc3NpZ24gaW4gdmFsdWUuYXNzaWducykpCisKKyAgICAgICAgdG9rZW5faGFuZGxlcnMgPSB7CisgICAgICAgICAgICAiYW5kX29yIjogbGFtYmRhIHg6ICgoeC5sZWZ0LCB4LnJpZ2h0KSwgTm9uZSksCisgICAgICAgICAgICAiYXN5bmMiOiBsYW1iZGEgeDogKFt4XSwgTm9uZSksCisgICAgICAgICAgICAiYnJhY2VfZ3JvdXAiOiBsYW1iZGEgeDogKHguY21kcywgTm9uZSksCisgICAgICAgICAgICAiZm9yX2NsYXVzZSI6IGxhbWJkYSB4OiAoeC5jbWRzLCB4Lml0ZW1zKSwKKyAgICAgICAgICAgICJmdW5jdGlvbl9kZWZpbml0aW9uIjogZnVuY3Rpb25fZGVmaW5pdGlvbiwKKyAgICAgICAgICAgICJpZl9jbGF1c2UiOiBsYW1iZGEgeDogKGlmX2NsYXVzZSh4KSwgTm9uZSksCisgICAgICAgICAgICAicGlwZWxpbmUiOiBsYW1iZGEgeDogKHguY29tbWFuZHMsIE5vbmUpLAorICAgICAgICAgICAgInJlZGlyZWN0X2xpc3QiOiBsYW1iZGEgeDogKFt4LmNtZF0sIE5vbmUpLAorICAgICAgICAgICAgInN1YnNoZWxsIjogbGFtYmRhIHg6ICh4LmNtZHMsIE5vbmUpLAorICAgICAgICAgICAgIndoaWxlX2NsYXVzZSI6IGxhbWJkYSB4OiAoY2hhaW4oeC5jb25kaXRpb24sIHguY21kcyksIE5vbmUpLAorICAgICAgICAgICAgInVudGlsX2NsYXVzZSI6IGxhbWJkYSB4OiAoY2hhaW4oeC5jb25kaXRpb24sIHguY21kcyksIE5vbmUpLAorICAgICAgICAgICAgInNpbXBsZV9jb21tYW5kIjogc2ltcGxlX2NvbW1hbmQsCisgICAgICAgICAgICAiY2FzZV9jbGF1c2UiOiBjYXNlX2NsYXVzZSwKKyAgICAgICAgfQorCisgICAgICAgIGZvciB0b2tlbiBpbiB0b2tlbnM6CisgICAgICAgICAgICBuYW1lLCB2YWx1ZSA9IHRva2VuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9yZV90b2tlbnMsIHdvcmRzID0gdG9rZW5faGFuZGxlcnNbbmFtZV0odmFsdWUpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiVW5zdXBwb3J0ZWQgdG9rZW4gdHlwZSAiICsgbmFtZSkKKworICAgICAgICAgICAgaWYgbW9yZV90b2tlbnM6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX3Rva2Vucyhtb3JlX3Rva2VucykKKworICAgICAgICAgICAgaWYgd29yZHM6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX3dvcmRzKHdvcmRzKQorCisgICAgZGVmIHByb2Nlc3Nfd29yZHMoc2VsZiwgd29yZHMpOgorICAgICAgICAiIiJQcm9jZXNzIGEgc2V0IG9mICd3b3JkcycgaW4gcHlzaHlhY2MgcGFybGFuY2UsIHdoaWNoIGluY2x1ZGVzCisgICAgICAgIGV4dHJhY3Rpb24gb2YgZXhlY3V0ZWQgY29tbWFuZHMgZnJvbSAkKCkgYmxvY2tzLCBhcyB3ZWxsIGFzIGdyYWJiaW5nCisgICAgICAgIHRoZSBjb21tYW5kIG5hbWUgYXJndW1lbnQuCisgICAgICAgICIiIgorCisgICAgICAgIHdvcmRzID0gbGlzdCh3b3JkcykKKyAgICAgICAgZm9yIHdvcmQgaW4gbGlzdCh3b3Jkcyk6CisgICAgICAgICAgICB3dHJlZSA9IHB5c2hsZXgubWFrZV93b3JkdHJlZSh3b3JkWzFdKQorICAgICAgICAgICAgZm9yIHBhcnQgaW4gd3RyZWU6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocGFydCwgbGlzdCk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBwYXJ0WzBdIGluICgnYCcsICckKCcpOgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gcHlzaGxleC53b3JkdHJlZV9hc19zdHJpbmcocGFydFsxOi0xXSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2Vfc2hlbGwoY29tbWFuZCkKKworICAgICAgICAgICAgICAgICAgICBpZiB3b3JkWzBdIGluICgiY21kX25hbWUiLCAiY21kX3dvcmQiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHdvcmQgaW4gd29yZHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZHMucmVtb3ZlKHdvcmQpCisKKyAgICAgICAgdXNldG9rZW4gPSBGYWxzZQorICAgICAgICBmb3Igd29yZCBpbiB3b3JkczoKKyAgICAgICAgICAgIGlmIHdvcmRbMF0gaW4gKCJjbWRfbmFtZSIsICJjbWRfd29yZCIpIG9yIFwKKyAgICAgICAgICAgICAgICh1c2V0b2tlbiBhbmQgd29yZFswXSA9PSAiVE9LRU4iKToKKyAgICAgICAgICAgICAgICBpZiAiPSIgaW4gd29yZFsxXToKKyAgICAgICAgICAgICAgICAgICAgdXNldG9rZW4gPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBjbWQgPSB3b3JkWzFdCisgICAgICAgICAgICAgICAgaWYgY21kLnN0YXJ0c3dpdGgoIiQiKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoMSwgc2VsZi51bmhhbmRsZWRfdGVtcGxhdGUgJSBjbWQpCisgICAgICAgICAgICAgICAgZWxpZiBjbWQgPT0gImV2YWwiOgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gIiAiLmpvaW4od29yZCBmb3IgXywgd29yZCBpbiB3b3Jkc1sxOl0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlX3NoZWxsKGNvbW1hbmQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hbGxleGVjcy5hZGQoY21kKQorICAgICAgICAgICAgICAgIGJyZWFrCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NvbW1hbmQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NvbW1hbmQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk4YzFkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29tbWFuZC5weQpAQCAtMCwwICsxLDQ2MyBAQAorIiIiCitCaXRCYWtlICdDb21tYW5kJyBtb2R1bGUKKworUHJvdmlkZSBhbiBpbnRlcmZhY2UgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgYml0YmFrZSBzZXJ2ZXIgdGhyb3VnaCAnY29tbWFuZHMnCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyAgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyIiIgorVGhlIGJpdGJha2Ugc2VydmVyIHRha2VzICdjb21tYW5kcycgZnJvbSBpdHMgVUkvY29tbWFuZGxpbmUuCitDb21tYW5kcyBhcmUgZWl0aGVyIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cy4KK0FzeW5jIGNvbW1hbmRzIHJldHVybiBkYXRhIHRvIHRoZSBjbGllbnQgaW4gdGhlIGZvcm0gb2YgZXZlbnRzLgorU3luYyBjb21tYW5kcyBtdXN0IG9ubHkgcmV0dXJuIGRhdGEgdGhyb3VnaCB0aGUgZnVuY3Rpb24gcmV0dXJuIHZhbHVlCithbmQgbXVzdCBub3QgdHJpZ2dlciBldmVudHMsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuCitDb21tYW5kcyBhcmUgcXVldWVkIGluIGEgQ29tbWFuZFF1ZXVlCisiIiIKKworaW1wb3J0IGJiLmV2ZW50CitpbXBvcnQgYmIuY29va2VyCisKK2NsYXNzIENvbW1hbmRDb21wbGV0ZWQoYmIuZXZlbnQuRXZlbnQpOgorICAgIHBhc3MKKworY2xhc3MgQ29tbWFuZEV4aXQoYmIuZXZlbnQuRXZlbnQpOgorICAgIGRlZiAgX19pbml0X18oc2VsZiwgZXhpdGNvZGUpOgorICAgICAgICBiYi5ldmVudC5FdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmV4aXRjb2RlID0gaW50KGV4aXRjb2RlKQorCitjbGFzcyBDb21tYW5kRmFpbGVkKENvbW1hbmRFeGl0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHNlbGYuZXJyb3IgPSBtZXNzYWdlCisgICAgICAgIENvbW1hbmRFeGl0Ll9faW5pdF9fKHNlbGYsIDEpCisKK2NsYXNzIENvbW1hbmRFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgQ29tbWFuZDoKKyAgICAiIiIKKyAgICBBIHF1ZXVlIG9mIGFzeW5jaHJvbm91cyBjb21tYW5kcyBmb3IgYml0YmFrZQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb29rZXIpOgorICAgICAgICBzZWxmLmNvb2tlciA9IGNvb2tlcgorICAgICAgICBzZWxmLmNtZHNfc3luYyA9IENvbW1hbmRzU3luYygpCisgICAgICAgIHNlbGYuY21kc19hc3luYyA9IENvbW1hbmRzQXN5bmMoKQorCisgICAgICAgICMgRklYTUUgQWRkIGxvY2sgZm9yIHRoaXMKKyAgICAgICAgc2VsZi5jdXJyZW50QXN5bmNDb21tYW5kID0gTm9uZQorCisgICAgZGVmIHJ1bkNvbW1hbmQoc2VsZiwgY29tbWFuZGxpbmUsIHJvX29ubHkgPSBGYWxzZSk6CisgICAgICAgIGNvbW1hbmQgPSBjb21tYW5kbGluZS5wb3AoMCkKKyAgICAgICAgaWYgaGFzYXR0cihDb21tYW5kc1N5bmMsIGNvbW1hbmQpOgorICAgICAgICAgICAgIyBDYW4gcnVuIHN5bmNocm9ub3VzIGNvbW1hbmRzIHN0cmFpZ2h0IGF3YXkKKyAgICAgICAgICAgIGNvbW1hbmRfbWV0aG9kID0gZ2V0YXR0cihzZWxmLmNtZHNfc3luYywgY29tbWFuZCkKKyAgICAgICAgICAgIGlmIHJvX29ubHk6CisgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoY29tbWFuZF9tZXRob2QsICdyZWFkb25seScpIG9yIEZhbHNlID09IGdldGF0dHIoY29tbWFuZF9tZXRob2QsICdyZWFkb25seScpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSwgIk5vdCBhYmxlIHRvIGV4ZWN1dGUgbm90IHJlYWRvbmx5IGNvbW1hbmRzIGluIHJlYWRvbmx5IG1vZGUiCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgZ2V0YXR0cihjb21tYW5kX21ldGhvZCwgJ25lZWRjb25maWcnLCBGYWxzZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29va2VyLnVwZGF0ZUNhY2hlU3luYygpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tbWFuZF9tZXRob2Qoc2VsZiwgY29tbWFuZGxpbmUpCisgICAgICAgICAgICBleGNlcHQgQ29tbWFuZEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSwgZXhjLmFyZ3NbMF0KKyAgICAgICAgICAgIGV4Y2VwdCAoRXhjZXB0aW9uLCBTeXN0ZW1FeGl0KToKKyAgICAgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCwgTm9uZQorICAgICAgICBpZiBzZWxmLmN1cnJlbnRBc3luY0NvbW1hbmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZSwgIkJ1c3kgKCVzIGluIHByb2dyZXNzKSIgJSBzZWxmLmN1cnJlbnRBc3luY0NvbW1hbmRbMF0KKyAgICAgICAgaWYgY29tbWFuZCBub3QgaW4gQ29tbWFuZHNBc3luYy5fX2RpY3RfXzoKKyAgICAgICAgICAgIHJldHVybiBOb25lLCAiTm8gc3VjaCBjb21tYW5kIgorICAgICAgICBzZWxmLmN1cnJlbnRBc3luY0NvbW1hbmQgPSAoY29tbWFuZCwgY29tbWFuZGxpbmUpCisgICAgICAgIHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24uc2VydmVyX3JlZ2lzdGVyX2lkbGVjYWxsYmFjayhzZWxmLmNvb2tlci5ydW5Db21tYW5kcywgc2VsZi5jb29rZXIpCisgICAgICAgIHJldHVybiBUcnVlLCBOb25lCisKKyAgICBkZWYgcnVuQXN5bmNDb21tYW5kKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLmNvb2tlci5zdGF0ZSBpbiAoYmIuY29va2VyLnN0YXRlLmVycm9yLCBiYi5jb29rZXIuc3RhdGUuc2h1dGRvd24sIGJiLmNvb2tlci5zdGF0ZS5mb3JjZXNodXRkb3duKToKKyAgICAgICAgICAgICAgICAjIHVwZGF0ZUNhY2hlIHdpbGwgdHJpZ2dlciBhIHNodXRkb3duIG9mIHRoZSBwYXJzZXIKKyAgICAgICAgICAgICAgICAjIGFuZCB0aGVuIHJhaXNlIEJCSGFuZGxlZEV4Y2VwdGlvbiB0cmlnZ2VyaW5nIGFuIGV4aXQKKyAgICAgICAgICAgICAgICBzZWxmLmNvb2tlci51cGRhdGVDYWNoZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBpZiBzZWxmLmN1cnJlbnRBc3luY0NvbW1hbmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgKGNvbW1hbmQsIG9wdGlvbnMpID0gc2VsZi5jdXJyZW50QXN5bmNDb21tYW5kCisgICAgICAgICAgICAgICAgY29tbWFuZG1ldGhvZCA9IGdldGF0dHIoQ29tbWFuZHNBc3luYywgY29tbWFuZCkKKyAgICAgICAgICAgICAgICBuZWVkY2FjaGUgPSBnZXRhdHRyKCBjb21tYW5kbWV0aG9kLCAibmVlZGNhY2hlIiApCisgICAgICAgICAgICAgICAgaWYgbmVlZGNhY2hlIGFuZCBzZWxmLmNvb2tlci5zdGF0ZSAhPSBiYi5jb29rZXIuc3RhdGUucnVubmluZzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb29rZXIudXBkYXRlQ2FjaGUoKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRtZXRob2Qoc2VsZi5jbWRzX2FzeW5jLCBzZWxmLCBvcHRpb25zKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdCBhcyBleGM6CisgICAgICAgICAgICBzZWxmLmZpbmlzaEFzeW5jQ29tbWFuZCgiSW50ZXJydXB0ZWQiKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0IGFzIGV4YzoKKyAgICAgICAgICAgIGFyZyA9IGV4Yy5hcmdzWzBdCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGFyZywgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgc2VsZi5maW5pc2hBc3luY0NvbW1hbmQoYXJnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaEFzeW5jQ29tbWFuZCgiRXhpdGVkIHdpdGggJXMiICUgYXJnKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleGMsIGJiLkJCSGFuZGxlZEV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgc2VsZi5maW5pc2hBc3luY0NvbW1hbmQoIiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmluaXNoQXN5bmNDb21tYW5kKHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBmaW5pc2hBc3luY0NvbW1hbmQoc2VsZiwgbXNnPU5vbmUsIGNvZGU9Tm9uZSk6CisgICAgICAgIGlmIG1zZyBvciBtc2cgPT0gIiI6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKENvbW1hbmRGYWlsZWQobXNnKSwgc2VsZi5jb29rZXIuZXhwYW5kZWRfZGF0YSkKKyAgICAgICAgZWxpZiBjb2RlOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShDb21tYW5kRXhpdChjb2RlKSwgc2VsZi5jb29rZXIuZXhwYW5kZWRfZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoQ29tbWFuZENvbXBsZXRlZCgpLCBzZWxmLmNvb2tlci5leHBhbmRlZF9kYXRhKQorICAgICAgICBzZWxmLmN1cnJlbnRBc3luY0NvbW1hbmQgPSBOb25lCisgICAgICAgIHNlbGYuY29va2VyLmZpbmlzaGNvbW1hbmQoKQorCitjbGFzcyBDb21tYW5kc1N5bmM6CisgICAgIiIiCisgICAgQSBjbGFzcyBvZiBzeW5jaHJvbm91cyBjb21tYW5kcworICAgIFRoZXNlIHNob3VsZCBydW4gcXVpY2tseSBzbyBhcyBub3QgdG8gaHVydCBpbnRlcmFjdGl2ZSBwZXJmb3JtYW5jZS4KKyAgICBUaGVzZSBtdXN0IG5vdCBpbmZsdWVuY2UgYW55IHJ1bm5pbmcgc3luY2hyb25vdXMgY29tbWFuZC4KKyAgICAiIiIKKworICAgIGRlZiBzdGF0ZVNodXRkb3duKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBUcmlnZ2VyIGNvb2tlciAnc2h1dGRvd24nIG1vZGUKKyAgICAgICAgIiIiCisgICAgICAgIGNvbW1hbmQuY29va2VyLnNodXRkb3duKEZhbHNlKQorCisgICAgZGVmIHN0YXRlRm9yY2VTaHV0ZG93bihzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgU3RvcCB0aGUgY29va2VyCisgICAgICAgICIiIgorICAgICAgICBjb21tYW5kLmNvb2tlci5zaHV0ZG93bihUcnVlKQorCisgICAgZGVmIGdldEFsbEtleXNXaXRoRmxhZ3Moc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgYSBkdW1wIG9mIHRoZSBnbG9iYWwgc3RhdGUuIENhbGwgd2l0aAorICAgICAgICB2YXJpYWJsZSBmbGFncyB0byBiZSByZXRyaWV2ZWQgYXMgcGFyYW1zLgorICAgICAgICAiIiIKKyAgICAgICAgZmxhZ2xpc3QgPSBwYXJhbXNbMF0KKyAgICAgICAgcmV0dXJuIGNvbW1hbmQuY29va2VyLmdldEFsbEtleXNXaXRoRmxhZ3MoZmxhZ2xpc3QpCisgICAgZ2V0QWxsS2V5c1dpdGhGbGFncy5yZWFkb25seSA9IFRydWUKKworICAgIGRlZiBnZXRWYXJpYWJsZShzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVhZCB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZSBmcm9tIGRhdGEKKyAgICAgICAgIiIiCisgICAgICAgIHZhcm5hbWUgPSBwYXJhbXNbMF0KKyAgICAgICAgZXhwYW5kID0gVHJ1ZQorICAgICAgICBpZiBsZW4ocGFyYW1zKSA+IDE6CisgICAgICAgICAgICBleHBhbmQgPSAocGFyYW1zWzFdID09ICJUcnVlIikKKworICAgICAgICByZXR1cm4gY29tbWFuZC5jb29rZXIuZGF0YS5nZXRWYXIodmFybmFtZSwgZXhwYW5kKQorICAgIGdldFZhcmlhYmxlLnJlYWRvbmx5ID0gVHJ1ZQorCisgICAgZGVmIHNldFZhcmlhYmxlKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBTZXQgdGhlIHZhbHVlIG9mIHZhcmlhYmxlIGluIGRhdGEKKyAgICAgICAgIiIiCisgICAgICAgIHZhcm5hbWUgPSBwYXJhbXNbMF0KKyAgICAgICAgdmFsdWUgPSBzdHIocGFyYW1zWzFdKQorICAgICAgICBjb21tYW5kLmNvb2tlci5kYXRhLnNldFZhcih2YXJuYW1lLCB2YWx1ZSkKKworICAgIGRlZiBzZXRDb25maWcoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldCB0aGUgdmFsdWUgb2YgdmFyaWFibGUgaW4gY29uZmlndXJhdGlvbgorICAgICAgICAiIiIKKyAgICAgICAgdmFybmFtZSA9IHBhcmFtc1swXQorICAgICAgICB2YWx1ZSA9IHN0cihwYXJhbXNbMV0pCisgICAgICAgIHNldGF0dHIoY29tbWFuZC5jb29rZXIuY29uZmlndXJhdGlvbiwgdmFybmFtZSwgdmFsdWUpCisKKyAgICBkZWYgZW5hYmxlRGF0YVRyYWNraW5nKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBFbmFibGUgaGlzdG9yeSB0cmFja2luZyBmb3IgdmFyaWFibGVzCisgICAgICAgICIiIgorICAgICAgICBjb21tYW5kLmNvb2tlci5lbmFibGVEYXRhVHJhY2tpbmcoKQorCisgICAgZGVmIGRpc2FibGVEYXRhVHJhY2tpbmcoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIERpc2FibGUgaGlzdG9yeSB0cmFja2luZyBmb3IgdmFyaWFibGVzCisgICAgICAgICIiIgorICAgICAgICBjb21tYW5kLmNvb2tlci5kaXNhYmxlRGF0YVRyYWNraW5nKCkKKworICAgIGRlZiBzZXRQcmVQb3N0Q29uZkZpbGVzKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgIHByZWZpbGVzID0gcGFyYW1zWzBdLnNwbGl0KCkKKyAgICAgICAgcG9zdGZpbGVzID0gcGFyYW1zWzFdLnNwbGl0KCkKKyAgICAgICAgY29tbWFuZC5jb29rZXIuY29uZmlndXJhdGlvbi5wcmVmaWxlID0gcHJlZmlsZXMKKyAgICAgICAgY29tbWFuZC5jb29rZXIuY29uZmlndXJhdGlvbi5wb3N0ZmlsZSA9IHBvc3RmaWxlcworICAgIHNldFByZVBvc3RDb25mRmlsZXMubmVlZGNvbmZpZyA9IEZhbHNlCisKKyAgICBkZWYgZ2V0Q3B1Q291bnQoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCB0aGUgQ1BVIGNvdW50IG9uIHRoZSBiaXRiYWtlIHNlcnZlcgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGJiLnV0aWxzLmNwdV9jb3VudCgpCisgICAgZ2V0Q3B1Q291bnQucmVhZG9ubHkgPSBUcnVlCisgICAgZ2V0Q3B1Q291bnQubmVlZGNvbmZpZyA9IEZhbHNlCisKKyAgICBkZWYgbWF0Y2hGaWxlKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgIGZNYXRjaCA9IHBhcmFtc1swXQorICAgICAgICByZXR1cm4gY29tbWFuZC5jb29rZXIubWF0Y2hGaWxlKGZNYXRjaCkKKyAgICBtYXRjaEZpbGUubmVlZGNvbmZpZyA9IEZhbHNlCisKKyAgICBkZWYgZ2VuZXJhdGVOZXdJbWFnZShzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICBpbWFnZSA9IHBhcmFtc1swXQorICAgICAgICBiYXNlX2ltYWdlID0gcGFyYW1zWzFdCisgICAgICAgIHBhY2thZ2VfcXVldWUgPSBwYXJhbXNbMl0KKyAgICAgICAgdGltZXN0YW1wID0gcGFyYW1zWzNdCisgICAgICAgIGRlc2NyaXB0aW9uID0gcGFyYW1zWzRdCisgICAgICAgIHJldHVybiBjb21tYW5kLmNvb2tlci5nZW5lcmF0ZU5ld0ltYWdlKGltYWdlLCBiYXNlX2ltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9xdWV1ZSwgdGltZXN0YW1wLCBkZXNjcmlwdGlvbikKKworICAgIGRlZiBlbnN1cmVEaXIoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgZGlyZWN0b3J5ID0gcGFyYW1zWzBdCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkaXJlY3RvcnkpCisgICAgZW5zdXJlRGlyLm5lZWRjb25maWcgPSBGYWxzZQorCisgICAgZGVmIHNldFZhckZpbGUoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFNhdmUgYSB2YXJpYWJsZSBpbiBhIGZpbGU7IHVzZWQgZm9yIHNhdmluZyBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAiIiIKKyAgICAgICAgdmFyID0gcGFyYW1zWzBdCisgICAgICAgIHZhbCA9IHBhcmFtc1sxXQorICAgICAgICBkZWZhdWx0X2ZpbGUgPSBwYXJhbXNbMl0KKyAgICAgICAgb3AgPSBwYXJhbXNbM10KKyAgICAgICAgY29tbWFuZC5jb29rZXIubW9kaWZ5Q29uZmlndXJhdGlvblZhcih2YXIsIHZhbCwgZGVmYXVsdF9maWxlLCBvcCkKKyAgICBzZXRWYXJGaWxlLm5lZWRjb25maWcgPSBGYWxzZQorCisgICAgZGVmIHJlbW92ZVZhckZpbGUoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbW92ZSBhIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGZyb20gYSBmaWxlCisgICAgICAgICIiIgorICAgICAgICB2YXIgPSBwYXJhbXNbMF0KKyAgICAgICAgY29tbWFuZC5jb29rZXIucmVtb3ZlQ29uZmlndXJhdGlvblZhcih2YXIpCisgICAgcmVtb3ZlVmFyRmlsZS5uZWVkY29uZmlnID0gRmFsc2UKKworICAgIGRlZiBjcmVhdGVDb25maWdGaWxlKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgYW4gZXh0cmEgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICIiIgorICAgICAgICBuYW1lID0gcGFyYW1zWzBdCisgICAgICAgIGNvbW1hbmQuY29va2VyLmNyZWF0ZUNvbmZpZ0ZpbGUobmFtZSkKKyAgICBjcmVhdGVDb25maWdGaWxlLm5lZWRjb25maWcgPSBGYWxzZQorCisgICAgZGVmIHNldEV2ZW50TWFzayhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICBoYW5kbGVyTnVtID0gcGFyYW1zWzBdCisgICAgICAgIGxsZXZlbCA9IHBhcmFtc1sxXQorICAgICAgICBkZWJ1Z19kb21haW5zID0gcGFyYW1zWzJdCisgICAgICAgIG1hc2sgPSBwYXJhbXNbM10KKyAgICAgICAgcmV0dXJuIGJiLmV2ZW50LnNldF9VSUhtYXNrKGhhbmRsZXJOdW0sIGxsZXZlbCwgZGVidWdfZG9tYWlucywgbWFzaykKKyAgICBzZXRFdmVudE1hc2submVlZGNvbmZpZyA9IEZhbHNlCisKKyAgICBkZWYgc2V0RmVhdHVyZXMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldCB0aGUgY29va2VyIGZlYXR1cmVzIHRvIGluY2x1ZGUgdGhlIHBhc3NlZCBsaXN0IG9mIGZlYXR1cmVzCisgICAgICAgICIiIgorICAgICAgICBmZWF0dXJlcyA9IHBhcmFtc1swXQorICAgICAgICBjb21tYW5kLmNvb2tlci5zZXRGZWF0dXJlcyhmZWF0dXJlcykKKyAgICBzZXRGZWF0dXJlcy5uZWVkY29uZmlnID0gRmFsc2UKKyAgICAjIGFsdGhvdWdoIHdlIGNoYW5nZSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGNvb2tlciwgdGhpcyBpcyB0cmFuc3BhcmVudCBzaW5jZQorICAgICMgd2UgYWx3YXlzIHRha2UgYW5kIGxlYXZlIHRoZSBjb29rZXIgaW4gc3RhdGUuaW5pdGlhbAorICAgIHNldEZlYXR1cmVzLnJlYWRvbmx5ID0gVHJ1ZQorCisgICAgZGVmIHVwZGF0ZUNvbmZpZyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICBvcHRpb25zID0gcGFyYW1zWzBdCisgICAgICAgIGVudmlyb25tZW50ID0gcGFyYW1zWzFdCisgICAgICAgIGNvbW1hbmQuY29va2VyLnVwZGF0ZUNvbmZpZ09wdHMob3B0aW9ucywgZW52aXJvbm1lbnQpCisgICAgdXBkYXRlQ29uZmlnLm5lZWRjb25maWcgPSBGYWxzZQorCitjbGFzcyBDb21tYW5kc0FzeW5jOgorICAgICIiIgorICAgIEEgY2xhc3Mgb2YgYXN5bmNocm9ub3VzIGNvbW1hbmRzCisgICAgVGhlc2UgZnVuY3Rpb25zIGNvbW11bmljYXRlIHZpYSBnZW5lcmF0ZWQgZXZlbnRzLgorICAgIEFueSBmdW5jdGlvbiB0aGF0IHJlcXVpcmVzIG1ldGFkYXRhIHBhcnNpbmcgc2hvdWxkIGJlIGhlcmUuCisgICAgIiIiCisKKyAgICBkZWYgYnVpbGRGaWxlKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBCdWlsZCBhIHNpbmdsZSBzcGVjaWZpZWQgLmJiIGZpbGUKKyAgICAgICAgIiIiCisgICAgICAgIGJmaWxlID0gcGFyYW1zWzBdCisgICAgICAgIHRhc2sgPSBwYXJhbXNbMV0KKworICAgICAgICBjb21tYW5kLmNvb2tlci5idWlsZEZpbGUoYmZpbGUsIHRhc2spCisgICAgYnVpbGRGaWxlLm5lZWRjYWNoZSA9IEZhbHNlCisKKyAgICBkZWYgYnVpbGRUYXJnZXRzKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBCdWlsZCBhIHNldCBvZiB0YXJnZXRzCisgICAgICAgICIiIgorICAgICAgICBwa2dzX3RvX2J1aWxkID0gcGFyYW1zWzBdCisgICAgICAgIHRhc2sgPSBwYXJhbXNbMV0KKworICAgICAgICBjb21tYW5kLmNvb2tlci5idWlsZFRhcmdldHMocGtnc190b19idWlsZCwgdGFzaykKKyAgICBidWlsZFRhcmdldHMubmVlZGNhY2hlID0gVHJ1ZQorCisgICAgZGVmIGdlbmVyYXRlRGVwVHJlZUV2ZW50KHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhbiBldmVudCBjb250YWluaW5nIHRoZSBkZXBlbmRlbmN5IGluZm9ybWF0aW9uCisgICAgICAgICIiIgorICAgICAgICBwa2dzX3RvX2J1aWxkID0gcGFyYW1zWzBdCisgICAgICAgIHRhc2sgPSBwYXJhbXNbMV0KKworICAgICAgICBjb21tYW5kLmNvb2tlci5nZW5lcmF0ZURlcFRyZWVFdmVudChwa2dzX3RvX2J1aWxkLCB0YXNrKQorICAgICAgICBjb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZCgpCisgICAgZ2VuZXJhdGVEZXBUcmVlRXZlbnQubmVlZGNhY2hlID0gVHJ1ZQorCisgICAgZGVmIGdlbmVyYXRlRG90R3JhcGgoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIER1bXAgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiB0byBkaXNrIGFzIC5kb3QgZmlsZXMKKyAgICAgICAgIiIiCisgICAgICAgIHBrZ3NfdG9fYnVpbGQgPSBwYXJhbXNbMF0KKyAgICAgICAgdGFzayA9IHBhcmFtc1sxXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLmdlbmVyYXRlRG90R3JhcGhGaWxlcyhwa2dzX3RvX2J1aWxkLCB0YXNrKQorICAgICAgICBjb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZCgpCisgICAgZ2VuZXJhdGVEb3RHcmFwaC5uZWVkY2FjaGUgPSBUcnVlCisKKyAgICBkZWYgZ2VuZXJhdGVUYXJnZXRzVHJlZShzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgR2VuZXJhdGUgYSB0cmVlIG9mIGJ1aWxkYWJsZSB0YXJnZXRzLgorICAgICAgICBJZiBrbGFzcyBpcyBwcm92aWRlZCBlbnN1cmUgYWxsIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBjbGFzcyBhcmUKKyAgICAgICAgaW5jbHVkZWQgaW4gdGhlIHBhY2thZ2UgbGlzdC4KKyAgICAgICAgSWYgcGtnX2xpc3QgcHJvdmlkZWQgdXNlIHRoYXQgbGlzdCAocGx1cyBhbnkgZXh0cmFzIGJyb3VnaHQgaW4gYnkKKyAgICAgICAga2xhc3MpIHJhdGhlciB0aGFuIGdlbmVyYXRpbmcgYSB0cmVlIGZvciBhbGwgcGFja2FnZXMuCisgICAgICAgICIiIgorICAgICAgICBrbGFzcyA9IHBhcmFtc1swXQorICAgICAgICBwa2dfbGlzdCA9IHBhcmFtc1sxXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLmdlbmVyYXRlVGFyZ2V0c1RyZWUoa2xhc3MsIHBrZ19saXN0KQorICAgICAgICBjb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZCgpCisgICAgZ2VuZXJhdGVUYXJnZXRzVHJlZS5uZWVkY2FjaGUgPSBUcnVlCisKKyAgICBkZWYgZmluZENvcmVCYXNlRmlsZXMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgY2VydGFpbiBmaWxlcyBpbiBDT1JFQkFTRSBkaXJlY3RvcnkuIGkuZS4gTGF5ZXJzCisgICAgICAgICIiIgorICAgICAgICBzdWJkaXIgPSBwYXJhbXNbMF0KKyAgICAgICAgZmlsZW5hbWUgPSBwYXJhbXNbMV0KKworICAgICAgICBjb21tYW5kLmNvb2tlci5maW5kQ29yZUJhc2VGaWxlcyhzdWJkaXIsIGZpbGVuYW1lKQorICAgICAgICBjb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZCgpCisgICAgZmluZENvcmVCYXNlRmlsZXMubmVlZGNhY2hlID0gRmFsc2UKKworICAgIGRlZiBmaW5kQ29uZmlnRmlsZXMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgY29uZmlnIGZpbGVzIHdoaWNoIHByb3ZpZGUgYXBwcm9wcmlhdGUgdmFsdWVzCisgICAgICAgIGZvciB0aGUgcGFzc2VkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuIGkuZS4gTUFDSElORQorICAgICAgICAiIiIKKyAgICAgICAgdmFybmFtZSA9IHBhcmFtc1swXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLmZpbmRDb25maWdGaWxlcyh2YXJuYW1lKQorICAgICAgICBjb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZCgpCisgICAgZmluZENvbmZpZ0ZpbGVzLm5lZWRjYWNoZSA9IEZhbHNlCisKKyAgICBkZWYgZmluZEZpbGVzTWF0Y2hpbmdJbkRpcihzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCBpbXBsZW1lbnRhdGlvbiBmaWxlcyBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIHBhdHRlcm4KKyAgICAgICAgaW4gdGhlIHJlcXVlc3RlZCBzdWJkaXJlY3Rvcnkgb2YgYSBCQlBBVEgKKyAgICAgICAgIiIiCisgICAgICAgIHBhdHRlcm4gPSBwYXJhbXNbMF0KKyAgICAgICAgZGlyZWN0b3J5ID0gcGFyYW1zWzFdCisKKyAgICAgICAgY29tbWFuZC5jb29rZXIuZmluZEZpbGVzTWF0Y2hpbmdJbkRpcihwYXR0ZXJuLCBkaXJlY3RvcnkpCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBmaW5kRmlsZXNNYXRjaGluZ0luRGlyLm5lZWRjYWNoZSA9IEZhbHNlCisKKyAgICBkZWYgZmluZENvbmZpZ0ZpbGVQYXRoKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBGaW5kIHRoZSBwYXRoIG9mIHRoZSByZXF1ZXN0ZWQgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICIiIgorICAgICAgICBjb25maWdmaWxlID0gcGFyYW1zWzBdCisKKyAgICAgICAgY29tbWFuZC5jb29rZXIuZmluZENvbmZpZ0ZpbGVQYXRoKGNvbmZpZ2ZpbGUpCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBmaW5kQ29uZmlnRmlsZVBhdGgubmVlZGNhY2hlID0gRmFsc2UKKworICAgIGRlZiBzaG93VmVyc2lvbnMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFNob3cgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB2ZXJzaW9ucworICAgICAgICAiIiIKKyAgICAgICAgY29tbWFuZC5jb29rZXIuc2hvd1ZlcnNpb25zKCkKKyAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgIHNob3dWZXJzaW9ucy5uZWVkY2FjaGUgPSBUcnVlCisKKyAgICBkZWYgc2hvd0Vudmlyb25tZW50VGFyZ2V0KHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBQcmludCB0aGUgZW52aXJvbm1lbnQgb2YgYSB0YXJnZXQgcmVjaXBlCisgICAgICAgIChuZWVkcyB0aGUgY2FjaGUgdG8gd29yayBvdXQgd2hpY2ggcmVjaXBlIHRvIHVzZSkKKyAgICAgICAgIiIiCisgICAgICAgIHBrZyA9IHBhcmFtc1swXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLnNob3dFbnZpcm9ubWVudChOb25lLCBwa2cpCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBzaG93RW52aXJvbm1lbnRUYXJnZXQubmVlZGNhY2hlID0gVHJ1ZQorCisgICAgZGVmIHNob3dFbnZpcm9ubWVudChzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJpbnQgdGhlIHN0YW5kYXJkIGVudmlyb25tZW50CisgICAgICAgIG9yIGlmIHNwZWNpZmllZCB0aGUgZW52aXJvbm1lbnQgZm9yIGEgc3BlY2lmaWVkIHJlY2lwZQorICAgICAgICAiIiIKKyAgICAgICAgYmZpbGUgPSBwYXJhbXNbMF0KKworICAgICAgICBjb21tYW5kLmNvb2tlci5zaG93RW52aXJvbm1lbnQoYmZpbGUpCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBzaG93RW52aXJvbm1lbnQubmVlZGNhY2hlID0gRmFsc2UKKworICAgIGRlZiBwYXJzZUZpbGVzKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBQYXJzZSB0aGUgLmJiIGZpbGVzCisgICAgICAgICIiIgorICAgICAgICBjb21tYW5kLmNvb2tlci51cGRhdGVDYWNoZSgpCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBwYXJzZUZpbGVzLm5lZWRjYWNoZSA9IFRydWUKKworICAgIGRlZiBjb21wYXJlUmV2aXNpb25zKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBQYXJzZSB0aGUgLmJiIGZpbGVzCisgICAgICAgICIiIgorICAgICAgICBpZiBiYi5mZXRjaC5mZXRjaGVyX2NvbXBhcmVfcmV2aXNpb25zKGNvbW1hbmQuY29va2VyLmRhdGEpOgorICAgICAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoY29kZT0xKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgIGNvbXBhcmVSZXZpc2lvbnMubmVlZGNhY2hlID0gVHJ1ZQorCisgICAgZGVmIHRyaWdnZXJFdmVudChzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgVHJpZ2dlciBhIGNlcnRhaW4gZXZlbnQKKyAgICAgICAgIiIiCisgICAgICAgIGV2ZW50ID0gcGFyYW1zWzBdCisgICAgICAgIGJiLmV2ZW50LmZpcmUoZXZhbChldmVudCksIGNvbW1hbmQuY29va2VyLmRhdGEpCisgICAgICAgIGNvbW1hbmQuY3VycmVudEFzeW5jQ29tbWFuZCA9IE5vbmUKKyAgICB0cmlnZ2VyRXZlbnQubmVlZGNhY2hlID0gRmFsc2UKKworICAgIGRlZiByZXNldENvb2tlcihzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVzZXQgdGhlIGNvb2tlciB0byBpdHMgaW5pdGlhbCBzdGF0ZSwgdGh1cyBmb3JjaW5nIGEgcmVwYXJzZSBmb3IKKyAgICAgICAgYW55IGFzeW5jIGNvbW1hbmQgdGhhdCBoYXMgdGhlIG5lZWRjYWNoZSBwcm9wZXJ0eSBzZXQgdG8gVHJ1ZQorICAgICAgICAiIiIKKyAgICAgICAgY29tbWFuZC5jb29rZXIucmVzZXQoKQorICAgICAgICBjb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZCgpCisgICAgcmVzZXRDb29rZXIubmVlZGNhY2hlID0gRmFsc2UKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb21wYXQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NvbXBhdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTE5MjNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb21wYXQucHkKQEAgLTAsMCArMSw2IEBACisiIiJDb2RlIHB1bGxlZCBmcm9tIGZ1dHVyZSBweXRob24gdmVyc2lvbnMsIGhlcmUgZm9yIGNvbXBhdGliaWxpdHkiIiIKKworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgTXV0YWJsZU1hcHBpbmcsIEtleXNWaWV3LCBWYWx1ZXNWaWV3LCBJdGVtc1ZpZXcsIE9yZGVyZWREaWN0Citmcm9tIGZ1bmN0b29scyBpbXBvcnQgdG90YWxfb3JkZXJpbmcKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2Nvb2tlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29va2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZDdkNTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2Nvb2tlci5weQpAQCAtMCwwICsxLDIxMzkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQaGlsIEJsdW5kZWxsCisjIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDUgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisjIENvcHlyaWdodCAoQykgMjAwNSAgICAgICAgUk9BRCBHbWJICisjIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDcgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2ltcG9ydCBzeXMsIG9zLCBnbG9iLCBvcy5wYXRoLCByZSwgdGltZQoraW1wb3J0IGF0ZXhpdAoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCBzcmVfY29uc3RhbnRzCitpbXBvcnQgdGhyZWFkaW5nCitmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY2xvc2luZworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoraW1wb3J0IGJiLCBiYi5leGNlcHRpb25zLCBiYi5jb21tYW5kCitmcm9tIGJiIGltcG9ydCB1dGlscywgZGF0YSwgcGFyc2UsIGV2ZW50LCBjYWNoZSwgcHJvdmlkZXJzLCB0YXNrZGF0YSwgcnVucXVldWUsIGJ1aWxkCitpbXBvcnQgUXVldWUKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgZXJybm8KK2ltcG9ydCBwcnNlcnYuc2VydgoraW1wb3J0IHB5aW5vdGlmeQorCitsb2dnZXIgICAgICA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKK2NvbGxlY3Rsb2cgID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuQ29sbGVjdGlvbiIpCitidWlsZGxvZyAgICA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLkJ1aWxkIikKK3BhcnNlbG9nICAgID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuUGFyc2luZyIpCitwcm92aWRlcmxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLlByb3ZpZGVyIikKKworY2xhc3MgTm9TcGVjaWZpY01hdGNoKGJiLkJCSGFuZGxlZEV4Y2VwdGlvbik6CisgICAgIiIiCisgICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIG5vIG9yIG11bHRpcGxlIGZpbGUgbWF0Y2hlcyBhcmUgZm91bmQKKyAgICAiIiIKKworY2xhc3MgTm90aGluZ1RvQnVpbGQoRXhjZXB0aW9uKToKKyAgICAiIiIKKyAgICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0byBidWlsZAorICAgICIiIgorCitjbGFzcyBDb2xsZWN0aW9uRXJyb3IoYmIuQkJIYW5kbGVkRXhjZXB0aW9uKToKKyAgICAiIiIKKyAgICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gbGF5ZXIgY29uZmlndXJhdGlvbiBpcyBpbmNvcnJlY3QKKyAgICAiIiIKKworY2xhc3Mgc3RhdGU6CisgICAgaW5pdGlhbCwgcGFyc2luZywgcnVubmluZywgc2h1dGRvd24sIGZvcmNlc2h1dGRvd24sIHN0b3BwZWQsIGVycm9yID0gcmFuZ2UoNykKKworCitjbGFzcyBTa2lwcGVkUGFja2FnZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW5mbyA9IE5vbmUsIHJlYXNvbiA9IE5vbmUpOgorICAgICAgICBzZWxmLnBuID0gTm9uZQorICAgICAgICBzZWxmLnNraXByZWFzb24gPSBOb25lCisgICAgICAgIHNlbGYucHJvdmlkZXMgPSBOb25lCisgICAgICAgIHNlbGYucnByb3ZpZGVzID0gTm9uZQorCisgICAgICAgIGlmIGluZm86CisgICAgICAgICAgICBzZWxmLnBuID0gaW5mby5wbgorICAgICAgICAgICAgc2VsZi5za2lwcmVhc29uID0gaW5mby5za2lwcmVhc29uCisgICAgICAgICAgICBzZWxmLnByb3ZpZGVzID0gaW5mby5wcm92aWRlcworICAgICAgICAgICAgc2VsZi5ycHJvdmlkZXMgPSBpbmZvLnJwcm92aWRlcworICAgICAgICBlbGlmIHJlYXNvbjoKKyAgICAgICAgICAgIHNlbGYuc2tpcHJlYXNvbiA9IHJlYXNvbgorCisKK2NsYXNzIENvb2tlckZlYXR1cmVzKG9iamVjdCk6CisgICAgX2ZlYXR1cmVfbGlzdCA9IFtIT0JfRVhUUkFfQ0FDSEVTLCBTRU5EX0RFUEVORFNfVFJFRSwgQkFTRURBVEFTVE9SRV9UUkFDS0lORywgU0VORF9TQU5JVFlFVkVOVFNdID0gcmFuZ2UoNCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fZmVhdHVyZXM9c2V0KCkKKworICAgIGRlZiBzZXRGZWF0dXJlKHNlbGYsIGYpOgorICAgICAgICAjIHZhbGlkYXRlIHdlIGdvdCBhIHJlcXVlc3QgZm9yIGEgZmVhdHVyZSB3ZSBzdXBwb3J0CisgICAgICAgIGlmIGYgbm90IGluIENvb2tlckZlYXR1cmVzLl9mZWF0dXJlX2xpc3Q6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fZmVhdHVyZXMuYWRkKGYpCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGYpOgorICAgICAgICByZXR1cm4gZiBpbiBzZWxmLl9mZWF0dXJlcworCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmVhdHVyZXMuX19pdGVyX18oKQorCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9mZWF0dXJlcy5uZXh0KCkKKworCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSMKKyMgQkJDb29rZXIKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IworY2xhc3MgQkJDb29rZXI6CisgICAgIiIiCisgICAgTWFuYWdlcyBvbmUgYml0YmFrZSBidWlsZCBydW4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWd1cmF0aW9uLCBmZWF0dXJlU2V0PU5vbmUpOgorICAgICAgICBzZWxmLnJlY2lwZWNhY2hlID0gTm9uZQorICAgICAgICBzZWxmLnNraXBsaXN0ID0ge30KKyAgICAgICAgc2VsZi5mZWF0dXJlc2V0ID0gQ29va2VyRmVhdHVyZXMoKQorICAgICAgICBpZiBmZWF0dXJlU2V0OgorICAgICAgICAgICAgZm9yIGYgaW4gZmVhdHVyZVNldDoKKyAgICAgICAgICAgICAgICBzZWxmLmZlYXR1cmVzZXQuc2V0RmVhdHVyZShmKQorCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24KKworICAgICAgICBzZWxmLmNvbmZpZ3dhdGNoZXIgPSBweWlub3RpZnkuV2F0Y2hNYW5hZ2VyKCkKKyAgICAgICAgc2VsZi5jb25maWd3YXRjaGVyLmJic2VlbiA9IFtdCisgICAgICAgIHNlbGYuY29uZmlnd2F0Y2hlci5iYndhdGNoZWRmaWxlcyA9IFtdCisgICAgICAgIHNlbGYuY29uZmlnbm90aWZpZXIgPSBweWlub3RpZnkuTm90aWZpZXIoc2VsZi5jb25maWd3YXRjaGVyLCBzZWxmLmNvbmZpZ19ub3RpZmljYXRpb25zKQorICAgICAgICBzZWxmLndhdGNobWFzayA9IHB5aW5vdGlmeS5JTl9DTE9TRV9XUklURSB8IHB5aW5vdGlmeS5JTl9DUkVBVEUgfCBweWlub3RpZnkuSU5fREVMRVRFIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHB5aW5vdGlmeS5JTl9ERUxFVEVfU0VMRiB8IHB5aW5vdGlmeS5JTl9NT0RJRlkgfCBweWlub3RpZnkuSU5fTU9WRV9TRUxGIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHB5aW5vdGlmeS5JTl9NT1ZFRF9GUk9NIHwgcHlpbm90aWZ5LklOX01PVkVEX1RPIAorICAgICAgICBzZWxmLndhdGNoZXIgPSBweWlub3RpZnkuV2F0Y2hNYW5hZ2VyKCkKKyAgICAgICAgc2VsZi53YXRjaGVyLmJic2VlbiA9IFtdCisgICAgICAgIHNlbGYud2F0Y2hlci5iYndhdGNoZWRmaWxlcyA9IFtdCisgICAgICAgIHNlbGYubm90aWZpZXIgPSBweWlub3RpZnkuTm90aWZpZXIoc2VsZi53YXRjaGVyLCBzZWxmLm5vdGlmaWNhdGlvbnMpCisKKworICAgICAgICBzZWxmLmluaXRDb25maWd1cmF0aW9uRGF0YSgpCisKKyAgICAgICAgc2VsZi5pbm90aWZ5X21vZGlmaWVkX2ZpbGVzID0gW10KKworICAgICAgICBkZWYgX3Byb2Nlc3NfaW5vdGlmeV91cGRhdGVzKHNlcnZlciwgbm90aWZpZXJfbGlzdCwgYWJvcnQpOgorICAgICAgICAgICAgZm9yIG4gaW4gbm90aWZpZXJfbGlzdDoKKyAgICAgICAgICAgICAgICBpZiBuLmNoZWNrX2V2ZW50cyh0aW1lb3V0PTApOgorICAgICAgICAgICAgICAgICAgICAjIHJlYWQgbm90aWZpZWQgZXZlbnRzIGFuZCBlbnFldWUgdGhlbQorICAgICAgICAgICAgICAgICAgICBuLnJlYWRfZXZlbnRzKCkKKyAgICAgICAgICAgICAgICAgICAgbi5wcm9jZXNzX2V2ZW50cygpCisgICAgICAgICAgICByZXR1cm4gMS4wCisKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNlcnZlcl9yZWdpc3Rlcl9pZGxlY2FsbGJhY2soX3Byb2Nlc3NfaW5vdGlmeV91cGRhdGVzLCBbc2VsZi5jb25maWdub3RpZmllciwgc2VsZi5ub3RpZmllcl0pCisKKyAgICAgICAgc2VsZi5iYXNlY29uZmlnX3ZhbGlkID0gVHJ1ZQorICAgICAgICBzZWxmLnBhcnNlY2FjaGVfdmFsaWQgPSBGYWxzZQorCisgICAgICAgICMgVGFrZSBhIGxvY2sgc28gb25seSBvbmUgY29weSBvZiBiaXRiYWtlIGNhbiBydW4gYWdhaW5zdCBhIGdpdmVuIGJ1aWxkCisgICAgICAgICMgZGlyZWN0b3J5IGF0IGEgdGltZQorICAgICAgICBpZiBub3Qgc2VsZi5sb2NrQml0YmFrZSgpOgorICAgICAgICAgICAgYmIuZmF0YWwoIk9ubHkgb25lIGNvcHkgb2YgYml0YmFrZSBzaG91bGQgYmUgcnVuIGFnYWluc3QgYSBidWlsZCBkaXJlY3RvcnkiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmxvY2suc2VlaygwKQorICAgICAgICAgICAgc2VsZi5sb2NrLnRydW5jYXRlKCkKKyAgICAgICAgICAgIGlmIGxlbihjb25maWd1cmF0aW9uLmludGVyZmFjZSkgPj0gMjoKKyAgICAgICAgICAgICAgICBzZWxmLmxvY2sud3JpdGUoIiVzOiVzXG4iICUgKGNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlWzBdLCBjb25maWd1cmF0aW9uLmludGVyZmFjZVsxXSkpOworICAgICAgICAgICAgc2VsZi5sb2NrLmZsdXNoKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgVE9TVE9QIG11c3Qgbm90IGJlIHNldCBvciBvdXIgY2hpbGRyZW4gd2lsbCBoYW5nIHdoZW4gdGhleSBvdXRwdXQKKyAgICAgICAgZmQgPSBzeXMuc3Rkb3V0LmZpbGVubygpCisgICAgICAgIGlmIG9zLmlzYXR0eShmZCk6CisgICAgICAgICAgICBpbXBvcnQgdGVybWlvcworICAgICAgICAgICAgdGNhdHRyID0gdGVybWlvcy50Y2dldGF0dHIoZmQpCisgICAgICAgICAgICBpZiB0Y2F0dHJbM10gJiB0ZXJtaW9zLlRPU1RPUDoKKyAgICAgICAgICAgICAgICBidWlsZGxvZy5pbmZvKCJUaGUgdGVybWluYWwgaGFkIHRoZSBUT1NUT1AgYml0IHNldCwgY2xlYXJpbmcuLi4iKQorICAgICAgICAgICAgICAgIHRjYXR0clszXSA9IHRjYXR0clszXSAmIH50ZXJtaW9zLlRPU1RPUAorICAgICAgICAgICAgICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0ZXJtaW9zLlRDU0FOT1csIHRjYXR0cikKKworICAgICAgICBzZWxmLmNvbW1hbmQgPSBiYi5jb21tYW5kLkNvbW1hbmQoc2VsZikKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlLmluaXRpYWwKKworICAgICAgICBzZWxmLnBhcnNlciA9IE5vbmUKKworICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzZWxmLnNpZ3Rlcm1fZXhjZXB0aW9uKQorICAgICAgICAjIExldCBTSUdIVVAgZXhpdCBhcyBTSUdURVJNCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0hVUCwgc2VsZi5zaWd0ZXJtX2V4Y2VwdGlvbikKKworICAgIGRlZiBjb25maWdfbm90aWZpY2F0aW9ucyhzZWxmLCBldmVudCk6CisgICAgICAgIGlmIG5vdCBldmVudC5wYXRobmFtZSBpbiBzZWxmLmNvbmZpZ3dhdGNoZXIuYmJ3YXRjaGVkZmlsZXM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbm90IGV2ZW50LnBhdGggaW4gc2VsZi5pbm90aWZ5X21vZGlmaWVkX2ZpbGVzOgorICAgICAgICAgICAgc2VsZi5pbm90aWZ5X21vZGlmaWVkX2ZpbGVzLmFwcGVuZChldmVudC5wYXRoKQorICAgICAgICBzZWxmLmJhc2Vjb25maWdfdmFsaWQgPSBGYWxzZQorCisgICAgZGVmIG5vdGlmaWNhdGlvbnMoc2VsZiwgZXZlbnQpOgorICAgICAgICBpZiBub3QgZXZlbnQucGF0aCBpbiBzZWxmLmlub3RpZnlfbW9kaWZpZWRfZmlsZXM6CisgICAgICAgICAgICBzZWxmLmlub3RpZnlfbW9kaWZpZWRfZmlsZXMuYXBwZW5kKGV2ZW50LnBhdGgpCisgICAgICAgIHNlbGYucGFyc2VjYWNoZV92YWxpZCA9IEZhbHNlCisKKyAgICBkZWYgYWRkX2ZpbGV3YXRjaChzZWxmLCBkZXBzLCB3YXRjaGVyPU5vbmUpOgorICAgICAgICBpZiBub3Qgd2F0Y2hlcjoKKyAgICAgICAgICAgIHdhdGNoZXIgPSBzZWxmLndhdGNoZXIKKyAgICAgICAgZm9yIGkgaW4gZGVwczoKKyAgICAgICAgICAgIHdhdGNoZXIuYmJ3YXRjaGVkZmlsZXMuYXBwZW5kKGlbMF0pCisgICAgICAgICAgICBmID0gb3MucGF0aC5kaXJuYW1lKGlbMF0pCisgICAgICAgICAgICBpZiBmIGluIHdhdGNoZXIuYmJzZWVuOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB3YXRjaGVyLmJic2Vlbi5hcHBlbmQoZikKKyAgICAgICAgICAgIHdhdGNodGFyZ2V0ID0gTm9uZQorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAjIFdlIHRyeSBhbmQgYWRkIHdhdGNoZXMgZm9yIGZpbGVzIHRoYXQgZG9uJ3QgZXhpc3QgYnV0IGlmIHRoZXkgZGlkLCB3b3VsZCBpbmZsdWVuY2UKKyAgICAgICAgICAgICAgICAjIHRoZSBwYXJzZXIuIFRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZXNlIGZpbGVzIG1heSBub3QgZXhpc3QsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCAKKyAgICAgICAgICAgICAgICAjIHRvIHdhdGNoIGFueSBwYXJlbnQgdGhhdCBkb2VzIGV4aXN0IGZvciBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgd2F0Y2hlci5hZGRfd2F0Y2goZiwgc2VsZi53YXRjaG1hc2ssIHF1aWV0PUZhbHNlKQorICAgICAgICAgICAgICAgICAgICBpZiB3YXRjaHRhcmdldDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhdGNoZXIuYmJ3YXRjaGVkZmlsZXMuYXBwZW5kKHdhdGNodGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4Y2VwdCBweWlub3RpZnkuV2F0Y2hNYW5hZ2VyRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgJ0VOT0VOVCcgaW4gc3RyKGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgd2F0Y2h0YXJnZXQgPSBmCisgICAgICAgICAgICAgICAgICAgICAgICBmID0gb3MucGF0aC5kaXJuYW1lKGYpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmIGluIHdhdGNoZXIuYmJzZWVuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICB3YXRjaGVyLmJic2Vlbi5hcHBlbmQoZikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGlmICdFTk9TUEMnIGluIHN0cihlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVybG9nLmVycm9yKCJObyBzcGFjZSBsZWZ0IG9uIGRldmljZSBvciBleGNlZWRzIGZzLmlub3RpZnkubWF4X3VzZXJfd2F0Y2hlcz8iKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJsb2cuZXJyb3IoIlRvIGNoZWNrIG1heF91c2VyX3dhdGNoZXM6IHN5c2N0bCAtbiBmcy5pbm90aWZ5Lm1heF91c2VyX3dhdGNoZXMuIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVybG9nLmVycm9yKCJUbyBtb2RpZnkgbWF4X3VzZXJfd2F0Y2hlczogc3lzY3RsIC1uIC13IGZzLmlub3RpZnkubWF4X3VzZXJfd2F0Y2hlcz08dmFsdWU+LiIpCisgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlcmxvZy5lcnJvcigiUm9vdCBwcml2aWxlZ2UgaXMgcmVxdWlyZWQgdG8gbW9kaWZ5IG1heF91c2VyX3dhdGNoZXMuIikKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBzaWd0ZXJtX2V4Y2VwdGlvbihzZWxmLCBzaWdudW0sIHN0YWNrZnJhbWUpOgorICAgICAgICBpZiBzaWdudW0gPT0gc2lnbmFsLlNJR1RFUk06CisgICAgICAgICAgICBiYi53YXJuKCJDb29rZXIgcmVjaWV2ZWQgU0lHVEVSTSwgc2h1dHRpbmcgZG93bi4uLiIpCisgICAgICAgIGVsaWYgc2lnbnVtID09IHNpZ25hbC5TSUdIVVA6CisgICAgICAgICAgICBiYi53YXJuKCJDb29rZXIgcmVjaWV2ZWQgU0lHSFVQLCBzaHV0dGluZyBkb3duLi4uIikKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlLmZvcmNlc2h1dGRvd24KKworICAgIGRlZiBzZXRGZWF0dXJlcyhzZWxmLCBmZWF0dXJlcyk6CisgICAgICAgICMgd2Ugb25seSBhY2NlcHQgYSBuZXcgZmVhdHVyZSBzZXQgaWYgd2UncmUgaW4gc3RhdGUgaW5pdGlhbCwgc28gd2UgY2FuIHJlc2V0IHdpdGhvdXQgcHJvYmxlbXMKKyAgICAgICAgaWYgbm90IHNlbGYuc3RhdGUgaW4gW3N0YXRlLmluaXRpYWwsIHN0YXRlLnNodXRkb3duLCBzdGF0ZS5mb3JjZXNodXRkb3duLCBzdGF0ZS5zdG9wcGVkLCBzdGF0ZS5lcnJvcl06CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIklsbGVnYWwgc3RhdGUgZm9yIGZlYXR1cmUgc2V0IGNoYW5nZSIpCisgICAgICAgIG9yaWdpbmFsX2ZlYXR1cmVzZXQgPSBsaXN0KHNlbGYuZmVhdHVyZXNldCkKKyAgICAgICAgZm9yIGZlYXR1cmUgaW4gZmVhdHVyZXM6CisgICAgICAgICAgICBzZWxmLmZlYXR1cmVzZXQuc2V0RmVhdHVyZShmZWF0dXJlKQorICAgICAgICBiYi5kZWJ1ZygxLCAiRmVhdHVyZXMgc2V0ICVzICh3YXMgJXMpIiAlIChvcmlnaW5hbF9mZWF0dXJlc2V0LCBsaXN0KHNlbGYuZmVhdHVyZXNldCkpKQorICAgICAgICBpZiAob3JpZ2luYWxfZmVhdHVyZXNldCAhPSBsaXN0KHNlbGYuZmVhdHVyZXNldCkpIGFuZCBzZWxmLnN0YXRlICE9IHN0YXRlLmVycm9yOgorICAgICAgICAgICAgc2VsZi5yZXNldCgpCisKKyAgICBkZWYgaW5pdENvbmZpZ3VyYXRpb25EYXRhKHNlbGYpOgorCisgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZS5pbml0aWFsCisgICAgICAgIHNlbGYuY2FjaGVzX2FycmF5ID0gW10KKworICAgICAgICBpZiBDb29rZXJGZWF0dXJlcy5CQVNFREFUQVNUT1JFX1RSQUNLSU5HIGluIHNlbGYuZmVhdHVyZXNldDoKKyAgICAgICAgICAgIHNlbGYuZW5hYmxlRGF0YVRyYWNraW5nKCkKKworICAgICAgICBhbGxfZXh0cmFfY2FjaGVfbmFtZXMgPSBbXQorICAgICAgICAjIFdlIGhhcmRjb2RlIGFsbCBrbm93biBjYWNoZSB0eXBlcyBpbiBhIHNpbmdsZSBwbGFjZSwgaGVyZS4KKyAgICAgICAgaWYgQ29va2VyRmVhdHVyZXMuSE9CX0VYVFJBX0NBQ0hFUyBpbiBzZWxmLmZlYXR1cmVzZXQ6CisgICAgICAgICAgICBhbGxfZXh0cmFfY2FjaGVfbmFtZXMuYXBwZW5kKCJiYi5jYWNoZV9leHRyYTpIb2JSZWNpcGVJbmZvIikKKworICAgICAgICBjYWNoZXNfbmFtZV9hcnJheSA9IFsnYmIuY2FjaGU6Q29yZVJlY2lwZUluZm8nXSArIGFsbF9leHRyYV9jYWNoZV9uYW1lcworCisgICAgICAgICMgQXQgbGVhc3QgQ29yZVJlY2lwZUluZm8gd2lsbCBiZSBsb2FkZWQsIHNvIGNhY2hlc19hcnJheSB3aWxsIG5ldmVyIGJlIGVtcHR5IQorICAgICAgICAjIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50LCBubyBmdXJ0aGVyIGNoZWNrIG5lZWRlZCEKKyAgICAgICAgZm9yIHZhciBpbiBjYWNoZXNfbmFtZV9hcnJheToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb2R1bGVfbmFtZSwgY2FjaGVfbmFtZSA9IHZhci5zcGxpdCgnOicpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXyhtb2R1bGVfbmFtZSwgZnJvbWxpc3Q9KGNhY2hlX25hbWUsKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNhY2hlc19hcnJheS5hcHBlbmQoZ2V0YXR0cihtb2R1bGUsIGNhY2hlX25hbWUpKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuY3JpdGljYWwoIlVuYWJsZSB0byBpbXBvcnQgZXh0cmEgUmVjaXBlSW5mbyAnJXMnIGZyb20gJyVzJzogJXMiICUgKGNhY2hlX25hbWUsIG1vZHVsZV9uYW1lLCBleGMpKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KCJGQVRBTDogRmFpbGVkIHRvIGltcG9ydCBleHRyYSBjYWNoZSBjbGFzcyAnJXMnLiIgJSBjYWNoZV9uYW1lKQorCisgICAgICAgIHNlbGYuZGF0YWJ1aWxkZXIgPSBiYi5jb29rZXJkYXRhLkNvb2tlckRhdGFCdWlsZGVyKHNlbGYuY29uZmlndXJhdGlvbiwgRmFsc2UpCisgICAgICAgIHNlbGYuZGF0YWJ1aWxkZXIucGFyc2VCYXNlQ29uZmlndXJhdGlvbigpCisgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuZGF0YWJ1aWxkZXIuZGF0YQorICAgICAgICBzZWxmLmRhdGFfaGFzaCA9IHNlbGYuZGF0YWJ1aWxkZXIuZGF0YV9oYXNoCisKKworICAgICAgICAjIHdlIGxvZyBhbGwgZXZlbnRzIHRvIGEgZmlsZSBpZiBzbyBkaXJlY3RlZAorICAgICAgICBpZiBzZWxmLmNvbmZpZ3VyYXRpb24ud3JpdGVldmVudGxvZzoKKyAgICAgICAgICAgIGltcG9ydCBqc29uLCBwaWNrbGUKKyAgICAgICAgICAgIERFRkFVTFRfRVZFTlRGSUxFID0gc2VsZi5jb25maWd1cmF0aW9uLndyaXRlZXZlbnRsb2cKKyAgICAgICAgICAgIGNsYXNzIEV2ZW50TG9nV3JpdGVIYW5kbGVyKCk6CisKKyAgICAgICAgICAgICAgICBjbGFzcyBFdmVudFdyaXRlcigpOgorICAgICAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY29va2VyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZV9pbml0ZWQgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlciA9IGNvb2tlcgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ldmVudF9xdWV1ZSA9IFtdCisKKyAgICAgICAgICAgICAgICAgICAgZGVmIGluaXRfZmlsZShzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRlbGV0ZSB0aGUgb2xkIGxvZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShERUZBVUxUX0VWRU5URklMRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgd3JpdGUgY3VycmVudCBjb25maWd1cmF0aW9uIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihERUZBVUxUX0VWRU5URklMRSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIiVzXG4iICUganNvbi5kdW1wcyh7ICJhbGx2YXJpYWJsZXMiIDogc2VsZi5jb29rZXIuZ2V0QWxsS2V5c1dpdGhGbGFncyhbImRvYyIsICJmdW5jIl0pfSkpCisKKyAgICAgICAgICAgICAgICAgICAgZGVmIHdyaXRlX2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihERUZBVUxUX0VWRU5URklMRSwgImEiKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiJXNcbiIgJSBqc29uLmR1bXBzKHsiY2xhc3MiOmV2ZW50Ll9fbW9kdWxlX18gKyAiLiIgKyBldmVudC5fX2NsYXNzX18uX19uYW1lX18sICJ2YXJzIjpqc29uLmR1bXBzKHBpY2tsZS5kdW1wcyhldmVudCkpIH0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChlLCB0cmFjZWJhY2suZm9ybWF0X2V4YyhlKSkKKworCisgICAgICAgICAgICAgICAgICAgIGRlZiBzZW5kKHNlbGYsIGV2ZW50KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2NsYXNzID0gZXZlbnQuX19tb2R1bGVfXyArICIuIiArIGV2ZW50Ll9fY2xhc3NfXy5fX25hbWVfXworCisgICAgICAgICAgICAgICAgICAgICAgICAjIGluaXQgb24gYmIuZXZlbnQuQnVpbGRTdGFydGVkCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmZpbGVfaW5pdGVkIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgIGV2ZW50X2NsYXNzID09ICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRfZmlsZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZV9pbml0ZWQgPSBUcnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3cml0ZSBwZW5kaW5nIGV2ZW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZSBpbiBzZWxmLmV2ZW50X3F1ZXVlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9ldmVudChlKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWxzbyB3cml0ZSB0aGUgY3VycmVudCBldmVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2V2ZW50KGV2ZW50KQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBxdWV1ZSBhbGwgZXZlbnRzIHVudGlsIHRoZSBmaWxlIGlzIGluaXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlLmFwcGVuZChldmVudCkKKworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdlIGhhdmUgdGhlIGZpbGUsIGp1c3Qgd3JpdGUgdGhlIGV2ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9ldmVudChldmVudCkKKworICAgICAgICAgICAgICAgICMgc2V0IG91ciBoYW5kbGVyJ3MgZXZlbnQgcHJvY2Vzc29yCisgICAgICAgICAgICAgICAgZXZlbnQgPSBFdmVudFdyaXRlcihzZWxmKSAgICAgICAjIHNlbGYgaXMgdGhlIGNvb2tlciBoZXJlCisKKworICAgICAgICAgICAgIyBzZXQgdXAgY29va2VyIGZlYXR1cmVzIGZvciB0aGlzIG1vY2sgVUkgaGFuZGxlcgorCisgICAgICAgICAgICAjIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGRlcGVuZGVuY3kgdHJlZSBpbiB0aGUgbG9nCisgICAgICAgICAgICBzZWxmLmZlYXR1cmVzZXQuc2V0RmVhdHVyZShDb29rZXJGZWF0dXJlcy5TRU5EX0RFUEVORFNfVFJFRSkKKyAgICAgICAgICAgICMgcmVnaXN0ZXIgdGhlIGxvZyBmaWxlIHdyaXRlciBhcyBVSSBIYW5kbGVyCisgICAgICAgICAgICBiYi5ldmVudC5yZWdpc3Rlcl9VSUhoYW5kbGVyKEV2ZW50TG9nV3JpdGVIYW5kbGVyKCkpCisKKworICAgICAgICAjCisgICAgICAgICMgQ29weSBvZiB0aGUgZGF0YSBzdG9yZSB3aGljaCBoYXMgYmVlbiBleHBhbmRlZC4KKyAgICAgICAgIyBVc2VkIGZvciBmaXJpbmcgZXZlbnRzIGFuZCBhY2Nlc3NpbmcgdmFyaWFibGVzIHdoZXJlIGV4cGFuc2lvbiBuZWVkcyB0byBiZSBhY2NvdW50ZWQgZm9yCisgICAgICAgICMKKyAgICAgICAgc2VsZi5leHBhbmRlZF9kYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KHNlbGYuZGF0YSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmV4cGFuZGVkX2RhdGEpCisgICAgICAgIGJiLnBhcnNlLmluaXRfcGFyc2VyKHNlbGYuZXhwYW5kZWRfZGF0YSkKKworICAgICAgICBpZiBDb29rZXJGZWF0dXJlcy5CQVNFREFUQVNUT1JFX1RSQUNLSU5HIGluIHNlbGYuZmVhdHVyZXNldDoKKyAgICAgICAgICAgIHNlbGYuZGlzYWJsZURhdGFUcmFja2luZygpCisKKyAgICAgICAgc2VsZi5kYXRhLnJlbmFtZVZhcigiX19kZXBlbmRzIiwgIl9fYmFzZV9kZXBlbmRzIikKKyAgICAgICAgc2VsZi5hZGRfZmlsZXdhdGNoKHNlbGYuZGF0YS5nZXRWYXIoIl9fYmFzZV9kZXBlbmRzIiwgRmFsc2UpLCBzZWxmLmNvbmZpZ3dhdGNoZXIpCisKKworICAgIGRlZiBlbmFibGVEYXRhVHJhY2tpbmcoc2VsZik6CisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi50cmFja2luZyA9IFRydWUKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAiZGF0YSIpOgorICAgICAgICAgICAgc2VsZi5kYXRhLmVuYWJsZVRyYWNraW5nKCkKKworICAgIGRlZiBkaXNhYmxlRGF0YVRyYWNraW5nKHNlbGYpOgorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24udHJhY2tpbmcgPSBGYWxzZQorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJkYXRhIik6CisgICAgICAgICAgICBzZWxmLmRhdGEuZGlzYWJsZVRyYWNraW5nKCkKKworICAgIGRlZiBtb2RpZnlDb25maWd1cmF0aW9uVmFyKHNlbGYsIHZhciwgdmFsLCBkZWZhdWx0X2ZpbGUsIG9wKToKKyAgICAgICAgaWYgb3AgPT0gImFwcGVuZCI6CisgICAgICAgICAgICBzZWxmLmFwcGVuZENvbmZpZ3VyYXRpb25WYXIodmFyLCB2YWwsIGRlZmF1bHRfZmlsZSkKKyAgICAgICAgZWxpZiBvcCA9PSAic2V0IjoKKyAgICAgICAgICAgIHNlbGYuc2F2ZUNvbmZpZ3VyYXRpb25WYXIodmFyLCB2YWwsIGRlZmF1bHRfZmlsZSwgIj0iKQorICAgICAgICBlbGlmIG9wID09ICJlYXJseUFzc2lnbiI6CisgICAgICAgICAgICBzZWxmLnNhdmVDb25maWd1cmF0aW9uVmFyKHZhciwgdmFsLCBkZWZhdWx0X2ZpbGUsICI/PSIpCisKKworICAgIGRlZiBhcHBlbmRDb25maWd1cmF0aW9uVmFyKHNlbGYsIHZhciwgdmFsLCBkZWZhdWx0X2ZpbGUpOgorICAgICAgICAjYWRkIGFwcGVuZCB2YXIgb3BlcmF0aW9uIHRvIHRoZSBlbmQgb2YgZGVmYXVsdF9maWxlCisgICAgICAgIGRlZmF1bHRfZmlsZSA9IGJiLmNvb2tlcmRhdGEuZmluZENvbmZpZ0ZpbGUoZGVmYXVsdF9maWxlLCBzZWxmLmRhdGEpCisKKyAgICAgICAgdG90YWwgPSAiI2FkZGVkIGJ5IGhvYiIKKyAgICAgICAgdG90YWwgKz0gIlxuJXMgKz0gXCIlc1wiXG4iICUgKHZhciwgdmFsKQorCisgICAgICAgIHdpdGggb3BlbihkZWZhdWx0X2ZpbGUsICdhJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUodG90YWwpCisKKyAgICAgICAgI2FkZCB0byBoaXN0b3J5CisgICAgICAgIGxvZ2luZm8gPSB7Im9wIjoiYXBwZW5kIiwgImZpbGUiOmRlZmF1bHRfZmlsZSwgImxpbmUiOnRvdGFsLmNvdW50KCJcbiIpfQorICAgICAgICBzZWxmLmRhdGEuYXBwZW5kVmFyKHZhciwgdmFsLCAqKmxvZ2luZm8pCisKKyAgICBkZWYgc2F2ZUNvbmZpZ3VyYXRpb25WYXIoc2VsZiwgdmFyLCB2YWwsIGRlZmF1bHRfZmlsZSwgb3ApOgorCisgICAgICAgIHJlcGxhY2VkID0gRmFsc2UKKyAgICAgICAgI2RvIG5vdCBzYXZlIGlmIG5vdGhpbmcgY2hhbmdlZAorICAgICAgICBpZiBzdHIodmFsKSA9PSBzZWxmLmRhdGEuZ2V0VmFyKHZhciwgRmFsc2UpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgY29uZl9maWxlcyA9IHNlbGYuZGF0YS52YXJoaXN0b3J5LmdldF92YXJpYWJsZV9maWxlcyh2YXIpCisKKyAgICAgICAgI2Zvcm1hdCB0aGUgdmFsdWUgd2hlbiBpdCBpcyBhIGxpc3QKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWwsIGxpc3QpOgorICAgICAgICAgICAgbGlzdHZhbCA9ICIiCisgICAgICAgICAgICBmb3IgdmFsdWUgaW4gdmFsOgorICAgICAgICAgICAgICAgIGxpc3R2YWwgKz0gIiVzICAgIiAlIHZhbHVlCisgICAgICAgICAgICB2YWwgPSBsaXN0dmFsCisKKyAgICAgICAgdG9wZGlyID0gc2VsZi5kYXRhLmdldFZhcigiVE9QRElSIiwgRmFsc2UpCisKKyAgICAgICAgI2NvbW1lbnQgb3IgcmVwbGFjZSBvcGVyYXRpb25zIG1hZGUgb24gdmFyCisgICAgICAgIGZvciBjb25mX2ZpbGUgaW4gY29uZl9maWxlczoKKyAgICAgICAgICAgIGlmIHRvcGRpciBpbiBjb25mX2ZpbGU6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNvbmZfZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBjb250ZW50cyA9IGYucmVhZGxpbmVzKCkKKworICAgICAgICAgICAgICAgIGxpbmVzID0gc2VsZi5kYXRhLnZhcmhpc3RvcnkuZ2V0X3ZhcmlhYmxlX2xpbmVzKHZhciwgY29uZl9maWxlKQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICB0b3RhbCA9ICIiCisgICAgICAgICAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICAgICAgICAgIGZvciBjIGluIGNvbnRlbnRzOgorICAgICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gYworICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyAxCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpPT1pbnQobGluZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX2luZGV4ID0gbGVuKHRvdGFsKQorICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHRvdGFsLnJmaW5kKHZhciwgMCwgZW5kX2luZGV4KQorCisgICAgICAgICAgICAgICAgICAgIGJlZ2luX2xpbmUgPSB0b3RhbC5jb3VudCgiXG4iLDAsaW5kZXgpCisgICAgICAgICAgICAgICAgICAgIGVuZF9saW5lID0gaW50KGxpbmUpCisKKyAgICAgICAgICAgICAgICAgICAgI2NoZWNrIGlmIHRoZSB2YXJpYWJsZSB3YXMgc2F2ZWQgYmVmb3JlIGluIHRoZSBzYW1lIHdheQorICAgICAgICAgICAgICAgICAgICAjaWYgdHJ1ZSBpdCByZXBsYWNlIHRoZSBwbGFjZSB3aGVyZSB0aGUgdmFyaWFibGUgd2FzIGRlY2xhcmVkCisgICAgICAgICAgICAgICAgICAgICNlbHNlIGl0IGNvbW1lbnRzIGl0CisgICAgICAgICAgICAgICAgICAgIGlmIGNvbnRlbnRzW2JlZ2luX2xpbmUtMV09PSAiI2FkZGVkIGJ5IGhvYlxuIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzW2JlZ2luX2xpbmVdID0gIiVzICVzIFwiJXNcIlxuIiAlICh2YXIsIG9wLCB2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpaSBpbiByYW5nZShiZWdpbl9saW5lLCBlbmRfbGluZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNbaWldID0gIiMiICsgY29udGVudHNbaWldCisKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY29uZl9maWxlLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGVsaW5lcyhjb250ZW50cykKKworICAgICAgICBpZiByZXBsYWNlZCA9PSBGYWxzZToKKyAgICAgICAgICAgICNyZW1vdmUgdmFyIGZyb20gaGlzdG9yeQorICAgICAgICAgICAgc2VsZi5kYXRhLnZhcmhpc3RvcnkuZGVsX3Zhcl9oaXN0b3J5KHZhcikKKworICAgICAgICAgICAgI2FkZCB2YXIgdG8gdGhlIGVuZCBvZiBkZWZhdWx0X2ZpbGUKKyAgICAgICAgICAgIGRlZmF1bHRfZmlsZSA9IGJiLmNvb2tlcmRhdGEuZmluZENvbmZpZ0ZpbGUoZGVmYXVsdF9maWxlLCBzZWxmLmRhdGEpCisKKyAgICAgICAgICAgICNhZGQgdGhlIHZhcmlhYmxlIG9uIGEgc2luZ2xlIGxpbmUsIHRvIGJlIGVhc3kgdG8gcmVwbGFjZSB0aGUgc2Vjb25kIHRpbWUKKyAgICAgICAgICAgIHRvdGFsID0gIlxuI2FkZGVkIGJ5IGhvYiIKKyAgICAgICAgICAgIHRvdGFsICs9ICJcbiVzICVzIFwiJXNcIlxuIiAlICh2YXIsIG9wLCB2YWwpCisKKyAgICAgICAgICAgIHdpdGggb3BlbihkZWZhdWx0X2ZpbGUsICdhJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHRvdGFsKQorCisgICAgICAgICAgICAjYWRkIHRvIGhpc3RvcnkKKyAgICAgICAgICAgIGxvZ2luZm8gPSB7Im9wIjoic2V0IiwgImZpbGUiOmRlZmF1bHRfZmlsZSwgImxpbmUiOnRvdGFsLmNvdW50KCJcbiIpfQorICAgICAgICAgICAgc2VsZi5kYXRhLnNldFZhcih2YXIsIHZhbCwgKipsb2dpbmZvKQorCisgICAgZGVmIHJlbW92ZUNvbmZpZ3VyYXRpb25WYXIoc2VsZiwgdmFyKToKKyAgICAgICAgY29uZl9maWxlcyA9IHNlbGYuZGF0YS52YXJoaXN0b3J5LmdldF92YXJpYWJsZV9maWxlcyh2YXIpCisgICAgICAgIHRvcGRpciA9IHNlbGYuZGF0YS5nZXRWYXIoIlRPUERJUiIsIEZhbHNlKQorCisgICAgICAgIGZvciBjb25mX2ZpbGUgaW4gY29uZl9maWxlczoKKyAgICAgICAgICAgIGlmIHRvcGRpciBpbiBjb25mX2ZpbGU6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNvbmZfZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBjb250ZW50cyA9IGYucmVhZGxpbmVzKCkKKworICAgICAgICAgICAgICAgIGxpbmVzID0gc2VsZi5kYXRhLnZhcmhpc3RvcnkuZ2V0X3ZhcmlhYmxlX2xpbmVzKHZhciwgY29uZl9maWxlKQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICB0b3RhbCA9ICIiCisgICAgICAgICAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICAgICAgICAgIGZvciBjIGluIGNvbnRlbnRzOgorICAgICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gYworICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyAxCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpPT1pbnQobGluZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX2luZGV4ID0gbGVuKHRvdGFsKQorICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHRvdGFsLnJmaW5kKHZhciwgMCwgZW5kX2luZGV4KQorCisgICAgICAgICAgICAgICAgICAgIGJlZ2luX2xpbmUgPSB0b3RhbC5jb3VudCgiXG4iLDAsaW5kZXgpCisKKyAgICAgICAgICAgICAgICAgICAgI2NoZWNrIGlmIHRoZSB2YXJpYWJsZSB3YXMgc2F2ZWQgYmVmb3JlIGluIHRoZSBzYW1lIHdheQorICAgICAgICAgICAgICAgICAgICBpZiBjb250ZW50c1tiZWdpbl9saW5lLTFdPT0gIiNhZGRlZCBieSBob2JcbiI6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1tiZWdpbl9saW5lLTFdID0gY29udGVudHNbYmVnaW5fbGluZV0gPSAiXG4iCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1tiZWdpbl9saW5lXSA9ICJcbiIKKyAgICAgICAgICAgICAgICAgICAgI3JlbW92ZSB2YXIgZnJvbSBoaXN0b3J5CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YS52YXJoaXN0b3J5LmRlbF92YXJfaGlzdG9yeSh2YXIsIGNvbmZfZmlsZSwgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgI3JlbW92ZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBzZWxmLmRhdGEuZGVsVmFyKHZhcikKKworICAgICAgICAgICAgICAgIHdpdGggb3Blbihjb25mX2ZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZWxpbmVzKGNvbnRlbnRzKQorCisgICAgZGVmIGNyZWF0ZUNvbmZpZ0ZpbGUoc2VsZiwgbmFtZSk6CisgICAgICAgIHBhdGggPSBvcy5nZXRjd2QoKQorICAgICAgICBjb25mcGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCAiY29uZiIsIG5hbWUpCisgICAgICAgIG9wZW4oY29uZnBhdGgsICd3JykuY2xvc2UoKQorCisgICAgZGVmIHBhcnNlQ29uZmlndXJhdGlvbihzZWxmKToKKyAgICAgICAgIyBTZXQgbG9nIGZpbGUgdmVyYm9zaXR5CisgICAgICAgIHZlcmJvc2Vsb2dzID0gYmIudXRpbHMudG9fYm9vbGVhbihzZWxmLmRhdGEuZ2V0VmFyKCJCQl9WRVJCT1NFX0xPR1MiLCBGYWxzZSkpCisgICAgICAgIGlmIHZlcmJvc2Vsb2dzOgorICAgICAgICAgICAgYmIubXNnLmxvZ2dlclZlcmJvc2VMb2dzID0gVHJ1ZQorCisgICAgICAgICMgQ2hhbmdlIG5pY2UgbGV2ZWwgaWYgd2UncmUgYXNrZWQgdG8KKyAgICAgICAgbmljZSA9IHNlbGYuZGF0YS5nZXRWYXIoIkJCX05JQ0VfTEVWRUwiLCBUcnVlKQorICAgICAgICBpZiBuaWNlOgorICAgICAgICAgICAgY3VybmljZSA9IG9zLm5pY2UoMCkKKyAgICAgICAgICAgIG5pY2UgPSBpbnQobmljZSkgLSBjdXJuaWNlCisgICAgICAgICAgICBidWlsZGxvZy52ZXJib3NlKCJSZW5pY2UgdG8gJXMgIiAlIG9zLm5pY2UobmljZSkpCisKKyAgICAgICAgaWYgc2VsZi5yZWNpcGVjYWNoZToKKyAgICAgICAgICAgIGRlbCBzZWxmLnJlY2lwZWNhY2hlCisgICAgICAgIHNlbGYucmVjaXBlY2FjaGUgPSBiYi5jYWNoZS5DYWNoZURhdGEoc2VsZi5jYWNoZXNfYXJyYXkpCisKKyAgICAgICAgc2VsZi5oYW5kbGVDb2xsZWN0aW9ucyggc2VsZi5kYXRhLmdldFZhcigiQkJGSUxFX0NPTExFQ1RJT05TIiwgVHJ1ZSkgKQorCisgICAgZGVmIHVwZGF0ZUNvbmZpZ09wdHMoc2VsZiwgb3B0aW9ucywgZW52aXJvbm1lbnQpOgorICAgICAgICBjbGVhbiA9IFRydWUKKyAgICAgICAgZm9yIG8gaW4gb3B0aW9uczoKKyAgICAgICAgICAgIGlmIG8gaW4gWydwcmVmaWxlJywgJ3Bvc3RmaWxlJ106CisgICAgICAgICAgICAgICAgY2xlYW4gPSBGYWxzZQorICAgICAgICAgICAgc2V0YXR0cihzZWxmLmNvbmZpZ3VyYXRpb24sIG8sIG9wdGlvbnNbb10pCisgICAgICAgIGZvciBrIGluIGJiLnV0aWxzLmFwcHJvdmVkX3ZhcmlhYmxlcygpOgorICAgICAgICAgICAgaWYgayBpbiBlbnZpcm9ubWVudCBhbmQgayBub3QgaW4gc2VsZi5jb25maWd1cmF0aW9uLmVudjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlVwZGF0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlICVzIHRvICVzIiAlIChrLCBlbnZpcm9ubWVudFtrXSkpCisgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmVudltrXSA9IGVudmlyb25tZW50W2tdCisgICAgICAgICAgICAgICAgY2xlYW4gPSBGYWxzZQorICAgICAgICAgICAgaWYgayBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uZW52IGFuZCBrIG5vdCBpbiBlbnZpcm9ubWVudDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlVwZGF0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlICVzIChkZWxldGVkKSIgJSAoaykpCisgICAgICAgICAgICAgICAgZGVsIHNlbGYuY29uZmlndXJhdGlvbi5lbnZba10KKyAgICAgICAgICAgICAgICBjbGVhbiA9IEZhbHNlCisgICAgICAgICAgICBpZiBrIG5vdCBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uZW52IGFuZCBrIG5vdCBpbiBlbnZpcm9ubWVudDoKKyAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGVudmlyb25tZW50W2tdICE9IHNlbGYuY29uZmlndXJhdGlvbi5lbnZba106CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJVcGRhdGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZSAlcyB0byAlcyIgJSAoaywgZW52aXJvbm1lbnRba10pKQorICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5lbnZba10gPSBlbnZpcm9ubWVudFtrXQorICAgICAgICAgICAgICAgIGNsZWFuID0gRmFsc2UKKyAgICAgICAgaWYgbm90IGNsZWFuOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJCYXNlIGVudmlyb25tZW50IGNoYW5nZSwgdHJpZ2dlcmluZyByZXBhcnNlIikKKyAgICAgICAgICAgIHNlbGYuYmFzZWNvbmZpZ192YWxpZCA9IEZhbHNlICAgICAgICAKKyAgICAgICAgICAgIHNlbGYucmVzZXQoKQorCisgICAgZGVmIHJ1bkNvbW1hbmRzKHNlbGYsIHNlcnZlciwgZGF0YSwgYWJvcnQpOgorICAgICAgICAiIiIKKyAgICAgICAgUnVuIGFueSBxdWV1ZWQgYXN5bmNocm9ub3VzIGNvbW1hbmQKKyAgICAgICAgVGhpcyBpcyBkb25lIGJ5IHRoZSBpZGxlIGhhbmRsZXIgc28gaXQgcnVucyBpbiB0cnVlIGNvbnRleHQgcmF0aGVyIHRoYW4KKyAgICAgICAgdGllZCB0byBhbnkgVUkuCisgICAgICAgICIiIgorCisgICAgICAgIHJldHVybiBzZWxmLmNvbW1hbmQucnVuQXN5bmNDb21tYW5kKCkKKworICAgIGRlZiBzaG93VmVyc2lvbnMoc2VsZik6CisKKyAgICAgICAgcGtnX3BuID0gc2VsZi5yZWNpcGVjYWNoZS5wa2dfcG4KKyAgICAgICAgKGxhdGVzdF92ZXJzaW9ucywgcHJlZmVycmVkX3ZlcnNpb25zKSA9IGJiLnByb3ZpZGVycy5maW5kUHJvdmlkZXJzKHNlbGYuZGF0YSwgc2VsZi5yZWNpcGVjYWNoZSwgcGtnX3BuKQorCisgICAgICAgIGxvZ2dlci5wbGFpbigiJS0zNXMgJTI1cyAlMjVzIiwgIlJlY2lwZSBOYW1lIiwgIkxhdGVzdCBWZXJzaW9uIiwgIlByZWZlcnJlZCBWZXJzaW9uIikKKyAgICAgICAgbG9nZ2VyLnBsYWluKCIlLTM1cyAlMjVzICUyNXNcbiIsICI9PT09PT09PT09PSIsICI9PT09PT09PT09PT09PSIsICI9PT09PT09PT09PT09PT09PSIpCisKKyAgICAgICAgZm9yIHAgaW4gc29ydGVkKHBrZ19wbik6CisgICAgICAgICAgICBwcmVmID0gcHJlZmVycmVkX3ZlcnNpb25zW3BdCisgICAgICAgICAgICBsYXRlc3QgPSBsYXRlc3RfdmVyc2lvbnNbcF0KKworICAgICAgICAgICAgcHJlZnN0ciA9IHByZWZbMF1bMF0gKyAiOiIgKyBwcmVmWzBdWzFdICsgJy0nICsgcHJlZlswXVsyXQorICAgICAgICAgICAgbGF0ZXN0c3RyID0gbGF0ZXN0WzBdWzBdICsgIjoiICsgbGF0ZXN0WzBdWzFdICsgIi0iICsgbGF0ZXN0WzBdWzJdCisKKyAgICAgICAgICAgIGlmIHByZWYgPT0gbGF0ZXN0OgorICAgICAgICAgICAgICAgIHByZWZzdHIgPSAiIgorCisgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiUtMzVzICUyNXMgJTI1cyIsIHAsIGxhdGVzdHN0ciwgcHJlZnN0cikKKworICAgIGRlZiBzaG93RW52aXJvbm1lbnQoc2VsZiwgYnVpbGRmaWxlPU5vbmUsIHBrZ3NfdG9fYnVpbGQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBTaG93IHRoZSBvdXRlciBvciBwZXItcmVjaXBlIGVudmlyb25tZW50CisgICAgICAgICIiIgorICAgICAgICBmbiA9IE5vbmUKKyAgICAgICAgZW52ZGF0YSA9IE5vbmUKKyAgICAgICAgaWYgbm90IHBrZ3NfdG9fYnVpbGQ6CisgICAgICAgICAgICBwa2dzX3RvX2J1aWxkID0gW10KKworICAgICAgICBpZiBidWlsZGZpbGU6CisgICAgICAgICAgICAjIFBhcnNlIHRoZSBjb25maWd1cmF0aW9uIGhlcmUuIFdlIG5lZWQgdG8gZG8gaXQgZXhwbGljaXRseSBoZXJlIHNpbmNlCisgICAgICAgICAgICAjIHRoaXMgc2hvd0Vudmlyb25tZW50KCkgY29kZSBwYXRoIGRvZXNuJ3QgdXNlIHRoZSBjYWNoZQorICAgICAgICAgICAgc2VsZi5wYXJzZUNvbmZpZ3VyYXRpb24oKQorCisgICAgICAgICAgICBmbiwgY2xzID0gYmIuY2FjaGUuQ2FjaGUudmlydHVhbGZuMnJlYWxmbihidWlsZGZpbGUpCisgICAgICAgICAgICBmbiA9IHNlbGYubWF0Y2hGaWxlKGZuKQorICAgICAgICAgICAgZm4gPSBiYi5jYWNoZS5DYWNoZS5yZWFsZm4ydmlydHVhbChmbiwgY2xzKQorICAgICAgICBlbGlmIGxlbihwa2dzX3RvX2J1aWxkKSA9PSAxOgorICAgICAgICAgICAgaWdub3JlID0gc2VsZi5leHBhbmRlZF9kYXRhLmdldFZhcigiQVNTVU1FX1BST1ZJREVEIiwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgIGlmIHBrZ3NfdG9fYnVpbGRbMF0gaW4gc2V0KGlnbm9yZS5zcGxpdCgpKToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiJXMgaXMgaW4gQVNTVU1FX1BST1ZJREVEIiAlIHBrZ3NfdG9fYnVpbGRbMF0pCisKKyAgICAgICAgICAgIHRhc2tkYXRhLCBydW5saXN0LCBwa2dzX3RvX2J1aWxkID0gc2VsZi5idWlsZFRhc2tEYXRhKHBrZ3NfdG9fYnVpbGQsIE5vbmUsIHNlbGYuY29uZmlndXJhdGlvbi5hYm9ydCwgYWxsb3dpbmNvbXBsZXRlPVRydWUpCisKKyAgICAgICAgICAgIHRhcmdldGlkID0gdGFza2RhdGEuZ2V0YnVpbGRfaWQocGtnc190b19idWlsZFswXSkKKyAgICAgICAgICAgIGZuaWQgPSB0YXNrZGF0YS5idWlsZF90YXJnZXRzW3RhcmdldGlkXVswXQorICAgICAgICAgICAgZm4gPSB0YXNrZGF0YS5mbl9pbmRleFtmbmlkXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZW52ZGF0YSA9IHNlbGYuZGF0YQorCisgICAgICAgIGlmIGZuOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGVudmRhdGEgPSBiYi5jYWNoZS5DYWNoZS5sb2FkRGF0YUZ1bGwoZm4sIHNlbGYuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIHBhcnNlbG9nLmV4Y2VwdGlvbigiVW5hYmxlIHRvIHJlYWQgJXMiLCBmbikKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICMgRGlzcGxheSBoaXN0b3J5CisgICAgICAgIHdpdGggY2xvc2luZyhTdHJpbmdJTygpKSBhcyBlbnY6CisgICAgICAgICAgICBzZWxmLmRhdGEuaW5jaGlzdG9yeS5lbWl0KGVudikKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbihlbnYuZ2V0dmFsdWUoKSkKKworICAgICAgICAjIGVtaXQgdmFyaWFibGVzIGFuZCBzaGVsbCBmdW5jdGlvbnMKKyAgICAgICAgZGF0YS51cGRhdGVfZGF0YShlbnZkYXRhKQorICAgICAgICB3aXRoIGNsb3NpbmcoU3RyaW5nSU8oKSkgYXMgZW52OgorICAgICAgICAgICAgZGF0YS5lbWl0X2VudihlbnYsIGVudmRhdGEsIFRydWUpCisgICAgICAgICAgICBsb2dnZXIucGxhaW4oZW52LmdldHZhbHVlKCkpCisKKyAgICAgICAgIyBlbWl0IHRoZSBtZXRhZGF0YSB3aGljaCBpc250IHZhbGlkIHNoZWxsCisgICAgICAgIGRhdGEuZXhwYW5kS2V5cyhlbnZkYXRhKQorICAgICAgICBmb3IgZSBpbiBlbnZkYXRhLmtleXMoKToKKyAgICAgICAgICAgIGlmIGRhdGEuZ2V0VmFyRmxhZyggZSwgJ3B5dGhvbicsIGVudmRhdGEgKToKKyAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIlxucHl0aG9uICVzICgpIHtcbiVzfVxuIiwgZSwgZW52ZGF0YS5nZXRWYXIoZSwgVHJ1ZSkpCisKKworICAgIGRlZiBidWlsZFRhc2tEYXRhKHNlbGYsIHBrZ3NfdG9fYnVpbGQsIHRhc2ssIGFib3J0LCBhbGxvd2luY29tcGxldGU9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBhIHJ1bnF1ZXVlIGFuZCB0YXNrZGF0YSBvYmplY3QgZm9yIGl0ZXJhdGlvbiBvdmVyIHBrZ3NfdG9fYnVpbGQKKyAgICAgICAgIiIiCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvblN0YXJ0ZWQoKSwgc2VsZi5kYXRhKQorCisgICAgICAgICMgQSB0YXNrIG9mIE5vbmUgbWVhbnMgdXNlIHRoZSBkZWZhdWx0IHRhc2sKKyAgICAgICAgaWYgdGFzayBpcyBOb25lOgorICAgICAgICAgICAgdGFzayA9IHNlbGYuY29uZmlndXJhdGlvbi5jbWQKKworICAgICAgICBmdWxsdGFyZ2V0bGlzdCA9IHNlbGYuY2hlY2tQYWNrYWdlcyhwa2dzX3RvX2J1aWxkKQorCisgICAgICAgIGxvY2FsZGF0YSA9IGRhdGEuY3JlYXRlQ29weShzZWxmLmRhdGEpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICBiYi5kYXRhLmV4cGFuZEtleXMobG9jYWxkYXRhKQorICAgICAgICB0YXNrZGF0YSA9IGJiLnRhc2tkYXRhLlRhc2tEYXRhKGFib3J0LCBza2lwbGlzdD1zZWxmLnNraXBsaXN0LCBhbGxvd2luY29tcGxldGU9YWxsb3dpbmNvbXBsZXRlKQorCisgICAgICAgIGN1cnJlbnQgPSAwCisgICAgICAgIHJ1bmxpc3QgPSBbXQorICAgICAgICBmb3IgayBpbiBmdWxsdGFyZ2V0bGlzdDoKKyAgICAgICAgICAgIGt0YXNrID0gdGFzaworICAgICAgICAgICAgaWYgIjpkb18iIGluIGs6CisgICAgICAgICAgICAgICAgazIgPSBrLnNwbGl0KCI6ZG9fIikKKyAgICAgICAgICAgICAgICBrID0gazJbMF0KKyAgICAgICAgICAgICAgICBrdGFzayA9IGsyWzFdCisgICAgICAgICAgICB0YXNrZGF0YS5hZGRfcHJvdmlkZXIobG9jYWxkYXRhLCBzZWxmLnJlY2lwZWNhY2hlLCBrKQorICAgICAgICAgICAgY3VycmVudCArPSAxCisgICAgICAgICAgICBpZiBub3Qga3Rhc2suc3RhcnRzd2l0aCgiZG9fIik6CisgICAgICAgICAgICAgICAga3Rhc2sgPSAiZG9fJXMiICUga3Rhc2sKKyAgICAgICAgICAgIHJ1bmxpc3QuYXBwZW5kKFtrLCBrdGFza10pCisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlRyZWVEYXRhUHJlcGFyYXRpb25Qcm9ncmVzcyhjdXJyZW50LCBsZW4oZnVsbHRhcmdldGxpc3QpKSwgc2VsZi5kYXRhKQorICAgICAgICB0YXNrZGF0YS5hZGRfdW5yZXNvbHZlZChsb2NhbGRhdGEsIHNlbGYucmVjaXBlY2FjaGUpCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvbkNvbXBsZXRlZChsZW4oZnVsbHRhcmdldGxpc3QpKSwgc2VsZi5kYXRhKQorICAgICAgICByZXR1cm4gdGFza2RhdGEsIHJ1bmxpc3QsIGZ1bGx0YXJnZXRsaXN0CisKKyAgICBkZWYgcHJlcGFyZVRyZWVEYXRhKHNlbGYsIHBrZ3NfdG9fYnVpbGQsIHRhc2spOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBhIHJ1bnF1ZXVlIGFuZCB0YXNrZGF0YSBvYmplY3QgZm9yIGl0ZXJhdGlvbiBvdmVyIHBrZ3NfdG9fYnVpbGQKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXZSBzZXQgYWJvcnQgdG8gRmFsc2UgaGVyZSB0byBwcmV2ZW50IHVuYnVpbGRhYmxlIHRhcmdldHMgcmFpc2luZworICAgICAgICAjIGFuIGV4Y2VwdGlvbiB3aGVuIHdlJ3JlIGp1c3QgZ2VuZXJhdGluZyBkYXRhCisgICAgICAgIHRhc2tkYXRhLCBydW5saXN0LCBwa2dzX3RvX2J1aWxkID0gc2VsZi5idWlsZFRhc2tEYXRhKHBrZ3NfdG9fYnVpbGQsIHRhc2ssIEZhbHNlLCBhbGxvd2luY29tcGxldGU9VHJ1ZSkKKworICAgICAgICByZXR1cm4gcnVubGlzdCwgdGFza2RhdGEKKworICAgICMjIyMjIyMjIFdBUk5JTkcgOiB0aGlzIGZ1bmN0aW9uIHJlcXVpcmVzIGNhY2hlX2V4dHJhIHRvIGJlIGVuYWJsZWQgIyMjIyMjIyMKKworICAgIGRlZiBnZW5lcmF0ZVRhc2tEZXBUcmVlRGF0YShzZWxmLCBwa2dzX3RvX2J1aWxkLCB0YXNrKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIGRlcGVuZGVuY3kgZ3JhcGggb2YgcGtnc190b19idWlsZCBpbmNsdWRpbmcgcmV2ZXJzZSBkZXBlbmRlbmN5CisgICAgICAgIGluZm9ybWF0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgcnVubGlzdCwgdGFza2RhdGEgPSBzZWxmLnByZXBhcmVUcmVlRGF0YShwa2dzX3RvX2J1aWxkLCB0YXNrKQorICAgICAgICBycSA9IGJiLnJ1bnF1ZXVlLlJ1blF1ZXVlKHNlbGYsIHNlbGYuZGF0YSwgc2VsZi5yZWNpcGVjYWNoZSwgdGFza2RhdGEsIHJ1bmxpc3QpCisgICAgICAgIHJxLnJxZGF0YS5wcmVwYXJlKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuYnVpbGREZXBlbmRUcmVlKHJxLCB0YXNrZGF0YSkKKworCisgICAgZGVmIGJ1aWxkRGVwZW5kVHJlZShzZWxmLCBycSwgdGFza2RhdGEpOgorICAgICAgICBzZWVuX2ZuaWRzID0gW10KKyAgICAgICAgZGVwZW5kX3RyZWUgPSB7fQorICAgICAgICBkZXBlbmRfdHJlZVsiZGVwZW5kcyJdID0ge30KKyAgICAgICAgZGVwZW5kX3RyZWVbInRkZXBlbmRzIl0gPSB7fQorICAgICAgICBkZXBlbmRfdHJlZVsicG4iXSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJyZGVwZW5kcy1wbiJdID0ge30KKyAgICAgICAgZGVwZW5kX3RyZWVbInBhY2thZ2VzIl0gPSB7fQorICAgICAgICBkZXBlbmRfdHJlZVsicmRlcGVuZHMtcGtnIl0gPSB7fQorICAgICAgICBkZXBlbmRfdHJlZVsicnJlY3MtcGtnIl0gPSB7fQorICAgICAgICBkZXBlbmRfdHJlZVsibGF5ZXItcHJpb3JpdGllcyJdID0gc2VsZi5yZWNpcGVjYWNoZS5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXMKKworICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHJxLnJxZGF0YS5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIHRhc2tuYW1lID0gcnEucnFkYXRhLnJ1bnFfdGFza1t0YXNrXQorICAgICAgICAgICAgZm5pZCA9IHJxLnJxZGF0YS5ydW5xX2ZuaWRbdGFza10KKyAgICAgICAgICAgIGZuID0gdGFza2RhdGEuZm5faW5kZXhbZm5pZF0KKyAgICAgICAgICAgIHBuID0gc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm5bZm5dCisgICAgICAgICAgICB2ZXJzaW9uICA9ICIlczolcy0lcyIgJSBzZWxmLnJlY2lwZWNhY2hlLnBrZ19wZXB2cHJbZm5dCisgICAgICAgICAgICBpZiBwbiBub3QgaW4gZGVwZW5kX3RyZWVbInBuIl06CisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBuIl1bcG5dID0ge30KKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl1bImZpbGVuYW1lIl0gPSBmbgorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVsidmVyc2lvbiJdID0gdmVyc2lvbgorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVsiaW5oZXJpdHMiXSA9IHNlbGYucmVjaXBlY2FjaGUuaW5oZXJpdHMuZ2V0KGZuLCBOb25lKQorCisgICAgICAgICAgICAgICAgIyBpZiB3ZSBoYXZlIGV4dHJhIGNhY2hlcywgbGlzdCBhbGwgYXR0cmlidXRlcyB0aGV5IGJyaW5nIGluCisgICAgICAgICAgICAgICAgZXh0cmFfaW5mbyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgICAgICAgICBpZiB0eXBlKGNhY2hlX2NsYXNzKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKGNhY2hlX2NsYXNzLCBiYi5jYWNoZS5SZWNpcGVJbmZvQ29tbW9uKSBhbmQgaGFzYXR0cihjYWNoZV9jbGFzcywgJ2NhY2hlZmllbGRzJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWZpZWxkcyA9IGdldGF0dHIoY2FjaGVfY2xhc3MsICdjYWNoZWZpZWxkcycsIFtdKQorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfaW5mbyA9IGV4dHJhX2luZm8gKyBjYWNoZWZpZWxkcworCisgICAgICAgICAgICAgICAgIyBmb3IgYWxsIGF0dHJpYnV0ZXMgc3RvcmVkLCBhZGQgdGhlbSB0byB0aGUgZGVwZW5kZW5jeSB0cmVlCisgICAgICAgICAgICAgICAgZm9yIGVpIGluIGV4dHJhX2luZm86CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVtlaV0gPSB2YXJzKHNlbGYucmVjaXBlY2FjaGUpW2VpXVtmbl0KKworCisgICAgICAgICAgICBmb3IgZGVwIGluIHJxLnJxZGF0YS5ydW5xX2RlcGVuZHNbdGFza106CisgICAgICAgICAgICAgICAgZGVwZm4gPSB0YXNrZGF0YS5mbl9pbmRleFtycS5ycWRhdGEucnVucV9mbmlkW2RlcF1dCisgICAgICAgICAgICAgICAgZGVwcG4gPSBzZWxmLnJlY2lwZWNhY2hlLnBrZ19mbltkZXBmbl0KKyAgICAgICAgICAgICAgICBkb3RuYW1lID0gIiVzLiVzIiAlIChwbiwgcnEucnFkYXRhLnJ1bnFfdGFza1t0YXNrXSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZG90bmFtZSBpbiBkZXBlbmRfdHJlZVsidGRlcGVuZHMiXToKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInRkZXBlbmRzIl1bZG90bmFtZV0gPSBbXQorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJ0ZGVwZW5kcyJdW2RvdG5hbWVdLmFwcGVuZCgiJXMuJXMiICUgKGRlcHBuLCBycS5ycWRhdGEucnVucV90YXNrW2RlcF0pKQorICAgICAgICAgICAgaWYgZm5pZCBub3QgaW4gc2Vlbl9mbmlkczoKKyAgICAgICAgICAgICAgICBzZWVuX2ZuaWRzLmFwcGVuZChmbmlkKQorICAgICAgICAgICAgICAgIHBhY2thZ2VzID0gW10KKworICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJkZXBlbmRzIl1bcG5dID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHRhc2tkYXRhLmRlcGlkc1tmbmlkXToKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbImRlcGVuZHMiXVtwbl0uYXBwZW5kKHRhc2tkYXRhLmJ1aWxkX25hbWVzX2luZGV4W2RlcF0pCisKKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicmRlcGVuZHMtcG4iXVtwbl0gPSBbXQorICAgICAgICAgICAgICAgIGZvciByZGVwIGluIHRhc2tkYXRhLnJkZXBpZHNbZm5pZF06CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJyZGVwZW5kcy1wbiJdW3BuXS5hcHBlbmQodGFza2RhdGEucnVuX25hbWVzX2luZGV4W3JkZXBdKQorCisgICAgICAgICAgICAgICAgcmRlcGVuZHMgPSBzZWxmLnJlY2lwZWNhY2hlLnJ1bmRlcHNbZm5dCisgICAgICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJyZGVwZW5kcy1wa2ciXVtwYWNrYWdlXSA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZvciByZGVwZW5kIGluIHJkZXBlbmRzW3BhY2thZ2VdOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBrZyJdW3BhY2thZ2VdLmFwcGVuZChyZGVwZW5kKQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcy5hcHBlbmQocGFja2FnZSkKKworICAgICAgICAgICAgICAgIHJyZWNzID0gc2VsZi5yZWNpcGVjYWNoZS5ydW5yZWNzW2ZuXQorICAgICAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIHJyZWNzOgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicnJlY3MtcGtnIl1bcGFja2FnZV0gPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3IgcmRlcGVuZCBpbiBycmVjc1twYWNrYWdlXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJycmVjcy1wa2ciXVtwYWNrYWdlXS5hcHBlbmQocmRlcGVuZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcy5hcHBlbmQocGFja2FnZSkKKworICAgICAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgICAgICAgICBpZiBwYWNrYWdlIG5vdCBpbiBkZXBlbmRfdHJlZVsicGFja2FnZXMiXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwYWNrYWdlcyJdW3BhY2thZ2VdID0ge30KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwYWNrYWdlcyJdW3BhY2thZ2VdWyJwbiJdID0gcG4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwYWNrYWdlcyJdW3BhY2thZ2VdWyJmaWxlbmFtZSJdID0gZm4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwYWNrYWdlcyJdW3BhY2thZ2VdWyJ2ZXJzaW9uIl0gPSB2ZXJzaW9uCisKKyAgICAgICAgcmV0dXJuIGRlcGVuZF90cmVlCisKKyAgICAjIyMjIyMjIyBXQVJOSU5HIDogdGhpcyBmdW5jdGlvbiByZXF1aXJlcyBjYWNoZV9leHRyYSB0byBiZSBlbmFibGVkICMjIyMjIyMjCisgICAgZGVmIGdlbmVyYXRlUGtnRGVwVHJlZURhdGEoc2VsZiwgcGtnc190b19idWlsZCwgdGFzayk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgYSBkZXBlbmRlbmN5IHRyZWUgb2YgcGtnc190b19idWlsZCwgcmV0dXJuaW5nIHRoZSBkYXRhLgorICAgICAgICAiIiIKKyAgICAgICAgXywgdGFza2RhdGEgPSBzZWxmLnByZXBhcmVUcmVlRGF0YShwa2dzX3RvX2J1aWxkLCB0YXNrKQorICAgICAgICB0YXNrc19mbmlkID0gW10KKyAgICAgICAgaWYgbGVuKHRhc2tkYXRhLnRhc2tzX25hbWUpICE9IDA6CisgICAgICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHRhc2tkYXRhLnRhc2tzX25hbWUpKToKKyAgICAgICAgICAgICAgICB0YXNrc19mbmlkLmFwcGVuZCh0YXNrZGF0YS50YXNrc19mbmlkW3Rhc2tdKQorCisgICAgICAgIHNlZW5fZm5pZHMgPSBbXQorICAgICAgICBkZXBlbmRfdHJlZSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJkZXBlbmRzIl0gPSB7fQorICAgICAgICBkZXBlbmRfdHJlZVsicG4iXSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJyZGVwZW5kcy1wbiJdID0ge30KKyAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBrZyJdID0ge30KKyAgICAgICAgZGVwZW5kX3RyZWVbInJyZWNzLXBrZyJdID0ge30KKworICAgICAgICAjIGlmIHdlIGhhdmUgZXh0cmEgY2FjaGVzLCBsaXN0IGFsbCBhdHRyaWJ1dGVzIHRoZXkgYnJpbmcgaW4KKyAgICAgICAgZXh0cmFfaW5mbyA9IFtdCisgICAgICAgIGZvciBjYWNoZV9jbGFzcyBpbiBzZWxmLmNhY2hlc19hcnJheToKKyAgICAgICAgICAgIGlmIHR5cGUoY2FjaGVfY2xhc3MpIGlzIHR5cGUgYW5kIGlzc3ViY2xhc3MoY2FjaGVfY2xhc3MsIGJiLmNhY2hlLlJlY2lwZUluZm9Db21tb24pIGFuZCBoYXNhdHRyKGNhY2hlX2NsYXNzLCAnY2FjaGVmaWVsZHMnKToKKyAgICAgICAgICAgICAgICBjYWNoZWZpZWxkcyA9IGdldGF0dHIoY2FjaGVfY2xhc3MsICdjYWNoZWZpZWxkcycsIFtdKQorICAgICAgICAgICAgICAgIGV4dHJhX2luZm8gPSBleHRyYV9pbmZvICsgY2FjaGVmaWVsZHMKKworICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHRhc2tzX2ZuaWQpKToKKyAgICAgICAgICAgIGZuaWQgPSB0YXNrc19mbmlkW3Rhc2tdCisgICAgICAgICAgICBmbiA9IHRhc2tkYXRhLmZuX2luZGV4W2ZuaWRdCisgICAgICAgICAgICBwbiA9IHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuW2ZuXQorCisgICAgICAgICAgICBpZiBwbiBub3QgaW4gZGVwZW5kX3RyZWVbInBuIl06CisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBuIl1bcG5dID0ge30KKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl1bImZpbGVuYW1lIl0gPSBmbgorICAgICAgICAgICAgICAgIHZlcnNpb24gID0gIiVzOiVzLSVzIiAlIHNlbGYucmVjaXBlY2FjaGUucGtnX3BlcHZwcltmbl0KKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl1bInZlcnNpb24iXSA9IHZlcnNpb24KKyAgICAgICAgICAgICAgICByZGVwZW5kcyA9IHNlbGYucmVjaXBlY2FjaGUucnVuZGVwc1tmbl0KKyAgICAgICAgICAgICAgICBycmVjcyA9IHNlbGYucmVjaXBlY2FjaGUucnVucmVjc1tmbl0KKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl1bImluaGVyaXRzIl0gPSBzZWxmLnJlY2lwZWNhY2hlLmluaGVyaXRzLmdldChmbiwgTm9uZSkKKworICAgICAgICAgICAgICAgICMgZm9yIGFsbCBleHRyYSBhdHRyaWJ1dGVzIHN0b3JlZCwgYWRkIHRoZW0gdG8gdGhlIGRlcGVuZGVuY3kgdHJlZQorICAgICAgICAgICAgICAgIGZvciBlaSBpbiBleHRyYV9pbmZvOgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl1bZWldID0gdmFycyhzZWxmLnJlY2lwZWNhY2hlKVtlaV1bZm5dCisKKyAgICAgICAgICAgIGlmIGZuaWQgbm90IGluIHNlZW5fZm5pZHM6CisgICAgICAgICAgICAgICAgc2Vlbl9mbmlkcy5hcHBlbmQoZm5pZCkKKworICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJkZXBlbmRzIl1bcG5dID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHRhc2tkYXRhLmRlcGlkc1tmbmlkXToKKyAgICAgICAgICAgICAgICAgICAgaXRlbSA9IHRhc2tkYXRhLmJ1aWxkX25hbWVzX2luZGV4W2RlcF0KKyAgICAgICAgICAgICAgICAgICAgcG5fcHJvdmlkZXIgPSAiIgorICAgICAgICAgICAgICAgICAgICB0YXJnZXRpZCA9IHRhc2tkYXRhLmdldGJ1aWxkX2lkKGl0ZW0pCisgICAgICAgICAgICAgICAgICAgIGlmIHRhcmdldGlkIGluIHRhc2tkYXRhLmJ1aWxkX3RhcmdldHMgYW5kIHRhc2tkYXRhLmJ1aWxkX3RhcmdldHNbdGFyZ2V0aWRdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSB0YXNrZGF0YS5idWlsZF90YXJnZXRzW3RhcmdldGlkXVswXQorICAgICAgICAgICAgICAgICAgICAgICAgZm5fcHJvdmlkZXIgPSB0YXNrZGF0YS5mbl9pbmRleFtpZF0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBuX3Byb3ZpZGVyID0gc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm5bZm5fcHJvdmlkZXJdCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwbl9wcm92aWRlciA9IGl0ZW0KKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbImRlcGVuZHMiXVtwbl0uYXBwZW5kKHBuX3Byb3ZpZGVyKQorCisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBuIl1bcG5dID0gW10KKyAgICAgICAgICAgICAgICBmb3IgcmRlcCBpbiB0YXNrZGF0YS5yZGVwaWRzW2ZuaWRdOgorICAgICAgICAgICAgICAgICAgICBpdGVtID0gdGFza2RhdGEucnVuX25hbWVzX2luZGV4W3JkZXBdCisgICAgICAgICAgICAgICAgICAgIHBuX3Jwcm92aWRlciA9ICIiCisgICAgICAgICAgICAgICAgICAgIHRhcmdldGlkID0gdGFza2RhdGEuZ2V0cnVuX2lkKGl0ZW0pCisgICAgICAgICAgICAgICAgICAgIGlmIHRhcmdldGlkIGluIHRhc2tkYXRhLnJ1bl90YXJnZXRzIGFuZCB0YXNrZGF0YS5ydW5fdGFyZ2V0c1t0YXJnZXRpZF06CisgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IHRhc2tkYXRhLnJ1bl90YXJnZXRzW3RhcmdldGlkXVswXQorICAgICAgICAgICAgICAgICAgICAgICAgZm5fcnByb3ZpZGVyID0gdGFza2RhdGEuZm5faW5kZXhbaWRdCisgICAgICAgICAgICAgICAgICAgICAgICBwbl9ycHJvdmlkZXIgPSBzZWxmLnJlY2lwZWNhY2hlLnBrZ19mbltmbl9ycHJvdmlkZXJdCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwbl9ycHJvdmlkZXIgPSBpdGVtCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJyZGVwZW5kcy1wbiJdW3BuXS5hcHBlbmQocG5fcnByb3ZpZGVyKQorCisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBrZyJdLnVwZGF0ZShyZGVwZW5kcykKKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicnJlY3MtcGtnIl0udXBkYXRlKHJyZWNzKQorCisgICAgICAgIHJldHVybiBkZXBlbmRfdHJlZQorCisgICAgZGVmIGdlbmVyYXRlRGVwVHJlZUV2ZW50KHNlbGYsIHBrZ3NfdG9fYnVpbGQsIHRhc2spOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGEgdGFzayBkZXBlbmRlbmN5IGdyYXBoIG9mIHBrZ3NfdG9fYnVpbGQuCisgICAgICAgIEdlbmVyYXRlIGFuIGV2ZW50IHdpdGggdGhlIHJlc3VsdAorICAgICAgICAiIiIKKyAgICAgICAgZGVwZ3JhcGggPSBzZWxmLmdlbmVyYXRlVGFza0RlcFRyZWVEYXRhKHBrZ3NfdG9fYnVpbGQsIHRhc2spCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuRGVwVHJlZUdlbmVyYXRlZChkZXBncmFwaCksIHNlbGYuZGF0YSkKKworICAgIGRlZiBnZW5lcmF0ZURvdEdyYXBoRmlsZXMoc2VsZiwgcGtnc190b19idWlsZCwgdGFzayk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgYSB0YXNrIGRlcGVuZGVuY3kgZ3JhcGggb2YgcGtnc190b19idWlsZC4KKyAgICAgICAgU2F2ZSB0aGUgcmVzdWx0IHRvIGEgc2V0IG9mIC5kb3QgZmlsZXMuCisgICAgICAgICIiIgorCisgICAgICAgIGRlcGdyYXBoID0gc2VsZi5nZW5lcmF0ZVRhc2tEZXBUcmVlRGF0YShwa2dzX3RvX2J1aWxkLCB0YXNrKQorCisgICAgICAgICMgUHJpbnRzIGEgZmxhdHRlbmVkIGZvcm0gb2YgcGFja2FnZS1kZXBlbmRzIGJlbG93IHdoZXJlIHN1YnBhY2thZ2VzIG9mIGEgcGFja2FnZSBhcmUgbWVyZ2VkIGludG8gdGhlIG1haW4gcG4KKyAgICAgICAgZGVwZW5kc19maWxlID0gZmlsZSgncG4tZGVwZW5kcy5kb3QnLCAndycgKQorICAgICAgICBidWlsZGxpc3RfZmlsZSA9IGZpbGUoJ3BuLWJ1aWxkbGlzdCcsICd3JyApCisgICAgICAgIHByaW50KCJkaWdyYXBoIGRlcGVuZHMgeyIsIGZpbGU9ZGVwZW5kc19maWxlKQorICAgICAgICBmb3IgcG4gaW4gZGVwZ3JhcGhbInBuIl06CisgICAgICAgICAgICBmbiA9IGRlcGdyYXBoWyJwbiJdW3BuXVsiZmlsZW5hbWUiXQorICAgICAgICAgICAgdmVyc2lvbiA9IGRlcGdyYXBoWyJwbiJdW3BuXVsidmVyc2lvbiJdCisgICAgICAgICAgICBwcmludCgnIiVzIiBbbGFiZWw9IiVzICVzXFxuJXMiXScgJSAocG4sIHBuLCB2ZXJzaW9uLCBmbiksIGZpbGU9ZGVwZW5kc19maWxlKQorICAgICAgICAgICAgcHJpbnQoIiVzIiAlIHBuLCBmaWxlPWJ1aWxkbGlzdF9maWxlKQorICAgICAgICBidWlsZGxpc3RfZmlsZS5jbG9zZSgpCisgICAgICAgIGxvZ2dlci5pbmZvKCJQTiBidWlsZCBsaXN0IHNhdmVkIHRvICdwbi1idWlsZGxpc3QnIikKKyAgICAgICAgZm9yIHBuIGluIGRlcGdyYXBoWyJkZXBlbmRzIl06CisgICAgICAgICAgICBmb3IgZGVwZW5kIGluIGRlcGdyYXBoWyJkZXBlbmRzIl1bcG5dOgorICAgICAgICAgICAgICAgIHByaW50KCciJXMiIC0+ICIlcyInICUgKHBuLCBkZXBlbmQpLCBmaWxlPWRlcGVuZHNfZmlsZSkKKyAgICAgICAgZm9yIHBuIGluIGRlcGdyYXBoWyJyZGVwZW5kcy1wbiJdOgorICAgICAgICAgICAgZm9yIHJkZXBlbmQgaW4gZGVwZ3JhcGhbInJkZXBlbmRzLXBuIl1bcG5dOgorICAgICAgICAgICAgICAgIHByaW50KCciJXMiIC0+ICIlcyIgW3N0eWxlPWRhc2hlZF0nICUgKHBuLCByZGVwZW5kKSwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIHByaW50KCJ9IiwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIGxvZ2dlci5pbmZvKCJQTiBkZXBlbmRlbmNpZXMgc2F2ZWQgdG8gJ3BuLWRlcGVuZHMuZG90JyIpCisKKyAgICAgICAgZGVwZW5kc19maWxlID0gZmlsZSgncGFja2FnZS1kZXBlbmRzLmRvdCcsICd3JyApCisgICAgICAgIHByaW50KCJkaWdyYXBoIGRlcGVuZHMgeyIsIGZpbGU9ZGVwZW5kc19maWxlKQorICAgICAgICBmb3IgcGFja2FnZSBpbiBkZXBncmFwaFsicGFja2FnZXMiXToKKyAgICAgICAgICAgIHBuID0gZGVwZ3JhcGhbInBhY2thZ2VzIl1bcGFja2FnZV1bInBuIl0KKyAgICAgICAgICAgIGZuID0gZGVwZ3JhcGhbInBhY2thZ2VzIl1bcGFja2FnZV1bImZpbGVuYW1lIl0KKyAgICAgICAgICAgIHZlcnNpb24gPSBkZXBncmFwaFsicGFja2FnZXMiXVtwYWNrYWdlXVsidmVyc2lvbiJdCisgICAgICAgICAgICBpZiBwYWNrYWdlID09IHBuOgorICAgICAgICAgICAgICAgIHByaW50KCciJXMiIFtsYWJlbD0iJXMgJXNcXG4lcyJdJyAlIChwbiwgcG4sIHZlcnNpb24sIGZuKSwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50KCciJXMiIFtsYWJlbD0iJXMoJXMpICVzXFxuJXMiXScgJSAocGFja2FnZSwgcGFja2FnZSwgcG4sIHZlcnNpb24sIGZuKSwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgICAgICBmb3IgZGVwZW5kIGluIGRlcGdyYXBoWyJkZXBlbmRzIl1bcG5dOgorICAgICAgICAgICAgICAgIHByaW50KCciJXMiIC0+ICIlcyInICUgKHBhY2thZ2UsIGRlcGVuZCksIGZpbGU9ZGVwZW5kc19maWxlKQorICAgICAgICBmb3IgcGFja2FnZSBpbiBkZXBncmFwaFsicmRlcGVuZHMtcGtnIl06CisgICAgICAgICAgICBmb3IgcmRlcGVuZCBpbiBkZXBncmFwaFsicmRlcGVuZHMtcGtnIl1bcGFja2FnZV06CisgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgLT4gIiVzIiBbc3R5bGU9ZGFzaGVkXScgJSAocGFja2FnZSwgcmRlcGVuZCksIGZpbGU9ZGVwZW5kc19maWxlKQorICAgICAgICBmb3IgcGFja2FnZSBpbiBkZXBncmFwaFsicnJlY3MtcGtnIl06CisgICAgICAgICAgICBmb3IgcmRlcGVuZCBpbiBkZXBncmFwaFsicnJlY3MtcGtnIl1bcGFja2FnZV06CisgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgLT4gIiVzIiBbc3R5bGU9ZGFzaGVkXScgJSAocGFja2FnZSwgcmRlcGVuZCksIGZpbGU9ZGVwZW5kc19maWxlKQorICAgICAgICBwcmludCgifSIsIGZpbGU9ZGVwZW5kc19maWxlKQorICAgICAgICBsb2dnZXIuaW5mbygiUGFja2FnZSBkZXBlbmRlbmNpZXMgc2F2ZWQgdG8gJ3BhY2thZ2UtZGVwZW5kcy5kb3QnIikKKworICAgICAgICB0ZGVwZW5kc19maWxlID0gZmlsZSgndGFzay1kZXBlbmRzLmRvdCcsICd3JyApCisgICAgICAgIHByaW50KCJkaWdyYXBoIGRlcGVuZHMgeyIsIGZpbGU9dGRlcGVuZHNfZmlsZSkKKyAgICAgICAgZm9yIHRhc2sgaW4gZGVwZ3JhcGhbInRkZXBlbmRzIl06CisgICAgICAgICAgICAocG4sIHRhc2tuYW1lKSA9IHRhc2sucnNwbGl0KCIuIiwgMSkKKyAgICAgICAgICAgIGZuID0gZGVwZ3JhcGhbInBuIl1bcG5dWyJmaWxlbmFtZSJdCisgICAgICAgICAgICB2ZXJzaW9uID0gZGVwZ3JhcGhbInBuIl1bcG5dWyJ2ZXJzaW9uIl0KKyAgICAgICAgICAgIHByaW50KCciJXMuJXMiIFtsYWJlbD0iJXMgJXNcXG4lc1xcbiVzIl0nICUgKHBuLCB0YXNrbmFtZSwgcG4sIHRhc2tuYW1lLCB2ZXJzaW9uLCBmbiksIGZpbGU9dGRlcGVuZHNfZmlsZSkKKyAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwZ3JhcGhbInRkZXBlbmRzIl1bdGFza106CisgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgLT4gIiVzIicgJSAodGFzaywgZGVwKSwgZmlsZT10ZGVwZW5kc19maWxlKQorICAgICAgICBwcmludCgifSIsIGZpbGU9dGRlcGVuZHNfZmlsZSkKKyAgICAgICAgbG9nZ2VyLmluZm8oIlRhc2sgZGVwZW5kZW5jaWVzIHNhdmVkIHRvICd0YXNrLWRlcGVuZHMuZG90JyIpCisKKyAgICBkZWYgc2hvd19hcHBlbmRzX3dpdGhfbm9fcmVjaXBlcyhzZWxmKToKKyAgICAgICAgIyBEZXRlcm1pbmUgd2hpY2ggYmJhcHBlbmRzIGhhdmVuJ3QgYmVlbiBhcHBsaWVkCisKKyAgICAgICAgIyBGaXJzdCBnZXQgbGlzdCBvZiByZWNpcGVzLCBpbmNsdWRpbmcgc2tpcHBlZAorICAgICAgICByZWNpcGVmbnMgPSBzZWxmLnJlY2lwZWNhY2hlLnBrZ19mbi5rZXlzKCkKKyAgICAgICAgcmVjaXBlZm5zLmV4dGVuZChzZWxmLnNraXBsaXN0LmtleXMoKSkKKworICAgICAgICAjIFdvcmsgb3V0IGxpc3Qgb2YgYmJhcHBlbmRzIHRoYXQgaGF2ZSBiZWVuIGFwcGxpZWQKKyAgICAgICAgYXBwbGllZF9hcHBlbmRzID0gW10KKyAgICAgICAgZm9yIGZuIGluIHJlY2lwZWZuczoKKyAgICAgICAgICAgIGFwcGxpZWRfYXBwZW5kcy5leHRlbmQoc2VsZi5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZm4pKQorCisgICAgICAgIGFwcGVuZHNfd2l0aG91dF9yZWNpcGVzID0gW10KKyAgICAgICAgZm9yIF8sIGFwcGVuZGZuIGluIHNlbGYuY29sbGVjdGlvbi5iYmFwcGVuZHM6CisgICAgICAgICAgICBpZiBub3QgYXBwZW5kZm4gaW4gYXBwbGllZF9hcHBlbmRzOgorICAgICAgICAgICAgICAgIGFwcGVuZHNfd2l0aG91dF9yZWNpcGVzLmFwcGVuZChhcHBlbmRmbikKKworICAgICAgICBpZiBhcHBlbmRzX3dpdGhvdXRfcmVjaXBlczoKKyAgICAgICAgICAgIG1zZyA9ICdObyByZWNpcGVzIGF2YWlsYWJsZSBmb3I6XG4gICVzJyAlICdcbiAgJy5qb2luKGFwcGVuZHNfd2l0aG91dF9yZWNpcGVzKQorICAgICAgICAgICAgd2Fybl9vbmx5ID0gc2VsZi5kYXRhLmdldFZhcigiQkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZIiwgXAorICAgICAgICAgICAgICAgICBGYWxzZSkgb3IgIm5vIgorICAgICAgICAgICAgaWYgd2Fybl9vbmx5Lmxvd2VyKCkgaW4gKCIxIiwgInllcyIsICJ0cnVlIik6CisgICAgICAgICAgICAgICAgYmIud2Fybihtc2cpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKG1zZykKKworICAgIGRlZiBoYW5kbGVQcmVmUHJvdmlkZXJzKHNlbGYpOgorCisgICAgICAgIGxvY2FsZGF0YSA9IGRhdGEuY3JlYXRlQ29weShzZWxmLmRhdGEpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICBiYi5kYXRhLmV4cGFuZEtleXMobG9jYWxkYXRhKQorCisgICAgICAgICMgSGFuZGxlIFBSRUZFUlJFRF9QUk9WSURFUlMKKyAgICAgICAgZm9yIHAgaW4gKGxvY2FsZGF0YS5nZXRWYXIoJ1BSRUZFUlJFRF9QUk9WSURFUlMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAocHJvdmlkZWUsIHByb3ZpZGVyKSA9IHAuc3BsaXQoJzonKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHByb3ZpZGVybG9nLmNyaXRpY2FsKCJNYWxmb3JtZWQgb3B0aW9uIGluIFBSRUZFUlJFRF9QUk9WSURFUlMgdmFyaWFibGU6ICVzIiAlIHApCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHByb3ZpZGVlIGluIHNlbGYucmVjaXBlY2FjaGUucHJlZmVycmVkIGFuZCBzZWxmLnJlY2lwZWNhY2hlLnByZWZlcnJlZFtwcm92aWRlZV0gIT0gcHJvdmlkZXI6CisgICAgICAgICAgICAgICAgcHJvdmlkZXJsb2cuZXJyb3IoImNvbmZsaWN0aW5nIHByZWZlcmVuY2VzIGZvciAlczogYm90aCAlcyBhbmQgJXMgc3BlY2lmaWVkIiwgcHJvdmlkZWUsIHByb3ZpZGVyLCBzZWxmLnJlY2lwZWNhY2hlLnByZWZlcnJlZFtwcm92aWRlZV0pCisgICAgICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLnByZWZlcnJlZFtwcm92aWRlZV0gPSBwcm92aWRlcgorCisgICAgZGVmIGZpbmRDb3JlQmFzZUZpbGVzKHNlbGYsIHN1YmRpciwgY29uZmlnZmlsZSk6CisgICAgICAgIGNvcmViYXNlID0gc2VsZi5kYXRhLmdldFZhcignQ09SRUJBU0UnLCBUcnVlKSBvciAiIgorICAgICAgICBwYXRocyA9IFtdCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGNvcmViYXNlICsgJy8nICsgc3ViZGlyKToKKyAgICAgICAgICAgIGZvciBkIGluIGRpcnM6CisgICAgICAgICAgICAgICAgY29uZmlnZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCwgZCwgY29uZmlnZmlsZSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb25maWdmaWxlcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHBhdGhzLmFwcGVuZChvcy5wYXRoLmpvaW4ocm9vdCwgZCkpCisKKyAgICAgICAgaWYgcGF0aHM6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkNvcmVCYXNlRmlsZXNGb3VuZChwYXRocyksIHNlbGYuZGF0YSkKKworICAgIGRlZiBmaW5kQ29uZmlnRmlsZVBhdGgoc2VsZiwgY29uZmlnZmlsZSk6CisgICAgICAgICIiIgorICAgICAgICBGaW5kIHRoZSBsb2NhdGlvbiBvbiBkaXNrIG9mIGNvbmZpZ2ZpbGUgYW5kIGlmIGl0IGV4aXN0cyBhbmQgd2FzIHBhcnNlZCBieSBCaXRCYWtlCisgICAgICAgIGVtaXQgdGhlIENvbmZpZ0ZpbGVQYXRoRm91bmQgZXZlbnQgd2l0aCB0aGUgcGF0aCB0byB0aGUgZmlsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHBhdGggPSBiYi5jb29rZXJkYXRhLmZpbmRDb25maWdGaWxlKGNvbmZpZ2ZpbGUsIHNlbGYuZGF0YSkKKyAgICAgICAgaWYgbm90IHBhdGg6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIEdlbmVyYXRlIGEgbGlzdCBvZiBwYXJzZWQgY29uZmlndXJhdGlvbiBmaWxlcyBieSBzZWFyY2hpbmcgdGhlIGZpbGVzCisgICAgICAgICMgbGlzdGVkIGluIHRoZSBfX2RlcGVuZHMgYW5kIF9fYmFzZV9kZXBlbmRzIHZhcmlhYmxlcyB3aXRoIGEgLmNvbmYgc3VmZml4LgorICAgICAgICBjb25mZmlsZXMgPSBbXQorICAgICAgICBkZXBfZmlsZXMgPSBzZWxmLmRhdGEuZ2V0VmFyKCdfX2Jhc2VfZGVwZW5kcycsIEZhbHNlKSBvciBbXQorICAgICAgICBkZXBfZmlsZXMgPSBkZXBfZmlsZXMgKyAoc2VsZi5kYXRhLmdldFZhcignX19kZXBlbmRzJywgRmFsc2UpIG9yIFtdKQorCisgICAgICAgIGZvciBmIGluIGRlcF9maWxlczoKKyAgICAgICAgICAgIGlmIGZbMF0uZW5kc3dpdGgoIi5jb25mIik6CisgICAgICAgICAgICAgICAgY29uZmZpbGVzLmFwcGVuZChmWzBdKQorCisgICAgICAgIF8sIGNvbmYsIGNvbmZmaWxlID0gcGF0aC5ycGFydGl0aW9uKCJjb25mLyIpCisgICAgICAgIG1hdGNoID0gb3MucGF0aC5qb2luKGNvbmYsIGNvbmZmaWxlKQorICAgICAgICAjIFRyeSBhbmQgZmluZCBtYXRjaGVzIGZvciBjb25mL2NvbmZmaWxlbmFtZS5jb25mIGFzIHdlIGRvbid0IGFsd2F5cworICAgICAgICAjIGhhdmUgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZmlsZS4KKyAgICAgICAgZm9yIGNmZyBpbiBjb25mZmlsZXM6CisgICAgICAgICAgICBpZiBjZmcuZW5kc3dpdGgobWF0Y2gpOgorICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQ29uZmlnRmlsZVBhdGhGb3VuZChwYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YSkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgZGVmIGZpbmRGaWxlc01hdGNoaW5nSW5EaXIoc2VsZiwgZmlsZXBhdHRlcm4sIGRpcmVjdG9yeSk6CisgICAgICAgICIiIgorICAgICAgICBTZWFyY2hlcyBmb3IgZmlsZXMgbWF0Y2hpbmcgdGhlIHJlZ2V4ICdwYXR0ZXJuJyB3aGljaCBhcmUgY2hpbGRyZW4gb2YKKyAgICAgICAgJ2RpcmVjdG9yeScgaW4gZWFjaCBCQlBBVEguIGkuZS4gdG8gZmluZCBhbGwgcm9vdGZzIHBhY2thZ2UgY2xhc3NlcyBhdmFpbGFibGUKKyAgICAgICAgdG8gQml0QmFrZSBvbmUgY291bGQgY2FsbCBmaW5kRmlsZXNNYXRjaGluZ0luRGlyKHNlbGYsICdyb290ZnNfJywgJ2NsYXNzZXMnKQorICAgICAgICBvciB0byBmaW5kIGFsbCBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZXMgb25lIGNvdWxkIGNhbGw6CisgICAgICAgIGZpbmRGaWxlc01hdGNoaW5nSW5EaXIoc2VsZiwgJ2NvbmYvbWFjaGluZXMnLCAnY29uZicpCisgICAgICAgICIiIgorCisgICAgICAgIG1hdGNoZXMgPSBbXQorICAgICAgICBwID0gcmUuY29tcGlsZShyZS5lc2NhcGUoZmlsZXBhdHRlcm4pKQorICAgICAgICBiYnBhdGhzID0gc2VsZi5kYXRhLmdldFZhcignQkJQQVRIJywgVHJ1ZSkuc3BsaXQoJzonKQorICAgICAgICBmb3IgcGF0aCBpbiBiYnBhdGhzOgorICAgICAgICAgICAgZGlycGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCBkaXJlY3RvcnkpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkaXJwYXRoKToKKyAgICAgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkaXJwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwLnNlYXJjaChmKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChmKQorCisgICAgICAgIGlmIG1hdGNoZXM6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkZpbGVzTWF0Y2hpbmdGb3VuZChmaWxlcGF0dGVybiwgbWF0Y2hlcyksIHNlbGYuZGF0YSkKKworICAgIGRlZiBmaW5kQ29uZmlnRmlsZXMoc2VsZiwgdmFybmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBGaW5kIGNvbmZpZyBmaWxlcyB3aGljaCBhcmUgYXBwcm9wcmlhdGUgdmFsdWVzIGZvciB2YXJuYW1lLgorICAgICAgICBpLmUuIE1BQ0hJTkUsIERJU1RSTworICAgICAgICAiIiIKKyAgICAgICAgcG9zc2libGUgPSBbXQorICAgICAgICB2YXIgPSB2YXJuYW1lLmxvd2VyKCkKKworICAgICAgICBkYXRhID0gc2VsZi5kYXRhCisgICAgICAgICMgaXRlcmF0ZSBjb25maWdzCisgICAgICAgIGJicGF0aHMgPSBkYXRhLmdldFZhcignQkJQQVRIJywgVHJ1ZSkuc3BsaXQoJzonKQorICAgICAgICBmb3IgcGF0aCBpbiBiYnBhdGhzOgorICAgICAgICAgICAgY29uZnBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aCwgImNvbmYiLCB2YXIpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb25mcGF0aCk6CisgICAgICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoY29uZnBhdGgpOgorICAgICAgICAgICAgICAgICAgICAjIGdldCBhbGwgY2hpbGQgZmlsZXMsIHRoZXNlIGFyZSBhcHByb3ByaWF0ZSB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwsIHNlcCwgZW5kID0gZi5ycGFydGl0aW9uKCcuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVuZCA9PSAnY29uZic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGUuYXBwZW5kKHZhbCkKKworICAgICAgICBpZiBwb3NzaWJsZToKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQ29uZmlnRmlsZXNGb3VuZCh2YXIsIHBvc3NpYmxlKSwgc2VsZi5kYXRhKQorCisgICAgZGVmIGZpbmRJbmhlcml0c0NsYXNzKHNlbGYsIGtsYXNzKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgYWxsIHJlY2lwZXMgd2hpY2ggaW5oZXJpdCB0aGUgc3BlY2lmaWVkIGNsYXNzCisgICAgICAgICIiIgorICAgICAgICBwa2dfbGlzdCA9IFtdCisKKyAgICAgICAgZm9yIHBmbiBpbiBzZWxmLnJlY2lwZWNhY2hlLnBrZ19mbjoKKyAgICAgICAgICAgIGluaGVyaXRzID0gc2VsZi5yZWNpcGVjYWNoZS5pbmhlcml0cy5nZXQocGZuLCBOb25lKQorICAgICAgICAgICAgaWYgaW5oZXJpdHMgYW5kIGluaGVyaXRzLmNvdW50KGtsYXNzKSA+IDA6CisgICAgICAgICAgICAgICAgcGtnX2xpc3QuYXBwZW5kKHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuW3Bmbl0pCisKKyAgICAgICAgcmV0dXJuIHBrZ19saXN0CisKKyAgICBkZWYgZ2VuZXJhdGVUYXJnZXRzVHJlZShzZWxmLCBrbGFzcz1Ob25lLCBwa2dzPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgR2VuZXJhdGUgYSBkZXBlbmRlbmN5IHRyZWUgb2YgYnVpbGRhYmxlIHRhcmdldHMKKyAgICAgICAgR2VuZXJhdGUgYW4gZXZlbnQgd2l0aCB0aGUgcmVzdWx0CisgICAgICAgICIiIgorICAgICAgICAjIGlmIHRoZSBjYWxsZXIgaGFzbid0IHNwZWNpZmllZCBhIHBrZ3MgbGlzdCBkZWZhdWx0IHRvIHVuaXZlcnNlCisgICAgICAgIGlmIG5vdCBwa2dzOgorICAgICAgICAgICAgcGtncyA9IFsndW5pdmVyc2UnXQorICAgICAgICAjIGlmIGluaGVyaXRlZF9jbGFzcyBwYXNzZWQgZW5zdXJlIGFsbCByZWNpcGVzIHdoaWNoIGluaGVyaXQgdGhlCisgICAgICAgICMgc3BlY2lmaWVkIGNsYXNzIGFyZSBpbmNsdWRlZCBpbiBwa2dzCisgICAgICAgIGlmIGtsYXNzOgorICAgICAgICAgICAgZXh0cmFfcGtncyA9IHNlbGYuZmluZEluaGVyaXRzQ2xhc3Moa2xhc3MpCisgICAgICAgICAgICBwa2dzID0gcGtncyArIGV4dHJhX3BrZ3MKKworICAgICAgICAjIGdlbmVyYXRlIGEgZGVwZW5kZW5jeSB0cmVlIGZvciBhbGwgb3VyIHBhY2thZ2VzCisgICAgICAgIHRyZWUgPSBzZWxmLmdlbmVyYXRlUGtnRGVwVHJlZURhdGEocGtncywgJ2J1aWxkJykKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5UYXJnZXRzVHJlZUdlbmVyYXRlZCh0cmVlKSwgc2VsZi5kYXRhKQorCisgICAgZGVmIGJ1aWxkV29ybGRUYXJnZXRMaXN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgIEJ1aWxkIHBhY2thZ2UgbGlzdCBmb3IgImJpdGJha2Ugd29ybGQiCisgICAgICAgICIiIgorICAgICAgICBwYXJzZWxvZy5kZWJ1ZygxLCAiY29sbGF0aW5nIHBhY2thZ2VzIGZvciBcIndvcmxkXCIiKQorICAgICAgICBmb3IgZiBpbiBzZWxmLnJlY2lwZWNhY2hlLnBvc3NpYmxlX3dvcmxkOgorICAgICAgICAgICAgdGVybWluYWwgPSBUcnVlCisgICAgICAgICAgICBwbiA9IHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuW2ZdCisKKyAgICAgICAgICAgIGZvciBwIGluIHNlbGYucmVjaXBlY2FjaGUucG5fcHJvdmlkZXNbcG5dOgorICAgICAgICAgICAgICAgIGlmIHAuc3RhcnRzd2l0aCgndmlydHVhbC8nKToKKyAgICAgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZGVidWcoMiwgIldvcmxkIGJ1aWxkIHNraXBwaW5nICVzIGR1ZSB0byAlcyBwcm92aWRlciBzdGFydGluZyB3aXRoIHZpcnR1YWwvIiwgZiwgcCkKKyAgICAgICAgICAgICAgICAgICAgdGVybWluYWwgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGZvciBwZiBpbiBzZWxmLnJlY2lwZWNhY2hlLnByb3ZpZGVyc1twXToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm5bcGZdICE9IHBuOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZGVidWcoMiwgIldvcmxkIGJ1aWxkIHNraXBwaW5nICVzIGR1ZSB0byBib3RoIHVzIGFuZCAlcyBwcm92aWRpbmcgJXMiLCBmLCBwZiwgcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiB0ZXJtaW5hbDoKKyAgICAgICAgICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLndvcmxkX3RhcmdldC5hZGQocG4pCisKKyAgICBkZWYgaW50ZXJhY3RpdmVNb2RlKCBzZWxmICk6CisgICAgICAgICIiIkRyb3Agb2ZmIGludG8gYSBzaGVsbCIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIGJiIGltcG9ydCBzaGVsbAorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBwYXJzZWxvZy5leGNlcHRpb24oIkludGVyYWN0aXZlIG1vZGUgbm90IGF2YWlsYWJsZSIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2hlbGwuc3RhcnQoIHNlbGYgKQorCisKKyAgICBkZWYgaGFuZGxlQ29sbGVjdGlvbnMoIHNlbGYsIGNvbGxlY3Rpb25zICk6CisgICAgICAgICIiIkhhbmRsZSBjb2xsZWN0aW9ucyIiIgorICAgICAgICBlcnJvcnMgPSBGYWxzZQorICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLmJiZmlsZV9jb25maWdfcHJpb3JpdGllcyA9IFtdCisgICAgICAgIGlmIGNvbGxlY3Rpb25zOgorICAgICAgICAgICAgY29sbGVjdGlvbl9wcmlvcml0aWVzID0ge30KKyAgICAgICAgICAgIGNvbGxlY3Rpb25fZGVwZW5kcyA9IHt9CisgICAgICAgICAgICBjb2xsZWN0aW9uX2xpc3QgPSBjb2xsZWN0aW9ucy5zcGxpdCgpCisgICAgICAgICAgICBtaW5fcHJpbyA9IDAKKyAgICAgICAgICAgIGZvciBjIGluIGNvbGxlY3Rpb25fbGlzdDoKKyAgICAgICAgICAgICAgICAjIEdldCBjb2xsZWN0aW9uIHByaW9yaXR5IGlmIGRlZmluZWQgZXhwbGljaXRseQorICAgICAgICAgICAgICAgIHByaW9yaXR5ID0gc2VsZi5kYXRhLmdldFZhcigiQkJGSUxFX1BSSU9SSVRZXyVzIiAlIGMsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgcHJpb3JpdHk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW8gPSBpbnQocHJpb3JpdHkpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZXJyb3IoImludmFsaWQgdmFsdWUgZm9yIEJCRklMRV9QUklPUklUWV8lczogXCIlc1wiIiwgYywgcHJpb3JpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGlmIG1pbl9wcmlvID09IDAgb3IgcHJpbyA8IG1pbl9wcmlvOgorICAgICAgICAgICAgICAgICAgICAgICAgbWluX3ByaW8gPSBwcmlvCisgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25fcHJpb3JpdGllc1tjXSA9IHByaW8KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uX3ByaW9yaXRpZXNbY10gPSBOb25lCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIGRlcGVuZGVuY2llcyBhbmQgc3RvcmUgaW5mb3JtYXRpb24gZm9yIHByaW9yaXR5IGNhbGN1bGF0aW9uCisgICAgICAgICAgICAgICAgZGVwcyA9IHNlbGYuZGF0YS5nZXRWYXIoIkxBWUVSREVQRU5EU18lcyIgJSBjLCBUcnVlKQorICAgICAgICAgICAgICAgIGlmIGRlcHM6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGxpc3QgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZGVwcykKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGJiLnV0aWxzLlZlcnNpb25TdHJpbmdFeGNlcHRpb24gYXMgdnNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoJ0Vycm9yIHBhcnNpbmcgTEFZRVJERVBFTkRTXyVzOiAlcycgJSAoYywgc3RyKHZzZSkpKQorICAgICAgICAgICAgICAgICAgICBmb3IgZGVwLCBvcGxpc3QgaW4gZGVwbGlzdC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlcCBpbiBjb2xsZWN0aW9uX2xpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG9wc3RyIGluIG9wbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJ2ZXIgPSBzZWxmLmRhdGEuZ2V0VmFyKCJMQVlFUlZFUlNJT05fJXMiICUgZGVwLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3AsIGRlcHZlcikgPSBvcHN0ci5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxheWVydmVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmdfb3AobGF5ZXJ2ZXIsIGRlcHZlciwgb3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgYmIudXRpbHMuVmVyc2lvblN0cmluZ0V4Y2VwdGlvbiBhcyB2c2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoJ0Vycm9yIHBhcnNpbmcgTEFZRVJERVBFTkRTXyVzOiAlcycgJSAoYywgc3RyKHZzZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWxvZy5lcnJvcigiTGF5ZXIgJyVzJyBkZXBlbmRzIG9uIHZlcnNpb24gJXMgb2YgbGF5ZXIgJyVzJywgYnV0IHZlcnNpb24gJXMgaXMgY3VycmVudGx5IGVuYWJsZWQgaW4geW91ciBjb25maWd1cmF0aW9uLiBDaGVjayB0aGF0IHlvdSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgbWF0Y2hpbmcgdmVyc2lvbnMvYnJhbmNoZXMgb2YgdGhlc2UgdHdvIGxheWVycy4iLCBjLCBvcHN0ciwgZGVwLCBsYXllcnZlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWxvZy5lcnJvcigiTGF5ZXIgJyVzJyBkZXBlbmRzIG9uIHZlcnNpb24gJXMgb2YgbGF5ZXIgJyVzJywgd2hpY2ggZXhpc3RzIGluIHlvdXIgY29uZmlndXJhdGlvbiBidXQgZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24uIENoZWNrIHRoYXQgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBtYXRjaGluZyB2ZXJzaW9ucy9icmFuY2hlcyBvZiB0aGVzZSB0d28gbGF5ZXJzLiIsIGMsIG9wc3RyLCBkZXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlbG9nLmVycm9yKCJMYXllciAnJXMnIGRlcGVuZHMgb24gbGF5ZXIgJyVzJywgYnV0IHRoaXMgbGF5ZXIgaXMgbm90IGVuYWJsZWQgaW4geW91ciBjb25maWd1cmF0aW9uIiwgYywgZGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbl9kZXBlbmRzW2NdID0gZGVwbGlzdC5rZXlzKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uX2RlcGVuZHNbY10gPSBbXQorCisgICAgICAgICAgICAjIFJlY3Vyc2l2ZWx5IHdvcmsgb3V0IGNvbGxlY3Rpb24gcHJpb3JpdGllcyBiYXNlZCBvbiBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIGRlZiBjYWxjX2xheWVyX3ByaW9yaXR5KGNvbGxlY3Rpb24pOgorICAgICAgICAgICAgICAgIGlmIG5vdCBjb2xsZWN0aW9uX3ByaW9yaXRpZXNbY29sbGVjdGlvbl06CisgICAgICAgICAgICAgICAgICAgIG1heF9kZXBwcmlvID0gbWluX3ByaW8KKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBjb2xsZWN0aW9uX2RlcGVuZHNbY29sbGVjdGlvbl06CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxjX2xheWVyX3ByaW9yaXR5KGRlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcHByaW8gPSBjb2xsZWN0aW9uX3ByaW9yaXRpZXNbZGVwXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVwcHJpbyA+IG1heF9kZXBwcmlvOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9kZXBwcmlvID0gZGVwcHJpbworICAgICAgICAgICAgICAgICAgICBtYXhfZGVwcHJpbyArPSAxCisgICAgICAgICAgICAgICAgICAgIHBhcnNlbG9nLmRlYnVnKDEsICJDYWxjdWxhdGVkIHByaW9yaXR5IG9mIGxheWVyICVzIGFzICVkIiwgY29sbGVjdGlvbiwgbWF4X2RlcHByaW8pCisgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25fcHJpb3JpdGllc1tjb2xsZWN0aW9uXSA9IG1heF9kZXBwcmlvCisKKyAgICAgICAgICAgICMgQ2FsY3VsYXRlIGFsbCBsYXllciBwcmlvcml0aWVzIHVzaW5nIGNhbGNfbGF5ZXJfcHJpb3JpdHkgYW5kIHN0b3JlIGluIGJiZmlsZV9jb25maWdfcHJpb3JpdGllcworICAgICAgICAgICAgZm9yIGMgaW4gY29sbGVjdGlvbl9saXN0OgorICAgICAgICAgICAgICAgIGNhbGNfbGF5ZXJfcHJpb3JpdHkoYykKKyAgICAgICAgICAgICAgICByZWdleCA9IHNlbGYuZGF0YS5nZXRWYXIoIkJCRklMRV9QQVRURVJOXyVzIiAlIGMsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgcmVnZXggPT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZXJyb3IoIkJCRklMRV9QQVRURVJOXyVzIG5vdCBkZWZpbmVkIiAlIGMpCisgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNyZSA9IHJlLmNvbXBpbGUocmVnZXgpCisgICAgICAgICAgICAgICAgZXhjZXB0IHJlLmVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXJzZWxvZy5lcnJvcigiQkJGSUxFX1BBVFRFUk5fJXMgXCIlc1wiIGlzIG5vdCBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiIsIGMsIHJlZ2V4KQorICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXMuYXBwZW5kKChjLCByZWdleCwgY3JlLCBjb2xsZWN0aW9uX3ByaW9yaXRpZXNbY10pKQorICAgICAgICBpZiBlcnJvcnM6CisgICAgICAgICAgICAjIFdlJ3ZlIGFscmVhZHkgcHJpbnRlZCB0aGUgYWN0dWFsIGVycm9yKHMpCisgICAgICAgICAgICByYWlzZSBDb2xsZWN0aW9uRXJyb3IoIkVycm9ycyBkdXJpbmcgcGFyc2luZyBsYXllciBjb25maWd1cmF0aW9uIikKKworICAgIGRlZiBidWlsZFNldFZhcnMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTZXR1cCBhbnkgdmFyaWFibGVzIG5lZWRlZCBiZWZvcmUgc3RhcnRpbmcgYSBidWlsZAorICAgICAgICAiIiIKKyAgICAgICAgdCA9IHRpbWUuZ210aW1lKCkgCisgICAgICAgIGlmIG5vdCBzZWxmLmRhdGEuZ2V0VmFyKCJCVUlMRE5BTUUiLCBGYWxzZSk6CisgICAgICAgICAgICBzZWxmLmRhdGEuc2V0VmFyKCJCVUlMRE5BTUUiLCAiJHtEQVRFfSR7VElNRX0iKQorICAgICAgICBzZWxmLmRhdGEuc2V0VmFyKCJCVUlMRFNUQVJUIiwgdGltZS5zdHJmdGltZSgnJW0vJWQvJVkgJUg6JU06JVMnLCB0KSkKKyAgICAgICAgc2VsZi5kYXRhLnNldFZhcigiREFURSIsIHRpbWUuc3RyZnRpbWUoJyVZJW0lZCcsIHQpKQorICAgICAgICBzZWxmLmRhdGEuc2V0VmFyKCJUSU1FIiwgdGltZS5zdHJmdGltZSgnJUglTSVTJywgdCkpCisKKyAgICBkZWYgbWF0Y2hGaWxlcyhzZWxmLCBiZik6CisgICAgICAgICIiIgorICAgICAgICBGaW5kIHRoZSAuYmIgZmlsZXMgd2hpY2ggbWF0Y2ggdGhlIGV4cHJlc3Npb24gaW4gJ2J1aWxkZmlsZScuCisgICAgICAgICIiIgorICAgICAgICBpZiBiZi5zdGFydHN3aXRoKCIvIikgb3IgYmYuc3RhcnRzd2l0aCgiLi4vIik6CisgICAgICAgICAgICBiZiA9IG9zLnBhdGguYWJzcGF0aChiZikKKworICAgICAgICBzZWxmLmNvbGxlY3Rpb24gPSBDb29rZXJDb2xsZWN0RmlsZXMoc2VsZi5yZWNpcGVjYWNoZS5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXMpCisgICAgICAgIGZpbGVsaXN0LCBtYXNrZWQgPSBzZWxmLmNvbGxlY3Rpb24uY29sbGVjdF9iYmZpbGVzKHNlbGYuZGF0YSwgc2VsZi5leHBhbmRlZF9kYXRhKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5zdGF0KGJmKQorICAgICAgICAgICAgYmYgPSBvcy5wYXRoLmFic3BhdGgoYmYpCisgICAgICAgICAgICByZXR1cm4gW2JmXQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHJlZ2V4cCA9IHJlLmNvbXBpbGUoYmYpCisgICAgICAgICAgICBtYXRjaGVzID0gW10KKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVsaXN0OgorICAgICAgICAgICAgICAgIGlmIHJlZ2V4cC5zZWFyY2goZikgYW5kIG9zLnBhdGguaXNmaWxlKGYpOgorICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChmKQorICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMKKworICAgIGRlZiBtYXRjaEZpbGUoc2VsZiwgYnVpbGRmaWxlKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgdGhlIC5iYiBmaWxlIHdoaWNoIG1hdGNoZXMgdGhlIGV4cHJlc3Npb24gaW4gJ2J1aWxkZmlsZScuCisgICAgICAgIFJhaXNlIGFuIGVycm9yIGlmIG11bHRpcGxlIGZpbGVzCisgICAgICAgICIiIgorICAgICAgICBtYXRjaGVzID0gc2VsZi5tYXRjaEZpbGVzKGJ1aWxkZmlsZSkKKyAgICAgICAgaWYgbGVuKG1hdGNoZXMpICE9IDE6CisgICAgICAgICAgICBpZiBtYXRjaGVzOgorICAgICAgICAgICAgICAgIG1zZyA9ICJVbmFibGUgdG8gbWF0Y2ggJyVzJyB0byBhIHNwZWNpZmljIHJlY2lwZSBmaWxlIC0gJXMgbWF0Y2hlcyBmb3VuZDoiICUgKGJ1aWxkZmlsZSwgbGVuKG1hdGNoZXMpKQorICAgICAgICAgICAgICAgIGlmIG1hdGNoZXM6CisgICAgICAgICAgICAgICAgICAgIGZvciBmIGluIG1hdGNoZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2cgKz0gIlxuICAgICVzIiAlIGYKKyAgICAgICAgICAgICAgICBwYXJzZWxvZy5lcnJvcihtc2cpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhcnNlbG9nLmVycm9yKCJVbmFibGUgdG8gZmluZCBhbnkgcmVjaXBlIGZpbGUgbWF0Y2hpbmcgJyVzJyIgJSBidWlsZGZpbGUpCisgICAgICAgICAgICByYWlzZSBOb1NwZWNpZmljTWF0Y2gKKyAgICAgICAgcmV0dXJuIG1hdGNoZXNbMF0KKworICAgIGRlZiBidWlsZEZpbGUoc2VsZiwgYnVpbGRmaWxlLCB0YXNrKToKKyAgICAgICAgIiIiCisgICAgICAgIEJ1aWxkIHRoZSBmaWxlIG1hdGNoaW5nIHJlZ2V4cCBidWlsZGZpbGUKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBUb28gbWFueSBwZW9wbGUgdXNlIC1iIGJlY2F1c2UgdGhleSB0aGluayBpdCdzIGhvdyB5b3Ugbm9ybWFsbHkKKyAgICAgICAgIyBzcGVjaWZ5IGEgdGFyZ2V0IHRvIGJlIGJ1aWx0LCBzbyBzaG93IGEgd2FybmluZworICAgICAgICBiYi53YXJuKCJCdWlsZGZpbGUgc3BlY2lmaWVkLCBkZXBlbmRlbmNpZXMgd2lsbCBub3QgYmUgaGFuZGxlZC4gSWYgdGhpcyBpcyBub3Qgd2hhdCB5b3Ugd2FudCwgZG8gbm90IHVzZSAtYiAvIC0tYnVpbGRmaWxlLiIpCisKKyAgICAgICAgIyBQYXJzZSB0aGUgY29uZmlndXJhdGlvbiBoZXJlLiBXZSBuZWVkIHRvIGRvIGl0IGV4cGxpY2l0bHkgaGVyZSBzaW5jZQorICAgICAgICAjIGJ1aWxkRmlsZSgpIGRvZXNuJ3QgdXNlIHRoZSBjYWNoZQorICAgICAgICBzZWxmLnBhcnNlQ29uZmlndXJhdGlvbigpCisKKyAgICAgICAgIyBJZiB3ZSBhcmUgdG9sZCB0byBkbyB0aGUgTm9uZSB0YXNrIHRoZW4gcXVlcnkgdGhlIGRlZmF1bHQgdGFzaworICAgICAgICBpZiAodGFzayA9PSBOb25lKToKKyAgICAgICAgICAgIHRhc2sgPSBzZWxmLmNvbmZpZ3VyYXRpb24uY21kCisKKyAgICAgICAgZm4sIGNscyA9IGJiLmNhY2hlLkNhY2hlLnZpcnR1YWxmbjJyZWFsZm4oYnVpbGRmaWxlKQorICAgICAgICBmbiA9IHNlbGYubWF0Y2hGaWxlKGZuKQorCisgICAgICAgIHNlbGYuYnVpbGRTZXRWYXJzKCkKKworICAgICAgICBpbmZvcyA9IGJiLmNhY2hlLkNhY2hlLnBhcnNlKGZuLCBzZWxmLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmbiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWNoZXNfYXJyYXkpCisgICAgICAgIGluZm9zID0gZGljdChpbmZvcykKKworICAgICAgICBmbiA9IGJiLmNhY2hlLkNhY2hlLnJlYWxmbjJ2aXJ0dWFsKGZuLCBjbHMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGluZm9fYXJyYXkgPSBpbmZvc1tmbl0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgYmIuZmF0YWwoIiVzIGRvZXMgbm90IGV4aXN0IiAlIGZuKQorCisgICAgICAgIGlmIGluZm9fYXJyYXlbMF0uc2tpcHBlZDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCIlcyB3YXMgc2tpcHBlZDogJXMiICUgKGZuLCBpbmZvX2FycmF5WzBdLnNraXByZWFzb24pKQorCisgICAgICAgIHNlbGYucmVjaXBlY2FjaGUuYWRkX2Zyb21fcmVjaXBlaW5mbyhmbiwgaW5mb19hcnJheSkKKworICAgICAgICAjIFR3ZWFrIHNvbWUgdmFyaWFibGVzCisgICAgICAgIGl0ZW0gPSBpbmZvX2FycmF5WzBdLnBuCisgICAgICAgIHNlbGYucmVjaXBlY2FjaGUuaWdub3JlZF9kZXBlbmRlbmNpZXMgPSBzZXQoKQorICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLmJiZmlsZV9wcmlvcml0eVtmbl0gPSAxCisKKyAgICAgICAgIyBSZW1vdmUgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzCisgICAgICAgIHNlbGYucmVjaXBlY2FjaGUudGFza19kZXBzW2ZuXVsnZGVwZW5kcyddID0ge30KKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5kZXBzW2ZuXSA9IFtdCisgICAgICAgIHNlbGYucmVjaXBlY2FjaGUucnVuZGVwc1tmbl0gPSBbXQorICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLnJ1bnJlY3NbZm5dID0gW10KKworICAgICAgICAjIEludmFsaWRhdGUgdGFzayBmb3IgdGFyZ2V0IGlmIGZvcmNlIG1vZGUgYWN0aXZlCisgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi5mb3JjZToKKyAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKCJJbnZhbGlkYXRlIHRhc2sgJXMsICVzIiwgdGFzaywgZm4pCisgICAgICAgICAgICBpZiBub3QgdGFzay5zdGFydHN3aXRoKCJkb18iKToKKyAgICAgICAgICAgICAgICB0YXNrID0gImRvXyVzIiAlIHRhc2sKKyAgICAgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi5pbnZhbGlkYXRlX3Rhc2sodGFzaywgc2VsZi5yZWNpcGVjYWNoZSwgZm4pCisKKyAgICAgICAgIyBTZXR1cCB0YXNrZGF0YSBzdHJ1Y3R1cmUKKyAgICAgICAgdGFza2RhdGEgPSBiYi50YXNrZGF0YS5UYXNrRGF0YShzZWxmLmNvbmZpZ3VyYXRpb24uYWJvcnQpCisgICAgICAgIHRhc2tkYXRhLmFkZF9wcm92aWRlcihzZWxmLmRhdGEsIHNlbGYucmVjaXBlY2FjaGUsIGl0ZW0pCisKKyAgICAgICAgYnVpbGRuYW1lID0gc2VsZi5kYXRhLmdldFZhcigiQlVJTEROQU1FIiwgVHJ1ZSkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5CdWlsZFN0YXJ0ZWQoYnVpbGRuYW1lLCBbaXRlbV0pLCBzZWxmLmV4cGFuZGVkX2RhdGEpCisKKyAgICAgICAgIyBFeGVjdXRlIHRoZSBydW5xdWV1ZQorICAgICAgICBpZiBub3QgdGFzay5zdGFydHN3aXRoKCJkb18iKToKKyAgICAgICAgICAgIHRhc2sgPSAiZG9fJXMiICUgdGFzaworICAgICAgICBydW5saXN0ID0gW1tpdGVtLCB0YXNrXV0KKworICAgICAgICBycSA9IGJiLnJ1bnF1ZXVlLlJ1blF1ZXVlKHNlbGYsIHNlbGYuZGF0YSwgc2VsZi5yZWNpcGVjYWNoZSwgdGFza2RhdGEsIHJ1bmxpc3QpCisKKyAgICAgICAgZGVmIGJ1aWxkRmlsZUlkbGUoc2VydmVyLCBycSwgYWJvcnQpOgorCisgICAgICAgICAgICBtc2cgPSBOb25lCisgICAgICAgICAgICBpbnRlcnJ1cHRlZCA9IDAKKyAgICAgICAgICAgIGlmIGFib3J0IG9yIHNlbGYuc3RhdGUgPT0gc3RhdGUuZm9yY2VzaHV0ZG93bjoKKyAgICAgICAgICAgICAgICBycS5maW5pc2hfcnVucXVldWUoVHJ1ZSkKKyAgICAgICAgICAgICAgICBtc2cgPSAiRm9yY2VkIHNodXRkb3duIgorICAgICAgICAgICAgICAgIGludGVycnVwdGVkID0gMgorICAgICAgICAgICAgZWxpZiBzZWxmLnN0YXRlID09IHN0YXRlLnNodXRkb3duOgorICAgICAgICAgICAgICAgIHJxLmZpbmlzaF9ydW5xdWV1ZShGYWxzZSkKKyAgICAgICAgICAgICAgICBtc2cgPSAiU3RvcHBlZCBidWlsZCIKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHRlZCA9IDEKKyAgICAgICAgICAgIGZhaWx1cmVzID0gMAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHZhbCA9IHJxLmV4ZWN1dGVfcnVucXVldWUoKQorICAgICAgICAgICAgZXhjZXB0IHJ1bnF1ZXVlLlRhc2tGYWlsdXJlIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBmYWlsdXJlcyArPSBsZW4oZXhjLmFyZ3MpCisgICAgICAgICAgICAgICAgcmV0dmFsID0gRmFsc2UKKyAgICAgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0IGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAgICAgaWYgbm90IHJldHZhbDoKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkKGxlbihycS5ycWRhdGEucnVucV9mbmlkKSwgYnVpbGRuYW1lLCBpdGVtLCBmYWlsdXJlcywgaW50ZXJydXB0ZWQpLCBzZWxmLmV4cGFuZGVkX2RhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5jb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZChtc2cpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBpZiByZXR2YWwgaXMgVHJ1ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIHJldHZhbAorCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zZXJ2ZXJfcmVnaXN0ZXJfaWRsZWNhbGxiYWNrKGJ1aWxkRmlsZUlkbGUsIHJxKQorCisgICAgZGVmIGJ1aWxkVGFyZ2V0cyhzZWxmLCB0YXJnZXRzLCB0YXNrKToKKyAgICAgICAgIiIiCisgICAgICAgIEF0dGVtcHQgdG8gYnVpbGQgdGhlIHRhcmdldHMgc3BlY2lmaWVkCisgICAgICAgICIiIgorCisgICAgICAgIGRlZiBidWlsZFRhcmdldHNJZGxlKHNlcnZlciwgcnEsIGFib3J0KToKKyAgICAgICAgICAgIG1zZyA9IE5vbmUKKyAgICAgICAgICAgIGludGVycnVwdGVkID0gMAorICAgICAgICAgICAgaWYgYWJvcnQgb3Igc2VsZi5zdGF0ZSA9PSBzdGF0ZS5mb3JjZXNodXRkb3duOgorICAgICAgICAgICAgICAgIHJxLmZpbmlzaF9ydW5xdWV1ZShUcnVlKQorICAgICAgICAgICAgICAgIG1zZyA9ICJGb3JjZWQgc2h1dGRvd24iCisgICAgICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSAyCisgICAgICAgICAgICBlbGlmIHNlbGYuc3RhdGUgPT0gc3RhdGUuc2h1dGRvd246CisgICAgICAgICAgICAgICAgcnEuZmluaXNoX3J1bnF1ZXVlKEZhbHNlKQorICAgICAgICAgICAgICAgIG1zZyA9ICJTdG9wcGVkIGJ1aWxkIgorICAgICAgICAgICAgICAgIGludGVycnVwdGVkID0gMQorICAgICAgICAgICAgZmFpbHVyZXMgPSAwCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dmFsID0gcnEuZXhlY3V0ZV9ydW5xdWV1ZSgpCisgICAgICAgICAgICBleGNlcHQgcnVucXVldWUuVGFza0ZhaWx1cmUgYXMgZXhjOgorICAgICAgICAgICAgICAgIGZhaWx1cmVzICs9IGxlbihleGMuYXJncykKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBGYWxzZQorICAgICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQgYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICBpZiBub3QgcmV0dmFsOgorICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQobGVuKHJxLnJxZGF0YS5ydW5xX2ZuaWQpLCBidWlsZG5hbWUsIHRhcmdldHMsIGZhaWx1cmVzLCBpbnRlcnJ1cHRlZCksIHNlbGYuZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKG1zZykKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGlmIHJldHZhbCBpcyBUcnVlOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICAgICAgYnVpbGQucmVzZXRfY2FjaGUoKQorICAgICAgICBzZWxmLmJ1aWxkU2V0VmFycygpCisKKyAgICAgICAgdGFza2RhdGEsIHJ1bmxpc3QsIGZ1bGx0YXJnZXRsaXN0ID0gc2VsZi5idWlsZFRhc2tEYXRhKHRhcmdldHMsIHRhc2ssIHNlbGYuY29uZmlndXJhdGlvbi5hYm9ydCkKKworICAgICAgICBidWlsZG5hbWUgPSBzZWxmLmRhdGEuZ2V0VmFyKCJCVUlMRE5BTUUiLCBGYWxzZSkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5CdWlsZFN0YXJ0ZWQoYnVpbGRuYW1lLCBmdWxsdGFyZ2V0bGlzdCksIHNlbGYuZGF0YSkKKworICAgICAgICBycSA9IGJiLnJ1bnF1ZXVlLlJ1blF1ZXVlKHNlbGYsIHNlbGYuZGF0YSwgc2VsZi5yZWNpcGVjYWNoZSwgdGFza2RhdGEsIHJ1bmxpc3QpCisgICAgICAgIGlmICd1bml2ZXJzZScgaW4gdGFyZ2V0czoKKyAgICAgICAgICAgIHJxLnJxZGF0YS53YXJuX211bHRpX2JiID0gVHJ1ZQorCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zZXJ2ZXJfcmVnaXN0ZXJfaWRsZWNhbGxiYWNrKGJ1aWxkVGFyZ2V0c0lkbGUsIHJxKQorCisKKyAgICBkZWYgZ2V0QWxsS2V5c1dpdGhGbGFncyhzZWxmLCBmbGFnbGlzdCk6CisgICAgICAgIGR1bXAgPSB7fQorICAgICAgICBmb3IgayBpbiBzZWxmLmRhdGEua2V5cygpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHYgPSBzZWxmLmRhdGEuZ2V0VmFyKGssIFRydWUpCisgICAgICAgICAgICAgICAgaWYgbm90IGsuc3RhcnRzd2l0aCgiX18iKSBhbmQgbm90IGlzaW5zdGFuY2UodiwgYmIuZGF0YV9zbWFydC5EYXRhU21hcnQpOgorICAgICAgICAgICAgICAgICAgICBkdW1wW2tdID0geworICAgICd2JyA6IHYgLAorICAgICdoaXN0b3J5JyA6IHNlbGYuZGF0YS52YXJoaXN0b3J5LnZhcmlhYmxlKGspLAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvciBkIGluIGZsYWdsaXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFtrXVtkXSA9IHNlbGYuZGF0YS5nZXRWYXJGbGFnKGssIGQpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgcHJpbnQoZSkKKyAgICAgICAgcmV0dXJuIGR1bXAKKworCisgICAgZGVmIGdlbmVyYXRlTmV3SW1hZ2Uoc2VsZiwgaW1hZ2UsIGJhc2VfaW1hZ2UsIHBhY2thZ2VfcXVldWUsIHRpbWVzdGFtcCwgZGVzY3JpcHRpb24pOgorICAgICAgICAnJycKKyAgICAgICAgQ3JlYXRlIGEgbmV3IGltYWdlIHdpdGggYSAicmVxdWlyZSIvImluaGVyaXQiIGJhc2VfaW1hZ2Ugc3RhdGVtZW50CisgICAgICAgICcnJworICAgICAgICBpZiB0aW1lc3RhbXA6CisgICAgICAgICAgICBpbWFnZV9uYW1lID0gb3MucGF0aC5zcGxpdGV4dChpbWFnZSlbMF0KKyAgICAgICAgICAgIHRpbWVzdHIgPSB0aW1lLnN0cmZ0aW1lKCItJVklbSVkLSVIJU0lUyIpCisgICAgICAgICAgICBkZXN0ID0gaW1hZ2VfbmFtZSArIHN0cih0aW1lc3RyKSArICIuYmIiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3QgaW1hZ2UuZW5kc3dpdGgoIi5iYiIpOgorICAgICAgICAgICAgICAgIGRlc3QgPSBpbWFnZSArICIuYmIiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlc3QgPSBpbWFnZQorCisgICAgICAgIGJhc2VuYW1lID0gRmFsc2UKKyAgICAgICAgaWYgYmFzZV9pbWFnZToKKyAgICAgICAgICAgIHdpdGggb3BlbihiYXNlX2ltYWdlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgcmVxdWlyZV9saW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgcCA9IHJlLmNvbXBpbGUoIklNQUdFX0JBU0VOQU1FICo9IikKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBpZiBwLnNlYXJjaChsaW5lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lID0gVHJ1ZQorCisgICAgICAgIHdpdGggb3BlbihkZXN0LCAidyIpIGFzIGltYWdlZmlsZToKKyAgICAgICAgICAgIGlmIGJhc2VfaW1hZ2UgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpbWFnZWZpbGUud3JpdGUoImluaGVyaXQgY29yZS1pbWFnZVxuIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdG9wZGlyID0gc2VsZi5kYXRhLmdldFZhcigiVE9QRElSIiwgRmFsc2UpCisgICAgICAgICAgICAgICAgaWYgdG9wZGlyIGluIGJhc2VfaW1hZ2U6CisgICAgICAgICAgICAgICAgICAgIGJhc2VfaW1hZ2UgPSByZXF1aXJlX2xpbmUuc3BsaXQoKVsxXQorICAgICAgICAgICAgICAgIGltYWdlZmlsZS53cml0ZSgicmVxdWlyZSAiICsgYmFzZV9pbWFnZSArICJcbiIpCisgICAgICAgICAgICBpbWFnZV9pbnN0YWxsID0gIklNQUdFX0lOU1RBTEwgPSBcIiIKKyAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VfcXVldWU6CisgICAgICAgICAgICAgICAgaW1hZ2VfaW5zdGFsbCArPSBzdHIocGFja2FnZSkgKyAiICIKKyAgICAgICAgICAgIGltYWdlX2luc3RhbGwgKz0gIlwiXG4iCisgICAgICAgICAgICBpbWFnZWZpbGUud3JpdGUoaW1hZ2VfaW5zdGFsbCkKKworICAgICAgICAgICAgZGVzY3JpcHRpb25fdmFyID0gIkRFU0NSSVBUSU9OID0gXCIiICsgZGVzY3JpcHRpb24gKyAiXCJcbiIKKyAgICAgICAgICAgIGltYWdlZmlsZS53cml0ZShkZXNjcmlwdGlvbl92YXIpCisKKyAgICAgICAgICAgIGlmIGJhc2VuYW1lOgorICAgICAgICAgICAgICAgICMgSWYgdGhpcyBpcyBvdmVyd3JpdHRlbiBpbiBhIGluaGVyaXRlZCBpbWFnZSwgcmVzZXQgaXQgdG8gZGVmYXVsdAorICAgICAgICAgICAgICAgIGltYWdlX2Jhc2VuYW1lID0gIklNQUdFX0JBU0VOQU1FID0gXCIke1BOfVwiXG4iCisgICAgICAgICAgICAgICAgaW1hZ2VmaWxlLndyaXRlKGltYWdlX2Jhc2VuYW1lKQorCisgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZS5pbml0aWFsCisgICAgICAgIGlmIHRpbWVzdGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0aW1lc3RyCisKKyAgICBkZWYgdXBkYXRlQ2FjaGVTeW5jKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnN0YXRlID09IHN0YXRlLnJ1bm5pbmc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIHJlbG9hZCBmaWxlcyBmb3Igd2hpY2ggd2UgZ290IG5vdGlmaWNhdGlvbnMKKyAgICAgICAgZm9yIHAgaW4gc2VsZi5pbm90aWZ5X21vZGlmaWVkX2ZpbGVzOgorICAgICAgICAgICAgYmIucGFyc2UudXBkYXRlX2NhY2hlKHApCisgICAgICAgIHNlbGYuaW5vdGlmeV9tb2RpZmllZF9maWxlcyA9IFtdCisKKyAgICAgICAgaWYgbm90IHNlbGYuYmFzZWNvbmZpZ192YWxpZDoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUmVsb2FkaW5nIGJhc2UgY29uZmlndXJhdGlvbiBkYXRhIikKKyAgICAgICAgICAgIHNlbGYuaW5pdENvbmZpZ3VyYXRpb25EYXRhKCkKKyAgICAgICAgICAgIHNlbGYuYmFzZWNvbmZpZ192YWxpZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYucGFyc2VjYWNoZV92YWxpZCA9IEZhbHNlCisKKyAgICAjIFRoaXMgaXMgY2FsbGVkIGZvciBhbGwgYXN5bmMgY29tbWFuZHMgd2hlbiBzZWxmLnN0YXRlICE9IHJ1bm5pbmcKKyAgICBkZWYgdXBkYXRlQ2FjaGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuc3RhdGUgPT0gc3RhdGUucnVubmluZzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuc3RhdGUgaW4gKHN0YXRlLnNodXRkb3duLCBzdGF0ZS5mb3JjZXNodXRkb3duLCBzdGF0ZS5lcnJvcik6CisgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYucGFyc2VyLCAnc2h1dGRvd24nKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlci5zaHV0ZG93bihjbGVhbj1GYWxzZSwgZm9yY2UgPSBUcnVlKQorICAgICAgICAgICAgcmFpc2UgYmIuQkJIYW5kbGVkRXhjZXB0aW9uKCkKKworICAgICAgICBpZiBzZWxmLnN0YXRlICE9IHN0YXRlLnBhcnNpbmc6CisgICAgICAgICAgICBzZWxmLnVwZGF0ZUNhY2hlU3luYygpCisKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSAhPSBzdGF0ZS5wYXJzaW5nIGFuZCBub3Qgc2VsZi5wYXJzZWNhY2hlX3ZhbGlkOgorICAgICAgICAgICAgc2VsZi5wYXJzZUNvbmZpZ3VyYXRpb24gKCkKKyAgICAgICAgICAgIGlmIENvb2tlckZlYXR1cmVzLlNFTkRfU0FOSVRZRVZFTlRTIGluIHNlbGYuZmVhdHVyZXNldDoKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlNhbml0eUNoZWNrKEZhbHNlKSwgc2VsZi5kYXRhKQorCisgICAgICAgICAgICBpZ25vcmUgPSBzZWxmLmV4cGFuZGVkX2RhdGEuZ2V0VmFyKCJBU1NVTUVfUFJPVklERUQiLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5pZ25vcmVkX2RlcGVuZGVuY2llcyA9IHNldChpZ25vcmUuc3BsaXQoKSkKKworICAgICAgICAgICAgZm9yIGRlcCBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uZXh0cmFfYXNzdW1lX3Byb3ZpZGVkOgorICAgICAgICAgICAgICAgIHNlbGYucmVjaXBlY2FjaGUuaWdub3JlZF9kZXBlbmRlbmNpZXMuYWRkKGRlcCkKKworICAgICAgICAgICAgc2VsZi5jb2xsZWN0aW9uID0gQ29va2VyQ29sbGVjdEZpbGVzKHNlbGYucmVjaXBlY2FjaGUuYmJmaWxlX2NvbmZpZ19wcmlvcml0aWVzKQorICAgICAgICAgICAgKGZpbGVsaXN0LCBtYXNrZWQpID0gc2VsZi5jb2xsZWN0aW9uLmNvbGxlY3RfYmJmaWxlcyhzZWxmLmRhdGEsIHNlbGYuZXhwYW5kZWRfZGF0YSkKKworICAgICAgICAgICAgc2VsZi5wYXJzZXIgPSBDb29rZXJQYXJzZXIoc2VsZiwgZmlsZWxpc3QsIG1hc2tlZCkKKyAgICAgICAgICAgIHNlbGYucGFyc2VjYWNoZV92YWxpZCA9IFRydWUKKworICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUucGFyc2luZworCisgICAgICAgIGlmIG5vdCBzZWxmLnBhcnNlci5wYXJzZV9uZXh0KCk6CisgICAgICAgICAgICBjb2xsZWN0bG9nLmRlYnVnKDEsICJwYXJzaW5nIGNvbXBsZXRlIikKKyAgICAgICAgICAgIGlmIHNlbGYucGFyc2VyLmVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLkJCSGFuZGxlZEV4Y2VwdGlvbigpCisgICAgICAgICAgICBzZWxmLnNob3dfYXBwZW5kc193aXRoX25vX3JlY2lwZXMoKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVQcmVmUHJvdmlkZXJzKCkKKyAgICAgICAgICAgIHNlbGYucmVjaXBlY2FjaGUuYmJmaWxlX3ByaW9yaXR5ID0gc2VsZi5jb2xsZWN0aW9uLmNvbGxlY3Rpb25fcHJpb3JpdGllcyhzZWxmLnJlY2lwZWNhY2hlLnBrZ19mbiwgc2VsZi5kYXRhKQorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlLnJ1bm5pbmcKKworICAgICAgICAgICAgIyBTZW5kIGFuIGV2ZW50IGxpc3RpbmcgYWxsIHN0YW1wcyByZWFjaGFibGUgYWZ0ZXIgcGFyc2luZworICAgICAgICAgICAgIyB3aGljaCB0aGUgbWV0YWRhdGEgbWF5IHVzZSB0byBjbGVhbiB1cCBzdGFsZSBkYXRhCisgICAgICAgICAgICBldmVudCA9IGJiLmV2ZW50LlJlYWNoYWJsZVN0YW1wcyhzZWxmLnJlY2lwZWNhY2hlLnN0YW1wKQorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShldmVudCwgc2VsZi5leHBhbmRlZF9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGNoZWNrUGFja2FnZXMoc2VsZiwgcGtnc190b19idWlsZCk6CisKKyAgICAgICAgIyBSZXR1cm4gYSBjb3B5LCBkb24ndCBtb2RpZnkgdGhlIG9yaWdpbmFsCisgICAgICAgIHBrZ3NfdG9fYnVpbGQgPSBwa2dzX3RvX2J1aWxkWzpdCisKKyAgICAgICAgaWYgbGVuKHBrZ3NfdG9fYnVpbGQpID09IDA6CisgICAgICAgICAgICByYWlzZSBOb3RoaW5nVG9CdWlsZAorCisgICAgICAgIGlnbm9yZSA9IChzZWxmLmV4cGFuZGVkX2RhdGEuZ2V0VmFyKCJBU1NVTUVfUFJPVklERUQiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBmb3IgcGtnIGluIHBrZ3NfdG9fYnVpbGQ6CisgICAgICAgICAgICBpZiBwa2cgaW4gaWdub3JlOgorICAgICAgICAgICAgICAgIHBhcnNlbG9nLndhcm4oIkV4cGxpY2l0IHRhcmdldCBcIiVzXCIgaXMgaW4gQVNTVU1FX1BST1ZJREVELCBpZ25vcmluZyIgJSBwa2cpCisKKyAgICAgICAgaWYgJ3dvcmxkJyBpbiBwa2dzX3RvX2J1aWxkOgorICAgICAgICAgICAgc2VsZi5idWlsZFdvcmxkVGFyZ2V0TGlzdCgpCisgICAgICAgICAgICBwa2dzX3RvX2J1aWxkLnJlbW92ZSgnd29ybGQnKQorICAgICAgICAgICAgZm9yIHQgaW4gc2VsZi5yZWNpcGVjYWNoZS53b3JsZF90YXJnZXQ6CisgICAgICAgICAgICAgICAgcGtnc190b19idWlsZC5hcHBlbmQodCkKKworICAgICAgICBpZiAndW5pdmVyc2UnIGluIHBrZ3NfdG9fYnVpbGQ6CisgICAgICAgICAgICBwYXJzZWxvZy53YXJuKCJUaGUgXCJ1bml2ZXJzZVwiIHRhcmdldCBpcyBvbmx5IGludGVuZGVkIGZvciB0ZXN0aW5nIGFuZCBtYXkgcHJvZHVjZSBlcnJvcnMuIikKKyAgICAgICAgICAgIHBhcnNlbG9nLmRlYnVnKDEsICJjb2xsYXRpbmcgcGFja2FnZXMgZm9yIFwidW5pdmVyc2VcIiIpCisgICAgICAgICAgICBwa2dzX3RvX2J1aWxkLnJlbW92ZSgndW5pdmVyc2UnKQorICAgICAgICAgICAgZm9yIHQgaW4gc2VsZi5yZWNpcGVjYWNoZS51bml2ZXJzZV90YXJnZXQ6CisgICAgICAgICAgICAgICAgcGtnc190b19idWlsZC5hcHBlbmQodCkKKworICAgICAgICByZXR1cm4gcGtnc190b19idWlsZAorCisKKworCisgICAgZGVmIHByZV9zZXJ2ZShzZWxmKToKKyAgICAgICAgIyBFbXB0eSB0aGUgZW52aXJvbm1lbnQuIFRoZSBlbnZpcm9ubWVudCB3aWxsIGJlIHBvcHVsYXRlZCBhcworICAgICAgICAjIG5lY2Vzc2FyeSBmcm9tIHRoZSBkYXRhIHN0b3JlLgorICAgICAgICAjYmIudXRpbHMuZW1wdHlfZW52aXJvbm1lbnQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnByaG9zdCA9IHByc2Vydi5zZXJ2LmF1dG9fc3RhcnQoc2VsZi5kYXRhKQorICAgICAgICBleGNlcHQgcHJzZXJ2LnNlcnYuUFJTZXJ2aWNlQ29uZmlnRXJyb3I6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKENvb2tlckV4aXQoKSwgc2VsZi5leHBhbmRlZF9kYXRhKQorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlLmVycm9yCisgICAgICAgIHJldHVybgorCisgICAgZGVmIHBvc3Rfc2VydmUoc2VsZik6CisgICAgICAgIHByc2Vydi5zZXJ2LmF1dG9fc2h1dGRvd24oc2VsZi5kYXRhKQorICAgICAgICBiYi5ldmVudC5maXJlKENvb2tlckV4aXQoKSwgc2VsZi5leHBhbmRlZF9kYXRhKQorICAgICAgICBsb2NrZmlsZSA9IHNlbGYubG9jay5uYW1lCisgICAgICAgIHNlbGYubG9jay5jbG9zZSgpCisgICAgICAgIHNlbGYubG9jayA9IE5vbmUKKworICAgICAgICB3aGlsZSBub3Qgc2VsZi5sb2NrOgorICAgICAgICAgICAgd2l0aCBiYi51dGlscy50aW1lb3V0KDMpOgorICAgICAgICAgICAgICAgIHNlbGYubG9jayA9IGJiLnV0aWxzLmxvY2tmaWxlKGxvY2tmaWxlLCBzaGFyZWQ9RmFsc2UsIHJldHJ5PUZhbHNlLCBibG9jaz1UcnVlKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmxvY2s6CisgICAgICAgICAgICAgICAgICAgICMgU29tZSBzeXN0ZW1zIG1heSBub3QgaGF2ZSBsc29mIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAgICBwcm9jcyA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvY3MgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImxzb2YiLCAnLXcnLCBsb2NrZmlsZV0sIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgIGlmIHByb2NzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEZhbGwgYmFjayB0byBmdXNlciBpZiBsc29mIGlzIHVuYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY3MgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImZ1c2VyIiwgJy12JywgbG9ja2ZpbGVdLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJEZWxheWluZyBzaHV0ZG93biBkdWUgdG8gYWN0aXZlIHByb2Nlc3NlcyB3aGljaCBhcHBlYXIgdG8gYmUgaG9sZGluZyBiaXRiYWtlLmxvY2siCisgICAgICAgICAgICAgICAgICAgIGlmIHByb2NzOgorICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9ICI6XG4lcyIgJSBzdHIocHJvY3MpCisgICAgICAgICAgICAgICAgICAgIHByaW50KG1zZykKKworCisgICAgZGVmIHNodXRkb3duKHNlbGYsIGZvcmNlID0gRmFsc2UpOgorICAgICAgICBpZiBmb3JjZToKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZS5mb3JjZXNodXRkb3duCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUuc2h1dGRvd24KKworICAgIGRlZiBmaW5pc2hjb21tYW5kKHNlbGYpOgorICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUuaW5pdGlhbAorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLmluaXRDb25maWd1cmF0aW9uRGF0YSgpCisKKyAgICBkZWYgbG9ja0JpdGJha2Uoc2VsZik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdsb2NrJyk6CisgICAgICAgICAgICBzZWxmLmxvY2sgPSBOb25lCisgICAgICAgICAgICBpZiBzZWxmLmRhdGE6CisgICAgICAgICAgICAgICAgbG9ja2ZpbGUgPSBzZWxmLmRhdGEuZXhwYW5kKCIke1RPUERJUn0vYml0YmFrZS5sb2NrIikKKyAgICAgICAgICAgICAgICBpZiBsb2NrZmlsZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2NrID0gYmIudXRpbHMubG9ja2ZpbGUobG9ja2ZpbGUsIEZhbHNlLCBGYWxzZSkKKyAgICAgICAgcmV0dXJuIHNlbGYubG9jaworCisgICAgZGVmIHVubG9ja0JpdGJha2Uoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ2xvY2snKSBhbmQgc2VsZi5sb2NrOgorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShzZWxmLmxvY2spCisKK2RlZiBzZXJ2ZXJfbWFpbihjb29rZXIsIGZ1bmMsICphcmdzKToKKyAgICBjb29rZXIucHJlX3NlcnZlKCkKKworICAgIGlmIGNvb2tlci5jb25maWd1cmF0aW9uLnByb2ZpbGU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBjUHJvZmlsZSBhcyBwcm9maWxlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGltcG9ydCBwcm9maWxlCisgICAgICAgIHByb2YgPSBwcm9maWxlLlByb2ZpbGUoKQorCisgICAgICAgIHJldCA9IHByb2ZpbGUuUHJvZmlsZS5ydW5jYWxsKHByb2YsIGZ1bmMsICphcmdzKQorCisgICAgICAgIHByb2YuZHVtcF9zdGF0cygicHJvZmlsZS5sb2ciKQorICAgICAgICBiYi51dGlscy5wcm9jZXNzX3Byb2ZpbGVsb2coInByb2ZpbGUubG9nIikKKyAgICAgICAgcHJpbnQoIlJhdyBwcm9maWxpbmcgaW5mb3JtYXRpb24gc2F2ZWQgdG8gcHJvZmlsZS5sb2cgYW5kIHByb2Nlc3NlZCBzdGF0aXN0aWNzIHRvIHByb2ZpbGUubG9nLnByb2Nlc3NlZCIpCisKKyAgICBlbHNlOgorICAgICAgICByZXQgPSBmdW5jKCphcmdzKQorCisgICAgY29va2VyLnBvc3Rfc2VydmUoKQorCisgICAgcmV0dXJuIHJldAorCitjbGFzcyBDb29rZXJFeGl0KGJiLmV2ZW50LkV2ZW50KToKKyAgICAiIiIKKyAgICBOb3RpZnkgY2xpZW50cyBvZiB0aGUgQ29va2VyIHNodXRkb3duCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGJiLmV2ZW50LkV2ZW50Ll9faW5pdF9fKHNlbGYpCisKKworY2xhc3MgQ29va2VyQ29sbGVjdEZpbGVzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByaW9yaXRpZXMpOgorICAgICAgICBzZWxmLmJiYXBwZW5kcyA9IFtdCisgICAgICAgIHNlbGYuYmJmaWxlX2NvbmZpZ19wcmlvcml0aWVzID0gcHJpb3JpdGllcworCisgICAgZGVmIGNhbGNfYmJmaWxlX3ByaW9yaXR5KCBzZWxmLCBmaWxlbmFtZSwgbWF0Y2hlZCA9IE5vbmUgKToKKyAgICAgICAgZm9yIF8sIF8sIHJlZ2V4LCBwcmkgaW4gc2VsZi5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXM6CisgICAgICAgICAgICBpZiByZWdleC5tYXRjaChmaWxlbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbWF0Y2hlZCAhPSBOb25lOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVnZXggaW4gbWF0Y2hlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYWRkKHJlZ2V4KQorICAgICAgICAgICAgICAgIHJldHVybiBwcmkKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBnZXRfYmJmaWxlcyhzZWxmKToKKyAgICAgICAgIiIiR2V0IGxpc3Qgb2YgZGVmYXVsdCAuYmIgZmlsZXMgYnkgcmVhZGluZyBvdXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IiIiCisgICAgICAgIHBhdGggPSBvcy5nZXRjd2QoKQorICAgICAgICBjb250ZW50cyA9IG9zLmxpc3RkaXIocGF0aCkKKyAgICAgICAgYmJmaWxlcyA9IFtdCisgICAgICAgIGZvciBmIGluIGNvbnRlbnRzOgorICAgICAgICAgICAgaWYgZi5lbmRzd2l0aCgiLmJiIik6CisgICAgICAgICAgICAgICAgYmJmaWxlcy5hcHBlbmQob3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwYXRoLCBmKSkpCisgICAgICAgIHJldHVybiBiYmZpbGVzCisKKyAgICBkZWYgZmluZF9iYmZpbGVzKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJGaW5kIGFsbCB0aGUgLmJiIGFuZCAuYmJhcHBlbmQgZmlsZXMgaW4gYSBkaXJlY3RvcnkiIiIKKyAgICAgICAgZm91bmQgPSBbXQorICAgICAgICBmb3IgZGlyLCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgpOgorICAgICAgICAgICAgZm9yIGlnbm9yZWQgaW4gKCdTQ0NTJywgJ0NWUycsICcuc3ZuJyk6CisgICAgICAgICAgICAgICAgaWYgaWdub3JlZCBpbiBkaXJzOgorICAgICAgICAgICAgICAgICAgICBkaXJzLnJlbW92ZShpZ25vcmVkKQorICAgICAgICAgICAgZm91bmQgKz0gW29zLnBhdGguam9pbihkaXIsIGYpIGZvciBmIGluIGZpbGVzIGlmIChmLmVuZHN3aXRoKFsnLmJiJywgJy5iYmFwcGVuZCddKSldCisKKyAgICAgICAgcmV0dXJuIGZvdW5kCisKKyAgICBkZWYgY29sbGVjdF9iYmZpbGVzKHNlbGYsIGNvbmZpZywgZXZlbnRkYXRhKToKKyAgICAgICAgIiIiQ29sbGVjdCBhbGwgYXZhaWxhYmxlIC5iYiBidWlsZCBmaWxlcyIiIgorICAgICAgICBtYXNrZWQgPSAwCisKKyAgICAgICAgY29sbGVjdGxvZy5kZWJ1ZygxLCAiY29sbGVjdGluZyAuYmIgZmlsZXMiKQorCisgICAgICAgIGZpbGVzID0gKGNvbmZpZy5nZXRWYXIoICJCQkZJTEVTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgY29uZmlnLnNldFZhcigiQkJGSUxFUyIsICIgIi5qb2luKGZpbGVzKSkKKworICAgICAgICAjIFNvcnQgZmlsZXMgYnkgcHJpb3JpdHkKKyAgICAgICAgZmlsZXMuc29ydCgga2V5PWxhbWJkYSBmaWxlaXRlbTogc2VsZi5jYWxjX2JiZmlsZV9wcmlvcml0eShmaWxlaXRlbSkgKQorCisgICAgICAgIGlmIG5vdCBsZW4oZmlsZXMpOgorICAgICAgICAgICAgZmlsZXMgPSBzZWxmLmdldF9iYmZpbGVzKCkKKworICAgICAgICBpZiBub3QgbGVuKGZpbGVzKToKKyAgICAgICAgICAgIGNvbGxlY3Rsb2cuZXJyb3IoIm5vIHJlY2lwZSBmaWxlcyB0byBidWlsZCwgY2hlY2sgeW91ciBCQlBBVEggYW5kIEJCRklMRVM/IikKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoQ29va2VyRXhpdCgpLCBldmVudGRhdGEpCisKKyAgICAgICAgIyBDYW4ndCB1c2Ugc2V0IGhlcmUgYXMgb3JkZXIgaXMgaW1wb3J0YW50CisgICAgICAgIG5ld2ZpbGVzID0gW10KKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGYpOgorICAgICAgICAgICAgICAgIGRpcmZpbGVzID0gc2VsZi5maW5kX2JiZmlsZXMoZikKKyAgICAgICAgICAgICAgICBmb3IgZyBpbiBkaXJmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZyBub3QgaW4gbmV3ZmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdmaWxlcy5hcHBlbmQoZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZ2xvYmJlZCA9IGdsb2IuZ2xvYihmKQorICAgICAgICAgICAgICAgIGlmIG5vdCBnbG9iYmVkIGFuZCBvcy5wYXRoLmV4aXN0cyhmKToKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmJlZCA9IFtmXQorICAgICAgICAgICAgICAgIGZvciBnIGluIGdsb2JiZWQ6CisgICAgICAgICAgICAgICAgICAgIGlmIGcgbm90IGluIG5ld2ZpbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZmlsZXMuYXBwZW5kKGcpCisKKyAgICAgICAgYmJtYXNrID0gY29uZmlnLmdldFZhcignQkJNQVNLJywgVHJ1ZSkKKworICAgICAgICBpZiBiYm1hc2s6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYmJtYXNrX2NvbXBpbGVkID0gcmUuY29tcGlsZShiYm1hc2spCisgICAgICAgICAgICBleGNlcHQgc3JlX2NvbnN0YW50cy5lcnJvcjoKKyAgICAgICAgICAgICAgICBjb2xsZWN0bG9nLmNyaXRpY2FsKCJCQk1BU0sgaXMgbm90IGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uLCBpZ25vcmluZy4iKQorICAgICAgICAgICAgICAgIHJldHVybiBsaXN0KG5ld2ZpbGVzKSwgMAorCisgICAgICAgIGJiZmlsZXMgPSBbXQorICAgICAgICBiYmFwcGVuZCA9IFtdCisgICAgICAgIGZvciBmIGluIG5ld2ZpbGVzOgorICAgICAgICAgICAgaWYgYmJtYXNrIGFuZCBiYm1hc2tfY29tcGlsZWQuc2VhcmNoKGYpOgorICAgICAgICAgICAgICAgIGNvbGxlY3Rsb2cuZGVidWcoMSwgInNraXBwaW5nIG1hc2tlZCBmaWxlICVzIiwgZikKKyAgICAgICAgICAgICAgICBtYXNrZWQgKz0gMQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBmLmVuZHN3aXRoKCcuYmInKToKKyAgICAgICAgICAgICAgICBiYmZpbGVzLmFwcGVuZChmKQorICAgICAgICAgICAgZWxpZiBmLmVuZHN3aXRoKCcuYmJhcHBlbmQnKToKKyAgICAgICAgICAgICAgICBiYmFwcGVuZC5hcHBlbmQoZikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29sbGVjdGxvZy5kZWJ1ZygxLCAic2tpcHBpbmcgJXM6IHVua25vd24gZmlsZSBleHRlbnNpb24iLCBmKQorCisgICAgICAgICMgQnVpbGQgYSBsaXN0IG9mIC5iYmFwcGVuZCBmaWxlcyBmb3IgZWFjaCAuYmIgZmlsZQorICAgICAgICBmb3IgZiBpbiBiYmFwcGVuZDoKKyAgICAgICAgICAgIGJhc2UgPSBvcy5wYXRoLmJhc2VuYW1lKGYpLnJlcGxhY2UoJy5iYmFwcGVuZCcsICcuYmInKQorICAgICAgICAgICAgc2VsZi5iYmFwcGVuZHMuYXBwZW5kKChiYXNlLCBmKSkKKworICAgICAgICAjIEZpbmQgb3ZlcmxheWVkIHJlY2lwZXMKKyAgICAgICAgIyBiYmZpbGVzIHdpbGwgYmUgaW4gcHJpb3JpdHkgb3JkZXIgd2hpY2ggbWFrZXMgdGhpcyBlYXN5CisgICAgICAgIGJiZmlsZV9zZWVuID0gZGljdCgpCisgICAgICAgIHNlbGYub3ZlcmxheWVkID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICAgICAgZm9yIGYgaW4gcmV2ZXJzZWQoYmJmaWxlcyk6CisgICAgICAgICAgICBiYXNlID0gb3MucGF0aC5iYXNlbmFtZShmKQorICAgICAgICAgICAgaWYgYmFzZSBub3QgaW4gYmJmaWxlX3NlZW46CisgICAgICAgICAgICAgICAgYmJmaWxlX3NlZW5bYmFzZV0gPSBmCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRvcGZpbGUgPSBiYmZpbGVfc2VlbltiYXNlXQorICAgICAgICAgICAgICAgIHNlbGYub3ZlcmxheWVkW3RvcGZpbGVdLmFwcGVuZChmKQorCisgICAgICAgIHJldHVybiAoYmJmaWxlcywgbWFza2VkKQorCisgICAgZGVmIGdldF9maWxlX2FwcGVuZHMoc2VsZiwgZm4pOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyBhIGxpc3Qgb2YgLmJiYXBwZW5kIGZpbGVzIHRvIGFwcGx5IHRvIGZuCisgICAgICAgICIiIgorICAgICAgICBmaWxlbGlzdCA9IFtdCisgICAgICAgIGYgPSBvcy5wYXRoLmJhc2VuYW1lKGZuKQorICAgICAgICBmb3IgYiBpbiBzZWxmLmJiYXBwZW5kczoKKyAgICAgICAgICAgIChiYmFwcGVuZCwgZmlsZW5hbWUpID0gYgorICAgICAgICAgICAgaWYgKGJiYXBwZW5kID09IGYpIG9yICgnJScgaW4gYmJhcHBlbmQgYW5kIGJiYXBwZW5kLnN0YXJ0c3dpdGgoZls6YmJhcHBlbmQuaW5kZXgoJyUnKV0pKToKKyAgICAgICAgICAgICAgICBmaWxlbGlzdC5hcHBlbmQoZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBmaWxlbGlzdAorCisgICAgZGVmIGNvbGxlY3Rpb25fcHJpb3JpdGllcyhzZWxmLCBwa2dmbnMsIGQpOgorCisgICAgICAgIHByaW9yaXRpZXMgPSB7fQorCisgICAgICAgICMgQ2FsY3VsYXRlIHByaW9yaXRpZXMgZm9yIGVhY2ggZmlsZQorICAgICAgICBtYXRjaGVkID0gc2V0KCkKKyAgICAgICAgZm9yIHAgaW4gcGtnZm5zOgorICAgICAgICAgICAgcmVhbGZuLCBjbHMgPSBiYi5jYWNoZS5DYWNoZS52aXJ0dWFsZm4ycmVhbGZuKHApCisgICAgICAgICAgICBwcmlvcml0aWVzW3BdID0gc2VsZi5jYWxjX2JiZmlsZV9wcmlvcml0eShyZWFsZm4sIG1hdGNoZWQpCisKKyAgICAgICAgIyBEb24ndCBzaG93IHRoZSB3YXJuaW5nIGlmIHRoZSBCQkZJTEVfUEFUVEVSTiBkaWQgbWF0Y2ggLmJiYXBwZW5kIGZpbGVzCisgICAgICAgIHVubWF0Y2hlZCA9IHNldCgpCisgICAgICAgIGZvciBfLCBfLCByZWdleCwgcHJpIGluIHNlbGYuYmJmaWxlX2NvbmZpZ19wcmlvcml0aWVzOgorICAgICAgICAgICAgaWYgbm90IHJlZ2V4IGluIG1hdGNoZWQ6CisgICAgICAgICAgICAgICAgdW5tYXRjaGVkLmFkZChyZWdleCkKKworICAgICAgICBkZWYgZmluZG1hdGNoKHJlZ2V4KToKKyAgICAgICAgICAgIGZvciBiIGluIHNlbGYuYmJhcHBlbmRzOgorICAgICAgICAgICAgICAgIChiYmZpbGUsIGFwcGVuZCkgPSBiCisgICAgICAgICAgICAgICAgaWYgcmVnZXgubWF0Y2goYXBwZW5kKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGZvciB1bm1hdGNoIGluIHVubWF0Y2hlZC5jb3B5KCk6CisgICAgICAgICAgICBpZiBmaW5kbWF0Y2godW5tYXRjaCk6CisgICAgICAgICAgICAgICAgdW5tYXRjaGVkLnJlbW92ZSh1bm1hdGNoKQorCisgICAgICAgIGZvciBjb2xsZWN0aW9uLCBwYXR0ZXJuLCByZWdleCwgXyBpbiBzZWxmLmJiZmlsZV9jb25maWdfcHJpb3JpdGllczoKKyAgICAgICAgICAgIGlmIHJlZ2V4IGluIHVubWF0Y2hlZDoKKyAgICAgICAgICAgICAgICBpZiBkLmdldFZhcignQkJGSUxFX1BBVFRFUk5fSUdOT1JFX0VNUFRZXyVzJyAlIGNvbGxlY3Rpb24sIFRydWUpICE9ICcxJzoKKyAgICAgICAgICAgICAgICAgICAgY29sbGVjdGxvZy53YXJuKCJObyBiYiBmaWxlcyBtYXRjaGVkIEJCRklMRV9QQVRURVJOXyVzICclcyciICUgKGNvbGxlY3Rpb24sIHBhdHRlcm4pKQorCisgICAgICAgIHJldHVybiBwcmlvcml0aWVzCisKK2NsYXNzIFBhcnNpbmdGYWlsdXJlKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlYWxleGNlcHRpb24sIHJlY2lwZSk6CisgICAgICAgIHNlbGYucmVhbGV4Y2VwdGlvbiA9IHJlYWxleGNlcHRpb24KKyAgICAgICAgc2VsZi5yZWNpcGUgPSByZWNpcGUKKyAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIHJlYWxleGNlcHRpb24sIHJlY2lwZSkKKworY2xhc3MgRmVlZGVyKG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgam9icywgdG9fcGFyc2VycywgcXVpdCk6CisgICAgICAgIHNlbGYucXVpdCA9IHF1aXQKKyAgICAgICAgc2VsZi5qb2JzID0gam9icworICAgICAgICBzZWxmLnRvX3BhcnNlcnMgPSB0b19wYXJzZXJzCisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLl9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHF1aXQgPSBzZWxmLnF1aXQuZ2V0X25vd2FpdCgpCisgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBxdWl0ID09ICdjYW5jZWwnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnRvX3BhcnNlcnMuY2FuY2VsX2pvaW5fdGhyZWFkKCkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgam9iID0gc2VsZi5qb2JzLnBvcCgpCisgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi50b19wYXJzZXJzLnB1dChqb2IsIHRpbWVvdXQ9MC41KQorICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkZ1bGw6CisgICAgICAgICAgICAgICAgc2VsZi5qb2JzLmluc2VydCgwLCBqb2IpCisgICAgICAgICAgICAgICAgY29udGludWUKKworY2xhc3MgUGFyc2VyKG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgam9icywgcmVzdWx0cywgcXVpdCwgaW5pdCwgcHJvZmlsZSk6CisgICAgICAgIHNlbGYuam9icyA9IGpvYnMKKyAgICAgICAgc2VsZi5yZXN1bHRzID0gcmVzdWx0cworICAgICAgICBzZWxmLnF1aXQgPSBxdWl0CisgICAgICAgIHNlbGYuaW5pdCA9IGluaXQKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jb250ZXh0ID0gYmIudXRpbHMuZ2V0X2NvbnRleHQoKS5jb3B5KCkKKyAgICAgICAgc2VsZi5oYW5kbGVycyA9IGJiLmV2ZW50LmdldF9jbGFzc19oYW5kbGVycygpLmNvcHkoKQorICAgICAgICBzZWxmLnByb2ZpbGUgPSBwcm9maWxlCisKKyAgICBkZWYgcnVuKHNlbGYpOgorCisgICAgICAgIGlmIG5vdCBzZWxmLnByb2ZpbGU6CisgICAgICAgICAgICBzZWxmLnJlYWxydW4oKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGNQcm9maWxlIGFzIHByb2ZpbGUKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaW1wb3J0IHByb2ZpbGUKKyAgICAgICAgcHJvZiA9IHByb2ZpbGUuUHJvZmlsZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByb2ZpbGUuUHJvZmlsZS5ydW5jYWxsKHByb2YsIHNlbGYucmVhbHJ1bikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGxvZ2ZpbGUgPSAicHJvZmlsZS1wYXJzZS0lcy5sb2ciICUgbXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2VzcygpLm5hbWUKKyAgICAgICAgICAgIHByb2YuZHVtcF9zdGF0cyhsb2dmaWxlKQorCisgICAgZGVmIHJlYWxydW4oc2VsZik6CisgICAgICAgIGlmIHNlbGYuaW5pdDoKKyAgICAgICAgICAgIHNlbGYuaW5pdCgpCisKKyAgICAgICAgcGVuZGluZyA9IFtdCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5xdWl0LmdldF9ub3dhaXQoKQorICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHRzLmNhbmNlbF9qb2luX3RocmVhZCgpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgcGVuZGluZzoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBwZW5kaW5nLnBvcCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgam9iID0gc2VsZi5qb2JzLmdldCh0aW1lb3V0PTAuMjUpCisgICAgICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgam9iIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5wYXJzZSgqam9iKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHRzLnB1dChyZXN1bHQsIHRpbWVvdXQ9MC4yNSkKKyAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5GdWxsOgorICAgICAgICAgICAgICAgIHBlbmRpbmcuYXBwZW5kKHJlc3VsdCkKKworICAgIGRlZiBwYXJzZShzZWxmLCBmaWxlbmFtZSwgYXBwZW5kcywgY2FjaGVzX2FycmF5KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBSZXNldCBvdXIgZW52aXJvbm1lbnQgYW5kIGhhbmRsZXJzIHRvIHRoZSBvcmlnaW5hbCBzZXR0aW5ncworICAgICAgICAgICAgYmIudXRpbHMuc2V0X2NvbnRleHQoc2VsZi5jb250ZXh0LmNvcHkoKSkKKyAgICAgICAgICAgIGJiLmV2ZW50LnNldF9jbGFzc19oYW5kbGVycyhzZWxmLmhhbmRsZXJzLmNvcHkoKSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlLCBiYi5jYWNoZS5DYWNoZS5wYXJzZShmaWxlbmFtZSwgYXBwZW5kcywgc2VsZi5jZmcsIGNhY2hlc19hcnJheSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICB0YiA9IHN5cy5leGNfaW5mbygpWzJdCisgICAgICAgICAgICBleGMucmVjaXBlID0gZmlsZW5hbWUKKyAgICAgICAgICAgIGV4Yy50cmFjZWJhY2sgPSBsaXN0KGJiLmV4Y2VwdGlvbnMuZXh0cmFjdF90cmFjZWJhY2sodGIsIGNvbnRleHQ9MykpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZSwgZXhjCisgICAgICAgICMgTmVlZCB0byB0dXJuIEJhc2VFeGNlcHRpb25zIGludG8gRXhjZXB0aW9ucyBoZXJlIHNvIHdlIGdyYWNlZnVsbHkgc2h1dGRvd24KKyAgICAgICAgIyBhbmQgZm9yIGV4YW1wbGUgYSB3b3JrZXIgdGhyZWFkIGRvZXNuJ3QganVzdCBleGl0IG9uIGl0cyBvd24gaW4gcmVzcG9uc2UgdG8KKyAgICAgICAgIyBhIFN5c3RlbUV4aXQgZXZlbnQgZm9yIGV4YW1wbGUuCisgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHJldHVybiBUcnVlLCBQYXJzaW5nRmFpbHVyZShleGMsIGZpbGVuYW1lKQorCitjbGFzcyBDb29rZXJQYXJzZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29va2VyLCBmaWxlbGlzdCwgbWFza2VkKToKKyAgICAgICAgc2VsZi5maWxlbGlzdCA9IGZpbGVsaXN0CisgICAgICAgIHNlbGYuY29va2VyID0gY29va2VyCisgICAgICAgIHNlbGYuY2ZnZGF0YSA9IGNvb2tlci5kYXRhCisgICAgICAgIHNlbGYuY2ZnaGFzaCA9IGNvb2tlci5kYXRhX2hhc2gKKworICAgICAgICAjIEFjY291bnRpbmcgc3RhdGlzdGljcworICAgICAgICBzZWxmLnBhcnNlZCA9IDAKKyAgICAgICAgc2VsZi5jYWNoZWQgPSAwCisgICAgICAgIHNlbGYuZXJyb3IgPSAwCisgICAgICAgIHNlbGYubWFza2VkID0gbWFza2VkCisKKyAgICAgICAgc2VsZi5za2lwcGVkID0gMAorICAgICAgICBzZWxmLnZpcnR1YWxzID0gMAorICAgICAgICBzZWxmLnRvdGFsID0gbGVuKGZpbGVsaXN0KQorCisgICAgICAgIHNlbGYuY3VycmVudCA9IDAKKyAgICAgICAgc2VsZi5udW1fcHJvY2Vzc2VzID0gaW50KHNlbGYuY2ZnZGF0YS5nZXRWYXIoIkJCX05VTUJFUl9QQVJTRV9USFJFQURTIiwgVHJ1ZSkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSkKKyAgICAgICAgc2VsZi5wcm9jZXNzX25hbWVzID0gW10KKworICAgICAgICBzZWxmLmJiX2NhY2hlID0gYmIuY2FjaGUuQ2FjaGUoc2VsZi5jZmdkYXRhLCBzZWxmLmNmZ2hhc2gsIGNvb2tlci5jYWNoZXNfYXJyYXkpCisgICAgICAgIHNlbGYuZnJvbWNhY2hlID0gW10KKyAgICAgICAgc2VsZi53aWxscGFyc2UgPSBbXQorICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc2VsZi5maWxlbGlzdDoKKyAgICAgICAgICAgIGFwcGVuZHMgPSBzZWxmLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5iYl9jYWNoZS5jYWNoZVZhbGlkKGZpbGVuYW1lLCBhcHBlbmRzKToKKyAgICAgICAgICAgICAgICBzZWxmLndpbGxwYXJzZS5hcHBlbmQoKGZpbGVuYW1lLCBhcHBlbmRzLCBjb29rZXIuY2FjaGVzX2FycmF5KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mcm9tY2FjaGUuYXBwZW5kKChmaWxlbmFtZSwgYXBwZW5kcykpCisgICAgICAgIHNlbGYudG9wYXJzZSA9IHNlbGYudG90YWwgLSBsZW4oc2VsZi5mcm9tY2FjaGUpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfY2h1bmsgPSBtYXgoc2VsZi50b3BhcnNlIC8gMTAwLCAxKQorCisgICAgICAgIHNlbGYuc3RhcnQoKQorICAgICAgICBzZWxmLmhhdmVzaHV0ZG93biA9IEZhbHNlCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYucmVzdWx0cyA9IHNlbGYubG9hZF9jYWNoZWQoKQorICAgICAgICBzZWxmLnByb2Nlc3NlcyA9IFtdCisgICAgICAgIGlmIHNlbGYudG9wYXJzZToKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuUGFyc2VTdGFydGVkKHNlbGYudG9wYXJzZSksIHNlbGYuY2ZnZGF0YSkKKyAgICAgICAgICAgIGRlZiBpbml0KCk6CisgICAgICAgICAgICAgICAgUGFyc2VyLmNmZyA9IHNlbGYuY2ZnZGF0YQorICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy51dGlsLkZpbmFsaXplKE5vbmUsIGJiLmNvZGVwYXJzZXIucGFyc2VyX2NhY2hlX3NhdmUsIGFyZ3M9KHNlbGYuY2ZnZGF0YSwpLCBleGl0cHJpb3JpdHk9MSkKKyAgICAgICAgICAgICAgICBtdWx0aXByb2Nlc3NpbmcudXRpbC5GaW5hbGl6ZShOb25lLCBiYi5mZXRjaC5mZXRjaGVyX3BhcnNlX3NhdmUsIGFyZ3M9KHNlbGYuY2ZnZGF0YSwpLCBleGl0cHJpb3JpdHk9MSkKKworICAgICAgICAgICAgc2VsZi5mZWVkZXJfcXVpdCA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZShtYXhzaXplPTEpCisgICAgICAgICAgICBzZWxmLnBhcnNlcl9xdWl0ID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKG1heHNpemU9c2VsZi5udW1fcHJvY2Vzc2VzKQorICAgICAgICAgICAgc2VsZi5qb2JzID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKG1heHNpemU9c2VsZi5udW1fcHJvY2Vzc2VzKQorICAgICAgICAgICAgc2VsZi5yZXN1bHRfcXVldWUgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKQorICAgICAgICAgICAgc2VsZi5mZWVkZXIgPSBGZWVkZXIoc2VsZi53aWxscGFyc2UsIHNlbGYuam9icywgc2VsZi5mZWVkZXJfcXVpdCkKKyAgICAgICAgICAgIHNlbGYuZmVlZGVyLnN0YXJ0KCkKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIHNlbGYubnVtX3Byb2Nlc3Nlcyk6CisgICAgICAgICAgICAgICAgcGFyc2VyID0gUGFyc2VyKHNlbGYuam9icywgc2VsZi5yZXN1bHRfcXVldWUsIHNlbGYucGFyc2VyX3F1aXQsIGluaXQsIHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24ucHJvZmlsZSkKKyAgICAgICAgICAgICAgICBwYXJzZXIuc3RhcnQoKQorICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc19uYW1lcy5hcHBlbmQocGFyc2VyLm5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzZXMuYXBwZW5kKHBhcnNlcikKKworICAgICAgICAgICAgc2VsZi5yZXN1bHRzID0gaXRlcnRvb2xzLmNoYWluKHNlbGYucmVzdWx0cywgc2VsZi5wYXJzZV9nZW5lcmF0b3IoKSkKKworICAgIGRlZiBzaHV0ZG93bihzZWxmLCBjbGVhbj1UcnVlLCBmb3JjZT1GYWxzZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLnRvcGFyc2U6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5oYXZlc2h1dGRvd246CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5oYXZlc2h1dGRvd24gPSBUcnVlCisKKyAgICAgICAgaWYgY2xlYW46CisgICAgICAgICAgICBldmVudCA9IGJiLmV2ZW50LlBhcnNlQ29tcGxldGVkKHNlbGYuY2FjaGVkLCBzZWxmLnBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5za2lwcGVkLCBzZWxmLm1hc2tlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52aXJ0dWFscywgc2VsZi5lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50b3RhbCkKKworICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShldmVudCwgc2VsZi5jZmdkYXRhKQorICAgICAgICAgICAgc2VsZi5mZWVkZXJfcXVpdC5wdXQoTm9uZSkKKyAgICAgICAgICAgIGZvciBwcm9jZXNzIGluIHNlbGYucHJvY2Vzc2VzOgorICAgICAgICAgICAgICAgIHNlbGYuam9icy5wdXQoTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmVlZGVyX3F1aXQucHV0KCdjYW5jZWwnKQorCisgICAgICAgICAgICBzZWxmLnBhcnNlcl9xdWl0LmNhbmNlbF9qb2luX3RocmVhZCgpCisgICAgICAgICAgICBmb3IgcHJvY2VzcyBpbiBzZWxmLnByb2Nlc3NlczoKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlcl9xdWl0LnB1dChOb25lKQorCisgICAgICAgICAgICBzZWxmLmpvYnMuY2FuY2VsX2pvaW5fdGhyZWFkKCkKKworICAgICAgICBmb3IgcHJvY2VzcyBpbiBzZWxmLnByb2Nlc3NlczoKKyAgICAgICAgICAgIGlmIGZvcmNlOgorICAgICAgICAgICAgICAgIHByb2Nlc3Muam9pbiguMSkKKyAgICAgICAgICAgICAgICBwcm9jZXNzLnRlcm1pbmF0ZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByb2Nlc3Muam9pbigpCisgICAgICAgIHNlbGYuZmVlZGVyLmpvaW4oKQorCisgICAgICAgIHN5bmMgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLmJiX2NhY2hlLnN5bmMpCisgICAgICAgIHN5bmMuc3RhcnQoKQorICAgICAgICBtdWx0aXByb2Nlc3NpbmcudXRpbC5GaW5hbGl6ZShOb25lLCBzeW5jLmpvaW4sIGV4aXRwcmlvcml0eT0tMTAwKQorICAgICAgICBiYi5jb2RlcGFyc2VyLnBhcnNlcl9jYWNoZV9zYXZlbWVyZ2Uoc2VsZi5jb29rZXIuZGF0YSkKKyAgICAgICAgYmIuZmV0Y2guZmV0Y2hlcl9wYXJzZV9kb25lKHNlbGYuY29va2VyLmRhdGEpCisgICAgICAgIGlmIHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24ucHJvZmlsZToKKyAgICAgICAgICAgIHByb2ZpbGVzID0gW10KKyAgICAgICAgICAgIGZvciBpIGluIHNlbGYucHJvY2Vzc19uYW1lczoKKyAgICAgICAgICAgICAgICBsb2dmaWxlID0gInByb2ZpbGUtcGFyc2UtJXMubG9nIiAlIGkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsb2dmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgcHJvZmlsZXMuYXBwZW5kKGxvZ2ZpbGUpCisKKyAgICAgICAgICAgIHBvdXQgPSAicHJvZmlsZS1wYXJzZS5sb2cucHJvY2Vzc2VkIgorICAgICAgICAgICAgYmIudXRpbHMucHJvY2Vzc19wcm9maWxlbG9nKHByb2ZpbGVzLCBwb3V0ID0gcG91dCkKKyAgICAgICAgICAgIHByaW50KCJQcm9jZXNzZWQgcGFyc2luZyBzdGF0aXN0aWNzIHNhdmVkIHRvICVzIiAlIChwb3V0KSkKKworICAgIGRlZiBsb2FkX2NhY2hlZChzZWxmKToKKyAgICAgICAgZm9yIGZpbGVuYW1lLCBhcHBlbmRzIGluIHNlbGYuZnJvbWNhY2hlOgorICAgICAgICAgICAgY2FjaGVkLCBpbmZvcyA9IHNlbGYuYmJfY2FjaGUubG9hZChmaWxlbmFtZSwgYXBwZW5kcywgc2VsZi5jZmdkYXRhKQorICAgICAgICAgICAgeWllbGQgbm90IGNhY2hlZCwgaW5mb3MKKworICAgIGRlZiBwYXJzZV9nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBpZiBzZWxmLnBhcnNlZCA+PSBzZWxmLnRvcGFyc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYucmVzdWx0X3F1ZXVlLmdldCh0aW1lb3V0PTAuMjUpCisgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHJlc3VsdFsxXQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIEJhc2VFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgICAgICByYWlzZSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorCisgICAgZGVmIHBhcnNlX25leHQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIHBhcnNlZCA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyc2VkLCByZXN1bHQgPSBzZWxmLnJlc3VsdHMubmV4dCgpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgc2VsZi5zaHV0ZG93bigpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IGJiLkJCSGFuZGxlZEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLmVycm9yICs9IDEKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHJlY2lwZTogJXMnICUgZXhjLnJlY2lwZSkKKyAgICAgICAgICAgIHNlbGYuc2h1dGRvd24oY2xlYW49RmFsc2UpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IFBhcnNpbmdGYWlsdXJlIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgKz0gMQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gcGFyc2UgJXM6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAoZXhjLnJlY2lwZSwgYmIuZXhjZXB0aW9ucy50b19zdHJpbmcoZXhjLnJlYWxleGNlcHRpb24pKSkKKyAgICAgICAgICAgIHNlbGYuc2h1dGRvd24oY2xlYW49RmFsc2UpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IGJiLnBhcnNlLlBhcnNlRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5lcnJvciArPSAxCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGV4YykpCisgICAgICAgICAgICBzZWxmLnNodXRkb3duKGNsZWFuPUZhbHNlKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgKz0gMQorICAgICAgICAgICAgXywgdmFsdWUsIF8gPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdFeHBhbnNpb25FcnJvciBkdXJpbmcgcGFyc2luZyAlczogJXMnLCB2YWx1ZS5yZWNpcGUsIHN0cihleGMpKQorICAgICAgICAgICAgc2VsZi5zaHV0ZG93bihjbGVhbj1GYWxzZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5lcnJvciArPSAxCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBwYXJzZSAlcycsIGV4Yy5yZWNpcGUpCisgICAgICAgICAgICBzZWxmLnNodXRkb3duKGNsZWFuPUZhbHNlKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5lcnJvciArPSAxCisgICAgICAgICAgICBldHlwZSwgdmFsdWUsIHRiID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIodmFsdWUsICJyZWNpcGUiKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBwYXJzZSAlcycsIHZhbHVlLnJlY2lwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNfaW5mbz0oZXR5cGUsIHZhbHVlLCBleGMudHJhY2ViYWNrKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBNb3N0IGxpa2VseSwgYW4gZXhjZXB0aW9uIG9jY3VycmVkIGR1cmluZyByYWlzaW5nIGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0V4Y2VwdGlvbiBkdXJpbmcgcGFyc2U6ICVzJyAlIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisgICAgICAgICAgICBzZWxmLnNodXRkb3duKGNsZWFuPUZhbHNlKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgc2VsZi5jdXJyZW50ICs9IDEKKyAgICAgICAgc2VsZi52aXJ0dWFscyArPSBsZW4ocmVzdWx0KQorICAgICAgICBpZiBwYXJzZWQ6CisgICAgICAgICAgICBzZWxmLnBhcnNlZCArPSAxCisgICAgICAgICAgICBpZiBzZWxmLnBhcnNlZCAlIHNlbGYucHJvZ3Jlc3NfY2h1bmsgPT0gMDoKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlBhcnNlUHJvZ3Jlc3Moc2VsZi5wYXJzZWQsIHNlbGYudG9wYXJzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNmZ2RhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNhY2hlZCArPSAxCisKKyAgICAgICAgZm9yIHZpcnR1YWxmbiwgaW5mb19hcnJheSBpbiByZXN1bHQ6CisgICAgICAgICAgICBpZiBpbmZvX2FycmF5WzBdLnNraXBwZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwcGVkICs9IDEKKyAgICAgICAgICAgICAgICBzZWxmLmNvb2tlci5za2lwbGlzdFt2aXJ0dWFsZm5dID0gU2tpcHBlZFBhY2thZ2UoaW5mb19hcnJheVswXSkKKyAgICAgICAgICAgIHNlbGYuYmJfY2FjaGUuYWRkX2luZm8odmlydHVhbGZuLCBpbmZvX2FycmF5LCBzZWxmLmNvb2tlci5yZWNpcGVjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQ9cGFyc2VkLCB3YXRjaGVyID0gc2VsZi5jb29rZXIuYWRkX2ZpbGV3YXRjaCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiByZXBhcnNlKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgaW5mb3MgPSBzZWxmLmJiX2NhY2hlLnBhcnNlKGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZpbGVuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2ZnZGF0YSwgc2VsZi5jb29rZXIuY2FjaGVzX2FycmF5KQorICAgICAgICBmb3IgdmZuLCBpbmZvX2FycmF5IGluIGluZm9zOgorICAgICAgICAgICAgc2VsZi5jb29rZXIucmVjaXBlY2FjaGUuYWRkX2Zyb21fcmVjaXBlaW5mbyh2Zm4sIGluZm9fYXJyYXkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2Nvb2tlcmRhdGEucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2Nvb2tlcmRhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE5YzI4MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29va2VyZGF0YS5weQpAQCAtMCwwICsxLDMzNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIFBoaWwgQmx1bmRlbGwKKyMgQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNSBNaWNoYWVsICdNaWNrZXknIExhdWVyCisjIENvcHlyaWdodCAoQykgMjAwNSAgICAgICAgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBST0FEIEdtYkgKKyMgQ29weXJpZ2h0IChDKSAyMDA2ICAgICAgICBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IG9zLCBzeXMKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBiYgorZnJvbSBiYiBpbXBvcnQgZGF0YQoraW1wb3J0IGJiLnBhcnNlCisKK2xvZ2dlciAgICAgID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UiKQorcGFyc2Vsb2cgICAgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5QYXJzaW5nIikKKworY2xhc3MgQ29uZmlnUGFyYW1ldGVycyhvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmd2PXN5cy5hcmd2KToKKyAgICAgICAgc2VsZi5vcHRpb25zLCB0YXJnZXRzID0gc2VsZi5wYXJzZUNvbW1hbmRMaW5lKGFyZ3YpCisgICAgICAgIHNlbGYuZW52aXJvbm1lbnQgPSBzZWxmLnBhcnNlRW52aXJvbm1lbnQoKQorCisgICAgICAgIHNlbGYub3B0aW9ucy5wa2dzX3RvX2J1aWxkID0gdGFyZ2V0cyBvciBbXQorCisgICAgICAgIHNlbGYub3B0aW9ucy50cmFja2luZyA9IEZhbHNlCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5vcHRpb25zLCAic2hvd19lbnZpcm9ubWVudCIpIGFuZCBzZWxmLm9wdGlvbnMuc2hvd19lbnZpcm9ubWVudDoKKyAgICAgICAgICAgIHNlbGYub3B0aW9ucy50cmFja2luZyA9IFRydWUKKworICAgICAgICBmb3Iga2V5LCB2YWwgaW4gc2VsZi5vcHRpb25zLl9fZGljdF9fLml0ZW1zKCk6CisgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGtleSwgdmFsKQorCisgICAgZGVmIHBhcnNlQ29tbWFuZExpbmUoc2VsZiwgYXJndj1zeXMuYXJndik6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ2FsbGVyIG11c3QgaW1wbGVtZW50IGNvbW1hbmRsaW5lIG9wdGlvbiBwYXJzaW5nIikKKworICAgIGRlZiBwYXJzZUVudmlyb25tZW50KHNlbGYpOgorICAgICAgICByZXR1cm4gb3MuZW52aXJvbi5jb3B5KCkKKworICAgIGRlZiB1cGRhdGVGcm9tU2VydmVyKHNlbGYsIHNlcnZlcik6CisgICAgICAgIGlmIG5vdCBzZWxmLm9wdGlvbnMuY21kOgorICAgICAgICAgICAgZGVmYXVsdHRhc2ssIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQl9ERUZBVUxUX1RBU0siXSkKKyAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5hYmxlIHRvIGdldCB0aGUgdmFsdWUgb2YgQkJfREVGQVVMVF9UQVNLIGZyb20gdGhlIHNlcnZlcjogJXMiICUgZXJyb3IpCisgICAgICAgICAgICBzZWxmLm9wdGlvbnMuY21kID0gZGVmYXVsdHRhc2sgb3IgImJ1aWxkIgorICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic2V0Q29uZmlnIiwgImNtZCIsIHNlbGYub3B0aW9ucy5jbWRdKQorICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5hYmxlIHRvIHNldCBjb25maWd1cmF0aW9uIG9wdGlvbiAnY21kJyBvbiB0aGUgc2VydmVyOiAlcyIgJSBlcnJvcikKKworICAgICAgICBpZiBub3Qgc2VsZi5vcHRpb25zLnBrZ3NfdG9fYnVpbGQ6CisgICAgICAgICAgICBiYnBrZ3MsIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQlBLR1MiXSkKKyAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5hYmxlIHRvIGdldCB0aGUgdmFsdWUgb2YgQkJQS0dTIGZyb20gdGhlIHNlcnZlcjogJXMiICUgZXJyb3IpCisgICAgICAgICAgICBpZiBiYnBrZ3M6CisgICAgICAgICAgICAgICAgc2VsZi5vcHRpb25zLnBrZ3NfdG9fYnVpbGQuZXh0ZW5kKGJicGtncy5zcGxpdCgpKQorCisgICAgZGVmIHVwZGF0ZVRvU2VydmVyKHNlbGYsIHNlcnZlciwgZW52aXJvbm1lbnQpOgorICAgICAgICBvcHRpb25zID0ge30KKyAgICAgICAgZm9yIG8gaW4gWyJhYm9ydCIsICJ0cnlhbHRjb25maWdzIiwgImZvcmNlIiwgImludmFsaWRhdGVfc3RhbXAiLCAKKyAgICAgICAgICAgICAgICAgICJ2ZXJib3NlIiwgImRlYnVnIiwgImRyeV9ydW4iLCAiZHVtcF9zaWduYXR1cmVzIiwgCisgICAgICAgICAgICAgICAgICAiZGVidWdfZG9tYWlucyIsICJleHRyYV9hc3N1bWVfcHJvdmlkZWQiLCAicHJvZmlsZSIsCisgICAgICAgICAgICAgICAgICAicHJlZmlsZSIsICJwb3N0ZmlsZSJdOgorICAgICAgICAgICAgb3B0aW9uc1tvXSA9IGdldGF0dHIoc2VsZi5vcHRpb25zLCBvKQorCisgICAgICAgIHJldCwgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbInVwZGF0ZUNvbmZpZyIsIG9wdGlvbnMsIGVudmlyb25tZW50XSkKKyAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmFibGUgdG8gdXBkYXRlIHRoZSBzZXJ2ZXIgY29uZmlndXJhdGlvbiB3aXRoIGxvY2FsIHBhcmFtZXRlcnM6ICVzIiAlIGVycm9yKQorCisgICAgZGVmIHBhcnNlQWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBQYXJzZSBhbnkgY29tbWFuZGxpbmUgaW50byBhY3Rpb25zCisgICAgICAgIGFjdGlvbiA9IHsnYWN0aW9uJzpOb25lLCAnbXNnJzpOb25lfQorICAgICAgICBpZiBzZWxmLm9wdGlvbnMuc2hvd19lbnZpcm9ubWVudDoKKyAgICAgICAgICAgIGlmICd3b3JsZCcgaW4gc2VsZi5vcHRpb25zLnBrZ3NfdG9fYnVpbGQ6CisgICAgICAgICAgICAgICAgYWN0aW9uWydtc2cnXSA9ICInd29ybGQnIGlzIG5vdCBhIHZhbGlkIHRhcmdldCBmb3IgLS1lbnZpcm9ubWVudC4iCisgICAgICAgICAgICBlbGlmICd1bml2ZXJzZScgaW4gc2VsZi5vcHRpb25zLnBrZ3NfdG9fYnVpbGQ6CisgICAgICAgICAgICAgICAgYWN0aW9uWydtc2cnXSA9ICIndW5pdmVyc2UnIGlzIG5vdCBhIHZhbGlkIHRhcmdldCBmb3IgLS1lbnZpcm9ubWVudC4iCisgICAgICAgICAgICBlbGlmIGxlbihzZWxmLm9wdGlvbnMucGtnc190b19idWlsZCkgPiAxOgorICAgICAgICAgICAgICAgIGFjdGlvblsnbXNnJ10gPSAiT25seSBvbmUgdGFyZ2V0IGNhbiBiZSB1c2VkIHdpdGggdGhlIC0tZW52aXJvbm1lbnQgb3B0aW9uLiIKKyAgICAgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLmJ1aWxkZmlsZSBhbmQgbGVuKHNlbGYub3B0aW9ucy5wa2dzX3RvX2J1aWxkKSA+IDA6CisgICAgICAgICAgICAgICAgYWN0aW9uWydtc2cnXSA9ICJObyB0YXJnZXQgc2hvdWxkIGJlIHVzZWQgd2l0aCB0aGUgLS1lbnZpcm9ubWVudCBhbmQgLS1idWlsZGZpbGUgb3B0aW9ucy4iCisgICAgICAgICAgICBlbGlmIGxlbihzZWxmLm9wdGlvbnMucGtnc190b19idWlsZCkgPiAwOgorICAgICAgICAgICAgICAgIGFjdGlvblsnYWN0aW9uJ10gPSBbInNob3dFbnZpcm9ubWVudFRhcmdldCIsIHNlbGYub3B0aW9ucy5wa2dzX3RvX2J1aWxkXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhY3Rpb25bJ2FjdGlvbiddID0gWyJzaG93RW52aXJvbm1lbnQiLCBzZWxmLm9wdGlvbnMuYnVpbGRmaWxlXQorICAgICAgICBlbGlmIHNlbGYub3B0aW9ucy5idWlsZGZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhY3Rpb25bJ2FjdGlvbiddID0gWyJidWlsZEZpbGUiLCBzZWxmLm9wdGlvbnMuYnVpbGRmaWxlLCBzZWxmLm9wdGlvbnMuY21kXQorICAgICAgICBlbGlmIHNlbGYub3B0aW9ucy5yZXZpc2lvbnNfY2hhbmdlZDoKKyAgICAgICAgICAgIGFjdGlvblsnYWN0aW9uJ10gPSBbImNvbXBhcmVSZXZpc2lvbnMiXQorICAgICAgICBlbGlmIHNlbGYub3B0aW9ucy5zaG93X3ZlcnNpb25zOgorICAgICAgICAgICAgYWN0aW9uWydhY3Rpb24nXSA9IFsic2hvd1ZlcnNpb25zIl0KKyAgICAgICAgZWxpZiBzZWxmLm9wdGlvbnMucGFyc2Vfb25seToKKyAgICAgICAgICAgIGFjdGlvblsnYWN0aW9uJ10gPSBbInBhcnNlRmlsZXMiXQorICAgICAgICBlbGlmIHNlbGYub3B0aW9ucy5kb3RfZ3JhcGg6CisgICAgICAgICAgICBpZiBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZDoKKyAgICAgICAgICAgICAgICBhY3Rpb25bJ2FjdGlvbiddID0gWyJnZW5lcmF0ZURvdEdyYXBoIiwgc2VsZi5vcHRpb25zLnBrZ3NfdG9fYnVpbGQsIHNlbGYub3B0aW9ucy5jbWRdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFjdGlvblsnbXNnJ10gPSAiUGxlYXNlIHNwZWNpZnkgYSBwYWNrYWdlIG5hbWUgZm9yIGRlcGVuZGVuY3kgZ3JhcGggZ2VuZXJhdGlvbi4iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZDoKKyAgICAgICAgICAgICAgICBhY3Rpb25bJ2FjdGlvbiddID0gWyJidWlsZFRhcmdldHMiLCBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZCwgc2VsZi5vcHRpb25zLmNtZF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgI2FjdGlvblsnbXNnJ10gPSAiTm90aGluZyB0byBkby4gIFVzZSAnYml0YmFrZSB3b3JsZCcgdG8gYnVpbGQgZXZlcnl0aGluZywgb3IgcnVuICdiaXRiYWtlIC0taGVscCcgZm9yIHVzYWdlIGluZm9ybWF0aW9uLiIKKyAgICAgICAgICAgICAgICBhY3Rpb24gPSBOb25lCisgICAgICAgIHNlbGYub3B0aW9ucy5pbml0aWFsYWN0aW9uID0gYWN0aW9uCisgICAgICAgIHJldHVybiBhY3Rpb24KKworY2xhc3MgQ29va2VyQ29uZmlndXJhdGlvbihvYmplY3QpOgorICAgICIiIgorICAgIE1hbmFnZXMgYnVpbGQgb3B0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMgZm9yIG9uZSBydW4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5kZWJ1Z19kb21haW5zID0gW10KKyAgICAgICAgc2VsZi5leHRyYV9hc3N1bWVfcHJvdmlkZWQgPSBbXQorICAgICAgICBzZWxmLnByZWZpbGUgPSBbXQorICAgICAgICBzZWxmLnBvc3RmaWxlID0gW10KKyAgICAgICAgc2VsZi5kZWJ1ZyA9IDAKKyAgICAgICAgc2VsZi5jbWQgPSBOb25lCisgICAgICAgIHNlbGYuYWJvcnQgPSBUcnVlCisgICAgICAgIHNlbGYuZm9yY2UgPSBGYWxzZQorICAgICAgICBzZWxmLnByb2ZpbGUgPSBGYWxzZQorICAgICAgICBzZWxmLm5vc2V0c2NlbmUgPSBGYWxzZQorICAgICAgICBzZWxmLmludmFsaWRhdGVfc3RhbXAgPSBGYWxzZQorICAgICAgICBzZWxmLmR1bXBfc2lnbmF0dXJlcyA9IFtdCisgICAgICAgIHNlbGYuZHJ5X3J1biA9IEZhbHNlCisgICAgICAgIHNlbGYudHJhY2tpbmcgPSBGYWxzZQorICAgICAgICBzZWxmLmludGVyZmFjZSA9IFtdCisgICAgICAgIHNlbGYud3JpdGVldmVudGxvZyA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5lbnYgPSB7fQorCisgICAgZGVmIHNldENvbmZpZ1BhcmFtZXRlcnMoc2VsZiwgcGFyYW1ldGVycyk6CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5fX2RpY3RfXy5rZXlzKCk6CisgICAgICAgICAgICBpZiBrZXkgaW4gcGFyYW1ldGVycy5vcHRpb25zLl9fZGljdF9fOgorICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5LCBwYXJhbWV0ZXJzLm9wdGlvbnMuX19kaWN0X19ba2V5XSkKKyAgICAgICAgc2VsZi5lbnYgPSBwYXJhbWV0ZXJzLmVudmlyb25tZW50LmNvcHkoKQorICAgICAgICBzZWxmLnRyYWNraW5nID0gcGFyYW1ldGVycy50cmFja2luZworCisgICAgZGVmIHNldFNlcnZlclJlZ0lkbGVDYWxsYmFjayhzZWxmLCBzcmNiKToKKyAgICAgICAgc2VsZi5zZXJ2ZXJfcmVnaXN0ZXJfaWRsZWNhbGxiYWNrID0gc3JjYgorCisgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgc3RhdGUgPSB7fQorICAgICAgICBmb3Iga2V5IGluIHNlbGYuX19kaWN0X18ua2V5cygpOgorICAgICAgICAgICAgaWYga2V5ID09ICJzZXJ2ZXJfcmVnaXN0ZXJfaWRsZWNhbGxiYWNrIjoKKyAgICAgICAgICAgICAgICBzdGF0ZVtrZXldID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdGF0ZVtrZXldID0gZ2V0YXR0cihzZWxmLCBrZXkpCisgICAgICAgIHJldHVybiBzdGF0ZQorCisgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLHN0YXRlKToKKyAgICAgICAgZm9yIGsgaW4gc3RhdGU6CisgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGssIHN0YXRlW2tdKSAKKworCitkZWYgY2F0Y2hfcGFyc2VfZXJyb3IoZnVuYyk6CisgICAgIiIiRXhjZXB0aW9uIGhhbmRsaW5nIGJpdHMgZm9yIG91ciBwYXJzaW5nIiIiCisgICAgQHdyYXBzKGZ1bmMpCisgICAgZGVmIHdyYXBwZWQoZm4sICphcmdzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGZ1bmMoZm4sICphcmdzKQorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBleGM6CisgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgICAgICBwYXJzZWxvZy5jcml0aWNhbCh0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorICAgICAgICAgICAgcGFyc2Vsb2cuY3JpdGljYWwoIlVuYWJsZSB0byBwYXJzZSAlczogJXMiICUgKGZuLCBleGMpKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgZXhjZXB0IChiYi5wYXJzZS5QYXJzZUVycm9yLCBiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yKSBhcyBleGM6CisgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisKKyAgICAgICAgICAgIGJiZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSArIG9zLnNlcAorICAgICAgICAgICAgZXhjX2NsYXNzLCBleGMsIHRiID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGZvciB0YiBpbiBpdGVyKGxhbWJkYTogdGIudGJfbmV4dCwgTm9uZSk6CisgICAgICAgICAgICAgICAgIyBTa2lwIGZyYW1lcyBpbiBiaXRiYWtlIGl0c2VsZiwgd2Ugb25seSB3YW50IHRoZSBtZXRhZGF0YQorICAgICAgICAgICAgICAgIGZuLCBfLCBfLCBfID0gdHJhY2ViYWNrLmV4dHJhY3RfdGIodGIsIDEpWzBdCisgICAgICAgICAgICAgICAgaWYgbm90IGZuLnN0YXJ0c3dpdGgoYmJkaXIpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcGFyc2Vsb2cuY3JpdGljYWwoIlVuYWJsZSB0byBwYXJzZSAlcyIsIGZuLCBleGNfaW5mbz0oZXhjX2NsYXNzLCBleGMsIHRiKSkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgcmV0dXJuIHdyYXBwZWQKKworQGNhdGNoX3BhcnNlX2Vycm9yCitkZWYgcGFyc2VfY29uZmlnX2ZpbGUoZm4sIGRhdGEsIGluY2x1ZGU9VHJ1ZSk6CisgICAgcmV0dXJuIGJiLnBhcnNlLmhhbmRsZShmbiwgZGF0YSwgaW5jbHVkZSkKKworQGNhdGNoX3BhcnNlX2Vycm9yCitkZWYgX2luaGVyaXQoYmJjbGFzcywgZGF0YSk6CisgICAgYmIucGFyc2UuQkJIYW5kbGVyLmluaGVyaXQoYmJjbGFzcywgImNvbmZpZ3VyYXRpb24gSU5IRVJJVHMiLCAwLCBkYXRhKQorICAgIHJldHVybiBkYXRhCisKK2RlZiBmaW5kQ29uZmlnRmlsZShjb25maWdmaWxlLCBkYXRhKToKKyAgICBzZWFyY2ggPSBbXQorICAgIGJicGF0aCA9IGRhdGEuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKQorICAgIGlmIGJicGF0aDoKKyAgICAgICAgZm9yIGkgaW4gYmJwYXRoLnNwbGl0KCI6Iik6CisgICAgICAgICAgICBzZWFyY2guYXBwZW5kKG9zLnBhdGguam9pbihpLCAiY29uZiIsIGNvbmZpZ2ZpbGUpKQorICAgIHBhdGggPSBvcy5nZXRjd2QoKQorICAgIHdoaWxlIHBhdGggIT0gIi8iOgorICAgICAgICBzZWFyY2guYXBwZW5kKG9zLnBhdGguam9pbihwYXRoLCAiY29uZiIsIGNvbmZpZ2ZpbGUpKQorICAgICAgICBwYXRoLCBfID0gb3MucGF0aC5zcGxpdChwYXRoKQorCisgICAgZm9yIGkgaW4gc2VhcmNoOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhpKToKKyAgICAgICAgICAgIHJldHVybiBpCisKKyAgICByZXR1cm4gTm9uZQorCitjbGFzcyBDb29rZXJEYXRhQnVpbGRlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvb2tlcmNmZywgd29ya2VyID0gRmFsc2UpOgorCisgICAgICAgIHNlbGYucHJlZmlsZXMgPSBjb29rZXJjZmcucHJlZmlsZQorICAgICAgICBzZWxmLnBvc3RmaWxlcyA9IGNvb2tlcmNmZy5wb3N0ZmlsZQorICAgICAgICBzZWxmLnRyYWNraW5nID0gY29va2VyY2ZnLnRyYWNraW5nCisKKyAgICAgICAgYmIudXRpbHMuc2V0X2NvbnRleHQoYmIudXRpbHMuY2xlYW5fY29udGV4dCgpKQorICAgICAgICBiYi5ldmVudC5zZXRfY2xhc3NfaGFuZGxlcnMoYmIuZXZlbnQuY2xlYW5fY2xhc3NfaGFuZGxlcnMoKSkKKyAgICAgICAgc2VsZi5kYXRhID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgaWYgc2VsZi50cmFja2luZzoKKyAgICAgICAgICAgIHNlbGYuZGF0YS5lbmFibGVUcmFja2luZygpCisKKyAgICAgICAgIyBLZWVwIGEgZGF0YXN0b3JlIG9mIHRoZSBpbml0aWFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgdGhlaXIKKyAgICAgICAgIyB2YWx1ZXMgZnJvbSB3aGVuIEJpdEJha2Ugd2FzIGxhdW5jaGVkIHRvIGVuYWJsZSBjaGlsZCBwcm9jZXNzZXMKKyAgICAgICAgIyB0byB1c2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdoaWNoIGhhdmUgYmVlbiBjbGVhbmVkIGZyb20gdGhlCisgICAgICAgICMgQml0QmFrZSBwcm9jZXNzZXMgZW52CisgICAgICAgIHNlbGYuc2F2ZWRlbnYgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBmb3IgayBpbiBjb29rZXJjZmcuZW52OgorICAgICAgICAgICAgc2VsZi5zYXZlZGVudi5zZXRWYXIoaywgY29va2VyY2ZnLmVudltrXSkKKworICAgICAgICBmaWx0ZXJlZF9rZXlzID0gYmIudXRpbHMuYXBwcm92ZWRfdmFyaWFibGVzKCkKKyAgICAgICAgYmIuZGF0YS5pbmhlcml0RnJvbU9TKHNlbGYuZGF0YSwgc2VsZi5zYXZlZGVudiwgZmlsdGVyZWRfa2V5cykKKyAgICAgICAgc2VsZi5kYXRhLnNldFZhcigiQkJfT1JJR0VOViIsIHNlbGYuc2F2ZWRlbnYpCisgICAgICAgIAorICAgICAgICBpZiB3b3JrZXI6CisgICAgICAgICAgICBzZWxmLmRhdGEuc2V0VmFyKCJCQl9XT1JLRVJDT05URVhUIiwgIjEiKQorCisgICAgZGVmIHBhcnNlQmFzZUNvbmZpZ3VyYXRpb24oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucGFyc2VDb25maWd1cmF0aW9uRmlsZXMoc2VsZi5wcmVmaWxlcywgc2VsZi5wb3N0ZmlsZXMpCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIGJiLkJCSGFuZGxlZEV4Y2VwdGlvbgorICAgICAgICBleGNlcHQgYmIuZGF0YV9zbWFydC5FeHBhbnNpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihlKSkKKyAgICAgICAgICAgIHJhaXNlIGJiLkJCSGFuZGxlZEV4Y2VwdGlvbgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbigiRXJyb3IgcGFyc2luZyBjb25maWd1cmF0aW9uIGZpbGVzIikKKyAgICAgICAgICAgIHJhaXNlIGJiLkJCSGFuZGxlZEV4Y2VwdGlvbgorCisgICAgZGVmIF9maW5kTGF5ZXJDb25mKHNlbGYsIGRhdGEpOgorICAgICAgICByZXR1cm4gZmluZENvbmZpZ0ZpbGUoImJibGF5ZXJzLmNvbmYiLCBkYXRhKQorCisgICAgZGVmIHBhcnNlQ29uZmlndXJhdGlvbkZpbGVzKHNlbGYsIHByZWZpbGVzLCBwb3N0ZmlsZXMpOgorICAgICAgICBkYXRhID0gc2VsZi5kYXRhCisgICAgICAgIGJiLnBhcnNlLmluaXRfcGFyc2VyKGRhdGEpCisKKyAgICAgICAgIyBQYXJzZSBmaWxlcyBmb3IgbG9hZGluZyAqYmVmb3JlKiBiaXRiYWtlLmNvbmYgYW5kIGFueSBpbmNsdWRlcworICAgICAgICBmb3IgZiBpbiBwcmVmaWxlczoKKyAgICAgICAgICAgIGRhdGEgPSBwYXJzZV9jb25maWdfZmlsZShmLCBkYXRhKQorCisgICAgICAgIGxheWVyY29uZiA9IHNlbGYuX2ZpbmRMYXllckNvbmYoZGF0YSkKKyAgICAgICAgaWYgbGF5ZXJjb25mOgorICAgICAgICAgICAgcGFyc2Vsb2cuZGVidWcoMiwgIkZvdW5kIGJibGF5ZXJzLmNvbmYgKCVzKSIsIGxheWVyY29uZikKKyAgICAgICAgICAgICMgQnkgZGVmaW5pdGlvbiBiYmxheWVycy5jb25mIGlzIGluIGNvbmYvIG9mIFRPUERJUi4KKyAgICAgICAgICAgICMgV2UgbWF5IGhhdmUgYmVlbiBjYWxsZWQgd2l0aCBjd2Qgc29tZXdoZXJlIGVsc2Ugc28gcmVzZXQgVE9QRElSCisgICAgICAgICAgICBkYXRhLnNldFZhcigiVE9QRElSIiwgb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShsYXllcmNvbmYpKSkKKyAgICAgICAgICAgIGRhdGEgPSBwYXJzZV9jb25maWdfZmlsZShsYXllcmNvbmYsIGRhdGEpCisKKyAgICAgICAgICAgIGxheWVycyA9IChkYXRhLmdldFZhcignQkJMQVlFUlMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgICAgICAgICBkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGRhdGEpCisgICAgICAgICAgICBhcHByb3ZlZCA9IGJiLnV0aWxzLmFwcHJvdmVkX3ZhcmlhYmxlcygpCisgICAgICAgICAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgorICAgICAgICAgICAgICAgIHBhcnNlbG9nLmRlYnVnKDIsICJBZGRpbmcgbGF5ZXIgJXMiLCBsYXllcikKKyAgICAgICAgICAgICAgICBpZiAnSE9NRScgaW4gYXBwcm92ZWQgYW5kICd+JyBpbiBsYXllcjoKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIgPSBvcy5wYXRoLmV4cGFuZHVzZXIobGF5ZXIpCisgICAgICAgICAgICAgICAgZGF0YS5zZXRWYXIoJ0xBWUVSRElSJywgbGF5ZXIpCisgICAgICAgICAgICAgICAgZGF0YSA9IHBhcnNlX2NvbmZpZ19maWxlKG9zLnBhdGguam9pbihsYXllciwgImNvbmYiLCAibGF5ZXIuY29uZiIpLCBkYXRhKQorICAgICAgICAgICAgICAgIGRhdGEuZXhwYW5kVmFycmVmKCdMQVlFUkRJUicpCisKKyAgICAgICAgICAgIGRhdGEuZGVsVmFyKCdMQVlFUkRJUicpCisKKyAgICAgICAgaWYgbm90IGRhdGEuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKToKKyAgICAgICAgICAgIG1zZyA9ICJUaGUgQkJQQVRIIHZhcmlhYmxlIGlzIG5vdCBzZXQiCisgICAgICAgICAgICBpZiBub3QgbGF5ZXJjb25mOgorICAgICAgICAgICAgICAgIG1zZyArPSAoIiBhbmQgYml0YmFrZSBkaWQgbm90IGZpbmQgYSBjb25mL2JibGF5ZXJzLmNvbmYgZmlsZSBpbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgdGhlIGV4cGVjdGVkIGxvY2F0aW9uLlxuTWF5YmUgeW91IGFjY2lkZW50YWxseSIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgaW52b2tlZCBiaXRiYWtlIGZyb20gdGhlIHdyb25nIGRpcmVjdG9yeT8iKQorICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdChtc2cpCisKKyAgICAgICAgZGF0YSA9IHBhcnNlX2NvbmZpZ19maWxlKG9zLnBhdGguam9pbigiY29uZiIsICJiaXRiYWtlLmNvbmYiKSwgZGF0YSkKKworICAgICAgICAjIFBhcnNlIGZpbGVzIGZvciBsb2FkaW5nICphZnRlciogYml0YmFrZS5jb25mIGFuZCBhbnkgaW5jbHVkZXMKKyAgICAgICAgZm9yIHAgaW4gcG9zdGZpbGVzOgorICAgICAgICAgICAgZGF0YSA9IHBhcnNlX2NvbmZpZ19maWxlKHAsIGRhdGEpCisKKyAgICAgICAgIyBIYW5kbGUgYW55IElOSEVSSVRzIGFuZCBpbmhlcml0IHRoZSBiYXNlIGNsYXNzCisgICAgICAgIGJiY2xhc3NlcyAgPSBbImJhc2UiXSArIChkYXRhLmdldFZhcignSU5IRVJJVCcsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGZvciBiYmNsYXNzIGluIGJiY2xhc3NlczoKKyAgICAgICAgICAgIGRhdGEgPSBfaW5oZXJpdChiYmNsYXNzLCBkYXRhKQorCisgICAgICAgICMgTm9tYWxseSB3ZSBvbmx5IHJlZ2lzdGVyIGV2ZW50IGhhbmRsZXJzIGF0IHRoZSBlbmQgb2YgcGFyc2luZyAuYmIgZmlsZXMKKyAgICAgICAgIyBXZSByZWdpc3RlciBhbnkgaGFuZGxlcnMgd2UndmUgZm91bmQgc28gZmFyIGhlcmUuLi4KKyAgICAgICAgZm9yIHZhciBpbiBkYXRhLmdldFZhcignX19CQkhBTkRMRVJTJywgRmFsc2UpIG9yIFtdOgorICAgICAgICAgICAgYmIuZXZlbnQucmVnaXN0ZXIodmFyLCBkYXRhLmdldFZhcih2YXIsIEZhbHNlKSwgIChkYXRhLmdldFZhckZsYWcodmFyLCAiZXZlbnRtYXNrIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisKKyAgICAgICAgaWYgZGF0YS5nZXRWYXIoIkJCX1dPUktFUkNPTlRFWFQiLCBGYWxzZSkgaXMgTm9uZToKKyAgICAgICAgICAgIGJiLmZldGNoLmZldGNoZXJfaW5pdChkYXRhKQorICAgICAgICBiYi5jb2RlcGFyc2VyLnBhcnNlcl9jYWNoZV9pbml0KGRhdGEpCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQ29uZmlnUGFyc2VkKCksIGRhdGEpCisKKyAgICAgICAgaWYgZGF0YS5nZXRWYXIoIkJCX0lOVkFMSURDT05GIiwgRmFsc2UpIGlzIFRydWU6CisgICAgICAgICAgICBkYXRhLnNldFZhcigiQkJfSU5WQUxJRENPTkYiLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYucGFyc2VDb25maWd1cmF0aW9uRmlsZXMoc2VsZi5wcmVmaWxlcywgc2VsZi5wb3N0ZmlsZXMpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBiYi5wYXJzZS5pbml0X3BhcnNlcihkYXRhKQorICAgICAgICBkYXRhLnNldFZhcignQkJJTkNMVURFRCcsYmIucGFyc2UuZ2V0X2ZpbGVfZGVwZW5kcyhkYXRhKSkKKyAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorICAgICAgICBzZWxmLmRhdGFfaGFzaCA9IGRhdGEuZ2V0X2hhc2goKQorCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9kYWVtb25pemUucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhZW1vbml6ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDZhNjE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9kYWVtb25pemUucHkKQEAgLTAsMCArMSwxOTMgQEAKKyIiIgorUHl0aG9uIERhZW1vbml6aW5nIGhlbHBlcgorCitDb25maWd1cmFibGUgZGFlbW9uIGJlaGF2aW9yczoKKworICAgIDEuKSBUaGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBzZXQgdG8gdGhlICIvIiBkaXJlY3RvcnkuCisgICAgMi4pIFRoZSBjdXJyZW50IGZpbGUgY3JlYXRpb24gbW9kZSBtYXNrIHNldCB0byAwLgorICAgIDMuKSBDbG9zZSBhbGwgb3BlbiBmaWxlcyAoMTAyNCkuIAorICAgIDQuKSBSZWRpcmVjdCBzdGFuZGFyZCBJL08gc3RyZWFtcyB0byAiL2Rldi9udWxsIi4KKworQSBmYWlsZWQgY2FsbCB0byBmb3JrKCkgbm93IHJhaXNlcyBhbiBleGNlcHRpb24uCisKK1JlZmVyZW5jZXM6CisgICAgMSkgQWR2YW5jZWQgUHJvZ3JhbW1pbmcgaW4gdGhlIFVuaXggRW52aXJvbm1lbnQ6IFcuIFJpY2hhcmQgU3RldmVucworCWh0dHA6Ly93d3cuYXB1ZWJvb2suY29tL2FwdWUzZS5odG1sCisgICAgMikgVGhlIExpbnV4IFByb2dyYW1taW5nIEludGVyZmFjZTogTWljaGFlbCBLZXJyaXNrCisJaHR0cDovL21hbjcub3JnL3RscGkvaW5kZXguaHRtbAorICAgIDMpIFVuaXggUHJvZ3JhbW1pbmcgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnM6CisJaHR0cDovL3d3dy5mYXFzLm9yZy9mYXFzL3VuaXgtZmFxL3Byb2dyYW1tZXIvZmFxLworCitNb2RpZmllZCB0byBhbGxvdyBhIGZ1bmN0aW9uIHRvIGJlIGRhZW1vbml6ZWQgYW5kIHJldHVybiBmb3IgCitiaXRiYWtlIHVzZSBieSBSaWNoYXJkIFB1cmRpZQorIiIiCisKK19fYXV0aG9yX18gPSAiQ2hhZCBKLiBTY2hyb2VkZXIiCitfX2NvcHlyaWdodF9fID0gIkNvcHlyaWdodCAoQykgMjAwNSBDaGFkIEouIFNjaHJvZWRlciIKK19fdmVyc2lvbl9fID0gIjAuMiIKKworIyBTdGFuZGFyZCBQeXRob24gbW9kdWxlcy4KK2ltcG9ydCBvcyAgICAgICAgICAgICAgICAgICAgIyBNaXNjZWxsYW5lb3VzIE9TIGludGVyZmFjZXMuCitpbXBvcnQgc3lzICAgICAgICAgICAgICAgICAgICMgU3lzdGVtLXNwZWNpZmljIHBhcmFtZXRlcnMgYW5kIGZ1bmN0aW9ucy4KKworIyBEZWZhdWx0IGRhZW1vbiBwYXJhbWV0ZXJzLgorIyBGaWxlIG1vZGUgY3JlYXRpb24gbWFzayBvZiB0aGUgZGFlbW9uLgorIyBGb3IgQml0QmFrZSdzIGNoaWxkcmVuLCB3ZSBkbyB3YW50IHRvIGluaGVyaXQgdGhlIHBhcmVudCB1bWFzay4KK1VNQVNLID0gTm9uZQorCisjIERlZmF1bHQgbWF4aW11bSBmb3IgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgZmlsZSBkZXNjcmlwdG9ycy4KK01BWEZEID0gMTAyNAorCisjIFRoZSBzdGFuZGFyZCBJL08gZmlsZSBkZXNjcmlwdG9ycyBhcmUgcmVkaXJlY3RlZCB0byAvZGV2L251bGwgYnkgZGVmYXVsdC4KK2lmIChoYXNhdHRyKG9zLCAiZGV2bnVsbCIpKToKKyAgICBSRURJUkVDVF9UTyA9IG9zLmRldm51bGwKK2Vsc2U6CisgICAgUkVESVJFQ1RfVE8gPSAiL2Rldi9udWxsIgorCitkZWYgY3JlYXRlRGFlbW9uKGZ1bmN0aW9uLCBsb2dmaWxlKToKKyAgICAiIiIKKyAgICBEZXRhY2ggYSBwcm9jZXNzIGZyb20gdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGFuZCBydW4gaXQgaW4gdGhlCisgICAgYmFja2dyb3VuZCBhcyBhIGRhZW1vbiwgcmV0dXJuaW5nIGNvbnRyb2wgdG8gdGhlIGNhbGxlci4KKyAgICAiIiIKKworICAgIHRyeToKKyAgICAgICAgIyBGb3JrIGEgY2hpbGQgcHJvY2VzcyBzbyB0aGUgcGFyZW50IGNhbiBleGl0LiAgVGhpcyByZXR1cm5zIGNvbnRyb2wgdG8KKyAgICAgICAgIyB0aGUgY29tbWFuZC1saW5lIG9yIHNoZWxsLiAgSXQgYWxzbyBndWFyYW50ZWVzIHRoYXQgdGhlIGNoaWxkIHdpbGwgbm90CisgICAgICAgICMgYmUgYSBwcm9jZXNzIGdyb3VwIGxlYWRlciwgc2luY2UgdGhlIGNoaWxkIHJlY2VpdmVzIGEgbmV3IHByb2Nlc3MgSUQKKyAgICAgICAgIyBhbmQgaW5oZXJpdHMgdGhlIHBhcmVudCdzIHByb2Nlc3MgZ3JvdXAgSUQuICBUaGlzIHN0ZXAgaXMgcmVxdWlyZWQKKyAgICAgICAgIyB0byBpbnN1cmUgdGhhdCB0aGUgbmV4dCBjYWxsIHRvIG9zLnNldHNpZCBpcyBzdWNjZXNzZnVsLgorICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIiVzIFslZF0iICUgKGUuc3RyZXJyb3IsIGUuZXJybm8pKQorCisgICAgaWYgKHBpZCA9PSAwKTogICAgICAjIFRoZSBmaXJzdCBjaGlsZC4KKyAgICAgICAgIyBUbyBiZWNvbWUgdGhlIHNlc3Npb24gbGVhZGVyIG9mIHRoaXMgbmV3IHNlc3Npb24gYW5kIHRoZSBwcm9jZXNzIGdyb3VwCisgICAgICAgICMgbGVhZGVyIG9mIHRoZSBuZXcgcHJvY2VzcyBncm91cCwgd2UgY2FsbCBvcy5zZXRzaWQoKS4gIFRoZSBwcm9jZXNzIGlzCisgICAgICAgICMgYWxzbyBndWFyYW50ZWVkIG5vdCB0byBoYXZlIGEgY29udHJvbGxpbmcgdGVybWluYWwuCisgICAgICAgIG9zLnNldHNpZCgpCisKKyAgICAgICAgIyBJcyBpZ25vcmluZyBTSUdIVVAgbmVjZXNzYXJ5PworICAgICAgICAjCisgICAgICAgICMgSXQncyBvZnRlbiBzdWdnZXN0ZWQgdGhhdCB0aGUgU0lHSFVQIHNpZ25hbCBzaG91bGQgYmUgaWdub3JlZCBiZWZvcmUKKyAgICAgICAgIyB0aGUgc2Vjb25kIGZvcmsgdG8gYXZvaWQgcHJlbWF0dXJlIHRlcm1pbmF0aW9uIG9mIHRoZSBwcm9jZXNzLiAgVGhlCisgICAgICAgICMgcmVhc29uIGlzIHRoYXQgd2hlbiB0aGUgZmlyc3QgY2hpbGQgdGVybWluYXRlcywgYWxsIHByb2Nlc3NlcywgZS5nLgorICAgICAgICAjIHRoZSBzZWNvbmQgY2hpbGQsIGluIHRoZSBvcnBoYW5lZCBncm91cCB3aWxsIGJlIHNlbnQgYSBTSUdIVVAuCisgICAgICAgICMKKyAgICAgICAgIyAiSG93ZXZlciwgYXMgcGFydCBvZiB0aGUgc2Vzc2lvbiBtYW5hZ2VtZW50IHN5c3RlbSwgdGhlcmUgYXJlIGV4YWN0bHkKKyAgICAgICAgIyB0d28gY2FzZXMgd2hlcmUgU0lHSFVQIGlzIHNlbnQgb24gdGhlIGRlYXRoIG9mIGEgcHJvY2VzczoKKyAgICAgICAgIworICAgICAgICAjICAgIDEpIFdoZW4gdGhlIHByb2Nlc3MgdGhhdCBkaWVzIGlzIHRoZSBzZXNzaW9uIGxlYWRlciBvZiBhIHNlc3Npb24gdGhhdAorICAgICAgICAjICAgICAgICBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsIGRldmljZSwgU0lHSFVQIGlzIHNlbnQgdG8gYWxsIHByb2Nlc3NlcworICAgICAgICAjICAgICAgICBpbiB0aGUgZm9yZWdyb3VuZCBwcm9jZXNzIGdyb3VwIG9mIHRoYXQgdGVybWluYWwgZGV2aWNlLgorICAgICAgICAjICAgIDIpIFdoZW4gdGhlIGRlYXRoIG9mIGEgcHJvY2VzcyBjYXVzZXMgYSBwcm9jZXNzIGdyb3VwIHRvIGJlY29tZQorICAgICAgICAjICAgICAgICBvcnBoYW5lZCwgYW5kIG9uZSBvciBtb3JlIHByb2Nlc3NlcyBpbiB0aGUgb3JwaGFuZWQgZ3JvdXAgYXJlCisgICAgICAgICMgICAgICAgIHN0b3BwZWQsIHRoZW4gU0lHSFVQIGFuZCBTSUdDT05UIGFyZSBzZW50IHRvIGFsbCBtZW1iZXJzIG9mIHRoZQorICAgICAgICAjICAgICAgICBvcnBoYW5lZCBncm91cC4iIFsyXQorICAgICAgICAjCisgICAgICAgICMgVGhlIGZpcnN0IGNhc2UgY2FuIGJlIGlnbm9yZWQgc2luY2UgdGhlIGNoaWxkIGlzIGd1YXJhbnRlZWQgbm90IHRvIGhhdmUKKyAgICAgICAgIyBhIGNvbnRyb2xsaW5nIHRlcm1pbmFsLiAgVGhlIHNlY29uZCBjYXNlIGlzbid0IHNvIGVhc3kgdG8gZGlzbWlzcy4KKyAgICAgICAgIyBUaGUgcHJvY2VzcyBncm91cCBpcyBvcnBoYW5lZCB3aGVuIHRoZSBmaXJzdCBjaGlsZCB0ZXJtaW5hdGVzIGFuZAorICAgICAgICAjIFBPU0lYLjEgcmVxdWlyZXMgdGhhdCBldmVyeSBTVE9QUEVEIHByb2Nlc3MgaW4gYW4gb3JwaGFuZWQgcHJvY2VzcworICAgICAgICAjIGdyb3VwIGJlIHNlbnQgYSBTSUdIVVAgc2lnbmFsIGZvbGxvd2VkIGJ5IGEgU0lHQ09OVCBzaWduYWwuICBTaW5jZSB0aGUKKyAgICAgICAgIyBzZWNvbmQgY2hpbGQgaXMgbm90IFNUT1BQRUQgdGhvdWdoLCB3ZSBjYW4gc2FmZWx5IGZvcmVnbyBpZ25vcmluZyB0aGUKKyAgICAgICAgIyBTSUdIVVAgc2lnbmFsLiAgSW4gYW55IGNhc2UsIHRoZXJlIGFyZSBubyBpbGwtZWZmZWN0cyBpZiBpdCBpcyBpZ25vcmVkLgorICAgICAgICAjCisgICAgICAgICMgaW1wb3J0IHNpZ25hbCAgICAgICAgICAgICAgIyBTZXQgaGFuZGxlcnMgZm9yIGFzeW5jaHJvbm91cyBldmVudHMuCisgICAgICAgICMgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSFVQLCBzaWduYWwuU0lHX0lHTikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIEZvcmsgYSBzZWNvbmQgY2hpbGQgYW5kIGV4aXQgaW1tZWRpYXRlbHkgdG8gcHJldmVudCB6b21iaWVzLiAgVGhpcworICAgICAgICAgICAgIyBjYXVzZXMgdGhlIHNlY29uZCBjaGlsZCBwcm9jZXNzIHRvIGJlIG9ycGhhbmVkLCBtYWtpbmcgdGhlIGluaXQKKyAgICAgICAgICAgICMgcHJvY2VzcyByZXNwb25zaWJsZSBmb3IgaXRzIGNsZWFudXAuICBBbmQsIHNpbmNlIHRoZSBmaXJzdCBjaGlsZCBpcworICAgICAgICAgICAgIyBhIHNlc3Npb24gbGVhZGVyIHdpdGhvdXQgYSBjb250cm9sbGluZyB0ZXJtaW5hbCwgaXQncyBwb3NzaWJsZSBmb3IKKyAgICAgICAgICAgICMgaXQgdG8gYWNxdWlyZSBvbmUgYnkgb3BlbmluZyBhIHRlcm1pbmFsIGluIHRoZSBmdXR1cmUgKFN5c3RlbSBWLQorICAgICAgICAgICAgIyBiYXNlZCBzeXN0ZW1zKS4gIFRoaXMgc2Vjb25kIGZvcmsgZ3VhcmFudGVlcyB0aGF0IHRoZSBjaGlsZCBpcyBubworICAgICAgICAgICAgIyBsb25nZXIgYSBzZXNzaW9uIGxlYWRlciwgcHJldmVudGluZyB0aGUgZGFlbW9uIGZyb20gZXZlciBhY3F1aXJpbmcKKyAgICAgICAgICAgICMgYSBjb250cm9sbGluZyB0ZXJtaW5hbC4KKyAgICAgICAgICAgIHBpZCA9IG9zLmZvcmsoKSAgICAgIyBGb3JrIGEgc2Vjb25kIGNoaWxkLgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCIlcyBbJWRdIiAlIChlLnN0cmVycm9yLCBlLmVycm5vKSkKKworICAgICAgICBpZiAocGlkID09IDApOiAgIyBUaGUgc2Vjb25kIGNoaWxkLgorICAgICAgICAgICAgIyBXZSBwcm9iYWJseSBkb24ndCB3YW50IHRoZSBmaWxlIG1vZGUgY3JlYXRpb24gbWFzayBpbmhlcml0ZWQgZnJvbQorICAgICAgICAgICAgIyB0aGUgcGFyZW50LCBzbyB3ZSBnaXZlIHRoZSBjaGlsZCBjb21wbGV0ZSBjb250cm9sIG92ZXIgcGVybWlzc2lvbnMuCisgICAgICAgICAgICBpZiBVTUFTSyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBvcy51bWFzayhVTUFTSykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgUGFyZW50ICh0aGUgZmlyc3QgY2hpbGQpIG9mIHRoZSBzZWNvbmQgY2hpbGQuCisgICAgICAgICAgICBvcy5fZXhpdCgwKQorICAgIGVsc2U6CisgICAgICAgICMgZXhpdCgpIG9yIF9leGl0KCk/CisgICAgICAgICMgX2V4aXQgaXMgbGlrZSBleGl0KCksIGJ1dCBpdCBkb2Vzbid0IGNhbGwgYW55IGZ1bmN0aW9ucyByZWdpc3RlcmVkCisgICAgICAgICMgd2l0aCBhdGV4aXQgKGFuZCBvbl9leGl0KSBvciBhbnkgcmVnaXN0ZXJlZCBzaWduYWwgaGFuZGxlcnMuICBJdCBhbHNvCisgICAgICAgICMgY2xvc2VzIGFueSBvcGVuIGZpbGUgZGVzY3JpcHRvcnMuICBVc2luZyBleGl0KCkgbWF5IGNhdXNlIGFsbCBzdGRpbworICAgICAgICAjIHN0cmVhbXMgdG8gYmUgZmx1c2hlZCB0d2ljZSBhbmQgYW55IHRlbXBvcmFyeSBmaWxlcyBtYXkgYmUgdW5leHBlY3RlZGx5CisgICAgICAgICMgcmVtb3ZlZC4gIEl0J3MgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRoYXQgY2hpbGQgYnJhbmNoZXMgb2YgYSBmb3JrKCkKKyAgICAgICAgIyBhbmQgdGhlIHBhcmVudCBicmFuY2goZXMpIG9mIGEgZGFlbW9uIHVzZSBfZXhpdCgpLgorICAgICAgICByZXR1cm4KKworICAgICMgQ2xvc2UgYWxsIG9wZW4gZmlsZSBkZXNjcmlwdG9ycy4gIFRoaXMgcHJldmVudHMgdGhlIGNoaWxkIGZyb20ga2VlcGluZworICAgICMgb3BlbiBhbnkgZmlsZSBkZXNjcmlwdG9ycyBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50LiAgVGhlcmUgaXMgYSB2YXJpZXR5CisgICAgIyBvZiBtZXRob2RzIHRvIGFjY29tcGxpc2ggdGhpcyB0YXNrLiAgVGhyZWUgYXJlIGxpc3RlZCBiZWxvdy4KKyAgICAjCisgICAgIyBUcnkgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBTQ19PUEVOX01BWCwgdG8gb2J0YWluIHRoZSBtYXhpbXVtCisgICAgIyBudW1iZXIgb2Ygb3BlbiBmaWxlIGRlc2NyaXB0b3JzIHRvIGNsb3NlLiAgSWYgaXQgZG9lc24ndCBleGlzdCwgdXNlCisgICAgIyB0aGUgZGVmYXVsdCB2YWx1ZSAoY29uZmlndXJhYmxlKS4KKyAgICAjCisgICAgIyB0cnk6CisgICAgIyAgICAgbWF4ZmQgPSBvcy5zeXNjb25mKCJTQ19PUEVOX01BWCIpCisgICAgIyBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAjICAgICBtYXhmZCA9IE1BWEZECisgICAgIworICAgICMgT1IKKyAgICAjCisgICAgIyBpZiAob3Muc3lzY29uZl9uYW1lcy5oYXNfa2V5KCJTQ19PUEVOX01BWCIpKToKKyAgICAjICAgICBtYXhmZCA9IG9zLnN5c2NvbmYoIlNDX09QRU5fTUFYIikKKyAgICAjIGVsc2U6CisgICAgIyAgICAgbWF4ZmQgPSBNQVhGRAorICAgICMKKyAgICAjIE9SCisgICAgIworICAgICMgVXNlIHRoZSBnZXRybGltaXQgbWV0aG9kIHRvIHJldHJpZXZlIHRoZSBtYXhpbXVtIGZpbGUgZGVzY3JpcHRvciBudW1iZXIKKyAgICAjIHRoYXQgY2FuIGJlIG9wZW5lZCBieSB0aGlzIHByb2Nlc3MuICBJZiB0aGVyZSBpcyBubyBsaW1pdCBvbiB0aGUKKyAgICAjIHJlc291cmNlLCB1c2UgdGhlIGRlZmF1bHQgdmFsdWUuCisgICAgIworICAgIGltcG9ydCByZXNvdXJjZSAgICAgICAgICAgICAjIFJlc291cmNlIHVzYWdlIGluZm9ybWF0aW9uLgorICAgIG1heGZkID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9OT0ZJTEUpWzFdCisgICAgaWYgKG1heGZkID09IHJlc291cmNlLlJMSU1fSU5GSU5JVFkpOgorICAgICAgICBtYXhmZCA9IE1BWEZECisgIAorICAgICMgSXRlcmF0ZSB0aHJvdWdoIGFuZCBjbG9zZSBhbGwgZmlsZSBkZXNjcmlwdG9ycy4KKyMgICAgZm9yIGZkIGluIHJhbmdlKDAsIG1heGZkKToKKyMgICAgICAgIHRyeToKKyMgICAgICAgICAgICBvcy5jbG9zZShmZCkKKyMgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAgICAgICAgIyBFUlJPUiwgZmQgd2Fzbid0IG9wZW4gdG8gYmVnaW4gd2l0aCAoaWdub3JlZCkKKyMgICAgICAgICAgICBwYXNzCisKKyAgICAjIFJlZGlyZWN0IHRoZSBzdGFuZGFyZCBJL08gZmlsZSBkZXNjcmlwdG9ycyB0byB0aGUgc3BlY2lmaWVkIGZpbGUuICBTaW5jZQorICAgICMgdGhlIGRhZW1vbiBoYXMgbm8gY29udHJvbGxpbmcgdGVybWluYWwsIG1vc3QgZGFlbW9ucyByZWRpcmVjdCBzdGRpbiwKKyAgICAjIHN0ZG91dCwgYW5kIHN0ZGVyciB0byAvZGV2L251bGwuICBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzaWRlLWVmZmVjdHMKKyAgICAjIGZyb20gcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUgc3RhbmRhcmQgSS9PIGZpbGUgZGVzY3JpcHRvcnMuCisKKyAgICAjIFRoaXMgY2FsbCB0byBvcGVuIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIHRoZSBsb3dlc3QgZmlsZSBkZXNjcmlwdG9yLAorICAgICMgd2hpY2ggd2lsbCBiZSAwIChzdGRpbiksIHNpbmNlIGl0IHdhcyBjbG9zZWQgYWJvdmUuCisjICAgIG9zLm9wZW4oUkVESVJFQ1RfVE8sIG9zLk9fUkRXUikgICAgIyBzdGFuZGFyZCBpbnB1dCAoMCkKKworICAgICMgRHVwbGljYXRlIHN0YW5kYXJkIGlucHV0IHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQgZXJyb3IuCisjICAgIG9zLmR1cDIoMCwgMSkgICAgICAgICAgICAgICAgICAgICAgIyBzdGFuZGFyZCBvdXRwdXQgKDEpCisjICAgIG9zLmR1cDIoMCwgMikgICAgICAgICAgICAgICAgICAgICAgIyBzdGFuZGFyZCBlcnJvciAoMikKKworCisgICAgc2kgPSBmaWxlKCcvZGV2L251bGwnLCAncicpCisgICAgc28gPSBmaWxlKGxvZ2ZpbGUsICd3JykKKyAgICBzZSA9IHNvCisKKworICAgICMgUmVwbGFjZSB0aG9zZSBmZHMgd2l0aCBvdXIgb3duCisgICAgb3MuZHVwMihzaS5maWxlbm8oKSwgc3lzLnN0ZGluLmZpbGVubygpKQorICAgIG9zLmR1cDIoc28uZmlsZW5vKCksIHN5cy5zdGRvdXQuZmlsZW5vKCkpCisgICAgb3MuZHVwMihzZS5maWxlbm8oKSwgc3lzLnN0ZGVyci5maWxlbm8oKSkKKworICAgIGZ1bmN0aW9uKCkKKworICAgIG9zLl9leGl0KDApCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhdGEucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY0MTVhNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGF0YS5weQpAQCAtMCwwICsxLDQ0NiBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnRGF0YScgaW1wbGVtZW50YXRpb25zCisKK0Z1bmN0aW9ucyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGF0YSBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUKK0JpdEJha2UgYnVpbGQgdG9vbHMuCisKK1RoZSBleHBhbmRLZXlzIGFuZCB1cGRhdGVfZGF0YSBhcmUgdGhlIG1vc3QgZXhwZW5zaXZlCitvcGVyYXRpb25zLiBBdCBuaWdodCB0aGUgY29va2llIG1vbnN0ZXIgY2FtZSBieSBhbmQKK3N1Z2dlc3RlZCAnZ2l2ZSBtZSBjb29raWVzIG9uIHNldHRpbmcgdGhlIHZhcmlhYmxlcyBhbmQKK3RoaW5ncyB3aWxsIHdvcmsgb3V0Jy4gVGFraW5nIHRoaXMgc3VnZ2VzdGlvbiBpbnRvIGFjY291bnQKK2FwcGx5aW5nIHRoZSBza2lsbHMgZnJvbSB0aGUgbm90IHlldCBwYXNzZWQgJ0VudHd1cmYgdW5kCitBbmFseXNlIHZvbiBBbGdvcml0aG1lbicgbGVjdHVyZSBhbmQgdGhlIGNvb2tpZQorbW9uc3RlciBzZWVtcyB0byBiZSByaWdodC4gV2Ugd2lsbCB0cmFjayBzZXRWYXIgbW9yZSBjYXJlZnVsbHkKK3RvIGhhdmUgZmFzdGVyIHVwZGF0ZV9kYXRhIGFuZCBleHBhbmRLZXlzIG9wZXJhdGlvbnMuCisKK1RoaXMgaXMgYSB0cmFkZS1vZmYgYmV0d2VlbiBzcGVlZCBhbmQgbWVtb3J5IGFnYWluIGJ1dAordGhlIHNwZWVkIGlzIG1vcmUgY3JpdGljYWwgaGVyZS4KKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwNSAgICAgICAgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEJhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZSwgQ29weXJpZ2h0IDIwMDMgSG9sZ2VyIFNjaHVyaWcKKworaW1wb3J0IHN5cywgb3MsIHJlCitpZiBzeXMuYXJndlswXVstNTpdID09ICJweWRvYyI6CisgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMV0pKQorZWxzZToKKyAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSkpCitzeXMucGF0aC5pbnNlcnQoMCwgcGF0aCkKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBncm91cGJ5CisKK2Zyb20gYmIgaW1wb3J0IGRhdGFfc21hcnQKK2Zyb20gYmIgaW1wb3J0IGNvZGVwYXJzZXIKK2ltcG9ydCBiYgorCitsb2dnZXIgPSBkYXRhX3NtYXJ0LmxvZ2dlcgorX2RpY3RfdHlwZSA9IGRhdGFfc21hcnQuRGF0YVNtYXJ0CisKK2RlZiBpbml0KCk6CisgICAgIiIiUmV0dXJuIGEgbmV3IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIEJpdGJha2UgZGF0YSIiIgorICAgIHJldHVybiBfZGljdF90eXBlKCkKKworZGVmIGluaXRfZGIocGFyZW50ID0gTm9uZSk6CisgICAgIiIiUmV0dXJuIGEgbmV3IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIEJpdGJha2UgZGF0YSwKKyAgICBvcHRpb25hbGx5IGJhc2VkIG9uIGFuIGV4aXN0aW5nIG9iamVjdCIiIgorICAgIGlmIHBhcmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIHBhcmVudC5jcmVhdGVDb3B5KCkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gX2RpY3RfdHlwZSgpCisKK2RlZiBjcmVhdGVDb3B5KHNvdXJjZSk6CisgICAgIiIiTGluayB0aGUgc291cmNlIHNldCB0byB0aGUgZGVzdGluYXRpb24KKyAgICBJZiBvbmUgZG9lcyBub3QgZmluZCB0aGUgdmFsdWUgaW4gdGhlIGRlc3RpbmF0aW9uIHNldCwKKyAgICBzZWFyY2ggd2lsbCBnbyBvbiB0byB0aGUgc291cmNlIHNldCB0byBnZXQgdGhlIHZhbHVlLgorICAgIFZhbHVlIGZyb20gc291cmNlIGFyZSBjb3B5LW9uLXdyaXRlLiBpLmUuIGFueSB0cnkgdG8KKyAgICBtb2RpZnkgb25lIG9mIHRoZW0gd2lsbCBlbmQgdXAgcHV0dGluZyB0aGUgbW9kaWZpZWQgdmFsdWUKKyAgICBpbiB0aGUgZGVzdGluYXRpb24gc2V0LgorICAgICIiIgorICAgIHJldHVybiBzb3VyY2UuY3JlYXRlQ29weSgpCisKK2RlZiBpbml0VmFyKHZhciwgZCk6CisgICAgIiIiTm9uLWRlc3RydWN0aXZlIHZhciBpbml0IGZvciBkYXRhIHN0cnVjdHVyZSIiIgorICAgIGQuaW5pdFZhcih2YXIpCisKKworZGVmIHNldFZhcih2YXIsIHZhbHVlLCBkKToKKyAgICAiIiJTZXQgYSB2YXJpYWJsZSB0byBhIGdpdmVuIHZhbHVlIiIiCisgICAgZC5zZXRWYXIodmFyLCB2YWx1ZSkKKworCitkZWYgZ2V0VmFyKHZhciwgZCwgZXhwID0gRmFsc2UpOgorICAgICIiIkdldHMgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUiIiIKKyAgICByZXR1cm4gZC5nZXRWYXIodmFyLCBleHApCisKKworZGVmIHJlbmFtZVZhcihrZXksIG5ld2tleSwgZCk6CisgICAgIiIiUmVuYW1lcyBhIHZhcmlhYmxlIGZyb20ga2V5IHRvIG5ld2tleSIiIgorICAgIGQucmVuYW1lVmFyKGtleSwgbmV3a2V5KQorCitkZWYgZGVsVmFyKHZhciwgZCk6CisgICAgIiIiUmVtb3ZlcyBhIHZhcmlhYmxlIGZyb20gdGhlIGRhdGEgc2V0IiIiCisgICAgZC5kZWxWYXIodmFyKQorCitkZWYgYXBwZW5kVmFyKHZhciwgdmFsdWUsIGQpOgorICAgICIiIkFwcGVuZCBhZGRpdGlvbmFsIHZhbHVlIHRvIGEgdmFyaWFibGUiIiIKKyAgICBkLmFwcGVuZFZhcih2YXIsIHZhbHVlKQorCitkZWYgc2V0VmFyRmxhZyh2YXIsIGZsYWcsIGZsYWd2YWx1ZSwgZCk6CisgICAgIiIiU2V0IGEgZmxhZyBmb3IgYSBnaXZlbiB2YXJpYWJsZSB0byBhIGdpdmVuIHZhbHVlIiIiCisgICAgZC5zZXRWYXJGbGFnKHZhciwgZmxhZywgZmxhZ3ZhbHVlKQorCitkZWYgZ2V0VmFyRmxhZyh2YXIsIGZsYWcsIGQpOgorICAgICIiIkdldHMgZ2l2ZW4gZmxhZyBmcm9tIGdpdmVuIHZhciIiIgorICAgIHJldHVybiBkLmdldFZhckZsYWcodmFyLCBmbGFnKQorCitkZWYgZGVsVmFyRmxhZyh2YXIsIGZsYWcsIGQpOgorICAgICIiIlJlbW92ZXMgYSBnaXZlbiBmbGFnIGZyb20gdGhlIHZhcmlhYmxlJ3MgZmxhZ3MiIiIKKyAgICBkLmRlbFZhckZsYWcodmFyLCBmbGFnKQorCitkZWYgc2V0VmFyRmxhZ3ModmFyLCBmbGFncywgZCk6CisgICAgIiIiU2V0IHRoZSBmbGFncyBmb3IgYSBnaXZlbiB2YXJpYWJsZQorCisgICAgTm90ZToKKyAgICAgICAgc2V0VmFyRmxhZ3Mgd2lsbCBub3QgY2xlYXIgcHJldmlvdXMKKyAgICAgICAgZmxhZ3MuIFRoaW5rIG9mIHRoaXMgbWV0aG9kIGFzCisgICAgICAgIGFkZFZhckZsYWdzCisgICAgIiIiCisgICAgZC5zZXRWYXJGbGFncyh2YXIsIGZsYWdzKQorCitkZWYgZ2V0VmFyRmxhZ3ModmFyLCBkKToKKyAgICAiIiJHZXRzIGEgdmFyaWFibGUncyBmbGFncyIiIgorICAgIHJldHVybiBkLmdldFZhckZsYWdzKHZhcikKKworZGVmIGRlbFZhckZsYWdzKHZhciwgZCk6CisgICAgIiIiUmVtb3ZlcyBhIHZhcmlhYmxlJ3MgZmxhZ3MiIiIKKyAgICBkLmRlbFZhckZsYWdzKHZhcikKKworZGVmIGtleXMoZCk6CisgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBrZXlzIGluIGQiIiIKKyAgICByZXR1cm4gZC5rZXlzKCkKKworCitfX2V4cGFuZF92YXJfcmVnZXhwX18gPSByZS5jb21waWxlKHIiXCR7W157fV0rfSIpCitfX2V4cGFuZF9weXRob25fcmVnZXhwX18gPSByZS5jb21waWxlKHIiXCR7QC4rP30iKQorCitkZWYgZXhwYW5kKHMsIGQsIHZhcm5hbWUgPSBOb25lKToKKyAgICAiIiJWYXJpYWJsZSBleHBhbnNpb24gdXNpbmcgdGhlIGRhdGEgc3RvcmUiIiIKKyAgICByZXR1cm4gZC5leHBhbmQocywgdmFybmFtZSkKKworZGVmIGV4cGFuZEtleXMoYWx0ZXJkYXRhLCByZWFkZGF0YSA9IE5vbmUpOgorICAgIGlmIHJlYWRkYXRhID09IE5vbmU6CisgICAgICAgIHJlYWRkYXRhID0gYWx0ZXJkYXRhCisKKyAgICB0b2RvbGlzdCA9IHt9CisgICAgZm9yIGtleSBpbiBhbHRlcmRhdGE6CisgICAgICAgIGlmIG5vdCAnJHsnIGluIGtleToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgZWtleSA9IGV4cGFuZChrZXksIHJlYWRkYXRhKQorICAgICAgICBpZiBrZXkgPT0gZWtleToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHRvZG9saXN0W2tleV0gPSBla2V5CisKKyAgICAjIFRoZXNlIHR3byBmb3IgbG9vcHMgYXJlIHNwbGl0IGZvciBwZXJmb3JtYW5jZSB0byBtYXhpbWlzZSB0aGUKKyAgICAjIHVzZWZ1bG5lc3Mgb2YgdGhlIGV4cGFuZCBjYWNoZQorICAgIGZvciBrZXkgaW4gc29ydGVkKHRvZG9saXN0KToKKyAgICAgICAgZWtleSA9IHRvZG9saXN0W2tleV0KKyAgICAgICAgbmV3dmFsID0gYWx0ZXJkYXRhLmdldFZhcihla2V5LCBGYWxzZSkKKyAgICAgICAgaWYgbmV3dmFsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdmFsID0gYWx0ZXJkYXRhLmdldFZhcihrZXksIEZhbHNlKQorICAgICAgICAgICAgaWYgdmFsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGJiLndhcm4oIlZhcmlhYmxlIGtleSAlcyAoJXMpIHJlcGxhY2VzIG9yaWdpbmFsIGtleSAlcyAoJXMpLiIgJSAoa2V5LCB2YWwsIGVrZXksIG5ld3ZhbCkpCisgICAgICAgIGFsdGVyZGF0YS5yZW5hbWVWYXIoa2V5LCBla2V5KQorCitkZWYgaW5oZXJpdEZyb21PUyhkLCBzYXZlZGVudiwgcGVybWl0dGVkKToKKyAgICAiIiJJbmhlcml0IHZhcmlhYmxlcyBmcm9tIHRoZSBpbml0aWFsIGVudmlyb25tZW50LiIiIgorICAgIGV4cG9ydGxpc3QgPSBiYi51dGlscy5wcmVzZXJ2ZWRfZW52dmFyc19leHBvcnRlZCgpCisgICAgZm9yIHMgaW4gc2F2ZWRlbnYua2V5cygpOgorICAgICAgICBpZiBzIGluIHBlcm1pdHRlZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkLnNldFZhcihzLCBzYXZlZGVudi5nZXRWYXIocywgVHJ1ZSksIG9wID0gJ2Zyb20gZW52JykKKyAgICAgICAgICAgICAgICBpZiBzIGluIGV4cG9ydGxpc3Q6CisgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyRmxhZyhzLCAiZXhwb3J0IiwgVHJ1ZSwgb3AgPSAnYXV0byBlbnYgZXhwb3J0JykKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCitkZWYgZW1pdF92YXIodmFyLCBvPXN5cy5fX3N0ZG91dF9fLCBkID0gaW5pdCgpLCBhbGw9RmFsc2UpOgorICAgICIiIkVtaXQgYSB2YXJpYWJsZSB0byBiZSBzb3VyY2VkIGJ5IGEgc2hlbGwuIiIiCisgICAgaWYgZC5nZXRWYXJGbGFnKHZhciwgInB5dGhvbiIpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGV4cG9ydCA9IGQuZ2V0VmFyRmxhZyh2YXIsICJleHBvcnQiKQorICAgIHVuZXhwb3J0ID0gZC5nZXRWYXJGbGFnKHZhciwgInVuZXhwb3J0IikKKyAgICBmdW5jID0gZC5nZXRWYXJGbGFnKHZhciwgImZ1bmMiKQorICAgIGlmIG5vdCBhbGwgYW5kIG5vdCBleHBvcnQgYW5kIG5vdCB1bmV4cG9ydCBhbmQgbm90IGZ1bmM6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgdHJ5OgorICAgICAgICBpZiBhbGw6CisgICAgICAgICAgICBvdmFsID0gZC5nZXRWYXIodmFyLCBGYWxzZSkKKyAgICAgICAgdmFsID0gZC5nZXRWYXIodmFyLCBUcnVlKQorICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIGJiLmJ1aWxkLkZ1bmNGYWlsZWQpOgorICAgICAgICByYWlzZQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICBvLndyaXRlKCcjIGV4cGFuc2lvbiBvZiAlcyB0aHJldyAlczogJXNcbicgJSAodmFyLCBleGMuX19jbGFzc19fLl9fbmFtZV9fLCBzdHIoZXhjKSkpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgYWxsOgorICAgICAgICBkLnZhcmhpc3RvcnkuZW1pdCh2YXIsIG92YWwsIHZhbCwgbywgZCkKKworICAgIGlmICh2YXIuZmluZCgiLSIpICE9IC0xIG9yIHZhci5maW5kKCIuIikgIT0gLTEgb3IgdmFyLmZpbmQoJ3snKSAhPSAtMSBvciB2YXIuZmluZCgnfScpICE9IC0xIG9yIHZhci5maW5kKCcrJykgIT0gLTEpIGFuZCBub3QgYWxsOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHZhckV4cGFuZGVkID0gZC5leHBhbmQodmFyKQorCisgICAgaWYgdW5leHBvcnQ6CisgICAgICAgIG8ud3JpdGUoJ3Vuc2V0ICVzXG4nICUgdmFyRXhwYW5kZWQpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgdmFsIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgdmFsID0gc3RyKHZhbCkKKworICAgIGlmIHZhckV4cGFuZGVkLnN0YXJ0c3dpdGgoIkJBU0hfRlVOQ18iKToKKyAgICAgICAgdmFyRXhwYW5kZWQgPSB2YXJFeHBhbmRlZFsxMDotMl0KKyAgICAgICAgdmFsID0gdmFsWzM6XSAjIFN0cmlwIG9mZiAiKCkgIgorICAgICAgICBvLndyaXRlKCIlcygpICVzXG4iICUgKHZhckV4cGFuZGVkLCB2YWwpKQorICAgICAgICBvLndyaXRlKCJleHBvcnQgLWYgJXNcbiIgJSAodmFyRXhwYW5kZWQpKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgaWYgZnVuYzoKKyAgICAgICAgIyBOT1RFOiBzaG91bGQgcHJvYmFibHkgY2hlY2sgZm9yIHVuYmFsYW5jZWQge30gd2l0aGluIHRoZSB2YXIKKyAgICAgICAgby53cml0ZSgiJXMoKSB7XG4lc1xufVxuIiAlICh2YXJFeHBhbmRlZCwgdmFsKSkKKyAgICAgICAgcmV0dXJuIDEKKworICAgIGlmIGV4cG9ydDoKKyAgICAgICAgby53cml0ZSgnZXhwb3J0ICcpCisKKyAgICAjIGlmIHdlJ3JlIGdvaW5nIHRvIG91dHB1dCB0aGlzIHdpdGhpbiBkb3VibGVxdW90ZXMsCisgICAgIyB0byBhIHNoZWxsLCB3ZSBuZWVkIHRvIGVzY2FwZSB0aGUgcXVvdGVzIGluIHRoZSB2YXIKKyAgICBhbHRlciA9IHJlLnN1YignIicsICdcXCInLCB2YWwpCisgICAgYWx0ZXIgPSByZS5zdWIoJ1xuJywgJyBcXFxuJywgYWx0ZXIpCisgICAgYWx0ZXIgPSByZS5zdWIoJ1xcJCcsICdcXFxcJCcsIGFsdGVyKQorICAgIG8ud3JpdGUoJyVzPSIlcyJcbicgJSAodmFyRXhwYW5kZWQsIGFsdGVyKSkKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIGVtaXRfZW52KG89c3lzLl9fc3Rkb3V0X18sIGQgPSBpbml0KCksIGFsbD1GYWxzZSk6CisgICAgIiIiRW1pdHMgYWxsIGl0ZW1zIGluIHRoZSBkYXRhIHN0b3JlIGluIGEgZm9ybWF0IHN1Y2ggdGhhdCBpdCBjYW4gYmUgc291cmNlZCBieSBhIHNoZWxsLiIiIgorCisgICAgaXNmdW5jID0gbGFtYmRhIGtleTogYm9vbChkLmdldFZhckZsYWcoa2V5LCAiZnVuYyIpKQorICAgIGtleXMgPSBzb3J0ZWQoKGtleSBmb3Iga2V5IGluIGQua2V5cygpIGlmIG5vdCBrZXkuc3RhcnRzd2l0aCgiX18iKSksIGtleT1pc2Z1bmMpCisgICAgZ3JvdXBlZCA9IGdyb3VwYnkoa2V5cywgaXNmdW5jKQorICAgIGZvciBpc2Z1bmMsIGtleXMgaW4gZ3JvdXBlZDoKKyAgICAgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICAgICAgZW1pdF92YXIoa2V5LCBvLCBkLCBhbGwgYW5kIG5vdCBpc2Z1bmMpIGFuZCBvLndyaXRlKCdcbicpCisKK2RlZiBleHBvcnRlZF9rZXlzKGQpOgorICAgIHJldHVybiAoa2V5IGZvciBrZXkgaW4gZC5rZXlzKCkgaWYgbm90IGtleS5zdGFydHN3aXRoKCdfXycpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhckZsYWcoa2V5LCAnZXhwb3J0JykgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBkLmdldFZhckZsYWcoa2V5LCAndW5leHBvcnQnKSkKKworZGVmIGV4cG9ydGVkX3ZhcnMoZCk6CisgICAgZm9yIGtleSBpbiBleHBvcnRlZF9rZXlzKGQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKGtleSwgVHJ1ZSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHlpZWxkIGtleSwgc3RyKHZhbHVlKQorCitkZWYgZW1pdF9mdW5jKGZ1bmMsIG89c3lzLl9fc3Rkb3V0X18sIGQgPSBpbml0KCkpOgorICAgICIiIkVtaXRzIGFsbCBpdGVtcyBpbiB0aGUgZGF0YSBzdG9yZSBpbiBhIGZvcm1hdCBzdWNoIHRoYXQgaXQgY2FuIGJlIHNvdXJjZWQgYnkgYSBzaGVsbC4iIiIKKworICAgIGtleXMgPSAoa2V5IGZvciBrZXkgaW4gZC5rZXlzKCkgaWYgbm90IGtleS5zdGFydHN3aXRoKCJfXyIpIGFuZCBub3QgZC5nZXRWYXJGbGFnKGtleSwgImZ1bmMiKSkKKyAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgIGVtaXRfdmFyKGtleSwgbywgZCwgRmFsc2UpCisKKyAgICBvLndyaXRlKCdcbicpCisgICAgZW1pdF92YXIoZnVuYywgbywgZCwgRmFsc2UpIGFuZCBvLndyaXRlKCdcbicpCisgICAgbmV3ZGVwcyA9IGJiLmNvZGVwYXJzZXIuU2hlbGxQYXJzZXIoZnVuYywgbG9nZ2VyKS5wYXJzZV9zaGVsbChkLmdldFZhcihmdW5jLCBUcnVlKSkKKyAgICBuZXdkZXBzIHw9IHNldCgoZC5nZXRWYXJGbGFnKGZ1bmMsICJ2YXJkZXBzIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgc2VlbiA9IHNldCgpCisgICAgd2hpbGUgbmV3ZGVwczoKKyAgICAgICAgZGVwcyA9IG5ld2RlcHMKKyAgICAgICAgc2VlbiB8PSBkZXBzCisgICAgICAgIG5ld2RlcHMgPSBzZXQoKQorICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICBpZiBkLmdldFZhckZsYWcoZGVwLCAiZnVuYyIpIGFuZCBub3QgZC5nZXRWYXJGbGFnKGRlcCwgInB5dGhvbiIpOgorICAgICAgICAgICAgICAgZW1pdF92YXIoZGVwLCBvLCBkLCBGYWxzZSkgYW5kIG8ud3JpdGUoJ1xuJykKKyAgICAgICAgICAgICAgIG5ld2RlcHMgfD0gIGJiLmNvZGVwYXJzZXIuU2hlbGxQYXJzZXIoZGVwLCBsb2dnZXIpLnBhcnNlX3NoZWxsKGQuZ2V0VmFyKGRlcCwgVHJ1ZSkpCisgICAgICAgICAgICAgICBuZXdkZXBzIHw9IHNldCgoZC5nZXRWYXJGbGFnKGRlcCwgInZhcmRlcHMiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICAgICAgbmV3ZGVwcyAtPSBzZWVuCisKK19mdW5jdGlvbmZtdCA9ICIiIgorZGVmIHtmdW5jdGlvbn0oZCk6Cit7Ym9keX0iIiIKKworZGVmIGVtaXRfZnVuY19weXRob24oZnVuYywgbz1zeXMuX19zdGRvdXRfXywgZCA9IGluaXQoKSk6CisgICAgIiIiRW1pdHMgYWxsIGl0ZW1zIGluIHRoZSBkYXRhIHN0b3JlIGluIGEgZm9ybWF0IHN1Y2ggdGhhdCBpdCBjYW4gYmUgc291cmNlZCBieSBhIHNoZWxsLiIiIgorCisgICAgZGVmIHdyaXRlX2Z1bmMoZnVuYywgbywgY2FsbCA9IEZhbHNlKToKKyAgICAgICAgYm9keSA9IGQuZ2V0VmFyKGZ1bmMsIFRydWUpCisgICAgICAgIGlmIG5vdCBib2R5LnN0YXJ0c3dpdGgoImRlZiIpOgorICAgICAgICAgICAgYm9keSA9IF9mdW5jdGlvbmZtdC5mb3JtYXQoZnVuY3Rpb249ZnVuYywgYm9keT1ib2R5KQorCisgICAgICAgIG8ud3JpdGUoYm9keS5zdHJpcCgpICsgIlxuXG4iKQorICAgICAgICBpZiBjYWxsOgorICAgICAgICAgICAgby53cml0ZShmdW5jICsgIihkKSIgKyAiXG5cbiIpCisKKyAgICB3cml0ZV9mdW5jKGZ1bmMsIG8sIFRydWUpCisgICAgcHAgPSBiYi5jb2RlcGFyc2VyLlB5dGhvblBhcnNlcihmdW5jLCBsb2dnZXIpCisgICAgcHAucGFyc2VfcHl0aG9uKGQuZ2V0VmFyKGZ1bmMsIFRydWUpKQorICAgIG5ld2RlcHMgPSBwcC5leGVjcworICAgIG5ld2RlcHMgfD0gc2V0KChkLmdldFZhckZsYWcoZnVuYywgInZhcmRlcHMiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICBzZWVuID0gc2V0KCkKKyAgICB3aGlsZSBuZXdkZXBzOgorICAgICAgICBkZXBzID0gbmV3ZGVwcworICAgICAgICBzZWVuIHw9IGRlcHMKKyAgICAgICAgbmV3ZGVwcyA9IHNldCgpCisgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgIGlmIGQuZ2V0VmFyRmxhZyhkZXAsICJmdW5jIikgYW5kIGQuZ2V0VmFyRmxhZyhkZXAsICJweXRob24iKToKKyAgICAgICAgICAgICAgIHdyaXRlX2Z1bmMoZGVwLCBvKQorICAgICAgICAgICAgICAgcHAgPSBiYi5jb2RlcGFyc2VyLlB5dGhvblBhcnNlcihkZXAsIGxvZ2dlcikKKyAgICAgICAgICAgICAgIHBwLnBhcnNlX3B5dGhvbihkLmdldFZhcihkZXAsIFRydWUpKQorICAgICAgICAgICAgICAgbmV3ZGVwcyB8PSBwcC5leGVjcworICAgICAgICAgICAgICAgbmV3ZGVwcyB8PSBzZXQoKGQuZ2V0VmFyRmxhZyhkZXAsICJ2YXJkZXBzIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgIG5ld2RlcHMgLT0gc2VlbgorCitkZWYgdXBkYXRlX2RhdGEoZCk6CisgICAgIiIiUGVyZm9ybXMgZmluYWwgc3RlcHMgdXBvbiB0aGUgZGF0YXN0b3JlLCBpbmNsdWRpbmcgYXBwbGljYXRpb24gb2Ygb3ZlcnJpZGVzIiIiCisgICAgZC5maW5hbGl6ZShwYXJlbnQgPSBUcnVlKQorCitkZWYgYnVpbGRfZGVwZW5kZW5jaWVzKGtleSwga2V5cywgc2hlbGxkZXBzLCB2YXJmbGFnc2V4Y2wsIGQpOgorICAgIGRlcHMgPSBzZXQoKQorICAgIHRyeToKKyAgICAgICAgaWYga2V5Wy0xXSA9PSAnXSc6CisgICAgICAgICAgICB2ZiA9IGtleVs6LTFdLnNwbGl0KCdbJykKKyAgICAgICAgICAgIHZhbHVlID0gZC5nZXRWYXJGbGFnKHZmWzBdLCB2ZlsxXSwgRmFsc2UpCisgICAgICAgICAgICBwYXJzZXIgPSBkLmV4cGFuZFdpdGhSZWZzKHZhbHVlLCBrZXkpCisgICAgICAgICAgICBkZXBzIHw9IHBhcnNlci5yZWZlcmVuY2VzCisgICAgICAgICAgICBkZXBzID0gZGVwcyB8IChrZXlzICYgcGFyc2VyLmV4ZWNzKQorICAgICAgICAgICAgcmV0dXJuIGRlcHMsIHZhbHVlCisgICAgICAgIHZhcmZsYWdzID0gZC5nZXRWYXJGbGFncyhrZXksIFsidmFyZGVwcyIsICJ2YXJkZXB2YWx1ZSIsICJ2YXJkZXBzZXhjbHVkZSIsICJ2YXJkZXB2YWx1ZWV4Y2x1ZGUiLCAicG9zdGZ1bmNzIiwgInByZWZ1bmNzIl0pIG9yIHt9CisgICAgICAgIHZhcmRlcHMgPSB2YXJmbGFncy5nZXQoInZhcmRlcHMiKQorICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKGtleSwgRmFsc2UpCisKKyAgICAgICAgZGVmIGhhbmRsZV9jb250YWlucyh2YWx1ZSwgY29udGFpbnMsIGQpOgorICAgICAgICAgICAgbmV3dmFsdWUgPSAiIgorICAgICAgICAgICAgZm9yIGsgaW4gc29ydGVkKGNvbnRhaW5zKToKKyAgICAgICAgICAgICAgICBsID0gKGQuZ2V0VmFyKGssIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgZm9yIHdvcmQgaW4gc29ydGVkKGNvbnRhaW5zW2tdKToKKyAgICAgICAgICAgICAgICAgICAgaWYgd29yZCBpbiBsOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3dmFsdWUgKz0gIlxuJXN7JXN9ID0gU2V0IiAlICAoaywgd29yZCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3ZhbHVlICs9ICJcbiVzeyVzfSA9IFVuc2V0IiAlICAoaywgd29yZCkKKyAgICAgICAgICAgIGlmIG5vdCBuZXd2YWx1ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3dmFsdWUKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSArIG5ld3ZhbHVlCisKKyAgICAgICAgaWYgInZhcmRlcHZhbHVlIiBpbiB2YXJmbGFnczoKKyAgICAgICAgICAgdmFsdWUgPSB2YXJmbGFncy5nZXQoInZhcmRlcHZhbHVlIikKKyAgICAgICAgZWxpZiB2YXJmbGFncy5nZXQoImZ1bmMiKToKKyAgICAgICAgICAgIGlmIHZhcmZsYWdzLmdldCgicHl0aG9uIik6CisgICAgICAgICAgICAgICAgcGFyc2VkdmFyID0gZC5leHBhbmRXaXRoUmVmcyh2YWx1ZSwga2V5KQorICAgICAgICAgICAgICAgIHBhcnNlciA9IGJiLmNvZGVwYXJzZXIuUHl0aG9uUGFyc2VyKGtleSwgbG9nZ2VyKQorICAgICAgICAgICAgICAgIGlmIHBhcnNlZHZhci52YWx1ZSBhbmQgIlx0IiBpbiBwYXJzZWR2YXIudmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJWYXJpYWJsZSAlcyBjb250YWlucyB0YWJzLCBwbGVhc2UgcmVtb3ZlIHRoZXNlICglcykiICUgKGtleSwgZC5nZXRWYXIoIkZJTEUiLCBUcnVlKSkpCisgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX3B5dGhvbihwYXJzZWR2YXIudmFsdWUpCisgICAgICAgICAgICAgICAgZGVwcyA9IGRlcHMgfCBwYXJzZXIucmVmZXJlbmNlcworICAgICAgICAgICAgICAgIHZhbHVlID0gaGFuZGxlX2NvbnRhaW5zKHZhbHVlLCBwYXJzZXIuY29udGFpbnMsIGQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhcnNlZHZhciA9IGQuZXhwYW5kV2l0aFJlZnModmFsdWUsIGtleSkKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBiYi5jb2RlcGFyc2VyLlNoZWxsUGFyc2VyKGtleSwgbG9nZ2VyKQorICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9zaGVsbChwYXJzZWR2YXIudmFsdWUpCisgICAgICAgICAgICAgICAgZGVwcyA9IGRlcHMgfCBzaGVsbGRlcHMKKyAgICAgICAgICAgIGlmIHZhcmRlcHMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBwYXJzZXIubG9nLmZsdXNoKCkKKyAgICAgICAgICAgIGlmICJwcmVmdW5jcyIgaW4gdmFyZmxhZ3M6CisgICAgICAgICAgICAgICAgZGVwcyA9IGRlcHMgfCBzZXQodmFyZmxhZ3NbInByZWZ1bmNzIl0uc3BsaXQoKSkKKyAgICAgICAgICAgIGlmICJwb3N0ZnVuY3MiIGluIHZhcmZsYWdzOgorICAgICAgICAgICAgICAgIGRlcHMgPSBkZXBzIHwgc2V0KHZhcmZsYWdzWyJwb3N0ZnVuY3MiXS5zcGxpdCgpKQorICAgICAgICAgICAgZGVwcyA9IGRlcHMgfCBwYXJzZWR2YXIucmVmZXJlbmNlcworICAgICAgICAgICAgZGVwcyA9IGRlcHMgfCAoa2V5cyAmIHBhcnNlci5leGVjcykgfCAoa2V5cyAmIHBhcnNlZHZhci5leGVjcykKKyAgICAgICAgICAgIHZhbHVlID0gaGFuZGxlX2NvbnRhaW5zKHZhbHVlLCBwYXJzZWR2YXIuY29udGFpbnMsIGQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXJzZXIgPSBkLmV4cGFuZFdpdGhSZWZzKHZhbHVlLCBrZXkpCisgICAgICAgICAgICBkZXBzIHw9IHBhcnNlci5yZWZlcmVuY2VzCisgICAgICAgICAgICBkZXBzID0gZGVwcyB8IChrZXlzICYgcGFyc2VyLmV4ZWNzKQorICAgICAgICAgICAgdmFsdWUgPSBoYW5kbGVfY29udGFpbnModmFsdWUsIHBhcnNlci5jb250YWlucywgZCkKKworICAgICAgICBpZiAidmFyZGVwdmFsdWVleGNsdWRlIiBpbiB2YXJmbGFnczoKKyAgICAgICAgICAgIGV4Y2x1ZGUgPSB2YXJmbGFncy5nZXQoInZhcmRlcHZhbHVlZXhjbHVkZSIpCisgICAgICAgICAgICBmb3IgZXhjbCBpbiBleGNsdWRlLnNwbGl0KCd8Jyk6CisgICAgICAgICAgICAgICAgaWYgZXhjbDoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKGV4Y2wsICcnKQorCisgICAgICAgICMgQWRkIHZhcmZsYWdzLCBhc3N1bWluZyBhbiBleGNsdXNpb24gbGlzdCBpcyBzZXQKKyAgICAgICAgaWYgdmFyZmxhZ3NleGNsOgorICAgICAgICAgICAgdmFyZmRlcHMgPSBbXQorICAgICAgICAgICAgZm9yIGYgaW4gdmFyZmxhZ3M6CisgICAgICAgICAgICAgICAgaWYgZiBub3QgaW4gdmFyZmxhZ3NleGNsOgorICAgICAgICAgICAgICAgICAgICB2YXJmZGVwcy5hcHBlbmQoJyVzWyVzXScgJSAoa2V5LCBmKSkKKyAgICAgICAgICAgIGlmIHZhcmZkZXBzOgorICAgICAgICAgICAgICAgIGRlcHMgfD0gc2V0KHZhcmZkZXBzKQorCisgICAgICAgIGRlcHMgfD0gc2V0KCh2YXJkZXBzIG9yICIiKS5zcGxpdCgpKQorICAgICAgICBkZXBzIC09IHNldCh2YXJmbGFncy5nZXQoInZhcmRlcHNleGNsdWRlIiwgIiIpLnNwbGl0KCkpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICByYWlzZSBiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yKGtleSwgTm9uZSwgZSkKKyAgICByZXR1cm4gZGVwcywgdmFsdWUKKyAgICAjYmIubm90ZSgiVmFyaWFibGUgJXMgcmVmZXJlbmNlcyAlcyBhbmQgY2FsbHMgJXMiICUgKGtleSwgc3RyKGRlcHMpLCBzdHIoZXhlY3MpKSkKKyAgICAjZC5zZXRWYXJGbGFnKGtleSwgInZhcmRlcHMiLCBkZXBzKQorCitkZWYgZ2VuZXJhdGVfZGVwZW5kZW5jaWVzKGQpOgorCisgICAga2V5cyA9IHNldChrZXkgZm9yIGtleSBpbiBkIGlmIG5vdCBrZXkuc3RhcnRzd2l0aCgiX18iKSkKKyAgICBzaGVsbGRlcHMgPSBzZXQoa2V5IGZvciBrZXkgaW4gZC5nZXRWYXIoIl9fZXhwb3J0bGlzdCIsIEZhbHNlKSBpZiBkLmdldFZhckZsYWcoa2V5LCAiZXhwb3J0IikgYW5kIG5vdCBkLmdldFZhckZsYWcoa2V5LCAidW5leHBvcnQiKSkKKyAgICB2YXJmbGFnc2V4Y2wgPSBkLmdldFZhcignQkJfU0lHTkFUVVJFX0VYQ0xVREVfRkxBR1MnLCBUcnVlKQorCisgICAgZGVwcyA9IHt9CisgICAgdmFsdWVzID0ge30KKworICAgIHRhc2tsaXN0ID0gZC5nZXRWYXIoJ19fQkJUQVNLUycsIEZhbHNlKSBvciBbXQorICAgIGZvciB0YXNrIGluIHRhc2tsaXN0OgorICAgICAgICBkZXBzW3Rhc2tdLCB2YWx1ZXNbdGFza10gPSBidWlsZF9kZXBlbmRlbmNpZXModGFzaywga2V5cywgc2hlbGxkZXBzLCB2YXJmbGFnc2V4Y2wsIGQpCisgICAgICAgIG5ld2RlcHMgPSBkZXBzW3Rhc2tdCisgICAgICAgIHNlZW4gPSBzZXQoKQorICAgICAgICB3aGlsZSBuZXdkZXBzOgorICAgICAgICAgICAgbmV4dGRlcHMgPSBuZXdkZXBzCisgICAgICAgICAgICBzZWVuIHw9IG5leHRkZXBzCisgICAgICAgICAgICBuZXdkZXBzID0gc2V0KCkKKyAgICAgICAgICAgIGZvciBkZXAgaW4gbmV4dGRlcHM6CisgICAgICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICBkZXBzW2RlcF0sIHZhbHVlc1tkZXBdID0gYnVpbGRfZGVwZW5kZW5jaWVzKGRlcCwga2V5cywgc2hlbGxkZXBzLCB2YXJmbGFnc2V4Y2wsIGQpCisgICAgICAgICAgICAgICAgbmV3ZGVwcyB8PSAgZGVwc1tkZXBdCisgICAgICAgICAgICBuZXdkZXBzIC09IHNlZW4KKyAgICAgICAgI3ByaW50ICJGb3IgJXM6ICVzIiAlICh0YXNrLCBzdHIoZGVwc1t0YXNrXSkpCisgICAgcmV0dXJuIHRhc2tsaXN0LCBkZXBzLCB2YWx1ZXMKKworZGVmIGluaGVyaXRzX2NsYXNzKGtsYXNzLCBkKToKKyAgICB2YWwgPSBkLmdldFZhcignX19pbmhlcml0X2NhY2hlJywgRmFsc2UpIG9yIFtdCisgICAgbmVlZGxlID0gb3MucGF0aC5qb2luKCdjbGFzc2VzJywgJyVzLmJiY2xhc3MnICUga2xhc3MpCisgICAgZm9yIHYgaW4gdmFsOgorICAgICAgICBpZiB2LmVuZHN3aXRoKG5lZWRsZSk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9kYXRhX3NtYXJ0LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9kYXRhX3NtYXJ0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YjRlZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhdGFfc21hcnQucHkKQEAgLTAsMCArMSw5NDIgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgU21hcnQgRGljdGlvbmFyeSBJbXBsZW1lbnRhdGlvbgorCitGdW5jdGlvbnMgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGRhdGEgc3RydWN0dXJlIHVzZWQgYnkgdGhlCitCaXRCYWtlIGJ1aWxkIHRvb2xzLgorCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgIFNlYiBGcmFua2VuZ3VsCisjIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiAgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBVbGkgTHVja2FzCisjIENvcHlyaWdodCAoQykgMjAwNSAgICAgICAgUk9BRCBHbWJICisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIyBCYXNlZCBvbiBmdW5jdGlvbnMgZnJvbSB0aGUgYmFzZSBiYiBtb2R1bGUsIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCisKK2ltcG9ydCBjb3B5LCByZSwgc3lzLCB0cmFjZWJhY2sKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE11dGFibGVNYXBwaW5nCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGhhc2hsaWIKK2ltcG9ydCBiYiwgYmIuY29kZXBhcnNlcgorZnJvbSBiYiAgIGltcG9ydCB1dGlscworZnJvbSBiYi5DT1cgIGltcG9ydCBDT1dEaWN0QmFzZQorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5EYXRhIikKKworX19zZXR2YXJfa2V5d29yZF9fID0gWyJfYXBwZW5kIiwgIl9wcmVwZW5kIiwgIl9yZW1vdmUiXQorX19zZXR2YXJfcmVnZXhwX18gPSByZS5jb21waWxlKCcoP1A8YmFzZT4uKj8pKD9QPGtleXdvcmQ+X2FwcGVuZHxfcHJlcGVuZHxfcmVtb3ZlKShfKD9QPGFkZD4uKikpPyQnKQorX19leHBhbmRfdmFyX3JlZ2V4cF9fID0gcmUuY29tcGlsZShyIlwke1tee31AXG5cdCBdK30iKQorX19leHBhbmRfcHl0aG9uX3JlZ2V4cF9fID0gcmUuY29tcGlsZShyIlwke0AuKz99IikKKworZGVmIGluZmVyX2NhbGxlcl9kZXRhaWxzKGxvZ2luZm8sIHBhcmVudCA9IEZhbHNlLCB2YXJ2YWwgPSBUcnVlKToKKyAgICAiIiJTYXZlIHRoZSBjYWxsZXIgdGhlIHRyb3VibGUgb2Ygc3BlY2lmeWluZyBldmVyeXRoaW5nLiIiIgorICAgICMgU2F2ZSBlZmZvcnQuCisgICAgaWYgJ2lnbm9yZScgaW4gbG9naW5mbyBhbmQgbG9naW5mb1snaWdub3JlJ106CisgICAgICAgIHJldHVybgorICAgICMgSWYgbm90aGluZyB3YXMgcHJvdmlkZWQsIG1hcmsgdGhpcyBhcyBwb3NzaWJseSB1bm5lZWRlZC4KKyAgICBpZiBub3QgbG9naW5mbzoKKyAgICAgICAgbG9naW5mb1snaWdub3JlJ10gPSBUcnVlCisgICAgICAgIHJldHVybgorICAgICMgSW5mZXIgY2FsbGVyJ3MgbGlrZWx5IHZhbHVlcyBmb3IgdmFyaWFibGUgKHZhcikgYW5kIHZhbHVlICh2YWx1ZSksIAorICAgICMgdG8gcmVkdWNlIGNsdXR0ZXIgaW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUuCisgICAgYWJvdmUgPSBOb25lCisgICAgZGVmIHNldF9hYm92ZSgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHRiID0gc3lzLmV4Y19pbmZvKClbMl0KKyAgICAgICAgICAgIGlmIHBhcmVudDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdGIudGJfZnJhbWUuZl9iYWNrLmZfYmFjay5mX2JhY2sKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRiLnRiX2ZyYW1lLmZfYmFjay5mX2JhY2sKKworICAgIGlmIHZhcnZhbCBhbmQgKCd2YXJpYWJsZScgbm90IGluIGxvZ2luZm8gb3IgJ2RldGFpbCcgbm90IGluIGxvZ2luZm8pOgorICAgICAgICBpZiBub3QgYWJvdmU6CisgICAgICAgICAgICBhYm92ZSA9IHNldF9hYm92ZSgpCisgICAgICAgIGxjbHMgPSBhYm92ZS5mX2xvY2Fscy5pdGVtcygpCisgICAgICAgIGZvciBrLCB2IGluIGxjbHM6CisgICAgICAgICAgICBpZiBrID09ICd2YWx1ZScgYW5kICdkZXRhaWwnIG5vdCBpbiBsb2dpbmZvOgorICAgICAgICAgICAgICAgIGxvZ2luZm9bJ2RldGFpbCddID0gdgorICAgICAgICAgICAgaWYgayA9PSAndmFyJyBhbmQgJ3ZhcmlhYmxlJyBub3QgaW4gbG9naW5mbzoKKyAgICAgICAgICAgICAgICBsb2dpbmZvWyd2YXJpYWJsZSddID0gdgorICAgICMgSW5mZXIgZmlsZS9saW5lL2Z1bmN0aW9uIGZyb20gdHJhY2ViYWNrCisgICAgIyBEb24ndCB1c2UgdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soKSBzaW5jZSBpdCBmaWxscyB0aGUgbGluZSBjb250ZW50cyB3aGljaAorICAgICMgd2UgZG9uJ3QgbmVlZCBhbmQgdGhhdCBoaXRzIHN0YXQgc3lzY2FsbHMKKyAgICBpZiAnZmlsZScgbm90IGluIGxvZ2luZm86CisgICAgICAgIGlmIG5vdCBhYm92ZToKKyAgICAgICAgICAgIGFib3ZlID0gc2V0X2Fib3ZlKCkKKyAgICAgICAgZiA9IGFib3ZlLmZfYmFjaworICAgICAgICBsaW5lID0gZi5mX2xpbmVubworICAgICAgICBmaWxlID0gZi5mX2NvZGUuY29fZmlsZW5hbWUKKyAgICAgICAgZnVuYyA9IGYuZl9jb2RlLmNvX25hbWUKKyAgICAgICAgbG9naW5mb1snZmlsZSddID0gZmlsZQorICAgICAgICBsb2dpbmZvWydsaW5lJ10gPSBsaW5lCisgICAgICAgIGlmIGZ1bmMgbm90IGluIGxvZ2luZm86CisgICAgICAgICAgICBsb2dpbmZvWydmdW5jJ10gPSBmdW5jCisKK2NsYXNzIFZhcmlhYmxlUGFyc2U6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhcm5hbWUsIGQsIHZhbCA9IE5vbmUpOgorICAgICAgICBzZWxmLnZhcm5hbWUgPSB2YXJuYW1lCisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbAorCisgICAgICAgIHNlbGYucmVmZXJlbmNlcyA9IHNldCgpCisgICAgICAgIHNlbGYuZXhlY3MgPSBzZXQoKQorICAgICAgICBzZWxmLmNvbnRhaW5zID0ge30KKworICAgIGRlZiB2YXJfc3ViKHNlbGYsIG1hdGNoKToKKyAgICAgICAgICAgIGtleSA9IG1hdGNoLmdyb3VwKClbMjotMV0KKyAgICAgICAgICAgIGlmIHNlbGYudmFybmFtZSBhbmQga2V5OgorICAgICAgICAgICAgICAgIGlmIHNlbGYudmFybmFtZSA9PSBrZXk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigidmFyaWFibGUgJXMgcmVmZXJlbmNlcyBpdHNlbGYhIiAlIHNlbGYudmFybmFtZSkKKyAgICAgICAgICAgIGlmIGtleSBpbiBzZWxmLmQuZXhwYW5kX2NhY2hlOgorICAgICAgICAgICAgICAgIHZhcnBhcnNlID0gc2VsZi5kLmV4cGFuZF9jYWNoZVtrZXldCisgICAgICAgICAgICAgICAgdmFyID0gdmFycGFyc2UudmFsdWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmFyID0gc2VsZi5kLmdldFZhckZsYWcoa2V5LCAiX2NvbnRlbnQiLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5yZWZlcmVuY2VzLmFkZChrZXkpCisgICAgICAgICAgICBpZiB2YXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2guZ3JvdXAoKQorCisgICAgZGVmIHB5dGhvbl9zdWIoc2VsZiwgbWF0Y2gpOgorICAgICAgICAgICAgY29kZSA9IG1hdGNoLmdyb3VwKClbMzotMV0KKyAgICAgICAgICAgIGNvZGVvYmogPSBjb21waWxlKGNvZGUuc3RyaXAoKSwgc2VsZi52YXJuYW1lIG9yICI8ZXhwYW5zaW9uPiIsICJldmFsIikKKworICAgICAgICAgICAgcGFyc2VyID0gYmIuY29kZXBhcnNlci5QeXRob25QYXJzZXIoc2VsZi52YXJuYW1lLCBsb2dnZXIpCisgICAgICAgICAgICBwYXJzZXIucGFyc2VfcHl0aG9uKGNvZGUpCisgICAgICAgICAgICBpZiBzZWxmLnZhcm5hbWU6CisgICAgICAgICAgICAgICAgdmFyZGVwcyA9IHNlbGYuZC5nZXRWYXJGbGFnKHNlbGYudmFybmFtZSwgInZhcmRlcHMiLCBUcnVlKQorICAgICAgICAgICAgICAgIGlmIHZhcmRlcHMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VyLmxvZy5mbHVzaCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhcnNlci5sb2cuZmx1c2goKQorICAgICAgICAgICAgc2VsZi5yZWZlcmVuY2VzIHw9IHBhcnNlci5yZWZlcmVuY2VzCisgICAgICAgICAgICBzZWxmLmV4ZWNzIHw9IHBhcnNlci5leGVjcworCisgICAgICAgICAgICBmb3IgayBpbiBwYXJzZXIuY29udGFpbnM6CisgICAgICAgICAgICAgICAgaWYgayBub3QgaW4gc2VsZi5jb250YWluczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250YWluc1trXSA9IHBhcnNlci5jb250YWluc1trXS5jb3B5KCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRhaW5zW2tdLnVwZGF0ZShwYXJzZXIuY29udGFpbnNba10pCisgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmJldHRlcl9ldmFsKGNvZGVvYmosIERhdGFDb250ZXh0KHNlbGYuZCkpCisgICAgICAgICAgICByZXR1cm4gc3RyKHZhbHVlKQorCisKK2NsYXNzIERhdGFDb250ZXh0KGRpY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRhZGF0YSwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLm1ldGFkYXRhID0gbWV0YWRhdGEKKyAgICAgICAgZGljdC5fX2luaXRfXyhzZWxmLCAqKmt3YXJncykKKyAgICAgICAgc2VsZlsnZCddID0gbWV0YWRhdGEKKworICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgorICAgICAgICB2YWx1ZSA9IHNlbGYubWV0YWRhdGEuZ2V0VmFyKGtleSwgVHJ1ZSkKKyAgICAgICAgaWYgdmFsdWUgaXMgTm9uZSBvciBzZWxmLm1ldGFkYXRhLmdldFZhckZsYWcoa2V5LCAnZnVuYycpOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3Ioa2V5KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisKK2NsYXNzIEV4cGFuc2lvbkVycm9yKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhcm5hbWUsIGV4cHJlc3Npb24sIGV4Y2VwdGlvbik6CisgICAgICAgIHNlbGYuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24KKyAgICAgICAgc2VsZi52YXJpYWJsZW5hbWUgPSB2YXJuYW1lCisgICAgICAgIHNlbGYuZXhjZXB0aW9uID0gZXhjZXB0aW9uCisgICAgICAgIGlmIHZhcm5hbWU6CisgICAgICAgICAgICBpZiBleHByZXNzaW9uOgorICAgICAgICAgICAgICAgIHNlbGYubXNnID0gIkZhaWx1cmUgZXhwYW5kaW5nIHZhcmlhYmxlICVzLCBleHByZXNzaW9uIHdhcyAlcyB3aGljaCB0cmlnZ2VyZWQgZXhjZXB0aW9uICVzOiAlcyIgJSAodmFybmFtZSwgZXhwcmVzc2lvbiwgdHlwZShleGNlcHRpb24pLl9fbmFtZV9fLCBleGNlcHRpb24pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYubXNnID0gIkZhaWx1cmUgZXhwYW5kaW5nIHZhcmlhYmxlICVzOiAlczogJXMiICUgKHZhcm5hbWUsIHR5cGUoZXhjZXB0aW9uKS5fX25hbWVfXywgZXhjZXB0aW9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5tc2cgPSAiRmFpbHVyZSBleHBhbmRpbmcgZXhwcmVzc2lvbiAlcyB3aGljaCB0cmlnZ2VyZWQgZXhjZXB0aW9uICVzOiAlcyIgJSAoZXhwcmVzc2lvbiwgdHlwZShleGNlcHRpb24pLl9fbmFtZV9fLCBleGNlcHRpb24pCisgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBzZWxmLm1zZykKKyAgICAgICAgc2VsZi5hcmdzID0gKHZhcm5hbWUsIGV4cHJlc3Npb24sIGV4Y2VwdGlvbikKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubXNnCisKK2NsYXNzIEluY2x1ZGVIaXN0b3J5KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCA9IE5vbmUsIGZpbGVuYW1lID0gJ1tUT1AgTEVWRUxdJyk6CisgICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50CisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAgICBzZWxmLmNoaWxkcmVuID0gW10KKyAgICAgICAgc2VsZi5jdXJyZW50ID0gc2VsZgorCisgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgIG5ldyA9IEluY2x1ZGVIaXN0b3J5KHNlbGYucGFyZW50LCBzZWxmLmZpbGVuYW1lKQorICAgICAgICBmb3IgYyBpbiBzZWxmLmNoaWxkcmVuOgorICAgICAgICAgICAgbmV3LmNoaWxkcmVuLmFwcGVuZChjKQorICAgICAgICByZXR1cm4gbmV3CisKKyAgICBkZWYgaW5jbHVkZShzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIG5ld2ZpbGUgPSBJbmNsdWRlSGlzdG9yeShzZWxmLmN1cnJlbnQsIGZpbGVuYW1lKQorICAgICAgICBzZWxmLmN1cnJlbnQuY2hpbGRyZW4uYXBwZW5kKG5ld2ZpbGUpCisgICAgICAgIHNlbGYuY3VycmVudCA9IG5ld2ZpbGUKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBhLCBiLCBjKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50LnBhcmVudDoKKyAgICAgICAgICAgIHNlbGYuY3VycmVudCA9IHNlbGYuY3VycmVudC5wYXJlbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLndhcm4oIkluY2x1ZGUgbG9nOiBUcmllZCB0byBmaW5pc2ggJyVzJyBhdCB0b3AgbGV2ZWwuIiAlIGZpbGVuYW1lKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBlbWl0KHNlbGYsIG8sIGxldmVsID0gMCk6CisgICAgICAgICIiIkVtaXQgYW4gaW5jbHVkZSBoaXN0b3J5IGZpbGUsIGFuZCBpdHMgY2hpbGRyZW4uIiIiCisgICAgICAgIGlmIGxldmVsOgorICAgICAgICAgICAgc3BhY2VzID0gIiAgIiAqIChsZXZlbCAtIDEpCisgICAgICAgICAgICBvLndyaXRlKCIjICVzJXMiICUgKHNwYWNlcywgc2VsZi5maWxlbmFtZSkpCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5jaGlsZHJlbikgPiAwOgorICAgICAgICAgICAgICAgIG8ud3JpdGUoIiBpbmNsdWRlczoiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgby53cml0ZSgiI1xuIyBJTkNMVURFIEhJU1RPUlk6XG4jIikKKyAgICAgICAgbGV2ZWwgPSBsZXZlbCArIDEKKyAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46CisgICAgICAgICAgICBvLndyaXRlKCJcbiIpCisgICAgICAgICAgICBjaGlsZC5lbWl0KG8sIGxldmVsKQorCitjbGFzcyBWYXJpYWJsZUhpc3Rvcnkob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YXJvb3QpOgorICAgICAgICBzZWxmLmRhdGFyb290ID0gZGF0YXJvb3QKKyAgICAgICAgc2VsZi52YXJpYWJsZXMgPSBDT1dEaWN0QmFzZS5jb3B5KCkKKworICAgIGRlZiBjb3B5KHNlbGYpOgorICAgICAgICBuZXcgPSBWYXJpYWJsZUhpc3Rvcnkoc2VsZi5kYXRhcm9vdCkKKyAgICAgICAgbmV3LnZhcmlhYmxlcyA9IHNlbGYudmFyaWFibGVzLmNvcHkoKQorICAgICAgICByZXR1cm4gbmV3CisKKyAgICBkZWYgcmVjb3JkKHNlbGYsICprd29ubHksICoqbG9naW5mbyk6CisgICAgICAgIGlmIG5vdCBzZWxmLmRhdGFyb290Ll90cmFja2luZzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBsZW4oa3dvbmx5KSA+IDA6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKKyAgICAgICAgaW5mZXJfY2FsbGVyX2RldGFpbHMobG9naW5mbywgcGFyZW50ID0gVHJ1ZSkKKyAgICAgICAgaWYgJ2lnbm9yZScgaW4gbG9naW5mbyBhbmQgbG9naW5mb1snaWdub3JlJ106CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgJ29wJyBub3QgaW4gbG9naW5mbyBvciBub3QgbG9naW5mb1snb3AnXToKKyAgICAgICAgICAgIGxvZ2luZm9bJ29wJ10gPSAnc2V0JworICAgICAgICBpZiAnZGV0YWlsJyBpbiBsb2dpbmZvOgorICAgICAgICAgICAgbG9naW5mb1snZGV0YWlsJ10gPSBzdHIobG9naW5mb1snZGV0YWlsJ10pCisgICAgICAgIGlmICd2YXJpYWJsZScgbm90IGluIGxvZ2luZm8gb3IgJ2ZpbGUnIG5vdCBpbiBsb2dpbmZvOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicmVjb3JkKCkgbWlzc2luZyB2YXJpYWJsZSBvciBmaWxlLiIpCisgICAgICAgIHZhciA9IGxvZ2luZm9bJ3ZhcmlhYmxlJ10KKworICAgICAgICBpZiB2YXIgbm90IGluIHNlbGYudmFyaWFibGVzOgorICAgICAgICAgICAgc2VsZi52YXJpYWJsZXNbdmFyXSA9IFtdCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYudmFyaWFibGVzW3Zhcl0sIGxpc3QpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmICdub2R1cHMnIGluIGxvZ2luZm8gYW5kIGxvZ2luZm8gaW4gc2VsZi52YXJpYWJsZXNbdmFyXToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLnZhcmlhYmxlc1t2YXJdLmFwcGVuZChsb2dpbmZvLmNvcHkoKSkKKworICAgIGRlZiB2YXJpYWJsZShzZWxmLCB2YXIpOgorICAgICAgICBpZiB2YXIgaW4gc2VsZi52YXJpYWJsZXM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi52YXJpYWJsZXNbdmFyXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICBkZWYgZW1pdChzZWxmLCB2YXIsIG92YWwsIHZhbCwgbywgZCk6CisgICAgICAgIGhpc3RvcnkgPSBzZWxmLnZhcmlhYmxlKHZhcikKKworICAgICAgICAjIEFwcGVuZCBvdmVycmlkZSBoaXN0b3J5CisgICAgICAgIGlmIHZhciBpbiBkLm92ZXJyaWRlZGF0YToKKyAgICAgICAgICAgIGZvciAociwgb3ZlcnJpZGUpIGluIGQub3ZlcnJpZGVkYXRhW3Zhcl06CisgICAgICAgICAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYudmFyaWFibGUocik6CisgICAgICAgICAgICAgICAgICAgIGxvZ2luZm8gPSBldmVudC5jb3B5KCkKKyAgICAgICAgICAgICAgICAgICAgaWYgJ2ZsYWcnIGluIGxvZ2luZm8gYW5kIG5vdCBsb2dpbmZvWydmbGFnJ10uc3RhcnRzd2l0aCgiXyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgbG9naW5mb1sndmFyaWFibGUnXSA9IHZhcgorICAgICAgICAgICAgICAgICAgICBsb2dpbmZvWydvcCddID0gJ292ZXJyaWRlWyVzXTolcycgJSAob3ZlcnJpZGUsIGxvZ2luZm9bJ29wJ10pCisgICAgICAgICAgICAgICAgICAgIGhpc3RvcnkuYXBwZW5kKGxvZ2luZm8pCisKKyAgICAgICAgY29tbWVudFZhbCA9IHJlLnN1YignXG4nLCAnXG4jJywgc3RyKG92YWwpKQorICAgICAgICBpZiBoaXN0b3J5OgorICAgICAgICAgICAgaWYgbGVuKGhpc3RvcnkpID09IDE6CisgICAgICAgICAgICAgICAgby53cml0ZSgiI1xuIyAkJXNcbiIgJSB2YXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG8ud3JpdGUoIiNcbiMgJCVzIFslZCBvcGVyYXRpb25zXVxuIiAlICh2YXIsIGxlbihoaXN0b3J5KSkpCisgICAgICAgICAgICBmb3IgZXZlbnQgaW4gaGlzdG9yeToKKyAgICAgICAgICAgICAgICAjIG8ud3JpdGUoIiMgJXNcbiIgJSBzdHIoZXZlbnQpKQorICAgICAgICAgICAgICAgIGlmICdmdW5jJyBpbiBldmVudDoKKyAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSBoYXZlIGEgZnVuY3Rpb24gbGlzdGVkLCB0aGlzIGlzIGludGVybmFsCisgICAgICAgICAgICAgICAgICAgICMgY29kZSwgbm90IGFuIG9wZXJhdGlvbiBpbiBhIGNvbmZpZyBmaWxlLCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICMgZnVsbCBwYXRoIGlzIGRpc3RyYWN0aW5nLgorICAgICAgICAgICAgICAgICAgICBldmVudFsnZmlsZSddID0gcmUuc3ViKCcuKi8nLCAnJywgZXZlbnRbJ2ZpbGUnXSkKKyAgICAgICAgICAgICAgICAgICAgZGlzcGxheV9mdW5jID0gJyBbJXNdJyAlIGV2ZW50WydmdW5jJ10KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5X2Z1bmMgPSAnJworICAgICAgICAgICAgICAgIGlmICdmbGFnJyBpbiBldmVudDoKKyAgICAgICAgICAgICAgICAgICAgZmxhZyA9ICdbJXNdICcgJSAoZXZlbnRbJ2ZsYWcnXSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmbGFnID0gJycKKyAgICAgICAgICAgICAgICBvLndyaXRlKCIjICAgJXMgJXM6JXMlc1xuIyAgICAgJXNcIiVzXCJcbiIgJSAoZXZlbnRbJ29wJ10sIGV2ZW50WydmaWxlJ10sIGV2ZW50WydsaW5lJ10sIGRpc3BsYXlfZnVuYywgZmxhZywgcmUuc3ViKCdcbicsICdcbiMgICAgICcsIGV2ZW50WydkZXRhaWwnXSkpKQorICAgICAgICAgICAgaWYgbGVuKGhpc3RvcnkpID4gMToKKyAgICAgICAgICAgICAgICBvLndyaXRlKCIjIHByZS1leHBhbnNpb24gdmFsdWU6XG4iKQorICAgICAgICAgICAgICAgIG8ud3JpdGUoJyMgICAiJXMiXG4nICUgKGNvbW1lbnRWYWwpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgby53cml0ZSgiI1xuIyAkJXNcbiMgICBbbm8gaGlzdG9yeSByZWNvcmRlZF1cbiNcbiIgJSB2YXIpCisgICAgICAgICAgICBvLndyaXRlKCcjICAgIiVzIlxuJyAlIChjb21tZW50VmFsKSkKKworICAgIGRlZiBnZXRfdmFyaWFibGVfZmlsZXMoc2VsZiwgdmFyKToKKyAgICAgICAgIiIiR2V0IHRoZSBmaWxlcyB3aGVyZSBvcGVyYXRpb25zIGFyZSBtYWRlIG9uIGEgdmFyaWFibGUiIiIKKyAgICAgICAgdmFyX2hpc3RvcnkgPSBzZWxmLnZhcmlhYmxlKHZhcikKKyAgICAgICAgZmlsZXMgPSBbXQorICAgICAgICBmb3IgZXZlbnQgaW4gdmFyX2hpc3Rvcnk6CisgICAgICAgICAgICBmaWxlcy5hcHBlbmQoZXZlbnRbJ2ZpbGUnXSkKKyAgICAgICAgcmV0dXJuIGZpbGVzCisKKyAgICBkZWYgZ2V0X3ZhcmlhYmxlX2xpbmVzKHNlbGYsIHZhciwgZik6CisgICAgICAgICIiIkdldCB0aGUgbGluZSB3aGVyZSBhIG9wZXJhdGlvbiBpcyBtYWRlIG9uIGEgdmFyaWFibGUgaW4gZmlsZSBmIiIiCisgICAgICAgIHZhcl9oaXN0b3J5ID0gc2VsZi52YXJpYWJsZSh2YXIpCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZm9yIGV2ZW50IGluIHZhcl9oaXN0b3J5OgorICAgICAgICAgICAgaWYgZj09IGV2ZW50WydmaWxlJ106CisgICAgICAgICAgICAgICAgbGluZSA9IGV2ZW50WydsaW5lJ10KKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgcmV0dXJuIGxpbmVzCisKKyAgICBkZWYgZ2V0X3ZhcmlhYmxlX2l0ZW1zX2ZpbGVzKHNlbGYsIHZhciwgZCk6CisgICAgICAgICIiIgorICAgICAgICBVc2UgdmFyaWFibGUgaGlzdG9yeSB0byBtYXAgaXRlbXMgYWRkZWQgdG8gYSBsaXN0IHZhcmlhYmxlIGFuZAorICAgICAgICB0aGUgZmlsZXMgaW4gd2hpY2ggdGhleSB3ZXJlIGFkZGVkLgorICAgICAgICAiIiIKKyAgICAgICAgaGlzdG9yeSA9IHNlbGYudmFyaWFibGUodmFyKQorICAgICAgICBmaW5hbGl0ZW1zID0gKGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKyAgICAgICAgZmlsZW1hcCA9IHt9CisgICAgICAgIGlzc2V0ID0gRmFsc2UKKyAgICAgICAgZm9yIGV2ZW50IGluIGhpc3Rvcnk6CisgICAgICAgICAgICBpZiAnZmxhZycgaW4gZXZlbnQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGV2ZW50WydvcCddID09ICdfcmVtb3ZlJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNzZXQgYW5kIGV2ZW50WydvcCddID09ICdzZXQ/JzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaXNzZXQgPSBUcnVlCisgICAgICAgICAgICBpdGVtcyA9IGQuZXhwYW5kKGV2ZW50WydkZXRhaWwnXSkuc3BsaXQoKQorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6CisgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGEgbGl0dGxlIGNydWRlIGJ1dCBpcyBiZWx0LWFuZC1icmFjZXMgdG8gYXZvaWQgdXMKKyAgICAgICAgICAgICAgICAjIGhhdmluZyB0byBoYW5kbGUgZXZlcnkgcG9zc2libGUgb3BlcmF0aW9uIHR5cGUgc3BlY2lmaWNhbGx5CisgICAgICAgICAgICAgICAgaWYgaXRlbSBpbiBmaW5hbGl0ZW1zIGFuZCBub3QgaXRlbSBpbiBmaWxlbWFwOgorICAgICAgICAgICAgICAgICAgICBmaWxlbWFwW2l0ZW1dID0gZXZlbnRbJ2ZpbGUnXQorICAgICAgICByZXR1cm4gZmlsZW1hcAorCisgICAgZGVmIGRlbF92YXJfaGlzdG9yeShzZWxmLCB2YXIsIGY9Tm9uZSwgbGluZT1Ob25lKToKKyAgICAgICAgIiIiSWYgZmlsZSBmIGFuZCBsaW5lIGFyZSBub3QgZ2l2ZW4sIHRoZSBlbnRpcmUgaGlzdG9yeSBvZiB2YXIgaXMgZGVsZXRlZCIiIgorICAgICAgICBpZiB2YXIgaW4gc2VsZi52YXJpYWJsZXM6CisgICAgICAgICAgICBpZiBmIGFuZCBsaW5lOgorICAgICAgICAgICAgICAgIHNlbGYudmFyaWFibGVzW3Zhcl0gPSBbIHggZm9yIHggaW4gc2VsZi52YXJpYWJsZXNbdmFyXSBpZiB4WydmaWxlJ10hPWYgYW5kIHhbJ2xpbmUnXSE9bGluZV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi52YXJpYWJsZXNbdmFyXSA9IFtdCisKK2NsYXNzIERhdGFTbWFydChNdXRhYmxlTWFwcGluZyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmRpY3QgPSB7fQorCisgICAgICAgIHNlbGYuaW5jaGlzdG9yeSA9IEluY2x1ZGVIaXN0b3J5KCkKKyAgICAgICAgc2VsZi52YXJoaXN0b3J5ID0gVmFyaWFibGVIaXN0b3J5KHNlbGYpCisgICAgICAgIHNlbGYuX3RyYWNraW5nID0gRmFsc2UKKworICAgICAgICBzZWxmLmV4cGFuZF9jYWNoZSA9IHt9CisKKyAgICAgICAgIyBjb29raWUgbW9uc3RlciB0cmlidXRlCisgICAgICAgICMgTmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdyaXRlcyB0byBvdmVycmlkZWRhdGEgYXMKKyAgICAgICAgIyBpdHMgb25seSBhIHNoYWxsb3cgY29weSwgY291bGQgaW5mbHVlbmNlIG90aGVyIGRhdGEgc3RvcmUKKyAgICAgICAgIyBjb3BpZXMhCisgICAgICAgIHNlbGYub3ZlcnJpZGVkYXRhID0ge30KKyAgICAgICAgc2VsZi5vdmVycmlkZXMgPSBOb25lCisgICAgICAgIHNlbGYub3ZlcnJpZGV2YXJzID0gc2V0KFsiT1ZFUlJJREVTIiwgIkZJTEUiXSkKKyAgICAgICAgc2VsZi5pbm92ZXJyaWRlID0gRmFsc2UKKworICAgIGRlZiBlbmFibGVUcmFja2luZyhzZWxmKToKKyAgICAgICAgc2VsZi5fdHJhY2tpbmcgPSBUcnVlCisKKyAgICBkZWYgZGlzYWJsZVRyYWNraW5nKHNlbGYpOgorICAgICAgICBzZWxmLl90cmFja2luZyA9IEZhbHNlCisKKyAgICBkZWYgZXhwYW5kV2l0aFJlZnMoc2VsZiwgcywgdmFybmFtZSk6CisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocywgYmFzZXN0cmluZyk6ICMgc2FuaXR5IGNoZWNrCisgICAgICAgICAgICByZXR1cm4gVmFyaWFibGVQYXJzZSh2YXJuYW1lLCBzZWxmLCBzKQorCisgICAgICAgIGlmIHZhcm5hbWUgYW5kIHZhcm5hbWUgaW4gc2VsZi5leHBhbmRfY2FjaGU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5leHBhbmRfY2FjaGVbdmFybmFtZV0KKworICAgICAgICB2YXJwYXJzZSA9IFZhcmlhYmxlUGFyc2UodmFybmFtZSwgc2VsZikKKworICAgICAgICB3aGlsZSBzLmZpbmQoJyR7JykgIT0gLTE6CisgICAgICAgICAgICBvbGRzID0gcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSBfX2V4cGFuZF92YXJfcmVnZXhwX18uc3ViKHZhcnBhcnNlLnZhcl9zdWIsIHMpCisgICAgICAgICAgICAgICAgcyA9IF9fZXhwYW5kX3B5dGhvbl9yZWdleHBfXy5zdWIodmFycGFyc2UucHl0aG9uX3N1YiwgcykKKyAgICAgICAgICAgICAgICBpZiBzID09IG9sZHM6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgRXhwYW5zaW9uRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5wYXJzZS5Ta2lwUmVjaXBlOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBleGNfY2xhc3MsIGV4YywgdGIgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4cGFuc2lvbkVycm9yLCBFeHBhbnNpb25FcnJvcih2YXJuYW1lLCBzLCBleGMpLCB0YgorCisgICAgICAgIHZhcnBhcnNlLnZhbHVlID0gcworCisgICAgICAgIGlmIHZhcm5hbWU6CisgICAgICAgICAgICBzZWxmLmV4cGFuZF9jYWNoZVt2YXJuYW1lXSA9IHZhcnBhcnNlCisKKyAgICAgICAgcmV0dXJuIHZhcnBhcnNlCisKKyAgICBkZWYgZXhwYW5kKHNlbGYsIHMsIHZhcm5hbWUgPSBOb25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZXhwYW5kV2l0aFJlZnMocywgdmFybmFtZSkudmFsdWUKKworICAgIGRlZiBmaW5hbGl6ZShzZWxmLCBwYXJlbnQgPSBGYWxzZSk6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIGludGVybmFsX2ZpbmFsaXplKHNlbGYsIHBhcmVudCA9IEZhbHNlKToKKyAgICAgICAgIiIiUGVyZm9ybXMgZmluYWwgc3RlcHMgdXBvbiB0aGUgZGF0YXN0b3JlLCBpbmNsdWRpbmcgYXBwbGljYXRpb24gb2Ygb3ZlcnJpZGVzIiIiCisgICAgICAgIHNlbGYub3ZlcnJpZGVzID0gTm9uZQorCisgICAgZGVmIG5lZWRfb3ZlcnJpZGVzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm92ZXJyaWRlcyBpcyBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5pbm92ZXJyaWRlOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5pbm92ZXJyaWRlID0gVHJ1ZQorICAgICAgICAgICAgIyBDYW4gZW5kIHVwIGhlcmUgcmVjdXJzaXZlbHkgc28gc2V0dXAgZHVtbXkgdmFsdWVzCisgICAgICAgICAgICBzZWxmLm92ZXJyaWRlcyA9IFtdCisgICAgICAgICAgICBzZWxmLm92ZXJyaWRlc3NldCA9IHNldCgpCisgICAgICAgICAgICBzZWxmLm92ZXJyaWRlcyA9IChzZWxmLmdldFZhcigiT1ZFUlJJREVTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCI6Iikgb3IgW10KKyAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVzc2V0ID0gc2V0KHNlbGYub3ZlcnJpZGVzKQorICAgICAgICAgICAgc2VsZi5pbm92ZXJyaWRlID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuZXhwYW5kX2NhY2hlID0ge30KKworICAgIGRlZiBpbml0VmFyKHNlbGYsIHZhcik6CisgICAgICAgIHNlbGYuZXhwYW5kX2NhY2hlID0ge30KKyAgICAgICAgaWYgbm90IHZhciBpbiBzZWxmLmRpY3Q6CisgICAgICAgICAgICBzZWxmLmRpY3RbdmFyXSA9IHt9CisKKyAgICBkZWYgX2ZpbmRWYXIoc2VsZiwgdmFyKToKKyAgICAgICAgZGVzdCA9IHNlbGYuZGljdAorICAgICAgICB3aGlsZSBkZXN0OgorICAgICAgICAgICAgaWYgdmFyIGluIGRlc3Q6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlc3RbdmFyXQorCisgICAgICAgICAgICBpZiAiX2RhdGEiIG5vdCBpbiBkZXN0OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBkZXN0ID0gZGVzdFsiX2RhdGEiXQorCisgICAgZGVmIF9tYWtlU2hhZG93Q29weShzZWxmLCB2YXIpOgorICAgICAgICBpZiB2YXIgaW4gc2VsZi5kaWN0OgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbG9jYWxfdmFyID0gc2VsZi5fZmluZFZhcih2YXIpCisKKyAgICAgICAgaWYgbG9jYWxfdmFyOgorICAgICAgICAgICAgc2VsZi5kaWN0W3Zhcl0gPSBjb3B5LmNvcHkobG9jYWxfdmFyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5pbml0VmFyKHZhcikKKworCisgICAgZGVmIHNldFZhcihzZWxmLCB2YXIsIHZhbHVlLCAqKmxvZ2luZm8pOgorICAgICAgICAjcHJpbnQoInZhcj0iICsgc3RyKHZhcikgKyAiICB2YWw9IiArIHN0cih2YWx1ZSkpCisgICAgICAgIHBhcnNpbmc9RmFsc2UKKyAgICAgICAgaWYgJ3BhcnNpbmcnIGluIGxvZ2luZm86CisgICAgICAgICAgICBwYXJzaW5nPVRydWUKKworICAgICAgICBpZiAnb3AnIG5vdCBpbiBsb2dpbmZvOgorICAgICAgICAgICAgbG9naW5mb1snb3AnXSA9ICJzZXQiCisgICAgICAgIHNlbGYuZXhwYW5kX2NhY2hlID0ge30KKyAgICAgICAgbWF0Y2ggID0gX19zZXR2YXJfcmVnZXhwX18ubWF0Y2godmFyKQorICAgICAgICBpZiBtYXRjaCBhbmQgbWF0Y2guZ3JvdXAoImtleXdvcmQiKSBpbiBfX3NldHZhcl9rZXl3b3JkX186CisgICAgICAgICAgICBiYXNlID0gbWF0Y2guZ3JvdXAoJ2Jhc2UnKQorICAgICAgICAgICAga2V5d29yZCA9IG1hdGNoLmdyb3VwKCJrZXl3b3JkIikKKyAgICAgICAgICAgIG92ZXJyaWRlID0gbWF0Y2guZ3JvdXAoJ2FkZCcpCisgICAgICAgICAgICBsID0gc2VsZi5nZXRWYXJGbGFnKGJhc2UsIGtleXdvcmQpIG9yIFtdCisgICAgICAgICAgICBsLmFwcGVuZChbdmFsdWUsIG92ZXJyaWRlXSkKKyAgICAgICAgICAgIHNlbGYuc2V0VmFyRmxhZyhiYXNlLCBrZXl3b3JkLCBsLCBpZ25vcmU9VHJ1ZSkKKyAgICAgICAgICAgICMgQW5kIGNhdXNlIHRoYXQgdG8gYmUgcmVjb3JkZWQ6CisgICAgICAgICAgICBsb2dpbmZvWydkZXRhaWwnXSA9IHZhbHVlCisgICAgICAgICAgICBsb2dpbmZvWyd2YXJpYWJsZSddID0gYmFzZQorICAgICAgICAgICAgaWYgb3ZlcnJpZGU6CisgICAgICAgICAgICAgICAgbG9naW5mb1snb3AnXSA9ICclc1slc10nICUgKGtleXdvcmQsIG92ZXJyaWRlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dpbmZvWydvcCddID0ga2V5d29yZAorICAgICAgICAgICAgc2VsZi52YXJoaXN0b3J5LnJlY29yZCgqKmxvZ2luZm8pCisgICAgICAgICAgICAjIHRvZG8gbWFrZSBzdXJlIGtleXdvcmQgaXMgbm90IF9fZG9jX18gb3IgX19tb2R1bGVfXworICAgICAgICAgICAgIyBwYXkgdGhlIGNvb2tpZSBtb25zdGVyCisKKyAgICAgICAgICAgICMgbW9yZSBjb29raWVzIGZvciB0aGUgY29va2llIG1vbnN0ZXIKKyAgICAgICAgICAgIGlmICdfJyBpbiB2YXI6CisgICAgICAgICAgICAgICAgc2VsZi5fc2V0dmFyX3VwZGF0ZV9vdmVycmlkZXMoYmFzZSwgKipsb2dpbmZvKQorCisKKyAgICAgICAgICAgIGlmIGJhc2UgaW4gc2VsZi5vdmVycmlkZXZhcnM6CisgICAgICAgICAgICAgICAgc2VsZi5vdmVycmlkZXZhcnMudXBkYXRlKHNlbGYuZXhwYW5kV2l0aFJlZnModmFsdWUsIHZhcikucmVmZXJlbmNlcykKKyAgICAgICAgICAgICAgICBzZWxmLmludGVybmFsX2ZpbmFsaXplKFRydWUpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3QgdmFyIGluIHNlbGYuZGljdDoKKyAgICAgICAgICAgIHNlbGYuX21ha2VTaGFkb3dDb3B5KHZhcikKKworICAgICAgICBpZiBub3QgcGFyc2luZzoKKyAgICAgICAgICAgIGlmICJfYXBwZW5kIiBpbiBzZWxmLmRpY3RbdmFyXToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5kaWN0W3Zhcl1bIl9hcHBlbmQiXQorICAgICAgICAgICAgaWYgIl9wcmVwZW5kIiBpbiBzZWxmLmRpY3RbdmFyXToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5kaWN0W3Zhcl1bIl9wcmVwZW5kIl0KKyAgICAgICAgICAgIGlmIHZhciBpbiBzZWxmLm92ZXJyaWRlZGF0YToKKyAgICAgICAgICAgICAgICBhY3RpdmUgPSBbXQorICAgICAgICAgICAgICAgIHNlbGYubmVlZF9vdmVycmlkZXMoKQorICAgICAgICAgICAgICAgIGZvciAociwgbykgaW4gc2VsZi5vdmVycmlkZWRhdGFbdmFyXToKKyAgICAgICAgICAgICAgICAgICAgaWYgbyBpbiBzZWxmLm92ZXJyaWRlc3NldDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZS5hcHBlbmQocikKKyAgICAgICAgICAgICAgICAgICAgZWxpZiAiXyIgaW4gbzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNldChvLnNwbGl0KCJfIikpLmlzc3Vic2V0KHNlbGYub3ZlcnJpZGVzc2V0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmUuYXBwZW5kKHIpCisgICAgICAgICAgICAgICAgZm9yIGEgaW4gYWN0aXZlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbFZhcihhKQorICAgICAgICAgICAgICAgIGRlbCBzZWxmLm92ZXJyaWRlZGF0YVt2YXJdCisKKyAgICAgICAgIyBtb3JlIGNvb2tpZXMgZm9yIHRoZSBjb29raWUgbW9uc3RlcgorICAgICAgICBpZiAnXycgaW4gdmFyOgorICAgICAgICAgICAgc2VsZi5fc2V0dmFyX3VwZGF0ZV9vdmVycmlkZXModmFyLCAqKmxvZ2luZm8pCisKKyAgICAgICAgIyBzZXR0aW5nIHZhcgorICAgICAgICBzZWxmLmRpY3RbdmFyXVsiX2NvbnRlbnQiXSA9IHZhbHVlCisgICAgICAgIHNlbGYudmFyaGlzdG9yeS5yZWNvcmQoKipsb2dpbmZvKQorCisgICAgICAgIGlmIHZhciBpbiBzZWxmLm92ZXJyaWRldmFyczoKKyAgICAgICAgICAgIHNlbGYub3ZlcnJpZGV2YXJzLnVwZGF0ZShzZWxmLmV4cGFuZFdpdGhSZWZzKHZhbHVlLCB2YXIpLnJlZmVyZW5jZXMpCisgICAgICAgICAgICBzZWxmLmludGVybmFsX2ZpbmFsaXplKFRydWUpCisKKyAgICBkZWYgX3NldHZhcl91cGRhdGVfb3ZlcnJpZGVzKHNlbGYsIHZhciwgKipsb2dpbmZvKToKKyAgICAgICAgIyBha2EgcGF5IHRoZSBjb29raWUgbW9uc3RlcgorICAgICAgICBvdmVycmlkZSA9IHZhclt2YXIucmZpbmQoJ18nKSsxOl0KKyAgICAgICAgc2hvcnR2YXIgPSB2YXJbOnZhci5yZmluZCgnXycpXQorICAgICAgICB3aGlsZSBvdmVycmlkZToKKyAgICAgICAgICAgIGlmIHNob3J0dmFyIG5vdCBpbiBzZWxmLm92ZXJyaWRlZGF0YToKKyAgICAgICAgICAgICAgICBzZWxmLm92ZXJyaWRlZGF0YVtzaG9ydHZhcl0gPSBbXQorICAgICAgICAgICAgaWYgW3Zhciwgb3ZlcnJpZGVdIG5vdCBpbiBzZWxmLm92ZXJyaWRlZGF0YVtzaG9ydHZhcl06CisgICAgICAgICAgICAgICAgIyBGb3JjZSBDb1cgYnkgcmVjcmVhdGluZyB0aGUgbGlzdCBmaXJzdAorICAgICAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVkYXRhW3Nob3J0dmFyXSA9IGxpc3Qoc2VsZi5vdmVycmlkZWRhdGFbc2hvcnR2YXJdKQorICAgICAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVkYXRhW3Nob3J0dmFyXS5hcHBlbmQoW3Zhciwgb3ZlcnJpZGVdKQorICAgICAgICAgICAgb3ZlcnJpZGUgPSBOb25lCisgICAgICAgICAgICBpZiAiXyIgaW4gc2hvcnR2YXI6CisgICAgICAgICAgICAgICAgb3ZlcnJpZGUgPSB2YXJbc2hvcnR2YXIucmZpbmQoJ18nKSsxOl0KKyAgICAgICAgICAgICAgICBzaG9ydHZhciA9IHZhcls6c2hvcnR2YXIucmZpbmQoJ18nKV0KKyAgICAgICAgICAgICAgICBpZiBsZW4oc2hvcnR2YXIpID09IDA6CisgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlID0gTm9uZQorCisgICAgZGVmIGdldFZhcihzZWxmLCB2YXIsIGV4cGFuZD1GYWxzZSwgbm93ZWFrZGVmYXVsdD1GYWxzZSwgcGFyc2luZz1GYWxzZSk6CisgICAgICAgIHJldHVybiBzZWxmLmdldFZhckZsYWcodmFyLCAiX2NvbnRlbnQiLCBleHBhbmQsIG5vd2Vha2RlZmF1bHQsIHBhcnNpbmcpCisKKyAgICBkZWYgcmVuYW1lVmFyKHNlbGYsIGtleSwgbmV3a2V5LCAqKmxvZ2luZm8pOgorICAgICAgICAiIiIKKyAgICAgICAgUmVuYW1lIHRoZSB2YXJpYWJsZSBrZXkgdG8gbmV3a2V5CisgICAgICAgICIiIgorICAgICAgICB2YWwgPSBzZWxmLmdldFZhcihrZXksIDAsIHBhcnNpbmc9VHJ1ZSkKKyAgICAgICAgaWYgdmFsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbG9naW5mb1sndmFyaWFibGUnXSA9IG5ld2tleQorICAgICAgICAgICAgbG9naW5mb1snb3AnXSA9ICdyZW5hbWUgZnJvbSAlcycgJSBrZXkKKyAgICAgICAgICAgIGxvZ2luZm9bJ2RldGFpbCddID0gdmFsCisgICAgICAgICAgICBzZWxmLnZhcmhpc3RvcnkucmVjb3JkKCoqbG9naW5mbykKKyAgICAgICAgICAgIHNlbGYuc2V0VmFyKG5ld2tleSwgdmFsLCBpZ25vcmU9VHJ1ZSwgcGFyc2luZz1UcnVlKQorCisgICAgICAgIGZvciBpIGluIChfX3NldHZhcl9rZXl3b3JkX18pOgorICAgICAgICAgICAgc3JjID0gc2VsZi5nZXRWYXJGbGFnKGtleSwgaSkKKyAgICAgICAgICAgIGlmIHNyYyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRlc3QgPSBzZWxmLmdldFZhckZsYWcobmV3a2V5LCBpKSBvciBbXQorICAgICAgICAgICAgZGVzdC5leHRlbmQoc3JjKQorICAgICAgICAgICAgc2VsZi5zZXRWYXJGbGFnKG5ld2tleSwgaSwgZGVzdCwgaWdub3JlPVRydWUpCisKKyAgICAgICAgaWYga2V5IGluIHNlbGYub3ZlcnJpZGVkYXRhOgorICAgICAgICAgICAgc2VsZi5vdmVycmlkZWRhdGFbbmV3a2V5XSA9IFtdCisgICAgICAgICAgICBmb3IgKHYsIG8pIGluIHNlbGYub3ZlcnJpZGVkYXRhW2tleV06CisgICAgICAgICAgICAgICAgc2VsZi5vdmVycmlkZWRhdGFbbmV3a2V5XS5hcHBlbmQoW3YucmVwbGFjZShrZXksIG5ld2tleSksIG9dKQorICAgICAgICAgICAgICAgIHNlbGYucmVuYW1lVmFyKHYsIHYucmVwbGFjZShrZXksIG5ld2tleSkpCisKKyAgICAgICAgaWYgJ18nIGluIG5ld2tleSBhbmQgdmFsIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zZXR2YXJfdXBkYXRlX292ZXJyaWRlcyhuZXdrZXksICoqbG9naW5mbykKKworICAgICAgICBsb2dpbmZvWyd2YXJpYWJsZSddID0ga2V5CisgICAgICAgIGxvZ2luZm9bJ29wJ10gPSAncmVuYW1lICh0byknCisgICAgICAgIGxvZ2luZm9bJ2RldGFpbCddID0gbmV3a2V5CisgICAgICAgIHNlbGYudmFyaGlzdG9yeS5yZWNvcmQoKipsb2dpbmZvKQorICAgICAgICBzZWxmLmRlbFZhcihrZXksIGlnbm9yZT1UcnVlKQorCisgICAgZGVmIGFwcGVuZFZhcihzZWxmLCB2YXIsIHZhbHVlLCAqKmxvZ2luZm8pOgorICAgICAgICBsb2dpbmZvWydvcCddID0gJ2FwcGVuZCcKKyAgICAgICAgc2VsZi52YXJoaXN0b3J5LnJlY29yZCgqKmxvZ2luZm8pCisgICAgICAgIHNlbGYuc2V0VmFyKHZhciArICJfYXBwZW5kIiwgdmFsdWUsIGlnbm9yZT1UcnVlLCBwYXJzaW5nPVRydWUpCisKKyAgICBkZWYgcHJlcGVuZFZhcihzZWxmLCB2YXIsIHZhbHVlLCAqKmxvZ2luZm8pOgorICAgICAgICBsb2dpbmZvWydvcCddID0gJ3ByZXBlbmQnCisgICAgICAgIHNlbGYudmFyaGlzdG9yeS5yZWNvcmQoKipsb2dpbmZvKQorICAgICAgICBzZWxmLnNldFZhcih2YXIgKyAiX3ByZXBlbmQiLCB2YWx1ZSwgaWdub3JlPVRydWUsIHBhcnNpbmc9VHJ1ZSkKKworICAgIGRlZiBkZWxWYXIoc2VsZiwgdmFyLCAqKmxvZ2luZm8pOgorICAgICAgICBsb2dpbmZvWydkZXRhaWwnXSA9ICIiCisgICAgICAgIGxvZ2luZm9bJ29wJ10gPSAnZGVsJworICAgICAgICBzZWxmLnZhcmhpc3RvcnkucmVjb3JkKCoqbG9naW5mbykKKyAgICAgICAgc2VsZi5leHBhbmRfY2FjaGUgPSB7fQorICAgICAgICBzZWxmLmRpY3RbdmFyXSA9IHt9CisgICAgICAgIGlmIHZhciBpbiBzZWxmLm92ZXJyaWRlZGF0YToKKyAgICAgICAgICAgIGRlbCBzZWxmLm92ZXJyaWRlZGF0YVt2YXJdCisgICAgICAgIGlmICdfJyBpbiB2YXI6CisgICAgICAgICAgICBvdmVycmlkZSA9IHZhclt2YXIucmZpbmQoJ18nKSsxOl0KKyAgICAgICAgICAgIHNob3J0dmFyID0gdmFyWzp2YXIucmZpbmQoJ18nKV0KKyAgICAgICAgICAgIHdoaWxlIG92ZXJyaWRlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2hvcnR2YXIgaW4gc2VsZi5vdmVycmlkZWRhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEZvcmNlIENvVyBieSByZWNyZWF0aW5nIHRoZSBsaXN0IGZpcnN0CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm92ZXJyaWRlZGF0YVtzaG9ydHZhcl0gPSBsaXN0KHNlbGYub3ZlcnJpZGVkYXRhW3Nob3J0dmFyXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVkYXRhW3Nob3J0dmFyXS5yZW1vdmUoW3Zhciwgb3ZlcnJpZGVdKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBvdmVycmlkZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiAiXyIgaW4gc2hvcnR2YXI6CisgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlID0gdmFyW3Nob3J0dmFyLnJmaW5kKCdfJykrMTpdCisgICAgICAgICAgICAgICAgICAgIHNob3J0dmFyID0gdmFyWzpzaG9ydHZhci5yZmluZCgnXycpXQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc2hvcnR2YXIpID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUgPSBOb25lCisKKyAgICBkZWYgc2V0VmFyRmxhZyhzZWxmLCB2YXIsIGZsYWcsIHZhbHVlLCAqKmxvZ2luZm8pOgorICAgICAgICBzZWxmLmV4cGFuZF9jYWNoZSA9IHt9CisgICAgICAgIGlmICdvcCcgbm90IGluIGxvZ2luZm86CisgICAgICAgICAgICBsb2dpbmZvWydvcCddID0gInNldCIKKyAgICAgICAgbG9naW5mb1snZmxhZyddID0gZmxhZworICAgICAgICBzZWxmLnZhcmhpc3RvcnkucmVjb3JkKCoqbG9naW5mbykKKyAgICAgICAgaWYgbm90IHZhciBpbiBzZWxmLmRpY3Q6CisgICAgICAgICAgICBzZWxmLl9tYWtlU2hhZG93Q29weSh2YXIpCisgICAgICAgIHNlbGYuZGljdFt2YXJdW2ZsYWddID0gdmFsdWUKKworICAgICAgICBpZiBmbGFnID09ICJfZGVmYXVsdHZhbCIgYW5kICdfJyBpbiB2YXI6CisgICAgICAgICAgICBzZWxmLl9zZXR2YXJfdXBkYXRlX292ZXJyaWRlcyh2YXIsICoqbG9naW5mbykKKworICAgICAgICBpZiBmbGFnID09ICJ1bmV4cG9ydCIgb3IgZmxhZyA9PSAiZXhwb3J0IjoKKyAgICAgICAgICAgIGlmIG5vdCAiX19leHBvcnRsaXN0IiBpbiBzZWxmLmRpY3Q6CisgICAgICAgICAgICAgICAgc2VsZi5fbWFrZVNoYWRvd0NvcHkoIl9fZXhwb3J0bGlzdCIpCisgICAgICAgICAgICBpZiBub3QgIl9jb250ZW50IiBpbiBzZWxmLmRpY3RbIl9fZXhwb3J0bGlzdCJdOgorICAgICAgICAgICAgICAgIHNlbGYuZGljdFsiX19leHBvcnRsaXN0Il1bIl9jb250ZW50Il0gPSBzZXQoKQorICAgICAgICAgICAgc2VsZi5kaWN0WyJfX2V4cG9ydGxpc3QiXVsiX2NvbnRlbnQiXS5hZGQodmFyKQorCisgICAgZGVmIGdldFZhckZsYWcoc2VsZiwgdmFyLCBmbGFnLCBleHBhbmQ9RmFsc2UsIG5vd2Vha2RlZmF1bHQ9RmFsc2UsIHBhcnNpbmc9RmFsc2UpOgorICAgICAgICBsb2NhbF92YXIgPSBzZWxmLl9maW5kVmFyKHZhcikKKyAgICAgICAgdmFsdWUgPSBOb25lCisgICAgICAgIGlmIGZsYWcgPT0gIl9jb250ZW50IiBhbmQgdmFyIGluIHNlbGYub3ZlcnJpZGVkYXRhIGFuZCBub3QgcGFyc2luZzoKKyAgICAgICAgICAgIG1hdGNoID0gRmFsc2UKKyAgICAgICAgICAgIGFjdGl2ZSA9IHt9CisgICAgICAgICAgICBzZWxmLm5lZWRfb3ZlcnJpZGVzKCkKKyAgICAgICAgICAgIGZvciAociwgbykgaW4gc2VsZi5vdmVycmlkZWRhdGFbdmFyXToKKyAgICAgICAgICAgICAgICAjIFdoYXQgYWJvdXQgZG91YmxlIG92ZXJyaWRlcyBib3RoIHdpdGggIl8iIGluIHRoZSBuYW1lPworICAgICAgICAgICAgICAgIGlmIG8gaW4gc2VsZi5vdmVycmlkZXNzZXQ6CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVtvXSA9IHIKKyAgICAgICAgICAgICAgICBlbGlmICJfIiBpbiBvOgorICAgICAgICAgICAgICAgICAgICBpZiBzZXQoby5zcGxpdCgiXyIpKS5pc3N1YnNldChzZWxmLm92ZXJyaWRlc3NldCk6CisgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVbb10gPSByCisKKyAgICAgICAgICAgIG1vZCA9IFRydWUKKyAgICAgICAgICAgIHdoaWxlIG1vZDoKKyAgICAgICAgICAgICAgICBtb2QgPSBGYWxzZQorICAgICAgICAgICAgICAgIGZvciBvIGluIHNlbGYub3ZlcnJpZGVzOgorICAgICAgICAgICAgICAgICAgICBmb3IgYSBpbiBhY3RpdmUuY29weSgpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYS5lbmRzd2l0aCgiXyIgKyBvKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gYWN0aXZlW2FdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGFjdGl2ZVthXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVthLnJlcGxhY2UoIl8iICsgbywgIiIpXSA9IHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGEgPT0gbzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGFjdGl2ZVthXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBhY3RpdmVbYV0KKyAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZi5nZXRWYXIobWF0Y2gpCisKKyAgICAgICAgaWYgbG9jYWxfdmFyIGlzIG5vdCBOb25lIGFuZCB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgZmxhZyBpbiBsb2NhbF92YXI6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBjb3B5LmNvcHkobG9jYWxfdmFyW2ZsYWddKQorICAgICAgICAgICAgZWxpZiBmbGFnID09ICJfY29udGVudCIgYW5kICJfZGVmYXVsdHZhbCIgaW4gbG9jYWxfdmFyIGFuZCBub3Qgbm93ZWFrZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvcHkuY29weShsb2NhbF92YXJbIl9kZWZhdWx0dmFsIl0pCisKKworICAgICAgICBpZiBmbGFnID09ICJfY29udGVudCIgYW5kIGxvY2FsX3ZhciBpcyBub3QgTm9uZSBhbmQgIl9hcHBlbmQiIGluIGxvY2FsX3ZhciBhbmQgbm90IHBhcnNpbmc6CisgICAgICAgICAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICAgICAgICAgdmFsdWUgPSAiIgorICAgICAgICAgICAgc2VsZi5uZWVkX292ZXJyaWRlcygpCisgICAgICAgICAgICBmb3IgKHIsIG8pIGluIGxvY2FsX3ZhclsiX2FwcGVuZCJdOgorICAgICAgICAgICAgICAgIG1hdGNoID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIG86CisgICAgICAgICAgICAgICAgICAgIGZvciBvMiBpbiBvLnNwbGl0KCJfIik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbzIgaW4gc2VsZi5vdmVycmlkZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBGYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSArIHIKKworICAgICAgICBpZiBmbGFnID09ICJfY29udGVudCIgYW5kIGxvY2FsX3ZhciBpcyBub3QgTm9uZSBhbmQgIl9wcmVwZW5kIiBpbiBsb2NhbF92YXIgYW5kIG5vdCBwYXJzaW5nOgorICAgICAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gIiIKKyAgICAgICAgICAgIHNlbGYubmVlZF9vdmVycmlkZXMoKQorICAgICAgICAgICAgZm9yIChyLCBvKSBpbiBsb2NhbF92YXJbIl9wcmVwZW5kIl06CisKKyAgICAgICAgICAgICAgICBtYXRjaCA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBvOgorICAgICAgICAgICAgICAgICAgICBmb3IgbzIgaW4gby5zcGxpdCgiXyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG8yIGluIHNlbGYub3ZlcnJpZGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gRmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gciArIHZhbHVlCisKKyAgICAgICAgaWYgZXhwYW5kIGFuZCB2YWx1ZToKKyAgICAgICAgICAgICMgT25seSBnZXR2YXIgKGZsYWcgPT0gX2NvbnRlbnQpIGhpdHMgdGhlIGV4cGFuZCBjYWNoZQorICAgICAgICAgICAgY2FjaGVuYW1lID0gTm9uZQorICAgICAgICAgICAgaWYgZmxhZyA9PSAiX2NvbnRlbnQiOgorICAgICAgICAgICAgICAgIGNhY2hlbmFtZSA9IHZhcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjYWNoZW5hbWUgPSB2YXIgKyAiWyIgKyBmbGFnICsgIl0iCisgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuZXhwYW5kKHZhbHVlLCBjYWNoZW5hbWUpCisKKyAgICAgICAgaWYgdmFsdWUgYW5kIGZsYWcgPT0gIl9jb250ZW50IiBhbmQgbG9jYWxfdmFyIGlzIG5vdCBOb25lIGFuZCAiX3JlbW92ZSIgaW4gbG9jYWxfdmFyOgorICAgICAgICAgICAgcmVtb3ZlcyA9IFtdCisgICAgICAgICAgICBzZWxmLm5lZWRfb3ZlcnJpZGVzKCkKKyAgICAgICAgICAgIGZvciAociwgbykgaW4gbG9jYWxfdmFyWyJfcmVtb3ZlIl06CisgICAgICAgICAgICAgICAgbWF0Y2ggPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgbzoKKyAgICAgICAgICAgICAgICAgICAgZm9yIG8yIGluIG8uc3BsaXQoIl8iKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvMiBpbiBzZWxmLm92ZXJyaWRlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IEZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgICAgICByZW1vdmVzLmV4dGVuZChzZWxmLmV4cGFuZChyKS5zcGxpdCgpKQorCisgICAgICAgICAgICBmaWx0ZXJlZCA9IGZpbHRlcihsYW1iZGEgdjogdiBub3QgaW4gcmVtb3ZlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnNwbGl0KCkpCisgICAgICAgICAgICB2YWx1ZSA9ICIgIi5qb2luKGZpbHRlcmVkKQorICAgICAgICAgICAgaWYgZXhwYW5kIGFuZCB2YXIgaW4gc2VsZi5leHBhbmRfY2FjaGU6CisgICAgICAgICAgICAgICAgICMgV2UgbmVlZCB0byBlbnN1cmUgdGhlIGV4cGFuZCBjYWNoZSBoYXMgdGhlIGNvcnJlY3QgdmFsdWUKKyAgICAgICAgICAgICAgICAgIyBmbGFnID09ICJfY29udGVudCIgaGVyZQorICAgICAgICAgICAgICAgIHNlbGYuZXhwYW5kX2NhY2hlW3Zhcl0udmFsdWUgPSB2YWx1ZQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiBkZWxWYXJGbGFnKHNlbGYsIHZhciwgZmxhZywgKipsb2dpbmZvKToKKyAgICAgICAgc2VsZi5leHBhbmRfY2FjaGUgPSB7fQorICAgICAgICBsb2NhbF92YXIgPSBzZWxmLl9maW5kVmFyKHZhcikKKyAgICAgICAgaWYgbm90IGxvY2FsX3ZhcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBub3QgdmFyIGluIHNlbGYuZGljdDoKKyAgICAgICAgICAgIHNlbGYuX21ha2VTaGFkb3dDb3B5KHZhcikKKworICAgICAgICBpZiB2YXIgaW4gc2VsZi5kaWN0IGFuZCBmbGFnIGluIHNlbGYuZGljdFt2YXJdOgorICAgICAgICAgICAgbG9naW5mb1snZGV0YWlsJ10gPSAiIgorICAgICAgICAgICAgbG9naW5mb1snb3AnXSA9ICdkZWxGbGFnJworICAgICAgICAgICAgbG9naW5mb1snZmxhZyddID0gZmxhZworICAgICAgICAgICAgc2VsZi52YXJoaXN0b3J5LnJlY29yZCgqKmxvZ2luZm8pCisKKyAgICAgICAgICAgIGRlbCBzZWxmLmRpY3RbdmFyXVtmbGFnXQorCisgICAgZGVmIGFwcGVuZFZhckZsYWcoc2VsZiwgdmFyLCBmbGFnLCB2YWx1ZSwgKipsb2dpbmZvKToKKyAgICAgICAgbG9naW5mb1snb3AnXSA9ICdhcHBlbmQnCisgICAgICAgIGxvZ2luZm9bJ2ZsYWcnXSA9IGZsYWcKKyAgICAgICAgc2VsZi52YXJoaXN0b3J5LnJlY29yZCgqKmxvZ2luZm8pCisgICAgICAgIG5ld3ZhbHVlID0gKHNlbGYuZ2V0VmFyRmxhZyh2YXIsIGZsYWcsIEZhbHNlKSBvciAiIikgKyB2YWx1ZQorICAgICAgICBzZWxmLnNldFZhckZsYWcodmFyLCBmbGFnLCBuZXd2YWx1ZSwgaWdub3JlPVRydWUpCisKKyAgICBkZWYgcHJlcGVuZFZhckZsYWcoc2VsZiwgdmFyLCBmbGFnLCB2YWx1ZSwgKipsb2dpbmZvKToKKyAgICAgICAgbG9naW5mb1snb3AnXSA9ICdwcmVwZW5kJworICAgICAgICBsb2dpbmZvWydmbGFnJ10gPSBmbGFnCisgICAgICAgIHNlbGYudmFyaGlzdG9yeS5yZWNvcmQoKipsb2dpbmZvKQorICAgICAgICBuZXd2YWx1ZSA9IHZhbHVlICsgKHNlbGYuZ2V0VmFyRmxhZyh2YXIsIGZsYWcsIEZhbHNlKSBvciAiIikKKyAgICAgICAgc2VsZi5zZXRWYXJGbGFnKHZhciwgZmxhZywgbmV3dmFsdWUsIGlnbm9yZT1UcnVlKQorCisgICAgZGVmIHNldFZhckZsYWdzKHNlbGYsIHZhciwgZmxhZ3MsICoqbG9naW5mbyk6CisgICAgICAgIHNlbGYuZXhwYW5kX2NhY2hlID0ge30KKyAgICAgICAgaW5mZXJfY2FsbGVyX2RldGFpbHMobG9naW5mbykKKyAgICAgICAgaWYgbm90IHZhciBpbiBzZWxmLmRpY3Q6CisgICAgICAgICAgICBzZWxmLl9tYWtlU2hhZG93Q29weSh2YXIpCisKKyAgICAgICAgZm9yIGkgaW4gZmxhZ3M6CisgICAgICAgICAgICBpZiBpID09ICJfY29udGVudCI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGxvZ2luZm9bJ2ZsYWcnXSA9IGkKKyAgICAgICAgICAgIGxvZ2luZm9bJ2RldGFpbCddID0gZmxhZ3NbaV0KKyAgICAgICAgICAgIHNlbGYudmFyaGlzdG9yeS5yZWNvcmQoKipsb2dpbmZvKQorICAgICAgICAgICAgc2VsZi5kaWN0W3Zhcl1baV0gPSBmbGFnc1tpXQorCisgICAgZGVmIGdldFZhckZsYWdzKHNlbGYsIHZhciwgZXhwYW5kID0gRmFsc2UsIGludGVybmFsZmxhZ3M9RmFsc2UpOgorICAgICAgICBsb2NhbF92YXIgPSBzZWxmLl9maW5kVmFyKHZhcikKKyAgICAgICAgZmxhZ3MgPSB7fQorCisgICAgICAgIGlmIGxvY2FsX3ZhcjoKKyAgICAgICAgICAgIGZvciBpIGluIGxvY2FsX3ZhcjoKKyAgICAgICAgICAgICAgICBpZiBpLnN0YXJ0c3dpdGgoIl8iKSBhbmQgbm90IGludGVybmFsZmxhZ3M6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZmxhZ3NbaV0gPSBsb2NhbF92YXJbaV0KKyAgICAgICAgICAgICAgICBpZiBleHBhbmQgYW5kIGkgaW4gZXhwYW5kOgorICAgICAgICAgICAgICAgICAgICBmbGFnc1tpXSA9IHNlbGYuZXhwYW5kKGZsYWdzW2ldLCB2YXIgKyAiWyIgKyBpICsgIl0iKQorICAgICAgICBpZiBsZW4oZmxhZ3MpID09IDA6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gZmxhZ3MKKworCisgICAgZGVmIGRlbFZhckZsYWdzKHNlbGYsIHZhciwgKipsb2dpbmZvKToKKyAgICAgICAgc2VsZi5leHBhbmRfY2FjaGUgPSB7fQorICAgICAgICBpZiBub3QgdmFyIGluIHNlbGYuZGljdDoKKyAgICAgICAgICAgIHNlbGYuX21ha2VTaGFkb3dDb3B5KHZhcikKKworICAgICAgICBpZiB2YXIgaW4gc2VsZi5kaWN0OgorICAgICAgICAgICAgY29udGVudCA9IE5vbmUKKworICAgICAgICAgICAgbG9naW5mb1snb3AnXSA9ICdkZWxldGUgZmxhZ3MnCisgICAgICAgICAgICBzZWxmLnZhcmhpc3RvcnkucmVjb3JkKCoqbG9naW5mbykKKworICAgICAgICAgICAgIyB0cnkgdG8gc2F2ZSB0aGUgY29udGVudAorICAgICAgICAgICAgaWYgIl9jb250ZW50IiBpbiBzZWxmLmRpY3RbdmFyXToKKyAgICAgICAgICAgICAgICBjb250ZW50ICA9IHNlbGYuZGljdFt2YXJdWyJfY29udGVudCJdCisgICAgICAgICAgICAgICAgc2VsZi5kaWN0W3Zhcl0gICAgICAgICAgICA9IHt9CisgICAgICAgICAgICAgICAgc2VsZi5kaWN0W3Zhcl1bIl9jb250ZW50Il0gPSBjb250ZW50CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLmRpY3RbdmFyXQorCisgICAgZGVmIGNyZWF0ZUNvcHkoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgYSBjb3B5IG9mIHNlbGYgYnkgc2V0dGluZyBfZGF0YSB0byBzZWxmCisgICAgICAgICIiIgorICAgICAgICAjIHdlIHJlYWxseSB3YW50IHRoaXMgdG8gYmUgYSBEYXRhU21hcnQuLi4KKyAgICAgICAgZGF0YSA9IERhdGFTbWFydCgpCisgICAgICAgIGRhdGEuZGljdFsiX2RhdGEiXSA9IHNlbGYuZGljdAorICAgICAgICBkYXRhLnZhcmhpc3RvcnkgPSBzZWxmLnZhcmhpc3RvcnkuY29weSgpCisgICAgICAgIGRhdGEudmFyaGlzdG9yeS5kYXRhc21hcnQgPSBkYXRhCisgICAgICAgIGRhdGEuaW5jaGlzdG9yeSA9IHNlbGYuaW5jaGlzdG9yeS5jb3B5KCkKKworICAgICAgICBkYXRhLl90cmFja2luZyA9IHNlbGYuX3RyYWNraW5nCisKKyAgICAgICAgZGF0YS5vdmVycmlkZXMgPSBOb25lCisgICAgICAgIGRhdGEub3ZlcnJpZGV2YXJzID0gY29weS5jb3B5KHNlbGYub3ZlcnJpZGV2YXJzKQorICAgICAgICAjIFNob3VsZCByZWFsbHkgYmUgYSBkZWVwY29weSBidXQgaGFzIGhlYXZ5IG92ZXJoZWFkLgorICAgICAgICAjIEluc3RlYWQsIHdlJ3JlIGNhcmVmdWwgd2l0aCB3cml0ZXMuCisgICAgICAgIGRhdGEub3ZlcnJpZGVkYXRhID0gY29weS5jb3B5KHNlbGYub3ZlcnJpZGVkYXRhKQorCisgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBkZWYgZXhwYW5kVmFycmVmKHNlbGYsIHZhcmlhYmxlLCBwYXJlbnRzPUZhbHNlKToKKyAgICAgICAgIiIiRmluZCBhbGwgcmVmZXJlbmNlcyB0byB2YXJpYWJsZSBpbiB0aGUgZGF0YSBhbmQgZXhwYW5kIGl0CisgICAgICAgICAgIGluIHBsYWNlLCBvcHRpb25hbGx5IGRlc2NlbmRpbmcgdG8gcGFyZW50IGRhdGFzdG9yZXMuIiIiCisKKyAgICAgICAgaWYgcGFyZW50czoKKyAgICAgICAgICAgIGtleXMgPSBpdGVyKHNlbGYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBrZXlzID0gc2VsZi5sb2NhbGtleXMoKQorCisgICAgICAgIHJlZiA9ICckeyVzfScgJSB2YXJpYWJsZQorICAgICAgICB2YWx1ZSA9IHNlbGYuZ2V0VmFyKHZhcmlhYmxlLCBGYWxzZSkKKyAgICAgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICAgICAgcmVmZXJyZXJ2YWx1ZSA9IHNlbGYuZ2V0VmFyKGtleSwgRmFsc2UpCisgICAgICAgICAgICBpZiByZWZlcnJlcnZhbHVlIGFuZCByZWYgaW4gcmVmZXJyZXJ2YWx1ZToKKyAgICAgICAgICAgICAgICBzZWxmLnNldFZhcihrZXksIHJlZmVycmVydmFsdWUucmVwbGFjZShyZWYsIHZhbHVlKSkKKworICAgIGRlZiBsb2NhbGtleXMoc2VsZik6CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5kaWN0OgorICAgICAgICAgICAgaWYga2V5ICE9ICdfZGF0YSc6CisgICAgICAgICAgICAgICAgeWllbGQga2V5CisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGRlbGV0ZWQgPSBzZXQoKQorICAgICAgICBvdmVycmlkZXMgPSBzZXQoKQorICAgICAgICBkZWYga2V5bGlzdChkKTogICAgICAgIAorICAgICAgICAgICAga2xpc3QgPSBzZXQoKQorICAgICAgICAgICAgZm9yIGtleSBpbiBkOgorICAgICAgICAgICAgICAgIGlmIGtleSA9PSAiX2RhdGEiOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGtleSBpbiBkZWxldGVkOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGtleSBpbiBvdmVycmlkZXM6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbm90IGRba2V5XToKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlZC5hZGQoa2V5KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGtsaXN0LmFkZChrZXkpCisKKyAgICAgICAgICAgIGlmICJfZGF0YSIgaW4gZDoKKyAgICAgICAgICAgICAgICBrbGlzdCB8PSBrZXlsaXN0KGRbIl9kYXRhIl0pCisKKyAgICAgICAgICAgIHJldHVybiBrbGlzdAorCisgICAgICAgIHNlbGYubmVlZF9vdmVycmlkZXMoKQorICAgICAgICBmb3IgdmFyIGluIHNlbGYub3ZlcnJpZGVkYXRhOgorICAgICAgICAgICAgZm9yIChyLCBvKSBpbiBzZWxmLm92ZXJyaWRlZGF0YVt2YXJdOgorICAgICAgICAgICAgICAgIGlmIG8gaW4gc2VsZi5vdmVycmlkZXNzZXQ6CisgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlcy5hZGQodmFyKQorICAgICAgICAgICAgICAgIGVsaWYgIl8iIGluIG86CisgICAgICAgICAgICAgICAgICAgIGlmIHNldChvLnNwbGl0KCJfIikpLmlzc3Vic2V0KHNlbGYub3ZlcnJpZGVzc2V0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlcy5hZGQodmFyKQorCisgICAgICAgIGZvciBrIGluIGtleWxpc3Qoc2VsZi5kaWN0KToKKyAgICAgICAgICAgICB5aWVsZCBrCisKKyAgICAgICAgZm9yIGsgaW4gb3ZlcnJpZGVzOgorICAgICAgICAgICAgIHlpZWxkIGsKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKGZyb3plbnNldChzZWxmKSkKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpdGVtKToKKyAgICAgICAgdmFsdWUgPSBzZWxmLmdldFZhcihpdGVtLCBGYWxzZSkKKyAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKGl0ZW0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCB2YXIsIHZhbHVlKToKKyAgICAgICAgc2VsZi5zZXRWYXIodmFyLCB2YWx1ZSkKKworICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCB2YXIpOgorICAgICAgICBzZWxmLmRlbFZhcih2YXIpCisKKyAgICBkZWYgZ2V0X2hhc2goc2VsZik6CisgICAgICAgIGRhdGEgPSB7fQorICAgICAgICBkID0gc2VsZi5jcmVhdGVDb3B5KCkKKyAgICAgICAgYmIuZGF0YS5leHBhbmRLZXlzKGQpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoZCkKKworICAgICAgICBjb25maWdfd2hpdGVsaXN0ID0gc2V0KChkLmdldFZhcigiQkJfSEFTSENPTkZJR19XSElURUxJU1QiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICAgICAga2V5cyA9IHNldChrZXkgZm9yIGtleSBpbiBpdGVyKGQpIGlmIG5vdCBrZXkuc3RhcnRzd2l0aCgiX18iKSkKKyAgICAgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICAgICAgaWYga2V5IGluIGNvbmZpZ193aGl0ZWxpc3Q6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgdmFsdWUgPSBkLmdldFZhcihrZXksIEZhbHNlKSBvciAiIgorICAgICAgICAgICAgZGF0YS51cGRhdGUoe2tleTp2YWx1ZX0pCisKKyAgICAgICAgICAgIHZhcmZsYWdzID0gZC5nZXRWYXJGbGFncyhrZXksIGludGVybmFsZmxhZ3MgPSBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHZhcmZsYWdzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmb3IgZiBpbiB2YXJmbGFnczoKKyAgICAgICAgICAgICAgICBpZiBmID09ICJfY29udGVudCI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZGF0YS51cGRhdGUoeyclc1slc10nICUgKGtleSwgZik6dmFyZmxhZ3NbZl19KQorCisgICAgICAgIGZvciBrZXkgaW4gWyJfX0JCVEFTS1MiLCAiX19CQkFOT05GVU5DUyIsICJfX0JCSEFORExFUlMiXToKKyAgICAgICAgICAgIGJiX2xpc3QgPSBkLmdldFZhcihrZXksIEZhbHNlKSBvciBbXQorICAgICAgICAgICAgYmJfbGlzdC5zb3J0KCkKKyAgICAgICAgICAgIGRhdGEudXBkYXRlKHtrZXk6c3RyKGJiX2xpc3QpfSkKKworICAgICAgICAgICAgaWYga2V5ID09ICJfX0JCQU5PTkZVTkNTIjoKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiBiYl9saXN0OgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKGksIFRydWUpIG9yICIiCisgICAgICAgICAgICAgICAgICAgIGRhdGEudXBkYXRlKHtpOnZhbHVlfSkKKworICAgICAgICBkYXRhX3N0ciA9IHN0cihbKGssIGRhdGFba10pIGZvciBrIGluIHNvcnRlZChkYXRhLmtleXMoKSldKQorICAgICAgICByZXR1cm4gaGFzaGxpYi5tZDUoZGF0YV9zdHIpLmhleGRpZ2VzdCgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2V2ZW50LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9ldmVudC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjZiYzQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9ldmVudC5weQpAQCAtMCwwICsxLDY2OCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnRXZlbnQnIGltcGxlbWVudGF0aW9uCisKK0NsYXNzZXMgYW5kIGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nICdldmVudHMnIGluIHRoZQorQml0QmFrZSBidWlsZCB0b29scy4KKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MsIHN5cworaW1wb3J0IHdhcm5pbmdzCit0cnk6CisgICAgaW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IHBpY2tsZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBhdGV4aXQKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCBiYi51dGlscworaW1wb3J0IGJiLmNvbXBhdAoraW1wb3J0IGJiLmV4Y2VwdGlvbnMKKworIyBUaGlzIGlzIHRoZSBwaWQgZm9yIHdoaWNoIHdlIHNob3VsZCBnZW5lcmF0ZSB0aGUgZXZlbnQuIFRoaXMgaXMgc2V0IHdoZW4KKyMgdGhlIHJ1bnF1ZXVlIGZvcmtzIG9mZi4KK3dvcmtlcl9waWQgPSAwCit3b3JrZXJfZmlyZSA9IE5vbmUKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuRXZlbnQnKQorCitjbGFzcyBFdmVudChvYmplY3QpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIGV2ZW50cyIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnBpZCA9IHdvcmtlcl9waWQKKworUmVnaXN0ZXJlZCAgICAgICAgPSAxMAorQWxyZWFkeVJlZ2lzdGVyZWQgPSAxNAorCitkZWYgZ2V0X2NsYXNzX2hhbmRsZXJzKCk6CisgICAgcmV0dXJuIF9oYW5kbGVycworCitkZWYgc2V0X2NsYXNzX2hhbmRsZXJzKGgpOgorICAgIGdsb2JhbCBfaGFuZGxlcnMKKyAgICBfaGFuZGxlcnMgPSBoCisKK2RlZiBjbGVhbl9jbGFzc19oYW5kbGVycygpOgorICAgIHJldHVybiBiYi5jb21wYXQuT3JkZXJlZERpY3QoKQorCisjIEludGVybmFsCitfaGFuZGxlcnMgPSBjbGVhbl9jbGFzc19oYW5kbGVycygpCitfdWlfaGFuZGxlcnMgPSB7fQorX3VpX2xvZ2ZpbHRlcnMgPSB7fQorX3VpX2hhbmRsZXJfc2VxID0gMAorX2V2ZW50X2hhbmRsZXJfbWFwID0ge30KK19jYXRjaGFsbF9oYW5kbGVycyA9IHt9CitfZXZlbnRmaWx0ZXIgPSBOb25lCitfdWlyZWFkeSA9IEZhbHNlCisKK2RlZiBleGVjdXRlX2hhbmRsZXIobmFtZSwgaGFuZGxlciwgZXZlbnQsIGQpOgorICAgIGV2ZW50LmRhdGEgPSBkCisgICAgYWRkZWRkID0gRmFsc2UKKyAgICBpZiAnZCcgbm90IGluIF9fYnVpbHRpbnNfXzoKKyAgICAgICAgX19idWlsdGluc19fWydkJ10gPSBkCisgICAgICAgIGFkZGVkZCA9IFRydWUKKyAgICB0cnk6CisgICAgICAgIHJldCA9IGhhbmRsZXIoZXZlbnQpCisgICAgZXhjZXB0IChiYi5wYXJzZS5Ta2lwUmVjaXBlLCBiYi5CQkhhbmRsZWRFeGNlcHRpb24pOgorICAgICAgICByYWlzZQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIGV0eXBlLCB2YWx1ZSwgdGIgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICBsb2dnZXIuZXJyb3IoIkV4ZWN1dGlvbiBvZiBldmVudCBoYW5kbGVyICclcycgZmFpbGVkIiAlIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBleGNfaW5mbz0oZXR5cGUsIHZhbHVlLCB0Yi50Yl9uZXh0KSkKKyAgICAgICAgcmFpc2UKKyAgICBleGNlcHQgU3lzdGVtRXhpdCBhcyBleGM6CisgICAgICAgIGlmIGV4Yy5jb2RlICE9IDA6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkV4ZWN1dGlvbiBvZiBldmVudCBoYW5kbGVyICclcycgZmFpbGVkIiAlIG5hbWUpCisgICAgICAgIHJhaXNlCisgICAgZmluYWxseToKKyAgICAgICAgZGVsIGV2ZW50LmRhdGEKKyAgICAgICAgaWYgYWRkZWRkOgorICAgICAgICAgICAgZGVsIF9fYnVpbHRpbnNfX1snZCddCisKK2RlZiBmaXJlX2NsYXNzX2hhbmRsZXJzKGV2ZW50LCBkKToKKyAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CisgICAgICAgIHJldHVybgorCisgICAgZWlkID0gc3RyKGV2ZW50Ll9fY2xhc3NfXylbODotMl0KKyAgICBldnRfaG1hcCA9IF9ldmVudF9oYW5kbGVyX21hcC5nZXQoZWlkLCB7fSkKKyAgICBmb3IgbmFtZSwgaGFuZGxlciBpbiBfaGFuZGxlcnMuaXRlcml0ZW1zKCk6CisgICAgICAgIGlmIG5hbWUgaW4gX2NhdGNoYWxsX2hhbmRsZXJzIG9yIG5hbWUgaW4gZXZ0X2htYXA6CisgICAgICAgICAgICBpZiBfZXZlbnRmaWx0ZXI6CisgICAgICAgICAgICAgICAgaWYgbm90IF9ldmVudGZpbHRlcihuYW1lLCBoYW5kbGVyLCBldmVudCwgZCk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBleGVjdXRlX2hhbmRsZXIobmFtZSwgaGFuZGxlciwgZXZlbnQsIGQpCisKK3VpX3F1ZXVlID0gW10KK0BhdGV4aXQucmVnaXN0ZXIKK2RlZiBwcmludF91aV9xdWV1ZSgpOgorICAgICIiIklmIHdlJ3JlIGV4aXRpbmcgYmVmb3JlIGEgVUkgaGFzIGJlZW4gc3Bhd25lZCwgZGlzcGxheSBhbnkgcXVldWVkCisgICAgTG9nUmVjb3JkcyB0byB0aGUgY29uc29sZS4iIiIKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZSIpCisgICAgaWYgbm90IF91aXJlYWR5OgorICAgICAgICBmcm9tIGJiLm1zZyBpbXBvcnQgQkJMb2dGb3JtYXR0ZXIKKyAgICAgICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3Rkb3V0KQorICAgICAgICBjb25zb2xlLnNldEZvcm1hdHRlcihCQkxvZ0Zvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKSkKKyAgICAgICAgbG9nZ2VyLmhhbmRsZXJzID0gW2NvbnNvbGVdCisKKyAgICAgICAgIyBGaXJzdCBjaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhbnkgcHJvcGVyIG1lc3NhZ2VzCisgICAgICAgIG1zZ3ByaW50ID0gRmFsc2UKKyAgICAgICAgZm9yIGV2ZW50IGluIHVpX3F1ZXVlOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgbG9nZ2luZy5Mb2dSZWNvcmQpOgorICAgICAgICAgICAgICAgIGlmIGV2ZW50LmxldmVsbm8gPiBsb2dnaW5nLkRFQlVHOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaGFuZGxlKGV2ZW50KQorICAgICAgICAgICAgICAgICAgICBtc2dwcmludCA9IFRydWUKKyAgICAgICAgaWYgbXNncHJpbnQ6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIE5vcGUsIHNvIGp1c3QgcHJpbnQgYWxsIG9mIHRoZSBtZXNzYWdlcyB3ZSBoYXZlIChpbmNsdWRpbmcgZGVidWcgbWVzc2FnZXMpCisgICAgICAgIGZvciBldmVudCBpbiB1aV9xdWV1ZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaGFuZGxlKGV2ZW50KQorCitkZWYgZmlyZV91aV9oYW5kbGVycyhldmVudCwgZCk6CisgICAgaWYgbm90IF91aXJlYWR5OgorICAgICAgICAjIE5vIFVJIGhhbmRsZXJzIHJlZ2lzdGVyZWQgeWV0LCBxdWV1ZSB1cCB0aGUgbWVzc2FnZXMKKyAgICAgICAgdWlfcXVldWUuYXBwZW5kKGV2ZW50KQorICAgICAgICByZXR1cm4KKworICAgIGVycm9ycyA9IFtdCisgICAgZm9yIGggaW4gX3VpX2hhbmRsZXJzOgorICAgICAgICAjcHJpbnQgIlNlbmRpbmcgZXZlbnQgJXMiICUgZXZlbnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIGlmIG5vdCBfdWlfbG9nZmlsdGVyc1toXS5maWx0ZXIoZXZlbnQpOgorICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICMgV2UgdXNlIHBpY2tsZSBoZXJlIHNpbmNlIGl0IGJldHRlciBoYW5kbGVzIG9iamVjdCBpbnN0YW5jZXMKKyAgICAgICAgICAgICAjIHdoaWNoIHhtbHJwYydzIG1hcnNoYWxsZXIgZG9lcyBub3QuIEV2ZW50cyAqbXVzdCogYmUgc2VyaWFsaXphYmxlCisgICAgICAgICAgICAgIyBieSBwaWNrbGUuCisgICAgICAgICAgICAgaWYgaGFzYXR0cihfdWlfaGFuZGxlcnNbaF0uZXZlbnQsICJzZW5kcGlja2xlIik6CisgICAgICAgICAgICAgICAgX3VpX2hhbmRsZXJzW2hdLmV2ZW50LnNlbmRwaWNrbGUoKHBpY2tsZS5kdW1wcyhldmVudCkpKQorICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgX3VpX2hhbmRsZXJzW2hdLmV2ZW50LnNlbmQoZXZlbnQpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoaCkKKyAgICBmb3IgaCBpbiBlcnJvcnM6CisgICAgICAgIGRlbCBfdWlfaGFuZGxlcnNbaF0KKworZGVmIGZpcmUoZXZlbnQsIGQpOgorICAgICIiIkZpcmUgb2ZmIGFuIEV2ZW50IiIiCisKKyAgICAjIFdlIGNhbiBmaXJlIGNsYXNzIGhhbmRsZXJzIGluIHRoZSB3b3JrZXIgcHJvY2VzcyBjb250ZXh0IGFuZCB0aGlzIGlzCisgICAgIyBkZXNpcmVkIHNvIHRoZXkgZ2V0IHRoZSB0YXNrIGJhc2VkIGRhdGFzdG9yZS4KKyAgICAjIFVJIGhhbmRsZXJzIG5lZWQgdG8gYmUgZmlyZWQgaW4gdGhlIHNlcnZlciBjb250ZXh0IHNvIHdlIGRlZmVyIHRoaXMuIFRoZXkKKyAgICAjIGRvbid0IGhhdmUgYSBkYXRhc3RvcmUgc28gdGhlIGRhdGFzdG9yZSBjb250ZXh0IGlzbid0IGEgcHJvYmxlbS4KKworICAgIGZpcmVfY2xhc3NfaGFuZGxlcnMoZXZlbnQsIGQpCisgICAgaWYgd29ya2VyX2ZpcmU6CisgICAgICAgIHdvcmtlcl9maXJlKGV2ZW50LCBkKQorICAgIGVsc2U6CisgICAgICAgIGZpcmVfdWlfaGFuZGxlcnMoZXZlbnQsIGQpCisKK2RlZiBmaXJlX2Zyb21fd29ya2VyKGV2ZW50LCBkKToKKyAgICBmaXJlX3VpX2hhbmRsZXJzKGV2ZW50LCBkKQorCitub29wID0gbGFtYmRhIF86IE5vbmUKK2RlZiByZWdpc3RlcihuYW1lLCBoYW5kbGVyLCBtYXNrPU5vbmUpOgorICAgICIiIlJlZ2lzdGVyIGFuIEV2ZW50IGhhbmRsZXIiIiIKKworICAgICMgYWxyZWFkeSByZWdpc3RlcmVkCisgICAgaWYgbmFtZSBpbiBfaGFuZGxlcnM6CisgICAgICAgIHJldHVybiBBbHJlYWR5UmVnaXN0ZXJlZAorCisgICAgaWYgaGFuZGxlciBpcyBub3QgTm9uZToKKyAgICAgICAgIyBoYW5kbGUgc3RyaW5nIGNvbnRhaW5pbmcgcHl0aG9uIGNvZGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShoYW5kbGVyLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHRtcCA9ICJkZWYgJXMoZSk6XG4lcyIgJSAobmFtZSwgaGFuZGxlcikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb2RlID0gY29tcGlsZSh0bXAsICIlcyhlKSIgJSBuYW1lLCAiZXhlYyIpCisgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gcmVnaXN0ZXIgZXZlbnQgaGFuZGxlciAnJXMnOlxuJXMiLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJy5qb2luKHRyYWNlYmFjay5mb3JtYXRfZXhjKGxpbWl0PTApKSkKKyAgICAgICAgICAgICAgICBfaGFuZGxlcnNbbmFtZV0gPSBub29wCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbnYgPSB7fQorICAgICAgICAgICAgYmIudXRpbHMuYmV0dGVyX2V4ZWMoY29kZSwgZW52KQorICAgICAgICAgICAgZnVuYyA9IGJiLnV0aWxzLmJldHRlcl9ldmFsKG5hbWUsIGVudikKKyAgICAgICAgICAgIF9oYW5kbGVyc1tuYW1lXSA9IGZ1bmMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9oYW5kbGVyc1tuYW1lXSA9IGhhbmRsZXIKKworICAgICAgICBpZiBub3QgbWFzayBvciAnKicgaW4gbWFzazoKKyAgICAgICAgICAgIF9jYXRjaGFsbF9oYW5kbGVyc1tuYW1lXSA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBtIGluIG1hc2s6CisgICAgICAgICAgICAgICAgaWYgX2V2ZW50X2hhbmRsZXJfbWFwLmdldChtLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBfZXZlbnRfaGFuZGxlcl9tYXBbbV0gPSB7fQorICAgICAgICAgICAgICAgIF9ldmVudF9oYW5kbGVyX21hcFttXVtuYW1lXSA9IFRydWUKKworICAgICAgICByZXR1cm4gUmVnaXN0ZXJlZAorCitkZWYgcmVtb3ZlKG5hbWUsIGhhbmRsZXIpOgorICAgICIiIlJlbW92ZSBhbiBFdmVudCBoYW5kbGVyIiIiCisgICAgX2hhbmRsZXJzLnBvcChuYW1lKQorCitkZWYgc2V0X2V2ZW50ZmlsdGVyKGZ1bmMpOgorICAgIGdsb2JhbCBfZXZlbnRmaWx0ZXIKKyAgICBfZXZlbnRmaWx0ZXIgPSBmdW5jCisKK2RlZiByZWdpc3Rlcl9VSUhoYW5kbGVyKGhhbmRsZXIsIG1haW51aT1GYWxzZSk6CisgICAgaWYgbWFpbnVpOgorICAgICAgICBnbG9iYWwgX3VpcmVhZHkKKyAgICAgICAgX3VpcmVhZHkgPSBUcnVlCisgICAgYmIuZXZlbnQuX3VpX2hhbmRsZXJfc2VxID0gYmIuZXZlbnQuX3VpX2hhbmRsZXJfc2VxICsgMQorICAgIF91aV9oYW5kbGVyc1tfdWlfaGFuZGxlcl9zZXFdID0gaGFuZGxlcgorICAgIGxldmVsLCBkZWJ1Z19kb21haW5zID0gYmIubXNnLmNvbnN0cnVjdExvZ09wdGlvbnMoKQorICAgIF91aV9sb2dmaWx0ZXJzW191aV9oYW5kbGVyX3NlcV0gPSBVSUV2ZW50RmlsdGVyKGxldmVsLCBkZWJ1Z19kb21haW5zKQorICAgIHJldHVybiBfdWlfaGFuZGxlcl9zZXEKKworZGVmIHVucmVnaXN0ZXJfVUlIaGFuZGxlcihoYW5kbGVyTnVtKToKKyAgICBpZiBoYW5kbGVyTnVtIGluIF91aV9oYW5kbGVyczoKKyAgICAgICAgZGVsIF91aV9oYW5kbGVyc1toYW5kbGVyTnVtXQorICAgIHJldHVybgorCisjIENsYXNzIHRvIGFsbG93IGZpbHRlcmluZyBvZiBldmVudHMgYW5kIHNwZWNpZmljIGZpbHRlcmluZyBvZiBMb2dSZWNvcmRzICpiZWZvcmUqIHdlIHB1dCB0aGVtIG92ZXIgdGhlIElQQworY2xhc3MgVUlFdmVudEZpbHRlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsZXZlbCwgZGVidWdfZG9tYWlucyk6CisgICAgICAgIHNlbGYudXBkYXRlKE5vbmUsIGxldmVsLCBkZWJ1Z19kb21haW5zKQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBldmVudG1hc2ssIGxldmVsLCBkZWJ1Z19kb21haW5zKToKKyAgICAgICAgc2VsZi5ldmVudG1hc2sgPSBldmVudG1hc2sKKyAgICAgICAgc2VsZi5zdGRsZXZlbCA9IGxldmVsCisgICAgICAgIHNlbGYuZGVidWdfZG9tYWlucyA9IGRlYnVnX2RvbWFpbnMKKworICAgIGRlZiBmaWx0ZXIoc2VsZiwgZXZlbnQpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CisgICAgICAgICAgICBpZiBldmVudC5sZXZlbG5vID49IHNlbGYuc3RkbGV2ZWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGlmIGV2ZW50Lm5hbWUgaW4gc2VsZi5kZWJ1Z19kb21haW5zIGFuZCBldmVudC5sZXZlbG5vID49IHNlbGYuZGVidWdfZG9tYWluc1tldmVudC5uYW1lXToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVpZCA9IHN0cihldmVudC5fX2NsYXNzX18pWzg6LTJdCisgICAgICAgIGlmIHNlbGYuZXZlbnRtYXNrIGFuZCBlaWQgbm90IGluIHNlbGYuZXZlbnRtYXNrOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKK2RlZiBzZXRfVUlIbWFzayhoYW5kbGVyTnVtLCBsZXZlbCwgZGVidWdfZG9tYWlucywgbWFzayk6CisgICAgaWYgbm90IGhhbmRsZXJOdW0gaW4gX3VpX2hhbmRsZXJzOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBpZiAnKicgaW4gbWFzazoKKyAgICAgICAgX3VpX2xvZ2ZpbHRlcnNbaGFuZGxlck51bV0udXBkYXRlKE5vbmUsIGxldmVsLCBkZWJ1Z19kb21haW5zKQorICAgIGVsc2U6CisgICAgICAgIF91aV9sb2dmaWx0ZXJzW2hhbmRsZXJOdW1dLnVwZGF0ZShtYXNrLCBsZXZlbCwgZGVidWdfZG9tYWlucykKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgZ2V0TmFtZShlKToKKyAgICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIGEgY2xhc3Mgb3IgY2xhc3MgaW5zdGFuY2UiIiIKKyAgICBpZiBnZXRhdHRyKGUsICJfX25hbWVfXyIsIE5vbmUpID09IE5vbmU6CisgICAgICAgIHJldHVybiBlLl9fY2xhc3NfXy5fX25hbWVfXworICAgIGVsc2U6CisgICAgICAgIHJldHVybiBlLl9fbmFtZV9fCisKK2NsYXNzIE9wZXJhdGlvblN0YXJ0ZWQoRXZlbnQpOgorICAgICIiIkFuIG9wZXJhdGlvbiBoYXMgYmVndW4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnID0gIk9wZXJhdGlvbiBTdGFydGVkIik6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYubXNnID0gbXNnCisKK2NsYXNzIE9wZXJhdGlvbkNvbXBsZXRlZChFdmVudCk6CisgICAgIiIiQW4gb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdG90YWwsIG1zZyA9ICJPcGVyYXRpb24gQ29tcGxldGVkIik6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYudG90YWwgPSB0b3RhbAorICAgICAgICBzZWxmLm1zZyA9IG1zZworCitjbGFzcyBPcGVyYXRpb25Qcm9ncmVzcyhFdmVudCk6CisgICAgIiIiQW4gb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGN1cnJlbnQsIHRvdGFsLCBtc2cgPSAiT3BlcmF0aW9uIGluIFByb2dyZXNzIik6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuY3VycmVudCA9IGN1cnJlbnQKKyAgICAgICAgc2VsZi50b3RhbCA9IHRvdGFsCisgICAgICAgIHNlbGYubXNnID0gbXNnICsgIjogJXMvJXMiICUgKGN1cnJlbnQsIHRvdGFsKTsKKworY2xhc3MgQ29uZmlnUGFyc2VkKEV2ZW50KToKKyAgICAiIiJDb25maWd1cmF0aW9uIFBhcnNpbmcgQ29tcGxldGUiIiIKKworY2xhc3MgUmVjaXBlRXZlbnQoRXZlbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmbik6CisgICAgICAgIHNlbGYuZm4gPSBmbgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorCitjbGFzcyBSZWNpcGVQcmVGaW5hbGlzZShSZWNpcGVFdmVudCk6CisgICAgIiIiIFJlY2lwZSBQYXJzaW5nIENvbXBsZXRlIGJ1dCBub3QgeWV0IGZpbmlhbGlzZWQiIiIKKworY2xhc3MgUmVjaXBlUGFyc2VkKFJlY2lwZUV2ZW50KToKKyAgICAiIiIgUmVjaXBlIFBhcnNpbmcgQ29tcGxldGUgIiIiCisKK2NsYXNzIFN0YW1wVXBkYXRlKEV2ZW50KToKKyAgICAiIiJUcmlnZ2VyIGZvciBhbnkgYWRqdXN0bWVudCBvZiB0aGUgc3RhbXAgZmlsZXMgdG8gaGFwcGVuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFyZ2V0cywgc3RhbXBmbnMpOgorICAgICAgICBzZWxmLl90YXJnZXRzID0gdGFyZ2V0cworICAgICAgICBzZWxmLl9zdGFtcGZucyA9IHN0YW1wZm5zCisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgZ2V0U3RhbXBQcmVmaXgoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zdGFtcGZucworCisgICAgZGVmIGdldFRhcmdldHMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90YXJnZXRzCisKKyAgICBzdGFtcFByZWZpeCA9IHByb3BlcnR5KGdldFN0YW1wUHJlZml4KQorICAgIHRhcmdldHMgPSBwcm9wZXJ0eShnZXRUYXJnZXRzKQorCitjbGFzcyBCdWlsZEJhc2UoRXZlbnQpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIGJibWFrZSBydW4gZXZlbnRzIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbiwgcCwgZmFpbHVyZXMgPSAwKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG4KKyAgICAgICAgc2VsZi5fcGtncyA9IHAKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fZmFpbHVyZXMgPSBmYWlsdXJlcworCisgICAgZGVmIGdldFBrZ3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wa2dzCisKKyAgICBkZWYgc2V0UGtncyhzZWxmLCBwa2dzKToKKyAgICAgICAgc2VsZi5fcGtncyA9IHBrZ3MKKworICAgIGRlZiBnZXROYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIHNldE5hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisKKyAgICBkZWYgZ2V0Q2ZnKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5kYXRhCisKKyAgICBkZWYgc2V0Q2ZnKHNlbGYsIGNmZyk6CisgICAgICAgIHNlbGYuZGF0YSA9IGNmZworCisgICAgZGVmIGdldEZhaWx1cmVzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgZmFpbGVkIHBhY2thZ2VzCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmFpbHVyZXMKKworICAgIHBrZ3MgPSBwcm9wZXJ0eShnZXRQa2dzLCBzZXRQa2dzLCBOb25lLCAicGtncyBwcm9wZXJ0eSIpCisgICAgbmFtZSA9IHByb3BlcnR5KGdldE5hbWUsIHNldE5hbWUsIE5vbmUsICJuYW1lIHByb3BlcnR5IikKKyAgICBjZmcgPSBwcm9wZXJ0eShnZXRDZmcsIHNldENmZywgTm9uZSwgImNmZyBwcm9wZXJ0eSIpCisKKworCisKKworY2xhc3MgQnVpbGRTdGFydGVkKEJ1aWxkQmFzZSwgT3BlcmF0aW9uU3RhcnRlZCk6CisgICAgIiIiYmJtYWtlIGJ1aWxkIHJ1biBzdGFydGVkIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG4sIHAsIGZhaWx1cmVzID0gMCk6CisgICAgICAgIE9wZXJhdGlvblN0YXJ0ZWQuX19pbml0X18oc2VsZiwgIkJ1aWxkaW5nIFN0YXJ0ZWQiKQorICAgICAgICBCdWlsZEJhc2UuX19pbml0X18oc2VsZiwgbiwgcCwgZmFpbHVyZXMpCisKK2NsYXNzIEJ1aWxkQ29tcGxldGVkKEJ1aWxkQmFzZSwgT3BlcmF0aW9uQ29tcGxldGVkKToKKyAgICAiIiJiYm1ha2UgYnVpbGQgcnVuIGNvbXBsZXRlZCIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b3RhbCwgbiwgcCwgZmFpbHVyZXM9MCwgaW50ZXJydXB0ZWQ9MCk6CisgICAgICAgIGlmIG5vdCBmYWlsdXJlczoKKyAgICAgICAgICAgIE9wZXJhdGlvbkNvbXBsZXRlZC5fX2luaXRfXyhzZWxmLCB0b3RhbCwgIkJ1aWxkaW5nIFN1Y2NlZWRlZCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBPcGVyYXRpb25Db21wbGV0ZWQuX19pbml0X18oc2VsZiwgdG90YWwsICJCdWlsZGluZyBGYWlsZWQiKQorICAgICAgICBzZWxmLl9pbnRlcnJ1cHRlZCA9IGludGVycnVwdGVkCisgICAgICAgIEJ1aWxkQmFzZS5fX2luaXRfXyhzZWxmLCBuLCBwLCBmYWlsdXJlcykKKworY2xhc3MgRGlza0Z1bGwoRXZlbnQpOgorICAgICIiIkRpc2sgZnVsbCBjYXNlIGJ1aWxkIGFib3J0ZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGV2LCB0eXBlLCBmcmVlc3BhY2UsIG1vdW50cG9pbnQpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9kZXYgPSBkZXYKKyAgICAgICAgc2VsZi5fdHlwZSA9IHR5cGUKKyAgICAgICAgc2VsZi5fZnJlZSA9IGZyZWVzcGFjZQorICAgICAgICBzZWxmLl9tb3VudHBvaW50ID0gbW91bnRwb2ludAorCitjbGFzcyBOb1Byb3ZpZGVyKEV2ZW50KToKKyAgICAiIiJObyBQcm92aWRlciBmb3IgYW4gRXZlbnQiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVtLCBydW50aW1lPUZhbHNlLCBkZXBlbmRlZXM9Tm9uZSwgcmVhc29ucz1Ob25lLCBjbG9zZV9tYXRjaGVzPU5vbmUpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9pdGVtID0gaXRlbQorICAgICAgICBzZWxmLl9ydW50aW1lID0gcnVudGltZQorICAgICAgICBzZWxmLl9kZXBlbmRlZXMgPSBkZXBlbmRlZXMKKyAgICAgICAgc2VsZi5fcmVhc29ucyA9IHJlYXNvbnMKKyAgICAgICAgc2VsZi5fY2xvc2VfbWF0Y2hlcyA9IGNsb3NlX21hdGNoZXMKKworICAgIGRlZiBnZXRJdGVtKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faXRlbQorCisgICAgZGVmIGlzUnVudGltZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bnRpbWUKKworY2xhc3MgTXVsdGlwbGVQcm92aWRlcnMoRXZlbnQpOgorICAgICIiIk11bHRpcGxlIFByb3ZpZGVycyIiIgorCisgICAgZGVmICBfX2luaXRfXyhzZWxmLCBpdGVtLCBjYW5kaWRhdGVzLCBydW50aW1lID0gRmFsc2UpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9pdGVtID0gaXRlbQorICAgICAgICBzZWxmLl9jYW5kaWRhdGVzID0gY2FuZGlkYXRlcworICAgICAgICBzZWxmLl9pc19ydW50aW1lID0gcnVudGltZQorCisgICAgZGVmIGlzUnVudGltZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIElzIHRoaXMgYSBydW50aW1lIGlzc3VlPworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lzX3J1bnRpbWUKKworICAgIGRlZiBnZXRJdGVtKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIG5hbWUgZm9yIHRoZSB0byBiZSBidWlsZCBpdGVtCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5faXRlbQorCisgICAgZGVmIGdldENhbmRpZGF0ZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBHZXQgdGhlIHBvc3NpYmxlIENhbmRpZGF0ZXMgZm9yIGEgUFJPVklERVIuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fY2FuZGlkYXRlcworCitjbGFzcyBQYXJzZVN0YXJ0ZWQoT3BlcmF0aW9uU3RhcnRlZCk6CisgICAgIiIiUmVjaXBlIHBhcnNpbmcgZm9yIHRoZSBydW5xdWV1ZSBoYXMgYmVndW4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdG90YWwpOgorICAgICAgICBPcGVyYXRpb25TdGFydGVkLl9faW5pdF9fKHNlbGYsICJSZWNpcGUgcGFyc2luZyBTdGFydGVkIikKKyAgICAgICAgc2VsZi50b3RhbCA9IHRvdGFsCisKK2NsYXNzIFBhcnNlQ29tcGxldGVkKE9wZXJhdGlvbkNvbXBsZXRlZCk6CisgICAgIiIiUmVjaXBlIHBhcnNpbmcgZm9yIHRoZSBydW5xdWV1ZSBoYXMgY29tcGxldGVkIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhY2hlZCwgcGFyc2VkLCBza2lwcGVkLCBtYXNrZWQsIHZpcnR1YWxzLCBlcnJvcnMsIHRvdGFsKToKKyAgICAgICAgT3BlcmF0aW9uQ29tcGxldGVkLl9faW5pdF9fKHNlbGYsIHRvdGFsLCAiUmVjaXBlIHBhcnNpbmcgQ29tcGxldGVkIikKKyAgICAgICAgc2VsZi5jYWNoZWQgPSBjYWNoZWQKKyAgICAgICAgc2VsZi5wYXJzZWQgPSBwYXJzZWQKKyAgICAgICAgc2VsZi5za2lwcGVkID0gc2tpcHBlZAorICAgICAgICBzZWxmLnZpcnR1YWxzID0gdmlydHVhbHMKKyAgICAgICAgc2VsZi5tYXNrZWQgPSBtYXNrZWQKKyAgICAgICAgc2VsZi5lcnJvcnMgPSBlcnJvcnMKKyAgICAgICAgc2VsZi5zb2ZhciA9IGNhY2hlZCArIHBhcnNlZAorCitjbGFzcyBQYXJzZVByb2dyZXNzKE9wZXJhdGlvblByb2dyZXNzKToKKyAgICAiIiJSZWNpcGUgcGFyc2luZyBwcm9ncmVzcyIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjdXJyZW50LCB0b3RhbCk6CisgICAgICAgIE9wZXJhdGlvblByb2dyZXNzLl9faW5pdF9fKHNlbGYsIGN1cnJlbnQsIHRvdGFsLCAiUmVjaXBlIHBhcnNpbmciKQorCisKK2NsYXNzIENhY2hlTG9hZFN0YXJ0ZWQoT3BlcmF0aW9uU3RhcnRlZCk6CisgICAgIiIiTG9hZGluZyBvZiB0aGUgZGVwZW5kZW5jeSBjYWNoZSBoYXMgYmVndW4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdG90YWwpOgorICAgICAgICBPcGVyYXRpb25TdGFydGVkLl9faW5pdF9fKHNlbGYsICJMb2FkaW5nIGNhY2hlIFN0YXJ0ZWQiKQorICAgICAgICBzZWxmLnRvdGFsID0gdG90YWwKKworY2xhc3MgQ2FjaGVMb2FkUHJvZ3Jlc3MoT3BlcmF0aW9uUHJvZ3Jlc3MpOgorICAgICIiIkNhY2hlIGxvYWRpbmcgcHJvZ3Jlc3MiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY3VycmVudCwgdG90YWwpOgorICAgICAgICBPcGVyYXRpb25Qcm9ncmVzcy5fX2luaXRfXyhzZWxmLCBjdXJyZW50LCB0b3RhbCwgIkxvYWRpbmcgY2FjaGUiKQorCitjbGFzcyBDYWNoZUxvYWRDb21wbGV0ZWQoT3BlcmF0aW9uQ29tcGxldGVkKToKKyAgICAiIiJDYWNoZSBsb2FkaW5nIGlzIGNvbXBsZXRlIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRvdGFsLCBudW1fZW50cmllcyk6CisgICAgICAgIE9wZXJhdGlvbkNvbXBsZXRlZC5fX2luaXRfXyhzZWxmLCB0b3RhbCwgIkxvYWRpbmcgY2FjaGUgQ29tcGxldGVkIikKKyAgICAgICAgc2VsZi5udW1fZW50cmllcyA9IG51bV9lbnRyaWVzCisKK2NsYXNzIFRyZWVEYXRhUHJlcGFyYXRpb25TdGFydGVkKE9wZXJhdGlvblN0YXJ0ZWQpOgorICAgICIiIlRyZWUgZGF0YSBwcmVwYXJhdGlvbiBzdGFydGVkIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBPcGVyYXRpb25TdGFydGVkLl9faW5pdF9fKHNlbGYsICJQcmVwYXJpbmcgdHJlZSBkYXRhIFN0YXJ0ZWQiKQorCitjbGFzcyBUcmVlRGF0YVByZXBhcmF0aW9uUHJvZ3Jlc3MoT3BlcmF0aW9uUHJvZ3Jlc3MpOgorICAgICIiIlRyZWUgZGF0YSBwcmVwYXJhdGlvbiBpcyBpbiBwcm9ncmVzcyIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjdXJyZW50LCB0b3RhbCk6CisgICAgICAgIE9wZXJhdGlvblByb2dyZXNzLl9faW5pdF9fKHNlbGYsIGN1cnJlbnQsIHRvdGFsLCAiUHJlcGFyaW5nIHRyZWUgZGF0YSIpCisKK2NsYXNzIFRyZWVEYXRhUHJlcGFyYXRpb25Db21wbGV0ZWQoT3BlcmF0aW9uQ29tcGxldGVkKToKKyAgICAiIiJUcmVlIGRhdGEgcHJlcGFyYXRpb24gY29tcGxldGVkIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRvdGFsKToKKyAgICAgICAgT3BlcmF0aW9uQ29tcGxldGVkLl9faW5pdF9fKHNlbGYsIHRvdGFsLCAiUHJlcGFyaW5nIHRyZWUgZGF0YSBDb21wbGV0ZWQiKQorCitjbGFzcyBEZXBUcmVlR2VuZXJhdGVkKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIGEgZGVwZW5kZW5jeSB0cmVlIGhhcyBiZWVuIGdlbmVyYXRlZAorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlcGdyYXBoKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fZGVwZ3JhcGggPSBkZXBncmFwaAorCitjbGFzcyBUYXJnZXRzVHJlZUdlbmVyYXRlZChFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgd2hlbiBhIHNldCBvZiBidWlsZGFibGUgdGFyZ2V0cyBoYXMgYmVlbiBnZW5lcmF0ZWQKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9tb2RlbCA9IG1vZGVsCisKK2NsYXNzIFJlYWNoYWJsZVN0YW1wcyhFdmVudCk6CisgICAgIiIiCisgICAgQW4gZXZlbnQgbGlzdGluZyBhbGwgc3RhbXBzIHJlYWNoYWJsZSBhZnRlciBwYXJzaW5nCisgICAgd2hpY2ggdGhlIG1ldGFkYXRhIG1heSB1c2UgdG8gY2xlYW4gdXAgc3RhbGUgZGF0YQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YW1wcyk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuc3RhbXBzID0gc3RhbXBzCisKK2NsYXNzIEZpbGVzTWF0Y2hpbmdGb3VuZChFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgd2hlbiBhIGxpc3Qgb2YgZmlsZXMgbWF0Y2hpbmcgdGhlIHN1cHBsaWVkIHBhdHRlcm4gaGFzCisgICAgYmVlbiBnZW5lcmF0ZWQKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0dGVybiwgbWF0Y2hlcyk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3BhdHRlcm4gPSBwYXR0ZXJuCisgICAgICAgIHNlbGYuX21hdGNoZXMgPSBtYXRjaGVzCisKK2NsYXNzIENvcmVCYXNlRmlsZXNGb3VuZChFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgd2hlbiBhIGxpc3Qgb2YgYXBwcm9wcmlhdGUgY29uZmlnIGZpbGVzIGhhcyBiZWVuIGdlbmVyYXRlZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRocyk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3BhdGhzID0gcGF0aHMKKworY2xhc3MgQ29uZmlnRmlsZXNGb3VuZChFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgd2hlbiBhIGxpc3Qgb2YgYXBwcm9wcmlhdGUgY29uZmlnIGZpbGVzIGhhcyBiZWVuIGdlbmVyYXRlZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YXJpYWJsZSwgdmFsdWVzKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fdmFyaWFibGUgPSB2YXJpYWJsZQorICAgICAgICBzZWxmLl92YWx1ZXMgPSB2YWx1ZXMKKworY2xhc3MgQ29uZmlnRmlsZVBhdGhGb3VuZChFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgd2hlbiBhIHBhdGggZm9yIGEgY29uZmlnIGZpbGUgaGFzIGJlZW4gZm91bmQKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3BhdGggPSBwYXRoCisKK2NsYXNzIE1zZ0Jhc2UoRXZlbnQpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIG1lc3NhZ2VzIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi5fbWVzc2FnZSA9IG1zZworICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorCitjbGFzcyBNc2dEZWJ1ZyhNc2dCYXNlKToKKyAgICAiIiJEZWJ1ZyBNZXNzYWdlIiIiCisKK2NsYXNzIE1zZ05vdGUoTXNnQmFzZSk6CisgICAgIiIiTm90ZSBNZXNzYWdlIiIiCisKK2NsYXNzIE1zZ1dhcm4oTXNnQmFzZSk6CisgICAgIiIiV2FybmluZyBNZXNzYWdlIiIiCisKK2NsYXNzIE1zZ0Vycm9yKE1zZ0Jhc2UpOgorICAgICIiIkVycm9yIE1lc3NhZ2UiIiIKKworY2xhc3MgTXNnRmF0YWwoTXNnQmFzZSk6CisgICAgIiIiRmF0YWwgTWVzc2FnZSIiIgorCitjbGFzcyBNc2dQbGFpbihNc2dCYXNlKToKKyAgICAiIiJHZW5lcmFsIG91dHB1dCIiIgorCitjbGFzcyBMb2dFeGVjVFRZKEV2ZW50KToKKyAgICAiIiJTZW5kIGV2ZW50IGNvbnRhaW5pbmcgcHJvZ3JhbSB0byBzcGF3biBvbiB0dHkgb2YgdGhlIGxvZ2dlciIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2csIHByb2csIHNsZWVwX2RlbGF5LCByZXRyaWVzKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5tc2cgPSBtc2cKKyAgICAgICAgc2VsZi5wcm9nID0gcHJvZworICAgICAgICBzZWxmLnNsZWVwX2RlbGF5ID0gc2xlZXBfZGVsYXkKKyAgICAgICAgc2VsZi5yZXRyaWVzID0gcmV0cmllcworCitjbGFzcyBMb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CisgICAgIiIiRGlzcGF0Y2ggbG9nZ2luZyBtZXNzYWdlcyBhcyBiaXRiYWtlIGV2ZW50cyIiIgorCisgICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgaWYgcmVjb3JkLmV4Y19pbmZvOgorICAgICAgICAgICAgZXR5cGUsIHZhbHVlLCB0YiA9IHJlY29yZC5leGNfaW5mbworICAgICAgICAgICAgaWYgaGFzYXR0cih0YiwgJ3RiX25leHQnKToKKyAgICAgICAgICAgICAgICB0YiA9IGxpc3QoYmIuZXhjZXB0aW9ucy5leHRyYWN0X3RyYWNlYmFjayh0YiwgY29udGV4dD0zKSkKKyAgICAgICAgICAgIHJlY29yZC5iYl9leGNfaW5mbyA9IChldHlwZSwgdmFsdWUsIHRiKQorICAgICAgICAgICAgcmVjb3JkLmV4Y19pbmZvID0gTm9uZQorICAgICAgICBmaXJlKHJlY29yZCwgTm9uZSkKKworICAgIGRlZiBmaWx0ZXIoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgcmVjb3JkLnRhc2twaWQgPSB3b3JrZXJfcGlkCisgICAgICAgIHJldHVybiBUcnVlCisKK2NsYXNzIFJlcXVlc3RQYWNrYWdlSW5mbyhFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgdG8gcmVxdWVzdCBwYWNrYWdlIGluZm9ybWF0aW9uCisgICAgIiIiCisKK2NsYXNzIFBhY2thZ2VJbmZvKEV2ZW50KToKKyAgICAiIiIKKyAgICBQYWNrYWdlIGluZm9ybWF0aW9uIGZvciBHVUkKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGtnaW5mb2xpc3QpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9wa2dpbmZvbGlzdCA9IHBrZ2luZm9saXN0CisKK2NsYXNzIE1ldGFkYXRhRXZlbnQoRXZlbnQpOgorICAgICIiIgorICAgIEdlbmVyaWMgZXZlbnQgdGhhdCB0YXJnZXQgZm9yIE9FLUNvcmUgY2xhc3NlcworICAgIHRvIHJlcG9ydCBpbmZvcm1hdGlvbiBkdXJpbmcgYXN5bmNocm91cyBleGVjdXRpb24KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXZlbnR0eXBlLCBldmVudGRhdGEpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnR5cGUgPSBldmVudHR5cGUKKyAgICAgICAgc2VsZi5fbG9jYWxkYXRhID0gZXZlbnRkYXRhCisKK2NsYXNzIFNhbml0eUNoZWNrKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB0byBydW4gc2FuaXR5IGNoZWNrcywgZWl0aGVyIHJhaXNlIGVycm9ycyBvciBnZW5lcmF0ZSBldmVudHMgYXMgcmV0dXJuIHN0YXR1cy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2VuZXJhdGVldmVudHMgPSBUcnVlKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5nZW5lcmF0ZWV2ZW50cyA9IGdlbmVyYXRlZXZlbnRzCisKK2NsYXNzIFNhbml0eUNoZWNrUGFzc2VkKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB0byBpbmRpY2F0ZSBzYW5pdHkgY2hlY2sgaGFzIHBhc3NlZAorICAgICIiIgorCitjbGFzcyBTYW5pdHlDaGVja0ZhaWxlZChFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgdG8gaW5kaWNhdGUgc2FuaXR5IGNoZWNrIGhhcyBmYWlsZWQKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnLCBuZXR3b3JrX2Vycm9yPUZhbHNlKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fbXNnID0gbXNnCisgICAgICAgIHNlbGYuX25ldHdvcmtfZXJyb3IgPSBuZXR3b3JrX2Vycm9yCisKK2NsYXNzIE5ldHdvcmtUZXN0KEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB0byBydW4gbmV0d29yayBjb25uZWN0aXZpdHkgdGVzdHMsIGVpdGhlciByYWlzZSBlcnJvcnMgb3IgZ2VuZXJhdGUgZXZlbnRzIGFzIHJldHVybiBzdGF0dXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdlbmVyYXRlZXZlbnRzID0gVHJ1ZSk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuZ2VuZXJhdGVldmVudHMgPSBnZW5lcmF0ZWV2ZW50cworCitjbGFzcyBOZXR3b3JrVGVzdFBhc3NlZChFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgdG8gaW5kaWNhdGUgbmV0d29yayB0ZXN0IGhhcyBwYXNzZWQKKyAgICAiIiIKKworY2xhc3MgTmV0d29ya1Rlc3RGYWlsZWQoRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IHRvIGluZGljYXRlIG5ldHdvcmsgdGVzdCBoYXMgZmFpbGVkCisgICAgIiIiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZXhjZXB0aW9ucy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZXhjZXB0aW9ucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTgyYzhmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9leGNlcHRpb25zLnB5CkBAIC0wLDAgKzEsOTEgQEAKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IGJiLm5hbWVkdHVwbGVfd2l0aF9hYmMKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKKworCitjbGFzcyBUcmFjZWJhY2tFbnRyeShuYW1lZHR1cGxlLmFiYyk6CisgICAgIiIiUGlja2xlYWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIHRyYWNlYmFjayBlbnRyeSIiIgorICAgIF9maWVsZHMgPSAnZmlsZW5hbWUgbGluZW5vIGZ1bmN0aW9uIGFyZ3MgY29kZV9jb250ZXh0IGluZGV4JworICAgIF9oZWFkZXIgPSAnICBGaWxlICJ7MC5maWxlbmFtZX0iLCBsaW5lIHswLmxpbmVub30sIGluIHswLmZ1bmN0aW9ufXswLmFyZ3N9JworCisgICAgZGVmIGZvcm1hdChzZWxmLCBmb3JtYXR0ZXI9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLmNvZGVfY29udGV4dDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9oZWFkZXIuZm9ybWF0KHNlbGYpICsgJ1xuJworCisgICAgICAgIGZvcm1hdHRlZCA9IFtzZWxmLl9oZWFkZXIuZm9ybWF0KHNlbGYpICsgJzpcbiddCisKKyAgICAgICAgZm9yIGxpbmVpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUoc2VsZi5jb2RlX2NvbnRleHQpOgorICAgICAgICAgICAgaWYgZm9ybWF0dGVyOgorICAgICAgICAgICAgICAgIGxpbmUgPSBmb3JtYXR0ZXIobGluZSkKKworICAgICAgICAgICAgaWYgbGluZWluZGV4ID09IHNlbGYuaW5kZXg6CisgICAgICAgICAgICAgICAgZm9ybWF0dGVkLmFwcGVuZCgnICAgID4lcycgJSBsaW5lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmb3JtYXR0ZWQuYXBwZW5kKCcgICAgICVzJyAlIGxpbmUpCisgICAgICAgIHJldHVybiBmb3JtYXR0ZWQKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJycuam9pbihzZWxmLmZvcm1hdCgpKQorCitkZWYgX2dldF9mcmFtZV9hcmdzKGZyYW1lKToKKyAgICAiIiJHZXQgdGhlIGZvcm1hdHRlZCBhcmd1bWVudHMgYW5kIGNsYXNzIChpZiBhdmFpbGFibGUpIGZvciBhIGZyYW1lIiIiCisgICAgYXJnaW5mbyA9IGluc3BlY3QuZ2V0YXJndmFsdWVzKGZyYW1lKQorCisgICAgdHJ5OgorICAgICAgICBpZiBub3QgYXJnaW5mby5hcmdzOgorICAgICAgICAgICAgcmV0dXJuICcnLCBOb25lCisgICAgIyBUaGVyZSBoYXZlIGJlZW4gcmVwb3J0cyBmcm9tIHRoZSBmaWVsZCBvZiBweXRob24gMi42IHdoaWNoIGRvZXNuJ3QgCisgICAgIyByZXR1cm4gYSBuYW1lZHR1cGxlIGhlcmUgYnV0IHNpbXBseSBhIHR1cGxlIHNvIGZhbGxiYWNrIGdyYWNlZnVsbHkgaWYKKyAgICAjIGFyZ3MgaXNuJ3QgcHJlc2VudC4KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJldHVybiAnJywgTm9uZQorCisgICAgZmlyc3RhcmcgPSBhcmdpbmZvLmFyZ3NbMF0KKyAgICBpZiBmaXJzdGFyZyA9PSAnc2VsZic6CisgICAgICAgIHNlbGYgPSBhcmdpbmZvLmxvY2Fsc1snc2VsZiddCisgICAgICAgIGNscyA9IHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKKyAgICAgICAgYXJnaW5mby5hcmdzLnBvcCgwKQorICAgICAgICBkZWwgYXJnaW5mby5sb2NhbHNbJ3NlbGYnXQorICAgIGVsc2U6CisgICAgICAgIGNscyA9IE5vbmUKKworICAgIGZvcm1hdHRlZCA9IGluc3BlY3QuZm9ybWF0YXJndmFsdWVzKCphcmdpbmZvKQorICAgIHJldHVybiBmb3JtYXR0ZWQsIGNscworCitkZWYgZXh0cmFjdF90cmFjZWJhY2sodGIsIGNvbnRleHQ9MSk6CisgICAgZnJhbWVzID0gaW5zcGVjdC5nZXRpbm5lcmZyYW1lcyh0YiwgY29udGV4dCkKKyAgICBmb3IgZnJhbWUsIGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmN0aW9uLCBjb2RlX2NvbnRleHQsIGluZGV4IGluIGZyYW1lczoKKyAgICAgICAgZm9ybWF0dGVkX2FyZ3MsIGNscyA9IF9nZXRfZnJhbWVfYXJncyhmcmFtZSkKKyAgICAgICAgaWYgY2xzOgorICAgICAgICAgICAgZnVuY3Rpb24gPSAnJXMuJXMnICUgKGNscywgZnVuY3Rpb24pCisgICAgICAgIHlpZWxkIFRyYWNlYmFja0VudHJ5KGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmN0aW9uLCBmb3JtYXR0ZWRfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9jb250ZXh0LCBpbmRleCkKKworZGVmIGZvcm1hdF9leHRyYWN0ZWQoZXh0cmFjdGVkLCBmb3JtYXR0ZXI9Tm9uZSwgbGltaXQ9Tm9uZSk6CisgICAgaWYgbGltaXQ6CisgICAgICAgIGV4dHJhY3RlZCA9IGV4dHJhY3RlZFstbGltaXQ6XQorCisgICAgZm9ybWF0dGVkID0gW10KKyAgICBmb3IgdHJhY2ViYWNraW5mbyBpbiBleHRyYWN0ZWQ6CisgICAgICAgIGZvcm1hdHRlZC5leHRlbmQodHJhY2ViYWNraW5mby5mb3JtYXQoZm9ybWF0dGVyKSkKKyAgICByZXR1cm4gZm9ybWF0dGVkCisKKworZGVmIGZvcm1hdF9leGNlcHRpb24oZXR5cGUsIHZhbHVlLCB0YiwgY29udGV4dD0xLCBsaW1pdD1Ob25lLCBmb3JtYXR0ZXI9Tm9uZSk6CisgICAgZm9ybWF0dGVkID0gWydUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nXQorCisgICAgaWYgaGFzYXR0cih0YiwgJ3RiX25leHQnKToKKyAgICAgICAgdGIgPSBleHRyYWN0X3RyYWNlYmFjayh0YiwgY29udGV4dCkKKworICAgIGZvcm1hdHRlZC5leHRlbmQoZm9ybWF0X2V4dHJhY3RlZCh0YiwgZm9ybWF0dGVyLCBsaW1pdCkpCisgICAgZm9ybWF0dGVkLmV4dGVuZCh0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KGV0eXBlLCB2YWx1ZSkpCisgICAgcmV0dXJuIGZvcm1hdHRlZAorCitkZWYgdG9fc3RyaW5nKGV4Yyk6CisgICAgaWYgaXNpbnN0YW5jZShleGMsIFN5c3RlbUV4aXQpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShleGMuY29kZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICByZXR1cm4gJ0V4aXRlZCB3aXRoICIlZCInICUgZXhjLmNvZGUKKyAgICByZXR1cm4gc3RyKGV4YykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q1M2I2MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTc4NyBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnRmV0Y2gnIGltcGxlbWVudGF0aW9ucworCitDbGFzc2VzIGZvciBvYnRhaW5pbmcgdXBzdHJlYW0gc291cmNlcyBmb3IgdGhlCitCaXRCYWtlIGJ1aWxkIHRvb2xzLgorIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDEyICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoraW1wb3J0IG9zLCByZQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IGdsb2IKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgdXJsbGliCitpbXBvcnQgdXJscGFyc2UKK2ltcG9ydCBvcGVyYXRvcgoraW1wb3J0IGJiLnBlcnNpc3RfZGF0YSwgYmIudXRpbHMKK2ltcG9ydCBiYi5jaGVja3N1bQorZnJvbSBiYiBpbXBvcnQgZGF0YQoraW1wb3J0IGJiLnByb2Nlc3MKK2ltcG9ydCBzdWJwcm9jZXNzCisKK19fdmVyc2lvbl9fID0gIjIiCitfY2hlY2tzdW1fY2FjaGUgPSBiYi5jaGVja3N1bS5GaWxlQ2hlY2tzdW1DYWNoZSgpCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLkZldGNoZXIiKQorCit0cnk6CisgICAgaW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IHBpY2tsZQorICAgIGxvZ2dlci5pbmZvKCJJbXBvcnRpbmcgY1BpY2tsZSBmYWlsZWQuICIKKyAgICAgICAgICAgICAgICAiRmFsbGluZyBiYWNrIHRvIGEgdmVyeSBzbG93IGltcGxlbWVudGF0aW9uLiIpCisKK2NsYXNzIEJCRmV0Y2hFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICAiIiJDbGFzcyBhbGwgZmV0Y2ggZXhjZXB0aW9ucyBpbmhlcml0IGZyb20iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICBzZWxmLm1zZyA9IG1lc3NhZ2UKKyAgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtZXNzYWdlKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICByZXR1cm4gc2VsZi5tc2cKKworY2xhc3MgVW50cnVzdGVkVXJsKEJCRmV0Y2hFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBlbmNvdW50ZXJpbmcgYSBob3N0IG5vdCBsaXN0ZWQgaW4gQkJfQUxMT1dFRF9ORVRXT1JLUyIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmwsIG1lc3NhZ2U9JycpOgorICAgICAgICBpZiBtZXNzYWdlOgorICAgICAgICAgICAgbXNnID0gbWVzc2FnZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnID0gIlRoZSBVUkw6ICclcycgaXMgbm90IHRydXN0ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIiAlIHVybAorICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICBCQkZldGNoRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1zZykKKyAgICAgICAgc2VsZi5hcmdzID0gKHVybCwpCisKK2NsYXNzIE1hbGZvcm1lZFVybChCQkZldGNoRXhjZXB0aW9uKToKKyAgICAiIiJFeGNlcHRpb24gcmFpc2VkIHdoZW4gZW5jb3VudGVyaW5nIGFuIGludmFsaWQgdXJsIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwgbWVzc2FnZT0nJyk6CisgICAgICAgICBpZiBtZXNzYWdlOgorICAgICAgICAgICAgIG1zZyA9IG1lc3NhZ2UKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgbXNnID0gIlRoZSBVUkw6ICclcycgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIGludGVycHJldGVkIiAlIHVybAorICAgICAgICAgc2VsZi51cmwgPSB1cmwKKyAgICAgICAgIEJCRmV0Y2hFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorICAgICAgICAgc2VsZi5hcmdzID0gKHVybCwpCisKK2NsYXNzIEZldGNoRXJyb3IoQkJGZXRjaEV4Y2VwdGlvbik6CisgICAgIiIiR2VuZXJhbCBmZXRjaGVyIGV4Y2VwdGlvbiB3aGVuIHNvbWV0aGluZyBoYXBwZW5zIGluY29ycmVjdGx5IiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIHVybCA9IE5vbmUpOgorICAgICAgICAgaWYgdXJsOgorICAgICAgICAgICAgbXNnID0gIkZldGNoZXIgZmFpbHVyZSBmb3IgVVJMOiAnJXMnLiAlcyIgJSAodXJsLCBtZXNzYWdlKQorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyA9ICJGZXRjaGVyIGZhaWx1cmU6ICVzIiAlIG1lc3NhZ2UKKyAgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgICBCQkZldGNoRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1zZykKKyAgICAgICAgIHNlbGYuYXJncyA9IChtZXNzYWdlLCB1cmwpCisKK2NsYXNzIENoZWNrc3VtRXJyb3IoRmV0Y2hFcnJvcik6CisgICAgIiIiRXhjZXB0aW9uIHdoZW4gbWlzbWF0Y2hlZCBjaGVja3N1bSBlbmNvdW50ZXJlZCIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlLCB1cmwgPSBOb25lLCBjaGVja3N1bSA9IE5vbmUpOgorICAgICAgICBzZWxmLmNoZWNrc3VtID0gY2hlY2tzdW0KKyAgICAgICAgRmV0Y2hFcnJvci5fX2luaXRfXyhzZWxmLCBtZXNzYWdlLCB1cmwpCisKK2NsYXNzIE5vQ2hlY2tzdW1FcnJvcihGZXRjaEVycm9yKToKKyAgICAiIiJFeGNlcHRpb24gd2hlbiBubyBjaGVja3N1bSBpcyBzcGVjaWZpZWQsIGJ1dCBCQl9TVFJJQ1RfQ0hFQ0tTVU0gaXMgc2V0IiIiCisKK2NsYXNzIFVucGFja0Vycm9yKEJCRmV0Y2hFeGNlcHRpb24pOgorICAgICIiIkdlbmVyYWwgZmV0Y2hlciBleGNlcHRpb24gd2hlbiBzb21ldGhpbmcgaGFwcGVucyBpbmNvcnJlY3RseSB3aGVuIHVucGFja2luZyIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlLCB1cmwpOgorICAgICAgICAgbXNnID0gIlVucGFjayBmYWlsdXJlIGZvciBVUkw6ICclcycuICVzIiAlICh1cmwsIG1lc3NhZ2UpCisgICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICAgQkJGZXRjaEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtc2cpCisgICAgICAgICBzZWxmLmFyZ3MgPSAobWVzc2FnZSwgdXJsKQorCitjbGFzcyBOb01ldGhvZEVycm9yKEJCRmV0Y2hFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiB0aGVyZSBpcyBubyBtZXRob2QgdG8gb2J0YWluIGEgc3VwcGxpZWQgdXJsIG9yIHNldCBvZiB1cmxzIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCk6CisgICAgICAgICBtc2cgPSAiQ291bGQgbm90IGZpbmQgYSBmZXRjaGVyIHdoaWNoIHN1cHBvcnRzIHRoZSBVUkw6ICclcyciICUgdXJsCisgICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICAgQkJGZXRjaEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtc2cpCisgICAgICAgICBzZWxmLmFyZ3MgPSAodXJsLCkKKworY2xhc3MgTWlzc2luZ1BhcmFtZXRlckVycm9yKEJCRmV0Y2hFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhIGZldGNoIG1ldGhvZCBpcyBtaXNzaW5nIGEgY3JpdGljYWwgcGFyYW1ldGVyIGluIHRoZSB1cmwiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWlzc2luZywgdXJsKToKKyAgICAgICAgIG1zZyA9ICJVUkw6ICclcycgaXMgbWlzc2luZyB0aGUgcmVxdWlyZWQgcGFyYW1ldGVyICclcyciICUgKHVybCwgbWlzc2luZykKKyAgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgICBzZWxmLm1pc3NpbmcgPSBtaXNzaW5nCisgICAgICAgICBCQkZldGNoRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1zZykKKyAgICAgICAgIHNlbGYuYXJncyA9IChtaXNzaW5nLCB1cmwpCisKK2NsYXNzIFBhcmFtZXRlckVycm9yKEJCRmV0Y2hFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhIHVybCBjYW5ub3QgYmUgcHJvY2Nlc3NlZCBkdWUgdG8gaW52YWxpZCBwYXJhbWV0ZXJzLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlLCB1cmwpOgorICAgICAgICAgbXNnID0gIlVSTDogJyVzJyBoYXMgaW52YWxpZCBwYXJhbWV0ZXJzLiAlcyIgJSAodXJsLCBtZXNzYWdlKQorICAgICAgICAgc2VsZi51cmwgPSB1cmwKKyAgICAgICAgIEJCRmV0Y2hFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorICAgICAgICAgc2VsZi5hcmdzID0gKG1lc3NhZ2UsIHVybCkKKworY2xhc3MgTmV0d29ya0FjY2VzcyhCQkZldGNoRXhjZXB0aW9uKToKKyAgICAiIiJFeGNlcHRpb24gcmFpc2VkIHdoZW4gbmV0d29yayBhY2Nlc3MgaXMgZGlzYWJsZWQgYnV0IGl0IGlzIHJlcXVpcmVkLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmwsIGNtZCk6CisgICAgICAgICBtc2cgPSAiTmV0d29yayBhY2Nlc3MgZGlzYWJsZWQgdGhyb3VnaCBCQl9OT19ORVRXT1JLIChvciBzZXQgaW5kaXJlY3RseSBkdWUgdG8gdXNlIG9mIEJCX0ZFVENIX1BSRU1JUlJPUk9OTFkpIGJ1dCBhY2Nlc3MgcmVxdWVzdGVkIHdpdGggY29tbWFuZCAlcyAoZm9yIHVybCAlcykiICUgKGNtZCwgdXJsKQorICAgICAgICAgc2VsZi51cmwgPSB1cmwKKyAgICAgICAgIHNlbGYuY21kID0gY21kCisgICAgICAgICBCQkZldGNoRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1zZykKKyAgICAgICAgIHNlbGYuYXJncyA9ICh1cmwsIGNtZCkKKworY2xhc3MgTm9uTG9jYWxNZXRob2QoRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmKQorCisKK2NsYXNzIFVSSShvYmplY3QpOgorICAgICIiIgorICAgIEEgY2xhc3MgcmVwcmVzZW50aW5nIGEgZ2VuZXJpYyBVUkksIHdpdGggbWV0aG9kcyBmb3IKKyAgICBhY2Nlc3NpbmcgdGhlIFVSSSBjb21wb25lbnRzLCBhbmQgc3RyaW5naWZpZXMgdG8gdGhlCisgICAgVVJJLgorCisgICAgSXQgaXMgY29uc3RydWN0ZWQgYnkgY2FsbGluZyBpdCB3aXRoIGEgVVJJLCBvciBzZXR0aW5nCisgICAgdGhlIGF0dHJpYnV0ZXMgbWFudWFsbHk6CisKKyAgICAgdXJpID0gVVJJKCJodHRwOi8vZXhhbXBsZS5jb20vIikKKworICAgICB1cmkgPSBVUkkoKQorICAgICB1cmkuc2NoZW1lID0gJ2h0dHAnCisgICAgIHVyaS5ob3N0bmFtZSA9ICdleGFtcGxlLmNvbScKKyAgICAgdXJpLnBhdGggPSAnLycKKworICAgIEl0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisKKyAgICAgICogc2NoZW1lIChyZWFkL3dyaXRlKQorICAgICAgKiB1c2VyaW5mbyAoYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24pIChyZWFkL3dyaXRlKQorICAgICAgICAqIHVzZXJuYW1lIChyZWFkL3dyaXRlKQorICAgICAgICAqIHBhc3N3b3JkIChyZWFkL3dyaXRlKQorCisgICAgICAgIE5vdGUsIHBhc3N3b3JkIGlzIGRlcHJlY2F0ZWQgYXMgb2YgUkZDIDM5ODYuCisKKyAgICAgICogaG9zdG5hbWUgKHJlYWQvd3JpdGUpCisgICAgICAqIHBvcnQgKHJlYWQvd3JpdGUpCisgICAgICAqIGhvc3Rwb3J0IChyZWFkIG9ubHkpCisgICAgICAgICJob3N0bmFtZTpwb3J0IiwgaWYgYm90aCBhcmUgc2V0LCBvdGhlcndpc2UganVzdCAiaG9zdG5hbWUiCisgICAgICAqIHBhdGggKHJlYWQvd3JpdGUpCisgICAgICAqIHBhdGhfcXVvdGVkIChyZWFkL3dyaXRlKQorICAgICAgICBBIFVSSSBxdW90ZWQgdmVyc2lvbiBvZiBwYXRoCisgICAgICAqIHBhcmFtcyAoZGljdCkgKHJlYWQvd3JpdGUpCisgICAgICAqIHF1ZXJ5IChkaWN0KSAocmVhZC93cml0ZSkKKyAgICAgICogcmVsYXRpdmUgKGJvb2wpIChyZWFkIG9ubHkpCisgICAgICAgIFRydWUgaWYgdGhpcyBpcyBhICJyZWxhdGl2ZSBVUkkiLCAoZS5nLiBmaWxlOmZvby5kaWZmKQorCisgICAgSXQgc3RyaW5naWZpZXMgdG8gdGhlIFVSSSBpdHNlbGYuCisKKyAgICBTb21lIG5vdGVzIGFib3V0IHJlbGF0aXZlIFVSSXM6IHdoaWxlIGl0J3Mgc3BlY2lmaWVkIHRoYXQKKyAgICBhIFVSSSBiZWdpbm5pbmcgd2l0aCA8c2NoZW1lPjovLyBzaG91bGQgZWl0aGVyIGJlIGRpcmVjdGx5CisgICAgZm9sbG93ZWQgYnkgYSBob3N0bmFtZSBvciBhIC8sIHRoZSBvbGQgVVJJIGhhbmRsaW5nIG9mIHRoZQorICAgIGZldGNoMiBsaWJyYXJ5IGRpZCBub3QgY29tZm9ybSB0byB0aGlzLiBUaGVyZWZvcmUsIHRoaXMgVVJJCisgICAgY2xhc3MgaGFzIHNvbWUga2x1ZGdlcyB0byBtYWtlIHN1cmUgdGhhdCBVUklzIGFyZSBwYXJzZWQgaW4KKyAgICBhIHdheSBjb21mb3JtaW5nIHRvIGJpdGJha2UncyBjdXJyZW50IHVzYWdlLiBUaGlzIFVSSSBjbGFzcworICAgIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgZmlsZTpyZWxhdGl2ZS9wYXRoLmRpZmYgKElFVEYgY29tcGxpYW50KQorICAgICBnaXQ6cmVsYXRpdmUvcGF0aC5naXQgKElFVEYgY29tcGxpYW50KQorICAgICBnaXQ6Ly8vYWJzb2x1dGUvcGF0aC5naXQgKElFVEYgY29tcGxpYW50KQorICAgICBmaWxlOi8vL2Fic29sdXRlL3BhdGguZGlmZiAoSUVURiBjb21wbGlhbnQpCisKKyAgICAgZmlsZTovL3JlbGF0aXZlL3BhdGguZGlmZiAobm90IElFVEYgY29tcGxpYW50KQorCisgICAgQnV0IGl0IGRvZXMgbm90IHN1cHBvcnQgdGhlIGZvbGxvd2luZzoKKworICAgICBmaWxlOi8vaG9zdG5hbWUvYWJzb2x1dGUvcGF0aC5kaWZmICh3b3VsZCBiZSBJRVRGIGNvbXBsaWFudCkKKworICAgIE5vdGUgdGhhdCB0aGUgbGFzdCBjYXNlIG9ubHkgYXBwbGllcyB0byBhIGxpc3Qgb2YKKyAgICAid2hpdGVsaXN0ZWQiIHNjaGVtZXMgKGN1cnJlbnRseSBvbmx5IGZpbGU6Ly8pLCB0aGF0IHJlcXVpcmVzCisgICAgaXRzIFVSSXMgdG8gbm90IGhhdmUgYSBuZXR3b3JrIGxvY2F0aW9uLgorICAgICIiIgorCisgICAgX3JlbGF0aXZlX3NjaGVtZXMgPSBbJ2ZpbGUnLCAnZ2l0J10KKyAgICBfbmV0bG9jX2ZvcmJpZGRlbiA9IFsnZmlsZSddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJpPU5vbmUpOgorICAgICAgICBzZWxmLnNjaGVtZSA9ICcnCisgICAgICAgIHNlbGYudXNlcmluZm8gPSAnJworICAgICAgICBzZWxmLmhvc3RuYW1lID0gJycKKyAgICAgICAgc2VsZi5wb3J0ID0gTm9uZQorICAgICAgICBzZWxmLl9wYXRoID0gJycKKyAgICAgICAgc2VsZi5wYXJhbXMgPSB7fQorICAgICAgICBzZWxmLnF1ZXJ5ID0ge30KKyAgICAgICAgc2VsZi5yZWxhdGl2ZSA9IEZhbHNlCisKKyAgICAgICAgaWYgbm90IHVyaToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgV2UgaGlqYWNrIHRoZSBVUkwgcGFyYW1ldGVycywgc2luY2UgdGhlIHdheSBiaXRiYWtlIHVzZXMKKyAgICAgICAgIyB0aGVtIGFyZSBub3QgcXVpdGUgUkZDIGNvbXBsaWFudC4KKyAgICAgICAgdXJpLCBwYXJhbV9zdHIgPSAodXJpLnNwbGl0KCI7IiwgMSkgKyBbTm9uZV0pWzoyXQorCisgICAgICAgIHVybHAgPSB1cmxwYXJzZS51cmxwYXJzZSh1cmkpCisgICAgICAgIHNlbGYuc2NoZW1lID0gdXJscC5zY2hlbWUKKworICAgICAgICByZXBhcnNlID0gMAorCisgICAgICAgICMgQ29lcmNlIHVybHBhcnNlIHRvIG1ha2UgVVJJIHNjaGVtZSB1c2UgbmV0bG9jCisgICAgICAgIGlmIG5vdCBzZWxmLnNjaGVtZSBpbiB1cmxwYXJzZS51c2VzX25ldGxvYzoKKyAgICAgICAgICAgIHVybHBhcnNlLnVzZXNfcGFyYW1zLmFwcGVuZChzZWxmLnNjaGVtZSkKKyAgICAgICAgICAgIHJlcGFyc2UgPSAxCisKKyAgICAgICAgIyBNYWtlIHVybHBhcnNlIGhhcHB5KC9pZXIpIGJ5IGNvbnZlcnRpbmcgbG9jYWwgcmVzb3VyY2VzCisgICAgICAgICMgdG8gUkZDIGNvbXBsaWFudCBVUkwgZm9ybWF0LiBFLmcuOgorICAgICAgICAjICAgZmlsZTovL2Zvby5kaWZmIC0+IGZpbGU6Zm9vLmRpZmYKKyAgICAgICAgaWYgdXJscC5zY2hlbWUgaW4gc2VsZi5fbmV0bG9jX2ZvcmJpZGRlbjoKKyAgICAgICAgICAgIHVyaSA9IHJlLnN1YigiKD88PTopLy8oPyEvKSIsICIiLCB1cmksIDEpCisgICAgICAgICAgICByZXBhcnNlID0gMQorCisgICAgICAgIGlmIHJlcGFyc2U6CisgICAgICAgICAgICB1cmxwID0gdXJscGFyc2UudXJscGFyc2UodXJpKQorCisgICAgICAgICMgSWRlbnRpZnkgaWYgdGhlIFVSSSBpcyByZWxhdGl2ZSBvciBub3QKKyAgICAgICAgaWYgdXJscC5zY2hlbWUgaW4gc2VsZi5fcmVsYXRpdmVfc2NoZW1lcyBhbmQgXAorICAgICAgICAgICByZS5jb21waWxlKCJeXHcrOig/IS8vKSIpLm1hdGNoKHVyaSk6CisgICAgICAgICAgICBzZWxmLnJlbGF0aXZlID0gVHJ1ZQorCisgICAgICAgIGlmIG5vdCBzZWxmLnJlbGF0aXZlOgorICAgICAgICAgICAgc2VsZi5ob3N0bmFtZSA9IHVybHAuaG9zdG5hbWUgb3IgJycKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IHVybHAucG9ydAorCisgICAgICAgICAgICBzZWxmLnVzZXJpbmZvICs9IHVybHAudXNlcm5hbWUgb3IgJycKKworICAgICAgICAgICAgaWYgdXJscC5wYXNzd29yZDoKKyAgICAgICAgICAgICAgICBzZWxmLnVzZXJpbmZvICs9ICc6JXMnICUgdXJscC5wYXNzd29yZAorCisgICAgICAgIHNlbGYucGF0aCA9IHVybGxpYi51bnF1b3RlKHVybHAucGF0aCkKKworICAgICAgICBpZiBwYXJhbV9zdHI6CisgICAgICAgICAgICBzZWxmLnBhcmFtcyA9IHNlbGYuX3BhcmFtX3N0cl9zcGxpdChwYXJhbV9zdHIsICI7IikKKyAgICAgICAgaWYgdXJscC5xdWVyeToKKyAgICAgICAgICAgIHNlbGYucXVlcnkgPSBzZWxmLl9wYXJhbV9zdHJfc3BsaXQodXJscC5xdWVyeSwgIiYiKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHVzZXJpbmZvID0gc2VsZi51c2VyaW5mbworICAgICAgICBpZiB1c2VyaW5mbzoKKyAgICAgICAgICAgIHVzZXJpbmZvICs9ICdAJworCisgICAgICAgIHJldHVybiAiJXM6JXMlcyVzJXMlcyVzIiAlICgKKyAgICAgICAgICAgIHNlbGYuc2NoZW1lLAorICAgICAgICAgICAgJycgaWYgc2VsZi5yZWxhdGl2ZSBlbHNlICcvLycsCisgICAgICAgICAgICB1c2VyaW5mbywKKyAgICAgICAgICAgIHNlbGYuaG9zdHBvcnQsCisgICAgICAgICAgICBzZWxmLnBhdGhfcXVvdGVkLAorICAgICAgICAgICAgc2VsZi5fcXVlcnlfc3RyKCksCisgICAgICAgICAgICBzZWxmLl9wYXJhbV9zdHIoKSkKKworICAgIGRlZiBfcGFyYW1fc3RyKHNlbGYpOgorICAgICAgICByZXR1cm4gKAorICAgICAgICAgICAgJycuam9pbihbJzsnLCBzZWxmLl9wYXJhbV9zdHJfam9pbihzZWxmLnBhcmFtcywgIjsiKV0pCisgICAgICAgICAgICBpZiBzZWxmLnBhcmFtcyBlbHNlICcnKQorCisgICAgZGVmIF9xdWVyeV9zdHIoc2VsZik6CisgICAgICAgIHJldHVybiAoCisgICAgICAgICAgICAnJy5qb2luKFsnPycsIHNlbGYuX3BhcmFtX3N0cl9qb2luKHNlbGYucXVlcnksICImIildKQorICAgICAgICAgICAgaWYgc2VsZi5xdWVyeSBlbHNlICcnKQorCisgICAgZGVmIF9wYXJhbV9zdHJfc3BsaXQoc2VsZiwgc3RyaW5nLCBlbG1kZWxpbSwga3ZkZWxpbT0iPSIpOgorICAgICAgICByZXQgPSB7fQorICAgICAgICBmb3IgaywgdiBpbiBbeC5zcGxpdChrdmRlbGltLCAxKSBmb3IgeCBpbiBzdHJpbmcuc3BsaXQoZWxtZGVsaW0pXToKKyAgICAgICAgICAgIHJldFtrXSA9IHYKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAgZGVmIF9wYXJhbV9zdHJfam9pbihzZWxmLCBkaWN0XywgZWxtZGVsaW0sIGt2ZGVsaW09Ij0iKToKKyAgICAgICAgcmV0dXJuIGVsbWRlbGltLmpvaW4oW2t2ZGVsaW0uam9pbihbaywgdl0pIGZvciBrLCB2IGluIGRpY3RfLml0ZW1zKCldKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGhvc3Rwb3J0KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5wb3J0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuaG9zdG5hbWUKKyAgICAgICAgcmV0dXJuICIlczolZCIgJSAoc2VsZi5ob3N0bmFtZSwgc2VsZi5wb3J0KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhdGhfcXVvdGVkKHNlbGYpOgorICAgICAgICByZXR1cm4gdXJsbGliLnF1b3RlKHNlbGYucGF0aCkKKworICAgIEBwYXRoX3F1b3RlZC5zZXR0ZXIKKyAgICBkZWYgcGF0aF9xdW90ZWQoc2VsZiwgcGF0aCk6CisgICAgICAgIHNlbGYucGF0aCA9IHVybGxpYi51bnF1b3RlKHBhdGgpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGF0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGgKKworICAgIEBwYXRoLnNldHRlcgorICAgIGRlZiBwYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICBzZWxmLl9wYXRoID0gcGF0aAorCisgICAgICAgIGlmIHJlLmNvbXBpbGUoIl4vIikubWF0Y2gocGF0aCk6CisgICAgICAgICAgICBzZWxmLnJlbGF0aXZlID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucmVsYXRpdmUgPSBUcnVlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdXNlcm5hbWUoc2VsZik6CisgICAgICAgIGlmIHNlbGYudXNlcmluZm86CisgICAgICAgICAgICByZXR1cm4gKHNlbGYudXNlcmluZm8uc3BsaXQoIjoiLCAxKSlbMF0KKyAgICAgICAgcmV0dXJuICcnCisKKyAgICBAdXNlcm5hbWUuc2V0dGVyCisgICAgZGVmIHVzZXJuYW1lKHNlbGYsIHVzZXJuYW1lKToKKyAgICAgICAgcGFzc3dvcmQgPSBzZWxmLnBhc3N3b3JkCisgICAgICAgIHNlbGYudXNlcmluZm8gPSB1c2VybmFtZQorICAgICAgICBpZiBwYXNzd29yZDoKKyAgICAgICAgICAgIHNlbGYudXNlcmluZm8gKz0gIjolcyIgJSBwYXNzd29yZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhc3N3b3JkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnVzZXJpbmZvIGFuZCAiOiIgaW4gc2VsZi51c2VyaW5mbzoKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi51c2VyaW5mby5zcGxpdCgiOiIsIDEpKVsxXQorICAgICAgICByZXR1cm4gJycKKworICAgIEBwYXNzd29yZC5zZXR0ZXIKKyAgICBkZWYgcGFzc3dvcmQoc2VsZiwgcGFzc3dvcmQpOgorICAgICAgICBzZWxmLnVzZXJpbmZvID0gIiVzOiVzIiAlIChzZWxmLnVzZXJuYW1lLCBwYXNzd29yZCkKKworZGVmIGRlY29kZXVybCh1cmwpOgorICAgICIiIkRlY29kZXMgYW4gVVJMIGludG8gdGhlIHRva2VucyAoc2NoZW1lLCBuZXR3b3JrIGxvY2F0aW9uLCBwYXRoLAorICAgIHVzZXIsIHBhc3N3b3JkLCBwYXJhbWV0ZXJzKS4KKyAgICAiIiIKKworICAgIG0gPSByZS5jb21waWxlKCcoP1A8dHlwZT5bXjpdKik6Ly8oKD9QPHVzZXI+W14vXSspQCk/KD9QPGxvY2F0aW9uPlteO10rKSg7KD9QPHBhcm0+LiopKT8nKS5tYXRjaCh1cmwpCisgICAgaWYgbm90IG06CisgICAgICAgIHJhaXNlIE1hbGZvcm1lZFVybCh1cmwpCisKKyAgICB0eXBlID0gbS5ncm91cCgndHlwZScpCisgICAgbG9jYXRpb24gPSBtLmdyb3VwKCdsb2NhdGlvbicpCisgICAgaWYgbm90IGxvY2F0aW9uOgorICAgICAgICByYWlzZSBNYWxmb3JtZWRVcmwodXJsKQorICAgIHVzZXIgPSBtLmdyb3VwKCd1c2VyJykKKyAgICBwYXJtID0gbS5ncm91cCgncGFybScpCisKKyAgICBsb2NpZHggPSBsb2NhdGlvbi5maW5kKCcvJykKKyAgICBpZiBsb2NpZHggIT0gLTEgYW5kIHR5cGUubG93ZXIoKSAhPSAnZmlsZSc6CisgICAgICAgIGhvc3QgPSBsb2NhdGlvbls6bG9jaWR4XQorICAgICAgICBwYXRoID0gbG9jYXRpb25bbG9jaWR4Ol0KKyAgICBlbHNlOgorICAgICAgICBob3N0ID0gIiIKKyAgICAgICAgcGF0aCA9IGxvY2F0aW9uCisgICAgaWYgdXNlcjoKKyAgICAgICAgbSA9IHJlLmNvbXBpbGUoJyg/UDx1c2VyPlteOl0rKSg6Pyg/UDxwc3dkPi4qKSknKS5tYXRjaCh1c2VyKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgdXNlciA9IG0uZ3JvdXAoJ3VzZXInKQorICAgICAgICAgICAgcHN3ZCA9IG0uZ3JvdXAoJ3Bzd2QnKQorICAgIGVsc2U6CisgICAgICAgIHVzZXIgPSAnJworICAgICAgICBwc3dkID0gJycKKworICAgIHAgPSB7fQorICAgIGlmIHBhcm06CisgICAgICAgIGZvciBzIGluIHBhcm0uc3BsaXQoJzsnKToKKyAgICAgICAgICAgIGlmIHM6CisgICAgICAgICAgICAgICAgaWYgbm90ICc9JyBpbiBzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBNYWxmb3JtZWRVcmwodXJsLCAiVGhlIFVSTDogJyVzJyBpcyBpbnZhbGlkOiBwYXJhbWV0ZXIgJXMgZG9lcyBub3Qgc3BlY2lmeSBhIHZhbHVlIChtaXNzaW5nICc9JykiICUgKHVybCwgcykpCisgICAgICAgICAgICAgICAgczEsIHMyID0gcy5zcGxpdCgnPScpCisgICAgICAgICAgICAgICAgcFtzMV0gPSBzMgorCisgICAgcmV0dXJuIHR5cGUsIGhvc3QsIHVybGxpYi51bnF1b3RlKHBhdGgpLCB1c2VyLCBwc3dkLCBwCisKK2RlZiBlbmNvZGV1cmwoZGVjb2RlZCk6CisgICAgIiIiRW5jb2RlcyBhIFVSTCBmcm9tIHRva2VucyAoc2NoZW1lLCBuZXR3b3JrIGxvY2F0aW9uLCBwYXRoLAorICAgIHVzZXIsIHBhc3N3b3JkLCBwYXJhbWV0ZXJzKS4KKyAgICAiIiIKKworICAgIHR5cGUsIGhvc3QsIHBhdGgsIHVzZXIsIHBzd2QsIHAgPSBkZWNvZGVkCisKKyAgICBpZiBub3QgcGF0aDoKKyAgICAgICAgcmFpc2UgTWlzc2luZ1BhcmFtZXRlckVycm9yKCdwYXRoJywgImVuY29kZWQgZnJvbSB0aGUgZGF0YSAlcyIgJSBzdHIoZGVjb2RlZCkpCisgICAgaWYgbm90IHR5cGU6CisgICAgICAgIHJhaXNlIE1pc3NpbmdQYXJhbWV0ZXJFcnJvcigndHlwZScsICJlbmNvZGVkIGZyb20gdGhlIGRhdGEgJXMiICUgc3RyKGRlY29kZWQpKQorICAgIHVybCA9ICclczovLycgJSB0eXBlCisgICAgaWYgdXNlciBhbmQgdHlwZSAhPSAiZmlsZSI6CisgICAgICAgIHVybCArPSAiJXMiICUgdXNlcgorICAgICAgICBpZiBwc3dkOgorICAgICAgICAgICAgdXJsICs9ICI6JXMiICUgcHN3ZAorICAgICAgICB1cmwgKz0gIkAiCisgICAgaWYgaG9zdCBhbmQgdHlwZSAhPSAiZmlsZSI6CisgICAgICAgIHVybCArPSAiJXMiICUgaG9zdAorICAgICMgU3RhbmRhcmRpc2UgcGF0aCB0byBlbnN1cmUgY29tcGFyaXNvbnMgd29yaworICAgIHdoaWxlICcvLycgaW4gcGF0aDoKKyAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgiLy8iLCAiLyIpCisgICAgdXJsICs9ICIlcyIgJSB1cmxsaWIucXVvdGUocGF0aCkKKyAgICBpZiBwOgorICAgICAgICBmb3IgcGFybSBpbiBwOgorICAgICAgICAgICAgdXJsICs9ICI7JXM9JXMiICUgKHBhcm0sIHBbcGFybV0pCisKKyAgICByZXR1cm4gdXJsCisKK2RlZiB1cmlfcmVwbGFjZSh1ZCwgdXJpX2ZpbmQsIHVyaV9yZXBsYWNlLCByZXBsYWNlbWVudHMsIGQpOgorICAgIGlmIG5vdCB1ZC51cmwgb3Igbm90IHVyaV9maW5kIG9yIG5vdCB1cmlfcmVwbGFjZToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJ1cmlfcmVwbGFjZTogcGFzc2VkIGFuIHVuZGVmaW5lZCB2YWx1ZSwgbm90IHJlcGxhY2luZyIpCisgICAgICAgIHJldHVybiBOb25lCisgICAgdXJpX2RlY29kZWQgPSBsaXN0KGRlY29kZXVybCh1ZC51cmwpKQorICAgIHVyaV9maW5kX2RlY29kZWQgPSBsaXN0KGRlY29kZXVybCh1cmlfZmluZCkpCisgICAgdXJpX3JlcGxhY2VfZGVjb2RlZCA9IGxpc3QoZGVjb2RldXJsKHVyaV9yZXBsYWNlKSkKKyAgICBsb2dnZXIuZGVidWcoMiwgIkZvciB1cmwgJXMgY29tcGFyaW5nICVzIHRvICVzIiAlICh1cmlfZGVjb2RlZCwgdXJpX2ZpbmRfZGVjb2RlZCwgdXJpX3JlcGxhY2VfZGVjb2RlZCkpCisgICAgcmVzdWx0X2RlY29kZWQgPSBbJycsICcnLCAnJywgJycsICcnLCB7fV0KKyAgICBmb3IgbG9jLCBpIGluIGVudW1lcmF0ZSh1cmlfZmluZF9kZWNvZGVkKToKKyAgICAgICAgcmVzdWx0X2RlY29kZWRbbG9jXSA9IHVyaV9kZWNvZGVkW2xvY10KKyAgICAgICAgcmVnZXhwID0gaQorICAgICAgICBpZiBsb2MgPT0gMCBhbmQgcmVnZXhwIGFuZCBub3QgcmVnZXhwLmVuZHN3aXRoKCIkIik6CisgICAgICAgICAgICAjIExlYXZpbmcgdGhlIHR5cGUgdW5hbmNob3JlZCBjYW4gbWVhbiAiaHR0cHMiIG1hdGNoaW5nICJmaWxlIiBjYW4gYmVjb21lICJmaWxlcyIKKyAgICAgICAgICAgICMgd2hpY2ggaXMgY2xlYXJseSB1bmRlc2lyYWJsZS4KKyAgICAgICAgICAgIHJlZ2V4cCArPSAiJCIKKyAgICAgICAgaWYgbG9jID09IDU6CisgICAgICAgICAgICAjIEhhbmRsZSBVUkwgcGFyYW1ldGVycworICAgICAgICAgICAgaWYgaToKKyAgICAgICAgICAgICAgICAjIEFueSBzcGVjaWZpZWQgVVJMIHBhcmFtZXRlcnMgbXVzdCBtYXRjaAorICAgICAgICAgICAgICAgIGZvciBrIGluIHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXToKKyAgICAgICAgICAgICAgICAgICAgaWYgdXJpX2RlY29kZWRbbG9jXVtrXSAhPSB1cmlfcmVwbGFjZV9kZWNvZGVkW2xvY11ba106CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgIyBPdmVyd3JpdGUgYW55IHNwZWNpZmllZCByZXBsYWNlbWVudCBwYXJhbWV0ZXJzCisgICAgICAgICAgICBmb3IgayBpbiB1cmlfcmVwbGFjZV9kZWNvZGVkW2xvY106CisgICAgICAgICAgICAgICAgZm9yIGwgaW4gcmVwbGFjZW1lbnRzOgorICAgICAgICAgICAgICAgICAgICB1cmlfcmVwbGFjZV9kZWNvZGVkW2xvY11ba10gPSB1cmlfcmVwbGFjZV9kZWNvZGVkW2xvY11ba10ucmVwbGFjZShsLCByZXBsYWNlbWVudHNbbF0pCisgICAgICAgICAgICAgICAgcmVzdWx0X2RlY29kZWRbbG9jXVtrXSA9IHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXVtrXQorICAgICAgICBlbGlmIChyZS5tYXRjaChyZWdleHAsIHVyaV9kZWNvZGVkW2xvY10pKToKKyAgICAgICAgICAgIGlmIG5vdCB1cmlfcmVwbGFjZV9kZWNvZGVkW2xvY106CisgICAgICAgICAgICAgICAgcmVzdWx0X2RlY29kZWRbbG9jXSA9ICIiICAgIAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmb3IgayBpbiByZXBsYWNlbWVudHM6CisgICAgICAgICAgICAgICAgICAgIHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXSA9IHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXS5yZXBsYWNlKGssIHJlcGxhY2VtZW50c1trXSkKKyAgICAgICAgICAgICAgICAjYmIubm90ZSgiJXMgJXMgJXMiICUgKHJlZ2V4cCwgdXJpX3JlcGxhY2VfZGVjb2RlZFtsb2NdLCB1cmlfZGVjb2RlZFtsb2NdKSkKKyAgICAgICAgICAgICAgICByZXN1bHRfZGVjb2RlZFtsb2NdID0gcmUuc3ViKHJlZ2V4cCwgdXJpX3JlcGxhY2VfZGVjb2RlZFtsb2NdLCB1cmlfZGVjb2RlZFtsb2NdKQorICAgICAgICAgICAgaWYgbG9jID09IDI6CisgICAgICAgICAgICAgICAgIyBIYW5kbGUgcGF0aCBtYW5pcHVsYXRpb25zCisgICAgICAgICAgICAgICAgYmFzZW5hbWUgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgdXJpX2RlY29kZWRbMF0gIT0gdXJpX3JlcGxhY2VfZGVjb2RlZFswXSBhbmQgdWQubWlycm9ydGFyYmFsbDoKKyAgICAgICAgICAgICAgICAgICAgIyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiB1cmwgdHlwZXMgZGlmZmVyLCBtdXN0IGJlIGEgbWlycm9ydGFyYmFsbCBtYXBwaW5nCisgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZSh1ZC5taXJyb3J0YXJiYWxsKQorICAgICAgICAgICAgICAgICAgICAjIEtpbGwgcGFyYW1ldGVycywgdGhleSBtYWtlIG5vIHNlbnNlIGZvciBtaXJyb3IgdGFyYmFsbHMKKyAgICAgICAgICAgICAgICAgICAgdXJpX2RlY29kZWRbNV0gPSB7fQorICAgICAgICAgICAgICAgIGVsaWYgdWQubG9jYWxwYXRoIGFuZCB1ZC5tZXRob2Quc3VwcG9ydHNfY2hlY2tzdW0odWQpOgorICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodWQubG9jYWxwYXRoKQorICAgICAgICAgICAgICAgIGlmIGJhc2VuYW1lIGFuZCBub3QgcmVzdWx0X2RlY29kZWRbbG9jXS5lbmRzd2l0aChiYXNlbmFtZSk6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9kZWNvZGVkW2xvY10gPSBvcy5wYXRoLmpvaW4ocmVzdWx0X2RlY29kZWRbbG9jXSwgYmFzZW5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgIHJlc3VsdCA9IGVuY29kZXVybChyZXN1bHRfZGVjb2RlZCkKKyAgICBpZiByZXN1bHQgPT0gdWQudXJsOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIGxvZ2dlci5kZWJ1ZygyLCAiRm9yIHVybCAlcyByZXR1cm5pbmcgJXMiICUgKHVkLnVybCwgcmVzdWx0KSkKKyAgICByZXR1cm4gcmVzdWx0CisKK21ldGhvZHMgPSBbXQordXJsZGF0YV9jYWNoZSA9IHt9CitzYXZlZF9oZWFkcmV2cyA9IHt9CisKK2RlZiBmZXRjaGVyX2luaXQoZCk6CisgICAgIiIiCisgICAgQ2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIGZldGNoZXJzIG9uY2UgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBrbm93bi4KKyAgICBDYWxscyBiZWZvcmUgdGhpcyBtdXN0IG5vdCBoaXQgdGhlIGNhY2hlLgorICAgICIiIgorICAgICMgV2hlbiB0byBkcm9wIFNDTSBoZWFkIHJldmlzaW9ucyBjb250cm9sbGVkIGJ5IHVzZXIgcG9saWN5CisgICAgc3JjcmV2X3BvbGljeSA9IGQuZ2V0VmFyKCdCQl9TUkNSRVZfUE9MSUNZJywgVHJ1ZSkgb3IgImNsZWFyIgorICAgIGlmIHNyY3Jldl9wb2xpY3kgPT0gImNhY2hlIjoKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJLZWVwaW5nIFNSQ1JFViBjYWNoZSBkdWUgdG8gY2FjaGUgcG9saWN5IG9mOiAlcyIsIHNyY3Jldl9wb2xpY3kpCisgICAgZWxpZiBzcmNyZXZfcG9saWN5ID09ICJjbGVhciI6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiQ2xlYXJpbmcgU1JDUkVWIGNhY2hlIGR1ZSB0byBjYWNoZSBwb2xpY3kgb2Y6ICVzIiwgc3JjcmV2X3BvbGljeSkKKyAgICAgICAgcmV2cyA9IGJiLnBlcnNpc3RfZGF0YS5wZXJzaXN0KCdCQl9VUklfSEVBRFJFVlMnLCBkKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5mZXRjaDIuc2F2ZWRfaGVhZHJldnMgPSByZXZzLml0ZW1zKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICByZXZzLmNsZWFyKCkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJJbnZhbGlkIFNSQ1JFViBjYWNoZSBwb2xpY3kgb2Y6ICVzIiAlIHNyY3Jldl9wb2xpY3kpCisKKyAgICBfY2hlY2tzdW1fY2FjaGUuaW5pdF9jYWNoZShkKQorCisgICAgZm9yIG0gaW4gbWV0aG9kczoKKyAgICAgICAgaWYgaGFzYXR0cihtLCAiaW5pdCIpOgorICAgICAgICAgICAgbS5pbml0KGQpCisKK2RlZiBmZXRjaGVyX3BhcnNlX3NhdmUoZCk6CisgICAgX2NoZWNrc3VtX2NhY2hlLnNhdmVfZXh0cmFzKGQpCisKK2RlZiBmZXRjaGVyX3BhcnNlX2RvbmUoZCk6CisgICAgX2NoZWNrc3VtX2NhY2hlLnNhdmVfbWVyZ2UoZCkKKworZGVmIGZldGNoZXJfY29tcGFyZV9yZXZpc2lvbnMoZCk6CisgICAgIiIiCisgICAgQ29tcGFyZSB0aGUgcmV2aXNpb25zIGluIHRoZSBwZXJzaXN0YW50IGNhY2hlIHdpdGggY3VycmVudCB2YWx1ZXMgYW5kCisgICAgcmV0dXJuIHRydWUvZmFsc2Ugb24gd2hldGhlciB0aGV5J3ZlIGNoYW5nZWQuCisgICAgIiIiCisKKyAgICBkYXRhID0gYmIucGVyc2lzdF9kYXRhLnBlcnNpc3QoJ0JCX1VSSV9IRUFEUkVWUycsIGQpLml0ZW1zKCkKKyAgICBkYXRhMiA9IGJiLmZldGNoMi5zYXZlZF9oZWFkcmV2cworCisgICAgY2hhbmdlZCA9IEZhbHNlCisgICAgZm9yIGtleSBpbiBkYXRhOgorICAgICAgICBpZiBrZXkgbm90IGluIGRhdGEyIG9yIGRhdGEyW2tleV0gIT0gZGF0YVtrZXldOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICIlcyBjaGFuZ2VkIiwga2V5KQorICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIiVzIGRpZCBub3QgY2hhbmdlIiwga2V5KQorICAgIHJldHVybiBGYWxzZQorCitkZWYgbWlycm9yX2Zyb21fc3RyaW5nKGRhdGEpOgorICAgIHJldHVybiBbIGkuc3BsaXQoKSBmb3IgaSBpbiAoZGF0YSBvciAiIikucmVwbGFjZSgnXFxuJywnXG4nKS5zcGxpdCgnXG4nKSBpZiBpIF0KKworZGVmIHZlcmlmeV9jaGVja3N1bSh1ZCwgZCwgcHJlY29tcHV0ZWQ9e30pOgorICAgICIiIgorICAgIHZlcmlmeSB0aGUgTUQ1IGFuZCBTSEEyNTYgY2hlY2tzdW0gZm9yIGRvd25sb2FkZWQgc3JjCisKKyAgICBSYWlzZXMgYSBGZXRjaEVycm9yIGlmIG9uZSBvciBib3RoIG9mIHRoZSBTUkNfVVJJIGNoZWNrc3VtcyBkbyBub3QgbWF0Y2gKKyAgICB0aGUgZG93bmxvYWRlZCBmaWxlLCBvciBpZiBCQl9TVFJJQ1RfQ0hFQ0tTVU0gaXMgc2V0IGFuZCB0aGVyZSBhcmUgbm8KKyAgICBjaGVja3N1bXMgc3BlY2lmaWVkLgorCisgICAgUmV0dXJucyBhIGRpY3Qgb2YgY2hlY2tzdW1zIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiBhIGRvbmUgc3RhbXAgZmlsZSBhbmQKKyAgICBwYXNzZWQgaW4gYXMgcHJlY29tcHV0ZWQgcGFyYW1ldGVyIGluIGEgbGF0ZXIgY2FsbCB0byBhdm9pZCByZS1jb21wdXRpbmcKKyAgICB0aGUgY2hlY2tzdW1zIGZyb20gdGhlIGZpbGUuIFRoaXMgYWxsb3dzIHZlcmlmeWluZyB0aGUgY2hlY2tzdW1zIG9mIHRoZQorICAgIGZpbGUgYWdhaW5zdCB0aG9zZSBpbiB0aGUgcmVjaXBlIGVhY2ggdGltZSwgcmF0aGVyIHRoYW4gb25seSBhZnRlcgorICAgIGRvd25sb2FkaW5nLiBTZWUgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD01NTcxLgorICAgICIiIgorCisgICAgX01ENV9LRVkgPSAibWQ1IgorICAgIF9TSEEyNTZfS0VZID0gInNoYTI1NiIKKworICAgIGlmIHVkLmlnbm9yZV9jaGVja3N1bXMgb3Igbm90IHVkLm1ldGhvZC5zdXBwb3J0c19jaGVja3N1bSh1ZCk6CisgICAgICAgIHJldHVybiB7fQorCisgICAgaWYgX01ENV9LRVkgaW4gcHJlY29tcHV0ZWQ6CisgICAgICAgIG1kNWRhdGEgPSBwcmVjb21wdXRlZFtfTUQ1X0tFWV0KKyAgICBlbHNlOgorICAgICAgICBtZDVkYXRhID0gYmIudXRpbHMubWQ1X2ZpbGUodWQubG9jYWxwYXRoKQorCisgICAgaWYgX1NIQTI1Nl9LRVkgaW4gcHJlY29tcHV0ZWQ6CisgICAgICAgIHNoYTI1NmRhdGEgPSBwcmVjb21wdXRlZFtfU0hBMjU2X0tFWV0KKyAgICBlbHNlOgorICAgICAgICBzaGEyNTZkYXRhID0gYmIudXRpbHMuc2hhMjU2X2ZpbGUodWQubG9jYWxwYXRoKQorCisgICAgaWYgdWQubWV0aG9kLnJlY29tbWVuZHNfY2hlY2tzdW0odWQpOgorICAgICAgICAjIElmIHN0cmljdCBjaGVja2luZyBlbmFibGVkIGFuZCBuZWl0aGVyIHN1bSBkZWZpbmVkLCByYWlzZSBlcnJvcgorICAgICAgICBzdHJpY3QgPSBkLmdldFZhcigiQkJfU1RSSUNUX0NIRUNLU1VNIiwgVHJ1ZSkgb3IgIjAiCisgICAgICAgIGlmIChzdHJpY3QgPT0gIjEiKSBhbmQgbm90ICh1ZC5tZDVfZXhwZWN0ZWQgb3IgdWQuc2hhMjU2X2V4cGVjdGVkKToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignTm8gY2hlY2tzdW0gc3BlY2lmaWVkIGZvciAlcywgcGxlYXNlIGFkZCBhdCBsZWFzdCBvbmUgdG8gdGhlIHJlY2lwZTpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUklbJXNdID0gIiVzIlxuU1JDX1VSSVslc10gPSAiJXMiJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1ZC5sb2NhbHBhdGgsIHVkLm1kNV9uYW1lLCBtZDVkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWQuc2hhMjU2X25hbWUsIHNoYTI1NmRhdGEpKQorICAgICAgICAgICAgcmFpc2UgTm9DaGVja3N1bUVycm9yKCdNaXNzaW5nIFNSQ19VUkkgY2hlY2tzdW0nLCB1ZC51cmwpCisKKyAgICAgICAgIyBMb2cgbWlzc2luZyBzdW1zIHNvIHVzZXIgY2FuIG1vcmUgZWFzaWx5IGFkZCB0aGVtCisgICAgICAgIGlmIG5vdCB1ZC5tZDVfZXhwZWN0ZWQ6CisgICAgICAgICAgICBsb2dnZXIud2FybignTWlzc2luZyBtZDUgU1JDX1VSSSBjaGVja3N1bSBmb3IgJXMsIGNvbnNpZGVyIGFkZGluZyB0byB0aGUgcmVjaXBlOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUklbJXNdID0gIiVzIicsCisgICAgICAgICAgICAgICAgICAgICAgICB1ZC5sb2NhbHBhdGgsIHVkLm1kNV9uYW1lLCBtZDVkYXRhKQorCisgICAgICAgIGlmIG5vdCB1ZC5zaGEyNTZfZXhwZWN0ZWQ6CisgICAgICAgICAgICBsb2dnZXIud2FybignTWlzc2luZyBzaGEyNTYgU1JDX1VSSSBjaGVja3N1bSBmb3IgJXMsIGNvbnNpZGVyIGFkZGluZyB0byB0aGUgcmVjaXBlOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUklbJXNdID0gIiVzIicsCisgICAgICAgICAgICAgICAgICAgICAgICB1ZC5sb2NhbHBhdGgsIHVkLnNoYTI1Nl9uYW1lLCBzaGEyNTZkYXRhKQorCisgICAgbWQ1bWlzbWF0Y2ggPSBGYWxzZQorICAgIHNoYTI1Nm1pc21hdGNoID0gRmFsc2UKKworICAgIGlmIHVkLm1kNV9leHBlY3RlZCAhPSBtZDVkYXRhOgorICAgICAgICBtZDVtaXNtYXRjaCA9IFRydWUKKworICAgIGlmIHVkLnNoYTI1Nl9leHBlY3RlZCAhPSBzaGEyNTZkYXRhOgorICAgICAgICBzaGEyNTZtaXNtYXRjaCA9IFRydWUKKworICAgICMgV2Ugd2FudCB0byBhbGVydCB0aGUgdXNlciBpZiBhIGNoZWNrc3VtIGlzIGRlZmluZWQgaW4gdGhlIHJlY2lwZSBidXQKKyAgICAjIGl0IGRvZXMgbm90IG1hdGNoLgorICAgIG1zZyA9ICIiCisgICAgbWlzbWF0Y2ggPSBGYWxzZQorICAgIGlmIG1kNW1pc21hdGNoIGFuZCB1ZC5tZDVfZXhwZWN0ZWQ6CisgICAgICAgIG1zZyA9IG1zZyArICJcbkZpbGU6ICclcycgaGFzICVzIGNoZWNrc3VtICVzIHdoZW4gJXMgd2FzIGV4cGVjdGVkIiAlICh1ZC5sb2NhbHBhdGgsICdtZDUnLCBtZDVkYXRhLCB1ZC5tZDVfZXhwZWN0ZWQpCisgICAgICAgIG1pc21hdGNoID0gVHJ1ZTsKKworICAgIGlmIHNoYTI1Nm1pc21hdGNoIGFuZCB1ZC5zaGEyNTZfZXhwZWN0ZWQ6CisgICAgICAgIG1zZyA9IG1zZyArICJcbkZpbGU6ICclcycgaGFzICVzIGNoZWNrc3VtICVzIHdoZW4gJXMgd2FzIGV4cGVjdGVkIiAlICh1ZC5sb2NhbHBhdGgsICdzaGEyNTYnLCBzaGEyNTZkYXRhLCB1ZC5zaGEyNTZfZXhwZWN0ZWQpCisgICAgICAgIG1pc21hdGNoID0gVHJ1ZTsKKworICAgIGlmIG1pc21hdGNoOgorICAgICAgICBtc2cgPSBtc2cgKyAnXG5JZiB0aGlzIGNoYW5nZSBpcyBleHBlY3RlZCAoZS5nLiB5b3UgaGF2ZSB1cGdyYWRlZCB0byBhIG5ldyB2ZXJzaW9uIHdpdGhvdXQgdXBkYXRpbmcgdGhlIGNoZWNrc3VtcykgdGhlbiB5b3UgY2FuIHVzZSB0aGVzZSBsaW5lcyB3aXRoaW4gdGhlIHJlY2lwZTpcblNSQ19VUklbJXNdID0gIiVzIlxuU1JDX1VSSVslc10gPSAiJXMiXG5PdGhlcndpc2UgeW91IHNob3VsZCByZXRyeSB0aGUgZG93bmxvYWQgYW5kL29yIGNoZWNrIHdpdGggdXBzdHJlYW0gdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaWxlIGhhcyBiZWNvbWUgY29ycnVwdGVkIG9yIG90aGVyd2lzZSB1bmV4cGVjdGVkbHkgbW9kaWZpZWQuXG4nICUgKHVkLm1kNV9uYW1lLCBtZDVkYXRhLCB1ZC5zaGEyNTZfbmFtZSwgc2hhMjU2ZGF0YSkKKworICAgIGlmIGxlbihtc2cpOgorICAgICAgICByYWlzZSBDaGVja3N1bUVycm9yKCdDaGVja3N1bSBtaXNtYXRjaCElcycgJSBtc2csIHVkLnVybCwgbWQ1ZGF0YSkKKworICAgIHJldHVybiB7CisgICAgICAgIF9NRDVfS0VZOiBtZDVkYXRhLAorICAgICAgICBfU0hBMjU2X0tFWTogc2hhMjU2ZGF0YQorICAgIH0KKworCitkZWYgdmVyaWZ5X2RvbmVzdGFtcCh1ZCwgZCwgb3JpZ3VkPU5vbmUpOgorICAgICIiIgorICAgIENoZWNrIHdoZXRoZXIgdGhlIGRvbmUgc3RhbXAgZmlsZSBoYXMgdGhlIHJpZ2h0IGNoZWNrc3VtcyAoaWYgdGhlIGZldGNoCisgICAgbWV0aG9kIHN1cHBvcnRzIHRoZW0pLiBJZiBpdCBkb2Vzbid0LCBkZWxldGUgdGhlIGRvbmUgc3RhbXAgYW5kIGZvcmNlCisgICAgYSByZS1kb3dubG9hZC4KKworICAgIFJldHVybnMgVHJ1ZSwgaWYgdGhlIGRvbmVzdGFtcCBleGlzdHMgYW5kIGlzIHZhbGlkLCBGYWxzZSBvdGhlcndpc2UuIFdoZW4KKyAgICByZXR1cm5pbmcgRmFsc2UsIGFueSBleGlzdGluZyBkb25lIHN0YW1wcyBhcmUgcmVtb3ZlZC4KKyAgICAiIiIKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQuZG9uZXN0YW1wKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiAobm90IHVkLm1ldGhvZC5zdXBwb3J0c19jaGVja3N1bSh1ZCkgb3IKKyAgICAgICAgKG9yaWd1ZCBhbmQgbm90IG9yaWd1ZC5tZXRob2Quc3VwcG9ydHNfY2hlY2tzdW0ob3JpZ3VkKSkpOgorICAgICAgICAjIGRvbmUgc3RhbXAgZXhpc3RzLCBjaGVja3N1bXMgbm90IHN1cHBvcnRlZDsgYXNzdW1lIHRoZSBsb2NhbCBmaWxlIGlzCisgICAgICAgICMgY3VycmVudAorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHVkLmxvY2FscGF0aCk6CisgICAgICAgICMgZG9uZSBzdGFtcCBleGlzdHMsIGJ1dCB0aGUgZG93bmxvYWRlZCBmaWxlIGRvZXMgbm90OyB0aGUgZG9uZSBzdGFtcAorICAgICAgICAjIG11c3QgYmUgaW5jb3JyZWN0LCByZS10cmlnZ2VyIHRoZSBkb3dubG9hZAorICAgICAgICBiYi51dGlscy5yZW1vdmUodWQuZG9uZXN0YW1wKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHByZWNvbXB1dGVkX2NoZWNrc3VtcyA9IHt9CisgICAgIyBPbmx5IHJlLXVzZSB0aGUgcHJlY29tcHV0ZWQgY2hlY2tzdW1zIGlmIHRoZSBkb25lc3RhbXAgaXMgbmV3ZXIgdGhhbiB0aGUKKyAgICAjIGZpbGUuIERvIG5vdCByZWx5IG9uIHRoZSBtdGltZSBvZiBkaXJlY3RvcmllcywgdGhvdWdoLiBJZiB1ZC5sb2NhbHBhdGggaXMKKyAgICAjIGEgZGlyZWN0b3J5LCB0aGVyZSB3aWxsIHByb2JhYmx5IG5vdCBiZSBhbnkgY2hlY2tzdW1zIGFueXdheS4KKyAgICBpZiAob3MucGF0aC5pc2Rpcih1ZC5sb2NhbHBhdGgpIG9yCisgICAgICAgICAgICBvcy5wYXRoLmdldG10aW1lKHVkLmxvY2FscGF0aCkgPCBvcy5wYXRoLmdldG10aW1lKHVkLmRvbmVzdGFtcCkpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4odWQuZG9uZXN0YW1wLCAicmIiKSBhcyBjYWNoZWZpbGU6CisgICAgICAgICAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5VbnBpY2tsZXIoY2FjaGVmaWxlKQorICAgICAgICAgICAgICAgIHByZWNvbXB1dGVkX2NoZWNrc3Vtcy51cGRhdGUocGlja2xlZC5sb2FkKCkpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICMgQXZvaWQgdGhlIHdhcm5pbmdzIG9uIHRoZSB1cGdyYWRlIHBhdGggZnJvbSBlbXRweSBkb25lIHN0YW1wCisgICAgICAgICAgICAjIGZpbGVzIHRvIHRob3NlIGNvbnRhaW5pbmcgdGhlIGNoZWNrc3Vtcy4KKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUsIEVPRkVycm9yKToKKyAgICAgICAgICAgICAgICAjIElnbm9yZSBlcnJvcnMsIHRoZXkgYXJlbid0IGZhdGFsCisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIkNvdWxkbid0IGxvYWQgY2hlY2tzdW1zIGZyb20gZG9uZXN0YW1wICVzOiAlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihtc2c6ICVzKSIgJSAodWQuZG9uZXN0YW1wLCB0eXBlKGUpLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihlKSkpCisKKyAgICB0cnk6CisgICAgICAgIGNoZWNrc3VtcyA9IHZlcmlmeV9jaGVja3N1bSh1ZCwgZCwgcHJlY29tcHV0ZWRfY2hlY2tzdW1zKQorICAgICAgICAjIElmIHRoZSBjYWNoZSBmaWxlIGRpZCBub3QgaGF2ZSB0aGUgY2hlY2tzdW1zLCBjb21wdXRlIGFuZCBzdG9yZSB0aGVtCisgICAgICAgICMgYXMgYW4gdXBncmFkZSBwYXRoIGZyb20gdGhlIHByZXZpb3VzIGRvbmUgc3RhbXAgZmlsZSBmb3JtYXQuCisgICAgICAgIGlmIGNoZWNrc3VtcyAhPSBwcmVjb21wdXRlZF9jaGVja3N1bXM6CisgICAgICAgICAgICB3aXRoIG9wZW4odWQuZG9uZXN0YW1wLCAid2IiKSBhcyBjYWNoZWZpbGU6CisgICAgICAgICAgICAgICAgcCA9IHBpY2tsZS5QaWNrbGVyKGNhY2hlZmlsZSwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpCisgICAgICAgICAgICAgICAgcC5kdW1wKGNoZWNrc3VtcykKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBleGNlcHQgQ2hlY2tzdW1FcnJvciBhcyBlOgorICAgICAgICAjIENoZWNrc3VtcyBmYWlsZWQgdG8gdmVyaWZ5LCB0cmlnZ2VyIHJlLWRvd25sb2FkIGFuZCByZW1vdmUgdGhlCisgICAgICAgICMgaW5jb3JyZWN0IHN0YW1wIGZpbGUuCisgICAgICAgIGxvZ2dlci53YXJuKCJDaGVja3N1bSBtaXNtYXRjaCBmb3IgbG9jYWwgZmlsZSAlc1xuIgorICAgICAgICAgICAgICAgICAgICAiQ2xlYW5pbmcgYW5kIHRyeWluZyBhZ2Fpbi4iICUgdWQubG9jYWxwYXRoKQorICAgICAgICByZW5hbWVfYmFkX2NoZWNrc3VtKHVkLCBlLmNoZWNrc3VtKQorICAgICAgICBiYi51dGlscy5yZW1vdmUodWQuZG9uZXN0YW1wKQorICAgIHJldHVybiBGYWxzZQorCisKK2RlZiB1cGRhdGVfc3RhbXAodWQsIGQpOgorICAgICIiIgorICAgICAgICBkb25lc3RhbXAgaXMgZmlsZSBzdGFtcCBpbmRpY2F0aW5nIHRoZSB3aG9sZSBmZXRjaGluZyBpcyBkb25lCisgICAgICAgIHRoaXMgZnVuY3Rpb24gdXBkYXRlIHRoZSBzdGFtcCBhZnRlciB2ZXJpZnlpbmcgdGhlIGNoZWNrc3VtCisgICAgIiIiCisgICAgaWYgb3MucGF0aC5leGlzdHModWQuZG9uZXN0YW1wKToKKyAgICAgICAgIyBUb3VjaCB0aGUgZG9uZSBzdGFtcCBmaWxlIHRvIHNob3cgYWN0aXZlIHVzZSBvZiB0aGUgZG93bmxvYWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudXRpbWUodWQuZG9uZXN0YW1wLCBOb25lKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAjIEVycm9ycyBhcmVuJ3QgZmF0YWwgaGVyZQorICAgICAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGNoZWNrc3VtcyA9IHZlcmlmeV9jaGVja3N1bSh1ZCwgZCkKKyAgICAgICAgIyBTdG9yZSB0aGUgY2hlY2tzdW1zIGZvciBsYXRlciByZS12ZXJpZmljYXRpb24gYWdhaW5zdCB0aGUgcmVjaXBlCisgICAgICAgIHdpdGggb3Blbih1ZC5kb25lc3RhbXAsICJ3YiIpIGFzIGNhY2hlZmlsZToKKyAgICAgICAgICAgIHAgPSBwaWNrbGUuUGlja2xlcihjYWNoZWZpbGUsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MKQorICAgICAgICAgICAgcC5kdW1wKGNoZWNrc3VtcykKKworZGVmIHN1YnByb2Nlc3Nfc2V0dXAoKToKKyAgICAjIFB5dGhvbiBpbnN0YWxscyBhIFNJR1BJUEUgaGFuZGxlciBieSBkZWZhdWx0LiBUaGlzIGlzIHVzdWFsbHkgbm90IHdoYXQKKyAgICAjIG5vbi1QeXRob24gc3VicHJvY2Vzc2VzIGV4cGVjdC4KKyAgICAjIFNJR1BJUEUgZXJyb3JzIGFyZSBrbm93biBpc3N1ZXMgd2l0aCBnemlwL2Jhc2gKKyAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdQSVBFLCBzaWduYWwuU0lHX0RGTCkKKworZGVmIGdldF9hdXRvcmV2KGQpOgorICAgICMgIG9ubHkgbm90IGNhY2hlIHNyYyByZXYgaW4gYXV0b3JldiBjYXNlCisgICAgaWYgZC5nZXRWYXIoJ0JCX1NSQ1JFVl9QT0xJQ1knLCBUcnVlKSAhPSAiY2FjaGUiOgorICAgICAgICBkLnNldFZhcignX19CQl9ET05UX0NBQ0hFJywgJzEnKQorICAgIHJldHVybiAiQVVUT0lOQyIKKworZGVmIGdldF9zcmNyZXYoZCwgbWV0aG9kX25hbWU9J3NvcnRhYmxlX3JldmlzaW9uJyk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSByZXZzaW9uIHN0cmluZywgdXN1YWxseSBmb3IgdXNlIGluIHRoZSB2ZXJzaW9uIHN0cmluZyAoUFYpIG9mIHRoZSBjdXJyZW50IHBhY2thZ2UKKyAgICBNb3N0IHBhY2thZ2VzIHVzdWFsbHkgb25seSBoYXZlIG9uZSBTQ00gc28gd2UganVzdCBwYXNzIG9uIHRoZSBjYWxsLgorICAgIEluIHRoZSBtdWx0aSBTQ00gY2FzZSwgd2UgYnVpbGQgYSB2YWx1ZSBiYXNlZCBvbiBTUkNSRVZfRk9STUFUIHdoaWNoIG11c3QKKyAgICBoYXZlIGJlZW4gc2V0LgorCisgICAgVGhlIGlkZWEgaGVyZSBpcyB0aGF0IHdlIHB1dCB0aGUgc3RyaW5nICJBVVRPSU5DKyIgaW50byByZXR1cm4gdmFsdWUgaWYgdGhlIHJldmlzaW9ucyBhcmUgbm90IAorICAgIGluY3JlbWVudGFsLCBvdGhlciBjb2RlIGlzIHRoZW4gcmVzcG9uc2libGUgZm9yIHR1cm5pbmcgdGhhdCBpbnRvIGFuIGluY3JlYXNpbmcgdmFsdWUgKGlmIG5lZWRlZCkKKworICAgIEEgbWV0aG9kX25hbWUgY2FuIGJlIHN1cHBsaWVkIHRvIHJldHJpZXZlIGFuIGFsdGVybmF0aXZlbHkgZm9ybWF0dGVkIHJldmlzaW9uIGZyb20gYSBmZXRjaGVyLCBpZgorICAgIHRoYXQgZmV0Y2hlciBwcm92aWRlcyBhIG1ldGhvZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCB0aGUgc2FtZSBzaWduYXR1cmUgYXMgc29ydGFibGVfcmV2aXNpb24uCisgICAgIiIiCisKKyAgICBzY21zID0gW10KKyAgICBmZXRjaGVyID0gRmV0Y2goZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKS5zcGxpdCgpLCBkKQorICAgIHVybGRhdGEgPSBmZXRjaGVyLnVkCisgICAgZm9yIHUgaW4gdXJsZGF0YToKKyAgICAgICAgaWYgdXJsZGF0YVt1XS5tZXRob2Quc3VwcG9ydHNfc3JjcmV2KCk6CisgICAgICAgICAgICBzY21zLmFwcGVuZCh1KQorCisgICAgaWYgbGVuKHNjbXMpID09IDA6CisgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIlNSQ1JFViB3YXMgdXNlZCB5ZXQgbm8gdmFsaWQgU0NNIHdhcyBmb3VuZCBpbiBTUkNfVVJJIikKKworICAgIGlmIGxlbihzY21zKSA9PSAxIGFuZCBsZW4odXJsZGF0YVtzY21zWzBdXS5uYW1lcykgPT0gMToKKyAgICAgICAgYXV0b2luYywgcmV2ID0gZ2V0YXR0cih1cmxkYXRhW3NjbXNbMF1dLm1ldGhvZCwgbWV0aG9kX25hbWUpKHVybGRhdGFbc2Ntc1swXV0sIGQsIHVybGRhdGFbc2Ntc1swXV0ubmFtZXNbMF0pCisgICAgICAgIGlmIGxlbihyZXYpID4gMTA6CisgICAgICAgICAgICByZXYgPSByZXZbOjEwXQorICAgICAgICBpZiBhdXRvaW5jOgorICAgICAgICAgICAgcmV0dXJuICJBVVRPSU5DKyIgKyByZXYKKyAgICAgICAgcmV0dXJuIHJldgorCisgICAgIworICAgICMgTXV0aXBsZSBTQ01zIGFyZSBpbiBTUkNfVVJJIHNvIHdlIHJlc29ydCB0byBTUkNSRVZfRk9STUFUCisgICAgIworICAgIGZvcm1hdCA9IGQuZ2V0VmFyKCdTUkNSRVZfRk9STUFUJywgVHJ1ZSkKKyAgICBpZiBub3QgZm9ybWF0OgorICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJUaGUgU1JDUkVWX0ZPUk1BVCB2YXJpYWJsZSBtdXN0IGJlIHNldCB3aGVuIG11bHRpcGxlIFNDTXMgYXJlIHVzZWQuIikKKworICAgIHNlZW5hdXRvaW5jID0gRmFsc2UKKyAgICBmb3Igc2NtIGluIHNjbXM6CisgICAgICAgIHVkID0gdXJsZGF0YVtzY21dCisgICAgICAgIGZvciBuYW1lIGluIHVkLm5hbWVzOgorICAgICAgICAgICAgYXV0b2luYywgcmV2ID0gZ2V0YXR0cih1ZC5tZXRob2QsIG1ldGhvZF9uYW1lKSh1ZCwgZCwgbmFtZSkKKyAgICAgICAgICAgIHNlZW5hdXRvaW5jID0gc2VlbmF1dG9pbmMgb3IgYXV0b2luYworICAgICAgICAgICAgaWYgbGVuKHJldikgPiAxMDoKKyAgICAgICAgICAgICAgICByZXYgPSByZXZbOjEwXQorICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UobmFtZSwgcmV2KQorICAgIGlmIHNlZW5hdXRvaW5jOgorICAgICAgIGZvcm1hdCA9ICJBVVRPSU5DKyIgKyBmb3JtYXQKKworICAgIHJldHVybiBmb3JtYXQKKworZGVmIGxvY2FscGF0aCh1cmwsIGQpOgorICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goW3VybF0sIGQpCisgICAgcmV0dXJuIGZldGNoZXIubG9jYWxwYXRoKHVybCkKKworZGVmIHJ1bmZldGNoY21kKGNtZCwgZCwgcXVpZXQ9RmFsc2UsIGNsZWFudXA9Tm9uZSk6CisgICAgIiIiCisgICAgUnVuIGNtZCByZXR1cm5pbmcgdGhlIGNvbW1hbmQgb3V0cHV0CisgICAgUmFpc2UgYW4gZXJyb3IgaWYgaW50ZXJydXB0ZWQgb3IgY21kIGZhaWxzCisgICAgT3B0aW9uYWxseSBlY2hvIGNvbW1hbmQgb3V0cHV0IHRvIHN0ZG91dAorICAgIE9wdGlvbmFsbHkgcmVtb3ZlIHRoZSBmaWxlcy9kaXJlY3RvcmllcyBsaXN0ZWQgaW4gY2xlYW51cCB1cG9uIGZhaWx1cmUKKyAgICAiIiIKKworICAgICMgTmVlZCB0byBleHBvcnQgUEFUSCBhcyBiaW5hcnkgY291bGQgYmUgaW4gbWV0YWRhdGEgcGF0aHMKKyAgICAjIHJhdGhlciB0aGFuIGhvc3QgcHJvdmlkZWQKKyAgICAjIEFsc28gaW5jbHVkZSBzb21lIG90aGVyIHZhcmlhYmxlcy4KKyAgICAjIEZJWE1FOiBTaG91bGQgcmVhbGx5IGluY2x1ZGUgYWxsIGV4cG9ydCB2YXJhaWFibGVzPworICAgIGV4cG9ydHZhcnMgPSBbJ0hPTUUnLCAnUEFUSCcsCisgICAgICAgICAgICAgICAgICAnSFRUUF9QUk9YWScsICdodHRwX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICdIVFRQU19QUk9YWScsICdodHRwc19wcm94eScsCisgICAgICAgICAgICAgICAgICAnRlRQX1BST1hZJywgJ2Z0cF9wcm94eScsCisgICAgICAgICAgICAgICAgICAnRlRQU19QUk9YWScsICdmdHBzX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICdOT19QUk9YWScsICdub19wcm94eScsCisgICAgICAgICAgICAgICAgICAnQUxMX1BST1hZJywgJ2FsbF9wcm94eScsCisgICAgICAgICAgICAgICAgICAnR0lUX1BST1hZX0NPTU1BTkQnLAorICAgICAgICAgICAgICAgICAgJ0dJVF9TU0xfQ0FJTkZPJywKKyAgICAgICAgICAgICAgICAgICdHSVRfU01BUlRfSFRUUCcsCisgICAgICAgICAgICAgICAgICAnU1NIX0FVVEhfU09DSycsICdTU0hfQUdFTlRfUElEJywKKyAgICAgICAgICAgICAgICAgICdTT0NLUzVfVVNFUicsICdTT0NLUzVfUEFTU1dEJ10KKworICAgIGlmIG5vdCBjbGVhbnVwOgorICAgICAgICBjbGVhbnVwID0gW10KKworICAgIGZvciB2YXIgaW4gZXhwb3J0dmFyczoKKyAgICAgICAgdmFsID0gZC5nZXRWYXIodmFyLCBUcnVlKQorICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICBjbWQgPSAnZXhwb3J0ICcgKyB2YXIgKyAnPVwiJXNcIjsgJXMnICUgKHZhbCwgY21kKQorCisgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgY21kKQorCisgICAgc3VjY2VzcyA9IEZhbHNlCisgICAgZXJyb3JfbWVzc2FnZSA9ICIiCisKKyAgICB0cnk6CisgICAgICAgIChvdXRwdXQsIGVycm9ycykgPSBiYi5wcm9jZXNzLnJ1bihjbWQsIHNoZWxsPVRydWUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHN1Y2Nlc3MgPSBUcnVlCisgICAgZXhjZXB0IGJiLnByb2Nlc3MuTm90Rm91bmRFcnJvciBhcyBlOgorICAgICAgICBlcnJvcl9tZXNzYWdlID0gIkZldGNoIGNvbW1hbmQgJXMiICUgKGUuY29tbWFuZCkKKyAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgorICAgICAgICBpZiBlLnN0ZG91dDoKKyAgICAgICAgICAgIG91dHB1dCA9ICJvdXRwdXQ6XG4lc1xuJXMiICUgKGUuc3Rkb3V0LCBlLnN0ZGVycikKKyAgICAgICAgZWxpZiBlLnN0ZGVycjoKKyAgICAgICAgICAgIG91dHB1dCA9ICJvdXRwdXQ6XG4lcyIgJSBlLnN0ZGVycgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0cHV0ID0gIm5vIG91dHB1dCIKKyAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICJGZXRjaCBjb21tYW5kIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlcywgJXMiICUgKGUuZXhpdGNvZGUsIG91dHB1dCkKKyAgICBleGNlcHQgYmIucHJvY2Vzcy5DbWRFcnJvciBhcyBlOgorICAgICAgICBlcnJvcl9tZXNzYWdlID0gIkZldGNoIGNvbW1hbmQgJXMgY291bGQgbm90IGJlIHJ1bjpcbiVzIiAlIChlLmNvbW1hbmQsIGUubXNnKQorICAgIGlmIG5vdCBzdWNjZXNzOgorICAgICAgICBmb3IgZiBpbiBjbGVhbnVwOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShmLCBUcnVlKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoZXJyb3JfbWVzc2FnZSkKKworICAgIHJldHVybiBvdXRwdXQKKworZGVmIGNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGluZm8gPSAiIiwgdXJsID0gTm9uZSk6CisgICAgIiIiCisgICAgbG9nIHJlbW90ZSBuZXR3b3JrIGFjY2VzcywgYW5kIGVycm9yIGlmIEJCX05PX05FVFdPUksgaXMgc2V0CisgICAgIiIiCisgICAgaWYgZC5nZXRWYXIoIkJCX05PX05FVFdPUksiLCBUcnVlKSA9PSAiMSI6CisgICAgICAgIHJhaXNlIE5ldHdvcmtBY2Nlc3ModXJsLCBpbmZvKQorICAgIGVsc2U6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiRmV0Y2hlciBhY2Nlc3NlZCB0aGUgbmV0d29yayB3aXRoIHRoZSBjb21tYW5kICVzIiAlIGluZm8pCisKK2RlZiBidWlsZF9taXJyb3J1cmlzKG9yaWd1ZCwgbWlycm9ycywgbGQpOgorICAgIHVyaXMgPSBbXQorICAgIHVkcyA9IFtdCisKKyAgICByZXBsYWNlbWVudHMgPSB7fQorICAgIHJlcGxhY2VtZW50c1siVFlQRSJdID0gb3JpZ3VkLnR5cGUKKyAgICByZXBsYWNlbWVudHNbIkhPU1QiXSA9IG9yaWd1ZC5ob3N0CisgICAgcmVwbGFjZW1lbnRzWyJQQVRIIl0gPSBvcmlndWQucGF0aAorICAgIHJlcGxhY2VtZW50c1siQkFTRU5BTUUiXSA9IG9yaWd1ZC5wYXRoLnNwbGl0KCIvIilbLTFdCisgICAgcmVwbGFjZW1lbnRzWyJNSVJST1JOQU1FIl0gPSBvcmlndWQuaG9zdC5yZXBsYWNlKCc6JywnLicpICsgb3JpZ3VkLnBhdGgucmVwbGFjZSgnLycsICcuJykucmVwbGFjZSgnKicsICcuJykKKworICAgIGRlZiBhZGR1cmkodWQsIHVyaXMsIHVkcyk6CisgICAgICAgIGZvciBsaW5lIGluIG1pcnJvcnM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgKGZpbmQsIHJlcGxhY2UpID0gbGluZQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG5ld3VyaSA9IHVyaV9yZXBsYWNlKHVkLCBmaW5kLCByZXBsYWNlLCByZXBsYWNlbWVudHMsIGxkKQorICAgICAgICAgICAgaWYgbm90IG5ld3VyaSBvciBuZXd1cmkgaW4gdXJpcyBvciBuZXd1cmkgPT0gb3JpZ3VkLnVybDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBub3QgdHJ1c3RlZF9uZXR3b3JrKGxkLCBuZXd1cmkpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiTWlycm9yICVzIG5vdCBpbiB0aGUgbGlzdCBvZiB0cnVzdGVkIG5ldHdvcmtzLCBza2lwcGluZyIgJSAgKG5ld3VyaSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG5ld3VkID0gRmV0Y2hEYXRhKG5ld3VyaSwgbGQpCisgICAgICAgICAgICAgICAgbmV3dWQuc2V0dXBfbG9jYWxwYXRoKGxkKQorICAgICAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJNaXJyb3IgZmV0Y2ggZmFpbHVyZSBmb3IgdXJsICVzIChvcmlnaW5hbCB1cmw6ICVzKSIgJSAobmV3dXJpLCBvcmlndWQudXJsKSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgc3RyKGUpKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgIyBzZXR1cF9sb2NhbHBhdGggb2YgZmlsZTovLyB1cmxzIG1heSBmYWlsLCB3ZSBzaG91bGQgc3RpbGwgc2VlIAorICAgICAgICAgICAgICAgICAgICAjIGlmIG1pcnJvcnMgb2YgdGhlIHVybCBleGlzdAorICAgICAgICAgICAgICAgICAgICBhZGR1cmkobmV3dWQsIHVyaXMsIHVkcykKKyAgICAgICAgICAgICAgICBleGNlcHQgVW5ib3VuZExvY2FsRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBjb250aW51ZSAgIAorICAgICAgICAgICAgdXJpcy5hcHBlbmQobmV3dXJpKQorICAgICAgICAgICAgdWRzLmFwcGVuZChuZXd1ZCkKKworICAgICAgICAgICAgYWRkdXJpKG5ld3VkLCB1cmlzLCB1ZHMpCisKKyAgICBhZGR1cmkob3JpZ3VkLCB1cmlzLCB1ZHMpCisKKyAgICByZXR1cm4gdXJpcywgdWRzCisKK2RlZiByZW5hbWVfYmFkX2NoZWNrc3VtKHVkLCBzdWZmaXgpOgorICAgICIiIgorICAgIFJlbmFtZXMgZmlsZXMgdG8gaGF2ZSBzdWZmaXggZnJvbSBwYXJhbWV0ZXIKKyAgICAiIiIKKworICAgIGlmIHVkLmxvY2FscGF0aCBpcyBOb25lOgorICAgICAgICByZXR1cm4KKworICAgIG5ld19sb2NhbHBhdGggPSAiJXNfYmFkLWNoZWNrc3VtXyVzIiAlICh1ZC5sb2NhbHBhdGgsIHN1ZmZpeCkKKyAgICBiYi53YXJuKCJSZW5hbWluZyAlcyB0byAlcyIgJSAodWQubG9jYWxwYXRoLCBuZXdfbG9jYWxwYXRoKSkKKyAgICBiYi51dGlscy5tb3ZlZmlsZSh1ZC5sb2NhbHBhdGgsIG5ld19sb2NhbHBhdGgpCisKKworZGVmIHRyeV9taXJyb3JfdXJsKGZldGNoLCBvcmlndWQsIHVkLCBsZCwgY2hlY2sgPSBGYWxzZSk6CisgICAgIyBSZXR1cm4gb2YgTm9uZSBvciBhIHZhbHVlIG1lYW5zIHdlJ3JlIGZpbmlzaGVkCisgICAgIyBGYWxzZSBtZWFucyB0cnkgYW5vdGhlciB1cmwKKyAgICB0cnk6CisgICAgICAgIGlmIGNoZWNrOgorICAgICAgICAgICAgZm91bmQgPSB1ZC5tZXRob2QuY2hlY2tzdGF0dXMoZmV0Y2gsIHVkLCBsZCkKKyAgICAgICAgICAgIGlmIGZvdW5kOgorICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZAorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgb3MuY2hkaXIobGQuZ2V0VmFyKCJETF9ESVIiLCBUcnVlKSkKKworICAgICAgICBpZiBub3QgdmVyaWZ5X2RvbmVzdGFtcCh1ZCwgbGQsIG9yaWd1ZCkgb3IgdWQubWV0aG9kLm5lZWRfdXBkYXRlKHVkLCBsZCk6CisgICAgICAgICAgICB1ZC5tZXRob2QuZG93bmxvYWQodWQsIGxkKQorICAgICAgICAgICAgaWYgaGFzYXR0cih1ZC5tZXRob2QsImJ1aWxkX21pcnJvcl9kYXRhIik6CisgICAgICAgICAgICAgICAgdWQubWV0aG9kLmJ1aWxkX21pcnJvcl9kYXRhKHVkLCBsZCkKKworICAgICAgICBpZiBub3QgdWQubG9jYWxwYXRoIG9yIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgdWQubG9jYWxwYXRoID09IG9yaWd1ZC5sb2NhbHBhdGg6CisgICAgICAgICAgICByZXR1cm4gdWQubG9jYWxwYXRoCisKKyAgICAgICAgIyBXZSBtYXkgYmUgb2J0YWluaW5nIGEgbWlycm9yIHRhcmJhbGwgd2hpY2ggbmVlZHMgZnVydGhlciBwcm9jZXNzaW5nIGJ5IHRoZSByZWFsIGZldGNoZXIKKyAgICAgICAgIyBJZiB0aGF0IHRhcmJhbGwgaXMgYSBsb2NhbCBmaWxlOi8vIHdlIG5lZWQgdG8gcHJvdmlkZSBhIHN5bWxpbmsgdG8gaXQKKyAgICAgICAgZGxkaXIgPSBsZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpCisgICAgICAgIGlmIG9yaWd1ZC5taXJyb3J0YXJiYWxsIGFuZCBvcy5wYXRoLmJhc2VuYW1lKHVkLmxvY2FscGF0aCkgPT0gb3MucGF0aC5iYXNlbmFtZShvcmlndWQubWlycm9ydGFyYmFsbCkgXAorICAgICAgICAgICAgICAgIGFuZCBvcy5wYXRoLmJhc2VuYW1lKHVkLmxvY2FscGF0aCkgIT0gb3MucGF0aC5iYXNlbmFtZShvcmlndWQubG9jYWxwYXRoKToKKyAgICAgICAgICAgICMgQ3JlYXRlIGRvbmVzdGFtcCBpbiBvbGQgZm9ybWF0IHRvIGF2b2lkIHRyaWdnZXJpbmcgYSByZS1kb3dubG9hZAorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZSh1ZC5kb25lc3RhbXApKQorICAgICAgICAgICAgb3Blbih1ZC5kb25lc3RhbXAsICd3JykuY2xvc2UoKQorICAgICAgICAgICAgZGVzdCA9IG9zLnBhdGguam9pbihkbGRpciwgb3MucGF0aC5iYXNlbmFtZSh1ZC5sb2NhbHBhdGgpKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRlc3QpOgorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsodWQubG9jYWxwYXRoLCBkZXN0KQorICAgICAgICAgICAgaWYgbm90IHZlcmlmeV9kb25lc3RhbXAob3JpZ3VkLCBsZCkgb3Igb3JpZ3VkLm1ldGhvZC5uZWVkX3VwZGF0ZShvcmlndWQsIGxkKToKKyAgICAgICAgICAgICAgICBvcmlndWQubWV0aG9kLmRvd25sb2FkKG9yaWd1ZCwgbGQpCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihvcmlndWQubWV0aG9kLCJidWlsZF9taXJyb3JfZGF0YSIpOgorICAgICAgICAgICAgICAgICAgICBvcmlndWQubWV0aG9kLmJ1aWxkX21pcnJvcl9kYXRhKG9yaWd1ZCwgbGQpCisgICAgICAgICAgICByZXR1cm4gdWQubG9jYWxwYXRoCisgICAgICAgICMgT3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgYSBsb2NhbCBmaWxlOi8vIGFuZCB3ZSBzeW1saW5rIHRvIGl0CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcmlndWQubG9jYWxwYXRoKToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKG9yaWd1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgICAgICMgQnJva2VuIHN5bWJvbGljIGxpbmsKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsob3JpZ3VkLmxvY2FscGF0aCkKKworICAgICAgICAgICAgb3Muc3ltbGluayh1ZC5sb2NhbHBhdGgsIG9yaWd1ZC5sb2NhbHBhdGgpCisgICAgICAgIHVwZGF0ZV9zdGFtcChvcmlndWQsIGxkKQorICAgICAgICByZXR1cm4gdWQubG9jYWxwYXRoCisKKyAgICBleGNlcHQgYmIuZmV0Y2gyLk5ldHdvcmtBY2Nlc3M6CisgICAgICAgIHJhaXNlCisKKyAgICBleGNlcHQgYmIuZmV0Y2gyLkJCRmV0Y2hFeGNlcHRpb24gYXMgZToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShlLCBDaGVja3N1bUVycm9yKToKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCJNaXJyb3IgY2hlY2tzdW0gZmFpbHVyZSBmb3IgdXJsICVzIChvcmlnaW5hbCB1cmw6ICVzKVxuQ2xlYW5pbmcgYW5kIHRyeWluZyBhZ2Fpbi4iICUgKHVkLnVybCwgb3JpZ3VkLnVybCkpCisgICAgICAgICAgICBsb2dnZXIud2FybihzdHIoZSkpCisgICAgICAgICAgICByZW5hbWVfYmFkX2NoZWNrc3VtKHVkLCBlLmNoZWNrc3VtKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZSwgTm9DaGVja3N1bUVycm9yKToKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIk1pcnJvciBmZXRjaCBmYWlsdXJlIGZvciB1cmwgJXMgKG9yaWdpbmFsIHVybDogJXMpIiAlICh1ZC51cmwsIG9yaWd1ZC51cmwpKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsIHN0cihlKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdWQubWV0aG9kLmNsZWFuKHVkLCBsZCkKKyAgICAgICAgZXhjZXB0IFVuYm91bmRMb2NhbEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gRmFsc2UKKworZGVmIHRyeV9taXJyb3JzKGZldGNoLCBkLCBvcmlndWQsIG1pcnJvcnMsIGNoZWNrID0gRmFsc2UpOgorICAgICIiIgorICAgIFRyeSB0byB1c2UgYSBtaXJyb3JlZCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2VzLgorICAgIFRoaXMgbWV0aG9kIHdpbGwgYmUgYXV0b21hdGljYWxseSBjYWxsZWQgYmVmb3JlIHRoZSBmZXRjaGVycyBnby4KKworICAgIGQgSXMgYSBiYi5kYXRhIGluc3RhbmNlCisgICAgdXJpIGlzIHRoZSBvcmlnaW5hbCB1cmkgd2UncmUgdHJ5aW5nIHRvIGRvd25sb2FkCisgICAgbWlycm9ycyBpcyB0aGUgbGlzdCBvZiBtaXJyb3JzIHdlJ3JlIGdvaW5nIHRvIHRyeQorICAgICIiIgorICAgIGxkID0gZC5jcmVhdGVDb3B5KCkKKworICAgIHVyaXMsIHVkcyA9IGJ1aWxkX21pcnJvcnVyaXMob3JpZ3VkLCBtaXJyb3JzLCBsZCkKKworICAgIGZvciBpbmRleCwgdXJpIGluIGVudW1lcmF0ZSh1cmlzKToKKyAgICAgICAgcmV0ID0gdHJ5X21pcnJvcl91cmwoZmV0Y2gsIG9yaWd1ZCwgdWRzW2luZGV4XSwgbGQsIGNoZWNrKQorICAgICAgICBpZiByZXQgIT0gRmFsc2U6CisgICAgICAgICAgICByZXR1cm4gcmV0CisgICAgcmV0dXJuIE5vbmUKKworZGVmIHRydXN0ZWRfbmV0d29yayhkLCB1cmwpOgorICAgICIiIgorICAgIFVzZSBhIHRydXN0ZWQgdXJsIGR1cmluZyBkb3dubG9hZCBpZiBuZXR3b3JraW5nIGlzIGVuYWJsZWQgYW5kCisgICAgQkJfQUxMT1dFRF9ORVRXT1JLUyBpcyBzZXQgZ2xvYmFsbHkgb3IgZm9yIGEgc3BlY2lmaWMgcmVjaXBlLgorICAgIE5vdGU6IG1vZGlmaWVzIFNSQ19VUkkgJiBtaXJyb3JzLgorICAgICIiIgorICAgIGlmIGQuZ2V0VmFyKCdCQl9OT19ORVRXT1JLJywgVHJ1ZSkgPT0gIjEiOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgcGtnbmFtZSA9IGQuZXhwYW5kKGQuZ2V0VmFyKCdQTicsIEZhbHNlKSkKKyAgICB0cnVzdGVkX2hvc3RzID0gZC5nZXRWYXJGbGFnKCdCQl9BTExPV0VEX05FVFdPUktTJywgcGtnbmFtZSkKKworICAgIGlmIG5vdCB0cnVzdGVkX2hvc3RzOgorICAgICAgICB0cnVzdGVkX2hvc3RzID0gZC5nZXRWYXIoJ0JCX0FMTE9XRURfTkVUV09SS1MnLCBUcnVlKQorCisgICAgIyBOb3QgZW5hYmxlZC4KKyAgICBpZiBub3QgdHJ1c3RlZF9ob3N0czoKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHNjaGVtZSwgbmV0d29yaywgcGF0aCwgdXNlciwgcGFzc3dkLCBwYXJhbSA9IGRlY29kZXVybCh1cmwpCisKKyAgICBpZiBub3QgbmV0d29yazoKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIG5ldHdvcmsgPSBuZXR3b3JrLmxvd2VyKCkKKworICAgIGZvciBob3N0IGluIHRydXN0ZWRfaG9zdHMuc3BsaXQoIiAiKToKKyAgICAgICAgaG9zdCA9IGhvc3QubG93ZXIoKQorICAgICAgICBpZiBob3N0LnN0YXJ0c3dpdGgoIiouIikgYW5kICgiLiIgKyBuZXR3b3JrKS5lbmRzd2l0aChob3N0WzE6XSk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBob3N0ID09IG5ldHdvcms6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBzcmNyZXZfaW50ZXJuYWxfaGVscGVyKHVkLCBkLCBuYW1lKToKKyAgICAiIiIKKyAgICBSZXR1cm46CisgICAgICAgIGEpIGEgc291cmNlIHJldmlzaW9uIGlmIHNwZWNpZmllZAorICAgICAgICBiKSBsYXRlc3QgcmV2aXNpb24gaWYgU1JDUkVWPSJBVVRPSU5DIgorICAgICAgICBjKSBOb25lIGlmIG5vdCBzcGVjaWZpZWQKKyAgICAiIiIKKworICAgIHNyY3JldiA9IE5vbmUKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgYXR0ZW1wdHMgPSBbXQorICAgIGlmIG5hbWUgIT0gJycgYW5kIHBuOgorICAgICAgICBhdHRlbXB0cy5hcHBlbmQoIlNSQ1JFVl8lc19wbi0lcyIgJSAobmFtZSwgcG4pKQorICAgIGlmIG5hbWUgIT0gJyc6CisgICAgICAgIGF0dGVtcHRzLmFwcGVuZCgiU1JDUkVWXyVzIiAlIG5hbWUpCisgICAgaWYgcG46CisgICAgICAgIGF0dGVtcHRzLmFwcGVuZCgiU1JDUkVWX3BuLSVzIiAlIHBuKQorICAgIGF0dGVtcHRzLmFwcGVuZCgiU1JDUkVWIikKKworICAgIGZvciBhIGluIGF0dGVtcHRzOgorICAgICAgICBzcmNyZXYgPSBkLmdldFZhcihhLCBUcnVlKSAgICAgICAgICAgICAgCisgICAgICAgIGlmIHNyY3JldiBhbmQgc3JjcmV2ICE9ICJJTlZBTElEIjoKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICBpZiAncmV2JyBpbiB1ZC5wYXJtIGFuZCAndGFnJyBpbiB1ZC5wYXJtOgorICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJQbGVhc2Ugc3BlY2lmeSBhIDtyZXY9IHBhcmFtZXRlciBvciBhIDt0YWc9IHBhcmFtZXRlciBpbiB0aGUgdXJsICVzIGJ1dCBub3QgYm90aC4iICUgKHVkLnVybCkpCisKKyAgICBpZiAncmV2JyBpbiB1ZC5wYXJtIG9yICd0YWcnIGluIHVkLnBhcm06CisgICAgICAgIGlmICdyZXYnIGluIHVkLnBhcm06CisgICAgICAgICAgICBwYXJtcmV2ID0gdWQucGFybVsncmV2J10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcm1yZXYgPSB1ZC5wYXJtWyd0YWcnXQorICAgICAgICBpZiBzcmNyZXYgPT0gIklOVkFMSUQiIG9yIG5vdCBzcmNyZXY6CisgICAgICAgICAgICByZXR1cm4gcGFybXJldgorICAgICAgICBpZiBzcmNyZXYgIT0gcGFybXJldjoKKyAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIkNvbmZsaWN0aW5nIHJldmlzaW9ucyAoJXMgZnJvbSBTUkNSRVYgYW5kICVzIGZyb20gdGhlIHVybCkgZm91bmQsIHBsZWFzZSBzcGNpZnkgb25lIHZhbGlkIHZhbHVlIiAlIChzcmNyZXYsIHBhcm1yZXYpKQorICAgICAgICByZXR1cm4gcGFybXJldgorCisgICAgaWYgc3JjcmV2ID09ICJJTlZBTElEIiBvciBub3Qgc3JjcmV2OgorICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJQbGVhc2Ugc2V0IGEgdmFsaWQgU1JDUkVWIGZvciB1cmwgJXMgKHBvc3NpYmxlIGtleSBuYW1lcyBhcmUgJXMsIG9yIHVzZSBhIDtyZXY9WCBVUkwgcGFyYW1ldGVyKSIgJSAoc3RyKGF0dGVtcHRzKSwgdWQudXJsKSwgdWQudXJsKQorICAgIGlmIHNyY3JldiA9PSAiQVVUT0lOQyI6CisgICAgICAgIHNyY3JldiA9IHVkLm1ldGhvZC5sYXRlc3RfcmV2aXNpb24odWQsIGQsIG5hbWUpCisKKyAgICByZXR1cm4gc3JjcmV2CisKK2RlZiBnZXRfY2hlY2tzdW1fZmlsZV9saXN0KGQpOgorICAgICIiIiBHZXQgYSBsaXN0IG9mIGZpbGVzIGNoZWNrc3VtIGluIFNSQ19VUkkKKworICAgIFJldHVybnMgdGhlIHJlc29sdmVkIGxvY2FsIHBhdGhzIG9mIGFsbCBsb2NhbCBmaWxlIGVudHJpZXMgaW4KKyAgICBTUkNfVVJJIGFzIGEgc3BhY2Utc2VwYXJhdGVkIHN0cmluZworICAgICIiIgorICAgIGZldGNoID0gRmV0Y2goW10sIGQsIGNhY2hlID0gRmFsc2UsIGxvY2Fsb25seSA9IFRydWUpCisKKyAgICBkbF9kaXIgPSBkLmdldFZhcignRExfRElSJywgVHJ1ZSkKKyAgICBmaWxlbGlzdCA9IFtdCisgICAgZm9yIHUgaW4gZmV0Y2gudXJsczoKKyAgICAgICAgdWQgPSBmZXRjaC51ZFt1XQorCisgICAgICAgIGlmIHVkIGFuZCBpc2luc3RhbmNlKHVkLm1ldGhvZCwgbG9jYWwuTG9jYWwpOgorICAgICAgICAgICAgcGF0aHMgPSB1ZC5tZXRob2QubG9jYWxwYXRocyh1ZCwgZCkKKyAgICAgICAgICAgIGZvciBmIGluIHBhdGhzOgorICAgICAgICAgICAgICAgIHB0aCA9IHVkLmRlY29kZWR1cmwKKyAgICAgICAgICAgICAgICBpZiAnKicgaW4gcHRoOgorICAgICAgICAgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKG9zLnBhdGguYWJzcGF0aChmKSwgcHRoKQorICAgICAgICAgICAgICAgIGlmIGYuc3RhcnRzd2l0aChkbF9kaXIpOgorICAgICAgICAgICAgICAgICAgICAjIFRoZSBsb2NhbCBmZXRjaGVyJ3MgYmVoYXZpb3VyIGlzIHRvIHJldHVybiBhIHBhdGggdW5kZXIgRExfRElSIGlmIGl0IGNvdWxkbid0IGZpbmQgdGhlIGZpbGUgYW55d2hlcmUgZWxzZQorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIkdldHRpbmcgY2hlY2tzdW0gZm9yICVzIFNSQ19VUkkgZW50cnkgJXM6IGZpbGUgbm90IGZvdW5kIGV4Y2VwdCBpbiBETF9ESVIiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBvcy5wYXRoLmJhc2VuYW1lKGYpKSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlVuYWJsZSB0byBnZXQgY2hlY2tzdW0gZm9yICVzIFNSQ19VUkkgZW50cnkgJXM6IGZpbGUgY291bGQgbm90IGJlIGZvdW5kIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgb3MucGF0aC5iYXNlbmFtZShmKSkpCisgICAgICAgICAgICAgICAgZmlsZWxpc3QuYXBwZW5kKGYgKyAiOiIgKyBzdHIob3MucGF0aC5leGlzdHMoZikpKQorCisgICAgcmV0dXJuICIgIi5qb2luKGZpbGVsaXN0KQorCitkZWYgZ2V0X2ZpbGVfY2hlY2tzdW1zKGZpbGVsaXN0LCBwbik6CisgICAgIiIiR2V0IGEgbGlzdCBvZiB0aGUgY2hlY2tzdW1zIGZvciBhIGxpc3Qgb2YgbG9jYWwgZmlsZXMKKworICAgIFJldHVybnMgdGhlIGNoZWNrc3VtcyBmb3IgYSBsaXN0IG9mIGxvY2FsIGZpbGVzLCBjYWNoaW5nIHRoZSByZXN1bHRzIGFzCisgICAgaXQgcHJvY2VlZHMKKworICAgICIiIgorCisgICAgZGVmIGNoZWNrc3VtX2ZpbGUoZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNoZWNrc3VtID0gX2NoZWNrc3VtX2NhY2hlLmdldF9jaGVja3N1bShmKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIud2FybigiVW5hYmxlIHRvIGdldCBjaGVja3N1bSBmb3IgJXMgU1JDX1VSSSBlbnRyeSAlczogJXMiICUgKHBuLCBvcy5wYXRoLmJhc2VuYW1lKGYpLCBlKSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBjaGVja3N1bQorCisgICAgZGVmIGNoZWNrc3VtX2RpcihwdGgpOgorICAgICAgICAjIEhhbmRsZSBkaXJlY3RvcmllcyByZWN1cnNpdmVseQorICAgICAgICBkaXJjaGVja3N1bXMgPSBbXQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwdGgpOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgZnVsbHB0aCA9IG9zLnBhdGguam9pbihyb290LCBuYW1lKQorICAgICAgICAgICAgICAgIGNoZWNrc3VtID0gY2hlY2tzdW1fZmlsZShmdWxscHRoKQorICAgICAgICAgICAgICAgIGlmIGNoZWNrc3VtOgorICAgICAgICAgICAgICAgICAgICBkaXJjaGVja3N1bXMuYXBwZW5kKChmdWxscHRoLCBjaGVja3N1bSkpCisgICAgICAgIHJldHVybiBkaXJjaGVja3N1bXMKKworICAgIGNoZWNrc3VtcyA9IFtdCisgICAgZm9yIHB0aCBpbiBmaWxlbGlzdC5zcGxpdCgpOgorICAgICAgICBleGlzdCA9IHB0aC5zcGxpdCgiOiIpWzFdCisgICAgICAgIGlmIGV4aXN0ID09ICJGYWxzZSI6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBwdGggPSBwdGguc3BsaXQoIjoiKVswXQorICAgICAgICBpZiAnKicgaW4gcHRoOgorICAgICAgICAgICAgIyBIYW5kbGUgZ2xvYnMKKyAgICAgICAgICAgIGZvciBmIGluIGdsb2IuZ2xvYihwdGgpOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZik6CisgICAgICAgICAgICAgICAgICAgIGNoZWNrc3Vtcy5leHRlbmQoY2hlY2tzdW1fZGlyKGYpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtID0gY2hlY2tzdW1fZmlsZShmKQorICAgICAgICAgICAgICAgICAgICBjaGVja3N1bXMuYXBwZW5kKChmLCBjaGVja3N1bSkpCisgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihwdGgpOgorICAgICAgICAgICAgY2hlY2tzdW1zLmV4dGVuZChjaGVja3N1bV9kaXIocHRoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNoZWNrc3VtID0gY2hlY2tzdW1fZmlsZShwdGgpCisgICAgICAgICAgICBjaGVja3N1bXMuYXBwZW5kKChwdGgsIGNoZWNrc3VtKSkKKworICAgIGNoZWNrc3Vtcy5zb3J0KGtleT1vcGVyYXRvci5pdGVtZ2V0dGVyKDEpKQorICAgIHJldHVybiBjaGVja3N1bXMKKworCitjbGFzcyBGZXRjaERhdGEob2JqZWN0KToKKyAgICAiIiIKKyAgICBBIGNsYXNzIHdoaWNoIHJlcHJlc2VudHMgdGhlIGZldGNoZXIgc3RhdGUgZm9yIGEgZ2l2ZW4gVVJJLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmwsIGQsIGxvY2Fsb25seSA9IEZhbHNlKToKKyAgICAgICAgIyBsb2NhbHBhdGggaXMgdGhlIGxvY2F0aW9uIG9mIGEgZG93bmxvYWRlZCByZXN1bHQuIElmIG5vdCBzZXQsIHRoZSBmaWxlIGlzIGxvY2FsLgorICAgICAgICBzZWxmLmRvbmVzdGFtcCA9IE5vbmUKKyAgICAgICAgc2VsZi5sb2NhbGZpbGUgPSAiIgorICAgICAgICBzZWxmLmxvY2FscGF0aCA9IE5vbmUKKyAgICAgICAgc2VsZi5sb2NrZmlsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5taXJyb3J0YXJiYWxsID0gTm9uZQorICAgICAgICBzZWxmLmJhc2VuYW1lID0gTm9uZQorICAgICAgICBzZWxmLmJhc2VwYXRoID0gTm9uZQorICAgICAgICAoc2VsZi50eXBlLCBzZWxmLmhvc3QsIHNlbGYucGF0aCwgc2VsZi51c2VyLCBzZWxmLnBzd2QsIHNlbGYucGFybSkgPSBkZWNvZGV1cmwoZGF0YS5leHBhbmQodXJsLCBkKSkKKyAgICAgICAgc2VsZi5kYXRlID0gc2VsZi5nZXRTUkNEYXRlKGQpCisgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgIGlmIG5vdCBzZWxmLnVzZXIgYW5kICJ1c2VyIiBpbiBzZWxmLnBhcm06CisgICAgICAgICAgICBzZWxmLnVzZXIgPSBzZWxmLnBhcm1bInVzZXIiXQorICAgICAgICBpZiBub3Qgc2VsZi5wc3dkIGFuZCAicHN3ZCIgaW4gc2VsZi5wYXJtOgorICAgICAgICAgICAgc2VsZi5wc3dkID0gc2VsZi5wYXJtWyJwc3dkIl0KKyAgICAgICAgc2VsZi5zZXR1cCA9IEZhbHNlCisKKyAgICAgICAgaWYgIm5hbWUiIGluIHNlbGYucGFybToKKyAgICAgICAgICAgIHNlbGYubWQ1X25hbWUgPSAiJXMubWQ1c3VtIiAlIHNlbGYucGFybVsibmFtZSJdCisgICAgICAgICAgICBzZWxmLnNoYTI1Nl9uYW1lID0gIiVzLnNoYTI1NnN1bSIgJSBzZWxmLnBhcm1bIm5hbWUiXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5tZDVfbmFtZSA9ICJtZDVzdW0iCisgICAgICAgICAgICBzZWxmLnNoYTI1Nl9uYW1lID0gInNoYTI1NnN1bSIKKyAgICAgICAgaWYgc2VsZi5tZDVfbmFtZSBpbiBzZWxmLnBhcm06CisgICAgICAgICAgICBzZWxmLm1kNV9leHBlY3RlZCA9IHNlbGYucGFybVtzZWxmLm1kNV9uYW1lXQorICAgICAgICBlbGlmIHNlbGYudHlwZSBub3QgaW4gWyJodHRwIiwgImh0dHBzIiwgImZ0cCIsICJmdHBzIiwgInNmdHAiXToKKyAgICAgICAgICAgIHNlbGYubWQ1X2V4cGVjdGVkID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5tZDVfZXhwZWN0ZWQgPSBkLmdldFZhckZsYWcoIlNSQ19VUkkiLCBzZWxmLm1kNV9uYW1lKQorICAgICAgICBpZiBzZWxmLnNoYTI1Nl9uYW1lIGluIHNlbGYucGFybToKKyAgICAgICAgICAgIHNlbGYuc2hhMjU2X2V4cGVjdGVkID0gc2VsZi5wYXJtW3NlbGYuc2hhMjU2X25hbWVdCisgICAgICAgIGVsaWYgc2VsZi50eXBlIG5vdCBpbiBbImh0dHAiLCAiaHR0cHMiLCAiZnRwIiwgImZ0cHMiLCAic2Z0cCJdOgorICAgICAgICAgICAgc2VsZi5zaGEyNTZfZXhwZWN0ZWQgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNoYTI1Nl9leHBlY3RlZCA9IGQuZ2V0VmFyRmxhZygiU1JDX1VSSSIsIHNlbGYuc2hhMjU2X25hbWUpCisgICAgICAgIHNlbGYuaWdub3JlX2NoZWNrc3VtcyA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5uYW1lcyA9IHNlbGYucGFybS5nZXQoIm5hbWUiLCdkZWZhdWx0Jykuc3BsaXQoJywnKQorCisgICAgICAgIHNlbGYubWV0aG9kID0gTm9uZQorICAgICAgICBmb3IgbSBpbiBtZXRob2RzOgorICAgICAgICAgICAgaWYgbS5zdXBwb3J0cyhzZWxmLCBkKToKKyAgICAgICAgICAgICAgICBzZWxmLm1ldGhvZCA9IG0KKyAgICAgICAgICAgICAgICBicmVhayAgICAgICAgICAgICAgICAKKworICAgICAgICBpZiBub3Qgc2VsZi5tZXRob2Q6CisgICAgICAgICAgICByYWlzZSBOb01ldGhvZEVycm9yKHVybCkKKworICAgICAgICBpZiBsb2NhbG9ubHkgYW5kIG5vdCBpc2luc3RhbmNlKHNlbGYubWV0aG9kLCBsb2NhbC5Mb2NhbCk6CisgICAgICAgICAgICByYWlzZSBOb25Mb2NhbE1ldGhvZCgpCisKKyAgICAgICAgaWYgc2VsZi5wYXJtLmdldCgicHJvdG8iLCBOb25lKSBhbmQgInByb3RvY29sIiBub3QgaW4gc2VsZi5wYXJtOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0NvbnNpZGVyIHVwZGF0aW5nICVzIHJlY2lwZSB0byB1c2UgInByb3RvY29sIiBub3QgInByb3RvIiBpbiBTUkNfVVJJLicsIGQuZ2V0VmFyKCdQTicsIFRydWUpKQorICAgICAgICAgICAgc2VsZi5wYXJtWyJwcm90b2NvbCJdID0gc2VsZi5wYXJtLmdldCgicHJvdG8iLCBOb25lKQorCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5tZXRob2QsICJ1cmxkYXRhX2luaXQiKToKKyAgICAgICAgICAgIHNlbGYubWV0aG9kLnVybGRhdGFfaW5pdChzZWxmLCBkKQorCisgICAgICAgIGlmICJsb2NhbHBhdGgiIGluIHNlbGYucGFybToKKyAgICAgICAgICAgICMgaWYgdXNlciBzZXRzIGxvY2FscGF0aCBmb3IgZmlsZSwgdXNlIGl0IGluc3RlYWQuCisgICAgICAgICAgICBzZWxmLmxvY2FscGF0aCA9IHNlbGYucGFybVsibG9jYWxwYXRoIl0KKyAgICAgICAgICAgIHNlbGYuYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNlbGYubG9jYWxwYXRoKQorICAgICAgICBlbGlmIHNlbGYubG9jYWxmaWxlOgorICAgICAgICAgICAgc2VsZi5sb2NhbHBhdGggPSBzZWxmLm1ldGhvZC5sb2NhbHBhdGgoc2VsZiwgZCkKKworICAgICAgICBkbGRpciA9IGQuZ2V0VmFyKCJETF9ESVIiLCBUcnVlKQorICAgICAgICAjIE5vdGU6IC5kb25lIGFuZCAubG9jayBmaWxlcyBzaG91bGQgYWx3YXlzIGJlIGluIERMX0RJUiB3aGVyZWFzIGxvY2FscGF0aCBtYXkgbm90IGJlLgorICAgICAgICBpZiBzZWxmLmxvY2FscGF0aCBhbmQgc2VsZi5sb2NhbHBhdGguc3RhcnRzd2l0aChkbGRpcik6CisgICAgICAgICAgICBiYXNlcGF0aCA9IHNlbGYubG9jYWxwYXRoCisgICAgICAgIGVsaWYgc2VsZi5sb2NhbHBhdGg6CisgICAgICAgICAgICBiYXNlcGF0aCA9IGRsZGlyICsgb3Muc2VwICsgb3MucGF0aC5iYXNlbmFtZShzZWxmLmxvY2FscGF0aCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJhc2VwYXRoID0gZGxkaXIgKyBvcy5zZXAgKyAoc2VsZi5iYXNlcGF0aCBvciBzZWxmLmJhc2VuYW1lKQorICAgICAgICBzZWxmLmRvbmVzdGFtcCA9IGJhc2VwYXRoICsgJy5kb25lJworICAgICAgICBzZWxmLmxvY2tmaWxlID0gYmFzZXBhdGggKyAnLmxvY2snCisKKyAgICBkZWYgc2V0dXBfcmV2aXNvbnMoc2VsZiwgZCk6CisgICAgICAgIHNlbGYucmV2aXNpb25zID0ge30KKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5uYW1lczoKKyAgICAgICAgICAgIHNlbGYucmV2aXNpb25zW25hbWVdID0gc3JjcmV2X2ludGVybmFsX2hlbHBlcihzZWxmLCBkLCBuYW1lKQorCisgICAgICAgICMgYWRkIGNvbXBhdGliaWxpdHkgY29kZSBmb3Igbm9uIG5hbWUgc3BlY2lmaWVkIGNhc2UKKyAgICAgICAgaWYgbGVuKHNlbGYubmFtZXMpID09IDE6CisgICAgICAgICAgICBzZWxmLnJldmlzaW9uID0gc2VsZi5yZXZpc2lvbnNbc2VsZi5uYW1lc1swXV0KKworICAgIGRlZiBzZXR1cF9sb2NhbHBhdGgoc2VsZiwgZCk6CisgICAgICAgIGlmIG5vdCBzZWxmLmxvY2FscGF0aDoKKyAgICAgICAgICAgIHNlbGYubG9jYWxwYXRoID0gc2VsZi5tZXRob2QubG9jYWxwYXRoKHNlbGYsIGQpCisKKyAgICBkZWYgZ2V0U1JDRGF0ZShzZWxmLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgU1JDIERhdGUgZm9yIHRoZSBjb21wb25lbnQKKworICAgICAgICBkIHRoZSBiYi5kYXRhIG1vZHVsZQorICAgICAgICAiIiIKKyAgICAgICAgaWYgInNyY2RhdGUiIGluIHNlbGYucGFybToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcm1bJ3NyY2RhdGUnXQorCisgICAgICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKworICAgICAgICBpZiBwbjoKKyAgICAgICAgICAgIHJldHVybiBkLmdldFZhcigiU1JDREFURV8lcyIgJSBwbiwgVHJ1ZSkgb3IgZC5nZXRWYXIoIlNSQ0RBVEUiLCBUcnVlKSBvciBkLmdldFZhcigiREFURSIsIFRydWUpCisKKyAgICAgICAgcmV0dXJuIGQuZ2V0VmFyKCJTUkNEQVRFIiwgVHJ1ZSkgb3IgZC5nZXRWYXIoIkRBVEUiLCBUcnVlKQorCitjbGFzcyBGZXRjaE1ldGhvZChvYmplY3QpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yICdmZXRjaCdpbmcgZGF0YSIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybHM9Tm9uZSk6CisgICAgICAgIHNlbGYudXJscyA9IFtdCisKKyAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgdGhpcyBmZXRjaCBjbGFzcyBzdXBwb3J0cyBhIGdpdmVuIHVybC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgbG9jYWxwYXRoKHNlbGYsIHVybGRhdGEsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBsb2NhbCBmaWxlbmFtZSBvZiBhIGdpdmVuIHVybCBhc3N1bWluZyBhIHN1Y2Nlc3NmdWwgZmV0Y2guCisgICAgICAgIENhbiBhbHNvIHNldHVwIHZhcmlhYmxlcyBpbiB1cmxkYXRhIGZvciB1c2UgaW4gZ28gKHNhdmluZyBjb2RlIGR1cGxpY2F0aW9uCisgICAgICAgIGFuZCBkdXBsaWNhdGUgY29kZSBleGVjdXRpb24pCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKGRhdGEuZ2V0VmFyKCJETF9ESVIiLCBkLCBUcnVlKSwgdXJsZGF0YS5sb2NhbGZpbGUpCisKKyAgICBkZWYgc3VwcG9ydHNfY2hlY2tzdW0oc2VsZiwgdXJsZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBJcyBsb2NhbHBhdGggc29tZXRoaW5nIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGJ5IGEgY2hlY2tzdW0/CisgICAgICAgICIiIgorCisgICAgICAgICMgV2UgY2Fubm90IGNvbXB1dGUgY2hlY2tzdW1zIGZvciBkaXJlY3RvcmllcworICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHVybGRhdGEubG9jYWxwYXRoKSA9PSBUcnVlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHVybGRhdGEubG9jYWxwYXRoLmZpbmQoIioiKSAhPSAtMToKKyAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJlY29tbWVuZHNfY2hlY2tzdW0oc2VsZiwgdXJsZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBJcyB0aGUgYmFja2VuZCBvbiB3aGVyZSBjaGVja3N1bW1pbmcgaXMgcmVjb21tZW5kZWQgKHNob3VsZCB3YXJuaW5ncyAKKyAgICAgICAgYmUgZGlzcGxheWVkIGlmIHRoZXJlIGlzIG5vIGNoZWNrc3VtKT8KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9zdHJpcF9sZWFkaW5nX3NsYXNoZXMoc2VsZiwgcmVscGF0aCk6CisgICAgICAgICIiIgorICAgICAgICBSZW1vdmUgbGVhZGluZyBzbGFzaCBhcyBvcy5wYXRoLmpvaW4gY2FuJ3QgY29wZQorICAgICAgICAiIiIKKyAgICAgICAgd2hpbGUgb3MucGF0aC5pc2FicyhyZWxwYXRoKToKKyAgICAgICAgICAgIHJlbHBhdGggPSByZWxwYXRoWzE6XQorICAgICAgICByZXR1cm4gcmVscGF0aAorCisgICAgZGVmIHNldFVybHMoc2VsZiwgdXJscyk6CisgICAgICAgIHNlbGYuX191cmxzID0gdXJscworCisgICAgZGVmIGdldFVybHMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fdXJscworCisgICAgdXJscyA9IHByb3BlcnR5KGdldFVybHMsIHNldFVybHMsIE5vbmUsICJVcmxzIHByb3BlcnR5IikKKworICAgIGRlZiBuZWVkX3VwZGF0ZShzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBGb3JjZSBhIGZldGNoLCBldmVuIGlmIGxvY2FscGF0aCBleGlzdHM/CisgICAgICAgICIiIgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgc3VwcG9ydHNfc3JjcmV2KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIGZldGNoZXIgc3VwcG9ydHMgYXV0byBzb3VyY2UgcmV2aXNpb25zIChTUkNSRVYpCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1cmxkYXRhLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIEZldGNoIHVybHMKKyAgICAgICAgQXNzdW1lcyBsb2NhbHBhdGggd2FzIGNhbGxlZCBmaXJzdAorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm9NZXRob2RFcnJvcih1cmwpCisKKyAgICBkZWYgdW5wYWNrKHNlbGYsIHVybGRhdGEsIHJvb3RkaXIsIGRhdGEpOgorICAgICAgICBpdGVyYXRlID0gRmFsc2UKKyAgICAgICAgZmlsZSA9IHVybGRhdGEubG9jYWxwYXRoCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdW5wYWNrID0gYmIudXRpbHMudG9fYm9vbGVhbih1cmxkYXRhLnBhcm0uZ2V0KCd1bnBhY2snKSwgVHJ1ZSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgYmIuZmF0YWwoIkludmFsaWQgdmFsdWUgZm9yICd1bnBhY2snIHBhcmFtZXRlciBmb3IgJXM6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAoZmlsZSwgdXJsZGF0YS5wYXJtLmdldCgndW5wYWNrJykpKQorCisgICAgICAgIGJhc2UsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZSkKKyAgICAgICAgaWYgZXh0IGluIFsnLmd6JywgJy5iejInLCAnLlonLCAnLnh6JywgJy5seiddOgorICAgICAgICAgICAgZWZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdGRpciwgb3MucGF0aC5iYXNlbmFtZShiYXNlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVmaWxlID0gZmlsZQorICAgICAgICBjbWQgPSBOb25lCisKKyAgICAgICAgaWYgdW5wYWNrOgorICAgICAgICAgICAgaWYgZmlsZS5lbmRzd2l0aCgnLnRhcicpOgorICAgICAgICAgICAgICAgIGNtZCA9ICd0YXIgeCAtLW5vLXNhbWUtb3duZXIgLWYgJXMnICUgZmlsZQorICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCcudGd6Jykgb3IgZmlsZS5lbmRzd2l0aCgnLnRhci5neicpIG9yIGZpbGUuZW5kc3dpdGgoJy50YXIuWicpOgorICAgICAgICAgICAgICAgIGNtZCA9ICd0YXIgeHogLS1uby1zYW1lLW93bmVyIC1mICVzJyAlIGZpbGUKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgnLnRieicpIG9yIGZpbGUuZW5kc3dpdGgoJy50YnoyJykgb3IgZmlsZS5lbmRzd2l0aCgnLnRhci5iejInKToKKyAgICAgICAgICAgICAgICBjbWQgPSAnYnppcDIgLWRjICVzIHwgdGFyIHggLS1uby1zYW1lLW93bmVyIC1mIC0nICUgZmlsZQorICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCcuZ3onKSBvciBmaWxlLmVuZHN3aXRoKCcuWicpIG9yIGZpbGUuZW5kc3dpdGgoJy56Jyk6CisgICAgICAgICAgICAgICAgY21kID0gJ2d6aXAgLWRjICVzID4gJXMnICUgKGZpbGUsIGVmaWxlKQorICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCcuYnoyJyk6CisgICAgICAgICAgICAgICAgY21kID0gJ2J6aXAyIC1kYyAlcyA+ICVzJyAlIChmaWxlLCBlZmlsZSkKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgnLnRhci54eicpOgorICAgICAgICAgICAgICAgIGNtZCA9ICd4eiAtZGMgJXMgfCB0YXIgeCAtLW5vLXNhbWUtb3duZXIgLWYgLScgJSBmaWxlCisgICAgICAgICAgICBlbGlmIGZpbGUuZW5kc3dpdGgoJy54eicpOgorICAgICAgICAgICAgICAgIGNtZCA9ICd4eiAtZGMgJXMgPiAlcycgJSAoZmlsZSwgZWZpbGUpCisgICAgICAgICAgICBlbGlmIGZpbGUuZW5kc3dpdGgoJy50YXIubHonKToKKyAgICAgICAgICAgICAgICBjbWQgPSAnbHppcCAtZGMgJXMgfCB0YXIgeCAtLW5vLXNhbWUtb3duZXIgLWYgLScgJSBmaWxlCisgICAgICAgICAgICBlbGlmIGZpbGUuZW5kc3dpdGgoJy5seicpOgorICAgICAgICAgICAgICAgIGNtZCA9ICdsemlwIC1kYyAlcyA+ICVzJyAlIChmaWxlLCBlZmlsZSkKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgnLnppcCcpIG9yIGZpbGUuZW5kc3dpdGgoJy5qYXInKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRvcyA9IGJiLnV0aWxzLnRvX2Jvb2xlYW4odXJsZGF0YS5wYXJtLmdldCgnZG9zJyksIEZhbHNlKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkludmFsaWQgdmFsdWUgZm9yICdkb3MnIHBhcmFtZXRlciBmb3IgJXM6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlLCB1cmxkYXRhLnBhcm0uZ2V0KCdkb3MnKSkpCisgICAgICAgICAgICAgICAgY21kID0gJ3VuemlwIC1xIC1vJworICAgICAgICAgICAgICAgIGlmIGRvczoKKyAgICAgICAgICAgICAgICAgICAgY21kID0gJyVzIC1hJyAlIGNtZAorICAgICAgICAgICAgICAgIGNtZCA9ICIlcyAnJXMnIiAlIChjbWQsIGZpbGUpCisgICAgICAgICAgICBlbGlmIGZpbGUuZW5kc3dpdGgoJy5ycG0nKSBvciBmaWxlLmVuZHN3aXRoKCcuc3JwbScpOgorICAgICAgICAgICAgICAgIGlmICdleHRyYWN0JyBpbiB1cmxkYXRhLnBhcm06CisgICAgICAgICAgICAgICAgICAgIHVucGFja19maWxlID0gdXJsZGF0YS5wYXJtLmdldCgnZXh0cmFjdCcpCisgICAgICAgICAgICAgICAgICAgIGNtZCA9ICdycG0yY3Bpby5zaCAlcyB8IGNwaW8gLWlkICVzJyAlIChmaWxlLCB1bnBhY2tfZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZV9maWxlID0gdW5wYWNrX2ZpbGUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjbWQgPSAncnBtMmNwaW8uc2ggJXMgfCBjcGlvIC1pZCcgJSAoZmlsZSkKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgnLmRlYicpIG9yIGZpbGUuZW5kc3dpdGgoJy5pcGsnKToKKyAgICAgICAgICAgICAgICBjbWQgPSAnYXIgLXAgJXMgZGF0YS50YXIuZ3ogfCB6Y2F0IHwgdGFyIC0tbm8tc2FtZS1vd25lciAteHBmIC0nICUgZmlsZQorCisgICAgICAgIGlmIG5vdCB1bnBhY2sgb3Igbm90IGNtZDoKKyAgICAgICAgICAgICMgSWYgZmlsZSA9PSBkZXN0LCB0aGVuIGF2b2lkIGFueSBjb3BpZXMsIGFzIHdlIGFscmVhZHkgcHV0IHRoZSBmaWxlIGludG8gZGVzdCEKKyAgICAgICAgICAgIGRlc3QgPSBvcy5wYXRoLmpvaW4ocm9vdGRpciwgb3MucGF0aC5iYXNlbmFtZShmaWxlKSkKKyAgICAgICAgICAgIGlmIChmaWxlICE9IGRlc3QpIGFuZCBub3QgKG9zLnBhdGguZXhpc3RzKGRlc3QpIGFuZCBvcy5wYXRoLnNhbWVmaWxlKGZpbGUsIGRlc3QpKToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICAjIElmIGZvciBleGFtcGxlIHdlJ3JlIGFza2VkIHRvIGNvcHkgZmlsZTovL2Zvby9iYXIsIHdlIG5lZWQgdG8gdW5wYWNrIHRoZSByZXN1bHQgaW50byBmb28vYmFyCisgICAgICAgICAgICAgICAgICAgIGJhc2VwYXRoID0gZ2V0YXR0cih1cmxkYXRhLCAiYmFzZXBhdGgiLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBkZXN0ZGlyID0gIi4iCisgICAgICAgICAgICAgICAgICAgIGlmIGJhc2VwYXRoIGFuZCBiYXNlcGF0aC5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZXBhdGggPSBiYXNlcGF0aC5yc3RyaXAoIi8iKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGJhc2VwYXRoOgorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZXBhdGggPSBvcy5wYXRoLmRpcm5hbWUoYmFzZXBhdGgpCisgICAgICAgICAgICAgICAgICAgIGlmIGJhc2VwYXRoIGFuZCBiYXNlcGF0aC5maW5kKCIvIikgIT0gLTE6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ZGlyID0gYmFzZXBhdGhbOmJhc2VwYXRoLnJmaW5kKCcvJyldCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ZGlyID0gZGVzdGRpci5zdHJpcCgnLycpCisgICAgICAgICAgICAgICAgICAgIGlmIGRlc3RkaXIgIT0gIi4iIGFuZCBub3Qgb3MuYWNjZXNzKCIlcy8lcyIgJSAocm9vdGRpciwgZGVzdGRpciksIG9zLkZfT0spOgorICAgICAgICAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoIiVzLyVzIiAlIChyb290ZGlyLCBkZXN0ZGlyKSkKKyAgICAgICAgICAgICAgICAgICAgY21kID0gJ2NwIC1mcFBSICVzICVzLyVzLycgJSAoZmlsZSwgcm9vdGRpciwgZGVzdGRpcikKKyAgICAgICAgICAgICAgICAgICAgI2NtZCA9ICd0YXIgLWNmIC0gLUMgIiVkIiAtcHMgLiB8IHRhciAteGYgLSAtQyAiJXMvJXMvIicgJSAoZmlsZSwgcm9vdGRpciwgZGVzdGRpcikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIFRoZSAiZGVzdGRpciIgaGFuZGxpbmcgd2FzIHNwZWNpZmljYWxseSBkb25lIGZvciBGSUxFU1BBVEgKKyAgICAgICAgICAgICAgICAgICAgIyBpdGVtcy4gIFNvLCBvbmx5IGRvIHNvIGZvciBmaWxlOi8vIGVudHJpZXMuCisgICAgICAgICAgICAgICAgICAgIGlmIHVybGRhdGEudHlwZSA9PSAiZmlsZSIgYW5kIHVybGRhdGEucGF0aC5maW5kKCIvIikgIT0gLTE6CisgICAgICAgICAgICAgICAgICAgICAgIGRlc3RkaXIgPSB1cmxkYXRhLnBhdGgucnNwbGl0KCIvIiwgMSlbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgaWYgdXJsZGF0YS5wYXJtLmdldCgnc3ViZGlyJykgIT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGRpciA9IHVybGRhdGEucGFybS5nZXQoJ3N1YmRpcicpICsgIi8iICsgZGVzdGRpcgorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICBpZiB1cmxkYXRhLnBhcm0uZ2V0KCdzdWJkaXInKSAhPSBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ZGlyID0gdXJsZGF0YS5wYXJtLmdldCgnc3ViZGlyJykKKyAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGRpciA9ICIuIgorICAgICAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoIiVzLyVzIiAlIChyb290ZGlyLCBkZXN0ZGlyKSkKKyAgICAgICAgICAgICAgICAgICAgY21kID0gJ2NwIC1mICVzICVzLyVzLycgJSAoZmlsZSwgcm9vdGRpciwgZGVzdGRpcikKKworICAgICAgICBpZiBub3QgY21kOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBDaGFuZ2UgdG8gc3ViZGlyIGJlZm9yZSBleGVjdXRpbmcgY29tbWFuZAorICAgICAgICBzYXZlX2N3ZCA9IG9zLmdldGN3ZCgpOworICAgICAgICBvcy5jaGRpcihyb290ZGlyKQorICAgICAgICBpZiAnc3ViZGlyJyBpbiB1cmxkYXRhLnBhcm06CisgICAgICAgICAgICBuZXdkaXIgPSAoIiVzLyVzIiAlIChyb290ZGlyLCB1cmxkYXRhLnBhcm0uZ2V0KCdzdWJkaXInKSkpCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobmV3ZGlyKQorICAgICAgICAgICAgb3MuY2hkaXIobmV3ZGlyKQorCisgICAgICAgIHBhdGggPSBkYXRhLmdldFZhcignUEFUSCcsIFRydWUpCisgICAgICAgIGlmIHBhdGg6CisgICAgICAgICAgICBjbWQgPSAiUEFUSD1cIiVzXCIgJXMiICUgKHBhdGgsIGNtZCkKKyAgICAgICAgYmIubm90ZSgiVW5wYWNraW5nICVzIHRvICVzLyIgJSAoZmlsZSwgb3MuZ2V0Y3dkKCkpKQorICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoY21kLCBwcmVleGVjX2ZuPXN1YnByb2Nlc3Nfc2V0dXAsIHNoZWxsPVRydWUpCisKKyAgICAgICAgb3MuY2hkaXIoc2F2ZV9jd2QpCisKKyAgICAgICAgaWYgcmV0ICE9IDA6CisgICAgICAgICAgICByYWlzZSBVbnBhY2tFcnJvcigiVW5wYWNrIGNvbW1hbmQgJXMgZmFpbGVkIHdpdGggcmV0dXJuIHZhbHVlICVzIiAlIChjbWQsIHJldCksIHVybGRhdGEudXJsKQorCisgICAgICAgIGlmIGl0ZXJhdGUgaXMgVHJ1ZToKKyAgICAgICAgICAgIGl0ZXJhdGVfdXJsZGF0YSA9IHVybGRhdGEKKyAgICAgICAgICAgIGl0ZXJhdGVfdXJsZGF0YS5sb2NhbHBhdGggPSAiJXMvJXMiICUgKHJvb3RkaXIsIGl0ZXJhdGVfZmlsZSkKKyAgICAgICAgICAgIHNlbGYudW5wYWNrKHVybGRhdGEsIHJvb3RkaXIsIGRhdGEpCisKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgY2xlYW4oc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDbGVhbiBhbnkgZXhpc3RpbmcgZnVsbCBvciBwYXJ0aWFsIGRvd25sb2FkCisgICAgICAgICIiIgorICAgICAgICBiYi51dGlscy5yZW1vdmUodXJsZGF0YS5sb2NhbHBhdGgpCisKKyAgICBkZWYgdHJ5X3ByZW1pcnJvcihzZWxmLCB1cmxkYXRhLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIFNob3VsZCBwcmVtaXJyb3JzIGJlIHVzZWQ/CisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGNoZWNrc3RhdHVzKHNlbGYsIGZldGNoLCB1cmxkYXRhLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRoZSBzdGF0dXMgb2YgYSBVUkwKKyAgICAgICAgQXNzdW1lcyBsb2NhbHBhdGggd2FzIGNhbGxlZCBmaXJzdAorICAgICAgICAiIiIKKyAgICAgICAgbG9nZ2VyLmluZm8oIlVSTCAlcyBjb3VsZCBub3QgYmUgY2hlY2tlZCBmb3Igc3RhdHVzIHNpbmNlIG5vIG1ldGhvZCBleGlzdHMuIiwgdXJsKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGxhdGVzdF9yZXZpc2lvbihzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBMb29rIGluIHRoZSBjYWNoZSBmb3IgdGhlIGxhdGVzdCByZXZpc2lvbiwgaWYgbm90IHByZXNlbnQgYXNrIHRoZSBTQ00uCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX2xhdGVzdF9yZXZpc2lvbiIpOgorICAgICAgICAgICAgcmFpc2UgUGFyYW1ldGVyRXJyb3IoIlRoZSBmZXRjaGVyIGZvciB0aGlzIFVSTCBkb2VzIG5vdCBzdXBwb3J0IF9sYXRlc3RfcmV2aXNpb24iLCB1cmwpCisKKyAgICAgICAgcmV2cyA9IGJiLnBlcnNpc3RfZGF0YS5wZXJzaXN0KCdCQl9VUklfSEVBRFJFVlMnLCBkKQorICAgICAgICBrZXkgPSBzZWxmLmdlbmVyYXRlX3JldmlzaW9uX2tleSh1ZCwgZCwgbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHJldnNba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXZzW2tleV0gPSByZXYgPSBzZWxmLl9sYXRlc3RfcmV2aXNpb24odWQsIGQsIG5hbWUpCisgICAgICAgICAgICByZXR1cm4gcmV2CisKKyAgICBkZWYgc29ydGFibGVfcmV2aXNpb24oc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICBsYXRlc3RfcmV2ID0gc2VsZi5fYnVpbGRfcmV2aXNpb24odWQsIGQsIG5hbWUpCisgICAgICAgIHJldHVybiBUcnVlLCBzdHIobGF0ZXN0X3JldikKKworICAgIGRlZiBnZW5lcmF0ZV9yZXZpc2lvbl9rZXkoc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICBrZXkgPSBzZWxmLl9yZXZpc2lvbl9rZXkodWQsIGQsIG5hbWUpCisgICAgICAgIHJldHVybiAiJXMtJXMiICUgKGtleSwgZC5nZXRWYXIoIlBOIiwgVHJ1ZSkgb3IgIiIpCisKK2NsYXNzIEZldGNoKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybHMsIGQsIGNhY2hlID0gVHJ1ZSwgbG9jYWxvbmx5ID0gRmFsc2UsIGNvbm5lY3Rpb25fY2FjaGUgPSBOb25lKToKKyAgICAgICAgaWYgbG9jYWxvbmx5IGFuZCBjYWNoZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiYmIuZmV0Y2gyLkZldGNoLl9faW5pdF9fOiBjYW5ub3Qgc2V0IGNhY2hlIGFuZCBsb2NhbG9ubHkgYXQgc2FtZSB0aW1lIikKKworICAgICAgICBpZiBsZW4odXJscykgPT0gMDoKKyAgICAgICAgICAgIHVybHMgPSBkLmdldFZhcigiU1JDX1VSSSIsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgc2VsZi51cmxzID0gdXJscworICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYudWQgPSB7fQorICAgICAgICBzZWxmLmNvbm5lY3Rpb25fY2FjaGUgPSBjb25uZWN0aW9uX2NhY2hlCisKKyAgICAgICAgZm4gPSBkLmdldFZhcignRklMRScsIFRydWUpCisgICAgICAgIGlmIGNhY2hlIGFuZCBmbiBhbmQgZm4gaW4gdXJsZGF0YV9jYWNoZToKKyAgICAgICAgICAgIHNlbGYudWQgPSB1cmxkYXRhX2NhY2hlW2ZuXQorCisgICAgICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgICAgIGlmIHVybCBub3QgaW4gc2VsZi51ZDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYudWRbdXJsXSA9IEZldGNoRGF0YSh1cmwsIGQsIGxvY2Fsb25seSkKKyAgICAgICAgICAgICAgICBleGNlcHQgTm9uTG9jYWxNZXRob2Q6CisgICAgICAgICAgICAgICAgICAgIGlmIGxvY2Fsb25seToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudWRbdXJsXSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiBmbiBhbmQgY2FjaGU6CisgICAgICAgICAgICB1cmxkYXRhX2NhY2hlW2ZuXSA9IHNlbGYudWQKKworICAgIGRlZiBsb2NhbHBhdGgoc2VsZiwgdXJsKToKKyAgICAgICAgaWYgdXJsIG5vdCBpbiBzZWxmLnVybHM6CisgICAgICAgICAgICBzZWxmLnVkW3VybF0gPSBGZXRjaERhdGEodXJsLCBzZWxmLmQpCisKKyAgICAgICAgc2VsZi51ZFt1cmxdLnNldHVwX2xvY2FscGF0aChzZWxmLmQpCisgICAgICAgIHJldHVybiBzZWxmLmQuZXhwYW5kKHNlbGYudWRbdXJsXS5sb2NhbHBhdGgpCisKKyAgICBkZWYgbG9jYWxwYXRocyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGxvY2FsIGZpbGVuYW1lcywgYXNzdW1pbmcgc3VjY2Vzc2Z1bCBmZXRjaAorICAgICAgICAiIiIKKyAgICAgICAgbG9jYWwgPSBbXQorCisgICAgICAgIGZvciB1IGluIHNlbGYudXJsczoKKyAgICAgICAgICAgIHVkID0gc2VsZi51ZFt1XQorICAgICAgICAgICAgdWQuc2V0dXBfbG9jYWxwYXRoKHNlbGYuZCkKKyAgICAgICAgICAgIGxvY2FsLmFwcGVuZCh1ZC5sb2NhbHBhdGgpCisKKyAgICAgICAgcmV0dXJuIGxvY2FsCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdXJscz1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIEZldGNoIGFsbCB1cmxzCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgdXJsczoKKyAgICAgICAgICAgIHVybHMgPSBzZWxmLnVybHMKKworICAgICAgICBuZXR3b3JrID0gc2VsZi5kLmdldFZhcigiQkJfTk9fTkVUV09SSyIsIFRydWUpCisgICAgICAgIHByZW1pcnJvcm9ubHkgPSAoc2VsZi5kLmdldFZhcigiQkJfRkVUQ0hfUFJFTUlSUk9ST05MWSIsIFRydWUpID09ICIxIikKKworICAgICAgICBmb3IgdSBpbiB1cmxzOgorICAgICAgICAgICAgdWQgPSBzZWxmLnVkW3VdCisgICAgICAgICAgICB1ZC5zZXR1cF9sb2NhbHBhdGgoc2VsZi5kKQorICAgICAgICAgICAgbSA9IHVkLm1ldGhvZAorICAgICAgICAgICAgbG9jYWxwYXRoID0gIiIKKworICAgICAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSh1ZC5sb2NrZmlsZSkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJCX05PX05FVFdPUksiLCBuZXR3b3JrKQorIAorICAgICAgICAgICAgICAgIGlmIHZlcmlmeV9kb25lc3RhbXAodWQsIHNlbGYuZCkgYW5kIG5vdCBtLm5lZWRfdXBkYXRlKHVkLCBzZWxmLmQpOgorICAgICAgICAgICAgICAgICAgICBsb2NhbHBhdGggPSB1ZC5sb2NhbHBhdGgKKyAgICAgICAgICAgICAgICBlbGlmIG0udHJ5X3ByZW1pcnJvcih1ZCwgc2VsZi5kKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJUcnlpbmcgUFJFTUlSUk9SUyIpCisgICAgICAgICAgICAgICAgICAgIG1pcnJvcnMgPSBtaXJyb3JfZnJvbV9zdHJpbmcoc2VsZi5kLmdldFZhcignUFJFTUlSUk9SUycsIFRydWUpKQorICAgICAgICAgICAgICAgICAgICBsb2NhbHBhdGggPSB0cnlfbWlycm9ycyhzZWxmLCBzZWxmLmQsIHVkLCBtaXJyb3JzLCBGYWxzZSkKKworICAgICAgICAgICAgICAgIGlmIHByZW1pcnJvcm9ubHk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJCX05PX05FVFdPUksiLCAiMSIpCisKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihzZWxmLmQuZ2V0VmFyKCJETF9ESVIiLCBUcnVlKSkKKworICAgICAgICAgICAgICAgIGZpcnN0ZXJyID0gTm9uZQorICAgICAgICAgICAgICAgIHZlcmlmaWVkX3N0YW1wID0gdmVyaWZ5X2RvbmVzdGFtcCh1ZCwgc2VsZi5kKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsb2NhbHBhdGggYW5kIChub3QgdmVyaWZpZWRfc3RhbXAgb3IgbS5uZWVkX3VwZGF0ZSh1ZCwgc2VsZi5kKSk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCB0cnVzdGVkX25ldHdvcmsoc2VsZi5kLCB1ZC51cmwpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFVudHJ1c3RlZFVybCh1ZC51cmwpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlRyeWluZyBVcHN0cmVhbSIpCisgICAgICAgICAgICAgICAgICAgICAgICBtLmRvd25sb2FkKHVkLCBzZWxmLmQpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKG0sICJidWlsZF9taXJyb3JfZGF0YSIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uYnVpbGRfbWlycm9yX2RhdGEodWQsIHNlbGYuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FscGF0aCA9IHVkLmxvY2FscGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgIyBlYXJseSBjaGVja3N1bSB2ZXJpZnksIHNvIHRoYXQgaWYgY2hlY2tzdW0gbWlzbWF0Y2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZmV0Y2hlciBzdGlsbCBoYXZlIGNoYW5jZSB0byBmZXRjaCBmcm9tIG1pcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3N0YW1wKHVkLCBzZWxmLmQpCisKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5OZXR3b3JrQWNjZXNzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgICAgICAgICBleGNlcHQgQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlLCBDaGVja3N1bUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiQ2hlY2tzdW0gZmFpbHVyZSBlbmNvdW50ZXJlZCB3aXRoIGRvd25sb2FkIG9mICVzIC0gd2lsbCBhdHRlbXB0IG90aGVyIHNvdXJjZXMgaWYgYXZhaWxhYmxlIiAlIHUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsIHN0cihlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5hbWVfYmFkX2NoZWNrc3VtKHVkLCBlLmNoZWNrc3VtKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGUsIE5vQ2hlY2tzdW1FcnJvcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBmZXRjaCBVUkwgJXMsIGF0dGVtcHRpbmcgTUlSUk9SUyBpZiBhdmFpbGFibGUnICUgdSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgc3RyKGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RlcnIgPSBlCisgICAgICAgICAgICAgICAgICAgICAgICAjIFJlbW92ZSBhbnkgaW5jb21wbGV0ZSBmZXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHZlcmlmaWVkX3N0YW1wOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uY2xlYW4odWQsIHNlbGYuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVHJ5aW5nIE1JUlJPUlMiKQorICAgICAgICAgICAgICAgICAgICAgICAgbWlycm9ycyA9IG1pcnJvcl9mcm9tX3N0cmluZyhzZWxmLmQuZ2V0VmFyKCdNSVJST1JTJywgVHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHBhdGggPSB0cnlfbWlycm9ycyhzZWxmLCBzZWxmLmQsIHVkLCBtaXJyb3JzKQorCisgICAgICAgICAgICAgICAgaWYgbm90IGxvY2FscGF0aCBvciAoKG5vdCBvcy5wYXRoLmV4aXN0cyhsb2NhbHBhdGgpKSBhbmQgbG9jYWxwYXRoLmZpbmQoIioiKSA9PSAtMSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGZpcnN0ZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihmaXJzdGVycikpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIlVuYWJsZSB0byBmZXRjaCBVUkwgZnJvbSBhbnkgc291cmNlLiIsIHUpCisKKyAgICAgICAgICAgICAgICB1cGRhdGVfc3RhbXAodWQsIHNlbGYuZCkKKworICAgICAgICAgICAgZXhjZXB0IEJCRmV0Y2hFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGUsIENoZWNrc3VtRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNoZWNrc3VtIGZhaWx1cmUgZmV0Y2hpbmcgJXMiICUgdSkKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisKKyAgICBkZWYgY2hlY2tzdGF0dXMoc2VsZiwgdXJscz1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIGFsbCB1cmxzIGV4aXN0IHVwc3RyZWFtCisgICAgICAgICIiIgorCisgICAgICAgIGlmIG5vdCB1cmxzOgorICAgICAgICAgICAgdXJscyA9IHNlbGYudXJscworCisgICAgICAgIGZvciB1IGluIHVybHM6CisgICAgICAgICAgICB1ZCA9IHNlbGYudWRbdV0KKyAgICAgICAgICAgIHVkLnNldHVwX2xvY2FscGF0aChzZWxmLmQpCisgICAgICAgICAgICBtID0gdWQubWV0aG9kCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlRlc3RpbmcgVVJMICVzIiwgdSkKKyAgICAgICAgICAgICMgRmlyc3QgdHJ5IGNoZWNraW5nIHVyaSwgdSwgZnJvbSBQUkVNSVJST1JTCisgICAgICAgICAgICBtaXJyb3JzID0gbWlycm9yX2Zyb21fc3RyaW5nKHNlbGYuZC5nZXRWYXIoJ1BSRU1JUlJPUlMnLCBUcnVlKSkKKyAgICAgICAgICAgIHJldCA9IHRyeV9taXJyb3JzKHNlbGYsIHNlbGYuZCwgdWQsIG1pcnJvcnMsIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcmV0OgorICAgICAgICAgICAgICAgICMgTmV4dCB0cnkgY2hlY2tpbmcgZnJvbSB0aGUgb3JpZ2luYWwgdXJpLCB1CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXQgPSBtLmNoZWNrc3RhdHVzKHNlbGYsIHVkLCBzZWxmLmQpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAjIEZpbmFsbHksIHRyeSBjaGVja2luZyB1cmksIHUsIGZyb20gTUlSUk9SUworICAgICAgICAgICAgICAgICAgICBtaXJyb3JzID0gbWlycm9yX2Zyb21fc3RyaW5nKHNlbGYuZC5nZXRWYXIoJ01JUlJPUlMnLCBUcnVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gdHJ5X21pcnJvcnMoc2VsZiwgc2VsZi5kLCB1ZCwgbWlycm9ycywgVHJ1ZSkKKworICAgICAgICAgICAgaWYgbm90IHJldDoKKyAgICAgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJVUkwgJXMgZG9lc24ndCB3b3JrIiAlIHUsIHUpCisKKyAgICBkZWYgdW5wYWNrKHNlbGYsIHJvb3QsIHVybHM9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayBhbGwgdXJscyBleGlzdCB1cHN0cmVhbQorICAgICAgICAiIiIKKworICAgICAgICBpZiBub3QgdXJsczoKKyAgICAgICAgICAgIHVybHMgPSBzZWxmLnVybHMKKworICAgICAgICBmb3IgdSBpbiB1cmxzOgorICAgICAgICAgICAgdWQgPSBzZWxmLnVkW3VdCisgICAgICAgICAgICB1ZC5zZXR1cF9sb2NhbHBhdGgoc2VsZi5kKQorCisgICAgICAgICAgICBpZiBzZWxmLmQuZXhwYW5kKHNlbGYubG9jYWxwYXRoKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIHVkLmxvY2tmaWxlOgorICAgICAgICAgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUodWQubG9ja2ZpbGUpCisKKyAgICAgICAgICAgIHVkLm1ldGhvZC51bnBhY2sodWQsIHJvb3QsIHNlbGYuZCkKKworICAgICAgICAgICAgaWYgdWQubG9ja2ZpbGU6CisgICAgICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKworICAgIGRlZiBjbGVhbihzZWxmLCB1cmxzPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2xlYW4gZmlsZXMgdGhhdCB0aGUgZmV0Y2hlciBnZXRzIG9yIHBsYWNlcworICAgICAgICAiIiIKKworICAgICAgICBpZiBub3QgdXJsczoKKyAgICAgICAgICAgIHVybHMgPSBzZWxmLnVybHMKKworICAgICAgICBmb3IgdXJsIGluIHVybHM6CisgICAgICAgICAgICBpZiB1cmwgbm90IGluIHNlbGYudWQ6CisgICAgICAgICAgICAgICAgc2VsZi51ZFt1cmxdID0gRmV0Y2hEYXRhKHVybCwgZCkKKyAgICAgICAgICAgIHVkID0gc2VsZi51ZFt1cmxdCisgICAgICAgICAgICB1ZC5zZXR1cF9sb2NhbHBhdGgoc2VsZi5kKQorCisgICAgICAgICAgICBpZiBub3QgdWQubG9jYWxmaWxlIGFuZCB1ZC5sb2NhbHBhdGggaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiB1ZC5sb2NrZmlsZToKKyAgICAgICAgICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKHVkLmxvY2tmaWxlKQorCisgICAgICAgICAgICB1ZC5tZXRob2QuY2xlYW4odWQsIHNlbGYuZCkKKyAgICAgICAgICAgIGlmIHVkLmRvbmVzdGFtcDoKKyAgICAgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUodWQuZG9uZXN0YW1wKQorCisgICAgICAgICAgICBpZiB1ZC5sb2NrZmlsZToKKyAgICAgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorCitjbGFzcyBGZXRjaENvbm5lY3Rpb25DYWNoZShvYmplY3QpOgorICAgICIiIgorICAgICAgICBBIGNsYXNzIHdoaWNoIHJlcHJlc2VudHMgYW4gY29udGFpbmVyIGZvciBzb2NrZXQgY29ubmVjdGlvbnMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmNhY2hlID0ge30KKworICAgIGRlZiBnZXRfY29ubmVjdGlvbl9uYW1lKHNlbGYsIGhvc3QsIHBvcnQpOgorICAgICAgICByZXR1cm4gaG9zdCArICc6JyArIHN0cihwb3J0KQorCisgICAgZGVmIGFkZF9jb25uZWN0aW9uKHNlbGYsIGhvc3QsIHBvcnQsIGNvbm5lY3Rpb24pOgorICAgICAgICBjbiA9IHNlbGYuZ2V0X2Nvbm5lY3Rpb25fbmFtZShob3N0LCBwb3J0KQorCisgICAgICAgIGlmIGNuIG5vdCBpbiBzZWxmLmNhY2hlOgorICAgICAgICAgICAgc2VsZi5jYWNoZVtjbl0gPSBjb25uZWN0aW9uCisKKyAgICBkZWYgZ2V0X2Nvbm5lY3Rpb24oc2VsZiwgaG9zdCwgcG9ydCk6CisgICAgICAgIGNvbm5lY3Rpb24gPSBOb25lCisKKyAgICAgICAgY24gPSBzZWxmLmdldF9jb25uZWN0aW9uX25hbWUoaG9zdCwgcG9ydCkKKyAgICAgICAgaWYgY24gaW4gc2VsZi5jYWNoZToKKyAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBzZWxmLmNhY2hlW2NuXQorCisgICAgICAgIHJldHVybiBjb25uZWN0aW9uCisKKyAgICBkZWYgcmVtb3ZlX2Nvbm5lY3Rpb24oc2VsZiwgaG9zdCwgcG9ydCk6CisgICAgICAgIGNuID0gc2VsZi5nZXRfY29ubmVjdGlvbl9uYW1lKGhvc3QsIHBvcnQpCisgICAgICAgIGlmIGNuIGluIHNlbGYuY2FjaGU6CisgICAgICAgICAgICBzZWxmLmNhY2hlW2NuXS5jbG9zZSgpCisgICAgICAgICAgICBkZWwgc2VsZi5jYWNoZVtjbl0KKworICAgIGRlZiBjbG9zZV9jb25uZWN0aW9ucyhzZWxmKToKKyAgICAgICAgZm9yIGNuIGluIHNlbGYuY2FjaGUua2V5cygpOgorICAgICAgICAgICAgc2VsZi5jYWNoZVtjbl0uY2xvc2UoKQorICAgICAgICAgICAgZGVsIHNlbGYuY2FjaGVbY25dCisKK2Zyb20gLiBpbXBvcnQgY3ZzCitmcm9tIC4gaW1wb3J0IGdpdAorZnJvbSAuIGltcG9ydCBnaXRzbQorZnJvbSAuIGltcG9ydCBnaXRhbm5leAorZnJvbSAuIGltcG9ydCBsb2NhbAorZnJvbSAuIGltcG9ydCBzdm4KK2Zyb20gLiBpbXBvcnQgd2dldAorZnJvbSAuIGltcG9ydCBzc2gKK2Zyb20gLiBpbXBvcnQgc2Z0cAorZnJvbSAuIGltcG9ydCBwZXJmb3JjZQorZnJvbSAuIGltcG9ydCBienIKK2Zyb20gLiBpbXBvcnQgaGcKK2Zyb20gLiBpbXBvcnQgb3NjCitmcm9tIC4gaW1wb3J0IHJlcG8KK2Zyb20gLiBpbXBvcnQgY2xlYXJjYXNlCisKK21ldGhvZHMuYXBwZW5kKGxvY2FsLkxvY2FsKCkpCittZXRob2RzLmFwcGVuZCh3Z2V0LldnZXQoKSkKK21ldGhvZHMuYXBwZW5kKHN2bi5Tdm4oKSkKK21ldGhvZHMuYXBwZW5kKGdpdC5HaXQoKSkKK21ldGhvZHMuYXBwZW5kKGdpdHNtLkdpdFNNKCkpCittZXRob2RzLmFwcGVuZChnaXRhbm5leC5HaXRBTk5FWCgpKQorbWV0aG9kcy5hcHBlbmQoY3ZzLkN2cygpKQorbWV0aG9kcy5hcHBlbmQoc3NoLlNTSCgpKQorbWV0aG9kcy5hcHBlbmQoc2Z0cC5TRlRQKCkpCittZXRob2RzLmFwcGVuZChwZXJmb3JjZS5QZXJmb3JjZSgpKQorbWV0aG9kcy5hcHBlbmQoYnpyLkJ6cigpKQorbWV0aG9kcy5hcHBlbmQoaGcuSGcoKSkKK21ldGhvZHMuYXBwZW5kKG9zYy5Pc2MoKSkKK21ldGhvZHMuYXBwZW5kKHJlcG8uUmVwbygpKQorbWV0aG9kcy5hcHBlbmQoY2xlYXJjYXNlLkNsZWFyQ2FzZSgpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvYnpyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvYnpyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZTlhYzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9ienIucHkKQEAgLTAsMCArMSwxNDMgQEAKKyIiIgorQml0QmFrZSAnRmV0Y2gnIGltcGxlbWVudGF0aW9uIGZvciBienIuCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwNyBSb3NzIEJ1cnRvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDcgUmljaGFyZCBQdXJkaWUKKyMKKyMgICBDbGFzc2VzIGZvciBvYnRhaW5pbmcgdXBzdHJlYW0gc291cmNlcyBmb3IgdGhlCisjICAgQml0QmFrZSBidWlsZCB0b29scy4KKyMgICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiCitmcm9tIGJiIGltcG9ydCBkYXRhCitmcm9tIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaEVycm9yCitmcm9tIGJiLmZldGNoMiBpbXBvcnQgcnVuZmV0Y2hjbWQKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBsb2dnZXIKKworY2xhc3MgQnpyKEZldGNoTWV0aG9kKToKKyAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdWQsIGQpOgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ2J6ciddCisKKyAgICBkZWYgdXJsZGF0YV9pbml0KHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIGluaXQgYnpyIHNwZWNpZmljIHZhcmlhYmxlIHdpdGhpbiB1cmwgZGF0YQorICAgICAgICAiIiIKKyAgICAgICAgIyBDcmVhdGUgcGF0aHMgdG8gYnpyIGNoZWNrb3V0cworICAgICAgICByZWxwYXRoID0gc2VsZi5fc3RyaXBfbGVhZGluZ19zbGFzaGVzKHVkLnBhdGgpCisgICAgICAgIHVkLnBrZ2RpciA9IG9zLnBhdGguam9pbihkYXRhLmV4cGFuZCgnJHtCWlJESVJ9JywgZCksIHVkLmhvc3QsIHJlbHBhdGgpCisKKyAgICAgICAgdWQuc2V0dXBfcmV2aXNvbnMoZCkKKworICAgICAgICBpZiBub3QgdWQucmV2aXNpb246CisgICAgICAgICAgICB1ZC5yZXZpc2lvbiA9IHNlbGYubGF0ZXN0X3JldmlzaW9uKHVkLCBkKQorCisgICAgICAgIHVkLmxvY2FsZmlsZSA9IGRhdGEuZXhwYW5kKCdienJfJXNfJXNfJXMudGFyLmd6JyAlICh1ZC5ob3N0LCB1ZC5wYXRoLnJlcGxhY2UoJy8nLCAnLicpLCB1ZC5yZXZpc2lvbiksIGQpCisKKyAgICBkZWYgX2J1aWxkYnpyY29tbWFuZChzZWxmLCB1ZCwgZCwgY29tbWFuZCk6CisgICAgICAgICIiIgorICAgICAgICBCdWlsZCB1cCBhbiBienIgY29tbWFuZGxpbmUgYmFzZWQgb24gdWQKKyAgICAgICAgY29tbWFuZCBpcyAiZmV0Y2giLCAidXBkYXRlIiwgInJldm5vIgorICAgICAgICAiIiIKKworICAgICAgICBiYXNlY21kID0gZGF0YS5leHBhbmQoJyR7RkVUQ0hDTURfYnpyfScsIGQpCisKKyAgICAgICAgcHJvdG8gPSAgdWQucGFybS5nZXQoJ3Byb3RvY29sJywgJ2h0dHAnKQorCisgICAgICAgIGJ6cnJvb3QgPSB1ZC5ob3N0ICsgdWQucGF0aAorCisgICAgICAgIG9wdGlvbnMgPSBbXQorCisgICAgICAgIGlmIGNvbW1hbmQgPT0gInJldm5vIjoKKyAgICAgICAgICAgIGJ6cmNtZCA9ICIlcyByZXZubyAlcyAlczovLyVzIiAlIChiYXNlY21kLCAiICIuam9pbihvcHRpb25zKSwgcHJvdG8sIGJ6cnJvb3QpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiB1ZC5yZXZpc2lvbjoKKyAgICAgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgiLXIgJXMiICUgdWQucmV2aXNpb24pCisKKyAgICAgICAgICAgIGlmIGNvbW1hbmQgPT0gImZldGNoIjoKKyAgICAgICAgICAgICAgICBienJjbWQgPSAiJXMgYnJhbmNoICVzICVzOi8vJXMiICUgKGJhc2VjbWQsICIgIi5qb2luKG9wdGlvbnMpLCBwcm90bywgYnpycm9vdCkKKyAgICAgICAgICAgIGVsaWYgY29tbWFuZCA9PSAidXBkYXRlIjoKKyAgICAgICAgICAgICAgICBienJjbWQgPSAiJXMgcHVsbCAlcyAtLW92ZXJ3cml0ZSIgJSAoYmFzZWNtZCwgIiAiLmpvaW4ob3B0aW9ucykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIkludmFsaWQgYnpyIGNvbW1hbmQgJXMiICUgY29tbWFuZCwgdWQudXJsKQorCisgICAgICAgIHJldHVybiBienJjbWQKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIkZldGNoIHVybCIiIgorCisgICAgICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4odWQucGtnZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHVkLnBrZ2RpciksICcuYnpyJyksIG9zLlJfT0spOgorICAgICAgICAgICAgYnpyY21kID0gc2VsZi5fYnVpbGRienJjb21tYW5kKHVkLCBkLCAidXBkYXRlIikKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiQlpSIFVwZGF0ZSAlcyIsIHVkLnVybCkKKyAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBienJjbWQsIHVkLnVybCkKKyAgICAgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbiAodWQucGtnZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHVkLnBhdGgpKSkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKGJ6cmNtZCwgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4odWQucGtnZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHVkLnBrZ2RpcikpLCBUcnVlKQorICAgICAgICAgICAgYnpyY21kID0gc2VsZi5fYnVpbGRienJjb21tYW5kKHVkLCBkLCAiZmV0Y2giKQorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGJ6cmNtZCwgdWQudXJsKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJCWlIgQ2hlY2tvdXQgJXMiLCB1ZC51cmwpCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodWQucGtnZGlyKQorICAgICAgICAgICAgb3MuY2hkaXIodWQucGtnZGlyKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgYnpyY21kKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoYnpyY21kLCBkKQorCisgICAgICAgIG9zLmNoZGlyKHVkLnBrZ2RpcikKKworICAgICAgICBzY21kYXRhID0gdWQucGFybS5nZXQoInNjbWRhdGEiLCAiIikKKyAgICAgICAgaWYgc2NtZGF0YSA9PSAia2VlcCI6CisgICAgICAgICAgICB0YXJfZmxhZ3MgPSAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFyX2ZsYWdzID0gIi0tZXhjbHVkZSAnLmJ6cicgLS1leGNsdWRlICcuYnpydGFncyciCisKKyAgICAgICAgIyB0YXIgdGhlbSB1cCB0byBhIGRlZmluZWQgZmlsZW5hbWUKKyAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAlcyAtY3pmICVzICVzIiAlICh0YXJfZmxhZ3MsIHVkLmxvY2FscGF0aCwgb3MucGF0aC5iYXNlbmFtZSh1ZC5wa2dkaXIpKSwgZCwgY2xlYW51cCA9IFt1ZC5sb2NhbHBhdGhdKQorCisgICAgZGVmIHN1cHBvcnRzX3NyY3JldihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfcmV2aXNpb25fa2V5KHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIHVuaXF1ZSBrZXkgZm9yIHRoZSB1cmwKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiYnpyOiIgKyB1ZC5wa2dkaXIKKworICAgIGRlZiBfbGF0ZXN0X3JldmlzaW9uKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgbGF0ZXN0IHVwc3RyZWFtIHJldmlzaW9uIG51bWJlcgorICAgICAgICAiIiIKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJCWlIgZmV0Y2hlciBoaXR0aW5nIG5ldHdvcmsgZm9yICVzIiwgdWQudXJsKQorCisgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBzZWxmLl9idWlsZGJ6cmNvbW1hbmQodWQsIGQsICJyZXZubyIpLCB1ZC51cmwpCisKKyAgICAgICAgb3V0cHV0ID0gcnVuZmV0Y2hjbWQoc2VsZi5fYnVpbGRienJjb21tYW5kKHVkLCBkLCAicmV2bm8iKSwgZCwgVHJ1ZSkKKworICAgICAgICByZXR1cm4gb3V0cHV0LnN0cmlwKCkKKworICAgIGRlZiBzb3J0YWJsZV9yZXZpc2lvbihzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBzb3J0YWJsZSByZXZpc2lvbiBudW1iZXIgd2hpY2ggaW4gb3VyIGNhc2UgaXMgdGhlIHJldmlzaW9uIG51bWJlcgorICAgICAgICAiIiIKKworICAgICAgICByZXR1cm4gRmFsc2UsIHNlbGYuX2J1aWxkX3JldmlzaW9uKHVkLCBkKQorCisgICAgZGVmIF9idWlsZF9yZXZpc2lvbihzZWxmLCB1ZCwgZCk6CisgICAgICAgIHJldHVybiB1ZC5yZXZpc2lvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvY2xlYXJjYXNlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvY2xlYXJjYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhODNlN2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9jbGVhcmNhc2UucHkKQEAgLTAsMCArMSwyNjMgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgJ0ZldGNoJyBjbGVhcmNhc2UgaW1wbGVtZW50YXRpb24KKworVGhlIGNsZWFyY2FzZSBmZXRjaGVyIGlzIHVzZWQgdG8gcmV0cmlldmUgZmlsZXMgZnJvbSBhIENsZWFyQ2FzZSByZXBvc2l0b3J5LgorCitVc2FnZSBpbiB0aGUgcmVjaXBlOgorCisgICAgU1JDX1VSSSA9ICJjY3JjOi8vY2MuZXhhbXBsZS5vcmcvY2NyYzt2b2I9L2V4YW1wbGVfdm9iO21vZHVsZT0vZXhhbXBsZV9tb2R1bGUiCisgICAgU1JDUkVWID0gIkVYQU1QTEVfQ0xFQVJDQVNFX1RBRyIKKyAgICBQViA9ICIke0BkLmdldFZhcigiU1JDUkVWIiwgRmFsc2UpLnJlcGxhY2UoIi8iLCAiKyIpfSIKKworVGhlIGZldGNoZXIgdXNlcyB0aGUgcmNsZWFydG9vbCBvciBjbGVhcnRvb2wgcmVtb3RlIGNsaWVudCwgZGVwZW5kaW5nIG9uIHdoaWNoIG9uZSBpcyBhdmFpbGFibGUuCisKK1N1cHBvcnRlZCBTUkNfVVJJIG9wdGlvbnMgYXJlOgorCistIHZvYgorICAgIChyZXF1aXJlZCkgVGhlIG5hbWUgb2YgdGhlIGNsZWFyY2FzZSBWT0IgKHdpdGggcHJlcGVuZGluZyAiLyIpCisKKy0gbW9kdWxlCisgICAgVGhlIG1vZHVsZSBpbiB0aGUgc2VsZWN0ZWQgVk9CICh3aXRoIHByZXBlbmRpbmcgIi8iKQorCisgICAgVGhlIG1vZHVsZSBhbmQgdm9iIHBhcmFtZXRlcnMgYXJlIGNvbWJpbmVkIHRvIGNyZWF0ZQorICAgIHRoZSBmb2xsb3dpbmcgbG9hZCBydWxlIGluIHRoZSB2aWV3IGNvbmZpZyBzcGVjOgorICAgICAgICAgICAgICAgIGxvYWQgPHZvYj48bW9kdWxlPgorCistIHByb3RvCisgICAgaHR0cCBvciBodHRwcworCitSZWxhdGVkIHZhcmlhYmxlczoKKworICAgIENDQVNFX0NVU1RPTV9DT05GSUdfU1BFQworICAgICAgICAgICAgV3JpdGUgYSBjb25maWcgc3BlYyB0byB0aGlzIHZhcmlhYmxlIGluIHlvdXIgcmVjaXBlIHRvIHVzZSBpdCBpbnN0ZWFkCisgICAgICAgICAgICBvZiB0aGUgZGVmYXVsdCBjb25maWcgc3BlYyBnZW5lcmF0ZWQgYnkgdGhpcyBmZXRjaGVyLgorICAgICAgICAgICAgUGxlYXNlIG5vdGUgdGhhdCB0aGUgU1JDUkVWIGxvc2VzIGl0cyBmdW5jdGlvbmFsaXR5IGlmIHlvdSBzcGVjaWZ5CisgICAgICAgICAgICB0aGlzIHZhcmlhYmxlLiBTUkNSRVYgaXMgc3RpbGwgdXNlZCB0byBsYWJlbCB0aGUgYXJjaGl2ZSBhZnRlciBhIGZldGNoLAorICAgICAgICAgICAgYnV0IGl0IGRvZXNuJ3QgZGVmaW5lIHdoYXQncyBmZXRjaGVkLgorCitVc2VyIGNyZWRlbnRpYWxzOgorICAgIGNsZWFydG9vbDoKKyAgICAgICAgICAgIFRoZSBsb2dpbiBvZiBjbGVhcnRvb2wgaXMgaGFuZGxlZCBieSB0aGUgc3lzdGVtLiBObyBzcGVjaWFsIHN0ZXBzIG5lZWRlZC4KKworICAgIHJjbGVhcnRvb2w6CisgICAgICAgICAgICBJbiBvcmRlciB0byB1c2UgcmNsZWFydG9vbCB3aXRoIGF1dGhlbnRpY2F0ZWQgdXNlcnMgYW4gYHJjbGVhcnRvb2wgbG9naW5gIGlzCisgICAgICAgICAgICBuZWNlc3NhcnkgYmVmb3JlIHVzaW5nIHRoZSBmZXRjaGVyLgorIiIiCisjIENvcHlyaWdodCAoQykgMjAxNCBTaWVtZW5zIEFHCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBiYgorZnJvbSAgIGJiIGltcG9ydCBkYXRhCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hFcnJvcgorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgcnVuZmV0Y2hjbWQKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IGxvZ2dlcgorZnJvbSAgIGRpc3R1dGlscyBpbXBvcnQgc3Bhd24KKworY2xhc3MgQ2xlYXJDYXNlKEZldGNoTWV0aG9kKToKKyAgICAiIiJDbGFzcyB0byBmZXRjaCB1cmxzIHZpYSAnY2xlYXJjYXNlJyIiIgorICAgIGRlZiBpbml0KHNlbGYsIGQpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdG8gc2VlIGlmIGEgZ2l2ZW4gdXJsIGNhbiBiZSBmZXRjaGVkIHdpdGggQ2xlYXJjYXNlLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHVkLnR5cGUgaW4gWydjY3JjJ10KKworICAgIGRlZiBkZWJ1ZyhzZWxmLCBtc2cpOgorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIkNsZWFyQ2FzZTogJXMiLCBtc2cpCisKKyAgICBkZWYgdXJsZGF0YV9pbml0KHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIGluaXQgQ2xlYXJDYXNlIHNwZWNpZmljIHZhcmlhYmxlIHdpdGhpbiB1cmwgZGF0YQorICAgICAgICAiIiIKKyAgICAgICAgdWQucHJvdG8gPSAiaHR0cHMiCisgICAgICAgIGlmICdwcm90b2NvbCcgaW4gdWQucGFybToKKyAgICAgICAgICAgIHVkLnByb3RvID0gdWQucGFybVsncHJvdG9jb2wnXQorICAgICAgICBpZiBub3QgdWQucHJvdG8gaW4gKCdodHRwJywgJ2h0dHBzJyk6CisgICAgICAgICAgICByYWlzZSBmZXRjaDIuUGFyYW1ldGVyRXJyb3IoIkludmFsaWQgcHJvdG9jb2wgdHlwZSIsIHVkLnVybCkKKworICAgICAgICB1ZC52b2IgPSAnJworICAgICAgICBpZiAndm9iJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgdWQudm9iID0gdWQucGFybVsndm9iJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyA9IHVkLnVybCsiOiB2b2IgbXVzdCBiZSBkZWZpbmVkIHNvIHRoZSBmZXRjaGVyIGtub3dzIHdoYXQgdG8gZ2V0LiIKKyAgICAgICAgICAgIHJhaXNlIE1pc3NpbmdQYXJhbWV0ZXJFcnJvcigndm9iJywgbXNnKQorCisgICAgICAgIGlmICdtb2R1bGUnIGluIHVkLnBhcm06CisgICAgICAgICAgICB1ZC5tb2R1bGUgPSB1ZC5wYXJtWydtb2R1bGUnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdWQubW9kdWxlID0gIiIKKworICAgICAgICB1ZC5iYXNlY21kID0gZC5nZXRWYXIoIkZFVENIQ01EX2NjcmMiLCBUcnVlKSBvciBzcGF3bi5maW5kX2V4ZWN1dGFibGUoImNsZWFydG9vbCIpIG9yIHNwYXduLmZpbmRfZXhlY3V0YWJsZSgicmNsZWFydG9vbCIpCisKKyAgICAgICAgaWYgZGF0YS5nZXRWYXIoIlNSQ1JFViIsIGQsIFRydWUpID09ICJJTlZBTElEIjoKKyAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJTZXQgYSB2YWxpZCBTUkNSRVYgZm9yIHRoZSBjbGVhcmNhc2UgZmV0Y2hlciBpbiB5b3VyIHJlY2lwZSwgZS5nLiBTUkNSRVYgPSBcIi9tYWluL0xBVEVTVFwiIG9yIGFueSBvdGhlciBsYWJlbCBvZiB5b3VyIGNob2ljZS4iKQorCisgICAgICAgIHVkLmxhYmVsID0gZC5nZXRWYXIoIlNSQ1JFViIsIEZhbHNlKQorICAgICAgICB1ZC5jdXN0b21zcGVjID0gZC5nZXRWYXIoIkNDQVNFX0NVU1RPTV9DT05GSUdfU1BFQyIsIFRydWUpCisKKyAgICAgICAgdWQuc2VydmVyICAgICA9ICIlczovLyVzJXMiICUgKHVkLnByb3RvLCB1ZC5ob3N0LCB1ZC5wYXRoKQorCisgICAgICAgIHVkLmlkZW50aWZpZXIgPSAiY2xlYXJjYXNlLSVzJXMtJXMiICUgKCB1ZC52b2IucmVwbGFjZSgiLyIsICIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkLm1vZHVsZS5yZXBsYWNlKCIvIiwgIi4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkLmxhYmVsLnJlcGxhY2UoIi8iLCAiLiIpKQorCisgICAgICAgIHVkLnZpZXduYW1lICAgICAgICAgPSAiJXMtdmlldyVzIiAlICh1ZC5pZGVudGlmaWVyLCBkLmdldFZhcigiREFURVRJTUUiLCBkLCBUcnVlKSkKKyAgICAgICAgdWQuY3NuYW1lICAgICAgICAgICA9ICIlcy1jb25maWctc3BlYyIgJSAodWQuaWRlbnRpZmllcikKKyAgICAgICAgdWQuY2Nhc2VkaXIgICAgICAgICA9IG9zLnBhdGguam9pbihkYXRhLmdldFZhcigiRExfRElSIiwgZCwgVHJ1ZSksIHVkLnR5cGUpCisgICAgICAgIHVkLnZpZXdkaXIgICAgICAgICAgPSBvcy5wYXRoLmpvaW4odWQuY2Nhc2VkaXIsIHVkLnZpZXduYW1lKQorICAgICAgICB1ZC5jb25maWdzcGVjZmlsZSAgID0gb3MucGF0aC5qb2luKHVkLmNjYXNlZGlyLCB1ZC5jc25hbWUpCisgICAgICAgIHVkLmxvY2FsZmlsZSAgICAgICAgPSAiJXMudGFyLmd6IiAlICh1ZC5pZGVudGlmaWVyKQorCisgICAgICAgIHNlbGYuZGVidWcoImhvc3QgICAgICAgICAgICA9ICVzIiAlIHVkLmhvc3QpCisgICAgICAgIHNlbGYuZGVidWcoInBhdGggICAgICAgICAgICA9ICVzIiAlIHVkLnBhdGgpCisgICAgICAgIHNlbGYuZGVidWcoInNlcnZlciAgICAgICAgICA9ICVzIiAlIHVkLnNlcnZlcikKKyAgICAgICAgc2VsZi5kZWJ1ZygicHJvdG8gICAgICAgICAgID0gJXMiICUgdWQucHJvdG8pCisgICAgICAgIHNlbGYuZGVidWcoInR5cGUgICAgICAgICAgICA9ICVzIiAlIHVkLnR5cGUpCisgICAgICAgIHNlbGYuZGVidWcoInZvYiAgICAgICAgICAgICA9ICVzIiAlIHVkLnZvYikKKyAgICAgICAgc2VsZi5kZWJ1ZygibW9kdWxlICAgICAgICAgID0gJXMiICUgdWQubW9kdWxlKQorICAgICAgICBzZWxmLmRlYnVnKCJiYXNlY21kICAgICAgICAgPSAlcyIgJSB1ZC5iYXNlY21kKQorICAgICAgICBzZWxmLmRlYnVnKCJsYWJlbCAgICAgICAgICAgPSAlcyIgJSB1ZC5sYWJlbCkKKyAgICAgICAgc2VsZi5kZWJ1ZygiY2Nhc2VkaXIgICAgICAgID0gJXMiICUgdWQuY2Nhc2VkaXIpCisgICAgICAgIHNlbGYuZGVidWcoInZpZXdkaXIgICAgICAgICA9ICVzIiAlIHVkLnZpZXdkaXIpCisgICAgICAgIHNlbGYuZGVidWcoInZpZXduYW1lICAgICAgICA9ICVzIiAlIHVkLnZpZXduYW1lKQorICAgICAgICBzZWxmLmRlYnVnKCJjb25maWdzcGVjZmlsZSAgPSAlcyIgJSB1ZC5jb25maWdzcGVjZmlsZSkKKyAgICAgICAgc2VsZi5kZWJ1ZygibG9jYWxmaWxlICAgICAgID0gJXMiICUgdWQubG9jYWxmaWxlKQorCisgICAgICAgIHVkLmxvY2FsZmlsZSA9IG9zLnBhdGguam9pbihkYXRhLmdldFZhcigiRExfRElSIiwgZCwgVHJ1ZSksIHVkLmxvY2FsZmlsZSkKKworICAgIGRlZiBfYnVpbGRfY2Nhc2VfY29tbWFuZChzZWxmLCB1ZCwgY29tbWFuZCk6CisgICAgICAgICIiIgorICAgICAgICBCdWlsZCB1cCBhIGNvbW1hbmRsaW5lIGJhc2VkIG9uIHVkCisgICAgICAgIGNvbW1hbmQgaXM6IG1rdmlldywgc2V0Y3MsIHJtdmlldworICAgICAgICAiIiIKKyAgICAgICAgb3B0aW9ucyA9IFtdCisKKyAgICAgICAgaWYgInJjbGVhcnRvb2wiIGluIHVkLmJhc2VjbWQ6CisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgiLXNlcnZlciAlcyIgJSB1ZC5zZXJ2ZXIpCisKKyAgICAgICAgYmFzZWNtZCA9ICIlcyAlcyIgJSAodWQuYmFzZWNtZCwgY29tbWFuZCkKKworICAgICAgICBpZiBjb21tYW5kIGlzICdta3ZpZXcnOgorICAgICAgICAgICAgaWYgbm90ICJyY2xlYXJ0b29sIiBpbiB1ZC5iYXNlY21kOgorICAgICAgICAgICAgICAgICMgQ2xlYXJ0b29sIG5lZWRzIGEgLXNuYXBzaG90IHZpZXcKKyAgICAgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgiLXNuYXBzaG90IikKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItdGFnICVzIiAlIHVkLnZpZXduYW1lKQorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQodWQudmlld2RpcikKKworICAgICAgICBlbGlmIGNvbW1hbmQgaXMgJ3Jtdmlldyc6CisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgiLWZvcmNlIikKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCIlcyIgJSB1ZC52aWV3ZGlyKQorCisgICAgICAgIGVsaWYgY29tbWFuZCBpcyAnc2V0Y3MnOgorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi1vdmVyd3JpdGUiKQorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQodWQuY29uZmlnc3BlY2ZpbGUpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIkludmFsaWQgY2Nhc2UgY29tbWFuZCAlcyIgJSBjb21tYW5kKQorCisgICAgICAgIGNjYXNlY21kID0gIiVzICVzIiAlIChiYXNlY21kLCAiICIuam9pbihvcHRpb25zKSkKKyAgICAgICAgc2VsZi5kZWJ1ZygiY2Nhc2VjbWQgPSAlcyIgJSBjY2FzZWNtZCkKKyAgICAgICAgcmV0dXJuIGNjYXNlY21kCisKKyAgICBkZWYgX3dyaXRlX2NvbmZpZ3NwZWMoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGNvbmZpZyBzcGVjIGZpbGUgKHVkLmNvbmZpZ3NwZWNmaWxlKSBmb3IgY2Nhc2UgdmlldworICAgICAgICAiIiIKKyAgICAgICAgY29uZmlnX3NwZWMgPSAiIgorICAgICAgICBjdXN0b21fY29uZmlnX3NwZWMgPSBkLmdldFZhcigiQ0NBU0VfQ1VTVE9NX0NPTkZJR19TUEVDIiwgZCkKKyAgICAgICAgaWYgY3VzdG9tX2NvbmZpZ19zcGVjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gY3VzdG9tX2NvbmZpZ19zcGVjLnNwbGl0KCJcXG4iKToKKyAgICAgICAgICAgICAgICBjb25maWdfc3BlYyArPSBsaW5lKyJcbiIKKyAgICAgICAgICAgIGJiLndhcm4oIkEgY3VzdG9tIGNvbmZpZyBzcGVjIGhhcyBiZWVuIHNldCwgU1JDUkVWIGlzIG9ubHkgcmVsZXZhbnQgZm9yIHRoZSB0YXJiYWxsIG5hbWUuIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbmZpZ19zcGVjICs9ICJlbGVtZW50ICogQ0hFQ0tFRE9VVFxuIgorICAgICAgICAgICAgY29uZmlnX3NwZWMgKz0gImVsZW1lbnQgKiAlc1xuIiAlIHVkLmxhYmVsCisgICAgICAgICAgICBjb25maWdfc3BlYyArPSAibG9hZCAlcyVzXG4iICUgKHVkLnZvYiwgdWQubW9kdWxlKQorCisgICAgICAgIGxvZ2dlci5pbmZvKCJVc2luZyBjb25maWcgc3BlYzogXG4lcyIgJSBjb25maWdfc3BlYykKKworICAgICAgICB3aXRoIG9wZW4odWQuY29uZmlnc3BlY2ZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoY29uZmlnX3NwZWMpCisKKyAgICBkZWYgX3JlbW92ZV92aWV3KHNlbGYsIHVkLCBkKToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHModWQudmlld2Rpcik6CisgICAgICAgICAgICBvcy5jaGRpcih1ZC5jY2FzZWRpcikKKyAgICAgICAgICAgIGNtZCA9IHNlbGYuX2J1aWxkX2NjYXNlX2NvbW1hbmQodWQsICdybXZpZXcnKTsKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJjbGVhbmluZyB1cCBbVk9CPSVzIGxhYmVsPSVzIHZpZXc9JXNdIiwgdWQudm9iLCB1ZC5sYWJlbCwgdWQudmlld25hbWUpCisgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgY21kLCB1ZC51cmwpCisgICAgICAgICAgICBvdXRwdXQgPSBydW5mZXRjaGNtZChjbWQsIGQpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygicm12aWV3IG91dHB1dDogJXMiLCBvdXRwdXQpCisKKyAgICBkZWYgbmVlZF91cGRhdGUoc2VsZiwgdWQsIGQpOgorICAgICAgICBpZiAoIkxBVEVTVCIgaW4gdWQubGFiZWwpIG9yICh1ZC5jdXN0b21zcGVjIGFuZCAiTEFURVNUIiBpbiB1ZC5jdXN0b21zcGVjKToKKyAgICAgICAgICAgIHVkLmlkZW50aWZpZXIgKz0gIi0lcyIgJSBkLmdldFZhcigiREFURVRJTUUiLGQsIFRydWUpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgc3VwcG9ydHNfc3JjcmV2KHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHNvcnRhYmxlX3JldmlzaW9uKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIEZhbHNlLCB1ZC5pZGVudGlmaWVyCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiJGZXRjaCB1cmwiIiIKKworICAgICAgICAjIE1ha2UgYSBmcmVzaCB2aWV3CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih1ZC5jY2FzZWRpcikKKyAgICAgICAgc2VsZi5fd3JpdGVfY29uZmlnc3BlYyh1ZCwgZCkKKyAgICAgICAgY21kID0gc2VsZi5fYnVpbGRfY2Nhc2VfY29tbWFuZCh1ZCwgJ21rdmlldycpCisgICAgICAgIGxvZ2dlci5pbmZvKCJjcmVhdGluZyB2aWV3IFtWT0I9JXMgbGFiZWw9JXMgdmlldz0lc10iLCB1ZC52b2IsIHVkLmxhYmVsLCB1ZC52aWV3bmFtZSkKKyAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGNtZCwgdWQudXJsKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBydW5mZXRjaGNtZChjbWQsIGQpCisgICAgICAgIGV4Y2VwdCBGZXRjaEVycm9yIGFzIGU6CisgICAgICAgICAgICBpZiAiQ1JDTEkyMDA4RSIgaW4gZS5tc2c6CisgICAgICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiJXNcbiVzXG4iICUgKGUubXNnLCAiQ2FsbCBgcmNsZWFydG9vbCBsb2dpbmAgaW4geW91ciBjb25zb2xlIHRvIGF1dGhlbnRpY2F0ZSB0byB0aGUgY2xlYXJjYXNlIHNlcnZlciBiZWZvcmUgcnVubmluZyBiaXRiYWtlLiIpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBlCisKKyAgICAgICAgIyBTZXQgY29uZmlnc3BlYzogU2V0dGluZyB0aGUgY29uZmlnc3BlYyBlZmZlY3RpdmVseSBmZXRjaGVzIHRoZSBmaWxlcyBhcyBkZWZpbmVkIGluIHRoZSBjb25maWdzcGVjCisgICAgICAgIG9zLmNoZGlyKHVkLnZpZXdkaXIpCisgICAgICAgIGNtZCA9IHNlbGYuX2J1aWxkX2NjYXNlX2NvbW1hbmQodWQsICdzZXRjcycpOworICAgICAgICBsb2dnZXIuaW5mbygiZmV0Y2hpbmcgZGF0YSBbVk9CPSVzIGxhYmVsPSVzIHZpZXc9JXNdIiwgdWQudm9iLCB1ZC5sYWJlbCwgdWQudmlld25hbWUpCisgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBjbWQsIHVkLnVybCkKKyAgICAgICAgb3V0cHV0ID0gcnVuZmV0Y2hjbWQoY21kLCBkKQorICAgICAgICBsb2dnZXIuaW5mbygiJXMiLCBvdXRwdXQpCisKKyAgICAgICAgIyBDb3B5IHRoZSBjb25maWdzcGVjIHRvIHRoZSB2aWV3ZGlyIHNvIHdlIGhhdmUgaXQgaW4gb3VyIHNvdXJjZSB0YXJiYWxsIGxhdGVyCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZSh1ZC5jb25maWdzcGVjZmlsZSwgb3MucGF0aC5qb2luKHVkLnZpZXdkaXIsIHVkLmNzbmFtZSkpCisKKyAgICAgICAgIyBDbGVhbiBjbGVhcmNhc2UgbWV0YS1kYXRhIGJlZm9yZSB0YXIKKworICAgICAgICBydW5mZXRjaGNtZCgndGFyIC1jemYgIiVzIiAuJyAlICh1ZC5sb2NhbHBhdGgpLCBkLCBjbGVhbnVwID0gW3VkLmxvY2FscGF0aF0pCisKKyAgICAgICAgIyBDbGVhbiB1cCBzbyB3ZSBjYW4gY3JlYXRlIGEgbmV3IHZpZXcgbmV4dCB0aW1lCisgICAgICAgIHNlbGYuY2xlYW4odWQsIGQpOworCisgICAgZGVmIGNsZWFuKHNlbGYsIHVkLCBkKToKKyAgICAgICAgc2VsZi5fcmVtb3ZlX3ZpZXcodWQsIGQpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1ZC5jb25maWdzcGVjZmlsZSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2N2cy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2N2cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjdkOTZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvY3ZzLnB5CkBAIC0wLDAgKzEsMTcxIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdGZXRjaCcgaW1wbGVtZW50YXRpb25zCisKK0NsYXNzZXMgZm9yIG9idGFpbmluZyB1cHN0cmVhbSBzb3VyY2VzIGZvciB0aGUKK0JpdEJha2UgYnVpbGQgdG9vbHMuCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworI0Jhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZSwgQ29weXJpZ2h0IDIwMDMgSG9sZ2VyIFNjaHVyaWcKKyMKKworaW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiCitmcm9tIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QsIEZldGNoRXJyb3IsIE1pc3NpbmdQYXJhbWV0ZXJFcnJvciwgbG9nZ2VyCitmcm9tIGJiLmZldGNoMiBpbXBvcnQgcnVuZmV0Y2hjbWQKKworY2xhc3MgQ3ZzKEZldGNoTWV0aG9kKToKKyAgICAiIiIKKyAgICBDbGFzcyB0byBmZXRjaCBhIG1vZHVsZSBvciBtb2R1bGVzIGZyb20gY3ZzIHJlcG9zaXRvcmllcworICAgICIiIgorICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgY2FuIGJlIGZldGNoZWQgd2l0aCBjdnMuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ2N2cyddCisKKyAgICBkZWYgdXJsZGF0YV9pbml0KHNlbGYsIHVkLCBkKToKKyAgICAgICAgaWYgbm90ICJtb2R1bGUiIGluIHVkLnBhcm06CisgICAgICAgICAgICByYWlzZSBNaXNzaW5nUGFyYW1ldGVyRXJyb3IoIm1vZHVsZSIsIHVkLnVybCkKKyAgICAgICAgdWQubW9kdWxlID0gdWQucGFybVsibW9kdWxlIl0KKworICAgICAgICB1ZC50YWcgPSB1ZC5wYXJtLmdldCgndGFnJywgIiIpCisKKyAgICAgICAgIyBPdmVycmlkZSB0aGUgZGVmYXVsdCBkYXRlIGluIGNlcnRhaW4gY2FzZXMKKyAgICAgICAgaWYgJ2RhdGUnIGluIHVkLnBhcm06CisgICAgICAgICAgICB1ZC5kYXRlID0gdWQucGFybVsnZGF0ZSddCisgICAgICAgIGVsaWYgdWQudGFnOgorICAgICAgICAgICAgdWQuZGF0ZSA9ICIiCisKKyAgICAgICAgbm9yZWN1cnNlID0gJycKKyAgICAgICAgaWYgJ25vcmVjdXJzZScgaW4gdWQucGFybToKKyAgICAgICAgICAgIG5vcmVjdXJzZSA9ICdfbm9yZWN1cnNlJworCisgICAgICAgIGZ1bGxwYXRoID0gJycKKyAgICAgICAgaWYgJ2Z1bGxwYXRoJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgZnVsbHBhdGggPSAnX2Z1bGxwYXRoJworCisgICAgICAgIHVkLmxvY2FsZmlsZSA9IGJiLmRhdGEuZXhwYW5kKCclc18lc18lc18lcyVzJXMudGFyLmd6JyAlICh1ZC5tb2R1bGUucmVwbGFjZSgnLycsICcuJyksIHVkLmhvc3QsIHVkLnRhZywgdWQuZGF0ZSwgbm9yZWN1cnNlLCBmdWxscGF0aCksIGQpCisKKyAgICBkZWYgbmVlZF91cGRhdGUoc2VsZiwgdWQsIGQpOgorICAgICAgICBpZiAodWQuZGF0ZSA9PSAibm93Iik6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQubG9jYWxwYXRoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKKworICAgICAgICBtZXRob2QgPSB1ZC5wYXJtLmdldCgnbWV0aG9kJywgJ3BzZXJ2ZXInKQorICAgICAgICBsb2NhbGRpciA9IHVkLnBhcm0uZ2V0KCdsb2NhbGRpcicsIHVkLm1vZHVsZSkKKyAgICAgICAgY3ZzX3BvcnQgPSB1ZC5wYXJtLmdldCgncG9ydCcsICcnKQorCisgICAgICAgIGN2c19yc2ggPSBOb25lCisgICAgICAgIGlmIG1ldGhvZCA9PSAiZXh0IjoKKyAgICAgICAgICAgIGlmICJyc2giIGluIHVkLnBhcm06CisgICAgICAgICAgICAgICAgY3ZzX3JzaCA9IHVkLnBhcm1bInJzaCJdCisKKyAgICAgICAgaWYgbWV0aG9kID09ICJkaXIiOgorICAgICAgICAgICAgY3Zzcm9vdCA9IHVkLnBhdGgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGN2c3Jvb3QgPSAiOiIgKyBtZXRob2QKKyAgICAgICAgICAgIGN2c3Byb3h5aG9zdCA9IGQuZ2V0VmFyKCdDVlNfUFJPWFlfSE9TVCcsIFRydWUpCisgICAgICAgICAgICBpZiBjdnNwcm94eWhvc3Q6CisgICAgICAgICAgICAgICAgY3Zzcm9vdCArPSAiO3Byb3h5PSIgKyBjdnNwcm94eWhvc3QKKyAgICAgICAgICAgIGN2c3Byb3h5cG9ydCA9IGQuZ2V0VmFyKCdDVlNfUFJPWFlfUE9SVCcsIFRydWUpCisgICAgICAgICAgICBpZiBjdnNwcm94eXBvcnQ6CisgICAgICAgICAgICAgICAgY3Zzcm9vdCArPSAiO3Byb3h5cG9ydD0iICsgY3ZzcHJveHlwb3J0CisgICAgICAgICAgICBjdnNyb290ICs9ICI6IiArIHVkLnVzZXIKKyAgICAgICAgICAgIGlmIHVkLnBzd2Q6CisgICAgICAgICAgICAgICAgY3Zzcm9vdCArPSAiOiIgKyB1ZC5wc3dkCisgICAgICAgICAgICBjdnNyb290ICs9ICJAIiArIHVkLmhvc3QgKyAiOiIgKyBjdnNfcG9ydCArIHVkLnBhdGgKKworICAgICAgICBvcHRpb25zID0gW10KKyAgICAgICAgaWYgJ25vcmVjdXJzZScgaW4gdWQucGFybToKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItbCIpCisgICAgICAgIGlmIHVkLmRhdGU6CisgICAgICAgICAgICAjIHRyZWF0IFlZWVlNTURESEhNTSBzcGVjaWFsbHkgZm9yIENWUworICAgICAgICAgICAgaWYgbGVuKHVkLmRhdGUpID09IDEyOgorICAgICAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItRCBcIiVzICVzOiVzIFVUQ1wiIiAlICh1ZC5kYXRlWzA6OF0sIHVkLmRhdGVbODoxMF0sIHVkLmRhdGVbMTA6MTJdKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi1EIFwiJXMgVVRDXCIiICUgdWQuZGF0ZSkKKyAgICAgICAgaWYgdWQudGFnOgorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi1yICVzIiAlIHVkLnRhZykKKworICAgICAgICBjdnNiYXNlY21kID0gZC5nZXRWYXIoIkZFVENIQ01EX2N2cyIsIFRydWUpCisgICAgICAgIGN2c2NtZCA9IGN2c2Jhc2VjbWQgKyAiICctZCIgKyBjdnNyb290ICsgIicgY28gIiArICIgIi5qb2luKG9wdGlvbnMpICsgIiAiICsgdWQubW9kdWxlCisgICAgICAgIGN2c3VwZGF0ZWNtZCA9IGN2c2Jhc2VjbWQgKyAiICctZCIgKyBjdnNyb290ICsgIicgdXBkYXRlIC1kIC1QICIgKyAiICIuam9pbihvcHRpb25zKQorCisgICAgICAgIGlmIGN2c19yc2g6CisgICAgICAgICAgICBjdnNjbWQgPSAiQ1ZTX1JTSD1cIiVzXCIgJXMiICUgKGN2c19yc2gsIGN2c2NtZCkKKyAgICAgICAgICAgIGN2c3VwZGF0ZWNtZCA9ICJDVlNfUlNIPVwiJXNcIiAlcyIgJSAoY3ZzX3JzaCwgY3ZzdXBkYXRlY21kKQorCisgICAgICAgICMgY3JlYXRlIG1vZHVsZSBkaXJlY3RvcnkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJGZXRjaDogY2hlY2tpbmcgZm9yIG1vZHVsZSBkaXJlY3RvcnkiKQorICAgICAgICBwa2cgPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBwa2dkaXIgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0NWU0RJUicsIFRydWUpLCBwa2cpCisgICAgICAgIG1vZGRpciA9IG9zLnBhdGguam9pbihwa2dkaXIsIGxvY2FsZGlyKQorICAgICAgICBpZiBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKG1vZGRpciwgJ0NWUycpLCBvcy5SX09LKToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJVcGRhdGUgIiArIHVkLnVybCkKKyAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBjdnN1cGRhdGVjbWQsIHVkLnVybCkKKyAgICAgICAgICAgICMgdXBkYXRlIHNvdXJjZXMgdGhlcmUKKyAgICAgICAgICAgIG9zLmNoZGlyKG1vZGRpcikKKyAgICAgICAgICAgIGNtZCA9IGN2c3VwZGF0ZWNtZAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkZldGNoICIgKyB1ZC51cmwpCisgICAgICAgICAgICAjIGNoZWNrIG91dCBzb3VyY2VzIHRoZXJlCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGtnZGlyKQorICAgICAgICAgICAgb3MuY2hkaXIocGtnZGlyKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgY3ZzY21kKQorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGN2c2NtZCwgdWQudXJsKQorICAgICAgICAgICAgY21kID0gY3ZzY21kCisKKyAgICAgICAgcnVuZmV0Y2hjbWQoY21kLCBkLCBjbGVhbnVwID0gW21vZGRpcl0pCisKKyAgICAgICAgaWYgbm90IG9zLmFjY2Vzcyhtb2RkaXIsIG9zLlJfT0spOgorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiRGlyZWN0b3J5ICVzIHdhcyBub3QgcmVhZGFibGUgZGVzcGl0ZSBzdWNlc3NmdWwgZmV0Y2g/ISIgJSBtb2RkaXIsIHVkLnVybCkKKworICAgICAgICBzY21kYXRhID0gdWQucGFybS5nZXQoInNjbWRhdGEiLCAiIikKKyAgICAgICAgaWYgc2NtZGF0YSA9PSAia2VlcCI6CisgICAgICAgICAgICB0YXJfZmxhZ3MgPSAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFyX2ZsYWdzID0gIi0tZXhjbHVkZSAnQ1ZTJyIKKworICAgICAgICAjIHRhciB0aGVtIHVwIHRvIGEgZGVmaW5lZCBmaWxlbmFtZQorICAgICAgICBpZiAnZnVsbHBhdGgnIGluIHVkLnBhcm06CisgICAgICAgICAgICBvcy5jaGRpcihwa2dkaXIpCisgICAgICAgICAgICBjbWQgPSAidGFyICVzIC1jemYgJXMgJXMiICUgKHRhcl9mbGFncywgdWQubG9jYWxwYXRoLCBsb2NhbGRpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmNoZGlyKG1vZGRpcikKKyAgICAgICAgICAgIG9zLmNoZGlyKCcuLicpCisgICAgICAgICAgICBjbWQgPSAidGFyICVzIC1jemYgJXMgJXMiICUgKHRhcl9mbGFncywgdWQubG9jYWxwYXRoLCBvcy5wYXRoLmJhc2VuYW1lKG1vZGRpcikpCisKKyAgICAgICAgcnVuZmV0Y2hjbWQoY21kLCBkLCBjbGVhbnVwID0gW3VkLmxvY2FscGF0aF0pCisKKyAgICBkZWYgY2xlYW4oc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIgQ2xlYW4gQ1ZTIEZpbGVzIGFuZCB0YXJiYWxscyAiIiIKKworICAgICAgICBwa2cgPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBwa2dkaXIgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoIkNWU0RJUiIsIFRydWUpLCBwa2cpCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHBrZ2RpciwgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHVkLmxvY2FscGF0aCkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNjU4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXQucHkKQEAgLTAsMCArMSw0NDcgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgJ0ZldGNoJyBnaXQgaW1wbGVtZW50YXRpb24KKworZ2l0IGZldGNoZXIgc3VwcG9ydCB0aGUgU1JDX1VSSSB3aXRoIGZvcm1hdCBvZjoKK1NSQ19VUkkgPSAiZ2l0Oi8vc29tZS5ob3N0L3NvbWVwYXRoO09wdGlvbkE9eHh4O09wdGlvbkI9eHh4Oy4uLiIKKworU3VwcG9ydGVkIFNSQ19VUkkgb3B0aW9ucyBhcmU6CisKKy0gYnJhbmNoCisgICBUaGUgZ2l0IGJyYW5jaCB0byByZXRyaWV2ZSBmcm9tLiBUaGUgZGVmYXVsdCBpcyAibWFzdGVyIgorCisgICBUaGlzIG9wdGlvbiBhbHNvIHN1cHBvcnRzIG11bHRpcGxlIGJyYW5jaCBmZXRjaGluZywgd2l0aCBicmFuY2hlcworICAgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gIEluIG11bHRpcGxlIGJyYW5jaGVzIGNhc2UsIHRoZSBuYW1lIG9wdGlvbgorICAgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBuYW1lcyB0byBtYXRjaCB0aGUgYnJhbmNoZXMsIHdoaWNoIGlzCisgICB1c2VkIHRvIHNwZWNpZnkgdGhlIFNSQ19SRVYgZm9yIHRoZSBicmFuY2gKKyAgIGUuZzoKKyAgIFNSQ19VUkk9ImdpdDovL3NvbWUuaG9zdC9zb21lcGF0aDticmFuY2g9YnJhbmNoWCxicmFuY2hZO25hbWU9bmFtZVgsbmFtZVkiCisgICBTUkNSRVZfbmFtZVggPSAieHh4eHh4eHh4eHh4eHh4eHh4eHgiCisgICBTUkNSRVZfbmFtZVkgPSAiWVlZWVlZWVlZWVlZWVlZWVlZWVkiCisKKy0gdGFnCisgICAgVGhlIGdpdCB0YWcgdG8gcmV0cmlldmUuIFRoZSBkZWZhdWx0IGlzICJtYXN0ZXIiCisKKy0gcHJvdG9jb2wKKyAgIFRoZSBtZXRob2QgdG8gdXNlIHRvIGFjY2VzcyB0aGUgcmVwb3NpdG9yeS4gQ29tbW9uIG9wdGlvbnMgYXJlICJnaXQiLAorICAgImh0dHAiLCAiaHR0cHMiLCAiZmlsZSIsICJzc2giIGFuZCAicnN5bmMiLiBUaGUgZGVmYXVsdCBpcyAiZ2l0Ii4KKworLSByZWJhc2VhYmxlCisgICByZWJhc2VhYmxlIGluZGljYXRlcyB0aGF0IHRoZSB1cHN0cmVhbSBnaXQgcmVwbyBtYXkgcmViYXNlIGluIHRoZSBmdXR1cmUsCisgICBhbmQgY3VycmVudCByZXZpc2lvbiBtYXkgZGlzYXBwZWFyIGZyb20gdXBzdHJlYW0gcmVwby4gVGhpcyBvcHRpb24gd2lsbAorICAgcmVtaW5kIGZldGNoZXIgdG8gcHJlc2VydmUgbG9jYWwgY2FjaGUgY2FyZWZ1bGx5IGZvciBmdXR1cmUgdXNlLgorICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgIjAiLCBzZXQgcmViYXNlYWJsZT0xIGZvciByZWJhc2VhYmxlIGdpdCByZXBvLgorCistIG5vY2hlY2tvdXQKKyAgIERvbid0IGNoZWNrb3V0IHNvdXJjZSBjb2RlIHdoZW4gdW5wYWNraW5nLiBzZXQgdGhpcyBvcHRpb24gZm9yIHRoZSByZWNpcGUKKyAgIHdobyBoYXMgaXRzIG93biByb3V0aW5lIHRvIGNoZWNrb3V0IGNvZGUuCisgICBUaGUgZGVmYXVsdCBpcyAiMCIsIHNldCBub2NoZWNrb3V0PTEgaWYgbmVlZGVkLgorCistIGJhcmVjbG9uZQorICAgQ3JlYXRlIGEgYmFyZSBjbG9uZSBvZiB0aGUgc291cmNlIGNvZGUgYW5kIGRvbid0IGNoZWNrb3V0IHRoZSBzb3VyY2UgY29kZQorICAgd2hlbiB1bnBhY2tpbmcuIFNldCB0aGlzIG9wdGlvbiBmb3IgdGhlIHJlY2lwZSB3aG8gaGFzIGl0cyBvd24gcm91dGluZSB0bworICAgY2hlY2tvdXQgY29kZSBhbmQgdHJhY2tpbmcgYnJhbmNoIHJlcXVpcmVtZW50cy4KKyAgIFRoZSBkZWZhdWx0IGlzICIwIiwgc2V0IGJhcmVjbG9uZT0xIGlmIG5lZWRlZC4KKworLSBub2JyYW5jaAorICAgRG9uJ3QgY2hlY2sgdGhlIFNIQSB2YWxpZGF0aW9uIGZvciBicmFuY2guIHNldCB0aGlzIG9wdGlvbiBmb3IgdGhlIHJlY2lwZQorICAgcmVmZXJyaW5nIHRvIGNvbW1pdCB3aGljaCBpcyB2YWxpZCBpbiB0YWcgaW5zdGVhZCBvZiBicmFuY2guCisgICBUaGUgZGVmYXVsdCBpcyAiMCIsIHNldCBub2JyYW5jaD0xIGlmIG5lZWRlZC4KKworIiIiCisKKyNDb3B5cmlnaHQgKEMpIDIwMDUgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgYmIKK2Zyb20gICBiYiAgICBpbXBvcnQgZGF0YQorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IHJ1bmZldGNoY21kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBsb2dnZXIKKworY2xhc3MgR2l0KEZldGNoTWV0aG9kKToKKyAgICAiIiJDbGFzcyB0byBmZXRjaCBhIG1vZHVsZSBvciBtb2R1bGVzIGZyb20gZ2l0IHJlcG9zaXRvcmllcyIiIgorICAgIGRlZiBpbml0KHNlbGYsIGQpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdG8gc2VlIGlmIGEgZ2l2ZW4gdXJsIGNhbiBiZSBmZXRjaGVkIHdpdGggZ2l0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHVkLnR5cGUgaW4gWydnaXQnXQorCisgICAgZGVmIHN1cHBvcnRzX2NoZWNrc3VtKHNlbGYsIHVybGRhdGEpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgaW5pdCBnaXQgc3BlY2lmaWMgdmFyaWFibGUgd2l0aGluIHVybCBkYXRhCisgICAgICAgIHNvIHRoYXQgdGhlIGdpdCBtZXRob2QgbGlrZSBsYXRlc3RfcmV2aXNpb24oKSBjYW4gd29yaworICAgICAgICAiIiIKKyAgICAgICAgaWYgJ3Byb3RvY29sJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgdWQucHJvdG8gPSB1ZC5wYXJtWydwcm90b2NvbCddCisgICAgICAgIGVsaWYgbm90IHVkLmhvc3Q6CisgICAgICAgICAgICB1ZC5wcm90byA9ICdmaWxlJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdWQucHJvdG8gPSAiZ2l0IgorCisgICAgICAgIGlmIG5vdCB1ZC5wcm90byBpbiAoJ2dpdCcsICdmaWxlJywgJ3NzaCcsICdodHRwJywgJ2h0dHBzJywgJ3JzeW5jJyk6CisgICAgICAgICAgICByYWlzZSBiYi5mZXRjaDIuUGFyYW1ldGVyRXJyb3IoIkludmFsaWQgcHJvdG9jb2wgdHlwZSIsIHVkLnVybCkKKworICAgICAgICB1ZC5ub2NoZWNrb3V0ID0gdWQucGFybS5nZXQoIm5vY2hlY2tvdXQiLCIwIikgPT0gIjEiCisKKyAgICAgICAgdWQucmViYXNlYWJsZSA9IHVkLnBhcm0uZ2V0KCJyZWJhc2VhYmxlIiwiMCIpID09ICIxIgorCisgICAgICAgIHVkLm5vYnJhbmNoID0gdWQucGFybS5nZXQoIm5vYnJhbmNoIiwiMCIpID09ICIxIgorCisgICAgICAgICMgYmFyZWNsb25lIGltcGxpZXMgbm9jaGVja291dAorICAgICAgICB1ZC5iYXJlY2xvbmUgPSB1ZC5wYXJtLmdldCgiYmFyZWNsb25lIiwiMCIpID09ICIxIgorICAgICAgICBpZiB1ZC5iYXJlY2xvbmU6CisgICAgICAgICAgICB1ZC5ub2NoZWNrb3V0ID0gMQorICAKKyAgICAgICAgdWQudW5yZXNvbHZlZHJldiA9IHt9CisgICAgICAgIGJyYW5jaGVzID0gdWQucGFybS5nZXQoImJyYW5jaCIsICJtYXN0ZXIiKS5zcGxpdCgnLCcpCisgICAgICAgIGlmIGxlbihicmFuY2hlcykgIT0gbGVuKHVkLm5hbWVzKToKKyAgICAgICAgICAgIHJhaXNlIGJiLmZldGNoMi5QYXJhbWV0ZXJFcnJvcigiVGhlIG51bWJlciBvZiBuYW1lIGFuZCBicmFuY2ggcGFyYW1ldGVycyBpcyBub3QgYmFsYW5jZWQiLCB1ZC51cmwpCisgICAgICAgIHVkLmJyYW5jaGVzID0ge30KKyAgICAgICAgZm9yIG5hbWUgaW4gdWQubmFtZXM6CisgICAgICAgICAgICBicmFuY2ggPSBicmFuY2hlc1t1ZC5uYW1lcy5pbmRleChuYW1lKV0KKyAgICAgICAgICAgIHVkLmJyYW5jaGVzW25hbWVdID0gYnJhbmNoCisgICAgICAgICAgICB1ZC51bnJlc29sdmVkcmV2W25hbWVdID0gYnJhbmNoCisKKyAgICAgICAgdWQuYmFzZWNtZCA9IGRhdGEuZ2V0VmFyKCJGRVRDSENNRF9naXQiLCBkLCBUcnVlKSBvciAiZ2l0IC1jIGNvcmUuZnN5bmNvYmplY3RmaWxlcz0wIgorCisgICAgICAgIHVkLndyaXRlX3RhcmJhbGxzID0gKChkYXRhLmdldFZhcigiQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTIiwgZCwgVHJ1ZSkgb3IgIjAiKSAhPSAiMCIpIG9yIHVkLnJlYmFzZWFibGUKKworICAgICAgICB1ZC5zZXR1cF9yZXZpc29ucyhkKQorCisgICAgICAgIGZvciBuYW1lIGluIHVkLm5hbWVzOgorICAgICAgICAgICAgIyBFbnN1cmUgYW55dGhpbmcgdGhhdCBkb2Vzbid0IGxvb2sgbGlrZSBhIHNoYTI1NiBjaGVja3N1bS9yZXZpc2lvbiBpcyB0cmFuc2xhdGVkIGludG8gb25lCisgICAgICAgICAgICBpZiBub3QgdWQucmV2aXNpb25zW25hbWVdIG9yIGxlbih1ZC5yZXZpc2lvbnNbbmFtZV0pICE9IDQwICBvciAoRmFsc2UgaW4gW2MgaW4gImFiY2RlZjAxMjM0NTY3ODkiIGZvciBjIGluIHVkLnJldmlzaW9uc1tuYW1lXV0pOgorICAgICAgICAgICAgICAgIGlmIHVkLnJldmlzaW9uc1tuYW1lXToKKyAgICAgICAgICAgICAgICAgICAgdWQudW5yZXNvbHZlZHJldltuYW1lXSA9IHVkLnJldmlzaW9uc1tuYW1lXQorICAgICAgICAgICAgICAgIHVkLnJldmlzaW9uc1tuYW1lXSA9IHNlbGYubGF0ZXN0X3JldmlzaW9uKHVkLCBkLCBuYW1lKQorCisgICAgICAgIGdpdHNyY25hbWUgPSAnJXMlcycgJSAodWQuaG9zdC5yZXBsYWNlKCc6JywgJy4nKSwgdWQucGF0aC5yZXBsYWNlKCcvJywgJy4nKS5yZXBsYWNlKCcqJywgJy4nKSkKKyAgICAgICAgaWYgZ2l0c3JjbmFtZS5zdGFydHN3aXRoKCcuJyk6CisgICAgICAgICAgICBnaXRzcmNuYW1lID0gZ2l0c3JjbmFtZVsxOl0KKworICAgICAgICAjIGZvciByZWJhc2VhYmxlIGdpdCByZXBvLCBpdCBpcyBuZWNlc3NhcnkgdG8ga2VlcCBtaXJyb3IgdGFyIGJhbGwKKyAgICAgICAgIyBwZXIgcmV2aXNpb24sIHNvIHRoYXQgZXZlbiB0aGUgcmV2aXNpb24gZGlzYXBwZWFycyBmcm9tIHRoZQorICAgICAgICAjIHVwc3RyZWFtIHJlcG8gaW4gdGhlIGZ1dHVyZSwgdGhlIG1pcnJvciB3aWxsIHJlbWFpbiBpbnRhY3QgYW5kIHN0aWxsCisgICAgICAgICMgY29udGFpbnMgdGhlIHJldmlzaW9uCisgICAgICAgIGlmIHVkLnJlYmFzZWFibGU6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiB1ZC5uYW1lczoKKyAgICAgICAgICAgICAgICBnaXRzcmNuYW1lID0gZ2l0c3JjbmFtZSArICdfJyArIHVkLnJldmlzaW9uc1tuYW1lXQorICAgICAgICB1ZC5taXJyb3J0YXJiYWxsID0gJ2dpdDJfJXMudGFyLmd6JyAlIChnaXRzcmNuYW1lKQorICAgICAgICB1ZC5mdWxsbWlycm9yID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJETF9ESVIiLCBUcnVlKSwgdWQubWlycm9ydGFyYmFsbCkKKyAgICAgICAgZ2l0ZGlyID0gZC5nZXRWYXIoIkdJVERJUiIsIFRydWUpIG9yIChkLmdldFZhcigiRExfRElSIiwgVHJ1ZSkgKyAiL2dpdDIvIikKKyAgICAgICAgdWQuY2xvbmVkaXIgPSBvcy5wYXRoLmpvaW4oZ2l0ZGlyLCBnaXRzcmNuYW1lKQorCisgICAgICAgIHVkLmxvY2FsZmlsZSA9IHVkLmNsb25lZGlyCisKKyAgICBkZWYgbG9jYWxwYXRoKHNlbGYsIHVkLCBkKToKKyAgICAgICAgcmV0dXJuIHVkLmNsb25lZGlyCisKKyAgICBkZWYgbmVlZF91cGRhdGUoc2VsZiwgdWQsIGQpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQuY2xvbmVkaXIpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgb3MuY2hkaXIodWQuY2xvbmVkaXIpCisgICAgICAgIGZvciBuYW1lIGluIHVkLm5hbWVzOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbnRhaW5zX3JlZih1ZCwgZCwgbmFtZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgdWQud3JpdGVfdGFyYmFsbHMgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5mdWxsbWlycm9yKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHRyeV9wcmVtaXJyb3Ioc2VsZiwgdWQsIGQpOgorICAgICAgICAjIElmIHdlIGRvbid0IGRvIHRoaXMsIHVwZGF0aW5nIGFuIGV4aXN0aW5nIGNoZWNrb3V0IHdpdGggb25seSBwcmVtaXJyb3JzCisgICAgICAgICMgaXMgbm90IHBvc3NpYmxlCisgICAgICAgIGlmIGQuZ2V0VmFyKCJCQl9GRVRDSF9QUkVNSVJST1JPTkxZIiwgVHJ1ZSkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1ZC5jbG9uZWRpcik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIkZldGNoIHVybCIiIgorCisgICAgICAgIHVkLnJlcG9jaGFuZ2VkID0gbm90IG9zLnBhdGguZXhpc3RzKHVkLmZ1bGxtaXJyb3IpCisKKyAgICAgICAgIyBJZiB0aGUgY2hlY2tvdXQgZG9lc24ndCBleGlzdCBhbmQgdGhlIG1pcnJvciB0YXJiYWxsIGRvZXMsIGV4dHJhY3QgaXQKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHVkLmNsb25lZGlyKSBhbmQgb3MucGF0aC5leGlzdHModWQuZnVsbG1pcnJvcik6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodWQuY2xvbmVkaXIpCisgICAgICAgICAgICBvcy5jaGRpcih1ZC5jbG9uZWRpcikKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0YXIgLXh6ZiAlcyIgJSAodWQuZnVsbG1pcnJvciksIGQpCisKKyAgICAgICAgcmVwb3VybCA9IHNlbGYuX2dldF9yZXBvX3VybCh1ZCkKKworICAgICAgICAjIElmIHRoZSByZXBvIHN0aWxsIGRvZXNuJ3QgZXhpc3QsIGZhbGxiYWNrIHRvIGNsb25pbmcgaXQKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHVkLmNsb25lZGlyKToKKyAgICAgICAgICAgICMgV2UgZG8gdGhpcyBzaW5jZSBnaXQgd2lsbCB1c2UgYSAiLWwiIG9wdGlvbiBhdXRvbWF0aWNhbGx5IGZvciBsb2NhbCB1cmxzIHdoZXJlIHBvc3NpYmxlCisgICAgICAgICAgICBpZiByZXBvdXJsLnN0YXJ0c3dpdGgoImZpbGU6Ly8iKToKKyAgICAgICAgICAgICAgICByZXBvdXJsID0gcmVwb3VybFs3Ol0KKyAgICAgICAgICAgIGNsb25lX2NtZCA9ICIlcyBjbG9uZSAtLWJhcmUgLS1taXJyb3IgJXMgJXMiICUgKHVkLmJhc2VjbWQsIHJlcG91cmwsIHVkLmNsb25lZGlyKQorICAgICAgICAgICAgaWYgdWQucHJvdG8ubG93ZXIoKSAhPSAnZmlsZSc6CisgICAgICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGNsb25lX2NtZCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKGNsb25lX2NtZCwgZCkKKworICAgICAgICBvcy5jaGRpcih1ZC5jbG9uZWRpcikKKyAgICAgICAgIyBVcGRhdGUgdGhlIGNoZWNrb3V0IGlmIG5lZWRlZAorICAgICAgICBuZWVkdXBkYXRlID0gRmFsc2UKKyAgICAgICAgZm9yIG5hbWUgaW4gdWQubmFtZXM6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29udGFpbnNfcmVmKHVkLCBkLCBuYW1lKToKKyAgICAgICAgICAgICAgICBuZWVkdXBkYXRlID0gVHJ1ZQorICAgICAgICBpZiBuZWVkdXBkYXRlOgorICAgICAgICAgICAgdHJ5OiAKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgcmVtb3RlIHJtIG9yaWdpbiIgJSB1ZC5iYXNlY21kLCBkKSAKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5mZXRjaDIuRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIk5vIE9yaWdpbiIpCisKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyByZW1vdGUgYWRkIC0tbWlycm9yPWZldGNoIG9yaWdpbiAlcyIgJSAodWQuYmFzZWNtZCwgcmVwb3VybCksIGQpCisgICAgICAgICAgICBmZXRjaF9jbWQgPSAiJXMgZmV0Y2ggLWYgLS1wcnVuZSAlcyByZWZzLyo6cmVmcy8qIiAlICh1ZC5iYXNlY21kLCByZXBvdXJsKQorICAgICAgICAgICAgaWYgdWQucHJvdG8ubG93ZXIoKSAhPSAnZmlsZSc6CisgICAgICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGZldGNoX2NtZCwgdWQudXJsKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoZmV0Y2hfY21kLCBkKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHBydW5lLXBhY2tlZCIgJSB1ZC5iYXNlY21kLCBkKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHBhY2stcmVkdW5kYW50IC0tYWxsIHwgeGFyZ3MgLXIgcm0iICUgdWQuYmFzZWNtZCwgZCkKKyAgICAgICAgICAgIHVkLnJlcG9jaGFuZ2VkID0gVHJ1ZQorICAgICAgICBvcy5jaGRpcih1ZC5jbG9uZWRpcikKKyAgICAgICAgZm9yIG5hbWUgaW4gdWQubmFtZXM6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29udGFpbnNfcmVmKHVkLCBkLCBuYW1lKToKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5mZXRjaDIuRmV0Y2hFcnJvcigiVW5hYmxlIHRvIGZpbmQgcmV2aXNpb24gJXMgaW4gYnJhbmNoICVzIGV2ZW4gZnJvbSB1cHN0cmVhbSIgJSAodWQucmV2aXNpb25zW25hbWVdLCB1ZC5icmFuY2hlc1tuYW1lXSkpCisKKyAgICBkZWYgYnVpbGRfbWlycm9yX2RhdGEoc2VsZiwgdWQsIGQpOgorICAgICAgICAjIEdlbmVyYXRlIGEgbWlycm9yIHRhcmJhbGwgaWYgbmVlZGVkCisgICAgICAgIGlmIHVkLndyaXRlX3RhcmJhbGxzIGFuZCAodWQucmVwb2NoYW5nZWQgb3Igbm90IG9zLnBhdGguZXhpc3RzKHVkLmZ1bGxtaXJyb3IpKToKKyAgICAgICAgICAgICMgaXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgc3ltbGluayBwb2ludHMgdG8gcmVhZC1vbmx5IGZpbGVzeXN0ZW0gd2l0aCBQUkVNSVJST1IKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKHVkLmZ1bGxtaXJyb3IpOgorICAgICAgICAgICAgICAgIG9zLnVubGluayh1ZC5mdWxsbWlycm9yKQorCisgICAgICAgICAgICBvcy5jaGRpcih1ZC5jbG9uZWRpcikKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDcmVhdGluZyB0YXJiYWxsIG9mIGdpdCByZXBvc2l0b3J5IikKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0YXIgLWN6ZiAlcyAlcyIgJSAodWQuZnVsbG1pcnJvciwgb3MucGF0aC5qb2luKCIuIikgKSwgZCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0b3VjaCAlcy5kb25lIiAlICh1ZC5mdWxsbWlycm9yKSwgZCkKKworICAgIGRlZiB1bnBhY2soc2VsZiwgdWQsIGRlc3RkaXIsIGQpOgorICAgICAgICAiIiIgdW5wYWNrIHRoZSBkb3dubG9hZGVkIHNyYyB0byBkZXN0ZGlyIiIiCisKKyAgICAgICAgc3ViZGlyID0gdWQucGFybS5nZXQoInN1YnBhdGgiLCAiIikKKyAgICAgICAgaWYgc3ViZGlyICE9ICIiOgorICAgICAgICAgICAgcmVhZHBhdGhzcGVjID0gIjolcyIgJSAoc3ViZGlyKQorICAgICAgICAgICAgZGVmX2Rlc3RzdWZmaXggPSAiJXMvIiAlIG9zLnBhdGguYmFzZW5hbWUoc3ViZGlyLnJzdHJpcCgnLycpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVhZHBhdGhzcGVjID0gIiIKKyAgICAgICAgICAgIGRlZl9kZXN0c3VmZml4ID0gImdpdC8iCisKKyAgICAgICAgZGVzdHN1ZmZpeCA9IHVkLnBhcm0uZ2V0KCJkZXN0c3VmZml4IiwgZGVmX2Rlc3RzdWZmaXgpCisgICAgICAgIGRlc3RkaXIgPSB1ZC5kZXN0ZGlyID0gb3MucGF0aC5qb2luKGRlc3RkaXIsIGRlc3RzdWZmaXgpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRlc3RkaXIpOgorICAgICAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIoZGVzdGRpcikKKworICAgICAgICBjbG9uZWZsYWdzID0gIi1zIC1uIgorICAgICAgICBpZiB1ZC5iYXJlY2xvbmU6CisgICAgICAgICAgICBjbG9uZWZsYWdzICs9ICIgLS1taXJyb3IiCisKKyAgICAgICAgIyBWZXJzaW9ucyBvZiBnaXQgcHJpb3IgdG8gMS43LjkuMiBoYXZlIGlzc3VlcyB3aGVyZSBmb28uZ2l0IGFuZCBmb28gZ2V0IGNvbmZ1c2VkCisgICAgICAgICMgYW5kIHlvdSBlbmQgdXAgd2l0aCBzb21lIGhvcnJpYmxlIHVuaW9uIG9mIHRoZSB0d28gd2hlbiB5b3UgYXR0ZW1wdCB0byBjbG9uZSBpdAorICAgICAgICAjIFRoZSBsZWFzdCBpbnZhc2l2ZSB3b3JrYXJvdW5kIHNlZW1zIHRvIGJlIGEgc3ltbGluayB0byB0aGUgcmVhbCBkaXJlY3RvcnkgdG8KKyAgICAgICAgIyBmb29sIGdpdCBpbnRvIGlnbm9yaW5nIGFueSAuZ2l0IHZlcnNpb24gdGhhdCBtYXkgYWxzbyBiZSBwcmVzZW50LgorICAgICAgICAjCisgICAgICAgICMgVGhlIGlzc3VlIGlzIGZpeGVkIGluIG1vcmUgcmVjZW50IHZlcnNpb25zIG9mIGdpdCBzbyB3ZSBjYW4gZHJvcCB0aGlzIGhhY2sgaW4gZnV0dXJlCisgICAgICAgICMgd2hlbiB0aGF0IHZlcnNpb24gYmVjb21lcyBjb21tb24gZW5vdWdoLgorICAgICAgICBjbG9uZWRpciA9IHVkLmNsb25lZGlyCisgICAgICAgIGlmIG5vdCB1ZC5wYXRoLmVuZHN3aXRoKCIuZ2l0Iik6CisgICAgICAgICAgICBpbmRpcmVjdGlvbmRpciA9IGRlc3RkaXJbOi0xXSArICIuaW5kaXJlY3Rpb25zeW1saW5rIgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoaW5kaXJlY3Rpb25kaXIpOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShpbmRpcmVjdGlvbmRpcikKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoaW5kaXJlY3Rpb25kaXIpKQorICAgICAgICAgICAgb3Muc3ltbGluayh1ZC5jbG9uZWRpciwgaW5kaXJlY3Rpb25kaXIpCisgICAgICAgICAgICBjbG9uZWRpciA9IGluZGlyZWN0aW9uZGlyCisKKyAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGNsb25lICVzICVzLyAlcyIgJSAodWQuYmFzZWNtZCwgY2xvbmVmbGFncywgY2xvbmVkaXIsIGRlc3RkaXIpLCBkKQorICAgICAgICBvcy5jaGRpcihkZXN0ZGlyKQorICAgICAgICByZXBvdXJsID0gc2VsZi5fZ2V0X3JlcG9fdXJsKHVkKQorICAgICAgICBydW5mZXRjaGNtZCgiJXMgcmVtb3RlIHNldC11cmwgb3JpZ2luICVzIiAlICh1ZC5iYXNlY21kLCByZXBvdXJsKSwgZCkKKyAgICAgICAgaWYgbm90IHVkLm5vY2hlY2tvdXQ6CisgICAgICAgICAgICBpZiBzdWJkaXIgIT0gIiI6CisgICAgICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHJlYWQtdHJlZSAlcyVzIiAlICh1ZC5iYXNlY21kLCB1ZC5yZXZpc2lvbnNbdWQubmFtZXNbMF1dLCByZWFkcGF0aHNwZWMpLCBkKQorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBjaGVja291dC1pbmRleCAtcSAtZiAtYSIgJSB1ZC5iYXNlY21kLCBkKQorICAgICAgICAgICAgZWxpZiBub3QgdWQubm9icmFuY2g6CisgICAgICAgICAgICAgICAgYnJhbmNobmFtZSA9ICB1ZC5icmFuY2hlc1t1ZC5uYW1lc1swXV0KKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgY2hlY2tvdXQgLUIgJXMgJXMiICUgKHVkLmJhc2VjbWQsIGJyYW5jaG5hbWUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZC5yZXZpc2lvbnNbdWQubmFtZXNbMF1dKSwgZCkKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgYnJhbmNoIC0tc2V0LXVwc3RyZWFtICVzIG9yaWdpbi8lcyIgJSAodWQuYmFzZWNtZCwgYnJhbmNobmFtZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaG5hbWUpLCBkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgY2hlY2tvdXQgJXMiICUgKHVkLmJhc2VjbWQsIHVkLnJldmlzaW9uc1t1ZC5uYW1lc1swXV0pLCBkKQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgY2xlYW4oc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIgY2xlYW4gdGhlIGdpdCBkaXJlY3RvcnkgIiIiCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHVkLmxvY2FscGF0aCwgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHVkLmZ1bGxtaXJyb3IpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1ZC5mdWxsbWlycm9yICsgIi5kb25lIikKKworICAgIGRlZiBzdXBwb3J0c19zcmNyZXYoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX2NvbnRhaW5zX3JlZihzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgIGNtZCA9ICIiCisgICAgICAgIGlmIHVkLm5vYnJhbmNoOgorICAgICAgICAgICAgY21kID0gIiVzIGxvZyAtLXByZXR0eT1vbmVsaW5lIC1uIDEgJXMgLS0gMj4gL2Rldi9udWxsIHwgd2MgLWwiICUgKAorICAgICAgICAgICAgICAgIHVkLmJhc2VjbWQsIHVkLnJldmlzaW9uc1tuYW1lXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZCA9ICAiJXMgYnJhbmNoIC0tY29udGFpbnMgJXMgLS1saXN0ICVzIDI+IC9kZXYvbnVsbCB8IHdjIC1sIiAlICgKKyAgICAgICAgICAgICAgICB1ZC5iYXNlY21kLCB1ZC5yZXZpc2lvbnNbbmFtZV0sIHVkLmJyYW5jaGVzW25hbWVdKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQgPSBydW5mZXRjaGNtZChjbWQsIGQsIHF1aWV0PVRydWUpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaDIuRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBsZW4ob3V0cHV0LnNwbGl0KCkpID4gMToKKyAgICAgICAgICAgIHJhaXNlIGJiLmZldGNoMi5GZXRjaEVycm9yKCJUaGUgY29tbWFuZCAnJXMnIGdhdmUgb3V0cHV0IHdpdGggbW9yZSB0aGVuIDEgbGluZSB1bmV4cGVjdGVkbHksIG91dHB1dDogJyVzJyIgJSAoY21kLCBvdXRwdXQpKQorICAgICAgICByZXR1cm4gb3V0cHV0LnNwbGl0KClbMF0gIT0gIjAiCisKKyAgICBkZWYgX2dldF9yZXBvX3VybChzZWxmLCB1ZCk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIHJlcG9zaXRvcnkgVVJMCisgICAgICAgICIiIgorICAgICAgICBpZiB1ZC51c2VyOgorICAgICAgICAgICAgdXNlcm5hbWUgPSB1ZC51c2VyICsgJ0AnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1c2VybmFtZSA9ICIiCisgICAgICAgIHJldHVybiAiJXM6Ly8lcyVzJXMiICUgKHVkLnByb3RvLCB1c2VybmFtZSwgdWQuaG9zdCwgdWQucGF0aCkKKworICAgIGRlZiBfcmV2aXNpb25fa2V5KHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIHVuaXF1ZSBrZXkgZm9yIHRoZSB1cmwKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiZ2l0OiIgKyB1ZC5ob3N0ICsgdWQucGF0aC5yZXBsYWNlKCcvJywgJy4nKSArIHVkLnVucmVzb2x2ZWRyZXZbbmFtZV0KKworICAgIGRlZiBfbHNyZW1vdGUoc2VsZiwgdWQsIGQsIHNlYXJjaCk6CisgICAgICAgICIiIgorICAgICAgICBSdW4gZ2l0IGxzLXJlbW90ZSB3aXRoIHRoZSBzcGVjaWZpZWQgc2VhcmNoIHN0cmluZworICAgICAgICAiIiIKKyAgICAgICAgcmVwb3VybCA9IHNlbGYuX2dldF9yZXBvX3VybCh1ZCkKKyAgICAgICAgY21kID0gIiVzIGxzLXJlbW90ZSAlcyAlcyIgJSBcCisgICAgICAgICAgICAgICh1ZC5iYXNlY21kLCByZXBvdXJsLCBzZWFyY2gpCisgICAgICAgIGlmIHVkLnByb3RvLmxvd2VyKCkgIT0gJ2ZpbGUnOgorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGNtZCkKKyAgICAgICAgb3V0cHV0ID0gcnVuZmV0Y2hjbWQoY21kLCBkLCBUcnVlKQorICAgICAgICBpZiBub3Qgb3V0cHV0OgorICAgICAgICAgICAgcmFpc2UgYmIuZmV0Y2gyLkZldGNoRXJyb3IoIlRoZSBjb21tYW5kICVzIGdhdmUgZW1wdHkgb3V0cHV0IHVuZXhwZWN0ZWRseSIgJSBjbWQsIHVkLnVybCkKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgZGVmIF9sYXRlc3RfcmV2aXNpb24oc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29tcHV0ZSB0aGUgSEVBRCByZXZpc2lvbiBmb3IgdGhlIHVybAorICAgICAgICAiIiIKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5fbHNyZW1vdGUodWQsIGQsICIiKQorICAgICAgICAjIFRhZ3Mgb2YgdGhlIGZvcm0gXnt9IG1heSBub3Qgd29yaywgbmVlZCB0byBmYWxsYmFjayB0byBvdGhlciBmb3JtCisgICAgICAgIGlmIHVkLnVucmVzb2x2ZWRyZXZbbmFtZV1bOjVdID09ICJyZWZzLyI6CisgICAgICAgICAgICBoZWFkID0gdWQudW5yZXNvbHZlZHJldltuYW1lXQorICAgICAgICAgICAgdGFnID0gdWQudW5yZXNvbHZlZHJldltuYW1lXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGVhZCA9ICJyZWZzL2hlYWRzLyVzIiAlIHVkLnVucmVzb2x2ZWRyZXZbbmFtZV0KKyAgICAgICAgICAgIHRhZyA9ICJyZWZzL3RhZ3MvJXMiICUgdWQudW5yZXNvbHZlZHJldltuYW1lXQorICAgICAgICBmb3IgcyBpbiBbaGVhZCwgdGFnICsgIl57fSIsIHRhZ106CisgICAgICAgICAgICBmb3IgbCBpbiBvdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgaWYgcyBpbiBsOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbC5zcGxpdCgpWzBdCisgICAgICAgIHJhaXNlIGJiLmZldGNoMi5GZXRjaEVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSAnJXMnIGluIHVwc3RyZWFtIGdpdCByZXBvc2l0b3J5IGluIGdpdCBscy1yZW1vdGUgb3V0cHV0IGZvciAlcyIgJSBcCisgICAgICAgICAgICAodWQudW5yZXNvbHZlZHJldltuYW1lXSwgdWQuaG9zdCt1ZC5wYXRoKSkKKworICAgIGRlZiBsYXRlc3RfdmVyc2lvbnN0cmluZyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDb21wdXRlIHRoZSBsYXRlc3QgcmVsZWFzZSBuYW1lIGxpa2UgIngueS54IiBpbiAieC55LngrZ2l0SEFTSCIKKyAgICAgICAgYnkgc2VhcmNoaW5nIHRocm91Z2ggdGhlIHRhZ3Mgb3V0cHV0IG9mIGxzLXJlbW90ZSwgY29tcGFyaW5nCisgICAgICAgIHZlcnNpb25zIGFuZCByZXR1cm5pbmcgdGhlIGhpZ2hlc3QgbWF0Y2guCisgICAgICAgICIiIgorICAgICAgICBwdXB2ZXIgPSAoJycsICcnKQorCisgICAgICAgIHRhZ3JlZ2V4ID0gcmUuY29tcGlsZShkLmdldFZhcignR0lUVEFHUkVHRVgnLCBUcnVlKSBvciAiKD9QPHB2ZXI+KFswLTldW1wufF9dPykrKSIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuX2xzcmVtb3RlKHVkLCBkLCAicmVmcy90YWdzLyoiKQorICAgICAgICBleGNlcHQgYmIuZmV0Y2gyLkZldGNoRXJyb3Igb3IgYmIuZmV0Y2gyLk5ldHdvcmtBY2Nlc3M6CisgICAgICAgICAgICByZXR1cm4gcHVwdmVyCisKKyAgICAgICAgdmVyc3RyaW5nID0gIiIKKyAgICAgICAgcmV2aXNpb24gPSAiIgorICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXQoIlxuIik6CisgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICB0YWdfaGVhZCA9IGxpbmUuc3BsaXQoIi8iKVstMV0KKyAgICAgICAgICAgICMgSWdub3JlIG5vbi1yZWxlYXNlZCBicmFuY2hlcworICAgICAgICAgICAgbSA9IHJlLnNlYXJjaCgiKGFscGhhfGJldGF8cmN8ZmluYWwpKyIsIHRhZ19oZWFkKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIHNlYXJjaCBmb3IgdmVyc2lvbiBpbiB0aGUgbGluZQorICAgICAgICAgICAgdGFnID0gdGFncmVnZXguc2VhcmNoKHRhZ19oZWFkKQorICAgICAgICAgICAgaWYgdGFnID09IE5vbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgdGFnID0gdGFnLmdyb3VwKCdwdmVyJykKKyAgICAgICAgICAgIHRhZyA9IHRhZy5yZXBsYWNlKCJfIiwgIi4iKQorCisgICAgICAgICAgICBpZiB2ZXJzdHJpbmcgYW5kIGJiLnV0aWxzLnZlcmNtcCgoIjAiLCB0YWcsICIiKSwgKCIwIiwgdmVyc3RyaW5nLCAiIikpIDwgMDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB2ZXJzdHJpbmcgPSB0YWcKKyAgICAgICAgICAgIHJldmlzaW9uID0gbGluZS5zcGxpdCgpWzBdCisgICAgICAgICAgICBwdXB2ZXIgPSAodmVyc3RyaW5nLCByZXZpc2lvbikKKworICAgICAgICByZXR1cm4gcHVwdmVyCisKKyAgICBkZWYgX2J1aWxkX3JldmlzaW9uKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHVkLnJldmlzaW9uc1tuYW1lXQorCisgICAgZGVmIGdpdHBrZ3ZfcmV2aXNpb24oc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgc29ydGFibGUgcmV2aXNpb24gbnVtYmVyIGJ5IGNvdW50aW5nIGNvbW1pdHMgaW4gdGhlIGhpc3RvcnkKKyAgICAgICAgQmFzZWQgb24gZ2l0cGtndi5iYmxhc3MgaW4gbWV0YS1vcGVuZW1iZWRkZWQKKyAgICAgICAgIiIiCisgICAgICAgIHJldiA9IHNlbGYuX2J1aWxkX3JldmlzaW9uKHVkLCBkLCBuYW1lKQorICAgICAgICBsb2NhbHBhdGggPSB1ZC5sb2NhbHBhdGgKKyAgICAgICAgcmV2X2ZpbGUgPSBvcy5wYXRoLmpvaW4obG9jYWxwYXRoLCAib2UtZ2l0cGtndl8iICsgcmV2KQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobG9jYWxwYXRoKToKKyAgICAgICAgICAgIGNvbW1pdHMgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmV2X2ZpbGUpIG9yIG5vdCBvcy5wYXRoLmdldHNpemUocmV2X2ZpbGUpOgorICAgICAgICAgICAgICAgIGZyb20gcGlwZXMgaW1wb3J0IHF1b3RlCisgICAgICAgICAgICAgICAgY29tbWl0cyA9IGJiLmZldGNoMi5ydW5mZXRjaGNtZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICJnaXQgcmV2LWxpc3QgJXMgLS0gfCB3YyAtbCIgJSAocXVvdGUocmV2KSksCisgICAgICAgICAgICAgICAgICAgICAgICBkLCBxdWlldD1UcnVlKS5zdHJpcCgpLmxzdHJpcCgnMCcpCisgICAgICAgICAgICAgICAgaWYgY29tbWl0czoKKyAgICAgICAgICAgICAgICAgICAgb3BlbihyZXZfZmlsZSwgInciKS53cml0ZSgiJWRcbiIgJSBpbnQoY29tbWl0cykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbW1pdHMgPSBvcGVuKHJldl9maWxlLCAiciIpLnJlYWRsaW5lKDEyOCkuc3RyaXAoKQorICAgICAgICBpZiBjb21taXRzOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAiJXMrJXMiICUgKGNvbW1pdHMsIHJldls6N10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZSwgc3RyKHJldikKKworICAgIGRlZiBjaGVja3N0YXR1cyhzZWxmLCBmZXRjaCwgdWQsIGQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9sc3JlbW90ZSh1ZCwgZCwgIiIpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBleGNlcHQgRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0YW5uZXgucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXRhbm5leC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjM3ODk3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0YW5uZXgucHkKQEAgLTAsMCArMSw3NiBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnRmV0Y2gnIGdpdCBhbm5leCBpbXBsZW1lbnRhdGlvbgorIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDE0IE90YXZpbyBTYWx2YWRvcgorIyBDb3B5cmlnaHQgKEMpIDIwMTQgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBiYgorZnJvbSAgIGJiIGltcG9ydCBkYXRhCitmcm9tICAgYmIuZmV0Y2gyLmdpdCBpbXBvcnQgR2l0Citmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgbG9nZ2VyCisKK2NsYXNzIEdpdEFOTkVYKEdpdCk6CisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIGdpdmVuIHVybCBjYW4gYmUgZmV0Y2hlZCB3aXRoIGdpdC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsnZ2l0YW5uZXgnXQorCisgICAgZGVmIHVzZXNfYW5uZXgoc2VsZiwgdWQsIGQpOgorICAgICAgICBmb3IgbmFtZSBpbiB1ZC5uYW1lczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgcmV2LWxpc3QgZ2l0LWFubmV4IiAlICh1ZC5iYXNlY21kKSwgZCwgcXVpZXQ9VHJ1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZXhjZXB0IGJiLmZldGNoLkZldGNoRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHVwZGF0ZV9hbm5leChzZWxmLCB1ZCwgZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBhbm5leCBnZXQgLS1hbGwiICUgKHVkLmJhc2VjbWQpLCBkLCBxdWlldD1UcnVlKQorICAgICAgICBleGNlcHQgYmIuZmV0Y2guRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBydW5mZXRjaGNtZCgiY2htb2QgdSt3IC1SICVzL2FubmV4IiAlICh1ZC5jbG9uZWRpciksIGQsIHF1aWV0PVRydWUpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CisgICAgICAgIEdpdC5kb3dubG9hZChzZWxmLCB1ZCwgZCkKKworICAgICAgICBvcy5jaGRpcih1ZC5jbG9uZWRpcikKKyAgICAgICAgYW5uZXggPSBzZWxmLnVzZXNfYW5uZXgodWQsIGQpCisgICAgICAgIGlmIGFubmV4OgorICAgICAgICAgICAgc2VsZi51cGRhdGVfYW5uZXgodWQsIGQpCisKKyAgICBkZWYgdW5wYWNrKHNlbGYsIHVkLCBkZXN0ZGlyLCBkKToKKyAgICAgICAgR2l0LnVucGFjayhzZWxmLCB1ZCwgZGVzdGRpciwgZCkKKworICAgICAgICBvcy5jaGRpcih1ZC5kZXN0ZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgYW5uZXggc3luYyIgJSAodWQuYmFzZWNtZCksIGQpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaC5GZXRjaEVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGFubmV4ID0gc2VsZi51c2VzX2FubmV4KHVkLCBkKQorICAgICAgICBpZiBhbm5leDoKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBhbm5leCBnZXQiICUgKHVkLmJhc2VjbWQpLCBkKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoImNobW9kIHUrdyAtUiAlcy8uZ2l0L2FubmV4IiAlICh1ZC5kZXN0ZGlyKSwgZCwgcXVpZXQ9VHJ1ZSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdHNtLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0c20ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5MmU0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdHNtLnB5CkBAIC0wLDAgKzEsMTM3IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdGZXRjaCcgZ2l0IHN1Ym1vZHVsZXMgaW1wbGVtZW50YXRpb24KKworSW5oZXJpdHMgZnJvbSBhbmQgZXh0ZW5kcyB0aGUgR2l0IGZldGNoZXIgdG8gcmV0cmlldmUgc3VibW9kdWxlcyBvZiBhIGdpdCByZXBvc2l0b3J5CithZnRlciBjbG9uaW5nLgorCitTUkNfVVJJID0gImdpdHNtOi8vPHNlZSBHaXQgZmV0Y2hlciBmb3Igc3ludGF4PiIKKworU2VlIHRoZSBHaXQgZmV0Y2hlciwgZ2l0Oi8vLCBmb3IgdXNhZ2UgZG9jdW1lbnRhdGlvbi4KKworTk9URTogU3dpdGNoaW5nIGEgU1JDX1VSSSBmcm9tICJnaXQ6Ly8iIHRvICJnaXRzbTovLyIgcmVxdWlyZXMgYSBjbGVhbiBvZiB5b3VyIHJlY2lwZS4KKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDEzIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBiYgorZnJvbSAgIGJiICAgIGltcG9ydCBkYXRhCitmcm9tICAgYmIuZmV0Y2gyLmdpdCBpbXBvcnQgR2l0Citmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgbG9nZ2VyCisKK2NsYXNzIEdpdFNNKEdpdCk6CisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIGdpdmVuIHVybCBjYW4gYmUgZmV0Y2hlZCB3aXRoIGdpdC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsnZ2l0c20nXQorCisgICAgZGVmIHVzZXNfc3VibW9kdWxlcyhzZWxmLCB1ZCwgZCk6CisgICAgICAgIGZvciBuYW1lIGluIHVkLm5hbWVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBzaG93ICVzOi5naXRtb2R1bGVzIiAlICh1ZC5iYXNlY21kLCB1ZC5yZXZpc2lvbnNbbmFtZV0pLCBkLCBxdWlldD1UcnVlKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBleGNlcHQgYmIuZmV0Y2guRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9zZXRfcmVsYXRpdmVfcGF0aHMoc2VsZiwgcmVwb3BhdGgpOgorICAgICAgICAiIiIKKyAgICAgICAgRml4IHN1Ym1vZHVsZSBwYXRocyB0byBiZSByZWxhdGl2ZSBpbnN0ZWFkIG9mIGFic29sdXRlLAorICAgICAgICBzbyB0aGF0IHdoZW4gd2UgbW92ZSB0aGUgcmVwbyBpdCBkb2Vzbid0IGJyZWFrCisgICAgICAgIChJbiBHaXQgMS43LjEwKyB0aGlzIGlzIGRvbmUgYXV0b21hdGljYWxseSkKKyAgICAgICAgIiIiCisgICAgICAgIHN1Ym1vZHVsZXMgPSBbXQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHJlcG9wYXRoLCAnLmdpdG1vZHVsZXMnKSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1tzdWJtb2R1bGUnKToKKyAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlcy5hcHBlbmQobGluZS5zcGxpdCgnIicpWzFdKQorCisgICAgICAgIGZvciBtb2R1bGUgaW4gc3VibW9kdWxlczoKKyAgICAgICAgICAgIHJlcG9fY29uZiA9IG9zLnBhdGguam9pbihyZXBvcGF0aCwgbW9kdWxlLCAnLmdpdCcpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhyZXBvX2NvbmYpOgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihyZXBvX2NvbmYsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgbmV3cGF0aCA9ICcnCisgICAgICAgICAgICAgICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdnaXRkaXI6Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICBvbGRwYXRoID0gbGluZS5zcGxpdCgnOiAnKVstMV0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9sZHBhdGguc3RhcnRzd2l0aCgnLycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BhdGggPSAnLi4vJyAqIChtb2R1bGUuY291bnQoJy8nKSArIDEpICsgJy5naXQvbW9kdWxlcy8nICsgbW9kdWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbaV0gPSAnZ2l0ZGlyOiAlc1xuJyAlIG5ld3BhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIG5ld3BhdGg6CisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihyZXBvX2NvbmYsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUobGluZSkKKworICAgICAgICAgICAgcmVwb19jb25mMiA9IG9zLnBhdGguam9pbihyZXBvcGF0aCwgJy5naXQnLCAnbW9kdWxlcycsIG1vZHVsZSwgJ2NvbmZpZycpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhyZXBvX2NvbmYyKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ocmVwb19jb25mMiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICBuZXdwYXRoID0gJycKKyAgICAgICAgICAgICAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUobGluZXMpOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLmxzdHJpcCgpLnN0YXJ0c3dpdGgoJ3dvcmt0cmVlID0gJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBvbGRwYXRoID0gbGluZS5zcGxpdCgnID0gJylbLTFdLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvbGRwYXRoLnN0YXJ0c3dpdGgoJy8nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdwYXRoID0gJy4uLycgKiAobW9kdWxlLmNvdW50KCcvJykgKyAzKSArIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzW2ldID0gJ1x0d29ya3RyZWUgPSAlc1xuJyAlIG5ld3BhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIG5ld3BhdGg6CisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihyZXBvX2NvbmYyLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGxpbmUpCisKKyAgICBkZWYgdXBkYXRlX3N1Ym1vZHVsZXMoc2VsZiwgdWQsIGQpOgorICAgICAgICAjIFdlIGhhdmUgdG8gY29udmVydCBiYXJlIC0+IGZ1bGwgcmVwbywgZG8gdGhlIHN1Ym1vZHVsZSBiaXQsIHRoZW4gY29udmVydCBiYWNrCisgICAgICAgIHRtcGNsb25lZGlyID0gdWQuY2xvbmVkaXIgKyAiLnRtcCIKKyAgICAgICAgZ2l0ZGlyID0gdG1wY2xvbmVkaXIgKyBvcy5zZXAgKyAiLmdpdCIKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHRtcGNsb25lZGlyLCBUcnVlKQorICAgICAgICBvcy5ta2Rpcih0bXBjbG9uZWRpcikKKyAgICAgICAgb3MucmVuYW1lKHVkLmNsb25lZGlyLCBnaXRkaXIpCisgICAgICAgIHJ1bmZldGNoY21kKCJzZWQgIiArIGdpdGRpciArICIvY29uZmlnIC1pIC1lICdzL2JhcmUuKj0uKnRydWUvYmFyZSA9IGZhbHNlLyciLCBkKQorICAgICAgICBvcy5jaGRpcih0bXBjbG9uZWRpcikKKyAgICAgICAgcnVuZmV0Y2hjbWQodWQuYmFzZWNtZCArICIgcmVzZXQgLS1oYXJkIiwgZCkKKyAgICAgICAgcnVuZmV0Y2hjbWQodWQuYmFzZWNtZCArICIgY2hlY2tvdXQgIiArIHVkLnJldmlzaW9uc1t1ZC5uYW1lc1swXV0sIGQpCisgICAgICAgIHJ1bmZldGNoY21kKHVkLmJhc2VjbWQgKyAiIHN1Ym1vZHVsZSBpbml0IiwgZCkKKyAgICAgICAgcnVuZmV0Y2hjbWQodWQuYmFzZWNtZCArICIgc3VibW9kdWxlIHVwZGF0ZSIsIGQpCisgICAgICAgIHNlbGYuX3NldF9yZWxhdGl2ZV9wYXRocyh0bXBjbG9uZWRpcikKKyAgICAgICAgcnVuZmV0Y2hjbWQoInNlZCAiICsgZ2l0ZGlyICsgIi9jb25maWcgLWkgLWUgJ3MvYmFyZS4qPS4qZmFsc2UvYmFyZSA9IHRydWUvJyIsIGQpCisgICAgICAgIG9zLnJlbmFtZShnaXRkaXIsIHVkLmNsb25lZGlyLCkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHRtcGNsb25lZGlyLCBUcnVlKQorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKKyAgICAgICAgR2l0LmRvd25sb2FkKHNlbGYsIHVkLCBkKQorCisgICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQorICAgICAgICBzdWJtb2R1bGVzID0gc2VsZi51c2VzX3N1Ym1vZHVsZXModWQsIGQpCisgICAgICAgIGlmIHN1Ym1vZHVsZXM6CisgICAgICAgICAgICBzZWxmLnVwZGF0ZV9zdWJtb2R1bGVzKHVkLCBkKQorCisgICAgZGVmIHVucGFjayhzZWxmLCB1ZCwgZGVzdGRpciwgZCk6CisgICAgICAgIEdpdC51bnBhY2soc2VsZiwgdWQsIGRlc3RkaXIsIGQpCisgICAgICAgIAorICAgICAgICBvcy5jaGRpcih1ZC5kZXN0ZGlyKQorICAgICAgICBzdWJtb2R1bGVzID0gc2VsZi51c2VzX3N1Ym1vZHVsZXModWQsIGQpCisgICAgICAgIGlmIHN1Ym1vZHVsZXM6CisgICAgICAgICAgICBydW5mZXRjaGNtZCgiY3AgLXIgIiArIHVkLmNsb25lZGlyICsgIi9tb2R1bGVzICIgKyB1ZC5kZXN0ZGlyICsgIi8uZ2l0LyIsIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZCh1ZC5iYXNlY21kICsgIiBzdWJtb2R1bGUgaW5pdCIsIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZCh1ZC5iYXNlY21kICsgIiBzdWJtb2R1bGUgdXBkYXRlIiwgZCkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvaGcucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9oZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTc4NjMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvaGcucHkKQEAgLTAsMCArMSwyNzUgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgJ0ZldGNoJyBpbXBsZW1lbnRhdGlvbiBmb3IgbWVyY3VyaWFsIERSQ1MgKGhnKS4KKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDA0ICAgICAgICBNYXJjaW4gSnVzemtpZXdpY3oKKyMgQ29weXJpZ2h0IChDKSAyMDA3ICAgICAgICBSb2JlcnQgU2NodXN0ZXIKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEJhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZSwgQ29weXJpZ2h0IDIwMDMgSG9sZ2VyIFNjaHVyaWcKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiCitmcm9tIGJiIGltcG9ydCBkYXRhCitmcm9tIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaEVycm9yCitmcm9tIGJiLmZldGNoMiBpbXBvcnQgTWlzc2luZ1BhcmFtZXRlckVycm9yCitmcm9tIGJiLmZldGNoMiBpbXBvcnQgcnVuZmV0Y2hjbWQKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBsb2dnZXIKKworY2xhc3MgSGcoRmV0Y2hNZXRob2QpOgorICAgICIiIkNsYXNzIHRvIGZldGNoIGZyb20gbWVyY3VyaWFsIHJlcG9zaXRvcmllcyIiIgorICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgY2FuIGJlIGZldGNoZWQgd2l0aCBtZXJjdXJpYWwuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ2hnJ10KKworICAgIGRlZiBzdXBwb3J0c19jaGVja3N1bShzZWxmLCB1cmxkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIERvbid0IHJlcXVpcmUgY2hlY2tzdW1zIGZvciBsb2NhbCBhcmNoaXZlcyBjcmVhdGVkIGZyb20KKyAgICAgICAgcmVwb3NpdG9yeSBjaGVja291dHMuCisgICAgICAgICIiIiAKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgdXJsZGF0YV9pbml0KHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIGluaXQgaGcgc3BlY2lmaWMgdmFyaWFibGUgd2l0aGluIHVybCBkYXRhCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgIm1vZHVsZSIgaW4gdWQucGFybToKKyAgICAgICAgICAgIHJhaXNlIE1pc3NpbmdQYXJhbWV0ZXJFcnJvcignbW9kdWxlJywgdWQudXJsKQorCisgICAgICAgIHVkLm1vZHVsZSA9IHVkLnBhcm1bIm1vZHVsZSJdCisKKyAgICAgICAgaWYgJ3Byb3RvY29sJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgdWQucHJvdG8gPSB1ZC5wYXJtWydwcm90b2NvbCddCisgICAgICAgIGVsaWYgbm90IHVkLmhvc3Q6CisgICAgICAgICAgICB1ZC5wcm90byA9ICdmaWxlJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdWQucHJvdG8gPSAiaGciCisKKyAgICAgICAgdWQuc2V0dXBfcmV2aXNvbnMoZCkKKworICAgICAgICBpZiAncmV2JyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgdWQucmV2aXNpb24gPSB1ZC5wYXJtWydyZXYnXQorICAgICAgICBlbGlmIG5vdCB1ZC5yZXZpc2lvbjoKKyAgICAgICAgICAgIHVkLnJldmlzaW9uID0gc2VsZi5sYXRlc3RfcmV2aXNpb24odWQsIGQpCisKKyAgICAgICAgIyBDcmVhdGUgcGF0aHMgdG8gbWVyY3VyaWFsIGNoZWNrb3V0cworICAgICAgICBoZ3NyY25hbWUgPSAnJXNfJXNfJXMnICUgKHVkLm1vZHVsZS5yZXBsYWNlKCcvJywgJy4nKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkLmhvc3QsIHVkLnBhdGgucmVwbGFjZSgnLycsICcuJykpCisgICAgICAgIHVkLm1pcnJvcnRhcmJhbGwgPSAnaGdfJXMudGFyLmd6JyAlIGhnc3JjbmFtZQorICAgICAgICB1ZC5mdWxsbWlycm9yID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJETF9ESVIiLCBUcnVlKSwgdWQubWlycm9ydGFyYmFsbCkKKworICAgICAgICBoZ2RpciA9IGQuZ2V0VmFyKCJIR0RJUiIsIFRydWUpIG9yIChkLmdldFZhcigiRExfRElSIiwgVHJ1ZSkgKyAiL2hnLyIpCisgICAgICAgIHVkLnBrZ2RpciA9IG9zLnBhdGguam9pbihoZ2RpciwgaGdzcmNuYW1lKQorICAgICAgICB1ZC5tb2RkaXIgPSBvcy5wYXRoLmpvaW4odWQucGtnZGlyLCB1ZC5tb2R1bGUpCisgICAgICAgIHVkLmxvY2FsZmlsZSA9IHVkLm1vZGRpcgorICAgICAgICB1ZC5iYXNlY21kID0gZGF0YS5nZXRWYXIoIkZFVENIQ01EX2hnIiwgZCwgVHJ1ZSkgb3IgIi91c3IvYmluL2VudiBoZyIKKworICAgICAgICB1ZC53cml0ZV90YXJiYWxscyA9IGQuZ2V0VmFyKCJCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMiLCBUcnVlKQorCisgICAgZGVmIG5lZWRfdXBkYXRlKHNlbGYsIHVkLCBkKToKKyAgICAgICAgcmV2VGFnID0gdWQucGFybS5nZXQoJ3JldicsICd0aXAnKQorICAgICAgICBpZiByZXZUYWcgPT0gInRpcCI6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQubG9jYWxwYXRoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHRyeV9wcmVtaXJyb3Ioc2VsZiwgdWQsIGQpOgorICAgICAgICAjIElmIHdlIGRvbid0IGRvIHRoaXMsIHVwZGF0aW5nIGFuIGV4aXN0aW5nIGNoZWNrb3V0IHdpdGggb25seSBwcmVtaXJyb3JzCisgICAgICAgICMgaXMgbm90IHBvc3NpYmxlCisgICAgICAgIGlmIGQuZ2V0VmFyKCJCQl9GRVRDSF9QUkVNSVJST1JPTkxZIiwgVHJ1ZSkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1ZC5tb2RkaXIpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX2J1aWxkaGdjb21tYW5kKHNlbGYsIHVkLCBkLCBjb21tYW5kKToKKyAgICAgICAgIiIiCisgICAgICAgIEJ1aWxkIHVwIGFuIGhnIGNvbW1hbmRsaW5lIGJhc2VkIG9uIHVkCisgICAgICAgIGNvbW1hbmQgaXMgImZldGNoIiwgInVwZGF0ZSIsICJpbmZvIgorICAgICAgICAiIiIKKworICAgICAgICBwcm90byA9IHVkLnBhcm0uZ2V0KCdwcm90b2NvbCcsICdodHRwJykKKworICAgICAgICBob3N0ID0gdWQuaG9zdAorICAgICAgICBpZiBwcm90byA9PSAiZmlsZSI6CisgICAgICAgICAgICBob3N0ID0gIi8iCisgICAgICAgICAgICB1ZC5ob3N0ID0gImxvY2FsaG9zdCIKKworICAgICAgICBpZiBub3QgdWQudXNlcjoKKyAgICAgICAgICAgIGhncm9vdCA9IGhvc3QgKyB1ZC5wYXRoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiB1ZC5wc3dkOgorICAgICAgICAgICAgICAgIGhncm9vdCA9IHVkLnVzZXIgKyAiOiIgKyB1ZC5wc3dkICsgIkAiICsgaG9zdCArIHVkLnBhdGgKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaGdyb290ID0gdWQudXNlciArICJAIiArIGhvc3QgKyB1ZC5wYXRoCisKKyAgICAgICAgaWYgY29tbWFuZCA9PSAiaW5mbyI6CisgICAgICAgICAgICByZXR1cm4gIiVzIGlkZW50aWZ5IC1pICVzOi8vJXMvJXMiICUgKHVkLmJhc2VjbWQsIHByb3RvLCBoZ3Jvb3QsIHVkLm1vZHVsZSkKKworICAgICAgICBvcHRpb25zID0gW107CisKKyAgICAgICAgIyBEb24ndCBzcGVjaWZ5IHJldmlzaW9uIGZvciB0aGUgZmV0Y2g7IGNsb25lIHRoZSBlbnRpcmUgcmVwby4KKyAgICAgICAgIyBUaGlzIGF2b2lkcyBhbiBpc3N1ZSBpZiB0aGUgc3BlY2lmaWVkIHJldmlzaW9uIGlzIGEgdGFnLCBiZWNhdXNlCisgICAgICAgICMgdGhlIHRhZyBhY3R1YWxseSBleGlzdHMgaW4gdGhlIHNwZWNpZmllZCByZXZpc2lvbiArIDEsIHNvIGl0IHdvbid0CisgICAgICAgICMgYmUgYXZhaWxhYmxlIHdoZW4gdXNlZCBpbiBhbnkgc3VjY2Vzc2l2ZSBjb21tYW5kcy4KKyAgICAgICAgaWYgdWQucmV2aXNpb24gYW5kIGNvbW1hbmQgIT0gImZldGNoIjoKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItciAlcyIgJSB1ZC5yZXZpc2lvbikKKworICAgICAgICBpZiBjb21tYW5kID09ICJmZXRjaCI6CisgICAgICAgICAgICBpZiB1ZC51c2VyIGFuZCB1ZC5wc3dkOgorICAgICAgICAgICAgICAgIGNtZCA9ICIlcyAtLWNvbmZpZyBhdXRoLmRlZmF1bHQucHJlZml4PSogLS1jb25maWcgYXV0aC5kZWZhdWx0LnVzZXJuYW1lPSVzIC0tY29uZmlnIGF1dGguZGVmYXVsdC5wYXNzd29yZD0lcyAtLWNvbmZpZyBcImF1dGguZGVmYXVsdC5zY2hlbWVzPSVzXCIgY2xvbmUgJXMgJXM6Ly8lcy8lcyAlcyIgJSAodWQuYmFzZWNtZCwgdWQudXNlciwgdWQucHN3ZCwgcHJvdG8sICIgIi5qb2luKG9wdGlvbnMpLCBwcm90bywgaGdyb290LCB1ZC5tb2R1bGUsIHVkLm1vZHVsZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY21kID0gIiVzIGNsb25lICVzICVzOi8vJXMvJXMgJXMiICUgKHVkLmJhc2VjbWQsICIgIi5qb2luKG9wdGlvbnMpLCBwcm90bywgaGdyb290LCB1ZC5tb2R1bGUsIHVkLm1vZHVsZSkKKyAgICAgICAgZWxpZiBjb21tYW5kID09ICJwdWxsIjoKKyAgICAgICAgICAgICMgZG8gbm90IHBhc3Mgb3B0aW9ucyBsaXN0OyBsaW1pdGluZyBwdWxsIHRvIHJldiBjYXVzZXMgdGhlIGxvY2FsCisgICAgICAgICAgICAjIHJlcG8gbm90IHRvIGNvbnRhaW4gaXQgYW5kIGltbWVkaWF0ZWx5IGZvbGxvd2luZyAidXBkYXRlIiBjb21tYW5kCisgICAgICAgICAgICAjIHdpbGwgY3Jhc2gKKyAgICAgICAgICAgIGlmIHVkLnVzZXIgYW5kIHVkLnBzd2Q6CisgICAgICAgICAgICAgICAgY21kID0gIiVzIC0tY29uZmlnIGF1dGguZGVmYXVsdC5wcmVmaXg9KiAtLWNvbmZpZyBhdXRoLmRlZmF1bHQudXNlcm5hbWU9JXMgLS1jb25maWcgYXV0aC5kZWZhdWx0LnBhc3N3b3JkPSVzIC0tY29uZmlnIFwiYXV0aC5kZWZhdWx0LnNjaGVtZXM9JXNcIiBwdWxsIiAlICh1ZC5iYXNlY21kLCB1ZC51c2VyLCB1ZC5wc3dkLCBwcm90bykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY21kID0gIiVzIHB1bGwiICUgKHVkLmJhc2VjbWQpCisgICAgICAgIGVsaWYgY29tbWFuZCA9PSAidXBkYXRlIjoKKyAgICAgICAgICAgIGlmIHVkLnVzZXIgYW5kIHVkLnBzd2Q6CisgICAgICAgICAgICAgICAgY21kID0gIiVzIC0tY29uZmlnIGF1dGguZGVmYXVsdC5wcmVmaXg9KiAtLWNvbmZpZyBhdXRoLmRlZmF1bHQudXNlcm5hbWU9JXMgLS1jb25maWcgYXV0aC5kZWZhdWx0LnBhc3N3b3JkPSVzIC0tY29uZmlnIFwiYXV0aC5kZWZhdWx0LnNjaGVtZXM9JXNcIiB1cGRhdGUgLUMgJXMiICUgKHVkLmJhc2VjbWQsIHVkLnVzZXIsIHVkLnBzd2QsIHByb3RvLCAiICIuam9pbihvcHRpb25zKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY21kID0gIiVzIHVwZGF0ZSAtQyAlcyIgJSAodWQuYmFzZWNtZCwgIiAiLmpvaW4ob3B0aW9ucykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJJbnZhbGlkIGhnIGNvbW1hbmQgJXMiICUgY29tbWFuZCwgdWQudXJsKQorCisgICAgICAgIHJldHVybiBjbWQKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIkZldGNoIHVybCIiIgorCisgICAgICAgIHVkLnJlcG9jaGFuZ2VkID0gbm90IG9zLnBhdGguZXhpc3RzKHVkLmZ1bGxtaXJyb3IpCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJGZXRjaDogY2hlY2tpbmcgZm9yIG1vZHVsZSBkaXJlY3RvcnkgJyIgKyB1ZC5tb2RkaXIgKyAiJyIpCisKKyAgICAgICAgIyBJZiB0aGUgY2hlY2tvdXQgZG9lc24ndCBleGlzdCBhbmQgdGhlIG1pcnJvciB0YXJiYWxsIGRvZXMsIGV4dHJhY3QgaXQKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHVkLnBrZ2RpcikgYW5kIG9zLnBhdGguZXhpc3RzKHVkLmZ1bGxtaXJyb3IpOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHVkLnBrZ2RpcikKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLnBrZ2RpcikKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0YXIgLXh6ZiAlcyIgJSAodWQuZnVsbG1pcnJvciksIGQpCisKKyAgICAgICAgaWYgb3MuYWNjZXNzKG9zLnBhdGguam9pbih1ZC5tb2RkaXIsICcuaGcnKSwgb3MuUl9PSyk6CisgICAgICAgICAgICAjIEZvdW5kIHRoZSBzb3VyY2UsIGNoZWNrIHdoZXRoZXIgbmVlZCBwdWxsCisgICAgICAgICAgICB1cGRhdGVjbWQgPSBzZWxmLl9idWlsZGhnY29tbWFuZCh1ZCwgZCwgInVwZGF0ZSIpCisgICAgICAgICAgICBvcy5jaGRpcih1ZC5tb2RkaXIpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCB1cGRhdGVjbWQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcnVuZmV0Y2hjbWQodXBkYXRlY21kLCBkKQorICAgICAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5GZXRjaEVycm9yOgorICAgICAgICAgICAgICAgICMgUnVubm5pbmcgcHVsbCBpbiB0aGUgcmVwbworICAgICAgICAgICAgICAgIHB1bGxjbWQgPSBzZWxmLl9idWlsZGhnY29tbWFuZCh1ZCwgZCwgInB1bGwiKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJQdWxsaW5nICIgKyB1ZC51cmwpCisgICAgICAgICAgICAgICAgIyB1cGRhdGUgc291cmNlcyB0aGVyZQorICAgICAgICAgICAgICAgIG9zLmNoZGlyKHVkLm1vZGRpcikKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBwdWxsY21kKQorICAgICAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBwdWxsY21kLCB1ZC51cmwpCisgICAgICAgICAgICAgICAgcnVuZmV0Y2hjbWQocHVsbGNtZCwgZCkKKyAgICAgICAgICAgICAgICB1ZC5yZXBvY2hhbmdlZCA9IFRydWUKKworICAgICAgICAjIE5vIHNvdXJjZSBmb3VuZCwgY2xvbmUgaXQuCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5tb2RkaXIpOgorICAgICAgICAgICAgZmV0Y2hjbWQgPSBzZWxmLl9idWlsZGhnY29tbWFuZCh1ZCwgZCwgImZldGNoIikKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJGZXRjaCAiICsgdWQudXJsKQorICAgICAgICAgICAgIyBjaGVjayBvdXQgc291cmNlcyB0aGVyZQorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHVkLnBrZ2RpcikKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLnBrZ2RpcikKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUnVubmluZyAlcyIsIGZldGNoY21kKQorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGZldGNoY21kLCB1ZC51cmwpCisgICAgICAgICAgICBydW5mZXRjaGNtZChmZXRjaGNtZCwgZCkKKworICAgICAgICAjIEV2ZW4gd2hlbiB3ZSBjbG9uZSAoZmV0Y2gpLCB3ZSBzdGlsbCBuZWVkIHRvIHVwZGF0ZSBhcyBoZydzIGNsb25lCisgICAgICAgICMgd29uJ3QgY2hlY2tvdXQgdGhlIHNwZWNpZmllZCByZXZpc2lvbiBpZiBpdHMgb24gYSBicmFuY2gKKyAgICAgICAgdXBkYXRlY21kID0gc2VsZi5fYnVpbGRoZ2NvbW1hbmQodWQsIGQsICJ1cGRhdGUiKQorICAgICAgICBvcy5jaGRpcih1ZC5tb2RkaXIpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUnVubmluZyAlcyIsIHVwZGF0ZWNtZCkKKyAgICAgICAgcnVuZmV0Y2hjbWQodXBkYXRlY21kLCBkKQorCisgICAgZGVmIGNsZWFuKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiIENsZWFuIHRoZSBoZyBkaXIgIiIiCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHVkLmxvY2FscGF0aCwgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHVkLmZ1bGxtaXJyb3IpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1ZC5mdWxsbWlycm9yICsgIi5kb25lIikKKworICAgIGRlZiBzdXBwb3J0c19zcmNyZXYoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX2xhdGVzdF9yZXZpc2lvbihzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBDb21wdXRlIHRpcCByZXZpc2lvbiBmb3IgdGhlIHVybAorICAgICAgICAiIiIKKyAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIHNlbGYuX2J1aWxkaGdjb21tYW5kKHVkLCBkLCAiaW5mbyIpKQorICAgICAgICBvdXRwdXQgPSBydW5mZXRjaGNtZChzZWxmLl9idWlsZGhnY29tbWFuZCh1ZCwgZCwgImluZm8iKSwgZCkKKyAgICAgICAgcmV0dXJuIG91dHB1dC5zdHJpcCgpCisKKyAgICBkZWYgX2J1aWxkX3JldmlzaW9uKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHVkLnJldmlzaW9uCisKKyAgICBkZWYgX3JldmlzaW9uX2tleShzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSB1bmlxdWUga2V5IGZvciB0aGUgdXJsCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gImhnOiIgKyB1ZC5tb2RkaXIKKworICAgIGRlZiBidWlsZF9taXJyb3JfZGF0YShzZWxmLCB1ZCwgZCk6CisgICAgICAgICMgR2VuZXJhdGUgYSBtaXJyb3IgdGFyYmFsbCBpZiBuZWVkZWQKKyAgICAgICAgaWYgdWQud3JpdGVfdGFyYmFsbHMgPT0gIjEiIGFuZCAodWQucmVwb2NoYW5nZWQgb3Igbm90IG9zLnBhdGguZXhpc3RzKHVkLmZ1bGxtaXJyb3IpKToKKyAgICAgICAgICAgICMgaXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgc3ltbGluayBwb2ludHMgdG8gcmVhZC1vbmx5IGZpbGVzeXN0ZW0gd2l0aCBQUkVNSVJST1IKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKHVkLmZ1bGxtaXJyb3IpOgorICAgICAgICAgICAgICAgIG9zLnVubGluayh1ZC5mdWxsbWlycm9yKQorCisgICAgICAgICAgICBvcy5jaGRpcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ3JlYXRpbmcgdGFyYmFsbCBvZiBoZyByZXBvc2l0b3J5IikKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0YXIgLWN6ZiAlcyAlcyIgJSAodWQuZnVsbG1pcnJvciwgdWQubW9kdWxlKSwgZCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0b3VjaCAlcy5kb25lIiAlICh1ZC5mdWxsbWlycm9yKSwgZCkKKworICAgIGRlZiBsb2NhbHBhdGgoc2VsZiwgdWQsIGQpOgorICAgICAgICByZXR1cm4gdWQucGtnZGlyCisKKyAgICBkZWYgdW5wYWNrKHNlbGYsIHVkLCBkZXN0ZGlyLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIE1ha2UgYSBsb2NhbCBjbG9uZSBvciBleHBvcnQgZm9yIHRoZSB1cmwKKyAgICAgICAgIiIiCisKKyAgICAgICAgcmV2ZmxhZyA9ICItciAlcyIgJSB1ZC5yZXZpc2lvbgorICAgICAgICBzdWJkaXIgPSB1ZC5wYXJtLmdldCgiZGVzdHN1ZmZpeCIsIHVkLm1vZHVsZSkKKyAgICAgICAgY29kaXIgPSAiJXMvJXMiICUgKGRlc3RkaXIsIHN1YmRpcikKKworICAgICAgICBzY21kYXRhID0gdWQucGFybS5nZXQoInNjbWRhdGEiLCAiIikKKyAgICAgICAgaWYgc2NtZGF0YSAhPSAibm9rZWVwIjoKKyAgICAgICAgICAgIGlmIG5vdCBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKGNvZGlyLCAnLmhnJyksIG9zLlJfT0spOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiVW5wYWNrOiBjcmVhdGluZyBuZXcgaGcgcmVwb3NpdG9yeSBpbiAnIiArIGNvZGlyICsgIiciKQorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBpbml0ICVzIiAlICh1ZC5iYXNlY21kLCBjb2RpciksIGQpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlVucGFjazogdXBkYXRpbmcgc291cmNlIGluICciICsgY29kaXIgKyAiJyIpCisgICAgICAgICAgICBvcy5jaGRpcihjb2RpcikKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBwdWxsICVzIiAlICh1ZC5iYXNlY21kLCB1ZC5tb2RkaXIpLCBkKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHVwIC1DICVzIiAlICh1ZC5iYXNlY21kLCByZXZmbGFnKSwgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiVW5wYWNrOiBleHRyYWN0aW5nIHNvdXJjZSB0byAnIiArIGNvZGlyICsgIiciKQorICAgICAgICAgICAgb3MuY2hkaXIodWQubW9kZGlyKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGFyY2hpdmUgLXQgZmlsZXMgJXMgJXMiICUgKHVkLmJhc2VjbWQsIHJldmZsYWcsIGNvZGlyKSwgZCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2xvY2FsLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvbG9jYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5MjFmNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2xvY2FsLnB5CkBAIC0wLDAgKzEsMTI4IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdGZXRjaCcgaW1wbGVtZW50YXRpb25zCisKK0NsYXNzZXMgZm9yIG9idGFpbmluZyB1cHN0cmVhbSBzb3VyY2VzIGZvciB0aGUKK0JpdEJha2UgYnVpbGQgdG9vbHMuCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBCYXNlZCBvbiBmdW5jdGlvbnMgZnJvbSB0aGUgYmFzZSBiYiBtb2R1bGUsIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCisKK2ltcG9ydCBvcworaW1wb3J0IHVybGxpYgoraW1wb3J0IGJiCitpbXBvcnQgYmIudXRpbHMKK2Zyb20gICBiYiBpbXBvcnQgZGF0YQorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QsIEZldGNoRXJyb3IKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IGxvZ2dlcgorCitjbGFzcyBMb2NhbChGZXRjaE1ldGhvZCk6CisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVybGRhdGEsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdG8gc2VlIGlmIGEgZ2l2ZW4gdXJsIHJlcHJlc2VudHMgYSBsb2NhbCBmZXRjaC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB1cmxkYXRhLnR5cGUgaW4gWydmaWxlJ10KKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICAjIFdlIGRvbid0IHNldCBsb2NhbGZpbGUgYXMgZm9yIHRoaXMgZmV0Y2hlciB0aGUgZmlsZSBpcyBhbHJlYWR5IGxvY2FsIQorICAgICAgICB1ZC5kZWNvZGVkdXJsID0gdXJsbGliLnVucXVvdGUodWQudXJsLnNwbGl0KCI6Ly8iKVsxXS5zcGxpdCgiOyIpWzBdKQorICAgICAgICB1ZC5iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodWQuZGVjb2RlZHVybCkKKyAgICAgICAgdWQuYmFzZXBhdGggPSB1ZC5kZWNvZGVkdXJsCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGxvY2FscGF0aChzZWxmLCB1cmxkYXRhLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgbG9jYWwgZmlsZW5hbWUgb2YgYSBnaXZlbiB1cmwgYXNzdW1pbmcgYSBzdWNjZXNzZnVsIGZldGNoLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYubG9jYWxwYXRocyh1cmxkYXRhLCBkKVstMV0KKworICAgIGRlZiBsb2NhbHBhdGhzKHNlbGYsIHVybGRhdGEsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBsb2NhbCBmaWxlbmFtZSBvZiBhIGdpdmVuIHVybCBhc3N1bWluZyBhIHN1Y2Nlc3NmdWwgZmV0Y2guCisgICAgICAgICIiIgorICAgICAgICBzZWFyY2hlZCA9IFtdCisgICAgICAgIHBhdGggPSB1cmxkYXRhLmRlY29kZWR1cmwKKyAgICAgICAgbmV3cGF0aCA9IHBhdGgKKyAgICAgICAgaWYgcGF0aFswXSA9PSAiLyI6CisgICAgICAgICAgICByZXR1cm4gW3BhdGhdCisgICAgICAgIGZpbGVzcGF0aCA9IGRhdGEuZ2V0VmFyKCdGSUxFU1BBVEgnLCBkLCBUcnVlKQorICAgICAgICBpZiBmaWxlc3BhdGg6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlNlYXJjaGluZyBmb3IgJXMgaW4gcGF0aHM6XG4gICAgJXMiICUgKHBhdGgsICJcbiAgICAiLmpvaW4oZmlsZXNwYXRoLnNwbGl0KCI6IikpKSkKKyAgICAgICAgICAgIG5ld3BhdGgsIGhpc3QgPSBiYi51dGlscy53aGljaChmaWxlc3BhdGgsIHBhdGgsIGhpc3Rvcnk9VHJ1ZSkKKyAgICAgICAgICAgIHNlYXJjaGVkLmV4dGVuZChoaXN0KQorICAgICAgICBpZiBub3QgbmV3cGF0aDoKKyAgICAgICAgICAgIGZpbGVzZGlyID0gZGF0YS5nZXRWYXIoJ0ZJTEVTRElSJywgZCwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGZpbGVzZGlyOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiU2VhcmNoaW5nIGZvciAlcyBpbiBwYXRoOiAlcyIgJSAocGF0aCwgZmlsZXNkaXIpKQorICAgICAgICAgICAgICAgIG5ld3BhdGggPSBvcy5wYXRoLmpvaW4oZmlsZXNkaXIsIHBhdGgpCisgICAgICAgICAgICAgICAgc2VhcmNoZWQuYXBwZW5kKG5ld3BhdGgpCisgICAgICAgIGlmIChub3QgbmV3cGF0aCBvciBub3Qgb3MucGF0aC5leGlzdHMobmV3cGF0aCkpIGFuZCBwYXRoLmZpbmQoIioiKSAhPSAtMToKKyAgICAgICAgICAgICMgRm9yIGV4cHJlc3Npb25zIHVzaW5nICcqJywgYmVzdCB3ZSBjYW4gZG8gaXMgdGFrZSB0aGUgZmlyc3QgZGlyZWN0b3J5IGluIEZJTEVTUEFUSCB0aGF0IGV4aXN0cworICAgICAgICAgICAgbmV3cGF0aCwgaGlzdCA9IGJiLnV0aWxzLndoaWNoKGZpbGVzcGF0aCwgIi4iLCBoaXN0b3J5PVRydWUpCisgICAgICAgICAgICBzZWFyY2hlZC5leHRlbmQoaGlzdCkKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiU2VhcmNoaW5nIGZvciAlcyBpbiBwYXRoOiAlcyIgJSAocGF0aCwgbmV3cGF0aCkpCisgICAgICAgICAgICByZXR1cm4gc2VhcmNoZWQKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG5ld3BhdGgpOgorICAgICAgICAgICAgZGxkaXJmaWxlID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJETF9ESVIiLCBUcnVlKSwgcGF0aCkKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiRGVmYXVsdGluZyB0byAlcyBmb3IgJXMiICUgKGRsZGlyZmlsZSwgcGF0aCkpCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGRsZGlyZmlsZSkpCisgICAgICAgICAgICBzZWFyY2hlZC5hcHBlbmQoZGxkaXJmaWxlKQorICAgICAgICAgICAgcmV0dXJuIHNlYXJjaGVkCisgICAgICAgIHJldHVybiBzZWFyY2hlZAorCisgICAgZGVmIG5lZWRfdXBkYXRlKHNlbGYsIHVkLCBkKToKKyAgICAgICAgaWYgdWQudXJsLmZpbmQoIioiKSAhPSAtMToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgICIiIkZldGNoIHVybHMgKG5vLW9wIGZvciBMb2NhbCBtZXRob2QpIiIiCisgICAgICAgICMgbm8gbmVlZCB0byBmZXRjaCBsb2NhbCBmaWxlcywgd2UnbGwgZGVhbCB3aXRoIHRoZW0gaW4gcGxhY2UuCisgICAgICAgIGlmIHNlbGYuc3VwcG9ydHNfY2hlY2tzdW0odXJsZGF0YSkgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyh1cmxkYXRhLmxvY2FscGF0aCk6CisgICAgICAgICAgICBsb2NhdGlvbnMgPSBbXQorICAgICAgICAgICAgZmlsZXNwYXRoID0gZGF0YS5nZXRWYXIoJ0ZJTEVTUEFUSCcsIGQsIFRydWUpCisgICAgICAgICAgICBpZiBmaWxlc3BhdGg6CisgICAgICAgICAgICAgICAgbG9jYXRpb25zID0gZmlsZXNwYXRoLnNwbGl0KCI6IikKKyAgICAgICAgICAgIGZpbGVzZGlyID0gZGF0YS5nZXRWYXIoJ0ZJTEVTRElSJywgZCwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGZpbGVzZGlyOgorICAgICAgICAgICAgICAgIGxvY2F0aW9ucy5hcHBlbmQoZmlsZXNkaXIpCisgICAgICAgICAgICBsb2NhdGlvbnMuYXBwZW5kKGQuZ2V0VmFyKCJETF9ESVIiLCBUcnVlKSkKKworICAgICAgICAgICAgbXNnID0gIlVuYWJsZSB0byBmaW5kIGZpbGUgIiArIHVybGRhdGEudXJsICsgIiBhbnl3aGVyZS4gVGhlIHBhdGhzIHRoYXQgd2VyZSBzZWFyY2hlZCB3ZXJlOlxuICAgICIgKyAiXG4gICAgIi5qb2luKGxvY2F0aW9ucykKKyAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IobXNnKQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgY2hlY2tzdGF0dXMoc2VsZiwgZmV0Y2gsIHVybGRhdGEsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgdXJsCisgICAgICAgICIiIgorICAgICAgICBpZiB1cmxkYXRhLmxvY2FscGF0aC5maW5kKCIqIikgIT0gLTE6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiVVJMICVzIGxvb2tzIGxpa2UgYSBnbG9iIGFuZCB3YXMgdGhlcmVmb3JlIG5vdCBjaGVja2VkLiIsIHVybGRhdGEudXJsKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHModXJsZGF0YS5sb2NhbHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgY2xlYW4oc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgIHJldHVybgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9vc2MucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9vc2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q4Nzc5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL29zYy5weQpAQCAtMCwwICsxLDEzNSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0YmFrZSAiRmV0Y2giIGltcGxlbWVudGF0aW9uIGZvciBvc2MgKE9wZW5zdXNlIGJ1aWxkIHNlcnZpY2UgY2xpZW50KS4KK0Jhc2VkIG9uIHRoZSBzdm4gIkZldGNoIiBpbXBsZW1lbnRhdGlvbi4KKworIiIiCisKK2ltcG9ydCAgb3MKK2ltcG9ydCAgc3lzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0ICBiYgorZnJvbSAgICBiYiAgICAgICBpbXBvcnQgZGF0YQorZnJvbSAgICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitmcm9tICAgIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hFcnJvcgorZnJvbSAgICBiYi5mZXRjaDIgaW1wb3J0IE1pc3NpbmdQYXJhbWV0ZXJFcnJvcgorZnJvbSAgICBiYi5mZXRjaDIgaW1wb3J0IHJ1bmZldGNoY21kCisKK2NsYXNzIE9zYyhGZXRjaE1ldGhvZCk6CisgICAgIiIiQ2xhc3MgdG8gZmV0Y2ggYSBtb2R1bGUgb3IgbW9kdWxlcyBmcm9tIE9wZW5zdXNlIGJ1aWxkIHNlcnZlcgorICAgICAgIHJlcG9zaXRvcmllcy4iIiIKKworICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgY2FuIGJlIGZldGNoZWQgd2l0aCBvc2MuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ29zYyddCisKKyAgICBkZWYgdXJsZGF0YV9pbml0KHNlbGYsIHVkLCBkKToKKyAgICAgICAgaWYgbm90ICJtb2R1bGUiIGluIHVkLnBhcm06CisgICAgICAgICAgICByYWlzZSBNaXNzaW5nUGFyYW1ldGVyRXJyb3IoJ21vZHVsZScsIHVkLnVybCkKKworICAgICAgICB1ZC5tb2R1bGUgPSB1ZC5wYXJtWyJtb2R1bGUiXQorCisgICAgICAgICMgQ3JlYXRlIHBhdGhzIHRvIG9zYyBjaGVja291dHMKKyAgICAgICAgcmVscGF0aCA9IHNlbGYuX3N0cmlwX2xlYWRpbmdfc2xhc2hlcyh1ZC5wYXRoKQorICAgICAgICB1ZC5wa2dkaXIgPSBvcy5wYXRoLmpvaW4oZGF0YS5leHBhbmQoJyR7T1NDRElSfScsIGQpLCB1ZC5ob3N0KQorICAgICAgICB1ZC5tb2RkaXIgPSBvcy5wYXRoLmpvaW4odWQucGtnZGlyLCByZWxwYXRoLCB1ZC5tb2R1bGUpCisKKyAgICAgICAgaWYgJ3JldicgaW4gdWQucGFybToKKyAgICAgICAgICAgIHVkLnJldmlzaW9uID0gdWQucGFybVsncmV2J10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHB2ID0gZGF0YS5nZXRWYXIoIlBWIiwgZCwgMCkKKyAgICAgICAgICAgIHJldiA9IGJiLmZldGNoMi5zcmNyZXZfaW50ZXJuYWxfaGVscGVyKHVkLCBkKQorICAgICAgICAgICAgaWYgcmV2IGFuZCByZXYgIT0gVHJ1ZToKKyAgICAgICAgICAgICAgICB1ZC5yZXZpc2lvbiA9IHJldgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB1ZC5yZXZpc2lvbiA9ICIiCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gZGF0YS5leHBhbmQoJyVzXyVzXyVzLnRhci5neicgJSAodWQubW9kdWxlLnJlcGxhY2UoJy8nLCAnLicpLCB1ZC5wYXRoLnJlcGxhY2UoJy8nLCAnLicpLCB1ZC5yZXZpc2lvbiksIGQpCisKKyAgICBkZWYgX2J1aWxkb3NjY29tbWFuZChzZWxmLCB1ZCwgZCwgY29tbWFuZCk6CisgICAgICAgICIiIgorICAgICAgICBCdWlsZCB1cCBhbiBvY3MgY29tbWFuZGxpbmUgYmFzZWQgb24gdWQKKyAgICAgICAgY29tbWFuZCBpcyAiZmV0Y2giLCAidXBkYXRlIiwgImluZm8iCisgICAgICAgICIiIgorCisgICAgICAgIGJhc2VjbWQgPSBkYXRhLmV4cGFuZCgnJHtGRVRDSENNRF9vc2N9JywgZCkKKworICAgICAgICBwcm90byA9IHVkLnBhcm0uZ2V0KCdwcm90b2NvbCcsICdvY3MnKQorCisgICAgICAgIG9wdGlvbnMgPSBbXQorCisgICAgICAgIGNvbmZpZyA9ICItYyAlcyIgJSBzZWxmLmdlbmVyYXRlX2NvbmZpZyh1ZCwgZCkKKworICAgICAgICBpZiB1ZC5yZXZpc2lvbjoKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItciAlcyIgJSB1ZC5yZXZpc2lvbikKKworICAgICAgICBjb3Jvb3QgPSBzZWxmLl9zdHJpcF9sZWFkaW5nX3NsYXNoZXModWQucGF0aCkKKworICAgICAgICBpZiBjb21tYW5kID09ICJmZXRjaCI6CisgICAgICAgICAgICBvc2NjbWQgPSAiJXMgJXMgY28gJXMvJXMgJXMiICUgKGJhc2VjbWQsIGNvbmZpZywgY29yb290LCB1ZC5tb2R1bGUsICIgIi5qb2luKG9wdGlvbnMpKQorICAgICAgICBlbGlmIGNvbW1hbmQgPT0gInVwZGF0ZSI6CisgICAgICAgICAgICBvc2NjbWQgPSAiJXMgJXMgdXAgJXMiICUgKGJhc2VjbWQsIGNvbmZpZywgIiAiLmpvaW4ob3B0aW9ucykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJJbnZhbGlkIG9zYyBjb21tYW5kICVzIiAlIGNvbW1hbmQsIHVkLnVybCkKKworICAgICAgICByZXR1cm4gb3NjY21kCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgRmV0Y2ggdXJsCisgICAgICAgICIiIgorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiRmV0Y2g6IGNoZWNraW5nIGZvciBtb2R1bGUgZGlyZWN0b3J5ICciICsgdWQubW9kZGlyICsgIiciKQorCisgICAgICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4oZGF0YS5leHBhbmQoJyR7T1NDRElSfScsIGQpLCB1ZC5wYXRoLCB1ZC5tb2R1bGUpLCBvcy5SX09LKToKKyAgICAgICAgICAgIG9zY3VwZGF0ZWNtZCA9IHNlbGYuX2J1aWxkb3NjY29tbWFuZCh1ZCwgZCwgInVwZGF0ZSIpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiVXBkYXRlICIrIHVkLnVybCkKKyAgICAgICAgICAgICMgdXBkYXRlIHNvdXJjZXMgdGhlcmUKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLm1vZGRpcikKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUnVubmluZyAlcyIsIG9zY3VwZGF0ZWNtZCkKKyAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBvc2N1cGRhdGVjbWQsIHVkLnVybCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKG9zY3VwZGF0ZWNtZCwgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zY2ZldGNoY21kID0gc2VsZi5fYnVpbGRvc2Njb21tYW5kKHVkLCBkLCAiZmV0Y2giKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkZldGNoICIgKyB1ZC51cmwpCisgICAgICAgICAgICAjIGNoZWNrIG91dCBzb3VyY2VzIHRoZXJlCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodWQucGtnZGlyKQorICAgICAgICAgICAgb3MuY2hkaXIodWQucGtnZGlyKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgb3NjZmV0Y2hjbWQpCisgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgb3NjZmV0Y2hjbWQsIHVkLnVybCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKG9zY2ZldGNoY21kLCBkKQorCisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbih1ZC5wa2dkaXIgKyB1ZC5wYXRoKSkKKyAgICAgICAgIyB0YXIgdGhlbSB1cCB0byBhIGRlZmluZWQgZmlsZW5hbWUKKyAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAtY3pmICVzICVzIiAlICh1ZC5sb2NhbHBhdGgsIHVkLm1vZHVsZSksIGQsIGNsZWFudXAgPSBbdWQubG9jYWxwYXRoXSkKKworICAgIGRlZiBzdXBwb3J0c19zcmNyZXYoc2VsZik6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGdlbmVyYXRlX2NvbmZpZyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhIC5vc2NyYyB0byBiZSB1c2VkIGZvciB0aGlzIHJ1bi4KKyAgICAgICAgIiIiCisKKyAgICAgICAgY29uZmlnX3BhdGggPSBvcy5wYXRoLmpvaW4oZGF0YS5leHBhbmQoJyR7T1NDRElSfScsIGQpLCAib3NjcmMiKQorICAgICAgICBpZiAob3MucGF0aC5leGlzdHMoY29uZmlnX3BhdGgpKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShjb25maWdfcGF0aCkKKworICAgICAgICBmID0gb3Blbihjb25maWdfcGF0aCwgJ3cnKQorICAgICAgICBmLndyaXRlKCJbZ2VuZXJhbF1cbiIpCisgICAgICAgIGYud3JpdGUoImFwaXNydiA9ICVzXG4iICUgdWQuaG9zdCkKKyAgICAgICAgZi53cml0ZSgic2NoZW1lID0gaHR0cFxuIikKKyAgICAgICAgZi53cml0ZSgic3Utd3JhcHBlciA9IHN1IC1jXG4iKQorICAgICAgICBmLndyaXRlKCJidWlsZC1yb290ID0gJXNcbiIgJSBkYXRhLmV4cGFuZCgnJHtXT1JLRElSfScsIGQpKQorICAgICAgICBmLndyaXRlKCJ1cmxsaXN0ID0gaHR0cDovL21vYmxpbi1vYnMuamYuaW50ZWwuY29tOjg4ODgvYnVpbGQvJShwcm9qZWN0KXMvJShyZXBvc2l0b3J5KXMvJShidWlsZGFyY2gpcy86ZnVsbC8lKG5hbWUpcy5ycG1cbiIpCisgICAgICAgIGYud3JpdGUoImV4dHJhLXBrZ3MgPSBnemlwXG4iKQorICAgICAgICBmLndyaXRlKCJcbiIpCisgICAgICAgIGYud3JpdGUoIlslc11cbiIgJSB1ZC5ob3N0KQorICAgICAgICBmLndyaXRlKCJ1c2VyID0gJXNcbiIgJSB1ZC5wYXJtWyJ1c2VyIl0pCisgICAgICAgIGYud3JpdGUoInBhc3MgPSAlc1xuIiAlIHVkLnBhcm1bInBzd2QiXSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgcmV0dXJuIGNvbmZpZ19wYXRoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9wZXJmb3JjZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3BlcmZvcmNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMTBjN2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9wZXJmb3JjZS5weQpAQCAtMCwwICsxLDE4NyBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnRmV0Y2gnIGltcGxlbWVudGF0aW9ucworCitDbGFzc2VzIGZvciBvYnRhaW5pbmcgdXBzdHJlYW0gc291cmNlcyBmb3IgdGhlCitCaXRCYWtlIGJ1aWxkIHRvb2xzLgorCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworCitmcm9tIGZ1dHVyZV9idWlsdGlucyBpbXBvcnQgemlwCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiCitmcm9tICAgYmIgaW1wb3J0IGRhdGEKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaEVycm9yCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBsb2dnZXIKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IHJ1bmZldGNoY21kCisKK2NsYXNzIFBlcmZvcmNlKEZldGNoTWV0aG9kKToKKyAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdWQsIGQpOgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ3A0J10KKworICAgIGRlZiBkb3BhcnNlKHVybCwgZCk6CisgICAgICAgIHBhcm0gPSB7fQorICAgICAgICBwYXRoID0gdXJsLnNwbGl0KCI6Ly8iKVsxXQorICAgICAgICBkZWxpbSA9IHBhdGguZmluZCgiQCIpOworICAgICAgICBpZiBkZWxpbSAhPSAtMToKKyAgICAgICAgICAgICh1c2VyLCBwc3dkLCBob3N0LCBwb3J0KSA9IHBhdGguc3BsaXQoJ0AnKVswXS5zcGxpdCgiOiIpCisgICAgICAgICAgICBwYXRoID0gcGF0aC5zcGxpdCgnQCcpWzFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAoaG9zdCwgcG9ydCkgPSBkLmdldFZhcignUDRQT1JUJywgRmFsc2UpLnNwbGl0KCc6JykKKyAgICAgICAgICAgIHVzZXIgPSAiIgorICAgICAgICAgICAgcHN3ZCA9ICIiCisKKyAgICAgICAgaWYgcGF0aC5maW5kKCI7IikgIT0gLTE6CisgICAgICAgICAgICBrZXlzPVtdCisgICAgICAgICAgICB2YWx1ZXM9W10KKyAgICAgICAgICAgIHBsaXN0ID0gcGF0aC5zcGxpdCgnOycpCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBwbGlzdDoKKyAgICAgICAgICAgICAgICBpZiBpdGVtLmNvdW50KCc9Jyk6CisgICAgICAgICAgICAgICAgICAgIChrZXksIHZhbHVlKSA9IGl0ZW0uc3BsaXQoJz0nKQorICAgICAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChrZXkpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpCisKKyAgICAgICAgICAgIHBhcm0gPSBkaWN0KHppcChrZXlzLCB2YWx1ZXMpKQorICAgICAgICBwYXRoID0gIi8vIiArIHBhdGguc3BsaXQoJzsnKVswXQorICAgICAgICBob3N0ICs9ICI6JXMiICUgKHBvcnQpCisgICAgICAgIHBhcm1bImNzZXQiXSA9IFBlcmZvcmNlLmdldGNzZXQoZCwgcGF0aCwgaG9zdCwgdXNlciwgcHN3ZCwgcGFybSkKKworICAgICAgICByZXR1cm4gaG9zdCwgcGF0aCwgdXNlciwgcHN3ZCwgcGFybQorICAgIGRvcGFyc2UgPSBzdGF0aWNtZXRob2QoZG9wYXJzZSkKKworICAgIGRlZiBnZXRjc2V0KGQsIGRlcG90LCBob3N0LCB1c2VyLCBwc3dkLCBwYXJtKToKKyAgICAgICAgcDRvcHQgPSAiIgorICAgICAgICBpZiAiY3NldCIgaW4gcGFybToKKyAgICAgICAgICAgIHJldHVybiBwYXJtWyJjc2V0Il07CisgICAgICAgIGlmIHVzZXI6CisgICAgICAgICAgICBwNG9wdCArPSAiIC11ICVzIiAlICh1c2VyKQorICAgICAgICBpZiBwc3dkOgorICAgICAgICAgICAgcDRvcHQgKz0gIiAtUCAlcyIgJSAocHN3ZCkKKyAgICAgICAgaWYgaG9zdDoKKyAgICAgICAgICAgIHA0b3B0ICs9ICIgLXAgJXMiICUgKGhvc3QpCisKKyAgICAgICAgcDRkYXRlID0gZC5nZXRWYXIoIlA0REFURSIsIFRydWUpCisgICAgICAgIGlmICJyZXZpc2lvbiIgaW4gcGFybToKKyAgICAgICAgICAgIGRlcG90ICs9ICIjJXMiICUgKHBhcm1bInJldmlzaW9uIl0pCisgICAgICAgIGVsaWYgImxhYmVsIiBpbiBwYXJtOgorICAgICAgICAgICAgZGVwb3QgKz0gIkAlcyIgJSAocGFybVsibGFiZWwiXSkKKyAgICAgICAgZWxpZiBwNGRhdGU6CisgICAgICAgICAgICBkZXBvdCArPSAiQCVzIiAlIChwNGRhdGUpCisKKyAgICAgICAgcDRjbWQgPSBkLmdldFZhcignRkVUQ0hDTURfcDQnLCBUcnVlKSBvciAicDQiCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUnVubmluZyAlcyVzIGNoYW5nZXMgLW0gMSAlcyIsIHA0Y21kLCBwNG9wdCwgZGVwb3QpCisgICAgICAgIHA0ZmlsZSwgZXJyb3JzID0gYmIucHJvY2Vzcy5ydW4oIiVzJXMgY2hhbmdlcyAtbSAxICVzIiAlIChwNGNtZCwgcDRvcHQsIGRlcG90KSkKKyAgICAgICAgY3NldCA9IHA0ZmlsZS5zdHJpcCgpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUkVBRCAlcyIsIGNzZXQpCisgICAgICAgIGlmIG5vdCBjc2V0OgorICAgICAgICAgICAgcmV0dXJuIC0xCisKKyAgICAgICAgcmV0dXJuIGNzZXQuc3BsaXQoJyAnKVsxXQorICAgIGdldGNzZXQgPSBzdGF0aWNtZXRob2QoZ2V0Y3NldCkKKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICAoaG9zdCwgcGF0aCwgdXNlciwgcHN3ZCwgcGFybSkgPSBQZXJmb3JjZS5kb3BhcnNlKHVkLnVybCwgZCkKKworICAgICAgICBiYXNlX3BhdGggPSBwYXRoLnJlcGxhY2UoJy8uLi4nLCAnJykKKyAgICAgICAgYmFzZV9wYXRoID0gc2VsZi5fc3RyaXBfbGVhZGluZ19zbGFzaGVzKGJhc2VfcGF0aCkKKyAgICAgICAgCisgICAgICAgIGlmICJsYWJlbCIgaW4gcGFybToKKyAgICAgICAgICAgIHZlcnNpb24gPSBwYXJtWyJsYWJlbCJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2ZXJzaW9uID0gUGVyZm9yY2UuZ2V0Y3NldChkLCBwYXRoLCBob3N0LCB1c2VyLCBwc3dkLCBwYXJtKQorCisgICAgICAgIHVkLmxvY2FsZmlsZSA9IGRhdGEuZXhwYW5kKCclcyslcyslcy50YXIuZ3onICUgKGhvc3QsIGJhc2VfcGF0aC5yZXBsYWNlKCcvJywgJy4nKSwgdmVyc2lvbiksIGQpCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgRmV0Y2ggdXJscworICAgICAgICAiIiIKKworICAgICAgICAoaG9zdCwgZGVwb3QsIHVzZXIsIHBzd2QsIHBhcm0pID0gUGVyZm9yY2UuZG9wYXJzZSh1ZC51cmwsIGQpCisKKyAgICAgICAgaWYgZGVwb3QuZmluZCgnLy4uLicpICE9IC0xOgorICAgICAgICAgICAgcGF0aCA9IGRlcG90WzpkZXBvdC5maW5kKCcvLi4uJyldCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXRoID0gZGVwb3RbOmRlcG90LnJmaW5kKCcvJyldCisKKyAgICAgICAgbW9kdWxlID0gcGFybS5nZXQoJ21vZHVsZScsIG9zLnBhdGguYmFzZW5hbWUocGF0aCkpCisKKyAgICAgICAgIyBHZXQgdGhlIHA0IGNvbW1hbmQKKyAgICAgICAgcDRvcHQgPSAiIgorICAgICAgICBpZiB1c2VyOgorICAgICAgICAgICAgcDRvcHQgKz0gIiAtdSAlcyIgJSAodXNlcikKKworICAgICAgICBpZiBwc3dkOgorICAgICAgICAgICAgcDRvcHQgKz0gIiAtUCAlcyIgJSAocHN3ZCkKKworICAgICAgICBpZiBob3N0OgorICAgICAgICAgICAgcDRvcHQgKz0gIiAtcCAlcyIgJSAoaG9zdCkKKworICAgICAgICBwNGNtZCA9IGQuZ2V0VmFyKCdGRVRDSENNRF9wNCcsIFRydWUpIG9yICJwNCIKKworICAgICAgICAjIGNyZWF0ZSB0ZW1wIGRpcmVjdG9yeQorICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkZldGNoOiBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5IikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGQuZXhwYW5kKCcke1dPUktESVJ9JykpCisgICAgICAgIG1rdGVtcCA9IGQuZ2V0VmFyKCJGRVRDSENNRF9wNG1rdGVtcCIsIFRydWUpIG9yIGQuZXhwYW5kKCJta3RlbXAgLWQgLXEgJyR7V09SS0RJUn0vb2VwNC5YWFhYWFgnIikKKyAgICAgICAgdG1wZmlsZSwgZXJyb3JzID0gYmIucHJvY2Vzcy5ydW4obWt0ZW1wKQorICAgICAgICB0bXBmaWxlID0gdG1wZmlsZS5zdHJpcCgpCisgICAgICAgIGlmIG5vdCB0bXBmaWxlOgorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiRmV0Y2g6IHVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4uIG1ha2Ugc3VyZSAnbWt0ZW1wJyBpcyBpbiB0aGUgUEFUSC4iLCB1ZC51cmwpCisKKyAgICAgICAgaWYgImxhYmVsIiBpbiBwYXJtOgorICAgICAgICAgICAgZGVwb3QgPSAiJXNAJXMiICUgKGRlcG90LCBwYXJtWyJsYWJlbCJdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3NldCA9IFBlcmZvcmNlLmdldGNzZXQoZCwgZGVwb3QsIGhvc3QsIHVzZXIsIHBzd2QsIHBhcm0pCisgICAgICAgICAgICBkZXBvdCA9ICIlc0AlcyIgJSAoZGVwb3QsIGNzZXQpCisKKyAgICAgICAgb3MuY2hkaXIodG1wZmlsZSkKKyAgICAgICAgbG9nZ2VyLmluZm8oIkZldGNoICIgKyB1ZC51cmwpCisgICAgICAgIGxvZ2dlci5pbmZvKCIlcyVzIGZpbGVzICVzIiwgcDRjbWQsIHA0b3B0LCBkZXBvdCkKKyAgICAgICAgcDRmaWxlLCBlcnJvcnMgPSBiYi5wcm9jZXNzLnJ1bigiJXMlcyBmaWxlcyAlcyIgJSAocDRjbWQsIHA0b3B0LCBkZXBvdCkpCisgICAgICAgIHA0ZmlsZSA9IFtmLnJzdHJpcCgpIGZvciBmIGluIHA0ZmlsZS5zcGxpdGxpbmVzKCldCisKKyAgICAgICAgaWYgbm90IHA0ZmlsZToKKyAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIkZldGNoOiB1bmFibGUgdG8gZ2V0IHRoZSBQNCBmaWxlcyBmcm9tICVzIiAlIGRlcG90LCB1ZC51cmwpCisKKyAgICAgICAgY291bnQgPSAwCisKKyAgICAgICAgZm9yIGZpbGUgaW4gcDRmaWxlOgorICAgICAgICAgICAgbGlzdCA9IGZpbGUuc3BsaXQoKQorCisgICAgICAgICAgICBpZiBsaXN0WzJdID09ICJkZWxldGUiOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRlc3QgPSBsaXN0WzBdW2xlbihwYXRoKSsxOl0KKyAgICAgICAgICAgIHdoZXJlID0gZGVzdC5maW5kKCIjIikKKworICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCIlcyVzIHByaW50IC1vICVzLyVzICVzIiAlIChwNGNtZCwgcDRvcHQsIG1vZHVsZSwgZGVzdFs6d2hlcmVdLCBsaXN0WzBdKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxCisKKyAgICAgICAgaWYgY291bnQgPT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigpCisgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJGZXRjaDogTm8gZmlsZXMgZ2F0aGVyZWQgZnJvbSB0aGUgUDQgZmV0Y2giLCB1ZC51cmwpCisKKyAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAtY3pmICVzICVzIiAlICh1ZC5sb2NhbHBhdGgsIG1vZHVsZSksIGQsIGNsZWFudXAgPSBbdWQubG9jYWxwYXRoXSkKKyAgICAgICAgIyBjbGVhbnVwCisgICAgICAgIGJiLnV0aWxzLnBydW5lZGlyKHRtcGZpbGUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9yZXBvLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvcmVwby5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTY3OGViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvcmVwby5weQpAQCAtMCwwICsxLDk4IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICJGZXRjaCIgcmVwbyAoZ2l0KSBpbXBsZW1lbnRhdGlvbgorCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDkgVG9tIFJpbmkgPHRyaW5pQGVtYmVkZGVkYWxsZXkuY29tPgorIworIyBCYXNlZCBvbiBnaXQucHkgd2hpY2ggaXM6CisjQ29weXJpZ2h0IChDKSAyMDA1IFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBiYgorZnJvbSAgIGJiICAgIGltcG9ydCBkYXRhCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgcnVuZmV0Y2hjbWQKKworY2xhc3MgUmVwbyhGZXRjaE1ldGhvZCk6CisgICAgIiIiQ2xhc3MgdG8gZmV0Y2ggYSBtb2R1bGUgb3IgbW9kdWxlcyBmcm9tIHJlcG8gKGdpdCkgcmVwb3NpdG9yaWVzIiIiCisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIGdpdmVuIHVybCBjYW4gYmUgZmV0Y2hlZCB3aXRoIHJlcG8uCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbInJlcG8iXQorCisgICAgZGVmIHVybGRhdGFfaW5pdChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBXZSBkb24idCBjYXJlIGFib3V0IHRoZSBnaXQgcmV2IG9mIHRoZSBtYW5pZmVzdHMgcmVwb3NpdG9yeSwgYnV0CisgICAgICAgIHdlIGRvIGNhcmUgYWJvdXQgdGhlIG1hbmlmZXN0IHRvIHVzZS4gIFRoZSBkZWZhdWx0IGlzICJkZWZhdWx0Ii4KKyAgICAgICAgV2UgYWxzbyBjYXJlIGFib3V0IHRoZSBicmFuY2ggb3IgdGFnIHRvIGJlIHVzZWQuICBUaGUgZGVmYXVsdCBpcworICAgICAgICAibWFzdGVyIi4KKyAgICAgICAgIiIiCisKKyAgICAgICAgdWQucHJvdG8gPSB1ZC5wYXJtLmdldCgncHJvdG9jb2wnLCAnZ2l0JykKKyAgICAgICAgdWQuYnJhbmNoID0gdWQucGFybS5nZXQoJ2JyYW5jaCcsICdtYXN0ZXInKQorICAgICAgICB1ZC5tYW5pZmVzdCA9IHVkLnBhcm0uZ2V0KCdtYW5pZmVzdCcsICdkZWZhdWx0LnhtbCcpCisgICAgICAgIGlmIG5vdCB1ZC5tYW5pZmVzdC5lbmRzd2l0aCgnLnhtbCcpOgorICAgICAgICAgICAgdWQubWFuaWZlc3QgKz0gJy54bWwnCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gZGF0YS5leHBhbmQoInJlcG9fJXMlc18lc18lcy50YXIuZ3oiICUgKHVkLmhvc3QsIHVkLnBhdGgucmVwbGFjZSgiLyIsICIuIiksIHVkLm1hbmlmZXN0LCB1ZC5icmFuY2gpLCBkKQorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiRmV0Y2ggdXJsIiIiCisKKyAgICAgICAgaWYgb3MuYWNjZXNzKG9zLnBhdGguam9pbihkYXRhLmdldFZhcigiRExfRElSIiwgZCwgVHJ1ZSksIHVkLmxvY2FsZmlsZSksIG9zLlJfT0spOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICIlcyBhbHJlYWR5IGV4aXN0cyAob3Igd2FzIHN0YXNoZWQpLiBTa2lwcGluZyByZXBvIGluaXQgLyBzeW5jLiIsIHVkLmxvY2FscGF0aCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGdpdHNyY25hbWUgPSAiJXMlcyIgJSAodWQuaG9zdCwgdWQucGF0aC5yZXBsYWNlKCIvIiwgIi4iKSkKKyAgICAgICAgcmVwb2RpciA9IGRhdGEuZ2V0VmFyKCJSRVBPRElSIiwgZCwgVHJ1ZSkgb3Igb3MucGF0aC5qb2luKGRhdGEuZ2V0VmFyKCJETF9ESVIiLCBkLCBUcnVlKSwgInJlcG8iKQorICAgICAgICBjb2RpciA9IG9zLnBhdGguam9pbihyZXBvZGlyLCBnaXRzcmNuYW1lLCB1ZC5tYW5pZmVzdCkKKworICAgICAgICBpZiB1ZC51c2VyOgorICAgICAgICAgICAgdXNlcm5hbWUgPSB1ZC51c2VyICsgIkAiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1c2VybmFtZSA9ICIiCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbihjb2RpciwgInJlcG8iKSkKKyAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luKGNvZGlyLCAicmVwbyIpKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGNvZGlyLCAicmVwbyIsICIucmVwbyIpKToKKyAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCAicmVwbyBpbml0IC1tICVzIC1iICVzIC11ICVzOi8vJXMlcyVzIiAlICh1ZC5tYW5pZmVzdCwgdWQuYnJhbmNoLCB1ZC5wcm90bywgdXNlcm5hbWUsIHVkLmhvc3QsIHVkLnBhdGgpLCB1ZC51cmwpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgicmVwbyBpbml0IC1tICVzIC1iICVzIC11ICVzOi8vJXMlcyVzIiAlICh1ZC5tYW5pZmVzdCwgdWQuYnJhbmNoLCB1ZC5wcm90bywgdXNlcm5hbWUsIHVkLmhvc3QsIHVkLnBhdGgpLCBkKQorCisgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCAicmVwbyBzeW5jICVzIiAlIHVkLnVybCwgdWQudXJsKQorICAgICAgICBydW5mZXRjaGNtZCgicmVwbyBzeW5jIiwgZCkKKyAgICAgICAgb3MuY2hkaXIoY29kaXIpCisKKyAgICAgICAgc2NtZGF0YSA9IHVkLnBhcm0uZ2V0KCJzY21kYXRhIiwgIiIpCisgICAgICAgIGlmIHNjbWRhdGEgPT0gImtlZXAiOgorICAgICAgICAgICAgdGFyX2ZsYWdzID0gIiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRhcl9mbGFncyA9ICItLWV4Y2x1ZGUgJy5yZXBvJyAtLWV4Y2x1ZGUgJy5naXQnIgorCisgICAgICAgICMgQ3JlYXRlIGEgY2FjaGUKKyAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAlcyAtY3pmICVzICVzIiAlICh0YXJfZmxhZ3MsIHVkLmxvY2FscGF0aCwgb3MucGF0aC5qb2luKCIuIiwgIioiKSApLCBkKQorCisgICAgZGVmIHN1cHBvcnRzX3NyY3JldihzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2J1aWxkX3JldmlzaW9uKHNlbGYsIHVkLCBkKToKKyAgICAgICAgcmV0dXJuIHVkLm1hbmlmZXN0CisKKyAgICBkZWYgX3dhbnRfc29ydGFibGVfcmV2aXNpb24oc2VsZiwgdWQsIGQpOgorICAgICAgICByZXR1cm4gRmFsc2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3NmdHAucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9zZnRwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMmY3NTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9zZnRwLnB5CkBAIC0wLDAgKzEsMTI5IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlIFNGVFAgRmV0Y2ggaW1wbGVtZW50YXRpb24KKworQ2xhc3MgZm9yIGZldGNoaW5nIGZpbGVzIHZpYSBTRlRQLiBJdCB0cmllcyB0byBhZGhlcmUgdG8gdGhlIChub3cKK2V4cGlyZWQpIElFVEYgSW50ZXJuZXQgRHJhZnQgZm9yICJVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkKK1NjaGVtZSBmb3IgU2VjdXJlIEZpbGUgVHJhbnNmZXIgUHJvdG9jb2wgKFNGVFApIGFuZCBTZWN1cmUgU2hlbGwKKyhTU0gpIiAoU0VDU0ggVVJJKS4KKworSXQgdXNlcyBTRlRQIChhcyB0byBhZGhlcmUgdG8gdGhlIFNFQ1NIIFVSSSBzcGVjaWZpY2F0aW9uKS4gSXQgb25seQorc3VwcG9ydHMga2V5IGJhc2VkIGF1dGhlbnRpY2F0aW9uLCBub3QgcGFzc3dvcmQuIFRoaXMgY2xhc3MsIHVubGlrZQordGhlIFNTSCBmZXRjaGVyLCBkb2VzIG5vdCBzdXBwb3J0IGZldGNoaW5nIGEgZGlyZWN0b3J5IHRyZWUgZnJvbSB0aGUKK3JlbW90ZS4KKworICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLXNlY3NoLXNjcC1zZnRwLXNzaC11cmktMDQKKyAgaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdXJpLXNjaGVtZXMvcHJvdi9zZnRwCisgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLXNlY3NoLWZpbGV4ZmVyLTEzCisKK1BsZWFzZSBub3RlIHRoYXQgJy8nIGlzIHVzZWQgYXMgaG9zdCBwYXRoIHNlcGVyYXRvciwgYW5kIG5vdCAiOiIKK2FzIHlvdSBtYXkgYmUgdXNlZCB0byBmcm9tIHRoZSBzY3Avc2Z0cCBjb21tYW5kcy4gWW91IGNhbiB1c2UgYQorfiAodGlsZGUpIHRvIHNwZWNpZnkgYSBwYXRoIHJlbGF0aXZlIHRvIHlvdXIgaG9tZSBkaXJlY3RvcnkuCisoVGhlIC9+dXNlci8gc3ludGF4LCBmb3Igc3BlY3lmaW5nIGEgcGF0aCByZWxhdGl2ZSB0byBhbm90aGVyCit1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgaXMgbm90IHN1cHBvcnRlZC4pIE5vdGUgdGhhdCB0aGUgdGlsZGUgbXVzdAorc3RpbGwgZm9sbG93IHRoZSBob3N0IHBhdGggc2VwZXJhdG9yICgiLyIpLiBTZWUgZXhhbXBlbHMgYmVsb3cuCisKK0V4YW1wbGUgU1JDX1VSSXM6CisKK1NSQ19VUkkgPSAic2Z0cDovL2hvc3QuZXhhbXBsZS5jb20vZGlyL3BhdGguZmlsZS50eHQiCisKK0EgcGF0aCByZWxhdGl2ZSB0byB5b3VyIGhvbWUgZGlyZWN0b3J5LgorCitTUkNfVVJJID0gInNmdHA6Ly9ob3N0LmV4YW1wbGUuY29tL34vZGlyL3BhdGguZmlsZS50eHQiCisKK1lvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgdXNlcm5hbWUgKHNwZWN5ZmluZyBwYXNzd29yZCBpbiB0aGUKK1VSSSBpcyBub3Qgc3VwcG9ydGVkLCB1c2UgU1NIIGtleXMgdG8gYXV0aGVudGljYXRlKToKKworU1JDX1VSSSA9ICJzZnRwOi8vdXNlckBob3N0LmV4YW1wbGUuY29tL2Rpci9wYXRoLmZpbGUudHh0IgorCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMTMsIE9sb2YgSm9oYW5zc29uIDxvbG9mLmpvaGFuc3NvbkBheGlzLmNvbT4KKyMKKyMgQmFzZWQgaW4gcGFydCBvbiBiYi5mZXRjaDIud2dldDoKKyMgICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEJhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZSwgQ29weXJpZ2h0IDIwMDMgSG9sZ2VyIFNjaHVyaWcKKworaW1wb3J0IG9zCitpbXBvcnQgYmIKK2ltcG9ydCB1cmxsaWIKK2ltcG9ydCBjb21tYW5kcworZnJvbSBiYiBpbXBvcnQgZGF0YQorZnJvbSBiYi5mZXRjaDIgaW1wb3J0IFVSSQorZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitmcm9tIGJiLmZldGNoMiBpbXBvcnQgcnVuZmV0Y2hjbWQKKworCitjbGFzcyBTRlRQKEZldGNoTWV0aG9kKToKKyAgICAiIiJDbGFzcyB0byBmZXRjaCB1cmxzIHZpYSAnc2Z0cCciIiIKKworICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgY2FuIGJlIGZldGNoZWQgd2l0aCBzZnRwLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHVkLnR5cGUgaW4gWydzZnRwJ10KKworICAgIGRlZiByZWNvbW1lbmRzX2NoZWNrc3VtKHNlbGYsIHVybGRhdGEpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHVybGRhdGFfaW5pdChzZWxmLCB1ZCwgZCk6CisgICAgICAgIGlmICdwcm90b2NvbCcgaW4gdWQucGFybSBhbmQgdWQucGFybVsncHJvdG9jb2wnXSA9PSAnZ2l0JzoKKyAgICAgICAgICAgIHJhaXNlIGJiLmZldGNoMi5QYXJhbWV0ZXJFcnJvcigKKyAgICAgICAgICAgICAgICAiSW52YWxpZCBwcm90b2NvbCAtIGlmIHlvdSB3aXNoIHRvIGZldGNoIGZyb20gYSAiICsKKyAgICAgICAgICAgICAgICAiZ2l0IHJlcG9zaXRvcnkgdXNpbmcgc3NoLCB5b3UgbmVlZCB0byB1c2UgdGhlICIgKworICAgICAgICAgICAgICAgICJnaXQ6Ly8gcHJlZml4IHdpdGggcHJvdG9jb2w9c3NoIiwgdWQudXJsKQorCisgICAgICAgIGlmICdkb3dubG9hZGZpbGVuYW1lJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgdWQuYmFzZW5hbWUgPSB1ZC5wYXJtWydkb3dubG9hZGZpbGVuYW1lJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVkLmJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZSh1ZC5wYXRoKQorCisgICAgICAgIHVkLmxvY2FsZmlsZSA9IGRhdGEuZXhwYW5kKHVybGxpYi51bnF1b3RlKHVkLmJhc2VuYW1lKSwgZCkKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIkZldGNoIHVybHMiIiIKKworICAgICAgICB1cmxvID0gVVJJKHVkLnVybCkKKyAgICAgICAgYmFzZWNtZCA9ICdzZnRwIC1vQmF0Y2hNb2RlPXllcycKKyAgICAgICAgcG9ydCA9ICcnCisgICAgICAgIGlmIHVybG8ucG9ydDoKKyAgICAgICAgICAgIHBvcnQgPSAnLVAgJWQnICUgdXJsby5wb3J0CisgICAgICAgICAgICB1cmxvLnBvcnQgPSBOb25lCisKKyAgICAgICAgZGxkaXIgPSBkYXRhLmdldFZhcignRExfRElSJywgZCwgVHJ1ZSkKKyAgICAgICAgbHBhdGggPSBvcy5wYXRoLmpvaW4oZGxkaXIsIHVkLmxvY2FsZmlsZSkKKworICAgICAgICB1c2VyID0gJycKKyAgICAgICAgaWYgdXJsby51c2VyaW5mbzoKKyAgICAgICAgICAgIHVzZXIgPSB1cmxvLnVzZXJpbmZvICsgJ0AnCisKKyAgICAgICAgcGF0aCA9IHVybG8ucGF0aAorCisgICAgICAgICMgU3Vwb3BydCBVUklzIHJlbGF0aXZlIHRvIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnksIHdpdGgKKyAgICAgICAgIyB0aGUgdGlsZGUgc3ludGF4LiAoRS5nLiA8c2Z0cDovL2V4YW1wbGUuY29tL34vZm9vLmRpZmY+KS4KKyAgICAgICAgaWYgcGF0aFs6M10gPT0gJy9+Lyc6CisgICAgICAgICAgICBwYXRoID0gcGF0aFszOl0KKworICAgICAgICByZW1vdGUgPSAnJXMlczolcycgJSAodXNlciwgdXJsby5ob3N0bmFtZSwgcGF0aCkKKworICAgICAgICBjbWQgPSAnJXMgJXMgJXMgJXMnICUgKGJhc2VjbWQsIHBvcnQsIGNvbW1hbmRzLm1rYXJnKHJlbW90ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZHMubWthcmcobHBhdGgpKQorCisgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBjbWQsIHVkLnVybCkKKyAgICAgICAgcnVuZmV0Y2hjbWQoY21kLCBkKQorICAgICAgICByZXR1cm4gVHJ1ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvc3NoLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvc3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNTU3OGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9zc2gucHkKQEAgLTAsMCArMSwxMjggQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisnJycKK0JpdEJha2UgJ0ZldGNoJyBpbXBsZW1lbnRhdGlvbnMKKworVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBmb3IgU2VjdXJlIFNoZWxsIChTU0gpLCBhbmQgYXR0ZW1wdHMgdG8gY29tcGx5IHdpdGggdGhlCitJRVRGIHNlY3NoIGludGVybmV0IGRyYWZ0OgorICAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy93Zy9zZWNzaC9kcmFmdC1pZXRmLXNlY3NoLXNjcC1zZnRwLXNzaC11cmkvCisKKyAgICBDdXJyZW50bHkgZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2Z0cCBwYXJhbWV0ZXJzLCBhcyB0aGlzIHVzZXMgc2NwCisgICAgQWxzbyBkb2VzIG5vdCBzdXBwb3J0IHRoZSAnZmluZ2VycHJpbnQnIGNvbm5lY3Rpb24gcGFyYW1ldGVyLgorCisgICAgUGxlYXNlIG5vdGUgdGhhdCAnLycgaXMgdXNlZCBhcyBob3N0LCBwYXRoIHNlcGFyYXRvciBub3QgJzonIGFzIHlvdSBtYXkgCisgICAgYmUgdXNlZCB0bywgYWxzbyAnficgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB1c2VyIEhPTUUsIGJ1dCBhZ2FpbiBhZnRlciAnLycKKyAgICAKKyAgICBFeGFtcGxlIFNSQ19VUkk6CisgICAgU1JDX1VSSSA9ICJzc2g6Ly91c2VyQGhvc3QuZXhhbXBsZS5jb20vZGlyL3BhdGgvZmlsZS50eHQiCisgICAgU1JDX1VSSSA9ICJzc2g6Ly91c2VyQGhvc3QuZXhhbXBsZS5jb20vfi9maWxlLnR4dCIKKycnJworCisjIENvcHlyaWdodCAoQykgMjAwNiAgT3BlbmVkSGFuZCBMdGQuCisjCisjCisjIEJhc2VkIGluIHBhcnQgb24gc3ZrLnB5OgorIyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyMgICAgQmFzZWQgb24gc3ZuLnB5OgorIyAgICAgICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgICAgICAgIEJhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZToKKyMgICAgICAgICAgICBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworIworIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHJlLCBvcworZnJvbSAgIGJiIGltcG9ydCBkYXRhCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hFcnJvcgorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgbG9nZ2VyCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorCisKK19fcGF0dGVybl9fID0gcmUuY29tcGlsZShyJycnCisgXHMqICAgICAgICAgICAgICAgICAjIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlCisgc3NoOi8vICAgICAgICAgICAgICAjIHNjaGVtZQorICggICAgICAgICAgICAgICAgICAgIyBPcHRpb25hbCB1c2VybmFtZS9wYXNzd29yZCBibG9jaworICAoP1A8dXNlcj5cUyspICAgICAgIyB1c2VybmFtZQorICAoOig/UDxwYXNzPlxTKykpPyAgIyBjb2xvbiBmb2xsb3dlZCBieSB0aGUgcGFzc3dvcmQgKG9wdGlvbmFsKQorICk/CisgKD9QPGNwYXJhbT4oO1teO10rKSopPyAgIyBjb25uZWN0aW9uIHBhcmFtZXRlcnMgYmxvY2sgKG9wdGlvbmFsKQorIEAKKyAoP1A8aG9zdD5cUys/KSAgICAgICAgICAjIG5vbi1ncmVlZHkgbWF0Y2ggb2YgdGhlIGhvc3QKKyAoOig/UDxwb3J0PlswLTldKykpPyAgICAjIGNvbG9uIGZvbGxvd2VkIGJ5IHRoZSBwb3J0IChvcHRpb25hbCkKKyAvCisgKD9QPHBhdGg+W147XSspICAgICAgICAgIyBwYXRoIG9uIHRoZSByZW1vdGUgc3lzdGVtLCBtYXkgYmUgYWJzb2x1dGUgb3IgcmVsYXRpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbmQgbWF5IGluY2x1ZGUgdGhlIHVzZSBvZiAnficgdG8gcmVmZXJlbmNlIHRoZSByZW1vdGUgaG9tZQorICAgICAgICAgICAgICAgICAgICAgICAgICMgZGlyZWN0b3J5CisgKD9QPHNwYXJhbT4oO1teO10rKSopPyAgIyBwYXJhbWV0ZXJzIGJsb2NrIChvcHRpb25hbCkKKyAkCisnJycsIHJlLlZFUkJPU0UpCisKK2NsYXNzIFNTSChGZXRjaE1ldGhvZCk6CisgICAgJycnQ2xhc3MgdG8gZmV0Y2ggYSBtb2R1bGUgb3IgbW9kdWxlcyB2aWEgU2VjdXJlIFNoZWxsJycnCisKKyAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgIHJldHVybiBfX3BhdHRlcm5fXy5tYXRjaCh1cmxkYXRhLnVybCkgIT0gTm9uZQorCisgICAgZGVmIHN1cHBvcnRzX2NoZWNrc3VtKHNlbGYsIHVybGRhdGEpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgIGlmICdwcm90b2NvbCcgaW4gdXJsZGF0YS5wYXJtIGFuZCB1cmxkYXRhLnBhcm1bJ3Byb3RvY29sJ10gPT0gJ2dpdCc6CisgICAgICAgICAgICByYWlzZSBiYi5mZXRjaDIuUGFyYW1ldGVyRXJyb3IoCisgICAgICAgICAgICAgICAgIkludmFsaWQgcHJvdG9jb2wgLSBpZiB5b3Ugd2lzaCB0byBmZXRjaCBmcm9tIGEgZ2l0ICIgKworICAgICAgICAgICAgICAgICJyZXBvc2l0b3J5IHVzaW5nIHNzaCwgeW91IG5lZWQgdG8gdXNlICIgKworICAgICAgICAgICAgICAgICJnaXQ6Ly8gcHJlZml4IHdpdGggcHJvdG9jb2w9c3NoIiwgdXJsZGF0YS51cmwpCisgICAgICAgIG0gPSBfX3BhdHRlcm5fXy5tYXRjaCh1cmxkYXRhLnVybCkKKyAgICAgICAgcGF0aCA9IG0uZ3JvdXAoJ3BhdGgnKQorICAgICAgICBob3N0ID0gbS5ncm91cCgnaG9zdCcpCisgICAgICAgIHVybGRhdGEubG9jYWxwYXRoID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdETF9ESVInLCBUcnVlKSwKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGgubm9ybXBhdGgocGF0aCkpKQorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVybGRhdGEsIGQpOgorICAgICAgICBkbGRpciA9IGQuZ2V0VmFyKCdETF9ESVInLCBUcnVlKQorCisgICAgICAgIG0gPSBfX3BhdHRlcm5fXy5tYXRjaCh1cmxkYXRhLnVybCkKKyAgICAgICAgcGF0aCA9IG0uZ3JvdXAoJ3BhdGgnKQorICAgICAgICBob3N0ID0gbS5ncm91cCgnaG9zdCcpCisgICAgICAgIHBvcnQgPSBtLmdyb3VwKCdwb3J0JykKKyAgICAgICAgdXNlciA9IG0uZ3JvdXAoJ3VzZXInKQorICAgICAgICBwYXNzd29yZCA9IG0uZ3JvdXAoJ3Bhc3MnKQorCisgICAgICAgIGlmIHBvcnQ6CisgICAgICAgICAgICBwb3J0YXJnID0gJy1QICVzJyAlIHBvcnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBvcnRhcmcgPSAnJworCisgICAgICAgIGlmIHVzZXI6CisgICAgICAgICAgICBmciA9IHVzZXIKKyAgICAgICAgICAgIGlmIHBhc3N3b3JkOgorICAgICAgICAgICAgICAgIGZyICs9ICc6JXMnICUgcGFzc3dvcmQKKyAgICAgICAgICAgIGZyICs9ICdAJXMnICUgaG9zdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnIgPSBob3N0CisgICAgICAgIGZyICs9ICc6JXMnICUgcGF0aAorCisKKyAgICAgICAgaW1wb3J0IGNvbW1hbmRzCisgICAgICAgIGNtZCA9ICdzY3AgLUIgLXIgJXMgJXMgJXMvJyAlICgKKyAgICAgICAgICAgIHBvcnRhcmcsCisgICAgICAgICAgICBjb21tYW5kcy5ta2FyZyhmciksCisgICAgICAgICAgICBjb21tYW5kcy5ta2FyZyhkbGRpcikKKyAgICAgICAgKQorCisgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBjbWQsIHVybGRhdGEudXJsKQorCisgICAgICAgIHJ1bmZldGNoY21kKGNtZCwgZCkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvc3ZuLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvc3ZuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MzNjMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9zdm4ucHkKQEAgLTAsMCArMSwxOTIgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgJ0ZldGNoJyBpbXBsZW1lbnRhdGlvbiBmb3Igc3ZuLgorCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDQgICAgICAgIE1hcmNpbiBKdXN6a2lld2ljegorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYmIKK2ltcG9ydCByZQorZnJvbSAgIGJiIGltcG9ydCBkYXRhCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hFcnJvcgorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgTWlzc2luZ1BhcmFtZXRlckVycm9yCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgbG9nZ2VyCisKK2NsYXNzIFN2bihGZXRjaE1ldGhvZCk6CisgICAgIiIiQ2xhc3MgdG8gZmV0Y2ggYSBtb2R1bGUgb3IgbW9kdWxlcyBmcm9tIHN2biByZXBvc2l0b3JpZXMiIiIKKyAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdG8gc2VlIGlmIGEgZ2l2ZW4gdXJsIGNhbiBiZSBmZXRjaGVkIHdpdGggc3ZuLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHVkLnR5cGUgaW4gWydzdm4nXQorCisgICAgZGVmIHVybGRhdGFfaW5pdChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBpbml0IHN2biBzcGVjaWZpYyB2YXJpYWJsZSB3aXRoaW4gdXJsIGRhdGEKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCAibW9kdWxlIiBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgcmFpc2UgTWlzc2luZ1BhcmFtZXRlckVycm9yKCdtb2R1bGUnLCB1ZC51cmwpCisKKyAgICAgICAgdWQuYmFzZWNtZCA9IGQuZ2V0VmFyKCdGRVRDSENNRF9zdm4nLCBUcnVlKQorCisgICAgICAgIHVkLm1vZHVsZSA9IHVkLnBhcm1bIm1vZHVsZSJdCisKKyAgICAgICAgIyBDcmVhdGUgcGF0aHMgdG8gc3ZuIGNoZWNrb3V0cworICAgICAgICByZWxwYXRoID0gc2VsZi5fc3RyaXBfbGVhZGluZ19zbGFzaGVzKHVkLnBhdGgpCisgICAgICAgIHVkLnBrZ2RpciA9IG9zLnBhdGguam9pbihkYXRhLmV4cGFuZCgnJHtTVk5ESVJ9JywgZCksIHVkLmhvc3QsIHJlbHBhdGgpCisgICAgICAgIHVkLm1vZGRpciA9IG9zLnBhdGguam9pbih1ZC5wa2dkaXIsIHVkLm1vZHVsZSkKKworICAgICAgICB1ZC5zZXR1cF9yZXZpc29ucyhkKQorCisgICAgICAgIGlmICdyZXYnIGluIHVkLnBhcm06CisgICAgICAgICAgICB1ZC5yZXZpc2lvbiA9IHVkLnBhcm1bJ3JldiddCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gZGF0YS5leHBhbmQoJyVzXyVzXyVzXyVzXy50YXIuZ3onICUgKHVkLm1vZHVsZS5yZXBsYWNlKCcvJywgJy4nKSwgdWQuaG9zdCwgdWQucGF0aC5yZXBsYWNlKCcvJywgJy4nKSwgdWQucmV2aXNpb24pLCBkKQorCisgICAgZGVmIF9idWlsZHN2bmNvbW1hbmQoc2VsZiwgdWQsIGQsIGNvbW1hbmQpOgorICAgICAgICAiIiIKKyAgICAgICAgQnVpbGQgdXAgYW4gc3ZuIGNvbW1hbmRsaW5lIGJhc2VkIG9uIHVkCisgICAgICAgIGNvbW1hbmQgaXMgImZldGNoIiwgInVwZGF0ZSIsICJpbmZvIgorICAgICAgICAiIiIKKworICAgICAgICBwcm90byA9IHVkLnBhcm0uZ2V0KCdwcm90b2NvbCcsICdzdm4nKQorCisgICAgICAgIHN2bl9yc2ggPSBOb25lCisgICAgICAgIGlmIHByb3RvID09ICJzdm4rc3NoIiBhbmQgInJzaCIgaW4gdWQucGFybToKKyAgICAgICAgICAgIHN2bl9yc2ggPSB1ZC5wYXJtWyJyc2giXQorCisgICAgICAgIHN2bnJvb3QgPSB1ZC5ob3N0ICsgdWQucGF0aAorCisgICAgICAgIG9wdGlvbnMgPSBbXQorCisgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItLW5vLWF1dGgtY2FjaGUiKQorCisgICAgICAgIGlmIHVkLnVzZXI6CisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgiLS11c2VybmFtZSAlcyIgJSB1ZC51c2VyKQorCisgICAgICAgIGlmIHVkLnBzd2Q6CisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgiLS1wYXNzd29yZCAlcyIgJSB1ZC5wc3dkKQorCisgICAgICAgIGlmIGNvbW1hbmQgPT0gImluZm8iOgorICAgICAgICAgICAgc3ZuY21kID0gIiVzIGluZm8gJXMgJXM6Ly8lcy8lcy8iICUgKHVkLmJhc2VjbWQsICIgIi5qb2luKG9wdGlvbnMpLCBwcm90bywgc3Zucm9vdCwgdWQubW9kdWxlKQorICAgICAgICBlbGlmIGNvbW1hbmQgPT0gImxvZzEiOgorICAgICAgICAgICAgc3ZuY21kID0gIiVzIGxvZyAtLWxpbWl0IDEgJXMgJXM6Ly8lcy8lcy8iICUgKHVkLmJhc2VjbWQsICIgIi5qb2luKG9wdGlvbnMpLCBwcm90bywgc3Zucm9vdCwgdWQubW9kdWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3VmZml4ID0gIiIKKyAgICAgICAgICAgIGlmIHVkLnJldmlzaW9uOgorICAgICAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItciAlcyIgJSB1ZC5yZXZpc2lvbikKKyAgICAgICAgICAgICAgICBzdWZmaXggPSAiQCVzIiAlICh1ZC5yZXZpc2lvbikKKworICAgICAgICAgICAgaWYgY29tbWFuZCA9PSAiZmV0Y2giOgorICAgICAgICAgICAgICAgIHRyYW5zcG9ydHVzZXIgPSB1ZC5wYXJtLmdldCgidHJhbnNwb3J0dXNlciIsICIiKQorICAgICAgICAgICAgICAgIHN2bmNtZCA9ICIlcyBjbyAlcyAlczovLyVzJXMvJXMlcyAlcyIgJSAodWQuYmFzZWNtZCwgIiAiLmpvaW4ob3B0aW9ucyksIHByb3RvLCB0cmFuc3BvcnR1c2VyLCBzdm5yb290LCB1ZC5tb2R1bGUsIHN1ZmZpeCwgdWQubW9kdWxlKQorICAgICAgICAgICAgZWxpZiBjb21tYW5kID09ICJ1cGRhdGUiOgorICAgICAgICAgICAgICAgIHN2bmNtZCA9ICIlcyB1cGRhdGUgJXMiICUgKHVkLmJhc2VjbWQsICIgIi5qb2luKG9wdGlvbnMpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJJbnZhbGlkIHN2biBjb21tYW5kICVzIiAlIGNvbW1hbmQsIHVkLnVybCkKKworICAgICAgICBpZiBzdm5fcnNoOgorICAgICAgICAgICAgc3ZuY21kID0gInN2bl9SU0g9XCIlc1wiICVzIiAlIChzdm5fcnNoLCBzdm5jbWQpCisKKyAgICAgICAgcmV0dXJuIHN2bmNtZAorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiRmV0Y2ggdXJsIiIiCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJGZXRjaDogY2hlY2tpbmcgZm9yIG1vZHVsZSBkaXJlY3RvcnkgJyIgKyB1ZC5tb2RkaXIgKyAiJyIpCisKKyAgICAgICAgaWYgb3MuYWNjZXNzKG9zLnBhdGguam9pbih1ZC5tb2RkaXIsICcuc3ZuJyksIG9zLlJfT0spOgorICAgICAgICAgICAgc3ZudXBkYXRlY21kID0gc2VsZi5fYnVpbGRzdm5jb21tYW5kKHVkLCBkLCAidXBkYXRlIikKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJVcGRhdGUgIiArIHVkLnVybCkKKyAgICAgICAgICAgICMgdXBkYXRlIHNvdXJjZXMgdGhlcmUKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLm1vZGRpcikKKyAgICAgICAgICAgICMgV2UgbmVlZCB0byBhdHRlbXB0IHRvIHJ1biBzdm4gdXBncmFkZSBmaXJzdCBpbiBjYXNlIGl0cyBhbiBvbGRlciB3b3JraW5nIGZvcm1hdAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKHVkLmJhc2VjbWQgKyAiIHVwZ3JhZGUiLCBkKQorICAgICAgICAgICAgZXhjZXB0IEZldGNoRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgc3ZudXBkYXRlY21kKQorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIHN2bnVwZGF0ZWNtZCwgdWQudXJsKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoc3ZudXBkYXRlY21kLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3ZuZmV0Y2hjbWQgPSBzZWxmLl9idWlsZHN2bmNvbW1hbmQodWQsIGQsICJmZXRjaCIpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiRmV0Y2ggIiArIHVkLnVybCkKKyAgICAgICAgICAgICMgY2hlY2sgb3V0IHNvdXJjZXMgdGhlcmUKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBvcy5jaGRpcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBzdm5mZXRjaGNtZCkKKyAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBzdm5mZXRjaGNtZCwgdWQudXJsKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoc3ZuZmV0Y2hjbWQsIGQpCisKKyAgICAgICAgc2NtZGF0YSA9IHVkLnBhcm0uZ2V0KCJzY21kYXRhIiwgIiIpCisgICAgICAgIGlmIHNjbWRhdGEgPT0gImtlZXAiOgorICAgICAgICAgICAgdGFyX2ZsYWdzID0gIiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRhcl9mbGFncyA9ICItLWV4Y2x1ZGUgJy5zdm4nIgorCisgICAgICAgIG9zLmNoZGlyKHVkLnBrZ2RpcikKKyAgICAgICAgIyB0YXIgdGhlbSB1cCB0byBhIGRlZmluZWQgZmlsZW5hbWUKKyAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAlcyAtY3pmICVzICVzIiAlICh0YXJfZmxhZ3MsIHVkLmxvY2FscGF0aCwgdWQubW9kdWxlKSwgZCwgY2xlYW51cCA9IFt1ZC5sb2NhbHBhdGhdKQorCisgICAgZGVmIGNsZWFuKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiIENsZWFuIFNWTiBzcGVjaWZpYyBmaWxlcyBhbmQgZGlycyAiIiIKKworICAgICAgICBiYi51dGlscy5yZW1vdmUodWQubG9jYWxwYXRoKQorICAgICAgICBiYi51dGlscy5yZW1vdmUodWQubW9kZGlyLCBUcnVlKQorICAgICAgICAKKworICAgIGRlZiBzdXBwb3J0c19zcmNyZXYoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX3JldmlzaW9uX2tleShzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSB1bmlxdWUga2V5IGZvciB0aGUgdXJsCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gInN2bjoiICsgdWQubW9kZGlyCisKKyAgICBkZWYgX2xhdGVzdF9yZXZpc2lvbihzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIGxhdGVzdCB1cHN0cmVhbSByZXZpc2lvbiBudW1iZXIKKyAgICAgICAgIiIiCisgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBzZWxmLl9idWlsZHN2bmNvbW1hbmQodWQsIGQsICJsb2cxIikpCisKKyAgICAgICAgb3V0cHV0ID0gcnVuZmV0Y2hjbWQoIkxBTkc9QyBMQ19BTEw9QyAiICsgc2VsZi5fYnVpbGRzdm5jb21tYW5kKHVkLCBkLCAibG9nMSIpLCBkLCBUcnVlKQorCisgICAgICAgICMgc2tpcCB0aGUgZmlyc3QgbGluZSwgYXMgcGVyIG91dHB1dCBvZiBzdm4gbG9nCisgICAgICAgICMgdGhlbiB3ZSBleHBlY3QgdGhlIHJldmlzaW9uIG9uIHRoZSAybmQgbGluZQorICAgICAgICByZXZpc2lvbiA9IHJlLnNlYXJjaCgnXnIoWzAtOV0qKScsIG91dHB1dC5zcGxpdGxpbmVzKClbMV0pLmdyb3VwKDEpCisKKyAgICAgICAgcmV0dXJuIHJldmlzaW9uCisKKyAgICBkZWYgc29ydGFibGVfcmV2aXNpb24oc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgc29ydGFibGUgcmV2aXNpb24gbnVtYmVyIHdoaWNoIGluIG91ciBjYXNlIGlzIHRoZSByZXZpc2lvbiBudW1iZXIKKyAgICAgICAgIiIiCisKKyAgICAgICAgcmV0dXJuIEZhbHNlLCBzZWxmLl9idWlsZF9yZXZpc2lvbih1ZCwgZCkKKworICAgIGRlZiBfYnVpbGRfcmV2aXNpb24oc2VsZiwgdWQsIGQpOgorICAgICAgICByZXR1cm4gdWQucmV2aXNpb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3dnZXQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi93Z2V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMmE4OTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi93Z2V0LnB5CkBAIC0wLDAgKzEsNTQxIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdGZXRjaCcgaW1wbGVtZW50YXRpb25zCisKK0NsYXNzZXMgZm9yIG9idGFpbmluZyB1cHN0cmVhbSBzb3VyY2VzIGZvciB0aGUKK0JpdEJha2UgYnVpbGQgdG9vbHMuCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBCYXNlZCBvbiBmdW5jdGlvbnMgZnJvbSB0aGUgYmFzZSBiYiBtb2R1bGUsIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCisKK2ltcG9ydCByZQoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiCitpbXBvcnQgdXJsbGliCitmcm9tICAgYmIgaW1wb3J0IGRhdGEKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaEVycm9yCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBsb2dnZXIKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IHJ1bmZldGNoY21kCitmcm9tICAgYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwCisKK2NsYXNzIFdnZXQoRmV0Y2hNZXRob2QpOgorICAgICIiIkNsYXNzIHRvIGZldGNoIHVybHMgdmlhICd3Z2V0JyIiIgorICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgY2FuIGJlIGZldGNoZWQgd2l0aCB3Z2V0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHVkLnR5cGUgaW4gWydodHRwJywgJ2h0dHBzJywgJ2Z0cCddCisKKyAgICBkZWYgcmVjb21tZW5kc19jaGVja3N1bShzZWxmLCB1cmxkYXRhKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICBpZiAncHJvdG9jb2wnIGluIHVkLnBhcm06CisgICAgICAgICAgICBpZiB1ZC5wYXJtWydwcm90b2NvbCddID09ICdnaXQnOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmZldGNoMi5QYXJhbWV0ZXJFcnJvcigiSW52YWxpZCBwcm90b2NvbCAtIGlmIHlvdSB3aXNoIHRvIGZldGNoIGZyb20gYSBnaXQgcmVwb3NpdG9yeSB1c2luZyBodHRwLCB5b3UgbmVlZCB0byBpbnN0ZWFkIHVzZSB0aGUgZ2l0Oi8vIHByZWZpeCB3aXRoIHByb3RvY29sPWh0dHAiLCB1ZC51cmwpCisKKyAgICAgICAgaWYgJ2Rvd25sb2FkZmlsZW5hbWUnIGluIHVkLnBhcm06CisgICAgICAgICAgICB1ZC5iYXNlbmFtZSA9IHVkLnBhcm1bJ2Rvd25sb2FkZmlsZW5hbWUnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdWQuYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHVkLnBhdGgpCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gZGF0YS5leHBhbmQodXJsbGliLnVucXVvdGUodWQuYmFzZW5hbWUpLCBkKQorCisgICAgICAgIHNlbGYuYmFzZWNtZCA9IGQuZ2V0VmFyKCJGRVRDSENNRF93Z2V0IiwgVHJ1ZSkgb3IgIi91c3IvYmluL2VudiB3Z2V0IC10IDIgLVQgMzAgLW52IC0tcGFzc2l2ZS1mdHAgLS1uby1jaGVjay1jZXJ0aWZpY2F0ZSIKKworICAgIGRlZiBfcnVud2dldChzZWxmLCB1ZCwgZCwgY29tbWFuZCwgcXVpZXQpOgorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiRmV0Y2hpbmcgJXMgdXNpbmcgY29tbWFuZCAnJXMnIiAlICh1ZC51cmwsIGNvbW1hbmQpKQorICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgY29tbWFuZCkKKyAgICAgICAgcnVuZmV0Y2hjbWQoY29tbWFuZCwgZCwgcXVpZXQpCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiJGZXRjaCB1cmxzIiIiCisKKyAgICAgICAgZmV0Y2hjbWQgPSBzZWxmLmJhc2VjbWQKKworICAgICAgICBpZiAnZG93bmxvYWRmaWxlbmFtZScgaW4gdWQucGFybToKKyAgICAgICAgICAgIGRsZGlyID0gZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGRsZGlyICsgb3Muc2VwICsgdWQubG9jYWxmaWxlKSkKKyAgICAgICAgICAgIGZldGNoY21kICs9ICIgLU8gIiArIGRsZGlyICsgb3Muc2VwICsgdWQubG9jYWxmaWxlCisKKyAgICAgICAgdXJpID0gdWQudXJsLnNwbGl0KCI7IilbMF0KKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHModWQubG9jYWxwYXRoKToKKyAgICAgICAgICAgICMgZmlsZSBleGlzdHMsIGJ1dCB3ZSBkaWRudCBjb21wbGV0ZSBpdC4uIHRyeWluZyBhZ2Fpbi4uCisgICAgICAgICAgICBmZXRjaGNtZCArPSBkLmV4cGFuZCgiIC1jIC1QICR7RExfRElSfSAnJXMnIiAlIHVyaSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZldGNoY21kICs9IGQuZXhwYW5kKCIgLVAgJHtETF9ESVJ9ICclcyciICUgdXJpKQorCisgICAgICAgIHNlbGYuX3J1bndnZXQodWQsIGQsIGZldGNoY21kLCBGYWxzZSkKKworICAgICAgICAjIFNhbml0eSBjaGVjayBzaW5jZSB3Z2V0IGNhbiBwcmV0ZW5kIGl0IHN1Y2NlZWQgd2hlbiBpdCBkaWRuJ3QKKyAgICAgICAgIyBBbHNvLCB0aGlzIHVzZWQgdG8gaGFwcGVuIGlmIHNvdXJjZWZvcmdlIHNlbnQgdXMgdG8gdGhlIG1pcnJvciBwYWdlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiVGhlIGZldGNoIGNvbW1hbmQgcmV0dXJuZWQgc3VjY2VzcyBmb3IgdXJsICVzIGJ1dCAlcyBkb2Vzbid0IGV4aXN0PyEiICUgKHVyaSwgdWQubG9jYWxwYXRoKSwgdXJpKQorCisgICAgICAgIGlmIG9zLnBhdGguZ2V0c2l6ZSh1ZC5sb2NhbHBhdGgpID09IDA6CisgICAgICAgICAgICBvcy5yZW1vdmUodWQubG9jYWxwYXRoKQorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiVGhlIGZldGNoIG9mICVzIHJlc3VsdGVkIGluIGEgemVybyBzaXplIGZpbGU/ISBEZWxldGluZyBhbmQgZmFpbGluZyBzaW5jZSB0aGlzIGlzbid0IHJpZ2h0LiIgJSAodXJpKSwgdXJpKQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgY2hlY2tzdGF0dXMoc2VsZiwgZmV0Y2gsIHVkLCBkKToKKyAgICAgICAgaW1wb3J0IHVybGxpYjIsIHNvY2tldCwgaHR0cGxpYgorICAgICAgICBmcm9tIHVybGxpYiBpbXBvcnQgYWRkaW5mb3VybAorICAgICAgICBmcm9tIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hDb25uZWN0aW9uQ2FjaGUKKworICAgICAgICBjbGFzcyBIVFRQQ29ubmVjdGlvbkNhY2hlKGh0dHBsaWIuSFRUUENvbm5lY3Rpb24pOgorICAgICAgICAgICAgaWYgZmV0Y2guY29ubmVjdGlvbl9jYWNoZToKKyAgICAgICAgICAgICAgICBkZWYgY29ubmVjdChzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgIiIiQ29ubmVjdCB0byB0aGUgaG9zdCBhbmQgcG9ydCBzcGVjaWZpZWQgaW4gX19pbml0X18uIiIiCisKKyAgICAgICAgICAgICAgICAgICAgc29jayA9IGZldGNoLmNvbm5lY3Rpb25fY2FjaGUuZ2V0X2Nvbm5lY3Rpb24oc2VsZi5ob3N0LCBzZWxmLnBvcnQpCisgICAgICAgICAgICAgICAgICAgIGlmIHNvY2s6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGltZW91dCwgc2VsZi5zb3VyY2VfYWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoLmNvbm5lY3Rpb25fY2FjaGUuYWRkX2Nvbm5lY3Rpb24oc2VsZi5ob3N0LCBzZWxmLnBvcnQsIHNlbGYuc29jaykKKworICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl90dW5uZWxfaG9zdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3R1bm5lbCgpCisKKyAgICAgICAgY2xhc3MgQ2FjaGVIVFRQSGFuZGxlcih1cmxsaWIyLkhUVFBIYW5kbGVyKToKKyAgICAgICAgICAgIGRlZiBodHRwX29wZW4oc2VsZiwgcmVxKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5kb19vcGVuKEhUVFBDb25uZWN0aW9uQ2FjaGUsIHJlcSkKKworICAgICAgICAgICAgZGVmIGRvX29wZW4oc2VsZiwgaHR0cF9jbGFzcywgcmVxKToKKyAgICAgICAgICAgICAgICAiIiJSZXR1cm4gYW4gYWRkaW5mb3VybCBvYmplY3QgZm9yIHRoZSByZXF1ZXN0LCB1c2luZyBodHRwX2NsYXNzLgorCisgICAgICAgICAgICAgICAgaHR0cF9jbGFzcyBtdXN0IGltcGxlbWVudCB0aGUgSFRUUENvbm5lY3Rpb24gQVBJIGZyb20gaHR0cGxpYi4KKyAgICAgICAgICAgICAgICBUaGUgYWRkaW5mb3VybCByZXR1cm4gdmFsdWUgaXMgYSBmaWxlLWxpa2Ugb2JqZWN0LiAgSXQgYWxzbworICAgICAgICAgICAgICAgIGhhcyBtZXRob2RzIGFuZCBhdHRyaWJ1dGVzIGluY2x1ZGluZzoKKyAgICAgICAgICAgICAgICAgICAgLSBpbmZvKCk6IHJldHVybiBhIG1pbWV0b29scy5NZXNzYWdlIG9iamVjdCBmb3IgdGhlIGhlYWRlcnMKKyAgICAgICAgICAgICAgICAgICAgLSBnZXR1cmwoKTogcmV0dXJuIHRoZSBvcmlnaW5hbCByZXF1ZXN0IFVSTAorICAgICAgICAgICAgICAgICAgICAtIGNvZGU6IEhUVFAgc3RhdHVzIGNvZGUKKyAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgICAgICBob3N0ID0gcmVxLmdldF9ob3N0KCkKKyAgICAgICAgICAgICAgICBpZiBub3QgaG9zdDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgdXJsbGxpYjIuVVJMRXJyb3IoJ25vIGhvc3QgZ2l2ZW4nKQorCisgICAgICAgICAgICAgICAgaCA9IGh0dHBfY2xhc3MoaG9zdCwgdGltZW91dD1yZXEudGltZW91dCkgIyB3aWxsIHBhcnNlIGhvc3Q6cG9ydAorICAgICAgICAgICAgICAgIGguc2V0X2RlYnVnbGV2ZWwoc2VsZi5fZGVidWdsZXZlbCkKKworICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBkaWN0KHJlcS51bnJlZGlyZWN0ZWRfaGRycykKKyAgICAgICAgICAgICAgICBoZWFkZXJzLnVwZGF0ZShkaWN0KChrLCB2KSBmb3IgaywgdiBpbiByZXEuaGVhZGVycy5pdGVtcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgayBub3QgaW4gaGVhZGVycykpCisKKyAgICAgICAgICAgICAgICAjIFdlIHdhbnQgdG8gbWFrZSBhbiBIVFRQLzEuMSByZXF1ZXN0LCBidXQgdGhlIGFkZGluZm91cmwKKyAgICAgICAgICAgICAgICAjIGNsYXNzIGlzbid0IHByZXBhcmVkIHRvIGRlYWwgd2l0aCBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbi4KKyAgICAgICAgICAgICAgICAjIEl0IHdpbGwgdHJ5IHRvIHJlYWQgYWxsIHJlbWFpbmluZyBkYXRhIGZyb20gdGhlIHNvY2tldCwKKyAgICAgICAgICAgICAgICAjIHdoaWNoIHdpbGwgYmxvY2sgd2hpbGUgdGhlIHNlcnZlciB3YWl0cyBmb3IgdGhlIG5leHQgcmVxdWVzdC4KKyAgICAgICAgICAgICAgICAjIFNvIG1ha2Ugc3VyZSB0aGUgY29ubmVjdGlvbiBnZXRzIGNsb3NlZCBhZnRlciB0aGUgKG9ubHkpCisgICAgICAgICAgICAgICAgIyByZXF1ZXN0LgorCisgICAgICAgICAgICAgICAgIyBEb24ndCBjbG9zZSBjb25uZWN0aW9uIHdoZW4gY29ubmVjdGlvbl9jYWNoZSBpcyBlbmFibGVkLAorICAgICAgICAgICAgICAgIGlmIGZldGNoLmNvbm5lY3Rpb25fY2FjaGUgaXMgTm9uZTogCisgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbIkNvbm5lY3Rpb24iXSA9ICJjbG9zZSIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBoZWFkZXJzWyJDb25uZWN0aW9uIl0gPSAiS2VlcC1BbGl2ZSIgIyBXb3JrcyBmb3IgSFRUUC8xLjAKKworICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBkaWN0KAorICAgICAgICAgICAgICAgICAgICAobmFtZS50aXRsZSgpLCB2YWwpIGZvciBuYW1lLCB2YWwgaW4gaGVhZGVycy5pdGVtcygpKQorCisgICAgICAgICAgICAgICAgaWYgcmVxLl90dW5uZWxfaG9zdDoKKyAgICAgICAgICAgICAgICAgICAgdHVubmVsX2hlYWRlcnMgPSB7fQorICAgICAgICAgICAgICAgICAgICBwcm94eV9hdXRoX2hkciA9ICJQcm94eS1BdXRob3JpemF0aW9uIgorICAgICAgICAgICAgICAgICAgICBpZiBwcm94eV9hdXRoX2hkciBpbiBoZWFkZXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgdHVubmVsX2hlYWRlcnNbcHJveHlfYXV0aF9oZHJdID0gaGVhZGVyc1twcm94eV9hdXRoX2hkcl0KKyAgICAgICAgICAgICAgICAgICAgICAgICMgUHJveHktQXV0aG9yaXphdGlvbiBzaG91bGQgbm90IGJlIHNlbnQgdG8gb3JpZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAjIHNlcnZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBoZWFkZXJzW3Byb3h5X2F1dGhfaGRyXQorICAgICAgICAgICAgICAgICAgICBoLnNldF90dW5uZWwocmVxLl90dW5uZWxfaG9zdCwgaGVhZGVycz10dW5uZWxfaGVhZGVycykKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaC5yZXF1ZXN0KHJlcS5nZXRfbWV0aG9kKCksIHJlcS5nZXRfc2VsZWN0b3IoKSwgcmVxLmRhdGEsIGhlYWRlcnMpCisgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZXJyOiAjIFhYWCB3aGF0IGVycm9yPworICAgICAgICAgICAgICAgICAgICAjIERvbid0IGNsb3NlIGNvbm5lY3Rpb24gd2hlbiBjYWNoZSBpcyBlbmFibGVkLgorICAgICAgICAgICAgICAgICAgICBpZiBmZXRjaC5jb25uZWN0aW9uX2NhY2hlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBoLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgdXJsbGliMi5VUkxFcnJvcihlcnIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgciA9IGguZ2V0cmVzcG9uc2UoYnVmZmVyaW5nPVRydWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6ICMgYnVmZmVyaW5nIGt3IG5vdCBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBoLmdldHJlc3BvbnNlKCkKKworICAgICAgICAgICAgICAgICMgUGljayBhcGFydCB0aGUgSFRUUFJlc3BvbnNlIG9iamVjdCB0byBnZXQgdGhlIGFkZGluZm91cmwKKyAgICAgICAgICAgICAgICAjIG9iamVjdCBpbml0aWFsaXplZCBwcm9wZXJseS4KKworICAgICAgICAgICAgICAgICMgV3JhcCB0aGUgSFRUUFJlc3BvbnNlIG9iamVjdCBpbiBzb2NrZXQncyBmaWxlIG9iamVjdCBhZGFwdGVyCisgICAgICAgICAgICAgICAgIyBmb3IgV2luZG93cy4gIFRoYXQgYWRhcHRlciBjYWxscyByZWN2KCksIHNvIGRlbGVnYXRlIHJlY3YoKQorICAgICAgICAgICAgICAgICMgdG8gcmVhZCgpLiAgVGhpcyB3ZWlyZCB3cmFwcGluZyBhbGxvd3MgdGhlIHJldHVybmVkIG9iamVjdCB0bworICAgICAgICAgICAgICAgICMgaGF2ZSByZWFkbGluZSgpIGFuZCByZWFkbGluZXMoKSBtZXRob2RzLgorCisgICAgICAgICAgICAgICAgIyBYWFggSXQgbWlnaHQgYmUgYmV0dGVyIHRvIGV4dHJhY3QgdGhlIHJlYWQgYnVmZmVyaW5nIGNvZGUKKyAgICAgICAgICAgICAgICAjIG91dCBvZiBzb2NrZXQuX2ZpbGVvYmplY3QoKSBhbmQgaW50byBhIGJhc2UgY2xhc3MuCisgICAgICAgICAgICAgICAgci5yZWN2ID0gci5yZWFkCisKKyAgICAgICAgICAgICAgICAjIG5vIGRhdGEsIGp1c3QgaGF2ZSB0byByZWFkCisgICAgICAgICAgICAgICAgci5yZWFkKCkKKyAgICAgICAgICAgICAgICBjbGFzcyBmcF9kdW1teShvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICBkZWYgcmVhZChzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICAgICAgICAgICAgICBkZWYgcmVhZGxpbmUoc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgcmVzcCA9IGFkZGluZm91cmwoZnBfZHVtbXkoKSwgci5tc2csIHJlcS5nZXRfZnVsbF91cmwoKSkKKyAgICAgICAgICAgICAgICByZXNwLmNvZGUgPSByLnN0YXR1cworICAgICAgICAgICAgICAgIHJlc3AubXNnID0gci5yZWFzb24KKworICAgICAgICAgICAgICAgICMgQ2xvc2UgY29ubmVjdGlvbiB3aGVuIHNlcnZlciByZXF1ZXN0IGl0LgorICAgICAgICAgICAgICAgIGlmIGZldGNoLmNvbm5lY3Rpb25fY2FjaGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmICdDb25uZWN0aW9uJyBpbiByLm1zZyBhbmQgci5tc2dbJ0Nvbm5lY3Rpb24nXSA9PSAnY2xvc2UnOgorICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2guY29ubmVjdGlvbl9jYWNoZS5yZW1vdmVfY29ubmVjdGlvbihoLmhvc3QsIGgucG9ydCkKKworICAgICAgICAgICAgICAgIHJldHVybiByZXNwCisKKyAgICAgICAgZGVmIGV4cG9ydF9wcm94aWVzKGQpOgorICAgICAgICAgICAgdmFyaWFibGVzID0gWydodHRwX3Byb3h5JywgJ0hUVFBfUFJPWFknLCAnaHR0cHNfcHJveHknLCAnSFRUUFNfUFJPWFknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmdHBfcHJveHknLCAnRlRQX1BST1hZJywgJ25vX3Byb3h5JywgJ05PX1BST1hZJ10KKyAgICAgICAgICAgIGV4cG9ydGVkID0gRmFsc2UKKworICAgICAgICAgICAgZm9yIHYgaW4gdmFyaWFibGVzOgorICAgICAgICAgICAgICAgIGlmIHYgaW4gb3MuZW52aXJvbi5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHZfcHJveHkgPSBkLmdldFZhcih2LCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBpZiB2X3Byb3h5IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgb3MuZW52aXJvblt2XSA9IHZfcHJveHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkID0gVHJ1ZQorCisgICAgICAgICAgICByZXR1cm4gZXhwb3J0ZWQKKworICAgICAgICBkZWYgaGVhZF9tZXRob2Qoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gIkhFQUQiCisKKyAgICAgICAgZXhwb3J0ZWRfcHJveGllcyA9IGV4cG9ydF9wcm94aWVzKGQpCisKKyAgICAgICAgIyBYWFg6IFNpbmNlIFB5dGhvbiAyLjcuOSBzc2wgY2VydCB2YWxpZGF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdAorICAgICAgICAjIHNlZSBQRVAtMDQ3NiwgdGhpcyBjYXVzZXMgdmVyaWZpY2F0aW9uIGVycm9ycyBvbiBzb21lIGh0dHBzIHNlcnZlcnMKKyAgICAgICAgIyBzbyBkaXNhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgIGltcG9ydCBzc2wKKyAgICAgICAgc3NsX2NvbnRleHQgPSBOb25lCisgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnX2NyZWF0ZV91bnZlcmlmaWVkX2NvbnRleHQnKToKKyAgICAgICAgICAgIHNzbF9jb250ZXh0ID0gc3NsLl9jcmVhdGVfdW52ZXJpZmllZF9jb250ZXh0KCkKKworICAgICAgICBpZiBleHBvcnRlZF9wcm94aWVzID09IFRydWUgYW5kIHNzbF9jb250ZXh0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIodXJsbGliMi5Qcm94eUhhbmRsZXIsIENhY2hlSFRUUEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgIHVybGxpYjIuSFRUUFNIYW5kbGVyKGNvbnRleHQ9c3NsX2NvbnRleHQpKQorICAgICAgICBlbGlmIGV4cG9ydGVkX3Byb3hpZXMgPT0gRmFsc2UgYW5kIHNzbF9jb250ZXh0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIoQ2FjaGVIVFRQSGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgdXJsbGliMi5IVFRQU0hhbmRsZXIoY29udGV4dD1zc2xfY29udGV4dCkpCisgICAgICAgIGVsaWYgZXhwb3J0ZWRfcHJveGllcyA9PSBUcnVlIGFuZCBzc2xfY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgb3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIodXJsbGliMi5Qcm94eUhhbmRsZXIsIENhY2hlSFRUUEhhbmRsZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcGVuZXIgPSB1cmxsaWIyLmJ1aWxkX29wZW5lcihDYWNoZUhUVFBIYW5kbGVyKQorCisgICAgICAgIHVybGxpYjIuUmVxdWVzdC5nZXRfbWV0aG9kID0gaGVhZF9tZXRob2QKKyAgICAgICAgdXJsbGliMi5pbnN0YWxsX29wZW5lcihvcGVuZXIpCisKKyAgICAgICAgdXJpID0gdWQudXJsLnNwbGl0KCI7IilbMF0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICB1cmxsaWIyLnVybG9wZW4odXJpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfcGFyc2VfcGF0aChzZWxmLCByZWdleCwgcyk6CisgICAgICAgICIiIgorICAgICAgICBGaW5kIGFuZCBncm91cCBuYW1lLCB2ZXJzaW9uIGFuZCBhcmNoaXZlIHR5cGUgaW4gdGhlIGdpdmVuIHN0cmluZyBzCisgICAgICAgICIiIgorCisgICAgICAgIG0gPSByZWdleC5zZWFyY2gocykKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHBuYW1lID0gJycKKyAgICAgICAgICAgIHB2ZXIgPSAnJworICAgICAgICAgICAgcHR5cGUgPSAnJworCisgICAgICAgICAgICBtZGljdCA9IG0uZ3JvdXBkaWN0KCkKKyAgICAgICAgICAgIGlmICduYW1lJyBpbiBtZGljdC5rZXlzKCk6CisgICAgICAgICAgICAgICAgcG5hbWUgPSBtZGljdFsnbmFtZSddCisgICAgICAgICAgICBpZiAncHZlcicgaW4gbWRpY3Qua2V5cygpOgorICAgICAgICAgICAgICAgIHB2ZXIgPSBtZGljdFsncHZlciddCisgICAgICAgICAgICBpZiAndHlwZScgaW4gbWRpY3Qua2V5cygpOgorICAgICAgICAgICAgICAgIHB0eXBlID0gbWRpY3RbJ3R5cGUnXQorCisgICAgICAgICAgICBiYi5kZWJ1ZygzLCAiX3BhcnNlX3BhdGg6ICVzLCAlcywgJXMiICUgKHBuYW1lLCBwdmVyLCBwdHlwZSkpCisKKyAgICAgICAgICAgIHJldHVybiAocG5hbWUsIHB2ZXIsIHB0eXBlKQorCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX21vZGVsYXRlX3ZlcnNpb24oc2VsZiwgdmVyc2lvbik6CisgICAgICAgIGlmIHZlcnNpb25bMF0gaW4gWycuJywgJy0nXToKKyAgICAgICAgICAgIGlmIHZlcnNpb25bMV0uaXNkaWdpdCgpOgorICAgICAgICAgICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uWzFdICsgdmVyc2lvblswXSArIHZlcnNpb25bMjpsZW4odmVyc2lvbildCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uWzE6bGVuKHZlcnNpb24pXQorCisgICAgICAgIHZlcnNpb24gPSByZS5zdWIoJy0nLCAnLicsIHZlcnNpb24pCisgICAgICAgIHZlcnNpb24gPSByZS5zdWIoJ18nLCAnLicsIHZlcnNpb24pCisgICAgICAgIHZlcnNpb24gPSByZS5zdWIoJyhyYykrJywgJy4xMDAwLicsIHZlcnNpb24pCisgICAgICAgIHZlcnNpb24gPSByZS5zdWIoJyhiZXRhKSsnLCAnLjEwMC4nLCB2ZXJzaW9uKQorICAgICAgICB2ZXJzaW9uID0gcmUuc3ViKCcoYWxwaGEpKycsICcuMTAuJywgdmVyc2lvbikKKyAgICAgICAgaWYgdmVyc2lvblswXSA9PSAndic6CisgICAgICAgICAgICB2ZXJzaW9uID0gdmVyc2lvblsxOmxlbih2ZXJzaW9uKV0KKyAgICAgICAgcmV0dXJuIHZlcnNpb24KKworICAgIGRlZiBfdmVyY21wKHNlbGYsIG9sZCwgbmV3KToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHdoZXRoZXIgJ25ldycgaXMgbmV3ZXIgdGhhbiAnb2xkJyB2ZXJzaW9uLiBXZSB1c2UgZXhpc3RpbmcgdmVyY21wKCkgZm9yIHRoZQorICAgICAgICBwdXJwb3NlLiBQRSBpcyBjbGVhcmVkIGluIGNvbXBhcmlzb24gYXMgaXQncyBub3QgZm9yIGJ1aWxkLCBhbmQgUFIgaXMgY2xlYXJlZCB0b28KKyAgICAgICAgZm9yIHNpbXBsaWNpdHkgYXMgaXQncyBzb21laG93IGRpZmZpY3VsdCB0byBnZXQgZnJvbSB2YXJpb3VzIHVwc3RyZWFtIGZvcm1hdAorICAgICAgICAiIiIKKworICAgICAgICAob2xkcG4sIG9sZHB2LCBvbGRzdWZmaXgpID0gb2xkCisgICAgICAgIChuZXdwbiwgbmV3cHYsIG5ld3N1ZmZpeCkgPSBuZXcKKworICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgZm9yIGEgbmV3IHN1ZmZpeCB0eXBlIHRoYXQgd2UgaGF2ZSBuZXZlciBoZWFyZCBvZiBiZWZvcmUKKyAgICAgICAgIiIiCisgICAgICAgIGlmIChuZXdzdWZmaXgpOgorICAgICAgICAgICAgbSA9IHNlbGYuc3VmZml4X3JlZ2V4X2NvbXAuc2VhcmNoKG5ld3N1ZmZpeCkKKyAgICAgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzIGhhcyBhIHBvc3NpYmxlIHVua25vd24gc3VmZml4OiAlcyIgJSAobmV3cG4sIG5ld3N1ZmZpeCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgIiIiCisgICAgICAgIE5vdCBvdXIgcGFja2FnZSBzbyBpZ25vcmUgaXQKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG9sZHBuICE9IG5ld3BuOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgb2xkcHYgPSBzZWxmLl9tb2RlbGF0ZV92ZXJzaW9uKG9sZHB2KQorICAgICAgICBuZXdwdiA9IHNlbGYuX21vZGVsYXRlX3ZlcnNpb24obmV3cHYpCisKKyAgICAgICAgcmV0dXJuIGJiLnV0aWxzLnZlcmNtcCgoIjAiLCBvbGRwdiwgIiIpLCAoIjAiLCBuZXdwdiwgIiIpKQorCisgICAgZGVmIF9mZXRjaF9pbmRleChzZWxmLCB1cmksIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJ1biBmZXRjaCBjaGVja3N0YXR1cyB0byBnZXQgZGlyZWN0b3J5IGluZm9ybWF0aW9uCisgICAgICAgICIiIgorICAgICAgICBmID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKKworICAgICAgICBhZ2VudCA9ICJNb3ppbGxhLzUuMCAoWDExOyBVOyBMaW51eCBpNjg2OyBlbi1VUzsgcnY6MS45LjIuMTIpIEdlY2tvLzIwMTAxMDI3IFVidW50dS85LjEwIChrYXJtaWMpIEZpcmVmb3gvMy42LjEyIgorICAgICAgICBmZXRjaGNtZCA9IHNlbGYuYmFzZWNtZAorICAgICAgICBmZXRjaGNtZCArPSAiIC1PICIgKyBmLm5hbWUgKyAiIC0tdXNlci1hZ2VudD0nIiArIGFnZW50ICsgIicgJyIgKyB1cmkgKyAiJyIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcnVud2dldCh1ZCwgZCwgZmV0Y2hjbWQsIFRydWUpCisgICAgICAgICAgICBmZXRjaHJlc3VsdCA9IGYucmVhZCgpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGZldGNocmVzdWx0ID0gIiIKKworICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIGZldGNocmVzdWx0CisKKyAgICBkZWYgX2NoZWNrX2xhdGVzdF92ZXJzaW9uKHNlbGYsIHVybCwgcGFja2FnZSwgcGFja2FnZV9yZWdleCwgY3VycmVudF92ZXJzaW9uLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGEgcGFja2FnZSBpbnNpZGUgYSBnaXZlbiBkaXJlY3RvcnkgcGF0aAorICAgICAgICBJZiBlcnJvciBvciBubyB2ZXJzaW9uLCByZXR1cm4gIiIKKyAgICAgICAgIiIiCisgICAgICAgIHZhbGlkID0gMAorICAgICAgICB2ZXJzaW9uID0gWycnLCAnJywgJyddCisKKyAgICAgICAgYmIuZGVidWcoMywgIlZlcnNpb25VUkw6ICVzIiAlICh1cmwpKQorICAgICAgICBzb3VwID0gQmVhdXRpZnVsU291cChzZWxmLl9mZXRjaF9pbmRleCh1cmwsIHVkLCBkKSkKKyAgICAgICAgaWYgbm90IHNvdXA6CisgICAgICAgICAgICBiYi5kZWJ1ZygzLCAiKioqICVzIE5PIFNPVVAiICUgKHVybCkpCisgICAgICAgICAgICByZXR1cm4gIiIKKworICAgICAgICBmb3IgbGluZSBpbiBzb3VwLmZpbmRfYWxsKCdhJywgaHJlZj1UcnVlKToKKyAgICAgICAgICAgIGJiLmRlYnVnKDMsICJsaW5lWydocmVmJ10gPSAnJXMnIiAlIChsaW5lWydocmVmJ10pKQorICAgICAgICAgICAgYmIuZGVidWcoMywgImxpbmUgPSAnJXMnIiAlIChzdHIobGluZSkpKQorCisgICAgICAgICAgICBuZXd2ZXIgPSBzZWxmLl9wYXJzZV9wYXRoKHBhY2thZ2VfcmVnZXgsIGxpbmVbJ2hyZWYnXSkKKyAgICAgICAgICAgIGlmIG5vdCBuZXd2ZXI6CisgICAgICAgICAgICAgICAgbmV3dmVyID0gc2VsZi5fcGFyc2VfcGF0aChwYWNrYWdlX3JlZ2V4LCBzdHIobGluZSkpCisKKyAgICAgICAgICAgIGlmIG5ld3ZlcjoKKyAgICAgICAgICAgICAgICBiYi5kZWJ1ZygzLCAiVXBzdHJlYW0gdmVyc2lvbiBmb3VuZDogJXMiICUgbmV3dmVyWzFdKQorICAgICAgICAgICAgICAgIGlmIHZhbGlkID09IDA6CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gPSBuZXd2ZXIKKyAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSAxCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl92ZXJjbXAodmVyc2lvbiwgbmV3dmVyKSA8IDA6CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gPSBuZXd2ZXIKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgcHVwdmVyID0gcmUuc3ViKCdfJywgJy4nLCB2ZXJzaW9uWzFdKQorCisgICAgICAgIGJiLmRlYnVnKDMsICIqKiogJXMgLT4gVXBzdHJlYW1WZXJzaW9uID0gJXMgKEN1cnJlbnRWZXJzaW9uID0gJXMpIiAlCisgICAgICAgICAgICAgICAgKHBhY2thZ2UsIHB1cHZlciBvciAiTi9BIiwgY3VycmVudF92ZXJzaW9uWzFdKSkKKworICAgICAgICBpZiB2YWxpZDoKKyAgICAgICAgICAgIHJldHVybiBwdXB2ZXIKKworICAgICAgICByZXR1cm4gIiIKKworICAgIGRlZiBfY2hlY2tfbGF0ZXN0X3ZlcnNpb25fYnlfZGlyKHNlbGYsIGRpcnZlciwgcGFja2FnZSwgcGFja2FnZV9yZWdleCwKKyAgICAgICAgICAgIGN1cnJlbnRfdmVyc2lvbiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgICAgIFNjYW4gZXZlcnkgZGlyZWN0b3J5IGluIG9yZGVyIHRvIGdldCB1cHN0cmVhbSB2ZXJzaW9uLgorICAgICAgICAiIiIKKyAgICAgICAgdmVyc2lvbl9kaXIgPSBbJycsICcnLCAnJ10KKyAgICAgICAgdmVyc2lvbiA9IFsnJywgJycsICcnXQorCisgICAgICAgIGRpcnZlcl9yZWdleCA9IHJlLmNvbXBpbGUoIihcRCopKChcZCtbXC5cLV9dKSsoXGQrKSkiKQorICAgICAgICBzID0gZGlydmVyX3JlZ2V4LnNlYXJjaChkaXJ2ZXIpCisgICAgICAgIGlmIHM6CisgICAgICAgICAgICB2ZXJzaW9uX2RpclsxXSA9IHMuZ3JvdXAoMikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZlcnNpb25fZGlyWzFdID0gZGlydmVyCisKKyAgICAgICAgZGlyc191cmkgPSBiYi5mZXRjaC5lbmNvZGV1cmwoW3VkLnR5cGUsIHVkLmhvc3QsCisgICAgICAgICAgICAgICAgdWQucGF0aC5zcGxpdChkaXJ2ZXIpWzBdLCB1ZC51c2VyLCB1ZC5wc3dkLCB7fV0pCisgICAgICAgIGJiLmRlYnVnKDMsICJEaXJVUkw6ICVzLCAlcyIgJSAoZGlyc191cmksIHBhY2thZ2UpKQorCisgICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKHNlbGYuX2ZldGNoX2luZGV4KGRpcnNfdXJpLCB1ZCwgZCkpCisgICAgICAgIGlmIG5vdCBzb3VwOgorICAgICAgICAgICAgcmV0dXJuIHZlcnNpb25bMV0KKworICAgICAgICBmb3IgbGluZSBpbiBzb3VwLmZpbmRfYWxsKCdhJywgaHJlZj1UcnVlKToKKyAgICAgICAgICAgIHMgPSBkaXJ2ZXJfcmVnZXguc2VhcmNoKGxpbmVbJ2hyZWYnXS5zdHJpcCgiLyIpKQorICAgICAgICAgICAgaWYgczoKKyAgICAgICAgICAgICAgICB2ZXJzaW9uX2Rpcl9uZXcgPSBbJycsIHMuZ3JvdXAoMiksICcnXQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3ZlcmNtcCh2ZXJzaW9uX2RpciwgdmVyc2lvbl9kaXJfbmV3KSA8PSAwOgorICAgICAgICAgICAgICAgICAgICBkaXJ2ZXJfbmV3ID0gcy5ncm91cCgxKSArIHMuZ3JvdXAoMikKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHVkLnBhdGgucmVwbGFjZShkaXJ2ZXIsIGRpcnZlcl9uZXcsIFRydWUpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdChwYWNrYWdlKVswXQorICAgICAgICAgICAgICAgICAgICB1cmkgPSBiYi5mZXRjaC5lbmNvZGV1cmwoW3VkLnR5cGUsIHVkLmhvc3QsIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICB1ZC51c2VyLCB1ZC5wc3dkLCB7fV0pCisKKyAgICAgICAgICAgICAgICAgICAgcHVwdmVyID0gc2VsZi5fY2hlY2tfbGF0ZXN0X3ZlcnNpb24odXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsIHBhY2thZ2VfcmVnZXgsIGN1cnJlbnRfdmVyc2lvbiwgdWQsIGQpCisgICAgICAgICAgICAgICAgICAgIGlmIHB1cHZlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25bMV0gPSBwdXB2ZXIKKworICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uX2RpciA9IHZlcnNpb25fZGlyX25ldworCisgICAgICAgIHJldHVybiB2ZXJzaW9uWzFdCisKKyAgICBkZWYgX2luaXRfcmVnZXhlcyhzZWxmLCBwYWNrYWdlLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBNYXRjaCBhcyBtYW55IHBhdHRlcm5zIGFzIHBvc3NpYmxlIHN1Y2ggYXM6CisgICAgICAgICAgICAgICAgZ25vbWUtY29tbW9uLTIuMjAuMC50YXIuZ3ogKG1vc3QgY29tbW9uIGZvcm1hdCkKKyAgICAgICAgICAgICAgICBndGsrLTIuOTAuMS50YXIuZ3oKKyAgICAgICAgICAgICAgICB4Zjg2LWlucHV0LXN5bmFwdGljcy0xMi42LjkudGFyLmd6CisgICAgICAgICAgICAgICAgZHJpMnByb3RvLTIuMy50YXIuZ3oKKyAgICAgICAgICAgICAgICBibGt0b29sXzQub3JpZy50YXIuZ3oKKyAgICAgICAgICAgICAgICBsaWJpZDN0YWctMC4xNS4xYi50YXIuZ3oKKyAgICAgICAgICAgICAgICB1bnppcDU1Mi50YXIuZ3oKKyAgICAgICAgICAgICAgICBpY3U0Yy0zXzYtc3JjLnRnegorICAgICAgICAgICAgICAgIGdlbmV4dDJmc18xLjMub3JpZy50YXIuZ3oKKyAgICAgICAgICAgICAgICBnc3QtZmx1ZW5kby1tcDMKKyAgICAgICAgIiIiCisgICAgICAgICMgbWF0Y2ggbW9zdCBwYXR0ZXJucyB3aGljaCB1c2VzICItIiBhcyBzZXBhcmF0b3IgdG8gdmVyc2lvbiBkaWdpdHMKKyAgICAgICAgcG5fcHJlZml4MSA9ICJbYS16QS1aXVthLXpBLVowLTldKihbLV9dW2EtekEtWl1cdyspKlwrP1stX10iCisgICAgICAgICMgYSBsb29zZSBwYXR0ZXJuIHN1Y2ggYXMgZm9yIHVuemlwNTUyLnRhci5negorICAgICAgICBwbl9wcmVmaXgyID0gIlthLXpBLVpdKyIKKyAgICAgICAgIyBhIGxvb3NlIHBhdHRlcm4gc3VjaCBhcyBmb3IgODAzMjUtcXVpY2t5LTAuNC50YXIuZ3oKKyAgICAgICAgcG5fcHJlZml4MyA9ICJbMC05XStbLV0/W2EtekEtWl0rIgorICAgICAgICAjIFNhdmUgdGhlIFBhY2thZ2UgTmFtZSAocG4pIFJlZ2V4IGZvciB1c2UgbGF0ZXIKKyAgICAgICAgcG5fcmVnZXggPSAiKCVzfCVzfCVzKSIgJSAocG5fcHJlZml4MSwgcG5fcHJlZml4MiwgcG5fcHJlZml4MykKKworICAgICAgICAjIG1hdGNoIHZlcnNpb24KKyAgICAgICAgcHZlcl9yZWdleCA9ICIoKFtBLVpdKlxkK1thLXpBLVpdKltcLlwtX10qKSspIgorCisgICAgICAgICMgbWF0Y2ggYXJjaAorICAgICAgICBwYXJjaF9yZWdleCA9ICItc291cmNlfF9hbGxfIgorCisgICAgICAgICMgc3JjLnJwbSBleHRlbnNpb24gd2FzIGFkZGVkIG9ubHkgZm9yIHJwbSBwYWNrYWdlLiBDYW4gYmUgcmVtb3ZlZCBpZiB0aGUgcnBtCisgICAgICAgICMgcGFja2FnZWQgd2lsbCBhbHdheXMgYmUgY29uc2lkZXJlZCBhcyBoYXZpbmcgdG8gYmUgbWFudWFsbHkgdXBncmFkZWQKKyAgICAgICAgcHN1ZmZpeF9yZWdleCA9ICIodGFyXC5nenx0Z3p8dGFyXC5iejJ8emlwfHh6fHJwbXxiejJ8b3JpZ1wudGFyXC5nenx0YXJcLnh6fHNyY1wudGFyXC5nenxzcmNcLnRnenxzdm5yXGQrXC50YXJcLmJ6MnxzdGFibGVcLnRhclwuZ3p8c3JjXC5ycG0pIgorCisgICAgICAgICMgbWF0Y2ggbmFtZSwgdmVyc2lvbiBhbmQgYXJjaGl2ZSB0eXBlIG9mIGEgcGFja2FnZQorICAgICAgICBwYWNrYWdlX3JlZ2V4X2NvbXAgPSByZS5jb21waWxlKCIoP1A8bmFtZT4lcz9cLj92PykoP1A8cHZlcj4lcykoP1A8YXJjaD4lcyk/W1wuLV0oP1A8dHlwZT4lcyQpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBuX3JlZ2V4LCBwdmVyX3JlZ2V4LCBwYXJjaF9yZWdleCwgcHN1ZmZpeF9yZWdleCkpCisgICAgICAgIHNlbGYuc3VmZml4X3JlZ2V4X2NvbXAgPSByZS5jb21waWxlKHBzdWZmaXhfcmVnZXgpCisKKyAgICAgICAgIyBjb21waWxlIHJlZ2V4LCBjYW4gYmUgc3BlY2lmaWMgYnkgcGFja2FnZSBvciBnZW5lcmljIHJlZ2V4CisgICAgICAgIHBuX3JlZ2V4ID0gZC5nZXRWYXIoJ1JFR0VYJywgVHJ1ZSkKKyAgICAgICAgaWYgcG5fcmVnZXg6CisgICAgICAgICAgICBwYWNrYWdlX2N1c3RvbV9yZWdleF9jb21wID0gcmUuY29tcGlsZShwbl9yZWdleCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZlcnNpb24gPSBzZWxmLl9wYXJzZV9wYXRoKHBhY2thZ2VfcmVnZXhfY29tcCwgcGFja2FnZSkKKyAgICAgICAgICAgIGlmIHZlcnNpb246CisgICAgICAgICAgICAgICAgcGFja2FnZV9jdXN0b21fcmVnZXhfY29tcCA9IHJlLmNvbXBpbGUoCisgICAgICAgICAgICAgICAgICAgICIoP1A8bmFtZT4lcykoP1A8cHZlcj4lcykoP1A8YXJjaD4lcyk/W1wuLV0oP1A8dHlwZT4lcykiICUKKyAgICAgICAgICAgICAgICAgICAgKHJlLmVzY2FwZSh2ZXJzaW9uWzBdKSwgcHZlcl9yZWdleCwgcGFyY2hfcmVnZXgsIHBzdWZmaXhfcmVnZXgpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYWNrYWdlX2N1c3RvbV9yZWdleF9jb21wID0gTm9uZQorCisgICAgICAgIHJldHVybiBwYWNrYWdlX2N1c3RvbV9yZWdleF9jb21wCisKKyAgICBkZWYgbGF0ZXN0X3ZlcnNpb25zdHJpbmcoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgTWFuaXB1bGF0ZSB0aGUgVVJMIGFuZCB0cnkgdG8gb2J0YWluIHRoZSBsYXRlc3QgcGFja2FnZSB2ZXJzaW9uCisKKyAgICAgICAgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBzYW1lIG5hbWUgYW5kIHR5cGUuCisgICAgICAgICIiIgorICAgICAgICBwYWNrYWdlID0gdWQucGF0aC5zcGxpdCgiLyIpWy0xXQorICAgICAgICBjdXJyZW50X3ZlcnNpb24gPSBbJycsIGQuZ2V0VmFyKCdQVicsIFRydWUpLCAnJ10KKworICAgICAgICAiIiJwb3NzaWJsZSB0byBoYXZlIG5vIHZlcnNpb24gaW4gcGtnIG5hbWUsIHN1Y2ggYXMgc3BlY3RydW0tZnciIiIKKyAgICAgICAgaWYgbm90IHJlLnNlYXJjaCgiXGQrIiwgcGFja2FnZSk6CisgICAgICAgICAgICBjdXJyZW50X3ZlcnNpb25bMV0gPSByZS5zdWIoJ18nLCAnLicsIGN1cnJlbnRfdmVyc2lvblsxXSkKKyAgICAgICAgICAgIGN1cnJlbnRfdmVyc2lvblsxXSA9IHJlLnN1YignLScsICcuJywgY3VycmVudF92ZXJzaW9uWzFdKQorICAgICAgICAgICAgcmV0dXJuIChjdXJyZW50X3ZlcnNpb25bMV0sICcnKQorCisgICAgICAgIHBhY2thZ2VfcmVnZXggPSBzZWxmLl9pbml0X3JlZ2V4ZXMocGFja2FnZSwgdWQsIGQpCisgICAgICAgIGlmIHBhY2thZ2VfcmVnZXggaXMgTm9uZToKKyAgICAgICAgICAgIGJiLndhcm4oImxhdGVzdF92ZXJzaW9uc3RyaW5nOiBwYWNrYWdlICVzIGRvbid0IG1hdGNoIHBhdHRlcm4iICUgKHBhY2thZ2UpKQorICAgICAgICAgICAgcmV0dXJuICgnJywgJycpCisgICAgICAgIGJiLmRlYnVnKDMsICJsYXRlc3RfdmVyc2lvbnN0cmluZywgcmVnZXg6ICVzIiAlIChwYWNrYWdlX3JlZ2V4LnBhdHRlcm4pKQorCisgICAgICAgIHVyaSA9ICIiCisgICAgICAgIHJlZ2V4X3VyaSA9IGQuZ2V0VmFyKCJSRUdFWF9VUkkiLCBUcnVlKQorICAgICAgICBpZiBub3QgcmVnZXhfdXJpOgorICAgICAgICAgICAgcGF0aCA9IHVkLnBhdGguc3BsaXQocGFja2FnZSlbMF0KKworICAgICAgICAgICAgIyBzZWFyY2ggZm9yIHZlcnNpb24gbWF0Y2hlcyBvbiBmb2xkZXJzIGluc2lkZSB0aGUgcGF0aCwgbGlrZToKKyAgICAgICAgICAgICMgIjUuNyIgaW4gaHR0cDovL2Rvd25sb2FkLmdub21lLm9yZy9zb3VyY2VzLyR7UE59LzUuNy8ke1BOfS0ke1BWfS50YXIuZ3oKKyAgICAgICAgICAgIGRpcnZlcl9yZWdleCA9IHJlLmNvbXBpbGUoIig/UDxkaXJ2ZXI+W14vXSooXGQrXC4pKlxkKyhbLV9dclxkKykqKS8iKQorICAgICAgICAgICAgbSA9IGRpcnZlcl9yZWdleC5zZWFyY2gocGF0aCkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICAgICAgICAgIGRpcnZlciA9IG0uZ3JvdXAoJ2RpcnZlcicpCisKKyAgICAgICAgICAgICAgICBkaXJ2ZXJfcG5fcmVnZXggPSByZS5jb21waWxlKCIlc1xkPyIgJSAocmUuZXNjYXBlKHBuKSkpCisgICAgICAgICAgICAgICAgaWYgbm90IGRpcnZlcl9wbl9yZWdleC5zZWFyY2goZGlydmVyKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChzZWxmLl9jaGVja19sYXRlc3RfdmVyc2lvbl9ieV9kaXIoZGlydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwgcGFja2FnZV9yZWdleCwgY3VycmVudF92ZXJzaW9uLCB1ZCwgZCksICcnKQorCisgICAgICAgICAgICB1cmkgPSBiYi5mZXRjaC5lbmNvZGV1cmwoW3VkLnR5cGUsIHVkLmhvc3QsIHBhdGgsIHVkLnVzZXIsIHVkLnBzd2QsIHt9XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVyaSA9IHJlZ2V4X3VyaQorCisgICAgICAgIHJldHVybiAoc2VsZi5fY2hlY2tfbGF0ZXN0X3ZlcnNpb24odXJpLCBwYWNrYWdlLCBwYWNrYWdlX3JlZ2V4LAorICAgICAgICAgICAgICAgIGN1cnJlbnRfdmVyc2lvbiwgdWQsIGQpLCAnJykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbWFpbi5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NzYyZjcyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tYWluLnB5CkBAIC0wLDAgKzEsNDI3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGhpbCBCbHVuZGVsbAorIyBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIFJPQUQgR21iSAorIyBDb3B5cmlnaHQgKEMpIDIwMDYgICAgICAgIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCB3YXJuaW5ncworCitpbXBvcnQgYmIKK2Zyb20gYmIgaW1wb3J0IGV2ZW50CitpbXBvcnQgYmIubXNnCitmcm9tIGJiIGltcG9ydCBjb29rZXIKK2Zyb20gYmIgaW1wb3J0IHVpCitmcm9tIGJiIGltcG9ydCBzZXJ2ZXIKK2Zyb20gYmIgaW1wb3J0IGNvb2tlcmRhdGEKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UiKQorCitjbGFzcyBCQk1haW5FeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2RlZiBwcmVzZW50X29wdGlvbnMob3B0aW9ubGlzdCk6CisgICAgaWYgbGVuKG9wdGlvbmxpc3QpID4gMToKKyAgICAgICAgcmV0dXJuICcgb3IgJy5qb2luKFsnLCAnLmpvaW4ob3B0aW9ubGlzdFs6LTFdKSwgb3B0aW9ubGlzdFstMV1dKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBvcHRpb25saXN0WzBdCisKK2NsYXNzIEJpdGJha2VIZWxwRm9ybWF0dGVyKG9wdHBhcnNlLkluZGVudGVkSGVscEZvcm1hdHRlcik6CisgICAgZGVmIGZvcm1hdF9vcHRpb24oc2VsZiwgb3B0aW9uKToKKyAgICAgICAgIyBXZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSByYXRoZXIgdGhhbiBpbiB0aGUgdGV4dCB3ZSBzdXBwbHkgdG8KKyAgICAgICAgIyBhZGRfb3B0aW9uKCkgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGNhbGwgbGlzdF9leHRlbnNpb25fbW9kdWxlcygpCisgICAgICAgICMgb24gZXZlcnkgZXhlY3V0aW9uIChzaW5jZSBpdCBpbXBvcnRzIGFsbCBvZiB0aGUgbW9kdWxlcykKKyAgICAgICAgIyBOb3RlIGFsc28gdGhhdCB3ZSBtb2RpZnkgb3B0aW9uLmhlbHAgcmF0aGVyIHRoYW4gdGhlIHJldHVybmVkIHRleHQKKyAgICAgICAgIyAtIHRoaXMgaXMgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHJlLWZvcm1hdCB0aGUgdGV4dCBvdXJzZWx2ZXMKKyAgICAgICAgaWYgb3B0aW9uLmRlc3QgPT0gJ3VpJzoKKyAgICAgICAgICAgIHZhbGlkX3VpcyA9IGxpc3RfZXh0ZW5zaW9uX21vZHVsZXMoYmIudWksICdtYWluJykKKyAgICAgICAgICAgIG9wdGlvbi5oZWxwID0gb3B0aW9uLmhlbHAucmVwbGFjZSgnQENIT0lDRVNAJywgcHJlc2VudF9vcHRpb25zKHZhbGlkX3VpcykpCisgICAgICAgIGVsaWYgb3B0aW9uLmRlc3QgPT0gJ3NlcnZlcnR5cGUnOgorICAgICAgICAgICAgdmFsaWRfc2VydmVyX3R5cGVzID0gbGlzdF9leHRlbnNpb25fbW9kdWxlcyhiYi5zZXJ2ZXIsICdCaXRCYWtlU2VydmVyJykKKyAgICAgICAgICAgIG9wdGlvbi5oZWxwID0gb3B0aW9uLmhlbHAucmVwbGFjZSgnQENIT0lDRVNAJywgcHJlc2VudF9vcHRpb25zKHZhbGlkX3NlcnZlcl90eXBlcykpCisKKyAgICAgICAgcmV0dXJuIG9wdHBhcnNlLkluZGVudGVkSGVscEZvcm1hdHRlci5mb3JtYXRfb3B0aW9uKHNlbGYsIG9wdGlvbikKKworZGVmIGxpc3RfZXh0ZW5zaW9uX21vZHVsZXMocGtnLCBjaGVja2F0dHIpOgorICAgICIiIgorICAgIExpc3RzIGV4dGVuc2lvbiBtb2R1bGVzIGluIGEgc3BlY2lmaWMgUHl0aG9uIHBhY2thZ2UKKyAgICAoZS5nLiBVSXMsIHNlcnZlcnMpLiBOT1RFOiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBpbXBvcnQgYWxsIG9mIHRoZQorICAgIHN1Ym1vZHVsZXMgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGUgaW4gb3JkZXIgdG8gY2hlY2sgZm9yIHRoZSBzcGVjaWZpZWQKKyAgICBhdHRyaWJ1dGU7IHRoaXMgY2FuIGhhdmUgdW51c3VhbCBzaWRlLWVmZmVjdHMuIEFzIGEgcmVzdWx0LCB0aGlzIHNob3VsZAorICAgIG9ubHkgYmUgY2FsbGVkIHdoZW4gZGlzcGxheWluZyBoZWxwIHRleHQgb3IgZXJyb3IgbWVzc2FnZXMuCisgICAgUGFyYW1ldGVyczoKKyAgICAgICAgcGtnOiBwcmV2aW91c2x5IGltcG9ydGVkIFB5dGhvbiBwYWNrYWdlIHRvIGxpc3QKKyAgICAgICAgY2hlY2thdHRyOiBhdHRyaWJ1dGUgdG8gbG9vayBmb3IgaW4gbW9kdWxlIHRvIGRldGVybWluZSBpZiBpdCdzIHZhbGlkCisgICAgICAgICAgICBhcyB0aGUgdHlwZSBvZiBleHRlbnNpb24geW91IGFyZSBsb29raW5nIGZvcgorICAgICIiIgorICAgIGltcG9ydCBwa2d1dGlsCisgICAgcGtnZGlyID0gb3MucGF0aC5kaXJuYW1lKHBrZy5fX2ZpbGVfXykKKworICAgIG1vZHVsZXMgPSBbXQorICAgIGZvciBfLCBtb2R1bGVuYW1lLCBfIGluIHBrZ3V0aWwuaXRlcl9tb2R1bGVzKFtwa2dkaXJdKToKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4ocGtnZGlyLCBtb2R1bGVuYW1lKSk6CisgICAgICAgICAgICAjIGlnbm9yZSBkaXJlY3RvcmllcworICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXyhwa2cuX19uYW1lX18sIGZyb21saXN0PVttb2R1bGVuYW1lXSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBJZiB3ZSBjYW4ndCBpbXBvcnQgaXQsIGl0J3Mgbm90IHZhbGlkCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBtb2R1bGVfaWYgPSBnZXRhdHRyKG1vZHVsZSwgbW9kdWxlbmFtZSkKKyAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGVfaWYsICdoaWRkZW5fZXh0ZW5zaW9uJywgRmFsc2UpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgbm90IGNoZWNrYXR0ciBvciBoYXNhdHRyKG1vZHVsZV9pZiwgY2hlY2thdHRyKToKKyAgICAgICAgICAgIG1vZHVsZXMuYXBwZW5kKG1vZHVsZW5hbWUpCisgICAgcmV0dXJuIG1vZHVsZXMKKworZGVmIGltcG9ydF9leHRlbnNpb25fbW9kdWxlKHBrZywgbW9kdWxlbmFtZSwgY2hlY2thdHRyKToKKyAgICB0cnk6CisgICAgICAgICMgRHluYW1pY2FsbHkgbG9hZCB0aGUgVUkgYmFzZWQgb24gdGhlIHVpIG5hbWUuIEFsdGhvdWdoIHdlCisgICAgICAgICMgc3VnZ2VzdCBhIGZpeGVkIHNldCB0aGlzIGFsbG93cyB5b3UgdG8gaGF2ZSBmbGV4aWJpbGl0eSBpbiB3aGljaAorICAgICAgICAjIG9uZXMgYXJlIGF2YWlsYWJsZS4KKyAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXyhwa2cuX19uYW1lX18sIGZyb21saXN0ID0gW21vZHVsZW5hbWVdKQorICAgICAgICByZXR1cm4gZ2V0YXR0cihtb2R1bGUsIG1vZHVsZW5hbWUpCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oJ0ZBVEFMOiBVbmFibGUgdG8gaW1wb3J0IGV4dGVuc2lvbiBtb2R1bGUgIiVzIiBmcm9tICVzLiBWYWxpZCBleHRlbnNpb24gbW9kdWxlczogJXMnICUgKG1vZHVsZW5hbWUsIHBrZy5fX25hbWVfXywgcHJlc2VudF9vcHRpb25zKGxpc3RfZXh0ZW5zaW9uX21vZHVsZXMocGtnLCBjaGVja2F0dHIpKSkpCisKKworIyBEaXNwbGF5IGJpdGJha2UvT0Ugd2FybmluZ3MgdmlhIHRoZSBCaXRCYWtlLldhcm5pbmdzIGxvZ2dlciwgaWdub3Jpbmcgb3RoZXJzIiIiCit3YXJubG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuV2FybmluZ3MiKQorX3dhcm5pbmdzX3Nob3d3YXJuaW5nID0gd2FybmluZ3Muc2hvd3dhcm5pbmcKK2RlZiBfc2hvd3dhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8sIGZpbGU9Tm9uZSwgbGluZT1Ob25lKToKKyAgICBpZiBmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICBpZiBfd2FybmluZ3Nfc2hvd3dhcm5pbmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfd2FybmluZ3Nfc2hvd3dhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8sIGZpbGUsIGxpbmUpCisgICAgZWxzZToKKyAgICAgICAgcyA9IHdhcm5pbmdzLmZvcm1hdHdhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIHdhcm5sb2cud2FybihzKQorCit3YXJuaW5ncy5zaG93d2FybmluZyA9IF9zaG93d2FybmluZword2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIpCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiZGVmYXVsdCIsIG1vZHVsZT0iKDxzdHJpbmc+JHwob2V8YmIpXC4pIikKK3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBjYXRlZ29yeT1QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQord2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsIGNhdGVnb3J5PUltcG9ydFdhcm5pbmcpCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgY2F0ZWdvcnk9RGVwcmVjYXRpb25XYXJuaW5nLCBtb2R1bGU9IjxzdHJpbmc+JCIpCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgbWVzc2FnZT0iV2l0aC1zdGF0ZW1lbnRzIG5vdyBkaXJlY3RseSBzdXBwb3J0IG11bHRpcGxlIGNvbnRleHQgbWFuYWdlcnMiKQorCitjbGFzcyBCaXRCYWtlQ29uZmlnUGFyYW1ldGVycyhjb29rZXJkYXRhLkNvbmZpZ1BhcmFtZXRlcnMpOgorCisgICAgZGVmIHBhcnNlQ29tbWFuZExpbmUoc2VsZiwgYXJndj1zeXMuYXJndik6CisgICAgICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKKyAgICAgICAgICAgIGZvcm1hdHRlciA9IEJpdGJha2VIZWxwRm9ybWF0dGVyKCksCisgICAgICAgICAgICB2ZXJzaW9uID0gIkJpdEJha2UgQnVpbGQgVG9vbCBDb3JlIHZlcnNpb24gJXMiICUgYmIuX192ZXJzaW9uX18sCisgICAgICAgICAgICB1c2FnZSA9ICIiIiVwcm9nIFtvcHRpb25zXSBbcmVjaXBlbmFtZS90YXJnZXQgcmVjaXBlOmRvX3Rhc2sgLi4uXQorCisgICAgRXhlY3V0ZXMgdGhlIHNwZWNpZmllZCB0YXNrIChkZWZhdWx0IGlzICdidWlsZCcpIGZvciBhIGdpdmVuIHNldCBvZiB0YXJnZXQgcmVjaXBlcyAoLmJiIGZpbGVzKS4KKyAgICBJdCBpcyBhc3N1bWVkIHRoZXJlIGlzIGEgY29uZi9iYmxheWVycy5jb25mIGF2YWlsYWJsZSBpbiBjd2Qgb3IgaW4gQkJQQVRIIHdoaWNoCisgICAgd2lsbCBwcm92aWRlIHRoZSBsYXllciwgQkJGSUxFUyBhbmQgb3RoZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4iIiIpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1iIiwgIi0tYnVpbGRmaWxlIiwgaGVscCA9ICJFeGVjdXRlIHRhc2tzIGZyb20gYSBzcGVjaWZpYyAuYmIgcmVjaXBlIGRpcmVjdGx5LiBXQVJOSU5HOiBEb2VzIG5vdCBoYW5kbGUgYW55IGRlcGVuZGVuY2llcyBmcm9tIG90aGVyIHJlY2lwZXMuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gImJ1aWxkZmlsZSIsIGRlZmF1bHQgPSBOb25lKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItayIsICItLWNvbnRpbnVlIiwgaGVscCA9ICJDb250aW51ZSBhcyBtdWNoIGFzIHBvc3NpYmxlIGFmdGVyIGFuIGVycm9yLiBXaGlsZSB0aGUgdGFyZ2V0IHRoYXQgZmFpbGVkIGFuZCBhbnl0aGluZyBkZXBlbmRpbmcgb24gaXQgY2Fubm90IGJlIGJ1aWx0LCBhcyBtdWNoIGFzIHBvc3NpYmxlIHdpbGwgYmUgYnVpbHQgYmVmb3JlIHN0b3BwaW5nLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX2ZhbHNlIiwgZGVzdCA9ICJhYm9ydCIsIGRlZmF1bHQgPSBUcnVlKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYSIsICItLXRyeWFsdGNvbmZpZ3MiLCBoZWxwID0gIkNvbnRpbnVlIHdpdGggYnVpbGRzIGJ5IHRyeWluZyB0byB1c2UgYWx0ZXJuYXRpdmUgcHJvdmlkZXJzIHdoZXJlIHBvc3NpYmxlLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gInRyeWFsdGNvbmZpZ3MiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZm9yY2UiLCBoZWxwID0gIkZvcmNlIHRoZSBzcGVjaWZpZWQgdGFyZ2V0cy90YXNrIHRvIHJ1biAoaW52YWxpZGF0aW5nIGFueSBleGlzdGluZyBzdGFtcCBmaWxlKS4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJmb3JjZSIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLWMiLCAiLS1jbWQiLCBoZWxwID0gIlNwZWNpZnkgdGhlIHRhc2sgdG8gZXhlY3V0ZS4gVGhlIGV4YWN0IG9wdGlvbnMgYXZhaWxhYmxlIGRlcGVuZCBvbiB0aGUgbWV0YWRhdGEuIFNvbWUgZXhhbXBsZXMgbWlnaHQgYmUgJ2NvbXBpbGUnIG9yICdwb3B1bGF0ZV9zeXNyb290JyBvciAnbGlzdHRhc2tzJyBtYXkgZ2l2ZSBhIGxpc3Qgb2YgdGhlIHRhc2tzIGF2YWlsYWJsZS4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAiY21kIikKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLUMiLCAiLS1jbGVhci1zdGFtcCIsIGhlbHAgPSAiSW52YWxpZGF0ZSB0aGUgc3RhbXAgZm9yIHRoZSBzcGVjaWZpZWQgdGFzayBzdWNoIGFzICdjb21waWxlJyBhbmQgdGhlbiBydW4gdGhlIGRlZmF1bHQgdGFzayBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXQocykuIiwKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJpbnZhbGlkYXRlX3N0YW1wIikKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXIiLCAiLS1yZWFkIiwgaGVscCA9ICJSZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBiZWZvcmUgYml0YmFrZS5jb25mLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gImFwcGVuZCIsIGRlc3QgPSAicHJlZmlsZSIsIGRlZmF1bHQgPSBbXSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLVIiLCAiLS1wb3N0cmVhZCIsIGhlbHAgPSAiUmVhZCB0aGUgc3BlY2lmaWVkIGZpbGUgYWZ0ZXIgYml0YmFrZS5jb25mLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJhcHBlbmQiLCBkZXN0ID0gInBvc3RmaWxlIiwgZGVmYXVsdCA9IFtdKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdiIsICItLXZlcmJvc2UiLCBoZWxwID0gIk91dHB1dCBtb3JlIGxvZyBtZXNzYWdlIGRhdGEgdG8gdGhlIHRlcm1pbmFsLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gInZlcmJvc2UiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1EIiwgIi0tZGVidWciLCBoZWxwID0gIkluY3JlYXNlIHRoZSBkZWJ1ZyBsZXZlbC4gWW91IGNhbiBzcGVjaWZ5IHRoaXMgbW9yZSB0aGFuIG9uY2UuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAiY291bnQiLCBkZXN0PSJkZWJ1ZyIsIGRlZmF1bHQgPSAwKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbiIsICItLWRyeS1ydW4iLCBoZWxwID0gIkRvbid0IGV4ZWN1dGUsIGp1c3QgZ28gdGhyb3VnaCB0aGUgbW90aW9ucy4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJkcnlfcnVuIiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItUyIsICItLWR1bXAtc2lnbmF0dXJlcyIsIGhlbHAgPSAiRHVtcCBvdXQgdGhlIHNpZ25hdHVyZSBjb25zdHJ1Y3Rpb24gaW5mb3JtYXRpb24sIHdpdGggbm8gdGFzayBleGVjdXRpb24uIFRoZSBTSUdOQVRVUkVfSEFORExFUiBwYXJhbWV0ZXIgaXMgcGFzc2VkIHRvIHRoZSBoYW5kbGVyLiBUd28gY29tbW9uIHZhbHVlcyBhcmUgbm9uZSBhbmQgcHJpbnRkaWZmIGJ1dCB0aGUgaGFuZGxlciBtYXkgZGVmaW5lIG1vcmUvbGVzcy4gbm9uZSBtZWFucyBvbmx5IGR1bXAgdGhlIHNpZ25hdHVyZSwgcHJpbnRkaWZmIG1lYW5zIGNvbXBhcmUgdGhlIGR1bXBlZCBzaWduYXR1cmUgd2l0aCB0aGUgY2FjaGVkIG9uZS4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJhcHBlbmQiLCBkZXN0ID0gImR1bXBfc2lnbmF0dXJlcyIsIGRlZmF1bHQgPSBbXSwgbWV0YXZhcj0iU0lHTkFUVVJFX0hBTkRMRVIiKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcCIsICItLXBhcnNlLW9ubHkiLCBoZWxwID0gIlF1aXQgYWZ0ZXIgcGFyc2luZyB0aGUgQkIgcmVjaXBlcy4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJwYXJzZV9vbmx5IiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcyIsICItLXNob3ctdmVyc2lvbnMiLCBoZWxwID0gIlNob3cgY3VycmVudCBhbmQgcHJlZmVycmVkIHZlcnNpb25zIG9mIGFsbCByZWNpcGVzLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gInNob3dfdmVyc2lvbnMiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1lIiwgIi0tZW52aXJvbm1lbnQiLCBoZWxwID0gIlNob3cgdGhlIGdsb2JhbCBvciBwZXItcmVjaXBlIGVudmlyb25tZW50IGNvbXBsZXRlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdmFyaWFibGVzIHdlcmUgc2V0L2NoYW5nZWQuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAic2hvd19lbnZpcm9ubWVudCIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLWciLCAiLS1ncmFwaHZpeiIsIGhlbHAgPSAiU2F2ZSBkZXBlbmRlbmN5IHRyZWUgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgdGFyZ2V0cyBpbiB0aGUgZG90IHN5bnRheC4iLAorICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAiZG90X2dyYXBoIiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItSSIsICItLWlnbm9yZS1kZXBzIiwgaGVscCA9ICIiIkFzc3VtZSB0aGVzZSBkZXBlbmRlbmNpZXMgZG9uJ3QgZXhpc3QgYW5kIGFyZSBhbHJlYWR5IHByb3ZpZGVkIChlcXVpdmFsZW50IHRvIEFTU1VNRV9QUk9WSURFRCkuIFVzZWZ1bCB0byBtYWtlIGRlcGVuZGVuY3kgZ3JhcGhzIG1vcmUgYXBwZWFsaW5nIiIiLAorICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAiYXBwZW5kIiwgZGVzdCA9ICJleHRyYV9hc3N1bWVfcHJvdmlkZWQiLCBkZWZhdWx0ID0gW10pCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1sIiwgIi0tbG9nLWRvbWFpbnMiLCBoZWxwID0gIiIiU2hvdyBkZWJ1ZyBsb2dnaW5nIGZvciB0aGUgc3BlY2lmaWVkIGxvZ2dpbmcgZG9tYWlucyIiIiwKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gImFwcGVuZCIsIGRlc3QgPSAiZGVidWdfZG9tYWlucyIsIGRlZmF1bHQgPSBbXSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLVAiLCAiLS1wcm9maWxlIiwgaGVscCA9ICJQcm9maWxlIHRoZSBjb21tYW5kIGFuZCBzYXZlIHJlcG9ydHMuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAicHJvZmlsZSIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBlbnZfdWkgPSBvcy5lbnZpcm9uLmdldCgnQklUQkFLRV9VSScsIE5vbmUpCisgICAgICAgIGRlZmF1bHRfdWkgPSBlbnZfdWkgb3IgJ2tub3R0eScKKyAgICAgICAgIyBAQ0hPSUNFU0AgaXMgc3Vic3RpdHV0ZWQgb3V0IGJ5IEJpdGJha2VIZWxwRm9ybWF0dGVyIGFib3ZlCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdSIsICItLXVpIiwgaGVscCA9ICJUaGUgdXNlciBpbnRlcmZhY2UgdG8gdXNlIChAQ0hPSUNFU0AgLSBkZWZhdWx0ICVkZWZhdWx0KS4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJ1aSIsIGRlZmF1bHQ9ZGVmYXVsdF91aSkKKworICAgICAgICAjIEBDSE9JQ0VTQCBpcyBzdWJzdGl0dXRlZCBvdXQgYnkgQml0YmFrZUhlbHBGb3JtYXR0ZXIgYWJvdmUKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi10IiwgIi0tc2VydmVydHlwZSIsIGhlbHAgPSAiQ2hvb3NlIHdoaWNoIHNlcnZlciB0eXBlIHRvIHVzZSAoQENIT0lDRVNAIC0gZGVmYXVsdCAlZGVmYXVsdCkuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gInNlcnZlcnR5cGUiLCBkZWZhdWx0ID0gInByb2Nlc3MiKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS10b2tlbiIsIGhlbHAgPSAiU3BlY2lmeSB0aGUgY29ubmVjdGlvbiB0b2tlbiB0byBiZSB1c2VkIHdoZW4gY29ubmVjdGluZyB0byBhIHJlbW90ZSBzZXJ2ZXIuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gInhtbHJwY3Rva2VuIikKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tcmV2aXNpb25zLWNoYW5nZWQiLCBoZWxwID0gIlNldCB0aGUgZXhpdCBjb2RlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHVwc3RyZWFtIGZsb2F0aW5nIHJldmlzaW9ucyBoYXZlIGNoYW5nZWQgb3Igbm90LiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gInJldmlzaW9uc19jaGFuZ2VkIiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1zZXJ2ZXItb25seSIsIGhlbHAgPSAiUnVuIGJpdGJha2Ugd2l0aG91dCBhIFVJLCBvbmx5IHN0YXJ0aW5nIGEgc2VydmVyIChjb29rZXIpIHByb2Nlc3MuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAic2VydmVyX29ubHkiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1CIiwgIi0tYmluZCIsIGhlbHAgPSAiVGhlIG5hbWUvYWRkcmVzcyBmb3IgdGhlIGJpdGJha2Ugc2VydmVyIHRvIGJpbmQgdG8uIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gImJpbmQiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLW5vLXNldHNjZW5lIiwgaGVscCA9ICJEbyBub3QgcnVuIGFueSBzZXRzY2VuZSB0YXNrcy4gc3N0YXRlIHdpbGwgYmUgaWdub3JlZCBhbmQgZXZlcnl0aGluZyBuZWVkZWQsIGJ1aWx0LiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gIm5vc2V0c2NlbmUiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXJlbW90ZS1zZXJ2ZXIiLCBoZWxwID0gIkNvbm5lY3QgdG8gdGhlIHNwZWNpZmllZCBzZXJ2ZXIuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gInJlbW90ZV9zZXJ2ZXIiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1tIiwgIi0ta2lsbC1zZXJ2ZXIiLCBoZWxwID0gIlRlcm1pbmF0ZSB0aGUgcmVtb3RlIHNlcnZlci4iLAorICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAia2lsbF9zZXJ2ZXIiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLW9ic2VydmUtb25seSIsIGhlbHAgPSAiQ29ubmVjdCB0byBhIHNlcnZlciBhcyBhbiBvYnNlcnZpbmctb25seSBjbGllbnQuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAib2JzZXJ2ZV9vbmx5IiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1zdGF0dXMtb25seSIsIGhlbHAgPSAiQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgcmVtb3RlIGJpdGJha2Ugc2VydmVyLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gInN0YXR1c19vbmx5IiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdyIsICItLXdyaXRlLWxvZyIsIGhlbHAgPSAiV3JpdGVzIHRoZSBldmVudCBsb2cgb2YgdGhlIGJ1aWxkIHRvIGEgYml0YmFrZSBldmVudCBqc29uIGZpbGUuIFVzZSAnJyAoZW1wdHkgc3RyaW5nKSB0byBhc3NpZ24gdGhlIG5hbWUgYXV0b21hdGljYWxseS4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAid3JpdGVldmVudGxvZyIpCisKKyAgICAgICAgb3B0aW9ucywgdGFyZ2V0cyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpCisKKyAgICAgICAgIyBzb21lIGVudmlyb25tZW50YWwgdmFyaWFibGVzIHNldCBhbHNvIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworICAgICAgICBpZiAiQkJTRVJWRVIiIGluIG9zLmVudmlyb246CisgICAgICAgICAgICBvcHRpb25zLnNlcnZlcnR5cGUgPSAieG1scnBjIgorICAgICAgICAgICAgb3B0aW9ucy5yZW1vdGVfc2VydmVyID0gb3MuZW52aXJvblsiQkJTRVJWRVIiXQorCisgICAgICAgIGlmICJCQlRPS0VOIiBpbiBvcy5lbnZpcm9uOgorICAgICAgICAgICAgb3B0aW9ucy54bWxycGN0b2tlbiA9IG9zLmVudmlyb25bIkJCVE9LRU4iXQorCisgICAgICAgIGlmICJCQkVWRU5UTE9HIiBpcyBvcy5lbnZpcm9uOgorICAgICAgICAgICAgb3B0aW9ucy53cml0ZWV2ZW50bG9nID0gb3MuZW52aXJvblsiQkJFVkVOVExPRyJdCisKKyAgICAgICAgIyBmaWxsIGluIHByb3BlciBsb2cgbmFtZSBpZiBub3Qgc3VwcGxpZWQKKyAgICAgICAgaWYgb3B0aW9ucy53cml0ZWV2ZW50bG9nIGlzIG5vdCBOb25lIGFuZCBsZW4ob3B0aW9ucy53cml0ZWV2ZW50bG9nKSA9PSAwOgorICAgICAgICAgICAgaW1wb3J0IGRhdGV0aW1lCisgICAgICAgICAgICBvcHRpb25zLndyaXRlZXZlbnRsb2cgPSAiYml0YmFrZV9ldmVudGxvZ18lcy5qc29uIiAlIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCIlWSVtJWQlSCVNJVMiKQorCisgICAgICAgICMgaWYgQkJTRVJWRVIgc2F5cyB0byBhdXRvZGV0ZWN0LCBsZXQncyBkbyB0aGF0CisgICAgICAgIGlmIG9wdGlvbnMucmVtb3RlX3NlcnZlcjoKKyAgICAgICAgICAgIFtob3N0LCBwb3J0XSA9IG9wdGlvbnMucmVtb3RlX3NlcnZlci5zcGxpdCgiOiIsIDIpCisgICAgICAgICAgICBwb3J0ID0gaW50KHBvcnQpCisgICAgICAgICAgICAjIHVzZSBhdXRvbWF0aWMgcG9ydCBpZiBwb3J0IHNldCB0byAtMSwgbWVhbnMgcmVhZCBpdCBmcm9tCisgICAgICAgICAgICAjIHRoZSBiaXRiYWtlLmxvY2sgZmlsZTsgdGhpcyBpcyBhIGJpdCB0cmlja3ksIGJ1dCB3ZSBhbHdheXMgZXhwZWN0CisgICAgICAgICAgICAjIHRvIGJlIGluIHRoZSBiYXNlIG9mIHRoZSBidWlsZCBkaXJlY3RvcnkgaWYgd2UgbmVlZCB0byBoYXZlIGEKKyAgICAgICAgICAgICMgY2hhbmNlIHRvIHN0YXJ0IHRoZSBzZXJ2ZXIgbGF0ZXIsIGFueXdheQorICAgICAgICAgICAgaWYgcG9ydCA9PSAtMToKKyAgICAgICAgICAgICAgICBsb2NrX2xvY2F0aW9uID0gIi4vYml0YmFrZS5sb2NrIgorICAgICAgICAgICAgICAgICMgd2UgdHJ5IHRvIHJlYWQgdGhlIGFkZHJlc3MgYXQgYWxsIHRpbWVzOyBpZiB0aGUgc2VydmVyIGlzIG5vdCBzdGFydGVkLAorICAgICAgICAgICAgICAgICMgd2UnbGwgdHJ5IHRvIHN0YXJ0IGl0IGFmdGVyIHRoZSBmaXJzdCBjb25uZWN0IGZhaWxzLCBiZWxvdworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbGYgPSBvcGVuKGxvY2tfbG9jYXRpb24sICdyJykKKyAgICAgICAgICAgICAgICAgICAgcmVtb3RlZGVmID0gbGYucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICBbaG9zdCwgcG9ydF0gPSByZW1vdGVkZWYuc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgICAgICBwb3J0ID0gaW50KHBvcnQpCisgICAgICAgICAgICAgICAgICAgIGxmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5yZW1vdGVfc2VydmVyID0gcmVtb3RlZGVmCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZhaWxlZCB0byByZWFkIGJpdGJha2UubG9jayAoJXMpLCBpbnZhbGlkIHBvcnQiICUgc3RyKGUpKQorCisgICAgICAgIHJldHVybiBvcHRpb25zLCB0YXJnZXRzWzE6XQorCisKK2RlZiBzdGFydF9zZXJ2ZXIoc2VydmVybW9kdWxlLCBjb25maWdQYXJhbXMsIGNvbmZpZ3VyYXRpb24sIGZlYXR1cmVzKToKKyAgICBzZXJ2ZXIgPSBzZXJ2ZXJtb2R1bGUuQml0QmFrZVNlcnZlcigpCisgICAgaWYgY29uZmlnUGFyYW1zLmJpbmQ6CisgICAgICAgIChob3N0LCBwb3J0KSA9IGNvbmZpZ1BhcmFtcy5iaW5kLnNwbGl0KCc6JykKKyAgICAgICAgc2VydmVyLmluaXRTZXJ2ZXIoKGhvc3QsIGludChwb3J0KSkpCisgICAgICAgIGNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlID0gWyBzZXJ2ZXIuc2VydmVySW1wbC5ob3N0LCBzZXJ2ZXIuc2VydmVySW1wbC5wb3J0IF0KKyAgICBlbHNlOgorICAgICAgICBzZXJ2ZXIuaW5pdFNlcnZlcigpCisgICAgICAgIGNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlID0gW10KKworICAgIHRyeToKKyAgICAgICAgY29uZmlndXJhdGlvbi5zZXRTZXJ2ZXJSZWdJZGxlQ2FsbGJhY2soc2VydmVyLmdldFNlcnZlcklkbGVDQigpKQorCisgICAgICAgIGNvb2tlciA9IGJiLmNvb2tlci5CQkNvb2tlcihjb25maWd1cmF0aW9uLCBmZWF0dXJlcykKKworICAgICAgICBzZXJ2ZXIuYWRkY29va2VyKGNvb2tlcikKKyAgICAgICAgc2VydmVyLnNhdmVDb25uZWN0aW9uRGV0YWlscygpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBleGNfaW5mbyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIHdoaWxlIGhhc2F0dHIoc2VydmVyLCAiZXZlbnRfcXVldWUiKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgcXVldWUKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICBpbXBvcnQgUXVldWUgYXMgcXVldWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBldmVudCA9IHNlcnZlci5ldmVudF9xdWV1ZS5nZXQoYmxvY2s9RmFsc2UpCisgICAgICAgICAgICBleGNlcHQgKHF1ZXVlLkVtcHR5LCBJT0Vycm9yKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgbG9nZ2luZy5Mb2dSZWNvcmQpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUoZXZlbnQpCisgICAgICAgIHJhaXNlIGV4Y19pbmZvWzFdLCBOb25lLCBleGNfaW5mb1syXQorICAgIHNlcnZlci5kZXRhY2goKQorICAgIGNvb2tlci5sb2NrLmNsb3NlKCkKKyAgICByZXR1cm4gc2VydmVyCisKKworZGVmIGJpdGJha2VfbWFpbihjb25maWdQYXJhbXMsIGNvbmZpZ3VyYXRpb24pOgorCisgICAgIyBQeXRob24gbXVsdGlwcm9jZXNzaW5nIHJlcXVpcmVzIC9kZXYvc2htIG9uIExpbnV4CisgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2xpbnV4JykgYW5kIG5vdCBvcy5hY2Nlc3MoJy9kZXYvc2htJywgb3MuV19PSyB8IG9zLlhfT0spOgorICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZBVEFMOiAvZGV2L3NobSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3Qgd3JpdGFibGUiKQorCisgICAgIyBVbmJ1ZmZlciBzdGRvdXQgdG8gYXZvaWQgbG9nIHRydW5jYXRpb24gaW4gdGhlIGV2ZW50CisgICAgIyBvZiBhbiB1bm9yZGVybHkgZXhpdCBhcyB3ZWxsIGFzIHRvIHByb3ZpZGUgdGltZWx5CisgICAgIyB1cGRhdGVzIHRvIGxvZyBmaWxlcyBmb3IgdXNlIHdpdGggdGFpbAorICAgIHRyeToKKyAgICAgICAgaWYgc3lzLnN0ZG91dC5uYW1lID09ICc8c3Rkb3V0Pic6CisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gb3MuZmRvcGVuKHN5cy5zdGRvdXQuZmlsZW5vKCksICd3JywgMCkKKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKworCisgICAgY29uZmlndXJhdGlvbi5zZXRDb25maWdQYXJhbWV0ZXJzKGNvbmZpZ1BhcmFtcykKKworICAgIHVpX21vZHVsZSA9IGltcG9ydF9leHRlbnNpb25fbW9kdWxlKGJiLnVpLCBjb25maWdQYXJhbXMudWksICdtYWluJykKKyAgICBzZXJ2ZXJtb2R1bGUgPSBpbXBvcnRfZXh0ZW5zaW9uX21vZHVsZShiYi5zZXJ2ZXIsIGNvbmZpZ1BhcmFtcy5zZXJ2ZXJ0eXBlLCAnQml0QmFrZVNlcnZlcicpCisKKyAgICBpZiBjb25maWdQYXJhbXMuc2VydmVyX29ubHk6CisgICAgICAgIGlmIGNvbmZpZ1BhcmFtcy5zZXJ2ZXJ0eXBlICE9ICJ4bWxycGMiOgorICAgICAgICAgICAgcmFpc2UgQkJNYWluRXhjZXB0aW9uKCJGQVRBTDogSWYgJy0tc2VydmVyLW9ubHknIGlzIGRlZmluZWQsIHdlIG11c3Qgc2V0IHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcnZlcnR5cGUgYXMgJ3htbHJwYycuXG4iKQorICAgICAgICBpZiBub3QgY29uZmlnUGFyYW1zLmJpbmQ6CisgICAgICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZBVEFMOiBUaGUgJy0tc2VydmVyLW9ubHknIG9wdGlvbiByZXF1aXJlcyBhIG5hbWUvYWRkcmVzcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIGJpbmQgdG8gd2l0aCB0aGUgLUIgb3B0aW9uLlxuIikKKyAgICAgICAgaWYgY29uZmlnUGFyYW1zLnJlbW90ZV9zZXJ2ZXI6CisgICAgICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZBVEFMOiBUaGUgJy0tc2VydmVyLW9ubHknIG9wdGlvbiBjb25mbGljdHMgd2l0aCAlcy5cbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGhlIEJCU0VSVkVSIGVudmlyb25tZW50IHZhcmlhYmxlIiBpZiAiQkJTRVJWRVIiIGluIG9zLmVudmlyb24gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlICJ0aGUgJy0tcmVtb3RlLXNlcnZlcicgb3B0aW9uIiApKQorCisgICAgaWYgY29uZmlnUGFyYW1zLmJpbmQgYW5kIGNvbmZpZ1BhcmFtcy5zZXJ2ZXJ0eXBlICE9ICJ4bWxycGMiOgorICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZBVEFMOiBJZiAnLUInIG9yICctLWJpbmQnIGlzIGRlZmluZWQsIHdlIG11c3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldCB0aGUgc2VydmVydHlwZSBhcyAneG1scnBjJy5cbiIpCisKKyAgICBpZiBjb25maWdQYXJhbXMucmVtb3RlX3NlcnZlciBhbmQgY29uZmlnUGFyYW1zLnNlcnZlcnR5cGUgIT0gInhtbHJwYyI6CisgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRkFUQUw6IElmICctLXJlbW90ZS1zZXJ2ZXInIGlzIGRlZmluZWQsIHdlIG11c3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldCB0aGUgc2VydmVydHlwZSBhcyAneG1scnBjJy5cbiIpCisKKyAgICBpZiBjb25maWdQYXJhbXMub2JzZXJ2ZV9vbmx5IGFuZCAobm90IGNvbmZpZ1BhcmFtcy5yZW1vdGVfc2VydmVyIG9yIGNvbmZpZ1BhcmFtcy5iaW5kKToKKyAgICAgICAgcmFpc2UgQkJNYWluRXhjZXB0aW9uKCJGQVRBTDogJy0tb2JzZXJ2ZS1vbmx5JyBjYW4gb25seSBiZSB1c2VkIGJ5IFVJIGNsaWVudHMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbm5lY3RpbmcgdG8gYSBzZXJ2ZXIuXG4iKQorCisgICAgaWYgY29uZmlnUGFyYW1zLmtpbGxfc2VydmVyIGFuZCBub3QgY29uZmlnUGFyYW1zLnJlbW90ZV9zZXJ2ZXI6CisgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRkFUQUw6ICctLWtpbGwtc2VydmVyJyBjYW4gb25seSBiZSB1c2VkIHRvIHRlcm1pbmF0ZSBhIHJlbW90ZSBzZXJ2ZXIiKQorCisgICAgaWYgIkJCREVCVUciIGluIG9zLmVudmlyb246CisgICAgICAgIGxldmVsID0gaW50KG9zLmVudmlyb25bIkJCREVCVUciXSkKKyAgICAgICAgaWYgbGV2ZWwgPiBjb25maWd1cmF0aW9uLmRlYnVnOgorICAgICAgICAgICAgY29uZmlndXJhdGlvbi5kZWJ1ZyA9IGxldmVsCisKKyAgICBiYi5tc2cuaW5pdF9tc2djb25maWcoY29uZmlnUGFyYW1zLnZlcmJvc2UsIGNvbmZpZ3VyYXRpb24uZGVidWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5kZWJ1Z19kb21haW5zKQorCisgICAgIyBFbnN1cmUgbG9nZ2luZyBtZXNzYWdlcyBnZXQgc2VudCB0byB0aGUgVUkgYXMgZXZlbnRzCisgICAgaGFuZGxlciA9IGJiLmV2ZW50LkxvZ0hhbmRsZXIoKQorICAgIGlmIG5vdCBjb25maWdQYXJhbXMuc3RhdHVzX29ubHk6CisgICAgICAgICMgSW4gc3RhdHVzIG9ubHkgbW9kZSB0aGVyZSBhcmUgbm8gbG9ncyBhbmQgbm8gVUkKKyAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKKworICAgICMgQ2xlYXIgYXdheSBhbnkgc3B1cmlvdXMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdoaWxlIHdlIHN0b2tlIHVwIHRoZSBjb29rZXIKKyAgICBjbGVhbmVkdmFycyA9IGJiLnV0aWxzLmNsZWFuX2Vudmlyb25tZW50KCkKKworICAgIGZlYXR1cmVzZXQgPSBbXQorICAgIGlmIG5vdCBjb25maWdQYXJhbXMuc2VydmVyX29ubHk6CisgICAgICAgICMgQ29sbGVjdCB0aGUgZmVhdHVyZSBzZXQgZm9yIHRoZSBVSQorICAgICAgICBmZWF0dXJlc2V0ID0gZ2V0YXR0cih1aV9tb2R1bGUsICJmZWF0dXJlU2V0IiwgW10pCisKKyAgICBpZiBub3QgY29uZmlnUGFyYW1zLnJlbW90ZV9zZXJ2ZXI6CisgICAgICAgICMgd2Ugc3RhcnQgYSBzZXJ2ZXIgd2l0aCBhIGdpdmVuIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VydmVyID0gc3RhcnRfc2VydmVyKHNlcnZlcm1vZHVsZSwgY29uZmlnUGFyYW1zLCBjb25maWd1cmF0aW9uLCBmZWF0dXJlc2V0KQorICAgICAgICBiYi5ldmVudC51aV9xdWV1ZSA9IFtdCisgICAgZWxzZToKKyAgICAgICAgIyB3ZSBzdGFydCBhIHN0dWIgc2VydmVyIHRoYXQgaXMgYWN0dWFsbHkgYSBYTUxSUENsaWVudCB0aGF0IGNvbm5lY3RzIHRvIGEgcmVhbCBzZXJ2ZXIKKyAgICAgICAgc2VydmVyID0gc2VydmVybW9kdWxlLkJpdEJha2VYTUxSUENDbGllbnQoY29uZmlnUGFyYW1zLm9ic2VydmVfb25seSwgY29uZmlnUGFyYW1zLnhtbHJwY3Rva2VuKQorICAgICAgICBzZXJ2ZXIuc2F2ZUNvbm5lY3Rpb25EZXRhaWxzKGNvbmZpZ1BhcmFtcy5yZW1vdGVfc2VydmVyKQorCisKKyAgICBpZiBub3QgY29uZmlnUGFyYW1zLnNlcnZlcl9vbmx5OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXJ2ZXJfY29ubmVjdGlvbiA9IHNlcnZlci5lc3RhYmxpc2hDb25uZWN0aW9uKGZlYXR1cmVzZXQpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIgJXM6ICVzIiAlIChjb25maWdQYXJhbXMucmVtb3RlX3NlcnZlciwgc3RyKGUpKSkKKworICAgICAgICAjIFJlc3RvcmUgdGhlIGVudmlyb25tZW50IGluIGNhc2UgdGhlIFVJIG5lZWRzIGl0CisgICAgICAgIGZvciBrIGluIGNsZWFuZWR2YXJzOgorICAgICAgICAgICAgb3MuZW52aXJvbltrXSA9IGNsZWFuZWR2YXJzW2tdCisKKyAgICAgICAgbG9nZ2VyLnJlbW92ZUhhbmRsZXIoaGFuZGxlcikKKworCisgICAgICAgIGlmIGNvbmZpZ1BhcmFtcy5zdGF0dXNfb25seToKKyAgICAgICAgICAgIHNlcnZlcl9jb25uZWN0aW9uLnRlcm1pbmF0ZSgpCisgICAgICAgICAgICByZXR1cm4gMAorCisgICAgICAgIGlmIGNvbmZpZ1BhcmFtcy5raWxsX3NlcnZlcjoKKyAgICAgICAgICAgIHNlcnZlcl9jb25uZWN0aW9uLmNvbm5lY3Rpb24udGVybWluYXRlU2VydmVyKCkKKyAgICAgICAgICAgIGJiLmV2ZW50LnVpX3F1ZXVlID0gW10KKyAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHVpX21vZHVsZS5tYWluKHNlcnZlcl9jb25uZWN0aW9uLmNvbm5lY3Rpb24sIHNlcnZlcl9jb25uZWN0aW9uLmV2ZW50cywgY29uZmlnUGFyYW1zKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYmIuZXZlbnQudWlfcXVldWUgPSBbXQorICAgICAgICAgICAgc2VydmVyX2Nvbm5lY3Rpb24udGVybWluYXRlKCkKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiQml0YmFrZSBzZXJ2ZXIgYWRkcmVzczogJXMsIHNlcnZlciBwb3J0OiAlcyIgJSAoc2VydmVyLnNlcnZlckltcGwuaG9zdCwgc2VydmVyLnNlcnZlckltcGwucG9ydCkpCisgICAgICAgIHJldHVybiAwCisKKyAgICByZXR1cm4gMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tZXRob2Rwb29sLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tZXRob2Rwb29sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMmU5ZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL21ldGhvZHBvb2wucHkKQEAgLTAsMCArMSwyOSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMKKyMgQ29weXJpZ2h0IChDKSAgICAgICAyMDA2IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIGJiLnV0aWxzIGltcG9ydCBiZXR0ZXJfY29tcGlsZSwgYmV0dGVyX2V4ZWMKKworZGVmIGluc2VydF9tZXRob2QobW9kdWxlbmFtZSwgY29kZSwgZm4pOgorICAgICIiIgorICAgIEFkZCBjb2RlIG9mIGEgbW9kdWxlIHNob3VsZCBiZSBhZGRlZC4gVGhlIG1ldGhvZHMKKyAgICB3aWxsIGJlIHNpbXBseSBhZGRlZCwgbm8gY2hlY2tpbmcgd2lsbCBiZSBkb25lCisgICAgIiIiCisgICAgY29tcCA9IGJldHRlcl9jb21waWxlKGNvZGUsIG1vZHVsZW5hbWUsIGZuICkKKyAgICBiZXR0ZXJfZXhlYyhjb21wLCBOb25lLCBjb2RlLCBmbikKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tb25pdG9yZGlzay5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbW9uaXRvcmRpc2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY2NTIzYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbW9uaXRvcmRpc2sucHkKQEAgLTAsMCArMSwyNjMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIFJvYmVydCBZYW5nCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MsIGxvZ2dpbmcsIHJlLCBzeXMKK2ltcG9ydCBiYgorbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuTW9uaXRvciIpCisKK2RlZiBwcmludEVycihpbmZvKToKKyAgICBsb2dnZXIuZXJyb3IoIiVzXG4gICAgICAgRGlzayBzcGFjZSBtb25pdG9yIHdpbGwgTk9UIGJlIGVuYWJsZWQiICUgaW5mbykKKworZGVmIGNvbnZlcnRHTUsodW5pdCk6CisKKyAgICAiIiIgQ29udmVydCB0aGUgc3BhY2UgdW5pdCBHLCBNLCBLLCB0aGUgdW5pdCBpcyBjYXNlLWluc2Vuc2l0aXZlICIiIgorCisgICAgdW5pdEcgPSByZS5tYXRjaCgnKFsxLTldWzAtOV0qKVtnR11ccz8kJywgdW5pdCkKKyAgICBpZiB1bml0RzoKKyAgICAgICAgcmV0dXJuIGludCh1bml0Ry5ncm91cCgxKSkgKiAoMTAyNCAqKiAzKQorICAgIHVuaXRNID0gcmUubWF0Y2goJyhbMS05XVswLTldKilbbU1dXHM/JCcsIHVuaXQpCisgICAgaWYgdW5pdE06CisgICAgICAgIHJldHVybiBpbnQodW5pdE0uZ3JvdXAoMSkpICogKDEwMjQgKiogMikKKyAgICB1bml0SyA9IHJlLm1hdGNoKCcoWzEtOV1bMC05XSopW2tLXVxzPyQnLCB1bml0KQorICAgIGlmIHVuaXRLOgorICAgICAgICByZXR1cm4gaW50KHVuaXRLLmdyb3VwKDEpKSAqIDEwMjQKKyAgICB1bml0TiA9IHJlLm1hdGNoKCcoWzEtOV1bMC05XSopXHM/JCcsIHVuaXQpCisgICAgaWYgdW5pdE46CisgICAgICAgIHJldHVybiBpbnQodW5pdE4uZ3JvdXAoMSkpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworZGVmIGdldE1vdW50ZWREZXYocGF0aCk6CisKKyAgICAiIiIgR2V0IHRoZSBkZXZpY2UgbW91bnRlZCBhdCB0aGUgcGF0aCwgdXNlcyAvcHJvYy9tb3VudHMgIiIiCisKKyAgICAjIEdldCB0aGUgbW91bnQgcG9pbnQgb2YgdGhlIGZpbGVzeXN0ZW0gY29udGFpbmluZyBwYXRoCisgICAgIyBzdF9kZXYgaXMgdGhlIElEIG9mIGRldmljZSBjb250YWluaW5nIGZpbGUKKyAgICBwYXJlbnREZXYgPSBvcy5zdGF0KHBhdGgpLnN0X2RldgorICAgIGN1cnJlbnREZXYgPSBwYXJlbnREZXYKKyAgICAjIFdoZW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5J3MgZGV2aWNlIGlzIGRpZmZlcmVudCBmcm9tIHRoZQorICAgICMgcGFyZW50J3MsIHRoZW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIGEgbW91bnQgcG9pbnQKKyAgICB3aGlsZSBwYXJlbnREZXYgPT0gY3VycmVudERldjoKKyAgICAgICAgbW91bnRQb2ludCA9IHBhdGgKKyAgICAgICAgIyBVc2UgZGlybmFtZSB0byBnZXQgdGhlIHBhcmVudCdzIGRpcmVjdG9yeQorICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCisgICAgICAgICMgUmVhY2ggdGhlICIvIgorICAgICAgICBpZiBwYXRoID09IG1vdW50UG9pbnQ6CisgICAgICAgICAgICBicmVhaworICAgICAgICBwYXJlbnREZXY9IG9zLnN0YXQocGF0aCkuc3RfZGV2CisKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbigiL3Byb2MvbW91bnRzIiwgInIiKSBhcyBpZnA6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBpZnA6CisgICAgICAgICAgICAgICAgcHJvY0xpbmVzID0gbGluZS5yc3RyaXAoJ1xuJykuc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIHByb2NMaW5lc1sxXSA9PSBtb3VudFBvaW50OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvY0xpbmVzWzBdCisgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgIHBhc3MKKyAgICByZXR1cm4gTm9uZQorCitkZWYgZ2V0RGlza0RhdGEoQkJEaXJzLCBjb25maWd1cmF0aW9uKToKKworICAgICIiIlByZXBhcmUgZGlzayBkYXRhIGZvciBkaXNrIHNwYWNlIG1vbml0b3IiIiIKKworICAgICMgU2F2ZSB0aGUgZGV2aWNlIElEcywgbmVlZCB0aGUgSUQgdG8gYmUgdW5pcXVlICh0aGUgZGljdGlvbmFyeSdzIGtleSBpcworICAgICMgdW5pcXVlKSwgc28gdGhhdCB3aGVuIG1vcmUgdGhhbiBvbmUgZGlyZWN0b3J5IGlzIGxvY2F0ZWQgb24gdGhlIHNhbWUKKyAgICAjIGRldmljZSwgd2UganVzdCBtb25pdG9yIGl0IG9uY2UKKyAgICBkZXZEaWN0ID0ge30KKyAgICBmb3IgcGF0aFNwYWNlSW5vZGUgaW4gQkJEaXJzLnNwbGl0KCk6CisgICAgICAgICMgVGhlIGlucHV0IGZvcm1hdCBpczogImRpcixzcGFjZSxpbm9kZSIsIGRpciBpcyBhIG11c3QsIHNwYWNlCisgICAgICAgICMgYW5kIGlub2RlIGFyZSBvcHRpb25hbAorICAgICAgICBwYXRoU3BhY2VJbm9kZVJlID0gcmUubWF0Y2goJyhbXixdKiksKFteLF0qKSwoW14sXSopLD8oLiopJywgcGF0aFNwYWNlSW5vZGUpCisgICAgICAgIGlmIG5vdCBwYXRoU3BhY2VJbm9kZVJlOgorICAgICAgICAgICAgcHJpbnRFcnIoIkludmFsaWQgdmFsdWUgaW4gQkJfRElTS01PTl9ESVJTOiAlcyIgJSBwYXRoU3BhY2VJbm9kZSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgYWN0aW9uID0gcGF0aFNwYWNlSW5vZGVSZS5ncm91cCgxKQorICAgICAgICBpZiBhY3Rpb24gbm90IGluICgiQUJPUlQiLCAiU1RPUFRBU0tTIiwgIldBUk4iKToKKyAgICAgICAgICAgIHByaW50RXJyKCJVbmtub3duIGRpc2sgc3BhY2UgbW9uaXRvciBhY3Rpb246ICVzIiAlIGFjdGlvbikKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcGF0aCA9IG9zLnBhdGgucmVhbHBhdGgocGF0aFNwYWNlSW5vZGVSZS5ncm91cCgyKSkKKyAgICAgICAgaWYgbm90IHBhdGg6CisgICAgICAgICAgICBwcmludEVycigiSW52YWxpZCBwYXRoIHZhbHVlIGluIEJCX0RJU0tNT05fRElSUzogJXMiICUgcGF0aFNwYWNlSW5vZGUpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICMgVGhlIGRpc2sgc3BhY2Ugb3IgaW5vZGUgaXMgb3B0aW9uYWwsIGJ1dCBpdCBzaG91bGQgaGF2ZSBhIGNvcnJlY3QKKyAgICAgICAgIyB2YWx1ZSBvbmNlIGl0IGlzIHNwZWNpZmllZAorICAgICAgICBtaW5TcGFjZSA9IHBhdGhTcGFjZUlub2RlUmUuZ3JvdXAoMykKKyAgICAgICAgaWYgbWluU3BhY2U6CisgICAgICAgICAgICBtaW5TcGFjZSA9IGNvbnZlcnRHTUsobWluU3BhY2UpCisgICAgICAgICAgICBpZiBub3QgbWluU3BhY2U6CisgICAgICAgICAgICAgICAgcHJpbnRFcnIoIkludmFsaWQgZGlzayBzcGFjZSB2YWx1ZSBpbiBCQl9ESVNLTU9OX0RJUlM6ICVzIiAlIHBhdGhTcGFjZUlub2RlUmUuZ3JvdXAoMykpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgTm9uZSBtZWFucyB0aGF0IGl0IGlzIG5vdCBzcGVjaWZpZWQKKyAgICAgICAgICAgIG1pblNwYWNlID0gTm9uZQorCisgICAgICAgIG1pbklub2RlID0gcGF0aFNwYWNlSW5vZGVSZS5ncm91cCg0KQorICAgICAgICBpZiBtaW5Jbm9kZToKKyAgICAgICAgICAgIG1pbklub2RlID0gY29udmVydEdNSyhtaW5Jbm9kZSkKKyAgICAgICAgICAgIGlmIG5vdCBtaW5Jbm9kZToKKyAgICAgICAgICAgICAgICBwcmludEVycigiSW52YWxpZCBpbm9kZSB2YWx1ZSBpbiBCQl9ESVNLTU9OX0RJUlM6ICVzIiAlIHBhdGhTcGFjZUlub2RlUmUuZ3JvdXAoNCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgTm9uZSBtZWFucyB0aGF0IGl0IGlzIG5vdCBzcGVjaWZpZWQKKyAgICAgICAgICAgIG1pbklub2RlID0gTm9uZQorCisgICAgICAgIGlmIG1pblNwYWNlIGlzIE5vbmUgYW5kIG1pbklub2RlIGlzIE5vbmU6CisgICAgICAgICAgICBwcmludEVycigiTm8gZGlzayBzcGFjZSBvciBpbm9kZSB2YWx1ZSBpbiBmb3VuZCBCQl9ESVNLTU9OX0RJUlM6ICVzIiAlIHBhdGhTcGFjZUlub2RlKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgIyBta2RpciBmb3IgdGhlIGRpcmVjdG9yeSBzaW5jZSBpdCBtYXkgbm90IGV4aXN0LCBmb3IgZXhhbXBsZSB0aGUKKyAgICAgICAgIyBETF9ESVIgbWF5IG5vdCBleGlzdCBhdCB0aGUgdmVyeSBiZWdpbm5pbmcKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBhdGgpCisgICAgICAgIGRldiA9IGdldE1vdW50ZWREZXYocGF0aCkKKyAgICAgICAgIyBVc2UgcGF0aC9hY3Rpb24gYXMgdGhlIGtleQorICAgICAgICBkZXZEaWN0W29zLnBhdGguam9pbihwYXRoLCBhY3Rpb24pXSA9IFtkZXYsIG1pblNwYWNlLCBtaW5Jbm9kZV0KKworICAgIHJldHVybiBkZXZEaWN0CisKK2RlZiBnZXRJbnRlcnZhbChjb25maWd1cmF0aW9uKToKKworICAgICIiIiBHZXQgdGhlIGRpc2sgc3BhY2UgaW50ZXJ2YWwgIiIiCisKKyAgICAjIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDUwTSBhbmQgNUsuCisgICAgc3BhY2VEZWZhdWx0ID0gNTAgKiAxMDI0ICogMTAyNAorICAgIGlub2RlRGVmYXVsdCA9IDUgKiAxMDI0CisKKyAgICBpbnRlcnZhbCA9IGNvbmZpZ3VyYXRpb24uZ2V0VmFyKCJCQl9ESVNLTU9OX1dBUk5JTlRFUlZBTCIsIFRydWUpCisgICAgaWYgbm90IGludGVydmFsOgorICAgICAgICByZXR1cm4gc3BhY2VEZWZhdWx0LCBpbm9kZURlZmF1bHQKKyAgICBlbHNlOgorICAgICAgICAjIFRoZSBkaXNrIHNwYWNlIG9yIGlub2RlIGludGVydmFsIGlzIG9wdGlvbmFsLCBidXQgaXQgc2hvdWxkCisgICAgICAgICMgaGF2ZSBhIGNvcnJlY3QgdmFsdWUgb25jZSBpdCBpcyBzcGVjaWZpZWQKKyAgICAgICAgaW50ZXJ2YWxSZSA9IHJlLm1hdGNoKCcoW14sXSopLD9ccyooLiopJywgaW50ZXJ2YWwpCisgICAgICAgIGlmIGludGVydmFsUmU6CisgICAgICAgICAgICBpbnRlcnZhbFNwYWNlID0gaW50ZXJ2YWxSZS5ncm91cCgxKQorICAgICAgICAgICAgaWYgaW50ZXJ2YWxTcGFjZToKKyAgICAgICAgICAgICAgICBpbnRlcnZhbFNwYWNlID0gY29udmVydEdNSyhpbnRlcnZhbFNwYWNlKQorICAgICAgICAgICAgICAgIGlmIG5vdCBpbnRlcnZhbFNwYWNlOgorICAgICAgICAgICAgICAgICAgICBwcmludEVycigiSW52YWxpZCBkaXNrIHNwYWNlIGludGVydmFsIHZhbHVlIGluIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMOiAlcyIgJSBpbnRlcnZhbFJlLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbnRlcnZhbFNwYWNlID0gc3BhY2VEZWZhdWx0CisgICAgICAgICAgICBpbnRlcnZhbElub2RlID0gaW50ZXJ2YWxSZS5ncm91cCgyKQorICAgICAgICAgICAgaWYgaW50ZXJ2YWxJbm9kZToKKyAgICAgICAgICAgICAgICBpbnRlcnZhbElub2RlID0gY29udmVydEdNSyhpbnRlcnZhbElub2RlKQorICAgICAgICAgICAgICAgIGlmIG5vdCBpbnRlcnZhbElub2RlOgorICAgICAgICAgICAgICAgICAgICBwcmludEVycigiSW52YWxpZCBkaXNrIGlub2RlIGludGVydmFsIHZhbHVlIGluIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMOiAlcyIgJSBpbnRlcnZhbFJlLmdyb3VwKDIpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbnRlcnZhbElub2RlID0gaW5vZGVEZWZhdWx0CisgICAgICAgICAgICByZXR1cm4gaW50ZXJ2YWxTcGFjZSwgaW50ZXJ2YWxJbm9kZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnRFcnIoIkludmFsaWQgaW50ZXJ2YWwgdmFsdWUgaW4gQkJfRElTS01PTl9XQVJOSU5URVJWQUw6ICVzIiAlIGludGVydmFsKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKworY2xhc3MgZGlza01vbml0b3I6CisKKyAgICAiIiJQcmVwYXJlIHRoZSBkaXNrIHNwYWNlIG1vbml0b3IgZGF0YSIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZ3VyYXRpb24pOgorCisgICAgICAgIHNlbGYuZW5hYmxlTW9uaXRvciA9IEZhbHNlCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24KKworICAgICAgICBCQkRpcnMgPSBjb25maWd1cmF0aW9uLmdldFZhcigiQkJfRElTS01PTl9ESVJTIiwgVHJ1ZSkgb3IgTm9uZQorICAgICAgICBpZiBCQkRpcnM6CisgICAgICAgICAgICBzZWxmLmRldkRpY3QgPSBnZXREaXNrRGF0YShCQkRpcnMsIGNvbmZpZ3VyYXRpb24pCisgICAgICAgICAgICBpZiBzZWxmLmRldkRpY3Q6CisgICAgICAgICAgICAgICAgc2VsZi5zcGFjZUludGVydmFsLCBzZWxmLmlub2RlSW50ZXJ2YWwgPSBnZXRJbnRlcnZhbChjb25maWd1cmF0aW9uKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3BhY2VJbnRlcnZhbCBhbmQgc2VsZi5pbm9kZUludGVydmFsOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmVuYWJsZU1vbml0b3IgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICMgVGhlc2UgYXJlIGZvciBzYXZpbmcgdGhlIHByZXZpb3VzIGRpc2sgZnJlZSBzcGFjZSBhbmQgaW5vZGUsIHdlCisgICAgICAgICAgICAgICAgICAgICMgdXNlIHRoZW0gdG8gYXZvaWQgcHJpbnRpbmcgdG9vIG1hbnkgd2FybmluZyBtZXNzYWdlcworICAgICAgICAgICAgICAgICAgICBzZWxmLnByZUZyZWVTID0ge30KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmVGcmVlSSA9IHt9CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBmb3IgU1RPUFRBU0tTIGFuZCBBQk9SVCwgdG8gYXZvaWQgcHJpbnRpbmcgdGhlIG1lc3NhZ2UKKyAgICAgICAgICAgICAgICAgICAgIyByZXBlYXRlZGx5IHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YXNrcyB0byBmaW5pc2gKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VkID0ge30KKyAgICAgICAgICAgICAgICAgICAgZm9yIGsgaW4gc2VsZi5kZXZEaWN0OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmVGcmVlU1trXSA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJlRnJlZUlba10gPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZWRba10gPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNwYWNlSW50ZXJ2YWwgaXMgTm9uZSBhbmQgc2VsZi5pbm9kZUludGVydmFsIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVuYWJsZU1vbml0b3IgPSBGYWxzZQorCisgICAgZGVmIGNoZWNrKHNlbGYsIHJxKToKKworICAgICAgICAiIiIgVGFrZSBhY3Rpb24gZm9yIHRoZSBtb25pdG9yICIiIgorCisgICAgICAgIGlmIHNlbGYuZW5hYmxlTW9uaXRvcjoKKyAgICAgICAgICAgIGZvciBrIGluIHNlbGYuZGV2RGljdDoKKyAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKGspCisgICAgICAgICAgICAgICAgYWN0aW9uID0gb3MucGF0aC5iYXNlbmFtZShrKQorICAgICAgICAgICAgICAgIGRldiA9IHNlbGYuZGV2RGljdFtrXVswXQorICAgICAgICAgICAgICAgIG1pblNwYWNlID0gc2VsZi5kZXZEaWN0W2tdWzFdCisgICAgICAgICAgICAgICAgbWluSW5vZGUgPSBzZWxmLmRldkRpY3Rba11bMl0KKworICAgICAgICAgICAgICAgIHN0ID0gb3Muc3RhdHZmcyhwYXRoKQorCisgICAgICAgICAgICAgICAgIyBUaGUgZnJlZSBzcGFjZSwgZmxvYXQgcG9pbnQgbnVtYmVyCisgICAgICAgICAgICAgICAgZnJlZVNwYWNlID0gc3QuZl9iYXZhaWwgKiBzdC5mX2Zyc2l6ZQorCisgICAgICAgICAgICAgICAgaWYgbWluU3BhY2UgYW5kIGZyZWVTcGFjZSA8IG1pblNwYWNlOgorICAgICAgICAgICAgICAgICAgICAjIEFsd2F5cyBzaG93IHdhcm5pbmcsIHRoZSBzZWxmLmNoZWNrZWQgd291bGQgYWx3YXlzIGJlIEZhbHNlIGlmIHRoZSBhY3Rpb24gaXMgV0FSTgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnByZUZyZWVTW2tdID09IDAgb3Igc2VsZi5wcmVGcmVlU1trXSAtIGZyZWVTcGFjZSA+IHNlbGYuc3BhY2VJbnRlcnZhbCBhbmQgbm90IHNlbGYuY2hlY2tlZFtrXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJUaGUgZnJlZSBzcGFjZSBvZiAlcyAoJXMpIGlzIHJ1bm5pbmcgbG93ICglLjNmR0IgbGVmdCkiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0aCwgZGV2LCBmcmVlU3BhY2UgLyAxMDI0IC8gMTAyNCAvIDEwMjQuMCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByZUZyZWVTW2tdID0gZnJlZVNwYWNlCisKKyAgICAgICAgICAgICAgICAgICAgaWYgYWN0aW9uID09ICJTVE9QVEFTS1MiIGFuZCBub3Qgc2VsZi5jaGVja2VkW2tdOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJObyBuZXcgdGFza3MgY2FuIGJlIGV4ZWN1dGVkIHNpbmNlIHRoZSBkaXNrIHNwYWNlIG1vbml0b3IgYWN0aW9uIGlzIFwiU1RPUFRBU0tTXCIhIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlZFtrXSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJxLmZpbmlzaF9ydW5xdWV1ZShGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuRGlza0Z1bGwoZGV2LCAnZGlzaycsIGZyZWVTcGFjZSwgcGF0aCksIHNlbGYuY29uZmlndXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBhY3Rpb24gPT0gIkFCT1JUIiBhbmQgbm90IHNlbGYuY2hlY2tlZFtrXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiSW1tZWRpYXRlbHkgYWJvcnQgc2luY2UgdGhlIGRpc2sgc3BhY2UgbW9uaXRvciBhY3Rpb24gaXMgXCJBQk9SVFwiISIpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZWRba10gPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBycS5maW5pc2hfcnVucXVldWUoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuRGlza0Z1bGwoZGV2LCAnZGlzaycsIGZyZWVTcGFjZSwgcGF0aCksIHNlbGYuY29uZmlndXJhdGlvbikKKworICAgICAgICAgICAgICAgICMgVGhlIGZyZWUgaW5vZGVzLCBmbG9hdCBwb2ludCBudW1iZXIKKyAgICAgICAgICAgICAgICBmcmVlSW5vZGUgPSBzdC5mX2ZhdmFpbAorCisgICAgICAgICAgICAgICAgaWYgbWluSW5vZGUgYW5kIGZyZWVJbm9kZSA8IG1pbklub2RlOgorICAgICAgICAgICAgICAgICAgICAjIFNvbWUgZmlsZXN5c3RlbXMgdXNlIGR5bmFtaWMgaW5vZGVzIHNvIGNhbid0IHJ1biBvdXQKKyAgICAgICAgICAgICAgICAgICAgIyAoZS5nLiBidHJmcykuIFRoaXMgaXMgcmVwb3J0ZWQgYnkgdGhlIGlub2RlIGNvdW50IGJlaW5nIDAuCisgICAgICAgICAgICAgICAgICAgIGlmIHN0LmZfZmlsZXMgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGV2RGljdFtrXVsyXSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICMgQWx3YXlzIHNob3cgd2FybmluZywgdGhlIHNlbGYuY2hlY2tlZCB3b3VsZCBhbHdheXMgYmUgRmFsc2UgaWYgdGhlIGFjdGlvbiBpcyBXQVJOCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYucHJlRnJlZUlba10gPT0gMCBvciBzZWxmLnByZUZyZWVJW2tdIC0gZnJlZUlub2RlID4gc2VsZi5pbm9kZUludGVydmFsIGFuZCBub3Qgc2VsZi5jaGVja2VkW2tdOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlRoZSBmcmVlIGlub2RlIG9mICVzICglcykgaXMgcnVubmluZyBsb3cgKCUuM2ZLIGxlZnQpIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGgsIGRldiwgZnJlZUlub2RlIC8gMTAyNC4wKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJlRnJlZUlba10gPSBmcmVlSW5vZGUKKworICAgICAgICAgICAgICAgICAgICBpZiBhY3Rpb24gID09ICJTVE9QVEFTS1MiIGFuZCBub3Qgc2VsZi5jaGVja2VkW2tdOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJObyBuZXcgdGFza3MgY2FuIGJlIGV4ZWN1dGVkIHNpbmNlIHRoZSBkaXNrIHNwYWNlIG1vbml0b3IgYWN0aW9uIGlzIFwiU1RPUFRBU0tTXCIhIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlZFtrXSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJxLmZpbmlzaF9ydW5xdWV1ZShGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuRGlza0Z1bGwoZGV2LCAnaW5vZGUnLCBmcmVlSW5vZGUsIHBhdGgpLCBzZWxmLmNvbmZpZ3VyYXRpb24pCisgICAgICAgICAgICAgICAgICAgIGVsaWYgYWN0aW9uICA9PSAiQUJPUlQiIGFuZCBub3Qgc2VsZi5jaGVja2VkW2tdOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJJbW1lZGlhdGVseSBhYm9ydCBzaW5jZSB0aGUgZGlzayBzcGFjZSBtb25pdG9yIGFjdGlvbiBpcyBcIkFCT1JUXCIhIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlZFtrXSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJxLmZpbmlzaF9ydW5xdWV1ZShUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5EaXNrRnVsbChkZXYsICdpbm9kZScsIGZyZWVJbm9kZSwgcGF0aCksIHNlbGYuY29uZmlndXJhdGlvbikKKyAgICAgICAgcmV0dXJuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL21zZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbXNnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NmI1YWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL21zZy5weQpAQCAtMCwwICsxLDE5OSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnbXNnJyBpbXBsZW1lbnRhdGlvbgorCitNZXNzYWdlIGhhbmRsaW5nIGluZnJhc3RydWN0dXJlIGZvciBiaXRiYWtlCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwNiAgICAgICAgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBjb3B5CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGNvbGxlY3Rpb25zCitmcm9tIGl0ZXJ0b29scyBpbXBvcnQgZ3JvdXBieQoraW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgYmIKK2ltcG9ydCBiYi5ldmVudAorCitjbGFzcyBCQkxvZ0Zvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcik6CisgICAgIiIiRm9ybWF0dGVyIHdoaWNoIGVuc3VyZXMgdGhhdCBvdXIgJ3BsYWluJyBtZXNzYWdlcyAobG9nZ2luZy5JTkZPICsgMSkgYXJlIHVzZWQgYXMgaXMiIiIKKworICAgIERFQlVHMyA9IGxvZ2dpbmcuREVCVUcgLSAyCisgICAgREVCVUcyID0gbG9nZ2luZy5ERUJVRyAtIDEKKyAgICBERUJVRyA9IGxvZ2dpbmcuREVCVUcKKyAgICBWRVJCT1NFID0gbG9nZ2luZy5JTkZPIC0gMQorICAgIE5PVEUgPSBsb2dnaW5nLklORk8KKyAgICBQTEFJTiA9IGxvZ2dpbmcuSU5GTyArIDEKKyAgICBFUlJPUiA9IGxvZ2dpbmcuRVJST1IKKyAgICBXQVJOSU5HID0gbG9nZ2luZy5XQVJOSU5HCisgICAgQ1JJVElDQUwgPSBsb2dnaW5nLkNSSVRJQ0FMCisKKyAgICBsZXZlbG5hbWVzID0geworICAgICAgICBERUJVRzMgICA6ICdERUJVRycsCisgICAgICAgIERFQlVHMiAgIDogJ0RFQlVHJywKKyAgICAgICAgREVCVUcgICA6ICdERUJVRycsCisgICAgICAgIFZFUkJPU0U6ICdOT1RFJywKKyAgICAgICAgTk9URSAgICA6ICdOT1RFJywKKyAgICAgICAgUExBSU4gIDogJycsCisgICAgICAgIFdBUk5JTkcgOiAnV0FSTklORycsCisgICAgICAgIEVSUk9SICAgOiAnRVJST1InLAorICAgICAgICBDUklUSUNBTDogJ0VSUk9SJywKKyAgICB9CisKKyAgICBjb2xvcl9lbmFibGVkID0gRmFsc2UKKyAgICBCQVNFQ09MT1IsIEJMQUNLLCBSRUQsIEdSRUVOLCBZRUxMT1csIEJMVUUsIE1BR0VOVEEsIENZQU4sIFdISVRFID0gcmFuZ2UoMjksMzgpCisKKyAgICBDT0xPUlMgPSB7CisgICAgICAgIERFQlVHMyAgOiBDWUFOLAorICAgICAgICBERUJVRzIgIDogQ1lBTiwKKyAgICAgICAgREVCVUcgICA6IENZQU4sCisgICAgICAgIFZFUkJPU0UgOiBCQVNFQ09MT1IsCisgICAgICAgIE5PVEUgICAgOiBCQVNFQ09MT1IsCisgICAgICAgIFBMQUlOICAgOiBCQVNFQ09MT1IsCisgICAgICAgIFdBUk5JTkcgOiBZRUxMT1csCisgICAgICAgIEVSUk9SICAgOiBSRUQsCisgICAgICAgIENSSVRJQ0FMOiBSRUQsCisgICAgfQorCisgICAgQkxEID0gJ1wwMzNbMTslZG0nCisgICAgU1REID0gJ1wwMzNbJWRtJworICAgIFJTVCA9ICdcMDMzWzBtJworCisgICAgZGVmIGdldExldmVsTmFtZShzZWxmLCBsZXZlbG5vKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubGV2ZWxuYW1lc1tsZXZlbG5vXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLmxldmVsbmFtZXNbbGV2ZWxub10gPSB2YWx1ZSA9ICdMZXZlbCAlZCcgJSBsZXZlbG5vCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiBmb3JtYXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgcmVjb3JkLmxldmVsbmFtZSA9IHNlbGYuZ2V0TGV2ZWxOYW1lKHJlY29yZC5sZXZlbG5vKQorICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA9PSBzZWxmLlBMQUlOOgorICAgICAgICAgICAgbXNnID0gcmVjb3JkLmdldE1lc3NhZ2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5jb2xvcl9lbmFibGVkOgorICAgICAgICAgICAgICAgIHJlY29yZCA9IHNlbGYuY29sb3JpemUocmVjb3JkKQorICAgICAgICAgICAgbXNnID0gbG9nZ2luZy5Gb3JtYXR0ZXIuZm9ybWF0KHNlbGYsIHJlY29yZCkKKworICAgICAgICBpZiBoYXNhdHRyKHJlY29yZCwgJ2JiX2V4Y19pbmZvJyk6CisgICAgICAgICAgICBldHlwZSwgdmFsdWUsIHRiID0gcmVjb3JkLmJiX2V4Y19pbmZvCisgICAgICAgICAgICBmb3JtYXR0ZWQgPSBiYi5leGNlcHRpb25zLmZvcm1hdF9leGNlcHRpb24oZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQ9NSkKKyAgICAgICAgICAgIG1zZyArPSAnXG4nICsgJycuam9pbihmb3JtYXR0ZWQpCisgICAgICAgIHJldHVybiBtc2cKKworICAgIGRlZiBjb2xvcml6ZShzZWxmLCByZWNvcmQpOgorICAgICAgICBjb2xvciA9IHNlbGYuQ09MT1JTW3JlY29yZC5sZXZlbG5vXQorICAgICAgICBpZiBzZWxmLmNvbG9yX2VuYWJsZWQgYW5kIGNvbG9yIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVjb3JkID0gY29weS5jb3B5KHJlY29yZCkKKyAgICAgICAgICAgIHJlY29yZC5sZXZlbG5hbWUgPSAiIi5qb2luKFtzZWxmLkJMRCAlIGNvbG9yLCByZWNvcmQubGV2ZWxuYW1lLCBzZWxmLlJTVF0pCisgICAgICAgICAgICByZWNvcmQubXNnID0gIiIuam9pbihbc2VsZi5TVEQgJSBjb2xvciwgcmVjb3JkLm1zZywgc2VsZi5SU1RdKQorICAgICAgICByZXR1cm4gcmVjb3JkCisKKyAgICBkZWYgZW5hYmxlX2NvbG9yKHNlbGYpOgorICAgICAgICBzZWxmLmNvbG9yX2VuYWJsZWQgPSBUcnVlCisKK2NsYXNzIEJCTG9nRmlsdGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhhbmRsZXIsIGxldmVsLCBkZWJ1Z19kb21haW5zKToKKyAgICAgICAgc2VsZi5zdGRsZXZlbCA9IGxldmVsCisgICAgICAgIHNlbGYuZGVidWdfZG9tYWlucyA9IGRlYnVnX2RvbWFpbnMKKyAgICAgICAgbG9nbGV2ZWwgPSBsZXZlbAorICAgICAgICBmb3IgZG9tYWluIGluIGRlYnVnX2RvbWFpbnM6CisgICAgICAgICAgICBpZiBkZWJ1Z19kb21haW5zW2RvbWFpbl0gPCBsb2dsZXZlbDoKKyAgICAgICAgICAgICAgICBsb2dsZXZlbCA9IGRlYnVnX2RvbWFpbnNbZG9tYWluXQorICAgICAgICBoYW5kbGVyLnNldExldmVsKGxvZ2xldmVsKQorICAgICAgICBoYW5kbGVyLmFkZEZpbHRlcihzZWxmKQorCisgICAgZGVmIGZpbHRlcihzZWxmLCByZWNvcmQpOgorICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA+PSBzZWxmLnN0ZGxldmVsOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgcmVjb3JkLm5hbWUgaW4gc2VsZi5kZWJ1Z19kb21haW5zIGFuZCByZWNvcmQubGV2ZWxubyA+PSBzZWxmLmRlYnVnX2RvbWFpbnNbcmVjb3JkLm5hbWVdOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2NsYXNzIEJCTG9nRmlsdGVyU3RkRXJyKEJCTG9nRmlsdGVyKToKKyAgICBkZWYgZmlsdGVyKHNlbGYsIHJlY29yZCk6CisgICAgICAgIGlmIG5vdCBCQkxvZ0ZpbHRlci5maWx0ZXIoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA+PSBsb2dnaW5nLkVSUk9SOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2NsYXNzIEJCTG9nRmlsdGVyU3RkT3V0KEJCTG9nRmlsdGVyKToKKyAgICBkZWYgZmlsdGVyKHNlbGYsIHJlY29yZCk6CisgICAgICAgIGlmIG5vdCBCQkxvZ0ZpbHRlci5maWx0ZXIoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA8IGxvZ2dpbmcuRVJST1I6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworIyBNZXNzYWdlIGNvbnRyb2wgZnVuY3Rpb25zCisjCisKK2xvZ2dlckRlZmF1bHREZWJ1Z0xldmVsID0gMAorbG9nZ2VyRGVmYXVsdFZlcmJvc2UgPSBGYWxzZQorbG9nZ2VyVmVyYm9zZUxvZ3MgPSBGYWxzZQorbG9nZ2VyRGVmYXVsdERvbWFpbnMgPSBbXQorCitkZWYgaW5pdF9tc2djb25maWcodmVyYm9zZSwgZGVidWcsIGRlYnVnX2RvbWFpbnM9Tm9uZSk6CisgICAgIiIiCisgICAgU2V0IGRlZmF1bHQgdmVyYm9zaXR5IGFuZCBkZWJ1ZyBsZXZlbHMgY29uZmlnIHRoZSBsb2dnZXIKKyAgICAiIiIKKyAgICBiYi5tc2cubG9nZ2VyRGVmYXVsdERlYnVnTGV2ZWwgPSBkZWJ1ZworICAgIGJiLm1zZy5sb2dnZXJEZWZhdWx0VmVyYm9zZSA9IHZlcmJvc2UKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBiYi5tc2cubG9nZ2VyVmVyYm9zZUxvZ3MgPSBUcnVlCisgICAgaWYgZGVidWdfZG9tYWluczoKKyAgICAgICAgYmIubXNnLmxvZ2dlckRlZmF1bHREb21haW5zID0gZGVidWdfZG9tYWlucworICAgIGVsc2U6CisgICAgICAgIGJiLm1zZy5sb2dnZXJEZWZhdWx0RG9tYWlucyA9IFtdCisKK2RlZiBjb25zdHJ1Y3RMb2dPcHRpb25zKCk6CisgICAgZGVidWcgPSBsb2dnZXJEZWZhdWx0RGVidWdMZXZlbAorICAgIHZlcmJvc2UgPSBsb2dnZXJEZWZhdWx0VmVyYm9zZQorICAgIGRvbWFpbnMgPSBsb2dnZXJEZWZhdWx0RG9tYWlucworCisgICAgaWYgZGVidWc6CisgICAgICAgIGxldmVsID0gQkJMb2dGb3JtYXR0ZXIuREVCVUcgLSBkZWJ1ZyArIDEKKyAgICBlbGlmIHZlcmJvc2U6CisgICAgICAgIGxldmVsID0gQkJMb2dGb3JtYXR0ZXIuVkVSQk9TRQorICAgIGVsc2U6CisgICAgICAgIGxldmVsID0gQkJMb2dGb3JtYXR0ZXIuTk9URQorCisgICAgZGVidWdfZG9tYWlucyA9IHt9CisgICAgZm9yIChkb21haW5hcmcsIGl0ZXJhdG9yKSBpbiBncm91cGJ5KGRvbWFpbnMpOgorICAgICAgICBkbGV2ZWwgPSBsZW4odHVwbGUoaXRlcmF0b3IpKQorICAgICAgICBkZWJ1Z19kb21haW5zWyJCaXRCYWtlLiVzIiAlIGRvbWFpbmFyZ10gPSBsb2dnaW5nLkRFQlVHIC0gZGxldmVsICsgMQorICAgIHJldHVybiBsZXZlbCwgZGVidWdfZG9tYWlucworCitkZWYgYWRkRGVmYXVsdGxvZ0ZpbHRlcihoYW5kbGVyLCBjbHMgPSBCQkxvZ0ZpbHRlcik6CisgICAgbGV2ZWwsIGRlYnVnX2RvbWFpbnMgPSBjb25zdHJ1Y3RMb2dPcHRpb25zKCkKKworICAgIGNscyhoYW5kbGVyLCBsZXZlbCwgZGVidWdfZG9tYWlucykKKworIworIyBNZXNzYWdlIGhhbmRsaW5nIGZ1bmN0aW9ucworIworCitkZWYgZmF0YWwobXNnZG9tYWluLCBtc2cpOgorICAgIGlmIG1zZ2RvbWFpbjoKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuJXMiICUgbXNnZG9tYWluKQorICAgIGVsc2U6CisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKKyAgICBsb2dnZXIuY3JpdGljYWwobXNnKQorICAgIHN5cy5leGl0KDEpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL25hbWVkdHVwbGVfd2l0aF9hYmMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL25hbWVkdHVwbGVfd2l0aF9hYmMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJmMmZjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbmFtZWR0dXBsZV93aXRoX2FiYy5weQpAQCAtMCwwICsxLDI1NSBAQAorIyBodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81Nzc2MjktbmFtZWR0dXBsZWFiYy1hYnN0cmFjdC1iYXNlLWNsYXNzLW1peC1pbi1mb3ItbmFtZWQvCisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDExIEphbiBLYWxpc3pld3NraSAoenVvKS4gQXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KKworIiIiCituYW1lZHR1cGxlX3dpdGhfYWJjLnB5OgorKiBuYW1lZCB0dXBsZSBtaXgtaW4gKyBBQkMgKGFic3RyYWN0IGJhc2UgY2xhc3MpIHJlY2lwZSwKKyogd29ya3MgdW5kZXIgUHl0aG9uIDIuNiwgMi43IGFzIHdlbGwgYXMgMy54LgorCitJbXBvcnQgdGhpcyBtb2R1bGUgdG8gcGF0Y2ggY29sbGVjdGlvbnMubmFtZWR0dXBsZSgpIGZhY3RvcnkgZnVuY3Rpb24KKy0tIGVucmljaGluZyBpdCB3aXRoIHRoZSAnYWJjJyBhdHRyaWJ1dGUgKGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgKyBtaXgtaW4KK2ZvciBuYW1lZCB0dXBsZXMpIGFuZCBkZWNvcmF0aW5nIGl0IHdpdGggYSB3cmFwcGVyIHRoYXQgcmVnaXN0ZXJzIGVhY2gKK25ld2x5IGNyZWF0ZWQgbmFtZWQgdHVwbGUgYXMgYSBzdWJjbGFzcyBvZiBuYW1lZHR1cGxlLmFiYy4KKworSG93IHRvIGltcG9ydDoKKyAgICBpbXBvcnQgY29sbGVjdGlvbnMsIG5hbWVkdHVwbGVfd2l0aF9hYmMKK29yOgorICAgIGltcG9ydCBuYW1lZHR1cGxlX3dpdGhfYWJjCisgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorICAgICMgXiBpbiB0aGlzIHZhcmlhbnQgeW91IG11c3QgaW1wb3J0IG5hbWVkdHVwbGUgZnVuY3Rpb24KKyAgICAjICAgKmFmdGVyKiBpbXBvcnRpbmcgbmFtZWR0dXBsZV93aXRoX2FiYyBtb2R1bGUKK29yIHNpbXBseToKKyAgICBmcm9tIG5hbWVkdHVwbGVfd2l0aF9hYmMgaW1wb3J0IG5hbWVkdHVwbGUKKworU2ltcGxlIHVzYWdlIGV4YW1wbGU6CisgICAgY2xhc3MgQ3JlZGVudGlhbHMobmFtZWR0dXBsZS5hYmMpOgorICAgICAgICBfZmllbGRzID0gJ3VzZXJuYW1lIHBhc3N3b3JkJworICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAoJ3swLl9fY2xhc3NfXy5fX25hbWVfX30nCisgICAgICAgICAgICAgICAgICAgICcodXNlcm5hbWU9ezAudXNlcm5hbWV9LCBwYXNzd29yZD0uLi4pJy5mb3JtYXQoc2VsZikpCisgICAgcHJpbnQoQ3JlZGVudGlhbHMoImFsaWNlIiwgIkFsaWNlJ3MgcGFzc3dvcmQiKSkKKworRm9yIG1vcmUgYWR2YW5jZWQgZXhhbXBsZXMgLS0gc2VlIGJlbG93IHRoZSAiaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoiLgorIiIiCisKK2ltcG9ydCBjb2xsZWN0aW9ucworZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0cHJvcGVydHkKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcworZnJvbSBzeXMgaW1wb3J0IHZlcnNpb25faW5mbworCitfX2FsbF9fID0gKCduYW1lZHR1cGxlJywpCitfbmFtZWR0dXBsZSA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUKKworCitjbGFzcyBfTmFtZWRUdXBsZUFCQ01ldGEoQUJDTWV0YSk6CisgICAgJycnVGhlIG1ldGFjbGFzcyBmb3IgdGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgKyBtaXgtaW4gZm9yIG5hbWVkIHR1cGxlcy4nJycKKyAgICBkZWYgX19uZXdfXyhtY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlKToKKyAgICAgICAgZmllbGRzID0gbmFtZXNwYWNlLmdldCgnX2ZpZWxkcycpCisgICAgICAgIGZvciBiYXNlIGluIGJhc2VzOgorICAgICAgICAgICAgaWYgZmllbGRzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaWVsZHMgPSBnZXRhdHRyKGJhc2UsICdfZmllbGRzJywgTm9uZSkKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZmllbGRzLCBhYnN0cmFjdHByb3BlcnR5KToKKyAgICAgICAgICAgIGJhc2V0dXBsZSA9IF9uYW1lZHR1cGxlKG5hbWUsIGZpZWxkcykKKyAgICAgICAgICAgIGJhc2VzID0gKGJhc2V0dXBsZSwpICsgYmFzZXMKKyAgICAgICAgICAgIG5hbWVzcGFjZS5wb3AoJ19maWVsZHMnLCBOb25lKQorICAgICAgICAgICAgbmFtZXNwYWNlLnNldGRlZmF1bHQoJ19fZG9jX18nLCBiYXNldHVwbGUuX19kb2NfXykKKyAgICAgICAgICAgIG5hbWVzcGFjZS5zZXRkZWZhdWx0KCdfX3Nsb3RzX18nLCAoKSkKKyAgICAgICAgcmV0dXJuIEFCQ01ldGEuX19uZXdfXyhtY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlKQorCisKK2V4ZWMoCisgICAgIyBQeXRob24gMi54IG1ldGFjbGFzcyBkZWNsYXJhdGlvbiBzeW50YXgKKyAgICAiIiJjbGFzcyBfTmFtZWRUdXBsZUFCQyhvYmplY3QpOgorICAgICAgICAnJydUaGUgYWJzdHJhY3QgYmFzZSBjbGFzcyArIG1peC1pbiBmb3IgbmFtZWQgdHVwbGVzLicnJworICAgICAgICBfX21ldGFjbGFzc19fID0gX05hbWVkVHVwbGVBQkNNZXRhCisgICAgICAgIF9maWVsZHMgPSBhYnN0cmFjdHByb3BlcnR5KCkiIiIgaWYgdmVyc2lvbl9pbmZvWzBdIDwgMyBlbHNlCisgICAgIyBQeXRob24gMy54IG1ldGFjbGFzcyBkZWNsYXJhdGlvbiBzeW50YXgKKyAgICAiIiJjbGFzcyBfTmFtZWRUdXBsZUFCQyhtZXRhY2xhc3M9X05hbWVkVHVwbGVBQkNNZXRhKToKKyAgICAgICAgJycnVGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgKyBtaXgtaW4gZm9yIG5hbWVkIHR1cGxlcy4nJycKKyAgICAgICAgX2ZpZWxkcyA9IGFic3RyYWN0cHJvcGVydHkoKSIiIgorKQorCisKK19uYW1lZHR1cGxlLmFiYyA9IF9OYW1lZFR1cGxlQUJDCisjX05hbWVkVHVwbGVBQkMucmVnaXN0ZXIodHlwZSh2ZXJzaW9uX2luZm8pKSAgIyAoYW5kIHNpbWlsYXIsIGluIHRoZSBmdXR1cmUuLi4pCisKK0B3cmFwcyhfbmFtZWR0dXBsZSkKK2RlZiBuYW1lZHR1cGxlKCphcmdzLCAqKmt3YXJncyk6CisgICAgJycnTmFtZWQgdHVwbGUgZmFjdG9yeSB3aXRoIG5hbWVkdHVwbGUuYWJjIHN1YmNsYXNzIHJlZ2lzdHJhdGlvbi4nJycKKyAgICBjbHMgPSBfbmFtZWR0dXBsZSgqYXJncywgKiprd2FyZ3MpCisgICAgX05hbWVkVHVwbGVBQkMucmVnaXN0ZXIoY2xzKQorICAgIHJldHVybiBjbHMKKworY29sbGVjdGlvbnMubmFtZWR0dXBsZSA9IG5hbWVkdHVwbGUKKworCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKworICAgICcnJ0V4YW1wbGVzIGFuZCBleHBsYW5hdGlvbnMnJycKKworICAgICMgU2ltcGxlIHVzYWdlCisKKyAgICBjbGFzcyBNeVJlY29yZChuYW1lZHR1cGxlLmFiYyk6CisgICAgICAgIF9maWVsZHMgPSAneCB5IHonICAjIHN1Y2ggZm9ybSB3aWxsIGJlIHRyYW5zZm9ybWVkIGludG8gKCd4JywgJ3knLCAneicpCisgICAgICAgIGRlZiBfbXlfY3VzdG9tX21ldGhvZChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBsaXN0KHNlbGYuX2FzZGljdCgpLml0ZW1zKCkpCisgICAgIyAodGhlICdfZmllbGRzJyBhdHRyaWJ1dGUgYmVsb25ncyB0byB0aGUgbmFtZWQgdHVwbGUgcHVibGljIEFQSSBhbnl3YXkpCisKKyAgICByZWMgPSBNeVJlY29yZCgxLCAyLCAzKQorICAgIHByaW50KHJlYykKKyAgICBwcmludChyZWMuX215X2N1c3RvbV9tZXRob2QoKSkKKyAgICBwcmludChyZWMuX3JlcGxhY2UoeT0yMjIpKQorICAgIHByaW50KHJlYy5fcmVwbGFjZSh5PTIyMikuX215X2N1c3RvbV9tZXRob2QoKSkKKworICAgICMgQ3VzdG9tIGFic3RyYWN0IGNsYXNzZXMuLi4KKworICAgIGNsYXNzIE15QWJzdHJhY3RSZWNvcmQobmFtZWR0dXBsZS5hYmMpOgorICAgICAgICBkZWYgX215X2N1c3RvbV9tZXRob2Qoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gbGlzdChzZWxmLl9hc2RpY3QoKS5pdGVtcygpKQorCisgICAgdHJ5OgorICAgICAgICBNeUFic3RyYWN0UmVjb3JkKCkgICMgKGFic3RyYWN0IGNsYXNzZXMgY2Fubm90IGJlIGluc3RhbnRpYXRlZCkKKyAgICBleGNlcHQgVHlwZUVycm9yIGFzIGV4YzoKKyAgICAgICAgcHJpbnQoZXhjKQorCisgICAgY2xhc3MgQW5vdGhlckFic3RyYWN0UmVjb3JkKE15QWJzdHJhY3RSZWNvcmQpOgorICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAnPDw8ezB9Pj4+Jy5mb3JtYXQoc3VwZXIoQW5vdGhlckFic3RyYWN0UmVjb3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmKS5fX3N0cl9fKCkpCisKKyAgICAjIC4uLmFuZCB0aGVpciBub24tYWJzdHJhY3Qgc3ViY2xhc3NlcworCisgICAgY2xhc3MgTXlSZWNvcmQyKE15QWJzdHJhY3RSZWNvcmQpOgorICAgICAgICBfZmllbGRzID0gJ2EsIGInCisKKyAgICBjbGFzcyBNeVJlY29yZDMoQW5vdGhlckFic3RyYWN0UmVjb3JkKToKKyAgICAgICAgX2ZpZWxkcyA9ICdwJywgJ3EnLCAncicKKworICAgIHJlYzIgPSBNeVJlY29yZDIoJ2ZvbycsICdiYXInKQorICAgIHByaW50KHJlYzIpCisgICAgcHJpbnQocmVjMi5fbXlfY3VzdG9tX21ldGhvZCgpKQorICAgIHByaW50KHJlYzIuX3JlcGxhY2UoYj0yMjIpKQorICAgIHByaW50KHJlYzIuX3JlcGxhY2UoYj0yMjIpLl9teV9jdXN0b21fbWV0aG9kKCkpCisKKyAgICByZWMzID0gTXlSZWNvcmQzKCdmb28nLCAnYmFyJywgJ2JheicpCisgICAgcHJpbnQocmVjMykKKyAgICBwcmludChyZWMzLl9teV9jdXN0b21fbWV0aG9kKCkpCisgICAgcHJpbnQocmVjMy5fcmVwbGFjZShxPTIyMikpCisgICAgcHJpbnQocmVjMy5fcmVwbGFjZShxPTIyMikuX215X2N1c3RvbV9tZXRob2QoKSkKKworICAgIyBZb3UgY2FuIGFsc28gc3ViY2xhc3Mgbm9uLWFic3RyYWN0IG9uZXMuLi4KKworICAgIGNsYXNzIE15UmVjb3JkMzMoTXlSZWNvcmQzKToKKyAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gJzwgezAhcn0sIC4uLiwgezAhcn0gPicuZm9ybWF0KHNlbGYucCwgc2VsZi5yKQorCisgICAgcmVjMzMgPSBNeVJlY29yZDMzKCdmb28nLCAnYmFyJywgJ2JheicpCisgICAgcHJpbnQocmVjMzMpCisgICAgcHJpbnQocmVjMzMuX215X2N1c3RvbV9tZXRob2QoKSkKKyAgICBwcmludChyZWMzMy5fcmVwbGFjZShxPTIyMikpCisgICAgcHJpbnQocmVjMzMuX3JlcGxhY2UocT0yMjIpLl9teV9jdXN0b21fbWV0aG9kKCkpCisKKyAgICAjIC4uLmFuZCBldmVuIG92ZXJyaWRlIHRoZSBtYWdpYyAnX2ZpZWxkcycgYXR0cmlidXRlIGFnYWluCisKKyAgICBjbGFzcyBNeVJlY29yZDM0NShNeVJlY29yZDMpOgorICAgICAgICBfZmllbGRzID0gJ2UgZiBnIGggaSBqIGsnCisKKyAgICByZWMzNDUgPSBNeVJlY29yZDM0NSgxLCAyLCAzLCA0LCAzLCAyLCAxKQorICAgIHByaW50KHJlYzM0NSkKKyAgICBwcmludChyZWMzNDUuX215X2N1c3RvbV9tZXRob2QoKSkKKyAgICBwcmludChyZWMzNDUuX3JlcGxhY2UoZj0yMjIpKQorICAgIHByaW50KHJlYzM0NS5fcmVwbGFjZShmPTIyMikuX215X2N1c3RvbV9tZXRob2QoKSkKKworICAgICMgTWl4aW5nLWluIHNvbWUgb3RoZXIgY2xhc3NlcyBpcyBhbHNvIHBvc3NpYmxlOgorCisgICAgY2xhc3MgTXlNaXhJbihvYmplY3QpOgorICAgICAgICBkZWYgbWV0aG9kKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICJNeU1peEluLm1ldGhvZCgpIGNhbGxlZCIKKyAgICAgICAgZGVmIF9teV9jdXN0b21fbWV0aG9kKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICJNeU1peEluLl9teV9jdXN0b21fbWV0aG9kKCkgY2FsbGVkIgorICAgICAgICBkZWYgY291bnQoc2VsZiwgaXRlbSk6CisgICAgICAgICAgICByZXR1cm4gIk15TWl4SW4uY291bnQoezB9KSBjYWxsZWQiLmZvcm1hdChpdGVtKQorICAgICAgICBkZWYgX2FzZGljdChzZWxmKTogICMgKGNhbm5vdCBvdmVycmlkZSBhIG5hbWVkdHVwbGUgbWV0aG9kLCBzZWUgYmVsb3cpCisgICAgICAgICAgICByZXR1cm4gIk15TWl4SW4uX2FzZGljdCgpIGNhbGxlZCIKKworICAgIGNsYXNzIE15UmVjb3JkNChNeVJlY29yZDMzLCBNeU1peEluKTogICMgbWl4LWluIG9uIHRoZSByaWdodAorICAgICAgICBfZmllbGRzID0gJ2ogayBsIHgnCisKKyAgICBjbGFzcyBNeVJlY29yZDUoTXlNaXhJbiwgTXlSZWNvcmQzMyk6ICAjIG1peC1pbiBvbiB0aGUgbGVmdAorICAgICAgICBfZmllbGRzID0gJ2ogayBsIHggeScKKworICAgIHJlYzQgPSBNeVJlY29yZDQoMSwgMiwgMywgMikKKyAgICBwcmludChyZWM0KQorICAgIHByaW50KHJlYzQubWV0aG9kKCkpCisgICAgcHJpbnQocmVjNC5fbXlfY3VzdG9tX21ldGhvZCgpKSAgIyBNeVJlY29yZDMzJ3MKKyAgICBwcmludChyZWM0LmNvdW50KDIpKSAgIyB0dXBsZSdzCisgICAgcHJpbnQocmVjNC5fcmVwbGFjZShrPTIyMikpCisgICAgcHJpbnQocmVjNC5fcmVwbGFjZShrPTIyMikubWV0aG9kKCkpCisgICAgcHJpbnQocmVjNC5fcmVwbGFjZShrPTIyMikuX215X2N1c3RvbV9tZXRob2QoKSkgICMgTXlSZWNvcmQzMydzCisgICAgcHJpbnQocmVjNC5fcmVwbGFjZShrPTIyMikuY291bnQoOCkpICAjIHR1cGxlJ3MKKworICAgIHJlYzUgPSBNeVJlY29yZDUoMSwgMiwgMywgMiwgMSkKKyAgICBwcmludChyZWM1KQorICAgIHByaW50KHJlYzUubWV0aG9kKCkpCisgICAgcHJpbnQocmVjNS5fbXlfY3VzdG9tX21ldGhvZCgpKSAgIyBNeU1peEluJ3MKKyAgICBwcmludChyZWM1LmNvdW50KDIpKSAgIyBNeU1peEluJ3MKKyAgICBwcmludChyZWM1Ll9yZXBsYWNlKGs9MjIyKSkKKyAgICBwcmludChyZWM1Ll9yZXBsYWNlKGs9MjIyKS5tZXRob2QoKSkKKyAgICBwcmludChyZWM1Ll9yZXBsYWNlKGs9MjIyKS5fbXlfY3VzdG9tX21ldGhvZCgpKSAgIyBNeU1peEluJ3MKKyAgICBwcmludChyZWM1Ll9yZXBsYWNlKGs9MjIyKS5jb3VudCgyKSkgICMgTXlNaXhJbidzCisKKyAgICAjIE5vdGUgdGhhdCBiZWhhdmlvcjogdGhlIHN0YW5kYXJkIG5hbWVkdHVwbGUgbWV0aG9kcyBjYW5ub3QgYmUKKyAgICAjIG92ZXJyaWRkZW4gYnkgYSBmb3JlaWduIG1peC1pbiAtLSBldmVuIGlmIHRoZSBtaXgtaW4gaXMgZGVjbGFyZWQKKyAgICAjIGFzIHRoZSBsZWZ0bW9zdCBiYXNlIGNsYXNzIChidXQsIG9idmlvdXNseSwgeW91IGNhbiBvdmVycmlkZSB0aGVtCisgICAgIyBpbiB0aGUgZGVmaW5lZCBjbGFzcyBvciBpdHMgc3ViY2xhc3Nlcyk6CisKKyAgICBwcmludChyZWM0Ll9hc2RpY3QoKSkgICMgKHJldHVybnMgYSBkaWN0LCBub3QgIk15TWl4SW4uX2FzZGljdCgpIGNhbGxlZCIpCisgICAgcHJpbnQocmVjNS5fYXNkaWN0KCkpICAjIChyZXR1cm5zIGEgZGljdCwgbm90ICJNeU1peEluLl9hc2RpY3QoKSBjYWxsZWQiKQorCisgICAgY2xhc3MgTXlSZWNvcmQ2KE15UmVjb3JkMzMpOgorICAgICAgICBfZmllbGRzID0gJ2ogayBsIHggeSB6JworICAgICAgICBkZWYgX2FzZGljdChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAiTXlSZWNvcmQ2Ll9hc2RpY3QoKSBjYWxsZWQiCisgICAgcmVjNiA9IE15UmVjb3JkNigxLCAyLCAzLCAxLCAyLCAzKQorICAgIHByaW50KHJlYzYuX2FzZGljdCgpKSAgIyAodGhpcyByZXR1cm5zICJNeVJlY29yZDYuX2FzZGljdCgpIGNhbGxlZCIpCisKKyAgICAjIEFsbCB0aGF0IHJlY29yZCBjbGFzc2VzIGFyZSByZWFsIHN1YmNsYXNzZXMgb2YgbmFtZWR0dXBsZS5hYmM6CisKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZCwgbmFtZWR0dXBsZS5hYmMpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlBYnN0cmFjdFJlY29yZCwgbmFtZWR0dXBsZS5hYmMpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoQW5vdGhlckFic3RyYWN0UmVjb3JkLCBuYW1lZHR1cGxlLmFiYykKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDIsIG5hbWVkdHVwbGUuYWJjKQorICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkMywgbmFtZWR0dXBsZS5hYmMpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQzMywgbmFtZWR0dXBsZS5hYmMpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQzNDUsIG5hbWVkdHVwbGUuYWJjKQorICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkNCwgbmFtZWR0dXBsZS5hYmMpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQ1LCBuYW1lZHR1cGxlLmFiYykKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDYsIG5hbWVkdHVwbGUuYWJjKQorCisgICAgIyAuLi5idXQgYWJzdHJhY3Qgb25lcyBhcmUgbm90IHN1YmNsYXNzZXMgb2YgdHVwbGUKKyAgICAjIChhbmQgdGhpcyBpcyB3aGF0IHlvdSBwcm9iYWJseSB3YW50KToKKworICAgIGFzc2VydCBub3QgaXNzdWJjbGFzcyhNeUFic3RyYWN0UmVjb3JkLCB0dXBsZSkKKyAgICBhc3NlcnQgbm90IGlzc3ViY2xhc3MoQW5vdGhlckFic3RyYWN0UmVjb3JkLCB0dXBsZSkKKworICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkLCB0dXBsZSkKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDIsIHR1cGxlKQorICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkMywgdHVwbGUpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQzMywgdHVwbGUpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQzNDUsIHR1cGxlKQorICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkNCwgdHVwbGUpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQ1LCB0dXBsZSkKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDYsIHR1cGxlKQorCisgICAgIyBOYW1lZCB0dXBsZSBjbGFzc2VzIGNyZWF0ZWQgd2l0aCBuYW1lZHR1cGxlKCkgZmFjdG9yeSBmdW5jdGlvbgorICAgICMgKGluIHRoZSAidHJhZGl0aW9uYWwiIHdheSkgYXJlIHJlZ2lzdGVyZWQgYXMgInZpcnR1YWwiIHN1YmNsYXNzZXMKKyAgICAjIG9mIG5hbWVkdHVwbGUuYWJjOgorCisgICAgTXlUdXBsZSA9IG5hbWVkdHVwbGUoJ015VHVwbGUnLCAnYSBiIGMnKQorICAgIG10ID0gTXlUdXBsZSgxLCAyLCAzKQorICAgIGFzc2VydCBpc3N1YmNsYXNzKE15VHVwbGUsIG5hbWVkdHVwbGUuYWJjKQorICAgIGFzc2VydCBpc2luc3RhbmNlKG10LCBuYW1lZHR1cGxlLmFiYykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZWM3MWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTcwIEBACisiIiIKK0JpdEJha2UgUGFyc2VycworCitGaWxlIHBhcnNlcnMgZm9yIHRoZSBCaXRCYWtlIGJ1aWxkIHRvb2xzLgorCisiIiIKKworCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGhpbCBCbHVuZGVsbAorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworCitoYW5kbGVycyA9IFtdCisKK2ltcG9ydCBlcnJubworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHN0YXQKK2ltcG9ydCBiYgoraW1wb3J0IGJiLnV0aWxzCitpbXBvcnQgYmIuc2lnZ2VuCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLlBhcnNpbmciKQorCitjbGFzcyBQYXJzZUVycm9yKEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIHBhcnNpbmcgZmFpbHMiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnLCBmaWxlbmFtZSwgbGluZW5vPTApOgorICAgICAgICBzZWxmLm1zZyA9IG1zZworICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi5saW5lbm8gPSBsaW5lbm8KKyAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1zZywgZmlsZW5hbWUsIGxpbmVubykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmxpbmVubzoKKyAgICAgICAgICAgIHJldHVybiAiUGFyc2VFcnJvciBhdCAlczolZDogJXMiICUgKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZW5vLCBzZWxmLm1zZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiUGFyc2VFcnJvciBpbiAlczogJXMiICUgKHNlbGYuZmlsZW5hbWUsIHNlbGYubXNnKQorCitjbGFzcyBTa2lwUmVjaXBlKEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB0byBza2lwIHRoaXMgcmVjaXBlIiIiCisKK2NsYXNzIFNraXBQYWNrYWdlKFNraXBSZWNpcGUpOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgdG8gc2tpcCB0aGlzIHJlY2lwZSAodXNlIFNraXBSZWNpcGUgaW4gbmV3IGNvZGUpIiIiCisKK19fbXRpbWVfY2FjaGUgPSB7fQorZGVmIGNhY2hlZF9tdGltZShmKToKKyAgICBpZiBmIG5vdCBpbiBfX210aW1lX2NhY2hlOgorICAgICAgICBfX210aW1lX2NhY2hlW2ZdID0gb3Muc3RhdChmKVtzdGF0LlNUX01USU1FXQorICAgIHJldHVybiBfX210aW1lX2NhY2hlW2ZdCisKK2RlZiBjYWNoZWRfbXRpbWVfbm9lcnJvcihmKToKKyAgICBpZiBmIG5vdCBpbiBfX210aW1lX2NhY2hlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBfX210aW1lX2NhY2hlW2ZdID0gb3Muc3RhdChmKVtzdGF0LlNUX01USU1FXQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgcmV0dXJuIF9fbXRpbWVfY2FjaGVbZl0KKworZGVmIHVwZGF0ZV9tdGltZShmKToKKyAgICB0cnk6CisgICAgICAgIF9fbXRpbWVfY2FjaGVbZl0gPSBvcy5zdGF0KGYpW3N0YXQuU1RfTVRJTUVdCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIGlmIGYgaW4gX19tdGltZV9jYWNoZToKKyAgICAgICAgICAgIGRlbCBfX210aW1lX2NhY2hlW2ZdCisgICAgICAgIHJldHVybiAwCisgICAgcmV0dXJuIF9fbXRpbWVfY2FjaGVbZl0KKworZGVmIHVwZGF0ZV9jYWNoZShmKToKKyAgICBpZiBmIGluIF9fbXRpbWVfY2FjaGU6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVXBkYXRpbmcgbXRpbWUgY2FjaGUgZm9yICVzIiAlIGYpCisgICAgICAgIHVwZGF0ZV9tdGltZShmKQorCitkZWYgbWFya19kZXBlbmRlbmN5KGQsIGYpOgorICAgIGlmIGYuc3RhcnRzd2l0aCgnLi8nKToKKyAgICAgICAgZiA9ICIlcy8lcyIgJSAob3MuZ2V0Y3dkKCksIGZbMjpdKQorICAgIGRlcHMgPSAoZC5nZXRWYXIoJ19fZGVwZW5kcycsIEZhbHNlKSBvciBbXSkKKyAgICBzID0gKGYsIGNhY2hlZF9tdGltZV9ub2Vycm9yKGYpKQorICAgIGlmIHMgbm90IGluIGRlcHM6CisgICAgICAgIGRlcHMuYXBwZW5kKHMpCisgICAgICAgIGQuc2V0VmFyKCdfX2RlcGVuZHMnLCBkZXBzKQorCitkZWYgY2hlY2tfZGVwZW5kZW5jeShkLCBmKToKKyAgICBzID0gKGYsIGNhY2hlZF9tdGltZV9ub2Vycm9yKGYpKQorICAgIGRlcHMgPSAoZC5nZXRWYXIoJ19fZGVwZW5kcycsIEZhbHNlKSBvciBbXSkKKyAgICByZXR1cm4gcyBpbiBkZXBzCisgICAKK2RlZiBzdXBwb3J0cyhmbiwgZGF0YSk6CisgICAgIiIiUmV0dXJucyB0cnVlIGlmIHdlIGhhdmUgYSBoYW5kbGVyIGZvciB0aGlzIGZpbGUsIGZhbHNlIG90aGVyd2lzZSIiIgorICAgIGZvciBoIGluIGhhbmRsZXJzOgorICAgICAgICBpZiBoWydzdXBwb3J0cyddKGZuLCBkYXRhKToKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgcmV0dXJuIDAKKworZGVmIGhhbmRsZShmbiwgZGF0YSwgaW5jbHVkZSA9IDApOgorICAgICIiIkNhbGwgdGhlIGhhbmRsZXIgdGhhdCBpcyBhcHByb3ByaWF0ZSBmb3IgdGhpcyBmaWxlIiIiCisgICAgZm9yIGggaW4gaGFuZGxlcnM6CisgICAgICAgIGlmIGhbJ3N1cHBvcnRzJ10oZm4sIGRhdGEpOgorICAgICAgICAgICAgd2l0aCBkYXRhLmluY2hpc3RvcnkuaW5jbHVkZShmbik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGhbJ2hhbmRsZSddKGZuLCBkYXRhLCBpbmNsdWRlKQorICAgIHJhaXNlIFBhcnNlRXJyb3IoIm5vdCBhIEJpdEJha2UgZmlsZSIsIGZuKQorCitkZWYgaW5pdChmbiwgZGF0YSk6CisgICAgZm9yIGggaW4gaGFuZGxlcnM6CisgICAgICAgIGlmIGhbJ3N1cHBvcnRzJ10oZm4pOgorICAgICAgICAgICAgcmV0dXJuIGhbJ2luaXQnXShkYXRhKQorCitkZWYgaW5pdF9wYXJzZXIoZCk6CisgICAgYmIucGFyc2Uuc2lnZ2VuID0gYmIuc2lnZ2VuLmluaXQoZCkKKworZGVmIHJlc29sdmVfZmlsZShmbiwgZCk6CisgICAgaWYgbm90IG9zLnBhdGguaXNhYnMoZm4pOgorICAgICAgICBiYnBhdGggPSBkLmdldFZhcigiQkJQQVRIIiwgVHJ1ZSkKKyAgICAgICAgbmV3Zm4sIGF0dGVtcHRzID0gYmIudXRpbHMud2hpY2goYmJwYXRoLCBmbiwgaGlzdG9yeT1UcnVlKQorICAgICAgICBmb3IgYWYgaW4gYXR0ZW1wdHM6CisgICAgICAgICAgICBtYXJrX2RlcGVuZGVuY3koZCwgYWYpCisgICAgICAgIGlmIG5vdCBuZXdmbjoKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoZXJybm8uRU5PRU5ULCAiZmlsZSAlcyBub3QgZm91bmQgaW4gJXMiICUgKGZuLCBiYnBhdGgpKQorICAgICAgICBmbiA9IG5ld2ZuCisKKyAgICBtYXJrX2RlcGVuZGVuY3koZCwgZm4pCisgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGZuKToKKyAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FTk9FTlQsICJmaWxlICVzIG5vdCBmb3VuZCIgJSBmbikKKworICAgIHJldHVybiBmbgorCisjIFVzZWQgYnkgT3BlbkVtYmVkZGVkIG1ldGFkYXRhCitfX3BrZ3NwbGl0X2NhY2hlX189e30KK2RlZiB2YXJzX2Zyb21fZmlsZShteXBrZywgZCk6CisgICAgaWYgbm90IG15cGtnIG9yIG5vdCBteXBrZy5lbmRzd2l0aCgoIi5iYiIsICIuYmJhcHBlbmQiKSk6CisgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSwgTm9uZSkKKyAgICBpZiBteXBrZyBpbiBfX3BrZ3NwbGl0X2NhY2hlX186CisgICAgICAgIHJldHVybiBfX3BrZ3NwbGl0X2NhY2hlX19bbXlwa2ddCisKKyAgICBteWZpbGUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUobXlwa2cpKQorICAgIHBhcnRzID0gbXlmaWxlWzBdLnNwbGl0KCdfJykKKyAgICBfX3BrZ3NwbGl0X2NhY2hlX19bbXlwa2ddID0gcGFydHMKKyAgICBpZiBsZW4ocGFydHMpID4gMzoKKyAgICAgICAgcmFpc2UgUGFyc2VFcnJvcigiVW5hYmxlIHRvIGdlbmVyYXRlIGRlZmF1bHQgdmFyaWFibGVzIGZyb20gZmlsZW5hbWUgKHRvbyBtYW55IHVuZGVyc2NvcmVzKSIsIG15cGtnKQorICAgIGV4cCA9IDMgLSBsZW4ocGFydHMpCisgICAgdG1wbGlzdCA9IFtdCisgICAgd2hpbGUgZXhwICE9IDA6CisgICAgICAgIGV4cCAtPSAxCisgICAgICAgIHRtcGxpc3QuYXBwZW5kKE5vbmUpCisgICAgcGFydHMuZXh0ZW5kKHRtcGxpc3QpCisgICAgcmV0dXJuIHBhcnRzCisKK2RlZiBnZXRfZmlsZV9kZXBlbmRzKGQpOgorICAgICcnJ1JldHVybiB0aGUgZGVwZW5kZW50IGZpbGVzJycnCisgICAgZGVwX2ZpbGVzID0gW10KKyAgICBkZXBlbmRzID0gZC5nZXRWYXIoJ19fYmFzZV9kZXBlbmRzJywgVHJ1ZSkgb3IgW10KKyAgICBkZXBlbmRzID0gZGVwZW5kcyArIChkLmdldFZhcignX19kZXBlbmRzJywgVHJ1ZSkgb3IgW10pCisgICAgZm9yIChmbiwgXykgaW4gZGVwZW5kczoKKyAgICAgICAgZGVwX2ZpbGVzLmFwcGVuZChvcy5wYXRoLmFic3BhdGgoZm4pKQorICAgIHJldHVybiAiICIuam9pbihkZXBfZmlsZXMpCisKK2Zyb20gYmIucGFyc2UucGFyc2VfcHkgaW1wb3J0IF9fdmVyc2lvbl9fLCBDb25mSGFuZGxlciwgQkJIYW5kbGVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL2FzdC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvYXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZGIxODAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL2FzdC5weQpAQCAtMCwwICsxLDQ4MSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorIEFic3RyYWN0U3ludGF4VHJlZSBjbGFzc2VzIGZvciB0aGUgQml0YmFrZSBsYW5ndWFnZQorIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0IENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgUGhpbCBCbHVuZGVsbAorIyBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKK2Zyb20gZnV0dXJlX2J1aWx0aW5zIGltcG9ydCBmaWx0ZXIKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBiYgoraW1wb3J0IGl0ZXJ0b29scworZnJvbSBiYiBpbXBvcnQgbWV0aG9kcG9vbAorZnJvbSBiYi5wYXJzZSBpbXBvcnQgbG9nZ2VyCisKK19iYnZlcnNpb25zX3JlID0gcmUuY29tcGlsZShyIlxbKD9QPGZyb20+WzAtOV0rKS0oP1A8dG8+WzAtOV0rKVxdIikKKworY2xhc3MgU3RhdGVtZW50R3JvdXAobGlzdCk6CisgICAgZGVmIGV2YWwoc2VsZiwgZGF0YSk6CisgICAgICAgIGZvciBzdGF0ZW1lbnQgaW4gc2VsZjoKKyAgICAgICAgICAgIHN0YXRlbWVudC5ldmFsKGRhdGEpCisKK2NsYXNzIEFzdE5vZGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubyk6CisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAgICBzZWxmLmxpbmVubyA9IGxpbmVubworCitjbGFzcyBJbmNsdWRlTm9kZShBc3ROb2RlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubywgd2hhdF9maWxlLCBmb3JjZSk6CisgICAgICAgIEFzdE5vZGUuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgc2VsZi53aGF0X2ZpbGUgPSB3aGF0X2ZpbGUKKyAgICAgICAgc2VsZi5mb3JjZSA9IGZvcmNlCisKKyAgICBkZWYgZXZhbChzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIEluY2x1ZGUgdGhlIGZpbGUgYW5kIGV2YWx1YXRlIHRoZSBzdGF0ZW1lbnRzCisgICAgICAgICIiIgorICAgICAgICBzID0gZGF0YS5leHBhbmQoc2VsZi53aGF0X2ZpbGUpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ09ORiAlczolczogaW5jbHVkaW5nICVzIiwgc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lbm8sIHMpCisKKyAgICAgICAgIyBUT0RPOiBDYWNoZSB0aG9zZSBpbmNsdWRlcy4uLiBtYXliZSBub3QgaGVyZSB0aG91Z2gKKyAgICAgICAgaWYgc2VsZi5mb3JjZToKKyAgICAgICAgICAgIGJiLnBhcnNlLkNvbmZIYW5kbGVyLmluY2x1ZGUoc2VsZi5maWxlbmFtZSwgcywgc2VsZi5saW5lbm8sIGRhdGEsICJpbmNsdWRlIHJlcXVpcmVkIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLnBhcnNlLkNvbmZIYW5kbGVyLmluY2x1ZGUoc2VsZi5maWxlbmFtZSwgcywgc2VsZi5saW5lbm8sIGRhdGEsIEZhbHNlKQorCitjbGFzcyBFeHBvcnROb2RlKEFzdE5vZGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vLCB2YXIpOgorICAgICAgICBBc3ROb2RlLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIHNlbGYudmFyID0gdmFyCisKKyAgICBkZWYgZXZhbChzZWxmLCBkYXRhKToKKyAgICAgICAgZGF0YS5zZXRWYXJGbGFnKHNlbGYudmFyLCAiZXhwb3J0IiwgMSwgb3AgPSAnZXhwb3J0ZWQnKQorCitjbGFzcyBEYXRhTm9kZShBc3ROb2RlKToKKyAgICAiIiIKKyAgICBWYXJpb3VzIGRhdGEgcmVsYXRlZCB1cGRhdGVzLiBGb3IgdGhlIHNha2Ugb2Ygc2FuaXR5CisgICAgd2UgaGF2ZSBvbmUgY2xhc3MgZG9pbmcgYWxsIHRoaXMuIFRoaXMgbWVhbnMgdGhhdCBhbGwKKyAgICB0aGlzIG5lZWQgdG8gYmUgcmUtZXZhbHVhdGVkLi4uIHdlIG1pZ2h0IGJlIGFibGUgdG8gZG8KKyAgICB0aGF0IGZhc3RlciB3aXRoIG11bHRpcGxlIGNsYXNzZXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8sIGdyb3VwZCk6CisgICAgICAgIEFzdE5vZGUuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgc2VsZi5ncm91cGQgPSBncm91cGQKKworICAgIGRlZiBnZXRGdW5jKHNlbGYsIGtleSwgZGF0YSk6CisgICAgICAgIGlmICdmbGFnJyBpbiBzZWxmLmdyb3VwZCBhbmQgc2VsZi5ncm91cGRbJ2ZsYWcnXSAhPSBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGRhdGEuZ2V0VmFyRmxhZyhrZXksIHNlbGYuZ3JvdXBkWydmbGFnJ10sIG5vd2Vha2RlZmF1bHQ9VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmdldFZhcihrZXksIEZhbHNlLCBub3dlYWtkZWZhdWx0PVRydWUsIHBhcnNpbmc9VHJ1ZSkKKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICBncm91cGQgPSBzZWxmLmdyb3VwZAorICAgICAgICBrZXkgPSBncm91cGRbInZhciJdCisgICAgICAgIGxvZ2luZm8gPSB7CisgICAgICAgICAgICAndmFyaWFibGUnOiBrZXksCisgICAgICAgICAgICAnZmlsZSc6IHNlbGYuZmlsZW5hbWUsCisgICAgICAgICAgICAnbGluZSc6IHNlbGYubGluZW5vLAorICAgICAgICB9CisgICAgICAgIGlmICJleHAiIGluIGdyb3VwZCBhbmQgZ3JvdXBkWyJleHAiXSAhPSBOb25lOgorICAgICAgICAgICAgZGF0YS5zZXRWYXJGbGFnKGtleSwgImV4cG9ydCIsIDEsIG9wID0gJ2V4cG9ydGVkJywgKipsb2dpbmZvKQorCisgICAgICAgIG9wID0gInNldCIKKyAgICAgICAgaWYgInF1ZXMiIGluIGdyb3VwZCBhbmQgZ3JvdXBkWyJxdWVzIl0gIT0gTm9uZToKKyAgICAgICAgICAgIHZhbCA9IHNlbGYuZ2V0RnVuYyhrZXksIGRhdGEpCisgICAgICAgICAgICBvcCA9ICJzZXQ/IgorICAgICAgICAgICAgaWYgdmFsID09IE5vbmU6CisgICAgICAgICAgICAgICAgdmFsID0gZ3JvdXBkWyJ2YWx1ZSJdCisgICAgICAgIGVsaWYgImNvbG9uIiBpbiBncm91cGQgYW5kIGdyb3VwZFsiY29sb24iXSAhPSBOb25lOgorICAgICAgICAgICAgZSA9IGRhdGEuY3JlYXRlQ29weSgpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGUpCisgICAgICAgICAgICBvcCA9ICJpbW1lZGlhdGUiCisgICAgICAgICAgICB2YWwgPSBlLmV4cGFuZChncm91cGRbInZhbHVlIl0sIGtleSArICJbOj1dIikKKyAgICAgICAgZWxpZiAiYXBwZW5kIiBpbiBncm91cGQgYW5kIGdyb3VwZFsiYXBwZW5kIl0gIT0gTm9uZToKKyAgICAgICAgICAgIG9wID0gImFwcGVuZCIKKyAgICAgICAgICAgIHZhbCA9ICIlcyAlcyIgJSAoKHNlbGYuZ2V0RnVuYyhrZXksIGRhdGEpIG9yICIiKSwgZ3JvdXBkWyJ2YWx1ZSJdKQorICAgICAgICBlbGlmICJwcmVwZW5kIiBpbiBncm91cGQgYW5kIGdyb3VwZFsicHJlcGVuZCJdICE9IE5vbmU6CisgICAgICAgICAgICBvcCA9ICJwcmVwZW5kIgorICAgICAgICAgICAgdmFsID0gIiVzICVzIiAlIChncm91cGRbInZhbHVlIl0sIChzZWxmLmdldEZ1bmMoa2V5LCBkYXRhKSBvciAiIikpCisgICAgICAgIGVsaWYgInBvc3Rkb3QiIGluIGdyb3VwZCBhbmQgZ3JvdXBkWyJwb3N0ZG90Il0gIT0gTm9uZToKKyAgICAgICAgICAgIG9wID0gInBvc3Rkb3QiCisgICAgICAgICAgICB2YWwgPSAiJXMlcyIgJSAoKHNlbGYuZ2V0RnVuYyhrZXksIGRhdGEpIG9yICIiKSwgZ3JvdXBkWyJ2YWx1ZSJdKQorICAgICAgICBlbGlmICJwcmVkb3QiIGluIGdyb3VwZCBhbmQgZ3JvdXBkWyJwcmVkb3QiXSAhPSBOb25lOgorICAgICAgICAgICAgb3AgPSAicHJlZG90IgorICAgICAgICAgICAgdmFsID0gIiVzJXMiICUgKGdyb3VwZFsidmFsdWUiXSwgKHNlbGYuZ2V0RnVuYyhrZXksIGRhdGEpIG9yICIiKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbCA9IGdyb3VwZFsidmFsdWUiXQorCisgICAgICAgIGZsYWcgPSBOb25lCisgICAgICAgIGlmICdmbGFnJyBpbiBncm91cGQgYW5kIGdyb3VwZFsnZmxhZyddICE9IE5vbmU6CisgICAgICAgICAgICBmbGFnID0gZ3JvdXBkWydmbGFnJ10KKyAgICAgICAgZWxpZiBncm91cGRbImxhenlxdWVzIl06CisgICAgICAgICAgICBmbGFnID0gIl9kZWZhdWx0dmFsIgorCisgICAgICAgIGxvZ2luZm9bJ29wJ10gPSBvcAorICAgICAgICBsb2dpbmZvWydkZXRhaWwnXSA9IGdyb3VwZFsidmFsdWUiXQorCisgICAgICAgIGlmIGZsYWc6CisgICAgICAgICAgICBkYXRhLnNldFZhckZsYWcoa2V5LCBmbGFnLCB2YWwsICoqbG9naW5mbykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKGtleSwgdmFsLCBwYXJzaW5nPVRydWUsICoqbG9naW5mbykKKworY2xhc3MgTWV0aG9kTm9kZShBc3ROb2RlKToKKyAgICB0cl90YmwgPSBzdHJpbmcubWFrZXRyYW5zKCcvListQCUmJywgJ19fX19fX18nKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmNfbmFtZSwgYm9keSk6CisgICAgICAgIEFzdE5vZGUuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgc2VsZi5mdW5jX25hbWUgPSBmdW5jX25hbWUKKyAgICAgICAgc2VsZi5ib2R5ID0gYm9keQorCisgICAgZGVmIGV2YWwoc2VsZiwgZGF0YSk6CisgICAgICAgIHRleHQgPSAnXG4nLmpvaW4oc2VsZi5ib2R5KQorICAgICAgICBpZiBzZWxmLmZ1bmNfbmFtZSA9PSAiX19hbm9ueW1vdXMiOgorICAgICAgICAgICAgZnVuY25hbWUgPSAoIl9fYW5vbl8lc18lcyIgJSAoc2VsZi5saW5lbm8sIHNlbGYuZmlsZW5hbWUudHJhbnNsYXRlKE1ldGhvZE5vZGUudHJfdGJsKSkpCisgICAgICAgICAgICB0ZXh0ID0gImRlZiAlcyhkKTpcbiIgJSAoZnVuY25hbWUpICsgdGV4dAorICAgICAgICAgICAgYmIubWV0aG9kcG9vbC5pbnNlcnRfbWV0aG9kKGZ1bmNuYW1lLCB0ZXh0LCBzZWxmLmZpbGVuYW1lKQorICAgICAgICAgICAgYW5vbmZ1bmNzID0gZGF0YS5nZXRWYXIoJ19fQkJBTk9ORlVOQ1MnLCBGYWxzZSkgb3IgW10KKyAgICAgICAgICAgIGFub25mdW5jcy5hcHBlbmQoZnVuY25hbWUpCisgICAgICAgICAgICBkYXRhLnNldFZhcignX19CQkFOT05GVU5DUycsIGFub25mdW5jcykKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKGZ1bmNuYW1lLCB0ZXh0LCBwYXJzaW5nPVRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkYXRhLnNldFZhckZsYWcoc2VsZi5mdW5jX25hbWUsICJmdW5jIiwgMSkKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKHNlbGYuZnVuY19uYW1lLCB0ZXh0LCBwYXJzaW5nPVRydWUpCisKK2NsYXNzIFB5dGhvbk1ldGhvZE5vZGUoQXN0Tm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmN0aW9uLCBtb2R1bGVuYW1lLCBib2R5KToKKyAgICAgICAgQXN0Tm9kZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBzZWxmLmZ1bmN0aW9uID0gZnVuY3Rpb24KKyAgICAgICAgc2VsZi5tb2R1bGVuYW1lID0gbW9kdWxlbmFtZQorICAgICAgICBzZWxmLmJvZHkgPSBib2R5CisKKyAgICBkZWYgZXZhbChzZWxmLCBkYXRhKToKKyAgICAgICAgIyBOb3RlIHdlIHdpbGwgYWRkIHJvb3QgdG8gcGFyc2VkbWV0aG9kcyBhZnRlciBoYXZpbmcgcGFyc2UKKyAgICAgICAgIyAndGhpcycgZmlsZS4gVGhpcyBtZWFucyB3ZSB3aWxsIG5vdCBwYXJzZSBtZXRob2RzIGZyb20KKyAgICAgICAgIyBiYiBjbGFzc2VzIHR3aWNlCisgICAgICAgIHRleHQgPSAnXG4nLmpvaW4oc2VsZi5ib2R5KQorICAgICAgICBiYi5tZXRob2Rwb29sLmluc2VydF9tZXRob2Qoc2VsZi5tb2R1bGVuYW1lLCB0ZXh0LCBzZWxmLmZpbGVuYW1lKQorICAgICAgICBkYXRhLnNldFZhckZsYWcoc2VsZi5mdW5jdGlvbiwgImZ1bmMiLCAxKQorICAgICAgICBkYXRhLnNldFZhckZsYWcoc2VsZi5mdW5jdGlvbiwgInB5dGhvbiIsIDEpCisgICAgICAgIGRhdGEuc2V0VmFyKHNlbGYuZnVuY3Rpb24sIHRleHQsIHBhcnNpbmc9VHJ1ZSkKKworY2xhc3MgTWV0aG9kRmxhZ3NOb2RlKEFzdE5vZGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vLCBrZXksIG0pOgorICAgICAgICBBc3ROb2RlLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIHNlbGYua2V5ID0ga2V5CisgICAgICAgIHNlbGYubSA9IG0KKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBkYXRhLmdldFZhcihzZWxmLmtleSwgRmFsc2UpOgorICAgICAgICAgICAgIyBjbGVhbiB1cCBvbGQgdmVyc2lvbiBvZiB0aGlzIHBpZWNlIG9mIG1ldGFkYXRhLCBhcyBpdHMKKyAgICAgICAgICAgICMgZmxhZ3MgY291bGQgY2F1c2UgcHJvYmxlbXMKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhzZWxmLmtleSwgJ3B5dGhvbicsIE5vbmUpCisgICAgICAgICAgICBkYXRhLnNldFZhckZsYWcoc2VsZi5rZXksICdmYWtlcm9vdCcsIE5vbmUpCisgICAgICAgIGlmIHNlbGYubS5ncm91cCgicHkiKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhzZWxmLmtleSwgInB5dGhvbiIsICIxIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGEuZGVsVmFyRmxhZyhzZWxmLmtleSwgInB5dGhvbiIpCisgICAgICAgIGlmIHNlbGYubS5ncm91cCgiZnIiKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhzZWxmLmtleSwgImZha2Vyb290IiwgIjEiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0YS5kZWxWYXJGbGFnKHNlbGYua2V5LCAiZmFrZXJvb3QiKQorCitjbGFzcyBFeHBvcnRGdW5jc05vZGUoQXN0Tm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8sIGZucywgY2xhc3NuYW1lKToKKyAgICAgICAgQXN0Tm9kZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBzZWxmLm4gPSBmbnMuc3BsaXQoKQorICAgICAgICBzZWxmLmNsYXNzbmFtZSA9IGNsYXNzbmFtZQorCisgICAgZGVmIGV2YWwoc2VsZiwgZGF0YSk6CisKKyAgICAgICAgZm9yIGZ1bmMgaW4gc2VsZi5uOgorICAgICAgICAgICAgY2FsbGVkZnVuYyA9IHNlbGYuY2xhc3NuYW1lICsgIl8iICsgZnVuYworCisgICAgICAgICAgICBpZiBkYXRhLmdldFZhcihmdW5jLCBGYWxzZSkgYW5kIG5vdCBkYXRhLmdldFZhckZsYWcoZnVuYywgJ2V4cG9ydF9mdW5jJyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgZGF0YS5nZXRWYXIoZnVuYywgRmFsc2UpOgorICAgICAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhmdW5jLCAncHl0aG9uJywgTm9uZSkKKyAgICAgICAgICAgICAgICBkYXRhLnNldFZhckZsYWcoZnVuYywgJ2Z1bmMnLCBOb25lKQorCisgICAgICAgICAgICBmb3IgZmxhZyBpbiBbICJmdW5jIiwgInB5dGhvbiIgXToKKyAgICAgICAgICAgICAgICBpZiBkYXRhLmdldFZhckZsYWcoY2FsbGVkZnVuYywgZmxhZyk6CisgICAgICAgICAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhmdW5jLCBmbGFnLCBkYXRhLmdldFZhckZsYWcoY2FsbGVkZnVuYywgZmxhZykpCisgICAgICAgICAgICBmb3IgZmxhZyBpbiBbICJkaXJzIiBdOgorICAgICAgICAgICAgICAgIGlmIGRhdGEuZ2V0VmFyRmxhZyhmdW5jLCBmbGFnKToKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5zZXRWYXJGbGFnKGNhbGxlZGZ1bmMsIGZsYWcsIGRhdGEuZ2V0VmFyRmxhZyhmdW5jLCBmbGFnKSkKKworICAgICAgICAgICAgaWYgZGF0YS5nZXRWYXJGbGFnKGNhbGxlZGZ1bmMsICJweXRob24iKToKKyAgICAgICAgICAgICAgICBkYXRhLnNldFZhcihmdW5jLCAiICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnIiArIGNhbGxlZGZ1bmMgKyAiJywgZClcbiIsIHBhcnNpbmc9VHJ1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgIi0iIGluIHNlbGYuY2xhc3NuYW1lOgorICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJUaGUgY2xhc3NuYW1lICVzIGNvbnRhaW5zIGEgZGFzaCBjaGFyYWN0ZXIgYW5kIGlzIGNhbGxpbmcgYW4gc2ggZnVuY3Rpb24gJXMgdXNpbmcgRVhQT1JUX0ZVTkNUSU9OUy4gU2luY2UgYSBkYXNoIGlzIGlsbGVnYWwgaW4gc2ggZnVuY3Rpb24gbmFtZXMsIHRoaXMgY2Fubm90IHdvcmssIHBsZWFzZSByZW5hbWUgdGhlIGNsYXNzIG9yIGRvbid0IHVzZSBFWFBPUlRfRlVOQ1RJT05TLiIgJSAoc2VsZi5jbGFzc25hbWUsIGNhbGxlZGZ1bmMpKQorICAgICAgICAgICAgICAgIGRhdGEuc2V0VmFyKGZ1bmMsICIgICAgIiArIGNhbGxlZGZ1bmMgKyAiXG4iLCBwYXJzaW5nPVRydWUpCisgICAgICAgICAgICBkYXRhLnNldFZhckZsYWcoZnVuYywgJ2V4cG9ydF9mdW5jJywgJzEnKQorCitjbGFzcyBBZGRUYXNrTm9kZShBc3ROb2RlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubywgZnVuYywgYmVmb3JlLCBhZnRlcik6CisgICAgICAgIEFzdE5vZGUuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgc2VsZi5mdW5jID0gZnVuYworICAgICAgICBzZWxmLmJlZm9yZSA9IGJlZm9yZQorICAgICAgICBzZWxmLmFmdGVyID0gYWZ0ZXIKKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICBiYi5idWlsZC5hZGR0YXNrKHNlbGYuZnVuYywgc2VsZi5iZWZvcmUsIHNlbGYuYWZ0ZXIsIGRhdGEpCisKK2NsYXNzIERlbFRhc2tOb2RlKEFzdE5vZGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vLCBmdW5jKToKKyAgICAgICAgQXN0Tm9kZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jCisKKyAgICBkZWYgZXZhbChzZWxmLCBkYXRhKToKKyAgICAgICAgYmIuYnVpbGQuZGVsdGFzayhzZWxmLmZ1bmMsIGRhdGEpCisKK2NsYXNzIEJCSGFuZGxlck5vZGUoQXN0Tm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8sIGZucyk6CisgICAgICAgIEFzdE5vZGUuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgc2VsZi5ocyA9IGZucy5zcGxpdCgpCisKKyAgICBkZWYgZXZhbChzZWxmLCBkYXRhKToKKyAgICAgICAgYmJoYW5kcyA9IGRhdGEuZ2V0VmFyKCdfX0JCSEFORExFUlMnLCBGYWxzZSkgb3IgW10KKyAgICAgICAgZm9yIGggaW4gc2VsZi5oczoKKyAgICAgICAgICAgIGJiaGFuZHMuYXBwZW5kKGgpCisgICAgICAgICAgICBkYXRhLnNldFZhckZsYWcoaCwgImhhbmRsZXIiLCAxKQorICAgICAgICBkYXRhLnNldFZhcignX19CQkhBTkRMRVJTJywgYmJoYW5kcykKKworY2xhc3MgSW5oZXJpdE5vZGUoQXN0Tm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8sIGNsYXNzZXMpOgorICAgICAgICBBc3ROb2RlLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIHNlbGYuY2xhc3NlcyA9IGNsYXNzZXMKKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICBiYi5wYXJzZS5CQkhhbmRsZXIuaW5oZXJpdChzZWxmLmNsYXNzZXMsIHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZW5vLCBkYXRhKQorCitkZWYgaGFuZGxlSW5jbHVkZShzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBtLCBmb3JjZSk6CisgICAgc3RhdGVtZW50cy5hcHBlbmQoSW5jbHVkZU5vZGUoZmlsZW5hbWUsIGxpbmVubywgbS5ncm91cCgxKSwgZm9yY2UpKQorCitkZWYgaGFuZGxlRXhwb3J0KHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIG0pOgorICAgIHN0YXRlbWVudHMuYXBwZW5kKEV4cG9ydE5vZGUoZmlsZW5hbWUsIGxpbmVubywgbS5ncm91cCgxKSkpCisKK2RlZiBoYW5kbGVEYXRhKHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIGdyb3VwZCk6CisgICAgc3RhdGVtZW50cy5hcHBlbmQoRGF0YU5vZGUoZmlsZW5hbWUsIGxpbmVubywgZ3JvdXBkKSkKKworZGVmIGhhbmRsZU1ldGhvZChzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBmdW5jX25hbWUsIGJvZHkpOgorICAgIHN0YXRlbWVudHMuYXBwZW5kKE1ldGhvZE5vZGUoZmlsZW5hbWUsIGxpbmVubywgZnVuY19uYW1lLCBib2R5KSkKKworZGVmIGhhbmRsZVB5dGhvbk1ldGhvZChzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBmdW5jbmFtZSwgbW9kdWxlbmFtZSwgYm9keSk6CisgICAgc3RhdGVtZW50cy5hcHBlbmQoUHl0aG9uTWV0aG9kTm9kZShmaWxlbmFtZSwgbGluZW5vLCBmdW5jbmFtZSwgbW9kdWxlbmFtZSwgYm9keSkpCisKK2RlZiBoYW5kbGVNZXRob2RGbGFncyhzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBrZXksIG0pOgorICAgIHN0YXRlbWVudHMuYXBwZW5kKE1ldGhvZEZsYWdzTm9kZShmaWxlbmFtZSwgbGluZW5vLCBrZXksIG0pKQorCitkZWYgaGFuZGxlRXhwb3J0RnVuY3Moc3RhdGVtZW50cywgZmlsZW5hbWUsIGxpbmVubywgbSwgY2xhc3NuYW1lKToKKyAgICBzdGF0ZW1lbnRzLmFwcGVuZChFeHBvcnRGdW5jc05vZGUoZmlsZW5hbWUsIGxpbmVubywgbS5ncm91cCgxKSwgY2xhc3NuYW1lKSkKKworZGVmIGhhbmRsZUFkZFRhc2soc3RhdGVtZW50cywgZmlsZW5hbWUsIGxpbmVubywgbSk6CisgICAgZnVuYyA9IG0uZ3JvdXAoImZ1bmMiKQorICAgIGJlZm9yZSA9IG0uZ3JvdXAoImJlZm9yZSIpCisgICAgYWZ0ZXIgPSBtLmdyb3VwKCJhZnRlciIpCisgICAgaWYgZnVuYyBpcyBOb25lOgorICAgICAgICByZXR1cm4KKworICAgIHN0YXRlbWVudHMuYXBwZW5kKEFkZFRhc2tOb2RlKGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmMsIGJlZm9yZSwgYWZ0ZXIpKQorCitkZWYgaGFuZGxlRGVsVGFzayhzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBtKToKKyAgICBmdW5jID0gbS5ncm91cCgiZnVuYyIpCisgICAgaWYgZnVuYyBpcyBOb25lOgorICAgICAgICByZXR1cm4KKworICAgIHN0YXRlbWVudHMuYXBwZW5kKERlbFRhc2tOb2RlKGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmMpKQorCitkZWYgaGFuZGxlQkJIYW5kbGVycyhzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBtKToKKyAgICBzdGF0ZW1lbnRzLmFwcGVuZChCQkhhbmRsZXJOb2RlKGZpbGVuYW1lLCBsaW5lbm8sIG0uZ3JvdXAoMSkpKQorCitkZWYgaGFuZGxlSW5oZXJpdChzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBtKToKKyAgICBjbGFzc2VzID0gbS5ncm91cCgxKQorICAgIHN0YXRlbWVudHMuYXBwZW5kKEluaGVyaXROb2RlKGZpbGVuYW1lLCBsaW5lbm8sIGNsYXNzZXMpKQorCitkZWYgZmluYWxpemUoZm4sIGQsIHZhcmlhbnQgPSBOb25lKToKKyAgICBhbGxfaGFuZGxlcnMgPSB7fQorICAgIGZvciB2YXIgaW4gZC5nZXRWYXIoJ19fQkJIQU5ETEVSUycsIEZhbHNlKSBvciBbXToKKyAgICAgICAgIyB0cnkgdG8gYWRkIHRoZSBoYW5kbGVyCisgICAgICAgIGJiLmV2ZW50LnJlZ2lzdGVyKHZhciwgZC5nZXRWYXIodmFyLCBGYWxzZSksIChkLmdldFZhckZsYWcodmFyLCAiZXZlbnRtYXNrIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisKKyAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlKGZuKSwgZCkKKworICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhkKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoZCkKKyAgICBjb2RlID0gW10KKyAgICBmb3IgZnVuY25hbWUgaW4gZC5nZXRWYXIoIl9fQkJBTk9ORlVOQ1MiLCBGYWxzZSkgb3IgW106CisgICAgICAgIGNvZGUuYXBwZW5kKCIlcyhkKSIgJSBmdW5jbmFtZSkKKyAgICBiYi51dGlscy5iZXR0ZXJfZXhlYygiXG4iLmpvaW4oY29kZSksIHsiZCI6IGR9KQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoZCkKKworICAgIHRhc2tsaXN0ID0gZC5nZXRWYXIoJ19fQkJUQVNLUycsIEZhbHNlKSBvciBbXQorICAgIGJiLmJ1aWxkLmFkZF90YXNrcyh0YXNrbGlzdCwgZCkKKworICAgIGJiLnBhcnNlLnNpZ2dlbi5maW5hbGlzZShmbiwgZCwgdmFyaWFudCkKKworICAgIGQuc2V0VmFyKCdCQklOQ0xVREVEJywgYmIucGFyc2UuZ2V0X2ZpbGVfZGVwZW5kcyhkKSkKKworICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuUmVjaXBlUGFyc2VkKGZuKSwgZCkKKworZGVmIF9jcmVhdGVfdmFyaWFudHMoZGF0YXN0b3JlcywgbmFtZXMsIGZ1bmN0aW9uLCBvbmx5ZmluYWxpc2UpOgorICAgIGRlZiBjcmVhdGVfdmFyaWFudChuYW1lLCBvcmlnX2QsIGFyZyA9IE5vbmUpOgorICAgICAgICBpZiBvbmx5ZmluYWxpc2UgYW5kIG5hbWUgbm90IGluIG9ubHlmaW5hbGlzZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBuZXdfZCA9IGJiLmRhdGEuY3JlYXRlQ29weShvcmlnX2QpCisgICAgICAgIGZ1bmN0aW9uKGFyZyBvciBuYW1lLCBuZXdfZCkKKyAgICAgICAgZGF0YXN0b3Jlc1tuYW1lXSA9IG5ld19kCisKKyAgICBmb3IgdmFyaWFudCwgdmFyaWFudF9kIGluIGRhdGFzdG9yZXMuaXRlbXMoKToKKyAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICBpZiBub3QgdmFyaWFudDoKKyAgICAgICAgICAgICAgICAjIEJhc2VkIG9uIG1haW4gcmVjaXBlCisgICAgICAgICAgICAgICAgY3JlYXRlX3ZhcmlhbnQobmFtZSwgdmFyaWFudF9kKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjcmVhdGVfdmFyaWFudCgiJXMtJXMiICUgKHZhcmlhbnQsIG5hbWUpLCB2YXJpYW50X2QsIG5hbWUpCisKK2RlZiBfZXhwYW5kX3ZlcnNpb25zKHZlcnNpb25zKToKKyAgICBkZWYgZXhwYW5kX29uZSh2ZXJzaW9uLCBzdGFydCwgZW5kKToKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKHN0YXJ0LCBlbmQgKyAxKToKKyAgICAgICAgICAgIHZlciA9IF9iYnZlcnNpb25zX3JlLnN1YihzdHIoaSksIHZlcnNpb24sIDEpCisgICAgICAgICAgICB5aWVsZCB2ZXIKKworICAgIHZlcnNpb25zID0gaXRlcih2ZXJzaW9ucykKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB2ZXJzaW9uID0gbmV4dCh2ZXJzaW9ucykKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICBicmVhaworCisgICAgICAgIHJhbmdlX3ZlciA9IF9iYnZlcnNpb25zX3JlLnNlYXJjaCh2ZXJzaW9uKQorICAgICAgICBpZiBub3QgcmFuZ2VfdmVyOgorICAgICAgICAgICAgeWllbGQgdmVyc2lvbgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmV3dmVyc2lvbnMgPSBleHBhbmRfb25lKHZlcnNpb24sIGludChyYW5nZV92ZXIuZ3JvdXAoImZyb20iKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KHJhbmdlX3Zlci5ncm91cCgidG8iKSkpCisgICAgICAgICAgICB2ZXJzaW9ucyA9IGl0ZXJ0b29scy5jaGFpbihuZXd2ZXJzaW9ucywgdmVyc2lvbnMpCisKK2RlZiBtdWx0aV9maW5hbGl6ZShmbiwgZCk6CisgICAgYXBwZW5kcyA9IChkLmdldFZhcigiX19CQkFQUEVORCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgZm9yIGFwcGVuZCBpbiBhcHBlbmRzOgorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIkFwcGVuZGluZyAuYmJhcHBlbmQgZmlsZSAlcyB0byAlcyIsIGFwcGVuZCwgZm4pCisgICAgICAgIGJiLnBhcnNlLkJCSGFuZGxlci5oYW5kbGUoYXBwZW5kLCBkLCBUcnVlKQorCisgICAgb25seWZpbmFsaXNlID0gZC5nZXRWYXIoIl9fT05MWUZJTkFMSVNFIiwgRmFsc2UpCisKKyAgICBzYWZlX2QgPSBkCisgICAgZCA9IGJiLmRhdGEuY3JlYXRlQ29weShzYWZlX2QpCisgICAgdHJ5OgorICAgICAgICBmaW5hbGl6ZShmbiwgZCkKKyAgICBleGNlcHQgYmIucGFyc2UuU2tpcFJlY2lwZSBhcyBlOgorICAgICAgICBkLnNldFZhcigiX19TS0lQUEVEIiwgZS5hcmdzWzBdKQorICAgIGRhdGFzdG9yZXMgPSB7IiI6IHNhZmVfZH0KKworICAgIHZlcnNpb25zID0gKGQuZ2V0VmFyKCJCQlZFUlNJT05TIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiB2ZXJzaW9uczoKKyAgICAgICAgcHYgPSBvcmlnX3B2ID0gZC5nZXRWYXIoIlBWIiwgVHJ1ZSkKKyAgICAgICAgYmFzZXZlcnNpb25zID0ge30KKworICAgICAgICBkZWYgdmVyZnVuYyh2ZXIsIGQsIHB2X2QgPSBOb25lKToKKyAgICAgICAgICAgIGlmIHB2X2QgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBwdl9kID0gZAorCisgICAgICAgICAgICBvdmVycmlkZXMgPSBkLmdldFZhcigiT1ZFUlJJREVTIiwgVHJ1ZSkuc3BsaXQoIjoiKQorICAgICAgICAgICAgcHZfZC5zZXRWYXIoIlBWIiwgdmVyKQorICAgICAgICAgICAgb3ZlcnJpZGVzLmFwcGVuZCh2ZXIpCisgICAgICAgICAgICBicHYgPSBiYXNldmVyc2lvbnMuZ2V0KHZlcikgb3Igb3JpZ19wdgorICAgICAgICAgICAgcHZfZC5zZXRWYXIoIkJQViIsIGJwdikKKyAgICAgICAgICAgIG92ZXJyaWRlcy5hcHBlbmQoYnB2KQorICAgICAgICAgICAgZC5zZXRWYXIoIk9WRVJSSURFUyIsICI6Ii5qb2luKG92ZXJyaWRlcykpCisKKyAgICAgICAgdmVyc2lvbnMgPSBsaXN0KF9leHBhbmRfdmVyc2lvbnModmVyc2lvbnMpKQorICAgICAgICBmb3IgcG9zLCB2ZXJzaW9uIGluIGVudW1lcmF0ZShsaXN0KHZlcnNpb25zKSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcHYsIGJwdiA9IHZlcnNpb24uc3BsaXQoIjoiLCAyKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2ZXJzaW9uc1twb3NdID0gcHYKKyAgICAgICAgICAgICAgICBiYXNldmVyc2lvbnNbcHZdID0gYnB2CisKKyAgICAgICAgaWYgcHYgaW4gdmVyc2lvbnMgYW5kIG5vdCBiYXNldmVyc2lvbnMuZ2V0KHB2KToKKyAgICAgICAgICAgIHZlcnNpb25zLnJlbW92ZShwdikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHB2ID0gdmVyc2lvbnMucG9wKCkKKworICAgICAgICAgICAgIyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG91ciBleGlzdGluZyBtYWluIGRhdGFzdG9yZQorICAgICAgICAgICAgIyBoYXMgYWxyZWFkeSBiZWVuIGZpbmFsaXplZCB3aXRoIHRoZSBvbGQgUFYsIHdlIG5lZWQgb25lCisgICAgICAgICAgICAjIHRoYXQncyBiZWVuIGZpbmFsaXplZCB3aXRoIHRoZSBuZXcgUFYuCisgICAgICAgICAgICBkID0gYmIuZGF0YS5jcmVhdGVDb3B5KHNhZmVfZCkKKyAgICAgICAgICAgIHZlcmZ1bmMocHYsIGQsIHNhZmVfZCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmaW5hbGl6ZShmbiwgZCkKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5wYXJzZS5Ta2lwUmVjaXBlIGFzIGU6CisgICAgICAgICAgICAgICAgZC5zZXRWYXIoIl9fU0tJUFBFRCIsIGUuYXJnc1swXSkKKworICAgICAgICBfY3JlYXRlX3ZhcmlhbnRzKGRhdGFzdG9yZXMsIHZlcnNpb25zLCB2ZXJmdW5jLCBvbmx5ZmluYWxpc2UpCisKKyAgICBleHRlbmRlZCA9IGQuZ2V0VmFyKCJCQkNMQVNTRVhURU5EIiwgVHJ1ZSkgb3IgIiIKKyAgICBpZiBleHRlbmRlZDoKKyAgICAgICAgIyB0aGUgZm9sbG93aW5nIGlzIHRvIHN1cHBvcnQgYmJleHRlbmRzIHdpdGggYXJndW1lbnRzLCBmb3IgZS5nLiBtdWx0aWxpYgorICAgICAgICAjIGFuIGV4YW1wbGUgaXMgYXMgZm9sbG93czoKKyAgICAgICAgIyAgIEJCQ0xBU1NFWFRFTkQgPSAibXVsdGlsaWI6bGliMzIiCisgICAgICAgICMgaXQgd2lsbCBjcmVhdGUgZm9vLWxpYjMyLCBpbmhlcml0aW5nIG11bHRpbGliLmJiY2xhc3MgYW5kIHNldAorICAgICAgICAjIEJCRVhURU5EQ1VSUiB0byAibXVsdGlsaWIiIGFuZCBCQkVYVEVORFZBUklBTlQgdG8gImxpYjMyIgorICAgICAgICBleHRlbmRlZG1hcCA9IHt9CisgICAgICAgIHZhcmlhbnRtYXAgPSB7fQorCisgICAgICAgIGZvciBleHQgaW4gZXh0ZW5kZWQuc3BsaXQoKToKKyAgICAgICAgICAgIGVleHQgPSBleHQuc3BsaXQoJzonLCAyKQorICAgICAgICAgICAgaWYgbGVuKGVleHQpID4gMToKKyAgICAgICAgICAgICAgICBleHRlbmRlZG1hcFtleHRdID0gZWV4dFswXQorICAgICAgICAgICAgICAgIHZhcmlhbnRtYXBbZXh0XSA9IGVleHRbMV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXh0ZW5kZWRtYXBbZXh0XSA9IGV4dAorCisgICAgICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICAgICAgZGVmIGV4dGVuZGZ1bmMobmFtZSwgZCk6CisgICAgICAgICAgICBpZiBuYW1lICE9IGV4dGVuZGVkbWFwW25hbWVdOgorICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJCQkVYVEVORENVUlIiLCBleHRlbmRlZG1hcFtuYW1lXSkKKyAgICAgICAgICAgICAgICBkLnNldFZhcigiQkJFWFRFTkRWQVJJQU5UIiwgdmFyaWFudG1hcFtuYW1lXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZC5zZXRWYXIoIlBOIiwgIiVzLSVzIiAlIChwbiwgbmFtZSkpCisgICAgICAgICAgICBiYi5wYXJzZS5CQkhhbmRsZXIuaW5oZXJpdChleHRlbmRlZG1hcFtuYW1lXSwgZm4sIDAsIGQpCisKKyAgICAgICAgc2FmZV9kLnNldFZhcigiQkJDTEFTU0VYVEVORCIsIGV4dGVuZGVkKQorICAgICAgICBfY3JlYXRlX3ZhcmlhbnRzKGRhdGFzdG9yZXMsIGV4dGVuZGVkbWFwLmtleXMoKSwgZXh0ZW5kZnVuYywgb25seWZpbmFsaXNlKQorCisgICAgZm9yIHZhcmlhbnQsIHZhcmlhbnRfZCBpbiBkYXRhc3RvcmVzLml0ZXJpdGVtcygpOgorICAgICAgICBpZiB2YXJpYW50OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG5vdCBvbmx5ZmluYWxpc2Ugb3IgdmFyaWFudCBpbiBvbmx5ZmluYWxpc2U6CisgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKGZuLCB2YXJpYW50X2QsIHZhcmlhbnQpCisgICAgICAgICAgICBleGNlcHQgYmIucGFyc2UuU2tpcFJlY2lwZSBhcyBlOgorICAgICAgICAgICAgICAgIHZhcmlhbnRfZC5zZXRWYXIoIl9fU0tJUFBFRCIsIGUuYXJnc1swXSkKKworICAgIGlmIGxlbihkYXRhc3RvcmVzKSA+IDE6CisgICAgICAgIHZhcmlhbnRzID0gZmlsdGVyKE5vbmUsIGRhdGFzdG9yZXMuaXRlcmtleXMoKSkKKyAgICAgICAgc2FmZV9kLnNldFZhcigiX19WQVJJQU5UUyIsICIgIi5qb2luKHZhcmlhbnRzKSkKKworICAgIGRhdGFzdG9yZXNbIiJdID0gZAorICAgIHJldHVybiBkYXRhc3RvcmVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L0JCSGFuZGxlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQkJIYW5kbGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMDk3YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L0JCSGFuZGxlci5weQpAQCAtMCwwICsxLDI2NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCisgICBjbGFzcyBmb3IgaGFuZGxpbmcgLmJiIGZpbGVzCisKKyAgIFJlYWRzIGEgLmJiIGZpbGUgYW5kIG9idGFpbnMgaXRzIG1ldGFkYXRhCisKKyIiIgorCisKKyMgIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIFBoaWwgQmx1bmRlbGwKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CitpbXBvcnQgcmUsIGJiLCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBiYi5idWlsZCwgYmIudXRpbHMKK2Zyb20gYmIgaW1wb3J0IGRhdGEKKworZnJvbSAuIGltcG9ydCBDb25mSGFuZGxlcgorZnJvbSAuLiBpbXBvcnQgcmVzb2x2ZV9maWxlLCBhc3QsIGxvZ2dlciwgUGFyc2VFcnJvcgorZnJvbSAuQ29uZkhhbmRsZXIgaW1wb3J0IGluY2x1ZGUsIGluaXQKKworIyBGb3IgY29tcGF0aWJpbGl0eQorYmIuZGVwcmVjYXRlX2ltcG9ydChfX25hbWVfXywgImJiLnBhcnNlIiwgWyJ2YXJzX2Zyb21fZmlsZSJdKQorCitfX2Z1bmNfc3RhcnRfcmVnZXhwX18gICAgPSByZS5jb21waWxlKCByIigoKD9QPHB5PnB5dGhvbil8KD9QPGZyPmZha2Vyb290KSlccyopKig/UDxmdW5jPltcd1wuXC1cK1x7XH1cJF0rKT9ccypcKFxzKlwpXHMqeyQiICkKK19faW5oZXJpdF9yZWdleHBfXyAgICAgICA9IHJlLmNvbXBpbGUoIHIiaW5oZXJpdFxzKyguKykiICkKK19fZXhwb3J0X2Z1bmNfcmVnZXhwX18gICA9IHJlLmNvbXBpbGUoIHIiRVhQT1JUX0ZVTkNUSU9OU1xzKyguKykiICkKK19fYWRkdGFza19yZWdleHBfXyAgICAgICA9IHJlLmNvbXBpbGUoImFkZHRhc2tccysoP1A8ZnVuYz5cdyspXHMqKChiZWZvcmVccyooP1A8YmVmb3JlPigoLiooPz1hZnRlcikpfCguKikpKSl8KGFmdGVyXHMqKD9QPGFmdGVyPigoLiooPz1iZWZvcmUpKXwoLiopKSkpKSoiKQorX19kZWx0YXNrX3JlZ2V4cF9fICAgICAgID0gcmUuY29tcGlsZSgiZGVsdGFza1xzKyg/UDxmdW5jPlx3KykiKQorX19hZGRoYW5kbGVyX3JlZ2V4cF9fICAgID0gcmUuY29tcGlsZSggciJhZGRoYW5kbGVyXHMrKC4rKSIgKQorX19kZWZfcmVnZXhwX18gICAgICAgICAgID0gcmUuY29tcGlsZSggciJkZWZccysoXHcrKS4qOiIgKQorX19weXRob25fZnVuY19yZWdleHBfXyAgID0gcmUuY29tcGlsZSggciIoXHMrLiopfCheJCkiICkKKworCitfX2luZnVuY19fID0gW10KK19faW5weXRob25fXyA9IEZhbHNlCitfX2JvZHlfXyAgID0gW10KK19fY2xhc3NuYW1lX18gPSAiIgorCitjYWNoZWRfc3RhdGVtZW50cyA9IHt9CisKKyMgV2UgbmVlZCB0byBpbmRpY2F0ZSBFT0YgdG8gdGhlIGZlZWRlci4gVGhpcyBjb2RlIGlzIHNvIG1lc3N5IHRoYXQKKyMgZmFjdG9yaW5nIGl0IG91dCB0byBhIGNsb3NlX3BhcnNlX2ZpbGUgbWV0aG9kIGlzIG91dCBvZiBxdWVzdGlvbi4KKyMgV2Ugd2lsbCB1c2UgdGhlIElOX1BZVEhPTl9FT0YgYXMgYW4gaW5kaWNhdG9yIHRvIGp1c3QgY2xvc2UgdGhlIG1ldGhvZAorIworIyBUaGUgdHdvIHBhcnRzIHVzaW5nIGl0IGFyZSB0aWdodGx5IGludGVncmF0ZWQgYW55d2F5CitJTl9QWVRIT05fRU9GID0gLTk5OTk5OTk5OTk5OTkKKworCisKK2RlZiBzdXBwb3J0cyhmbiwgZCk6CisgICAgIiIiUmV0dXJuIFRydWUgaWYgZm4gaGFzIGEgc3VwcG9ydGVkIGV4dGVuc2lvbiIiIgorICAgIHJldHVybiBvcy5wYXRoLnNwbGl0ZXh0KGZuKVstMV0gaW4gWyIuYmIiLCAiLmJiY2xhc3MiLCAiLmluYyJdCisKK2RlZiBpbmhlcml0KGZpbGVzLCBmbiwgbGluZW5vLCBkKToKKyAgICBfX2luaGVyaXRfY2FjaGUgPSBkLmdldFZhcignX19pbmhlcml0X2NhY2hlJywgRmFsc2UpIG9yIFtdCisgICAgZmlsZXMgPSBkLmV4cGFuZChmaWxlcykuc3BsaXQoKQorICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhmaWxlKSBhbmQgbm90IGZpbGUuZW5kc3dpdGgoIi5iYmNsYXNzIik6CisgICAgICAgICAgICBmaWxlID0gb3MucGF0aC5qb2luKCdjbGFzc2VzJywgJyVzLmJiY2xhc3MnICUgZmlsZSkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhmaWxlKToKKyAgICAgICAgICAgIGJicGF0aCA9IGQuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKQorICAgICAgICAgICAgYWJzX2ZuLCBhdHRlbXB0cyA9IGJiLnV0aWxzLndoaWNoKGJicGF0aCwgZmlsZSwgaGlzdG9yeT1UcnVlKQorICAgICAgICAgICAgZm9yIGFmIGluIGF0dGVtcHRzOgorICAgICAgICAgICAgICAgIGlmIGFmICE9IGFic19mbjoKKyAgICAgICAgICAgICAgICAgICAgYmIucGFyc2UubWFya19kZXBlbmRlbmN5KGQsIGFmKQorICAgICAgICAgICAgaWYgYWJzX2ZuOgorICAgICAgICAgICAgICAgIGZpbGUgPSBhYnNfZm4KKworICAgICAgICBpZiBub3QgZmlsZSBpbiBfX2luaGVyaXRfY2FjaGU6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIkluaGVyaXRpbmcgJXMgKGZyb20gJXM6JWQpIiAlIChmaWxlLCBmbiwgbGluZW5vKSkKKyAgICAgICAgICAgIF9faW5oZXJpdF9jYWNoZS5hcHBlbmQoIGZpbGUgKQorICAgICAgICAgICAgZC5zZXRWYXIoJ19faW5oZXJpdF9jYWNoZScsIF9faW5oZXJpdF9jYWNoZSkKKyAgICAgICAgICAgIGluY2x1ZGUoZm4sIGZpbGUsIGxpbmVubywgZCwgImluaGVyaXQiKQorICAgICAgICAgICAgX19pbmhlcml0X2NhY2hlID0gZC5nZXRWYXIoJ19faW5oZXJpdF9jYWNoZScsIEZhbHNlKSBvciBbXQorCitkZWYgZ2V0X3N0YXRlbWVudHMoZmlsZW5hbWUsIGFic29sdXRlX2ZpbGVuYW1lLCBiYXNlX25hbWUpOgorICAgIGdsb2JhbCBjYWNoZWRfc3RhdGVtZW50cworCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gY2FjaGVkX3N0YXRlbWVudHNbYWJzb2x1dGVfZmlsZW5hbWVdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBmaWxlID0gb3BlbihhYnNvbHV0ZV9maWxlbmFtZSwgJ3InKQorICAgICAgICBzdGF0ZW1lbnRzID0gYXN0LlN0YXRlbWVudEdyb3VwKCkKKworICAgICAgICBsaW5lbm8gPSAwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBsaW5lbm8gPSBsaW5lbm8gKyAxCisgICAgICAgICAgICBzID0gZmlsZS5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBub3QgczogYnJlYWsKKyAgICAgICAgICAgIHMgPSBzLnJzdHJpcCgpCisgICAgICAgICAgICBmZWVkZXIobGluZW5vLCBzLCBmaWxlbmFtZSwgYmFzZV9uYW1lLCBzdGF0ZW1lbnRzKQorICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgaWYgX19pbnB5dGhvbl9fOgorICAgICAgICAgICAgIyBhZGQgYSBibGFuayBsaW5lIHRvIGNsb3NlIG91dCBhbnkgcHl0aG9uIGRlZmluaXRpb24KKyAgICAgICAgICAgIGZlZWRlcihJTl9QWVRIT05fRU9GLCAiIiwgZmlsZW5hbWUsIGJhc2VfbmFtZSwgc3RhdGVtZW50cykKKworICAgICAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgiLmJiY2xhc3MiKSBvciBmaWxlbmFtZS5lbmRzd2l0aCgiLmluYyIpOgorICAgICAgICAgICAgY2FjaGVkX3N0YXRlbWVudHNbYWJzb2x1dGVfZmlsZW5hbWVdID0gc3RhdGVtZW50cworICAgICAgICByZXR1cm4gc3RhdGVtZW50cworCitkZWYgaGFuZGxlKGZuLCBkLCBpbmNsdWRlKToKKyAgICBnbG9iYWwgX19mdW5jX3N0YXJ0X3JlZ2V4cF9fLCBfX2luaGVyaXRfcmVnZXhwX18sIF9fZXhwb3J0X2Z1bmNfcmVnZXhwX18sIF9fYWRkdGFza19yZWdleHBfXywgX19hZGRoYW5kbGVyX3JlZ2V4cF9fLCBfX2luZnVuY19fLCBfX2JvZHlfXywgX19yZXNpZHVlX18sIF9fY2xhc3NuYW1lX18KKyAgICBfX2JvZHlfXyA9IFtdCisgICAgX19pbmZ1bmNfXyA9IFtdCisgICAgX19jbGFzc25hbWVfXyA9ICIiCisgICAgX19yZXNpZHVlX18gPSBbXQorCisgICAgYmFzZV9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShmbikKKyAgICAocm9vdCwgZXh0KSA9IG9zLnBhdGguc3BsaXRleHQoYmFzZV9uYW1lKQorICAgIGluaXQoZCkKKworICAgIGlmIGV4dCA9PSAiLmJiY2xhc3MiOgorICAgICAgICBfX2NsYXNzbmFtZV9fID0gcm9vdAorICAgICAgICBfX2luaGVyaXRfY2FjaGUgPSBkLmdldFZhcignX19pbmhlcml0X2NhY2hlJywgRmFsc2UpIG9yIFtdCisgICAgICAgIGlmIG5vdCBmbiBpbiBfX2luaGVyaXRfY2FjaGU6CisgICAgICAgICAgICBfX2luaGVyaXRfY2FjaGUuYXBwZW5kKGZuKQorICAgICAgICAgICAgZC5zZXRWYXIoJ19faW5oZXJpdF9jYWNoZScsIF9faW5oZXJpdF9jYWNoZSkKKworICAgIGlmIGluY2x1ZGUgIT0gMDoKKyAgICAgICAgb2xkZmlsZSA9IGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpCisgICAgZWxzZToKKyAgICAgICAgb2xkZmlsZSA9IE5vbmUKKworICAgIGFic19mbiA9IHJlc29sdmVfZmlsZShmbiwgZCkKKworICAgIGlmIGluY2x1ZGU6CisgICAgICAgIGJiLnBhcnNlLm1hcmtfZGVwZW5kZW5jeShkLCBhYnNfZm4pCisKKyAgICAjIGFjdHVhbCBsb2FkaW5nCisgICAgc3RhdGVtZW50cyA9IGdldF9zdGF0ZW1lbnRzKGZuLCBhYnNfZm4sIGJhc2VfbmFtZSkKKworICAgICMgRE9ORSBXSVRIIFBBUlNJTkcuLi4gdGltZSB0byBldmFsdWF0ZQorICAgIGlmIGV4dCAhPSAiLmJiY2xhc3MiIGFuZCBhYnNfZm4gIT0gb2xkZmlsZToKKyAgICAgICAgZC5zZXRWYXIoJ0ZJTEUnLCBhYnNfZm4pCisKKyAgICB0cnk6CisgICAgICAgIHN0YXRlbWVudHMuZXZhbChkKQorICAgIGV4Y2VwdCBiYi5wYXJzZS5Ta2lwUmVjaXBlOgorICAgICAgICBiYi5kYXRhLnNldFZhcigiX19TS0lQUEVEIiwgVHJ1ZSwgZCkKKyAgICAgICAgaWYgaW5jbHVkZSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIHsgIiIgOiBkIH0KKworICAgIGlmIF9faW5mdW5jX186CisgICAgICAgIHJhaXNlIFBhcnNlRXJyb3IoIlNoZWxsIGZ1bmN0aW9uICVzIGlzIG5ldmVyIGNsb3NlZCIgJSBfX2luZnVuY19fWzBdLCBfX2luZnVuY19fWzFdLCBfX2luZnVuY19fWzJdKQorICAgIGlmIF9fcmVzaWR1ZV9fOgorICAgICAgICByYWlzZSBQYXJzZUVycm9yKCJMZWZ0b3ZlciB1bnBhcnNlZCAoaW5jb21wbGV0ZT8pIGRhdGEgJXMgZnJvbSAlcyIgJSBfX3Jlc2lkdWVfXywgZm4pCisKKyAgICBpZiBleHQgIT0gIi5iYmNsYXNzIiBhbmQgaW5jbHVkZSA9PSAwOgorICAgICAgICByZXR1cm4gYXN0Lm11bHRpX2ZpbmFsaXplKGZuLCBkKQorCisgICAgaWYgZXh0ICE9ICIuYmJjbGFzcyIgYW5kIG9sZGZpbGUgYW5kIGFic19mbiAhPSBvbGRmaWxlOgorICAgICAgICBkLnNldFZhcigiRklMRSIsIG9sZGZpbGUpCisKKyAgICByZXR1cm4gZAorCitkZWYgZmVlZGVyKGxpbmVubywgcywgZm4sIHJvb3QsIHN0YXRlbWVudHMpOgorICAgIGdsb2JhbCBfX2Z1bmNfc3RhcnRfcmVnZXhwX18sIF9faW5oZXJpdF9yZWdleHBfXywgX19leHBvcnRfZnVuY19yZWdleHBfXywgX19hZGR0YXNrX3JlZ2V4cF9fLCBfX2FkZGhhbmRsZXJfcmVnZXhwX18sIF9fZGVmX3JlZ2V4cF9fLCBfX3B5dGhvbl9mdW5jX3JlZ2V4cF9fLCBfX2lucHl0aG9uX18sIF9faW5mdW5jX18sIF9fYm9keV9fLCBiYiwgX19yZXNpZHVlX18sIF9fY2xhc3NuYW1lX18KKyAgICBpZiBfX2luZnVuY19fOgorICAgICAgICBpZiBzID09ICd9JzoKKyAgICAgICAgICAgIF9fYm9keV9fLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGFzdC5oYW5kbGVNZXRob2Qoc3RhdGVtZW50cywgZm4sIGxpbmVubywgX19pbmZ1bmNfX1swXSwgX19ib2R5X18pCisgICAgICAgICAgICBfX2luZnVuY19fID0gW10KKyAgICAgICAgICAgIF9fYm9keV9fID0gW10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9fYm9keV9fLmFwcGVuZChzKQorICAgICAgICByZXR1cm4KKworICAgIGlmIF9faW5weXRob25fXzoKKyAgICAgICAgbSA9IF9fcHl0aG9uX2Z1bmNfcmVnZXhwX18ubWF0Y2gocykKKyAgICAgICAgaWYgbSBhbmQgbGluZW5vICE9IElOX1BZVEhPTl9FT0Y6CisgICAgICAgICAgICBfX2JvZHlfXy5hcHBlbmQocykKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXN0LmhhbmRsZVB5dGhvbk1ldGhvZChzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBfX2lucHl0aG9uX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QsIF9fYm9keV9fKQorICAgICAgICAgICAgX19ib2R5X18gPSBbXQorICAgICAgICAgICAgX19pbnB5dGhvbl9fID0gRmFsc2UKKworICAgICAgICAgICAgaWYgbGluZW5vID09IElOX1BZVEhPTl9FT0Y6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICBpZiBzIGFuZCBzWzBdID09ICcjJzoKKyAgICAgICAgaWYgbGVuKF9fcmVzaWR1ZV9fKSAhPSAwIGFuZCBfX3Jlc2lkdWVfX1swXVswXSAhPSAiIyI6CisgICAgICAgICAgICBiYi5mYXRhbCgiVGhlcmUgaXMgYSBjb21tZW50IG9uIGxpbmUgJXMgb2YgZmlsZSAlcyAoJXMpIHdoaWNoIGlzIGluIHRoZSBtaWRkbGUgb2YgYSBtdWx0aWxpbmUgZXhwcmVzc2lvbi5cbkJpdGJha2UgdXNlZCB0byBpZ25vcmUgdGhlc2UgYnV0IG5vIGxvbmdlciBkb2VzIHNvLCBwbGVhc2UgZml4IHlvdXIgbWV0YWRhdGEgYXMgZXJyb3JzIGFyZSBsaWtlbHkgYXMgYSByZXN1bHQgb2YgdGhpcyBjaGFuZ2UuIiAlIChsaW5lbm8sIGZuLCBzKSkKKworICAgIGlmIGxlbihfX3Jlc2lkdWVfXykgIT0gMCBhbmQgX19yZXNpZHVlX19bMF1bMF0gPT0gIiMiIGFuZCAobm90IHMgb3Igc1swXSAhPSAiIyIpOgorICAgICAgICBiYi5mYXRhbCgiVGhlcmUgaXMgYSBjb25mdXNpbmcgbXVsdGlsaW5lLCBwYXJ0aWFsbHkgY29tbWVudGVkIGV4cHJlc3Npb24gb24gbGluZSAlcyBvZiBmaWxlICVzICglcykuXG5QbGVhc2UgY2xhcmlmeSB3aGV0aGVyIHRoaXMgaXMgYWxsIGEgY29tbWVudCBvciBzaG91bGQgYmUgcGFyc2VkLiIgJSAobGluZW5vLCBmbiwgcykpCisKKyAgICBpZiBzIGFuZCBzWy0xXSA9PSAnXFwnOgorICAgICAgICBfX3Jlc2lkdWVfXy5hcHBlbmQoc1s6LTFdKQorICAgICAgICByZXR1cm4KKworICAgIHMgPSAiIi5qb2luKF9fcmVzaWR1ZV9fKSArIHMKKyAgICBfX3Jlc2lkdWVfXyA9IFtdCisKKyAgICAjIFNraXAgZW1wdHkgbGluZXMKKyAgICBpZiBzID09ICcnOgorICAgICAgICByZXR1cm4gICAKKworICAgICMgU2tpcCBjb21tZW50cworICAgIGlmIHNbMF0gPT0gJyMnOgorICAgICAgICByZXR1cm4KKworICAgIG0gPSBfX2Z1bmNfc3RhcnRfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBfX2luZnVuY19fID0gW20uZ3JvdXAoImZ1bmMiKSBvciAiX19hbm9ueW1vdXMiLCBmbiwgbGluZW5vXQorICAgICAgICBhc3QuaGFuZGxlTWV0aG9kRmxhZ3Moc3RhdGVtZW50cywgZm4sIGxpbmVubywgX19pbmZ1bmNfX1swXSwgbSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX19kZWZfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBfX2JvZHlfXy5hcHBlbmQocykKKyAgICAgICAgX19pbnB5dGhvbl9fID0gbS5ncm91cCgxKQorCisgICAgICAgIHJldHVybgorCisgICAgbSA9IF9fZXhwb3J0X2Z1bmNfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBhc3QuaGFuZGxlRXhwb3J0RnVuY3Moc3RhdGVtZW50cywgZm4sIGxpbmVubywgbSwgX19jbGFzc25hbWVfXykKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX19hZGR0YXNrX3JlZ2V4cF9fLm1hdGNoKHMpCisgICAgaWYgbToKKyAgICAgICAgYXN0LmhhbmRsZUFkZFRhc2soc3RhdGVtZW50cywgZm4sIGxpbmVubywgbSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX19kZWx0YXNrX3JlZ2V4cF9fLm1hdGNoKHMpCisgICAgaWYgbToKKyAgICAgICAgYXN0LmhhbmRsZURlbFRhc2soc3RhdGVtZW50cywgZm4sIGxpbmVubywgbSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX19hZGRoYW5kbGVyX3JlZ2V4cF9fLm1hdGNoKHMpCisgICAgaWYgbToKKyAgICAgICAgYXN0LmhhbmRsZUJCSGFuZGxlcnMoc3RhdGVtZW50cywgZm4sIGxpbmVubywgbSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX19pbmhlcml0X3JlZ2V4cF9fLm1hdGNoKHMpCisgICAgaWYgbToKKyAgICAgICAgYXN0LmhhbmRsZUluaGVyaXQoc3RhdGVtZW50cywgZm4sIGxpbmVubywgbSkKKyAgICAgICAgcmV0dXJuCisKKyAgICByZXR1cm4gQ29uZkhhbmRsZXIuZmVlZGVyKGxpbmVubywgcywgZm4sIHN0YXRlbWVudHMpCisKKyMgQWRkIHVzIHRvIHRoZSBoYW5kbGVycyBsaXN0Citmcm9tIC4uIGltcG9ydCBoYW5kbGVycworaGFuZGxlcnMuYXBwZW5kKHsnc3VwcG9ydHMnOiBzdXBwb3J0cywgJ2hhbmRsZSc6IGhhbmRsZSwgJ2luaXQnOiBpbml0fSkKK2RlbCBoYW5kbGVycwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9Db25mSGFuZGxlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQ29uZkhhbmRsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJkNzViMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQ29uZkhhbmRsZXIucHkKQEAgLTAsMCArMSwxOTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorICAgY2xhc3MgZm9yIGhhbmRsaW5nIGNvbmZpZ3VyYXRpb24gZGF0YSBmaWxlcworCisgICBSZWFkcyBhIC5jb25mIGZpbGUgYW5kIG9idGFpbnMgaXRzIG1ldGFkYXRhCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGhpbCBCbHVuZGVsbAorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGVycm5vCitpbXBvcnQgcmUKK2ltcG9ydCBvcworaW1wb3J0IGJiLnV0aWxzCitmcm9tIGJiLnBhcnNlIGltcG9ydCBQYXJzZUVycm9yLCByZXNvbHZlX2ZpbGUsIGFzdCwgbG9nZ2VyLCBoYW5kbGUKKworX19jb25maWdfcmVnZXhwX18gID0gcmUuY29tcGlsZSggciIiIgorICAgIF4KKyAgICAoP1A8ZXhwPmV4cG9ydFxzKik/CisgICAgKD9QPHZhcj5bYS16QS1aMC05XC1+XysuJHt9L10rPykKKyAgICAoXFsoP1A8ZmxhZz5bYS16QS1aMC05XC1fKy5dKylcXSk/CisKKyAgICBccyogKAorICAgICAgICAoP1A8Y29sb24+Oj0pIHwKKyAgICAgICAgKD9QPGxhenlxdWVzPlw/XD89KSB8CisgICAgICAgICg/UDxxdWVzPlw/PSkgfAorICAgICAgICAoP1A8YXBwZW5kPlwrPSkgfAorICAgICAgICAoP1A8cHJlcGVuZD49XCspIHwKKyAgICAgICAgKD9QPHByZWRvdD49XC4pIHwKKyAgICAgICAgKD9QPHBvc3Rkb3Q+XC49KSB8CisgICAgICAgID0KKyAgICApIFxzKgorCisgICAgKD8hJ1teJ10qJ1teJ10qJyQpCisgICAgKD8hXCJbXlwiXSpcIlteXCJdKlwiJCkKKyAgICAoP1A8YXBvPlsnXCJdKQorICAgICg/UDx2YWx1ZT4uKikKKyAgICAoP1A9YXBvKQorICAgICQKKyAgICAiIiIsIHJlLlgpCitfX2luY2x1ZGVfcmVnZXhwX18gPSByZS5jb21waWxlKCByImluY2x1ZGVccysoLispIiApCitfX3JlcXVpcmVfcmVnZXhwX18gPSByZS5jb21waWxlKCByInJlcXVpcmVccysoLispIiApCitfX2V4cG9ydF9yZWdleHBfXyA9IHJlLmNvbXBpbGUoIHIiZXhwb3J0XHMrKFthLXpBLVowLTlcLV8rLiR7fS9dKykkIiApCisKK2RlZiBpbml0KGRhdGEpOgorICAgIHRvcGRpciA9IGRhdGEuZ2V0VmFyKCdUT1BESVInLCBGYWxzZSkKKyAgICBpZiBub3QgdG9wZGlyOgorICAgICAgICBkYXRhLnNldFZhcignVE9QRElSJywgb3MuZ2V0Y3dkKCkpCisKKworZGVmIHN1cHBvcnRzKGZuLCBkKToKKyAgICByZXR1cm4gZm5bLTU6XSA9PSAiLmNvbmYiCisKK2RlZiBpbmNsdWRlKHBhcmVudGZuLCBmbiwgbGluZW5vLCBkYXRhLCBlcnJvcl9vdXQpOgorICAgICIiIgorICAgIGVycm9yX291dDogQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgdmVyYiAoZS5nLiAiaW5jbHVkZSIsICJpbmhlcml0IikgdG8gYmUKKyAgICB1c2VkIGluIGEgUGFyc2VFcnJvciB0aGF0IHdpbGwgYmUgcmFpc2VkIGlmIHRoZSBmaWxlIHRvIGJlIGluY2x1ZGVkIGNvdWxkCisgICAgbm90IGJlIGluY2x1ZGVkLiBTcGVjaWZ5IEZhbHNlIHRvIGF2b2lkIHJhaXNpbmcgYW4gZXJyb3IgaW4gdGhpcyBjYXNlLgorICAgICIiIgorICAgIGlmIHBhcmVudGZuID09IGZuOiAjIHByZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBmbiA9IGRhdGEuZXhwYW5kKGZuKQorICAgIHBhcmVudGZuID0gZGF0YS5leHBhbmQocGFyZW50Zm4pCisKKyAgICBpZiBub3Qgb3MucGF0aC5pc2Ficyhmbik6CisgICAgICAgIGRuYW1lID0gb3MucGF0aC5kaXJuYW1lKHBhcmVudGZuKQorICAgICAgICBiYnBhdGggPSAiJXM6JXMiICUgKGRuYW1lLCBkYXRhLmdldFZhcigiQkJQQVRIIiwgVHJ1ZSkpCisgICAgICAgIGFic19mbiwgYXR0ZW1wdHMgPSBiYi51dGlscy53aGljaChiYnBhdGgsIGZuLCBoaXN0b3J5PVRydWUpCisgICAgICAgIGlmIGFic19mbiBhbmQgYmIucGFyc2UuY2hlY2tfZGVwZW5kZW5jeShkYXRhLCBhYnNfZm4pOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oIkR1cGxpY2F0ZSBpbmNsdXNpb24gZm9yICVzIGluICVzIiAlIChhYnNfZm4sIGRhdGEuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkpKQorICAgICAgICBmb3IgYWYgaW4gYXR0ZW1wdHM6CisgICAgICAgICAgICBiYi5wYXJzZS5tYXJrX2RlcGVuZGVuY3koZGF0YSwgYWYpCisgICAgICAgIGlmIGFic19mbjoKKyAgICAgICAgICAgIGZuID0gYWJzX2ZuCisgICAgZWxpZiBiYi5wYXJzZS5jaGVja19kZXBlbmRlbmN5KGRhdGEsIGZuKToKKyAgICAgICAgbG9nZ2VyLndhcm4oIkR1cGxpY2F0ZSBpbmNsdXNpb24gZm9yICVzIGluICVzIiAlIChmbiwgZGF0YS5nZXRWYXIoJ0ZJTEUnLCBUcnVlKSkpCisKKyAgICB0cnk6CisgICAgICAgIGJiLnBhcnNlLmhhbmRsZShmbiwgZGF0YSwgVHJ1ZSkKKyAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpIGFzIGV4YzoKKyAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgIGlmIGVycm9yX291dDoKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKCJDb3VsZCBub3QgJXMgZmlsZSAlcyIgJSAoZXJyb3Jfb3V0LCBmbiksIHBhcmVudGZuLCBsaW5lbm8pCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkNPTkYgZmlsZSAnJXMnIG5vdCBmb3VuZCIsIGZuKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgZXJyb3Jfb3V0OgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3IoIkNvdWxkIG5vdCAlcyBmaWxlICVzOiAlcyIgJSAoZXJyb3Jfb3V0LCBmbiwgZXhjLnN0cmVycm9yKSwgcGFyZW50Zm4sIGxpbmVubykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcigiRXJyb3IgcGFyc2luZyAlczogJXMiICUgKGZuLCBleGMuc3RyZXJyb3IpLCBwYXJlbnRmbiwgbGluZW5vKQorCisjIFdlIGhhdmUgYW4gaXNzdWUgd2hlcmUgYSBVSSBtaWdodCB3YW50IHRvIGVuZm9yY2UgcGFydGljdWxhciBzZXR0aW5ncyBzdWNoIGFzCisjIGFuIGVtcHR5IERJU1RSTyB2YXJpYWJsZS4gSWYgY29uZmlndXJhdGlvbiBmaWxlcyBkbyBzb21ldGhpbmcgbGlrZSBhc3NpZ25pbmcKKyMgYSB3ZWFrIGRlZmF1bHQsIGl0IHR1cm5zIG91dCB0byBiZSB2ZXJ5IGRpZmZpY3VsdCB0byBmaWx0ZXIgb3V0IHRoZXNlIGNoYW5nZXMsCisjIHBhcnRpY3VsYXJseSB3aGVuIHRoZSB3ZWFrIGRlZmF1bHQgbWlnaHQgYXBwZWFyIGhhbGYgd2F5IHRob3VnaCBwYXJzaW5nIGEgY2hhaW4gCisjIG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFdlIHRoZXJlZm9yZSBsZXQgdGhlIFVJcyBob29rIGludG8gY29uZmlndXJhdGlvbiBmaWxlCisjIHBhcnNpbmcuIFRoaXMgdHVybnMgb3V0IHRvIGJlIGEgaGFyZCBwcm9ibGVtIHRvIHNvbHZlIGFueSBvdGhlciB3YXkuCitjb25mRmlsdGVycyA9IFtdCisKK2RlZiBoYW5kbGUoZm4sIGRhdGEsIGluY2x1ZGUpOgorICAgIGluaXQoZGF0YSkKKworICAgIGlmIGluY2x1ZGUgPT0gMDoKKyAgICAgICAgb2xkZmlsZSA9IE5vbmUKKyAgICBlbHNlOgorICAgICAgICBvbGRmaWxlID0gZGF0YS5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSkKKworICAgIGFic19mbiA9IHJlc29sdmVfZmlsZShmbiwgZGF0YSkKKyAgICBmID0gb3BlbihhYnNfZm4sICdyJykKKworICAgIGlmIGluY2x1ZGU6CisgICAgICAgIGJiLnBhcnNlLm1hcmtfZGVwZW5kZW5jeShkYXRhLCBhYnNfZm4pCisKKyAgICBzdGF0ZW1lbnRzID0gYXN0LlN0YXRlbWVudEdyb3VwKCkKKyAgICBsaW5lbm8gPSAwCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgbGluZW5vID0gbGluZW5vICsgMQorICAgICAgICBzID0gZi5yZWFkbGluZSgpCisgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgdyA9IHMuc3RyaXAoKQorICAgICAgICAjIHNraXAgZW1wdHkgbGluZXMKKyAgICAgICAgaWYgbm90IHc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBzID0gcy5yc3RyaXAoKQorICAgICAgICB3aGlsZSBzWy0xXSA9PSAnXFwnOgorICAgICAgICAgICAgczIgPSBmLnJlYWRsaW5lKCkuc3RyaXAoKQorICAgICAgICAgICAgbGluZW5vID0gbGluZW5vICsgMQorICAgICAgICAgICAgaWYgKG5vdCBzMiBvciBzMiBhbmQgczJbMF0gIT0gIiMiKSBhbmQgc1swXSA9PSAiIyIgOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJUaGVyZSBpcyBhIGNvbmZ1c2luZyBtdWx0aWxpbmUsIHBhcnRpYWxseSBjb21tZW50ZWQgZXhwcmVzc2lvbiBvbiBsaW5lICVzIG9mIGZpbGUgJXMgKCVzKS5cblBsZWFzZSBjbGFyaWZ5IHdoZXRoZXIgdGhpcyBpcyBhbGwgYSBjb21tZW50IG9yIHNob3VsZCBiZSBwYXJzZWQuIiAlIChsaW5lbm8sIGZuLCBzKSkKKyAgICAgICAgICAgIHMgPSBzWzotMV0gKyBzMgorICAgICAgICAjIHNraXAgY29tbWVudHMKKyAgICAgICAgaWYgc1swXSA9PSAnIyc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmZWVkZXIobGluZW5vLCBzLCBhYnNfZm4sIHN0YXRlbWVudHMpCisKKyAgICAjIERPTkUgV0lUSCBQQVJTSU5HLi4uIHRpbWUgdG8gZXZhbHVhdGUKKyAgICBkYXRhLnNldFZhcignRklMRScsIGFic19mbikKKyAgICBzdGF0ZW1lbnRzLmV2YWwoZGF0YSkKKyAgICBpZiBvbGRmaWxlOgorICAgICAgICBkYXRhLnNldFZhcignRklMRScsIG9sZGZpbGUpCisKKyAgICBmLmNsb3NlKCkKKworICAgIGZvciBmIGluIGNvbmZGaWx0ZXJzOgorICAgICAgICBmKGZuLCBkYXRhKQorCisgICAgcmV0dXJuIGRhdGEKKworZGVmIGZlZWRlcihsaW5lbm8sIHMsIGZuLCBzdGF0ZW1lbnRzKToKKyAgICBtID0gX19jb25maWdfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBncm91cGQgPSBtLmdyb3VwZGljdCgpCisgICAgICAgIGFzdC5oYW5kbGVEYXRhKHN0YXRlbWVudHMsIGZuLCBsaW5lbm8sIGdyb3VwZCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX19pbmNsdWRlX3JlZ2V4cF9fLm1hdGNoKHMpCisgICAgaWYgbToKKyAgICAgICAgYXN0LmhhbmRsZUluY2x1ZGUoc3RhdGVtZW50cywgZm4sIGxpbmVubywgbSwgRmFsc2UpCisgICAgICAgIHJldHVybgorCisgICAgbSA9IF9fcmVxdWlyZV9yZWdleHBfXy5tYXRjaChzKQorICAgIGlmIG06CisgICAgICAgIGFzdC5oYW5kbGVJbmNsdWRlKHN0YXRlbWVudHMsIGZuLCBsaW5lbm8sIG0sIFRydWUpCisgICAgICAgIHJldHVybgorCisgICAgbSA9IF9fZXhwb3J0X3JlZ2V4cF9fLm1hdGNoKHMpCisgICAgaWYgbToKKyAgICAgICAgYXN0LmhhbmRsZUV4cG9ydChzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBtKQorICAgICAgICByZXR1cm4KKworICAgIHJhaXNlIFBhcnNlRXJyb3IoInVucGFyc2VkIGxpbmU6ICclcyciICUgcywgZm4sIGxpbmVubyk7CisKKyMgQWRkIHVzIHRvIHRoZSBoYW5kbGVycyBsaXN0Citmcm9tIGJiLnBhcnNlIGltcG9ydCBoYW5kbGVycworaGFuZGxlcnMuYXBwZW5kKHsnc3VwcG9ydHMnOiBzdXBwb3J0cywgJ2hhbmRsZSc6IGhhbmRsZSwgJ2luaXQnOiBpbml0fSkKK2RlbCBoYW5kbGVycwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U2NThkMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvX19pbml0X18ucHkKQEAgLTAsMCArMSwzMyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlIFBhcnNlcnMKKworRmlsZSBwYXJzZXJzIGZvciB0aGUgQml0QmFrZSBidWlsZCB0b29scy4KKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQaGlsIEJsdW5kZWxsCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBCYXNlZCBvbiBmdW5jdGlvbnMgZnJvbSB0aGUgYmFzZSBiYiBtb2R1bGUsIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Citmcm9tIC4gaW1wb3J0IENvbmZIYW5kbGVyCitmcm9tIC4gaW1wb3J0IEJCSGFuZGxlcgorCitfX3ZlcnNpb25fXyA9ICcxLjAnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BlcnNpc3RfZGF0YS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGVyc2lzdF9kYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3OTViYzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BlcnNpc3RfZGF0YS5weQpAQCAtMCwwICsxLDIxNyBAQAorIiIiQml0QmFrZSBQZXJzaXN0ZW50IERhdGEgU3RvcmUKKworVXNlZCB0byBzdG9yZSBkYXRhIGluIGEgY2VudHJhbCBsb2NhdGlvbiBzdWNoIHRoYXQgb3RoZXIgdGhyZWFkcy90YXNrcyBjYW4KK2FjY2VzcyB0aGVtIGF0IHNvbWUgZnV0dXJlIGRhdGUuICBBY3RzIGFzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgc3FsaXRlLAorY3VycmVudGx5LCBwcm92aWRpbmcgYSBrZXkvdmFsdWUgc3RvcmUgYWNjZXNzZWQgYnkgJ2RvbWFpbicuCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDcgICAgICAgIFJpY2hhcmQgUHVyZGllCisjIENvcHlyaWdodCAoQykgMjAxMCAgICAgICAgQ2hyaXMgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKK2Zyb20gYmIuY29tcGF0IGltcG9ydCB0b3RhbF9vcmRlcmluZworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgTWFwcGluZworCit0cnk6CisgICAgaW1wb3J0IHNxbGl0ZTMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIHB5c3FsaXRlMiBpbXBvcnQgZGJhcGkyIGFzIHNxbGl0ZTMKKworc3FsdmVyc2lvbiA9IHNxbGl0ZTMuc3FsaXRlX3ZlcnNpb25faW5mbworaWYgc3FsdmVyc2lvblswXSA8IDMgb3IgKHNxbHZlcnNpb25bMF0gPT0gMyBhbmQgc3FsdmVyc2lvblsxXSA8IDMpOgorICAgIHJhaXNlIEV4Y2VwdGlvbigic3FsaXRlMyB2ZXJzaW9uIDMuMy4wIG9yIGxhdGVyIGlzIHJlcXVpcmVkLiIpCisKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuUGVyc2lzdERhdGEiKQoraWYgaGFzYXR0cihzcWxpdGUzLCAnZW5hYmxlX3NoYXJlZF9jYWNoZScpOgorICAgIHRyeToKKyAgICAgICAgc3FsaXRlMy5lbmFibGVfc2hhcmVkX2NhY2hlKFRydWUpCisgICAgZXhjZXB0IHNxbGl0ZTMuT3BlcmF0aW9uYWxFcnJvcjoKKyAgICAgICAgcGFzcworCisKK0B0b3RhbF9vcmRlcmluZworY2xhc3MgU1FMVGFibGUoY29sbGVjdGlvbnMuTXV0YWJsZU1hcHBpbmcpOgorICAgICIiIk9iamVjdCByZXByZXNlbnRpbmcgYSB0YWJsZS9kb21haW4gaW4gdGhlIGRhdGFiYXNlIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhY2hlZmlsZSwgdGFibGUpOgorICAgICAgICBzZWxmLmNhY2hlZmlsZSA9IGNhY2hlZmlsZQorICAgICAgICBzZWxmLnRhYmxlID0gdGFibGUKKyAgICAgICAgc2VsZi5jdXJzb3IgPSBjb25uZWN0KHNlbGYuY2FjaGVmaWxlKQorCisgICAgICAgIHNlbGYuX2V4ZWN1dGUoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICVzKGtleSBURVhULCB2YWx1ZSBURVhUKTsiCisgICAgICAgICAgICAgICAgICAgICAgJSB0YWJsZSkKKworICAgIGRlZiBfZXhlY3V0ZShzZWxmLCAqcXVlcnkpOgorICAgICAgICAiIiJFeGVjdXRlIGEgcXVlcnksIHdhaXRpbmcgdG8gYWNxdWlyZSBhIGxvY2sgaWYgbmVjZXNzYXJ5IiIiCisgICAgICAgIGNvdW50ID0gMAorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmN1cnNvci5leGVjdXRlKCpxdWVyeSkKKyAgICAgICAgICAgIGV4Y2VwdCBzcWxpdGUzLk9wZXJhdGlvbmFsRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmICdkYXRhYmFzZSBpcyBsb2NrZWQnIGluIHN0cihleGMpIGFuZCBjb3VudCA8IDUwMDoKKyAgICAgICAgICAgICAgICAgICAgY291bnQgPSBjb3VudCArIDEKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJzb3IuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnNvciA9IGNvbm5lY3Qoc2VsZi5jYWNoZWZpbGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYuY3Vyc29yLl9fZW50ZXJfXygpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y2luZm8pOgorICAgICAgICBzZWxmLmN1cnNvci5fX2V4aXRfXygqZXhjaW5mbykKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICBkYXRhID0gc2VsZi5fZXhlY3V0ZSgiU0VMRUNUICogZnJvbSAlcyB3aGVyZSBrZXk9PzsiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YWJsZSwgW2tleV0pCisgICAgICAgIGZvciByb3cgaW4gZGF0YToKKyAgICAgICAgICAgIHJldHVybiByb3dbMV0KKyAgICAgICAgcmFpc2UgS2V5RXJyb3Ioa2V5KQorCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIGlmIGtleSBub3QgaW4gc2VsZjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKGtleSkKKyAgICAgICAgc2VsZi5fZXhlY3V0ZSgiREVMRVRFIGZyb20gJXMgd2hlcmUga2V5PT87IiAlIHNlbGYudGFibGUsIFtrZXldKQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrZXksIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdPbmx5IHN0cmluZyBrZXlzIGFyZSBzdXBwb3J0ZWQnKQorICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignT25seSBzdHJpbmcgdmFsdWVzIGFyZSBzdXBwb3J0ZWQnKQorCisgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRlKCJTRUxFQ1QgKiBmcm9tICVzIHdoZXJlIGtleT0/OyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLCBba2V5XSkKKyAgICAgICAgZXhpc3RzID0gbGVuKGxpc3QoZGF0YSkpCisgICAgICAgIGlmIGV4aXN0czoKKyAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGUoIlVQREFURSAlcyBTRVQgdmFsdWU9PyBXSEVSRSBrZXk9PzsiICUgc2VsZi50YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlLCBrZXldKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZSgiSU5TRVJUIGludG8gJXMoa2V5LCB2YWx1ZSkgdmFsdWVzICg/LCA/KTsiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YWJsZSwgW2tleSwgdmFsdWVdKQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4ga2V5IGluIHNldChzZWxmKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRlKCJTRUxFQ1QgQ09VTlQoa2V5KSBGUk9NICVzOyIgJSBzZWxmLnRhYmxlKQorICAgICAgICBmb3Igcm93IGluIGRhdGE6CisgICAgICAgICAgICByZXR1cm4gcm93WzBdCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRlKCJTRUxFQ1Qga2V5IEZST00gJXM7IiAlIHNlbGYudGFibGUpCisgICAgICAgIHJldHVybiAocm93WzBdIGZvciByb3cgaW4gZGF0YSkKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgTWFwcGluZyk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIHJldHVybiBsZW4oc2VsZikgPCBsZW4ob3RoZXIpCisKKyAgICBkZWYgZ2V0X2J5X3BhdHRlcm4oc2VsZiwgcGF0dGVybik6CisgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRlKCJTRUxFQ1QgKiBGUk9NICVzIFdIRVJFIGtleSBMSUtFID87IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFibGUsIFtwYXR0ZXJuXSkKKyAgICAgICAgcmV0dXJuIFtyb3dbMV0gZm9yIHJvdyBpbiBkYXRhXQorCisgICAgZGVmIHZhbHVlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5pdGVydmFsdWVzKCkpCisKKyAgICBkZWYgaXRlcnZhbHVlcyhzZWxmKToKKyAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoIlNFTEVDVCB2YWx1ZSBGUk9NICVzOyIgJSBzZWxmLnRhYmxlKQorICAgICAgICByZXR1cm4gKHJvd1swXSBmb3Igcm93IGluIGRhdGEpCisKKyAgICBkZWYgaXRlbXMoc2VsZik6CisgICAgICAgIHJldHVybiBsaXN0KHNlbGYuaXRlcml0ZW1zKCkpCisKKyAgICBkZWYgaXRlcml0ZW1zKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0ZSgiU0VMRUNUICogRlJPTSAlczsiICUgc2VsZi50YWJsZSkKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgc2VsZi5fZXhlY3V0ZSgiREVMRVRFIEZST00gJXM7IiAlIHNlbGYudGFibGUpCisKKyAgICBkZWYgaGFzX2tleShzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4ga2V5IGluIHNlbGYKKworCitjbGFzcyBQZXJzaXN0RGF0YShvYmplY3QpOgorICAgICIiIkRlcHJlY2F0ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJpdGJha2UgcGVyc2lzdGVudCBkYXRhIHN0b3JlIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICB3YXJuaW5ncy53YXJuKCJVc2Ugb2YgUGVyc2lzdERhdGEgaXMgZGVwcmVjYXRlZC4gIFBsZWFzZSB1c2UgIgorICAgICAgICAgICAgICAgICAgICAgICJwZXJzaXN0KGRvbWFpbiwgZCkgaW5zdGVhZC4iLAorICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PURlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICBzdGFja2xldmVsPTIpCisKKyAgICAgICAgc2VsZi5kYXRhID0gcGVyc2lzdChkKQorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlVzaW5nICclcycgYXMgdGhlIHBlcnNpc3RlbnQgZGF0YSBjYWNoZSIsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmRhdGEuZmlsZW5hbWUpCisKKyAgICBkZWYgYWRkRG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgICIiIgorICAgICAgICBBZGQgYSBkb21haW4gKHBlbmRpbmcgZGVwcmVjYXRpb24pCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5kYXRhW2RvbWFpbl0KKworICAgIGRlZiBkZWxEb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbW92ZXMgYSBkb21haW4gYW5kIGFsbCB0aGUgZGF0YSBpdCBjb250YWlucworICAgICAgICAiIiIKKyAgICAgICAgZGVsIHNlbGYuZGF0YVtkb21haW5dCisKKyAgICBkZWYgZ2V0S2V5VmFsdWVzKHNlbGYsIGRvbWFpbik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIGtleSArIHZhbHVlIHBhaXJzIGZvciBhIGRvbWFpbgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZGF0YVtkb21haW5dLml0ZW1zKCkKKworICAgIGRlZiBnZXRWYWx1ZShzZWxmLCBkb21haW4sIGtleSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIHZhbHVlIG9mIGEga2V5IGZvciBhIGRvbWFpbgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZGF0YVtkb21haW5dW2tleV0KKworICAgIGRlZiBzZXRWYWx1ZShzZWxmLCBkb21haW4sIGtleSwgdmFsdWUpOgorICAgICAgICAiIiIKKyAgICAgICAgU2V0cyB0aGUgdmFsdWUgb2YgYSBrZXkgZm9yIGEgZG9tYWluCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmRhdGFbZG9tYWluXVtrZXldID0gdmFsdWUKKworICAgIGRlZiBkZWxWYWx1ZShzZWxmLCBkb21haW4sIGtleSk6CisgICAgICAgICIiIgorICAgICAgICBEZWxldGVzIGEga2V5L3ZhbHVlIHBhaXIKKyAgICAgICAgIiIiCisgICAgICAgIGRlbCBzZWxmLmRhdGFbZG9tYWluXVtrZXldCisKK2RlZiBjb25uZWN0KGRhdGFiYXNlKToKKyAgICBjb25uZWN0aW9uID0gc3FsaXRlMy5jb25uZWN0KGRhdGFiYXNlLCB0aW1lb3V0PTUsIGlzb2xhdGlvbl9sZXZlbD1Ob25lKQorICAgIGNvbm5lY3Rpb24uZXhlY3V0ZSgicHJhZ21hIHN5bmNocm9ub3VzID0gb2ZmOyIpCisgICAgcmV0dXJuIGNvbm5lY3Rpb24KKworZGVmIHBlcnNpc3QoZG9tYWluLCBkKToKKyAgICAiIiJDb252ZW5pZW5jZSBmYWN0b3J5IGZvciBTUUxUYWJsZSBvYmplY3RzIGJhc2VkIHVwb24gbWV0YWRhdGEiIiIKKyAgICBpbXBvcnQgYmIudXRpbHMKKyAgICBjYWNoZWRpciA9IChkLmdldFZhcigiUEVSU0lTVEVOVF9ESVIiLCBUcnVlKSBvcgorICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCJDQUNIRSIsIFRydWUpKQorICAgIGlmIG5vdCBjYWNoZWRpcjoKKyAgICAgICAgbG9nZ2VyLmNyaXRpY2FsKCJQbGVhc2Ugc2V0IHRoZSAnUEVSU0lTVEVOVF9ESVInIG9yICdDQUNIRScgdmFyaWFibGUiKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGNhY2hlZGlyKQorICAgIGNhY2hlZmlsZSA9IG9zLnBhdGguam9pbihjYWNoZWRpciwgImJiX3BlcnNpc3RfZGF0YS5zcWxpdGUzIikKKyAgICByZXR1cm4gU1FMVGFibGUoY2FjaGVmaWxlLCBkb21haW4pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Byb2Nlc3MucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Byb2Nlc3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwN2YyZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHJvY2Vzcy5weQpAQCAtMCwwICsxLDE1NiBAQAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzZWxlY3QKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuUHJvY2VzcycpCisKK2RlZiBzdWJwcm9jZXNzX3NldHVwKCk6CisgICAgIyBQeXRob24gaW5zdGFsbHMgYSBTSUdQSVBFIGhhbmRsZXIgYnkgZGVmYXVsdC4gVGhpcyBpcyB1c3VhbGx5IG5vdCB3aGF0CisgICAgIyBub24tUHl0aG9uIHN1YnByb2Nlc3NlcyBleHBlY3QuCisgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHUElQRSwgc2lnbmFsLlNJR19ERkwpCisKK2NsYXNzIENtZEVycm9yKFJ1bnRpbWVFcnJvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmQsIG1zZz1Ob25lKToKKyAgICAgICAgc2VsZi5jb21tYW5kID0gY29tbWFuZAorICAgICAgICBzZWxmLm1zZyA9IG1zZworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYuY29tbWFuZCwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBjbWQgPSBzdWJwcm9jZXNzLmxpc3QyY21kbGluZShzZWxmLmNvbW1hbmQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgPSBzZWxmLmNvbW1hbmQKKworICAgICAgICBtc2cgPSAiRXhlY3V0aW9uIG9mICclcycgZmFpbGVkIiAlIGNtZAorICAgICAgICBpZiBzZWxmLm1zZzoKKyAgICAgICAgICAgIG1zZyArPSAnOiAlcycgJSBzZWxmLm1zZworICAgICAgICByZXR1cm4gbXNnCisKK2NsYXNzIE5vdEZvdW5kRXJyb3IoQ21kRXJyb3IpOgorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gQ21kRXJyb3IuX19zdHJfXyhzZWxmKSArICI6IGNvbW1hbmQgbm90IGZvdW5kIgorCitjbGFzcyBFeGVjdXRpb25FcnJvcihDbWRFcnJvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmQsIGV4aXRjb2RlLCBzdGRvdXQgPSBOb25lLCBzdGRlcnIgPSBOb25lKToKKyAgICAgICAgQ21kRXJyb3IuX19pbml0X18oc2VsZiwgY29tbWFuZCkKKyAgICAgICAgc2VsZi5leGl0Y29kZSA9IGV4aXRjb2RlCisgICAgICAgIHNlbGYuc3Rkb3V0ID0gc3Rkb3V0CisgICAgICAgIHNlbGYuc3RkZXJyID0gc3RkZXJyCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgbWVzc2FnZSA9ICIiCisgICAgICAgIGlmIHNlbGYuc3RkZXJyOgorICAgICAgICAgICAgbWVzc2FnZSArPSBzZWxmLnN0ZGVycgorICAgICAgICBpZiBzZWxmLnN0ZG91dDoKKyAgICAgICAgICAgIG1lc3NhZ2UgKz0gc2VsZi5zdGRvdXQKKyAgICAgICAgaWYgbWVzc2FnZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiOlxuIiArIG1lc3NhZ2UKKyAgICAgICAgcmV0dXJuIChDbWRFcnJvci5fX3N0cl9fKHNlbGYpICsKKyAgICAgICAgICAgICAgICAiIHdpdGggZXhpdCBjb2RlICVzIiAlIHNlbGYuZXhpdGNvZGUgKyBtZXNzYWdlKQorCitjbGFzcyBQb3BlbihzdWJwcm9jZXNzLlBvcGVuKToKKyAgICBkZWZhdWx0cyA9IHsKKyAgICAgICAgImNsb3NlX2ZkcyI6IFRydWUsCisgICAgICAgICJwcmVleGVjX2ZuIjogc3VicHJvY2Vzc19zZXR1cCwKKyAgICAgICAgInN0ZG91dCI6IHN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgInN0ZGVyciI6IHN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAic3RkaW4iOiBzdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICJzaGVsbCI6IEZhbHNlLAorICAgIH0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBvcHRpb25zID0gZGljdChzZWxmLmRlZmF1bHRzKQorICAgICAgICBvcHRpb25zLnVwZGF0ZShrd2FyZ3MpCisgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4uX19pbml0X18oc2VsZiwgKmFyZ3MsICoqb3B0aW9ucykKKworZGVmIF9sb2dnZWRfY29tbXVuaWNhdGUocGlwZSwgbG9nLCBpbnB1dCwgZXh0cmFmaWxlcyk6CisgICAgaWYgcGlwZS5zdGRpbjoKKyAgICAgICAgaWYgaW5wdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBwaXBlLnN0ZGluLndyaXRlKGlucHV0KQorICAgICAgICBwaXBlLnN0ZGluLmNsb3NlKCkKKworICAgIG91dGRhdGEsIGVycmRhdGEgPSBbXSwgW10KKyAgICByaW4gPSBbXQorCisgICAgaWYgcGlwZS5zdGRvdXQgaXMgbm90IE5vbmU6CisgICAgICAgIGJiLnV0aWxzLm5vbmJsb2NraW5nZmQocGlwZS5zdGRvdXQuZmlsZW5vKCkpCisgICAgICAgIHJpbi5hcHBlbmQocGlwZS5zdGRvdXQpCisgICAgaWYgcGlwZS5zdGRlcnIgaXMgbm90IE5vbmU6CisgICAgICAgIGJiLnV0aWxzLm5vbmJsb2NraW5nZmQocGlwZS5zdGRlcnIuZmlsZW5vKCkpCisgICAgICAgIHJpbi5hcHBlbmQocGlwZS5zdGRlcnIpCisgICAgZm9yIGZvYmosIF8gaW4gZXh0cmFmaWxlczoKKyAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZChmb2JqLmZpbGVubygpKQorICAgICAgICByaW4uYXBwZW5kKGZvYmopCisKKyAgICBkZWYgcmVhZGV4dHJhcyhzZWxlY3RlZCk6CisgICAgICAgIGZvciBmb2JqLCBmdW5jIGluIGV4dHJhZmlsZXM6CisgICAgICAgICAgICBpZiBmb2JqIGluIHNlbGVjdGVkOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGZvYmoucmVhZCgpCisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICBpZiBlcnIuZXJybm8gPT0gZXJybm8uRUFHQUlOIG9yIGVyci5lcnJubyA9PSBlcnJuby5FV09VTERCTE9DSzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgZGF0YSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZnVuYyhkYXRhKQorCisgICAgdHJ5OgorICAgICAgICB3aGlsZSBwaXBlLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgcmxpc3QgPSByaW4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByLHcsZSA9IHNlbGVjdC5zZWxlY3QgKHJsaXN0LCBbXSwgW10sIDEpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUlOVFI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgIGlmIHBpcGUuc3Rkb3V0IGluIHI6CisgICAgICAgICAgICAgICAgZGF0YSA9IHBpcGUuc3Rkb3V0LnJlYWQoKQorICAgICAgICAgICAgICAgIGlmIGRhdGEgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIG91dGRhdGEuYXBwZW5kKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIGxvZy53cml0ZShkYXRhKQorCisgICAgICAgICAgICBpZiBwaXBlLnN0ZGVyciBpbiByOgorICAgICAgICAgICAgICAgIGRhdGEgPSBwaXBlLnN0ZGVyci5yZWFkKCkKKyAgICAgICAgICAgICAgICBpZiBkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBlcnJkYXRhLmFwcGVuZChkYXRhKQorICAgICAgICAgICAgICAgICAgICBsb2cud3JpdGUoZGF0YSkKKworICAgICAgICAgICAgcmVhZGV4dHJhcyhyKQorCisgICAgZmluYWxseTogICAgCisgICAgICAgIGxvZy5mbHVzaCgpCisKKyAgICByZWFkZXh0cmFzKFtmb2JqIGZvciBmb2JqLCBfIGluIGV4dHJhZmlsZXNdKQorCisgICAgaWYgcGlwZS5zdGRvdXQgaXMgbm90IE5vbmU6CisgICAgICAgIHBpcGUuc3Rkb3V0LmNsb3NlKCkKKyAgICBpZiBwaXBlLnN0ZGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgcGlwZS5zdGRlcnIuY2xvc2UoKQorICAgIHJldHVybiAnJy5qb2luKG91dGRhdGEpLCAnJy5qb2luKGVycmRhdGEpCisKK2RlZiBydW4oY21kLCBpbnB1dD1Ob25lLCBsb2c9Tm9uZSwgZXh0cmFmaWxlcz1Ob25lLCAqKm9wdGlvbnMpOgorICAgICIiIkNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHJ1biBhIGNvbW1hbmQgYW5kIHJldHVybiBpdHMgb3V0cHV0LCByYWlzaW5nIGFuCisgICAgZXhjZXB0aW9uIHdoZW4gdGhlIGNvbW1hbmQgZmFpbHMiIiIKKworICAgIGlmIG5vdCBleHRyYWZpbGVzOgorICAgICAgICBleHRyYWZpbGVzID0gW10KKworICAgIGlmIGlzaW5zdGFuY2UoY21kLCBiYXNlc3RyaW5nKSBhbmQgbm90ICJzaGVsbCIgaW4gb3B0aW9uczoKKyAgICAgICAgb3B0aW9uc1sic2hlbGwiXSA9IFRydWUKKworICAgIHRyeToKKyAgICAgICAgcGlwZSA9IFBvcGVuKGNtZCwgKipvcHRpb25zKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgaWYgZXhjLmVycm5vID09IDI6CisgICAgICAgICAgICByYWlzZSBOb3RGb3VuZEVycm9yKGNtZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIENtZEVycm9yKGNtZCwgZXhjKQorCisgICAgaWYgbG9nOgorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IF9sb2dnZWRfY29tbXVuaWNhdGUocGlwZSwgbG9nLCBpbnB1dCwgZXh0cmFmaWxlcykKKyAgICBlbHNlOgorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBpcGUuY29tbXVuaWNhdGUoaW5wdXQpCisKKyAgICBpZiBwaXBlLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgcmFpc2UgRXhlY3V0aW9uRXJyb3IoY21kLCBwaXBlLnJldHVybmNvZGUsIHN0ZG91dCwgc3RkZXJyKQorICAgIHJldHVybiBzdGRvdXQsIHN0ZGVycgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wcm92aWRlcnMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Byb3ZpZGVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzdlMWZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wcm92aWRlcnMucHkKQEAgLTAsMCArMSwzODEgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGhpbCBCbHVuZGVsbAorIyBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIFJPQUQgR21iSAorIyBDb3B5cmlnaHQgKEMpIDIwMDYgICAgICAgIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgcmUKK2ltcG9ydCBsb2dnaW5nCitmcm9tIGJiIGltcG9ydCBkYXRhLCB1dGlscworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKK2ltcG9ydCBiYgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5Qcm92aWRlciIpCisKK2NsYXNzIE5vUHJvdmlkZXIoYmIuQkJIYW5kbGVkRXhjZXB0aW9uKToKKyAgICAiIiJFeGNlcHRpb24gcmFpc2VkIHdoZW4gbm8gcHJvdmlkZXIgb2YgYSBidWlsZCBkZXBlbmRlbmN5IGNhbiBiZSBmb3VuZCIiIgorCitjbGFzcyBOb1JQcm92aWRlcihiYi5CQkhhbmRsZWRFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBubyBwcm92aWRlciBvZiBhIHJ1bnRpbWUgZGVwZW5kZW5jeSBjYW4gYmUgZm91bmQiIiIKKworY2xhc3MgTXVsdGlwbGVSUHJvdmlkZXIoYmIuQkJIYW5kbGVkRXhjZXB0aW9uKToKKyAgICAiIiJFeGNlcHRpb24gcmFpc2VkIHdoZW4gbXVsdGlwbGUgcHJvdmlkZXJzIG9mIGEgcnVudGltZSBkZXBlbmRlbmN5IGNhbiBiZSBmb3VuZCIiIgorCitkZWYgZmluZFByb3ZpZGVycyhjZmdEYXRhLCBkYXRhQ2FjaGUsIHBrZ19wbiA9IE5vbmUpOgorICAgICIiIgorICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGdldCBsYXRlc3QgYW5kIHByZWZlcnJlZCBwcm92aWRlcnMgaW4gcGtnX3BuCisgICAgIiIiCisKKyAgICBpZiBub3QgcGtnX3BuOgorICAgICAgICBwa2dfcG4gPSBkYXRhQ2FjaGUucGtnX3BuCisKKyAgICAjIE5lZWQgdG8gZW5zdXJlIGRhdGEgc3RvcmUgaXMgZXhwYW5kZWQKKyAgICBsb2NhbGRhdGEgPSBkYXRhLmNyZWF0ZUNvcHkoY2ZnRGF0YSkKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICBiYi5kYXRhLmV4cGFuZEtleXMobG9jYWxkYXRhKQorCisgICAgcHJlZmVycmVkX3ZlcnNpb25zID0ge30KKyAgICBsYXRlc3RfdmVyc2lvbnMgPSB7fQorCisgICAgZm9yIHBuIGluIHBrZ19wbjoKKyAgICAgICAgKGxhc3RfdmVyLCBsYXN0X2ZpbGUsIHByZWZfdmVyLCBwcmVmX2ZpbGUpID0gZmluZEJlc3RQcm92aWRlcihwbiwgbG9jYWxkYXRhLCBkYXRhQ2FjaGUsIHBrZ19wbikKKyAgICAgICAgcHJlZmVycmVkX3ZlcnNpb25zW3BuXSA9IChwcmVmX3ZlciwgcHJlZl9maWxlKQorICAgICAgICBsYXRlc3RfdmVyc2lvbnNbcG5dID0gKGxhc3RfdmVyLCBsYXN0X2ZpbGUpCisKKyAgICByZXR1cm4gKGxhdGVzdF92ZXJzaW9ucywgcHJlZmVycmVkX3ZlcnNpb25zKQorCisKK2RlZiBhbGxQcm92aWRlcnMoZGF0YUNhY2hlKToKKyAgICAiIiIKKyAgICBGaW5kIGFsbCBwcm92aWRlcnMgZm9yIGVhY2ggcG4KKyAgICAiIiIKKyAgICBhbGxfcHJvdmlkZXJzID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICBmb3IgKGZuLCBwbikgaW4gZGF0YUNhY2hlLnBrZ19mbi5pdGVtcygpOgorICAgICAgICB2ZXIgPSBkYXRhQ2FjaGUucGtnX3BlcHZwcltmbl0KKyAgICAgICAgYWxsX3Byb3ZpZGVyc1twbl0uYXBwZW5kKCh2ZXIsIGZuKSkKKyAgICByZXR1cm4gYWxsX3Byb3ZpZGVycworCisKK2RlZiBzb3J0UHJpb3JpdGllcyhwbiwgZGF0YUNhY2hlLCBwa2dfcG4gPSBOb25lKToKKyAgICAiIiIKKyAgICBSZW9yZGVyIHBrZ19wbiBieSBmaWxlIHByaW9yaXR5IGFuZCBkZWZhdWx0IHByZWZlcmVuY2UKKyAgICAiIiIKKworICAgIGlmIG5vdCBwa2dfcG46CisgICAgICAgIHBrZ19wbiA9IGRhdGFDYWNoZS5wa2dfcG4KKworICAgIGZpbGVzID0gcGtnX3BuW3BuXQorICAgIHByaW9yaXRpZXMgPSB7fQorICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICBwcmlvcml0eSA9IGRhdGFDYWNoZS5iYmZpbGVfcHJpb3JpdHlbZl0KKyAgICAgICAgcHJlZmVyZW5jZSA9IGRhdGFDYWNoZS5wa2dfZHBbZl0KKyAgICAgICAgaWYgcHJpb3JpdHkgbm90IGluIHByaW9yaXRpZXM6CisgICAgICAgICAgICBwcmlvcml0aWVzW3ByaW9yaXR5XSA9IHt9CisgICAgICAgIGlmIHByZWZlcmVuY2Ugbm90IGluIHByaW9yaXRpZXNbcHJpb3JpdHldOgorICAgICAgICAgICAgcHJpb3JpdGllc1twcmlvcml0eV1bcHJlZmVyZW5jZV0gPSBbXQorICAgICAgICBwcmlvcml0aWVzW3ByaW9yaXR5XVtwcmVmZXJlbmNlXS5hcHBlbmQoZikKKyAgICB0bXBfcG4gPSBbXQorICAgIGZvciBwcmkgaW4gc29ydGVkKHByaW9yaXRpZXMpOgorICAgICAgICB0bXBfcHJlZiA9IFtdCisgICAgICAgIGZvciBwcmVmIGluIHNvcnRlZChwcmlvcml0aWVzW3ByaV0pOgorICAgICAgICAgICAgdG1wX3ByZWYuZXh0ZW5kKHByaW9yaXRpZXNbcHJpXVtwcmVmXSkKKyAgICAgICAgdG1wX3BuID0gW3RtcF9wcmVmXSArIHRtcF9wbgorCisgICAgcmV0dXJuIHRtcF9wbgorCitkZWYgcHJlZmVycmVkVmVyc2lvbk1hdGNoKHBlLCBwdiwgcHIsIHByZWZlcnJlZF9lLCBwcmVmZXJyZWRfdiwgcHJlZmVycmVkX3IpOgorICAgICIiIgorICAgIENoZWNrIGlmIHRoZSB2ZXJzaW9uIHBlLHB2LHByIGlzIHRoZSBwcmVmZXJyZWQgb25lLgorICAgIElmIHRoZXJlIGlzIHByZWZlcnJlZCB2ZXJzaW9uIGRlZmluZWQgYW5kIGVuZHMgd2l0aCAnJScsIHRoZW4gcHYgaGFzIHRvIHN0YXJ0IHdpdGggdGhhdCB2ZXJzaW9uIGFmdGVyIHJlbW92aW5nIHRoZSAnJScKKyAgICAiIiIKKyAgICBpZiAocHIgPT0gcHJlZmVycmVkX3Igb3IgcHJlZmVycmVkX3IgPT0gTm9uZSk6CisgICAgICAgIGlmIChwZSA9PSBwcmVmZXJyZWRfZSBvciBwcmVmZXJyZWRfZSA9PSBOb25lKToKKyAgICAgICAgICAgIGlmIHByZWZlcnJlZF92ID09IHB2OgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBpZiBwcmVmZXJyZWRfdiAhPSBOb25lIGFuZCBwcmVmZXJyZWRfdi5lbmRzd2l0aCgnJScpIGFuZCBwdi5zdGFydHN3aXRoKHByZWZlcnJlZF92WzpsZW4ocHJlZmVycmVkX3YpLTFdKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCitkZWYgZmluZFByZWZlcnJlZFByb3ZpZGVyKHBuLCBjZmdEYXRhLCBkYXRhQ2FjaGUsIHBrZ19wbiA9IE5vbmUsIGl0ZW0gPSBOb25lKToKKyAgICAiIiIKKyAgICBGaW5kIHRoZSBmaXJzdCBwcm92aWRlciBpbiBwa2dfcG4gd2l0aCBhIFBSRUZFUlJFRF9WRVJTSU9OIHNldC4KKyAgICAiIiIKKworICAgIHByZWZlcnJlZF9maWxlID0gTm9uZQorICAgIHByZWZlcnJlZF92ZXIgPSBOb25lCisKKyAgICBsb2NhbGRhdGEgPSBkYXRhLmNyZWF0ZUNvcHkoY2ZnRGF0YSkKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAiJXM6cG4tJXM6JXMiICUgKGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBsb2NhbGRhdGEpLCBwbiwgcG4pKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgcHJlZmVycmVkX3YgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQUkVGRVJSRURfVkVSU0lPTicsIFRydWUpCisgICAgaWYgcHJlZmVycmVkX3Y6CisgICAgICAgIG0gPSByZS5tYXRjaCgnKFxkKzopKiguKikoXy4qKSonLCBwcmVmZXJyZWRfdikKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIGlmIG0uZ3JvdXAoMSk6CisgICAgICAgICAgICAgICAgcHJlZmVycmVkX2UgPSBtLmdyb3VwKDEpWzotMV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJlZmVycmVkX2UgPSBOb25lCisgICAgICAgICAgICBwcmVmZXJyZWRfdiA9IG0uZ3JvdXAoMikKKyAgICAgICAgICAgIGlmIG0uZ3JvdXAoMyk6CisgICAgICAgICAgICAgICAgcHJlZmVycmVkX3IgPSBtLmdyb3VwKDMpWzE6XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmVmZXJyZWRfciA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByZWZlcnJlZF9lID0gTm9uZQorICAgICAgICAgICAgcHJlZmVycmVkX3IgPSBOb25lCisKKyAgICAgICAgZm9yIGZpbGVfc2V0IGluIHBrZ19wbjoKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVfc2V0OgorICAgICAgICAgICAgICAgIHBlLCBwdiwgcHIgPSBkYXRhQ2FjaGUucGtnX3BlcHZwcltmXQorICAgICAgICAgICAgICAgIGlmIHByZWZlcnJlZFZlcnNpb25NYXRjaChwZSwgcHYsIHByLCBwcmVmZXJyZWRfZSwgcHJlZmVycmVkX3YsIHByZWZlcnJlZF9yKToKKyAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkX2ZpbGUgPSBmCisgICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZF92ZXIgPSAocGUsIHB2LCBwcikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHByZWZlcnJlZF9maWxlOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiBwcmVmZXJyZWRfcjoKKyAgICAgICAgICAgIHB2X3N0ciA9ICclcy0lcycgJSAocHJlZmVycmVkX3YsIHByZWZlcnJlZF9yKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHZfc3RyID0gcHJlZmVycmVkX3YKKyAgICAgICAgaWYgbm90IChwcmVmZXJyZWRfZSBpcyBOb25lKToKKyAgICAgICAgICAgIHB2X3N0ciA9ICclczolcycgJSAocHJlZmVycmVkX2UsIHB2X3N0cikKKyAgICAgICAgaXRlbXN0ciA9ICIiCisgICAgICAgIGlmIGl0ZW06CisgICAgICAgICAgICBpdGVtc3RyID0gIiAoZm9yIGl0ZW0gJXMpIiAlIGl0ZW0KKyAgICAgICAgaWYgcHJlZmVycmVkX2ZpbGUgaXMgTm9uZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJwcmVmZXJyZWQgdmVyc2lvbiAlcyBvZiAlcyBub3QgYXZhaWxhYmxlJXMiLCBwdl9zdHIsIHBuLCBpdGVtc3RyKQorICAgICAgICAgICAgYXZhaWxhYmxlX3ZlcnMgPSBbXQorICAgICAgICAgICAgZm9yIGZpbGVfc2V0IGluIHBrZ19wbjoKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlX3NldDoKKyAgICAgICAgICAgICAgICAgICAgcGUsIHB2LCBwciA9IGRhdGFDYWNoZS5wa2dfcGVwdnByW2ZdCisgICAgICAgICAgICAgICAgICAgIHZlcl9zdHIgPSBwdgorICAgICAgICAgICAgICAgICAgICBpZiBwZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcl9zdHIgPSAiJXM6JXMiICUgKHBlLCB2ZXJfc3RyKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgdmVyX3N0ciBpbiBhdmFpbGFibGVfdmVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZV92ZXJzLmFwcGVuZCh2ZXJfc3RyKQorICAgICAgICAgICAgaWYgYXZhaWxhYmxlX3ZlcnM6CisgICAgICAgICAgICAgICAgYXZhaWxhYmxlX3ZlcnMuc29ydCgpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oInZlcnNpb25zIG9mICVzIGF2YWlsYWJsZTogJXMiLCBwbiwgJyAnLmpvaW4oYXZhaWxhYmxlX3ZlcnMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJzZWxlY3RpbmcgJXMgYXMgUFJFRkVSUkVEX1ZFUlNJT04gJXMgb2YgcGFja2FnZSAlcyVzIiwgcHJlZmVycmVkX2ZpbGUsIHB2X3N0ciwgcG4sIGl0ZW1zdHIpCisKKyAgICByZXR1cm4gKHByZWZlcnJlZF92ZXIsIHByZWZlcnJlZF9maWxlKQorCisKK2RlZiBmaW5kTGF0ZXN0UHJvdmlkZXIocG4sIGNmZ0RhdGEsIGRhdGFDYWNoZSwgZmlsZV9zZXQpOgorICAgICIiIgorICAgIFJldHVybiB0aGUgaGlnaGVzdCB2ZXJzaW9uIG9mIHRoZSBwcm92aWRlcnMgaW4gZmlsZV9zZXQuCisgICAgVGFrZSBkZWZhdWx0IHByZWZlcmVuY2VzIGludG8gYWNjb3VudC4KKyAgICAiIiIKKyAgICBsYXRlc3QgPSBOb25lCisgICAgbGF0ZXN0X3AgPSAwCisgICAgbGF0ZXN0X2YgPSBOb25lCisgICAgZm9yIGZpbGVfbmFtZSBpbiBmaWxlX3NldDoKKyAgICAgICAgcGUsIHB2LCBwciA9IGRhdGFDYWNoZS5wa2dfcGVwdnByW2ZpbGVfbmFtZV0KKyAgICAgICAgZHAgPSBkYXRhQ2FjaGUucGtnX2RwW2ZpbGVfbmFtZV0KKworICAgICAgICBpZiAobGF0ZXN0IGlzIE5vbmUpIG9yICgobGF0ZXN0X3AgPT0gZHApIGFuZCAodXRpbHMudmVyY21wKGxhdGVzdCwgKHBlLCBwdiwgcHIpKSA8IDApKSBvciAoZHAgPiBsYXRlc3RfcCk6CisgICAgICAgICAgICBsYXRlc3QgPSAocGUsIHB2LCBwcikKKyAgICAgICAgICAgIGxhdGVzdF9mID0gZmlsZV9uYW1lCisgICAgICAgICAgICBsYXRlc3RfcCA9IGRwCisKKyAgICByZXR1cm4gKGxhdGVzdCwgbGF0ZXN0X2YpCisKKworZGVmIGZpbmRCZXN0UHJvdmlkZXIocG4sIGNmZ0RhdGEsIGRhdGFDYWNoZSwgcGtnX3BuID0gTm9uZSwgaXRlbSA9IE5vbmUpOgorICAgICIiIgorICAgIElmIHRoZXJlIGlzIGEgUFJFRkVSUkVEX1ZFUlNJT04sIGZpbmQgdGhlIGhpZ2hlc3QtcHJpb3JpdHkgYmJmaWxlCisgICAgcHJvdmlkaW5nIHRoYXQgdmVyc2lvbi4gIElmIG5vdCwgZmluZCB0aGUgbGF0ZXN0IHZlcnNpb24gcHJvdmlkZWQgYnkKKyAgICBhbiBiYmZpbGUgaW4gdGhlIGhpZ2hlc3QtcHJpb3JpdHkgc2V0LgorICAgICIiIgorCisgICAgc29ydHBrZ19wbiA9IHNvcnRQcmlvcml0aWVzKHBuLCBkYXRhQ2FjaGUsIHBrZ19wbikKKyAgICAjIEZpbmQgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcHJvdmlkZXIgd2l0aCBhIFBSRUZFUlJFRF9WRVJTSU9OIHNldAorICAgIChwcmVmZXJyZWRfdmVyLCBwcmVmZXJyZWRfZmlsZSkgPSBmaW5kUHJlZmVycmVkUHJvdmlkZXIocG4sIGNmZ0RhdGEsIGRhdGFDYWNoZSwgc29ydHBrZ19wbiwgaXRlbSkKKyAgICAjIEZpbmQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBoaWdoZXN0IHByaW9yaXR5IHByb3ZpZGVyCisgICAgKGxhdGVzdCwgbGF0ZXN0X2YpID0gZmluZExhdGVzdFByb3ZpZGVyKHBuLCBjZmdEYXRhLCBkYXRhQ2FjaGUsIHNvcnRwa2dfcG5bMF0pCisKKyAgICBpZiBwcmVmZXJyZWRfZmlsZSBpcyBOb25lOgorICAgICAgICBwcmVmZXJyZWRfZmlsZSA9IGxhdGVzdF9mCisgICAgICAgIHByZWZlcnJlZF92ZXIgPSBsYXRlc3QKKworICAgIHJldHVybiAobGF0ZXN0LCBsYXRlc3RfZiwgcHJlZmVycmVkX3ZlciwgcHJlZmVycmVkX2ZpbGUpCisKKworZGVmIF9maWx0ZXJQcm92aWRlcnMocHJvdmlkZXJzLCBpdGVtLCBjZmdEYXRhLCBkYXRhQ2FjaGUpOgorICAgICIiIgorICAgIFRha2UgYSBsaXN0IG9mIHByb3ZpZGVycyBhbmQgZmlsdGVyL3Jlb3JkZXIgYWNjb3JkaW5nIHRvIHRoZQorICAgIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgcHJldmlvdXMgYnVpbGQgcmVzdWx0cworICAgICIiIgorICAgIGVsaWdpYmxlID0gW10KKyAgICBwcmVmZXJyZWRfdmVyc2lvbnMgPSB7fQorICAgIHNvcnRwa2dfcG4gPSB7fQorCisgICAgIyBUaGUgb3JkZXIgb2YgcHJvdmlkZXJzIGRlcGVuZHMgb24gdGhlIG9yZGVyIG9mIHRoZSBmaWxlcyBvbiB0aGUgZGlzaworICAgICMgdXAgdG8gaGVyZS4gU29ydCBwa2dfcG4gdG8gbWFrZSBkZXBlbmRlbmN5IGlzc3VlcyByZXByb2R1Y2libGUgcmF0aGVyCisgICAgIyB0aGFuIGVmZmVjdGl2ZWx5IHJhbmRvbS4KKyAgICBwcm92aWRlcnMuc29ydCgpCisKKyAgICAjIENvbGxhdGUgcHJvdmlkZXJzIGJ5IFBOCisgICAgcGtnX3BuID0ge30KKyAgICBmb3IgcCBpbiBwcm92aWRlcnM6CisgICAgICAgIHBuID0gZGF0YUNhY2hlLnBrZ19mbltwXQorICAgICAgICBpZiBwbiBub3QgaW4gcGtnX3BuOgorICAgICAgICAgICAgcGtnX3BuW3BuXSA9IFtdCisgICAgICAgIHBrZ19wbltwbl0uYXBwZW5kKHApCisKKyAgICBsb2dnZXIuZGVidWcoMSwgInByb3ZpZGVycyBmb3IgJXMgYXJlOiAlcyIsIGl0ZW0sIHBrZ19wbi5rZXlzKCkpCisKKyAgICAjIEZpcnN0IGFkZCBQUkVGRVJSRURfVkVSU0lPTlMKKyAgICBmb3IgcG4gaW4gcGtnX3BuOgorICAgICAgICBzb3J0cGtnX3BuW3BuXSA9IHNvcnRQcmlvcml0aWVzKHBuLCBkYXRhQ2FjaGUsIHBrZ19wbikKKyAgICAgICAgcHJlZmVycmVkX3ZlcnNpb25zW3BuXSA9IGZpbmRQcmVmZXJyZWRQcm92aWRlcihwbiwgY2ZnRGF0YSwgZGF0YUNhY2hlLCBzb3J0cGtnX3BuW3BuXSwgaXRlbSkKKyAgICAgICAgaWYgcHJlZmVycmVkX3ZlcnNpb25zW3BuXVsxXToKKyAgICAgICAgICAgIGVsaWdpYmxlLmFwcGVuZChwcmVmZXJyZWRfdmVyc2lvbnNbcG5dWzFdKQorCisgICAgIyBOb3cgYWRkIGxhdGVzdCB2ZXJzaW9ucworICAgIGZvciBwbiBpbiBzb3J0cGtnX3BuOgorICAgICAgICBpZiBwbiBpbiBwcmVmZXJyZWRfdmVyc2lvbnMgYW5kIHByZWZlcnJlZF92ZXJzaW9uc1twbl1bMV06CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBwcmVmZXJyZWRfdmVyc2lvbnNbcG5dID0gZmluZExhdGVzdFByb3ZpZGVyKHBuLCBjZmdEYXRhLCBkYXRhQ2FjaGUsIHNvcnRwa2dfcG5bcG5dWzBdKQorICAgICAgICBlbGlnaWJsZS5hcHBlbmQocHJlZmVycmVkX3ZlcnNpb25zW3BuXVsxXSkKKworICAgIGlmIGxlbihlbGlnaWJsZSkgPT0gMDoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJubyBlbGlnaWJsZSBwcm92aWRlcnMgZm9yICVzIiwgaXRlbSkKKyAgICAgICAgcmV0dXJuIDAKKworICAgICMgSWYgcG4gPT0gaXRlbSwgZ2l2ZSBpdCBhIHNsaWdodCBkZWZhdWx0IHByZWZlcmVuY2UKKyAgICAjIFRoaXMgbWVhbnMgUFJFRkVSUkVEX1BST1ZJREVSX2Zvb2JhciBkZWZhdWx0cyB0byBmb29iYXIgaWYgYXZhaWxhYmxlCisgICAgZm9yIHAgaW4gcHJvdmlkZXJzOgorICAgICAgICBwbiA9IGRhdGFDYWNoZS5wa2dfZm5bcF0KKyAgICAgICAgaWYgcG4gIT0gaXRlbToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIChuZXd2ZXJzLCBmbikgPSBwcmVmZXJyZWRfdmVyc2lvbnNbcG5dCisgICAgICAgIGlmIG5vdCBmbiBpbiBlbGlnaWJsZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsaWdpYmxlLnJlbW92ZShmbikKKyAgICAgICAgZWxpZ2libGUgPSBbZm5dICsgZWxpZ2libGUKKworICAgIHJldHVybiBlbGlnaWJsZQorCisKK2RlZiBmaWx0ZXJQcm92aWRlcnMocHJvdmlkZXJzLCBpdGVtLCBjZmdEYXRhLCBkYXRhQ2FjaGUpOgorICAgICIiIgorICAgIFRha2UgYSBsaXN0IG9mIHByb3ZpZGVycyBhbmQgZmlsdGVyL3Jlb3JkZXIgYWNjb3JkaW5nIHRvIHRoZQorICAgIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgcHJldmlvdXMgYnVpbGQgcmVzdWx0cworICAgIFRha2VzIGEgIm5vcm1hbCIgdGFyZ2V0IGl0ZW0KKyAgICAiIiIKKworICAgIGVsaWdpYmxlID0gX2ZpbHRlclByb3ZpZGVycyhwcm92aWRlcnMsIGl0ZW0sIGNmZ0RhdGEsIGRhdGFDYWNoZSkKKworICAgIHByZWZlcnZhciA9IGNmZ0RhdGEuZ2V0VmFyKCdQUkVGRVJSRURfUFJPVklERVJfJXMnICUgaXRlbSwgVHJ1ZSkKKyAgICBpZiBwcmVmZXJ2YXI6CisgICAgICAgIGRhdGFDYWNoZS5wcmVmZXJyZWRbaXRlbV0gPSBwcmVmZXJ2YXIKKworICAgIGZvdW5kVW5pcXVlID0gRmFsc2UKKyAgICBpZiBpdGVtIGluIGRhdGFDYWNoZS5wcmVmZXJyZWQ6CisgICAgICAgIGZvciBwIGluIGVsaWdpYmxlOgorICAgICAgICAgICAgcG4gPSBkYXRhQ2FjaGUucGtnX2ZuW3BdCisgICAgICAgICAgICBpZiBkYXRhQ2FjaGUucHJlZmVycmVkW2l0ZW1dID09IHBuOgorICAgICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKCJzZWxlY3RpbmcgJXMgdG8gc2F0aXNmeSAlcyBkdWUgdG8gUFJFRkVSUkVEX1BST1ZJREVSUyIsIHBuLCBpdGVtKQorICAgICAgICAgICAgICAgIGVsaWdpYmxlLnJlbW92ZShwKQorICAgICAgICAgICAgICAgIGVsaWdpYmxlID0gW3BdICsgZWxpZ2libGUKKyAgICAgICAgICAgICAgICBmb3VuZFVuaXF1ZSA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgbG9nZ2VyLmRlYnVnKDEsICJzb3J0ZWQgcHJvdmlkZXJzIGZvciAlcyBhcmU6ICVzIiwgaXRlbSwgZWxpZ2libGUpCisKKyAgICByZXR1cm4gZWxpZ2libGUsIGZvdW5kVW5pcXVlCisKK2RlZiBmaWx0ZXJQcm92aWRlcnNSdW5UaW1lKHByb3ZpZGVycywgaXRlbSwgY2ZnRGF0YSwgZGF0YUNhY2hlKToKKyAgICAiIiIKKyAgICBUYWtlIGEgbGlzdCBvZiBwcm92aWRlcnMgYW5kIGZpbHRlci9yZW9yZGVyIGFjY29yZGluZyB0byB0aGUKKyAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIHByZXZpb3VzIGJ1aWxkIHJlc3VsdHMKKyAgICBUYWtlcyBhICJydW50aW1lIiB0YXJnZXQgaXRlbQorICAgICIiIgorCisgICAgZWxpZ2libGUgPSBfZmlsdGVyUHJvdmlkZXJzKHByb3ZpZGVycywgaXRlbSwgY2ZnRGF0YSwgZGF0YUNhY2hlKQorCisgICAgIyBTaG91bGQgdXNlIGRhdGFDYWNoZS5wcmVmZXJyZWQgaGVyZT8KKyAgICBwcmVmZXJyZWQgPSBbXQorICAgIHByZWZlcnJlZF92YXJzID0gW10KKyAgICBwbnMgPSB7fQorICAgIGZvciBwIGluIGVsaWdpYmxlOgorICAgICAgICBwbnNbZGF0YUNhY2hlLnBrZ19mbltwXV0gPSBwCisgICAgZm9yIHAgaW4gZWxpZ2libGU6CisgICAgICAgIHBuID0gZGF0YUNhY2hlLnBrZ19mbltwXQorICAgICAgICBwcm92aWRlcyA9IGRhdGFDYWNoZS5wbl9wcm92aWRlc1twbl0KKyAgICAgICAgZm9yIHByb3ZpZGUgaW4gcHJvdmlkZXM6CisgICAgICAgICAgICBwcmVmZXJ2YXIgPSBjZmdEYXRhLmdldFZhcignUFJFRkVSUkVEX1BST1ZJREVSXyVzJyAlIHByb3ZpZGUsIFRydWUpCisgICAgICAgICAgICAjbG9nZ2VyLmRlYnVnKDEsICJjaGVja2luZyBQUkVGRVJSRURfUFJPVklERVJfJXMgKHZhbHVlICVzKSBhZ2FpbnN0ICVzIiwgcHJvdmlkZSwgcHJlZmVydmFyLCBwbnMua2V5cygpKQorICAgICAgICAgICAgaWYgcHJlZmVydmFyIGluIHBucyBhbmQgcG5zW3ByZWZlcnZhcl0gbm90IGluIHByZWZlcnJlZDoKKyAgICAgICAgICAgICAgICB2YXIgPSAiUFJFRkVSUkVEX1BST1ZJREVSXyVzID0gJXMiICUgKHByb3ZpZGUsIHByZWZlcnZhcikKKyAgICAgICAgICAgICAgICBsb2dnZXIudmVyYm9zZSgic2VsZWN0aW5nICVzIHRvIHNhdGlzZnkgcnVudGltZSAlcyBkdWUgdG8gJXMiLCBwcmVmZXJ2YXIsIGl0ZW0sIHZhcikKKyAgICAgICAgICAgICAgICBwcmVmZXJyZWRfdmFycy5hcHBlbmQodmFyKQorICAgICAgICAgICAgICAgIHByZWYgPSBwbnNbcHJlZmVydmFyXQorICAgICAgICAgICAgICAgIGVsaWdpYmxlLnJlbW92ZShwcmVmKQorICAgICAgICAgICAgICAgIGVsaWdpYmxlID0gW3ByZWZdICsgZWxpZ2libGUKKyAgICAgICAgICAgICAgICBwcmVmZXJyZWQuYXBwZW5kKHByZWYpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIG51bWJlclByZWZlcnJlZCA9IGxlbihwcmVmZXJyZWQpCisKKyAgICBpZiBudW1iZXJQcmVmZXJyZWQgPiAxOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlRyeWluZyB0byByZXNvbHZlIHJ1bnRpbWUgZGVwZW5kZW5jeSAlcyByZXN1bHRlZCBpbiBjb25mbGljdGluZyBQUkVGRVJSRURfUFJPVklERVIgZW50cmllcyBiZWluZyBmb3VuZC5cblRoZSBwcm92aWRlcnMgZm91bmQgd2VyZTogJXNcblRoZSBQUkVGRVJSRURfUFJPVklERVIgZW50cmllcyByZXN1bHRpbmcgaW4gdGhpcyBjb25mbGljdCB3ZXJlOiAlcyIsIGl0ZW0sIHByZWZlcnJlZCwgcHJlZmVycmVkX3ZhcnMpCisKKyAgICBsb2dnZXIuZGVidWcoMSwgInNvcnRlZCBydW50aW1lIHByb3ZpZGVycyBmb3IgJXMgYXJlOiAlcyIsIGl0ZW0sIGVsaWdpYmxlKQorCisgICAgcmV0dXJuIGVsaWdpYmxlLCBudW1iZXJQcmVmZXJyZWQKKworcmVnZXhwX2NhY2hlID0ge30KKworZGVmIGdldFJ1bnRpbWVQcm92aWRlcnMoZGF0YUNhY2hlLCByZGVwZW5kKToKKyAgICAiIiIKKyAgICBSZXR1cm4gYW55IHByb3ZpZGVycyBvZiBydW50aW1lIGRlcGVuZGVuY3kKKyAgICAiIiIKKyAgICBycHJvdmlkZXJzID0gW10KKworICAgIGlmIHJkZXBlbmQgaW4gZGF0YUNhY2hlLnJwcm92aWRlcnM6CisgICAgICAgIHJwcm92aWRlcnMgKz0gZGF0YUNhY2hlLnJwcm92aWRlcnNbcmRlcGVuZF0KKworICAgIGlmIHJkZXBlbmQgaW4gZGF0YUNhY2hlLnBhY2thZ2VzOgorICAgICAgICBycHJvdmlkZXJzICs9IGRhdGFDYWNoZS5wYWNrYWdlc1tyZGVwZW5kXQorCisgICAgaWYgcnByb3ZpZGVyczoKKyAgICAgICAgcmV0dXJuIHJwcm92aWRlcnMKKworICAgICMgT25seSBzZWFyY2ggZHluYW1pYyBwYWNrYWdlcyBpZiB3ZSBjYW4ndCBmaW5kIGFueXRoaW5nIGluIG90aGVyIHZhcmlhYmxlcworICAgIGZvciBwYXR0ZXJuIGluIGRhdGFDYWNoZS5wYWNrYWdlc19keW5hbWljOgorICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKCcrJywgIlwrIikKKyAgICAgICAgaWYgcGF0dGVybiBpbiByZWdleHBfY2FjaGU6CisgICAgICAgICAgICByZWdleHAgPSByZWdleHBfY2FjaGVbcGF0dGVybl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWdleHAgPSByZS5jb21waWxlKHBhdHRlcm4pCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJFcnJvciBwYXJzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiAnJXMnIiwgcGF0dGVybikKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgcmVnZXhwX2NhY2hlW3BhdHRlcm5dID0gcmVnZXhwCisgICAgICAgIGlmIHJlZ2V4cC5tYXRjaChyZGVwZW5kKToKKyAgICAgICAgICAgIHJwcm92aWRlcnMgKz0gZGF0YUNhY2hlLnBhY2thZ2VzX2R5bmFtaWNbcGF0dGVybl0KKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiQXNzdW1pbmcgJXMgaXMgYSBkeW5hbWljIHBhY2thZ2UsIGJ1dCBpdCBtYXkgbm90IGV4aXN0IiAlIHJkZXBlbmQpCisKKyAgICByZXR1cm4gcnByb3ZpZGVycwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9idWlsdGluLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL2J1aWx0aW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0OGU0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9idWlsdGluLnB5CkBAIC0wLDAgKzEsNzEwIEBACisjIGJ1aWx0aW4ucHkgLSBidWlsdGlucyBhbmQgdXRpbGl0aWVzIGRlZmluaXRpb25zIGZvciBweXNoLgorIworIyBDb3B5cmlnaHQgMjAwNyBQYXRyaWNrIE1lemFyZAorIworIyBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCisjIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisKKyIiIkJ1aWx0aW4gYW5kIGludGVybmFsIHV0aWxpdGllcyBpbXBsZW1lbnRhdGlvbnMuCisKKy0gQmV3YXJlIG5vdCB0byB1c2UgcHl0aG9uIGludGVycHJldGVyIGVudmlyb25tZW50IGFzIGlmIGl0IHdlcmUgdGhlIHNoZWxsCitlbnZpcm9ubWVudC4gRm9yIGluc3RhbmNlLCBjb21tYW5kcyB3b3JraW5nIGRpcmVjdG9yeSBtdXN0IGJlIGV4cGxpY2l0ZWx5IGhhbmRsZWQKK3Rocm91Z2ggZW52WydQV0QnXSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gcHl0aG9uIHdvcmtpbmcgZGlyZWN0b3J5LgorIiIiCitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorCitkZWYgaGFzX3N1YnByb2Nlc3NfYnVnKCk6CisgICAgcmV0dXJuIGdldGF0dHIoc3VicHJvY2VzcywgJ2xpc3QyY21kbGluZScpIGFuZCBcCisgICAgICAgKCAgICBzdWJwcm9jZXNzLmxpc3QyY21kbGluZShbJyddKSA9PSAnJyBvciBcCisgICAgICAgICAgICBzdWJwcm9jZXNzLmxpc3QyY21kbGluZShbJ2Zvb3xiYXInXSkgPT0gJ2Zvb3xiYXInKQorICAgICAgICAgICAgCisjIERldGVjdCBweXRob24gYnVnIDE2MzQzNDM6ICJzdWJwcm9jZXNzIHN3YWxsb3dzIGVtcHR5IGFyZ3VtZW50cyB1bmRlciB3aW4zMiIKKyMgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci9pbmRleC5waHA/ZnVuYz1kZXRhaWwmYWlkPTE2MzQzNDMmZ3JvdXBfaWQ9NTQ3MCZhdGlkPTEwNTQ3MD4KKyMgQWxzbyBkZXRlY3Q6ICJbIDE3MTA4MDIgXSBzdWJwcm9jZXNzIG11c3QgZXNjYXBlIHJlZGlyZWN0aW9uIGNoYXJhY3RlcnMgdW5kZXIgd2luMzIiCisjIDxodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvaW5kZXgucGhwP2Z1bmM9ZGV0YWlsJmFpZD0xNzEwODAyJmdyb3VwX2lkPTU0NzAmYXRpZD0xMDU0NzA+CitpZiBoYXNfc3VicHJvY2Vzc19idWcoKToKKyAgICBpbXBvcnQgc3VicHJvY2Vzc19maXgKKyAgICBzdWJwcm9jZXNzLmxpc3QyY21kbGluZSA9IHN1YnByb2Nlc3NfZml4Lmxpc3QyY21kbGluZQorCitmcm9tIHNoZXJyb3JzIGltcG9ydCAqCisKK2NsYXNzIE5vbkV4aXRpbmdQYXJzZXIob3B0cGFyc2UuT3B0aW9uUGFyc2VyKToKKyAgICAiIiJPcHRpb25QYXJzZXIgZGVmYXVsdCBiZWhhdmlvdXIgdXBvbiBlcnJvciBpcyB0byBwcmludCB0aGUgZXJyb3IgbWVzc2FnZSBhbmQKKyAgICBleGl0LiBSYWlzZSBhIHV0aWxpdHkgZXJyb3IgaW5zdGVhZC4KKyAgICAiIiIKKyAgICBkZWYgZXJyb3Ioc2VsZiwgbXNnKToKKyAgICAgICAgcmFpc2UgVXRpbGl0eUVycm9yKG1zZykKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBzZXQgc3BlY2lhbCBidWlsdGluCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCitPUFRfU0VUID0gTm9uRXhpdGluZ1BhcnNlcih1c2FnZT0ic2V0IC0gc2V0IG9yIHVuc2V0IG9wdGlvbnMgYW5kIHBvc2l0aW9uYWwgcGFyYW1ldGVycyIpCitPUFRfU0VULmFkZF9vcHRpb24oICctZicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2hhc19mJywgZGVmYXVsdD1GYWxzZSwKKyAgICBoZWxwPSdUaGUgc2hlbGwgc2hhbGwgZGlzYWJsZSBwYXRobmFtZSBleHBhbnNpb24uJykKK09QVF9TRVQuYWRkX29wdGlvbignLWUnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdoYXNfZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgaGVscD0iIiJXaGVuIHRoaXMgb3B0aW9uIGlzIG9uLCBpZiBhIHNpbXBsZSBjb21tYW5kIGZhaWxzIGZvciBhbnkgb2YgdGhlIFwKKyAgICByZWFzb25zIGxpc3RlZCBpbiBDb25zZXF1ZW5jZXMgb2YgU2hlbGwgRXJyb3JzIG9yIHJldHVybnMgYW4gZXhpdCBzdGF0dXMgXAorICAgIHZhbHVlID4wLCBhbmQgaXMgbm90IHBhcnQgb2YgdGhlIGNvbXBvdW5kIGxpc3QgZm9sbG93aW5nIGEgd2hpbGUsIHVudGlsLCBcCisgICAgb3IgaWYga2V5d29yZCwgYW5kIGlzIG5vdCBhIHBhcnQgb2YgYW4gQU5EIG9yIE9SIGxpc3QsIGFuZCBpcyBub3QgYSBcCisgICAgcGlwZWxpbmUgcHJlY2VkZWQgYnkgdGhlICEgcmVzZXJ2ZWQgd29yZCwgdGhlbiB0aGUgc2hlbGwgc2hhbGwgaW1tZWRpYXRlbHkgXAorICAgIGV4aXQuIiIiKQorT1BUX1NFVC5hZGRfb3B0aW9uKCcteCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2hhc194JywgZGVmYXVsdD1GYWxzZSwKKyAgICBoZWxwPSIiIlRoZSBzaGVsbCBzaGFsbCB3cml0ZSB0byBzdGFuZGFyZCBlcnJvciBhIHRyYWNlIGZvciBlYWNoIGNvbW1hbmQgXAorICAgIGFmdGVyIGl0IGV4cGFuZHMgdGhlIGNvbW1hbmQgYW5kIGJlZm9yZSBpdCBleGVjdXRlcyBpdC4gSXQgaXMgdW5zcGVjaWZpZWQgXAorICAgIHdoZXRoZXIgdGhlIGNvbW1hbmQgdGhhdCB0dXJucyB0cmFjaW5nIG9mZiBpcyB0cmFjZWQuIiIiKQorCitkZWYgYnVpbHRpbl9zZXQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKworICAgIG9wdGlvbiwgYXJncyA9IE9QVF9TRVQucGFyc2VfYXJncyhhcmdzKQorICAgIGVudiA9IGludGVycC5nZXRfZW52KCkKKyAgICAKKyAgICBpZiBvcHRpb24uaGFzX2Y6CisgICAgICAgIGVudi5zZXRfb3B0KCctZicpCisgICAgaWYgb3B0aW9uLmhhc19lOgorICAgICAgICBlbnYuc2V0X29wdCgnLWUnKQorICAgIGlmIG9wdGlvbi5oYXNfeDoKKyAgICAgICAgZW52LnNldF9vcHQoJy14JykKKyAgICByZXR1cm4gMAorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBzaGlmdCBzcGVjaWFsIGJ1aWx0aW4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKK2RlZiBidWlsdGluX3NoaWZ0KG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgICAgIAorICAgIHBhcmFtcyA9IGludGVycC5nZXRfZW52KCkuZ2V0X3Bvc2l0aW9uYWxfYXJncygpCisgICAgaWYgYXJnczoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbiA9IGludChhcmdzWzBdKQorICAgICAgICAgICAgaWYgbiA+IGxlbihwYXJhbXMpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgZWxzZToKKyAgICAgICAgbiA9IDEKKyAgICAgICAgCisgICAgcGFyYW1zWzpuXSA9IFtdCisgICAgaW50ZXJwLmdldF9lbnYoKS5zZXRfcG9zaXRpb25hbF9hcmdzKHBhcmFtcykKKyAgICByZXR1cm4gMAorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBleHBvcnQgc3BlY2lhbCBidWlsdGluCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCitPUFRfRVhQT1JUID0gTm9uRXhpdGluZ1BhcnNlcih1c2FnZT0ic2V0IC0gc2V0IG9yIHVuc2V0IG9wdGlvbnMgYW5kIHBvc2l0aW9uYWwgcGFyYW1ldGVycyIpCitPUFRfRVhQT1JULmFkZF9vcHRpb24oJy1wJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0naGFzX3AnLCBkZWZhdWx0PUZhbHNlKQorCitkZWYgYnVpbHRpbl9leHBvcnQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgb3B0aW9uLCBhcmdzID0gT1BUX0VYUE9SVC5wYXJzZV9hcmdzKGFyZ3MpCisgICAgaWYgb3B0aW9uLmhhc19wOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKyAgICAKKyAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5hbWUsIHZhbHVlID0gYXJnLnNwbGl0KCc9JywgMSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBuYW1lLCB2YWx1ZSA9IGFyZywgTm9uZQorICAgICAgICBlbnYgPSBpbnRlcnAuZ2V0X2VudigpLmV4cG9ydChuYW1lLCB2YWx1ZSkKKyAgICAKKyAgICByZXR1cm4gMAorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyByZXR1cm4gc3BlY2lhbCBidWlsdGluCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCitkZWYgYnVpbHRpbl9yZXR1cm4obmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICByZXMgPSAwCisgICAgaWYgYXJnczoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzID0gaW50KGFyZ3NbMF0pCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmVzID0gMAorICAgICAgICBpZiBub3QgMDw9cmVzPD0yNTU6CisgICAgICAgICAgICByZXMgPSAwCisgICAgICAgICAgICAKKyAgICAjIEJVRzogc2hvdWxkIGJlIGxhc3QgZXhlY3V0ZWQgY29tbWFuZCBleGl0IGNvZGUgICAgICAgIAorICAgIHJhaXNlIFJldHVyblNpZ25hbChyZXMpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgdHJhcCBzcGVjaWFsIGJ1aWx0aW4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKK2RlZiBidWlsdGluX3RyYXAobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICBpZiBsZW4oYXJncykgPCAyOgorICAgICAgICBzdGRlcnIud3JpdGUoJ3RyYXA6IHVzYWdlOiB0cmFwIFtbYXJnXSBzaWduYWxfc3BlYyAuLi5dXG4nKQorICAgICAgICByZXR1cm4gMgorCisgICAgYWN0aW9uID0gYXJnc1swXQorICAgIGZvciBzaWcgaW4gYXJnc1sxOl06CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGVudi50cmFwc1tzaWddID0gYWN0aW9uCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHN0ZGVyci53cml0ZSgndHJhcDogJXNcbicgJSBzdHIoZSkpCisgICAgcmV0dXJuIDAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyB1bnNldCBzcGVjaWFsIGJ1aWx0aW4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitPUFRfVU5TRVQgPSBOb25FeGl0aW5nUGFyc2VyKCJ1bnNldCAtIHVuc2V0IHZhbHVlcyBhbmQgYXR0cmlidXRlcyBvZiB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyIpCitPUFRfVU5TRVQuYWRkX29wdGlvbiggJy1mJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0naGFzX2YnLCBkZWZhdWx0PUZhbHNlKQorT1BUX1VOU0VULmFkZF9vcHRpb24oICctdicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2hhc192JywgZGVmYXVsdD1GYWxzZSkKKworZGVmIGJ1aWx0aW5fdW5zZXQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgb3B0aW9uLCBhcmdzID0gT1BUX1VOU0VULnBhcnNlX2FyZ3MoYXJncykKKyAgICAKKyAgICBzdGF0dXMgPSAwCisgICAgZW52ID0gaW50ZXJwLmdldF9lbnYoKQorICAgIGZvciBhcmcgaW4gYXJnczogICAgCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG9wdGlvbi5oYXNfZjoKKyAgICAgICAgICAgICAgICBlbnYucmVtb3ZlX2Z1bmN0aW9uKGFyZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVsIGVudlthcmddCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IFZhckFzc2lnbm1lbnRFcnJvcjoKKyAgICAgICAgICAgIHN0YXR1cyA9IDEKKyAgICAgICAgICAgIAorICAgIHJldHVybiBzdGF0dXMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyB3YWl0IHNwZWNpYWwgYnVpbHRpbgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorZGVmIGJ1aWx0aW5fd2FpdChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorCisgICAgcmV0dXJuIGludGVycC53YWl0KFtpbnQoYXJnKSBmb3IgYXJnIGluIGFyZ3NdKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIGNhdCB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVmIHV0aWxpdHlfY2F0KG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisKKyAgICBpZiBub3QgYXJnczoKKyAgICAgICAgYXJncyA9IFsnLSddCisKKyAgICBzdGF0dXMgPSAwCisgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgICAgICBpZiBhcmcgPT0gJy0nOgorICAgICAgICAgICAgZGF0YSA9IHN0ZGluLnJlYWQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihlbnZbJ1BXRCddLCBhcmcpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IGZpbGUocGF0aCwgJ3JiJykKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAxCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgc3Rkb3V0LndyaXRlKGRhdGEpCisgICAgICAgIHN0ZG91dC5mbHVzaCgpCisgICAgcmV0dXJuIHN0YXR1cworICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBjZCB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCitPUFRfQ0QgPSBOb25FeGl0aW5nUGFyc2VyKCJjZCAtIGNoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkiKQorCitkZWYgdXRpbGl0eV9jZChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorCisgICAgb3B0aW9uLCBhcmdzID0gT1BUX0NELnBhcnNlX2FyZ3MoYXJncykKKyAgICBlbnYgPSBpbnRlcnAuZ2V0X2VudigpCisgICAgCisgICAgZGlyZWN0b3J5ID0gTm9uZQorICAgIHByaW50ZGlyID0gRmFsc2UKKyAgICBpZiBub3QgYXJnczoKKyAgICAgICAgaG9tZSA9IGVudi5nZXQoJ0hPTUUnKQorICAgICAgICBpZiBob21lOgorICAgICAgICAgICAgIyBVbnNwZWNpZmllZCwgZG8gbm90aGluZworICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpcmVjdG9yeSA9IGhvbWUKKyAgICBlbGlmIGxlbihhcmdzKT09MToKKyAgICAgICAgZGlyZWN0b3J5ID0gYXJnc1swXQorICAgICAgICBpZiBkaXJlY3Rvcnk9PSctJzoKKyAgICAgICAgICAgIGlmICdPTERQV0QnIG5vdCBpbiBlbnY6CisgICAgICAgICAgICAgICAgcmFpc2UgVXRpbGl0eUVycm9yKCJPTERQV0Qgbm90IHNldCIpCisgICAgICAgICAgICBwcmludGRpciA9IFRydWUKKyAgICAgICAgICAgIGRpcmVjdG9yeSA9IGVudlsnT0xEUFdEJ10KKyAgICBlbHNlOgorICAgICAgICByYWlzZSBVdGlsaXR5RXJyb3IoInRvbyBtYW55IGFyZ3VtZW50cyIpCisgICAgICAgICAgICAKKyAgICBjdXJwYXRoID0gTm9uZQorICAgICMgQWJzb2x1dGUgZGlyZWN0b3JpZXMgd2lsbCBiZSBoYW5kbGVkIGNvcnJlY3RseSBieSB0aGUgb3MucGF0aC5qb2luIGNhbGwuCisgICAgaWYgbm90IGRpcmVjdG9yeS5zdGFydHN3aXRoKCcuJykgYW5kIG5vdCBkaXJlY3Rvcnkuc3RhcnRzd2l0aCgnLi4nKToKKyAgICAgICAgY2RwYXRocyA9IGVudi5nZXQoJ0NEUEFUSCcsICcuJykuc3BsaXQoJzsnKQorICAgICAgICBmb3IgY2RwYXRoIGluIGNkcGF0aHM6CisgICAgICAgICAgICBwID0gb3MucGF0aC5qb2luKGNkcGF0aCwgZGlyZWN0b3J5KQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwKToKKyAgICAgICAgICAgICAgICBjdXJwYXRoID0gcAorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgCisgICAgaWYgY3VycGF0aCBpcyBOb25lOgorICAgICAgICBjdXJwYXRoID0gZGlyZWN0b3J5CisgICAgY3VycGF0aCA9IG9zLnBhdGguam9pbihlbnZbJ1BXRCddLCBkaXJlY3RvcnkpCisKKyAgICBlbnZbJ09MRFBXRCddID0gZW52WydQV0QnXQorICAgIGVudlsnUFdEJ10gPSBjdXJwYXRoCisgICAgaWYgcHJpbnRkaXI6CisgICAgICAgIHN0ZG91dC53cml0ZSgnJXNcbicgJSBjdXJwYXRoKQorICAgIHJldHVybiAwCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgY29sb24gdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorZGVmIHV0aWxpdHlfY29sb24obmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICByZXR1cm4gMAorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBlY2hvIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKK2RlZiB1dGlsaXR5X2VjaG8obmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgIyBFY2hvIG9ubHkgdGFrZXMgYXJndW1lbnRzLCBubyBvcHRpb25zLiBVc2UgcHJpbnRmIGlmIHlvdSBuZWVkIGZhbmN5IHN0dWZmLgorICAgIG91dHB1dCA9ICcgJy5qb2luKGFyZ3MpICsgJ1xuJworICAgIHN0ZG91dC53cml0ZShvdXRwdXQpCisgICAgc3Rkb3V0LmZsdXNoKCkKKyAgICByZXR1cm4gMAorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBlZ3JlcCB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBlZ3JlcCBpcyB1c3VhbGx5IGEgc2hlbGwgc2NyaXB0LgorIyBVbmZvcnR1bmF0ZWx5LCBweXNoIGRvZXMgbm90IHN1cHBvcnQgc2hlbGwgc2NyaXB0cyAqd2l0aCBhcmd1bWVudHMqIHJpZ2h0IG5vdywKKyMgc28gdGhlIHJlZGlyZWN0aW9uIGlzIGltcGxlbWVudGVkIGhlcmUsIGFzc3VtaW5nIGdyZXAgaXMgYXZhaWxhYmxlLgorZGVmIHV0aWxpdHlfZWdyZXAobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgcmV0dXJuIHJ1bl9jb21tYW5kKCdncmVwJywgWyctRSddICsgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIAorICAgICAgICBzdGRlcnIsIGRlYnVnZmxhZ3MpCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIGVudiB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCitkZWYgdXRpbGl0eV9lbnYobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAKKyAgICBpZiBhcmdzIGFuZCBhcmdzWzBdPT0nLWknOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdlbnY6IC1pIG9wdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQnKQorICAgIAorICAgIGkgPSAwCisgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgICAgICBpZiAnPScgbm90IGluIGFyZzoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgICMgVXBkYXRlIHRoZSBjdXJyZW50IGVudmlyb25tZW50CisgICAgICAgIG5hbWUsIHZhbHVlID0gYXJnLnNwbGl0KCc9JywgMSkKKyAgICAgICAgZW52W25hbWVdID0gdmFsdWUKKyAgICAgICAgaSArPSAxCisgICAgICAgIAorICAgIGlmIGFyZ3NbaTpdOgorICAgICAgICAjIEZpbmQgdGhlbiBleGVjdXRlIHRoZSBzcGVjaWZpZWQgaW50ZXJwcmV0ZXIKKyAgICAgICAgdXRpbGl0eSA9IGVudi5maW5kX2luX3BhdGgoYXJnc1tpXSkKKyAgICAgICAgaWYgbm90IHV0aWxpdHk6CisgICAgICAgICAgICByZXR1cm4gMTI3CisgICAgICAgIGFyZ3NbaTppKzFdID0gdXRpbGl0eQorICAgICAgICBuYW1lID0gYXJnc1tpXQorICAgICAgICBhcmdzID0gYXJnc1tpKzE6XQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gcnVuX2NvbW1hbmQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgCisgICAgICAgICAgICAgICAgZGVidWdmbGFncykKKyAgICAgICAgZXhjZXB0IFV0aWxpdHlFcnJvcjoKKyAgICAgICAgICAgIHN0ZGVyci53cml0ZSgnZW52OiBmYWlsZWQgdG8gZXhlY3V0ZSAlcycgJSAnICcuam9pbihbbmFtZV0rYXJncykpCisgICAgICAgICAgICByZXR1cm4gMTI2ICAgICAgICAgICAgCisgICAgZWxzZToKKyAgICAgICAgZm9yIHBhaXIgaW4gZW52LmdldF92YXJpYWJsZXMoKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHN0ZG91dC53cml0ZSgnJXM9JXNcbicgJSBwYWlyKQorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIGV4aXQgdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlZiB1dGlsaXR5X2V4aXQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgcmVzID0gTm9uZQorICAgIGlmIGFyZ3M6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlcyA9IGludChhcmdzWzBdKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJlcyA9IE5vbmUKKyAgICAgICAgaWYgbm90IDA8PXJlczw9MjU1OgorICAgICAgICAgICAgcmVzID0gTm9uZQorICAgICAgICAgICAgCisgICAgaWYgcmVzIGlzIE5vbmU6CisgICAgICAgICMgQlVHOiBzaG91bGQgYmUgbGFzdCBleGVjdXRlZCBjb21tYW5kIGV4aXQgY29kZQorICAgICAgICByZXMgPSAwCisgICAgICAgIAorICAgIHJhaXNlIEV4aXRTaWduYWwocmVzKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIGZncmVwIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHNlZSBlZ3JlcAorZGVmIHV0aWxpdHlfZmdyZXAobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgcmV0dXJuIHJ1bl9jb21tYW5kKCdncmVwJywgWyctRiddICsgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIAorICAgICAgICBzdGRlcnIsIGRlYnVnZmxhZ3MpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgZ3VuemlwIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHNlZSBlZ3JlcAorZGVmIHV0aWxpdHlfZ3VuemlwKG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgICAgIAorICAgIHJldHVybiBydW5fY29tbWFuZCgnZ3ppcCcsIFsnLWQnXSArIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCAKKyAgICAgICAgc3RkZXJyLCBkZWJ1Z2ZsYWdzKQorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBraWxsIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWYgdXRpbGl0eV9raWxsKG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgICAgIAorICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICAgICAgcGlkID0gaW50KGFyZykKKyAgICAgICAgc3RhdHVzID0gc3VicHJvY2Vzcy5jYWxsKFsncHNraWxsJywgJy9UJywgc3RyKHBpZCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAjIHBza2lsbCBpcyBhc3luY2hyb25vdXMsIGhlbmNlIHRoZSBzdHVwaWQgcG9sbGluZyBsb29wCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbJ3BzbGlzdCcsIHN0cihwaWQpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICAgICAgb3V0cHV0ID0gcC5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAgICBpZiAoJ3Byb2Nlc3MgJWQgd2FzIG5vdCcgJSBwaWQpIGluIG91dHB1dDoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorICAgIHJldHVybiBzdGF0dXMKKyAgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgbWtkaXIgdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK09QVF9NS0RJUiA9IE5vbkV4aXRpbmdQYXJzZXIoIm1rZGlyIC0gbWFrZSBkaXJlY3Rvcmllcy4iKQorT1BUX01LRElSLmFkZF9vcHRpb24oJy1wJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0naGFzX3AnLCBkZWZhdWx0PUZhbHNlKQorCitkZWYgdXRpbGl0eV9ta2RpcihuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgICAgICAKKyAgICAjIFRPRE86IGltcGxlbWVudCB1bWFzaworICAgICMgVE9ETzogaW1wbGVtZW50IHByb3BlciB1dGlsaXR5IGVycm9yIHJlcG9ydAorICAgIG9wdGlvbiwgYXJncyA9IE9QVF9NS0RJUi5wYXJzZV9hcmdzKGFyZ3MpCisgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGVudlsnUFdEJ10sIGFyZykKKyAgICAgICAgaWYgb3B0aW9uLmhhc19wOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHBhdGgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOiAgICAgICAgICAgICAgIAorICAgICAgICAgICAgb3MubWtkaXIocGF0aCkKKyAgICByZXR1cm4gMAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIG5ldHN0YXQgdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlZiB1dGlsaXR5X25ldHN0YXQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgIyBEbyB5b3UgcmVhbGx5IGV4cGVjdCBtZSB0byBpbXBsZW1lbnQgbmV0c3RhdCA/CisgICAgIyBUaGlzIGVtcHR5IGZvcm0gaXMgZW5vdWdoIGZvciBNZXJjdXJpYWwgdGVzdHMgc2luY2UgaXQncworICAgICMgc3VwcG9zZWQgdG8gZ2VuZXJhdGUgbm90aGluZyB1cG9uIHN1Y2Nlc3MuIEZha2luZyB0aGlzIHRlc3QKKyAgICAjIGlzIG5vdCBhIGJpZyBkZWFsIGVpdGhlci4KKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIHB3ZCB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCitPUFRfUFdEID0gTm9uRXhpdGluZ1BhcnNlcigicHdkIC0gcmV0dXJuIHdvcmtpbmcgZGlyZWN0b3J5IG5hbWUiKQorT1BUX1BXRC5hZGRfb3B0aW9uKCctTCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2hhc19MJywgZGVmYXVsdD1UcnVlLAorICAgIGhlbHA9IiIiSWYgdGhlIFBXRCBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb250YWlucyBhbiBhYnNvbHV0ZSBwYXRobmFtZSBvZiBcCisgICAgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUgZmlsZW5hbWVzIGRvdCBvciBkb3QtZG90LCBcCisgICAgcHdkIHNoYWxsIHdyaXRlIHRoaXMgcGF0aG5hbWUgdG8gc3RhbmRhcmQgb3V0cHV0LiBPdGhlcndpc2UsIHRoZSAtTCBvcHRpb24gXAorICAgIHNoYWxsIGJlaGF2ZSBhcyB0aGUgLVAgb3B0aW9uLiIiIikKK09QVF9QV0QuYWRkX29wdGlvbignLVAnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdoYXNfTCcsIGRlZmF1bHQ9RmFsc2UsCisgICAgaGVscD0iIiJUaGUgYWJzb2x1dGUgcGF0aG5hbWUgd3JpdHRlbiBzaGFsbCBub3QgY29udGFpbiBmaWxlbmFtZXMgdGhhdCwgaW4gXAorICAgIHRoZSBjb250ZXh0IG9mIHRoZSBwYXRobmFtZSwgcmVmZXIgdG8gZmlsZXMgb2YgdHlwZSBzeW1ib2xpYyBsaW5rLiIiIikKKworZGVmIHV0aWxpdHlfcHdkKG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisKKyAgICBvcHRpb24sIGFyZ3MgPSBPUFRfUFdELnBhcnNlX2FyZ3MoYXJncykgICAgICAgIAorICAgIHN0ZG91dC53cml0ZSgnJXNcbicgJSBlbnZbJ1BXRCddKQorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIHByaW50ZiB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUkVfVU5FU0NBUEUgPSByZS5jb21waWxlKHInKFxceFthLXpBLVowLTldezJ9fFxcWzAtN117MSwzfXxcXC4pJykKKworZGVmIHV0aWxpdHlfcHJpbnRmKG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgICAgIAorICAgIGRlZiByZXBsYWNlKG0pOgorICAgICAgICBhc3NlcnQgbS5ncm91cCgpCisgICAgICAgIGcgPSBtLmdyb3VwKClbMTpdCisgICAgICAgIGlmIGcuc3RhcnRzd2l0aCgneCcpOgorICAgICAgICAgICAgcmV0dXJuIGNocihpbnQoZ1sxOl0sIDE2KSkKKyAgICAgICAgaWYgbGVuKGcpIDw9IDMgYW5kIGxlbihbYyBmb3IgYyBpbiBnIGlmIGMgaW4gJzAxMjM0NTY3J10pID09IGxlbihnKToKKyAgICAgICAgICAgICMgWWF5LCBhbiBvY3RhbCBudW1iZXIKKyAgICAgICAgICAgIHJldHVybiBjaHIoaW50KGcsIDgpKQorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgJ2EnOiAnXGEnLAorICAgICAgICAgICAgJ2InOiAnXGInLAorICAgICAgICAgICAgJ2YnOiAnXGYnLAorICAgICAgICAgICAgJ24nOiAnXG4nLAorICAgICAgICAgICAgJ3InOiAnXHInLAorICAgICAgICAgICAgJ3QnOiAnXHQnLAorICAgICAgICAgICAgJ3YnOiAnXHYnLAorICAgICAgICAgICAgJ1xcJzogJ1xcJywKKyAgICAgICAgfS5nZXQoZykKKyAgICAgICAgCisgICAgIyBDb252ZXJ0IGVzY2FwZSBzZXF1ZW5jZXMKKyAgICBmb3JtYXQgPSByZS5zdWIoUkVfVU5FU0NBUEUsIHJlcGxhY2UsIGFyZ3NbMF0pCisgICAgc3Rkb3V0LndyaXRlKGZvcm1hdCAlIHR1cGxlKGFyZ3NbMTpdKSkKKyAgICByZXR1cm4gMAorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyB0cnVlIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWYgdXRpbGl0eV90cnVlKG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgcmV0dXJuIDAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBzZWQgdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JFX1NFRCA9IHJlLmNvbXBpbGUocidecyguKS4qXDFbYS16QS1aXSokJykKKworIyBjeWd3aW4gc2VkIGZhaWxzIHdpdGggc29tZSBleHByZXNzaW9ucyB3aGVuIHRoZXkgZG8gbm90IGVuZCB3aXRoIGEgc2luZ2xlIHNwYWNlLgorIyBzZWUgdW5pdCB0ZXN0cyBmb3IgZGV0YWlscy4gSW50ZXJlc3RpbmdseSwgdGhlIHNhbWUgZXhwcmVzc2lvbnMgd29ya3MgcGVyZmVjdGx5CisjIGluIGN5Z3dpbiBzaGVsbC4KK2RlZiB1dGlsaXR5X3NlZChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgICAgICAKKyAgICAjIFNjYW4gcGF0dGVybiBhcmd1bWVudHMgYW5kIGFwcGVuZCBhIHNwYWNlIGlmIG5lY2Vzc2FyeQorICAgIGZvciBpIGluIHhyYW5nZShsZW4oYXJncykpOgorICAgICAgICBpZiBub3QgUkVfU0VELnNlYXJjaChhcmdzW2ldKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGFyZ3NbaV0gPSBhcmdzW2ldICsgJyAnCisKKyAgICByZXR1cm4gcnVuX2NvbW1hbmQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIAorICAgICAgICBzdGRlcnIsIGRlYnVnZmxhZ3MpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgc2xlZXAgdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlZiB1dGlsaXR5X3NsZWVwKG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgdGltZS5zbGVlcChpbnQoYXJnc1swXSkpCisgICAgcmV0dXJuIDAKKyAgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgc29ydCB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorT1BUX1NPUlQgPSBOb25FeGl0aW5nUGFyc2VyKCJzb3J0IC0gc29ydCwgbWVyZ2UsIG9yIHNlcXVlbmNlIGNoZWNrIHRleHQgZmlsZXMiKQorCitkZWYgdXRpbGl0eV9zb3J0KG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorCisgICAgZGVmIHNvcnQocGF0aCk6CisgICAgICAgIGlmIHBhdGggPT0gJy0nOgorICAgICAgICAgICAgbGluZXMgPSBzdGRpbi5yZWFkbGluZXMoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYgPSBmaWxlKHBhdGgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgc3RkZXJyLndyaXRlKHN0cihlKSArICdcbicpCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgCisgICAgICAgIGlmIGxpbmVzIGFuZCBsaW5lc1stMV1bLTFdIT0nXG4nOgorICAgICAgICAgICAgbGluZXNbLTFdID0gbGluZXNbLTFdICsgJ1xuJworICAgICAgICByZXR1cm4gbGluZXMKKyAgICAKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgICAgICAKKyAgICBvcHRpb24sIGFyZ3MgPSBPUFRfU09SVC5wYXJzZV9hcmdzKGFyZ3MpCisgICAgYWxsbGluZXMgPSBbXQorICAgIAorICAgIGlmIGxlbihhcmdzKTw9MDoKKyAgICAgICAgYXJncyArPSBbJy0nXQorICAgICAgICAKKyAgICAjIExvYWQgYWxsIGZpbGVzIGxpbmVzCisgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICB0cnk6CisgICAgICAgIG9zLmNoZGlyKGVudlsnUFdEJ10pCisgICAgICAgIGZvciBwYXRoIGluIGFyZ3M6CisgICAgICAgICAgICBhbGxsaW5lcyArPSBzb3J0KHBhdGgpCisgICAgZmluYWxseToKKyAgICAgICAgb3MuY2hkaXIoY3VyZGlyKQorICAgICAgICAgICAgCisgICAgYWxsbGluZXMuc29ydCgpCisgICAgZm9yIGxpbmUgaW4gYWxsbGluZXM6CisgICAgICAgIHN0ZG91dC53cml0ZShsaW5lKQorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBoZyB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitoZ2NvbW1hbmRzID0gWworICAgICdhZGQnLAorICAgICdhZGRyZW1vdmUnLAorICAgICdjb21taXQnLCAnY2knLAorICAgICdkZWJ1Z3JlbmFtZScsCisgICAgJ2RlYnVnd2FsaycsCisgICAgJ2ZhbGFiYWxhJywgIyBEdW1teSBjb21tYW5kIHVzZWQgaW4gYSBtZXJjdXJpYWwgdGVzdAorICAgICdpbmNvbWluZycsCisgICAgJ2xvY2F0ZScsCisgICAgJ3B1bGwnLAorICAgICdwdXNoJywKKyAgICAncWluaXQnLAorICAgICdyZW1vdmUnLCAncm0nLAorICAgICdyZW5hbWUnLCAnbXYnLAorICAgICdyZXZlcnQnLCAgICAKKyAgICAnc2hvd2NvbmZpZycsCisgICAgJ3N0YXR1cycsICdzdCcsCisgICAgJ3N0cmlwJywKKyAgICBdCisKK2RlZiByZXdyaXRlc2xhc2hlcyhuYW1lLCBhcmdzKToKKyAgICAjIFNldmVyYWwgaGcgY29tbWFuZHMgb3V0cHV0IGZpbGUgcGF0aHMsIHJld3JpdGUgdGhlIHNlcGFyYXRvcnMKKyAgICBpZiBsZW4oYXJncykgPiAxIGFuZCBuYW1lLmxvd2VyKCkuZW5kc3dpdGgoJ3B5dGhvbicpIFwKKyAgICAgICBhbmQgYXJnc1swXS5lbmRzd2l0aCgnaGcnKToKKyAgICAgICAgZm9yIGNtZCBpbiBoZ2NvbW1hbmRzOgorICAgICAgICAgICAgaWYgY21kIGluIGFyZ3NbMTpdOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAKKyAgICAjIHN2biBvdXRwdXQgY29udGFpbnMgbWFueSBwYXRocyB3aXRoIE9TIHNwZWNpZmljIHNlcGFyYXRvcnMuCisgICAgIyBOb3JtYWxpemUgdGhlc2UgdG8gdW5peCBwYXRocy4KKyAgICBiYXNlID0gb3MucGF0aC5iYXNlbmFtZShuYW1lKQorICAgIGlmIGJhc2Uuc3RhcnRzd2l0aCgnc3ZuJyk6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiByZXdyaXRlaGcob3V0cHV0KToKKyAgICBpZiBub3Qgb3V0cHV0OgorICAgICAgICByZXR1cm4gb3V0cHV0CisgICAgIyBSZXdyaXRlIG9zIHNwZWNpZmljIG1lc3NhZ2VzCisgICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2UoJzogVGhlIHN5c3RlbSBjYW5ub3QgZmluZCB0aGUgZmlsZSBzcGVjaWZpZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknKQorICAgIG91dHB1dCA9IHJlLnN1YignOiBBY2Nlc3MgaXMgZGVuaWVkLiokJywgJzogUGVybWlzc2lvbiBkZW5pZWQnLCBvdXRwdXQpCisgICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2UoJzogTm8gY29ubmVjdGlvbiBjb3VsZCBiZSBtYWRlIGJlY2F1c2UgdGhlIHRhcmdldCBtYWNoaW5lIGFjdGl2ZWx5IHJlZnVzZWQgaXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IENvbm5lY3Rpb24gcmVmdXNlZCcpCisgICAgcmV0dXJuIG91dHB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCitkZWYgcnVuX2NvbW1hbmQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsCisgICAgICAgICAgICAgICAgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICAjIEV4ZWN1dGUgdGhlIGNvbW1hbmQKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorCisgICAgaGdiaW4gPSBpbnRlcnAub3B0aW9ucygpLmhnYmluYXJ5CisgICAgaXNoZyA9IGhnYmluIGFuZCAoJ2hnJyBpbiBuYW1lIG9yIGFyZ3MgYW5kICdoZycgaW4gYXJnc1swXSkKKyAgICB1bml4b3V0cHV0ID0gJ2N5Z3dpbicgaW4gbmFtZSBvciBpc2hnCisgICAgCisgICAgZXhlY19lbnYgPSBlbnYuZ2V0X3ZhcmlhYmxlcygpICAgICAgICAKKyAgICB0cnk6CisgICAgICAgICMgQlVHOiBjb21wYXJpbmcgZmlsZSBkZXNjcmlwdG9yIGlzIGNsZWFybHkgbm90IGEgcmVsaWFibGUgd2F5IHRvIHRlbGwKKyAgICAgICAgIyB3aGV0aGVyIHRoZXkgcG9pbnQgb24gdGhlIHNhbWUgdW5kZXJseWluZyBvYmplY3QuIEJ1dCBpbiBweXNoIGxpbWl0ZWQKKyAgICAgICAgIyBzY29wZSB0aGlzIGlzIHVzdWFsbHkgcmlnaHQsIHdlIGRvIG5vdCBleHBlY3QgY29tcGxpY2F0ZWQgcmVkaXJlY3Rpb25zCisgICAgICAgICMgYmVzaWRlcyB1c3VhbCAyPiYxLgorICAgICAgICAjIFN0aWxsIHRoZXJlIGlzIG9uZSBjYXNlIHdlIGhhdmUgYnV0IGNhbm5vdCBkZWFsIHdpdGggaXMgd2hlbiBzdGRvdXQKKyAgICAgICAgIyBhbmQgc3RkZXJyIGFyZSByZWRpcmVjdGVkICpieSBweXNoIGNhbGxlciouIFRoaXMgdGhlIHJlYXNvbiBmb3IgdGhlCisgICAgICAgICMgLS1yZWRpcmVjdCBweXNoKCkgb3B0aW9uLgorICAgICAgICAjIE5vdywgd2Ugd2FudCB0byBrbm93IHRoZXkgYXJlIHRoZSBzYW1lIGJlY2F1c2Ugd2Ugc29tZXRpbWVzIG5lZWQgdG8gCisgICAgICAgICMgdHJhbnNmb3JtIHRoZSBjb21tYW5kIG91dHB1dCwgbW9zdGx5IHJlbW92ZSBDUi1MRiB0byBlbnN1cmUgdGhhdAorICAgICAgICAjIGNvbW1hbmQgb3V0cHV0IGlzIHVuaXgtbGlrZS4gQ3lnd2luIHV0aWxpZXMgYXJlIGEgc3BlY2lhbCBjYXNlIGJlY2F1c2UKKyAgICAgICAgIyB0aGV5IGV4cGxpY2l0ZWx5IHNldCB0aGVpciBvdXRwdXQgc3RyZWFtcyB0byBiaW5hcnkgbW9kZSwgc28gd2UgaGF2ZQorICAgICAgICAjIG5vdGhpbmcgdG8gZG8uIEZvciBhbGwgb3RoZXJzIGNvbW1hbmRzLCB3ZSBoYXZlIHRvIGd1ZXNzIHdoZXRoZXIgdGhleQorICAgICAgICAjIGFyZSBzZW5kaW5nIHRleHQgZGF0YSwgaW4gd2hpY2ggY2FzZSB0aGUgdHJhbnNmb3JtYXRpb24gbXVzdCBiZSBkb25lLgorICAgICAgICAjIEFnYWluLCB0aGUgTlVMIGNoYXJhY3RlciB0ZXN0IGlzIHVucmVsaWFibGUgYnV0IHNob3VsZCBiZSBlbm91Z2ggZm9yCisgICAgICAgICMgaGcgdGVzdHMuCisgICAgICAgIHJlZGlyZWN0ZWQgPSBzdGRvdXQuZmlsZW5vKCk9PXN0ZGVyci5maWxlbm8oKQorICAgICAgICBpZiBub3QgcmVkaXJlY3RlZDoKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtuYW1lXSArIGFyZ3MsIGN3ZD1lbnZbJ1BXRCddLCBlbnY9ZXhlY19lbnYsIAorICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtuYW1lXSArIGFyZ3MsIGN3ZD1lbnZbJ1BXRCddLCBlbnY9ZXhlY19lbnYsIAorICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3IgYXMgZToKKyAgICAgICAgcmFpc2UgVXRpbGl0eUVycm9yKHN0cihlKSkKKworICAgIGlmIG5vdCB1bml4b3V0cHV0OgorICAgICAgICBkZWYgZW5jb2RlKHMpOgorICAgICAgICAgICAgaWYgJ1wwJyBpbiBzOgorICAgICAgICAgICAgICAgIHJldHVybiBzCisgICAgICAgICAgICByZXR1cm4gcy5yZXBsYWNlKCdcclxuJywgJ1xuJykKKyAgICBlbHNlOgorICAgICAgICBlbmNvZGUgPSBsYW1iZGEgczogcworCisgICAgaWYgcmV3cml0ZXNsYXNoZXMobmFtZSwgYXJncyk6CisgICAgICAgIGVuY29kZTFfID0gZW5jb2RlCisgICAgICAgIGRlZiBlbmNvZGUocyk6CisgICAgICAgICAgICBzID0gZW5jb2RlMV8ocykKKyAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoJ1xcXFwnLCAnXFwnKQorICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgnXFwnLCAnLycpCisgICAgICAgICAgICByZXR1cm4gcworCisgICAgaWYgaXNoZzoKKyAgICAgICAgZW5jb2RlMl8gPSBlbmNvZGUKKyAgICAgICAgZGVmIGVuY29kZShzKToKKyAgICAgICAgICAgIHJldHVybiByZXdyaXRlaGcoZW5jb2RlMl8ocykpCisgICAgCisgICAgc3Rkb3V0LndyaXRlKGVuY29kZShvdXQpKQorICAgIGlmIG5vdCByZWRpcmVjdGVkOgorICAgICAgICBzdGRlcnIud3JpdGUoZW5jb2RlKGVycikpCisgICAgcmV0dXJuIHAucmV0dXJuY29kZQorICAgICAgICAgICAgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvaW50ZXJwLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL2ludGVycC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWQ4YzkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL2ludGVycC5weQpAQCAtMCwwICsxLDEzNjcgQEAKKyMgaW50ZXJwLnB5IC0gc2hlbGwgaW50ZXJwcmV0ZXIgZm9yIHB5c2guCisjCisjIENvcHlyaWdodCAyMDA3IFBhdHJpY2sgTWV6YXJkCisjCisjIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKworIiIiSW1wbGVtZW50IHRoZSBzaGVsbCBpbnRlcnByZXRlci4KKworTW9zdCByZWZlcmVuY2VzIGFyZSBtYWRlIHRvICJUaGUgT3BlbiBHcm91cCBCYXNlIFNwZWNpZmljYXRpb25zIElzc3VlIDYiLgorPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS91dGlsaXRpZXMveGN1X2NoYXAwMi5odG1sPgorIiIiCisjIFRPRE86IGRvY3VtZW50IHRoZSBmYWN0IGlucHV0IHN0cmVhbXMgbXVzdCBpbXBsZW1lbnQgZmlsZW5vKCkgc28gUG9wZW4gd2lsbCB3b3JrIGNvcnJlY3RseS4KKyMgaXQgcmVxdWlyZXMgbm9uLXN0ZGluIHN0cmVhbSB0byBiZSBpbXBsZW1lbnRlZCBhcyBmaWxlcy4gU3RpbGwgdG8gYmUgdGVzdGVkLi4uCisjIERPQzogcGF0aHNlcCBpcyB1c2VkIGluIFBBVEggaW5zdGVhZCBvZiAnOicuIENsZWFybHksIHRoZXJlIGFyZSBwYXRoIHN5bnRheCBpc3N1ZXMgaGVyZS4KKyMgVE9ETzogc3RvcCBjb21tYW5kIGV4ZWN1dGlvbiB1cG9uIGVycm9yLgorIyBUT0RPOiBzb3J0IG91dCB0aGUgZmlsZW5hbWUvaW9fbnVtYmVyIG1lc3MuIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB1c2UgZmlsZW5hbWVzIG9ubHkuCisjIFRPRE86IHJldmlldyBzdWJzaGVsbCBpbXBsZW1lbnRhdGlvbgorIyBUT0RPOiB0ZXN0IGVudmlyb25tZW50IGNsb25pbmcgZm9yIG5vbi1zcGVjaWFsIGJ1aWx0aW5zCisjIFRPRE86IHNldCAteCBzaG91bGQgbm90IHJlYnVpbGQgY29tbWFuZHMgZnJvbSB0b2tlbnMsIGFzc2lnbm1lbnRzL3JlZGlyZWN0aW9ucyBhcmUgbG9zdAorIyBUT0RPOiB1bml0IHRlc3QgZm9yIHZhcmlhYmxlIGFzc2lnbm1lbnQKKyMgVE9ETzogdGVzdCBlcnJvciBtYW5hZ2VtZW50IHdydCBlcnJvciB0eXBlL3V0aWxpdHkgdHlwZQorIyBUT0RPOiB0ZXN0IGZvciBiaW5hcnkgb3V0cHV0IGV2ZXJ5d2hlcmUKKyMgQlVHOiBkZWJ1Zy1wYXJzaW5nIGRvZXMgbm90IHBhc3MgbG9nIGZpbGUgdG8gUExZLiBNYXliZSBhIFBMWSB1cGdyYWRlIGlzIG5lY2Vzc2FyeS4KK2ltcG9ydCBiYXNlNjQKK2ltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQoraW1wb3J0IGVycm5vCitpbXBvcnQgZ2xvYgoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKKwordHJ5OgorICAgIHMgPSBzZXQoKQorICAgIGRlbCBzCitleGNlcHQgTmFtZUVycm9yOgorICAgIGZyb20gU2V0IGltcG9ydCBTZXQgYXMgc2V0CisKK2ltcG9ydCBidWlsdGluCitmcm9tIHNoZXJyb3JzIGltcG9ydCAqCitpbXBvcnQgcHlzaGxleAoraW1wb3J0IHB5c2h5YWNjCisKK2RlZiBtYXBwZW5kKGZ1bmMsICphcmdzLCAqKmthcmdzKToKKyAgICAiIiJMaWtlIG1hcCBidXQgYXNzdW1lIGZ1bmMgcmV0dXJucyBhIGxpc3QuIFJldHVybmVkIGxpc3RzIGFyZSBtZXJnZWQgaW50bworICAgIGEgc2luZ2xlIG9uZS4KKyAgICAiIiIKKyAgICByZXR1cm4gcmVkdWNlKGxhbWJkYSBhLGI6IGErYiwgbWFwKGZ1bmMsICphcmdzLCAqKmthcmdzKSwgW10pCisKK2NsYXNzIEZpbGVXcmFwcGVyOgorICAgICIiIkZpbGUgb2JqZWN0IHdyYXBwZXIgdG8gZWFzZSBkZWJ1Z2dpbmcuCisgICAgCisgICAgQWxsb3cgbW9kZSBjaGVja2luZyBhbmQgaW1wbGVtZW50IGZpbGUgZHVwbGljYXRpb24gdGhyb3VnaCBhIHNpbXBsZSAKKyAgICByZWZlcmVuY2UgY291bnRpbmcgc2NoZW1lLiBOb3Qgc3VyZSB0aGUgbGF0dGVyIGlzIHJlYWxseSB1c2VmdWwgc2luY2UKKyAgICBvbmx5IHJlYWwgZmlsZSBkZXNjcmlwdG9ycyBjYW4gYmUgdXNlZC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZSwgZmlsZSwgY2xvc2U9VHJ1ZSk6CisgICAgICAgIGlmIG1vZGUgbm90IGluICgncicsICd3JywgJ2EnKToKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2ludmFsaWQgbW9kZTogJXMnICUgbW9kZSkKKyAgICAgICAgc2VsZi5fbW9kZSA9IG1vZGUKKyAgICAgICAgc2VsZi5fY2xvc2UgPSBjbG9zZQorICAgICAgICBpZiBpc2luc3RhbmNlKGZpbGUsIEZpbGVXcmFwcGVyKToKKyAgICAgICAgICAgIGlmIGZpbGUuX3JlZmNvdW50WzBdIDw9IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigwLCAnRXJyb3InKQorICAgICAgICAgICAgc2VsZi5fcmVmY291bnQgPSBmaWxlLl9yZWZjb3VudAorICAgICAgICAgICAgc2VsZi5fcmVmY291bnRbMF0gKz0gMQorICAgICAgICAgICAgc2VsZi5fZmlsZSA9IGZpbGUuX2ZpbGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3JlZmNvdW50ID0gWzFdCisgICAgICAgICAgICBzZWxmLl9maWxlID0gZmlsZQorICAgICAgICAKKyAgICBkZWYgZHVwKHNlbGYpOgorICAgICAgICByZXR1cm4gRmlsZVdyYXBwZXIoc2VsZi5fbW9kZSwgc2VsZiwgc2VsZi5fY2xvc2UpCisgICAgICAgIAorICAgIGRlZiBmaWxlbm8oc2VsZik6CisgICAgICAgICIiImZpbGVubygpIHNob3VsZCBiZSBvbmx5IG5lY2Vzc2FyeSBmb3IgaW5wdXQgc3RyZWFtcy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGUuZmlsZW5vKCkKKyAgICAgICAgCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6CisgICAgICAgIGlmIHNlbGYuX21vZGUhPSdyJzoKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoMCwgJ0Vycm9yJykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGUucmVhZChzaXplKQorICAgICAgICAKKyAgICBkZWYgcmVhZGxpbmVzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLl9maWxlLnJlYWRsaW5lcygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIAorICAgIGRlZiB3cml0ZShzZWxmLCBzKToKKyAgICAgICAgaWYgc2VsZi5fbW9kZSBub3QgaW4gKCd3JywgJ2EnKToKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoMCwgJ0Vycm9yJykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGUud3JpdGUocykKKyAgICAgICAgCisgICAgZGVmIGZsdXNoKHNlbGYpOgorICAgICAgICBzZWxmLl9maWxlLmZsdXNoKCkKKyAgICAgICAgCisgICAgZGVmIGNsb3NlKHNlbGYpOiAgICAgICAgCisgICAgICAgIGlmIG5vdCBzZWxmLl9yZWZjb3VudDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBhc3NlcnQgIHNlbGYuX3JlZmNvdW50WzBdID4gMAorICAgICAgICAKKyAgICAgICAgc2VsZi5fcmVmY291bnRbMF0gLT0gMSAgICAKKyAgICAgICAgaWYgc2VsZi5fcmVmY291bnRbMF0gPT0gMDoKKyAgICAgICAgICAgIHNlbGYuX21vZGUgPSAnYycKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3NlOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQorICAgICAgICBzZWxmLl9yZWZjb3VudCA9IE5vbmUKKyAgICAgICAgICAgICAgICAKKyAgICBkZWYgbW9kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21vZGUKKworICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgaWYgbmFtZSA9PSAnbmFtZSc6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSBnZXRhdHRyKHNlbGYuX2ZpbGUsIG5hbWUpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihuYW1lKQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAKK2RlZiB3aW4zMl9vcGVuX2Rldm51bGwobW9kZSk6CisgICAgcmV0dXJuIG9wZW4oJ05VTCcsIG1vZGUpCisgICAgCisgICAgICAgIAorY2xhc3MgUmVkaXJlY3Rpb25zOgorICAgICIiIlN0b3JlcyBvcGVuIGZpbGVzIGFuZCB0aGVpciBtYXBwaW5nIHRvIHBzZXVkby1zaCBmaWxlIGRlc2NyaXB0b3IuCisgICAgIiIiCisgICAgIyBCVUc6IHJlZGlyZWN0aW9ucyBhcmUgbm90IGhhbmRsZWQgY29ycmVjdGx5OiAxPiYzIDI+JjMgMz4mNCBkb2VzIAorICAgICMgbm90IG1ha2UgMSB0byByZWRpcmVjdCB0byA0CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSk6CisgICAgICAgIHNlbGYuX2Rlc2NyaXB0b3JzID0ge30KKyAgICAgICAgaWYgc3RkaW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9hZGRfZGVzY3JpcHRvcigwLCBzdGRpbikKKyAgICAgICAgaWYgc3Rkb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fYWRkX2Rlc2NyaXB0b3IoMSwgc3Rkb3V0KQorICAgICAgICBpZiBzdGRlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9hZGRfZGVzY3JpcHRvcigyLCBzdGRlcnIpCisgICAgICAgICAgICAKKyAgICBkZWYgYWRkX2hlcmVfZG9jdW1lbnQoc2VsZiwgaW50ZXJwLCBuYW1lLCBjb250ZW50LCBpb19udW1iZXI9Tm9uZSk6CisgICAgICAgIGlmIGlvX251bWJlciBpcyBOb25lOgorICAgICAgICAgICAgaW9fbnVtYmVyID0gMAorICAgICAgICAgICAgCisgICAgICAgIGlmIG5hbWU9PXB5c2hsZXgudW5xdW90ZV93b3JkdHJlZShuYW1lKToKKyAgICAgICAgICAgIGNvbnRlbnQgPSBpbnRlcnAuZXhwYW5kX2hlcmVfZG9jdW1lbnQoKCdUT0tFTicsIGNvbnRlbnQpKQorICAgIAorICAgICAgICAjIFdyaXRlIGRvY3VtZW50IGNvbnRlbnQgaW4gYSB0ZW1wb3JhcnkgZmlsZQorICAgICAgICB0bXAgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdG1wLndyaXRlKGNvbnRlbnQpCisgICAgICAgICAgICB0bXAuZmx1c2goKQorICAgICAgICAgICAgdG1wLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuX2FkZF9kZXNjcmlwdG9yKGlvX251bWJlciwgRmlsZVdyYXBwZXIoJ3InLCB0bXApKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICB0bXAuY2xvc2UoKQorICAgICAgICAgICAgcmFpc2UgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgIGRlZiBhZGQoc2VsZiwgaW50ZXJwLCBvcCwgZmlsZW5hbWUsIGlvX251bWJlcj1Ob25lKToKKyAgICAgICAgaWYgb3Agbm90IGluICgnPCcsICc+JywgJz58JywgJz4+JywgJz4mJyk6CisgICAgICAgICAgICAjIFRPRE86IGFkZCBkZXNjcmlwdG9yIGR1cGxpY2F0aW9uIGFuZCBoZXJlX2RvY3VtZW50cyAgICAgIAorICAgICAgICAgICAgcmFpc2UgUmVkaXJlY3Rpb25FcnJvcignVW5zdXBwb3J0ZWQgcmVkaXJlY3Rpb24gb3BlcmF0b3IgIiVzIicgJSBvcCkKKyAgICAgICAgICAgIAorICAgICAgICBpZiBpb19udW1iZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpb19udW1iZXIgPSBpbnQoaW9fbnVtYmVyKQorICAgICAgICAgICAgCisgICAgICAgIGlmIChvcCA9PSAnPiYnIGFuZCBmaWxlbmFtZS5pc2RpZ2l0KCkpIG9yIGZpbGVuYW1lPT0nLSc6CisgICAgICAgICAgICAjIE5vIGV4cGFuc2lvbiBmb3IgZmlsZSBkZXNjcmlwdG9ycywgcXVvdGUgdGhlbSBpZiB5b3Ugd2FudCBhIGZpbGVuYW1lCisgICAgICAgICAgICBmdWxsbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBmaWxlbmFtZS5zdGFydHN3aXRoKCcvJyk6CisgICAgICAgICAgICAgICAgIyBUT0RPOiB3aW4zMiBrbHVkZ2UKKyAgICAgICAgICAgICAgICBpZiBmaWxlbmFtZT09Jy9kZXYvbnVsbCc6CisgICAgICAgICAgICAgICAgICAgIGZ1bGxuYW1lID0gJ05VTCcKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIFRPRE86IGhhbmRsZSBhYnNvbHV0ZSBwYXRobmFtZXMsIHRoZXkgYXJlIHVubGlrZWx5IHRvIGV4aXN0IG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAjIGN1cnJlbnQgcGxhdGZvcm0gKHdpbjMyIGZvciBpbnN0YW5jZSkuCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmdWxsbmFtZSA9IGludGVycC5leHBhbmRfcmVkaXJlY3Rpb24oKCdUT0tFTicsIGZpbGVuYW1lKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZnVsbG5hbWU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJlZGlyZWN0aW9uRXJyb3IoJyVzOiBhbWJpZ3VvdXMgcmVkaXJlY3QnICUgZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgIyBCdWlsZCBhYnNvbHV0ZSBwYXRoIGJhc2VkIG9uIFBXRAorICAgICAgICAgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKGludGVycC5nZXRfZW52KClbJ1BXRCddLCBmdWxsbmFtZSkKKyAgICAgICAgICAgIAorICAgICAgICBpZiBvcD09JzwnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2FkZF9pbnB1dF9yZWRpcmVjdGlvbihpbnRlcnAsIGZ1bGxuYW1lLCBpb19udW1iZXIpCisgICAgICAgIGVsaWYgb3AgaW4gKCc+JywgJz58Jyk6CisgICAgICAgICAgICBjbG9iYmVyID0gKCc+fCc9PW9wKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2FkZF9vdXRwdXRfcmVkaXJlY3Rpb24oaW50ZXJwLCBmdWxsbmFtZSwgaW9fbnVtYmVyLCBjbG9iYmVyKQorICAgICAgICBlbGlmIG9wPT0nPj4nOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2FkZF9vdXRwdXRfYXBwZW5kaW5nKGludGVycCwgZnVsbG5hbWUsIGlvX251bWJlcikKKyAgICAgICAgZWxpZiBvcD09Jz4mJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kdXBfb3V0cHV0X2Rlc2NyaXB0b3IoZnVsbG5hbWUsIGlvX251bWJlcikKKyAgICAgICAgCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9kZXNjcmlwdG9ycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBkZXNjIGluIHNlbGYuX2Rlc2NyaXB0b3JzLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBkZXNjLmZsdXNoKCkKKyAgICAgICAgICAgICAgICBkZXNjLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX2Rlc2NyaXB0b3JzID0gTm9uZQorICAgICAgICAgICAgCisgICAgZGVmIHN0ZGluKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGVzY3JpcHRvcnNbMF0KKyAgICAgICAgICAKKyAgICBkZWYgc3Rkb3V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGVzY3JpcHRvcnNbMV0gCisgICAgICAgIAorICAgIGRlZiBzdGRlcnIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kZXNjcmlwdG9yc1syXSAKKyAgICAgICAgICAgIAorICAgIGRlZiBjbG9uZShzZWxmKToKKyAgICAgICAgY2xvbmUgPSBSZWRpcmVjdGlvbnMoKQorICAgICAgICBmb3IgZGVzYywgZmlsZW9iaiBpbiBzZWxmLl9kZXNjcmlwdG9ycy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGNsb25lLl9kZXNjcmlwdG9yc1tkZXNjXSA9IGZpbGVvYmouZHVwKCkKKyAgICAgICAgcmV0dXJuIGNsb25lCisgICAgICAgICAgIAorICAgIGRlZiBfYWRkX291dHB1dF9yZWRpcmVjdGlvbihzZWxmLCBpbnRlcnAsIGZpbGVuYW1lLCBpb19udW1iZXIsIGNsb2JiZXIpOiAgICAKKyAgICAgICAgaWYgaW9fbnVtYmVyIGlzIE5vbmU6CisgICAgICAgICAgICAjIGlvX251bWJlciBkZWZhdWx0IHRvIHN0YW5kYXJkIG91dHB1dAorICAgICAgICAgICAgaW9fbnVtYmVyID0gMQorICAgICAgICAKKyAgICAgICAgaWYgbm90IGNsb2JiZXIgYW5kIGludGVycC5nZXRfZW52KCkuaGFzX29wdCgnLUMnKSBhbmQgb3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUpOgorICAgICAgICAgICAgIyBGaWxlIGFscmVhZHkgZXhpc3QgaW4gbm8tY2xvYmJlciBtb2RlLCBiYWlsIG91dAorICAgICAgICAgICAgcmFpc2UgUmVkaXJlY3Rpb25FcnJvcignRmlsZSAiJXMiIGFscmVhZHkgZXhpc3RzJyAlIGZpbGVuYW1lKQorICAgICAgICAgICAgCisgICAgICAgICMgT3BlbiBhbmQgcmVnaXN0ZXIKKyAgICAgICAgc2VsZi5fYWRkX2ZpbGVfZGVzY3JpcHRvcihpb19udW1iZXIsIGZpbGVuYW1lLCAndycpCisgICAgICAgIAorICAgIGRlZiBfYWRkX291dHB1dF9hcHBlbmRpbmcoc2VsZiwgaW50ZXJwLCBmaWxlbmFtZSwgaW9fbnVtYmVyKTogICAgCisgICAgICAgIGlmIGlvX251bWJlciBpcyBOb25lOgorICAgICAgICAgICAgaW9fbnVtYmVyID0gMQorICAgICAgICBzZWxmLl9hZGRfZmlsZV9kZXNjcmlwdG9yKGlvX251bWJlciwgZmlsZW5hbWUsICdhJykKKyAgICAgICAgICAgIAorICAgIGRlZiBfYWRkX2lucHV0X3JlZGlyZWN0aW9uKHNlbGYsIGludGVycCwgZmlsZW5hbWUsIGlvX251bWJlcik6CisgICAgICAgIGlmIGlvX251bWJlciBpcyBOb25lOgorICAgICAgICAgICAgaW9fbnVtYmVyID0gMAorICAgICAgICBzZWxmLl9hZGRfZmlsZV9kZXNjcmlwdG9yKGlvX251bWJlciwgZmlsZW5hbWUsICdyJykKKyAgICAgICAgCisgICAgZGVmIF9hZGRfZmlsZV9kZXNjcmlwdG9yKHNlbGYsIGlvX251bWJlciwgZmlsZW5hbWUsIG1vZGUpOiAgICAKKyAgICAgICAgdHJ5OiAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgZmlsZW5hbWUuc3RhcnRzd2l0aCgnLycpOgorICAgICAgICAgICAgICAgIGlmIGZpbGVuYW1lPT0nL2Rldi9udWxsJzoKKyAgICAgICAgICAgICAgICAgICAgZiA9IHdpbjMyX29wZW5fZGV2bnVsbChtb2RlKydiJykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIFRPRE86IGhhbmRsZSBhYnNvbHV0ZSBwYXRobmFtZXMsIHRoZXkgYXJlIHVubGlrZWx5IHRvIGV4aXN0IG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAjIGN1cnJlbnQgcGxhdGZvcm0gKHdpbjMyIGZvciBpbnN0YW5jZSkuCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ2Nhbm5vdCBvcGVuIGFic29sdXRlIHBhdGggJXMnICUgcmVwcihmaWxlbmFtZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYgPSBmaWxlKGZpbGVuYW1lLCBtb2RlKydiJykKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHJhaXNlIFJlZGlyZWN0aW9uRXJyb3Ioc3RyKGUpKQorICAgICAgICAgICAgCisgICAgICAgIHdyYXBwZXIgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdyYXBwZXIgPSBGaWxlV3JhcHBlcihtb2RlLCBmKQorICAgICAgICAgICAgZiA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2FkZF9kZXNjcmlwdG9yKGlvX251bWJlciwgd3JhcHBlcikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaWYgZjogZi5jbG9zZSgpCisgICAgICAgICAgICBpZiB3cmFwcGVyOiB3cmFwcGVyLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAKKyAgICBkZWYgX2R1cF9vdXRwdXRfZGVzY3JpcHRvcihzZWxmLCBzb3VyY2VfZmQsIGRlc3RfZmQpOgorICAgICAgICBpZiBzb3VyY2VfZmQgaXMgTm9uZToKKyAgICAgICAgICAgIHNvdXJjZV9mZCA9IDEKKyAgICAgICAgc2VsZi5fZHVwX2ZpbGVfZGVzY3JpcHRvcihzb3VyY2VfZmQsIGRlc3RfZmQsICd3JykKKyAgICAgICAgICAgIAorICAgIGRlZiBfZHVwX2ZpbGVfZGVzY3JpcHRvcihzZWxmLCBzb3VyY2VfZmQsIGRlc3RfZmQsIG1vZGUpOgorICAgICAgICBzb3VyY2VfZmQgPSBpbnQoc291cmNlX2ZkKQorICAgICAgICBpZiBzb3VyY2VfZmQgbm90IGluIHNlbGYuX2Rlc2NyaXB0b3JzOgorICAgICAgICAgICAgcmFpc2UgUmVkaXJlY3Rpb25FcnJvcignIiVzIiBpcyBub3QgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3InICUgc3RyKHNvdXJjZV9mZCkpCisgICAgICAgIHNvdXJjZSA9IHNlbGYuX2Rlc2NyaXB0b3JzW3NvdXJjZV9mZF0KKyAgICAgICAgCisgICAgICAgIGlmIHNvdXJjZS5tb2RlKCkhPW1vZGU6CisgICAgICAgICAgICByYWlzZSBSZWRpcmVjdGlvbkVycm9yKCdEZXNjcmlwdG9yICVzIGNhbm5vdCBiZSBkdXBsaWNhdGVkIGluIG1vZGUgIiVzIicgJSAoc3RyKHNvdXJjZSksIG1vZGUpKQorICAgICAgICAKKyAgICAgICAgaWYgZGVzdF9mZD09Jy0nOgorICAgICAgICAgICAgIyBDbG9zZSB0aGUgc291cmNlIGRlc2NyaXB0b3IKKyAgICAgICAgICAgIGRlbCBzZWxmLl9kZXNjcmlwdG9yc1tzb3VyY2VfZmRdCisgICAgICAgICAgICBzb3VyY2UuY2xvc2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVzdF9mZCA9IGludChkZXN0X2ZkKQorICAgICAgICAgICAgaWYgZGVzdF9mZCBub3QgaW4gc2VsZi5fZGVzY3JpcHRvcnM6CisgICAgICAgICAgICAgICAgcmFpc2UgUmVkaXJlY3Rpb25FcnJvcignQ2Fubm90IHJlcGxhY2UgZmlsZSBkZXNjcmlwdG9yICVzJyAlIHN0cihkZXN0X2ZkKSkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlc3QgPSBzZWxmLl9kZXNjcmlwdG9yc1tkZXN0X2ZkXQorICAgICAgICAgICAgaWYgZGVzdC5tb2RlKCkhPW1vZGU6CisgICAgICAgICAgICAgICAgcmFpc2UgUmVkaXJlY3Rpb25FcnJvcignRGVzY3JpcHRvciAlcyBjYW5ub3QgYmUgY2Fubm90IGJlIHJlZGlyZWN0ZWQgaW4gbW9kZSAiJXMiJyAlIChzdHIoZGVzdCksIG1vZGUpKQorICAgICAgICAgICAgCisgICAgICAgICAgICBzZWxmLl9kZXNjcmlwdG9yc1tkZXN0X2ZkXSA9IHNvdXJjZS5kdXAoKQorICAgICAgICAgICAgZGVzdC5jbG9zZSgpICAgICAgICAKKyAgICAgICAgICAgIAorICAgIGRlZiBfYWRkX2Rlc2NyaXB0b3Ioc2VsZiwgaW9fbnVtYmVyLCBmaWxlKToKKyAgICAgICAgaW9fbnVtYmVyID0gaW50KGlvX251bWJlcikKKyAgICAgICAgCisgICAgICAgIGlmIGlvX251bWJlciBpbiBzZWxmLl9kZXNjcmlwdG9yczoKKyAgICAgICAgICAgICMgQ2xvc2UgdGhlIGN1cnJlbnQgZGVzY3JpcHRvcgorICAgICAgICAgICAgZCA9IHNlbGYuX2Rlc2NyaXB0b3JzW2lvX251bWJlcl0KKyAgICAgICAgICAgIGRlbCBzZWxmLl9kZXNjcmlwdG9yc1tpb19udW1iZXJdCisgICAgICAgICAgICBkLmNsb3NlKCkKKyAgICAgICAgICAgIAorICAgICAgICBzZWxmLl9kZXNjcmlwdG9yc1tpb19udW1iZXJdID0gZmlsZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIG5hbWVzID0gWygnJWQ9JXInICUgKGssIGdldGF0dHIodiwgJ25hbWUnLCBOb25lKSkpIGZvciBrLHYKKyAgICAgICAgICAgICAgICAgaW4gc2VsZi5fZGVzY3JpcHRvcnMuaXRlcml0ZW1zKCldCisgICAgICAgIG5hbWVzID0gJywnLmpvaW4obmFtZXMpCisgICAgICAgIHJldHVybiAnUmVkaXJlY3Rpb25zKCVzKScgJSBuYW1lcworCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuY2xvc2UoKQorICAgIAorZGVmIGN5Z3dpbl90b193aW5kb3dzX3BhdGgocGF0aCk6CisgICAgIiIiVHVybiAvY3lnZHJpdmUvYy9mb28gaW50byBjOi9mb28sIG9yIHJldHVybiBwYXRoIGlmIGl0CisgICAgaXMgbm90IGEgY3lnd2luIHBhdGguCisgICAgIiIiCisgICAgaWYgbm90IHBhdGguc3RhcnRzd2l0aCgnL2N5Z2RyaXZlLycpOgorICAgICAgICByZXR1cm4gcGF0aAorICAgIHBhdGggPSBwYXRoW2xlbignL2N5Z2RyaXZlLycpOl0KKyAgICBwYXRoID0gcGF0aFs6MV0gKyAnOicgKyBwYXRoWzE6XQorICAgIHJldHVybiBwYXRoCisgICAgCitkZWYgd2luMzJfdG9fdW5peF9wYXRoKHBhdGgpOgorICAgIGlmIHBhdGggaXMgbm90IE5vbmU6CisgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoJ1xcJywgJy8nKQorICAgIHJldHVybiBwYXRoICAgIAorICAgIAorX1JFX1NIRUJBTkcgPSByZS5jb21waWxlKHInXlwjIVxzPyhbXlxzXSspKD86XHMoW15cc10rKSk/JykKK19TSEVCQU5HX0NNRFMgPSB7CisgICAgJy91c3IvYmluL2Vudic6ICdlbnYnLAorICAgICcvYmluL3NoJzogJ3B5c2gnLAorICAgICdweXRob24nOiAncHl0aG9uJywKK30KKyAgICAKK2RlZiByZXNvbHZlX3NoZWJhbmcocGF0aCwgaWdub3Jlc2hlbGw9RmFsc2UpOgorICAgICIiIlJldHVybiBhIGxpc3Qgb2YgYXJndW1lbnRzIGFzIHNoZWJhbmcgaW50ZXJwcmV0ZXIgY2FsbCBvciBhbiBlbXB0eSBsaXN0CisgICAgaWYgcGF0aCBkb2VzIG5vdCByZWZlciB0byBhbiBleGVjdXRhYmxlIHNjcmlwdC4KKyAgICBTZWUgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9hdXN0aW4vZG9jcy9hdXN0aW5fNTFyMi50eHQ+LgorICAgIAorICAgIGlnbm9yZXNoZWxsIC0gc2V0IHRvIFRydWUgdG8gaWdub3JlIHNoIHNoZWJhbmdzLiBSZXR1cm4gYW4gZW1wdHkgbGlzdCBpbnN0ZWFkLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgZiA9IGZpbGUocGF0aCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBBdCBtb3N0IDgwIGNoYXJhY3RlcnMgaW4gdGhlIGZpcnN0IGxpbmUKKyAgICAgICAgICAgIGhlYWRlciA9IGYucmVhZCg4MCkuc3BsaXRsaW5lcygpWzBdCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIAorICAgICAgICBtID0gX1JFX1NIRUJBTkcuc2VhcmNoKGhlYWRlcikKKyAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICByZXR1cm4gW10KKyAgICAgICAgY21kLCBhcmcgPSBtLmdyb3VwKDEsMikKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoY21kKToKKyAgICAgICAgICAgICMgS2VlcCB0aGlzIG9uZSwgdGhlIGhnIHNjcmlwdCBmb3IgaW5zdGFuY2UgY29udGFpbnMgYSB3ZWlyZCB3aW5kb3dzCisgICAgICAgICAgICAjIHNoZWJhbmcgcmVmZXJlbmNpbmcgdGhlIGN1cnJlbnQgcHl0aG9uIGluc3RhbGwuCisgICAgICAgICAgICBjbWRmaWxlID0gb3MucGF0aC5iYXNlbmFtZShjbWQpLmxvd2VyKCkKKyAgICAgICAgICAgIGlmIGNtZGZpbGUgPT0gJ3B5dGhvbi5leGUnOgorICAgICAgICAgICAgICAgIGNtZCA9ICdweXRob24nCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsaWYgY21kIG5vdCBpbiBfU0hFQkFOR19DTURTOgorICAgICAgICAgICAgcmFpc2UgQ29tbWFuZE5vdEZvdW5kKCdVbmtub3duIGludGVycHJldGVyICIlcyIgcmVmZXJlbmNlZCBpbiAnXAorICAgICAgICAgICAgICAgICdzaGViYW5nJyAlIGhlYWRlcikKKyAgICAgICAgY21kID0gX1NIRUJBTkdfQ01EUy5nZXQoY21kKQorICAgICAgICBpZiBjbWQgaXMgTm9uZSBvciAoaWdub3Jlc2hlbGwgYW5kIGNtZCA9PSAncHlzaCcpOgorICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIGlmIGFyZyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIFtjbWQsIHdpbjMyX3RvX3VuaXhfcGF0aChwYXRoKV0KKyAgICAgICAgcmV0dXJuIFtjbWQsIGFyZywgd2luMzJfdG9fdW5peF9wYXRoKHBhdGgpXQorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGlmICBlLmVycm5vIT1lcnJuby5FTk9FTlQgYW5kIFwKKyAgICAgICAgICAgIChlLmVycm5vIT1lcnJuby5FUEVSTSBhbmQgbm90IG9zLnBhdGguaXNkaXIocGF0aCkpOiAjIE9wZW5pbmcgYSBkaXJlY3RvcnkgcmFpc2VzIEVQRVJNCisgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gW10KKyAgICAgICAgCitkZWYgd2luMzJfZmluZF9pbl9wYXRoKG5hbWUsIHBhdGgpOgorICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgc3RyKToKKyAgICAgICAgcGF0aCA9IHBhdGguc3BsaXQob3MucGF0aHNlcCkKKyAgICAgICAgCisgICAgZXh0cyA9IG9zLmVudmlyb24uZ2V0KCdQQVRIRVhUJywgJycpLmxvd2VyKCkuc3BsaXQob3MucGF0aHNlcCkKKyAgICBmb3IgcCBpbiBwYXRoOgorICAgICAgICBwX25hbWUgPSBvcy5wYXRoLmpvaW4ocCwgbmFtZSkKKyAgICAgICAgCisgICAgICAgIHByZWZpeCA9IHJlc29sdmVfc2hlYmFuZyhwX25hbWUpCisgICAgICAgIGlmIHByZWZpeDoKKyAgICAgICAgICAgIHJldHVybiBwcmVmaXgKKyAgICAgICAgICAgIAorICAgICAgICBmb3IgZXh0IGluIGV4dHM6ICAgIAorICAgICAgICAgICAgcF9uYW1lX2V4dCA9IHBfbmFtZSArIGV4dAorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocF9uYW1lX2V4dCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFt3aW4zMl90b191bml4X3BhdGgocF9uYW1lX2V4dCldCisgICAgcmV0dXJuIFtdCisKK2NsYXNzIFRyYXBzKGRpY3QpOgorICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgaWYga2V5IG5vdCBpbiAoJ0VYSVQnLCk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKyAgICAgICAgc3VwZXIoVHJhcHMsIHNlbGYpLl9fc2V0aXRlbV9fKGtleSwgdmFsdWUpCisKKyMgSUZTIHdoaXRlIHNwYWNlcyBjaGFyYWN0ZXIgY2xhc3MKK19JRlNfV0hJVEVTUEFDRVMgPSAoJyAnLCAnXHQnLCAnXG4nKQorCitjbGFzcyBFbnZpcm9ubWVudDoKKyAgICAiIiJFbnZpcm9ubWVudCBob2xkcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGV4cG9ydCB0YWJsZSwgZnVuY3Rpb24gCisgICAgZGVmaW5pdGlvbnMgYW5kIHdoYXRldmVyIGlzIGRlZmluZWQgaW4gMi4xMiAiU2hlbGwgRXhlY3V0aW9uIEVudmlyb25tZW50IiwKKyAgICByZWRpcmVjdGlvbiBleGNlcHRlZC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHdkKToKKyAgICAgICAgc2VsZi5fb3B0ID0gc2V0KCkgICAgICAgI1NoZWxsIG9wdGlvbnMKKyAgICAgICAgCisgICAgICAgIHNlbGYuX2Z1bmN0aW9ucyA9IHt9ICAgICAgICAKKyAgICAgICAgc2VsZi5fZW52ID0geyc/JzogJzAnLCAnIyc6ICcwJ30KKyAgICAgICAgc2VsZi5fZXhwb3J0ZWQgPSBzZXQoWworICAgICAgICAgICAgJ0hPTUUnLCAnSUZTJywgJ1BBVEgnCisgICAgICAgIF0pCisgICAgICAgIAorICAgICAgICAjIFNldCBlbnZpcm9ubWVudCB2YXJzIHdpdGggc2lkZS1lZmZlY3RzCisgICAgICAgIHNlbGYuX2lmc193cyA9IE5vbmUgICAgICMgU2V0IG9mIElGUyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMKKyAgICAgICAgc2VsZi5faWZzX3JlID0gTm9uZSAgICAgIyBSZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byBzcGxpdCBiZXR3ZWVuIHdvcmRzIHVzaW5nIElGUyBjbGFzc2VzCisgICAgICAgIHNlbGZbJ0lGUyddID0gJycuam9pbihfSUZTX1dISVRFU1BBQ0VTKSAjRGVmYXVsdCBlbnZpcm9ubWVudCB2YWx1ZXMKKyAgICAgICAgc2VsZlsnUFdEJ10gPSBwd2QKKyAgICAgICAgc2VsZi50cmFwcyA9IFRyYXBzKCkKKyAgICAgICAgCisgICAgZGVmIGNsb25lKHNlbGYsIHN1YnNoZWxsPUZhbHNlKToKKyAgICAgICAgZW52ID0gRW52aXJvbm1lbnQoc2VsZlsnUFdEJ10pCisgICAgICAgIGVudi5fb3B0ID0gc2V0KHNlbGYuX29wdCkKKyAgICAgICAgZm9yIGssdiBpbiBzZWxmLmdldF92YXJpYWJsZXMoKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGsgaW4gc2VsZi5fZXhwb3J0ZWQ6CisgICAgICAgICAgICAgICAgZW52LmV4cG9ydChrLHYpCisgICAgICAgICAgICBlbGlmIHN1YnNoZWxsOgorICAgICAgICAgICAgICAgIGVudltrXSA9IHYKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgaWYgc3Vic2hlbGw6CisgICAgICAgICAgICBlbnYuX2Z1bmN0aW9ucyA9IGRpY3Qoc2VsZi5fZnVuY3Rpb25zKQorICAgICAgICAgICAgCisgICAgICAgIHJldHVybiBlbnYgICAgICAgIAorICAgICAgICAKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgaWYga2V5IGluICgnQCcsICcqJywgJy0nLCAnJCcpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignJXMgaXMgbm90IGltcGxlbWVudGVkJyAlIHJlcHIoa2V5KSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2VudltrZXldCisgICAgICAgIAorICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZ2YWw9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIGRlZnZhbAorICAgICAgICAKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgIGlmIGtleT09J0lGUyc6CisgICAgICAgICAgICAjIFVwZGF0ZSB0aGUgd2hpdGVzcGFjZS9ub24td2hpdGVzcGFjZSBjbGFzc2VzCisgICAgICAgICAgICBzZWxmLl91cGRhdGVfaWZzKHZhbHVlKQorICAgICAgICBlbGlmIGtleT09J1BXRCc6CisgICAgICAgICAgICBwd2QgPSBvcy5wYXRoLmFic3BhdGgodmFsdWUpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihwd2QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhckFzc2lnbm1lbnRFcnJvcignSW52YWxpZCBkaXJlY3RvcnkgJXMnICUgdmFsdWUpCisgICAgICAgICAgICB2YWx1ZSA9IHB3ZAorICAgICAgICBlbGlmIGtleSBpbiAoJz8nLCAnIScpOgorICAgICAgICAgICAgdmFsdWUgPSBzdHIoaW50KHZhbHVlKSkKKyAgICAgICAgc2VsZi5fZW52W2tleV0gPSB2YWx1ZQorICAgICAgICAKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgaWYga2V5IGluICgnSUZTJywgJ1BXRCcsICc/Jyk6CisgICAgICAgICAgICByYWlzZSBWYXJBc3NpZ25tZW50RXJyb3IoJyVzIGNhbm5vdCBiZSB1bnNldCcgJSBrZXkpCisgICAgICAgIGRlbCBzZWxmLl9lbnZba2V5XQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVtKToKKyAgICAgICAgcmV0dXJuIGl0ZW0gaW4gc2VsZi5fZW52CisgICAgICAgIAorICAgIGRlZiBzZXRfcG9zaXRpb25hbF9hcmdzKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJTZXQgdGhlIGNvbnRlbnQgb2YgJ2FyZ3MnIGFzIHBvc2l0aW9uYWwgYXJndW1lbnQgZnJvbSAxIHRvIGxlbihhcmdzKS4KKyAgICAgICAgUmV0dXJuIHByZXZpb3VzIGFyZ3VtZW50IGFzIGEgbGlzdCBvZiBzdHJpbmdzLgorICAgICAgICAiIiIKKyAgICAgICAgIyBTYXZlIGFuZCByZW1vdmUgcHJldmlvdXMgYXJndW1lbnRzCisgICAgICAgIHByZXZhcmdzID0gW10gICAgICAgIAorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoaW50KHNlbGYuX2VudlsnIyddKSk6CisgICAgICAgICAgICBpID0gc3RyKGkrMSkKKyAgICAgICAgICAgIHByZXZhcmdzLmFwcGVuZChzZWxmLl9lbnZbaV0pCisgICAgICAgICAgICBkZWwgc2VsZi5fZW52W2ldCisgICAgICAgIHNlbGYuX2VudlsnIyddID0gJzAnCisgICAgICAgICAgICAgICAgCisgICAgICAgICNTZXQgbmV3IG9uZXMKKyAgICAgICAgZm9yIGksYXJnIGluIGVudW1lcmF0ZShhcmdzKToKKyAgICAgICAgICAgIHNlbGYuX2VudltzdHIoaSsxKV0gPSBzdHIoYXJnKQorICAgICAgICBzZWxmLl9lbnZbJyMnXSA9IHN0cihsZW4oYXJncykpCisgICAgICAgIAorICAgICAgICByZXR1cm4gcHJldmFyZ3MKKyAgICAgICAgCisgICAgZGVmIGdldF9wb3NpdGlvbmFsX2FyZ3Moc2VsZik6CisgICAgICAgIHJldHVybiBbc2VsZi5fZW52W3N0cihpKzEpXSBmb3IgaSBpbiB4cmFuZ2UoaW50KHNlbGYuX2VudlsnIyddKSldCisgICAgICAgIAorICAgIGRlZiBnZXRfdmFyaWFibGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gZGljdChzZWxmLl9lbnYpCisgICAgICAgIAorICAgIGRlZiBleHBvcnQoc2VsZiwga2V5LCB2YWx1ZT1Ob25lKToKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQorICAgICAgICBzZWxmLl9leHBvcnRlZC5hZGQoa2V5KQorICAgICAgICAKKyAgICBkZWYgZ2V0X2V4cG9ydGVkKHNlbGYpOgorICAgICAgICByZXR1cm4gWyhrLHNlbGYuX2Vudi5nZXQoaykpIGZvciBrIGluIHNlbGYuX2V4cG9ydGVkXQorICAgICAgICAgICAgCisgICAgZGVmIHNwbGl0X2ZpZWxkcyhzZWxmLCB3b3JkKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2lmc193cyBvciBub3Qgd29yZDoKKyAgICAgICAgICAgIHJldHVybiBbd29yZF0KKyAgICAgICAgcmV0dXJuIHJlLnNwbGl0KHNlbGYuX2lmc19yZSwgd29yZCkKKyAgIAorICAgIGRlZiBfdXBkYXRlX2lmcyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIlVwZGF0ZSB0aGUgc3BsaXRfZmllbGRzIHJlbGF0ZWQgdmFyaWFibGVzIHdoZW4gSUZTIGNoYXJhY3RlciBzZXQgaXMKKyAgICAgICAgY2hhbmdlZC4KKyAgICAgICAgIiIiCisgICAgICAgICMgVE9ETzogaGFuZGxlIE5VTEwgSUZTCisgICAgICAgIAorICAgICAgICAjIFNlcGFyYXRlIGNoYXJhY3RlcnMgaW4gd2hpdGVzcGFjZSBhbmQgbm9uLXdoaXRlc3BhY2UKKyAgICAgICAgY2hhcnMgPSBzZXQodmFsdWUpCisgICAgICAgIHdzID0gW2MgZm9yIGMgaW4gY2hhcnMgaWYgYyBpbiBfSUZTX1dISVRFU1BBQ0VTXQorICAgICAgICBud3MgPSBbYyBmb3IgYyBpbiBjaGFycyBpZiBjIG5vdCBpbiBfSUZTX1dISVRFU1BBQ0VTXQorICAgICAgICAKKyAgICAgICAgIyBLZWVwIHdoaXRlc3BhY2VzIGluIGEgc3RyaW5nIGZvciBsZWZ0IGFuZCByaWdodCBzdHJpcHBpbmcKKyAgICAgICAgc2VsZi5faWZzX3dzID0gJycuam9pbih3cykKKyAgICAgICAgCisgICAgICAgICMgQnVpbGQgYSByZWdleHAgdG8gc3BsaXQgZmllbGRzCisgICAgICAgIHRyYWlsaW5nID0gJ1snICsgJycuam9pbihbcmUuZXNjYXBlKGMpIGZvciBjIGluIHdzXSkgKyAnXScKKyAgICAgICAgaWYgbndzOgorICAgICAgICAgICAgIyBGaXJzdCwgdGhlIHNpbmdsZSBub24td2hpdGVzcGFjZSBvY2N1cmVuY2UuCisgICAgICAgICAgICBud3MgPSAnWycgKyAnJy5qb2luKFtyZS5lc2NhcGUoYykgZm9yIGMgaW4gbndzXSkgKyAnXScKKyAgICAgICAgICAgIG53cyA9ICcoPzonICsgdHJhaWxpbmcgKyAnKicgKyBud3MgKyB0cmFpbGluZyArICcqJyArICd8JyArIHRyYWlsaW5nICsgJyspJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUaGVuIG1peCBhbGwgcGFydHMgd2l0aCBxdWFudGlmaWVycworICAgICAgICAgICAgbndzID0gdHJhaWxpbmcgKyAnKycKKyAgICAgICAgc2VsZi5faWZzX3JlID0gcmUuY29tcGlsZShud3MpCisgICAgICAgCisgICAgZGVmIGhhc19vcHQoc2VsZiwgb3B0LCB2YWw9Tm9uZSk6CisgICAgICAgIHJldHVybiAob3B0LCB2YWwpIGluIHNlbGYuX29wdAorICAgICAgICAKKyAgICBkZWYgc2V0X29wdChzZWxmLCBvcHQsIHZhbD1Ob25lKToKKyAgICAgICAgc2VsZi5fb3B0LmFkZCgob3B0LCB2YWwpKQorICAgICAgICAKKyAgICBkZWYgZmluZF9pbl9wYXRoKHNlbGYsIG5hbWUsIHB3ZD1GYWxzZSk6CisgICAgICAgIHBhdGggPSBzZWxmLl9lbnYuZ2V0KCdQQVRIJywgJycpLnNwbGl0KG9zLnBhdGhzZXApCisgICAgICAgIGlmIHB3ZDoKKyAgICAgICAgICAgIHBhdGhbOjBdID0gW3NlbGZbJ1BXRCddXQorICAgICAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICAgICByZXR1cm4gd2luMzJfZmluZF9pbl9wYXRoKG5hbWUsIHNlbGYuX2Vudi5nZXQoJ1BBVEgnLCAnJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKyAgICAgICAgICAgIAorICAgIGRlZiBkZWZpbmVfZnVuY3Rpb24oc2VsZiwgbmFtZSwgYm9keSk6CisgICAgICAgIGlmIG5vdCBpc19uYW1lKG5hbWUpOgorICAgICAgICAgICAgcmFpc2UgU2hlbGxTeW50YXhFcnJvcignJXMgaXMgbm90IGEgdmFsaWQgZnVuY3Rpb24gbmFtZScgJSByZXByKG5hbWUpKQorICAgICAgICBzZWxmLl9mdW5jdGlvbnNbbmFtZV0gPSBib2R5CisgICAgICAgIAorICAgIGRlZiByZW1vdmVfZnVuY3Rpb24oc2VsZiwgbmFtZSk6CisgICAgICAgIGRlbCBzZWxmLl9mdW5jdGlvbnNbbmFtZV0KKyAgICAgICAgCisgICAgZGVmIGlzX2Z1bmN0aW9uKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gbmFtZSBpbiBzZWxmLl9mdW5jdGlvbnMKKyAgICAgICAgCisgICAgZGVmIGdldF9mdW5jdGlvbihzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Z1bmN0aW9ucy5nZXQobmFtZSkKKyAgICAgICAgCisgICAgICAgCituYW1lX2NoYXJzZXQgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NTY3ODlfJworbmFtZV9jaGFyc2V0ID0gZGljdCh6aXAobmFtZV9jaGFyc2V0LG5hbWVfY2hhcnNldCkpCisgICAgICAgICAgIAorZGVmIG1hdGNoX25hbWUocyk6CisgICAgIiIiUmV0dXJuIHRoZSBsZW5ndGggaW4gY2hhcmFjdGVycyBvZiB0aGUgbG9uZ2VzdCBwcmVmaXggbWFkZSBvZiBuYW1lCisgICAgYWxsb3dlZCBjaGFyYWN0ZXJzIGluIHMuCisgICAgIiIiCisgICAgZm9yIGksYyBpbiBlbnVtZXJhdGUocyk6CisgICAgICAgIGlmIGMgbm90IGluIG5hbWVfY2hhcnNldDoKKyAgICAgICAgICAgIHJldHVybiBzWzppXQorICAgIHJldHVybiBzCisgICAgCitkZWYgaXNfbmFtZShzKToKKyAgICByZXR1cm4gbGVuKFtjIGZvciBjIGluIHMgaWYgYyBub3QgaW4gbmFtZV9jaGFyc2V0XSk8PTAKKyAgICAKK2RlZiBpc19zcGVjaWFsX3BhcmFtKGMpOgorICAgIHJldHVybiBsZW4oYyk9PTEgYW5kIGMgaW4gKCdAJywnKicsJyMnLCc/JywnLScsJyQnLCchJywnMCcpCisgICAgCitkZWYgdXRpbGl0eV9ub3RfaW1wbGVtZW50ZWQobmFtZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCclcyB1dGlsaXR5IGlzIG5vdCBpbXBsZW1lbnRlZCcgJSBuYW1lKQorICAgIAorCitjbGFzcyBVdGlsaXR5OgorICAgICIiIkRlZmluZSB1dGlsaXRpZXMgcHJvcGVydGllczoKKyAgICBmdW5jIC0tIHV0aWxpdHkgY2FsbGFibGUuIFNlZSBidWlsdGluIG1vZHVsZSBmb3IgdXRpbGl0eSBzYW1wbGVzLgorICAgIGlzX3NwZWNpYWwgLS0gc2VlIFhDVSAyLjguCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmMsIGlzX3NwZWNpYWw9MCk6CisgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMKKyAgICAgICAgc2VsZi5pc19zcGVjaWFsID0gYm9vbChpc19zcGVjaWFsKQorCisKK2RlZiBlbmNvZGVhcmdzKGFyZ3MpOgorICAgIGRlZiBlbmNvZGVhcmcocyk6CisgICAgICAgIGxpbmVzID0gYmFzZTY0LmVuY29kZXN0cmluZyhzKQorICAgICAgICBsaW5lcyA9IFtsLnNwbGl0bGluZXMoKVswXSBmb3IgbCBpbiBsaW5lc10KKyAgICAgICAgcmV0dXJuICcnLmpvaW4obGluZXMpCisKKyAgICBzID0gcGlja2xlLmR1bXBzKGFyZ3MpCisgICAgcmV0dXJuIGVuY29kZWFyZyhzKQorCitkZWYgZGVjb2RlYXJncyhzKToKKyAgICBzID0gYmFzZTY0LmRlY29kZXN0cmluZyhzKQorICAgIHJldHVybiBwaWNrbGUubG9hZHMocykKKyAgICAKKworY2xhc3MgR2xvYkVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBPcHRpb25zOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgIyBUcnVlIGlmIE1lcmN1cmlhbCBvcGVyYXRlcyB3aXRoIGJpbmFyeSBzdHJlYW1zCisgICAgICAgIHNlbGYuaGdiaW5hcnkgPSBUcnVlCisKK2NsYXNzIEludGVycHJldGVyOgorICAgICMgSW1wbGVtZW50YXRpb24gaXMgdmVyeSBiYXNpYzogdGhlIGV4ZWN1dGUoKSBtZXRob2QganVzdCBtYWtlcyBhIERGUyBvbiB0aGUKKyAgICAjIEFTVCBhbmQgZXhlY3V0ZSBub2RlcyBvbmUgYnkgb25lLiBOb2RlcyBhcmUgdHVwbGUgKG5hbWUsb2JqKSB3aGVyZSBuYW1lCisgICAgIyBpcyBhIHN0cmluZyBpZGVudGlmaWVyIGFuZCBvYmogdGhlIEFTVCBlbGVtZW50IHJldHVybmVkIGJ5IHRoZSBwYXJzZXIuCisgICAgIworICAgICMgSGFuZGxlciBhcmUgbmFtZWQgYWZ0ZXIgdGhlIG5vZGUgaWRlbnRpZmllcnMuCisgICAgIyBUT0RPOiBjaGVjayBub2RlIG5hbWVzIGFuZCByZW1vdmUgdGhlIHN3aXRjaCBpbiBleGVjdXRlIHdpdGggc29tZQorICAgICMgZHluYW1pYyBnZXRhdHRyKCkgY2FsbCB0byBmaW5kIG5vZGUgaGFuZGxlcnMuCisgICAgIiIiU2hlbGwgaW50ZXJwcmV0ZXIuCisgICAgCisgICAgVGhlIGZvbGxvd2luZyBkZWJ1Z2dpbmcgZmxhZ3MgY2FuIGJlIHBhc3NlZDoKKyAgICBkZWJ1Zy1wYXJzaW5nIC0gZW5hYmxlIFBMWSBkZWJ1Z2dpbmcuCisgICAgZGVidWctdHJlZSAtIHByaW50IHRoZSBnZW5lcmF0ZWQgQVNULgorICAgIGRlYnVnLWNtZCAtIHRyYWNlIGNvbW1hbmQgZXhlY3V0aW9uIGJlZm9yZSB3b3JkIGV4cGFuc2lvbiwgcGx1cyBleGl0IHN0YXR1cy4KKyAgICBkZWJ1Zy11dGlsaXR5IC0gdHJhY2UgdXRpbGl0eSBleGVjdXRpb24uCisgICAgIiIiCisgICAgCisgICAgIyBMaXN0IHN1cHBvcnRlZCBjb21tYW5kcy4KKyAgICBDT01NQU5EUyA9IHsKKyAgICAgICAgJ2NhdCc6ICAgICAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X2NhdCwpLAorICAgICAgICAnY2QnOiAgICAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9jZCwpLAorICAgICAgICAnOic6ICAgICAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9jb2xvbiwpLAorICAgICAgICAnZWNobyc6ICAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9lY2hvKSwKKyAgICAgICAgJ2Vudic6ICAgICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfZW52KSwKKyAgICAgICAgJ2V4aXQnOiAgICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfZXhpdCksCisgICAgICAgICdleHBvcnQnOiAgIFV0aWxpdHkoYnVpbHRpbi5idWlsdGluX2V4cG9ydCwgICAgIGlzX3NwZWNpYWw9MSksCisgICAgICAgICdlZ3JlcCc6ICAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X2VncmVwKSwKKyAgICAgICAgJ2ZncmVwJzogICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfZmdyZXApLAorICAgICAgICAnZ3VuemlwJzogICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9ndW56aXApLAorICAgICAgICAna2lsbCc6ICAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9raWxsKSwKKyAgICAgICAgJ21rZGlyJzogICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfbWtkaXIpLAorICAgICAgICAnbmV0c3RhdCc6ICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9uZXRzdGF0KSwKKyAgICAgICAgJ3ByaW50Zic6ICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfcHJpbnRmKSwKKyAgICAgICAgJ3B3ZCc6ICAgICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfcHdkKSwKKyAgICAgICAgJ3JldHVybic6ICAgVXRpbGl0eShidWlsdGluLmJ1aWx0aW5fcmV0dXJuLCAgICAgaXNfc3BlY2lhbD0xKSwKKyAgICAgICAgJ3NlZCc6ICAgICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfc2VkLCksCisgICAgICAgICdzZXQnOiAgICAgIFV0aWxpdHkoYnVpbHRpbi5idWlsdGluX3NldCwpLAorICAgICAgICAnc2hpZnQnOiAgICBVdGlsaXR5KGJ1aWx0aW4uYnVpbHRpbl9zaGlmdCwpLAorICAgICAgICAnc2xlZXAnOiAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9zbGVlcCwpLAorICAgICAgICAnc29ydCc6ICAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9zb3J0LCksCisgICAgICAgICd0cmFwJzogICAgIFV0aWxpdHkoYnVpbHRpbi5idWlsdGluX3RyYXAsICAgICAgIGlzX3NwZWNpYWw9MSksCisgICAgICAgICd0cnVlJzogICAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X3RydWUpLAorICAgICAgICAndW5zZXQnOiAgICBVdGlsaXR5KGJ1aWx0aW4uYnVpbHRpbl91bnNldCwgICAgICBpc19zcGVjaWFsPTEpLAorICAgICAgICAnd2FpdCc6ICAgICBVdGlsaXR5KGJ1aWx0aW4uYnVpbHRpbl93YWl0LCAgICAgICBpc19zcGVjaWFsPTEpLAorICAgIH0KKyAgICAKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHdkLCBkZWJ1Z2ZsYWdzID0gW10sIGVudj1Ob25lLCByZWRpcnM9Tm9uZSwgc3RkaW49Tm9uZSwKKyAgICAgICAgICAgICAgICAgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLCBvcHRzPU9wdGlvbnMoKSk6CisgICAgICAgIHNlbGYuX2VudiA9IGVudgorICAgICAgICBpZiBzZWxmLl9lbnYgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2VudiA9IEVudmlyb25tZW50KHB3ZCkKKyAgICAgICAgc2VsZi5fY2hpbGRyZW4gPSB7fQorICAgICAgICAgICAgCisgICAgICAgIHNlbGYuX3JlZGlycyA9IHJlZGlycworICAgICAgICBzZWxmLl9jbG9zZV9yZWRpcnMgPSBGYWxzZQorICAgICAgICAKKyAgICAgICAgaWYgc2VsZi5fcmVkaXJzIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzdGRpbiBpcyBOb25lOgorICAgICAgICAgICAgICAgIHN0ZGluID0gc3lzLnN0ZGluCisgICAgICAgICAgICBpZiBzdGRvdXQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgICAgICBpZiBzdGRlcnIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzdGRlcnIgPSBzeXMuc3RkZXJyCisgICAgICAgICAgICBzdGRpbiA9IEZpbGVXcmFwcGVyKCdyJywgc3RkaW4sIEZhbHNlKQorICAgICAgICAgICAgc3Rkb3V0ID0gRmlsZVdyYXBwZXIoJ3cnLCBzdGRvdXQsIEZhbHNlKQorICAgICAgICAgICAgc3RkZXJyID0gRmlsZVdyYXBwZXIoJ3cnLCBzdGRlcnIsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5fcmVkaXJzID0gUmVkaXJlY3Rpb25zKHN0ZGluLCBzdGRvdXQsIHN0ZGVycikKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlX3JlZGlycyA9IFRydWUKKyAgICAgICAgICAgIAorICAgICAgICBzZWxmLl9kZWJ1Z2ZsYWdzID0gbGlzdChkZWJ1Z2ZsYWdzKQorICAgICAgICBzZWxmLl9sb2dmaWxlID0gc3lzLnN0ZGVycgorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0cworICAgICAgICAKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIk11c3QgYmUgY2FsbGVkIHdoZW4gdGhlIGludGVycHJldGVyIGlzIG5vIGxvbmdlciB1c2VkLiIiIgorICAgICAgICBzY3JpcHQgPSBzZWxmLl9lbnYudHJhcHMuZ2V0KCdFWElUJykKKyAgICAgICAgaWYgc2NyaXB0OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0ZV9zY3JpcHQoc2NyaXB0PXNjcmlwdCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaWYgc2VsZi5fcmVkaXJzIGlzIG5vdCBOb25lIGFuZCBzZWxmLl9jbG9zZV9yZWRpcnM6CisgICAgICAgICAgICBzZWxmLl9yZWRpcnMuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcmVkaXJzID0gTm9uZQorICAgICAgICAgICAgCisgICAgZGVmIGxvZyhzZWxmLCBzKToKKyAgICAgICAgc2VsZi5fbG9nZmlsZS53cml0ZShzKQorICAgICAgICBzZWxmLl9sb2dmaWxlLmZsdXNoKCkKKyAgICAgICAgICAgIAorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4gc2VsZi5fZW52W2tleV0KKyAgICAgICAgCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICBzZWxmLl9lbnZba2V5XSA9IHZhbHVlCisKKyAgICBkZWYgb3B0aW9ucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX29wdGlvbnMKKworICAgIGRlZiByZWRpcmVjdChzZWxmLCByZWRpcnMsIGlvcyk6CisgICAgICAgIGRlZiBhZGRfcmVkaXIoaW8pOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpbywgcHlzaHlhY2MuSU9SZWRpcmVjdCk6CisgICAgICAgICAgICAgICAgcmVkaXJzLmFkZChzZWxmLCBpby5vcCwgaW8uZmlsZW5hbWUsIGlvLmlvX251bWJlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVkaXJzLmFkZF9oZXJlX2RvY3VtZW50KHNlbGYsIGlvLm5hbWUsIGlvLmNvbnRlbnQsIGlvLmlvX251bWJlcikKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIG1hcChhZGRfcmVkaXIsIGlvcykKKyAgICAgICAgcmV0dXJuIHJlZGlycworICAgICAgICAgICAgCisgICAgZGVmIGV4ZWN1dGVfc2NyaXB0KHNlbGYsIHNjcmlwdD1Ob25lLCBhc3Q9Tm9uZSwgc291cmNlZD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0cGF0aD1Ob25lKToKKyAgICAgICAgIiIiSWYgc2NyaXB0IGlzIG5vdCBOb25lLCBwYXJzZSB0aGUgaW5wdXQuIE90aGVyd2lzZSB0YWtlcyB0aGUgc3VwcGxpZWQKKyAgICAgICAgQVNULiBUaGVuIGV4ZWN1dGUgdGhlIEFTVC4KKyAgICAgICAgUmV0dXJuIHRoZSBzY3JpcHQgZXhpdCBzdGF0dXMuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzY3JpcHRwYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX2VudlsnMCddID0gb3MucGF0aC5hYnNwYXRoKHNjcmlwdHBhdGgpCisKKyAgICAgICAgICAgIGlmIHNjcmlwdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBkZWJ1Z19wYXJzaW5nID0gKCdkZWJ1Zy1wYXJzaW5nJyBpbiBzZWxmLl9kZWJ1Z2ZsYWdzKSAgICAKKyAgICAgICAgICAgICAgICBjbWRzLCBzY3JpcHQgPSBweXNoeWFjYy5wYXJzZShzY3JpcHQsIFRydWUsIGRlYnVnX3BhcnNpbmcpCisgICAgICAgICAgICAgICAgaWYgJ2RlYnVnLXRyZWUnIGluIHNlbGYuX2RlYnVnZmxhZ3M6CisgICAgICAgICAgICAgICAgICAgIHB5c2h5YWNjLnByaW50X2NvbW1hbmRzKGNtZHMsIHNlbGYuX2xvZ2ZpbGUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2ZpbGUuZmx1c2goKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjbWRzLCBzY3JpcHQgPSBhc3QsICcnICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgc3RhdHVzID0gMAorICAgICAgICAgICAgZm9yIGNtZCBpbiBjbWRzOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5leGVjdXRlKGNtZCkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhpdFNpZ25hbCBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBzb3VyY2VkOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gaW50KGUuYXJnc1swXSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1cworICAgICAgICAgICAgICAgIGV4Y2VwdCBTaGVsbEVycm9yOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9lbnZbJz8nXSA9IDEKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gc2VsZi5fZGVidWdmbGFncyBvciAnZGVidWctY21kJyBpbiBzZWxmLl9kZWJ1Z2ZsYWdzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZygncmV0dXJuY29kZSAnICsgc3RyKHN0YXR1cykrICdcbicpCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzCisgICAgICAgIGV4Y2VwdCBDb21tYW5kTm90Rm91bmQgYXMgZToKKyAgICAgICAgICAgIHByaW50ID4+c2VsZi5fcmVkaXJzLnN0ZGVyciwgc3RyKGUpCisgICAgICAgICAgICBzZWxmLl9yZWRpcnMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgICAgICMgQ29tbWFuZCBub3QgZm91bmQgYnkgbm9uLWludGVyYWN0aXZlIHNoZWxsCisgICAgICAgICAgICAjIHJldHVybiAxMjcKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBSZWRpcmVjdGlvbkVycm9yIGFzIGU6CisgICAgICAgICAgICAjIFRPRE86IHNob3VsZCBiZSBoYW5kbGVkIGRlcGVuZGluZyBvbiB0aGUgdXRpbGl0eSBzdGF0dXMKKyAgICAgICAgICAgIHByaW50ID4+c2VsZi5fcmVkaXJzLnN0ZGVyciwgc3RyKGUpCisgICAgICAgICAgICBzZWxmLl9yZWRpcnMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgICAgICMgQ29tbWFuZCBub3QgZm91bmQgYnkgbm9uLWludGVyYWN0aXZlIHNoZWxsCisgICAgICAgICAgICAjIHJldHVybiAxMjcKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgZG90Y29tbWFuZChzZWxmLCBlbnYsIGFyZ3MpOgorICAgICAgICBpZiBsZW4oYXJncykgPCAxOgorICAgICAgICAgICAgcmFpc2UgU2hlbGxFcnJvcignLiBleHBlY3RzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCcpCisgICAgICAgIHBhdGggPSBhcmdzWzBdCisgICAgICAgIGlmICcvJyBub3QgaW4gcGF0aDoKKyAgICAgICAgICAgIGZvdW5kID0gZW52LmZpbmRfaW5fcGF0aChhcmdzWzBdLCBUcnVlKQorICAgICAgICAgICAgaWYgZm91bmQ6CisgICAgICAgICAgICAgICAgcGF0aCA9IGZvdW5kWzBdCisgICAgICAgIHNjcmlwdCA9IGZpbGUocGF0aCkucmVhZCgpCisgICAgICAgIHJldHVybiBzZWxmLmV4ZWN1dGVfc2NyaXB0KHNjcmlwdD1zY3JpcHQsIHNvdXJjZWQ9VHJ1ZSkKKworICAgIGRlZiBleGVjdXRlKHNlbGYsIHRva2VuLCByZWRpcnM9Tm9uZSk6CisgICAgICAgICIiIkV4ZWN1dGUgYW5kIEFTVCBzdWJ0cmVlIHdpdGggc3VwcGxpZWQgcmVkaXJlY3Rpb25zIG92ZXJyaWRpbmcgZGVmYXVsdAorICAgICAgICBpbnRlcnByZXRlciBvbmVzLgorICAgICAgICBSZXR1cm4gdGhlIGV4aXQgc3RhdHVzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHRva2VuOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIAorICAgICAgICBpZiByZWRpcnMgaXMgTm9uZToKKyAgICAgICAgICAgIHJlZGlycyA9IHNlbGYuX3JlZGlycworICAgICAgICAgICAgCisgICAgICAgIGlmIGlzaW5zdGFuY2UodG9rZW4sIGxpc3QpOgorICAgICAgICAgICAgIyBDb21tYW5kcyBzZXF1ZW5jZQorICAgICAgICAgICAgcmVzID0gMAorICAgICAgICAgICAgZm9yIHQgaW4gdG9rZW46CisgICAgICAgICAgICAgICAgcmVzID0gc2VsZi5leGVjdXRlKHQsIHJlZGlycykKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgICAgICB0eXBlLCB2YWx1ZSA9IHRva2VuCisgICAgICAgIHN0YXR1cyA9IDAKKyAgICAgICAgaWYgdHlwZT09J3NpbXBsZV9jb21tYW5kJzoKKyAgICAgICAgICAgIHJlZGlyc19jb3B5ID0gcmVkaXJzLmNsb25lKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIFRPRE86IGRlZmluZSBhbmQgaGFuZGxlIGNvbW1hbmQgcmV0dXJuIHZhbHVlcworICAgICAgICAgICAgICAgICMgVE9ETzogaW1wbGVtZW50IHNldCAtZQorICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuX2V4ZWN1dGVfc2ltcGxlX2NvbW1hbmQodmFsdWUsIHJlZGlyc19jb3B5KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICByZWRpcnNfY29weS5jbG9zZSgpCisgICAgICAgIGVsaWYgdHlwZT09J3BpcGVsaW5lJzoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuX2V4ZWN1dGVfcGlwZWxpbmUodmFsdWUsIHJlZGlycykKKyAgICAgICAgZWxpZiB0eXBlPT0nYW5kX29yJzoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuX2V4ZWN1dGVfYW5kX29yKHZhbHVlLCByZWRpcnMpCisgICAgICAgIGVsaWYgdHlwZT09J2Zvcl9jbGF1c2UnOgorICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5fZXhlY3V0ZV9mb3JfY2xhdXNlKHZhbHVlLCByZWRpcnMpCisgICAgICAgIGVsaWYgdHlwZT09J3doaWxlX2NsYXVzZSc6CisgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLl9leGVjdXRlX3doaWxlX2NsYXVzZSh2YWx1ZSwgcmVkaXJzKQorICAgICAgICBlbGlmIHR5cGU9PSdmdW5jdGlvbl9kZWZpbml0aW9uJzoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuX2V4ZWN1dGVfZnVuY3Rpb25fZGVmaW5pdGlvbih2YWx1ZSwgcmVkaXJzKQorICAgICAgICBlbGlmIHR5cGU9PSdicmFjZV9ncm91cCc6CisgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLl9leGVjdXRlX2JyYWNlX2dyb3VwKHZhbHVlLCByZWRpcnMpCisgICAgICAgIGVsaWYgdHlwZT09J2lmX2NsYXVzZSc6CisgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLl9leGVjdXRlX2lmX2NsYXVzZSh2YWx1ZSwgcmVkaXJzKQorICAgICAgICBlbGlmIHR5cGU9PSdzdWJzaGVsbCc6CisgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLnN1YnNoZWxsKGFzdD12YWx1ZS5jbWRzLCByZWRpcnM9cmVkaXJzKQorICAgICAgICBlbGlmIHR5cGU9PSdhc3luYyc6CisgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLl9hc3luY2xpc3QodmFsdWUpCisgICAgICAgIGVsaWYgdHlwZT09J3JlZGlyZWN0X2xpc3QnOgorICAgICAgICAgICAgcmVkaXJzX2NvcHkgPSBzZWxmLnJlZGlyZWN0KHJlZGlycy5jbG9uZSgpLCB2YWx1ZS5yZWRpcnMpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5leGVjdXRlKHZhbHVlLmNtZCwgcmVkaXJzX2NvcHkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJlZGlyc19jb3B5LmNsb3NlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1Vuc3VwcG9ydGVkIHRva2VuIHR5cGUgJyArIHR5cGUpCisKKyAgICAgICAgaWYgc3RhdHVzIDwgMDoKKyAgICAgICAgICAgIHN0YXR1cyA9IDI1NQorICAgICAgICByZXR1cm4gc3RhdHVzCisgICAgICAgICAgICAKKyAgICBkZWYgX2V4ZWN1dGVfaWZfY2xhdXNlKHNlbGYsIGlmX2NsYXVzZSwgcmVkaXJzKToKKyAgICAgICAgY29uZF9zdGF0dXMgPSBzZWxmLmV4ZWN1dGUoaWZfY2xhdXNlLmNvbmQsIHJlZGlycykKKyAgICAgICAgaWYgY29uZF9zdGF0dXM9PTA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5leGVjdXRlKGlmX2NsYXVzZS5pZl9jbWRzLCByZWRpcnMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5leGVjdXRlKGlmX2NsYXVzZS5lbHNlX2NtZHMsIHJlZGlycykKKyAgICAgIAorICAgIGRlZiBfZXhlY3V0ZV9icmFjZV9ncm91cChzZWxmLCBncm91cCwgcmVkaXJzKToKKyAgICAgICAgc3RhdHVzID0gMAorICAgICAgICBmb3IgY21kIGluIGdyb3VwLmNtZHM6CisgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLmV4ZWN1dGUoY21kLCByZWRpcnMpCisgICAgICAgIHJldHVybiBzdGF0dXMKKyAgICAgICAgICAgIAorICAgIGRlZiBfZXhlY3V0ZV9mdW5jdGlvbl9kZWZpbml0aW9uKHNlbGYsIGZ1bmRlZiwgcmVkaXJzKToKKyAgICAgICAgc2VsZi5fZW52LmRlZmluZV9mdW5jdGlvbihmdW5kZWYubmFtZSwgZnVuZGVmLmJvZHkpCisgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICAKKyAgICBkZWYgX2V4ZWN1dGVfd2hpbGVfY2xhdXNlKHNlbGYsIHdoaWxlX2NsYXVzZSwgcmVkaXJzKToKKyAgICAgICAgc3RhdHVzID0gMAorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgY29uZF9zdGF0dXMgPSAwCisgICAgICAgICAgICBmb3IgY29uZCBpbiB3aGlsZV9jbGF1c2UuY29uZGl0aW9uOgorICAgICAgICAgICAgICAgIGNvbmRfc3RhdHVzID0gc2VsZi5leGVjdXRlKGNvbmQsIHJlZGlycykKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIGNvbmRfc3RhdHVzOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgY21kIGluIHdoaWxlX2NsYXVzZS5jbWRzOgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuZXhlY3V0ZShjbWQsIHJlZGlycykKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIHN0YXR1cworICAgICAgICAgICAgCisgICAgZGVmIF9leGVjdXRlX2Zvcl9jbGF1c2Uoc2VsZiwgZm9yX2NsYXVzZSwgcmVkaXJzKToKKyAgICAgICAgaWYgbm90IGlzX25hbWUoZm9yX2NsYXVzZS5uYW1lKToKKyAgICAgICAgICAgIHJhaXNlIFNoZWxsU3ludGF4RXJyb3IoJyVzIGlzIG5vdCBhIHZhbGlkIG5hbWUnICUgcmVwcihmb3JfY2xhdXNlLm5hbWUpKQorICAgICAgICBpdGVtcyA9IG1hcHBlbmQoc2VsZi5leHBhbmRfdG9rZW4sIGZvcl9jbGF1c2UuaXRlbXMpCisgICAgICAgIAorICAgICAgICBzdGF0dXMgPSAwICAgIAorICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgIHNlbGYuX2Vudltmb3JfY2xhdXNlLm5hbWVdID0gaXRlbQorICAgICAgICAgICAgZm9yIGNtZCBpbiBmb3JfY2xhdXNlLmNtZHM6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5leGVjdXRlKGNtZCwgcmVkaXJzKQorICAgICAgICByZXR1cm4gc3RhdHVzCisgICAgICAgICAgICAKKyAgICBkZWYgX2V4ZWN1dGVfYW5kX29yKHNlbGYsIG9yX2FuZCwgcmVkaXJzKToKKyAgICAgICAgcmVzID0gc2VsZi5leGVjdXRlKG9yX2FuZC5sZWZ0LCByZWRpcnMpICAgICAgICAKKyAgICAgICAgaWYgKG9yX2FuZC5vcD09JyYmJyBhbmQgcmVzPT0wKSBvciAob3JfYW5kLm9wIT0nJiYnIGFuZCByZXMhPTApOgorICAgICAgICAgICAgcmVzID0gc2VsZi5leGVjdXRlKG9yX2FuZC5yaWdodCwgcmVkaXJzKQorICAgICAgICByZXR1cm4gcmVzCisgICAgICAgICAgICAKKyAgICBkZWYgX2V4ZWN1dGVfcGlwZWxpbmUoc2VsZiwgcGlwZWxpbmUsIHJlZGlycyk6ICAgICAgICAgICAgCisgICAgICAgIGlmIGxlbihwaXBlbGluZS5jb21tYW5kcyk9PTE6CisgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLmV4ZWN1dGUocGlwZWxpbmUuY29tbWFuZHNbMF0sIHJlZGlycykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgRXhlY3V0ZSBhbGwgY29tbWFuZHMgb25lIGFmdGVyIHRoZSBvdGhlcgorICAgICAgICAgICAgc3RhdHVzID0gMAorICAgICAgICAgICAgaW5wYXRoLCBvdXRwYXRoID0gTm9uZSwgTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgQ29tbWFuZHMgaW5wdXRzIGFuZCBvdXRwdXRzIGNhbm5vdCByZWFsbHkgYmUgcGx1Z2dlZCBhcyBkb25lCisgICAgICAgICAgICAgICAgIyBieSBhIHJlYWwgc2hlbGwuIFJ1biBjb21tYW5kcyBzZXF1ZW50aWFsbHkgYW5kIGNoYWluIHRoZWlyCisgICAgICAgICAgICAgICAgIyBpbnB1dC9vdXRwdXQgdGhyb3VnaHQgdGVtcG9yYXJ5IGZpbGVzLgorICAgICAgICAgICAgICAgIHRtcGZkLCBpbnBhdGggPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgICAgICAgICBvcy5jbG9zZSh0bXBmZCkKKyAgICAgICAgICAgICAgICB0bXBmZCwgb3V0cGF0aCA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHRtcGZkKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlucGF0aCA9IHdpbjMyX3RvX3VuaXhfcGF0aChpbnBhdGgpCisgICAgICAgICAgICAgICAgb3V0cGF0aCA9IHdpbjMyX3RvX3VuaXhfcGF0aChvdXRwYXRoKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciBpLCBjbWQgaW4gZW51bWVyYXRlKHBpcGVsaW5lLmNvbW1hbmRzKToKKyAgICAgICAgICAgICAgICAgICAgY2FsbF9yZWRpcnMgPSByZWRpcnMuY2xvbmUoKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpIT0wOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfcmVkaXJzLmFkZChzZWxmLCAnPCcsIGlucGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkhPWxlbihwaXBlbGluZS5jb21tYW5kcyktMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX3JlZGlycy5hZGQoc2VsZiwgJz4nLCBvdXRwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLmV4ZWN1dGUoY21kLCBjYWxsX3JlZGlycykKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGFpbiBpbnB1dHMvb3V0cHV0cworICAgICAgICAgICAgICAgICAgICAgICAgaW5wYXRoLCBvdXRwYXRoID0gb3V0cGF0aCwgaW5wYXRoCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX3JlZGlycy5jbG9zZSgpICAgICAgICAgICAgCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGlmIGlucGF0aDogb3MucmVtb3ZlKGlucGF0aCkKKyAgICAgICAgICAgICAgICBpZiBvdXRwYXRoOiBvcy5yZW1vdmUob3V0cGF0aCkKKyAgICAgICAgCisgICAgICAgIGlmIHBpcGVsaW5lLnJldmVyc2Vfc3RhdHVzOgorICAgICAgICAgICAgc3RhdHVzID0gaW50KG5vdCBzdGF0dXMpCisgICAgICAgIHNlbGYuX2VudlsnPyddID0gc3RhdHVzCisgICAgICAgIHJldHVybiBzdGF0dXMKKyAgICAgICAgCisgICAgZGVmIF9leGVjdXRlX2Z1bmN0aW9uKHNlbGYsIG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsICpvdGhlcnMpOgorICAgICAgICBhc3NlcnQgaW50ZXJwIGlzIHNlbGYKKyAgICAgICAgCisgICAgICAgIGZ1bmMgPSBlbnYuZ2V0X2Z1bmN0aW9uKG5hbWUpCisgICAgICAgICNTZXQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzCisgICAgICAgIHByZXZhcmdzID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmV2YXJncyA9IGVudi5zZXRfcG9zaXRpb25hbF9hcmdzKGFyZ3MpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVkaXJzID0gUmVkaXJlY3Rpb25zKHN0ZGluLmR1cCgpLCBzdGRvdXQuZHVwKCksIHN0ZGVyci5kdXAoKSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuZXhlY3V0ZShmdW5jLCByZWRpcnMpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgcmVkaXJzLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBSZXR1cm5TaWduYWwgYXMgZToKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBpbnQoZS5hcmdzWzBdKQorICAgICAgICAgICAgICAgIGVudlsnPyddID0gc3RhdHVzCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjUmVzZXQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzCisgICAgICAgICAgICBpZiBwcmV2YXJncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBlbnYuc2V0X3Bvc2l0aW9uYWxfYXJncyhwcmV2YXJncykKKyAgICAgICAgICAgICAgICAKKyAgICBkZWYgX2V4ZWN1dGVfc2ltcGxlX2NvbW1hbmQoc2VsZiwgdG9rZW4sIHJlZGlycyk6CisgICAgICAgICIiIkNhbiByYWlzZSBSZXR1cm5TaWduYWwgd2hlbiByZXR1cm4gYnVpbHRpbiBpcyBjYWxsZWQsIEV4aXRTaWduYWwgd2hlbgorICAgICAgICBleGl0IGlzIGNhbGxlZCwgYW5kIG90aGVyIHNoZWxsIGV4Y2VwdGlvbnMgdXBvbiBidWlsdGluIGZhaWx1cmVzLgorICAgICAgICAiIiIKKyAgICAgICAgZGVidWdfY29tbWFuZCA9ICdkZWJ1Zy1jbWQnIGluIHNlbGYuX2RlYnVnZmxhZ3MKKyAgICAgICAgaWYgZGVidWdfY29tbWFuZDoKKyAgICAgICAgICAgIHNlbGYubG9nKCd3b3JkJyArIHJlcHIodG9rZW4ud29yZHMpICsgJ1xuJykKKyAgICAgICAgICAgIHNlbGYubG9nKCdhc3NpZ25zJyArIHJlcHIodG9rZW4uYXNzaWducykgKyAnXG4nKQorICAgICAgICAgICAgc2VsZi5sb2coJ3JlZGlycycgKyByZXByKHRva2VuLnJlZGlycykgKyAnXG4nKQorICAgICAgICAKKyAgICAgICAgaXNfc3BlY2lhbCA9IE5vbmUKKyAgICAgICAgZW52ID0gc2VsZi5fZW52CisgICAgICAgIAorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFdvcmQgZXhwYW5zaW9uCisgICAgICAgICAgICBhcmdzID0gW10KKyAgICAgICAgICAgIGZvciB3b3JkIGluIHRva2VuLndvcmRzOiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhcmdzICs9IHNlbGYuZXhwYW5kX3Rva2VuKHdvcmQpCisgICAgICAgICAgICAgICAgaWYgaXNfc3BlY2lhbCBpcyBOb25lIGFuZCBhcmdzOgorICAgICAgICAgICAgICAgICAgICBpc19zcGVjaWFsID0gZW52LmlzX2Z1bmN0aW9uKGFyZ3NbMF0pIG9yIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChhcmdzWzBdIGluIHNlbGYuQ09NTUFORFMgYW5kIHNlbGYuQ09NTUFORFNbYXJnc1swXV0uaXNfc3BlY2lhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgZGVidWdfY29tbWFuZDoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZygnX2V4ZWN1dGVfc2ltcGxlX2NvbW1hbmQnICsgc3RyKGFyZ3MpICsgJ1xuJykKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgICAgICMgUmVkaXJlY3Rpb25zIGhhcHBlbiBpcyBhIHN1YnNoZWxsCisgICAgICAgICAgICAgICAgcmVkaXJzID0gcmVkaXJzLmNsb25lKCkKKyAgICAgICAgICAgIGVsaWYgbm90IGlzX3NwZWNpYWw6CisgICAgICAgICAgICAgICAgZW52ID0gc2VsZi5fZW52LmNsb25lKCkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgIyBSZWRpcmVjdGlvbnMKKyAgICAgICAgICAgIHNlbGYucmVkaXJlY3QocmVkaXJzLCB0b2tlbi5yZWRpcnMpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAjIFZhcmlhYmxlcyBhc3NpZ25tZW50cworICAgICAgICAgICAgcmVzID0gMAorICAgICAgICAgICAgZm9yIHR5cGUsKGssdikgaW4gdG9rZW4uYXNzaWduczoKKyAgICAgICAgICAgICAgICBzdGF0dXMsIGV4cGFuZGVkID0gc2VsZi5leHBhbmRfdmFyaWFibGUoKGssdikpCisgICAgICAgICAgICAgICAgaWYgc3RhdHVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXMgPSBzdGF0dXMKKyAgICAgICAgICAgICAgICBpZiBhcmdzOgorICAgICAgICAgICAgICAgICAgICBlbnYuZXhwb3J0KGssIGV4cGFuZGVkKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGVudltrXSA9IGV4cGFuZGVkCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBhcmdzIGFuZCBhcmdzWzBdIGluICgnLicsICdzb3VyY2UnKToKKyAgICAgICAgICAgICAgICByZXMgPSBzZWxmLmRvdGNvbW1hbmQoZW52LCBhcmdzWzE6XSkKKyAgICAgICAgICAgIGVsaWYgYXJnczoKKyAgICAgICAgICAgICAgICBpZiBhcmdzWzBdIGluIHNlbGYuQ09NTUFORFM6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBzZWxmLkNPTU1BTkRTW2FyZ3NbMF1dCisgICAgICAgICAgICAgICAgZWxpZiBlbnYuaXNfZnVuY3Rpb24oYXJnc1swXSk6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBVdGlsaXR5KHNlbGYuX2V4ZWN1dGVfZnVuY3Rpb24sIGlzX3NwZWNpYWw9VHJ1ZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgJy8nIGluIGFyZ3NbMF0ucmVwbGFjZSgnXFwnLCAnLycpOgorICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gZW52LmZpbmRfaW5fcGF0aChhcmdzWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNtZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRPRE86IHRlc3QgZXJyb3IgY29kZSBvbiB1bmtub3duIGNvbW1hbmQgPT4gMTI3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQ29tbWFuZE5vdEZvdW5kKCdVbmtub3duIGNvbW1hbmQ6ICIlcyInICUgYXJnc1swXSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgSGFuZGxlIGNvbW1hbmRzIGxpa2UgJy9jeWdkcml2ZS9jL2Zvby5iYXQnCisgICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBjeWd3aW5fdG9fd2luZG93c19wYXRoKGFyZ3NbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoY21kKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBDb21tYW5kTm90Rm91bmQoJyVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JyAlIGFyZ3NbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICBzaGViYW5nID0gcmVzb2x2ZV9zaGViYW5nKGNtZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNoZWJhbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gc2hlYmFuZworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBbY21kXQorICAgICAgICAgICAgICAgICAgICBhcmdzWzA6MV0gPSBjbWQKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IFV0aWxpdHkoYnVpbHRpbi5ydW5fY29tbWFuZCkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAjIENvbW1hbmQgZXhlY3V0aW9uCisgICAgICAgICAgICAgICAgaWYgJ2RlYnVnLWNtZCcgaW4gc2VsZi5fZGVidWdmbGFnczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2coJ3JlZGlyZWN0aW9ucyAnICsgc3RyKHJlZGlycykgKyAnXG4nKQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXMgPSBjb21tYW5kLmZ1bmMoYXJnc1swXSwgYXJnc1sxOl0sIHNlbGYsIGVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJzLnN0ZGluKCksIHJlZGlycy5zdGRvdXQoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlycy5zdGRlcnIoKSwgc2VsZi5fZGVidWdmbGFncykKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgc2VsZi5fZW52Lmhhc19vcHQoJy14Jyk6CisgICAgICAgICAgICAgICAgIyBUcmFjZSBjb21tYW5kIGV4ZWN1dGlvbiBpbiBzaGVsbCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICMgQlVHOiB3b3VsZCBiZSBoYXJkIHRvIHJlcHJvZHVjZSBhIHJlYWwgc2hlbGwgYmVoYXZpb3VyIHNpbmNlCisgICAgICAgICAgICAgICAgIyB0aGUgQVNUIGlzIG5vdCBhbm5vdGF0ZWQgd2l0aCBzb3VyY2UgbGluZXMvdG9rZW5zLgorICAgICAgICAgICAgICAgIHNlbGYuX3JlZGlycy5zdGRvdXQoKS53cml0ZSgnICcuam9pbihhcmdzKSkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgZXhjZXB0IFJldHVyblNpZ25hbDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBTaGVsbEVycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBpc19zcGVjaWFsIG9yIGlzaW5zdGFuY2UoZSwgKEV4aXRTaWduYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoZWxsU3ludGF4RXJyb3IsIEV4cGFuc2lvbkVycm9yKSk6CisgICAgICAgICAgICAgICAgcmFpc2UgZQorICAgICAgICAgICAgc2VsZi5fcmVkaXJzLnN0ZGVycigpLndyaXRlKHN0cihlKSsnXG4nKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICByZXR1cm4gcmVzCisKKyAgICBkZWYgZXhwYW5kX3Rva2VuKHNlbGYsIHdvcmQpOgorICAgICAgICAiIiJFeHBhbmQgYSB3b3JkIGFzIHNwZWNpZmllZCBpbiBbMi42IFdvcmQgRXhwYW5zaW9uc10uIFJldHVybiB0aGUgbGlzdAorICAgICAgICBvZiBleHBhbmRlZCB3b3Jkcy4KKyAgICAgICAgIiIiCisgICAgICAgIHN0YXR1cywgd3RyZWVzID0gc2VsZi5fZXhwYW5kX3dvcmQod29yZCkKKyAgICAgICAgcmV0dXJuIG1hcChweXNobGV4LndvcmR0cmVlX2FzX3N0cmluZywgd3RyZWVzKQorICAgICAgICAKKyAgICBkZWYgZXhwYW5kX3ZhcmlhYmxlKHNlbGYsIHdvcmQpOgorICAgICAgICAiIiJSZXR1cm4gYSBzdGF0dXMgY29kZSAob3IgTm9uZSBpZiBubyBjb21tYW5kIGV4cGFuc2lvbiBvY2N1cnJlZCkKKyAgICAgICAgYW5kIGEgc2luZ2xlIHdvcmQuCisgICAgICAgICIiIgorICAgICAgICBzdGF0dXMsIHd0cmVlcyA9IHNlbGYuX2V4cGFuZF93b3JkKHdvcmQsIHBhdGhuYW1lPUZhbHNlLCBzcGxpdD1GYWxzZSkKKyAgICAgICAgd29yZHMgPSBtYXAocHlzaGxleC53b3JkdHJlZV9hc19zdHJpbmcsIHd0cmVlcykKKyAgICAgICAgYXNzZXJ0IGxlbih3b3Jkcyk9PTEKKyAgICAgICAgcmV0dXJuIHN0YXR1cywgd29yZHNbMF0KKyAgICAgICAgCisgICAgZGVmIGV4cGFuZF9oZXJlX2RvY3VtZW50KHNlbGYsIHdvcmQpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGV4cGFuZGVkIGRvY3VtZW50IGFzIGEgc2luZ2xlIHdvcmQuIFRoZSBoZXJlIGRvY3VtZW50IGlzIAorICAgICAgICBhc3N1bWVkIHRvIGJlIHVucXVvdGVkLgorICAgICAgICAiIiIKKyAgICAgICAgc3RhdHVzLCB3dHJlZXMgPSBzZWxmLl9leHBhbmRfd29yZCh3b3JkLCBwYXRobmFtZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdD1GYWxzZSwgaGVyZV9kb2N1bWVudD1UcnVlKQorICAgICAgICB3b3JkcyA9IG1hcChweXNobGV4LndvcmR0cmVlX2FzX3N0cmluZywgd3RyZWVzKQorICAgICAgICBhc3NlcnQgbGVuKHdvcmRzKT09MQorICAgICAgICByZXR1cm4gd29yZHNbMF0KKyAgICAgICAgCisgICAgZGVmIGV4cGFuZF9yZWRpcmVjdGlvbihzZWxmLCB3b3JkKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc2luZ2xlIHdvcmQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLmV4cGFuZF92YXJpYWJsZSh3b3JkKVsxXQorICAgICAgICAKKyAgICBkZWYgZ2V0X2VudihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2VudgorICAgICAgICAKKyAgICBkZWYgX2V4cGFuZF93b3JkKHNlbGYsIHRva2VuLCBwYXRobmFtZT1UcnVlLCBzcGxpdD1UcnVlLCBoZXJlX2RvY3VtZW50PUZhbHNlKToKKyAgICAgICAgd3RyZWUgPSBweXNobGV4Lm1ha2Vfd29yZHRyZWUodG9rZW5bMV0sIGhlcmVfZG9jdW1lbnQ9aGVyZV9kb2N1bWVudCkKKyAgICAgICAgCisgICAgICAgICMgVE9ETzogaW1wbGVtZW50IHRpbGRlIGV4cGFuc2lvbgorICAgICAgICBkZWYgZXhwYW5kKHd0cmVlKToKKyAgICAgICAgICAgICIiIlJldHVybiBhIHBzZXVkbyB3b3JkdHJlZTogdGhlIHRyZWUgb3IgaXRzIHN1YmVsZW1lbnRzIGNhbiBiZSBlbXB0eQorICAgICAgICAgICAgbGlzdHMgd2hlbiBubyB2YWx1ZSByZXN1bHQgZnJvbSB0aGUgZXhwYW5zaW9uLgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBzdGF0dXMgPSBOb25lCisgICAgICAgICAgICBmb3IgcGFydCBpbiB3dHJlZToKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwYXJ0LCBsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBwYXJ0WzBdaW4gKCInIiwgJ1xcJyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxpZiBwYXJ0WzBdIGluICgnYCcsICckKCcpOgorICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHJlc3VsdCA9IHNlbGYuX2V4cGFuZF9jb21tYW5kKHBhcnQpCisgICAgICAgICAgICAgICAgICAgIHBhcnRbOl0gPSByZXN1bHQKKyAgICAgICAgICAgICAgICBlbGlmIHBhcnRbMF0gaW4gKCckJywgJyR7Jyk6CisgICAgICAgICAgICAgICAgICAgIHBhcnRbOl0gPSBzZWxmLl9leHBhbmRfcGFyYW1ldGVyKHBhcnQsIHd0cmVlWzBdPT0nIicsIHNwbGl0KQorICAgICAgICAgICAgICAgIGVsaWYgcGFydFswXSBpbiAoJycsICciJyk6CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzdWx0ID0gZXhwYW5kKHBhcnQpCisgICAgICAgICAgICAgICAgICAgIHBhcnRbOl0gPSByZXN1bHQKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCclcyBleHBhbnNpb24gaXMgbm90IGltcGxlbWVudGVkJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgcGFydFswXSkKKyAgICAgICAgICAgICMgW10gaXMgcmV0dXJuZWQgd2hlbiBhbiBleHBhbnNpb24gcmVzdWx0IGluIG5vLWZpZWxkLAorICAgICAgICAgICAgIyBsaWtlIGFuIGVtcHR5ICRACisgICAgICAgICAgICB3dHJlZSA9IFtwIGZvciBwIGluIHd0cmVlIGlmIHAgIT0gW11dCisgICAgICAgICAgICBpZiBsZW4od3RyZWUpIDwgMzoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzLCBbXQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1cywgd3RyZWUKKyAgICAgICAgCisgICAgICAgIHN0YXR1cywgd3RyZWUgPSBleHBhbmQod3RyZWUpCisgICAgICAgIGlmIGxlbih3dHJlZSkgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXMsIHd0cmVlCisgICAgICAgIHd0cmVlID0gcHlzaGxleC5ub3JtYWxpemVfd29yZHRyZWUod3RyZWUpCisgICAgICAgIAorICAgICAgICBpZiBzcGxpdDoKKyAgICAgICAgICAgIHd0cmVlcyA9IHNlbGYuX3NwbGl0X2ZpZWxkcyh3dHJlZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHd0cmVlcyA9IFt3dHJlZV0KKyAgICAgICAgCisgICAgICAgIGlmIHBhdGhuYW1lOgorICAgICAgICAgICAgd3RyZWVzID0gbWFwcGVuZChzZWxmLl9leHBhbmRfcGF0aG5hbWUsIHd0cmVlcykKKyAgICAgICAgCisgICAgICAgIHd0cmVlcyA9IG1hcChzZWxmLl9yZW1vdmVfcXVvdGVzLCB3dHJlZXMpCisgICAgICAgIHJldHVybiBzdGF0dXMsIHd0cmVlcworICAgICAgICAKKyAgICBkZWYgX2V4cGFuZF9jb21tYW5kKHNlbGYsIHd0cmVlKToKKyAgICAgICAgIyBCVUc6IHRoZXJlIGlzIHNvbWV0aGluZyB0byBkbyB3aXRoIGJhY2tzbGFzaGVzIGFuZCBxdW90ZWQKKyAgICAgICAgIyBjaGFyYWN0ZXJzIGhlcmUKKyAgICAgICAgY29tbWFuZCA9IHB5c2hsZXgud29yZHRyZWVfYXNfc3RyaW5nKHd0cmVlWzE6LTFdKQorICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHNlbGYuc3Vic2hlbGxfb3V0cHV0KGNvbW1hbmQpCisgICAgICAgIHJldHVybiBzdGF0dXMsIFsnJywgb3V0cHV0LCAnJ10KKyAgICAgICAgCisgICAgZGVmIF9leHBhbmRfcGFyYW1ldGVyKHNlbGYsIHd0cmVlLCBxdW90ZWQ9RmFsc2UsIHNwbGl0PUZhbHNlKToKKyAgICAgICAgIiIiUmV0dXJuIGEgdmFsaWQgd3RyZWUgb3IgYW4gZW1wdHkgbGlzdCB3aGVuIG5vIHBhcmFtZXRlciByZXN1bHRzLiIiIgorICAgICAgICAjIEdldCB0aGUgcGFyYW1ldGVyIG5hbWUKKyAgICAgICAgIyBUT0RPOiBpbXBsZW1lbnQgd2VpcmQgZXhwYW5zaW9uIHJ1bGVzIHdpdGggJzonCisgICAgICAgIG5hbWUgPSBweXNobGV4LndvcmR0cmVlX2FzX3N0cmluZyh3dHJlZVsxOi0xXSkKKyAgICAgICAgaWYgbm90IGlzX25hbWUobmFtZSkgYW5kIG5vdCBpc19zcGVjaWFsX3BhcmFtKG5hbWUpOgorICAgICAgICAgICAgcmFpc2UgRXhwYW5zaW9uRXJyb3IoJ0JhZCBzdWJzdGl0dXRpb24gIiVzIicgJSBuYW1lKQorICAgICAgICAjIFRPRE86IGltcGxlbWVudCBzcGVjaWFsIHBhcmFtZXRlcnMKKyAgICAgICAgaWYgbmFtZSBpbiAoJ0AnLCAnKicpOgorICAgICAgICAgICAgYXJncyA9IHNlbGYuX2Vudi5nZXRfcG9zaXRpb25hbF9hcmdzKCkKKyAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICAgICAgaWYgbGVuKGFyZ3MpPDI6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnJywgJycuam9pbihhcmdzKSwgJyddCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBzZXAgPSBzZWxmLl9lbnYuZ2V0KCdJRlMnLCAnJylbOjFdCisgICAgICAgICAgICBpZiBzcGxpdCBhbmQgcXVvdGVkIGFuZCBuYW1lPT0nQCc6CisgICAgICAgICAgICAgICAgIyBJbnRyb2R1Y2UgYSBuZXcgdG9rZW4gdG8gdGVsbCB0aGUgY2FsbGVyIHRoYXQgdGhlc2UgcGFyYW1ldGVycworICAgICAgICAgICAgICAgICMgY2F1c2UgYSBzcGxpdCBhcyBzcGVjaWZpZWQgaW4gMi41LjIKKyAgICAgICAgICAgICAgICByZXR1cm4gWydAJ10gKyBhcmdzICsgWycnXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gWycnLCBzZXAuam9pbihhcmdzKSwgJyddICAgICAgICAgICAgICAgIAorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFsnJywgc2VsZi5fZW52LmdldChuYW1lLCAnJyksICcnXQorICAgICAgICAKKyAgICBkZWYgX3NwbGl0X2ZpZWxkcyhzZWxmLCB3dHJlZSk6CisgICAgICAgIGRlZiBpc19lbXB0eShzcGxpdCk6CisgICAgICAgICAgICByZXR1cm4gc3BsaXQ9PVsnJywgJycsICcnXQorICAgICAgICAgICAgCisgICAgICAgIGRlZiBzcGxpdF9wb3NpdGlvbmFsKHF1b3RlZCk6CisgICAgICAgICAgICAjIFJldHVybiBhIGxpc3Qgb2Ygd3RyZWUgc3BsaXQgYWNjb3JkaW5nIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBydWxlcy4KKyAgICAgICAgICAgICMgQWxsIHJlbWFpbmluZyAnQCcgZ3JvdXBzIGFyZSByZW1vdmVkLgorICAgICAgICAgICAgYXNzZXJ0IHF1b3RlZFswXT09JyInCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwbGl0cyA9IFtbXV0KKyAgICAgICAgICAgIGZvciBwYXJ0IGluIHF1b3RlZDoKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwYXJ0LCBsaXN0KSBvciBwYXJ0WzBdIT0nQCc6CisgICAgICAgICAgICAgICAgICAgIHNwbGl0c1stMV0uYXBwZW5kKHBhcnQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBFbXB0eSBvciBzaW5nbGUgYXJndW1lbnQgbGlzdCB3ZXJlIGRlYWx0IHdpdGggYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKHBhcnQpPjMKKyAgICAgICAgICAgICAgICAgICAgIyBGaXJzdCBhcmd1bWVudCBtdXN0IGpvaW4gd2l0aCB0aGUgYmVnaW5uaW5nIHBhcnQgb2YgdGhlIG9yaWdpbmFsIHdvcmQKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRzWy0xXS5hcHBlbmQocGFydFsxXSkKKyAgICAgICAgICAgICAgICAgICAgIyBDcmVhdGUgZG91YmxlLXF1b3RlcyBleHByZXNzaW9ucyBmb3IgZXZlcnkgYXJndW1lbnQgYWZ0ZXIgdGhlIGZpcnN0CisgICAgICAgICAgICAgICAgICAgIGZvciBhcmcgaW4gcGFydFsyOi0xXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0c1stMV0uYXBwZW5kKCciJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0cy5hcHBlbmQoWyciJywgYXJnXSkKKyAgICAgICAgICAgIHJldHVybiBzcGxpdHMKKyAgICAgICAgCisgICAgICAgICMgQXQgdGhpcyBwb2ludCwgYWxsIGV4cGFuc2lvbnMgYnV0IHBhdGhuYW1lcyBoYXZlIG9jY3VyZWQuIE9ubHkgcXVvdGVkCisgICAgICAgICMgYW5kIHBvc2l0aW9uYWwgc2VxdWVuY2VzIHJlbWFpbi4gVGh1cywgYWxsIGNhbmRpZGF0ZXMgZm9yIGZpZWxkIHNwbGl0dGluZyAKKyAgICAgICAgIyBhcmUgaW4gdGhlIHRyZWUgcm9vdCwgb3IgYXJlIHBvc2l0aW9uYWwgc3BsaXRzICgnQCcpIGFuZCBsaWUgaW4gcm9vdAorICAgICAgICAjIGNoaWxkcmVuLgorICAgICAgICBpZiBub3Qgd3RyZWUgb3Igd3RyZWVbMF0gbm90IGluICgnJywgJyInKToKKyAgICAgICAgICAgICMgVGhlIHdob2xlIHRva2VuIGlzIHF1b3RlZCBvciBlbXB0eSwgbm90aGluZyB0byBzcGxpdAorICAgICAgICAgICAgcmV0dXJuIFt3dHJlZV0KKyAgICAgICAgICAgIAorICAgICAgICBpZiB3dHJlZVswXT09JyInOgorICAgICAgICAgICAgd3RyZWUgPSBbJycsIHd0cmVlLCAnJ10KKyAgICAgICAgCisgICAgICAgIHJlc3VsdCA9IFtbJycsICcnXV0KKyAgICAgICAgZm9yIHBhcnQgaW4gd3RyZWVbMTotMV06CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcnQsIGxpc3QpOgorICAgICAgICAgICAgICAgIGlmIHBhcnRbMF09PSciJzoKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRzID0gc3BsaXRfcG9zaXRpb25hbChwYXJ0KQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc3BsaXRzKTw9MToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFstMV0gKz0gW3BhcnQsICcnXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBUZXJtaW5hdGUgdGhlIGN1cnJlbnQgc3BsaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFstMV0gKz0gW3NwbGl0c1swXSwgJyddCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3BsaXRzWzE6LTFdCisgICAgICAgICAgICAgICAgICAgICAgICAjIENyZWF0ZSBhIG5ldyBzcGxpdAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFtbJycsIHNwbGl0c1stMV0sICcnXV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRbLTFdICs9IFtwYXJ0LCAnJ10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3BsaXRzID0gc2VsZi5fZW52LnNwbGl0X2ZpZWxkcyhwYXJ0KQorICAgICAgICAgICAgICAgIGlmIGxlbihzcGxpdHMpPD0xOgorICAgICAgICAgICAgICAgICAgICAjIE5vIHNwbGl0CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFstMV1bLTFdICs9IHBhcnQKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIFRlcm1pbmF0ZSB0aGUgY3VycmVudCByZXN1bHRpbmcgcGFydCBhbmQgY3JlYXRlIGEgbmV3IG9uZQorICAgICAgICAgICAgICAgICAgICByZXN1bHRbLTFdWy0xXSArPSBzcGxpdHNbMF0KKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wy0xXS5hcHBlbmQoJycpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBbWycnLCByLCAnJ10gZm9yIHIgaW4gc3BsaXRzWzE6LTFdXQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gW1snJywgc3BsaXRzWy0xXV1dCisgICAgICAgIHJlc3VsdFstMV0uYXBwZW5kKCcnKQorICAgICAgICAKKyAgICAgICAgIyBMZWFkaW5nIGFuZCB0cmFpbGluZyBlbXB0eSBncm91cHMgY29tZSBmcm9tIGxlYWRpbmcvdHJhaWxpbmcgYmxhbmtzCisgICAgICAgIGlmIHJlc3VsdCBhbmQgaXNfZW1wdHkocmVzdWx0Wy0xXSk6CisgICAgICAgICAgICByZXN1bHRbLTE6XSA9IFtdCisgICAgICAgIGlmIHJlc3VsdCBhbmQgaXNfZW1wdHkocmVzdWx0WzBdKToKKyAgICAgICAgICAgIHJlc3VsdFs6MV0gPSBbXQorICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIAorICAgIGRlZiBfZXhwYW5kX3BhdGhuYW1lKHNlbGYsIHd0cmVlKToKKyAgICAgICAgIiIiU2VlIFsyLjYuNiBQYXRobmFtZSBFeHBhbnNpb25dLiIiIgorICAgICAgICBpZiBzZWxmLl9lbnYuaGFzX29wdCgnLWYnKToKKyAgICAgICAgICAgIHJldHVybiBbd3RyZWVdCisgICAgICAgIAorICAgICAgICAjIEFsbCBleHBhbnNpb25zIGhhdmUgYmVlbiBwZXJmb3JtZWQsIG9ubHkgcXVvdGVkIHNlcXVlbmNlcyBzaG91bGQgcmVtYWluCisgICAgICAgICMgaW4gdGhlIHRyZWUuIEdlbmVyYXRlIHRoZSBwYXR0ZXJuIGJ5IGZvbGRpbmcgdGhlIHRyZWUsIGVzY2FwaW5nIHNwZWNpYWwKKyAgICAgICAgIyBjaGFyYWN0ZXJzIHdoZW4gYXBwZWFyIHF1b3RlZAorICAgICAgICBzcGVjaWFsX2NoYXJzID0gJyo/W10nCisgICAgICAgIAorICAgICAgICBkZWYgbWFrZV9wYXR0ZXJuKHd0cmVlKToKKyAgICAgICAgICAgIHN1YnBhdHRlcm4gPSBbXQorICAgICAgICAgICAgZm9yIHBhcnQgaW4gd3RyZWVbMTotMV06CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJ0LCBsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgcGFydCA9IG1ha2VfcGF0dGVybihwYXJ0KQorICAgICAgICAgICAgICAgIGVsaWYgd3RyZWVbMF0hPScnOgorICAgICAgICAgICAgICAgICAgICBmb3IgYyBpbiBwYXJ0OgorICAgICAgICAgICAgICAgICAgICAgICAgIyBNZXRhLWNoYXJhY3RlcnMgY2Fubm90IGJlIHF1b3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYyBpbiBzcGVjaWFsX2NoYXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEdsb2JFcnJvcigpCisgICAgICAgICAgICAgICAgc3VicGF0dGVybi5hcHBlbmQocGFydCkKKyAgICAgICAgICAgIHJldHVybiAnJy5qb2luKHN1YnBhdHRlcm4pCisgICAgICAgICAgICAKKyAgICAgICAgZGVmIHB3ZF9nbG9iKHBhdHRlcm4pOgorICAgICAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgIG9zLmNoZGlyKHNlbGYuX2VudlsnUFdEJ10pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsb2IuZ2xvYihwYXR0ZXJuKSAKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuY2hkaXIoY3dkKSAgICAKKyAgICAgICAgICAgIAorICAgICAgICAjVE9ETzogY2hlY2sgd29ya2luZyBkaXJlY3RvcnkgaXNzdWVzIGhlcmUgd3J0IHJlbGF0aXZlIHBhdHRlcm5zCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdHRlcm4gPSBtYWtlX3BhdHRlcm4od3RyZWUpCisgICAgICAgICAgICBwYXRocyA9IHB3ZF9nbG9iKHBhdHRlcm4pCisgICAgICAgIGV4Y2VwdCBHbG9iRXJyb3I6CisgICAgICAgICAgICAjIEJVRzogTWV0YS1jaGFyYWN0ZXJzIHdlcmUgZm91bmQgaW4gcXVvdGVkIHNlcXVlbmNlcy4gVGhlIHNob3VsZCAKKyAgICAgICAgICAgICMgaGF2ZSBiZWVuIHVzZWQgbGl0ZXJhbGx5IGJ1dCB0aGlzIGlzIHVuc3VwcG9ydGVkIGluIGN1cnJlbnQgZ2xvYiBtb2R1bGUuCisgICAgICAgICAgICAjIEluc3RlYWQgd2UgY29uc2lkZXIgdGhlIHdob2xlIHRyZWUgbXVzdCBiZSB1c2VkIGxpdGVyYWxseSBhbmQKKyAgICAgICAgICAgICMgdGhlcmVmb3JlIHRoZXJlIGlzIG5vIHBvaW50IGluIGdsb2JiaW5nLiBUaGlzIGlzIHdyb25nIHdoZW4gbWV0YQorICAgICAgICAgICAgIyBjaGFyYWN0ZXJzIGFyZSBtaXhlZCB3aXRoIHF1b3RlZCBtZXRhIGluIHRoZSBzYW1lIHBhdHRlcm4gbGlrZToKKyAgICAgICAgICAgICMgPCBmb28qInB5KiIgPgorICAgICAgICAgICAgcGF0aHMgPSBbXQorICAgICAgICAgICAgCisgICAgICAgIGlmIG5vdCBwYXRoczoKKyAgICAgICAgICAgIHJldHVybiBbd3RyZWVdCisgICAgICAgIHJldHVybiBbWycnLCBwYXRoLCAnJ10gZm9yIHBhdGggaW4gcGF0aHNdCisgICAgICAgIAorICAgIGRlZiBfcmVtb3ZlX3F1b3RlcyhzZWxmLCB3dHJlZSk6CisgICAgICAgICIiIlNlZSBbMi42LjcgUXVvdGUgUmVtb3ZhbF0uIiIiCisgICAgICAgIAorICAgICAgICBkZWYgdW5xdW90ZSh3dHJlZSk6CisgICAgICAgICAgICB1bnF1b3RlZCA9IFtdCisgICAgICAgICAgICBmb3IgcGFydCBpbiB3dHJlZVsxOi0xXToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcnQsIGxpc3QpOgorICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gdW5xdW90ZShwYXJ0KQorICAgICAgICAgICAgICAgIHVucXVvdGVkLmFwcGVuZChwYXJ0KQorICAgICAgICAgICAgcmV0dXJuICcnLmpvaW4odW5xdW90ZWQpCisgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIFsnJywgdW5xdW90ZSh3dHJlZSksICcnXQorICAgICAgICAKKyAgICBkZWYgc3Vic2hlbGwoc2VsZiwgc2NyaXB0PU5vbmUsIGFzdD1Ob25lLCByZWRpcnM9Tm9uZSk6CisgICAgICAgICIiIkV4ZWN1dGUgdGhlIHNjcmlwdCBvciBBU1QgaW4gYSBzdWJzaGVsbCwgd2l0aCBpbmhlcml0ZWQgcmVkaXJlY3Rpb25zCisgICAgICAgIGlmIHJlZGlycyBpcyBub3QgTm9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHJlZGlyczoKKyAgICAgICAgICAgIHN1Yl9yZWRpcnMgPSByZWRpcnMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN1Yl9yZWRpcnMgPSByZWRpcnMuY2xvbmUoKQorICAgICAgICAKKyAgICAgICAgc3Vic2hlbGwgPSBOb25lICAgIAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJzaGVsbCA9IEludGVycHJldGVyKE5vbmUsIHNlbGYuX2RlYnVnZmxhZ3MsIHNlbGYuX2Vudi5jbG9uZShUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViX3JlZGlycywgb3B0cz1zZWxmLl9vcHRpb25zKQorICAgICAgICAgICAgcmV0dXJuIHN1YnNoZWxsLmV4ZWN1dGVfc2NyaXB0KHNjcmlwdCwgYXN0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgbm90IHJlZGlyczogc3ViX3JlZGlycy5jbG9zZSgpCisgICAgICAgICAgICBpZiBzdWJzaGVsbDogc3Vic2hlbGwuY2xvc2UoKQorICAgICAgICAKKyAgICBkZWYgc3Vic2hlbGxfb3V0cHV0KHNlbGYsIHNjcmlwdCk6CisgICAgICAgICIiIkV4ZWN1dGUgdGhlIHNjcmlwdCBpbiBhIHN1YnNoZWxsIGFuZCByZXR1cm4gdGhlIGNhcHR1cmVkIG91dHB1dC4iIiIgICAgICAgIAorICAgICAgICAjIENyZWF0ZSB0ZW1wb3JhcnkgZmlsZSB0byBjYXB0dXJlIHN1YnNoZWxsIG91dHB1dAorICAgICAgICB0bXBmZCwgdG1wcGF0aCA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0bXBmaWxlID0gb3MuZmRvcGVuKHRtcGZkLCAnd2InKQorICAgICAgICAgICAgc3Rkb3V0ID0gRmlsZVdyYXBwZXIoJ3cnLCB0bXBmaWxlKQorICAgICAgICAgICAgCisgICAgICAgICAgICByZWRpcnMgPSBSZWRpcmVjdGlvbnMoc2VsZi5fcmVkaXJzLnN0ZGluKCkuZHVwKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlZGlycy5zdGRlcnIoKS5kdXAoKSkgICAgICAgICAgICAKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLnN1YnNoZWxsKHNjcmlwdD1zY3JpcHQsIHJlZGlycz1yZWRpcnMpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJlZGlycy5jbG9zZSgpCisgICAgICAgICAgICAgICAgcmVkaXJzID0gTm9uZQorICAgICAgICAgICAgCisgICAgICAgICAgICAjIEV4dHJhY3Qgc3Vic2hlbGwgc3RhbmRhcmQgb3V0cHV0CisgICAgICAgICAgICB0bXBmaWxlID0gb3Blbih0bXBwYXRoLCAncmInKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG91dHB1dCA9IHRtcGZpbGUucmVhZCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1cywgb3V0cHV0LnJzdHJpcCgnXG4nKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICB0bXBmaWxlLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0bXBwYXRoKQorCisgICAgZGVmIF9hc3luY2xpc3Qoc2VsZiwgY21kKToKKyAgICAgICAgYXJncyA9IChzZWxmLl9lbnYuZ2V0X3ZhcmlhYmxlcygpLCBjbWQpCisgICAgICAgIGFyZyA9IGVuY29kZWFyZ3MoYXJncykKKyAgICAgICAgYXNzZXJ0IGxlbihhcmdzKSA8IDMwKjEwMjQKKyAgICAgICAgY21kID0gWydweXNoLmJhdCcsICctLWFzdCcsICctYycsIGFyZ10KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBjd2Q9c2VsZi5fZW52WydQV0QnXSkKKyAgICAgICAgc2VsZi5fY2hpbGRyZW5bcC5waWRdID0gcAorICAgICAgICBzZWxmLl9lbnZbJyEnXSA9IHAucGlkCisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgd2FpdChzZWxmLCBwaWRzPU5vbmUpOgorICAgICAgICBpZiBub3QgcGlkczoKKyAgICAgICAgICAgIHBpZHMgPSBzZWxmLl9jaGlsZHJlbi5rZXlzKCkKKworICAgICAgICBzdGF0dXMgPSAxMjcKKyAgICAgICAgZm9yIHBpZCBpbiBwaWRzOgorICAgICAgICAgICAgaWYgcGlkIG5vdCBpbiBzZWxmLl9jaGlsZHJlbjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcCA9IHNlbGYuX2NoaWxkcmVuLnBvcChwaWQpCisgICAgICAgICAgICBzdGF0dXMgPSBwLndhaXQoKQorCisgICAgICAgIHJldHVybiBzdGF0dXMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL2xzcHJvZi5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9sc3Byb2YucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE4MzFjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9sc3Byb2YucHkKQEAgLTAsMCArMSwxMTYgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IHN5cworZnJvbSBfbHNwcm9mIGltcG9ydCBQcm9maWxlciwgcHJvZmlsZXJfZW50cnkKKworX19hbGxfXyA9IFsncHJvZmlsZScsICdTdGF0cyddCisKK2RlZiBwcm9maWxlKGYsICphcmdzLCAqKmt3ZHMpOgorICAgICIiIlhYWCBkb2NzdHJpbmciIiIKKyAgICBwID0gUHJvZmlsZXIoKQorICAgIHAuZW5hYmxlKHN1YmNhbGxzPVRydWUsIGJ1aWx0aW5zPVRydWUpCisgICAgdHJ5OgorICAgICAgICBmKCphcmdzLCAqKmt3ZHMpCisgICAgZmluYWxseToKKyAgICAgICAgcC5kaXNhYmxlKCkKKyAgICByZXR1cm4gU3RhdHMocC5nZXRzdGF0cygpKQorCisKK2NsYXNzIFN0YXRzKG9iamVjdCk6CisgICAgIiIiWFhYIGRvY3N0cmluZyIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisKKyAgICBkZWYgc29ydChzZWxmLCBjcml0PSJpbmxpbmV0aW1lIik6CisgICAgICAgICIiIlhYWCBkb2NzdHJpbmciIiIKKyAgICAgICAgaWYgY3JpdCBub3QgaW4gcHJvZmlsZXJfZW50cnkuX19kaWN0X186CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW4ndCBzb3J0IGJ5ICVzIiAlIGNyaXQpCisgICAgICAgIHNlbGYuZGF0YS5zb3J0KGxhbWJkYSBiLCBhOiBjbXAoZ2V0YXR0cihhLCBjcml0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKGIsIGNyaXQpKSkKKyAgICAgICAgZm9yIGUgaW4gc2VsZi5kYXRhOgorICAgICAgICAgICAgaWYgZS5jYWxsczoKKyAgICAgICAgICAgICAgICBlLmNhbGxzLnNvcnQobGFtYmRhIGIsIGE6IGNtcChnZXRhdHRyKGEsIGNyaXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIoYiwgY3JpdCkpKQorCisgICAgZGVmIHBwcmludChzZWxmLCB0b3A9Tm9uZSwgZmlsZT1Ob25lLCBsaW1pdD1Ob25lLCBjbGltaXQ9Tm9uZSk6CisgICAgICAgICIiIlhYWCBkb2NzdHJpbmciIiIKKyAgICAgICAgaWYgZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgZmlsZSA9IHN5cy5zdGRvdXQKKyAgICAgICAgZCA9IHNlbGYuZGF0YQorICAgICAgICBpZiB0b3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkID0gZFs6dG9wXQorICAgICAgICBjb2xzID0gIiUgMTJzICUxMnMgJTExLjRmICUxMS40ZiAgICVzXG4iCisgICAgICAgIGhjb2xzID0gIiUgMTJzICUxMnMgJTEycyAlMTJzICVzXG4iCisgICAgICAgIGNvbHMyID0gIislMTJzICUxMnMgJTExLjRmICUxMS40ZiArICAlc1xuIgorICAgICAgICBmaWxlLndyaXRlKGhjb2xzICUgKCJDYWxsQ291bnQiLCAiUmVjdXJzaXZlIiwgIlRvdGFsKG1zKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklubGluZShtcykiLCAibW9kdWxlOmxpbmVubyhmdW5jdGlvbikiKSkKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGZvciBlIGluIGQ6CisgICAgICAgICAgICBmaWxlLndyaXRlKGNvbHMgJSAoZS5jYWxsY291bnQsIGUucmVjY2FsbGNvdW50LCBlLnRvdGFsdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmlubGluZXRpbWUsIGxhYmVsKGUuY29kZSkpKQorICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICAgICAgaWYgbGltaXQgaXMgbm90IE5vbmUgYW5kIGNvdW50ID09IGxpbWl0OgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgY2NvdW50ID0gMAorICAgICAgICAgICAgaWYgZS5jYWxsczoKKyAgICAgICAgICAgICAgICBmb3Igc2UgaW4gZS5jYWxsczoKKyAgICAgICAgICAgICAgICAgICAgZmlsZS53cml0ZShjb2xzICUgKCIrJXMiICUgc2UuY2FsbGNvdW50LCBzZS5yZWNjYWxsY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZS50b3RhbHRpbWUsIHNlLmlubGluZXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKyVzIiAlIGxhYmVsKHNlLmNvZGUpKSkKKyAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICAgICAgICAgICAgICBjY291bnQgKz0gMQorICAgICAgICAgICAgICAgICAgICBpZiBsaW1pdCBpcyBub3QgTm9uZSBhbmQgY291bnQgPT0gbGltaXQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgaWYgY2xpbWl0IGlzIG5vdCBOb25lIGFuZCBjY291bnQgPT0gY2xpbWl0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRlZiBmcmVlemUoc2VsZik6CisgICAgICAgICIiIlJlcGxhY2UgYWxsIHJlZmVyZW5jZXMgdG8gY29kZSBvYmplY3RzIHdpdGggc3RyaW5nCisgICAgICAgIGRlc2NyaXB0aW9uczsgdGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBwaWNrbGUgdGhlIGluc3RhbmNlLiIiIgorCisgICAgICAgICMgdGhpcyBjb2RlIGlzIHByb2JhYmx5IHJhdGhlciBpY2tpZXIgdGhhbiBpdCBuZWVkcyB0byBiZSEKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYuZGF0YSkpOgorICAgICAgICAgICAgZSA9IHNlbGYuZGF0YVtpXQorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZS5jb2RlLCBzdHIpOgorICAgICAgICAgICAgICAgIHNlbGYuZGF0YVtpXSA9IHR5cGUoZSkoKGxhYmVsKGUuY29kZSksKSArIGVbMTpdKQorICAgICAgICAgICAgaWYgZS5jYWxsczoKKyAgICAgICAgICAgICAgICBmb3IgaiBpbiByYW5nZShsZW4oZS5jYWxscykpOgorICAgICAgICAgICAgICAgICAgICBzZSA9IGUuY2FsbHNbal0KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2UuY29kZSwgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGUuY2FsbHNbal0gPSB0eXBlKHNlKSgobGFiZWwoc2UuY29kZSksKSArIHNlWzE6XSkKKworX2ZuMm1vZCA9IHt9CisKK2RlZiBsYWJlbChjb2RlKToKKyAgICBpZiBpc2luc3RhbmNlKGNvZGUsIHN0cik6CisgICAgICAgIHJldHVybiBjb2RlCisgICAgdHJ5OgorICAgICAgICBtbmFtZSA9IF9mbjJtb2RbY29kZS5jb19maWxlbmFtZV0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIGZvciBrLCB2IGluIHN5cy5tb2R1bGVzLml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHYsICdfX2ZpbGVfXycpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2Ll9fZmlsZV9fLCBzdHIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiB2Ll9fZmlsZV9fLnN0YXJ0c3dpdGgoY29kZS5jb19maWxlbmFtZSk6CisgICAgICAgICAgICAgICAgbW5hbWUgPSBfZm4ybW9kW2NvZGUuY29fZmlsZW5hbWVdID0gaworICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtbmFtZSA9IF9mbjJtb2RbY29kZS5jb19maWxlbmFtZV0gPSAnPCVzPiclY29kZS5jb19maWxlbmFtZQorCisgICAgcmV0dXJuICclczolZCglcyknICUgKG1uYW1lLCBjb2RlLmNvX2ZpcnN0bGluZW5vLCBjb2RlLmNvX25hbWUpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgb3MKKyAgICBzeXMuYXJndiA9IHN5cy5hcmd2WzE6XQorICAgIGlmIG5vdCBzeXMuYXJndjoKKyAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgInVzYWdlOiBsc3Byb2YucHkgPHNjcmlwdD4gPGFyZ3VtZW50cy4uLj4iCisgICAgICAgIHN5cy5leGl0KDIpCisgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pKSkKKyAgICBzdGF0cyA9IHByb2ZpbGUoZXhlY2ZpbGUsIHN5cy5hcmd2WzBdLCBnbG9iYWxzKCksIGxvY2FscygpKQorICAgIHN0YXRzLnNvcnQoKQorICAgIHN0YXRzLnBwcmludCgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvcHlzaC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9weXNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZTYxNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvcHlzaC5weQpAQCAtMCwwICsxLDE2NyBAQAorIyBweXNoLnB5IC0gY29tbWFuZCBwcm9jZXNzaW5nIGZvciBweXNoLgorIworIyBDb3B5cmlnaHQgMjAwNyBQYXRyaWNrIE1lemFyZAorIworIyBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCisjIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2ltcG9ydCBpbnRlcnAKKworU0hfT1BUID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHByb2c9J3B5c2gnLCB1c2FnZT0iJXByb2cgW09QVElPTlNdIiwgdmVyc2lvbj0nMC4xJykKK1NIX09QVC5hZGRfb3B0aW9uKCctYycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2NvbW1hbmRfc3RyaW5nJywgZGVmYXVsdD1Ob25lLCAKKyAgICBoZWxwPSdBIHN0cmluZyB0aGF0IHNoYWxsIGJlIGludGVycHJldGVkIGJ5IHRoZSBzaGVsbCBhcyBvbmUgb3IgbW9yZSBjb21tYW5kcycpCitTSF9PUFQuYWRkX29wdGlvbignLS1yZWRpcmVjdC10bycsIGRlc3Q9J3JlZGlyZWN0X3RvJywgZGVmYXVsdD1Ob25lLCAKKyAgICBoZWxwPSdSZWRpcmVjdCBzY3JpcHQgY29tbWFuZHMgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gdGhlIHNwZWNpZmllZCBmaWxlJykKKyMgU2VlIHV0aWxpdHlfY29tbWFuZCBpbiBidWlsdGluLnB5IGFib3V0IHRoZSByZWFzb24gZm9yIHRoaXMgZmxhZy4KK1NIX09QVC5hZGRfb3B0aW9uKCctLXJlZGlyZWN0ZWQnLCBkZXN0PSdyZWRpcmVjdGVkJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwgCisgICAgaGVscD0nVGVsbCB0aGUgaW50ZXJwcmV0ZXIgdGhhdCBzdGRvdXQgYW5kIHN0ZGVyciBhcmUgYWN0dWFsbHkgdGhlIHNhbWUgb2JqZWN0cywgd2hpY2ggaXMgcmVhbGx5IHN0ZG91dCcpCitTSF9PUFQuYWRkX29wdGlvbignLS1kZWJ1Zy1wYXJzaW5nJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0nZGVidWdfcGFyc2luZycsIGRlZmF1bHQ9RmFsc2UsIAorICAgIGhlbHA9J1RyYWNlIFBMWSBleGVjdXRpb24nKQorU0hfT1BULmFkZF9vcHRpb24oJy0tZGVidWctdHJlZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2RlYnVnX3RyZWUnLCBkZWZhdWx0PUZhbHNlLCAKKyAgICBoZWxwPSdEaXNwbGF5IHRoZSBnZW5lcmF0ZWQgc3ludGF4IHRyZWUuJykKK1NIX09QVC5hZGRfb3B0aW9uKCctLWRlYnVnLWNtZCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2RlYnVnX2NtZCcsIGRlZmF1bHQ9RmFsc2UsIAorICAgIGhlbHA9J1RyYWNlIGNvbW1hbmQgZXhlY3V0aW9uIGJlZm9yZSBwYXJhbWV0ZXJzIGV4cGFuc2lvbiBhbmQgZXhpdCBzdGF0dXMuJykKK1NIX09QVC5hZGRfb3B0aW9uKCctLWRlYnVnLXV0aWxpdHknLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdkZWJ1Z191dGlsaXR5JywgZGVmYXVsdD1GYWxzZSwgCisgICAgaGVscD0nVHJhY2UgdXRpbGl0eSBjYWxscywgYWZ0ZXIgcGFyYW1ldGVycyBleHBhbnNpb25zJykKK1NIX09QVC5hZGRfb3B0aW9uKCctLWFzdCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2FzdCcsIGRlZmF1bHQ9RmFsc2UsCisgICAgaGVscD0nRW5jb2RlZCBjb21tYW5kcyB0byBleGVjdXRlIGluIGEgc3VicHJvY2VzcycpCitTSF9PUFQuYWRkX29wdGlvbignLS1wcm9maWxlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICBoZWxwPSdQcm9maWxlIHB5c2ggcnVuJykKKyAgICAKKyAgICAKK2RlZiBzcGxpdF9hcmdzKGFyZ3MpOgorICAgICMgU2VwYXJhdGUgc2hlbGwgYXJndW1lbnRzIGZyb20gY29tbWFuZCBvbmVzCisgICAgIyBKdXN0IHN0b3AgYXQgdGhlIGZpcnN0IGFyZ3VtZW50IG5vdCBzdGFydGluZyB3aXRoIGEgZGFzaC4gSSBrbm93LCB0aGlzIGlzIGNvbXBsZXRlbHkgYnJva2VuLAorICAgICMgaXQgaWdub3JlcyBmaWxlcyBzdGFydGluZyB3aXRoIGEgZGFzaCBvciBtYXkgdGFrZSBvcHRpb24gdmFsdWVzIGZvciBjb21tYW5kIGZpbGUuIFRoaXMgaXMgbm90CisgICAgIyBzdXBwb3NlZCB0byBoYXBwZW4gZm9yIG5vdworICAgIGNvbW1hbmRfaW5kZXggPSBsZW4oYXJncykKKyAgICBmb3IgaSxhcmcgaW4gZW51bWVyYXRlKGFyZ3MpOgorICAgICAgICBpZiBub3QgYXJnLnN0YXJ0c3dpdGgoJy0nKToKKyAgICAgICAgICAgIGNvbW1hbmRfaW5kZXggPSBpCisgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgCisgICAgcmV0dXJuIGFyZ3NbOmNvbW1hbmRfaW5kZXhdLCBhcmdzW2NvbW1hbmRfaW5kZXg6XQorCisKK2RlZiBmaXhlbnYoZW52KToKKyAgICBwYXRoID0gZW52LmdldCgnUEFUSCcpCisgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgcGFydHMgPSBwYXRoLnNwbGl0KG9zLnBhdGhzZXApCisgICAgICAgICMgUmVtb3ZlIFdpbmRvd3MgdXRpbGl0aWVzIGZyb20gUEFUSCwgdGhleSBhcmUgdXNlbGVzcyBhdCBiZXN0IGFuZAorICAgICAgICAjIHNvbWUgb2YgdGhlbSAoZmluZCkgbWF5IGJlIGNvbmZ1c2VkIHdpdGggb3RoZXIgdXRpbGl0aWVzLgorICAgICAgICBwYXJ0cyA9IFtwIGZvciBwIGluIHBhcnRzIGlmICdzeXN0ZW0zMicgbm90IGluIHAubG93ZXIoKV0KKyAgICAgICAgZW52WydQQVRIJ10gPSBvcy5wYXRoc2VwLmpvaW4ocGFydHMpCisgICAgaWYgZW52LmdldCgnSE9NRScpIGlzIE5vbmU6CisgICAgICAgICMgU2V2ZXJhbCB1dGlsaXRpZXMsIGluY2x1ZGluZyBjdnNwcywgY2Fubm90IHdvcmsgd2l0aG91dAorICAgICAgICAjIGEgZGVmaW5lZCBIT01FIGRpcmVjdG9yeS4KKyAgICAgICAgZW52WydIT01FJ10gPSBvcy5wYXRoLmV4cGFuZHVzZXIoJ34nKQorICAgIHJldHVybiBlbnYKKworZGVmIF9zaChjd2QsIHNoYXJncywgY21kYXJncywgb3B0aW9ucywgZGVidWdmbGFncz1Ob25lLCBlbnY9Tm9uZSk6CisgICAgaWYgb3MuZW52aXJvbi5nZXQoJ1BZU0hfVEVYVCcpICE9ICcxJzoKKyAgICAgICAgaW1wb3J0IG1zdmNydAorICAgICAgICBmb3IgZnAgaW4gKHN5cy5zdGRpbiwgc3lzLnN0ZG91dCwgc3lzLnN0ZGVycik6CisgICAgICAgICAgICBtc3ZjcnQuc2V0bW9kZShmcC5maWxlbm8oKSwgb3MuT19CSU5BUlkpCisKKyAgICBoZ2JpbiA9IG9zLmVudmlyb24uZ2V0KCdQWVNIX0hHVEVYVCcpICE9ICcxJworICAgIAorICAgIGlmIGRlYnVnZmxhZ3MgaXMgTm9uZToKKyAgICAgICAgZGVidWdmbGFncyA9IFtdCisgICAgICAgIGlmIG9wdGlvbnMuZGVidWdfcGFyc2luZzogICAgZGVidWdmbGFncy5hcHBlbmQoJ2RlYnVnLXBhcnNpbmcnKQorICAgICAgICBpZiBvcHRpb25zLmRlYnVnX3V0aWxpdHk6ICAgIGRlYnVnZmxhZ3MuYXBwZW5kKCdkZWJ1Zy11dGlsaXR5JykKKyAgICAgICAgaWYgb3B0aW9ucy5kZWJ1Z19jbWQ6ICAgICAgICBkZWJ1Z2ZsYWdzLmFwcGVuZCgnZGVidWctY21kJykKKyAgICAgICAgaWYgb3B0aW9ucy5kZWJ1Z190cmVlOiAgICAgICBkZWJ1Z2ZsYWdzLmFwcGVuZCgnZGVidWctdHJlZScpCisgICAgCisgICAgaWYgZW52IGlzIE5vbmU6CisgICAgICAgIGVudiA9IGZpeGVudihkaWN0KG9zLmVudmlyb24pKQorICAgIGlmIGN3ZCBpcyBOb25lOgorICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQorCisgICAgaWYgbm90IGNtZGFyZ3M6CisgICAgICAgICMgTm90aGluZyB0byBkbworICAgICAgICByZXR1cm4gMAorCisgICAgYXN0ID0gTm9uZQorICAgIGNvbW1hbmRfZmlsZSA9IE5vbmUKKyAgICBpZiBvcHRpb25zLmNvbW1hbmRfc3RyaW5nOgorICAgICAgICBpbnB1dCA9IGNtZGFyZ3NbMF0KKyAgICAgICAgaWYgbm90IG9wdGlvbnMuYXN0OgorICAgICAgICAgICAgaW5wdXQgKz0gJ1xuJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJncywgaW5wdXQgPSBpbnRlcnAuZGVjb2RlYXJncyhpbnB1dCksIE5vbmUKKyAgICAgICAgICAgIGVudiwgYXN0ID0gYXJncworICAgICAgICAgICAgY3dkID0gZW52LmdldCgnUFdEJywgY3dkKQorICAgIGVsc2U6CisgICAgICAgIGNvbW1hbmRfZmlsZSA9IGNtZGFyZ3NbMF0KKyAgICAgICAgYXJndW1lbnRzID0gY21kYXJnc1sxOl0KKworICAgICAgICBwcmVmaXggPSBpbnRlcnAucmVzb2x2ZV9zaGViYW5nKGNvbW1hbmRfZmlsZSwgaWdub3Jlc2hlbGw9VHJ1ZSkKKyAgICAgICAgaWYgcHJlZml4OgorICAgICAgICAgICAgaW5wdXQgPSAnICcuam9pbihwcmVmaXggKyBbY29tbWFuZF9maWxlXSArIGFyZ3VtZW50cykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgUmVhZCBjb21tYW5kcyBmcm9tIGZpbGUKKyAgICAgICAgICAgIGYgPSBmaWxlKGNvbW1hbmRfZmlsZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIFRyYWlsaW5nIG5ld2xpbmUgdG8gaGVscCB0aGUgcGFyc2VyCisgICAgICAgICAgICAgICAgaW5wdXQgPSBmLnJlYWQoKSArICdcbicKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgCisgICAgcmVkaXJlY3QgPSBOb25lCisgICAgdHJ5OgorICAgICAgICBpZiBvcHRpb25zLnJlZGlyZWN0ZWQ6CisgICAgICAgICAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgICAgICBzdGRlcnIgPSBzdGRvdXQKKyAgICAgICAgZWxpZiBvcHRpb25zLnJlZGlyZWN0X3RvOgorICAgICAgICAgICAgcmVkaXJlY3QgPSBvcGVuKG9wdGlvbnMucmVkaXJlY3RfdG8sICd3YicpCisgICAgICAgICAgICBzdGRvdXQgPSByZWRpcmVjdAorICAgICAgICAgICAgc3RkZXJyID0gcmVkaXJlY3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgICAgIHN0ZGVyciA9IHN5cy5zdGRlcnIKKyAgICAgICAgICAgIAorICAgICAgICAjIFRPRE86IHNldCBhcmd1bWVudHMgdG8gZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICAgIG9wdHMgPSBpbnRlcnAuT3B0aW9ucygpCisgICAgICAgIG9wdHMuaGdiaW5hcnkgPSBoZ2JpbgorICAgICAgICBpcCA9IGludGVycC5JbnRlcnByZXRlcihjd2QsIGRlYnVnZmxhZ3MsIHN0ZG91dD1zdGRvdXQsIHN0ZGVycj1zdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM9b3B0cykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBFeHBvcnQgZ2l2ZW4gZW52aXJvbm1lbnQgaW4gc2hlbGwgb2JqZWN0CisgICAgICAgICAgICBmb3Igayx2IGluIGVudi5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpcC5nZXRfZW52KCkuZXhwb3J0KGssdikKKyAgICAgICAgICAgIHJldHVybiBpcC5leGVjdXRlX3NjcmlwdChpbnB1dCwgYXN0LCBzY3JpcHRwYXRoPWNvbW1hbmRfZmlsZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlwLmNsb3NlKCkKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiByZWRpcmVjdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlZGlyZWN0LmNsb3NlKCkKKworZGVmIHNoKGN3ZD1Ob25lLCBhcmdzPU5vbmUsIGRlYnVnZmxhZ3M9Tm9uZSwgZW52PU5vbmUpOgorICAgIGlmIGFyZ3MgaXMgTm9uZToKKyAgICAgICAgYXJncyA9IHN5cy5hcmd2WzE6XQorICAgIHNoYXJncywgY21kYXJncyA9IHNwbGl0X2FyZ3MoYXJncykKKyAgICBvcHRpb25zLCBzaGFyZ3MgPSBTSF9PUFQucGFyc2VfYXJncyhzaGFyZ3MpCisKKyAgICBpZiBvcHRpb25zLnByb2ZpbGU6CisgICAgICAgIGltcG9ydCBsc3Byb2YKKyAgICAgICAgcCA9IGxzcHJvZi5Qcm9maWxlcigpCisgICAgICAgIHAuZW5hYmxlKHN1YmNhbGxzPVRydWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBfc2goY3dkLCBzaGFyZ3MsIGNtZGFyZ3MsIG9wdGlvbnMsIGRlYnVnZmxhZ3MsIGVudikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHAuZGlzYWJsZSgpCisgICAgICAgICAgICBzdGF0cyA9IGxzcHJvZi5TdGF0cyhwLmdldHN0YXRzKCkpCisgICAgICAgICAgICBzdGF0cy5zb3J0KCkKKyAgICAgICAgICAgIHN0YXRzLnBwcmludCh0b3A9MTAsIGZpbGU9c3lzLnN0ZGVyciwgY2xpbWl0PTUpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIF9zaChjd2QsIHNoYXJncywgY21kYXJncywgb3B0aW9ucywgZGVidWdmbGFncywgZW52KQorICAgICAgICAgICAgCitkZWYgbWFpbigpOgorICAgIHN5cy5leGl0KHNoKCkpCisKK2lmIF9fbmFtZV9fPT0nX19tYWluX18nOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL3B5c2hsZXgucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvcHlzaGxleC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzAxMjM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL3B5c2hsZXgucHkKQEAgLTAsMCArMSw4ODggQEAKKyMgcHlzaGxleC5weSAtIFBMWSBjb21wYXRpYmxlIGxleGVyIGZvciBweXNoLgorIworIyBDb3B5cmlnaHQgMjAwNyBQYXRyaWNrIE1lemFyZAorIworIyBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCisjIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisKKyMgVE9ETzoKKyMgLSByZXZpZXcgYWxsICJjaGFyIGluICdhYmMnIiBzbmlwcGV0czogdGhlIGVtcHR5IHN0cmluZyBjYW4gYmUgbWF0Y2hlZAorIyAtIHRlc3QgbGluZSBjb250aW51YXRpb25zIHdpdGhpbiBxdW90ZWQvZXhwYW5zaW9uIHN0cmluZ3MKKyMgLSBlb2YgaXMgYnVnZ3kgd3J0IHN1YmxleGVycworIyAtIHRoZSBsZXhlciBjYW5ub3QgcmVhbGx5IHdvcmsgaW4gcHVsbCBtb2RlIGFzIGl0IHdvdWxkIGJlIHJlcXVpcmVkIHRvIHJ1bgorIyBQTFkgaW4gcHVsbCBtb2RlLiBJdCB3YXMgZGVzaWduZWQgdG8gd29yayBpbmNyZW1lbnRhbGx5IGFuZCBpdCB3b3VsZCBub3QgYmUKKyMgdGhhdCBoYXJkIHRvIGVuYWJsZSBwdWxsIG1vZGUuCitpbXBvcnQgcmUKK3RyeToKKyAgICBzID0gc2V0KCkKKyAgICBkZWwgcworZXhjZXB0IE5hbWVFcnJvcjoKKyAgICBmcm9tIFNldCBpbXBvcnQgU2V0IGFzIHNldAorCitmcm9tIHBseSBpbXBvcnQgbGV4Citmcm9tIHNoZXJyb3JzIGltcG9ydCAqCisKK2NsYXNzIE5lZWRNb3JlKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitkZWYgaXNfYmxhbmsoYyk6CisgICAgcmV0dXJuIGMgaW4gKCcgJywgJ1x0JykKKyAgICAKK19SRV9ESUdJVFMgPSByZS5jb21waWxlKHInXlxkKyQnKQorCitkZWYgYXJlX2RpZ2l0cyhzKToKKyAgICByZXR1cm4gX1JFX0RJR0lUUy5zZWFyY2gocykgaXMgbm90IE5vbmUKKworX09QRVJBVE9SUyA9IGRpY3QoWworICAgICgnJiYnLCAnQU5EX0lGJyksCisgICAgKCd8fCcsICdPUl9JRicpLAorICAgICgnOzsnLCAnRFNFTUknKSwKKyAgICAoJzw8JywgJ0RMRVNTJyksCisgICAgKCc+PicsICdER1JFQVQnKSwKKyAgICAoJzwmJywgJ0xFU1NBTkQnKSwKKyAgICAoJz4mJywgJ0dSRUFUQU5EJyksCisgICAgKCc8PicsICdMRVNTR1JFQVQnKSwKKyAgICAoJzw8LScsICdETEVTU0RBU0gnKSwKKyAgICAoJz58JywgJ0NMT0JCRVInKSwKKyAgICAoJyYnLCAnQU1QJyksCisgICAgKCc7JywgJ0NPTU1BJyksCisgICAgKCc8JywgJ0xFU1MnKSwKKyAgICAoJz4nLCAnR1JFQVRFUicpLAorICAgICgnKCcsICdMUEFSRU5TJyksCisgICAgKCcpJywgJ1JQQVJFTlMnKSwKK10pCisKKyNNYWtlIGEgZnVuY3Rpb24gdG8gc2lsZW5jZSBweWNoZWNrZXIgIkxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgZ2xvYmFsIgorZGVmIG1ha2VfcGFydGlhbF9vcHMoKToKKyAgICBwYXJ0aWFscyA9IHt9CisgICAgZm9yIGsgaW4gX09QRVJBVE9SUzoKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKGspKzEpOgorICAgICAgICAgICAgcGFydGlhbHNba1s6aV1dID0gTm9uZQorICAgIHJldHVybiBwYXJ0aWFscyAgCisKK19QQVJUSUFMX09QRVJBVE9SUyA9IG1ha2VfcGFydGlhbF9vcHMoKSAgICAKKyAgICAgICAgCitkZWYgaXNfcGFydGlhbF9vcChzKToKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBzIG1hdGNoZXMgYSBub24tZW1wdHkgc3VicGFydCBvZiBhbiBvcGVyYXRvciBzdGFydGluZworICAgIGF0IGl0cyBmaXJzdCBjaGFyYWN0ZXIuCisgICAgIiIiCisgICAgcmV0dXJuIHMgaW4gX1BBUlRJQUxfT1BFUkFUT1JTCisgICAgCitkZWYgaXNfb3Aocyk6CisgICAgIiIiSWYgcyBtYXRjaGVzIGFuIG9wZXJhdG9yLCByZXR1cm5zIHRoZSBvcGVyYXRvciBpZGVudGlmaWVyLiBSZXR1cm4gTm9uZQorICAgIG90aGVyd2lzZS4KKyAgICAiIiIKKyAgICByZXR1cm4gX09QRVJBVE9SUy5nZXQocykKKworX1JFU0VSVkVEUyA9IGRpY3QoWworICAgICgnaWYnLCAnSWYnKSwKKyAgICAoJ3RoZW4nLCAnVGhlbicpLAorICAgICgnZWxzZScsICdFbHNlJyksCisgICAgKCdlbGlmJywgJ0VsaWYnKSwKKyAgICAoJ2ZpJywgJ0ZpJyksCisgICAgKCdkbycsICdEbycpLAorICAgICgnZG9uZScsICdEb25lJyksCisgICAgKCdjYXNlJywgJ0Nhc2UnKSwKKyAgICAoJ2VzYWMnLCAnRXNhYycpLAorICAgICgnd2hpbGUnLCAnV2hpbGUnKSwKKyAgICAoJ3VudGlsJywgJ1VudGlsJyksCisgICAgKCdmb3InLCAnRm9yJyksCisgICAgKCd7JywgJ0xicmFjZScpLAorICAgICgnfScsICdSYnJhY2UnKSwKKyAgICAoJyEnLCAnQmFuZycpLAorICAgICgnaW4nLCAnSW4nKSwKKyAgICAoJ3wnLCAnUElQRScpLAorXSkKKyAgICAKK2RlZiBnZXRfcmVzZXJ2ZWQocyk6CisgICAgcmV0dXJuIF9SRVNFUlZFRFMuZ2V0KHMpCisgICAgCitfUkVfTkFNRSA9IHJlLmNvbXBpbGUocideWzAtOWEtekEtWl9dKyQnKQorCitkZWYgaXNfbmFtZShzKToKKyAgICByZXR1cm4gX1JFX05BTUUuc2VhcmNoKHMpIGlzIG5vdCBOb25lCisKK2RlZiBmaW5kX2NoYXJzKHNlcSwgY2hhcnMpOgorICAgIGZvciBpLHYgaW4gZW51bWVyYXRlKHNlcSk6CisgICAgICAgIGlmIHYgaW4gY2hhcnM6CisgICAgICAgICAgICByZXR1cm4gaSx2CisgICAgcmV0dXJuIC0xLCBOb25lCisKK2NsYXNzIFdvcmRMZXhlcjoKKyAgICAiIiJXb3JkTGV4ZXIgcGFyc2UgcXVvdGVkIG9yIGV4cGFuc2lvbiBleHByZXNzaW9ucyBhbmQgcmV0dXJuIGFuIGV4cHJlc3Npb24KKyAgICB0cmVlLiBUaGUgaW5wdXQgc3RyaW5nIGNhbiBiZSBhbnkgd2VsbCBmb3JtZWQgc2VxdWVuY2UgYmVnaW5uaW5nIHdpdGggcXVvdGluZworICAgIG9yIGV4cGFuc2lvbiBjaGFyYWN0ZXIuIEVtYmVkZGVkIGV4cHJlc3Npb25zIGFyZSBoYW5kbGVkIHJlY3Vyc2l2ZWx5LiBUaGUKKyAgICByZXN1bHRpbmcgdHJlZSBpcyBtYWRlIG9mIGxpc3RzIGFuZCBzdHJpbmdzLiBMaXN0cyByZXByZXNlbnQgcXVvdGVkIG9yCisgICAgZXhwYW5zaW9uIGV4cHJlc3Npb25zLiBFYWNoIGxpc3QgZmlyc3QgZWxlbWVudCBpcyB0aGUgb3BlbmluZyBzZXBhcmF0b3IsCisgICAgdGhlIGxhc3Qgb25lIHRoZSBjbG9zaW5nIHNlcGFyYXRvci4gSW4tYmV0d2VlbiBjYW4gYmUgYW55IG51bWJlciBvZiBzdHJpbmdzCisgICAgb3IgbGlzdHMgZm9yIHN1Yi1leHByZXNzaW9ucy4gTm9uIHF1b3RlZC9leHBhbnNpb24gZXhwcmVzc2lvbiBjYW4gd3JpdHRlbiBhcworICAgIHN0cmluZ3Mgb3IgYXMgbGlzdHMgd2l0aCBlbXB0eSBzdHJpbmdzIGFzIHN0YXJ0aW5nIGFuZCBlbmRpbmcgZGVsaW1pdGVycy4KKyAgICAiIiIKKworICAgIE5BTUVfQ0hBUlNFVCA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OV8nCisgICAgTkFNRV9DSEFSU0VUID0gZGljdCh6aXAoTkFNRV9DSEFSU0VULCBOQU1FX0NIQVJTRVQpKQorICAgIAorICAgIFNQRUNJQUxfQ0hBUlNFVCA9ICdAKiM/LSQhMCcKKyAgICAKKyAgICAjQ2hhcmFjdGVycyB3aGljaCBjYW4gYmUgZXNjYXBlZCBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IGRlbGltaXRlcnMKKyAgICBFU0NBUEFCTEUgPSB7CisgICAgICAgICdgJzogc2V0KFsnJCcsICdcXCcsICdgJ10pLAorICAgICAgICAnIic6IHNldChbJyQnLCAnXFwnLCAnYCcsICciJ10pLAorICAgICAgICAiJyI6IHNldCgpLAorICAgIH0KKyAgICAgICAgCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhlcmVkb2MgPSBGYWxzZSk6CisgICAgICAgICMgX2J1ZmZlciBpcyB0aGUgdW5wcm9jZXNzZWQgaW5wdXQgY2hhcmFjdGVycyBidWZmZXIKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gW10KKyAgICAgICAgIyBfc3RhY2sgaXMgZW1wdHkgb3IgY29udGFpbnMgYSBxdW90ZWQgbGlzdCBiZWluZyBwcm9jZXNzZWQKKyAgICAgICAgIyAodGhpcyBpcyB0aGUgREZTIHBhdGggdG8gdGhlIHF1b3RlZCBleHByZXNzaW9uIGJlaW5nIGV2YWx1YXRlZCkuCisgICAgICAgIHNlbGYuX3N0YWNrID0gW10KKyAgICAgICAgc2VsZi5fZXNjYXBhYmxlID0gTm9uZQorICAgICAgICAjIFRydWUgd2hlbiBwYXJzaW5nIHVucXVvdGVkIGhlcmUgZG9jdW1lbnRzCisgICAgICAgIHNlbGYuX2hlcmVkb2MgPSBoZXJlZG9jCisgICAgICAgIAorICAgIGRlZiBhZGQoc2VsZiwgZGF0YSwgZW9mPUZhbHNlKToKKyAgICAgICAgIiIiRmVlZCB0aGUgbGV4ZXIgd2l0aCBtb3JlIGRhdGEuIElmIHRoZSBxdW90ZWQgZXhwcmVzc2lvbiBjYW4gYmUKKyAgICAgICAgZGVsaW1pdGVkLCByZXR1cm4gYSB0dXBsZSAoZXhwciwgcmVtYWluaW5nKSBjb250YWluaW5nIHRoZSBleHByZXNzaW9uCisgICAgICAgIHRyZWUgYW5kIHRoZSB1bmNvbnN1bWVkIGRhdGEuCisgICAgICAgIE90aGVyd2lzZSwgcmFpc2UgTmVlZE1vcmUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9idWZmZXIgKz0gbGlzdChkYXRhKQorICAgICAgICBzZWxmLl9wYXJzZShlb2YpCisgICAgICAgIAorICAgICAgICByZXN1bHQgPSBzZWxmLl9zdGFja1swXQorICAgICAgICByZW1haW5pbmcgPSAnJy5qb2luKHNlbGYuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5fc3RhY2sgPSBbXQorICAgICAgICBzZWxmLl9idWZmZXIgPSBbXQorICAgICAgICByZXR1cm4gcmVzdWx0LCByZW1haW5pbmcKKyAgICAgICAgCisgICAgZGVmIF9pc19lc2NhcGFibGUoc2VsZiwgYywgZGVsaW09Tm9uZSk6CisgICAgICAgIGlmIGRlbGltIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLl9oZXJlZG9jOgorICAgICAgICAgICAgICAgICMgQmFja3NsYXNoZXMgd29ya3MgYXMgaWYgdGhleSB3ZXJlIGRvdWJsZSBxdW90ZWQgaW4gdW5xdW90ZWQKKyAgICAgICAgICAgICAgICAjIGhlcmUtZG9jdW1lbnRzCisgICAgICAgICAgICAgICAgZGVsaW0gPSAnIicKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbGVuKHNlbGYuX3N0YWNrKTw9MToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICBkZWxpbSA9IHNlbGYuX3N0YWNrWy0yXVswXQorICAgICAgICAgICAgCisgICAgICAgIGVzY2FwYWJsZXMgPSBzZWxmLkVTQ0FQQUJMRS5nZXQoZGVsaW0sIE5vbmUpCisgICAgICAgIHJldHVybiBlc2NhcGFibGVzIGlzIE5vbmUgb3IgYyBpbiBlc2NhcGFibGVzCisgICAgICAgIAorICAgIGRlZiBfcGFyc2Vfc3F1b3RlKHNlbGYsIGJ1ZiwgcmVzdWx0LCBlb2YpOgorICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwb3MgPSBidWYuaW5kZXgoIiciKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIE5lZWRNb3JlKCkKKyAgICAgICAgcmVzdWx0Wy0xXSArPSAnJy5qb2luKGJ1Zls6cG9zXSkKKyAgICAgICAgcmVzdWx0ICs9IFsiJyJdCisgICAgICAgIHJldHVybiBwb3MrMSwgVHJ1ZQorICAgICAgICAKKyAgICBkZWYgX3BhcnNlX2JxdW90ZShzZWxmLCBidWYsIHJlc3VsdCwgZW9mKToKKyAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgIHJhaXNlIE5lZWRNb3JlKCkKKyAgICAgICAgICAgIAorICAgICAgICBpZiBidWZbMF09PSdcbic6CisgICAgICAgICAgICAjUmVtb3ZlIGxpbmUgY29udGludWF0aW9ucworICAgICAgICAgICAgcmVzdWx0WzpdID0gWycnLCAnJywgJyddCisgICAgICAgIGVsaWYgc2VsZi5faXNfZXNjYXBhYmxlKGJ1ZlswXSk6CisgICAgICAgICAgICByZXN1bHRbLTFdICs9IGJ1ZlswXQorICAgICAgICAgICAgcmVzdWx0ICs9IFsnJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICNLZWVwIGFzIHN1Y2gKKyAgICAgICAgICAgIHJlc3VsdFs6XSA9IFsnJywgJ1xcJytidWZbMF0sICcnXQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIDEsIFRydWUKKyAgICAgICAgCisgICAgZGVmIF9wYXJzZV9kcXVvdGUoc2VsZiwgYnVmLCByZXN1bHQsIGVvZik6CisgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgIHBvcywgc2VwID0gZmluZF9jaGFycyhidWYsICckXFxgIicpCisgICAgICAgIGlmIHBvcz09LTE6CisgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICAKKyAgICAgICAgcmVzdWx0Wy0xXSArPSAnJy5qb2luKGJ1Zls6cG9zXSkKKyAgICAgICAgaWYgc2VwPT0nIic6CisgICAgICAgICAgICByZXN1bHQgKz0gWyciJ10KKyAgICAgICAgICAgIHJldHVybiBwb3MrMSwgVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI0tlZXAgZXZlcnl0aGluZyB1bnRpbCB0aGUgc2VwYXJhdG9yIGFuZCBkZWZlciBwcm9jZXNzaW5nCisgICAgICAgICAgICByZXR1cm4gcG9zLCBGYWxzZQorICAgICAgICAgICAgCisgICAgZGVmIF9wYXJzZV9jb21tYW5kKHNlbGYsIGJ1ZiwgcmVzdWx0LCBlb2YpOgorICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorCisgICAgICAgIGNoYXJzID0gJyRcXGAiXCcnCisgICAgICAgIGlmIHJlc3VsdFswXSA9PSAnJCgnOgorICAgICAgICAgICAgY2hhcnMgKz0gJyknCisgICAgICAgIHBvcywgc2VwID0gZmluZF9jaGFycyhidWYsIGNoYXJzKQorICAgICAgICBpZiBwb3MgPT0gLTE6CisgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICAKKyAgICAgICAgcmVzdWx0Wy0xXSArPSAnJy5qb2luKGJ1Zls6cG9zXSkKKyAgICAgICAgaWYgKHJlc3VsdFswXT09JyQoJyBhbmQgc2VwPT0nKScpIG9yIChyZXN1bHRbMF09PSdgJyBhbmQgc2VwPT0nYCcpOgorICAgICAgICAgICAgcmVzdWx0ICs9IFtzZXBdCisgICAgICAgICAgICByZXR1cm4gcG9zKzEsIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBwb3MsIEZhbHNlCisgICAgICAgICAgICAKKyAgICBkZWYgX3BhcnNlX3BhcmFtZXRlcihzZWxmLCBidWYsIHJlc3VsdCwgZW9mKToKKyAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgIHJhaXNlIE5lZWRNb3JlKCkKKyAgICAgICAgICAgIAorICAgICAgICBwb3MsIHNlcCA9IGZpbmRfY2hhcnMoYnVmLCAnJFxcYCJcJ30nKQorICAgICAgICBpZiBwb3M9PS0xOgorICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICAgICAgCisgICAgICAgIHJlc3VsdFstMV0gKz0gJycuam9pbihidWZbOnBvc10pCisgICAgICAgIGlmIHNlcD09J30nOgorICAgICAgICAgICAgcmVzdWx0ICs9IFtzZXBdCisgICAgICAgICAgICByZXR1cm4gcG9zKzEsIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBwb3MsIEZhbHNlCisgICAgICAgICAgICAKKyAgICBkZWYgX3BhcnNlX2RvbGxhcihzZWxmLCBidWYsIHJlc3VsdCwgZW9mKToKKyAgICAgICAgc2VwID0gcmVzdWx0WzBdCisgICAgICAgIGlmIHNlcD09JyQnOiAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgICAgICAjVE9ETzogaGFuZGxlIGVtcHR5ICQKKyAgICAgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICBpZiBidWZbMF09PScoJzoKKyAgICAgICAgICAgICAgICBpZiBsZW4oYnVmKT09MToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBidWZbMV09PScoJzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzBdID0gJyQoKCcKKyAgICAgICAgICAgICAgICAgICAgYnVmWzoyXSA9IFtdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzBdID0gJyQoJworICAgICAgICAgICAgICAgICAgICBidWZbOjFdID0gW10KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGVsaWYgYnVmWzBdPT0neyc6CisgICAgICAgICAgICAgICAgcmVzdWx0WzBdID0gJyR7JworICAgICAgICAgICAgICAgIGJ1Zls6MV0gPSBbXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBidWZbMF0gaW4gc2VsZi5TUEVDSUFMX0NIQVJTRVQ6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFstMV0gPSBidWZbMF0KKyAgICAgICAgICAgICAgICAgICAgcmVhZCA9IDEKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmb3IgcmVhZCxjIGluIGVudW1lcmF0ZShidWYpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYyBub3QgaW4gc2VsZi5OQU1FX0NIQVJTRVQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBlb2Y6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wy0xXSArPSAnJy5qb2luKGJ1ZlswOnJlYWRdKQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVzdWx0Wy0xXToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzpdID0gWycnLCByZXN1bHRbMF0sICcnXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBbJyddIAorICAgICAgICAgICAgICAgIHJldHVybiByZWFkLFRydWUKKyAgICAgICAgCisgICAgICAgIHNlcCA9IHJlc3VsdFswXSAgICAKKyAgICAgICAgaWYgc2VwPT0nJCgnOgorICAgICAgICAgICAgcGFyc2VmdW5jID0gc2VsZi5fcGFyc2VfY29tbWFuZAorICAgICAgICBlbGlmIHNlcD09JyR7JzoKKyAgICAgICAgICAgIHBhcnNlZnVuYyA9IHNlbGYuX3BhcnNlX3BhcmFtZXRlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihzZXApCisgICAgICAgICAgICAKKyAgICAgICAgcG9zLCBjbG9zZWQgPSBwYXJzZWZ1bmMoYnVmLCByZXN1bHQsIGVvZikKKyAgICAgICAgcmV0dXJuIHBvcywgY2xvc2VkCisKKyAgICBkZWYgX3BhcnNlKHNlbGYsIGVvZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuX2J1ZmZlcgorICAgICAgICBzdGFjayA9IHNlbGYuX3N0YWNrCisgICAgICAgIHJlY3Vyc2UgPSBGYWxzZQorICAgIAorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgaWYgbm90IHN0YWNrIG9yIHJlY3Vyc2U6CisgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICAgICAgICAgIGlmIGJ1ZlswXSBub3QgaW4gKCciXFxgJFwnJyk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFNoZWxsU3ludGF4RXJyb3IoJ0ludmFsaWQgcXVvdGVkIHN0cmluZyBzZXF1ZW5jZScpCisgICAgICAgICAgICAgICAgc3RhY2suYXBwZW5kKFtidWZbMF0sICcnXSkKKyAgICAgICAgICAgICAgICBidWZbOjFdID0gW10KKyAgICAgICAgICAgICAgICByZWN1cnNlID0gRmFsc2UKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YWNrWy0xXQorICAgICAgICAgICAgaWYgcmVzdWx0WzBdPT0iJyI6CisgICAgICAgICAgICAgICAgcGFyc2VmdW5jID0gc2VsZi5fcGFyc2Vfc3F1b3RlCisgICAgICAgICAgICBlbGlmIHJlc3VsdFswXT09J1xcJzoKKyAgICAgICAgICAgICAgICBwYXJzZWZ1bmMgPSBzZWxmLl9wYXJzZV9icXVvdGUKKyAgICAgICAgICAgIGVsaWYgcmVzdWx0WzBdPT0nIic6CisgICAgICAgICAgICAgICAgcGFyc2VmdW5jID0gc2VsZi5fcGFyc2VfZHF1b3RlCisgICAgICAgICAgICBlbGlmIHJlc3VsdFswXT09J2AnOgorICAgICAgICAgICAgICAgIHBhcnNlZnVuYyA9IHNlbGYuX3BhcnNlX2NvbW1hbmQKKyAgICAgICAgICAgIGVsaWYgcmVzdWx0WzBdWzBdPT0nJCc6CisgICAgICAgICAgICAgICAgcGFyc2VmdW5jID0gc2VsZi5fcGFyc2VfZG9sbGFyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgcmVhZCwgY2xvc2VkID0gcGFyc2VmdW5jKGJ1ZiwgcmVzdWx0LCBlb2YpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBidWZbOnJlYWRdID0gW10KKyAgICAgICAgICAgIGlmIGNsb3NlZDoKKyAgICAgICAgICAgICAgICBpZiBsZW4oc3RhY2spPjE6CisgICAgICAgICAgICAgICAgICAgICNNZXJnZSBpbiBwYXJlbnQgZXhwcmVzc2lvbgorICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICBzdGFja1stMV0gKz0gW3BhcnNlZF0KKyAgICAgICAgICAgICAgICAgICAgc3RhY2tbLTFdICs9IFsnJ10KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZWN1cnNlID0gVHJ1ZQorCitkZWYgbm9ybWFsaXplX3dvcmR0cmVlKHd0cmVlKToKKyAgICAiIiJGb2xkIGJhY2sgZXZlcnkgbGl0ZXJhbCBzZXF1ZW5jZSAoZGVsaW1pdGVkIHdpdGggZW1wdHkgc3RyaW5ncykgaW50bworICAgIHBhcmVudCBzZXF1ZW5jZS4KKyAgICAiIiIKKyAgICBkZWYgbm9ybWFsaXplKHd0cmVlKToKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgZm9yIHBhcnQgaW4gd3RyZWVbMTotMV06CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcnQsIGxpc3QpOgorICAgICAgICAgICAgICAgIHBhcnQgPSBub3JtYWxpemUocGFydCkKKyAgICAgICAgICAgICAgICBpZiBwYXJ0WzBdPT0nJzoKKyAgICAgICAgICAgICAgICAgICAgI01vdmUgdGhlIHBhcnQgY29udGVudCBiYWNrIGF0IGN1cnJlbnQgbGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHBhcnRbMTotMV0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsaWYgbm90IHBhcnQ6CisgICAgICAgICAgICAgICAgI1JlbW92ZSBlbXB0eSBzdHJpbmdzCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocGFydCkKKyAgICAgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIHJlc3VsdCA9IFsnJ10gICAgCisgICAgICAgIHJldHVybiBbd3RyZWVbMF1dICsgcmVzdWx0ICsgW3d0cmVlWy0xXV0KKyAgICAgICAgICAgICAgICAKKyAgICByZXR1cm4gbm9ybWFsaXplKHd0cmVlKQorICAgIAorICAgICAgICAgICAgICAgIAorZGVmIG1ha2Vfd29yZHRyZWUodG9rZW4sIGhlcmVfZG9jdW1lbnQ9RmFsc2UpOgorICAgICIiIlBhcnNlIGEgZGVsaW1pdGVkIHRva2VuIGFuZCByZXR1cm4gYSB0cmVlIHNpbWlsYXIgdG8gdGhlIG9uZXMgcmV0dXJuZWQgYnkKKyAgICBXb3JkTGV4ZXIuIHRva2VuIG1heSBjb250YWluIGFueSBjb21iaW5hdGlvbnMgb2YgZXhwYW5zaW9uL3F1b3RlZCBmaWVsZHMgYW5kCisgICAgbm9uLW9uZXMuCisgICAgIiIiICAgIAorICAgIHRyZWUgPSBbJyddCisgICAgcmVtYWluaW5nID0gdG9rZW4KKyAgICBkZWxpbWl0ZXJzID0gJ1xcJGAnCisgICAgaWYgbm90IGhlcmVfZG9jdW1lbnQ6CisgICAgICAgIGRlbGltaXRlcnMgKz0gJ1wnIicKKyAgICAKKyAgICB3aGlsZSAxOgorICAgICAgICBwb3MsIHNlcCA9IGZpbmRfY2hhcnMocmVtYWluaW5nLCBkZWxpbWl0ZXJzKQorICAgICAgICBpZiBwb3M9PS0xOgorICAgICAgICAgICAgdHJlZSArPSBbcmVtYWluaW5nLCAnJ10KKyAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVfd29yZHRyZWUodHJlZSkKKyAgICAgICAgdHJlZS5hcHBlbmQocmVtYWluaW5nWzpwb3NdKQorICAgICAgICByZW1haW5pbmcgPSByZW1haW5pbmdbcG9zOl0KKyAgICAgICAgCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCwgcmVtYWluaW5nID0gV29yZExleGVyKGhlcmVkb2MgPSBoZXJlX2RvY3VtZW50KS5hZGQocmVtYWluaW5nLCBUcnVlKQorICAgICAgICBleGNlcHQgTmVlZE1vcmU6CisgICAgICAgICAgICByYWlzZSBTaGVsbFN5bnRheEVycm9yKCdJbnZhbGlkIHRva2VuICIlcyInKQorICAgICAgICB0cmVlLmFwcGVuZChyZXN1bHQpCisgICAgICAgIAorICAgICAgICAgICAgICAgIAorZGVmIHdvcmR0cmVlX2FzX3N0cmluZyh3dHJlZSk6CisgICAgIiIiUmV3cml0ZSBhbiBleHByZXNzaW9uIHRyZWUgZ2VuZXJhdGVkIGJ5IG1ha2Vfd29yZHRyZWUgYXMgc3RyaW5nLiIiIgorICAgIGRlZiB2aXNpdChub2RlLCBvdXRwdXQpOgorICAgICAgICBmb3IgY2hpbGQgaW4gbm9kZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY2hpbGQsIGxpc3QpOgorICAgICAgICAgICAgICAgIHZpc2l0KGNoaWxkLCBvdXRwdXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoY2hpbGQpCisgICAgCisgICAgb3V0cHV0ID0gW10KKyAgICB2aXNpdCh3dHJlZSwgb3V0cHV0KQorICAgIHJldHVybiAnJy5qb2luKG91dHB1dCkKKyAgICAKKyAgICAKK2RlZiB1bnF1b3RlX3dvcmR0cmVlKHd0cmVlKToKKyAgICAiIiJGb2xkIHRoZSB3b3JkIHRyZWUgd2hpbGUgcmVtb3ZpbmcgcXVvdGVzIGV2ZXJ5d2hlcmUuIE90aGVyIGV4cGFuc2lvbgorICAgIHNlcXVlbmNlcyBhcmUgam9pbmVkIGFzIHN1Y2guCisgICAgIiIiCisgICAgZGVmIHVucXVvdGUod3RyZWUpOgorICAgICAgICB1bnF1b3RlZCA9IFtdCisgICAgICAgIGlmIHd0cmVlWzBdIGluICgnJywgIiciLCAnIicsICdcXCcpOgorICAgICAgICAgICAgd3RyZWUgPSB3dHJlZVsxOi0xXQorICAgICAgICAgICAgCisgICAgICAgIGZvciBwYXJ0IGluIHd0cmVlOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJ0LCBsaXN0KToKKyAgICAgICAgICAgICAgICBwYXJ0ID0gdW5xdW90ZShwYXJ0KQorICAgICAgICAgICAgdW5xdW90ZWQuYXBwZW5kKHBhcnQpCisgICAgICAgIHJldHVybiAnJy5qb2luKHVucXVvdGVkKQorICAgICAgICAgICAgCisgICAgcmV0dXJuIHVucXVvdGUod3RyZWUpCisgICAgCisgICAgCitjbGFzcyBIZXJlRG9jTGV4ZXI6CisgICAgIiIiSGVyZURvY0xleGVyIGRlbGltaXRzIHdoYXRldmVyIGNvbWVzIGZyb20gdGhlIGhlcmUtZG9jdW1lbnQgc3RhcnRpbmcgbmV3bGluZQorICAgIG5vdCBpbmNsdWRlZCB0byB0aGUgY2xvc2luZyBkZWxpbWl0ZXIgbGluZSBpbmNsdWRlZC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3AsIGRlbGltKToKKyAgICAgICAgYXNzZXJ0IG9wIGluICgnPDwnLCAnPDwtJykKKyAgICAgICAgaWYgbm90IGRlbGltOgorICAgICAgICAgICAgcmFpc2UgU2hlbGxTeW50YXhFcnJvcignaW52YWxpZCBoZXJlIGRvY3VtZW50IGRlbGltaXRlciAlcycgJSBzdHIoZGVsaW0pKQorICAgICAgICAgICAgCisgICAgICAgIHNlbGYuX29wID0gb3AKKyAgICAgICAgc2VsZi5fZGVsaW0gPSBkZWxpbQorICAgICAgICBzZWxmLl9idWZmZXIgPSBbXQorICAgICAgICBzZWxmLl90b2tlbiA9IFtdCisgICAgICAgIAorICAgIGRlZiBhZGQoc2VsZiwgZGF0YSwgZW9mKToKKyAgICAgICAgIiIiSWYgdGhlIGhlcmUtZG9jdW1lbnQgd2FzIGRlbGltaXRlZCwgcmV0dXJuIGEgdHVwbGUgKGNvbnRlbnQsIHJlbWFpbmluZykuCisgICAgICAgIFJhaXNlIE5lZWRNb3JlKCkgb3RoZXJ3aXNlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fYnVmZmVyICs9IGxpc3QoZGF0YSkKKyAgICAgICAgc2VsZi5fcGFyc2UoZW9mKQorICAgICAgICB0b2tlbiA9ICcnLmpvaW4oc2VsZi5fdG9rZW4pCisgICAgICAgIHJlbWFpbmluZyA9ICcnLmpvaW4oc2VsZi5fYnVmZmVyKQorICAgICAgICBzZWxmLl90b2tlbiwgc2VsZi5fcmVtYWluaW5nID0gW10sIFtdCisgICAgICAgIHJldHVybiB0b2tlbiwgcmVtYWluaW5nCisgICAgCisgICAgZGVmIF9wYXJzZShzZWxmLCBlb2YpOgorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgI0xvb2sgZm9yIGZpcnN0IHVuZXNjYXBlZCBuZXdsaW5lLiBRdW90ZXMgbWF5IGJlIGlnbm9yZWQKKyAgICAgICAgICAgIGVzY2FwZWQgPSBGYWxzZQorICAgICAgICAgICAgZm9yIGksYyBpbiBlbnVtZXJhdGUoc2VsZi5fYnVmZmVyKToKKyAgICAgICAgICAgICAgICBpZiBlc2NhcGVkOgorICAgICAgICAgICAgICAgICAgICBlc2NhcGVkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBlbGlmIGM9PSdcXCc6CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiBjPT0nXG4nOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpID0gLTEKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBpPT0tMSBvciBzZWxmLl9idWZmZXJbaV0hPSdcbic6CisgICAgICAgICAgICAgICAgaWYgbm90IGVvZjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICAgICAgICAgICNObyBtb3JlIGRhdGEsIG1heWJlIHRoZSBsYXN0IGxpbmUgaXMgY2xvc2luZyBkZWxpbWl0ZXIKKyAgICAgICAgICAgICAgICBsaW5lID0gJycuam9pbihzZWxmLl9idWZmZXIpCisgICAgICAgICAgICAgICAgZW9sID0gJycKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXJbOl0gPSBbXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsaW5lID0gJycuam9pbihzZWxmLl9idWZmZXJbOmldKQorICAgICAgICAgICAgICAgIGVvbCA9IHNlbGYuX2J1ZmZlcltpXQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlcls6aSsxXSA9IFtdCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIHNlbGYuX29wPT0nPDwtJzoKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5sc3RyaXAoJ1x0JykKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIGxpbmU9PXNlbGYuX2RlbGltOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBzZWxmLl90b2tlbiArPSBbbGluZSwgZW9sXQorICAgICAgICAgICAgaWYgaT09LTE6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAKK2NsYXNzIFRva2VuOgorICAgICNUT0RPOiBjaGVjayB0aGlzIGlzIHN0aWxsIGluIHVzZQorICAgIE9QRVJBVE9SID0gJ09QRVJBVE9SJworICAgIFdPUkQgPSAnV09SRCcKKyAgICAKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYudmFsdWUgPSAnJworICAgICAgICBzZWxmLnR5cGUgPSBOb25lCisgICAgICAgIAorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAjQmVoYXZlIGxpa2UgYSB0d28gZWxlbWVudHMgdHVwbGUKKyAgICAgICAgaWYga2V5PT0wOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudHlwZQorICAgICAgICBpZiBrZXk9PTE6CisgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorICAgICAgICByYWlzZSBJbmRleEVycm9yKGtleSkKKyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgCitjbGFzcyBIZXJlRG9jOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcCwgbmFtZT1Ob25lKToKKyAgICAgICAgc2VsZi5vcCA9IG9wCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5wZW5kaW5ncyA9IFtdCisgICAgICAgICAgICAgICAKK1RLX0NPTU1BICAgICAgICA9ICdDT01NQScKK1RLX0FNUEVSU0FORCAgICA9ICdBTVAnCitUS19PUCAgICAgICAgICAgPSAnT1AnCitUS19UT0tFTiAgICAgICAgPSAnVE9LRU4nCitUS19DT01NRU5UICAgICAgPSAnQ09NTUVOVCcKK1RLX05FV0xJTkUgICAgICA9ICdORVdMSU5FJyAKK1RLX0lPTlVNQkVSICAgICA9ICdJT19OVU1CRVInCitUS19BU1NJR05NRU5UICAgPSAnQVNTSUdOTUVOVF9XT1JEJworVEtfSEVSRU5BTUUgICAgID0gJ0hFUkVOQU1FJworCitjbGFzcyBMZXhlcjoKKyAgICAiIiJNYWluIGxleGVyLgorICAgIAorICAgIENhbGwgYWRkKCkgdW50aWwgdGhlIHNjcmlwdCBBU1QgaXMgcmV0dXJuZWQuCisgICAgIiIiCisgICAgIyBIZXJlLWRvY3VtZW50IGhhbmRsaW5nIG1ha2VzIHRoZSB3aG9sZSB0aGluZyBtb3JlIGNvbXBsZXggYmVjYXVzZSB0aGV5IGJhc2ljYWxseQorICAgICMgZm9yY2UgdG9rZW5zIHRvIGJlIHJlb3JkZXJlZDogaGVyZS1jb250ZW50IG11c3QgY29tZSByaWdodCBhZnRlciB0aGUgb3BlcmF0b3IKKyAgICAjIGFuZCB0aGUgaGVyZS1kb2N1bWVudCBuYW1lLCB3aGlsZSBzb21lIG90aGVyIHRva2VucyBtaWdodCBiZSBmb2xsb3dpbmcgdGhlCisgICAgIyBoZXJlLWRvY3VtZW50IGV4cHJlc3Npb24gb24gdGhlIHNhbWUgbGluZS4KKyAgICAjCisgICAgIyBTbywgaGVyZS1kb2Mgc3RhdGVzIGFyZSBiYXNpY2FsbHk6CisgICAgIyAgICpzZWxmLl9zdGF0ZT09U1RfTk9STUFMCisgICAgIyAgICAgICAtIHNlbGYuX2hlcmVkb2Mub3AgaXMgTm9uZTogbm8gaGVyZS1kb2N1bWVudAorICAgICMgICAgICAgLSBzZWxmLl9oZXJlZG9jLm9wIGlzIG5vdCBOb25lIGJ1dCBuYW1lIGlzOiBoZXJlLWRvY3VtZW50IG9wZXJhdG9yIG1hdGNoZWQsCisgICAgIyAgICAgICAgICAgd2FpdGluZyBmb3IgdGhlIGRvY3VtZW50IG5hbWUvZGVsaW1pdGVyCisgICAgIyAgICAgICAtIHNlbGYuX2hlcmVkb2Mub3AgYW5kIG5hbWUgYXJlIG5vdCBOb25lOiBoZXJlLWRvY3VtZW50IGlzIHJlYWR5LCBmb2xsb3dpbmcKKyAgICAjICAgICAgICAgICB0b2tlbnMgYXJlIGJlaW5nIHN0b3JlZCBhbmQgd2lsbCBiZSBwdXNoZWQgYWdhaW4gd2hlbiB0aGUgZG9jdW1lbnQgaXMKKyAgICAjICAgICAgICAgICBjb21wbGV0ZWx5IHBhcnNlZC4KKyAgICAjICAgKnNlbGYuX3N0YXRlPT1TVF9IRVJFRE9DCisgICAgIyAgICAgICAtIFRoZSBoZXJlLWRvY3VtZW50IGlzIGJlaW5nIGRlbGltaXRlZCBieSBzZWxmLl9oZXJlbGV4ZXIuIE9uY2UgaXQgaXMgZG9uZQorICAgICMgICAgICAgICAgIHRoZSBjb250ZW50IGlzIHB1c2hlZCBpbiBmcm9udCBvZiB0aGUgcGVuZGluZyB0b2tlbiBsaXN0IHRoZW4gYWxsIHRoZXNlCisgICAgIyAgICAgICAgICAgdG9rZW5zIGFyZSBwdXNoZWQgb25jZSBhZ2Fpbi4KKyAgICBTVF9OT1JNQUwgICAgICAgPSAnU1RfTk9STUFMJworICAgIFNUX09QICAgICAgICAgICA9ICdTVF9PUCcKKyAgICBTVF9CQUNLU0xBU0ggICAgPSAnU1RfQkFDS1NMQVNIJworICAgIFNUX1FVT1RFRCAgICAgICA9ICdTVF9RVU9URUQnCisgICAgU1RfQ09NTUVOVCAgICAgID0gJ1NUX0NPTU1FTlQnCisgICAgU1RfSEVSRURPQyAgICAgID0gJ1NUX0hFUkVET0MnCisgICAgCisgICAgI01hdGNoIGVuZCBvZiBiYWNrcXVvdGUgc3RyaW5ncworICAgIFJFX0JBQ0tRVU9URV9FTkQgPSByZS5jb21waWxlKHInKD88IVxcKShgKScpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50X3N0YXRlID0gTm9uZSk6CisgICAgICAgIHNlbGYuX2lucHV0ID0gW10KKyAgICAgICAgc2VsZi5fcG9zID0gMAorICAgICAgICAKKyAgICAgICAgc2VsZi5fdG9rZW4gPSAnJworICAgICAgICBzZWxmLl90eXBlID0gVEtfVE9LRU4KKyAgICAgICAgCisgICAgICAgIHNlbGYuX3N0YXRlID0gc2VsZi5TVF9OT1JNQUwKKyAgICAgICAgc2VsZi5fcGFyZW50X3N0YXRlID0gcGFyZW50X3N0YXRlCisgICAgICAgIHNlbGYuX3dvcmRsZXhlciA9IE5vbmUKKyAgICAgICAgCisgICAgICAgIHNlbGYuX2hlcmVkb2MgPSBIZXJlRG9jKE5vbmUpCisgICAgICAgIHNlbGYuX2hlcmVsZXhlciA9IE5vbmUKKyAgICAgICAgCisgICAgICAgICMjIyBGb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgbm90IHVzZWQgZm9yIGRlbGltaXRpbmcgdG9rZW4gYW5kIGNhbiBzYWZlbHkKKyAgICAgICAgIyMjIGJlIGNoYW5nZWQgYWZ0ZXIgaGVyZS1kb2N1bWVudCBkZXRlY3Rpb24gKHNlZSBfcHVzaF90b2tlKQorICAgICAgICAKKyAgICAgICAgIyBDb3VudCB0aGUgbnVtYmVyIG9mIHRva2VucyBmb2xsb3dpbmcgYSAnRm9yJyByZXNlcnZlZCB3b3JkLiBOZWVkZWQgdG8KKyAgICAgICAgIyByZXR1cm4gYW4gJ0luJyByZXNlcnZlZCB3b3JkIGlmIGl0IGNvbWVzIGluIHRoaXJkIHBsYWNlLgorICAgICAgICBzZWxmLl9mb3JfY291bnQgPSBOb25lCisgICAgICAgIAorICAgIGRlZiBhZGQoc2VsZiwgZGF0YSwgZW9mPUZhbHNlKToKKyAgICAgICAgIiIiRmVlZCB0aGUgbGV4ZXIgd2l0aCBkYXRhLgorICAgICAgICAKKyAgICAgICAgV2hlbiBlb2YgaXMgc2V0IHRvIFRydWUsIHJldHVybnMgdW5jb25zdW1lZCBkYXRhIG9yIHJhaXNlIGlmIHRoZSBsZXhlcgorICAgICAgICBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgZGVsaW1pdGluZyBvcGVyYXRpb24uCisgICAgICAgIFJhaXNlIE5lZWRNb3JlIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2lucHV0ICs9IGxpc3QoZGF0YSkKKyAgICAgICAgc2VsZi5fcGFyc2UoZW9mKQorICAgICAgICBzZWxmLl9pbnB1dFs6c2VsZi5fcG9zXSA9IFtdCisgICAgICAgIHJldHVybiAnJy5qb2luKHNlbGYuX2lucHV0KQorICAgICAgICAKKyAgICBkZWYgX3BhcnNlKHNlbGYsIGVvZik6ICAgICAgICAgICAgCisgICAgICAgIHdoaWxlIHNlbGYuX3N0YXRlOgorICAgICAgICAgICAgaWYgc2VsZi5fcG9zPj1sZW4oc2VsZi5faW5wdXQpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBlb2Y6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5lZWRNb3JlKCkKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX3N0YXRlIG5vdCBpbiAoc2VsZi5TVF9PUCwgc2VsZi5TVF9RVU9URUQsIHNlbGYuU1RfSEVSRURPQyk6CisgICAgICAgICAgICAgICAgICAgICNEZWxpbWl0IHRoZSBjdXJyZW50IHRva2VuIGFuZCBsZWF2ZSBjbGVhbmx5CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9rZW4oJycpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgI0xldCB0aGUgc3VibGV4ZXIgaGFuZGxlIHRoZSBlb2YgdGhlbXNlbHZlcworICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBzZWxmLl9zdGF0ZT09c2VsZi5TVF9OT1JNQUw6CisgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2Vfbm9ybWFsKCkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fc3RhdGU9PXNlbGYuU1RfQ09NTUVOVDoKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9jb21tZW50KCkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fc3RhdGU9PXNlbGYuU1RfT1A6CisgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2Vfb3AoZW9mKQorICAgICAgICAgICAgZWxpZiBzZWxmLl9zdGF0ZT09c2VsZi5TVF9RVU9URUQ6CisgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VfcXVvdGVkKGVvZikKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fc3RhdGU9PXNlbGYuU1RfSEVSRURPQzoKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9oZXJlZG9jKGVvZikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IEZhbHNlLCAiVW5rbm93biBzdGF0ZSAiICsgc3RyKHNlbGYuX3N0YXRlKQorICAgICAgICAgICAgICAgIAorICAgICAgICBpZiBzZWxmLl9oZXJlZG9jLm9wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgU2hlbGxTeW50YXhFcnJvcignbWlzc2luZyBoZXJlLWRvY3VtZW50IGRlbGltaXRlcicpCisgICAgICAgICAgICAgICAgCisgICAgZGVmIF9wYXJzZV9ub3JtYWwoc2VsZik6CisgICAgICAgIGMgPSBzZWxmLl9pbnB1dFtzZWxmLl9wb3NdCisgICAgICAgIGlmIGM9PSdcbic6CisgICAgICAgICAgICBzZWxmLl9wdXNoX3Rva2VuKGMpCisgICAgICAgICAgICBzZWxmLl90b2tlbiA9IGMKKyAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBUS19ORVdMSU5FCisgICAgICAgICAgICBzZWxmLl9wdXNoX3Rva2VuKCcnKQorICAgICAgICAgICAgc2VsZi5fcG9zICs9IDEKKyAgICAgICAgZWxpZiBjIGluICgnXFwnLCAnXCcnLCAnIicsICdgJywgJyQnKToKKyAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gc2VsZi5TVF9RVU9URUQKKyAgICAgICAgZWxpZiBpc19wYXJ0aWFsX29wKGMpOgorICAgICAgICAgICAgc2VsZi5fcHVzaF90b2tlbihjKQorICAgICAgICAgICAgCisgICAgICAgICAgICBzZWxmLl90eXBlID0gVEtfT1AKKyAgICAgICAgICAgIHNlbGYuX3Rva2VuICs9IGMKKyAgICAgICAgICAgIHNlbGYuX3BvcyArPSAxCisgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IHNlbGYuU1RfT1AKKyAgICAgICAgZWxpZiBpc19ibGFuayhjKToKKyAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9rZW4oYykKKyAgICAgICAgICAgIAorICAgICAgICAgICAgI0Rpc2NhcmQgYmxhbmtzCisgICAgICAgICAgICBzZWxmLl9wb3MgKz0gMQorICAgICAgICBlbGlmIHNlbGYuX3Rva2VuOgorICAgICAgICAgICAgc2VsZi5fdG9rZW4gKz0gYworICAgICAgICAgICAgc2VsZi5fcG9zICs9IDEKKyAgICAgICAgZWxpZiBjPT0nIyc6CisgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IHNlbGYuU1RfQ09NTUVOVAorICAgICAgICAgICAgc2VsZi5fdHlwZSA9IFRLX0NPTU1FTlQKKyAgICAgICAgICAgIHNlbGYuX3BvcyArPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wb3MgKz0gMQorICAgICAgICAgICAgc2VsZi5fdG9rZW4gKz0gYyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICBkZWYgX3BhcnNlX29wKHNlbGYsIGVvZik6CisgICAgICAgIGFzc2VydCBzZWxmLl90b2tlbgorICAgICAgICAKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIGlmIHNlbGYuX3Bvcz49bGVuKHNlbGYuX2lucHV0KToKKyAgICAgICAgICAgICAgICBpZiBub3QgZW9mOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICAgICAgYyA9ICcnCisgICAgICAgICAgICBlbHNlOiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjID0gc2VsZi5faW5wdXRbc2VsZi5fcG9zXQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgb3AgPSBzZWxmLl90b2tlbiArIGMKKyAgICAgICAgICAgIGlmIGMgYW5kIGlzX3BhcnRpYWxfb3Aob3ApOgorICAgICAgICAgICAgICAgICNTdGlsbCBwYXJzaW5nIGFuIG9wZXJhdG9yCisgICAgICAgICAgICAgICAgc2VsZi5fdG9rZW4gPSBvcAorICAgICAgICAgICAgICAgIHNlbGYuX3BvcyArPSAxCisgICAgICAgICAgICBlbHNlOiAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICNFbmQgb2Ygb3BlcmF0b3IKKyAgICAgICAgICAgICAgICBzZWxmLl9wdXNoX3Rva2VuKGMpICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IHNlbGYuU1RfTk9STUFMCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAKKyAgICBkZWYgX3BhcnNlX2NvbW1lbnQoc2VsZik6CisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBpZiBzZWxmLl9wb3M+PWxlbihzZWxmLl9pbnB1dCk6CisgICAgICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgYyA9IHNlbGYuX2lucHV0W3NlbGYuX3Bvc10KKyAgICAgICAgICAgIGlmIGM9PSdcbic6CisgICAgICAgICAgICAgICAgI0VuZCBvZiBjb21tZW50LCBkbyBub3QgY29uc3VtZSB0aGUgZW5kIG9mIGxpbmUKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IHNlbGYuU1RfTk9STUFMCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fdG9rZW4gKz0gYworICAgICAgICAgICAgICAgIHNlbGYuX3BvcyArPSAxCisgICAgICAgICAgICAgICAgCisgICAgZGVmIF9wYXJzZV9xdW90ZWQoc2VsZiwgZW9mKToKKyAgICAgICAgIiIiUHJlY29uZGl0aW9uOiB0aGUgc3RhcnRpbmcgYmFja3F1b3RlL2RvbGxhciBpcyBzdGlsbCBpbiB0aGUgaW5wdXQgcXVldWUuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl93b3JkbGV4ZXI6CisgICAgICAgICAgICBzZWxmLl93b3JkbGV4ZXIgPSBXb3JkTGV4ZXIoKQorICAgICAgICAKKyAgICAgICAgaWYgc2VsZi5fcG9zPGxlbihzZWxmLl9pbnB1dCk6CisgICAgICAgICAgICAgI1RyYW5zZmVyIGlucHV0IHF1ZXVlIGNoYXJhY3RlciBpbnRvIHRoZSBzdWJwYXJzZXIKKyAgICAgICAgICAgIGlucHV0ID0gc2VsZi5faW5wdXRbc2VsZi5fcG9zOl0KKyAgICAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oaW5wdXQpCisgICAgICAgICAgICAKKyAgICAgICAgd3RyZWUsIHJlbWFpbmluZyA9IHNlbGYuX3dvcmRsZXhlci5hZGQoaW5wdXQsIGVvZikKKyAgICAgICAgc2VsZi5fd29yZGxleGVyID0gTm9uZQorICAgICAgICBzZWxmLl90b2tlbiArPSB3b3JkdHJlZV9hc19zdHJpbmcod3RyZWUpCisgICAgICAgIAorICAgICAgICAjUHV0IHVucGFyc2VkIGNoYXJhY3RlciBiYWNrIGluIHRoZSBpbnB1dCBxdWV1ZQorICAgICAgICBpZiByZW1haW5pbmc6CisgICAgICAgICAgICBzZWxmLl9pbnB1dFtzZWxmLl9wb3M6c2VsZi5fcG9zXSA9IGxpc3QocmVtYWluaW5nKSAgICAgICAgICAKKyAgICAgICAgc2VsZi5fc3RhdGUgPSBzZWxmLlNUX05PUk1BTAorICAgICAgICAKKyAgICBkZWYgX3BhcnNlX2hlcmVkb2Moc2VsZiwgZW9mKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl90b2tlbgorICAgICAgICAKKyAgICAgICAgaWYgc2VsZi5faGVyZWxleGVyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9oZXJlbGV4ZXIgPSBIZXJlRG9jTGV4ZXIoc2VsZi5faGVyZWRvYy5vcCwgc2VsZi5faGVyZWRvYy5uYW1lKQorICAgICAgICAKKyAgICAgICAgaWYgc2VsZi5fcG9zPGxlbihzZWxmLl9pbnB1dCk6CisgICAgICAgICAgICAgI1RyYW5zZmVyIGlucHV0IHF1ZXVlIGNoYXJhY3RlciBpbnRvIHRoZSBzdWJwYXJzZXIKKyAgICAgICAgICAgIGlucHV0ID0gc2VsZi5faW5wdXRbc2VsZi5fcG9zOl0KKyAgICAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oaW5wdXQpCisgICAgICAgIAorICAgICAgICBzZWxmLl90b2tlbiwgcmVtYWluaW5nID0gc2VsZi5faGVyZWxleGVyLmFkZChpbnB1dCwgZW9mKQorICAgICAgICAKKyAgICAgICAgI1Jlc2V0IGhlcmUtZG9jdW1lbnQgc3RhdGUKKyAgICAgICAgc2VsZi5faGVyZWxleGVyID0gTm9uZQorICAgICAgICBoZXJlZG9jLCBzZWxmLl9oZXJlZG9jID0gc2VsZi5faGVyZWRvYywgSGVyZURvYyhOb25lKQorICAgICAgICBpZiByZW1haW5pbmc6CisgICAgICAgICAgICBzZWxmLl9pbnB1dFtzZWxmLl9wb3M6c2VsZi5fcG9zXSA9IGxpc3QocmVtYWluaW5nKQorICAgICAgICBzZWxmLl9zdGF0ZSA9IHNlbGYuU1RfTk9STUFMCisgICAgICAgIAorICAgICAgICAjUHVzaCBwZW5kaW5nIHRva2VucworICAgICAgICBoZXJlZG9jLnBlbmRpbmdzWzowXSA9IFsoc2VsZi5fdG9rZW4sIHNlbGYuX3R5cGUsIGhlcmVkb2MubmFtZSldCisgICAgICAgIGZvciB0b2tlbiwgdHlwZSwgZGVsaW0gaW4gaGVyZWRvYy5wZW5kaW5nczoKKyAgICAgICAgICAgIHNlbGYuX3Rva2VuID0gdG9rZW4KKyAgICAgICAgICAgIHNlbGYuX3R5cGUgPSB0eXBlCisgICAgICAgICAgICBzZWxmLl9wdXNoX3Rva2VuKGRlbGltKQorICAgICAgICAgICAgICAgICAgICAgCisgICAgZGVmIF9wdXNoX3Rva2VuKHNlbGYsIGRlbGltKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3Rva2VuOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIAorICAgICAgICBpZiBzZWxmLl9oZXJlZG9jLm9wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5faGVyZWRvYy5uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgI0hlcmUtZG9jdW1lbnQgbmFtZQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3R5cGUhPVRLX1RPS0VOOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBTaGVsbFN5bnRheEVycm9yKCJleHBlY3RpbmcgaGVyZS1kb2N1bWVudCBuYW1lLCBnb3QgJyVzJyIgJSBzZWxmLl90b2tlbikKKyAgICAgICAgICAgICAgICBzZWxmLl9oZXJlZG9jLm5hbWUgPSB1bnF1b3RlX3dvcmR0cmVlKG1ha2Vfd29yZHRyZWUoc2VsZi5fdG9rZW4pKQorICAgICAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBUS19IRVJFTkFNRQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjQ2FwdHVyZSBhbGwgdG9rZW5zIHVudGlsIHRoZSBuZXdsaW5lIHN0YXJ0aW5nIHRoZSBoZXJlLWRvY3VtZW50CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fdHlwZT09VEtfTkVXTElORToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX3N0YXRlPT1zZWxmLlNUX05PUk1BTAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IHNlbGYuU1RfSEVSRURPQyAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLl9oZXJlZG9jLnBlbmRpbmdzLmFwcGVuZCgoc2VsZi5fdG9rZW4sIHNlbGYuX3R5cGUsIGRlbGltKSkgICAgCisgICAgICAgICAgICAgICAgc2VsZi5fdG9rZW4gPSAnJworICAgICAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBUS19UT0tFTgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICAgICAgCisgICAgICAgICMgQkVXQVJFOiBkbyBub3QgY2hhbmdlIHBhcnNlciBzdGF0ZSBmcm9tIGhlcmUgdG8gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb246CisgICAgICAgICMgd2hlbiBwYXJzaW5nIGJldHdlZW4gYW4gaGVyZS1kb2N1bWVudCBvcGVyYXRvciB0byB0aGUgZW5kIG9mIHRoZSBsaW5lCisgICAgICAgICMgdG9rZW5zIGFyZSBzdG9yZWQgaW4gc2VsZi5faGVyZWRvYy5wZW5kaW5ncy4gVGhlcmVmb3JlLCB0aGV5IHdpbGwgbm90CisgICAgICAgICMgcmVhY2ggdGhlIHNlY3Rpb24gYmVsb3cuCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAjQ2hlY2sgb3BlcmF0b3JzCisgICAgICAgIGlmIHNlbGYuX3R5cGU9PVRLX09QOgorICAgICAgICAgICAgI0ZhbHNlIHBvc2l0aXZlIGJlY2F1c2Ugb2YgcGFydGlhbCBvcCBtYXRjaGluZworICAgICAgICAgICAgb3AgPSBpc19vcChzZWxmLl90b2tlbikKKyAgICAgICAgICAgIGlmIG5vdCBvcDoKKyAgICAgICAgICAgICAgICBzZWxmLl90eXBlID0gVEtfVE9LRU4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgI01hcCB0byB0aGUgc3BlY2lmaWMgb3BlcmF0b3IKKyAgICAgICAgICAgICAgICBzZWxmLl90eXBlID0gb3AKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl90b2tlbiBpbiAoJzw8JywgJzw8LScpOgorICAgICAgICAgICAgICAgICAgICAjRG9uZSBoZXJlIHJhdGhlciB0aGFuIGluIF9wYXJzZV9vcCBiZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQKKyAgICAgICAgICAgICAgICAgICAgI3RvIGNoYW5nZSB0aGUgcGFyc2VyIHN0YXRlIHNpbmNlIHdlIGFyZSBzdGlsbCB3YWl0aW5nIGZvcgorICAgICAgICAgICAgICAgICAgICAjdGhlIGhlcmUtZG9jdW1lbnQgbmFtZQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9oZXJlZG9jLm9wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU2hlbGxTeW50YXhFcnJvcigic3ludGF4IGVycm9yIG5lYXIgdG9rZW4gJyVzJyIgJSBzZWxmLl90b2tlbikKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX2hlcmVkb2Mub3AgaXMgTm9uZQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9oZXJlZG9jLm9wID0gc2VsZi5fdG9rZW4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgaWYgc2VsZi5fdHlwZT09VEtfVE9LRU46ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAnPScgaW4gc2VsZi5fdG9rZW4gYW5kIG5vdCBkZWxpbToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl90b2tlbi5zdGFydHN3aXRoKCc9Jyk6CisgICAgICAgICAgICAgICAgICAgICNUb2tlbiBpcyBhIFdPUkQuLi4gYSBUT0tFTiB0aGF0IGlzLgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcHJldiA9IHNlbGYuX3Rva2VuWzpzZWxmLl90b2tlbi5maW5kKCc9JyldCisgICAgICAgICAgICAgICAgICAgIGlmIGlzX25hbWUocHJldik6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90eXBlID0gVEtfQVNTSUdOTUVOVAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgI0p1c3QgYSB0b2tlbiAodW5zcGVjaWZpZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlc2VydmVkID0gZ2V0X3Jlc2VydmVkKHNlbGYuX3Rva2VuKQorICAgICAgICAgICAgICAgIGlmIHJlc2VydmVkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBpZiByZXNlcnZlZD09J0luJyBhbmQgc2VsZi5fZm9yX2NvdW50IT0yOgorICAgICAgICAgICAgICAgICAgICAgICAgI1NvcnJ5LCBub3QgYSByZXNlcnZlZCB3b3JkIGFmdGVyIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdHlwZSA9IHJlc2VydmVkCisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXNlcnZlZCBpbiAoJ0ZvcicsICdDYXNlJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9yX2NvdW50ID0gMCAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZWxpZiBhcmVfZGlnaXRzKHNlbGYuX3Rva2VuKSBhbmQgZGVsaW0gaW4gKCc8JywgJz4nKToKKyAgICAgICAgICAgICAgICAgICAgI0RldGVjdCBJT19OVU1CRVIKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fdHlwZSA9IFRLX0lPTlVNQkVSCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl90b2tlbj09JzsnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl90eXBlID0gVEtfQ09NTUEKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX3Rva2VuPT0nJic6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBUS19BTVBFUlNBTkQKKyAgICAgICAgZWxpZiBzZWxmLl90eXBlPT1US19DT01NRU5UOgorICAgICAgICAgICAgI0NvbW1lbnRzIGFyZSBub3QgcGFydCBvZiBzaCBncmFtbWFyLCBpZ25vcmUgdGhlbQorICAgICAgICAgICAgc2VsZi5fdG9rZW4gPSAnJworICAgICAgICAgICAgc2VsZi5fdHlwZSA9IFRLX1RPS0VOCisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAKKyAgICAgICAgaWYgc2VsZi5fZm9yX2NvdW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgI1RyYWNrIHRva2VuIGNvdW50IGluICdGb3InIGV4cHJlc3Npb24gdG8gZGV0ZWN0ICdJbicgcmVzZXJ2ZWQgd29yZHMuCisgICAgICAgICAgICAjQ2FuIG9ubHkgYmUgaW4gdGhpcmQgcG9zaXRpb24sIG5vIG5lZWQgdG8gZ28gYmV5b25kCisgICAgICAgICAgICBzZWxmLl9mb3JfY291bnQgKz0gMQorICAgICAgICAgICAgaWYgc2VsZi5fZm9yX2NvdW50PT0zOgorICAgICAgICAgICAgICAgIHNlbGYuX2Zvcl9jb3VudCA9IE5vbmUKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgc2VsZi5vbl90b2tlbigoc2VsZi5fdG9rZW4sIHNlbGYuX3R5cGUpKQorICAgICAgICBzZWxmLl90b2tlbiA9ICcnCisgICAgICAgIHNlbGYuX3R5cGUgPSBUS19UT0tFTgorICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgZGVmIG9uX3Rva2VuKHNlbGYsIHRva2VuKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICAgICAgICAgICAKKwordG9rZW5zID0gWworICAgIFRLX1RPS0VOLAorIyBUbyBzaWxlbmNlIHlhY2MgdW51c2VkIHRva2VuIHdhcm5pbmdzCisjICAgIFRLX0NPTU1FTlQsCisgICAgVEtfTkVXTElORSwKKyAgICBUS19JT05VTUJFUiwKKyAgICBUS19BU1NJR05NRU5ULAorICAgIFRLX0hFUkVOQU1FLAorXSAgICAgICAgICAgIAorCisjQWRkIHNwZWNpZmljIG9wZXJhdG9ycwordG9rZW5zICs9IF9PUEVSQVRPUlMudmFsdWVzKCkKKyNBZGQgcmVzZXJ2ZWQgd29yZHMKK3Rva2VucyArPSBfUkVTRVJWRURTLnZhbHVlcygpCisgICAgICAgICAgICAKK2NsYXNzIFBMWUxleGVyKExleGVyKToKKyAgICAiIiJCcmlkZ2UgTGV4ZXIgYW5kIFBMWSBsZXhlciBpbnRlcmZhY2UuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBMZXhlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl90b2tlbnMgPSBbXQorICAgICAgICBzZWxmLl9jdXJyZW50ID0gMAorICAgICAgICBzZWxmLmxpbmVubyA9IDAKKworICAgIGRlZiBvbl90b2tlbihzZWxmLCB0b2tlbik6CisgICAgICAgIHZhbHVlLCB0eXBlID0gdG9rZW4KKworICAgICAgICBzZWxmLmxpbmVubyA9IDAKKyAgICAgICAgdCA9IGxleC5MZXhUb2tlbigpCisgICAgICAgIHQudmFsdWUgPSB2YWx1ZQorICAgICAgICB0LnR5cGUgPSB0eXBlCisgICAgICAgIHQubGV4ZXIgPSBzZWxmCisgICAgICAgIHQubGV4cG9zID0gMAorICAgICAgICB0LmxpbmVubyA9IDAKKyAgICAgICAgCisgICAgICAgIHNlbGYuX3Rva2Vucy5hcHBlbmQodCkKKyAgICAgICAgCisgICAgZGVmIGlzX2VtcHR5KHNlbGYpOgorICAgICAgICByZXR1cm4gbm90IGJvb2woc2VsZi5fdG9rZW5zKQorICAgICAgICAKKyAgICAjUExZIGNvbXBsaWFudCBpbnRlcmZhY2UKKyAgICBkZWYgdG9rZW4oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2N1cnJlbnQ+PWxlbihzZWxmLl90b2tlbnMpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgdCA9IHNlbGYuX3Rva2Vuc1tzZWxmLl9jdXJyZW50XQorICAgICAgICBzZWxmLl9jdXJyZW50ICs9IDEKKyAgICAgICAgcmV0dXJuIHQgICAgICAKKyAgICAgICAgCisgICAgICAgIAorZGVmIGdldF90b2tlbnMocyk6CisgICAgIiIiUGFyc2UgdGhlIGlucHV0IHN0cmluZyBhbmQgcmV0dXJuIGEgdHVwbGUgKHRva2VucywgdW5wcm9jZXNzZWQpIHdoZXJlCisgICAgdG9rZW5zIGlzIGEgbGlzdCBvZiBwYXJzZWQgdG9rZW5zIGFuZCB1bnByb2Nlc3NlZCBpcyB0aGUgcGFydCBvZiB0aGUgaW5wdXQKKyAgICBzdHJpbmcgbGVmdCB1bnRvdWNoZWQgYnkgdGhlIGxleGVyLgorICAgICIiIgorICAgIGxleGVyID0gUExZTGV4ZXIoKQorICAgIHVudG91Y2hlZCA9IGxleGVyLmFkZChzLCBUcnVlKSAKKyAgICB0b2tlbnMgPSBbXQorICAgIHdoaWxlIDE6CisgICAgICAgIHRva2VuID0gbGV4ZXIudG9rZW4oKQorICAgICAgICBpZiB0b2tlbiBpcyBOb25lOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgdG9rZW5zLmFwcGVuZCh0b2tlbikKKyAgICAgICAgCisgICAgdG9rZW5zID0gWyh0LnZhbHVlLCB0LnR5cGUpIGZvciB0IGluIHRva2Vuc10KKyAgICByZXR1cm4gdG9rZW5zLCB1bnRvdWNoZWQgICAgICAgIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL3B5c2h5YWNjLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL3B5c2h5YWNjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZTgwYWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvcHlzaHlhY2MucHkKQEAgLTAsMCArMSw3NzkgQEAKKyMgcHlzaHlhY2MucHkgLSBQTFkgZ3JhbW1hciBkZWZpbml0aW9uIGZvciBweXNoCisjCisjIENvcHlyaWdodCAyMDA3IFBhdHJpY2sgTWV6YXJkCisjCisjIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKworIiIiUExZIGdyYW1tYXIgZmlsZS4KKyIiIgoraW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzeXMKKworaW1wb3J0IHB5c2hsZXgKK3Rva2VucyA9IHB5c2hsZXgudG9rZW5zCisKK2Zyb20gcGx5IGltcG9ydCB5YWNjCitpbXBvcnQgc2hlcnJvcnMKKyAgICAKK2NsYXNzIElPUmVkaXJlY3Q6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wLCBmaWxlbmFtZSwgaW9fbnVtYmVyPU5vbmUpOgorICAgICAgICBzZWxmLm9wID0gb3AKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYuaW9fbnVtYmVyID0gaW9fbnVtYmVyCisgICAgICAgIAorY2xhc3MgSGVyZURvY3VtZW50OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcCwgbmFtZSwgY29udGVudCwgaW9fbnVtYmVyPU5vbmUpOgorICAgICAgICBzZWxmLm9wID0gb3AKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmNvbnRlbnQgPSBjb250ZW50CisgICAgICAgIHNlbGYuaW9fbnVtYmVyID0gaW9fbnVtYmVyCisKK2RlZiBtYWtlX2lvX3JlZGlyZWN0KHApOgorICAgICIiIk1ha2UgYW4gSU9SZWRpcmVjdCBpbnN0YW5jZSBmcm9tIHRoZSBpbnB1dCAnaW9fcmVkaXJlY3QnIHByb2R1Y3Rpb24uIiIiCisgICAgbmFtZSwgaW9fbnVtYmVyLCBpb190YXJnZXQgPSBwCisgICAgYXNzZXJ0IG5hbWU9PSdpb19yZWRpcmVjdCcKKyAgICAKKyAgICBpZiBpb190YXJnZXRbMF09PSdpb19maWxlJzoKKyAgICAgICAgaW9fdHlwZSwgaW9fb3AsIGlvX2ZpbGUgPSBpb190YXJnZXQKKyAgICAgICAgcmV0dXJuIElPUmVkaXJlY3QoaW9fb3AsIGlvX2ZpbGUsIGlvX251bWJlcikKKyAgICBlbGlmIGlvX3RhcmdldFswXT09J2lvX2hlcmUnOgorICAgICAgICBpb190eXBlLCBpb19vcCwgaW9fbmFtZSwgaW9fY29udGVudCA9IGlvX3RhcmdldAorICAgICAgICByZXR1cm4gSGVyZURvY3VtZW50KGlvX29wLCBpb19uYW1lLCBpb19jb250ZW50LCBpb19udW1iZXIpCisgICAgZWxzZToKKyAgICAgICAgYXNzZXJ0IEZhbHNlLCAiSW52YWxpZCBJTyByZWRpcmVjdGlvbiB0b2tlbiAlcyIgJSByZXByKGlvX3R5cGUpCisgICAgICAgIAorY2xhc3MgU2ltcGxlQ29tbWFuZDoKKyAgICAiIiIKKyAgICBhc3NpZ25zIGNvbnRhaW5zIChuYW1lLCB2YWx1ZSkgcGFpcnMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdvcmRzLCByZWRpcnMsIGFzc2lnbnMpOgorICAgICAgICBzZWxmLndvcmRzID0gbGlzdCh3b3JkcykKKyAgICAgICAgc2VsZi5yZWRpcnMgPSBsaXN0KHJlZGlycykKKyAgICAgICAgc2VsZi5hc3NpZ25zID0gbGlzdChhc3NpZ25zKQorCitjbGFzcyBQaXBlbGluZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZHMsIHJldmVyc2Vfc3RhdHVzPUZhbHNlKToKKyAgICAgICAgc2VsZi5jb21tYW5kcyA9IGxpc3QoY29tbWFuZHMpCisgICAgICAgIGFzc2VydCBzZWxmLmNvbW1hbmRzICAgICNHcmFtbWFyIGZvcmJpZHMgdGhpcworICAgICAgICBzZWxmLnJldmVyc2Vfc3RhdHVzID0gcmV2ZXJzZV9zdGF0dXMKKyAgICAgICAgCitjbGFzcyBBbmRPcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3AsIGxlZnQsIHJpZ2h0KToKKyAgICAgICAgc2VsZi5vcCA9IHN0cihvcCkKKyAgICAgICAgc2VsZi5sZWZ0ID0gbGVmdAorICAgICAgICBzZWxmLnJpZ2h0ID0gcmlnaHQKKyAgICAgICAgCitjbGFzcyBGb3JMb29wOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBpdGVtcywgY21kcyk6CisgICAgICAgIHNlbGYubmFtZSA9IHN0cihuYW1lKQorICAgICAgICBzZWxmLml0ZW1zID0gbGlzdChpdGVtcykKKyAgICAgICAgc2VsZi5jbWRzID0gbGlzdChjbWRzKQorICAgICAgICAKK2NsYXNzIFdoaWxlTG9vcDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZGl0aW9uLCBjbWRzKToKKyAgICAgICAgc2VsZi5jb25kaXRpb24gPSBsaXN0KGNvbmRpdGlvbikKKyAgICAgICAgc2VsZi5jbWRzID0gbGlzdChjbWRzKQorICAgICAgICAKK2NsYXNzIFVudGlsTG9vcDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZGl0aW9uLCBjbWRzKToKKyAgICAgICAgc2VsZi5jb25kaXRpb24gPSBsaXN0KGNvbmRpdGlvbikKKyAgICAgICAgc2VsZi5jbWRzID0gbGlzdChjbWRzKQorCitjbGFzcyBGdW5EZWY6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGJvZHkpOgorICAgICAgICBzZWxmLm5hbWUgPSBzdHIobmFtZSkKKyAgICAgICAgc2VsZi5ib2R5ID0gYm9keQorICAgICAgICAKK2NsYXNzIEJyYWNlR3JvdXA6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZHMpOgorICAgICAgICBzZWxmLmNtZHMgPSBsaXN0KGNtZHMpCisgICAgICAgIAorY2xhc3MgSWZDb25kOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25kLCBpZl9jbWRzLCBlbHNlX2NtZHMpOgorICAgICAgICBzZWxmLmNvbmQgPSBsaXN0KGNvbmQpCisgICAgICAgIHNlbGYuaWZfY21kcyA9IGlmX2NtZHMKKyAgICAgICAgc2VsZi5lbHNlX2NtZHMgPSBlbHNlX2NtZHMKKworY2xhc3MgQ2FzZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgaXRlbXMpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuaXRlbXMgPSBpdGVtcworICAgICAgICAKK2NsYXNzIFN1YlNoZWxsOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbWRzKToKKyAgICAgICAgc2VsZi5jbWRzID0gY21kcworCitjbGFzcyBSZWRpcmVjdExpc3Q6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZCwgcmVkaXJzKToKKyAgICAgICAgc2VsZi5jbWQgPSBjbWQKKyAgICAgICAgc2VsZi5yZWRpcnMgPSBsaXN0KHJlZGlycykKKyAgICAgICAgCitkZWYgZ2V0X3Byb2R1Y3Rpb24ocHJvZHVjdGlvbnMsIHB0eXBlKToKKyAgICAiIiJwcm9kdWN0aW9ucyBtdXN0IGJlIGEgbGlzdCBvZiBwcm9kdWN0aW9uIHR1cGxlcyBsaWtlIChuYW1lLCBvYmopIHdoZXJlCisgICAgbmFtZSBpcyB0aGUgcHJvZHVjdGlvbiBzdHJpbmcgaWRlbnRpZmllci4KKyAgICBSZXR1cm4gdGhlIGZpcnN0IHByb2R1Y3Rpb24gbmFtZWQgJ3B0eXBlJy4gUmFpc2UgS2V5RXJyb3IgaWYgTm9uZSBjYW4gYmUKKyAgICBmb3VuZC4KKyAgICAiIiIKKyAgICBmb3IgcHJvZHVjdGlvbiBpbiBwcm9kdWN0aW9uczoKKyAgICAgICAgaWYgcHJvZHVjdGlvbiBpcyBub3QgTm9uZSBhbmQgcHJvZHVjdGlvblswXT09cHR5cGU6CisgICAgICAgICAgICByZXR1cm4gcHJvZHVjdGlvbgorICAgIHJhaXNlIEtleUVycm9yKHB0eXBlKQorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUExZIGdyYW1tYXIgZGVmaW5pdGlvbgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHBfbXVsdGlwbGVfY29tbWFuZHMocCk6CisgICAgIiIibXVsdGlwbGVfY29tbWFuZHMgOiBuZXdsaW5lX3NlcXVlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb21wbGV0ZV9jb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgfCBtdWx0aXBsZV9jb21tYW5kcyBjb21wbGV0ZV9jb21tYW5kIiIiCisgICAgaWYgbGVuKHApPT0yOgorICAgICAgICBpZiBwWzFdIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcFswXSA9IFtwWzFdXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcFswXSA9IFtdCisgICAgZWxzZToKKyAgICAgICAgcFswXSA9IHBbMV0gKyBbcFsyXV0KKworZGVmIHBfY29tcGxldGVfY29tbWFuZChwKToKKyAgICAiIiJjb21wbGV0ZV9jb21tYW5kIDogbGlzdCBzZXBhcmF0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgbGlzdCIiIgorICAgIGlmIGxlbihwKT09MyBhbmQgcFsyXSBhbmQgcFsyXVsxXSA9PSAnJic6CisgICAgICAgIHBbMF0gPSAoJ2FzeW5jJywgcFsxXSkKKyAgICBlbHNlOgorICAgICAgICBwWzBdID0gcFsxXQorICAgICAgICAgICAgICAgICAKK2RlZiBwX2xpc3QocCk6CisgICAgIiIibGlzdCA6IGxpc3Qgc2VwYXJhdG9yX29wIGFuZF9vcgorICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBhbmRfb3IiIiIKKyAgICBpZiBsZW4ocCk9PTI6CisgICAgICAgIHBbMF0gPSBbcFsxXV0KKyAgICBlbHNlOgorICAgICAgICAjaWYgcFsyXSE9JzsnOgorICAgICAgICAjICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0FORC1PUiBsaXN0IGFzeW5jaHJvbm91cyBleGVjdXRpb24gaXMgbm90IGltcGxlbWVudGVkJykKKyAgICAgICAgcFswXSA9IHBbMV0gKyBbcFszXV0KKyAgICAgICAKK2RlZiBwX2FuZF9vcihwKToKKyAgICAiIiJhbmRfb3IgOiBwaXBlbGluZQorICAgICAgICAgICAgICB8IGFuZF9vciBBTkRfSUYgbGluZWJyZWFrIHBpcGVsaW5lCisgICAgICAgICAgICAgIHwgYW5kX29yIE9SX0lGICBsaW5lYnJlYWsgcGlwZWxpbmUiIiIKKyAgICBpZiBsZW4ocCk9PTI6CisgICAgICAgIHBbMF0gPSBwWzFdCisgICAgZWxzZToKKyAgICAgICAgcFswXSA9ICgnYW5kX29yJywgQW5kT3IocFsyXSwgcFsxXSwgcFs0XSkpCisgICAgICAgIAorZGVmIHBfbWF5YmVfYmFuZ193b3JkKHApOgorICAgICIiIm1heWJlX2Jhbmdfd29yZCA6IEJhbmciIiIKKyAgICBwWzBdID0gKCdtYXliZV9iYW5nX3dvcmQnLCBwWzFdKQorICAgICAgICAgICAgCitkZWYgcF9waXBlbGluZShwKToKKyAgICAiIiJwaXBlbGluZSA6IHBpcGVfc2VxdWVuY2UKKyAgICAgICAgICAgICAgICB8IGJhbmdfd29yZCBwaXBlX3NlcXVlbmNlIiIiCisgICAgaWYgbGVuKHApPT0zOgorICAgICAgICBwWzBdID0gKCdwaXBlbGluZScsIFBpcGVsaW5lKHBbMl1bMTpdLCBUcnVlKSkKKyAgICBlbHNlOgorICAgICAgICBwWzBdID0gKCdwaXBlbGluZScsIFBpcGVsaW5lKHBbMV1bMTpdKSkKKworZGVmIHBfcGlwZV9zZXF1ZW5jZShwKToKKyAgICAiIiJwaXBlX3NlcXVlbmNlIDogY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgfCBwaXBlX3NlcXVlbmNlIFBJUEUgbGluZWJyZWFrIGNvbW1hbmQiIiIKKyAgICBpZiBsZW4ocCk9PTI6CisgICAgICAgIHBbMF0gPSBbJ3BpcGVfc2VxdWVuY2UnLCBwWzFdXQorICAgIGVsc2U6CisgICAgICAgIHBbMF0gPSBwWzFdICsgW3BbNF1dCisKK2RlZiBwX2NvbW1hbmQocCk6CisgICAgIiIiY29tbWFuZCA6IHNpbXBsZV9jb21tYW5kCisgICAgICAgICAgICAgICB8IGNvbXBvdW5kX2NvbW1hbmQKKyAgICAgICAgICAgICAgIHwgY29tcG91bmRfY29tbWFuZCByZWRpcmVjdF9saXN0CisgICAgICAgICAgICAgICB8IGZ1bmN0aW9uX2RlZmluaXRpb24iIiIKKyAgICAgICAgCisgICAgaWYgcFsxXVswXSBpbiAoICdzaW1wbGVfY29tbWFuZCcsIAorICAgICAgICAgICAgICAgICAgICAnZm9yX2NsYXVzZScsCisgICAgICAgICAgICAgICAgICAgICd3aGlsZV9jbGF1c2UnLAorICAgICAgICAgICAgICAgICAgICAndW50aWxfY2xhdXNlJywKKyAgICAgICAgICAgICAgICAgICAgJ2Nhc2VfY2xhdXNlJywKKyAgICAgICAgICAgICAgICAgICAgJ2lmX2NsYXVzZScsCisgICAgICAgICAgICAgICAgICAgICdmdW5jdGlvbl9kZWZpbml0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgJ3N1YnNoZWxsJywKKyAgICAgICAgICAgICAgICAgICAgJ2JyYWNlX2dyb3VwJywpOgorICAgICAgICBpZiBsZW4ocCkgPT0gMjoKKyAgICAgICAgICAgIHBbMF0gPSBwWzFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwWzBdID0gKCdyZWRpcmVjdF9saXN0JywgUmVkaXJlY3RMaXN0KHBbMV0sIHBbMl1bMTpdKSkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCclcyBjb21tYW5kIGlzIG5vdCBpbXBsZW1lbnRlZCcgJSByZXByKHBbMV1bMF0pKQorCitkZWYgcF9jb21wb3VuZF9jb21tYW5kKHApOgorICAgICIiImNvbXBvdW5kX2NvbW1hbmQgOiBicmFjZV9ncm91cAorICAgICAgICAgICAgICAgICAgICAgICAgfCBzdWJzaGVsbAorICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JfY2xhdXNlCisgICAgICAgICAgICAgICAgICAgICAgICB8IGNhc2VfY2xhdXNlCisgICAgICAgICAgICAgICAgICAgICAgICB8IGlmX2NsYXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGlsZV9jbGF1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgdW50aWxfY2xhdXNlIiIiCisgICAgcFswXSA9IHBbMV0KKworZGVmIHBfc3Vic2hlbGwocCk6CisgICAgIiIic3Vic2hlbGwgOiBMUEFSRU5TIGNvbXBvdW5kX2xpc3QgUlBBUkVOUyIiIgorICAgIHBbMF0gPSAoJ3N1YnNoZWxsJywgU3ViU2hlbGwocFsyXVsxOl0pKQorCitkZWYgcF9jb21wb3VuZF9saXN0KHApOgorICAgICIiImNvbXBvdW5kX2xpc3QgOiB0ZXJtCisgICAgICAgICAgICAgICAgICAgICB8IG5ld2xpbmVfbGlzdCB0ZXJtCisgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB0ZXJtIHNlcGFyYXRvcgorICAgICAgICAgICAgICAgICAgICAgfCBuZXdsaW5lX2xpc3QgdGVybSBzZXBhcmF0b3IiIiIKKyAgICBwcm9kdWN0aW9ucyA9IHBbMTpdICAgICAgICAgICAKKyAgICB0cnk6CisgICAgICAgIHNlcCA9IGdldF9wcm9kdWN0aW9uKHByb2R1Y3Rpb25zLCAnc2VwYXJhdG9yJykKKyAgICAgICAgaWYgc2VwWzFdIT0nOyc6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHBhc3MKKyAgICB0ZXJtID0gZ2V0X3Byb2R1Y3Rpb24ocHJvZHVjdGlvbnMsICd0ZXJtJykKKyAgICBwWzBdID0gWydjb21wb3VuZF9saXN0J10gKyB0ZXJtWzE6XQorCitkZWYgcF90ZXJtKHApOgorICAgICIiInRlcm0gOiB0ZXJtIHNlcGFyYXRvciBhbmRfb3IKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgYW5kX29yIiIiCisgICAgaWYgbGVuKHApPT0yOgorICAgICAgICBwWzBdID0gWyd0ZXJtJywgcFsxXV0KKyAgICBlbHNlOgorICAgICAgICBpZiBwWzJdIGlzIG5vdCBOb25lIGFuZCBwWzJdWzFdID09ICcmJzoKKyAgICAgICAgICAgIHBbMF0gPSBbJ3Rlcm0nLCAoJ2FzeW5jJywgcFsxXVsxOl0pXSArIFtwWzNdXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcFswXSA9IHBbMV0gKyBbcFszXV0KKyAgICAgICAgICAgIAorZGVmIHBfbWF5YmVfZm9yX3dvcmQocCk6CisgICAgIyBSZWFycmFuZ2UgJ0ZvcicgcHJpb3JpdHkgd3J0IFRPS0VOLiBTZWUgcF9mb3Jfd29yZAorICAgICIiIm1heWJlX2Zvcl93b3JkIDogRm9yIiIiCisgICAgcFswXSA9ICgnbWF5YmVfZm9yX3dvcmQnLCBwWzFdKQorCitkZWYgcF9mb3JfY2xhdXNlKHApOgorICAgICIiImZvcl9jbGF1c2UgOiBmb3Jfd29yZCBuYW1lIGxpbmVicmVhayAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19ncm91cAorICAgICAgICAgICAgICAgICAgfCBmb3Jfd29yZCBuYW1lIGxpbmVicmVhayBpbiAgICAgICAgICBzZXF1ZW50aWFsX3NlcCBkb19ncm91cAorICAgICAgICAgICAgICAgICAgfCBmb3Jfd29yZCBuYW1lIGxpbmVicmVhayBpbiB3b3JkbGlzdCBzZXF1ZW50aWFsX3NlcCBkb19ncm91cCIiIgorICAgIHByb2R1Y3Rpb25zID0gcFsxOl0KKyAgICBkb19ncm91cCA9IGdldF9wcm9kdWN0aW9uKHByb2R1Y3Rpb25zLCAnZG9fZ3JvdXAnKQorICAgIHRyeToKKyAgICAgICAgaXRlbXMgPSBnZXRfcHJvZHVjdGlvbihwcm9kdWN0aW9ucywgJ2luJylbMTpdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCciaW4iIG9taXNzaW9uIGlzIG5vdCBpbXBsZW1lbnRlZCcpCisgICAgICAgIAorICAgIHRyeToKKyAgICAgICAgaXRlbXMgPSBnZXRfcHJvZHVjdGlvbihwcm9kdWN0aW9ucywgJ3dvcmRsaXN0JylbMTpdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBpdGVtcyA9IFtdCisgICAgICAgIAorICAgIG5hbWUgPSBwWzJdCisgICAgcFswXSA9ICgnZm9yX2NsYXVzZScsIEZvckxvb3AobmFtZSwgaXRlbXMsIGRvX2dyb3VwWzE6XSkpCisKK2RlZiBwX25hbWUocCk6CisgICAgIiIibmFtZSA6IHRva2VuIiIiICNXYXMgTkFNRSBpbnN0ZWFkIG9mIHRva2VuCisgICAgcFswXSA9IHBbMV0KKworZGVmIHBfaW4ocCk6CisgICAgIiIiaW4gOiBJbiIiIgorICAgIHBbMF0gPSAoJ2luJywgcFsxXSkKKworZGVmIHBfd29yZGxpc3QocCk6CisgICAgIiIid29yZGxpc3QgOiB3b3JkbGlzdCB0b2tlbgorICAgICAgICAgICAgICAgIHwgICAgICAgICAgdG9rZW4iIiIKKyAgICBpZiBsZW4ocCk9PTI6CisgICAgICAgIHBbMF0gPSBbJ3dvcmRsaXN0JywgKCdUT0tFTicsIHBbMV0pXQorICAgIGVsc2U6CisgICAgICAgIHBbMF0gPSBwWzFdICsgWygnVE9LRU4nLCBwWzJdKV0KKworZGVmIHBfY2FzZV9jbGF1c2UocCk6CisgICAgIiIiY2FzZV9jbGF1c2UgOiBDYXNlIHRva2VuIGxpbmVicmVhayBpbiBsaW5lYnJlYWsgY2FzZV9saXN0ICAgIEVzYWMKKyAgICAgICAgICAgICAgICAgICB8IENhc2UgdG9rZW4gbGluZWJyZWFrIGluIGxpbmVicmVhayBjYXNlX2xpc3RfbnMgRXNhYworICAgICAgICAgICAgICAgICAgIHwgQ2FzZSB0b2tlbiBsaW5lYnJlYWsgaW4gbGluZWJyZWFrICAgICAgICAgICAgICBFc2FjIiIiCisgICAgaWYgbGVuKHApIDwgODoKKyAgICAgICAgaXRlbXMgPSBbXQorICAgIGVsc2U6CisgICAgICAgIGl0ZW1zID0gcFs2XVsxOl0KKyAgICBuYW1lID0gcFsyXQorICAgIHBbMF0gPSAoJ2Nhc2VfY2xhdXNlJywgQ2FzZShuYW1lLCBbY1sxXSBmb3IgYyBpbiBpdGVtc10pKQorICAgICAgIAorZGVmIHBfY2FzZV9saXN0X25zKHApOgorICAgICIiImNhc2VfbGlzdF9ucyA6IGNhc2VfbGlzdCBjYXNlX2l0ZW1fbnMKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgY2FzZV9pdGVtX25zIiIiCisgICAgcF9jYXNlX2xpc3QocCkKKyAgICAgIAorZGVmIHBfY2FzZV9saXN0KHApOgorICAgICIiImNhc2VfbGlzdCA6IGNhc2VfbGlzdCBjYXNlX2l0ZW0KKyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgY2FzZV9pdGVtIiIiCisgICAgaWYgbGVuKHApPT0yOgorICAgICAgICBwWzBdID0gWydjYXNlX2xpc3QnLCBwWzFdXQorICAgIGVsc2U6CisgICAgICAgIHBbMF0gPSBwWzFdICsgW3BbMl1dCisgICAgICAgIAorZGVmIHBfY2FzZV9pdGVtX25zKHApOgorICAgICIiImNhc2VfaXRlbV9ucyA6ICAgICAgICAgcGF0dGVybiBSUEFSRU5TICAgICAgICAgICAgICAgbGluZWJyZWFrCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICBwYXR0ZXJuIFJQQVJFTlMgY29tcG91bmRfbGlzdCBsaW5lYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgfCBMUEFSRU5TIHBhdHRlcm4gUlBBUkVOUyAgICAgICAgICAgICAgIGxpbmVicmVhaworICAgICAgICAgICAgICAgICAgICB8IExQQVJFTlMgcGF0dGVybiBSUEFSRU5TIGNvbXBvdW5kX2xpc3QgbGluZWJyZWFrIiIiCisgICAgcF9jYXNlX2l0ZW0ocCkKKyAgICAgICAgICAgICAgICAgCitkZWYgcF9jYXNlX2l0ZW0ocCk6CisgICAgIiIiY2FzZV9pdGVtIDogICAgICAgICBwYXR0ZXJuIFJQQVJFTlMgbGluZWJyZWFrICAgICBEU0VNSSBsaW5lYnJlYWsKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgIHBhdHRlcm4gUlBBUkVOUyBjb21wb3VuZF9saXN0IERTRU1JIGxpbmVicmVhaworICAgICAgICAgICAgICAgICB8IExQQVJFTlMgcGF0dGVybiBSUEFSRU5TIGxpbmVicmVhayAgICAgRFNFTUkgbGluZWJyZWFrCisgICAgICAgICAgICAgICAgIHwgTFBBUkVOUyBwYXR0ZXJuIFJQQVJFTlMgY29tcG91bmRfbGlzdCBEU0VNSSBsaW5lYnJlYWsiIiIKKyAgICBpZiBsZW4ocCkgPCA3OgorICAgICAgICBuYW1lID0gcFsxXVsxOl0KKyAgICBlbHNlOgorICAgICAgICBuYW1lID0gcFsyXVsxOl0KKworICAgIHRyeToKKyAgICAgICAgY21kcyA9IGdldF9wcm9kdWN0aW9uKHBbMTpdLCAiY29tcG91bmRfbGlzdCIpWzE6XQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgY21kcyA9IFtdCisKKyAgICBwWzBdID0gKCdjYXNlX2l0ZW0nLCAobmFtZSwgY21kcykpCisgICAgICAgICAgICAgICAgIAorZGVmIHBfcGF0dGVybihwKToKKyAgICAiIiJwYXR0ZXJuIDogICAgICAgICAgICAgIHRva2VuCisgICAgICAgICAgICAgICB8IHBhdHRlcm4gUElQRSB0b2tlbiIiIgorICAgIGlmIGxlbihwKT09MjoKKyAgICAgICAgcFswXSA9IFsncGF0dGVybicsICgnVE9LRU4nLCBwWzFdKV0KKyAgICBlbHNlOgorICAgICAgICBwWzBdID0gcFsxXSArIFsoJ1RPS0VOJywgcFsyXSldCisKK2RlZiBwX21heWJlX2lmX3dvcmQocCk6CisgICAgIyBSZWFycmFuZ2UgJ0lmJyBwcmlvcml0eSB3cnQgVE9LRU4uIFNlZSBwX2lmX3dvcmQKKyAgICAiIiJtYXliZV9pZl93b3JkIDogSWYiIiIKKyAgICBwWzBdID0gKCdtYXliZV9pZl93b3JkJywgcFsxXSkKKworZGVmIHBfbWF5YmVfdGhlbl93b3JkKHApOgorICAgICMgUmVhcnJhbmdlICdUaGVuJyBwcmlvcml0eSB3cnQgVE9LRU4uIFNlZSBwX3RoZW5fd29yZAorICAgICIiIm1heWJlX3RoZW5fd29yZCA6IFRoZW4iIiIKKyAgICBwWzBdID0gKCdtYXliZV90aGVuX3dvcmQnLCBwWzFdKQorICAgICAgICAgICAgICAgICAKK2RlZiBwX2lmX2NsYXVzZShwKToKKyAgICAiIiJpZl9jbGF1c2UgOiBpZl93b3JkIGNvbXBvdW5kX2xpc3QgdGhlbl93b3JkIGNvbXBvdW5kX2xpc3QgZWxzZV9wYXJ0IEZpCisgICAgICAgICAgICAgICAgIHwgaWZfd29yZCBjb21wb3VuZF9saXN0IHRoZW5fd29yZCBjb21wb3VuZF9saXN0ICAgICAgICAgICBGaSIiIgorICAgIGVsc2VfcGFydCA9IFtdCisgICAgaWYgbGVuKHApPT03OgorICAgICAgICBlbHNlX3BhcnQgPSBwWzVdCisgICAgcFswXSA9ICgnaWZfY2xhdXNlJywgSWZDb25kKHBbMl1bMTpdLCBwWzRdWzE6XSwgZWxzZV9wYXJ0KSkKKyAgICAgICAgICAgICAgICAgCitkZWYgcF9lbHNlX3BhcnQocCk6CisgICAgIiIiZWxzZV9wYXJ0IDogRWxpZiBjb21wb3VuZF9saXN0IHRoZW5fd29yZCBjb21wb3VuZF9saXN0IGVsc2VfcGFydAorICAgICAgICAgICAgICAgICB8IEVsaWYgY29tcG91bmRfbGlzdCB0aGVuX3dvcmQgY29tcG91bmRfbGlzdAorICAgICAgICAgICAgICAgICB8IEVsc2UgY29tcG91bmRfbGlzdCIiIgorICAgIGlmIGxlbihwKT09MzoKKyAgICAgICAgcFswXSA9IHBbMl1bMTpdCisgICAgZWxzZToKKyAgICAgICAgZWxzZV9wYXJ0ID0gW10KKyAgICAgICAgaWYgbGVuKHApPT02OgorICAgICAgICAgICAgZWxzZV9wYXJ0ID0gcFs1XQorICAgICAgICBwWzBdID0gKCdlbGlmJywgSWZDb25kKHBbMl1bMTpdLCBwWzRdWzE6XSwgZWxzZV9wYXJ0KSkKKyAgICAgICAgICAgICAgICAgCitkZWYgcF93aGlsZV9jbGF1c2UocCk6CisgICAgIiIid2hpbGVfY2xhdXNlIDogV2hpbGUgY29tcG91bmRfbGlzdCBkb19ncm91cCIiIgorICAgIHBbMF0gPSAoJ3doaWxlX2NsYXVzZScsIFdoaWxlTG9vcChwWzJdWzE6XSwgcFszXVsxOl0pKQorICAgIAorZGVmIHBfbWF5YmVfdW50aWxfd29yZChwKToKKyAgICAjIFJlYXJyYW5nZSAnVW50aWwnIHByaW9yaXR5IHdydCBUT0tFTi4gU2VlIHBfdW50aWxfd29yZAorICAgICIiIm1heWJlX3VudGlsX3dvcmQgOiBVbnRpbCIiIgorICAgIHBbMF0gPSAoJ21heWJlX3VudGlsX3dvcmQnLCBwWzFdKQorICAgICAgICAgICAKK2RlZiBwX3VudGlsX2NsYXVzZShwKToKKyAgICAiIiJ1bnRpbF9jbGF1c2UgOiB1bnRpbF93b3JkIGNvbXBvdW5kX2xpc3QgZG9fZ3JvdXAiIiIKKyAgICBwWzBdID0gKCd1bnRpbF9jbGF1c2UnLCBVbnRpbExvb3AocFsyXVsxOl0sIHBbM11bMTpdKSkKKyAgICAgICAgICAgICAgICAgCitkZWYgcF9mdW5jdGlvbl9kZWZpbml0aW9uKHApOgorICAgICIiImZ1bmN0aW9uX2RlZmluaXRpb24gOiBmbmFtZSBMUEFSRU5TIFJQQVJFTlMgbGluZWJyZWFrIGZ1bmN0aW9uX2JvZHkiIiIKKyAgICBwWzBdID0gKCdmdW5jdGlvbl9kZWZpbml0aW9uJywgRnVuRGVmKHBbMV0sIHBbNV0pKQorICAgICAgICAgICAgICAgICAKK2RlZiBwX2Z1bmN0aW9uX2JvZHkocCk6CisgICAgIiIiZnVuY3Rpb25fYm9keSA6IGNvbXBvdW5kX2NvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgIHwgY29tcG91bmRfY29tbWFuZCByZWRpcmVjdF9saXN0IiIiCisgICAgaWYgbGVuKHApIT0yOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdmdW5jdGlvbnMgcmVkaXJlY3Rpb25zIGxpc3RzIGFyZSBub3QgaW1wbGVtZW50ZWQnKSAgICAKKyAgICBwWzBdID0gcFsxXSAgICAKKworZGVmIHBfZm5hbWUocCk6CisgICAgIiIiZm5hbWUgOiBUT0tFTiIiIiAjV2FzIE5BTUUgaW5zdGVhZCBvZiB0b2tlbgorICAgIHBbMF0gPSBwWzFdCisKK2RlZiBwX2JyYWNlX2dyb3VwKHApOgorICAgICIiImJyYWNlX2dyb3VwIDogTGJyYWNlIGNvbXBvdW5kX2xpc3QgUmJyYWNlIiIiCisgICAgcFswXSA9ICgnYnJhY2VfZ3JvdXAnLCBCcmFjZUdyb3VwKHBbMl1bMTpdKSkKKworZGVmIHBfbWF5YmVfZG9uZV93b3JkKHApOgorICAgICNTZWUgcF9hc3NpZ25tZW50X3dvcmQgZm9yIGRldGFpbHMuCisgICAgIiIibWF5YmVfZG9uZV93b3JkIDogRG9uZSIiIgorICAgIHBbMF0gPSAoJ21heWJlX2RvbmVfd29yZCcsIHBbMV0pCisKK2RlZiBwX21heWJlX2RvX3dvcmQocCk6CisgICAgIiIibWF5YmVfZG9fd29yZCA6IERvIiIiCisgICAgcFswXSA9ICgnbWF5YmVfZG9fd29yZCcsIHBbMV0pCisKK2RlZiBwX2RvX2dyb3VwKHApOgorICAgICIiImRvX2dyb3VwIDogZG9fd29yZCBjb21wb3VuZF9saXN0IGRvbmVfd29yZCIiIgorICAgICNEbyBncm91cCBjb250YWlucyBhIGxpc3Qgb2YgQW5kT3IKKyAgICBwWzBdID0gWydkb19ncm91cCddICsgcFsyXVsxOl0KKworZGVmIHBfc2ltcGxlX2NvbW1hbmQocCk6CisgICAgIiIic2ltcGxlX2NvbW1hbmQgOiBjbWRfcHJlZml4IGNtZF93b3JkIGNtZF9zdWZmaXgKKyAgICAgICAgICAgICAgICAgICAgICB8IGNtZF9wcmVmaXggY21kX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgICB8IGNtZF9wcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgICB8IGNtZF9uYW1lIGNtZF9zdWZmaXgKKyAgICAgICAgICAgICAgICAgICAgICB8IGNtZF9uYW1lIiIiCisgICAgd29yZHMsIHJlZGlycywgYXNzaWducyA9IFtdLCBbXSwgW10KKyAgICBmb3IgZSBpbiBwWzE6XToKKyAgICAgICAgbmFtZSA9IGVbMF0KKyAgICAgICAgaWYgbmFtZSBpbiAoJ2NtZF9wcmVmaXgnLCAnY21kX3N1ZmZpeCcpOgorICAgICAgICAgICAgZm9yIHN1YmUgaW4gZVsxOl06CisgICAgICAgICAgICAgICAgc3VibmFtZSA9IHN1YmVbMF0KKyAgICAgICAgICAgICAgICBpZiBzdWJuYW1lPT0naW9fcmVkaXJlY3QnOgorICAgICAgICAgICAgICAgICAgICByZWRpcnMuYXBwZW5kKG1ha2VfaW9fcmVkaXJlY3Qoc3ViZSkpCisgICAgICAgICAgICAgICAgZWxpZiBzdWJuYW1lPT0nQVNTSUdOTUVOVF9XT1JEJzoKKyAgICAgICAgICAgICAgICAgICAgYXNzaWducy5hcHBlbmQoc3ViZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB3b3Jkcy5hcHBlbmQoc3ViZSkKKyAgICAgICAgZWxpZiBuYW1lIGluICgnY21kX3dvcmQnLCAnY21kX25hbWUnKToKKyAgICAgICAgICAgIHdvcmRzLmFwcGVuZChlKQorICAgICAgICAgICAgCisgICAgY21kID0gU2ltcGxlQ29tbWFuZCh3b3JkcywgcmVkaXJzLCBhc3NpZ25zKQorICAgIHBbMF0gPSAoJ3NpbXBsZV9jb21tYW5kJywgY21kKQorCitkZWYgcF9jbWRfbmFtZShwKToKKyAgICAiIiJjbWRfbmFtZSA6IFRPS0VOIiIiCisgICAgcFswXSA9ICgnY21kX25hbWUnLCBwWzFdKQorICAgIAorZGVmIHBfY21kX3dvcmQocCk6CisgICAgIiIiY21kX3dvcmQgOiB0b2tlbiIiIgorICAgIHBbMF0gPSAoJ2NtZF93b3JkJywgcFsxXSkKKworZGVmIHBfbWF5YmVfYXNzaWdubWVudF93b3JkKHApOgorICAgICNTZWUgcF9hc3NpZ25tZW50X3dvcmQgZm9yIGRldGFpbHMuCisgICAgIiIibWF5YmVfYXNzaWdubWVudF93b3JkIDogQVNTSUdOTUVOVF9XT1JEIiIiCisgICAgcFswXSA9ICgnbWF5YmVfYXNzaWdubWVudF93b3JkJywgcFsxXSkKKyAgICAKK2RlZiBwX2NtZF9wcmVmaXgocCk6CisgICAgIiIiY21kX3ByZWZpeCA6ICAgICAgICAgICAgaW9fcmVkaXJlY3QKKyAgICAgICAgICAgICAgICAgIHwgY21kX3ByZWZpeCBpb19yZWRpcmVjdAorICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIGFzc2lnbm1lbnRfd29yZAorICAgICAgICAgICAgICAgICAgfCBjbWRfcHJlZml4IGFzc2lnbm1lbnRfd29yZCIiIgorICAgIHRyeToKKyAgICAgICAgcHJlZml4ID0gZ2V0X3Byb2R1Y3Rpb24ocFsxOl0sICdjbWRfcHJlZml4JykKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHByZWZpeCA9IFsnY21kX3ByZWZpeCddCisgICAgICAgIAorICAgIHRyeToKKyAgICAgICAgdmFsdWUgPSBnZXRfcHJvZHVjdGlvbihwWzE6XSwgJ2Fzc2lnbm1lbnRfd29yZCcpWzFdCisgICAgICAgIHZhbHVlID0gKCdBU1NJR05NRU5UX1dPUkQnLCB2YWx1ZS5zcGxpdCgnPScsIDEpKQorICAgIGV4Y2VwdCBLZXlFcnJvcjogICAgICAgIAorICAgICAgICB2YWx1ZSA9IGdldF9wcm9kdWN0aW9uKHBbMTpdLCAnaW9fcmVkaXJlY3QnKQorICAgIHBbMF0gPSBwcmVmaXggKyBbdmFsdWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitkZWYgcF9jbWRfc3VmZml4KHApOgorICAgICIiImNtZF9zdWZmaXggICA6ICAgICAgICAgICAgaW9fcmVkaXJlY3QKKyAgICAgICAgICAgICAgICAgICAgfCBjbWRfc3VmZml4IGlvX3JlZGlyZWN0CisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB0b2tlbgorICAgICAgICAgICAgICAgICAgICB8IGNtZF9zdWZmaXggdG9rZW4KKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIG1heWJlX2Zvcl93b3JkCisgICAgICAgICAgICAgICAgICAgIHwgY21kX3N1ZmZpeCBtYXliZV9mb3Jfd29yZAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgbWF5YmVfZG9uZV93b3JkCisgICAgICAgICAgICAgICAgICAgIHwgY21kX3N1ZmZpeCBtYXliZV9kb25lX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIG1heWJlX2RvX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCBjbWRfc3VmZml4IG1heWJlX2RvX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIG1heWJlX3VudGlsX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCBjbWRfc3VmZml4IG1heWJlX3VudGlsX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIG1heWJlX2Fzc2lnbm1lbnRfd29yZAorICAgICAgICAgICAgICAgICAgICB8IGNtZF9zdWZmaXggbWF5YmVfYXNzaWdubWVudF93b3JkCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICBtYXliZV9pZl93b3JkCisgICAgICAgICAgICAgICAgICAgIHwgY21kX3N1ZmZpeCBtYXliZV9pZl93b3JkCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICBtYXliZV90aGVuX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCBjbWRfc3VmZml4IG1heWJlX3RoZW5fd29yZAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgbWF5YmVfYmFuZ193b3JkCisgICAgICAgICAgICAgICAgICAgIHwgY21kX3N1ZmZpeCBtYXliZV9iYW5nX3dvcmQiIiIKKyAgICB0cnk6CisgICAgICAgIHN1ZmZpeCA9IGdldF9wcm9kdWN0aW9uKHBbMTpdLCAnY21kX3N1ZmZpeCcpCisgICAgICAgIHRva2VuID0gcFsyXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgc3VmZml4ID0gWydjbWRfc3VmZml4J10KKyAgICAgICAgdG9rZW4gPSBwWzFdCisgICAgICAgIAorICAgIGlmIGlzaW5zdGFuY2UodG9rZW4sIHR1cGxlKToKKyAgICAgICAgaWYgdG9rZW5bMF09PSdpb19yZWRpcmVjdCc6CisgICAgICAgICAgICBwWzBdID0gc3VmZml4ICsgW3Rva2VuXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI0NvbnZlcnQgbWF5YmVfKiAgdG8gVE9LRU4gaWYgbmVjZXNzYXJ5CisgICAgICAgICAgICBwWzBdID0gc3VmZml4ICsgWygnVE9LRU4nLCB0b2tlblsxXSldCisgICAgZWxzZToKKyAgICAgICAgcFswXSA9IHN1ZmZpeCArIFsoJ1RPS0VOJywgdG9rZW4pXQorICAgICAgICAgICAgICAgICAKK2RlZiBwX3JlZGlyZWN0X2xpc3QocCk6CisgICAgIiIicmVkaXJlY3RfbGlzdCA6IGlvX3JlZGlyZWN0CisgICAgICAgICAgICAgICAgICAgICB8IHJlZGlyZWN0X2xpc3QgaW9fcmVkaXJlY3QiIiIKKyAgICBpZiBsZW4ocCkgPT0gMjoKKyAgICAgICAgcFswXSA9IFsncmVkaXJlY3RfbGlzdCcsIG1ha2VfaW9fcmVkaXJlY3QocFsxXSldCisgICAgZWxzZToKKyAgICAgICAgcFswXSA9IHBbMV0gKyBbbWFrZV9pb19yZWRpcmVjdChwWzJdKV0KKyAgICAKK2RlZiBwX2lvX3JlZGlyZWN0KHApOgorICAgICIiImlvX3JlZGlyZWN0IDogICAgICAgICAgIGlvX2ZpbGUKKyAgICAgICAgICAgICAgICAgICB8IElPX05VTUJFUiBpb19maWxlCisgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgaW9faGVyZQorICAgICAgICAgICAgICAgICAgIHwgSU9fTlVNQkVSIGlvX2hlcmUiIiIKKyAgICBpZiBsZW4ocCk9PTM6CisgICAgICAgIHBbMF0gPSAoJ2lvX3JlZGlyZWN0JywgcFsxXSwgcFsyXSkKKyAgICBlbHNlOgorICAgICAgICBwWzBdID0gKCdpb19yZWRpcmVjdCcsIE5vbmUsIHBbMV0pCisgICAgCitkZWYgcF9pb19maWxlKHApOgorICAgICNSZXR1cm4gdGhlIHR1cGxlIChvcGVyYXRvciwgZmlsZW5hbWUpCisgICAgIiIiaW9fZmlsZSA6IExFU1MgICAgICBmaWxlbmFtZQorICAgICAgICAgICAgICAgfCBMRVNTQU5EICAgZmlsZW5hbWUKKyAgICAgICAgICAgICAgIHwgR1JFQVRFUiAgIGZpbGVuYW1lCisgICAgICAgICAgICAgICB8IEdSRUFUQU5EICBmaWxlbmFtZQorICAgICAgICAgICAgICAgfCBER1JFQVQgICAgZmlsZW5hbWUKKyAgICAgICAgICAgICAgIHwgTEVTU0dSRUFUIGZpbGVuYW1lCisgICAgICAgICAgICAgICB8IENMT0JCRVIgICBmaWxlbmFtZSIiIgorICAgICNFeHRyYWN0IHRoZSBmaWxlbmFtZSBmcm9tIHRoZSBmaWxlCisgICAgcFswXSA9ICgnaW9fZmlsZScsIHBbMV0sIHBbMl1bMV0pCisKK2RlZiBwX2ZpbGVuYW1lKHApOgorICAgICNSZXR1cm4gdGhlIGZpbGVuYW1lCisgICAgIiIiZmlsZW5hbWUgOiBUT0tFTiIiIgorICAgIHBbMF0gPSAoJ2ZpbGVuYW1lJywgcFsxXSkKKyAgICAgICAgCitkZWYgcF9pb19oZXJlKHApOgorICAgICIiImlvX2hlcmUgOiBETEVTUyBoZXJlX2VuZAorICAgICAgICAgICAgICAgfCBETEVTU0RBU0ggaGVyZV9lbmQiIiIKKyAgICBwWzBdID0gKCdpb19oZXJlJywgcFsxXSwgcFsyXVsxXSwgcFsyXVsyXSkKKworZGVmIHBfaGVyZV9lbmQocCk6CisgICAgIiIiaGVyZV9lbmQgOiBIRVJFTkFNRSBUT0tFTiIiIgorICAgIHBbMF0gPSAoJ2hlcmVfZG9jdW1lbnQnLCBwWzFdLCBwWzJdKQorICAgIAorZGVmIHBfbmV3bGluZV9zZXF1ZW5jZShwKToKKyAgICAjIE5vdGhpbmcgaW4gdGhlIGdyYW1tYXIgY2FuIGhhbmRsZSBsZWFkaW5nIE5FV0xJTkUgcHJvZHVjdGlvbnMsIHNvIGFkZAorICAgICMgdGhpcyBvbmUgd2l0aCB0aGUgbG93ZXN0IHBvc3NpYmxlIHByaW9yaXR5IHJlbGF0aXZlbHkgdG8gbmV3bGluZV9saXN0LgorICAgICIiIm5ld2xpbmVfc2VxdWVuY2UgOiBuZXdsaW5lX2xpc3QiIiIKKyAgICBwWzBdID0gTm9uZQorICAgIAorZGVmIHBfbmV3bGluZV9saXN0KHApOgorICAgICIiIm5ld2xpbmVfbGlzdCA6IE5FV0xJTkUKKyAgICAgICAgICAgICAgICAgICAgfCBuZXdsaW5lX2xpc3QgTkVXTElORSIiIgorICAgIHBbMF0gPSBOb25lCisgICAgICAgICAgICAgICAgICAgIAorZGVmIHBfbGluZWJyZWFrKHApOgorICAgICIiImxpbmVicmVhayA6IG5ld2xpbmVfbGlzdAorICAgICAgICAgICAgICAgICB8IGVtcHR5IiIiCisgICAgcFswXSA9IE5vbmUKKworZGVmIHBfc2VwYXJhdG9yX29wKHApOiAgICAgICAgICAgICAgICAgCisgICAgIiIic2VwYXJhdG9yX29wIDogQ09NTUEKKyAgICAgICAgICAgICAgICAgICAgfCBBTVAiIiIKKyAgICBwWzBdID0gcFsxXQorCitkZWYgcF9zZXBhcmF0b3IocCk6CisgICAgIiIic2VwYXJhdG9yIDogc2VwYXJhdG9yX29wIGxpbmVicmVhaworICAgICAgICAgICAgICAgICB8IG5ld2xpbmVfbGlzdCIiIgorICAgIGlmIGxlbihwKT09MjoKKyAgICAgICAgI0lnbm9yZSBuZXdsaW5lcworICAgICAgICBwWzBdID0gTm9uZQorICAgIGVsc2U6CisgICAgICAgICNLZWVwIHRoZSBzZXBhcmF0b3Igb3BlcmF0b3IKKyAgICAgICAgcFswXSA9ICgnc2VwYXJhdG9yJywgcFsxXSkKKyAgICAgICAgICAgICAgICAgCitkZWYgcF9zZXF1ZW50aWFsX3NlcChwKToKKyAgICAiIiJzZXF1ZW50aWFsX3NlcCA6IENPTU1BIGxpbmVicmVhaworICAgICAgICAgICAgICAgICAgICAgIHwgbmV3bGluZV9saXN0IiIiCisgICAgcFswXSA9IE5vbmUKKworIyBMb3cgcHJpb3JpdHkgVE9LRU4gPT4gZm9yX3dvcmQgY29udmVyc2lvbi4KKyMgTGV0IG1heWJlX2Zvcl93b3JkIGJlIHVzZWQgYXMgYSB0b2tlbiB3aGVuIG5lY2Vzc2FyeSBpbiBoaWdoZXIgcHJpb3JpdHkKKyMgcnVsZXMuIAorZGVmIHBfZm9yX3dvcmQocCk6CisgICAgIiIiZm9yX3dvcmQgOiBtYXliZV9mb3Jfd29yZCIiIgorICAgIHBbMF0gPSBwWzFdCisKK2RlZiBwX2lmX3dvcmQocCk6CisgICAgIiIiaWZfd29yZCA6IG1heWJlX2lmX3dvcmQiIiIKKyAgICBwWzBdID0gcFsxXQorCitkZWYgcF90aGVuX3dvcmQocCk6CisgICAgIiIidGhlbl93b3JkIDogbWF5YmVfdGhlbl93b3JkIiIiCisgICAgcFswXSA9IHBbMV0KKworZGVmIHBfZG9uZV93b3JkKHApOgorICAgICIiImRvbmVfd29yZCA6IG1heWJlX2RvbmVfd29yZCIiIgorICAgIHBbMF0gPSBwWzFdCisKK2RlZiBwX2RvX3dvcmQocCk6CisgICAgIiIiZG9fd29yZCA6IG1heWJlX2RvX3dvcmQiIiIKKyAgICBwWzBdID0gcFsxXQorICAgIAorZGVmIHBfdW50aWxfd29yZChwKToKKyAgICAiIiJ1bnRpbF93b3JkIDogbWF5YmVfdW50aWxfd29yZCIiIgorICAgIHBbMF0gPSBwWzFdCisgICAgCitkZWYgcF9hc3NpZ25tZW50X3dvcmQocCk6CisgICAgIiIiYXNzaWdubWVudF93b3JkIDogbWF5YmVfYXNzaWdubWVudF93b3JkIiIiCisgICAgcFswXSA9ICgnYXNzaWdubWVudF93b3JkJywgcFsxXVsxXSkKKyAgICAKK2RlZiBwX2Jhbmdfd29yZChwKToKKyAgICAiIiJiYW5nX3dvcmQgOiBtYXliZV9iYW5nX3dvcmQiIiIKKyAgICBwWzBdID0gKCdiYW5nX3dvcmQnLCBwWzFdWzFdKQorCitkZWYgcF90b2tlbihwKToKKyAgICAiIiJ0b2tlbiA6IFRPS0VOCisgICAgICAgICAgICAgfCBGaSIiIgorICAgIHBbMF0gPSBwWzFdCisKK2RlZiBwX2VtcHR5KHApOgorICAgICdlbXB0eSA6JworICAgIHBbMF0gPSBOb25lCisgICAgCisjIEVycm9yIHJ1bGUgZm9yIHN5bnRheCBlcnJvcnMKK2RlZiBwX2Vycm9yKHApOgorICAgIG1zZyA9IFtdCisgICAgdyA9IG1zZy5hcHBlbmQKKyAgICB3KCclclxuJyAlIHApCisgICAgdygnZm9sbG93ZWQgYnk6XG4nKQorICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICBuID0geWFjYy50b2tlbigpCisgICAgICAgIGlmIG5vdCBuOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgdygnICAlclxuJyAlIG4pCisgICAgcmFpc2Ugc2hlcnJvcnMuU2hlbGxTeW50YXhFcnJvcignJy5qb2luKG1zZykpCisKKyMgQnVpbGQgdGhlIHBhcnNlcgordHJ5OgorICAgIGltcG9ydCBweXNodGFibGVzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgb3V0cHV0ZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgIGlmIG5vdCBvcy5hY2Nlc3Mob3V0cHV0ZGlyLCBvcy5XX09LKToKKyAgICAgICAgb3V0cHV0ZGlyID0gJycKKyAgICB5YWNjLnlhY2ModGFibW9kdWxlID0gJ3B5c2h0YWJsZXMnLCBvdXRwdXRkaXIgPSBvdXRwdXRkaXIsIGRlYnVnID0gMCkKK2Vsc2U6CisgICAgeWFjYy55YWNjKHRhYm1vZHVsZSA9ICdweXNoLnB5c2h0YWJsZXMnLCB3cml0ZV90YWJsZXMgPSAwLCBkZWJ1ZyA9IDApCisKKworZGVmIHBhcnNlKGlucHV0LCBlb2Y9RmFsc2UsIGRlYnVnPUZhbHNlKToKKyAgICAiIiJQYXJzZSBhIHdob2xlIHNjcmlwdCBhdCBvbmNlIGFuZCByZXR1cm4gdGhlIGdlbmVyYXRlZCBBU1QgYW5kIHVuY29uc3VtZWQKKyAgICBkYXRhIGluIGEgdHVwbGUuCisgICAgCisgICAgTk9URTogZW9mIGlzIHByb2JhYmx5IG1lYW5pbmdsZXNzIGZvciBub3csIHRoZSBwYXJzZXIgYmVpbmcgdW5hYmxlIHRvIHdvcmsKKyAgICBpbiBwdWxsIG1vZGUuIEl0IHNob3VsZCBiZSBzZXQgdG8gVHJ1ZS4KKyAgICAiIiIKKyAgICBsZXhlciA9IHB5c2hsZXguUExZTGV4ZXIoKQorICAgIHJlbWFpbmluZyA9IGxleGVyLmFkZChpbnB1dCwgZW9mKQorICAgIGlmIGxleGVyLmlzX2VtcHR5KCk6CisgICAgICAgIHJldHVybiBbXSwgcmVtYWluaW5nCisgICAgaWYgZGVidWc6CisgICAgICAgIGRlYnVnID0gMgorICAgIHJldHVybiB5YWNjLnBhcnNlKGxleGVyPWxleGVyLCBkZWJ1Zz1kZWJ1ZyksIHJlbWFpbmluZworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBU1QgcmVuZGVyaW5nIGhlbHBlcnMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgIAorCitkZWYgZm9ybWF0X2NvbW1hbmRzKHYpOgorICAgICIiIlJldHVybiBhIHRyZWUgbWFkZSBvZiBzdHJpbmdzIGFuZCBsaXN0cy4gTWFrZSBjb21tYW5kIHRyZWVzIGVhc2llciB0bworICAgIGRpc3BsYXkuCisgICAgIiIiCisgICAgaWYgaXNpbnN0YW5jZSh2LCBsaXN0KToKKyAgICAgICAgcmV0dXJuIFtmb3JtYXRfY29tbWFuZHMoYykgZm9yIGMgaW4gdl0KKyAgICBpZiBpc2luc3RhbmNlKHYsIHR1cGxlKToKKyAgICAgICAgaWYgbGVuKHYpPT0yIGFuZCBpc2luc3RhbmNlKHZbMF0sIHN0cikgYW5kIG5vdCBpc2luc3RhbmNlKHZbMV0sIHN0cik6CisgICAgICAgICAgICBpZiB2WzBdID09ICdhc3luYyc6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnQXN5bmNMaXN0JywgbWFwKGZvcm1hdF9jb21tYW5kcywgdlsxXSldCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICNBdm9pZCBkZWNvbXBvc2luZyB0dXBsZXMgbGlrZSAoJ3BpcGVsaW5lJywgUGlwZWxpbmUoLi4uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0X2NvbW1hbmRzKHZbMV0pCisgICAgICAgIHJldHVybiBmb3JtYXRfY29tbWFuZHMobGlzdCh2KSkKKyAgICBlbGlmIGlzaW5zdGFuY2UodiwgSWZDb25kKToKKyAgICAgICAgbmFtZSA9IFsnSWZDb25kJ10KKyAgICAgICAgbmFtZSArPSBbJ2lmJywgbWFwKGZvcm1hdF9jb21tYW5kcywgdi5jb25kKV0KKyAgICAgICAgbmFtZSArPSBbJ3RoZW4nLCBtYXAoZm9ybWF0X2NvbW1hbmRzLCB2LmlmX2NtZHMpXQorICAgICAgICBuYW1lICs9IFsnZWxzZScsIG1hcChmb3JtYXRfY29tbWFuZHMsIHYuZWxzZV9jbWRzKV0KKyAgICAgICAgcmV0dXJuIG5hbWUKKyAgICBlbGlmIGlzaW5zdGFuY2UodiwgRm9yTG9vcCk6CisgICAgICAgIG5hbWUgPSBbJ0Zvckxvb3AnXQorICAgICAgICBuYW1lICs9IFtyZXByKHYubmFtZSkrJyBpbiAnLCBtYXAoc3RyLCB2Lml0ZW1zKV0KKyAgICAgICAgbmFtZSArPSBbJ2NvbW1hbmRzJywgbWFwKGZvcm1hdF9jb21tYW5kcywgdi5jbWRzKV0KKyAgICAgICAgcmV0dXJuIG5hbWUKKyAgICBlbGlmIGlzaW5zdGFuY2UodiwgQW5kT3IpOgorICAgICAgICByZXR1cm4gW3Yub3AsIGZvcm1hdF9jb21tYW5kcyh2LmxlZnQpLCBmb3JtYXRfY29tbWFuZHModi5yaWdodCldCisgICAgZWxpZiBpc2luc3RhbmNlKHYsIFBpcGVsaW5lKToKKyAgICAgICAgbmFtZSA9ICdQaXBlbGluZScKKyAgICAgICAgaWYgdi5yZXZlcnNlX3N0YXR1czoKKyAgICAgICAgICAgIG5hbWUgPSAnIScgKyBuYW1lCisgICAgICAgIHJldHVybiBbbmFtZSwgZm9ybWF0X2NvbW1hbmRzKHYuY29tbWFuZHMpXQorICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBDYXNlKToKKyAgICAgICAgbmFtZSA9IFsnQ2FzZSddCisgICAgICAgIG5hbWUgKz0gW3YubmFtZSwgZm9ybWF0X2NvbW1hbmRzKHYuaXRlbXMpXQorICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBTaW1wbGVDb21tYW5kKToKKyAgICAgICAgbmFtZSA9IFsnU2ltcGxlQ29tbWFuZCddCisgICAgICAgIGlmIHYud29yZHM6ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbmFtZSArPSBbJ3dvcmRzJywgbWFwKHN0ciwgdi53b3JkcyldCisgICAgICAgIGlmIHYuYXNzaWduczoKKyAgICAgICAgICAgIGFzc2lnbnMgPSBbdHVwbGUoYVsxXSkgZm9yIGEgaW4gdi5hc3NpZ25zXQorICAgICAgICAgICAgbmFtZSArPSBbJ2Fzc2lnbnMnLCBtYXAoc3RyLCBhc3NpZ25zKV0KKyAgICAgICAgaWYgdi5yZWRpcnM6CisgICAgICAgICAgICBuYW1lICs9IFsncmVkaXJzJywgbWFwKGZvcm1hdF9jb21tYW5kcywgdi5yZWRpcnMpXQorICAgICAgICByZXR1cm4gbmFtZQorICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBSZWRpcmVjdExpc3QpOgorICAgICAgICBuYW1lID0gWydSZWRpcmVjdExpc3QnXQorICAgICAgICBpZiB2LnJlZGlyczoKKyAgICAgICAgICAgIG5hbWUgKz0gWydyZWRpcnMnLCBtYXAoZm9ybWF0X2NvbW1hbmRzLCB2LnJlZGlycyldCisgICAgICAgIG5hbWUgKz0gWydjb21tYW5kJywgZm9ybWF0X2NvbW1hbmRzKHYuY21kKV0KKyAgICAgICAgcmV0dXJuIG5hbWUKKyAgICBlbGlmIGlzaW5zdGFuY2UodiwgSU9SZWRpcmVjdCk6CisgICAgICAgIHJldHVybiAnICcuam9pbihtYXAoc3RyLCAodi5pb19udW1iZXIsIHYub3AsIHYuZmlsZW5hbWUpKSkKKyAgICBlbGlmIGlzaW5zdGFuY2UodiwgSGVyZURvY3VtZW50KToKKyAgICAgICAgcmV0dXJuICcgJy5qb2luKG1hcChzdHIsICh2LmlvX251bWJlciwgdi5vcCwgcmVwcih2Lm5hbWUpLCByZXByKHYuY29udGVudCkpKSkKKyAgICBlbGlmIGlzaW5zdGFuY2UodiwgU3ViU2hlbGwpOgorICAgICAgICByZXR1cm4gWydTdWJTaGVsbCcsIG1hcChmb3JtYXRfY29tbWFuZHMsIHYuY21kcyldCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHJlcHIodikKKyAgICAgICAgICAgICAKK2RlZiBwcmludF9jb21tYW5kcyhjbWRzLCBvdXRwdXQ9c3lzLnN0ZG91dCk6CisgICAgIiIiUHJldHR5IHByaW50IGEgY29tbWFuZCB0cmVlLiIiIgorICAgIGRlZiBwcmludF90cmVlKGNtZCwgc3BhY2VzLCBvdXRwdXQpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGNtZCwgbGlzdCk6CisgICAgICAgICAgICBmb3IgYyBpbiBjbWQ6CisgICAgICAgICAgICAgICAgcHJpbnRfdHJlZShjLCBzcGFjZXMgKyAzLCBvdXRwdXQpICAgICAgICAgICAgICAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ID4+b3V0cHV0LCAnICcqc3BhY2VzICsgc3RyKGNtZCkKKyAgICAKKyAgICBmb3JtYXR0ZWQgPSBmb3JtYXRfY29tbWFuZHMoY21kcykKKyAgICBwcmludF90cmVlKGZvcm1hdHRlZCwgMCwgb3V0cHV0KQorICAgIAorICAgIAorZGVmIHN0cmluZ2lmeV9jb21tYW5kcyhjbWRzKTogCisgICAgIiIiU2VyaWFsaXplIGEgY29tbWFuZCB0cmVlIGFzIGEgc3RyaW5nLgorICAgIAorICAgIFJldHVybmVkIHN0cmluZyBpcyBub3QgcHJldHR5IGFuZCBpcyBjdXJyZW50bHkgdXNlZCBmb3IgdW5pdCB0ZXN0cyBvbmx5LgorICAgICIiIiAgIAorICAgIGRlZiBzdHJpbmdpZnkodmFsdWUpOgorICAgICAgICBvdXRwdXQgPSBbXQorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKKyAgICAgICAgICAgIGZvcm1hdHRlZCA9IFtdCisgICAgICAgICAgICBmb3IgdiBpbiB2YWx1ZToKKyAgICAgICAgICAgICAgICBmb3JtYXR0ZWQuYXBwZW5kKHN0cmluZ2lmeSh2KSkKKyAgICAgICAgICAgIGZvcm1hdHRlZCA9ICcgJy5qb2luKGZvcm1hdHRlZCkKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJycuam9pbihbJzwnLCBmb3JtYXR0ZWQsICc+J10pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuICcgJy5qb2luKG91dHB1dCkKKyAgICAgICAgICAgIAorICAgIHJldHVybiBzdHJpbmdpZnkoZm9ybWF0X2NvbW1hbmRzKGNtZHMpKQorICAgIAorICAgICAgICAKK2RlZiB2aXNpdF9jb21tYW5kcyhjbWRzLCBjYWxsYWJsZSk6CisgICAgIiIiVmlzaXQgdGhlIGNvbW1hbmQgdHJlZSBhbmQgZXhlY3V0ZSBjYWxsYWJsZSBvbiBldmVyeSBQaXBlbGluZSBhbmQgCisgICAgU2ltcGxlQ29tbWFuZCBpbnN0YW5jZXMuCisgICAgIiIiCisgICAgaWYgaXNpbnN0YW5jZShjbWRzLCAodHVwbGUsIGxpc3QpKToKKyAgICAgICAgbWFwKGxhbWJkYSBjOiB2aXNpdF9jb21tYW5kcyhjLGNhbGxhYmxlKSwgY21kcykKKyAgICBlbGlmIGlzaW5zdGFuY2UoY21kcywgKFBpcGVsaW5lLCBTaW1wbGVDb21tYW5kKSk6CisgICAgICAgIGNhbGxhYmxlKGNtZHMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvc2hlcnJvcnMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvc2hlcnJvcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlkMDUzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9zaGVycm9ycy5weQpAQCAtMCwwICsxLDQxIEBACisjIHNoZXJyb3JzLnB5IC0gc2hlbGwgZXJyb3JzIGFuZCBzaWduYWxzCisjCisjIENvcHlyaWdodCAyMDA3IFBhdHJpY2sgTWV6YXJkCisjCisjIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKworIiIiRGVmaW5lIHNoZWxsIGV4Y2VwdGlvbnMgYW5kIGVycm9yIGNvZGVzLgorIiIiCisKK2NsYXNzIFNoZWxsRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIFNoZWxsU3ludGF4RXJyb3IoU2hlbGxFcnJvcik6CisgICAgcGFzcworICAgIAorY2xhc3MgVXRpbGl0eUVycm9yKFNoZWxsRXJyb3IpOgorICAgICIiIlJhaXNlZCB1cG9uIHV0aWxpdHkgc3ludGF4IGVycm9yIChvcHRpb24gb3Igb3BlcmFuZCBlcnJvcikuIiIiCisgICAgcGFzcworICAgCitjbGFzcyBFeHBhbnNpb25FcnJvcihTaGVsbEVycm9yKToKKyAgICBwYXNzCisgICAgIAorY2xhc3MgQ29tbWFuZE5vdEZvdW5kKFNoZWxsRXJyb3IpOgorICAgICIiIlNwZWNpZmllZCBjb21tYW5kIHdhcyBub3QgZm91bmQuIiIiCisgICAgcGFzcworICAgIAorY2xhc3MgUmVkaXJlY3Rpb25FcnJvcihTaGVsbEVycm9yKToKKyAgICBwYXNzCisgICAgCitjbGFzcyBWYXJBc3NpZ25tZW50RXJyb3IoU2hlbGxFcnJvcik6CisgICAgIiIiVmFyaWFibGUgYXNzaWdubWVudCBlcnJvci4iIiIKKyAgICBwYXNzCisgICAgCitjbGFzcyBFeGl0U2lnbmFsKFNoZWxsRXJyb3IpOgorICAgICIiIkV4aXQgc2lnbmFsLiIiIgorICAgIHBhc3MKKyAgICAKK2NsYXNzIFJldHVyblNpZ25hbChTaGVsbEVycm9yKToKKyAgICAiIiJFeGl0IHNpZ25hbC4iIiIKKyAgICBwYXNzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvc3VicHJvY2Vzc19maXgucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvc3VicHJvY2Vzc19maXgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZlY2EyMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9zdWJwcm9jZXNzX2ZpeC5weQpAQCAtMCwwICsxLDc3IEBACisjIHN1YnByb2Nlc3MgLSBTdWJwcm9jZXNzZXMgd2l0aCBhY2Nlc3NpYmxlIEkvTyBzdHJlYW1zCisjCisjIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbW9kdWxlLCBzZWUgUEVQIDMyNC4KKyMKKyMgVGhpcyBtb2R1bGUgc2hvdWxkIHJlbWFpbiBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMiwgc2VlIFBFUCAyOTEuCisjCisjIENvcHlyaWdodCAoYykgMjAwMy0yMDA1IGJ5IFBldGVyIEFzdHJhbmQgPGFzdHJhbmRAbHlzYXRvci5saXUuc2U+CisjCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKyMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8yLjQvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCisKK2RlZiBsaXN0MmNtZGxpbmUoc2VxKToKKyAgICAiIiIKKyAgICBUcmFuc2xhdGUgYSBzZXF1ZW5jZSBvZiBhcmd1bWVudHMgaW50byBhIGNvbW1hbmQgbGluZQorICAgIHN0cmluZywgdXNpbmcgdGhlIHNhbWUgcnVsZXMgYXMgdGhlIE1TIEMgcnVudGltZToKKworICAgIDEpIEFyZ3VtZW50cyBhcmUgZGVsaW1pdGVkIGJ5IHdoaXRlIHNwYWNlLCB3aGljaCBpcyBlaXRoZXIgYQorICAgICAgIHNwYWNlIG9yIGEgdGFiLgorCisgICAgMikgQSBzdHJpbmcgc3Vycm91bmRlZCBieSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGlzCisgICAgICAgaW50ZXJwcmV0ZWQgYXMgYSBzaW5nbGUgYXJndW1lbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hpdGUgc3BhY2UKKyAgICAgICBjb250YWluZWQgd2l0aGluLiAgQSBxdW90ZWQgc3RyaW5nIGNhbiBiZSBlbWJlZGRlZCBpbiBhbgorICAgICAgIGFyZ3VtZW50LgorCisgICAgMykgQSBkb3VibGUgcXVvdGF0aW9uIG1hcmsgcHJlY2VkZWQgYnkgYSBiYWNrc2xhc2ggaXMKKyAgICAgICBpbnRlcnByZXRlZCBhcyBhIGxpdGVyYWwgZG91YmxlIHF1b3RhdGlvbiBtYXJrLgorCisgICAgNCkgQmFja3NsYXNoZXMgYXJlIGludGVycHJldGVkIGxpdGVyYWxseSwgdW5sZXNzIHRoZXkKKyAgICAgICBpbW1lZGlhdGVseSBwcmVjZWRlIGEgZG91YmxlIHF1b3RhdGlvbiBtYXJrLgorCisgICAgNSkgSWYgYmFja3NsYXNoZXMgaW1tZWRpYXRlbHkgcHJlY2VkZSBhIGRvdWJsZSBxdW90YXRpb24gbWFyaywKKyAgICAgICBldmVyeSBwYWlyIG9mIGJhY2tzbGFzaGVzIGlzIGludGVycHJldGVkIGFzIGEgbGl0ZXJhbAorICAgICAgIGJhY2tzbGFzaC4gIElmIHRoZSBudW1iZXIgb2YgYmFja3NsYXNoZXMgaXMgb2RkLCB0aGUgbGFzdAorICAgICAgIGJhY2tzbGFzaCBlc2NhcGVzIHRoZSBuZXh0IGRvdWJsZSBxdW90YXRpb24gbWFyayBhcworICAgICAgIGRlc2NyaWJlZCBpbiBydWxlIDMuCisgICAgIiIiCisKKyAgICAjIFNlZQorICAgICMgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2VuLXVzL3ZjY2VsbmcvaHRtL3Byb2dzXzEyLmFzcAorICAgIHJlc3VsdCA9IFtdCisgICAgbmVlZHF1b3RlID0gRmFsc2UKKyAgICBmb3IgYXJnIGluIHNlcToKKyAgICAgICAgYnNfYnVmID0gW10KKworICAgICAgICAjIEFkZCBhIHNwYWNlIHRvIHNlcGFyYXRlIHRoaXMgYXJndW1lbnQgZnJvbSB0aGUgb3RoZXJzCisgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKQorCisgICAgICAgIG5lZWRxdW90ZSA9ICgiICIgaW4gYXJnKSBvciAoIlx0IiBpbiBhcmcpIG9yICgifCIgaW4gYXJnKSBvciBhcmcgPT0gIiIKKyAgICAgICAgaWYgbmVlZHF1b3RlOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpCisKKyAgICAgICAgZm9yIGMgaW4gYXJnOgorICAgICAgICAgICAgaWYgYyA9PSAnXFwnOgorICAgICAgICAgICAgICAgICMgRG9uJ3Qga25vdyBpZiB3ZSBuZWVkIHRvIGRvdWJsZSB5ZXQuCisgICAgICAgICAgICAgICAgYnNfYnVmLmFwcGVuZChjKQorICAgICAgICAgICAgZWxpZiBjID09ICciJzoKKyAgICAgICAgICAgICAgICAjIERvdWJsZSBiYWNrc3BhY2VzLgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xcJyAqIGxlbihic19idWYpKjIpCisgICAgICAgICAgICAgICAgYnNfYnVmID0gW10KKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCdcXCInKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIE5vcm1hbCBjaGFyCisgICAgICAgICAgICAgICAgaWYgYnNfYnVmOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZXh0ZW5kKGJzX2J1ZikKKyAgICAgICAgICAgICAgICAgICAgYnNfYnVmID0gW10KKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGMpCisKKyAgICAgICAgIyBBZGQgcmVtYWluaW5nIGJhY2tzcGFjZXMsIGlmIGFueS4KKyAgICAgICAgaWYgYnNfYnVmOgorICAgICAgICAgICAgcmVzdWx0LmV4dGVuZChic19idWYpCisKKyAgICAgICAgaWYgbmVlZHF1b3RlOgorICAgICAgICAgICAgcmVzdWx0LmV4dGVuZChic19idWYpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCciJykKKyAgICAgICAgICAgIAorICAgIHJldHVybiAnJy5qb2luKHJlc3VsdCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcnVucXVldWUucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3J1bnF1ZXVlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNzFlZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3J1bnF1ZXVlLnB5CkBAIC0wLDAgKzEsMjE5NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdSdW5RdWV1ZScgaW1wbGVtZW50YXRpb24KKworSGFuZGxlcyBwcmVwYXJhdGlvbiBhbmQgZXhlY3V0aW9uIG9mIGEgcXVldWUgb2YgdGFza3MKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDA3ICBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGNvcHkKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN0YXQKK2ltcG9ydCBmY250bAoraW1wb3J0IGVycm5vCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgYmIKK2Zyb20gYmIgaW1wb3J0IG1zZywgZGF0YSwgZXZlbnQKK2Zyb20gYmIgaW1wb3J0IG1vbml0b3JkaXNrCitpbXBvcnQgc3VicHJvY2VzcworCit0cnk6CisgICAgaW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IHBpY2tsZQorCitiYmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLlJ1blF1ZXVlIikKKworX19maW5kX21kNV9fID0gcmUuY29tcGlsZSggcicoP2kpKD88IVthLXowLTldKVthLWYwLTldezMyfSg/IVthLXowLTldKScgKQorCitjbGFzcyBSdW5RdWV1ZVN0YXRzOgorICAgICIiIgorICAgIEhvbGRzIHN0YXRpc3RpY3Mgb24gdGhlIHRhc2tzIGhhbmRsZWQgYnkgdGhlIGFzc29jaWF0ZWQgcnVuUXVldWUKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdG90YWwpOgorICAgICAgICBzZWxmLmNvbXBsZXRlZCA9IDAKKyAgICAgICAgc2VsZi5za2lwcGVkID0gMAorICAgICAgICBzZWxmLmZhaWxlZCA9IDAKKyAgICAgICAgc2VsZi5hY3RpdmUgPSAwCisgICAgICAgIHNlbGYudG90YWwgPSB0b3RhbAorCisgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgIG9iaiA9IHNlbGYuX19jbGFzc19fKHNlbGYudG90YWwpCisgICAgICAgIG9iai5fX2RpY3RfXy51cGRhdGUoc2VsZi5fX2RpY3RfXykKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIHRhc2tGYWlsZWQoc2VsZik6CisgICAgICAgIHNlbGYuYWN0aXZlID0gc2VsZi5hY3RpdmUgLSAxCisgICAgICAgIHNlbGYuZmFpbGVkID0gc2VsZi5mYWlsZWQgKyAxCisKKyAgICBkZWYgdGFza0NvbXBsZXRlZChzZWxmLCBudW1iZXIgPSAxKToKKyAgICAgICAgc2VsZi5hY3RpdmUgPSBzZWxmLmFjdGl2ZSAtIG51bWJlcgorICAgICAgICBzZWxmLmNvbXBsZXRlZCA9IHNlbGYuY29tcGxldGVkICsgbnVtYmVyCisKKyAgICBkZWYgdGFza1NraXBwZWQoc2VsZiwgbnVtYmVyID0gMSk6CisgICAgICAgIHNlbGYuYWN0aXZlID0gc2VsZi5hY3RpdmUgKyBudW1iZXIKKyAgICAgICAgc2VsZi5za2lwcGVkID0gc2VsZi5za2lwcGVkICsgbnVtYmVyCisKKyAgICBkZWYgdGFza0FjdGl2ZShzZWxmKToKKyAgICAgICAgc2VsZi5hY3RpdmUgPSBzZWxmLmFjdGl2ZSArIDEKKworIyBUaGVzZSB2YWx1ZXMgaW5kaWNhdGUgdGhlIG5leHQgc3RlcCBkdWUgdG8gYmUgcnVuIGluIHRoZQorIyBydW5RdWV1ZSBzdGF0ZSBtYWNoaW5lCitydW5RdWV1ZVByZXBhcmUgPSAyCitydW5RdWV1ZVNjZW5lSW5pdCA9IDMKK3J1blF1ZXVlU2NlbmVSdW4gPSA0CitydW5RdWV1ZVJ1bkluaXQgPSA1CitydW5RdWV1ZVJ1bm5pbmcgPSA2CitydW5RdWV1ZUZhaWxlZCA9IDcKK3J1blF1ZXVlQ2xlYW5VcCA9IDgKK3J1blF1ZXVlQ29tcGxldGUgPSA5CisKK2NsYXNzIFJ1blF1ZXVlU2NoZWR1bGVyKG9iamVjdCk6CisgICAgIiIiCisgICAgQ29udHJvbCB0aGUgb3JkZXIgdGFza3MgYXJlIHNjaGVkdWxlZCBpbi4KKyAgICAiIiIKKyAgICBuYW1lID0gImJhc2ljIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJ1bnF1ZXVlLCBycWRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIGRlZmF1bHQgc2NoZWR1bGVyIGp1c3QgcmV0dXJucyB0aGUgZmlyc3QgYnVpbGRhYmxlIHRhc2sgKHRoZQorICAgICAgICBwcmlvcml0eSBtYXAgaXMgc29ydGVkIGJ5IHRhc2sgbnVtYmVyKQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5ycSA9IHJ1bnF1ZXVlCisgICAgICAgIHNlbGYucnFkYXRhID0gcnFkYXRhCisgICAgICAgIHNlbGYubnVtVGFza3MgPSBsZW4oc2VsZi5ycWRhdGEucnVucV9mbmlkKQorCisgICAgICAgIHNlbGYucHJpb19tYXAgPSBbXQorICAgICAgICBzZWxmLnByaW9fbWFwLmV4dGVuZChyYW5nZShzZWxmLm51bVRhc2tzKSkKKworICAgICAgICBzZWxmLmJ1aWxkYWJsZSA9IFtdCisgICAgICAgIHNlbGYuc3RhbXBzID0ge30KKyAgICAgICAgZm9yIHRhc2tpZCBpbiB4cmFuZ2Uoc2VsZi5udW1UYXNrcyk6CisgICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNraWRdXQorICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza2lkXQorICAgICAgICAgICAgc2VsZi5zdGFtcHNbdGFza2lkXSA9IGJiLmJ1aWxkLnN0YW1wZmlsZSh0YXNrbmFtZSwgc2VsZi5ycWRhdGEuZGF0YUNhY2hlLCBmbikKKyAgICAgICAgICAgIGlmIHNlbGYucnEucnVucV9idWlsZGFibGVbdGFza2lkXSA9PSAxOgorICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRhYmxlLmFwcGVuZCh0YXNraWQpCisKKyAgICAgICAgc2VsZi5yZXZfcHJpb19tYXAgPSBOb25lCisKKyAgICBkZWYgbmV4dF9idWlsZGFibGVfdGFzayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgaWQgb2YgdGhlIGZpcnN0IHRhc2sgd2UgZmluZCB0aGF0IGlzIGJ1aWxkYWJsZQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5idWlsZGFibGUgPSBbeCBmb3IgeCBpbiBzZWxmLmJ1aWxkYWJsZSBpZiBub3Qgc2VsZi5ycS5ydW5xX3J1bm5pbmdbeF0gPT0gMV0KKyAgICAgICAgaWYgbm90IHNlbGYuYnVpbGRhYmxlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgbGVuKHNlbGYuYnVpbGRhYmxlKSA9PSAxOgorICAgICAgICAgICAgdGFza2lkID0gc2VsZi5idWlsZGFibGVbMF0KKyAgICAgICAgICAgIHN0YW1wID0gc2VsZi5zdGFtcHNbdGFza2lkXQorICAgICAgICAgICAgaWYgc3RhbXAgbm90IGluIHNlbGYucnEuYnVpbGRfc3RhbXBzLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGFza2lkCisKKyAgICAgICAgaWYgbm90IHNlbGYucmV2X3ByaW9fbWFwOgorICAgICAgICAgICAgc2VsZi5yZXZfcHJpb19tYXAgPSByYW5nZShzZWxmLm51bVRhc2tzKQorICAgICAgICAgICAgZm9yIHRhc2tpZCBpbiB4cmFuZ2Uoc2VsZi5udW1UYXNrcyk6CisgICAgICAgICAgICAgICAgc2VsZi5yZXZfcHJpb19tYXBbc2VsZi5wcmlvX21hcFt0YXNraWRdXSA9IHRhc2tpZAorCisgICAgICAgIGJlc3QgPSBOb25lCisgICAgICAgIGJlc3RwcmlvID0gTm9uZQorICAgICAgICBmb3IgdGFza2lkIGluIHNlbGYuYnVpbGRhYmxlOgorICAgICAgICAgICAgcHJpbyA9IHNlbGYucmV2X3ByaW9fbWFwW3Rhc2tpZF0KKyAgICAgICAgICAgIGlmIGJlc3RwcmlvIGlzIE5vbmUgb3IgYmVzdHByaW8gPiBwcmlvOgorICAgICAgICAgICAgICAgIHN0YW1wID0gc2VsZi5zdGFtcHNbdGFza2lkXQorICAgICAgICAgICAgICAgIGlmIHN0YW1wIGluIHNlbGYucnEuYnVpbGRfc3RhbXBzLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBiZXN0cHJpbyA9IHByaW8KKyAgICAgICAgICAgICAgICBiZXN0ID0gdGFza2lkCisKKyAgICAgICAgcmV0dXJuIGJlc3QKKworICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBpZCBvZiB0aGUgdGFzayB3ZSBzaG91bGQgYnVpbGQgbmV4dAorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5ycS5zdGF0cy5hY3RpdmUgPCBzZWxmLnJxLm51bWJlcl90YXNrczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5leHRfYnVpbGRhYmxlX3Rhc2soKQorCisgICAgZGVmIG5ld2J1aWxhYmxlKHNlbGYsIHRhc2spOgorICAgICAgICBzZWxmLmJ1aWxkYWJsZS5hcHBlbmQodGFzaykKKworY2xhc3MgUnVuUXVldWVTY2hlZHVsZXJTcGVlZChSdW5RdWV1ZVNjaGVkdWxlcik6CisgICAgIiIiCisgICAgQSBzY2hlZHVsZXIgb3B0aW1pc2VkIGZvciBzcGVlZC4gVGhlIHByaW9yaXR5IG1hcCBpcyBzb3J0ZWQgYnkgdGFzayB3ZWlnaHQsCisgICAgaGVhdmllciB3ZWlnaHRlZCB0YXNrcyAodGFza3MgbmVlZGVkIGJ5IHRoZSBtb3N0IG90aGVyIHRhc2tzKSBhcmUgcnVuIGZpcnN0LgorICAgICIiIgorICAgIG5hbWUgPSAic3BlZWQiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcnVucXVldWUsIHJxZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBUaGUgcHJpb3JpdHkgbWFwIGlzIHNvcnRlZCBieSB0YXNrIHdlaWdodC4KKyAgICAgICAgIiIiCisgICAgICAgIFJ1blF1ZXVlU2NoZWR1bGVyLl9faW5pdF9fKHNlbGYsIHJ1bnF1ZXVlLCBycWRhdGEpCisKKyAgICAgICAgc29ydHdlaWdodCA9IHNvcnRlZChjb3B5LmRlZXBjb3B5KHNlbGYucnFkYXRhLnJ1bnFfd2VpZ2h0KSkKKyAgICAgICAgY29weXdlaWdodCA9IGNvcHkuZGVlcGNvcHkoc2VsZi5ycWRhdGEucnVucV93ZWlnaHQpCisgICAgICAgIHNlbGYucHJpb19tYXAgPSBbXQorCisgICAgICAgIGZvciB3ZWlnaHQgaW4gc29ydHdlaWdodDoKKyAgICAgICAgICAgIGlkeCA9IGNvcHl3ZWlnaHQuaW5kZXgod2VpZ2h0KQorICAgICAgICAgICAgc2VsZi5wcmlvX21hcC5hcHBlbmQoaWR4KQorICAgICAgICAgICAgY29weXdlaWdodFtpZHhdID0gLTEKKworICAgICAgICBzZWxmLnByaW9fbWFwLnJldmVyc2UoKQorCitjbGFzcyBSdW5RdWV1ZVNjaGVkdWxlckNvbXBsZXRpb24oUnVuUXVldWVTY2hlZHVsZXJTcGVlZCk6CisgICAgIiIiCisgICAgQSBzY2hlZHVsZXIgb3B0aW1pc2VkIHRvIGNvbXBsZXRlIC5iYiBmaWxlcyBhcmUgcXVpY2tseSBhcyBwb3NzaWJsZS4gVGhlCisgICAgcHJpb3JpdHkgbWFwIGlzIHNvcnRlZCBieSB0YXNrIHdlaWdodCwgYnV0IHRoZW4gcmVvcmRlcmVkIHNvIG9uY2UgYSBnaXZlbgorICAgIC5iYiBmaWxlIHN0YXJ0cyB0byBidWlsZCwgaXQncyBjb21wbGV0ZWQgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4gVGhpcyB3b3JrcworICAgIHdlbGwgd2hlcmUgZGlzayBzcGFjZSBpcyBhdCBhIHByZW1pdW0gYW5kIGNsYXNzZXMgbGlrZSBPRSdzIHJtX3dvcmsgYXJlIGluCisgICAgZm9yY2UuCisgICAgIiIiCisgICAgbmFtZSA9ICJjb21wbGV0aW9uIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJ1bnF1ZXVlLCBycWRhdGEpOgorICAgICAgICBSdW5RdWV1ZVNjaGVkdWxlclNwZWVkLl9faW5pdF9fKHNlbGYsIHJ1bnF1ZXVlLCBycWRhdGEpCisKKyAgICAgICAgI0ZJWE1FIC0gd2hpbHN0IHRoaXMgZ3JvdXBzIGFsbCBmbmlkcyB0b2dldGhlciBpdCBkb2VzIG5vdCByZW9yZGVyIHRoZQorICAgICAgICAjZm5pZCBncm91cHMgb3B0aW1hbGx5LgorCisgICAgICAgIGJhc2VtYXAgPSBjb3B5LmRlZXBjb3B5KHNlbGYucHJpb19tYXApCisgICAgICAgIHNlbGYucHJpb19tYXAgPSBbXQorICAgICAgICB3aGlsZSAobGVuKGJhc2VtYXApID4gMCk6CisgICAgICAgICAgICBlbnRyeSA9IGJhc2VtYXAucG9wKDApCisgICAgICAgICAgICBzZWxmLnByaW9fbWFwLmFwcGVuZChlbnRyeSkKKyAgICAgICAgICAgIGZuaWQgPSBzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbZW50cnldCisgICAgICAgICAgICB0b2RlbCA9IFtdCisgICAgICAgICAgICBmb3IgZW50cnkgaW4gYmFzZW1hcDoKKyAgICAgICAgICAgICAgICBlbnRyeV9mbmlkID0gc2VsZi5ycWRhdGEucnVucV9mbmlkW2VudHJ5XQorICAgICAgICAgICAgICAgIGlmIGVudHJ5X2ZuaWQgPT0gZm5pZDoKKyAgICAgICAgICAgICAgICAgICAgdG9kZWwuYXBwZW5kKGJhc2VtYXAuaW5kZXgoZW50cnkpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnByaW9fbWFwLmFwcGVuZChlbnRyeSkKKyAgICAgICAgICAgIHRvZGVsLnJldmVyc2UoKQorICAgICAgICAgICAgZm9yIGlkeCBpbiB0b2RlbDoKKyAgICAgICAgICAgICAgICBkZWwgYmFzZW1hcFtpZHhdCisKK2NsYXNzIFJ1blF1ZXVlRGF0YToKKyAgICAiIiIKKyAgICBCaXRCYWtlIFJ1biBRdWV1ZSBpbXBsZW1lbnRhdGlvbgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBycSwgY29va2VyLCBjZmdEYXRhLCBkYXRhQ2FjaGUsIHRhc2tEYXRhLCB0YXJnZXRzKToKKyAgICAgICAgc2VsZi5jb29rZXIgPSBjb29rZXIKKyAgICAgICAgc2VsZi5kYXRhQ2FjaGUgPSBkYXRhQ2FjaGUKKyAgICAgICAgc2VsZi50YXNrRGF0YSA9IHRhc2tEYXRhCisgICAgICAgIHNlbGYudGFyZ2V0cyA9IHRhcmdldHMKKyAgICAgICAgc2VsZi5ycSA9IHJxCisgICAgICAgIHNlbGYud2Fybl9tdWx0aV9iYiA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5zdGFtcHdoaXRlbGlzdCA9IGNmZ0RhdGEuZ2V0VmFyKCJCQl9TVEFNUF9XSElURUxJU1QiLCBUcnVlKSBvciAiIgorICAgICAgICBzZWxmLm11bHRpX3Byb3ZpZGVyX3doaXRlbGlzdCA9IChjZmdEYXRhLmdldFZhcigiTVVMVElfUFJPVklERVJfV0hJVEVMSVNUIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgICAgICBzZWxmLnJlc2V0KCkKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5xX2ZuaWQgPSBbXQorICAgICAgICBzZWxmLnJ1bnFfdGFzayA9IFtdCisgICAgICAgIHNlbGYucnVucV9kZXBlbmRzID0gW10KKyAgICAgICAgc2VsZi5ydW5xX3JldmRlcHMgPSBbXQorICAgICAgICBzZWxmLnJ1bnFfaGFzaCA9IFtdCisKKyAgICBkZWYgcnVucV9kZXBlbmRzX25hbWVzKHNlbGYsIGlkcyk6CisgICAgICAgIGltcG9ydCByZQorICAgICAgICByZXQgPSBbXQorICAgICAgICBmb3IgaWQgaW4gc2VsZi5ydW5xX2RlcGVuZHNbaWRzXToKKyAgICAgICAgICAgIG5hbSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5nZXRfdXNlcl9pZHN0cmluZyhpZCkpCisgICAgICAgICAgICBuYW0gPSByZS5zdWIoIl9bXixdKiwiLCAiLCIsIG5hbSkKKyAgICAgICAgICAgIHJldC5leHRlbmQoW25hbV0pCisgICAgICAgIHJldHVybiByZXQKKworICAgIGRlZiBnZXRfdGFza19uYW1lKHNlbGYsIHRhc2spOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5xX3Rhc2tbdGFza10KKworICAgIGRlZiBnZXRfdGFza19maWxlKHNlbGYsIHRhc2spOgorICAgICAgICByZXR1cm4gc2VsZi50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJ1bnFfZm5pZFt0YXNrXV0KKworICAgIGRlZiBnZXRfdGFza19oYXNoKHNlbGYsIHRhc2spOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5xX2hhc2hbdGFza10KKworICAgIGRlZiBnZXRfdXNlcl9pZHN0cmluZyhzZWxmLCB0YXNrLCB0YXNrX25hbWVfc3VmZml4ID0gIiIpOgorICAgICAgICBmbiA9IHNlbGYudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ydW5xX2ZuaWRbdGFza11dCisgICAgICAgIHRhc2tuYW1lID0gc2VsZi5ydW5xX3Rhc2tbdGFza10gKyB0YXNrX25hbWVfc3VmZml4CisgICAgICAgIHJldHVybiAiJXMsICVzIiAlIChmbiwgdGFza25hbWUpCisKKyAgICBkZWYgZ2V0X3Rhc2tfaWQoc2VsZiwgZm5pZCwgdGFza25hbWUpOgorICAgICAgICBmb3IgbGlzdGlkIGluIHhyYW5nZShsZW4oc2VsZi5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIGlmIHNlbGYucnVucV9mbmlkW2xpc3RpZF0gPT0gZm5pZCBhbmQgc2VsZi5ydW5xX3Rhc2tbbGlzdGlkXSA9PSB0YXNrbmFtZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGlzdGlkCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgY2lyY3VsYXJfZGVwY2hhaW5zX2hhbmRsZXIoc2VsZiwgdGFza3MpOgorICAgICAgICAiIiIKKyAgICAgICAgU29tZSB0YXNrcyBhcmVuJ3QgYnVpbGRhYmxlLCBsaWtlbHkgZHVlIHRvIGNpcmN1bGFyIGRlcGVuZGVuY3kgaXNzdWVzLgorICAgICAgICBJZGVudGlmeSB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBwcmludCB0aGVtIGluIGEgdXNlciByZWFkYWJsZSBmb3JtYXQuCisgICAgICAgICIiIgorICAgICAgICBmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5CisKKyAgICAgICAgdmFsaWRfY2hhaW5zID0gW10KKyAgICAgICAgZXhwbG9yZWRfZGVwcyA9IHt9CisgICAgICAgIG1zZ3MgPSBbXQorCisgICAgICAgIGRlZiBjaGFpbl9yZW9yZGVyKGNoYWluKToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgUmVvcmRlciBhIGRlcGVuZGVuY3kgY2hhaW4gc28gdGhlIGxvd2VzdCB0YXNrIGlkIGlzIGZpcnN0CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGxvd2VzdCA9IDAKKyAgICAgICAgICAgIG5ld19jaGFpbiA9IFtdCisgICAgICAgICAgICBmb3IgZW50cnkgaW4geHJhbmdlKGxlbihjaGFpbikpOgorICAgICAgICAgICAgICAgIGlmIGNoYWluW2VudHJ5XSA8IGNoYWluW2xvd2VzdF06CisgICAgICAgICAgICAgICAgICAgIGxvd2VzdCA9IGVudHJ5CisgICAgICAgICAgICBuZXdfY2hhaW4uZXh0ZW5kKGNoYWluW2xvd2VzdDpdKQorICAgICAgICAgICAgbmV3X2NoYWluLmV4dGVuZChjaGFpbls6bG93ZXN0XSkKKyAgICAgICAgICAgIHJldHVybiBuZXdfY2hhaW4KKworICAgICAgICBkZWYgY2hhaW5fY29tcGFyZV9lcXVhbChjaGFpbjEsIGNoYWluMik6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIENvbXBhcmUgdHdvIGRlcGVuZGVuY3kgY2hhaW5zIGFuZCBzZWUgaWYgdGhleSdyZSB0aGUgc2FtZQorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBpZiBsZW4oY2hhaW4xKSAhPSBsZW4oY2hhaW4yKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGZvciBpbmRleCBpbiB4cmFuZ2UobGVuKGNoYWluMSkpOgorICAgICAgICAgICAgICAgIGlmIGNoYWluMVtpbmRleF0gIT0gY2hhaW4yW2luZGV4XToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGRlZiBjaGFpbl9hcnJheV9jb250YWlucyhjaGFpbiwgY2hhaW5fYXJyYXkpOgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBSZXR1cm4gVHJ1ZSBpZiBjaGFpbl9hcnJheSBjb250YWlucyBjaGFpbgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBmb3IgY2ggaW4gY2hhaW5fYXJyYXk6CisgICAgICAgICAgICAgICAgaWYgY2hhaW5fY29tcGFyZV9lcXVhbChjaCwgY2hhaW4pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZGVmIGZpbmRfY2hhaW5zKHRhc2tpZCwgcHJldl9jaGFpbik6CisgICAgICAgICAgICBwcmV2X2NoYWluLmFwcGVuZCh0YXNraWQpCisgICAgICAgICAgICB0b3RhbF9kZXBzID0gW10KKyAgICAgICAgICAgIHRvdGFsX2RlcHMuZXh0ZW5kKHNlbGYucnVucV9yZXZkZXBzW3Rhc2tpZF0pCisgICAgICAgICAgICBmb3IgcmV2ZGVwIGluIHNlbGYucnVucV9yZXZkZXBzW3Rhc2tpZF06CisgICAgICAgICAgICAgICAgaWYgcmV2ZGVwIGluIHByZXZfY2hhaW46CisgICAgICAgICAgICAgICAgICAgIGlkeCA9IHByZXZfY2hhaW4uaW5kZXgocmV2ZGVwKQorICAgICAgICAgICAgICAgICAgICAjIFRvIHByZXZlbnQgZHVwbGljYXRlcywgcmVvcmRlciB0aGUgY2hhaW4gdG8gc3RhcnQgd2l0aCB0aGUgbG93ZXN0IHRhc2tpZAorICAgICAgICAgICAgICAgICAgICAjIGFuZCBzZWFyY2ggdGhyb3VnaCBhbiBhcnJheSBvZiB0aG9zZSB3ZSd2ZSBhbHJlYWR5IHByaW50ZWQKKyAgICAgICAgICAgICAgICAgICAgY2hhaW4gPSBwcmV2X2NoYWluW2lkeDpdCisgICAgICAgICAgICAgICAgICAgIG5ld19jaGFpbiA9IGNoYWluX3Jlb3JkZXIoY2hhaW4pCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjaGFpbl9hcnJheV9jb250YWlucyhuZXdfY2hhaW4sIHZhbGlkX2NoYWlucyk6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZF9jaGFpbnMuYXBwZW5kKG5ld19jaGFpbikKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZ3MuYXBwZW5kKCJEZXBlbmRlbmN5IGxvb3AgIyVkIGZvdW5kOlxuIiAlIGxlbih2YWxpZF9jaGFpbnMpKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBuZXdfY2hhaW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNncy5hcHBlbmQoIiAgVGFzayAlcyAoJXMpIChkZXBlbmRlbnQgVGFza3MgJXMpXG4iICUgKGRlcCwgc2VsZi5nZXRfdXNlcl9pZHN0cmluZyhkZXApLCBzZWxmLnJ1bnFfZGVwZW5kc19uYW1lcyhkZXApKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZ3MuYXBwZW5kKCJcbiIpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbih2YWxpZF9jaGFpbnMpID4gMTA6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2dzLmFwcGVuZCgiQWJvcnRlZCBkZXBlbmRlbmN5IGxvb3BzIHNlYXJjaCBhZnRlciAxMCBtYXRjaGVzLlxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtc2dzCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2NhbiA9IEZhbHNlCisgICAgICAgICAgICAgICAgaWYgcmV2ZGVwIG5vdCBpbiBleHBsb3JlZF9kZXBzOgorICAgICAgICAgICAgICAgICAgICBzY2FuID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsaWYgcmV2ZGVwIGluIGV4cGxvcmVkX2RlcHNbcmV2ZGVwXToKKyAgICAgICAgICAgICAgICAgICAgc2NhbiA9IFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHByZXZfY2hhaW46CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXAgaW4gZXhwbG9yZWRfZGVwc1tyZXZkZXBdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW4gPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgc2NhbjoKKyAgICAgICAgICAgICAgICAgICAgZmluZF9jaGFpbnMocmV2ZGVwLCBjb3B5LmRlZXBjb3B5KHByZXZfY2hhaW4pKQorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gZXhwbG9yZWRfZGVwc1tyZXZkZXBdOgorICAgICAgICAgICAgICAgICAgICBpZiBkZXAgbm90IGluIHRvdGFsX2RlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF9kZXBzLmFwcGVuZChkZXApCisKKyAgICAgICAgICAgIGV4cGxvcmVkX2RlcHNbdGFza2lkXSA9IHRvdGFsX2RlcHMKKworICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGZpbmRfY2hhaW5zKHRhc2ssIFtdKQorCisgICAgICAgIHJldHVybiBtc2dzCisKKyAgICBkZWYgY2FsY3VsYXRlX3Rhc2tfd2VpZ2h0cyhzZWxmLCBlbmRwb2ludHMpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsY3VsYXRlIGEgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgIndlaWdodCIgb2YgZWFjaCB0YXNrLiBIZWF2aWVyIHdlaWdodGVkIHRhc2tzCisgICAgICAgIGhhdmUgbW9yZSBkZXBlbmRlbmNpZXMgYW5kIGhlbmNlIHNob3VsZCBiZSBleGVjdXRlZCBzb29uZXIgZm9yIG1heGltdW0gc3BlZWQuCisKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBhbHNvIHNhbml0eSBjaGVja3MgdGhlIHRhc2sgbGlzdCBmaW5kaW5nIHRhc2tzIHRoYXQgYXJlIG5vdAorICAgICAgICBwb3NzaWJsZSB0byBleGVjdXRlIGR1ZSB0byBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCisgICAgICAgICIiIgorCisgICAgICAgIG51bVRhc2tzID0gbGVuKHNlbGYucnVucV9mbmlkKQorICAgICAgICB3ZWlnaHQgPSBbXQorICAgICAgICBkZXBzX2xlZnQgPSBbXQorICAgICAgICB0YXNrX2RvbmUgPSBbXQorCisgICAgICAgIGZvciBsaXN0aWQgaW4geHJhbmdlKG51bVRhc2tzKToKKyAgICAgICAgICAgIHRhc2tfZG9uZS5hcHBlbmQoRmFsc2UpCisgICAgICAgICAgICB3ZWlnaHQuYXBwZW5kKDEpCisgICAgICAgICAgICBkZXBzX2xlZnQuYXBwZW5kKGxlbihzZWxmLnJ1bnFfcmV2ZGVwc1tsaXN0aWRdKSkKKworICAgICAgICBmb3IgbGlzdGlkIGluIGVuZHBvaW50czoKKyAgICAgICAgICAgIHdlaWdodFtsaXN0aWRdID0gMTAKKyAgICAgICAgICAgIHRhc2tfZG9uZVtsaXN0aWRdID0gVHJ1ZQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBuZXh0X3BvaW50cyA9IFtdCisgICAgICAgICAgICBmb3IgbGlzdGlkIGluIGVuZHBvaW50czoKKyAgICAgICAgICAgICAgICBmb3IgcmV2ZGVwIGluIHNlbGYucnVucV9kZXBlbmRzW2xpc3RpZF06CisgICAgICAgICAgICAgICAgICAgIHdlaWdodFtyZXZkZXBdID0gd2VpZ2h0W3JldmRlcF0gKyB3ZWlnaHRbbGlzdGlkXQorICAgICAgICAgICAgICAgICAgICBkZXBzX2xlZnRbcmV2ZGVwXSA9IGRlcHNfbGVmdFtyZXZkZXBdIC0gMQorICAgICAgICAgICAgICAgICAgICBpZiBkZXBzX2xlZnRbcmV2ZGVwXSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9wb2ludHMuYXBwZW5kKHJldmRlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tfZG9uZVtyZXZkZXBdID0gVHJ1ZQorICAgICAgICAgICAgZW5kcG9pbnRzID0gbmV4dF9wb2ludHMKKyAgICAgICAgICAgIGlmIGxlbihuZXh0X3BvaW50cykgPT0gMDoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgQ2lyY3VsYXIgZGVwZW5kZW5jeSBzYW5pdHkgY2hlY2sKKyAgICAgICAgcHJvYmxlbV90YXNrcyA9IFtdCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShudW1UYXNrcyk6CisgICAgICAgICAgICBpZiB0YXNrX2RvbmVbdGFza10gaXMgRmFsc2Ugb3IgZGVwc19sZWZ0W3Rhc2tdICE9IDA6CisgICAgICAgICAgICAgICAgcHJvYmxlbV90YXNrcy5hcHBlbmQodGFzaykKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlRhc2sgJXMgKCVzKSBpcyBub3QgYnVpbGRhYmxlIiwgdGFzaywgc2VsZi5nZXRfdXNlcl9pZHN0cmluZyh0YXNrKSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIihDb21wbGV0ZSBtYXJrZXIgd2FzICVzIGFuZCB0aGUgcmVtYWluaW5nIGRlcGVuZGVuY3kgY291bnQgd2FzICVzKVxuIiwgdGFza19kb25lW3Rhc2tdLCBkZXBzX2xlZnRbdGFza10pCisKKyAgICAgICAgaWYgcHJvYmxlbV90YXNrczoKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiVW5idWlsZGFibGUgdGFza3Mgd2VyZSBmb3VuZC5cbiIKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlICsgIlRoZXNlIGFyZSB1c3VhbGx5IGNhdXNlZCBieSBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGFueSBjaXJjdWxhciBkZXBlbmRlbmN5IGNoYWlucyBmb3VuZCB3aWxsIGJlIHByaW50ZWQgYmVsb3cuIEluY3JlYXNlIHRoZSBkZWJ1ZyBsZXZlbCB0byBzZWUgYSBsaXN0IG9mIHVuYnVpbGRhYmxlIHRhc2tzLlxuXG4iCisgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZSArICJJZGVudGlmeWluZyBkZXBlbmRlbmN5IGxvb3BzICh0aGlzIG1heSB0YWtlIGEgc2hvcnQgd2hpbGUpLi4uXG4iCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IobWVzc2FnZSkKKworICAgICAgICAgICAgbXNncyA9IHNlbGYuY2lyY3VsYXJfZGVwY2hhaW5zX2hhbmRsZXIocHJvYmxlbV90YXNrcykKKworICAgICAgICAgICAgbWVzc2FnZSA9ICJcbiIKKyAgICAgICAgICAgIGZvciBtc2cgaW4gbXNnczoKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZSArIG1zZworICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsIG1lc3NhZ2UpCisKKyAgICAgICAgcmV0dXJuIHdlaWdodAorCisgICAgZGVmIHByZXBhcmUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUdXJuIGEgc2V0IG9mIHRhc2tEYXRhIGludG8gYSBSdW5RdWV1ZSBhbmQgY29tcHV0ZSBkYXRhIG5lZWRlZAorICAgICAgICB0byBvcHRpbWlzZSB0aGUgZXhlY3V0aW9uIG9yZGVyLgorICAgICAgICAiIiIKKworICAgICAgICBydW5xX2J1aWxkID0gW10KKyAgICAgICAgcmVjdXJzaXZldGFza3MgPSB7fQorICAgICAgICByZWN1cnNpdmVpdGFza3MgPSB7fQorICAgICAgICByZWN1cnNpdmV0YXNrc3NlbGZyZWYgPSBzZXQoKQorCisgICAgICAgIHRhc2tEYXRhID0gc2VsZi50YXNrRGF0YQorCisgICAgICAgIGlmIGxlbih0YXNrRGF0YS50YXNrc19uYW1lKSA9PSAwOgorICAgICAgICAgICAgIyBOb3RoaW5nIHRvIGRvCisgICAgICAgICAgICByZXR1cm4gMAorCisgICAgICAgIGxvZ2dlci5pbmZvKCJQcmVwYXJpbmcgUnVuUXVldWUiKQorCisgICAgICAgICMgU3RlcCBBIC0gV29yayBvdXQgYSBsaXN0IG9mIHRhc2tzIHRvIHJ1bgorICAgICAgICAjCisgICAgICAgICMgVGFza2RhdGEgZ2l2ZXMgdXMgYSBsaXN0IG9mIHBvc3NpYmxlIHByb3ZpZGVycyBmb3IgZXZlcnkgYnVpbGQgYW5kIHJ1bgorICAgICAgICAjIHRhcmdldCBvcmRlcmVkIGJ5IHByaW9yaXR5LiBJdCBhbHNvIGdpdmVzIGluZm9ybWF0aW9uIG9uIGVhY2ggb2YgdGhvc2UKKyAgICAgICAgIyBwcm92aWRlcnMuCisgICAgICAgICMKKyAgICAgICAgIyBUbyBjcmVhdGUgdGhlIGFjdHVhbCBsaXN0IG9mIHRhc2tzIHRvIGV4ZWN1dGUgd2UgZml4IHRoZSBsaXN0IG9mCisgICAgICAgICMgcHJvdmlkZXJzIGFuZCB0aGVuIHJlc29sdmUgdGhlIGRlcGVuZGVuY2llcyBpbnRvIHRhc2sgSURzLiBUaGlzCisgICAgICAgICMgcHJvY2VzcyBpcyByZXBlYXRlZCBmb3IgZWFjaCB0eXBlIG9mIGRlcGVuZGVuY3kgKHRkZXBlbmRzLCBkZXB0YXNrLAorICAgICAgICAjIHJkZXB0YXN0LCByZWNyZGVwdGFzaywgaWRlcGVuZHMpLgorCisgICAgICAgIGRlZiBhZGRfYnVpbGRfZGVwZW5kZW5jaWVzKGRlcGlkcywgdGFza25hbWVzLCBkZXBlbmRzKToKKyAgICAgICAgICAgIGZvciBkZXBpZCBpbiBkZXBpZHM6CisgICAgICAgICAgICAgICAgIyBXb24ndCBiZSBpbiBidWlsZF90YXJnZXRzIGlmIEFTU1VNRV9QUk9WSURFRAorICAgICAgICAgICAgICAgIGlmIGRlcGlkIG5vdCBpbiB0YXNrRGF0YS5idWlsZF90YXJnZXRzOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGRlcGRhdGEgPSB0YXNrRGF0YS5idWlsZF90YXJnZXRzW2RlcGlkXVswXQorICAgICAgICAgICAgICAgIGlmIGRlcGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBmb3IgdGFza25hbWUgaW4gdGFza25hbWVzOgorICAgICAgICAgICAgICAgICAgICB0YXNraWQgPSB0YXNrRGF0YS5nZXR0YXNrX2lkX2Zyb21mbmlkKGRlcGRhdGEsIHRhc2tuYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiB0YXNraWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLmFkZCh0YXNraWQpCisKKyAgICAgICAgZGVmIGFkZF9ydW50aW1lX2RlcGVuZGVuY2llcyhkZXBpZHMsIHRhc2tuYW1lcywgZGVwZW5kcyk6CisgICAgICAgICAgICBmb3IgZGVwaWQgaW4gZGVwaWRzOgorICAgICAgICAgICAgICAgIGlmIGRlcGlkIG5vdCBpbiB0YXNrRGF0YS5ydW5fdGFyZ2V0czoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkZXBkYXRhID0gdGFza0RhdGEucnVuX3RhcmdldHNbZGVwaWRdWzBdCisgICAgICAgICAgICAgICAgaWYgZGVwZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZvciB0YXNrbmFtZSBpbiB0YXNrbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHRhc2tpZCA9IHRhc2tEYXRhLmdldHRhc2tfaWRfZnJvbWZuaWQoZGVwZGF0YSwgdGFza25hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHRhc2tpZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMuYWRkKHRhc2tpZCkKKworICAgICAgICBkZWYgYWRkX3Jlc29sdmVkX2RlcGVuZGVuY2llcyhkZXBpZHMsIHRhc2tuYW1lcywgZGVwZW5kcyk6CisgICAgICAgICAgICBmb3IgZGVwaWQgaW4gZGVwaWRzOgorICAgICAgICAgICAgICAgIGZvciB0YXNrbmFtZSBpbiB0YXNrbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHRhc2tpZCA9IHRhc2tEYXRhLmdldHRhc2tfaWRfZnJvbWZuaWQoZGVwaWQsIHRhc2tuYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiB0YXNraWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLmFkZCh0YXNraWQpCisKKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbih0YXNrRGF0YS50YXNrc19uYW1lKSk6CisgICAgICAgICAgICBkZXBlbmRzID0gc2V0KCkKKyAgICAgICAgICAgIGZuaWQgPSB0YXNrRGF0YS50YXNrc19mbmlkW3Rhc2tdCisgICAgICAgICAgICBmbiA9IHRhc2tEYXRhLmZuX2luZGV4W2ZuaWRdCisgICAgICAgICAgICB0YXNrX2RlcHMgPSBzZWxmLmRhdGFDYWNoZS50YXNrX2RlcHNbZm5dCisKKyAgICAgICAgICAgICNsb2dnZXIuZGVidWcoMiwgIlByb2Nlc3NpbmcgJXM6JXMiLCBmbiwgdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXSkKKworICAgICAgICAgICAgaWYgZm5pZCBub3QgaW4gdGFza0RhdGEuZmFpbGVkX2ZuaWRzOgorCisgICAgICAgICAgICAgICAgIyBSZXNvbHZlIHRhc2sgaW50ZXJuYWwgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgZS5nLiBhZGR0YXNrIGJlZm9yZSBYIGFmdGVyIFkKKyAgICAgICAgICAgICAgICBkZXBlbmRzID0gc2V0KHRhc2tEYXRhLnRhc2tzX3RkZXBlbmRzW3Rhc2tdKQorCisgICAgICAgICAgICAgICAgIyBSZXNvbHZlICdkZXB0YXNrJyBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBlLmcuIGRvX3NvbWV0YXNrW2RlcHRhc2tdID0gImRvX3NvbWVvdGhlcnRhc2siCisgICAgICAgICAgICAgICAgIyAobWFrZXMgc3VyZSBzb21ldGFzayBydW5zIGFmdGVyIHNvbWVvdGhlcnRhc2sgb2YgYWxsIERFUEVORFMpCisgICAgICAgICAgICAgICAgaWYgJ2RlcHRhc2snIGluIHRhc2tfZGVwcyBhbmQgdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXSBpbiB0YXNrX2RlcHNbJ2RlcHRhc2snXToKKyAgICAgICAgICAgICAgICAgICAgdGFza25hbWVzID0gdGFza19kZXBzWydkZXB0YXNrJ11bdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXV0uc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICBhZGRfYnVpbGRfZGVwZW5kZW5jaWVzKHRhc2tEYXRhLmRlcGlkc1tmbmlkXSwgdGFza25hbWVzLCBkZXBlbmRzKQorCisgICAgICAgICAgICAgICAgIyBSZXNvbHZlICdyZGVwdGFzaycgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgZS5nLiBkb19zb21ldGFza1tyZGVwdGFza10gPSAiZG9fc29tZW90aGVydGFzayIKKyAgICAgICAgICAgICAgICAjIChtYWtlcyBzdXJlIHNvbWV0YXNrIHJ1bnMgYWZ0ZXIgc29tZW90aGVydGFzayBvZiBhbGwgUkRFUEVORFMpCisgICAgICAgICAgICAgICAgaWYgJ3JkZXB0YXNrJyBpbiB0YXNrX2RlcHMgYW5kIHRhc2tEYXRhLnRhc2tzX25hbWVbdGFza10gaW4gdGFza19kZXBzWydyZGVwdGFzayddOgorICAgICAgICAgICAgICAgICAgICB0YXNrbmFtZXMgPSB0YXNrX2RlcHNbJ3JkZXB0YXNrJ11bdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXV0uc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICBhZGRfcnVudGltZV9kZXBlbmRlbmNpZXModGFza0RhdGEucmRlcGlkc1tmbmlkXSwgdGFza25hbWVzLCBkZXBlbmRzKQorCisgICAgICAgICAgICAgICAgIyBSZXNvbHZlIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgZS5nLiBkb19zb21ldGFza1tkZXBlbmRzXSA9ICJ0YXJnZXRuYW1lOmRvX3NvbWVvdGhlcnRhc2siCisgICAgICAgICAgICAgICAgIyAobWFrZXMgc3VyZSBzb21ldGFzayBydW5zIGFmdGVyIHRhcmdldG5hbWUncyBzb21lb3RoZXJ0YXNrKQorICAgICAgICAgICAgICAgIGlkZXBlbmRzID0gdGFza0RhdGEudGFza3NfaWRlcGVuZHNbdGFza10KKyAgICAgICAgICAgICAgICBmb3IgKGRlcGlkLCBpZGVwZW5kdGFzaykgaW4gaWRlcGVuZHM6CisgICAgICAgICAgICAgICAgICAgIGlmIGRlcGlkIGluIHRhc2tEYXRhLmJ1aWxkX3RhcmdldHMgYW5kIG5vdCBkZXBpZCBpbiB0YXNrRGF0YS5mYWlsZWRfZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgV29uJ3QgYmUgaW4gYnVpbGRfdGFyZ2V0cyBpZiBBU1NVTUVfUFJPVklERUQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGRhdGEgPSB0YXNrRGF0YS5idWlsZF90YXJnZXRzW2RlcGlkXVswXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVwZGF0YSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNraWQgPSB0YXNrRGF0YS5nZXR0YXNrX2lkX2Zyb21mbmlkKGRlcGRhdGEsIGlkZXBlbmR0YXNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRhc2tpZCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIlRhc2sgJXMgaW4gJXMgZGVwZW5kcyB1cG9uIG5vbi1leGlzdGVudCB0YXNrICVzIGluICVzIiAlICh0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdLCBmbiwgaWRlcGVuZHRhc2ssIHRhc2tEYXRhLmZuX2luZGV4W2RlcGRhdGFdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLmFkZCh0YXNraWQpCisgICAgICAgICAgICAgICAgaXJkZXBlbmRzID0gdGFza0RhdGEudGFza3NfaXJkZXBlbmRzW3Rhc2tdCisgICAgICAgICAgICAgICAgZm9yIChkZXBpZCwgaWRlcGVuZHRhc2spIGluIGlyZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwaWQgaW4gdGFza0RhdGEucnVuX3RhcmdldHM6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFdvbid0IGJlIGluIHJ1bl90YXJnZXRzIGlmIEFTU1VNRV9QUk9WSURFRAorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZGF0YSA9IHRhc2tEYXRhLnJ1bl90YXJnZXRzW2RlcGlkXVswXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVwZGF0YSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNraWQgPSB0YXNrRGF0YS5nZXR0YXNrX2lkX2Zyb21mbmlkKGRlcGRhdGEsIGlkZXBlbmR0YXNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRhc2tpZCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIlRhc2sgJXMgaW4gJXMgcmRlcGVuZHMgdXBvbiBub24tZXhpc3RlbnQgdGFzayAlcyBpbiAlcyIgJSAodGFza0RhdGEudGFza3NfbmFtZVt0YXNrXSwgZm4sIGlkZXBlbmR0YXNrLCB0YXNrRGF0YS5mbl9pbmRleFtkZXBkYXRhXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcy5hZGQodGFza2lkKQorCisgICAgICAgICAgICAgICAgIyBSZXNvbHZlIHJlY3Vyc2l2ZSAncmVjcmRlcHRhc2snIGRlcGVuZGVuY2llcyAoUGFydCBBKQorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIGUuZy4gZG9fc29tZXRhc2tbcmVjcmRlcHRhc2tdID0gImRvX3NvbWVvdGhlcnRhc2siCisgICAgICAgICAgICAgICAgIyAobWFrZXMgc3VyZSBzb21ldGFzayBydW5zIGFmdGVyIHNvbWVvdGhlcnRhc2sgb2YgYWxsIERFUEVORFMsIFJERVBFTkRTIGFuZCBpbnRlcnRhc2sgZGVwZW5kZW5jaWVzLCByZWN1cnNpdmVseSkKKyAgICAgICAgICAgICAgICAjIFdlIGNvdmVyIHRoZSByZWN1cnNpdmUgcGFydCBvZiB0aGUgZGVwZW5kZW5jaWVzIGJlbG93CisgICAgICAgICAgICAgICAgaWYgJ3JlY3JkZXB0YXNrJyBpbiB0YXNrX2RlcHMgYW5kIHRhc2tEYXRhLnRhc2tzX25hbWVbdGFza10gaW4gdGFza19kZXBzWydyZWNyZGVwdGFzayddOgorICAgICAgICAgICAgICAgICAgICB0YXNrbmFtZXMgPSB0YXNrX2RlcHNbJ3JlY3JkZXB0YXNrJ11bdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXV0uc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmV0YXNrc1t0YXNrXSA9IHRhc2tuYW1lcworICAgICAgICAgICAgICAgICAgICBhZGRfYnVpbGRfZGVwZW5kZW5jaWVzKHRhc2tEYXRhLmRlcGlkc1tmbmlkXSwgdGFza25hbWVzLCBkZXBlbmRzKQorICAgICAgICAgICAgICAgICAgICBhZGRfcnVudGltZV9kZXBlbmRlbmNpZXModGFza0RhdGEucmRlcGlkc1tmbmlkXSwgdGFza25hbWVzLCBkZXBlbmRzKQorICAgICAgICAgICAgICAgICAgICBpZiB0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdIGluIHRhc2tuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZXRhc2tzc2VsZnJlZi5hZGQodGFzaykKKworICAgICAgICAgICAgICAgICAgICBpZiAncmVjaWRlcHRhc2snIGluIHRhc2tfZGVwcyBhbmQgdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXSBpbiB0YXNrX2RlcHNbJ3JlY2lkZXB0YXNrJ106CisgICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmVpdGFza3NbdGFza10gPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHQgaW4gdGFza19kZXBzWydyZWNpZGVwdGFzayddW3Rhc2tEYXRhLnRhc2tzX25hbWVbdGFza11dLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZGVwID0gdGFza0RhdGEuZ2V0dGFza19pZF9mcm9tZm5pZChmbmlkLCB0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZWl0YXNrc1t0YXNrXS5hcHBlbmQobmV3ZGVwKQorCisgICAgICAgICAgICBzZWxmLnJ1bnFfZm5pZC5hcHBlbmQodGFza0RhdGEudGFza3NfZm5pZFt0YXNrXSkKKyAgICAgICAgICAgIHNlbGYucnVucV90YXNrLmFwcGVuZCh0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdKQorICAgICAgICAgICAgc2VsZi5ydW5xX2RlcGVuZHMuYXBwZW5kKGRlcGVuZHMpCisgICAgICAgICAgICBzZWxmLnJ1bnFfcmV2ZGVwcy5hcHBlbmQoc2V0KCkpCisgICAgICAgICAgICBzZWxmLnJ1bnFfaGFzaC5hcHBlbmQoIiIpCisKKyAgICAgICAgICAgIHJ1bnFfYnVpbGQuYXBwZW5kKDApCisKKyAgICAgICAgIyBSZXNvbHZlIHJlY3Vyc2l2ZSAncmVjcmRlcHRhc2snIGRlcGVuZGVuY2llcyAoUGFydCBCKQorICAgICAgICAjCisgICAgICAgICMgZS5nLiBkb19zb21ldGFza1tyZWNyZGVwdGFza10gPSAiZG9fc29tZW90aGVydGFzayIKKyAgICAgICAgIyAobWFrZXMgc3VyZSBzb21ldGFzayBydW5zIGFmdGVyIHNvbWVvdGhlcnRhc2sgb2YgYWxsIERFUEVORFMsIFJERVBFTkRTIGFuZCBpbnRlcnRhc2sgZGVwZW5kZW5jaWVzLCByZWN1cnNpdmVseSkKKyAgICAgICAgIyBXZSBuZWVkIHRvIGRvIHRoaXMgc2VwYXJhdGVseSBzaW5jZSB3ZSBuZWVkIGFsbCBvZiBzZWxmLnJ1bnFfZGVwZW5kcyB0byBiZSBjb21wbGV0ZSBiZWZvcmUgdGhpcyBpcyBwcm9jZXNzZWQKKyAgICAgICAgZXh0cmFkZXBzID0ge30KKyAgICAgICAgZm9yIHRhc2sgaW4gcmVjdXJzaXZldGFza3M6CisgICAgICAgICAgICBleHRyYWRlcHNbdGFza10gPSBzZXQoc2VsZi5ydW5xX2RlcGVuZHNbdGFza10pCisgICAgICAgICAgICB0YXNrbmFtZXMgPSByZWN1cnNpdmV0YXNrc1t0YXNrXQorICAgICAgICAgICAgc2VlbmRlcHMgPSBzZXQoKQorICAgICAgICAgICAgc2VlbmZuaWQgPSBbXQorCisgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfcmVjZGVwcyh0KToKKyAgICAgICAgICAgICAgICBuZXdkZXBzID0gc2V0KCkKKyAgICAgICAgICAgICAgICBhZGRfcmVzb2x2ZWRfZGVwZW5kZW5jaWVzKFt0YXNrRGF0YS50YXNrc19mbmlkW3RdXSwgdGFza25hbWVzLCBuZXdkZXBzKQorICAgICAgICAgICAgICAgIGV4dHJhZGVwc1t0YXNrXS51cGRhdGUobmV3ZGVwcykKKyAgICAgICAgICAgICAgICBzZWVuZGVwcy5hZGQodCkKKyAgICAgICAgICAgICAgICBuZXdkZXBzLmFkZCh0KQorICAgICAgICAgICAgICAgIGZvciBpIGluIG5ld2RlcHM6CisgICAgICAgICAgICAgICAgICAgIGZvciBuIGluIHNlbGYucnVucV9kZXBlbmRzW2ldOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbiBub3QgaW4gc2VlbmRlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfcmVjZGVwcyhuKQorICAgICAgICAgICAgZ2VuZXJhdGVfcmVjZGVwcyh0YXNrKQorCisgICAgICAgICAgICBpZiB0YXNrIGluIHJlY3Vyc2l2ZWl0YXNrczoKKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHJlY3Vyc2l2ZWl0YXNrc1t0YXNrXToKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfcmVjZGVwcyhkZXApCisKKyAgICAgICAgIyBSZW1vdmUgY2lyY3VsYXIgcmVmZXJlbmNlcyBzbyB0aGF0IGRvX2FbcmVjcmRlcHRhc2tdID0gImRvX2EgZG9fYiIgY2FuIHdvcmsKKyAgICAgICAgZm9yIHRhc2sgaW4gcmVjdXJzaXZldGFza3M6CisgICAgICAgICAgICBleHRyYWRlcHNbdGFza10uZGlmZmVyZW5jZV91cGRhdGUocmVjdXJzaXZldGFza3NzZWxmcmVmKQorCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4odGFza0RhdGEudGFza3NfbmFtZSkpOgorICAgICAgICAgICAgIyBBZGQgaW4gZXh0cmEgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBpZiB0YXNrIGluIGV4dHJhZGVwczoKKyAgICAgICAgICAgICAgICAgc2VsZi5ydW5xX2RlcGVuZHNbdGFza10gPSBleHRyYWRlcHNbdGFza10KKyAgICAgICAgICAgICMgUmVtb3ZlIGFsbCBzZWxmIHJlZmVyZW5jZXMKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gc2VsZi5ydW5xX2RlcGVuZHNbdGFza106CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJUYXNrICVzICglcyAlcykgY29udGFpbnMgc2VsZiByZWZlcmVuY2UhICVzIiwgdGFzaywgdGFza0RhdGEuZm5faW5kZXhbdGFza0RhdGEudGFza3NfZm5pZFt0YXNrXV0sIHRhc2tEYXRhLnRhc2tzX25hbWVbdGFza10sIHNlbGYucnVucV9kZXBlbmRzW3Rhc2tdKQorICAgICAgICAgICAgICAgIHNlbGYucnVucV9kZXBlbmRzW3Rhc2tdLnJlbW92ZSh0YXNrKQorCisgICAgICAgICMgU3RlcCBCIC0gTWFyayBhbGwgYWN0aXZlIHRhc2tzCisgICAgICAgICMKKyAgICAgICAgIyBTdGFydCB3aXRoIHRoZSB0YXNrcyB3ZSB3ZXJlIGFza2VkIHRvIHJ1biBhbmQgbWFyayBhbGwgZGVwZW5kZW5jaWVzCisgICAgICAgICMgYXMgYWN0aXZlIHRvby4gSWYgdGhlIHRhc2sgaXMgdG8gYmUgJ2ZvcmNlZCcsIGNsZWFyIGl0cyBzdGFtcC4gT25jZQorICAgICAgICAjIGFsbCBhY3RpdmUgdGFza3MgYXJlIG1hcmtlZCwgcHJ1bmUgdGhlIG9uZXMgd2UgZG9uJ3QgbmVlZC4KKworICAgICAgICBsb2dnZXIudmVyYm9zZSgiTWFya2luZyBBY3RpdmUgVGFza3MiKQorCisgICAgICAgIGRlZiBtYXJrX2FjdGl2ZShsaXN0aWQsIGRlcHRoKToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgTWFyayBhbiBpdGVtIGFzIGFjdGl2ZSBhbG9uZyB3aXRoIGl0cyBkZXBlbmRzCisgICAgICAgICAgICAoY2FsbHMgaXRzZWxmIHJlY3Vyc2l2ZWx5KQorICAgICAgICAgICAgIiIiCisKKyAgICAgICAgICAgIGlmIHJ1bnFfYnVpbGRbbGlzdGlkXSA9PSAxOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBydW5xX2J1aWxkW2xpc3RpZF0gPSAxCisKKyAgICAgICAgICAgIGRlcGVuZHMgPSBzZWxmLnJ1bnFfZGVwZW5kc1tsaXN0aWRdCisgICAgICAgICAgICBmb3IgZGVwZW5kIGluIGRlcGVuZHM6CisgICAgICAgICAgICAgICAgbWFya19hY3RpdmUoZGVwZW5kLCBkZXB0aCsxKQorCisgICAgICAgIHNlbGYudGFyZ2V0X3BhaXJzID0gW10KKyAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLnRhcmdldHM6CisgICAgICAgICAgICB0YXJnZXRpZCA9IHRhc2tEYXRhLmdldGJ1aWxkX2lkKHRhcmdldFswXSkKKworICAgICAgICAgICAgaWYgdGFyZ2V0aWQgbm90IGluIHRhc2tEYXRhLmJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgdGFyZ2V0aWQgaW4gdGFza0RhdGEuZmFpbGVkX2RlcHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZm5pZCA9IHRhc2tEYXRhLmJ1aWxkX3RhcmdldHNbdGFyZ2V0aWRdWzBdCisgICAgICAgICAgICBmbiA9IHRhc2tEYXRhLmZuX2luZGV4W2ZuaWRdCisgICAgICAgICAgICBzZWxmLnRhcmdldF9wYWlycy5hcHBlbmQoKGZuLCB0YXJnZXRbMV0pKQorCisgICAgICAgICAgICBpZiBmbmlkIGluIHRhc2tEYXRhLmZhaWxlZF9mbmlkczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiB0YXJnZXRbMV0gbm90IGluIHRhc2tEYXRhLnRhc2tzX2xvb2t1cFtmbmlkXToKKyAgICAgICAgICAgICAgICBpbXBvcnQgZGlmZmxpYgorICAgICAgICAgICAgICAgIGNsb3NlX21hdGNoZXMgPSBkaWZmbGliLmdldF9jbG9zZV9tYXRjaGVzKHRhcmdldFsxXSwgdGFza0RhdGEudGFza3NfbG9va3VwW2ZuaWRdLCBjdXRvZmY9MC43KQorICAgICAgICAgICAgICAgIGlmIGNsb3NlX21hdGNoZXM6CisgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gIi4gQ2xvc2UgbWF0Y2hlczpcbiAgJXMiICUgIlxuICAiLmpvaW4oY2xvc2VfbWF0Y2hlcykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBleHRyYSA9ICIiCisgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJUYXNrICVzIGRvZXMgbm90IGV4aXN0IGZvciB0YXJnZXQgJXMlcyIgJSAodGFyZ2V0WzFdLCB0YXJnZXRbMF0sIGV4dHJhKSkKKworICAgICAgICAgICAgbGlzdGlkID0gdGFza0RhdGEudGFza3NfbG9va3VwW2ZuaWRdW3RhcmdldFsxXV0KKworICAgICAgICAgICAgbWFya19hY3RpdmUobGlzdGlkLCAxKQorCisgICAgICAgICMgU3RlcCBDIC0gUHJ1bmUgYWxsIGluYWN0aXZlIHRhc2tzCisgICAgICAgICMKKyAgICAgICAgIyBPbmNlIGFsbCBhY3RpdmUgdGFza3MgYXJlIG1hcmtlZCwgcHJ1bmUgdGhlIG9uZXMgd2UgZG9uJ3QgbmVlZC4KKworICAgICAgICBtYXBzID0gW10KKyAgICAgICAgZGVsY291bnQgPSAwCisgICAgICAgIGZvciBsaXN0aWQgaW4geHJhbmdlKGxlbihzZWxmLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgaWYgcnVucV9idWlsZFtsaXN0aWQtZGVsY291bnRdID09IDE6CisgICAgICAgICAgICAgICAgbWFwcy5hcHBlbmQobGlzdGlkLWRlbGNvdW50KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5ydW5xX2ZuaWRbbGlzdGlkLWRlbGNvdW50XQorICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJ1bnFfdGFza1tsaXN0aWQtZGVsY291bnRdCisgICAgICAgICAgICAgICAgZGVsIHNlbGYucnVucV9kZXBlbmRzW2xpc3RpZC1kZWxjb3VudF0KKyAgICAgICAgICAgICAgICBkZWwgcnVucV9idWlsZFtsaXN0aWQtZGVsY291bnRdCisgICAgICAgICAgICAgICAgZGVsIHNlbGYucnVucV9yZXZkZXBzW2xpc3RpZC1kZWxjb3VudF0KKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5ydW5xX2hhc2hbbGlzdGlkLWRlbGNvdW50XQorICAgICAgICAgICAgICAgIGRlbGNvdW50ID0gZGVsY291bnQgKyAxCisgICAgICAgICAgICAgICAgbWFwcy5hcHBlbmQoLTEpCisKKyAgICAgICAgIworICAgICAgICAjIFN0ZXAgRCAtIFNhbml0eSBjaGVja3MgYW5kIGNvbXB1dGF0aW9uCisgICAgICAgICMKKworICAgICAgICAjIENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBzdGlsbCBoYXZlIHRhc2tzIHRvIHJ1bgorICAgICAgICBpZiBsZW4oc2VsZi5ydW5xX2ZuaWQpID09IDA6CisgICAgICAgICAgICBpZiBub3QgdGFza0RhdGEuYWJvcnQ6CisgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJBbGwgYnVpbGRhYmxlIHRhc2tzIGhhdmUgYmVlbiBydW4gYnV0IHRoZSBidWlsZCBpcyBpbmNvbXBsZXRlICgtLWNvbnRpbnVlIG1vZGUpLiBFcnJvcnMgZm9yIHRoZSB0YXNrcyB0aGF0IGZhaWxlZCB3aWxsIGhhdmUgYmVlbiBwcmludGVkIGFib3ZlLiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiUnVuUXVldWUiLCAiTm8gYWN0aXZlIHRhc2tzIGFuZCBub3QgaW4gLS1jb250aW51ZSBtb2RlPyEgUGxlYXNlIHJlcG9ydCB0aGlzIGJ1Zy4iKQorCisgICAgICAgIGxvZ2dlci52ZXJib3NlKCJQcnVuZWQgJXMgaW5hY3RpdmUgdGFza3MsICVzIGxlZnQiLCBkZWxjb3VudCwgbGVuKHNlbGYucnVucV9mbmlkKSkKKworICAgICAgICAjIFJlbWFwIHRoZSBkZXBlbmRlbmNpZXMgdG8gYWNjb3VudCBmb3IgdGhlIGRlbGV0ZWQgdGFza3MKKyAgICAgICAgIyBDaGVjayB3ZSBkaWRuJ3QgZGVsZXRlIGEgdGFzayB3ZSBkZXBlbmQgb24KKyAgICAgICAgZm9yIGxpc3RpZCBpbiB4cmFuZ2UobGVuKHNlbGYucnVucV9mbmlkKSk6CisgICAgICAgICAgICBuZXdkZXBzID0gW10KKyAgICAgICAgICAgIG9yaWdkZXBzID0gc2VsZi5ydW5xX2RlcGVuZHNbbGlzdGlkXQorICAgICAgICAgICAgZm9yIG9yaWdkZXAgaW4gb3JpZ2RlcHM6CisgICAgICAgICAgICAgICAgaWYgbWFwc1tvcmlnZGVwXSA9PSAtMToKKyAgICAgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJJbnZhbGlkIG1hcHBpbmcgLSBTaG91bGQgbmV2ZXIgaGFwcGVuISIpCisgICAgICAgICAgICAgICAgbmV3ZGVwcy5hcHBlbmQobWFwc1tvcmlnZGVwXSkKKyAgICAgICAgICAgIHNlbGYucnVucV9kZXBlbmRzW2xpc3RpZF0gPSBzZXQobmV3ZGVwcykKKworICAgICAgICBsb2dnZXIudmVyYm9zZSgiQXNzaWduIFdlaWdodGluZ3MiKQorCisgICAgICAgICMgR2VuZXJhdGUgYSBsaXN0IG9mIHJldmVyc2UgZGVwZW5kZW5jaWVzIHRvIGVhc2UgZnV0dXJlIGNhbGN1bGF0aW9ucworICAgICAgICBmb3IgbGlzdGlkIGluIHhyYW5nZShsZW4oc2VsZi5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ydW5xX2RlcGVuZHNbbGlzdGlkXToKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfcmV2ZGVwc1tkZXBdLmFkZChsaXN0aWQpCisKKyAgICAgICAgIyBJZGVudGlmeSB0YXNrcyBhdCB0aGUgZW5kIG9mIGRlcGVuZGVuY3kgY2hhaW5zCisgICAgICAgICMgRXJyb3Igb24gY2lyY3VsYXIgZGVwZW5kZW5jeSBsb29wcyAobGVuZ3RoIHR3bykKKyAgICAgICAgZW5kcG9pbnRzID0gW10KKyAgICAgICAgZm9yIGxpc3RpZCBpbiB4cmFuZ2UobGVuKHNlbGYucnVucV9mbmlkKSk6CisgICAgICAgICAgICByZXZkZXBzID0gc2VsZi5ydW5xX3JldmRlcHNbbGlzdGlkXQorICAgICAgICAgICAgaWYgbGVuKHJldmRlcHMpID09IDA6CisgICAgICAgICAgICAgICAgZW5kcG9pbnRzLmFwcGVuZChsaXN0aWQpCisgICAgICAgICAgICBmb3IgZGVwIGluIHJldmRlcHM6CisgICAgICAgICAgICAgICAgaWYgZGVwIGluIHNlbGYucnVucV9kZXBlbmRzW2xpc3RpZF06CisgICAgICAgICAgICAgICAgICAgICNzZWxmLmR1bXBfZGF0YSh0YXNrRGF0YSkKKyAgICAgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJUYXNrICVzICglcykgaGFzIGNpcmN1bGFyIGRlcGVuZGVuY3kgb24gJXMgKCVzKSIgJSAodGFza0RhdGEuZm5faW5kZXhbc2VsZi5ydW5xX2ZuaWRbZGVwXV0sIHNlbGYucnVucV90YXNrW2RlcF0sIHRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnVucV9mbmlkW2xpc3RpZF1dLCBzZWxmLnJ1bnFfdGFza1tsaXN0aWRdKSkKKworICAgICAgICBsb2dnZXIudmVyYm9zZSgiQ29tcHV0ZSB0b3RhbHMgKGhhdmUgJXMgZW5kcG9pbnQocykpIiwgbGVuKGVuZHBvaW50cykpCisKKyAgICAgICAgIyBDYWxjdWxhdGUgdGFzayB3ZWlnaHRzCisgICAgICAgICMgQ2hlY2sgb2YgaGlnaGVyIGxlbmd0aCBjaXJjdWxhciBkZXBlbmRlbmNpZXMKKyAgICAgICAgc2VsZi5ydW5xX3dlaWdodCA9IHNlbGYuY2FsY3VsYXRlX3Rhc2tfd2VpZ2h0cyhlbmRwb2ludHMpCisKKyAgICAgICAgIyBTYW5pdHkgQ2hlY2sgLSBDaGVjayBmb3IgbXVsdGlwbGUgdGFza3MgYnVpbGRpbmcgdGhlIHNhbWUgcHJvdmlkZXIKKyAgICAgICAgcHJvdl9saXN0ID0ge30KKyAgICAgICAgc2Vlbl9mbiA9IFtdCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIGZuID0gdGFza0RhdGEuZm5faW5kZXhbc2VsZi5ydW5xX2ZuaWRbdGFza11dCisgICAgICAgICAgICBpZiBmbiBpbiBzZWVuX2ZuOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWVuX2ZuLmFwcGVuZChmbikKKyAgICAgICAgICAgIGZvciBwcm92IGluIHNlbGYuZGF0YUNhY2hlLmZuX3Byb3ZpZGVzW2ZuXToKKyAgICAgICAgICAgICAgICBpZiBwcm92IG5vdCBpbiBwcm92X2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIHByb3ZfbGlzdFtwcm92XSA9IFtmbl0KKyAgICAgICAgICAgICAgICBlbGlmIGZuIG5vdCBpbiBwcm92X2xpc3RbcHJvdl06CisgICAgICAgICAgICAgICAgICAgIHByb3ZfbGlzdFtwcm92XS5hcHBlbmQoZm4pCisgICAgICAgIGZvciBwcm92IGluIHByb3ZfbGlzdDoKKyAgICAgICAgICAgIGlmIGxlbihwcm92X2xpc3RbcHJvdl0pID4gMSBhbmQgcHJvdiBub3QgaW4gc2VsZi5tdWx0aV9wcm92aWRlcl93aGl0ZWxpc3Q6CisgICAgICAgICAgICAgICAgc2Vlbl9wbiA9IFtdCisgICAgICAgICAgICAgICAgIyBJZiB0d28gdmVyc2lvbnMgb2YgdGhlIHNhbWUgUE4gYXJlIGJlaW5nIGJ1aWx0IGl0cyBmYXRhbCwgd2UgZG9uJ3Qgc3VwcG9ydCBpdC4KKyAgICAgICAgICAgICAgICBmb3IgZm4gaW4gcHJvdl9saXN0W3Byb3ZdOgorICAgICAgICAgICAgICAgICAgICBwbiA9IHNlbGYuZGF0YUNhY2hlLnBrZ19mbltmbl0KKyAgICAgICAgICAgICAgICAgICAgaWYgcG4gbm90IGluIHNlZW5fcG46CisgICAgICAgICAgICAgICAgICAgICAgICBzZWVuX3BuLmFwcGVuZChwbikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJNdWx0aXBsZSB2ZXJzaW9ucyBvZiAlcyBhcmUgZHVlIHRvIGJlIGJ1aWx0ICglcykuIE9ubHkgb25lIHZlcnNpb24gb2YgYSBnaXZlbiBQTiBzaG91bGQgYmUgYnVpbHQgaW4gYW55IGdpdmVuIGJ1aWxkLiBZb3UgbGlrZWx5IG5lZWQgdG8gc2V0IFBSRUZFUlJFRF9WRVJTSU9OXyVzIHRvIHNlbGVjdCB0aGUgY29ycmVjdCB2ZXJzaW9uIG9yIGRvbid0IGRlcGVuZCBvbiBtdWx0aXBsZSB2ZXJzaW9ucy4iICUgKHBuLCAiICIuam9pbihwcm92X2xpc3RbcHJvdl0pLCBwbikpCisgICAgICAgICAgICAgICAgbXNnID0gIk11bHRpcGxlIC5iYiBmaWxlcyBhcmUgZHVlIHRvIGJlIGJ1aWx0IHdoaWNoIGVhY2ggcHJvdmlkZSAlcyAoJXMpLiIgJSAocHJvdiwgIiAiLmpvaW4ocHJvdl9saXN0W3Byb3ZdKSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLndhcm5fbXVsdGlfYmI6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKG1zZykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtc2cgKz0gIlxuIFRoaXMgdXN1YWxseSBtZWFucyBvbmUgcHJvdmlkZXMgc29tZXRoaW5nIHRoZSBvdGhlciBkb2Vzbid0IGFuZCBzaG91bGQuIgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IobXNnKQorCisgICAgICAgICMgQ3JlYXRlIGEgd2hpdGVsaXN0IHVzYWJsZSBieSB0aGUgc3RhbXAgY2hlY2tzCisgICAgICAgIHN0YW1wZm53aGl0ZWxpc3QgPSBbXQorICAgICAgICBmb3IgZW50cnkgaW4gc2VsZi5zdGFtcHdoaXRlbGlzdC5zcGxpdCgpOgorICAgICAgICAgICAgZW50cnlpZCA9IHNlbGYudGFza0RhdGEuZ2V0YnVpbGRfaWQoZW50cnkpCisgICAgICAgICAgICBpZiBlbnRyeWlkIG5vdCBpbiBzZWxmLnRhc2tEYXRhLmJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZuaWQgPSBzZWxmLnRhc2tEYXRhLmJ1aWxkX3RhcmdldHNbZW50cnlpZF1bMF0KKyAgICAgICAgICAgIGZuID0gc2VsZi50YXNrRGF0YS5mbl9pbmRleFtmbmlkXQorICAgICAgICAgICAgc3RhbXBmbndoaXRlbGlzdC5hcHBlbmQoZm4pCisgICAgICAgIHNlbGYuc3RhbXBmbndoaXRlbGlzdCA9IHN0YW1wZm53aGl0ZWxpc3QKKworICAgICAgICAjIEl0ZXJhdGUgb3ZlciB0aGUgdGFzayBsaXN0IGxvb2tpbmcgZm9yIHRhc2tzIHdpdGggYSAnc2V0c2NlbmUnIGZ1bmN0aW9uCisgICAgICAgIHNlbGYucnVucV9zZXRzY2VuZSA9IFtdCisgICAgICAgIGlmIG5vdCBzZWxmLmNvb2tlci5jb25maWd1cmF0aW9uLm5vc2V0c2NlbmU6CisgICAgICAgICAgICBmb3IgdGFzayBpbiByYW5nZShsZW4oc2VsZi5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgICAgICBzZXRzY2VuZSA9IHRhc2tEYXRhLmdldHRhc2tfaWQoc2VsZi50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJ1bnFfZm5pZFt0YXNrXV0sIHNlbGYucnVucV90YXNrW3Rhc2tdICsgIl9zZXRzY2VuZSIsIEZhbHNlKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzZXRzY2VuZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfc2V0c2NlbmUuYXBwZW5kKHRhc2spCisKKyAgICAgICAgZGVmIGludmFsaWRhdGVfdGFzayhmbiwgdGFza25hbWUsIGVycm9yX25vc3RhbXApOgorICAgICAgICAgICAgdGFza2RlcCA9IHNlbGYuZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKyAgICAgICAgICAgIGZuaWQgPSBzZWxmLnRhc2tEYXRhLmdldGZuX2lkKGZuKQorICAgICAgICAgICAgaWYgdGFza25hbWUgbm90IGluIHRhc2tEYXRhLnRhc2tzX2xvb2t1cFtmbmlkXToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiVGFzayAlcyBkb2VzIG5vdCBleGlzdCwgaW52YWxpZGF0aW5nIHRoaXMgdGFzayB3aWxsIGhhdmUgbm8gZWZmZWN0IiAlIHRhc2tuYW1lKQorICAgICAgICAgICAgaWYgJ25vc3RhbXAnIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ25vc3RhbXAnXToKKyAgICAgICAgICAgICAgICBpZiBlcnJvcl9ub3N0YW1wOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiVGFzayAlcyBpcyBtYXJrZWQgbm9zdGFtcCwgY2Fubm90IGludmFsaWRhdGUgdGhpcyB0YXNrIiAlIHRhc2tuYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJUYXNrICVzIGlzIG1hcmtlZCBub3N0YW1wLCBjYW5ub3QgaW52YWxpZGF0ZSB0aGlzIHRhc2siICUgdGFza25hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKCJJbnZhbGlkYXRlIHRhc2sgJXMsICVzIiwgdGFza25hbWUsIGZuKQorICAgICAgICAgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi5pbnZhbGlkYXRlX3Rhc2sodGFza25hbWUsIHNlbGYuZGF0YUNhY2hlLCBmbikKKworICAgICAgICAjIEludmFsaWRhdGUgdGFzayBpZiBmb3JjZSBtb2RlIGFjdGl2ZQorICAgICAgICBpZiBzZWxmLmNvb2tlci5jb25maWd1cmF0aW9uLmZvcmNlOgorICAgICAgICAgICAgZm9yIChmbiwgdGFyZ2V0KSBpbiBzZWxmLnRhcmdldF9wYWlyczoKKyAgICAgICAgICAgICAgICBpbnZhbGlkYXRlX3Rhc2soZm4sIHRhcmdldCwgRmFsc2UpCisKKyAgICAgICAgIyBJbnZhbGlkYXRlIHRhc2sgaWYgaW52YWxpZGF0ZSBtb2RlIGFjdGl2ZQorICAgICAgICBpZiBzZWxmLmNvb2tlci5jb25maWd1cmF0aW9uLmludmFsaWRhdGVfc3RhbXA6CisgICAgICAgICAgICBmb3IgKGZuLCB0YXJnZXQpIGluIHNlbGYudGFyZ2V0X3BhaXJzOgorICAgICAgICAgICAgICAgIGZvciBzdCBpbiBzZWxmLmNvb2tlci5jb25maWd1cmF0aW9uLmludmFsaWRhdGVfc3RhbXAuc3BsaXQoJywnKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN0LnN0YXJ0c3dpdGgoImRvXyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgc3QgPSAiZG9fJXMiICUgc3QKKyAgICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZV90YXNrKGZuLCBzdCwgVHJ1ZSkKKworICAgICAgICAjIEl0ZXJhdGUgb3ZlciB0aGUgdGFzayBsaXN0IGFuZCBjYWxsIGludG8gdGhlIHNpZ2dlbiBjb2RlCisgICAgICAgIGRlYWx0d2l0aCA9IHNldCgpCisgICAgICAgIHRvZGVhbCA9IHNldChyYW5nZShsZW4oc2VsZi5ydW5xX2ZuaWQpKSkKKyAgICAgICAgd2hpbGUgbGVuKHRvZGVhbCkgPiAwOgorICAgICAgICAgICAgZm9yIHRhc2sgaW4gdG9kZWFsLmNvcHkoKToKKyAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5ydW5xX2RlcGVuZHNbdGFza10gLSBkZWFsdHdpdGgpID09IDA6CisgICAgICAgICAgICAgICAgICAgIGRlYWx0d2l0aC5hZGQodGFzaykKKyAgICAgICAgICAgICAgICAgICAgdG9kZWFsLnJlbW92ZSh0YXNrKQorICAgICAgICAgICAgICAgICAgICBwcm9jZGVwID0gW10KKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnJ1bnFfZGVwZW5kc1t0YXNrXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2NkZXAuYXBwZW5kKHNlbGYudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ydW5xX2ZuaWRbZGVwXV0gKyAiLiIgKyBzZWxmLnJ1bnFfdGFza1tkZXBdKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfaGFzaFt0YXNrXSA9IGJiLnBhcnNlLnNpZ2dlbi5nZXRfdGFza2hhc2goc2VsZi50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJ1bnFfZm5pZFt0YXNrXV0sIHNlbGYucnVucV90YXNrW3Rhc2tdLCBwcm9jZGVwLCBzZWxmLmRhdGFDYWNoZSkKKworICAgICAgICByZXR1cm4gbGVuKHNlbGYucnVucV9mbmlkKQorCisgICAgZGVmIGR1bXBfZGF0YShzZWxmLCB0YXNrUXVldWUpOgorICAgICAgICAiIiIKKyAgICAgICAgRHVtcCBzb21lIGRlYnVnIGluZm9ybWF0aW9uIG9uIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMKKyAgICAgICAgIiIiCisgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAicnVuX3Rhc2tzOiIpCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5ycWRhdGEucnVucV90YXNrKSk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMywgIiAoJXMpJXMgLSAlczogJXMgICBEZXBzICVzIFJldkRlcHMgJXMiLCB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tRdWV1ZS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnJ1bnFfdGFza1t0YXNrXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5ydW5xX3dlaWdodFt0YXNrXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5ydW5xX2RlcGVuZHNbdGFza10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAic29ydGVkX3Rhc2tzOiIpCisgICAgICAgIGZvciB0YXNrMSBpbiB4cmFuZ2UobGVuKHNlbGYucnFkYXRhLnJ1bnFfdGFzaykpOgorICAgICAgICAgICAgaWYgdGFzazEgaW4gc2VsZi5wcmlvX21hcDoKKyAgICAgICAgICAgICAgICB0YXNrID0gc2VsZi5wcmlvX21hcFt0YXNrMV0KKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMywgIiAoJXMpJXMgLSAlczogJXMgICBEZXBzICVzIFJldkRlcHMgJXMiLCB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza1F1ZXVlLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5ydW5xX3dlaWdodFt0YXNrXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1t0YXNrXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnJ1bnFfcmV2ZGVwc1t0YXNrXSkKKworY2xhc3MgUnVuUXVldWU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvb2tlciwgY2ZnRGF0YSwgZGF0YUNhY2hlLCB0YXNrRGF0YSwgdGFyZ2V0cyk6CisKKyAgICAgICAgc2VsZi5jb29rZXIgPSBjb29rZXIKKyAgICAgICAgc2VsZi5jZmdEYXRhID0gY2ZnRGF0YQorICAgICAgICBzZWxmLnJxZGF0YSA9IFJ1blF1ZXVlRGF0YShzZWxmLCBjb29rZXIsIGNmZ0RhdGEsIGRhdGFDYWNoZSwgdGFza0RhdGEsIHRhcmdldHMpCisKKyAgICAgICAgc2VsZi5zdGFtcHBvbGljeSA9IGNmZ0RhdGEuZ2V0VmFyKCJCQl9TVEFNUF9QT0xJQ1kiLCBUcnVlKSBvciAicGVyZmlsZSIKKyAgICAgICAgc2VsZi5oYXNodmFsaWRhdGUgPSBjZmdEYXRhLmdldFZhcigiQkJfSEFTSENIRUNLX0ZVTkNUSU9OIiwgVHJ1ZSkgb3IgTm9uZQorICAgICAgICBzZWxmLnNldHNjZW5ldmVyaWZ5ID0gY2ZnRGF0YS5nZXRWYXIoIkJCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTiIsIFRydWUpIG9yIE5vbmUKKyAgICAgICAgc2VsZi5kZXB2YWxpZGF0ZSA9IGNmZ0RhdGEuZ2V0VmFyKCJCQl9TRVRTQ0VORV9ERVBWQUxJRCIsIFRydWUpIG9yIE5vbmUKKworICAgICAgICBzZWxmLnN0YXRlID0gcnVuUXVldWVQcmVwYXJlCisKKyAgICAgICAgIyBGb3IgZGlzayBzcGFjZSBtb25pdG9yCisgICAgICAgIHNlbGYuZG0gPSBtb25pdG9yZGlzay5kaXNrTW9uaXRvcihjZmdEYXRhKQorCisgICAgICAgIHNlbGYucnFleGUgPSBOb25lCisgICAgICAgIHNlbGYud29ya2VyID0gTm9uZQorICAgICAgICBzZWxmLndvcmtlcnBpcGUgPSBOb25lCisgICAgICAgIHNlbGYuZmFrZXdvcmtlciA9IE5vbmUKKyAgICAgICAgc2VsZi5mYWtld29ya2VycGlwZSA9IE5vbmUKKworICAgIGRlZiBfc3RhcnRfd29ya2VyKHNlbGYsIGZha2Vyb290ID0gRmFsc2UsIHJxZXhlYyA9IE5vbmUpOgorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlN0YXJ0aW5nIGJpdGJha2Utd29ya2VyIikKKyAgICAgICAgbWFnaWMgPSAiZGVjYWZiYWQiCisgICAgICAgIGlmIHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24ucHJvZmlsZToKKyAgICAgICAgICAgIG1hZ2ljID0gImRlY2FmYmFkYmFkIgorICAgICAgICBpZiBmYWtlcm9vdDoKKyAgICAgICAgICAgIGZha2Vyb290Y21kID0gc2VsZi5jZmdEYXRhLmdldFZhcigiRkFLRVJPT1RDTUQiLCBUcnVlKQorICAgICAgICAgICAgZmFrZXJvb3RlbnYgPSAoc2VsZi5jZmdEYXRhLmdldFZhcigiRkFLRVJPT1RCQVNFRU5WIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiAodmFyLnNwbGl0KCc9JykgZm9yIHZhciBpbiBmYWtlcm9vdGVudik6CisgICAgICAgICAgICAgICAgZW52W2tleV0gPSB2YWx1ZQorICAgICAgICAgICAgd29ya2VyID0gc3VicHJvY2Vzcy5Qb3BlbihbZmFrZXJvb3RjbWQsICJiaXRiYWtlLXdvcmtlciIsIG1hZ2ljXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBlbnY9ZW52KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd29ya2VyID0gc3VicHJvY2Vzcy5Qb3BlbihbImJpdGJha2Utd29ya2VyIiwgbWFnaWNdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIGJiLnV0aWxzLm5vbmJsb2NraW5nZmQod29ya2VyLnN0ZG91dCkKKyAgICAgICAgd29ya2VycGlwZSA9IHJ1blF1ZXVlUGlwZSh3b3JrZXIuc3Rkb3V0LCBOb25lLCBzZWxmLmNmZ0RhdGEsIHNlbGYsIHJxZXhlYykKKworICAgICAgICB3b3JrZXJkYXRhID0geworICAgICAgICAgICAgInRhc2tkZXBzIiA6IHNlbGYucnFkYXRhLmRhdGFDYWNoZS50YXNrX2RlcHMsCisgICAgICAgICAgICAiZmFrZXJvb3RlbnYiIDogc2VsZi5ycWRhdGEuZGF0YUNhY2hlLmZha2Vyb290ZW52LAorICAgICAgICAgICAgImZha2Vyb290ZGlycyIgOiBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUuZmFrZXJvb3RkaXJzLAorICAgICAgICAgICAgImZha2Vyb290bm9lbnYiIDogc2VsZi5ycWRhdGEuZGF0YUNhY2hlLmZha2Vyb290bm9lbnYsCisgICAgICAgICAgICAic2lnZGF0YSIgOiBiYi5wYXJzZS5zaWdnZW4uZ2V0X3Rhc2tkYXRhKCksCisgICAgICAgICAgICAicnVucV9oYXNoIiA6IHNlbGYucnFkYXRhLnJ1bnFfaGFzaCwKKyAgICAgICAgICAgICJsb2dkZWZhdWx0ZGVidWciIDogYmIubXNnLmxvZ2dlckRlZmF1bHREZWJ1Z0xldmVsLAorICAgICAgICAgICAgImxvZ2RlZmF1bHR2ZXJib3NlIiA6IGJiLm1zZy5sb2dnZXJEZWZhdWx0VmVyYm9zZSwKKyAgICAgICAgICAgICJsb2dkZWZhdWx0dmVyYm9zZWxvZ3MiIDogYmIubXNnLmxvZ2dlclZlcmJvc2VMb2dzLAorICAgICAgICAgICAgImxvZ2RlZmF1bHRkb21haW4iIDogYmIubXNnLmxvZ2dlckRlZmF1bHREb21haW5zLAorICAgICAgICAgICAgInByaG9zdCIgOiBzZWxmLmNvb2tlci5wcmhvc3QsCisgICAgICAgICAgICAiYnVpbGRuYW1lIiA6IHNlbGYuY2ZnRGF0YS5nZXRWYXIoIkJVSUxETkFNRSIsIFRydWUpLAorICAgICAgICAgICAgImRhdGUiIDogc2VsZi5jZmdEYXRhLmdldFZhcigiREFURSIsIFRydWUpLAorICAgICAgICAgICAgInRpbWUiIDogc2VsZi5jZmdEYXRhLmdldFZhcigiVElNRSIsIFRydWUpLAorICAgICAgICB9CisKKyAgICAgICAgd29ya2VyLnN0ZGluLndyaXRlKCI8Y29va2VyY29uZmlnPiIgKyBwaWNrbGUuZHVtcHMoc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbikgKyAiPC9jb29rZXJjb25maWc+IikKKyAgICAgICAgd29ya2VyLnN0ZGluLndyaXRlKCI8d29ya2VyZGF0YT4iICsgcGlja2xlLmR1bXBzKHdvcmtlcmRhdGEpICsgIjwvd29ya2VyZGF0YT4iKQorICAgICAgICB3b3JrZXIuc3RkaW4uZmx1c2goKQorCisgICAgICAgIHJldHVybiB3b3JrZXIsIHdvcmtlcnBpcGUKKworICAgIGRlZiBfdGVhcmRvd25fd29ya2VyKHNlbGYsIHdvcmtlciwgd29ya2VycGlwZSk6CisgICAgICAgIGlmIG5vdCB3b3JrZXI6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJUZWFyZG93biBmb3IgYml0YmFrZS13b3JrZXIiKQorICAgICAgICB0cnk6CisgICAgICAgICAgIHdvcmtlci5zdGRpbi53cml0ZSgiPHF1aXQ+PC9xdWl0PiIpCisgICAgICAgICAgIHdvcmtlci5zdGRpbi5mbHVzaCgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICBwYXNzCisgICAgICAgIHdoaWxlIHdvcmtlci5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICB3b3JrZXJwaXBlLnJlYWQoKQorICAgICAgICAgICAgd29ya2VyLnBvbGwoKQorICAgICAgICB3aGlsZSB3b3JrZXJwaXBlLnJlYWQoKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHdvcmtlcnBpcGUuY2xvc2UoKQorCisgICAgZGVmIHN0YXJ0X3dvcmtlcihzZWxmKToKKyAgICAgICAgaWYgc2VsZi53b3JrZXI6CisgICAgICAgICAgICBzZWxmLnRlYXJkb3duX3dvcmtlcnMoKQorICAgICAgICBzZWxmLnRlYXJkb3duID0gRmFsc2UKKyAgICAgICAgc2VsZi53b3JrZXIsIHNlbGYud29ya2VycGlwZSA9IHNlbGYuX3N0YXJ0X3dvcmtlcigpCisKKyAgICBkZWYgc3RhcnRfZmFrZXdvcmtlcihzZWxmLCBycWV4ZWMpOgorICAgICAgICBpZiBub3Qgc2VsZi5mYWtld29ya2VyOgorICAgICAgICAgICAgc2VsZi5mYWtld29ya2VyLCBzZWxmLmZha2V3b3JrZXJwaXBlID0gc2VsZi5fc3RhcnRfd29ya2VyKFRydWUsIHJxZXhlYykKKworICAgIGRlZiB0ZWFyZG93bl93b3JrZXJzKHNlbGYpOgorICAgICAgICBzZWxmLnRlYXJkb3duID0gVHJ1ZQorICAgICAgICBzZWxmLl90ZWFyZG93bl93b3JrZXIoc2VsZi53b3JrZXIsIHNlbGYud29ya2VycGlwZSkKKyAgICAgICAgc2VsZi53b3JrZXIgPSBOb25lCisgICAgICAgIHNlbGYud29ya2VycGlwZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fdGVhcmRvd25fd29ya2VyKHNlbGYuZmFrZXdvcmtlciwgc2VsZi5mYWtld29ya2VycGlwZSkKKyAgICAgICAgc2VsZi5mYWtld29ya2VyID0gTm9uZQorICAgICAgICBzZWxmLmZha2V3b3JrZXJwaXBlID0gTm9uZQorCisgICAgZGVmIHJlYWRfd29ya2VycyhzZWxmKToKKyAgICAgICAgc2VsZi53b3JrZXJwaXBlLnJlYWQoKQorICAgICAgICBpZiBzZWxmLmZha2V3b3JrZXJwaXBlOgorICAgICAgICAgICAgc2VsZi5mYWtld29ya2VycGlwZS5yZWFkKCkKKworICAgIGRlZiBhY3RpdmVfZmRzKHNlbGYpOgorICAgICAgICBmZHMgPSBbXQorICAgICAgICBpZiBzZWxmLndvcmtlcnBpcGU6CisgICAgICAgICAgICBmZHMuYXBwZW5kKHNlbGYud29ya2VycGlwZS5pbnB1dCkKKyAgICAgICAgaWYgc2VsZi5mYWtld29ya2VycGlwZToKKyAgICAgICAgICAgIGZkcy5hcHBlbmQoc2VsZi5mYWtld29ya2VycGlwZS5pbnB1dCkKKyAgICAgICAgcmV0dXJuIGZkcworCisgICAgZGVmIGNoZWNrX3N0YW1wX3Rhc2soc2VsZiwgdGFzaywgdGFza25hbWUgPSBOb25lLCByZWN1cnNlID0gRmFsc2UsIGNhY2hlID0gTm9uZSk6CisgICAgICAgIGRlZiBnZXRfdGltZXN0YW1wKGYpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5hY2Nlc3MoZiwgb3MuRl9PSyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAgICAgcmV0dXJuIG9zLnN0YXQoZilbc3RhdC5TVF9NVElNRV0KKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIHNlbGYuc3RhbXBwb2xpY3kgPT0gInBlcmZpbGUiOgorICAgICAgICAgICAgZnVsbGRlcHRyZWUgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnVsbGRlcHRyZWUgPSBUcnVlCisgICAgICAgICAgICBzdGFtcHdoaXRlbGlzdCA9IFtdCisgICAgICAgICAgICBpZiBzZWxmLnN0YW1wcG9saWN5ID09ICJ3aGl0ZWxpc3QiOgorICAgICAgICAgICAgICAgIHN0YW1wd2hpdGVsaXN0ID0gc2VsZi5ycWRhdGEuc3RhbXBmbndoaXRlbGlzdAorCisgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdXQorICAgICAgICBpZiB0YXNrbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza10KKworICAgICAgICBzdGFtcGZpbGUgPSBiYi5idWlsZC5zdGFtcGZpbGUodGFza25hbWUsIHNlbGYucnFkYXRhLmRhdGFDYWNoZSwgZm4pCisKKyAgICAgICAgIyBJZiB0aGUgc3RhbXAgaXMgbWlzc2luZywgaXQncyBub3QgY3VycmVudAorICAgICAgICBpZiBub3Qgb3MuYWNjZXNzKHN0YW1wZmlsZSwgb3MuRl9PSyk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlN0YW1wZmlsZSAlcyBub3QgYXZhaWxhYmxlIiwgc3RhbXBmaWxlKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICMgSWYgaXQncyBhICdub3N0YW1wJyB0YXNrLCBpdCdzIG5vdCBjdXJyZW50CisgICAgICAgIHRhc2tkZXAgPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUudGFza19kZXBzW2ZuXQorICAgICAgICBpZiAnbm9zdGFtcCcgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsnbm9zdGFtcCddOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICIlcy4lcyBpcyBub3N0YW1wXG4iLCBmbiwgdGFza25hbWUpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiB0YXNrbmFtZSAhPSAiZG9fc2V0c2NlbmUiIGFuZCB0YXNrbmFtZS5lbmRzd2l0aCgiX3NldHNjZW5lIik6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGlmIGNhY2hlIGlzIE5vbmU6CisgICAgICAgICAgICBjYWNoZSA9IHt9CisKKyAgICAgICAgaXNjdXJyZW50ID0gVHJ1ZQorICAgICAgICB0MSA9IGdldF90aW1lc3RhbXAoc3RhbXBmaWxlKQorICAgICAgICBmb3IgZGVwIGluIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1t0YXNrXToKKyAgICAgICAgICAgIGlmIGlzY3VycmVudDoKKyAgICAgICAgICAgICAgICBmbjIgPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbZGVwXV0KKyAgICAgICAgICAgICAgICB0YXNrbmFtZTIgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbZGVwXQorICAgICAgICAgICAgICAgIHN0YW1wZmlsZTIgPSBiYi5idWlsZC5zdGFtcGZpbGUodGFza25hbWUyLCBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUsIGZuMikKKyAgICAgICAgICAgICAgICBzdGFtcGZpbGUzID0gYmIuYnVpbGQuc3RhbXBmaWxlKHRhc2tuYW1lMiArICJfc2V0c2NlbmUiLCBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUsIGZuMikKKyAgICAgICAgICAgICAgICB0MiA9IGdldF90aW1lc3RhbXAoc3RhbXBmaWxlMikKKyAgICAgICAgICAgICAgICB0MyA9IGdldF90aW1lc3RhbXAoc3RhbXBmaWxlMykKKyAgICAgICAgICAgICAgICBpZiB0MyBhbmQgdDMgPiB0MjoKKyAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGZuID09IGZuMiBvciAoZnVsbGRlcHRyZWUgYW5kIGZuMiBub3QgaW4gc3RhbXB3aGl0ZWxpc3QpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgdDI6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ1N0YW1wZmlsZSAlcyBkb2VzIG5vdCBleGlzdCcsIHN0YW1wZmlsZTIpCisgICAgICAgICAgICAgICAgICAgICAgICBpc2N1cnJlbnQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBpZiB0MSA8IHQyOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdTdGFtcGZpbGUgJXMgPCAlcycsIHN0YW1wZmlsZSwgc3RhbXBmaWxlMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzY3VycmVudCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGlmIHJlY3Vyc2UgYW5kIGlzY3VycmVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlcCBpbiBjYWNoZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc2N1cnJlbnQgPSBjYWNoZVtkZXBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzY3VycmVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdTdGFtcGZpbGUgZm9yIGRlcGVuZGVuY3kgJXM6JXMgaW52YWxpZCAoY2FjaGVkKScgJSAoZm4yLCB0YXNrbmFtZTIpKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc2N1cnJlbnQgPSBzZWxmLmNoZWNrX3N0YW1wX3Rhc2soZGVwLCByZWN1cnNlPVRydWUsIGNhY2hlPWNhY2hlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlW2RlcF0gPSBpc2N1cnJlbnQKKyAgICAgICAgaWYgcmVjdXJzZToKKyAgICAgICAgICAgIGNhY2hlW3Rhc2tdID0gaXNjdXJyZW50CisgICAgICAgIHJldHVybiBpc2N1cnJlbnQKKworICAgIGRlZiBfZXhlY3V0ZV9ydW5xdWV1ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJ1biB0aGUgdGFza3MgaW4gYSBxdWV1ZSBwcmVwYXJlZCBieSBycWRhdGEucHJlcGFyZSgpCisgICAgICAgIFVwb24gZmFpbHVyZSwgb3B0aW9uYWxseSB0cnkgdG8gcmVjb3ZlciB0aGUgYnVpbGQgdXNpbmcgYW55IGFsdGVybmF0ZSBwcm92aWRlcnMKKyAgICAgICAgKGlmIHRoZSBhYm9ydCBvbiBmYWlsdXJlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzbid0IHNldCkKKyAgICAgICAgIiIiCisKKyAgICAgICAgcmV0dmFsID0gVHJ1ZQorCisgICAgICAgIGlmIHNlbGYuc3RhdGUgaXMgcnVuUXVldWVQcmVwYXJlOgorICAgICAgICAgICAgc2VsZi5ycWV4ZSA9IFJ1blF1ZXVlRXhlY3V0ZUR1bW15KHNlbGYpCisgICAgICAgICAgICBpZiBzZWxmLnJxZGF0YS5wcmVwYXJlKCkgPT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gcnVuUXVldWVDb21wbGV0ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gcnVuUXVldWVTY2VuZUluaXQKKworICAgICAgICAgICAgICAgICMgd2UgYXJlIHJlYWR5IHRvIHJ1biwgc2VlIGlmIGFueSBVSSBjbGllbnQgbmVlZHMgdGhlIGRlcGVuZGVuY3kgaW5mbworICAgICAgICAgICAgICAgIGlmIGJiLmNvb2tlci5Db29rZXJGZWF0dXJlcy5TRU5EX0RFUEVORFNfVFJFRSBpbiBzZWxmLmNvb2tlci5mZWF0dXJlc2V0OgorICAgICAgICAgICAgICAgICAgICBkZXBncmFwaCA9IHNlbGYuY29va2VyLmJ1aWxkRGVwZW5kVHJlZShzZWxmLCBzZWxmLnJxZGF0YS50YXNrRGF0YSkKKyAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5EZXBUcmVlR2VuZXJhdGVkKGRlcGdyYXBoKSwgc2VsZi5jb29rZXIuZGF0YSkKKworICAgICAgICBpZiBzZWxmLnN0YXRlIGlzIHJ1blF1ZXVlU2NlbmVJbml0OgorICAgICAgICAgICAgZHVtcCA9IHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24uZHVtcF9zaWduYXR1cmVzCisgICAgICAgICAgICBpZiBkdW1wOgorICAgICAgICAgICAgICAgIGlmICdwcmludGRpZmYnIGluIGR1bXA6CisgICAgICAgICAgICAgICAgICAgIGludmFsaWR0YXNrcyA9IHNlbGYucHJpbnRfZGlmZnNjZW5ldGFza3MoKQorICAgICAgICAgICAgICAgIHNlbGYuZHVtcF9zaWduYXR1cmVzKGR1bXApCisgICAgICAgICAgICAgICAgaWYgJ3ByaW50ZGlmZicgaW4gZHVtcDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9kaWZmc2NlbmV0YXNrcyhpbnZhbGlkdGFza3MpCisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHJ1blF1ZXVlQ29tcGxldGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5zdGFydF93b3JrZXIoKQorICAgICAgICAgICAgICAgIHNlbGYucnFleGUgPSBSdW5RdWV1ZUV4ZWN1dGVTY2VuZXF1ZXVlKHNlbGYpCisKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpbiBbcnVuUXVldWVTY2VuZVJ1biwgcnVuUXVldWVSdW5uaW5nLCBydW5RdWV1ZUNsZWFuVXBdOgorICAgICAgICAgICAgc2VsZi5kbS5jaGVjayhzZWxmKQorCisgICAgICAgIGlmIHNlbGYuc3RhdGUgaXMgcnVuUXVldWVTY2VuZVJ1bjoKKyAgICAgICAgICAgIHJldHZhbCA9IHNlbGYucnFleGUuZXhlY3V0ZSgpCisKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpcyBydW5RdWV1ZVJ1bkluaXQ6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiRXhlY3V0aW5nIFJ1blF1ZXVlIFRhc2tzIikKKyAgICAgICAgICAgIHNlbGYucnFleGUgPSBSdW5RdWV1ZUV4ZWN1dGVUYXNrcyhzZWxmKQorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHJ1blF1ZXVlUnVubmluZworCisgICAgICAgIGlmIHNlbGYuc3RhdGUgaXMgcnVuUXVldWVSdW5uaW5nOgorICAgICAgICAgICAgcmV0dmFsID0gc2VsZi5ycWV4ZS5leGVjdXRlKCkKKworICAgICAgICBpZiBzZWxmLnN0YXRlIGlzIHJ1blF1ZXVlQ2xlYW5VcDoKKyAgICAgICAgICAgIHJldHZhbCA9IHNlbGYucnFleGUuZmluaXNoKCkKKworICAgICAgICBpZiAoc2VsZi5zdGF0ZSBpcyBydW5RdWV1ZUNvbXBsZXRlIG9yIHNlbGYuc3RhdGUgaXMgcnVuUXVldWVGYWlsZWQpIGFuZCBzZWxmLnJxZXhlOgorICAgICAgICAgICAgc2VsZi50ZWFyZG93bl93b3JrZXJzKCkKKyAgICAgICAgICAgIGlmIHNlbGYucnFleGUuc3RhdHMuZmFpbGVkOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJUYXNrcyBTdW1tYXJ5OiBBdHRlbXB0ZWQgJWQgdGFza3Mgb2Ygd2hpY2ggJWQgZGlkbid0IG5lZWQgdG8gYmUgcmVydW4gYW5kICVkIGZhaWxlZC4iLCBzZWxmLnJxZXhlLnN0YXRzLmNvbXBsZXRlZCArIHNlbGYucnFleGUuc3RhdHMuZmFpbGVkLCBzZWxmLnJxZXhlLnN0YXRzLnNraXBwZWQsIHNlbGYucnFleGUuc3RhdHMuZmFpbGVkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIExldCdzIGF2b2lkIHRoZSB3b3JkICJmYWlsZWQiIGlmIG5vdGhpbmcgYWN0dWFsbHkgZGlkCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlRhc2tzIFN1bW1hcnk6IEF0dGVtcHRlZCAlZCB0YXNrcyBvZiB3aGljaCAlZCBkaWRuJ3QgbmVlZCB0byBiZSByZXJ1biBhbmQgYWxsIHN1Y2NlZWRlZC4iLCBzZWxmLnJxZXhlLnN0YXRzLmNvbXBsZXRlZCwgc2VsZi5ycWV4ZS5zdGF0cy5za2lwcGVkKQorCisgICAgICAgIGlmIHNlbGYuc3RhdGUgaXMgcnVuUXVldWVGYWlsZWQ6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5ycWRhdGEudGFza0RhdGEudHJ5YWx0Y29uZmlnczoKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5ydW5xdWV1ZS5UYXNrRmFpbHVyZShzZWxmLnJxZXhlLmZhaWxlZF9mbmlkcykKKyAgICAgICAgICAgIGZvciBmbmlkIGluIHNlbGYucnFleGUuZmFpbGVkX2ZuaWRzOgorICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnRhc2tEYXRhLmZhaWxfZm5pZChmbmlkKQorICAgICAgICAgICAgc2VsZi5ycWRhdGEucmVzZXQoKQorCisgICAgICAgIGlmIHNlbGYuc3RhdGUgaXMgcnVuUXVldWVDb21wbGV0ZToKKyAgICAgICAgICAgICMgQWxsIGRvbmUKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICMgTG9vcAorICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICBkZWYgZXhlY3V0ZV9ydW5xdWV1ZShzZWxmKToKKyAgICAgICAgIyBDYXRjaCB1bmV4cGVjdGVkIGV4Y2VwdGlvbnMgYW5kIGVuc3VyZSB3ZSBleGl0IHdoZW4gYW4gZXJyb3Igb2NjdXJzLCBub3QgbG9vcC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGVfcnVucXVldWUoKQorICAgICAgICBleGNlcHQgYmIucnVucXVldWUuVGFza0ZhaWx1cmU6CisgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBiYi5CQkhhbmRsZWRFeGNlcHRpb246CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi50ZWFyZG93bl93b3JrZXJzKCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gcnVuUXVldWVDb21wbGV0ZQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJBbiB1bmNhdWdodCBleGNlcHRpb24gb2NjdXJlZCBpbiBydW5xdWV1ZSwgcGxlYXNlIHNlZSB0aGUgZmFpbHVyZSBiZWxvdzoiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYudGVhcmRvd25fd29ya2VycygpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHJ1blF1ZXVlQ29tcGxldGUKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgZmluaXNoX3J1bnF1ZXVlKHNlbGYsIG5vdyA9IEZhbHNlKToKKyAgICAgICAgaWYgbm90IHNlbGYucnFleGU6CisgICAgICAgICAgICBzZWxmLnN0YXRlID0gcnVuUXVldWVDb21wbGV0ZQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm93OgorICAgICAgICAgICAgc2VsZi5ycWV4ZS5maW5pc2hfbm93KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucnFleGUuZmluaXNoKCkKKworICAgIGRlZiBkdW1wX3NpZ25hdHVyZXMoc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIGRvbmUgPSBzZXQoKQorICAgICAgICBiYi5ub3RlKCJSZXBhcnNpbmcgZmlsZXMgdG8gY29sbGVjdCBkZXBlbmRlbmN5IGRhdGEiKQorICAgICAgICBmb3IgdGFzayBpbiByYW5nZShsZW4oc2VsZi5ycWRhdGEucnVucV9mbmlkKSk6CisgICAgICAgICAgICBpZiBzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza10gbm90IGluIGRvbmU6CisgICAgICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dCisgICAgICAgICAgICAgICAgdGhlX2RhdGEgPSBiYi5jYWNoZS5DYWNoZS5sb2FkRGF0YUZ1bGwoZm4sIHNlbGYuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmbiksIHNlbGYuY29va2VyLmRhdGEpCisgICAgICAgICAgICAgICAgZG9uZS5hZGQoc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdKQorCisgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi5kdW1wX3NpZ3Moc2VsZi5ycWRhdGEuZGF0YUNhY2hlLCBvcHRpb25zKQorCisgICAgICAgIHJldHVybgorCisgICAgZGVmIHByaW50X2RpZmZzY2VuZXRhc2tzKHNlbGYpOgorCisgICAgICAgIHZhbGlkID0gW10KKyAgICAgICAgc3FfaGFzaCA9IFtdCisgICAgICAgIHNxX2hhc2hmbiA9IFtdCisgICAgICAgIHNxX2ZuID0gW10KKyAgICAgICAgc3FfdGFza25hbWUgPSBbXQorICAgICAgICBzcV90YXNrID0gW10KKyAgICAgICAgbm9leGVjID0gW10KKyAgICAgICAgc3RhbXBwcmVzZW50ID0gW10KKyAgICAgICAgdmFsaWRfbmV3ID0gc2V0KCkKKworICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYucnFkYXRhLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dCisgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1t0YXNrXQorICAgICAgICAgICAgdGFza2RlcCA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZS50YXNrX2RlcHNbZm5dCisKKyAgICAgICAgICAgIGlmICdub2V4ZWMnIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ25vZXhlYyddOgorICAgICAgICAgICAgICAgIG5vZXhlYy5hcHBlbmQodGFzaykKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBzcV9mbi5hcHBlbmQoZm4pCisgICAgICAgICAgICBzcV9oYXNoZm4uYXBwZW5kKHNlbGYucnFkYXRhLmRhdGFDYWNoZS5oYXNoZm5bZm5dKQorICAgICAgICAgICAgc3FfaGFzaC5hcHBlbmQoc2VsZi5ycWRhdGEucnVucV9oYXNoW3Rhc2tdKQorICAgICAgICAgICAgc3FfdGFza25hbWUuYXBwZW5kKHRhc2tuYW1lKQorICAgICAgICAgICAgc3FfdGFzay5hcHBlbmQodGFzaykKKyAgICAgICAgbG9jcyA9IHsgInNxX2ZuIiA6IHNxX2ZuLCAic3FfdGFzayIgOiBzcV90YXNrbmFtZSwgInNxX2hhc2giIDogc3FfaGFzaCwgInNxX2hhc2hmbiIgOiBzcV9oYXNoZm4sICJkIiA6IHNlbGYuY29va2VyLmV4cGFuZGVkX2RhdGEgfQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjYWxsID0gc2VsZi5oYXNodmFsaWRhdGUgKyAiKHNxX2ZuLCBzcV90YXNrLCBzcV9oYXNoLCBzcV9oYXNoZm4sIGQsIHNpZ2luZm89VHJ1ZSkiCisgICAgICAgICAgICB2YWxpZCA9IGJiLnV0aWxzLmJldHRlcl9ldmFsKGNhbGwsIGxvY3MpCisgICAgICAgICMgSGFuZGxlIHZlcnNpb24gd2l0aCBubyBzaWdpbmZvIHBhcmFtZXRlcgorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgY2FsbCA9IHNlbGYuaGFzaHZhbGlkYXRlICsgIihzcV9mbiwgc3FfdGFzaywgc3FfaGFzaCwgc3FfaGFzaGZuLCBkKSIKKyAgICAgICAgICAgIHZhbGlkID0gYmIudXRpbHMuYmV0dGVyX2V2YWwoY2FsbCwgbG9jcykKKyAgICAgICAgZm9yIHYgaW4gdmFsaWQ6CisgICAgICAgICAgICB2YWxpZF9uZXcuYWRkKHNxX3Rhc2tbdl0pCisKKyAgICAgICAgIyBUYXNrcyB3aGljaCBhcmUgYm90aCBzZXRzY2VuZSBhbmQgbm9leGVjIG5ldmVyIGNhcmUgYWJvdXQgZGVwZW5kZW5jaWVzCisgICAgICAgICMgV2UgdGhlcmVmb3JlIGZpbmQgdGFza3Mgd2hpY2ggYXJlIHNldHNjZW5lIGFuZCBub2V4ZWMgYW5kIG1hcmsgdGhlaXIKKyAgICAgICAgIyB1bmlxdWUgZGVwZW5kZW5jaWVzIGFzIHZhbGlkLgorICAgICAgICBmb3IgdGFzayBpbiBub2V4ZWM6CisgICAgICAgICAgICBpZiB0YXNrIG5vdCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1t0YXNrXToKKyAgICAgICAgICAgICAgICBoYXNub2V4ZWNwYXJlbnRzID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZvciBkZXAyIGluIHNlbGYucnFkYXRhLnJ1bnFfcmV2ZGVwc1tkZXBdOgorICAgICAgICAgICAgICAgICAgICBpZiBkZXAyIGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmUgYW5kIGRlcDIgaW4gbm9leGVjOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaGFzbm9leGVjcGFyZW50cyA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgaGFzbm9leGVjcGFyZW50czoKKyAgICAgICAgICAgICAgICAgICAgdmFsaWRfbmV3LmFkZChkZXApCisKKyAgICAgICAgaW52YWxpZHRhc2tzID0gc2V0KCkKKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnJxZGF0YS5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIGlmIHRhc2sgbm90IGluIHZhbGlkX25ldyBhbmQgdGFzayBub3QgaW4gbm9leGVjOgorICAgICAgICAgICAgICAgIGludmFsaWR0YXNrcy5hZGQodGFzaykKKworICAgICAgICBmb3VuZCA9IHNldCgpCisgICAgICAgIHByb2Nlc3NlZCA9IHNldCgpCisgICAgICAgIGZvciB0YXNrIGluIGludmFsaWR0YXNrczoKKyAgICAgICAgICAgIHRvcHJvY2VzcyA9IHNldChbdGFza10pCisgICAgICAgICAgICB3aGlsZSB0b3Byb2Nlc3M6CisgICAgICAgICAgICAgICAgbmV4dCA9IHNldCgpCisgICAgICAgICAgICAgICAgZm9yIHQgaW4gdG9wcm9jZXNzOgorICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1t0XToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlcCBpbiBpbnZhbGlkdGFza3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQuYWRkKHRhc2spCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXAgbm90IGluIHByb2Nlc3NlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWQuYWRkKGRlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LmFkZChkZXApCisgICAgICAgICAgICAgICAgdG9wcm9jZXNzID0gbmV4dAorICAgICAgICAgICAgICAgIGlmIHRhc2sgaW4gZm91bmQ6CisgICAgICAgICAgICAgICAgICAgIHRvcHJvY2VzcyA9IHNldCgpCisKKyAgICAgICAgdGFza2xpc3QgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiBpbnZhbGlkdGFza3MuZGlmZmVyZW5jZShmb3VuZCk6CisgICAgICAgICAgICB0YXNrbGlzdC5hcHBlbmQoc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcodGFzaykpCisKKyAgICAgICAgaWYgdGFza2xpc3Q6CisgICAgICAgICAgICBiYi5wbGFpbigiVGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGN1cnJlbnQgYnVpbGQgYW5kIGFueSBjYWNoZWQgdGFza3Mgc3RhcnQgYXQgdGhlIGZvbGxvd2luZyB0YXNrczpcbiIgKyAiXG4iLmpvaW4odGFza2xpc3QpKQorCisgICAgICAgIHJldHVybiBpbnZhbGlkdGFza3MuZGlmZmVyZW5jZShmb3VuZCkKKworICAgIGRlZiB3cml0ZV9kaWZmc2NlbmV0YXNrcyhzZWxmLCBpbnZhbGlkdGFza3MpOgorCisgICAgICAgICMgRGVmaW5lIHJlY3Vyc2lvbiBjYWxsYmFjaworICAgICAgICBkZWYgcmVjdXJzZWNiKGtleSwgaGFzaDEsIGhhc2gyKToKKyAgICAgICAgICAgIGhhc2hlcyA9IFtoYXNoMSwgaGFzaDJdCisgICAgICAgICAgICBoYXNoZmlsZXMgPSBiYi5zaWdnZW4uZmluZF9zaWdpbmZvKGtleSwgTm9uZSwgaGFzaGVzLCBzZWxmLmNmZ0RhdGEpCisKKyAgICAgICAgICAgIHJlY291dCA9IFtdCisgICAgICAgICAgICBpZiBsZW4oaGFzaGZpbGVzKSA9PSAyOgorICAgICAgICAgICAgICAgIG91dDIgPSBiYi5zaWdnZW4uY29tcGFyZV9zaWdmaWxlcyhoYXNoZmlsZXNbaGFzaDFdLCBoYXNoZmlsZXNbaGFzaDJdLCByZWN1cnNlY2IpCisgICAgICAgICAgICAgICAgcmVjb3V0LmV4dGVuZChsaXN0KCcgICcgKyBsIGZvciBsIGluIG91dDIpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZWNvdXQuYXBwZW5kKCJVbmFibGUgdG8gZmluZCBtYXRjaGluZyBzaWdkYXRhIGZvciAlcyB3aXRoIGhhc2hlcyAlcyBvciAlcyIgJSAoa2V5LCBoYXNoMSwgaGFzaDIpKQorCisgICAgICAgICAgICByZXR1cm4gcmVjb3V0CisKKworICAgICAgICBmb3IgdGFzayBpbiBpbnZhbGlkdGFza3M6CisgICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXV0KKyAgICAgICAgICAgIHBuID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnBrZ19mbltmbl0KKyAgICAgICAgICAgIHRhc2tuYW1lID0gc2VsZi5ycWRhdGEucnVucV90YXNrW3Rhc2tdCisgICAgICAgICAgICBoID0gc2VsZi5ycWRhdGEucnVucV9oYXNoW3Rhc2tdCisgICAgICAgICAgICBtYXRjaGVzID0gYmIuc2lnZ2VuLmZpbmRfc2lnaW5mbyhwbiwgdGFza25hbWUsIFtdLCBzZWxmLmNmZ0RhdGEpCisgICAgICAgICAgICBtYXRjaCA9IE5vbmUKKyAgICAgICAgICAgIGZvciBtIGluIG1hdGNoZXM6CisgICAgICAgICAgICAgICAgaWYgaCBpbiBtOgorICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IG0KKyAgICAgICAgICAgIGlmIG1hdGNoIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkNhbid0IGZpbmQgYSB0YXNrIHdlJ3JlIHN1cHBvc2VkIHRvIGhhdmUgd3JpdHRlbiBvdXQ/IChoYXNoOiAlcyk/IiAlIGgpCisgICAgICAgICAgICBtYXRjaGVzID0ge2sgOiB2IGZvciBrLCB2IGluIG1hdGNoZXMuaXRlcml0ZW1zKCkgaWYgaCBub3QgaW4ga30KKyAgICAgICAgICAgIGlmIG1hdGNoZXM6CisgICAgICAgICAgICAgICAgbGF0ZXN0bWF0Y2ggPSBzb3J0ZWQobWF0Y2hlcy5rZXlzKCksIGtleT1sYW1iZGEgZjogbWF0Y2hlc1tmXSlbLTFdCisgICAgICAgICAgICAgICAgcHJldmggPSBfX2ZpbmRfbWQ1X18uc2VhcmNoKGxhdGVzdG1hdGNoKS5ncm91cCgwKQorICAgICAgICAgICAgICAgIG91dHB1dCA9IGJiLnNpZ2dlbi5jb21wYXJlX3NpZ2ZpbGVzKGxhdGVzdG1hdGNoLCBtYXRjaCwgcmVjdXJzZWNiKQorICAgICAgICAgICAgICAgIGJiLnBsYWluKCJcblRhc2sgJXM6JXMgY291bGRuJ3QgYmUgdXNlZCBmcm9tIHRoZSBjYWNoZSBiZWNhdXNlOlxuICBXZSBuZWVkIGhhc2ggJXMsIGNsb3Nlc3QgbWF0Y2hpbmcgdGFzayB3YXMgJXNcbiAgIiAlIChwbiwgdGFza25hbWUsIGgsIHByZXZoKSArICdcbiAgJy5qb2luKG91dHB1dCkpCisKK2NsYXNzIFJ1blF1ZXVlRXhlY3V0ZToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBycSk6CisgICAgICAgIHNlbGYucnEgPSBycQorICAgICAgICBzZWxmLmNvb2tlciA9IHJxLmNvb2tlcgorICAgICAgICBzZWxmLmNmZ0RhdGEgPSBycS5jZmdEYXRhCisgICAgICAgIHNlbGYucnFkYXRhID0gcnEucnFkYXRhCisKKyAgICAgICAgc2VsZi5udW1iZXJfdGFza3MgPSBpbnQoc2VsZi5jZmdEYXRhLmdldFZhcigiQkJfTlVNQkVSX1RIUkVBRFMiLCBUcnVlKSBvciAxKQorICAgICAgICBzZWxmLnNjaGVkdWxlciA9IHNlbGYuY2ZnRGF0YS5nZXRWYXIoIkJCX1NDSEVEVUxFUiIsIFRydWUpIG9yICJzcGVlZCIKKworICAgICAgICBzZWxmLnJ1bnFfYnVpbGRhYmxlID0gW10KKyAgICAgICAgc2VsZi5ydW5xX3J1bm5pbmcgPSBbXQorICAgICAgICBzZWxmLnJ1bnFfY29tcGxldGUgPSBbXQorCisgICAgICAgIHNlbGYuYnVpbGRfc3RhbXBzID0ge30KKyAgICAgICAgc2VsZi5idWlsZF9zdGFtcHMyID0gW10KKyAgICAgICAgc2VsZi5mYWlsZWRfZm5pZHMgPSBbXQorCisgICAgICAgIHNlbGYuc3RhbXBjYWNoZSA9IHt9CisKKyAgICAgICAgcnEud29ya2VycGlwZS5zZXRydW5xdWV1ZWV4ZWMoc2VsZikKKyAgICAgICAgaWYgcnEuZmFrZXdvcmtlcnBpcGU6CisgICAgICAgICAgICBycS5mYWtld29ya2VycGlwZS5zZXRydW5xdWV1ZWV4ZWMoc2VsZikKKworICAgICAgICBpZiBzZWxmLm51bWJlcl90YXNrcyA8PSAwOgorICAgICAgICAgICAgIGJiLmZhdGFsKCJJbnZhbGlkIEJCX05VTUJFUl9USFJFQURTICVzIiAlIHNlbGYubnVtYmVyX3Rhc2tzKQorCisgICAgZGVmIHJ1bnF1ZXVlX3Byb2Nlc3Nfd2FpdHBpZChzZWxmLCB0YXNrLCBzdGF0dXMpOgorCisgICAgICAgICMgc2VsZi5idWlsZF9zdGFtcHNbcGlkXSBtYXkgbm90IGV4aXN0IHdoZW4gdXNlIHNoYXJlZCB3b3JrIGRpcmVjdG9yeS4KKyAgICAgICAgaWYgdGFzayBpbiBzZWxmLmJ1aWxkX3N0YW1wczoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRfc3RhbXBzMi5yZW1vdmUoc2VsZi5idWlsZF9zdGFtcHNbdGFza10pCisgICAgICAgICAgICBkZWwgc2VsZi5idWlsZF9zdGFtcHNbdGFza10KKworICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIHNlbGYudGFza19mYWlsKHRhc2ssIHN0YXR1cykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYudGFza19jb21wbGV0ZSh0YXNrKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGZpbmlzaF9ub3coc2VsZik6CisKKyAgICAgICAgZm9yIHdvcmtlciBpbiBbc2VsZi5ycS53b3JrZXIsIHNlbGYucnEuZmFrZXdvcmtlcl06CisgICAgICAgICAgICBpZiBub3Qgd29ya2VyOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd29ya2VyLnN0ZGluLndyaXRlKCI8ZmluaXNobm93PjwvZmluaXNobm93PiIpCisgICAgICAgICAgICAgICAgd29ya2VyLnN0ZGluLmZsdXNoKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICMgd29ya2VyIG11c3QgaGF2ZSBkaWVkPworICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiBsZW4oc2VsZi5mYWlsZWRfZm5pZHMpICE9IDA6CisgICAgICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVGYWlsZWQKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUNvbXBsZXRlCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGZpbmlzaChzZWxmKToKKyAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlQ2xlYW5VcAorCisgICAgICAgIGlmIHNlbGYuc3RhdHMuYWN0aXZlID4gMDoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUocnVuUXVldWVFeGl0V2FpdChzZWxmLnN0YXRzLmFjdGl2ZSksIHNlbGYuY2ZnRGF0YSkKKyAgICAgICAgICAgIHNlbGYucnEucmVhZF93b3JrZXJzKCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJxLmFjdGl2ZV9mZHMoKQorCisgICAgICAgIGlmIGxlbihzZWxmLmZhaWxlZF9mbmlkcykgIT0gMDoKKyAgICAgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUZhaWxlZAorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVDb21wbGV0ZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGNoZWNrX2RlcGVuZGVuY2llcyhzZWxmLCB0YXNrLCB0YXNrZGVwcywgc2V0c2NlbmUgPSBGYWxzZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLnJxLmRlcHZhbGlkYXRlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgdGFza2RhdGEgPSB7fQorICAgICAgICB0YXNrZGVwcy5hZGQodGFzaykKKyAgICAgICAgZm9yIGRlcCBpbiB0YXNrZGVwczoKKyAgICAgICAgICAgIGlmIHNldHNjZW5lOgorICAgICAgICAgICAgICAgIGRlcGlkID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVtkZXBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlcGlkID0gZGVwCisgICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFtkZXBpZF1dCisgICAgICAgICAgICBwbiA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZS5wa2dfZm5bZm5dCisgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1tkZXBpZF0KKyAgICAgICAgICAgIHRhc2tkYXRhW2RlcF0gPSBbcG4sIHRhc2tuYW1lLCBmbl0KKyAgICAgICAgY2FsbCA9IHNlbGYucnEuZGVwdmFsaWRhdGUgKyAiKHRhc2ssIHRhc2tkYXRhLCBub3RuZWVkZWQsIGQpIgorICAgICAgICBsb2NzID0geyAidGFzayIgOiB0YXNrLCAidGFza2RhdGEiIDogdGFza2RhdGEsICJub3RuZWVkZWQiIDogc2VsZi5zY2VuZXF1ZXVlX25vdG5lZWRlZCwgImQiIDogc2VsZi5jb29rZXIuZXhwYW5kZWRfZGF0YSB9CisgICAgICAgIHZhbGlkID0gYmIudXRpbHMuYmV0dGVyX2V2YWwoY2FsbCwgbG9jcykKKyAgICAgICAgcmV0dXJuIHZhbGlkCisKK2NsYXNzIFJ1blF1ZXVlRXhlY3V0ZUR1bW15KFJ1blF1ZXVlRXhlY3V0ZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJxKToKKyAgICAgICAgc2VsZi5ycSA9IHJxCisgICAgICAgIHNlbGYuc3RhdHMgPSBSdW5RdWV1ZVN0YXRzKDApCisKKyAgICBkZWYgZmluaXNoKHNlbGYpOgorICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVDb21wbGV0ZQorICAgICAgICByZXR1cm4KKworY2xhc3MgUnVuUXVldWVFeGVjdXRlVGFza3MoUnVuUXVldWVFeGVjdXRlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcnEpOgorICAgICAgICBSdW5RdWV1ZUV4ZWN1dGUuX19pbml0X18oc2VsZiwgcnEpCisKKyAgICAgICAgc2VsZi5zdGF0cyA9IFJ1blF1ZXVlU3RhdHMobGVuKHNlbGYucnFkYXRhLnJ1bnFfZm5pZCkpCisKKyAgICAgICAgc2VsZi5zdGFtcGNhY2hlID0ge30KKworICAgICAgICBpbml0aWFsX2NvdmVyZWQgPSBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZC5jb3B5KCkKKworICAgICAgICAjIE1hcmsgaW5pdGlhbCBidWlsZGFibGUgdGFza3MKKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKHNlbGYuc3RhdHMudG90YWwpOgorICAgICAgICAgICAgc2VsZi5ydW5xX3J1bm5pbmcuYXBwZW5kKDApCisgICAgICAgICAgICBzZWxmLnJ1bnFfY29tcGxldGUuYXBwZW5kKDApCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3Rhc2tdKSA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYucnVucV9idWlsZGFibGUuYXBwZW5kKDEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucnVucV9idWlsZGFibGUuYXBwZW5kKDApCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdKSA+IDAgYW5kIHNlbGYucnFkYXRhLnJ1bnFfcmV2ZGVwc1t0YXNrXS5pc3N1YnNldChzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZCkgYW5kIHRhc2sgbm90IGluIHNlbGYucnEuc2NlbmVxdWV1ZV9ub3Rjb3ZlcmVkOgorICAgICAgICAgICAgICAgIHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkLmFkZCh0YXNrKQorCisgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICB3aGlsZSBmb3VuZDoKKyAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShzZWxmLnN0YXRzLnRvdGFsKToKKyAgICAgICAgICAgICAgICBpZiB0YXNrIGluIHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnQ29uc2lkZXJpbmcgJXMgKCVzKTogJXMnICUgKHRhc2ssIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHRhc2spLCBzdHIoc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdKSkpCisKKyAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdKSA+IDAgYW5kIHNlbGYucnFkYXRhLnJ1bnFfcmV2ZGVwc1t0YXNrXS5pc3N1YnNldChzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZCkgYW5kIHRhc2sgbm90IGluIHNlbGYucnEuc2NlbmVxdWV1ZV9ub3Rjb3ZlcmVkOgorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQuYWRkKHRhc2spCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdTa2lwIGxpc3QgKHByZSBzZXRzY2VuZXZlcmlmeSkgJXMnLCBzb3J0ZWQoc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQpKQorCisgICAgICAgICMgQWxsb3cgdGhlIG1ldGFkYXRhIHRvIGVsZWN0IGZvciBzZXRzY2VuZSB0YXNrcyB0byBydW4gYW55d2F5CisgICAgICAgIGNvdmVyZWRfcmVtb3ZlID0gc2V0KCkKKyAgICAgICAgaWYgc2VsZi5ycS5zZXRzY2VuZXZlcmlmeToKKyAgICAgICAgICAgIGludmFsaWR0YXNrcyA9IFtdCisgICAgICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYucnFkYXRhLnJ1bnFfdGFzaykpOgorICAgICAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdXQorICAgICAgICAgICAgICAgIHRhc2tuYW1lID0gc2VsZi5ycWRhdGEucnVucV90YXNrW3Rhc2tdCisgICAgICAgICAgICAgICAgdGFza2RlcCA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZS50YXNrX2RlcHNbZm5dCisKKyAgICAgICAgICAgICAgICBpZiAnbm9leGVjJyBpbiB0YXNrZGVwIGFuZCB0YXNrbmFtZSBpbiB0YXNrZGVwWydub2V4ZWMnXToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJxLmNoZWNrX3N0YW1wX3Rhc2sodGFzaywgdGFza25hbWUgKyAiX3NldHNjZW5lIiwgY2FjaGU9c2VsZi5zdGFtcGNhY2hlKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdTZXRzY2VuZSBzdGFtcCBjdXJyZW50IGZvciB0YXNrICVzKCVzKScsIHRhc2ssIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHRhc2spKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHNlbGYucnEuY2hlY2tfc3RhbXBfdGFzayh0YXNrLCB0YXNrbmFtZSwgcmVjdXJzZSA9IFRydWUsIGNhY2hlPXNlbGYuc3RhbXBjYWNoZSk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAnTm9ybWFsIHN0YW1wIGN1cnJlbnQgZm9yIHRhc2sgJXMoJXMpJywgdGFzaywgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcodGFzaykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaW52YWxpZHRhc2tzLmFwcGVuZCh0YXNrKQorCisgICAgICAgICAgICBjYWxsID0gc2VsZi5ycS5zZXRzY2VuZXZlcmlmeSArICIoY292ZXJlZCwgdGFza25hbWVzLCBmbmlkcywgZm5zLCBkLCBpbnZhbGlkdGFza3M9aW52YWxpZHRhc2tzKSIKKyAgICAgICAgICAgIGNhbGwyID0gc2VsZi5ycS5zZXRzY2VuZXZlcmlmeSArICIoY292ZXJlZCwgdGFza25hbWVzLCBmbmlkcywgZm5zLCBkKSIKKyAgICAgICAgICAgIGxvY3MgPSB7ICJjb3ZlcmVkIiA6IHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkLCAidGFza25hbWVzIiA6IHNlbGYucnFkYXRhLnJ1bnFfdGFzaywgImZuaWRzIiA6IHNlbGYucnFkYXRhLnJ1bnFfZm5pZCwgImZucyIgOiBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleCwgImQiIDogc2VsZi5jb29rZXIuZXhwYW5kZWRfZGF0YSwgImludmFsaWR0YXNrcyIgOiBpbnZhbGlkdGFza3MgfQorICAgICAgICAgICAgIyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zIHdpdGhvdXQgaW52YWxpZHRhc2tzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY292ZXJlZF9yZW1vdmUgPSBiYi51dGlscy5iZXR0ZXJfZXZhbChjYWxsLCBsb2NzKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBjb3ZlcmVkX3JlbW92ZSA9IGJiLnV0aWxzLmJldHRlcl9ldmFsKGNhbGwyLCBsb2NzKQorCisgICAgICAgIGRlZiByZW1vdmVjb3ZlcmVkdGFzayh0YXNrKToKKyAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdXQorICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza10gKyAnX3NldHNjZW5lJworICAgICAgICAgICAgYmIuYnVpbGQuZGVsX3N0YW1wKHRhc2tuYW1lLCBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUsIGZuKQorICAgICAgICAgICAgc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQucmVtb3ZlKHRhc2spCisKKyAgICAgICAgdG9yZW1vdmUgPSBjb3ZlcmVkX3JlbW92ZQorICAgICAgICBmb3IgdGFzayBpbiB0b3JlbW92ZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnTm90IHNraXBwaW5nIHRhc2sgJXMgZHVlIHRvIHNldHNjZW5ldmVyaWZ5JywgdGFzaykKKyAgICAgICAgd2hpbGUgdG9yZW1vdmU6CisgICAgICAgICAgICBjb3ZlcmVkX3JlbW92ZSA9IFtdCisgICAgICAgICAgICBmb3IgdGFzayBpbiB0b3JlbW92ZToKKyAgICAgICAgICAgICAgICByZW1vdmVjb3ZlcmVkdGFzayh0YXNrKQorICAgICAgICAgICAgICAgIGZvciBkZXB0YXNrIGluIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1t0YXNrXToKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwdGFzayBub3QgaW4gc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBpZiBkZXB0YXNrIGluIHRvcmVtb3ZlIG9yIGRlcHRhc2sgaW4gY292ZXJlZF9yZW1vdmUgb3IgZGVwdGFzayBpbiBpbml0aWFsX2NvdmVyZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgJ1Rhc2sgJXMgZGVwZW5kcyBvbiB0YXNrICVzIHNvIG5vdCBza2lwcGluZycgJSAodGFzaywgZGVwdGFzaykpCisgICAgICAgICAgICAgICAgICAgIGNvdmVyZWRfcmVtb3ZlLmFwcGVuZChkZXB0YXNrKQorICAgICAgICAgICAgdG9yZW1vdmUgPSBjb3ZlcmVkX3JlbW92ZQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnRnVsbCBza2lwIGxpc3QgJXMnLCBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZCkKKworICAgICAgICBldmVudC5maXJlKGJiLmV2ZW50LlN0YW1wVXBkYXRlKHNlbGYucnFkYXRhLnRhcmdldF9wYWlycywgc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnN0YW1wKSwgc2VsZi5jZmdEYXRhKQorCisgICAgICAgIHNjaGVkdWxlcnMgPSBzZWxmLmdldF9zY2hlZHVsZXJzKCkKKyAgICAgICAgZm9yIHNjaGVkdWxlciBpbiBzY2hlZHVsZXJzOgorICAgICAgICAgICAgaWYgc2VsZi5zY2hlZHVsZXIgPT0gc2NoZWR1bGVyLm5hbWU6CisgICAgICAgICAgICAgICAgc2VsZi5zY2hlZCA9IHNjaGVkdWxlcihzZWxmLCBzZWxmLnJxZGF0YSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlVzaW5nIHJ1bnF1ZXVlIHNjaGVkdWxlciAnJXMnIiwgc2NoZWR1bGVyLm5hbWUpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJJbnZhbGlkIHNjaGVkdWxlciAnJXMnLiAgQXZhaWxhYmxlIHNjaGVkdWxlcnM6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAoc2VsZi5zY2hlZHVsZXIsICIsICIuam9pbihvYmoubmFtZSBmb3Igb2JqIGluIHNjaGVkdWxlcnMpKSkKKworICAgIGRlZiBnZXRfc2NoZWR1bGVycyhzZWxmKToKKyAgICAgICAgc2NoZWR1bGVycyA9IHNldChvYmogZm9yIG9iaiBpbiBnbG9iYWxzKCkudmFsdWVzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdHlwZShvYmopIGlzIHR5cGUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzc3ViY2xhc3Mob2JqLCBSdW5RdWV1ZVNjaGVkdWxlcikpCisKKyAgICAgICAgdXNlcl9zY2hlZHVsZXJzID0gc2VsZi5jZmdEYXRhLmdldFZhcigiQkJfU0NIRURVTEVSUyIsIFRydWUpCisgICAgICAgIGlmIHVzZXJfc2NoZWR1bGVyczoKKyAgICAgICAgICAgIGZvciBzY2hlZCBpbiB1c2VyX3NjaGVkdWxlcnMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBpZiBub3QgIi4iIGluIHNjaGVkOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJJZ25vcmluZyBzY2hlZHVsZXIgJyVzJyBmcm9tIEJCX1NDSEVEVUxFUlM6IG5vdCBhbiBpbXBvcnQiICUgc2NoZWQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBtb2RuYW1lLCBuYW1lID0gc2NoZWQucnNwbGl0KCIuIiwgMSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IF9faW1wb3J0X18obW9kbmFtZSwgZnJvbWxpc3Q9KG5hbWUsKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuY3JpdGljYWwoIlVuYWJsZSB0byBpbXBvcnQgc2NoZWR1bGVyICclcycgZnJvbSAnJXMnOiAlcyIgJSAobmFtZSwgbW9kbmFtZSwgZXhjKSkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgxKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlcnMuYWRkKGdldGF0dHIobW9kdWxlLCBuYW1lKSkKKyAgICAgICAgcmV0dXJuIHNjaGVkdWxlcnMKKworICAgIGRlZiBzZXRidWlsZGFibGUoc2VsZiwgdGFzayk6CisgICAgICAgIHNlbGYucnVucV9idWlsZGFibGVbdGFza10gPSAxCisgICAgICAgIHNlbGYuc2NoZWQubmV3YnVpbGFibGUodGFzaykKKworICAgIGRlZiB0YXNrX2NvbXBsZXRlb3V0cmlnaHQoc2VsZiwgdGFzayk6CisgICAgICAgICIiIgorICAgICAgICBNYXJrIGEgdGFzayBhcyBjb21wbGV0ZWQKKyAgICAgICAgTG9vayBhdCB0aGUgcmV2ZXJzZSBkZXBlbmRlbmNpZXMgYW5kIG1hcmsgYW55IHRhc2sgd2l0aAorICAgICAgICBjb21wbGV0ZWQgZGVwZW5kZW5jaWVzIGFzIGJ1aWxkYWJsZQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5ydW5xX2NvbXBsZXRlW3Rhc2tdID0gMQorICAgICAgICBmb3IgcmV2ZGVwIGluIHNlbGYucnFkYXRhLnJ1bnFfcmV2ZGVwc1t0YXNrXToKKyAgICAgICAgICAgIGlmIHNlbGYucnVucV9ydW5uaW5nW3JldmRlcF0gPT0gMToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgc2VsZi5ydW5xX2J1aWxkYWJsZVtyZXZkZXBdID09IDE6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGFsbGRlcHMgPSAxCisgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1tyZXZkZXBdOgorICAgICAgICAgICAgICAgIGlmIHNlbGYucnVucV9jb21wbGV0ZVtkZXBdICE9IDE6CisgICAgICAgICAgICAgICAgICAgIGFsbGRlcHMgPSAwCisgICAgICAgICAgICBpZiBhbGxkZXBzID09IDE6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRidWlsZGFibGUocmV2ZGVwKQorICAgICAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3JldmRlcF1dCisgICAgICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbcmV2ZGVwXQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiTWFya2luZyB0YXNrICVzICglcywgJXMpIGFzIGJ1aWxkYWJsZSIsIHJldmRlcCwgZm4sIHRhc2tuYW1lKQorCisgICAgZGVmIHRhc2tfY29tcGxldGUoc2VsZiwgdGFzayk6CisgICAgICAgIHNlbGYuc3RhdHMudGFza0NvbXBsZXRlZCgpCisgICAgICAgIGJiLmV2ZW50LmZpcmUocnVuUXVldWVUYXNrQ29tcGxldGVkKHRhc2ssIHNlbGYuc3RhdHMsIHNlbGYucnEpLCBzZWxmLmNmZ0RhdGEpCisgICAgICAgIHNlbGYudGFza19jb21wbGV0ZW91dHJpZ2h0KHRhc2spCisKKyAgICBkZWYgdGFza19mYWlsKHNlbGYsIHRhc2ssIGV4aXRjb2RlKToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCB3aGVuIGEgdGFzayBoYXMgZmFpbGVkCisgICAgICAgIFVwZGF0ZXMgdGhlIHN0YXRlIGVuZ2luZSB3aXRoIHRoZSBmYWlsdXJlCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnN0YXRzLnRhc2tGYWlsZWQoKQorICAgICAgICBmbmlkID0gc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdCisgICAgICAgIHNlbGYuZmFpbGVkX2ZuaWRzLmFwcGVuZChmbmlkKQorICAgICAgICBiYi5ldmVudC5maXJlKHJ1blF1ZXVlVGFza0ZhaWxlZCh0YXNrLCBzZWxmLnN0YXRzLCBleGl0Y29kZSwgc2VsZi5ycSksIHNlbGYuY2ZnRGF0YSkKKyAgICAgICAgaWYgc2VsZi5ycWRhdGEudGFza0RhdGEuYWJvcnQ6CisgICAgICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVDbGVhblVwCisKKyAgICBkZWYgdGFza19za2lwKHNlbGYsIHRhc2ssIHJlYXNvbik6CisgICAgICAgIHNlbGYucnVucV9ydW5uaW5nW3Rhc2tdID0gMQorICAgICAgICBzZWxmLnNldGJ1aWxkYWJsZSh0YXNrKQorICAgICAgICBiYi5ldmVudC5maXJlKHJ1blF1ZXVlVGFza1NraXBwZWQodGFzaywgc2VsZi5zdGF0cywgc2VsZi5ycSwgcmVhc29uKSwgc2VsZi5jZmdEYXRhKQorICAgICAgICBzZWxmLnRhc2tfY29tcGxldGVvdXRyaWdodCh0YXNrKQorICAgICAgICBzZWxmLnN0YXRzLnRhc2tDb21wbGV0ZWQoKQorICAgICAgICBzZWxmLnN0YXRzLnRhc2tTa2lwcGVkKCkKKworICAgIGRlZiBleGVjdXRlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUnVuIHRoZSB0YXNrcyBpbiBhIHF1ZXVlIHByZXBhcmVkIGJ5IHJxZGF0YS5wcmVwYXJlKCkKKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5ycS5yZWFkX3dvcmtlcnMoKQorICAgICAgICAKKworICAgICAgICBpZiBzZWxmLnN0YXRzLnRvdGFsID09IDA6CisgICAgICAgICAgICAjIG5vdGhpbmcgdG8gZG8KKyAgICAgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUNsZWFuVXAKKworICAgICAgICB0YXNrID0gc2VsZi5zY2hlZC5uZXh0KCkKKyAgICAgICAgaWYgdGFzayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdXQorICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza10KKworICAgICAgICAgICAgaWYgdGFzayBpbiBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlNldHNjZW5lIGNvdmVyZWQgdGFzayAlcyAoJXMpIiwgdGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcodGFzaykpCisgICAgICAgICAgICAgICAgc2VsZi50YXNrX3NraXAodGFzaywgImNvdmVyZWQiKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgICAgIGlmIHNlbGYucnEuY2hlY2tfc3RhbXBfdGFzayh0YXNrLCB0YXNrbmFtZSwgY2FjaGU9c2VsZi5zdGFtcGNhY2hlKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlN0YW1wIGN1cnJlbnQgdGFzayAlcyAoJXMpIiwgdGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcodGFzaykpCisgICAgICAgICAgICAgICAgc2VsZi50YXNrX3NraXAodGFzaywgImV4aXN0aW5nIikKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICB0YXNrZGVwID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKyAgICAgICAgICAgIGlmICdub2V4ZWMnIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ25vZXhlYyddOgorICAgICAgICAgICAgICAgIHN0YXJ0ZXZlbnQgPSBydW5RdWV1ZVRhc2tTdGFydGVkKHRhc2ssIHNlbGYuc3RhdHMsIHNlbGYucnEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9leGVjPVRydWUpCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShzdGFydGV2ZW50LCBzZWxmLmNmZ0RhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5ydW5xX3J1bm5pbmdbdGFza10gPSAxCisgICAgICAgICAgICAgICAgc2VsZi5zdGF0cy50YXNrQWN0aXZlKCkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5kcnlfcnVuOgorICAgICAgICAgICAgICAgICAgICBiYi5idWlsZC5tYWtlX3N0YW1wKHRhc2tuYW1lLCBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUsIGZuKQorICAgICAgICAgICAgICAgIHNlbGYudGFza19jb21wbGV0ZSh0YXNrKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0YXJ0ZXZlbnQgPSBydW5RdWV1ZVRhc2tTdGFydGVkKHRhc2ssIHNlbGYuc3RhdHMsIHNlbGYucnEpCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShzdGFydGV2ZW50LCBzZWxmLmNmZ0RhdGEpCisKKyAgICAgICAgICAgIHRhc2tkZXBkYXRhID0gc2VsZi5idWlsZF90YXNrZGVwZGF0YSh0YXNrKQorCisgICAgICAgICAgICB0YXNrZGVwID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKyAgICAgICAgICAgIGlmICdmYWtlcm9vdCcgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsnZmFrZXJvb3QnXSBhbmQgbm90IHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24uZHJ5X3J1bjoKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5ycS5mYWtld29ya2VyOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxLnN0YXJ0X2Zha2V3b3JrZXIoc2VsZikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmNyaXRpY2FsKCJGYWlsZWQgdG8gc3Bhd24gZmFrZXJvb3Qgd29ya2VyIHRvIHJ1biAlczolczogJXMiICUgKGZuLCB0YXNrbmFtZSwgc3RyKGV4YykpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlRmFpbGVkCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYucnEuZmFrZXdvcmtlci5zdGRpbi53cml0ZSgiPHJ1bnRhc2s+IiArIHBpY2tsZS5kdW1wcygoZm4sIHRhc2ssIHRhc2tuYW1lLCBGYWxzZSwgc2VsZi5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgdGFza2RlcGRhdGEpKSArICI8L3J1bnRhc2s+IikKKyAgICAgICAgICAgICAgICBzZWxmLnJxLmZha2V3b3JrZXIuc3RkaW4uZmx1c2goKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnJxLndvcmtlci5zdGRpbi53cml0ZSgiPHJ1bnRhc2s+IiArIHBpY2tsZS5kdW1wcygoZm4sIHRhc2ssIHRhc2tuYW1lLCBGYWxzZSwgc2VsZi5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgdGFza2RlcGRhdGEpKSArICI8L3J1bnRhc2s+IikKKyAgICAgICAgICAgICAgICBzZWxmLnJxLndvcmtlci5zdGRpbi5mbHVzaCgpCisKKyAgICAgICAgICAgIHNlbGYuYnVpbGRfc3RhbXBzW3Rhc2tdID0gYmIuYnVpbGQuc3RhbXBmaWxlKHRhc2tuYW1lLCBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUsIGZuKQorICAgICAgICAgICAgc2VsZi5idWlsZF9zdGFtcHMyLmFwcGVuZChzZWxmLmJ1aWxkX3N0YW1wc1t0YXNrXSkgCisgICAgICAgICAgICBzZWxmLnJ1bnFfcnVubmluZ1t0YXNrXSA9IDEKKyAgICAgICAgICAgIHNlbGYuc3RhdHMudGFza0FjdGl2ZSgpCisgICAgICAgICAgICBpZiBzZWxmLnN0YXRzLmFjdGl2ZSA8IHNlbGYubnVtYmVyX3Rhc2tzOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgaWYgc2VsZi5zdGF0cy5hY3RpdmUgPiAwOgorICAgICAgICAgICAgc2VsZi5ycS5yZWFkX3dvcmtlcnMoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucnEuYWN0aXZlX2ZkcygpCisKKyAgICAgICAgaWYgbGVuKHNlbGYuZmFpbGVkX2ZuaWRzKSAhPSAwOgorICAgICAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlRmFpbGVkCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgU2FuaXR5IENoZWNrcworICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2Uoc2VsZi5zdGF0cy50b3RhbCk6CisgICAgICAgICAgICBpZiBzZWxmLnJ1bnFfYnVpbGRhYmxlW3Rhc2tdID09IDA6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJUYXNrICVzIG5ldmVyIGJ1aWxkYWJsZSEiLCB0YXNrKQorICAgICAgICAgICAgaWYgc2VsZi5ydW5xX3J1bm5pbmdbdGFza10gPT0gMDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRhc2sgJXMgbmV2ZXIgcmFuISIsIHRhc2spCisgICAgICAgICAgICBpZiBzZWxmLnJ1bnFfY29tcGxldGVbdGFza10gPT0gMDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRhc2sgJXMgbmV2ZXIgY29tcGxldGVkISIsIHRhc2spCisgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUNvbXBsZXRlCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBidWlsZF90YXNrZGVwZGF0YShzZWxmLCB0YXNrKToKKyAgICAgICAgdGFza2RlcGRhdGEgPSB7fQorICAgICAgICBuZXh0ID0gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3Rhc2tdCisgICAgICAgIG5leHQuYWRkKHRhc2spCisgICAgICAgIHdoaWxlIG5leHQ6CisgICAgICAgICAgICBhZGRpdGlvbmFsID0gW10KKyAgICAgICAgICAgIGZvciByZXZkZXAgaW4gbmV4dDoKKyAgICAgICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFtyZXZkZXBdXQorICAgICAgICAgICAgICAgIHBuID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnBrZ19mbltmbl0KKyAgICAgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1tyZXZkZXBdCisgICAgICAgICAgICAgICAgZGVwcyA9IHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1tyZXZkZXBdCisgICAgICAgICAgICAgICAgcHJvdmlkZXMgPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUuZm5fcHJvdmlkZXNbZm5dCisgICAgICAgICAgICAgICAgdGFza2RlcGRhdGFbcmV2ZGVwXSA9IFtwbiwgdGFza25hbWUsIGZuLCBkZXBzLCBwcm92aWRlc10KKyAgICAgICAgICAgICAgICBmb3IgcmV2ZGVwMiBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICBpZiByZXZkZXAyIG5vdCBpbiB0YXNrZGVwZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwuYXBwZW5kKHJldmRlcDIpCisgICAgICAgICAgICBuZXh0ID0gYWRkaXRpb25hbAorCisgICAgICAgICNiYi5ub3RlKCJUYXNrICVzOiAiICUgdGFzayArIHN0cih0YXNrZGVwZGF0YSkucmVwbGFjZSgiXSwgIiwgIl0sXG4iKSkKKyAgICAgICAgcmV0dXJuIHRhc2tkZXBkYXRhCisKK2NsYXNzIFJ1blF1ZXVlRXhlY3V0ZVNjZW5lcXVldWUoUnVuUXVldWVFeGVjdXRlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcnEpOgorICAgICAgICBSdW5RdWV1ZUV4ZWN1dGUuX19pbml0X18oc2VsZiwgcnEpCisKKyAgICAgICAgc2VsZi5zY2VuZXF1ZXVlX2NvdmVyZWQgPSBzZXQoKQorICAgICAgICBzZWxmLnNjZW5lcXVldWVfbm90Y292ZXJlZCA9IHNldCgpCisgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV9ub3RuZWVkZWQgPSBzZXQoKQorCisgICAgICAgICMgSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgc2V0c2NlbmUgZnVuY3Rpb25zLCBza2lwIHRoaXMgc3RlcAorICAgICAgICBpZiBsZW4oc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZSkgPT0gMDoKKyAgICAgICAgICAgIHJxLnNjZW5lcXVldWVfY292ZXJlZCA9IHNldCgpCisgICAgICAgICAgICBycS5zdGF0ZSA9IHJ1blF1ZXVlUnVuSW5pdAorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5zdGF0cyA9IFJ1blF1ZXVlU3RhdHMobGVuKHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmUpKQorCisgICAgICAgIHNxX3JldmRlcHMgPSBbXQorICAgICAgICBzcV9yZXZkZXBzX25ldyA9IFtdCisgICAgICAgIHNxX3JldmRlcHNfc3F1YXNoID0gW10KKyAgICAgICAgc2VsZi5zcV9oYXJkZGVwcyA9IHt9CisKKyAgICAgICAgIyBXZSBuZWVkIHRvIGNvbnN0cnVjdCBhIGRlcGVuZGVuY3kgZ3JhcGggZm9yIHRoZSBzZXRzY2VuZSBmdW5jdGlvbnMuIEludGVybWVkaWF0ZQorICAgICAgICAjIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSBzZXRzY2VuZSB0YXNrcyBvbmx5IGNvbXBsaWNhdGUgdGhlIGNvZGUuIFRoaXMgY29kZQorICAgICAgICAjIHRoZXJlZm9yZSBhaW1zIHRvIGNvbGxhcHNlIHRoZSBodWdlIHJ1bnF1ZXVlIGRlcGVuZGVuY3kgdHJlZSBpbnRvIGEgc21hbGxlciBvbmUKKyAgICAgICAgIyBvbmx5IGNvbnRhaW5pbmcgdGhlIHNldHNjZW5lIGZ1bmN0aW9ucy4KKworICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2Uoc2VsZi5zdGF0cy50b3RhbCk6CisgICAgICAgICAgICBzZWxmLnJ1bnFfcnVubmluZy5hcHBlbmQoMCkKKyAgICAgICAgICAgIHNlbGYucnVucV9jb21wbGV0ZS5hcHBlbmQoMCkKKyAgICAgICAgICAgIHNlbGYucnVucV9idWlsZGFibGUuYXBwZW5kKDApCisKKyAgICAgICAgIyBGaXJzdCBwcm9jZXNzIHRoZSBjaGFpbnMgdXAgdG8gdGhlIGZpcnN0IHNldHNjZW5lIHRhc2suCisgICAgICAgIGVuZHBvaW50cyA9IHt9CisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5ycWRhdGEucnVucV9mbmlkKSk6CisgICAgICAgICAgICBzcV9yZXZkZXBzLmFwcGVuZChjb3B5LmNvcHkoc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdKSkKKyAgICAgICAgICAgIHNxX3JldmRlcHNfbmV3LmFwcGVuZChzZXQoKSkKKyAgICAgICAgICAgIGlmIChsZW4oc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdKSA9PSAwKSBhbmQgdGFzayBub3QgaW4gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZToKKyAgICAgICAgICAgICAgICBlbmRwb2ludHNbdGFza10gPSBzZXQoKQorCisgICAgICAgICMgU2Vjb25kbHkgcHJvY2VzcyB0aGUgY2hhaW5zIGJldHdlZW4gc2V0c2NlbmUgdGFza3MuCisgICAgICAgIGZvciB0YXNrIGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6CisgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1t0YXNrXToKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiBlbmRwb2ludHM6CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludHNbZGVwXSA9IHNldCgpCisgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50c1tkZXBdLmFkZCh0YXNrKQorCisgICAgICAgIGRlZiBwcm9jZXNzX2VuZHBvaW50cyhlbmRwb2ludHMpOgorICAgICAgICAgICAgbmV3ZW5kcG9pbnRzID0ge30KKyAgICAgICAgICAgIGZvciBwb2ludCwgdGFzayBpbiBlbmRwb2ludHMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICB0YXNrcyA9IHNldCgpCisgICAgICAgICAgICAgICAgaWYgdGFzazoKKyAgICAgICAgICAgICAgICAgICAgdGFza3MgfD0gdGFzaworICAgICAgICAgICAgICAgIGlmIHNxX3JldmRlcHNfbmV3W3BvaW50XToKKyAgICAgICAgICAgICAgICAgICAgdGFza3MgfD0gc3FfcmV2ZGVwc19uZXdbcG9pbnRdCisgICAgICAgICAgICAgICAgc3FfcmV2ZGVwc19uZXdbcG9pbnRdID0gc2V0KCkKKyAgICAgICAgICAgICAgICBpZiBwb2ludCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX25ld1twb2ludF0gPSB0YXNrcworICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3BvaW50XToKKyAgICAgICAgICAgICAgICAgICAgaWYgcG9pbnQgaW4gc3FfcmV2ZGVwc1tkZXBdOgorICAgICAgICAgICAgICAgICAgICAgICAgc3FfcmV2ZGVwc1tkZXBdLnJlbW92ZShwb2ludCkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGFza3M6CisgICAgICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX25ld1tkZXBdIHw9IHRhc2tzCisgICAgICAgICAgICAgICAgICAgIGlmIChsZW4oc3FfcmV2ZGVwc1tkZXBdKSA9PSAwIG9yIGxlbihzcV9yZXZkZXBzX25ld1tkZXBdKSAhPSAwKSBhbmQgZGVwIG5vdCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZW5kcG9pbnRzW2RlcF0gPSB0YXNrCisgICAgICAgICAgICBpZiBsZW4obmV3ZW5kcG9pbnRzKSAhPSAwOgorICAgICAgICAgICAgICAgIHByb2Nlc3NfZW5kcG9pbnRzKG5ld2VuZHBvaW50cykKKworICAgICAgICBwcm9jZXNzX2VuZHBvaW50cyhlbmRwb2ludHMpCisKKyAgICAgICAgIyBCdWlsZCBhIGxpc3Qgb2Ygc2V0c2NlbmUgdGFza3Mgd2hpY2ggYXJlICJ1bnNraXBwYWJsZSIKKyAgICAgICAgIyBUaGVzZSBhcmUgZGlyZWN0IGVuZHBvaW50cyByZWZlcmVuY2VkIGJ5IHRoZSBidWlsZAorICAgICAgICBlbmRwb2ludHMyID0ge30KKyAgICAgICAgc3FfcmV2ZGVwczIgPSBbXQorICAgICAgICBzcV9yZXZkZXBzX25ldzIgPSBbXQorICAgICAgICBkZWYgcHJvY2Vzc19lbmRwb2ludHMyKGVuZHBvaW50cyk6CisgICAgICAgICAgICBuZXdlbmRwb2ludHMgPSB7fQorICAgICAgICAgICAgZm9yIHBvaW50LCB0YXNrIGluIGVuZHBvaW50cy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHRhc2tzID0gc2V0KFtwb2ludF0pCisgICAgICAgICAgICAgICAgaWYgdGFzazoKKyAgICAgICAgICAgICAgICAgICAgdGFza3MgfD0gdGFzaworICAgICAgICAgICAgICAgIGlmIHNxX3JldmRlcHNfbmV3Mltwb2ludF06CisgICAgICAgICAgICAgICAgICAgIHRhc2tzIHw9IHNxX3JldmRlcHNfbmV3Mltwb2ludF0KKyAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX25ldzJbcG9pbnRdID0gc2V0KCkKKyAgICAgICAgICAgICAgICBpZiBwb2ludCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX25ldzJbcG9pbnRdID0gdGFza3MKKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1twb2ludF06CisgICAgICAgICAgICAgICAgICAgIGlmIHBvaW50IGluIHNxX3JldmRlcHMyW2RlcF06CisgICAgICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzMltkZXBdLnJlbW92ZShwb2ludCkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGFza3M6CisgICAgICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX25ldzJbZGVwXSB8PSB0YXNrcworICAgICAgICAgICAgICAgICAgICBpZiAobGVuKHNxX3JldmRlcHMyW2RlcF0pID09IDAgb3IgbGVuKHNxX3JldmRlcHNfbmV3MltkZXBdKSAhPSAwKSBhbmQgZGVwIG5vdCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZW5kcG9pbnRzW2RlcF0gPSB0YXNrcworICAgICAgICAgICAgaWYgbGVuKG5ld2VuZHBvaW50cykgIT0gMDoKKyAgICAgICAgICAgICAgICBwcm9jZXNzX2VuZHBvaW50czIobmV3ZW5kcG9pbnRzKQorICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYucnFkYXRhLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgc3FfcmV2ZGVwczIuYXBwZW5kKGNvcHkuY29weShzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pKQorICAgICAgICAgICAgc3FfcmV2ZGVwc19uZXcyLmFwcGVuZChzZXQoKSkKKyAgICAgICAgICAgIGlmIChsZW4oc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdKSA9PSAwKSBhbmQgdGFzayBub3QgaW4gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZToKKyAgICAgICAgICAgICAgICBlbmRwb2ludHMyW3Rhc2tdID0gc2V0KCkKKyAgICAgICAgcHJvY2Vzc19lbmRwb2ludHMyKGVuZHBvaW50czIpCisgICAgICAgIHNlbGYudW5za2lwcGFibGUgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgaWYgc3FfcmV2ZGVwc19uZXcyW3Rhc2tdOgorICAgICAgICAgICAgICAgIHNlbGYudW5za2lwcGFibGUuYXBwZW5kKHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmUuaW5kZXgodGFzaykpCisKKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnJxZGF0YS5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZToKKyAgICAgICAgICAgICAgICBkZXBzID0gc2V0KCkKKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHNxX3JldmRlcHNfbmV3W3Rhc2tdOgorICAgICAgICAgICAgICAgICAgICBkZXBzLmFkZChzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lLmluZGV4KGRlcCkpCisgICAgICAgICAgICAgICAgc3FfcmV2ZGVwc19zcXVhc2guYXBwZW5kKGRlcHMpCisgICAgICAgICAgICBlbGlmIGxlbihzcV9yZXZkZXBzX25ld1t0YXNrXSkgIT0gMDoKKyAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIlNvbWV0aGluZyB3ZW50IGJhZGx5IHdyb25nIGR1cmluZyBzY2VuZXF1ZXVlIGdlbmVyYXRpb24sIGFib3J0aW5nLiBQbGVhc2UgcmVwb3J0IHRoaXMgcHJvYmxlbS4iKQorCisgICAgICAgICMgUmVzb2x2ZSBzZXRzY2VuZSBpbnRlci10YXNrIGRlcGVuZGVuY2llcworICAgICAgICAjIGUuZy4gZG9fc29tZXRhc2tfc2V0c2NlbmVbZGVwZW5kc10gPSAidGFyZ2V0bmFtZTpkb19zb21lb3RoZXJ0YXNrX3NldHNjZW5lIgorICAgICAgICAjIE5vdGUgdGhhdCBhbnl0aGluZyBleHBsaWNpdGx5IGRlcGVuZGVkIHVwb24gd2lsbCBoYXZlIGl0cyByZXZlcnNlIGRlcGVuZGVuY2llcyByZW1vdmVkIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcworICAgICAgICBmb3IgdGFzayBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgIHJlYWxpZCA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmdldHRhc2tfaWQoc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdXSwgc2VsZi5ycWRhdGEucnVucV90YXNrW3Rhc2tdICsgIl9zZXRzY2VuZSIsIEZhbHNlKQorICAgICAgICAgICAgICAgIGlkZXBlbmRzID0gc2VsZi5ycWRhdGEudGFza0RhdGEudGFza3NfaWRlcGVuZHNbcmVhbGlkXQorICAgICAgICAgICAgICAgIGZvciAoZGVwaWQsIGlkZXBlbmR0YXNrKSBpbiBpZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwaWQgbm90IGluIHNlbGYucnFkYXRhLnRhc2tEYXRhLmJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgIGRlcGRhdGEgPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5idWlsZF90YXJnZXRzW2RlcGlkXVswXQorICAgICAgICAgICAgICAgICAgICBpZiBkZXBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZGVwID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbZGVwZGF0YV0KKyAgICAgICAgICAgICAgICAgICAgdGFza2lkID0gc2VsZi5ycWRhdGEuZ2V0X3Rhc2tfaWQoc2VsZi5ycWRhdGEudGFza0RhdGEuZ2V0Zm5faWQoZGVwKSwgaWRlcGVuZHRhc2sucmVwbGFjZSgiX3NldHNjZW5lIiwgIiIpKQorICAgICAgICAgICAgICAgICAgICBpZiB0YXNraWQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiUnVuUXVldWUiLCAiVGFzayAlc19zZXRzY2VuZSBkZXBlbmRzIHVwb24gbm9uLWV4aXN0ZW50IHRhc2sgJXM6JXMiICUgKHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHRhc2spLCBkZXAsIGlkZXBlbmR0YXNrKSkKKworICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleCh0YXNraWQpIGluIHNlbGYuc3FfaGFyZGRlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNxX2hhcmRkZXBzW3NlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmUuaW5kZXgodGFza2lkKV0gPSBzZXQoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNxX2hhcmRkZXBzW3NlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmUuaW5kZXgodGFza2lkKV0uYWRkKHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmUuaW5kZXgodGFzaykpCisKKyAgICAgICAgICAgICAgICAgICAgc3FfcmV2ZGVwc19zcXVhc2hbc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleCh0YXNrKV0uYWRkKHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmUuaW5kZXgodGFza2lkKSkKKyAgICAgICAgICAgICAgICAgICAgIyBIYXZlIHRvIHplcm8gdGhpcyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgc3FfcmV2ZGVwc19zcXVhc2hbc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleCh0YXNraWQpXSA9IHNldCgpCisKKyAgICAgICAgZm9yIHRhc2sgaW4gc2VsZi5zcV9oYXJkZGVwczoKKyAgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYuc3FfaGFyZGRlcHNbdGFza106CisgICAgICAgICAgICAgICAgIHNxX3JldmRlcHNfc3F1YXNoW2RlcF0uYWRkKHRhc2spCisKKyAgICAgICAgI2ZvciB0YXNrIGluIHhyYW5nZShsZW4oc3FfcmV2ZGVwc19zcXVhc2gpKToKKyAgICAgICAgIyAgICByZWFsdGFzayA9IHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbdGFza10KKyAgICAgICAgIyAgICBiYi53YXJuKCJUYXNrICVzOiAlc19zZXRzY2VuZSBpcyAlcyAiICUgKHRhc2ssIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHJlYWx0YXNrKSAsIHNxX3JldmRlcHNfc3F1YXNoW3Rhc2tdKSkKKworICAgICAgICBzZWxmLnNxX2RlcHMgPSBbXQorICAgICAgICBzZWxmLnNxX3JldmRlcHMgPSBzcV9yZXZkZXBzX3NxdWFzaAorICAgICAgICBzZWxmLnNxX3JldmRlcHMyID0gY29weS5kZWVwY29weShzZWxmLnNxX3JldmRlcHMpCisKKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnNxX3JldmRlcHMpKToKKyAgICAgICAgICAgIHNlbGYuc3FfZGVwcy5hcHBlbmQoc2V0KCkpCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5zcV9yZXZkZXBzKSk6CisgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYuc3FfcmV2ZGVwc1t0YXNrXToKKyAgICAgICAgICAgICAgICBzZWxmLnNxX2RlcHNbZGVwXS5hZGQodGFzaykKKworICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYuc3FfcmV2ZGVwcykpOgorICAgICAgICAgICAgaWYgbGVuKHNlbGYuc3FfcmV2ZGVwc1t0YXNrXSkgPT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfYnVpbGRhYmxlW3Rhc2tdID0gMQorCisgICAgICAgIHNlbGYub3V0cmlnaHRmYWlsID0gW10KKyAgICAgICAgaWYgc2VsZi5ycS5oYXNodmFsaWRhdGU6CisgICAgICAgICAgICBzcV9oYXNoID0gW10KKyAgICAgICAgICAgIHNxX2hhc2hmbiA9IFtdCisgICAgICAgICAgICBzcV9mbiA9IFtdCisgICAgICAgICAgICBzcV90YXNrbmFtZSA9IFtdCisgICAgICAgICAgICBzcV90YXNrID0gW10KKyAgICAgICAgICAgIG5vZXhlYyA9IFtdCisgICAgICAgICAgICBzdGFtcHByZXNlbnQgPSBbXQorICAgICAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnNxX3JldmRlcHMpKToKKyAgICAgICAgICAgICAgICByZWFsdGFzayA9IHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbdGFza10KKyAgICAgICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFtyZWFsdGFza11dCisgICAgICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbcmVhbHRhc2tdCisgICAgICAgICAgICAgICAgdGFza2RlcCA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZS50YXNrX2RlcHNbZm5dCisKKyAgICAgICAgICAgICAgICBpZiAnbm9leGVjJyBpbiB0YXNrZGVwIGFuZCB0YXNrbmFtZSBpbiB0YXNrZGVwWydub2V4ZWMnXToKKyAgICAgICAgICAgICAgICAgICAgbm9leGVjLmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfc2tpcCh0YXNrKQorICAgICAgICAgICAgICAgICAgICBiYi5idWlsZC5tYWtlX3N0YW1wKHRhc2tuYW1lICsgIl9zZXRzY2VuZSIsIHNlbGYucnFkYXRhLmRhdGFDYWNoZSwgZm4pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJxLmNoZWNrX3N0YW1wX3Rhc2socmVhbHRhc2ssIHRhc2tuYW1lICsgIl9zZXRzY2VuZSIsIGNhY2hlPXNlbGYuc3RhbXBjYWNoZSk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAnU2V0c2NlbmUgc3RhbXAgY3VycmVudCBmb3IgdGFzayAlcyglcyknLCB0YXNrLCBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhyZWFsdGFzaykpCisgICAgICAgICAgICAgICAgICAgIHN0YW1wcHJlc2VudC5hcHBlbmQodGFzaykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50YXNrX3NraXAodGFzaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHNlbGYucnEuY2hlY2tfc3RhbXBfdGFzayhyZWFsdGFzaywgdGFza25hbWUsIHJlY3Vyc2UgPSBUcnVlLCBjYWNoZT1zZWxmLnN0YW1wY2FjaGUpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ05vcm1hbCBzdGFtcCBjdXJyZW50IGZvciB0YXNrICVzKCVzKScsIHRhc2ssIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHJlYWx0YXNrKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhbXBwcmVzZW50LmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfc2tpcCh0YXNrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgc3FfZm4uYXBwZW5kKGZuKQorICAgICAgICAgICAgICAgIHNxX2hhc2hmbi5hcHBlbmQoc2VsZi5ycWRhdGEuZGF0YUNhY2hlLmhhc2hmbltmbl0pCisgICAgICAgICAgICAgICAgc3FfaGFzaC5hcHBlbmQoc2VsZi5ycWRhdGEucnVucV9oYXNoW3JlYWx0YXNrXSkKKyAgICAgICAgICAgICAgICBzcV90YXNrbmFtZS5hcHBlbmQodGFza25hbWUpCisgICAgICAgICAgICAgICAgc3FfdGFzay5hcHBlbmQodGFzaykKKyAgICAgICAgICAgIGNhbGwgPSBzZWxmLnJxLmhhc2h2YWxpZGF0ZSArICIoc3FfZm4sIHNxX3Rhc2ssIHNxX2hhc2gsIHNxX2hhc2hmbiwgZCkiCisgICAgICAgICAgICBsb2NzID0geyAic3FfZm4iIDogc3FfZm4sICJzcV90YXNrIiA6IHNxX3Rhc2tuYW1lLCAic3FfaGFzaCIgOiBzcV9oYXNoLCAic3FfaGFzaGZuIiA6IHNxX2hhc2hmbiwgImQiIDogc2VsZi5jb29rZXIuZXhwYW5kZWRfZGF0YSB9CisgICAgICAgICAgICB2YWxpZCA9IGJiLnV0aWxzLmJldHRlcl9ldmFsKGNhbGwsIGxvY3MpCisKKyAgICAgICAgICAgIHZhbGlkX25ldyA9IHN0YW1wcHJlc2VudAorICAgICAgICAgICAgZm9yIHYgaW4gdmFsaWQ6CisgICAgICAgICAgICAgICAgdmFsaWRfbmV3LmFwcGVuZChzcV90YXNrW3ZdKQorCisgICAgICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYuc3FfcmV2ZGVwcykpOgorICAgICAgICAgICAgICAgIGlmIHRhc2sgbm90IGluIHZhbGlkX25ldyBhbmQgdGFzayBub3QgaW4gbm9leGVjOgorICAgICAgICAgICAgICAgICAgICByZWFsdGFzayA9IHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbdGFza10KKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdObyBwYWNrYWdlIGZvdW5kLCBzbyBza2lwcGluZyBzZXRzY2VuZSB0YXNrICVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHJlYWx0YXNrKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5vdXRyaWdodGZhaWwuYXBwZW5kKHRhc2spCisKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0V4ZWN1dGluZyBTZXRTY2VuZSBUYXNrcycpCisKKyAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlU2NlbmVSdW4KKworICAgIGRlZiBzY2VuZXF1ZXVlX3VwZGF0ZWNvdW50ZXJzKHNlbGYsIHRhc2ssIGZhaWwgPSBGYWxzZSk6CisgICAgICAgIGZvciBkZXAgaW4gc2VsZi5zcV9kZXBzW3Rhc2tdOgorICAgICAgICAgICAgaWYgZmFpbCBhbmQgdGFzayBpbiBzZWxmLnNxX2hhcmRkZXBzIGFuZCBkZXAgaW4gc2VsZi5zcV9oYXJkZGVwc1t0YXNrXToKKyAgICAgICAgICAgICAgICByZWFsdGFzayA9IHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbdGFza10KKyAgICAgICAgICAgICAgICByZWFsZGVwID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVtkZXBdCisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICIlcyB3YXMgdW5hdmFpbGFibGUgYW5kIGlzIGEgaGFyZCBkZXBlbmRlbmN5IG9mICVzIHNvIHNraXBwaW5nIiAlIChzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhyZWFsdGFzayksIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHJlYWxkZXApKSkKKyAgICAgICAgICAgICAgICBzZWxmLnNjZW5lcXVldWVfdXBkYXRlY291bnRlcnMoZGVwLCBmYWlsKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiB0YXNrIG5vdCBpbiBzZWxmLnNxX3JldmRlcHMyW2RlcF06CisgICAgICAgICAgICAgICAgIyBNYXkgYWxyZWFkeSBoYXZlIGJlZW4gcmVtb3ZlZCBieSB0aGUgZmFpbCBjYXNlIGFib3ZlCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYuc3FfcmV2ZGVwczJbZGVwXS5yZW1vdmUodGFzaykKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLnNxX3JldmRlcHMyW2RlcF0pID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi5ydW5xX2J1aWxkYWJsZVtkZXBdID0gMQorCisgICAgZGVmIHRhc2tfY29tcGxldGVvdXRyaWdodChzZWxmLCB0YXNrKToKKyAgICAgICAgIiIiCisgICAgICAgIE1hcmsgYSB0YXNrIGFzIGNvbXBsZXRlZAorICAgICAgICBMb29rIGF0IHRoZSByZXZlcnNlIGRlcGVuZGVuY2llcyBhbmQgbWFyayBhbnkgdGFzayB3aXRoCisgICAgICAgIGNvbXBsZXRlZCBkZXBlbmRlbmNpZXMgYXMgYnVpbGRhYmxlCisgICAgICAgICIiIgorCisgICAgICAgIGluZGV4ID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXQorICAgICAgICBsb2dnZXIuZGVidWcoMSwgJ0ZvdW5kIHRhc2sgJXMgd2hpY2ggY291bGQgYmUgYWNjZWxlcmF0ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcoaW5kZXgpKQorCisgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV9jb3ZlcmVkLmFkZCh0YXNrKQorICAgICAgICBzZWxmLnNjZW5lcXVldWVfdXBkYXRlY291bnRlcnModGFzaykKKworICAgIGRlZiB0YXNrX2NvbXBsZXRlKHNlbGYsIHRhc2spOgorICAgICAgICBzZWxmLnN0YXRzLnRhc2tDb21wbGV0ZWQoKQorICAgICAgICBiYi5ldmVudC5maXJlKHNjZW5lUXVldWVUYXNrQ29tcGxldGVkKHRhc2ssIHNlbGYuc3RhdHMsIHNlbGYucnEpLCBzZWxmLmNmZ0RhdGEpCisgICAgICAgIHNlbGYudGFza19jb21wbGV0ZW91dHJpZ2h0KHRhc2spCisKKyAgICBkZWYgdGFza19mYWlsKHNlbGYsIHRhc2ssIHJlc3VsdCk6CisgICAgICAgIHNlbGYuc3RhdHMudGFza0ZhaWxlZCgpCisgICAgICAgIGJiLmV2ZW50LmZpcmUoc2NlbmVRdWV1ZVRhc2tGYWlsZWQodGFzaywgc2VsZi5zdGF0cywgcmVzdWx0LCBzZWxmKSwgc2VsZi5jZmdEYXRhKQorICAgICAgICBzZWxmLnNjZW5lcXVldWVfbm90Y292ZXJlZC5hZGQodGFzaykKKyAgICAgICAgc2VsZi5zY2VuZXF1ZXVlX3VwZGF0ZWNvdW50ZXJzKHRhc2ssIFRydWUpCisKKyAgICBkZWYgdGFza19mYWlsb3V0cmlnaHQoc2VsZiwgdGFzayk6CisgICAgICAgIHNlbGYucnVucV9ydW5uaW5nW3Rhc2tdID0gMQorICAgICAgICBzZWxmLnJ1bnFfYnVpbGRhYmxlW3Rhc2tdID0gMQorICAgICAgICBzZWxmLnN0YXRzLnRhc2tDb21wbGV0ZWQoKQorICAgICAgICBzZWxmLnN0YXRzLnRhc2tTa2lwcGVkKCkKKyAgICAgICAgaW5kZXggPSBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW3Rhc2tdCisgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV9ub3Rjb3ZlcmVkLmFkZCh0YXNrKQorICAgICAgICBzZWxmLnNjZW5lcXVldWVfdXBkYXRlY291bnRlcnModGFzaywgVHJ1ZSkKKworICAgIGRlZiB0YXNrX3NraXAoc2VsZiwgdGFzayk6CisgICAgICAgIHNlbGYucnVucV9ydW5uaW5nW3Rhc2tdID0gMQorICAgICAgICBzZWxmLnJ1bnFfYnVpbGRhYmxlW3Rhc2tdID0gMQorICAgICAgICBzZWxmLnRhc2tfY29tcGxldGVvdXRyaWdodCh0YXNrKQorICAgICAgICBzZWxmLnN0YXRzLnRhc2tDb21wbGV0ZWQoKQorICAgICAgICBzZWxmLnN0YXRzLnRhc2tTa2lwcGVkKCkKKworICAgIGRlZiBleGVjdXRlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUnVuIHRoZSB0YXNrcyBpbiBhIHF1ZXVlIHByZXBhcmVkIGJ5IHByZXBhcmVfcnVucXVldWUKKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5ycS5yZWFkX3dvcmtlcnMoKQorCisgICAgICAgIHRhc2sgPSBOb25lCisgICAgICAgIGlmIHNlbGYuc3RhdHMuYWN0aXZlIDwgc2VsZi5udW1iZXJfdGFza3M6CisgICAgICAgICAgICAjIEZpbmQgdGhlIG5leHQgc2V0c2NlbmUgdG8gcnVuCisgICAgICAgICAgICBmb3IgbmV4dHRhc2sgaW4geHJhbmdlKHNlbGYuc3RhdHMudG90YWwpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYucnVucV9idWlsZGFibGVbbmV4dHRhc2tdID09IDEgYW5kIHNlbGYucnVucV9ydW5uaW5nW25leHR0YXNrXSAhPSAxOgorICAgICAgICAgICAgICAgICAgICBpZiBuZXh0dGFzayBpbiBzZWxmLnVuc2tpcHBhYmxlOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJTZXRzY2VuZSB0YXNrICVzIGlzIHVuc2tpcHBhYmxlIiAlIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbbmV4dHRhc2tdKSkgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIG5leHR0YXNrIG5vdCBpbiBzZWxmLnVuc2tpcHBhYmxlIGFuZCBsZW4oc2VsZi5zcV9yZXZkZXBzW25leHR0YXNrXSkgPiAwIGFuZCBzZWxmLnNxX3JldmRlcHNbbmV4dHRhc2tdLmlzc3Vic2V0KHNlbGYuc2NlbmVxdWV1ZV9jb3ZlcmVkKSBhbmQgc2VsZi5jaGVja19kZXBlbmRlbmNpZXMobmV4dHRhc2ssIHNlbGYuc3FfcmV2ZGVwc1tuZXh0dGFza10sIFRydWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVhbHRhc2sgPSBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW25leHR0YXNrXQorICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbcmVhbHRhc2tdXQorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmR0YXJnZXQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLnJxZGF0YS50YXJnZXRfcGFpcnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGFyZ2V0WzBdID09IGZuIGFuZCB0YXJnZXRbMV0gPT0gc2VsZi5ycWRhdGEucnVucV90YXNrW3JlYWx0YXNrXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmR0YXJnZXQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZm91bmR0YXJnZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJTa2lwcGluZyBzZXRzY2VuZSBmb3IgdGFzayAlcyIgJSBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW25leHR0YXNrXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXNrX3NraXAobmV4dHRhc2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zY2VuZXF1ZXVlX25vdG5lZWRlZC5hZGQobmV4dHRhc2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICAgICAgaWYgbmV4dHRhc2sgaW4gc2VsZi5vdXRyaWdodGZhaWw6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfZmFpbG91dHJpZ2h0KG5leHR0YXNrKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICAgICAgdGFzayA9IG5leHR0YXNrCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIHRhc2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZWFsdGFzayA9IHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbdGFza10KKyAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3JlYWx0YXNrXV0KKworICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbcmVhbHRhc2tdICsgIl9zZXRzY2VuZSIKKyAgICAgICAgICAgIGlmIHNlbGYucnEuY2hlY2tfc3RhbXBfdGFzayhyZWFsdGFzaywgc2VsZi5ycWRhdGEucnVucV90YXNrW3JlYWx0YXNrXSwgcmVjdXJzZSA9IFRydWUsIGNhY2hlPXNlbGYuc3RhbXBjYWNoZSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdTdGFtcCBmb3IgdW5kZXJseWluZyB0YXNrICVzKCVzKSBpcyBjdXJyZW50LCBzbyBza2lwcGluZyBzZXRzY2VuZSB2YXJpYW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzaywgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcocmVhbHRhc2spKQorICAgICAgICAgICAgICAgIHNlbGYudGFza19mYWlsb3V0cmlnaHQodGFzaykKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICBpZiBzZWxmLmNvb2tlci5jb25maWd1cmF0aW9uLmZvcmNlOgorICAgICAgICAgICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5ycWRhdGEudGFyZ2V0X3BhaXJzOgorICAgICAgICAgICAgICAgICAgICBpZiB0YXJnZXRbMF0gPT0gZm4gYW5kIHRhcmdldFsxXSA9PSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbcmVhbHRhc2tdOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXNrX2ZhaWxvdXRyaWdodCh0YXNrKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHJlYWx0YXNrLCB0YXNrbmFtZSwgY2FjaGU9c2VsZi5zdGFtcGNhY2hlKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ1NldHNjZW5lIHN0YW1wIGN1cnJlbnQgdGFzayAlcyglcyksIHNvIHNraXAgaXQgYW5kIGl0cyBkZXBlbmRlbmNpZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLCBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhyZWFsdGFzaykpCisgICAgICAgICAgICAgICAgc2VsZi50YXNrX3NraXAodGFzaykKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICBzdGFydGV2ZW50ID0gc2NlbmVRdWV1ZVRhc2tTdGFydGVkKHRhc2ssIHNlbGYuc3RhdHMsIHNlbGYucnEpCisgICAgICAgICAgICBiYi5ldmVudC5maXJlKHN0YXJ0ZXZlbnQsIHNlbGYuY2ZnRGF0YSkKKworICAgICAgICAgICAgdGFza2RlcCA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZS50YXNrX2RlcHNbZm5dCisgICAgICAgICAgICBpZiAnZmFrZXJvb3QnIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ2Zha2Vyb290J106CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYucnEuZmFrZXdvcmtlcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5ycS5zdGFydF9mYWtld29ya2VyKHNlbGYpCisgICAgICAgICAgICAgICAgc2VsZi5ycS5mYWtld29ya2VyLnN0ZGluLndyaXRlKCI8cnVudGFzaz4iICsgcGlja2xlLmR1bXBzKChmbiwgcmVhbHRhc2ssIHRhc2tuYW1lLCBUcnVlLCBzZWxmLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZm4pLCBOb25lKSkgKyAiPC9ydW50YXNrPiIpCisgICAgICAgICAgICAgICAgc2VsZi5ycS5mYWtld29ya2VyLnN0ZGluLmZsdXNoKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5ycS53b3JrZXIuc3RkaW4ud3JpdGUoIjxydW50YXNrPiIgKyBwaWNrbGUuZHVtcHMoKGZuLCByZWFsdGFzaywgdGFza25hbWUsIFRydWUsIHNlbGYuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmbiksIE5vbmUpKSArICI8L3J1bnRhc2s+IikKKyAgICAgICAgICAgICAgICBzZWxmLnJxLndvcmtlci5zdGRpbi5mbHVzaCgpCisKKyAgICAgICAgICAgIHNlbGYucnVucV9ydW5uaW5nW3Rhc2tdID0gMQorICAgICAgICAgICAgc2VsZi5zdGF0cy50YXNrQWN0aXZlKCkKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhdHMuYWN0aXZlIDwgc2VsZi5udW1iZXJfdGFza3M6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBpZiBzZWxmLnN0YXRzLmFjdGl2ZSA+IDA6CisgICAgICAgICAgICBzZWxmLnJxLnJlYWRfd29ya2VycygpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5ycS5hY3RpdmVfZmRzKCkKKworICAgICAgICAjZm9yIHRhc2sgaW4geHJhbmdlKHNlbGYuc3RhdHMudG90YWwpOgorICAgICAgICAjICAgIGlmIHNlbGYucnVucV9ydW5uaW5nW3Rhc2tdICE9IDE6CisgICAgICAgICMgICAgICAgIGJ1aWxkYWJsZSA9IHNlbGYucnVucV9idWlsZGFibGVbdGFza10KKyAgICAgICAgIyAgICAgICAgcmV2ZGVwcyA9IHNlbGYuc3FfcmV2ZGVwc1t0YXNrXQorICAgICAgICAjICAgICAgICBiYi53YXJuKCJGb3VuZCB3ZSBkaWRuJ3QgcnVuICVzICVzICVzICVzIiAlICh0YXNrLCBidWlsZGFibGUsIHN0cihyZXZkZXBzKSwgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcoc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXSkpKQorCisgICAgICAgICMgQ29udmVydCBzY2VuZXF1ZXVlX2NvdmVyZWQgdGFzayBudW1iZXJzIGludG8gZnVsbCB0YXNrZ3JhcGggaWRzCisgICAgICAgIG9sZGNvdmVyZWQgPSBzZWxmLnNjZW5lcXVldWVfY292ZXJlZAorICAgICAgICBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZCA9IHNldCgpCisgICAgICAgIGZvciB0YXNrIGluIG9sZGNvdmVyZWQ6CisgICAgICAgICAgICBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZC5hZGQoc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXSkKKyAgICAgICAgc2VsZi5ycS5zY2VuZXF1ZXVlX25vdGNvdmVyZWQgPSBzZXQoKQorICAgICAgICBmb3IgdGFzayBpbiBzZWxmLnNjZW5lcXVldWVfbm90Y292ZXJlZDoKKyAgICAgICAgICAgIHNlbGYucnEuc2NlbmVxdWV1ZV9ub3Rjb3ZlcmVkLmFkZChzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW3Rhc2tdKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnV2UgY2FuIHNraXAgdGFza3MgJXMnLCBzb3J0ZWQoc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQpKQorCisgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZVJ1bkluaXQKKworICAgICAgICBjb21wbGV0ZWV2ZW50ID0gc2NlbmVRdWV1ZUNvbXBsZXRlKHNlbGYuc3RhdHMsIHNlbGYucnEpCisgICAgICAgIGJiLmV2ZW50LmZpcmUoY29tcGxldGVldmVudCwgc2VsZi5jZmdEYXRhKQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcnVucXVldWVfcHJvY2Vzc193YWl0cGlkKHNlbGYsIHRhc2ssIHN0YXR1cyk6CisgICAgICAgIHRhc2sgPSBzZWxmLnJxLnJxZGF0YS5ydW5xX3NldHNjZW5lLmluZGV4KHRhc2spCisKKyAgICAgICAgUnVuUXVldWVFeGVjdXRlLnJ1bnF1ZXVlX3Byb2Nlc3Nfd2FpdHBpZChzZWxmLCB0YXNrLCBzdGF0dXMpCisKK2NsYXNzIFRhc2tGYWlsdXJlKEV4Y2VwdGlvbik6CisgICAgIiIiCisgICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgdGFzayBpbiBhIHJ1bnF1ZXVlIGZhaWxzCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICBzZWxmLmFyZ3MgPSB4CisKKworY2xhc3MgcnVuUXVldWVFeGl0V2FpdChiYi5ldmVudC5FdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgd2hlbiB3YWl0aW5nIGZvciB0YXNrIHByb2Nlc3NlcyB0byBleGl0CisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVtYWluKToKKyAgICAgICAgc2VsZi5yZW1haW4gPSByZW1haW4KKyAgICAgICAgc2VsZi5tZXNzYWdlID0gIldhaXRpbmcgZm9yICVzIGFjdGl2ZSB0YXNrcyB0byBmaW5pc2giICUgcmVtYWluCisgICAgICAgIGJiLmV2ZW50LkV2ZW50Ll9faW5pdF9fKHNlbGYpCisKK2NsYXNzIHJ1blF1ZXVlRXZlbnQoYmIuZXZlbnQuRXZlbnQpOgorICAgICIiIgorICAgIEJhc2UgcnVuUXVldWUgZXZlbnQgY2xhc3MKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxKToKKyAgICAgICAgc2VsZi50YXNraWQgPSB0YXNrCisgICAgICAgIHNlbGYudGFza3N0cmluZyA9IHJxLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyh0YXNrKQorICAgICAgICBzZWxmLnRhc2tuYW1lID0gcnEucnFkYXRhLmdldF90YXNrX25hbWUodGFzaykKKyAgICAgICAgc2VsZi50YXNrZmlsZSA9IHJxLnJxZGF0YS5nZXRfdGFza19maWxlKHRhc2spCisgICAgICAgIHNlbGYudGFza2hhc2ggPSBycS5ycWRhdGEuZ2V0X3Rhc2tfaGFzaCh0YXNrKQorICAgICAgICBzZWxmLnN0YXRzID0gc3RhdHMuY29weSgpCisgICAgICAgIGJiLmV2ZW50LkV2ZW50Ll9faW5pdF9fKHNlbGYpCisKK2NsYXNzIHNjZW5lUXVldWVFdmVudChydW5RdWV1ZUV2ZW50KToKKyAgICAiIiIKKyAgICBCYXNlIHNjZW5lUXVldWUgZXZlbnQgY2xhc3MKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxLCBub2V4ZWM9RmFsc2UpOgorICAgICAgICBydW5RdWV1ZUV2ZW50Ll9faW5pdF9fKHNlbGYsIHRhc2ssIHN0YXRzLCBycSkKKyAgICAgICAgcmVhbHRhc2sgPSBycS5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXQorICAgICAgICBzZWxmLnRhc2tzdHJpbmcgPSBycS5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcocmVhbHRhc2ssICJfc2V0c2NlbmUiKQorICAgICAgICBzZWxmLnRhc2tuYW1lID0gcnEucnFkYXRhLmdldF90YXNrX25hbWUocmVhbHRhc2spICsgIl9zZXRzY2VuZSIKKyAgICAgICAgc2VsZi50YXNrZmlsZSA9IHJxLnJxZGF0YS5nZXRfdGFza19maWxlKHJlYWx0YXNrKQorICAgICAgICBzZWxmLnRhc2toYXNoID0gcnEucnFkYXRhLmdldF90YXNrX2hhc2gocmVhbHRhc2spCisKK2NsYXNzIHJ1blF1ZXVlVGFza1N0YXJ0ZWQocnVuUXVldWVFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgbm90aWZ5aW5nIGEgdGFzayB3YXMgc3RhcnRlZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrLCBzdGF0cywgcnEsIG5vZXhlYz1GYWxzZSk6CisgICAgICAgIHJ1blF1ZXVlRXZlbnQuX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxKQorICAgICAgICBzZWxmLm5vZXhlYyA9IG5vZXhlYworCitjbGFzcyBzY2VuZVF1ZXVlVGFza1N0YXJ0ZWQoc2NlbmVRdWV1ZUV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCBub3RpZnlpbmcgYSBzZXRzY2VuZSB0YXNrIHdhcyBzdGFydGVkCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2ssIHN0YXRzLCBycSwgbm9leGVjPUZhbHNlKToKKyAgICAgICAgc2NlbmVRdWV1ZUV2ZW50Ll9faW5pdF9fKHNlbGYsIHRhc2ssIHN0YXRzLCBycSkKKyAgICAgICAgc2VsZi5ub2V4ZWMgPSBub2V4ZWMKKworY2xhc3MgcnVuUXVldWVUYXNrRmFpbGVkKHJ1blF1ZXVlRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IG5vdGlmeWluZyBhIHRhc2sgZmFpbGVkCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2ssIHN0YXRzLCBleGl0Y29kZSwgcnEpOgorICAgICAgICBydW5RdWV1ZUV2ZW50Ll9faW5pdF9fKHNlbGYsIHRhc2ssIHN0YXRzLCBycSkKKyAgICAgICAgc2VsZi5leGl0Y29kZSA9IGV4aXRjb2RlCisKK2NsYXNzIHNjZW5lUXVldWVUYXNrRmFpbGVkKHNjZW5lUXVldWVFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgbm90aWZ5aW5nIGEgc2V0c2NlbmUgdGFzayBmYWlsZWQKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIGV4aXRjb2RlLCBycSk6CisgICAgICAgIHNjZW5lUXVldWVFdmVudC5fX2luaXRfXyhzZWxmLCB0YXNrLCBzdGF0cywgcnEpCisgICAgICAgIHNlbGYuZXhpdGNvZGUgPSBleGl0Y29kZQorCitjbGFzcyBzY2VuZVF1ZXVlQ29tcGxldGUoc2NlbmVRdWV1ZUV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIGFsbCB0aGUgc2NlbmVRdWV1ZSB0YXNrcyBhcmUgY29tcGxldGUKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhdHMsIHJxKToKKyAgICAgICAgc2VsZi5zdGF0cyA9IHN0YXRzLmNvcHkoKQorICAgICAgICBiYi5ldmVudC5FdmVudC5fX2luaXRfXyhzZWxmKQorCitjbGFzcyBydW5RdWV1ZVRhc2tDb21wbGV0ZWQocnVuUXVldWVFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgbm90aWZ5aW5nIGEgdGFzayBjb21wbGV0ZWQKKyAgICAiIiIKKworY2xhc3Mgc2NlbmVRdWV1ZVRhc2tDb21wbGV0ZWQoc2NlbmVRdWV1ZUV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCBub3RpZnlpbmcgYSBzZXRzY2VuZSB0YXNrIGNvbXBsZXRlZAorICAgICIiIgorCitjbGFzcyBydW5RdWV1ZVRhc2tTa2lwcGVkKHJ1blF1ZXVlRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IG5vdGlmeWluZyBhIHRhc2sgd2FzIHNraXBwZWQKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxLCByZWFzb24pOgorICAgICAgICBydW5RdWV1ZUV2ZW50Ll9faW5pdF9fKHNlbGYsIHRhc2ssIHN0YXRzLCBycSkKKyAgICAgICAgc2VsZi5yZWFzb24gPSByZWFzb24KKworY2xhc3MgcnVuUXVldWVQaXBlKCk6CisgICAgIiIiCisgICAgQWJzdHJhY3Rpb24gZm9yIGEgcGlwZSBiZXR3ZWVuIGEgd29ya2VyIHRocmVhZCBhbmQgdGhlIHNlcnZlcgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwaXBlaW4sIHBpcGVvdXQsIGQsIHJxLCBycWV4ZWMpOgorICAgICAgICBzZWxmLmlucHV0ID0gcGlwZWluCisgICAgICAgIGlmIHBpcGVvdXQ6CisgICAgICAgICAgICBwaXBlb3V0LmNsb3NlKCkKKyAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZChzZWxmLmlucHV0KQorICAgICAgICBzZWxmLnF1ZXVlID0gIiIKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLnJxID0gcnEKKyAgICAgICAgc2VsZi5ycWV4ZWMgPSBycWV4ZWMKKworICAgIGRlZiBzZXRydW5xdWV1ZWV4ZWMoc2VsZiwgcnFleGVjKToKKyAgICAgICAgc2VsZi5ycWV4ZWMgPSBycWV4ZWMKKworICAgIGRlZiByZWFkKHNlbGYpOgorICAgICAgICBmb3IgdyBpbiBbc2VsZi5ycS53b3JrZXIsIHNlbGYucnEuZmFrZXdvcmtlcl06CisgICAgICAgICAgICBpZiBub3QgdzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdy5wb2xsKCkKKyAgICAgICAgICAgIGlmIHcucmV0dXJuY29kZSBpcyBub3QgTm9uZSBhbmQgbm90IHNlbGYucnEudGVhcmRvd246CisgICAgICAgICAgICAgICAgbmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJxLndvcmtlciBhbmQgdy5waWQgPT0gc2VsZi5ycS53b3JrZXIucGlkOgorICAgICAgICAgICAgICAgICAgICBuYW1lID0gIldvcmtlciIKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYucnEuZmFrZXdvcmtlciBhbmQgdy5waWQgPT0gc2VsZi5ycS5mYWtld29ya2VyLnBpZDoKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJGYWtlcm9vdCIKKyAgICAgICAgICAgICAgICBiYi5lcnJvcigiJXMgcHJvY2VzcyAoJXMpIGV4aXRlZCB1bmV4cGVjdGVkbHkgKCVzKSwgc2h1dHRpbmcgZG93bi4uLiIgJSAobmFtZSwgdy5waWQsIHN0cih3LnJldHVybmNvZGUpKSkKKyAgICAgICAgICAgICAgICBzZWxmLnJxLmZpbmlzaF9ydW5xdWV1ZShUcnVlKQorCisgICAgICAgIHN0YXJ0ID0gbGVuKHNlbGYucXVldWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucXVldWUgPSBzZWxmLnF1ZXVlICsgc2VsZi5pbnB1dC5yZWFkKDEwMjQwMCkKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKSBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQUdBSU46CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZW5kID0gbGVuKHNlbGYucXVldWUpCisgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICB3aGlsZSBmb3VuZCBhbmQgbGVuKHNlbGYucXVldWUpOgorICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgaW5kZXggPSBzZWxmLnF1ZXVlLmZpbmQoIjwvZXZlbnQ+IikKKyAgICAgICAgICAgIHdoaWxlIGluZGV4ICE9IC0xIGFuZCBzZWxmLnF1ZXVlLnN0YXJ0c3dpdGgoIjxldmVudD4iKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGV2ZW50ID0gcGlja2xlLmxvYWRzKHNlbGYucXVldWVbNzppbmRleF0pCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJmYWlsZWQgbG9hZCBwaWNrbGUgJyVzJzogJyVzJyIgJSAoZSwgc2VsZi5xdWV1ZVs3OmluZGV4XSkpCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZV9mcm9tX3dvcmtlcihldmVudCwgc2VsZi5kKQorICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYucXVldWUgPSBzZWxmLnF1ZXVlW2luZGV4Kzg6XQorICAgICAgICAgICAgICAgIGluZGV4ID0gc2VsZi5xdWV1ZS5maW5kKCI8L2V2ZW50PiIpCisgICAgICAgICAgICBpbmRleCA9IHNlbGYucXVldWUuZmluZCgiPC9leGl0Y29kZT4iKQorICAgICAgICAgICAgd2hpbGUgaW5kZXggIT0gLTEgYW5kIHNlbGYucXVldWUuc3RhcnRzd2l0aCgiPGV4aXRjb2RlPiIpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdGFzaywgc3RhdHVzID0gcGlja2xlLmxvYWRzKHNlbGYucXVldWVbMTA6aW5kZXhdKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiUnVuUXVldWUiLCAiZmFpbGVkIGxvYWQgcGlja2xlICclcyc6ICclcyciICUgKGUsIHNlbGYucXVldWVbMTA6aW5kZXhdKSkKKyAgICAgICAgICAgICAgICBzZWxmLnJxZXhlYy5ydW5xdWV1ZV9wcm9jZXNzX3dhaXRwaWQodGFzaywgc3RhdHVzKQorICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYucXVldWUgPSBzZWxmLnF1ZXVlW2luZGV4KzExOl0KKyAgICAgICAgICAgICAgICBpbmRleCA9IHNlbGYucXVldWUuZmluZCgiPC9leGl0Y29kZT4iKQorICAgICAgICByZXR1cm4gKGVuZCA+IHN0YXJ0KQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICB3aGlsZSBzZWxmLnJlYWQoKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGxlbihzZWxmLnF1ZXVlKSA+IDA6CisgICAgICAgICAgICBwcmludCgiV2FybmluZywgd29ya2VyIGxlZnQgcGFydGlhbCBtZXNzYWdlOiAlcyIgJSBzZWxmLnF1ZXVlKQorICAgICAgICBzZWxmLmlucHV0LmNsb3NlKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1ZTQ4MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsOTYgQEAKKyMKKyMgQml0QmFrZSBCYXNlIFNlcnZlciBDb2RlCisjCisjIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDcgIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwOCAgUmljaGFyZCBQdXJkaWUKKyMgQ29weXJpZ2h0IChDKSAyMDEzICAgICAgICAgQWxleGFuZHJ1IERhbWlhbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIiIiIEJhc2UgY29kZSBmb3IgQml0YmFrZSBzZXJ2ZXIgcHJvY2VzcworCitIYXZlIGEgY29tbW9uIGJhc2UgZm9yIHRoYXQgYWxsIEJpdGJha2Ugc2VydmVyIGNsYXNzZXMgZW5zdXJlcyBhIGNvbnNpc3RlbnQKK2FwcHJvYWNoIHRvIHRoZSBpbnRlcmZhY2UsIGFuZCBtaW5pbWl6ZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggY29kZSBkdXBsaWNhdGlvbi4KKworIiIiCisKKyIiIiAgQmFzZUltcGxTZXJ2ZXIoKSB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsIFhYU2VydmVyKCkgaW1wbGVtZW50YXRpb25zLgorCisgICAgVGhlc2UgY2xhc3NlcyBjb250YWluIHRoZSBhY3R1YWwgY29kZSB0aGF0IHJ1bnMgdGhlIHNlcnZlciBzaWRlLCBpLmUuCisgICAgbGlzdGVucyBmb3IgdGhlIGNvbW1hbmRzIGFuZCBleGVjdXRlcyB0aGVtLiBBbHRob3VnaCB0aGVzZSBpbXBsZW1lbnRhdGlvbnMKKyAgICBjb250YWluIGFsbCB0aGUgZGF0YSBvZiB0aGUgb3JpZ2luYWwgYml0YmFrZSBjb21tYW5kLCBpLmUgdGhlIGNvb2tlciBpbnN0YW5jZSwKKyAgICB0aGV5IG1heSB3ZWxsIHJ1biBvbiBhIGRpZmZlcmVudCBwcm9jZXNzIG9yIGV2ZW4gbWFjaGluZS4KKworIiIiCisKK2NsYXNzIEJhc2VJbXBsU2VydmVyKCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9pZGxlZnVucyA9IHt9CisKKyAgICBkZWYgYWRkY29va2VyKHNlbGYsIGNvb2tlcik6CisgICAgICAgIHNlbGYuY29va2VyID0gY29va2VyCisKKyAgICBkZWYgcmVnaXN0ZXJfaWRsZV9mdW5jdGlvbihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgICIiIlJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoaWxlIHRoZSBzZXJ2ZXIgaXMgaWRsZSIiIgorICAgICAgICBhc3NlcnQgaGFzYXR0cihmdW5jdGlvbiwgJ19fY2FsbF9fJykKKyAgICAgICAgc2VsZi5faWRsZWZ1bnNbZnVuY3Rpb25dID0gZGF0YQorCisKKworIiIiIEJpdEJha2VCYXNlU2VydmVyQ29ubmVjdGlvbiBjbGFzcyBpcyB0aGUgY29tbW9uIGFuY2VzdG9yIHRvIGFsbAorICAgIEJpdEJha2VTZXJ2ZXJDb25uZWN0aW9uIGNsYXNzZXMuCisKKyAgICBUaGVzZSBjbGFzc2VzIGNvbnRyb2wgdGhlIHJlbW90ZSBzZXJ2ZXIuIFRoZSBvbmx5IGNvbW1hbmQgY3VycmVudGx5CisgICAgaW1wbGVtZW50ZWQgaXMgdGhlIHRlcm1pbmF0ZSgpIGNvbW1hbmQuCisKKyIiIgorCitjbGFzcyBCaXRCYWtlQmFzZVNlcnZlckNvbm5lY3Rpb24oKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVySW1wbCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIHBhc3MKKworCisiIiIgQml0QmFrZUJhc2VTZXJ2ZXIgY2xhc3MgaXMgdGhlIGNvbW1vbiBhbmNlc3RvciB0byBhbGwgQml0YmFrZSBzZXJ2ZXJzCisKKyAgICBEZXJpdmUgdGhpcyBjbGFzcyBpbiBvcmRlciB0byBpbXBsZW1lbnQgYSBCaXRCYWtlU2VydmVyIHdoaWNoIGlzIHRoZQorICAgIGNvbnRyb2xsaW5nIHN0dWIgZm9yIHRoZSBhY3R1YWwgc2VydmVyIGltcGxlbWVudGF0aW9uCisKKyIiIgorY2xhc3MgQml0QmFrZUJhc2VTZXJ2ZXIob2JqZWN0KToKKyAgICBkZWYgaW5pdFNlcnZlcihzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXJJbXBsID0gTm9uZSAgIyB3ZSBlbnN1cmUgYSBydW50aW1lIGNyYXNoIGlmIG5vdCBvdmVybG9hZGVkCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IE5vbmUKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgYWRkY29va2VyKHNlbGYsIGNvb2tlcik6CisgICAgICAgIHNlbGYuY29va2VyID0gY29va2VyCisgICAgICAgIHNlbGYuc2VydmVySW1wbC5hZGRjb29rZXIoY29va2VyKQorCisgICAgZGVmIGdldFNlcnZlcklkbGVDQihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VydmVySW1wbC5yZWdpc3Rlcl9pZGxlX2Z1bmN0aW9uCisKKyAgICBkZWYgc2F2ZUNvbm5lY3Rpb25EZXRhaWxzKHNlbGYpOgorICAgICAgICByZXR1cm4KKworICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIGVzdGFibGlzaENvbm5lY3Rpb24oc2VsZiwgZmVhdHVyZXNldCk6CisgICAgICAgIHJhaXNlICAgIk11c3QgcmVkZWZpbmUgdGhlICVzLmVzdGFibGlzaENvbm5lY3Rpb24oKSIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgZGVmIGVuZFNlc3Npb24oc2VsZik6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbi50ZXJtaW5hdGUoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIvcHJvY2Vzcy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL3Byb2Nlc3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZjYTM1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL3Byb2Nlc3MucHkKQEAgLTAsMCArMSwyNjQgQEAKKyMKKyMgQml0QmFrZSBQcm9jZXNzIGJhc2VkIHNlcnZlci4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEJvYiBGb2Vyc3RlciA8cm9iZXJ0QGVyYWZ4LmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyIiIgorICAgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcyBiYXNlZCBzZXJ2ZXIgZm9yIGJpdGJha2UuCisiIiIKKworaW1wb3J0IGJiCitpbXBvcnQgYmIuZXZlbnQKK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgc2VsZWN0Citmcm9tIFF1ZXVlIGltcG9ydCBFbXB0eQorZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IEV2ZW50LCBQcm9jZXNzLCB1dGlsLCBRdWV1ZSwgUGlwZSwgcXVldWVzLCBNYW5hZ2VyCisKK2Zyb20gLiBpbXBvcnQgQml0QmFrZUJhc2VTZXJ2ZXIsIEJpdEJha2VCYXNlU2VydmVyQ29ubmVjdGlvbiwgQmFzZUltcGxTZXJ2ZXIKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UnKQorCitjbGFzcyBTZXJ2ZXJDb21tdW5pY2F0b3IoKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubmVjdGlvbiwgZXZlbnRfaGFuZGxlLCBzZXJ2ZXIpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uCisgICAgICAgIHNlbGYuZXZlbnRfaGFuZGxlID0gZXZlbnRfaGFuZGxlCisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyCisKKyAgICBkZWYgcnVuQ29tbWFuZChzZWxmLCBjb21tYW5kKToKKyAgICAgICAgIyBAdG9kbyB0cnkvZXhjZXB0CisgICAgICAgIHNlbGYuY29ubmVjdGlvbi5zZW5kKGNvbW1hbmQpCisKKyAgICAgICAgaWYgbm90IHNlbGYuc2VydmVyLmlzX2FsaXZlKCk6CisgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0CisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICMgZG9uJ3QgbGV0IHRoZSB1c2VyIGN0cmwtYyB3aGlsZSB3ZSdyZSB3YWl0aW5nIGZvciBhIHJlc3BvbnNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5jb25uZWN0aW9uLnBvbGwoMjApOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLnJlY3YoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJUaW1lb3V0IHdoaWxlIGF0dGVtcHRpbmcgdG8gY29tbXVuaWNhdGUgd2l0aCBiaXRiYWtlIHNlcnZlciIpCisgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIGdldEV2ZW50SGFuZGxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ldmVudF9oYW5kbGUudmFsdWUKKworY2xhc3MgRXZlbnRBZGFwdGVyKCk6CisgICAgIiIiCisgICAgQWRhcHRlciB0byB3cmFwIG91ciBldmVudCBxdWV1ZSBzaW5jZSB0aGUgY2FsbGVyIChiYi5ldmVudCkgZXhwZWN0cyB0bworICAgIGNhbGwgYSBzZW5kKCkgbWV0aG9kLCBidXQgb3VyIGFjdHVhbCBxdWV1ZSBvbmx5IGhhcyBwdXQoKQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBxdWV1ZSk6CisgICAgICAgIHNlbGYucXVldWUgPSBxdWV1ZQorCisgICAgZGVmIHNlbmQoc2VsZiwgZXZlbnQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnF1ZXVlLnB1dChldmVudCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6CisgICAgICAgICAgICBwcmludCgiRXZlbnRBZGFwdGVyIHB1a2VkOiAlcyIgJSBzdHIoZXJyKSkKKworCitjbGFzcyBQcm9jZXNzU2VydmVyKFByb2Nlc3MsIEJhc2VJbXBsU2VydmVyKToKKyAgICBwcm9maWxlX2ZpbGVuYW1lID0gInByb2ZpbGUubG9nIgorICAgIHByb2ZpbGVfcHJvY2Vzc2VkX2ZpbGVuYW1lID0gInByb2ZpbGUubG9nLnByb2Nlc3NlZCIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kX2NoYW5uZWwsIGV2ZW50X3F1ZXVlLCBmZWF0dXJlbGlzdCk6CisgICAgICAgIEJhc2VJbXBsU2VydmVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIFByb2Nlc3MuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jb21tYW5kX2NoYW5uZWwgPSBjb21tYW5kX2NoYW5uZWwKKyAgICAgICAgc2VsZi5ldmVudF9xdWV1ZSA9IGV2ZW50X3F1ZXVlCisgICAgICAgIHNlbGYuZXZlbnQgPSBFdmVudEFkYXB0ZXIoZXZlbnRfcXVldWUpCisgICAgICAgIHNlbGYuZmVhdHVyZWxpc3QgPSBmZWF0dXJlbGlzdAorICAgICAgICBzZWxmLnF1aXQgPSBGYWxzZQorCisgICAgICAgIHNlbGYucXVpdGluLCBzZWxmLnF1aXRvdXQgPSBQaXBlKCkKKyAgICAgICAgc2VsZi5ldmVudF9oYW5kbGUgPSBtdWx0aXByb2Nlc3NpbmcuVmFsdWUoImkiKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgZm9yIGV2ZW50IGluIGJiLmV2ZW50LnVpX3F1ZXVlOgorICAgICAgICAgICAgc2VsZi5ldmVudF9xdWV1ZS5wdXQoZXZlbnQpCisgICAgICAgIHNlbGYuZXZlbnRfaGFuZGxlLnZhbHVlID0gYmIuZXZlbnQucmVnaXN0ZXJfVUlIaGFuZGxlcihzZWxmLCBUcnVlKQorCisgICAgICAgIGJiLmNvb2tlci5zZXJ2ZXJfbWFpbihzZWxmLmNvb2tlciwgc2VsZi5tYWluKQorCisgICAgZGVmIG1haW4oc2VsZik6CisgICAgICAgICMgSWdub3JlIFNJR0lOVCB3aXRoaW4gdGhlIHNlcnZlciwgYXMgYWxsIFNJR0lOVCBoYW5kbGluZyBpcyBkb25lIGJ5CisgICAgICAgICMgdGhlIFVJIGFuZCBjb21tdW5pY2F0ZWQgdG8gdXMKKyAgICAgICAgc2VsZi5xdWl0aW4uY2xvc2UoKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQorICAgICAgICB3aGlsZSBub3Qgc2VsZi5xdWl0OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHNlbGYuY29tbWFuZF9jaGFubmVsLnBvbGwoKToKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IHNlbGYuY29tbWFuZF9jaGFubmVsLnJlY3YoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoY29tbWFuZCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnF1aXRvdXQucG9sbCgpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnF1aXRvdXQucmVjdigpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucXVpdCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgIHNlbGYuaWRsZV9jb21tYW5kcyguMSwgW3NlbGYuY29tbWFuZF9jaGFubmVsLCBzZWxmLnF1aXRvdXRdKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdSdW5uaW5nIGNvbW1hbmQgJXMnLCBjb21tYW5kKQorCisgICAgICAgIHNlbGYuZXZlbnRfcXVldWUuY2xvc2UoKQorICAgICAgICBiYi5ldmVudC51bnJlZ2lzdGVyX1VJSGhhbmRsZXIoc2VsZi5ldmVudF9oYW5kbGUudmFsdWUpCisgICAgICAgIHNlbGYuY29tbWFuZF9jaGFubmVsLmNsb3NlKCkKKyAgICAgICAgc2VsZi5jb29rZXIuc2h1dGRvd24oVHJ1ZSkKKyAgICAgICAgc2VsZi5xdWl0b3V0LmNsb3NlKCkKKworICAgIGRlZiBpZGxlX2NvbW1hbmRzKHNlbGYsIGRlbGF5LCBmZHM9Tm9uZSk6CisgICAgICAgIG5leHRzbGVlcCA9IGRlbGF5CisgICAgICAgIGlmIG5vdCBmZHM6CisgICAgICAgICAgICBmZHMgPSBbXQorCisgICAgICAgIGZvciBmdW5jdGlvbiwgZGF0YSBpbiBzZWxmLl9pZGxlZnVucy5pdGVtcygpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHZhbCA9IGZ1bmN0aW9uKHNlbGYsIGRhdGEsIEZhbHNlKQorICAgICAgICAgICAgICAgIGlmIHJldHZhbCBpcyBGYWxzZToKKyAgICAgICAgICAgICAgICAgICAgZGVsIHNlbGYuX2lkbGVmdW5zW2Z1bmN0aW9uXQorICAgICAgICAgICAgICAgICAgICBuZXh0c2xlZXAgPSBOb25lCisgICAgICAgICAgICAgICAgZWxpZiByZXR2YWwgaXMgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgbmV4dHNsZWVwID0gTm9uZQorICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShyZXR2YWwsIGZsb2F0KToKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA8IG5leHRzbGVlcCk6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0c2xlZXAgPSByZXR2YWwKKyAgICAgICAgICAgICAgICBlbGlmIG5leHRzbGVlcCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZkcyA9IGZkcyArIHJldHZhbAorICAgICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4YywgYmIuQkJIYW5kbGVkRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignUnVubmluZyBpZGxlIGZ1bmN0aW9uJykKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5faWRsZWZ1bnNbZnVuY3Rpb25dCisgICAgICAgICAgICAgICAgc2VsZi5xdWl0ID0gVHJ1ZQorCisgICAgICAgIGlmIG5leHRzbGVlcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoZmRzLFtdLFtdLG5leHRzbGVlcCkKKworICAgIGRlZiBydW5Db21tYW5kKHNlbGYsIGNvbW1hbmQpOgorICAgICAgICAiIiIKKyAgICAgICAgUnVuIGEgY29va2VyIGNvbW1hbmQgb24gdGhlIHNlcnZlcgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5jb21tYW5kX2NoYW5uZWwuc2VuZChzZWxmLmNvb2tlci5jb21tYW5kLnJ1bkNvbW1hbmQoY29tbWFuZCkpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5xdWl0aW4uc2VuZCgicXVpdCIpCisgICAgICAgIHNlbGYucXVpdGluLmNsb3NlKCkKKworY2xhc3MgQml0QmFrZVByb2Nlc3NTZXJ2ZXJDb25uZWN0aW9uKEJpdEJha2VCYXNlU2VydmVyQ29ubmVjdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlckltcGwsIHVpX2NoYW5uZWwsIGV2ZW50X3F1ZXVlKToKKyAgICAgICAgc2VsZi5wcm9jc2VydmVyID0gc2VydmVySW1wbAorICAgICAgICBzZWxmLnVpX2NoYW5uZWwgPSB1aV9jaGFubmVsCisgICAgICAgIHNlbGYuZXZlbnRfcXVldWUgPSBldmVudF9xdWV1ZQorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBTZXJ2ZXJDb21tdW5pY2F0b3Ioc2VsZi51aV9jaGFubmVsLCBzZWxmLnByb2NzZXJ2ZXIuZXZlbnRfaGFuZGxlLCBzZWxmLnByb2NzZXJ2ZXIpCisgICAgICAgIHNlbGYuZXZlbnRzID0gc2VsZi5ldmVudF9xdWV1ZQorICAgICAgICBzZWxmLnRlcm1pbmF0ZWQgPSBGYWxzZQorCisgICAgZGVmIHNpZ3Rlcm1fdGVybWluYXRlKHNlbGYpOgorICAgICAgICBiYi5lcnJvcigiVUkgcmVjZWl2ZWQgU0lHVEVSTSIpCisgICAgICAgIHNlbGYudGVybWluYXRlKCkKKworICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYudGVybWluYXRlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLnRlcm1pbmF0ZWQgPSBUcnVlCisgICAgICAgIGRlZiBmbHVzaGV2ZW50cygpOgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGV2ZW50ID0gc2VsZi5ldmVudF9xdWV1ZS5nZXQoYmxvY2s9RmFsc2UpCisgICAgICAgICAgICAgICAgZXhjZXB0IChFbXB0eSwgSU9FcnJvcik6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgbG9nZ2luZy5Mb2dSZWNvcmQpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaGFuZGxlKGV2ZW50KQorCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgc2lnbmFsLlNJR19JR04pCisgICAgICAgIHNlbGYucHJvY3NlcnZlci5zdG9wKCkKKworICAgICAgICB3aGlsZSBzZWxmLnByb2NzZXJ2ZXIuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIGZsdXNoZXZlbnRzKCkKKyAgICAgICAgICAgIHNlbGYucHJvY3NlcnZlci5qb2luKDAuMSkKKworICAgICAgICBzZWxmLnVpX2NoYW5uZWwuY2xvc2UoKQorICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlLmNsb3NlKCkKKyAgICAgICAgc2VsZi5ldmVudF9xdWV1ZS5zZXRleGl0KCkKKworIyBXcmFwIFF1ZXVlIHRvIHByb3ZpZGUgQVBJIHdoaWNoIGlzbid0IHNlcnZlciBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYworY2xhc3MgUHJvY2Vzc0V2ZW50UXVldWUobXVsdGlwcm9jZXNzaW5nLnF1ZXVlcy5RdWV1ZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemUpOgorICAgICAgICBtdWx0aXByb2Nlc3NpbmcucXVldWVzLlF1ZXVlLl9faW5pdF9fKHNlbGYsIG1heHNpemUpCisgICAgICAgIHNlbGYuZXhpdCA9IEZhbHNlCisKKyAgICBkZWYgc2V0ZXhpdChzZWxmKToKKyAgICAgICAgc2VsZi5leGl0ID0gVHJ1ZQorCisgICAgZGVmIHdhaXRFdmVudChzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgaWYgc2VsZi5leGl0OgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHNlbGYuc2VydmVyLmlzX2FsaXZlKCk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRleGl0KCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0KFRydWUsIHRpbWVvdXQpCisgICAgICAgIGV4Y2VwdCBFbXB0eToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2V0RXZlbnQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNlcnZlci5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0ZXhpdCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldChGYWxzZSkKKyAgICAgICAgZXhjZXB0IEVtcHR5OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBCaXRCYWtlU2VydmVyKEJpdEJha2VCYXNlU2VydmVyKToKKyAgICBkZWYgaW5pdFNlcnZlcihzZWxmKToKKyAgICAgICAgIyBlc3RhYmxpc2ggY29tbXVuaWNhdGlvbiBjaGFubmVscy4gIFdlIHVzZSBiaWRpcmVjdGlvbmFsIHBpcGVzIGZvcgorICAgICAgICAjIHVpIDwtLT4gc2VydmVyIGNvbW1hbmQvcmVzcG9uc2UgcGFpcnMKKyAgICAgICAgIyBhbmQgYSBxdWV1ZSBmb3Igc2VydmVyIC0+IHVpIGV2ZW50IG5vdGlmaWNhdGlvbnMKKyAgICAgICAgIworICAgICAgICBzZWxmLnVpX2NoYW5uZWwsIHNlbGYuc2VydmVyX2NoYW5uZWwgPSBQaXBlKCkKKyAgICAgICAgc2VsZi5ldmVudF9xdWV1ZSA9IFByb2Nlc3NFdmVudFF1ZXVlKDApCisgICAgICAgIHNlbGYuc2VydmVySW1wbCA9IFByb2Nlc3NTZXJ2ZXIoc2VsZi5zZXJ2ZXJfY2hhbm5lbCwgc2VsZi5ldmVudF9xdWV1ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5ldmVudF9xdWV1ZS5zZXJ2ZXIgPSBzZWxmLnNlcnZlckltcGwKKworICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVySW1wbC5zdGFydCgpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGVzdGFibGlzaENvbm5lY3Rpb24oc2VsZiwgZmVhdHVyZXNldCk6CisKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gQml0QmFrZVByb2Nlc3NTZXJ2ZXJDb25uZWN0aW9uKHNlbGYuc2VydmVySW1wbCwgc2VsZi51aV9jaGFubmVsLCBzZWxmLmV2ZW50X3F1ZXVlKQorCisgICAgICAgIF8sIGVycm9yID0gc2VsZi5jb25uZWN0aW9uLmNvbm5lY3Rpb24ucnVuQ29tbWFuZChbInNldEZlYXR1cmVzIiwgZmVhdHVyZXNldF0pCisgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gc2V0IHRoZSBjb29rZXIgdG8gdGhlIGNvcnJlY3QgZmVhdHVyZXNldDogJXMiICUgZXJyb3IpCisgICAgICAgICAgICByYWlzZSBCYXNlRXhjZXB0aW9uKGVycm9yKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBsYW1iZGEgaSwgczogc2VsZi5jb25uZWN0aW9uLnNpZ3Rlcm1fdGVybWluYXRlKCkpCisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL3htbHJwYy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL3htbHJwYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzY0N2MxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIveG1scnBjLnB5CkBAIC0wLDAgKzEsMzkyIEBACisjCisjIEJpdEJha2UgWE1MUlBDIFNlcnZlcgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA3ICBNaWNoYWVsICdNaWNrZXknIExhdWVyCisjIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDggIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisiIiIKKyAgICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGFuIHhtbHJwYyBzZXJ2ZXIgZm9yIEJpdEJha2UuCisKKyAgICBVc2UgdGhpcyBieSBkZXJpdmluZyBhIGNsYXNzIGZyb20gQml0QmFrZVhNTFJQQ1NlcnZlciBhbmQgdGhlbiBhZGRpbmcKKyAgICBtZXRob2RzIHdoaWNoIHlvdSB3YW50IHRvICJleHBvcnQiIHZpYSBYTUxSUEMuIElmIHRoZSBtZXRob2RzIGhhdmUgdGhlCisgICAgcHJlZml4IHhtbHJwY18sIHRoZW4gcmVnaXN0ZXJpbmcgdGhvc2UgZnVuY3Rpb24gd2lsbCBoYXBwZW4gYXV0b21hdGljYWxseSwKKyAgICBpZiBub3QsIHlvdSBuZWVkIHRvIGNhbGwgcmVnaXN0ZXJfZnVuY3Rpb24uCisKKyAgICBVc2UgcmVnaXN0ZXJfaWRsZV9mdW5jdGlvbigpIHRvIGFkZCBhIGZ1bmN0aW9uIHdoaWNoIHRoZSB4bWxycGMgc2VydmVyCisgICAgY2FsbHMgZnJvbSB3aXRoaW4gc2VydmVyX2ZvcmV2ZXIgd2hlbiBubyByZXF1ZXN0cyBhcmUgcGVuZGluZy4gTWFrZSBzdXJlCisgICAgdGhhdCB0aG9zZSBmdW5jdGlvbnMgYXJlIG5vbi1ibG9ja2luZyBvciBlbHNlIHlvdSB3aWxsIGludHJvZHVjZSBsYXRlbmN5CisgICAgaW4gdGhlIHNlcnZlcidzIG1haW4gbG9vcC4KKyIiIgorCitpbXBvcnQgYmIKK2ltcG9ydCB4bWxycGNsaWIsIHN5cworZnJvbSBiYiBpbXBvcnQgZGFlbW9uaXplCitmcm9tIGJiLnVpIGltcG9ydCB1aWV2ZW50CitpbXBvcnQgaGFzaGxpYiwgdGltZQoraW1wb3J0IHNvY2tldAoraW1wb3J0IG9zLCBzaWduYWwKK2ltcG9ydCB0aHJlYWRpbmcKK3RyeToKKyAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgcGlja2xlCisKK0RFQlVHID0gRmFsc2UKKworZnJvbSBTaW1wbGVYTUxSUENTZXJ2ZXIgaW1wb3J0IFNpbXBsZVhNTFJQQ1NlcnZlciwgU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIKK2ltcG9ydCBpbnNwZWN0LCBzZWxlY3QsIGh0dHBsaWIKKworZnJvbSAuIGltcG9ydCBCaXRCYWtlQmFzZVNlcnZlciwgQml0QmFrZUJhc2VTZXJ2ZXJDb25uZWN0aW9uLCBCYXNlSW1wbFNlcnZlcgorCitjbGFzcyBCQlRyYW5zcG9ydCh4bWxycGNsaWIuVHJhbnNwb3J0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGltZW91dCk6CisgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uX3Rva2VuID0gTm9uZQorICAgICAgICB4bWxycGNsaWIuVHJhbnNwb3J0Ll9faW5pdF9fKHNlbGYpCisKKyAgICAjIE1vZGlmaWVkIGZyb20gZGVmYXVsdCB0byBwYXNzIHRpbWVvdXQgdG8gSFRUUENvbm5lY3Rpb24KKyAgICBkZWYgbWFrZV9jb25uZWN0aW9uKHNlbGYsIGhvc3QpOgorICAgICAgICAjcmV0dXJuIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24gaWYgcG9zc2libGUuICBUaGlzIGFsbG93cworICAgICAgICAjSFRUUC8xLjEga2VlcC1hbGl2ZS4KKyAgICAgICAgaWYgc2VsZi5fY29ubmVjdGlvbiBhbmQgaG9zdCA9PSBzZWxmLl9jb25uZWN0aW9uWzBdOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Nvbm5lY3Rpb25bMV0KKworICAgICAgICAjIGNyZWF0ZSBhIEhUVFAgY29ubmVjdGlvbiBvYmplY3QgZnJvbSBhIGhvc3QgZGVzY3JpcHRvcgorICAgICAgICBjaG9zdCwgc2VsZi5fZXh0cmFfaGVhZGVycywgeDUwOSA9IHNlbGYuZ2V0X2hvc3RfaW5mbyhob3N0KQorICAgICAgICAjc3RvcmUgdGhlIGhvc3QgYXJndW1lbnQgYWxvbmcgd2l0aCB0aGUgY29ubmVjdGlvbiBvYmplY3QKKyAgICAgICAgc2VsZi5fY29ubmVjdGlvbiA9IGhvc3QsIGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oY2hvc3QsIHRpbWVvdXQ9c2VsZi50aW1lb3V0KQorICAgICAgICByZXR1cm4gc2VsZi5fY29ubmVjdGlvblsxXQorCisgICAgZGVmIHNldF9jb25uZWN0aW9uX3Rva2VuKHNlbGYsIHRva2VuKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uX3Rva2VuID0gdG9rZW4KKworICAgIGRlZiBzZW5kX2NvbnRlbnQoc2VsZiwgaCwgYm9keSk6CisgICAgICAgIGlmIHNlbGYuY29ubmVjdGlvbl90b2tlbjoKKyAgICAgICAgICAgIGgucHV0aGVhZGVyKCJCaXRiYWtlLXRva2VuIiwgc2VsZi5jb25uZWN0aW9uX3Rva2VuKQorICAgICAgICB4bWxycGNsaWIuVHJhbnNwb3J0LnNlbmRfY29udGVudChzZWxmLCBoLCBib2R5KQorCitkZWYgX2NyZWF0ZV9zZXJ2ZXIoaG9zdCwgcG9ydCwgdGltZW91dCA9IDYwKToKKyAgICB0ID0gQkJUcmFuc3BvcnQodGltZW91dCkKKyAgICBzID0geG1scnBjbGliLlNlcnZlclByb3h5KCJodHRwOi8vJXM6JWQvIiAlIChob3N0LCBwb3J0KSwgdHJhbnNwb3J0PXQsIGFsbG93X25vbmU9VHJ1ZSkKKyAgICByZXR1cm4gcywgdAorCitjbGFzcyBCaXRCYWtlU2VydmVyQ29tbWFuZHMoKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIpOgorICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlcgorICAgICAgICBzZWxmLmhhc19jbGllbnQgPSBGYWxzZQorCisgICAgZGVmIHJlZ2lzdGVyRXZlbnRIYW5kbGVyKHNlbGYsIGhvc3QsIHBvcnQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVnaXN0ZXIgYSByZW1vdGUgVUkgRXZlbnQgSGFuZGxlcgorICAgICAgICAiIiIKKyAgICAgICAgcywgdCA9IF9jcmVhdGVfc2VydmVyKGhvc3QsIHBvcnQpCisKKyAgICAgICAgIyB3ZSBkb24ndCBhbGxvdyBjb25uZWN0aW9ucyBpZiB0aGUgY29va2VyIGlzIHJ1bm5pbmcKKyAgICAgICAgaWYgKHNlbGYuY29va2VyLnN0YXRlIGluIFtiYi5jb29rZXIuc3RhdGUucGFyc2luZywgYmIuY29va2VyLnN0YXRlLnJ1bm5pbmddKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgc2VsZi5ldmVudF9oYW5kbGUgPSBiYi5ldmVudC5yZWdpc3Rlcl9VSUhoYW5kbGVyKHMsIFRydWUpCisgICAgICAgIHJldHVybiBzZWxmLmV2ZW50X2hhbmRsZQorCisgICAgZGVmIHVucmVnaXN0ZXJFdmVudEhhbmRsZXIoc2VsZiwgaGFuZGxlck51bSk6CisgICAgICAgICIiIgorICAgICAgICBVbnJlZ2lzdGVyIGEgcmVtb3RlIFVJIEV2ZW50IEhhbmRsZXIKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBiYi5ldmVudC51bnJlZ2lzdGVyX1VJSGhhbmRsZXIoaGFuZGxlck51bSkKKworICAgIGRlZiBydW5Db21tYW5kKHNlbGYsIGNvbW1hbmQpOgorICAgICAgICAiIiIKKyAgICAgICAgUnVuIGEgY29va2VyIGNvbW1hbmQgb24gdGhlIHNlcnZlcgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuY29va2VyLmNvbW1hbmQucnVuQ29tbWFuZChjb21tYW5kLCBzZWxmLnNlcnZlci5yZWFkb25seSkKKworICAgIGRlZiBnZXRFdmVudEhhbmRsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZXZlbnRfaGFuZGxlCisKKyAgICBkZWYgdGVybWluYXRlU2VydmVyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVHJpZ2dlciB0aGUgc2VydmVyIHRvIHF1aXQKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc2VydmVyLnF1aXQgPSBUcnVlCisgICAgICAgIHByaW50KCJTZXJ2ZXIgKGNvb2tlcikgZXhpdGluZyIpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGFkZENsaWVudChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5oYXNfY2xpZW50OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgdG9rZW4gPSBoYXNobGliLm1kNShzdHIodGltZS50aW1lKCkpKS5oZXhkaWdlc3QoKQorICAgICAgICBzZWxmLnNlcnZlci5zZXRfY29ubmVjdGlvbl90b2tlbih0b2tlbikKKyAgICAgICAgc2VsZi5oYXNfY2xpZW50ID0gVHJ1ZQorICAgICAgICByZXR1cm4gdG9rZW4KKworICAgIGRlZiByZW1vdmVDbGllbnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaGFzX2NsaWVudDoKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnNldF9jb25uZWN0aW9uX3Rva2VuKE5vbmUpCisgICAgICAgICAgICBzZWxmLmhhc19jbGllbnQgPSBGYWxzZQorICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIuc2luZ2xlX3VzZToKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5xdWl0ID0gVHJ1ZQorCisjIFRoaXMgcmVxdWVzdCBoYW5kbGVyIGNoZWNrcyBpZiB0aGUgcmVxdWVzdCBoYXMgYSAiQml0YmFrZS10b2tlbiIgaGVhZGVyCisjIGZpZWxkICh0aGlzIGNvbWVzIGZyb20gdGhlIGNsaWVudCBzaWRlKSBhbmQgY29tcGFyZXMgaXQgd2l0aCBpdHMgaW50ZXJuYWwKKyMgIkJpdGJha2UtdG9rZW4iIGZpZWxkICh0aGlzIGNvbWVzIGZyb20gdGhlIHNlcnZlcikuIElmIHRoZSB0d28gYXJlIG5vdAorIyBlcXVhbCwgaXQgaXMgYXNzdW1lZCB0aGF0IGEgY2xpZW50IGlzIHRyeWluZyB0byBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIKKyMgd2hpbGUgYW5vdGhlciBjbGllbnQgaXMgY29ubmVjdGVkIHRvIHRoZSBzZXJ2ZXIuIEluIHRoaXMgY2FzZSwgYSA1MDMgZXJyb3IKKyMgKCJzZXJ2aWNlIHVuYXZhaWxhYmxlIikgaXMgcmV0dXJuZWQgdG8gdGhlIGNsaWVudC4KK2NsYXNzIEJpdEJha2VYTUxSUENSZXF1ZXN0SGFuZGxlcihTaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzLCBzZXJ2ZXIpOgorICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlcgorICAgICAgICBTaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlci5fX2luaXRfXyhzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcywgc2VydmVyKQorCisgICAgZGVmIGRvX1BPU1Qoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlbW90ZV90b2tlbiA9IHNlbGYuaGVhZGVyc1siQml0YmFrZS10b2tlbiJdCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJlbW90ZV90b2tlbiA9IE5vbmUKKyAgICAgICAgaWYgcmVtb3RlX3Rva2VuICE9IHNlbGYuc2VydmVyLmNvbm5lY3Rpb25fdG9rZW4gYW5kIHJlbW90ZV90b2tlbiAhPSAib2JzZXJ2ZXIiOgorICAgICAgICAgICAgc2VsZi5yZXBvcnRfNTAzKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHJlbW90ZV90b2tlbiA9PSAib2JzZXJ2ZXIiOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnJlYWRvbmx5ID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5yZWFkb25seSA9IEZhbHNlCisgICAgICAgICAgICBTaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlci5kb19QT1NUKHNlbGYpCisKKyAgICBkZWYgcmVwb3J0XzUwMyhzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDUwMykKKyAgICAgICAgcmVzcG9uc2UgPSAnTm8gbW9yZSBjbGllbnQgYWxsb3dlZCcKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC10eXBlIiwgInRleHQvcGxhaW4iKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIHN0cihsZW4ocmVzcG9uc2UpKSkKKyAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAgICAgIHNlbGYud2ZpbGUud3JpdGUocmVzcG9uc2UpCisKKworY2xhc3MgWE1MUlBDUHJveHlTZXJ2ZXIoQmFzZUltcGxTZXJ2ZXIpOgorICAgICIiIiBub3QgYSByZWFsIHdvcmtpbmcgc2VydmVyLCBidXQgYSBzdHViIGZvciBhIHByb3h5IHNlcnZlciBjb25uZWN0aW9uCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCk6CisgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorCitjbGFzcyBYTUxSUENTZXJ2ZXIoU2ltcGxlWE1MUlBDU2VydmVyLCBCYXNlSW1wbFNlcnZlcik6CisgICAgIyByZW1vdmUgdGhpcyB3aGVuIHlvdSdyZSBkb25lIHdpdGggZGVidWdnaW5nCisgICAgIyBhbGxvd19yZXVzZV9hZGRyZXNzID0gVHJ1ZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGludGVyZmFjZSk6CisgICAgICAgICIiIgorICAgICAgICBDb25zdHJ1Y3RvcgorICAgICAgICAiIiIKKyAgICAgICAgQmFzZUltcGxTZXJ2ZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgaWYgKGludGVyZmFjZVsxXSA9PSAwKTogICAgICMgYW5vbnltb3VzIHBvcnQsIG5vdCBnZXR0aW5nIHJldXNlZAorICAgICAgICAgICAgc2VsZi5zaW5nbGVfdXNlID0gVHJ1ZQorICAgICAgICAjIFVzZSBhdXRvIHBvcnQgY29uZmlndXJhdGlvbgorICAgICAgICBpZiAoaW50ZXJmYWNlWzFdID09IC0xKToKKyAgICAgICAgICAgIGludGVyZmFjZSA9IChpbnRlcmZhY2VbMF0sIDApCisgICAgICAgIFNpbXBsZVhNTFJQQ1NlcnZlci5fX2luaXRfXyhzZWxmLCBpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGFuZGxlcj1CaXRCYWtlWE1MUlBDUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dSZXF1ZXN0cz1GYWxzZSwgYWxsb3dfbm9uZT1UcnVlKQorICAgICAgICBzZWxmLmhvc3QsIHNlbGYucG9ydCA9IHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKCkKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uX3Rva2VuID0gTm9uZQorICAgICAgICAjc2VsZi5yZWdpc3Rlcl9pbnRyb3NwZWN0aW9uX2Z1bmN0aW9ucygpCisgICAgICAgIHNlbGYuY29tbWFuZHMgPSBCaXRCYWtlU2VydmVyQ29tbWFuZHMoc2VsZikKKyAgICAgICAgc2VsZi5hdXRvcmVnaXN0ZXJfYWxsX2Z1bmN0aW9ucyhzZWxmLmNvbW1hbmRzLCAiIikKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UgPSBpbnRlcmZhY2UKKyAgICAgICAgc2VsZi5zaW5nbGVfdXNlID0gRmFsc2UKKworICAgIGRlZiBhZGRjb29rZXIoc2VsZiwgY29va2VyKToKKyAgICAgICAgQmFzZUltcGxTZXJ2ZXIuYWRkY29va2VyKHNlbGYsIGNvb2tlcikKKyAgICAgICAgc2VsZi5jb21tYW5kcy5jb29rZXIgPSBjb29rZXIKKworICAgIGRlZiBhdXRvcmVnaXN0ZXJfYWxsX2Z1bmN0aW9ucyhzZWxmLCBjb250ZXh0LCBwcmVmaXgpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29udmVuaWVuY2UgbWV0aG9kIGZvciByZWdpc3RlcmluZyBhbGwgZnVuY3Rpb25zIGluIHRoZSBzY29wZQorICAgICAgICBvZiB0aGlzIGNsYXNzIHRoYXQgc3RhcnQgd2l0aCBhIGNvbW1vbiBwcmVmaXgKKyAgICAgICAgIiIiCisgICAgICAgIG1ldGhvZGxpc3QgPSBpbnNwZWN0LmdldG1lbWJlcnMoY29udGV4dCwgaW5zcGVjdC5pc21ldGhvZCkKKyAgICAgICAgZm9yIG5hbWUsIG1ldGhvZCBpbiBtZXRob2RsaXN0OgorICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgICAgICAgICAgc2VsZi5yZWdpc3Rlcl9mdW5jdGlvbihtZXRob2QsIG5hbWVbbGVuKHByZWZpeCk6XSkKKworCisgICAgZGVmIHNlcnZlX2ZvcmV2ZXIoc2VsZik6CisgICAgICAgICMgU3RhcnQgdGhlIGFjdHVhbCBYTUxSUEMgc2VydmVyCisgICAgICAgIGJiLmNvb2tlci5zZXJ2ZXJfbWFpbihzZWxmLmNvb2tlciwgc2VsZi5fc2VydmVfZm9yZXZlcikKKworICAgIGRlZiBfc2VydmVfZm9yZXZlcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFNlcnZlIFJlcXVlc3RzLiBPdmVybG9hZGVkIHRvIGhvbm9yIGEgcXVpdCBjb21tYW5kCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnF1aXQgPSBGYWxzZQorICAgICAgICB3aGlsZSBub3Qgc2VsZi5xdWl0OgorICAgICAgICAgICAgZmRzID0gW3NlbGZdCisgICAgICAgICAgICBuZXh0c2xlZXAgPSAwLjEKKyAgICAgICAgICAgIGZvciBmdW5jdGlvbiwgZGF0YSBpbiBzZWxmLl9pZGxlZnVucy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHJldHZhbCA9IE5vbmUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IGZ1bmN0aW9uKHNlbGYsIGRhdGEsIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBpZiByZXR2YWwgaXMgRmFsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgc2VsZi5faWRsZWZ1bnNbZnVuY3Rpb25dCisgICAgICAgICAgICAgICAgICAgIGVsaWYgcmV0dmFsIGlzIFRydWU6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0c2xlZXAgPSAwCisgICAgICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShyZXR2YWwsIGZsb2F0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPCBuZXh0c2xlZXApOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRzbGVlcCA9IHJldHZhbAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZmRzID0gZmRzICsgcmV0dmFsCisgICAgICAgICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgICAgICAgICBpZiByZXR2YWwgPT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIGZ1bmN0aW9uIGV4ZWN1dGUgZmFpbGVkOyBkZWxldGUgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9pZGxlZnVuc1tmdW5jdGlvbl0KKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBzb2NrdGltZW91dCA9IHNlbGYuc29ja2V0LmdldHRpbWVvdXQoKSBvciBuZXh0c2xlZXAKKyAgICAgICAgICAgIHNvY2t0aW1lb3V0ID0gbWluKHNvY2t0aW1lb3V0LCBuZXh0c2xlZXApCisgICAgICAgICAgICAjIE1pcnJvciB3aGF0IEJhc2VTZXJ2ZXIgaGFuZGxlX3JlcXVlc3Qgd291bGQgZG8KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmZF9zZXRzID0gc2VsZWN0LnNlbGVjdChmZHMsIFtdLCBbXSwgc29ja3RpbWVvdXQpCisgICAgICAgICAgICAgICAgaWYgZmRfc2V0c1swXSBhbmQgc2VsZiBpbiBmZF9zZXRzWzBdOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfcmVxdWVzdF9ub2Jsb2NrKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICMgd2UgaWdub3JlIGludGVycnVwdGVkIGNhbGxzCisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgVGVsbCBpZGxlIGZ1bmN0aW9ucyB3ZSdyZSBleGl0aW5nCisgICAgICAgIGZvciBmdW5jdGlvbiwgZGF0YSBpbiBzZWxmLl9pZGxlZnVucy5pdGVtcygpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHZhbCA9IGZ1bmN0aW9uKHNlbGYsIGRhdGEsIFRydWUpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLnNlcnZlcl9jbG9zZSgpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIHNldF9jb25uZWN0aW9uX3Rva2VuKHNlbGYsIHRva2VuKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uX3Rva2VuID0gdG9rZW4KKworY2xhc3MgQml0QmFrZVhNTFJQQ1NlcnZlckNvbm5lY3Rpb24oQml0QmFrZUJhc2VTZXJ2ZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVySW1wbCwgY2xpZW50aW5mbz0oImxvY2FsaG9zdCIsIDApLCBvYnNlcnZlcl9vbmx5ID0gRmFsc2UsIGZlYXR1cmVzZXQgPSBOb25lKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uLCBzZWxmLnRyYW5zcG9ydCA9IF9jcmVhdGVfc2VydmVyKHNlcnZlckltcGwuaG9zdCwgc2VydmVySW1wbC5wb3J0KQorICAgICAgICBzZWxmLmNsaWVudGluZm8gPSBjbGllbnRpbmZvCisgICAgICAgIHNlbGYuc2VydmVySW1wbCA9IHNlcnZlckltcGwKKyAgICAgICAgc2VsZi5vYnNlcnZlcl9vbmx5ID0gb2JzZXJ2ZXJfb25seQorICAgICAgICBpZiBmZWF0dXJlc2V0OgorICAgICAgICAgICAgc2VsZi5mZWF0dXJlc2V0ID0gZmVhdHVyZXNldAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mZWF0dXJlc2V0ID0gW10KKworICAgIGRlZiBjb25uZWN0KHNlbGYsIHRva2VuID0gTm9uZSk6CisgICAgICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLm9ic2VydmVyX29ubHk6CisgICAgICAgICAgICAgICAgdG9rZW4gPSAib2JzZXJ2ZXIiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRva2VuID0gc2VsZi5jb25uZWN0aW9uLmFkZENsaWVudCgpCisKKyAgICAgICAgaWYgdG9rZW4gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgc2VsZi50cmFuc3BvcnQuc2V0X2Nvbm5lY3Rpb25fdG9rZW4odG9rZW4pCisKKyAgICAgICAgc2VsZi5ldmVudHMgPSB1aWV2ZW50LkJCVUlFdmVudFF1ZXVlKHNlbGYuY29ubmVjdGlvbiwgc2VsZi5jbGllbnRpbmZvKQorICAgICAgICBmb3IgZXZlbnQgaW4gYmIuZXZlbnQudWlfcXVldWU6CisgICAgICAgICAgICBzZWxmLmV2ZW50cy5xdWV1ZV9ldmVudChldmVudCkKKworICAgICAgICBfLCBlcnJvciA9IHNlbGYuY29ubmVjdGlvbi5ydW5Db21tYW5kKFsic2V0RmVhdHVyZXMiLCBzZWxmLmZlYXR1cmVzZXRdKQorICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICMgZGlzY29ubmVjdCB0aGUgY2xpZW50LCB3ZSBjYW4ndCBtYWtlIHRoZSBzZXRGZWF0dXJlIHdvcmsKKyAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbi5yZW1vdmVDbGllbnQoKQorICAgICAgICAgICAgIyBubyBuZWVkIHRvIGxvZyBpdCBoZXJlLCB0aGUgZXJyb3Igc2hhbGwgYmUgc2VudCB0byB0aGUgY2xpZW50CisgICAgICAgICAgICByYWlzZSBCYXNlRXhjZXB0aW9uKGVycm9yKQorCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgcmVtb3ZlQ2xpZW50KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5vYnNlcnZlcl9vbmx5OgorICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uLnJlbW92ZUNsaWVudCgpCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICAjIERvbid0IHdhaXQgZm9yIHNlcnZlciBpbmRlZmluaXRlbHkKKyAgICAgICAgaW1wb3J0IHNvY2tldAorICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoMikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5ldmVudHMuc3lzdGVtX3F1aXQoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbi5yZW1vdmVDbGllbnQoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKK2NsYXNzIEJpdEJha2VTZXJ2ZXIoQml0QmFrZUJhc2VTZXJ2ZXIpOgorICAgIGRlZiBpbml0U2VydmVyKHNlbGYsIGludGVyZmFjZSA9ICgibG9jYWxob3N0IiwgMCkpOgorICAgICAgICBzZWxmLmludGVyZmFjZSA9IGludGVyZmFjZQorICAgICAgICBzZWxmLnNlcnZlckltcGwgPSBYTUxSUENTZXJ2ZXIoaW50ZXJmYWNlKQorCisgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgZGFlbW9uaXplLmNyZWF0ZURhZW1vbihzZWxmLnNlcnZlckltcGwuc2VydmVfZm9yZXZlciwgImJpdGJha2UtY29va2VyZGFlbW9uLmxvZyIpCisgICAgICAgIGRlbCBzZWxmLmNvb2tlcgorCisgICAgZGVmIGVzdGFibGlzaENvbm5lY3Rpb24oc2VsZiwgZmVhdHVyZXNldCk6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IEJpdEJha2VYTUxSUENTZXJ2ZXJDb25uZWN0aW9uKHNlbGYuc2VydmVySW1wbCwgc2VsZi5pbnRlcmZhY2UsIEZhbHNlLCBmZWF0dXJlc2V0KQorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLmNvbm5lY3QoKQorCisgICAgZGVmIHNldF9jb25uZWN0aW9uX3Rva2VuKHNlbGYsIHRva2VuKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uLnRyYW5zcG9ydC5zZXRfY29ubmVjdGlvbl90b2tlbih0b2tlbikKKworY2xhc3MgQml0QmFrZVhNTFJQQ0NsaWVudChCaXRCYWtlQmFzZVNlcnZlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb2JzZXJ2ZXJfb25seSA9IEZhbHNlLCB0b2tlbiA9IE5vbmUpOgorICAgICAgICBzZWxmLnRva2VuID0gdG9rZW4KKworICAgICAgICBzZWxmLm9ic2VydmVyX29ubHkgPSBvYnNlcnZlcl9vbmx5CisgICAgICAgICMgaWYgd2UgbmVlZCBleHRyYSBjYWNoZXMsIGp1c3QgdGVsbCB0aGUgc2VydmVyIHRvIGxvYWQgdGhlbSBhbGwKKyAgICAgICAgcGFzcworCisgICAgZGVmIHNhdmVDb25uZWN0aW9uRGV0YWlscyhzZWxmLCByZW1vdGUpOgorICAgICAgICBzZWxmLnJlbW90ZSA9IHJlbW90ZQorCisgICAgZGVmIGVzdGFibGlzaENvbm5lY3Rpb24oc2VsZiwgZmVhdHVyZXNldCk6CisgICAgICAgICMgVGhlIGZvcm1hdCBvZiAicmVtb3RlIiBtdXN0IGJlICJzZXJ2ZXI6cG9ydCIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgW2hvc3QsIHBvcnRdID0gc2VsZi5yZW1vdGUuc3BsaXQoIjoiKQorICAgICAgICAgICAgcG9ydCA9IGludChwb3J0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi53YXJuKCJGYWlsZWQgdG8gcmVhZCByZW1vdGUgZGVmaW5pdGlvbiAoJXMpIiAlIHN0cihlKSkKKyAgICAgICAgICAgIHJhaXNlIGUKKworICAgICAgICAjIFdlIG5lZWQgb3VyIElQIGZvciB0aGUgc2VydmVyIGNvbm5lY3Rpb24uIFdlIGdldCB0aGUgSVAKKyAgICAgICAgIyBieSB0cnlpbmcgdG8gY29ubmVjdCB3aXRoIHRoZSBzZXJ2ZXIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQorICAgICAgICAgICAgcy5jb25uZWN0KChob3N0LCBwb3J0KSkKKyAgICAgICAgICAgIGlwID0gcy5nZXRzb2NrbmFtZSgpWzBdCisgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgYmIud2FybigiQ291bGQgbm90IGNyZWF0ZSBzb2NrZXQgZm9yICVzOiVzICglcykiICUgKGhvc3QsIHBvcnQsIHN0cihlKSkpCisgICAgICAgICAgICByYWlzZSBlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuc2VydmVySW1wbCA9IFhNTFJQQ1Byb3h5U2VydmVyKGhvc3QsIHBvcnQpCisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBCaXRCYWtlWE1MUlBDU2VydmVyQ29ubmVjdGlvbihzZWxmLnNlcnZlckltcGwsIChpcCwgMCksIHNlbGYub2JzZXJ2ZXJfb25seSwgZmVhdHVyZXNldCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uY29ubmVjdChzZWxmLnRva2VuKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi53YXJuKCJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIgYXQgJXM6JXMgKCVzKSIgJSAoaG9zdCwgcG9ydCwgc3RyKGUpKSkKKyAgICAgICAgICAgIHJhaXNlIGUKKworICAgIGRlZiBlbmRTZXNzaW9uKHNlbGYpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24ucmVtb3ZlQ2xpZW50KCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2hlbGwucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3NoZWxsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZDhkNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3NoZWxsLnB5CkBAIC0wLDAgKzEsODIwIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QFZhbmlsbGUuZGU+CisjIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFZhbmlsbGUgTWVkaWEKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBUaGFua3MgdG86CisjICogSG9sZ2VyIEZyZXl0aGVyIDx6ZWNrZUBoYW5kaGVsZHMub3JnPgorIyAqIEp1c3RpbiBQYXRyaW4gPHBhcGVyY3JhbmVAcmV2ZXJzZWZvbGQuY29tPgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIiIiCitCaXRCYWtlIFNoZWxsCisKK0lERUFTOgorICAgICogbGlzdCBkZWZpbmVkIHRhc2tzIHBlciBwYWNrYWdlCisgICAgKiBsaXN0IGNsYXNzZXMKKyAgICAqIHRvZ2dsZSBmb3JjZQorICAgICogY29tbWFuZCB0byByZXBhcnNlIGp1c3Qgb25lIChvciBtb3JlKSBiYmZpbGUocykKKyAgICAqIGF1dG9tYXRpYyBjaGVjayBpZiByZXBhcnNpbmcgaXMgbmVjZXNzYXJ5IChpbm90aWZ5PykKKyAgICAqIGZyb250ZW5kIGZvciBiYiBmaWxlIG1hbmlwdWxhdGlvbgorICAgICogbW9yZSBzaGVsbC1saWtlIGZlYXR1cmVzOgorICAgICAgICAtIG91dHB1dCBjb250cm9sLCBpLmUuIHBpcGUgb3V0cHV0IGludG8gZ3JlcCwgc29ydCwgZXRjLgorICAgICAgICAtIGpvYiBjb250cm9sLCBpLmUuIGJyaW5nIHJ1bm5pbmcgY29tbWFuZHMgaW50byBiYWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kCisgICAgKiBzdGFydCBwYXJzaW5nIGluIGJhY2tncm91bmQgcmlnaHQgYWZ0ZXIgc3RhcnR1cAorICAgICogbmN1cnNlcyBpbnRlcmZhY2UKKworUFJPQkxFTVM6CisgICAgKiBmb3JjZSBkb2Vzbid0IGFsd2F5cyB3b3JrCisgICAgKiByZWFkbGluZSBjb21wbGV0aW9uIGZvciBjb21tYW5kcyB3aXRoIG1vcmUgdGhhbiBvbmUgcGFyYW1ldGVycworCisiIiIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSW1wb3J0IGFuZCBzZXR1cCBnbG9iYWwgdmFyaWFibGVzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCit0cnk6CisgICAgc2V0CitleGNlcHQgTmFtZUVycm9yOgorICAgIGZyb20gc2V0cyBpbXBvcnQgU2V0IGFzIHNldAoraW1wb3J0IHN5cywgb3MsIHJlYWRsaW5lLCBzb2NrZXQsIGh0dHBsaWIsIHVybGxpYiwgY29tbWFuZHMsIHBvcGVuMiwgc2hsZXgsIFF1ZXVlLCBmbm1hdGNoCitmcm9tIGJiIGltcG9ydCBkYXRhLCBwYXJzZSwgYnVpbGQsIGNhY2hlLCB0YXNrZGF0YSwgcnVucXVldWUsIHByb3ZpZGVycyBhcyBQcm92aWRlcnMKKworX192ZXJzaW9uX18gPSAiMC41LjMuMSIKK19fY3JlZGl0c19fID0gIiIiQml0QmFrZSBTaGVsbCBWZXJzaW9uICVzIChDKSAyMDA1IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUBWYW5pbGxlLmRlPgorVHlwZSAnaGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24sIHByZXNzIENUUkwtRCB0byBleGl0LiIiIiAlIF9fdmVyc2lvbl9fCisKK2NtZHMgPSB7fQorbGVhdmVfbWFpbmxvb3AgPSBGYWxzZQorbGFzdF9leGNlcHRpb24gPSBOb25lCitjb29rZXIgPSBOb25lCitwYXJzZWQgPSBGYWxzZQorZGVidWcgPSBvcy5lbnZpcm9uLmdldCggIkJCU0hFTExfREVCVUciLCAiIiApCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENsYXNzIEJpdEJha2VTaGVsbENvbW1hbmRzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGFzcyBCaXRCYWtlU2hlbGxDb21tYW5kczoKKyAgICAiIiJUaGlzIGNsYXNzIGNvbnRhaW5zIHRoZSB2YWxpZCBjb21tYW5kcyBmb3IgdGhlIHNoZWxsIiIiCisKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIHNoZWxsICk6CisgICAgICAgICIiIlJlZ2lzdGVyIGFsbCB0aGUgY29tbWFuZHMiIiIKKyAgICAgICAgc2VsZi5fc2hlbGwgPSBzaGVsbAorICAgICAgICBmb3IgYXR0ciBpbiBCaXRCYWtlU2hlbGxDb21tYW5kcy5fX2RpY3RfXzoKKyAgICAgICAgICAgIGlmIG5vdCBhdHRyLnN0YXJ0c3dpdGgoICJfIiApOgorICAgICAgICAgICAgICAgIGlmIGF0dHIuZW5kc3dpdGgoICJfIiApOgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gYXR0cls6LTFdLmxvd2VyKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gYXR0cls6XS5sb3dlcigpCisgICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0ciggQml0QmFrZVNoZWxsQ29tbWFuZHMsIGF0dHIgKQorICAgICAgICAgICAgICAgIGRlYnVnT3V0KCAicmVnaXN0ZXJpbmcgY29tbWFuZCAnJXMnIiAlIGNvbW1hbmQgKQorICAgICAgICAgICAgICAgICMgc2NhbiBudW1iZXIgb2YgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgdXNhZ2UgPSBnZXRhdHRyKCBtZXRob2QsICJ1c2FnZSIsICIiICkKKyAgICAgICAgICAgICAgICBpZiB1c2FnZSAhPSAiPC4uLj4iOgorICAgICAgICAgICAgICAgICAgICBudW1BcmdzID0gbGVuKCB1c2FnZS5zcGxpdCgpICkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBudW1BcmdzID0gLTEKKyAgICAgICAgICAgICAgICBzaGVsbC5yZWdpc3RlckNvbW1hbmQoIGNvbW1hbmQsIG1ldGhvZCwgbnVtQXJncywgIiVzICVzIiAlICggY29tbWFuZCwgdXNhZ2UgKSwgbWV0aG9kLl9fZG9jX18gKQorCisgICAgZGVmIF9jaGVja1BhcnNlZCggc2VsZiApOgorICAgICAgICBpZiBub3QgcGFyc2VkOgorICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBUaGlzIGNvbW1hbmQgbmVlZHMgdG8gcGFyc2UgYmJmaWxlcy4uLiIpCisgICAgICAgICAgICBzZWxmLnBhcnNlKCBOb25lICkKKworICAgIGRlZiBfZmluZFByb3ZpZGVyKCBzZWxmLCBpdGVtICk6CisgICAgICAgIHNlbGYuX2NoZWNrUGFyc2VkKCkKKyAgICAgICAgIyBOZWVkIHRvIHVzZSB0YXNrRGF0YSBmb3IgdGhpcyBpbmZvcm1hdGlvbgorICAgICAgICBwcmVmZXJyZWQgPSBkYXRhLmdldFZhciggIlBSRUZFUlJFRF9QUk9WSURFUl8lcyIgJSBpdGVtLCBjb29rZXIuY29uZmlndXJhdGlvbi5kYXRhLCAxICkKKyAgICAgICAgaWYgbm90IHByZWZlcnJlZDogcHJlZmVycmVkID0gaXRlbQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsdiwgbGYsIHB2LCBwZiA9IFByb3ZpZGVycy5maW5kQmVzdFByb3ZpZGVyKHByZWZlcnJlZCwgY29va2VyLmNvbmZpZ3VyYXRpb24uZGF0YSwgY29va2VyLnN0YXR1cykKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgaWYgaXRlbSBpbiBjb29rZXIuc3RhdHVzLnByb3ZpZGVyczoKKyAgICAgICAgICAgICAgICBwZiA9IGNvb2tlci5zdGF0dXMucHJvdmlkZXJzW2l0ZW1dWzBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBmID0gTm9uZQorICAgICAgICByZXR1cm4gcGYKKworICAgIGRlZiBhbGlhcyggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIlJlZ2lzdGVyIGEgbmV3IG5hbWUgZm9yIGEgY29tbWFuZCIiIgorICAgICAgICBuZXcsIG9sZCA9IHBhcmFtcworICAgICAgICBpZiBub3Qgb2xkIGluIGNtZHM6CisgICAgICAgICAgICBwcmludCgiRVJST1I6IENvbW1hbmQgJyVzJyBub3Qga25vd24iICUgb2xkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kc1tuZXddID0gY21kc1tvbGRdCisgICAgICAgICAgICBwcmludCgiT0siKQorICAgIGFsaWFzLnVzYWdlID0gIjxhbGlhcz4gPGNvbW1hbmQ+IgorCisgICAgZGVmIGJ1ZmZlciggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkR1bXAgc3BlY2lmaWVkIG91dHB1dCBidWZmZXIiIiIKKyAgICAgICAgaW5kZXggPSBwYXJhbXNbMF0KKyAgICAgICAgcHJpbnQoc2VsZi5fc2hlbGwubXlvdXQuYnVmZmVyKCBpbnQoIGluZGV4ICkgKSkKKyAgICBidWZmZXIudXNhZ2UgPSAiPGluZGV4PiIKKworICAgIGRlZiBidWZmZXJzKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiU2hvdyB0aGUgYXZhaWxhYmxlIG91dHB1dCBidWZmZXJzIiIiCisgICAgICAgIGNvbW1hbmRzID0gc2VsZi5fc2hlbGwubXlvdXQuYnVmZmVyZWRDb21tYW5kcygpCisgICAgICAgIGlmIG5vdCBjb21tYW5kczoKKyAgICAgICAgICAgIHByaW50KCJTSEVMTDogTm8gYnVmZmVyZWQgY29tbWFuZHMgYXZhaWxhYmxlIHlldC4gU3RhcnQgZG9pbmcgc29tZXRoaW5nLiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiPSIqMzUsICJBdmFpbGFibGUgT3V0cHV0IEJ1ZmZlcnMiLCAiPSIqMjcpCisgICAgICAgICAgICBmb3IgaW5kZXgsIGNtZCBpbiBlbnVtZXJhdGUoIGNvbW1hbmRzICk6CisgICAgICAgICAgICAgICAgcHJpbnQoInwgJXMgJXMiICUgKCBzdHIoIGluZGV4ICkubGp1c3QoIDMgKSwgY21kICkpCisgICAgICAgICAgICBwcmludCgiPSIqODgpCisKKyAgICBkZWYgYnVpbGQoIHNlbGYsIHBhcmFtcywgY21kID0gImJ1aWxkIiApOgorICAgICAgICAiIiJCdWlsZCBhIHByb3ZpZGVlIiIiCisgICAgICAgIGdsb2JhbCBsYXN0X2V4Y2VwdGlvbgorICAgICAgICBnbG9iZXhwciA9IHBhcmFtc1swXQorICAgICAgICBzZWxmLl9jaGVja1BhcnNlZCgpCisgICAgICAgIG5hbWVzID0gZ2xvYmZpbHRlciggY29va2VyLnN0YXR1cy5wa2dfcG4sIGdsb2JleHByICkKKyAgICAgICAgaWYgbGVuKCBuYW1lcyApID09IDA6IG5hbWVzID0gWyBnbG9iZXhwciBdCisgICAgICAgIHByaW50KCJTSEVMTDogQnVpbGRpbmcgJXMiICUgJyAnLmpvaW4oIG5hbWVzICkpCisKKyAgICAgICAgdGQgPSB0YXNrZGF0YS5UYXNrRGF0YShjb29rZXIuY29uZmlndXJhdGlvbi5hYm9ydCkKKyAgICAgICAgbG9jYWxkYXRhID0gZGF0YS5jcmVhdGVDb3B5KGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEpCisgICAgICAgIGRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICBkYXRhLmV4cGFuZEtleXMobG9jYWxkYXRhKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhc2tzID0gW10KKyAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgICAgIHRkLmFkZF9wcm92aWRlcihsb2NhbGRhdGEsIGNvb2tlci5zdGF0dXMsIG5hbWUpCisgICAgICAgICAgICAgICAgcHJvdmlkZXJzID0gdGQuZ2V0X3Byb3ZpZGVyKG5hbWUpCisKKyAgICAgICAgICAgICAgICBpZiBsZW4ocHJvdmlkZXJzKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBQcm92aWRlcnMuTm9Qcm92aWRlcgorCisgICAgICAgICAgICAgICAgdGFza3MuYXBwZW5kKFtuYW1lLCAiZG9fJXMiICUgY21kXSkKKworICAgICAgICAgICAgdGQuYWRkX3VucmVzb2x2ZWQobG9jYWxkYXRhLCBjb29rZXIuc3RhdHVzKQorCisgICAgICAgICAgICBycSA9IHJ1bnF1ZXVlLlJ1blF1ZXVlKGNvb2tlciwgbG9jYWxkYXRhLCBjb29rZXIuc3RhdHVzLCB0ZCwgdGFza3MpCisgICAgICAgICAgICBycS5wcmVwYXJlX3J1bnF1ZXVlKCkKKyAgICAgICAgICAgIHJxLmV4ZWN1dGVfcnVucXVldWUoKQorCisgICAgICAgIGV4Y2VwdCBQcm92aWRlcnMuTm9Qcm92aWRlcjoKKyAgICAgICAgICAgIHByaW50KCJFUlJPUjogTm8gUHJvdmlkZXIiKQorICAgICAgICAgICAgbGFzdF9leGNlcHRpb24gPSBQcm92aWRlcnMuTm9Qcm92aWRlcgorCisgICAgICAgIGV4Y2VwdCBydW5xdWV1ZS5UYXNrRmFpbHVyZSBhcyBmbmlkczoKKyAgICAgICAgICAgIGxhc3RfZXhjZXB0aW9uID0gcnVucXVldWUuVGFza0ZhaWx1cmUKKworICAgICAgICBleGNlcHQgYnVpbGQuRnVuY0ZhaWxlZCBhcyBlOgorICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBDb3VsZG4ndCBidWlsZCAnJXMnIiAlIG5hbWVzKQorICAgICAgICAgICAgbGFzdF9leGNlcHRpb24gPSBlCisKKworICAgIGJ1aWxkLnVzYWdlID0gIjxwcm92aWRlZT4iCisKKyAgICBkZWYgY2xlYW4oIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJDbGVhbiBhIHByb3ZpZGVlIiIiCisgICAgICAgIHNlbGYuYnVpbGQoIHBhcmFtcywgImNsZWFuIiApCisgICAgY2xlYW4udXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBjb21waWxlKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRXhlY3V0ZSAnY29tcGlsZScgb24gYSBwcm92aWRlZSIiIgorICAgICAgICBzZWxmLmJ1aWxkKCBwYXJhbXMsICJjb21waWxlIiApCisgICAgY29tcGlsZS51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIGNvbmZpZ3VyZSggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkV4ZWN1dGUgJ2NvbmZpZ3VyZScgb24gYSBwcm92aWRlZSIiIgorICAgICAgICBzZWxmLmJ1aWxkKCBwYXJhbXMsICJjb25maWd1cmUiICkKKyAgICBjb25maWd1cmUudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBpbnN0YWxsKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRXhlY3V0ZSAnaW5zdGFsbCcgb24gYSBwcm92aWRlZSIiIgorICAgICAgICBzZWxmLmJ1aWxkKCBwYXJhbXMsICJpbnN0YWxsIiApCisgICAgaW5zdGFsbC51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIGVkaXQoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJDYWxsICRFRElUT1Igb24gYSBwcm92aWRlZSIiIgorICAgICAgICBuYW1lID0gcGFyYW1zWzBdCisgICAgICAgIGJiZmlsZSA9IHNlbGYuX2ZpbmRQcm92aWRlciggbmFtZSApCisgICAgICAgIGlmIGJiZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG9zLnN5c3RlbSggIiVzICVzIiAlICggb3MuZW52aXJvbi5nZXQoICJFRElUT1IiLCAidmkiICksIGJiZmlsZSApICkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJFUlJPUjogTm90aGluZyBwcm92aWRlcyAnJXMnIiAlIG5hbWUpCisgICAgZWRpdC51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIGVudmlyb25tZW50KCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRHVtcCBvdXQgdGhlIG91dGVyIEJpdEJha2UgZW52aXJvbm1lbnQiIiIKKyAgICAgICAgY29va2VyLnNob3dFbnZpcm9ubWVudCgpCisKKyAgICBkZWYgZXhpdF8oIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJMZWF2ZSB0aGUgQml0QmFrZSBTaGVsbCIiIgorICAgICAgICBkZWJ1Z091dCggInNldHRpbmcgbGVhdmVfbWFpbmxvb3AgdG8gdHJ1ZSIgKQorICAgICAgICBnbG9iYWwgbGVhdmVfbWFpbmxvb3AKKyAgICAgICAgbGVhdmVfbWFpbmxvb3AgPSBUcnVlCisKKyAgICBkZWYgZmV0Y2goIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJGZXRjaCBhIHByb3ZpZGVlIiIiCisgICAgICAgIHNlbGYuYnVpbGQoIHBhcmFtcywgImZldGNoIiApCisgICAgZmV0Y2gudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBmaWxlQnVpbGQoIHNlbGYsIHBhcmFtcywgY21kID0gImJ1aWxkIiApOgorICAgICAgICAiIiJQYXJzZSBhbmQgYnVpbGQgYSAuYmIgZmlsZSIiIgorICAgICAgICBnbG9iYWwgbGFzdF9leGNlcHRpb24KKyAgICAgICAgbmFtZSA9IHBhcmFtc1swXQorICAgICAgICBiZiA9IGNvbXBsZXRlRmlsZVBhdGgoIG5hbWUgKQorICAgICAgICBwcmludCgiU0hFTEw6IENhbGxpbmcgJyVzJyBvbiAnJXMnIiAlICggY21kLCBiZiApKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvb2tlci5idWlsZEZpbGUoYmYsIGNtZCkKKyAgICAgICAgZXhjZXB0IHBhcnNlLlBhcnNlRXJyb3I6CisgICAgICAgICAgICBwcmludCgiRVJST1I6IFVuYWJsZSB0byBvcGVuIG9yIHBhcnNlICclcyciICUgYmYpCisgICAgICAgIGV4Y2VwdCBidWlsZC5GdW5jRmFpbGVkIGFzIGU6CisgICAgICAgICAgICBwcmludCgiRVJST1I6IENvdWxkbid0IGJ1aWxkICclcyciICUgbmFtZSkKKyAgICAgICAgICAgIGxhc3RfZXhjZXB0aW9uID0gZQorCisgICAgZmlsZUJ1aWxkLnVzYWdlID0gIjxiYmZpbGU+IgorCisgICAgZGVmIGZpbGVDbGVhbiggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkNsZWFuIGEgLmJiIGZpbGUiIiIKKyAgICAgICAgc2VsZi5maWxlQnVpbGQoIHBhcmFtcywgImNsZWFuIiApCisgICAgZmlsZUNsZWFuLnVzYWdlID0gIjxiYmZpbGU+IgorCisgICAgZGVmIGZpbGVFZGl0KCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiQ2FsbCAkRURJVE9SIG9uIGEgLmJiIGZpbGUiIiIKKyAgICAgICAgbmFtZSA9IHBhcmFtc1swXQorICAgICAgICBvcy5zeXN0ZW0oICIlcyAlcyIgJSAoIG9zLmVudmlyb24uZ2V0KCAiRURJVE9SIiwgInZpIiApLCBjb21wbGV0ZUZpbGVQYXRoKCBuYW1lICkgKSApCisgICAgZmlsZUVkaXQudXNhZ2UgPSAiPGJiZmlsZT4iCisKKyAgICBkZWYgZmlsZVJlYnVpbGQoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJSZWJ1aWxkIChjbGVhbiAmIGJ1aWxkKSBhIC5iYiBmaWxlIiIiCisgICAgICAgIHNlbGYuZmlsZUJ1aWxkKCBwYXJhbXMsICJyZWJ1aWxkIiApCisgICAgZmlsZVJlYnVpbGQudXNhZ2UgPSAiPGJiZmlsZT4iCisKKyAgICBkZWYgZmlsZVJlcGFyc2UoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiIocmUpUGFyc2UgYSBiYiBmaWxlIiIiCisgICAgICAgIGJiZmlsZSA9IHBhcmFtc1swXQorICAgICAgICBwcmludCgiU0hFTEw6IFBhcnNpbmcgJyVzJyIgJSBiYmZpbGUpCisgICAgICAgIHBhcnNlLnVwZGF0ZV9tdGltZSggYmJmaWxlICkKKyAgICAgICAgY29va2VyLnBhcnNlci5yZXBhcnNlKGJiZmlsZSkKKyAgICAgICAgaWYgRmFsc2U6ICNmcm9tQ2FjaGU6CisgICAgICAgICAgICBwcmludCgiU0hFTEw6IEZpbGUgaGFzIG5vdCBiZWVuIHVwZGF0ZWQsIG5vdCByZXBhcnNpbmciKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBQYXJzZWQiKQorICAgIGZpbGVSZXBhcnNlLnVzYWdlID0gIjxiYmZpbGU+IgorCisgICAgZGVmIGFib3J0KCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiVG9nZ2xlIGFib3J0IHRhc2sgZXhlY3V0aW9uIGZsYWcgKHNlZSBiaXRiYWtlIC1rKSIiIgorICAgICAgICBjb29rZXIuY29uZmlndXJhdGlvbi5hYm9ydCA9IG5vdCBjb29rZXIuY29uZmlndXJhdGlvbi5hYm9ydAorICAgICAgICBwcmludCgiU0hFTEw6IEFib3J0IEZsYWcgaXMgbm93ICclcyciICUgcmVwciggY29va2VyLmNvbmZpZ3VyYXRpb24uYWJvcnQgKSkKKworICAgIGRlZiBmb3JjZSggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIlRvZ2dsZSBmb3JjZSB0YXNrIGV4ZWN1dGlvbiBmbGFnIChzZWUgYml0YmFrZSAtZikiIiIKKyAgICAgICAgY29va2VyLmNvbmZpZ3VyYXRpb24uZm9yY2UgPSBub3QgY29va2VyLmNvbmZpZ3VyYXRpb24uZm9yY2UKKyAgICAgICAgcHJpbnQoIlNIRUxMOiBGb3JjZSBGbGFnIGlzIG5vdyAnJXMnIiAlIHJlcHIoIGNvb2tlci5jb25maWd1cmF0aW9uLmZvcmNlICkpCisKKyAgICBkZWYgaGVscCggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIlNob3cgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgY29tbWFuZHMgYW5kIHRoZWlyIHB1cnBvc2UiIiIKKyAgICAgICAgcHJpbnQoIj0iKjMwLCAiQXZhaWxhYmxlIENvbW1hbmRzIiwgIj0iKjMwKQorICAgICAgICBmb3IgY21kIGluIHNvcnRlZChjbWRzKToKKyAgICAgICAgICAgIGZ1bmN0aW9uLCBudW1wYXJhbXMsIHVzYWdlLCBoZWxwdGV4dCA9IGNtZHNbY21kXQorICAgICAgICAgICAgcHJpbnQoInwgJXMgfCAlcyIgJSAodXNhZ2UubGp1c3QoMzApLCBoZWxwdGV4dCkpCisgICAgICAgIHByaW50KCI9Iio3OCkKKworICAgIGRlZiBsYXN0RXJyb3IoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJTaG93IHRoZSByZWFzb24gb3IgbG9nIHRoYXQgd2FzIHByb2R1Y2VkIGJ5IHRoZSBsYXN0IEJpdEJha2UgZXZlbnQgZXhjZXB0aW9uIiIiCisgICAgICAgIGlmIGxhc3RfZXhjZXB0aW9uIGlzIE5vbmU6CisgICAgICAgICAgICBwcmludCgiU0hFTEw6IE5vIEVycm9ycyB5ZXQgKFBoZXcpLi4uIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlYXNvbiwgZXZlbnQgPSBsYXN0X2V4Y2VwdGlvbi5hcmdzCisgICAgICAgICAgICBwcmludCgiU0hFTEw6IFJlYXNvbiBmb3IgdGhlIGxhc3QgZXJyb3I6ICclcyciICUgcmVhc29uKQorICAgICAgICAgICAgaWYgJzonIGluIHJlYXNvbjoKKyAgICAgICAgICAgICAgICBtc2csIGZpbGVuYW1lID0gcmVhc29uLnNwbGl0KCAnOicgKQorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3RyaXAoKQorICAgICAgICAgICAgICAgIHByaW50KCJTSEVMTDogRHVtcGluZyBsb2cgZmlsZSBmb3IgbGFzdCBlcnJvcjoiKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQob3BlbiggZmlsZW5hbWUgKS5yZWFkKCkpCisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJFUlJPUjogQ291bGRuJ3Qgb3BlbiAnJXMnIiAlIGZpbGVuYW1lKQorCisgICAgZGVmIG1hdGNoKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRHVtcCBhbGwgZmlsZXMgb3IgcHJvdmlkZXJzIG1hdGNoaW5nIGEgZ2xvYiBleHByZXNzaW9uIiIiCisgICAgICAgIHdoYXQsIGdsb2JleHByID0gcGFyYW1zCisgICAgICAgIGlmIHdoYXQgPT0gImZpbGVzIjoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrUGFyc2VkKCkKKyAgICAgICAgICAgIGZvciBrZXkgaW4gZ2xvYmZpbHRlciggY29va2VyLnN0YXR1cy5wa2dfZm4sIGdsb2JleHByICk6IHByaW50KGtleSkKKyAgICAgICAgZWxpZiB3aGF0ID09ICJwcm92aWRlcnMiOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tQYXJzZWQoKQorICAgICAgICAgICAgZm9yIGtleSBpbiBnbG9iZmlsdGVyKCBjb29rZXIuc3RhdHVzLnBrZ19wbiwgZ2xvYmV4cHIgKTogcHJpbnQoa2V5KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIlVzYWdlOiBtYXRjaCAlcyIgJSBzZWxmLnByaW50Xy51c2FnZSkKKyAgICBtYXRjaC51c2FnZSA9ICI8ZmlsZXN8cHJvdmlkZXJzPiA8Z2xvYj4iCisKKyAgICBkZWYgbmV3KCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IC5iYiBmaWxlIGFuZCBvcGVuIHRoZSBlZGl0b3IiIiIKKyAgICAgICAgZGlybmFtZSwgZmlsZW5hbWUgPSBwYXJhbXMKKyAgICAgICAgcGFja2FnZXMgPSAnLycuam9pbiggZGF0YS5nZXRWYXIoICJCQkZJTEVTIiwgY29va2VyLmNvbmZpZ3VyYXRpb24uZGF0YSwgMSApLnNwbGl0KCcvJylbOi0yXSApCisgICAgICAgIGZ1bGxkaXJuYW1lID0gIiVzLyVzIiAlICggcGFja2FnZXMsIGRpcm5hbWUgKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyggZnVsbGRpcm5hbWUgKToKKyAgICAgICAgICAgIHByaW50KCJTSEVMTDogQ3JlYXRpbmcgJyVzJyIgJSBmdWxsZGlybmFtZSkKKyAgICAgICAgICAgIG9zLm1rZGlyKCBmdWxsZGlybmFtZSApCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCBmdWxsZGlybmFtZSApIGFuZCBvcy5wYXRoLmlzZGlyKCBmdWxsZGlybmFtZSApOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoICIlcy8lcyIgJSAoIGZ1bGxkaXJuYW1lLCBmaWxlbmFtZSApICk6CisgICAgICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBFUlJPUjogJXMvJXMgYWxyZWFkeSBleGlzdHMiICUgKCBmdWxsZGlybmFtZSwgZmlsZW5hbWUgKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHByaW50KCJTSEVMTDogQ3JlYXRpbmcgJyVzLyVzJyIgJSAoIGZ1bGxkaXJuYW1lLCBmaWxlbmFtZSApKQorICAgICAgICAgICAgbmV3cGFja2FnZSA9IG9wZW4oICIlcy8lcyIgJSAoIGZ1bGxkaXJuYW1lLCBmaWxlbmFtZSApLCAidyIgKQorICAgICAgICAgICAgcHJpbnQoIiIiREVTQ1JJUFRJT04gPSAiIgorU0VDVElPTiA9ICIiCitBVVRIT1IgPSAiIgorSE9NRVBBR0UgPSAiIgorTUFJTlRBSU5FUiA9ICIiCitMSUNFTlNFID0gIkdQTCIKK1BSID0gInIwIgorCitTUkNfVVJJID0gIiIKKworI2luaGVyaXQgYmFzZQorCisjZG9fY29uZmlndXJlKCkgeworIworI30KKworI2RvX2NvbXBpbGUoKSB7CisjCisjfQorCisjZG9fc3RhZ2UoKSB7CisjCisjfQorCisjZG9faW5zdGFsbCgpIHsKKyMKKyN9CisiIiIsIGZpbGU9bmV3cGFja2FnZSkKKyAgICAgICAgICAgIG5ld3BhY2thZ2UuY2xvc2UoKQorICAgICAgICAgICAgb3Muc3lzdGVtKCAiJXMgJXMvJXMiICUgKCBvcy5lbnZpcm9uLmdldCggIkVESVRPUiIgKSwgZnVsbGRpcm5hbWUsIGZpbGVuYW1lICkgKQorICAgIG5ldy51c2FnZSA9ICI8ZGlyZWN0b3J5PiA8ZmlsZW5hbWU+IgorCisgICAgZGVmIHBhY2thZ2UoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJFeGVjdXRlICdwYWNrYWdlJyBvbiBhIHByb3ZpZGVlIiIiCisgICAgICAgIHNlbGYuYnVpbGQoIHBhcmFtcywgInBhY2thZ2UiICkKKyAgICBwYWNrYWdlLnVzYWdlID0gIjxwcm92aWRlZT4iCisKKyAgICBkZWYgcGFzdGVCaW4oIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJTZW5kIGEgY29tbWFuZCArIG91dHB1dCBidWZmZXIgdG8gdGhlIHBhc3RlYmluIGF0IGh0dHA6Ly9yYWZiLm5ldC9wYXN0ZSIiIgorICAgICAgICBpbmRleCA9IHBhcmFtc1swXQorICAgICAgICBjb250ZW50cyA9IHNlbGYuX3NoZWxsLm15b3V0LmJ1ZmZlciggaW50KCBpbmRleCApICkKKyAgICAgICAgc2VuZFRvUGFzdGViaW4oICJvdXRwdXQgb2YgIiArIHBhcmFtc1swXSwgY29udGVudHMgKQorICAgIHBhc3RlQmluLnVzYWdlID0gIjxpbmRleD4iCisKKyAgICBkZWYgcGFzdGVMb2coIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJTZW5kIHRoZSBsYXN0IGV2ZW50IGV4Y2VwdGlvbiBlcnJvciBsb2cgKGlmIHRoZXJlIGlzIG9uZSkgdG8gaHR0cDovL3JhZmIubmV0L3Bhc3RlIiIiCisgICAgICAgIGlmIGxhc3RfZXhjZXB0aW9uIGlzIE5vbmU6CisgICAgICAgICAgICBwcmludCgiU0hFTEw6IE5vIEVycm9ycyB5ZXQgKFBoZXcpLi4uIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlYXNvbiwgZXZlbnQgPSBsYXN0X2V4Y2VwdGlvbi5hcmdzCisgICAgICAgICAgICBwcmludCgiU0hFTEw6IFJlYXNvbiBmb3IgdGhlIGxhc3QgZXJyb3I6ICclcyciICUgcmVhc29uKQorICAgICAgICAgICAgaWYgJzonIGluIHJlYXNvbjoKKyAgICAgICAgICAgICAgICBtc2csIGZpbGVuYW1lID0gcmVhc29uLnNwbGl0KCAnOicgKQorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3RyaXAoKQorICAgICAgICAgICAgICAgIHByaW50KCJTSEVMTDogUGFzdGluZyBsb2cgZmlsZSB0byBwYXN0ZWJpbi4uLiIpCisKKyAgICAgICAgICAgICAgICBmaWxlID0gb3BlbiggZmlsZW5hbWUgKS5yZWFkKCkKKyAgICAgICAgICAgICAgICBzZW5kVG9QYXN0ZWJpbiggImNvbnRlbnRzIG9mICIgKyBmaWxlbmFtZSwgZmlsZSApCisKKyAgICBkZWYgcGF0Y2goIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJFeGVjdXRlICdwYXRjaCcgY29tbWFuZCBvbiBhIHByb3ZpZGVlIiIiCisgICAgICAgIHNlbGYuYnVpbGQoIHBhcmFtcywgInBhdGNoIiApCisgICAgcGF0Y2gudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBwYXJzZSggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIihSZS0pcGFyc2UgLmJiIGZpbGVzIGFuZCBjYWxjdWxhdGUgdGhlIGRlcGVuZGVuY3kgZ3JhcGgiIiIKKyAgICAgICAgY29va2VyLnN0YXR1cyA9IGNhY2hlLkNhY2hlRGF0YShjb29rZXIuY2FjaGVzX2FycmF5KQorICAgICAgICBpZ25vcmUgPSBkYXRhLmdldFZhcigiQVNTVU1FX1BST1ZJREVEIiwgY29va2VyLmNvbmZpZ3VyYXRpb24uZGF0YSwgMSkgb3IgIiIKKyAgICAgICAgY29va2VyLnN0YXR1cy5pZ25vcmVkX2RlcGVuZGVuY2llcyA9IHNldCggaWdub3JlLnNwbGl0KCkgKQorICAgICAgICBjb29rZXIuaGFuZGxlQ29sbGVjdGlvbnMoIGRhdGEuZ2V0VmFyKCJCQkZJTEVfQ09MTEVDVElPTlMiLCBjb29rZXIuY29uZmlndXJhdGlvbi5kYXRhLCAxKSApCisKKyAgICAgICAgKGZpbGVsaXN0LCBtYXNrZWQpID0gY29va2VyLmNvbGxlY3RfYmJmaWxlcygpCisgICAgICAgIGNvb2tlci5wYXJzZV9iYmZpbGVzKGZpbGVsaXN0LCBtYXNrZWQsIGNvb2tlci5teVByb2dyZXNzQ2FsbGJhY2spCisgICAgICAgIGNvb2tlci5idWlsZERlcGdyYXBoKCkKKyAgICAgICAgZ2xvYmFsIHBhcnNlZAorICAgICAgICBwYXJzZWQgPSBUcnVlCisgICAgICAgIHByaW50KCkKKworICAgIGRlZiByZXBhcnNlKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiKHJlKVBhcnNlIGEgcHJvdmlkZWUncyBiYiBmaWxlIiIiCisgICAgICAgIGJiZmlsZSA9IHNlbGYuX2ZpbmRQcm92aWRlciggcGFyYW1zWzBdICkKKyAgICAgICAgaWYgYmJmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBGb3VuZCBiYmZpbGUgJyVzJyBmb3IgJyVzJyIgJSAoIGJiZmlsZSwgcGFyYW1zWzBdICkpCisgICAgICAgICAgICBzZWxmLmZpbGVSZXBhcnNlKCBbIGJiZmlsZSBdICkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJFUlJPUjogTm90aGluZyBwcm92aWRlcyAnJXMnIiAlIHBhcmFtc1swXSkKKyAgICByZXBhcnNlLnVzYWdlID0gIjxwcm92aWRlZT4iCisKKyAgICBkZWYgZ2V0dmFyKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRHVtcCB0aGUgY29udGVudHMgb2YgYW4gb3V0ZXIgQml0QmFrZSBlbnZpcm9ubWVudCB2YXJpYWJsZSIiIgorICAgICAgICB2YXIgPSBwYXJhbXNbMF0KKyAgICAgICAgdmFsdWUgPSBkYXRhLmdldFZhciggdmFyLCBjb29rZXIuY29uZmlndXJhdGlvbi5kYXRhLCAxICkKKyAgICAgICAgcHJpbnQodmFsdWUpCisgICAgZ2V0dmFyLnVzYWdlID0gIjx2YXJpYWJsZT4iCisKKyAgICBkZWYgcGVlayggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkR1bXAgY29udGVudHMgb2YgdmFyaWFibGUgZGVmaW5lZCBpbiBwcm92aWRlZSdzIG1ldGFkYXRhIiIiCisgICAgICAgIG5hbWUsIHZhciA9IHBhcmFtcworICAgICAgICBiYmZpbGUgPSBzZWxmLl9maW5kUHJvdmlkZXIoIG5hbWUgKQorICAgICAgICBpZiBiYmZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0aGVfZGF0YSA9IGNhY2hlLkNhY2hlLmxvYWREYXRhRnVsbChiYmZpbGUsIGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEpCisgICAgICAgICAgICB2YWx1ZSA9IHRoZV9kYXRhLmdldFZhciggdmFyLCAxICkKKyAgICAgICAgICAgIHByaW50KHZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBOb3RoaW5nIHByb3ZpZGVzICclcyciICUgbmFtZSkKKyAgICBwZWVrLnVzYWdlID0gIjxwcm92aWRlZT4gPHZhcmlhYmxlPiIKKworICAgIGRlZiBwb2tlKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiU2V0IGNvbnRlbnRzIG9mIHZhcmlhYmxlIGRlZmluZWQgaW4gcHJvdmlkZWUncyBtZXRhZGF0YSIiIgorICAgICAgICBuYW1lLCB2YXIsIHZhbHVlID0gcGFyYW1zCisgICAgICAgIGJiZmlsZSA9IHNlbGYuX2ZpbmRQcm92aWRlciggbmFtZSApCisgICAgICAgIGlmIGJiZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHByaW50KCJFUlJPUjogU29ycnksIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBjdXJyZW50bHkgYnJva2VuIikKKyAgICAgICAgICAgICNkID0gY29va2VyLnBrZ2RhdGFbYmJmaWxlXQorICAgICAgICAgICAgI2RhdGEuc2V0VmFyKCB2YXIsIHZhbHVlLCBkICkKKworICAgICAgICAgICAgIyBtYXJrIHRoZSBjaGFuZ2Ugc2VtaSBwZXJzaXN0YW50CisgICAgICAgICAgICAjY29va2VyLnBrZ2RhdGEuc2V0RGlydHkoYmJmaWxlLCBkKQorICAgICAgICAgICAgI3ByaW50ICJPSyIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJFUlJPUjogTm90aGluZyBwcm92aWRlcyAnJXMnIiAlIG5hbWUpCisgICAgcG9rZS51c2FnZSA9ICI8cHJvdmlkZWU+IDx2YXJpYWJsZT4gPHZhbHVlPiIKKworICAgIGRlZiBwcmludF8oIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJEdW1wIGFsbCBmaWxlcyBvciBwcm92aWRlcnMiIiIKKyAgICAgICAgd2hhdCA9IHBhcmFtc1swXQorICAgICAgICBpZiB3aGF0ID09ICJmaWxlcyI6CisgICAgICAgICAgICBzZWxmLl9jaGVja1BhcnNlZCgpCisgICAgICAgICAgICBmb3Iga2V5IGluIGNvb2tlci5zdGF0dXMucGtnX2ZuOiBwcmludChrZXkpCisgICAgICAgIGVsaWYgd2hhdCA9PSAicHJvdmlkZXJzIjoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrUGFyc2VkKCkKKyAgICAgICAgICAgIGZvciBrZXkgaW4gY29va2VyLnN0YXR1cy5wcm92aWRlcnM6IHByaW50KGtleSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJVc2FnZTogcHJpbnQgJXMiICUgc2VsZi5wcmludF8udXNhZ2UpCisgICAgcHJpbnRfLnVzYWdlID0gIjxmaWxlc3xwcm92aWRlcnM+IgorCisgICAgZGVmIHB5dGhvbiggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkVudGVyIHRoZSBleHBlcnQgbW9kZSAtIGFuIGludGVyYWN0aXZlIEJpdEJha2UgUHl0aG9uIEludGVycHJldGVyIiIiCisgICAgICAgIHN5cy5wczEgPSAiRVhQRVJUIEJCPj4+ICIKKyAgICAgICAgc3lzLnBzMiA9ICJFWFBFUlQgQkIuLi4gIgorICAgICAgICBpbXBvcnQgY29kZQorICAgICAgICBpbnRlcnByZXRlciA9IGNvZGUuSW50ZXJhY3RpdmVDb25zb2xlKCBkaWN0KCBnbG9iYWxzKCkgKSApCisgICAgICAgIGludGVycHJldGVyLmludGVyYWN0KCAiU0hFTEw6IEV4cGVydCBNb2RlIC0gQml0QmFrZSBQeXRob24gJXNcblR5cGUgJ2hlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLCBwcmVzcyBDVFJMLUQgdG8gc3dpdGNoIGJhY2sgdG8gQkJTSEVMTC4iICUgc3lzLnZlcnNpb24gKQorCisgICAgZGVmIHNob3dkYXRhKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRXhlY3V0ZSAnc2hvd2RhdGEnIG9uIGEgcHJvdmlkZWUiIiIKKyAgICAgICAgY29va2VyLnNob3dFbnZpcm9ubWVudChOb25lLCBwYXJhbXMpCisgICAgc2hvd2RhdGEudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBzZXRWYXIoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJTZXQgYW4gb3V0ZXIgQml0QmFrZSBlbnZpcm9ubWVudCB2YXJpYWJsZSIiIgorICAgICAgICB2YXIsIHZhbHVlID0gcGFyYW1zCisgICAgICAgIGRhdGEuc2V0VmFyKCB2YXIsIHZhbHVlLCBjb29rZXIuY29uZmlndXJhdGlvbi5kYXRhICkKKyAgICAgICAgcHJpbnQoIk9LIikKKyAgICBzZXRWYXIudXNhZ2UgPSAiPHZhcmlhYmxlPiA8dmFsdWU+IgorCisgICAgZGVmIHJlYnVpbGQoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJDbGVhbiBhbmQgcmVidWlsZCBhIC5iYiBmaWxlIG9yIGEgcHJvdmlkZWUiIiIKKyAgICAgICAgc2VsZi5idWlsZCggcGFyYW1zLCAiY2xlYW4iICkKKyAgICAgICAgc2VsZi5idWlsZCggcGFyYW1zLCAiYnVpbGQiICkKKyAgICByZWJ1aWxkLnVzYWdlID0gIjxwcm92aWRlZT4iCisKKyAgICBkZWYgc2hlbGwoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJFeGVjdXRlIGEgc2hlbGwgY29tbWFuZCBhbmQgZHVtcCB0aGUgb3V0cHV0IiIiCisgICAgICAgIGlmIHBhcmFtcyAhPSAiIjoKKyAgICAgICAgICAgIHByaW50KGNvbW1hbmRzLmdldG91dHB1dCggIiAiLmpvaW4oIHBhcmFtcyApICkpCisgICAgc2hlbGwudXNhZ2UgPSAiPC4uLj4iCisKKyAgICBkZWYgc3RhZ2UoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJFeGVjdXRlICdzdGFnZScgb24gYSBwcm92aWRlZSIiIgorICAgICAgICBzZWxmLmJ1aWxkKCBwYXJhbXMsICJwb3B1bGF0ZV9zdGFnaW5nIiApCisgICAgc3RhZ2UudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBzdGF0dXMoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiI8anVzdCBmb3IgdGVzdGluZz4iIiIKKyAgICAgICAgcHJpbnQoIi0iICogNzgpCisgICAgICAgIHByaW50KCJidWlsZGluZyBsaXN0ID0gJyVzJyIgJSBjb29rZXIuYnVpbGRpbmdfbGlzdCkKKyAgICAgICAgcHJpbnQoImJ1aWxkIHBhdGggPSAnJXMnIiAlIGNvb2tlci5idWlsZF9wYXRoKQorICAgICAgICBwcmludCgiY29uc2lkZXJfbXNnc19jYWNoZSA9ICclcyciICUgY29va2VyLmNvbnNpZGVyX21zZ3NfY2FjaGUpCisgICAgICAgIHByaW50KCJidWlsZCBzdGF0cyA9ICclcyciICUgY29va2VyLnN0YXRzKQorICAgICAgICBpZiBsYXN0X2V4Y2VwdGlvbiBpcyBub3QgTm9uZTogcHJpbnQoImxhc3RfZXhjZXB0aW9uID0gJyVzJyIgJSByZXByKCBsYXN0X2V4Y2VwdGlvbi5hcmdzICkpCisgICAgICAgIHByaW50KCJtZW1vcnkgb3V0cHV0IGNvbnRlbnRzID0gJyVzJyIgJSBzZWxmLl9zaGVsbC5teW91dC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3QoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiI8anVzdCBmb3IgdGVzdGluZz4iIiIKKyAgICAgICAgcHJpbnQoInRlc3RDb21tYW5kIGNhbGxlZCB3aXRoICclcyciICUgcGFyYW1zKQorCisgICAgZGVmIHVucGFjayggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkV4ZWN1dGUgJ3VucGFjaycgb24gYSBwcm92aWRlZSIiIgorICAgICAgICBzZWxmLmJ1aWxkKCBwYXJhbXMsICJ1bnBhY2siICkKKyAgICB1bnBhY2sudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiB3aGljaCggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkNvbXB1dGVzIHRoZSBwcm92aWRlcnMgZm9yIGEgZ2l2ZW4gcHJvdmlkZWUiIiIKKyAgICAgICAgIyBOZWVkIHRvIHVzZSB0YXNrRGF0YSBmb3IgdGhpcyBpbmZvcm1hdGlvbgorICAgICAgICBpdGVtID0gcGFyYW1zWzBdCisKKyAgICAgICAgc2VsZi5fY2hlY2tQYXJzZWQoKQorCisgICAgICAgIHByZWZlcnJlZCA9IGRhdGEuZ2V0VmFyKCAiUFJFRkVSUkVEX1BST1ZJREVSXyVzIiAlIGl0ZW0sIGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEsIDEgKQorICAgICAgICBpZiBub3QgcHJlZmVycmVkOiBwcmVmZXJyZWQgPSBpdGVtCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbHYsIGxmLCBwdiwgcGYgPSBQcm92aWRlcnMuZmluZEJlc3RQcm92aWRlcihwcmVmZXJyZWQsIGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEsIGNvb2tlci5zdGF0dXMpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGx2LCBsZiwgcHYsIHBmID0gKE5vbmUsKSo0CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvdmlkZXJzID0gY29va2VyLnN0YXR1cy5wcm92aWRlcnNbaXRlbV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBFUlJPUjogTm90aGluZyBwcm92aWRlcyIsIHByZWZlcnJlZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBwcm92aWRlciBpbiBwcm92aWRlcnM6CisgICAgICAgICAgICAgICAgaWYgcHJvdmlkZXIgPT0gcGY6IHByb3ZpZGVyID0gIiAoKioqKSAlcyIgJSBwcm92aWRlcgorICAgICAgICAgICAgICAgIGVsc2U6ICAgICAgICAgICAgICBwcm92aWRlciA9ICIgICAgICAgJXMiICUgcHJvdmlkZXIKKyAgICAgICAgICAgICAgICBwcmludChwcm92aWRlcikKKyAgICB3aGljaC51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb21tb24gaGVscGVyIGZ1bmN0aW9ucworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmIGNvbXBsZXRlRmlsZVBhdGgoIGJiZmlsZSApOgorICAgICIiIkdldCB0aGUgY29tcGxldGUgYmJmaWxlIHBhdGgiIiIKKyAgICBpZiBub3QgY29va2VyLnN0YXR1czogcmV0dXJuIGJiZmlsZQorICAgIGlmIG5vdCBjb29rZXIuc3RhdHVzLnBrZ19mbjogcmV0dXJuIGJiZmlsZQorICAgIGZvciBrZXkgaW4gY29va2VyLnN0YXR1cy5wa2dfZm46CisgICAgICAgIGlmIGtleS5lbmRzd2l0aCggYmJmaWxlICk6CisgICAgICAgICAgICByZXR1cm4ga2V5CisgICAgcmV0dXJuIGJiZmlsZQorCitkZWYgc2VuZFRvUGFzdGViaW4oIGRlc2MsIGNvbnRlbnQgKToKKyAgICAiIiJTZW5kIGNvbnRlbnQgdG8gaHR0cDovL29lLnBhc3RlYmluLmNvbSIiIgorICAgIG15ZGF0YSA9IHt9CisgICAgbXlkYXRhWyJsYW5nIl0gPSAiUGxhaW4gVGV4dCIKKyAgICBteWRhdGFbImRlc2MiXSA9IGRlc2MKKyAgICBteWRhdGFbImN2dF90YWJzIl0gPSAiTm8iCisgICAgbXlkYXRhWyJuaWNrIl0gPSAiJXNAJXMiICUgKCBvcy5lbnZpcm9uLmdldCggIlVTRVIiLCAidW5rbm93biIgKSwgc29ja2V0LmdldGhvc3RuYW1lKCkgb3IgInVua25vd24iICkKKyAgICBteWRhdGFbInRleHQiXSA9IGNvbnRlbnQKKyAgICBwYXJhbXMgPSB1cmxsaWIudXJsZW5jb2RlKCBteWRhdGEgKQorICAgIGhlYWRlcnMgPSB7IkNvbnRlbnQtdHlwZSI6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCAiQWNjZXB0IjogInRleHQvcGxhaW4ifQorCisgICAgaG9zdCA9ICJyYWZiLm5ldCIKKyAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbiggIiVzOjgwIiAlIGhvc3QgKQorICAgIGNvbm4ucmVxdWVzdCgiUE9TVCIsICIvcGFzdGUvcGFzdGUucGhwIiwgcGFyYW1zLCBoZWFkZXJzICkKKworICAgIHJlc3BvbnNlID0gY29ubi5nZXRyZXNwb25zZSgpCisgICAgY29ubi5jbG9zZSgpCisKKyAgICBpZiByZXNwb25zZS5zdGF0dXMgPT0gMzAyOgorICAgICAgICBsb2NhdGlvbiA9IHJlc3BvbnNlLmdldGhlYWRlciggImxvY2F0aW9uIiApIG9yICJ1bmtub3duIgorICAgICAgICBwcmludCgiU0hFTEw6IFBhc3RlZCB0byBodHRwOi8vJXMlcyIgJSAoIGhvc3QsIGxvY2F0aW9uICkpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIkVSUk9SOiAlcyAlcyIgJSAoIHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UucmVhc29uICkpCisKK2RlZiBjb21wbGV0ZXIoIHRleHQsIHN0YXRlICk6CisgICAgIiIiUmV0dXJuIGEgcG9zc2libGUgcmVhZGxpbmUgY29tcGxldGlvbiIiIgorICAgIGRlYnVnT3V0KCAiY29tcGxldGVyIGNhbGxlZCB3aXRoIHRleHQ9JyVzJywgc3RhdGU9JyVkJyIgJSAoIHRleHQsIHN0YXRlICkgKQorCisgICAgaWYgc3RhdGUgPT0gMDoKKyAgICAgICAgbGluZSA9IHJlYWRsaW5lLmdldF9saW5lX2J1ZmZlcigpCisgICAgICAgIGlmICIgIiBpbiBsaW5lOgorICAgICAgICAgICAgbGluZSA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgIyB3ZSBhcmUgaW4gc2Vjb25kIChvciBtb3JlKSBhcmd1bWVudAorICAgICAgICAgICAgaWYgbGluZVswXSBpbiBjbWRzIGFuZCBoYXNhdHRyKCBjbWRzW2xpbmVbMF1dWzBdLCAidXNhZ2UiICk6ICMga25vd24gY29tbWFuZCBhbmQgdXNhZ2UKKyAgICAgICAgICAgICAgICB1ID0gZ2V0YXR0ciggY21kc1tsaW5lWzBdXVswXSwgInVzYWdlIiApLnNwbGl0KClbMF0KKyAgICAgICAgICAgICAgICBpZiB1ID09ICI8dmFyaWFibGU+IjoKKyAgICAgICAgICAgICAgICAgICAgYWxsbWF0Y2hlcyA9IGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEua2V5cygpCisgICAgICAgICAgICAgICAgZWxpZiB1ID09ICI8YmJmaWxlPiI6CisgICAgICAgICAgICAgICAgICAgIGlmIGNvb2tlci5zdGF0dXMucGtnX2ZuIGlzIE5vbmU6IGFsbG1hdGNoZXMgPSBbICIoTm8gTWF0Y2hlcyBBdmFpbGFibGUuIFBhcnNlZCB5ZXQ/KSIgXQorICAgICAgICAgICAgICAgICAgICBlbHNlOiBhbGxtYXRjaGVzID0gWyB4LnNwbGl0KCIvIilbLTFdIGZvciB4IGluIGNvb2tlci5zdGF0dXMucGtnX2ZuIF0KKyAgICAgICAgICAgICAgICBlbGlmIHUgPT0gIjxwcm92aWRlZT4iOgorICAgICAgICAgICAgICAgICAgICBpZiBjb29rZXIuc3RhdHVzLnBrZ19mbiBpcyBOb25lOiBhbGxtYXRjaGVzID0gWyAiKE5vIE1hdGNoZXMgQXZhaWxhYmxlLiBQYXJzZWQgeWV0PykiIF0KKyAgICAgICAgICAgICAgICAgICAgZWxzZTogYWxsbWF0Y2hlcyA9IGNvb2tlci5zdGF0dXMucHJvdmlkZXJzLml0ZXJrZXlzKCkKKyAgICAgICAgICAgICAgICBlbHNlOiBhbGxtYXRjaGVzID0gWyAiKE5vIHRhYiBjb21wbGV0aW9uIGF2YWlsYWJsZSBmb3IgdGhpcyBjb21tYW5kKSIgXQorICAgICAgICAgICAgZWxzZTogYWxsbWF0Y2hlcyA9IFsgIihObyB0YWIgY29tcGxldGlvbiBhdmFpbGFibGUgZm9yIHRoaXMgY29tbWFuZCkiIF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgd2UgYXJlIGluIGZpcnN0IGFyZ3VtZW50CisgICAgICAgICAgICBhbGxtYXRjaGVzID0gY21kcy5pdGVya2V5cygpCisKKyAgICAgICAgY29tcGxldGVyLm1hdGNoZXMgPSBbIHggZm9yIHggaW4gYWxsbWF0Y2hlcyBpZiB4WzpsZW4odGV4dCldID09IHRleHQgXQorICAgICAgICAjcHJpbnQgImNvbXBsZXRlci5tYXRjaGVzID0gJyVzJyIgJSBjb21wbGV0ZXIubWF0Y2hlcworICAgIGlmIGxlbiggY29tcGxldGVyLm1hdGNoZXMgKSA+IHN0YXRlOgorICAgICAgICByZXR1cm4gY29tcGxldGVyLm1hdGNoZXNbc3RhdGVdCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworZGVmIGRlYnVnT3V0KCB0ZXh0ICk6CisgICAgaWYgZGVidWc6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoICIoICVzIClcbiIgJSB0ZXh0ICkKKworZGVmIGNvbHVtbml6ZSggYWxpc3QsIHdpZHRoID0gODAgKToKKyAgICAiIiIKKyAgICBBIHdvcmQtd3JhcCBmdW5jdGlvbiB0aGF0IHByZXNlcnZlcyBleGlzdGluZyBsaW5lIGJyZWFrcworICAgIGFuZCBtb3N0IHNwYWNlcyBpbiB0aGUgdGV4dC4gRXhwZWN0cyB0aGF0IGV4aXN0aW5nIGxpbmUKKyAgICBicmVha3MgYXJlIHBvc2l4IG5ld2xpbmVzIChcbikuCisgICAgIiIiCisgICAgcmV0dXJuIHJlZHVjZShsYW1iZGEgbGluZSwgd29yZCwgd2lkdGg9d2lkdGg6ICclcyVzJXMnICUKKyAgICAgICAgICAgICAgICAgIChsaW5lLAorICAgICAgICAgICAgICAgICAgICcgXG4nWyhsZW4obGluZVtsaW5lLnJmaW5kKCdcbicpKzE6XSkKKyAgICAgICAgICAgICAgICAgICAgICAgICArIGxlbih3b3JkLnNwbGl0KCdcbicsIDEpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApID49IHdpZHRoKV0sCisgICAgICAgICAgICAgICAgICAgd29yZCksCisgICAgICAgICAgICAgICAgICBhbGlzdAorICAgICAgICAgICAgICAgICApCisKK2RlZiBnbG9iZmlsdGVyKCBuYW1lcywgcGF0dGVybiApOgorICAgIHJldHVybiBmbm1hdGNoLmZpbHRlciggbmFtZXMsIHBhdHRlcm4gKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDbGFzcyBNZW1vcnlPdXRwdXQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NsYXNzIE1lbW9yeU91dHB1dDoKKyAgICAiIiJGaWxlLWxpa2Ugb3V0cHV0IGNsYXNzIGJ1ZmZlcmluZyB0aGUgb3V0cHV0IG9mIHRoZSBsYXN0IDEwIGNvbW1hbmRzIiIiCisgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBkZWxlZ2F0ZSApOgorICAgICAgICBzZWxmLmRlbGVnYXRlID0gZGVsZWdhdGUKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gW10KKyAgICAgICAgc2VsZi50ZXh0ID0gW10KKyAgICAgICAgc2VsZi5fY29tbWFuZCA9IE5vbmUKKworICAgIGRlZiBzdGFydENvbW1hbmQoIHNlbGYsIGNvbW1hbmQgKToKKyAgICAgICAgc2VsZi5fY29tbWFuZCA9IGNvbW1hbmQKKyAgICAgICAgc2VsZi50ZXh0ID0gW10KKyAgICBkZWYgZW5kQ29tbWFuZCggc2VsZiApOgorICAgICAgICBpZiBzZWxmLl9jb21tYW5kIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgbGVuKCBzZWxmLl9idWZmZXIgKSA9PSAxMDogZGVsIHNlbGYuX2J1ZmZlclswXQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZCggKCBzZWxmLl9jb21tYW5kLCBzZWxmLnRleHQgKSApCisgICAgZGVmIHJlbW92ZUxhc3QoIHNlbGYgKToKKyAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgZGVsIHNlbGYuX2J1ZmZlclsgbGVuKCBzZWxmLl9idWZmZXIgKSAtIDEgXQorICAgICAgICBzZWxmLnRleHQgPSBbXQorICAgICAgICBzZWxmLl9jb21tYW5kID0gTm9uZQorICAgIGRlZiBsYXN0QnVmZmVyKCBzZWxmICk6CisgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9idWZmZXJbIGxlbiggc2VsZi5fYnVmZmVyICkgLTEgXVsxXQorICAgIGRlZiBidWZmZXJlZENvbW1hbmRzKCBzZWxmICk6CisgICAgICAgIHJldHVybiBbIGNtZCBmb3IgY21kLCBvdXRwdXQgaW4gc2VsZi5fYnVmZmVyIF0KKyAgICBkZWYgYnVmZmVyKCBzZWxmLCBpICk6CisgICAgICAgIGlmIGkgPCBsZW4oIHNlbGYuX2J1ZmZlciApOgorICAgICAgICAgICAgcmV0dXJuICJCQj4+ICVzXG4lcyIgJSAoIHNlbGYuX2J1ZmZlcltpXVswXSwgIiIuam9pbiggc2VsZi5fYnVmZmVyW2ldWzFdICkgKQorICAgICAgICBlbHNlOiByZXR1cm4gIkVSUk9SOiBJbnZhbGlkIGJ1ZmZlciBudW1iZXIuIEJ1ZmZlciBuZWVkcyB0byBiZSBpbiAoMCwgJWQpIiAlICggbGVuKCBzZWxmLl9idWZmZXIgKSAtIDEgKQorICAgIGRlZiB3cml0ZSggc2VsZiwgdGV4dCApOgorICAgICAgICBpZiBzZWxmLl9jb21tYW5kIGlzIG5vdCBOb25lIGFuZCB0ZXh0ICE9ICJCQj4+ICI6IHNlbGYudGV4dC5hcHBlbmQoIHRleHQgKQorICAgICAgICBpZiBzZWxmLmRlbGVnYXRlIGlzIG5vdCBOb25lOiBzZWxmLmRlbGVnYXRlLndyaXRlKCB0ZXh0ICkKKyAgICBkZWYgZmx1c2goIHNlbGYgKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGVsZWdhdGUuZmx1c2goKQorICAgIGRlZiBmaWxlbm8oIHNlbGYgKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGVsZWdhdGUuZmlsZW5vKCkKKyAgICBkZWYgaXNhdHR5KCBzZWxmICk6CisgICAgICAgIHJldHVybiBzZWxmLmRlbGVnYXRlLmlzYXR0eSgpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENsYXNzIEJpdEJha2VTaGVsbAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgQml0QmFrZVNoZWxsOgorCisgICAgZGVmIF9faW5pdF9fKCBzZWxmICk6CisgICAgICAgICIiIlJlZ2lzdGVyIGNvbW1hbmRzIGFuZCBzZXQgdXAgcmVhZGxpbmUiIiIKKyAgICAgICAgc2VsZi5jb21tYW5kUSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5jb21tYW5kcyA9IEJpdEJha2VTaGVsbENvbW1hbmRzKCBzZWxmICkKKyAgICAgICAgc2VsZi5teW91dCA9IE1lbW9yeU91dHB1dCggc3lzLnN0ZG91dCApCisgICAgICAgIHNlbGYuaGlzdG9yeWZpbGVuYW1lID0gb3MucGF0aC5leHBhbmR1c2VyKCAifi8uYmJzaF9oaXN0b3J5IiApCisgICAgICAgIHNlbGYuc3RhcnR1cGZpbGVuYW1lID0gb3MucGF0aC5leHBhbmR1c2VyKCAifi8uYmJzaF9zdGFydHVwIiApCisKKyAgICAgICAgcmVhZGxpbmUuc2V0X2NvbXBsZXRlciggY29tcGxldGVyICkKKyAgICAgICAgcmVhZGxpbmUuc2V0X2NvbXBsZXRlcl9kZWxpbXMoICIgIiApCisgICAgICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCJ0YWI6IGNvbXBsZXRlIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZWFkbGluZS5yZWFkX2hpc3RvcnlfZmlsZSggc2VsZi5oaXN0b3J5ZmlsZW5hbWUgKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHBhc3MgICMgSXQgZG9lc24ndCBleGlzdCB5ZXQuCisKKyAgICAgICAgcHJpbnQoX19jcmVkaXRzX18pCisKKyAgICBkZWYgY2xlYW51cCggc2VsZiApOgorICAgICAgICAiIiJXcml0ZSByZWFkbGluZSBoaXN0b3J5IGFuZCBjbGVhbiB1cCByZXNvdXJjZXMiIiIKKyAgICAgICAgZGVidWdPdXQoICJ3cml0aW5nIGNvbW1hbmQgaGlzdG9yeSIgKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUoIHNlbGYuaGlzdG9yeWZpbGVuYW1lICkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBVbmFibGUgdG8gc2F2ZSBjb21tYW5kIGhpc3RvcnkiKQorCisgICAgZGVmIHJlZ2lzdGVyQ29tbWFuZCggc2VsZiwgY29tbWFuZCwgZnVuY3Rpb24sIG51bXBhcmFtcyA9IDAsIHVzYWdlID0gIiIsIGhlbHB0ZXh0ID0gIiIgKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgYSBjb21tYW5kIiIiCisgICAgICAgIGlmIHVzYWdlID09ICIiOiB1c2FnZSA9IGNvbW1hbmQKKyAgICAgICAgaWYgaGVscHRleHQgPT0gIiI6IGhlbHB0ZXh0ID0gZnVuY3Rpb24uX19kb2NfXyBvciAiPG5vdCB5ZXQgZG9jdW1lbnRlZD4iCisgICAgICAgIGNtZHNbY29tbWFuZF0gPSAoIGZ1bmN0aW9uLCBudW1wYXJhbXMsIHVzYWdlLCBoZWxwdGV4dCApCisKKyAgICBkZWYgcHJvY2Vzc0NvbW1hbmQoIHNlbGYsIGNvbW1hbmQsIHBhcmFtcyApOgorICAgICAgICAiIiJQcm9jZXNzIGEgY29tbWFuZC4gQ2hlY2sgbnVtYmVyIG9mIHBhcmFtcyBhbmQgcHJpbnQgYSB1c2FnZSBzdHJpbmcsIGlmIGFwcHJvcHJpYXRlIiIiCisgICAgICAgIGRlYnVnT3V0KCAicHJvY2Vzc2luZyBjb21tYW5kICclcycuLi4iICUgY29tbWFuZCApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1bmN0aW9uLCBudW1wYXJhbXMsIHVzYWdlLCBoZWxwdGV4dCA9IGNtZHNbY29tbWFuZF0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBFUlJPUjogJyVzJyBjb21tYW5kIGlzIG5vdCBhIHZhbGlkIGNvbW1hbmQuIiAlIGNvbW1hbmQpCisgICAgICAgICAgICBzZWxmLm15b3V0LnJlbW92ZUxhc3QoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgKG51bXBhcmFtcyAhPSAtMSkgYW5kIChub3QgbGVuKCBwYXJhbXMgKSA9PSBudW1wYXJhbXMpOgorICAgICAgICAgICAgICAgIHByaW50KCJVc2FnZTogJyVzJyIgJSB1c2FnZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb24oIHNlbGYuY29tbWFuZHMsIHBhcmFtcyApCisgICAgICAgICAgICBkZWJ1Z091dCggInJlc3VsdCB3YXMgJyVzJyIgJSByZXN1bHQgKQorCisgICAgZGVmIHByb2Nlc3NTdGFydHVwRmlsZSggc2VsZiApOgorICAgICAgICAiIiJSZWFkIGFuZCBleGVjdXRlIGFsbCBjb21tYW5kcyBmb3VuZCBpbiAkSE9NRS8uYmJzaF9zdGFydHVwIiIiCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCBzZWxmLnN0YXJ0dXBmaWxlbmFtZSApOgorICAgICAgICAgICAgc3RhcnR1cGZpbGUgPSBvcGVuKCBzZWxmLnN0YXJ0dXBmaWxlbmFtZSwgInIiICkKKyAgICAgICAgICAgIGZvciBjbWRsaW5lIGluIHN0YXJ0dXBmaWxlOgorICAgICAgICAgICAgICAgIGRlYnVnT3V0KCAicHJvY2Vzc2luZyBzdGFydHVwIGxpbmUgJyVzJyIgJSBjbWRsaW5lICkKKyAgICAgICAgICAgICAgICBpZiBub3QgY21kbGluZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiAifCIgaW4gY21kbGluZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiAnfCcgaW4gc3RhcnR1cCBmaWxlIGlzIG5vdCBhbGxvd2VkLiBJZ25vcmluZyBsaW5lIikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmRRLnB1dCggY21kbGluZS5zdHJpcCgpICkKKworICAgIGRlZiBtYWluKCBzZWxmICk6CisgICAgICAgICIiIlRoZSBtYWluIGNvbW1hbmQgbG9vcCIiIgorICAgICAgICB3aGlsZSBub3QgbGVhdmVfbWFpbmxvb3A6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5jb21tYW5kUS5lbXB0eSgpOgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5teW91dC5kZWxlZ2F0ZQorICAgICAgICAgICAgICAgICAgICBjbWRsaW5lID0gcmF3X2lucHV0KCAiQkI+PiAiICkKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYubXlvdXQKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjbWRsaW5lID0gc2VsZi5jb21tYW5kUS5nZXQoKQorICAgICAgICAgICAgICAgIGlmIGNtZGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGFsbENvbW1hbmRzID0gY21kbGluZS5zcGxpdCggJzsnICkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGNvbW1hbmQgaW4gYWxsQ29tbWFuZHM6CisgICAgICAgICAgICAgICAgICAgICAgICBwaXBlY21kID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICAgICAgIyBzcGVjaWFsIGNhc2UgZm9yIGV4cGVydCBtb2RlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kID09ICdweXRob24nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLm15b3V0LmRlbGVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzQ29tbWFuZCggY29tbWFuZCwgIiIgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLm15b3V0CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlvdXQuc3RhcnRDb21tYW5kKCBjb21tYW5kICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAnfCcgaW4gY29tbWFuZDogIyBkaXNhYmxlIG91dHB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLCBwaXBlY21kID0gY29tbWFuZC5zcGxpdCggJ3wnICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZWdhdGUgPSBzZWxmLm15b3V0LmRlbGVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlvdXQuZGVsZWdhdGUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zID0gc2hsZXguc3BsaXQoIGNvbW1hbmQsIFRydWUgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc0NvbW1hbmQoIHRva2Vuc1swXSwgdG9rZW5zWzE6XSBvciAiIiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5teW91dC5lbmRDb21tYW5kKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwaXBlY21kIGlzIG5vdCBOb25lOiAjIHJlc3RvcmUgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlvdXQuZGVsZWdhdGUgPSBkZWxlZ2F0ZQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUgPSBwb3BlbjIuUG9wZW40KCBwaXBlY21kICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZS50b2NoaWxkLndyaXRlKCAiXG4iLmpvaW4oIHNlbGYubXlvdXQubGFzdEJ1ZmZlcigpICkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlLnRvY2hpbGQuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCBwaXBlLmZyb21jaGlsZC5yZWFkKCkgKQorICAgICAgICAgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICBwcmludCgpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFN0YXJ0IGZ1bmN0aW9uIC0gY2FsbGVkIGZyb20gdGhlIEJpdEJha2UgY29tbWFuZCBsaW5lIHV0aWxpdHkKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZiBzdGFydCggYUNvb2tlciApOgorICAgIGdsb2JhbCBjb29rZXIKKyAgICBjb29rZXIgPSBhQ29va2VyCisgICAgYmJzaGVsbCA9IEJpdEJha2VTaGVsbCgpCisgICAgYmJzaGVsbC5wcm9jZXNzU3RhcnR1cEZpbGUoKQorICAgIGJic2hlbGwubWFpbigpCisgICAgYmJzaGVsbC5jbGVhbnVwKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBwcmludCgiU0hFTEw6IFNvcnJ5LCB0aGlzIHByb2dyYW0gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IEJpdEJha2UuIikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2lnZ2VuLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zaWdnZW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4NTI3MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2lnZ2VuLnB5CkBAIC0wLDAgKzEsNTI2IEBACitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBiYi5kYXRhCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdCaXRCYWtlLlNpZ0dlbicpCisKK3RyeToKKyAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgcGlja2xlCisgICAgbG9nZ2VyLmluZm8oJ0ltcG9ydGluZyBjUGlja2xlIGZhaWxlZC4gIEZhbGxpbmcgYmFjayB0byBhIHZlcnkgc2xvdyBpbXBsZW1lbnRhdGlvbi4nKQorCitkZWYgaW5pdChkKToKKyAgICBzaWdnZW5zID0gW29iaiBmb3Igb2JqIGluIGdsb2JhbHMoKS5pdGVydmFsdWVzKCkKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0eXBlKG9iaikgaXMgdHlwZSBhbmQgaXNzdWJjbGFzcyhvYmosIFNpZ25hdHVyZUdlbmVyYXRvcildCisKKyAgICBkZXNpcmVkID0gZC5nZXRWYXIoIkJCX1NJR05BVFVSRV9IQU5ETEVSIiwgVHJ1ZSkgb3IgIm5vb3AiCisgICAgZm9yIHNnIGluIHNpZ2dlbnM6CisgICAgICAgIGlmIGRlc2lyZWQgPT0gc2cubmFtZToKKyAgICAgICAgICAgIHJldHVybiBzZyhkKQorICAgICAgICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAgICBsb2dnZXIuZXJyb3IoIkludmFsaWQgc2lnbmF0dXJlIGdlbmVyYXRvciAnJXMnLCB1c2luZyBkZWZhdWx0ICdub29wJ1xuIgorICAgICAgICAgICAgICAgICAgICAgIkF2YWlsYWJsZSBnZW5lcmF0b3JzOiAlcyIsIGRlc2lyZWQsCisgICAgICAgICAgICAgICAgICAgICAnLCAnLmpvaW4ob2JqLm5hbWUgZm9yIG9iaiBpbiBzaWdnZW5zKSkKKyAgICAgICAgcmV0dXJuIFNpZ25hdHVyZUdlbmVyYXRvcihkKQorCitjbGFzcyBTaWduYXR1cmVHZW5lcmF0b3Iob2JqZWN0KToKKyAgICAiIiIKKyAgICAiIiIKKyAgICBuYW1lID0gIm5vb3AiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYudGFza2hhc2ggPSB7fQorICAgICAgICBzZWxmLnJ1bnRhc2tkZXBzID0ge30KKyAgICAgICAgc2VsZi5maWxlX2NoZWNrc3VtX3ZhbHVlcyA9IHt9CisKKyAgICBkZWYgZmluYWxpc2Uoc2VsZiwgZm4sIGQsIHZhcmllbnQpOgorICAgICAgICByZXR1cm4KKworICAgIGRlZiBnZXRfdGFza2hhc2goc2VsZiwgZm4sIHRhc2ssIGRlcHMsIGRhdGFDYWNoZSk6CisgICAgICAgIHJldHVybiAiMCIKKworICAgIGRlZiBzZXRfdGFza2RhdGEoc2VsZiwgaGFzaGVzLCBkZXBzLCBjaGVja3N1bSk6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIHN0YW1wZmlsZShzZWxmLCBzdGFtcGJhc2UsIGZpbGVfbmFtZSwgdGFza25hbWUsIGV4dHJhaW5mbyk6CisgICAgICAgIHJldHVybiAoIiVzLiVzLiVzIiAlIChzdGFtcGJhc2UsIHRhc2tuYW1lLCBleHRyYWluZm8pKS5yc3RyaXAoJy4nKQorCisgICAgZGVmIHN0YW1wY2xlYW5tYXNrKHNlbGYsIHN0YW1wYmFzZSwgZmlsZV9uYW1lLCB0YXNrbmFtZSwgZXh0cmFpbmZvKToKKyAgICAgICAgcmV0dXJuICgiJXMuJXMuJXMiICUgKHN0YW1wYmFzZSwgdGFza25hbWUsIGV4dHJhaW5mbykpLnJzdHJpcCgnLicpCisKKyAgICBkZWYgZHVtcF9zaWd0YXNrKHNlbGYsIGZuLCB0YXNrLCBzdGFtcGJhc2UsIHJ1bnRpbWUpOgorICAgICAgICByZXR1cm4KKworICAgIGRlZiBpbnZhbGlkYXRlX3Rhc2soc2VsZiwgdGFzaywgZCwgZm4pOgorICAgICAgICBiYi5idWlsZC5kZWxfc3RhbXAodGFzaywgZCwgZm4pCisKKyAgICBkZWYgZHVtcF9zaWdzKHNlbGYsIGRhdGFDYWNoZSwgb3B0aW9ucyk6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIGdldF90YXNrZGF0YShzZWxmKToKKyAgICAgICByZXR1cm4gKHNlbGYucnVudGFza2RlcHMsIHNlbGYudGFza2hhc2gsIHNlbGYuZmlsZV9jaGVja3N1bV92YWx1ZXMpCisKKyAgICBkZWYgc2V0X3Rhc2tkYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnJ1bnRhc2tkZXBzLCBzZWxmLnRhc2toYXNoLCBzZWxmLmZpbGVfY2hlY2tzdW1fdmFsdWVzID0gZGF0YQorCisKK2NsYXNzIFNpZ25hdHVyZUdlbmVyYXRvckJhc2ljKFNpZ25hdHVyZUdlbmVyYXRvcik6CisgICAgIiIiCisgICAgIiIiCisgICAgbmFtZSA9ICJiYXNpYyIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5iYXNlaGFzaCA9IHt9CisgICAgICAgIHNlbGYudGFza2hhc2ggPSB7fQorICAgICAgICBzZWxmLnRhc2tkZXBzID0ge30KKyAgICAgICAgc2VsZi5ydW50YXNrZGVwcyA9IHt9CisgICAgICAgIHNlbGYuZmlsZV9jaGVja3N1bV92YWx1ZXMgPSB7fQorICAgICAgICBzZWxmLmdlbmRlcHMgPSB7fQorICAgICAgICBzZWxmLmxvb2t1cGNhY2hlID0ge30KKyAgICAgICAgc2VsZi5wa2duYW1lZXh0cmFjdCA9IHJlLmNvbXBpbGUoIig/UDxmbj4uKilcLi4qIikKKyAgICAgICAgc2VsZi5iYXNld2hpdGVsaXN0ID0gc2V0KChkYXRhLmdldFZhcigiQkJfSEFTSEJBU0VfV0hJVEVMSVNUIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgIHNlbGYudGFza3doaXRlbGlzdCA9IE5vbmUKKyAgICAgICAgc2VsZi5pbml0X3J1bmRlcGNoZWNrKGRhdGEpCisKKyAgICBkZWYgaW5pdF9ydW5kZXBjaGVjayhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi50YXNrd2hpdGVsaXN0ID0gZGF0YS5nZXRWYXIoIkJCX0hBU0hUQVNLX1dISVRFTElTVCIsIFRydWUpIG9yIE5vbmUKKyAgICAgICAgaWYgc2VsZi50YXNrd2hpdGVsaXN0OgorICAgICAgICAgICAgc2VsZi50d2wgPSByZS5jb21waWxlKHNlbGYudGFza3doaXRlbGlzdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYudHdsID0gTm9uZQorCisgICAgZGVmIF9idWlsZF9kYXRhKHNlbGYsIGZuLCBkKToKKworICAgICAgICB0YXNrbGlzdCwgZ2VuZGVwcywgbG9va3VwY2FjaGUgPSBiYi5kYXRhLmdlbmVyYXRlX2RlcGVuZGVuY2llcyhkKQorCisgICAgICAgIHRhc2tkZXBzID0ge30KKyAgICAgICAgYmFzZWhhc2ggPSB7fQorCisgICAgICAgIGZvciB0YXNrIGluIHRhc2tsaXN0OgorICAgICAgICAgICAgZGF0YSA9IGxvb2t1cGNhY2hlW3Rhc2tdCisKKyAgICAgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBiYi5lcnJvcigiVGFzayAlcyBmcm9tICVzIHNlZW1zIHRvIGJlIGVtcHR5PyEiICUgKHRhc2ssIGZuKSkKKyAgICAgICAgICAgICAgICBkYXRhID0gJycKKworICAgICAgICAgICAgZ2VuZGVwc1t0YXNrXSAtPSBzZWxmLmJhc2V3aGl0ZWxpc3QKKyAgICAgICAgICAgIG5ld2RlcHMgPSBnZW5kZXBzW3Rhc2tdCisgICAgICAgICAgICBzZWVuID0gc2V0KCkKKyAgICAgICAgICAgIHdoaWxlIG5ld2RlcHM6CisgICAgICAgICAgICAgICAgbmV4dGRlcHMgPSBuZXdkZXBzCisgICAgICAgICAgICAgICAgc2VlbiB8PSBuZXh0ZGVwcworICAgICAgICAgICAgICAgIG5ld2RlcHMgPSBzZXQoKQorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gbmV4dGRlcHM6CisgICAgICAgICAgICAgICAgICAgIGlmIGRlcCBpbiBzZWxmLmJhc2V3aGl0ZWxpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBnZW5kZXBzW2RlcF0gLT0gc2VsZi5iYXNld2hpdGVsaXN0CisgICAgICAgICAgICAgICAgICAgIG5ld2RlcHMgfD0gZ2VuZGVwc1tkZXBdCisgICAgICAgICAgICAgICAgbmV3ZGVwcyAtPSBzZWVuCisKKyAgICAgICAgICAgIGFsbGRlcHMgPSBzb3J0ZWQoc2VlbikKKyAgICAgICAgICAgIGZvciBkZXAgaW4gYWxsZGVwczoKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YSArIGRlcAorICAgICAgICAgICAgICAgIHZhciA9IGxvb2t1cGNhY2hlW2RlcF0KKyAgICAgICAgICAgICAgICBpZiB2YXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgc3RyKHZhcikKKyAgICAgICAgICAgIHNlbGYuYmFzZWhhc2hbZm4gKyAiLiIgKyB0YXNrXSA9IGhhc2hsaWIubWQ1KGRhdGEpLmhleGRpZ2VzdCgpCisgICAgICAgICAgICB0YXNrZGVwc1t0YXNrXSA9IGFsbGRlcHMKKworICAgICAgICBzZWxmLnRhc2tkZXBzW2ZuXSA9IHRhc2tkZXBzCisgICAgICAgIHNlbGYuZ2VuZGVwc1tmbl0gPSBnZW5kZXBzCisgICAgICAgIHNlbGYubG9va3VwY2FjaGVbZm5dID0gbG9va3VwY2FjaGUKKworICAgICAgICByZXR1cm4gdGFza2RlcHMKKworICAgIGRlZiBmaW5hbGlzZShzZWxmLCBmbiwgZCwgdmFyaWFudCk6CisKKyAgICAgICAgaWYgdmFyaWFudDoKKyAgICAgICAgICAgIGZuID0gInZpcnR1YWw6IiArIHZhcmlhbnQgKyAiOiIgKyBmbgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhc2tkZXBzID0gc2VsZi5fYnVpbGRfZGF0YShmbiwgZCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgYmIubm90ZSgiRXJyb3IgZHVyaW5nIGZpbmFsaXNlIG9mICVzIiAlIGZuKQorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAjU2xvdyBidXQgY2FuIGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIG1pc21hdGNoZWQgYmFzZWhhc2hlcworICAgICAgICAjZm9yIHRhc2sgaW4gc2VsZi50YXNrZGVwc1tmbl06CisgICAgICAgICMgICAgc2VsZi5kdW1wX3NpZ3Rhc2soZm4sIHRhc2ssIGQuZ2V0VmFyKCJTVEFNUCIsIFRydWUpLCBGYWxzZSkKKworICAgICAgICBmb3IgdGFzayBpbiB0YXNrZGVwczoKKyAgICAgICAgICAgIGQuc2V0VmFyKCJCQl9CQVNFSEFTSF90YXNrLSVzIiAlIHRhc2ssIHNlbGYuYmFzZWhhc2hbZm4gKyAiLiIgKyB0YXNrXSkKKworICAgIGRlZiBydW5kZXBfY2hlY2soc2VsZiwgZm4sIHJlY2lwZW5hbWUsIHRhc2ssIGRlcCwgZGVwbmFtZSwgZGF0YUNhY2hlKToKKyAgICAgICAgIyBSZXR1cm4gVHJ1ZSBpZiB3ZSBzaG91bGQga2VlcCB0aGUgZGVwZW5kZW5jeSwgRmFsc2UgdG8gZHJvcCBpdAorICAgICAgICAjIFdlIG9ubHkgbWFuaXB1bGF0ZSB0aGUgZGVwZW5kZW5jaWVzIGZvciBwYWNrYWdlcyBub3QgaW4gdGhlIHdoaXRlbGlzdAorICAgICAgICBpZiBzZWxmLnR3bCBhbmQgbm90IHNlbGYudHdsLnNlYXJjaChyZWNpcGVuYW1lKToKKyAgICAgICAgICAgICMgdGhlbiBwcm9jZXNzIHRoZSBhY3R1YWwgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBpZiBzZWxmLnR3bC5zZWFyY2goZGVwbmFtZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcmVhZF90YWludChzZWxmLCBmbiwgdGFzaywgc3RhbXBiYXNlKToKKyAgICAgICAgdGFpbnQgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3BlbihzdGFtcGJhc2UgKyAnLicgKyB0YXNrICsgJy50YWludCcsICdyJykgYXMgdGFpbnRmOgorICAgICAgICAgICAgICAgIHRhaW50ID0gdGFpbnRmLnJlYWQoKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIHRhaW50CisKKyAgICBkZWYgZ2V0X3Rhc2toYXNoKHNlbGYsIGZuLCB0YXNrLCBkZXBzLCBkYXRhQ2FjaGUpOgorICAgICAgICBrID0gZm4gKyAiLiIgKyB0YXNrCisgICAgICAgIGRhdGEgPSBkYXRhQ2FjaGUuYmFzZXRhc2toYXNoW2tdCisgICAgICAgIHNlbGYucnVudGFza2RlcHNba10gPSBbXQorICAgICAgICBzZWxmLmZpbGVfY2hlY2tzdW1fdmFsdWVzW2tdID0ge30KKyAgICAgICAgcmVjaXBlbmFtZSA9IGRhdGFDYWNoZS5wa2dfZm5bZm5dCisgICAgICAgIGZvciBkZXAgaW4gc29ydGVkKGRlcHMsIGtleT1jbGVhbl9iYXNlcGF0aCk6CisgICAgICAgICAgICBkZXBuYW1lID0gZGF0YUNhY2hlLnBrZ19mbltzZWxmLnBrZ25hbWVleHRyYWN0LnNlYXJjaChkZXApLmdyb3VwKCdmbicpXQorICAgICAgICAgICAgaWYgbm90IHNlbGYucnVuZGVwX2NoZWNrKGZuLCByZWNpcGVuYW1lLCB0YXNrLCBkZXAsIGRlcG5hbWUsIGRhdGFDYWNoZSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gc2VsZi50YXNraGFzaDoKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiJXMgaXMgbm90IGluIHRhc2toYXNoLCBjYWxsZXIgaXNuJ3QgY2FsbGluZyBpbiBkZXBlbmRlbmN5IG9yZGVyPyIsIGRlcCkKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgc2VsZi50YXNraGFzaFtkZXBdCisgICAgICAgICAgICBzZWxmLnJ1bnRhc2tkZXBzW2tdLmFwcGVuZChkZXApCisKKyAgICAgICAgaWYgdGFzayBpbiBkYXRhQ2FjaGUuZmlsZV9jaGVja3N1bXNbZm5dOgorICAgICAgICAgICAgY2hlY2tzdW1zID0gYmIuZmV0Y2gyLmdldF9maWxlX2NoZWNrc3VtcyhkYXRhQ2FjaGUuZmlsZV9jaGVja3N1bXNbZm5dW3Rhc2tdLCByZWNpcGVuYW1lKQorICAgICAgICAgICAgZm9yIChmLGNzKSBpbiBjaGVja3N1bXM6CisgICAgICAgICAgICAgICAgc2VsZi5maWxlX2NoZWNrc3VtX3ZhbHVlc1trXVtmXSA9IGNzCisgICAgICAgICAgICAgICAgaWYgY3M6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgY3MKKworICAgICAgICB0YXNrZGVwID0gZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKyAgICAgICAgaWYgJ25vc3RhbXAnIGluIHRhc2tkZXAgYW5kIHRhc2sgaW4gdGFza2RlcFsnbm9zdGFtcCddOgorICAgICAgICAgICAgIyBOb3N0YW1wIHRhc2tzIG5lZWQgYW4gaW1wbGljaXQgdGFpbnQgc28gdGhhdCB0aGV5IGZvcmNlIGFueSBkZXBlbmRlbnQgdGFza3MgdG8gcnVuCisgICAgICAgICAgICBpbXBvcnQgdXVpZAorICAgICAgICAgICAgZGF0YSA9IGRhdGEgKyBzdHIodXVpZC51dWlkNCgpKQorCisgICAgICAgIHRhaW50ID0gc2VsZi5yZWFkX3RhaW50KGZuLCB0YXNrLCBkYXRhQ2FjaGUuc3RhbXBbZm5dKQorICAgICAgICBpZiB0YWludDoKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgdGFpbnQKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCIlcyBpcyB0YWludGVkIGZyb20gYSBmb3JjZWQgcnVuIiAlIGspCisKKyAgICAgICAgaCA9IGhhc2hsaWIubWQ1KGRhdGEpLmhleGRpZ2VzdCgpCisgICAgICAgIHNlbGYudGFza2hhc2hba10gPSBoCisgICAgICAgICNkLnNldFZhcigiQkJfVEFTS0hBU0hfdGFzay0lcyIgJSB0YXNrLCB0YXNraGFzaFt0YXNrXSkKKyAgICAgICAgcmV0dXJuIGgKKworICAgIGRlZiBkdW1wX3NpZ3Rhc2soc2VsZiwgZm4sIHRhc2ssIHN0YW1wYmFzZSwgcnVudGltZSk6CisgICAgICAgIGsgPSBmbiArICIuIiArIHRhc2sKKyAgICAgICAgaWYgcnVudGltZSA9PSAiY3VzdG9tZmlsZSI6CisgICAgICAgICAgICBzaWdmaWxlID0gc3RhbXBiYXNlCisgICAgICAgIGVsaWYgcnVudGltZSBhbmQgayBpbiBzZWxmLnRhc2toYXNoOgorICAgICAgICAgICAgc2lnZmlsZSA9IHN0YW1wYmFzZSArICIuIiArIHRhc2sgKyAiLnNpZ2RhdGEiICsgIi4iICsgc2VsZi50YXNraGFzaFtrXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2lnZmlsZSA9IHN0YW1wYmFzZSArICIuIiArIHRhc2sgKyAiLnNpZ2Jhc2VkYXRhIiArICIuIiArIHNlbGYuYmFzZWhhc2hba10KKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHNpZ2ZpbGUpKQorCisgICAgICAgIGRhdGEgPSB7fQorICAgICAgICBkYXRhWydiYXNld2hpdGVsaXN0J10gPSBzZWxmLmJhc2V3aGl0ZWxpc3QKKyAgICAgICAgZGF0YVsndGFza3doaXRlbGlzdCddID0gc2VsZi50YXNrd2hpdGVsaXN0CisgICAgICAgIGRhdGFbJ3Rhc2tkZXBzJ10gPSBzZWxmLnRhc2tkZXBzW2ZuXVt0YXNrXQorICAgICAgICBkYXRhWydiYXNlaGFzaCddID0gc2VsZi5iYXNlaGFzaFtrXQorICAgICAgICBkYXRhWydnZW5kZXBzJ10gPSB7fQorICAgICAgICBkYXRhWyd2YXJ2YWxzJ10gPSB7fQorICAgICAgICBkYXRhWyd2YXJ2YWxzJ11bdGFza10gPSBzZWxmLmxvb2t1cGNhY2hlW2ZuXVt0YXNrXQorICAgICAgICBmb3IgZGVwIGluIHNlbGYudGFza2RlcHNbZm5dW3Rhc2tdOgorICAgICAgICAgICAgaWYgZGVwIGluIHNlbGYuYmFzZXdoaXRlbGlzdDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZGF0YVsnZ2VuZGVwcyddW2RlcF0gPSBzZWxmLmdlbmRlcHNbZm5dW2RlcF0KKyAgICAgICAgICAgIGRhdGFbJ3ZhcnZhbHMnXVtkZXBdID0gc2VsZi5sb29rdXBjYWNoZVtmbl1bZGVwXQorCisgICAgICAgIGlmIHJ1bnRpbWUgYW5kIGsgaW4gc2VsZi50YXNraGFzaDoKKyAgICAgICAgICAgIGRhdGFbJ3J1bnRhc2tkZXBzJ10gPSBzZWxmLnJ1bnRhc2tkZXBzW2tdCisgICAgICAgICAgICBkYXRhWydmaWxlX2NoZWNrc3VtX3ZhbHVlcyddID0gWyhvcy5wYXRoLmJhc2VuYW1lKGYpLCBjcykgZm9yIGYsY3MgaW4gc2VsZi5maWxlX2NoZWNrc3VtX3ZhbHVlc1trXS5pdGVtcygpXQorICAgICAgICAgICAgZGF0YVsncnVudGFza2hhc2hlcyddID0ge30KKyAgICAgICAgICAgIGZvciBkZXAgaW4gZGF0YVsncnVudGFza2RlcHMnXToKKyAgICAgICAgICAgICAgICBkYXRhWydydW50YXNraGFzaGVzJ11bZGVwXSA9IHNlbGYudGFza2hhc2hbZGVwXQorCisgICAgICAgIHRhaW50ID0gc2VsZi5yZWFkX3RhaW50KGZuLCB0YXNrLCBzdGFtcGJhc2UpCisgICAgICAgIGlmIHRhaW50OgorICAgICAgICAgICAgZGF0YVsndGFpbnQnXSA9IHRhaW50CisKKyAgICAgICAgZmQsIHRtcGZpbGUgPSB0ZW1wZmlsZS5ta3N0ZW1wKGRpcj1vcy5wYXRoLmRpcm5hbWUoc2lnZmlsZSksIHByZWZpeD0ic2lndGFzay4iKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9zLmZkb3BlbihmZCwgIndiIikgYXMgc3RyZWFtOgorICAgICAgICAgICAgICAgIHAgPSBwaWNrbGUuZHVtcChkYXRhLCBzdHJlYW0sIC0xKQorICAgICAgICAgICAgICAgIHN0cmVhbS5mbHVzaCgpCisgICAgICAgICAgICBvcy5jaG1vZCh0bXBmaWxlLCAwNjY0KQorICAgICAgICAgICAgb3MucmVuYW1lKHRtcGZpbGUsIHNpZ2ZpbGUpCisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJvcikgYXMgZXJyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnVubGluayh0bXBmaWxlKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmFpc2UgZXJyCisKKyAgICBkZWYgZHVtcF9zaWdzKHNlbGYsIGRhdGFDYWNoZSwgb3B0aW9ucyk6CisgICAgICAgIGZvciBmbiBpbiBzZWxmLnRhc2tkZXBzOgorICAgICAgICAgICAgZm9yIHRhc2sgaW4gc2VsZi50YXNrZGVwc1tmbl06CisgICAgICAgICAgICAgICAgayA9IGZuICsgIi4iICsgdGFzaworICAgICAgICAgICAgICAgIGlmIGsgbm90IGluIHNlbGYudGFza2hhc2g6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgZGF0YUNhY2hlLmJhc2V0YXNraGFzaFtrXSAhPSBzZWxmLmJhc2VoYXNoW2tdOgorICAgICAgICAgICAgICAgICAgICBiYi5lcnJvcigiQml0YmFrZSdzIGNhY2hlZCBiYXNlaGFzaCBkb2VzIG5vdCBtYXRjaCB0aGUgb25lIHdlIGp1c3QgZ2VuZXJhdGVkICglcykhIiAlIGspCisgICAgICAgICAgICAgICAgICAgIGJiLmVycm9yKCJUaGUgbWlzbWF0Y2hlZCBoYXNoZXMgd2VyZSAlcyBhbmQgJXMiICUgKGRhdGFDYWNoZS5iYXNldGFza2hhc2hba10sIHNlbGYuYmFzZWhhc2hba10pKQorICAgICAgICAgICAgICAgIHNlbGYuZHVtcF9zaWd0YXNrKGZuLCB0YXNrLCBkYXRhQ2FjaGUuc3RhbXBbZm5dLCBUcnVlKQorCitjbGFzcyBTaWduYXR1cmVHZW5lcmF0b3JCYXNpY0hhc2goU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWMpOgorICAgIG5hbWUgPSAiYmFzaWNoYXNoIgorCisgICAgZGVmIHN0YW1wZmlsZShzZWxmLCBzdGFtcGJhc2UsIGZuLCB0YXNrbmFtZSwgZXh0cmFpbmZvLCBjbGVhbj1GYWxzZSk6CisgICAgICAgIGlmIHRhc2tuYW1lICE9ICJkb19zZXRzY2VuZSIgYW5kIHRhc2tuYW1lLmVuZHN3aXRoKCJfc2V0c2NlbmUiKToKKyAgICAgICAgICAgIGsgPSBmbiArICIuIiArIHRhc2tuYW1lWzotOV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGsgPSBmbiArICIuIiArIHRhc2tuYW1lCisgICAgICAgIGlmIGNsZWFuOgorICAgICAgICAgICAgaCA9ICIqIgorICAgICAgICBlbGlmIGsgaW4gc2VsZi50YXNraGFzaDoKKyAgICAgICAgICAgIGggPSBzZWxmLnRhc2toYXNoW2tdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIElmIGsgaXMgbm90IGluIGJhc2VoYXNoLCB0aGVuIGVycm9yCisgICAgICAgICAgICBoID0gc2VsZi5iYXNlaGFzaFtrXQorICAgICAgICByZXR1cm4gKCIlcy4lcy4lcy4lcyIgJSAoc3RhbXBiYXNlLCB0YXNrbmFtZSwgaCwgZXh0cmFpbmZvKSkucnN0cmlwKCcuJykKKworICAgIGRlZiBzdGFtcGNsZWFubWFzayhzZWxmLCBzdGFtcGJhc2UsIGZuLCB0YXNrbmFtZSwgZXh0cmFpbmZvKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RhbXBmaWxlKHN0YW1wYmFzZSwgZm4sIHRhc2tuYW1lLCBleHRyYWluZm8sIGNsZWFuPVRydWUpCisgICAgICAgIAorICAgIGRlZiBpbnZhbGlkYXRlX3Rhc2soc2VsZiwgdGFzaywgZCwgZm4pOgorICAgICAgICBiYi5ub3RlKCJUYWludGluZyBoYXNoIHRvIGZvcmNlIHJlYnVpbGQgb2YgdGFzayAlcywgJXMiICUgKGZuLCB0YXNrKSkKKyAgICAgICAgYmIuYnVpbGQud3JpdGVfdGFpbnQodGFzaywgZCwgZm4pCisKK2RlZiBkdW1wX3RoaXNfdGFzayhvdXRmaWxlLCBkKToKKyAgICBpbXBvcnQgYmIucGFyc2UKKyAgICBmbiA9IGQuZ2V0VmFyKCJCQl9GSUxFTkFNRSIsIFRydWUpCisgICAgdGFzayA9ICJkb18iICsgZC5nZXRWYXIoIkJCX0NVUlJFTlRUQVNLIiwgVHJ1ZSkKKyAgICBiYi5wYXJzZS5zaWdnZW4uZHVtcF9zaWd0YXNrKGZuLCB0YXNrLCBvdXRmaWxlLCAiY3VzdG9tZmlsZSIpCisKK2RlZiBjbGVhbl9iYXNlcGF0aChhKToKKyAgICBiID0gYS5yc3BsaXQoIi8iLCAyKVsxXSArIGEucnNwbGl0KCIvIiwgMilbMl0KKyAgICBpZiBhLnN0YXJ0c3dpdGgoInZpcnR1YWw6Iik6CisgICAgICAgIGIgPSBiICsgIjoiICsgYS5yc3BsaXQoIjoiLCAxKVswXQorICAgIHJldHVybiBiCisKK2RlZiBjbGVhbl9iYXNlcGF0aHMoYSk6CisgICAgYiA9IHt9CisgICAgZm9yIHggaW4gYToKKyAgICAgICAgYltjbGVhbl9iYXNlcGF0aCh4KV0gPSBhW3hdCisgICAgcmV0dXJuIGIKKworZGVmIGNsZWFuX2Jhc2VwYXRoc19saXN0KGEpOgorICAgIGIgPSBbXQorICAgIGZvciB4IGluIGE6CisgICAgICAgIGIuYXBwZW5kKGNsZWFuX2Jhc2VwYXRoKHgpKQorICAgIHJldHVybiBiCisKK2RlZiBjb21wYXJlX3NpZ2ZpbGVzKGEsIGIsIHJlY3Vyc2VjYiA9IE5vbmUpOgorICAgIG91dHB1dCA9IFtdCisKKyAgICBwMSA9IHBpY2tsZS5VbnBpY2tsZXIob3BlbihhLCAicmIiKSkKKyAgICBhX2RhdGEgPSBwMS5sb2FkKCkKKyAgICBwMiA9IHBpY2tsZS5VbnBpY2tsZXIob3BlbihiLCAicmIiKSkKKyAgICBiX2RhdGEgPSBwMi5sb2FkKCkKKworICAgIGRlZiBkaWN0X2RpZmYoYSwgYiwgd2hpdGVsaXN0PXNldCgpKToKKyAgICAgICAgc2EgPSBzZXQoYS5rZXlzKCkpCisgICAgICAgIHNiID0gc2V0KGIua2V5cygpKQorICAgICAgICBjb21tb24gPSBzYSAmIHNiCisgICAgICAgIGNoYW5nZWQgPSBzZXQoKQorICAgICAgICBmb3IgaSBpbiBjb21tb246CisgICAgICAgICAgICBpZiBhW2ldICE9IGJbaV0gYW5kIGkgbm90IGluIHdoaXRlbGlzdDoKKyAgICAgICAgICAgICAgICBjaGFuZ2VkLmFkZChpKQorICAgICAgICBhZGRlZCA9IHNiIC0gc2EKKyAgICAgICAgcmVtb3ZlZCA9IHNhIC0gc2IKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQsIGFkZGVkLCByZW1vdmVkCisKKyAgICBkZWYgZmlsZV9jaGVja3N1bXNfZGlmZihhLCBiKToKKyAgICAgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgorICAgICAgICAjIEhhbmRsZSBvbGQgc2lnaW5mbyBmb3JtYXQKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhLCBkaWN0KToKKyAgICAgICAgICAgIGEgPSBbKG9zLnBhdGguYmFzZW5hbWUoZiksIGNzKSBmb3IgZiwgY3MgaW4gYS5pdGVtcygpXQorICAgICAgICBpZiBpc2luc3RhbmNlKGIsIGRpY3QpOgorICAgICAgICAgICAgYiA9IFsob3MucGF0aC5iYXNlbmFtZShmKSwgY3MpIGZvciBmLCBjcyBpbiBiLml0ZW1zKCldCisgICAgICAgICMgQ29tcGFyZSBsaXN0cywgZW5zdXJpbmcgd2UgY2FuIGhhbmRsZSBkdXBsaWNhdGUgZmlsZW5hbWVzIGlmIHRoZXkgZXhpc3QKKyAgICAgICAgcmVtb3ZlZGNvdW50ID0gQ291bnRlcihhKQorICAgICAgICByZW1vdmVkY291bnQuc3VidHJhY3QoYikKKyAgICAgICAgYWRkZWRjb3VudCA9IENvdW50ZXIoYikKKyAgICAgICAgYWRkZWRjb3VudC5zdWJ0cmFjdChhKQorICAgICAgICBhZGRlZCA9IFtdCisgICAgICAgIGZvciB4IGluIGI6CisgICAgICAgICAgICBpZiBhZGRlZGNvdW50W3hdID4gMDoKKyAgICAgICAgICAgICAgICBhZGRlZGNvdW50W3hdIC09IDEKKyAgICAgICAgICAgICAgICBhZGRlZC5hcHBlbmQoeCkKKyAgICAgICAgcmVtb3ZlZCA9IFtdCisgICAgICAgIGNoYW5nZWQgPSBbXQorICAgICAgICBmb3IgeCBpbiBhOgorICAgICAgICAgICAgaWYgcmVtb3ZlZGNvdW50W3hdID4gMDoKKyAgICAgICAgICAgICAgICByZW1vdmVkY291bnRbeF0gLT0gMQorICAgICAgICAgICAgICAgIGZvciB5IGluIGFkZGVkOgorICAgICAgICAgICAgICAgICAgICBpZiB5WzBdID09IHhbMF06CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkLmFwcGVuZCgoeFswXSwgeFsxXSwgeVsxXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZC5yZW1vdmUoeSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5hcHBlbmQoeCkKKyAgICAgICAgYWRkZWQgPSBbeFswXSBmb3IgeCBpbiBhZGRlZF0KKyAgICAgICAgcmVtb3ZlZCA9IFt4WzBdIGZvciB4IGluIHJlbW92ZWRdCisgICAgICAgIHJldHVybiBjaGFuZ2VkLCBhZGRlZCwgcmVtb3ZlZAorCisgICAgaWYgJ2Jhc2V3aGl0ZWxpc3QnIGluIGFfZGF0YSBhbmQgYV9kYXRhWydiYXNld2hpdGVsaXN0J10gIT0gYl9kYXRhWydiYXNld2hpdGVsaXN0J106CisgICAgICAgIG91dHB1dC5hcHBlbmQoImJhc2V3aGl0ZWxpc3QgY2hhbmdlZCBmcm9tICclcycgdG8gJyVzJyIgJSAoYV9kYXRhWydiYXNld2hpdGVsaXN0J10sIGJfZGF0YVsnYmFzZXdoaXRlbGlzdCddKSkKKyAgICAgICAgaWYgYV9kYXRhWydiYXNld2hpdGVsaXN0J10gYW5kIGJfZGF0YVsnYmFzZXdoaXRlbGlzdCddOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiY2hhbmdlZCBpdGVtczogJXMiICUgYV9kYXRhWydiYXNld2hpdGVsaXN0J10uc3ltbWV0cmljX2RpZmZlcmVuY2UoYl9kYXRhWydiYXNld2hpdGVsaXN0J10pKQorCisgICAgaWYgJ3Rhc2t3aGl0ZWxpc3QnIGluIGFfZGF0YSBhbmQgYV9kYXRhWyd0YXNrd2hpdGVsaXN0J10gIT0gYl9kYXRhWyd0YXNrd2hpdGVsaXN0J106CisgICAgICAgIG91dHB1dC5hcHBlbmQoInRhc2t3aGl0ZWxpc3QgY2hhbmdlZCBmcm9tICclcycgdG8gJyVzJyIgJSAoYV9kYXRhWyd0YXNrd2hpdGVsaXN0J10sIGJfZGF0YVsndGFza3doaXRlbGlzdCddKSkKKyAgICAgICAgaWYgYV9kYXRhWyd0YXNrd2hpdGVsaXN0J10gYW5kIGJfZGF0YVsndGFza3doaXRlbGlzdCddOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiY2hhbmdlZCBpdGVtczogJXMiICUgYV9kYXRhWyd0YXNrd2hpdGVsaXN0J10uc3ltbWV0cmljX2RpZmZlcmVuY2UoYl9kYXRhWyd0YXNrd2hpdGVsaXN0J10pKQorCisgICAgaWYgYV9kYXRhWyd0YXNrZGVwcyddICE9IGJfZGF0YVsndGFza2RlcHMnXToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgiVGFzayBkZXBlbmRlbmNpZXMgY2hhbmdlZCBmcm9tOlxuJXNcbnRvOlxuJXMiICUgKHNvcnRlZChhX2RhdGFbJ3Rhc2tkZXBzJ10pLCBzb3J0ZWQoYl9kYXRhWyd0YXNrZGVwcyddKSkpCisKKyAgICBpZiBhX2RhdGFbJ2Jhc2VoYXNoJ10gIT0gYl9kYXRhWydiYXNlaGFzaCddOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCJiYXNlaGFzaCBjaGFuZ2VkIGZyb20gJXMgdG8gJXMiICUgKGFfZGF0YVsnYmFzZWhhc2gnXSwgYl9kYXRhWydiYXNlaGFzaCddKSkKKworICAgIGNoYW5nZWQsIGFkZGVkLCByZW1vdmVkID0gZGljdF9kaWZmKGFfZGF0YVsnZ2VuZGVwcyddLCBiX2RhdGFbJ2dlbmRlcHMnXSwgYV9kYXRhWydiYXNld2hpdGVsaXN0J10gJiBiX2RhdGFbJ2Jhc2V3aGl0ZWxpc3QnXSkKKyAgICBpZiBjaGFuZ2VkOgorICAgICAgICBmb3IgZGVwIGluIGNoYW5nZWQ6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJMaXN0IG9mIGRlcGVuZGVuY2llcyBmb3IgdmFyaWFibGUgJXMgY2hhbmdlZCBmcm9tICclcycgdG8gJyVzJyIgJSAoZGVwLCBhX2RhdGFbJ2dlbmRlcHMnXVtkZXBdLCBiX2RhdGFbJ2dlbmRlcHMnXVtkZXBdKSkKKyAgICAgICAgICAgIGlmIGFfZGF0YVsnZ2VuZGVwcyddW2RlcF0gYW5kIGJfZGF0YVsnZ2VuZGVwcyddW2RlcF06CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiY2hhbmdlZCBpdGVtczogJXMiICUgYV9kYXRhWydnZW5kZXBzJ11bZGVwXS5zeW1tZXRyaWNfZGlmZmVyZW5jZShiX2RhdGFbJ2dlbmRlcHMnXVtkZXBdKSkKKyAgICBpZiBhZGRlZDoKKyAgICAgICAgZm9yIGRlcCBpbiBhZGRlZDoKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIkRlcGVuZGVuY3kgb24gdmFyaWFibGUgJXMgd2FzIGFkZGVkIiAlIChkZXApKQorICAgIGlmIHJlbW92ZWQ6CisgICAgICAgIGZvciBkZXAgaW4gcmVtb3ZlZDoKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIkRlcGVuZGVuY3kgb24gVmFyaWFibGUgJXMgd2FzIHJlbW92ZWQiICUgKGRlcCkpCisKKworICAgIGNoYW5nZWQsIGFkZGVkLCByZW1vdmVkID0gZGljdF9kaWZmKGFfZGF0YVsndmFydmFscyddLCBiX2RhdGFbJ3ZhcnZhbHMnXSkKKyAgICBpZiBjaGFuZ2VkOgorICAgICAgICBmb3IgZGVwIGluIGNoYW5nZWQ6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJWYXJpYWJsZSAlcyB2YWx1ZSBjaGFuZ2VkIGZyb20gJyVzJyB0byAnJXMnIiAlIChkZXAsIGFfZGF0YVsndmFydmFscyddW2RlcF0sIGJfZGF0YVsndmFydmFscyddW2RlcF0pKQorCisgICAgY2hhbmdlZCwgYWRkZWQsIHJlbW92ZWQgPSBmaWxlX2NoZWNrc3Vtc19kaWZmKGFfZGF0YVsnZmlsZV9jaGVja3N1bV92YWx1ZXMnXSwgYl9kYXRhWydmaWxlX2NoZWNrc3VtX3ZhbHVlcyddKQorICAgIGlmIGNoYW5nZWQ6CisgICAgICAgIGZvciBmLCBvbGQsIG5ldyBpbiBjaGFuZ2VkOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiQ2hlY2tzdW0gZm9yIGZpbGUgJXMgY2hhbmdlZCBmcm9tICVzIHRvICVzIiAlIChmLCBvbGQsIG5ldykpCisgICAgaWYgYWRkZWQ6CisgICAgICAgIGZvciBmIGluIGFkZGVkOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiRGVwZW5kZW5jeSBvbiBjaGVja3N1bSBvZiBmaWxlICVzIHdhcyBhZGRlZCIgJSAoZikpCisgICAgaWYgcmVtb3ZlZDoKKyAgICAgICAgZm9yIGYgaW4gcmVtb3ZlZDoKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIkRlcGVuZGVuY3kgb24gY2hlY2tzdW0gb2YgZmlsZSAlcyB3YXMgcmVtb3ZlZCIgJSAoZikpCisKKworICAgIGlmIGxlbihhX2RhdGFbJ3J1bnRhc2tkZXBzJ10pICE9IGxlbihiX2RhdGFbJ3J1bnRhc2tkZXBzJ10pOgorICAgICAgICBjaGFuZ2VkID0gWyJOdW1iZXIgb2YgdGFzayBkZXBlbmRlbmNpZXMgY2hhbmdlZCJdCisgICAgZWxzZToKKyAgICAgICAgY2hhbmdlZCA9IFtdCisgICAgICAgIGZvciBpZHgsIHRhc2sgaW4gZW51bWVyYXRlKGFfZGF0YVsncnVudGFza2RlcHMnXSk6CisgICAgICAgICAgICBhID0gYV9kYXRhWydydW50YXNrZGVwcyddW2lkeF0KKyAgICAgICAgICAgIGIgPSBiX2RhdGFbJ3J1bnRhc2tkZXBzJ11baWR4XQorICAgICAgICAgICAgaWYgYV9kYXRhWydydW50YXNraGFzaGVzJ11bYV0gIT0gYl9kYXRhWydydW50YXNraGFzaGVzJ11bYl06CisgICAgICAgICAgICAgICAgY2hhbmdlZC5hcHBlbmQoIiVzIHdpdGggaGFzaCAlc1xuIGNoYW5nZWQgdG9cbiVzIHdpdGggaGFzaCAlcyIgJSAoYSwgYV9kYXRhWydydW50YXNraGFzaGVzJ11bYV0sIGIsIGJfZGF0YVsncnVudGFza2hhc2hlcyddW2JdKSkKKworICAgIGlmIGNoYW5nZWQ6CisgICAgICAgIG91dHB1dC5hcHBlbmQoInJ1bnRhc2tkZXBzIGNoYW5nZWQgZnJvbSAlcyB0byAlcyIgJSAoY2xlYW5fYmFzZXBhdGhzX2xpc3QoYV9kYXRhWydydW50YXNrZGVwcyddKSwgY2xlYW5fYmFzZXBhdGhzX2xpc3QoYl9kYXRhWydydW50YXNrZGVwcyddKSkpCisgICAgICAgIG91dHB1dC5hcHBlbmQoIlxuIi5qb2luKGNoYW5nZWQpKQorCisKKyAgICBpZiAncnVudGFza2hhc2hlcycgaW4gYV9kYXRhIGFuZCAncnVudGFza2hhc2hlcycgaW4gYl9kYXRhOgorICAgICAgICBhID0gYV9kYXRhWydydW50YXNraGFzaGVzJ10KKyAgICAgICAgYiA9IGJfZGF0YVsncnVudGFza2hhc2hlcyddCisgICAgICAgIGNoYW5nZWQsIGFkZGVkLCByZW1vdmVkID0gZGljdF9kaWZmKGEsIGIpCisgICAgICAgIGlmIGFkZGVkOgorICAgICAgICAgICAgZm9yIGRlcCBpbiBhZGRlZDoKKyAgICAgICAgICAgICAgICBiZGVwX2ZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgICAgICBpZiByZW1vdmVkOgorICAgICAgICAgICAgICAgICAgICBmb3IgYmRlcCBpbiByZW1vdmVkOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYltkZXBdID09IGFbYmRlcF06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgI291dHB1dC5hcHBlbmQoIkRlcGVuZGVuY3kgb24gdGFzayAlcyB3YXMgcmVwbGFjZWQgYnkgJXMgd2l0aCBzYW1lIGhhc2giICUgKGRlcCwgYmRlcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmRlcF9mb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBub3QgYmRlcF9mb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiRGVwZW5kZW5jeSBvbiB0YXNrICVzIHdhcyBhZGRlZCB3aXRoIGhhc2ggJXMiICUgKGNsZWFuX2Jhc2VwYXRoKGRlcCksIGJbZGVwXSkpCisgICAgICAgIGlmIHJlbW92ZWQ6CisgICAgICAgICAgICBmb3IgZGVwIGluIHJlbW92ZWQ6CisgICAgICAgICAgICAgICAgYWRlcF9mb3VuZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgaWYgYWRkZWQ6CisgICAgICAgICAgICAgICAgICAgIGZvciBhZGVwIGluIGFkZGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYlthZGVwXSA9PSBhW2RlcF06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgI291dHB1dC5hcHBlbmQoIkRlcGVuZGVuY3kgb24gdGFzayAlcyB3YXMgcmVwbGFjZWQgYnkgJXMgd2l0aCBzYW1lIGhhc2giICUgKGFkZXAsIGRlcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRlcF9mb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBub3QgYWRlcF9mb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiRGVwZW5kZW5jeSBvbiB0YXNrICVzIHdhcyByZW1vdmVkIHdpdGggaGFzaCAlcyIgJSAoY2xlYW5fYmFzZXBhdGgoZGVwKSwgYVtkZXBdKSkKKyAgICAgICAgaWYgY2hhbmdlZDoKKyAgICAgICAgICAgIGZvciBkZXAgaW4gY2hhbmdlZDoKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJIYXNoIGZvciBkZXBlbmRlbnQgdGFzayAlcyBjaGFuZ2VkIGZyb20gJXMgdG8gJXMiICUgKGNsZWFuX2Jhc2VwYXRoKGRlcCksIGFbZGVwXSwgYltkZXBdKSkKKyAgICAgICAgICAgICAgICBpZiBjYWxsYWJsZShyZWN1cnNlY2IpOgorICAgICAgICAgICAgICAgICAgICAjIElmIGEgZGVwZW5kZW50IGhhc2ggY2hhbmdlZCwgbWlnaHQgYXMgd2VsbCBwcmludCB0aGUgbGluZSBhYm92ZSBhbmQgdGhlbiBkZWZlciB0byB0aGUgY2hhbmdlcyBpbiAKKyAgICAgICAgICAgICAgICAgICAgIyB0aGF0IGhhc2ggc2luY2UgaW4gYWxsIGxpa2VseWhvb2QsIHRoZXkncmUgdGhlIHNhbWUgY2hhbmdlcyB0aGlzIHRhc2sgYWxzbyBzYXcuCisgICAgICAgICAgICAgICAgICAgIHJlY291dCA9IHJlY3Vyc2VjYihkZXAsIGFbZGVwXSwgYltkZXBdKQorICAgICAgICAgICAgICAgICAgICBpZiByZWNvdXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBbb3V0cHV0Wy0xXV0gKyByZWNvdXQKKworICAgIGFfdGFpbnQgPSBhX2RhdGEuZ2V0KCd0YWludCcsIE5vbmUpCisgICAgYl90YWludCA9IGJfZGF0YS5nZXQoJ3RhaW50JywgTm9uZSkKKyAgICBpZiBhX3RhaW50ICE9IGJfdGFpbnQ6CisgICAgICAgIG91dHB1dC5hcHBlbmQoIlRhaW50IChieSBmb3JjZWQvaW52YWxpZGF0ZWQgdGFzaykgY2hhbmdlZCBmcm9tICVzIHRvICVzIiAlIChhX3RhaW50LCBiX3RhaW50KSkKKworICAgIHJldHVybiBvdXRwdXQKKworCitkZWYgZHVtcF9zaWdmaWxlKGEpOgorICAgIG91dHB1dCA9IFtdCisKKyAgICBwMSA9IHBpY2tsZS5VbnBpY2tsZXIob3BlbihhLCAicmIiKSkKKyAgICBhX2RhdGEgPSBwMS5sb2FkKCkKKworICAgIG91dHB1dC5hcHBlbmQoImJhc2V3aGl0ZWxpc3Q6ICVzIiAlIChhX2RhdGFbJ2Jhc2V3aGl0ZWxpc3QnXSkpCisKKyAgICBvdXRwdXQuYXBwZW5kKCJ0YXNrd2hpdGVsaXN0OiAlcyIgJSAoYV9kYXRhWyd0YXNrd2hpdGVsaXN0J10pKQorCisgICAgb3V0cHV0LmFwcGVuZCgiVGFzayBkZXBlbmRlbmNpZXM6ICVzIiAlIChzb3J0ZWQoYV9kYXRhWyd0YXNrZGVwcyddKSkpCisKKyAgICBvdXRwdXQuYXBwZW5kKCJiYXNlaGFzaDogJXMiICUgKGFfZGF0YVsnYmFzZWhhc2gnXSkpCisKKyAgICBmb3IgZGVwIGluIGFfZGF0YVsnZ2VuZGVwcyddOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCJMaXN0IG9mIGRlcGVuZGVuY2llcyBmb3IgdmFyaWFibGUgJXMgaXMgJXMiICUgKGRlcCwgYV9kYXRhWydnZW5kZXBzJ11bZGVwXSkpCisKKyAgICBmb3IgZGVwIGluIGFfZGF0YVsndmFydmFscyddOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCJWYXJpYWJsZSAlcyB2YWx1ZSBpcyAlcyIgJSAoZGVwLCBhX2RhdGFbJ3ZhcnZhbHMnXVtkZXBdKSkKKworICAgIGlmICdydW50YXNrZGVwcycgaW4gYV9kYXRhOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCJUYXNrcyB0aGlzIHRhc2sgZGVwZW5kcyBvbjogJXMiICUgKGFfZGF0YVsncnVudGFza2RlcHMnXSkpCisKKyAgICBpZiAnZmlsZV9jaGVja3N1bV92YWx1ZXMnIGluIGFfZGF0YToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgiVGhpcyB0YXNrIGRlcGVuZHMgb24gdGhlIGNoZWNrc3VtcyBvZiBmaWxlczogJXMiICUgKGFfZGF0YVsnZmlsZV9jaGVja3N1bV92YWx1ZXMnXSkpCisKKyAgICBpZiAncnVudGFza2hhc2hlcycgaW4gYV9kYXRhOgorICAgICAgICBmb3IgZGVwIGluIGFfZGF0YVsncnVudGFza2hhc2hlcyddOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiSGFzaCBmb3IgZGVwZW5kZW50IHRhc2sgJXMgaXMgJXMiICUgKGRlcCwgYV9kYXRhWydydW50YXNraGFzaGVzJ11bZGVwXSkpCisKKyAgICBpZiAndGFpbnQnIGluIGFfZGF0YToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgiVGFpbnRlZCAoYnkgZm9yY2VkL2ludmFsaWRhdGVkIHRhc2spOiAlcyIgJSBhX2RhdGFbJ3RhaW50J10pCisKKyAgICBkYXRhID0gYV9kYXRhWydiYXNlaGFzaCddCisgICAgZm9yIGRlcCBpbiBhX2RhdGFbJ3J1bnRhc2tkZXBzJ106CisgICAgICAgIGRhdGEgPSBkYXRhICsgYV9kYXRhWydydW50YXNraGFzaGVzJ11bZGVwXQorCisgICAgZm9yIGMgaW4gYV9kYXRhWydmaWxlX2NoZWNrc3VtX3ZhbHVlcyddOgorICAgICAgICBkYXRhID0gZGF0YSArIGNbMV0KKworICAgIGlmICd0YWludCcgaW4gYV9kYXRhOgorICAgICAgICBkYXRhID0gZGF0YSArIGFfZGF0YVsndGFpbnQnXQorCisgICAgaCA9IGhhc2hsaWIubWQ1KGRhdGEpLmhleGRpZ2VzdCgpCisgICAgb3V0cHV0LmFwcGVuZCgiQ29tcHV0ZWQgSGFzaCBpcyAlcyIgJSBoKQorCisgICAgcmV0dXJuIG91dHB1dApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90YXNrZGF0YS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGFza2RhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZhYjcwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGFza2RhdGEucHkKQEAgLTAsMCArMSw2NTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnVGFza0RhdGEnIGltcGxlbWVudGF0aW9uCisKK1Rhc2sgZGF0YSBjb2xsZWN0aW9uIGFuZCBoYW5kbGluZworCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDYgIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgYmIKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuVGFza0RhdGEiKQorCitkZWYgcmVfbWF0Y2hfc3RyaW5ncyh0YXJnZXQsIHN0cmluZ3MpOgorICAgICIiIgorICAgIFdoZXRoZXIgb3Igbm90IHRoZSBzdHJpbmcgJ3RhcmdldCcgbWF0Y2hlcworICAgIGFueSBvbmUgc3RyaW5nIG9mIHRoZSBzdHJpbmdzIHdoaWNoIGNhbiBiZSByZWd1bGFyIGV4cHJlc3Npb24gc3RyaW5nCisgICAgIiIiCisgICAgcmV0dXJuIGFueShuYW1lID09IHRhcmdldCBvciByZS5tYXRjaChuYW1lLCB0YXJnZXQpCisgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBzdHJpbmdzKQorCitjbGFzcyBUYXNrRGF0YToKKyAgICAiIiIKKyAgICBCaXRCYWtlIFRhc2sgRGF0YSBpbXBsZW1lbnRhdGlvbgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhYm9ydCA9IFRydWUsIHRyeWFsdGNvbmZpZ3MgPSBGYWxzZSwgc2tpcGxpc3QgPSBOb25lLCBhbGxvd2luY29tcGxldGUgPSBGYWxzZSk6CisgICAgICAgIHNlbGYuYnVpbGRfbmFtZXNfaW5kZXggPSBbXQorICAgICAgICBzZWxmLnJ1bl9uYW1lc19pbmRleCA9IFtdCisgICAgICAgIHNlbGYuZm5faW5kZXggPSBbXQorCisgICAgICAgIHNlbGYuYnVpbGRfdGFyZ2V0cyA9IHt9CisgICAgICAgIHNlbGYucnVuX3RhcmdldHMgPSB7fQorCisgICAgICAgIHNlbGYuZXh0ZXJuYWxfdGFyZ2V0cyA9IFtdCisKKyAgICAgICAgc2VsZi50YXNrc19mbmlkID0gW10KKyAgICAgICAgc2VsZi50YXNrc19uYW1lID0gW10KKyAgICAgICAgc2VsZi50YXNrc190ZGVwZW5kcyA9IFtdCisgICAgICAgIHNlbGYudGFza3NfaWRlcGVuZHMgPSBbXQorICAgICAgICBzZWxmLnRhc2tzX2lyZGVwZW5kcyA9IFtdCisgICAgICAgICMgQ2FjaGUgdG8gc3BlZWQgdXAgdGFzayBJRCBsb29rdXBzCisgICAgICAgIHNlbGYudGFza3NfbG9va3VwID0ge30KKworICAgICAgICBzZWxmLmRlcGlkcyA9IHt9CisgICAgICAgIHNlbGYucmRlcGlkcyA9IHt9CisKKyAgICAgICAgc2VsZi5jb25zaWRlcl9tc2dzX2NhY2hlID0gW10KKworICAgICAgICBzZWxmLmZhaWxlZF9kZXBzID0gW10KKyAgICAgICAgc2VsZi5mYWlsZWRfcmRlcHMgPSBbXQorICAgICAgICBzZWxmLmZhaWxlZF9mbmlkcyA9IFtdCisKKyAgICAgICAgc2VsZi5hYm9ydCA9IGFib3J0CisgICAgICAgIHNlbGYudHJ5YWx0Y29uZmlncyA9IHRyeWFsdGNvbmZpZ3MKKyAgICAgICAgc2VsZi5hbGxvd2luY29tcGxldGUgPSBhbGxvd2luY29tcGxldGUKKworICAgICAgICBzZWxmLnNraXBsaXN0ID0gc2tpcGxpc3QKKworICAgIGRlZiBnZXRidWlsZF9pZChzZWxmLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhbiBJRCBudW1iZXIgZm9yIHRoZSBidWlsZCB0YXJnZXQgbmFtZS4KKyAgICAgICAgSWYgaXQgZG9lc24ndCBleGlzdCwgY3JlYXRlIG9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBuYW1lIGluIHNlbGYuYnVpbGRfbmFtZXNfaW5kZXg6CisgICAgICAgICAgICBzZWxmLmJ1aWxkX25hbWVzX2luZGV4LmFwcGVuZChuYW1lKQorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLmJ1aWxkX25hbWVzX2luZGV4KSAtIDEKKworICAgICAgICByZXR1cm4gc2VsZi5idWlsZF9uYW1lc19pbmRleC5pbmRleChuYW1lKQorCisgICAgZGVmIGdldHJ1bl9pZChzZWxmLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhbiBJRCBudW1iZXIgZm9yIHRoZSBydW4gdGFyZ2V0IG5hbWUuCisgICAgICAgIElmIGl0IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBvbmUuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgbmFtZSBpbiBzZWxmLnJ1bl9uYW1lc19pbmRleDoKKyAgICAgICAgICAgIHNlbGYucnVuX25hbWVzX2luZGV4LmFwcGVuZChuYW1lKQorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLnJ1bl9uYW1lc19pbmRleCkgLSAxCisKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuX25hbWVzX2luZGV4LmluZGV4KG5hbWUpCisKKyAgICBkZWYgZ2V0Zm5faWQoc2VsZiwgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYW4gSUQgbnVtYmVyIGZvciB0aGUgZmlsZW5hbWUuCisgICAgICAgIElmIGl0IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBvbmUuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgbmFtZSBpbiBzZWxmLmZuX2luZGV4OgorICAgICAgICAgICAgc2VsZi5mbl9pbmRleC5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIHJldHVybiBsZW4oc2VsZi5mbl9pbmRleCkgLSAxCisKKyAgICAgICAgcmV0dXJuIHNlbGYuZm5faW5kZXguaW5kZXgobmFtZSkKKworICAgIGRlZiBnZXR0YXNrX2lkcyhzZWxmLCBmbmlkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhbiBhcnJheSBvZiB0aGUgSUQgbnVtYmVycyBtYXRjaGluZyBhIGdpdmVuIGZuaWQuCisgICAgICAgICIiIgorICAgICAgICBpZHMgPSBbXQorICAgICAgICBpZiBmbmlkIGluIHNlbGYudGFza3NfbG9va3VwOgorICAgICAgICAgICAgZm9yIHRhc2sgaW4gc2VsZi50YXNrc19sb29rdXBbZm5pZF06CisgICAgICAgICAgICAgICAgaWRzLmFwcGVuZChzZWxmLnRhc2tzX2xvb2t1cFtmbmlkXVt0YXNrXSkKKyAgICAgICAgcmV0dXJuIGlkcworCisgICAgZGVmIGdldHRhc2tfaWRfZnJvbWZuaWQoc2VsZiwgZm5pZCwgdGFzayk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYW4gSUQgbnVtYmVyIGZvciB0aGUgdGFzayBtYXRjaGluZyBmbmlkIGFuZCB0YXNrLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgZm5pZCBpbiBzZWxmLnRhc2tzX2xvb2t1cDoKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gc2VsZi50YXNrc19sb29rdXBbZm5pZF06CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudGFza3NfbG9va3VwW2ZuaWRdW3Rhc2tdCisKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBnZXR0YXNrX2lkKHNlbGYsIGZuLCB0YXNrLCBjcmVhdGUgPSBUcnVlKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhbiBJRCBudW1iZXIgZm9yIHRoZSB0YXNrIG1hdGNoaW5nIGZuIGFuZCB0YXNrLgorICAgICAgICBJZiBpdCBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgb25lIGJ5IGRlZmF1bHQuCisgICAgICAgIE9wdGlvbmFsbHkgcmV0dXJuIE5vbmUgaW5zdGVhZC4KKyAgICAgICAgIiIiCisgICAgICAgIGZuaWQgPSBzZWxmLmdldGZuX2lkKGZuKQorCisgICAgICAgIGlmIGZuaWQgaW4gc2VsZi50YXNrc19sb29rdXA6CisgICAgICAgICAgICBpZiB0YXNrIGluIHNlbGYudGFza3NfbG9va3VwW2ZuaWRdOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnRhc2tzX2xvb2t1cFtmbmlkXVt0YXNrXQorCisgICAgICAgIGlmIG5vdCBjcmVhdGU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHNlbGYudGFza3NfbmFtZS5hcHBlbmQodGFzaykKKyAgICAgICAgc2VsZi50YXNrc19mbmlkLmFwcGVuZChmbmlkKQorICAgICAgICBzZWxmLnRhc2tzX3RkZXBlbmRzLmFwcGVuZChbXSkKKyAgICAgICAgc2VsZi50YXNrc19pZGVwZW5kcy5hcHBlbmQoW10pCisgICAgICAgIHNlbGYudGFza3NfaXJkZXBlbmRzLmFwcGVuZChbXSkKKworICAgICAgICBsaXN0aWQgPSBsZW4oc2VsZi50YXNrc19uYW1lKSAtIDEKKworICAgICAgICBpZiBmbmlkIG5vdCBpbiBzZWxmLnRhc2tzX2xvb2t1cDoKKyAgICAgICAgICAgIHNlbGYudGFza3NfbG9va3VwW2ZuaWRdID0ge30KKyAgICAgICAgc2VsZi50YXNrc19sb29rdXBbZm5pZF1bdGFza10gPSBsaXN0aWQKKworICAgICAgICByZXR1cm4gbGlzdGlkCisKKyAgICBkZWYgYWRkX3Rhc2tzKHNlbGYsIGZuLCBkYXRhQ2FjaGUpOgorICAgICAgICAiIiIKKyAgICAgICAgQWRkIHRhc2tzIGZvciBhIGdpdmVuIGZuIHRvIHRoZSBkYXRhYmFzZQorICAgICAgICAiIiIKKworICAgICAgICB0YXNrX2RlcHMgPSBkYXRhQ2FjaGUudGFza19kZXBzW2ZuXQorCisgICAgICAgIGZuaWQgPSBzZWxmLmdldGZuX2lkKGZuKQorCisgICAgICAgIGlmIGZuaWQgaW4gc2VsZi5mYWlsZWRfZm5pZHM6CisgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlRhc2tEYXRhIiwgIlRyeWluZyB0byByZS1hZGQgYSBmYWlsZWQgZmlsZT8gU29tZXRoaW5nIGlzIGJyb2tlbi4uLiIpCisKKyAgICAgICAgIyBDaGVjayBpZiB3ZSd2ZSBhbHJlYWR5IHNlZW4gdGhpcyBmbgorICAgICAgICBpZiBmbmlkIGluIHNlbGYudGFza3NfZm5pZDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZvciB0YXNrIGluIHRhc2tfZGVwc1sndGFza3MnXToKKworICAgICAgICAgICAgIyBXb3JrIG91dCB0YXNrIGRlcGVuZGVuY2llcworICAgICAgICAgICAgcGFyZW50aWRzID0gW10KKyAgICAgICAgICAgIGZvciBkZXAgaW4gdGFza19kZXBzWydwYXJlbnRzJ11bdGFza106CisgICAgICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiB0YXNrX2RlcHNbJ3Rhc2tzJ106CisgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICJOb3QgYWRkaW5nIGRlcGVuZGVueSBvZiAlcyBvbiAlcyBzaW5jZSAlcyBkb2VzIG5vdCBleGlzdCIgJSAodGFzaywgZGVwLCBkZXApKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHBhcmVudGlkID0gc2VsZi5nZXR0YXNrX2lkKGZuLCBkZXApCisgICAgICAgICAgICAgICAgcGFyZW50aWRzLmFwcGVuZChwYXJlbnRpZCkKKyAgICAgICAgICAgIHRhc2tpZCA9IHNlbGYuZ2V0dGFza19pZChmbiwgdGFzaykKKyAgICAgICAgICAgIHNlbGYudGFza3NfdGRlcGVuZHNbdGFza2lkXS5leHRlbmQocGFyZW50aWRzKQorCisgICAgICAgICAgICAjIFRvdWNoIGFsbCBpbnRlcnRhc2sgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBpZiAnZGVwZW5kcycgaW4gdGFza19kZXBzIGFuZCB0YXNrIGluIHRhc2tfZGVwc1snZGVwZW5kcyddOgorICAgICAgICAgICAgICAgIGlkcyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiB0YXNrX2RlcHNbJ2RlcGVuZHMnXVt0YXNrXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBpZiBkZXA6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAiOiIgbm90IGluIGRlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlRhc2tEYXRhIiwgIkVycm9yIGZvciAlcywgZGVwZW5kZW5jeSAlcyBkb2VzIG5vdCBjb250YWluICc6JyBjaGFyYWN0ZXJcbi4gVGFzayAnZGVwZW5kcycgc2hvdWxkIGJlIHNwZWNpZmllZCBpbiB0aGUgZm9ybSAncGFja2FnZW5hbWU6dGFzayciICUgKGZuLCBkZXApKQorICAgICAgICAgICAgICAgICAgICAgICAgaWRzLmFwcGVuZCgoKHNlbGYuZ2V0YnVpbGRfaWQoZGVwLnNwbGl0KCI6IilbMF0pKSwgZGVwLnNwbGl0KCI6IilbMV0pKQorICAgICAgICAgICAgICAgIHNlbGYudGFza3NfaWRlcGVuZHNbdGFza2lkXS5leHRlbmQoaWRzKQorICAgICAgICAgICAgaWYgJ3JkZXBlbmRzJyBpbiB0YXNrX2RlcHMgYW5kIHRhc2sgaW4gdGFza19kZXBzWydyZGVwZW5kcyddOgorICAgICAgICAgICAgICAgIGlkcyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiB0YXNrX2RlcHNbJ3JkZXBlbmRzJ11bdGFza10uc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgIjoiIG5vdCBpbiBkZXA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJUYXNrRGF0YSIsICJFcnJvciBmb3IgJXMsIGRlcGVuZGVuY3kgJXMgZG9lcyBub3QgY29udGFpbiAnOicgY2hhcmFjdGVyXG4uIFRhc2sgJ3JkZXBlbmRzJyBzaG91bGQgYmUgc3BlY2lmaWVkIGluIHRoZSBmb3JtICdwYWNrYWdlbmFtZTp0YXNrJyIgJSAoZm4sIGRlcCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZHMuYXBwZW5kKCgoc2VsZi5nZXRydW5faWQoZGVwLnNwbGl0KCI6IilbMF0pKSwgZGVwLnNwbGl0KCI6IilbMV0pKQorICAgICAgICAgICAgICAgIHNlbGYudGFza3NfaXJkZXBlbmRzW3Rhc2tpZF0uZXh0ZW5kKGlkcykKKworCisgICAgICAgICMgV29yayBvdXQgYnVpbGQgZGVwZW5kZW5jaWVzCisgICAgICAgIGlmIG5vdCBmbmlkIGluIHNlbGYuZGVwaWRzOgorICAgICAgICAgICAgZGVwZW5kaWRzID0ge30KKyAgICAgICAgICAgIGZvciBkZXBlbmQgaW4gZGF0YUNhY2hlLmRlcHNbZm5dOgorICAgICAgICAgICAgICAgIGRlcGVuZGlkc1tzZWxmLmdldGJ1aWxkX2lkKGRlcGVuZCldID0gTm9uZQorICAgICAgICAgICAgc2VsZi5kZXBpZHNbZm5pZF0gPSBkZXBlbmRpZHMua2V5cygpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkFkZGVkIGRlcGVuZGVuY2llcyAlcyBmb3IgJXMiLCBzdHIoZGF0YUNhY2hlLmRlcHNbZm5dKSwgZm4pCisKKyAgICAgICAgIyBXb3JrIG91dCBydW50aW1lIGRlcGVuZGVuY2llcworICAgICAgICBpZiBub3QgZm5pZCBpbiBzZWxmLnJkZXBpZHM6CisgICAgICAgICAgICByZGVwZW5kaWRzID0ge30KKyAgICAgICAgICAgIHJkZXBlbmRzID0gZGF0YUNhY2hlLnJ1bmRlcHNbZm5dCisgICAgICAgICAgICBycmVjcyA9IGRhdGFDYWNoZS5ydW5yZWNzW2ZuXQorICAgICAgICAgICAgcmRlcGVuZGxpc3QgPSBbXQorICAgICAgICAgICAgcnJlY2xpc3QgPSBbXQorICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgZm9yIHJkZXBlbmQgaW4gcmRlcGVuZHNbcGFja2FnZV06CisgICAgICAgICAgICAgICAgICAgIHJkZXBlbmRsaXN0LmFwcGVuZChyZGVwZW5kKQorICAgICAgICAgICAgICAgICAgICByZGVwZW5kaWRzW3NlbGYuZ2V0cnVuX2lkKHJkZXBlbmQpXSA9IE5vbmUKKyAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIHJyZWNzOgorICAgICAgICAgICAgICAgIGZvciByZGVwZW5kIGluIHJyZWNzW3BhY2thZ2VdOgorICAgICAgICAgICAgICAgICAgICBycmVjbGlzdC5hcHBlbmQocmRlcGVuZCkKKyAgICAgICAgICAgICAgICAgICAgcmRlcGVuZGlkc1tzZWxmLmdldHJ1bl9pZChyZGVwZW5kKV0gPSBOb25lCisgICAgICAgICAgICBpZiByZGVwZW5kbGlzdDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkFkZGVkIHJ1bnRpbWUgZGVwZW5kZW5jaWVzICVzIGZvciAlcyIsIHN0cihyZGVwZW5kbGlzdCksIGZuKQorICAgICAgICAgICAgaWYgcnJlY2xpc3Q6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJBZGRlZCBydW50aW1lIHJlY29tbWVuZGF0aW9ucyAlcyBmb3IgJXMiLCBzdHIocnJlY2xpc3QpLCBmbikKKyAgICAgICAgICAgIHNlbGYucmRlcGlkc1tmbmlkXSA9IHJkZXBlbmRpZHMua2V5cygpCisKKyAgICAgICAgZm9yIGRlcCBpbiBzZWxmLmRlcGlkc1tmbmlkXToKKyAgICAgICAgICAgIGlmIGRlcCBpbiBzZWxmLmZhaWxlZF9kZXBzOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbF9mbmlkKGZuaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGZvciBkZXAgaW4gc2VsZi5yZGVwaWRzW2ZuaWRdOgorICAgICAgICAgICAgaWYgZGVwIGluIHNlbGYuZmFpbGVkX3JkZXBzOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbF9mbmlkKGZuaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgaGF2ZV9idWlsZF90YXJnZXQoc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgIiIiCisgICAgICAgIEhhdmUgd2UgYSBidWlsZCB0YXJnZXQgbWF0Y2hpbmcgdGhpcyBuYW1lPworICAgICAgICAiIiIKKyAgICAgICAgdGFyZ2V0aWQgPSBzZWxmLmdldGJ1aWxkX2lkKHRhcmdldCkKKworICAgICAgICBpZiB0YXJnZXRpZCBpbiBzZWxmLmJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBoYXZlX3J1bnRpbWVfdGFyZ2V0KHNlbGYsIHRhcmdldCk6CisgICAgICAgICIiIgorICAgICAgICBIYXZlIHdlIGEgcnVudGltZSB0YXJnZXQgbWF0Y2hpbmcgdGhpcyBuYW1lPworICAgICAgICAiIiIKKyAgICAgICAgdGFyZ2V0aWQgPSBzZWxmLmdldHJ1bl9pZCh0YXJnZXQpCisKKyAgICAgICAgaWYgdGFyZ2V0aWQgaW4gc2VsZi5ydW5fdGFyZ2V0czoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGFkZF9idWlsZF90YXJnZXQoc2VsZiwgZm4sIGl0ZW0pOgorICAgICAgICAiIiIKKyAgICAgICAgQWRkIGEgYnVpbGQgdGFyZ2V0LgorICAgICAgICBJZiBhbHJlYWR5IHByZXNlbnQsIGFwcGVuZCB0aGUgcHJvdmlkZXIgZm4gdG8gdGhlIGxpc3QKKyAgICAgICAgIiIiCisgICAgICAgIHRhcmdldGlkID0gc2VsZi5nZXRidWlsZF9pZChpdGVtKQorICAgICAgICBmbmlkID0gc2VsZi5nZXRmbl9pZChmbikKKworICAgICAgICBpZiB0YXJnZXRpZCBpbiBzZWxmLmJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICBpZiBmbmlkIGluIHNlbGYuYnVpbGRfdGFyZ2V0c1t0YXJnZXRpZF06CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLmJ1aWxkX3RhcmdldHNbdGFyZ2V0aWRdLmFwcGVuZChmbmlkKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuYnVpbGRfdGFyZ2V0c1t0YXJnZXRpZF0gPSBbZm5pZF0KKworICAgIGRlZiBhZGRfcnVudGltZV90YXJnZXQoc2VsZiwgZm4sIGl0ZW0pOgorICAgICAgICAiIiIKKyAgICAgICAgQWRkIGEgcnVudGltZSB0YXJnZXQuCisgICAgICAgIElmIGFscmVhZHkgcHJlc2VudCwgYXBwZW5kIHRoZSBwcm92aWRlciBmbiB0byB0aGUgbGlzdAorICAgICAgICAiIiIKKyAgICAgICAgdGFyZ2V0aWQgPSBzZWxmLmdldHJ1bl9pZChpdGVtKQorICAgICAgICBmbmlkID0gc2VsZi5nZXRmbl9pZChmbikKKworICAgICAgICBpZiB0YXJnZXRpZCBpbiBzZWxmLnJ1bl90YXJnZXRzOgorICAgICAgICAgICAgaWYgZm5pZCBpbiBzZWxmLnJ1bl90YXJnZXRzW3RhcmdldGlkXToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYucnVuX3RhcmdldHNbdGFyZ2V0aWRdLmFwcGVuZChmbmlkKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYucnVuX3RhcmdldHNbdGFyZ2V0aWRdID0gW2ZuaWRdCisKKyAgICBkZWYgbWFya19leHRlcm5hbF90YXJnZXQoc2VsZiwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBNYXJrIGEgYnVpbGQgdGFyZ2V0IGFzIGJlaW5nIGV4dGVybmFsbHkgcmVxdWVzdGVkCisgICAgICAgICIiIgorICAgICAgICB0YXJnZXRpZCA9IHNlbGYuZ2V0YnVpbGRfaWQoaXRlbSkKKworICAgICAgICBpZiB0YXJnZXRpZCBub3QgaW4gc2VsZi5leHRlcm5hbF90YXJnZXRzOgorICAgICAgICAgICAgc2VsZi5leHRlcm5hbF90YXJnZXRzLmFwcGVuZCh0YXJnZXRpZCkKKworICAgIGRlZiBnZXRfdW5yZXNvbHZlZF9idWlsZF90YXJnZXRzKHNlbGYsIGRhdGFDYWNoZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIGJ1aWxkIHRhcmdldHMgd2hvJ3MgcHJvdmlkZXJzCisgICAgICAgIGFyZSB1bmtub3duLgorICAgICAgICAiIiIKKyAgICAgICAgdW5yZXNvbHZlZCA9IFtdCisgICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5idWlsZF9uYW1lc19pbmRleDoKKyAgICAgICAgICAgIGlmIHJlX21hdGNoX3N0cmluZ3ModGFyZ2V0LCBkYXRhQ2FjaGUuaWdub3JlZF9kZXBlbmRlbmNpZXMpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBzZWxmLmJ1aWxkX25hbWVzX2luZGV4LmluZGV4KHRhcmdldCkgaW4gc2VsZi5mYWlsZWRfZGVwczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbm90IHNlbGYuaGF2ZV9idWlsZF90YXJnZXQodGFyZ2V0KToKKyAgICAgICAgICAgICAgICB1bnJlc29sdmVkLmFwcGVuZCh0YXJnZXQpCisgICAgICAgIHJldHVybiB1bnJlc29sdmVkCisKKyAgICBkZWYgZ2V0X3VucmVzb2x2ZWRfcnVuX3RhcmdldHMoc2VsZiwgZGF0YUNhY2hlKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgcnVudGltZSB0YXJnZXRzIHdobydzIHByb3ZpZGVycworICAgICAgICBhcmUgdW5rbm93bi4KKyAgICAgICAgIiIiCisgICAgICAgIHVucmVzb2x2ZWQgPSBbXQorICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYucnVuX25hbWVzX2luZGV4OgorICAgICAgICAgICAgaWYgcmVfbWF0Y2hfc3RyaW5ncyh0YXJnZXQsIGRhdGFDYWNoZS5pZ25vcmVkX2RlcGVuZGVuY2llcyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHNlbGYucnVuX25hbWVzX2luZGV4LmluZGV4KHRhcmdldCkgaW4gc2VsZi5mYWlsZWRfcmRlcHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmhhdmVfcnVudGltZV90YXJnZXQodGFyZ2V0KToKKyAgICAgICAgICAgICAgICB1bnJlc29sdmVkLmFwcGVuZCh0YXJnZXQpCisgICAgICAgIHJldHVybiB1bnJlc29sdmVkCisKKyAgICBkZWYgZ2V0X3Byb3ZpZGVyKHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBwcm92aWRlcnMgb2YgaXRlbQorICAgICAgICAiIiIKKyAgICAgICAgdGFyZ2V0aWQgPSBzZWxmLmdldGJ1aWxkX2lkKGl0ZW0pCisKKyAgICAgICAgcmV0dXJuIHNlbGYuYnVpbGRfdGFyZ2V0c1t0YXJnZXRpZF0KKworICAgIGRlZiBnZXRfZGVwZW5kZWVzKHNlbGYsIGl0ZW1pZCk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIHRhcmdldHMgd2hpY2ggZGVwZW5kIG9uIGl0ZW0KKyAgICAgICAgIiIiCisgICAgICAgIGRlcGVuZGVlcyA9IFtdCisgICAgICAgIGZvciBmbmlkIGluIHNlbGYuZGVwaWRzOgorICAgICAgICAgICAgaWYgaXRlbWlkIGluIHNlbGYuZGVwaWRzW2ZuaWRdOgorICAgICAgICAgICAgICAgIGRlcGVuZGVlcy5hcHBlbmQoZm5pZCkKKyAgICAgICAgcmV0dXJuIGRlcGVuZGVlcworCisgICAgZGVmIGdldF9kZXBlbmRlZXNfc3RyKHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiB0YXJnZXRzIHdoaWNoIGRlcGVuZCBvbiBpdGVtIGFzIGEgdXNlciByZWFkYWJsZSBzdHJpbmcKKyAgICAgICAgIiIiCisgICAgICAgIGl0ZW1pZCA9IHNlbGYuZ2V0YnVpbGRfaWQoaXRlbSkKKyAgICAgICAgZGVwZW5kZWVzID0gW10KKyAgICAgICAgZm9yIGZuaWQgaW4gc2VsZi5kZXBpZHM6CisgICAgICAgICAgICBpZiBpdGVtaWQgaW4gc2VsZi5kZXBpZHNbZm5pZF06CisgICAgICAgICAgICAgICAgZGVwZW5kZWVzLmFwcGVuZChzZWxmLmZuX2luZGV4W2ZuaWRdKQorICAgICAgICByZXR1cm4gZGVwZW5kZWVzCisKKyAgICBkZWYgZ2V0X3JkZXBlbmRlZXMoc2VsZiwgaXRlbWlkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgdGFyZ2V0cyB3aGljaCBkZXBlbmQgb24gcnVudGltZSBpdGVtCisgICAgICAgICIiIgorICAgICAgICBkZXBlbmRlZXMgPSBbXQorICAgICAgICBmb3IgZm5pZCBpbiBzZWxmLnJkZXBpZHM6CisgICAgICAgICAgICBpZiBpdGVtaWQgaW4gc2VsZi5yZGVwaWRzW2ZuaWRdOgorICAgICAgICAgICAgICAgIGRlcGVuZGVlcy5hcHBlbmQoZm5pZCkKKyAgICAgICAgcmV0dXJuIGRlcGVuZGVlcworCisgICAgZGVmIGdldF9yZGVwZW5kZWVzX3N0cihzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgdGFyZ2V0cyB3aGljaCBkZXBlbmQgb24gcnVudGltZSBpdGVtIGFzIGEgdXNlciByZWFkYWJsZSBzdHJpbmcKKyAgICAgICAgIiIiCisgICAgICAgIGl0ZW1pZCA9IHNlbGYuZ2V0cnVuX2lkKGl0ZW0pCisgICAgICAgIGRlcGVuZGVlcyA9IFtdCisgICAgICAgIGZvciBmbmlkIGluIHNlbGYucmRlcGlkczoKKyAgICAgICAgICAgIGlmIGl0ZW1pZCBpbiBzZWxmLnJkZXBpZHNbZm5pZF06CisgICAgICAgICAgICAgICAgZGVwZW5kZWVzLmFwcGVuZChzZWxmLmZuX2luZGV4W2ZuaWRdKQorICAgICAgICByZXR1cm4gZGVwZW5kZWVzCisKKyAgICBkZWYgZ2V0X3JlYXNvbnMoc2VsZiwgaXRlbSwgcnVudGltZT1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBHZXQgdGhlIHJlYXNvbihzKSBmb3IgYW4gaXRlbSBub3QgYmVpbmcgcHJvdmlkZWQsIGlmIGFueQorICAgICAgICAiIiIKKyAgICAgICAgcmVhc29ucyA9IFtdCisgICAgICAgIGlmIHNlbGYuc2tpcGxpc3Q6CisgICAgICAgICAgICBmb3IgZm4gaW4gc2VsZi5za2lwbGlzdDoKKyAgICAgICAgICAgICAgICBza2lwaXRlbSA9IHNlbGYuc2tpcGxpc3RbZm5dCisgICAgICAgICAgICAgICAgaWYgc2tpcGl0ZW0ucG4gPT0gaXRlbToKKyAgICAgICAgICAgICAgICAgICAgcmVhc29ucy5hcHBlbmQoIiVzIHdhcyBza2lwcGVkOiAlcyIgJSAoc2tpcGl0ZW0ucG4sIHNraXBpdGVtLnNraXByZWFzb24pKQorICAgICAgICAgICAgICAgIGVsaWYgcnVudGltZSBhbmQgaXRlbSBpbiBza2lwaXRlbS5ycHJvdmlkZXM6CisgICAgICAgICAgICAgICAgICAgIHJlYXNvbnMuYXBwZW5kKCIlcyBSUFJPVklERVMgJXMgYnV0IHdhcyBza2lwcGVkOiAlcyIgJSAoc2tpcGl0ZW0ucG4sIGl0ZW0sIHNraXBpdGVtLnNraXByZWFzb24pKQorICAgICAgICAgICAgICAgIGVsaWYgbm90IHJ1bnRpbWUgYW5kIGl0ZW0gaW4gc2tpcGl0ZW0ucHJvdmlkZXM6CisgICAgICAgICAgICAgICAgICAgIHJlYXNvbnMuYXBwZW5kKCIlcyBQUk9WSURFUyAlcyBidXQgd2FzIHNraXBwZWQ6ICVzIiAlIChza2lwaXRlbS5wbiwgaXRlbSwgc2tpcGl0ZW0uc2tpcHJlYXNvbikpCisgICAgICAgIHJldHVybiByZWFzb25zCisKKyAgICBkZWYgZ2V0X2Nsb3NlX21hdGNoZXMoc2VsZiwgaXRlbSwgcHJvdmlkZXJfbGlzdCk6CisgICAgICAgIGltcG9ydCBkaWZmbGliCisgICAgICAgIGlmIHNlbGYuc2tpcGxpc3Q6CisgICAgICAgICAgICBza2lwcGVkID0gW10KKyAgICAgICAgICAgIGZvciBmbiBpbiBzZWxmLnNraXBsaXN0OgorICAgICAgICAgICAgICAgIHNraXBwZWQuYXBwZW5kKHNlbGYuc2tpcGxpc3RbZm5dLnBuKQorICAgICAgICAgICAgZnVsbF9saXN0ID0gcHJvdmlkZXJfbGlzdCArIHNraXBwZWQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1bGxfbGlzdCA9IHByb3ZpZGVyX2xpc3QKKyAgICAgICAgcmV0dXJuIGRpZmZsaWIuZ2V0X2Nsb3NlX21hdGNoZXMoaXRlbSwgZnVsbF9saXN0LCBjdXRvZmY9MC43KQorCisgICAgZGVmIGFkZF9wcm92aWRlcihzZWxmLCBjZmdEYXRhLCBkYXRhQ2FjaGUsIGl0ZW0pOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFkZF9wcm92aWRlcl9pbnRlcm5hbChjZmdEYXRhLCBkYXRhQ2FjaGUsIGl0ZW0pCisgICAgICAgIGV4Y2VwdCBiYi5wcm92aWRlcnMuTm9Qcm92aWRlcjoKKyAgICAgICAgICAgIGlmIHNlbGYuYWJvcnQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX2J1aWxkdGFyZ2V0KHNlbGYuZ2V0YnVpbGRfaWQoaXRlbSkpCisKKyAgICAgICAgc2VsZi5tYXJrX2V4dGVybmFsX3RhcmdldChpdGVtKQorCisgICAgZGVmIGFkZF9wcm92aWRlcl9pbnRlcm5hbChzZWxmLCBjZmdEYXRhLCBkYXRhQ2FjaGUsIGl0ZW0pOgorICAgICAgICAiIiIKKyAgICAgICAgQWRkIHRoZSBwcm92aWRlcnMgb2YgaXRlbSB0byB0aGUgdGFzayBkYXRhCisgICAgICAgIE1hcmsgZW50cmllcyB3ZXJlIHNwZWNpZmljYWxseSBhZGRlZCBleHRlcm5hbGx5IGFzIGFnYWluc3QgZGVwZW5kZW5jaWVzCisgICAgICAgIGFkZGVkIGludGVybmFsbHkgZHVyaW5nIGRlcGVuZGVuY3kgcmVzb2x1dGlvbgorICAgICAgICAiIiIKKworICAgICAgICBpZiByZV9tYXRjaF9zdHJpbmdzKGl0ZW0sIGRhdGFDYWNoZS5pZ25vcmVkX2RlcGVuZGVuY2llcyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3QgaXRlbSBpbiBkYXRhQ2FjaGUucHJvdmlkZXJzOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Ob1Byb3ZpZGVyKGl0ZW0sIGRlcGVuZGVlcz1zZWxmLmdldF9kZXBlbmRlZXNfc3RyKGl0ZW0pLCByZWFzb25zPXNlbGYuZ2V0X3JlYXNvbnMoaXRlbSksIGNsb3NlX21hdGNoZXM9c2VsZi5nZXRfY2xvc2VfbWF0Y2hlcyhpdGVtLCBkYXRhQ2FjaGUucHJvdmlkZXJzLmtleXMoKSkpLCBjZmdEYXRhKQorICAgICAgICAgICAgcmFpc2UgYmIucHJvdmlkZXJzLk5vUHJvdmlkZXIoaXRlbSkKKworICAgICAgICBpZiBzZWxmLmhhdmVfYnVpbGRfdGFyZ2V0KGl0ZW0pOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYWxsX3AgPSBkYXRhQ2FjaGUucHJvdmlkZXJzW2l0ZW1dCisKKyAgICAgICAgZWxpZ2libGUsIGZvdW5kVW5pcXVlID0gYmIucHJvdmlkZXJzLmZpbHRlclByb3ZpZGVycyhhbGxfcCwgaXRlbSwgY2ZnRGF0YSwgZGF0YUNhY2hlKQorICAgICAgICBlbGlnaWJsZSA9IFtwIGZvciBwIGluIGVsaWdpYmxlIGlmIG5vdCBzZWxmLmdldGZuX2lkKHApIGluIHNlbGYuZmFpbGVkX2ZuaWRzXQorCisgICAgICAgIGlmIG5vdCBlbGlnaWJsZToKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTm9Qcm92aWRlcihpdGVtLCBkZXBlbmRlZXM9c2VsZi5nZXRfZGVwZW5kZWVzX3N0cihpdGVtKSwgcmVhc29ucz1bIk5vIGVsaWdpYmxlIFBST1ZJREVScyBleGlzdCBmb3IgJyVzJyIgJSBpdGVtXSksIGNmZ0RhdGEpCisgICAgICAgICAgICByYWlzZSBiYi5wcm92aWRlcnMuTm9Qcm92aWRlcihpdGVtKQorCisgICAgICAgIGlmIGxlbihlbGlnaWJsZSkgPiAxIGFuZCBmb3VuZFVuaXF1ZSA9PSBGYWxzZToKKyAgICAgICAgICAgIGlmIGl0ZW0gbm90IGluIHNlbGYuY29uc2lkZXJfbXNnc19jYWNoZToKKyAgICAgICAgICAgICAgICBwcm92aWRlcnNfbGlzdCA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGZuIGluIGVsaWdpYmxlOgorICAgICAgICAgICAgICAgICAgICBwcm92aWRlcnNfbGlzdC5hcHBlbmQoZGF0YUNhY2hlLnBrZ19mbltmbl0pCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NdWx0aXBsZVByb3ZpZGVycyhpdGVtLCBwcm92aWRlcnNfbGlzdCksIGNmZ0RhdGEpCisgICAgICAgICAgICBzZWxmLmNvbnNpZGVyX21zZ3NfY2FjaGUuYXBwZW5kKGl0ZW0pCisKKyAgICAgICAgZm9yIGZuIGluIGVsaWdpYmxlOgorICAgICAgICAgICAgZm5pZCA9IHNlbGYuZ2V0Zm5faWQoZm4pCisgICAgICAgICAgICBpZiBmbmlkIGluIHNlbGYuZmFpbGVkX2ZuaWRzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgImFkZGluZyAlcyB0byBzYXRpc2Z5ICVzIiwgZm4sIGl0ZW0pCisgICAgICAgICAgICBzZWxmLmFkZF9idWlsZF90YXJnZXQoZm4sIGl0ZW0pCisgICAgICAgICAgICBzZWxmLmFkZF90YXNrcyhmbiwgZGF0YUNhY2hlKQorCisKKyAgICAgICAgICAgICNpdGVtID0gZGF0YUNhY2hlLnBrZ19mbltmbl0KKworICAgIGRlZiBhZGRfcnByb3ZpZGVyKHNlbGYsIGNmZ0RhdGEsIGRhdGFDYWNoZSwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBBZGQgdGhlIHJ1bnRpbWUgcHJvdmlkZXJzIG9mIGl0ZW0gdG8gdGhlIHRhc2sgZGF0YQorICAgICAgICAodGFrZXMgaXRlbSBuYW1lcyBmcm9tIFJERVBFTkRTL1BBQ0tBR0VTIG5hbWVzcGFjZSkKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgcmVfbWF0Y2hfc3RyaW5ncyhpdGVtLCBkYXRhQ2FjaGUuaWdub3JlZF9kZXBlbmRlbmNpZXMpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5oYXZlX3J1bnRpbWVfdGFyZ2V0KGl0ZW0pOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYWxsX3AgPSBiYi5wcm92aWRlcnMuZ2V0UnVudGltZVByb3ZpZGVycyhkYXRhQ2FjaGUsIGl0ZW0pCisKKyAgICAgICAgaWYgbm90IGFsbF9wOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Ob1Byb3ZpZGVyKGl0ZW0sIHJ1bnRpbWU9VHJ1ZSwgZGVwZW5kZWVzPXNlbGYuZ2V0X3JkZXBlbmRlZXNfc3RyKGl0ZW0pLCByZWFzb25zPXNlbGYuZ2V0X3JlYXNvbnMoaXRlbSwgVHJ1ZSkpLCBjZmdEYXRhKQorICAgICAgICAgICAgcmFpc2UgYmIucHJvdmlkZXJzLk5vUlByb3ZpZGVyKGl0ZW0pCisKKyAgICAgICAgZWxpZ2libGUsIG51bWJlclByZWZlcnJlZCA9IGJiLnByb3ZpZGVycy5maWx0ZXJQcm92aWRlcnNSdW5UaW1lKGFsbF9wLCBpdGVtLCBjZmdEYXRhLCBkYXRhQ2FjaGUpCisgICAgICAgIGVsaWdpYmxlID0gW3AgZm9yIHAgaW4gZWxpZ2libGUgaWYgbm90IHNlbGYuZ2V0Zm5faWQocCkgaW4gc2VsZi5mYWlsZWRfZm5pZHNdCisKKyAgICAgICAgaWYgbm90IGVsaWdpYmxlOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Ob1Byb3ZpZGVyKGl0ZW0sIHJ1bnRpbWU9VHJ1ZSwgZGVwZW5kZWVzPXNlbGYuZ2V0X3JkZXBlbmRlZXNfc3RyKGl0ZW0pLCByZWFzb25zPVsiTm8gZWxpZ2libGUgUlBST1ZJREVScyBleGlzdCBmb3IgJyVzJyIgJSBpdGVtXSksIGNmZ0RhdGEpCisgICAgICAgICAgICByYWlzZSBiYi5wcm92aWRlcnMuTm9SUHJvdmlkZXIoaXRlbSkKKworICAgICAgICBpZiBsZW4oZWxpZ2libGUpID4gMSBhbmQgbnVtYmVyUHJlZmVycmVkID09IDA6CisgICAgICAgICAgICBpZiBpdGVtIG5vdCBpbiBzZWxmLmNvbnNpZGVyX21zZ3NfY2FjaGU6CisgICAgICAgICAgICAgICAgcHJvdmlkZXJzX2xpc3QgPSBbXQorICAgICAgICAgICAgICAgIGZvciBmbiBpbiBlbGlnaWJsZToKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJzX2xpc3QuYXBwZW5kKGRhdGFDYWNoZS5wa2dfZm5bZm5dKQorICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTXVsdGlwbGVQcm92aWRlcnMoaXRlbSwgcHJvdmlkZXJzX2xpc3QsIHJ1bnRpbWU9VHJ1ZSksIGNmZ0RhdGEpCisgICAgICAgICAgICBzZWxmLmNvbnNpZGVyX21zZ3NfY2FjaGUuYXBwZW5kKGl0ZW0pCisKKyAgICAgICAgaWYgbnVtYmVyUHJlZmVycmVkID4gMToKKyAgICAgICAgICAgIGlmIGl0ZW0gbm90IGluIHNlbGYuY29uc2lkZXJfbXNnc19jYWNoZToKKyAgICAgICAgICAgICAgICBwcm92aWRlcnNfbGlzdCA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGZuIGluIGVsaWdpYmxlOgorICAgICAgICAgICAgICAgICAgICBwcm92aWRlcnNfbGlzdC5hcHBlbmQoZGF0YUNhY2hlLnBrZ19mbltmbl0pCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NdWx0aXBsZVByb3ZpZGVycyhpdGVtLCBwcm92aWRlcnNfbGlzdCwgcnVudGltZT1UcnVlKSwgY2ZnRGF0YSkKKyAgICAgICAgICAgIHNlbGYuY29uc2lkZXJfbXNnc19jYWNoZS5hcHBlbmQoaXRlbSkKKyAgICAgICAgICAgIHJhaXNlIGJiLnByb3ZpZGVycy5NdWx0aXBsZVJQcm92aWRlcihpdGVtKQorCisgICAgICAgICMgcnVuIHRocm91Z2ggdGhlIGxpc3QgdW50aWwgd2UgZmluZCBvbmUgdGhhdCB3ZSBjYW4gYnVpbGQKKyAgICAgICAgZm9yIGZuIGluIGVsaWdpYmxlOgorICAgICAgICAgICAgZm5pZCA9IHNlbGYuZ2V0Zm5faWQoZm4pCisgICAgICAgICAgICBpZiBmbmlkIGluIHNlbGYuZmFpbGVkX2ZuaWRzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgImFkZGluZyAnJXMnIHRvIHNhdGlzZnkgcnVudGltZSAnJXMnIiwgZm4sIGl0ZW0pCisgICAgICAgICAgICBzZWxmLmFkZF9ydW50aW1lX3RhcmdldChmbiwgaXRlbSkKKyAgICAgICAgICAgIHNlbGYuYWRkX3Rhc2tzKGZuLCBkYXRhQ2FjaGUpCisKKyAgICBkZWYgZmFpbF9mbmlkKHNlbGYsIGZuaWQsIG1pc3NpbmdfbGlzdD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIE1hcmsgYSBmaWxlIGFzIGZhaWxlZCAodW5idWlsZGFibGUpCisgICAgICAgIFJlbW92ZSBhbnkgcmVmZXJlbmNlcyBmcm9tIGJ1aWxkIGFuZCBydW50aW1lIHByb3ZpZGVyIGxpc3RzCisKKyAgICAgICAgbWlzc2luZ19saXN0LCBBIGxpc3Qgb2YgbWlzc2luZyByZXF1aXJlbWVudHMgZm9yIHRoaXMgdGFyZ2V0CisgICAgICAgICIiIgorICAgICAgICBpZiBmbmlkIGluIHNlbGYuZmFpbGVkX2ZuaWRzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG5vdCBtaXNzaW5nX2xpc3Q6CisgICAgICAgICAgICBtaXNzaW5nX2xpc3QgPSBbXQorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIkZpbGUgJyVzJyBpcyB1bmJ1aWxkYWJsZSwgcmVtb3ZpbmcuLi4iLCBzZWxmLmZuX2luZGV4W2ZuaWRdKQorICAgICAgICBzZWxmLmZhaWxlZF9mbmlkcy5hcHBlbmQoZm5pZCkKKyAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLmJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICBpZiBmbmlkIGluIHNlbGYuYnVpbGRfdGFyZ2V0c1t0YXJnZXRdOgorICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRfdGFyZ2V0c1t0YXJnZXRdLnJlbW92ZShmbmlkKQorICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLmJ1aWxkX3RhcmdldHNbdGFyZ2V0XSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfYnVpbGR0YXJnZXQodGFyZ2V0LCBtaXNzaW5nX2xpc3QpCisgICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5ydW5fdGFyZ2V0czoKKyAgICAgICAgICAgIGlmIGZuaWQgaW4gc2VsZi5ydW5fdGFyZ2V0c1t0YXJnZXRdOgorICAgICAgICAgICAgICAgIHNlbGYucnVuX3RhcmdldHNbdGFyZ2V0XS5yZW1vdmUoZm5pZCkKKyAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5ydW5fdGFyZ2V0c1t0YXJnZXRdKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9ydW50YXJnZXQodGFyZ2V0LCBtaXNzaW5nX2xpc3QpCisKKyAgICBkZWYgcmVtb3ZlX2J1aWxkdGFyZ2V0KHNlbGYsIHRhcmdldGlkLCBtaXNzaW5nX2xpc3Q9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBNYXJrIGEgYnVpbGQgdGFyZ2V0IGFzIGZhaWxlZCAodW5idWlsZGFibGUpCisgICAgICAgIFRyaWdnZXIgcmVtb3ZhbCBvZiBhbnkgZmlsZXMgdGhhdCBoYXZlIHRoaXMgYXMgYSBkZXBlbmRlbmN5CisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgbWlzc2luZ19saXN0OgorICAgICAgICAgICAgbWlzc2luZ19saXN0ID0gW3NlbGYuYnVpbGRfbmFtZXNfaW5kZXhbdGFyZ2V0aWRdXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWlzc2luZ19saXN0ID0gW3NlbGYuYnVpbGRfbmFtZXNfaW5kZXhbdGFyZ2V0aWRdXSArIG1pc3NpbmdfbGlzdAorICAgICAgICBsb2dnZXIudmVyYm9zZSgiVGFyZ2V0ICclcycgaXMgdW5idWlsZGFibGUsIHJlbW92aW5nLi4uXG5NaXNzaW5nIG9yIHVuYnVpbGRhYmxlIGRlcGVuZGVuY3kgY2hhaW4gd2FzOiAlcyIsIHNlbGYuYnVpbGRfbmFtZXNfaW5kZXhbdGFyZ2V0aWRdLCBtaXNzaW5nX2xpc3QpCisgICAgICAgIHNlbGYuZmFpbGVkX2RlcHMuYXBwZW5kKHRhcmdldGlkKQorICAgICAgICBkZXBlbmRlZXMgPSBzZWxmLmdldF9kZXBlbmRlZXModGFyZ2V0aWQpCisgICAgICAgIGZvciBmbmlkIGluIGRlcGVuZGVlczoKKyAgICAgICAgICAgIHNlbGYuZmFpbF9mbmlkKGZuaWQsIG1pc3NpbmdfbGlzdCkKKyAgICAgICAgZm9yIHRhc2tpZCBpbiB4cmFuZ2UobGVuKHNlbGYudGFza3NfaWRlcGVuZHMpKToKKyAgICAgICAgICAgIGlkZXBlbmRzID0gc2VsZi50YXNrc19pZGVwZW5kc1t0YXNraWRdCisgICAgICAgICAgICBmb3IgKGlkZXBlbmRpZCwgaWRlcGVuZHRhc2spIGluIGlkZXBlbmRzOgorICAgICAgICAgICAgICAgIGlmIGlkZXBlbmRpZCA9PSB0YXJnZXRpZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsX2ZuaWQoc2VsZi50YXNrc19mbmlkW3Rhc2tpZF0sIG1pc3NpbmdfbGlzdCkKKworICAgICAgICBpZiBzZWxmLmFib3J0IGFuZCB0YXJnZXRpZCBpbiBzZWxmLmV4dGVybmFsX3RhcmdldHM6CisgICAgICAgICAgICB0YXJnZXQgPSBzZWxmLmJ1aWxkX25hbWVzX2luZGV4W3RhcmdldGlkXQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJSZXF1aXJlZCBidWlsZCB0YXJnZXQgJyVzJyBoYXMgbm8gYnVpbGRhYmxlIHByb3ZpZGVycy5cbk1pc3Npbmcgb3IgdW5idWlsZGFibGUgZGVwZW5kZW5jeSBjaGFpbiB3YXM6ICVzIiwgdGFyZ2V0LCBtaXNzaW5nX2xpc3QpCisgICAgICAgICAgICByYWlzZSBiYi5wcm92aWRlcnMuTm9Qcm92aWRlcih0YXJnZXQpCisKKyAgICBkZWYgcmVtb3ZlX3J1bnRhcmdldChzZWxmLCB0YXJnZXRpZCwgbWlzc2luZ19saXN0PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgTWFyayBhIHJ1biB0YXJnZXQgYXMgZmFpbGVkICh1bmJ1aWxkYWJsZSkKKyAgICAgICAgVHJpZ2dlciByZW1vdmFsIG9mIGFueSBmaWxlcyB0aGF0IGhhdmUgdGhpcyBhcyBhIGRlcGVuZGVuY3kKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBtaXNzaW5nX2xpc3Q6CisgICAgICAgICAgICBtaXNzaW5nX2xpc3QgPSBbc2VsZi5ydW5fbmFtZXNfaW5kZXhbdGFyZ2V0aWRdXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWlzc2luZ19saXN0ID0gW3NlbGYucnVuX25hbWVzX2luZGV4W3RhcmdldGlkXV0gKyBtaXNzaW5nX2xpc3QKKworICAgICAgICBsb2dnZXIuaW5mbygiUnVudGltZSB0YXJnZXQgJyVzJyBpcyB1bmJ1aWxkYWJsZSwgcmVtb3ZpbmcuLi5cbk1pc3Npbmcgb3IgdW5idWlsZGFibGUgZGVwZW5kZW5jeSBjaGFpbiB3YXM6ICVzIiwgc2VsZi5ydW5fbmFtZXNfaW5kZXhbdGFyZ2V0aWRdLCBtaXNzaW5nX2xpc3QpCisgICAgICAgIHNlbGYuZmFpbGVkX3JkZXBzLmFwcGVuZCh0YXJnZXRpZCkKKyAgICAgICAgZGVwZW5kZWVzID0gc2VsZi5nZXRfcmRlcGVuZGVlcyh0YXJnZXRpZCkKKyAgICAgICAgZm9yIGZuaWQgaW4gZGVwZW5kZWVzOgorICAgICAgICAgICAgc2VsZi5mYWlsX2ZuaWQoZm5pZCwgbWlzc2luZ19saXN0KQorICAgICAgICBmb3IgdGFza2lkIGluIHhyYW5nZShsZW4oc2VsZi50YXNrc19pcmRlcGVuZHMpKToKKyAgICAgICAgICAgIGlyZGVwZW5kcyA9IHNlbGYudGFza3NfaXJkZXBlbmRzW3Rhc2tpZF0KKyAgICAgICAgICAgIGZvciAoaWRlcGVuZGlkLCBpZGVwZW5kdGFzaykgaW4gaXJkZXBlbmRzOgorICAgICAgICAgICAgICAgIGlmIGlkZXBlbmRpZCA9PSB0YXJnZXRpZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsX2ZuaWQoc2VsZi50YXNrc19mbmlkW3Rhc2tpZF0sIG1pc3NpbmdfbGlzdCkKKworICAgIGRlZiBhZGRfdW5yZXNvbHZlZChzZWxmLCBjZmdEYXRhLCBkYXRhQ2FjaGUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVzb2x2ZSBhbGwgdW5yZXNvbHZlZCBidWlsZCBhbmQgcnVudGltZSB0YXJnZXRzCisgICAgICAgICIiIgorICAgICAgICBsb2dnZXIuaW5mbygiUmVzb2x2aW5nIGFueSBtaXNzaW5nIHRhc2sgcXVldWUgZGVwZW5kZW5jaWVzIikKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGFkZGVkID0gMAorICAgICAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLmdldF91bnJlc29sdmVkX2J1aWxkX3RhcmdldHMoZGF0YUNhY2hlKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkX3Byb3ZpZGVyX2ludGVybmFsKGNmZ0RhdGEsIGRhdGFDYWNoZSwgdGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICBhZGRlZCA9IGFkZGVkICsgMQorICAgICAgICAgICAgICAgIGV4Y2VwdCBiYi5wcm92aWRlcnMuTm9Qcm92aWRlcjoKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0aWQgPSBzZWxmLmdldGJ1aWxkX2lkKHRhcmdldCkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5hYm9ydCBhbmQgdGFyZ2V0aWQgaW4gc2VsZi5leHRlcm5hbF90YXJnZXRzIGFuZCBub3Qgc2VsZi5hbGxvd2luY29tcGxldGU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5hbGxvd2luY29tcGxldGU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9idWlsZHRhcmdldCh0YXJnZXRpZCkKKyAgICAgICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5nZXRfdW5yZXNvbHZlZF9ydW5fdGFyZ2V0cyhkYXRhQ2FjaGUpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGRfcnByb3ZpZGVyKGNmZ0RhdGEsIGRhdGFDYWNoZSwgdGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICBhZGRlZCA9IGFkZGVkICsgMQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoYmIucHJvdmlkZXJzLk5vUlByb3ZpZGVyLCBiYi5wcm92aWRlcnMuTXVsdGlwbGVSUHJvdmlkZXIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9ydW50YXJnZXQoc2VsZi5nZXRydW5faWQodGFyZ2V0KSkKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUmVzb2x2ZWQgIiArIHN0cihhZGRlZCkgKyAiIGV4dHJhIGRlcGVuZGVuY2llcyIpCisgICAgICAgICAgICBpZiBhZGRlZCA9PSAwOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICMgc2VsZi5kdW1wX2RhdGEoKQorCisgICAgZGVmIGR1bXBfZGF0YShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIER1bXAgc29tZSBkZWJ1ZyBpbmZvcm1hdGlvbiBvbiB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzCisgICAgICAgICIiIgorICAgICAgICBsb2dnZXIuZGVidWcoMywgImJ1aWxkX25hbWVzOiIpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiLCAiLmpvaW4oc2VsZi5idWlsZF9uYW1lc19pbmRleCkpCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICJydW5fbmFtZXM6IikKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICIsICIuam9pbihzZWxmLnJ1bl9uYW1lc19pbmRleCkpCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICJidWlsZF90YXJnZXRzOiIpCisgICAgICAgIGZvciBidWlsZGlkIGluIHhyYW5nZShsZW4oc2VsZi5idWlsZF9uYW1lc19pbmRleCkpOgorICAgICAgICAgICAgdGFyZ2V0ID0gc2VsZi5idWlsZF9uYW1lc19pbmRleFtidWlsZGlkXQorICAgICAgICAgICAgdGFyZ2V0cyA9ICJOb25lIgorICAgICAgICAgICAgaWYgYnVpbGRpZCBpbiBzZWxmLmJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICAgICAgdGFyZ2V0cyA9IHNlbGYuYnVpbGRfdGFyZ2V0c1tidWlsZGlkXQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICIgKCVzKSVzOiAlcyIsIGJ1aWxkaWQsIHRhcmdldCwgdGFyZ2V0cykKKworICAgICAgICBsb2dnZXIuZGVidWcoMywgInJ1bl90YXJnZXRzOiIpCisgICAgICAgIGZvciBydW5pZCBpbiB4cmFuZ2UobGVuKHNlbGYucnVuX25hbWVzX2luZGV4KSk6CisgICAgICAgICAgICB0YXJnZXQgPSBzZWxmLnJ1bl9uYW1lc19pbmRleFtydW5pZF0KKyAgICAgICAgICAgIHRhcmdldHMgPSAiTm9uZSIKKyAgICAgICAgICAgIGlmIHJ1bmlkIGluIHNlbGYucnVuX3RhcmdldHM6CisgICAgICAgICAgICAgICAgdGFyZ2V0cyA9IHNlbGYucnVuX3RhcmdldHNbcnVuaWRdCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMywgIiAoJXMpJXM6ICVzIiwgcnVuaWQsIHRhcmdldCwgdGFyZ2V0cykKKworICAgICAgICBsb2dnZXIuZGVidWcoMywgInRhc2tzOiIpCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi50YXNrc19uYW1lKSk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMywgIiAoJXMpJXMgLSAlczogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZuX2luZGV4W3NlbGYudGFza3NfZm5pZFt0YXNrXV0sCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFza3NfbmFtZVt0YXNrXSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXNrc190ZGVwZW5kc1t0YXNrXSkKKworICAgICAgICBsb2dnZXIuZGVidWcoMywgImRlcGVuZGVuY3kgaWRzIChwZXIgZm4pOiIpCisgICAgICAgIGZvciBmbmlkIGluIHNlbGYuZGVwaWRzOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICIgJXMgJXM6ICVzIiwgZm5pZCwgc2VsZi5mbl9pbmRleFtmbmlkXSwgc2VsZi5kZXBpZHNbZm5pZF0pCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICJydW50aW1lIGRlcGVuZGVuY3kgaWRzIChwZXIgZm4pOiIpCisgICAgICAgIGZvciBmbmlkIGluIHNlbGYucmRlcGlkczoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiICVzICVzOiAlcyIsIGZuaWQsIHNlbGYuZm5faW5kZXhbZm5pZF0sIHNlbGYucmRlcGlkc1tmbmlkXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL2NvZGVwYXJzZXIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL2NvZGVwYXJzZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ1NGJjNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvY29kZXBhcnNlci5weQpAQCAtMCwwICsxLDM3NSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUZXN0IGZvciBjb2RlcGFyc2VyLnB5CisjCisjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDEyIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYmIKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuVGVzdENvZGVQYXJzZXInKQorCisjIGJiLmRhdGEgcmVmZXJlbmNlcyBiYi5wYXJzZSBidXQgY2FuJ3QgZGlyZWN0bHkgaW1wb3J0IGR1ZSB0byBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCisjIEhhY2sgYXJvdW5kIGl0IGZvciBub3cgOiggCitpbXBvcnQgYmIucGFyc2UKK2ltcG9ydCBiYi5kYXRhCisKK2NsYXNzIFJlZmVyZW5jZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gYmIuZGF0YS5pbml0KCkKKworICAgIGRlZiBzZXRFbXB0eVZhcnMoc2VsZiwgdmFybGlzdCk6CisgICAgICAgIGZvciBrIGluIHZhcmxpc3Q6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKGssICIiKQorCisgICAgZGVmIHNldFZhbHVlcyhzZWxmLCB2YWx1ZXMpOgorICAgICAgICBmb3IgaywgdiBpbiB2YWx1ZXMuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoaywgdikKKworICAgIGRlZiBhc3NlcnRSZWZlcmVuY2VzKHNlbGYsIHJlZnMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVmZXJlbmNlcywgcmVmcykKKworICAgIGRlZiBhc3NlcnRFeGVjcyhzZWxmLCBleGVjcyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5leGVjcywgZXhlY3MpCisKK2NsYXNzIFZhcmlhYmxlUmVmZXJlbmNlVGVzdChSZWZlcmVuY2VUZXN0KToKKworICAgIGRlZiBwYXJzZUV4cHJlc3Npb24oc2VsZiwgZXhwKToKKyAgICAgICAgcGFyc2VkdmFyID0gc2VsZi5kLmV4cGFuZFdpdGhSZWZzKGV4cCwgTm9uZSkKKyAgICAgICAgc2VsZi5yZWZlcmVuY2VzID0gcGFyc2VkdmFyLnJlZmVyZW5jZXMKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9yZWZlcmVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuc2V0RW1wdHlWYXJzKFsiRk9PIl0pCisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCIke0ZPT30iKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFsiRk9PIl0pKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5zZXRFbXB0eVZhcnMoWyJCQVIiXSkKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgIkJBUiIpCisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCIkeyR7Rk9PfX0iKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFsiRk9PIiwgIkJBUiJdKSkKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9yZWZlcmVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuc2V0RW1wdHlWYXJzKFsiQkFSIl0pCisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCIke0BiYi5kYXRhLmdldFZhcignQkFSJywgZCwgVHJ1ZSkgKyAnZm9vJ30iKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFsiQkFSIl0pKQorCitjbGFzcyBTaGVsbFJlZmVyZW5jZVRlc3QoUmVmZXJlbmNlVGVzdCk6CisKKyAgICBkZWYgcGFyc2VFeHByZXNzaW9uKHNlbGYsIGV4cCk6CisgICAgICAgIHBhcnNlZHZhciA9IHNlbGYuZC5leHBhbmRXaXRoUmVmcyhleHAsIE5vbmUpCisgICAgICAgIHBhcnNlciA9IGJiLmNvZGVwYXJzZXIuU2hlbGxQYXJzZXIoIlBhcnNlclRlc3QiLCBsb2dnZXIpCisgICAgICAgIHBhcnNlci5wYXJzZV9zaGVsbChwYXJzZWR2YXIudmFsdWUpCisKKyAgICAgICAgc2VsZi5yZWZlcmVuY2VzID0gcGFyc2VkdmFyLnJlZmVyZW5jZXMKKyAgICAgICAgc2VsZi5leGVjcyA9IHBhcnNlci5leGVjcworCisgICAgZGVmIHRlc3RfcXVvdGVzX2luc2lkZV9hc3NpZ24oc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCdmb289Zm9vImJhciJiYXonKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFtdKSkKKworICAgIGRlZiB0ZXN0X3F1b3Rlc19pbnNpZGVfYXJnKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbignc2VkIHMjImJhciBiYXoiIyJhbHBoYSBiZXRhIiNnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJzZWQiXSkpCisKKyAgICBkZWYgdGVzdF9hcmdfY29udGludWF0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigic2VkIC1pIC1lIHMsZm9vLGJhcixnIFxcXG4gKi5wYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsic2VkIl0pKQorCisgICAgZGVmIHRlc3RfZG9sbGFyX2luX3F1b3RlZChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oJ3NlZCAtaSAtZSAiZm9vJCIgKi5wYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsic2VkIl0pKQorCisgICAgZGVmIHRlc3RfcXVvdGVzX2luc2lkZV9hcmdfY29udGludWF0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLnNldEVtcHR5VmFycyhbImJpbmRpciIsICJEIiwgImxpYmRpciJdKQorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiIiIKK3NlZCAtaSAtZSBzIyJtb2NfbG9jYXRpb249LiokIiMibW9jX2xvY2F0aW9uPSR7YmluZGlyfS9tb2M0IiMgXFwKKy1lIHMjInVpY19sb2NhdGlvbj0uKiQiIyJ1aWNfbG9jYXRpb249JHtiaW5kaXJ9L3VpYzQiIyBcXAorJHtEfSR7bGliZGlyfS9wa2djb25maWcvKi5wYworIiIiKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFsiYmluZGlyIiwgIkQiLCAibGliZGlyIl0pKQorCisgICAgZGVmIHRlc3RfYXNzaWduX3N1YnNoZWxsX2V4cGFuc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oImZvbz0kKGVjaG8gYmFyKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsiZWNobyJdKSkKKworICAgIGRlZiB0ZXN0X3NoZWxsX3VuZXhwYW5kZWQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0RW1wdHlWYXJzKFsiUVRfQkFTRV9OQU1FIl0pCisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCdlY2hvICIke1FUX0JBU0VfTkFNRX0iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJlY2hvIl0pKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFsiUVRfQkFTRV9OQU1FIl0pKQorCisgICAgZGVmIHRlc3RfaW5jb21wbGV0ZV92YXJleHBfc2luZ2xlX3F1b3RlcyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oInNlZCAtaSAtZSAnczpJUHs6SSR7OmcnICRwYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsic2VkIl0pKQorCisKKyAgICBkZWYgdGVzdF91bnRpbChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oInVudGlsIGZhbHNlOyBkbyBlY2hvIHRydWU7IGRvbmUiKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbImZhbHNlIiwgImVjaG8iXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoKSkKKworICAgIGRlZiB0ZXN0X2Nhc2Uoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCIiIgorY2FzZSAkZm9vIGluCisqKQorYmFyCis7OworZXNhYworIiIiKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbImJhciJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZlcmVuY2VzKHNldCgpKQorCisgICAgZGVmIHRlc3RfYXNzaWduX2V4ZWMoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCJhPWIgYz0nZm9vIGJhcicgYWxwaGEgMSAyIDMiKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbImFscGhhIl0pKQorCisgICAgZGVmIHRlc3RfcmVkaXJlY3RfdG9fZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5zZXRFbXB0eVZhcnMoWyJmb28iXSkKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oImVjaG8gZm9vID4ke2Zvb30vYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJlY2hvIl0pKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFsiZm9vIl0pKQorCisgICAgZGVmIHRlc3RfaGVyZWRvYyhzZWxmKToKKyAgICAgICAgc2VsZi5zZXRFbXB0eVZhcnMoWyJ0aGV0YSJdKQorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiIiIKK2NhdCA8PEVORAorYWxwaGEKK2JldGEKKyR7dGhldGF9CitFTkQKKyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZlcmVuY2VzKHNldChbInRoZXRhIl0pKQorCisgICAgZGVmIHRlc3RfcmVkaXJlY3RfZnJvbV9oZXJlZG9jKHNlbGYpOgorICAgICAgICB2ID0gWyJCIiwgIlNIQURPV19NQUlMRElSIiwgIlNIQURPV19NQUlMRklMRSIsICJTSEFET1dfVVRNUERJUiIsICJTSEFET1dfTE9HRElSIiwgImJpbmRpciJdCisgICAgICAgIHNlbGYuc2V0RW1wdHlWYXJzKHYpCisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCIiIgorY2F0IDw8RU5EID4ke0J9L2NhY2hlZHBhdGhzCitzaGFkb3dfY3ZfbWFpbGRpcj0ke1NIQURPV19NQUlMRElSfQorc2hhZG93X2N2X21haWxmaWxlPSR7U0hBRE9XX01BSUxGSUxFfQorc2hhZG93X2N2X3V0bXBkaXI9JHtTSEFET1dfVVRNUERJUn0KK3NoYWRvd19jdl9sb2dkaXI9JHtTSEFET1dfTE9HRElSfQorc2hhZG93X2N2X3Bhc3N3ZF9kaXI9JHtiaW5kaXJ9CitFTkQKKyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZlcmVuY2VzKHNldCh2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJjYXQiXSkpCisKKyMgICAgZGVmIHRlc3RfaW5jb21wbGV0ZV9jb21tYW5kX2V4cGFuc2lvbihzZWxmKToKKyMgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlZnRyYWNrZXIuU2hlbGxTeW50YXhFcnJvciwgcmVmdHJhY2tlci5leGVjcywKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIGJidmFsdWUuc2hwYXJzZSgiY3AgZm9vYCIsIHNlbGYuZCksIHNlbGYuZCkKKworIyAgICBkZWYgdGVzdF9yb2d1ZV9kb2xsYXJzaWduKHNlbGYpOgorIyAgICAgICAgc2VsZi5zZXRWYWx1ZXMoeyJEIiA6ICIvdG1wIn0pCisjICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiaW5zdGFsbCAtZCAke0R9JCIpCisjICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFsiRCJdKSkKKyMgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsiaW5zdGFsbCJdKSkKKworCitjbGFzcyBQeXRob25SZWZlcmVuY2VUZXN0KFJlZmVyZW5jZVRlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBpZiBoYXNhdHRyKGJiLnV0aWxzLCAiX2NvbnRleHQiKToKKyAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IGJiLnV0aWxzLl9jb250ZXh0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbXBvcnQgX19idWlsdGluX18KKyAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IF9fYnVpbHRpbl9fLl9fZGljdF9fCisKKyAgICBkZWYgcGFyc2VFeHByZXNzaW9uKHNlbGYsIGV4cCk6CisgICAgICAgIHBhcnNlZHZhciA9IHNlbGYuZC5leHBhbmRXaXRoUmVmcyhleHAsIE5vbmUpCisgICAgICAgIHBhcnNlciA9IGJiLmNvZGVwYXJzZXIuUHl0aG9uUGFyc2VyKCJQYXJzZXJUZXN0IiwgbG9nZ2VyKQorICAgICAgICBwYXJzZXIucGFyc2VfcHl0aG9uKHBhcnNlZHZhci52YWx1ZSkKKworICAgICAgICBzZWxmLnJlZmVyZW5jZXMgPSBwYXJzZWR2YXIucmVmZXJlbmNlcyB8IHBhcnNlci5yZWZlcmVuY2VzCisgICAgICAgIHNlbGYuZXhlY3MgPSBwYXJzZXIuZXhlY3MKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgaW5kZW50KHZhbHVlKToKKyAgICAgICAgIiIiUHl0aG9uIFNuaXBwZXRzIGhhdmUgdG8gYmUgaW5kZW50ZWQsIHB5dGhvbiB2YWx1ZXMgZG9uJ3QgaGF2ZSB0bworYmUuIFRoZXNlIHVuaXQgdGVzdHMgYXJlIHRlc3Rpbmcgc25pcHBldHMuIiIiCisgICAgICAgIHJldHVybiAiICIgKyB2YWx1ZQorCisgICAgZGVmIHRlc3RfZ2V0dmFyX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oImJiLmRhdGEuZ2V0VmFyKCdmb28nLCBkLCBUcnVlKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJmb28iXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KCkpCisKKyAgICBkZWYgdGVzdF9nZXR2YXJfY29tcHV0ZWRfcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiYmIuZGF0YS5nZXRWYXIoJ2YnICsgJ28nICsgJ28nLCBkLCBUcnVlKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoKSkKKworICAgIGRlZiB0ZXN0X2dldHZhcl9leGVjX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oImV2YWwoJ2JiLmRhdGEuZ2V0VmFyKFwiZm9vXCIsIGQsIFRydWUpJykiKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsiZXZhbCJdKSkKKworICAgIGRlZiB0ZXN0X3Zhcl9yZWZlcmVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuY29udGV4dFsiZm9vIl0gPSBsYW1iZGEgeDogeAorICAgICAgICBzZWxmLnNldEVtcHR5VmFycyhbIkZPTyJdKQorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiZm9vKCcke0ZPT30nKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJGT08iXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsiZm9vIl0pKQorICAgICAgICBkZWwgc2VsZi5jb250ZXh0WyJmb28iXQorCisgICAgZGVmIHRlc3RfdmFyX2V4ZWMoc2VsZik6CisgICAgICAgIGZvciBldHlwZSBpbiAoImZ1bmMiLCAidGFzayIpOgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiZG9fc29tZXRoaW5nIiwgImVjaG8gJ2hpIG1vbSEgJHtGT099JyIpCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyRmxhZygiZG9fc29tZXRoaW5nIiwgZXR5cGUsIFRydWUpCisgICAgICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiYmIuYnVpbGQuZXhlY19mdW5jKCdkb19zb21ldGhpbmcnLCBkKSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFtdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsiZG9fc29tZXRoaW5nIl0pKQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25fcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLmNvbnRleHRbInRlc3RmdW5jIl0gPSBsYW1iZGEgbXNnOiBiYi5tc2cubm90ZSgxLCBOb25lLCBtc2cpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICJIZWxsbywgV29ybGQhIikKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oInRlc3RmdW5jKCcke0ZPT30nKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJGT08iXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsidGVzdGZ1bmMiXSkpCisgICAgICAgIGRlbCBzZWxmLmNvbnRleHRbInRlc3RmdW5jIl0KKworICAgIGRlZiB0ZXN0X3F1YWxpZmllZF9mdW5jdGlvbl9yZWZlcmVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCJ0aW1lLnRpbWUoKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsidGltZS50aW1lIl0pKQorCisgICAgZGVmIHRlc3RfcXVhbGlmaWVkX2Z1bmN0aW9uX3JlZmVyZW5jZV8yKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigib3MucGF0aC5kaXJuYW1lKCcvZm9vL2JhcicpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJvcy5wYXRoLmRpcm5hbWUiXSkpCisKKyAgICBkZWYgdGVzdF9xdWFsaWZpZWRfZnVuY3Rpb25fcmVmZXJlbmNlX25lc3RlZChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oInRpbWUuc3RyZnRpbWUoJyVZJW0lZCcsdGltZS5nbXRpbWUoKSkiKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbInRpbWUuc3RyZnRpbWUiLCAidGltZS5nbXRpbWUiXSkpCisKKyAgICBkZWYgdGVzdF9mdW5jdGlvbl9yZWZlcmVuY2VfY2hhaW5lZChzZWxmKToKKyAgICAgICAgc2VsZi5jb250ZXh0WyJ0ZXN0Z2V0Il0gPSBsYW1iZGE6ICJcdHN0cmlwIG1lICIKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oInRlc3RnZXQoKS5zdHJpcCgpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJ0ZXN0Z2V0Il0pKQorICAgICAgICBkZWwgc2VsZi5jb250ZXh0WyJ0ZXN0Z2V0Il0KKworCitjbGFzcyBEZXBlbmRlbmN5UmVmZXJlbmNlVGVzdChSZWZlcmVuY2VUZXN0KToKKworICAgIHB5ZGF0YSA9ICIiIgorYmIuZGF0YS5nZXRWYXIoJ3NvbWV2YXInLCBkLCBUcnVlKQorZGVmIHRlc3QoZCk6CisgICAgZm9vID0gJ2JhciAlcycgJSAnZm9vJworZGVmIHRlc3QyKGQpOgorICAgIGQuZ2V0VmFyKGZvbywgVHJ1ZSkKKyAgICBkLmdldFZhcignYmFyJywgRmFsc2UpCisgICAgdGVzdDIoZCkKKworZGVmIGEoKToKKyAgICBcIlwiXCJzb21lCisgICAgc3R1ZmYKKyAgICBcIlwiXCIKKyAgICByZXR1cm4gImhlaCIKKwordGVzdChkKQorCitiYi5kYXRhLmV4cGFuZChiYi5kYXRhLmdldFZhcigic29tZXRoaW5nIiwgRmFsc2UsIGQpLCBkKQorYmIuZGF0YS5leHBhbmQoIiR7aW5leHBhbmR9IHNvbWV0aGluZ2Vsc2UiLCBkKQorYmIuZGF0YS5nZXRWYXIoYSgpLCBkLCBGYWxzZSkKKyIiIgorCisgICAgZGVmIHRlc3RfcHl0aG9uKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCBzZWxmLnB5ZGF0YSkKKyAgICAgICAgc2VsZi5zZXRFbXB0eVZhcnMoWyJpbmV4cGFuZCIsICJhIiwgInRlc3QyIiwgInRlc3QiXSkKKyAgICAgICAgc2VsZi5kLnNldFZhckZsYWdzKCJGT08iLCB7ImZ1bmMiOiBUcnVlLCAicHl0aG9uIjogVHJ1ZX0pCisKKyAgICAgICAgZGVwcywgdmFsdWVzID0gYmIuZGF0YS5idWlsZF9kZXBlbmRlbmNpZXMoIkZPTyIsIHNldChzZWxmLmQua2V5cygpKSwgc2V0KCksIHNldCgpLCBzZWxmLmQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVwcywgc2V0KFsic29tZXZhciIsICJiYXIiLCAic29tZXRoaW5nIiwgImluZXhwYW5kIiwgInRlc3QiLCAidGVzdDIiLCAiYSJdKSkKKworCisgICAgc2hlbGxkYXRhID0gIiIiCitmb28gKCkgeworYmFyCit9Cit7CitlY2hvIGJhegorJChoZWgpCitldmFsIGBtb29gCit9CithPWIKK2M9ZAorKAordHJ1ZSAmJiBmYWxzZQordGVzdCAtZiBmb28KK3Rlc3R2YWw9c29tZXRoaW5nCiskdGVzdHZhbAorKSB8fCBhaWVlCishIGludmVydGVkCitlY2hvICR7c29tZXZhcn0KKworY2FzZSBmb28gaW4KK2JhcikKK2VjaG8gYmFyCis7OworYmF6KQorZWNobyBiYXoKKzs7Citmb28qKQorZWNobyBmb28KKzs7Citlc2FjCisiIiIKKworICAgIGRlZiB0ZXN0X3NoZWxsKHNlbGYpOgorICAgICAgICBleGVjcyA9IFsiYmFyIiwgImVjaG8iLCAiaGVoIiwgIm1vbyIsICJ0cnVlIiwgImFpZWUiXQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJzb21ldmFyIiwgImhlaCIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoImludmVydGVkIiwgImVjaG8gaW52ZXJ0ZWQuLi4iKQorICAgICAgICBzZWxmLmQuc2V0VmFyRmxhZygiaW52ZXJ0ZWQiLCAiZnVuYyIsIFRydWUpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsIHNlbGYuc2hlbGxkYXRhKQorICAgICAgICBzZWxmLmQuc2V0VmFyRmxhZ3MoIkZPTyIsIHsiZnVuYyI6IFRydWV9KQorICAgICAgICBzZWxmLnNldEVtcHR5VmFycyhleGVjcykKKworICAgICAgICBkZXBzLCB2YWx1ZXMgPSBiYi5kYXRhLmJ1aWxkX2RlcGVuZGVuY2llcygiRk9PIiwgc2V0KHNlbGYuZC5rZXlzKCkpLCBzZXQoKSwgc2V0KCksIHNlbGYuZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZXBzLCBzZXQoWyJzb21ldmFyIiwgImludmVydGVkIl0gKyBleGVjcykpCisKKworICAgIGRlZiB0ZXN0X3ZhcmRlcHMoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIm9lX2xpYmluc3RhbGwiLCAiZWNobyB0ZXN0IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgImZvbz1vZV9saWJpbnN0YWxsOyBldmFsICRmb28iKQorICAgICAgICBzZWxmLmQuc2V0VmFyRmxhZygiRk9PIiwgInZhcmRlcHMiLCAib2VfbGliaW5zdGFsbCIpCisKKyAgICAgICAgZGVwcywgdmFsdWVzID0gYmIuZGF0YS5idWlsZF9kZXBlbmRlbmNpZXMoIkZPTyIsIHNldChzZWxmLmQua2V5cygpKSwgc2V0KCksIHNldCgpLCBzZWxmLmQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVwcywgc2V0KFsib2VfbGliaW5zdGFsbCJdKSkKKworICAgIGRlZiB0ZXN0X3ZhcmRlcHNfZXhwYW5kKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJvZV9saWJpbnN0YWxsIiwgImVjaG8gdGVzdCIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICJmb289b2VfbGliaW5zdGFsbDsgZXZhbCAkZm9vIikKKyAgICAgICAgc2VsZi5kLnNldFZhckZsYWcoIkZPTyIsICJ2YXJkZXBzIiwgIiR7QCdvZV9saWJpbnN0YWxsJ30iKQorCisgICAgICAgIGRlcHMsIHZhbHVlcyA9IGJiLmRhdGEuYnVpbGRfZGVwZW5kZW5jaWVzKCJGT08iLCBzZXQoc2VsZi5kLmtleXMoKSksIHNldCgpLCBzZXQoKSwgc2VsZi5kKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlcHMsIHNldChbIm9lX2xpYmluc3RhbGwiXSkpCisKKyAgICAjQ3VycmVudGx5IG5vIHdpbGRjYXJkIHN1cHBvcnQKKyAgICAjZGVmIHRlc3RfdmFyZGVwc193aWxkY2FyZHMoc2VsZik6CisgICAgIyAgICBzZWxmLmQuc2V0VmFyKCJvZV9saWJpbnN0YWxsIiwgImVjaG8gdGVzdCIpCisgICAgIyAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiZm9vPW9lX2xpYmluc3RhbGw7IGV2YWwgJGZvbyIpCisgICAgIyAgICBzZWxmLmQuc2V0VmFyRmxhZygiRk9PIiwgInZhcmRlcHMiLCAib2VfKiIpCisgICAgIyAgICBzZWxmLmFzc2VydEVxdWFscyhkZXBzLCBzZXQoWyJvZV9saWJpbnN0YWxsIl0pKQorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvY293LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9jb3cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjNTg0MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvY293LnB5CkBAIC0wLDAgKzEsMTM2IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRlc3RzIGZvciBDb3B5LW9uLVdyaXRlIChjb3cucHkpCisjCisjIENvcHlyaWdodCAyMDA2IEhvbGdlciBGcmV5dGhlciA8ZnJleXRoZXJAaGFuZGhlbGRzLm9yZz4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCisKK2NsYXNzIENPV1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGNhc2UgZm9yIHRoZSBDT1cgbW9kdWxlIGZyb20gbWl0aHJvCisgICAgIiIiCisKKyAgICBkZWYgdGVzdEdldFNldChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgYW5kIHNldAorICAgICAgICAiIiIKKyAgICAgICAgZnJvbSBiYi5DT1cgaW1wb3J0IENPV0RpY3RCYXNlCisgICAgICAgIGEgPSBDT1dEaWN0QmFzZS5jb3B5KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgYS5oYXNfa2V5KCdhJykpCisKKyAgICAgICAgYVsnYSddID0gJ2EnCisgICAgICAgIGFbJ2InXSA9ICdiJworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhUcnVlLCBhLmhhc19rZXkoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoVHJ1ZSwgYS5oYXNfa2V5KCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdhJywgYVsnYSddICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2InLCBhWydiJ10gKQorCisgICAgZGVmIHRlc3RDb3B5Q29weShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgdGhlIGNvcHkgb2YgY29waWVzCisgICAgICAgICIiIgorCisgICAgICAgIGZyb20gYmIuQ09XIGltcG9ydCBDT1dEaWN0QmFzZQorCisgICAgICAgICMgY3JlYXRlIHR3byBDT1cgZGljdCAnaW5zdGFuY2VzJworICAgICAgICBiID0gQ09XRGljdEJhc2UuY29weSgpCisgICAgICAgIGMgPSBDT1dEaWN0QmFzZS5jb3B5KCkKKworICAgICAgICAjIGFzc2lnbiBzb21lIGtleXMgdG8gb25lIGluc3RhbmNlLCBzb21lIGtleXMgdG8gYW5vdGhlcgorICAgICAgICBiWydhJ10gPSAxMAorICAgICAgICBiWydjJ10gPSAyMAorICAgICAgICBjWydhJ10gPSAzMAorCisgICAgICAgICMgdGVzdCBzZXBhcmF0aW9uIG9mIHRoZSB0d28gaW5zdGFuY2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBjLmhhc19rZXkoJ2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMzAsIGNbJ2EnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMTAsIGJbJ2EnXSkKKworICAgICAgICAjIHRlc3QgY29weQorICAgICAgICBiXzIgPSBiLmNvcHkoKQorICAgICAgICBjXzIgPSBjLmNvcHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBjXzIuaGFzX2tleSgnYycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxMCwgYl8yWydhJ10pCisKKyAgICAgICAgYl8yWydkJ10gPSA0MAorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgY18yLmhhc19rZXkoJ2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoVHJ1ZSwgYl8yLmhhc19rZXkoJ2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNDAsIGJfMlsnZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgYi5oYXNfa2V5KCdkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBjLmhhc19rZXkoJ2QnKSkKKworICAgICAgICBjXzJbJ2QnXSA9IDMwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFRydWUsIGNfMi5oYXNfa2V5KCdkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFRydWUsIGJfMi5oYXNfa2V5KCdkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDMwLCBjXzJbJ2QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNDAsIGJfMlsnZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgYi5oYXNfa2V5KCdkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBjLmhhc19rZXkoJ2QnKSkKKworICAgICAgICAjIHRlc3QgY29weSBvZiB0aGUgY29weQorICAgICAgICBjXzMgPSBjXzIuY29weSgpCisgICAgICAgIGJfMyA9IGJfMi5jb3B5KCkKKyAgICAgICAgYl8zXzIgPSBiXzIuY29weSgpCisKKyAgICAgICAgY18zWydlJ10gPSA0NzExCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQ3MTEsIGNfM1snZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgY18yLmhhc19rZXkoJ2UnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGJfMy5oYXNfa2V5KCdlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBiXzNfMi5oYXNfa2V5KCdlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBiXzIuaGFzX2tleSgnZScpKQorCisgICAgICAgIGJfM1snZSddID0gJ3ZpZWwnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCd2aWVsJywgYl8zWydlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQ3MTEsIGNfM1snZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgY18yLmhhc19rZXkoJ2UnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoVHJ1ZSwgYl8zLmhhc19rZXkoJ2UnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGJfM18yLmhhc19rZXkoJ2UnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGJfMi5oYXNfa2V5KCdlJykpCisKKyAgICBkZWYgdGVzdENvdyhzZWxmKToKKyAgICAgICAgZnJvbSBiYi5DT1cgaW1wb3J0IENPV0RpY3RCYXNlCisgICAgICAgIGMgPSBDT1dEaWN0QmFzZS5jb3B5KCkKKyAgICAgICAgY1snMTIzJ10gPSAxMDI3CisgICAgICAgIGNbJ290aGVyJ10gPSA0NzExCisgICAgICAgIGNbJ2QnXSA9IHsgJ2FiYycgOiAxMCwgJ2JjZCcgOiAyMCB9CisKKyAgICAgICAgY29weSA9IGMuY29weSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMTAyNywgY1snMTIzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQ3MTEsIGNbJ290aGVyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHsnYWJjJzoxMCwgJ2JjZCc6MjB9LCBjWydkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEwMjcsIGNvcHlbJzEyMyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg0NzExLCBjb3B5WydvdGhlciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh7J2FiYyc6MTAsICdiY2QnOjIwfSwgY29weVsnZCddKQorCisgICAgICAgICMgY293IGl0IG5vdworICAgICAgICBjb3B5WycxMjMnXSA9IDEwMjgKKyAgICAgICAgY29weVsnb3RoZXInXSA9IDQ3MTIKKyAgICAgICAgY29weVsnZCddWydhYmMnXSA9IDIwCisKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxMDI3LCBjWycxMjMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNDcxMSwgY1snb3RoZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeydhYmMnOjEwLCAnYmNkJzoyMH0sIGNbJ2QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMTAyOCwgY29weVsnMTIzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQ3MTIsIGNvcHlbJ290aGVyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHsnYWJjJzoyMCwgJ2JjZCc6MjB9LCBjb3B5WydkJ10pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL2RhdGEucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL2RhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhYWI1NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvZGF0YS5weQpAQCAtMCwwICsxLDQ0MSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUZXN0cyBmb3IgdGhlIERhdGEgU3RvcmUgKGRhdGEucHkvZGF0YV9zbWFydC5weSkKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGJiCitpbXBvcnQgYmIuZGF0YQoraW1wb3J0IGJiLnBhcnNlCitpbXBvcnQgbG9nZ2luZworCitjbGFzcyBMb2dSZWNvcmQoKToKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBsb2dzID0gW10KKyAgICAgICAgY2xhc3MgTG9nSGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgorICAgICAgICAgICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgICAgICAgICBsb2dzLmFwcGVuZChyZWNvcmQpCisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKKyAgICAgICAgaGFuZGxlciA9IExvZ0hhbmRsZXIoKQorICAgICAgICBzZWxmLmhhbmRsZXIgPSBoYW5kbGVyCisgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisgICAgICAgIHJldHVybiBsb2dzCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOgorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZSIpCisgICAgICAgIGxvZ2dlci5yZW1vdmVIYW5kbGVyKHNlbGYuaGFuZGxlcikKKyAgICAgICAgcmV0dXJuCisKK2RlZiBsb2dDb250YWlucyhpdGVtLCBsb2dzKToKKyAgICBmb3IgbCBpbiBsb2dzOgorICAgICAgICBtID0gbC5nZXRNZXNzYWdlKCkKKyAgICAgICAgaWYgaXRlbSBpbiBtOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgRGF0YUV4cGFuc2lvbnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgc2VsZi5kWyJmb28iXSA9ICJ2YWx1ZV9vZl9mb28iCisgICAgICAgIHNlbGYuZFsiYmFyIl0gPSAidmFsdWVfb2ZfYmFyIgorICAgICAgICBzZWxmLmRbInZhbHVlX29mX2ZvbyJdID0gInZhbHVlX29mXyd2YWx1ZV9vZl9mb28nIgorCisgICAgZGVmIHRlc3Rfb25lX3ZhcihzZWxmKToKKyAgICAgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHtmb299IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgInZhbHVlX29mX2ZvbyIpCisKKyAgICBkZWYgdGVzdF9pbmRpcmVjdF9vbmVfdmFyKHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIkeyR7Zm9vfX0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAidmFsdWVfb2ZfJ3ZhbHVlX29mX2ZvbyciKQorCisgICAgZGVmIHRlc3RfaW5kaXJlY3RfYW5kX2Fub3RoZXIoc2VsZik6CisgICAgICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7JHtmb299fSAke2Jhcn0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAidmFsdWVfb2ZfJ3ZhbHVlX29mX2ZvbycgdmFsdWVfb2ZfYmFyIikKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9zbmlwcGV0KHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIke0A1KjEyfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICI2MCIpCisKKyAgICBkZWYgdGVzdF9leHBhbmRfaW5fcHl0aG9uX3NuaXBwZXQoc2VsZik6CisgICAgICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7QCdib28gJyArICcke2Zvb30nfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICJib28gdmFsdWVfb2ZfZm9vIikKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9zbmlwcGV0X2dldHZhcihzZWxmKToKKyAgICAgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHtAZC5nZXRWYXIoJ2ZvbycsIFRydWUpICsgJyAke2Jhcn0nfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICJ2YWx1ZV9vZl9mb28gdmFsdWVfb2ZfYmFyIikKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9zbmlwcGV0X3N5bnRheF9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgIiR7QGZvbyA9IDV9IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmIuZGF0YV9zbWFydC5FeHBhbnNpb25FcnJvciwgc2VsZi5kLmdldFZhciwgIkZPTyIsIFRydWUpCisKKyAgICBkZWYgdGVzdF9weXRob25fc25pcHBldF9ydW50aW1lX2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiJHtAaW50KCd0ZXN0Jyl9IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmIuZGF0YV9zbWFydC5FeHBhbnNpb25FcnJvciwgc2VsZi5kLmdldFZhciwgIkZPTyIsIFRydWUpCisKKyAgICBkZWYgdGVzdF9weXRob25fc25pcHBldF9lcnJvcl9wYXRoKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiZm9vIHZhbHVlICR7QkFSfSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJBUiIsICJiYXIgdmFsdWUgJHtAaW50KCd0ZXN0Jyl9IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmIuZGF0YV9zbWFydC5FeHBhbnNpb25FcnJvciwgc2VsZi5kLmdldFZhciwgIkZPTyIsIFRydWUpCisKKyAgICBkZWYgdGVzdF92YWx1ZV9jb250YWluaW5nX3ZhbHVlKHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIke0BkLmdldFZhcignZm9vJywgVHJ1ZSkgKyAnICR7YmFyfSd9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgInZhbHVlX29mX2ZvbyB2YWx1ZV9vZl9iYXIiKQorCisgICAgZGVmIHRlc3RfcmVmZXJlbmNlX3VuZGVmaW5lZF92YXIoc2VsZik6CisgICAgICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7dW5kZWZpbmVkdmFyfSBtZWgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAiJHt1bmRlZmluZWR2YXJ9IG1laCIpCisKKyAgICBkZWYgdGVzdF9kb3VibGVfcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQVIiLCAiYmFyIHZhbHVlIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgIiR7QkFSfSBmb28gJHtCQVJ9IikKKyAgICAgICAgdmFsID0gc2VsZi5kLmdldFZhcigiRk9PIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgImJhciB2YWx1ZSBmb28gYmFyIHZhbHVlIikKKworICAgIGRlZiB0ZXN0X2RpcmVjdF9yZWN1cnNpb24oc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICIke0ZPT30iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yLCBzZWxmLmQuZ2V0VmFyLCAiRk9PIiwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2luZGlyZWN0X3JlY3Vyc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgIiR7QkFSfSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJBUiIsICIke0JBWn0iKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQVoiLCAiJHtGT099IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmIuZGF0YV9zbWFydC5FeHBhbnNpb25FcnJvciwgc2VsZi5kLmdldFZhciwgIkZPTyIsIFRydWUpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpb25fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiJHtCQVJ9IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiQkFSIiwgIiR7JHtAJ0ZPTyd9fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJiLmRhdGFfc21hcnQuRXhwYW5zaW9uRXJyb3IsIHNlbGYuZC5nZXRWYXIsICJGT08iLCBUcnVlKQorCisgICAgZGVmIHRlc3RfaW5jb21wbGV0ZV92YXJleHBfc2luZ2xlX3F1b3RlcyhzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgInNlZCAtaSAtZSAnczpJUHs6SSR7OmcnICRwYyIpCisgICAgICAgIHZhbCA9IHNlbGYuZC5nZXRWYXIoIkZPTyIsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICJzZWQgLWkgLWUgJ3M6SVB7OkkkezpnJyAkcGMiKQorCisgICAgZGVmIHRlc3Rfbm9uc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgNSkKKyAgICAgICAgdmFsID0gc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICI1IikKKworICAgIGRlZiB0ZXN0X3JlbmFtZShzZWxmKToKKyAgICAgICAgc2VsZi5kLnJlbmFtZVZhcigiZm9vIiwgIm5ld2ZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigibmV3Zm9vIiwgRmFsc2UpLCAidmFsdWVfb2ZfZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJmb28iLCBGYWxzZSksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9kZWxldGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5kLmRlbFZhcigiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJmb28iLCBGYWxzZSksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9rZXlzKHNlbGYpOgorICAgICAgICBrZXlzID0gc2VsZi5kLmtleXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleXMsIFsndmFsdWVfb2ZfZm9vJywgJ2ZvbycsICdiYXInXSkKKworICAgIGRlZiB0ZXN0X2tleXNfZGVsZXRpb24oc2VsZik6CisgICAgICAgIG5ld2QgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoc2VsZi5kKQorICAgICAgICBuZXdkLmRlbFZhcigiYmFyIikKKyAgICAgICAga2V5cyA9IG5ld2Qua2V5cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5cywgWyd2YWx1ZV9vZl9mb28nLCAnZm9vJ10pCisKK2NsYXNzIFRlc3ROZXN0ZWRFeHBhbnNpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZCA9IGJiLmRhdGEuaW5pdCgpCisgICAgICAgIHNlbGYuZFsiZm9vIl0gPSAiZm9vIgorICAgICAgICBzZWxmLmRbImJhciJdID0gImJhciIKKyAgICAgICAgc2VsZi5kWyJ2YWx1ZV9vZl9mb29iYXIiXSA9ICIxODciCisKKyAgICBkZWYgdGVzdF9yZWZzKHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIke3ZhbHVlX29mXyR7Zm9vfSR7YmFyfX0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAiMTg3IikKKworICAgICNkZWYgdGVzdF9weXRob25fcmVmcyhzZWxmKToKKyAgICAjICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7QCR7QDN9KioyICsgJHtANH0qKjJ9IikKKyAgICAjICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICIyNSIpCisKKyAgICBkZWYgdGVzdF9yZWZfaW5fcHl0aG9uX3JlZihzZWxmKToKKyAgICAgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHtAJyR7Zm9vfScgKyAnYmFyJ30iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAiZm9vYmFyIikKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9yZWZfaW5fcmVmKHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIkeyR7QCdmJysnbycrJ28nfX0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAiZm9vIikKKworICAgIGRlZiB0ZXN0X2RlZXBfbmVzdGluZyhzZWxmKToKKyAgICAgICAgZGVwdGggPSAxMDAKKyAgICAgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHsiICogZGVwdGggKyAiZm9vIiArICJ9IiAqIGRlcHRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAiZm9vIikKKworICAgICNkZWYgdGVzdF9kZWVwX3B5dGhvbl9uZXN0aW5nKHNlbGYpOgorICAgICMgICAgZGVwdGggPSA1MAorICAgICMgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHtAIiAqIGRlcHRoICsgIjEiICsgIisxfSIgKiBkZXB0aCkKKyAgICAjICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksIHN0cihkZXB0aCArIDEpKQorCisgICAgZGVmIHRlc3RfbWl4ZWQoc2VsZik6CisgICAgICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7dmFsdWVfb2ZfJHtAKCcke2Zvb30nKydiYXInKVswOjNdfSR7JHtAJ0JBUicubG93ZXIoKX19fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICIxODciKQorCisgICAgZGVmIHRlc3RfcnVudGltZShzZWxmKToKKyAgICAgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHske0AndmFsdWVfb2YnICsgJ19mJysnbycrJ28nKydiJysnYScrJ3InfX0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAiMTg3IikKKworY2xhc3MgVGVzdE1lbW9pemUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X21lbW9pemVkKHNlbGYpOgorICAgICAgICBkID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgZC5zZXRWYXIoIkZPTyIsICJiYXIiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5nZXRWYXIoIkZPTyIsIEZhbHNlKSBpcyBkLmdldFZhcigiRk9PIiwgRmFsc2UpKQorCisgICAgZGVmIHRlc3Rfbm90X21lbW9pemVkKHNlbGYpOgorICAgICAgICBkMSA9IGJiLmRhdGEuaW5pdCgpCisgICAgICAgIGQyID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgZDEuc2V0VmFyKCJGT08iLCAiYmFyIikKKyAgICAgICAgZDIuc2V0VmFyKCJGT08iLCAiYmFyMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMS5nZXRWYXIoIkZPTyIsIEZhbHNlKSBpcyBub3QgZDIuZ2V0VmFyKCJGT08iLCBGYWxzZSkpCisKKyAgICBkZWYgdGVzdF9jaGFuZ2VkX2FmdGVyX21lbW9pemVkKHNlbGYpOgorICAgICAgICBkID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgZC5zZXRWYXIoImZvbyIsICJ2YWx1ZSBvZiBmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkLmdldFZhcigiZm9vIiwgRmFsc2UpKSwgInZhbHVlIG9mIGZvbyIpCisgICAgICAgIGQuc2V0VmFyKCJmb28iLCAic2Vjb25kIHZhbHVlIG9mIGZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGQuZ2V0VmFyKCJmb28iLCBGYWxzZSkpLCAic2Vjb25kIHZhbHVlIG9mIGZvbyIpCisKKyAgICBkZWYgdGVzdF9zYW1lX3ZhbHVlKHNlbGYpOgorICAgICAgICBkID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgZC5zZXRWYXIoImZvbyIsICJ2YWx1ZSBvZiIpCisgICAgICAgIGQuc2V0VmFyKCJiYXIiLCAidmFsdWUgb2YiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJmb28iLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoImJhciIsIEZhbHNlKSkKKworY2xhc3MgVGVzdENvbmNhdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiZm9vIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVkFMIiwgInZhbCIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJBUiIsICJiYXIiKQorCisgICAgZGVmIHRlc3RfcHJlcGVuZChzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVCIsICIke1ZBTH0iKQorICAgICAgICBzZWxmLmQucHJlcGVuZFZhcigiVEVTVCIsICIke0ZPT306IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICJmb286dmFsIikKKworICAgIGRlZiB0ZXN0X2FwcGVuZChzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVCIsICIke1ZBTH0iKQorICAgICAgICBzZWxmLmQuYXBwZW5kVmFyKCJURVNUIiwgIjoke0JBUn0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgInZhbDpiYXIiKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfYXBwZW5kKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgIiR7VkFMfSIpCisgICAgICAgIHNlbGYuZC5wcmVwZW5kVmFyKCJURVNUIiwgIiR7Rk9PfToiKQorICAgICAgICBzZWxmLmQuYXBwZW5kVmFyKCJURVNUIiwgIjp2YWwyIikKKyAgICAgICAgc2VsZi5kLmFwcGVuZFZhcigiVEVTVCIsICI6JHtCQVJ9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICJmb286dmFsOnZhbDI6YmFyIikKKworY2xhc3MgVGVzdENvbmNhdE92ZXJyaWRlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZCA9IGJiLmRhdGEuaW5pdCgpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICJmb28iKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJWQUwiLCAidmFsIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiQkFSIiwgImJhciIpCisKKyAgICBkZWYgdGVzdF9wcmVwZW5kKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgIiR7VkFMfSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfcHJlcGVuZCIsICIke0ZPT306IikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAiZm9vOnZhbCIpCisKKyAgICBkZWYgdGVzdF9hcHBlbmQoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QiLCAiJHtWQUx9IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9hcHBlbmQiLCAiOiR7QkFSfSIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgInZhbDpiYXIiKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfYXBwZW5kKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgIiR7VkFMfSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfcHJlcGVuZCIsICIke0ZPT306IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9hcHBlbmQiLCAiOnZhbDIiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2FwcGVuZCIsICI6JHtCQVJ9IikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAiZm9vOnZhbDp2YWwyOmJhciIpCisKKyAgICBkZWYgdGVzdF9hcHBlbmRfdW5zZXQoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfcHJlcGVuZCIsICIke0ZPT306IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9hcHBlbmQiLCAiOnZhbDIiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2FwcGVuZCIsICI6JHtCQVJ9IikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAiZm9vOjp2YWwyOmJhciIpCisKKyAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QiLCAiJHtWQUx9ICR7QkFSfSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfcmVtb3ZlIiwgInZhbCIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgImJhciIpCisKKyAgICBkZWYgdGVzdF9kb3VibGVyZWZfcmVtb3ZlKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgIiR7VkFMfSAke0JBUn0iKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX3JlbW92ZSIsICJ2YWwiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX1RFU1QiLCAiJHtURVNUfSAke1RFU1R9IikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVF9URVNUIiwgVHJ1ZSksICJiYXIgYmFyIikKKworICAgIGRlZiB0ZXN0X2VtcHR5X3JlbW92ZShzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVCIsICIiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX3JlbW92ZSIsICJ2YWwiKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICIiKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX2V4cGFuc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiQkFSIiwgIloiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgIiR7QkFSfS9YIFkiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX3JlbW92ZSIsICIke0JBUn0vWCIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgIlkiKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX2V4cGFuc2lvbl9pdGVtcyhzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVCIsICJBIEIgQyBEIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiQkFSIiwgIkIgRCIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfcmVtb3ZlIiwgIiR7QkFSfSIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgIkEgQyIpCisKK2NsYXNzIFRlc3RPdmVycmlkZXModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgc2VsZi5kLnNldFZhcigiT1ZFUlJJREVTIiwgImZvbzpiYXI6bG9jYWwiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgInRlc3R2YWx1ZSIpCisKKyAgICBkZWYgdGVzdF9ub19vdmVycmlkZShzZWxmKToKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAidGVzdHZhbHVlIikKKworICAgIGRlZiB0ZXN0X29uZV9vdmVycmlkZShzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9iYXIiLCAidGVzdHZhbHVlMiIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgInRlc3R2YWx1ZTIiKQorCisgICAgZGVmIHRlc3Rfb25lX292ZXJyaWRlX3Vuc2V0KHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUMl9iYXIiLCAidGVzdHZhbHVlMiIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QyIiwgVHJ1ZSksICJ0ZXN0dmFsdWUyIikKKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKHNlbGYuZC5rZXlzKCksIFsnVEVTVCcsICdURVNUMicsICdPVkVSUklERVMnLCAnVEVTVDJfYmFyJ10pCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9vdmVycmlkZShzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9iYXIiLCAidGVzdHZhbHVlMiIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfbG9jYWwiLCAidGVzdHZhbHVlMyIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfZm9vIiwgInRlc3R2YWx1ZTQiKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICJ0ZXN0dmFsdWUzIikKKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKHNlbGYuZC5rZXlzKCksIFsnVEVTVCcsICdURVNUX2ZvbycsICdPVkVSUklERVMnLCAnVEVTVF9iYXInLCAnVEVTVF9sb2NhbCddKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfY29tYmluZWRfb3ZlcnJpZGVzKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2xvY2FsX2Zvb19iYXIiLCAidGVzdHZhbHVlMyIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgInRlc3R2YWx1ZTMiKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfb3ZlcnJpZGVzX3Vuc2V0KHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUMl9sb2NhbF9mb29fYmFyIiwgInRlc3R2YWx1ZTMiKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUMiIsIFRydWUpLCAidGVzdHZhbHVlMyIpCisKKyAgICBkZWYgdGVzdF9rZXlleHBhbnNpb25fb3ZlcnJpZGUoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkxPQ0FMIiwgImxvY2FsIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9iYXIiLCAidGVzdHZhbHVlMiIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfJHtMT0NBTH0iLCAidGVzdHZhbHVlMyIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfZm9vIiwgInRlc3R2YWx1ZTQiKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgYmIuZGF0YS5leHBhbmRLZXlzKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICJ0ZXN0dmFsdWUzIikKKworICAgIGRlZiB0ZXN0X3JlbmFtZV9vdmVycmlkZShzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiQUxURVJOQVRJVkVfbmN1cnNlcy10b29sc19jbGFzcy10YXJnZXQiLCAiYSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIk9WRVJSSURFUyIsICJjbGFzcy10YXJnZXQiKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgc2VsZi5kLnJlbmFtZVZhcigiQUxURVJOQVRJVkVfbmN1cnNlcy10b29scyIsICJBTFRFUk5BVElWRV9saWIzMi1uY3Vyc2VzLXRvb2xzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJBTFRFUk5BVElWRV9saWIzMi1uY3Vyc2VzLXRvb2xzIiwgVHJ1ZSksICJhIikKKworICAgIGRlZiB0ZXN0X3VuZGVyc2NvcmVfb3ZlcnJpZGUoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfYmFyIiwgInRlc3R2YWx1ZTIiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX3NvbWVfdmFsIiwgInRlc3R2YWx1ZTMiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2ZvbyIsICJ0ZXN0dmFsdWU0IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiT1ZFUlJJREVTIiwgImZvbzpiYXI6c29tZV92YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgInRlc3R2YWx1ZTMiKQorCitjbGFzcyBUZXN0S2V5RXhwYW5zaW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZCA9IGJiLmRhdGEuaW5pdCgpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICJmb28iKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQVIiLCAiZm9vIikKKworICAgIGRlZiB0ZXN0X2tleWV4cGFuZChzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVkFMXyR7Rk9PfSIsICJBIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVkFMXyR7QkFSfSIsICJCIikKKyAgICAgICAgd2l0aCBMb2dSZWNvcmQoKSBhcyBsb2dzOgorICAgICAgICAgICAgYmIuZGF0YS5leHBhbmRLZXlzKHNlbGYuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2dDb250YWlucygiVmFyaWFibGUga2V5IFZBTF8ke0ZPT30gKEEpIHJlcGxhY2VzIG9yaWdpbmFsIGtleSBWQUxfZm9vIChCKSIsIGxvZ3MpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlZBTF9mb28iLCBUcnVlKSwgIkEiKQorCitjbGFzcyBUZXN0RmxhZ3ModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgc2VsZi5kLnNldFZhcigiZm9vIiwgInZhbHVlIG9mIGZvbyIpCisgICAgICAgIHNlbGYuZC5zZXRWYXJGbGFnKCJmb28iLCAiZmxhZzEiLCAidmFsdWUgb2YgZmxhZzEiKQorICAgICAgICBzZWxmLmQuc2V0VmFyRmxhZygiZm9vIiwgImZsYWcyIiwgInZhbHVlIG9mIGZsYWcyIikKKworICAgIGRlZiB0ZXN0X3NldGZsYWcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhckZsYWcoImZvbyIsICJmbGFnMSIpLCAidmFsdWUgb2YgZmxhZzEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXJGbGFnKCJmb28iLCAiZmxhZzIiKSwgInZhbHVlIG9mIGZsYWcyIikKKworICAgIGRlZiB0ZXN0X2RlbGZsYWcoc2VsZik6CisgICAgICAgIHNlbGYuZC5kZWxWYXJGbGFnKCJmb28iLCAiZmxhZzIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXJGbGFnKCJmb28iLCAiZmxhZzEiKSwgInZhbHVlIG9mIGZsYWcxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyRmxhZygiZm9vIiwgImZsYWcyIiksIE5vbmUpCisKKworY2xhc3MgQ29udGFpbnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgc2VsZi5kLnNldFZhcigiU09NRUZMQUciLCAiYSBiIGMiKQorCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi51dGlscy5jb250YWlucygiU09NRUZMQUciLCAiYSIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgImIiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zKCJTT01FRkxBRyIsICJjIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zKCJTT01FRkxBRyIsICJhIGIiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zKCJTT01FRkxBRyIsICJiIGMiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zKCJTT01FRkxBRyIsICJjIGEiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgImEgYiBjIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi51dGlscy5jb250YWlucygiU09NRUZMQUciLCAiYyBiIGEiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJiLnV0aWxzLmNvbnRhaW5zKCJTT01FRkxBRyIsICJ4IiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgImEgeCIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJiLnV0aWxzLmNvbnRhaW5zKCJTT01FRkxBRyIsICJ4IGMgYiIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJiLnV0aWxzLmNvbnRhaW5zKCJTT01FRkxBRyIsICJ4IGMgYiBhIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisKKyAgICBkZWYgdGVzdF9jb250YWluc19hbnkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi51dGlscy5jb250YWluc19hbnkoIlNPTUVGTEFHIiwgImEiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiU09NRUZMQUciLCAiYiIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnNfYW55KCJTT01FRkxBRyIsICJjIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiU09NRUZMQUciLCAiYSBiIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi51dGlscy5jb250YWluc19hbnkoIlNPTUVGTEFHIiwgImIgYyIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnNfYW55KCJTT01FRkxBRyIsICJjIGEiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnNfYW55KCJTT01FRkxBRyIsICJhIHgiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiU09NRUZMQUciLCAieCBjIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiYi51dGlscy5jb250YWluc19hbnkoIlNPTUVGTEFHIiwgIngiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiYi51dGlscy5jb250YWluc19hbnkoIlNPTUVGTEFHIiwgInggeSB6IiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL2ZldGNoLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9mZXRjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTYxZjNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9mZXRjaC5weQpAQCAtMCwwICsxLDc1OSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUZXN0cyBmb3IgdGhlIEZldGNoZXIgKGZldGNoMi8pCisjCisjIENvcHlyaWdodCAoQykgMjAxMiBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgb3MKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBVUkkKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZAoraW1wb3J0IGJiCisKK2NsYXNzIFVSSVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHRlc3RfdXJpcyA9IHsKKyAgICAgICAgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9pbmRleC5odG1sIiA6IHsKKyAgICAgICAgICAgICd1cmknOiAnaHR0cDovL3d3dy5nb29nbGUuY29tL2luZGV4Lmh0bWwnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdodHRwJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICd3d3cuZ29vZ2xlLmNvbScsCisgICAgICAgICAgICAncG9ydCc6IE5vbmUsCisgICAgICAgICAgICAnaG9zdHBvcnQnOiAnd3d3Lmdvb2dsZS5jb20nLAorICAgICAgICAgICAgJ3BhdGgnOiAnL2luZGV4Lmh0bWwnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcm5hbWUnOiAnJywKKyAgICAgICAgICAgICdwYXNzd29yZCc6ICcnLAorICAgICAgICAgICAgJ3BhcmFtcyc6IHt9LAorICAgICAgICAgICAgJ3F1ZXJ5Jzoge30sCisgICAgICAgICAgICAncmVsYXRpdmUnOiBGYWxzZQorICAgICAgICB9LAorICAgICAgICAiaHR0cDovL3d3dy5nb29nbGUuY29tL2luZGV4Lmh0bWw7cGFyYW0xPXZhbHVlMSIgOiB7CisgICAgICAgICAgICAndXJpJzogJ2h0dHA6Ly93d3cuZ29vZ2xlLmNvbS9pbmRleC5odG1sO3BhcmFtMT12YWx1ZTEnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdodHRwJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICd3d3cuZ29vZ2xlLmNvbScsCisgICAgICAgICAgICAncG9ydCc6IE5vbmUsCisgICAgICAgICAgICAnaG9zdHBvcnQnOiAnd3d3Lmdvb2dsZS5jb20nLAorICAgICAgICAgICAgJ3BhdGgnOiAnL2luZGV4Lmh0bWwnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcm5hbWUnOiAnJywKKyAgICAgICAgICAgICdwYXNzd29yZCc6ICcnLAorICAgICAgICAgICAgJ3BhcmFtcyc6IHsKKyAgICAgICAgICAgICAgICAncGFyYW0xJzogJ3ZhbHVlMScKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAncXVlcnknOiB7fSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IEZhbHNlCisgICAgICAgIH0sCisgICAgICAgICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2luZGV4Lmh0bWw/cGFyYW0xPXZhbHVlMSIgOiB7CisgICAgICAgICAgICAndXJpJzogJ2h0dHA6Ly93d3cuZXhhbXBsZS5vcmcvaW5kZXguaHRtbD9wYXJhbTE9dmFsdWUxJywKKyAgICAgICAgICAgICdzY2hlbWUnOiAnaHR0cCcsCisgICAgICAgICAgICAnaG9zdG5hbWUnOiAnd3d3LmV4YW1wbGUub3JnJywKKyAgICAgICAgICAgICdwb3J0JzogTm9uZSwKKyAgICAgICAgICAgICdob3N0cG9ydCc6ICd3d3cuZXhhbXBsZS5vcmcnLAorICAgICAgICAgICAgJ3BhdGgnOiAnL2luZGV4Lmh0bWwnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcm5hbWUnOiAnJywKKyAgICAgICAgICAgICdwYXNzd29yZCc6ICcnLAorICAgICAgICAgICAgJ3BhcmFtcyc6IHt9LAorICAgICAgICAgICAgJ3F1ZXJ5JzogeworICAgICAgICAgICAgICAgICdwYXJhbTEnOiAndmFsdWUxJworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IEZhbHNlCisgICAgICAgIH0sCisgICAgICAgICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2luZGV4Lmh0bWw/cXBhcmFtMT1xdmFsdWUxO3BhcmFtMj12YWx1ZTIiIDogeworICAgICAgICAgICAgJ3VyaSc6ICdodHRwOi8vd3d3LmV4YW1wbGUub3JnL2luZGV4Lmh0bWw/cXBhcmFtMT1xdmFsdWUxO3BhcmFtMj12YWx1ZTInLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdodHRwJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICd3d3cuZXhhbXBsZS5vcmcnLAorICAgICAgICAgICAgJ3BvcnQnOiBOb25lLAorICAgICAgICAgICAgJ2hvc3Rwb3J0JzogJ3d3dy5leGFtcGxlLm9yZycsCisgICAgICAgICAgICAncGF0aCc6ICcvaW5kZXguaHRtbCcsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzogeworICAgICAgICAgICAgICAgICdwYXJhbTInOiAndmFsdWUyJworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdxdWVyeSc6IHsKKyAgICAgICAgICAgICAgICAncXBhcmFtMSc6ICdxdmFsdWUxJworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IEZhbHNlCisgICAgICAgIH0sCisgICAgICAgICJodHRwOi8vd3d3LmV4YW1wbGUuY29tOjgwODAvaW5kZXguaHRtbCIgOiB7CisgICAgICAgICAgICAndXJpJzogJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb206ODA4MC9pbmRleC5odG1sJywKKyAgICAgICAgICAgICdzY2hlbWUnOiAnaHR0cCcsCisgICAgICAgICAgICAnaG9zdG5hbWUnOiAnd3d3LmV4YW1wbGUuY29tJywKKyAgICAgICAgICAgICdwb3J0JzogODA4MCwKKyAgICAgICAgICAgICdob3N0cG9ydCc6ICd3d3cuZXhhbXBsZS5jb206ODA4MCcsCisgICAgICAgICAgICAncGF0aCc6ICcvaW5kZXguaHRtbCcsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzoge30sCisgICAgICAgICAgICAncXVlcnknOiB7fSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IEZhbHNlCisgICAgICAgIH0sCisgICAgICAgICJjdnM6Ly9hbm9uY3ZzQGN2cy5oYW5kaGVsZHMub3JnL2N2czttb2R1bGU9ZmFtaWxpYXIvZGlzdC9pcGtnIiA6IHsKKyAgICAgICAgICAgICd1cmknOiAnY3ZzOi8vYW5vbmN2c0BjdnMuaGFuZGhlbGRzLm9yZy9jdnM7bW9kdWxlPWZhbWlsaWFyL2Rpc3QvaXBrZycsCisgICAgICAgICAgICAnc2NoZW1lJzogJ2N2cycsCisgICAgICAgICAgICAnaG9zdG5hbWUnOiAnY3ZzLmhhbmRoZWxkcy5vcmcnLAorICAgICAgICAgICAgJ3BvcnQnOiBOb25lLAorICAgICAgICAgICAgJ2hvc3Rwb3J0JzogJ2N2cy5oYW5kaGVsZHMub3JnJywKKyAgICAgICAgICAgICdwYXRoJzogJy9jdnMnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJ2Fub25jdnMnLAorICAgICAgICAgICAgJ3VzZXJuYW1lJzogJ2Fub25jdnMnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzogeworICAgICAgICAgICAgICAgICdtb2R1bGUnOiAnZmFtaWxpYXIvZGlzdC9pcGtnJworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdxdWVyeSc6IHt9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogRmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgImN2czovL2Fub25jdnM6YW5vbnltb3VzQGN2cy5oYW5kaGVsZHMub3JnL2N2czt0YWc9VjAtOTktODE7bW9kdWxlPWZhbWlsaWFyL2Rpc3QvaXBrZyI6IHsKKyAgICAgICAgICAgICd1cmknOiAnY3ZzOi8vYW5vbmN2czphbm9ueW1vdXNAY3ZzLmhhbmRoZWxkcy5vcmcvY3ZzO3RhZz1WMC05OS04MTttb2R1bGU9ZmFtaWxpYXIvZGlzdC9pcGtnJywKKyAgICAgICAgICAgICdzY2hlbWUnOiAnY3ZzJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICdjdnMuaGFuZGhlbGRzLm9yZycsCisgICAgICAgICAgICAncG9ydCc6IE5vbmUsCisgICAgICAgICAgICAnaG9zdHBvcnQnOiAnY3ZzLmhhbmRoZWxkcy5vcmcnLAorICAgICAgICAgICAgJ3BhdGgnOiAnL2N2cycsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnYW5vbmN2czphbm9ueW1vdXMnLAorICAgICAgICAgICAgJ3VzZXJuYW1lJzogJ2Fub25jdnMnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJ2Fub255bW91cycsCisgICAgICAgICAgICAncGFyYW1zJzogeworICAgICAgICAgICAgICAgICd0YWcnOiAnVjAtOTktODEnLAorICAgICAgICAgICAgICAgICdtb2R1bGUnOiAnZmFtaWxpYXIvZGlzdC9pcGtnJworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdxdWVyeSc6IHt9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogRmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgImZpbGU6Ly9leGFtcGxlLmRpZmYiOiB7ICMgTk9URTogTm90IFJGQyBjb21wbGlhbnQhCisgICAgICAgICAgICAndXJpJzogJ2ZpbGU6ZXhhbXBsZS5kaWZmJywKKyAgICAgICAgICAgICdzY2hlbWUnOiAnZmlsZScsCisgICAgICAgICAgICAnaG9zdG5hbWUnOiAnJywKKyAgICAgICAgICAgICdwb3J0JzogTm9uZSwKKyAgICAgICAgICAgICdob3N0cG9ydCc6ICcnLAorICAgICAgICAgICAgJ3BhdGgnOiAnZXhhbXBsZS5kaWZmJywKKyAgICAgICAgICAgICd1c2VyaW5mbyc6ICcnLAorICAgICAgICAgICAgJ3VzZXJuYW1lJzogJycsCisgICAgICAgICAgICAncGFzc3dvcmQnOiAnJywKKyAgICAgICAgICAgICdwYXJhbXMnOiB7fSwKKyAgICAgICAgICAgICdxdWVyeSc6IHt9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogVHJ1ZQorICAgICAgICB9LAorICAgICAgICAiZmlsZTpleGFtcGxlLmRpZmYiOiB7ICMgTk9URTogUkZDIGNvbXBsaWFudCB2ZXJzaW9uIG9mIHRoZSBmb3JtZXIKKyAgICAgICAgICAgICd1cmknOiAnZmlsZTpleGFtcGxlLmRpZmYnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdmaWxlJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICcnLAorICAgICAgICAgICAgJ3BvcnQnOiBOb25lLAorICAgICAgICAgICAgJ2hvc3Rwb3J0JzogJycsCisgICAgICAgICAgICAncGF0aCc6ICdleGFtcGxlLmRpZmYnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzoge30sCisgICAgICAgICAgICAncXVlcnknOiB7fSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IFRydWUKKyAgICAgICAgfSwKKyAgICAgICAgImZpbGU6Ly8vdG1wL2V4YW1wbGUuZGlmZiI6IHsKKyAgICAgICAgICAgICd1cmknOiAnZmlsZTovLy90bXAvZXhhbXBsZS5kaWZmJywKKyAgICAgICAgICAgICdzY2hlbWUnOiAnZmlsZScsCisgICAgICAgICAgICAnaG9zdG5hbWUnOiAnJywKKyAgICAgICAgICAgICdwb3J0JzogTm9uZSwKKyAgICAgICAgICAgICdob3N0cG9ydCc6ICcnLAorICAgICAgICAgICAgJ3BhdGgnOiAnL3RtcC9leGFtcGxlLmRpZmYnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzoge30sCisgICAgICAgICAgICAncXVlcnknOiB7fSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IEZhbHNlCisgICAgICAgIH0sCisgICAgICAgICJnaXQ6Ly8vcGF0aC9leGFtcGxlLmdpdCI6IHsKKyAgICAgICAgICAgICd1cmknOiAnZ2l0Oi8vL3BhdGgvZXhhbXBsZS5naXQnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdnaXQnLAorICAgICAgICAgICAgJ2hvc3RuYW1lJzogJycsCisgICAgICAgICAgICAncG9ydCc6IE5vbmUsCisgICAgICAgICAgICAnaG9zdHBvcnQnOiAnJywKKyAgICAgICAgICAgICdwYXRoJzogJy9wYXRoL2V4YW1wbGUuZ2l0JywKKyAgICAgICAgICAgICd1c2VyaW5mbyc6ICcnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcm5hbWUnOiAnJywKKyAgICAgICAgICAgICdwYXNzd29yZCc6ICcnLAorICAgICAgICAgICAgJ3BhcmFtcyc6IHt9LAorICAgICAgICAgICAgJ3F1ZXJ5Jzoge30sCisgICAgICAgICAgICAncmVsYXRpdmUnOiBGYWxzZQorICAgICAgICB9LAorICAgICAgICAiZ2l0OnBhdGgvZXhhbXBsZS5naXQiOiB7CisgICAgICAgICAgICAndXJpJzogJ2dpdDpwYXRoL2V4YW1wbGUuZ2l0JywKKyAgICAgICAgICAgICdzY2hlbWUnOiAnZ2l0JywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICcnLAorICAgICAgICAgICAgJ3BvcnQnOiBOb25lLAorICAgICAgICAgICAgJ2hvc3Rwb3J0JzogJycsCisgICAgICAgICAgICAncGF0aCc6ICdwYXRoL2V4YW1wbGUuZ2l0JywKKyAgICAgICAgICAgICd1c2VyaW5mbyc6ICcnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcm5hbWUnOiAnJywKKyAgICAgICAgICAgICdwYXNzd29yZCc6ICcnLAorICAgICAgICAgICAgJ3BhcmFtcyc6IHt9LAorICAgICAgICAgICAgJ3F1ZXJ5Jzoge30sCisgICAgICAgICAgICAncmVsYXRpdmUnOiBUcnVlCisgICAgICAgIH0sCisgICAgICAgICJnaXQ6Ly9leGFtcGxlLm5ldC9wYXRoL2V4YW1wbGUuZ2l0IjogeworICAgICAgICAgICAgJ3VyaSc6ICdnaXQ6Ly9leGFtcGxlLm5ldC9wYXRoL2V4YW1wbGUuZ2l0JywKKyAgICAgICAgICAgICdzY2hlbWUnOiAnZ2l0JywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICdleGFtcGxlLm5ldCcsCisgICAgICAgICAgICAncG9ydCc6IE5vbmUsCisgICAgICAgICAgICAnaG9zdHBvcnQnOiAnZXhhbXBsZS5uZXQnLAorICAgICAgICAgICAgJ3BhdGgnOiAnL3BhdGgvZXhhbXBsZS5naXQnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzoge30sCisgICAgICAgICAgICAncXVlcnknOiB7fSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IEZhbHNlCisgICAgICAgIH0KKyAgICB9CisKKyAgICBkZWYgdGVzdF91cmkoc2VsZik6CisgICAgICAgIGZvciB0ZXN0X3VyaSwgcmVmIGluIHNlbGYudGVzdF91cmlzLml0ZW1zKCk6CisgICAgICAgICAgICB1cmkgPSBVUkkodGVzdF91cmkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHVyaSksIHJlZlsndXJpJ10pCisKKyAgICAgICAgICAgICMgZXhwZWN0ZWQgYXR0cmlidXRlcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkuc2NoZW1lLCByZWZbJ3NjaGVtZSddKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS51c2VyaW5mbywgcmVmWyd1c2VyaW5mbyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkudXNlcm5hbWUsIHJlZlsndXNlcm5hbWUnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnBhc3N3b3JkLCByZWZbJ3Bhc3N3b3JkJ10pCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLmhvc3RuYW1lLCByZWZbJ2hvc3RuYW1lJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wb3J0LCByZWZbJ3BvcnQnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLmhvc3Rwb3J0LCByZWZbJ2hvc3Rwb3J0J10pCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnBhdGgsIHJlZlsncGF0aCddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGFyYW1zLCByZWZbJ3BhcmFtcyddKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5yZWxhdGl2ZSwgcmVmWydyZWxhdGl2ZSddKQorCisgICAgZGVmIHRlc3RfZGljdChzZWxmKToKKyAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi50ZXN0X3VyaXMudmFsdWVzKCk6CisgICAgICAgICAgICB1cmkgPSBVUkkoKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5zY2hlbWUsICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkudXNlcmluZm8sICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkudXNlcm5hbWUsICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGFzc3dvcmQsICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkuaG9zdG5hbWUsICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucG9ydCwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnBhdGgsICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGFyYW1zLCB7fSkKKworCisgICAgICAgICAgICB1cmkuc2NoZW1lID0gdGVzdFsnc2NoZW1lJ10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnNjaGVtZSwgdGVzdFsnc2NoZW1lJ10pCisKKyAgICAgICAgICAgIHVyaS51c2VyaW5mbyA9IHRlc3RbJ3VzZXJpbmZvJ10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnVzZXJpbmZvLCB0ZXN0Wyd1c2VyaW5mbyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkudXNlcm5hbWUsIHRlc3RbJ3VzZXJuYW1lJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wYXNzd29yZCwgdGVzdFsncGFzc3dvcmQnXSkKKworICAgICAgICAgICAgIyBtYWtlIHN1cmUgY2hhbmdpbmcgdGhlIHZhbHVlcyBkb2Vzbid0IGRvIGFueXRoaW5nIHVuZXhwZWN0ZWQKKyAgICAgICAgICAgIHVyaS51c2VybmFtZSA9ICdjaGFuZ2VtZScKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnVzZXJuYW1lLCAnY2hhbmdlbWUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGFzc3dvcmQsIHRlc3RbJ3Bhc3N3b3JkJ10pCisgICAgICAgICAgICB1cmkucGFzc3dvcmQgPSAnaW5zZWN1cmUnCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS51c2VybmFtZSwgJ2NoYW5nZW1lJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnBhc3N3b3JkLCAnaW5zZWN1cmUnKQorCisgICAgICAgICAgICAjIHJlc2V0IGJhY2sgYWZ0ZXIgb3VyIHRyaWNrZXJ5CisgICAgICAgICAgICB1cmkudXNlcmluZm8gPSB0ZXN0Wyd1c2VyaW5mbyddCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS51c2VyaW5mbywgdGVzdFsndXNlcmluZm8nXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnVzZXJuYW1lLCB0ZXN0Wyd1c2VybmFtZSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGFzc3dvcmQsIHRlc3RbJ3Bhc3N3b3JkJ10pCisKKyAgICAgICAgICAgIHVyaS5ob3N0bmFtZSA9IHRlc3RbJ2hvc3RuYW1lJ10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLmhvc3RuYW1lLCB0ZXN0Wydob3N0bmFtZSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkuaG9zdHBvcnQsIHRlc3RbJ2hvc3RuYW1lJ10pCisKKyAgICAgICAgICAgIHVyaS5wb3J0ID0gdGVzdFsncG9ydCddCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wb3J0LCB0ZXN0Wydwb3J0J10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5ob3N0cG9ydCwgdGVzdFsnaG9zdHBvcnQnXSkKKworICAgICAgICAgICAgdXJpLnBhdGggPSB0ZXN0WydwYXRoJ10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnBhdGgsIHRlc3RbJ3BhdGgnXSkKKworICAgICAgICAgICAgdXJpLnBhcmFtcyA9IHRlc3RbJ3BhcmFtcyddCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wYXJhbXMsIHRlc3RbJ3BhcmFtcyddKQorCisgICAgICAgICAgICB1cmkucXVlcnkgPSB0ZXN0WydxdWVyeSddCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5xdWVyeSwgdGVzdFsncXVlcnknXSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodXJpKSwgdGVzdFsndXJpJ10pCisKKyAgICAgICAgICAgIHVyaS5wYXJhbXMgPSB7fQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGFyYW1zLCB7fSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHVyaSksIChzdHIodXJpKS5zcGxpdCgiOyIpKVswXSkKKworY2xhc3MgRmV0Y2hlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm9yaWdkaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBzZWxmLnRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi5kbGRpciA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICJkb3dubG9hZCIpCisgICAgICAgIG9zLm1rZGlyKHNlbGYuZGxkaXIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkRMX0RJUiIsIHNlbGYuZGxkaXIpCisgICAgICAgIHNlbGYudW5wYWNrZGlyID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgInVucGFja2VkIikKKyAgICAgICAgb3MubWtkaXIoc2VsZi51bnBhY2tkaXIpCisgICAgICAgIHBlcnNpc3RkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAicGVyc2lzdGRhdGEiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJQRVJTSVNURU5UX0RJUiIsIHBlcnNpc3RkaXIpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIG9zLmNoZGlyKHNlbGYub3JpZ2RpcikKKyAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIoc2VsZi50ZW1wZGlyKQorCitjbGFzcyBNaXJyb3JVcmlUZXN0KEZldGNoZXJUZXN0KToKKworICAgIHJlcGxhY2V1cmlzID0geworICAgICAgICAoImdpdDovL2dpdC5pbnZhbGlkLmluZnJhZGVhZC5vcmcvbXRkLXV0aWxzLmdpdDt0YWc9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIsICJnaXQ6Ly8uKi8uKiIsICJodHRwOi8vc29tZXdoZXJlLm9yZy9zb21lZGlyLyIpIAorICAgICAgICAgICAgOiAiaHR0cDovL3NvbWV3aGVyZS5vcmcvc29tZWRpci9naXQyX2dpdC5pbnZhbGlkLmluZnJhZGVhZC5vcmcubXRkLXV0aWxzLmdpdC50YXIuZ3oiLAorICAgICAgICAoImdpdDovL2dpdC5pbnZhbGlkLmluZnJhZGVhZC5vcmcvbXRkLXV0aWxzLmdpdDt0YWc9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIsICJnaXQ6Ly8uKi8oW14vXSsvKSooW14vXSopIiwgImdpdDovL3NvbWV3aGVyZS5vcmcvc29tZWRpci9cXDI7cHJvdG9jb2w9aHR0cCIpIAorICAgICAgICAgICAgOiAiZ2l0Oi8vc29tZXdoZXJlLm9yZy9zb21lZGlyL210ZC11dGlscy5naXQ7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTA7cHJvdG9jb2w9aHR0cCIsIAorICAgICAgICAoImdpdDovL2dpdC5pbnZhbGlkLmluZnJhZGVhZC5vcmcvZm9vL210ZC11dGlscy5naXQ7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLCAiZ2l0Oi8vLiovKFteL10rLykqKFteL10qKSIsICJnaXQ6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIvXFwyO3Byb3RvY29sPWh0dHAiKSAKKyAgICAgICAgICAgIDogImdpdDovL3NvbWV3aGVyZS5vcmcvc29tZWRpci9tdGQtdXRpbHMuZ2l0O3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwO3Byb3RvY29sPWh0dHAiLCAKKyAgICAgICAgKCJnaXQ6Ly9naXQuaW52YWxpZC5pbmZyYWRlYWQub3JnL2Zvby9tdGQtdXRpbHMuZ2l0O3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIiwgImdpdDovLy4qLyhbXi9dKy8pKihbXi9dKikiLCAiZ2l0Oi8vc29tZXdoZXJlLm9yZy9cXDI7cHJvdG9jb2w9aHR0cCIpIAorICAgICAgICAgICAgOiAiZ2l0Oi8vc29tZXdoZXJlLm9yZy9tdGQtdXRpbHMuZ2l0O3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwO3Byb3RvY29sPWh0dHAiLCAKKyAgICAgICAgKCJnaXQ6Ly9zb21lc2VydmVyLm9yZy9iaXRiYWtlO3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIiwgImdpdDovL3NvbWVzZXJ2ZXIub3JnL2JpdGJha2UiLCAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIpCisgICAgICAgICAgICA6ICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlO3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIiwKKyAgICAgICAgKCJmaWxlOi8vc3N0YXRlLXh5ei50Z3oiLCAiZmlsZTovLy4qIiwgImZpbGU6Ly8vc29tZXdoZXJlLzEyMzQvc3N0YXRlLWNhY2hlIikgCisgICAgICAgICAgICA6ICJmaWxlOi8vL3NvbWV3aGVyZS8xMjM0L3NzdGF0ZS1jYWNoZS9zc3RhdGUteHl6LnRneiIsCisgICAgICAgICgiZmlsZTovL3NzdGF0ZS14eXoudGd6IiwgImZpbGU6Ly8uKiIsICJmaWxlOi8vL3NvbWV3aGVyZS8xMjM0L3NzdGF0ZS1jYWNoZS8iKSAKKyAgICAgICAgICAgIDogImZpbGU6Ly8vc29tZXdoZXJlLzEyMzQvc3N0YXRlLWNhY2hlL3NzdGF0ZS14eXoudGd6IiwKKyAgICAgICAgKCJodHRwOi8vc29tZXdoZXJlLm9yZy9zb21lZGlyMS9zb21lZGlyMi9zb21lZmlsZV8xLjIuMy50YXIuZ3oiLCAiaHR0cDovLy4qLy4qIiwgImh0dHA6Ly9zb21ld2hlcmUyLm9yZy9zb21lZGlyMyIpIAorICAgICAgICAgICAgOiAiaHR0cDovL3NvbWV3aGVyZTIub3JnL3NvbWVkaXIzL3NvbWVmaWxlXzEuMi4zLnRhci5neiIsCisgICAgICAgICgiaHR0cDovL3NvbWV3aGVyZS5vcmcvc29tZWRpcjEvc29tZWZpbGVfMS4yLjMudGFyLmd6IiwgImh0dHA6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIxL3NvbWVmaWxlXzEuMi4zLnRhci5neiIsICJodHRwOi8vc29tZXdoZXJlMi5vcmcvc29tZWRpcjMvc29tZWZpbGVfMS4yLjMudGFyLmd6IikgCisgICAgICAgICAgICA6ICJodHRwOi8vc29tZXdoZXJlMi5vcmcvc29tZWRpcjMvc29tZWZpbGVfMS4yLjMudGFyLmd6IiwKKyAgICAgICAgKCJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZGlzdC9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS43LjEudGFyLmJ6MiIsICJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZGlzdCIsICJodHRwOi8vYXJjaGl2ZS5hcGFjaGUub3JnL2Rpc3QiKQorICAgICAgICAgICAgOiAiaHR0cDovL2FyY2hpdmUuYXBhY2hlLm9yZy9kaXN0L3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjcuMS50YXIuYnoyIiwKKyAgICAgICAgKCJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZGlzdC9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS43LjEudGFyLmJ6MiIsICJodHRwOi8vLiovLioiLCAiZmlsZTovLy9zb21lcGF0aC9kb3dubG9hZHMvIikKKyAgICAgICAgICAgIDogImZpbGU6Ly8vc29tZXBhdGgvZG93bmxvYWRzL3N1YnZlcnNpb24tMS43LjEudGFyLmJ6MiIsCisgICAgICAgICgiZ2l0Oi8vZ2l0LmludmFsaWQuaW5mcmFkZWFkLm9yZy9tdGQtdXRpbHMuZ2l0O3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIiwgImdpdDovLy4qLy4qIiwgImdpdDovL3NvbWV3aGVyZS5vcmcvc29tZWRpci9CQVNFTkFNRTtwcm90b2NvbD1odHRwIikgCisgICAgICAgICAgICA6ICJnaXQ6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIvbXRkLXV0aWxzLmdpdDt0YWc9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDtwcm90b2NvbD1odHRwIiwgCisgICAgICAgICgiZ2l0Oi8vZ2l0LmludmFsaWQuaW5mcmFkZWFkLm9yZy9mb28vbXRkLXV0aWxzLmdpdDt0YWc9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIsICJnaXQ6Ly8uKi8uKiIsICJnaXQ6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIvQkFTRU5BTUU7cHJvdG9jb2w9aHR0cCIpIAorICAgICAgICAgICAgOiAiZ2l0Oi8vc29tZXdoZXJlLm9yZy9zb21lZGlyL210ZC11dGlscy5naXQ7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTA7cHJvdG9jb2w9aHR0cCIsIAorICAgICAgICAoImdpdDovL2dpdC5pbnZhbGlkLmluZnJhZGVhZC5vcmcvZm9vL210ZC11dGlscy5naXQ7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLCAiZ2l0Oi8vLiovLioiLCAiZ2l0Oi8vc29tZXdoZXJlLm9yZy9zb21lZGlyL01JUlJPUk5BTUU7cHJvdG9jb2w9aHR0cCIpIAorICAgICAgICAgICAgOiAiZ2l0Oi8vc29tZXdoZXJlLm9yZy9zb21lZGlyL2dpdC5pbnZhbGlkLmluZnJhZGVhZC5vcmcuZm9vLm10ZC11dGlscy5naXQ7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTA7cHJvdG9jb2w9aHR0cCIsIAorCisgICAgICAgICNSZW5hbWluZyBmaWxlcyBkb2Vzbid0IHdvcmsKKyAgICAgICAgIygiaHR0cDovL3NvbWV3aGVyZS5vcmcvc29tZWRpcjEvc29tZWZpbGVfMS4yLjMudGFyLmd6IiwgImh0dHA6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIxL3NvbWVmaWxlXzEuMi4zLnRhci5neiIsICJodHRwOi8vc29tZXdoZXJlMi5vcmcvc29tZWRpcjMvc29tZWZpbGVfMi4zLjQudGFyLmd6IikgOiAiaHR0cDovL3NvbWV3aGVyZTIub3JnL3NvbWVkaXIzL3NvbWVmaWxlXzIuMy40LnRhci5neiIKKyAgICAgICAgIygiZmlsZTovL3NzdGF0ZS14eXoudGd6IiwgImZpbGU6Ly8uKi8uKiIsICJmaWxlOi8vL3NvbWV3aGVyZS8xMjM0L3NzdGF0ZS1jYWNoZSIpIDogImZpbGU6Ly8vc29tZXdoZXJlLzEyMzQvc3N0YXRlLWNhY2hlL3NzdGF0ZS14eXoudGd6IiwKKyAgICB9CisKKyAgICBtaXJyb3J2YXIgPSAiaHR0cDovLy4qLy4qIGZpbGU6Ly8vc29tZXBhdGgvZG93bmxvYWRzLyBcbiIgXAorICAgICAgICAgICAgICAgICJnaXQ6Ly9zb21lc2VydmVyLm9yZy9iaXRiYWtlIGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UgXG4iIFwKKyAgICAgICAgICAgICAgICAiaHR0cHM6Ly8uKi8uKiBmaWxlOi8vL3NvbWVvdGhlcnBhdGgvZG93bmxvYWRzLyBcbiIgXAorICAgICAgICAgICAgICAgICJodHRwOi8vLiovLiogZmlsZTovLy9zb21lb3RoZXJwYXRoL2Rvd25sb2Fkcy8gXG4iCisKKyAgICBkZWYgdGVzdF91cmlyZXBsYWNlKHNlbGYpOgorICAgICAgICBmb3IgaywgdiBpbiBzZWxmLnJlcGxhY2V1cmlzLml0ZW1zKCk6CisgICAgICAgICAgICB1ZCA9IGJiLmZldGNoLkZldGNoRGF0YShrWzBdLCBzZWxmLmQpCisgICAgICAgICAgICB1ZC5zZXR1cF9sb2NhbHBhdGgoc2VsZi5kKQorICAgICAgICAgICAgbWlycm9ycyA9IGJiLmZldGNoMi5taXJyb3JfZnJvbV9zdHJpbmcoIiVzICVzIiAlIChrWzFdLCBrWzJdKSkKKyAgICAgICAgICAgIG5ld3VyaXMsIHVkcyA9IGJiLmZldGNoMi5idWlsZF9taXJyb3J1cmlzKHVkLCBtaXJyb3JzLCBzZWxmLmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt2XSwgbmV3dXJpcykKKworICAgIGRlZiB0ZXN0X3VyaWxpc3QxKHNlbGYpOgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2hEYXRhKCJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiLCBzZWxmLmQpCisgICAgICAgIG1pcnJvcnMgPSBiYi5mZXRjaDIubWlycm9yX2Zyb21fc3RyaW5nKHNlbGYubWlycm9ydmFyKQorICAgICAgICB1cmlzLCB1ZHMgPSBiYi5mZXRjaDIuYnVpbGRfbWlycm9ydXJpcyhmZXRjaGVyLCBtaXJyb3JzLCBzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpcywgWydmaWxlOi8vL3NvbWVwYXRoL2Rvd25sb2Fkcy9iaXRiYWtlLTEuMC50YXIuZ3onLCAnZmlsZTovLy9zb21lb3RoZXJwYXRoL2Rvd25sb2Fkcy9iaXRiYWtlLTEuMC50YXIuZ3onXSkKKworICAgIGRlZiB0ZXN0X3VyaWxpc3QyKHNlbGYpOgorICAgICAgICAjIENhdGNoIGh0dHBzOi8vIC0+IGZpbGVzOi8vIGJ1ZworICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2hEYXRhKCJodHRwczovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjAudGFyLmd6Iiwgc2VsZi5kKQorICAgICAgICBtaXJyb3JzID0gYmIuZmV0Y2gyLm1pcnJvcl9mcm9tX3N0cmluZyhzZWxmLm1pcnJvcnZhcikKKyAgICAgICAgdXJpcywgdWRzID0gYmIuZmV0Y2gyLmJ1aWxkX21pcnJvcnVyaXMoZmV0Y2hlciwgbWlycm9ycywgc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaXMsIFsnZmlsZTovLy9zb21lb3RoZXJwYXRoL2Rvd25sb2Fkcy9iaXRiYWtlLTEuMC50YXIuZ3onXSkKKworICAgIGRlZiB0ZXN0X21pcnJvcl9vZl9taXJyb3Ioc2VsZik6CisgICAgICAgICMgVGVzdCBpZiBtaXJyb3Igb2YgYSBtaXJyb3Igd29ya3MKKyAgICAgICAgbWlycm9ydmFyID0gc2VsZi5taXJyb3J2YXIgKyAiIGh0dHA6Ly8uKi8uKiBodHRwOi8vb3RoZXJkb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9kb3dubG9hZHMvIFxuIgorICAgICAgICBtaXJyb3J2YXIgPSBtaXJyb3J2YXIgKyAiIGh0dHA6Ly9vdGhlcmRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnLy4qIGh0dHA6Ly9kb3dubG9hZHMyLnlvY3RvcHJvamVjdC5vcmcvZG93bmxvYWRzLyBcbiIKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoRGF0YSgiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjAudGFyLmd6Iiwgc2VsZi5kKQorICAgICAgICBtaXJyb3JzID0gYmIuZmV0Y2gyLm1pcnJvcl9mcm9tX3N0cmluZyhtaXJyb3J2YXIpCisgICAgICAgIHVyaXMsIHVkcyA9IGJiLmZldGNoMi5idWlsZF9taXJyb3J1cmlzKGZldGNoZXIsIG1pcnJvcnMsIHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmlzLCBbJ2ZpbGU6Ly8vc29tZXBhdGgvZG93bmxvYWRzL2JpdGJha2UtMS4wLnRhci5neicsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZTovLy9zb21lb3RoZXJwYXRoL2Rvd25sb2Fkcy9iaXRiYWtlLTEuMC50YXIuZ3onLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2h0dHA6Ly9vdGhlcmRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL2Rvd25sb2Fkcy9iaXRiYWtlLTEuMC50YXIuZ3onLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHR0cDovL2Rvd25sb2FkczIueW9jdG9wcm9qZWN0Lm9yZy9kb3dubG9hZHMvYml0YmFrZS0xLjAudGFyLmd6J10pCisKKworY2xhc3MgRmV0Y2hlckxvY2FsVGVzdChGZXRjaGVyVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBkZWYgdG91Y2goZm4pOgorICAgICAgICAgICAgd2l0aCBmaWxlKGZuLCAnYScpOgorICAgICAgICAgICAgICAgIG9zLnV0aW1lKGZuLCBOb25lKQorCisgICAgICAgIHN1cGVyKEZldGNoZXJMb2NhbFRlc3QsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi5sb2NhbHNyY2RpciA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICdsb2NhbHNyYycpCisgICAgICAgIG9zLm1ha2VkaXJzKHNlbGYubG9jYWxzcmNkaXIpCisgICAgICAgIHRvdWNoKG9zLnBhdGguam9pbihzZWxmLmxvY2Fsc3JjZGlyLCAnYScpKQorICAgICAgICB0b3VjaChvcy5wYXRoLmpvaW4oc2VsZi5sb2NhbHNyY2RpciwgJ2InKSkKKyAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKHNlbGYubG9jYWxzcmNkaXIsICdkaXInKSkKKyAgICAgICAgdG91Y2gob3MucGF0aC5qb2luKHNlbGYubG9jYWxzcmNkaXIsICdkaXInLCAnYycpKQorICAgICAgICB0b3VjaChvcy5wYXRoLmpvaW4oc2VsZi5sb2NhbHNyY2RpciwgJ2RpcicsICdkJykpCisgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbihzZWxmLmxvY2Fsc3JjZGlyLCAnZGlyJywgJ3N1YmRpcicpKQorICAgICAgICB0b3VjaChvcy5wYXRoLmpvaW4oc2VsZi5sb2NhbHNyY2RpciwgJ2RpcicsICdzdWJkaXInLCAnZScpKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGSUxFU1BBVEgiLCBzZWxmLmxvY2Fsc3JjZGlyKQorCisgICAgZGVmIGZldGNoVW5wYWNrKHNlbGYsIHVyaXMpOgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2godXJpcywgc2VsZi5kKQorICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgZmV0Y2hlci51bnBhY2soc2VsZi51bnBhY2tkaXIpCisgICAgICAgIGZsc3QgPSBbXQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnVucGFja2Rpcik6CisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBmbHN0LmFwcGVuZChvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5qb2luKHJvb3QsIGYpLCBzZWxmLnVucGFja2RpcikpCisgICAgICAgIGZsc3Quc29ydCgpCisgICAgICAgIHJldHVybiBmbHN0CisKKyAgICBkZWYgdGVzdF9sb2NhbChzZWxmKToKKyAgICAgICAgdHJlZSA9IHNlbGYuZmV0Y2hVbnBhY2soWydmaWxlOi8vYScsICdmaWxlOi8vZGlyL2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmVlLCBbJ2EnLCAnZGlyL2MnXSkKKworICAgIGRlZiB0ZXN0X2xvY2FsX3dpbGRjYXJkKHNlbGYpOgorICAgICAgICB0cmVlID0gc2VsZi5mZXRjaFVucGFjayhbJ2ZpbGU6Ly9hJywgJ2ZpbGU6Ly9kaXIvKiddKQorICAgICAgICAjIEZJWE1FOiB0aGlzIGlzIGJyb2tlbiAtIGl0IHNob3VsZCByZXR1cm4gWydhJywgJ2Rpci9jJywgJ2Rpci9kJywgJ2Rpci9zdWJkaXIvZSddCisgICAgICAgICMgc2VlIGh0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEyOAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyZWUsIFsnYScsICdiJywgJ2Rpci9jJywgJ2Rpci9kJywgJ2Rpci9zdWJkaXIvZSddKQorCisgICAgZGVmIHRlc3RfbG9jYWxfZGlyKHNlbGYpOgorICAgICAgICB0cmVlID0gc2VsZi5mZXRjaFVucGFjayhbJ2ZpbGU6Ly9hJywgJ2ZpbGU6Ly9kaXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmVlLCBbJ2EnLCAnZGlyL2MnLCAnZGlyL2QnLCAnZGlyL3N1YmRpci9lJ10pCisKKyAgICBkZWYgdGVzdF9sb2NhbF9zdWJkaXIoc2VsZik6CisgICAgICAgIHRyZWUgPSBzZWxmLmZldGNoVW5wYWNrKFsnZmlsZTovL2Rpci9zdWJkaXInXSkKKyAgICAgICAgIyBGSVhNRTogdGhpcyBpcyBicm9rZW4gLSBpdCBzaG91bGQgcmV0dXJuIFsnZGlyL3N1YmRpci9lJ10KKyAgICAgICAgIyBzZWUgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD02MTI5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJlZSwgWydzdWJkaXIvZSddKQorCisgICAgZGVmIHRlc3RfbG9jYWxfc3ViZGlyX2ZpbGUoc2VsZik6CisgICAgICAgIHRyZWUgPSBzZWxmLmZldGNoVW5wYWNrKFsnZmlsZTovL2Rpci9zdWJkaXIvZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyZWUsIFsnZGlyL3N1YmRpci9lJ10pCisKKyAgICBkZWYgdGVzdF9sb2NhbF9zdWJkaXJwYXJhbShzZWxmKToKKyAgICAgICAgdHJlZSA9IHNlbGYuZmV0Y2hVbnBhY2soWydmaWxlOi8vYTtzdWJkaXI9YmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJlZSwgWydiYXIvYSddKQorCisgICAgZGVmIHRlc3RfbG9jYWxfZGVlcHN1YmRpcnBhcmFtKHNlbGYpOgorICAgICAgICB0cmVlID0gc2VsZi5mZXRjaFVucGFjayhbJ2ZpbGU6Ly9kaXIvc3ViZGlyL2U7c3ViZGlyPWJhciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyZWUsIFsnYmFyL2Rpci9zdWJkaXIvZSddKQorCitjbGFzcyBGZXRjaGVyTmV0d29ya1Rlc3QoRmV0Y2hlclRlc3QpOgorCisgICAgaWYgb3MuZW52aXJvbi5nZXQoIkJCX1NLSVBfTkVUVEVTVFMiKSA9PSAieWVzIjoKKyAgICAgICAgcHJpbnQoIlVuc2V0IEJCX1NLSVBfTkVUVEVTVFMgdG8gcnVuIG5ldHdvcmsgdGVzdHMiKQorICAgIGVsc2U6CisgICAgICAgIGRlZiB0ZXN0X2ZldGNoKHNlbGYpOgorICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKFsiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjAudGFyLmd6IiwgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlL2JpdGJha2UtMS4xLnRhci5neiJdLCBzZWxmLmQpCisgICAgICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5nZXRzaXplKHNlbGYuZGxkaXIgKyAiL2JpdGJha2UtMS4wLnRhci5neiIpLCA1Nzc0OSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5nZXRzaXplKHNlbGYuZGxkaXIgKyAiL2JpdGJha2UtMS4xLnRhci5neiIpLCA1Nzg5MikKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJCX05PX05FVFdPUksiLCAiMSIpCisgICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goWyJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiLCAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjEudGFyLmd6Il0sIHNlbGYuZCkKKyAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICAgICAgZmV0Y2hlci51bnBhY2soc2VsZi51bnBhY2tkaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvcy5saXN0ZGlyKHNlbGYudW5wYWNrZGlyICsgIi9iaXRiYWtlLTEuMC8iKSksIDkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvcy5saXN0ZGlyKHNlbGYudW5wYWNrZGlyICsgIi9iaXRiYWtlLTEuMS8iKSksIDkpCisKKyAgICAgICAgZGVmIHRlc3RfZmV0Y2hfbWlycm9yKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiTUlSUk9SUyIsICJodHRwOi8vLiovLiogaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UiKQorICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKFsiaHR0cDovL2ludmFsaWQueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlL2JpdGJha2UtMS4wLnRhci5neiJdLCBzZWxmLmQpCisgICAgICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5nZXRzaXplKHNlbGYuZGxkaXIgKyAiL2JpdGJha2UtMS4wLnRhci5neiIpLCA1Nzc0OSkKKworICAgICAgICBkZWYgdGVzdF9mZXRjaF9taXJyb3Jfb2ZfbWlycm9yKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiTUlSUk9SUyIsICJodHRwOi8vLiovLiogaHR0cDovL2ludmFsaWQyLnlvY3RvcHJvamVjdC5vcmcvIFxuIGh0dHA6Ly9pbnZhbGlkMi55b2N0b3Byb2plY3Qub3JnLy4qIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlIikKKyAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbImh0dHA6Ly9pbnZhbGlkLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiXSwgc2VsZi5kKQorICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguZ2V0c2l6ZShzZWxmLmRsZGlyICsgIi9iaXRiYWtlLTEuMC50YXIuZ3oiKSwgNTc3NDkpCisKKyAgICAgICAgZGVmIHRlc3RfZmV0Y2hfZmlsZV9taXJyb3Jfb2ZfbWlycm9yKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiTUlSUk9SUyIsICJodHRwOi8vLiovLiogZmlsZTovLy9zb21lMXdoZXJlLyBcbiBmaWxlOi8vL3NvbWUxd2hlcmUvLiogZmlsZTovL3NvbWUyd2hlcmUvIFxuIGZpbGU6Ly9zb21lMndoZXJlLy4qIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlIikKKyAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbImh0dHA6Ly9pbnZhbGlkLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiXSwgc2VsZi5kKQorICAgICAgICAgICAgb3MubWtkaXIoc2VsZi5kbGRpciArICIvc29tZTJ3aGVyZSIpCisgICAgICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5nZXRzaXplKHNlbGYuZGxkaXIgKyAiL2JpdGJha2UtMS4wLnRhci5neiIpLCA1Nzc0OSkKKworICAgICAgICBkZWYgdGVzdF9mZXRjaF9wcmVtaXJyb3Ioc2VsZik6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJQUkVNSVJST1JTIiwgImh0dHA6Ly8uKi8uKiBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZSIpCisgICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goWyJodHRwOi8vaW52YWxpZC55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjAudGFyLmd6Il0sIHNlbGYuZCkKKyAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUoc2VsZi5kbGRpciArICIvYml0YmFrZS0xLjAudGFyLmd6IiksIDU3NzQ5KQorCisgICAgICAgIGRlZiBnaXRmZXRjaGVyKHNlbGYsIHVybDEsIHVybDIpOgorICAgICAgICAgICAgZGVmIGNoZWNrcmV2aXNpb24oc2VsZiwgZmV0Y2hlcik6CisgICAgICAgICAgICAgICAgZmV0Y2hlci51bnBhY2soc2VsZi51bnBhY2tkaXIpCisgICAgICAgICAgICAgICAgcmV2aXNpb24gPSBiYi5wcm9jZXNzLnJ1bigiZ2l0IHJldi1wYXJzZSBIRUFEIiwgc2hlbGw9VHJ1ZSwgY3dkPXNlbGYudW5wYWNrZGlyICsgIi9naXQiKVswXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXZpc2lvbiwgIjI3MGEwNWIwYjRiYTA5NTlmZTA2MjRkMmE0ODg1ZDdiNzA0MjZkYTUiKQorCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMiLCAiMSIpCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJTUkNSRVYiLCAiMjcwYTA1YjBiNGJhMDk1OWZlMDYyNGQyYTQ4ODVkN2I3MDQyNmRhNSIpCisgICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goW3VybDFdLCBzZWxmLmQpCisgICAgICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgICAgIGNoZWNrcmV2aXNpb24oc2VsZiwgZmV0Y2hlcikKKyAgICAgICAgICAgICMgV2lwZSBvdXQgdGhlIGRsZGlyIGNsb25lIGFuZCB0aGUgdW5wYWNrZWQgc291cmNlLCB0dXJuIG9mZiB0aGUgbmV0d29yayBhbmQgY2hlY2sgbWlycm9yIHRhcmJhbGwgd29ya3MKKyAgICAgICAgICAgIGJiLnV0aWxzLnBydW5lZGlyKHNlbGYuZGxkaXIgKyAiL2dpdDIvIikKKyAgICAgICAgICAgIGJiLnV0aWxzLnBydW5lZGlyKHNlbGYudW5wYWNrZGlyKQorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiQkJfTk9fTkVUV09SSyIsICIxIikKKyAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbdXJsMl0sIHNlbGYuZCkKKyAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICAgICAgY2hlY2tyZXZpc2lvbihzZWxmLCBmZXRjaGVyKQorCisgICAgICAgIGRlZiB0ZXN0X2dpdGZldGNoKHNlbGYpOgorICAgICAgICAgICAgdXJsMSA9IHVybDIgPSAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIKKyAgICAgICAgICAgIHNlbGYuZ2l0ZmV0Y2hlcih1cmwxLCB1cmwyKQorCisgICAgICAgIGRlZiB0ZXN0X2dpdGZldGNoX2dvb2RzcmNyZXYoc2VsZik6CisgICAgICAgICAgICAjIFNSQ1JFViBpcyBzZXQgYnV0IG1hdGNoZXMgcmV2PSBwYXJhbWV0ZXIKKyAgICAgICAgICAgIHVybDEgPSB1cmwyID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2U7cmV2PTI3MGEwNWIwYjRiYTA5NTlmZTA2MjRkMmE0ODg1ZDdiNzA0MjZkYTUiCisgICAgICAgICAgICBzZWxmLmdpdGZldGNoZXIodXJsMSwgdXJsMikKKworICAgICAgICBkZWYgdGVzdF9naXRmZXRjaF9iYWRzcmNyZXYoc2VsZik6CisgICAgICAgICAgICAjIFNSQ1JFViBpcyBzZXQgYnV0IGRvZXMgbm90IG1hdGNoIHJldj0gcGFyYW1ldGVyCisgICAgICAgICAgICB1cmwxID0gdXJsMiA9ICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlO3Jldj1kZWFkMDViMGI0YmEwOTU5ZmUwNjI0ZDJhNDg4NWQ3YjcwNDI2ZGE1IgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmIuZmV0Y2guRmV0Y2hFcnJvciwgc2VsZi5naXRmZXRjaGVyLCB1cmwxLCB1cmwyKQorCisgICAgICAgIGRlZiB0ZXN0X2dpdGZldGNoX3RhZ2FuZHJldihzZWxmKToKKyAgICAgICAgICAgICMgU1JDUkVWIGlzIHNldCBidXQgZG9lcyBub3QgbWF0Y2ggcmV2PSBwYXJhbWV0ZXIKKyAgICAgICAgICAgIHVybDEgPSB1cmwyID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2U7cmV2PTI3MGEwNWIwYjRiYTA5NTlmZTA2MjRkMmE0ODg1ZDdiNzA0MjZkYTU7dGFnPTI3MGEwNWIwYjRiYTA5NTlmZTA2MjRkMmE0ODg1ZDdiNzA0MjZkYTUiCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi5mZXRjaC5GZXRjaEVycm9yLCBzZWxmLmdpdGZldGNoZXIsIHVybDEsIHVybDIpCisKKyAgICAgICAgZGVmIHRlc3RfZ2l0ZmV0Y2hfcHJlbWlycm9yKHNlbGYpOgorICAgICAgICAgICAgdXJsMSA9ICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIgorICAgICAgICAgICAgdXJsMiA9ICJnaXQ6Ly9zb21lc2VydmVyLm9yZy9iaXRiYWtlIgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiUFJFTUlSUk9SUyIsICJnaXQ6Ly9zb21lc2VydmVyLm9yZy9iaXRiYWtlIGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UgXG4iKQorICAgICAgICAgICAgc2VsZi5naXRmZXRjaGVyKHVybDEsIHVybDIpCisKKyAgICAgICAgZGVmIHRlc3RfZ2l0ZmV0Y2hfcHJlbWlycm9yMihzZWxmKToKKyAgICAgICAgICAgIHVybDEgPSB1cmwyID0gImdpdDovL3NvbWVzZXJ2ZXIub3JnL2JpdGJha2UiCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJQUkVNSVJST1JTIiwgImdpdDovL3NvbWVzZXJ2ZXIub3JnL2JpdGJha2UgZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSBcbiIpCisgICAgICAgICAgICBzZWxmLmdpdGZldGNoZXIodXJsMSwgdXJsMikKKworICAgICAgICBkZWYgdGVzdF9naXRmZXRjaF9wcmVtaXJyb3IzKHNlbGYpOgorICAgICAgICAgICAgcmVhbHVybCA9ICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIgorICAgICAgICAgICAgZHVtbXl1cmwgPSAiZ2l0Oi8vc29tZXNlcnZlci5vcmcvYml0YmFrZSIKKyAgICAgICAgICAgIHNlbGYuc291cmNlZGlyID0gc2VsZi51bnBhY2tkaXIucmVwbGFjZSgidW5wYWNrZWQiLCAic291cmNlbWlycm9yLmdpdCIpCisgICAgICAgICAgICBvcy5jaGRpcihzZWxmLnRlbXBkaXIpCisgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bigiZ2l0IGNsb25lICVzICVzIDI+IC9kZXYvbnVsbCIgJSAocmVhbHVybCwgc2VsZi5zb3VyY2VkaXIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiUFJFTUlSUk9SUyIsICIlcyBnaXQ6Ly8lcztwcm90b2NvbD1maWxlIFxuIiAlIChkdW1teXVybCwgc2VsZi5zb3VyY2VkaXIpKQorICAgICAgICAgICAgc2VsZi5naXRmZXRjaGVyKGR1bW15dXJsLCBkdW1teXVybCkKKworICAgICAgICBkZWYgdGVzdF9naXRfc3VibW9kdWxlKHNlbGYpOgorICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKFsiZ2l0c206Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9naXQtc3VibW9kdWxlLXRlc3Q7cmV2PWYxMmU1N2YyZWRmMGFhNTM0Y2YxNjE2ZmE5ODNkMTY1YTkyYjA4NDIiXSwgc2VsZi5kKQorICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgICAgICAjIFByZXZpb3VzIGN3ZCBoYXMgYmVlbiBkZWxldGVkCisgICAgICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmRpcm5hbWUoc2VsZi51bnBhY2tkaXIpKQorICAgICAgICAgICAgZmV0Y2hlci51bnBhY2soc2VsZi51bnBhY2tkaXIpCisKKyAgICAgICAgZGVmIHRlc3RfdHJ1c3RlZF9uZXR3b3JrKHNlbGYpOgorICAgICAgICAgICAgIyBFbnN1cmUgdHJ1c3RlZF9uZXR3b3JrIHJldHVybnMgRmFsc2Ugd2hlbiB0aGUgaG9zdCBJUyBpbiB0aGUgbGlzdC4KKyAgICAgICAgICAgIHVybCA9ICJnaXQ6Ly9Tb21lc2VydmVyLm9yZy9mb287cmV2PTEiCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9BTExPV0VEX05FVFdPUktTIiwgInNlcnZlcjEub3JnIHNvbWVzZXJ2ZXIub3JnIHNlcnZlcjIub3JnIHNlcnZlcjMub3JnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi5mZXRjaC50cnVzdGVkX25ldHdvcmsoc2VsZi5kLCB1cmwpKQorCisgICAgICAgIGRlZiB0ZXN0X3dpbGRfdHJ1c3RlZF9uZXR3b3JrKHNlbGYpOgorICAgICAgICAgICAgIyBFbnN1cmUgdHJ1c3RlZF9uZXR3b3JrIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSAqLmhvc3QgSVMgaW4gdGhlIGxpc3QuCisgICAgICAgICAgICB1cmwgPSAiZ2l0Oi8vU29tZXNlcnZlci5vcmcvZm9vO3Jldj0xIgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiQkJfQUxMT1dFRF9ORVRXT1JLUyIsICJzZXJ2ZXIxLm9yZyAqLnNvbWVzZXJ2ZXIub3JnIHNlcnZlcjIub3JnIHNlcnZlcjMub3JnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi5mZXRjaC50cnVzdGVkX25ldHdvcmsoc2VsZi5kLCB1cmwpKQorCisgICAgICAgIGRlZiB0ZXN0X3ByZWZpeF93aWxkX3RydXN0ZWRfbmV0d29yayhzZWxmKToKKyAgICAgICAgICAgICMgRW5zdXJlIHRydXN0ZWRfbmV0d29yayByZXR1cm5zIHRydWUgd2hlbiB0aGUgcHJlZml4IG1hdGNoZXMgKi5ob3N0LgorICAgICAgICAgICAgdXJsID0gImdpdDovL2dpdC5Tb21lc2VydmVyLm9yZy9mb287cmV2PTEiCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9BTExPV0VEX05FVFdPUktTIiwgInNlcnZlcjEub3JnICouc29tZXNlcnZlci5vcmcgc2VydmVyMi5vcmcgc2VydmVyMy5vcmciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLmZldGNoLnRydXN0ZWRfbmV0d29yayhzZWxmLmQsIHVybCkpCisKKyAgICAgICAgZGVmIHRlc3RfdHdvX3ByZWZpeF93aWxkX3RydXN0ZWRfbmV0d29yayhzZWxmKToKKyAgICAgICAgICAgICMgRW5zdXJlIHRydXN0ZWRfbmV0d29yayByZXR1cm5zIHRydWUgd2hlbiB0aGUgcHJlZml4IG1hdGNoZXMgKi5ob3N0LgorICAgICAgICAgICAgdXJsID0gImdpdDovL3NvbWV0aGluZy5naXQuU29tZXNlcnZlci5vcmcvZm9vO3Jldj0xIgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiQkJfQUxMT1dFRF9ORVRXT1JLUyIsICJzZXJ2ZXIxLm9yZyAqLnNvbWVzZXJ2ZXIub3JnIHNlcnZlcjIub3JnIHNlcnZlcjMub3JnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi5mZXRjaC50cnVzdGVkX25ldHdvcmsoc2VsZi5kLCB1cmwpKQorCisgICAgICAgIGRlZiB0ZXN0X3VudHJ1c3RlZF9uZXR3b3JrKHNlbGYpOgorICAgICAgICAgICAgIyBFbnN1cmUgdHJ1c3RlZF9uZXR3b3JrIHJldHVybnMgRmFsc2Ugd2hlbiB0aGUgaG9zdCBpcyBOT1QgaW4gdGhlIGxpc3QuCisgICAgICAgICAgICB1cmwgPSAiZ2l0Oi8vc29tZXNlcnZlci5vcmcvZm9vO3Jldj0xIgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiQkJfQUxMT1dFRF9ORVRXT1JLUyIsICJzZXJ2ZXIxLm9yZyBzZXJ2ZXIyLm9yZyBzZXJ2ZXIzLm9yZyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJiLmZldGNoLnRydXN0ZWRfbmV0d29yayhzZWxmLmQsIHVybCkpCisKKyAgICAgICAgZGVmIHRlc3Rfd2lsZF91bnRydXN0ZWRfbmV0d29yayhzZWxmKToKKyAgICAgICAgICAgICMgRW5zdXJlIHRydXN0ZWRfbmV0d29yayByZXR1cm5zIEZhbHNlIHdoZW4gdGhlIGhvc3QgaXMgTk9UIGluIHRoZSBsaXN0LgorICAgICAgICAgICAgdXJsID0gImdpdDovLyouc29tZXNlcnZlci5vcmcvZm9vO3Jldj0xIgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiQkJfQUxMT1dFRF9ORVRXT1JLUyIsICJzZXJ2ZXIxLm9yZyBzZXJ2ZXIyLm9yZyBzZXJ2ZXIzLm9yZyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJiLmZldGNoLnRydXN0ZWRfbmV0d29yayhzZWxmLmQsIHVybCkpCisKKworY2xhc3MgVVJMSGFuZGxlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRhdGF0YWJsZSA9IHsKKyAgICAgICAiaHR0cDovL3d3dy5nb29nbGUuY29tL2luZGV4Lmh0bWwiIDogKCdodHRwJywgJ3d3dy5nb29nbGUuY29tJywgJy9pbmRleC5odG1sJywgJycsICcnLCB7fSksCisgICAgICAgImN2czovL2Fub25jdnNAY3ZzLmhhbmRoZWxkcy5vcmcvY3ZzO21vZHVsZT1mYW1pbGlhci9kaXN0L2lwa2ciIDogKCdjdnMnLCAnY3ZzLmhhbmRoZWxkcy5vcmcnLCAnL2N2cycsICdhbm9uY3ZzJywgJycsIHsnbW9kdWxlJzogJ2ZhbWlsaWFyL2Rpc3QvaXBrZyd9KSwKKyAgICAgICAiY3ZzOi8vYW5vbmN2czphbm9ueW1vdXNAY3ZzLmhhbmRoZWxkcy5vcmcvY3ZzO3RhZz1WMC05OS04MTttb2R1bGU9ZmFtaWxpYXIvZGlzdC9pcGtnIiA6ICgnY3ZzJywgJ2N2cy5oYW5kaGVsZHMub3JnJywgJy9jdnMnLCAnYW5vbmN2cycsICdhbm9ueW1vdXMnLCB7J3RhZyc6ICdWMC05OS04MScsICdtb2R1bGUnOiAnZmFtaWxpYXIvZGlzdC9pcGtnJ30pLAorICAgICAgICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlO2JyYW5jaD1AZm9vIiA6ICgnZ2l0JywgJ2dpdC5vcGVuZW1iZWRkZWQub3JnJywgJy9iaXRiYWtlJywgJycsICcnLCB7J2JyYW5jaCc6ICdAZm9vJ30pCisgICAgfQorCisgICAgZGVmIHRlc3RfZGVjb2RldXJsKHNlbGYpOgorICAgICAgICBmb3IgaywgdiBpbiBzZWxmLmRhdGF0YWJsZS5pdGVtcygpOgorICAgICAgICAgICAgcmVzdWx0ID0gYmIuZmV0Y2guZGVjb2RldXJsKGspCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgdikKKworICAgIGRlZiB0ZXN0X2VuY29kZXVybChzZWxmKToKKyAgICAgICAgZm9yIGssIHYgaW4gc2VsZi5kYXRhdGFibGUuaXRlbXMoKToKKyAgICAgICAgICAgIHJlc3VsdCA9IGJiLmZldGNoLmVuY29kZXVybCh2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGspCisKK2NsYXNzIEZldGNoTGF0ZXN0VmVyc2lvblRlc3QoRmV0Y2hlclRlc3QpOgorCisgICAgdGVzdF9naXRfdXJpcyA9IHsKKyAgICAgICAgIyB2ZXJzaW9uIHBhdHRlcm4gIlguWS5aIgorICAgICAgICAoIm14LTEuMCIsICJnaXQ6Ly9naXRodWIuY29tL2NsdXR0ZXItcHJvamVjdC9teC5naXQ7YnJhbmNoPW14LTEuNCIsICI5YjFkYjZiODA2MGJkMDBiMTIxYTY5MmY5NDI0MDRhMjRhZTI5NjBmIiwgIiIpCisgICAgICAgICAgICA6ICIxLjk5LjQiLAorICAgICAgICAjIHZlcnNpb24gcGF0dGVybiAidlguWSIKKyAgICAgICAgKCJtdGQtdXRpbHMiLCAiZ2l0Oi8vZ2l0LmluZnJhZGVhZC5vcmcvbXRkLXV0aWxzLmdpdCIsICJjYTM5ZWIxZDk4ZTczNjEwOWM2NGZmOWMxYWEyYTZlY2NhMjIyZDhmIiwgIiIpCisgICAgICAgICAgICA6ICIxLjUuMCIsCisgICAgICAgICMgdmVyc2lvbiBwYXR0ZXJuICJwa2dfbmFtZS1YLlkiCisgICAgICAgICgicHJlc2VudHByb3RvIiwgImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL3Byb3RvL3ByZXNlbnRwcm90byIsICIyNGYzYTU2ZTU0MWIwYTllNmM2ZWU3NjA4MWY0NDEyMjFhMTIwZWY5IiwgIiIpCisgICAgICAgICAgICA6ICIxLjAiLAorICAgICAgICAjIHZlcnNpb24gcGF0dGVybiAicGtnX25hbWUtdlguWS5aIgorICAgICAgICAoImR0YyIsICJnaXQ6Ly9naXQucWVtdS5vcmcvZHRjLmdpdCIsICI2NWNjNGQyNzQ4YTJjMmU2ZjI3ZjFjZjM5ZTA3YTVkYmFiZDgwZWJmIiwgIiIpCisgICAgICAgICAgICA6ICIxLjQuMCIsCisgICAgICAgICMgY29tYmluYXRpb24gdmVyc2lvbiBwYXR0ZXJuCisgICAgICAgICgic3lzcHJvZiIsICJnaXQ6Ly9naXQuZ25vbWUub3JnL3N5c3Byb2YiLCAiY2Q0NGVlNjY0NGMzNjQxNTA3ZmI1M2I4YTJhNjkxMzdmMjk3MTIxOSIsICIiKQorICAgICAgICAgICAgOiAiMS4yLjAiLAorICAgICAgICAoInUtYm9vdC1ta2ltYWdlIiwgImdpdDovL2dpdC5kZW54LmRlL3UtYm9vdC5naXQ7YnJhbmNoPW1hc3Rlcjtwcm90b2NvbD1naXQiLCAiNjJjMTc1ZmJiOGEwZjlhOTI2Yzg4Mjk0ZWE5ZjdlODhlYjg5OGY2YyIsICIiKQorICAgICAgICAgICAgOiAiMjAxNC4wMSIsCisgICAgICAgICMgdmVyc2lvbiBwYXR0ZXJuICJ5eXl5bW1kZCIKKyAgICAgICAgKCJtb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm8iLCAiZ2l0Oi8vZ2l0Lmdub21lLm9yZy9tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm8iLCAiNGVkMTllMTFjMjk3NTEwNWI3MWI5NTY0NDBhY2RiMjVkNDZhMzQ3ZCIsICIiKQorICAgICAgICAgICAgOiAiMjAxMjA2MTQiLAorICAgICAgICAjIHBhY2thZ2VzIHdpdGggYSB2YWxpZCBHSVRUQUdSRUdFWAorICAgICAgICAoInhmODYtdmlkZW8tb21hcCIsICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy94b3JnL2RyaXZlci94Zjg2LXZpZGVvLW9tYXAiLCAiYWUwMzk0ZTY4N2YxYTc3ZTk2NmNmNzJmODk1ZGE5MTg0MGRmZmI4ZiIsICIoP1A8cHZlcj4oXGQrXC4oXGRcLj8pKikpIikKKyAgICAgICAgICAgIDogIjAuNC4zIiwKKyAgICAgICAgKCJidWlsZC1hcHBsaWFuY2UtaW1hZ2UiLCAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reSIsICJiMzdkZDQ1MWE1MjYyMmQ1YjU3MDE4M2E4MTU4M2NjMzRjMmZmNTU1IiwgIig/UDxwdmVyPigoWzAtOV1bXC58X10/KStbMC05XSkpIikKKyAgICAgICAgICAgIDogIjExLjAuMCIsCisgICAgICAgICgiY2hrY29uZmlnLWFsdGVybmF0aXZlcy1uYXRpdmUiLCAiZ2l0Oi8vZ2l0aHViLmNvbS9rZXJnb3RoL2Noa2NvbmZpZzticmFuY2g9c3lzcm9vdCIsICJjZDQzN2VjYmQ4OTg2Yzg5NDQ0MmY4ZmNlMWUwMDYxZTIwZjA0ZGVlIiwgImNoa2NvbmZpZ1wtKD9QPHB2ZXI+KChcZCtbXC5cLV9dKikrKSkiKQorICAgICAgICAgICAgOiAiMS4zLjU5IiwKKyAgICAgICAgKCJyZW1ha2UiLCAiZ2l0Oi8vZ2l0aHViLmNvbS9yb2NreS9yZW1ha2UuZ2l0IiwgImYwNTUwOGU1MjE5ODdjODQ5NGM5MmQ5YzI4NzFhZWM0NjMwN2Q1MWQiLCAiKD9QPHB2ZXI+KFxkK1wuKFxkK1wuKSpcZCooXCtkYmdcZCsoXC5cZCspKikqKSkiKQorICAgICAgICAgICAgOiAiMy44MitkYmcwLjkiLAorICAgIH0KKworICAgIHRlc3Rfd2dldF91cmlzID0geworICAgICAgICAjIHBhY2thZ2VzIHdpdGggdmVyc2lvbnMgaW5zaWRlIGRpcmVjdG9yeSBuYW1lCisgICAgICAgICgidXRpbC1saW51eCIsICJodHRwOi8va2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvdXRpbC1saW51eC92Mi4yMy91dGlsLWxpbnV4LTIuMjQuMi50YXIuYnoyIiwgIiIsICIiKQorICAgICAgICAgICAgOiAiMi4yNC4yIiwKKyAgICAgICAgKCJlbmNoYW50IiwgImh0dHA6Ly93d3cuYWJpc291cmNlLmNvbS9kb3dubG9hZHMvZW5jaGFudC8xLjYuMC9lbmNoYW50LTEuNi4wLnRhci5neiIsICIiLCAiIikKKyAgICAgICAgICAgIDogIjEuNi4wIiwKKyAgICAgICAgKCJjbWFrZSIsICJodHRwOi8vd3d3LmNtYWtlLm9yZy9maWxlcy92Mi44L2NtYWtlLTIuOC4xMi4xLnRhci5neiIsICIiLCAiIikKKyAgICAgICAgICAgIDogIjIuOC4xMi4xIiwKKyAgICAgICAgIyBwYWNrYWdlcyB3aXRoIHZlcnNpb25zIG9ubHkgaW4gY3VycmVudCBkaXJlY3RvcnkKKyAgICAgICAgKCJlZ2xpYyIsICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvZWdsaWJjL2VnbGliYy0yLjE4LXN2bnIyMzc4Ny50YXIuYnoyIiwgIiIsICIiKQorICAgICAgICAgICAgOiAiMi4xOSIsCisgICAgICAgICgiZ251LWNvbmZpZyIsICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvZ251LWNvbmZpZy9nbnUtY29uZmlnLTIwMTIwODE0LnRhci5iejIiLCAiIiwgIiIpCisgICAgICAgICAgICA6ICIyMDEyMDgxNCIsCisgICAgICAgICMgcGFja2FnZXMgd2l0aCAiOTkiIGluIHRoZSBuYW1lIG9mIHBvc3NpYmxlIHZlcnNpb24KKyAgICAgICAgKCJwdWxzZWF1ZGlvIiwgImh0dHA6Ly9mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvcHVsc2VhdWRpby9yZWxlYXNlcy9wdWxzZWF1ZGlvLTQuMC50YXIueHoiLCAiIiwgIiIpCisgICAgICAgICAgICA6ICI1LjAiLAorICAgICAgICAoInhzZXJ2ZXIteG9yZyIsICJodHRwOi8veG9yZy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvaW5kaXZpZHVhbC94c2VydmVyL3hvcmctc2VydmVyLTEuMTUuMS50YXIuYnoyIiwgIiIsICIiKQorICAgICAgICAgICAgOiAiMS4xNS4xIiwKKyAgICAgICAgIyBwYWNrYWdlcyB3aXRoIHZhbGlkIFJFR0VYX1VSSSBhbmQgUkVHRVgKKyAgICAgICAgKCJjdXBzIiwgImh0dHA6Ly93d3cuY3Vwcy5vcmcvc29mdHdhcmUvMS43LjIvY3Vwcy0xLjcuMi1zb3VyY2UudGFyLmJ6MiIsICJodHRwOi8vd3d3LmN1cHMub3JnL3NvZnR3YXJlLnBocCIsICIoP1A8bmFtZT5jdXBzXC0pKD9QPHB2ZXI+KChcZCtbXC5cLV9dKikrKSlcLXNvdXJjZVwudGFyXC5neiIpCisgICAgICAgICAgICA6ICIyLjAuMCIsCisgICAgICAgICgiZGIiLCAiaHR0cDovL2Rvd25sb2FkLm9yYWNsZS5jb20vYmVya2VsZXktZGIvZGItNS4zLjIxLnRhci5neiIsICJodHRwOi8vd3d3Lm9yYWNsZS5jb20vdGVjaG5ldHdvcmsvcHJvZHVjdHMvYmVya2VsZXlkYi9kb3dubG9hZHMvaW5kZXgtMDgyOTQ0Lmh0bWwiLCAiaHR0cDovL2Rvd25sb2FkLm9yYWNsZS5jb20vb3RuL2JlcmtlbGV5LWRiLyg/UDxuYW1lPmRiLSkoP1A8cHZlcj4oKFxkK1tcLlwtX10qKSspKVwudGFyXC5neiIpCisgICAgICAgICAgICA6ICI2LjEuMTkiLAorICAgIH0KKyAgICBpZiBvcy5lbnZpcm9uLmdldCgiQkJfU0tJUF9ORVRURVNUUyIpID09ICJ5ZXMiOgorICAgICAgICBwcmludCgiVW5zZXQgQkJfU0tJUF9ORVRURVNUUyB0byBydW4gbmV0d29yayB0ZXN0cyIpCisgICAgZWxzZToKKyAgICAgICAgZGVmIHRlc3RfZ2l0X2xhdGVzdF92ZXJzaW9uc3RyaW5nKHNlbGYpOgorICAgICAgICAgICAgZm9yIGssIHYgaW4gc2VsZi50ZXN0X2dpdF91cmlzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiUE4iLCBrWzBdKQorICAgICAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlNSQ1JFViIsIGtbMl0pCisgICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiR0lUVEFHUkVHRVgiLCBrWzNdKQorICAgICAgICAgICAgICAgIHVkID0gYmIuZmV0Y2gyLkZldGNoRGF0YShrWzFdLCBzZWxmLmQpCisgICAgICAgICAgICAgICAgcHVwdmVyPSB1ZC5tZXRob2QubGF0ZXN0X3ZlcnNpb25zdHJpbmcodWQsIHNlbGYuZCkKKyAgICAgICAgICAgICAgICB2ZXJzdHJpbmcgPSBwdXB2ZXJbMF0KKyAgICAgICAgICAgICAgICByID0gYmIudXRpbHMudmVyY21wX3N0cmluZyh2LCB2ZXJzdHJpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIgPT0gLTEgb3IgciA9PSAwLCBtc2c9IlBhY2thZ2UgJXMsIHZlcnNpb246ICVzIDw9ICVzIiAlIChrWzBdLCB2LCB2ZXJzdHJpbmcpKQorCisgICAgICAgIGRlZiB0ZXN0X3dnZXRfbGF0ZXN0X3ZlcnNpb25zdHJpbmcoc2VsZik6CisgICAgICAgICAgICBmb3IgaywgdiBpbiBzZWxmLnRlc3Rfd2dldF91cmlzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiUE4iLCBrWzBdKQorICAgICAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlJFR0VYX1VSSSIsIGtbMl0pCisgICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiUkVHRVgiLCBrWzNdKQorICAgICAgICAgICAgICAgIHVkID0gYmIuZmV0Y2gyLkZldGNoRGF0YShrWzFdLCBzZWxmLmQpCisgICAgICAgICAgICAgICAgcHVwdmVyID0gdWQubWV0aG9kLmxhdGVzdF92ZXJzaW9uc3RyaW5nKHVkLCBzZWxmLmQpCisgICAgICAgICAgICAgICAgdmVyc3RyaW5nID0gcHVwdmVyWzBdCisgICAgICAgICAgICAgICAgciA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmcodiwgdmVyc3RyaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyID09IC0xIG9yIHIgPT0gMCwgbXNnPSJQYWNrYWdlICVzLCB2ZXJzaW9uOiAlcyA8PSAlcyIgJSAoa1swXSwgdiwgdmVyc3RyaW5nKSkKKworCitjbGFzcyBGZXRjaENoZWNrU3RhdHVzVGVzdChGZXRjaGVyVGVzdCk6CisgICAgdGVzdF93Z2V0X3VyaXMgPSBbImh0dHA6Ly93d3cuY3Vwcy5vcmcvc29mdHdhcmUvMS43LjIvY3Vwcy0xLjcuMi1zb3VyY2UudGFyLmJ6MiIsCisgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly93d3cuY3Vwcy5vcmcvc29mdHdhcmUvaXBwdG9vbC9pcHB0b29sLTIwMTMwNzMxLWxpbnV4LXVidW50dS1pNjg2LnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly93d3cuY3Vwcy5vcmcvIiwKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL3NhdG8vc2F0by1lbmdpbmUtMC4xLnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9zYXRvL3NhdG8tZW5naW5lLTAuMi50YXIuZ3oiLAorICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvc2F0by9zYXRvLWVuZ2luZS0wLjMudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cHM6Ly95b2N0b3Byb2plY3Qub3JnLyIsCisgICAgICAgICAgICAgICAgICAgICAgImh0dHBzOi8veW9jdG9wcm9qZWN0Lm9yZy9kb2N1bWVudGF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL29wa2cvb3BrZy0wLjEuNy50YXIuZ3oiLAorICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvb3BrZy9vcGtnLTAuMy4wLnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgImZ0cDovL2Z0cC5nbnUub3JnL2dudS9hdXRvY29uZi9hdXRvY29uZi0yLjYwLnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgImZ0cDovL2Z0cC5nbnUub3JnL2dudS9jaGVzcy9nbnVjaGVzcy01LjA4LnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgImZ0cDovL2Z0cC5nbnUub3JnL2dudS9nbXAvZ21wLTQuMC50YXIuZ3oiLAorICAgICAgICAgICAgICAgICAgICAgIF0KKworICAgIGlmIG9zLmVudmlyb24uZ2V0KCJCQl9TS0lQX05FVFRFU1RTIikgPT0gInllcyI6CisgICAgICAgIHByaW50KCJVbnNldCBCQl9TS0lQX05FVFRFU1RTIHRvIHJ1biBuZXR3b3JrIHRlc3RzIikKKyAgICBlbHNlOgorCisgICAgICAgIGRlZiB0ZXN0X3dnZXRfY2hlY2tzdGF0dXMoc2VsZik6CisgICAgICAgICAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChzZWxmLnRlc3Rfd2dldF91cmlzLCBzZWxmLmQpCisgICAgICAgICAgICBmb3IgdSBpbiBzZWxmLnRlc3Rfd2dldF91cmlzOgorICAgICAgICAgICAgICAgIHVkID0gZmV0Y2gudWRbdV0KKyAgICAgICAgICAgICAgICBtID0gdWQubWV0aG9kCisgICAgICAgICAgICAgICAgcmV0ID0gbS5jaGVja3N0YXR1cyhmZXRjaCwgdWQsIHNlbGYuZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmV0LCBtc2c9IlVSSSAlcywgY2FuJ3QgY2hlY2sgc3RhdHVzIiAlICh1KSkKKworCisgICAgICAgIGRlZiB0ZXN0X3dnZXRfY2hlY2tzdGF0dXNfY29ubmVjdGlvbl9jYWNoZShzZWxmKToKKyAgICAgICAgICAgIGZyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaENvbm5lY3Rpb25DYWNoZQorCisgICAgICAgICAgICBjb25uZWN0aW9uX2NhY2hlID0gRmV0Y2hDb25uZWN0aW9uQ2FjaGUoKQorICAgICAgICAgICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goc2VsZi50ZXN0X3dnZXRfdXJpcywgc2VsZi5kLAorICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbl9jYWNoZSA9IGNvbm5lY3Rpb25fY2FjaGUpCisKKyAgICAgICAgICAgIGZvciB1IGluIHNlbGYudGVzdF93Z2V0X3VyaXM6CisgICAgICAgICAgICAgICAgdWQgPSBmZXRjaC51ZFt1XQorICAgICAgICAgICAgICAgIG0gPSB1ZC5tZXRob2QKKyAgICAgICAgICAgICAgICByZXQgPSBtLmNoZWNrc3RhdHVzKGZldGNoLCB1ZCwgc2VsZi5kKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXQsIG1zZz0iVVJJICVzLCBjYW4ndCBjaGVjayBzdGF0dXMiICUgKHUpKQorCisgICAgICAgICAgICBjb25uZWN0aW9uX2NhY2hlLmNsb3NlX2Nvbm5lY3Rpb25zKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvcGFyc2UucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL3BhcnNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZWI3NmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL3BhcnNlLnB5CkBAIC0wLDAgKzEsMTQ3IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRlc3QgZm9yIGxpYi9iYi9wYXJzZS8KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1IFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBiYgoraW1wb3J0IG9zCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdCaXRCYWtlLlRlc3RQYXJzZScpCisKK2ltcG9ydCBiYi5wYXJzZQoraW1wb3J0IGJiLmRhdGEKK2ltcG9ydCBiYi5zaWdnZW4KKworY2xhc3MgUGFyc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIHRlc3RmaWxlID0gIiIiCitBID0gIjEiCitCID0gIjIiCitkb19pbnN0YWxsKCkgeworCWVjaG8gImhlbGxvIgorfQorCitDID0gIjMiCisiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgYmIucGFyc2Uuc2lnZ2VuID0gYmIuc2lnZ2VuLmluaXQoc2VsZi5kKQorCisgICAgZGVmIHBhcnNlaGVscGVyKHNlbGYsIGNvbnRlbnQsIHN1ZmZpeCA9ICIuYmIiKToKKworICAgICAgICBmID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKHN1ZmZpeCA9IHN1ZmZpeCkKKyAgICAgICAgZi53cml0ZShjb250ZW50KQorICAgICAgICBmLmZsdXNoKCkKKyAgICAgICAgb3MuY2hkaXIob3MucGF0aC5kaXJuYW1lKGYubmFtZSkpCisgICAgICAgIHJldHVybiBmCisKKyAgICBkZWYgdGVzdF9wYXJzZV9zaW1wbGUoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLnBhcnNlaGVscGVyKHNlbGYudGVzdGZpbGUpCisgICAgICAgIGQgPSBiYi5wYXJzZS5oYW5kbGUoZi5uYW1lLCBzZWxmLmQpWycnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJBIiwgVHJ1ZSksICIxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldFZhcigiQiIsIFRydWUpLCAiMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRWYXIoIkMiLCBUcnVlKSwgIjMiKQorCisgICAgZGVmIHRlc3RfcGFyc2VfaW5jb21wbGV0ZV9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgdGVzdGZpbGVCID0gc2VsZi50ZXN0ZmlsZS5yZXBsYWNlKCJ9IiwgIiIpCisgICAgICAgIGYgPSBzZWxmLnBhcnNlaGVscGVyKHRlc3RmaWxlQikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhiYi5wYXJzZS5QYXJzZUVycm9yKToKKyAgICAgICAgICAgIGQgPSBiYi5wYXJzZS5oYW5kbGUoZi5uYW1lLCBzZWxmLmQpWycnXQorCisgICAgb3ZlcnJpZGV0ZXN0ID0gIiIiCitSUkVDT01NRU5EU18ke1BOfSA9ICJhIgorUlJFQ09NTUVORFNfJHtQTn1fbGliYyA9ICJiIgorT1ZFUlJJREVTID0gImxpYmM6JHtQTn0iCitQTiA9ICJndGsrIgorIiIiCisKKyAgICBkZWYgdGVzdF9wYXJzZV9vdmVycmlkZXMoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLnBhcnNlaGVscGVyKHNlbGYub3ZlcnJpZGV0ZXN0KQorICAgICAgICBkID0gYmIucGFyc2UuaGFuZGxlKGYubmFtZSwgc2VsZi5kKVsnJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldFZhcigiUlJFQ09NTUVORFMiLCBUcnVlKSwgImIiKQorICAgICAgICBiYi5kYXRhLmV4cGFuZEtleXMoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldFZhcigiUlJFQ09NTUVORFMiLCBUcnVlKSwgImIiKQorICAgICAgICBkLnNldFZhcigiUlJFQ09NTUVORFNfZ3RrKyIsICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldFZhcigiUlJFQ09NTUVORFMiLCBUcnVlKSwgImMiKQorCisgICAgb3ZlcnJpZGV0ZXN0MiA9ICIiIgorRVhUUkFfT0VDT05GID0gIiIKK0VYVFJBX09FQ09ORl9jbGFzcy10YXJnZXQgPSAiYiIKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiIGMiCisiIiIKKworICAgIGRlZiB0ZXN0X3BhcnNlX292ZXJyaWRlcyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYucGFyc2VoZWxwZXIoc2VsZi5vdmVycmlkZXRlc3QyKQorICAgICAgICBkID0gYmIucGFyc2UuaGFuZGxlKGYubmFtZSwgc2VsZi5kKVsnJ10KKyAgICAgICAgZC5hcHBlbmRWYXIoIkVYVFJBX09FQ09ORiIsICIgZCIpCisgICAgICAgIGQuc2V0VmFyKCJPVkVSUklERVMiLCAiY2xhc3MtdGFyZ2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldFZhcigiRVhUUkFfT0VDT05GIiwgVHJ1ZSksICJiIGMgZCIpCisKKyAgICBvdmVycmlkZXRlc3QzID0gIiIiCitERVNDUklQVElPTiA9ICJBIgorREVTQ1JJUFRJT05fJHtQTn0tZGV2ID0gIiR7REVTQ1JJUFRJT059IEIiCitQTiA9ICJiYyIKKyIiIgorCisgICAgZGVmIHRlc3RfcGFyc2VfY29tYmluYXRpb25zKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5wYXJzZWhlbHBlcihzZWxmLm92ZXJyaWRldGVzdDMpCisgICAgICAgIGQgPSBiYi5wYXJzZS5oYW5kbGUoZi5uYW1lLCBzZWxmLmQpWycnXQorICAgICAgICBiYi5kYXRhLmV4cGFuZEtleXMoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldFZhcigiREVTQ1JJUFRJT05fYmMtZGV2IiwgVHJ1ZSksICJBIEIiKQorICAgICAgICBkLnNldFZhcigiREVTQ1JJUFRJT04iLCAiRSIpCisgICAgICAgIGQuc2V0VmFyKCJERVNDUklQVElPTl9iYy1kZXYiLCAiQyBEIikKKyAgICAgICAgZC5zZXRWYXIoIk9WRVJSSURFUyIsICJiYy1kZXYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJERVNDUklQVElPTiIsIFRydWUpLCAiQyBEIikKKworCisgICAgY2xhc3NleHRlbmQgPSAiIiIKK1ZBUl92YXJfb3ZlcnJpZGUxID0gIkIiCitFWFRSQSA9ICI6b3ZlcnJpZGUxIgorT1ZFUlJJREVTID0gIm5vdGhpbmcke0VYVFJBfSIKKworQkJDTEFTU0VYVEVORCA9ICIjIyNDTEFTUyMjIyIKKyIiIgorICAgIGNsYXNzZXh0ZW5kX2JiY2xhc3MgPSAiIiIKK0VYVFJBID0gIiIKK3B5dGhvbiAoKSB7CisgICAgZC5yZW5hbWVWYXIoIlZBUl92YXIiLCAiVkFSX3ZhcjIiKQorfQorIiIiCisKKyAgICAjCisgICAgIyBUZXN0IGJhc2VkIHVwb24gYSByZWFsIHdvcmxkIGRhdGEgY29ycnVwdGlvbiBpc3N1ZS4gT25lCisgICAgIyBkYXRhIHN0b3JlIGNoYW5naW5nIGEgdmFyaWFibGUgcG9rZWQgdGhyb3VnaCBpbnRvIGEgZGlmZmVyZW50IGRhdGEKKyAgICAjIHN0b3JlLiBUaGlzIHRlc3QgY2FzZSByZXBsaWNhdGVzIHRoYXQgaXNzdWUgd2hlcmUgdGhlIHZhbHVlICdCJyB3b3VsZCAKKyAgICAjIGJlY29tZSB1bnNldC9kaXNhcHBlYXIuCisgICAgIworICAgIGRlZiB0ZXN0X3BhcnNlX2NsYXNzZXh0ZW5kX2NvbnRhbWluYXRpb24oc2VsZik6CisgICAgICAgIGNscyA9IHNlbGYucGFyc2VoZWxwZXIoc2VsZi5jbGFzc2V4dGVuZF9iYmNsYXNzLCBzdWZmaXg9Ii5iYmNsYXNzIikKKyAgICAgICAgI2Nsc25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGNscy5uYW1lKS5yZXBsYWNlKCIuYmJjbGFzcyIsICIiKQorICAgICAgICBzZWxmLmNsYXNzZXh0ZW5kID0gc2VsZi5jbGFzc2V4dGVuZC5yZXBsYWNlKCIjIyNDTEFTUyMjIyIsIGNscy5uYW1lKQorICAgICAgICBmID0gc2VsZi5wYXJzZWhlbHBlcihzZWxmLmNsYXNzZXh0ZW5kKQorICAgICAgICBhbGxkYXRhID0gYmIucGFyc2UuaGFuZGxlKGYubmFtZSwgc2VsZi5kKQorICAgICAgICBkMSA9IGFsbGRhdGFbJyddCisgICAgICAgIGQyID0gYWxsZGF0YVtjbHMubmFtZV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5nZXRWYXIoIlZBUl92YXIiLCBUcnVlKSwgIkIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLmdldFZhcigiVkFSX3ZhciIsIFRydWUpLCBOb25lKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL3V0aWxzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTcxNTA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy91dGlscy5weQpAQCAtMCwwICsxLDM3OCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUZXN0cyBmb3IgdXRpbHMucHkKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBiYgoraW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKKworY2xhc3MgVmVyQ21wU3RyaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3ZlcmNtcHN0cmluZyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gYmIudXRpbHMudmVyY21wX3N0cmluZygnMScsICcyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA8IDApCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmcoJzInLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQgPiAwKQorICAgICAgICByZXN1bHQgPSBiYi51dGlscy52ZXJjbXBfc3RyaW5nKCcxJywgJzEuMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQgPCAwKQorICAgICAgICByZXN1bHQgPSBiYi51dGlscy52ZXJjbXBfc3RyaW5nKCcxJywgJzEuMScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQgPCAwKQorICAgICAgICByZXN1bHQgPSBiYi51dGlscy52ZXJjbXBfc3RyaW5nKCcxLjEnLCAnMV9wMicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQgPCAwKQorICAgICAgICByZXN1bHQgPSBiYi51dGlscy52ZXJjbXBfc3RyaW5nKCcxLjAnLCAnMS4wKzEuMS1iZXRhMScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQgPCAwKQorICAgICAgICByZXN1bHQgPSBiYi51dGlscy52ZXJjbXBfc3RyaW5nKCcxLjEnLCAnMS4wKzEuMS1iZXRhMScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQgPiAwKQorCisgICAgZGVmIHRlc3RfZXhwbG9kZV9kZXBfdmVyc2lvbnMoc2VsZik6CisgICAgICAgIGNvcnJlY3RyZXN1bHQgPSB7ImZvbyIgOiBbIj0gMS4xMCJdfQorICAgICAgICByZXN1bHQgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoImZvbyAoPSAxLjEwKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBjb3JyZWN0cmVzdWx0KQorICAgICAgICByZXN1bHQgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoImZvbyAoPTEuMTApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGNvcnJlY3RyZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMigiZm9vICggPSAxLjEwKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBjb3JyZWN0cmVzdWx0KQorICAgICAgICByZXN1bHQgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoImZvbyAoID0xLjEwKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBjb3JyZWN0cmVzdWx0KQorICAgICAgICByZXN1bHQgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoImZvbyAoID0gMS4xMCApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGNvcnJlY3RyZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMigiZm9vICggPTEuMTAgKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBjb3JyZWN0cmVzdWx0KQorCisgICAgZGVmIHRlc3RfdmVyY21wX3N0cmluZ19vcChzZWxmKToKKyAgICAgICAgY29tcGFyZW9wcyA9IFsoJzEnLCAnMScsICc9JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzEnLCAnPT0nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMScsICchPScsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMScsICc+JywgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcxJywgJzwnLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzEnLCAnPj0nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMScsICc8PScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcwJywgJz0nLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzAnLCAnPT0nLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzAnLCAnIT0nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMCcsICc+JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzAnLCAnPCcsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMCcsICc+PicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcwJywgJzw8JywgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcwJywgJz49JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzAnLCAnPD0nLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcwJywgJzEnLCAnPScsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzAnLCAnMScsICc9PScsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzAnLCAnMScsICchPScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICgnMCcsICcxJywgJz4nLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcwJywgJzEnLCAnPCcsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICgnMCcsICcxJywgJz4+JywgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICgnMCcsICcxJywgJzw8JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcwJywgJzEnLCAnPj0nLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcwJywgJzEnLCAnPD0nLCBUcnVlKV0KKworICAgICAgICBmb3IgYXJnMSwgYXJnMiwgb3AsIGNvcnJlY3RyZXN1bHQgaW4gY29tcGFyZW9wczoKKyAgICAgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmdfb3AoYXJnMSwgYXJnMiwgb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgY29ycmVjdHJlc3VsdCwgJ3ZlcmNtcF9zdHJpbmdfb3AoIiVzIiwgIiVzIiwgIiVzIikgIT0gJXMnICUgKGFyZzEsIGFyZzIsIG9wLCBjb3JyZWN0cmVzdWx0KSkKKworICAgICAgICAjIENoZWNrIHRoYXQgY2xlYXJseSBpbnZhbGlkIG9wZXJhdG9yIHJhaXNlcyBhbiBleGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmIudXRpbHMuVmVyc2lvblN0cmluZ0V4Y2VwdGlvbiwgYmIudXRpbHMudmVyY21wX3N0cmluZ19vcCwgJzAnLCAnMCcsICckJykKKworCitjbGFzcyBQYXRoKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF91bnNhZmVfZGVsZXRlX3BhdGgoc2VsZik6CisgICAgICAgIGNoZWNraXRlbXMgPSBbKCcvJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcvLycsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICgnLy8vJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKG9zLmdldGN3ZCgpLmNvdW50KG9zLnNlcCkgKiAoJy4uJyArIG9zLnNlcCksIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIChvcy5lbnZpcm9uLmdldCgnSE9NRScsICcvaG9tZS90ZXN0JyksIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICgnL2hvbWUvc29tZW9uZScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICgnL2hvbWUvb3RoZXIvJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcvaG9tZS9vdGhlci9zdWJkaXInLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcnLCBGYWxzZSldCisgICAgICAgIGZvciBhcmcxLCBjb3JyZWN0cmVzdWx0IGluIGNoZWNraXRlbXM6CisgICAgICAgICAgICByZXN1bHQgPSBiYi51dGlscy5fY2hlY2tfdW5zYWZlX2RlbGV0ZV9wYXRoKGFyZzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgY29ycmVjdHJlc3VsdCwgJ19jaGVja191bnNhZmVfZGVsZXRlX3BhdGgoIiVzIikgIT0gJXMnICUgKGFyZzEsIGNvcnJlY3RyZXN1bHQpKQorCisKK2NsYXNzIEVkaXRNZXRhZGF0YUZpbGUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIF9vcmlnZmlsZSA9ICIiIgorIyBBIGNvbW1lbnQKK0hFTExPID0gIm9sZHZhbHVlIgorCitUSElTID0gInRoYXQiCisKKyMgQW5vdGhlciBjb21tZW50CitOT0NIQU5HRSA9ICJzYW1ldmFsdWUiCitPVEhFUiA9ICdhbm90aGVydmFsdWUnCisKK01VTFRJTElORSA9ICJhMSBcXAorICAgICAgICAgICAgIGEyIFxcCisgICAgICAgICAgICAgYTMiCisKK01VTFRJTElORTIgOj0gIiBcXAorICAgICAgICAgICAgICAgYjEgXFwKKyAgICAgICAgICAgICAgIGIyIFxcCisgICAgICAgICAgICAgICBiMyBcXAorICAgICAgICAgICAgICAgIgorCisKK01VTFRJTElORTMgPSAiIFxcCisgICAgICAgICAgICAgIGMxIFxcCisgICAgICAgICAgICAgIGMyIFxcCisgICAgICAgICAgICAgIGMzIFxcCisiCisKK2RvX2Z1bmN0aW9ubmFtZSgpIHsKKyAgICBjb21tYW5kMSAke1ZBTDF9ICR7VkFMMn0KKyAgICBjb21tYW5kMiAke1ZBTDN9ICR7VkFMNH0KK30KKyIiIgorICAgIGRlZiBfdGVzdGVkaXRmaWxlKHNlbGYsIHZhcnZhbHVlcywgY29tcGFyZXRvLCBkdW1teXZhcnM9Tm9uZSk6CisgICAgICAgIGlmIGR1bW15dmFycyBpcyBOb25lOgorICAgICAgICAgICAgZHVtbXl2YXJzID0gW10KKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoJ3cnLCBkZWxldGU9RmFsc2UpIGFzIHRmOgorICAgICAgICAgICAgdGYud3JpdGUoc2VsZi5fb3JpZ2ZpbGUpCisgICAgICAgICAgICB0Zi5jbG9zZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdmFyY2FsbHMgPSBbXQorICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVfZmlsZSh2YXJuYW1lLCBvcmlndmFsdWUsIG9wLCBuZXdsaW5lcyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odmFybmFtZSwgdmFydmFsdWVzLCAnQ2FsbGJhY2sgY2FsbGVkIGZvciB2YXJpYWJsZSAlcyBub3QgaW4gdGhlIGxpc3QhJyAlIHZhcm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odmFybmFtZSwgZHVtbXl2YXJzLCAnQ2FsbGJhY2sgY2FsbGVkIGZvciB2YXJpYWJsZSAlcyBpbiBkdW1teSBsaXN0IScgJSB2YXJuYW1lKQorICAgICAgICAgICAgICAgICAgICB2YXJjYWxscy5hcHBlbmQodmFybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhcnZhbHVlc1t2YXJuYW1lXQorCisgICAgICAgICAgICAgICAgYmIudXRpbHMuZWRpdF9tZXRhZGF0YV9maWxlKHRmLm5hbWUsIHZhcnZhbHVlcy5rZXlzKCksIGhhbmRsZV9maWxlKQorICAgICAgICAgICAgICAgIHdpdGggb3Blbih0Zi5uYW1lKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBtb2RmaWxlID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgICMgRW5zdXJlIHRoZSBvdXRwdXQgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgb3V0cHV0CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wYXJldG8uc3BsaXRsaW5lcyhUcnVlKSwgbW9kZmlsZSkKKyAgICAgICAgICAgICAgICAjIEVuc3VyZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2FzIGNhbGxlZCBmb3IgZXZlcnkgdmFyaWFibGUgd2UgYXNrZWQgZm9yCisgICAgICAgICAgICAgICAgIyAocGx1cyBhbGxvdyB0ZXN0aW5nIGJlaGF2aW91ciB3aGVuIGEgcmVxdWVzdGVkIHZhcmlhYmxlIGlzIG5vdCBwcmVzZW50KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHZhcnZhbHVlcy5rZXlzKCkpLCBzb3J0ZWQodmFyY2FsbHMgKyBkdW1teXZhcnMpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGYubmFtZSkKKworCisgICAgZGVmIHRlc3RfZWRpdF9tZXRhZGF0YV9maWxlX25vY2hhbmdlKHNlbGYpOgorICAgICAgICAjIFRlc3QgZmlsZSBkb2Vzbid0IGdldCBtb2RpZmllZCB3aXRoIG5vdGhpbmcgdG8gZG8KKyAgICAgICAgc2VsZi5fdGVzdGVkaXRmaWxlKHt9LCBzZWxmLl9vcmlnZmlsZSkKKyAgICAgICAgIyBUZXN0IGZpbGUgZG9lc24ndCBnZXQgbW9kaWZpZWQgd2l0aCBvbmx5IGR1bW15IHZhcmlhYmxlcworICAgICAgICBzZWxmLl90ZXN0ZWRpdGZpbGUoeydEVU1NWTEnOiAoJ3Nob3VsZF9ub3Rfc2V0JywgTm9uZSwgMCwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAnRFVNTVkyJzogKCdzaG91bGRfbm90X3NldF9hZ2FpbicsIE5vbmUsIDAsIFRydWUpfSwgc2VsZi5fb3JpZ2ZpbGUsIGR1bW15dmFycz1bJ0RVTU1ZMScsICdEVU1NWTInXSkKKyAgICAgICAgIyBUZXN0IGZpbGUgZG9lc24ndCBnZXQgbW9kaWZpZWQgd2l0aCBzb21lIHRoZSBzYW1lIHZhbHVlcworICAgICAgICBzZWxmLl90ZXN0ZWRpdGZpbGUoeydUSElTJzogKCd0aGF0JywgTm9uZSwgMCwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAnT1RIRVInOiAoJ2Fub3RoZXJ2YWx1ZScsIE5vbmUsIDAsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ01VTFRJTElORTMnOiAoJyAgICAgICAgICAgICAgIGMxICAgICAgICAgICAgICAgYzIgICAgICAgICAgICAgICBjMycsIE5vbmUsIDQsIEZhbHNlKX0sIHNlbGYuX29yaWdmaWxlKQorCisgICAgZGVmIHRlc3RfZWRpdF9tZXRhZGF0YV9maWxlXzEoc2VsZik6CisKKyAgICAgICAgbmV3ZmlsZTEgPSAiIiIKKyMgQSBjb21tZW50CitIRUxMTyA9ICJuZXd2YWx1ZSIKKworVEhJUyA9ICJ0aGF0IgorCisjIEFub3RoZXIgY29tbWVudAorTk9DSEFOR0UgPSAic2FtZXZhbHVlIgorT1RIRVIgPSAnYW5vdGhlcnZhbHVlJworCitNVUxUSUxJTkUgPSAiYTEgXFwKKyAgICAgICAgICAgICBhMiBcXAorICAgICAgICAgICAgIGEzIgorCitNVUxUSUxJTkUyIDo9ICIgXFwKKyAgICAgICAgICAgICAgIGIxIFxcCisgICAgICAgICAgICAgICBiMiBcXAorICAgICAgICAgICAgICAgYjMgXFwKKyAgICAgICAgICAgICAgICIKKworCitNVUxUSUxJTkUzID0gIiBcXAorICAgICAgICAgICAgICBjMSBcXAorICAgICAgICAgICAgICBjMiBcXAorICAgICAgICAgICAgICBjMyBcXAorIgorCitkb19mdW5jdGlvbm5hbWUoKSB7CisgICAgY29tbWFuZDEgJHtWQUwxfSAke1ZBTDJ9CisgICAgY29tbWFuZDIgJHtWQUwzfSAke1ZBTDR9Cit9CisiIiIKKyAgICAgICAgc2VsZi5fdGVzdGVkaXRmaWxlKHsnSEVMTE8nOiAoJ25ld3ZhbHVlJywgTm9uZSwgNCwgVHJ1ZSl9LCBuZXdmaWxlMSkKKworCisgICAgZGVmIHRlc3RfZWRpdF9tZXRhZGF0YV9maWxlXzIoc2VsZik6CisKKyAgICAgICAgbmV3ZmlsZTIgPSAiIiIKKyMgQSBjb21tZW50CitIRUxMTyA9ICJvbGR2YWx1ZSIKKworVEhJUyA9ICJ0aGF0IgorCisjIEFub3RoZXIgY29tbWVudAorTk9DSEFOR0UgPSAic2FtZXZhbHVlIgorT1RIRVIgPSAnYW5vdGhlcnZhbHVlJworCitNVUxUSUxJTkUgPSAiIFxcCisgICAgZDEgXFwKKyAgICBkMiBcXAorICAgIGQzIFxcCisgICAgIgorCitNVUxUSUxJTkUyIDo9ICIgXFwKKyAgICAgICAgICAgICAgIGIxIFxcCisgICAgICAgICAgICAgICBiMiBcXAorICAgICAgICAgICAgICAgYjMgXFwKKyAgICAgICAgICAgICAgICIKKworCitNVUxUSUxJTkUzID0gIm5vd3NpbmdsZSIKKworZG9fZnVuY3Rpb25uYW1lKCkgeworICAgIGNvbW1hbmQxICR7VkFMMX0gJHtWQUwyfQorICAgIGNvbW1hbmQyICR7VkFMM30gJHtWQUw0fQorfQorIiIiCisgICAgICAgIHNlbGYuX3Rlc3RlZGl0ZmlsZSh7J01VTFRJTElORSc6IChbJ2QxJywnZDInLCdkMyddLCBOb25lLCA0LCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAnTVVMVElMSU5FMyc6ICgnbm93c2luZ2xlJywgTm9uZSwgNCwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAnTk9UUFJFU0VOVCc6IChbJ2EnLCAnYiddLCBOb25lLCA0LCBGYWxzZSl9LCBuZXdmaWxlMiwgZHVtbXl2YXJzPVsnTk9UUFJFU0VOVCddKQorCisKKyAgICBkZWYgdGVzdF9lZGl0X21ldGFkYXRhX2ZpbGVfMyhzZWxmKToKKworICAgICAgICBuZXdmaWxlMyA9ICIiIgorIyBBIGNvbW1lbnQKK0hFTExPID0gIm9sZHZhbHVlIgorCisjIEFub3RoZXIgY29tbWVudAorTk9DSEFOR0UgPSAic2FtZXZhbHVlIgorT1RIRVIgPSAieWV0YW5vdGhlcnZhbHVlIgorCitNVUxUSUxJTkUgPSAiZTEgXFwKKyAgICAgICAgICAgICBlMiBcXAorICAgICAgICAgICAgIGUzIFxcCisgICAgICAgICAgICAgIgorCitNVUxUSUxJTkUyIDo9ICJmMSBcXAorXHRmMiBcXAorXHQiCisKKworTVVMVElMSU5FMyA9ICIgXFwKKyAgICAgICAgICAgICAgYzEgXFwKKyAgICAgICAgICAgICAgYzIgXFwKKyAgICAgICAgICAgICAgYzMgXFwKKyIKKworZG9fZnVuY3Rpb25uYW1lKCkgeworICAgIG90aGVyY29tbWFuZF9vbmUgYSBiIGMKKyAgICBvdGhlcmNvbW1hbmRfdHdvIGQgZSBmCit9CisiIiIKKworICAgICAgICBzZWxmLl90ZXN0ZWRpdGZpbGUoeydkb19mdW5jdGlvbm5hbWUoKSc6IChbJ290aGVyY29tbWFuZF9vbmUgYSBiIGMnLCAnb3RoZXJjb21tYW5kX3R3byBkIGUgZiddLCBOb25lLCA0LCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAnTVVMVElMSU5FMic6IChbJ2YxJywgJ2YyJ10sIE5vbmUsICdcdCcsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ01VTFRJTElORSc6IChbJ2UxJywgJ2UyJywgJ2UzJ10sIE5vbmUsIC0xLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdUSElTJzogKE5vbmUsIE5vbmUsIDAsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdPVEhFUic6ICgneWV0YW5vdGhlcnZhbHVlJywgTm9uZSwgMCwgVHJ1ZSl9LCBuZXdmaWxlMykKKworCisgICAgZGVmIHRlc3RfZWRpdF9tZXRhZGF0YV9maWxlXzQoc2VsZik6CisKKyAgICAgICAgbmV3ZmlsZTQgPSAiIiIKKyMgQSBjb21tZW50CitIRUxMTyA9ICJvbGR2YWx1ZSIKKworVEhJUyA9ICJ0aGF0IgorCisjIEFub3RoZXIgY29tbWVudAorT1RIRVIgPSAnYW5vdGhlcnZhbHVlJworCitNVUxUSUxJTkUgPSAiYTEgXFwKKyAgICAgICAgICAgICBhMiBcXAorICAgICAgICAgICAgIGEzIgorCitNVUxUSUxJTkUyIDo9ICIgXFwKKyAgICAgICAgICAgICAgIGIxIFxcCisgICAgICAgICAgICAgICBiMiBcXAorICAgICAgICAgICAgICAgYjMgXFwKKyAgICAgICAgICAgICAgICIKKworCisiIiIKKworICAgICAgICBzZWxmLl90ZXN0ZWRpdGZpbGUoeydOT0NIQU5HRSc6IChOb25lLCBOb25lLCAwLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAnTVVMVElMSU5FMyc6IChOb25lLCBOb25lLCAwLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAnVEhJUyc6ICgndGhhdCcsIE5vbmUsIDAsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdkb19mdW5jdGlvbm5hbWUoKSc6IChOb25lLCBOb25lLCAwLCBGYWxzZSl9LCBuZXdmaWxlNCkKKworCisgICAgZGVmIHRlc3RfZWRpdF9tZXRhZGF0YShzZWxmKToKKyAgICAgICAgbmV3ZmlsZTUgPSAiIiIKKyMgQSBjb21tZW50CitIRUxMTyA9ICJoaXRoZXJlIgorCisjIEEgbmV3IGNvbW1lbnQKK1RISVMgKz0gInRoYXQiCisKKyMgQW5vdGhlciBjb21tZW50CitOT0NIQU5HRSA9ICJzYW1ldmFsdWUiCitPVEhFUiA9ICdhbm90aGVydmFsdWUnCisKK01VTFRJTElORSA9ICJhMSBcXAorICAgICAgICAgICAgIGEyIFxcCisgICAgICAgICAgICAgYTMiCisKK01VTFRJTElORTIgOj0gIiBcXAorICAgICAgICAgICAgICAgYjEgXFwKKyAgICAgICAgICAgICAgIGIyIFxcCisgICAgICAgICAgICAgICBiMyBcXAorICAgICAgICAgICAgICAgIgorCisKK01VTFRJTElORTMgPSAiIFxcCisgICAgICAgICAgICAgIGMxIFxcCisgICAgICAgICAgICAgIGMyIFxcCisgICAgICAgICAgICAgIGMzIFxcCisiCisKK05FV1ZBUiA9ICJ2YWx1ZSIKKworZG9fZnVuY3Rpb25uYW1lKCkgeworICAgIGNvbW1hbmQxICR7VkFMMX0gJHtWQUwyfQorICAgIGNvbW1hbmQyICR7VkFMM30gJHtWQUw0fQorfQorIiIiCisKKworICAgICAgICBkZWYgaGFuZGxlX3Zhcih2YXJuYW1lLCBvcmlndmFsdWUsIG9wLCBuZXdsaW5lcyk6CisgICAgICAgICAgICBpZiB2YXJuYW1lID09ICdUSElTJzoKKyAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyMgQSBuZXcgY29tbWVudFxuJykKKyAgICAgICAgICAgIGVsaWYgdmFybmFtZSA9PSAnZG9fZnVuY3Rpb25uYW1lKCknOgorICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnTkVXVkFSID0gInZhbHVlIlxuJykKKyAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJ1xuJykKKyAgICAgICAgICAgIHZhbHVlaXRlbSA9IHZhcnZhbHVlcy5nZXQodmFybmFtZSwgTm9uZSkKKyAgICAgICAgICAgIGlmIHZhbHVlaXRlbToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVpdGVtCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAob3JpZ3ZhbHVlLCBvcCwgMCwgVHJ1ZSkKKworICAgICAgICB2YXJ2YWx1ZXMgPSB7J0hFTExPJzogKCdoaXRoZXJlJywgTm9uZSwgMCwgVHJ1ZSksICdUSElTJzogKCd0aGF0JywgJys9JywgMCwgVHJ1ZSl9CisgICAgICAgIHZhcmxpc3QgPSBbJ0hFTExPJywgJ1RISVMnLCAnZG9fZnVuY3Rpb25uYW1lKCknXQorICAgICAgICAodXBkYXRlZCwgbmV3bGluZXMpID0gYmIudXRpbHMuZWRpdF9tZXRhZGF0YShzZWxmLl9vcmlnZmlsZS5zcGxpdGxpbmVzKFRydWUpLCB2YXJsaXN0LCBoYW5kbGVfdmFyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXBkYXRlZCwgJ0xpc3Qgc2hvdWxkIGJlIHVwZGF0ZWQgYnV0IGlzblwndCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3bGluZXMsIG5ld2ZpbGU1LnNwbGl0bGluZXMoVHJ1ZSkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3RpbmZvaWwucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3RpbmZvaWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVhNDZkOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGluZm9pbC5weQpAQCAtMCwwICsxLDEwNCBAQAorIyB0aW5mb2lsOiBhIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCBjb29rZXIgZm9yIGJpdGJha2UtYmFzZWQgY29tbWFuZC1saW5lIHV0aWxpdGllcworIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IChDKSAyMDExIE1lbnRvciBHcmFwaGljcyBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2ltcG9ydCBiYi5jYWNoZQoraW1wb3J0IGJiLmNvb2tlcgoraW1wb3J0IGJiLnByb3ZpZGVycworaW1wb3J0IGJiLnV0aWxzCitmcm9tIGJiLmNvb2tlciBpbXBvcnQgc3RhdGUsIEJCQ29va2VyLCBDb29rZXJGZWF0dXJlcworZnJvbSBiYi5jb29rZXJkYXRhIGltcG9ydCBDb29rZXJDb25maWd1cmF0aW9uLCBDb25maWdQYXJhbWV0ZXJzCitpbXBvcnQgYmIuZmV0Y2gyCisKK2NsYXNzIFRpbmZvaWw6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dHB1dD1zeXMuc3Rkb3V0LCB0cmFja2luZz1GYWxzZSk6CisgICAgICAgICMgTmVlZGVkIHRvIGF2b2lkIGRlcHJlY2F0aW9uIHdhcm5pbmdzIHdpdGggcHl0aG9uIDIuNgorICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgY2F0ZWdvcnk9RGVwcmVjYXRpb25XYXJuaW5nKQorCisgICAgICAgICMgU2V0IHVwIGxvZ2dpbmcKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZScpCisgICAgICAgIGNvbnNvbGUgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIob3V0cHV0KQorICAgICAgICBiYi5tc2cuYWRkRGVmYXVsdGxvZ0ZpbHRlcihjb25zb2xlKQorICAgICAgICBmb3JtYXQgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikKKyAgICAgICAgaWYgb3V0cHV0LmlzYXR0eSgpOgorICAgICAgICAgICAgZm9ybWF0LmVuYWJsZV9jb2xvcigpCisgICAgICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKGZvcm1hdCkKKyAgICAgICAgc2VsZi5sb2dnZXIuYWRkSGFuZGxlcihjb25zb2xlKQorCisgICAgICAgIHNlbGYuY29uZmlnID0gQ29va2VyQ29uZmlndXJhdGlvbigpCisgICAgICAgIGNvbmZpZ3BhcmFtcyA9IFRpbmZvaWxDb25maWdQYXJhbWV0ZXJzKHBhcnNlX29ubHk9VHJ1ZSkKKyAgICAgICAgc2VsZi5jb25maWcuc2V0Q29uZmlnUGFyYW1ldGVycyhjb25maWdwYXJhbXMpCisgICAgICAgIHNlbGYuY29uZmlnLnNldFNlcnZlclJlZ0lkbGVDYWxsYmFjayhzZWxmLnJlZ2lzdGVyX2lkbGVfZnVuY3Rpb24pCisgICAgICAgIGZlYXR1cmVzID0gW10KKyAgICAgICAgaWYgdHJhY2tpbmc6CisgICAgICAgICAgICBmZWF0dXJlcy5hcHBlbmQoQ29va2VyRmVhdHVyZXMuQkFTRURBVEFTVE9SRV9UUkFDS0lORykKKyAgICAgICAgc2VsZi5jb29rZXIgPSBCQkNvb2tlcihzZWxmLmNvbmZpZywgZmVhdHVyZXMpCisgICAgICAgIHNlbGYuY29uZmlnX2RhdGEgPSBzZWxmLmNvb2tlci5kYXRhCisgICAgICAgIGJiLnByb3ZpZGVycy5sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5FUlJPUikKKyAgICAgICAgc2VsZi5jb29rZXJfZGF0YSA9IE5vbmUKKworICAgIGRlZiByZWdpc3Rlcl9pZGxlX2Z1bmN0aW9uKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHBhcnNlUmVjaXBlcyhzZWxmKToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiUGFyc2luZyByZWNpcGVzLi4iKQorICAgICAgICBzZWxmLmxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLldBUk5JTkcpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2hpbGUgc2VsZi5jb29rZXIuc3RhdGUgaW4gKHN0YXRlLmluaXRpYWwsIHN0YXRlLnBhcnNpbmcpOgorICAgICAgICAgICAgICAgIHNlbGYuY29va2VyLnVwZGF0ZUNhY2hlKCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgc2VsZi5jb29rZXIuc2h1dGRvd24oKQorICAgICAgICAgICAgc2VsZi5jb29rZXIudXBkYXRlQ2FjaGUoKQorICAgICAgICAgICAgc3lzLmV4aXQoMikKKworICAgICAgICBzZWxmLmxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoImRvbmUuXG4iKQorCisgICAgICAgIHNlbGYuY29va2VyX2RhdGEgPSBzZWxmLmNvb2tlci5yZWNpcGVjYWNoZQorCisgICAgZGVmIHByZXBhcmUoc2VsZiwgY29uZmlnX29ubHkgPSBGYWxzZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLmNvb2tlcl9kYXRhOgorICAgICAgICAgICAgaWYgY29uZmlnX29ubHk6CisgICAgICAgICAgICAgICAgc2VsZi5jb29rZXIucGFyc2VDb25maWd1cmF0aW9uKCkKKyAgICAgICAgICAgICAgICBzZWxmLmNvb2tlcl9kYXRhID0gc2VsZi5jb29rZXIucmVjaXBlY2FjaGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZVJlY2lwZXMoKQorCisgICAgZGVmIHNodXRkb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNvb2tlci5zaHV0ZG93bihmb3JjZT1UcnVlKQorICAgICAgICBzZWxmLmNvb2tlci5wb3N0X3NlcnZlKCkKKyAgICAgICAgc2VsZi5jb29rZXIudW5sb2NrQml0YmFrZSgpCisKK2NsYXNzIFRpbmZvaWxDb25maWdQYXJhbWV0ZXJzKENvbmZpZ1BhcmFtZXRlcnMpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqb3B0aW9ucyk6CisgICAgICAgIHNlbGYuaW5pdGlhbF9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzdXBlcihUaW5mb2lsQ29uZmlnUGFyYW1ldGVycywgc2VsZikuX19pbml0X18oKQorCisgICAgZGVmIHBhcnNlQ29tbWFuZExpbmUoc2VsZiwgYXJndj1zeXMuYXJndik6CisgICAgICAgIGNsYXNzIER1bW15T3B0aW9uczoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbml0aWFsX29wdGlvbnMpOgorICAgICAgICAgICAgICAgIGZvciBrZXksIHZhbCBpbiBpbml0aWFsX29wdGlvbnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIHZhbCkKKworICAgICAgICByZXR1cm4gRHVtbXlPcHRpb25zKHNlbGYuaW5pdGlhbF9vcHRpb25zKSwgTm9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4MDVlZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvX19pbml0X18ucHkKQEAgLTAsMCArMSwxNyBAQAorIworIyBCaXRCYWtlIFVJIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9idWlsZGluZm9oZWxwZXIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2J1aWxkaW5mb2hlbHBlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDFlZDUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9idWlsZGluZm9oZWxwZXIucHkKQEAgLTAsMCArMSwxMzM5IEBACisjCisjIEJpdEJha2UgVG9hc3RlclVJIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBiYgoraW1wb3J0IHJlCitpbXBvcnQgb3MKKworb3MuZW52aXJvblsiREpBTkdPX1NFVFRJTkdTX01PRFVMRSJdID0gInRvYXN0ZXIudG9hc3Rlcm1haW4uc2V0dGluZ3MiCisKKworZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCisKKworZGVmIF9jb25maWd1cmVfdG9hc3RlcigpOgorICAgICIiIiBBZGQgdG9hc3RlciB0byBzeXMgcGF0aCBmb3IgaW1wb3J0aW5nIG1vZHVsZXMKKyAgICAiIiIKKyAgICBzeXMucGF0aC5hcHBlbmQob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkpLCAndG9hc3RlcicpKQorX2NvbmZpZ3VyZV90b2FzdGVyKCkKKworZnJvbSB0b2FzdGVyLm9ybS5tb2RlbHMgaW1wb3J0IEJ1aWxkLCBUYXNrLCBSZWNpcGUsIExheWVyX1ZlcnNpb24sIExheWVyLCBUYXJnZXQsIExvZ01lc3NhZ2UsIEhlbHBUZXh0Citmcm9tIHRvYXN0ZXIub3JtLm1vZGVscyBpbXBvcnQgVGFyZ2V0X0ltYWdlX0ZpbGUsIEJ1aWxkQXJ0aWZhY3QKK2Zyb20gdG9hc3Rlci5vcm0ubW9kZWxzIGltcG9ydCBWYXJpYWJsZSwgVmFyaWFibGVIaXN0b3J5Citmcm9tIHRvYXN0ZXIub3JtLm1vZGVscyBpbXBvcnQgUGFja2FnZSwgUGFja2FnZV9GaWxlLCBUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UsIFRhcmdldF9GaWxlCitmcm9tIHRvYXN0ZXIub3JtLm1vZGVscyBpbXBvcnQgVGFza19EZXBlbmRlbmN5LCBQYWNrYWdlX0RlcGVuZGVuY3kKK2Zyb20gdG9hc3Rlci5vcm0ubW9kZWxzIGltcG9ydCBSZWNpcGVfRGVwZW5kZW5jeQorCitmcm9tIHRvYXN0ZXIub3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdAorZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRFbnZpcm9ubWVudCwgQnVpbGRSZXF1ZXN0CisKK2Zyb20gYmIubXNnIGltcG9ydCBCQkxvZ0Zvcm1hdHRlciBhcyBmb3JtYXR0ZXIKK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKK2Zyb20gcHByaW50IGltcG9ydCBwZm9ybWF0CitpbXBvcnQgbG9nZ2luZworCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgdHJhbnNhY3Rpb24sIGNvbm5lY3Rpb24KKworIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCisjIHRoZSBsb2dnZXIgbmFtZSBpcyBzdGFuZGFyZCB0aHJvdWdob3V0IEJpdEJha2UKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJUb2FzdGVyTG9nZ2VyIikKKworCitjbGFzcyBOb3RFeGlzdGluZyhFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgT1JNV3JhcHBlcihvYmplY3QpOgorICAgICIiIiBUaGlzIGNsYXNzIGNyZWF0ZXMgdGhlIGRpY3Rpb25hcmllcyBuZWVkZWQgdG8gc3RvcmUgaW5mb3JtYXRpb24gaW4gdGhlIGRhdGFiYXNlCisgICAgICAgIGZvbGxvd2luZyB0aGUgZm9ybWF0IGRlZmluZWQgYnkgdGhlIERqYW5nbyBtb2RlbHMuIEl0IGlzIGFsc28gdXNlZCB0byBzYXZlIHRoaXMKKyAgICAgICAgaW5mb3JtYXRpb24gaW4gdGhlIGRhdGFiYXNlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmxheWVyX3ZlcnNpb25fb2JqZWN0cyA9IFtdCisgICAgICAgIHNlbGYudGFza19vYmplY3RzID0ge30KKyAgICAgICAgc2VsZi5yZWNpcGVfb2JqZWN0cyA9IHt9CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9idWlsZF9rZXkoKiprd2FyZ3MpOgorICAgICAgICBrZXkgPSAiMCIKKyAgICAgICAgZm9yIGsgaW4gc29ydGVkKGt3YXJncy5rZXlzKCkpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrd2FyZ3Nba10sIG1vZGVscy5Nb2RlbCk6CisgICAgICAgICAgICAgICAga2V5ICs9ICItJWQiICUga3dhcmdzW2tdLmlkCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGtleSArPSAiLSVzIiAlIHN0cihrd2FyZ3Nba10pCisgICAgICAgIHJldHVybiBrZXkKKworCisgICAgZGVmIF9jYWNoZWRfZ2V0X29yX2NyZWF0ZShzZWxmLCBjbGF6eiwgKiprd2FyZ3MpOgorICAgICAgICAiIiIgVGhpcyBpcyBhIG1lbW9yeS1jYWNoZWQgZ2V0X29yX2NyZWF0ZS4gV2UgYXNzdW1lIHRoYXQgdGhlIG9iamVjdHMgd2lsbCBub3QgYmUgY3JlYXRlZCBpbiB0aGUKKyAgICAgICAgICAgIGRhdGFiYXNlIHRocm91Z2ggYW55IG90aGVyIG1lYW5zLgorICAgICAgICAiIiIKKworICAgICAgICBhc3NlcnQgaXNzdWJjbGFzcyhjbGF6eiwgbW9kZWxzLk1vZGVsKSwgIl9jYWNoZWRfZ2V0X29yX2NyZWF0ZSBuZWVkcyB0byBnZXQgdGhlIGNsYXNzIGFzIGZpcnN0IGFyZ3VtZW50IgorCisgICAgICAgIGtleSA9IE9STVdyYXBwZXIuX2J1aWxkX2tleSgqKmt3YXJncykKKyAgICAgICAgZGljdG5hbWUgPSAib2JqZWN0c18lcyIgJSBjbGF6ei5fX25hbWVfXworICAgICAgICBpZiBub3QgZGljdG5hbWUgaW4gdmFycyhzZWxmKS5rZXlzKCk6CisgICAgICAgICAgICB2YXJzKHNlbGYpW2RpY3RuYW1lXSA9IHt9CisKKyAgICAgICAgY3JlYXRlZCA9IEZhbHNlCisgICAgICAgIGlmIG5vdCBrZXkgaW4gdmFycyhzZWxmKVtkaWN0bmFtZV0ua2V5cygpOgorICAgICAgICAgICAgdmFycyhzZWxmKVtkaWN0bmFtZV1ba2V5XSA9IGNsYXp6Lm9iamVjdHMuY3JlYXRlKCoqa3dhcmdzKQorICAgICAgICAgICAgY3JlYXRlZCA9IFRydWUKKworICAgICAgICByZXR1cm4gKHZhcnMoc2VsZilbZGljdG5hbWVdW2tleV0sIGNyZWF0ZWQpCisKKworICAgIGRlZiBfY2FjaGVkX2dldChzZWxmLCBjbGF6eiwgKiprd2FyZ3MpOgorICAgICAgICAiIiIgVGhpcyBpcyBhIG1lbW9yeS1jYWNoZWQgZ2V0LiBXZSBhc3N1bWUgdGhhdCB0aGUgb2JqZWN0cyB3aWxsIG5vdCBjaGFuZ2UgIGluIHRoZSBkYXRhYmFzZSBiZXR3ZWVuIGdldHMuCisgICAgICAgICIiIgorICAgICAgICBhc3NlcnQgaXNzdWJjbGFzcyhjbGF6eiwgbW9kZWxzLk1vZGVsKSwgIl9jYWNoZWRfZ2V0IG5lZWRzIHRvIGdldCB0aGUgY2xhc3MgYXMgZmlyc3QgYXJndW1lbnQiCisKKyAgICAgICAga2V5ID0gT1JNV3JhcHBlci5fYnVpbGRfa2V5KCoqa3dhcmdzKQorICAgICAgICBkaWN0bmFtZSA9ICJvYmplY3RzXyVzIiAlIGNsYXp6Ll9fbmFtZV9fCisKKyAgICAgICAgaWYgbm90IGRpY3RuYW1lIGluIHZhcnMoc2VsZikua2V5cygpOgorICAgICAgICAgICAgdmFycyhzZWxmKVtkaWN0bmFtZV0gPSB7fQorCisgICAgICAgIGlmIG5vdCBrZXkgaW4gdmFycyhzZWxmKVtkaWN0bmFtZV0ua2V5cygpOgorICAgICAgICAgICAgdmFycyhzZWxmKVtkaWN0bmFtZV1ba2V5XSA9IGNsYXp6Lm9iamVjdHMuZ2V0KCoqa3dhcmdzKQorCisgICAgICAgIHJldHVybiB2YXJzKHNlbGYpW2RpY3RuYW1lXVtrZXldCisKKyAgICAjIHB5bGludDogZGlzYWJsZT1uby1zZWxmLXVzZQorICAgICMgd2UgZGlzYWJsZSBkZXRlY3Rpb24gb2Ygbm8gc2VsZiB1c2UgaW4gZnVuY3Rpb25zIGJlY2F1c2UgdGhlIG1ldGhvZHMgYWN0dWFsbHkgd29yayBvbiB0aGUgb2JqZWN0CisgICAgIyBldmVuIGlmIHRoZXkgZG9uJ3QgdG91Y2ggc2VsZiBhbnl3aGVyZQorCisgICAgIyBweWxpbnQ6IGRpc2FibGU9YmFkLWNvbnRpbnVhdGlvbgorICAgICMgd2UgZG8gbm90IGZvbGxvdyB0aGUgcHl0aG9uIGNvbnZlbnRpb25zIGZvciBjb250aW51YXRpb24gaW5kZW50YXRpb24gZHVlIHRvIGxvbmcgbGluZXMgaGVyZQorCisgICAgZGVmIGNyZWF0ZV9idWlsZF9vYmplY3Qoc2VsZiwgYnVpbGRfaW5mbywgYnJiZSwgcHJvamVjdF9pZCk6CisgICAgICAgIGFzc2VydCAnbWFjaGluZScgaW4gYnVpbGRfaW5mbworICAgICAgICBhc3NlcnQgJ2Rpc3RybycgaW4gYnVpbGRfaW5mbworICAgICAgICBhc3NlcnQgJ2Rpc3Ryb192ZXJzaW9uJyBpbiBidWlsZF9pbmZvCisgICAgICAgIGFzc2VydCAnc3RhcnRlZF9vbicgaW4gYnVpbGRfaW5mbworICAgICAgICBhc3NlcnQgJ2Nvb2tlcl9sb2dfcGF0aCcgaW4gYnVpbGRfaW5mbworICAgICAgICBhc3NlcnQgJ2J1aWxkX25hbWUnIGluIGJ1aWxkX2luZm8KKyAgICAgICAgYXNzZXJ0ICdiaXRiYWtlX3ZlcnNpb24nIGluIGJ1aWxkX2luZm8KKworICAgICAgICBwcmogPSBOb25lCisgICAgICAgIGJ1aWxkcmVxdWVzdCA9IE5vbmUKKyAgICAgICAgaWYgYnJiZSBpcyBub3QgTm9uZTogICAgICAgICAgICAjIHRoaXMgYnVpbGQgd2FzIHRyaWdnZXJlZCBieSBhIHJlcXVlc3QgZnJvbSBhIHVzZXIKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiYnVpbGRpbmZvaGVscGVyOiBicmJlIGlzICVzIiAlIGJyYmUpCisgICAgICAgICAgICBiciwgXyA9IGJyYmUuc3BsaXQoIjoiKQorICAgICAgICAgICAgYnVpbGRyZXF1ZXN0ID0gQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZ2V0KHBrID0gYnIpCisgICAgICAgICAgICBwcmogPSBidWlsZHJlcXVlc3QucHJvamVjdAorCisgICAgICAgIGVsaWYgcHJvamVjdF9pZCBpcyBub3QgTm9uZTogICAgIyB0aGlzIGJ1aWxkIHdhcyB0cmlnZ2VyZWQgYnkgYW4gZXh0ZXJuYWwgc3lzdGVtIGZvciBhIHNwZWNpZmljIHByb2plY3QKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiYnVpbGRpbmZvaGVscGVyOiBwcm9qZWN0IGlzICVzIiAlIHByaikKKyAgICAgICAgICAgIHByaiA9IFByb2plY3Qub2JqZWN0cy5nZXQocGsgPSBwcm9qZWN0X2lkKQorCisgICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGJ1aWxkIHdhcyB0cmlnZ2VyZWQgYnkgYSBsZWdhY3kgc3lzdGVtLCBvciBjb21tYW5kIGxpbmUgaW50ZXJhY3RpdmUgbW9kZQorICAgICAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldF9kZWZhdWx0X3Byb2plY3QoKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJidWlsZGluZm9oZWxwZXI6IHByb2plY3QgaXMgbm90IHNwZWNpZmllZCwgZGVmYXVsdGluZyB0byAlcyIgJSBwcmopCisKKworICAgICAgICBpZiBidWlsZHJlcXVlc3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBidWlsZCA9IGJ1aWxkcmVxdWVzdC5idWlsZAorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlVwZGF0aW5nIGV4aXN0aW5nIGJ1aWxkLCB3aXRoICVzIiwgYnVpbGRfaW5mbykKKyAgICAgICAgICAgIGJ1aWxkLnByb2plY3QgPSBwcmoKKyAgICAgICAgICAgIGJ1aWxkLm1hY2hpbmU9YnVpbGRfaW5mb1snbWFjaGluZSddCisgICAgICAgICAgICBidWlsZC5kaXN0cm89YnVpbGRfaW5mb1snZGlzdHJvJ10KKyAgICAgICAgICAgIGJ1aWxkLmRpc3Ryb192ZXJzaW9uPWJ1aWxkX2luZm9bJ2Rpc3Ryb192ZXJzaW9uJ10KKyAgICAgICAgICAgIGJ1aWxkLmNvb2tlcl9sb2dfcGF0aD1idWlsZF9pbmZvWydjb29rZXJfbG9nX3BhdGgnXQorICAgICAgICAgICAgYnVpbGQuYnVpbGRfbmFtZT1idWlsZF9pbmZvWydidWlsZF9uYW1lJ10KKyAgICAgICAgICAgIGJ1aWxkLmJpdGJha2VfdmVyc2lvbj1idWlsZF9pbmZvWydiaXRiYWtlX3ZlcnNpb24nXQorICAgICAgICAgICAgYnVpbGQuc2F2ZSgpCisKKyAgICAgICAgICAgIFRhcmdldC5vYmplY3RzLmZpbHRlcihidWlsZCA9IGJ1aWxkKS5kZWxldGUoKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBidWlsZCA9IEJ1aWxkLm9iamVjdHMuY3JlYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdCA9IHByaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmU9YnVpbGRfaW5mb1snbWFjaGluZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJvPWJ1aWxkX2luZm9bJ2Rpc3RybyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJvX3ZlcnNpb249YnVpbGRfaW5mb1snZGlzdHJvX3ZlcnNpb24nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRfb249YnVpbGRfaW5mb1snc3RhcnRlZF9vbiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uPWJ1aWxkX2luZm9bJ3N0YXJ0ZWRfb24nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlcl9sb2dfcGF0aD1idWlsZF9pbmZvWydjb29rZXJfbG9nX3BhdGgnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX25hbWU9YnVpbGRfaW5mb1snYnVpbGRfbmFtZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0YmFrZV92ZXJzaW9uPWJ1aWxkX2luZm9bJ2JpdGJha2VfdmVyc2lvbiddKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiYnVpbGRpbmZvaGVscGVyOiBidWlsZCBpcyBjcmVhdGVkICVzIiAlIGJ1aWxkKQorCisgICAgICAgIGlmIGJ1aWxkcmVxdWVzdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGJ1aWxkcmVxdWVzdC5idWlsZCA9IGJ1aWxkCisgICAgICAgICAgICBidWlsZHJlcXVlc3Quc2F2ZSgpCisKKyAgICAgICAgcmV0dXJuIGJ1aWxkCisKKyAgICBkZWYgY3JlYXRlX3RhcmdldF9vYmplY3RzKHNlbGYsIHRhcmdldF9pbmZvKToKKyAgICAgICAgYXNzZXJ0ICdidWlsZCcgaW4gdGFyZ2V0X2luZm8KKyAgICAgICAgYXNzZXJ0ICd0YXJnZXRzJyBpbiB0YXJnZXRfaW5mbworCisgICAgICAgIHRhcmdldHMgPSBbXQorICAgICAgICBmb3IgdGd0X25hbWUgaW4gdGFyZ2V0X2luZm9bJ3RhcmdldHMnXToKKyAgICAgICAgICAgIHRndF9vYmplY3QgPSBUYXJnZXQub2JqZWN0cy5jcmVhdGUoIGJ1aWxkID0gdGFyZ2V0X2luZm9bJ2J1aWxkJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0Z3RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2ltYWdlID0gRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICB0YXJnZXRzLmFwcGVuZCh0Z3Rfb2JqZWN0KQorICAgICAgICByZXR1cm4gdGFyZ2V0cworCisgICAgZGVmIHVwZGF0ZV9idWlsZF9vYmplY3Qoc2VsZiwgYnVpbGQsIGVycm9ycywgd2FybmluZ3MsIHRhc2tmYWlsdXJlcyk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJ1aWxkLEJ1aWxkKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShlcnJvcnMsIGludCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uod2FybmluZ3MsIGludCkKKworICAgICAgICBvdXRjb21lID0gQnVpbGQuU1VDQ0VFREVECisgICAgICAgIGlmIGVycm9ycyBvciB0YXNrZmFpbHVyZXM6CisgICAgICAgICAgICBvdXRjb21lID0gQnVpbGQuRkFJTEVECisKKyAgICAgICAgYnVpbGQuY29tcGxldGVkX29uID0gdGltZXpvbmUubm93KCkKKyAgICAgICAgYnVpbGQub3V0Y29tZSA9IG91dGNvbWUKKyAgICAgICAgYnVpbGQuc2F2ZSgpCisKKyAgICBkZWYgdXBkYXRlX3RhcmdldF9zZXRfbGljZW5zZV9tYW5pZmVzdChzZWxmLCB0YXJnZXQsIGxpY2Vuc2VfbWFuaWZlc3RfcGF0aCk6CisgICAgICAgIHRhcmdldC5saWNlbnNlX21hbmlmZXN0X3BhdGggPSBsaWNlbnNlX21hbmlmZXN0X3BhdGgKKyAgICAgICAgdGFyZ2V0LnNhdmUoKQorCisgICAgZGVmIGdldF91cGRhdGVfdGFza19vYmplY3Qoc2VsZiwgdGFza19pbmZvcm1hdGlvbiwgbXVzdF9leGlzdCA9IEZhbHNlKToKKyAgICAgICAgYXNzZXJ0ICdidWlsZCcgaW4gdGFza19pbmZvcm1hdGlvbgorICAgICAgICBhc3NlcnQgJ3JlY2lwZScgaW4gdGFza19pbmZvcm1hdGlvbgorICAgICAgICBhc3NlcnQgJ3Rhc2tfbmFtZScgaW4gdGFza19pbmZvcm1hdGlvbgorCisgICAgICAgICMgd2UgdXNlIG11c3RfZXhpc3QgaW5mbyBmb3IgZGF0YWJhc2UgbG9vay11cCBvcHRpbWl6YXRpb24KKyAgICAgICAgdGFza19vYmplY3QsIGNyZWF0ZWQgPSBzZWxmLl9jYWNoZWRfZ2V0X29yX2NyZWF0ZShUYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQ9dGFza19pbmZvcm1hdGlvblsnYnVpbGQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZT10YXNrX2luZm9ybWF0aW9uWydyZWNpcGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tfbmFtZT10YXNrX2luZm9ybWF0aW9uWyd0YXNrX25hbWUnXQorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBpZiBjcmVhdGVkIGFuZCBtdXN0X2V4aXN0OgorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnZGVidWcnXSA9ICJidWlsZCBpZCAlZCwgcmVjaXBlIGlkICVkIiAlICh0YXNrX2luZm9ybWF0aW9uWydidWlsZCddLnBrLCB0YXNrX2luZm9ybWF0aW9uWydyZWNpcGUnXS5waykKKyAgICAgICAgICAgIHJhaXNlIE5vdEV4aXN0aW5nKCJUYXNrIG9iamVjdCBjcmVhdGVkIHdoZW4gZXhwZWN0ZWQgdG8gZXhpc3QiLCB0YXNrX2luZm9ybWF0aW9uKQorCisgICAgICAgIG9iamVjdF9jaGFuZ2VkID0gRmFsc2UKKyAgICAgICAgZm9yIHYgaW4gdmFycyh0YXNrX29iamVjdCk6CisgICAgICAgICAgICBpZiB2IGluIHRhc2tfaW5mb3JtYXRpb24ua2V5cygpOgorICAgICAgICAgICAgICAgIGlmIHZhcnModGFza19vYmplY3QpW3ZdICE9IHRhc2tfaW5mb3JtYXRpb25bdl06CisgICAgICAgICAgICAgICAgICAgIHZhcnModGFza19vYmplY3QpW3ZdID0gdGFza19pbmZvcm1hdGlvblt2XQorICAgICAgICAgICAgICAgICAgICBvYmplY3RfY2hhbmdlZCA9IFRydWUKKworICAgICAgICAjIHVwZGF0ZSBzZXRzY2VuZS1yZWxhdGVkIGluZm9ybWF0aW9uIGlmIHRoZSB0YXNrIGhhcyBhIHNldHNjZW5lCisgICAgICAgIGlmIHRhc2tfb2JqZWN0Lm91dGNvbWUgPT0gVGFzay5PVVRDT01FX0NPVkVSRUQgYW5kIDEgPT0gdGFza19vYmplY3QuZ2V0X3JlbGF0ZWRfc2V0c2NlbmUoKS5jb3VudCgpOgorICAgICAgICAgICAgdGFza19vYmplY3Qub3V0Y29tZSA9IFRhc2suT1VUQ09NRV9DQUNIRUQKKyAgICAgICAgICAgIG9iamVjdF9jaGFuZ2VkID0gVHJ1ZQorCisgICAgICAgICAgICBvdXRjb21lX3Rhc2tfc2V0c2NlbmUgPSBUYXNrLm9iamVjdHMuZ2V0KHRhc2tfZXhlY3V0ZWQ9VHJ1ZSwgYnVpbGQgPSB0YXNrX29iamVjdC5idWlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSA9IHRhc2tfb2JqZWN0LnJlY2lwZSwgdGFza19uYW1lPXRhc2tfb2JqZWN0LnRhc2tfbmFtZSsiX3NldHNjZW5lIikub3V0Y29tZQorICAgICAgICAgICAgaWYgb3V0Y29tZV90YXNrX3NldHNjZW5lID09IFRhc2suT1VUQ09NRV9TVUNDRVNTOgorICAgICAgICAgICAgICAgIHRhc2tfb2JqZWN0LnNzdGF0ZV9yZXN1bHQgPSBUYXNrLlNTVEFURV9SRVNUT1JFRAorICAgICAgICAgICAgICAgIG9iamVjdF9jaGFuZ2VkID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiBvdXRjb21lX3Rhc2tfc2V0c2NlbmUgPT0gVGFzay5PVVRDT01FX0ZBSUxFRDoKKyAgICAgICAgICAgICAgICB0YXNrX29iamVjdC5zc3RhdGVfcmVzdWx0ID0gVGFzay5TU1RBVEVfRkFJTEVECisgICAgICAgICAgICAgICAgb2JqZWN0X2NoYW5nZWQgPSBUcnVlCisKKyAgICAgICAgIyBtYXJrIGRvd24gZHVyYXRpb24gaWYgd2UgaGF2ZSBhIHN0YXJ0IHRpbWUgYW5kIGEgY3VycmVudCB0aW1lCisgICAgICAgIGlmICdzdGFydF90aW1lJyBpbiB0YXNrX2luZm9ybWF0aW9uLmtleXMoKSBhbmQgJ2VuZF90aW1lJyBpbiB0YXNrX2luZm9ybWF0aW9uLmtleXMoKToKKyAgICAgICAgICAgIGR1cmF0aW9uID0gdGFza19pbmZvcm1hdGlvblsnZW5kX3RpbWUnXSAtIHRhc2tfaW5mb3JtYXRpb25bJ3N0YXJ0X3RpbWUnXQorICAgICAgICAgICAgdGFza19vYmplY3QuZWxhcHNlZF90aW1lID0gZHVyYXRpb24KKyAgICAgICAgICAgIG9iamVjdF9jaGFuZ2VkID0gVHJ1ZQorICAgICAgICAgICAgZGVsIHRhc2tfaW5mb3JtYXRpb25bJ3N0YXJ0X3RpbWUnXQorICAgICAgICAgICAgZGVsIHRhc2tfaW5mb3JtYXRpb25bJ2VuZF90aW1lJ10KKworICAgICAgICBpZiBvYmplY3RfY2hhbmdlZDoKKyAgICAgICAgICAgIHRhc2tfb2JqZWN0LnNhdmUoKQorICAgICAgICByZXR1cm4gdGFza19vYmplY3QKKworCisgICAgZGVmIGdldF91cGRhdGVfcmVjaXBlX29iamVjdChzZWxmLCByZWNpcGVfaW5mb3JtYXRpb24sIG11c3RfZXhpc3QgPSBGYWxzZSk6CisgICAgICAgIGFzc2VydCAnbGF5ZXJfdmVyc2lvbicgaW4gcmVjaXBlX2luZm9ybWF0aW9uCisgICAgICAgIGFzc2VydCAnZmlsZV9wYXRoJyBpbiByZWNpcGVfaW5mb3JtYXRpb24KKyAgICAgICAgYXNzZXJ0ICdwYXRoZmxhZ3MnIGluIHJlY2lwZV9pbmZvcm1hdGlvbgorCisgICAgICAgIGFzc2VydCBub3QgcmVjaXBlX2luZm9ybWF0aW9uWydmaWxlX3BhdGgnXS5zdGFydHN3aXRoKCIvIikgICAgICAjIHdlIHNob3VsZCBoYXZlIGxheWVyLXJlbGF0aXZlIHBhdGhzIGF0IGFsbCB0aW1lcworCisgICAgICAgIHJlY2lwZV9vYmplY3QsIGNyZWF0ZWQgPSBzZWxmLl9jYWNoZWRfZ2V0X29yX2NyZWF0ZShSZWNpcGUsIGxheWVyX3ZlcnNpb249cmVjaXBlX2luZm9ybWF0aW9uWydsYXllcl92ZXJzaW9uJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXRoPXJlY2lwZV9pbmZvcm1hdGlvblsnZmlsZV9wYXRoJ10sIHBhdGhmbGFncyA9IHJlY2lwZV9pbmZvcm1hdGlvblsncGF0aGZsYWdzJ10pCisgICAgICAgIGlmIGNyZWF0ZWQgYW5kIG11c3RfZXhpc3Q6CisgICAgICAgICAgICByYWlzZSBOb3RFeGlzdGluZygiUmVjaXBlIG9iamVjdCBjcmVhdGVkIHdoZW4gZXhwZWN0ZWQgdG8gZXhpc3QiLCByZWNpcGVfaW5mb3JtYXRpb24pCisKKyAgICAgICAgb2JqZWN0X2NoYW5nZWQgPSBGYWxzZQorICAgICAgICBmb3IgdiBpbiB2YXJzKHJlY2lwZV9vYmplY3QpOgorICAgICAgICAgICAgaWYgdiBpbiByZWNpcGVfaW5mb3JtYXRpb24ua2V5cygpOgorICAgICAgICAgICAgICAgIG9iamVjdF9jaGFuZ2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgIHZhcnMocmVjaXBlX29iamVjdClbdl0gPSByZWNpcGVfaW5mb3JtYXRpb25bdl0KKworICAgICAgICBpZiBvYmplY3RfY2hhbmdlZDoKKyAgICAgICAgICAgIHJlY2lwZV9vYmplY3Quc2F2ZSgpCisKKyAgICAgICAgcmV0dXJuIHJlY2lwZV9vYmplY3QKKworICAgIGRlZiBnZXRfdXBkYXRlX2xheWVyX3ZlcnNpb25fb2JqZWN0KHNlbGYsIGJ1aWxkX29iaiwgbGF5ZXJfb2JqLCBsYXllcl92ZXJzaW9uX2luZm9ybWF0aW9uKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGRfb2JqLCBCdWlsZCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UobGF5ZXJfb2JqLCBMYXllcikKKyAgICAgICAgYXNzZXJ0ICdicmFuY2gnIGluIGxheWVyX3ZlcnNpb25faW5mb3JtYXRpb24KKyAgICAgICAgYXNzZXJ0ICdjb21taXQnIGluIGxheWVyX3ZlcnNpb25faW5mb3JtYXRpb24KKyAgICAgICAgYXNzZXJ0ICdwcmlvcml0eScgaW4gbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvbgorICAgICAgICBhc3NlcnQgJ2xvY2FsX3BhdGgnIGluIGxheWVyX3ZlcnNpb25faW5mb3JtYXRpb24KKworICAgICAgICBsYXllcl92ZXJzaW9uX29iamVjdCwgXyA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXRfb3JfY3JlYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgPSBidWlsZF9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllciA9IGxheWVyX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCA9IGxheWVyX3ZlcnNpb25faW5mb3JtYXRpb25bJ2JyYW5jaCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0ID0gbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvblsnY29tbWl0J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eSA9IGxheWVyX3ZlcnNpb25faW5mb3JtYXRpb25bJ3ByaW9yaXR5J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9wYXRoID0gbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvblsnbG9jYWxfcGF0aCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYubGF5ZXJfdmVyc2lvbl9vYmplY3RzLmFwcGVuZChsYXllcl92ZXJzaW9uX29iamVjdCkKKworICAgICAgICByZXR1cm4gbGF5ZXJfdmVyc2lvbl9vYmplY3QKKworICAgIGRlZiBnZXRfdXBkYXRlX2xheWVyX29iamVjdChzZWxmLCBsYXllcl9pbmZvcm1hdGlvbiwgYnJiZSk6CisgICAgICAgIGFzc2VydCAnbmFtZScgaW4gbGF5ZXJfaW5mb3JtYXRpb24KKyAgICAgICAgYXNzZXJ0ICdsYXllcl9pbmRleF91cmwnIGluIGxheWVyX2luZm9ybWF0aW9uCisKKyAgICAgICAgaWYgYnJiZSBpcyBOb25lOgorICAgICAgICAgICAgbGF5ZXJfb2JqZWN0LCBfID0gTGF5ZXIub2JqZWN0cy5nZXRfb3JfY3JlYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWxheWVyX2luZm9ybWF0aW9uWyduYW1lJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX2luZGV4X3VybD1sYXllcl9pbmZvcm1hdGlvblsnbGF5ZXJfaW5kZXhfdXJsJ10pCisgICAgICAgICAgICByZXR1cm4gbGF5ZXJfb2JqZWN0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHdlIGFyZSB1bmRlciBtYW5hZ2VkIG1vZGU7IHdlIG11c3QgbWF0Y2ggdGhlIGxheWVyIHVzZWQgaW4gdGhlIFByb2plY3QgTGF5ZXIKKyAgICAgICAgICAgIGJyX2lkLCBiZV9pZCA9IGJyYmUuc3BsaXQoIjoiKQorCisgICAgICAgICAgICAjIGZpbmQgbGF5ZXIgYnkgY2hlY2tvdXQgcGF0aDsKKyAgICAgICAgICAgIGZyb20gYmxkY29udHJvbCBpbXBvcnQgYmJjb250cm9sbGVyCisgICAgICAgICAgICBiYyA9IGJiY29udHJvbGxlci5nZXRCdWlsZEVudmlyb25tZW50Q29udHJvbGxlcihwayA9IGJlX2lkKQorCisgICAgICAgICAgICAjIHdlIG1pZ2h0IGhhdmUgYSByYWNlIGNvbmRpdGlvbiBoZXJlLCBhcyB0aGUgcHJvamVjdCBsYXllcnMgbWF5IGNoYW5nZSBiZXR3ZWVuIHRoZSBidWlsZCB0cmlnZ2VyIGFuZCB0aGUgYWN0dWFsIGJ1aWxkIGV4ZWN1dGlvbgorICAgICAgICAgICAgIyBidXQgd2UgY2FuIG9ubHkgbWF0Y2ggb24gdGhlIGxheWVyIG5hbWUsIHNvIHRoZSB3b3JzdCB0aGluZyBjYW4gaGFwcGVuIGlzIGEgbWlzLWlkZW50aWZpY2F0aW9uIG9mIHRoZSBsYXllciwgbm90IGEgdG90YWwgZmFpbHVyZQorCisgICAgICAgICAgICAjIG5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudAorICAgICAgICAgICAgYnVpbGRyZXF1ZXN0ID0gQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZ2V0KHBrID0gYnJfaWQpCisgICAgICAgICAgICBmb3IgYnJsIGluIGJ1aWxkcmVxdWVzdC5icmxheWVyX3NldC5hbGwoKToKKyAgICAgICAgICAgICAgICBsb2NhbGRpcm5hbWUgPSBvcy5wYXRoLmpvaW4oYmMuZ2V0R2l0Q2xvbmVEaXJlY3RvcnkoYnJsLmdpdHVybCwgYnJsLmNvbW1pdCksIGJybC5kaXJwYXRoKQorICAgICAgICAgICAgICAgICMgd2UgZ2V0IGEgcmVsYXRpdmUgcGF0aCwgdW5sZXNzIHJ1bm5pbmcgaW4gSEVBRCBtb2RlIHdoZXJlIHRoZSBwYXRoIGlzIGFic29sdXRlCisgICAgICAgICAgICAgICAgaWYgbm90IGxvY2FsZGlybmFtZS5zdGFydHN3aXRoKCIvIik6CisgICAgICAgICAgICAgICAgICAgIGxvY2FsZGlybmFtZSA9IG9zLnBhdGguam9pbihiYy5iZS5zb3VyY2VkaXIsIGxvY2FsZGlybmFtZSkKKyAgICAgICAgICAgICAgICAjbG9nZ2VyLmRlYnVnKDEsICJMb2NhbGRpcm5hbWUgJXMgbGNhbF9wYXRoICVzIiAlIChsb2NhbGRpcm5hbWUsIGxheWVyX2luZm9ybWF0aW9uWydsb2NhbF9wYXRoJ10pKQorICAgICAgICAgICAgICAgIGlmIGxvY2FsZGlybmFtZS5zdGFydHN3aXRoKGxheWVyX2luZm9ybWF0aW9uWydsb2NhbF9wYXRoJ10pOgorICAgICAgICAgICAgICAgICAgICAjIHdlIG1hdGNoZWQgdGhlIEJSTGF5ZXIsIGJ1dCB3ZSBuZWVkIHRoZSBsYXllcl92ZXJzaW9uIHRoYXQgZ2VuZXJhdGVkIHRoaXMgQlI7IHJldmVyc2Ugb2YgdGhlIFByb2plY3Quc2NoZWR1bGVfYnVpbGQoKQorICAgICAgICAgICAgICAgICAgICAjbG9nZ2VyLmRlYnVnKDEsICJNYXRjaGVkICVzIHRvIEJSbGF5ZXIgJXMiICUgKHBmb3JtYXQobGF5ZXJfaW5mb3JtYXRpb25bImxvY2FsX3BhdGgiXSksIGxvY2FsZGlybmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGZvciBwbCBpbiBidWlsZHJlcXVlc3QucHJvamVjdC5wcm9qZWN0bGF5ZXJfc2V0LmZpbHRlcihsYXllcmNvbW1pdF9fbGF5ZXJfX25hbWUgPSBicmwubmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwbC5sYXllcmNvbW1pdC5sYXllci52Y3NfdXJsID09IGJybC5naXR1cmwgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyID0gcGwubGF5ZXJjb21taXQubGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5zYXZlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGF5ZXIKKworICAgICAgICAgICAgcmFpc2UgTm90RXhpc3RpbmcoIlVuaWRlbnRpZmllZCBsYXllciAlcyIgJSBwZm9ybWF0KGxheWVyX2luZm9ybWF0aW9uKSkKKworCisgICAgZGVmIHNhdmVfdGFyZ2V0X2ZpbGVfaW5mb3JtYXRpb24oc2VsZiwgYnVpbGRfb2JqLCB0YXJnZXRfb2JqLCBmaWxlZGF0YSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJ1aWxkX29iaiwgQnVpbGQpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHRhcmdldF9vYmosIFRhcmdldCkKKyAgICAgICAgZGlycyA9IGZpbGVkYXRhWydkaXJzJ10KKyAgICAgICAgZmlsZXMgPSBmaWxlZGF0YVsnZmlsZXMnXQorICAgICAgICBzeW1zID0gZmlsZWRhdGFbJ3N5bXMnXQorCisgICAgICAgICMgd2UgaW5zZXJ0IGRpcmVjdG9yaWVzLCBvcmRlcmVkIGJ5IG5hbWUgZGVwdGgKKyAgICAgICAgZm9yIGQgaW4gc29ydGVkKGRpcnMsIGtleT1sYW1iZGEgeDpsZW4oeFstMV0uc3BsaXQoIi8iKSkpOgorICAgICAgICAgICAgKHVzZXIsIGdyb3VwLCBzaXplKSA9IGRbMTo0XQorICAgICAgICAgICAgcGVybWlzc2lvbiA9IGRbMF1bMTpdCisgICAgICAgICAgICBwYXRoID0gZFs0XS5sc3RyaXAoIi4iKQorICAgICAgICAgICAgaWYgbGVuKHBhdGgpID09IDA6CisgICAgICAgICAgICAgICAgIyB3ZSBjcmVhdGUgdGhlIHJvb3QgZGlyZWN0b3J5IGFzIGEgc3BlY2lhbCBjYXNlCisgICAgICAgICAgICAgICAgcGF0aCA9ICIvIgorICAgICAgICAgICAgICAgIHRmX29iaiA9IFRhcmdldF9GaWxlLm9iamVjdHMuY3JlYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0X29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbm9kZXR5cGUgPSBUYXJnZXRfRmlsZS5JVFlQRV9ESVJFQ1RPUlksCisgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uID0gcGVybWlzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0gdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgdGZfb2JqLmRpcmVjdG9yeSA9IHRmX29iagorICAgICAgICAgICAgICAgIHRmX29iai5zYXZlKCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcGFyZW50X3BhdGggPSAiLyIuam9pbihwYXRoLnNwbGl0KCIvIilbOmxlbihwYXRoLnNwbGl0KCIvIikpIC0gMV0pCisgICAgICAgICAgICBpZiBsZW4ocGFyZW50X3BhdGgpID09IDA6CisgICAgICAgICAgICAgICAgcGFyZW50X3BhdGggPSAiLyIKKyAgICAgICAgICAgIHBhcmVudF9vYmogPSBzZWxmLl9jYWNoZWRfZ2V0KFRhcmdldF9GaWxlLCB0YXJnZXQgPSB0YXJnZXRfb2JqLCBwYXRoID0gcGFyZW50X3BhdGgsIGlub2RldHlwZSA9IFRhcmdldF9GaWxlLklUWVBFX0RJUkVDVE9SWSkKKyAgICAgICAgICAgIHRmX29iaiA9IFRhcmdldF9GaWxlLm9iamVjdHMuY3JlYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0X29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbm9kZXR5cGUgPSBUYXJnZXRfRmlsZS5JVFlQRV9ESVJFQ1RPUlksCisgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uID0gcGVybWlzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0gdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgPSBwYXJlbnRfb2JqKQorCisKKyAgICAgICAgIyB3ZSBpbnNlcnQgZmlsZXMKKyAgICAgICAgZm9yIGQgaW4gZmlsZXM6CisgICAgICAgICAgICAodXNlciwgZ3JvdXAsIHNpemUpID0gZFsxOjRdCisgICAgICAgICAgICBwZXJtaXNzaW9uID0gZFswXVsxOl0KKyAgICAgICAgICAgIHBhdGggPSBkWzRdLmxzdHJpcCgiLiIpCisgICAgICAgICAgICBwYXJlbnRfcGF0aCA9ICIvIi5qb2luKHBhdGguc3BsaXQoIi8iKVs6bGVuKHBhdGguc3BsaXQoIi8iKSkgLSAxXSkKKyAgICAgICAgICAgIGlub2RldHlwZSA9IFRhcmdldF9GaWxlLklUWVBFX1JFR1VMQVIKKyAgICAgICAgICAgIGlmIGRbMF0uc3RhcnRzd2l0aCgnYicpOgorICAgICAgICAgICAgICAgIGlub2RldHlwZSA9IFRhcmdldF9GaWxlLklUWVBFX0JMT0NLCisgICAgICAgICAgICBpZiBkWzBdLnN0YXJ0c3dpdGgoJ2MnKToKKyAgICAgICAgICAgICAgICBpbm9kZXR5cGUgPSBUYXJnZXRfRmlsZS5JVFlQRV9DSEFSQUNURVIKKyAgICAgICAgICAgIGlmIGRbMF0uc3RhcnRzd2l0aCgncCcpOgorICAgICAgICAgICAgICAgIGlub2RldHlwZSA9IFRhcmdldF9GaWxlLklUWVBFX0ZJRk8KKworICAgICAgICAgICAgdGZfb2JqID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlub2RldHlwZSA9IGlub2RldHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSBwZXJtaXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPSB1c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBncm91cCkKKyAgICAgICAgICAgIHBhcmVudF9vYmogPSBzZWxmLl9jYWNoZWRfZ2V0KFRhcmdldF9GaWxlLCB0YXJnZXQgPSB0YXJnZXRfb2JqLCBwYXRoID0gcGFyZW50X3BhdGgsIGlub2RldHlwZSA9IFRhcmdldF9GaWxlLklUWVBFX0RJUkVDVE9SWSkKKyAgICAgICAgICAgIHRmX29iai5kaXJlY3RvcnkgPSBwYXJlbnRfb2JqCisgICAgICAgICAgICB0Zl9vYmouc2F2ZSgpCisKKyAgICAgICAgIyB3ZSBpbnNlcnQgc3ltbGlua3MKKyAgICAgICAgZm9yIGQgaW4gc3ltczoKKyAgICAgICAgICAgICh1c2VyLCBncm91cCwgc2l6ZSkgPSBkWzE6NF0KKyAgICAgICAgICAgIHBlcm1pc3Npb24gPSBkWzBdWzE6XQorICAgICAgICAgICAgcGF0aCA9IGRbNF0ubHN0cmlwKCIuIikKKyAgICAgICAgICAgIGZpbGV0YXJnZXRfcGF0aCA9IGRbNl0KKworICAgICAgICAgICAgcGFyZW50X3BhdGggPSAiLyIuam9pbihwYXRoLnNwbGl0KCIvIilbOmxlbihwYXRoLnNwbGl0KCIvIikpIC0gMV0pCisgICAgICAgICAgICBpZiBub3QgZmlsZXRhcmdldF9wYXRoLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgICAjIHdlIGhhdmUgYSByZWxhdGl2ZSBwYXRoLCBnZXQgYSBub3JtYWxpemVkIGFic29sdXRlIG9uZQorICAgICAgICAgICAgICAgIGZpbGV0YXJnZXRfcGF0aCA9IHBhcmVudF9wYXRoICsgIi8iICsgZmlsZXRhcmdldF9wYXRoCisgICAgICAgICAgICAgICAgZmNwID0gZmlsZXRhcmdldF9wYXRoLnNwbGl0KCIvIikKKyAgICAgICAgICAgICAgICBmY3BsID0gW10KKyAgICAgICAgICAgICAgICBmb3IgaSBpbiBmY3A6CisgICAgICAgICAgICAgICAgICAgIGlmIGkgPT0gIi4uIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZjcGwucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZjcGwuYXBwZW5kKGkpCisgICAgICAgICAgICAgICAgZmlsZXRhcmdldF9wYXRoID0gIi8iLmpvaW4oZmNwbCkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZpbGV0YXJnZXRfb2JqID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5nZXQodGFyZ2V0ID0gdGFyZ2V0X29iaiwgcGF0aCA9IGZpbGV0YXJnZXRfcGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBUYXJnZXRfRmlsZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICAgICAgIyB3ZSBtaWdodCBoYXZlIGFuIGludmFsaWQgbGluazsgbm8gd2F5IHRvIGRldGVjdCB0aGlzLiBqdXN0IHNldCBpdCB0byBOb25lCisgICAgICAgICAgICAgICAgZmlsZXRhcmdldF9vYmogPSBOb25lCisKKyAgICAgICAgICAgIHBhcmVudF9vYmogPSBUYXJnZXRfRmlsZS5vYmplY3RzLmdldCh0YXJnZXQgPSB0YXJnZXRfb2JqLCBwYXRoID0gcGFyZW50X3BhdGgsIGlub2RldHlwZSA9IFRhcmdldF9GaWxlLklUWVBFX0RJUkVDVE9SWSkKKworICAgICAgICAgICAgdGZfb2JqID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlub2RldHlwZSA9IFRhcmdldF9GaWxlLklUWVBFX1NZTUxJTkssCisgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uID0gcGVybWlzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0gdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgPSBwYXJlbnRfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgc3ltX3RhcmdldCA9IGZpbGV0YXJnZXRfb2JqKQorCisKKyAgICBkZWYgc2F2ZV90YXJnZXRfcGFja2FnZV9pbmZvcm1hdGlvbihzZWxmLCBidWlsZF9vYmosIHRhcmdldF9vYmosIHBhY2thZ2VkaWN0LCBwa2dwbm1hcCwgcmVjaXBlcyk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJ1aWxkX29iaiwgQnVpbGQpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHRhcmdldF9vYmosIFRhcmdldCkKKworICAgICAgICBlcnJvcm1zZyA9ICIiCisgICAgICAgIGZvciBwIGluIHBhY2thZ2VkaWN0OgorICAgICAgICAgICAgc2VhcmNobmFtZSA9IHAKKyAgICAgICAgICAgIGlmICdPUEtHTicgaW4gcGtncG5tYXBbcF0ua2V5cygpOgorICAgICAgICAgICAgICAgIHNlYXJjaG5hbWUgPSBwa2dwbm1hcFtwXVsnT1BLR04nXQorCisgICAgICAgICAgICBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10sIGNyZWF0ZWQgPSBQYWNrYWdlLm9iamVjdHMuZ2V0X29yX2NyZWF0ZSggYnVpbGQgPSBidWlsZF9vYmosIG5hbWUgPSBzZWFyY2huYW1lICkKKyAgICAgICAgICAgIGlmIGNyZWF0ZWQgb3IgcGFja2FnZWRpY3RbcF1bJ29iamVjdCddLnNpemUgPT0gLTE6ICAgICMgc2F2ZSB0aGUgZGF0YSBhbnl3YXkgd2UgY2FuLCBub3QganVzdCBpZiBpdCB3YXMgbm90IGNyZWF0ZWQgaGVyZTsgYnVnIFtZT0NUTyAjNjg4N10KKyAgICAgICAgICAgICAgICAjIGZpbGwgaW4gZXZlcnl0aGluZyB3ZSBjYW4gZnJvbSB0aGUgcnVudGltZS1yZXZlcnNlIHBhY2thZ2UgZGF0YQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZWRpY3RbcF1bJ29iamVjdCddLnJlY2lwZSA9IHJlY2lwZXNbcGtncG5tYXBbcF1bJ1BOJ11dCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS52ZXJzaW9uID0gcGtncG5tYXBbcF1bJ1BWJ10KKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZWRpY3RbcF1bJ29iamVjdCddLmluc3RhbGxlZF9uYW1lID0gcAorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10ucmV2aXNpb24gPSBwa2dwbm1hcFtwXVsnUFInXQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10ubGljZW5zZSA9IHBrZ3BubWFwW3BdWydMSUNFTlNFJ10KKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZWRpY3RbcF1bJ29iamVjdCddLnNlY3Rpb24gPSBwa2dwbm1hcFtwXVsnU0VDVElPTiddCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5zdW1tYXJ5ID0gcGtncG5tYXBbcF1bJ1NVTU1BUlknXQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10uZGVzY3JpcHRpb24gPSBwa2dwbm1hcFtwXVsnREVTQ1JJUFRJT04nXQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10uc2l6ZSA9IGludChwa2dwbm1hcFtwXVsnUEtHU0laRSddKQorCisgICAgICAgICAgICAgICAgIyBubyBmaWxlcyByZWNvcmRlZCBmb3IgdGhpcyBwYWNrYWdlLCBzbyBzYXZlIGZpbGVzIGluZm8KKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZWZpbGVfb2JqZWN0cyA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZvciB0YXJnZXRwYXRoIGluIHBrZ3BubWFwW3BdWydGSUxFU19JTkZPJ106CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRmaWxlc2l6ZSA9IHBrZ3BubWFwW3BdWydGSUxFU19JTkZPJ11bdGFyZ2V0cGF0aF0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VmaWxlX29iamVjdHMuYXBwZW5kKFBhY2thZ2VfRmlsZSggcGFja2FnZSA9IHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gdGFyZ2V0cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gdGFyZ2V0ZmlsZXNpemUpKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocGFja2FnZWZpbGVfb2JqZWN0cyk6CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlX0ZpbGUub2JqZWN0cy5idWxrX2NyZWF0ZShwYWNrYWdlZmlsZV9vYmplY3RzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBlcnJvcm1zZyArPSAiICBzdHBpOiBLZXkgZXJyb3IsIHBhY2thZ2UgJXMga2V5ICVzIFxuIiAlICggcCwgZSApCisKKyAgICAgICAgICAgICMgc2F2ZSBkaXNrIGluc3RhbGxlZCBzaXplCisgICAgICAgICAgICBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10uaW5zdGFsbGVkX3NpemUgPSBwYWNrYWdlZGljdFtwXVsnc2l6ZSddCisgICAgICAgICAgICBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10uc2F2ZSgpCisKKyAgICAgICAgICAgIFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZS5vYmplY3RzLmNyZWF0ZSh0YXJnZXQgPSB0YXJnZXRfb2JqLCBwYWNrYWdlID0gcGFja2FnZWRpY3RbcF1bJ29iamVjdCddKQorCisgICAgICAgIHBhY2thZ2VkZXBzX29ianMgPSBbXQorICAgICAgICBmb3IgcCBpbiBwYWNrYWdlZGljdDoKKyAgICAgICAgICAgIGZvciAocHgsZGVwdHlwZSkgaW4gcGFja2FnZWRpY3RbcF1bJ2RlcGVuZHMnXToKKyAgICAgICAgICAgICAgICBpZiBkZXB0eXBlID09ICdkZXBlbmRzJzoKKyAgICAgICAgICAgICAgICAgICAgdGRlcHR5cGUgPSBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9UUkRFUEVORFMKKyAgICAgICAgICAgICAgICBlbGlmIGRlcHR5cGUgPT0gJ3JlY29tbWVuZHMnOgorICAgICAgICAgICAgICAgICAgICB0ZGVwdHlwZSA9IFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1RSRUNPTU1FTkRTCisKKyAgICAgICAgICAgICAgICBwYWNrYWdlZGVwc19vYmpzLmFwcGVuZChQYWNrYWdlX0RlcGVuZGVuY3koIHBhY2thZ2UgPSBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kc19vbiA9IHBhY2thZ2VkaWN0W3B4XVsnb2JqZWN0J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwX3R5cGUgPSB0ZGVwdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRfb2JqKSkKKworICAgICAgICBpZiBsZW4ocGFja2FnZWRlcHNfb2JqcykgPiAwOgorICAgICAgICAgICAgUGFja2FnZV9EZXBlbmRlbmN5Lm9iamVjdHMuYnVsa19jcmVhdGUocGFja2FnZWRlcHNfb2JqcykKKworICAgICAgICBpZiBsZW4oZXJyb3Jtc2cpID4gMDoKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCJidWlsZGluZm9oZWxwZXI6IHRhcmdldF9wYWNrYWdlX2luZm8gY291bGQgbm90IGlkZW50aWZ5IHJlY2lwZXM6IFxuJXMiLCBlcnJvcm1zZykKKworICAgIGRlZiBzYXZlX3RhcmdldF9pbWFnZV9maWxlX2luZm9ybWF0aW9uKHNlbGYsIHRhcmdldF9vYmosIGZpbGVfbmFtZSwgZmlsZV9zaXplKToKKyAgICAgICAgVGFyZ2V0X0ltYWdlX0ZpbGUub2JqZWN0cy5jcmVhdGUoIHRhcmdldCA9IHRhcmdldF9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lID0gZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfc2l6ZSA9IGZpbGVfc2l6ZSkKKworICAgIGRlZiBzYXZlX2FydGlmYWN0X2luZm9ybWF0aW9uKHNlbGYsIGJ1aWxkX29iaiwgZmlsZV9uYW1lLCBmaWxlX3NpemUpOgorICAgICAgICAjIHdlIHNraXAgdGhlIGltYWdlIGZpbGVzIGZyb20gb3RoZXIgYnVpbGRzCisgICAgICAgIGlmIFRhcmdldF9JbWFnZV9GaWxlLm9iamVjdHMuZmlsdGVyKGZpbGVfbmFtZSA9IGZpbGVfbmFtZSkuY291bnQoKSA+IDA6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIGRvIG5vdCB1cGRhdGUgYXJ0aWZhY3RzIGZvdW5kIGluIG90aGVyIGJ1aWxkcworICAgICAgICBpZiBCdWlsZEFydGlmYWN0Lm9iamVjdHMuZmlsdGVyKGZpbGVfbmFtZSA9IGZpbGVfbmFtZSkuY291bnQoKSA+IDA6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBCdWlsZEFydGlmYWN0Lm9iamVjdHMuY3JlYXRlKGJ1aWxkID0gYnVpbGRfb2JqLCBmaWxlX25hbWUgPSBmaWxlX25hbWUsIGZpbGVfc2l6ZSA9IGZpbGVfc2l6ZSkKKworICAgIGRlZiBjcmVhdGVfbG9nbWVzc2FnZShzZWxmLCBsb2dfaW5mb3JtYXRpb24pOgorICAgICAgICBhc3NlcnQgJ2J1aWxkJyBpbiBsb2dfaW5mb3JtYXRpb24KKyAgICAgICAgYXNzZXJ0ICdsZXZlbCcgaW4gbG9nX2luZm9ybWF0aW9uCisgICAgICAgIGFzc2VydCAnbWVzc2FnZScgaW4gbG9nX2luZm9ybWF0aW9uCisKKyAgICAgICAgbG9nX29iamVjdCA9IExvZ01lc3NhZ2Uub2JqZWN0cy5jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCA9IGxvZ19pbmZvcm1hdGlvblsnYnVpbGQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gbG9nX2luZm9ybWF0aW9uWydsZXZlbCddLAorICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGxvZ19pbmZvcm1hdGlvblsnbWVzc2FnZSddKQorCisgICAgICAgIGZvciB2IGluIHZhcnMobG9nX29iamVjdCk6CisgICAgICAgICAgICBpZiB2IGluIGxvZ19pbmZvcm1hdGlvbi5rZXlzKCk6CisgICAgICAgICAgICAgICAgdmFycyhsb2dfb2JqZWN0KVt2XSA9IGxvZ19pbmZvcm1hdGlvblt2XQorCisgICAgICAgIHJldHVybiBsb2dfb2JqZWN0LnNhdmUoKQorCisKKyAgICBkZWYgc2F2ZV9idWlsZF9wYWNrYWdlX2luZm9ybWF0aW9uKHNlbGYsIGJ1aWxkX29iaiwgcGFja2FnZV9pbmZvLCByZWNpcGVzKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGRfb2JqLCBCdWlsZCkKKworICAgICAgICAjIGNyZWF0ZSBhbmQgc2F2ZSB0aGUgb2JqZWN0CisgICAgICAgIHBuYW1lID0gcGFja2FnZV9pbmZvWydQS0cnXQorICAgICAgICBpZiAnT1BLR04nIGluIHBhY2thZ2VfaW5mby5rZXlzKCk6CisgICAgICAgICAgICBwbmFtZSA9IHBhY2thZ2VfaW5mb1snT1BLR04nXQorCisgICAgICAgIGJwX29iamVjdCwgXyA9IFBhY2thZ2Uub2JqZWN0cy5nZXRfb3JfY3JlYXRlKCBidWlsZCA9IGJ1aWxkX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwbmFtZSApCisKKyAgICAgICAgYnBfb2JqZWN0Lmluc3RhbGxlZF9uYW1lID0gcGFja2FnZV9pbmZvWydQS0cnXQorICAgICAgICBicF9vYmplY3QucmVjaXBlID0gcmVjaXBlc1twYWNrYWdlX2luZm9bJ1BOJ11dCisgICAgICAgIGJwX29iamVjdC52ZXJzaW9uID0gcGFja2FnZV9pbmZvWydQS0dWJ10KKyAgICAgICAgYnBfb2JqZWN0LnJldmlzaW9uID0gcGFja2FnZV9pbmZvWydQS0dSJ10KKyAgICAgICAgYnBfb2JqZWN0LnN1bW1hcnkgPSBwYWNrYWdlX2luZm9bJ1NVTU1BUlknXQorICAgICAgICBicF9vYmplY3QuZGVzY3JpcHRpb24gPSBwYWNrYWdlX2luZm9bJ0RFU0NSSVBUSU9OJ10KKyAgICAgICAgYnBfb2JqZWN0LnNpemUgPSBpbnQocGFja2FnZV9pbmZvWydQS0dTSVpFJ10pCisgICAgICAgIGJwX29iamVjdC5zZWN0aW9uID0gcGFja2FnZV9pbmZvWydTRUNUSU9OJ10KKyAgICAgICAgYnBfb2JqZWN0LmxpY2Vuc2UgPSBwYWNrYWdlX2luZm9bJ0xJQ0VOU0UnXQorICAgICAgICBicF9vYmplY3Quc2F2ZSgpCisKKyAgICAgICAgIyBzYXZlIGFueSBhdHRhY2hlZCBmaWxlIGluZm9ybWF0aW9uCisgICAgICAgIHBhY2thZ2VmaWxlX29iamVjdHMgPSBbXQorICAgICAgICBmb3IgcGF0aCBpbiBwYWNrYWdlX2luZm9bJ0ZJTEVTX0lORk8nXToKKyAgICAgICAgICAgIHBhY2thZ2VmaWxlX29iamVjdHMuYXBwZW5kKFBhY2thZ2VfRmlsZSggcGFja2FnZSA9IGJwX29iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gcGFja2FnZV9pbmZvWydGSUxFU19JTkZPJ11bcGF0aF0gKSkKKyAgICAgICAgaWYgbGVuKHBhY2thZ2VmaWxlX29iamVjdHMpOgorICAgICAgICAgICAgUGFja2FnZV9GaWxlLm9iamVjdHMuYnVsa19jcmVhdGUocGFja2FnZWZpbGVfb2JqZWN0cykKKworICAgICAgICBkZWYgX3BvX2J5bmFtZShwKToKKyAgICAgICAgICAgIHBrZywgY3JlYXRlZCA9IFBhY2thZ2Uub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGJ1aWxkID0gYnVpbGRfb2JqLCBuYW1lID0gcCkKKyAgICAgICAgICAgIGlmIGNyZWF0ZWQ6CisgICAgICAgICAgICAgICAgcGtnLnNpemUgPSAtMQorICAgICAgICAgICAgICAgIHBrZy5zYXZlKCkKKyAgICAgICAgICAgIHJldHVybiBwa2cKKworICAgICAgICBwYWNrYWdlZGVwc19vYmpzID0gW10KKyAgICAgICAgIyBzYXZlIHNvZnQgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbgorICAgICAgICBpZiAnUkRFUEVORFMnIGluIHBhY2thZ2VfaW5mbyBhbmQgcGFja2FnZV9pbmZvWydSREVQRU5EUyddOgorICAgICAgICAgICAgZm9yIHAgaW4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKHBhY2thZ2VfaW5mb1snUkRFUEVORFMnXSk6CisgICAgICAgICAgICAgICAgcGFja2FnZWRlcHNfb2Jqcy5hcHBlbmQoUGFja2FnZV9EZXBlbmRlbmN5KCAgcGFja2FnZSA9IGJwX29iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kc19vbiA9IF9wb19ieW5hbWUocCksIGRlcF90eXBlID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUkRFUEVORFMpKQorICAgICAgICBpZiAnUlBST1ZJREVTJyBpbiBwYWNrYWdlX2luZm8gYW5kIHBhY2thZ2VfaW5mb1snUlBST1ZJREVTJ106CisgICAgICAgICAgICBmb3IgcCBpbiBiYi51dGlscy5leHBsb2RlX2RlcHMocGFja2FnZV9pbmZvWydSUFJPVklERVMnXSk6CisgICAgICAgICAgICAgICAgcGFja2FnZWRlcHNfb2Jqcy5hcHBlbmQoUGFja2FnZV9EZXBlbmRlbmN5KCAgcGFja2FnZSA9IGJwX29iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kc19vbiA9IF9wb19ieW5hbWUocCksIGRlcF90eXBlID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUlBST1ZJREVTKSkKKyAgICAgICAgaWYgJ1JSRUNPTU1FTkRTJyBpbiBwYWNrYWdlX2luZm8gYW5kIHBhY2thZ2VfaW5mb1snUlJFQ09NTUVORFMnXToKKyAgICAgICAgICAgIGZvciBwIGluIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhwYWNrYWdlX2luZm9bJ1JSRUNPTU1FTkRTJ10pOgorICAgICAgICAgICAgICAgIHBhY2thZ2VkZXBzX29ianMuYXBwZW5kKFBhY2thZ2VfRGVwZW5kZW5jeSggIHBhY2thZ2UgPSBicF9vYmplY3QsCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZHNfb24gPSBfcG9fYnluYW1lKHApLCBkZXBfdHlwZSA9IFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1JSRUNPTU1FTkRTKSkKKyAgICAgICAgaWYgJ1JTVUdHRVNUUycgaW4gcGFja2FnZV9pbmZvIGFuZCBwYWNrYWdlX2luZm9bJ1JTVUdHRVNUUyddOgorICAgICAgICAgICAgZm9yIHAgaW4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKHBhY2thZ2VfaW5mb1snUlNVR0dFU1RTJ10pOgorICAgICAgICAgICAgICAgIHBhY2thZ2VkZXBzX29ianMuYXBwZW5kKFBhY2thZ2VfRGVwZW5kZW5jeSggIHBhY2thZ2UgPSBicF9vYmplY3QsCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZHNfb24gPSBfcG9fYnluYW1lKHApLCBkZXBfdHlwZSA9IFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1JTVUdHRVNUUykpCisgICAgICAgIGlmICdSUkVQTEFDRVMnIGluIHBhY2thZ2VfaW5mbyBhbmQgcGFja2FnZV9pbmZvWydSUkVQTEFDRVMnXToKKyAgICAgICAgICAgIGZvciBwIGluIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhwYWNrYWdlX2luZm9bJ1JSRVBMQUNFUyddKToKKyAgICAgICAgICAgICAgICBwYWNrYWdlZGVwc19vYmpzLmFwcGVuZChQYWNrYWdlX0RlcGVuZGVuY3koICBwYWNrYWdlID0gYnBfb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gX3BvX2J5bmFtZShwKSwgZGVwX3R5cGUgPSBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SUkVQTEFDRVMpKQorICAgICAgICBpZiAnUkNPTkZMSUNUUycgaW4gcGFja2FnZV9pbmZvIGFuZCBwYWNrYWdlX2luZm9bJ1JDT05GTElDVFMnXToKKyAgICAgICAgICAgIGZvciBwIGluIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhwYWNrYWdlX2luZm9bJ1JDT05GTElDVFMnXSk6CisgICAgICAgICAgICAgICAgcGFja2FnZWRlcHNfb2Jqcy5hcHBlbmQoUGFja2FnZV9EZXBlbmRlbmN5KCAgcGFja2FnZSA9IGJwX29iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kc19vbiA9IF9wb19ieW5hbWUocCksIGRlcF90eXBlID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUkNPTkZMSUNUUykpCisKKyAgICAgICAgaWYgbGVuKHBhY2thZ2VkZXBzX29ianMpID4gMDoKKyAgICAgICAgICAgIFBhY2thZ2VfRGVwZW5kZW5jeS5vYmplY3RzLmJ1bGtfY3JlYXRlKHBhY2thZ2VkZXBzX29ianMpCisKKyAgICAgICAgcmV0dXJuIGJwX29iamVjdAorCisgICAgZGVmIHNhdmVfYnVpbGRfdmFyaWFibGVzKHNlbGYsIGJ1aWxkX29iaiwgdmFyZHVtcCk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJ1aWxkX29iaiwgQnVpbGQpCisKKyAgICAgICAgaGVscHRleHRfb2JqZWN0cyA9IFtdCisgICAgICAgIGZvciBrIGluIHZhcmR1bXA6CisgICAgICAgICAgICBkZXNjID0gdmFyZHVtcFtrXVsnZG9jJ10KKyAgICAgICAgICAgIGlmIGRlc2MgaXMgTm9uZToKKyAgICAgICAgICAgICAgICB2YXJfd29yZHMgPSBbd29yZCBmb3Igd29yZCBpbiBrLnNwbGl0KCdfJyldCisgICAgICAgICAgICAgICAgcm9vdF92YXIgPSAiXyIuam9pbihbd29yZCBmb3Igd29yZCBpbiB2YXJfd29yZHMgaWYgd29yZC5pc3VwcGVyKCldKQorICAgICAgICAgICAgICAgIGlmIHJvb3RfdmFyIGFuZCByb290X3ZhciAhPSBrIGFuZCByb290X3ZhciBpbiB2YXJkdW1wOgorICAgICAgICAgICAgICAgICAgICBkZXNjID0gdmFyZHVtcFtyb290X3Zhcl1bJ2RvYyddCisgICAgICAgICAgICBpZiBkZXNjIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZGVzYyA9ICcnCisgICAgICAgICAgICBpZiBsZW4oZGVzYyk6CisgICAgICAgICAgICAgICAgaGVscHRleHRfb2JqZWN0cy5hcHBlbmQoSGVscFRleHQoYnVpbGQ9YnVpbGRfb2JqLAorICAgICAgICAgICAgICAgICAgICBhcmVhPUhlbHBUZXh0LlZBUklBQkxFLAorICAgICAgICAgICAgICAgICAgICBrZXk9aywKKyAgICAgICAgICAgICAgICAgICAgdGV4dD1kZXNjKSkKKyAgICAgICAgICAgIGlmIG5vdCBib29sKHZhcmR1bXBba11bJ2Z1bmMnXSk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YXJkdW1wW2tdWyd2J10KKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICcnCisgICAgICAgICAgICAgICAgdmFyaWFibGVfb2JqID0gVmFyaWFibGUub2JqZWN0cy5jcmVhdGUoIGJ1aWxkID0gYnVpbGRfb2JqLAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZV9uYW1lID0gaywKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVfdmFsdWUgPSB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNjKQorCisgICAgICAgICAgICAgICAgdmFyaGlzdF9vYmplY3RzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgdmggaW4gdmFyZHVtcFtrXVsnaGlzdG9yeSddOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgJ2RvY3VtZW50YXRpb24uY29uZicgaW4gdmhbJ2ZpbGUnXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmhpc3Rfb2JqZWN0cy5hcHBlbmQoVmFyaWFibGVIaXN0b3J5KCB2YXJpYWJsZSA9IHZhcmlhYmxlX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lID0gdmhbJ2ZpbGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9udW1iZXIgPSB2aFsnbGluZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSB2aFsnb3AnXSkpCisgICAgICAgICAgICAgICAgaWYgbGVuKHZhcmhpc3Rfb2JqZWN0cyk6CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlSGlzdG9yeS5vYmplY3RzLmJ1bGtfY3JlYXRlKHZhcmhpc3Rfb2JqZWN0cykKKworICAgICAgICBIZWxwVGV4dC5vYmplY3RzLmJ1bGtfY3JlYXRlKGhlbHB0ZXh0X29iamVjdHMpCisKKworY2xhc3MgTW9ja0V2ZW50KG9iamVjdCk6CisgICAgIiIiIFRoaXMgb2JqZWN0IGlzIHVzZWQgdG8gY3JlYXRlIGV2ZW50LCBmb3Igd2hpY2ggbm9ybWFsIGV2ZW50LXByb2Nlc3NpbmcgbWV0aG9kcyBjYW4KKyAgICAgICAgYmUgdXNlZCwgb3V0IG9mIGRhdGEgdGhhdCBpcyBub3QgY29taW5nIHZpYSBhbiBhY3R1YWwgZXZlbnQKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYubXNnID0gTm9uZQorICAgICAgICBzZWxmLmxldmVsbm8gPSBOb25lCisgICAgICAgIHNlbGYudGFza25hbWUgPSBOb25lCisgICAgICAgIHNlbGYudGFza2hhc2ggPSBOb25lCisgICAgICAgIHNlbGYucGF0aG5hbWUgPSBOb25lCisgICAgICAgIHNlbGYubGluZW5vID0gTm9uZQorCisKK2NsYXNzIEJ1aWxkSW5mb0hlbHBlcihvYmplY3QpOgorICAgICIiIiBUaGlzIGNsYXNzIGdhdGhlcnMgdGhlIGJ1aWxkIGluZm9ybWF0aW9uIGZyb20gdGhlIHNlcnZlciBhbmQgc2VuZHMgaXQKKyAgICAgICAgdG93YXJkcyB0aGUgT1JNIHdyYXBwZXIgZm9yIHN0b3JpbmcgaW4gdGhlIGRhdGFiYXNlCisgICAgICAgIEl0IGlzIGluc3RhbnRpYXRlZCBvbmNlIHBlciBidWlsZAorICAgICAgICBLZWVwcyBpbiBtZW1vcnkgYWxsIGRhdGEgdGhhdCBuZWVkcyBtYXRjaGluZyBiZWZvcmUgd3JpdGluZyBpdCB0byB0aGUgZGF0YWJhc2UKKyAgICAiIiIKKworICAgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKKyAgICAjIHRoZSBjb2RlIHdpbGwgbG9vayBpbnRvIHRoZSBwcm90ZWN0ZWQgdmFyaWFibGVzIG9mIHRoZSBldmVudDsgbm8gZWFzeSB3YXkgYXJvdW5kIHRoaXMKKyAgICAjIHB5bGludDogZGlzYWJsZT1iYWQtY29udGludWF0aW9uCisgICAgIyB3ZSBkbyBub3QgZm9sbG93IHRoZSBweXRob24gY29udmVudGlvbnMgZm9yIGNvbnRpbnVhdGlvbiBpbmRlbnRhdGlvbiBkdWUgdG8gbG9uZyBsaW5lcyBoZXJlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyLCBoYXNfYnVpbGRfaGlzdG9yeSA9IEZhbHNlKToKKyAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZSA9IHt9CisgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3Rhc2tkYXRhJ10gPSB7fQorICAgICAgICBzZWxmLnRhc2tfb3JkZXIgPSAwCisgICAgICAgIHNlbGYuYXV0b2NvbW1pdF9zdGVwID0gMQorICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlcgorICAgICAgICAjIHdlIHVzZSBtYW51YWwgdHJhbnNhY3Rpb25zIGlmIHRoZSBkYXRhYmFzZSBkb2Vzbid0IGF1dG9jb21taXQgb24gdXMKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb24uZmVhdHVyZXMuYXV0b2NvbW1pdHNfd2hlbl9hdXRvY29tbWl0X2lzX29mZjoKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KEZhbHNlKQorICAgICAgICBzZWxmLm9ybV93cmFwcGVyID0gT1JNV3JhcHBlcigpCisgICAgICAgIHNlbGYuaGFzX2J1aWxkX2hpc3RvcnkgPSBoYXNfYnVpbGRfaGlzdG9yeQorICAgICAgICBzZWxmLnRtcF9kaXIgPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiVE1QRElSIl0pWzBdCisgICAgICAgIHNlbGYuYnJiZSAgICA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJUT0FTVEVSX0JSQkUiXSlbMF0KKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlRPQVNURVJfUFJPSkVDVCJdKVswXQorICAgICAgICBsb2dnZXIuZGVidWcoMSwgImJ1aWxkaW5mb2hlbHBlcjogQnVpbGQgaW5mbyBoZWxwZXIgaW5pdGVkICVzIiAlIHZhcnMoc2VsZikpCisKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyBtZXRob2RzIHRvIGNvbnZlcnQgZXZlbnQvZXh0ZXJuYWwgaW5mbyBpbnRvIG9iamVjdHMgdGhhdCB0aGUgT1JNIGxheWVyIHVzZXMKKworCisgICAgZGVmIF9nZXRfYnVpbGRfaW5mb3JtYXRpb24oc2VsZik6CisgICAgICAgIGJ1aWxkX2luZm8gPSB7fQorICAgICAgICAjIEdlbmVyYXRlIGFuIGlkZW50aWZpZXIgZm9yIGVhY2ggbmV3IGJ1aWxkCisKKyAgICAgICAgYnVpbGRfaW5mb1snbWFjaGluZSddID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIk1BQ0hJTkUiXSlbMF0KKyAgICAgICAgYnVpbGRfaW5mb1snZGlzdHJvJ10gPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiRElTVFJPIl0pWzBdCisgICAgICAgIGJ1aWxkX2luZm9bJ2Rpc3Ryb192ZXJzaW9uJ10gPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiRElTVFJPX1ZFUlNJT04iXSlbMF0KKyAgICAgICAgYnVpbGRfaW5mb1snc3RhcnRlZF9vbiddID0gdGltZXpvbmUubm93KCkKKyAgICAgICAgYnVpbGRfaW5mb1snY29tcGxldGVkX29uJ10gPSB0aW1lem9uZS5ub3coKQorICAgICAgICBidWlsZF9pbmZvWydjb29rZXJfbG9nX3BhdGgnXSA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQl9DT05TT0xFTE9HIl0pWzBdCisgICAgICAgIGJ1aWxkX2luZm9bJ2J1aWxkX25hbWUnXSA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCVUlMRE5BTUUiXSlbMF0KKyAgICAgICAgYnVpbGRfaW5mb1snYml0YmFrZV92ZXJzaW9uJ10gPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJfVkVSU0lPTiJdKVswXQorCisgICAgICAgIHJldHVybiBidWlsZF9pbmZvCisKKyAgICBkZWYgX2dldF90YXNrX2luZm9ybWF0aW9uKHNlbGYsIGV2ZW50LCByZWNpcGUpOgorICAgICAgICBhc3NlcnQgJ3Rhc2tuYW1lJyBpbiB2YXJzKGV2ZW50KQorCisgICAgICAgIHRhc2tfaW5mb3JtYXRpb24gPSB7fQorICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydidWlsZCddID0gc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXQorICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydvdXRjb21lJ10gPSBUYXNrLk9VVENPTUVfTkEKKyAgICAgICAgdGFza19pbmZvcm1hdGlvblsncmVjaXBlJ10gPSByZWNpcGUKKyAgICAgICAgdGFza19pbmZvcm1hdGlvblsndGFza19uYW1lJ10gPSBldmVudC50YXNrbmFtZQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHNvbWUgdGFza3MgZG9uJ3QgY29tZSB3aXRoIGEgaGFzaC4gYW5kIHRoYXQncyBvaworICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnc3N0YXRlX2NoZWNrc3VtJ10gPSBldmVudC50YXNraGFzaAorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiB0YXNrX2luZm9ybWF0aW9uCisKKyAgICBkZWYgX2dldF9sYXllcl92ZXJzaW9uX2Zvcl9wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICBhc3NlcnQgcGF0aC5zdGFydHN3aXRoKCIvIikKKyAgICAgICAgYXNzZXJ0ICdidWlsZCcgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZQorCisgICAgICAgIGlmIHNlbGYuYnJiZSBpcyBOb25lOgorICAgICAgICAgICAgZGVmIF9zbGtleV9pbnRlcmFjdGl2ZShsYXllcl92ZXJzaW9uKToKKyAgICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShsYXllcl92ZXJzaW9uLCBMYXllcl9WZXJzaW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBsZW4obGF5ZXJfdmVyc2lvbi5sb2NhbF9wYXRoKQorCisgICAgICAgICAgICAjIEhldXJpc3RpY3M6IHdlIGFsd2F5cyBtYXRjaCByZWNpcGUgdG8gdGhlIGRlZXBlc3QgbGF5ZXIgcGF0aCBpbiB0aGUgZGlzY292ZXJlZCBsYXllcnMKKyAgICAgICAgICAgIGZvciBsdm8gaW4gc29ydGVkKHNlbGYub3JtX3dyYXBwZXIubGF5ZXJfdmVyc2lvbl9vYmplY3RzLCByZXZlcnNlPVRydWUsIGtleT1fc2xrZXlfaW50ZXJhY3RpdmUpOgorICAgICAgICAgICAgICAgICMgd2UgY2FuIG1hdGNoIHRvIHRoZSByZWNpcGUgZmlsZSBwYXRoCisgICAgICAgICAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKGx2by5sb2NhbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGx2bworCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBicl9pZCwgYmVfaWQgPSBzZWxmLmJyYmUuc3BsaXQoIjoiKQorICAgICAgICAgICAgZnJvbSBibGRjb250cm9sLmJiY29udHJvbGxlciBpbXBvcnQgZ2V0QnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIKKyAgICAgICAgICAgIGJjID0gZ2V0QnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIocGsgPSBiZV9pZCkKKworICAgICAgICAgICAgZGVmIF9zbGtleV9tYW5hZ2VkKGxheWVyX3ZlcnNpb24pOgorICAgICAgICAgICAgICAgIHJldHVybiBsZW4oYmMuZ2V0R2l0Q2xvbmVEaXJlY3RvcnkobGF5ZXJfdmVyc2lvbi5naXR1cmwsIGxheWVyX3ZlcnNpb24uY29tbWl0KSArIGxheWVyX3ZlcnNpb24uZGlycGF0aCkKKworICAgICAgICAgICAgIyBIZXVyaXN0aWNzOiB3ZSBtYXRjaCB0aGUgcGF0aCB0byB3aGVyZSB0aGUgbGF5ZXJzIGhhdmUgYmVlbiBjaGVja2VkIG91dAorICAgICAgICAgICAgZm9yIGJybCBpbiBzb3J0ZWQoQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZ2V0KHBrID0gYnJfaWQpLmJybGF5ZXJfc2V0LmFsbCgpLCByZXZlcnNlID0gVHJ1ZSwga2V5ID0gX3Nsa2V5X21hbmFnZWQpOgorICAgICAgICAgICAgICAgIGxvY2FsZGlybmFtZSA9IG9zLnBhdGguam9pbihiYy5nZXRHaXRDbG9uZURpcmVjdG9yeShicmwuZ2l0dXJsLCBicmwuY29tbWl0KSwgYnJsLmRpcnBhdGgpCisgICAgICAgICAgICAgICAgIyB3ZSBnZXQgYSByZWxhdGl2ZSBwYXRoLCB1bmxlc3MgcnVubmluZyBpbiBIRUFEIG1vZGUgd2hlcmUgdGhlIHBhdGggaXMgYWJzb2x1dGUKKyAgICAgICAgICAgICAgICBpZiBub3QgbG9jYWxkaXJuYW1lLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxkaXJuYW1lID0gb3MucGF0aC5qb2luKGJjLmJlLnNvdXJjZWRpciwgbG9jYWxkaXJuYW1lKQorICAgICAgICAgICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aChsb2NhbGRpcm5hbWUpOgorICAgICAgICAgICAgICAgICAgICAjbG9nZ2VyLndhcm4oIi0tIG1hbmFnZWQ6IG1hdGNoZWQgcGF0aCAlcyB3aXRoIGxheWVyICVzICIgJSAocGF0aCwgbG9jYWxkaXJuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSBtYXRjaGVkIHRoZSBCUkxheWVyLCBidXQgd2UgbmVlZCB0aGUgbGF5ZXJfdmVyc2lvbiB0aGF0IGdlbmVyYXRlZCB0aGlzIGJyCisgICAgICAgICAgICAgICAgICAgIGZvciBsdm8gaW4gc2VsZi5vcm1fd3JhcHBlci5sYXllcl92ZXJzaW9uX29iamVjdHM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBicmwubmFtZSA9PSBsdm8ubGF5ZXIubmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbHZvCisKKyAgICAgICAgI2lmIHdlIGdldCBoZXJlLCB3ZSBkaWRuJ3QgcmVhZCBsYXllcnMgY29ycmVjdGx5OyBkdW1wIHdoYXRldmVyIGluZm9ybWF0aW9uIHdlIGhhdmUgb24gdGhlIGVycm9yIGxvZworICAgICAgICBsb2dnZXIud2FybigiQ291bGQgbm90IG1hdGNoIGxheWVyIHZlcnNpb24gZm9yIHJlY2lwZSBwYXRoICVzIDogJXMiLCBwYXRoLCBzZWxmLm9ybV93cmFwcGVyLmxheWVyX3ZlcnNpb25fb2JqZWN0cykKKworICAgICAgICAjbW9ja3VwIHRoZSBuZXcgbGF5ZXIKKyAgICAgICAgdW5rbm93bl9sYXllciwgXyA9IExheWVyLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShuYW1lPSJfX0ZJWE1FX191bmlkZW50aWZpZWRfbGF5ZXIiLCBsYXllcl9pbmRleF91cmw9IiIpCisgICAgICAgIHVua25vd25fbGF5ZXJfdmVyc2lvbl9vYmosIF8gPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllciA9IHVua25vd25fbGF5ZXIsIGJ1aWxkID0gc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSkKKworICAgICAgICAjIGFwcGVuZCBpdCBzbyB3ZSBkb24ndCBydW4gaW50byB0aGlzIGVycm9yIGFnYWluIGFuZCBhZ2FpbgorICAgICAgICBzZWxmLm9ybV93cmFwcGVyLmxheWVyX3ZlcnNpb25fb2JqZWN0cy5hcHBlbmQodW5rbm93bl9sYXllcl92ZXJzaW9uX29iaikKKworICAgICAgICByZXR1cm4gdW5rbm93bl9sYXllcl92ZXJzaW9uX29iagorCisgICAgZGVmIF9nZXRfcmVjaXBlX2luZm9ybWF0aW9uX2Zyb21fdGFza2ZpbGUoc2VsZiwgdGFza2ZpbGUpOgorICAgICAgICBsb2NhbGZpbGVwYXRoID0gdGFza2ZpbGUuc3BsaXQoIjoiKVstMV0KKyAgICAgICAgZmlsZXBhdGhfZmxhZ3MgPSAiOiIuam9pbihzb3J0ZWQodGFza2ZpbGUuc3BsaXQoIjoiKVs6LTFdKSkKKyAgICAgICAgbGF5ZXJfdmVyc2lvbl9vYmogPSBzZWxmLl9nZXRfbGF5ZXJfdmVyc2lvbl9mb3JfcGF0aChsb2NhbGZpbGVwYXRoKQorCisKKworICAgICAgICByZWNpcGVfaW5mbyA9IHt9CisgICAgICAgIHJlY2lwZV9pbmZvWydsYXllcl92ZXJzaW9uJ10gPSBsYXllcl92ZXJzaW9uX29iagorICAgICAgICByZWNpcGVfaW5mb1snZmlsZV9wYXRoJ10gPSBsb2NhbGZpbGVwYXRoCisgICAgICAgIHJlY2lwZV9pbmZvWydwYXRoZmxhZ3MnXSA9IGZpbGVwYXRoX2ZsYWdzCisKKyAgICAgICAgaWYgcmVjaXBlX2luZm9bJ2ZpbGVfcGF0aCddLnN0YXJ0c3dpdGgocmVjaXBlX2luZm9bJ2xheWVyX3ZlcnNpb24nXS5sb2NhbF9wYXRoKToKKyAgICAgICAgICAgIHJlY2lwZV9pbmZvWydmaWxlX3BhdGgnXSA9IHJlY2lwZV9pbmZvWydmaWxlX3BhdGgnXVtsZW4ocmVjaXBlX2luZm9bJ2xheWVyX3ZlcnNpb24nXS5sb2NhbF9wYXRoKTpdLmxzdHJpcCgiLyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlJlY2lwZSBmaWxlIHBhdGggJXMgaXMgbm90IHVuZGVyIGxheWVyIHZlcnNpb24gYXQgJXMiICUgKHJlY2lwZV9pbmZvWydmaWxlX3BhdGgnXSwgcmVjaXBlX2luZm9bJ2xheWVyX3ZlcnNpb24nXS5sb2NhbF9wYXRoKSkKKworICAgICAgICByZXR1cm4gcmVjaXBlX2luZm8KKworICAgIGRlZiBfZ2V0X3BhdGhfaW5mb3JtYXRpb24oc2VsZiwgdGFza19vYmplY3QpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh0YXNrX29iamVjdCwgVGFzaykKKyAgICAgICAgYnVpbGRfc3RhdHNfZm9ybWF0ID0gInt0bXBkaXJ9L2J1aWxkc3RhdHMve3RhcmdldH0te21hY2hpbmV9L3tidWlsZG5hbWV9L3twYWNrYWdlfS8iCisgICAgICAgIGJ1aWxkX3N0YXRzX3BhdGggPSBbXQorCisgICAgICAgIGZvciB0IGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3RhcmdldHMnXToKKyAgICAgICAgICAgIHRhcmdldCA9IHQudGFyZ2V0CisgICAgICAgICAgICBtYWNoaW5lID0gc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXS5tYWNoaW5lCisgICAgICAgICAgICBidWlsZG5hbWUgPSBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLmJ1aWxkX25hbWUKKyAgICAgICAgICAgIHBlLCBwdiA9IHRhc2tfb2JqZWN0LnJlY2lwZS52ZXJzaW9uLnNwbGl0KCI6IiwxKQorICAgICAgICAgICAgaWYgbGVuKHBlKSA+IDA6CisgICAgICAgICAgICAgICAgcGFja2FnZSA9IHRhc2tfb2JqZWN0LnJlY2lwZS5uYW1lICsgIi0iICsgcGUgKyAiXyIgKyBwdgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYWNrYWdlID0gdGFza19vYmplY3QucmVjaXBlLm5hbWUgKyAiLSIgKyBwdgorCisgICAgICAgICAgICBidWlsZF9zdGF0c19wYXRoLmFwcGVuZChidWlsZF9zdGF0c19mb3JtYXQuZm9ybWF0KHRtcGRpcj1zZWxmLnRtcF9kaXIsIHRhcmdldD10YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmU9bWFjaGluZSwgYnVpbGRuYW1lPWJ1aWxkbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZT1wYWNrYWdlKSkKKworICAgICAgICByZXR1cm4gYnVpbGRfc3RhdHNfcGF0aAorCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIGV4dGVybmFsIGF2YWlsYWJsZSBtZXRob2RzIHRvIHN0b3JlIGluZm9ybWF0aW9uCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudCk6CisgICAgICAgIGV2ZGF0YSA9IE5vbmUKKyAgICAgICAgaWYgJ19sb2NhbGRhdGEnIGluIHZhcnMoZXZlbnQpOgorICAgICAgICAgICAgZXZkYXRhID0gZXZlbnQuX2xvY2FsZGF0YQorICAgICAgICBlbGlmICdkYXRhJyBpbiB2YXJzKGV2ZW50KToKKyAgICAgICAgICAgIGV2ZGF0YSA9IGV2ZW50LmRhdGEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXZlbnQgd2l0aCBuZWl0aGVyIF9sb2NhbGRhdGEgb3IgZGF0YSBwcm9wZXJ0aWVzIikKKyAgICAgICAgcmV0dXJuIGV2ZGF0YQorCisgICAgZGVmIHN0b3JlX2xheWVyX2luZm8oc2VsZiwgZXZlbnQpOgorICAgICAgICBsYXllcmluZm9zID0gQnVpbGRJbmZvSGVscGVyLl9nZXRfZGF0YV9mcm9tX2V2ZW50KGV2ZW50KQorICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlWydsdnMnXSA9IHt9CisgICAgICAgIGZvciBsYXllciBpbiBsYXllcmluZm9zOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2x2cyddW3NlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV9sYXllcl9vYmplY3QobGF5ZXJpbmZvc1tsYXllcl0sIHNlbGYuYnJiZSldID0gbGF5ZXJpbmZvc1tsYXllcl1bJ3ZlcnNpb24nXQorICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2x2cyddW3NlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV9sYXllcl9vYmplY3QobGF5ZXJpbmZvc1tsYXllcl0sIHNlbGYuYnJiZSldWydsb2NhbF9wYXRoJ10gPSBsYXllcmluZm9zW2xheWVyXVsnbG9jYWxfcGF0aCddCisgICAgICAgICAgICBleGNlcHQgTm90RXhpc3RpbmcgYXMgbmVlOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJidWlsZGluZm9oZWxwZXI6IGNhbm5vdCBpZGVudGlmeSBsYXllciBleGNlcHRpb246JXMgIiwgbmVlKQorCisKKyAgICBkZWYgc3RvcmVfc3RhcnRlZF9idWlsZChzZWxmLCBldmVudCk6CisgICAgICAgIGFzc2VydCAnX3BrZ3MnIGluIHZhcnMoZXZlbnQpCisgICAgICAgIGJ1aWxkX2luZm9ybWF0aW9uID0gc2VsZi5fZ2V0X2J1aWxkX2luZm9ybWF0aW9uKCkKKworICAgICAgICBidWlsZF9vYmogPSBzZWxmLm9ybV93cmFwcGVyLmNyZWF0ZV9idWlsZF9vYmplY3QoYnVpbGRfaW5mb3JtYXRpb24sIHNlbGYuYnJiZSwgc2VsZi5wcm9qZWN0KQorCisgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10gPSBidWlsZF9vYmoKKworICAgICAgICAjIHNhdmUgbGF5ZXIgdmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgdGhpcyBidWlsZAorICAgICAgICBpZiBub3QgJ2x2cycgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiTGF5ZXIgdmVyc2lvbiBpbmZvcm1hdGlvbiBub3QgZm91bmQ7IENoZWNrIGlmIHRoZSBiaXRiYWtlIHNlcnZlciB3YXMgY29uZmlndXJlZCB0byBpbmhlcml0IHRvYXN0ZXIuYmJjbGFzcy4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGxheWVyX29iaiBpbiBzZWxmLmludGVybmFsX3N0YXRlWydsdnMnXToKKyAgICAgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLmdldF91cGRhdGVfbGF5ZXJfdmVyc2lvbl9vYmplY3QoYnVpbGRfb2JqLCBsYXllcl9vYmosIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2x2cyddW2xheWVyX29ial0pCisKKyAgICAgICAgICAgIGRlbCBzZWxmLmludGVybmFsX3N0YXRlWydsdnMnXQorCisgICAgICAgICMgY3JlYXRlIHRhcmdldCBpbmZvcm1hdGlvbgorICAgICAgICB0YXJnZXRfaW5mb3JtYXRpb24gPSB7fQorICAgICAgICB0YXJnZXRfaW5mb3JtYXRpb25bJ3RhcmdldHMnXSA9IGV2ZW50Ll9wa2dzCisgICAgICAgIHRhcmdldF9pbmZvcm1hdGlvblsnYnVpbGQnXSA9IGJ1aWxkX29iagorCisgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3RhcmdldHMnXSA9IHNlbGYub3JtX3dyYXBwZXIuY3JlYXRlX3RhcmdldF9vYmplY3RzKHRhcmdldF9pbmZvcm1hdGlvbikKKworICAgICAgICAjIFNhdmUgYnVpbGQgY29uZmlndXJhdGlvbgorICAgICAgICBkYXRhID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldEFsbEtleXNXaXRoRmxhZ3MiLCBbImRvYyIsICJmdW5jIl1dKVswXQorCisgICAgICAgICMgY29udmVydCB0aGUgcGF0aHMgZnJvbSBhYnNvbHV0ZSB0byByZWxhdGl2ZSB0byBlaXRoZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeSBvciBsYXllciBjaGVja291dHMKKyAgICAgICAgcGF0aF9wcmVmaXhlcyA9IFtdCisKKyAgICAgICAgaWYgc2VsZi5icmJlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgXywgYmVfaWQgPSBzZWxmLmJyYmUuc3BsaXQoIjoiKQorICAgICAgICAgICAgYmUgPSBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMuZ2V0KHBrID0gYmVfaWQpCisgICAgICAgICAgICBwYXRoX3ByZWZpeGVzLmFwcGVuZChiZS5idWlsZGRpcikKKworICAgICAgICBmb3IgbGF5ZXIgaW4gc29ydGVkKHNlbGYub3JtX3dyYXBwZXIubGF5ZXJfdmVyc2lvbl9vYmplY3RzLCBrZXkgPSBsYW1iZGEgeDpsZW4oeC5sb2NhbF9wYXRoKSwgcmV2ZXJzZT1UcnVlKToKKyAgICAgICAgICAgIHBhdGhfcHJlZml4ZXMuYXBwZW5kKGxheWVyLmxvY2FsX3BhdGgpCisKKyAgICAgICAgIyB3ZSBzdHJpcCB0aGUgcHJlZml4ZXMKKyAgICAgICAgZm9yIGsgaW4gZGF0YToKKyAgICAgICAgICAgIGlmIG5vdCBib29sKGRhdGFba11bJ2Z1bmMnXSk6CisgICAgICAgICAgICAgICAgZm9yIHZoIGluIGRhdGFba11bJ2hpc3RvcnknXToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90ICdkb2N1bWVudGF0aW9uLmNvbmYnIGluIHZoWydmaWxlJ106CisgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZmlsZV9uYW1lID0gdmhbJ2ZpbGUnXQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBwIGluIHBhdGhfcHJlZml4ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYWJzX2ZpbGVfbmFtZS5zdGFydHN3aXRoKHBwICsgIi8iKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmhbJ2ZpbGUnXT1hYnNfZmlsZV9uYW1lW2xlbihwcCArICIvIik6XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgc2F2ZSB0aGUgdmFyaWFibGVzCisgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuc2F2ZV9idWlsZF92YXJpYWJsZXMoYnVpbGRfb2JqLCBkYXRhKQorCisgICAgICAgIHJldHVybiBzZWxmLmJyYmUKKworCisgICAgZGVmIHVwZGF0ZV90YXJnZXRfaW1hZ2VfZmlsZShzZWxmLCBldmVudCk6CisgICAgICAgIGV2ZGF0YSA9IEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudCkKKworICAgICAgICBmb3IgdCBpbiBzZWxmLmludGVybmFsX3N0YXRlWyd0YXJnZXRzJ106CisgICAgICAgICAgICBpZiB0LmlzX2ltYWdlID09IFRydWU6CisgICAgICAgICAgICAgICAgb3V0cHV0X2ZpbGVzID0gbGlzdChldmRhdGEudmlld2tleXMoKSkKKyAgICAgICAgICAgICAgICBmb3Igb3V0cHV0IGluIG91dHB1dF9maWxlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgdC50YXJnZXQgaW4gb3V0cHV0IGFuZCAncm9vdGZzJyBpbiBvdXRwdXQgYW5kIG5vdCBvdXRwdXQuZW5kc3dpdGgoIi5tYW5pZmVzdCIpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5zYXZlX3RhcmdldF9pbWFnZV9maWxlX2luZm9ybWF0aW9uKHQsIG91dHB1dCwgZXZkYXRhW291dHB1dF0pCisKKyAgICBkZWYgdXBkYXRlX2FydGlmYWN0X2ltYWdlX2ZpbGUoc2VsZiwgZXZlbnQpOgorICAgICAgICBldmRhdGEgPSBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpCisgICAgICAgIGZvciBhcnRpZmFjdF9wYXRoIGluIGV2ZGF0YS5rZXlzKCk6CisgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnNhdmVfYXJ0aWZhY3RfaW5mb3JtYXRpb24oc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSwgYXJ0aWZhY3RfcGF0aCwgZXZkYXRhW2FydGlmYWN0X3BhdGhdKQorCisgICAgZGVmIHVwZGF0ZV9idWlsZF9pbmZvcm1hdGlvbihzZWxmLCBldmVudCwgZXJyb3JzLCB3YXJuaW5ncywgdGFza2ZhaWx1cmVzKToKKyAgICAgICAgaWYgJ2J1aWxkJyBpbiBzZWxmLmludGVybmFsX3N0YXRlOgorICAgICAgICAgICAgc2VsZi5vcm1fd3JhcHBlci51cGRhdGVfYnVpbGRfb2JqZWN0KHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10sIGVycm9ycywgd2FybmluZ3MsIHRhc2tmYWlsdXJlcykKKworCisgICAgZGVmIHN0b3JlX2xpY2Vuc2VfbWFuaWZlc3RfcGF0aChzZWxmLCBldmVudCk6CisgICAgICAgIGRlcGxveV9kaXIgPSBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpWydkZXBsb3lfZGlyJ10KKyAgICAgICAgaW1hZ2VfbmFtZSA9IEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudClbJ2ltYWdlX25hbWUnXQorICAgICAgICBwYXRoID0gZGVwbG95X2RpciArICIvbGljZW5zZXMvIiArIGltYWdlX25hbWUgKyAiL2xpY2Vuc2UubWFuaWZlc3QiCisgICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFyZ2V0cyddOgorICAgICAgICAgICAgaWYgdGFyZ2V0LnRhcmdldCBpbiBpbWFnZV9uYW1lOgorICAgICAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIudXBkYXRlX3RhcmdldF9zZXRfbGljZW5zZV9tYW5pZmVzdCh0YXJnZXQsIHBhdGgpCisKKworICAgIGRlZiBzdG9yZV9zdGFydGVkX3Rhc2soc2VsZiwgZXZlbnQpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShldmVudCwgKGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrU3RhcnRlZCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrU3RhcnRlZCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrU2tpcHBlZCkpCisgICAgICAgIGFzc2VydCAndGFza2ZpbGUnIGluIHZhcnMoZXZlbnQpCisgICAgICAgIGxvY2FsZmlsZXBhdGggPSBldmVudC50YXNrZmlsZS5zcGxpdCgiOiIpWy0xXQorICAgICAgICBhc3NlcnQgbG9jYWxmaWxlcGF0aC5zdGFydHN3aXRoKCIvIikKKworICAgICAgICBpZGVudGlmaWVyID0gZXZlbnQudGFza2ZpbGUgKyAiOiIgKyBldmVudC50YXNrbmFtZQorCisgICAgICAgIHJlY2lwZV9pbmZvcm1hdGlvbiA9IHNlbGYuX2dldF9yZWNpcGVfaW5mb3JtYXRpb25fZnJvbV90YXNrZmlsZShldmVudC50YXNrZmlsZSkKKyAgICAgICAgcmVjaXBlID0gc2VsZi5vcm1fd3JhcHBlci5nZXRfdXBkYXRlX3JlY2lwZV9vYmplY3QocmVjaXBlX2luZm9ybWF0aW9uLCBUcnVlKQorCisgICAgICAgIHRhc2tfaW5mb3JtYXRpb24gPSBzZWxmLl9nZXRfdGFza19pbmZvcm1hdGlvbihldmVudCwgcmVjaXBlKQorICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydvdXRjb21lJ10gPSBUYXNrLk9VVENPTUVfTkEKKworICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTa2lwcGVkKToKKyAgICAgICAgICAgIGFzc2VydCAncmVhc29uJyBpbiB2YXJzKGV2ZW50KQorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsndGFza19leGVjdXRlZCddID0gRmFsc2UKKyAgICAgICAgICAgIGlmIGV2ZW50LnJlYXNvbiA9PSAiY292ZXJlZCI6CisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnb3V0Y29tZSddID0gVGFzay5PVVRDT01FX0NPVkVSRUQKKyAgICAgICAgICAgIGlmIGV2ZW50LnJlYXNvbiA9PSAiZXhpc3RpbmciOgorICAgICAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ291dGNvbWUnXSA9IFRhc2suT1VUQ09NRV9QUkVCVUlMVAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsndGFza19leGVjdXRlZCddID0gVHJ1ZQorICAgICAgICAgICAgaWYgJ25vZXhlYycgaW4gdmFycyhldmVudCkgYW5kIGV2ZW50Lm5vZXhlYyA9PSBUcnVlOgorICAgICAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3Rhc2tfZXhlY3V0ZWQnXSA9IEZhbHNlCisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnb3V0Y29tZSddID0gVGFzay5PVVRDT01FX0VNUFRZCisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnc2NyaXB0X3R5cGUnXSA9IFRhc2suQ09ESU5HX05BCisKKyAgICAgICAgIyBkbyBub3QgYXNzaWduIG9yZGVyIG51bWJlcnMgdG8gc2NlbmUgdGFza3MKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrU3RhcnRlZCk6CisgICAgICAgICAgICBzZWxmLnRhc2tfb3JkZXIgKz0gMQorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnb3JkZXInXSA9IHNlbGYudGFza19vcmRlcgorCisgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV90YXNrX29iamVjdCh0YXNrX2luZm9ybWF0aW9uKQorCisgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3Rhc2tkYXRhJ11baWRlbnRpZmllcl0gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAnb3V0Y29tZSc6IHRhc2tfaW5mb3JtYXRpb25bJ291dGNvbWUnXSwKKyAgICAgICAgICAgICAgICAgICAgfQorCisKKyAgICBkZWYgc3RvcmVfdGFza3Nfc3RhdHMoc2VsZiwgZXZlbnQpOgorICAgICAgICBmb3IgKHRhc2tmaWxlLCB0YXNrbmFtZSwgdGFza3N0YXRzLCByZWNpcGVuYW1lKSBpbiBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpOgorICAgICAgICAgICAgbG9jYWxmaWxlcGF0aCA9IHRhc2tmaWxlLnNwbGl0KCI6IilbLTFdCisgICAgICAgICAgICBhc3NlcnQgbG9jYWxmaWxlcGF0aC5zdGFydHN3aXRoKCIvIikKKworICAgICAgICAgICAgcmVjaXBlX2luZm9ybWF0aW9uID0gc2VsZi5fZ2V0X3JlY2lwZV9pbmZvcm1hdGlvbl9mcm9tX3Rhc2tmaWxlKHRhc2tmaWxlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHJlY2lwZV9pbmZvcm1hdGlvblsnZmlsZV9wYXRoJ10uc3RhcnRzd2l0aChyZWNpcGVfaW5mb3JtYXRpb25bJ2xheWVyX3ZlcnNpb24nXS5sb2NhbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlX2luZm9ybWF0aW9uWydmaWxlX3BhdGgnXSA9IHJlY2lwZV9pbmZvcm1hdGlvblsnZmlsZV9wYXRoJ11bbGVuKHJlY2lwZV9pbmZvcm1hdGlvblsnbGF5ZXJfdmVyc2lvbiddLmxvY2FsX3BhdGgpOl0ubHN0cmlwKCIvIikKKworICAgICAgICAgICAgICAgIHJlY2lwZV9vYmplY3QgPSBSZWNpcGUub2JqZWN0cy5nZXQobGF5ZXJfdmVyc2lvbiA9IHJlY2lwZV9pbmZvcm1hdGlvblsnbGF5ZXJfdmVyc2lvbiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcGF0aF9fZW5kc3dpdGggPSByZWNpcGVfaW5mb3JtYXRpb25bJ2ZpbGVfcGF0aCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSByZWNpcGVuYW1lKQorICAgICAgICAgICAgZXhjZXB0IFJlY2lwZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJDb3VsZCBub3QgZmluZCByZWNpcGUgZm9yIHJlY2lwZV9pbmZvcm1hdGlvbiAlcyBuYW1lICVzIiAsIHBmb3JtYXQocmVjaXBlX2luZm9ybWF0aW9uKSwgcmVjaXBlbmFtZSkKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uID0ge30KKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ2J1aWxkJ10gPSBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddCisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydyZWNpcGUnXSA9IHJlY2lwZV9vYmplY3QKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3Rhc2tfbmFtZSddID0gdGFza25hbWUKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ2NwdV91c2FnZSddID0gdGFza3N0YXRzWydjcHVfdXNhZ2UnXQorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnZGlza19pbyddID0gdGFza3N0YXRzWydkaXNrX2lvJ10KKyAgICAgICAgICAgIGlmICdlbGFwc2VkX3RpbWUnIGluIHRhc2tzdGF0czoKKyAgICAgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydlbGFwc2VkX3RpbWUnXSA9IHRhc2tzdGF0c1snZWxhcHNlZF90aW1lJ10KKyAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV90YXNrX29iamVjdCh0YXNrX2luZm9ybWF0aW9uLCBUcnVlKSAgIyBtdXN0IGV4aXN0CisKKyAgICBkZWYgdXBkYXRlX2FuZF9zdG9yZV90YXNrKHNlbGYsIGV2ZW50KToKKyAgICAgICAgYXNzZXJ0ICd0YXNrZmlsZScgaW4gdmFycyhldmVudCkKKyAgICAgICAgbG9jYWxmaWxlcGF0aCA9IGV2ZW50LnRhc2tmaWxlLnNwbGl0KCI6IilbLTFdCisgICAgICAgIGFzc2VydCBsb2NhbGZpbGVwYXRoLnN0YXJ0c3dpdGgoIi8iKQorCisgICAgICAgIGlkZW50aWZpZXIgPSBldmVudC50YXNrZmlsZSArICI6IiArIGV2ZW50LnRhc2tuYW1lCisgICAgICAgIGlmIG5vdCBpZGVudGlmaWVyIGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3Rhc2tkYXRhJ106CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrQmFzZSk6CisgICAgICAgICAgICAgICAgIyB3ZSBkbyBhIGJpdCBvZiBndWVzc2luZworICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSBbeCBmb3IgeCBpbiBzZWxmLmludGVybmFsX3N0YXRlWyd0YXNrZGF0YSddLmtleXMoKSBpZiB4LmVuZHN3aXRoKGlkZW50aWZpZXIpXQorICAgICAgICAgICAgICAgIGlmIGxlbihjYW5kaWRhdGVzKSA9PSAxOgorICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gY2FuZGlkYXRlc1swXQorCisgICAgICAgIGFzc2VydCBpZGVudGlmaWVyIGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3Rhc2tkYXRhJ10KKyAgICAgICAgaWRlbnRpZmllcmxpc3QgPSBpZGVudGlmaWVyLnNwbGl0KCI6IikKKyAgICAgICAgcmVhbHRhc2tmaWxlID0gIjoiLmpvaW4oaWRlbnRpZmllcmxpc3RbMDpsZW4oaWRlbnRpZmllcmxpc3QpLTFdKQorICAgICAgICByZWNpcGVfaW5mb3JtYXRpb24gPSBzZWxmLl9nZXRfcmVjaXBlX2luZm9ybWF0aW9uX2Zyb21fdGFza2ZpbGUocmVhbHRhc2tmaWxlKQorICAgICAgICByZWNpcGUgPSBzZWxmLm9ybV93cmFwcGVyLmdldF91cGRhdGVfcmVjaXBlX29iamVjdChyZWNpcGVfaW5mb3JtYXRpb24sIFRydWUpCisgICAgICAgIHRhc2tfaW5mb3JtYXRpb24gPSBzZWxmLl9nZXRfdGFza19pbmZvcm1hdGlvbihldmVudCxyZWNpcGUpCisKKyAgICAgICAgaWYgJ3RpbWUnIGluIHZhcnMoZXZlbnQpOgorICAgICAgICAgICAgaWYgbm90ICdzdGFydF90aW1lJyBpbiBzZWxmLmludGVybmFsX3N0YXRlWyd0YXNrZGF0YSddW2lkZW50aWZpZXJdOgorICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3Rhc2tkYXRhJ11baWRlbnRpZmllcl1bJ3N0YXJ0X3RpbWUnXSA9IGV2ZW50LnRpbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnZW5kX3RpbWUnXSA9IGV2ZW50LnRpbWUKKyAgICAgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydzdGFydF90aW1lJ10gPSBzZWxmLmludGVybmFsX3N0YXRlWyd0YXNrZGF0YSddW2lkZW50aWZpZXJdWydzdGFydF90aW1lJ10KKworICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydvdXRjb21lJ10gPSBzZWxmLmludGVybmFsX3N0YXRlWyd0YXNrZGF0YSddW2lkZW50aWZpZXJdWydvdXRjb21lJ10KKworICAgICAgICBpZiAnbG9nZmlsZScgaW4gdmFycyhldmVudCk6CisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydsb2dmaWxlJ10gPSBldmVudC5sb2dmaWxlCisKKyAgICAgICAgaWYgJ19tZXNzYWdlJyBpbiB2YXJzKGV2ZW50KToKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ21lc3NhZ2UnXSA9IGV2ZW50Ll9tZXNzYWdlCisKKyAgICAgICAgaWYgJ3Rhc2tmbGFncycgaW4gdmFycyhldmVudCk6CisgICAgICAgICAgICAjIHdpdGggVGFza1N0YXJ0ZWQsIHdlIGdldCBldmVuIG1vcmUgaW5mb3JtYXRpb24KKyAgICAgICAgICAgIGlmICdweXRob24nIGluIGV2ZW50LnRhc2tmbGFncy5rZXlzKCkgYW5kIGV2ZW50LnRhc2tmbGFnc1sncHl0aG9uJ10gPT0gJzEnOgorICAgICAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3NjcmlwdF90eXBlJ10gPSBUYXNrLkNPRElOR19QWVRIT04KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnc2NyaXB0X3R5cGUnXSA9IFRhc2suQ09ESU5HX1NIRUxMCisKKyAgICAgICAgaWYgdGFza19pbmZvcm1hdGlvblsnb3V0Y29tZSddID09IFRhc2suT1VUQ09NRV9OQToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tDb21wbGV0ZWQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrQ29tcGxldGVkKSk6CisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnb3V0Y29tZSddID0gVGFzay5PVVRDT01FX1NVQ0NFU1MKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFza2RhdGEnXVtpZGVudGlmaWVyXQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIucnVucXVldWUucnVuUXVldWVUYXNrRmFpbGVkLCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza0ZhaWxlZCkpOgorICAgICAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ291dGNvbWUnXSA9IFRhc2suT1VUQ09NRV9GQUlMRUQKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFza2RhdGEnXVtpZGVudGlmaWVyXQorCisgICAgICAgIGlmIG5vdCBjb25uZWN0aW9uLmZlYXR1cmVzLmF1dG9jb21taXRzX3doZW5fYXV0b2NvbW1pdF9pc19vZmY6CisgICAgICAgICAgICAjIHdlIGZvcmNlIGEgc3luYyBwb2ludCBoZXJlLCB0byBnZXQgdGhlIHByb2dyZXNzIGJhciB0byBzaG93CisgICAgICAgICAgICBpZiBzZWxmLmF1dG9jb21taXRfc3RlcCAlIDMgPT0gMDoKKyAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5zZXRfYXV0b2NvbW1pdChUcnVlKQorICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hdXRvY29tbWl0X3N0ZXAgKz0gMQorCisgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV90YXNrX29iamVjdCh0YXNrX2luZm9ybWF0aW9uLCBUcnVlKSAjIG11c3QgZXhpc3QKKworCisgICAgZGVmIHN0b3JlX21pc3NlZF9zdGF0ZV90YXNrcyhzZWxmLCBldmVudCk6CisgICAgICAgIGZvciAoZm4sIHRhc2tuYW1lLCB0YXNraGFzaCwgc3N0YXRlZmlsZSkgaW4gQnVpbGRJbmZvSGVscGVyLl9nZXRfZGF0YV9mcm9tX2V2ZW50KGV2ZW50KVsnbWlzc2VkJ106CisKKyAgICAgICAgICAgICMgaWRlbnRpZmllciA9IGZuICsgdGFza25hbWUgKyAiX3NldHNjZW5lIgorICAgICAgICAgICAgcmVjaXBlX2luZm9ybWF0aW9uID0gc2VsZi5fZ2V0X3JlY2lwZV9pbmZvcm1hdGlvbl9mcm9tX3Rhc2tmaWxlKGZuKQorICAgICAgICAgICAgcmVjaXBlID0gc2VsZi5vcm1fd3JhcHBlci5nZXRfdXBkYXRlX3JlY2lwZV9vYmplY3QocmVjaXBlX2luZm9ybWF0aW9uKQorICAgICAgICAgICAgbWV2ZW50ID0gTW9ja0V2ZW50KCkKKyAgICAgICAgICAgIG1ldmVudC50YXNrbmFtZSA9IHRhc2tuYW1lCisgICAgICAgICAgICBtZXZlbnQudGFza2hhc2ggPSB0YXNraGFzaAorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvbiA9IHNlbGYuX2dldF90YXNrX2luZm9ybWF0aW9uKG1ldmVudCxyZWNpcGUpCisKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3N0YXJ0X3RpbWUnXSA9IHRpbWV6b25lLm5vdygpCisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydvdXRjb21lJ10gPSBUYXNrLk9VVENPTUVfTkEKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3NzdGF0ZV9jaGVja3N1bSddID0gdGFza2hhc2gKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3NzdGF0ZV9yZXN1bHQnXSA9IFRhc2suU1NUQVRFX01JU1MKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3BhdGhfdG9fc3N0YXRlX29iaiddID0gc3N0YXRlZmlsZQorCisgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLmdldF91cGRhdGVfdGFza19vYmplY3QodGFza19pbmZvcm1hdGlvbikKKworICAgICAgICBmb3IgKGZuLCB0YXNrbmFtZSwgdGFza2hhc2gsIHNzdGF0ZWZpbGUpIGluIEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudClbJ2ZvdW5kJ106CisKKyAgICAgICAgICAgICMgaWRlbnRpZmllciA9IGZuICsgdGFza25hbWUgKyAiX3NldHNjZW5lIgorICAgICAgICAgICAgcmVjaXBlX2luZm9ybWF0aW9uID0gc2VsZi5fZ2V0X3JlY2lwZV9pbmZvcm1hdGlvbl9mcm9tX3Rhc2tmaWxlKGZuKQorICAgICAgICAgICAgcmVjaXBlID0gc2VsZi5vcm1fd3JhcHBlci5nZXRfdXBkYXRlX3JlY2lwZV9vYmplY3QocmVjaXBlX2luZm9ybWF0aW9uKQorICAgICAgICAgICAgbWV2ZW50ID0gTW9ja0V2ZW50KCkKKyAgICAgICAgICAgIG1ldmVudC50YXNrbmFtZSA9IHRhc2tuYW1lCisgICAgICAgICAgICBtZXZlbnQudGFza2hhc2ggPSB0YXNraGFzaAorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvbiA9IHNlbGYuX2dldF90YXNrX2luZm9ybWF0aW9uKG1ldmVudCxyZWNpcGUpCisKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3BhdGhfdG9fc3N0YXRlX29iaiddID0gc3N0YXRlZmlsZQorCisgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLmdldF91cGRhdGVfdGFza19vYmplY3QodGFza19pbmZvcm1hdGlvbikKKworCisgICAgZGVmIHN0b3JlX3RhcmdldF9wYWNrYWdlX2RhdGEoc2VsZiwgZXZlbnQpOgorICAgICAgICAjIGZvciBhbGwgaW1hZ2UgdGFyZ2V0cworICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3RhcmdldHMnXToKKyAgICAgICAgICAgIGlmIHRhcmdldC5pc19pbWFnZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHBrZ2RhdGEgPSBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpWydwa2dkYXRhJ10KKyAgICAgICAgICAgICAgICAgICAgaW1nZGF0YSA9IEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudClbJ2ltZ2RhdGEnXVt0YXJnZXQudGFyZ2V0XQorICAgICAgICAgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnNhdmVfdGFyZ2V0X3BhY2thZ2VfaW5mb3JtYXRpb24oc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSwgdGFyZ2V0LCBpbWdkYXRhLCBwa2dkYXRhLCBzZWxmLmludGVybmFsX3N0YXRlWydyZWNpcGVzJ10pCisgICAgICAgICAgICAgICAgICAgIGZpbGVkYXRhID0gQnVpbGRJbmZvSGVscGVyLl9nZXRfZGF0YV9mcm9tX2V2ZW50KGV2ZW50KVsnZmlsZWRhdGEnXVt0YXJnZXQudGFyZ2V0XQorICAgICAgICAgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnNhdmVfdGFyZ2V0X2ZpbGVfaW5mb3JtYXRpb24oc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSwgdGFyZ2V0LCBmaWxlZGF0YSkKKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgd2UgbXVzdCBoYXZlIG5vdCBnb3QgdGhlIGRhdGEgZm9yIHRoaXMgaW1hZ2UsIG5vdGhpbmcgdG8gc2F2ZQorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKworCisgICAgZGVmIHN0b3JlX2RlcGVuZGVuY3lfaW5mb3JtYXRpb24oc2VsZiwgZXZlbnQpOgorICAgICAgICBhc3NlcnQgJ19kZXBncmFwaCcgaW4gdmFycyhldmVudCkKKyAgICAgICAgYXNzZXJ0ICdsYXllci1wcmlvcml0aWVzJyBpbiBldmVudC5fZGVwZ3JhcGgKKyAgICAgICAgYXNzZXJ0ICdwbicgaW4gZXZlbnQuX2RlcGdyYXBoCisgICAgICAgIGFzc2VydCAndGRlcGVuZHMnIGluIGV2ZW50Ll9kZXBncmFwaAorCisgICAgICAgIGVycm9ybXNnID0gIiIKKworICAgICAgICAjIHNhdmUgbGF5ZXIgdmVyc2lvbiBwcmlvcml0aWVzCisgICAgICAgIGlmICdsYXllci1wcmlvcml0aWVzJyBpbiBldmVudC5fZGVwZ3JhcGgua2V5cygpOgorICAgICAgICAgICAgZm9yIGx2IGluIGV2ZW50Ll9kZXBncmFwaFsnbGF5ZXItcHJpb3JpdGllcyddOgorICAgICAgICAgICAgICAgIChfLCBwYXRoLCBfLCBwcmlvcml0eSkgPSBsdgorICAgICAgICAgICAgICAgIGxheWVyX3ZlcnNpb25fb2JqID0gc2VsZi5fZ2V0X2xheWVyX3ZlcnNpb25fZm9yX3BhdGgocGF0aFsxOl0pICMgcGF0aHMgc3RhcnQgd2l0aCBhIF4KKyAgICAgICAgICAgICAgICBhc3NlcnQgbGF5ZXJfdmVyc2lvbl9vYmogaXMgbm90IE5vbmUKKyAgICAgICAgICAgICAgICBsYXllcl92ZXJzaW9uX29iai5wcmlvcml0eSA9IHByaW9yaXR5CisgICAgICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbl9vYmouc2F2ZSgpCisKKyAgICAgICAgIyBzYXZlIHJlY2lwZSBpbmZvcm1hdGlvbgorICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlWydyZWNpcGVzJ10gPSB7fQorICAgICAgICBmb3IgcG4gaW4gZXZlbnQuX2RlcGdyYXBoWydwbiddOgorCisgICAgICAgICAgICBmaWxlX25hbWUgPSBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dWydmaWxlbmFtZSddLnNwbGl0KCI6IilbLTFdCisgICAgICAgICAgICBwYXRoZmxhZ3MgPSAiOiIuam9pbihzb3J0ZWQoZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXVsnZmlsZW5hbWUnXS5zcGxpdCgiOiIpWzotMV0pKQorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbl9vYmogPSBzZWxmLl9nZXRfbGF5ZXJfdmVyc2lvbl9mb3JfcGF0aChmaWxlX25hbWUpCisKKyAgICAgICAgICAgIGFzc2VydCBsYXllcl92ZXJzaW9uX29iaiBpcyBub3QgTm9uZQorCisgICAgICAgICAgICByZWNpcGVfaW5mbyA9IHt9CisgICAgICAgICAgICByZWNpcGVfaW5mb1snbmFtZSddID0gcG4KKyAgICAgICAgICAgIHJlY2lwZV9pbmZvWydsYXllcl92ZXJzaW9uJ10gPSBsYXllcl92ZXJzaW9uX29iagorCisgICAgICAgICAgICBpZiAndmVyc2lvbicgaW4gZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXToKKyAgICAgICAgICAgICAgICByZWNpcGVfaW5mb1sndmVyc2lvbiddID0gZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXVsndmVyc2lvbiddLmxzdHJpcCgiOiIpCisKKyAgICAgICAgICAgIGlmICdzdW1tYXJ5JyBpbiBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dOgorICAgICAgICAgICAgICAgIHJlY2lwZV9pbmZvWydzdW1tYXJ5J10gPSBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dWydzdW1tYXJ5J10KKworICAgICAgICAgICAgaWYgJ2xpY2Vuc2UnIGluIGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl06CisgICAgICAgICAgICAgICAgcmVjaXBlX2luZm9bJ2xpY2Vuc2UnXSA9IGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl1bJ2xpY2Vuc2UnXQorCisgICAgICAgICAgICBpZiAnZGVzY3JpcHRpb24nIGluIGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl06CisgICAgICAgICAgICAgICAgcmVjaXBlX2luZm9bJ2Rlc2NyaXB0aW9uJ10gPSBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dWydkZXNjcmlwdGlvbiddCisKKyAgICAgICAgICAgIGlmICdzZWN0aW9uJyBpbiBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dOgorICAgICAgICAgICAgICAgIHJlY2lwZV9pbmZvWydzZWN0aW9uJ10gPSBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dWydzZWN0aW9uJ10KKworICAgICAgICAgICAgaWYgJ2hvbWVwYWdlJyBpbiBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dOgorICAgICAgICAgICAgICAgIHJlY2lwZV9pbmZvWydob21lcGFnZSddID0gZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXVsnaG9tZXBhZ2UnXQorCisgICAgICAgICAgICBpZiAnYnVndHJhY2tlcicgaW4gZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXToKKyAgICAgICAgICAgICAgICByZWNpcGVfaW5mb1snYnVndHJhY2tlciddID0gZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXVsnYnVndHJhY2tlciddCisKKyAgICAgICAgICAgIHJlY2lwZV9pbmZvWydmaWxlX3BhdGgnXSA9IGZpbGVfbmFtZQorICAgICAgICAgICAgcmVjaXBlX2luZm9bJ3BhdGhmbGFncyddID0gcGF0aGZsYWdzCisKKyAgICAgICAgICAgIGlmIHJlY2lwZV9pbmZvWydmaWxlX3BhdGgnXS5zdGFydHN3aXRoKHJlY2lwZV9pbmZvWydsYXllcl92ZXJzaW9uJ10ubG9jYWxfcGF0aCk6CisgICAgICAgICAgICAgICAgcmVjaXBlX2luZm9bJ2ZpbGVfcGF0aCddID0gcmVjaXBlX2luZm9bJ2ZpbGVfcGF0aCddW2xlbihyZWNpcGVfaW5mb1snbGF5ZXJfdmVyc2lvbiddLmxvY2FsX3BhdGgpOl0ubHN0cmlwKCIvIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJSZWNpcGUgZmlsZSBwYXRoICVzIGlzIG5vdCB1bmRlciBsYXllciB2ZXJzaW9uIGF0ICVzIiAlIChyZWNpcGVfaW5mb1snZmlsZV9wYXRoJ10sIHJlY2lwZV9pbmZvWydsYXllcl92ZXJzaW9uJ10ubG9jYWxfcGF0aCkpCisKKyAgICAgICAgICAgIHJlY2lwZSA9IHNlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV9yZWNpcGVfb2JqZWN0KHJlY2lwZV9pbmZvKQorICAgICAgICAgICAgcmVjaXBlLmlzX2ltYWdlID0gRmFsc2UKKyAgICAgICAgICAgIGlmICdpbmhlcml0cycgaW4gZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXS5rZXlzKCk6CisgICAgICAgICAgICAgICAgZm9yIGNscyBpbiBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dWydpbmhlcml0cyddOgorICAgICAgICAgICAgICAgICAgICBpZiBjbHMuZW5kc3dpdGgoJy9pbWFnZS5iYmNsYXNzJyk6CisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUuaXNfaW1hZ2UgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgcmVjaXBlLmlzX2ltYWdlOgorICAgICAgICAgICAgICAgIGZvciB0IGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3RhcmdldHMnXToKKyAgICAgICAgICAgICAgICAgICAgaWYgcG4gPT0gdC50YXJnZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICB0LmlzX2ltYWdlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgdC5zYXZlKCkKKyAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3JlY2lwZXMnXVtwbl0gPSByZWNpcGUKKworICAgICAgICAjIHdlJ2xsIG5vdCBnZXQgcmVjaXBlcyBmb3Iga2V5IHcvIHZhbHVlcyBsaXN0ZWQgaW4gQVNTVU1FX1BST1ZJREVECisKKyAgICAgICAgYXNzdW1lX3Byb3ZpZGVkID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkFTU1VNRV9QUk9WSURFRCJdKVswXS5zcGxpdCgpCisKKyAgICAgICAgIyBzYXZlIHJlY2lwZSBkZXBlbmRlbmN5CisgICAgICAgICMgYnVpbGR0aW1lCisgICAgICAgIHJlY2lwZWRlcHNfb2JqZWN0cyA9IFtdCisgICAgICAgIGZvciByZWNpcGUgaW4gZXZlbnQuX2RlcGdyYXBoWydkZXBlbmRzJ106CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gc2VsZi5pbnRlcm5hbF9zdGF0ZVsncmVjaXBlcyddW3JlY2lwZV0KKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIGV2ZW50Ll9kZXBncmFwaFsnZGVwZW5kcyddW3JlY2lwZV06CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgPSBzZWxmLmludGVybmFsX3N0YXRlWydyZWNpcGVzJ11bZGVwXQorICAgICAgICAgICAgICAgICAgICByZWNpcGVkZXBzX29iamVjdHMuYXBwZW5kKFJlY2lwZV9EZXBlbmRlbmN5KCByZWNpcGUgPSB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kc19vbiA9IGRlcGVuZGVuY3ksIGRlcF90eXBlID0gUmVjaXBlX0RlcGVuZGVuY3kuVFlQRV9ERVBFTkRTKSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUgbm90IGluIGFzc3VtZV9wcm92aWRlZCBhbmQgbm90IHN0cihlKS5zdGFydHN3aXRoKCJ2aXJ0dWFsLyIpOgorICAgICAgICAgICAgICAgICAgICBlcnJvcm1zZyArPSAiICBzdHBkOiBLZXlFcnJvciBzYXZpbmcgcmVjaXBlIGRlcGVuZGVuY3kgZm9yICVzLCAlcyBcbiIgJSAocmVjaXBlLCBlKQorICAgICAgICBSZWNpcGVfRGVwZW5kZW5jeS5vYmplY3RzLmJ1bGtfY3JlYXRlKHJlY2lwZWRlcHNfb2JqZWN0cykKKworICAgICAgICAjIHNhdmUgYWxsIHRhc2sgaW5mb3JtYXRpb24KKyAgICAgICAgZGVmIF9zYXZlX2FfdGFzayh0YXNrZGVzYyk6CisgICAgICAgICAgICBzcGVjID0gcmUuc3BsaXQocidcLicsIHRhc2tkZXNjKQorICAgICAgICAgICAgcG4gPSAiLiIuam9pbihzcGVjWzA6LTFdKQorICAgICAgICAgICAgdGFza25hbWUgPSBzcGVjWy0xXQorICAgICAgICAgICAgZSA9IGV2ZW50CisgICAgICAgICAgICBlLnRhc2tuYW1lID0gcG4KKyAgICAgICAgICAgIHJlY2lwZSA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3JlY2lwZXMnXVtwbl0KKyAgICAgICAgICAgIHRhc2tfaW5mbyA9IHNlbGYuX2dldF90YXNrX2luZm9ybWF0aW9uKGUsIHJlY2lwZSkKKyAgICAgICAgICAgIHRhc2tfaW5mb1sndGFza19uYW1lJ10gPSB0YXNrbmFtZQorICAgICAgICAgICAgdGFza19vYmogPSBzZWxmLm9ybV93cmFwcGVyLmdldF91cGRhdGVfdGFza19vYmplY3QodGFza19pbmZvKQorICAgICAgICAgICAgcmV0dXJuIHRhc2tfb2JqCisKKyAgICAgICAgIyBjcmVhdGUgdGFza3MKKyAgICAgICAgdGFza3MgPSB7fQorICAgICAgICBmb3IgdGFza2Rlc2MgaW4gZXZlbnQuX2RlcGdyYXBoWyd0ZGVwZW5kcyddOgorICAgICAgICAgICAgdGFza3NbdGFza2Rlc2NdID0gX3NhdmVfYV90YXNrKHRhc2tkZXNjKQorCisgICAgICAgICMgY3JlYXRlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRhc2tzCisgICAgICAgIHRhc2tkZXBzX29iamVjdHMgPSBbXQorICAgICAgICBmb3IgdGFza2Rlc2MgaW4gZXZlbnQuX2RlcGdyYXBoWyd0ZGVwZW5kcyddOgorICAgICAgICAgICAgdGFyZ2V0ID0gdGFza3NbdGFza2Rlc2NdCisgICAgICAgICAgICBmb3IgdGFza2RlcCBpbiBldmVudC5fZGVwZ3JhcGhbJ3RkZXBlbmRzJ11bdGFza2Rlc2NdOgorICAgICAgICAgICAgICAgIGlmIHRhc2tkZXAgbm90IGluIHRhc2tzOgorICAgICAgICAgICAgICAgICAgICAjIEZldGNoIHRhc2tzIGluZm8gaXMgbm90IGNvbGxlY3RlZCBwcmV2aW91c2x5CisgICAgICAgICAgICAgICAgICAgIGRlcCA9IF9zYXZlX2FfdGFzayh0YXNrZGVwKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRlcCA9IHRhc2tzW3Rhc2tkZXBdCisgICAgICAgICAgICAgICAgdGFza2RlcHNfb2JqZWN0cy5hcHBlbmQoVGFza19EZXBlbmRlbmN5KCB0YXNrID0gdGFyZ2V0LCBkZXBlbmRzX29uID0gZGVwICkpCisgICAgICAgIFRhc2tfRGVwZW5kZW5jeS5vYmplY3RzLmJ1bGtfY3JlYXRlKHRhc2tkZXBzX29iamVjdHMpCisKKyAgICAgICAgaWYgbGVuKGVycm9ybXNnKSA+IDA6CisgICAgICAgICAgICBsb2dnZXIud2FybigiYnVpbGRpbmZvaGVscGVyOiBkZXBlbmRlbmN5IGluZm8gbm90IGlkZW50aWZ5IHJlY2lwZXM6IFxuJXMiLCBlcnJvcm1zZykKKworCisgICAgZGVmIHN0b3JlX2J1aWxkX3BhY2thZ2VfaW5mb3JtYXRpb24oc2VsZiwgZXZlbnQpOgorICAgICAgICBwYWNrYWdlX2luZm8gPSBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpCisgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuc2F2ZV9idWlsZF9wYWNrYWdlX2luZm9ybWF0aW9uKHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3JlY2lwZXMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgX3N0b3JlX2J1aWxkX2RvbmUoc2VsZiwgZXJyb3Jjb2RlKToKKyAgICAgICAgbG9nZ2VyLmluZm8oIkJ1aWxkIGV4aXRlZCB3aXRoIGVycm9yY29kZSAlZCIsIGVycm9yY29kZSkKKyAgICAgICAgYnJfaWQsIGJlX2lkID0gc2VsZi5icmJlLnNwbGl0KCI6IikKKyAgICAgICAgYmUgPSBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMuZ2V0KHBrID0gYmVfaWQpCisgICAgICAgIGJlLmxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfTE9DSworICAgICAgICBiZS5zYXZlKCkKKyAgICAgICAgYnIgPSBCdWlsZFJlcXVlc3Qub2JqZWN0cy5nZXQocGsgPSBicl9pZCkKKyAgICAgICAgaWYgZXJyb3Jjb2RlID09IDA6CisgICAgICAgICAgICAjIHJlcXVlc3QgYXJjaGl2YWwgb2YgdGhlIHByb2plY3QgYXJ0aWZhY3RzCisgICAgICAgICAgICBici5zdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfQVJDSElWRQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYnIuc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX0ZBSUxFRAorICAgICAgICBici5zYXZlKCkKKworCisgICAgZGVmIHN0b3JlX2xvZ19lcnJvcihzZWxmLCB0ZXh0KToKKyAgICAgICAgbW9ja2V2ZW50ID0gTW9ja0V2ZW50KCkKKyAgICAgICAgbW9ja2V2ZW50LmxldmVsbm8gPSBmb3JtYXR0ZXIuRVJST1IKKyAgICAgICAgbW9ja2V2ZW50Lm1zZyA9IHRleHQKKyAgICAgICAgbW9ja2V2ZW50LnBhdGhuYW1lID0gJy0tIE5vbmUnCisgICAgICAgIG1vY2tldmVudC5saW5lbm8gPSBMb2dNZXNzYWdlLkVSUk9SCisgICAgICAgIHNlbGYuc3RvcmVfbG9nX2V2ZW50KG1vY2tldmVudCkKKworICAgIGRlZiBzdG9yZV9sb2dfZXhjZXB0aW9uKHNlbGYsIHRleHQsIGJhY2t0cmFjZSA9ICIiKToKKyAgICAgICAgbW9ja2V2ZW50ID0gTW9ja0V2ZW50KCkKKyAgICAgICAgbW9ja2V2ZW50LmxldmVsbm8gPSAtMQorICAgICAgICBtb2NrZXZlbnQubXNnID0gdGV4dAorICAgICAgICBtb2NrZXZlbnQucGF0aG5hbWUgPSBiYWNrdHJhY2UKKyAgICAgICAgbW9ja2V2ZW50LmxpbmVubyA9IC0xCisgICAgICAgIHNlbGYuc3RvcmVfbG9nX2V2ZW50KG1vY2tldmVudCkKKworCisgICAgZGVmIHN0b3JlX2xvZ19ldmVudChzZWxmLCBldmVudCk6CisgICAgICAgIGlmIGV2ZW50LmxldmVsbm8gPCBmb3JtYXR0ZXIuV0FSTklORzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmICdhcmdzJyBpbiB2YXJzKGV2ZW50KToKKyAgICAgICAgICAgIGV2ZW50Lm1zZyA9IGV2ZW50Lm1zZyAlIGV2ZW50LmFyZ3MKKworICAgICAgICBpZiBub3QgJ2J1aWxkJyBpbiBzZWxmLmludGVybmFsX3N0YXRlOgorICAgICAgICAgICAgaWYgc2VsZi5icmJlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgbm90ICdiYWNrbG9nJyBpbiBzZWxmLmludGVybmFsX3N0YXRlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlWydiYWNrbG9nJ10gPSBbXQorICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2JhY2tsb2cnXS5hcHBlbmQoZXZlbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbHNlOiAgICMgd2UncmUgdW5kZXIgVG9hc3RlciBjb250cm9sLCB0aGUgYnVpbGQgaXMgYWxyZWFkeSBjcmVhdGVkCisgICAgICAgICAgICAgICAgYnIsIF8gPSBzZWxmLmJyYmUuc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgIGJ1aWxkcmVxdWVzdCA9IEJ1aWxkUmVxdWVzdC5vYmplY3RzLmdldChwayA9IGJyKQorICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10gPSBidWlsZHJlcXVlc3QuYnVpbGQKKworICAgICAgICBpZiAnYnVpbGQnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGUgYW5kICdiYWNrbG9nJyBpbiBzZWxmLmludGVybmFsX3N0YXRlOgorICAgICAgICAgICAgIyBpZiB3ZSBoYXZlIGEgYmFja2xvZyBvZiBldmVudHMsIGRvIG91ciBiZXN0IHRvIHNhdmUgdGhlbSBoZXJlCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYmFja2xvZyddKToKKyAgICAgICAgICAgICAgICB0ZW1wZXZlbnQgPSBzZWxmLmludGVybmFsX3N0YXRlWydiYWNrbG9nJ10ucG9wKCkKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgImJ1aWxkaW5mb2hlbHBlcjogU2F2aW5nIHN0b3JlZCBldmVudCAlcyAiICUgdGVtcGV2ZW50KQorICAgICAgICAgICAgICAgIHNlbGYuc3RvcmVfbG9nX2V2ZW50KHRlbXBldmVudCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oImJ1aWxkaW5mb2hlbHBlcjogQWxsIGV2ZW50cyBzYXZlZCIpCisgICAgICAgICAgICAgICAgZGVsIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2JhY2tsb2cnXQorCisgICAgICAgIGxvZ19pbmZvcm1hdGlvbiA9IHt9CisgICAgICAgIGxvZ19pbmZvcm1hdGlvblsnYnVpbGQnXSA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10KKyAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA9PSBmb3JtYXR0ZXIuRVJST1I6CisgICAgICAgICAgICBsb2dfaW5mb3JtYXRpb25bJ2xldmVsJ10gPSBMb2dNZXNzYWdlLkVSUk9SCisgICAgICAgIGVsaWYgZXZlbnQubGV2ZWxubyA9PSBmb3JtYXR0ZXIuV0FSTklORzoKKyAgICAgICAgICAgIGxvZ19pbmZvcm1hdGlvblsnbGV2ZWwnXSA9IExvZ01lc3NhZ2UuV0FSTklORworICAgICAgICBlbGlmIGV2ZW50LmxldmVsbm8gPT0gLTI6ICAgIyB0b2FzdGVyIHNlbGYtbG9nZ2luZworICAgICAgICAgICAgbG9nX2luZm9ybWF0aW9uWydsZXZlbCddID0gLTIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ19pbmZvcm1hdGlvblsnbGV2ZWwnXSA9IExvZ01lc3NhZ2UuSU5GTworCisgICAgICAgIGxvZ19pbmZvcm1hdGlvblsnbWVzc2FnZSddID0gZXZlbnQubXNnCisgICAgICAgIGxvZ19pbmZvcm1hdGlvblsncGF0aG5hbWUnXSA9IGV2ZW50LnBhdGhuYW1lCisgICAgICAgIGxvZ19pbmZvcm1hdGlvblsnbGluZW5vJ10gPSBldmVudC5saW5lbm8KKyAgICAgICAgbG9nZ2VyLmluZm8oIkxvZ2dpbmcgZXJyb3IgMjogJXMiLCBsb2dfaW5mb3JtYXRpb24pCisgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuY3JlYXRlX2xvZ21lc3NhZ2UobG9nX2luZm9ybWF0aW9uKQorCisgICAgZGVmIGNsb3NlKHNlbGYsIGVycm9yY29kZSk6CisgICAgICAgIGlmIHNlbGYuYnJiZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3N0b3JlX2J1aWxkX2RvbmUoZXJyb3Jjb2RlKQorCisgICAgICAgIGlmICdiYWNrbG9nJyBpbiBzZWxmLmludGVybmFsX3N0YXRlOgorICAgICAgICAgICAgaWYgJ2J1aWxkJyBpbiBzZWxmLmludGVybmFsX3N0YXRlOgorICAgICAgICAgICAgICAgICMgd2Ugc2F2ZSBtaXNzZWQgZXZlbnRzIGluIHRoZSBkYXRhYmFzZSBmb3IgdGhlIGN1cnJlbnQgYnVpbGQKKyAgICAgICAgICAgICAgICB0ZW1wZXZlbnQgPSBzZWxmLmludGVybmFsX3N0YXRlWydiYWNrbG9nJ10ucG9wKCkKKyAgICAgICAgICAgICAgICBzZWxmLnN0b3JlX2xvZ19ldmVudCh0ZW1wZXZlbnQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgd2UgaGF2ZSBubyBidWlsZCwgYW5kIHdlIHN0aWxsIGhhdmUgZXZlbnRzOyBzb21ldGhpbmcgYW1hemluZ2x5IHdyb25nIGhhcHBlbmQKKyAgICAgICAgICAgICAgICBmb3IgZXZlbnQgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYmFja2xvZyddOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVOU0FWRUQgbG9nOiAlcyIsIGV2ZW50Lm1zZykKKworICAgICAgICBpZiBub3QgY29ubmVjdGlvbi5mZWF0dXJlcy5hdXRvY29tbWl0c193aGVuX2F1dG9jb21taXRfaXNfb2ZmOgorICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoVHJ1ZSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdjYmUxYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTcgQEAKKyMKKyMgR3RrKyBVSSBwaWVjZXMgZm9yIEJpdEJha2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9idWlsZGRldGFpbHNwYWdlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvYnVpbGRkZXRhaWxzcGFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZmM2OTBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvYnVpbGRkZXRhaWxzcGFnZS5weQpAQCAtMCwwICsxLDQzNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IHBhbmdvCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IGJiLnByb2Nlc3MKK2Zyb20gYmIudWkuY3J1bWJzLnByb2dyZXNzYmFyIGltcG9ydCBIb2JQcm9ncmVzc0JhcgorZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBoaWMsIEhvYk5vdGVib29rLCBIb2JBbHRCdXR0b24sIEhvYldhcnBDZWxsUmVuZGVyZXJUZXh0LCBIb2JCdXR0b24sIEhvYkluZm9CdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLnJ1bm5pbmdidWlsZCBpbXBvcnQgUnVubmluZ0J1aWxkVHJlZVZpZXcKK2Zyb20gYmIudWkuY3J1bWJzLnJ1bm5pbmdidWlsZCBpbXBvcnQgQnVpbGRGYWlsdXJlVHJlZVZpZXcKK2Zyb20gYmIudWkuY3J1bWJzLmhvYnBhZ2VzIGltcG9ydCBIb2JQYWdlCitmcm9tIGJiLnVpLmNydW1icy5ob2Jjb2xvciBpbXBvcnQgSG9iQ29sb3JzCisKK2NsYXNzIEJ1aWxkQ29uZmlndXJhdGlvblRyZWVWaWV3KGd0ay5UcmVlVmlldyk6CisgICAgZGVmIF9faW5pdF9fIChzZWxmKToKKyAgICAgICAgZ3RrLlRyZWVWaWV3Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuc2V0X3J1bGVzX2hpbnQoRmFsc2UpCisgICAgICAgIHNlbGYuc2V0X2hlYWRlcnNfdmlzaWJsZShGYWxzZSkKKyAgICAgICAgc2VsZi5zZXRfcHJvcGVydHkoImhvdmVyLWV4cGFuZCIsIFRydWUpCisgICAgICAgIHNlbGYuZ2V0X3NlbGVjdGlvbigpLnNldF9tb2RlKGd0ay5TRUxFQ1RJT05fU0lOR0xFKQorCisgICAgICAgICMgVGhlIGljb24gdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB3ZSdyZSBidWlsZGluZyBvciBmYWlsZWQuCisgICAgICAgIHJlbmRlcmVyMCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKKyAgICAgICAgcmVuZGVyZXIwLnNldF9wcm9wZXJ0eSgnZm9udC1kZXNjJywgcGFuZ28uRm9udERlc2NyaXB0aW9uKCdjb3VyaWVyIGJvbGQgMTInKSkKKyAgICAgICAgY29sMCA9IGd0ay5UcmVlVmlld0NvbHVtbiAoIk5hbWUiLCByZW5kZXJlcjAsIHRleHQ9MCkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uIChjb2wwKQorCisgICAgICAgICMgVGhlIG1lc3NhZ2Ugb2YgY29uZmlndXJhdGlvbi4KKyAgICAgICAgcmVuZGVyZXIxID0gSG9iV2FycENlbGxSZW5kZXJlclRleHQoY29sX251bWJlcj0xKQorICAgICAgICBjb2wxID0gZ3RrLlRyZWVWaWV3Q29sdW1uICgiVmFsdWVzIiwgcmVuZGVyZXIxLCB0ZXh0PTEpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoY29sMSkKKworICAgIGRlZiBzZXRfdmFycyhzZWxmLCBrZXk9IiIsIHZhcj1bIiJdKToKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGlmIHR5cGUodmFyKSA9PSBzdHI6CisgICAgICAgICAgICBkID0ge2tleTogW3Zhcl19CisgICAgICAgIGVsaWYgdHlwZSh2YXIpID09IGxpc3QgYW5kIGxlbih2YXIpID4gMToKKyAgICAgICAgICAgICNjcmVhdGUgdGhlIHN1YiBpdGVtIGxpbmUKKyAgICAgICAgICAgIGwgPSBbXQorICAgICAgICAgICAgdGV4dCA9ICIiCisgICAgICAgICAgICBmb3IgaXRlbSBpbiB2YXI6CisgICAgICAgICAgICAgICAgdGV4dCA9ICIgLSAiICsgaXRlbQorICAgICAgICAgICAgICAgIGwuYXBwZW5kKHRleHQpCisgICAgICAgICAgICBkID0ge2tleTogdmFyfQorCisgICAgICAgIHJldHVybiBkCisKKyAgICBkZWYgc2V0X2NvbmZpZ19tb2RlbChzZWxmLCBzaG93X3ZhcnMpOgorICAgICAgICBsaXN0bW9kZWwgPSBndGsuVHJlZVN0b3JlKGdvYmplY3QuVFlQRV9TVFJJTkcsIGdvYmplY3QuVFlQRV9TVFJJTkcpCisgICAgICAgIHBhcmVudCA9IE5vbmUKKyAgICAgICAgZm9yIHZhciBpbiBzaG93X3ZhcnM6CisgICAgICAgICAgICBmb3Igc3ViaXRlbSBpbiB2YXIuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBuYW1lID0gc3ViaXRlbVswXQorICAgICAgICAgICAgICAgIGlzX3BhcmVudCA9IFRydWUKKyAgICAgICAgICAgICAgICBmb3IgdmFsdWUgaW4gc3ViaXRlbVsxXToKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNfcGFyZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gbGlzdG1vZGVsLmFwcGVuZChwYXJlbnQsIChuYW1lLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpc19wYXJlbnQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbGlzdG1vZGVsLmFwcGVuZChwYXJlbnQsIChOb25lLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiICAgICAtICIKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBOb25lCisgICAgICAgICMgcmVuZXcgdGhlIHRyZWUgbW9kZWwgYWZ0ZXIgZ2V0IHRoZSBjb25maWd1cmF0aW9uIG1lc3NhZ2VzCisgICAgICAgIHNlbGYuc2V0X21vZGVsKGxpc3Rtb2RlbCkKKworICAgIGRlZiBzaG93KHNlbGYsIHNyY19jb25maWdfaW5mbywgc3JjX3BhcmFtcyk6CisgICAgICAgIHZhcnMgPSBbXQorICAgICAgICB2YXJzLmFwcGVuZChzZWxmLnNldF92YXJzKCJCQiB2ZXJzaW9uOiIsIHNyY19wYXJhbXMuYmJfdmVyc2lvbikpCisgICAgICAgIHZhcnMuYXBwZW5kKHNlbGYuc2V0X3ZhcnMoIlRhcmdldCBhcmNoOiIsIHNyY19wYXJhbXMudGFyZ2V0X2FyY2gpKQorICAgICAgICB2YXJzLmFwcGVuZChzZWxmLnNldF92YXJzKCJUYXJnZXQgT1M6Iiwgc3JjX3BhcmFtcy50YXJnZXRfb3MpKQorICAgICAgICB2YXJzLmFwcGVuZChzZWxmLnNldF92YXJzKCJNYWNoaW5lOiIsIHNyY19jb25maWdfaW5mby5jdXJyX21hY2gpKQorICAgICAgICB2YXJzLmFwcGVuZChzZWxmLnNldF92YXJzKCJEaXN0cm86Iiwgc3JjX2NvbmZpZ19pbmZvLmN1cnJfZGlzdHJvKSkKKyAgICAgICAgdmFycy5hcHBlbmQoc2VsZi5zZXRfdmFycygiRGlzdHJvIHZlcnNpb246Iiwgc3JjX3BhcmFtcy5kaXN0cm9fdmVyc2lvbikpCisgICAgICAgIHZhcnMuYXBwZW5kKHNlbGYuc2V0X3ZhcnMoIlNESyBtYWNoaW5lOiIsIHNyY19jb25maWdfaW5mby5jdXJyX3Nka19tYWNoaW5lKSkKKyAgICAgICAgdmFycy5hcHBlbmQoc2VsZi5zZXRfdmFycygiVHVuZSBmZWF0dXJlczoiLCBzcmNfcGFyYW1zLnR1bmVfcGtnYXJjaCkpCisgICAgICAgIHZhcnMuYXBwZW5kKHNlbGYuc2V0X3ZhcnMoIkxheWVyczoiLCBzcmNfY29uZmlnX2luZm8ubGF5ZXJzKSkKKworICAgICAgICBmb3IgcGF0aCBpbiBzcmNfY29uZmlnX2luZm8ubGF5ZXJzOgorICAgICAgICAgICAgaW1wb3J0IG9zLCBvcy5wYXRoCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKKyAgICAgICAgICAgICAgICBicmFuY2ggPSBiYi5wcm9jZXNzLnJ1bignY2QgJXM7IGdpdCBicmFuY2ggfCBncmVwICJeKiAiIHwgdHIgLWQgIiogIicgJSBwYXRoKVswXQorICAgICAgICAgICAgICAgIGlmIGJyYW5jaC5zdGFydHN3aXRoKCJmYXRhbDoiKToKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoID0gIih1bmtub3duKSIKKyAgICAgICAgICAgICAgICBpZiBicmFuY2g6CisgICAgICAgICAgICAgICAgICAgIGJyYW5jaCA9IGJyYW5jaC5zdHJpcCgnXG4nKQorICAgICAgICAgICAgICAgICAgICB2YXJzLmFwcGVuZChzZWxmLnNldF92YXJzKCJCcmFuY2g6IiwgYnJhbmNoKSkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHNlbGYuc2V0X2NvbmZpZ19tb2RlbCh2YXJzKQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLnNldF9tb2RlbChOb25lKQorCisjCisjIEJ1aWxkRGV0YWlsc1BhZ2UKKyMKKworY2xhc3MgQnVpbGREZXRhaWxzUGFnZSAoSG9iUGFnZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnVpbGRlcik6CisgICAgICAgIHN1cGVyKEJ1aWxkRGV0YWlsc1BhZ2UsIHNlbGYpLl9faW5pdF9fKGJ1aWxkZXIsICJCdWlsZGluZyAuLi4iKQorCisgICAgICAgIHNlbGYubnVtX29mX2lzc3VlcyA9IDAKKyAgICAgICAgc2VsZi5lbmRwYXRoID0gKDAsKQorICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMKKyAgICAgICAgc2VsZi5jcmVhdGVfdmlzdWFsX2VsZW1lbnRzKCkKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMKKyAgICAgICAgc2VsZi52Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDEyKQorCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYm94ID0gZ3RrLlZCb3goRmFsc2UsIDEyKQorICAgICAgICBzZWxmLnRhc2tfc3RhdHVzID0gZ3RrLkxhYmVsKCJcbiIpICMgdG8gZW5zdXJlIGxheW91dCBpcyBjb3JyZWN0CisgICAgICAgIHNlbGYudGFza19zdGF0dXMuc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKKyAgICAgICAgc2VsZi5wcm9ncmVzc19ib3gucGFja19zdGFydChzZWxmLnRhc2tfc3RhdHVzLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfaGJveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICBzZWxmLnByb2dyZXNzX2JveC5wYWNrX2VuZChzZWxmLnByb2dyZXNzX2hib3gsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyID0gSG9iUHJvZ3Jlc3NCYXIoKQorICAgICAgICBzZWxmLnByb2dyZXNzX2hib3gucGFja19zdGFydChzZWxmLnByb2dyZXNzX2JhciwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgc2VsZi5zdG9wX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiU3RvcCIpCisgICAgICAgIHNlbGYuc3RvcF9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuc3RvcF9idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgc2VsZi5zdG9wX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICBzZWxmLnByb2dyZXNzX2hib3gucGFja19lbmQoc2VsZi5zdG9wX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYubm90ZWJvb2sgPSBIb2JOb3RlYm9vaygpCisgICAgICAgIHNlbGYuY29uZmlnX3R2ID0gQnVpbGRDb25maWd1cmF0aW9uVHJlZVZpZXcoKQorICAgICAgICBzZWxmLnNjcm9sbGVkX3ZpZXdfY29uZmlnID0gZ3RrLlNjcm9sbGVkV2luZG93ICgpCisgICAgICAgIHNlbGYuc2Nyb2xsZWRfdmlld19jb25maWcuc2V0X3BvbGljeShndGsuUE9MSUNZX05FVkVSLCBndGsuUE9MSUNZX0FMV0FZUykKKyAgICAgICAgc2VsZi5zY3JvbGxlZF92aWV3X2NvbmZpZy5hZGQoc2VsZi5jb25maWdfdHYpCisgICAgICAgIHNlbGYubm90ZWJvb2suYXBwZW5kX3BhZ2Uoc2VsZi5zY3JvbGxlZF92aWV3X2NvbmZpZywgIkJ1aWxkIGNvbmZpZ3VyYXRpb24iKQorCisgICAgICAgIHNlbGYuZmFpbHVyZV90diA9IEJ1aWxkRmFpbHVyZVRyZWVWaWV3KCkKKyAgICAgICAgc2VsZi5mYWlsdXJlX21vZGVsID0gc2VsZi5idWlsZGVyLmhhbmRsZXIuYnVpbGQubW9kZWwuZmFpbHVyZV9tb2RlbCgpCisgICAgICAgIHNlbGYuZmFpbHVyZV90di5zZXRfbW9kZWwoc2VsZi5mYWlsdXJlX21vZGVsKQorICAgICAgICBzZWxmLnNjcm9sbGVkX3ZpZXdfZmFpbHVyZSA9IGd0ay5TY3JvbGxlZFdpbmRvdyAoKQorICAgICAgICBzZWxmLnNjcm9sbGVkX3ZpZXdfZmFpbHVyZS5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfTkVWRVIsIGd0ay5QT0xJQ1lfQUxXQVlTKQorICAgICAgICBzZWxmLnNjcm9sbGVkX3ZpZXdfZmFpbHVyZS5hZGQoc2VsZi5mYWlsdXJlX3R2KQorICAgICAgICBzZWxmLm5vdGVib29rLmFwcGVuZF9wYWdlKHNlbGYuc2Nyb2xsZWRfdmlld19mYWlsdXJlLCAiSXNzdWVzIikKKworICAgICAgICBzZWxmLmJ1aWxkX3R2ID0gUnVubmluZ0J1aWxkVHJlZVZpZXcocmVhZG9ubHk9VHJ1ZSwgaG9iPVRydWUpCisgICAgICAgIHNlbGYuYnVpbGRfdHYuc2V0X21vZGVsKHNlbGYuYnVpbGRlci5oYW5kbGVyLmJ1aWxkLm1vZGVsKQorICAgICAgICBzZWxmLnNjcm9sbGVkX3ZpZXdfYnVpbGQgPSBndGsuU2Nyb2xsZWRXaW5kb3cgKCkKKyAgICAgICAgc2VsZi5zY3JvbGxlZF92aWV3X2J1aWxkLnNldF9wb2xpY3koZ3RrLlBPTElDWV9ORVZFUiwgZ3RrLlBPTElDWV9BTFdBWVMpCisgICAgICAgIHNlbGYuc2Nyb2xsZWRfdmlld19idWlsZC5hZGQoc2VsZi5idWlsZF90dikKKyAgICAgICAgc2VsZi5ub3RlYm9vay5hcHBlbmRfcGFnZShzZWxmLnNjcm9sbGVkX3ZpZXdfYnVpbGQsICJMb2ciKQorCisgICAgICAgIHNlbGYuYnVpbGRlci5oYW5kbGVyLmJ1aWxkLm1vZGVsLmNvbm5lY3RfYWZ0ZXIoInJvdy1jaGFuZ2VkIiwgc2VsZi5zY3JvbGxfdG9fcHJlc2VudF9yb3csIHNlbGYuc2Nyb2xsZWRfdmlld19idWlsZC5nZXRfdmFkanVzdG1lbnQoKSwgc2VsZi5idWlsZF90dikKKworICAgICAgICBzZWxmLmJ1dHRvbl9ib3ggPSBndGsuSEJveChGYWxzZSwgNikKKyAgICAgICAgc2VsZi5iYWNrX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbignJmx0OyZsdDsgQmFjaycpCisgICAgICAgIHNlbGYuYmFja19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuYmFja19idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgc2VsZi5idXR0b25fYm94LnBhY2tfc3RhcnQoc2VsZi5iYWNrX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgZGVmIHVwZGF0ZV9idWlsZF9zdGF0dXMoc2VsZiwgY3VycmVudCwgdG90YWwsIHRhc2spOgorICAgICAgICByZWNpcGVfcGF0aCwgcmVjaXBlX3Rhc2sgPSB0YXNrLnNwbGl0KCIsICIpCisgICAgICAgIHJlY2lwZSA9IG9zLnBhdGguYmFzZW5hbWUocmVjaXBlX3BhdGgpLnJzdHJpcCgiLmJiIikKKyAgICAgICAgdHNrX21zZyA9ICI8Yj5SdW5uaW5nIHRhc2sgJXMgb2YgJXM6PC9iPiAlc1xuPGI+UmVjaXBlOjwvYj4gJXMiICUgKGN1cnJlbnQsIHRvdGFsLCByZWNpcGVfdGFzaywgcmVjaXBlKQorICAgICAgICBzZWxmLnRhc2tfc3RhdHVzLnNldF9tYXJrdXAodHNrX21zZykKKyAgICAgICAgc2VsZi5zdG9wX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKFRydWUpCisKKyAgICBkZWYgcmVzZXRfYnVpbGRfc3RhdHVzKHNlbGYpOgorICAgICAgICBzZWxmLnRhc2tfc3RhdHVzLnNldF9tYXJrdXAoIlxuIikgIyB0byBlbnN1cmUgbGF5b3V0IGlzIGNvcnJlY3QKKyAgICAgICAgc2VsZi5lbmRwYXRoID0gKDAsKQorCisgICAgZGVmIHNob3dfaXNzdWVzKHNlbGYpOgorICAgICAgICBzZWxmLm51bV9vZl9pc3N1ZXMgKz0gMQorICAgICAgICBzZWxmLm5vdGVib29rLnNob3dfaW5kaWNhdG9yX2ljb24oIklzc3VlcyIsIHNlbGYubnVtX29mX2lzc3VlcykKKyAgICAgICAgc2VsZi5ub3RlYm9vay5xdWV1ZV9kcmF3KCkKKworICAgIGRlZiByZXNldF9pc3N1ZXMoc2VsZik6CisgICAgICAgIHNlbGYubnVtX29mX2lzc3VlcyA9IDAKKyAgICAgICAgc2VsZi5ub3RlYm9vay5oaWRlX2luZGljYXRvcl9pY29uKCJJc3N1ZXMiKQorCisgICAgZGVmIF9yZW1vdmVfYWxsX3dpZGdldChzZWxmKToKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLnZib3guZ2V0X2NoaWxkcmVuKCkgb3IgW10KKyAgICAgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi52Ym94LnJlbW92ZShjaGlsZCkKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLmJveF9ncm91cF9hcmVhLmdldF9jaGlsZHJlbigpIG9yIFtdCisgICAgICAgIGZvciBjaGlsZCBpbiBjaGlsZHJlbjoKKyAgICAgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucmVtb3ZlKGNoaWxkKQorICAgICAgICBjaGlsZHJlbiA9IHNlbGYuZ2V0X2NoaWxkcmVuKCkgb3IgW10KKyAgICAgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi5yZW1vdmUoY2hpbGQpCisKKyAgICBkZWYgYWRkX2J1aWxkX2ZhaWxfdG9wX2JhcihzZWxmLCBhY3Rpb25zLCBsb2dfZmlsZT1Ob25lKToKKyAgICAgICAgcHJpbWFyeV9hY3Rpb24gPSAiRWRpdCAlcyIgJSBhY3Rpb25zCisKKyAgICAgICAgY29sb3IgPSBIb2JDb2xvcnMuRVJST1IKKyAgICAgICAgYnVpbGRfZmFpbF90b3AgPSBndGsuRXZlbnRCb3goKQorICAgICAgICAjYnVpbGRfZmFpbF90b3Auc2V0X3NpemVfcmVxdWVzdCgtMSwgMjAwKQorICAgICAgICBidWlsZF9mYWlsX3RvcC5tb2RpZnlfYmcoZ3RrLlNUQVRFX05PUk1BTCwgZ3RrLmdkay5jb2xvcl9wYXJzZShjb2xvcikpCisKKyAgICAgICAgYnVpbGRfZmFpbF90YWIgPSBndGsuVGFibGUoMTQsIDQ2LCBUcnVlKQorICAgICAgICBidWlsZF9mYWlsX3RvcC5hZGQoYnVpbGRfZmFpbF90YWIpCisKKyAgICAgICAgaWNvbiA9IGd0ay5JbWFnZSgpCisgICAgICAgIGljb25fcGl4X2J1ZmZlciA9IGd0ay5nZGsucGl4YnVmX25ld19mcm9tX2ZpbGUoaGljLklDT05fSU5ESV9FUlJPUl9GSUxFKQorICAgICAgICBpY29uLnNldF9mcm9tX3BpeGJ1ZihpY29uX3BpeF9idWZmZXIpCisgICAgICAgIGJ1aWxkX2ZhaWxfdGFiLmF0dGFjaChpY29uLCAxLCA0LCAwLCA2KQorCisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKKyAgICAgICAgbGFiZWwuc2V0X21hcmt1cCgiPHNwYW4gc2l6ZT0neC1sYXJnZSc+PGI+JXM8L2I+PC9zcGFuPiIgJSBzZWxmLnRpdGxlKQorICAgICAgICBidWlsZF9mYWlsX3RhYi5hdHRhY2gobGFiZWwsIDQsIDI2LCAwLCA2KQorCisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKKyAgICAgICAgIyBFbnN1cmUgdmFyaWFibGUgZGlza19mdWxsIGlzIGRlZmluZWQKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZi5idWlsZGVyLCAnZGlza19mdWxsJyk6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuZGlza19mdWxsID0gRmFsc2UKKworICAgICAgICBpZiBzZWxmLmJ1aWxkZXIuZGlza19mdWxsOgorICAgICAgICAgICAgbWFya3VwID0gIjxzcGFuIHNpemU9J21lZGl1bSc+VGhlcmUgaXMgbm8gZGlzayBzcGFjZSBsZWZ0LCBzbyBIb2IgY2Fubm90IGZpbmlzaCBidWlsZGluZyB5b3VyIGltYWdlLiBGcmVlIHVwIHNvbWUgZGlzayBzcGFjZVxuIgorICAgICAgICAgICAgbWFya3VwICs9ICJhbmQgcmVzdGFydCB0aGUgYnVpbGQuIENoZWNrIHRoZSBcIklzc3Vlc1wiIHRhYiBmb3IgbW9yZSBkZXRhaWxzPC9zcGFuPiIKKyAgICAgICAgICAgIGxhYmVsLnNldF9tYXJrdXAobWFya3VwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGFiZWwuc2V0X21hcmt1cCgiPHNwYW4gc2l6ZT0nbWVkaXVtJz5DaGVjayB0aGUgXCJJc3N1ZXNcIiBpbmZvcm1hdGlvbiBmb3IgbW9yZSBkZXRhaWxzPC9zcGFuPiIpCisgICAgICAgIGJ1aWxkX2ZhaWxfdGFiLmF0dGFjaChsYWJlbCwgNCwgNDAsIDQsIDkpCisKKyAgICAgICAgIyBjcmVhdGUgYnV0dG9uICdFZGl0IHBhY2thZ2VzJworICAgICAgICBhY3Rpb25fYnV0dG9uID0gSG9iQnV0dG9uKHByaW1hcnlfYWN0aW9uKQorICAgICAgICAjYWN0aW9uX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KC0xLCA0MCkKKyAgICAgICAgYWN0aW9uX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJFZGl0IHRoZSAlcyBwYXJhbWV0ZXJzIiAlIGFjdGlvbnMpCisgICAgICAgIGFjdGlvbl9idXR0b24uY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYuZmFpbHVyZV9wcmltYXJ5X2FjdGlvbl9idXR0b25fY2xpY2tlZF9jYiwgcHJpbWFyeV9hY3Rpb24pCisKKyAgICAgICAgaWYgbG9nX2ZpbGU6CisgICAgICAgICAgICBvcGVuX2xvZ19idXR0b24gPSBIb2JBbHRCdXR0b24oIk9wZW4gbG9nIikKKyAgICAgICAgICAgIG9wZW5fbG9nX2J1dHRvbi5zZXRfcmVsaWVmKGd0ay5SRUxJRUZfSEFMRikKKyAgICAgICAgICAgIG9wZW5fbG9nX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJPcGVuIHRoZSBidWlsZCdzIGxvZyBmaWxlIikKKyAgICAgICAgICAgIG9wZW5fbG9nX2J1dHRvbi5jb25uZWN0KCdjbGlja2VkJywgc2VsZi5vcGVuX2xvZ19idXR0b25fY2xpY2tlZF9jYiwgbG9nX2ZpbGUpCisKKyAgICAgICAgYXR0YWNoX3BvcyA9ICgyNCBpZiBsb2dfZmlsZSBlbHNlIDE0KQorICAgICAgICBmaWxlX2J1Z19idXR0b24gPSBIb2JBbHRCdXR0b24oJ0ZpbGUgYSBidWcnKQorICAgICAgICBmaWxlX2J1Z19idXR0b24uc2V0X3JlbGllZihndGsuUkVMSUVGX0hBTEYpCisgICAgICAgIGZpbGVfYnVnX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJPcGVuIHRoZSBZb2N0byBQcm9qZWN0IGJ1ZyB0cmFja2luZyB3ZWJzaXRlIikKKyAgICAgICAgZmlsZV9idWdfYnV0dG9uLmNvbm5lY3QoJ2NsaWNrZWQnLCBzZWxmLmZhaWx1cmVfYWN0aXZhdGVfZmlsZV9idWdfbGlua19jYikKKworICAgICAgICBpZiBub3Qgc2VsZi5idWlsZGVyLmRpc2tfZnVsbDoKKyAgICAgICAgICAgIGJ1aWxkX2ZhaWxfdGFiLmF0dGFjaChhY3Rpb25fYnV0dG9uLCA0LCAxMywgOSwgMTIpCisgICAgICAgICAgICBpZiBsb2dfZmlsZToKKyAgICAgICAgICAgICAgICBidWlsZF9mYWlsX3RhYi5hdHRhY2gob3Blbl9sb2dfYnV0dG9uLCAxNCwgMjMsIDksIDEyKQorICAgICAgICAgICAgYnVpbGRfZmFpbF90YWIuYXR0YWNoKGZpbGVfYnVnX2J1dHRvbiwgYXR0YWNoX3BvcywgYXR0YWNoX3BvcyArIDksIDksIDEyKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN0YXJ0X2J1aWxkID0gSG9iQnV0dG9uKCJSZXN0YXJ0IHRoZSBidWlsZCIpCisgICAgICAgICAgICByZXN0YXJ0X2J1aWxkLnNldF90b29sdGlwX3RleHQoIlJlc3RhcnQgdGhlIGJ1aWxkIikKKyAgICAgICAgICAgIHJlc3RhcnRfYnVpbGQuY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYucmVzdGFydF9idWlsZF9idXR0b25fY2xpY2tlZF9jYikKKworICAgICAgICAgICAgYnVpbGRfZmFpbF90YWIuYXR0YWNoKHJlc3RhcnRfYnVpbGQsIDQsIDEzLCA5LCAxMikKKyAgICAgICAgICAgIGJ1aWxkX2ZhaWxfdGFiLmF0dGFjaChhY3Rpb25fYnV0dG9uLCAxNCwgMjMsIDksIDEyKQorICAgICAgICAgICAgaWYgbG9nX2ZpbGU6CisgICAgICAgICAgICAgICAgYnVpbGRfZmFpbF90YWIuYXR0YWNoKG9wZW5fbG9nX2J1dHRvbiwgYXR0YWNoX3BvcywgYXR0YWNoX3BvcyArIDksIDksIDEyKQorCisgICAgICAgIHNlbGYuYnVpbGRlci5kaXNrX2Z1bGwgPSBGYWxzZQorICAgICAgICByZXR1cm4gYnVpbGRfZmFpbF90b3AKKworICAgIGRlZiBzaG93X2ZhaWxfcGFnZShzZWxmLCB0aXRsZSk6CisgICAgICAgIHNlbGYuX3JlbW92ZV9hbGxfd2lkZ2V0KCkKKyAgICAgICAgc2VsZi50aXRsZSA9ICJIb2IgY2Fubm90IGJ1aWxkIHlvdXIgJXMiICUgdGl0bGUKKworICAgICAgICBzZWxmLmJ1aWxkX2ZhaWxfYmFyID0gc2VsZi5hZGRfYnVpbGRfZmFpbF90b3BfYmFyKHRpdGxlLCBzZWxmLmJ1aWxkZXIuY3VycmVudF9sb2dmaWxlKQorCisgICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLmdyb3VwX2FsaWduLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi5idWlsZF9mYWlsX2JhciwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi52Ym94LCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYubm90ZWJvb2ssIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorICAgICAgICBzZWxmLm5vdGVib29rLnNldF9wYWdlKCJJc3N1ZXMiKQorICAgICAgICBzZWxmLmJhY2tfYnV0dG9uLmhpZGUoKQorCisgICAgZGVmIGFkZF9idWlsZF9zdG9wX3RvcF9iYXIoc2VsZiwgYWN0aW9uLCBsb2dfZmlsZT1Ob25lKToKKyAgICAgICAgY29sb3IgPSBIb2JDb2xvcnMuTElHSFRfR1JBWQorICAgICAgICBidWlsZF9zdG9wX3RvcCA9IGd0ay5FdmVudEJveCgpCisgICAgICAgICNidWlsZF9zdG9wX3RvcC5zZXRfc2l6ZV9yZXF1ZXN0KC0xLCAyMDApCisgICAgICAgIGJ1aWxkX3N0b3BfdG9wLm1vZGlmeV9iZyhndGsuU1RBVEVfTk9STUFMLCBndGsuZ2RrLmNvbG9yX3BhcnNlKGNvbG9yKSkKKyAgICAgICAgYnVpbGRfc3RvcF90b3Auc2V0X2ZsYWdzKGd0ay5DQU5fREVGQVVMVCkKKyAgICAgICAgYnVpbGRfc3RvcF90b3AuZ3JhYl9kZWZhdWx0KCkKKworICAgICAgICBidWlsZF9zdG9wX3RhYiA9IGd0ay5UYWJsZSgxMSwgNDYsIFRydWUpCisgICAgICAgIGJ1aWxkX3N0b3BfdG9wLmFkZChidWlsZF9zdG9wX3RhYikKKworICAgICAgICBpY29uID0gZ3RrLkltYWdlKCkKKyAgICAgICAgaWNvbl9waXhfYnVmZmVyID0gZ3RrLmdkay5waXhidWZfbmV3X2Zyb21fZmlsZShoaWMuSUNPTl9JTkZPX0hPVkVSX0ZJTEUpCisgICAgICAgIGljb24uc2V0X2Zyb21fcGl4YnVmKGljb25fcGl4X2J1ZmZlcikKKyAgICAgICAgYnVpbGRfc3RvcF90YWIuYXR0YWNoKGljb24sIDEsIDQsIDAsIDYpCisKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBsYWJlbC5zZXRfbWFya3VwKCI8c3BhbiBzaXplPSd4LWxhcmdlJz48Yj4lczwvYj48L3NwYW4+IiAlIHNlbGYudGl0bGUpCisgICAgICAgIGJ1aWxkX3N0b3BfdGFiLmF0dGFjaChsYWJlbCwgNCwgMjYsIDAsIDYpCisKKyAgICAgICAgYWN0aW9uX2J1dHRvbiA9IEhvYkJ1dHRvbigiRWRpdCAlcyIgJSBhY3Rpb24pCisgICAgICAgIGFjdGlvbl9idXR0b24uc2V0X3NpemVfcmVxdWVzdCgtMSwgNDApCisgICAgICAgIGlmIGFjdGlvbiA9PSAiaW1hZ2UiOgorICAgICAgICAgICAgYWN0aW9uX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJFZGl0IHRoZSBpbWFnZSBwYXJhbWV0ZXJzIikKKyAgICAgICAgZWxpZiBhY3Rpb24gPT0gInJlY2lwZXMiOgorICAgICAgICAgICAgYWN0aW9uX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJFZGl0IHRoZSBpbmNsdWRlZCByZWNpcGVzIikKKyAgICAgICAgZWxpZiBhY3Rpb24gPT0gInBhY2thZ2VzIjoKKyAgICAgICAgICAgIGFjdGlvbl9idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiRWRpdCB0aGUgaW5jbHVkZWQgcGFja2FnZXMiKQorICAgICAgICBhY3Rpb25fYnV0dG9uLmNvbm5lY3QoJ2NsaWNrZWQnLCBzZWxmLnN0b3BfcHJpbWFyeV9hY3Rpb25fYnV0dG9uX2NsaWNrZWRfY2IsIGFjdGlvbikKKyAgICAgICAgYnVpbGRfc3RvcF90YWIuYXR0YWNoKGFjdGlvbl9idXR0b24sIDQsIDEzLCA2LCA5KQorCisgICAgICAgIGlmIGxvZ19maWxlOgorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJPcGVuIGxvZyIpCisgICAgICAgICAgICBvcGVuX2xvZ19idXR0b24uc2V0X3JlbGllZihndGsuUkVMSUVGX0hBTEYpCisgICAgICAgICAgICBvcGVuX2xvZ19idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiT3BlbiB0aGUgYnVpbGQncyBsb2cgZmlsZSIpCisgICAgICAgICAgICBvcGVuX2xvZ19idXR0b24uY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYub3Blbl9sb2dfYnV0dG9uX2NsaWNrZWRfY2IsIGxvZ19maWxlKQorICAgICAgICAgICAgYnVpbGRfc3RvcF90YWIuYXR0YWNoKG9wZW5fbG9nX2J1dHRvbiwgMTQsIDIzLCA2LCA5KQorCisgICAgICAgIGF0dGFjaF9wb3MgPSAoMjQgaWYgbG9nX2ZpbGUgZWxzZSAxNCkKKyAgICAgICAgYnVpbGRfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJCdWlsZCBuZXcgaW1hZ2UiKQorICAgICAgICAjYnVpbGRfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoLTEsIDQwKQorICAgICAgICBidWlsZF9idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiQ3JlYXRlIGEgbmV3IGltYWdlIGZyb20gc2NyYXRjaCIpCisgICAgICAgIGJ1aWxkX2J1dHRvbi5jb25uZWN0KCdjbGlja2VkJywgc2VsZi5uZXdfaW1hZ2VfYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgIGJ1aWxkX3N0b3BfdGFiLmF0dGFjaChidWlsZF9idXR0b24sIGF0dGFjaF9wb3MsIGF0dGFjaF9wb3MgKyA5LCA2LCA5KQorCisgICAgICAgIHJldHVybiBidWlsZF9zdG9wX3RvcCwgYWN0aW9uX2J1dHRvbgorCisgICAgZGVmIHNob3dfc3RvcF9wYWdlKHNlbGYsIGFjdGlvbik6CisgICAgICAgIHNlbGYuX3JlbW92ZV9hbGxfd2lkZ2V0KCkKKyAgICAgICAgc2VsZi50aXRsZSA9ICJCdWlsZCBzdG9wcGVkIgorICAgICAgICBzZWxmLmJ1aWxkX3N0b3BfYmFyLCBhY3Rpb25fYnV0dG9uID0gc2VsZi5hZGRfYnVpbGRfc3RvcF90b3BfYmFyKGFjdGlvbiwgc2VsZi5idWlsZGVyLmN1cnJlbnRfbG9nZmlsZSkKKworICAgICAgICBzZWxmLnBhY2tfc3RhcnQoc2VsZi5ncm91cF9hbGlnbiwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYuYnVpbGRfc3RvcF9iYXIsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYudmJveCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLm5vdGVib29rLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKyAgICAgICAgc2VsZi5iYWNrX2J1dHRvbi5oaWRlKCkKKyAgICAgICAgcmV0dXJuIGFjdGlvbl9idXR0b24KKworICAgIGRlZiBzaG93X3BhZ2Uoc2VsZiwgc3RlcCk6CisgICAgICAgIHNlbGYuX3JlbW92ZV9hbGxfd2lkZ2V0KCkKKyAgICAgICAgaWYgc3RlcCA9PSBzZWxmLmJ1aWxkZXIuUEFDS0FHRV9HRU5FUkFUSU5HIG9yIHN0ZXAgPT0gc2VsZi5idWlsZGVyLkZBU1RfSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgIHNlbGYudGl0bGUgPSAiQnVpbGRpbmcgcGFja2FnZXMgLi4uIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50aXRsZSA9ICJCdWlsZGluZyBpbWFnZSAuLi4iCisgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc190b3AgPSBzZWxmLmFkZF9vbnRvX3RvcF9iYXIoTm9uZSkKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuYnVpbGRfZGV0YWlsc190b3AsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuZ3JvdXBfYWxpZ24sIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYudmJveCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5yZXNldCgpCisgICAgICAgIHNlbGYuY29uZmlnX3R2LnJlc2V0KCkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi5wcm9ncmVzc19ib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLm5vdGVib29rLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19lbmQoc2VsZi5idXR0b25fYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorICAgICAgICBzZWxmLm5vdGVib29rLnNldF9wYWdlKCJMb2ciKQorICAgICAgICBzZWxmLmJhY2tfYnV0dG9uLmhpZGUoKQorCisgICAgICAgIHNlbGYucmVzZXRfYnVpbGRfc3RhdHVzKCkKKyAgICAgICAgc2VsZi5yZXNldF9pc3N1ZXMoKQorCisgICAgZGVmIHVwZGF0ZV9wcm9ncmVzc19iYXIoc2VsZiwgdGl0bGUsIGZyYWN0aW9uLCBzdGF0dXM9Tm9uZSk6CisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnVwZGF0ZShmcmFjdGlvbikKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIuc2V0X3RpdGxlKHRpdGxlKQorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zZXRfcmNzdHlsZShzdGF0dXMpCisKKyAgICBkZWYgYmFja19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19jb25maWd1cmF0aW9uKCkKKworICAgIGRlZiBuZXdfaW1hZ2VfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnJlc2V0KCkKKworICAgIGRlZiBzaG93X2JhY2tfYnV0dG9uKHNlbGYpOgorICAgICAgICBzZWxmLmJhY2tfYnV0dG9uLnNob3coKQorCisgICAgZGVmIHN0b3BfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnN0b3BfYnVpbGQoKQorCisgICAgZGVmIGhpZGVfc3RvcF9idXR0b24oc2VsZik6CisgICAgICAgIHNlbGYuc3RvcF9idXR0b24uc2V0X3NlbnNpdGl2ZShGYWxzZSkKKyAgICAgICAgc2VsZi5zdG9wX2J1dHRvbi5oaWRlKCkKKworICAgIGRlZiBzY3JvbGxfdG9fcHJlc2VudF9yb3coc2VsZiwgbW9kZWwsIHBhdGgsIGl0ZXIsIHZfYWRqLCB0cmVldmlldyk6CisgICAgICAgIGlmIHRyZWV2aWV3IGFuZCB2X2FkajoKKyAgICAgICAgICAgIGlmIHBhdGhbMF0gPiBzZWxmLmVuZHBhdGhbMF06ICMgY2hlY2sgdGhlIGV2ZW50IGlzIGEgbmV3IHJvdyBhcHBlbmQgb3Igbm90CisgICAgICAgICAgICAgICAgc2VsZi5lbmRwYXRoID0gcGF0aAorICAgICAgICAgICAgICAgICMgY2hlY2sgdGhlIGd0ay5hZGp1c3RtZW50IHBvc2l0aW9uIGlzIGF0IGVuZCBib3VuZGFyeSBvciBub3QKKyAgICAgICAgICAgICAgICBpZiAodl9hZGoudXBwZXIgPD0gdl9hZGoucGFnZV9zaXplKSBvciAodl9hZGoudmFsdWUgPT0gdl9hZGoudXBwZXIgLSB2X2Fkai5wYWdlX3NpemUpOgorICAgICAgICAgICAgICAgICAgICB0cmVldmlldy5zY3JvbGxfdG9fY2VsbChwYXRoKQorCisgICAgZGVmIHNob3dfY29uZmlndXJhdGlvbnMoc2VsZiwgY29uZmlndXJhdGlvbnMsIHBhcmFtcyk6CisgICAgICAgIHNlbGYuY29uZmlnX3R2LnNob3coY29uZmlndXJhdGlvbnMsIHBhcmFtcykKKworICAgIGRlZiBmYWlsdXJlX3ByaW1hcnlfYWN0aW9uX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbiwgYWN0aW9uKToKKyAgICAgICAgaWYgIkVkaXQgcmVjaXBlcyIgaW4gYWN0aW9uOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfcmVjaXBlcygpCisgICAgICAgIGVsaWYgIkVkaXQgcGFja2FnZXMiIGluIGFjdGlvbjoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X3BhY2thZ2VzKCkKKyAgICAgICAgZWxpZiAiRWRpdCBpbWFnZSIgaW4gYWN0aW9uOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfY29uZmlndXJhdGlvbigpCisKKyAgICBkZWYgcmVzdGFydF9idWlsZF9idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIuanVzdF9iYWtlKCkKKworICAgIGRlZiBzdG9wX3ByaW1hcnlfYWN0aW9uX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbiwgYWN0aW9uKToKKyAgICAgICAgaWYgInJlY2lwZXMiIGluIGFjdGlvbjoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X3JlY2lwZXMoKQorICAgICAgICBlbGlmICJwYWNrYWdlcyIgaW4gYWN0aW9uOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfcGFja2FnZXMoKQorICAgICAgICBlbGlmICJpbWFnZSIgaW4gYWN0aW9uOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfY29uZmlndXJhdGlvbigpCisKKyAgICBkZWYgb3Blbl9sb2dfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uLCBsb2dfZmlsZSk6CisgICAgICAgIGlmIGxvZ19maWxlOgorICAgICAgICAgICAgbG9nX2ZpbGUgPSAiZmlsZTovLy8iICsgbG9nX2ZpbGUKKyAgICAgICAgICAgIGd0ay5zaG93X3VyaShzY3JlZW49YnV0dG9uLmdldF9zY3JlZW4oKSwgdXJpPWxvZ19maWxlLCB0aW1lc3RhbXA9MCkKKworICAgIGRlZiBmYWlsdXJlX2FjdGl2YXRlX2ZpbGVfYnVnX2xpbmtfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgYnV0dG9uLmNoaWxkLmVtaXQoJ2FjdGl2YXRlLWxpbmsnLCAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmciKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvYnVpbGRlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2J1aWxkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGNjNDEwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2J1aWxkZXIucHkKQEAgLTAsMCArMSwxNDc1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBnbGliCitpbXBvcnQgZ3RrLCBnb2JqZWN0CitpbXBvcnQgY29weQoraW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHNobGV4CitpbXBvcnQgcmUKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3lzCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgdGltZQorZnJvbSBiYi51aS5jcnVtYnMuaW1hZ2Vjb25maWd1cmF0aW9ucGFnZSBpbXBvcnQgSW1hZ2VDb25maWd1cmF0aW9uUGFnZQorZnJvbSBiYi51aS5jcnVtYnMucmVjaXBlc2VsZWN0aW9ucGFnZSBpbXBvcnQgUmVjaXBlU2VsZWN0aW9uUGFnZQorZnJvbSBiYi51aS5jcnVtYnMucGFja2FnZXNlbGVjdGlvbnBhZ2UgaW1wb3J0IFBhY2thZ2VTZWxlY3Rpb25QYWdlCitmcm9tIGJiLnVpLmNydW1icy5idWlsZGRldGFpbHNwYWdlIGltcG9ydCBCdWlsZERldGFpbHNQYWdlCitmcm9tIGJiLnVpLmNydW1icy5pbWFnZWRldGFpbHNwYWdlIGltcG9ydCBJbWFnZURldGFpbHNQYWdlCitmcm9tIGJiLnVpLmNydW1icy5zYW5pdHljaGVja3BhZ2UgaW1wb3J0IFNhbml0eUNoZWNrUGFnZQorZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBod2MsIEhvYkJ1dHRvbiwgSG9iQWx0QnV0dG9uCitmcm9tIGJiLnVpLmNydW1icy5wZXJzaXN0ZW50dG9vbHRpcCBpbXBvcnQgUGVyc2lzdGVudFRvb2x0aXAKK2ltcG9ydCBiYi51aS5jcnVtYnMudXRpbHMKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNtZXNzYWdlZGlhbG9nIGltcG9ydCBDcnVtYnNNZXNzYWdlRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuc2ltcGxlc2V0dGluZ3NkaWFsb2cgaW1wb3J0IFNpbXBsZVNldHRpbmdzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuYWR2YW5jZWRzZXR0aW5nc2RpYWxvZyBpbXBvcnQgQWR2YW5jZWRTZXR0aW5nc0RpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmRlcGxveWltYWdlZGlhbG9nIGltcG9ydCBEZXBsb3lJbWFnZURpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmxheWVyc2VsZWN0aW9uZGlhbG9nIGltcG9ydCBMYXllclNlbGVjdGlvbkRpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmltYWdlc2VsZWN0aW9uZGlhbG9nIGltcG9ydCBJbWFnZVNlbGVjdGlvbkRpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLnBhcnNpbmd3YXJuaW5nc2RpYWxvZyBpbXBvcnQgUGFyc2luZ1dhcm5pbmdzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcucHJvcGVydHlkaWFsb2cgaW1wb3J0IFByb3BlcnR5RGlhbG9nCisKK2hvYlZlciA9IDIwMTIwODA4CisKK2NsYXNzIENvbmZpZ3VyYXRpb246CisgICAgJycnUmVwcmVzZW50cyB0aGUgZGF0YSBzdHJ1Y3R1cmUgb2YgY29uZmlndXJhdGlvbi4nJycKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJzZV9wcm94eV9zdHJpbmcoY2xzLCBwcm94eSk6CisgICAgICAgIHBhdHRlcm4gPSAiXlxzKigoaHR0cHxodHRwc3xmdHB8c29ja3N8Y3ZzKTovLyk/KChcUyspOihcUyspQCk/KFteXHM6XSspKDooXGQrKSk/Lz8iCisgICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKHBhdHRlcm4sIHByb3h5KQorICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgyKSwgbWF0Y2guZ3JvdXAoNCksIG1hdGNoLmdyb3VwKDUpLCBtYXRjaC5ncm91cCg2KSwgbWF0Y2guZ3JvdXAoOCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lLCBOb25lLCAiIiwgIiIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWtlX2hvc3Rfc3RyaW5nKGNscywgcHJvdCwgdXNlciwgcGFzc3dkLCBob3N0LCBkZWZhdWx0X3Byb3Q9IiIpOgorICAgICAgICBpZiBob3N0ID09IE5vbmUgb3IgaG9zdCA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgICAgIHBhc3N3ZCA9IHBhc3N3ZCBvciAiIgorCisgICAgICAgIGlmIHVzZXIgIT0gTm9uZSBhbmQgdXNlciAhPSAiIjoKKyAgICAgICAgICAgIGlmIHByb3QgPT0gTm9uZSBvciBwcm90ID09ICIiOgorICAgICAgICAgICAgICAgIHByb3QgPSBkZWZhdWx0X3Byb3QKKyAgICAgICAgICAgIHJldHVybiBwcm90ICsgIjovLyIgKyB1c2VyICsgIjoiICsgcGFzc3dkICsgIkAiICsgaG9zdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcHJvdCA9PSBOb25lIG9yIHByb3QgPT0gIiI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGhvc3QKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHByb3QgKyAiOi8vIiArIGhvc3QKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWtlX3BvcnRfc3RyaW5nKGNscywgcG9ydCk6CisgICAgICAgIHBvcnQgPSBwb3J0IG9yICIiCisgICAgICAgIHJldHVybiBwb3J0CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbWFrZV9wcm94eV9zdHJpbmcoY2xzLCBwcm90LCB1c2VyLCBwYXNzd2QsIGhvc3QsIHBvcnQsIGRlZmF1bHRfcHJvdD0iIik6CisgICAgICAgIGlmIGhvc3QgPT0gTm9uZSBvciBob3N0ID09ICIiOiMgb3IgcG9ydCA9PSBOb25lIG9yIHBvcnQgPT0gIiI6CisgICAgICAgICAgICByZXR1cm4gIiIKKworICAgICAgICByZXR1cm4gQ29uZmlndXJhdGlvbi5tYWtlX2hvc3Rfc3RyaW5nKHByb3QsIHVzZXIsIHBhc3N3ZCwgaG9zdCwgZGVmYXVsdF9wcm90KSArICgiOiIgKyBDb25maWd1cmF0aW9uLm1ha2VfcG9ydF9zdHJpbmcocG9ydCkgaWYgcG9ydCBlbHNlICIiKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmN1cnJfbWFjaCA9ICIiCisgICAgICAgIHNlbGYuc2VsZWN0ZWRfaW1hZ2UgPSBOb25lCisgICAgICAgICMgc2V0dGluZ3MKKyAgICAgICAgc2VsZi5jdXJyX2Rpc3RybyA9ICIiCisgICAgICAgIHNlbGYuZGxkaXIgPSBzZWxmLnNzdGF0ZWRpciA9IHNlbGYuc3N0YXRlbWlycm9yID0gIiIKKyAgICAgICAgc2VsZi5wbWFrZSA9IHNlbGYuYmJ0aHJlYWQgPSAwCisgICAgICAgIHNlbGYuY3Vycl9wYWNrYWdlX2Zvcm1hdCA9ICIiCisgICAgICAgIHNlbGYuaW1hZ2Vfcm9vdGZzX3NpemUgPSBzZWxmLmltYWdlX2V4dHJhX3NpemUgPSAwCisgICAgICAgIHNlbGYuaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yID0gMQorICAgICAgICBzZWxmLmluY29tcGF0X2xpY2Vuc2UgPSAiIgorICAgICAgICBzZWxmLmN1cnJfc2RrX21hY2hpbmUgPSAiIgorICAgICAgICBzZWxmLmNvbmZfdmVyc2lvbiA9IHNlbGYubGNvbmZfdmVyc2lvbiA9ICIiCisgICAgICAgIHNlbGYuZXh0cmFfc2V0dGluZyA9IHt9CisgICAgICAgIHNlbGYudG9vbGNoYWluX2J1aWxkID0gRmFsc2UKKyAgICAgICAgc2VsZi5pbWFnZV9mc3R5cGVzID0gIiIKKyAgICAgICAgc2VsZi5pbWFnZV9zaXplID0gTm9uZQorICAgICAgICBzZWxmLmltYWdlX3BhY2thZ2VzID0gW10KKyAgICAgICAgIyBiYmxheWVycy5jb25mCisgICAgICAgIHNlbGYubGF5ZXJzID0gW10KKyAgICAgICAgIyBpbWFnZS9yZWNpcGVzL3BhY2thZ2VzCisgICAgICAgIHNlbGYuY2xlYXJfc2VsZWN0aW9uKCkKKworICAgICAgICBzZWxmLnVzZXJfc2VsZWN0ZWRfcGFja2FnZXMgPSBbXQorCisgICAgICAgIHNlbGYuZGVmYXVsdF90YXNrID0gImJ1aWxkIgorCisgICAgICAgICMgcHJveHkgc2V0dGluZ3MKKyAgICAgICAgc2VsZi5lbmFibGVfcHJveHkgPSBOb25lCisgICAgICAgIHNlbGYuc2FtZV9wcm94eSA9IEZhbHNlCisgICAgICAgIHNlbGYucHJveGllcyA9IHsKKyAgICAgICAgICAgICJodHRwIiAgOiBbTm9uZSwgTm9uZSwgTm9uZSwgIiIsICIiXSwgICMgcHJvdG9jb2wgOiBbcHJvdCwgdXNlciwgcGFzc3dkLCBob3N0LCBwb3J0XQorICAgICAgICAgICAgImh0dHBzIiA6IFtOb25lLCBOb25lLCBOb25lLCAiIiwgIiJdLAorICAgICAgICAgICAgImZ0cCIgICA6IFtOb25lLCBOb25lLCBOb25lLCAiIiwgIiJdLAorICAgICAgICAgICAgInNvY2tzIiA6IFtOb25lLCBOb25lLCBOb25lLCAiIiwgIiJdLAorICAgICAgICAgICAgImN2cyIgICA6IFtOb25lLCBOb25lLCBOb25lLCAiIiwgIiJdLAorICAgICAgICB9CisKKyAgICBkZWYgY2xlYXJfc2VsZWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLnNlbGVjdGVkX3JlY2lwZXMgPSBbXQorICAgICAgICBzZWxmLnNlbGVjdGVkX3BhY2thZ2VzID0gW10KKyAgICAgICAgc2VsZi5pbml0aWFsX3NlbGVjdGVkX2ltYWdlID0gTm9uZQorICAgICAgICBzZWxmLmluaXRpYWxfc2VsZWN0ZWRfcGFja2FnZXMgPSBbXQorICAgICAgICBzZWxmLmluaXRpYWxfdXNlcl9zZWxlY3RlZF9wYWNrYWdlcyA9IFtdCisKKyAgICBkZWYgc3BsaXRfcHJveHkoc2VsZiwgcHJvdG9jb2wsIHByb3h5KToKKyAgICAgICAgZW50cnkgPSBbXQorICAgICAgICBwcm90LCB1c2VyLCBwYXNzd2QsIGhvc3QsIHBvcnQgPSBDb25maWd1cmF0aW9uLnBhcnNlX3Byb3h5X3N0cmluZyhwcm94eSkKKyAgICAgICAgZW50cnkuYXBwZW5kKHByb3QpCisgICAgICAgIGVudHJ5LmFwcGVuZCh1c2VyKQorICAgICAgICBlbnRyeS5hcHBlbmQocGFzc3dkKQorICAgICAgICBlbnRyeS5hcHBlbmQoaG9zdCkKKyAgICAgICAgZW50cnkuYXBwZW5kKHBvcnQpCisgICAgICAgIHNlbGYucHJveGllc1twcm90b2NvbF0gPSBlbnRyeQorCisgICAgZGVmIGNvbWJpbmVfcHJveHkoc2VsZiwgcHJvdG9jb2wpOgorICAgICAgICBlbnRyeSA9IHNlbGYucHJveGllc1twcm90b2NvbF0KKyAgICAgICAgcmV0dXJuIENvbmZpZ3VyYXRpb24ubWFrZV9wcm94eV9zdHJpbmcoZW50cnlbMF0sIGVudHJ5WzFdLCBlbnRyeVsyXSwgZW50cnlbM10sIGVudHJ5WzRdLCBwcm90b2NvbCkKKworICAgIGRlZiBjb21iaW5lX2hvc3Rfb25seShzZWxmLCBwcm90b2NvbCk6CisgICAgICAgIGVudHJ5ID0gc2VsZi5wcm94aWVzW3Byb3RvY29sXQorICAgICAgICByZXR1cm4gQ29uZmlndXJhdGlvbi5tYWtlX2hvc3Rfc3RyaW5nKGVudHJ5WzBdLCBlbnRyeVsxXSwgZW50cnlbMl0sIGVudHJ5WzNdLCBwcm90b2NvbCkKKworICAgIGRlZiBjb21iaW5lX3BvcnRfb25seShzZWxmLCBwcm90b2NvbCk6CisgICAgICAgIGVudHJ5ID0gc2VsZi5wcm94aWVzW3Byb3RvY29sXQorICAgICAgICByZXR1cm4gQ29uZmlndXJhdGlvbi5tYWtlX3BvcnRfc3RyaW5nKGVudHJ5WzRdKQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYXJhbXMpOgorICAgICAgICAjIHNldHRpbmdzCisgICAgICAgIHNlbGYuY3Vycl9kaXN0cm8gPSBwYXJhbXNbImRpc3RybyJdCisgICAgICAgIHNlbGYuZGxkaXIgPSBwYXJhbXNbImRsZGlyIl0KKyAgICAgICAgc2VsZi5zc3RhdGVkaXIgPSBwYXJhbXNbInNzdGF0ZWRpciJdCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yID0gcGFyYW1zWyJzc3RhdGVtaXJyb3IiXQorICAgICAgICBzZWxmLnBtYWtlID0gaW50KHBhcmFtc1sicG1ha2UiXS5zcGxpdCgpWzFdKQorICAgICAgICBzZWxmLmJidGhyZWFkID0gcGFyYW1zWyJiYnRocmVhZCJdCisgICAgICAgIHNlbGYuY3Vycl9wYWNrYWdlX2Zvcm1hdCA9ICIgIi5qb2luKHBhcmFtc1sicGNsYXNzIl0uc3BsaXQoInBhY2thZ2VfIikpLnN0cmlwKCkKKyAgICAgICAgc2VsZi5pbWFnZV9yb290ZnNfc2l6ZSA9IHBhcmFtc1siaW1hZ2Vfcm9vdGZzX3NpemUiXQorICAgICAgICBzZWxmLmltYWdlX2V4dHJhX3NpemUgPSBwYXJhbXNbImltYWdlX2V4dHJhX3NpemUiXQorICAgICAgICBzZWxmLmltYWdlX292ZXJoZWFkX2ZhY3RvciA9IHBhcmFtc1snaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yJ10KKyAgICAgICAgc2VsZi5pbmNvbXBhdF9saWNlbnNlID0gcGFyYW1zWyJpbmNvbXBhdF9saWNlbnNlIl0KKyAgICAgICAgc2VsZi5jdXJyX3Nka19tYWNoaW5lID0gcGFyYW1zWyJzZGtfbWFjaGluZSJdCisgICAgICAgIHNlbGYuY29uZl92ZXJzaW9uID0gcGFyYW1zWyJjb25mX3ZlcnNpb24iXQorICAgICAgICBzZWxmLmxjb25mX3ZlcnNpb24gPSBwYXJhbXNbImxjb25mX3ZlcnNpb24iXQorICAgICAgICBzZWxmLmltYWdlX2ZzdHlwZXMgPSBwYXJhbXNbImltYWdlX2ZzdHlwZXMiXQorICAgICAgICAjIHNlbGYuZXh0cmFfc2V0dGluZy9zZWxmLnRvb2xjaGFpbl9idWlsZAorICAgICAgICAjIGJibGF5ZXJzLmNvbmYKKyAgICAgICAgc2VsZi5sYXllcnMgPSBwYXJhbXNbImxheWVyIl0uc3BsaXQoKQorICAgICAgICBzZWxmLmxheWVyc19ub25fcmVtb3ZhYmxlID0gcGFyYW1zWyJsYXllcnNfbm9uX3JlbW92YWJsZSJdLnNwbGl0KCkKKyAgICAgICAgc2VsZi5kZWZhdWx0X3Rhc2sgPSBwYXJhbXNbImRlZmF1bHRfdGFzayJdCisKKyAgICAgICAgIyBwcm94eSBzZXR0aW5ncworICAgICAgICBzZWxmLmVuYWJsZV9wcm94eSA9IHBhcmFtc1siaHR0cF9wcm94eSJdICE9ICIiIG9yIHBhcmFtc1siaHR0cHNfcHJveHkiXSAhPSAiIiBcCisgICAgICAgICAgICBvciBwYXJhbXNbImZ0cF9wcm94eSJdICE9ICIiIG9yIHBhcmFtc1sic29ja3NfcHJveHkiXSAhPSAiIiBcCisgICAgICAgICAgICBvciBwYXJhbXNbImN2c19wcm94eV9ob3N0Il0gIT0gIiIgb3IgcGFyYW1zWyJjdnNfcHJveHlfcG9ydCJdICE9ICIiCisgICAgICAgIHNlbGYuc3BsaXRfcHJveHkoImh0dHAiLCBwYXJhbXNbImh0dHBfcHJveHkiXSkKKyAgICAgICAgc2VsZi5zcGxpdF9wcm94eSgiaHR0cHMiLCBwYXJhbXNbImh0dHBzX3Byb3h5Il0pCisgICAgICAgIHNlbGYuc3BsaXRfcHJveHkoImZ0cCIsIHBhcmFtc1siZnRwX3Byb3h5Il0pCisgICAgICAgIHNlbGYuc3BsaXRfcHJveHkoInNvY2tzIiwgcGFyYW1zWyJzb2Nrc19wcm94eSJdKQorICAgICAgICBzZWxmLnNwbGl0X3Byb3h5KCJjdnMiLCBwYXJhbXNbImN2c19wcm94eV9ob3N0Il0gKyAiOiIgKyBwYXJhbXNbImN2c19wcm94eV9wb3J0Il0pCisKKyAgICBkZWYgc2F2ZShzZWxmLCBoYW5kbGVyLCBkZWZhdWx0cz1GYWxzZSk6CisgICAgICAgICMgYmJsYXllcnMuY29uZgorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiQkJMQVlFUlMiLCBzZWxmLmxheWVycywgImJibGF5ZXJzLmNvbmYiKQorICAgICAgICAjIGxvY2FsLmNvbmYKKyAgICAgICAgaWYgbm90IGRlZmF1bHRzOgorICAgICAgICAgICAgaGFuZGxlci5lYXJseV9hc3NpZ25fdmFyX2luX2ZpbGUoIk1BQ0hJTkUiLCBzZWxmLmN1cnJfbWFjaCwgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiRElTVFJPIiwgc2VsZi5jdXJyX2Rpc3RybywgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiRExfRElSIiwgc2VsZi5kbGRpciwgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiU1NUQVRFX0RJUiIsIHNlbGYuc3N0YXRlZGlyLCAibG9jYWwuY29uZiIpCisgICAgICAgIHNzdGF0ZV9taXJyb3JfbGlzdCA9IHNlbGYuc3N0YXRlbWlycm9yLnNwbGl0KCJcXG4gIikKKyAgICAgICAgc3N0YXRlX21pcnJvcl9saXN0X21vZGlmaWVkID0gW10KKyAgICAgICAgZm9yIG1pcnJvciBpbiBzc3RhdGVfbWlycm9yX2xpc3Q6CisgICAgICAgICAgICBpZiBtaXJyb3IgIT0gIiI6CisgICAgICAgICAgICAgICAgbWlycm9yID0gbWlycm9yICsgIlxcbiIKKyAgICAgICAgICAgICAgICBzc3RhdGVfbWlycm9yX2xpc3RfbW9kaWZpZWQuYXBwZW5kKG1pcnJvcikKKyAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIlNTVEFURV9NSVJST1JTIiwgc3N0YXRlX21pcnJvcl9saXN0X21vZGlmaWVkLCAibG9jYWwuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJQQVJBTExFTF9NQUtFIiwgIi1qICVzIiAlIHNlbGYucG1ha2UsICJsb2NhbC5jb25mIikKKyAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIkJCX05VTUJFUl9USFJFQURTIiwgc2VsZi5iYnRocmVhZCwgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiUEFDS0FHRV9DTEFTU0VTIiwgIiAiLmpvaW4oWyJwYWNrYWdlXyIgKyBpIGZvciBpIGluIHNlbGYuY3Vycl9wYWNrYWdlX2Zvcm1hdC5zcGxpdCgpXSksICJsb2NhbC5jb25mIikKKyAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIklNQUdFX1JPT1RGU19TSVpFIiwgc2VsZi5pbWFnZV9yb290ZnNfc2l6ZSwgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiSU1BR0VfRVhUUkFfU1BBQ0UiLCBzZWxmLmltYWdlX2V4dHJhX3NpemUsICJsb2NhbC5jb25mIikKKyAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIklOQ09NUEFUSUJMRV9MSUNFTlNFIiwgc2VsZi5pbmNvbXBhdF9saWNlbnNlLCAibG9jYWwuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJTREtNQUNISU5FIiwgc2VsZi5jdXJyX3Nka19tYWNoaW5lLCAibG9jYWwuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJDT05GX1ZFUlNJT04iLCBzZWxmLmNvbmZfdmVyc2lvbiwgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiTENPTkZfVkVSU0lPTiIsIHNlbGYubGNvbmZfdmVyc2lvbiwgImJibGF5ZXJzLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF9leHRyYV9jb25maWcoc2VsZi5leHRyYV9zZXR0aW5nKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiVE9PTENIQUlOX0JVSUxEIiwgc2VsZi50b29sY2hhaW5fYnVpbGQsICJsb2NhbC5jb25mIikKKyAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIklNQUdFX0ZTVFlQRVMiLCBzZWxmLmltYWdlX2ZzdHlwZXMsICJsb2NhbC5jb25mIikKKyAgICAgICAgaWYgbm90IGRlZmF1bHRzOgorICAgICAgICAgICAgIyBpbWFnZS9yZWNpcGVzL3BhY2thZ2VzCisgICAgICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiX19TRUxFQ1RFRF9JTUFHRV9fIiwgc2VsZi5zZWxlY3RlZF9pbWFnZSwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIkRFUEVORFMiLCBzZWxmLnNlbGVjdGVkX3JlY2lwZXMsICJsb2NhbC5jb25mIikKKyAgICAgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJJTUFHRV9JTlNUQUxMIiwgc2VsZi51c2VyX3NlbGVjdGVkX3BhY2thZ2VzLCAibG9jYWwuY29uZiIpCisgICAgICAgICMgcHJveHkKKyAgICAgICAgaWYgc2VsZi5lbmFibGVfcHJveHkgPT0gVHJ1ZToKKyAgICAgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJodHRwX3Byb3h5Iiwgc2VsZi5jb21iaW5lX3Byb3h5KCJodHRwIiksICJsb2NhbC5jb25mIikKKyAgICAgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJodHRwc19wcm94eSIsIHNlbGYuY29tYmluZV9wcm94eSgiaHR0cHMiKSwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoImZ0cF9wcm94eSIsIHNlbGYuY29tYmluZV9wcm94eSgiZnRwIiksICJsb2NhbC5jb25mIikKKyAgICAgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJhbGxfcHJveHkiLCBzZWxmLmNvbWJpbmVfcHJveHkoInNvY2tzIiksICJsb2NhbC5jb25mIikKKyAgICAgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJDVlNfUFJPWFlfSE9TVCIsIHNlbGYuY29tYmluZV9ob3N0X29ubHkoImN2cyIpLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiQ1ZTX1BST1hZX1BPUlQiLCBzZWxmLmNvbWJpbmVfcG9ydF9vbmx5KCJjdnMiKSwgImxvY2FsLmNvbmYiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoImh0dHBfcHJveHkiLCAiIiwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoImh0dHBzX3Byb3h5IiwgIiIsICJsb2NhbC5jb25mIikKKyAgICAgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJmdHBfcHJveHkiLCAiIiwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoImFsbF9wcm94eSIsICIiLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiQ1ZTX1BST1hZX0hPU1QiLCAiIiwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIkNWU19QUk9YWV9QT1JUIiwgIiIsICJsb2NhbC5jb25mIikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBzID0gIlZFUlNJT046ICclcycsIEJCTEFZRVJTOiAnJXMnLCBNQUNISU5FOiAnJXMnLCBESVNUUk86ICclcycsIERMX0RJUjogJyVzJywiICUgXAorICAgICAgICAgICAgKGhvYlZlciwgIiAiLmpvaW4oc2VsZi5sYXllcnMpLCBzZWxmLmN1cnJfbWFjaCwgc2VsZi5jdXJyX2Rpc3Rybywgc2VsZi5kbGRpciApCisgICAgICAgIHMgKz0gIlNTVEFURV9ESVI6ICclcycsIFNTVEFURV9NSVJST1I6ICclcycsIFBBUkFMTEVMX01BS0U6ICctaiAlcycsIEJCX05VTUJFUl9USFJFQURTOiAnJXMnLCBQQUNLQUdFX0NMQVNTRVM6ICclcycsICIgJSBcCisgICAgICAgICAgICAoc2VsZi5zc3RhdGVkaXIsIHNlbGYuc3N0YXRlbWlycm9yLCBzZWxmLnBtYWtlLCBzZWxmLmJidGhyZWFkLCAiICIuam9pbihbInBhY2thZ2VfIiArIGkgZm9yIGkgaW4gc2VsZi5jdXJyX3BhY2thZ2VfZm9ybWF0LnNwbGl0KCldKSkKKyAgICAgICAgcyArPSAiSU1BR0VfUk9PVEZTX1NJWkU6ICclcycsIElNQUdFX0VYVFJBX1NQQUNFOiAnJXMnLCBJTkNPTVBBVElCTEVfTElDRU5TRTogJyVzJywgU0RLTUFDSElORTogJyVzJywgQ09ORl9WRVJTSU9OOiAnJXMnLCAiICUgXAorICAgICAgICAgICAgKHNlbGYuaW1hZ2Vfcm9vdGZzX3NpemUsIHNlbGYuaW1hZ2VfZXh0cmFfc2l6ZSwgc2VsZi5pbmNvbXBhdF9saWNlbnNlLCBzZWxmLmN1cnJfc2RrX21hY2hpbmUsIHNlbGYuY29uZl92ZXJzaW9uKQorICAgICAgICBzICs9ICJMQ09ORl9WRVJTSU9OOiAnJXMnLCBFWFRSQV9TRVRUSU5HOiAnJXMnLCBUT09MQ0hBSU5fQlVJTEQ6ICclcycsIElNQUdFX0ZTVFlQRVM6ICclcycsIF9fU0VMRUNURURfSU1BR0VfXzogJyVzJywgIiAlIFwKKyAgICAgICAgICAgIChzZWxmLmxjb25mX3ZlcnNpb24sIHNlbGYuZXh0cmFfc2V0dGluZywgc2VsZi50b29sY2hhaW5fYnVpbGQsIHNlbGYuaW1hZ2VfZnN0eXBlcywgc2VsZi5zZWxlY3RlZF9pbWFnZSkKKyAgICAgICAgcyArPSAiREVQRU5EUzogJyVzJywgSU1BR0VfSU5TVEFMTDogJyVzJywgZW5hYmxlX3Byb3h5OiAnJXMnLCB1c2Vfc2FtZV9wcm94eTogJyVzJywgaHR0cF9wcm94eTogJyVzJywgIiAlIFwKKyAgICAgICAgICAgIChzZWxmLnNlbGVjdGVkX3JlY2lwZXMsIHNlbGYudXNlcl9zZWxlY3RlZF9wYWNrYWdlcywgc2VsZi5lbmFibGVfcHJveHksIHNlbGYuc2FtZV9wcm94eSwgc2VsZi5jb21iaW5lX3Byb3h5KCJodHRwIikpCisgICAgICAgIHMgKz0gImh0dHBzX3Byb3h5OiAnJXMnLCBmdHBfcHJveHk6ICclcycsIGFsbF9wcm94eTogJyVzJywgQ1ZTX1BST1hZX0hPU1Q6ICclcycsIENWU19QUk9YWV9QT1JUOiAnJXMnIiAlIFwKKyAgICAgICAgICAgIChzZWxmLmNvbWJpbmVfcHJveHkoImh0dHBzIiksIHNlbGYuY29tYmluZV9wcm94eSgiZnRwIiksIHNlbGYuY29tYmluZV9wcm94eSgic29ja3MiKSwKKyAgICAgICAgICAgICBzZWxmLmNvbWJpbmVfaG9zdF9vbmx5KCJjdnMiKSwgc2VsZi5jb21iaW5lX3BvcnRfb25seSgiY3ZzIikpCisgICAgICAgIHJldHVybiBzCisKK2NsYXNzIFBhcmFtZXRlcnM6CisgICAgJycnUmVwcmVzZW50cyBvdGhlciB2YXJpYWJsZXMgbGlrZSBhdmFpbGFibGUgbWFjaGluZXMsIGV0Yy4nJycKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgIyBWYXJpYWJsZXMKKyAgICAgICAgc2VsZi5tYXhfdGhyZWFkcyA9IDY1NTM1CisgICAgICAgIHNlbGYuY29yZV9iYXNlID0gIiIKKyAgICAgICAgc2VsZi5pbWFnZV9hZGRyID0gIiIKKyAgICAgICAgc2VsZi5pbWFnZV90eXBlcyA9IFtdCisgICAgICAgIHNlbGYucnVubmFibGVfaW1hZ2VfdHlwZXMgPSBbXQorICAgICAgICBzZWxmLnJ1bm5hYmxlX21hY2hpbmVfcGF0dGVybnMgPSBbXQorICAgICAgICBzZWxmLmRlcGxveWFibGVfaW1hZ2VfdHlwZXMgPSBbXQorICAgICAgICBzZWxmLnRtcGRpciA9ICIiCisKKyAgICAgICAgc2VsZi5hbGxfbWFjaGluZXMgPSBbXQorICAgICAgICBzZWxmLmFsbF9wYWNrYWdlX2Zvcm1hdHMgPSBbXQorICAgICAgICBzZWxmLmFsbF9kaXN0cm9zID0gW10KKyAgICAgICAgc2VsZi5hbGxfc2RrX21hY2hpbmVzID0gW10KKyAgICAgICAgc2VsZi5hbGxfbGF5ZXJzID0gW10KKyAgICAgICAgc2VsZi5pbWFnZV9uYW1lcyA9IFtdCisgICAgICAgIHNlbGYuaW1hZ2Vfd2hpdGVfcGF0dGVybiA9ICIiCisgICAgICAgIHNlbGYuaW1hZ2VfYmxhY2tfcGF0dGVybiA9ICIiCisKKyAgICAgICAgIyBmb3IgYnVpbGQgbG9nIHRvIHNob3cKKyAgICAgICAgc2VsZi5iYl92ZXJzaW9uID0gIiIKKyAgICAgICAgc2VsZi50YXJnZXRfYXJjaCA9ICIiCisgICAgICAgIHNlbGYudGFyZ2V0X29zID0gIiIKKyAgICAgICAgc2VsZi5kaXN0cm9fdmVyc2lvbiA9ICIiCisgICAgICAgIHNlbGYudHVuZV9wa2dhcmNoID0gIiIKKworICAgIGRlZiB1cGRhdGUoc2VsZiwgcGFyYW1zKToKKyAgICAgICAgc2VsZi5tYXhfdGhyZWFkcyA9IHBhcmFtc1sibWF4X3RocmVhZHMiXQorICAgICAgICBzZWxmLmNvcmVfYmFzZSA9IHBhcmFtc1siY29yZV9iYXNlIl0KKyAgICAgICAgc2VsZi5pbWFnZV9hZGRyID0gcGFyYW1zWyJpbWFnZV9hZGRyIl0KKyAgICAgICAgc2VsZi5pbWFnZV90eXBlcyA9IHBhcmFtc1siaW1hZ2VfdHlwZXMiXS5zcGxpdCgpCisgICAgICAgIHNlbGYucnVubmFibGVfaW1hZ2VfdHlwZXMgPSBwYXJhbXNbInJ1bm5hYmxlX2ltYWdlX3R5cGVzIl0uc3BsaXQoKQorICAgICAgICBzZWxmLnJ1bm5hYmxlX21hY2hpbmVfcGF0dGVybnMgPSBwYXJhbXNbInJ1bm5hYmxlX21hY2hpbmVfcGF0dGVybnMiXS5zcGxpdCgpCisgICAgICAgIHNlbGYuZGVwbG95YWJsZV9pbWFnZV90eXBlcyA9IHBhcmFtc1siZGVwbG95YWJsZV9pbWFnZV90eXBlcyJdLnNwbGl0KCkKKyAgICAgICAgc2VsZi50bXBkaXIgPSBwYXJhbXNbInRtcGRpciJdCisgICAgICAgIHNlbGYuaW1hZ2Vfd2hpdGVfcGF0dGVybiA9IHBhcmFtc1siaW1hZ2Vfd2hpdGVfcGF0dGVybiJdCisgICAgICAgIHNlbGYuaW1hZ2VfYmxhY2tfcGF0dGVybiA9IHBhcmFtc1siaW1hZ2VfYmxhY2tfcGF0dGVybiJdCisgICAgICAgIHNlbGYua2VybmVsX2ltYWdlX3R5cGUgPSBwYXJhbXNbImtlcm5lbF9pbWFnZV90eXBlIl0KKyAgICAgICAgIyBmb3IgYnVpbGQgbG9nIHRvIHNob3cKKyAgICAgICAgc2VsZi5iYl92ZXJzaW9uID0gcGFyYW1zWyJiYl92ZXJzaW9uIl0KKyAgICAgICAgc2VsZi50YXJnZXRfYXJjaCA9IHBhcmFtc1sidGFyZ2V0X2FyY2giXQorICAgICAgICBzZWxmLnRhcmdldF9vcyA9IHBhcmFtc1sidGFyZ2V0X29zIl0KKyAgICAgICAgc2VsZi5kaXN0cm9fdmVyc2lvbiA9IHBhcmFtc1siZGlzdHJvX3ZlcnNpb24iXQorICAgICAgICBzZWxmLnR1bmVfcGtnYXJjaCA9IHBhcmFtc1sidHVuZV9wa2dhcmNoIl0KKworZGVmIGhvYl9jb25mX2ZpbHRlcihmbiwgZGF0YSk6CisgICAgaWYgZm4uZW5kc3dpdGgoIi9sb2NhbC5jb25mIik6CisgICAgICAgIGRpc3RybyA9IGRhdGEuZ2V0VmFyKCJESVNUUk9fSE9CIiwgRmFsc2UpCisgICAgICAgIGlmIGRpc3RybzoKKyAgICAgICAgICAgIGlmIGRpc3RybyAhPSAiZGVmYXVsdHNldHVwIjoKKyAgICAgICAgICAgICAgICBkYXRhLnNldFZhcigiRElTVFJPIiwgZGlzdHJvKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkYXRhLmRlbFZhcigiRElTVFJPIikKKworICAgICAgICBrZXlzID0gWyJNQUNISU5FX0hPQiIsICJTREtNQUNISU5FX0hPQiIsICJQQUNLQUdFX0NMQVNTRVNfSE9CIiwgXAorICAgICAgICAgICAgICAgICJCQl9OVU1CRVJfVEhSRUFEU19IT0IiLCAiUEFSQUxMRUxfTUFLRV9IT0IiLCAiRExfRElSX0hPQiIsIFwKKyAgICAgICAgICAgICAgICAiU1NUQVRFX0RJUl9IT0IiLCAiU1NUQVRFX01JUlJPUlNfSE9CIiwgIklOQ09NUEFUSUJMRV9MSUNFTlNFX0hPQiJdCisgICAgICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgICAgIHZhcl9ob2IgPSBkYXRhLmdldFZhcihrZXksIEZhbHNlKQorICAgICAgICAgICAgaWYgdmFyX2hvYjoKKyAgICAgICAgICAgICAgICBkYXRhLnNldFZhcihrZXkuc3BsaXQoIl9IT0IiKVswXSwgdmFyX2hvYikKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBmbi5lbmRzd2l0aCgiL2JibGF5ZXJzLmNvbmYiKToKKyAgICAgICAgbGF5ZXJzID0gZGF0YS5nZXRWYXIoIkJCTEFZRVJTX0hPQiIsIEZhbHNlKQorICAgICAgICBpZiBsYXllcnM6CisgICAgICAgICAgICBkYXRhLnNldFZhcigiQkJMQVlFUlMiLCBsYXllcnMpCisgICAgICAgIHJldHVybgorCitjbGFzcyBCdWlsZGVyKGd0ay5XaW5kb3cpOgorCisgICAgKElOSVRJQUxfQ0hFQ0tTLAorICAgICBNQUNISU5FX1NFTEVDVElPTiwKKyAgICAgUkNQUEtHSU5GT19QT1BVTEFUSU5HLAorICAgICBSQ1BQS0dJTkZPX1BPUFVMQVRFRCwKKyAgICAgQkFTRUlNR19TRUxFQ1RFRCwKKyAgICAgUkVDSVBFX1NFTEVDVElPTiwKKyAgICAgUEFDS0FHRV9HRU5FUkFUSU5HLAorICAgICBQQUNLQUdFX0dFTkVSQVRFRCwKKyAgICAgUEFDS0FHRV9TRUxFQ1RJT04sCisgICAgIEZBU1RfSU1BR0VfR0VORVJBVElORywKKyAgICAgSU1BR0VfR0VORVJBVElORywKKyAgICAgSU1BR0VfR0VORVJBVEVELAorICAgICBNWV9JTUFHRV9PUEVORUQsCisgICAgIEJBQ0ssCisgICAgIEVORF9OT09QKSA9IHJhbmdlKDE1KQorCisgICAgKFNBTklUWV9DSEVDSywKKyAgICAgSU1BR0VfQ09ORklHVVJBVElPTiwKKyAgICAgUkVDSVBFX0RFVEFJTFMsCisgICAgIEJVSUxEX0RFVEFJTFMsCisgICAgIFBBQ0tBR0VfREVUQUlMUywKKyAgICAgSU1BR0VfREVUQUlMUywKKyAgICAgRU5EX1RBQikgPSByYW5nZSg3KQorCisgICAgX19zdGVwMnBhZ2VfXyA9IHsKKyAgICAgICAgSU5JVElBTF9DSEVDS1MgICAgICAgIDogU0FOSVRZX0NIRUNLLAorICAgICAgICBNQUNISU5FX1NFTEVDVElPTiAgICAgOiBJTUFHRV9DT05GSUdVUkFUSU9OLAorICAgICAgICBSQ1BQS0dJTkZPX1BPUFVMQVRJTkcgOiBJTUFHRV9DT05GSUdVUkFUSU9OLAorICAgICAgICBSQ1BQS0dJTkZPX1BPUFVMQVRFRCAgOiBJTUFHRV9DT05GSUdVUkFUSU9OLAorICAgICAgICBCQVNFSU1HX1NFTEVDVEVEICAgICAgOiBJTUFHRV9DT05GSUdVUkFUSU9OLAorICAgICAgICBSRUNJUEVfU0VMRUNUSU9OICAgICAgOiBSRUNJUEVfREVUQUlMUywKKyAgICAgICAgUEFDS0FHRV9HRU5FUkFUSU5HICAgIDogQlVJTERfREVUQUlMUywKKyAgICAgICAgUEFDS0FHRV9HRU5FUkFURUQgICAgIDogUEFDS0FHRV9ERVRBSUxTLAorICAgICAgICBQQUNLQUdFX1NFTEVDVElPTiAgICAgOiBQQUNLQUdFX0RFVEFJTFMsCisgICAgICAgIEZBU1RfSU1BR0VfR0VORVJBVElORyA6IEJVSUxEX0RFVEFJTFMsCisgICAgICAgIElNQUdFX0dFTkVSQVRJTkcgICAgICA6IEJVSUxEX0RFVEFJTFMsCisgICAgICAgIElNQUdFX0dFTkVSQVRFRCAgICAgICA6IElNQUdFX0RFVEFJTFMsCisgICAgICAgIE1ZX0lNQUdFX09QRU5FRCAgICAgICA6IElNQUdFX0RFVEFJTFMsCisgICAgICAgIEVORF9OT09QICAgICAgICAgICAgICA6IE5vbmUsCisgICAgfQorCisgICAgU0FOSVRZX0NIRUNLX01JTl9ESVNQTEFZX1RJTUUgPSA1CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9iSGFuZGxlciwgcmVjaXBlX21vZGVsLCBwYWNrYWdlX21vZGVsKToKKyAgICAgICAgc3VwZXIoQnVpbGRlciwgc2VsZikuX19pbml0X18oKQorCisgICAgICAgIHNlbGYuaG9iX2ltYWdlID0gImhvYi1pbWFnZSIKKworICAgICAgICAjIGhhbmRsZXIKKyAgICAgICAgc2VsZi5oYW5kbGVyID0gaG9iSGFuZGxlcgorCisgICAgICAgICMgbG9nZ2VyCisgICAgICAgIHNlbGYubG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UiKQorICAgICAgICBzZWxmLmNvbnNvbGVsb2cgPSBOb25lCisgICAgICAgIHNlbGYuY3VycmVudF9sb2dmaWxlID0gTm9uZQorCisgICAgICAgICMgY29uZmlndXJhdGlvbiBhbmQgcGFyYW1ldGVycworICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24gPSBDb25maWd1cmF0aW9uKCkKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJzID0gUGFyYW1ldGVycygpCisKKyAgICAgICAgIyBidWlsZCBzdGVwCisgICAgICAgIHNlbGYuY3VycmVudF9zdGVwID0gTm9uZQorICAgICAgICBzZWxmLnByZXZpb3VzX3N0ZXAgPSBOb25lCisKKyAgICAgICAgc2VsZi5zdG9wcGluZyA9IEZhbHNlCisKKyAgICAgICAgIyByZWNpcGUgbW9kZWwgYW5kIHBhY2thZ2UgbW9kZWwKKyAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwgPSByZWNpcGVfbW9kZWwKKyAgICAgICAgc2VsZi5wYWNrYWdlX21vZGVsID0gcGFja2FnZV9tb2RlbAorCisgICAgICAgICMgSW5kaWNhdGUgd2hldGhlciB1c2VyIGhhcyBjdXN0b21pemVkIHRoZSBpbWFnZQorICAgICAgICBzZWxmLmN1c3RvbWl6ZWQgPSBGYWxzZQorCisgICAgICAgICMgSW5kaWNhdGUgd2hldGhlciB0aGUgVUkgaXMgd29ya2luZworICAgICAgICBzZWxmLnNlbnNpdGl2ZSA9IFRydWUKKworICAgICAgICAjIEluZGljYXRlIHdoZXRoZXIgdGhlIHNhbml0eSBjaGVjayByYW4KKyAgICAgICAgc2VsZi5zYW5pdHlfY2hlY2tlZCA9IEZhbHNlCisKKyAgICAgICAgIyBzYXZlIHBhcnNpbmcgd2FybmluZ3MKKyAgICAgICAgc2VsZi5wYXJzaW5nX3dhcm5pbmdzID0gW10KKworICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMKKyAgICAgICAgc2VsZi5jcmVhdGVfdmlzdWFsX2VsZW1lbnRzKCkKKworICAgICAgICAjIGNvbm5lY3QgdGhlIHNpZ25hbHMgdG8gZnVuY3Rpb25zCisgICAgICAgIHNlbGYuY29ubmVjdCgiZGVsZXRlLWV2ZW50Iiwgc2VsZi5kZXN0cm95X3dpbmRvd19jYikKKyAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwuY29ubmVjdCAoInJlY2lwZS1zZWxlY3Rpb24tY2hhbmdlZCIsICBzZWxmLnJlY2lwZWxpc3RfY2hhbmdlZF9jYikKKyAgICAgICAgc2VsZi5wYWNrYWdlX21vZGVsLmNvbm5lY3QoInBhY2thZ2Utc2VsZWN0aW9uLWNoYW5nZWQiLCBzZWxmLnBhY2thZ2VsaXN0X2NoYW5nZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5jb25uZWN0KCJjb25maWctdXBkYXRlZCIsICAgICAgICAgICBzZWxmLmhhbmRsZXJfY29uZmlnX3VwZGF0ZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5jb25uZWN0KCJwYWNrYWdlLWZvcm1hdHMtdXBkYXRlZCIsICBzZWxmLmhhbmRsZXJfcGFja2FnZV9mb3JtYXRzX3VwZGF0ZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5jb25uZWN0KCJwYXJzaW5nLXN0YXJ0ZWQiLCAgICAgICAgICBzZWxmLmhhbmRsZXJfcGFyc2luZ19zdGFydGVkX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuY29ubmVjdCgicGFyc2luZyIsICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVyX3BhcnNpbmdfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5jb25uZWN0KCJwYXJzaW5nLWNvbXBsZXRlZCIsICAgICAgICBzZWxmLmhhbmRsZXJfcGFyc2luZ19jb21wbGV0ZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5idWlsZC5jb25uZWN0KCJidWlsZC1zdGFydGVkIiwgICAgICBzZWxmLmhhbmRsZXJfYnVpbGRfc3RhcnRlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmJ1aWxkLmNvbm5lY3QoImJ1aWxkLXN1Y2NlZWRlZCIsICAgIHNlbGYuaGFuZGxlcl9idWlsZF9zdWNjZWVkZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5idWlsZC5jb25uZWN0KCJidWlsZC1mYWlsZWQiLCAgICAgICBzZWxmLmhhbmRsZXJfYnVpbGRfZmFpbGVkX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuYnVpbGQuY29ubmVjdCgiYnVpbGQtYWJvcnRlZCIsICAgICAgc2VsZi5oYW5kbGVyX2J1aWxkX2Fib3J0ZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5idWlsZC5jb25uZWN0KCJ0YXNrLXN0YXJ0ZWQiLCAgICAgICBzZWxmLmhhbmRsZXJfdGFza19zdGFydGVkX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuYnVpbGQuY29ubmVjdCgiZGlzay1mdWxsIiwgICAgICAgICAgc2VsZi5oYW5kbGVyX2Rpc2tfZnVsbF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmJ1aWxkLmNvbm5lY3QoImxvZy1lcnJvciIsICAgICAgICAgIHNlbGYuaGFuZGxlcl9idWlsZF9mYWlsdXJlX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuYnVpbGQuY29ubmVjdCgibG9nLXdhcm5pbmciLCAgICAgICAgc2VsZi5oYW5kbGVyX2J1aWxkX2ZhaWx1cmVfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5idWlsZC5jb25uZWN0KCJsb2ciLCAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZXJfYnVpbGRfbG9nX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuYnVpbGQuY29ubmVjdCgibm8tcHJvdmlkZXIiLCAgICAgICAgc2VsZi5oYW5kbGVyX25vX3Byb3ZpZGVyX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuY29ubmVjdCgiZ2VuZXJhdGluZy1kYXRhIiwgICAgICAgICAgc2VsZi5oYW5kbGVyX2dlbmVyYXRpbmdfZGF0YV9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoImRhdGEtZ2VuZXJhdGVkIiwgICAgICAgICAgIHNlbGYuaGFuZGxlcl9kYXRhX2dlbmVyYXRlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoImNvbW1hbmQtc3VjY2VlZGVkIiwgICAgICAgIHNlbGYuaGFuZGxlcl9jb21tYW5kX3N1Y2NlZWRlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoImNvbW1hbmQtZmFpbGVkIiwgICAgICAgICAgIHNlbGYuaGFuZGxlcl9jb21tYW5kX2ZhaWxlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoInBhcnNpbmctd2FybmluZyIsICAgICAgICAgIHNlbGYuaGFuZGxlcl9wYXJzaW5nX3dhcm5pbmdfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5jb25uZWN0KCJzYW5pdHktZmFpbGVkIiwgICAgICAgICAgICBzZWxmLmhhbmRsZXJfc2FuaXR5X2ZhaWxlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoInJlY2lwZS1wb3B1bGF0ZWQiLCAgICAgICAgIHNlbGYuaGFuZGxlcl9yZWNpcGVfcG9wdWxhdGVkX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuY29ubmVjdCgicGFja2FnZS1wb3B1bGF0ZWQiLCAgICAgICAgc2VsZi5oYW5kbGVyX3BhY2thZ2VfcG9wdWxhdGVkX2NiKQorCisgICAgICAgIHNlbGYuaGFuZGxlci5hcHBlbmRfdG9fYmJmaWxlcygiJHtUT1BESVJ9L3JlY2lwZXMvaW1hZ2VzL2N1c3RvbS8qLmJiIikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmFwcGVuZF90b19iYmZpbGVzKCIke1RPUERJUn0vcmVjaXBlcy9pbWFnZXMvKi5iYiIpCisgICAgICAgIHNlbGYuaW5pdGlhdGVfbmV3X2J1aWxkX2FzeW5jKCkKKworICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNlbGYuZXZlbnRfaGFuZGxlX1NJR0lOVCkKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLnNldF90aXRsZSgiSG9iIikKKyAgICAgICAgc2VsZi5zZXRfaWNvbl9uYW1lKCJhcHBsaWNhdGlvbnMtZGV2ZWxvcG1lbnQiKQorICAgICAgICBzZWxmLnNldF9yZXNpemFibGUoVHJ1ZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aW5kb3dfd2lkdGggPSBzZWxmLmdldF9zY3JlZW4oKS5nZXRfd2lkdGgoKQorICAgICAgICAgICAgd2luZG93X2hlaWdodCA9IHNlbGYuZ2V0X3NjcmVlbigpLmdldF9oZWlnaHQoKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwcmludCAiUGxlYXNlIHNldCBESVNQTEFZIHZhcmlhYmxlIGJlZm9yZSBydW5uaW5nIEhvYi4iCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIGlmIHdpbmRvd193aWR0aCA+PSBod2MuTUFJTl9XSU5fV0lEVEg6CisgICAgICAgICAgICB3aW5kb3dfd2lkdGggPSBod2MuTUFJTl9XSU5fV0lEVEgKKyAgICAgICAgICAgIHdpbmRvd19oZWlnaHQgPSBod2MuTUFJTl9XSU5fSEVJR0hUCisgICAgICAgIHNlbGYuc2V0X3NpemVfcmVxdWVzdCh3aW5kb3dfd2lkdGgsIHdpbmRvd19oZWlnaHQpCisKKyAgICAgICAgc2VsZi52Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDApCisgICAgICAgIHNlbGYudmJveC5zZXRfYm9yZGVyX3dpZHRoKDApCisgICAgICAgIHNlbGYuYWRkKHNlbGYudmJveCkKKworICAgICAgICAjIGNyZWF0ZSBwYWdlcworICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZSA9IEltYWdlQ29uZmlndXJhdGlvblBhZ2Uoc2VsZikKKyAgICAgICAgc2VsZi5yZWNpcGVfZGV0YWlsc19wYWdlICAgICAgPSBSZWNpcGVTZWxlY3Rpb25QYWdlKHNlbGYpCisgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlICAgICAgID0gQnVpbGREZXRhaWxzUGFnZShzZWxmKQorICAgICAgICBzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlICAgICA9IFBhY2thZ2VTZWxlY3Rpb25QYWdlKHNlbGYpCisgICAgICAgIHNlbGYuaW1hZ2VfZGV0YWlsc19wYWdlICAgICAgID0gSW1hZ2VEZXRhaWxzUGFnZShzZWxmKQorICAgICAgICBzZWxmLnNhbml0eV9jaGVja19wYWdlICAgICAgICA9IFNhbml0eUNoZWNrUGFnZShzZWxmKQorICAgICAgICBzZWxmLmRpc3BsYXlfc2FuaXR5X2NoZWNrID0gRmFsc2UKKyAgICAgICAgc2VsZi5zYW5pdHlfY2hlY2tfcG9zdF9mdW5jID0gRmFsc2UKKyAgICAgICAgc2VsZi5oYWRfbmV0d29ya19lcnJvciA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5uYiA9IGd0ay5Ob3RlYm9vaygpCisgICAgICAgIHNlbGYubmIuc2V0X3Nob3dfdGFicyhGYWxzZSkKKyAgICAgICAgc2VsZi5uYi5pbnNlcnRfcGFnZShzZWxmLnNhbml0eV9jaGVja19wYWdlLCAgICAgICAgTm9uZSwgc2VsZi5TQU5JVFlfQ0hFQ0spCisgICAgICAgIHNlbGYubmIuaW5zZXJ0X3BhZ2Uoc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UsIE5vbmUsIHNlbGYuSU1BR0VfQ09ORklHVVJBVElPTikKKyAgICAgICAgc2VsZi5uYi5pbnNlcnRfcGFnZShzZWxmLnJlY2lwZV9kZXRhaWxzX3BhZ2UsICAgICAgTm9uZSwgc2VsZi5SRUNJUEVfREVUQUlMUykKKyAgICAgICAgc2VsZi5uYi5pbnNlcnRfcGFnZShzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZSwgICAgICAgTm9uZSwgc2VsZi5CVUlMRF9ERVRBSUxTKQorICAgICAgICBzZWxmLm5iLmluc2VydF9wYWdlKHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2UsICAgICBOb25lLCBzZWxmLlBBQ0tBR0VfREVUQUlMUykKKyAgICAgICAgc2VsZi5uYi5pbnNlcnRfcGFnZShzZWxmLmltYWdlX2RldGFpbHNfcGFnZSwgICAgICAgTm9uZSwgc2VsZi5JTUFHRV9ERVRBSUxTKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLm5iLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorICAgICAgICBzZWxmLm5iLnNldF9jdXJyZW50X3BhZ2UoMCkKKworICAgIGRlZiBzYW5pdHlfY2hlY2tfdGltZW91dChzZWxmKToKKyAgICAgICAgIyBUaGUgbWluaW11bSB0aW1lIGZvciBzaG93aW5nIHRoZSAnc2FuaXR5IGNoZWNrJyBwYWdlIGhhcyBwYXNzZQorICAgICAgICAjIElmIHNvbWVvbmUgc2V0IHRoZSAnc2FuaXR5X2NoZWNrX3Bvc3Rfc3RlcCcgbWVhbndoaWxlLCBleGVjdXRlIGl0IG5vdworICAgICAgICBzZWxmLmRpc3BsYXlfc2FuaXR5X2NoZWNrID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5zYW5pdHlfY2hlY2tfcG9zdF9mdW5jOgorICAgICAgICAgIHRlbXAgPSBzZWxmLnNhbml0eV9jaGVja19wb3N0X2Z1bmMKKyAgICAgICAgICBzZWxmLnNhbml0eV9jaGVja19wb3N0X2Z1bmMgPSBOb25lCisgICAgICAgICAgdGVtcCgpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHNob3dfc2FuaXR5X2NoZWNrX3BhZ2Uoc2VsZik6CisgICAgICAgICMgVGhpcyB3aW5kb3cgbXVzdCBzdGF5IG9uIHNjcmVlbiBmb3IgYXQgbGVhc3QgNSBzZWNvbmRzLCBhY2NvcmRpbmcgdG8gdGhlIGRlc2lnbiBkb2N1bWVudAorICAgICAgICBzZWxmLm5iLnNldF9jdXJyZW50X3BhZ2Uoc2VsZi5TQU5JVFlfQ0hFQ0spCisgICAgICAgIHNlbGYuc2FuaXR5X2NoZWNrX3Bvc3Rfc3RlcCA9IE5vbmUKKyAgICAgICAgc2VsZi5kaXNwbGF5X3Nhbml0eV9jaGVjayA9IFRydWUKKyAgICAgICAgc2VsZi5zYW5pdHlfY2hlY2tfcGFnZS5zdGFydCgpCisgICAgICAgIGdvYmplY3QudGltZW91dF9hZGQoc2VsZi5TQU5JVFlfQ0hFQ0tfTUlOX0RJU1BMQVlfVElNRSAqIDEwMDAsIHNlbGYuc2FuaXR5X2NoZWNrX3RpbWVvdXQpCisKKyAgICBkZWYgZXhlY3V0ZV9hZnRlcl9zYW5pdHlfY2hlY2soc2VsZiwgZnVuYyk6CisgICAgICAgIGlmIG5vdCBzZWxmLmRpc3BsYXlfc2FuaXR5X2NoZWNrOgorICAgICAgICAgIGZ1bmMoKQorICAgICAgICBlbHNlOgorICAgICAgICAgIHNlbGYuc2FuaXR5X2NoZWNrX3Bvc3RfZnVuYyA9IGZ1bmMKKworICAgIGRlZiBnZW5lcmF0ZV9jb25maWd1cmF0aW9uKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5zYW5pdHlfY2hlY2tlZDoKKyAgICAgICAgICAgIHNlbGYuc2hvd19zYW5pdHlfY2hlY2tfcGFnZSgpCisgICAgICAgIHNlbGYuaGFuZGxlci5nZW5lcmF0ZV9jb25maWd1cmF0aW9uKCkKKworICAgIGRlZiBpbml0aWF0ZV9uZXdfYnVpbGRfYXN5bmMoc2VsZik6CisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9pbWFnZSA9IE5vbmUKKyAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLk1BQ0hJTkVfU0VMRUNUSU9OKQorICAgICAgICBzZWxmLmhhbmRsZXIuaW5pdF9jb29rZXIoKQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2V4dHJhX2luaGVyaXQoImltYWdlX3R5cGVzIikKKyAgICAgICAgc2VsZi5nZW5lcmF0ZV9jb25maWd1cmF0aW9uKCkKKworICAgIGRlZiB1cGRhdGVfY29uZmlnX2FzeW5jKHNlbGYpOgorICAgICAgICBzZWxmLnNldF91c2VyX2NvbmZpZygpCisgICAgICAgIHNlbGYuZ2VuZXJhdGVfY29uZmlndXJhdGlvbigpCisgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5NQUNISU5FX1NFTEVDVElPTikKKworICAgIGRlZiBzYW5pdHlfY2hlY2soc2VsZik6CisgICAgICAgIHNlbGYuaGFuZGxlci50cmlnZ2VyX3Nhbml0eV9jaGVjaygpCisKKyAgICBkZWYgcG9wdWxhdGVfcmVjaXBlX3BhY2thZ2VfaW5mb19hc3luYyhzZWxmKToKKyAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLlJDUFBLR0lORk9fUE9QVUxBVElORykKKyAgICAgICAgIyBQYXJzZSByZWNpcGVzCisgICAgICAgIHNlbGYuc2V0X3VzZXJfY29uZmlnKCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLmdlbmVyYXRlX3JlY2lwZXMoKQorCisgICAgZGVmIGdlbmVyYXRlX3BhY2thZ2VzX2FzeW5jKHNlbGYsIGxvZyA9IEZhbHNlKToKKyAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLlBBQ0tBR0VfR0VORVJBVElORykKKyAgICAgICAgaWYgbG9nOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X2xvZ2ZpbGUgPSBzZWxmLmhhbmRsZXIuZ2V0X2xvZ2ZpbGUoKQorICAgICAgICAgICAgc2VsZi5kb19sb2coc2VsZi5jdXJyZW50X2xvZ2ZpbGUpCisgICAgICAgICMgQnVpbGQgcGFja2FnZXMKKyAgICAgICAgXywgYWxsX3JlY2lwZXMgPSBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfcmVjaXBlcygpCisgICAgICAgIHNlbGYuc2V0X3VzZXJfY29uZmlnKCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLnJlc2V0X2J1aWxkKCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLmdlbmVyYXRlX3BhY2thZ2VzKGFsbF9yZWNpcGVzLCBzZWxmLmNvbmZpZ3VyYXRpb24uZGVmYXVsdF90YXNrKQorCisgICAgZGVmIHJlc3RvcmVfaW5pdGlhbF9zZWxlY3RlZF9wYWNrYWdlcyhzZWxmKToKKyAgICAgICAgc2VsZi5wYWNrYWdlX21vZGVsLnNldF9zZWxlY3RlZF9wYWNrYWdlcyhzZWxmLmNvbmZpZ3VyYXRpb24uaW5pdGlhbF91c2VyX3NlbGVjdGVkX3BhY2thZ2VzLCBUcnVlKQorICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwuc2V0X3NlbGVjdGVkX3BhY2thZ2VzKHNlbGYuY29uZmlndXJhdGlvbi5pbml0aWFsX3NlbGVjdGVkX3BhY2thZ2VzKQorICAgICAgICBmb3IgcGFja2FnZSBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcGFja2FnZXM6CisgICAgICAgICAgICBpZiBwYWNrYWdlIG5vdCBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uaW5pdGlhbF9zZWxlY3RlZF9wYWNrYWdlczoKKyAgICAgICAgICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwuZXhjbHVkZV9pdGVtKHNlbGYucGFja2FnZV9tb2RlbC5maW5kX3BhdGhfZm9yX2l0ZW0ocGFja2FnZSkpCisKKyAgICBkZWYgZmFzdF9nZW5lcmF0ZV9pbWFnZV9hc3luYyhzZWxmLCBsb2cgPSBGYWxzZSk6CisgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5GQVNUX0lNQUdFX0dFTkVSQVRJTkcpCisgICAgICAgIGlmIGxvZzoKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9sb2dmaWxlID0gc2VsZi5oYW5kbGVyLmdldF9sb2dmaWxlKCkKKyAgICAgICAgICAgIHNlbGYuZG9fbG9nKHNlbGYuY3VycmVudF9sb2dmaWxlKQorICAgICAgICAjIEJ1aWxkIHBhY2thZ2VzCisgICAgICAgIF8sIGFsbF9yZWNpcGVzID0gc2VsZi5yZWNpcGVfbW9kZWwuZ2V0X3NlbGVjdGVkX3JlY2lwZXMoKQorICAgICAgICBzZWxmLnNldF91c2VyX2NvbmZpZygpCisgICAgICAgIHNlbGYuaGFuZGxlci5yZXNldF9idWlsZCgpCisgICAgICAgIHNlbGYuaGFuZGxlci5nZW5lcmF0ZV9wYWNrYWdlcyhhbGxfcmVjaXBlcywgc2VsZi5jb25maWd1cmF0aW9uLmRlZmF1bHRfdGFzaykKKworICAgIGRlZiBnZW5lcmF0ZV9pbWFnZV9hc3luYyhzZWxmLCBjb250ID0gRmFsc2UpOgorICAgICAgICBzZWxmLnN3aXRjaF9wYWdlKHNlbGYuSU1BR0VfR0VORVJBVElORykKKyAgICAgICAgc2VsZi5oYW5kbGVyLnJlc2V0X2J1aWxkKCkKKyAgICAgICAgaWYgbm90IGNvbnQ6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfbG9nZmlsZSA9IHNlbGYuaGFuZGxlci5nZXRfbG9nZmlsZSgpCisgICAgICAgICAgICBzZWxmLmRvX2xvZyhzZWxmLmN1cnJlbnRfbG9nZmlsZSkKKyAgICAgICAgIyBCdWlsZCBpbWFnZQorICAgICAgICBzZWxmLnNldF91c2VyX2NvbmZpZygpCisgICAgICAgIHRvb2xjaGFpbl9wYWNrYWdlcyA9IFtdCisgICAgICAgIGJhc2VfaW1hZ2UgPSBOb25lCisgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi50b29sY2hhaW5fYnVpbGQ6CisgICAgICAgICAgICB0b29sY2hhaW5fcGFja2FnZXMgPSBzZWxmLnBhY2thZ2VfbW9kZWwuZ2V0X3NlbGVjdGVkX3BhY2thZ2VzX3Rvb2xjaGFpbigpCisgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9pbWFnZSA9PSBzZWxmLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgcGFja2FnZXMgPSBzZWxmLnBhY2thZ2VfbW9kZWwuZ2V0X3NlbGVjdGVkX3BhY2thZ2VzKCkKKyAgICAgICAgICAgIGltYWdlID0gc2VsZi5ob2JfaW1hZ2UKKyAgICAgICAgICAgIGJhc2VfaW1hZ2UgPSBzZWxmLmNvbmZpZ3VyYXRpb24uaW5pdGlhbF9zZWxlY3RlZF9pbWFnZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFja2FnZXMgPSBbXQorICAgICAgICAgICAgaW1hZ2UgPSBzZWxmLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfaW1hZ2UKKyAgICAgICAgc2VsZi5oYW5kbGVyLmdlbmVyYXRlX2ltYWdlKGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9pbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluX3BhY2thZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmRlZmF1bHRfdGFzaykKKworICAgIGRlZiBnZW5lcmF0ZV9uZXdfaW1hZ2Uoc2VsZiwgaW1hZ2UsIGRlc2NyaXB0aW9uKToKKyAgICAgICAgYmFzZV9pbWFnZSA9IHNlbGYuY29uZmlndXJhdGlvbi5pbml0aWFsX3NlbGVjdGVkX2ltYWdlCisgICAgICAgIGlmIGJhc2VfaW1hZ2UgPT0gc2VsZi5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXzoKKyAgICAgICAgICAgIGJhc2VfaW1hZ2UgPSBOb25lCisgICAgICAgIHBhY2thZ2VzID0gc2VsZi5wYWNrYWdlX21vZGVsLmdldF9zZWxlY3RlZF9wYWNrYWdlcygpCisgICAgICAgIHNlbGYuaGFuZGxlci5nZW5lcmF0ZV9uZXdfaW1hZ2UoaW1hZ2UsIGJhc2VfaW1hZ2UsIHBhY2thZ2VzLCBkZXNjcmlwdGlvbikKKworICAgIGRlZiBlbnN1cmVfZGlyKHNlbGYsIGRpcmVjdG9yeSk6CisgICAgICAgIHNlbGYuaGFuZGxlci5lbnN1cmVfZGlyKGRpcmVjdG9yeSkKKworICAgIGRlZiBnZXRfcGFyYW1ldGVyc19zeW5jKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVyLmdldF9wYXJhbWV0ZXJzKCkKKworICAgIGRlZiByZXF1ZXN0X3BhY2thZ2VfaW5mb19hc3luYyhzZWxmKToKKyAgICAgICAgc2VsZi5oYW5kbGVyLnJlcXVlc3RfcGFja2FnZV9pbmZvKCkKKworICAgIGRlZiBjYW5jZWxfYnVpbGRfc3luYyhzZWxmLCBmb3JjZT1GYWxzZSk6CisgICAgICAgIHNlbGYuaGFuZGxlci5jYW5jZWxfYnVpbGQoZm9yY2UpCisKKyAgICBkZWYgY2FuY2VsX3BhcnNlX3N5bmMoc2VsZik6CisgICAgICAgIHNlbGYuaGFuZGxlci5jYW5jZWxfcGFyc2UoKQorCisgICAgZGVmIHN3aXRjaF9wYWdlKHNlbGYsIG5leHRfc3RlcCk6CisgICAgICAgICMgTWFpbiBXb3JrZmxvdyAoQnVzaW5lc3MgTG9naWMpCisgICAgICAgIHNlbGYubmIuc2V0X2N1cnJlbnRfcGFnZShzZWxmLl9fc3RlcDJwYWdlX19bbmV4dF9zdGVwXSkKKworICAgICAgICBpZiBuZXh0X3N0ZXAgPT0gc2VsZi5NQUNISU5FX1NFTEVDVElPTjogIyBpbml0IHN0ZXAKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnNob3dfbWFjaGluZSgpCisKKyAgICAgICAgZWxpZiBuZXh0X3N0ZXAgPT0gc2VsZi5SQ1BQS0dJTkZPX1BPUFVMQVRJTkc6CisgICAgICAgICAgICAjIE1BQ0hJTkUgQ0hBTkdFRCBhY3Rpb24gb3IgU0VUVElOR1MgQ0hBTkdFRAorICAgICAgICAgICAgIyBzaG93IHRoZSBwcm9ncmVzcyBiYXIKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnNob3dfaW5mb19wb3B1bGF0aW5nKCkKKworICAgICAgICBlbGlmIG5leHRfc3RlcCA9PSBzZWxmLlJDUFBLR0lORk9fUE9QVUxBVEVEOgorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2Uuc2hvd19pbmZvX3BvcHVsYXRlZCgpCisKKyAgICAgICAgZWxpZiBuZXh0X3N0ZXAgPT0gc2VsZi5CQVNFSU1HX1NFTEVDVEVEOgorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2Uuc2hvd19iYXNlaW1nX3NlbGVjdGVkKCkKKworICAgICAgICBlbGlmIG5leHRfc3RlcCA9PSBzZWxmLlJFQ0lQRV9TRUxFQ1RJT046CisgICAgICAgICAgICBpZiBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfaW1hZ2UoKSA9PSBzZWxmLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgICAgIHNlbGYucmVjaXBlX2RldGFpbHNfcGFnZS5zZXRfcmVjaXBlX2N1cnJfdGFiKHNlbGYucmVjaXBlX2RldGFpbHNfcGFnZS5BTEwpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucmVjaXBlX2RldGFpbHNfcGFnZS5zZXRfcmVjaXBlX2N1cnJfdGFiKHNlbGYucmVjaXBlX2RldGFpbHNfcGFnZS5JTkNMVURFRCkKKworICAgICAgICBlbGlmIG5leHRfc3RlcCA9PSBzZWxmLlBBQ0tBR0VfU0VMRUNUSU9OOgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmluaXRpYWxfc2VsZWN0ZWRfcGFja2FnZXMgPSBzZWxmLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcGFja2FnZXMKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbml0aWFsX3VzZXJfc2VsZWN0ZWRfcGFja2FnZXMgPSBzZWxmLmNvbmZpZ3VyYXRpb24udXNlcl9zZWxlY3RlZF9wYWNrYWdlcworICAgICAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5zZXRfdGl0bGUoIkVkaXQgcGFja2FnZXMiKQorICAgICAgICAgICAgaWYgc2VsZi5yZWNpcGVfbW9kZWwuZ2V0X3NlbGVjdGVkX2ltYWdlKCkgPT0gc2VsZi5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXzoKKyAgICAgICAgICAgICAgICBzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLnNldF9wYWNrYWdlc19jdXJyX3RhYihzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLkFMTCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5zZXRfcGFja2FnZXNfY3Vycl90YWIoc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5JTkNMVURFRCkKKyAgICAgICAgICAgIHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2Uuc2hvd19wYWdlKHNlbGYuY3VycmVudF9sb2dmaWxlKQorCisKKyAgICAgICAgZWxpZiBuZXh0X3N0ZXAgPT0gc2VsZi5QQUNLQUdFX0dFTkVSQVRJTkcgb3IgbmV4dF9zdGVwID09IHNlbGYuRkFTVF9JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgIyBib3RoIFBBQ0tBR0VfR0VORVJBVElORyBhbmQgRkFTVF9JTUFHRV9HRU5FUkFUSU5HIHNoYXJlIHRoZSBzYW1lIHBhZ2UKKyAgICAgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLnNob3dfcGFnZShuZXh0X3N0ZXApCisKKyAgICAgICAgZWxpZiBuZXh0X3N0ZXAgPT0gc2VsZi5QQUNLQUdFX0dFTkVSQVRFRDoKKyAgICAgICAgICAgIHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2Uuc2V0X3RpdGxlKCJTdGVwIDIgb2YgMjogRWRpdCBwYWNrYWdlcyIpCisgICAgICAgICAgICBpZiBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfaW1hZ2UoKSA9PSBzZWxmLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2Uuc2V0X3BhY2thZ2VzX2N1cnJfdGFiKHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2UuQUxMKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLnNldF9wYWNrYWdlc19jdXJyX3RhYihzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLklOQ0xVREVEKQorICAgICAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5zaG93X3BhZ2Uoc2VsZi5jdXJyZW50X2xvZ2ZpbGUpCisKKyAgICAgICAgZWxpZiBuZXh0X3N0ZXAgPT0gc2VsZi5JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgIyBhZnRlciBwYWNrYWdlcyBhcmUgZ2VuZXJhdGVkLCBzZWxlY3RlZF9wYWNrYWdlcyBuZWVkIHRvCisgICAgICAgICAgICAjIGJlIHVwZGF0ZWQgaW4gcGFja2FnZV9tb2RlbCBwZXIgc2VsZWN0ZWRfaW1hZ2UgaW4gcmVjaXBlX21vZGVsCisgICAgICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS5zaG93X3BhZ2UobmV4dF9zdGVwKQorCisgICAgICAgIGVsaWYgbmV4dF9zdGVwID09IHNlbGYuSU1BR0VfR0VORVJBVEVEOgorICAgICAgICAgICAgc2VsZi5pbWFnZV9kZXRhaWxzX3BhZ2Uuc2hvd19wYWdlKG5leHRfc3RlcCkKKworICAgICAgICBlbGlmIG5leHRfc3RlcCA9PSBzZWxmLk1ZX0lNQUdFX09QRU5FRDoKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfZGV0YWlsc19wYWdlLnNob3dfcGFnZShuZXh0X3N0ZXApCisKKyAgICAgICAgc2VsZi5wcmV2aW91c19zdGVwID0gc2VsZi5jdXJyZW50X3N0ZXAKKyAgICAgICAgc2VsZi5jdXJyZW50X3N0ZXAgPSBuZXh0X3N0ZXAKKworICAgIGRlZiBzZXRfdXNlcl9jb25maWdfcHJveGllcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSA9PSBUcnVlOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9odHRwX3Byb3h5KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3Byb3h5KCJodHRwIikpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2h0dHBzX3Byb3h5KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3Byb3h5KCJodHRwcyIpKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9mdHBfcHJveHkoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcHJveHkoImZ0cCIpKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9zb2Nrc19wcm94eShzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wcm94eSgic29ja3MiKSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfY3ZzX3Byb3h5KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX2hvc3Rfb25seSgiY3ZzIiksIHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3BvcnRfb25seSgiY3ZzIikpCisgICAgICAgIGVsaWYgc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSA9PSBGYWxzZToKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfaHR0cF9wcm94eSgiIikKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfaHR0cHNfcHJveHkoIiIpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2Z0cF9wcm94eSgiIikKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfc29ja3NfcHJveHkoIiIpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2N2c19wcm94eSgiIiwgIiIpCisKKyAgICBkZWYgc2V0X3VzZXJfY29uZmlnX2V4dHJhKHNlbGYpOgorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X3Jvb3Rmc19zaXplKHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZV9yb290ZnNfc2l6ZSkKKyAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9leHRyYV9zaXplKHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZV9leHRyYV9zaXplKQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2luY29tcGF0aWJsZV9saWNlbnNlKHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlKQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X3Nka19tYWNoaW5lKHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX3Nka19tYWNoaW5lKQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2ltYWdlX2ZzdHlwZXMoc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX2ZzdHlwZXMpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfZXh0cmFfY29uZmlnKHNlbGYuY29uZmlndXJhdGlvbi5leHRyYV9zZXR0aW5nKQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2V4dHJhX2luaGVyaXQoInBhY2thZ2VpbmZvIGltYWdlX3R5cGVzIikKKyAgICAgICAgc2VsZi5zZXRfdXNlcl9jb25maWdfcHJveGllcygpCisKKyAgICBkZWYgc2V0X3VzZXJfY29uZmlnKHNlbGYpOgorICAgICAgICAjIHNldCBiYiBsYXllcnMKKyAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9iYmxheWVycyhzZWxmLmNvbmZpZ3VyYXRpb24ubGF5ZXJzKQorICAgICAgICAjIHNldCBsb2NhbCBjb25maWd1cmF0aW9uCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfbWFjaGluZShzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoKQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X3BhY2thZ2VfZm9ybWF0KHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX3BhY2thZ2VfZm9ybWF0KQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2Rpc3RybyhzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9kaXN0cm8pCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfZGxfZGlyKHNlbGYuY29uZmlndXJhdGlvbi5kbGRpcikKKyAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9zc3RhdGVfZGlyKHNlbGYuY29uZmlndXJhdGlvbi5zc3RhdGVkaXIpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfc3N0YXRlX21pcnJvcnMoc2VsZi5jb25maWd1cmF0aW9uLnNzdGF0ZW1pcnJvcikKKyAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9wbWFrZShzZWxmLmNvbmZpZ3VyYXRpb24ucG1ha2UpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfYmJ0aHJlYWRzKHNlbGYuY29uZmlndXJhdGlvbi5iYnRocmVhZCkKKyAgICAgICAgc2VsZi5zZXRfdXNlcl9jb25maWdfZXh0cmEoKQorCisgICAgZGVmIHVwZGF0ZV9yZWNpcGVfbW9kZWwoc2VsZiwgc2VsZWN0ZWRfaW1hZ2UsIHNlbGVjdGVkX3JlY2lwZXMpOgorICAgICAgICBzZWxmLnJlY2lwZV9tb2RlbC5zZXRfc2VsZWN0ZWRfaW1hZ2Uoc2VsZWN0ZWRfaW1hZ2UpCisgICAgICAgIHNlbGYucmVjaXBlX21vZGVsLnNldF9zZWxlY3RlZF9yZWNpcGVzKHNlbGVjdGVkX3JlY2lwZXMpCisKKyAgICBkZWYgdXBkYXRlX3BhY2thZ2VfbW9kZWwoc2VsZiwgc2VsZWN0ZWRfcGFja2FnZXMsIHVzZXJfc2VsZWN0ZWRfcGFja2FnZXM9Tm9uZSk6CisgICAgICAgIGlmIHVzZXJfc2VsZWN0ZWRfcGFja2FnZXM6CisgICAgICAgICAgICBsZWZ0ID0gc2VsZi5wYWNrYWdlX21vZGVsLnNldF9zZWxlY3RlZF9wYWNrYWdlcyh1c2VyX3NlbGVjdGVkX3BhY2thZ2VzLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnVzZXJfc2VsZWN0ZWRfcGFja2FnZXMgKz0gbGVmdAorICAgICAgICBsZWZ0ID0gc2VsZi5wYWNrYWdlX21vZGVsLnNldF9zZWxlY3RlZF9wYWNrYWdlcyhzZWxlY3RlZF9wYWNrYWdlcykKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNlbGVjdGVkX3BhY2thZ2VzICs9IGxlZnQKKworICAgIGRlZiB1cGRhdGVfY29uZmlndXJhdGlvbl9wYXJhbWV0ZXJzKHNlbGYsIHBhcmFtcyk6CisgICAgICAgIGlmIHBhcmFtczoKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi51cGRhdGUocGFyYW1zKQorICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJzLnVwZGF0ZShwYXJhbXMpCisKKyAgICBkZWYgc2V0X2Jhc2VfaW1hZ2Uoc2VsZik6CisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbml0aWFsX3NlbGVjdGVkX2ltYWdlID0gc2VsZi5jb25maWd1cmF0aW9uLnNlbGVjdGVkX2ltYWdlCisgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9pbWFnZSAhPSBzZWxmLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgc2VsZi5ob2JfaW1hZ2UgPSBzZWxmLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfaW1hZ2UgKyAiLWVkaXRlZCIKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfbWFjaCA9ICIiCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5jbGVhcl9zZWxlY3Rpb24oKQorICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS5zd2l0Y2hfbWFjaGluZV9jb21ibygpCisgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5NQUNISU5FX1NFTEVDVElPTikKKworICAgICMgQ2FsbGJhY2sgRnVuY3Rpb25zCisgICAgZGVmIGhhbmRsZXJfY29uZmlnX3VwZGF0ZWRfY2Ioc2VsZiwgaGFuZGxlciwgd2hpY2gsIHZhbHVlcyk6CisgICAgICAgIGlmIHdoaWNoID09ICJkaXN0cm8iOgorICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJzLmFsbF9kaXN0cm9zID0gdmFsdWVzCisgICAgICAgIGVsaWYgd2hpY2ggPT0gIm1hY2hpbmUiOgorICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJzLmFsbF9tYWNoaW5lcyA9IHZhbHVlcworICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudXBkYXRlX21hY2hpbmVfY29tYm8oKQorICAgICAgICBlbGlmIHdoaWNoID09ICJtYWNoaW5lLXNkayI6CisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcnMuYWxsX3Nka19tYWNoaW5lcyA9IHZhbHVlcworCisgICAgZGVmIGhhbmRsZXJfcGFja2FnZV9mb3JtYXRzX3VwZGF0ZWRfY2Ioc2VsZiwgaGFuZGxlciwgZm9ybWF0cyk6CisgICAgICAgIHNlbGYucGFyYW1ldGVycy5hbGxfcGFja2FnZV9mb3JtYXRzID0gZm9ybWF0cworCisgICAgZGVmIHN3aXRjaF90b19pbWFnZV9jb25maWd1cmF0aW9uX2hlbHBlcihzZWxmKToKKyAgICAgICAgc2VsZi5zYW5pdHlfY2hlY2tfcGFnZS5zdG9wKCkKKyAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLklNQUdFX0NPTkZJR1VSQVRJT04pCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnN3aXRjaF9tYWNoaW5lX2NvbWJvKCkKKworICAgIGRlZiBzaG93X25ldHdvcmtfZXJyb3JfZGlhbG9nX2hlbHBlcihzZWxmKToKKyAgICAgICAgc2VsZi5zYW5pdHlfY2hlY2tfcGFnZS5zdG9wKCkKKyAgICAgICAgc2VsZi5zaG93X25ldHdvcmtfZXJyb3JfZGlhbG9nKCkKKworICAgIGRlZiBoYW5kbGVyX2NvbW1hbmRfc3VjY2VlZGVkX2NiKHNlbGYsIGhhbmRsZXIsIGluaXRjbWQpOgorICAgICAgICBpZiBpbml0Y21kID09IHNlbGYuaGFuZGxlci5HRU5FUkFURV9DT05GSUdVUkFUSU9OOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX21hY2g6CisgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfbWFjaCA9IHNlbGYuaGFuZGxlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiSE9CX01BQ0hJTkUiXSkgb3IgIiIKKyAgICAgICAgICAgIHNlbGYudXBkYXRlX2NvbmZpZ3VyYXRpb25fcGFyYW1ldGVycyhzZWxmLmdldF9wYXJhbWV0ZXJzX3N5bmMoKSkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNhbml0eV9jaGVja2VkOgorICAgICAgICAgICAgICAgIHNlbGYuc2FuaXR5X2NoZWNrKCkKKyAgICAgICAgICAgICAgICBzZWxmLnNhbml0eV9jaGVja2VkID0gVHJ1ZQorICAgICAgICBlbGlmIGluaXRjbWQgPT0gc2VsZi5oYW5kbGVyLlNBTklUWV9DSEVDSzoKKyAgICAgICAgICAgIGlmIHNlbGYuaGFkX25ldHdvcmtfZXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5oYWRfbmV0d29ya19lcnJvciA9IEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRlX2FmdGVyX3Nhbml0eV9jaGVjayhzZWxmLnNob3dfbmV0d29ya19lcnJvcl9kaWFsb2dfaGVscGVyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFN3aXRjaCB0byB0aGUgJ2ltYWdlIGNvbmZpZ3VyYXRpb24nIHBhZ2Ugbm93LCBidXQgd2UgbWlnaHQgbmVlZAorICAgICAgICAgICAgICAgICMgdG8gd2FpdCBmb3IgdGhlIG1pbmltdW0gZGlzcGxheSB0aW1lIG9mIHRoZSBzYW5pdHkgY2hlY2sgcGFnZQorICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0ZV9hZnRlcl9zYW5pdHlfY2hlY2soc2VsZi5zd2l0Y2hfdG9faW1hZ2VfY29uZmlndXJhdGlvbl9oZWxwZXIpCisgICAgICAgIGVsaWYgaW5pdGNtZCBpbiBbc2VsZi5oYW5kbGVyLkdFTkVSQVRFX1JFQ0lQRVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVyLkdFTkVSQVRFX1BBQ0tBR0VTLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlci5HRU5FUkFURV9JTUFHRV06CisgICAgICAgICAgICBzZWxmLnVwZGF0ZV9jb25maWd1cmF0aW9uX3BhcmFtZXRlcnMoc2VsZi5nZXRfcGFyYW1ldGVyc19zeW5jKCkpCisgICAgICAgICAgICBzZWxmLnJlcXVlc3RfcGFja2FnZV9pbmZvX2FzeW5jKCkKKyAgICAgICAgZWxpZiBpbml0Y21kID09IHNlbGYuaGFuZGxlci5QT1BVTEFURV9QQUNLQUdFSU5GTzoKKyAgICAgICAgICAgIGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuUkNQUEtHSU5GT19QT1BVTEFUSU5HOgorICAgICAgICAgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5SQ1BQS0dJTkZPX1BPUFVMQVRFRCkKKyAgICAgICAgICAgICAgICBzZWxmLnJjcHBrZ2xpc3RfcG9wdWxhdGVkKCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgc2VsZi5yY3Bwa2dsaXN0X3BvcHVsYXRlZCgpCisgICAgICAgICAgICBpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLkZBU1RfSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgICAgICBzZWxmLmdlbmVyYXRlX2ltYWdlX2FzeW5jKFRydWUpCisKKyAgICBkZWYgc2hvd19lcnJvcl9kaWFsb2coc2VsZiwgbXNnKToKKyAgICAgICAgbGJsID0gIjxiPkhvYiBmb3VuZCBhbiBlcnJvcjwvYj4iCisgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuTUVTU0FHRV9FUlJPUiwgbXNnKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKKyAgICBkZWYgc2hvd193YXJuaW5nX2RpYWxvZyhzZWxmKToKKyAgICAgICAgZGlhbG9nID0gUGFyc2luZ1dhcm5pbmdzRGlhbG9nKHRpdGxlID0gIlZpZXcgd2FybmluZ3MiLAorICAgICAgICAgICAgICAgIHdhcm5pbmdzID0gc2VsZi5wYXJzaW5nX3dhcm5pbmdzLAorICAgICAgICAgICAgICAgIHBhcmVudCA9IE5vbmUsCisgICAgICAgICAgICAgICAgZmxhZ3MgPSBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIHNob3dfbmV0d29ya19lcnJvcl9kaWFsb2coc2VsZik6CisgICAgICAgIGxibCA9ICI8Yj5Ib2IgY2Fubm90IGNvbm5lY3QgdG8gdGhlIG5ldHdvcms8L2I+IgorICAgICAgICBtc2cgPSBtc2cgKyAiUGxlYXNlIGNoZWNrIHlvdXIgbmV0d29yayBjb25uZWN0aW9uLiBJZiB5b3UgYXJlIHVzaW5nIGEgcHJveHkgc2VydmVyLCBwbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LiIKKyAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0VSUk9SLCBtc2cpCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJQcm94eSBzZXR0aW5ncyIsIGd0ay5SRVNQT05TRV9DQU5DRUwpCisgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICByZXMgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICBpZiByZXMgPT0gZ3RrLlJFU1BPTlNFX0NBTkNFTDoKKyAgICAgICAgICAgIHJlcywgc2V0dGluZ3NfY2hhbmdlZCA9IHNlbGYuc2hvd19zaW1wbGVfc2V0dGluZ3NfZGlhbG9nKFNpbXBsZVNldHRpbmdzRGlhbG9nLlBST1hJRVNfUEFHRV9JRCkKKyAgICAgICAgICAgIGlmIG5vdCByZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiBzZXR0aW5nc19jaGFuZ2VkOgorICAgICAgICAgICAgICAgIHNlbGYucmVwYXJzZV9wb3N0X2Fkdl9zZXR0aW5ncygpCisKKyAgICBkZWYgaGFuZGxlcl9jb21tYW5kX2ZhaWxlZF9jYihzZWxmLCBoYW5kbGVyLCBtc2cpOgorICAgICAgICBpZiBtc2c6CisgICAgICAgICAgICBzZWxmLnNob3dfZXJyb3JfZGlhbG9nKG1zZykKKyAgICAgICAgc2VsZi5yZXNldCgpCisKKyAgICBkZWYgaGFuZGxlcl9wYXJzaW5nX3dhcm5pbmdfY2Ioc2VsZiwgaGFuZGxlciwgd2Fybl9tc2cpOgorICAgICAgICBzZWxmLnBhcnNpbmdfd2FybmluZ3MuYXBwZW5kKHdhcm5fbXNnKQorCisgICAgZGVmIGhhbmRsZXJfc2FuaXR5X2ZhaWxlZF9jYihzZWxmLCBoYW5kbGVyLCBtc2csIG5ldHdvcmtfZXJyb3IpOgorICAgICAgICBzZWxmLnJlc2V0KCkKKyAgICAgICAgaWYgbmV0d29ya19lcnJvcjoKKyAgICAgICAgICAgICMgTWFyayB0aGlzIGluIGFuIGludGVybmFsIGZpZWxkLiBUaGUgIm5ldHdvcmsgZXJyb3IiIGRpYWxvZyB3aWxsIGJlCisgICAgICAgICAgICAjIHNob3duIGxhdGVyLCB3aGVuIGEgU2FuaXR5Q2hlY2tQYXNzZWQgZXZlbnQgd2lsbCBiZSBoYW5kbGVkCisgICAgICAgICAgICAjIChhcyBzZW50IGJ5IHNhbml0eS5iYmNsYXNzKQorICAgICAgICAgICAgc2VsZi5oYWRfbmV0d29ya19lcnJvciA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKCJ5b3VyIGxvY2FsLmNvbmYiLCAiU2V0dGluZ3MiKQorICAgICAgICAgICAgc2VsZi5zaG93X2Vycm9yX2RpYWxvZyhtc2cpCisgICAgICAgICAgICBzZWxmLnJlc2V0KCkKKworICAgIGRlZiB3aW5kb3dfc2Vuc2l0aXZlKHNlbGYsIHNlbnNpdGl2ZSk6CisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLm1hY2hpbmVfY29tYm8uc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLm1hY2hpbmVfY29tYm8uY2hpbGQuc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLmltYWdlX2NvbWJvLnNldF9zZW5zaXRpdmUoc2Vuc2l0aXZlKQorICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS5pbWFnZV9jb21iby5jaGlsZC5zZXRfc2Vuc2l0aXZlKHNlbnNpdGl2ZSkKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UubGF5ZXJfYnV0dG9uLnNldF9zZW5zaXRpdmUoc2Vuc2l0aXZlKQorICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS5sYXllcl9pbmZvX2ljb24uc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnRvb2xiYXIuc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnZpZXdfYWR2X2NvbmZpZ3VyYXRpb25fYnV0dG9uLnNldF9zZW5zaXRpdmUoc2Vuc2l0aXZlKQorICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS5jb25maWdfYnVpbGRfYnV0dG9uLnNldF9zZW5zaXRpdmUoc2Vuc2l0aXZlKQorCisgICAgICAgIHNlbGYucmVjaXBlX2RldGFpbHNfcGFnZS5zZXRfc2Vuc2l0aXZlKHNlbnNpdGl2ZSkKKyAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5zZXRfc2Vuc2l0aXZlKHNlbnNpdGl2ZSkKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2Uuc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisgICAgICAgIHNlbGYuaW1hZ2VfZGV0YWlsc19wYWdlLnNldF9zZW5zaXRpdmUoc2Vuc2l0aXZlKQorCisgICAgICAgIGlmIHNlbnNpdGl2ZToKKyAgICAgICAgICAgIHNlbGYud2luZG93LnNldF9jdXJzb3IoTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYud2luZG93LnNldF9jdXJzb3IoZ3RrLmdkay5DdXJzb3IoZ3RrLmdkay5XQVRDSCkpCisgICAgICAgIHNlbGYuc2Vuc2l0aXZlID0gc2Vuc2l0aXZlCisKKworICAgIGRlZiBoYW5kbGVyX2dlbmVyYXRpbmdfZGF0YV9jYihzZWxmLCBoYW5kbGVyKToKKyAgICAgICAgc2VsZi53aW5kb3dfc2Vuc2l0aXZlKEZhbHNlKQorCisgICAgZGVmIGhhbmRsZXJfZGF0YV9nZW5lcmF0ZWRfY2Ioc2VsZiwgaGFuZGxlcik6CisgICAgICAgIHNlbGYud2luZG93X3NlbnNpdGl2ZShUcnVlKQorCisgICAgZGVmIHJjcHBrZ2xpc3RfcG9wdWxhdGVkKHNlbGYpOgorICAgICAgICBzZWxlY3RlZF9pbWFnZSA9IHNlbGYuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9pbWFnZQorICAgICAgICBzZWxlY3RlZF9yZWNpcGVzID0gc2VsZi5jb25maWd1cmF0aW9uLnNlbGVjdGVkX3JlY2lwZXNbOl0KKyAgICAgICAgc2VsZWN0ZWRfcGFja2FnZXMgPSBzZWxmLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcGFja2FnZXNbOl0KKyAgICAgICAgdXNlcl9zZWxlY3RlZF9wYWNrYWdlcyA9IHNlbGYuY29uZmlndXJhdGlvbi51c2VyX3NlbGVjdGVkX3BhY2thZ2VzWzpdCisKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudXBkYXRlX2ltYWdlX2NvbWJvKHNlbGYucmVjaXBlX21vZGVsLCBzZWxlY3RlZF9pbWFnZSkKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudXBkYXRlX2ltYWdlX2Rlc2MoKQorICAgICAgICBzZWxmLnVwZGF0ZV9yZWNpcGVfbW9kZWwoc2VsZWN0ZWRfaW1hZ2UsIHNlbGVjdGVkX3JlY2lwZXMpCisgICAgICAgIHNlbGYudXBkYXRlX3BhY2thZ2VfbW9kZWwoc2VsZWN0ZWRfcGFja2FnZXMsIHVzZXJfc2VsZWN0ZWRfcGFja2FnZXMpCisKKyAgICBkZWYgcmVjaXBlbGlzdF9jaGFuZ2VkX2NiKHNlbGYsIHJlY2lwZV9tb2RlbCk6CisgICAgICAgIHNlbGYucmVjaXBlX2RldGFpbHNfcGFnZS5yZWZyZXNoX3NlbGVjdGlvbigpCisKKyAgICBkZWYgcGFja2FnZWxpc3RfY2hhbmdlZF9jYihzZWxmLCBwYWNrYWdlX21vZGVsKToKKyAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5yZWZyZXNoX3NlbGVjdGlvbigpCisKKyAgICBkZWYgaGFuZGxlcl9yZWNpcGVfcG9wdWxhdGVkX2NiKHNlbGYsIGhhbmRsZXIpOgorICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS51cGRhdGVfcHJvZ3Jlc3NfYmFyKCJQb3B1bGF0aW5nIHJlY2lwZXMiLCAwLjk5KQorCisgICAgZGVmIGhhbmRsZXJfcGFja2FnZV9wb3B1bGF0ZWRfY2Ioc2VsZiwgaGFuZGxlcik6CisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnVwZGF0ZV9wcm9ncmVzc19iYXIoIlBvcHVsYXRpbmcgcGFja2FnZXMiLCAxLjApCisKKyAgICBkZWYgaGFuZGxlcl9wYXJzaW5nX3N0YXJ0ZWRfY2Ioc2VsZiwgaGFuZGxlciwgbWVzc2FnZSk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9zdGVwICE9IHNlbGYuUkNQUEtHSU5GT19QT1BVTEFUSU5HOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZnJhY3Rpb24gPSAwCisgICAgICAgIGlmIG1lc3NhZ2VbImV2ZW50bmFtZSJdID09ICJUcmVlRGF0YVByZXBhcmF0aW9uU3RhcnRlZCI6CisgICAgICAgICAgICBmcmFjdGlvbiA9IDAuNiArIGZyYWN0aW9uCisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS5zdG9wX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudXBkYXRlX3Byb2dyZXNzX2JhcigiR2VuZXJhdGluZyBkZXBlbmRlbmN5IHRyZWUiLCBmcmFjdGlvbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnN0b3BfYnV0dG9uLnNldF9zZW5zaXRpdmUoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnVwZGF0ZV9wcm9ncmVzc19iYXIobWVzc2FnZVsidGl0bGUiXSwgZnJhY3Rpb24pCisKKyAgICBkZWYgaGFuZGxlcl9wYXJzaW5nX2NiKHNlbGYsIGhhbmRsZXIsIG1lc3NhZ2UpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfc3RlcCAhPSBzZWxmLlJDUFBLR0lORk9fUE9QVUxBVElORzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZyYWN0aW9uID0gbWVzc2FnZVsiY3VycmVudCJdICogMS4wL21lc3NhZ2VbInRvdGFsIl0KKyAgICAgICAgaWYgbWVzc2FnZVsiZXZlbnRuYW1lIl0gPT0gIlRyZWVEYXRhUHJlcGFyYXRpb25Qcm9ncmVzcyI6CisgICAgICAgICAgICBmcmFjdGlvbiA9IDAuNiArIDAuMzggKiBmcmFjdGlvbgorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudXBkYXRlX3Byb2dyZXNzX2JhcigiR2VuZXJhdGluZyBkZXBlbmRlbmN5IHRyZWUiLCBmcmFjdGlvbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZyYWN0aW9uID0gMC42ICogZnJhY3Rpb24KKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnVwZGF0ZV9wcm9ncmVzc19iYXIobWVzc2FnZVsidGl0bGUiXSwgZnJhY3Rpb24pCisKKyAgICBkZWYgaGFuZGxlcl9wYXJzaW5nX2NvbXBsZXRlZF9jYihzZWxmLCBoYW5kbGVyLCBtZXNzYWdlKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X3N0ZXAgIT0gc2VsZi5SQ1BQS0dJTkZPX1BPUFVMQVRJTkc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBtZXNzYWdlWyJldmVudG5hbWUiXSA9PSAiVHJlZURhdGFQcmVwYXJhdGlvbkNvbXBsZXRlZCI6CisgICAgICAgICAgICBmcmFjdGlvbiA9IDAuOTgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZyYWN0aW9uID0gMC42CisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnVwZGF0ZV9wcm9ncmVzc19iYXIoIkdlbmVyYXRpbmcgZGVwZW5kZW5jeSB0cmVlIiwgZnJhY3Rpb24pCisKKyAgICBkZWYgaGFuZGxlcl9idWlsZF9zdGFydGVkX2NiKHNlbGYsIHJ1bm5pbmdfYnVpbGQpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLkZBU1RfSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgIGZyYWN0aW9uID0gMAorICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgIGlmIHNlbGYucHJldmlvdXNfc3RlcCA9PSBzZWxmLkZBU1RfSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDAuOQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDAKKyAgICAgICAgZWxpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLlBBQ0tBR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgIGZyYWN0aW9uID0gMAorICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS51cGRhdGVfcHJvZ3Jlc3NfYmFyKCJCdWlsZCBTdGFydGVkOiAiLCBmcmFjdGlvbikKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2Uuc2hvd19jb25maWd1cmF0aW9ucyhzZWxmLmNvbmZpZ3VyYXRpb24sIHNlbGYucGFyYW1ldGVycykKKworICAgIGRlZiBidWlsZF9zdWNjZWVkZWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuRkFTVF9JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjkKKyAgICAgICAgZWxpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLklNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICBmcmFjdGlvbiA9IDEuMAorICAgICAgICAgICAgdmVyc2lvbiA9ICIiCisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfbmFtZXMgPSBbXQorICAgICAgICAgICAgc2VsZWN0ZWRfaW1hZ2UgPSBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfaW1hZ2UoKQorICAgICAgICAgICAgaWYgc2VsZWN0ZWRfaW1hZ2UgPT0gc2VsZi5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXzoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbmZpZ3VyYXRpb24uaW5pdGlhbF9zZWxlY3RlZF9pbWFnZSAhPSBzZWxlY3RlZF9pbWFnZToKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHNlbGYucmVjaXBlX21vZGVsLmdldF9jdXN0b21faW1hZ2VfdmVyc2lvbigpCisgICAgICAgICAgICAgICAgbGlua25hbWUgPSBzZWxmLmhvYl9pbWFnZSArIHZlcnNpb24gKyAiLSIgKyBzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxpbmtuYW1lID0gc2VsZWN0ZWRfaW1hZ2UgKyAnLScgKyBzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoCisgICAgICAgICAgICBpbWFnZV9leHRlbnNpb24gPSBzZWxmLmdldF9pbWFnZV9leHRlbnNpb24oKQorICAgICAgICAgICAgZm9yIGltYWdlX3R5cGUgaW4gc2VsZi5wYXJhbWV0ZXJzLmltYWdlX3R5cGVzOgorICAgICAgICAgICAgICAgIGlmIGltYWdlX3R5cGUgaW4gaW1hZ2VfZXh0ZW5zaW9uOgorICAgICAgICAgICAgICAgICAgICByZWFsX3R5cGVzID0gaW1hZ2VfZXh0ZW5zaW9uW2ltYWdlX3R5cGVdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVhbF90eXBlcyA9IFtpbWFnZV90eXBlXQorICAgICAgICAgICAgICAgIGZvciByZWFsX2ltYWdlX3R5cGUgaW4gcmVhbF90eXBlczoKKyAgICAgICAgICAgICAgICAgICAgbGlua3BhdGggPSBzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfYWRkciArICcvJyArIGxpbmtuYW1lICsgJy4nICsgcmVhbF9pbWFnZV90eXBlCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxpbmtwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyYW1ldGVycy5pbWFnZV9uYW1lcy5hcHBlbmQob3MucmVhZGxpbmsobGlua3BhdGgpKQorICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuUEFDS0FHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgZnJhY3Rpb24gPSAxLjAKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2UudXBkYXRlX3Byb2dyZXNzX2JhcigiQnVpbGQgQ29tcGxldGVkOiAiLCBmcmFjdGlvbikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmJ1aWxkX3N1Y2NlZWRlZF9hc3luYygpCisgICAgICAgIHNlbGYuc3RvcHBpbmcgPSBGYWxzZQorCisgICAgICAgIGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuUEFDS0FHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLlBBQ0tBR0VfR0VORVJBVEVEKQorICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5JTUFHRV9HRU5FUkFURUQpCisKKyAgICBkZWYgYnVpbGRfZmFpbGVkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnN0b3BwaW5nOgorICAgICAgICAgICAgc3RhdHVzID0gInN0b3AiCisgICAgICAgICAgICBtZXNzYWdlID0gIkJ1aWxkIHN0b3BwZWQ6ICIKKyAgICAgICAgICAgIGZyYWN0aW9uID0gc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2UucHJvZ3Jlc3NfYmFyLmdldF9mcmFjdGlvbigpCisgICAgICAgICAgICBzdG9wX3RvX25leHRfZWRpdCA9ICIiCisgICAgICAgICAgICBpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLkZBU1RfSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgICAgICBzdG9wX3RvX25leHRfZWRpdCA9ICJpbWFnZSBjb25maWd1cmF0aW9uIgorICAgICAgICAgICAgZWxpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLklNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5wcmV2aW91c19zdGVwID09IHNlbGYuRkFTVF9JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgICAgICAgICBzdG9wX3RvX25leHRfZWRpdCA9ICJpbWFnZSBjb25maWd1cmF0aW9uIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHN0b3BfdG9fbmV4dF9lZGl0ID0gInBhY2thZ2VzIgorICAgICAgICAgICAgZWxpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLlBBQ0tBR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgICAgICBzdG9wX3RvX25leHRfZWRpdCA9ICJyZWNpcGVzIgorICAgICAgICAgICAgYnV0dG9uID0gc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2Uuc2hvd19zdG9wX3BhZ2Uoc3RvcF90b19uZXh0X2VkaXQuc3BsaXQoJyAnKVswXSkKKyAgICAgICAgICAgIHNlbGYuc2V0X2RlZmF1bHQoYnV0dG9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmFpbF90b19uZXh0X2VkaXQgPSAiIgorICAgICAgICAgICAgaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5GQVNUX0lNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICAgICAgZmFpbF90b19uZXh0X2VkaXQgPSAiaW1hZ2UgY29uZmlndXJhdGlvbiIKKyAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDAuOQorICAgICAgICAgICAgZWxpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLklNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5wcmV2aW91c19zdGVwID09IHNlbGYuRkFTVF9JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgICAgICAgICBmYWlsX3RvX25leHRfZWRpdCA9ICJpbWFnZSBjb25maWd1cmF0aW9uIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZhaWxfdG9fbmV4dF9lZGl0ID0gInBhY2thZ2VzIgorICAgICAgICAgICAgICAgIGZyYWN0aW9uID0gMS4wCisgICAgICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuUEFDS0FHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgICAgIGZhaWxfdG9fbmV4dF9lZGl0ID0gInJlY2lwZXMiCisgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSAxLjAKKyAgICAgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLnNob3dfZmFpbF9wYWdlKGZhaWxfdG9fbmV4dF9lZGl0LnNwbGl0KCcgJylbMF0pCisgICAgICAgICAgICBzdGF0dXMgPSAiZmFpbCIKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiQnVpbGQgZmFpbGVkOiAiCisgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLnVwZGF0ZV9wcm9ncmVzc19iYXIobWVzc2FnZSwgZnJhY3Rpb24sIHN0YXR1cykKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2Uuc2hvd19iYWNrX2J1dHRvbigpCisgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLmhpZGVfc3RvcF9idXR0b24oKQorICAgICAgICBzZWxmLmhhbmRsZXIuYnVpbGRfZmFpbGVkX2FzeW5jKCkKKyAgICAgICAgc2VsZi5zdG9wcGluZyA9IEZhbHNlCisKKyAgICBkZWYgaGFuZGxlcl9idWlsZF9zdWNjZWVkZWRfY2Ioc2VsZiwgcnVubmluZ19idWlsZCk6CisgICAgICAgIGlmIG5vdCBzZWxmLnN0b3BwaW5nOgorICAgICAgICAgICAgc2VsZi5idWlsZF9zdWNjZWVkZWQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5idWlsZF9mYWlsZWQoKQorCisKKyAgICBkZWYgaGFuZGxlcl9idWlsZF9mYWlsZWRfY2Ioc2VsZiwgcnVubmluZ19idWlsZCk6CisgICAgICAgIHNlbGYuYnVpbGRfZmFpbGVkKCkKKworICAgIGRlZiBoYW5kbGVyX2J1aWxkX2Fib3J0ZWRfY2Ioc2VsZiwgcnVubmluZ19idWlsZCk6CisgICAgICAgIHNlbGYuYnVpbGRfZmFpbGVkKCkKKworICAgIGRlZiBoYW5kbGVyX25vX3Byb3ZpZGVyX2NiKHNlbGYsIHJ1bm5pbmdfYnVpbGQsIG1zZyk6CisgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgZ2xpYi5tYXJrdXBfZXNjYXBlX3RleHQobXNnKSwgZ3RrLk1FU1NBR0VfSU5GTykKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgZGlhbG9nLnJ1bigpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgc2VsZi5idWlsZF9mYWlsZWQoKQorCisgICAgZGVmIGhhbmRsZXJfdGFza19zdGFydGVkX2NiKHNlbGYsIHJ1bm5pbmdfYnVpbGQsIG1lc3NhZ2UpOiAKKyAgICAgICAgZnJhY3Rpb24gPSBtZXNzYWdlWyJjdXJyZW50Il0gKiAxLjAvbWVzc2FnZVsidG90YWwiXQorICAgICAgICB0aXRsZSA9ICJCdWlsZCBwYWNrYWdlcyIKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5GQVNUX0lNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICBpZiBtZXNzYWdlWyJldmVudG5hbWUiXSA9PSAic2NlbmVRdWV1ZVRhc2tTdGFydGVkIjoKKyAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDAuMjcgKiBmcmFjdGlvbgorICAgICAgICAgICAgZWxpZiBtZXNzYWdlWyJldmVudG5hbWUiXSA9PSAicnVuUXVldWVUYXNrU3RhcnRlZCI6CisgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjI3ICsgMC42MyAqIGZyYWN0aW9uCisgICAgICAgIGVsaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgdGl0bGUgPSAiQnVpbGQgaW1hZ2UiCisgICAgICAgICAgICBpZiBzZWxmLnByZXZpb3VzX3N0ZXAgPT0gc2VsZi5GQVNUX0lNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICAgICAgaWYgbWVzc2FnZVsiZXZlbnRuYW1lIl0gPT0gInNjZW5lUXVldWVUYXNrU3RhcnRlZCI6CisgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uID0gMC4yNyArIDAuNjMgKyAwLjAzICogZnJhY3Rpb24KKyAgICAgICAgICAgICAgICBlbGlmIG1lc3NhZ2VbImV2ZW50bmFtZSJdID09ICJydW5RdWV1ZVRhc2tTdGFydGVkIjoKKyAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjI3ICsgMC42MyArIDAuMDMgKyAwLjA3ICogZnJhY3Rpb24KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbWVzc2FnZVsiZXZlbnRuYW1lIl0gPT0gInNjZW5lUXVldWVUYXNrU3RhcnRlZCI6CisgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uID0gMC4yICogZnJhY3Rpb24KKyAgICAgICAgICAgICAgICBlbGlmIG1lc3NhZ2VbImV2ZW50bmFtZSJdID09ICJydW5RdWV1ZVRhc2tTdGFydGVkIjoKKyAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjIgKyAwLjggKiBmcmFjdGlvbgorICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuUEFDS0FHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgaWYgbWVzc2FnZVsiZXZlbnRuYW1lIl0gPT0gInNjZW5lUXVldWVUYXNrU3RhcnRlZCI6CisgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjIgKiBmcmFjdGlvbgorICAgICAgICAgICAgZWxpZiBtZXNzYWdlWyJldmVudG5hbWUiXSA9PSAicnVuUXVldWVUYXNrU3RhcnRlZCI6CisgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjIgKyAwLjggKiBmcmFjdGlvbgorICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS51cGRhdGVfcHJvZ3Jlc3NfYmFyKHRpdGxlICsgIjogIiwgZnJhY3Rpb24pCisgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLnVwZGF0ZV9idWlsZF9zdGF0dXMobWVzc2FnZVsiY3VycmVudCJdLCBtZXNzYWdlWyJ0b3RhbCJdLCBtZXNzYWdlWyJ0YXNrIl0pCisKKyAgICBkZWYgaGFuZGxlcl9kaXNrX2Z1bGxfY2Ioc2VsZiwgcnVubmluZ19idWlsZCk6CisgICAgICAgIHNlbGYuZGlza19mdWxsID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZXJfYnVpbGRfZmFpbHVyZV9jYihzZWxmLCBydW5uaW5nX2J1aWxkKToKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2Uuc2hvd19pc3N1ZXMoKQorCisgICAgZGVmIGhhbmRsZXJfYnVpbGRfbG9nX2NiKHNlbGYsIHJ1bm5pbmdfYnVpbGQsIGZ1bmMsIG9iaik6CisgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5sb2dnZXIsIGZ1bmMpOgorICAgICAgICAgICAgZ2V0YXR0cihzZWxmLmxvZ2dlciwgZnVuYykob2JqKQorCisgICAgZGVmIGRlc3Ryb3lfd2luZG93X2NiKHNlbGYsIHdpZGdldCwgZXZlbnQpOgorICAgICAgICBpZiBub3Qgc2VsZi5zZW5zaXRpdmU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbGlmIHNlbGYuaGFuZGxlci5idWlsZGluZzoKKyAgICAgICAgICAgIHNlbGYuc3RvcF9idWlsZCgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ3RrLm1haW5fcXVpdCgpCisKKyAgICBkZWYgZXZlbnRfaGFuZGxlX1NJR0lOVChzZWxmLCBzaWduYWwsIGZyYW1lKToKKyAgICAgICAgZm9yIHcgaW4gZ3RrLndpbmRvd19saXN0X3RvcGxldmVscygpOgorICAgICAgICAgICAgaWYgdy5nZXRfbW9kYWwoKToKKyAgICAgICAgICAgICAgICB3LnJlc3BvbnNlKGd0ay5SRVNQT05TRV9ERUxFVEVfRVZFTlQpCisgICAgICAgIHN5cy5leGl0KDApCisKKyAgICBkZWYgYnVpbGRfcGFja2FnZXMoc2VsZik6CisgICAgICAgIF8sIGFsbF9yZWNpcGVzID0gc2VsZi5yZWNpcGVfbW9kZWwuZ2V0X3NlbGVjdGVkX3JlY2lwZXMoKQorICAgICAgICBpZiBub3QgYWxsX3JlY2lwZXM6CisgICAgICAgICAgICBsYmwgPSAiPGI+Tm8gc2VsZWN0aW9ucyBtYWRlPC9iPiIKKyAgICAgICAgICAgIG1zZyA9ICJZb3UgaGF2ZSBub3QgbWFkZSBhbnkgc2VsZWN0aW9ucyIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgc28gdGhlcmUgaXNuJ3QgYW55dGhpbmcgdG8gYmFrZSBhdCB0aGlzIHRpbWUuIgorICAgICAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0lORk8sIG1zZykKKyAgICAgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgZGlhbG9nLnJ1bigpCisgICAgICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5nZW5lcmF0ZV9wYWNrYWdlc19hc3luYyhUcnVlKQorCisgICAgZGVmIGJ1aWxkX2ltYWdlKHNlbGYpOgorICAgICAgICBzZWxlY3RlZF9wYWNrYWdlcyA9IHNlbGYucGFja2FnZV9tb2RlbC5nZXRfc2VsZWN0ZWRfcGFja2FnZXMoKQorICAgICAgICBpZiBub3Qgc2VsZWN0ZWRfcGFja2FnZXM6ICAgICAgCisgICAgICAgICAgICBsYmwgPSAiPGI+Tm8gc2VsZWN0aW9ucyBtYWRlPC9iPiIKKyAgICAgICAgICAgIG1zZyA9ICJZb3UgaGF2ZSBub3QgbWFkZSBhbnkgc2VsZWN0aW9ucyIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgc28gdGhlcmUgaXNuJ3QgYW55dGhpbmcgdG8gYmFrZSBhdCB0aGlzIHRpbWUuIgorICAgICAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0lORk8sIG1zZykKKyAgICAgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgZGlhbG9nLnJ1bigpCisgICAgICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5nZW5lcmF0ZV9pbWFnZV9hc3luYyhUcnVlKQorCisgICAgZGVmIGp1c3RfYmFrZShzZWxmKToKKyAgICAgICAgc2VsZWN0ZWRfaW1hZ2UgPSBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfaW1hZ2UoKQorICAgICAgICBzZWxlY3RlZF9wYWNrYWdlcyA9IHNlbGYucGFja2FnZV9tb2RlbC5nZXRfc2VsZWN0ZWRfcGFja2FnZXMoKSBvciBbXQorCisgICAgICAgICMgSWYgbm8gYmFzZSBpbWFnZSBhbmQgbm8gc2VsZWN0ZWQgcGFja2FnZXMgZG9uJ3QgYnVpbGQgYW55dGhpbmcKKyAgICAgICAgaWYgbm90IChzZWxlY3RlZF9wYWNrYWdlcyBvciBzZWxlY3RlZF9pbWFnZSAhPSBzZWxmLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fKToKKyAgICAgICAgICAgIGxibCA9ICI8Yj5ObyBzZWxlY3Rpb25zIG1hZGU8L2I+IgorICAgICAgICAgICAgbXNnID0gIllvdSBoYXZlIG5vdCBtYWRlIGFueSBzZWxlY3Rpb25zIgorICAgICAgICAgICAgbXNnID0gbXNnICsgIiBzbyB0aGVyZSBpc24ndCBhbnl0aGluZyB0byBiYWtlIGF0IHRoaXMgdGltZS4iCisgICAgICAgICAgICBkaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfSU5GTywgbXNnKQorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICBkaWFsb2cucnVuKCkKKyAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuZmFzdF9nZW5lcmF0ZV9pbWFnZV9hc3luYyhUcnVlKQorCisgICAgZGVmIHNob3dfcmVjaXBlX3Byb3BlcnR5X2RpYWxvZyhzZWxmLCBwcm9wZXJ0aWVzKToKKyAgICAgICAgaW5mb3JtYXRpb24gPSB7fQorICAgICAgICBkaWFsb2cgPSBQcm9wZXJ0eURpYWxvZyh0aXRsZSA9IHByb3BlcnRpZXNbIm5hbWUiXSArJyAnKyAicHJvcGVydGllcyIsCisgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiA9IHByb3BlcnRpZXMsCisgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKKworICAgICAgICBkaWFsb2cuc2V0X21vZGFsKEZhbHNlKQorCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9OTykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgbGFtYmRhIHc6IGRpYWxvZy5kZXN0cm95KCkpCisKKyAgICAgICAgZGlhbG9nLnJ1bigpCisKKyAgICBkZWYgc2hvd19wYWNrYWdlc19wcm9wZXJ0eV9kaWFsb2coc2VsZiwgcHJvcGVydGllcyk6CisgICAgICAgIGluZm9ybWF0aW9uID0ge30KKyAgICAgICAgZGlhbG9nID0gUHJvcGVydHlEaWFsb2codGl0bGUgPSBwcm9wZXJ0aWVzWyJuYW1lIl0gKycgJysgInByb3BlcnRpZXMiLAorICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gPSBwcm9wZXJ0aWVzLAorICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gZ3RrLkRJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5UCisgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ3RrLkRJQUxPR19OT19TRVBBUkFUT1IpCisKKyAgICAgICAgZGlhbG9nLnNldF9tb2RhbChGYWxzZSkKKworICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfTk8pCisgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBidXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIGxhbWJkYSB3OiBkaWFsb2cuZGVzdHJveSgpKQorCisgICAgICAgIGRpYWxvZy5ydW4oKQorCisgICAgZGVmIHNob3dfbGF5ZXJfc2VsZWN0aW9uX2RpYWxvZyhzZWxmKToKKyAgICAgICAgZGlhbG9nID0gTGF5ZXJTZWxlY3Rpb25EaWFsb2codGl0bGUgPSAiTGF5ZXJzIiwKKyAgICAgICAgICAgICAgICAgICAgIGxheWVycyA9IGNvcHkuZGVlcGNvcHkoc2VsZi5jb25maWd1cmF0aW9uLmxheWVycyksCisgICAgICAgICAgICAgICAgICAgICBsYXllcnNfbm9uX3JlbW92YWJsZSA9IGNvcHkuZGVlcGNvcHkoc2VsZi5jb25maWd1cmF0aW9uLmxheWVyc19ub25fcmVtb3ZhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgIGFsbF9sYXllcnMgPSBzZWxmLnBhcmFtZXRlcnMuYWxsX2xheWVycywKKyAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHNlbGYsCisgICAgICAgICAgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfTU9EQUwKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ3RrLkRJQUxPR19OT19TRVBBUkFUT1IpCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDYW5jZWwiLCBndGsuUkVTUE9OU0VfTk8pCisgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiT0siLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5sYXllcnMgPSBkaWFsb2cubGF5ZXJzCisgICAgICAgICAgICAjIERPIHJlZnJlc2ggbGF5ZXJzCisgICAgICAgICAgICBpZiBkaWFsb2cubGF5ZXJzX2NoYW5nZWQ6CisgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfY29uZmlnX2FzeW5jKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIGdldF9pbWFnZV9leHRlbnNpb24oc2VsZik6CisgICAgICAgIGltYWdlX2V4dGVuc2lvbiA9IHt9CisgICAgICAgIGZvciB0eXBlIGluIHNlbGYucGFyYW1ldGVycy5pbWFnZV90eXBlczoKKyAgICAgICAgICAgIGV4dCA9IHNlbGYuaGFuZGxlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiSU1BR0VfRVhURU5TSU9OXyVzIiAlIHR5cGVdKQorICAgICAgICAgICAgaWYgZXh0OgorICAgICAgICAgICAgICAgIGltYWdlX2V4dGVuc2lvblt0eXBlXSA9IGV4dC5zcGxpdCgnICcpCisKKyAgICAgICAgcmV0dXJuIGltYWdlX2V4dGVuc2lvbgorCisgICAgZGVmIHNob3dfbG9hZF9teV9pbWFnZXNfZGlhbG9nKHNlbGYpOgorICAgICAgICBpbWFnZV9leHRlbnNpb24gPSBzZWxmLmdldF9pbWFnZV9leHRlbnNpb24oKQorICAgICAgICBkaWFsb2cgPSBJbWFnZVNlbGVjdGlvbkRpYWxvZyhzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfYWRkciwgc2VsZi5wYXJhbWV0ZXJzLmltYWdlX3R5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3BlbiBNeSBJbWFnZXMiLCBzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkZJTEVfQ0hPT1NFUl9BQ1RJT05fU0FWRSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX2V4dGVuc2lvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9OTykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJPcGVuIiwgZ3RrLlJFU1BPTlNFX1lFUykKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVM6CisgICAgICAgICAgICBpZiBub3QgZGlhbG9nLmltYWdlX25hbWVzOgorICAgICAgICAgICAgICAgIGxibCA9ICI8Yj5ObyBzZWxlY3Rpb25zIG1hZGU8L2I+IgorICAgICAgICAgICAgICAgIG1zZyA9ICJZb3UgaGF2ZSBub3QgbWFkZSBhbnkgc2VsZWN0aW9ucyIKKyAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0lORk8sIG1zZykKKyAgICAgICAgICAgICAgICBidXR0b24gPSBjcnVtYnNfZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cucnVuKCkKKyAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJzLmltYWdlX2FkZHIgPSBkaWFsb2cuaW1hZ2VfZm9sZGVyCisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfbmFtZXMgPSBkaWFsb2cuaW1hZ2VfbmFtZXNbOl0KKyAgICAgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5NWV9JTUFHRV9PUEVORUQpCisKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIHNob3dfYWR2X3NldHRpbmdzX2RpYWxvZyhzZWxmLCB0YWI9Tm9uZSk6CisgICAgICAgIGRpYWxvZyA9IEFkdmFuY2VkU2V0dGluZ3NEaWFsb2codGl0bGUgPSAiQWR2YW5jZWQgY29uZmlndXJhdGlvbiIsCisgICAgICAgICAgICBjb25maWd1cmF0aW9uID0gY29weS5kZWVwY29weShzZWxmLmNvbmZpZ3VyYXRpb24pLAorICAgICAgICAgICAgYWxsX2ltYWdlX3R5cGVzID0gc2VsZi5wYXJhbWV0ZXJzLmltYWdlX3R5cGVzLAorICAgICAgICAgICAgYWxsX3BhY2thZ2VfZm9ybWF0cyA9IHNlbGYucGFyYW1ldGVycy5hbGxfcGFja2FnZV9mb3JtYXRzLAorICAgICAgICAgICAgYWxsX2Rpc3Ryb3MgPSBzZWxmLnBhcmFtZXRlcnMuYWxsX2Rpc3Ryb3MsCisgICAgICAgICAgICBhbGxfc2RrX21hY2hpbmVzID0gc2VsZi5wYXJhbWV0ZXJzLmFsbF9zZGtfbWFjaGluZXMsCisgICAgICAgICAgICBtYXhfdGhyZWFkcyA9IHNlbGYucGFyYW1ldGVycy5tYXhfdGhyZWFkcywKKyAgICAgICAgICAgIHBhcmVudCA9IHNlbGYsCisgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfTU9EQUwKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9OTykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJTYXZlIiwgZ3RrLlJFU1BPTlNFX1lFUykKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGRpYWxvZy5zZXRfc2F2ZV9idXR0b24oYnV0dG9uKQorICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICBzZXR0aW5nc19jaGFuZ2VkID0gRmFsc2UKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbiA9IGRpYWxvZy5jb25maWd1cmF0aW9uCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc2F2ZShzZWxmLmhhbmRsZXIsIFRydWUpICMgcmVtZW1iZXIgc2V0dGluZ3MKKyAgICAgICAgICAgIHNldHRpbmdzX2NoYW5nZWQgPSBkaWFsb2cuc2V0dGluZ3NfY2hhbmdlZAorICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisgICAgICAgIHJldHVybiByZXNwb25zZSA9PSBndGsuUkVTUE9OU0VfWUVTLCBzZXR0aW5nc19jaGFuZ2VkCisKKyAgICBkZWYgc2hvd19zaW1wbGVfc2V0dGluZ3NfZGlhbG9nKHNlbGYsIHRhYj1Ob25lKToKKyAgICAgICAgZGlhbG9nID0gU2ltcGxlU2V0dGluZ3NEaWFsb2codGl0bGUgPSAiU2V0dGluZ3MiLAorICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9IGNvcHkuZGVlcGNvcHkoc2VsZi5jb25maWd1cmF0aW9uKSwKKyAgICAgICAgICAgIGFsbF9pbWFnZV90eXBlcyA9IHNlbGYucGFyYW1ldGVycy5pbWFnZV90eXBlcywKKyAgICAgICAgICAgIGFsbF9wYWNrYWdlX2Zvcm1hdHMgPSBzZWxmLnBhcmFtZXRlcnMuYWxsX3BhY2thZ2VfZm9ybWF0cywKKyAgICAgICAgICAgIGFsbF9kaXN0cm9zID0gc2VsZi5wYXJhbWV0ZXJzLmFsbF9kaXN0cm9zLAorICAgICAgICAgICAgYWxsX3Nka19tYWNoaW5lcyA9IHNlbGYucGFyYW1ldGVycy5hbGxfc2RrX21hY2hpbmVzLAorICAgICAgICAgICAgbWF4X3RocmVhZHMgPSBzZWxmLnBhcmFtZXRlcnMubWF4X3RocmVhZHMsCisgICAgICAgICAgICBwYXJlbnQgPSBzZWxmLAorICAgICAgICAgICAgZmxhZ3MgPSBndGsuRElBTE9HX01PREFMCisgICAgICAgICAgICAgICAgICAgIHwgZ3RrLkRJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5UCisgICAgICAgICAgICAgICAgICAgIHwgZ3RrLkRJQUxPR19OT19TRVBBUkFUT1IsCisgICAgICAgICAgICBoYW5kbGVyID0gc2VsZi5oYW5kbGVyKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIlNhdmUiLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgaWYgdGFiOgorICAgICAgICAgICAgZGlhbG9nLnN3aXRjaF90b19wYWdlKHRhYikKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgc2V0dGluZ3NfY2hhbmdlZCA9IEZhbHNlCisgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVM6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24gPSBkaWFsb2cuY29uZmlndXJhdGlvbgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNhdmUoc2VsZi5oYW5kbGVyLCBUcnVlKSAjIHJlbWVtYmVyIHNldHRpbmdzCisgICAgICAgICAgICBzZXR0aW5nc19jaGFuZ2VkID0gZGlhbG9nLnNldHRpbmdzX2NoYW5nZWQKKyAgICAgICAgICAgIGlmIGRpYWxvZy5wcm94eV9zZXR0aW5nc19jaGFuZ2VkOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0X3VzZXJfY29uZmlnX3Byb3hpZXMoKQorICAgICAgICBlbGlmIGRpYWxvZy5wcm94eV90ZXN0X3JhbjoKKyAgICAgICAgICAgICMgVGhlIHVzZXIgbWlnaHQgaGF2ZSBtb2RpZmllZCB0aGUgcHJveGllcyBpbiB0aGUgIlByb3h5IgorICAgICAgICAgICAgIyB0YWIsIHdoaWNoIGluIHR1cm4gbWFkZSB0aGUgcHJveHkgc2V0dGluZ3MgbW9kaWZ5IGluIGJiLgorICAgICAgICAgICAgIyBJZiAiQ2FuY2VsIiB3YXMgcHJlc3NlZCwgcmVzdG9yZSB0aGUgcHJldmlvdXMgcHJveHkKKyAgICAgICAgICAgICMgc2V0dGluZ3MgaW5zaWRlIGJiLgorICAgICAgICAgICAgc2VsZi5zZXRfdXNlcl9jb25maWdfcHJveGllcygpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVMsIHNldHRpbmdzX2NoYW5nZWQKKworICAgIGRlZiByZXBhcnNlX3Bvc3RfYWR2X3NldHRpbmdzKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfbWFjaDoKKyAgICAgICAgICAgIHNlbGYudXBkYXRlX2NvbmZpZ19hc3luYygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uY2xlYXJfc2VsZWN0aW9uKCkKKyAgICAgICAgICAgICMgRE8gcmVwYXJzZSByZWNpcGVzCisgICAgICAgICAgICBzZWxmLnBvcHVsYXRlX3JlY2lwZV9wYWNrYWdlX2luZm9fYXN5bmMoKQorCisgICAgZGVmIGRlcGxveV9pbWFnZShzZWxmLCBpbWFnZV9uYW1lKToKKyAgICAgICAgaWYgbm90IGltYWdlX25hbWU6CisgICAgICAgICAgICBsYmwgPSAiPGI+UGxlYXNlIHNlbGVjdCBhbiBpbWFnZSB0byBkZXBsb3kuPC9iPiIKKyAgICAgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuTUVTU0FHRV9JTkZPKQorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICBkaWFsb2cucnVuKCkKKyAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGltYWdlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYXJhbWV0ZXJzLmltYWdlX2FkZHIsIGltYWdlX25hbWUpCisgICAgICAgIGRpYWxvZyA9IERlcGxveUltYWdlRGlhbG9nKHRpdGxlID0gIlVzYiBJbWFnZSBNYWtlciIsCisgICAgICAgICAgICBpbWFnZV9wYXRoID0gaW1hZ2VfcGF0aCwKKyAgICAgICAgICAgIHBhcmVudCA9IHNlbGYsCisgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfTU9EQUwKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIk1ha2UgdXNiIGltYWdlIiwgZ3RrLlJFU1BPTlNFX1lFUykKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgIGRlZiBzaG93X2xvYWRfa2VybmVsX2RpYWxvZyhzZWxmKToKKyAgICAgICAgZGlhbG9nID0gZ3RrLkZpbGVDaG9vc2VyRGlhbG9nKCJMb2FkIEtlcm5lbCBGaWxlcyIsIHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGsuRklMRV9DSE9PU0VSX0FDVElPTl9TQVZFKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIk9wZW4iLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgZmlsdGVyID0gZ3RrLkZpbGVGaWx0ZXIoKQorICAgICAgICBmaWx0ZXIuc2V0X25hbWUoIktlcm5lbCBGaWxlcyIpCisgICAgICAgIGZpbHRlci5hZGRfcGF0dGVybigiKi5iaW4iKQorICAgICAgICBkaWFsb2cuYWRkX2ZpbHRlcihmaWx0ZXIpCisKKyAgICAgICAgZGlhbG9nLnNldF9jdXJyZW50X2ZvbGRlcihzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfYWRkcikKKworICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICBrZXJuZWxfcGF0aCA9ICIiCisgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVM6CisgICAgICAgICAgICBrZXJuZWxfcGF0aCA9IGRpYWxvZy5nZXRfZmlsZW5hbWUoKQorCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgICAgICByZXR1cm4ga2VybmVsX3BhdGgKKworICAgIGRlZiBydW5xZW11X2ltYWdlKHNlbGYsIGltYWdlX25hbWUsIGtlcm5lbF9uYW1lKToKKyAgICAgICAgaWYgbm90IGltYWdlX25hbWUgb3Igbm90IGtlcm5lbF9uYW1lOgorICAgICAgICAgICAgbGJsID0gIjxiPlBsZWFzZSBzZWxlY3QgJXMgdG8gbGF1bmNoIGluIFFFTVUuPC9iPiIgJSAoImEga2VybmVsIiBpZiBpbWFnZV9uYW1lIGVsc2UgImFuIGltYWdlIikKKyAgICAgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuTUVTU0FHRV9JTkZPKQorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICBkaWFsb2cucnVuKCkKKyAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGtlcm5lbF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucGFyYW1ldGVycy5pbWFnZV9hZGRyLCBrZXJuZWxfbmFtZSkKKyAgICAgICAgaW1hZ2VfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfYWRkciwgaW1hZ2VfbmFtZSkKKworICAgICAgICBzb3VyY2VfZW52X3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYXJhbWV0ZXJzLmNvcmVfYmFzZSwgIm9lLWluaXQtYnVpbGQtZW52IikKKyAgICAgICAgdG1wX3BhdGggPSBzZWxmLnBhcmFtZXRlcnMudG1wZGlyCisgICAgICAgIGNtZGxpbmUgPSBiYi51aS5jcnVtYnMudXRpbHMud2hpY2hfdGVybWluYWwoKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhpbWFnZV9wYXRoKSBhbmQgb3MucGF0aC5leGlzdHMoa2VybmVsX3BhdGgpIFwKKyAgICAgICAgICAgYW5kIG9zLnBhdGguZXhpc3RzKHNvdXJjZV9lbnZfcGF0aCkgYW5kIG9zLnBhdGguZXhpc3RzKHRtcF9wYXRoKSBcCisgICAgICAgICAgIGFuZCBjbWRsaW5lOgorICAgICAgICAgICAgY21kbGluZSArPSAiXCcgYmFzaCAtYyBcImV4cG9ydCBPRV9UTVBESVI9IiArIHRtcF9wYXRoICsgIjsgIgorICAgICAgICAgICAgY21kbGluZSArPSAic291cmNlICIgKyBzb3VyY2VfZW52X3BhdGggKyAiICIgKyBvcy5nZXRjd2QoKSArICI7ICIKKyAgICAgICAgICAgIGNtZGxpbmUgKz0gInJ1bnFlbXUgIiArIGtlcm5lbF9wYXRoICsgIiAiICsgaW1hZ2VfcGF0aCArICJcIlwnIgorICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihzaGxleC5zcGxpdChjbWRsaW5lKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxibCA9ICI8Yj5QYXRoIGVycm9yPC9iPiIKKyAgICAgICAgICAgIG1zZyA9ICJPbmUgb2YgeW91ciBwYXRocyBpcyB3cm9uZywiCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIHBsZWFzZSBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBwYXRocyBleGlzdDpcbiIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICJpbWFnZSBwYXRoOiIgKyBpbWFnZV9wYXRoICsgIlxuIgorICAgICAgICAgICAgbXNnID0gbXNnICsgImtlcm5lbCBwYXRoOiIgKyBrZXJuZWxfcGF0aCArICJcbiIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICJzb3VyY2UgZW52aXJvbm1lbnQgcGF0aDoiICsgc291cmNlX2Vudl9wYXRoICsgIlxuIgorICAgICAgICAgICAgbXNnID0gbXNnICsgInRtcCBwYXRoOiAiICsgdG1wX3BhdGggKyAiLiIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICJZb3UgbWF5IGJlIG1pc3NpbmcgZWl0aGVyIHh0ZXJtIG9yIHZ0ZSBmb3IgdGVybWluYWwgc2VydmljZXMuIgorICAgICAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0VSUk9SLCBtc2cpCisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgICAgIGRpYWxvZy5ydW4oKQorICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIHNob3dfcGFja2FnZXMoc2VsZik6CisgICAgICAgIHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2UucmVmcmVzaF90YWJsZXMoKQorICAgICAgICBzZWxmLnN3aXRjaF9wYWdlKHNlbGYuUEFDS0FHRV9TRUxFQ1RJT04pCisKKyAgICBkZWYgc2hvd19yZWNpcGVzKHNlbGYpOgorICAgICAgICBzZWxmLnN3aXRjaF9wYWdlKHNlbGYuUkVDSVBFX1NFTEVDVElPTikKKworICAgIGRlZiBzaG93X2ltYWdlX2RldGFpbHMoc2VsZik6CisgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5JTUFHRV9HRU5FUkFURUQpCisKKyAgICBkZWYgc2hvd19jb25maWd1cmF0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLnN3aXRjaF9wYWdlKHNlbGYuQkFTRUlNR19TRUxFQ1RFRCkKKworICAgIGRlZiBzdG9wX2J1aWxkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnN0b3BwaW5nOgorICAgICAgICAgICAgbGJsID0gIjxiPkZvcmNlIFN0b3AgYnVpbGQ/PC9iPiIKKyAgICAgICAgICAgIG1zZyA9ICJZb3UndmUgYWxyZWFkeSBzZWxlY3RlZCBTdG9wIG9uY2UsIgorICAgICAgICAgICAgbXNnID0gbXNnICsgIiB3b3VsZCB5b3UgbGlrZSB0byAnRm9yY2UgU3RvcCcgdGhlIGJ1aWxkP1xuXG4iCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiVGhpcyB3aWxsIHN0b3AgdGhlIGJ1aWxkIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYnV0IG1heSIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgd2VsbCBsZWF2ZSB5b3VyIGJ1aWxkIGRpcmVjdG9yeSBpbiBhbiAgdW51c2FibGUgc3RhdGUiCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIHRoYXQgcmVxdWlyZXMgbWFudWFsIHN0ZXBzIHRvIGZpeC4iCisgICAgICAgICAgICBkaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfV0FSTklORywgbXNnKQorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9DQU5DRUwpCisgICAgICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJGb3JjZSBTdG9wIiwgZ3RrLlJFU1BPTlNFX1lFUykKKyAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGJsID0gIjxiPlN0b3AgYnVpbGQ/PC9iPiIKKyAgICAgICAgICAgIG1zZyA9ICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gc3RvcCB0aGlzIgorICAgICAgICAgICAgbXNnID0gbXNnICsgIiBidWlsZD9cblxuJ1N0b3AnIHdpbGwgc3RvcCB0aGUgYnVpbGQgYXMgc29vbiBhcyBhbGwgaW4iCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIHByb2dyZXNzIGJ1aWxkIHRhc2tzIGFyZSBmaW5pc2hlZC4gSG93ZXZlciBpZiBhIgorICAgICAgICAgICAgbXNnID0gbXNnICsgIiBsZW5ndGh5IGNvbXBpbGF0aW9uIHBoYXNlIGlzIGluIHByb2dyZXNzIHRoaXMgbWF5IHRha2UiCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIHNvbWUgdGltZS5cblxuIgorICAgICAgICAgICAgbXNnID0gbXNnICsgIidGb3JjZSBTdG9wJyB3aWxsIHN0b3AgdGhlIGJ1aWxkIGFzIHF1aWNrbHkgYXMiCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIHBvc3NpYmxlIGJ1dCBtYXkgd2VsbCBsZWF2ZSB5b3VyIGJ1aWxkIGRpcmVjdG9yeSBpbiBhbiIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgdW51c2FibGUgc3RhdGUgdGhhdCByZXF1aXJlcyBtYW51YWwgc3RlcHMgdG8gZml4LiIKKyAgICAgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuTUVTU0FHRV9XQVJOSU5HLCBtc2cpCisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX0NBTkNFTCkKKyAgICAgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkZvcmNlIHN0b3AiLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiU3RvcCIsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisgICAgICAgIGlmIHJlc3BvbnNlICE9IGd0ay5SRVNQT05TRV9DQU5DRUw6CisgICAgICAgICAgICBzZWxmLnN0b3BwaW5nID0gVHJ1ZQorICAgICAgICBpZiByZXNwb25zZSA9PSBndGsuUkVTUE9OU0VfT0s6CisgICAgICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS5wcm9ncmVzc19iYXIuc2V0X3N0b3BfdGl0bGUoIlN0b3BwaW5nIHRoZSBidWlsZC4uLi4iKQorICAgICAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2UucHJvZ3Jlc3NfYmFyLnNldF9yY3N0eWxlKCJzdG9wIikKKyAgICAgICAgICAgIHNlbGYuY2FuY2VsX2J1aWxkX3N5bmMoKQorICAgICAgICBlbGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVM6CisgICAgICAgICAgICBzZWxmLmNhbmNlbF9idWlsZF9zeW5jKFRydWUpCisKKyAgICBkZWYgZG9fbG9nKHNlbGYsIGNvbnNvbGVsb2dmaWxlID0gTm9uZSk6CisgICAgICAgIGlmIGNvbnNvbGVsb2dmaWxlOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShjb25zb2xlbG9nZmlsZSkpCisgICAgICAgICAgICBpZiBzZWxmLmNvbnNvbGVsb2c6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIucmVtb3ZlSGFuZGxlcihzZWxmLmNvbnNvbGVsb2cpCisgICAgICAgICAgICAgICAgc2VsZi5jb25zb2xlbG9nID0gTm9uZQorICAgICAgICAgICAgc2VsZi5jb25zb2xlbG9nID0gbG9nZ2luZy5GaWxlSGFuZGxlcihjb25zb2xlbG9nZmlsZSkKKyAgICAgICAgICAgIGJiLm1zZy5hZGREZWZhdWx0bG9nRmlsdGVyKHNlbGYuY29uc29sZWxvZykKKyAgICAgICAgICAgIGZvcm1hdCA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKQorICAgICAgICAgICAgc2VsZi5jb25zb2xlbG9nLnNldEZvcm1hdHRlcihmb3JtYXQpCisKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5jb25zb2xlbG9nKQorCisgICAgZGVmIGdldF90b3BkaXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZXIuZ2V0X3RvcGRpcigpCisKKyAgICBkZWYgd2FpdChzZWxmLCBkZWxheSk6CisgICAgICAgIHRpbWVfc3RhcnQgPSB0aW1lLnRpbWUoKQorICAgICAgICB0aW1lX2VuZCA9IHRpbWVfc3RhcnQgKyBkZWxheQorICAgICAgICB3aGlsZSB0aW1lX2VuZCA+IHRpbWUudGltZSgpOgorICAgICAgICAgICAgd2hpbGUgZ3RrLmV2ZW50c19wZW5kaW5nKCk6CisgICAgICAgICAgICAgICAgZ3RrLm1haW5faXRlcmF0aW9uKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2J1aWxkbWFuYWdlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2J1aWxkbWFuYWdlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODU4ZDc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvYnVpbGRtYW5hZ2VyLnB5CkBAIC0wLDAgKzEsNDU1IEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IFJvYiBCcmFkZm9yZCA8cm9iQGxpbnV4LmludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IHRpbWUKKworY2xhc3MgQnVpbGRDb25maWd1cmF0aW9uOgorICAgICIiIiBSZXByZXNlbnRzIGEgcG90ZW50aWFsICpvciogaGlzdG9yaWMgKm9yKiBjb25jcmV0ZSBidWlsZC4gSXQKKyAgICBlbmNvbXBhc3NlcyBhbGwgdGhlIHRoaW5ncyB0aGF0IHdlIG5lZWQgdG8gdGVsbCBiaXRiYWtlIHRvIGRvIHRvIG1ha2UgaXQKKyAgICBidWlsZCB3aGF0IHdlIHdhbnQgaXQgdG8gYnVpbGQuCisKKyAgICBJdCBhbHNvIHN0b3JlZCB0aGUgbWV0YWRhdGEgVVJMIGFuZCB0aGUgc2V0IG9mIHBvc3NpYmxlIG1hY2hpbmVzIChhbmQgdGhlCisgICAgZGlzdHJvcyAvIGltYWdlcyAvIHVyaXMgZm9yIHRoZXNlLiBBcGFydCBmcm9tIHRoZSBtZXRkYXRhIFVSTCB0aGVzZSBhcmUKKyAgICBub3Qgc2VyaWFsaXNlZCB0byBmaWxlIChzaW5jZSB0aGV5IG1heSBiZSB0cmFuc2llbnQpLiBJbiBzb21lIHdheXMgdGhpcworICAgIGZ1bmN0aW9uYWxpdHkgbWlnaHQgYmUgc2hpZnRlZCB0byB0aGUgbG9hZGVyIGNsYXNzLiIiIgorCisgICAgZGVmIF9faW5pdF9fIChzZWxmKToKKyAgICAgICAgc2VsZi5tZXRhZGF0YV91cmwgPSBOb25lCisKKyAgICAgICAgIyBUdXBsZSBvZiAoZGlzdHJvcywgaW1hZ2UsIHVybHMpCisgICAgICAgIHNlbGYubWFjaGluZV9vcHRpb25zID0ge30KKworICAgICAgICBzZWxmLm1hY2hpbmUgPSBOb25lCisgICAgICAgIHNlbGYuZGlzdHJvID0gTm9uZQorICAgICAgICBzZWxmLmltYWdlID0gTm9uZQorICAgICAgICBzZWxmLnVybHMgPSBbXQorICAgICAgICBzZWxmLmV4dHJhX3VybHMgPSBbXQorICAgICAgICBzZWxmLmV4dHJhX3BrZ3MgPSBbXQorCisgICAgZGVmIGdldF9tYWNoaW5lc19tb2RlbCAoc2VsZik6CisgICAgICAgIG1vZGVsID0gZ3RrLkxpc3RTdG9yZSAoZ29iamVjdC5UWVBFX1NUUklORykKKyAgICAgICAgZm9yIG1hY2hpbmUgaW4gc2VsZi5tYWNoaW5lX29wdGlvbnMua2V5cygpOgorICAgICAgICAgICAgbW9kZWwuYXBwZW5kIChbbWFjaGluZV0pCisKKyAgICAgICAgcmV0dXJuIG1vZGVsCisKKyAgICBkZWYgZ2V0X2Rpc3Ryb19hbmRfaW1hZ2VzX21vZGVscyAoc2VsZiwgbWFjaGluZSk6CisgICAgICAgIGRpc3Ryb19tb2RlbCA9IGd0ay5MaXN0U3RvcmUgKGdvYmplY3QuVFlQRV9TVFJJTkcpCisKKyAgICAgICAgZm9yIGRpc3RybyBpbiBzZWxmLm1hY2hpbmVfb3B0aW9uc1ttYWNoaW5lXVswXToKKyAgICAgICAgICAgIGRpc3Ryb19tb2RlbC5hcHBlbmQgKFtkaXN0cm9dKQorCisgICAgICAgIGltYWdlX21vZGVsID0gZ3RrLkxpc3RTdG9yZSAoZ29iamVjdC5UWVBFX1NUUklORykKKworICAgICAgICBmb3IgaW1hZ2UgaW4gc2VsZi5tYWNoaW5lX29wdGlvbnNbbWFjaGluZV1bMV06CisgICAgICAgICAgICBpbWFnZV9tb2RlbC5hcHBlbmQgKFtpbWFnZV0pCisKKyAgICAgICAgcmV0dXJuIChkaXN0cm9fbW9kZWwsIGltYWdlX21vZGVsKQorCisgICAgZGVmIGdldF9yZXBvcyAoc2VsZik6CisgICAgICAgIHNlbGYudXJscyA9IHNlbGYubWFjaGluZV9vcHRpb25zW3NlbGYubWFjaGluZV1bMl0KKyAgICAgICAgcmV0dXJuIHNlbGYudXJscworCisgICAgIyBJdCBtaWdodCBiZSBhIGxvdCBsb3QgYmV0dGVyIGlmIHdlIHN0b3JlZCB0aGVzZSBpbiBsaWtlLCBiaXRiYWtlIGNvbmYKKyAgICAjIGZpbGUgZm9ybWF0LgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbG9hZF9mcm9tX2ZpbGUgKGZpbGVuYW1lKToKKworICAgICAgICBjb25mID0gQnVpbGRDb25maWd1cmF0aW9uKCkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAiciIpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGRhdGEgPSBsaW5lLnNwbGl0ICgiOyIpWzFdCisgICAgICAgICAgICAgICAgaWYgKGxpbmUuc3RhcnRzd2l0aCAoIm1ldGFkYXRhLXVybDsiKSk6CisgICAgICAgICAgICAgICAgICAgIGNvbmYubWV0YWRhdGFfdXJsID0gZGF0YS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgKGxpbmUuc3RhcnRzd2l0aCAoInVybDsiKSk6CisgICAgICAgICAgICAgICAgICAgIGNvbmYudXJscyArPSBbZGF0YS5zdHJpcCgpXQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIChsaW5lLnN0YXJ0c3dpdGggKCJleHRyYS11cmw7IikpOgorICAgICAgICAgICAgICAgICAgICBjb25mLmV4dHJhX3VybHMgKz0gW2RhdGEuc3RyaXAoKV0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiAobGluZS5zdGFydHN3aXRoICgibWFjaGluZTsiKSk6CisgICAgICAgICAgICAgICAgICAgIGNvbmYubWFjaGluZSA9IGRhdGEuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIChsaW5lLnN0YXJ0c3dpdGggKCJkaXN0cmlidXRpb247IikpOgorICAgICAgICAgICAgICAgICAgICBjb25mLmRpc3RybyA9IGRhdGEuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIChsaW5lLnN0YXJ0c3dpdGggKCJpbWFnZTsiKSk6CisgICAgICAgICAgICAgICAgICAgIGNvbmYuaW1hZ2UgPSBkYXRhLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICByZXR1cm4gY29uZgorCisgICAgIyBTZXJpYWxpc2UgdG8gYSBmaWxlLiBUaGlzIGlzIHBhcnQgb2YgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHdlIHVzZSB0aGlzCisgICAgIyB0byBiZSBhYmxlIHRvIHJlcGVhdCBhIGdpdmVuIGJ1aWxkICh1c2luZyB0aGUgc2FtZSBzZXQgb2YgcGFyYW1ldGVycykKKyAgICAjIGJ1dCBhbHNvIHNvIHRoYXQgd2UgY2FuIGluY2x1ZGUgdGhlIGRldGFpbHMgb2YgdGhlIGltYWdlIC8gbWFjaGluZSAvCisgICAgIyBkaXN0cm8gaW4gdGhlIGJ1aWxkIG1hbmFnZXIgdHJlZSB2aWV3LgorICAgIGRlZiB3cml0ZV90b19maWxlIChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGYgPSBvcGVuIChmaWxlbmFtZSwgInciKQorCisgICAgICAgIGxpbmVzID0gW10KKworICAgICAgICBpZiAoc2VsZi5tZXRhZGF0YV91cmwpOgorICAgICAgICAgICAgbGluZXMgKz0gWyJtZXRhZGF0YS11cmw7JXNcbiIgJSAoc2VsZi5tZXRhZGF0YV91cmwpXQorCisgICAgICAgIGZvciB1cmwgaW4gc2VsZi51cmxzOgorICAgICAgICAgICAgbGluZXMgKz0gWyJ1cmw7JXNcbiIgJSAodXJsKV0KKworICAgICAgICBmb3IgdXJsIGluIHNlbGYuZXh0cmFfdXJsczoKKyAgICAgICAgICAgIGxpbmVzICs9IFsiZXh0cmEtdXJsOyVzXG4iICUgKHVybCldCisKKyAgICAgICAgaWYgKHNlbGYubWFjaGluZSk6CisgICAgICAgICAgICBsaW5lcyArPSBbIm1hY2hpbmU7JXNcbiIgJSAoc2VsZi5tYWNoaW5lKV0KKworICAgICAgICBpZiAoc2VsZi5kaXN0cm8pOgorICAgICAgICAgICAgbGluZXMgKz0gWyJkaXN0cmlidXRpb247JXNcbiIgJSAoc2VsZi5kaXN0cm8pXQorCisgICAgICAgIGlmIChzZWxmLmltYWdlKToKKyAgICAgICAgICAgIGxpbmVzICs9IFsiaW1hZ2U7JXNcbiIgJSAoc2VsZi5pbWFnZSldCisKKyAgICAgICAgZi53cml0ZWxpbmVzIChsaW5lcykKKyAgICAgICAgZi5jbG9zZSAoKQorCitjbGFzcyBCdWlsZFJlc3VsdChnb2JqZWN0LkdPYmplY3QpOgorICAgICIiIiBSZXByZXNlbnRzIGFuIGhpc3RvcmljIGJ1aWxkLiBQZXJoYXBzIG5vdCBzdWNjZXNzZnVsLiBCdXQgaXQgaW5jbHVkZXMKKyAgICB0aGluZ3Mgc3VjaCBhcyB0aGUgZmlsZXMgdGhhdCBhcmUgaW4gdGhlIGRpcmVjdG9yeSAodGhlIG91dHB1dCBmcm9tIHRoZQorICAgIGJ1aWxkKSBhcyB3ZWxsIGFzIGEgZGVzZXJpYWxpc2VkIEJ1aWxkQ29uZmlndXJhdGlvbiBmaWxlIHRoYXQgaXMgc3RvcmVkIGluCisgICAgIi5jb25mIiBpbiB0aGUgZGlyZWN0b3J5IGZvciB0aGUgYnVpbGQuCisKKyAgICBUaGlzIGlzIEdPYmplY3Qgc28gdGhhdCBpdCBjYW4gYmUgaW5jbHVkZWQgaW4gdGhlIFRyZWVTdG9yZS4iIiIKKworICAgIChTVEFURV9DT01QTEVURSwgU1RBVEVfRkFJTEVELCBTVEFURV9PTkdPSU5HKSA9IFwKKyAgICAgICAgKDAsIDEsIDIpCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYsIHBhcmVudCwgaWRlbnRpZmllcik6CisgICAgICAgIGdvYmplY3QuR09iamVjdC5fX2luaXRfXyAoc2VsZikKKyAgICAgICAgc2VsZi5kYXRlID0gTm9uZQorCisgICAgICAgIHNlbGYuZmlsZXMgPSBbXQorICAgICAgICBzZWxmLnN0YXR1cyA9IE5vbmUKKyAgICAgICAgc2VsZi5pZGVudGlmaWVyID0gaWRlbnRpZmllcgorICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4gKHBhcmVudCwgaWRlbnRpZmllcikKKworICAgICAgICAjIEV4dHJhY3QgdGhlIGRhdGUsIHNpbmNlIHRoZSBkaXJlY3RvcnkgbmFtZSBpcyBvZiB0aGUKKyAgICAgICAgIyBmb3JtYXQgYnVpbGQtPHllYXI+PG1vbnRoPjxkYXk+LTxvcmRpbmFsPiB3ZSBjYW4gZWFzaWx5CisgICAgICAgICMgcHVsbCBpdCBvdXQuCisgICAgICAgICMgVE9ETzogQmV0dGVyIHRvIHN0YXQgYSBmaWxlPworICAgICAgICAoXywgZGF0ZSwgcmV2aXNpb24pID0gaWRlbnRpZmllci5zcGxpdCAoIi0iKQorICAgICAgICBwcmludChkYXRlKQorCisgICAgICAgIHllYXIgPSBpbnQgKGRhdGVbMDo0XSkKKyAgICAgICAgbW9udGggPSBpbnQgKGRhdGVbNDo2XSkKKyAgICAgICAgZGF5ID0gaW50IChkYXRlWzY6OF0pCisKKyAgICAgICAgc2VsZi5kYXRlID0gZGF0ZXRpbWUuZGF0ZSAoeWVhciwgbW9udGgsIGRheSkKKworICAgICAgICBzZWxmLmNvbmYgPSBOb25lCisKKyAgICAgICAgIyBCeSBkZWZhdWx0IGJ1aWxkcyBhcmUgU1RBVEVfRkFJTEVEIHVubGVzcyB3ZSBmaW5kIGEgImNvbXBsZXRlIiBmaWxlCisgICAgICAgICMgaW4gd2hpY2ggY2FzZSB0aGV5IGFyZSBTVEFURV9DT01QTEVURQorICAgICAgICBzZWxmLnN0YXRlID0gQnVpbGRSZXN1bHQuU1RBVEVfRkFJTEVECisgICAgICAgIGZvciBmaWxlIGluIG9zLmxpc3RkaXIgKHNlbGYucGF0aCk6CisgICAgICAgICAgICBpZiAoZmlsZS5zdGFydHN3aXRoICgiLmNvbmYiKSk6CisgICAgICAgICAgICAgICAgY29uZmZpbGUgPSBvcy5wYXRoLmpvaW4gKHNlbGYucGF0aCwgZmlsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmYgPSBCdWlsZENvbmZpZ3VyYXRpb24ubG9hZF9mcm9tX2ZpbGUgKGNvbmZmaWxlKQorICAgICAgICAgICAgZWxpZiAoZmlsZS5zdGFydHN3aXRoICgiY29tcGxldGUiKSk6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IEJ1aWxkUmVzdWx0LlNUQVRFX0NPTVBMRVRFCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYWRkX2ZpbGUgKGZpbGUpCisKKyAgICBkZWYgYWRkX2ZpbGUgKHNlbGYsIGZpbGUpOgorICAgICAgICAjIEp1c3QgYWRkIHRoZSBmaWxlIGZvciBub3cuIERvbid0IGNhcmUgYWJvdXQgdGhlIHR5cGUuCisgICAgICAgIHNlbGYuZmlsZXMgKz0gWyhmaWxlLCBOb25lKV0KKworY2xhc3MgQnVpbGRNYW5hZ2VyTW9kZWwgKGd0ay5UcmVlU3RvcmUpOgorICAgICIiIiBNb2RlbCBmb3IgdGhlIEJ1aWxkTWFuYWdlclRyZWVWaWV3LiBUaGlzIGRlcml2ZXMgZnJvbSBndGsuVHJlZVN0b3JlCisgICAgYnV0IGl0IGFic3RyYWN0cyBuaWNlbHkgd2hhdCB0aGUgY29sdW1ucyBtZWFuIGFuZCB0aGUgc2V0dXAgb2YgdGhlIGNvbHVtbnMKKyAgICBpbiB0aGUgbW9kZWwuICIiIgorCisgICAgKENPTF9JREVOVCwgQ09MX0RFU0MsIENPTF9NQUNISU5FLCBDT0xfRElTVFJPLCBDT0xfQlVJTERfUkVTVUxULCBDT0xfREFURSwgQ09MX1NUQVRFKSA9IFwKKyAgICAgICAgKDAsIDEsIDIsIDMsIDQsIDUsIDYpCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgorICAgICAgICBndGsuVHJlZVN0b3JlLl9faW5pdF9fIChzZWxmLAorICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgIGdvYmplY3QuVFlQRV9PQkpFQ1QsCisgICAgICAgICAgICBnb2JqZWN0LlRZUEVfSU5UNjQsCisgICAgICAgICAgICBnb2JqZWN0LlRZUEVfSU5UKQorCitjbGFzcyBCdWlsZE1hbmFnZXIgKGdvYmplY3QuR09iamVjdCk6CisgICAgIiIiIFRoaXMgY2xhc3MgbWFuYWdlcyB0aGUgaGlzdG9yaWMgYnVpbGRzIHRoYXQgaGF2ZSBiZWVuIGZvdW5kIGluIHRoZQorICAgICJyZXN1bHRzIiBkaXJlY3RvcnkgYnV0IGlzIGFsc28gdXNlZCBmb3Igc3RhcnRpbmcgYSBuZXcgYnVpbGQuIiIiCisKKyAgICBfX2dzaWduYWxzX18gPSB7CisgICAgICAgICdwb3B1bGF0aW9uLWZpbmlzaGVkJyA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAncG9wdWxhdGUtZXJyb3InIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKQorICAgIH0KKworICAgIGRlZiB1cGRhdGVfYnVpbGRfcmVzdWx0IChzZWxmLCByZXN1bHQsIGl0ZXIpOgorICAgICAgICAjIENvbnZlcnQgdGhlIGRhdGUgaW50byBzb21ldGhpbmcgd2UgY2FuIHNvcnQgYnkuCisgICAgICAgIGRhdGUgPSBsb25nICh0aW1lLm1rdGltZSAocmVzdWx0LmRhdGUudGltZXR1cGxlKCkpKQorCisgICAgICAgICMgQWRkIGEgdG9wIGxldmVsIGVudHJ5IGZvciB0aGUgYnVpbGQKKworICAgICAgICBzZWxmLm1vZGVsLnNldCAoaXRlciwKKyAgICAgICAgICAgIEJ1aWxkTWFuYWdlck1vZGVsLkNPTF9JREVOVCwgcmVzdWx0LmlkZW50aWZpZXIsCisgICAgICAgICAgICBCdWlsZE1hbmFnZXJNb2RlbC5DT0xfREVTQywgcmVzdWx0LmNvbmYuaW1hZ2UsCisgICAgICAgICAgICBCdWlsZE1hbmFnZXJNb2RlbC5DT0xfTUFDSElORSwgcmVzdWx0LmNvbmYubWFjaGluZSwKKyAgICAgICAgICAgIEJ1aWxkTWFuYWdlck1vZGVsLkNPTF9ESVNUUk8sIHJlc3VsdC5jb25mLmRpc3RybywKKyAgICAgICAgICAgIEJ1aWxkTWFuYWdlck1vZGVsLkNPTF9CVUlMRF9SRVNVTFQsIHJlc3VsdCwKKyAgICAgICAgICAgIEJ1aWxkTWFuYWdlck1vZGVsLkNPTF9EQVRFLCBkYXRlLAorICAgICAgICAgICAgQnVpbGRNYW5hZ2VyTW9kZWwuQ09MX1NUQVRFLCByZXN1bHQuc3RhdGUpCisKKyAgICAgICAgIyBBbmQgdGhlbiB3ZSB1c2UgdGhlIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkgYXMgdGhlIGNoaWxkcmVuIGZvciB0aGUKKyAgICAgICAgIyB0b3AgbGV2ZWwgaXRlci4KKyAgICAgICAgZm9yIGZpbGUgaW4gcmVzdWx0LmZpbGVzOgorICAgICAgICAgICAgc2VsZi5tb2RlbC5hcHBlbmQgKGl0ZXIsIChOb25lLCBmaWxlWzBdLCBOb25lLCBOb25lLCBOb25lLCBkYXRlLCAtMSkpCisKKyAgICAjIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIGFuIGlkbGUgYnkgdGhlIEJ1aWxkTWFuYWdlclBvcHVsYXRlclRocmVhZAorICAgIGRlZiBhZGRfYnVpbGRfcmVzdWx0IChzZWxmLCByZXN1bHQpOgorICAgICAgICBndGsuZ2RrLnRocmVhZHNfZW50ZXIoKQorICAgICAgICBzZWxmLmtub3duX2J1aWxkcyArPSBbcmVzdWx0XQorCisgICAgICAgIHNlbGYudXBkYXRlX2J1aWxkX3Jlc3VsdCAocmVzdWx0LCBzZWxmLm1vZGVsLmFwcGVuZCAoTm9uZSkpCisKKyAgICAgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKworICAgIGRlZiBub3RpZnlfYnVpbGRfZmluaXNoZWQgKHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLiBJZiB3ZSBoYXZlIGEgcnVubmluZyBidWlsZCBydW5uaW5nIHRoZW4gd2UKKyAgICAgICAgIyB3aWxsIGhhdmUgYSByb3cgaW4gdGhlIG1vZGVsIGluIFNUQVRFX09OR09JTkcuIEZpbmQgaXQgYW5kIG1ha2UgaXQKKyAgICAgICAgIyBhcyBpZiBpdCB3YXMgYSBwcm9wZXIgaGlzdG9yaWMgYnVpbGQgKHdlbGwsIGl0IGlzIGNvbXBsZXRlZCBub3cuLi4uKQorCisgICAgICAgICMgV2UgbmVlZCB0byB1c2UgdGhlIGl0ZXJzIGhlcmUgcmF0aGVyIHRoYW4gdGhlIFB5dGhvbiBpdGVyYXRvcgorICAgICAgICAjIGludGVyZmFjZSB0byB0aGUgbW9kZWwgc2luY2Ugd2UgbmVlZCB0byBwYXNzIGl0IGludG8KKyAgICAgICAgIyB1cGRhdGVfYnVpbGRfcmVzdWx0CisKKyAgICAgICAgaXRlciA9IHNlbGYubW9kZWwuZ2V0X2l0ZXJfZmlyc3QoKQorCisgICAgICAgIHdoaWxlIChpdGVyKToKKyAgICAgICAgICAgIChpZGVudCwgc3RhdGUpID0gc2VsZi5tb2RlbC5nZXQoaXRlciwKKyAgICAgICAgICAgICAgICBCdWlsZE1hbmFnZXJNb2RlbC5DT0xfSURFTlQsCisgICAgICAgICAgICAgICAgQnVpbGRNYW5hZ2VyTW9kZWwuQ09MX1NUQVRFKQorCisgICAgICAgICAgICBpZiBzdGF0ZSA9PSBCdWlsZFJlc3VsdC5TVEFURV9PTkdPSU5HOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IEJ1aWxkUmVzdWx0IChzZWxmLnJlc3VsdHNfZGlyZWN0b3J5LCBpZGVudCkKKyAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9idWlsZF9yZXN1bHQgKHJlc3VsdCwgaXRlcikKKyAgICAgICAgICAgIGl0ZXIgPSBzZWxmLm1vZGVsLml0ZXJfbmV4dChpdGVyKQorCisgICAgZGVmIG5vdGlmeV9idWlsZF9zdWNjZWVkZWQgKHNlbGYpOgorICAgICAgICAjIFdyaXRlIHRoZSAiY29tcGxldGUiIGZpbGUgc28gdGhhdCB3aGVuIHdlIGNyZWF0ZSB0aGUgQnVpbGRSZXN1bHQKKyAgICAgICAgIyBvYmplY3Qgd2UgcHV0IGludG8gdGhlIG1vZGVsCisKKyAgICAgICAgY29tcGxldGVfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luIChzZWxmLmN1cl9idWlsZF9kaXJlY3RvcnksICJjb21wbGV0ZSIpCisgICAgICAgIGYgPSBmaWxlIChjb21wbGV0ZV9maWxlX3BhdGgsICJ3IikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYubm90aWZ5X2J1aWxkX2ZpbmlzaGVkKCkKKworICAgIGRlZiBub3RpZnlfYnVpbGRfZmFpbGVkIChzZWxmKToKKyAgICAgICAgIyBXaXRob3V0IGEgImNvbXBsZXRlIiBmaWxlIHRoZW4gdGhpcyB3aWxsIG1hcmsgdGhlIGJ1aWxkIGFzIGZhaWxlZDoKKyAgICAgICAgc2VsZi5ub3RpZnlfYnVpbGRfZmluaXNoZWQoKQorCisgICAgIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBhbiBpZGxlCisgICAgZGVmIGVtaXRfcG9wdWxhdGlvbl9maW5pc2hlZF9zaWduYWwgKHNlbGYpOgorICAgICAgICBndGsuZ2RrLnRocmVhZHNfZW50ZXIoKQorICAgICAgICBzZWxmLmVtaXQgKCJwb3B1bGF0aW9uLWZpbmlzaGVkIikKKyAgICAgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKworICAgIGNsYXNzIEJ1aWxkTWFuYWdlclBvcHVsYXRlclRocmVhZCAodGhyZWFkaW5nLlRocmVhZCk6CisgICAgICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgbWFuYWdlciwgZGlyZWN0b3J5KToKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18gKHNlbGYpCisgICAgICAgICAgICBzZWxmLm1hbmFnZXIgPSBtYW5hZ2VyCisgICAgICAgICAgICBzZWxmLmRpcmVjdG9yeSA9IGRpcmVjdG9yeQorCisgICAgICAgIGRlZiBydW4gKHNlbGYpOgorICAgICAgICAgICAgIyBGb3IgZWFjaCBvZiB0aGUgImJ1aWxkLTwuLi4+IiBkaXJlY3RvcmllcyAuLgorCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyAoc2VsZi5kaXJlY3RvcnkpOgorICAgICAgICAgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gb3MubGlzdGRpciAoc2VsZi5kaXJlY3RvcnkpOgorCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkaXJlY3Rvcnkuc3RhcnRzd2l0aCAoImJ1aWxkLSIpOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICBidWlsZF9yZXN1bHQgPSBCdWlsZFJlc3VsdCAoc2VsZi5kaXJlY3RvcnksIGRpcmVjdG9yeSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tYW5hZ2VyLmFkZF9idWlsZF9yZXN1bHQgKGJ1aWxkX3Jlc3VsdCkKKworICAgICAgICAgICAgZ29iamVjdC5pZGxlX2FkZCAoQnVpbGRNYW5hZ2VyLmVtaXRfcG9wdWxhdGlvbl9maW5pc2hlZF9zaWduYWwsCisgICAgICAgICAgICAgICAgc2VsZi5tYW5hZ2VyKQorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCBzZXJ2ZXIsIHJlc3VsdHNfZGlyZWN0b3J5KToKKyAgICAgICAgZ29iamVjdC5HT2JqZWN0Ll9faW5pdF9fIChzZWxmKQorCisgICAgICAgICMgVGhlIGJ1aWxkcyB0aGF0IHdlJ3ZlIGZvdW5kIGZyb20gd2Fsa2luZyB0aGUgcmVzdWx0IGRpcmVjdG9yeQorICAgICAgICBzZWxmLmtub3duX2J1aWxkcyA9IFtdCisKKyAgICAgICAgIyBTYXZlIG91dCB0aGUgYml0YmFrZSBzZXJ2ZXIsIHdlIG5lZWQgdGhpcyBmb3IgaXNzdWluZyBjb21tYW5kcyB0bworICAgICAgICAjIHRoZSBjb29rZXI6CisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyCisKKyAgICAgICAgIyBUaGUgVHJlZVN0b3JlIHRoYXQgd2UgdXNlCisgICAgICAgIHNlbGYubW9kZWwgPSBCdWlsZE1hbmFnZXJNb2RlbCAoKQorCisgICAgICAgICMgVGhlIHJlc3VsdHMgZGlyZWN0b3J5IGlzIHdoZXJlIHdlIGNyZWF0ZSAoYW5kIGxvb2sgZm9yKSB0aGUKKyAgICAgICAgIyBidWlsZC08eHl6Pi08bj4gZGlyZWN0b3JpZXMuIFdlIG5lZWQgdG8gcG9wdWxhdGUgb3Vyc2VsdmVzIGZyb20KKyAgICAgICAgIyBkaXJlY3RvcnkKKyAgICAgICAgc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSA9IHJlc3VsdHNfZGlyZWN0b3J5CisgICAgICAgIHNlbGYucG9wdWxhdGVfZnJvbV9kaXJlY3RvcnkgKHNlbGYucmVzdWx0c19kaXJlY3RvcnkpCisKKyAgICBkZWYgcG9wdWxhdGVfZnJvbV9kaXJlY3RvcnkgKHNlbGYsIGRpcmVjdG9yeSk6CisgICAgICAgIHRocmVhZCA9IEJ1aWxkTWFuYWdlci5CdWlsZE1hbmFnZXJQb3B1bGF0ZXJUaHJlYWQgKHNlbGYsIGRpcmVjdG9yeSkKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKworICAgICMgQ29tZSB1cCB3aXRoIHRoZSBuYW1lIGZvciB0aGUgbmV4dCBidWlsZCBpZGVudCBieSBjb21iaW5pbmcgImJ1aWxkLSIKKyAgICAjIHdpdGggdGhlIGRhdGUgZm9ybWF0dGVkIGFzIHl5eXltbWRkIGFuZCB0aGVuIGFuIG9yZGluYWwuIFdlIGRvIHRoaXMgYnkKKyAgICAjIGFuIG9wdGltaXN0aWMgYWxnb3JpdGhtIGluY3JlbWVudGluZyB0aGUgb3JkaW5hbCBpZiB3ZSBmaW5kIHRoYXQgaXQKKyAgICAjIGFscmVhZHkgZXhpc3RzLgorICAgIGRlZiBnZXRfbmV4dF9idWlsZF9pZGVudCAoc2VsZik6CisgICAgICAgIHRvZGF5ID0gZGF0ZXRpbWUuZGF0ZS50b2RheSAoKQorICAgICAgICBkYXRlc3RyID0gc3RyICh0b2RheS55ZWFyKSArIHN0ciAodG9kYXkubW9udGgpICsgc3RyICh0b2RheS5kYXkpCisKKyAgICAgICAgcmV2aXNpb24gPSAwCisgICAgICAgIHRlc3RfbmFtZSA9ICJidWlsZC0lcy0lZCIgJSAoZGF0ZXN0ciwgcmV2aXNpb24pCisgICAgICAgIHRlc3RfcGF0aCA9IG9zLnBhdGguam9pbiAoc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSwgdGVzdF9uYW1lKQorCisgICAgICAgIHdoaWxlIChvcy5wYXRoLmV4aXN0cyAodGVzdF9wYXRoKSk6CisgICAgICAgICAgICByZXZpc2lvbiArPSAxCisgICAgICAgICAgICB0ZXN0X25hbWUgPSAiYnVpbGQtJXMtJWQiICUgKGRhdGVzdHIsIHJldmlzaW9uKQorICAgICAgICAgICAgdGVzdF9wYXRoID0gb3MucGF0aC5qb2luIChzZWxmLnJlc3VsdHNfZGlyZWN0b3J5LCB0ZXN0X25hbWUpCisKKyAgICAgICAgcmV0dXJuIHRlc3RfbmFtZQorCisgICAgIyBUYWtlIGEgQnVpbGRDb25maWd1cmF0aW9uIGFuZCB0aGVuIHRyeSBhbmQgYnVpbGQgaXQgYmFzZWQgb24gdGhlCisgICAgIyBwYXJhbWV0ZXJzIG9mIHRoYXQgY29uZmlndXJhdGlvbi4gUworICAgIGRlZiBkb19idWlsZCAoc2VsZiwgY29uZik6CisgICAgICAgIHNlcnZlciA9IHNlbGYuc2VydmVyCisKKyAgICAgICAgIyBXb3JrIG91dCB0aGUgYnVpbGQgZGlyZWN0b3J5LiBOb3RlIHdlIGFjdHVhbGx5IGNyZWF0ZSB0aGUKKyAgICAgICAgIyBkaXJlY3RvcmllcyBoZXJlIHNpbmNlIHdlIG5lZWQgdG8gd3JpdGUgdGhlICIuY29uZiIgZmlsZS4gT3RoZXJ3aXNlCisgICAgICAgICMgd2UgY291bGQgaGF2ZSByZWxpZWQgb24gYml0YmFrZSdzIGJ1aWxkZXIgdGhyZWFkIHRvIGFjdHVhbGx5IG1ha2UKKyAgICAgICAgIyB0aGUgZGlyZWN0b3JpZXMgYXMgaXQgcHJvY2VlZHMgd2l0aCB0aGUgYnVpbGQuCisgICAgICAgIGlkZW50ID0gc2VsZi5nZXRfbmV4dF9idWlsZF9pZGVudCAoKQorICAgICAgICBidWlsZF9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4gKHNlbGYucmVzdWx0c19kaXJlY3RvcnksCisgICAgICAgICAgICBpZGVudCkKKyAgICAgICAgc2VsZi5jdXJfYnVpbGRfZGlyZWN0b3J5ID0gYnVpbGRfZGlyZWN0b3J5CisgICAgICAgIG9zLm1ha2VkaXJzIChidWlsZF9kaXJlY3RvcnkpCisKKyAgICAgICAgY29uZmZpbGUgPSBvcy5wYXRoLmpvaW4gKGJ1aWxkX2RpcmVjdG9yeSwgIi5jb25mIikKKyAgICAgICAgY29uZi53cml0ZV90b19maWxlIChjb25mZmlsZSkKKworICAgICAgICAjIEFkZCBhIHJvdyB0byB0aGUgbW9kZWwgcmVwcmVzZW50aW5nIHRoaXMgb25nb2luZyBidWlsZC4gSXQncyBraW5kYSBhCisgICAgICAgICMgZmFrZSBlbnRyeS4gSWYgdGhpcyBidWlsZCBjb21wbGV0ZXMgb3IgZmFpbHMgdGhlbiB0aGlzIGdldHMgdXBkYXRlZAorICAgICAgICAjIHdpdGggdGhlIHJlYWwgc3R1ZmYgbGlrZSB0aGUgaGlzdG9yaWMgYnVpbGRzCisgICAgICAgIGRhdGUgPSBsb25nICh0aW1lLnRpbWUoKSkKKyAgICAgICAgc2VsZi5tb2RlbC5hcHBlbmQgKE5vbmUsIChpZGVudCwgY29uZi5pbWFnZSwgY29uZi5tYWNoaW5lLCBjb25mLmRpc3RybywKKyAgICAgICAgICAgIE5vbmUsIGRhdGUsIEJ1aWxkUmVzdWx0LlNUQVRFX09OR09JTkcpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhcmlhYmxlIiwgIkJVSUxEX0lNQUdFU19GUk9NX0ZFRURTIiwgMV0pCisgICAgICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhcmlhYmxlIiwgIk1BQ0hJTkUiLCBjb25mLm1hY2hpbmVdKQorICAgICAgICAgICAgc2VydmVyLnJ1bkNvbW1hbmQoWyJzZXRWYXJpYWJsZSIsICJESVNUUk8iLCBjb25mLmRpc3Ryb10pCisgICAgICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhcmlhYmxlIiwgIlBBQ0tBR0VfQ0xBU1NFUyIsICJwYWNrYWdlX2lwayJdKQorICAgICAgICAgICAgc2VydmVyLnJ1bkNvbW1hbmQoWyJzZXRWYXJpYWJsZSIsICJCQkZJTEVTIiwgXAorICAgICAgICAgICAgICAiIiIke09FUk9PVH0vbWV0YS9wYWNrYWdlcy8qLyouYmIgJHtPRVJPT1R9L21ldGEtbW9ibGluL3BhY2thZ2VzLyovKi5iYiIiIl0pCisgICAgICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhcmlhYmxlIiwgIlRNUERJUiIsICIke09FUk9PVH0vYnVpbGQvdG1wIl0pCisgICAgICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhcmlhYmxlIiwgIklQS19GRUVEX1VSSVMiLCBcCisgICAgICAgICAgICAgICAgIiAiLmpvaW4oY29uZi5nZXRfcmVwb3MoKSldKQorICAgICAgICAgICAgc2VydmVyLnJ1bkNvbW1hbmQoWyJzZXRWYXJpYWJsZSIsICJERVBMT1lfRElSX0lNQUdFIiwKKyAgICAgICAgICAgICAgICBidWlsZF9kaXJlY3RvcnldKQorICAgICAgICAgICAgc2VydmVyLnJ1bkNvbW1hbmQoWyJidWlsZFRhcmdldHMiLCBbY29uZi5pbWFnZV0sICJyb290ZnMiXSkKKworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBwcmludChlKQorCitjbGFzcyBCdWlsZE1hbmFnZXJUcmVlVmlldyAoZ3RrLlRyZWVWaWV3KToKKyAgICAiIiIgVGhlIHRyZWUgdmlldyBmb3IgdGhlIGJ1aWxkIG1hbmFnZXIuIFRoaXMgc2hvd3MgdGhlIGhpc3RvcmljIGJ1aWxkcworICAgIGFuZCBzbyBmb3J0aC4gIiIiCisKKyAgICAjIFdlIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNvbnRyb2wgd2hhdCBnb2VzIGluIHRoZSBjZWxsIHNpbmNlIHdlIHN0b3JlCisgICAgIyB0aGUgZGF0ZSBpbiB0aGUgbW9kZWwgYXMgc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2ggKGZvciBzb3J0aW5nKSBhbmQgc28gd2UKKyAgICAjIG5lZWQgdG8gbWFrZSBpdCBodW1hbiByZWFkYWJsZS4KKyAgICBkZWYgZGF0ZV9mb3JtYXRfY3VzdG9tX2NlbGxfZGF0YV9mdW5jIChzZWxmLCBjb2wsIGNlbGwsIG1vZGVsLCBpdGVyKToKKyAgICAgICAgZGF0ZSA9IG1vZGVsLmdldCAoaXRlciwgQnVpbGRNYW5hZ2VyTW9kZWwuQ09MX0RBVEUpWzBdCisgICAgICAgIGRhdGVzdHIgPSB0aW1lLnN0cmZ0aW1lKCIlQSAlZCAlQiAlWSIsIHRpbWUubG9jYWx0aW1lKGRhdGUpKQorICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSAoInRleHQiLCBkYXRlc3RyKQorCisgICAgIyBUaGlzIGZvcm1hdCBmdW5jdGlvbiBjb250cm9scyB3aGF0IGdvZXMgaW4gdGhlIGNlbGwuIFdlIHVzZSB0aGlzIHRvIG1hcAorICAgICMgdGhlIGludGVnZXIgc3RhdGUgdG8gYSBzdHJpbmcgYW5kIGFsc28gdG8gY29sb3VyaXNlIHRoZSB0ZXh0CisgICAgZGVmIHN0YXRlX2Zvcm1hdF9jdXN0b21fY2VsbF9kYXRhX2Z1biAoc2VsZiwgY29sLCBjZWxsLCBtb2RlbCwgaXRlcik6CisgICAgICAgIHN0YXRlID0gbW9kZWwuZ2V0IChpdGVyLCBCdWlsZE1hbmFnZXJNb2RlbC5DT0xfU1RBVEUpWzBdCisKKyAgICAgICAgaWYgKHN0YXRlID09IEJ1aWxkUmVzdWx0LlNUQVRFX09OR09JTkcpOgorICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkgKCJ0ZXh0IiwgIkFjdGl2ZSIpCisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSAoImZvcmVncm91bmQiLCAiIzAwMDAwMCIpCisgICAgICAgIGVsaWYgKHN0YXRlID09IEJ1aWxkUmVzdWx0LlNUQVRFX0ZBSUxFRCk6CisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSAoInRleHQiLCAiRmFpbGVkIikKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5ICgiZm9yZWdyb3VuZCIsICIjZmYwMDAwIikKKyAgICAgICAgZWxpZiAoc3RhdGUgPT0gQnVpbGRSZXN1bHQuU1RBVEVfQ09NUExFVEUpOgorICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkgKCJ0ZXh0IiwgIkNvbXBsZXRlIikKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5ICgiZm9yZWdyb3VuZCIsICIjMDBmZjAwIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5ICgidGV4dCIsICIiKQorCisgICAgZGVmIF9faW5pdF9fIChzZWxmKToKKyAgICAgICAgZ3RrLlRyZWVWaWV3Ll9faW5pdF9fKHNlbGYpCisKKyAgICAgICAgIyBNaXNjIGRlc2NyaXB0aW9ueSB0aGluZworICAgICAgICByZW5kZXJlciA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0ICgpCisgICAgICAgIGNvbCA9IGd0ay5UcmVlVmlld0NvbHVtbiAoTm9uZSwgcmVuZGVyZXIsCisgICAgICAgICAgICB0ZXh0PUJ1aWxkTWFuYWdlck1vZGVsLkNPTF9ERVNDKQorICAgICAgICBzZWxmLmFwcGVuZF9jb2x1bW4gKGNvbCkKKworICAgICAgICAjIE1hY2hpbmUKKyAgICAgICAgcmVuZGVyZXIgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCAoKQorICAgICAgICBjb2wgPSBndGsuVHJlZVZpZXdDb2x1bW4gKCJNYWNoaW5lIiwgcmVuZGVyZXIsCisgICAgICAgICAgICB0ZXh0PUJ1aWxkTWFuYWdlck1vZGVsLkNPTF9NQUNISU5FKQorICAgICAgICBzZWxmLmFwcGVuZF9jb2x1bW4gKGNvbCkKKworICAgICAgICAjIGRpc3RybworICAgICAgICByZW5kZXJlciA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0ICgpCisgICAgICAgIGNvbCA9IGd0ay5UcmVlVmlld0NvbHVtbiAoIkRpc3RyaWJ1dGlvbiIsIHJlbmRlcmVyLAorICAgICAgICAgICAgdGV4dD1CdWlsZE1hbmFnZXJNb2RlbC5DT0xfRElTVFJPKQorICAgICAgICBzZWxmLmFwcGVuZF9jb2x1bW4gKGNvbCkKKworICAgICAgICAjIGRhdGUgKHVzaW5nIGEgY3VzdG9tIGZ1bmN0aW9uIGZvciBmb3JtYXR0aW5nIHRoZSBjZWxsIGNvbnRlbnRzIGl0CisgICAgICAgICMgdGFrZXMgZXBvY2ggLT4gaHVtYW4gcmVhZGFibGUgc3RyaW5nKQorICAgICAgICByZW5kZXJlciA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0ICgpCisgICAgICAgIGNvbCA9IGd0ay5UcmVlVmlld0NvbHVtbiAoIkRhdGUiLCByZW5kZXJlciwKKyAgICAgICAgICAgIHRleHQ9QnVpbGRNYW5hZ2VyTW9kZWwuQ09MX0RBVEUpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoY29sKQorICAgICAgICBjb2wuc2V0X2NlbGxfZGF0YV9mdW5jIChyZW5kZXJlciwKKyAgICAgICAgICAgIHNlbGYuZGF0ZV9mb3JtYXRfY3VzdG9tX2NlbGxfZGF0YV9mdW5jKQorCisgICAgICAgICMgRm9yIHN0YXR1cy4KKyAgICAgICAgcmVuZGVyZXIgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCAoKQorICAgICAgICBjb2wgPSBndGsuVHJlZVZpZXdDb2x1bW4gKCJTdGF0dXMiLCByZW5kZXJlciwKKyAgICAgICAgICAgIHRleHQgPSBCdWlsZE1hbmFnZXJNb2RlbC5DT0xfU1RBVEUpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoY29sKQorICAgICAgICBjb2wuc2V0X2NlbGxfZGF0YV9mdW5jIChyZW5kZXJlciwKKyAgICAgICAgICAgIHNlbGYuc3RhdGVfZm9ybWF0X2N1c3RvbV9jZWxsX2RhdGFfZnVuKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9hZHZhbmNlZHNldHRpbmdzZGlhbG9nLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2FkdmFuY2Vkc2V0dGluZ3NkaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBiMzU1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9hZHZhbmNlZHNldHRpbmdzZGlhbG9nLnB5CkBAIC0wLDAgKzEsMzQxIEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitpbXBvcnQgaGFzaGxpYgorZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBIb2JJbmZvQnV0dG9uLCBIb2JCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLnByb2dyZXNzYmFyIGltcG9ydCBIb2JQcm9ncmVzc0JhcgorZnJvbSBiYi51aS5jcnVtYnMuaGlnLnNldHRpbmdzdWloZWxwZXIgaW1wb3J0IFNldHRpbmdzVUlIZWxwZXIKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNkaWFsb2cgaW1wb3J0IENydW1ic0RpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic21lc3NhZ2VkaWFsb2cgaW1wb3J0IENydW1ic01lc3NhZ2VEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5wcm94eWRldGFpbHNkaWFsb2cgaW1wb3J0IFByb3h5RGV0YWlsc0RpYWxvZworCisiIiIKK1RoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50CitCaXRCYWtlIEdVSSdzCitJbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4CisiIiIKKworY2xhc3MgQWR2YW5jZWRTZXR0aW5nc0RpYWxvZyAoQ3J1bWJzRGlhbG9nLCBTZXR0aW5nc1VJSGVscGVyKToKKyAgICAKKyAgICBkZWYgZGV0YWlsc19jYihzZWxmLCBidXR0b24sIHBhcmVudCwgcHJvdG9jb2wpOgorICAgICAgICBkaWFsb2cgPSBQcm94eURldGFpbHNEaWFsb2codGl0bGUgPSBwcm90b2NvbC51cHBlcigpICsgIiBQcm94eSBEZXRhaWxzIiwKKyAgICAgICAgICAgIHVzZXIgPSBzZWxmLmNvbmZpZ3VyYXRpb24ucHJveGllc1twcm90b2NvbF1bMV0sCisgICAgICAgICAgICBwYXNzd2QgPSBzZWxmLmNvbmZpZ3VyYXRpb24ucHJveGllc1twcm90b2NvbF1bMl0sCisgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQsCisgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfTU9EQUwKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKKyAgICAgICAgZGlhbG9nLmFkZF9idXR0b24oZ3RrLlNUT0NLX0NMT1NFLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9PSzoKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5wcm94aWVzW3Byb3RvY29sXVsxXSA9IGRpYWxvZy51c2VyCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24ucHJveGllc1twcm90b2NvbF1bMl0gPSBkaWFsb2cucGFzc3dkCisgICAgICAgICAgICBzZWxmLnJlZnJlc2hfcHJveHlfY29tcG9uZW50cygpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgIGRlZiBzZXRfc2F2ZV9idXR0b24oc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5zYXZlX2J1dHRvbiA9IGJ1dHRvbgorCisgICAgZGVmIHJvb3Rmc19jb21ib19jaGFuZ2VkX2NiKHNlbGYsIHJvb3Rmc19jb21ibywgYWxsX3BhY2thZ2VfZm9ybWF0LCBjaGVja19oYm94KToKKyAgICAgICAgY29tYm9faXRlbSA9IHNlbGYucm9vdGZzX2NvbWJvLmdldF9hY3RpdmVfdGV4dCgpCisgICAgICAgIG1vZGlmaWVkID0gRmFsc2UKKyAgICAgICAgZm9yIGNoaWxkIGluIGNoZWNrX2hib3guZ2V0X2NoaWxkcmVuKCk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNoaWxkLCBndGsuQ2hlY2tCdXR0b24pOgorICAgICAgICAgICAgICAgIGNoZWNrX2hib3gucmVtb3ZlKGNoaWxkKQorICAgICAgICAgICAgICAgIG1vZGlmaWVkID0gVHJ1ZQorICAgICAgICBmb3IgZm9ybWF0IGluIGFsbF9wYWNrYWdlX2Zvcm1hdDoKKyAgICAgICAgICAgIGlmIGZvcm1hdCAhPSBjb21ib19pdGVtOgorICAgICAgICAgICAgICAgIGNoZWNrX2J1dHRvbiA9IGd0ay5DaGVja0J1dHRvbihmb3JtYXQpCisgICAgICAgICAgICAgICAgY2hlY2tfaGJveC5wYWNrX3N0YXJ0KGNoZWNrX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgICAgIG1vZGlmaWVkID0gVHJ1ZQorICAgICAgICBpZiBtb2RpZmllZDoKKyAgICAgICAgICAgIGNoZWNrX2hib3gucmVtb3ZlKHNlbGYucGtnZm10X2luZm8pCisgICAgICAgICAgICBjaGVja19oYm94LnBhY2tfc3RhcnQoc2VsZi5wa2dmbXRfaW5mbywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBjaGVja19oYm94LnNob3dfYWxsKCkKKworICAgIGRlZiBnZW5fcGtnZm10X3dpZGdldChzZWxmLCBjdXJyX3BhY2thZ2VfZm9ybWF0LCBhbGxfcGFja2FnZV9mb3JtYXQsIHRvb2x0aXBfY29tYm89IiIsIHRvb2x0aXBfZXh0cmE9IiIpOgorICAgICAgICBwa2dmbXRfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCJSb290IGZpbGUgc3lzdGVtIHBhY2thZ2UgZm9ybWF0IikKKyAgICAgICAgcGtnZm10X3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHJvb3Rmc19mb3JtYXQgPSAiIgorICAgICAgICBpZiBjdXJyX3BhY2thZ2VfZm9ybWF0OgorICAgICAgICAgICAgcm9vdGZzX2Zvcm1hdCA9IGN1cnJfcGFja2FnZV9mb3JtYXQuc3BsaXQoKVswXQorCisgICAgICAgIHJvb3Rmc19mb3JtYXRfd2lkZ2V0LCByb290ZnNfY29tYm8gPSBzZWxmLmdlbl9jb21ib193aWRnZXQocm9vdGZzX2Zvcm1hdCwgYWxsX3BhY2thZ2VfZm9ybWF0LCB0b29sdGlwX2NvbWJvKQorICAgICAgICBwa2dmbXRfdmJveC5wYWNrX3N0YXJ0KHJvb3Rmc19mb3JtYXRfd2lkZ2V0LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoIkFkZGl0aW9uYWwgcGFja2FnZSBmb3JtYXRzIikKKyAgICAgICAgcGtnZm10X3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGNoZWNrX2hib3ggPSBndGsuSEJveChGYWxzZSwgMTIpCisgICAgICAgIHBrZ2ZtdF92Ym94LnBhY2tfc3RhcnQoY2hlY2tfaGJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBmb3IgZm9ybWF0IGluIGFsbF9wYWNrYWdlX2Zvcm1hdDoKKyAgICAgICAgICAgIGlmIGZvcm1hdCAhPSByb290ZnNfZm9ybWF0OgorICAgICAgICAgICAgICAgIGNoZWNrX2J1dHRvbiA9IGd0ay5DaGVja0J1dHRvbihmb3JtYXQpCisgICAgICAgICAgICAgICAgaXNfYWN0aXZlID0gKGZvcm1hdCBpbiBjdXJyX3BhY2thZ2VfZm9ybWF0LnNwbGl0KCkpCisgICAgICAgICAgICAgICAgY2hlY2tfYnV0dG9uLnNldF9hY3RpdmUoaXNfYWN0aXZlKQorICAgICAgICAgICAgICAgIGNoZWNrX2hib3gucGFja19zdGFydChjaGVja19idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzZWxmLnBrZ2ZtdF9pbmZvID0gSG9iSW5mb0J1dHRvbih0b29sdGlwX2V4dHJhLCBzZWxmKQorICAgICAgICBjaGVja19oYm94LnBhY2tfc3RhcnQoc2VsZi5wa2dmbXRfaW5mbywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHJvb3Rmc19jb21iby5jb25uZWN0KCJjaGFuZ2VkIiwgc2VsZi5yb290ZnNfY29tYm9fY2hhbmdlZF9jYiwgYWxsX3BhY2thZ2VfZm9ybWF0LCBjaGVja19oYm94KQorCisgICAgICAgIHBrZ2ZtdF92Ym94LnNob3dfYWxsKCkKKworICAgICAgICByZXR1cm4gcGtnZm10X3Zib3gsIHJvb3Rmc19jb21ibywgY2hlY2tfaGJveAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpdGxlLCBjb25maWd1cmF0aW9uLCBhbGxfaW1hZ2VfdHlwZXMsCisgICAgICAgICAgICBhbGxfcGFja2FnZV9mb3JtYXRzLCBhbGxfZGlzdHJvcywgYWxsX3Nka19tYWNoaW5lcywKKyAgICAgICAgICAgIG1heF90aHJlYWRzLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zPU5vbmUpOgorICAgICAgICBzdXBlcihBZHZhbmNlZFNldHRpbmdzRGlhbG9nLCBzZWxmKS5fX2luaXRfXyh0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucykKKworICAgICAgICAjIGNsYXNzIG1lbWJlcnMgZnJvbSBvdGhlciBvYmplY3RzCisgICAgICAgICMgYml0YmFrZSBzZXR0aW5ncyBmcm9tIEJ1aWxkZXIuQ29uZmlndXJhdGlvbgorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uCisgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXMgPSBhbGxfaW1hZ2VfdHlwZXMKKyAgICAgICAgc2VsZi5hbGxfcGFja2FnZV9mb3JtYXRzID0gYWxsX3BhY2thZ2VfZm9ybWF0cworICAgICAgICBzZWxmLmFsbF9kaXN0cm9zID0gYWxsX2Rpc3Ryb3NbOl0KKyAgICAgICAgc2VsZi5hbGxfc2RrX21hY2hpbmVzID0gYWxsX3Nka19tYWNoaW5lcworICAgICAgICBzZWxmLm1heF90aHJlYWRzID0gbWF4X3RocmVhZHMKKworICAgICAgICAjIGNsYXNzIG1lbWJlcnMgZm9yIGludGVybmFsIHVzZQorICAgICAgICBzZWxmLmRpc3Ryb19jb21ibyA9IE5vbmUKKyAgICAgICAgc2VsZi5kbGRpcl90ZXh0ID0gTm9uZQorICAgICAgICBzZWxmLnNzdGF0ZWRpcl90ZXh0ID0gTm9uZQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcl90ZXh0ID0gTm9uZQorICAgICAgICBzZWxmLmJiX3NwaW5uZXIgPSBOb25lCisgICAgICAgIHNlbGYucG1ha2Vfc3Bpbm5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5yb290ZnNfc2l6ZV9zcGlubmVyID0gTm9uZQorICAgICAgICBzZWxmLmV4dHJhX3NpemVfc3Bpbm5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5ncGx2M19jaGVja2JveCA9IE5vbmUKKyAgICAgICAgc2VsZi5zZGtfY2hlY2tib3ggPSBOb25lCisgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zID0ge30KKworICAgICAgICBzZWxmLm1kNSA9IHNlbGYuY29uZmlnX21kNSgpCisgICAgICAgIHNlbGYuc2V0dGluZ3NfY2hhbmdlZCA9IEZhbHNlCisKKyAgICAgICAgIyBjcmVhdGUgdmlzdWFsIGVsZW1lbnRzIG9uIHRoZSBkaWFsb2cKKyAgICAgICAgc2VsZi5zYXZlX2J1dHRvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5jcmVhdGVfdmlzdWFsX2VsZW1lbnRzKCkKKyAgICAgICAgc2VsZi5jb25uZWN0KCJyZXNwb25zZSIsIHNlbGYucmVzcG9uc2VfY2IpCisKKyAgICBkZWYgX2dldF9zb3J0ZWRfdmFsdWUoc2VsZiwgdmFyKToKKyAgICAgICAgcmV0dXJuICIgIi5qb2luKHNvcnRlZChzdHIodmFyKS5zcGxpdCgpKSkgKyAiXG4iCisKKyAgICBkZWYgY29uZmlnX21kNShzZWxmKToKKyAgICAgICAgZGF0YSA9ICIiCisgICAgICAgIGRhdGEgKz0gKCJQQUNLQUdFX0NMQVNTRVM6ICIgICAgICArIHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX3BhY2thZ2VfZm9ybWF0ICsgJ1xuJykKKyAgICAgICAgZGF0YSArPSAoIkRJU1RSTzogIiAgICAgICAgICAgICAgICsgc2VsZi5fZ2V0X3NvcnRlZF92YWx1ZShzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9kaXN0cm8pKQorICAgICAgICBkYXRhICs9ICgiSU1BR0VfUk9PVEZTX1NJWkU6ICIgICAgKyBzZWxmLl9nZXRfc29ydGVkX3ZhbHVlKHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZV9yb290ZnNfc2l6ZSkpCisgICAgICAgIGRhdGEgKz0gKCJJTUFHRV9FWFRSQV9TSVpFOiAiICAgICArIHNlbGYuX2dldF9zb3J0ZWRfdmFsdWUoc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX2V4dHJhX3NpemUpKQorICAgICAgICBkYXRhICs9ICgiSU5DT01QQVRJQkxFX0xJQ0VOU0U6ICIgKyBzZWxmLl9nZXRfc29ydGVkX3ZhbHVlKHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlKSkKKyAgICAgICAgZGF0YSArPSAoIlNES19NQUNISU5FOiAiICAgICAgICAgICsgc2VsZi5fZ2V0X3NvcnRlZF92YWx1ZShzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9zZGtfbWFjaGluZSkpCisgICAgICAgIGRhdGEgKz0gKCJUT09MQ0hBSU5fQlVJTEQ6ICIgICAgICArIHNlbGYuX2dldF9zb3J0ZWRfdmFsdWUoc2VsZi5jb25maWd1cmF0aW9uLnRvb2xjaGFpbl9idWlsZCkpCisgICAgICAgIGRhdGEgKz0gKCJJTUFHRV9GU1RZUEVTOiAiICAgICAgICArIHNlbGYuX2dldF9zb3J0ZWRfdmFsdWUoc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX2ZzdHlwZXMpKQorICAgICAgICByZXR1cm4gaGFzaGxpYi5tZDUoZGF0YSkuaGV4ZGlnZXN0KCkKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLm5iID0gZ3RrLk5vdGVib29rKCkKKyAgICAgICAgc2VsZi5uYi5zZXRfc2hvd190YWJzKFRydWUpCisgICAgICAgIHNlbGYubmIuYXBwZW5kX3BhZ2Uoc2VsZi5jcmVhdGVfaW1hZ2VfdHlwZXNfcGFnZSgpLCBndGsuTGFiZWwoIkltYWdlIHR5cGVzIikpCisgICAgICAgIHNlbGYubmIuYXBwZW5kX3BhZ2Uoc2VsZi5jcmVhdGVfb3V0cHV0X3BhZ2UoKSwgZ3RrLkxhYmVsKCJPdXRwdXQiKSkKKyAgICAgICAgc2VsZi5uYi5zZXRfY3VycmVudF9wYWdlKDApCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYubmIsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisgICAgICAgIHNlbGYudmJveC5wYWNrX2VuZChndGsuSFNlcGFyYXRvcigpLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIGdldF9udW1fY2hlY2tlZF9pbWFnZV90eXBlcyhzZWxmKToKKyAgICAgICAgdG90YWwgPSAwCisgICAgICAgIGZvciBiIGluIHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zLnZhbHVlcygpOgorICAgICAgICAgICAgaWYgYi5nZXRfYWN0aXZlKCk6CisgICAgICAgICAgICAgIHRvdGFsID0gdG90YWwgKyAxCisgICAgICAgIHJldHVybiB0b3RhbAorCisgICAgZGVmIHNldF9zYXZlX2J1dHRvbl9zdGF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zYXZlX2J1dHRvbjoKKyAgICAgICAgICAgIHNlbGYuc2F2ZV9idXR0b24uc2V0X3NlbnNpdGl2ZShzZWxmLmdldF9udW1fY2hlY2tlZF9pbWFnZV90eXBlcygpID4gMCkKKworICAgIGRlZiBpbWFnZV90eXBlX2NoZWNrYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5zZXRfc2F2ZV9idXR0b25fc3RhdGUoKQorICAgICAgICBpZiBzZWxmLmdldF9udW1fY2hlY2tlZF9pbWFnZV90eXBlcygpID09IDA6CisgICAgICAgICAgICAjIFNob3cgYW4gZXJyb3IgZGlhbG9nCisgICAgICAgICAgICBsYmwgPSAiPGI+U2VsZWN0IGFuIGltYWdlIHR5cGU8L2I+IgorICAgICAgICAgICAgbXNnID0gIllvdSBuZWVkIHRvIHNlbGVjdCBhdCBsZWFzdCBvbmUgaW1hZ2UgdHlwZS4iCisgICAgICAgICAgICBkaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfV0FSTklORywgbXNnKQorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIk9LIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIGNyZWF0ZV9pbWFnZV90eXBlc19wYWdlKHNlbGYpOgorICAgICAgICBtYWluX3Zib3ggPSBndGsuVkJveChGYWxzZSwgMTYpCisgICAgICAgIG1haW5fdmJveC5zZXRfYm9yZGVyX3dpZHRoKDYpCisKKyAgICAgICAgYWR2YW5jZWRfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnNldF9ib3JkZXJfd2lkdGgoNikKKworICAgICAgICBkaXN0cm9fdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KSAgICAgICAgCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCJEaXN0cm86IikKKyAgICAgICAgdG9vbHRpcCA9ICJTZWxlY3RzIHRoZSBZb2N0byBQcm9qZWN0IGRpc3RyaWJ1dGlvbiB5b3Ugd2FudCIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaSA9IHNlbGYuYWxsX2Rpc3Ryb3MuaW5kZXgoICJkZWZhdWx0c2V0dXAiICkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBpID0gLTEKKyAgICAgICAgaWYgaSAhPSAtMToKKyAgICAgICAgICAgIHNlbGYuYWxsX2Rpc3Ryb3NbIGkgXSA9ICJEZWZhdWx0IgorICAgICAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfZGlzdHJvID09ICJkZWZhdWx0c2V0dXAiOgorICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX2Rpc3RybyA9ICJEZWZhdWx0IgorICAgICAgICBkaXN0cm9fd2lkZ2V0LCBzZWxmLmRpc3Ryb19jb21ibyA9IHNlbGYuZ2VuX2NvbWJvX3dpZGdldChzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9kaXN0cm8sIHNlbGYuYWxsX2Rpc3Ryb3MsIjxiPkRpc3RybzwvYj4iICsgIioiICsgdG9vbHRpcCkKKyAgICAgICAgZGlzdHJvX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBkaXN0cm9fdmJveC5wYWNrX3N0YXJ0KGRpc3Ryb193aWRnZXQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgbWFpbl92Ym94LnBhY2tfc3RhcnQoZGlzdHJvX3Zib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworCisgICAgICAgIHJvd3MgPSAobGVuKHNlbGYuaW1hZ2VfdHlwZXMpKzEpLzMKKyAgICAgICAgdGFibGUgPSBndGsuVGFibGUocm93cyArIDEsIDEwLCBUcnVlKQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQodGFibGUsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICB0b29sdGlwID0gIkltYWdlIGZpbGUgc3lzdGVtIHR5cGVzIHlvdSB3YW50LiIKKyAgICAgICAgaW5mbyA9IEhvYkluZm9CdXR0b24oIjxiPkltYWdlIHR5cGVzPC9iPiIgKyAiKiIgKyB0b29sdGlwLCBzZWxmKQorICAgICAgICBsYWJlbCA9IHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgiSW1hZ2UgdHlwZXM6IikKKyAgICAgICAgYWxpZ24gPSBndGsuQWxpZ25tZW50KDAsIDAuNSwgMCwgMCkKKyAgICAgICAgdGFibGUuYXR0YWNoKGFsaWduLCAwLCA0LCAwLCAxKQorICAgICAgICBhbGlnbi5hZGQobGFiZWwpCisgICAgICAgIHRhYmxlLmF0dGFjaChpbmZvLCA0LCA1LCAwLCAxKQorCisgICAgICAgIGkgPSAxCisgICAgICAgIGogPSAxCisgICAgICAgIGZvciBpbWFnZV90eXBlIGluIHNvcnRlZChzZWxmLmltYWdlX3R5cGVzKToKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zW2ltYWdlX3R5cGVdID0gZ3RrLkNoZWNrQnV0dG9uKGltYWdlX3R5cGUpCisgICAgICAgICAgICBzZWxmLmltYWdlX3R5cGVzX2NoZWNrYnV0dG9uc1tpbWFnZV90eXBlXS5jb25uZWN0KCJ0b2dnbGVkIiwgc2VsZi5pbWFnZV90eXBlX2NoZWNrYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgICAgICBhcnRpY2xlID0gIiIKKyAgICAgICAgICAgIGlmIGltYWdlX3R5cGUuc3RhcnRzd2l0aCgoImEiLCAiZSIsICJpIiwgIm8iLCAidSIpKToKKyAgICAgICAgICAgICAgICBhcnRpY2xlID0gIm4iCisgICAgICAgICAgICBpZiBpbWFnZV90eXBlID09ICJsaXZlIjoKKyAgICAgICAgICAgICAgICBzZWxmLmltYWdlX3R5cGVzX2NoZWNrYnV0dG9uc1tpbWFnZV90eXBlXS5zZXRfdG9vbHRpcF90ZXh0KCJCdWlsZCBpc28gYW5kIGhkZGltZyBpbWFnZXMiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmltYWdlX3R5cGVzX2NoZWNrYnV0dG9uc1tpbWFnZV90eXBlXS5zZXRfdG9vbHRpcF90ZXh0KCJCdWlsZCBhJXMgJXMgaW1hZ2UiICUgKGFydGljbGUsIGltYWdlX3R5cGUpKQorICAgICAgICAgICAgdGFibGUuYXR0YWNoKHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zW2ltYWdlX3R5cGVdLCBqIC0gMSwgaiArIDMsIGksIGkgKyAxKQorICAgICAgICAgICAgaWYgaW1hZ2VfdHlwZSBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uaW1hZ2VfZnN0eXBlcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zW2ltYWdlX3R5cGVdLnNldF9hY3RpdmUoVHJ1ZSkKKyAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAgICAgaWYgaSA+IHJvd3M6CisgICAgICAgICAgICAgICAgaSA9IDEKKyAgICAgICAgICAgICAgICBqID0gaiArIDQKKworICAgICAgICBtYWluX3Zib3gucGFja19zdGFydChhZHZhbmNlZF92Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYuc2V0X3NhdmVfYnV0dG9uX3N0YXRlKCkKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtYWluX3Zib3gKKworICAgIGRlZiBjcmVhdGVfb3V0cHV0X3BhZ2Uoc2VsZik6CisgICAgICAgIGFkdmFuY2VkX3Zib3ggPSBndGsuVkJveChGYWxzZSwgNikKKyAgICAgICAgYWR2YW5jZWRfdmJveC5zZXRfYm9yZGVyX3dpZHRoKDYpCisKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgnPHNwYW4gd2VpZ2h0PSJib2xkIj5QYWNrYWdlIGZvcm1hdDwvc3Bhbj4nKSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc3ViX3Zib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgdG9vbHRpcF9jb21ibyA9ICJTZWxlY3RzIHRoZSBwYWNrYWdlIGZvcm1hdCB1c2VkIHRvIGdlbmVyYXRlIHJvb3Rmcy4iCisgICAgICAgIHRvb2x0aXBfZXh0cmEgPSAiU2VsZWN0cyBleHRyYSBwYWNrYWdlIGZvcm1hdHMgdG8gYnVpbGQiCisgICAgICAgIHBrZ2ZtdF93aWRnZXQsIHNlbGYucm9vdGZzX2NvbWJvLCBzZWxmLmNoZWNrX2hib3ggPSBzZWxmLmdlbl9wa2dmbXRfd2lkZ2V0KHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX3BhY2thZ2VfZm9ybWF0LCBzZWxmLmFsbF9wYWNrYWdlX2Zvcm1hdHMsIjxiPlJvb3QgZmlsZSBzeXN0ZW0gcGFja2FnZSBmb3JtYXQ8L2I+IiArICIqIiArIHRvb2x0aXBfY29tYm8sIjxiPkFkZGl0aW9uYWwgcGFja2FnZSBmb3JtYXRzPC9iPiIgKyAiKiIgKyB0b29sdGlwX2V4dHJhKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHBrZ2ZtdF93aWRnZXQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCc8c3BhbiB3ZWlnaHQ9ImJvbGQiPkltYWdlIHNpemU8L3NwYW4+JyksIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc3ViX3Zib3ggPSBndGsuVkJveChGYWxzZSwgNikKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHN1Yl92Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCJJbWFnZSBiYXNpYyBzaXplIChpbiBNQikiKQorICAgICAgICB0b29sdGlwID0gIkRlZmluZXMgdGhlIHNpemUgZm9yIHRoZSBnZW5lcmF0ZWQgaW1hZ2UuIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRldGVybWluZXMgdGhlIGZpbmFsIHNpemUgZm9yIHRoZSBnZW5lcmF0ZWQgaW1hZ2UgdXNpbmcgYW4gYWxnb3JpdGhtIHRoYXQgdGFrZXMgaW50byBhY2NvdW50IHRoZSBpbml0aWFsIGRpc2sgc3BhY2UgdXNlZCBmb3IgdGhlIGdlbmVyYXRlZCBpbWFnZSwgdGhlIEltYWdlIGJhc2ljIHNpemUgdmFsdWUsIGFuZCB0aGUgQWRkaXRpb25hbCBmcmVlIHNwYWNlIHZhbHVlLlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiwgY2hlY2sgdGhlIDxhIGhyZWY9XCJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9jdXJyZW50L3Bva3ktcmVmLW1hbnVhbC9wb2t5LXJlZi1tYW51YWwuaHRtbCN2YXItSU1BR0VfUk9PVEZTX1NJWkVcIj5Zb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWw8L2E+LiIKKyAgICAgICAgcm9vdGZzX3NpemVfd2lkZ2V0LCBzZWxmLnJvb3Rmc19zaXplX3NwaW5uZXIgPSBzZWxmLmdlbl9zcGlubmVyX3dpZGdldChpbnQoc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX3Jvb3Rmc19zaXplKjEuMC8xMDI0KSwgMCwgNjU1MzYsIjxiPkltYWdlIGJhc2ljIHNpemU8L2I+IiArICIqIiArIHRvb2x0aXApCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQobGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChyb290ZnNfc2l6ZV93aWRnZXQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzdWJfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc3ViX3Zib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoIkFkZGl0aW9uYWwgZnJlZSBzcGFjZSAoaW4gTUIpIikKKyAgICAgICAgdG9vbHRpcCA9ICJTZXRzIGV4dHJhIGZyZWUgZGlzayBzcGFjZSB0byBiZSBhZGRlZCB0byB0aGUgZ2VuZXJhdGVkIGltYWdlLiBVc2UgdGhpcyB2YXJpYWJsZSB3aGVuIHlvdSB3YW50IHRvIGVuc3VyZSB0aGF0IGEgc3BlY2lmaWMgYW1vdW50IG9mIGZyZWUgZGlzayBzcGFjZSBpcyBhdmFpbGFibGUgb24gYSBkZXZpY2UgYWZ0ZXIgYW4gaW1hZ2UgaXMgaW5zdGFsbGVkIGFuZCBydW5uaW5nLiIKKyAgICAgICAgZXh0cmFfc2l6ZV93aWRnZXQsIHNlbGYuZXh0cmFfc2l6ZV9zcGlubmVyID0gc2VsZi5nZW5fc3Bpbm5lcl93aWRnZXQoaW50KHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZV9leHRyYV9zaXplKjEuMC8xMDI0KSwgMCwgNjU1MzYsIjxiPkFkZGl0aW9uYWwgZnJlZSBzcGFjZTwvYj4iICsgIioiICsgdG9vbHRpcCkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGV4dHJhX3NpemVfd2lkZ2V0LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgnPHNwYW4gd2VpZ2h0PSJib2xkIj5MaWNlbnNpbmc8L3NwYW4+JyksIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5ncGx2M19jaGVja2JveCA9IGd0ay5DaGVja0J1dHRvbigiRXhjbHVkZSBHUEx2MyBwYWNrYWdlcyIpCisgICAgICAgIHNlbGYuZ3BsdjNfY2hlY2tib3guc2V0X3Rvb2x0aXBfdGV4dCgiQ2hlY2sgdGhpcyBib3ggdG8gcHJldmVudCBHUEx2MyBwYWNrYWdlcyBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHlvdXIgaW1hZ2UiKQorICAgICAgICBpZiAiR1BMdjMiIGluIHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlLnNwbGl0KCk6CisgICAgICAgICAgICBzZWxmLmdwbHYzX2NoZWNrYm94LnNldF9hY3RpdmUoVHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZ3BsdjNfY2hlY2tib3guc2V0X2FjdGl2ZShGYWxzZSkKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHNlbGYuZ3BsdjNfY2hlY2tib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCc8c3BhbiB3ZWlnaHQ9ImJvbGQiPlNESzwvc3Bhbj4nKSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfaGJveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc3ViX2hib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5zZGtfY2hlY2tib3ggPSBndGsuQ2hlY2tCdXR0b24oIlBvcHVsYXRlIFNESyIpCisgICAgICAgIHRvb2x0aXAgPSAiQ2hlY2sgdGhpcyBib3ggdG8gZ2VuZXJhdGUgYW4gU0RLIHRhcmJhbGwgdGhhdCBjb25zaXN0cyBvZiB0aGUgY3Jvc3MtdG9vbGNoYWluIGFuZCBhIHN5c3Jvb3QgdGhhdCBjb250YWlucyBkZXZlbG9wbWVudCBwYWNrYWdlcyBmb3IgeW91ciBpbWFnZS4iCisgICAgICAgIHNlbGYuc2RrX2NoZWNrYm94LnNldF90b29sdGlwX3RleHQodG9vbHRpcCkKKyAgICAgICAgc2VsZi5zZGtfY2hlY2tib3guc2V0X2FjdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24udG9vbGNoYWluX2J1aWxkKQorICAgICAgICBzdWJfaGJveC5wYWNrX3N0YXJ0KHNlbGYuc2RrX2NoZWNrYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgdG9vbHRpcCA9ICJTZWxlY3QgdGhlIGhvc3QgcGxhdGZvcm0gZm9yIHdoaWNoIHlvdSB3YW50IHRvIHJ1biB0aGUgdG9vbGNoYWluIGNvbnRhaW5lZCBpbiB0aGUgU0RLIHRhcmJhbGwuIgorICAgICAgICBzZGtfbWFjaGluZV93aWRnZXQsIHNlbGYuc2RrX21hY2hpbmVfY29tYm8gPSBzZWxmLmdlbl9jb21ib193aWRnZXQoc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfc2RrX21hY2hpbmUsIHNlbGYuYWxsX3Nka19tYWNoaW5lcywiPGI+UG9wdWxhdGUgU0RLPC9iPiIgKyAiKiIgKyB0b29sdGlwKQorICAgICAgICBzdWJfaGJveC5wYWNrX3N0YXJ0KHNka19tYWNoaW5lX3dpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHJldHVybiBhZHZhbmNlZF92Ym94CisKKyAgICBkZWYgcmVzcG9uc2VfY2Ioc2VsZiwgZGlhbG9nLCByZXNwb25zZV9pZCk6CisgICAgICAgIHBhY2thZ2VfZm9ybWF0ID0gW10KKyAgICAgICAgcGFja2FnZV9mb3JtYXQuYXBwZW5kKHNlbGYucm9vdGZzX2NvbWJvLmdldF9hY3RpdmVfdGV4dCgpKQorICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGVja19oYm94OgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjaGlsZCwgZ3RrLkNoZWNrQnV0dG9uKSBhbmQgY2hpbGQuZ2V0X2FjdGl2ZSgpOgorICAgICAgICAgICAgICAgIHBhY2thZ2VfZm9ybWF0LmFwcGVuZChjaGlsZC5nZXRfbGFiZWwoKSkKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfcGFja2FnZV9mb3JtYXQgPSAiICIuam9pbihwYWNrYWdlX2Zvcm1hdCkKKworICAgICAgICBkaXN0cm8gPSBzZWxmLmRpc3Ryb19jb21iby5nZXRfYWN0aXZlX3RleHQoKQorICAgICAgICBpZiBkaXN0cm8gPT0gIkRlZmF1bHQiOgorICAgICAgICAgICAgZGlzdHJvID0gImRlZmF1bHRzZXR1cCIKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfZGlzdHJvID0gZGlzdHJvCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZV9yb290ZnNfc2l6ZSA9IHNlbGYucm9vdGZzX3NpemVfc3Bpbm5lci5nZXRfdmFsdWVfYXNfaW50KCkgKiAxMDI0CisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZV9leHRyYV9zaXplID0gc2VsZi5leHRyYV9zaXplX3NwaW5uZXIuZ2V0X3ZhbHVlX2FzX2ludCgpICogMTAyNAorCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZV9mc3R5cGVzID0gIiIKKyAgICAgICAgZm9yIGltYWdlX3R5cGUgaW4gc2VsZi5pbWFnZV90eXBlczoKKyAgICAgICAgICAgIGlmIHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zW2ltYWdlX3R5cGVdLmdldF9hY3RpdmUoKToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uaW1hZ2VfZnN0eXBlcyArPSAoIiAiICsgaW1hZ2VfdHlwZSkKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX2ZzdHlwZXMuc3RyaXAoKQorCisgICAgICAgIGlmIHNlbGYuZ3BsdjNfY2hlY2tib3guZ2V0X2FjdGl2ZSgpOgorICAgICAgICAgICAgaWYgIkdQTHYzIiBub3QgaW4gc2VsZi5jb25maWd1cmF0aW9uLmluY29tcGF0X2xpY2Vuc2Uuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uaW5jb21wYXRfbGljZW5zZSArPSAiIEdQTHYzIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgIkdQTHYzIiBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uaW5jb21wYXRfbGljZW5zZS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlID0gc2VsZi5jb25maWd1cmF0aW9uLmluY29tcGF0X2xpY2Vuc2Uuc3BsaXQoKS5yZW1vdmUoIkdQTHYzIikKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uaW5jb21wYXRfbGljZW5zZSA9ICIgIi5qb2luKHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlIG9yIFtdKQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uaW5jb21wYXRfbGljZW5zZSA9IHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlLnN0cmlwKCkKKworICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24udG9vbGNoYWluX2J1aWxkID0gc2VsZi5zZGtfY2hlY2tib3guZ2V0X2FjdGl2ZSgpCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX3Nka19tYWNoaW5lID0gc2VsZi5zZGtfbWFjaGluZV9jb21iby5nZXRfYWN0aXZlX3RleHQoKQorICAgICAgICBtZDUgPSBzZWxmLmNvbmZpZ19tZDUoKQorICAgICAgICBzZWxmLnNldHRpbmdzX2NoYW5nZWQgPSAoc2VsZi5tZDUgIT0gbWQ1KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2NydW1ic2RpYWxvZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9jcnVtYnNkaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY3OWY5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9jcnVtYnNkaWFsb2cucHkKQEAgLTAsMCArMSw0NCBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworCisiIiIKK1RoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50CitCaXRCYWtlIEdVSSdzCitJbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4CisiIiIKKworY2xhc3MgQ3J1bWJzRGlhbG9nKGd0ay5EaWFsb2cpOgorICAgICIiIgorICAgIEEgR05PTUUgSElHIGNvbXBsaWFudCBkaWFsb2cgd2lkZ2V0LgorICAgIEFkZCBidXR0b25zIHdpdGggZ3RrLkRpYWxvZy5hZGRfYnV0dG9uIG9yIGd0ay5EaWFsb2cuYWRkX2J1dHRvbnMKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGl0bGU9IiIsIHBhcmVudD1Ob25lLCBmbGFncz0wLCBidXR0b25zPU5vbmUpOgorICAgICAgICBzdXBlcihDcnVtYnNEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorCisgICAgICAgIHNlbGYuc2V0X3Byb3BlcnR5KCJoYXMtc2VwYXJhdG9yIiwgRmFsc2UpICMgbm90ZTogZGVwcmVjYXRlZCBpbiAyLjIyCisKKyAgICAgICAgc2VsZi5zZXRfYm9yZGVyX3dpZHRoKDYpCisgICAgICAgIHNlbGYudmJveC5zZXRfcHJvcGVydHkoInNwYWNpbmciLCAxMikKKyAgICAgICAgc2VsZi5hY3Rpb25fYXJlYS5zZXRfcHJvcGVydHkoInNwYWNpbmciLCAxMikKKyAgICAgICAgc2VsZi5hY3Rpb25fYXJlYS5zZXRfcHJvcGVydHkoImJvcmRlci13aWR0aCIsIDYpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvY3J1bWJzbWVzc2FnZWRpYWxvZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9jcnVtYnNtZXNzYWdlZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiOTk4ZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvY3J1bWJzbWVzc2FnZWRpYWxvZy5weQpAQCAtMCwwICsxLDcwIEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ2xpYgoraW1wb3J0IGd0aworZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBIb2JJY29uQ2hlY2tlcgorZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic2RpYWxvZyBpbXBvcnQgQ3J1bWJzRGlhbG9nCisKKyIiIgorVGhlIGZvbGxvd2luZyBhcmUgY29udmVuaWVuY2UgY2xhc3NlcyBmb3IgaW1wbGVtZW50aW5nIEdOT01FIEhJRyBjb21wbGlhbnQKK0JpdEJha2UgR1VJJ3MKK0luIHN1bW1hcnk6IHNwYWNpbmcgPSAxMnB4LCBib3JkZXItd2lkdGggPSA2cHgKKyIiIgorCitjbGFzcyBDcnVtYnNNZXNzYWdlRGlhbG9nKGd0ay5NZXNzYWdlRGlhbG9nKToKKyAgICAiIiIKKyAgICBBIEdOT01FIEhJRyBjb21wbGlhbnQgZGlhbG9nIHdpZGdldC4KKyAgICBBZGQgYnV0dG9ucyB3aXRoIGd0ay5EaWFsb2cuYWRkX2J1dHRvbiBvciBndGsuRGlhbG9nLmFkZF9idXR0b25zCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCA9IE5vbmUsIGxhYmVsPSIiLCBkaWFsb2dfdHlwZSA9IGd0ay5NRVNTQUdFX1FVRVNUSU9OLCBtc2c9IiIpOgorICAgICAgICBzdXBlcihDcnVtYnNNZXNzYWdlRGlhbG9nLCBzZWxmKS5fX2luaXRfXyhOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGsuRElBTE9HX01PREFMIHwgZ3RrLkRJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkJVVFRPTlNfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSkKKworICAgICAgICBzZWxmLnNldF9za2lwX3Rhc2tiYXJfaGludChGYWxzZSkKKworICAgICAgICBzZWxmLnNldF9tYXJrdXAobGFiZWwpCisKKyAgICAgICAgaWYgMCA8PSBsZW4obXNnKSA8IDMwMDoKKyAgICAgICAgICAgIHNlbGYuZm9ybWF0X3NlY29uZGFyeV9tYXJrdXAobXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmJveCA9IHNlbGYuZ2V0X21lc3NhZ2VfYXJlYSgpCisgICAgICAgICAgICB2Ym94LnNldF9ib3JkZXJfd2lkdGgoMSkKKyAgICAgICAgICAgIHZib3guc2V0X3Byb3BlcnR5KCJzcGFjaW5nIiwgMTIpCisgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93LnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93LnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3ID0gZ3RrLlRleHRWaWV3KCkKKyAgICAgICAgICAgIHNlbGYubXNnVmlldy5zZXRfZWRpdGFibGUoRmFsc2UpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcuc2V0X3dyYXBfbW9kZShndGsuV1JBUF9XT1JEKQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3LnNldF9jdXJzb3JfdmlzaWJsZShGYWxzZSkKKyAgICAgICAgICAgIHNlbGYubXNnVmlldy5zZXRfc2l6ZV9yZXF1ZXN0KDMwMCwgMzAwKQorICAgICAgICAgICAgc2VsZi5idWYgPSBndGsuVGV4dEJ1ZmZlcigpCisgICAgICAgICAgICBzZWxmLmJ1Zi5zZXRfdGV4dChtc2cpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcuc2V0X2J1ZmZlcihzZWxmLmJ1ZikKKyAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5hZGQoc2VsZi5tc2dWaWV3KQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3LnNob3coKQorICAgICAgICAgICAgdmJveC5hZGQoc2VsZi50ZXh0V2luZG93KQorICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93LnNob3coKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2RlcGxveWltYWdlZGlhbG9nLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2RlcGxveWltYWdlZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExM2ZmZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvZGVwbG95aW1hZ2VkaWFsb2cucHkKQEAgLTAsMCArMSwyMTkgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBnbG9iCitpbXBvcnQgZ3RrCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaGxleAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0ZW1wZmlsZQorZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBoaWMsIEhvYkJ1dHRvbgorZnJvbSBiYi51aS5jcnVtYnMucHJvZ3Jlc3NiYXIgaW1wb3J0IEhvYlByb2dyZXNzQmFyCitpbXBvcnQgYmIudWkuY3J1bWJzLnV0aWxzCitpbXBvcnQgYmIucHJvY2VzcworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic2RpYWxvZyBpbXBvcnQgQ3J1bWJzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzbWVzc2FnZWRpYWxvZyBpbXBvcnQgQ3J1bWJzTWVzc2FnZURpYWxvZworCisiIiIKK1RoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50CitCaXRCYWtlIEdVSSdzCitJbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4CisiIiIKKworY2xhc3MgRGVwbG95SW1hZ2VEaWFsb2cgKENydW1ic0RpYWxvZyk6CisKKyAgICBfX2R1bW15X3VzYl9fID0gIi0tc2VsZWN0IGEgdXNiIGRyaXZlLS0iCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIGltYWdlX3BhdGgsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnM9Tm9uZSwgc3RhbmRhbG9uZT1GYWxzZSk6CisgICAgICAgIHN1cGVyKERlcGxveUltYWdlRGlhbG9nLCBzZWxmKS5fX2luaXRfXyh0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucykKKworICAgICAgICBzZWxmLmltYWdlX3BhdGggPSBpbWFnZV9wYXRoCisgICAgICAgIHNlbGYuc3RhbmRhbG9uZSA9IHN0YW5kYWxvbmUKKworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorICAgICAgICBzZWxmLmNvbm5lY3QoInJlc3BvbnNlIiwgc2VsZi5yZXNwb25zZV9jYikKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLnNldF9zaXplX3JlcXVlc3QoNjAwLCA0MDApCisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKKyAgICAgICAgbWFya3VwID0gIjxzcGFuIGZvbnRfZGVzYz0nMTInPlRoZSBpbWFnZSB0byBiZSB3cml0dGVuIGludG8gdXNiIGRyaXZlOjwvc3Bhbj4iCisgICAgICAgIGxhYmVsLnNldF9tYXJrdXAobWFya3VwKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTIpCisKKyAgICAgICAgdGFibGUgPSBndGsuVGFibGUoMiwgMTAsIEZhbHNlKQorICAgICAgICB0YWJsZS5zZXRfY29sX3NwYWNpbmdzKDUpCisgICAgICAgIHRhYmxlLnNldF9yb3dfc3BhY2luZ3MoNSkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQodGFibGUsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2Nyb2xsID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgc2Nyb2xsLnNldF9wb2xpY3koZ3RrLlBPTElDWV9ORVZFUiwgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisgICAgICAgIHNjcm9sbC5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKyAgICAgICAgdHYgPSBndGsuVGV4dFZpZXcoKQorICAgICAgICB0di5zZXRfZWRpdGFibGUoRmFsc2UpCisgICAgICAgIHR2LnNldF93cmFwX21vZGUoZ3RrLldSQVBfV09SRCkKKyAgICAgICAgdHYuc2V0X2N1cnNvcl92aXNpYmxlKEZhbHNlKQorICAgICAgICBzZWxmLmJ1ZiA9IGd0ay5UZXh0QnVmZmVyKCkKKyAgICAgICAgc2VsZi5idWYuc2V0X3RleHQoc2VsZi5pbWFnZV9wYXRoKQorICAgICAgICB0di5zZXRfYnVmZmVyKHNlbGYuYnVmKQorICAgICAgICBzY3JvbGwuYWRkKHR2KQorICAgICAgICB0YWJsZS5hdHRhY2goc2Nyb2xsLCAwLCAxMCwgMCwgMSkKKworICAgICAgICAjIFRoZXJlIGFyZSAyIHdheXMgdG8gdXNlIERlcGxveUltYWdlRGlhbG9nCisgICAgICAgICMgT25lIHdheSBpcyB0aGF0IGNhbGxlZCBieSBIT0Igd2hlbiB0aGUgJ0RlcGxveSBJbWFnZScgYnV0dG9uIGlzIGNsaWNrZWQKKyAgICAgICAgIyBUaGUgb3RoZXIgd2F5IGlzIHRoYXQgY2FsbGVkIGJ5IGEgc3RhbmRhbG9uZSBzY3JpcHQuCisgICAgICAgICMgRm9sbG93aW5nIGJsb2NrIG9mIGNvZGVzIGhhbmRsZXMgdGhlIGxhdHRlciB3YXkuIEl0IGFkZHMgYSAnU2VsZWN0IEltYWdlJyBidXR0b24gYW5kCisgICAgICAgICMgZW1pdCBhIHNpZ25hbCB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZC4KKyAgICAgICAgaWYgc2VsZi5zdGFuZGFsb25lOgorICAgICAgICAgICAgICAgIGdvYmplY3Quc2lnbmFsX25ldygic2VsZWN0X2ltYWdlX2NsaWNrZWQiLCBzZWxmLCBnb2JqZWN0LlNJR05BTF9SVU5fRklSU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLCAoKSkKKyAgICAgICAgICAgICAgICBpY29uID0gZ3RrLkltYWdlKCkKKyAgICAgICAgICAgICAgICBwaXhfYnVmZmVyID0gZ3RrLmdkay5waXhidWZfbmV3X2Zyb21fZmlsZShoaWMuSUNPTl9JTUFHRVNfRElTUExBWV9GSUxFKQorICAgICAgICAgICAgICAgIGljb24uc2V0X2Zyb21fcGl4YnVmKHBpeF9idWZmZXIpCisgICAgICAgICAgICAgICAgYnV0dG9uID0gZ3RrLkJ1dHRvbigiU2VsZWN0IEltYWdlIikKKyAgICAgICAgICAgICAgICBidXR0b24uc2V0X2ltYWdlKGljb24pCisgICAgICAgICAgICAgICAgI2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDE0MCwgNTApCisgICAgICAgICAgICAgICAgdGFibGUuYXR0YWNoKGJ1dHRvbiwgOSwgMTAsIDEsIDIsIGd0ay5GSUxMLCAwLCAwLCAwKQorICAgICAgICAgICAgICAgIGJ1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5zZWxlY3RfaW1hZ2VfYnV0dG9uX2NsaWNrZWRfY2IpCisKKyAgICAgICAgc2VwYXJhdG9yID0gZ3RrLkhTZXBhcmF0b3IoKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZXBhcmF0b3IsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz0xMCkKKworICAgICAgICBzZWxmLnVzYl9kZXNjID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgc2VsZi51c2JfZGVzYy5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBtYXJrdXAgPSAiPHNwYW4gZm9udF9kZXNjPScxMic+WW91IGhhdmVuJ3QgY2hvc2VuIGFueSBVU0IgZHJpdmUuPC9zcGFuPiIKKyAgICAgICAgc2VsZi51c2JfZGVzYy5zZXRfbWFya3VwKG1hcmt1cCkKKworICAgICAgICBzZWxmLnVzYl9jb21ibyA9IGd0ay5jb21ib19ib3hfbmV3X3RleHQoKQorICAgICAgICBzZWxmLnVzYl9jb21iby5jb25uZWN0KCJjaGFuZ2VkIiwgc2VsZi51c2JfY29tYm9fY2hhbmdlZF9jYikKKyAgICAgICAgbW9kZWwgPSBzZWxmLnVzYl9jb21iby5nZXRfbW9kZWwoKQorICAgICAgICBtb2RlbC5jbGVhcigpCisgICAgICAgIHNlbGYudXNiX2NvbWJvLmFwcGVuZF90ZXh0KHNlbGYuX19kdW1teV91c2JfXykKKyAgICAgICAgZm9yIHVzYiBpbiBzZWxmLmZpbmRfYWxsX3VzYl9kZXZpY2VzKCk6CisgICAgICAgICAgICBzZWxmLnVzYl9jb21iby5hcHBlbmRfdGV4dCgiL2Rldi8iICsgdXNiKQorICAgICAgICBzZWxmLnVzYl9jb21iby5zZXRfYWN0aXZlKDApCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYudXNiX2NvbWJvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYudXNiX2Rlc2MsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz0yKQorCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyID0gSG9iUHJvZ3Jlc3NCYXIoKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLnByb2dyZXNzX2JhciwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZXBhcmF0b3IgPSBndGsuSFNlcGFyYXRvcigpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlcGFyYXRvciwgZXhwYW5kPUZhbHNlLCBmaWxsPVRydWUsIHBhZGRpbmc9MTApCisKKyAgICAgICAgc2VsZi52Ym94LnNob3dfYWxsKCkKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIuaGlkZSgpCisKKyAgICBkZWYgc2V0X2ltYWdlX3RleHRfYnVmZmVyKHNlbGYsIGltYWdlX3BhdGgpOgorICAgICAgICBzZWxmLmJ1Zi5zZXRfdGV4dChpbWFnZV9wYXRoKQorCisgICAgZGVmIHNldF9pbWFnZV9wYXRoKHNlbGYsIGltYWdlX3BhdGgpOgorICAgICAgICBzZWxmLmltYWdlX3BhdGggPSBpbWFnZV9wYXRoCisKKyAgICBkZWYgcG9wZW5fcmVhZChzZWxmLCBjbWQpOgorICAgICAgICB0bXBvdXQsIGVycm9ycyA9IGJiLnByb2Nlc3MucnVuKCIlcyIgJSBjbWQpCisgICAgICAgIHJldHVybiB0bXBvdXQuc3RyaXAoKQorCisgICAgZGVmIGZpbmRfYWxsX3VzYl9kZXZpY2VzKHNlbGYpOgorICAgICAgICB1c2JfZGV2cyA9IFsgb3MucmVhZGxpbmsodSkKKyAgICAgICAgICAgIGZvciB1IGluIGdsb2IuZ2xvYignL2Rldi9kaXNrL2J5LWlkL3VzYionKQorICAgICAgICAgICAgaWYgbm90IHJlLnNlYXJjaChyJ3BhcnRcZCsnLCB1KSBdCisgICAgICAgIHJldHVybiBbICclcycgJSB1W3UucmZpbmQoJy8nKSsxOl0gZm9yIHUgaW4gdXNiX2RldnMgXQorCisgICAgZGVmIGdldF91c2JfaW5mbyhzZWxmLCBkZXYpOgorICAgICAgICByZXR1cm4gIiVzICVzIiAlIFwKKyAgICAgICAgICAgIChzZWxmLnBvcGVuX3JlYWQoJ2NhdCAvc3lzL2NsYXNzL2Jsb2NrLyVzL2RldmljZS92ZW5kb3InICUgZGV2KSwKKyAgICAgICAgICAgIHNlbGYucG9wZW5fcmVhZCgnY2F0IC9zeXMvY2xhc3MvYmxvY2svJXMvZGV2aWNlL21vZGVsJyAlIGRldikpCisKKyAgICBkZWYgc2VsZWN0X2ltYWdlX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgICAgICBzZWxmLmVtaXQoJ3NlbGVjdF9pbWFnZV9jbGlja2VkJykKKworICAgIGRlZiB1c2JfY29tYm9fY2hhbmdlZF9jYihzZWxmLCB1c2JfY29tYm8pOgorICAgICAgICBjb21ib19pdGVtID0gc2VsZi51c2JfY29tYm8uZ2V0X2FjdGl2ZV90ZXh0KCkKKyAgICAgICAgaWYgbm90IGNvbWJvX2l0ZW0gb3IgY29tYm9faXRlbSA9PSBzZWxmLl9fZHVtbXlfdXNiX186CisgICAgICAgICAgICBtYXJrdXAgPSAiPHNwYW4gZm9udF9kZXNjPScxMic+WW91IGhhdmVuJ3QgY2hvc2VuIGFueSBVU0IgZHJpdmUuPC9zcGFuPiIKKyAgICAgICAgICAgIHNlbGYudXNiX2Rlc2Muc2V0X21hcmt1cChtYXJrdXApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXJrdXAgPSAiPHNwYW4gZm9udF9kZXNjPScxMic+IiArIHNlbGYuZ2V0X3VzYl9pbmZvKGNvbWJvX2l0ZW0ubHN0cmlwKCIvZGV2LyIpKSArICI8L3NwYW4+IgorICAgICAgICAgICAgc2VsZi51c2JfZGVzYy5zZXRfbWFya3VwKG1hcmt1cCkKKworICAgIGRlZiByZXNwb25zZV9jYihzZWxmLCBkaWFsb2csIHJlc3BvbnNlX2lkKToKKyAgICAgICAgaWYgcmVzcG9uc2VfaWQgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIGxibCA9ICcnCisgICAgICAgICAgICBtc2cgPSAnJworICAgICAgICAgICAgY29tYm9faXRlbSA9IHNlbGYudXNiX2NvbWJvLmdldF9hY3RpdmVfdGV4dCgpCisgICAgICAgICAgICBpZiBjb21ib19pdGVtIGFuZCBjb21ib19pdGVtICE9IHNlbGYuX19kdW1teV91c2JfXyBhbmQgc2VsZi5pbWFnZV9wYXRoOgorICAgICAgICAgICAgICAgIGNtZGxpbmUgPSBiYi51aS5jcnVtYnMudXRpbHMud2hpY2hfdGVybWluYWwoKQorICAgICAgICAgICAgICAgIGlmIGNtZGxpbmU6CisgICAgICAgICAgICAgICAgICAgIHRtcGZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQorICAgICAgICAgICAgICAgICAgICBjbWRsaW5lICs9ICJcInN1ZG8gZGQgaWY9IiArIHNlbGYuaW1hZ2VfcGF0aCArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBvZj0iICsgY29tYm9faXRlbSArICIgJiYgc3luYzsgZWNobyAkPyA+ICIgKyB0bXBmaWxlLm5hbWUgKyAiXCIiCisgICAgICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChzaGxleC5zcGxpdChjbWRsaW5lKSkKKworICAgICAgICAgICAgICAgICAgICBpZiBpbnQodG1wZmlsZS5yZWFkbGluZSgpLnN0cmlwKCkpID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBsYmwgPSAiPGI+RGVwbG95IGltYWdlIHN1Y2Nlc3NmdWxseS48L2I+IgorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbGJsID0gIjxiPkZhaWxlZCB0byBkZXBsb3kgaW1hZ2UuPC9iPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJQbGVhc2UgY2hlY2sgaW1hZ2UgPGI+JXM8L2I+IGV4aXN0cyBhbmQgVVNCIGRldmljZSA8Yj4lczwvYj4gaXMgd3JpdGFibGUuIiAlIChzZWxmLmltYWdlX3BhdGgsIGNvbWJvX2l0ZW0pCisgICAgICAgICAgICAgICAgICAgIHRtcGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5pbWFnZV9wYXRoOgorICAgICAgICAgICAgICAgICAgICBsYmwgPSAiPGI+Tm8gc2VsZWN0aW9uIG1hZGUuPC9iPiIKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gIllvdSBoYXZlIG5vdCBzZWxlY3RlZCBhbiBpbWFnZSB0byBkZXBsb3kuIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxibCA9ICI8Yj5ObyBzZWxlY3Rpb24gbWFkZS48L2I+IgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAiWW91IGhhdmUgbm90IHNlbGVjdGVkIGEgVVNCIGRldmljZS4iCisgICAgICAgICAgICBpZiBsZW4obGJsKToKKyAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0lORk8sIG1zZykKKyAgICAgICAgICAgICAgICBidXR0b24gPSBjcnVtYnNfZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cucnVuKCkKKyAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIHVwZGF0ZV9wcm9ncmVzc19iYXIoc2VsZiwgdGl0bGUsIGZyYWN0aW9uLCBzdGF0dXM9Tm9uZSk6CisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnVwZGF0ZShmcmFjdGlvbikKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIuc2V0X3RpdGxlKHRpdGxlKQorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zZXRfcmNzdHlsZShzdGF0dXMpCisKKyAgICBkZWYgd3JpdGVfZmlsZShzZWxmLCBpZmlsZSwgb2ZpbGUpOgorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5yZXNldCgpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnNob3coKQorCisgICAgICAgIGZfZnJvbSA9IG9zLm9wZW4oaWZpbGUsIG9zLk9fUkRPTkxZKQorICAgICAgICBmX3RvID0gb3Mub3BlbihvZmlsZSwgb3MuT19XUk9OTFkpCisKKyAgICAgICAgdG90YWxfc2l6ZSA9IG9zLnN0YXQoaWZpbGUpLnN0X3NpemUKKyAgICAgICAgd3JpdHRlbl9zaXplID0gMAorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBidWYgPSBvcy5yZWFkKGZfZnJvbSwgMTAyNCoxMDI0KQorICAgICAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgb3Mud3JpdGUoZl90bywgYnVmKQorICAgICAgICAgICAgd3JpdHRlbl9zaXplICs9IDEwMjQqMTAyNAorICAgICAgICAgICAgc2VsZi51cGRhdGVfcHJvZ3Jlc3NfYmFyKCJXcml0aW5nIHRvIHVzYjoiLCB3cml0dGVuX3NpemUgKiAxLjAvdG90YWxfc2l6ZSkKKworICAgICAgICBzZWxmLnVwZGF0ZV9wcm9ncmVzc19iYXIoIldyaXRpbmcgY29tcGxldGVkOiIsIDEuMCkKKyAgICAgICAgb3MuY2xvc2UoZl9mcm9tKQorICAgICAgICBvcy5jbG9zZShmX3RvKQorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5oaWRlKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9pbWFnZXNlbGVjdGlvbmRpYWxvZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9pbWFnZXNlbGVjdGlvbmRpYWxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTIxNmFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2ltYWdlc2VsZWN0aW9uZGlhbG9nLnB5CkBAIC0wLDAgKzEsMTcyIEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IG9zCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IEhvYlZpZXdUYWJsZSwgSG9iSW5mb0J1dHRvbiwgSG9iQnV0dG9uLCBIb2JBbHRCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNkaWFsb2cgaW1wb3J0IENydW1ic0RpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmxheWVyc2VsZWN0aW9uZGlhbG9nIGltcG9ydCBMYXllclNlbGVjdGlvbkRpYWxvZworCisiIiIKK1RoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50CitCaXRCYWtlIEdVSSdzCitJbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4CisiIiIKKworY2xhc3MgSW1hZ2VTZWxlY3Rpb25EaWFsb2cgKENydW1ic0RpYWxvZyk6CisKKyAgICBfX2NvbHVtbnNfXyA9IFt7CisgICAgICAgICAgICAnY29sX25hbWUnIDogJ0ltYWdlIG5hbWUnLAorICAgICAgICAgICAgJ2NvbF9pZCcgICA6IDAsCisgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgJ2NvbF9taW4nICA6IDQwMCwKKyAgICAgICAgICAgICdjb2xfbWF4JyAgOiA0MDAKKyAgICAgICAgfSwgeworICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdTZWxlY3QnLAorICAgICAgICAgICAgJ2NvbF9pZCcgICA6IDEsCisgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3JhZGlvIHRvZ2dsZScsCisgICAgICAgICAgICAnY29sX21pbicgIDogMTYwLAorICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDE2MAorICAgIH1dCisKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbWFnZV9mb2xkZXIsIGltYWdlX3R5cGVzLCB0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucz1Ob25lLCBpbWFnZV9leHRlbnNpb24gPSB7fSk6CisgICAgICAgIHN1cGVyKEltYWdlU2VsZWN0aW9uRGlhbG9nLCBzZWxmKS5fX2luaXRfXyh0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucykKKyAgICAgICAgc2VsZi5jb25uZWN0KCJyZXNwb25zZSIsIHNlbGYucmVzcG9uc2VfY2IpCisKKyAgICAgICAgc2VsZi5pbWFnZV9mb2xkZXIgPSBpbWFnZV9mb2xkZXIKKyAgICAgICAgc2VsZi5pbWFnZV90eXBlcyAgPSBpbWFnZV90eXBlcworICAgICAgICBzZWxmLmltYWdlX2xpc3QgPSBbXQorICAgICAgICBzZWxmLmltYWdlX25hbWVzID0gW10KKyAgICAgICAgc2VsZi5pbWFnZV9leHRlbnNpb24gPSBpbWFnZV9leHRlbnNpb24KKworICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMgb24gdGhlIGRpYWxvZworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorCisgICAgICAgIHNlbGYuaW1hZ2Vfc3RvcmUgPSBndGsuTGlzdFN0b3JlKGdvYmplY3QuVFlQRV9TVFJJTkcsIGdvYmplY3QuVFlQRV9CT09MRUFOKQorICAgICAgICBzZWxmLmZpbGxfaW1hZ2Vfc3RvcmUoKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgNikKKworICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChoYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgZW50cnkgPSBndGsuRW50cnkoKQorICAgICAgICBlbnRyeS5zZXRfdGV4dChzZWxmLmltYWdlX2ZvbGRlcikKKyAgICAgICAgdGFibGUgPSBndGsuVGFibGUoMSwgMTAsIFRydWUpCisgICAgICAgIHRhYmxlLnNldF9zaXplX3JlcXVlc3QoNTYwLCAtMSkKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHRhYmxlLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHRhYmxlLmF0dGFjaChlbnRyeSwgMCwgOSwgMCwgMSkKKyAgICAgICAgaW1hZ2UgPSBndGsuSW1hZ2UoKQorICAgICAgICBpbWFnZS5zZXRfZnJvbV9zdG9jayhndGsuU1RPQ0tfT1BFTiwgZ3RrLklDT05fU0laRV9CVVRUT04pCisgICAgICAgIG9wZW5fYnV0dG9uID0gZ3RrLkJ1dHRvbigpCisgICAgICAgIG9wZW5fYnV0dG9uLnNldF9pbWFnZShpbWFnZSkKKyAgICAgICAgb3Blbl9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuc2VsZWN0X3BhdGhfY2IsIHNlbGYsIGVudHJ5KQorICAgICAgICB0YWJsZS5hdHRhY2gob3Blbl9idXR0b24sIDksIDEwLCAwLCAxKQorCisgICAgICAgIHNlbGYuaW1hZ2VfdGFibGUgPSBIb2JWaWV3VGFibGUoc2VsZi5fX2NvbHVtbnNfXywgIkltYWdlcyIpCisgICAgICAgIHNlbGYuaW1hZ2VfdGFibGUuc2V0X3NpemVfcmVxdWVzdCgtMSwgMzAwKQorICAgICAgICBzZWxmLmltYWdlX3RhYmxlLmNvbm5lY3QoInRvZ2dsZWQiLCBzZWxmLnRvZ2dsZWRfY2IpCisgICAgICAgIHNlbGYuaW1hZ2VfdGFibGUuY29ubmVjdF9ncm91cF9zZWxlY3Rpb24oc2VsZi50YWJsZV9zZWxlY3RlZF9jYikKKyAgICAgICAgc2VsZi5pbWFnZV90YWJsZS5jb25uZWN0KCJyb3ctYWN0aXZhdGVkIiwgc2VsZi5yb3dfYWN0aXZlZF9jYikKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi5pbWFnZV90YWJsZSwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiBjaGFuZ2VfaW1hZ2VfY2Ioc2VsZiwgbW9kZWwsIHBhdGgsIGNvbHVtbmlkKToKKyAgICAgICAgaWYgbm90IG1vZGVsOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGl0ZXIgPSBtb2RlbC5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0ZXI6CisgICAgICAgICAgICByb3dwYXRoID0gbW9kZWwuZ2V0X3BhdGgoaXRlcikKKyAgICAgICAgICAgIG1vZGVsW3Jvd3BhdGhdW2NvbHVtbmlkXSA9IEZhbHNlCisgICAgICAgICAgICBpdGVyID0gbW9kZWwuaXRlcl9uZXh0KGl0ZXIpCisKKyAgICAgICAgbW9kZWxbcGF0aF1bY29sdW1uaWRdID0gVHJ1ZQorCisgICAgZGVmIHRvZ2dsZWRfY2Ioc2VsZiwgdGFibGUsIGNlbGwsIHBhdGgsIGNvbHVtbmlkLCB0cmVlKToKKyAgICAgICAgbW9kZWwgPSB0cmVlLmdldF9tb2RlbCgpCisgICAgICAgIHNlbGYuY2hhbmdlX2ltYWdlX2NiKG1vZGVsLCBwYXRoLCBjb2x1bW5pZCkKKworICAgIGRlZiB0YWJsZV9zZWxlY3RlZF9jYihzZWxmLCBzZWxlY3Rpb24pOgorICAgICAgICBtb2RlbCwgcGF0aHMgPSBzZWxlY3Rpb24uZ2V0X3NlbGVjdGVkX3Jvd3MoKQorICAgICAgICBpZiBwYXRoczoKKyAgICAgICAgICAgIHNlbGYuY2hhbmdlX2ltYWdlX2NiKG1vZGVsLCBwYXRoc1swXSwgMSkKKworICAgIGRlZiByb3dfYWN0aXZlZF9jYihzZWxmLCB0YWIsIG1vZGVsLCBwYXRoKToKKyAgICAgICAgc2VsZi5jaGFuZ2VfaW1hZ2VfY2IobW9kZWwsIHBhdGgsIDEpCisgICAgICAgIHNlbGYuZW1pdCgncmVzcG9uc2UnLCBndGsuUkVTUE9OU0VfWUVTKQorCisgICAgZGVmIHNlbGVjdF9wYXRoX2NiKHNlbGYsIGFjdGlvbiwgcGFyZW50LCBlbnRyeSk6CisgICAgICAgIGRpYWxvZyA9IGd0ay5GaWxlQ2hvb3NlckRpYWxvZygiIiwgcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkZJTEVfQ0hPT1NFUl9BQ1RJT05fU0VMRUNUX0ZPTERFUikKKyAgICAgICAgdGV4dCA9IGVudHJ5LmdldF90ZXh0KCkKKyAgICAgICAgZGlhbG9nLnNldF9jdXJyZW50X2ZvbGRlcih0ZXh0IGlmIGxlbih0ZXh0KSA+IDAgZWxzZSBvcy5nZXRjd2QoKSkKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9OTykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJPcGVuIiwgZ3RrLlJFU1BPTlNFX1lFUykKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVM6CisgICAgICAgICAgICBwYXRoID0gZGlhbG9nLmdldF9maWxlbmFtZSgpCisgICAgICAgICAgICBlbnRyeS5zZXRfdGV4dChwYXRoKQorICAgICAgICAgICAgc2VsZi5pbWFnZV9mb2xkZXIgPSBwYXRoCisgICAgICAgICAgICBzZWxmLmZpbGxfaW1hZ2Vfc3RvcmUoKQorCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgIGRlZiBmaWxsX2ltYWdlX3N0b3JlKHNlbGYpOgorICAgICAgICBzZWxmLmltYWdlX2xpc3QgPSBbXQorICAgICAgICBzZWxmLmltYWdlX3N0b3JlLmNsZWFyKCkKKyAgICAgICAgaW1hZ2VzZXQgPSBzZXQoKQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLmltYWdlX2ZvbGRlcik6CisgICAgICAgICAgICAjIGlnbm9yZSB0aGUgc3ViIGRpcmVjdG9yaWVzCisgICAgICAgICAgICBkaXJzWzpdID0gW10KKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZvciBpbWFnZV90eXBlIGluIHNlbGYuaW1hZ2VfdHlwZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIGltYWdlX3R5cGUgaW4gc2VsZi5pbWFnZV9leHRlbnNpb246CisgICAgICAgICAgICAgICAgICAgICAgICByZWFsX3R5cGVzID0gc2VsZi5pbWFnZV9leHRlbnNpb25baW1hZ2VfdHlwZV0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxfdHlwZXMgPSBbaW1hZ2VfdHlwZV0KKyAgICAgICAgICAgICAgICAgICAgZm9yIHJlYWxfaW1hZ2VfdHlwZSBpbiByZWFsX3R5cGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZi5lbmRzd2l0aCgnLicgKyByZWFsX2ltYWdlX3R5cGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc2V0LmFkZChmLnJzcGxpdCgnLicgKyByZWFsX2ltYWdlX3R5cGUpWzBdLnJzcGxpdCgnLnJvb3RmcycpWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2VfbGlzdC5hcHBlbmQoZikKKworICAgICAgICBmb3IgaW1hZ2UgaW4gaW1hZ2VzZXQ6CisgICAgICAgICAgICBzZWxmLmltYWdlX3N0b3JlLnNldChzZWxmLmltYWdlX3N0b3JlLmFwcGVuZCgpLCAwLCBpbWFnZSwgMSwgRmFsc2UpCisKKyAgICAgICAgc2VsZi5pbWFnZV90YWJsZS5zZXRfbW9kZWwoc2VsZi5pbWFnZV9zdG9yZSkKKworICAgIGRlZiByZXNwb25zZV9jYihzZWxmLCBkaWFsb2csIHJlc3BvbnNlX2lkKToKKyAgICAgICAgc2VsZi5pbWFnZV9uYW1lcyA9IFtdCisgICAgICAgIGlmIHJlc3BvbnNlX2lkID09IGd0ay5SRVNQT05TRV9ZRVM6CisgICAgICAgICAgICBpdGVyID0gc2VsZi5pbWFnZV9zdG9yZS5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgICAgICB3aGlsZSBpdGVyOgorICAgICAgICAgICAgICAgIHBhdGggPSBzZWxmLmltYWdlX3N0b3JlLmdldF9wYXRoKGl0ZXIpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5pbWFnZV9zdG9yZVtwYXRoXVsxXToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gc2VsZi5pbWFnZV9saXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZi5zdGFydHN3aXRoKHNlbGYuaW1hZ2Vfc3RvcmVbcGF0aF1bMF0gKyAnLicpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2VfbmFtZXMuYXBwZW5kKGYpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaXRlciA9IHNlbGYuaW1hZ2Vfc3RvcmUuaXRlcl9uZXh0KGl0ZXIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvbGF5ZXJzZWxlY3Rpb25kaWFsb2cucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvbGF5ZXJzZWxlY3Rpb25kaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkNTdiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9sYXllcnNlbGVjdGlvbmRpYWxvZy5weQpAQCAtMCwwICsxLDI5OCBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IGhpYywgSG9iQnV0dG9uLCBIb2JBbHRCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNkaWFsb2cgaW1wb3J0IENydW1ic0RpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic21lc3NhZ2VkaWFsb2cgaW1wb3J0IENydW1ic01lc3NhZ2VEaWFsb2cKKworIiIiCitUaGUgZm9sbG93aW5nIGFyZSBjb252ZW5pZW5jZSBjbGFzc2VzIGZvciBpbXBsZW1lbnRpbmcgR05PTUUgSElHIGNvbXBsaWFudAorQml0QmFrZSBHVUkncworSW4gc3VtbWFyeTogc3BhY2luZyA9IDEycHgsIGJvcmRlci13aWR0aCA9IDZweAorIiIiCisKK2NsYXNzIENlbGxSZW5kZXJlclBpeGJ1ZkFjdGl2YXRhYmxlKGd0ay5DZWxsUmVuZGVyZXJQaXhidWYpOgorICAgICIiIgorICAgIEEgY3VzdG9tIENlbGxSZW5kZXJlciBpbXBsZW1lbnRhdGlvbiB3aGljaCBpcyBhY3RpdmF0YWJsZQorICAgIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSB1c2VyIGNsaWNrcworICAgICIiIgorICAgIF9fZ3NpZ25hbHNfXyAgICA9IHsgJ2NsaWNrZWQnIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfU1RSSU5HLCkpLCB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGd0ay5DZWxsUmVuZGVyZXJQaXhidWYuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zZXRfcHJvcGVydHkoJ21vZGUnLCBndGsuQ0VMTF9SRU5ERVJFUl9NT0RFX0FDVElWQVRBQkxFKQorICAgICAgICBzZWxmLnNldF9wcm9wZXJ0eSgnZm9sbG93LXN0YXRlJywgVHJ1ZSkKKworICAgICIiIgorICAgIFJlc3BvbmQgdG8gYSB1c2VyIGNsaWNrIG9uIGEgY2VsbAorICAgICIiIgorICAgIGRlZiBkb19hY3RpdmF0ZShzZWxmLCBldmVuLCB3aWRnZXQsIHBhdGgsIGJhY2tncm91bmRfYXJlYSwgY2VsbF9hcmVhLCBmbGFncyk6CisgICAgICAgIHNlbGYuZW1pdCgnY2xpY2tlZCcsIHBhdGgpCisKKyMKKyMgTGF5ZXJTZWxlY3Rpb25EaWFsb2cKKyMKK2NsYXNzIExheWVyU2VsZWN0aW9uRGlhbG9nIChDcnVtYnNEaWFsb2cpOgorCisgICAgVEFSR0VUUyA9IFsKKyAgICAgICAgKCJNWV9UUkVFX01PREVMX1JPVyIsIGd0ay5UQVJHRVRfU0FNRV9XSURHRVQsIDApLAorICAgICAgICAoInRleHQvcGxhaW4iLCAwLCAxKSwKKyAgICAgICAgKCJURVhUIiwgMCwgMiksCisgICAgICAgICgiU1RSSU5HIiwgMCwgMyksCisgICAgICAgIF0KKworICAgIGRlZiBnZW5fbGFiZWxfd2lkZ2V0KHNlbGYsIGNvbnRlbnQpOgorICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMCwgMCkKKyAgICAgICAgbGFiZWwuc2V0X21hcmt1cChjb250ZW50KQorICAgICAgICBsYWJlbC5zaG93KCkKKyAgICAgICAgcmV0dXJuIGxhYmVsCisKKyAgICBkZWYgbGF5ZXJfd2lkZ2V0X3RvZ2dsZWRfY2Ioc2VsZiwgY2VsbCwgcGF0aCwgbGF5ZXJfc3RvcmUpOgorICAgICAgICBuYW1lID0gbGF5ZXJfc3RvcmVbcGF0aF1bMF0KKyAgICAgICAgdG9nZ2xlID0gbm90IGxheWVyX3N0b3JlW3BhdGhdWzFdCisgICAgICAgIGxheWVyX3N0b3JlW3BhdGhdWzFdID0gdG9nZ2xlCisKKyAgICBkZWYgbGF5ZXJfd2lkZ2V0X2FkZF9jbGlja2VkX2NiKHNlbGYsIGFjdGlvbiwgbGF5ZXJfc3RvcmUsIHBhcmVudCk6CisgICAgICAgIGRpYWxvZyA9IGd0ay5GaWxlQ2hvb3NlckRpYWxvZygiQWRkIG5ldyBsYXllciIsIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0ay5GSUxFX0NIT09TRVJfQUNUSU9OX1NFTEVDVF9GT0xERVIpCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDYW5jZWwiLCBndGsuUkVTUE9OU0VfTk8pCisgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiT3BlbiIsIGd0ay5SRVNQT05TRV9ZRVMpCisgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgiU2VsZWN0IHRoZSBsYXllciB5b3Ugd2lzaCB0byBhZGQiKQorICAgICAgICBsYWJlbC5zaG93KCkKKyAgICAgICAgZGlhbG9nLnNldF9leHRyYV93aWRnZXQobGFiZWwpCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIHBhdGggPSBkaWFsb2cuZ2V0X2ZpbGVuYW1lKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgICAgIGxibCA9ICI8Yj5FcnJvcjwvYj4iCisgICAgICAgIG1zZyA9ICJVbmFibGUgdG8gbG9hZCBsYXllciA8aT4lczwvaT4gYmVjYXVzZSAiICUgcGF0aAorICAgICAgICBpZiByZXNwb25zZSA9PSBndGsuUkVTUE9OU0VfWUVTOgorICAgICAgICAgICAgaW1wb3J0IG9zCisgICAgICAgICAgICBpbXBvcnQgb3MucGF0aAorICAgICAgICAgICAgbGF5ZXJzID0gW10KKyAgICAgICAgICAgIGl0ID0gbGF5ZXJfc3RvcmUuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICAgICAgbGF5ZXJzLmFwcGVuZChsYXllcl9zdG9yZS5nZXRfdmFsdWUoaXQsIDApKQorICAgICAgICAgICAgICAgIGl0ID0gbGF5ZXJfc3RvcmUuaXRlcl9uZXh0KGl0KQorCisgICAgICAgICAgICBpZiBub3QgcGF0aDoKKyAgICAgICAgICAgICAgICBtc2cgKz0gIml0IGlzIGFuIGludmFsaWQgcGF0aC4iCisgICAgICAgICAgICBlbGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKyIvY29uZi9sYXllci5jb25mIik6CisgICAgICAgICAgICAgICAgbXNnICs9ICJ0aGVyZSBpcyBubyBsYXllci5jb25mIGluc2lkZSB0aGUgZGlyZWN0b3J5LiIKKyAgICAgICAgICAgIGVsaWYgcGF0aCBpbiBsYXllcnM6CisgICAgICAgICAgICAgICAgbXNnICs9ICJpdCBpcyBhbHJlYWR5IGluIGxvYWRlZCBsYXllcnMuIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsYXllcl9zdG9yZS5hcHBlbmQoW3BhdGhdKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhwYXJlbnQsIGxibCwgZ3RrLk1FU1NBR0VfRVJST1IsIG1zZykKKyAgICAgICAgICAgIGRpYWxvZy5hZGRfYnV0dG9uKGd0ay5TVE9DS19DTE9TRSwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgIGRlZiBsYXllcl93aWRnZXRfZGVsX2NsaWNrZWRfY2Ioc2VsZiwgYWN0aW9uLCB0cmVlX3NlbGVjdGlvbiwgbGF5ZXJfc3RvcmUpOgorICAgICAgICBtb2RlbCwgaXRlciA9IHRyZWVfc2VsZWN0aW9uLmdldF9zZWxlY3RlZCgpCisgICAgICAgIGlmIGl0ZXI6CisgICAgICAgICAgICBsYXllcl9zdG9yZS5yZW1vdmUoaXRlcikKKworCisgICAgZGVmIGdlbl9sYXllcl93aWRnZXQoc2VsZiwgbGF5ZXJzLCBsYXllcnNfYXZhaWwsIHdpbmRvdywgdG9vbHRpcD0iIik6CisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgNikKKworICAgICAgICBsYXllcl90diA9IGd0ay5UcmVlVmlldygpCisgICAgICAgIGxheWVyX3R2LnNldF9ydWxlc19oaW50KFRydWUpCisgICAgICAgIGxheWVyX3R2LnNldF9oZWFkZXJzX3Zpc2libGUoRmFsc2UpCisgICAgICAgIHRyZWVfc2VsZWN0aW9uID0gbGF5ZXJfdHYuZ2V0X3NlbGVjdGlvbigpCisgICAgICAgIHRyZWVfc2VsZWN0aW9uLnNldF9tb2RlKGd0ay5TRUxFQ1RJT05fU0lOR0xFKQorCisgICAgICAgICMgQWxsb3cgZW5hYmxlIGRyYWcgYW5kIGRyb3Agb2Ygcm93cyBpbmNsdWRpbmcgcm93IG1vdmUKKyAgICAgICAgZG5kX2ludGVybmFsX3RhcmdldCA9ICcnCisgICAgICAgIGRuZF90YXJnZXRzID0gWyhkbmRfaW50ZXJuYWxfdGFyZ2V0LCBndGsuVEFSR0VUX1NBTUVfV0lER0VULCAwKV0KKyAgICAgICAgbGF5ZXJfdHYuZW5hYmxlX21vZGVsX2RyYWdfc291cmNlKCBndGsuZ2RrLkJVVFRPTjFfTUFTSywKKyAgICAgICAgICAgIGRuZF90YXJnZXRzLAorICAgICAgICAgICAgZ3RrLmdkay5BQ1RJT05fTU9WRSkKKyAgICAgICAgbGF5ZXJfdHYuZW5hYmxlX21vZGVsX2RyYWdfZGVzdChkbmRfdGFyZ2V0cywKKyAgICAgICAgICAgIGd0ay5nZGsuQUNUSU9OX01PVkUpCisgICAgICAgIGxheWVyX3R2LmNvbm5lY3QoImRyYWdfZGF0YV9nZXQiLCBzZWxmLmRyYWdfZGF0YV9nZXRfY2IpCisgICAgICAgIGxheWVyX3R2LmNvbm5lY3QoImRyYWdfZGF0YV9yZWNlaXZlZCIsIHNlbGYuZHJhZ19kYXRhX3JlY2VpdmVkX2NiKQorCisgICAgICAgIGNvbDA9IGd0ay5UcmVlVmlld0NvbHVtbignUGF0aCcpCisgICAgICAgIGNlbGwwID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorICAgICAgICBjZWxsMC5zZXRfcGFkZGluZyg1LDIpCisgICAgICAgIGNvbDAucGFja19zdGFydChjZWxsMCwgVHJ1ZSkKKyAgICAgICAgY29sMC5zZXRfY2VsbF9kYXRhX2Z1bmMoY2VsbDAsIHNlbGYuZHJhd19sYXllcl9wYXRoX2NiKQorICAgICAgICBsYXllcl90di5hcHBlbmRfY29sdW1uKGNvbDApCisKKyAgICAgICAgc2Nyb2xsID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgc2Nyb2xsLnNldF9wb2xpY3koZ3RrLlBPTElDWV9ORVZFUiwgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisgICAgICAgIHNjcm9sbC5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKyAgICAgICAgc2Nyb2xsLmFkZChsYXllcl90dikKKworICAgICAgICB0YWJsZV9sYXllciA9IGd0ay5UYWJsZSgyLCAxMCwgRmFsc2UpCisgICAgICAgIGhib3gucGFja19zdGFydCh0YWJsZV9sYXllciwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICB0YWJsZV9sYXllci5hdHRhY2goc2Nyb2xsLCAwLCAxMCwgMCwgMSkKKworICAgICAgICBsYXllcl9zdG9yZSA9IGd0ay5MaXN0U3RvcmUoZ29iamVjdC5UWVBFX1NUUklORykKKyAgICAgICAgZm9yIGxheWVyIGluIGxheWVyczoKKyAgICAgICAgICAgIGxheWVyX3N0b3JlLmFwcGVuZChbbGF5ZXJdKQorCisgICAgICAgIGNvbDEgPSBndGsuVHJlZVZpZXdDb2x1bW4oJ0VuYWJsZWQnKQorICAgICAgICBsYXllcl90di5hcHBlbmRfY29sdW1uKGNvbDEpCisKKyAgICAgICAgY2VsbDEgPSBDZWxsUmVuZGVyZXJQaXhidWZBY3RpdmF0YWJsZSgpCisgICAgICAgIGNlbGwxLnNldF9maXhlZF9zaXplKC0xLDM1KQorICAgICAgICBjZWxsMS5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5kZWxfY2VsbF9jbGlja2VkX2NiLCBsYXllcl9zdG9yZSkKKyAgICAgICAgY29sMS5wYWNrX3N0YXJ0KGNlbGwxLCBUcnVlKQorICAgICAgICBjb2wxLnNldF9jZWxsX2RhdGFfZnVuYyhjZWxsMSwgc2VsZi5kcmF3X2RlbGV0ZV9idXR0b25fY2IsIGxheWVyX3R2KQorCisgICAgICAgIGFkZF9idXR0b24gPSBndGsuQnV0dG9uKCkKKyAgICAgICAgYWRkX2J1dHRvbi5zZXRfcmVsaWVmKGd0ay5SRUxJRUZfTk9ORSkKKyAgICAgICAgYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCisgICAgICAgIGJveC5zaG93KCkKKyAgICAgICAgYWRkX2J1dHRvbi5hZGQoYm94KQorICAgICAgICBhZGRfYnV0dG9uLmNvbm5lY3QoImVudGVyLW5vdGlmeS1ldmVudCIsIHNlbGYuYWRkX2hvdmVyX2NiKQorICAgICAgICBhZGRfYnV0dG9uLmNvbm5lY3QoImxlYXZlLW5vdGlmeS1ldmVudCIsIHNlbGYuYWRkX2xlYXZlX2NiKQorICAgICAgICBzZWxmLmltID0gZ3RrLkltYWdlKCkKKyAgICAgICAgc2VsZi5pbS5zZXRfZnJvbV9maWxlKGhpYy5JQ09OX0lORElfQUREX0ZJTEUpCisgICAgICAgIHNlbGYuaW0uc2hvdygpCisgICAgICAgIGJveC5wYWNrX3N0YXJ0KHNlbGYuaW0sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz02KQorICAgICAgICBsYmwgPSBndGsuTGFiZWwoIkFkZCBsYXllciIpCisgICAgICAgIGxibC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBsYmwuc2hvdygpCisgICAgICAgIGJveC5wYWNrX3N0YXJ0KGxibCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSwgcGFkZGluZz02KQorICAgICAgICBhZGRfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmxheWVyX3dpZGdldF9hZGRfY2xpY2tlZF9jYiwgbGF5ZXJfc3RvcmUsIHdpbmRvdykKKyAgICAgICAgdGFibGVfbGF5ZXIuYXR0YWNoKGFkZF9idXR0b24sIDAsIDEwLCAxLCAyLCBndGsuRVhQQU5EIHwgZ3RrLkZJTEwsIDAsIDAsIDYpCisgICAgICAgIGxheWVyX3R2LnNldF9tb2RlbChsYXllcl9zdG9yZSkKKworICAgICAgICBoYm94LnNob3dfYWxsKCkKKworICAgICAgICByZXR1cm4gaGJveCwgbGF5ZXJfc3RvcmUKKworICAgIGRlZiBkcmFnX2RhdGFfZ2V0X2NiKHNlbGYsIHRyZWV2aWV3LCBjb250ZXh0LCBzZWxlY3Rpb24sIHRhcmdldF9pZCwgZXRpbWUpOgorICAgICAgICB0cmVlc2VsZWN0aW9uID0gdHJlZXZpZXcuZ2V0X3NlbGVjdGlvbigpCisgICAgICAgIG1vZGVsLCBpdGVyID0gdHJlZXNlbGVjdGlvbi5nZXRfc2VsZWN0ZWQoKQorICAgICAgICBkYXRhID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIsIDApCisgICAgICAgIHNlbGVjdGlvbi5zZXQoc2VsZWN0aW9uLnRhcmdldCwgOCwgZGF0YSkKKworICAgIGRlZiBkcmFnX2RhdGFfcmVjZWl2ZWRfY2Ioc2VsZiwgdHJlZXZpZXcsIGNvbnRleHQsIHgsIHksIHNlbGVjdGlvbiwgaW5mbywgZXRpbWUpOgorICAgICAgICBtb2RlbCA9IHRyZWV2aWV3LmdldF9tb2RlbCgpCisgICAgICAgIGRhdGEgPSBzZWxlY3Rpb24uZGF0YQorICAgICAgICBkcm9wX2luZm8gPSB0cmVldmlldy5nZXRfZGVzdF9yb3dfYXRfcG9zKHgsIHkpCisgICAgICAgIGlmIGRyb3BfaW5mbzoKKyAgICAgICAgICAgIHBhdGgsIHBvc2l0aW9uID0gZHJvcF9pbmZvCisgICAgICAgICAgICBpdGVyID0gbW9kZWwuZ2V0X2l0ZXIocGF0aCkKKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBndGsuVFJFRV9WSUVXX0RST1BfQkVGT1JFIG9yIHBvc2l0aW9uID09IGd0ay5UUkVFX1ZJRVdfRFJPUF9JTlRPX09SX0JFRk9SRSk6CisgICAgICAgICAgICAgICAgbW9kZWwuaW5zZXJ0X2JlZm9yZShpdGVyLCBbZGF0YV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1vZGVsLmluc2VydF9hZnRlcihpdGVyLCBbZGF0YV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2RlbC5hcHBlbmQoW2RhdGFdKQorICAgICAgICBpZiBjb250ZXh0LmFjdGlvbiA9PSBndGsuZ2RrLkFDVElPTl9NT1ZFOgorICAgICAgICAgICAgY29udGV4dC5maW5pc2goVHJ1ZSwgVHJ1ZSwgZXRpbWUpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGFkZF9ob3Zlcl9jYihzZWxmLCBidXR0b24sIGV2ZW50KToKKyAgICAgICAgc2VsZi5pbS5zZXRfZnJvbV9maWxlKGhpYy5JQ09OX0lORElfQUREX0hPVkVSX0ZJTEUpCisKKyAgICBkZWYgYWRkX2xlYXZlX2NiKHNlbGYsIGJ1dHRvbiwgZXZlbnQpOgorICAgICAgICBzZWxmLmltLnNldF9mcm9tX2ZpbGUoaGljLklDT05fSU5ESV9BRERfRklMRSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZSwgbGF5ZXJzLCBsYXllcnNfbm9uX3JlbW92YWJsZSwgYWxsX2xheWVycywgcGFyZW50LCBmbGFncywgYnV0dG9ucz1Ob25lKToKKyAgICAgICAgc3VwZXIoTGF5ZXJTZWxlY3Rpb25EaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorCisgICAgICAgICMgY2xhc3MgbWVtYmVycyBmcm9tIG90aGVyIG9iamVjdHMKKyAgICAgICAgc2VsZi5sYXllcnMgPSBsYXllcnMKKyAgICAgICAgc2VsZi5sYXllcnNfbm9uX3JlbW92YWJsZSA9IGxheWVyc19ub25fcmVtb3ZhYmxlCisgICAgICAgIHNlbGYuYWxsX2xheWVycyA9IGFsbF9sYXllcnMKKyAgICAgICAgc2VsZi5sYXllcnNfY2hhbmdlZCA9IEZhbHNlCisKKyAgICAgICAgIyBpY29uIGZvciByZW1vdmUgYnV0dG9uIGluIFRyZWVWaWV3CisgICAgICAgIGltID0gZ3RrLkltYWdlKCkKKyAgICAgICAgaW0uc2V0X2Zyb21fZmlsZShoaWMuSUNPTl9JTkRJX1JFTU9WRV9GSUxFKQorICAgICAgICBzZWxmLnJlbV9pY29uID0gaW0uZ2V0X3BpeGJ1ZigpCisKKyAgICAgICAgIyBjbGFzcyBtZW1iZXJzIGZvciBpbnRlcm5hbCB1c2UKKyAgICAgICAgc2VsZi5sYXllcl9zdG9yZSA9IE5vbmUKKworICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMgb24gdGhlIGRpYWxvZworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorICAgICAgICBzZWxmLmNvbm5lY3QoInJlc3BvbnNlIiwgc2VsZi5yZXNwb25zZV9jYikKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICBsYXllcl93aWRnZXQsIHNlbGYubGF5ZXJfc3RvcmUgPSBzZWxmLmdlbl9sYXllcl93aWRnZXQoc2VsZi5sYXllcnMsIHNlbGYuYWxsX2xheWVycywgc2VsZiwgTm9uZSkKKyAgICAgICAgbGF5ZXJfd2lkZ2V0LnNldF9zaXplX3JlcXVlc3QoNDUwLCAyNTApCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KGxheWVyX3dpZGdldCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICBkZWYgcmVzcG9uc2VfY2Ioc2VsZiwgZGlhbG9nLCByZXNwb25zZV9pZCk6CisgICAgICAgIG1vZGVsID0gc2VsZi5sYXllcl9zdG9yZQorICAgICAgICBpdCA9IG1vZGVsLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgbGF5ZXJzID0gW10KKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBsYXllcnMuYXBwZW5kKG1vZGVsLmdldF92YWx1ZShpdCwgMCkpCisgICAgICAgICAgICBpdCA9IG1vZGVsLml0ZXJfbmV4dChpdCkKKworICAgICAgICBzZWxmLmxheWVyc19jaGFuZ2VkID0gKHNlbGYubGF5ZXJzICE9IGxheWVycykKKyAgICAgICAgc2VsZi5sYXllcnMgPSBsYXllcnMKKworICAgICIiIgorICAgIEEgY3VzdG9tIGNlbGxfZGF0YV9mdW5jIHRvIGRyYXcgYSBkZWxldGUgJ2J1dHRvbicgaW4gdGhlIFRyZWVWaWV3IGZvciBsYXllcnMKKyAgICBvdGhlciB0aGFuIHRoZSBtZXRhIGxheWVyLiBUaGUgZGVsZXRpb24gb2Ygd2hpY2ggaXMgcHJldmVudGVkIHNvIHRoYXQgdGhlCisgICAgdXNlciBjYW4ndCBzaG9vdCB0aGVtc2VsdmVzIGluIHRoZSBmb290IHRvbyBiYWRseS4KKyAgICAiIiIKKyAgICBkZWYgZHJhd19kZWxldGVfYnV0dG9uX2NiKHNlbGYsIGNvbCwgY2VsbCwgbW9kZWwsIGl0LCB0dik6CisgICAgICAgIHBhdGggPSAgbW9kZWwuZ2V0X3ZhbHVlKGl0LCAwKQorICAgICAgICBpZiBwYXRoIGluIHNlbGYubGF5ZXJzX25vbl9yZW1vdmFibGU6CisgICAgICAgICAgICBjZWxsLnNldF9zZW5zaXRpdmUoRmFsc2UpCisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgncGl4YnVmJywgTm9uZSkKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCdtb2RlJywgZ3RrLkNFTExfUkVOREVSRVJfTU9ERV9JTkVSVCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCdwaXhidWYnLCBzZWxmLnJlbV9pY29uKQorICAgICAgICAgICAgY2VsbC5zZXRfc2Vuc2l0aXZlKFRydWUpCisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgnbW9kZScsIGd0ay5DRUxMX1JFTkRFUkVSX01PREVfQUNUSVZBVEFCTEUpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICIiIgorICAgIEEgY3VzdG9tIGNlbGxfZGF0YV9mdW5jIHRvIHdyaXRlIGFuIGV4dHJhIG1lc3NhZ2UgaW50byB0aGUgbGF5ZXIgcGF0aCBjZWxsCisgICAgZm9yIHRoZSBtZXRhIGxheWVyLiBXZSBzaG91bGQgaW5mb3JtIHRoZSB1c2VyIHRoYXQgdGhleSBjYW4ndCByZW1vdmUgaXQgZm9yCisgICAgdGhlaXIgb3duIHNhZmV0eS4KKyAgICAiIiIKKyAgICBkZWYgZHJhd19sYXllcl9wYXRoX2NiKHNlbGYsIGNvbCwgY2VsbCwgbW9kZWwsIGl0KToKKyAgICAgICAgcGF0aCA9IG1vZGVsLmdldF92YWx1ZShpdCwgMCkKKyAgICAgICAgaWYgcGF0aCBpbiBzZWxmLmxheWVyc19ub25fcmVtb3ZhYmxlOgorICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ21hcmt1cCcsICI8Yj5JdCBjYW5ub3QgYmUgcmVtb3ZlZDwvYj5cbiVzIiAlIHBhdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgndGV4dCcsIHBhdGgpCisKKyAgICBkZWYgZGVsX2NlbGxfY2xpY2tlZF9jYihzZWxmLCBjZWxsLCBwYXRoLCBtb2RlbCk6CisgICAgICAgIGl0ID0gbW9kZWwuZ2V0X2l0ZXJfZnJvbV9zdHJpbmcocGF0aCkKKyAgICAgICAgbW9kZWwucmVtb3ZlKGl0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3BhcnNpbmd3YXJuaW5nc2RpYWxvZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9wYXJzaW5nd2FybmluZ3NkaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNiYWMzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9wYXJzaW5nd2FybmluZ3NkaWFsb2cucHkKQEAgLTAsMCArMSwxNjMgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgQ3Jpc3RpYW5hIFZvaWN1IDxjcmlzdGlhbmEudm9pY3VAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IGdvYmplY3QKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iQWx0QnV0dG9uCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzZGlhbG9nIGltcG9ydCBDcnVtYnNEaWFsb2cKKworIiIiCitUaGUgZm9sbG93aW5nIGFyZSBjb252ZW5pZW5jZSBjbGFzc2VzIGZvciBpbXBsZW1lbnRpbmcgR05PTUUgSElHIGNvbXBsaWFudAorQml0QmFrZSBHVUkncworSW4gc3VtbWFyeTogc3BhY2luZyA9IDEycHgsIGJvcmRlci13aWR0aCA9IDZweAorIiIiCisKKyMKKyMgUGFyc2luZ1dhcm5pbmdzRGlhbG9nCisjCitjbGFzcyBQYXJzaW5nV2FybmluZ3NEaWFsb2cgKENydW1ic0RpYWxvZyk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIHdhcm5pbmdzLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zPU5vbmUpOgorICAgICAgICBzdXBlcihQYXJzaW5nV2FybmluZ3NEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorCisgICAgICAgIHNlbGYud2FybmluZ3MgPSB3YXJuaW5ncworICAgICAgICBzZWxmLndhcm5pbmdfb24gPSAwCisgICAgICAgIHNlbGYud2Fybl9uYiA9IGxlbih3YXJuaW5ncykKKworICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMgb24gdGhlIGRpYWxvZworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorCisgICAgZGVmIGNhbmNlbF9idXR0b25fY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5kZXN0cm95KCkKKworICAgIGRlZiBwcmV2aW91c19idXR0b25fY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi53YXJuaW5nX29uID0gc2VsZi53YXJuaW5nX29uIC0gMQorICAgICAgICBzZWxmLnJlZnJlc2hfY29tcG9uZW50cygpCisKKyAgICBkZWYgbmV4dF9idXR0b25fY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi53YXJuaW5nX29uID0gc2VsZi53YXJuaW5nX29uICsgMQorICAgICAgICBzZWxmLnJlZnJlc2hfY29tcG9uZW50cygpCisKKyAgICBkZWYgcmVmcmVzaF9jb21wb25lbnRzKHNlbGYpOgorICAgICAgICBsYmwgPSBzZWxmLndhcm5pbmdzW3NlbGYud2FybmluZ19vbl0KKyAgICAgICAgI3doZW4gdGhlIHdhcm5pbmcgdGV4dCBoYXMgbW9yZSB0aGFuIDQwMCBjaGFycywgaXQgdXNlcyBhIHNjcm9sbCBiYXIKKyAgICAgICAgaWYgMDw9IGxlbihsYmwpIDwgNDAwOgorICAgICAgICAgICAgc2VsZi53YXJuaW5nX2xhYmVsLnNldF9zaXplX3JlcXVlc3QoMzIwLCAyMzApCisgICAgICAgICAgICBzZWxmLndhcm5pbmdfbGFiZWwuc2V0X3VzZV9tYXJrdXAoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYud2FybmluZ19sYWJlbC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICBzZWxmLndhcm5pbmdfbGFiZWwuc2V0X21hcmt1cChsYmwpCisgICAgICAgICAgICBzZWxmLndhcm5pbmdfbGFiZWwuc2V0X3Byb3BlcnR5KCJ5YWxpZ24iLCAwLjAwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93LnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93LnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3ID0gZ3RrLlRleHRWaWV3KCkKKyAgICAgICAgICAgIHNlbGYubXNnVmlldy5zZXRfZWRpdGFibGUoRmFsc2UpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcuc2V0X3dyYXBfbW9kZShndGsuV1JBUF9XT1JEKQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3LnNldF9jdXJzb3JfdmlzaWJsZShGYWxzZSkKKyAgICAgICAgICAgIHNlbGYubXNnVmlldy5zZXRfc2l6ZV9yZXF1ZXN0KDMyMCwgMjMwKQorICAgICAgICAgICAgc2VsZi5idWYgPSBndGsuVGV4dEJ1ZmZlcigpCisgICAgICAgICAgICBzZWxmLmJ1Zi5zZXRfdGV4dChsYmwpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcuc2V0X2J1ZmZlcihzZWxmLmJ1ZikKKyAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5hZGQoc2VsZi5tc2dWaWV3KQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3LnNob3coKQorCisgICAgICAgIGlmIHNlbGYud2FybmluZ19vbj09MDoKKyAgICAgICAgICAgIHNlbGYucHJldmlvdXNfYnV0dG9uLnNldF9zZW5zaXRpdmUoRmFsc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnByZXZpb3VzX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKFRydWUpCisKKyAgICAgICAgaWYgc2VsZi53YXJuaW5nX29uPT1zZWxmLndhcm5fbmItMToKKyAgICAgICAgICAgIHNlbGYubmV4dF9idXR0b24uc2V0X3NlbnNpdGl2ZShGYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubmV4dF9idXR0b24uc2V0X3NlbnNpdGl2ZShUcnVlKQorCisgICAgICAgIGlmIHNlbGYud2Fybl9uYj4xOgorICAgICAgICAgICAgc2VsZi5oZWFkaW5nID0gIldhcm5pbmcgIiArIHN0cihzZWxmLndhcm5pbmdfb24gKyAxKSArICIgb2YgIiArIHN0cihzZWxmLndhcm5fbmIpCisgICAgICAgICAgICBzZWxmLmhlYWRpbmdfbGFiZWwuc2V0X21hcmt1cCgnPHNwYW4gd2VpZ2h0PSJib2xkIj4lczwvc3Bhbj4nICUgc2VsZi5oZWFkaW5nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5oZWFkaW5nID0gIldhcm5pbmciCisgICAgICAgICAgICBzZWxmLmhlYWRpbmdfbGFiZWwuc2V0X21hcmt1cCgnPHNwYW4gd2VpZ2h0PSJib2xkIj4lczwvc3Bhbj4nICUgc2VsZi5oZWFkaW5nKQorCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgICAgIGlmIDA8PSBsZW4obGJsKSA8IDQwMDoKKyAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5oaWRlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYud2FybmluZ19sYWJlbC5oaWRlKCkKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLnNldF9zaXplX3JlcXVlc3QoMzUwLCAzNTApCisgICAgICAgIHNlbGYuaGVhZGluZ19sYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIHNlbGYuaGVhZGluZ19sYWJlbC5zZXRfYWxpZ25tZW50KDAsIDApCisgICAgICAgIHNlbGYud2FybmluZ19sYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIHNlbGYud2FybmluZ19sYWJlbC5zZXRfc2VsZWN0YWJsZShUcnVlKQorICAgICAgICBzZWxmLndhcm5pbmdfbGFiZWwuc2V0X2FsaWdubWVudCgwLCAwKQorICAgICAgICBzZWxmLnRleHRXaW5kb3cgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorCisgICAgICAgIHRhYmxlID0gZ3RrLlRhYmxlKDEsIDEwLCBGYWxzZSkKKworICAgICAgICBjYW5jZWxfYnV0dG9uID0gZ3RrLkJ1dHRvbigpCisgICAgICAgIGNhbmNlbF9idXR0b24uc2V0X2xhYmVsKCJDbG9zZSIpCisgICAgICAgIGNhbmNlbF9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuY2FuY2VsX2J1dHRvbl9jYikKKyAgICAgICAgY2FuY2VsX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDExMCwgMzApCisKKyAgICAgICAgc2VsZi5wcmV2aW91c19idXR0b24gPSBndGsuQnV0dG9uKCkKKyAgICAgICAgaW1hZ2UxID0gZ3RrLmltYWdlX25ld19mcm9tX3N0b2NrKGd0ay5TVE9DS19HT19CQUNLLCBndGsuSUNPTl9TSVpFX0JVVFRPTikKKyAgICAgICAgaW1hZ2UxLnNob3coKQorICAgICAgICBib3ggPSBndGsuSEJveChGYWxzZSwgNikKKyAgICAgICAgYm94LnNob3coKQorICAgICAgICBzZWxmLnByZXZpb3VzX2J1dHRvbi5hZGQoYm94KQorICAgICAgICBsYmwgPSBndGsuTGFiZWwoIlByZXZpb3VzIikKKyAgICAgICAgbGJsLnNob3coKQorICAgICAgICBib3gucGFja19zdGFydChpbWFnZTEsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz0zKQorICAgICAgICBib3gucGFja19zdGFydChsYmwsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUsIHBhZGRpbmc9MykKKyAgICAgICAgc2VsZi5wcmV2aW91c19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYucHJldmlvdXNfYnV0dG9uX2NiKQorICAgICAgICBzZWxmLnByZXZpb3VzX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDExMCwgMzApCisKKyAgICAgICAgc2VsZi5uZXh0X2J1dHRvbiA9IGd0ay5CdXR0b24oKQorICAgICAgICBpbWFnZTIgPSBndGsuaW1hZ2VfbmV3X2Zyb21fc3RvY2soZ3RrLlNUT0NLX0dPX0ZPUldBUkQsIGd0ay5JQ09OX1NJWkVfQlVUVE9OKQorICAgICAgICBpbWFnZTIuc2hvdygpCisgICAgICAgIGJveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICBib3guc2hvdygpCisgICAgICAgIHNlbGYubmV4dF9idXR0b24uYWRkKGJveCkKKyAgICAgICAgbGJsID0gZ3RrLkxhYmVsKCJOZXh0IikKKyAgICAgICAgbGJsLnNob3coKQorICAgICAgICBib3gucGFja19zdGFydChsYmwsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUsIHBhZGRpbmc9MykKKyAgICAgICAgYm94LnBhY2tfc3RhcnQoaW1hZ2UyLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UsIHBhZGRpbmc9MykKKyAgICAgICAgc2VsZi5uZXh0X2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5uZXh0X2J1dHRvbl9jYikKKyAgICAgICAgc2VsZi5uZXh0X2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDExMCwgMzApCisKKyAgICAgICAgI3doZW4gdGhlcmUgbW9yZSB0aGFuIG9uZSB3YXJuaW5nLCB3ZSBuZWVkICJwcmV2aW91cyIgYW5kICJuZXh0IiBidXR0b24KKyAgICAgICAgaWYgc2VsZi53YXJuX25iPjE6CisgICAgICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLmhlYWRpbmdfbGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYud2FybmluZ19sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi50ZXh0V2luZG93LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgICAgICB0YWJsZS5hdHRhY2goY2FuY2VsX2J1dHRvbiwgNiwgNywgMCwgMSwgeG9wdGlvbnM9Z3RrLlNIUklOSykKKyAgICAgICAgICAgIHRhYmxlLmF0dGFjaChzZWxmLnByZXZpb3VzX2J1dHRvbiwgNywgOCwgMCwgMSwgeG9wdGlvbnM9Z3RrLlNIUklOSykKKyAgICAgICAgICAgIHRhYmxlLmF0dGFjaChzZWxmLm5leHRfYnV0dG9uLCA4LCA5LCAwLCAxLCB4b3B0aW9ucz1ndGsuU0hSSU5LKQorICAgICAgICAgICAgc2VsZi52Ym94LnBhY2tfZW5kKHRhYmxlLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLmhlYWRpbmdfbGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYud2FybmluZ19sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi50ZXh0V2luZG93LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgICAgICBjYW5jZWxfYnV0dG9uID0gc2VsZi5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9DQU5DRUwpCisgICAgICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGNhbmNlbF9idXR0b24pCisKKyAgICAgICAgc2VsZi5yZWZyZXNoX2NvbXBvbmVudHMoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3Byb3BlcnR5ZGlhbG9nLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3Byb3BlcnR5ZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YjljZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvcHJvcGVydHlkaWFsb2cucHkKQEAgLTAsMCArMSw0MzcgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEzICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgQW5kcmVpIERpbnUgPGFuZHJlaS5hZHJpYW54LmRpbnVAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN0cmluZworaW1wb3J0IGd0aworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgZ2xpYgorZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic2RpYWxvZyBpbXBvcnQgQ3J1bWJzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuc2V0dGluZ3N1aWhlbHBlciBpbXBvcnQgU2V0dGluZ3NVSUhlbHBlcgorZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic21lc3NhZ2VkaWFsb2cgaW1wb3J0IENydW1ic01lc3NhZ2VEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5sYXllcnNlbGVjdGlvbmRpYWxvZyBpbXBvcnQgTGF5ZXJTZWxlY3Rpb25EaWFsb2cKKworIiIiCitUaGUgZm9sbG93aW5nIGFyZSBjb252ZW5pZW5jZSBjbGFzc2VzIGZvciBpbXBsZW1lbnRpbmcgR05PTUUgSElHIGNvbXBsaWFudAorQml0QmFrZSBHVUkncworSW4gc3VtbWFyeTogc3BhY2luZyA9IDEycHgsIGJvcmRlci13aWR0aCA9IDZweAorIiIiCisKK2NsYXNzIFByb3BlcnR5RGlhbG9nKENydW1ic0RpYWxvZyk6CisJCisJZGVmIF9faW5pdF9fKHNlbGYsIHRpdGxlLCBwYXJlbnQsIGluZm9ybWF0aW9uLCBmbGFncywgYnV0dG9ucz1Ob25lKToKKwkJCisJCXN1cGVyKFByb3BlcnR5RGlhbG9nLCBzZWxmKS5fX2luaXRfXyh0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucykKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLnByb3BlcnRpZXMgPSBpbmZvcm1hdGlvbgorCisgICAgICAgICAgICAgICAgaWYgbGVuKHNlbGYucHJvcGVydGllcykgPT0gMTA6CisJCSAgICAgICAgc2VsZi5jcmVhdGVfcmVjaXBlX3Zpc3VhbF9lbGVtZW50cygpCisgICAgICAgICAgICAgICAgZWxpZiBsZW4oc2VsZi5wcm9wZXJ0aWVzKSA9PSA1OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVfcGFja2FnZV92aXN1YWxfZWxlbWVudHMoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZV9pbmZvcm1hdGlvbl92aXN1YWxfZWxlbWVudHMoKQorCisKKyAgICAgICAgZGVmIGNyZWF0ZV9pbmZvcm1hdGlvbl92aXN1YWxfZWxlbWVudHMoc2VsZik6CisKKyAgICAgICAgICAgICAgICBIT0JfSUNPTl9CQVNFX0RJUiA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpKSwgKCJpY29ucy8iKSkKKyAgICAgICAgICAgICAgICBJQ09OX1BBQ0tBR0VTX0RJU1BMQVlfRklMRSAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmZvL2luZm9fZGlzcGxheS5wbmcnKSkKKworICAgICAgICAgICAgICAgIHNlbGYuc2V0X3Jlc2l6YWJsZShGYWxzZSkKKworICAgICAgICAgICAgICAgIHNlbGYudGFibGUgPSBndGsuVGFibGUoMSwxLEZhbHNlKQorICAgICAgICAgICAgICAgIHNlbGYudGFibGUuc2V0X3Jvd19zcGFjaW5ncygwKQorICAgICAgICAgICAgICAgIHNlbGYudGFibGUuc2V0X2NvbF9zcGFjaW5ncygwKQorCisgICAgICAgICAgICAgICAgc2VsZi5pbWFnZSA9IGd0ay5JbWFnZSgpCisgICAgICAgICAgICAgICAgc2VsZi5pbWFnZS5zZXRfZnJvbV9maWxlKElDT05fUEFDS0FHRVNfRElTUExBWV9GSUxFKQorICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2Uuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLDApCisgICAgICAgICAgICAgICAgI3NlbGYudmJveC5hZGQoc2VsZi5pbWFnZSkKKworICAgICAgICAgICAgICAgIGltYWdlX2luZm8gPSBzZWxmLnByb3BlcnRpZXMuc3BsaXQoIioiKVswXQorICAgICAgICAgICAgICAgIGluZm8gPSBzZWxmLnByb3BlcnRpZXMuc3BsaXQoIioiKVsxXQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHZib3ggPSBndGsuVkJveChUcnVlLCBzcGFjaW5nPTMwKSAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKEZhbHNlKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cChpbWFnZV9pbmZvKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorCisgICAgICAgICAgICAgICAgc2VsZi5pbmZvX2xhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmluZm9fbGFiZWwuc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYuaW5mb19sYWJlbC5zZXRfbWFya3VwKGluZm8pCisgICAgICAgICAgICAgICAgc2VsZi5pbmZvX2xhYmVsLnNldF9wcm9wZXJ0eSgieWFsaWduIiwgMC41KQorCisgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5hdHRhY2goc2VsZi5pbWFnZSwgMCwxLDAsMSwgeG9wdGlvbnM9Z3RrLkZJTEx8Z3RrLkVYUEFORCwgeW9wdGlvbnM9Z3RrLkZJTEwseHBhZGRpbmc9NSx5cGFkZGluZz01KQorICAgICAgICAgICAgICAgIHNlbGYudGFibGUuYXR0YWNoKHNlbGYubGFiZWxfc2hvcnQsIDAsMSwwLDEsIHhvcHRpb25zPWd0ay5GSUxMfGd0ay5FWFBBTkQsIHlvcHRpb25zPWd0ay5GSUxMLHhwYWRkaW5nPTQwLHlwYWRkaW5nPTUpCisgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5hdHRhY2goc2VsZi5pbmZvX2xhYmVsLCAwLDEsMSwyLCB4b3B0aW9ucz1ndGsuRklMTHxndGsuRVhQQU5ELCB5b3B0aW9ucz1ndGsuRklMTCx4cGFkZGluZz00MCx5cGFkZGluZz0xMCkKKyAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLnRhYmxlKQorICAgICAgICAgICAgICAgIHNlbGYuY29ubmVjdCgnZGVsZXRlLWV2ZW50JywgbGFtYmRhIHcsIGU6IHNlbGYuZGVzdHJveSgpIG9yIFRydWUpIAorCisgICAgICAgIGRlZiB0cmVlVmlld1Rvb2x0aXAoIHNlbGYsIHdpZGdldCwgZSwgdG9vbHRpcHMsIGNlbGwsIGVtcHR5VGV4dD0iIiApOgorICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0aCxjb2wseCx5KSA9IHdpZGdldC5nZXRfcGF0aF9hdF9wb3MoIGludChlLngpLCBpbnQoZS55KSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCA9IHdpZGdldC5nZXRfbW9kZWwoKS5nZXRfaXRlcihwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB3aWRnZXQuZ2V0X21vZGVsKCkuZ2V0X3ZhbHVlKGl0LGNlbGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmLnRvb2x0aXBfaXRlbXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBzLnNldF90aXAod2lkZ2V0LCBzZWxmLnRvb2x0aXBfaXRlbXNbdmFsdWVdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwcy5lbmFibGUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcHMuc2V0X3RpcCh3aWRnZXQsIGVtcHR5VGV4dCkKKyAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcHMuc2V0X3RpcCh3aWRnZXQsIGVtcHR5VGV4dCkKKworICAgICAgICAgICAgICAgIAorICAgICAgICBkZWYgY3JlYXRlX3BhY2thZ2VfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorCisgICAgICAgICAgICAgICAgaW1wb3J0IGpzb24KKworICAgICAgICAgICAgICAgIG5hbWUgPSBzZWxmLnByb3BlcnRpZXNbJ25hbWUnXQorICAgICAgICAgICAgICAgIGJpbmIgPSBzZWxmLnByb3BlcnRpZXNbJ2JpbmInXQorICAgICAgICAgICAgICAgIHNpemUgPSBzZWxmLnByb3BlcnRpZXNbJ3NpemUnXQorICAgICAgICAgICAgICAgIHJlY2lwZSA9IHNlbGYucHJvcGVydGllc1sncmVjaXBlJ10KKyAgICAgICAgICAgICAgICBmaWxlX2xpc3QgPSBqc29uLmxvYWRzKHNlbGYucHJvcGVydGllc1snZmlsZXNfbGlzdCddKQorCisgICAgICAgICAgICAgICAgZmlsZXNfdGVtcCA9ICcnCisgICAgICAgICAgICAgICAgcGF0aHNfdGVtcCA9ICcnCisgICAgICAgICAgICAgICAgZmlsZXNfYmluYiA9IFtdCisgICAgICAgICAgICAgICAgcGF0aHNfYmluYiA9IFtdCisKKyAgICAgICAgICAgICAgICBzZWxmLnRvb2x0aXBfaXRlbXMgPSB7fQorCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfcmVzaXphYmxlKEZhbHNlKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICNjbGVhbmluZyBvdXQgdGhlIHJlY2lwZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgIHJlY2lwZSA9IHJlY2lwZS5zcGxpdCgiKyIpWzBdCisKKyAgICAgICAgICAgICAgICB2Ym94ID0gZ3RrLlZCb3goVHJ1ZSxzcGFjaW5nID0gMCkKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE5BTUUgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2l6ZV9yZXF1ZXN0KDMwMCwtMSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+TmFtZTogPC9zcGFuPiIgKyBuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfc2hvcnQpCisKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBTSVpFIFJPVyArIENPTCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2l6ZV9yZXF1ZXN0KDMwMCwtMSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+U2l6ZTogPC9zcGFuPiIgKyBzaXplKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUkVDSVBFIFJPVyArIENPTCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2l6ZV9yZXF1ZXN0KDMwMCwtMSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+UmVjaXBlOiA8L3NwYW4+IiArIHJlY2lwZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKKworICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQklOQiBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgYmluYiAhPSAnJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2VsZWN0YWJsZShUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5Ccm91Z2h0IGluIGJ5OiA8L3NwYW4+IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKSAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfc2l6ZV9yZXF1ZXN0KDMwMCwtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfc2VsZWN0YWJsZShUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbWFya3VwKGJpbmIpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKSAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9pbmZvKQorCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEZJTEVTIEJST1VHSFQgQlkgUEFDS0FHRVMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICAgICAgICAgICAgIGlmIGZpbGVfbGlzdDoKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdyA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuc2V0X3BvbGljeShndGsuUE9MSUNZX0FVVE9NQVRJQywgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuc2V0X3NpemVfcmVxdWVzdCgxMDAsIDE3MCkKKworICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZWZpbGVzX3N0b3JlID0gZ3RrLkxpc3RTdG9yZShzdHIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZWZpbGVzX3R2ID0gZ3RrLlRyZWVWaWV3KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZWZpbGVzX3R2LnNldF9ydWxlc19oaW50KFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhY2thZ2VmaWxlc190di5zZXRfaGVhZGVyc192aXNpYmxlKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuYWRkKHNlbGYucGFja2FnZWZpbGVzX3R2KQorCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNlbGwxID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorICAgICAgICAgICAgICAgICAgICAgICAgY29sMSA9IGd0ay5UcmVlVmlld0NvbHVtbignUGFja2FnZSBmaWxlcycsIHNlbGYuY2VsbDEpCisgICAgICAgICAgICAgICAgICAgICAgICBjb2wxLnNldF9jZWxsX2RhdGFfZnVuYyhzZWxmLmNlbGwxLCBzZWxmLnJlZ2V4X2ZpZWxkKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlZmlsZXNfdHYuYXBwZW5kX2NvbHVtbihjb2wxKQorCisgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IGZpbGVfbGlzdC5rZXlzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnNvcnQoKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gaXRlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBsZW4oaXRlbSkgPiAzNToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gaXRlbVs6bGVuKGl0ZW0pLzJdICsgIiIgKyBpdGVtW2xlbihpdGVtKS8yKzE6XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oaXRlbSkgPT0gMzU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGl0ZW1bOmxlbihpdGVtKS8yXSArICIuLi4iICsgaXRlbVtsZW4oaXRlbSkvMiszOl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRvb2x0aXBfaXRlbXNbaXRlbV0gPSBmdWxscGF0aAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VmaWxlc19zdG9yZS5hcHBlbmQoW3N0cihpdGVtKV0pCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZWZpbGVzX3R2LnNldF9tb2RlbChwYWNrYWdlZmlsZXNfc3RvcmUpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpcHMgPSBndGsuVG9vbHRpcHMoKQorICAgICAgICAgICAgICAgICAgICAgICAgdGlwcy5zZXRfdGlwKHNlbGYucGFja2FnZWZpbGVzX3R2LCAiIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZWZpbGVzX3R2LmNvbm5lY3QoIm1vdGlvbi1ub3RpZnktZXZlbnQiLCBzZWxmLnRyZWVWaWV3VG9vbHRpcCwgdGlwcywgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZWZpbGVzX3R2LnNldF9ldmVudHMoZ3RrLmdkay5QT0lOVEVSX01PVElPTl9NQVNLKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYudGV4dFdpbmRvdykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAgc2VsZi52Ym94LnNob3dfYWxsKCkKKworCisgICAgICAgIGRlZiByZWdleF9maWVsZChzZWxmLCBjb2x1bW4sIGNlbGwsIG1vZGVsLCBpdGVyKToKKyAgICAgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgndGV4dCcsIG1vZGVsLmdldF92YWx1ZShpdGVyLCAwKSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworCisJZGVmIGNyZWF0ZV9yZWNpcGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorCisgICAgICAgICAgICAgICAgc3VtbWFyeSA9IHNlbGYucHJvcGVydGllc1snc3VtbWFyeSddCisJCW5hbWUgPSBzZWxmLnByb3BlcnRpZXNbJ25hbWUnXQorCQl2ZXJzaW9uID0gc2VsZi5wcm9wZXJ0aWVzWyd2ZXJzaW9uJ10KKwkJcmV2aXNpb24gPSBzZWxmLnByb3BlcnRpZXNbJ3JldmlzaW9uJ10KKwkJYmluYiA9IHNlbGYucHJvcGVydGllc1snYmluYiddCisJCWdyb3VwID0gc2VsZi5wcm9wZXJ0aWVzWydncm91cCddCisJCWxpY2Vuc2UgPSBzZWxmLnByb3BlcnRpZXNbJ2xpY2Vuc2UnXQorCQlob21lcGFnZSA9IHNlbGYucHJvcGVydGllc1snaG9tZXBhZ2UnXQorCQlidWd0cmFja2VyID0gc2VsZi5wcm9wZXJ0aWVzWydidWd0cmFja2VyJ10KKwkJZGVzY3JpcHRpb24gPSBzZWxmLnByb3BlcnRpZXNbJ2Rlc2NyaXB0aW9uJ10KKworICAgICAgICAgICAgICAgIHNlbGYuc2V0X3Jlc2l6YWJsZShGYWxzZSkKKwkJCisgICAgICAgICAgICAgICAgI2NsZWFuaW5nIG91dCB0aGUgdmVyc2lvbiB2YXJpYWJsZSBhbmQgYWxzbyB0aGUgc3VtbWFyeQorICAgICAgICAgICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uLnNwbGl0KCI6IilbMV0KKyAgICAgICAgICAgICAgICBpZiBsZW4odmVyc2lvbikgPiAzMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uLnNwbGl0KCIrIilbMF0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb24uc3BsaXQoIi0iKVswXQorICAgICAgICAgICAgICAgIGxpY2Vuc2UgPSBsaWNlbnNlLnJlcGxhY2UoIiYiICwgImFuZCIpCisgICAgICAgICAgICAgICAgaWYgKGhvbWVwYWdlID09ICcnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvbWVwYWdlID0gJ3Vua25vd24nCisgICAgICAgICAgICAgICAgaWYgKGJ1Z3RyYWNrZXIgPT0gJycpOgorICAgICAgICAgICAgICAgICAgICAgICAgYnVndHJhY2tlciA9ICd1bmtub3duJworICAgICAgICAgICAgICAgIHN1bW1hcnkgPSBzdW1tYXJ5LnNwbGl0KCIrIilbMF0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAjY2FsY3VsYXRpbmcgdGhlIHJvd3MgbmVlZGVkIGZvciB0aGUgdGFibGUKKyAgICAgICAgICAgICAgICBiaW5iX2l0ZW1zX2NvdW50ID0gbGVuKGJpbmIuc3BsaXQoJywnKSkKKyAgICAgICAgICAgICAgICBiaW5iX2l0ZW1zID0gYmluYi5zcGxpdCgnLCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkKKwkJdmJveCA9IGd0ay5WQm94KEZhbHNlLHNwYWNpbmcgPSAwKQorCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBTVU1NQVJZIExBQkVMICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgICAgICAgICAgICAgIAkgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgc3VtbWFyeSAhPSAnJzogICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3dpZHRoX2NoYXJzKDM3KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2VsZWN0YWJsZShUcnVlKSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8Yj4iICsgc3VtbWFyeSArICI8L2I+IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfc2hvcnQpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE5BTUUgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+TmFtZTogPC9zcGFuPiIgKyBuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfc2hvcnQpCisKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgVkVSU0lPTiBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2VsZWN0YWJsZShUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cCgiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPlZlcnNpb246IDwvc3Bhbj4iICsgdmVyc2lvbikKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfc2hvcnQpCisKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFJFVklTSU9OIFJPVyArIENPTCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+UmV2aXNpb246IDwvc3Bhbj4iICsgcmV2aXNpb24pCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgR1JPVVAgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cCgiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPkdyb3VwOiA8L3NwYW4+IiArIGdyb3VwKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfc2hvcnQpCisKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgSE9NRVBBR0UgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgaG9tZXBhZ2UgIT0gJ3Vua25vd24nOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfc2VsZWN0YWJsZShUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihob21lcGFnZSkgPiAzNToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9tYXJrdXAoIjxhIGhyZWY9XCIiICsgaG9tZXBhZ2UgKyAiXCI+IiArIGhvbWVwYWdlWzA6MzVdICsgIi4uLiIgKyAiPC9hPiIpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X21hcmt1cCgiPGEgaHJlZj1cIiIgKyBob21lcGFnZSArICJcIj4iICsgaG9tZXBhZ2VbMDo2MF0gKyAiPC9hPiIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cCgiPGI+SG9tZXBhZ2U6IDwvYj4iKSAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfc2hvcnQpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfaW5mbykKKyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBCVUdUUkFDS0VSIFJPVyArIENPTCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgYnVndHJhY2tlciAhPSAndW5rbm93bic6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8gPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGJ1Z3RyYWNrZXIpID4gMzU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbWFya3VwKCI8YSBocmVmPVwiIiArIGJ1Z3RyYWNrZXIgKyAiXCI+IiArIGJ1Z3RyYWNrZXJbMDozNV0gKyAiLi4uIiArICI8L2E+IikKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbWFya3VwKCI8YSBocmVmPVwiIiArIGJ1Z3RyYWNrZXIgKyAiXCI+IiArIGJ1Z3RyYWNrZXJbMDo2MF0gKyAiPC9hPiIpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKSAgCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2VsZWN0YWJsZShUcnVlKSAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cCgiPGI+QnVndHJhY2tlcjogPC9iPiIpICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9pbmZvKQorCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIExJQ0VOU0UgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbWFya3VwKGxpY2Vuc2UpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKKworICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cCgiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPkxpY2Vuc2U6IDwvc3Bhbj4iKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKyAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfaW5mbykKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEJJTkIgUk9XK0NPTCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBiaW5iICE9ICcnOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cCgiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPkJyb3VnaHQgaW4gYnk6IDwvc3Bhbj4iKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfc2hvcnQpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8gPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3dpZHRoX2NoYXJzKDM2KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGJpbmIpID4gMjAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkX3dpbmRvdyA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRfd2luZG93LnNldF9wb2xpY3koZ3RrLlBPTElDWV9ORVZFUixndGsuUE9MSUNZX0FMV0FZUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxlZF93aW5kb3cuc2V0X3NpemVfcmVxdWVzdCgxMDAsMTAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbWFya3VwKGJpbmIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9wYWRkaW5nKDYsNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X2FsaWdubWVudCgwLDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxlZF93aW5kb3cuYWRkX3dpdGhfdmlld3BvcnQoc2VsZi5sYWJlbF9pbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2Nyb2xsZWRfd2luZG93KQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X21hcmt1cChiaW5iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9saW5lX3dyYXAoVHJ1ZSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX2luZm8pCisKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBERVNDUklQVElPTiBUQUcgUk9XICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5EZXNjcmlwdGlvbiA8L3NwYW4+IikKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfc2hvcnQpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgREVTQ1JJUFRJT04gSU5GT1JNQVRJT04gUk9XICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGhib3ggPSBndGsuSEJveChUcnVlLHNwYWNpbmcgPSAwKQorCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2VsZWN0YWJsZShUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3dpZHRoX2NoYXJzKDM2KQorICAgICAgICAgICAgICAgIGlmIGxlbihkZXNjcmlwdGlvbikgPiAyMDA6CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkX3dpbmRvdyA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkX3dpbmRvdy5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfTkVWRVIsZ3RrLlBPTElDWV9BTFdBWVMpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkX3dpbmRvdy5zZXRfc2l6ZV9yZXF1ZXN0KDEwMCwxMDApCisgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cChkZXNjcmlwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcGFkZGluZyg2LDYpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2FsaWdubWVudCgwLDApCisgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxlZF93aW5kb3cuYWRkX3dpdGhfdmlld3BvcnQoc2VsZi5sYWJlbF9zaG9ydCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzY3JvbGxlZF93aW5kb3cpCisgICAgICAgICAgICAgICAgZWxzZTogICAgCisgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cChkZXNjcmlwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfc2hvcnQpCisKKyAgICAgICAgICAgICAgICBzZWxmLnZib3guc2hvd19hbGwoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3Byb3h5ZGV0YWlsc2RpYWxvZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9wcm94eWRldGFpbHNkaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllN2RmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9wcm94eWRldGFpbHNkaWFsb2cucHkKQEAgLTAsMCArMSw5MCBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic2RpYWxvZyBpbXBvcnQgQ3J1bWJzRGlhbG9nCisKKyIiIgorVGhlIGZvbGxvd2luZyBhcmUgY29udmVuaWVuY2UgY2xhc3NlcyBmb3IgaW1wbGVtZW50aW5nIEdOT01FIEhJRyBjb21wbGlhbnQKK0JpdEJha2UgR1VJJ3MKK0luIHN1bW1hcnk6IHNwYWNpbmcgPSAxMnB4LCBib3JkZXItd2lkdGggPSA2cHgKKyIiIgorCitjbGFzcyBQcm94eURldGFpbHNEaWFsb2cgKENydW1ic0RpYWxvZyk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIHVzZXIsIHBhc3N3ZCwgcGFyZW50LCBmbGFncywgYnV0dG9ucz1Ob25lKToKKyAgICAgICAgc3VwZXIoUHJveHlEZXRhaWxzRGlhbG9nLCBzZWxmKS5fX2luaXRfXyh0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucykKKyAgICAgICAgc2VsZi5jb25uZWN0KCJyZXNwb25zZSIsIHNlbGYucmVzcG9uc2VfY2IpCisKKyAgICAgICAgc2VsZi5hdXRoID0gbm90ICh1c2VyID09IE5vbmUgb3IgcGFzc3dkID09IE5vbmUgb3IgdXNlciA9PSAiIikKKyAgICAgICAgc2VsZi51c2VyID0gdXNlciBvciAiIgorICAgICAgICBzZWxmLnBhc3N3ZCA9IHBhc3N3ZCBvciAiIgorCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cyBvbiB0aGUgZGlhbG9nCisgICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCisKKyAgICBkZWYgY3JlYXRlX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5hdXRoX2NoZWNrYm94ID0gZ3RrLkNoZWNrQnV0dG9uKCJVc2UgYXV0aGVudGljYXRpb24iKQorICAgICAgICBzZWxmLmF1dGhfY2hlY2tib3guc2V0X3Rvb2x0aXBfdGV4dCgiQ2hlY2sgdGhpcyBib3ggdG8gc2V0IHRoZSB1c2VybmFtZSBhbmQgdGhlIHBhc3N3b3JkIikKKyAgICAgICAgc2VsZi5hdXRoX2NoZWNrYm94LnNldF9hY3RpdmUoc2VsZi5hdXRoKQorICAgICAgICBzZWxmLmF1dGhfY2hlY2tib3guY29ubmVjdCgidG9nZ2xlZCIsIHNlbGYuYXV0aF9jaGVja2JveF90b2dnbGVkX2NiKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLmF1dGhfY2hlY2tib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBoYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCisgICAgICAgIHNlbGYudXNlcl9sYWJlbCA9IGd0ay5MYWJlbCgiVXNlcm5hbWU6IikKKyAgICAgICAgc2VsZi51c2VyX3RleHQgPSBndGsuRW50cnkoKQorICAgICAgICBzZWxmLnVzZXJfdGV4dC5zZXRfdGV4dChzZWxmLnVzZXIpCisgICAgICAgIGhib3gucGFja19zdGFydChzZWxmLnVzZXJfbGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgaGJveC5wYWNrX2VuZChzZWxmLnVzZXJfdGV4dCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChoYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICBzZWxmLnBhc3N3ZF9sYWJlbCA9IGd0ay5MYWJlbCgiUGFzc3dvcmQ6IikKKyAgICAgICAgc2VsZi5wYXNzd2RfdGV4dCA9IGd0ay5FbnRyeSgpCisgICAgICAgIHNlbGYucGFzc3dkX3RleHQuc2V0X3RleHQoc2VsZi5wYXNzd2QpCisgICAgICAgIGhib3gucGFja19zdGFydChzZWxmLnBhc3N3ZF9sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBoYm94LnBhY2tfZW5kKHNlbGYucGFzc3dkX3RleHQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoaGJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYucmVmcmVzaF9hdXRoX2NvbXBvbmVudHMoKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiByZWZyZXNoX2F1dGhfY29tcG9uZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi51c2VyX2xhYmVsLnNldF9zZW5zaXRpdmUoc2VsZi5hdXRoKQorICAgICAgICBzZWxmLnVzZXJfdGV4dC5zZXRfZWRpdGFibGUoc2VsZi5hdXRoKQorICAgICAgICBzZWxmLnVzZXJfdGV4dC5zZXRfc2Vuc2l0aXZlKHNlbGYuYXV0aCkKKyAgICAgICAgc2VsZi5wYXNzd2RfbGFiZWwuc2V0X3NlbnNpdGl2ZShzZWxmLmF1dGgpCisgICAgICAgIHNlbGYucGFzc3dkX3RleHQuc2V0X2VkaXRhYmxlKHNlbGYuYXV0aCkKKyAgICAgICAgc2VsZi5wYXNzd2RfdGV4dC5zZXRfc2Vuc2l0aXZlKHNlbGYuYXV0aCkKKworICAgIGRlZiBhdXRoX2NoZWNrYm94X3RvZ2dsZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5hdXRoID0gc2VsZi5hdXRoX2NoZWNrYm94LmdldF9hY3RpdmUoKQorICAgICAgICBzZWxmLnJlZnJlc2hfYXV0aF9jb21wb25lbnRzKCkKKworICAgIGRlZiByZXNwb25zZV9jYihzZWxmLCBkaWFsb2csIHJlc3BvbnNlX2lkKToKKyAgICAgICAgaWYgcmVzcG9uc2VfaWQgPT0gZ3RrLlJFU1BPTlNFX09LOgorICAgICAgICAgICAgaWYgc2VsZi5hdXRoOgorICAgICAgICAgICAgICAgIHNlbGYudXNlciA9IHNlbGYudXNlcl90ZXh0LmdldF90ZXh0KCkKKyAgICAgICAgICAgICAgICBzZWxmLnBhc3N3ZCA9IHNlbGYucGFzc3dkX3RleHQuZ2V0X3RleHQoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnVzZXIgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5wYXNzd2QgPSBOb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvcmV0cmlldmVpbWFnZWRpYWxvZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9yZXRyaWV2ZWltYWdlZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMTcxMzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvcmV0cmlldmVpbWFnZWRpYWxvZy5weQpAQCAtMCwwICsxLDUxIEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBDcmlzdGlhbmEgVm9pY3UgPGNyaXN0aWFuYS52b2ljdUBpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCisKK2NsYXNzIFJldHJpZXZlSW1hZ2VEaWFsb2cgKGd0ay5GaWxlQ2hvb3NlckRpYWxvZyk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNyZWF0ZSBhIGRpYWxvZyB0aGF0IHBlcm1pdHMgdG8gcmV0cmlldmUKKyAgICBhIGN1c3RvbSBpbWFnZSBzYXZlZCBwcmV2aW91c2x5IGZyb20gSG9iLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXJlY3RvcnksdGl0bGUsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnM9Tm9uZSk6CisgICAgICAgIHN1cGVyKFJldHJpZXZlSW1hZ2VEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBOb25lLCBndGsuRklMRV9DSE9PU0VSX0FDVElPTl9PUEVOLAorICAgICAgICAgICAgKGd0ay5TVE9DS19DQU5DRUwsIGd0ay5SRVNQT05TRV9DQU5DRUwsZ3RrLlNUT0NLX09QRU4sIGd0ay5SRVNQT05TRV9PSykpCisgICAgICAgIHNlbGYuZGlyZWN0b3J5ID0gZGlyZWN0b3J5CisKKyAgICAgICAgIyBjcmVhdGUgdmlzdWFsIGVsZW1lbnRzIG9uIHRoZSBkaWFsb2cKKyAgICAgICAgc2VsZi5jcmVhdGVfdmlzdWFsX2VsZW1lbnRzKCkKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLnNldF9zaG93X2hpZGRlbihUcnVlKQorICAgICAgICBzZWxmLnNldF9kZWZhdWx0X3Jlc3BvbnNlKGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgc2VsZi5zZXRfY3VycmVudF9mb2xkZXIoc2VsZi5kaXJlY3RvcnkpCisKKyAgICAgICAgdmJveCA9IHNlbGYuZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMF0KKyAgICAgICAgZm9yIGNoaWxkIGluIHZib3guZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKCk6CisgICAgICAgICAgICB2Ym94LmdldF9jaGlsZHJlbigpWzBdLmdldF9jaGlsZHJlbigpWzBdLmdldF9jaGlsZHJlbigpWzBdLnJlbW92ZShjaGlsZCkKKworICAgICAgICBsYWJlbDEgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbDEuc2V0X3RleHQoIkZpbGUgc3lzdGVtIiArIHNlbGYuZGlyZWN0b3J5KQorICAgICAgICBsYWJlbDEuc2hvdygpCisgICAgICAgIHZib3guZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMF0ucGFja19zdGFydChsYWJlbDEsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz0wKQorICAgICAgICB2Ym94LmdldF9jaGlsZHJlbigpWzBdLmdldF9jaGlsZHJlbigpWzFdLmdldF9jaGlsZHJlbigpWzBdLmhpZGUoKQorCisgICAgICAgIHNlbGYuZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMV0uZ2V0X2NoaWxkcmVuKClbMF0uc2V0X2xhYmVsKCJTZWxlY3QiKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3NhdmVpbWFnZWRpYWxvZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9zYXZlaW1hZ2VkaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE5NWY3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9zYXZlaW1hZ2VkaWFsb2cucHkKQEAgLTAsMCArMSwxNTkgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IENyaXN0aWFuYSBWb2ljdSA8Y3Jpc3RpYW5hLnZvaWN1QGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBnbGliCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzZGlhbG9nIGltcG9ydCBDcnVtYnNEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNtZXNzYWdlZGlhbG9nIGltcG9ydCBDcnVtYnNNZXNzYWdlRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IEhvYkJ1dHRvbgorCitjbGFzcyBTYXZlSW1hZ2VEaWFsb2cgKENydW1ic0RpYWxvZyk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNyZWF0ZSBhIGRpYWxvZyB0aGF0IHBlcm1pdHMgdG8gc2F2ZQorICAgIGEgY3VzdG9tIGltYWdlIGluIGEgcHJlZGVmaW5lZCBkaXJlY3RvcnkuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpcmVjdG9yeSwgbmFtZSwgZGVzY3JpcHRpb24sIHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zPU5vbmUpOgorICAgICAgICBzdXBlcihTYXZlSW1hZ2VEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorICAgICAgICBzZWxmLmRpcmVjdG9yeSA9IGRpcmVjdG9yeQorICAgICAgICBzZWxmLmJ1aWxkZXIgPSBwYXJlbnQKKyAgICAgICAgc2VsZi5uYW1lX2ZpZWxkID0gbmFtZQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uX2ZpZWxkID0gZGVzY3JpcHRpb24KKworICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMgb24gdGhlIGRpYWxvZworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuc2V0X2RlZmF1bHRfcmVzcG9uc2UoZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICBzZWxmLnZib3guc2V0X2JvcmRlcl93aWR0aCg2KQorCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDEyKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMCwgMCkKKyAgICAgICAgbGFiZWwuc2V0X21hcmt1cCgiPGI+TmFtZTwvYj4iKQorICAgICAgICBzdWJfbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBzdWJfbGFiZWwuc2V0X2FsaWdubWVudCgwLCAwKQorICAgICAgICBjb250ZW50ID0gIkltYWdlIHJlY2lwZSBuYW1lcyBzaG91bGQgYmUgYWxsIGxvd2VyY2FzZSBhbmQgaW5jbHVkZSBvbmx5IGFscGhhbnVtZXJpY1xuIgorICAgICAgICBjb250ZW50ICs9ICJjaGFyYWN0ZXJzLiBUaGUgb25seSBzcGVjaWFsIGNoYXJhY3RlciB5b3UgY2FuIHVzZSBpcyB0aGUgQVNDSUkgaHlwaGVuICgtKS4iCisgICAgICAgIHN1Yl9sYWJlbC5zZXRfbWFya3VwKGNvbnRlbnQpCisgICAgICAgIHNlbGYubmFtZV9lbnRyeSA9IGd0ay5FbnRyeSgpCisgICAgICAgIHNlbGYubmFtZV9lbnRyeS5zZXRfdGV4dChzZWxmLm5hbWVfZmllbGQpCisgICAgICAgIHNlbGYubmFtZV9lbnRyeS5zZXRfc2l6ZV9yZXF1ZXN0KDM1MCwzMCkKKyAgICAgICAgc2VsZi5uYW1lX2VudHJ5LmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLm5hbWVfZW50cnlfY2hhbmdlZCkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHN1Yl9sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHNlbGYubmFtZV9lbnRyeSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDEyKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMCwgMCkKKyAgICAgICAgbGFiZWwuc2V0X21hcmt1cCgiPGI+RGVzY3JpcHRpb248L2I+IChvcHRpb25hbCkiKQorICAgICAgICBzdWJfbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBzdWJfbGFiZWwuc2V0X2FsaWdubWVudCgwLCAwKQorICAgICAgICBzdWJfbGFiZWwuc2V0X21hcmt1cCgiVGhlIGRlc2NyaXB0aW9uIHNob3VsZCBiZSBsZXNzIHRoYW4gMTUwIGNoYXJhY3RlcnMgbG9uZy4iKQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uX2VudHJ5ID0gZ3RrLlRleHRWaWV3KCkKKyAgICAgICAgZGVzY3JpcHRpb25fYnVmZmVyID0gc2VsZi5kZXNjcmlwdGlvbl9lbnRyeS5nZXRfYnVmZmVyKCkKKyAgICAgICAgZGVzY3JpcHRpb25fYnVmZmVyLnNldF90ZXh0KHNlbGYuZGVzY3JpcHRpb25fZmllbGQpCisgICAgICAgIGRlc2NyaXB0aW9uX2J1ZmZlci5jb25uZWN0KCJpbnNlcnQtdGV4dCIsIHNlbGYubGltaXRfZGVzY3JpcHRpb25fbGVuZ3RoKQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uX2VudHJ5LnNldF93cmFwX21vZGUoZ3RrLldSQVBfV09SRCkKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbl9lbnRyeS5zZXRfc2l6ZV9yZXF1ZXN0KDM1MCw1MCkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHN1Yl9sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHNlbGYuZGVzY3JpcHRpb25fZW50cnksIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzdWJfdmJveCA9IGd0ay5WQm94KEZhbHNlLCAxMikKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc3ViX3Zib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAsIDApCisgICAgICAgIGxhYmVsLnNldF9tYXJrdXAoIllvdXIgaW1hZ2UgcmVjaXBlIHdpbGwgYmUgc2F2ZWQgdG86IikKKyAgICAgICAgc3ViX2xhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgc3ViX2xhYmVsLnNldF9hbGlnbm1lbnQoMCwgMCkKKyAgICAgICAgc3ViX2xhYmVsLnNldF9tYXJrdXAoc2VsZi5kaXJlY3RvcnkpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQobGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChzdWJfbGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICB0YWJsZSA9IGd0ay5UYWJsZSgxLCA0LCBUcnVlKQorCisgICAgICAgIGNhbmNlbF9idXR0b24gPSBndGsuQnV0dG9uKCkKKyAgICAgICAgY2FuY2VsX2J1dHRvbi5zZXRfbGFiZWwoIkNhbmNlbCIpCisgICAgICAgIGNhbmNlbF9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuY2FuY2VsX2J1dHRvbl9jYikKKyAgICAgICAgY2FuY2VsX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDExMCwgMzApCisKKyAgICAgICAgc2VsZi5zYXZlX2J1dHRvbiA9IGd0ay5CdXR0b24oKQorICAgICAgICBzZWxmLnNhdmVfYnV0dG9uLnNldF9sYWJlbCgiU2F2ZSIpCisgICAgICAgIHNlbGYuc2F2ZV9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuc2F2ZV9idXR0b25fY2IpCisgICAgICAgIHNlbGYuc2F2ZV9idXR0b24uc2V0X3NpemVfcmVxdWVzdCgxMTAsIDMwKQorICAgICAgICBpZiBzZWxmLm5hbWVfZW50cnkuZ2V0X3RleHQoKSA9PSAnJzoKKyAgICAgICAgICAgIHNlbGYuc2F2ZV9idXR0b24uc2V0X3NlbnNpdGl2ZShGYWxzZSkKKworICAgICAgICB0YWJsZS5hdHRhY2goY2FuY2VsX2J1dHRvbiwgMiwgMywgMCwgMSkKKyAgICAgICAgdGFibGUuYXR0YWNoKHNlbGYuc2F2ZV9idXR0b24sIDMsIDQsIDAsIDEpCisgICAgICAgIHNlbGYudmJveC5wYWNrX2VuZCh0YWJsZSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIGxpbWl0X2Rlc2NyaXB0aW9uX2xlbmd0aChzZWxmLCB0ZXh0YnVmZmVyLCBpdGVyLCB0ZXh0LCBsZW5ndGgpOgorICAgICAgICBidWZmZXJfYm91bmRzID0gdGV4dGJ1ZmZlci5nZXRfYm91bmRzKCkKKyAgICAgICAgZW50aXJlX3RleHQgPSB0ZXh0YnVmZmVyLmdldF90ZXh0KCpidWZmZXJfYm91bmRzKQorICAgICAgICBlbnRpcmVfdGV4dCArPSB0ZXh0CisgICAgICAgIGlmIGxlbihlbnRpcmVfdGV4dCk+MTUwIG9yIHRleHQ9PSJcbiI6CisgICAgICAgICAgICB0ZXh0YnVmZmVyLmVtaXRfc3RvcF9ieV9uYW1lKCJpbnNlcnQtdGV4dCIpCisKKyAgICBkZWYgbmFtZV9lbnRyeV9jaGFuZ2VkKHNlbGYsIGVudHJ5KToKKyAgICAgICAgdGV4dCA9IGVudHJ5LmdldF90ZXh0KCkKKyAgICAgICAgaWYgdGV4dCA9PSAnJzoKKyAgICAgICAgICAgIHNlbGYuc2F2ZV9idXR0b24uc2V0X3NlbnNpdGl2ZShGYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2F2ZV9idXR0b24uc2V0X3NlbnNpdGl2ZShUcnVlKQorCisgICAgZGVmIGNhbmNlbF9idXR0b25fY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5kZXN0cm95KCkKKworICAgIGRlZiBzYXZlX2J1dHRvbl9jYihzZWxmLCBidXR0b24pOgorICAgICAgICB0ZXh0ID0gc2VsZi5uYW1lX2VudHJ5LmdldF90ZXh0KCkKKyAgICAgICAgbmV3X3RleHQgPSB0ZXh0LnJlcGxhY2UoIi0iLCIiKQorICAgICAgICBkZXNjcmlwdGlvbl9idWZmZXIgPSBzZWxmLmRlc2NyaXB0aW9uX2VudHJ5LmdldF9idWZmZXIoKQorICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uX2J1ZmZlci5nZXRfdGV4dChkZXNjcmlwdGlvbl9idWZmZXIuZ2V0X3N0YXJ0X2l0ZXIoKSxkZXNjcmlwdGlvbl9idWZmZXIuZ2V0X2VuZF9pdGVyKCkpCisgICAgICAgIGlmIG5ld190ZXh0LmlzbG93ZXIoKSBhbmQgbmV3X3RleHQuaXNhbG51bSgpOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLmltYWdlX2RldGFpbHNfcGFnZS5pbWFnZV9zYXZlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5jdXN0b21pemVkID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5nZW5lcmF0ZV9uZXdfaW1hZ2Uoc2VsZi5kaXJlY3RvcnkrdGV4dCwgZGVzY3JpcHRpb24pCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLnNldF9pbl9saXN0KHRleHQsIGRlc2NyaXB0aW9uKQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5zZXRfc2VsZWN0ZWRfaW1hZ2UodGV4dCkKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5pbWFnZV9kZXRhaWxzX3BhZ2Uuc2hvd19wYWdlKHNlbGYuYnVpbGRlci5JTUFHRV9HRU5FUkFURUQpCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuaW1hZ2VfZGV0YWlsc19wYWdlLm5hbWVfZmllbGRfdGVtcGxhdGUgPSB0ZXh0CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuaW1hZ2VfZGV0YWlsc19wYWdlLmRlc2NyaXB0aW9uX2ZpZWxkX3RlbXBsYXRlID0gZGVzY3JpcHRpb24KKyAgICAgICAgICAgIHNlbGYuZGVzdHJveSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNob3dfaW52YWxpZF9pbnB1dF9lcnJvcl9kaWFsb2coKQorCisgICAgZGVmIHNob3dfaW52YWxpZF9pbnB1dF9lcnJvcl9kaWFsb2coc2VsZik6CisgICAgICAgIGxibCA9ICI8Yj5JbnZhbGlkIGNoYXJhY3RlcnMgaW4gaW1hZ2UgcmVjaXBlIG5hbWU8L2I+IgorICAgICAgICBtc2cgPSAiSW1hZ2UgcmVjaXBlIG5hbWVzIHNob3VsZCBiZSBhbGwgbG93ZXJjYXNlIGFuZFxuIgorICAgICAgICBtc2cgKz0gImluY2x1ZGUgb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy4gVGhlIG9ubHlcbiIKKyAgICAgICAgbXNnICs9ICJzcGVjaWFsIGNoYXJhY3RlciB5b3UgY2FuIHVzZSBpcyB0aGUgQVNDSUkgaHlwaGVuICgtKS4iCisgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuTUVTU0FHRV9FUlJPUiwgbXNnKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorCisgICAgICAgIHJlcyA9IGRpYWxvZy5ydW4oKQorICAgICAgICBzZWxmLm5hbWVfZW50cnkuZ3JhYl9mb2N1cygpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9zZXR0aW5nc3VpaGVscGVyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3NldHRpbmdzdWloZWxwZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAyODVjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9zZXR0aW5nc3VpaGVscGVyLnB5CkBAIC0wLDAgKzEsMTIyIEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitpbXBvcnQgb3MKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iSW5mb0J1dHRvbiwgSG9iQnV0dG9uLCBIb2JBbHRCdXR0b24KKworIiIiCitUaGUgZm9sbG93aW5nIGFyZSBjb252ZW5pZW5jZSBjbGFzc2VzIGZvciBpbXBsZW1lbnRpbmcgR05PTUUgSElHIGNvbXBsaWFudAorQml0QmFrZSBHVUkncworSW4gc3VtbWFyeTogc3BhY2luZyA9IDEycHgsIGJvcmRlci13aWR0aCA9IDZweAorIiIiCisKK2NsYXNzIFNldHRpbmdzVUlIZWxwZXIoKToKKworICAgIGRlZiBnZW5fbGFiZWxfd2lkZ2V0KHNlbGYsIGNvbnRlbnQpOgorICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMCwgMCkKKyAgICAgICAgbGFiZWwuc2V0X21hcmt1cChjb250ZW50KQorICAgICAgICBsYWJlbC5zaG93KCkKKyAgICAgICAgcmV0dXJuIGxhYmVsCisKKyAgICBkZWYgZ2VuX2xhYmVsX2luZm9fd2lkZ2V0KHNlbGYsIGNvbnRlbnQsIHRvb2x0aXApOgorICAgICAgICB0YWJsZSA9IGd0ay5UYWJsZSgxLCAxMCwgRmFsc2UpCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KGNvbnRlbnQpCisgICAgICAgIGluZm8gPSBIb2JJbmZvQnV0dG9uKHRvb2x0aXAsIHNlbGYpCisgICAgICAgIHRhYmxlLmF0dGFjaChsYWJlbCwgMCwgMSwgMCwgMSwgeG9wdGlvbnM9Z3RrLkZJTEwpCisgICAgICAgIHRhYmxlLmF0dGFjaChpbmZvLCAxLCAyLCAwLCAxLCB4b3B0aW9ucz1ndGsuRklMTCwgeHBhZGRpbmc9MTApCisgICAgICAgIHJldHVybiB0YWJsZQorCisgICAgZGVmIGdlbl9zcGlubmVyX3dpZGdldChzZWxmLCBjb250ZW50LCBsb3dlciwgdXBwZXIsIHRvb2x0aXA9IiIpOgorICAgICAgICBoYm94ID0gZ3RrLkhCb3goRmFsc2UsIDEyKQorICAgICAgICBhZGp1c3QgPSBndGsuQWRqdXN0bWVudCh2YWx1ZT1jb250ZW50LCBsb3dlcj1sb3dlciwgdXBwZXI9dXBwZXIsIHN0ZXBfaW5jcj0xKQorICAgICAgICBzcGlubmVyID0gZ3RrLlNwaW5CdXR0b24oYWRqdXN0bWVudD1hZGp1c3QsIGNsaW1iX3JhdGU9MSwgZGlnaXRzPTApCisKKyAgICAgICAgc3Bpbm5lci5zZXRfdmFsdWUoY29udGVudCkKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHNwaW5uZXIsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBpbmZvID0gSG9iSW5mb0J1dHRvbih0b29sdGlwLCBzZWxmKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQoaW5mbywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGhib3guc2hvd19hbGwoKQorICAgICAgICByZXR1cm4gaGJveCwgc3Bpbm5lcgorCisgICAgZGVmIGdlbl9jb21ib193aWRnZXQoc2VsZiwgY3Vycl9pdGVtLCBhbGxfaXRlbSwgdG9vbHRpcD0iIik6CisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgMTIpCisgICAgICAgIGNvbWJvID0gZ3RrLmNvbWJvX2JveF9uZXdfdGV4dCgpCisgICAgICAgIGhib3gucGFja19zdGFydChjb21ibywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGluZGV4ID0gMAorICAgICAgICBmb3IgaXRlbSBpbiBhbGxfaXRlbSBvciBbXToKKyAgICAgICAgICAgIGNvbWJvLmFwcGVuZF90ZXh0KGl0ZW0pCisgICAgICAgICAgICBpZiBpdGVtID09IGN1cnJfaXRlbToKKyAgICAgICAgICAgICAgICBjb21iby5zZXRfYWN0aXZlKGluZGV4KQorICAgICAgICAgICAgaW5kZXggKz0gMQorCisgICAgICAgIGluZm8gPSBIb2JJbmZvQnV0dG9uKHRvb2x0aXAsIHNlbGYpCisgICAgICAgIGhib3gucGFja19zdGFydChpbmZvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgaGJveC5zaG93X2FsbCgpCisgICAgICAgIHJldHVybiBoYm94LCBjb21ibworCisgICAgZGVmIGVudHJ5X3dpZGdldF9zZWxlY3RfcGF0aF9jYihzZWxmLCBhY3Rpb24sIHBhcmVudCwgZW50cnkpOgorICAgICAgICBkaWFsb2cgPSBndGsuRmlsZUNob29zZXJEaWFsb2coIiIsIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0ay5GSUxFX0NIT09TRVJfQUNUSU9OX1NFTEVDVF9GT0xERVIpCisgICAgICAgIHRleHQgPSBlbnRyeS5nZXRfdGV4dCgpCisgICAgICAgIGRpYWxvZy5zZXRfY3VycmVudF9mb2xkZXIodGV4dCBpZiBsZW4odGV4dCkgPiAwIGVsc2Ugb3MuZ2V0Y3dkKCkpCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDYW5jZWwiLCBndGsuUkVTUE9OU0VfTk8pCisgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiT3BlbiIsIGd0ay5SRVNQT05TRV9ZRVMpCisgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICBpZiByZXNwb25zZSA9PSBndGsuUkVTUE9OU0VfWUVTOgorICAgICAgICAgICAgcGF0aCA9IGRpYWxvZy5nZXRfZmlsZW5hbWUoKQorICAgICAgICAgICAgZW50cnkuc2V0X3RleHQocGF0aCkKKworICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKKyAgICBkZWYgZ2VuX2VudHJ5X3dpZGdldChzZWxmLCBjb250ZW50LCBwYXJlbnQsIHRvb2x0aXA9IiIsIG5lZWRfYnV0dG9uPVRydWUpOgorICAgICAgICBoYm94ID0gZ3RrLkhCb3goRmFsc2UsIDEyKQorICAgICAgICBlbnRyeSA9IGd0ay5FbnRyeSgpCisgICAgICAgIGVudHJ5LnNldF90ZXh0KGNvbnRlbnQpCisgICAgICAgIGVudHJ5LnNldF9zaXplX3JlcXVlc3QoMzUwLDMwKQorCisgICAgICAgIGlmIG5lZWRfYnV0dG9uOgorICAgICAgICAgICAgdGFibGUgPSBndGsuVGFibGUoMSwgMTAsIEZhbHNlKQorICAgICAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHRhYmxlLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorICAgICAgICAgICAgdGFibGUuYXR0YWNoKGVudHJ5LCAwLCA5LCAwLCAxLCB4b3B0aW9ucz1ndGsuU0hSSU5LKQorICAgICAgICAgICAgaW1hZ2UgPSBndGsuSW1hZ2UoKQorICAgICAgICAgICAgaW1hZ2Uuc2V0X2Zyb21fc3RvY2soZ3RrLlNUT0NLX09QRU4sZ3RrLklDT05fU0laRV9CVVRUT04pCisgICAgICAgICAgICBvcGVuX2J1dHRvbiA9IGd0ay5CdXR0b24oKQorICAgICAgICAgICAgb3Blbl9idXR0b24uc2V0X2ltYWdlKGltYWdlKQorICAgICAgICAgICAgb3Blbl9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuZW50cnlfd2lkZ2V0X3NlbGVjdF9wYXRoX2NiLCBwYXJlbnQsIGVudHJ5KQorICAgICAgICAgICAgdGFibGUuYXR0YWNoKG9wZW5fYnV0dG9uLCA5LCAxMCwgMCwgMSwgeG9wdGlvbnM9Z3RrLlNIUklOSykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhib3gucGFja19zdGFydChlbnRyeSwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICBpZiB0b29sdGlwICE9ICIiOgorICAgICAgICAgICAgaW5mbyA9IEhvYkluZm9CdXR0b24odG9vbHRpcCwgc2VsZikKKyAgICAgICAgICAgIGhib3gucGFja19zdGFydChpbmZvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgaGJveC5zaG93X2FsbCgpCisgICAgICAgIHJldHVybiBoYm94LCBlbnRyeQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3NpbXBsZXNldHRpbmdzZGlhbG9nLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3NpbXBsZXNldHRpbmdzZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZWIzZDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvc2ltcGxlc2V0dGluZ3NkaWFsb2cucHkKQEAgLTAsMCArMSw4OTEgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgaGFzaGxpYgorZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBoaWMsIEhvYkluZm9CdXR0b24sIEhvYkJ1dHRvbiwgSG9iQWx0QnV0dG9uIAorZnJvbSBiYi51aS5jcnVtYnMucHJvZ3Jlc3NiYXIgaW1wb3J0IEhvYlByb2dyZXNzQmFyCitmcm9tIGJiLnVpLmNydW1icy5oaWcuc2V0dGluZ3N1aWhlbHBlciBpbXBvcnQgU2V0dGluZ3NVSUhlbHBlcgorZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic2RpYWxvZyBpbXBvcnQgQ3J1bWJzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzbWVzc2FnZWRpYWxvZyBpbXBvcnQgQ3J1bWJzTWVzc2FnZURpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLnByb3h5ZGV0YWlsc2RpYWxvZyBpbXBvcnQgUHJveHlEZXRhaWxzRGlhbG9nCisKKyIiIgorVGhlIGZvbGxvd2luZyBhcmUgY29udmVuaWVuY2UgY2xhc3NlcyBmb3IgaW1wbGVtZW50aW5nIEdOT01FIEhJRyBjb21wbGlhbnQKK0JpdEJha2UgR1VJJ3MKK0luIHN1bW1hcnk6IHNwYWNpbmcgPSAxMnB4LCBib3JkZXItd2lkdGggPSA2cHgKKyIiIgorCitjbGFzcyBTaW1wbGVTZXR0aW5nc0RpYWxvZyAoQ3J1bWJzRGlhbG9nLCBTZXR0aW5nc1VJSGVscGVyKToKKworICAgIChCVUlMRF9FTlZfUEFHRV9JRCwKKyAgICAgU0hBUkVEX1NUQVRFX1BBR0VfSUQsCisgICAgIFBST1hJRVNfUEFHRV9JRCwKKyAgICAgT1RIRVJTX1BBR0VfSUQpID0gcmFuZ2UoNCkKKworICAgIChURVNUX05FVFdPUktfTk9ORSwKKyAgICAgVEVTVF9ORVRXT1JLX0lOSVRJQUwsCisgICAgIFRFU1RfTkVUV09SS19SVU5OSU5HLAorICAgICBURVNUX05FVFdPUktfUEFTU0VELAorICAgICBURVNUX05FVFdPUktfRkFJTEVELAorICAgICBURVNUX05FVFdPUktfQ0FOQ0VMRUQpID0gcmFuZ2UoNikKKworICAgIFRBUkdFVFMgPSBbCisgICAgICAgICgiTVlfVFJFRV9NT0RFTF9ST1ciLCBndGsuVEFSR0VUX1NBTUVfV0lER0VULCAwKSwKKyAgICAgICAgKCJ0ZXh0L3BsYWluIiwgMCwgMSksCisgICAgICAgICgiVEVYVCIsIDAsIDIpLAorICAgICAgICAoIlNUUklORyIsIDAsIDMpLAorICAgICAgICBdCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIGNvbmZpZ3VyYXRpb24sIGFsbF9pbWFnZV90eXBlcywKKyAgICAgICAgICAgIGFsbF9wYWNrYWdlX2Zvcm1hdHMsIGFsbF9kaXN0cm9zLCBhbGxfc2RrX21hY2hpbmVzLAorICAgICAgICAgICAgbWF4X3RocmVhZHMsIHBhcmVudCwgZmxhZ3MsIGhhbmRsZXIsIGJ1dHRvbnM9Tm9uZSk6CisgICAgICAgIHN1cGVyKFNpbXBsZVNldHRpbmdzRGlhbG9nLCBzZWxmKS5fX2luaXRfXyh0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucykKKworICAgICAgICAjIGNsYXNzIG1lbWJlcnMgZnJvbSBvdGhlciBvYmplY3RzCisgICAgICAgICMgYml0YmFrZSBzZXR0aW5ncyBmcm9tIEJ1aWxkZXIuQ29uZmlndXJhdGlvbgorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uCisgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXMgPSBhbGxfaW1hZ2VfdHlwZXMKKyAgICAgICAgc2VsZi5hbGxfcGFja2FnZV9mb3JtYXRzID0gYWxsX3BhY2thZ2VfZm9ybWF0cworICAgICAgICBzZWxmLmFsbF9kaXN0cm9zID0gYWxsX2Rpc3Ryb3MKKyAgICAgICAgc2VsZi5hbGxfc2RrX21hY2hpbmVzID0gYWxsX3Nka19tYWNoaW5lcworICAgICAgICBzZWxmLm1heF90aHJlYWRzID0gbWF4X3RocmVhZHMKKworICAgICAgICAjIGNsYXNzIG1lbWJlcnMgZm9yIGludGVybmFsIHVzZQorICAgICAgICBzZWxmLmRsZGlyX3RleHQgPSBOb25lCisgICAgICAgIHNlbGYuc3N0YXRlZGlyX3RleHQgPSBOb25lCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc19saXN0ID0gW10KKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX2NoYW5nZWQgPSAwCisgICAgICAgIHNlbGYuYmJfc3Bpbm5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5wbWFrZV9zcGlubmVyID0gTm9uZQorICAgICAgICBzZWxmLnJvb3Rmc19zaXplX3NwaW5uZXIgPSBOb25lCisgICAgICAgIHNlbGYuZXh0cmFfc2l6ZV9zcGlubmVyID0gTm9uZQorICAgICAgICBzZWxmLmdwbHYzX2NoZWNrYm94ID0gTm9uZQorICAgICAgICBzZWxmLnRvb2xjaGFpbl9jaGVja2JveCA9IE5vbmUKKyAgICAgICAgc2VsZi5zZXR0aW5nX3N0b3JlID0gTm9uZQorICAgICAgICBzZWxmLmltYWdlX3R5cGVzX2NoZWNrYnV0dG9ucyA9IHt9CisKKyAgICAgICAgc2VsZi5tZDUgPSBzZWxmLmNvbmZpZ19tZDUoKQorICAgICAgICBzZWxmLnByb3h5X21kNSA9IHNlbGYuY29uZmlnX3Byb3h5X21kNSgpCisgICAgICAgIHNlbGYuc2V0dGluZ3NfY2hhbmdlZCA9IEZhbHNlCisgICAgICAgIHNlbGYucHJveHlfc2V0dGluZ3NfY2hhbmdlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuaGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgc2VsZi5wcm94eV90ZXN0X3JhbiA9IEZhbHNlCisgICAgICAgIHNlbGYuc2VsZWN0ZWRfbWlycm9yX3JvdyA9IDAKKyAgICAgICAgc2VsZi5uZXdfbWlycm9yID0gRmFsc2UKKworICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMgb24gdGhlIGRpYWxvZworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorICAgICAgICBzZWxmLmNvbm5lY3QoInJlc3BvbnNlIiwgc2VsZi5yZXNwb25zZV9jYikKKworICAgIGRlZiBfZ2V0X3NvcnRlZF92YWx1ZShzZWxmLCB2YXIpOgorICAgICAgICByZXR1cm4gIiAiLmpvaW4oc29ydGVkKHN0cih2YXIpLnNwbGl0KCkpKSArICJcbiIKKworICAgIGRlZiBjb25maWdfcHJveHlfbWQ1KHNlbGYpOgorICAgICAgICBkYXRhID0gKCJFTkFCTEVfUFJPWFk6ICIgICAgICAgICArIHNlbGYuX2dldF9zb3J0ZWRfdmFsdWUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSkpCisgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHk6CisgICAgICAgICAgICBmb3IgcHJvdG9jb2wgaW4gc2VsZi5jb25maWd1cmF0aW9uLnByb3hpZXMua2V5cygpOgorICAgICAgICAgICAgICAgIGRhdGEgKz0gKHByb3RvY29sICsgIjogIiArIHNlbGYuX2dldF9zb3J0ZWRfdmFsdWUoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcHJveHkocHJvdG9jb2wpKSkKKyAgICAgICAgcmV0dXJuIGhhc2hsaWIubWQ1KGRhdGEpLmhleGRpZ2VzdCgpCisKKyAgICBkZWYgY29uZmlnX21kNShzZWxmKToKKyAgICAgICAgZGF0YSA9ICIiCisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5jb25maWd1cmF0aW9uLmV4dHJhX3NldHRpbmcua2V5cygpOgorICAgICAgICAgICAgZGF0YSArPSAoa2V5ICsgIjogIiArIHNlbGYuX2dldF9zb3J0ZWRfdmFsdWUoc2VsZi5jb25maWd1cmF0aW9uLmV4dHJhX3NldHRpbmdba2V5XSkpCisgICAgICAgIHJldHVybiBoYXNobGliLm1kNShkYXRhKS5oZXhkaWdlc3QoKQorCisgICAgZGVmIGdlbl9wcm94eV9lbnRyeV93aWRnZXQoc2VsZiwgcHJvdG9jb2wsIHBhcmVudCwgbmVlZF9idXR0b249VHJ1ZSwgbGluZT0wKToKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwocHJvdG9jb2wudXBwZXIoKSArICIgcHJveHkiKQorICAgICAgICBzZWxmLnByb3h5X3RhYmxlLmF0dGFjaChsYWJlbCwgMCwgMSwgbGluZSwgbGluZSsxLCB4cGFkZGluZz0yNCkKKworICAgICAgICBwcm94eV9lbnRyeSA9IGd0ay5FbnRyeSgpCisgICAgICAgIHByb3h5X2VudHJ5LnNldF9zaXplX3JlcXVlc3QoMzAwLCAtMSkKKyAgICAgICAgc2VsZi5wcm94eV90YWJsZS5hdHRhY2gocHJveHlfZW50cnksIDEsIDIsIGxpbmUsIGxpbmUrMSwgeXBhZGRpbmc9NCkKKworICAgICAgICBzZWxmLnByb3h5X3RhYmxlLmF0dGFjaChndGsuTGFiZWwoIjoiKSwgMiwgMywgbGluZSwgbGluZSsxLCB4cGFkZGluZz0xMiwgeXBhZGRpbmc9NCkKKworICAgICAgICBwb3J0X2VudHJ5ID0gZ3RrLkVudHJ5KCkKKyAgICAgICAgcG9ydF9lbnRyeS5zZXRfc2l6ZV9yZXF1ZXN0KDYwLCAtMSkKKyAgICAgICAgc2VsZi5wcm94eV90YWJsZS5hdHRhY2gocG9ydF9lbnRyeSwgMywgNCwgbGluZSwgbGluZSsxLCB5cGFkZGluZz00KQorCisgICAgICAgIGRldGFpbHNfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJEZXRhaWxzIikKKyAgICAgICAgZGV0YWlsc19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuZGV0YWlsc19jYiwgcGFyZW50LCBwcm90b2NvbCkKKyAgICAgICAgc2VsZi5wcm94eV90YWJsZS5hdHRhY2goZGV0YWlsc19idXR0b24sIDQsIDUsIGxpbmUsIGxpbmUrMSwgeHBhZGRpbmc9NCwgeW9wdGlvbnM9Z3RrLkVYUEFORCkKKworICAgICAgICByZXR1cm4gcHJveHlfZW50cnksIHBvcnRfZW50cnksIGRldGFpbHNfYnV0dG9uCisKKyAgICBkZWYgcmVmcmVzaF9wcm94eV9jb21wb25lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLnNhbWVfY2hlY2tib3guc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5KQorCisgICAgICAgIHNlbGYuaHR0cF9wcm94eS5zZXRfdGV4dChzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9ob3N0X29ubHkoImh0dHAiKSkKKyAgICAgICAgc2VsZi5odHRwX3Byb3h5LnNldF9lZGl0YWJsZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5KQorICAgICAgICBzZWxmLmh0dHBfcHJveHkuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5KQorICAgICAgICBzZWxmLmh0dHBfcHJveHlfcG9ydC5zZXRfdGV4dChzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wb3J0X29ubHkoImh0dHAiKSkKKyAgICAgICAgc2VsZi5odHRwX3Byb3h5X3BvcnQuc2V0X2VkaXRhYmxlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkpCisgICAgICAgIHNlbGYuaHR0cF9wcm94eV9wb3J0LnNldF9zZW5zaXRpdmUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSkKKyAgICAgICAgc2VsZi5odHRwX3Byb3h5X2RldGFpbHMuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5KQorCisgICAgICAgIHNlbGYuaHR0cHNfcHJveHkuc2V0X3RleHQoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfaG9zdF9vbmx5KCJodHRwcyIpKQorICAgICAgICBzZWxmLmh0dHBzX3Byb3h5LnNldF9lZGl0YWJsZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5odHRwc19wcm94eS5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmh0dHBzX3Byb3h5X3BvcnQuc2V0X3RleHQoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcG9ydF9vbmx5KCJodHRwcyIpKQorICAgICAgICBzZWxmLmh0dHBzX3Byb3h5X3BvcnQuc2V0X2VkaXRhYmxlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmh0dHBzX3Byb3h5X3BvcnQuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5odHRwc19wcm94eV9kZXRhaWxzLnNldF9zZW5zaXRpdmUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisKKyAgICAgICAgc2VsZi5mdHBfcHJveHkuc2V0X3RleHQoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfaG9zdF9vbmx5KCJmdHAiKSkKKyAgICAgICAgc2VsZi5mdHBfcHJveHkuc2V0X2VkaXRhYmxlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmZ0cF9wcm94eS5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmZ0cF9wcm94eV9wb3J0LnNldF90ZXh0KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3BvcnRfb25seSgiZnRwIikpCisgICAgICAgIHNlbGYuZnRwX3Byb3h5X3BvcnQuc2V0X2VkaXRhYmxlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmZ0cF9wcm94eV9wb3J0LnNldF9zZW5zaXRpdmUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisgICAgICAgIHNlbGYuZnRwX3Byb3h5X2RldGFpbHMuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKworICAgICAgICBzZWxmLnNvY2tzX3Byb3h5LnNldF90ZXh0KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX2hvc3Rfb25seSgic29ja3MiKSkKKyAgICAgICAgc2VsZi5zb2Nrc19wcm94eS5zZXRfZWRpdGFibGUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisgICAgICAgIHNlbGYuc29ja3NfcHJveHkuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5zb2Nrc19wcm94eV9wb3J0LnNldF90ZXh0KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3BvcnRfb25seSgic29ja3MiKSkKKyAgICAgICAgc2VsZi5zb2Nrc19wcm94eV9wb3J0LnNldF9lZGl0YWJsZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5zb2Nrc19wcm94eV9wb3J0LnNldF9zZW5zaXRpdmUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisgICAgICAgIHNlbGYuc29ja3NfcHJveHlfZGV0YWlscy5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorCisgICAgICAgIHNlbGYuY3ZzX3Byb3h5LnNldF90ZXh0KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX2hvc3Rfb25seSgiY3ZzIikpCisgICAgICAgIHNlbGYuY3ZzX3Byb3h5LnNldF9lZGl0YWJsZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5jdnNfcHJveHkuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5jdnNfcHJveHlfcG9ydC5zZXRfdGV4dChzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wb3J0X29ubHkoImN2cyIpKQorICAgICAgICBzZWxmLmN2c19wcm94eV9wb3J0LnNldF9lZGl0YWJsZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5jdnNfcHJveHlfcG9ydC5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmN2c19wcm94eV9kZXRhaWxzLnNldF9zZW5zaXRpdmUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisKKyAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHk6CisgICAgICAgICAgICBpZiBzZWxmLmh0dHBfcHJveHkuZ2V0X3RleHQoKToKKyAgICAgICAgICAgICAgICBbdy5zZXRfdGV4dChzZWxmLmh0dHBfcHJveHkuZ2V0X3RleHQoKSkgZm9yIHcgaW4gc2VsZi5zYW1lX3Byb3h5X2FkZHJlc3Nlc10KKyAgICAgICAgICAgIGlmIHNlbGYuaHR0cF9wcm94eV9wb3J0LmdldF90ZXh0KCk6CisgICAgICAgICAgICAgICAgW3cuc2V0X3RleHQoc2VsZi5odHRwX3Byb3h5X3BvcnQuZ2V0X3RleHQoKSkgZm9yIHcgaW4gc2VsZi5zYW1lX3Byb3h5X3BvcnRzXQorCisgICAgZGVmIHByb3h5X2NoZWNrYm94X3RvZ2dsZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSA9IHNlbGYucHJveHlfY2hlY2tib3guZ2V0X2FjdGl2ZSgpCisgICAgICAgIGlmIG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5OgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5zYW1lX2NoZWNrYm94LnNldF9hY3RpdmUoc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpCisgICAgICAgIHNlbGYuc2F2ZV9wcm94eV9kYXRhKCkKKyAgICAgICAgc2VsZi5yZWZyZXNoX3Byb3h5X2NvbXBvbmVudHMoKQorCisgICAgZGVmIHNhbWVfY2hlY2tib3hfdG9nZ2xlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSA9IHNlbGYuc2FtZV9jaGVja2JveC5nZXRfYWN0aXZlKCkKKyAgICAgICAgc2VsZi5zYXZlX3Byb3h5X2RhdGEoKQorICAgICAgICBzZWxmLnJlZnJlc2hfcHJveHlfY29tcG9uZW50cygpCisKKyAgICBkZWYgc2F2ZV9wcm94eV9kYXRhKHNlbGYpOgorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc3BsaXRfcHJveHkoImh0dHAiLCBzZWxmLmh0dHBfcHJveHkuZ2V0X3RleHQoKSArICI6IiArIHNlbGYuaHR0cF9wcm94eV9wb3J0LmdldF90ZXh0KCkpCisgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5OgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNwbGl0X3Byb3h5KCJodHRwcyIsIHNlbGYuaHR0cF9wcm94eS5nZXRfdGV4dCgpICsgIjoiICsgc2VsZi5odHRwX3Byb3h5X3BvcnQuZ2V0X3RleHQoKSkKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zcGxpdF9wcm94eSgiZnRwIiwgc2VsZi5odHRwX3Byb3h5LmdldF90ZXh0KCkgKyAiOiIgKyBzZWxmLmh0dHBfcHJveHlfcG9ydC5nZXRfdGV4dCgpKQorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNwbGl0X3Byb3h5KCJzb2NrcyIsIHNlbGYuaHR0cF9wcm94eS5nZXRfdGV4dCgpICsgIjoiICsgc2VsZi5odHRwX3Byb3h5X3BvcnQuZ2V0X3RleHQoKSkKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zcGxpdF9wcm94eSgiY3ZzIiwgc2VsZi5odHRwX3Byb3h5LmdldF90ZXh0KCkgKyAiOiIgKyBzZWxmLmh0dHBfcHJveHlfcG9ydC5nZXRfdGV4dCgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNwbGl0X3Byb3h5KCJodHRwcyIsIHNlbGYuaHR0cHNfcHJveHkuZ2V0X3RleHQoKSArICI6IiArIHNlbGYuaHR0cHNfcHJveHlfcG9ydC5nZXRfdGV4dCgpKQorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNwbGl0X3Byb3h5KCJmdHAiLCBzZWxmLmZ0cF9wcm94eS5nZXRfdGV4dCgpICsgIjoiICsgc2VsZi5mdHBfcHJveHlfcG9ydC5nZXRfdGV4dCgpKQorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNwbGl0X3Byb3h5KCJzb2NrcyIsIHNlbGYuc29ja3NfcHJveHkuZ2V0X3RleHQoKSArICI6IiArIHNlbGYuc29ja3NfcHJveHlfcG9ydC5nZXRfdGV4dCgpKQorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNwbGl0X3Byb3h5KCJjdnMiLCBzZWxmLmN2c19wcm94eS5nZXRfdGV4dCgpICsgIjoiICsgc2VsZi5jdnNfcHJveHlfcG9ydC5nZXRfdGV4dCgpKSAgICAgICAKKworICAgIGRlZiByZXNwb25zZV9jYihzZWxmLCBkaWFsb2csIHJlc3BvbnNlX2lkKToKKyAgICAgICAgaWYgcmVzcG9uc2VfaWQgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIGlmIHNlbGYucHJveHlfY2hlY2tib3guZ2V0X2FjdGl2ZSgpOgorICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCBhbGwgcHJveHkgZW50cmllcyBoYXZlIGEgY29ycmVzcG9uZGluZyBwb3J0CisgICAgICAgICAgICAgICAgZm9yIHByb3h5LCBwb3J0IGluIHppcChzZWxmLmFsbF9wcm94eV9hZGRyZXNzZXMsIHNlbGYuYWxsX3Byb3h5X3BvcnRzKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJveHkuZ2V0X3RleHQoKSBhbmQgbm90IHBvcnQuZ2V0X3RleHQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxibCA9ICI8Yj5FbnRlciBhbGwgcG9ydCBudW1iZXJzPC9iPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJQcm94eSBzZXJ2ZXJzIHJlcXVpcmUgYSBwb3J0IG51bWJlci4gUGxlYXNlIG1ha2Ugc3VyZSB5b3UgaGF2ZSBlbnRlcmVkIGEgcG9ydCBudW1iZXIgZm9yIGVhY2ggcHJveHkgc2VydmVyLiIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuTUVTU0FHRV9XQVJOSU5HLCBtc2cpCisgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICAgICAgICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVtaXRfc3RvcF9ieV9uYW1lKCJyZXNwb25zZSIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uZGxkaXIgPSBzZWxmLmRsZGlyX3RleHQuZ2V0X3RleHQoKQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc3N0YXRlZGlyID0gc2VsZi5zc3RhdGVkaXJfdGV4dC5nZXRfdGV4dCgpCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zc3RhdGVtaXJyb3IgPSAiIgorICAgICAgICBmb3IgbWlycm9yIGluIHNlbGYuc3N0YXRlbWlycm9yc19saXN0OgorICAgICAgICAgICAgaWYgbWlycm9yWzFdICE9ICIiIGFuZCBtaXJyb3JbMl0uc3RhcnRzd2l0aCgiZmlsZTovLyIpOgorICAgICAgICAgICAgICAgIHNtaXJyb3IgPSBtaXJyb3JbMl0gKyAiICIgKyBtaXJyb3JbMV0gKyAiIFxcbiAiCisgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNzdGF0ZW1pcnJvciArPSBzbWlycm9yCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5iYnRocmVhZCA9IHNlbGYuYmJfc3Bpbm5lci5nZXRfdmFsdWVfYXNfaW50KCkKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnBtYWtlID0gc2VsZi5wbWFrZV9zcGlubmVyLmdldF92YWx1ZV9hc19pbnQoKQorICAgICAgICBzZWxmLnNhdmVfcHJveHlfZGF0YSgpCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5leHRyYV9zZXR0aW5nID0ge30KKyAgICAgICAgaXQgPSBzZWxmLnNldHRpbmdfc3RvcmUuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIGtleSA9IHNlbGYuc2V0dGluZ19zdG9yZS5nZXRfdmFsdWUoaXQsIDApCisgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuc2V0dGluZ19zdG9yZS5nZXRfdmFsdWUoaXQsIDEpCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uZXh0cmFfc2V0dGluZ1trZXldID0gdmFsdWUKKyAgICAgICAgICAgIGl0ID0gc2VsZi5zZXR0aW5nX3N0b3JlLml0ZXJfbmV4dChpdCkKKworICAgICAgICBtZDUgPSBzZWxmLmNvbmZpZ19tZDUoKQorICAgICAgICBzZWxmLnNldHRpbmdzX2NoYW5nZWQgPSAoc2VsZi5tZDUgIT0gbWQ1KQorICAgICAgICBzZWxmLnByb3h5X3NldHRpbmdzX2NoYW5nZWQgPSAoc2VsZi5wcm94eV9tZDUgIT0gc2VsZi5jb25maWdfcHJveHlfbWQ1KCkpCisKKyAgICBkZWYgY3JlYXRlX2J1aWxkX2Vudmlyb25tZW50X3BhZ2Uoc2VsZik6CisgICAgICAgIGFkdmFuY2VkX3Zib3ggPSBndGsuVkJveChGYWxzZSwgNikKKyAgICAgICAgYWR2YW5jZWRfdmJveC5zZXRfYm9yZGVyX3dpZHRoKDYpCisKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgnPHNwYW4gd2VpZ2h0PSJib2xkIj5QYXJhbGxlbCB0aHJlYWRzPC9zcGFuPicpLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBsYWJlbCA9IHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgiQml0QmFrZSBwYXJhbGxlbCB0aHJlYWRzIikKKyAgICAgICAgdG9vbHRpcCA9ICJTZXRzIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB0aGF0IEJpdEJha2UgdGFza3MgY2FuIHNpbXVsdGFuZW91c2x5IHJ1bi4gU2VlIHRoZSA8YSBocmVmPVwiIgorICAgICAgICB0b29sdGlwICs9ICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9jdXJyZW50L3Bva3ktcmVmLW1hbnVhbC8iCisgICAgICAgIHRvb2x0aXAgKz0gInBva3ktcmVmLW1hbnVhbC5odG1sI3Zhci1CQl9OVU1CRVJfVEhSRUFEU1wiPlBva3kgcmVmZXJlbmNlIG1hbnVhbDwvYT4gZm9yIGluZm9ybWF0aW9uIgorICAgICAgICBiYnRocmVhZF93aWRnZXQsIHNlbGYuYmJfc3Bpbm5lciA9IHNlbGYuZ2VuX3NwaW5uZXJfd2lkZ2V0KHNlbGYuY29uZmlndXJhdGlvbi5iYnRocmVhZCwgMSwgc2VsZi5tYXhfdGhyZWFkcywiPGI+Qml0QmFrZSBwcmFsbGFsZWwgdGhyZWFkczwvYj4iICsgIioiICsgdG9vbHRpcCkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGJidGhyZWFkX3dpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBsYWJlbCA9IHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgiTWFrZSBwYXJhbGxlbCB0aHJlYWRzIikKKyAgICAgICAgdG9vbHRpcCA9ICJTZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHRoZSBob3N0IGNhbiB1c2UgZHVyaW5nIHRoZSBidWlsZC4gU2VlIHRoZSA8YSBocmVmPVwiIgorICAgICAgICB0b29sdGlwICs9ICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9jdXJyZW50L3Bva3ktcmVmLW1hbnVhbC8iCisgICAgICAgIHRvb2x0aXAgKz0gInBva3ktcmVmLW1hbnVhbC5odG1sI3Zhci1QQVJBTExFTF9NQUtFXCI+UG9reSByZWZlcmVuY2UgbWFudWFsPC9hPiBmb3IgaW5mb3JtYXRpb24iCisgICAgICAgIHBtYWtlX3dpZGdldCwgc2VsZi5wbWFrZV9zcGlubmVyID0gc2VsZi5nZW5fc3Bpbm5lcl93aWRnZXQoc2VsZi5jb25maWd1cmF0aW9uLnBtYWtlLCAxLCBzZWxmLm1heF90aHJlYWRzLCI8Yj5NYWtlIHBhcmFsbGVsIHRocmVhZHM8L2I+IiArICIqIiArIHRvb2x0aXApCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQobGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChwbWFrZV93aWRnZXQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCc8c3BhbiB3ZWlnaHQ9ImJvbGQiPkRvd25sb2FkZWQgc291cmNlIGNvZGU8L3NwYW4+JyksIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc3ViX3Zib3ggPSBndGsuVkJveChGYWxzZSwgNikKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHN1Yl92Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCJEb3dubG9hZHMgZGlyZWN0b3J5IikKKyAgICAgICAgdG9vbHRpcCA9ICJTZWxlY3QgYSBmb2xkZXIgdGhhdCBjYWNoZXMgdGhlIHVwc3RyZWFtIHByb2plY3Qgc291cmNlIGNvZGUiCisgICAgICAgIGRsZGlyX3dpZGdldCwgc2VsZi5kbGRpcl90ZXh0ID0gc2VsZi5nZW5fZW50cnlfd2lkZ2V0KHNlbGYuY29uZmlndXJhdGlvbi5kbGRpciwgc2VsZiwiPGI+RG93bmxvYWRlZCBzb3VyY2UgY29kZTwvYj4iICsgIioiICsgdG9vbHRpcCkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGRsZGlyX3dpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHJldHVybiBhZHZhbmNlZF92Ym94CisKKyAgICBkZWYgY3JlYXRlX3NoYXJlZF9zdGF0ZV9wYWdlKHNlbGYpOgorICAgICAgICBhZHZhbmNlZF92Ym94ID0gZ3RrLlZCb3goRmFsc2UpCisgICAgICAgIGFkdmFuY2VkX3Zib3guc2V0X2JvcmRlcl93aWR0aCgxMikKKworICAgICAgICBzdWJfdmJveCA9IGd0ay5WQm94KEZhbHNlKQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc3ViX3Zib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz0yNCkKKyAgICAgICAgY29udGVudCA9ICI8c3Bhbj5TaGFyZWQgc3RhdGUgZGlyZWN0b3J5PC9zcGFuPiIKKyAgICAgICAgdG9vbHRpcCA9ICJTZWxlY3QgYSBmb2xkZXIgdGhhdCBjYWNoZXMgeW91ciBwcmVidWlsdCByZXN1bHRzIgorICAgICAgICBsYWJlbCA9IHNlbGYuZ2VuX2xhYmVsX2luZm9fd2lkZ2V0KGNvbnRlbnQsIjxiPlNoYXJlZCBzdGF0ZSBkaXJlY3Rvcnk8L2I+IiArICIqIiArIHRvb2x0aXApCisgICAgICAgIHNzdGF0ZWRpcl93aWRnZXQsIHNlbGYuc3N0YXRlZGlyX3RleHQgPSBzZWxmLmdlbl9lbnRyeV93aWRnZXQoc2VsZi5jb25maWd1cmF0aW9uLnNzdGF0ZWRpciwgc2VsZikKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHNzdGF0ZWRpcl93aWRnZXQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz02KQorCisgICAgICAgIGNvbnRlbnQgPSAiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPlNoYXJlZCBzdGF0ZSBtaXJyb3JzPC9zcGFuPiIKKyAgICAgICAgdG9vbHRpcCA9ICJVUkxzIHBvaW50aW5nIHRvIHByZS1idWlsdCBtaXJyb3JzIHRoYXQgd2lsbCBzcGVlZCB5b3VyIGJ1aWxkLiAiCisgICAgICAgIHRvb2x0aXAgKz0gIlNlbGVjdCB0aGUgXCdTdGFuZGFyZFwnIGNvbmZpZ3VyYXRpb24gaWYgdGhlIHN0cnVjdHVyZSBvZiB5b3VyICIKKyAgICAgICAgdG9vbHRpcCArPSAibWlycm9yIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB5b3VyIGxvY2FsIHNoYXJlZCBzdGF0ZSBkaXJlY3RvcnkuICIKKyAgICAgICAgdG9vbHRpcCArPSAiRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc2hhcmVkIHN0YXRlIG1pcnJvcnMsIGNoZWNrIHRoZSA8YSBocmVmPVwiIgorICAgICAgICB0b29sdGlwICs9ICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9jdXJyZW50L3Bva3ktcmVmLW1hbnVhbC8iCisgICAgICAgIHRvb2x0aXAgKz0gInBva3ktcmVmLW1hbnVhbC5odG1sI3NoYXJlZC1zdGF0ZVwiPllvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbDwvYT4uIgorICAgICAgICB0YWJsZSA9IHNlbGYuZ2VuX2xhYmVsX2luZm9fd2lkZ2V0KGNvbnRlbnQsIjxiPlNoYXJlZCBzdGF0ZSBtaXJyb3JzPC9iPiIgKyAiKiIgKyB0b29sdGlwKQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQodGFibGUsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz02KQorCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzdWJfdmJveCwgZ3RrLlRSVUUsIGd0ay5UUlVFLCAwKQorCisgICAgICAgIGlmIHNlbGYuc3N0YXRlbWlycm9yc19jaGFuZ2VkID09IDA6CisgICAgICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfY2hhbmdlZCA9IDEKKyAgICAgICAgICAgIHNzdGF0ZW1pcnJvcnMgPSBzZWxmLmNvbmZpZ3VyYXRpb24uc3N0YXRlbWlycm9yCisgICAgICAgICAgICBpZiBzc3RhdGVtaXJyb3JzID09ICIiOgorICAgICAgICAgICAgICAgIHNtX2xpc3QgPSBbIlN0YW5kYXJkIiwgIiIsICJmaWxlOi8vKC4qKSJdCisgICAgICAgICAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX2xpc3QuYXBwZW5kKHNtX2xpc3QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNzdGF0ZW1pcnJvcnMgPSBbeCBmb3IgeCBpbiBzc3RhdGVtaXJyb3JzLnNwbGl0KCdcXG4nKV0KKyAgICAgICAgICAgICAgICBmb3Igc3N0YXRlbWlycm9yIGluIHNzdGF0ZW1pcnJvcnM6CisgICAgICAgICAgICAgICAgICAgIHNzdGF0ZW1pcnJvcl9maWVsZHMgPSBbeCBmb3IgeCBpbiBzc3RhdGVtaXJyb3Iuc3BsaXQoJyAnKSBpZiB4LnN0cmlwKCldCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihzc3RhdGVtaXJyb3JfZmllbGRzKSA9PSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3N0YXRlbWlycm9yX2ZpZWxkc1swXSA9PSAiZmlsZTovLyguKikiIG9yIHNzdGF0ZW1pcnJvcl9maWVsZHNbMF0gPT0gImZpbGU6Ly8uKiI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21fbGlzdCA9IFsiU3RhbmRhcmQiLCBzc3RhdGVtaXJyb3JfZmllbGRzWzFdLCBzc3RhdGVtaXJyb3JfZmllbGRzWzBdXQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbV9saXN0ID0gWyJDdXN0b20iLCBzc3RhdGVtaXJyb3JfZmllbGRzWzFdLCBzc3RhdGVtaXJyb3JfZmllbGRzWzBdXQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX2xpc3QuYXBwZW5kKHNtX2xpc3QpCisKKyAgICAgICAgc3N0YXRlbWlycm9yc193aWRnZXQsIHNzdGF0ZW1pcnJvcnNfc3RvcmUgPSBzZWxmLmdlbl9zaGFyZWRfc3N0YXRlX3dpZGdldChzZWxmLnNzdGF0ZW1pcnJvcnNfbGlzdCwgc2VsZikKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChzc3RhdGVtaXJyb3JzX3dpZGdldCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICB0YWJsZSA9IGd0ay5UYWJsZSgxLCAxMCwgRmFsc2UpCisgICAgICAgIHRhYmxlLnNldF9jb2xfc3BhY2luZ3MoNikKKyAgICAgICAgYWRkX21pcnJvcl9idXR0b24gPSBIb2JBbHRCdXR0b24oIkFkZCBtaXJyb3IiKQorICAgICAgICBhZGRfbWlycm9yX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5hZGRfbWlycm9yKQorICAgICAgICBhZGRfbWlycm9yX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDEyMCwzMCkKKyAgICAgICAgdGFibGUuYXR0YWNoKGFkZF9taXJyb3JfYnV0dG9uLCAxLCAyLCAwLCAxLCB4b3B0aW9ucz1ndGsuU0hSSU5LKQorCisgICAgICAgIHNlbGYuZGVsZXRlX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiRGVsZXRlIG1pcnJvciIpCisgICAgICAgIHNlbGYuZGVsZXRlX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5kZWxldGVfY2IpCisgICAgICAgIHNlbGYuZGVsZXRlX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDEyMCwgMzApCisgICAgICAgIHRhYmxlLmF0dGFjaChzZWxmLmRlbGV0ZV9idXR0b24sIDMsIDQsIDAsIDEsIHhvcHRpb25zPWd0ay5TSFJJTkspCisKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHRhYmxlLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UsIHBhZGRpbmc9NikKKworICAgICAgICByZXR1cm4gYWR2YW5jZWRfdmJveAorCisgICAgZGVmIGdlbl9zaGFyZWRfc3N0YXRlX3dpZGdldChzZWxmLCBzc3RhdGVtaXJyb3JzX2xpc3QsIHdpbmRvdyk6CisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSkKKworICAgICAgICBzc3RhdGVtaXJyb3JzX3N0b3JlID0gZ3RrLkxpc3RTdG9yZShzdHIsIHN0ciwgc3RyKQorICAgICAgICBmb3Igc3N0YXRlbWlycm9yIGluIHNzdGF0ZW1pcnJvcnNfbGlzdDoKKyAgICAgICAgICAgIHNzdGF0ZW1pcnJvcnNfc3RvcmUuYXBwZW5kKHNzdGF0ZW1pcnJvcikKKworICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYgPSBndGsuVHJlZVZpZXcoKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuc2V0X3J1bGVzX2hpbnQoVHJ1ZSkKKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX3R2LnNldF9oZWFkZXJzX3Zpc2libGUoVHJ1ZSkKKyAgICAgICAgdHJlZV9zZWxlY3Rpb24gPSBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuZ2V0X3NlbGVjdGlvbigpCisgICAgICAgIHRyZWVfc2VsZWN0aW9uLnNldF9tb2RlKGd0ay5TRUxFQ1RJT05fU0lOR0xFKQorCisgICAgICAgICMgQWxsb3cgZW5hYmxlIGRyYWcgYW5kIGRyb3Agb2Ygcm93cyBpbmNsdWRpbmcgcm93IG1vdmUKKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX3R2LmVuYWJsZV9tb2RlbF9kcmFnX3NvdXJjZSggZ3RrLmdkay5CVVRUT04xX01BU0ssCisgICAgICAgICAgICBzZWxmLlRBUkdFVFMsCisgICAgICAgICAgICBndGsuZ2RrLkFDVElPTl9ERUZBVUxUfAorICAgICAgICAgICAgZ3RrLmdkay5BQ1RJT05fTU9WRSkKKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX3R2LmVuYWJsZV9tb2RlbF9kcmFnX2Rlc3Qoc2VsZi5UQVJHRVRTLAorICAgICAgICAgICAgZ3RrLmdkay5BQ1RJT05fREVGQVVMVCkKKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX3R2LmNvbm5lY3QoImRyYWdfZGF0YV9nZXQiLCBzZWxmLmRyYWdfZGF0YV9nZXRfY2IpCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc190di5jb25uZWN0KCJkcmFnX2RhdGFfcmVjZWl2ZWQiLCBzZWxmLmRyYWdfZGF0YV9yZWNlaXZlZF9jYikKKworCisgICAgICAgIHNlbGYuc2Nyb2xsID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgc2VsZi5zY3JvbGwuc2V0X3BvbGljeShndGsuUE9MSUNZX05FVkVSLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKyAgICAgICAgc2VsZi5zY3JvbGwuc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCisgICAgICAgIHNlbGYuc2Nyb2xsLmNvbm5lY3QoJ3NpemUtYWxsb2NhdGUnLCBzZWxmLnNjcm9sbF9jaGFuZ2VkKQorICAgICAgICBzZWxmLnNjcm9sbC5hZGQoc2VsZi5zc3RhdGVtaXJyb3JzX3R2KQorCisgICAgICAgICNsaXN0IHN0b3JlIGZvciBjZWxsIHJlbmRlcmVyCisgICAgICAgIG0gPSBndGsuTGlzdFN0b3JlKGdvYmplY3QuVFlQRV9TVFJJTkcpCisgICAgICAgIG0uYXBwZW5kKFsiU3RhbmRhcmQiXSkKKyAgICAgICAgbS5hcHBlbmQoWyJDdXN0b20iXSkKKworICAgICAgICBjZWxsMCA9IGd0ay5DZWxsUmVuZGVyZXJDb21ibygpCisgICAgICAgIGNlbGwwLnNldF9wcm9wZXJ0eSgibW9kZWwiLG0pCisgICAgICAgIGNlbGwwLnNldF9wcm9wZXJ0eSgidGV4dC1jb2x1bW4iLCAwKQorICAgICAgICBjZWxsMC5zZXRfcHJvcGVydHkoImVkaXRhYmxlIiwgVHJ1ZSkKKyAgICAgICAgY2VsbDAuc2V0X3Byb3BlcnR5KCJoYXMtZW50cnkiLCBGYWxzZSkKKyAgICAgICAgY29sMCA9IGd0ay5UcmVlVmlld0NvbHVtbigiQ29uZmlndXJhdGlvbiIpCisgICAgICAgIGNvbDAucGFja19zdGFydChjZWxsMCwgRmFsc2UpCisgICAgICAgIGNvbDAuYWRkX2F0dHJpYnV0ZShjZWxsMCwgInRleHQiLCAwKQorICAgICAgICBjb2wwLnNldF9jZWxsX2RhdGFfZnVuYyhjZWxsMCwgc2VsZi5jb25maWd1cmF0aW9uX2ZpZWxkKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuYXBwZW5kX2NvbHVtbihjb2wwKQorCisgICAgICAgIGNlbGwwLmNvbm5lY3QoImVkaXRlZCIsIHNlbGYuY29tYm9fY2hhbmdlZCwgc3N0YXRlbWlycm9yc19zdG9yZSkKKworICAgICAgICBzZWxmLmNlbGwxID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorICAgICAgICBzZWxmLmNlbGwxLnNldF9wYWRkaW5nKDUsMikKKyAgICAgICAgY29sMSA9IGd0ay5UcmVlVmlld0NvbHVtbignUmVnZXgnLCBzZWxmLmNlbGwxKQorICAgICAgICBjb2wxLnNldF9jZWxsX2RhdGFfZnVuYyhzZWxmLmNlbGwxLCBzZWxmLnJlZ2V4X2ZpZWxkKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuYXBwZW5kX2NvbHVtbihjb2wxKQorCisgICAgICAgIHNlbGYuY2VsbDEuY29ubmVjdCgiZWRpdGVkIiwgc2VsZi5yZWdleF9jaGFuZ2VkLCBzc3RhdGVtaXJyb3JzX3N0b3JlKQorCisgICAgICAgIGNlbGwyID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorICAgICAgICBjZWxsMi5zZXRfcGFkZGluZyg1LDIpCisgICAgICAgIGNlbGwyLnNldF9wcm9wZXJ0eSgiZWRpdGFibGUiLCBUcnVlKQorICAgICAgICBjb2wyID0gZ3RrLlRyZWVWaWV3Q29sdW1uKCdVUkwnLCBjZWxsMikKKyAgICAgICAgY29sMi5zZXRfY2VsbF9kYXRhX2Z1bmMoY2VsbDIsIHNlbGYudXJsX2ZpZWxkKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuYXBwZW5kX2NvbHVtbihjb2wyKQorCisgICAgICAgIGNlbGwyLmNvbm5lY3QoImVkaXRlZCIsIHNlbGYudXJsX2NoYW5nZWQsIHNzdGF0ZW1pcnJvcnNfc3RvcmUpCisKKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX3R2LnNldF9tb2RlbChzc3RhdGVtaXJyb3JzX3N0b3JlKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuc2V0X2N1cnNvcihzZWxmLnNlbGVjdGVkX21pcnJvcl9yb3cpCisgICAgICAgIGhib3gucGFja19zdGFydChzZWxmLnNjcm9sbCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgaGJveC5zaG93X2FsbCgpCisKKyAgICAgICAgcmV0dXJuIGhib3gsIHNzdGF0ZW1pcnJvcnNfc3RvcmUKKworICAgIGRlZiBkcmFnX2RhdGFfZ2V0X2NiKHNlbGYsIHRyZWV2aWV3LCBjb250ZXh0LCBzZWxlY3Rpb24sIHRhcmdldF9pZCwgZXRpbWUpOgorICAgICAgICB0cmVlc2VsZWN0aW9uID0gdHJlZXZpZXcuZ2V0X3NlbGVjdGlvbigpCisgICAgICAgIG1vZGVsLCBpdGVyID0gdHJlZXNlbGVjdGlvbi5nZXRfc2VsZWN0ZWQoKQorICAgICAgICBkYXRhID0gbW9kZWwuZ2V0X3N0cmluZ19mcm9tX2l0ZXIoaXRlcikKKyAgICAgICAgc2VsZWN0aW9uLnNldChzZWxlY3Rpb24udGFyZ2V0LCA4LCBkYXRhKQorCisgICAgZGVmIGRyYWdfZGF0YV9yZWNlaXZlZF9jYihzZWxmLCB0cmVldmlldywgY29udGV4dCwgeCwgeSwgc2VsZWN0aW9uLCBpbmZvLCBldGltZSk6CisgICAgICAgIG1vZGVsID0gdHJlZXZpZXcuZ2V0X21vZGVsKCkKKyAgICAgICAgZGF0YSA9IFtdCisgICAgICAgIHRyZWVfaXRlciA9IG1vZGVsLmdldF9pdGVyX2Zyb21fc3RyaW5nKHNlbGVjdGlvbi5kYXRhKQorICAgICAgICBkYXRhLmFwcGVuZChtb2RlbC5nZXRfdmFsdWUodHJlZV9pdGVyLCAwKSkKKyAgICAgICAgZGF0YS5hcHBlbmQobW9kZWwuZ2V0X3ZhbHVlKHRyZWVfaXRlciwgMSkpCisgICAgICAgIGRhdGEuYXBwZW5kKG1vZGVsLmdldF92YWx1ZSh0cmVlX2l0ZXIsIDIpKQorCisgICAgICAgIGRyb3BfaW5mbyA9IHRyZWV2aWV3LmdldF9kZXN0X3Jvd19hdF9wb3MoeCwgeSkKKyAgICAgICAgaWYgZHJvcF9pbmZvOgorICAgICAgICAgICAgcGF0aCwgcG9zaXRpb24gPSBkcm9wX2luZm8KKyAgICAgICAgICAgIGl0ZXIgPSBtb2RlbC5nZXRfaXRlcihwYXRoKQorICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09IGd0ay5UUkVFX1ZJRVdfRFJPUF9CRUZPUkUgb3IgcG9zaXRpb24gPT0gZ3RrLlRSRUVfVklFV19EUk9QX0lOVE9fT1JfQkVGT1JFKToKKyAgICAgICAgICAgICAgICBtb2RlbC5pbnNlcnRfYmVmb3JlKGl0ZXIsIGRhdGEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1vZGVsLmluc2VydF9hZnRlcihpdGVyLCBkYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kZWwuYXBwZW5kKGRhdGEpCisgICAgICAgIGlmIGNvbnRleHQuYWN0aW9uID09IGd0ay5nZGsuQUNUSU9OX01PVkU6CisgICAgICAgICAgICBjb250ZXh0LmZpbmlzaChUcnVlLCBUcnVlLCBldGltZSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgZGVsZXRlX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGVjdGlvbiA9IHNlbGYuc3N0YXRlbWlycm9yc190di5nZXRfc2VsZWN0aW9uKCkKKyAgICAgICAgdHJlZV9tb2RlbCwgdHJlZV9pdGVyID0gc2VsZWN0aW9uLmdldF9zZWxlY3RlZCgpCisgICAgICAgIGluZGV4ID0gaW50KHRyZWVfbW9kZWwuZ2V0X3N0cmluZ19mcm9tX2l0ZXIodHJlZV9pdGVyKSkKKyAgICAgICAgaWYgaW5kZXggPT0gMDoKKyAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRfbWlycm9yX3JvdyA9IGluZGV4CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNlbGVjdGVkX21pcnJvcl9yb3cgPSBpbmRleCAtIDEKKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX2xpc3QucG9wKGluZGV4KQorICAgICAgICBzZWxmLnJlZnJlc2hfc2hhcmVkX3N0YXRlX3BhZ2UoKQorICAgICAgICBpZiBub3Qgc2VsZi5zc3RhdGVtaXJyb3JzX2xpc3Q6CisgICAgICAgICAgICBzZWxmLmRlbGV0ZV9idXR0b24uc2V0X3NlbnNpdGl2ZShGYWxzZSkKKworICAgIGRlZiBhZGRfbWlycm9yKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYubmV3X21pcnJvciA9IFRydWUKKyAgICAgICAgdG9vbHRpcCA9ICJTZWxlY3QgdGhlIHByZS1idWlsdCBtaXJyb3IgdGhhdCB3aWxsIHNwZWVkIHlvdXIgYnVpbGQiCisgICAgICAgIGluZGV4ID0gbGVuKHNlbGYuc3N0YXRlbWlycm9yc19saXN0KQorICAgICAgICBzZWxmLnNlbGVjdGVkX21pcnJvcl9yb3cgPSBpbmRleAorICAgICAgICBzbV9saXN0ID0gWyJTdGFuZGFyZCIsICIiLCAiZmlsZTovLyguKikiXQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfbGlzdC5hcHBlbmQoc21fbGlzdCkKKyAgICAgICAgc2VsZi5yZWZyZXNoX3NoYXJlZF9zdGF0ZV9wYWdlKCkKKworICAgIGRlZiBzY3JvbGxfY2hhbmdlZChzZWxmLCB3aWRnZXQsIGV2ZW50LCBkYXRhPU5vbmUpOgorICAgICAgICBpZiBzZWxmLm5ld19taXJyb3IgPT0gVHJ1ZToKKyAgICAgICAgICAgIGFkaiA9IHdpZGdldC5nZXRfdmFkanVzdG1lbnQoKQorICAgICAgICAgICAgYWRqLnNldF92YWx1ZShhZGoudXBwZXIgLSBhZGoucGFnZV9zaXplKQorICAgICAgICAgICAgc2VsZi5uZXdfbWlycm9yID0gRmFsc2UKKworICAgIGRlZiBjb21ib19jaGFuZ2VkKHNlbGYsIHdpZGdldCwgcGF0aCwgdGV4dCwgbW9kZWwpOgorICAgICAgICBtb2RlbFtwYXRoXVswXSA9IHRleHQKKyAgICAgICAgc2VsZWN0aW9uID0gc2VsZi5zc3RhdGVtaXJyb3JzX3R2LmdldF9zZWxlY3Rpb24oKQorICAgICAgICB0cmVlX21vZGVsLCB0cmVlX2l0ZXIgPSBzZWxlY3Rpb24uZ2V0X3NlbGVjdGVkKCkKKyAgICAgICAgaW5kZXggPSBpbnQodHJlZV9tb2RlbC5nZXRfc3RyaW5nX2Zyb21faXRlcih0cmVlX2l0ZXIpKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfbGlzdFtpbmRleF1bMF0gPSB0ZXh0CisKKyAgICBkZWYgcmVnZXhfY2hhbmdlZChzZWxmLCBjZWxsLCBwYXRoLCBuZXdfdGV4dCwgdXNlcl9kYXRhKToKKyAgICAgICAgdXNlcl9kYXRhW3BhdGhdWzJdID0gbmV3X3RleHQKKyAgICAgICAgc2VsZWN0aW9uID0gc2VsZi5zc3RhdGVtaXJyb3JzX3R2LmdldF9zZWxlY3Rpb24oKQorICAgICAgICB0cmVlX21vZGVsLCB0cmVlX2l0ZXIgPSBzZWxlY3Rpb24uZ2V0X3NlbGVjdGVkKCkKKyAgICAgICAgaW5kZXggPSBpbnQodHJlZV9tb2RlbC5nZXRfc3RyaW5nX2Zyb21faXRlcih0cmVlX2l0ZXIpKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfbGlzdFtpbmRleF1bMl0gPSBuZXdfdGV4dAorICAgICAgICByZXR1cm4KKworICAgIGRlZiB1cmxfY2hhbmdlZChzZWxmLCBjZWxsLCBwYXRoLCBuZXdfdGV4dCwgdXNlcl9kYXRhKToKKyAgICAgICAgaWYgbmV3X3RleHQhPSJFbnRlciB0aGUgbWlycm9yIFVSTCIgYW5kIG5ld190ZXh0IT0iTWF0Y2ggcmVnZXggYW5kIHJlcGxhY2UgaXQgd2l0aCB0aGlzIFVSTCI6CisgICAgICAgICAgICB1c2VyX2RhdGFbcGF0aF1bMV0gPSBuZXdfdGV4dAorICAgICAgICAgICAgc2VsZWN0aW9uID0gc2VsZi5zc3RhdGVtaXJyb3JzX3R2LmdldF9zZWxlY3Rpb24oKQorICAgICAgICAgICAgdHJlZV9tb2RlbCwgdHJlZV9pdGVyID0gc2VsZWN0aW9uLmdldF9zZWxlY3RlZCgpCisgICAgICAgICAgICBpbmRleCA9IGludCh0cmVlX21vZGVsLmdldF9zdHJpbmdfZnJvbV9pdGVyKHRyZWVfaXRlcikpCisgICAgICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfbGlzdFtpbmRleF1bMV0gPSBuZXdfdGV4dAorICAgICAgICByZXR1cm4KKworICAgIGRlZiBjb25maWd1cmF0aW9uX2ZpZWxkKHNlbGYsIGNvbHVtbiwgY2VsbCwgbW9kZWwsIGl0ZXIpOgorICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgndGV4dCcsIG1vZGVsLmdldF92YWx1ZShpdGVyLCAwKSkKKyAgICAgICAgaWYgbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIsIDApID09ICJTdGFuZGFyZCI6CisgICAgICAgICAgICBzZWxmLmNlbGwxLnNldF9wcm9wZXJ0eSgic2Vuc2l0aXZlIiwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmNlbGwxLnNldF9wcm9wZXJ0eSgiZWRpdGFibGUiLCBGYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY2VsbDEuc2V0X3Byb3BlcnR5KCJzZW5zaXRpdmUiLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5jZWxsMS5zZXRfcHJvcGVydHkoImVkaXRhYmxlIiwgVHJ1ZSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgcmVnZXhfZmllbGQoc2VsZiwgY29sdW1uLCBjZWxsLCBtb2RlbCwgaXRlcik6CisgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCd0ZXh0JywgbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIsIDIpKQorICAgICAgICByZXR1cm4KKworICAgIGRlZiB1cmxfZmllbGQoc2VsZiwgY29sdW1uLCBjZWxsLCBtb2RlbCwgaXRlcik6CisgICAgICAgIHRleHQgPSBtb2RlbC5nZXRfdmFsdWUoaXRlciwgMSkKKyAgICAgICAgaWYgdGV4dCA9PSAiIjoKKyAgICAgICAgICAgIGlmIG1vZGVsLmdldF92YWx1ZShpdGVyLCAwKSA9PSAiU3RhbmRhcmQiOgorICAgICAgICAgICAgICAgIHRleHQgPSAiRW50ZXIgdGhlIG1pcnJvciBVUkwiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRleHQgPSAiTWF0Y2ggcmVnZXggYW5kIHJlcGxhY2UgaXQgd2l0aCB0aGlzIFVSTCIKKyAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ3RleHQnLCB0ZXh0KQorICAgICAgICByZXR1cm4KKworICAgIGRlZiByZWZyZXNoX3NoYXJlZF9zdGF0ZV9wYWdlKHNlbGYpOgorICAgICAgICBwYWdlX251bSA9IHNlbGYubmIuZ2V0X2N1cnJlbnRfcGFnZSgpCisgICAgICAgIHNlbGYubmIucmVtb3ZlX3BhZ2UocGFnZV9udW0pOworICAgICAgICBzZWxmLm5iLmluc2VydF9wYWdlKHNlbGYuY3JlYXRlX3NoYXJlZF9zdGF0ZV9wYWdlKCksIGd0ay5MYWJlbCgiU2hhcmVkIHN0YXRlIikscGFnZV9udW0pCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorICAgICAgICBzZWxmLm5iLnNldF9jdXJyZW50X3BhZ2UocGFnZV9udW0pCisKKyAgICBkZWYgdGVzdF9wcm94eV9lbmRlZChzZWxmLCBwYXNzZWQpOgorICAgICAgICBzZWxmLnByb3h5X3Rlc3RfcnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuc2V0X3Rlc3RfcHJveHlfc3RhdGUoc2VsZi5URVNUX05FVFdPUktfUEFTU0VEIGlmIHBhc3NlZCBlbHNlIHNlbGYuVEVTVF9ORVRXT1JLX0ZBSUxFRCkKKyAgICAgICAgc2VsZi5zZXRfc2Vuc2l0aXZlKFRydWUpCisgICAgICAgIHNlbGYucmVmcmVzaF9wcm94eV9jb21wb25lbnRzKCkKKworICAgIGRlZiB0aW1lcl9mdW5jKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RfcHJveHlfcHJvZ3Jlc3MucHVsc2UoKQorICAgICAgICByZXR1cm4gc2VsZi5wcm94eV90ZXN0X3J1bm5pbmcKKworICAgIGRlZiB0ZXN0X25ldHdvcmtfYnV0dG9uX2NiKHNlbGYsIGIpOgorICAgICAgICBzZWxmLnNldF90ZXN0X3Byb3h5X3N0YXRlKHNlbGYuVEVTVF9ORVRXT1JLX1JVTk5JTkcpCisgICAgICAgIHNlbGYuc2V0X3NlbnNpdGl2ZShGYWxzZSkKKyAgICAgICAgc2VsZi5zYXZlX3Byb3h5X2RhdGEoKQorICAgICAgICBpZiBzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5ID09IFRydWU6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2h0dHBfcHJveHkoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcHJveHkoImh0dHAiKSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfaHR0cHNfcHJveHkoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcHJveHkoImh0dHBzIikpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2Z0cF9wcm94eShzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wcm94eSgiZnRwIikpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X3NvY2tzX3Byb3h5KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3Byb3h5KCJzb2NrcyIpKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9jdnNfcHJveHkoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfaG9zdF9vbmx5KCJjdnMiKSwgc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcG9ydF9vbmx5KCJjdnMiKSkKKyAgICAgICAgZWxpZiBzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5ID09IEZhbHNlOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9odHRwX3Byb3h5KCIiKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9odHRwc19wcm94eSgiIikKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfZnRwX3Byb3h5KCIiKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9zb2Nrc19wcm94eSgiIikKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfY3ZzX3Byb3h5KCIiLCAiIikKKyAgICAgICAgc2VsZi5wcm94eV90ZXN0X3JhbiA9IFRydWUKKyAgICAgICAgc2VsZi5wcm94eV90ZXN0X3J1bm5pbmcgPSBUcnVlCisgICAgICAgIGdvYmplY3QudGltZW91dF9hZGQoMTAwLCBzZWxmLnRpbWVyX2Z1bmMpCisgICAgICAgIHNlbGYuaGFuZGxlci50cmlnZ2VyX25ldHdvcmtfdGVzdCgpCisKKyAgICBkZWYgdGVzdF9wcm94eV9mb2N1c19ldmVudChzZWxmLCB3LCBkaXJlY3Rpb24pOgorICAgICAgICBpZiBzZWxmLnRlc3RfcHJveHlfc3RhdGUgaW4gW3NlbGYuVEVTVF9ORVRXT1JLX1BBU1NFRCwgc2VsZi5URVNUX05FVFdPUktfRkFJTEVEXToKKyAgICAgICAgICAgIHNlbGYuc2V0X3Rlc3RfcHJveHlfc3RhdGUoc2VsZi5URVNUX05FVFdPUktfSU5JVElBTCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaHR0cF9wcm94eV9jaGFuZ2VkKHNlbGYsIGUpOgorICAgICAgICBpZiBub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgZSA9PSBzZWxmLmh0dHBfcHJveHk6CisgICAgICAgICAgICBbdy5zZXRfdGV4dChzZWxmLmh0dHBfcHJveHkuZ2V0X3RleHQoKSkgZm9yIHcgaW4gc2VsZi5zYW1lX3Byb3h5X2FkZHJlc3Nlc10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIFt3LnNldF90ZXh0KHNlbGYuaHR0cF9wcm94eV9wb3J0LmdldF90ZXh0KCkpIGZvciB3IGluIHNlbGYuc2FtZV9wcm94eV9wb3J0c10KKworICAgIGRlZiBwcm94eV9hZGRyZXNzX2ZvY3VzX291dF9ldmVudChzZWxmLCB3LCBkaXJlY3Rpb24pOgorICAgICAgICB0ZXh0ID0gdy5nZXRfdGV4dCgpCisgICAgICAgIGlmIG5vdCB0ZXh0OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHRleHQuZmluZCgiLy8iKSA9PSAtMToKKyAgICAgICAgICAgIHcuc2V0X3RleHQoImh0dHA6Ly8iICsgdGV4dCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgc2V0X3Rlc3RfcHJveHlfc3RhdGUoc2VsZiwgc3RhdGUpOgorICAgICAgICBpZiBzZWxmLnRlc3RfcHJveHlfc3RhdGUgPT0gc3RhdGU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgW3NlbGYucHJveHlfdGFibGUucmVtb3ZlKHcpIGZvciB3IGluIHNlbGYudGVzdF9ndWlfZWxlbWVudHNdCisgICAgICAgIGlmIHN0YXRlID09IHNlbGYuVEVTVF9ORVRXT1JLX0lOSVRJQUw6CisgICAgICAgICAgICBzZWxmLnByb3h5X3RhYmxlLmF0dGFjaChzZWxmLnRlc3RfbmV0d29ya19idXR0b24sIDEsIDIsIDUsIDYpCisgICAgICAgICAgICBzZWxmLnRlc3RfbmV0d29ya19idXR0b24uc2hvdygpCisgICAgICAgIGVsaWYgc3RhdGUgPT0gc2VsZi5URVNUX05FVFdPUktfUlVOTklORzoKKyAgICAgICAgICAgIHNlbGYudGVzdF9wcm94eV9wcm9ncmVzcy5zZXRfcmNzdHlsZSgicnVubmluZyIpCisgICAgICAgICAgICBzZWxmLnRlc3RfcHJveHlfcHJvZ3Jlc3Muc2V0X3RleHQoIlRlc3RpbmcgbmV0d29yayBjb25maWd1cmF0aW9uIikKKyAgICAgICAgICAgIHNlbGYucHJveHlfdGFibGUuYXR0YWNoKHNlbGYudGVzdF9wcm94eV9wcm9ncmVzcywgMCwgNSwgNSwgNiwgeHBhZGRpbmc9NCkKKyAgICAgICAgICAgIHNlbGYudGVzdF9wcm94eV9wcm9ncmVzcy5zaG93KCkKKyAgICAgICAgZWxzZTogIyBwYXNzZWQgb3IgZmFpbGVkCisgICAgICAgICAgICBzZWxmLmR1bW15X3Byb2dyZXNzLnVwZGF0ZSgxLjApCisgICAgICAgICAgICBpZiBzdGF0ZSA9PSBzZWxmLlRFU1RfTkVUV09SS19QQVNTRUQ6CisgICAgICAgICAgICAgICAgc2VsZi5kdW1teV9wcm9ncmVzcy5zZXRfdGV4dCgiWW91ciBuZXR3b3JrIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQiKQorICAgICAgICAgICAgICAgIHNlbGYuZHVtbXlfcHJvZ3Jlc3Muc2V0X3Jjc3R5bGUoInJ1bm5pbmciKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmR1bW15X3Byb2dyZXNzLnNldF90ZXh0KCJOZXR3b3JrIHRlc3QgZmFpbGVkIikKKyAgICAgICAgICAgICAgICBzZWxmLmR1bW15X3Byb2dyZXNzLnNldF9yY3N0eWxlKCJmYWlsIikKKyAgICAgICAgICAgIHNlbGYucHJveHlfdGFibGUuYXR0YWNoKHNlbGYuZHVtbXlfcHJvZ3Jlc3MsIDAsIDQsIDUsIDYpCisgICAgICAgICAgICBzZWxmLnByb3h5X3RhYmxlLmF0dGFjaChzZWxmLnJldGVzdF9uZXR3b3JrX2J1dHRvbiwgNCwgNSwgNSwgNiwgeHBhZGRpbmc9NCkKKyAgICAgICAgICAgIHNlbGYuZHVtbXlfcHJvZ3Jlc3Muc2hvdygpCisgICAgICAgICAgICBzZWxmLnJldGVzdF9uZXR3b3JrX2J1dHRvbi5zaG93KCkKKyAgICAgICAgc2VsZi50ZXN0X3Byb3h5X3N0YXRlID0gc3RhdGUKKworICAgIGRlZiBjcmVhdGVfbmV0d29ya19wYWdlKHNlbGYpOgorICAgICAgICBhZHZhbmNlZF92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3guc2V0X2JvcmRlcl93aWR0aCg2KQorICAgICAgICBzZWxmLnNhbWVfcHJveHlfYWRkcmVzc2VzID0gW10KKyAgICAgICAgc2VsZi5zYW1lX3Byb3h5X3BvcnRzID0gW10KKyAgICAgICAgc2VsZi5hbGxfcHJveHlfcG9ydHMgPSBbXQorICAgICAgICBzZWxmLmFsbF9wcm94eV9hZGRyZXNzZXMgPSBbXQorCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBsYWJlbCA9IHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPlNldCB0aGUgcHJveGllcyB1c2VkIHdoZW4gZmV0Y2hpbmcgc291cmNlIGNvZGU8L3NwYW4+IikKKyAgICAgICAgdG9vbHRpcCA9ICJTZXQgdGhlIHByb3hpZXMgdXNlZCB3aGVuIGZldGNoaW5nIHNvdXJjZSBjb2RlLiAgQSBibGFuayBmaWVsZCB1c2VzIGEgZGlyZWN0IGludGVybmV0IGNvbm5lY3Rpb24uIgorICAgICAgICBpbmZvID0gSG9iSW5mb0J1dHRvbigiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPlNldCB0aGUgcHJveGllcyB1c2VkIHdoZW4gZmV0Y2hpbmcgc291cmNlIGNvZGU8L3NwYW4+IiArICIqIiArIHRvb2x0aXAsIHNlbGYpCisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgMTIpCisgICAgICAgIGhib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGluZm8sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChoYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgcHJveHlfdGVzdF9mb2N1cyA9IFtdCisgICAgICAgIHNlbGYuZGlyZWN0X2NoZWNrYm94ID0gZ3RrLlJhZGlvQnV0dG9uKE5vbmUsICJEaXJlY3QgbmV0d29yayBjb25uZWN0aW9uIikKKyAgICAgICAgcHJveHlfdGVzdF9mb2N1cy5hcHBlbmQoc2VsZi5kaXJlY3RfY2hlY2tib3gpCisgICAgICAgIHNlbGYuZGlyZWN0X2NoZWNrYm94LnNldF90b29sdGlwX3RleHQoIkNoZWNrIHRoaXMgYm94IHRvIHVzZSBhIGRpcmVjdCBpbnRlcm5ldCBjb25uZWN0aW9uIHdpdGggbm8gcHJveHkiKQorICAgICAgICBzZWxmLmRpcmVjdF9jaGVja2JveC5zZXRfYWN0aXZlKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5KQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHNlbGYuZGlyZWN0X2NoZWNrYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc2VsZi5wcm94eV9jaGVja2JveCA9IGd0ay5SYWRpb0J1dHRvbihzZWxmLmRpcmVjdF9jaGVja2JveCwgIk1hbnVhbCBwcm94eSBjb25maWd1cmF0aW9uIikKKyAgICAgICAgcHJveHlfdGVzdF9mb2N1cy5hcHBlbmQoc2VsZi5wcm94eV9jaGVja2JveCkKKyAgICAgICAgc2VsZi5wcm94eV9jaGVja2JveC5zZXRfdG9vbHRpcF90ZXh0KCJDaGVjayB0aGlzIGJveCB0byBtYW51YWxseSBzZXQgdXAgYSBzcGVjaWZpYyBwcm94eSIpCisgICAgICAgIHNlbGYucHJveHlfY2hlY2tib3guc2V0X2FjdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5KQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHNlbGYucHJveHlfY2hlY2tib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzZWxmLnNhbWVfY2hlY2tib3ggPSBndGsuQ2hlY2tCdXR0b24oIlVzZSB0aGUgSFRUUCBwcm94eSBmb3IgYWxsIHByb3RvY29scyIpCisgICAgICAgIHByb3h5X3Rlc3RfZm9jdXMuYXBwZW5kKHNlbGYuc2FtZV9jaGVja2JveCkKKyAgICAgICAgc2VsZi5zYW1lX2NoZWNrYm94LnNldF90b29sdGlwX3RleHQoIkNoZWNrIHRoaXMgYm94IHRvIHVzZSB0aGUgSFRUUCBwcm94eSBmb3IgYWxsIGZpdmUgcHJveGllcyIpCisgICAgICAgIHNlbGYuc2FtZV9jaGVja2JveC5zZXRfYWN0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KQorICAgICAgICBoYm94ID0gZ3RrLkhCb3goRmFsc2UsIDEyKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQoc2VsZi5zYW1lX2NoZWNrYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UsIHBhZGRpbmc9MjQpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoaGJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYucHJveHlfdGFibGUgPSBndGsuVGFibGUoNiwgNSwgRmFsc2UpCisgICAgICAgIHNlbGYuaHR0cF9wcm94eSwgc2VsZi5odHRwX3Byb3h5X3BvcnQsIHNlbGYuaHR0cF9wcm94eV9kZXRhaWxzID0gc2VsZi5nZW5fcHJveHlfZW50cnlfd2lkZ2V0KAorICAgICAgICAgICAgImh0dHAiLCBzZWxmLCBUcnVlLCAwKQorICAgICAgICBwcm94eV90ZXN0X2ZvY3VzICs9W3NlbGYuaHR0cF9wcm94eSwgc2VsZi5odHRwX3Byb3h5X3BvcnRdCisgICAgICAgIHNlbGYuaHR0cF9wcm94eS5jb25uZWN0KCJjaGFuZ2VkIiwgc2VsZi5odHRwX3Byb3h5X2NoYW5nZWQpCisgICAgICAgIHNlbGYuaHR0cF9wcm94eV9wb3J0LmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLmh0dHBfcHJveHlfY2hhbmdlZCkKKworICAgICAgICBzZWxmLmh0dHBzX3Byb3h5LCBzZWxmLmh0dHBzX3Byb3h5X3BvcnQsIHNlbGYuaHR0cHNfcHJveHlfZGV0YWlscyA9IHNlbGYuZ2VuX3Byb3h5X2VudHJ5X3dpZGdldCgKKyAgICAgICAgICAgICJodHRwcyIsIHNlbGYsIFRydWUsIDEpCisgICAgICAgIHByb3h5X3Rlc3RfZm9jdXMgKz0gW3NlbGYuaHR0cHNfcHJveHksIHNlbGYuaHR0cHNfcHJveHlfcG9ydF0KKyAgICAgICAgc2VsZi5zYW1lX3Byb3h5X2FkZHJlc3Nlcy5hcHBlbmQoc2VsZi5odHRwc19wcm94eSkKKyAgICAgICAgc2VsZi5zYW1lX3Byb3h5X3BvcnRzLmFwcGVuZChzZWxmLmh0dHBzX3Byb3h5X3BvcnQpCisKKyAgICAgICAgc2VsZi5mdHBfcHJveHksIHNlbGYuZnRwX3Byb3h5X3BvcnQsIHNlbGYuZnRwX3Byb3h5X2RldGFpbHMgPSBzZWxmLmdlbl9wcm94eV9lbnRyeV93aWRnZXQoCisgICAgICAgICAgICAiZnRwIiwgc2VsZiwgVHJ1ZSwgMikKKyAgICAgICAgcHJveHlfdGVzdF9mb2N1cyArPSBbc2VsZi5mdHBfcHJveHksIHNlbGYuZnRwX3Byb3h5X3BvcnRdCisgICAgICAgIHNlbGYuc2FtZV9wcm94eV9hZGRyZXNzZXMuYXBwZW5kKHNlbGYuZnRwX3Byb3h5KQorICAgICAgICBzZWxmLnNhbWVfcHJveHlfcG9ydHMuYXBwZW5kKHNlbGYuZnRwX3Byb3h5X3BvcnQpCisKKyAgICAgICAgc2VsZi5zb2Nrc19wcm94eSwgc2VsZi5zb2Nrc19wcm94eV9wb3J0LCBzZWxmLnNvY2tzX3Byb3h5X2RldGFpbHMgPSBzZWxmLmdlbl9wcm94eV9lbnRyeV93aWRnZXQoCisgICAgICAgICAgICAic29ja3MiLCBzZWxmLCBUcnVlLCAzKQorICAgICAgICBwcm94eV90ZXN0X2ZvY3VzICs9IFtzZWxmLnNvY2tzX3Byb3h5LCBzZWxmLnNvY2tzX3Byb3h5X3BvcnRdCisgICAgICAgIHNlbGYuc2FtZV9wcm94eV9hZGRyZXNzZXMuYXBwZW5kKHNlbGYuc29ja3NfcHJveHkpCisgICAgICAgIHNlbGYuc2FtZV9wcm94eV9wb3J0cy5hcHBlbmQoc2VsZi5zb2Nrc19wcm94eV9wb3J0KQorCisgICAgICAgIHNlbGYuY3ZzX3Byb3h5LCBzZWxmLmN2c19wcm94eV9wb3J0LCBzZWxmLmN2c19wcm94eV9kZXRhaWxzID0gc2VsZi5nZW5fcHJveHlfZW50cnlfd2lkZ2V0KAorICAgICAgICAgICAgImN2cyIsIHNlbGYsIFRydWUsIDQpCisgICAgICAgIHByb3h5X3Rlc3RfZm9jdXMgKz0gW3NlbGYuY3ZzX3Byb3h5LCBzZWxmLmN2c19wcm94eV9wb3J0XQorICAgICAgICBzZWxmLnNhbWVfcHJveHlfYWRkcmVzc2VzLmFwcGVuZChzZWxmLmN2c19wcm94eSkKKyAgICAgICAgc2VsZi5zYW1lX3Byb3h5X3BvcnRzLmFwcGVuZChzZWxmLmN2c19wcm94eV9wb3J0KQorICAgICAgICBzZWxmLmFsbF9wcm94eV9wb3J0cyA9IHNlbGYuc2FtZV9wcm94eV9wb3J0cyArIFtzZWxmLmh0dHBfcHJveHlfcG9ydF0KKyAgICAgICAgc2VsZi5hbGxfcHJveHlfYWRkcmVzc2VzID0gc2VsZi5zYW1lX3Byb3h5X2FkZHJlc3NlcyArIFtzZWxmLmh0dHBfcHJveHldCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoc2VsZi5wcm94eV90YWJsZSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLnByb3h5X3RhYmxlLnNob3dfYWxsKCkKKworICAgICAgICAjIENyZWF0ZSB0aGUgZ3JhcGhpY2FsIGVsZW1lbnRzIGZvciB0aGUgbmV0d29yayB0ZXN0IGZlYXR1cmUsIGJ1dCBkb24ndCBkaXNwbGF5IHRoZW0geWV0CisgICAgICAgIHNlbGYudGVzdF9uZXR3b3JrX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiVGVzdCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24iKQorICAgICAgICBzZWxmLnRlc3RfbmV0d29ya19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYudGVzdF9uZXR3b3JrX2J1dHRvbl9jYikKKyAgICAgICAgc2VsZi50ZXN0X3Byb3h5X3Byb2dyZXNzID0gSG9iUHJvZ3Jlc3NCYXIoKQorICAgICAgICBzZWxmLmR1bW15X3Byb2dyZXNzID0gSG9iUHJvZ3Jlc3NCYXIoKQorICAgICAgICBzZWxmLnJldGVzdF9uZXR3b3JrX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiUmV0ZXN0IikKKyAgICAgICAgc2VsZi5yZXRlc3RfbmV0d29ya19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYudGVzdF9uZXR3b3JrX2J1dHRvbl9jYikKKyAgICAgICAgc2VsZi50ZXN0X2d1aV9lbGVtZW50cyA9IFtzZWxmLnRlc3RfbmV0d29ya19idXR0b24sIHNlbGYudGVzdF9wcm94eV9wcm9ncmVzcywgc2VsZi5kdW1teV9wcm9ncmVzcywgc2VsZi5yZXRlc3RfbmV0d29ya19idXR0b25dCisgICAgICAgICMgSW5pdGlhbGl6ZSB0aGUgbmV0d29yayB0ZXN0ZXIKKyAgICAgICAgc2VsZi50ZXN0X3Byb3h5X3N0YXRlID0gc2VsZi5URVNUX05FVFdPUktfTk9ORQorICAgICAgICBzZWxmLnNldF90ZXN0X3Byb3h5X3N0YXRlKHNlbGYuVEVTVF9ORVRXT1JLX0lOSVRJQUwpCisgICAgICAgIHNlbGYucHJveHlfdGVzdF9wYXNzZWRfaWQgPSBzZWxmLmhhbmRsZXIuY29ubmVjdCgibmV0d29yay1wYXNzZWQiLCBsYW1iZGEgaDpzZWxmLnRlc3RfcHJveHlfZW5kZWQoVHJ1ZSkpCisgICAgICAgIHNlbGYucHJveHlfdGVzdF9mYWlsZWRfaWQgPSBzZWxmLmhhbmRsZXIuY29ubmVjdCgibmV0d29yay1mYWlsZWQiLCBsYW1iZGEgaDpzZWxmLnRlc3RfcHJveHlfZW5kZWQoRmFsc2UpKQorICAgICAgICBbdy5jb25uZWN0KCJmb2N1cy1pbi1ldmVudCIsIHNlbGYudGVzdF9wcm94eV9mb2N1c19ldmVudCkgZm9yIHcgaW4gcHJveHlfdGVzdF9mb2N1c10KKyAgICAgICAgW3cuY29ubmVjdCgiZm9jdXMtb3V0LWV2ZW50Iiwgc2VsZi5wcm94eV9hZGRyZXNzX2ZvY3VzX291dF9ldmVudCkgZm9yIHcgaW4gc2VsZi5hbGxfcHJveHlfYWRkcmVzc2VzXQorCisgICAgICAgIHNlbGYuZGlyZWN0X2NoZWNrYm94LmNvbm5lY3QoInRvZ2dsZWQiLCBzZWxmLnByb3h5X2NoZWNrYm94X3RvZ2dsZWRfY2IpCisgICAgICAgIHNlbGYucHJveHlfY2hlY2tib3guY29ubmVjdCgidG9nZ2xlZCIsIHNlbGYucHJveHlfY2hlY2tib3hfdG9nZ2xlZF9jYikKKyAgICAgICAgc2VsZi5zYW1lX2NoZWNrYm94LmNvbm5lY3QoInRvZ2dsZWQiLCBzZWxmLnNhbWVfY2hlY2tib3hfdG9nZ2xlZF9jYikKKworICAgICAgICBzZWxmLnJlZnJlc2hfcHJveHlfY29tcG9uZW50cygpCisgICAgICAgIHJldHVybiBhZHZhbmNlZF92Ym94CisKKyAgICBkZWYgc3dpdGNoX3RvX3BhZ2Uoc2VsZiwgcGFnZV9pZCk6CisgICAgICAgIHNlbGYubmIuc2V0X2N1cnJlbnRfcGFnZShwYWdlX2lkKQorCisgICAgZGVmIGRldGFpbHNfY2Ioc2VsZiwgYnV0dG9uLCBwYXJlbnQsIHByb3RvY29sKToKKyAgICAgICAgc2VsZi5zYXZlX3Byb3h5X2RhdGEoKQorICAgICAgICBkaWFsb2cgPSBQcm94eURldGFpbHNEaWFsb2codGl0bGUgPSBwcm90b2NvbC51cHBlcigpICsgIiBQcm94eSBEZXRhaWxzIiwKKyAgICAgICAgICAgIHVzZXIgPSBzZWxmLmNvbmZpZ3VyYXRpb24ucHJveGllc1twcm90b2NvbF1bMV0sCisgICAgICAgICAgICBwYXNzd2QgPSBzZWxmLmNvbmZpZ3VyYXRpb24ucHJveGllc1twcm90b2NvbF1bMl0sCisgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQsCisgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfTU9EQUwKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKKyAgICAgICAgZGlhbG9nLmFkZF9idXR0b24oZ3RrLlNUT0NLX0NMT1NFLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9PSzoKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5wcm94aWVzW3Byb3RvY29sXVsxXSA9IGRpYWxvZy51c2VyCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24ucHJveGllc1twcm90b2NvbF1bMl0gPSBkaWFsb2cucGFzc3dkCisgICAgICAgICAgICBzZWxmLnJlZnJlc2hfcHJveHlfY29tcG9uZW50cygpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkgICAgCisKKyAgICBkZWYgcm9vdGZzX2NvbWJvX2NoYW5nZWRfY2Ioc2VsZiwgcm9vdGZzX2NvbWJvLCBhbGxfcGFja2FnZV9mb3JtYXQsIGNoZWNrX2hib3gpOgorICAgICAgICBjb21ib19pdGVtID0gc2VsZi5yb290ZnNfY29tYm8uZ2V0X2FjdGl2ZV90ZXh0KCkKKyAgICAgICAgZm9yIGNoaWxkIGluIGNoZWNrX2hib3guZ2V0X2NoaWxkcmVuKCk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNoaWxkLCBndGsuQ2hlY2tCdXR0b24pOgorICAgICAgICAgICAgICAgIGNoZWNrX2hib3gucmVtb3ZlKGNoaWxkKQorICAgICAgICBmb3IgZm9ybWF0IGluIGFsbF9wYWNrYWdlX2Zvcm1hdDoKKyAgICAgICAgICAgIGlmIGZvcm1hdCAhPSBjb21ib19pdGVtOgorICAgICAgICAgICAgICAgIGNoZWNrX2J1dHRvbiA9IGd0ay5DaGVja0J1dHRvbihmb3JtYXQpCisgICAgICAgICAgICAgICAgY2hlY2tfaGJveC5wYWNrX3N0YXJ0KGNoZWNrX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBjaGVja19oYm94LnNob3dfYWxsKCkKKworICAgIGRlZiBnZW5fcGtnZm10X3dpZGdldChzZWxmLCBjdXJyX3BhY2thZ2VfZm9ybWF0LCBhbGxfcGFja2FnZV9mb3JtYXQsIHRvb2x0aXBfY29tYm89IiIsIHRvb2x0aXBfZXh0cmE9IiIpOgorICAgICAgICBwa2dmbXRfaGJveCA9IGd0ay5IQm94KEZhbHNlLCAyNCkKKworICAgICAgICByb290ZnNfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBwa2dmbXRfaGJveC5wYWNrX3N0YXJ0KHJvb3Rmc192Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoIlJvb3QgZmlsZSBzeXN0ZW0gcGFja2FnZSBmb3JtYXQiKQorICAgICAgICByb290ZnNfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgcm9vdGZzX2Zvcm1hdCA9ICIiCisgICAgICAgIGlmIGN1cnJfcGFja2FnZV9mb3JtYXQ6CisgICAgICAgICAgICByb290ZnNfZm9ybWF0ID0gY3Vycl9wYWNrYWdlX2Zvcm1hdC5zcGxpdCgpWzBdCisKKyAgICAgICAgcm9vdGZzX2Zvcm1hdF93aWRnZXQsIHJvb3Rmc19jb21ibyA9IHNlbGYuZ2VuX2NvbWJvX3dpZGdldChyb290ZnNfZm9ybWF0LCBhbGxfcGFja2FnZV9mb3JtYXQsIHRvb2x0aXBfY29tYm8pCisgICAgICAgIHJvb3Rmc192Ym94LnBhY2tfc3RhcnQocm9vdGZzX2Zvcm1hdF93aWRnZXQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBleHRyYV92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIHBrZ2ZtdF9oYm94LnBhY2tfc3RhcnQoZXh0cmFfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCJBZGRpdGlvbmFsIHBhY2thZ2UgZm9ybWF0cyIpCisgICAgICAgIGV4dHJhX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGNoZWNrX2hib3ggPSBndGsuSEJveChGYWxzZSwgMTIpCisgICAgICAgIGV4dHJhX3Zib3gucGFja19zdGFydChjaGVja19oYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGZvciBmb3JtYXQgaW4gYWxsX3BhY2thZ2VfZm9ybWF0OgorICAgICAgICAgICAgaWYgZm9ybWF0ICE9IHJvb3Rmc19mb3JtYXQ6CisgICAgICAgICAgICAgICAgY2hlY2tfYnV0dG9uID0gZ3RrLkNoZWNrQnV0dG9uKGZvcm1hdCkKKyAgICAgICAgICAgICAgICBpc19hY3RpdmUgPSAoZm9ybWF0IGluIGN1cnJfcGFja2FnZV9mb3JtYXQuc3BsaXQoKSkKKyAgICAgICAgICAgICAgICBjaGVja19idXR0b24uc2V0X2FjdGl2ZShpc19hY3RpdmUpCisgICAgICAgICAgICAgICAgY2hlY2tfaGJveC5wYWNrX3N0YXJ0KGNoZWNrX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGluZm8gPSBIb2JJbmZvQnV0dG9uKHRvb2x0aXBfZXh0cmEsIHNlbGYpCisgICAgICAgIGNoZWNrX2hib3gucGFja19lbmQoaW5mbywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHJvb3Rmc19jb21iby5jb25uZWN0KCJjaGFuZ2VkIiwgc2VsZi5yb290ZnNfY29tYm9fY2hhbmdlZF9jYiwgYWxsX3BhY2thZ2VfZm9ybWF0LCBjaGVja19oYm94KQorCisgICAgICAgIHBrZ2ZtdF9oYm94LnNob3dfYWxsKCkKKworICAgICAgICByZXR1cm4gcGtnZm10X2hib3gsIHJvb3Rmc19jb21ibywgY2hlY2tfaGJveAorCisgICAgZGVmIGVkaXRhYmxlX3NldHRpbmdzX2NlbGxfZWRpdGVkKHNlbGYsIGNlbGwsIHBhdGhfc3RyaW5nLCBuZXdfdGV4dCwgbW9kZWwpOgorICAgICAgICBpdCA9IG1vZGVsLmdldF9pdGVyX2Zyb21fc3RyaW5nKHBhdGhfc3RyaW5nKQorICAgICAgICBjb2x1bW4gPSBjZWxsLmdldF9kYXRhKCJjb2x1bW4iKQorICAgICAgICBtb2RlbC5zZXQoaXQsIGNvbHVtbiwgbmV3X3RleHQpCisKKyAgICBkZWYgZWRpdGFibGVfc2V0dGluZ3NfYWRkX2l0ZW1fY2xpY2tlZChzZWxmLCBidXR0b24sIG1vZGVsKToKKyAgICAgICAgbmV3X2l0ZW0gPSBbIiMjS0VZIyMiLCAiIyNWQUxVRSMjIl0KKworICAgICAgICBpdGVyID0gbW9kZWwuYXBwZW5kKCkKKyAgICAgICAgbW9kZWwuc2V0IChpdGVyLAorICAgICAgICAgICAgMCwgbmV3X2l0ZW1bMF0sCisgICAgICAgICAgICAxLCBuZXdfaXRlbVsxXSwKKyAgICAgICApCisKKyAgICBkZWYgZWRpdGFibGVfc2V0dGluZ3NfcmVtb3ZlX2l0ZW1fY2xpY2tlZChzZWxmLCBidXR0b24sIHRyZWV2aWV3KToKKyAgICAgICAgc2VsZWN0aW9uID0gdHJlZXZpZXcuZ2V0X3NlbGVjdGlvbigpCisgICAgICAgIG1vZGVsLCBpdGVyID0gc2VsZWN0aW9uLmdldF9zZWxlY3RlZCgpCisKKyAgICAgICAgaWYgaXRlcjoKKyAgICAgICAgICAgIHBhdGggPSBtb2RlbC5nZXRfcGF0aChpdGVyKVswXQorICAgICAgICAgICAgbW9kZWwucmVtb3ZlKGl0ZXIpCisgCisgICAgZGVmIGdlbl9lZGl0YWJsZV9zZXR0aW5ncyhzZWxmLCBzZXR0aW5nLCB0b29sdGlwPSIiKToKKyAgICAgICAgc2V0dGluZ19oYm94ID0gZ3RrLkhCb3goRmFsc2UsIDEyKQorCisgICAgICAgIHZib3ggPSBndGsuVkJveChGYWxzZSwgMTIpCisgICAgICAgIHNldHRpbmdfaGJveC5wYWNrX3N0YXJ0KHZib3gsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2V0dGluZ19zdG9yZSA9IGd0ay5MaXN0U3RvcmUoZ29iamVjdC5UWVBFX1NUUklORywgZ29iamVjdC5UWVBFX1NUUklORykKKyAgICAgICAgZm9yIGtleSBpbiBzZXR0aW5nLmtleXMoKToKKyAgICAgICAgICAgIHNldHRpbmdfc3RvcmUuc2V0KHNldHRpbmdfc3RvcmUuYXBwZW5kKCksIDAsIGtleSwgMSwgc2V0dGluZ1trZXldKQorCisgICAgICAgIHNldHRpbmdfdHJlZSA9IGd0ay5UcmVlVmlldyhzZXR0aW5nX3N0b3JlKQorICAgICAgICBzZXR0aW5nX3RyZWUuc2V0X2hlYWRlcnNfdmlzaWJsZShUcnVlKQorICAgICAgICBzZXR0aW5nX3RyZWUuc2V0X3NpemVfcmVxdWVzdCgzMDAsIDEwMCkKKworICAgICAgICBjb2wgPSBndGsuVHJlZVZpZXdDb2x1bW4oJ0tleScpCisgICAgICAgIGNvbC5zZXRfbWluX3dpZHRoKDEwMCkKKyAgICAgICAgY29sLnNldF9tYXhfd2lkdGgoMTUwKQorICAgICAgICBjb2wuc2V0X3Jlc2l6YWJsZShUcnVlKQorICAgICAgICBjb2wxID0gZ3RrLlRyZWVWaWV3Q29sdW1uKCdWYWx1ZScpCisgICAgICAgIGNvbDEuc2V0X21pbl93aWR0aCgxMDApCisgICAgICAgIGNvbDEuc2V0X21heF93aWR0aCgxNTApCisgICAgICAgIGNvbDEuc2V0X3Jlc2l6YWJsZShUcnVlKQorICAgICAgICBzZXR0aW5nX3RyZWUuYXBwZW5kX2NvbHVtbihjb2wpCisgICAgICAgIHNldHRpbmdfdHJlZS5hcHBlbmRfY29sdW1uKGNvbDEpCisgICAgICAgIGNlbGwgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCd3aWR0aC1jaGFycycsIDEwKQorICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgnZWRpdGFibGUnLCBUcnVlKQorICAgICAgICBjZWxsLnNldF9kYXRhKCJjb2x1bW4iLCAwKQorICAgICAgICBjZWxsLmNvbm5lY3QoImVkaXRlZCIsIHNlbGYuZWRpdGFibGVfc2V0dGluZ3NfY2VsbF9lZGl0ZWQsIHNldHRpbmdfc3RvcmUpCisgICAgICAgIGNlbGwxID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorICAgICAgICBjZWxsMS5zZXRfcHJvcGVydHkoJ3dpZHRoLWNoYXJzJywgMTApCisgICAgICAgIGNlbGwxLnNldF9wcm9wZXJ0eSgnZWRpdGFibGUnLCBUcnVlKQorICAgICAgICBjZWxsMS5zZXRfZGF0YSgiY29sdW1uIiwgMSkKKyAgICAgICAgY2VsbDEuY29ubmVjdCgiZWRpdGVkIiwgc2VsZi5lZGl0YWJsZV9zZXR0aW5nc19jZWxsX2VkaXRlZCwgc2V0dGluZ19zdG9yZSkKKyAgICAgICAgY29sLnBhY2tfc3RhcnQoY2VsbCwgVHJ1ZSkKKyAgICAgICAgY29sMS5wYWNrX2VuZChjZWxsMSwgVHJ1ZSkKKyAgICAgICAgY29sLnNldF9hdHRyaWJ1dGVzKGNlbGwsIHRleHQ9MCkKKyAgICAgICAgY29sMS5zZXRfYXR0cmlidXRlcyhjZWxsMSwgdGV4dD0xKQorCisgICAgICAgIHNjcm9sbCA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgIHNjcm9sbC5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKyAgICAgICAgc2Nyb2xsLnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorICAgICAgICBzY3JvbGwuYWRkKHNldHRpbmdfdHJlZSkKKyAgICAgICAgdmJveC5wYWNrX3N0YXJ0KHNjcm9sbCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICAjIHNvbWUgYnV0dG9ucworICAgICAgICBoYm94ID0gZ3RrLkhCb3goVHJ1ZSwgNikKKyAgICAgICAgdmJveC5wYWNrX3N0YXJ0KGhib3gsIEZhbHNlLCBGYWxzZSkKKworICAgICAgICBidXR0b24gPSBndGsuQnV0dG9uKHN0b2NrPWd0ay5TVE9DS19BREQpCisgICAgICAgIGJ1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5lZGl0YWJsZV9zZXR0aW5nc19hZGRfaXRlbV9jbGlja2VkLCBzZXR0aW5nX3N0b3JlKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQoYnV0dG9uKQorCisgICAgICAgIGJ1dHRvbiA9IGd0ay5CdXR0b24oc3RvY2s9Z3RrLlNUT0NLX1JFTU9WRSkKKyAgICAgICAgYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmVkaXRhYmxlX3NldHRpbmdzX3JlbW92ZV9pdGVtX2NsaWNrZWQsIHNldHRpbmdfdHJlZSkKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGJ1dHRvbikKKworICAgICAgICBpbmZvID0gSG9iSW5mb0J1dHRvbih0b29sdGlwLCBzZWxmKQorICAgICAgICBzZXR0aW5nX2hib3gucGFja19zdGFydChpbmZvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgcmV0dXJuIHNldHRpbmdfaGJveCwgc2V0dGluZ19zdG9yZQorCisgICAgZGVmIGNyZWF0ZV9vdGhlcnNfcGFnZShzZWxmKToKKyAgICAgICAgYWR2YW5jZWRfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnNldF9ib3JkZXJfd2lkdGgoNikKKworICAgICAgICBzdWJfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc3ViX3Zib3gsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+QWRkIHlvdXIgb3duIHZhcmlhYmxlczo8L3NwYW4+IikKKyAgICAgICAgdG9vbHRpcCA9ICJUaGVzZSBhcmUga2V5L3ZhbHVlIHBhaXJzIGZvciB5b3VyIGV4dHJhIHNldHRpbmdzLiBDbGljayBcJ0FkZFwnIGFuZCB0aGVuIGRpcmVjdGx5IGVkaXQgdGhlIGtleSBhbmQgdGhlIHZhbHVlIgorICAgICAgICBzZXR0aW5nX3dpZGdldCwgc2VsZi5zZXR0aW5nX3N0b3JlID0gc2VsZi5nZW5fZWRpdGFibGVfc2V0dGluZ3Moc2VsZi5jb25maWd1cmF0aW9uLmV4dHJhX3NldHRpbmcsIjxiPkFkZCB5b3VyIG93biB2YXJpYWJsZXM8L2I+IiArICIqIiArIHRvb2x0aXApCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQobGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChzZXR0aW5nX3dpZGdldCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICByZXR1cm4gYWR2YW5jZWRfdmJveAorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYubmIgPSBndGsuTm90ZWJvb2soKQorICAgICAgICBzZWxmLm5iLnNldF9zaG93X3RhYnMoVHJ1ZSkgICAgICAgIAorICAgICAgICBzZWxmLm5iLmFwcGVuZF9wYWdlKHNlbGYuY3JlYXRlX2J1aWxkX2Vudmlyb25tZW50X3BhZ2UoKSwgZ3RrLkxhYmVsKCJCdWlsZCBlbnZpcm9ubWVudCIpKQorICAgICAgICBzZWxmLm5iLmFwcGVuZF9wYWdlKHNlbGYuY3JlYXRlX3NoYXJlZF9zdGF0ZV9wYWdlKCksIGd0ay5MYWJlbCgiU2hhcmVkIHN0YXRlIikpCisgICAgICAgIHNlbGYubmIuYXBwZW5kX3BhZ2Uoc2VsZi5jcmVhdGVfbmV0d29ya19wYWdlKCksIGd0ay5MYWJlbCgiTmV0d29yayIpKSAgICAgICAgCisgICAgICAgIHNlbGYubmIuYXBwZW5kX3BhZ2Uoc2VsZi5jcmVhdGVfb3RoZXJzX3BhZ2UoKSwgZ3RrLkxhYmVsKCJPdGhlcnMiKSkKKyAgICAgICAgc2VsZi5uYi5zZXRfY3VycmVudF9wYWdlKDApCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYubmIsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisgICAgICAgIHNlbGYudmJveC5wYWNrX2VuZChndGsuSFNlcGFyYXRvcigpLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIGRlc3Ryb3koc2VsZik6CisgICAgICAgIHNlbGYuaGFuZGxlci5kaXNjb25uZWN0KHNlbGYucHJveHlfdGVzdF9wYXNzZWRfaWQpCisgICAgICAgIHNlbGYuaGFuZGxlci5kaXNjb25uZWN0KHNlbGYucHJveHlfdGVzdF9mYWlsZWRfaWQpCisgICAgICAgIHN1cGVyKFNpbXBsZVNldHRpbmdzRGlhbG9nLCBzZWxmKS5kZXN0cm95KCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYmNvbG9yLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9iY29sb3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxNjU0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYmNvbG9yLnB5CkBAIC0wLDAgKzEsMzggQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMiAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitjbGFzcyBIb2JDb2xvcnM6CisgICAgV0hJVEUgICAgICAgID0gIiNmZmZmZmYiCisgICAgUEFMRV9HUkVFTiAgID0gIiNhYWZmYWEiCisgICAgT1JBTkdFICAgICAgID0gIiNlYjhlNjgiCisgICAgUEFMRV9SRUQgICAgID0gIiNmZmFhYWEiCisgICAgR1JBWSAgICAgICAgID0gIiNhYWFhYWEiCisgICAgTElHSFRfR1JBWSAgID0gIiNkZGRkZGQiCisgICAgU0xJR0hUX0RBUksgID0gIiM1ZjVmNWYiCisgICAgREFSSyAgICAgICAgID0gIiMzYzNiMzciCisgICAgQkxBQ0sgICAgICAgID0gIiMwMDAwMDAiCisgICAgUEFMRV9CTFVFICAgID0gIiM1M2I4ZmYiCisgICAgREVFUF9SRUQgICAgID0gIiNhYTNlM2UiCisgICAgS0hBS0kgICAgICAgID0gIiNmZmY2OGYiCisKKyAgICBPSyA9IFdISVRFCisgICAgUlVOTklORyA9IFBBTEVfR1JFRU4KKyAgICBXQVJOSU5HID0gT1JBTkdFCisgICAgRVJST1IgPSBQQUxFX1JFRApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9iZXZlbnRoYW5kbGVyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9iZXZlbnRoYW5kbGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MWZiMzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ob2JldmVudGhhbmRsZXIucHkKQEAgLTAsMCArMSw2NDUgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMSAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYXN0Citmcm9tIGJiLnVpLmNydW1icy5ydW5uaW5nYnVpbGQgaW1wb3J0IFJ1bm5pbmdCdWlsZAorCitjbGFzcyBIb2JIYW5kbGVyKGdvYmplY3QuR09iamVjdCk6CisKKyAgICAiIiIKKyAgICBUaGlzIG9iamVjdCBkb2VzIEJpdEJha2UgZXZlbnQgaGFuZGxpbmcgZm9yIHRoZSBob2IgZ3VpLgorICAgICIiIgorICAgIF9fZ3NpZ25hbHNfXyA9IHsKKyAgICAgICAgICJwYWNrYWdlLWZvcm1hdHMtdXBkYXRlZCIgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsKSksCisgICAgICAgICAiY29uZmlnLXVwZGF0ZWQiICAgICAgICAgIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1NUUklORywgZ29iamVjdC5UWVBFX1BZT0JKRUNULCkpLAorICAgICAgICAgImNvbW1hbmQtc3VjY2VlZGVkIiAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9JTlQsKSksCisgICAgICAgICAiY29tbWFuZC1mYWlsZWQiICAgICAgICAgIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1NUUklORywpKSwKKyAgICAgICAgICJwYXJzaW5nLXdhcm5pbmciICAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfU1RSSU5HLCkpLAorICAgICAgICAgInNhbml0eS1mYWlsZWQiICAgICAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9TVFJJTkcsIGdvYmplY3QuVFlQRV9JTlQpKSwKKyAgICAgICAgICJnZW5lcmF0aW5nLWRhdGEiICAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICAgICAgICJkYXRhLWdlbmVyYXRlZCIgICAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICAgICAgICJwYXJzaW5nLXN0YXJ0ZWQiICAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsKSksCisgICAgICAgICAicGFyc2luZyIgICAgICAgICAgICAgICAgIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1BZT0JKRUNULCkpLAorICAgICAgICAgInBhcnNpbmctY29tcGxldGVkIiAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9QWU9CSkVDVCwpKSwKKyAgICAgICAgICJyZWNpcGUtcG9wdWxhdGVkIiAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICAgICAgICJwYWNrYWdlLXBvcHVsYXRlZCIgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICAgICAgICJuZXR3b3JrLXBhc3NlZCIgICAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICAgICAgICJuZXR3b3JrLWZhaWxlZCIgICAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICB9CisKKyAgICAoR0VORVJBVEVfQ09ORklHVVJBVElPTiwgR0VORVJBVEVfUkVDSVBFUywgR0VORVJBVEVfUEFDS0FHRVMsIEdFTkVSQVRFX0lNQUdFLCBQT1BVTEFURV9QQUNLQUdFSU5GTywgU0FOSVRZX0NIRUNLLCBORVRXT1JLX1RFU1QpID0gcmFuZ2UoNykKKyAgICAoU1VCX1BBVEhfTEFZRVJTLCBTVUJfRklMRVNfRElTVFJPLCBTVUJfRklMRVNfTUFDSCwgU1VCX0ZJTEVTX1NES01BQ0gsIFNVQl9NQVRDSF9DTEFTUywgU1VCX1BBUlNFX0NPTkZJRywgU1VCX1NBTklUWV9DSEVDSywKKyAgICAgU1VCX0dORVJBVEVfVEdUUywgU1VCX0dFTkVSQVRFX1BLR0lORk8sIFNVQl9CVUlMRF9SRUNJUEVTLCBTVUJfQlVJTERfSU1BR0UsIFNVQl9ORVRXT1JLX1RFU1QpID0gcmFuZ2UoMTIpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyLCByZWNpcGVfbW9kZWwsIHBhY2thZ2VfbW9kZWwpOgorICAgICAgICBzdXBlcihIb2JIYW5kbGVyLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICAgICAgc2VsZi5idWlsZCA9IFJ1bm5pbmdCdWlsZChzZXF1ZW50aWFsPVRydWUpCisKKyAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwgPSByZWNpcGVfbW9kZWwKKyAgICAgICAgc2VsZi5wYWNrYWdlX21vZGVsID0gcGFja2FnZV9tb2RlbAorCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMgPSBbXQorICAgICAgICBzZWxmLmdlbmVyYXRpbmcgPSBGYWxzZQorICAgICAgICBzZWxmLmN1cnJlbnRfcGhhc2UgPSBOb25lCisgICAgICAgIHNlbGYuYnVpbGRpbmcgPSBGYWxzZQorICAgICAgICBzZWxmLnJlY2lwZV9xdWV1ZSA9IFtdCisgICAgICAgIHNlbGYucGFja2FnZV9xdWV1ZSA9IFtdCisKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIKKyAgICAgICAgc2VsZi5lcnJvcl9tc2cgPSAiIgorICAgICAgICBzZWxmLmluaXRjbWQgPSBOb25lCisgICAgICAgIHNlbGYucGFyc2luZyA9IEZhbHNlCisKKyAgICBkZWYgc2V0X2J1c3koc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmdlbmVyYXRpbmc6CisgICAgICAgICAgICBzZWxmLmVtaXQoImdlbmVyYXRpbmctZGF0YSIpCisgICAgICAgICAgICBzZWxmLmdlbmVyYXRpbmcgPSBUcnVlCisKKyAgICBkZWYgY2xlYXJfYnVzeShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5nZW5lcmF0aW5nOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJkYXRhLWdlbmVyYXRlZCIpCisgICAgICAgICAgICBzZWxmLmdlbmVyYXRpbmcgPSBGYWxzZQorCisgICAgZGVmIHJ1bkNvbW1hbmQoc2VsZiwgY29tbWFuZGxpbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQsIGVycm9yID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChjb21tYW5kbGluZSkKKyAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXJyb3IgcnVubmluZyBjb21tYW5kICclcyc6ICVzIiAlIChjb21tYW5kbGluZSwgZXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jID0gW10KKyAgICAgICAgICAgIHNlbGYuY2xlYXJfYnVzeSgpCisgICAgICAgICAgICBzZWxmLmVtaXQoImNvbW1hbmQtZmFpbGVkIiwgIkhvYiBFeGNlcHRpb24gLSAlcyIgJSAoc3RyKGUpKSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcnVuX25leHRfY29tbWFuZChzZWxmLCBpbml0Y21kPU5vbmUpOgorICAgICAgICBpZiBpbml0Y21kICE9IE5vbmU6CisgICAgICAgICAgICBzZWxmLmluaXRjbWQgPSBpbml0Y21kCisKKyAgICAgICAgaWYgc2VsZi5jb21tYW5kc19hc3luYzoKKyAgICAgICAgICAgIHNlbGYuc2V0X2J1c3koKQorICAgICAgICAgICAgbmV4dF9jb21tYW5kID0gc2VsZi5jb21tYW5kc19hc3luYy5wb3AoMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfYnVzeSgpCisgICAgICAgICAgICBpZiBzZWxmLmluaXRjbWQgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImNvbW1hbmQtc3VjY2VlZGVkIiwgc2VsZi5pbml0Y21kKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX1BBVEhfTEFZRVJTOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZmluZENvbmZpZ0ZpbGVQYXRoIiwgImJibGF5ZXJzLmNvbmYiXSkKKyAgICAgICAgZWxpZiBuZXh0X2NvbW1hbmQgPT0gc2VsZi5TVUJfRklMRVNfRElTVFJPOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZmluZENvbmZpZ0ZpbGVzIiwgIkRJU1RSTyJdKQorICAgICAgICBlbGlmIG5leHRfY29tbWFuZCA9PSBzZWxmLlNVQl9GSUxFU19NQUNIOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZmluZENvbmZpZ0ZpbGVzIiwgIk1BQ0hJTkUiXSkKKyAgICAgICAgZWxpZiBuZXh0X2NvbW1hbmQgPT0gc2VsZi5TVUJfRklMRVNfU0RLTUFDSDoKKyAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImZpbmRDb25maWdGaWxlcyIsICJNQUNISU5FLVNESyJdKQorICAgICAgICBlbGlmIG5leHRfY29tbWFuZCA9PSBzZWxmLlNVQl9NQVRDSF9DTEFTUzoKKyAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImZpbmRGaWxlc01hdGNoaW5nSW5EaXIiLCAicm9vdGZzXyIsICJjbGFzc2VzIl0pCisgICAgICAgIGVsaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX1BBUlNFX0NPTkZJRzoKKyAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInJlc2V0Q29va2VyIl0pCisgICAgICAgIGVsaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX0dORVJBVEVfVEdUUzoKKyAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImdlbmVyYXRlVGFyZ2V0c1RyZWUiLCAiY2xhc3Nlcy9pbWFnZS5iYmNsYXNzIiwgW11dKQorICAgICAgICBlbGlmIG5leHRfY29tbWFuZCA9PSBzZWxmLlNVQl9HRU5FUkFURV9QS0dJTkZPOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsidHJpZ2dlckV2ZW50IiwgImJiLmV2ZW50LlJlcXVlc3RQYWNrYWdlSW5mbygpIl0pCisgICAgICAgIGVsaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX1NBTklUWV9DSEVDSzoKKyAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInRyaWdnZXJFdmVudCIsICJiYi5ldmVudC5TYW5pdHlDaGVjaygpIl0pCisgICAgICAgIGVsaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX05FVFdPUktfVEVTVDoKKyAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInRyaWdnZXJFdmVudCIsICJiYi5ldmVudC5OZXR3b3JrVGVzdCgpIl0pCisgICAgICAgIGVsaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX0JVSUxEX1JFQ0lQRVM6CisgICAgICAgICAgICBzZWxmLmNsZWFyX2J1c3koKQorICAgICAgICAgICAgc2VsZi5idWlsZGluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImJ1aWxkVGFyZ2V0cyIsIHNlbGYucmVjaXBlX3F1ZXVlLCBzZWxmLmRlZmF1bHRfdGFza10pCisgICAgICAgICAgICBzZWxmLnJlY2lwZV9xdWV1ZSA9IFtdCisgICAgICAgIGVsaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX0JVSUxEX0lNQUdFOgorICAgICAgICAgICAgc2VsZi5jbGVhcl9idXN5KCkKKyAgICAgICAgICAgIHNlbGYuYnVpbGRpbmcgPSBUcnVlCisgICAgICAgICAgICB0YXJnZXQgPSBzZWxmLmltYWdlCisKKyAgICAgICAgICAgIGlmIHNlbGYuYmFzZV9pbWFnZToKKyAgICAgICAgICAgICAgICAjIFJlcXVlc3QgdGhlIGJ1aWxkIG9mIGEgY3VzdG9tIGltYWdlCisgICAgICAgICAgICAgICAgc2VsZi5nZW5lcmF0ZV9ob2JfYmFzZV9pbWFnZSh0YXJnZXQpCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIkxJTkdVQVNfSU5TVEFMTCIsICIiLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICAgICAgaG9iSW1hZ2UgPSBzZWxmLnJ1bkNvbW1hbmQoWyJtYXRjaEZpbGUiLCB0YXJnZXQgKyAiLmJiIl0pCisgICAgICAgICAgICAgICAgaWYgc2VsZi5iYXNlX2ltYWdlICE9IHNlbGYucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICAgICAgICAgIGJhc2VJbWFnZSA9IHNlbGYucnVuQ29tbWFuZChbIm1hdGNoRmlsZSIsIHNlbGYuYmFzZV9pbWFnZSArICIuYmIiXSkKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHNlbGYucnVuQ29tbWFuZChbImdlbmVyYXRlTmV3SW1hZ2UiLCBob2JJbWFnZSwgYmFzZUltYWdlLCBzZWxmLnBhY2thZ2VfcXVldWUsIFRydWUsICIiXSkKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ICs9IHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwuc2V0X2N1c3RvbV9pbWFnZV92ZXJzaW9uKHZlcnNpb24pCisKKyAgICAgICAgICAgIHRhcmdldHMgPSBbdGFyZ2V0XQorICAgICAgICAgICAgaWYgc2VsZi50b29sY2hhaW5fcGFja2FnZXM6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIlRPT0xDSEFJTl9UQVJHRVRfVEFTSyIsICIgIi5qb2luKHNlbGYudG9vbGNoYWluX3BhY2thZ2VzKSwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgICAgIHRhcmdldHMuYXBwZW5kKHRhcmdldCArICI6ZG9fcG9wdWxhdGVfc2RrIikKKworICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiYnVpbGRUYXJnZXRzIiwgdGFyZ2V0cywgc2VsZi5kZWZhdWx0X3Rhc2tdKQorCisgICAgZGVmIGRpc3BsYXlfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuY2xlYXJfYnVzeSgpCisgICAgICAgIHNlbGYuZW1pdCgiY29tbWFuZC1mYWlsZWQiLCBzZWxmLmVycm9yX21zZykKKyAgICAgICAgc2VsZi5lcnJvcl9tc2cgPSAiIgorICAgICAgICBpZiBzZWxmLmJ1aWxkaW5nOgorICAgICAgICAgICAgc2VsZi5idWlsZGluZyA9IEZhbHNlCisKKyAgICBkZWYgaGFuZGxlX2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICAgICAgaWYgbm90IGV2ZW50OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYuYnVpbGRpbmc6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfcGhhc2UgPSAiYnVpbGRpbmciCisgICAgICAgICAgICBzZWxmLmJ1aWxkLmhhbmRsZV9ldmVudChldmVudCkKKworICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYWNrYWdlSW5mbyk6CisgICAgICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwucG9wdWxhdGUoZXZlbnQuX3BrZ2luZm9saXN0KQorICAgICAgICAgICAgc2VsZi5lbWl0KCJwYWNrYWdlLXBvcHVsYXRlZCIpCisgICAgICAgICAgICBzZWxmLnJ1bl9uZXh0X2NvbW1hbmQoKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuU2FuaXR5Q2hlY2tQYXNzZWQpOgorICAgICAgICAgICAgcmVwYXJzZSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCX0lOVkFMSURDT05GIl0pIG9yIE5vbmUKKyAgICAgICAgICAgIGlmIHJlcGFyc2UgaXMgVHJ1ZToKKyAgICAgICAgICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiQkJfSU5WQUxJRENPTkYiLCBGYWxzZSwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInNldFByZVBvc3RDb25mRmlsZXMiLCAiY29uZi8uaG9iLmNvbmYiLCAiIl0pCisgICAgICAgICAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5wcmVwZW5kKHNlbGYuU1VCX1BBUlNFX0NPTkZJRykKKyAgICAgICAgICAgIHNlbGYucnVuX25leHRfY29tbWFuZCgpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5TYW5pdHlDaGVja0ZhaWxlZCk6CisgICAgICAgICAgICBzZWxmLmVtaXQoInNhbml0eS1mYWlsZWQiLCBldmVudC5fbXNnLCBldmVudC5fbmV0d29ya19lcnJvcikKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmJ1aWxkaW5nOgorICAgICAgICAgICAgICAgIGlmIGV2ZW50LmxldmVsbm8gPj0gbG9nZ2luZy5FUlJPUjoKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyKCkKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gZm9ybWF0dGVyLmZvcm1hdChldmVudCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcl9tc2cgKz0gbXNnICsgJ1xuJworICAgICAgICAgICAgICAgIGVsaWYgZXZlbnQubGV2ZWxubyA+PSBsb2dnaW5nLldBUk5JTkcgYW5kIHNlbGYucGFyc2luZyA9PSBUcnVlOgorICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoKQorICAgICAgICAgICAgICAgICAgICBtc2cgPSBmb3JtYXR0ZXIuZm9ybWF0KGV2ZW50KQorICAgICAgICAgICAgICAgICAgICB3YXJuX21zZyA9IG1zZyArICdcbicKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJwYXJzaW5nLXdhcm5pbmciLCB3YXJuX21zZykKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlRhcmdldHNUcmVlR2VuZXJhdGVkKToKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9waGFzZSA9ICJkYXRhIGdlbmVyYXRpb24iCisgICAgICAgICAgICBpZiBldmVudC5fbW9kZWw6CisgICAgICAgICAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwucG9wdWxhdGUoZXZlbnQuX21vZGVsKQorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgicmVjaXBlLXBvcHVsYXRlZCIpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ29uZmlnRmlsZXNGb3VuZCk6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfcGhhc2UgPSAiY29uZmlndXJhdGlvbiBsb29rdXAiCisgICAgICAgICAgICB2YXIgPSBldmVudC5fdmFyaWFibGUKKyAgICAgICAgICAgIHZhbHVlcyA9IGV2ZW50Ll92YWx1ZXMKKyAgICAgICAgICAgIHZhbHVlcy5zb3J0KCkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiY29uZmlnLXVwZGF0ZWQiLCB2YXIsIHZhbHVlcykKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5Db25maWdGaWxlUGF0aEZvdW5kKToKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9waGFzZSA9ICJjb25maWd1cmF0aW9uIGxvb2t1cCIKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5GaWxlc01hdGNoaW5nRm91bmQpOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X3BoYXNlID0gImNvbmZpZ3VyYXRpb24gbG9va3VwIgorICAgICAgICAgICAgIyBGSVhNRTogaGFyZCBjb2RpbmcsIHNob3VsZCBhdCBsZWFzdCBiZSBhIHZhcmlhYmxlIHNoYXJlZCBiZXR3ZWVuCisgICAgICAgICAgICAjIGhlcmUgYW5kIHRoZSBjYWxsZXIKKyAgICAgICAgICAgIGlmIGV2ZW50Ll9wYXR0ZXJuID09ICJyb290ZnNfIjoKKyAgICAgICAgICAgICAgICBmb3JtYXRzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgbWF0Y2ggaW4gZXZlbnQuX21hdGNoZXM6CisgICAgICAgICAgICAgICAgICAgIGNsYXNzbmFtZSwgc2VwLCBjbHMgPSBtYXRjaC5ycGFydGl0aW9uKCIuIikKKyAgICAgICAgICAgICAgICAgICAgZnMsIHNlcCwgZm9ybWF0ID0gY2xhc3NuYW1lLnJwYXJ0aXRpb24oIl8iKQorICAgICAgICAgICAgICAgICAgICBmb3JtYXRzLmFwcGVuZChmb3JtYXQpCisgICAgICAgICAgICAgICAgZm9ybWF0cy5zb3J0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoInBhY2thZ2UtZm9ybWF0cy11cGRhdGVkIiwgZm9ybWF0cykKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQpOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X3BoYXNlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5ydW5fbmV4dF9jb21tYW5kKCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQpOgorICAgICAgICAgICAgaWYgZXZlbnQuZXJyb3Igbm90IGluICgiRm9yY2VkIHNodXRkb3duIiwgIlN0b3BwZWQgYnVpbGQiKToKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yX21zZyArPSBldmVudC5lcnJvcgorICAgICAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYyA9IFtdCisgICAgICAgICAgICBzZWxmLmRpc3BsYXlfZXJyb3IoKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ldmVudC5QYXJzZVN0YXJ0ZWQsCisgICAgICAgICAgICAgICAgIGJiLmV2ZW50LkNhY2hlTG9hZFN0YXJ0ZWQsCisgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlRyZWVEYXRhUHJlcGFyYXRpb25TdGFydGVkLAorICAgICAgICAgICAgICAgICApKToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSB7fQorICAgICAgICAgICAgbWVzc2FnZVsiZXZlbnRuYW1lIl0gPSBiYi5ldmVudC5nZXROYW1lKGV2ZW50KQorICAgICAgICAgICAgbWVzc2FnZVsiY3VycmVudCJdID0gMAorICAgICAgICAgICAgbWVzc2FnZVsidG90YWwiXSA9IE5vbmUKKyAgICAgICAgICAgIG1lc3NhZ2VbInRpdGxlIl0gPSAiUGFyc2luZyByZWNpcGVzIgorICAgICAgICAgICAgc2VsZi5lbWl0KCJwYXJzaW5nLXN0YXJ0ZWQiLCBtZXNzYWdlKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VTdGFydGVkKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNpbmcgPSBUcnVlCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmV2ZW50LlBhcnNlUHJvZ3Jlc3MsCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuQ2FjaGVMb2FkUHJvZ3Jlc3MsCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvblByb2dyZXNzKSk6CisgICAgICAgICAgICBtZXNzYWdlID0ge30KKyAgICAgICAgICAgIG1lc3NhZ2VbImV2ZW50bmFtZSJdID0gYmIuZXZlbnQuZ2V0TmFtZShldmVudCkKKyAgICAgICAgICAgIG1lc3NhZ2VbImN1cnJlbnQiXSA9IGV2ZW50LmN1cnJlbnQKKyAgICAgICAgICAgIG1lc3NhZ2VbInRvdGFsIl0gPSBldmVudC50b3RhbAorICAgICAgICAgICAgbWVzc2FnZVsidGl0bGUiXSA9ICJQYXJzaW5nIHJlY2lwZXMiCisgICAgICAgICAgICBzZWxmLmVtaXQoInBhcnNpbmciLCBtZXNzYWdlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCwKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5DYWNoZUxvYWRDb21wbGV0ZWQsCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvbkNvbXBsZXRlZCkpOgorICAgICAgICAgICAgbWVzc2FnZSA9IHt9CisgICAgICAgICAgICBtZXNzYWdlWyJldmVudG5hbWUiXSA9IGJiLmV2ZW50LmdldE5hbWUoZXZlbnQpCisgICAgICAgICAgICBtZXNzYWdlWyJjdXJyZW50Il0gPSBldmVudC50b3RhbAorICAgICAgICAgICAgbWVzc2FnZVsidG90YWwiXSA9IGV2ZW50LnRvdGFsCisgICAgICAgICAgICBtZXNzYWdlWyJ0aXRsZSJdID0gIlBhcnNpbmcgcmVjaXBlcyIKKyAgICAgICAgICAgIHNlbGYuZW1pdCgicGFyc2luZy1jb21wbGV0ZWQiLCBtZXNzYWdlKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2luZyA9IEZhbHNlCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTmV0d29ya1Rlc3RGYWlsZWQpOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJuZXR3b3JrLWZhaWxlZCIpCisgICAgICAgICAgICBzZWxmLnJ1bl9uZXh0X2NvbW1hbmQoKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50Lk5ldHdvcmtUZXN0UGFzc2VkKToKKyAgICAgICAgICAgIHNlbGYuZW1pdCgibmV0d29yay1wYXNzZWQiKQorICAgICAgICAgICAgc2VsZi5ydW5fbmV4dF9jb21tYW5kKCkKKworICAgICAgICBpZiBzZWxmLmVycm9yX21zZyBhbmQgbm90IHNlbGYuY29tbWFuZHNfYXN5bmM6CisgICAgICAgICAgICBzZWxmLmRpc3BsYXlfZXJyb3IoKQorCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGluaXRfY29va2VyKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJjcmVhdGVDb25maWdGaWxlIiwgIi5ob2IuY29uZiJdKQorCisgICAgZGVmIHNldF9leHRyYV9pbmhlcml0KHNlbGYsIGJiY2xhc3MpOgorICAgICAgICBzZWxmLmFwcGVuZF92YXJfaW5fZmlsZSgiSU5IRVJJVCIsIGJiY2xhc3MsICIuaG9iLmNvbmYiKQorCisgICAgZGVmIHNldF9iYmxheWVycyhzZWxmLCBiYmxheWVycyk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJCQkxBWUVSUyIsICIgIi5qb2luKGJibGF5ZXJzKSwgImJibGF5ZXJzLmNvbmYiKQorCisgICAgZGVmIHNldF9tYWNoaW5lKHNlbGYsIG1hY2hpbmUpOgorICAgICAgICBpZiBtYWNoaW5lOgorICAgICAgICAgICAgc2VsZi5lYXJseV9hc3NpZ25fdmFyX2luX2ZpbGUoIk1BQ0hJTkUiLCBtYWNoaW5lLCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X3Nka19tYWNoaW5lKHNlbGYsIHNka19tYWNoaW5lKToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIlNES01BQ0hJTkUiLCBzZGtfbWFjaGluZSwgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9pbWFnZV9mc3R5cGVzKHNlbGYsIGltYWdlX2ZzdHlwZXMpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiSU1BR0VfRlNUWVBFUyIsIGltYWdlX2ZzdHlwZXMsICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfZGlzdHJvKHNlbGYsIGRpc3Rybyk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJESVNUUk8iLCBkaXN0cm8sICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfcGFja2FnZV9mb3JtYXQoc2VsZiwgZm9ybWF0KToKKyAgICAgICAgcGFja2FnZV9jbGFzc2VzID0gIiIKKyAgICAgICAgZm9yIHBrZ2ZtdCBpbiBmb3JtYXQuc3BsaXQoKToKKyAgICAgICAgICAgIHBhY2thZ2VfY2xhc3NlcyArPSAoInBhY2thZ2VfJXMiICUgcGtnZm10ICsgIiAiKQorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiUEFDS0FHRV9DTEFTU0VTIiwgcGFja2FnZV9jbGFzc2VzLCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X2JidGhyZWFkcyhzZWxmLCB0aHJlYWRzKToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIkJCX05VTUJFUl9USFJFQURTIiwgdGhyZWFkcywgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9wbWFrZShzZWxmLCB0aHJlYWRzKToKKyAgICAgICAgcG1ha2UgPSAiLWogJXMiICUgdGhyZWFkcworICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiUEFSQUxMRUxfTUFLRSIsIHBtYWtlLCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X2RsX2RpcihzZWxmLCBkaXJlY3RvcnkpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiRExfRElSIiwgZGlyZWN0b3J5LCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X3NzdGF0ZV9kaXIoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIlNTVEFURV9ESVIiLCBkaXJlY3RvcnksICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfc3N0YXRlX21pcnJvcnMoc2VsZiwgdXJsKToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIlNTVEFURV9NSVJST1JTIiwgdXJsLCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X2V4dHJhX3NpemUoc2VsZiwgaW1hZ2VfZXh0cmFfc2l6ZSk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UiLCBzdHIoaW1hZ2VfZXh0cmFfc2l6ZSksICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfcm9vdGZzX3NpemUoc2VsZiwgaW1hZ2Vfcm9vdGZzX3NpemUpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiSU1BR0VfUk9PVEZTX1NJWkUiLCBzdHIoaW1hZ2Vfcm9vdGZzX3NpemUpLCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X2luY29tcGF0aWJsZV9saWNlbnNlKHNlbGYsIGluY29tcGF0X2xpY2Vuc2UpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiSU5DT01QQVRJQkxFX0xJQ0VOU0UiLCBpbmNvbXBhdF9saWNlbnNlLCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X2V4dHJhX3NldHRpbmcoc2VsZiwgZXh0cmFfc2V0dGluZyk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJFWFRSQV9TRVRUSU5HIiwgZXh0cmFfc2V0dGluZywgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9leHRyYV9jb25maWcoc2VsZiwgZXh0cmFfc2V0dGluZyk6CisgICAgICAgIG9sZF9leHRyYV9zZXR0aW5nID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiRVhUUkFfU0VUVElORyJdKSBvciB7fQorICAgICAgICBvbGRfZXh0cmFfc2V0dGluZyA9IHN0cihvbGRfZXh0cmFfc2V0dGluZykKKworICAgICAgICBvbGRfZXh0cmFfc2V0dGluZyA9IGFzdC5saXRlcmFsX2V2YWwob2xkX2V4dHJhX3NldHRpbmcpCisgICAgICAgIGlmIG5vdCB0eXBlKG9sZF9leHRyYV9zZXR0aW5nKSA9PSBkaWN0OgorICAgICAgICAgICAgb2xkX2V4dHJhX3NldHRpbmcgPSB7fQorCisgICAgICAgICMgc2V0dGluZ3Mgbm90IGNoYW5nZWQKKyAgICAgICAgaWYgb2xkX2V4dHJhX3NldHRpbmcgPT0gZXh0cmFfc2V0dGluZzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgcmVtb3ZlIHRoZSBvbGQgRVhUUkEgU0VUVElORyB2YXJpYWJsZQorICAgICAgICBzZWxmLnJlbW92ZV92YXJfZnJvbV9maWxlKCJFWFRSQV9TRVRUSU5HIikKKworICAgICAgICAjIHJlbW92ZSBvbGQgc2V0dGluZ3MgZnJvbSBjb25mCisgICAgICAgIGZvciBrZXkgaW4gb2xkX2V4dHJhX3NldHRpbmcua2V5cygpOgorICAgICAgICAgICAgaWYga2V5IG5vdCBpbiBleHRyYV9zZXR0aW5nOgorICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX3Zhcl9mcm9tX2ZpbGUoa2V5KQorCisgICAgICAgICMgYWRkIG5ldyBzZXR0aW5ncworICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBleHRyYV9zZXR0aW5nLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoa2V5LCB2YWx1ZSwgImxvY2FsLmNvbmYiKQorCisgICAgICAgIGlmIGV4dHJhX3NldHRpbmc6CisgICAgICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiRVhUUkFfU0VUVElORyIsIGV4dHJhX3NldHRpbmcsICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfaHR0cF9wcm94eShzZWxmLCBodHRwX3Byb3h5KToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoImh0dHBfcHJveHkiLCBodHRwX3Byb3h5LCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X2h0dHBzX3Byb3h5KHNlbGYsIGh0dHBzX3Byb3h5KToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoImh0dHBzX3Byb3h5IiwgaHR0cHNfcHJveHksICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfZnRwX3Byb3h5KHNlbGYsIGZ0cF9wcm94eSk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJmdHBfcHJveHkiLCBmdHBfcHJveHksICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfc29ja3NfcHJveHkoc2VsZiwgc29ja3NfcHJveHkpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiYWxsX3Byb3h5Iiwgc29ja3NfcHJveHksICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfY3ZzX3Byb3h5KHNlbGYsIGhvc3QsIHBvcnQpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiQ1ZTX1BST1hZX0hPU1QiLCBob3N0LCAibG9jYWwuY29uZiIpCisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJDVlNfUFJPWFlfUE9SVCIsIHBvcnQsICJsb2NhbC5jb25mIikKKworICAgIGRlZiByZXF1ZXN0X3BhY2thZ2VfaW5mbyhzZWxmKToKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfR0VORVJBVEVfUEtHSU5GTykKKyAgICAgICAgc2VsZi5ydW5fbmV4dF9jb21tYW5kKHNlbGYuUE9QVUxBVEVfUEFDS0FHRUlORk8pCisKKyAgICBkZWYgdHJpZ2dlcl9zYW5pdHlfY2hlY2soc2VsZik6CisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX1NBTklUWV9DSEVDSykKKyAgICAgICAgc2VsZi5ydW5fbmV4dF9jb21tYW5kKHNlbGYuU0FOSVRZX0NIRUNLKQorCisgICAgZGVmIHRyaWdnZXJfbmV0d29ya190ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jLmFwcGVuZChzZWxmLlNVQl9ORVRXT1JLX1RFU1QpCisgICAgICAgIHNlbGYucnVuX25leHRfY29tbWFuZChzZWxmLk5FVFdPUktfVEVTVCkKKworICAgIGRlZiBnZW5lcmF0ZV9jb25maWd1cmF0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJzZXRQcmVQb3N0Q29uZkZpbGVzIiwgImNvbmYvLmhvYi5jb25mIiwgIiJdKQorICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jLmFwcGVuZChzZWxmLlNVQl9QQVJTRV9DT05GSUcpCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX1BBVEhfTEFZRVJTKQorICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jLmFwcGVuZChzZWxmLlNVQl9GSUxFU19ESVNUUk8pCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX0ZJTEVTX01BQ0gpCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX0ZJTEVTX1NES01BQ0gpCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX01BVENIX0NMQVNTKQorICAgICAgICBzZWxmLnJ1bl9uZXh0X2NvbW1hbmQoc2VsZi5HRU5FUkFURV9DT05GSUdVUkFUSU9OKQorCisgICAgZGVmIGdlbmVyYXRlX3JlY2lwZXMoc2VsZik6CisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInNldFByZVBvc3RDb25mRmlsZXMiLCAiY29uZi8uaG9iLmNvbmYiLCAiIl0pCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX1BBUlNFX0NPTkZJRykKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfR05FUkFURV9UR1RTKQorICAgICAgICBzZWxmLnJ1bl9uZXh0X2NvbW1hbmQoc2VsZi5HRU5FUkFURV9SRUNJUEVTKQorCisgICAgZGVmIGdlbmVyYXRlX3BhY2thZ2VzKHNlbGYsIHRndHMsIGRlZmF1bHRfdGFzaz0iYnVpbGQiKToKKyAgICAgICAgdGFyZ2V0cyA9IFtdCisgICAgICAgIHRhcmdldHMuZXh0ZW5kKHRndHMpCisgICAgICAgIHNlbGYucmVjaXBlX3F1ZXVlID0gdGFyZ2V0cworICAgICAgICBzZWxmLmRlZmF1bHRfdGFzayA9IGRlZmF1bHRfdGFzaworICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJzZXRQcmVQb3N0Q29uZkZpbGVzIiwgImNvbmYvLmhvYi5jb25mIiwgIiJdKQorICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jLmFwcGVuZChzZWxmLlNVQl9QQVJTRV9DT05GSUcpCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX0JVSUxEX1JFQ0lQRVMpCisgICAgICAgIHNlbGYucnVuX25leHRfY29tbWFuZChzZWxmLkdFTkVSQVRFX1BBQ0tBR0VTKQorCisgICAgZGVmIGdlbmVyYXRlX2ltYWdlKHNlbGYsIGltYWdlLCBiYXNlX2ltYWdlLCBpbWFnZV9wYWNrYWdlcz1Ob25lLCB0b29sY2hhaW5fcGFja2FnZXM9Tm9uZSwgZGVmYXVsdF90YXNrPSJidWlsZCIpOgorICAgICAgICBzZWxmLmltYWdlID0gaW1hZ2UKKyAgICAgICAgc2VsZi5iYXNlX2ltYWdlID0gYmFzZV9pbWFnZQorICAgICAgICBpZiBpbWFnZV9wYWNrYWdlczoKKyAgICAgICAgICAgIHNlbGYucGFja2FnZV9xdWV1ZSA9IGltYWdlX3BhY2thZ2VzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnBhY2thZ2VfcXVldWUgPSBbXQorICAgICAgICBpZiB0b29sY2hhaW5fcGFja2FnZXM6CisgICAgICAgICAgICBzZWxmLnRvb2xjaGFpbl9wYWNrYWdlcyA9IHRvb2xjaGFpbl9wYWNrYWdlcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50b29sY2hhaW5fcGFja2FnZXMgPSBbXQorICAgICAgICBzZWxmLmRlZmF1bHRfdGFzayA9IGRlZmF1bHRfdGFzaworICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJzZXRQcmVQb3N0Q29uZkZpbGVzIiwgImNvbmYvLmhvYi5jb25mIiwgIiJdKQorICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jLmFwcGVuZChzZWxmLlNVQl9QQVJTRV9DT05GSUcpCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX0JVSUxEX0lNQUdFKQorICAgICAgICBzZWxmLnJ1bl9uZXh0X2NvbW1hbmQoc2VsZi5HRU5FUkFURV9JTUFHRSkKKworICAgIGRlZiBnZW5lcmF0ZV9uZXdfaW1hZ2Uoc2VsZiwgaW1hZ2UsIGJhc2VfaW1hZ2UsIHBhY2thZ2VfcXVldWUsIGRlc2NyaXB0aW9uKToKKyAgICAgICAgaWYgYmFzZV9pbWFnZToKKyAgICAgICAgICAgIGJhc2VfaW1hZ2UgPSBzZWxmLnJ1bkNvbW1hbmQoWyJtYXRjaEZpbGUiLCBzZWxmLmJhc2VfaW1hZ2UgKyAiLmJiIl0pCisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImdlbmVyYXRlTmV3SW1hZ2UiLCBpbWFnZSwgYmFzZV9pbWFnZSwgcGFja2FnZV9xdWV1ZSwgRmFsc2UsIGRlc2NyaXB0aW9uXSkKKworICAgIGRlZiBnZW5lcmF0ZV9ob2JfYmFzZV9pbWFnZShzZWxmLCBob2JfaW1hZ2UpOgorICAgICAgICBpbWFnZV9kaXIgPSBzZWxmLmdldF90b3BkaXIoKSArICIvcmVjaXBlcy9pbWFnZXMvIgorICAgICAgICByZWNpcGVfbmFtZSA9IGhvYl9pbWFnZSArICIuYmIiCisgICAgICAgIHNlbGYuZW5zdXJlX2RpcihpbWFnZV9kaXIpCisgICAgICAgIHNlbGYuZ2VuZXJhdGVfbmV3X2ltYWdlKGltYWdlX2RpciArIHJlY2lwZV9uYW1lLCBOb25lLCBbXSwgIiIpCisKKyAgICBkZWYgZW5zdXJlX2RpcihzZWxmLCBkaXJlY3RvcnkpOgorICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJlbnN1cmVEaXIiLCBkaXJlY3RvcnldKQorCisgICAgZGVmIGJ1aWxkX3N1Y2NlZWRlZF9hc3luYyhzZWxmKToKKyAgICAgICAgc2VsZi5idWlsZGluZyA9IEZhbHNlCisKKyAgICBkZWYgYnVpbGRfZmFpbGVkX2FzeW5jKHNlbGYpOgorICAgICAgICBzZWxmLmluaXRjbWQgPSBOb25lCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMgPSBbXQorICAgICAgICBzZWxmLmJ1aWxkaW5nID0gRmFsc2UKKworICAgIGRlZiBjYW5jZWxfcGFyc2Uoc2VsZik6CisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInN0YXRlRm9yY2VTaHV0ZG93biJdKQorCisgICAgZGVmIGNhbmNlbF9idWlsZChzZWxmLCBmb3JjZT1GYWxzZSk6CisgICAgICAgIGlmIGZvcmNlOgorICAgICAgICAgICAgIyBGb3JjZSB0aGUgY29va2VyIHRvIHN0b3AgYXMgcXVpY2tseSBhcyBwb3NzaWJsZQorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFdhaXQgZm9yIHRhc2tzIHRvIGNvbXBsZXRlIGJlZm9yZSBzaHV0dGluZyBkb3duLCB0aGlzIGhlbHBzCisgICAgICAgICAgICAjIGxlYXZlIHRoZSB3b3JrZGlyIGluIGEgdXNhYmxlIHN0YXRlCisgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJzdGF0ZVNodXRkb3duIl0pCisKKyAgICBkZWYgcmVzZXRfYnVpbGQoc2VsZik6CisgICAgICAgIHNlbGYuYnVpbGQucmVzZXQoKQorCisgICAgZGVmIGdldF9sb2dmaWxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCX0NPTlNPTEVMT0ciXSlbMF0KKworICAgIGRlZiBnZXRfdG9wZGlyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiVE9QRElSIl0pIG9yICIiCisKKyAgICBkZWYgX3JlbW92ZV9yZWR1bmRhbnQoc2VsZiwgc3RyaW5nKToKKyAgICAgICAgcmV0ID0gW10KKyAgICAgICAgZm9yIGkgaW4gc3RyaW5nLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBpIG5vdCBpbiByZXQ6CisgICAgICAgICAgICAgICAgcmV0LmFwcGVuZChpKQorICAgICAgICByZXR1cm4gIiAiLmpvaW4ocmV0KQorCisgICAgZGVmIHNldF92YXJfaW5fZmlsZShzZWxmLCB2YXIsIHZhbCwgZGVmYXVsdF9maWxlPU5vbmUpOgorICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJlbmFibGVEYXRhVHJhY2tpbmciXSkKKyAgICAgICAgc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhckZpbGUiLCB2YXIsIHZhbCwgZGVmYXVsdF9maWxlLCAic2V0Il0pCisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImRpc2FibGVEYXRhVHJhY2tpbmciXSkKKworICAgIGRlZiBlYXJseV9hc3NpZ25fdmFyX2luX2ZpbGUoc2VsZiwgdmFyLCB2YWwsIGRlZmF1bHRfZmlsZT1Ob25lKToKKyAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZW5hYmxlRGF0YVRyYWNraW5nIl0pCisgICAgICAgIHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJzZXRWYXJGaWxlIiwgdmFyLCB2YWwsIGRlZmF1bHRfZmlsZSwgImVhcmx5QXNzaWduIl0pCisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImRpc2FibGVEYXRhVHJhY2tpbmciXSkKKworICAgIGRlZiByZW1vdmVfdmFyX2Zyb21fZmlsZShzZWxmLCB2YXIpOgorICAgICAgICBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsicmVtb3ZlVmFyRmlsZSIsIHZhcl0pCisKKyAgICBkZWYgYXBwZW5kX3Zhcl9pbl9maWxlKHNlbGYsIHZhciwgdmFsLCBkZWZhdWx0X2ZpbGU9Tm9uZSk6CisgICAgICAgIHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJzZXRWYXJGaWxlIiwgdmFyLCB2YWwsIGRlZmF1bHRfZmlsZSwgImFwcGVuZCJdKQorCisgICAgZGVmIGFwcGVuZF90b19iYmZpbGVzKHNlbGYsIHZhbCk6CisgICAgICAgIGJiZmlsZXMgPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQkZJTEVTIiwgIkZhbHNlIl0pIG9yICIiCisgICAgICAgIGJiZmlsZXMgPSBiYmZpbGVzLnNwbGl0KCkKKyAgICAgICAgaWYgdmFsIG5vdCBpbiBiYmZpbGVzOgorICAgICAgICAgICAgc2VsZi5hcHBlbmRfdmFyX2luX2ZpbGUoIkJCRklMRVMiLCB2YWwsICJiYmxheWVycy5jb25mIikKKworICAgIGRlZiBnZXRfcGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAgIyByZXRyaWV2ZSB0aGUgcGFyYW1ldGVycyBmcm9tIGJpdGJha2UKKyAgICAgICAgcGFyYW1zID0ge30KKyAgICAgICAgcGFyYW1zWyJjb3JlX2Jhc2UiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkNPUkVCQVNFIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1sibGF5ZXIiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCTEFZRVJTIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1sibGF5ZXJzX25vbl9yZW1vdmFibGUiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCTEFZRVJTX05PTl9SRU1PVkFCTEUiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJkbGRpciJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiRExfRElSIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1sibWFjaGluZSJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiTUFDSElORSJdKSBvciAiIgorICAgICAgICBwYXJhbXNbImRpc3RybyJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiRElTVFJPIl0pIG9yICJkZWZhdWx0c2V0dXAiCisgICAgICAgIHBhcmFtc1sicGNsYXNzIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJQQUNLQUdFX0NMQVNTRVMiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJzc3RhdGVkaXIiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlNTVEFURV9ESVIiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJzc3RhdGVtaXJyb3IiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlNTVEFURV9NSVJST1JTIl0pIG9yICIiCisKKyAgICAgICAgbnVtX3RocmVhZHMgPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRDcHVDb3VudCJdKQorICAgICAgICBpZiBub3QgbnVtX3RocmVhZHM6CisgICAgICAgICAgICBudW1fdGhyZWFkcyA9IDEKKyAgICAgICAgICAgIG1heF90aHJlYWRzID0gNjU1MzYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBudW1fdGhyZWFkcyA9IGludChudW1fdGhyZWFkcykKKyAgICAgICAgICAgICAgICBtYXhfdGhyZWFkcyA9IDE2ICogbnVtX3RocmVhZHMKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBudW1fdGhyZWFkcyA9IDEKKyAgICAgICAgICAgICAgICBtYXhfdGhyZWFkcyA9IDY1NTM2CisgICAgICAgIHBhcmFtc1sibWF4X3RocmVhZHMiXSA9IG1heF90aHJlYWRzCisKKyAgICAgICAgYmJ0aHJlYWQgPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQl9OVU1CRVJfVEhSRUFEUyJdKQorICAgICAgICBpZiBub3QgYmJ0aHJlYWQ6CisgICAgICAgICAgICBiYnRocmVhZCA9IG51bV90aHJlYWRzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYmJ0aHJlYWQgPSBpbnQoYmJ0aHJlYWQpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgYmJ0aHJlYWQgPSBudW1fdGhyZWFkcworICAgICAgICBwYXJhbXNbImJidGhyZWFkIl0gPSBiYnRocmVhZAorCisgICAgICAgIHBtYWtlID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiUEFSQUxMRUxfTUFLRSJdKQorICAgICAgICBpZiBub3QgcG1ha2U6CisgICAgICAgICAgICBwbWFrZSA9IG51bV90aHJlYWRzCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShwbWFrZSwgaW50KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwbWFrZSA9IGludChwbWFrZS5sc3RyaXAoIi1qICIpKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBtYWtlID0gbnVtX3RocmVhZHMKKyAgICAgICAgcGFyYW1zWyJwbWFrZSJdID0gIi1qICVzIiAlIHBtYWtlCisKKyAgICAgICAgcGFyYW1zWyJpbWFnZV9hZGRyIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJERVBMT1lfRElSX0lNQUdFIl0pIG9yICIiCisKKyAgICAgICAgaW1hZ2VfZXh0cmFfc2l6ZSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIklNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSJdKQorICAgICAgICBpZiBub3QgaW1hZ2VfZXh0cmFfc2l6ZToKKyAgICAgICAgICAgIGltYWdlX2V4dHJhX3NpemUgPSAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1hZ2VfZXh0cmFfc2l6ZSA9IGludChpbWFnZV9leHRyYV9zaXplKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGltYWdlX2V4dHJhX3NpemUgPSAwCisgICAgICAgIHBhcmFtc1siaW1hZ2VfZXh0cmFfc2l6ZSJdID0gaW1hZ2VfZXh0cmFfc2l6ZQorCisgICAgICAgIGltYWdlX3Jvb3Rmc19zaXplID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiSU1BR0VfUk9PVEZTX1NJWkUiXSkKKyAgICAgICAgaWYgbm90IGltYWdlX3Jvb3Rmc19zaXplOgorICAgICAgICAgICAgaW1hZ2Vfcm9vdGZzX3NpemUgPSAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1hZ2Vfcm9vdGZzX3NpemUgPSBpbnQoaW1hZ2Vfcm9vdGZzX3NpemUpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgaW1hZ2Vfcm9vdGZzX3NpemUgPSAwCisgICAgICAgIHBhcmFtc1siaW1hZ2Vfcm9vdGZzX3NpemUiXSA9IGltYWdlX3Jvb3Rmc19zaXplCisKKyAgICAgICAgaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiSU1BR0VfT1ZFUkhFQURfRkFDVE9SIl0pCisgICAgICAgIGlmIG5vdCBpbWFnZV9vdmVyaGVhZF9mYWN0b3I6CisgICAgICAgICAgICBpbWFnZV9vdmVyaGVhZF9mYWN0b3IgPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yID0gZmxvYXQoaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGltYWdlX292ZXJoZWFkX2ZhY3RvciA9IDEKKyAgICAgICAgcGFyYW1zWydpbWFnZV9vdmVyaGVhZF9mYWN0b3InXSA9IGltYWdlX292ZXJoZWFkX2ZhY3RvcgorCisgICAgICAgIHBhcmFtc1siaW5jb21wYXRfbGljZW5zZSJdID0gc2VsZi5fcmVtb3ZlX3JlZHVuZGFudChzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJJTkNPTVBBVElCTEVfTElDRU5TRSJdKSBvciAiIikKKyAgICAgICAgcGFyYW1zWyJzZGtfbWFjaGluZSJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiU0RLTUFDSElORSJdKSBvciBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJTREtfQVJDSCJdKSBvciAiIgorCisgICAgICAgIHBhcmFtc1siaW1hZ2VfZnN0eXBlcyJdID0gc2VsZi5fcmVtb3ZlX3JlZHVuZGFudChzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJJTUFHRV9GU1RZUEVTIl0pIG9yICIiKQorCisgICAgICAgIHBhcmFtc1siaW1hZ2VfdHlwZXMiXSA9IHNlbGYuX3JlbW92ZV9yZWR1bmRhbnQoc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiSU1BR0VfVFlQRVMiXSkgb3IgIiIpCisKKyAgICAgICAgcGFyYW1zWyJjb25mX3ZlcnNpb24iXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkNPTkZfVkVSU0lPTiJdKSBvciAiIgorICAgICAgICBwYXJhbXNbImxjb25mX3ZlcnNpb24iXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkxDT05GX1ZFUlNJT04iXSkgb3IgIiIKKworICAgICAgICBwYXJhbXNbInJ1bm5hYmxlX2ltYWdlX3R5cGVzIl0gPSBzZWxmLl9yZW1vdmVfcmVkdW5kYW50KHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlJVTk5BQkxFX0lNQUdFX1RZUEVTIl0pIG9yICIiKQorICAgICAgICBwYXJhbXNbInJ1bm5hYmxlX21hY2hpbmVfcGF0dGVybnMiXSA9IHNlbGYuX3JlbW92ZV9yZWR1bmRhbnQoc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiUlVOTkFCTEVfTUFDSElORV9QQVRURVJOUyJdKSBvciAiIikKKyAgICAgICAgcGFyYW1zWyJkZXBsb3lhYmxlX2ltYWdlX3R5cGVzIl0gPSBzZWxmLl9yZW1vdmVfcmVkdW5kYW50KHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkRFUExPWUFCTEVfSU1BR0VfVFlQRVMiXSkgb3IgIiIpCisgICAgICAgIHBhcmFtc1sia2VybmVsX2ltYWdlX3R5cGUiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIktFUk5FTF9JTUFHRVRZUEUiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJ0bXBkaXIiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlRNUERJUiJdKSBvciAiIgorICAgICAgICBwYXJhbXNbImRpc3Ryb192ZXJzaW9uIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJESVNUUk9fVkVSU0lPTiJdKSBvciAiIgorICAgICAgICBwYXJhbXNbInRhcmdldF9vcyJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiVEFSR0VUX09TIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1sidGFyZ2V0X2FyY2giXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlRBUkdFVF9BUkNIIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1sidHVuZV9wa2dhcmNoIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJUVU5FX1BLR0FSQ0giXSkgIG9yICIiCisgICAgICAgIHBhcmFtc1siYmJfdmVyc2lvbiJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJfTUlOX1ZFUlNJT04iXSkgb3IgIiIKKworICAgICAgICBwYXJhbXNbImRlZmF1bHRfdGFzayJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJfREVGQVVMVF9UQVNLIl0pIG9yICJidWlsZCIKKworICAgICAgICBwYXJhbXNbInNvY2tzX3Byb3h5Il0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJhbGxfcHJveHkiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJodHRwX3Byb3h5Il0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJodHRwX3Byb3h5Il0pIG9yICIiCisgICAgICAgIHBhcmFtc1siZnRwX3Byb3h5Il0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJmdHBfcHJveHkiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJodHRwc19wcm94eSJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiaHR0cHNfcHJveHkiXSkgb3IgIiIKKworICAgICAgICBwYXJhbXNbImN2c19wcm94eV9ob3N0Il0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJDVlNfUFJPWFlfSE9TVCJdKSBvciAiIgorICAgICAgICBwYXJhbXNbImN2c19wcm94eV9wb3J0Il0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJDVlNfUFJPWFlfUE9SVCJdKSBvciAiIgorCisgICAgICAgIHBhcmFtc1siaW1hZ2Vfd2hpdGVfcGF0dGVybiJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJVSV9JTUFHRV9XSElURV9QQVRURVJOIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1siaW1hZ2VfYmxhY2tfcGF0dGVybiJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJVSV9JTUFHRV9CTEFDS19QQVRURVJOIl0pIG9yICIiCisgICAgICAgIHJldHVybiBwYXJhbXMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYmxpc3Rtb2RlbC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYmxpc3Rtb2RlbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGRmMTU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9ibGlzdG1vZGVsLnB5CkBAIC0wLDAgKzEsOTAzIEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitpbXBvcnQgZ29iamVjdAorZnJvbSBiYi51aS5jcnVtYnMuaG9icGFnZXMgaW1wb3J0IEhvYlBhZ2UKKworIworIyBQYWNrYWdlTGlzdE1vZGVsCisjCitjbGFzcyBQYWNrYWdlTGlzdE1vZGVsKGd0ay5MaXN0U3RvcmUpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3MgZGVmaW5lcyBhbiBndGsuTGlzdFN0b3JlIHN1YmNsYXNzIHdoaWNoIHdpbGwgY29udmVydCB0aGUgb3V0cHV0CisgICAgb2YgdGhlIGJiLmV2ZW50LlRhcmdldHNUcmVlR2VuZXJhdGVkIGV2ZW50IGludG8gYSBndGsuTGlzdFN0b3JlIHdoaWxzdCBhbHNvCisgICAgcHJvdmlkaW5nIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBhY2Nlc3MgZ3RrLlRyZWVNb2RlbCBzdWJjbGFzc2VzIHdoaWNoCisgICAgcHJvdmlkZSBmaWx0ZXJlZCB2aWV3cyBvZiB0aGUgZGF0YS4KKyAgICAiIiIKKworICAgIChDT0xfTkFNRSwgQ09MX1ZFUiwgQ09MX1JFViwgQ09MX1JOTSwgQ09MX1NFQywgQ09MX1NVTSwgQ09MX1JERVAsIENPTF9SUFJPViwgQ09MX1NJWkUsIENPTF9SQ1AsIENPTF9CSU5CLCBDT0xfSU5DLCBDT0xfRkFERV9JTkMsIENPTF9GT05ULCBDT0xfRkxJU1QpID0gcmFuZ2UoMTUpCisKKyAgICBfX2dzaWduYWxzX18gPSB7CisgICAgICAgICJwYWNrYWdlLXNlbGVjdGlvbi1jaGFuZ2VkIiA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICB9CisKKyAgICBfX3Rvb2xjaGFpbl9yZXF1aXJlZF9wYWNrYWdlc19fID0gWyJwYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQiLCAicGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0LWRiZyJdCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYucnByb3ZfcGtnID0ge30KKyAgICAgICAgZ3RrLkxpc3RTdG9yZS5fX2luaXRfXyAoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX0JPT0xFQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9CT09MRUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HKQorICAgICAgICBzZWxmLnNvcnRfY29sdW1uX2lkLCBzZWxmLnNvcnRfb3JkZXIgPSBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FLCBndGsuU09SVF9BU0NFTkRJTkcKKworICAgICIiIgorICAgIEZpbmQgdGhlIG1vZGVsIHBhdGggZm9yIHRoZSBpdGVtX25hbWUKKyAgICBSZXR1cm5zIHRoZSBwYXRoIGluIHRoZSBtb2RlbCBvciBOb25lCisgICAgIiIiCisgICAgZGVmIGZpbmRfcGF0aF9mb3JfaXRlbShzZWxmLCBpdGVtX25hbWUpOgorICAgICAgICBwa2cgPSBpdGVtX25hbWUKKyAgICAgICAgaWYgaXRlbV9uYW1lIG5vdCBpbiBzZWxmLnBuX3BhdGgua2V5cygpOgorICAgICAgICAgICAgaWYgaXRlbV9uYW1lIG5vdCBpbiBzZWxmLnJwcm92X3BrZy5rZXlzKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHBrZyA9IHNlbGYucnByb3ZfcGtnW2l0ZW1fbmFtZV0KKyAgICAgICAgICAgIGlmIHBrZyBub3QgaW4gc2VsZi5wbl9wYXRoLmtleXMoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHJldHVybiBzZWxmLnBuX3BhdGhbcGtnXQorCisgICAgZGVmIGZpbmRfaXRlbV9mb3JfcGF0aChzZWxmLCBpdGVtX3BhdGgpOgorICAgICAgICByZXR1cm4gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX05BTUVdCisKKyAgICAiIiIKKyAgICBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gaXRlbSBpcyBhbiBpdGVtIHNwZWNpZmllZCBieSBmaWx0ZXIKKyAgICAiIiIKKyAgICBkZWYgdHJlZV9tb2RlbF9maWx0ZXIoc2VsZiwgbW9kZWwsIGl0LCBmaWx0ZXIpOgorICAgICAgICBuYW1lID0gbW9kZWwuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9OQU1FKQorCisgICAgICAgIGZvciBrZXkgaW4gZmlsdGVyLmtleXMoKToKKyAgICAgICAgICAgIGlmIGtleSA9PSBzZWxmLkNPTF9OQU1FOgorICAgICAgICAgICAgICAgIGlmIGZpbHRlcltrZXldICE9ICdTZWFyY2ggcGFja2FnZXMgYnkgbmFtZSc6CisgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUgYW5kIGZpbHRlcltrZXldIG5vdCBpbiBuYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG1vZGVsLmdldF92YWx1ZShpdCwga2V5KSBub3QgaW4gZmlsdGVyW2tleV06CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLmZpbHRlcmVkX25iICs9IDEKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICIiIgorICAgIENyZWF0ZSwgaWYgcmVxdWlyZWQsIGFuZCByZXR1cm4gYSBmaWx0ZXJlZCBndGsuVHJlZU1vZGVsU29ydAorICAgIGNvbnRhaW5pbmcgb25seSB0aGUgaXRlbXMgc3BlY2lmaWVkIGJ5IGZpbHRlcgorICAgICIiIgorICAgIGRlZiB0cmVlX21vZGVsKHNlbGYsIGZpbHRlciwgZXhjbHVkZWRfaXRlbXNfYWhlYWQ9RmFsc2UsIGluY2x1ZGVkX2l0ZW1zX2FoZWFkPUZhbHNlLCBzZWFyY2hfZGF0YT1Ob25lLCBpbml0aWFsPUZhbHNlKToKKyAgICAgICAgbW9kZWwgPSBzZWxmLmZpbHRlcl9uZXcoKQorICAgICAgICBzZWxmLmZpbHRlcmVkX25iID0gMAorICAgICAgICBtb2RlbC5zZXRfdmlzaWJsZV9mdW5jKHNlbGYudHJlZV9tb2RlbF9maWx0ZXIsIGZpbHRlcikKKworICAgICAgICBzb3J0ID0gZ3RrLlRyZWVNb2RlbFNvcnQobW9kZWwpCisgICAgICAgIHNvcnQuY29ubmVjdCAoJ3NvcnQtY29sdW1uLWNoYW5nZWQnLCBzZWxmLnNvcnRfY29sdW1uX2NoYW5nZWRfY2IpCisgICAgICAgIGlmIGluaXRpYWw6CisgICAgICAgICAgICBzb3J0LnNldF9zb3J0X2NvbHVtbl9pZChQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FLCBndGsuU09SVF9BU0NFTkRJTkcpCisgICAgICAgICAgICBzb3J0LnNldF9kZWZhdWx0X3NvcnRfZnVuYyhOb25lKQorICAgICAgICBlbGlmIGV4Y2x1ZGVkX2l0ZW1zX2FoZWFkOgorICAgICAgICAgICAgc29ydC5zZXRfZGVmYXVsdF9zb3J0X2Z1bmMoc2VsZi5leGNsdWRlX2l0ZW1fc29ydF9mdW5jLCBzZWFyY2hfZGF0YSkKKyAgICAgICAgZWxpZiBpbmNsdWRlZF9pdGVtc19haGVhZDoKKyAgICAgICAgICAgIHNvcnQuc2V0X2RlZmF1bHRfc29ydF9mdW5jKHNlbGYuaW5jbHVkZV9pdGVtX3NvcnRfZnVuYywgc2VhcmNoX2RhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWFyY2hfZGF0YSBhbmQgc2VhcmNoX2RhdGEhPSdTZWFyY2ggcmVjaXBlcyBieSBuYW1lJyBhbmQgc2VhcmNoX2RhdGEhPSdTZWFyY2ggcGFja2FnZSBncm91cHMgYnkgbmFtZSc6CisgICAgICAgICAgICAgICAgc29ydC5zZXRfZGVmYXVsdF9zb3J0X2Z1bmMoc2VsZi5zb3J0X2Z1bmMsIHNlYXJjaF9kYXRhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzb3J0LnNldF9zb3J0X2NvbHVtbl9pZChzZWxmLnNvcnRfY29sdW1uX2lkLCBzZWxmLnNvcnRfb3JkZXIpCisgICAgICAgICAgICAgICAgc29ydC5zZXRfZGVmYXVsdF9zb3J0X2Z1bmMoTm9uZSkKKworICAgICAgICBzb3J0LnNldF9zb3J0X2Z1bmMoUGFja2FnZUxpc3RNb2RlbC5DT0xfSU5DLCBzZWxmLnNvcnRfY29sdW1uLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9JTkMpCisgICAgICAgIHNvcnQuc2V0X3NvcnRfZnVuYyhQYWNrYWdlTGlzdE1vZGVsLkNPTF9TSVpFLCBzZWxmLnNvcnRfY29sdW1uLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9TSVpFKQorICAgICAgICBzb3J0LnNldF9zb3J0X2Z1bmMoUGFja2FnZUxpc3RNb2RlbC5DT0xfQklOQiwgc2VsZi5zb3J0X2JpbmJfY29sdW1uKQorICAgICAgICBzb3J0LnNldF9zb3J0X2Z1bmMoUGFja2FnZUxpc3RNb2RlbC5DT0xfUkNQLCBzZWxmLnNvcnRfY29sdW1uLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9SQ1ApCisgICAgICAgIHJldHVybiBzb3J0CisKKyAgICBkZWYgc29ydF9jb2x1bW5fY2hhbmdlZF9jYiAoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuc29ydF9jb2x1bW5faWQsIHNlbGYuc29ydF9vcmRlciA9IGRhdGEuZ2V0X3NvcnRfY29sdW1uX2lkICgpCisKKyAgICBkZWYgc29ydF9jb2x1bW4oc2VsZiwgbW9kZWwsIHJvdzEsIHJvdzIsIGNvbCk6CisgICAgICAgIHZhbHVlMSA9IG1vZGVsLmdldF92YWx1ZShyb3cxLCBjb2wpCisgICAgICAgIHZhbHVlMiA9IG1vZGVsLmdldF92YWx1ZShyb3cyLCBjb2wpCisgICAgICAgIGlmIGNvbD09UGFja2FnZUxpc3RNb2RlbC5DT0xfU0laRToKKyAgICAgICAgICAgIHZhbHVlMSA9IEhvYlBhZ2UuX3N0cmluZ190b19zaXplKHZhbHVlMSkKKyAgICAgICAgICAgIHZhbHVlMiA9IEhvYlBhZ2UuX3N0cmluZ190b19zaXplKHZhbHVlMikKKworICAgICAgICBjbXBfcmVzID0gY21wKHZhbHVlMSwgdmFsdWUyKQorICAgICAgICBpZiBjbXBfcmVzIT0wOgorICAgICAgICAgICAgaWYgY29sPT1QYWNrYWdlTGlzdE1vZGVsLkNPTF9JTkM6CisgICAgICAgICAgICAgICAgcmV0dXJuIC1jbXBfcmVzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjbXBfcmVzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1lMSA9IG1vZGVsLmdldF92YWx1ZShyb3cxLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgbmFtZTIgPSBtb2RlbC5nZXRfdmFsdWUocm93MiwgUGFja2FnZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIHJldHVybiBjbXAobmFtZTEsbmFtZTIpCisKKyAgICBkZWYgc29ydF9iaW5iX2NvbHVtbihzZWxmLCBtb2RlbCwgcm93MSwgcm93Mik6CisgICAgICAgIHZhbHVlMSA9IG1vZGVsLmdldF92YWx1ZShyb3cxLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9CSU5CKQorICAgICAgICB2YWx1ZTIgPSBtb2RlbC5nZXRfdmFsdWUocm93MiwgUGFja2FnZUxpc3RNb2RlbC5DT0xfQklOQikKKyAgICAgICAgdmFsdWUxX2xpc3QgPSB2YWx1ZTEuc3BsaXQoJywgJykKKyAgICAgICAgdmFsdWUyX2xpc3QgPSB2YWx1ZTIuc3BsaXQoJywgJykKKworICAgICAgICB2YWx1ZTEgPSB2YWx1ZTFfbGlzdFswXQorICAgICAgICB2YWx1ZTIgPSB2YWx1ZTJfbGlzdFswXQorCisgICAgICAgIGNtcF9yZXMgPSBjbXAodmFsdWUxLCB2YWx1ZTIpCisgICAgICAgIGlmIGNtcF9yZXM9PTA6CisgICAgICAgICAgICBjbXBfc2l6ZSA9IGNtcChsZW4odmFsdWUxX2xpc3QpLCBsZW4odmFsdWUyX2xpc3QpKQorICAgICAgICAgICAgaWYgY21wX3NpemU9PTA6CisgICAgICAgICAgICAgICAgbmFtZTEgPSBtb2RlbC5nZXRfdmFsdWUocm93MSwgUGFja2FnZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgICAgICBuYW1lMiA9IG1vZGVsLmdldF92YWx1ZShyb3cyLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgICAgIHJldHVybiBjbXAobmFtZTEsbmFtZTIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjbXBfc2l6ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGNtcF9yZXMKKworICAgIGRlZiBleGNsdWRlX2l0ZW1fc29ydF9mdW5jKHNlbGYsIG1vZGVsLCBpdGVyMSwgaXRlcjIsIHVzZXJfZGF0YT1Ob25lKToKKyAgICAgICAgaWYgdXNlcl9kYXRhOgorICAgICAgICAgICAgdmFsMSA9IG1vZGVsLmdldF92YWx1ZShpdGVyMSwgUGFja2FnZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIHZhbDIgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjIsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5jbXBfdmFscyh2YWwxLCB2YWwyLCB1c2VyX2RhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2YWwxID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIxLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9GQURFX0lOQykKKyAgICAgICAgICAgIHZhbDIgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjIsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX0lOQykKKyAgICAgICAgICAgIHJldHVybiAoKHZhbDEgPT0gVHJ1ZSkgYW5kICh2YWwyID09IEZhbHNlKSkKKworICAgIGRlZiBpbmNsdWRlX2l0ZW1fc29ydF9mdW5jKHNlbGYsIG1vZGVsLCBpdGVyMSwgaXRlcjIsIHVzZXJfZGF0YT1Ob25lKToKKyAgICAgICAgaWYgdXNlcl9kYXRhOgorICAgICAgICAgICAgdmFsMSA9IG1vZGVsLmdldF92YWx1ZShpdGVyMSwgUGFja2FnZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIHZhbDIgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjIsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5jbXBfdmFscyh2YWwxLCB2YWwyLCB1c2VyX2RhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2YWwxID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIxLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9JTkMpCisgICAgICAgICAgICB2YWwyID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIyLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9JTkMpCisgICAgICAgICAgICByZXR1cm4gKCh2YWwxID09IEZhbHNlKSBhbmQgKHZhbDIgPT0gVHJ1ZSkpCisKKyAgICBkZWYgc29ydF9mdW5jKHNlbGYsIG1vZGVsLCBpdGVyMSwgaXRlcjIsIHVzZXJfZGF0YSk6CisgICAgICAgIHZhbDEgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjEsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgIHZhbDIgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjIsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgIHJldHVybiBzZWxmLmNtcF92YWxzKHZhbDEsIHZhbDIsIHVzZXJfZGF0YSkKKworICAgIGRlZiBjbXBfdmFscyhzZWxmLCB2YWwxLCB2YWwyLCB1c2VyX2RhdGEpOgorICAgICAgICBpZiB2YWwxIGlzIE5vbmUgb3IgdmFsMiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxpZiB2YWwxLnN0YXJ0c3dpdGgodXNlcl9kYXRhKSBhbmQgbm90IHZhbDIuc3RhcnRzd2l0aCh1c2VyX2RhdGEpOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGVsaWYgbm90IHZhbDEuc3RhcnRzd2l0aCh1c2VyX2RhdGEpIGFuZCB2YWwyLnN0YXJ0c3dpdGgodXNlcl9kYXRhKToKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gY21wKHZhbDEsIHZhbDIpCisKKyAgICBkZWYgY29udmVydF92cGF0aF90b19wYXRoKHNlbGYsIHZpZXdfbW9kZWwsIHZpZXdfcGF0aCk6CisgICAgICAgICMgdmlld19tb2RlbCBpcyB0aGUgbW9kZWwgc29ydGVkCisgICAgICAgICMgZ2V0IHRoZSBwYXRoIG9mIHRoZSBtb2RlbCBmaWx0ZXJlZAorICAgICAgICBmaWx0ZXJlZF9tb2RlbF9wYXRoID0gdmlld19tb2RlbC5jb252ZXJ0X3BhdGhfdG9fY2hpbGRfcGF0aCh2aWV3X3BhdGgpCisgICAgICAgICMgZ2V0IHRoZSBtb2RlbCBmaWx0ZXJlZAorICAgICAgICBmaWx0ZXJlZF9tb2RlbCA9IHZpZXdfbW9kZWwuZ2V0X21vZGVsKCkKKyAgICAgICAgIyBnZXQgdGhlIHBhdGggb2YgdGhlIG9yaWdpbmFsIG1vZGVsCisgICAgICAgIHBhdGggPSBmaWx0ZXJlZF9tb2RlbC5jb252ZXJ0X3BhdGhfdG9fY2hpbGRfcGF0aChmaWx0ZXJlZF9tb2RlbF9wYXRoKQorICAgICAgICByZXR1cm4gcGF0aAorCisgICAgZGVmIGNvbnZlcnRfcGF0aF90b192cGF0aChzZWxmLCB2aWV3X21vZGVsLCBwYXRoKToKKyAgICAgICAgaXQgPSB2aWV3X21vZGVsLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBuYW1lID0gc2VsZi5maW5kX2l0ZW1fZm9yX3BhdGgocGF0aCkKKyAgICAgICAgICAgIHZpZXdfbmFtZSA9IHZpZXdfbW9kZWwuZ2V0X3ZhbHVlKGl0LCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgaWYgdmlld19uYW1lID09IG5hbWU6CisgICAgICAgICAgICAgICAgdmlld19wYXRoID0gdmlld19tb2RlbC5nZXRfcGF0aChpdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmlld19wYXRoCisgICAgICAgICAgICBpdCA9IHZpZXdfbW9kZWwuaXRlcl9uZXh0KGl0KQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIiIiCisgICAgVGhlIHBvcHVsYXRlKCkgZnVuY3Rpb24gdGFrZXMgYXMgaW5wdXQgdGhlIGRhdGEgZnJvbSBhCisgICAgYmIuZXZlbnQuUGFja2FnZUluZm8gZXZlbnQgYW5kIHBvcHVsYXRlcyB0aGUgcGFja2FnZSBsaXN0LgorICAgICIiIgorICAgIGRlZiBwb3B1bGF0ZShzZWxmLCBwa2dpbmZvbGlzdCk6CisgICAgICAgICMgRmlyc3QgY2xlYXIgdGhlIG1vZGVsLCBpbiBjYXNlIHJlcG9wdWxhdGluZworICAgICAgICBzZWxmLmNsZWFyKCkKKworICAgICAgICBkZWYgZ2V0cGtndmFsdWUocGtnZGljdCwga2V5LCBwa2duYW1lLCBkZWZhdWx0dmFsID0gTm9uZSk6CisgICAgICAgICAgICB2YWx1ZSA9IHBrZ2RpY3QuZ2V0KCclc18lcycgJSAoa2V5LCBwa2duYW1lKSwgTm9uZSkKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHBrZ2RpY3QuZ2V0KGtleSwgZGVmYXVsdHZhbCkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgICAgIGZvciBwa2dpbmZvIGluIHBrZ2luZm9saXN0OgorICAgICAgICAgICAgcG4gPSBwa2dpbmZvWydQTiddCisgICAgICAgICAgICBwdiA9IHBrZ2luZm9bJ1BWJ10KKyAgICAgICAgICAgIHByID0gcGtnaW5mb1snUFInXQorICAgICAgICAgICAgcGtnID0gcGtnaW5mb1snUEtHJ10KKyAgICAgICAgICAgIHBrZ3YgPSBnZXRwa2d2YWx1ZShwa2dpbmZvLCAnUEtHVicsIHBrZykKKyAgICAgICAgICAgIHBrZ3IgPSBnZXRwa2d2YWx1ZShwa2dpbmZvLCAnUEtHUicsIHBrZykKKyAgICAgICAgICAgICMgUEtHU0laRSBpcyBhcnRpZmljaWFsLCB3aWxsIGFsd2F5cyBiZSBvdmVycmlkZGVuIHdpdGggdGhlIHBhY2thZ2UgbmFtZSBpZiBwcmVzZW50CisgICAgICAgICAgICBwa2dzaXplID0gaW50KHBrZ2luZm8uZ2V0KCdQS0dTSVpFXyVzJyAlIHBrZywgIjAiKSkKKyAgICAgICAgICAgICMgUEtHXyVzIGlzIHRoZSByZW5hbWVkIHZlcnNpb24KKyAgICAgICAgICAgIHBrZ19yZW5hbWUgPSBwa2dpbmZvLmdldCgnUEtHXyVzJyAlIHBrZywgIiIpCisgICAgICAgICAgICAjIFRoZSByZXN0IG1heSBiZSBvdmVycmlkZGVuIG9yIG5vdAorICAgICAgICAgICAgc2VjdGlvbiA9IGdldHBrZ3ZhbHVlKHBrZ2luZm8sICdTRUNUSU9OJywgcGtnLCAiIikKKyAgICAgICAgICAgIHN1bW1hcnkgPSBnZXRwa2d2YWx1ZShwa2dpbmZvLCAnU1VNTUFSWScsIHBrZywgIiIpCisgICAgICAgICAgICByZGVwID0gZ2V0cGtndmFsdWUocGtnaW5mbywgJ1JERVBFTkRTJywgcGtnLCAiIikKKyAgICAgICAgICAgIHJyZWMgPSBnZXRwa2d2YWx1ZShwa2dpbmZvLCAnUlJFQ09NTUVORFMnLCBwa2csICIiKQorICAgICAgICAgICAgcnByb3YgPSBnZXRwa2d2YWx1ZShwa2dpbmZvLCAnUlBST1ZJREVTJywgcGtnLCAiIikKKyAgICAgICAgICAgIGZpbGVzX2xpc3QgPSBnZXRwa2d2YWx1ZShwa2dpbmZvLCAnRklMRVNfSU5GTycsIHBrZywgIiIpCisgICAgICAgICAgICBmb3IgaSBpbiBycHJvdi5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHNlbGYucnByb3ZfcGtnW2ldID0gcGtnCisKKyAgICAgICAgICAgIHJlY2lwZSA9IHBuICsgJy0nICsgcHYgKyAnLScgKyBwcgorCisgICAgICAgICAgICBhbGxvd19lbXB0eSA9IGdldHBrZ3ZhbHVlKHBrZ2luZm8sICdBTExPV19FTVBUWScsIHBrZywgIiIpCisKKyAgICAgICAgICAgIGlmIHBrZ3NpemUgPT0gMCBhbmQgbm90IGFsbG93X2VtcHR5OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHNpemUgPSBIb2JQYWdlLl9zaXplX3RvX3N0cmluZyhwa2dzaXplKQorICAgICAgICAgICAgc2VsZi5zZXQoc2VsZi5hcHBlbmQoKSwgc2VsZi5DT0xfTkFNRSwgcGtnLCBzZWxmLkNPTF9WRVIsIHBrZ3YsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9SRVYsIHBrZ3IsIHNlbGYuQ09MX1JOTSwgcGtnX3JlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX1NFQywgc2VjdGlvbiwgc2VsZi5DT0xfU1VNLCBzdW1tYXJ5LAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfUkRFUCwgcmRlcCArICcgJyArIHJyZWMsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9SUFJPViwgcnByb3YsIHNlbGYuQ09MX1NJWkUsIHNpemUsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9SQ1AsIHJlY2lwZSwgc2VsZi5DT0xfQklOQiwgIiIsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9JTkMsIEZhbHNlLCBzZWxmLkNPTF9GT05ULCAnMTAnLCBzZWxmLkNPTF9GTElTVCwgZmlsZXNfbGlzdCkKKworICAgICAgICBzZWxmLnBuX3BhdGggPSB7fQorICAgICAgICBpdCA9IHNlbGYuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIHBuID0gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX05BTUUpCisgICAgICAgICAgICBwYXRoID0gc2VsZi5nZXRfcGF0aChpdCkKKyAgICAgICAgICAgIHNlbGYucG5fcGF0aFtwbl0gPSBwYXRoCisgICAgICAgICAgICBpdCA9IHNlbGYuaXRlcl9uZXh0KGl0KQorCisgICAgIiIiCisgICAgVXBkYXRlIHRoZSBtb2RlbCwgc2VuZCBvdXQgdGhlIG5vdGlmaWNhdGlvbi4KKyAgICAiIiIKKyAgICBkZWYgc2VsZWN0aW9uX2NoYW5nZV9ub3RpZmljYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuZW1pdCgicGFja2FnZS1zZWxlY3Rpb24tY2hhbmdlZCIpCisKKyAgICAiIiIKKyAgICBDaGVjayB3aGV0aGVyIHRoZSBpdGVtIGF0IGl0ZW1fcGF0aCBpcyBpbmNsdWRlZCBvciBub3QKKyAgICAiIiIKKyAgICBkZWYgcGF0aF9pbmNsdWRlZChzZWxmLCBpdGVtX3BhdGgpOgorICAgICAgICByZXR1cm4gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0lOQ10KKworICAgICIiIgorICAgIEFkZCB0aGlzIGl0ZW0sIGFuZCBhbnkgb2YgaXRzIGRlcGVuZGVuY2llcywgdG8gdGhlIGltYWdlIGNvbnRlbnRzCisgICAgIiIiCisgICAgZGVmIGluY2x1ZGVfaXRlbShzZWxmLCBpdGVtX3BhdGgsIGJpbmI9IiIpOgorICAgICAgICBpZiBzZWxmLnBhdGhfaW5jbHVkZWQoaXRlbV9wYXRoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGl0ZW1fbmFtZSA9IHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9OQU1FXQorICAgICAgICBpdGVtX2RlcHMgPSBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfUkRFUF0KKworICAgICAgICBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfSU5DXSA9IFRydWUKKworICAgICAgICBpdGVtX2JpbiA9IHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9CSU5CXS5zcGxpdCgnLCAnKQorICAgICAgICBpZiBiaW5iIGFuZCBub3QgYmluYiBpbiBpdGVtX2JpbjoKKyAgICAgICAgICAgIGl0ZW1fYmluLmFwcGVuZChiaW5iKQorICAgICAgICAgICAgc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0JJTkJdID0gJywgJy5qb2luKGl0ZW1fYmluKS5sc3RyaXAoJywgJykKKworICAgICAgICBpZiBpdGVtX2RlcHM6CisgICAgICAgICAgICAjIEVuc3VyZSBhbGwgb2YgdGhlIGl0ZW1zIGRlcHMgYXJlIGluY2x1ZGVkIGFuZCwgd2hlcmUgYXBwcm9wcmlhdGUsCisgICAgICAgICAgICAjIGFkZCB0aGlzIGl0ZW0gdG8gdGhlaXIgQ09MX0JJTkIKKyAgICAgICAgICAgIGZvciBkZXAgaW4gaXRlbV9kZXBzLnNwbGl0KCIgIik6CisgICAgICAgICAgICAgICAgaWYgZGVwLnN0YXJ0c3dpdGgoJygnKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAjIElmIHRoZSBjb250ZW50cyBtb2RlbCBkb2Vzbid0IGFscmVhZHkgY29udGFpbiBkZXAsIGFkZCBpdAorICAgICAgICAgICAgICAgIGRlcF9wYXRoID0gc2VsZi5maW5kX3BhdGhfZm9yX2l0ZW0oZGVwKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkZXBfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkZXBfaW5jbHVkZWQgPSBzZWxmLnBhdGhfaW5jbHVkZWQoZGVwX3BhdGgpCisKKyAgICAgICAgICAgICAgICBpZiBkZXBfaW5jbHVkZWQgYW5kIG5vdCBkZXAgaW4gaXRlbV9iaW46CisgICAgICAgICAgICAgICAgICAgICMgZG9uJ3Qgc2V0IHRoZSBDT0xfQklOQiB0byB0aGlzIGl0ZW0gaWYgdGhlIHRhcmdldCBpcyBhbgorICAgICAgICAgICAgICAgICAgICAjIGl0ZW0gaW4gb3VyIG93biBDT0xfQklOQgorICAgICAgICAgICAgICAgICAgICBkZXBfYmluID0gc2VsZltkZXBfcGF0aF1bc2VsZi5DT0xfQklOQl0uc3BsaXQoJywgJykKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGl0ZW1fbmFtZSBpbiBkZXBfYmluOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwX2Jpbi5hcHBlbmQoaXRlbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZltkZXBfcGF0aF1bc2VsZi5DT0xfQklOQl0gPSAnLCAnLmpvaW4oZGVwX2JpbikubHN0cmlwKCcsICcpCisgICAgICAgICAgICAgICAgZWxpZiBub3QgZGVwX2luY2x1ZGVkOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVfaXRlbShkZXBfcGF0aCwgYmluYj1pdGVtX25hbWUpCisKKyAgICBkZWYgZXhjbHVkZV9pdGVtKHNlbGYsIGl0ZW1fcGF0aCk6CisgICAgICAgIGlmIG5vdCBzZWxmLnBhdGhfaW5jbHVkZWQoaXRlbV9wYXRoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9JTkNdID0gRmFsc2UKKworICAgICAgICBpdGVtX25hbWUgPSBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfTkFNRV0KKyAgICAgICAgaXRlbV9kZXBzID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX1JERVBdCisgICAgICAgIGlmIGl0ZW1fZGVwczoKKyAgICAgICAgICAgIGZvciBkZXAgaW4gaXRlbV9kZXBzLnNwbGl0KCIgIik6CisgICAgICAgICAgICAgICAgaWYgZGVwLnN0YXJ0c3dpdGgoJygnKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkZXBfcGF0aCA9IHNlbGYuZmluZF9wYXRoX2Zvcl9pdGVtKGRlcCkKKyAgICAgICAgICAgICAgICBpZiBub3QgZGVwX3BhdGg6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZGVwX2JpbiA9IHNlbGZbZGVwX3BhdGhdW3NlbGYuQ09MX0JJTkJdLnNwbGl0KCcsICcpCisgICAgICAgICAgICAgICAgaWYgaXRlbV9uYW1lIGluIGRlcF9iaW46CisgICAgICAgICAgICAgICAgICAgIGRlcF9iaW4ucmVtb3ZlKGl0ZW1fbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZltkZXBfcGF0aF1bc2VsZi5DT0xfQklOQl0gPSAnLCAnLmpvaW4oZGVwX2JpbikubHN0cmlwKCcsICcpCisKKyAgICAgICAgaXRlbV9iaW4gPSBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfQklOQl0uc3BsaXQoJywgJykKKyAgICAgICAgaWYgaXRlbV9iaW46CisgICAgICAgICAgICBmb3IgYmluYiBpbiBpdGVtX2JpbjoKKyAgICAgICAgICAgICAgICBiaW5iX3BhdGggPSBzZWxmLmZpbmRfcGF0aF9mb3JfaXRlbShiaW5iKQorICAgICAgICAgICAgICAgIGlmIG5vdCBiaW5iX3BhdGg6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2VsZi5leGNsdWRlX2l0ZW0oYmluYl9wYXRoKQorCisgICAgIiIiCisgICAgRW1wdHkgc2VsZi5jb250ZW50cyBieSBzZXR0aW5nIHRoZSBpbmNsdWRlIG9mIGVhY2ggZW50cnkgdG8gTm9uZQorICAgICIiIgorICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgaXQgPSBzZWxmLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBzZWxmLnNldChpdCwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX0lOQywgRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9CSU5CLCAiIikKKyAgICAgICAgICAgIGl0ID0gc2VsZi5pdGVyX25leHQoaXQpCisKKyAgICAgICAgc2VsZi5zZWxlY3Rpb25fY2hhbmdlX25vdGlmaWNhdGlvbigpCisKKyAgICBkZWYgZ2V0X3NlbGVjdGVkX3BhY2thZ2VzKHNlbGYpOgorICAgICAgICBwYWNrYWdlbGlzdCA9IFtdCisKKyAgICAgICAgaXQgPSBzZWxmLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBpZiBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfSU5DKToKKyAgICAgICAgICAgICAgICBuYW1lID0gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX05BTUUpCisgICAgICAgICAgICAgICAgcGFja2FnZWxpc3QuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICBpdCA9IHNlbGYuaXRlcl9uZXh0KGl0KQorCisgICAgICAgIHJldHVybiBwYWNrYWdlbGlzdAorCisgICAgZGVmIGdldF91c2VyX3NlbGVjdGVkX3BhY2thZ2VzKHNlbGYpOgorICAgICAgICBwYWNrYWdlbGlzdCA9IFtdCisKKyAgICAgICAgaXQgPSBzZWxmLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBpZiBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfSU5DKToKKyAgICAgICAgICAgICAgICBiaW5iID0gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX0JJTkIpCisgICAgICAgICAgICAgICAgaWYgYmluYiA9PSAiVXNlciBTZWxlY3RlZCI6CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfTkFNRSkKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZWxpc3QuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICBpdCA9IHNlbGYuaXRlcl9uZXh0KGl0KQorCisgICAgICAgIHJldHVybiBwYWNrYWdlbGlzdAorCisgICAgZGVmIGdldF9zZWxlY3RlZF9wYWNrYWdlc190b29sY2hhaW4oc2VsZik6CisgICAgICAgIHBhY2thZ2VsaXN0ID0gW10KKworICAgICAgICBpdCA9IHNlbGYuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIGlmIHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9JTkMpOgorICAgICAgICAgICAgICAgIG5hbWUgPSBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfTkFNRSkKKyAgICAgICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCItZGV2Iikgb3IgbmFtZS5lbmRzd2l0aCgiLWRiZyIpOgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlbGlzdC5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIGl0ID0gc2VsZi5pdGVyX25leHQoaXQpCisKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2V0KHBhY2thZ2VsaXN0ICsgc2VsZi5fX3Rvb2xjaGFpbl9yZXF1aXJlZF9wYWNrYWdlc19fKSk7CisKKyAgICAiIiIKKyAgICBQYWNrYWdlIG1vZGVsIG1heSBiZSBpbmNvbXBsZXRlLCB0aGVyZWZvcmUgd2hlbiBjYWxsaW5nIHRoZQorICAgIHNldF9zZWxlY3RlZF9wYWNrYWdlcygpLCBzb21lIHBhY2thZ2VzIHdpbGwgbm90IGJlIHNldCBpbmNsdWRlZC4KKyAgICBSZXR1cm4gdGhlIHVuLXNldCBwYWNrYWdlcyBsaXN0LgorICAgICIiIgorICAgIGRlZiBzZXRfc2VsZWN0ZWRfcGFja2FnZXMoc2VsZiwgcGFja2FnZWxpc3QsIHVzZXJfc2VsZWN0ZWQ9RmFsc2UpOgorICAgICAgICBsZWZ0ID0gW10KKyAgICAgICAgYmluYiA9ICdVc2VyIFNlbGVjdGVkJyBpZiB1c2VyX3NlbGVjdGVkIGVsc2UgJycKKyAgICAgICAgZm9yIHBuIGluIHBhY2thZ2VsaXN0OgorICAgICAgICAgICAgaWYgcG4gaW4gc2VsZi5wbl9wYXRoLmtleXMoKToKKyAgICAgICAgICAgICAgICBwYXRoID0gc2VsZi5wbl9wYXRoW3BuXQorICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9pdGVtKGl0ZW1fcGF0aD1wYXRoLCBiaW5iPWJpbmIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxlZnQuYXBwZW5kKHBuKQorCisgICAgICAgIHNlbGYuc2VsZWN0aW9uX2NoYW5nZV9ub3RpZmljYXRpb24oKQorICAgICAgICByZXR1cm4gbGVmdAorCisgICAgIiIiCisgICAgUmV0dXJuIHRoZSBzZWxlY3RlZCBwYWNrYWdlIHNpemUsIHVuaXQgaXMgQi4KKyAgICAiIiIKKyAgICBkZWYgZ2V0X3BhY2thZ2VzX3NpemUoc2VsZik6CisgICAgICAgIHBhY2thZ2VzX3NpemUgPSAwCisgICAgICAgIGl0ID0gc2VsZi5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgaWYgc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX0lOQyk6CisgICAgICAgICAgICAgICAgc3RyX3NpemUgPSBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfU0laRSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc3RyX3NpemU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBwYWNrYWdlc19zaXplICs9IEhvYlBhZ2UuX3N0cmluZ190b19zaXplKHN0cl9zaXplKQorCisgICAgICAgICAgICBpdCA9IHNlbGYuaXRlcl9uZXh0KGl0KQorICAgICAgICByZXR1cm4gcGFja2FnZXNfc2l6ZQorCisgICAgIiIiCisgICAgUmVzeW5jIHRoZSBzdGF0ZSBvZiBpbmNsdWRlZCBpdGVtcyB0byBhIGJhY2t1cCBjb2x1bW4gYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGZhZGVvdXQgdmlzaWJsZSBlZmZlY3QKKyAgICAiIiIKKyAgICBkZWYgcmVzeW5jX2ZhZGVvdXRfY29sdW1uKHNlbGYsIG1vZGVsX2ZpcnN0X2l0ZXI9Tm9uZSk6CisgICAgICAgIGl0ID0gbW9kZWxfZmlyc3RfaXRlcgorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIGFjdGl2ZSA9IHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9JTkMpCisgICAgICAgICAgICBzZWxmLnNldChpdCwgc2VsZi5DT0xfRkFERV9JTkMsIGFjdGl2ZSkKKyAgICAgICAgICAgIGl0ID0gc2VsZi5pdGVyX25leHQoaXQpCisKKyMKKyMgUmVjaXBlTGlzdE1vZGVsCisjCitjbGFzcyBSZWNpcGVMaXN0TW9kZWwoZ3RrLkxpc3RTdG9yZSk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyBkZWZpbmVzIGFuIGd0ay5MaXN0U3RvcmUgc3ViY2xhc3Mgd2hpY2ggd2lsbCBjb252ZXJ0IHRoZSBvdXRwdXQKKyAgICBvZiB0aGUgYmIuZXZlbnQuVGFyZ2V0c1RyZWVHZW5lcmF0ZWQgZXZlbnQgaW50byBhIGd0ay5MaXN0U3RvcmUgd2hpbHN0IGFsc28KKyAgICBwcm92aWRpbmcgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGFjY2VzcyBndGsuVHJlZU1vZGVsIHN1YmNsYXNzZXMgd2hpY2gKKyAgICBwcm92aWRlIGZpbHRlcmVkIHZpZXdzIG9mIHRoZSBkYXRhLgorICAgICIiIgorICAgIChDT0xfTkFNRSwgQ09MX0RFU0MsIENPTF9MSUMsIENPTF9HUk9VUCwgQ09MX0RFUFMsIENPTF9CSU5CLCBDT0xfVFlQRSwgQ09MX0lOQywgQ09MX0lNRywgQ09MX0lOU1RBTEwsIENPTF9QTiwgQ09MX0ZBREVfSU5DLCBDT0xfU1VNTUFSWSwgQ09MX1ZFUlNJT04sCisgICAgIENPTF9SRVZJU0lPTiwgQ09MX0hPTUVQQUdFLCBDT0xfQlVHVFJBQ0tFUiwgQ09MX0ZJTEUpID0gcmFuZ2UoMTgpCisKKyAgICBfX2N1c3RvbV9pbWFnZV9fID0gIlN0YXJ0IHdpdGggYW4gZW1wdHkgaW1hZ2UgcmVjaXBlIgorCisgICAgX19nc2lnbmFsc19fID0geworICAgICAgICAicmVjaXBlLXNlbGVjdGlvbi1jaGFuZ2VkIiA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICAgICAgfQorCisgICAgIiIiCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBndGsuTGlzdFN0b3JlLl9faW5pdF9fIChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfQk9PTEVBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX0JPT0xFQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9CT09MRUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HKQorICAgICAgICBzZWxmLnNvcnRfY29sdW1uX2lkLCBzZWxmLnNvcnRfb3JkZXIgPSBSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUsIGd0ay5TT1JUX0FTQ0VORElORworCisgICAgIiIiCisgICAgRmluZCB0aGUgbW9kZWwgcGF0aCBmb3IgdGhlIGl0ZW1fbmFtZQorICAgIFJldHVybnMgdGhlIHBhdGggaW4gdGhlIG1vZGVsIG9yIE5vbmUKKyAgICAiIiIKKyAgICBkZWYgZmluZF9wYXRoX2Zvcl9pdGVtKHNlbGYsIGl0ZW1fbmFtZSk6CisgICAgICAgIGlmIHNlbGYubm9uX3RhcmdldF9uYW1lKGl0ZW1fbmFtZSkgb3IgaXRlbV9uYW1lIG5vdCBpbiBzZWxmLnBuX3BhdGgua2V5cygpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBuX3BhdGhbaXRlbV9uYW1lXQorCisgICAgZGVmIGZpbmRfaXRlbV9mb3JfcGF0aChzZWxmLCBpdGVtX3BhdGgpOgorICAgICAgICByZXR1cm4gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX05BTUVdCisKKyAgICAiIiIKKyAgICBIZWxwZXIgbWV0aG9kIHRvIGRldGVybWluZSB3aGV0aGVyIG5hbWUgaXMgYSB0YXJnZXQgcG4KKyAgICAiIiIKKyAgICBkZWYgbm9uX3RhcmdldF9uYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lIGFuZCAoJy1uYXRpdmUnIGluIG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAiIiIKKyAgICBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gaXRlbSBpcyBhbiBpdGVtIHNwZWNpZmllZCBieSBmaWx0ZXIKKyAgICAiIiIKKyAgICBkZWYgdHJlZV9tb2RlbF9maWx0ZXIoc2VsZiwgbW9kZWwsIGl0LCBmaWx0ZXIpOgorICAgICAgICBuYW1lID0gbW9kZWwuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9OQU1FKQorICAgICAgICBpZiBzZWxmLm5vbl90YXJnZXRfbmFtZShuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGZvciBrZXkgaW4gZmlsdGVyLmtleXMoKToKKyAgICAgICAgICAgIGlmIGtleSA9PSBzZWxmLkNPTF9OQU1FOgorICAgICAgICAgICAgICAgIGlmIGZpbHRlcltrZXldICE9ICdTZWFyY2ggcmVjaXBlcyBieSBuYW1lJyBhbmQgZmlsdGVyW2tleV0gIT0gJ1NlYXJjaCBwYWNrYWdlIGdyb3VwcyBieSBuYW1lJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlsdGVyW2tleV0gbm90IGluIG5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbW9kZWwuZ2V0X3ZhbHVlKGl0LCBrZXkpIG5vdCBpbiBmaWx0ZXJba2V5XToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHNlbGYuZmlsdGVyZWRfbmIgKz0gMQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZXhjbHVkZV9pdGVtX3NvcnRfZnVuYyhzZWxmLCBtb2RlbCwgaXRlcjEsIGl0ZXIyLCB1c2VyX2RhdGE9Tm9uZSk6CisgICAgICAgIGlmIHVzZXJfZGF0YToKKyAgICAgICAgICAgIHZhbDEgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjEsIFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIHZhbDIgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjIsIFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNtcF92YWxzKHZhbDEsIHZhbDIsIHVzZXJfZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbDEgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjEsIFJlY2lwZUxpc3RNb2RlbC5DT0xfRkFERV9JTkMpCisgICAgICAgICAgICB2YWwyID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIyLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0lOQykKKyAgICAgICAgICAgIHJldHVybiAoKHZhbDEgPT0gVHJ1ZSkgYW5kICh2YWwyID09IEZhbHNlKSkKKworICAgIGRlZiBpbmNsdWRlX2l0ZW1fc29ydF9mdW5jKHNlbGYsIG1vZGVsLCBpdGVyMSwgaXRlcjIsIHVzZXJfZGF0YT1Ob25lKToKKyAgICAgICAgaWYgdXNlcl9kYXRhOgorICAgICAgICAgICAgdmFsMSA9IG1vZGVsLmdldF92YWx1ZShpdGVyMSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgdmFsMiA9IG1vZGVsLmdldF92YWx1ZShpdGVyMiwgUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY21wX3ZhbHModmFsMSwgdmFsMiwgdXNlcl9kYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsMSA9IG1vZGVsLmdldF92YWx1ZShpdGVyMSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9JTkMpCisgICAgICAgICAgICB2YWwyID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIyLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0lOQykKKyAgICAgICAgICAgIHJldHVybiAoKHZhbDEgPT0gRmFsc2UpIGFuZCAodmFsMiA9PSBUcnVlKSkKKworICAgIGRlZiBzb3J0X2Z1bmMoc2VsZiwgbW9kZWwsIGl0ZXIxLCBpdGVyMiwgdXNlcl9kYXRhKToKKyAgICAgICAgdmFsMSA9IG1vZGVsLmdldF92YWx1ZShpdGVyMSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICB2YWwyID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIyLCBSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgIHJldHVybiBzZWxmLmNtcF92YWxzKHZhbDEsIHZhbDIsIHVzZXJfZGF0YSkKKworICAgIGRlZiBjbXBfdmFscyhzZWxmLCB2YWwxLCB2YWwyLCB1c2VyX2RhdGEpOgorICAgICAgICBpZiB2YWwxIGlzIE5vbmUgb3IgdmFsMiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxpZiB2YWwxLnN0YXJ0c3dpdGgodXNlcl9kYXRhKSBhbmQgbm90IHZhbDIuc3RhcnRzd2l0aCh1c2VyX2RhdGEpOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGVsaWYgbm90IHZhbDEuc3RhcnRzd2l0aCh1c2VyX2RhdGEpIGFuZCB2YWwyLnN0YXJ0c3dpdGgodXNlcl9kYXRhKToKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gY21wKHZhbDEsIHZhbDIpCisKKyAgICAiIiIKKyAgICBDcmVhdGUsIGlmIHJlcXVpcmVkLCBhbmQgcmV0dXJuIGEgZmlsdGVyZWQgZ3RrLlRyZWVNb2RlbFNvcnQKKyAgICBjb250YWluaW5nIG9ubHkgdGhlIGl0ZW1zIHNwZWNpZmllZCBieSBmaWx0ZXIKKyAgICAiIiIKKyAgICBkZWYgdHJlZV9tb2RlbChzZWxmLCBmaWx0ZXIsIGV4Y2x1ZGVkX2l0ZW1zX2FoZWFkPUZhbHNlLCBpbmNsdWRlZF9pdGVtc19haGVhZD1GYWxzZSwgc2VhcmNoX2RhdGE9Tm9uZSwgaW5pdGlhbD1GYWxzZSk6CisgICAgICAgIG1vZGVsID0gc2VsZi5maWx0ZXJfbmV3KCkKKyAgICAgICAgc2VsZi5maWx0ZXJlZF9uYiA9IDAKKyAgICAgICAgbW9kZWwuc2V0X3Zpc2libGVfZnVuYyhzZWxmLnRyZWVfbW9kZWxfZmlsdGVyLCBmaWx0ZXIpCisKKyAgICAgICAgc29ydCA9IGd0ay5UcmVlTW9kZWxTb3J0KG1vZGVsKQorICAgICAgICBzb3J0LmNvbm5lY3QgKCdzb3J0LWNvbHVtbi1jaGFuZ2VkJywgc2VsZi5zb3J0X2NvbHVtbl9jaGFuZ2VkX2NiKQorICAgICAgICBpZiBpbml0aWFsOgorICAgICAgICAgICAgc29ydC5zZXRfc29ydF9jb2x1bW5faWQoUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FLCBndGsuU09SVF9BU0NFTkRJTkcpCisgICAgICAgICAgICBzb3J0LnNldF9kZWZhdWx0X3NvcnRfZnVuYyhOb25lKQorICAgICAgICBlbGlmIGV4Y2x1ZGVkX2l0ZW1zX2FoZWFkOgorICAgICAgICAgICAgc29ydC5zZXRfZGVmYXVsdF9zb3J0X2Z1bmMoc2VsZi5leGNsdWRlX2l0ZW1fc29ydF9mdW5jLCBzZWFyY2hfZGF0YSkKKyAgICAgICAgZWxpZiBpbmNsdWRlZF9pdGVtc19haGVhZDoKKyAgICAgICAgICAgIHNvcnQuc2V0X2RlZmF1bHRfc29ydF9mdW5jKHNlbGYuaW5jbHVkZV9pdGVtX3NvcnRfZnVuYywgc2VhcmNoX2RhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWFyY2hfZGF0YSBhbmQgc2VhcmNoX2RhdGEhPSdTZWFyY2ggcmVjaXBlcyBieSBuYW1lJyBhbmQgc2VhcmNoX2RhdGEhPSdTZWFyY2ggcGFja2FnZSBncm91cHMgYnkgbmFtZSc6CisgICAgICAgICAgICAgICAgc29ydC5zZXRfZGVmYXVsdF9zb3J0X2Z1bmMoc2VsZi5zb3J0X2Z1bmMsIHNlYXJjaF9kYXRhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzb3J0LnNldF9zb3J0X2NvbHVtbl9pZChzZWxmLnNvcnRfY29sdW1uX2lkLCBzZWxmLnNvcnRfb3JkZXIpCisgICAgICAgICAgICAgICAgc29ydC5zZXRfZGVmYXVsdF9zb3J0X2Z1bmMoTm9uZSkKKworICAgICAgICBzb3J0LnNldF9zb3J0X2Z1bmMoUmVjaXBlTGlzdE1vZGVsLkNPTF9JTkMsIHNlbGYuc29ydF9jb2x1bW4sIFJlY2lwZUxpc3RNb2RlbC5DT0xfSU5DKQorICAgICAgICBzb3J0LnNldF9zb3J0X2Z1bmMoUmVjaXBlTGlzdE1vZGVsLkNPTF9HUk9VUCwgc2VsZi5zb3J0X2NvbHVtbiwgUmVjaXBlTGlzdE1vZGVsLkNPTF9HUk9VUCkKKyAgICAgICAgc29ydC5zZXRfc29ydF9mdW5jKFJlY2lwZUxpc3RNb2RlbC5DT0xfQklOQiwgc2VsZi5zb3J0X2JpbmJfY29sdW1uKQorICAgICAgICBzb3J0LnNldF9zb3J0X2Z1bmMoUmVjaXBlTGlzdE1vZGVsLkNPTF9MSUMsIHNlbGYuc29ydF9jb2x1bW4sIFJlY2lwZUxpc3RNb2RlbC5DT0xfTElDKQorICAgICAgICByZXR1cm4gc29ydAorCisgICAgZGVmIHNvcnRfY29sdW1uX2NoYW5nZWRfY2IgKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnNvcnRfY29sdW1uX2lkLCBzZWxmLnNvcnRfb3JkZXIgPSBkYXRhLmdldF9zb3J0X2NvbHVtbl9pZCAoKQorCisgICAgZGVmIHNvcnRfY29sdW1uKHNlbGYsIG1vZGVsLCByb3cxLCByb3cyLCBjb2wpOgorICAgICAgICB2YWx1ZTEgPSBtb2RlbC5nZXRfdmFsdWUocm93MSwgY29sKQorICAgICAgICB2YWx1ZTIgPSBtb2RlbC5nZXRfdmFsdWUocm93MiwgY29sKQorICAgICAgICBjbXBfcmVzID0gY21wKHZhbHVlMSwgdmFsdWUyKQorICAgICAgICBpZiBjbXBfcmVzIT0wOgorICAgICAgICAgICAgaWYgY29sPT1SZWNpcGVMaXN0TW9kZWwuQ09MX0lOQzoKKyAgICAgICAgICAgICAgICByZXR1cm4gLWNtcF9yZXMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcF9yZXMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5hbWUxID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzEsIFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIG5hbWUyID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzIsIFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIHJldHVybiBjbXAobmFtZTEsbmFtZTIpCisKKyAgICBkZWYgc29ydF9iaW5iX2NvbHVtbihzZWxmLCBtb2RlbCwgcm93MSwgcm93Mik6CisgICAgICAgIHZhbHVlMSA9IG1vZGVsLmdldF92YWx1ZShyb3cxLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0JJTkIpCisgICAgICAgIHZhbHVlMiA9IG1vZGVsLmdldF92YWx1ZShyb3cyLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0JJTkIpCisgICAgICAgIHZhbHVlMV9saXN0ID0gdmFsdWUxLnNwbGl0KCcsICcpCisgICAgICAgIHZhbHVlMl9saXN0ID0gdmFsdWUyLnNwbGl0KCcsICcpCisKKyAgICAgICAgdmFsdWUxID0gdmFsdWUxX2xpc3RbMF0KKyAgICAgICAgdmFsdWUyID0gdmFsdWUyX2xpc3RbMF0KKworICAgICAgICBjbXBfcmVzID0gY21wKHZhbHVlMSwgdmFsdWUyKQorICAgICAgICBpZiBjbXBfcmVzPT0wOgorICAgICAgICAgICAgY21wX3NpemUgPSBjbXAobGVuKHZhbHVlMV9saXN0KSwgbGVuKHZhbHVlMl9saXN0KSkKKyAgICAgICAgICAgIGlmIGNtcF9zaXplPT0wOgorICAgICAgICAgICAgICAgIG5hbWUxID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzEsIFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgICAgICBuYW1lMiA9IG1vZGVsLmdldF92YWx1ZShyb3cyLCBSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcChuYW1lMSxuYW1lMikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcF9zaXplCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gY21wX3JlcworCisgICAgZGVmIGNvbnZlcnRfdnBhdGhfdG9fcGF0aChzZWxmLCB2aWV3X21vZGVsLCB2aWV3X3BhdGgpOgorICAgICAgICBmaWx0ZXJlZF9tb2RlbF9wYXRoID0gdmlld19tb2RlbC5jb252ZXJ0X3BhdGhfdG9fY2hpbGRfcGF0aCh2aWV3X3BhdGgpCisgICAgICAgIGZpbHRlcmVkX21vZGVsID0gdmlld19tb2RlbC5nZXRfbW9kZWwoKQorCisgICAgICAgICMgZ2V0IHRoZSBwYXRoIG9mIHRoZSBvcmlnaW5hbCBtb2RlbAorICAgICAgICBwYXRoID0gZmlsdGVyZWRfbW9kZWwuY29udmVydF9wYXRoX3RvX2NoaWxkX3BhdGgoZmlsdGVyZWRfbW9kZWxfcGF0aCkKKyAgICAgICAgcmV0dXJuIHBhdGgKKworICAgIGRlZiBjb252ZXJ0X3BhdGhfdG9fdnBhdGgoc2VsZiwgdmlld19tb2RlbCwgcGF0aCk6CisgICAgICAgIGl0ID0gdmlld19tb2RlbC5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgbmFtZSA9IHNlbGYuZmluZF9pdGVtX2Zvcl9wYXRoKHBhdGgpCisgICAgICAgICAgICB2aWV3X25hbWUgPSB2aWV3X21vZGVsLmdldF92YWx1ZShpdCwgUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgaWYgdmlld19uYW1lID09IG5hbWU6CisgICAgICAgICAgICAgICAgdmlld19wYXRoID0gdmlld19tb2RlbC5nZXRfcGF0aChpdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmlld19wYXRoCisgICAgICAgICAgICBpdCA9IHZpZXdfbW9kZWwuaXRlcl9uZXh0KGl0KQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIiIiCisgICAgVGhlIHBvcHVsYXRlKCkgZnVuY3Rpb24gdGFrZXMgYXMgaW5wdXQgdGhlIGRhdGEgZnJvbSBhCisgICAgYmIuZXZlbnQuVGFyZ2V0c1RyZWVHZW5lcmF0ZWQgZXZlbnQgYW5kIHBvcHVsYXRlcyB0aGUgUmVjaXBlTGlzdC4KKyAgICAiIiIKKyAgICBkZWYgcG9wdWxhdGUoc2VsZiwgZXZlbnRfbW9kZWwpOgorICAgICAgICAjIEZpcnN0IGNsZWFyIHRoZSBtb2RlbCwgaW4gY2FzZSByZXBvcHVsYXRpbmcKKyAgICAgICAgc2VsZi5jbGVhcigpCisKKyAgICAgICAgIyBkdW1teSBpbWFnZSBmb3IgcHJvbXB0CisgICAgICAgIHNlbGYuc2V0X2luX2xpc3Qoc2VsZi5fX2N1c3RvbV9pbWFnZV9fLCAgIlVzZSAnRWRpdCBpbWFnZSByZWNpcGUnIHRvIGN1c3RvbWl6ZSByZWNpcGVzIGFuZCBwYWNrYWdlcyAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIGJlIGluY2x1ZGVkIGluIHlvdXIgaW1hZ2UgIikKKworICAgICAgICBmb3IgaXRlbSBpbiBldmVudF9tb2RlbFsicG4iXToKKyAgICAgICAgICAgIG5hbWUgPSBpdGVtCisgICAgICAgICAgICBkZXNjID0gZXZlbnRfbW9kZWxbInBuIl1baXRlbV1bImRlc2NyaXB0aW9uIl0KKyAgICAgICAgICAgIGxpYyA9IGV2ZW50X21vZGVsWyJwbiJdW2l0ZW1dWyJsaWNlbnNlIl0KKyAgICAgICAgICAgIGdyb3VwID0gZXZlbnRfbW9kZWxbInBuIl1baXRlbV1bInNlY3Rpb24iXQorICAgICAgICAgICAgaW5oZXJpdHMgPSBldmVudF9tb2RlbFsicG4iXVtpdGVtXVsiaW5oZXJpdHMiXQorICAgICAgICAgICAgc3VtbWFyeSA9IGV2ZW50X21vZGVsWyJwbiJdW2l0ZW1dWyJzdW1tYXJ5Il0KKyAgICAgICAgICAgIHZlcnNpb24gPSBldmVudF9tb2RlbFsicG4iXVtpdGVtXVsidmVyc2lvbiJdCisgICAgICAgICAgICByZXZpc2lvbiA9IGV2ZW50X21vZGVsWyJwbiJdW2l0ZW1dWyJwcmV2aXNpb24iXQorICAgICAgICAgICAgaG9tZXBhZ2UgPSBldmVudF9tb2RlbFsicG4iXVtpdGVtXVsiaG9tZXBhZ2UiXQorICAgICAgICAgICAgYnVndHJhY2tlciA9IGV2ZW50X21vZGVsWyJwbiJdW2l0ZW1dWyJidWd0cmFja2VyIl0KKyAgICAgICAgICAgIGZpbGVuYW1lID0gZXZlbnRfbW9kZWxbInBuIl1baXRlbV1bImZpbGVuYW1lIl0KKyAgICAgICAgICAgIGluc3RhbGwgPSBbXQorCisgICAgICAgICAgICBkZXBlbmRzID0gZXZlbnRfbW9kZWxbImRlcGVuZHMiXS5nZXQoaXRlbSwgW10pICsgZXZlbnRfbW9kZWxbInJkZXBlbmRzLXBuIl0uZ2V0KGl0ZW0sIFtdKQorCisgICAgICAgICAgICBpZiAoJ3BhY2thZ2Vncm91cC5iYmNsYXNzJyBpbiAiICIuam9pbihpbmhlcml0cykpOgorICAgICAgICAgICAgICAgIGF0eXBlID0gJ3BhY2thZ2Vncm91cCcKKyAgICAgICAgICAgIGVsaWYgKCcvaW1hZ2UuYmJjbGFzcycgaW4gIiAiLmpvaW4oaW5oZXJpdHMpKToKKyAgICAgICAgICAgICAgICBpZiAiZWRpdGVkIiBub3QgaW4gbmFtZToKKyAgICAgICAgICAgICAgICAgICAgYXR5cGUgPSAnaW1hZ2UnCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgPSBldmVudF9tb2RlbFsicmRlcGVuZHMtcGtnIl0uZ2V0KGl0ZW0sIFtdKSArIGV2ZW50X21vZGVsWyJycmVjcy1wa2ciXS5nZXQoaXRlbSwgW10pCisgICAgICAgICAgICBlbGlmICgnbWV0YS0nIGluIG5hbWUpOgorICAgICAgICAgICAgICAgIGF0eXBlID0gJ3Rvb2xjaGFpbicKKyAgICAgICAgICAgIGVsaWYgKG5hbWUgPT0gJ2R1bW15LWltYWdlJyBvciBuYW1lID09ICdkdW1teS10b29sY2hhaW4nKToKKyAgICAgICAgICAgICAgICBhdHlwZSA9ICdkdW1teScKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXR5cGUgPSAncmVjaXBlJworCisgICAgICAgICAgICBzZWxmLnNldChzZWxmLmFwcGVuZCgpLCBzZWxmLkNPTF9OQU1FLCBpdGVtLCBzZWxmLkNPTF9ERVNDLCBkZXNjLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfTElDLCBsaWMsIHNlbGYuQ09MX0dST1VQLCBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX0RFUFMsICIgIi5qb2luKGRlcGVuZHMpLCBzZWxmLkNPTF9CSU5CLCAiIiwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX1RZUEUsIGF0eXBlLCBzZWxmLkNPTF9JTkMsIEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfSU1HLCBGYWxzZSwgc2VsZi5DT0xfSU5TVEFMTCwgIiAiLmpvaW4oaW5zdGFsbCksIHNlbGYuQ09MX1BOLCBpdGVtLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfU1VNTUFSWSwgc3VtbWFyeSwgc2VsZi5DT0xfVkVSU0lPTiwgdmVyc2lvbiwgc2VsZi5DT0xfUkVWSVNJT04sIHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfSE9NRVBBR0UsIGhvbWVwYWdlLCBzZWxmLkNPTF9CVUdUUkFDS0VSLCBidWd0cmFja2VyLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfRklMRSwgZmlsZW5hbWUpCisKKyAgICAgICAgc2VsZi5wbl9wYXRoID0ge30KKyAgICAgICAgaXQgPSBzZWxmLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBwbiA9IHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9OQU1FKQorICAgICAgICAgICAgcGF0aCA9IHNlbGYuZ2V0X3BhdGgoaXQpCisgICAgICAgICAgICBzZWxmLnBuX3BhdGhbcG5dID0gcGF0aAorICAgICAgICAgICAgaXQgPSBzZWxmLml0ZXJfbmV4dChpdCkKKworICAgIGRlZiBzZXRfaW5fbGlzdChzZWxmLCBpdGVtLCBkZXNjKToKKyAgICAgICAgc2VsZi5zZXQoc2VsZi5hcHBlbmQoKSwgc2VsZi5DT0xfTkFNRSwgaXRlbSwKKyAgICAgICAgICAgICAgICAgc2VsZi5DT0xfREVTQywgZGVzYywKKyAgICAgICAgICAgICAgICAgc2VsZi5DT0xfTElDLCAiIiwgc2VsZi5DT0xfR1JPVVAsICIiLAorICAgICAgICAgICAgICAgICBzZWxmLkNPTF9ERVBTLCAiIiwgc2VsZi5DT0xfQklOQiwgIiIsCisgICAgICAgICAgICAgICAgIHNlbGYuQ09MX1RZUEUsICJpbWFnZSIsIHNlbGYuQ09MX0lOQywgRmFsc2UsCisgICAgICAgICAgICAgICAgIHNlbGYuQ09MX0lNRywgRmFsc2UsIHNlbGYuQ09MX0lOU1RBTEwsICIiLCBzZWxmLkNPTF9QTiwgaXRlbSwKKyAgICAgICAgICAgICAgICAgc2VsZi5DT0xfU1VNTUFSWSwgIiIsIHNlbGYuQ09MX1ZFUlNJT04sICIiLCBzZWxmLkNPTF9SRVZJU0lPTiwgIiIsCisgICAgICAgICAgICAgICAgIHNlbGYuQ09MX0hPTUVQQUdFLCAiIiwgc2VsZi5DT0xfQlVHVFJBQ0tFUiwgIiIpCisgICAgICAgIHNlbGYucG5fcGF0aCA9IHt9CisgICAgICAgIGl0ID0gc2VsZi5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgcG4gPSBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfTkFNRSkKKyAgICAgICAgICAgIHBhdGggPSBzZWxmLmdldF9wYXRoKGl0KQorICAgICAgICAgICAgc2VsZi5wbl9wYXRoW3BuXSA9IHBhdGgKKyAgICAgICAgICAgIGl0ID0gc2VsZi5pdGVyX25leHQoaXQpCisKKyAgICAiIiIKKyAgICBVcGRhdGUgdGhlIG1vZGVsLCBzZW5kIG91dCB0aGUgbm90aWZpY2F0aW9uLgorICAgICIiIgorICAgIGRlZiBzZWxlY3Rpb25fY2hhbmdlX25vdGlmaWNhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5lbWl0KCJyZWNpcGUtc2VsZWN0aW9uLWNoYW5nZWQiKQorCisgICAgZGVmIHBhdGhfaW5jbHVkZWQoc2VsZiwgaXRlbV9wYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9JTkNdCisKKyAgICAiIiIKKyAgICBBZGQgdGhpcyBpdGVtLCBhbmQgYW55IG9mIGl0cyBkZXBlbmRlbmNpZXMsIHRvIHRoZSBpbWFnZSBjb250ZW50cworICAgICIiIgorICAgIGRlZiBpbmNsdWRlX2l0ZW0oc2VsZiwgaXRlbV9wYXRoLCBiaW5iPSIiLCBpbWFnZV9jb250ZW50cz1GYWxzZSk6CisgICAgICAgIGlmIHNlbGYucGF0aF9pbmNsdWRlZChpdGVtX3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaXRlbV9uYW1lID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX05BTUVdCisgICAgICAgIGl0ZW1fZGVwcyA9IHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9ERVBTXQorCisgICAgICAgIHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9JTkNdID0gVHJ1ZQorCisgICAgICAgIGl0ZW1fYmluID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0JJTkJdLnNwbGl0KCcsICcpCisgICAgICAgIGlmIGJpbmIgYW5kIG5vdCBiaW5iIGluIGl0ZW1fYmluOgorICAgICAgICAgICAgaXRlbV9iaW4uYXBwZW5kKGJpbmIpCisgICAgICAgICAgICBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfQklOQl0gPSAnLCAnLmpvaW4oaXRlbV9iaW4pLmxzdHJpcCgnLCAnKQorCisgICAgICAgICMgV2Ugd2FudCB0byBkbyBzb21lIG1hZ2ljIHdpdGggdGhpbmdzIHdoaWNoIGFyZSBicm91Z2h0IGluIGJ5IHRoZQorICAgICAgICAjIGJhc2UgaW1hZ2Ugc28gdGFnIHRoZW0gYXMgc28KKyAgICAgICAgaWYgaW1hZ2VfY29udGVudHM6CisgICAgICAgICAgICBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfSU1HXSA9IFRydWUKKworICAgICAgICBpZiBpdGVtX2RlcHM6CisgICAgICAgICAgICAjIEVuc3VyZSBhbGwgb2YgdGhlIGl0ZW1zIGRlcHMgYXJlIGluY2x1ZGVkIGFuZCwgd2hlcmUgYXBwcm9wcmlhdGUsCisgICAgICAgICAgICAjIGFkZCB0aGlzIGl0ZW0gdG8gdGhlaXIgQ09MX0JJTkIKKyAgICAgICAgICAgIGZvciBkZXAgaW4gaXRlbV9kZXBzLnNwbGl0KCIgIik6CisgICAgICAgICAgICAgICAgIyBJZiB0aGUgY29udGVudHMgbW9kZWwgZG9lc24ndCBhbHJlYWR5IGNvbnRhaW4gZGVwLCBhZGQgaXQKKyAgICAgICAgICAgICAgICBkZXBfcGF0aCA9IHNlbGYuZmluZF9wYXRoX2Zvcl9pdGVtKGRlcCkKKyAgICAgICAgICAgICAgICBpZiBub3QgZGVwX3BhdGg6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZGVwX2luY2x1ZGVkID0gc2VsZi5wYXRoX2luY2x1ZGVkKGRlcF9wYXRoKQorCisgICAgICAgICAgICAgICAgaWYgZGVwX2luY2x1ZGVkIGFuZCBub3QgZGVwIGluIGl0ZW1fYmluOgorICAgICAgICAgICAgICAgICAgICAjIGRvbid0IHNldCB0aGUgQ09MX0JJTkIgdG8gdGhpcyBpdGVtIGlmIHRoZSB0YXJnZXQgaXMgYW4KKyAgICAgICAgICAgICAgICAgICAgIyBpdGVtIGluIG91ciBvd24gQ09MX0JJTkIKKyAgICAgICAgICAgICAgICAgICAgZGVwX2JpbiA9IHNlbGZbZGVwX3BhdGhdW3NlbGYuQ09MX0JJTkJdLnNwbGl0KCcsICcpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpdGVtX25hbWUgaW4gZGVwX2JpbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcF9iaW4uYXBwZW5kKGl0ZW1fbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGZbZGVwX3BhdGhdW3NlbGYuQ09MX0JJTkJdID0gJywgJy5qb2luKGRlcF9iaW4pLmxzdHJpcCgnLCAnKQorICAgICAgICAgICAgICAgIGVsaWYgbm90IGRlcF9pbmNsdWRlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmNsdWRlX2l0ZW0oZGVwX3BhdGgsIGJpbmI9aXRlbV9uYW1lLCBpbWFnZV9jb250ZW50cz1pbWFnZV9jb250ZW50cykKKyAgICAgICAgZGVwX2JpbiA9IHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9CSU5CXS5zcGxpdCgnLCAnKQorICAgICAgICBpZiBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfTkFNRV0gaW4gZGVwX2JpbjoKKyAgICAgICAgICAgIGRlcF9iaW4ucmVtb3ZlKHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9OQU1FXSkKKyAgICAgICAgc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0JJTkJdID0gJywgJy5qb2luKGRlcF9iaW4pLmxzdHJpcCgnLCAnKQorCisgICAgZGVmIGV4Y2x1ZGVfaXRlbShzZWxmLCBpdGVtX3BhdGgpOgorICAgICAgICBpZiBub3Qgc2VsZi5wYXRoX2luY2x1ZGVkKGl0ZW1fcGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfSU5DXSA9IEZhbHNlCisKKyAgICAgICAgaXRlbV9uYW1lID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX05BTUVdCisgICAgICAgIGl0ZW1fZGVwcyA9IHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9ERVBTXQorICAgICAgICBpZiBpdGVtX2RlcHM6CisgICAgICAgICAgICBmb3IgZGVwIGluIGl0ZW1fZGVwcy5zcGxpdCgiICIpOgorICAgICAgICAgICAgICAgIGRlcF9wYXRoID0gc2VsZi5maW5kX3BhdGhfZm9yX2l0ZW0oZGVwKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkZXBfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkZXBfYmluID0gc2VsZltkZXBfcGF0aF1bc2VsZi5DT0xfQklOQl0uc3BsaXQoJywgJykKKyAgICAgICAgICAgICAgICBpZiBpdGVtX25hbWUgaW4gZGVwX2JpbjoKKyAgICAgICAgICAgICAgICAgICAgZGVwX2Jpbi5yZW1vdmUoaXRlbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmW2RlcF9wYXRoXVtzZWxmLkNPTF9CSU5CXSA9ICcsICcuam9pbihkZXBfYmluKS5sc3RyaXAoJywgJykKKworICAgICAgICBpdGVtX2JpbiA9IHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9CSU5CXS5zcGxpdCgnLCAnKQorICAgICAgICBpZiBpdGVtX2JpbjoKKyAgICAgICAgICAgIGZvciBiaW5iIGluIGl0ZW1fYmluOgorICAgICAgICAgICAgICAgIGJpbmJfcGF0aCA9IHNlbGYuZmluZF9wYXRoX2Zvcl9pdGVtKGJpbmIpCisgICAgICAgICAgICAgICAgaWYgbm90IGJpbmJfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLmV4Y2x1ZGVfaXRlbShiaW5iX3BhdGgpCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIGl0ID0gc2VsZi5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgc2VsZi5zZXQoaXQsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9JTkMsIEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfQklOQiwgIiIsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9JTUcsIEZhbHNlKQorICAgICAgICAgICAgaXQgPSBzZWxmLml0ZXJfbmV4dChpdCkKKworICAgICAgICBzZWxmLnNlbGVjdGlvbl9jaGFuZ2Vfbm90aWZpY2F0aW9uKCkKKworICAgICIiIgorICAgIFJldHVybnMgdHdvIGxpc3RzLiBPbmUgb2YgdXNlciBzZWxlY3RlZCByZWNpcGVzIGFuZCB0aGUgb3RoZXIgY29udGFpbmluZworICAgIGFsbCBzZWxlY3RlZCByZWNpcGVzCisgICAgIiIiCisgICAgZGVmIGdldF9zZWxlY3RlZF9yZWNpcGVzKHNlbGYpOgorICAgICAgICBhbGxyZWNpcGVzID0gW10KKyAgICAgICAgdXNlcnJlY2lwZXMgPSBbXQorCisgICAgICAgIGl0ID0gc2VsZi5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgaWYgc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX0lOQyk6CisgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9QTikKKyAgICAgICAgICAgICAgICB0eXBlID0gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX1RZUEUpCisgICAgICAgICAgICAgICAgaWYgdHlwZSAhPSAiaW1hZ2UiOgorICAgICAgICAgICAgICAgICAgICBhbGxyZWNpcGVzLmFwcGVuZChuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWwgPSAiVXNlciBTZWxlY3RlZCIgaW4gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX0JJTkIpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJyZWNpcGVzLmFwcGVuZChuYW1lKQorICAgICAgICAgICAgaXQgPSBzZWxmLml0ZXJfbmV4dChpdCkKKworICAgICAgICByZXR1cm4gbGlzdChzZXQodXNlcnJlY2lwZXMpKSwgbGlzdChzZXQoYWxscmVjaXBlcykpCisKKyAgICBkZWYgc2V0X3NlbGVjdGVkX3JlY2lwZXMoc2VsZiwgcmVjaXBlbGlzdCk6CisgICAgICAgIGZvciBwbiBpbiByZWNpcGVsaXN0OgorICAgICAgICAgICAgaWYgcG4gaW4gc2VsZi5wbl9wYXRoLmtleXMoKToKKyAgICAgICAgICAgICAgICBwYXRoID0gc2VsZi5wbl9wYXRoW3BuXQorICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9pdGVtKGl0ZW1fcGF0aD1wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmI9IlVzZXIgU2VsZWN0ZWQiKQorICAgICAgICBzZWxmLnNlbGVjdGlvbl9jaGFuZ2Vfbm90aWZpY2F0aW9uKCkKKworICAgIGRlZiBnZXRfc2VsZWN0ZWRfaW1hZ2Uoc2VsZik6CisgICAgICAgIGl0ID0gc2VsZi5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgaWYgc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX0lOQyk6CisgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9QTikKKyAgICAgICAgICAgICAgICB0eXBlID0gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX1RZUEUpCisgICAgICAgICAgICAgICAgaWYgdHlwZSA9PSAiaW1hZ2UiOgorICAgICAgICAgICAgICAgICAgICBzZWwgPSAiVXNlciBTZWxlY3RlZCIgaW4gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX0JJTkIpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuYW1lCisgICAgICAgICAgICBpdCA9IHNlbGYuaXRlcl9uZXh0KGl0KQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHNldF9zZWxlY3RlZF9pbWFnZShzZWxmLCBpbWcpOgorICAgICAgICBpZiBub3QgaW1nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYucmVzZXQoKQorICAgICAgICBwYXRoID0gc2VsZi5maW5kX3BhdGhfZm9yX2l0ZW0oaW1nKQorICAgICAgICBzZWxmLmluY2x1ZGVfaXRlbShpdGVtX3BhdGg9cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYj0iVXNlciBTZWxlY3RlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX2NvbnRlbnRzPVRydWUpCisgICAgICAgIHNlbGYuc2VsZWN0aW9uX2NoYW5nZV9ub3RpZmljYXRpb24oKQorCisgICAgZGVmIHNldF9jdXN0b21faW1hZ2VfdmVyc2lvbihzZWxmLCB2ZXJzaW9uKToKKyAgICAgICAgc2VsZi5jdXN0b21faW1hZ2VfdmVyc2lvbiA9IHZlcnNpb24KKworICAgIGRlZiBnZXRfY3VzdG9tX2ltYWdlX3ZlcnNpb24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmN1c3RvbV9pbWFnZV92ZXJzaW9uCisKKyAgICBkZWYgaXNfY3VzdG9tX2ltYWdlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5nZXRfc2VsZWN0ZWRfaW1hZ2UoKSA9PSBzZWxmLl9fY3VzdG9tX2ltYWdlX18KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYnBhZ2VzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9icGFnZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGZkMzU5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYnBhZ2VzLnB5CkBAIC0wLDAgKzEsMTI4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMiAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitmcm9tIGJiLnVpLmNydW1icy5ob2Jjb2xvciBpbXBvcnQgSG9iQ29sb3JzCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IGh3YworCisjCisjIEhvYlBhZ2U6IHRoZSBzdXBlciBjbGFzcyBmb3IgYWxsIEhvYi1yZWxhdGVkIHBhZ2VzCisjICAgIAorY2xhc3MgSG9iUGFnZSAoZ3RrLlZCb3gpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1aWxkZXIsIHRpdGxlID0gTm9uZSk6CisgICAgICAgIHN1cGVyKEhvYlBhZ2UsIHNlbGYpLl9faW5pdF9fKEZhbHNlLCAwKQorICAgICAgICBzZWxmLmJ1aWxkZXIgPSBidWlsZGVyCisgICAgICAgIHNlbGYuYnVpbGRlcl93aWR0aCwgc2VsZi5idWlsZGVyX2hlaWdodCA9IHNlbGYuYnVpbGRlci5zaXplX3JlcXVlc3QoKQorCisgICAgICAgIGlmIG5vdCB0aXRsZToKKyAgICAgICAgICAgIHNlbGYudGl0bGUgPSAiSG9iIC0tIEltYWdlIENyZWF0b3IiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnRpdGxlID0gdGl0bGUKKyAgICAgICAgc2VsZi50aXRsZV9sYWJlbCA9IGd0ay5MYWJlbCgpCisKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYSA9IGd0ay5WQm94KEZhbHNlLCAxMikKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5zZXRfc2l6ZV9yZXF1ZXN0KHNlbGYuYnVpbGRlcl93aWR0aCAtIDczIC0gNzMsIHNlbGYuYnVpbGRlcl9oZWlnaHQgLSA4OCAtIDE1IC0gMTUpCisgICAgICAgIHNlbGYuZ3JvdXBfYWxpZ24gPSBndGsuQWxpZ25tZW50KHhhbGlnbiA9IDAsIHlhbGlnbj0wLjUsIHhzY2FsZT0xLCB5c2NhbGU9MSkKKyAgICAgICAgc2VsZi5ncm91cF9hbGlnbi5zZXRfcGFkZGluZygxNSwgMTUsIDczLCA3MykKKyAgICAgICAgc2VsZi5ncm91cF9hbGlnbi5hZGQoc2VsZi5ib3hfZ3JvdXBfYXJlYSkKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5zZXRfaG9tb2dlbmVvdXMoRmFsc2UpCisKKyAgICBkZWYgc2V0X3RpdGxlKHNlbGYsIHRpdGxlKToKKyAgICAgICAgc2VsZi50aXRsZSA9IHRpdGxlCisgICAgICAgIHNlbGYudGl0bGVfbGFiZWwuc2V0X21hcmt1cCgiPHNwYW4gc2l6ZT0neC1sYXJnZSc+JXM8L3NwYW4+IiAlIHNlbGYudGl0bGUpCisKKyAgICBkZWYgYWRkX29udG9fdG9wX2JhcihzZWxmLCB3aWRnZXQgPSBOb25lLCBwYWRkaW5nID0gMCk6CisgICAgICAgICMgdGhlIHRvcCBidXR0b24gb2NjdXBpZXMgMS83IG9mIHRoZSBwYWdlIGhlaWdodAorICAgICAgICAjIHNldHVwIGFuIGV2ZW50IGJveAorICAgICAgICBldmVudGJveCA9IGd0ay5FdmVudEJveCgpCisgICAgICAgIHN0eWxlID0gZXZlbnRib3guZ2V0X3N0eWxlKCkuY29weSgpCisgICAgICAgIHN0eWxlLmJnW2d0ay5TVEFURV9OT1JNQUxdID0gZXZlbnRib3guZ2V0X2NvbG9ybWFwKCkuYWxsb2NfY29sb3IoSG9iQ29sb3JzLkxJR0hUX0dSQVksIEZhbHNlLCBGYWxzZSkKKyAgICAgICAgZXZlbnRib3guc2V0X3N0eWxlKHN0eWxlKQorICAgICAgICBldmVudGJveC5zZXRfc2l6ZV9yZXF1ZXN0KC0xLCA4OCkKKworICAgICAgICBoYm94ID0gZ3RrLkhCb3goKQorCisgICAgICAgIHNlbGYudGl0bGVfbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBzZWxmLnRpdGxlX2xhYmVsLnNldF9tYXJrdXAoIjxzcGFuIHNpemU9J3gtbGFyZ2UnPiVzPC9zcGFuPiIgJSBzZWxmLnRpdGxlKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQoc2VsZi50aXRsZV9sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTIwKQorCisgICAgICAgIGlmIHdpZGdldDoKKyAgICAgICAgICAgICMgYWRkIHRoZSB3aWRnZXQgaW4gdGhlIGV2ZW50IGJveAorICAgICAgICAgICAgaGJveC5wYWNrX2VuZCh3aWRnZXQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz1wYWRkaW5nKQorICAgICAgICBldmVudGJveC5hZGQoaGJveCkKKworICAgICAgICByZXR1cm4gZXZlbnRib3gKKworICAgIGRlZiBzcGFuX3RhZyhzZWxmLCBzaXplPSJtZWRpdW0iLCB3ZWlnaHQ9Im5vcm1hbCIsIGZvcmdyb3VuZD0iIzFjMWMxYyIpOgorICAgICAgICBzcGFuX3RhZyA9ICJ3ZWlnaHQ9JyVzJyBmb3JlZ3JvdW5kPSclcycgc2l6ZT0nJXMnIiAlICh3ZWlnaHQsIGZvcmdyb3VuZCwgc2l6ZSkKKyAgICAgICAgcmV0dXJuIHNwYW5fdGFnCisKKyAgICBkZWYgYXBwZW5kX3Rvb2xiYXJfYnV0dG9uKHNlbGYsIHRvb2xiYXIsIGJ1dHRvbm5hbWUsIGljb25fZGlzcCwgaWNvbl9ob3ZvciwgdGlwLCBjYik6CisgICAgICAgICMgQ3JlYXRlIGEgYnV0dG9uIGFuZCBhcHBlbmQgaXQgb24gdGhlIHRvb2xiYXIgYWNjb3JkaW5nIHRvIGJ1dHRvbiBuYW1lCisgICAgICAgIGljb24gPSBndGsuSW1hZ2UoKQorICAgICAgICBpY29uX2Rpc3BsYXkgPSBpY29uX2Rpc3AKKyAgICAgICAgaWNvbl9ob3ZlciA9IGljb25faG92b3IKKyAgICAgICAgcGl4X2J1ZmZlciA9IGd0ay5nZGsucGl4YnVmX25ld19mcm9tX2ZpbGUoaWNvbl9kaXNwbGF5KQorICAgICAgICBpY29uLnNldF9mcm9tX3BpeGJ1ZihwaXhfYnVmZmVyKQorICAgICAgICB0aXBfdGV4dCA9IHRpcAorICAgICAgICBidXR0b24gPSB0b29sYmFyLmFwcGVuZF9pdGVtKGJ1dHRvbm5hbWUsIHRpcCwgTm9uZSwgaWNvbiwgY2IpCisgICAgICAgIHJldHVybiBidXR0b24KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3NpemVfdG9fc3RyaW5nKHNpemUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3Qgc2l6ZToKKyAgICAgICAgICAgICAgICBzaXplX3N0ciA9ICIwIEIiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGxlbihzdHIoaW50KHNpemUpKSkgPiA2OgorICAgICAgICAgICAgICAgICAgICBzaXplX3N0ciA9ICclLjFmJyAlIChzaXplKjEuMC8oMTAyNCoxMDI0KSkgKyAnIE1CJworICAgICAgICAgICAgICAgIGVsaWYgbGVuKHN0cihpbnQoc2l6ZSkpKSA+IDM6CisgICAgICAgICAgICAgICAgICAgIHNpemVfc3RyID0gJyUuMWYnICUgKHNpemUqMS4wLzEwMjQpICsgJyBLQicKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzaXplX3N0ciA9IHN0cihzaXplKSArICcgQicKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2l6ZV9zdHIgPSAiMCBCIgorICAgICAgICByZXR1cm4gc2l6ZV9zdHIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3N0cmluZ190b19zaXplKHN0cl9zaXplKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHN0cl9zaXplOgorICAgICAgICAgICAgICAgIHNpemUgPSAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHVuaXQgPSBzdHJfc2l6ZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgaWYgbGVuKHVuaXQpID4gMToKKyAgICAgICAgICAgICAgICAgICAgaWYgdW5pdFsxXSA9PSAnTUInOgorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGZsb2F0KHVuaXRbMF0pKjEwMjQqMTAyNAorICAgICAgICAgICAgICAgICAgICBlbGlmIHVuaXRbMV0gPT0gJ0tCJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBmbG9hdCh1bml0WzBdKSoxMDI0CisgICAgICAgICAgICAgICAgICAgIGVsaWYgdW5pdFsxXSA9PSAnQic6CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gZmxvYXQodW5pdFswXSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGZsb2F0KHVuaXRbMF0pCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNpemUgPSAwCisgICAgICAgIHJldHVybiBzaXplCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYndpZGdldC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYndpZGdldC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjk2OWMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9id2lkZ2V0LnB5CkBAIC0wLDAgKzEsOTA0IEBACisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KK2ltcG9ydCBndGsKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc3lzCitpbXBvcnQgcGFuZ28sIHBhbmdvY2Fpcm8KK2ltcG9ydCBjYWlybworaW1wb3J0IG1hdGgKKworZnJvbSBiYi51aS5jcnVtYnMuaG9iY29sb3IgaW1wb3J0IEhvYkNvbG9ycworZnJvbSBiYi51aS5jcnVtYnMucGVyc2lzdGVudHRvb2x0aXAgaW1wb3J0IFBlcnNpc3RlbnRUb29sdGlwCisKK2NsYXNzIGh3YzoKKworICAgIE1BSU5fV0lOX1dJRFRIICAgPSAxMDI0CisgICAgTUFJTl9XSU5fSEVJR0hUICA9IDcwMAorCitjbGFzcyBoaWM6CisKKyAgICBIT0JfSUNPTl9CQVNFX0RJUiA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpKSwgKCJ1aS9pY29ucy8iKSkKKworICAgIElDT05fUkNJUEVfRElTUExBWV9GSUxFICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ3JlY2lwZS9yZWNpcGVfZGlzcGxheS5wbmcnKSkKKyAgICBJQ09OX1JDSVBFX0hPVkVSX0ZJTEUgICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdyZWNpcGUvcmVjaXBlX2hvdmVyLnBuZycpKQorICAgIElDT05fUEFDS0FHRVNfRElTUExBWV9GSUxFICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ3BhY2thZ2VzL3BhY2thZ2VzX2Rpc3BsYXkucG5nJykpCisgICAgSUNPTl9QQUNLQUdFU19IT1ZFUl9GSUxFICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgncGFja2FnZXMvcGFja2FnZXNfaG92ZXIucG5nJykpCisgICAgSUNPTl9MQVlFUlNfRElTUExBWV9GSUxFICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnbGF5ZXJzL2xheWVyc19kaXNwbGF5LnBuZycpKQorICAgIElDT05fTEFZRVJTX0hPVkVSX0ZJTEUgICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ2xheWVycy9sYXllcnNfaG92ZXIucG5nJykpCisgICAgSUNPTl9JTUFHRVNfRElTUExBWV9GSUxFICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW1hZ2VzL2ltYWdlc19kaXNwbGF5LnBuZycpKQorICAgIElDT05fSU1BR0VTX0hPVkVSX0ZJTEUgICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ2ltYWdlcy9pbWFnZXNfaG92ZXIucG5nJykpCisgICAgSUNPTl9TRVRUSU5HU19ESVNQTEFZX0ZJTEUgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnc2V0dGluZ3Mvc2V0dGluZ3NfZGlzcGxheS5wbmcnKSkKKyAgICBJQ09OX1NFVFRJTkdTX0hPVkVSX0ZJTEUgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdzZXR0aW5ncy9zZXR0aW5nc19ob3Zlci5wbmcnKSkKKyAgICBJQ09OX0lORk9fRElTUExBWV9GSUxFICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmZvL2luZm9fZGlzcGxheS5wbmcnKSkKKyAgICBJQ09OX0lORk9fSE9WRVJfRklMRSAgICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmZvL2luZm9faG92ZXIucG5nJykpCisgICAgSUNPTl9JTkRJX0NPTkZJUk1fRklMRSAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9jb25maXJtYXRpb24ucG5nJykpCisgICAgSUNPTl9JTkRJX0VSUk9SX0ZJTEUgICAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9kZW5pZWQucG5nJykpCisgICAgSUNPTl9JTkRJX1JFTU9WRV9GSUxFICAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9yZW1vdmUucG5nJykpCisgICAgSUNPTl9JTkRJX1JFTU9WRV9IT1ZFUl9GSUxFICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9yZW1vdmUtaG92ZXIucG5nJykpCisgICAgSUNPTl9JTkRJX0FERF9GSUxFICAgICAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9hZGQucG5nJykpCisgICAgSUNPTl9JTkRJX0FERF9IT1ZFUl9GSUxFICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9hZGQtaG92ZXIucG5nJykpCisgICAgSUNPTl9JTkRJX1JFRlJFU0hfRklMRSAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9yZWZyZXNoLnBuZycpKQorICAgIElDT05fSU5ESV9BTEVSVF9GSUxFICAgICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ2luZGljYXRvcnMvYWxlcnQucG5nJykpCisgICAgSUNPTl9JTkRJX1RJQ0tfRklMRSAgICAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy90aWNrLnBuZycpKQorICAgIElDT05fSU5ESV9JTkZPX0ZJTEUgICAgICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ2luZGljYXRvcnMvaW5mby5wbmcnKSkKKworY2xhc3MgSG9iVmlld1RhYmxlIChndGsuVkJveCk6CisgICAgIiIiCisgICAgQSBWQm94IHRvIGNvbnRhaW4gdGhlIHRhYmxlIGZvciBkaWZmZXJlbnQgcmVjaXBlIHZpZXdzIGFuZCBwYWNrYWdlIHZpZXcKKyAgICAiIiIKKyAgICBfX2dzaWduYWxzX18gPSB7CisgICAgICAgICAidG9nZ2xlZCIgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1BZT0JKRUNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX0lOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsKSksCisgICAgICAgICAicm93LWFjdGl2YXRlZCIgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1BZT0JKRUNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9QWU9CSkVDVCwpKSwKKyAgICAgICAgICJjZWxsLWZhZGVpbm91dC1zdG9wcGVkIiA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1BZT0JKRUNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9QWU9CSkVDVCwpKSwKKyAgICB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29sdW1ucywgbmFtZSk6CisgICAgICAgIGd0ay5WQm94Ll9faW5pdF9fKHNlbGYsIEZhbHNlLCA2KQorICAgICAgICBzZWxmLnRhYmxlX3RyZWUgPSBndGsuVHJlZVZpZXcoKQorICAgICAgICBzZWxmLnRhYmxlX3RyZWUuc2V0X2hlYWRlcnNfdmlzaWJsZShUcnVlKQorICAgICAgICBzZWxmLnRhYmxlX3RyZWUuc2V0X2hlYWRlcnNfY2xpY2thYmxlKFRydWUpCisgICAgICAgIHNlbGYudGFibGVfdHJlZS5zZXRfcnVsZXNfaGludChUcnVlKQorICAgICAgICBzZWxmLnRhYmxlX3RyZWUuc2V0X2VuYWJsZV90cmVlX2xpbmVzKFRydWUpCisgICAgICAgIHNlbGYudGFibGVfdHJlZS5nZXRfc2VsZWN0aW9uKCkuc2V0X21vZGUoZ3RrLlNFTEVDVElPTl9TSU5HTEUpCisgICAgICAgIHNlbGYudG9nZ2xlX2NvbHVtbnMgPSBbXQorICAgICAgICBzZWxmLnRhYmxlX3RyZWUuY29ubmVjdCgicm93LWFjdGl2YXRlZCIsIHNlbGYucm93X2FjdGl2YXRlZF9jYikKKyAgICAgICAgc2VsZi50b3BfYmFyID0gTm9uZQorICAgICAgICBzZWxmLnRhYl9uYW1lID0gbmFtZQorCisgICAgICAgIGZvciBpLCBjb2x1bW4gaW4gZW51bWVyYXRlKGNvbHVtbnMpOgorICAgICAgICAgICAgY29sX25hbWUgPSBjb2x1bW5bJ2NvbF9uYW1lJ10KKyAgICAgICAgICAgIGNvbCA9IGd0ay5UcmVlVmlld0NvbHVtbihjb2xfbmFtZSkKKyAgICAgICAgICAgIGNvbC5zZXRfY2xpY2thYmxlKFRydWUpCisgICAgICAgICAgICBjb2wuc2V0X3Jlc2l6YWJsZShUcnVlKQorICAgICAgICAgICAgaWYgc2VsZi50YWJfbmFtZS5zdGFydHN3aXRoKCdJbmNsdWRlZCcpOgorICAgICAgICAgICAgICAgIGlmIGNvbF9uYW1lIT0nSW5jbHVkZWQnOgorICAgICAgICAgICAgICAgICAgICBjb2wuc2V0X3NvcnRfY29sdW1uX2lkKGNvbHVtblsnY29sX2lkJ10pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbC5zZXRfc29ydF9jb2x1bW5faWQoY29sdW1uWydjb2xfaWQnXSkKKyAgICAgICAgICAgIGlmICdjb2xfbWluJyBpbiBjb2x1bW4ua2V5cygpOgorICAgICAgICAgICAgICAgIGNvbC5zZXRfbWluX3dpZHRoKGNvbHVtblsnY29sX21pbiddKQorICAgICAgICAgICAgaWYgJ2NvbF9tYXgnIGluIGNvbHVtbi5rZXlzKCk6CisgICAgICAgICAgICAgICAgY29sLnNldF9tYXhfd2lkdGgoY29sdW1uWydjb2xfbWF4J10pCisgICAgICAgICAgICBpZiAnZXhwYW5kJyBpbiBjb2x1bW4ua2V5cygpOgorICAgICAgICAgICAgICAgIGNvbC5zZXRfZXhwYW5kKFRydWUpCisgICAgICAgICAgICBzZWxmLnRhYmxlX3RyZWUuYXBwZW5kX2NvbHVtbihjb2wpCisKKyAgICAgICAgICAgIGlmIChub3QgJ2NvbF9zdHlsZScgaW4gY29sdW1uLmtleXMoKSkgb3IgY29sdW1uWydjb2xfc3R5bGUnXSA9PSAndGV4dCc6CisgICAgICAgICAgICAgICAgY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKKyAgICAgICAgICAgICAgICBjb2wucGFja19zdGFydChjZWxsLCBUcnVlKQorICAgICAgICAgICAgICAgIGNvbC5zZXRfYXR0cmlidXRlcyhjZWxsLCB0ZXh0PWNvbHVtblsnY29sX2lkJ10pCisgICAgICAgICAgICAgICAgaWYgJ2NvbF90X2lkJyBpbiBjb2x1bW4ua2V5cygpOgorICAgICAgICAgICAgICAgICAgICBjb2wuYWRkX2F0dHJpYnV0ZShjZWxsLCAnZm9udCcsIGNvbHVtblsnY29sX3RfaWQnXSkKKyAgICAgICAgICAgIGVsaWYgY29sdW1uWydjb2xfc3R5bGUnXSA9PSAnY2hlY2sgdG9nZ2xlJzoKKyAgICAgICAgICAgICAgICBjZWxsID0gSG9iQ2VsbFJlbmRlcmVyVG9nZ2xlKCkKKyAgICAgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgnYWN0aXZhdGFibGUnLCBUcnVlKQorICAgICAgICAgICAgICAgIGNlbGwuY29ubmVjdCgidG9nZ2xlZCIsIHNlbGYudG9nZ2xlZF9jYiwgaSwgc2VsZi50YWJsZV90cmVlKQorICAgICAgICAgICAgICAgIGNlbGwuY29ubmVjdF9yZW5kZXJfc3RhdGVfY2hhbmdlZChzZWxmLnN0b3BfY2VsbF9mYWRlaW5vdXRfY2IsIHNlbGYudGFibGVfdHJlZSkKKyAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZV9pZCA9IGkKKyAgICAgICAgICAgICAgICBjb2wucGFja19lbmQoY2VsbCwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBjb2wuc2V0X2F0dHJpYnV0ZXMoY2VsbCwgYWN0aXZlPWNvbHVtblsnY29sX2lkJ10pCisgICAgICAgICAgICAgICAgc2VsZi50b2dnbGVfY29sdW1ucy5hcHBlbmQoY29sX25hbWUpCisgICAgICAgICAgICAgICAgaWYgJ2NvbF9ncm91cCcgaW4gY29sdW1uLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgY29sLnNldF9jZWxsX2RhdGFfZnVuYyhjZWxsLCBzZWxmLnNldF9ncm91cF9udW1iZXJfY2IpCisgICAgICAgICAgICBlbGlmIGNvbHVtblsnY29sX3N0eWxlJ10gPT0gJ3JhZGlvIHRvZ2dsZSc6CisgICAgICAgICAgICAgICAgY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUb2dnbGUoKQorICAgICAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCdhY3RpdmF0YWJsZScsIFRydWUpCisgICAgICAgICAgICAgICAgY2VsbC5zZXRfcmFkaW8oVHJ1ZSkKKyAgICAgICAgICAgICAgICBjZWxsLmNvbm5lY3QoInRvZ2dsZWQiLCBzZWxmLnRvZ2dsZWRfY2IsIGksIHNlbGYudGFibGVfdHJlZSkKKyAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZV9pZCA9IGkKKyAgICAgICAgICAgICAgICBjb2wucGFja19lbmQoY2VsbCwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBjb2wuc2V0X2F0dHJpYnV0ZXMoY2VsbCwgYWN0aXZlPWNvbHVtblsnY29sX2lkJ10pCisgICAgICAgICAgICAgICAgc2VsZi50b2dnbGVfY29sdW1ucy5hcHBlbmQoY29sX25hbWUpCisgICAgICAgICAgICBlbGlmIGNvbHVtblsnY29sX3N0eWxlJ10gPT0gJ2JpbmInOgorICAgICAgICAgICAgICAgIGNlbGwgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisgICAgICAgICAgICAgICAgY29sLnBhY2tfc3RhcnQoY2VsbCwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBjb2wuc2V0X2NlbGxfZGF0YV9mdW5jKGNlbGwsIHNlbGYuZGlzcGxheV9iaW5iX2NiLCBjb2x1bW5bJ2NvbF9pZCddKQorICAgICAgICAgICAgICAgIGlmICdjb2xfdF9pZCcgaW4gY29sdW1uLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgY29sLmFkZF9hdHRyaWJ1dGUoY2VsbCwgJ2ZvbnQnLCBjb2x1bW5bJ2NvbF90X2lkJ10pCisKKyAgICAgICAgc2VsZi5zY3JvbGwgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorICAgICAgICBzZWxmLnNjcm9sbC5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfTkVWRVIsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorICAgICAgICBzZWxmLnNjcm9sbC5hZGQoc2VsZi50YWJsZV90cmVlKQorCisgICAgICAgIHNlbGYucGFja19lbmQoc2VsZi5zY3JvbGwsIFRydWUsIFRydWUsIDApCisKKyAgICBkZWYgYWRkX25vX3Jlc3VsdF9iYXIoc2VsZiwgZW50cnkpOgorICAgICAgICBjb2xvciA9IEhvYkNvbG9ycy5LSEFLSQorICAgICAgICBzZWxmLnRvcF9iYXIgPSBndGsuRXZlbnRCb3goKQorICAgICAgICBzZWxmLnRvcF9iYXIuc2V0X3NpemVfcmVxdWVzdCgtMSwgNzApCisgICAgICAgIHNlbGYudG9wX2Jhci5tb2RpZnlfYmcoZ3RrLlNUQVRFX05PUk1BTCwgZ3RrLmdkay5jb2xvcl9wYXJzZShjb2xvcikpCisgICAgICAgIHNlbGYudG9wX2Jhci5zZXRfZmxhZ3MoZ3RrLkNBTl9ERUZBVUxUKQorICAgICAgICBzZWxmLnRvcF9iYXIuZ3JhYl9kZWZhdWx0KCkKKworICAgICAgICBub19yZXN1bHRfdGFiID0gZ3RrLlRhYmxlKDUsIDIwLCBUcnVlKQorICAgICAgICBzZWxmLnRvcF9iYXIuYWRkKG5vX3Jlc3VsdF90YWIpCisKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICB0aXRsZSA9ICJObyByZXN1bHRzIG1hdGNoaW5nIHlvdXIgc2VhcmNoIgorICAgICAgICBsYWJlbC5zZXRfbWFya3VwKCI8c3BhbiBzaXplPSd4LWxhcmdlJz48Yj4lczwvYj48L3NwYW4+IiAlIHRpdGxlKQorICAgICAgICBub19yZXN1bHRfdGFiLmF0dGFjaChsYWJlbCwgMSwgMTQsIDEsIDQpCisKKyAgICAgICAgY2xlYXJfYnV0dG9uID0gSG9iQnV0dG9uKCJDbGVhciBzZWFyY2giKQorICAgICAgICBjbGVhcl9idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiQ2xlYXIgc2VhcmNoIHF1ZXJ5IikKKyAgICAgICAgY2xlYXJfYnV0dG9uLmNvbm5lY3QoJ2NsaWNrZWQnLCBzZWxmLnNldF9zZWFyY2hfZW50cnlfY2xlYXJfY2IsIGVudHJ5KQorICAgICAgICBub19yZXN1bHRfdGFiLmF0dGFjaChjbGVhcl9idXR0b24sIDE2LCAxOSwgMSwgNCkKKworICAgICAgICBzZWxmLnBhY2tfc3RhcnQoc2VsZi50b3BfYmFyLCBGYWxzZSwgVHJ1ZSwgMTIpCisgICAgICAgIHNlbGYudG9wX2Jhci5zaG93X2FsbCgpCisKKyAgICBkZWYgc2V0X3NlYXJjaF9lbnRyeV9jbGVhcl9jYihzZWxmLCBidXR0b24sIHNlYXJjaCk6CisgICAgICAgIGlmIHNlYXJjaC5nZXRfZWRpdGFibGUoKSA9PSBUcnVlOgorICAgICAgICAgICAgc2VhcmNoLnNldF90ZXh0KCIiKQorICAgICAgICBzZWFyY2guc2V0X2ljb25fc2Vuc2l0aXZlKGd0ay5FTlRSWV9JQ09OX1NFQ09OREFSWSwgRmFsc2UpCisgICAgICAgIHNlYXJjaC5ncmFiX2ZvY3VzKCkKKworICAgIGRlZiBkaXNwbGF5X2JpbmJfY2Ioc2VsZiwgY29sLCBjZWxsLCBtb2RlbCwgaXQsIGNvbF9pZCk6CisgICAgICAgIGJpbmIgPSAgbW9kZWwuZ2V0X3ZhbHVlKGl0LCBjb2xfaWQpCisgICAgICAgICMgSnVzdCBkaXNwbGF5IHRoZSBmaXJzdCBpdGVtCisgICAgICAgIGlmIGJpbmI6CisgICAgICAgICAgICBiaW4gPSBiaW5iLnNwbGl0KCcsICcpCisgICAgICAgICAgICB0b3RhbF9ubyA9IGxlbihiaW4pCisgICAgICAgICAgICBpZiB0b3RhbF9ubyA+IDEgYW5kIGJpblswXSA9PSAiVXNlciBTZWxlY3RlZCI6CisgICAgICAgICAgICAgICAgaWYgdG90YWxfbm8gPiAyOgorICAgICAgICAgICAgICAgICAgICBwcmVzZW50X2JpbmIgPSBiaW5bMV0gKyAnICgrJyArIHN0cih0b3RhbF9ubyAtIDEpICsgJyknCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcHJlc2VudF9iaW5iID0gYmluWzFdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHRvdGFsX25vID4gMToKKyAgICAgICAgICAgICAgICAgICAgcHJlc2VudF9iaW5iID0gYmluWzBdICsgJyAoKycgKyBzdHIodG90YWxfbm8gLSAxKSArICcpJworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByZXNlbnRfYmluYiA9IGJpblswXQorICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ3RleHQnLCBwcmVzZW50X2JpbmIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgndGV4dCcsICIiKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHNldF9tb2RlbChzZWxmLCB0cmVlX21vZGVsKToKKyAgICAgICAgc2VsZi50YWJsZV90cmVlLnNldF9tb2RlbCh0cmVlX21vZGVsKQorCisgICAgZGVmIHRvZ2dsZV9kZWZhdWx0KHNlbGYpOgorICAgICAgICBtb2RlbCA9IHNlbGYudGFibGVfdHJlZS5nZXRfbW9kZWwoKQorICAgICAgICBpZiBub3QgbW9kZWw6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaXRlciA9IG1vZGVsLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgaWYgaXRlcjoKKyAgICAgICAgICAgIHJvd3BhdGggPSBtb2RlbC5nZXRfcGF0aChpdGVyKQorICAgICAgICAgICAgbW9kZWxbcm93cGF0aF1bc2VsZi50b2dnbGVfaWRdID0gVHJ1ZQorCisgICAgZGVmIHRvZ2dsZWRfY2Ioc2VsZiwgY2VsbCwgcGF0aCwgY29sdW1uaWQsIHRyZWUpOgorICAgICAgICBzZWxmLmVtaXQoInRvZ2dsZWQiLCBjZWxsLCBwYXRoLCBjb2x1bW5pZCwgdHJlZSkKKworICAgIGRlZiByb3dfYWN0aXZhdGVkX2NiKHNlbGYsIHRyZWUsIHBhdGgsIHZpZXdfY29sdW1uKToKKyAgICAgICAgaWYgbm90IHZpZXdfY29sdW1uLmdldF90aXRsZSgpIGluIHNlbGYudG9nZ2xlX2NvbHVtbnM6CisgICAgICAgICAgICBzZWxmLmVtaXQoInJvdy1hY3RpdmF0ZWQiLCB0cmVlLmdldF9tb2RlbCgpLCBwYXRoKQorCisgICAgZGVmIHN0b3BfY2VsbF9mYWRlaW5vdXRfY2Ioc2VsZiwgY3RybCwgY2VsbCwgdHJlZSk6CisgICAgICAgIHNlbGYuZW1pdCgiY2VsbC1mYWRlaW5vdXQtc3RvcHBlZCIsIGN0cmwsIGNlbGwsIHRyZWUpCisKKyAgICBkZWYgc2V0X2dyb3VwX251bWJlcl9jYihzZWxmLCBjb2wsIGNlbGwsIG1vZGVsLCBpdGVyKToKKyAgICAgICAgaWYgbW9kZWwgYW5kIChtb2RlbC5pdGVyX3BhcmVudChpdGVyKSA9PSBOb25lKToKKyAgICAgICAgICAgIGNlbGwuY2VsbF9hdHRyWyJudW1iZXJfb2ZfY2hpbGRyZW4iXSA9IG1vZGVsLml0ZXJfbl9jaGlsZHJlbihpdGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2VsbC5jZWxsX2F0dHJbIm51bWJlcl9vZl9jaGlsZHJlbiJdID0gMAorCisgICAgZGVmIGNvbm5lY3RfZ3JvdXBfc2VsZWN0aW9uKHNlbGYsIGNiX2Z1bmMpOgorICAgICAgICBzZWxmLnRhYmxlX3RyZWUuZ2V0X3NlbGVjdGlvbigpLmNvbm5lY3QoImNoYW5nZWQiLCBjYl9mdW5jKQorCisiIiIKK0EgbWV0aG9kIHRvIGNhbGN1bGF0ZSBhIHNvZnRlbmVkIHZhbHVlIGZvciB0aGUgY29sb3VyIG9mIHdpZGdldCB3aGVuIGluIHRoZQorcHJvdmlkZWQgc3RhdGUuCisKK3dpZGdldDogdGhlIHdpZGdldCB3aG9zZSBzdHlsZSB0byB1c2UKK3N0YXRlOiB0aGUgc3RhdGUgb2YgdGhlIHdpZGdldCB0byB1c2UgdGhlIHN0eWxlIGZvcgorCitSZXR1cm5zIGEgc3RyaW5nIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgc29mdGVuZWQgY29sb3VyCisiIiIKK2RlZiBzb2Z0ZW5fY29sb3Iod2lkZ2V0LCBzdGF0ZT1ndGsuU1RBVEVfTk9STUFMKToKKyAgICAjIHRoaXMgY29sb3VyIG11bmdpbmcgcm91dGluZSBpcyBoZWF2aWx5IGluc3BpcmVkIGJ1IGdkdV91dGlsX2dldF9taXhfY29sb3IoKQorICAgICMgZnJvbSBnbm9tZS1kaXNrLXV0aWxpdHk6CisgICAgIyBodHRwOi8vZ2l0Lmdub21lLm9yZy9icm93c2UvZ25vbWUtZGlzay11dGlsaXR5L3RyZWUvc3JjL2dkdS1ndGsvZ2R1LWd0ay5jP2g9Z25vbWUtMy0wCisgICAgYmxlbmQgPSAwLjcKKyAgICBzdHlsZSA9IHdpZGdldC5nZXRfc3R5bGUoKQorICAgIGNvbG9yID0gc3R5bGUudGV4dFtzdGF0ZV0KKyAgICBjb2xvci5yZWQgPSBjb2xvci5yZWQgKiBibGVuZCArIHN0eWxlLmJhc2Vbc3RhdGVdLnJlZCAqICgxLjAgLSBibGVuZCkKKyAgICBjb2xvci5ncmVlbiA9IGNvbG9yLmdyZWVuICogYmxlbmQgKyBzdHlsZS5iYXNlW3N0YXRlXS5ncmVlbiAqICgxLjAgLSBibGVuZCkKKyAgICBjb2xvci5ibHVlID0gY29sb3IuYmx1ZSAqIGJsZW5kICsgc3R5bGUuYmFzZVtzdGF0ZV0uYmx1ZSAqICgxLjAgLSBibGVuZCkKKyAgICByZXR1cm4gY29sb3IudG9fc3RyaW5nKCkKKworY2xhc3MgQmFzZUhvYkJ1dHRvbihndGsuQnV0dG9uKToKKyAgICAiIiIKKyAgICBBIGd0ay5CdXR0b24gc3ViY2xhc3Mgd2hpY2ggZm9sbG93cyB0aGUgdmlzdWFsIGRlc2lnbiBvZiBIb2IgZm9yIHByaW1hcnkKKyAgICBhY3Rpb24gYnV0dG9ucworCisgICAgbGFiZWw6IHRoZSB0ZXh0IHRvIGRpc3BsYXkgYXMgdGhlIGJ1dHRvbidzIGxhYmVsCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxhYmVsKToKKyAgICAgICAgZ3RrLkJ1dHRvbi5fX2luaXRfXyhzZWxmLCBsYWJlbCkKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihzZWxmKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzdHlsZV9idXR0b24oYnV0dG9uKToKKyAgICAgICAgc3R5bGUgPSBidXR0b24uZ2V0X3N0eWxlKCkKKyAgICAgICAgc3R5bGUgPSBndGsucmNfZ2V0X3N0eWxlX2J5X3BhdGhzKGd0ay5zZXR0aW5nc19nZXRfZGVmYXVsdCgpLCAnZ3RrLWJ1dHRvbicsICdndGstYnV0dG9uJywgZ29iamVjdC5UWVBFX05PTkUpCisKKyAgICAgICAgYnV0dG9uLnNldF9mbGFncyhndGsuQ0FOX0RFRkFVTFQpCisgICAgICAgIGJ1dHRvbi5ncmFiX2RlZmF1bHQoKQorCisjICAgICAgICBsYWJlbCA9ICI8c3BhbiBzaXplPSd4LWxhcmdlJz48Yj4lczwvYj48L3NwYW4+IiAlIGdvYmplY3QubWFya3VwX2VzY2FwZV90ZXh0KGJ1dHRvbi5nZXRfbGFiZWwoKSkKKyAgICAgICAgbGFiZWwgPSBidXR0b24uZ2V0X2xhYmVsKCkKKyAgICAgICAgYnV0dG9uLnNldF9sYWJlbChsYWJlbCkKKyAgICAgICAgYnV0dG9uLmNoaWxkLnNldF91c2VfbWFya3VwKFRydWUpCisKK2NsYXNzIEhvYkJ1dHRvbihCYXNlSG9iQnV0dG9uKToKKyAgICAiIiIKKyAgICBBIGd0ay5CdXR0b24gc3ViY2xhc3Mgd2hpY2ggZm9sbG93cyB0aGUgdmlzdWFsIGRlc2lnbiBvZiBIb2IgZm9yIHByaW1hcnkKKyAgICBhY3Rpb24gYnV0dG9ucworCisgICAgbGFiZWw6IHRoZSB0ZXh0IHRvIGRpc3BsYXkgYXMgdGhlIGJ1dHRvbidzIGxhYmVsCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxhYmVsKToKKyAgICAgICAgQmFzZUhvYkJ1dHRvbi5fX2luaXRfXyhzZWxmLCBsYWJlbCkKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihzZWxmKQorCitjbGFzcyBIb2JBbHRCdXR0b24oQmFzZUhvYkJ1dHRvbik6CisgICAgIiIiCisgICAgQSBndGsuQnV0dG9uIHN1YmNsYXNzIHdoaWNoIGhhcyBubyByZWxpZWYsIGFuZCBzbyBpcyBtb3JlIGRpc2NyZXRlCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxhYmVsKToKKyAgICAgICAgQmFzZUhvYkJ1dHRvbi5fX2luaXRfXyhzZWxmLCBsYWJlbCkKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihzZWxmKQorCisgICAgIiIiCisgICAgQSBjYWxsYmFjayBmb3IgdGhlIHN0YXRlLWNoYW5nZWQgZXZlbnQgdG8gZW5zdXJlIHRoZSB0ZXh0IGlzIGRpc3BsYXllZAorICAgIGRpZmZlcmVudGx5IHdoZW4gdGhlIHdpZGdldCBpcyBub3Qgc2Vuc2l0aXZlCisgICAgIiIiCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBkZXNlbnNpdGlzZV9vbl9zdGF0ZV9jaGFuZ2VfY2IoYnV0dG9uLCBzdGF0ZSk6CisgICAgICAgIGlmIG5vdCBidXR0b24uZ2V0X3Byb3BlcnR5KCJzZW5zaXRpdmUiKToKKyAgICAgICAgICAgIEhvYkFsdEJ1dHRvbi5zZXRfdGV4dChidXR0b24sIEZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgSG9iQWx0QnV0dG9uLnNldF90ZXh0KGJ1dHRvbiwgVHJ1ZSkKKworICAgICIiIgorICAgIFNldCB0aGUgYnV0dG9uIGxhYmVsIHdpdGggYW4gYXBwcm9wcmlhdGUgY29sb3VyIGZvciB0aGUgY3VycmVudCB3aWRnZXQgc3RhdGUKKyAgICAiIiIKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNldF90ZXh0KGJ1dHRvbiwgc2Vuc2l0aXZlPVRydWUpOgorICAgICAgICBpZiBzZW5zaXRpdmU6CisgICAgICAgICAgICBjb2xvdXIgPSBIb2JDb2xvcnMuUEFMRV9CTFVFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb2xvdXIgPSBIb2JDb2xvcnMuTElHSFRfR1JBWQorICAgICAgICBidXR0b24uc2V0X2xhYmVsKCI8c3BhbiBzaXplPSdsYXJnZScgY29sb3I9JyVzJz48Yj4lczwvYj48L3NwYW4+IiAlIChjb2xvdXIsIGdvYmplY3QubWFya3VwX2VzY2FwZV90ZXh0KGJ1dHRvbi50ZXh0KSkpCisgICAgICAgIGJ1dHRvbi5jaGlsZC5zZXRfdXNlX21hcmt1cChUcnVlKQorCitjbGFzcyBIb2JJbWFnZUJ1dHRvbihndGsuQnV0dG9uKToKKyAgICAiIiIKKyAgICBBIGd0ay5CdXR0b24gd2l0aCBhbiBpY29uIGFuZCB0d28gcm93cyBvZiB0ZXh0LCB0aGUgc2Vjb25kIG9mIHdoaWNoIGlzCisgICAgZGlzcGxheWVkIGluIGEgYmxlbmRlZCBjb2xvdXIuCisKKyAgICBwcmltYXJ5X3RleHQ6IHRoZSBtYWluIGJ1dHRvbiBsYWJlbAorICAgIHNlY29uZGFyeV90ZXh0OiBvcHRpb25hbCBzZWNvbmQgbGluZSBvZiB0ZXh0CisgICAgaWNvbl9wYXRoOiBwYXRoIHRvIHRoZSBpY29uIGZpbGUgdG8gZGlzcGxheSBvbiB0aGUgYnV0dG9uCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByaW1hcnlfdGV4dCwgc2Vjb25kYXJ5X3RleHQ9IiIsIGljb25fcGF0aD0iIiwgaG92ZXJfaWNvbl9wYXRoPSIiKToKKyAgICAgICAgZ3RrLkJ1dHRvbi5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnNldF9yZWxpZWYoZ3RrLlJFTElFRl9OT05FKQorCisgICAgICAgIHNlbGYuaWNvbl9wYXRoID0gaWNvbl9wYXRoCisgICAgICAgIHNlbGYuaG92ZXJfaWNvbl9wYXRoID0gaG92ZXJfaWNvbl9wYXRoCisKKyAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlLCAxMCkKKyAgICAgICAgaGJveC5zaG93KCkKKyAgICAgICAgc2VsZi5hZGQoaGJveCkKKyAgICAgICAgc2VsZi5pY29uID0gZ3RrLkltYWdlKCkKKyAgICAgICAgc2VsZi5pY29uLnNldF9mcm9tX2ZpbGUoc2VsZi5pY29uX3BhdGgpCisgICAgICAgIHNlbGYuaWNvbi5zZXRfYWxpZ25tZW50KDAuNSwgMC4wKQorICAgICAgICBzZWxmLmljb24uc2hvdygpCisgICAgICAgIGlmIHNlbGYuaG92ZXJfaWNvbl9wYXRoIGFuZCBsZW4oc2VsZi5ob3Zlcl9pY29uX3BhdGgpOgorICAgICAgICAgICAgc2VsZi5jb25uZWN0KCJlbnRlci1ub3RpZnktZXZlbnQiLCBzZWxmLnNldF9ob3Zlcl9pY29uX2NiKQorICAgICAgICAgICAgc2VsZi5jb25uZWN0KCJsZWF2ZS1ub3RpZnktZXZlbnQiLCBzZWxmLnNldF9pY29uX2NiKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQoc2VsZi5pY29uLCBGYWxzZSwgRmFsc2UsIDApCisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKKyAgICAgICAgY29sb3VyID0gc29mdGVuX2NvbG9yKGxhYmVsKQorICAgICAgICBtYXJrID0gIjxzcGFuIHNpemU9J3gtbGFyZ2UnPiVzPC9zcGFuPlxuPHNwYW4gc2l6ZT0nbWVkaXVtJyBmZ2NvbG9yPSclcycgd2VpZ2h0PSd1bHRyYWxpZ2h0Jz4lczwvc3Bhbj4iICUgKHByaW1hcnlfdGV4dCwgY29sb3VyLCBzZWNvbmRhcnlfdGV4dCkKKyAgICAgICAgbGFiZWwuc2V0X21hcmt1cChtYXJrKQorICAgICAgICBsYWJlbC5zaG93KCkKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGxhYmVsLCBUcnVlLCBUcnVlLCAwKQorCisgICAgZGVmIHNldF9ob3Zlcl9pY29uX2NiKHNlbGYsIHdpZGdldCwgZXZlbnQpOgorICAgICAgICBzZWxmLmljb24uc2V0X2Zyb21fZmlsZShzZWxmLmhvdmVyX2ljb25fcGF0aCkKKworICAgIGRlZiBzZXRfaWNvbl9jYihzZWxmLCB3aWRnZXQsIGV2ZW50KToKKyAgICAgICAgc2VsZi5pY29uLnNldF9mcm9tX2ZpbGUoc2VsZi5pY29uX3BhdGgpCisKK2NsYXNzIEhvYkluZm9CdXR0b24oZ3RrLkV2ZW50Qm94KToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBidXR0b24tbGlrZSB3aWRnZXQgcGVyIHRoZSBIb2IgdmlzdWFsIGFuZCBVWCBkZXNpZ25zCisgICAgd2hpY2ggd2lsbCBkaXNwbGF5IGEgcGVyc2lzdGVudCB0b29sdGlwLCB3aXRoIHRoZSBjb250ZW50cyBvZiB0aXBfbWFya3VwLCB3aGVuCisgICAgY2xpY2tlZC4KKworICAgIHRpcF9tYXJrdXA6IHRoZSBQYW5nbyBNYXJrdXAgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBwZXJzaXN0ZW50IHRvb2x0aXAKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGlwX21hcmt1cCwgcGFyZW50PU5vbmUpOgorICAgICAgICBndGsuRXZlbnRCb3guX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5pbWFnZSA9IGd0ay5JbWFnZSgpCisgICAgICAgIHNlbGYuaW1hZ2Uuc2V0X2Zyb21fZmlsZSgKKyAgICAgICAgaGljLklDT05fSU5GT19ESVNQTEFZX0ZJTEUpCisgICAgICAgIHNlbGYuaW1hZ2Uuc2hvdygpCisgICAgICAgIHNlbGYuYWRkKHNlbGYuaW1hZ2UpCisgICAgICAgIHNlbGYudGlwX21hcmt1cCA9IHRpcF9tYXJrdXAKKyAgICAgICAgc2VsZi5teV9wYXJlbnQgPSBwYXJlbnQKKworICAgICAgICBzZWxmLnNldF9ldmVudHMoZ3RrLmdkay5CVVRUT05fUkVMRUFTRSB8CisgICAgICAgICAgICAgICAgICAgICAgICBndGsuZ2RrLkVOVEVSX05PVElGWV9NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGd0ay5nZGsuTEVBVkVfTk9USUZZX01BU0spCisKKyAgICAgICAgc2VsZi5jb25uZWN0KCJidXR0b24tcmVsZWFzZS1ldmVudCIsIHNlbGYuYnV0dG9uX3JlbGVhc2VfY2IpCisgICAgICAgIHNlbGYuY29ubmVjdCgiZW50ZXItbm90aWZ5LWV2ZW50Iiwgc2VsZi5tb3VzZV9pbl9jYikKKyAgICAgICAgc2VsZi5jb25uZWN0KCJsZWF2ZS1ub3RpZnktZXZlbnQiLCBzZWxmLm1vdXNlX291dF9jYikKKworICAgICIiIgorICAgIFdoZW4gdGhlIG1vdXNlIGNsaWNrIGlzIHJlbGVhc2VkIGVtdWxhdGUgYSBidXR0b24tY2xpY2sgYW5kIHNob3cgdGhlIGFzc29jaWF0ZWQKKyAgICBQZXJzaXN0ZW50VG9vbHRpcAorICAgICIiIgorICAgIGRlZiBidXR0b25fcmVsZWFzZV9jYihzZWxmLCB3aWRnZXQsIGV2ZW50KToKKyAgICAgICAgZnJvbSBiYi51aS5jcnVtYnMuaGlnLnByb3BlcnR5ZGlhbG9nIGltcG9ydCBQcm9wZXJ0eURpYWxvZworICAgICAgICBzZWxmLmRpYWxvZyA9IFByb3BlcnR5RGlhbG9nKHRpdGxlID0gJycsCisgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHNlbGYubXlfcGFyZW50LAorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiA9IHNlbGYudGlwX21hcmt1cCwKKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgZ3RrLkRJQUxPR19OT19TRVBBUkFUT1IpCisKKyAgICAgICAgYnV0dG9uID0gc2VsZi5kaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfQ0FOQ0VMKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBsYW1iZGEgdzogc2VsZi5kaWFsb2cuZGVzdHJveSgpKQorICAgICAgICBzZWxmLmRpYWxvZy5zaG93X2FsbCgpCisgICAgICAgIHNlbGYuZGlhbG9nLnJ1bigpCisKKyAgICAiIiIKKyAgICBDaGFuZ2UgdG8gdGhlIHByZWxpZ2h0IGltYWdlIHdoZW4gdGhlIG1vdXNlIGVudGVycyB0aGUgd2lkZ2V0CisgICAgIiIiCisgICAgZGVmIG1vdXNlX2luX2NiKHNlbGYsIHdpZGdldCwgZXZlbnQpOgorICAgICAgICBzZWxmLmltYWdlLnNldF9mcm9tX2ZpbGUoaGljLklDT05fSU5GT19IT1ZFUl9GSUxFKQorCisgICAgIiIiCisgICAgQ2hhbmdlIHRvIHRoZSBzdG9jayBpbWFnZSB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgdGhlIHdpZGdldAorICAgICIiIgorICAgIGRlZiBtb3VzZV9vdXRfY2Ioc2VsZiwgd2lkZ2V0LCBldmVudCk6CisgICAgICAgIHNlbGYuaW1hZ2Uuc2V0X2Zyb21fZmlsZShoaWMuSUNPTl9JTkZPX0RJU1BMQVlfRklMRSkKKworY2xhc3MgSG9iSW5kaWNhdG9yKGd0ay5EcmF3aW5nQXJlYSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvdW50KToKKyAgICAgICAgZ3RrLkRyYXdpbmdBcmVhLl9faW5pdF9fKHNlbGYpCisgICAgICAgICMgU2V0IG5vIHdpbmRvdyBmb3IgdHJhbnNwYXJlbnQgYmFja2dyb3VuZAorICAgICAgICBzZWxmLnNldF9oYXNfd2luZG93KEZhbHNlKQorICAgICAgICBzZWxmLnNldF9zaXplX3JlcXVlc3QoMzgsMzgpCisgICAgICAgICMgV2UgbmVlZCB0byBwYXNzIHRocm91Z2ggYnV0dG9uIGNsaWNrcworICAgICAgICBzZWxmLmFkZF9ldmVudHMoZ3RrLmdkay5CVVRUT05fUFJFU1NfTUFTSyB8IGd0ay5nZGsuQlVUVE9OX1JFTEVBU0VfTUFTSykKKworICAgICAgICBzZWxmLmNvbm5lY3QoJ2V4cG9zZS1ldmVudCcsIHNlbGYuZXhwb3NlKQorCisgICAgICAgIHNlbGYuY291bnQgPSBjb3VudAorICAgICAgICBzZWxmLmNvbG9yID0gSG9iQ29sb3JzLkdSQVkKKworICAgIGRlZiBleHBvc2Uoc2VsZiwgd2lkZ2V0LCBldmVudCk6CisgICAgICAgIGlmIHNlbGYuY291bnQgYW5kIHNlbGYuY291bnQgPiAwOgorICAgICAgICAgICAgY3R4ID0gd2lkZ2V0LndpbmRvdy5jYWlyb19jcmVhdGUoKQorCisgICAgICAgICAgICB4LCB5LCB3LCBoID0gc2VsZi5hbGxvY2F0aW9uCisKKyAgICAgICAgICAgIGN0eC5zZXRfb3BlcmF0b3IoY2Fpcm8uT1BFUkFUT1JfT1ZFUikKKyAgICAgICAgICAgIGN0eC5zZXRfc291cmNlX2NvbG9yKGd0ay5nZGsuY29sb3JfcGFyc2Uoc2VsZi5jb2xvcikpCisgICAgICAgICAgICBjdHgudHJhbnNsYXRlKHcvMiwgaC8yKQorICAgICAgICAgICAgY3R4LmFyYyh4LCB5LCBtaW4odyxoKS8yIC0gMiwgMCwgMiptYXRoLnBpKQorICAgICAgICAgICAgY3R4LmZpbGxfcHJlc2VydmUoKQorCisgICAgICAgICAgICBsYXlvdXQgPSBzZWxmLmNyZWF0ZV9wYW5nb19sYXlvdXQoc3RyKHNlbGYuY291bnQpKQorICAgICAgICAgICAgdGV4dHcsIHRleHRoID0gbGF5b3V0LmdldF9waXhlbF9zaXplKCkKKyAgICAgICAgICAgIHggPSAody8yKS0odGV4dHcvMikgKyB4CisgICAgICAgICAgICB5ID0gKGgvMikgLSAodGV4dGgvMikgKyB5CisgICAgICAgICAgICBjdHgubW92ZV90byh4LCB5KQorICAgICAgICAgICAgc2VsZi53aW5kb3cuZHJhd19sYXlvdXQoc2VsZi5zdHlsZS5saWdodF9nY1tndGsuU1RBVEVfTk9STUFMXSwgaW50KHgpLCBpbnQoeSksIGxheW91dCkKKworICAgIGRlZiBzZXRfY291bnQoc2VsZiwgY291bnQpOgorICAgICAgICBzZWxmLmNvdW50ID0gY291bnQKKworICAgIGRlZiBzZXRfYWN0aXZlKHNlbGYsIGFjdGl2ZSk6CisgICAgICAgIGlmIGFjdGl2ZToKKyAgICAgICAgICAgIHNlbGYuY29sb3IgPSBIb2JDb2xvcnMuREVFUF9SRUQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY29sb3IgPSBIb2JDb2xvcnMuR1JBWQorCitjbGFzcyBIb2JUYWJMYWJlbChndGsuSEJveCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQsIGNvdW50PTApOgorICAgICAgICBndGsuSEJveC5fX2luaXRfXyhzZWxmLCBGYWxzZSwgMCkKKyAgICAgICAgc2VsZi5pbmRpY2F0b3IgPSBIb2JJbmRpY2F0b3IoY291bnQpCisgICAgICAgIHNlbGYuaW5kaWNhdG9yLnNob3coKQorICAgICAgICBzZWxmLnBhY2tfZW5kKHNlbGYuaW5kaWNhdG9yLCBGYWxzZSwgRmFsc2UpCisgICAgICAgIHNlbGYubGJsID0gZ3RrLkxhYmVsKHRleHQpCisgICAgICAgIHNlbGYubGJsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIHNlbGYubGJsLnNob3coKQorICAgICAgICBzZWxmLnBhY2tfZW5kKHNlbGYubGJsLCBUcnVlLCBUcnVlLCA2KQorCisgICAgZGVmIHNldF9jb3VudChzZWxmLCBjb3VudCk6CisgICAgICAgIHNlbGYuaW5kaWNhdG9yLnNldF9jb3VudChjb3VudCkKKworICAgIGRlZiBzZXRfYWN0aXZlKHNlbGYsIGFjdGl2ZT1UcnVlKToKKyAgICAgICAgc2VsZi5pbmRpY2F0b3Iuc2V0X2FjdGl2ZShhY3RpdmUpCisKK2NsYXNzIEhvYk5vdGVib29rKGd0ay5Ob3RlYm9vayk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBndGsuTm90ZWJvb2suX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zZXRfcHJvcGVydHkoJ2hvbW9nZW5lb3VzJywgVHJ1ZSkKKworICAgICAgICBzZWxmLnBhZ2VzID0gW10KKworICAgICAgICBzZWxmLnNlYXJjaCA9IE5vbmUKKyAgICAgICAgc2VsZi5zZWFyY2hfZm9jdXMgPSBGYWxzZQorICAgICAgICBzZWxmLnBhZ2VfY2hhbmdlZCA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5jb25uZWN0KCJzd2l0Y2gtcGFnZSIsIHNlbGYucGFnZV9jaGFuZ2VkX2NiKQorCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIHBhZ2VfY2hhbmdlZF9jYihzZWxmLCBuYiwgcGFnZSwgcGFnZV9udW0pOgorICAgICAgICBmb3IgcCwgbGJsIGluIGVudW1lcmF0ZShzZWxmLnBhZ2VzKToKKyAgICAgICAgICAgIGlmIHAgPT0gcGFnZV9udW06CisgICAgICAgICAgICAgICAgbGJsLnNldF9hY3RpdmUoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsYmwuc2V0X2FjdGl2ZShGYWxzZSkKKworICAgICAgICBpZiBzZWxmLnNlYXJjaDoKKyAgICAgICAgICAgIHNlbGYucGFnZV9jaGFuZ2VkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5yZXNldF9lbnRyeShzZWxmLnNlYXJjaCwgcGFnZV9udW0pCisKKyAgICBkZWYgYXBwZW5kX3BhZ2Uoc2VsZiwgY2hpbGQsIHRhYl9sYWJlbCwgdGFiX3Rvb2x0aXA9Tm9uZSk6CisgICAgICAgIGxhYmVsID0gSG9iVGFiTGFiZWwodGFiX2xhYmVsKQorICAgICAgICBpZiB0YWJfdG9vbHRpcDoKKyAgICAgICAgICAgIGxhYmVsLnNldF90b29sdGlwX3RleHQodGFiX3Rvb2x0aXApCisgICAgICAgIGxhYmVsLnNldF9hY3RpdmUoRmFsc2UpCisgICAgICAgIHNlbGYucGFnZXMuYXBwZW5kKGxhYmVsKQorICAgICAgICBndGsuTm90ZWJvb2suYXBwZW5kX3BhZ2Uoc2VsZiwgY2hpbGQsIGxhYmVsKQorCisgICAgZGVmIHNldF9lbnRyeShzZWxmLCBuYW1lcywgdGlwcyk6CisgICAgICAgIHNlbGYuc2VhcmNoID0gZ3RrLkVudHJ5KCkKKyAgICAgICAgc2VsZi5zZWFyY2hfbmFtZXMgPSBuYW1lcworICAgICAgICBzZWxmLnNlYXJjaF90aXBzID0gdGlwcworICAgICAgICBzdHlsZSA9IHNlbGYuc2VhcmNoLmdldF9zdHlsZSgpCisgICAgICAgIHN0eWxlLnRleHRbZ3RrLlNUQVRFX05PUk1BTF0gPSBzZWxmLmdldF9jb2xvcm1hcCgpLmFsbG9jX2NvbG9yKEhvYkNvbG9ycy5HUkFZLCBGYWxzZSwgRmFsc2UpCisgICAgICAgIHNlbGYuc2VhcmNoLnNldF9zdHlsZShzdHlsZSkKKyAgICAgICAgc2VsZi5zZWFyY2guc2V0X3RleHQobmFtZXNbMF0pCisgICAgICAgIHNlbGYuc2VhcmNoLnNldF90b29sdGlwX3RleHQoc2VsZi5zZWFyY2hfdGlwc1swXSkKKyAgICAgICAgc2VsZi5zZWFyY2gucHJvcHMuaGFzX3Rvb2x0aXAgPSBUcnVlCisKKyAgICAgICAgc2VsZi5zZWFyY2guc2V0X2VkaXRhYmxlKEZhbHNlKQorICAgICAgICBzZWxmLnNlYXJjaC5zZXRfaWNvbl9mcm9tX3N0b2NrKGd0ay5FTlRSWV9JQ09OX1NFQ09OREFSWSwgZ3RrLlNUT0NLX0NMRUFSKQorICAgICAgICBzZWxmLnNlYXJjaC5zZXRfaWNvbl9zZW5zaXRpdmUoZ3RrLkVOVFJZX0lDT05fU0VDT05EQVJZLCBGYWxzZSkKKyAgICAgICAgc2VsZi5zZWFyY2guY29ubmVjdCgiaWNvbi1yZWxlYXNlIiwgc2VsZi5zZXRfc2VhcmNoX2VudHJ5X2NsZWFyX2NiKQorICAgICAgICBzZWxmLnNlYXJjaC5zZXRfd2lkdGhfY2hhcnMoMzApCisgICAgICAgIHNlbGYuc2VhcmNoLnNob3coKQorCisgICAgICAgIHNlbGYuc2VhcmNoLmNvbm5lY3QoImZvY3VzLWluLWV2ZW50Iiwgc2VsZi5zZXRfc2VhcmNoX2VudHJ5X2VkaXRhYmxlX2NiKQorICAgICAgICBzZWxmLnNlYXJjaC5jb25uZWN0KCJmb2N1cy1vdXQtZXZlbnQiLCBzZWxmLnNldF9zZWFyY2hfZW50cnlfcmVzZXRfY2IpCisgICAgICAgIHNlbGYuc2V0X2FjdGlvbl93aWRnZXQoc2VsZi5zZWFyY2gsIGd0ay5QQUNLX0VORCkKKworICAgIGRlZiBzaG93X2luZGljYXRvcl9pY29uKHNlbGYsIHRpdGxlLCBudW1iZXIpOgorICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5wYWdlczoKKyAgICAgICAgICAgIGlmIGNoaWxkLmxibC5nZXRfbGFiZWwoKSA9PSB0aXRsZToKKyAgICAgICAgICAgICAgICBjaGlsZC5zZXRfY291bnQobnVtYmVyKQorCisgICAgZGVmIGhpZGVfaW5kaWNhdG9yX2ljb24oc2VsZiwgdGl0bGUpOgorICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5wYWdlczoKKyAgICAgICAgICAgIGlmIGNoaWxkLmxibC5nZXRfbGFiZWwoKSA9PSB0aXRsZToKKyAgICAgICAgICAgICAgICBjaGlsZC5zZXRfY291bnQoMCkKKworICAgIGRlZiBzZXRfc2VhcmNoX2VudHJ5X2VkaXRhYmxlX2NiKHNlbGYsIHNlYXJjaCwgZXZlbnQpOgorICAgICAgICBzZWxmLnNlYXJjaF9mb2N1cyA9IFRydWUKKyAgICAgICAgc2VhcmNoLnNldF9lZGl0YWJsZShUcnVlKQorICAgICAgICB0ZXh0ID0gc2VhcmNoLmdldF90ZXh0KCkKKyAgICAgICAgaWYgdGV4dCBpbiBzZWxmLnNlYXJjaF9uYW1lczoKKyAgICAgICAgICAgIHNlYXJjaC5zZXRfdGV4dCgiIikKKyAgICAgICAgc3R5bGUgPSBzZWxmLnNlYXJjaC5nZXRfc3R5bGUoKQorICAgICAgICBzdHlsZS50ZXh0W2d0ay5TVEFURV9OT1JNQUxdID0gc2VsZi5nZXRfY29sb3JtYXAoKS5hbGxvY19jb2xvcihIb2JDb2xvcnMuQkxBQ0ssIEZhbHNlLCBGYWxzZSkKKyAgICAgICAgc2VhcmNoLnNldF9zdHlsZShzdHlsZSkKKworICAgIGRlZiBzZXRfc2VhcmNoX2VudHJ5X3Jlc2V0X2NiKHNlbGYsIHNlYXJjaCwgZXZlbnQpOgorICAgICAgICBwYWdlX251bSA9IHNlbGYuZ2V0X2N1cnJlbnRfcGFnZSgpCisgICAgICAgIHRleHQgPSBzZWFyY2guZ2V0X3RleHQoKQorICAgICAgICBpZiBub3QgdGV4dDoKKyAgICAgICAgICAgIHNlbGYucmVzZXRfZW50cnkoc2VhcmNoLCBwYWdlX251bSkKKworICAgIGRlZiByZXNldF9lbnRyeShzZWxmLCBlbnRyeSwgcGFnZV9udW0pOgorICAgICAgICBzdHlsZSA9IGVudHJ5LmdldF9zdHlsZSgpCisgICAgICAgIHN0eWxlLnRleHRbZ3RrLlNUQVRFX05PUk1BTF0gPSBzZWxmLmdldF9jb2xvcm1hcCgpLmFsbG9jX2NvbG9yKEhvYkNvbG9ycy5HUkFZLCBGYWxzZSwgRmFsc2UpCisgICAgICAgIGVudHJ5LnNldF9zdHlsZShzdHlsZSkKKyAgICAgICAgZW50cnkuc2V0X3RleHQoc2VsZi5zZWFyY2hfbmFtZXNbcGFnZV9udW1dKQorICAgICAgICBlbnRyeS5zZXRfdG9vbHRpcF90ZXh0KHNlbGYuc2VhcmNoX3RpcHNbcGFnZV9udW1dKQorICAgICAgICBlbnRyeS5zZXRfZWRpdGFibGUoRmFsc2UpCisgICAgICAgIGVudHJ5LnNldF9pY29uX3NlbnNpdGl2ZShndGsuRU5UUllfSUNPTl9TRUNPTkRBUlksIEZhbHNlKQorCisgICAgZGVmIHNldF9zZWFyY2hfZW50cnlfY2xlYXJfY2Ioc2VsZiwgc2VhcmNoLCBpY29uX3BvcywgZXZlbnQpOgorICAgICAgICBpZiBzZWFyY2guZ2V0X2VkaXRhYmxlKCkgPT0gVHJ1ZToKKyAgICAgICAgICAgIHNlYXJjaC5zZXRfdGV4dCgiIikKKyAgICAgICAgc2VhcmNoLnNldF9pY29uX3NlbnNpdGl2ZShndGsuRU5UUllfSUNPTl9TRUNPTkRBUlksIEZhbHNlKQorICAgICAgICBzZWFyY2guZ3JhYl9mb2N1cygpCisKKyAgICBkZWYgc2V0X3BhZ2Uoc2VsZiwgdGl0bGUpOgorICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5wYWdlczoKKyAgICAgICAgICAgIGlmIGNoaWxkLmxibC5nZXRfbGFiZWwoKSA9PSB0aXRsZToKKyAgICAgICAgICAgICAgICBjaGlsZC5ncmFiX2ZvY3VzKCkKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9jdXJyZW50X3BhZ2Uoc2VsZi5wYWdlcy5pbmRleChjaGlsZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKK2NsYXNzIEhvYldhcnBDZWxsUmVuZGVyZXJUZXh0KGd0ay5DZWxsUmVuZGVyZXJUZXh0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29sX251bWJlcik6CisgICAgICAgIGd0ay5DZWxsUmVuZGVyZXJUZXh0Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuc2V0X3Byb3BlcnR5KCJ3cmFwLW1vZGUiLCBwYW5nby5XUkFQX1dPUkRfQ0hBUikKKyAgICAgICAgc2VsZi5zZXRfcHJvcGVydHkoIndyYXAtd2lkdGgiLCAzMDApICMgZGVmYXVsdCB2YWx1ZSB3cmFwIHdpZHRoIGlzIDMwMAorICAgICAgICBzZWxmLmNvbF9uID0gY29sX251bWJlcgorCisgICAgZGVmIGRvX3JlbmRlcihzZWxmLCB3aW5kb3csIHdpZGdldCwgYmFja2dyb3VuZF9hcmVhLCBjZWxsX2FyZWEsIGV4cG9zZV9hcmVhLCBmbGFncyk6CisgICAgICAgIGlmIHdpZGdldDoKKyAgICAgICAgICAgIHNlbGYucHJvcHMud3JhcF93aWR0aCA9IHNlbGYuZ2V0X3Jlc2l6ZWRfd3JhcF93aWR0aCh3aWRnZXQsIHdpZGdldC5nZXRfY29sdW1uKHNlbGYuY29sX24pKQorICAgICAgICByZXR1cm4gZ3RrLkNlbGxSZW5kZXJlclRleHQuZG9fcmVuZGVyKHNlbGYsIHdpbmRvdywgd2lkZ2V0LCBiYWNrZ3JvdW5kX2FyZWEsIGNlbGxfYXJlYSwgZXhwb3NlX2FyZWEsIGZsYWdzKQorCisgICAgZGVmIGdldF9yZXNpemVkX3dyYXBfd2lkdGgoc2VsZiwgdHJlZXZpZXcsIGNvbHVtbik6CisgICAgICAgIG90aGVyQ29scyA9IFtdCisgICAgICAgIGZvciBjb2wgaW4gdHJlZXZpZXcuZ2V0X2NvbHVtbnMoKToKKyAgICAgICAgICAgIGlmIGNvbCAhPSBjb2x1bW46CisgICAgICAgICAgICAgICAgb3RoZXJDb2xzLmFwcGVuZChjb2wpCisgICAgICAgIGFkandpZHRoID0gdHJlZXZpZXcuYWxsb2NhdGlvbi53aWR0aCAtIHN1bShjLmdldF93aWR0aCgpIGZvciBjIGluIG90aGVyQ29scykKKyAgICAgICAgYWRqd2lkdGggLT0gdHJlZXZpZXcuc3R5bGVfZ2V0X3Byb3BlcnR5KCJob3Jpem9udGFsLXNlcGFyYXRvciIpICogNAorICAgICAgICBpZiBzZWxmLnByb3BzLndyYXBfd2lkdGggPT0gYWRqd2lkdGggb3IgYWRqd2lkdGggPD0gMDoKKyAgICAgICAgICAgICAgICBhZGp3aWR0aCA9IHNlbGYucHJvcHMud3JhcF93aWR0aAorICAgICAgICByZXR1cm4gYWRqd2lkdGgKKworZ29iamVjdC50eXBlX3JlZ2lzdGVyKEhvYldhcnBDZWxsUmVuZGVyZXJUZXh0KQorCitjbGFzcyBIb2JJY29uQ2hlY2tlcihoaWMpOgorICAgIGRlZiBzZXRfaG9iX2ljb25fdG9fc3RvY2tfaWNvbihzZWxmLCBmaWxlX3BhdGgsIHN0b2NrX2lkPSIiKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGl4YnVmID0gZ3RrLmdkay5waXhidWZfbmV3X2Zyb21fZmlsZShmaWxlX3BhdGgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIHN0b2NrX2lkIGFuZCAoZ3RrLmljb25fZmFjdG9yeV9sb29rdXBfZGVmYXVsdChzdG9ja19pZCkgPT0gTm9uZSk6CisgICAgICAgICAgICBpY29uX2ZhY3RvcnkgPSBndGsuSWNvbkZhY3RvcnkoKQorICAgICAgICAgICAgaWNvbl9mYWN0b3J5LmFkZF9kZWZhdWx0KCkKKyAgICAgICAgICAgIGljb25fZmFjdG9yeS5hZGQoc3RvY2tfaWQsIGd0ay5JY29uU2V0KHBpeGJ1ZikpCisgICAgICAgICAgICBndGsuc3RvY2tfYWRkKFsoc3RvY2tfaWQsICdfbGFiZWwnLCAwLCAwLCAnJyldKQorCisgICAgICAgICAgICByZXR1cm4gaWNvbl9mYWN0b3J5Lmxvb2t1cChzdG9ja19pZCkKKworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIiIiCisgICAgRm9yIG1ha2UgaG9iIGljb24gY29uc2lzdGVudGx5IGJ5IHJlcXVlc3QsIGFuZCBhdm9pZCBpY29uIHZpZXcgZGlmZiBieSBzeXN0ZW0gb3IgZ3RrIHZlcnNpb24sIHdlIHVzZSBzb21lICdob2IgaWNvbicgdG8gcmVwbGFjZSB0aGUgJ2d0ayBpY29uJy4KKyAgICB0aGlzIGZ1bmN0aW9uIGNoZWNrIHRoZSBzdG9ja19pZCBhbmQgbWFrZSBob2JfaWQgdG8gcmVwbGFjZWQgdGhlIGd0a19pZCB0aGVuIHJldHVybiBpdCBvciAiIgorICAgICIiIgorICAgIGRlZiBjaGVja19zdG9ja19pY29uKHNlbGYsIHN0b2NrX25hbWU9IiIpOgorICAgICAgICBIT0JfQ0hFQ0tfU1RPQ0tfTkFNRSA9IHsKKyAgICAgICAgICAgICgnaGljLWRpYWxvZy1pbmZvJywgJ2d0ay1kaWFsb2ctaW5mbycsICdkaWFsb2ctaW5mbycpICAgICAgICAgICA6IHNlbGYuSUNPTl9JTkRJX0lORk9fRklMRSwKKyAgICAgICAgICAgICgnaGljLW9rJywgICAgICAgICAgJ2d0ay1vaycsICAgICAgICAgICAnb2snKSAgICAgICAgICAgICAgICAgICA6IHNlbGYuSUNPTl9JTkRJX1RJQ0tfRklMRSwKKyAgICAgICAgICAgICgnaGljLWRpYWxvZy1lcnJvcicsICdndGstZGlhbG9nLWVycm9yJywgJ2RpYWxvZy1lcnJvcicpICAgICAgICA6IHNlbGYuSUNPTl9JTkRJX0VSUk9SX0ZJTEUsCisgICAgICAgICAgICAoJ2hpYy1kaWFsb2ctd2FybmluZycsICdndGstZGlhbG9nLXdhcm5pbmcnLCAnZGlhbG9nLXdhcm5pbmcnKSAgOiBzZWxmLklDT05fSU5ESV9BTEVSVF9GSUxFLAorICAgICAgICAgICAgKCdoaWMtdGFzay1yZWZyZXNoJywgJ2d0ay1leGVjdXRlJywgJ2V4ZWN1dGUnKSAgICAgICAgICAgICAgICAgIDogc2VsZi5JQ09OX0lORElfUkVGUkVTSF9GSUxFLAorICAgICAgICB9CisgICAgICAgIHZhbGlkX3N0b2NrX2lkID0gc3RvY2tfbmFtZQorICAgICAgICBpZiBzdG9ja19uYW1lOgorICAgICAgICAgICAgZm9yIG5hbWVzLCBwYXRoIGluIEhPQl9DSEVDS19TVE9DS19OQU1FLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIHN0b2NrX25hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHZhbGlkX3N0b2NrX2lkID0gbmFtZXNbMF0KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGd0ay5pY29uX2ZhY3RvcnlfbG9va3VwX2RlZmF1bHQodmFsaWRfc3RvY2tfaWQpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRfaG9iX2ljb25fdG9fc3RvY2tfaWNvbihwYXRoLCB2YWxpZF9zdG9ja19pZCkKKworICAgICAgICByZXR1cm4gdmFsaWRfc3RvY2tfaWQKKworY2xhc3MgSG9iQ2VsbFJlbmRlcmVyQ29udHJvbGxlcihnb2JqZWN0LkdPYmplY3QpOgorICAgIChNT0RFX0NZQ0xFX1JVTk5JTkcsIE1PREVfT05FX1NIT1JUKSA9IHJhbmdlKDIpCisgICAgX19nc2lnbmFsc19fID0geworICAgICAgICAicnVuLXRpbWVyLXN0b3BwZWQiIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgIH0KKyAgICBkZWYgX19pbml0X18oc2VsZiwgcnVubmluZ21vZGU9TU9ERV9DWUNMRV9SVU5OSU5HLCBpc19kcmF3X3Jvdz1GYWxzZSk6CisgICAgICAgIGdvYmplY3QuR09iamVjdC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnRpbWVvdXRfaWQgPSBOb25lCisgICAgICAgIHNlbGYuY3VycmVudF9hbmdsZV9wb3MgPSAwLjAKKyAgICAgICAgc2VsZi5zdGVwX2FuZ2xlID0gMC4wCisgICAgICAgIHNlbGYudHJlZV9oZWFkZXJzX2hlaWdodCA9IDAKKyAgICAgICAgc2VsZi5ydW5uaW5nX2NlbGxfYXJlYXMgPSBbXQorICAgICAgICBzZWxmLnJ1bm5pbmdfbW9kZSA9IHJ1bm5pbmdtb2RlCisgICAgICAgIHNlbGYuaXNfcXVldWVfZHJhd19yb3dfYXJlYSA9IGlzX2RyYXdfcm93CisgICAgICAgIHNlbGYuZm9yY2Vfc3RvcF9lbmFibGUgPSBGYWxzZQorCisgICAgZGVmIGlzX2FjdGl2ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi50aW1lb3V0X2lkOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHJlc2V0X3J1bihzZWxmKToKKyAgICAgICAgc2VsZi5mb3JjZV9zdG9wKCkKKyAgICAgICAgc2VsZi5ydW5uaW5nX2NlbGxfYXJlYXMgPSBbXQorICAgICAgICBzZWxmLmN1cnJlbnRfYW5nbGVfcG9zID0gMC4wCisgICAgICAgIHNlbGYuc3RlcF9hbmdsZSA9IDAuMAorCisgICAgJycnIHRpbWVfaXRlcnZhbDogKDF+MTAwMCltcywgd2hpY2ggd2lsbCBiZSBhcyB0aGUgYmFzaWMgaW50ZXJ2YWwgY291bnQgZm9yIHRpbWVyCisgICAgICAgIGluaXRfdXNyZGF0YTogdGhlIGN1cnJlbnQgZGF0YSB3aGljaCByZWxhdGVkIHRoZSBwcm9ncmVzcy1iYXIgd2lsbCBiZSBhdAorICAgICAgICBtaW5fdXNyZGF0YTogdGhlIHJhbmdlIG9mIG1pbiBvZiB1c2VyIGRhdGEKKyAgICAgICAgbWF4X3VzcmRhdGE6IHRoZSByYW5nZSBvZiBtYXggb2YgdXNlciBkYXRhCisgICAgICAgIHN0ZXA6IGVhY2ggc3RlcCB3aGljaCB5b3Ugd2FudCB0byBwcm9ncmVzcworICAgICAgICBOb3RlOiB0aGUgaW5pdF91c3JkYXRhIHNob3VsZCBpbiB0aGUgcmFuZ2Ugb2YgZnJvbSBtaW4gdG8gbWF4LCBhbmQgbWF4IHNob3VsZCA+IG1pbgorICAgICAgICAgICAgIHN0ZXAgc2hvdWxkIDwgKG1heCAtIG1pbikKKyAgICAnJycKKyAgICBkZWYgc3RhcnRfcnVuKHNlbGYsIHRpbWVfaXRlcnZhbCwgaW5pdF91c3JkYXRhLCBtaW5fdXNyZGF0YSwgbWF4X3VzcmRhdGEsIHN0ZXAsIHRyZWUpOgorICAgICAgICBpZiAobm90IHRpbWVfaXRlcnZhbCkgb3IgKG5vdCBtYXhfdXNyZGF0YSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdXNyX3JhbmdlID0gKG1heF91c3JkYXRhIC0gbWluX3VzcmRhdGEpICogMS4wCisgICAgICAgIHNlbGYuY3VycmVudF9hbmdsZV9wb3MgPSAoaW5pdF91c3JkYXRhICogMS4wKSAvIHVzcl9yYW5nZQorICAgICAgICBzZWxmLnN0ZXBfYW5nbGUgPSAoc3RlcCAqIDEpIC8gdXNyX3JhbmdlCisgICAgICAgIHNlbGYudGltZW91dF9pZCA9IGdvYmplY3QudGltZW91dF9hZGQoaW50KHRpbWVfaXRlcnZhbCksCisgICAgICAgIHNlbGYubWFrZV9pbWFnZV9vbl9wcm9ncmVzc2luZ19jYiwgdHJlZSkKKyAgICAgICAgc2VsZi50cmVlX2hlYWRlcnNfaGVpZ2h0ID0gc2VsZi5nZXRfdHJlZXZpZXdfaGVhZGVyc19oZWlnaHQodHJlZSkKKyAgICAgICAgc2VsZi5mb3JjZV9zdG9wX2VuYWJsZSA9IEZhbHNlCisKKyAgICBkZWYgZm9yY2Vfc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5lbWl0KCJydW4tdGltZXItc3RvcHBlZCIpCisgICAgICAgIHNlbGYuZm9yY2Vfc3RvcF9lbmFibGUgPSBUcnVlCisgICAgICAgIGlmIHNlbGYudGltZW91dF9pZDoKKyAgICAgICAgICAgIGlmIGdvYmplY3Quc291cmNlX3JlbW92ZShzZWxmLnRpbWVvdXRfaWQpOgorICAgICAgICAgICAgICAgIHNlbGYudGltZW91dF9pZCA9IE5vbmUKKworICAgIGRlZiBvbl9kcmF3X3BpeGJ1Zl9jYihzZWxmLCBwaXhidWYsIGNyLCB4LCB5LCBpbWdfd2lkdGgsIGltZ19oZWlnaHQsIGRvX3JlZnJlc2g9VHJ1ZSk6CisgICAgICAgIGlmIHBpeGJ1ZjoKKyAgICAgICAgICAgIHIgPSBtYXgoaW1nX3dpZHRoLzIsIGltZ19oZWlnaHQvMikKKyAgICAgICAgICAgIGNyLnRyYW5zbGF0ZSh4ICsgciwgeSArIHIpCisgICAgICAgICAgICBpZiBkb19yZWZyZXNoOgorICAgICAgICAgICAgICAgIGNyLnJvdGF0ZSgyICogbWF0aC5waSAqIHNlbGYuY3VycmVudF9hbmdsZV9wb3MpCisKKyAgICAgICAgICAgIGNyLnNldF9zb3VyY2VfcGl4YnVmKHBpeGJ1ZiwgLWltZ193aWR0aC8yLCAtaW1nX2hlaWdodC8yKQorICAgICAgICAgICAgY3IucGFpbnQoKQorCisgICAgZGVmIG9uX2RyYXdfZmFkZWlub3V0X2NiKHNlbGYsIGNyLCBjb2xvciwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZG9fZmFkZW91dD1UcnVlKToKKyAgICAgICAgaWYgZG9fZmFkZW91dDoKKyAgICAgICAgICAgIGFscGhhID0gc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyAqIDAuOAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWxwaGEgPSAoMS4wIC0gc2VsZi5jdXJyZW50X2FuZ2xlX3BvcykgKiAwLjgKKworICAgICAgICBjci5zZXRfc291cmNlX3JnYmEoY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSwgYWxwaGEpCisgICAgICAgIGNyLnJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KQorICAgICAgICBjci5maWxsKCkKKworICAgIGRlZiBnZXRfdHJlZXZpZXdfaGVhZGVyc19oZWlnaHQoc2VsZiwgdHJlZSk6CisgICAgICAgIGlmIHRyZWUgYW5kICh0cmVlLmdldF9wcm9wZXJ0eSgiaGVhZGVycy12aXNpYmxlIikgPT0gVHJ1ZSk6CisgICAgICAgICAgICBoZWlnaHQgPSB0cmVlLmdldF9hbGxvY2F0aW9uKCkuaGVpZ2h0IC0gdHJlZS5nZXRfYmluX3dpbmRvdygpLmdldF9zaXplKClbMV0KKyAgICAgICAgICAgIHJldHVybiBoZWlnaHQKKworICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIG1ha2VfaW1hZ2Vfb25fcHJvZ3Jlc3NpbmdfY2Ioc2VsZiwgdHJlZSk6CisgICAgICAgIHNlbGYuY3VycmVudF9hbmdsZV9wb3MgKz0gc2VsZi5zdGVwX2FuZ2xlCisgICAgICAgIGlmIHNlbGYucnVubmluZ19tb2RlID09IHNlbGYuTU9ERV9DWUNMRV9SVU5OSU5HOgorICAgICAgICAgICAgaWYgKHNlbGYuY3VycmVudF9hbmdsZV9wb3MgPj0gMSk6CisgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlbGYuY3VycmVudF9hbmdsZV9wb3MgPiAxOgorICAgICAgICAgICAgICAgIHNlbGYuZm9yY2Vfc3RvcCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgc2VsZi5pc19xdWV1ZV9kcmF3X3Jvd19hcmVhOgorICAgICAgICAgICAgZm9yIHBhdGggaW4gc2VsZi5ydW5uaW5nX2NlbGxfYXJlYXM6CisgICAgICAgICAgICAgICAgcmVjdCA9IHRyZWUuZ2V0X2NlbGxfYXJlYShwYXRoLCB0cmVlLmdldF9jb2x1bW4oMCkpCisgICAgICAgICAgICAgICAgcm93X3gsIF8sIHJvd193aWR0aCwgXyA9IHRyZWUuZ2V0X3Zpc2libGVfcmVjdCgpCisgICAgICAgICAgICAgICAgdHJlZS5xdWV1ZV9kcmF3X2FyZWEocm93X3gsIHJlY3QueSArIHNlbGYudHJlZV9oZWFkZXJzX2hlaWdodCwgcm93X3dpZHRoLCByZWN0LmhlaWdodCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciByZWN0IGluIHNlbGYucnVubmluZ19jZWxsX2FyZWFzOgorICAgICAgICAgICAgICAgIHRyZWUucXVldWVfZHJhd19hcmVhKHJlY3QueCwgcmVjdC55ICsgc2VsZi50cmVlX2hlYWRlcnNfaGVpZ2h0LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCkKKworICAgICAgICByZXR1cm4gKG5vdCBzZWxmLmZvcmNlX3N0b3BfZW5hYmxlKQorCisgICAgZGVmIGFwcGVuZF9ydW5uaW5nX2NlbGxfYXJlYShzZWxmLCBjZWxsX2FyZWEpOgorICAgICAgICBpZiBjZWxsX2FyZWEgYW5kIChjZWxsX2FyZWEgbm90IGluIHNlbGYucnVubmluZ19jZWxsX2FyZWFzKToKKyAgICAgICAgICAgIHNlbGYucnVubmluZ19jZWxsX2FyZWFzLmFwcGVuZChjZWxsX2FyZWEpCisKKyAgICBkZWYgcmVtb3ZlX3J1bm5pbmdfY2VsbF9hcmVhKHNlbGYsIGNlbGxfYXJlYSk6CisgICAgICAgIGlmIGNlbGxfYXJlYSBpbiBzZWxmLnJ1bm5pbmdfY2VsbF9hcmVhczoKKyAgICAgICAgICAgIHNlbGYucnVubmluZ19jZWxsX2FyZWFzLnJlbW92ZShjZWxsX2FyZWEpCisgICAgICAgIGlmIG5vdCBzZWxmLnJ1bm5pbmdfY2VsbF9hcmVhczoKKyAgICAgICAgICAgIHNlbGYucmVzZXRfcnVuKCkKKworZ29iamVjdC50eXBlX3JlZ2lzdGVyKEhvYkNlbGxSZW5kZXJlckNvbnRyb2xsZXIpCisKK2NsYXNzIEhvYkNlbGxSZW5kZXJlclBpeGJ1ZihndGsuQ2VsbFJlbmRlcmVyUGl4YnVmKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGd0ay5DZWxsUmVuZGVyZXJQaXhidWYuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jb250cm9sID0gSG9iQ2VsbFJlbmRlcmVyQ29udHJvbGxlcigpCisgICAgICAgICMgYWRkIGljb24gY2hlY2tlciBmb3IgbWFrZSB0aGUgZ3RrLWljb24gdHJhbnNmZXIgdG8gaG9iLWljb24KKyAgICAgICAgc2VsZi5jaGVja2VyID0gSG9iSWNvbkNoZWNrZXIoKQorICAgICAgICBzZWxmLnNldF9wcm9wZXJ0eSgic3RvY2stc2l6ZSIsIGd0ay5JQ09OX1NJWkVfRE5EKQorCisgICAgZGVmIGdldF9waXhidWZfZnJvbV9zdG9ja19pY29uKHNlbGYsIHdpZGdldCwgc3RvY2tfaWQ9IiIsIHNpemU9Z3RrLklDT05fU0laRV9ESUFMT0cpOgorICAgICAgICBpZiB3aWRnZXQgYW5kIHN0b2NrX2lkIGFuZCBndGsuaWNvbl9mYWN0b3J5X2xvb2t1cF9kZWZhdWx0KHN0b2NrX2lkKToKKyAgICAgICAgICAgIHJldHVybiB3aWRnZXQucmVuZGVyX2ljb24oc3RvY2tfaWQsIHNpemUpCisKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzZXRfaWNvbl9uYW1lX3RvX2lkKHNlbGYsIG5ld19uYW1lKToKKyAgICAgICAgaWYgbmV3X25hbWUgYW5kIHR5cGUobmV3X25hbWUpID09IHN0cjoKKyAgICAgICAgICAgICMgY2hlY2sgdGhlIG5hbWUgaXMgbmVlZCB0byB0cmFuc2ZlciB0byBob2IgaWNvbiBvciBub3QKKyAgICAgICAgICAgIG5hbWUgPSBzZWxmLmNoZWNrZXIuY2hlY2tfc3RvY2tfaWNvbihuZXdfbmFtZSkKKyAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiaGljIikgb3IgbmFtZS5zdGFydHN3aXRoKCJndGsiKToKKyAgICAgICAgICAgICAgICBzdG9ja19pZCA9IG5hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3RvY2tfaWQgPSAnZ3RrLScgKyBuYW1lCisKKyAgICAgICAgcmV0dXJuIHN0b2NrX2lkCisKKyAgICAnJycgcmVuZGVyIGNlbGwgZXhhY3RseSwgImljb24tbmFtZSIgaXMgcHJpb3JpdHkKKyAgICAgICAgaWYgdXNlIHRoZSAnaGljLXRhc2stcmVmcmVzaCcgd2lsbCBtYWtlIHRoZSBwaXggYW5pbWF0aW9uCisgICAgICAgIGlmICdwaXgnIHdpbGwgY2hhbmdlIHRoZSBwaXhidWYgZm9yIGl0IGZyb20gdGhlIHBpeGJ1ZiBvciBpbWFnZS4KKyAgICAnJycKKyAgICBkZWYgZG9fcmVuZGVyKHNlbGYsIHdpbmRvdywgdHJlZSwgYmFja2dyb3VuZF9hcmVhLGNlbGxfYXJlYSwgZXhwb3NlX2FyZWEsIGZsYWdzKToKKyAgICAgICAgaWYgKG5vdCBzZWxmLmNvbnRyb2wpIG9yIChub3QgdHJlZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB4LCB5LCB3LCBoID0gc2VsZi5vbl9nZXRfc2l6ZSh0cmVlLCBjZWxsX2FyZWEpCisgICAgICAgIHggKz0gY2VsbF9hcmVhLngKKyAgICAgICAgeSArPSBjZWxsX2FyZWEueQorICAgICAgICB3IC09IDIgKiBzZWxmLmdldF9wcm9wZXJ0eSgieHBhZCIpCisgICAgICAgIGggLT0gMiAqIHNlbGYuZ2V0X3Byb3BlcnR5KCJ5cGFkIikKKworICAgICAgICBzdG9ja19pZCA9ICIiCisgICAgICAgIGlmIHNlbGYucHJvcHMuaWNvbl9uYW1lOgorICAgICAgICAgICAgc3RvY2tfaWQgPSBzZWxmLnNldF9pY29uX25hbWVfdG9faWQoc2VsZi5wcm9wcy5pY29uX25hbWUpCisgICAgICAgIGVsaWYgc2VsZi5wcm9wcy5zdG9ja19pZDoKKyAgICAgICAgICAgIHN0b2NrX2lkID0gc2VsZi5wcm9wcy5zdG9ja19pZAorICAgICAgICBlbGlmIHNlbGYucHJvcHMucGl4YnVmOgorICAgICAgICAgICAgcGl4ID0gc2VsZi5wcm9wcy5waXhidWYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHN0b2NrX2lkOgorICAgICAgICAgICAgcGl4ID0gc2VsZi5nZXRfcGl4YnVmX2Zyb21fc3RvY2tfaWNvbih0cmVlLCBzdG9ja19pZCwgc2VsZi5wcm9wcy5zdG9ja19zaXplKQorICAgICAgICBpZiBzdG9ja19pZCA9PSAnaGljLXRhc2stcmVmcmVzaCc6CisgICAgICAgICAgICBzZWxmLmNvbnRyb2wuYXBwZW5kX3J1bm5pbmdfY2VsbF9hcmVhKGNlbGxfYXJlYSkKKyAgICAgICAgICAgIGlmIHNlbGYuY29udHJvbC5pc19hY3RpdmUoKToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnRyb2wub25fZHJhd19waXhidWZfY2IocGl4LCB3aW5kb3cuY2Fpcm9fY3JlYXRlKCksIHgsIHksIHcsIGgsIFRydWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuY29udHJvbC5zdGFydF9ydW4oMjAwLCAwLCAwLCAxMDAwLCAxNTAsIHRyZWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNvbnRyb2wucmVtb3ZlX3J1bm5pbmdfY2VsbF9hcmVhKGNlbGxfYXJlYSkKKyAgICAgICAgICAgIHNlbGYuY29udHJvbC5vbl9kcmF3X3BpeGJ1Zl9jYihwaXgsIHdpbmRvdy5jYWlyb19jcmVhdGUoKSwgeCwgeSwgdywgaCwgRmFsc2UpCisKKyAgICBkZWYgb25fZ2V0X3NpemUoc2VsZiwgd2lkZ2V0LCBjZWxsX2FyZWEpOgorICAgICAgICBpZiBzZWxmLnByb3BzLmljb25fbmFtZSBvciBzZWxmLnByb3BzLnBpeGJ1ZiBvciBzZWxmLnByb3BzLnN0b2NrX2lkOgorICAgICAgICAgICAgdywgaCA9IGd0ay5pY29uX3NpemVfbG9va3VwKHNlbGYucHJvcHMuc3RvY2tfc2l6ZSkKKyAgICAgICAgICAgIGNhbGNfd2lkdGggPSBzZWxmLmdldF9wcm9wZXJ0eSgieHBhZCIpICogMiArIHcKKyAgICAgICAgICAgIGNhbGNfaGVpZ2h0ID0gc2VsZi5nZXRfcHJvcGVydHkoInlwYWQiKSAqIDIgKyBoCisgICAgICAgICAgICB4X29mZnNldCA9IDAKKyAgICAgICAgICAgIHlfb2Zmc2V0ID0gMAorICAgICAgICAgICAgaWYgY2VsbF9hcmVhIGFuZCB3ID4gMCBhbmQgaCA+IDA6CisgICAgICAgICAgICAgICAgeF9vZmZzZXQgPSBzZWxmLmdldF9wcm9wZXJ0eSgieGFsaWduIikgKiAoY2VsbF9hcmVhLndpZHRoIC0gY2FsY193aWR0aCAtIHNlbGYuZ2V0X3Byb3BlcnR5KCJ4cGFkIikpCisgICAgICAgICAgICAgICAgeV9vZmZzZXQgPSBzZWxmLmdldF9wcm9wZXJ0eSgieWFsaWduIikgKiAoY2VsbF9hcmVhLmhlaWdodCAtIGNhbGNfaGVpZ2h0IC0gc2VsZi5nZXRfcHJvcGVydHkoInlwYWQiKSkKKworICAgICAgICAgICAgcmV0dXJuIHhfb2Zmc2V0LCB5X29mZnNldCwgdywgaAorCisgICAgICAgIHJldHVybiAwLCAwLCAwLCAwCisKK2dvYmplY3QudHlwZV9yZWdpc3RlcihIb2JDZWxsUmVuZGVyZXJQaXhidWYpCisKK2NsYXNzIEhvYkNlbGxSZW5kZXJlclRvZ2dsZShndGsuQ2VsbFJlbmRlcmVyVG9nZ2xlKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGd0ay5DZWxsUmVuZGVyZXJUb2dnbGUuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jdHJsID0gSG9iQ2VsbFJlbmRlcmVyQ29udHJvbGxlcihpc19kcmF3X3Jvdz1UcnVlKQorICAgICAgICBzZWxmLmN0cmwucnVubmluZ19tb2RlID0gc2VsZi5jdHJsLk1PREVfT05FX1NIT1JUCisgICAgICAgIHNlbGYuY2VsbF9hdHRyID0geyJmYWRlb3V0IjogRmFsc2UsICJudW1iZXJfb2ZfY2hpbGRyZW4iOiAwfQorCisgICAgZGVmIGRvX3JlbmRlcihzZWxmLCB3aW5kb3csIHdpZGdldCwgYmFja2dyb3VuZF9hcmVhLCBjZWxsX2FyZWEsIGV4cG9zZV9hcmVhLCBmbGFncyk6CisgICAgICAgIGlmIChub3Qgc2VsZi5jdHJsKSBvciAobm90IHdpZGdldCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBmbGFncyAmIGd0ay5DRUxMX1JFTkRFUkVSX1NFTEVDVEVEOgorICAgICAgICAgICAgc3RhdGUgPSBndGsuU1RBVEVfU0VMRUNURUQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXRlID0gZ3RrLlNUQVRFX05PUk1BTAorCisgICAgICAgIGlmIHNlbGYuY3RybC5pc19hY3RpdmUoKToKKyAgICAgICAgICAgIHBhdGggPSB3aWRnZXQuZ2V0X3BhdGhfYXRfcG9zKGNlbGxfYXJlYS54ICsgY2VsbF9hcmVhLndpZHRoLzIsIGNlbGxfYXJlYS55ICsgY2VsbF9hcmVhLmhlaWdodC8yKQorICAgICAgICAgICAgIyBzb21ldGltZXMgdGhlIHBhcmFtZXRlcnMgb2YgY2VsbF9hcmVhIHdpbGwgYmUgYSBuZWdhdGl2ZSBudW1iZXIsc3VjaCBhcyBwdWxsIHVwIGRvd24gdGhlIHNjcm9sbCBiYXIKKyAgICAgICAgICAgICMgaXQncyBvdmVyIHRoZSB0cmVlIGNvbnRhaW5lciByYW5nZSwgc28gdGhlIHBhdGggd2lsbCBiZSBiYWQKKyAgICAgICAgICAgIGlmIG5vdCBwYXRoOiByZXR1cm4KKyAgICAgICAgICAgIHBhdGggPSBwYXRoWzBdCisgICAgICAgICAgICBpZiBwYXRoIGluIHNlbGYuY3RybC5ydW5uaW5nX2NlbGxfYXJlYXM6CisgICAgICAgICAgICAgICAgY3IgPSB3aW5kb3cuY2Fpcm9fY3JlYXRlKCkKKyAgICAgICAgICAgICAgICBjb2xvciA9IHdpZGdldC5nZXRfc3R5bGUoKS5iYXNlW3N0YXRlXQorCisgICAgICAgICAgICAgICAgcm93X3gsIF8sIHJvd193aWR0aCwgXyA9IHdpZGdldC5nZXRfdmlzaWJsZV9yZWN0KCkKKyAgICAgICAgICAgICAgICBib3JkZXJfeSA9IHNlbGYuZ2V0X3Byb3BlcnR5KCJ5cGFkIikKKyAgICAgICAgICAgICAgICBzZWxmLmN0cmwub25fZHJhd19mYWRlaW5vdXRfY2IoY3IsIGNvbG9yLCByb3dfeCwgY2VsbF9hcmVhLnkgLSBib3JkZXJfeSwgcm93X3dpZHRoLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxfYXJlYS5oZWlnaHQgKyBib3JkZXJfeSAqIDIsIHNlbGYuY2VsbF9hdHRyWyJmYWRlb3V0Il0pCisgICAgICAgICMgZHJhdyBudW1iZXIgb2YgYSBncm91cAorICAgICAgICBpZiBzZWxmLmNlbGxfYXR0clsibnVtYmVyX29mX2NoaWxkcmVuIl06CisgICAgICAgICAgICB0ZXh0ID0gIiVkIHBrZyIgJSBzZWxmLmNlbGxfYXR0clsibnVtYmVyX29mX2NoaWxkcmVuIl0KKyAgICAgICAgICAgIHBhbmdvbGF5b3V0ID0gd2lkZ2V0LmNyZWF0ZV9wYW5nb19sYXlvdXQodGV4dCkKKyAgICAgICAgICAgIHRleHR3LCB0ZXh0aCA9IHBhbmdvbGF5b3V0LmdldF9waXhlbF9zaXplKCkKKyAgICAgICAgICAgIHggPSBjZWxsX2FyZWEueCArIChjZWxsX2FyZWEud2lkdGgvMikgLSAodGV4dHcvMikKKyAgICAgICAgICAgIHkgPSBjZWxsX2FyZWEueSArIChjZWxsX2FyZWEuaGVpZ2h0LzIpIC0gKHRleHRoLzIpCisKKyAgICAgICAgICAgIHdpZGdldC5zdHlsZS5wYWludF9sYXlvdXQod2luZG93LCBzdGF0ZSwgVHJ1ZSwgY2VsbF9hcmVhLCB3aWRnZXQsICJjaGVja2JveCIsIHgsIHksIHBhbmdvbGF5b3V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGd0ay5DZWxsUmVuZGVyZXJUb2dnbGUuZG9fcmVuZGVyKHNlbGYsIHdpbmRvdywgd2lkZ2V0LCBiYWNrZ3JvdW5kX2FyZWEsIGNlbGxfYXJlYSwgZXhwb3NlX2FyZWEsIGZsYWdzKQorCisgICAgJycnZGVsYXk6IG5vcm1hbGx5IGRlbGF5IHRpbWUgaXMgMTAwMG1zCisgICAgICAgY2VsbF9saXN0OiB3aGlsY2ggY2VsbHMgbmVlZCB0byBiZSByZW5kZXIKKyAgICAnJycKKyAgICBkZWYgZmFkZW91dChzZWxmLCB0cmVlLCBkZWxheSwgY2VsbF9saXN0PU5vbmUpOgorICAgICAgICBpZiAoZGVsYXkgPCAyMDApIG9yIChub3QgdHJlZSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5jZWxsX2F0dHJbImZhZGVvdXQiXSA9IFRydWUKKyAgICAgICAgc2VsZi5jdHJsLnJ1bm5pbmdfY2VsbF9hcmVhcyA9IGNlbGxfbGlzdAorICAgICAgICBzZWxmLmN0cmwuc3RhcnRfcnVuKDIwMCwgMCwgMCwgZGVsYXksIChkZWxheSAqIDIwMCAvIDEwMDApLCB0cmVlKQorCisgICAgZGVmIGNvbm5lY3RfcmVuZGVyX3N0YXRlX2NoYW5nZWQoc2VsZiwgZnVuYywgdXNyZGF0YT1Ob25lKToKKyAgICAgICAgaWYgbm90IGZ1bmM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgdXNyZGF0YToKKyAgICAgICAgICAgIHNlbGYuY3RybC5jb25uZWN0KCJydW4tdGltZXItc3RvcHBlZCIsIGZ1bmMsIHNlbGYsIHVzcmRhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmN0cmwuY29ubmVjdCgicnVuLXRpbWVyLXN0b3BwZWQiLCBmdW5jLCBzZWxmKQorCitnb2JqZWN0LnR5cGVfcmVnaXN0ZXIoSG9iQ2VsbFJlbmRlcmVyVG9nZ2xlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaW1hZ2Vjb25maWd1cmF0aW9ucGFnZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2ltYWdlY29uZmlndXJhdGlvbnBhZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc2NmJlYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2ltYWdlY29uZmlndXJhdGlvbnBhZ2UucHkKQEAgLTAsMCArMSw1NjEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBnbGliCitpbXBvcnQgcmUKK2Zyb20gYmIudWkuY3J1bWJzLnByb2dyZXNzYmFyIGltcG9ydCBIb2JQcm9ncmVzc0JhcgorZnJvbSBiYi51aS5jcnVtYnMuaG9iY29sb3IgaW1wb3J0IEhvYkNvbG9ycworZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBoaWMsIEhvYkltYWdlQnV0dG9uLCBIb2JJbmZvQnV0dG9uLCBIb2JBbHRCdXR0b24sIEhvYkJ1dHRvbgorZnJvbSBiYi51aS5jcnVtYnMuaG9ibGlzdG1vZGVsIGltcG9ydCBSZWNpcGVMaXN0TW9kZWwKK2Zyb20gYmIudWkuY3J1bWJzLmhvYnBhZ2VzIGltcG9ydCBIb2JQYWdlCitmcm9tIGJiLnVpLmNydW1icy5oaWcucmV0cmlldmVpbWFnZWRpYWxvZyBpbXBvcnQgUmV0cmlldmVJbWFnZURpYWxvZworCisjCisjIEltYWdlQ29uZmlndXJhdGlvblBhZ2UKKyMKK2NsYXNzIEltYWdlQ29uZmlndXJhdGlvblBhZ2UgKEhvYlBhZ2UpOgorCisgICAgX19kdW1teV9tYWNoaW5lX18gPSAiLS1zZWxlY3QgYSBtYWNoaW5lLS0iCisgICAgX19kdW1teV9pbWFnZV9fICAgPSAiLS1zZWxlY3QgYW4gaW1hZ2UgcmVjaXBlLS0iCisgICAgX19jdXN0b21faW1hZ2VfXyAgPSAiU2VsZWN0IGZyb20gbXkgaW1hZ2UgcmVjaXBlcyIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBidWlsZGVyKToKKyAgICAgICAgc3VwZXIoSW1hZ2VDb25maWd1cmF0aW9uUGFnZSwgc2VsZikuX19pbml0X18oYnVpbGRlciwgIkltYWdlIGNvbmZpZ3VyYXRpb24iKQorCisgICAgICAgIHNlbGYuaW1hZ2VfY29tYm9faWQgPSBOb25lCisgICAgICAgICMgd2UgdXNlIG1hY2hpbmVfY29tYm9fY2hhbmdlZF9ieV9tYW51YWwgdG8gaWRlbnRpZnkgdGhlIG1hY2hpbmUgaXMgY2hhbmdlZCBieSBjb2RlCisgICAgICAgICMgb3IgYnkgbWFudWFsLiBJZiBieSBtYW51YWwsIGFsbCB1c2VyJ3MgcmVjaXBlIHNlbGVjdGlvbiBhbmQgcGFja2FnZSBzZWxlY3Rpb24gYXJlCisgICAgICAgICMgY2xlYXJlZC4KKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvX2NoYW5nZWRfYnlfbWFudWFsID0gVHJ1ZQorICAgICAgICBzZWxmLnN0b3BwaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi53YXJuaW5nX3NoaWZ0ID0gMAorICAgICAgICBzZWxmLmN1c3RvbV9pbWFnZV9zZWxlY3RlZCA9IE5vbmUKKyAgICAgICAgc2VsZi5jcmVhdGVfdmlzdWFsX2VsZW1lbnRzKCkKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMKKyAgICAgICAgc2VsZi50b29sYmFyID0gZ3RrLlRvb2xiYXIoKQorICAgICAgICBzZWxmLnRvb2xiYXIuc2V0X29yaWVudGF0aW9uKGd0ay5PUklFTlRBVElPTl9IT1JJWk9OVEFMKQorICAgICAgICBzZWxmLnRvb2xiYXIuc2V0X3N0eWxlKGd0ay5UT09MQkFSX0JPVEgpCisKKyAgICAgICAgbXlfaW1hZ2VzX2J1dHRvbiA9IHNlbGYuYXBwZW5kX3Rvb2xiYXJfYnV0dG9uKHNlbGYudG9vbGJhciwKKyAgICAgICAgICAgICJJbWFnZXMiLAorICAgICAgICAgICAgaGljLklDT05fSU1BR0VTX0RJU1BMQVlfRklMRSwKKyAgICAgICAgICAgIGhpYy5JQ09OX0lNQUdFU19IT1ZFUl9GSUxFLAorICAgICAgICAgICAgIk9wZW4gcHJldmlvdXNseSBidWlsdCBpbWFnZXMiLAorICAgICAgICAgICAgc2VsZi5teV9pbWFnZXNfYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgIHNldHRpbmdzX2J1dHRvbiA9IHNlbGYuYXBwZW5kX3Rvb2xiYXJfYnV0dG9uKHNlbGYudG9vbGJhciwKKyAgICAgICAgICAgICJTZXR0aW5ncyIsCisgICAgICAgICAgICBoaWMuSUNPTl9TRVRUSU5HU19ESVNQTEFZX0ZJTEUsCisgICAgICAgICAgICBoaWMuSUNPTl9TRVRUSU5HU19IT1ZFUl9GSUxFLAorICAgICAgICAgICAgIlZpZXcgYWRkaXRpb25hbCBidWlsZCBzZXR0aW5ncyIsCisgICAgICAgICAgICBzZWxmLnNldHRpbmdzX2J1dHRvbl9jbGlja2VkX2NiKQorCisgICAgICAgIHNlbGYuY29uZmlnX3RvcF9idXR0b24gPSBzZWxmLmFkZF9vbnRvX3RvcF9iYXIoc2VsZi50b29sYmFyKQorCisgICAgICAgIHNlbGYuZ3RhYmxlID0gZ3RrLlRhYmxlKDQwLCA0MCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5jcmVhdGVfY29uZmlnX21hY2hpbmUoKQorICAgICAgICBzZWxmLmNyZWF0ZV9jb25maWdfYmFzZWltZygpCisgICAgICAgIHNlbGYuY29uZmlnX2J1aWxkX2J1dHRvbiA9IHNlbGYuY3JlYXRlX2NvbmZpZ19idWlsZF9idXR0b24oKQorCisgICAgZGVmIF9yZW1vdmVfYWxsX3dpZGdldChzZWxmKToKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLmd0YWJsZS5nZXRfY2hpbGRyZW4oKSBvciBbXQorICAgICAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46CisgICAgICAgICAgICBzZWxmLmd0YWJsZS5yZW1vdmUoY2hpbGQpCisgICAgICAgIGNoaWxkcmVuID0gc2VsZi5ib3hfZ3JvdXBfYXJlYS5nZXRfY2hpbGRyZW4oKSBvciBbXQorICAgICAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46CisgICAgICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnJlbW92ZShjaGlsZCkKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLmdldF9jaGlsZHJlbigpIG9yIFtdCisgICAgICAgIGZvciBjaGlsZCBpbiBjaGlsZHJlbjoKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlKGNoaWxkKQorCisgICAgZGVmIF9wYWNrX2NvbXBvbmVudHMoc2VsZiwgcGFja19jb25maWdfYnVpbGRfYnV0dG9uID0gRmFsc2UpOgorICAgICAgICBzZWxmLl9yZW1vdmVfYWxsX3dpZGdldCgpCisgICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLmNvbmZpZ190b3BfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLmdyb3VwX2FsaWduLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLmd0YWJsZSwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgaWYgcGFja19jb25maWdfYnVpbGRfYnV0dG9uOgorICAgICAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX2VuZChzZWxmLmNvbmZpZ19idWlsZF9idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICAgICAgYm94LnNob3coKQorICAgICAgICAgICAgc3ViYm94ID0gZ3RrLkhCb3goRmFsc2UsIDApCisgICAgICAgICAgICBzdWJib3guc2V0X3NpemVfcmVxdWVzdCgyMDUsIDQ5KQorICAgICAgICAgICAgc3ViYm94LnNob3coKQorICAgICAgICAgICAgYm94LmFkZChzdWJib3gpCisgICAgICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfZW5kKGJveCwgRmFsc2UsIEZhbHNlKQorCisgICAgZGVmIHNob3dfbWFjaGluZShzZWxmKToKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIucmVzZXQoKQorICAgICAgICBzZWxmLl9wYWNrX2NvbXBvbmVudHMocGFja19jb25maWdfYnVpbGRfYnV0dG9uID0gRmFsc2UpCisgICAgICAgIHNlbGYuc2V0X2NvbmZpZ19tYWNoaW5lX2xheW91dChzaG93X3Byb2dyZXNzX2JhciA9IEZhbHNlKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiB1cGRhdGVfcHJvZ3Jlc3NfYmFyKHNlbGYsIHRpdGxlLCBmcmFjdGlvbiwgc3RhdHVzPU5vbmUpOgorICAgICAgICBpZiBzZWxmLnN0b3BwaW5nID09IEZhbHNlOgorICAgICAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIudXBkYXRlKGZyYWN0aW9uKQorICAgICAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIuc2V0X3RleHQodGl0bGUpCisgICAgICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zZXRfcmNzdHlsZShzdGF0dXMpCisKKyAgICBkZWYgc2hvd19pbmZvX3BvcHVsYXRpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3BhY2tfY29tcG9uZW50cyhwYWNrX2NvbmZpZ19idWlsZF9idXR0b24gPSBGYWxzZSkKKyAgICAgICAgc2VsZi5zZXRfY29uZmlnX21hY2hpbmVfbGF5b3V0KHNob3dfcHJvZ3Jlc3NfYmFyID0gVHJ1ZSkKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICBkZWYgc2hvd19pbmZvX3BvcHVsYXRlZChzZWxmKToKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIucmVzZXQoKQorICAgICAgICBzZWxmLl9wYWNrX2NvbXBvbmVudHMocGFja19jb25maWdfYnVpbGRfYnV0dG9uID0gRmFsc2UpCisgICAgICAgIHNlbGYuc2V0X2NvbmZpZ19tYWNoaW5lX2xheW91dChzaG93X3Byb2dyZXNzX2JhciA9IEZhbHNlKQorICAgICAgICBzZWxmLnNldF9jb25maWdfYmFzZWltZ19sYXlvdXQoKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiBzaG93X2Jhc2VpbWdfc2VsZWN0ZWQoc2VsZik6CisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnJlc2V0KCkKKyAgICAgICAgc2VsZi5fcGFja19jb21wb25lbnRzKHBhY2tfY29uZmlnX2J1aWxkX2J1dHRvbiA9IFRydWUpCisgICAgICAgIHNlbGYuc2V0X2NvbmZpZ19tYWNoaW5lX2xheW91dChzaG93X3Byb2dyZXNzX2JhciA9IEZhbHNlKQorICAgICAgICBzZWxmLnNldF9jb25maWdfYmFzZWltZ19sYXlvdXQoKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKyAgICAgICAgaWYgc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfaW1hZ2UoKSA9PSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICBzZWxmLmp1c3RfYmFrZV9idXR0b24uaGlkZSgpCisKKyAgICBkZWYgYWRkX3dhcm5pbmdzX2JhcihzZWxmKToKKyAgICAgICAgI2NyZWF0ZSB0aGUgd2FybmluZ3MgYmFyIHNob3duIHdoZW4gcmVjaXBlcyBwYXJzaW5nIGdlbmVyYXRlcyB3YXJuaW5ncworICAgICAgICBjb2xvciA9IEhvYkNvbG9ycy5LSEFLSQorICAgICAgICB3YXJuaW5nc19iYXIgPSBndGsuRXZlbnRCb3goKQorICAgICAgICB3YXJuaW5nc19iYXIubW9kaWZ5X2JnKGd0ay5TVEFURV9OT1JNQUwsIGd0ay5nZGsuY29sb3JfcGFyc2UoY29sb3IpKQorICAgICAgICB3YXJuaW5nc19iYXIuc2V0X2ZsYWdzKGd0ay5DQU5fREVGQVVMVCkKKyAgICAgICAgd2FybmluZ3NfYmFyLmdyYWJfZGVmYXVsdCgpCisKKyAgICAgICAgYnVpbGRfc3RvcF90YWIgPSBndGsuVGFibGUoMTAsIDIwLCBUcnVlKQorICAgICAgICB3YXJuaW5nc19iYXIuYWRkKGJ1aWxkX3N0b3BfdGFiKQorCisgICAgICAgIGljb24gPSBndGsuSW1hZ2UoKQorICAgICAgICBpY29uX3BpeF9idWZmZXIgPSBndGsuZ2RrLnBpeGJ1Zl9uZXdfZnJvbV9maWxlKGhpYy5JQ09OX0lORElfQUxFUlRfRklMRSkKKyAgICAgICAgaWNvbi5zZXRfZnJvbV9waXhidWYoaWNvbl9waXhfYnVmZmVyKQorICAgICAgICBidWlsZF9zdG9wX3RhYi5hdHRhY2goaWNvbiwgMCwgMiwgMCwgMTApCisKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICB3YXJuaW5nc19uYiA9IGxlbihzZWxmLmJ1aWxkZXIucGFyc2luZ193YXJuaW5ncykKKyAgICAgICAgaWYgd2FybmluZ3NfbmIgPT0gMToKKyAgICAgICAgICAgIGxhYmVsLnNldF9tYXJrdXAoIjxzcGFuIHNpemU9J3gtbGFyZ2UnPjxiPjEgcmVjaXBlIHBhcnNpbmcgd2FybmluZzwvYj48L3NwYW4+IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxhYmVsLnNldF9tYXJrdXAoIjxzcGFuIHNpemU9J3gtbGFyZ2UnPjxiPiVzIHJlY2lwZSBwYXJzaW5nIHdhcm5pbmdzPC9iPjwvc3Bhbj4iICUgd2FybmluZ3NfbmIpCisgICAgICAgIGJ1aWxkX3N0b3BfdGFiLmF0dGFjaChsYWJlbCwgMiwgMTIsIDAsIDEwKQorCisgICAgICAgIHZpZXdfd2FybmluZ3NfYnV0dG9uID0gSG9iQnV0dG9uKCJWaWV3IHdhcm5pbmdzIikKKyAgICAgICAgdmlld193YXJuaW5nc19idXR0b24uY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYudmlld193YXJuaW5nc19idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgYnVpbGRfc3RvcF90YWIuYXR0YWNoKHZpZXdfd2FybmluZ3NfYnV0dG9uLCAxNSwgMTksIDEsIDkpCisKKyAgICAgICAgcmV0dXJuIHdhcm5pbmdzX2JhcgorCisgICAgZGVmIGRpc2FibGVfd2FybmluZ3NfYmFyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmJ1aWxkZXIucGFyc2luZ193YXJuaW5nczoKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3dhcm5pbmdzX2JhcicpOgorICAgICAgICAgICAgICAgIHNlbGYud2FybmluZ3NfYmFyLmhpZGVfYWxsKCkKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5wYXJzaW5nX3dhcm5pbmdzID0gW10KKworICAgIGRlZiBjcmVhdGVfY29uZmlnX21hY2hpbmUoc2VsZik6CisgICAgICAgIHNlbGYubWFjaGluZV90aXRsZSA9IGd0ay5MYWJlbCgpCisgICAgICAgIHNlbGYubWFjaGluZV90aXRsZS5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBtYXJrID0gIjxzcGFuICVzPlNlbGVjdCBhIG1hY2hpbmU8L3NwYW4+IiAlIHNlbGYuc3Bhbl90YWcoJ3gtbGFyZ2UnLCAnYm9sZCcpCisgICAgICAgIHNlbGYubWFjaGluZV90aXRsZS5zZXRfbWFya3VwKG1hcmspCisKKyAgICAgICAgc2VsZi5tYWNoaW5lX3RpdGxlX2Rlc2MgPSBndGsuTGFiZWwoKQorICAgICAgICBzZWxmLm1hY2hpbmVfdGl0bGVfZGVzYy5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBtYXJrID0gKCI8c3BhbiAlcz5Zb3VyIHNlbGVjdGlvbiBpcyB0aGUgcHJvZmlsZSBvZiB0aGUgdGFyZ2V0IG1hY2hpbmUgZm9yIHdoaWNoIHlvdSIKKyAgICAgICAgIiBhcmUgYnVpbGRpbmcgdGhlIGltYWdlLlxuPC9zcGFuPiIpICUgKHNlbGYuc3Bhbl90YWcoJ21lZGl1bScpKQorICAgICAgICBzZWxmLm1hY2hpbmVfdGl0bGVfZGVzYy5zZXRfbWFya3VwKG1hcmspCisKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvID0gZ3RrLmNvbWJvX2JveF9uZXdfdGV4dCgpCisgICAgICAgIHNlbGYubWFjaGluZV9jb21iby5jb25uZWN0KCJjaGFuZ2VkIiwgc2VsZi5tYWNoaW5lX2NvbWJvX2NoYW5nZWRfY2IpCisKKyAgICAgICAgaWNvbl9maWxlID0gaGljLklDT05fTEFZRVJTX0RJU1BMQVlfRklMRQorICAgICAgICBob3Zlcl9maWxlID0gaGljLklDT05fTEFZRVJTX0hPVkVSX0ZJTEUKKyAgICAgICAgc2VsZi5sYXllcl9idXR0b24gPSBIb2JJbWFnZUJ1dHRvbigiTGF5ZXJzIiwgIkFkZCBzdXBwb3J0IGZvciBtYWNoaW5lcywgc29mdHdhcmUsIGV0Yy4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uX2ZpbGUsIGhvdmVyX2ZpbGUpCisgICAgICAgIHNlbGYubGF5ZXJfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmxheWVyX2J1dHRvbl9jbGlja2VkX2NiKQorCisgICAgICAgIG1hcmt1cCA9ICJMYXllcnMgYXJlIGEgcG93ZXJmdWwgbWVjaGFuaXNtIHRvIGV4dGVuZCB0aGUgWW9jdG8gUHJvamVjdCAiCisgICAgICAgIG1hcmt1cCArPSAid2l0aCB5b3VyIG93biBmdW5jdGlvbmFsaXR5LlxuIgorICAgICAgICBtYXJrdXAgKz0gIkZvciBtb3JlIG9uIGxheWVycywgY2hlY2sgdGhlIDxhIGhyZWY9XCIiCisgICAgICAgIG1hcmt1cCArPSAiaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvY3VycmVudC9kZXYtbWFudWFsLyIKKyAgICAgICAgbWFya3VwICs9ICJkZXYtbWFudWFsLmh0bWwjdW5kZXJzdGFuZGluZy1hbmQtdXNpbmctbGF5ZXJzXCI+cmVmZXJlbmNlIG1hbnVhbDwvYT4uIgorICAgICAgICBzZWxmLmxheWVyX2luZm9faWNvbiA9IEhvYkluZm9CdXR0b24oIjxiPkxheWVyczwvYj4iICsgIioiICsgbWFya3VwLCBzZWxmLmdldF9wYXJlbnQoKSkKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIgPSBIb2JQcm9ncmVzc0JhcigpCisgICAgICAgIHNlbGYuc3RvcF9idXR0b24gPSBIb2JBbHRCdXR0b24oIlN0b3AiKQorICAgICAgICBzZWxmLnN0b3BfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLnN0b3BfYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgIHNlbGYubWFjaGluZV9zZXBhcmF0b3IgPSBndGsuSFNlcGFyYXRvcigpCisKKyAgICBkZWYgc2V0X2NvbmZpZ19tYWNoaW5lX2xheW91dChzZWxmLCBzaG93X3Byb2dyZXNzX2JhciA9IEZhbHNlKToKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYubWFjaGluZV90aXRsZSwgMCwgNDAsIDAsIDQpCisgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLm1hY2hpbmVfdGl0bGVfZGVzYywgMCwgNDAsIDQsIDYpCisgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLm1hY2hpbmVfY29tYm8sIDAsIDEyLCA3LCAxMCkKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYubGF5ZXJfYnV0dG9uLCAxNCwgMzYsIDcsIDEyKQorICAgICAgICBzZWxmLmd0YWJsZS5hdHRhY2goc2VsZi5sYXllcl9pbmZvX2ljb24sIDM2LCA0MCwgNywgMTEpCisgICAgICAgIGlmIHNob3dfcHJvZ3Jlc3NfYmFyOgorICAgICAgICAgICAgI3NlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLnByb2dyZXNzX2JveCwgMCwgNDAsIDE1LCAxOCkKKyAgICAgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLnByb2dyZXNzX2JhciwgMCwgMzcsIDE1LCAxOCkKKyAgICAgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLnN0b3BfYnV0dG9uLCAzNywgNDAsIDE1LCAxOCwgMCwgMCkKKyAgICAgICAgaWYgc2VsZi5idWlsZGVyLnBhcnNpbmdfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhcm5pbmdzX2JhciA9IHNlbGYuYWRkX3dhcm5pbmdzX2JhcigpCisgICAgICAgICAgICBzZWxmLmd0YWJsZS5hdHRhY2goc2VsZi53YXJuaW5nc19iYXIsIDAsIDQwLCAxNCwgMTgpCisgICAgICAgICAgICBzZWxmLndhcm5pbmdfc2hpZnQgPSA0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLndhcm5pbmdfc2hpZnQgPSAwCisgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLm1hY2hpbmVfc2VwYXJhdG9yLCAwLCA0MCwgMTMsIDE0KQorCisgICAgZGVmIGNyZWF0ZV9jb25maWdfYmFzZWltZyhzZWxmKToKKyAgICAgICAgc2VsZi5pbWFnZV90aXRsZSA9IGd0ay5MYWJlbCgpCisgICAgICAgIHNlbGYuaW1hZ2VfdGl0bGUuc2V0X2FsaWdubWVudCgwLCAxLjApCisgICAgICAgIG1hcmsgPSAiPHNwYW4gJXM+U2VsZWN0IGFuIGltYWdlIHJlY2lwZTwvc3Bhbj4iICUgc2VsZi5zcGFuX3RhZygneC1sYXJnZScsICdib2xkJykKKyAgICAgICAgc2VsZi5pbWFnZV90aXRsZS5zZXRfbWFya3VwKG1hcmspCisKKyAgICAgICAgc2VsZi5pbWFnZV90aXRsZV9kZXNjID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgc2VsZi5pbWFnZV90aXRsZV9kZXNjLnNldF9hbGlnbm1lbnQoMCwgMC41KQorCisgICAgICAgIG1hcmsgPSAoIjxzcGFuICVzPkltYWdlIHJlY2lwZXMgYXJlIGEgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSB0eXBlIG9mIGltYWdlIHlvdSB3YW50LiAiCisgICAgICAgICAgICAgICAgIllvdSBjYW4gYnVpbGQgdGhlbSBhcyBcbiIKKyAgICAgICAgICAgICAgICAidGhleSBhcmUgb3IgZWRpdCB0aGVtIHRvIHN1aXQgeW91ciBuZWVkcy5cbjwvc3Bhbj4iKSAlIHNlbGYuc3Bhbl90YWcoJ21lZGl1bScpCisgICAgICAgIHNlbGYuaW1hZ2VfdGl0bGVfZGVzYy5zZXRfbWFya3VwKG1hcmspCisKKyAgICAgICAgc2VsZi5pbWFnZV9jb21ibyA9IGd0ay5jb21ib19ib3hfbmV3X3RleHQoKQorICAgICAgICBzZWxmLmltYWdlX2NvbWJvLnNldF9yb3dfc2VwYXJhdG9yX2Z1bmMoc2VsZi5jb21ib19zZXBhcmF0b3JfZnVuYywgTm9uZSkKKyAgICAgICAgc2VsZi5pbWFnZV9jb21ib19pZCA9IHNlbGYuaW1hZ2VfY29tYm8uY29ubmVjdCgiY2hhbmdlZCIsIHNlbGYuaW1hZ2VfY29tYm9fY2hhbmdlZF9jYikKKworICAgICAgICBzZWxmLmltYWdlX2Rlc2MgPSBndGsuTGFiZWwoKQorICAgICAgICBzZWxmLmltYWdlX2Rlc2Muc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKKyAgICAgICAgc2VsZi5pbWFnZV9kZXNjLnNldF9zaXplX3JlcXVlc3QoMjU2LCAtMSkKKyAgICAgICAgc2VsZi5pbWFnZV9kZXNjLnNldF9qdXN0aWZ5KGd0ay5KVVNUSUZZX0xFRlQpCisgICAgICAgIHNlbGYuaW1hZ2VfZGVzYy5zZXRfbGluZV93cmFwKFRydWUpCisKKyAgICAgICAgIyBidXR0b24gdG8gdmlldyByZWNpcGVzCisgICAgICAgIGljb25fZmlsZSA9IGhpYy5JQ09OX1JDSVBFX0RJU1BMQVlfRklMRQorICAgICAgICBob3Zlcl9maWxlID0gaGljLklDT05fUkNJUEVfSE9WRVJfRklMRQorICAgICAgICBzZWxmLnZpZXdfYWR2X2NvbmZpZ3VyYXRpb25fYnV0dG9uID0gSG9iSW1hZ2VCdXR0b24oIkFkdmFuY2VkIGNvbmZpZ3VyYXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VsZWN0IGltYWdlIHR5cGVzLCBwYWNrYWdlIGZvcm1hdHMsIGV0YyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25fZmlsZSwgaG92ZXJfZmlsZSkgICAgICAgIAorICAgICAgICBzZWxmLnZpZXdfYWR2X2NvbmZpZ3VyYXRpb25fYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLnZpZXdfYWR2X2NvbmZpZ3VyYXRpb25fYnV0dG9uX2NsaWNrZWRfY2IpCisKKyAgICAgICAgc2VsZi5pbWFnZV9zZXBhcmF0b3IgPSBndGsuSFNlcGFyYXRvcigpCisKKyAgICBkZWYgY29tYm9fc2VwYXJhdG9yX2Z1bmMoc2VsZiwgbW9kZWwsIGl0ZXIsIHVzZXJfZGF0YSk6CisgICAgICAgIG5hbWUgPSBtb2RlbC5nZXRfdmFsdWUoaXRlciwgMCkKKyAgICAgICAgaWYgbmFtZSA9PSAiLS1TZXBhcmF0b3ItLSI6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHNldF9jb25maWdfYmFzZWltZ19sYXlvdXQoc2VsZik6CisgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLmltYWdlX3RpdGxlLCAwLCA0MCwgMTUrc2VsZi53YXJuaW5nX3NoaWZ0LCAxNytzZWxmLndhcm5pbmdfc2hpZnQpCisgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLmltYWdlX3RpdGxlX2Rlc2MsIDAsIDQwLCAxOCtzZWxmLndhcm5pbmdfc2hpZnQsIDIyK3NlbGYud2FybmluZ19zaGlmdCkKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYuaW1hZ2VfY29tYm8sIDAsIDEyLCAyMytzZWxmLndhcm5pbmdfc2hpZnQsIDI2K3NlbGYud2FybmluZ19zaGlmdCkKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYuaW1hZ2VfZGVzYywgMCwgMTIsIDI3K3NlbGYud2FybmluZ19zaGlmdCwgMzMrc2VsZi53YXJuaW5nX3NoaWZ0KQorICAgICAgICBzZWxmLmd0YWJsZS5hdHRhY2goc2VsZi52aWV3X2Fkdl9jb25maWd1cmF0aW9uX2J1dHRvbiwgMTQsIDM2LCAyMytzZWxmLndhcm5pbmdfc2hpZnQsIDI4K3NlbGYud2FybmluZ19zaGlmdCkKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYuaW1hZ2Vfc2VwYXJhdG9yLCAwLCA0MCwgMzUrc2VsZi53YXJuaW5nX3NoaWZ0LCAzNitzZWxmLndhcm5pbmdfc2hpZnQpCisKKyAgICBkZWYgY3JlYXRlX2NvbmZpZ19idWlsZF9idXR0b24oc2VsZik6CisgICAgICAgICMgQ3JlYXRlIHRoZSAiQnVpbGQgcGFja2FnZXMiIGFuZCAiQnVpbGQgaW1hZ2UiIGJ1dHRvbnMgYXQgdGhlIGJvdHRvbQorICAgICAgICBidXR0b25fYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCisKKyAgICAgICAgIyBjcmVhdGUgYnV0dG9uICJCdWlsZCBpbWFnZSIKKyAgICAgICAgc2VsZi5qdXN0X2Jha2VfYnV0dG9uID0gSG9iQnV0dG9uKCJCdWlsZCBpbWFnZSIpCisgICAgICAgIHNlbGYuanVzdF9iYWtlX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJCdWlsZCB0aGUgaW1hZ2UgcmVjaXBlIGFzIGl0IGlzIikKKyAgICAgICAgc2VsZi5qdXN0X2Jha2VfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmp1c3RfYmFrZV9idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgYnV0dG9uX2JveC5wYWNrX2VuZChzZWxmLmp1c3RfYmFrZV9idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICAjIGNyZWF0ZSBidXR0b24gIkVkaXQgaW1hZ2UgcmVjaXBlIgorICAgICAgICBzZWxmLmVkaXRfaW1hZ2VfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJFZGl0IGltYWdlIHJlY2lwZSIpCisgICAgICAgIHNlbGYuZWRpdF9pbWFnZV9idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiQ3VzdG9taXplIHRoZSByZWNpcGVzIGFuZCBwYWNrYWdlcyB0byBiZSBpbmNsdWRlZCBpbiB5b3VyIGltYWdlIikKKyAgICAgICAgc2VsZi5lZGl0X2ltYWdlX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5lZGl0X2ltYWdlX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICBidXR0b25fYm94LnBhY2tfZW5kKHNlbGYuZWRpdF9pbWFnZV9idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICByZXR1cm4gYnV0dG9uX2JveAorCisgICAgZGVmIHN0b3BfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5zdG9wcGluZyA9IFRydWUKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIuc2V0X3RleHQoIlN0b3BwaW5nIHJlY2lwZSBwYXJzaW5nIikKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIuc2V0X3Jjc3R5bGUoInN0b3AiKQorICAgICAgICBzZWxmLmJ1aWxkZXIuY2FuY2VsX3BhcnNlX3N5bmMoKQorCisgICAgZGVmIHZpZXdfd2FybmluZ3NfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfd2FybmluZ19kaWFsb2coKQorCisgICAgZGVmIG1hY2hpbmVfY29tYm9fY2hhbmdlZF9pZGxlX2NiKHNlbGYpOgorICAgICAgICBzZWxmLmJ1aWxkZXIud2luZG93LnNldF9jdXJzb3IoTm9uZSkKKworICAgIGRlZiBtYWNoaW5lX2NvbWJvX2NoYW5nZWRfY2Ioc2VsZiwgbWFjaGluZV9jb21ibyk6CisgICAgICAgIHNlbGYuc3RvcHBpbmcgPSBGYWxzZQorICAgICAgICBzZWxmLmJ1aWxkZXIucGFyc2luZ193YXJuaW5ncyA9IFtdCisgICAgICAgIGNvbWJvX2l0ZW0gPSBtYWNoaW5lX2NvbWJvLmdldF9hY3RpdmVfdGV4dCgpCisgICAgICAgIGlmIG5vdCBjb21ib19pdGVtIG9yIGNvbWJvX2l0ZW0gPT0gc2VsZi5fX2R1bW15X21hY2hpbmVfXzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuYnVpbGRlci53aW5kb3cuc2V0X2N1cnNvcihndGsuZ2RrLkN1cnNvcihndGsuZ2RrLldBVENIKSkKKyAgICAgICAgc2VsZi5idWlsZGVyLndhaXQoMC4xKSAjd2FpdCBmb3IgY29tYm8gYW5kIGN1cnNvciB0byB1cGRhdGUKKworICAgICAgICAjIHJlbW92ZSBfX2R1bW15X21hY2hpbmVfXyBpdGVtIGZyb20gdGhlIHN0b3JlIGxpc3QgYWZ0ZXIgZmlyc3QgdXNlciBzZWxlY3Rpb24KKyAgICAgICAgIyBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlciB2YWxpZAorICAgICAgICBjb21ib19zdG9yZSA9IG1hY2hpbmVfY29tYm8uZ2V0X21vZGVsKCkKKyAgICAgICAgaWYgbGVuKGNvbWJvX3N0b3JlKSBhbmQgKGNvbWJvX3N0b3JlWzBdWzBdID09IHNlbGYuX19kdW1teV9tYWNoaW5lX18pOgorICAgICAgICAgICAgbWFjaGluZV9jb21iby5yZW1vdmVfdGV4dCgwKQorCisgICAgICAgIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLmN1cnJfbWFjaCA9IGNvbWJvX2l0ZW0KKyAgICAgICAgaWYgc2VsZi5tYWNoaW5lX2NvbWJvX2NoYW5nZWRfYnlfbWFudWFsOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uY2xlYXJfc2VsZWN0aW9uKCkKKyAgICAgICAgIyByZXNldCBtYWNoaW5lX2NvbWJvX2NoYW5nZWRfYnlfbWFudWFsCisgICAgICAgIHNlbGYubWFjaGluZV9jb21ib19jaGFuZ2VkX2J5X21hbnVhbCA9IFRydWUKKworICAgICAgICBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9pbWFnZSA9IE5vbmUKKworICAgICAgICAjIERvIHJlcGFyc2UgcmVjaXBlcworICAgICAgICBzZWxmLmJ1aWxkZXIucG9wdWxhdGVfcmVjaXBlX3BhY2thZ2VfaW5mb19hc3luYygpCisKKyAgICAgICAgZ2xpYi5pZGxlX2FkZChzZWxmLm1hY2hpbmVfY29tYm9fY2hhbmdlZF9pZGxlX2NiKQorCisgICAgZGVmIHVwZGF0ZV9tYWNoaW5lX2NvbWJvKHNlbGYpOgorICAgICAgICBzZWxmLmRpc2FibGVfd2FybmluZ3NfYmFyKCkKKyAgICAgICAgYWxsX21hY2hpbmVzID0gW3NlbGYuX19kdW1teV9tYWNoaW5lX19dICsgc2VsZi5idWlsZGVyLnBhcmFtZXRlcnMuYWxsX21hY2hpbmVzCisKKyAgICAgICAgbW9kZWwgPSBzZWxmLm1hY2hpbmVfY29tYm8uZ2V0X21vZGVsKCkKKyAgICAgICAgbW9kZWwuY2xlYXIoKQorICAgICAgICBmb3IgbWFjaGluZSBpbiBhbGxfbWFjaGluZXM6CisgICAgICAgICAgICBzZWxmLm1hY2hpbmVfY29tYm8uYXBwZW5kX3RleHQobWFjaGluZSkKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLnNldF9hY3RpdmUoMCkKKworICAgIGRlZiBzd2l0Y2hfbWFjaGluZV9jb21ibyhzZWxmKToKKyAgICAgICAgc2VsZi5kaXNhYmxlX3dhcm5pbmdzX2JhcigpCisgICAgICAgIHNlbGYubWFjaGluZV9jb21ib19jaGFuZ2VkX2J5X21hbnVhbCA9IEZhbHNlCisgICAgICAgIG1vZGVsID0gc2VsZi5tYWNoaW5lX2NvbWJvLmdldF9tb2RlbCgpCisgICAgICAgIGFjdGl2ZSA9IDAKKyAgICAgICAgd2hpbGUgYWN0aXZlIDwgbGVuKG1vZGVsKToKKyAgICAgICAgICAgIGlmIG1vZGVsW2FjdGl2ZV1bMF0gPT0gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoOgorICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZV9jb21iby5zZXRfYWN0aXZlKGFjdGl2ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGFjdGl2ZSArPSAxCisKKyAgICAgICAgaWYgbW9kZWxbMF1bMF0gIT0gc2VsZi5fX2R1bW15X21hY2hpbmVfXzoKKyAgICAgICAgICAgIHNlbGYubWFjaGluZV9jb21iby5pbnNlcnRfdGV4dCgwLCBzZWxmLl9fZHVtbXlfbWFjaGluZV9fKQorCisgICAgICAgIHNlbGYubWFjaGluZV9jb21iby5zZXRfYWN0aXZlKDApCisKKyAgICBkZWYgdXBkYXRlX2ltYWdlX2Rlc2Moc2VsZik6CisgICAgICAgIGRlc2MgPSAiIgorICAgICAgICBzZWxlY3RlZF9pbWFnZSA9IHNlbGYuaW1hZ2VfY29tYm8uZ2V0X2FjdGl2ZV90ZXh0KCkKKyAgICAgICAgaWYgc2VsZWN0ZWRfaW1hZ2UgYW5kIHNlbGVjdGVkX2ltYWdlIGluIHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwucG5fcGF0aC5rZXlzKCk6CisgICAgICAgICAgICBpbWFnZV9wYXRoID0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5wbl9wYXRoW3NlbGVjdGVkX2ltYWdlXQorICAgICAgICAgICAgaW1hZ2VfaXRlciA9IHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuZ2V0X2l0ZXIoaW1hZ2VfcGF0aCkKKyAgICAgICAgICAgIGRlc2MgPSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLmdldF92YWx1ZShpbWFnZV9pdGVyLCBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLkNPTF9ERVNDKQorCisgICAgICAgIG1hcmsgPSAoIjxzcGFuICVzPiVzPC9zcGFuPlxuIikgJSAoc2VsZi5zcGFuX3RhZygnc21hbGwnKSwgZGVzYykKKyAgICAgICAgc2VsZi5pbWFnZV9kZXNjLnNldF9tYXJrdXAobWFyaykKKworICAgIGRlZiBpbWFnZV9jb21ib19jaGFuZ2VkX2lkbGVfY2Ioc2VsZiwgc2VsZWN0ZWRfaW1hZ2UsIHNlbGVjdGVkX3JlY2lwZXMsIHNlbGVjdGVkX3BhY2thZ2VzKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnVwZGF0ZV9yZWNpcGVfbW9kZWwoc2VsZWN0ZWRfaW1hZ2UsIHNlbGVjdGVkX3JlY2lwZXMpCisgICAgICAgIHNlbGYuYnVpbGRlci51cGRhdGVfcGFja2FnZV9tb2RlbChzZWxlY3RlZF9wYWNrYWdlcykKKyAgICAgICAgc2VsZi5idWlsZGVyLndpbmRvd19zZW5zaXRpdmUoVHJ1ZSkKKworICAgIGRlZiBpbWFnZV9jb21ib19jaGFuZ2VkX2NiKHNlbGYsIGNvbWJvKToKKyAgICAgICAgc2VsZi5idWlsZGVyLndpbmRvd19zZW5zaXRpdmUoRmFsc2UpCisgICAgICAgIHNlbGVjdGVkX2ltYWdlID0gc2VsZi5pbWFnZV9jb21iby5nZXRfYWN0aXZlX3RleHQoKQorICAgICAgICBpZiBzZWxlY3RlZF9pbWFnZSA9PSBzZWxmLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICB0b3BkaXIgPSBzZWxmLmJ1aWxkZXIuZ2V0X3RvcGRpcigpCisgICAgICAgICAgICBpbWFnZXNfZGlyID0gdG9wZGlyICsgIi9yZWNpcGVzL2ltYWdlcy9jdXN0b20vIgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLmVuc3VyZV9kaXIoaW1hZ2VzX2RpcikKKworICAgICAgICAgICAgZGlhbG9nID0gUmV0cmlldmVJbWFnZURpYWxvZyhpbWFnZXNfZGlyLCAiU2VsZWN0IGZyb20gbXkgaW1hZ2UgcmVjaXBlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5idWlsZGVyLCBndGsuRElBTE9HX01PREFMIHwgZ3RrLkRJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5UKQorICAgICAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9PSzoKKyAgICAgICAgICAgICAgICBpbWFnZV9uYW1lID0gZGlhbG9nLmdldF9maWxlbmFtZSgpCisgICAgICAgICAgICAgICAgaGVhZCwgdGFpbCA9IG9zLnBhdGguc3BsaXQoaW1hZ2VfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxlY3RlZF9pbWFnZSA9IG9zLnBhdGguc3BsaXRleHQodGFpbClbMF0KKyAgICAgICAgICAgICAgICBzZWxmLmN1c3RvbV9pbWFnZV9zZWxlY3RlZCA9IHNlbGVjdGVkX2ltYWdlCisgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfaW1hZ2VfY29tYm8oc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbCwgc2VsZWN0ZWRfaW1hZ2UpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGVjdGVkX2ltYWdlID0gc2VsZi5fX2R1bW15X2ltYWdlX18KKyAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9pbWFnZV9jb21ibyhzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLCBOb25lKQorICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5jdXN0b21faW1hZ2Vfc2VsZWN0ZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5jdXN0b21faW1hZ2Vfc2VsZWN0ZWQgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfaW1hZ2VfY29tYm8oc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbCwgc2VsZWN0ZWRfaW1hZ2UpCisKKyAgICAgICAgaWYgbm90IHNlbGVjdGVkX2ltYWdlIG9yIChzZWxlY3RlZF9pbWFnZSA9PSBzZWxmLl9fZHVtbXlfaW1hZ2VfXyk6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIud2luZG93X3NlbnNpdGl2ZShUcnVlKQorICAgICAgICAgICAgc2VsZi5qdXN0X2Jha2VfYnV0dG9uLmhpZGUoKQorICAgICAgICAgICAgc2VsZi5lZGl0X2ltYWdlX2J1dHRvbi5oaWRlKCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgcmVtb3ZlIF9fZHVtbXlfaW1hZ2VfXyBpdGVtIGZyb20gdGhlIHN0b3JlIGxpc3QgYWZ0ZXIgZmlyc3QgdXNlciBzZWxlY3Rpb24KKyAgICAgICAgIyBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlciB2YWxpZAorICAgICAgICBjb21ib19zdG9yZSA9IGNvbWJvLmdldF9tb2RlbCgpCisgICAgICAgIGlmIGxlbihjb21ib19zdG9yZSkgYW5kIChjb21ib19zdG9yZVswXVswXSA9PSBzZWxmLl9fZHVtbXlfaW1hZ2VfXyk6CisgICAgICAgICAgICBjb21iby5yZW1vdmVfdGV4dCgwKQorCisgICAgICAgIHNlbGYuYnVpbGRlci5jdXN0b21pemVkID0gRmFsc2UKKworICAgICAgICBzZWxlY3RlZF9yZWNpcGVzID0gW10KKworICAgICAgICBpbWFnZV9wYXRoID0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5wbl9wYXRoW3NlbGVjdGVkX2ltYWdlXQorICAgICAgICBpbWFnZV9pdGVyID0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5nZXRfaXRlcihpbWFnZV9wYXRoKQorICAgICAgICBzZWxlY3RlZF9wYWNrYWdlcyA9IHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuZ2V0X3ZhbHVlKGltYWdlX2l0ZXIsIHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuQ09MX0lOU1RBTEwpLnNwbGl0KCkKKyAgICAgICAgc2VsZi51cGRhdGVfaW1hZ2VfZGVzYygpCisKKyAgICAgICAgc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5yZXNldCgpCisgICAgICAgIHNlbGYuYnVpbGRlci5wYWNrYWdlX21vZGVsLnJlc2V0KCkKKworICAgICAgICBzZWxmLnNob3dfYmFzZWltZ19zZWxlY3RlZCgpCisKKyAgICAgICAgaWYgc2VsZWN0ZWRfaW1hZ2UgPT0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgc2VsZi5qdXN0X2Jha2VfYnV0dG9uLmhpZGUoKQorCisgICAgICAgIGdsaWIuaWRsZV9hZGQoc2VsZi5pbWFnZV9jb21ib19jaGFuZ2VkX2lkbGVfY2IsIHNlbGVjdGVkX2ltYWdlLCBzZWxlY3RlZF9yZWNpcGVzLCBzZWxlY3RlZF9wYWNrYWdlcykKKworICAgIGRlZiBfaW1hZ2VfY29tYm9fY29ubmVjdF9zaWduYWwoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmltYWdlX2NvbWJvX2lkOgorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb21ib19pZCA9IHNlbGYuaW1hZ2VfY29tYm8uY29ubmVjdCgiY2hhbmdlZCIsIHNlbGYuaW1hZ2VfY29tYm9fY2hhbmdlZF9jYikKKworICAgIGRlZiBfaW1hZ2VfY29tYm9fZGlzY29ubmVjdF9zaWduYWwoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaW1hZ2VfY29tYm9faWQ6CisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbWJvLmRpc2Nvbm5lY3Qoc2VsZi5pbWFnZV9jb21ib19pZCkKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29tYm9faWQgPSBOb25lCisKKyAgICBkZWYgdXBkYXRlX2ltYWdlX2NvbWJvKHNlbGYsIHJlY2lwZV9tb2RlbCwgc2VsZWN0ZWRfaW1hZ2UpOgorICAgICAgICAjIFVwZGF0ZSB0aGUgaW1hZ2UgY29tYm8gYWNjb3JkaW5nIHRvIHRoZSBpbWFnZXMgaW4gdGhlIHJlY2lwZV9tb2RlbAorICAgICAgICAjIHBvcHVsYXRlIGltYWdlIGNvbWJvCisgICAgICAgIGZpbHRlciA9IHtSZWNpcGVMaXN0TW9kZWwuQ09MX1RZUEUgOiBbJ2ltYWdlJ119CisgICAgICAgIGltYWdlX21vZGVsID0gcmVjaXBlX21vZGVsLnRyZWVfbW9kZWwoZmlsdGVyKQorICAgICAgICBpbWFnZV9tb2RlbC5zZXRfc29ydF9jb2x1bW5faWQocmVjaXBlX21vZGVsLkNPTF9OQU1FLCBndGsuU09SVF9BU0NFTkRJTkcpCisgICAgICAgIGFjdGl2ZSA9IDAKKyAgICAgICAgY250ID0gMAorCisgICAgICAgIHdoaXRlX3BhdHRlcm4gPSBbXQorICAgICAgICBpZiBzZWxmLmJ1aWxkZXIucGFyYW1ldGVycy5pbWFnZV93aGl0ZV9wYXR0ZXJuOgorICAgICAgICAgICAgZm9yIGkgaW4gc2VsZi5idWlsZGVyLnBhcmFtZXRlcnMuaW1hZ2Vfd2hpdGVfcGF0dGVybi5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHdoaXRlX3BhdHRlcm4uYXBwZW5kKHJlLmNvbXBpbGUoaSkpCisKKyAgICAgICAgYmxhY2tfcGF0dGVybiA9IFtdCisgICAgICAgIGlmIHNlbGYuYnVpbGRlci5wYXJhbWV0ZXJzLmltYWdlX2JsYWNrX3BhdHRlcm46CisgICAgICAgICAgICBmb3IgaSBpbiBzZWxmLmJ1aWxkZXIucGFyYW1ldGVycy5pbWFnZV9ibGFja19wYXR0ZXJuLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgYmxhY2tfcGF0dGVybi5hcHBlbmQocmUuY29tcGlsZShpKSkKKyAgICAgICAgYmxhY2tfcGF0dGVybi5hcHBlbmQocmUuY29tcGlsZSgiaG9iLWltYWdlIikpCisgICAgICAgIGJsYWNrX3BhdHRlcm4uYXBwZW5kKHJlLmNvbXBpbGUoImVkaXRlZCgtWzAtOV0qKSouYmIkIikpCisKKyAgICAgICAgaXQgPSBpbWFnZV9tb2RlbC5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHNlbGYuX2ltYWdlX2NvbWJvX2Rpc2Nvbm5lY3Rfc2lnbmFsKCkKKyAgICAgICAgbW9kZWwgPSBzZWxmLmltYWdlX2NvbWJvLmdldF9tb2RlbCgpCisgICAgICAgIG1vZGVsLmNsZWFyKCkKKyAgICAgICAgIyBTZXQgYSBpbmRpY2F0b3IgdGV4dCB0byBjb21ibyBzdG9yZSB3aGVuIGZpcnN0IG9wZW4KKyAgICAgICAgaWYgbm90IHNlbGVjdGVkX2ltYWdlOgorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb21iby5hcHBlbmRfdGV4dChzZWxmLl9fZHVtbXlfaW1hZ2VfXykKKyAgICAgICAgICAgIGNudCA9IGNudCArIDEKKworICAgICAgICBzZWxmLmltYWdlX2NvbWJvLmFwcGVuZF90ZXh0KHNlbGYuX19jdXN0b21faW1hZ2VfXykKKyAgICAgICAgc2VsZi5pbWFnZV9jb21iby5hcHBlbmRfdGV4dCgiLS1TZXBhcmF0b3ItLSIpCisgICAgICAgIGNudCA9IGNudCArIDIKKworICAgICAgICB0b3BkaXIgPSBzZWxmLmJ1aWxkZXIuZ2V0X3RvcGRpcigpCisgICAgICAgICMgYXBwZW5kIGFuZCBzZXQgYWN0aXZlCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgcGF0aCA9IGltYWdlX21vZGVsLmdldF9wYXRoKGl0KQorICAgICAgICAgICAgaXQgPSBpbWFnZV9tb2RlbC5pdGVyX25leHQoaXQpCisgICAgICAgICAgICBpbWFnZV9uYW1lID0gaW1hZ2VfbW9kZWxbcGF0aF1bcmVjaXBlX21vZGVsLkNPTF9OQU1FXQorICAgICAgICAgICAgaWYgaW1hZ2VfbmFtZSA9PSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgYmxhY2tfcGF0dGVybjoKKyAgICAgICAgICAgICAgICBhbGxvdyA9IFRydWUKKyAgICAgICAgICAgICAgICBmb3IgcGF0dGVybiBpbiBibGFja19wYXR0ZXJuOgorICAgICAgICAgICAgICAgICAgICBpZiBwYXR0ZXJuLnNlYXJjaChpbWFnZV9uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIHdoaXRlX3BhdHRlcm46CisgICAgICAgICAgICAgICAgYWxsb3cgPSBGYWxzZQorICAgICAgICAgICAgICAgIGZvciBwYXR0ZXJuIGluIHdoaXRlX3BhdHRlcm46CisgICAgICAgICAgICAgICAgICAgIGlmIHBhdHRlcm4uc2VhcmNoKGltYWdlX25hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3cgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhbGxvdyA9IFRydWUKKworICAgICAgICAgICAgZmlsZV9uYW1lID0gaW1hZ2VfbW9kZWxbcGF0aF1bcmVjaXBlX21vZGVsLkNPTF9GSUxFXQorICAgICAgICAgICAgaWYgZmlsZV9uYW1lIGFuZCB0b3BkaXIgaW4gZmlsZV9uYW1lOgorICAgICAgICAgICAgICAgIGFsbG93ID0gRmFsc2UKKworICAgICAgICAgICAgaWYgYWxsb3c6CisgICAgICAgICAgICAgICAgc2VsZi5pbWFnZV9jb21iby5hcHBlbmRfdGV4dChpbWFnZV9uYW1lKQorICAgICAgICAgICAgICAgIGlmIGltYWdlX25hbWUgPT0gc2VsZWN0ZWRfaW1hZ2U6CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZSA9IGNudAorICAgICAgICAgICAgICAgIGNudCA9IGNudCArIDEKKyAgICAgICAgc2VsZi5pbWFnZV9jb21iby5hcHBlbmRfdGV4dChzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX18pCisKKyAgICAgICAgaWYgc2VsZWN0ZWRfaW1hZ2UgPT0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgYWN0aXZlID0gY250CisKKyAgICAgICAgaWYgc2VsZi5jdXN0b21faW1hZ2Vfc2VsZWN0ZWQ6CisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbWJvLmFwcGVuZF90ZXh0KCItLVNlcGFyYXRvci0tIikKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29tYm8uYXBwZW5kX3RleHQoc2VsZi5jdXN0b21faW1hZ2Vfc2VsZWN0ZWQpCisgICAgICAgICAgICBjbnQgPSBjbnQgKyAyCisgICAgICAgICAgICBpZiBzZWxmLmN1c3RvbV9pbWFnZV9zZWxlY3RlZCA9PSBzZWxlY3RlZF9pbWFnZToKKyAgICAgICAgICAgICAgICBhY3RpdmUgPSBjbnQKKworICAgICAgICBzZWxmLmltYWdlX2NvbWJvLnNldF9hY3RpdmUoYWN0aXZlKQorCisgICAgICAgIGlmIGFjdGl2ZSAhPSAwOgorICAgICAgICAgICAgc2VsZi5zaG93X2Jhc2VpbWdfc2VsZWN0ZWQoKQorCisgICAgICAgIHNlbGYuX2ltYWdlX2NvbWJvX2Nvbm5lY3Rfc2lnbmFsKCkKKworICAgIGRlZiBsYXllcl9idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICAjIENyZWF0ZSBhIGxheWVyIHNlbGVjdGlvbiBkaWFsb2cKKyAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfbGF5ZXJfc2VsZWN0aW9uX2RpYWxvZygpCisKKyAgICBkZWYgdmlld19hZHZfY29uZmlndXJhdGlvbl9idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICAjIENyZWF0ZSBhbiBhZHZhbmNlZCBzZXR0aW5ncyBkaWFsb2cKKyAgICAgICAgcmVzcG9uc2UsIHNldHRpbmdzX2NoYW5nZWQgPSBzZWxmLmJ1aWxkZXIuc2hvd19hZHZfc2V0dGluZ3NfZGlhbG9nKCkKKyAgICAgICAgaWYgbm90IHJlc3BvbnNlOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNldHRpbmdzX2NoYW5nZWQ6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIud2luZG93LnNldF9jdXJzb3IoZ3RrLmdkay5DdXJzb3IoZ3RrLmdkay5XQVRDSCkpCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIud2FpdCgwLjEpICN3YWl0IGZvciBhZHZfc2V0dGluZ3NfZGlhbG9nIHRvIHRlcm1pbmF0ZQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnJlcGFyc2VfcG9zdF9hZHZfc2V0dGluZ3MoKQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLndpbmRvdy5zZXRfY3Vyc29yKE5vbmUpCisKKyAgICBkZWYganVzdF9iYWtlX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYuYnVpbGRlci5wYXJzaW5nX3dhcm5pbmdzID0gW10KKyAgICAgICAgc2VsZi5idWlsZGVyLmp1c3RfYmFrZSgpCisKKyAgICBkZWYgZWRpdF9pbWFnZV9idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIuc2V0X2Jhc2VfaW1hZ2UoKQorICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19yZWNpcGVzKCkKKworICAgIGRlZiBteV9pbWFnZXNfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfbG9hZF9teV9pbWFnZXNfZGlhbG9nKCkKKworICAgIGRlZiBzZXR0aW5nc19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICAjIENyZWF0ZSBhbiBhZHZhbmNlZCBzZXR0aW5ncyBkaWFsb2cKKyAgICAgICAgcmVzcG9uc2UsIHNldHRpbmdzX2NoYW5nZWQgPSBzZWxmLmJ1aWxkZXIuc2hvd19zaW1wbGVfc2V0dGluZ3NfZGlhbG9nKCkKKyAgICAgICAgaWYgbm90IHJlc3BvbnNlOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNldHRpbmdzX2NoYW5nZWQ6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIucmVwYXJzZV9wb3N0X2Fkdl9zZXR0aW5ncygpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9pbWFnZWRldGFpbHNwYWdlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaW1hZ2VkZXRhaWxzcGFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNTJlOTQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaW1hZ2VkZXRhaWxzcGFnZS5weQpAQCAtMCwwICsxLDY2OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCBndGsKK2Zyb20gYmIudWkuY3J1bWJzLmhvYmNvbG9yIGltcG9ydCBIb2JDb2xvcnMKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgaGljLCBIb2JWaWV3VGFibGUsIEhvYkFsdEJ1dHRvbiwgSG9iQnV0dG9uCitmcm9tIGJiLnVpLmNydW1icy5ob2JwYWdlcyBpbXBvcnQgSG9iUGFnZQoraW1wb3J0IHN1YnByb2Nlc3MKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNkaWFsb2cgaW1wb3J0IENydW1ic0RpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLnNhdmVpbWFnZWRpYWxvZyBpbXBvcnQgU2F2ZUltYWdlRGlhbG9nCisKKyMKKyMgSW1hZ2VEZXRhaWxzUGFnZQorIworY2xhc3MgSW1hZ2VEZXRhaWxzUGFnZSAoSG9iUGFnZSk6CisKKyAgICBjbGFzcyBEZXRhaWxCb3ggKGd0ay5FdmVudEJveCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3aWRnZXQgPSBOb25lLCB2YXJsaXN0ID0gTm9uZSwgdmFsbGlzdCA9IE5vbmUsIGljb24gPSBOb25lLCBidXR0b24gPSBOb25lLCBidXR0b24yPU5vbmUsIGNvbG9yID0gSG9iQ29sb3JzLkxJR0hUX0dSQVkpOgorICAgICAgICAgICAgZ3RrLkV2ZW50Qm94Ll9faW5pdF9fKHNlbGYpCisKKyAgICAgICAgICAgICMgc2V0IGNvbG9yCisgICAgICAgICAgICBzdHlsZSA9IHNlbGYuZ2V0X3N0eWxlKCkuY29weSgpCisgICAgICAgICAgICBzdHlsZS5iZ1tndGsuU1RBVEVfTk9STUFMXSA9IHNlbGYuZ2V0X2NvbG9ybWFwKCkuYWxsb2NfY29sb3IoY29sb3IsIEZhbHNlLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuc2V0X3N0eWxlKHN0eWxlKQorCisgICAgICAgICAgICBzZWxmLnJvdyA9IGd0ay5UYWJsZSgxLCAyLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYucm93LnNldF9ib3JkZXJfd2lkdGgoMTApCisgICAgICAgICAgICBzZWxmLmFkZChzZWxmLnJvdykKKyAgICAgICAgCisgICAgICAgICAgICB0b3RhbF9yb3dzID0gMAorICAgICAgICAgICAgaWYgd2lkZ2V0OgorICAgICAgICAgICAgICAgIHRvdGFsX3Jvd3MgPSAxMAorICAgICAgICAgICAgaWYgdmFybGlzdCBhbmQgdmFsbGlzdDoKKyAgICAgICAgICAgICAgICAjIHBhY2sgdGhlIGljb24gYW5kIHRoZSB0ZXh0IG9uIHRoZSBsZWZ0CisgICAgICAgICAgICAgICAgdG90YWxfcm93cyArPSBsZW4odmFybGlzdCkKKyAgICAgICAgICAgIHNlbGYudGFibGUgPSBndGsuVGFibGUodG90YWxfcm93cywgMjAsIFRydWUpCisgICAgICAgICAgICBzZWxmLnRhYmxlLnNldF9yb3dfc3BhY2luZ3MoNikKKyAgICAgICAgICAgIHNlbGYudGFibGUuc2V0X3NpemVfcmVxdWVzdCgxMDAsIC0xKQorICAgICAgICAgICAgc2VsZi5yb3cuYXR0YWNoKHNlbGYudGFibGUsIDAsIDEsIDAsIDEsIHhvcHRpb25zPWd0ay5GSUxMfGd0ay5FWFBBTkQsIHlvcHRpb25zPWd0ay5GSUxMKQorICAgICAgICAgICAgCisgICAgICAgICAgICBjb2xpZCA9IDAKKyAgICAgICAgICAgIHJvd2lkID0gMAorICAgICAgICAgICAgc2VsZi5saW5lX3dpZGdldHMgPSB7fQorICAgICAgICAgICAgaWYgaWNvbjoKKyAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChpY29uLCBjb2xpZCwgY29saWQgKyAyLCAwLCAxKQorICAgICAgICAgICAgICAgIGNvbGlkID0gY29saWQgKyAyCisgICAgICAgICAgICBpZiB3aWRnZXQ6CisgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5hdHRhY2god2lkZ2V0LCBjb2xpZCwgMjAsIDAsIDEwKQorICAgICAgICAgICAgICAgIHJvd2lkID0gMTAKKyAgICAgICAgICAgIGlmIHZhcmxpc3QgYW5kIHZhbGxpc3Q6CisgICAgICAgICAgICAgICAgZm9yIHJvdyBpbiByYW5nZShyb3dpZCwgdG90YWxfcm93cyk6CisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcm93IC0gcm93aWQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lX3dpZGdldHNbdmFybGlzdFtpbmRleF1dID0gc2VsZi50ZXh0MmxhYmVsKHZhcmxpc3RbaW5kZXhdLCB2YWxsaXN0W2luZGV4XSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5hdHRhY2goc2VsZi5saW5lX3dpZGdldHNbdmFybGlzdFtpbmRleF1dLCBjb2xpZCwgMjAsIHJvdywgcm93ICsgMSkKKyAgICAgICAgICAgICMgcGFjayB0aGUgYnV0dG9uIG9uIHRoZSByaWdodAorICAgICAgICAgICAgaWYgYnV0dG9uOgorICAgICAgICAgICAgICAgIHNlbGYuYmJveCA9IGd0ay5WQm94KCkKKyAgICAgICAgICAgICAgICBzZWxmLmJib3gucGFja19zdGFydChidXR0b24sIGV4cGFuZD1UcnVlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgICAgIGlmIGJ1dHRvbjI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJveC5wYWNrX3N0YXJ0KGJ1dHRvbjIsIGV4cGFuZD1UcnVlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgICAgIHNlbGYuYmJveC5zZXRfc2l6ZV9yZXF1ZXN0KDE1MCwtMSkKKyAgICAgICAgICAgICAgICBzZWxmLnJvdy5hdHRhY2goc2VsZi5iYm94LCAxLCAyLCAwLCAxLCB4b3B0aW9ucz1ndGsuRklMTCwgeW9wdGlvbnM9Z3RrLkVYUEFORCkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgZGVmIHVwZGF0ZV9saW5lX3dpZGdldHMoc2VsZiwgdmFyaWFibGUsIHZhbHVlKToKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLmxpbmVfd2lkZ2V0cykgPT0gMDoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYubGluZV93aWRnZXRzW3ZhcmlhYmxlXSwgZ3RrLkxhYmVsKToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYubGluZV93aWRnZXRzW3ZhcmlhYmxlXS5zZXRfbWFya3VwKHNlbGYuZm9ybWF0X2xpbmUodmFyaWFibGUsIHZhbHVlKSkKKworICAgICAgICBkZWYgd3JhcF9saW5lKHNlbGYsIGlucHV0cyk6CisgICAgICAgICAgICAjIHdyYXAgdGhlIGxvbmcgdGV4dCBvZiBpbnB1dHMKKyAgICAgICAgICAgIHdyYXBfd2lkdGhfY2hhcnMgPSA3NQorICAgICAgICAgICAgb3V0cHV0cyA9ICIiCisgICAgICAgICAgICB0bXBzID0gaW5wdXRzCisgICAgICAgICAgICBsZXNzX2NoYXJzID0gbGVuKGlucHV0cykKKyAgICAgICAgICAgIHdoaWxlIChsZXNzX2NoYXJzIC0gd3JhcF93aWR0aF9jaGFycykgPiAwOgorICAgICAgICAgICAgICAgIGxlc3NfY2hhcnMgLT0gd3JhcF93aWR0aF9jaGFycworICAgICAgICAgICAgICAgIG91dHB1dHMgKz0gdG1wc1s6d3JhcF93aWR0aF9jaGFyc10gKyAiXG4gICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgdG1wcyA9IGlucHV0c1tsZXNzX2NoYXJzOl0KKyAgICAgICAgICAgIG91dHB1dHMgKz0gdG1wcworICAgICAgICAgICAgcmV0dXJuIG91dHB1dHMKKworICAgICAgICBkZWYgZm9ybWF0X2xpbmUoc2VsZiwgdmFyaWFibGUsIHZhbHVlKToKKyAgICAgICAgICAgIHdyYXBlZF92YWx1ZSA9IHNlbGYud3JhcF9saW5lKHZhbHVlKQorICAgICAgICAgICAgbWFya3VwID0gIjxzcGFuIHdlaWdodD1cJ2JvbGRcJz4lczwvc3Bhbj4iICUgdmFyaWFibGUKKyAgICAgICAgICAgIG1hcmt1cCArPSAiPHNwYW4gd2VpZ2h0PVwnbm9ybWFsXCcgZm9yZWdyb3VuZD1cJyMxYzFjMWNcJyBmb250X2Rlc2M9XCcxNHB4XCc+JXM8L3NwYW4+IiAlIHdyYXBlZF92YWx1ZQorICAgICAgICAgICAgcmV0dXJuIG1hcmt1cAorCisgICAgICAgIGRlZiB0ZXh0MmxhYmVsKHNlbGYsIHZhcmlhYmxlLCB2YWx1ZSk6CisgICAgICAgICAgICAjIGFwcGVuZCB0aGUgbmFtZTp2YWx1ZSB0byB0aGUgbGVmdCBib3gKKyAgICAgICAgICAgICMgc3VjaCBhcyAiTmFtZTogaG9iLWNvcmUtbWluaW1hbC12YXJpYW50LTIwMTEtMTItMTUtYmVhZ2xlYm9hcmQiCisgICAgICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICAgICAgbGFiZWwuc2V0X21hcmt1cChzZWxmLmZvcm1hdF9saW5lKHZhcmlhYmxlLCB2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gbGFiZWwKKworICAgIGNsYXNzIEJ1aWxkRGV0YWlsQm94IChndGsuRXZlbnRCb3gpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFybGlzdCA9IE5vbmUsIHZhbGxpc3QgPSBOb25lLCBpY29uID0gTm9uZSwgY29sb3IgPSBIb2JDb2xvcnMuTElHSFRfR1JBWSk6CisgICAgICAgICAgICBndGsuRXZlbnRCb3guX19pbml0X18oc2VsZikKKworICAgICAgICAgICAgIyBzZXQgY29sb3IKKyAgICAgICAgICAgIHN0eWxlID0gc2VsZi5nZXRfc3R5bGUoKS5jb3B5KCkKKyAgICAgICAgICAgIHN0eWxlLmJnW2d0ay5TVEFURV9OT1JNQUxdID0gc2VsZi5nZXRfY29sb3JtYXAoKS5hbGxvY19jb2xvcihjb2xvciwgRmFsc2UsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5zZXRfc3R5bGUoc3R5bGUpCisKKyAgICAgICAgICAgIHNlbGYuaGJveCA9IGd0ay5IQm94KCkKKyAgICAgICAgICAgIHNlbGYuaGJveC5zZXRfYm9yZGVyX3dpZHRoKDEwKQorICAgICAgICAgICAgc2VsZi5hZGQoc2VsZi5oYm94KQorCisgICAgICAgICAgICB0b3RhbF9yb3dzID0gMAorICAgICAgICAgICAgaWYgdmFybGlzdCBhbmQgdmFsbGlzdDoKKyAgICAgICAgICAgICAgICAjIHBhY2sgdGhlIGljb24gYW5kIHRoZSB0ZXh0IG9uIHRoZSBsZWZ0CisgICAgICAgICAgICAgICAgdG90YWxfcm93cyArPSBsZW4odmFybGlzdCkKKyAgICAgICAgICAgIHNlbGYudGFibGUgPSBndGsuVGFibGUodG90YWxfcm93cywgMjAsIFRydWUpCisgICAgICAgICAgICBzZWxmLnRhYmxlLnNldF9yb3dfc3BhY2luZ3MoNikKKyAgICAgICAgICAgIHNlbGYudGFibGUuc2V0X3NpemVfcmVxdWVzdCgxMDAsIC0xKQorICAgICAgICAgICAgc2VsZi5oYm94LnBhY2tfc3RhcnQoc2VsZi50YWJsZSwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSwgcGFkZGluZz0xNSkKKworICAgICAgICAgICAgY29saWQgPSAwCisgICAgICAgICAgICByb3dpZCA9IDAKKyAgICAgICAgICAgIHNlbGYubGluZV93aWRnZXRzID0ge30KKyAgICAgICAgICAgIGlmIGljb246CisgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5hdHRhY2goaWNvbiwgY29saWQsIGNvbGlkICsgMiwgMCwgMSkKKyAgICAgICAgICAgICAgICBjb2xpZCA9IGNvbGlkICsgMgorICAgICAgICAgICAgaWYgdmFybGlzdCBhbmQgdmFsbGlzdDoKKyAgICAgICAgICAgICAgICBmb3Igcm93IGluIHJhbmdlKHJvd2lkLCB0b3RhbF9yb3dzKToKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggPSByb3cgLSByb3dpZAorICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVfd2lkZ2V0c1t2YXJsaXN0W2luZGV4XV0gPSBzZWxmLnRleHQybGFiZWwodmFybGlzdFtpbmRleF0sIHZhbGxpc3RbaW5kZXhdKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChzZWxmLmxpbmVfd2lkZ2V0c1t2YXJsaXN0W2luZGV4XV0sIGNvbGlkLCAyMCwgcm93LCByb3cgKyAxKQorICAgICAgICAgICAgICAgIAorICAgICAgICBkZWYgdXBkYXRlX2xpbmVfd2lkZ2V0cyhzZWxmLCB2YXJpYWJsZSwgdmFsdWUpOgorICAgICAgICAgICAgaWYgbGVuKHNlbGYubGluZV93aWRnZXRzKSA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5saW5lX3dpZGdldHNbdmFyaWFibGVdLCBndGsuTGFiZWwpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5saW5lX3dpZGdldHNbdmFyaWFibGVdLnNldF9tYXJrdXAoc2VsZi5mb3JtYXRfbGluZSh2YXJpYWJsZSwgdmFsdWUpKQorCisgICAgICAgIGRlZiB3cmFwX2xpbmUoc2VsZiwgaW5wdXRzKToKKyAgICAgICAgICAgICMgd3JhcCB0aGUgbG9uZyB0ZXh0IG9mIGlucHV0cworICAgICAgICAgICAgd3JhcF93aWR0aF9jaGFycyA9IDc1CisgICAgICAgICAgICBvdXRwdXRzID0gIiIKKyAgICAgICAgICAgIHRtcHMgPSBpbnB1dHMKKyAgICAgICAgICAgIGxlc3NfY2hhcnMgPSBsZW4oaW5wdXRzKQorICAgICAgICAgICAgd2hpbGUgKGxlc3NfY2hhcnMgLSB3cmFwX3dpZHRoX2NoYXJzKSA+IDA6CisgICAgICAgICAgICAgICAgbGVzc19jaGFycyAtPSB3cmFwX3dpZHRoX2NoYXJzCisgICAgICAgICAgICAgICAgb3V0cHV0cyArPSB0bXBzWzp3cmFwX3dpZHRoX2NoYXJzXSArICJcbiAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICB0bXBzID0gaW5wdXRzW2xlc3NfY2hhcnM6XQorICAgICAgICAgICAgb3V0cHV0cyArPSB0bXBzCisgICAgICAgICAgICByZXR1cm4gb3V0cHV0cworCisgICAgICAgIGRlZiBmb3JtYXRfbGluZShzZWxmLCB2YXJpYWJsZSwgdmFsdWUpOgorICAgICAgICAgICAgd3JhcGVkX3ZhbHVlID0gc2VsZi53cmFwX2xpbmUodmFsdWUpCisgICAgICAgICAgICBtYXJrdXAgPSAiPHNwYW4gd2VpZ2h0PVwnYm9sZFwnPiVzPC9zcGFuPiIgJSB2YXJpYWJsZQorICAgICAgICAgICAgbWFya3VwICs9ICI8c3BhbiB3ZWlnaHQ9XCdub3JtYWxcJyBmb3JlZ3JvdW5kPVwnIzFjMWMxY1wnIGZvbnRfZGVzYz1cJzE0cHhcJz4lczwvc3Bhbj4iICUgd3JhcGVkX3ZhbHVlCisgICAgICAgICAgICByZXR1cm4gbWFya3VwCisKKyAgICAgICAgZGVmIHRleHQybGFiZWwoc2VsZiwgdmFyaWFibGUsIHZhbHVlKToKKyAgICAgICAgICAgICMgYXBwZW5kIHRoZSBuYW1lOnZhbHVlIHRvIHRoZSBsZWZ0IGJveAorICAgICAgICAgICAgIyBzdWNoIGFzICJOYW1lOiBob2ItY29yZS1taW5pbWFsLXZhcmlhbnQtMjAxMS0xMi0xNS1iZWFnbGVib2FyZCIKKyAgICAgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgICAgICBsYWJlbC5zZXRfbWFya3VwKHNlbGYuZm9ybWF0X2xpbmUodmFyaWFibGUsIHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBsYWJlbAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1aWxkZXIpOgorICAgICAgICBzdXBlcihJbWFnZURldGFpbHNQYWdlLCBzZWxmKS5fX2luaXRfXyhidWlsZGVyLCAiSW1hZ2UgZGV0YWlscyIpCisKKyAgICAgICAgc2VsZi5pbWFnZV9zdG9yZSA9IFtdCisgICAgICAgIHNlbGYuYnV0dG9uX2lkcyA9IHt9CisgICAgICAgIHNlbGYuZGV0YWlsc19ib3R0b21fYnV0dG9ucyA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICBzZWxmLmltYWdlX3NhdmVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5jcmVhdGVfdmlzdWFsX2VsZW1lbnRzKCkKKyAgICAgICAgc2VsZi5uYW1lX2ZpZWxkX3RlbXBsYXRlID0gIiIKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbl9maWVsZF90ZW1wbGF0ZSA9ICIiCisKKyAgICBkZWYgY3JlYXRlX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgIyBjcmVhdGUgdmlzdWFsIGVsZW1lbnRzCisgICAgICAgICMgY3JlYXRlIHRoZSB0b29sYmFyCisgICAgICAgIHNlbGYudG9vbGJhciA9IGd0ay5Ub29sYmFyKCkKKyAgICAgICAgc2VsZi50b29sYmFyLnNldF9vcmllbnRhdGlvbihndGsuT1JJRU5UQVRJT05fSE9SSVpPTlRBTCkKKyAgICAgICAgc2VsZi50b29sYmFyLnNldF9zdHlsZShndGsuVE9PTEJBUl9CT1RIKQorCisgICAgICAgIG15X2ltYWdlc19idXR0b24gPSBzZWxmLmFwcGVuZF90b29sYmFyX2J1dHRvbihzZWxmLnRvb2xiYXIsCisgICAgICAgICAgICAiSW1hZ2VzIiwKKyAgICAgICAgICAgIGhpYy5JQ09OX0lNQUdFU19ESVNQTEFZX0ZJTEUsCisgICAgICAgICAgICBoaWMuSUNPTl9JTUFHRVNfSE9WRVJfRklMRSwKKyAgICAgICAgICAgICJPcGVuIHByZXZpb3VzbHkgYnVpbHQgaW1hZ2VzIiwKKyAgICAgICAgICAgIHNlbGYubXlfaW1hZ2VzX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICBzZXR0aW5nc19idXR0b24gPSBzZWxmLmFwcGVuZF90b29sYmFyX2J1dHRvbihzZWxmLnRvb2xiYXIsCisgICAgICAgICAgICAiU2V0dGluZ3MiLAorICAgICAgICAgICAgaGljLklDT05fU0VUVElOR1NfRElTUExBWV9GSUxFLAorICAgICAgICAgICAgaGljLklDT05fU0VUVElOR1NfSE9WRVJfRklMRSwKKyAgICAgICAgICAgICJWaWV3IGFkZGl0aW9uYWwgYnVpbGQgc2V0dGluZ3MiLAorICAgICAgICAgICAgc2VsZi5zZXR0aW5nc19idXR0b25fY2xpY2tlZF9jYikKKworICAgICAgICBzZWxmLmRldGFpbHNfdG9wX2J1dHRvbnMgPSBzZWxmLmFkZF9vbnRvX3RvcF9iYXIoc2VsZi50b29sYmFyKQorCisgICAgZGVmIF9yZW1vdmVfYWxsX3dpZGdldChzZWxmKToKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLmdldF9jaGlsZHJlbigpIG9yIFtdCisgICAgICAgIGZvciBjaGlsZCBpbiBjaGlsZHJlbjoKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlKGNoaWxkKQorICAgICAgICBjaGlsZHJlbiA9IHNlbGYuYm94X2dyb3VwX2FyZWEuZ2V0X2NoaWxkcmVuKCkgb3IgW10KKyAgICAgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5yZW1vdmUoY2hpbGQpCisgICAgICAgIGNoaWxkcmVuID0gc2VsZi5kZXRhaWxzX2JvdHRvbV9idXR0b25zLmdldF9jaGlsZHJlbigpIG9yIFtdCisgICAgICAgIGZvciBjaGlsZCBpbiBjaGlsZHJlbjoKKyAgICAgICAgICAgIHNlbGYuZGV0YWlsc19ib3R0b21fYnV0dG9ucy5yZW1vdmUoY2hpbGQpCisKKyAgICBkZWYgc2hvd19wYWdlKHNlbGYsIHN0ZXApOgorICAgICAgICBzZWxmLmJ1aWxkX3N1Y2NlZWRlZCA9IChzdGVwID09IHNlbGYuYnVpbGRlci5JTUFHRV9HRU5FUkFURUQpCisgICAgICAgIGltYWdlX2FkZHIgPSBzZWxmLmJ1aWxkZXIucGFyYW1ldGVycy5pbWFnZV9hZGRyCisgICAgICAgIGltYWdlX25hbWVzID0gc2VsZi5idWlsZGVyLnBhcmFtZXRlcnMuaW1hZ2VfbmFtZXMKKyAgICAgICAgaWYgc2VsZi5idWlsZF9zdWNjZWVkZWQ6CisgICAgICAgICAgICBtYWNoaW5lID0gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoCisgICAgICAgICAgICBiYXNlX2ltYWdlID0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfaW1hZ2UoKQorICAgICAgICAgICAgbGF5ZXJzID0gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24ubGF5ZXJzCisgICAgICAgICAgICBwa2dfbnVtID0gIiVzIiAlIGxlbihzZWxmLmJ1aWxkZXIucGFja2FnZV9tb2RlbC5nZXRfc2VsZWN0ZWRfcGFja2FnZXMoKSkKKyAgICAgICAgICAgIGxvZ19maWxlID0gc2VsZi5idWlsZGVyLmN1cnJlbnRfbG9nZmlsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtnX251bSA9ICJOL0EiCisgICAgICAgICAgICBsb2dfZmlsZSA9IE5vbmUKKworICAgICAgICAjIHJlbW92ZQorICAgICAgICBmb3IgYnV0dG9uX2lkLCBidXR0b24gaW4gc2VsZi5idXR0b25faWRzLml0ZW1zKCk6CisgICAgICAgICAgICBidXR0b24uZGlzY29ubmVjdChidXR0b25faWQpCisgICAgICAgIHNlbGYuX3JlbW92ZV9hbGxfd2lkZ2V0KCkKKworICAgICAgICAjIHJlcGFjaworICAgICAgICBzZWxmLnBhY2tfc3RhcnQoc2VsZi5kZXRhaWxzX3RvcF9idXR0b25zLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLmdyb3VwX2FsaWduLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYuYnVpbGRfcmVzdWx0ID0gTm9uZQorICAgICAgICBpZiBzZWxmLmltYWdlX3NhdmVkIG9yIChzZWxmLmJ1aWxkX3N1Y2NlZWRlZCBhbmQgc2VsZi5idWlsZGVyLmN1cnJlbnRfc3RlcCA9PSBzZWxmLmJ1aWxkZXIuSU1BR0VfR0VORVJBVElORyk6CisgICAgICAgICAgICAjIGJ1aWxkaW5nIGlzIHRoZSBwcmV2aW91cyBzdGVwCisgICAgICAgICAgICBpY29uID0gZ3RrLkltYWdlKCkKKyAgICAgICAgICAgIHBpeG1hcF9wYXRoID0gaGljLklDT05fSU5ESV9DT05GSVJNX0ZJTEUKKyAgICAgICAgICAgIGNvbG9yID0gSG9iQ29sb3JzLlJVTk5JTkcKKyAgICAgICAgICAgIHBpeF9idWZmZXIgPSBndGsuZ2RrLnBpeGJ1Zl9uZXdfZnJvbV9maWxlKHBpeG1hcF9wYXRoKQorICAgICAgICAgICAgaWNvbi5zZXRfZnJvbV9waXhidWYocGl4X2J1ZmZlcikKKyAgICAgICAgICAgIHZhcmxpc3QgPSBbIiJdCisgICAgICAgICAgICBpZiBzZWxmLmltYWdlX3NhdmVkOgorICAgICAgICAgICAgICAgIHZhbGxpc3QgPSBbIllvdXIgaW1hZ2UgcmVjaXBlIGhhcyBiZWVuIHNhdmVkIl0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmFsbGlzdCA9IFsiWW91ciBpbWFnZSBpcyByZWFkeSJdCisgICAgICAgICAgICBzZWxmLmJ1aWxkX3Jlc3VsdCA9IHNlbGYuQnVpbGREZXRhaWxCb3godmFybGlzdD12YXJsaXN0LCB2YWxsaXN0PXZhbGxpc3QsIGljb249aWNvbiwgY29sb3I9Y29sb3IpCisgICAgICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi5idWlsZF9yZXN1bHQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzZWxmLmJ1dHRvbmxpc3QgPSBbIkJ1aWxkIG5ldyBpbWFnZSIsICJTYXZlIGltYWdlIHJlY2lwZSIsICJSdW4gaW1hZ2UiLCAiRGVwbG95IGltYWdlIl0KKworICAgICAgICAjIE5hbWUKKyAgICAgICAgc2VsZi5pbWFnZV9zdG9yZSA9IFtdCisgICAgICAgIHNlbGYudG9nZ2xlZF9pbWFnZSA9ICIiCisgICAgICAgIGRlZmF1bHRfaW1hZ2Vfc2l6ZSA9IDAKKyAgICAgICAgc2VsZi5udW1fdG9nZ2xlZCA9IDAKKyAgICAgICAgaSA9IDAKKyAgICAgICAgZm9yIGltYWdlX25hbWUgaW4gaW1hZ2VfbmFtZXM6CisgICAgICAgICAgICBpbWFnZV9zaXplID0gSG9iUGFnZS5fc2l6ZV90b19zdHJpbmcob3Muc3RhdChvcy5wYXRoLmpvaW4oaW1hZ2VfYWRkciwgaW1hZ2VfbmFtZSkpLnN0X3NpemUpCisKKyAgICAgICAgICAgIGltYWdlX2F0dHIgPSAoInJ1biIgaWYgKHNlbGYudGVzdF90eXBlX3J1bm5hYmxlKGltYWdlX25hbWUpIGFuZCBzZWxmLnRlc3RfbWFjaF9ydW5uYWJsZShpbWFnZV9uYW1lKSkgZWxzZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICgiZGVwbG95IiBpZiBzZWxmLnRlc3RfZGVwbG95YWJsZShpbWFnZV9uYW1lKSBlbHNlICIiKSkKKyAgICAgICAgICAgIGlzX3RvZ2dsZWQgPSAoaW1hZ2VfYXR0ciAhPSAiIikKKworICAgICAgICAgICAgaWYgbm90IHNlbGYudG9nZ2xlZF9pbWFnZToKKyAgICAgICAgICAgICAgICBpZiBpID09IChsZW4oaW1hZ2VfbmFtZXMpIC0gMSk6CisgICAgICAgICAgICAgICAgICAgIGlzX3RvZ2dsZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgaXNfdG9nZ2xlZDoKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9pbWFnZV9zaXplID0gaW1hZ2Vfc2l6ZQorICAgICAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZWRfaW1hZ2UgPSBpbWFnZV9uYW1lCisKKyAgICAgICAgICAgIHNwbGl0X3N0dWZmID0gaW1hZ2VfbmFtZS5zcGxpdCgnLicpCisgICAgICAgICAgICBpZiAicm9vdGZzIiBpbiBzcGxpdF9zdHVmZjoKKyAgICAgICAgICAgICAgICBpbWFnZV90eXBlID0gaW1hZ2VfbmFtZVsobGVuKHNwbGl0X3N0dWZmWzBdKSArIGxlbigiLnJvb3RmcyIpICsgMSk6XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbWFnZV90eXBlID0gaW1hZ2VfbmFtZVsobGVuKHNwbGl0X3N0dWZmWzBdKSArIDEpOl0KKworICAgICAgICAgICAgc2VsZi5pbWFnZV9zdG9yZS5hcHBlbmQoeyduYW1lJzogaW1hZ2VfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogaW1hZ2VfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplJzogaW1hZ2Vfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc190b2dnbGVkJzogaXNfdG9nZ2xlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb25fYXR0cic6IGltYWdlX2F0dHIsfSkKKworICAgICAgICAgICAgaSA9IGkgKyAxCisgICAgICAgICAgICBzZWxmLm51bV90b2dnbGVkICs9IGlzX3RvZ2dsZWQKKworICAgICAgICBpc19ydW5uYWJsZSA9IHNlbGYuY3JlYXRlX2JvdHRvbV9idXR0b25zKHNlbGYuYnV0dG9ubGlzdCwgc2VsZi50b2dnbGVkX2ltYWdlKQorCisgICAgICAgICMgR2VuZXJhdGVkIGltYWdlIGZpbGVzIGluZm8KKyAgICAgICAgdmFybGlzdCA9IFsiTmFtZTogIiwgIkZpbGVzIGNyZWF0ZWQ6ICIsICJEaXJlY3Rvcnk6ICJdCisgICAgICAgIHZhbGxpc3QgPSBbXQorCisgICAgICAgIHZhbGxpc3QuYXBwZW5kKGltYWdlX25hbWUuc3BsaXQoJy4nKVswXSkKKyAgICAgICAgdmFsbGlzdC5hcHBlbmQoJywgICcuam9pbihmaWxlaXRlbVsndHlwZSddIGZvciBmaWxlaXRlbSBpbiBzZWxmLmltYWdlX3N0b3JlKSkKKyAgICAgICAgdmFsbGlzdC5hcHBlbmQoaW1hZ2VfYWRkcikKKworICAgICAgICB2aWV3X2ZpbGVzX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiVmlldyBmaWxlcyIpCisgICAgICAgIHZpZXdfZmlsZXNfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLnZpZXdfZmlsZXNfY2xpY2tlZF9jYiwgaW1hZ2VfYWRkcikKKyAgICAgICAgdmlld19maWxlc19idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiT3BlbiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGltYWdlIGZpbGVzIikKKyAgICAgICAgb3Blbl9sb2dfYnV0dG9uID0gTm9uZQorICAgICAgICBpZiBsb2dfZmlsZToKKyAgICAgICAgICAgIG9wZW5fbG9nX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiT3BlbiBsb2ciKQorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLm9wZW5fbG9nX2NsaWNrZWRfY2IsIGxvZ19maWxlKQorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIk9wZW4gdGhlIGJ1aWxkJ3MgbG9nIGZpbGUiKQorICAgICAgICBzZWxmLmltYWdlX2RldGFpbCA9IHNlbGYuRGV0YWlsQm94KHZhcmxpc3Q9dmFybGlzdCwgdmFsbGlzdD12YWxsaXN0LCBidXR0b249dmlld19maWxlc19idXR0b24sIGJ1dHRvbjI9b3Blbl9sb2dfYnV0dG9uKQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi5pbWFnZV9kZXRhaWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1UcnVlKQorCisgICAgICAgICMgVGhlIGRlZmF1bHQga2VybmVsIGJveCBmb3IgdGhlIHFlbXUgaW1hZ2VzCisgICAgICAgIHNlbGYuc2VsX2tlcm5lbCA9ICIiCisgICAgICAgIHNlbGYua2VybmVsX2RldGFpbCA9IE5vbmUKKyAgICAgICAgaWYgJ3FlbXUnIGluIGltYWdlX25hbWU6CisgICAgICAgICAgICBzZWxmLnNlbF9rZXJuZWwgPSBzZWxmLmdldF9rZXJuZWxfZmlsZV9uYW1lKCkKKworICAgICAgICAjICAgIHZhcmxpc3QgPSBbIktlcm5lbDogIl0KKyAgICAgICAgIyAgICB2YWxsaXN0ID0gW10KKyAgICAgICAgIyAgICB2YWxsaXN0LmFwcGVuZChzZWxmLnNlbF9rZXJuZWwpCisKKyAgICAgICAgIyAgICBjaGFuZ2Vfa2VybmVsX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiQ2hhbmdlIikKKyAgICAgICAgIyAgICBjaGFuZ2Vfa2VybmVsX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5jaGFuZ2Vfa2VybmVsX2NiKQorICAgICAgICAjICAgIGNoYW5nZV9rZXJuZWxfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkNoYW5nZSBxZW11IGtlcm5lbCBmaWxlIikKKyAgICAgICAgIyAgICBzZWxmLmtlcm5lbF9kZXRhaWwgPSBzZWxmLkRldGFpbEJveCh2YXJsaXN0PXZhcmxpc3QsIHZhbGxpc3Q9dmFsbGlzdCwgYnV0dG9uPWNoYW5nZV9rZXJuZWxfYnV0dG9uKQorICAgICAgICAjICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLmtlcm5lbF9kZXRhaWwsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgIyBNYWNoaW5lLCBJbWFnZSByZWNpcGUgYW5kIExheWVycworICAgICAgICBsYXllcl9udW1fbGltaXQgPSAxNQorICAgICAgICB2YXJsaXN0ID0gWyJNYWNoaW5lOiAiLCAiSW1hZ2UgcmVjaXBlOiAiLCAiTGF5ZXJzOiAiXQorICAgICAgICB2YWxsaXN0ID0gW10KKyAgICAgICAgc2VsZi5zZXR0aW5nX2RldGFpbCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5idWlsZF9zdWNjZWVkZWQ6CisgICAgICAgICAgICB2YWxsaXN0LmFwcGVuZChtYWNoaW5lKQorICAgICAgICAgICAgaWYgc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5pc19jdXN0b21faW1hZ2UoKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5pbml0aWFsX3NlbGVjdGVkX2ltYWdlID09IHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXzoKKyAgICAgICAgICAgICAgICAgICAgYmFzZV9pbWFnZSA9Ik5ldyBpbWFnZSByZWNpcGUiCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmFzZV9pbWFnZSA9IHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLmluaXRpYWxfc2VsZWN0ZWRfaW1hZ2UgKyAiIChlZGl0ZWQpIgorICAgICAgICAgICAgdmFsbGlzdC5hcHBlbmQoYmFzZV9pbWFnZSkKKyAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgorICAgICAgICAgICAgICAgIGlmIGkgPiBsYXllcl9udW1fbGltaXQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgdmFybGlzdC5hcHBlbmQoIiAtICIpCisgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICB2YWxsaXN0LmFwcGVuZCgiIikKKyAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgorICAgICAgICAgICAgICAgIGlmIGkgPiBsYXllcl9udW1fbGltaXQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxpZiBpID09IGxheWVyX251bV9saW1pdDoKKyAgICAgICAgICAgICAgICAgICAgdmFsbGlzdC5hcHBlbmQoImFuZCBtb3JlLi4uIikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB2YWxsaXN0LmFwcGVuZChsYXllcikKKyAgICAgICAgICAgICAgICBpICs9IDEKKworICAgICAgICAgICAgZWRpdF9jb25maWdfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJFZGl0IGNvbmZpZ3VyYXRpb24iKQorICAgICAgICAgICAgZWRpdF9jb25maWdfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkVkaXQgbWFjaGluZSBhbmQgaW1hZ2UgcmVjaXBlIikKKyAgICAgICAgICAgIGVkaXRfY29uZmlnX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5lZGl0X2NvbmZpZ19idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgICAgIHNlbGYuc2V0dGluZ19kZXRhaWwgPSBzZWxmLkRldGFpbEJveCh2YXJsaXN0PXZhcmxpc3QsIHZhbGxpc3Q9dmFsbGlzdCwgYnV0dG9uPWVkaXRfY29uZmlnX2J1dHRvbikKKyAgICAgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLnNldHRpbmdfZGV0YWlsLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgICMgUGFja2FnZXMgaW5jbHVkZWQsIGFuZCBUb3RhbCBpbWFnZSBzaXplCisgICAgICAgIHZhcmxpc3QgPSBbIlBhY2thZ2VzIGluY2x1ZGVkOiAiLCAiVG90YWwgaW1hZ2Ugc2l6ZTogIl0KKyAgICAgICAgdmFsbGlzdCA9IFtdCisgICAgICAgIHZhbGxpc3QuYXBwZW5kKHBrZ19udW0pCisgICAgICAgIHZhbGxpc3QuYXBwZW5kKGRlZmF1bHRfaW1hZ2Vfc2l6ZSkKKyAgICAgICAgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uaW1hZ2Vfc2l6ZSA9IGRlZmF1bHRfaW1hZ2Vfc2l6ZQorICAgICAgICBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5pbWFnZV9wYWNrYWdlcyA9IHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLnNlbGVjdGVkX3BhY2thZ2VzCisgICAgICAgIGlmIHNlbGYuYnVpbGRfc3VjY2VlZGVkOgorICAgICAgICAgICAgZWRpdF9wYWNrYWdlc19idXR0b24gPSBIb2JBbHRCdXR0b24oIkVkaXQgcGFja2FnZXMiKQorICAgICAgICAgICAgZWRpdF9wYWNrYWdlc19idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiRWRpdCB0aGUgcGFja2FnZXMgaW5jbHVkZWQgaW4geW91ciBpbWFnZSIpCisgICAgICAgICAgICBlZGl0X3BhY2thZ2VzX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5lZGl0X3BhY2thZ2VzX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICBlbHNlOiAjIGdldCB0byB0aGlzIHBhZ2UgZnJvbSAiTXkgaW1hZ2VzIgorICAgICAgICAgICAgZWRpdF9wYWNrYWdlc19idXR0b24gPSBOb25lCisgICAgICAgIHNlbGYucGFja2FnZV9kZXRhaWwgPSBzZWxmLkRldGFpbEJveCh2YXJsaXN0PXZhcmxpc3QsIHZhbGxpc3Q9dmFsbGlzdCwgYnV0dG9uPWVkaXRfcGFja2FnZXNfYnV0dG9uKQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi5wYWNrYWdlX2RldGFpbCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICAjIHBhY2sgdGhlIGJ1dHRvbnMgYXQgdGhlIGJvdHRvbSwgYXQgdGhpcyB0aW1lIHRoZXkgYXJlIGFscmVhZHkgY3JlYXRlZC4KKyAgICAgICAgaWYgc2VsZi5idWlsZF9zdWNjZWVkZWQ6CisgICAgICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfZW5kKHNlbGYuZGV0YWlsc19ib3R0b21fYnV0dG9ucywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBlbHNlOiAjIGZvciAiTXkgaW1hZ2VzIiBwYWdlCisgICAgICAgICAgICBzZWxmLmRldGFpbHNfc2VwYXJhdG9yID0gZ3RrLkhTZXBhcmF0b3IoKQorICAgICAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYuZGV0YWlsc19zZXBhcmF0b3IsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLmRldGFpbHNfYm90dG9tX2J1dHRvbnMsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzZWxmLnNob3dfYWxsKCkKKyAgICAgICAgaWYgc2VsZi5rZXJuZWxfZGV0YWlsIGFuZCAobm90IGlzX3J1bm5hYmxlKToKKyAgICAgICAgICAgIHNlbGYua2VybmVsX2RldGFpbC5oaWRlKCkKKyAgICAgICAgc2VsZi5pbWFnZV9zYXZlZCA9IEZhbHNlCisKKyAgICBkZWYgdmlld19maWxlc19jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbiwgaW1hZ2VfYWRkcik6CisgICAgICAgIHN1YnByb2Nlc3MuY2FsbCgieGRnLW9wZW4gLyVzIiAlIGltYWdlX2FkZHIsIHNoZWxsPVRydWUpCisKKyAgICBkZWYgb3Blbl9sb2dfY2xpY2tlZF9jYihzZWxmLCBidXR0b24sIGxvZ19maWxlKToKKyAgICAgICAgaWYgbG9nX2ZpbGU6CisgICAgICAgICAgICBsb2dfZmlsZSA9ICJmaWxlOi8vLyIgKyBsb2dfZmlsZQorICAgICAgICAgICAgZ3RrLnNob3dfdXJpKHNjcmVlbj1idXR0b24uZ2V0X3NjcmVlbigpLCB1cmk9bG9nX2ZpbGUsIHRpbWVzdGFtcD0wKQorCisgICAgZGVmIHJlZnJlc2hfcGFja2FnZV9kZXRhaWxfYm94KHNlbGYsIGltYWdlX3NpemUpOgorICAgICAgICBzZWxmLnBhY2thZ2VfZGV0YWlsLnVwZGF0ZV9saW5lX3dpZGdldHMoIlRvdGFsIGltYWdlIHNpemU6ICIsIGltYWdlX3NpemUpCisKKyAgICBkZWYgdGVzdF90eXBlX3J1bm5hYmxlKHNlbGYsIGltYWdlX25hbWUpOgorICAgICAgICB0eXBlX3J1bm5hYmxlID0gRmFsc2UKKyAgICAgICAgZm9yIHQgaW4gc2VsZi5idWlsZGVyLnBhcmFtZXRlcnMucnVubmFibGVfaW1hZ2VfdHlwZXM6CisgICAgICAgICAgICBpZiBpbWFnZV9uYW1lLmVuZHN3aXRoKHQpOgorICAgICAgICAgICAgICAgIHR5cGVfcnVubmFibGUgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIHR5cGVfcnVubmFibGUKKworICAgIGRlZiB0ZXN0X21hY2hfcnVubmFibGUoc2VsZiwgaW1hZ2VfbmFtZSk6CisgICAgICAgIG1hY2hfcnVubmFibGUgPSBGYWxzZQorICAgICAgICBmb3IgdCBpbiBzZWxmLmJ1aWxkZXIucGFyYW1ldGVycy5ydW5uYWJsZV9tYWNoaW5lX3BhdHRlcm5zOgorICAgICAgICAgICAgaWYgdCBpbiBpbWFnZV9uYW1lOgorICAgICAgICAgICAgICAgIG1hY2hfcnVubmFibGUgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIG1hY2hfcnVubmFibGUKKworICAgIGRlZiB0ZXN0X2RlcGxveWFibGUoc2VsZiwgaW1hZ2VfbmFtZSk6CisgICAgICAgIGlmIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLmN1cnJfbWFjaC5zdGFydHN3aXRoKCJxZW11Iik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZGVwbG95YWJsZSA9IEZhbHNlCisgICAgICAgIGZvciB0IGluIHNlbGYuYnVpbGRlci5wYXJhbWV0ZXJzLmRlcGxveWFibGVfaW1hZ2VfdHlwZXM6CisgICAgICAgICAgICBpZiBpbWFnZV9uYW1lLmVuZHN3aXRoKHQpOgorICAgICAgICAgICAgICAgIGRlcGxveWFibGUgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIGRlcGxveWFibGUKKworICAgIGRlZiBnZXRfa2VybmVsX2ZpbGVfbmFtZShzZWxmLCBrZXJuZWxfYWRkcj0iIik6CisgICAgICAgIGtlcm5lbF9uYW1lID0gIiIKKworICAgICAgICBpZiBub3Qga2VybmVsX2FkZHI6CisgICAgICAgICAgICBrZXJuZWxfYWRkciA9IHNlbGYuYnVpbGRlci5wYXJhbWV0ZXJzLmltYWdlX2FkZHIKKworICAgICAgICBmaWxlcyA9IFtmIGZvciBmIGluIG9zLmxpc3RkaXIoa2VybmVsX2FkZHIpIGlmIGZbMF0gPD4gJy4nXQorICAgICAgICBmb3IgY2hlY2tfZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIGNoZWNrX2ZpbGUuZW5kc3dpdGgoIi5iaW4iKToKKyAgICAgICAgICAgICAgICBuYW1lX3NwbGl0cyA9IGNoZWNrX2ZpbGUuc3BsaXQoIi4iKVswXQorICAgICAgICAgICAgICAgIGlmIHNlbGYuYnVpbGRlci5wYXJhbWV0ZXJzLmtlcm5lbF9pbWFnZV90eXBlIGluIG5hbWVfc3BsaXRzLnNwbGl0KCItIik6CisgICAgICAgICAgICAgICAgICAgIGtlcm5lbF9uYW1lID0gY2hlY2tfZmlsZQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHJldHVybiBrZXJuZWxfbmFtZQorCisgICAgZGVmIHNob3dfYnVpbGRlZF9pbWFnZXNfZGlhbG9nKHNlbGYsIHdpZGdldCwgcHJpbWFyeV9hY3Rpb249IiIpOgorICAgICAgICB0aXRsZSA9IHByaW1hcnlfYWN0aW9uIGlmIHByaW1hcnlfYWN0aW9uIGVsc2UgIllvdXIgYnVpbGRlZCBpbWFnZXMiCisgICAgICAgIGRpYWxvZyA9IENydW1ic0RpYWxvZyh0aXRsZSwgc2VsZi5idWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkRJQUxPR19NT0RBTCB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCkKKyAgICAgICAgZGlhbG9nLnNldF9ib3JkZXJfd2lkdGgoMTIpCisKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbC5zZXRfdXNlX21hcmt1cChUcnVlKQorICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBsYWJlbC5zZXRfcGFkZGluZygxMiwwKQorICAgICAgICBpZiBwcmltYXJ5X2FjdGlvbiA9PSAiUnVuIGltYWdlIjoKKyAgICAgICAgICAgIGxhYmVsLnNldF9tYXJrdXAoIjxzcGFuIGZvbnRfZGVzYz0nMTInPlNlbGVjdCB0aGUgaW1hZ2UgZmlsZSB5b3Ugd2FudCB0byBydW46PC9zcGFuPiIpCisgICAgICAgIGVsaWYgcHJpbWFyeV9hY3Rpb24gPT0gIkRlcGxveSBpbWFnZSI6CisgICAgICAgICAgICBsYWJlbC5zZXRfbWFya3VwKCI8c3BhbiBmb250X2Rlc2M9JzEyJz5TZWxlY3QgdGhlIGltYWdlIGZpbGUgeW91IHdhbnQgdG8gZGVwbG95Ojwvc3Bhbj4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGFiZWwuc2V0X21hcmt1cCgiPHNwYW4gZm9udF9kZXNjPScxMic+U2VsZWN0IHRoZSBpbWFnZSBmaWxlIHlvdSB3YW50IHRvICVzPC9zcGFuPiIgJSBwcmltYXJ5X2FjdGlvbikKKyAgICAgICAgZGlhbG9nLnZib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgICMgZmlsdGVyIGNyZWF0ZWQgaW1hZ2VzIGFzIGFjdGlvbiBhdHRyaWJ1dGlvbiAoZGVwbG95IG9yIHJ1bikKKyAgICAgICAgYWN0aW9uX2F0dHIgPSAiIgorICAgICAgICBhY3Rpb25faW1hZ2VzID0gW10KKyAgICAgICAgZm9yIGZpbGVpdGVtIGluIHNlbGYuaW1hZ2Vfc3RvcmU6CisgICAgICAgICAgICBhY3Rpb25fYXR0ciA9IGZpbGVpdGVtWydhY3Rpb25fYXR0ciddCisgICAgICAgICAgICBpZiAgKGFjdGlvbl9hdHRyID09ICdydW4nIGFuZCBwcmltYXJ5X2FjdGlvbiA9PSAiUnVuIGltYWdlIikgXAorICAgICAgICAgICAgIG9yIChhY3Rpb25fYXR0ciA9PSAnZGVwbG95JyBhbmQgcHJpbWFyeV9hY3Rpb24gPT0gIkRlcGxveSBpbWFnZSIpOgorICAgICAgICAgICAgICAgIGFjdGlvbl9pbWFnZXMuYXBwZW5kKGZpbGVpdGVtKQorCisgICAgICAgICMgcGFjayB0aGUgY29ycmVzcG9uZGluZyAncnVubmFibGUnIG9yICdkZXBsb3knIHJhZGlvX2J1dHRvbnMsIGlmIHRoZXJlIGhhcyBubyBtb3JlIHRoYW4gb25lIGZpbGUuCisgICAgICAgICMgYXNzdW1lIHRoYXQgdGhlcmUgZG9lcyBub3QgYm90aCBoYXZlICdkZXBsb3knIGFuZCAncnVubmFibGUnIGZpbGVzIGluIHRoZSBzYW1lIGJ1aWxkaW5nIHJlc3VsdAorICAgICAgICAjIGluIHBvc3NpYmxlIGFzIGRlc2lnbi4KKyAgICAgICAgY3Vycl9yb3cgPSAwCisgICAgICAgIHJvd3MgPSAobGVuKGFjdGlvbl9pbWFnZXMpKSBpZiBsZW4oYWN0aW9uX2ltYWdlcykgPCAxMCBlbHNlIDEwCisgICAgICAgIHRhYmxlID0gZ3RrLlRhYmxlKHJvd3MsIDEwLCBUcnVlKQorICAgICAgICB0YWJsZS5zZXRfcm93X3NwYWNpbmdzKDYpCisgICAgICAgIHRhYmxlLnNldF9jb2xfc3BhY2luZygwLCAxMikKKyAgICAgICAgdGFibGUuc2V0X2NvbF9zcGFjaW5nKDUsIDEyKQorCisgICAgICAgIHNlbF9wYXJlbnRfYnRuID0gTm9uZQorICAgICAgICBmb3IgZmlsZWl0ZW0gaW4gYWN0aW9uX2ltYWdlczoKKyAgICAgICAgICAgIHNlbF9idG4gPSBndGsuUmFkaW9CdXR0b24oc2VsX3BhcmVudF9idG4sIGZpbGVpdGVtWyd0eXBlJ10pCisgICAgICAgICAgICBzZWxfcGFyZW50X2J0biA9IHNlbF9idG4gaWYgbm90IHNlbF9wYXJlbnRfYnRuIGVsc2Ugc2VsX3BhcmVudF9idG4KKyAgICAgICAgICAgIHNlbF9idG4uc2V0X2FjdGl2ZShmaWxlaXRlbVsnaXNfdG9nZ2xlZCddKQorICAgICAgICAgICAgc2VsX2J0bi5jb25uZWN0KCd0b2dnbGVkJywgc2VsZi50YWJsZV9zZWxlY3RlZF9jYiwgZmlsZWl0ZW0pCisgICAgICAgICAgICBpZiBjdXJyX3JvdyA8IDEwOgorICAgICAgICAgICAgICAgIHRhYmxlLmF0dGFjaChzZWxfYnRuLCAwLCA0LCBjdXJyX3JvdywgY3Vycl9yb3cgKyAxLCB4cGFkZGluZz0yNCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGFibGUuYXR0YWNoKHNlbF9idG4sIDUsIDksIGN1cnJfcm93IC0gMTAsIGN1cnJfcm93IC0gOSwgeHBhZGRpbmc9MjQpCisgICAgICAgICAgICBjdXJyX3JvdyArPSAxCisKKyAgICAgICAgZGlhbG9nLnZib3gucGFja19zdGFydCh0YWJsZSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTYpCisKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9DQU5DRUwpCisgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorCisgICAgICAgIGlmIHByaW1hcnlfYWN0aW9uOgorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24ocHJpbWFyeV9hY3Rpb24sIGd0ay5SRVNQT05TRV9ZRVMpCisgICAgICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKworICAgICAgICBkaWFsb2cuc2hvd19hbGwoKQorCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgICAgICBpZiByZXNwb25zZSAhPSBndGsuUkVTUE9OU0VfWUVTOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZm9yIGZpbGVpdGVtIGluIHNlbGYuaW1hZ2Vfc3RvcmU6CisgICAgICAgICAgICBpZiBmaWxlaXRlbVsnaXNfdG9nZ2xlZCddOgorICAgICAgICAgICAgICAgIGlmIGZpbGVpdGVtWydhY3Rpb25fYXR0ciddID09ICdydW4nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkZXIucnVucWVtdV9pbWFnZShmaWxlaXRlbVsnbmFtZSddLCBzZWxmLnNlbF9rZXJuZWwpCisgICAgICAgICAgICAgICAgZWxpZiBmaWxlaXRlbVsnYWN0aW9uX2F0dHInXSA9PSAnZGVwbG95JzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5idWlsZGVyLmRlcGxveV9pbWFnZShmaWxlaXRlbVsnbmFtZSddKQorCisgICAgZGVmIHRhYmxlX3NlbGVjdGVkX2NiKHNlbGYsIHRidXR0b24sIGltYWdlKToKKyAgICAgICAgaW1hZ2VbJ2lzX3RvZ2dsZWQnXSA9IHRidXR0b24uZ2V0X2FjdGl2ZSgpCisgICAgICAgIGlmIGltYWdlWydpc190b2dnbGVkJ106CisgICAgICAgICAgICBzZWxmLnRvZ2dsZWRfaW1hZ2UgPSBpbWFnZVsnbmFtZSddCisKKyAgICBkZWYgY2hhbmdlX2tlcm5lbF9jYihzZWxmLCB3aWRnZXQpOgorICAgICAgICBrZXJuZWxfcGF0aCA9IHNlbGYuYnVpbGRlci5zaG93X2xvYWRfa2VybmVsX2RpYWxvZygpCisgICAgICAgIGlmIGtlcm5lbF9wYXRoIGFuZCBzZWxmLmtlcm5lbF9kZXRhaWw6CisgICAgICAgICAgICBpbXBvcnQgb3MucGF0aAorICAgICAgICAgICAgc2VsZi5zZWxfa2VybmVsID0gb3MucGF0aC5iYXNlbmFtZShrZXJuZWxfcGF0aCkKKyAgICAgICAgICAgIG1hcmt1cCA9IHNlbGYua2VybmVsX2RldGFpbC5mb3JtYXRfbGluZSgiS2VybmVsOiAiLCBzZWxmLnNlbF9rZXJuZWwpCisgICAgICAgICAgICBsYWJlbCA9ICgoc2VsZi5rZXJuZWxfZGV0YWlsLmdldF9jaGlsZHJlbigpWzBdKS5nZXRfY2hpbGRyZW4oKVswXSkuZ2V0X2NoaWxkcmVuKClbMF0KKyAgICAgICAgICAgIGxhYmVsLnNldF9tYXJrdXAobWFya3VwKQorCisgICAgZGVmIGNyZWF0ZV9ib3R0b21fYnV0dG9ucyhzZWxmLCBidXR0b25saXN0LCBpbWFnZV9uYW1lKToKKyAgICAgICAgIyBDcmVhdGUgdGhlIGJ1dHRvbnMgYXQgdGhlIGJvdHRvbQorICAgICAgICBjcmVhdGVkID0gRmFsc2UKKyAgICAgICAgcGFja2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5idXR0b25faWRzID0ge30KKyAgICAgICAgaXNfcnVubmFibGUgPSBGYWxzZQorCisgICAgICAgICMgY3JlYXRlIGJ1dHRvbiAiRGVwbG95IGltYWdlIgorICAgICAgICBuYW1lID0gIkRlcGxveSBpbWFnZSIKKyAgICAgICAgaWYgbmFtZSBpbiBidXR0b25saXN0IGFuZCBzZWxmLnRlc3RfZGVwbG95YWJsZShpbWFnZV9uYW1lKToKKyAgICAgICAgICAgIGRlcGxveV9idXR0b24gPSBIb2JCdXR0b24oJ0RlcGxveSBpbWFnZScpCisgICAgICAgICAgICAjZGVwbG95X2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDIwNSwgNDkpCisgICAgICAgICAgICBkZXBsb3lfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkJ1cm4gYSBsaXZlIGltYWdlIHRvIGEgVVNCIGRyaXZlIG9yIGZsYXNoIG1lbW9yeSIpCisgICAgICAgICAgICBkZXBsb3lfYnV0dG9uLnNldF9mbGFncyhndGsuQ0FOX0RFRkFVTFQpCisgICAgICAgICAgICBidXR0b25faWQgPSBkZXBsb3lfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmRlcGxveV9idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgICAgIHNlbGYuYnV0dG9uX2lkc1tidXR0b25faWRdID0gZGVwbG95X2J1dHRvbgorICAgICAgICAgICAgc2VsZi5kZXRhaWxzX2JvdHRvbV9idXR0b25zLnBhY2tfZW5kKGRlcGxveV9idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgICAgIGNyZWF0ZWQgPSBUcnVlCisgICAgICAgICAgICBwYWNrZWQgPSBUcnVlCisKKyAgICAgICAgbmFtZSA9ICJSdW4gaW1hZ2UiCisgICAgICAgIGlmIG5hbWUgaW4gYnV0dG9ubGlzdCBhbmQgc2VsZi50ZXN0X3R5cGVfcnVubmFibGUoaW1hZ2VfbmFtZSkgYW5kIHNlbGYudGVzdF9tYWNoX3J1bm5hYmxlKGltYWdlX25hbWUpOgorICAgICAgICAgICAgaWYgY3JlYXRlZCA9PSBUcnVlOgorICAgICAgICAgICAgICAgICMgc2VwYXJhdG9yCisgICAgICAgICAgICAgICAgI2xhYmVsID0gZ3RrLkxhYmVsKCIgb3IgIikKKyAgICAgICAgICAgICAgICAjc2VsZi5kZXRhaWxzX2JvdHRvbV9idXR0b25zLnBhY2tfZW5kKGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgICAgICAgICAjIGNyZWF0ZSBidXR0b24gIlJ1biBpbWFnZSIKKyAgICAgICAgICAgICAgICBydW5fYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJSdW4gaW1hZ2UiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGNyZWF0ZSBidXR0b24gIlJ1biBpbWFnZSIgYXMgdGhlIHByaW1hcnkgYnV0dG9uCisgICAgICAgICAgICAgICAgcnVuX2J1dHRvbiA9IEhvYkJ1dHRvbigiUnVuIGltYWdlIikKKyAgICAgICAgICAgICAgICAjcnVuX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDIwNSwgNDkpCisgICAgICAgICAgICAgICAgcnVuX2J1dHRvbi5zZXRfZmxhZ3MoZ3RrLkNBTl9ERUZBVUxUKQorICAgICAgICAgICAgICAgIHBhY2tlZCA9IFRydWUKKyAgICAgICAgICAgIHJ1bl9idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiU3RhcnQgdXAgYW4gaW1hZ2Ugd2l0aCBxZW11IGVtdWxhdG9yIikKKyAgICAgICAgICAgIGJ1dHRvbl9pZCA9IHJ1bl9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYucnVuX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICAgICAgc2VsZi5idXR0b25faWRzW2J1dHRvbl9pZF0gPSBydW5fYnV0dG9uCisgICAgICAgICAgICBzZWxmLmRldGFpbHNfYm90dG9tX2J1dHRvbnMucGFja19lbmQocnVuX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgY3JlYXRlZCA9IFRydWUKKyAgICAgICAgICAgIGlzX3J1bm5hYmxlID0gVHJ1ZQorCisgICAgICAgIG5hbWUgPSAiU2F2ZSBpbWFnZSByZWNpcGUiCisgICAgICAgIGlmIG5hbWUgaW4gYnV0dG9ubGlzdCBhbmQgc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5pc19jdXN0b21faW1hZ2UoKToKKyAgICAgICAgICAgIHNhdmVfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJTYXZlIGltYWdlIHJlY2lwZSIpCisgICAgICAgICAgICBzYXZlX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJLZWVwIHlvdXIgY2hhbmdlcyBzYXZpbmcgdGhlbSBhcyBhbiBpbWFnZSByZWNpcGUiKQorICAgICAgICAgICAgc2F2ZV9idXR0b24uc2V0X3NlbnNpdGl2ZShub3Qgc2VsZi5pbWFnZV9zYXZlZCkKKyAgICAgICAgICAgIGJ1dHRvbl9pZCA9IHNhdmVfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLnNhdmVfYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgICAgICBzZWxmLmJ1dHRvbl9pZHNbYnV0dG9uX2lkXSA9IHNhdmVfYnV0dG9uCisgICAgICAgICAgICBzZWxmLmRldGFpbHNfYm90dG9tX2J1dHRvbnMucGFja19lbmQoc2F2ZV9idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBuYW1lID0gIkJ1aWxkIG5ldyBpbWFnZSIKKyAgICAgICAgaWYgbmFtZSBpbiBidXR0b25saXN0OgorICAgICAgICAgICAgIyBjcmVhdGUgYnV0dG9uICJCdWlsZCBuZXcgaW1hZ2UiCisgICAgICAgICAgICBpZiBwYWNrZWQ6CisgICAgICAgICAgICAgICAgYnVpbGRfbmV3X2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiQnVpbGQgbmV3IGltYWdlIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnVpbGRfbmV3X2J1dHRvbiA9IEhvYkJ1dHRvbigiQnVpbGQgbmV3IGltYWdlIikKKyAgICAgICAgICAgICAgICBidWlsZF9uZXdfYnV0dG9uLnNldF9mbGFncyhndGsuQ0FOX0RFRkFVTFQpCisgICAgICAgICAgICAjYnVpbGRfbmV3X2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDIwNSwgNDkpCisgICAgICAgICAgICBzZWxmLmRldGFpbHNfYm90dG9tX2J1dHRvbnMucGFja19lbmQoYnVpbGRfbmV3X2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgYnVpbGRfbmV3X2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJDcmVhdGUgYSBuZXcgaW1hZ2UgZnJvbSBzY3JhdGNoIikKKyAgICAgICAgICAgIGJ1dHRvbl9pZCA9IGJ1aWxkX25ld19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuYnVpbGRfbmV3X2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICAgICAgc2VsZi5idXR0b25faWRzW2J1dHRvbl9pZF0gPSBidWlsZF9uZXdfYnV0dG9uCisKKyAgICAgICAgcmV0dXJuIGlzX3J1bm5hYmxlCisKKyAgICBkZWYgZGVwbG95X2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIGlmIHNlbGYudG9nZ2xlZF9pbWFnZToKKyAgICAgICAgICAgIGlmIHNlbGYubnVtX3RvZ2dsZWQgPiAxOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0X3NlbnNpdGl2ZShGYWxzZSkKKyAgICAgICAgICAgICAgICBzZWxmLnNob3dfYnVpbGRlZF9pbWFnZXNfZGlhbG9nKE5vbmUsICJEZXBsb3kgaW1hZ2UiKQorICAgICAgICAgICAgICAgIHNlbGYuc2V0X3NlbnNpdGl2ZShUcnVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuZGVwbG95X2ltYWdlKHNlbGYudG9nZ2xlZF9pbWFnZSkKKworICAgIGRlZiBydW5fYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgaWYgc2VsZi50b2dnbGVkX2ltYWdlOgorICAgICAgICAgICAgaWYgc2VsZi5udW1fdG9nZ2xlZCA+IDE6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICAgICAgICAgIHNlbGYuc2hvd19idWlsZGVkX2ltYWdlc19kaWFsb2coTm9uZSwgIlJ1biBpbWFnZSIpCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfc2Vuc2l0aXZlKFRydWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRlci5ydW5xZW11X2ltYWdlKHNlbGYudG9nZ2xlZF9pbWFnZSwgc2VsZi5zZWxfa2VybmVsKQorCisgICAgZGVmIHNhdmVfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgdG9wZGlyID0gc2VsZi5idWlsZGVyLmdldF90b3BkaXIoKQorICAgICAgICBpbWFnZXNfZGlyID0gdG9wZGlyICsgIi9yZWNpcGVzL2ltYWdlcy9jdXN0b20vIgorICAgICAgICBzZWxmLmJ1aWxkZXIuZW5zdXJlX2RpcihpbWFnZXNfZGlyKQorCisgICAgICAgIHNlbGYubmFtZV9maWVsZF90ZW1wbGF0ZSA9IHNlbGYuYnVpbGRlci5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UuY3VzdG9tX2ltYWdlX3NlbGVjdGVkCisgICAgICAgIGlmIHNlbGYubmFtZV9maWVsZF90ZW1wbGF0ZToKKyAgICAgICAgICAgIGltYWdlX3BhdGggPSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLnBuX3BhdGhbc2VsZi5uYW1lX2ZpZWxkX3RlbXBsYXRlXQorICAgICAgICAgICAgaW1hZ2VfaXRlciA9IHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuZ2V0X2l0ZXIoaW1hZ2VfcGF0aCkKKyAgICAgICAgICAgIHNlbGYuZGVzY3JpcHRpb25fZmllbGRfdGVtcGxhdGUgPSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLmdldF92YWx1ZShpbWFnZV9pdGVyLCBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLkNPTF9ERVNDKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5uYW1lX2ZpZWxkX3RlbXBsYXRlID0gIiIKKworICAgICAgICBkaWFsb2cgPSBTYXZlSW1hZ2VEaWFsb2coaW1hZ2VzX2Rpciwgc2VsZi5uYW1lX2ZpZWxkX3RlbXBsYXRlLCBzZWxmLmRlc2NyaXB0aW9uX2ZpZWxkX3RlbXBsYXRlLAorICAgICAgICAgICAgICAgICAiU2F2ZSBpbWFnZSByZWNpcGUiLCBzZWxmLmJ1aWxkZXIsIGd0ay5ESUFMT0dfTU9EQUwgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQpCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgIGRlZiBidWlsZF9uZXdfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLmluaXRpYXRlX25ld19idWlsZF9hc3luYygpCisKKyAgICBkZWYgZWRpdF9jb25maWdfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfY29uZmlndXJhdGlvbigpCisKKyAgICBkZWYgZWRpdF9wYWNrYWdlc19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19wYWNrYWdlcygpCisKKyAgICBkZWYgbXlfaW1hZ2VzX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X2xvYWRfbXlfaW1hZ2VzX2RpYWxvZygpCisKKyAgICBkZWYgc2V0dGluZ3NfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgIyBDcmVhdGUgYW4gYWR2YW5jZWQgc2V0dGluZ3MgZGlhbG9nCisgICAgICAgIHJlc3BvbnNlLCBzZXR0aW5nc19jaGFuZ2VkID0gc2VsZi5idWlsZGVyLnNob3dfc2ltcGxlX3NldHRpbmdzX2RpYWxvZygpCisgICAgICAgIGlmIG5vdCByZXNwb25zZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZXR0aW5nc19jaGFuZ2VkOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnJlcGFyc2VfcG9zdF9hZHZfc2V0dGluZ3MoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcGFja2FnZXNlbGVjdGlvbnBhZ2UucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wYWNrYWdlc2VsZWN0aW9ucGFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YzYyYjM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcGFja2FnZXNlbGVjdGlvbnBhZ2UucHkKQEAgLTAsMCArMSwzNTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBnbGliCitmcm9tIGJiLnVpLmNydW1icy5ob2Jjb2xvciBpbXBvcnQgSG9iQ29sb3JzCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IEhvYlZpZXdUYWJsZSwgSG9iTm90ZWJvb2ssIEhvYkFsdEJ1dHRvbiwgSG9iQnV0dG9uCitmcm9tIGJiLnVpLmNydW1icy5ob2JsaXN0bW9kZWwgaW1wb3J0IFBhY2thZ2VMaXN0TW9kZWwKK2Zyb20gYmIudWkuY3J1bWJzLmhvYnBhZ2VzIGltcG9ydCBIb2JQYWdlCisKKyMKKyMgUGFja2FnZVNlbGVjdGlvblBhZ2UKKyMKK2NsYXNzIFBhY2thZ2VTZWxlY3Rpb25QYWdlIChIb2JQYWdlKToKKworICAgIHBhZ2VzID0gWworICAgICAgICB7CisgICAgICAgICAnbmFtZScgICAgICA6ICdJbmNsdWRlZCBwYWNrYWdlcycsCisgICAgICAgICAndG9vbHRpcCcgICA6ICdUaGUgcGFja2FnZXMgY3VycmVudGx5IGluY2x1ZGVkIGZvciB5b3VyIGltYWdlJywKKyAgICAgICAgICdmaWx0ZXInICAgIDogeyBQYWNrYWdlTGlzdE1vZGVsLkNPTF9JTkMgOiBbVHJ1ZV0gfSwKKyAgICAgICAgICdzZWFyY2gnICAgIDogJ1NlYXJjaCBwYWNrYWdlcyBieSBuYW1lJywKKyAgICAgICAgICdzZWFyY2h0aXAnIDogJ0VudGVyIGEgcGFja2FnZSBuYW1lIHRvIGZpbmQgaXQnLAorICAgICAgICAgJ2NvbHVtbnMnICAgOiBbeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ1BhY2thZ2UgbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogMzAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ1NpemUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUGFja2FnZUxpc3RNb2RlbC5DT0xfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICd0ZXh0JywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDMwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZCcgICA6ICdUcnVlJworICAgICAgICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdSZWNpcGUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUGFja2FnZUxpc3RNb2RlbC5DT0xfUkNQLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogMjUwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ0Jyb3VnaHQgaW4gYnkgKCtvdGhlcnMpJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFBhY2thZ2VMaXN0TW9kZWwuQ09MX0JJTkIsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAnYmluYicsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiAzNTAsCisgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnICAgOiAnVHJ1ZScKKyAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnSW5jbHVkZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUGFja2FnZUxpc3RNb2RlbC5DT0xfSU5DLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ2NoZWNrIHRvZ2dsZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiAxMDAKKyAgICAgICAgICAgICAgICAgICAgIH1dCisgICAgICAgIH0sIHsKKyAgICAgICAgICduYW1lJyAgICAgIDogJ0FsbCBwYWNrYWdlcycsCisgICAgICAgICAndG9vbHRpcCcgICA6ICdBbGwgcGFja2FnZXMgdGhhdCBoYXZlIGJlZW4gYnVpbHQnLAorICAgICAgICAgJ2ZpbHRlcicgICAgOiB7fSwKKyAgICAgICAgICdzZWFyY2gnICAgIDogJ1NlYXJjaCBwYWNrYWdlcyBieSBuYW1lJywKKyAgICAgICAgICdzZWFyY2h0aXAnIDogJ0VudGVyIGEgcGFja2FnZSBuYW1lIHRvIGZpbmQgaXQnLAorICAgICAgICAgJ2NvbHVtbnMnICAgOiBbeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ1BhY2thZ2UgbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogNDAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ1NpemUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUGFja2FnZUxpc3RNb2RlbC5DT0xfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICd0ZXh0JywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDUwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZCcgICA6ICdUcnVlJworICAgICAgICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdSZWNpcGUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUGFja2FnZUxpc3RNb2RlbC5DT0xfUkNQLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogMjUwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ0luY2x1ZGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFBhY2thZ2VMaXN0TW9kZWwuQ09MX0lOQywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICdjaGVjayB0b2dnbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogMTAwCisgICAgICAgICAgICAgICAgICAgICAgfV0KKyAgICAgICAgfQorICAgIF0KKyAgICAKKyAgICAoSU5DTFVERUQsCisgICAgIEFMTCkgPSByYW5nZSgyKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1aWxkZXIpOgorICAgICAgICBzdXBlcihQYWNrYWdlU2VsZWN0aW9uUGFnZSwgc2VsZikuX19pbml0X18oYnVpbGRlciwgIkVkaXQgcGFja2FnZXMiKQorCisgICAgICAgICMgc2V0IGludmlzaWJsZSBtZW1iZXJzCisgICAgICAgIHNlbGYucmVjaXBlX21vZGVsID0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbAorICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwgPSBzZWxmLmJ1aWxkZXIucGFja2FnZV9tb2RlbAorCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorCisgICAgZGVmIGluY2x1ZGVkX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5pbnMuc2V0X2N1cnJlbnRfcGFnZShzZWxmLklOQ0xVREVEKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYubGFiZWwgPSBndGsuTGFiZWwoIlBhY2thZ2VzIGluY2x1ZGVkOiAwXG5TZWxlY3RlZCBwYWNrYWdlcyBzaXplOiAwIE1CIikKKyAgICAgICAgc2VsZi5ldmVudGJveCA9IHNlbGYuYWRkX29udG9fdG9wX2JhcihzZWxmLmxhYmVsLCA3MykKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuZXZlbnRib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuZ3JvdXBfYWxpZ24sIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgIyBzZXQgdmlzaWJsZSBtZW1iZXJzCisgICAgICAgIHNlbGYuaW5zID0gSG9iTm90ZWJvb2soKQorICAgICAgICBzZWxmLnRhYmxlcyA9IFtdICMgd2UgbmVlZCB0byBtb2RpZnkgdGFibGUgd2hlbiB0aGUgZGlhbG9nIGlzIHNob3duCisKKyAgICAgICAgc2VhcmNoX25hbWVzID0gW10KKyAgICAgICAgc2VhcmNoX3RpcHMgPSBbXQorICAgICAgICAjIGFwcGVuZCB0aGUgdGFiCisgICAgICAgIGZvciBwYWdlIGluIHNlbGYucGFnZXM6CisgICAgICAgICAgICBjb2x1bW5zID0gcGFnZVsnY29sdW1ucyddCisgICAgICAgICAgICBuYW1lID0gcGFnZVsnbmFtZSddCisgICAgICAgICAgICB0YWIgPSBIb2JWaWV3VGFibGUoY29sdW1ucywgbmFtZSkKKyAgICAgICAgICAgIHNlYXJjaF9uYW1lcy5hcHBlbmQocGFnZVsnc2VhcmNoJ10pCisgICAgICAgICAgICBzZWFyY2hfdGlwcy5hcHBlbmQocGFnZVsnc2VhcmNodGlwJ10pCisgICAgICAgICAgICBmaWx0ZXIgPSBwYWdlWydmaWx0ZXInXQorICAgICAgICAgICAgc29ydF9tb2RlbCA9IHNlbGYucGFja2FnZV9tb2RlbC50cmVlX21vZGVsKGZpbHRlciwgaW5pdGlhbD1UcnVlKQorICAgICAgICAgICAgdGFiLnNldF9tb2RlbChzb3J0X21vZGVsKQorICAgICAgICAgICAgdGFiLmNvbm5lY3QoInRvZ2dsZWQiLCBzZWxmLnRhYmxlX3RvZ2dsZWRfY2IsIG5hbWUpCisgICAgICAgICAgICB0YWIuY29ubmVjdCgiYnV0dG9uLXJlbGVhc2UtZXZlbnQiLCBzZWxmLmJ1dHRvbl9jbGlja19jYikKKyAgICAgICAgICAgIHRhYi5jb25uZWN0KCJjZWxsLWZhZGVpbm91dC1zdG9wcGVkIiwgc2VsZi5hZnRlcl9mYWRlb3V0X2NoZWNraW5faW5jbHVkZSwgZmlsdGVyKQorICAgICAgICAgICAgc2VsZi5pbnMuYXBwZW5kX3BhZ2UodGFiLCBwYWdlWyduYW1lJ10sIHBhZ2VbJ3Rvb2x0aXAnXSkKKyAgICAgICAgICAgIHNlbGYudGFibGVzLmFwcGVuZCh0YWIpCisKKyAgICAgICAgc2VsZi5pbnMuc2V0X2VudHJ5KHNlYXJjaF9uYW1lcywgc2VhcmNoX3RpcHMpCisgICAgICAgIHNlbGYuaW5zLnNlYXJjaC5jb25uZWN0KCJjaGFuZ2VkIiwgc2VsZi5zZWFyY2hfZW50cnlfY2hhbmdlZCkKKworICAgICAgICAjIGFkZCBhbGwgaW50byB0aGUgZGlhbG9nCisgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLmlucywgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICBzZWxmLmJ1dHRvbl9ib3ggPSBndGsuSEJveChGYWxzZSwgNikKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYuYnV0dG9uX2JveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYuYnVpbGRfaW1hZ2VfYnV0dG9uID0gSG9iQnV0dG9uKCdCdWlsZCBpbWFnZScpCisgICAgICAgICNzZWxmLmJ1aWxkX2ltYWdlX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDIwNSwgNDkpCisgICAgICAgIHNlbGYuYnVpbGRfaW1hZ2VfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkJ1aWxkIHRhcmdldCBpbWFnZSIpCisgICAgICAgIHNlbGYuYnVpbGRfaW1hZ2VfYnV0dG9uLnNldF9mbGFncyhndGsuQ0FOX0RFRkFVTFQpCisgICAgICAgIHNlbGYuYnVpbGRfaW1hZ2VfYnV0dG9uLmdyYWJfZGVmYXVsdCgpCisgICAgICAgIHNlbGYuYnVpbGRfaW1hZ2VfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmJ1aWxkX2ltYWdlX2NsaWNrZWRfY2IpCisgICAgICAgIHNlbGYuYnV0dG9uX2JveC5wYWNrX2VuZChzZWxmLmJ1aWxkX2ltYWdlX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYuYmFja19idXR0b24gPSBIb2JBbHRCdXR0b24oJ0NhbmNlbCcpCisgICAgICAgIHNlbGYuYmFja19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuYmFja19idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgc2VsZi5idXR0b25fYm94LnBhY2tfZW5kKHNlbGYuYmFja19idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgIGRlZiBzZWFyY2hfZW50cnlfY2hhbmdlZChzZWxmLCBlbnRyeSk6CisgICAgICAgIHRleHQgPSBlbnRyeS5nZXRfdGV4dCgpCisgICAgICAgIGlmIHNlbGYuaW5zLnNlYXJjaF9mb2N1czoKKyAgICAgICAgICAgIHNlbGYuaW5zLnNlYXJjaF9mb2N1cyA9IEZhbHNlCisgICAgICAgIGVsaWYgc2VsZi5pbnMucGFnZV9jaGFuZ2VkOgorICAgICAgICAgICAgc2VsZi5pbnMucGFnZV9jaGFuZ2UgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5maWx0ZXJfc2VhcmNoKGVudHJ5KQorICAgICAgICBlbGlmIHRleHQgbm90IGluIHNlbGYuaW5zLnNlYXJjaF9uYW1lczoKKyAgICAgICAgICAgIHNlbGYuZmlsdGVyX3NlYXJjaChlbnRyeSkKKworICAgIGRlZiBmaWx0ZXJfc2VhcmNoKHNlbGYsIGVudHJ5KToKKyAgICAgICAgdGV4dCA9IGVudHJ5LmdldF90ZXh0KCkKKyAgICAgICAgY3VycmVudF90YWIgPSBzZWxmLmlucy5nZXRfY3VycmVudF9wYWdlKCkKKyAgICAgICAgZmlsdGVyID0gc2VsZi5wYWdlc1tjdXJyZW50X3RhYl1bJ2ZpbHRlciddCisgICAgICAgIGZpbHRlcltQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FXSA9IHRleHQKKyAgICAgICAgc2VsZi50YWJsZXNbY3VycmVudF90YWJdLnNldF9tb2RlbChzZWxmLnBhY2thZ2VfbW9kZWwudHJlZV9tb2RlbChmaWx0ZXIsIHNlYXJjaF9kYXRhPXRleHQpKQorICAgICAgICBpZiBzZWxmLnBhY2thZ2VfbW9kZWwuZmlsdGVyZWRfbmIgPT0gMDoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnRvcF9iYXI6CisgICAgICAgICAgICAgICAgc2VsZi5pbnMuZ2V0X250aF9wYWdlKGN1cnJlbnRfdGFiKS5hZGRfbm9fcmVzdWx0X2JhcihlbnRyeSkKKyAgICAgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnRvcF9iYXIuc2V0X25vX3Nob3dfYWxsKFRydWUpCisgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnRvcF9iYXIuc2hvdygpCisgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnNjcm9sbC5oaWRlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2JhcjoKKyAgICAgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnRvcF9iYXIuaGlkZSgpCisgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnNjcm9sbC5zaG93KCkKKyAgICAgICAgaWYgZW50cnkuZ2V0X3RleHQoKSA9PSAnJzoKKyAgICAgICAgICAgIGVudHJ5LnNldF9pY29uX3NlbnNpdGl2ZShndGsuRU5UUllfSUNPTl9TRUNPTkRBUlksIEZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZW50cnkuc2V0X2ljb25fc2Vuc2l0aXZlKGd0ay5FTlRSWV9JQ09OX1NFQ09OREFSWSwgVHJ1ZSkKKworICAgIGRlZiBidXR0b25fY2xpY2tfY2Ioc2VsZiwgd2lkZ2V0LCBldmVudCk6CisgICAgICAgIHBhdGgsIGNvbCA9IHdpZGdldC50YWJsZV90cmVlLmdldF9jdXJzb3IoKQorICAgICAgICB0cmVlX21vZGVsID0gd2lkZ2V0LnRhYmxlX3RyZWUuZ2V0X21vZGVsKCkKKyAgICAgICAgaWYgcGF0aCBhbmQgY29sLmdldF90aXRsZSgpICE9ICdJbmNsdWRlZCc6ICMgZWxzZSBhY3RpdmF0aW9uIGlzIGxpa2VseSBhIHJlbW92YWwKKyAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7J2JpbmInOiAnJyAsICduYW1lJzogJycsICdzaXplJzonJywgJ3JlY2lwZSc6JycsICdmaWxlc19saXN0JzonJ30KKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ2JpbmInXSA9IHRyZWVfbW9kZWwuZ2V0X3ZhbHVlKHRyZWVfbW9kZWwuZ2V0X2l0ZXIocGF0aCksIFBhY2thZ2VMaXN0TW9kZWwuQ09MX0JJTkIpCisgICAgICAgICAgICBwcm9wZXJ0aWVzWyduYW1lJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgcHJvcGVydGllc1snc2l6ZSddID0gdHJlZV9tb2RlbC5nZXRfdmFsdWUodHJlZV9tb2RlbC5nZXRfaXRlcihwYXRoKSwgUGFja2FnZUxpc3RNb2RlbC5DT0xfU0laRSkKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ3JlY2lwZSddID0gdHJlZV9tb2RlbC5nZXRfdmFsdWUodHJlZV9tb2RlbC5nZXRfaXRlcihwYXRoKSwgUGFja2FnZUxpc3RNb2RlbC5DT0xfUkNQKQorICAgICAgICAgICAgcHJvcGVydGllc1snZmlsZXNfbGlzdCddID0gdHJlZV9tb2RlbC5nZXRfdmFsdWUodHJlZV9tb2RlbC5nZXRfaXRlcihwYXRoKSwgUGFja2FnZUxpc3RNb2RlbC5DT0xfRkxJU1QpCisKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X3JlY2lwZV9wcm9wZXJ0eV9kaWFsb2cocHJvcGVydGllcykKKworICAgIGRlZiBvcGVuX2xvZ19jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbiwgbG9nX2ZpbGUpOgorICAgICAgICBpZiBsb2dfZmlsZToKKyAgICAgICAgICAgIGxvZ19maWxlID0gImZpbGU6Ly8vIiArIGxvZ19maWxlCisgICAgICAgICAgICBndGsuc2hvd191cmkoc2NyZWVuPWJ1dHRvbi5nZXRfc2NyZWVuKCksIHVyaT1sb2dfZmlsZSwgdGltZXN0YW1wPTApCisKKyAgICBkZWYgc2hvd19wYWdlKHNlbGYsIGxvZ19maWxlKToKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLmJ1dHRvbl9ib3guZ2V0X2NoaWxkcmVuKCkgb3IgW10KKyAgICAgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi5idXR0b25fYm94LnJlbW92ZShjaGlsZCkKKyAgICAgICAgIyByZS1wYWNrZWQgdGhlIGJ1dHRvbnMgYXMgcmVxdWVzdCwgYWRkIHRoZSAnb3BlbiBsb2cnIGJ1dHRvbiBpZiBidWlsZCBzdWNjZXNzCisgICAgICAgIHNlbGYuYnV0dG9uX2JveC5wYWNrX2VuZChzZWxmLmJ1aWxkX2ltYWdlX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBpZiBsb2dfZmlsZToKKyAgICAgICAgICAgIG9wZW5fbG9nX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiT3BlbiBsb2ciKQorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLm9wZW5fbG9nX2NsaWNrZWRfY2IsIGxvZ19maWxlKQorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIk9wZW4gdGhlIGJ1aWxkJ3MgbG9nIGZpbGUiKQorICAgICAgICAgICAgc2VsZi5idXR0b25fYm94LnBhY2tfZW5kKG9wZW5fbG9nX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLmJ1dHRvbl9ib3gucGFja19lbmQoc2VsZi5iYWNrX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiBidWlsZF9pbWFnZV9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYuYnVpbGRlci5wYXJzaW5nX3dhcm5pbmdzID0gW10KKyAgICAgICAgc2VsZi5idWlsZGVyLmJ1aWxkX2ltYWdlKCkKKworICAgIGRlZiByZWZyZXNoX3RhYmxlcyhzZWxmKToKKyAgICAgICAgc2VsZi5pbnMucmVzZXRfZW50cnkoc2VsZi5pbnMuc2VhcmNoLCAwKQorICAgICAgICBmb3IgdGFiIGluIHNlbGYudGFibGVzOgorICAgICAgICAgICAgaW5kZXggPSBzZWxmLnRhYmxlcy5pbmRleCh0YWIpCisgICAgICAgICAgICBmaWx0ZXIgPSBzZWxmLnBhZ2VzW2luZGV4XVsnZmlsdGVyJ10KKyAgICAgICAgICAgIHRhYi5zZXRfbW9kZWwoc2VsZi5wYWNrYWdlX21vZGVsLnRyZWVfbW9kZWwoZmlsdGVyLCBpbml0aWFsPVRydWUpKQorCisgICAgZGVmIGJhY2tfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgaWYgc2VsZi5idWlsZGVyLnByZXZpb3VzX3N0ZXAgPT0gIHNlbGYuYnVpbGRlci5JTUFHRV9HRU5FUkFURUQ6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIucmVzdG9yZV9pbml0aWFsX3NlbGVjdGVkX3BhY2thZ2VzKCkKKyAgICAgICAgICAgIHNlbGYucmVmcmVzaF9zZWxlY3Rpb24oKQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfaW1hZ2VfZGV0YWlscygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19jb25maWd1cmF0aW9uKCkKKyAgICAgICAgc2VsZi5yZWZyZXNoX3RhYmxlcygpCisKKyAgICBkZWYgcmVmcmVzaF9zZWxlY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLnNlbGVjdGVkX3BhY2thZ2VzID0gc2VsZi5wYWNrYWdlX21vZGVsLmdldF9zZWxlY3RlZF9wYWNrYWdlcygpCisgICAgICAgIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLnVzZXJfc2VsZWN0ZWRfcGFja2FnZXMgPSBzZWxmLnBhY2thZ2VfbW9kZWwuZ2V0X3VzZXJfc2VsZWN0ZWRfcGFja2FnZXMoKQorICAgICAgICBzZWxlY3RlZF9wYWNrYWdlc19udW0gPSBsZW4oc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcGFja2FnZXMpCisgICAgICAgIHNlbGVjdGVkX3BhY2thZ2VzX3NpemUgPSBzZWxmLnBhY2thZ2VfbW9kZWwuZ2V0X3BhY2thZ2VzX3NpemUoKQorICAgICAgICBzZWxlY3RlZF9wYWNrYWdlc19zaXplX3N0ciA9IEhvYlBhZ2UuX3NpemVfdG9fc3RyaW5nKHNlbGVjdGVkX3BhY2thZ2VzX3NpemUpCisKKyAgICAgICAgaWYgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uaW1hZ2VfcGFja2FnZXMgPT0gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcGFja2FnZXM6CisgICAgICAgICAgICBpbWFnZV90b3RhbF9zaXplX3N0ciA9IHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLmltYWdlX3NpemUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGltYWdlX292ZXJoZWFkX2ZhY3RvciA9IHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLmltYWdlX292ZXJoZWFkX2ZhY3RvcgorICAgICAgICAgICAgaW1hZ2Vfcm9vdGZzX3NpemUgPSBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5pbWFnZV9yb290ZnNfc2l6ZSAvIDEwMjQgIyBpbWFnZV9yb290ZnNfc2l6ZSBpcyBLQgorICAgICAgICAgICAgaW1hZ2VfZXh0cmFfc2l6ZSA9IHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLmltYWdlX2V4dHJhX3NpemUgLyAxMDI0ICMgaW1hZ2VfZXh0cmFfc2l6ZSBpcyBLQgorICAgICAgICAgICAgYmFzZV9zaXplID0gaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yICogc2VsZWN0ZWRfcGFja2FnZXNfc2l6ZQorICAgICAgICAgICAgaW1hZ2VfdG90YWxfc2l6ZSA9IG1heChiYXNlX3NpemUsIGltYWdlX3Jvb3Rmc19zaXplKSArIGltYWdlX2V4dHJhX3NpemUKKyAgICAgICAgICAgIGlmICJ6eXBwZXIiIGluIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLnNlbGVjdGVkX3BhY2thZ2VzOgorICAgICAgICAgICAgICAgIGltYWdlX3RvdGFsX3NpemUgKz0gKDUxMjAwICogMTAyNCkKKyAgICAgICAgICAgIGltYWdlX3RvdGFsX3NpemVfc3RyID0gSG9iUGFnZS5fc2l6ZV90b19zdHJpbmcoaW1hZ2VfdG90YWxfc2l6ZSkKKworICAgICAgICBzZWxmLmxhYmVsLnNldF9sYWJlbCgiUGFja2FnZXMgaW5jbHVkZWQ6ICVzXG5TZWxlY3RlZCBwYWNrYWdlcyBzaXplOiAlc1xuRXN0aW1hdGVkIGltYWdlIHNpemU6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkX3BhY2thZ2VzX251bSwgc2VsZWN0ZWRfcGFja2FnZXNfc2l6ZV9zdHIsIGltYWdlX3RvdGFsX3NpemVfc3RyKSkKKyAgICAgICAgc2VsZi5pbnMuc2hvd19pbmRpY2F0b3JfaWNvbigiSW5jbHVkZWQgcGFja2FnZXMiLCBzZWxlY3RlZF9wYWNrYWdlc19udW0pCisKKyAgICBkZWYgdG9nZ2xlX2l0ZW1faWRsZV9jYihzZWxmLCBwYXRoLCB2aWV3X3RyZWUsIGNlbGwsIHBhZ2VuYW1lKToKKyAgICAgICAgaWYgbm90IHNlbGYucGFja2FnZV9tb2RlbC5wYXRoX2luY2x1ZGVkKHBhdGgpOgorICAgICAgICAgICAgc2VsZi5wYWNrYWdlX21vZGVsLmluY2x1ZGVfaXRlbShpdGVtX3BhdGg9cGF0aCwgYmluYj0iVXNlciBTZWxlY3RlZCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnByZV9mYWRlb3V0X2NoZWNrb3V0X2luY2x1ZGUodmlld190cmVlKQorICAgICAgICAgICAgc2VsZi5wYWNrYWdlX21vZGVsLmV4Y2x1ZGVfaXRlbShpdGVtX3BhdGg9cGF0aCkKKyAgICAgICAgICAgIHNlbGYucmVuZGVyX2ZhZGVvdXQodmlld190cmVlLCBjZWxsKQorCisgICAgICAgIHNlbGYucmVmcmVzaF9zZWxlY3Rpb24oKQorICAgICAgICBpZiBub3Qgc2VsZi5idWlsZGVyLmN1c3RvbWl6ZWQ6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuY3VzdG9taXplZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5zZXRfYmFzZV9pbWFnZSgpCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9pbWFnZSA9IHNlbGYucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX18KKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5yY3Bwa2dsaXN0X3BvcHVsYXRlZCgpCisKKyAgICAgICAgc2VsZi5idWlsZGVyLndpbmRvd19zZW5zaXRpdmUoVHJ1ZSkKKyAgICAgICAgdmlld19tb2RlbCA9IHZpZXdfdHJlZS5nZXRfbW9kZWwoKQorICAgICAgICB2cGF0aCA9IHNlbGYucGFja2FnZV9tb2RlbC5jb252ZXJ0X3BhdGhfdG9fdnBhdGgodmlld19tb2RlbCwgcGF0aCkKKyAgICAgICAgdmlld190cmVlLnNldF9jdXJzb3IodnBhdGgpCisKKyAgICBkZWYgdGFibGVfdG9nZ2xlZF9jYihzZWxmLCB0YWJsZSwgY2VsbCwgdmlld19wYXRoLCB0b2dnbGVkX2NvbHVtbmlkLCB2aWV3X3RyZWUsIHBhZ2VuYW1lKToKKyAgICAgICAgIyBDbGljayB0byBpbmNsdWRlIGEgcGFja2FnZQorICAgICAgICBzZWxmLmJ1aWxkZXIud2luZG93X3NlbnNpdGl2ZShGYWxzZSkKKyAgICAgICAgdmlld19tb2RlbCA9IHZpZXdfdHJlZS5nZXRfbW9kZWwoKQorICAgICAgICBwYXRoID0gc2VsZi5wYWNrYWdlX21vZGVsLmNvbnZlcnRfdnBhdGhfdG9fcGF0aCh2aWV3X21vZGVsLCB2aWV3X3BhdGgpCisgICAgICAgIGdsaWIuaWRsZV9hZGQoc2VsZi50b2dnbGVfaXRlbV9pZGxlX2NiLCBwYXRoLCB2aWV3X3RyZWUsIGNlbGwsIHBhZ2VuYW1lKQorCisgICAgZGVmIHByZV9mYWRlb3V0X2NoZWNrb3V0X2luY2x1ZGUoc2VsZiwgdHJlZSk6CisgICAgICAgICNhZnRlciB0aGUgZmFkZW91dCB0aGUgdGFibGUgd2lsbCBiZSBzb3J0ZWQgYXMgYmVmb3JlCisgICAgICAgIHNlbGYuc29ydF9jb2x1bW5faWQgPSBzZWxmLnBhY2thZ2VfbW9kZWwuc29ydF9jb2x1bW5faWQKKyAgICAgICAgc2VsZi5zb3J0X29yZGVyID0gc2VsZi5wYWNrYWdlX21vZGVsLnNvcnRfb3JkZXIKKworICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwucmVzeW5jX2ZhZGVvdXRfY29sdW1uKHNlbGYucGFja2FnZV9tb2RlbC5nZXRfaXRlcl9maXJzdCgpKQorICAgICAgICAjIENoZWNrIG91dCBhIG1vZGVsIHdoaWNoIGJhc2Ugb24gdGhlIGNvbHVtbiBDT0xfRkFERV9JTkMsCisgICAgICAgICMgaXQncyBzYXZlIHRoZSBwcmV2IHN0YXRlIG9mIGNvbHVtbiBDT0xfSU5DIGJlZm9yZSBkbyBleGNsdWRlX2l0ZW0KKyAgICAgICAgZmlsdGVyID0geyBQYWNrYWdlTGlzdE1vZGVsLkNPTF9GQURFX0lOQyAgOiBbVHJ1ZV19CisgICAgICAgIG5ld19tb2RlbCA9IHNlbGYucGFja2FnZV9tb2RlbC50cmVlX21vZGVsKGZpbHRlciwgZXhjbHVkZWRfaXRlbXNfYWhlYWQ9VHJ1ZSkKKyAgICAgICAgdHJlZS5zZXRfbW9kZWwobmV3X21vZGVsKQorICAgICAgICB0cmVlLmV4cGFuZF9hbGwoKQorCisgICAgZGVmIGdldF9leGNsdWRlZF9yb3dzKHNlbGYsIHRvX3JlbmRlcl9jZWxscywgbW9kZWwsIGl0KToKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBwYXRoID0gbW9kZWwuZ2V0X3BhdGgoaXQpCisgICAgICAgICAgICBwcmV2X2NlbGxfaXNfYWN0aXZlID0gbW9kZWwuZ2V0X3ZhbHVlKGl0LCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9GQURFX0lOQykKKyAgICAgICAgICAgIGN1cnJfY2VsbF9pc19hY3RpdmUgPSBtb2RlbC5nZXRfdmFsdWUoaXQsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX0lOQykKKyAgICAgICAgICAgIGlmIChwcmV2X2NlbGxfaXNfYWN0aXZlID09IFRydWUpIGFuZCAoY3Vycl9jZWxsX2lzX2FjdGl2ZSA9PSBGYWxzZSk6CisgICAgICAgICAgICAgICAgdG9fcmVuZGVyX2NlbGxzLmFwcGVuZChwYXRoKQorICAgICAgICAgICAgaWYgbW9kZWwuaXRlcl9oYXNfY2hpbGQoaXQpOgorICAgICAgICAgICAgICAgIHNlbGYuZ2V0X2V4Y2x1ZGVkX3Jvd3ModG9fcmVuZGVyX2NlbGxzLCBtb2RlbCwgbW9kZWwuaXRlcl9jaGlsZHJlbihpdCkpCisgICAgICAgICAgICBpdCA9IG1vZGVsLml0ZXJfbmV4dChpdCkKKworICAgICAgICByZXR1cm4gdG9fcmVuZGVyX2NlbGxzCisKKyAgICBkZWYgcmVuZGVyX2ZhZGVvdXQoc2VsZiwgdHJlZSwgY2VsbCk6CisgICAgICAgIGlmIChub3QgY2VsbCkgb3IgKG5vdCB0cmVlKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0b19yZW5kZXJfY2VsbHMgPSBbXQorICAgICAgICB2aWV3X21vZGVsID0gdHJlZS5nZXRfbW9kZWwoKQorICAgICAgICBzZWxmLmdldF9leGNsdWRlZF9yb3dzKHRvX3JlbmRlcl9jZWxscywgdmlld19tb2RlbCwgdmlld19tb2RlbC5nZXRfaXRlcl9maXJzdCgpKQorCisgICAgICAgIGNlbGwuZmFkZW91dCh0cmVlLCAxMDAwLCB0b19yZW5kZXJfY2VsbHMpCisKKyAgICBkZWYgYWZ0ZXJfZmFkZW91dF9jaGVja2luX2luY2x1ZGUoc2VsZiwgdGFibGUsIGN0cmwsIGNlbGwsIHRyZWUsIGZpbHRlcik6CisgICAgICAgIHNlbGYucGFja2FnZV9tb2RlbC5zb3J0X2NvbHVtbl9pZCA9IHNlbGYuc29ydF9jb2x1bW5faWQKKyAgICAgICAgc2VsZi5wYWNrYWdlX21vZGVsLnNvcnRfb3JkZXIgPSBzZWxmLnNvcnRfb3JkZXIKKyAgICAgICAgdHJlZS5zZXRfbW9kZWwoc2VsZi5wYWNrYWdlX21vZGVsLnRyZWVfbW9kZWwoZmlsdGVyKSkKKyAgICAgICAgdHJlZS5leHBhbmRfYWxsKCkKKworICAgIGRlZiBzZXRfcGFja2FnZXNfY3Vycl90YWIoc2VsZiwgY3Vycl9wYWdlKToKKyAgICAgICAgc2VsZi5pbnMuc2V0X2N1cnJlbnRfcGFnZShjdXJyX3BhZ2UpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3BlcnNpc3RlbnR0b29sdGlwLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcGVyc2lzdGVudHRvb2x0aXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI3YzE5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3BlcnNpc3RlbnR0b29sdGlwLnB5CkBAIC0wLDAgKzEsMTg2IEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IGd0awordHJ5OgorICAgIGltcG9ydCBnY29uZgorZXhjZXB0OgorICAgIHBhc3MKKworY2xhc3MgUGVyc2lzdGVudFRvb2x0aXAoZ3RrLldpbmRvdyk6CisgICAgIiIiCisgICAgQSB0b29sdGlwIHdoaWNoIHBlcnNpc3RzIG9uY2Ugc2hvd24gdW50aWwgdGhlIHVzZXIgZGlzbWlzc2VzIGl0IHdpdGggdGhlIEVzYworICAgIGtleSBvciBieSBjbGlja2luZyB0aGUgY2xvc2UgYnV0dG9uLgorCisgICAgIyBGSVhNRTogdGhlIFBlcnNpc3RlbnRUb29sdGlwIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBhbnl3aGVyZSBvZmYKKyAgICAjIGl0LiBXZSBjYW4ndCBkbyB0aGlzIHdpdGggZm9jdXMtb3V0LWV2ZW50IGJlY3Vhc2UgbW9kYWwgZW5zdXJlcyB3ZSBoYXZlIGZvY3VzPworCisgICAgbWFya3VwOiBzb21lIFBhbmdvIHRleHQgbWFya3VwIHRvIGRpc3BsYXkgaW4gdGhlIHRvb2x0aXAKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya3VwLCBwYXJlbnRfd2luPU5vbmUpOgorICAgICAgICBndGsuV2luZG93Ll9faW5pdF9fKHNlbGYsIGd0ay5XSU5ET1dfUE9QVVApCisKKyAgICAgICAgIyBJbmhlcml0IHRoZSBzeXN0ZW0gdGhlbWUgZm9yIGEgdG9vbHRpcAorICAgICAgICBzdHlsZSA9IGd0ay5yY19nZXRfc3R5bGVfYnlfcGF0aHMoZ3RrLnNldHRpbmdzX2dldF9kZWZhdWx0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAnZ3RrLXRvb2x0aXAnLCAnZ3RrLXRvb2x0aXAnLCBnb2JqZWN0LlRZUEVfTk9ORSkKKyAgICAgICAgc2VsZi5zZXRfc3R5bGUoc3R5bGUpCisKKyAgICAgICAgIyBUaGUgcGxhY2VtZW50IG9mIHRoZSBjbG9zZSBidXR0b24gb24gdGhlIHRpcCBzaG91bGQgcmVmbGVjdCBob3cgdGhlCisgICAgICAgICMgd2luZG93IG1hbmFnZXIgb2YgdGhlIHVzZXJzIHN5c3RlbSBwbGFjZXMgY2xvc2UgYnV0dG9ucy4gVHJ5IHRvIHJlYWQKKyAgICAgICAgIyB0aGUgbWV0YWNpdHkgZ2NvbmYga2V5IHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBjbG9zZSBidXR0b24gaXMgb24gdGhlCisgICAgICAgICMgbGVmdCBvciB0aGUgcmlnaHQuCisgICAgICAgICMgSW4gdGhlIGNhc2UgdGhhdCB3ZSBjYW4ndCBkZXRlcm1pbmUgdGhlIHVzZXJzIGNvbmZpZ3VyYXRpb24gd2UgZGVmYXVsdAorICAgICAgICAjIHRvIGNsb3NlIGJ1dHRvbnMgYmVpbmcgb24gdGhlIHJpZ2h0LgorICAgICAgICBfX2J1dHRvbl9yaWdodCA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xpZW50ID0gZ2NvbmYuY2xpZW50X2dldF9kZWZhdWx0KCkKKyAgICAgICAgICAgIG9yZGVyID0gY2xpZW50LmdldF9zdHJpbmcoIi9hcHBzL21ldGFjaXR5L2dlbmVyYWwvYnV0dG9uX2xheW91dCIpCisgICAgICAgICAgICBpZiBvcmRlciBhbmQgb3JkZXIuZW5kc3dpdGgoIjoiKToKKyAgICAgICAgICAgICAgICBfX2J1dHRvbl9yaWdodCA9IEZhbHNlCisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBXZSBuZWVkIHRvIGVuc3VyZSB3ZSdyZSBvbmx5IHNob3duIG9uY2UKKyAgICAgICAgc2VsZi5zaG93biA9IEZhbHNlCisKKyAgICAgICAgIyBXZSBkb24ndCB3YW50IGFueSBXTSBkZWNvcmF0aW9ucworICAgICAgICBzZWxmLnNldF9kZWNvcmF0ZWQoRmFsc2UpCisgICAgICAgICMgV2UgZG9uJ3Qgd2FudCB0byBzaG93IGluIHRoZSB0YXNrYmFyIG9yIHdpbmRvdyBzd2l0Y2hlcgorICAgICAgICBzZWxmLnNldF9za2lwX3BhZ2VyX2hpbnQoVHJ1ZSkKKyAgICAgICAgc2VsZi5zZXRfc2tpcF90YXNrYmFyX2hpbnQoVHJ1ZSkKKyAgICAgICAgIyBXZSBtdXN0IGJlIG1vZGFsIHRvIGVuc3VyZSB3ZSBncmFiIGZvY3VzIHdoZW4gcHJlc2VudGVkIGZyb20gYSBndGsuRGlhbG9nCisgICAgICAgIHNlbGYuc2V0X21vZGFsKFRydWUpCisKKyAgICAgICAgc2VsZi5zZXRfYm9yZGVyX3dpZHRoKDApCisgICAgICAgIHNlbGYuc2V0X3Bvc2l0aW9uKGd0ay5XSU5fUE9TX01PVVNFKQorICAgICAgICBzZWxmLnNldF9vcGFjaXR5KDAuOTUpCisKKyAgICAgICAgIyBFbnN1cmUgYSByZWFzb25hYmxlIG1pbmltdW0gc2l6ZQorICAgICAgICBzZWxmLnNldF9nZW9tZXRyeV9oaW50cyhzZWxmLCAxMDAsIDUwKQorCisgICAgICAgICMgU2V0IHRoaXMgd2luZG93IGFzIGEgdHJhbnNpZW50IHdpbmRvdyBmb3IgcGFyZW50KG1haW4gd2luZG93KQorICAgICAgICBpZiBwYXJlbnRfd2luOgorICAgICAgICAgICAgc2VsZi5zZXRfdHJhbnNpZW50X2ZvcihwYXJlbnRfd2luKQorICAgICAgICAgICAgc2VsZi5zZXRfZGVzdHJveV93aXRoX3BhcmVudChUcnVlKQorICAgICAgICAjIERyYXcgb3VyIGxhYmVsIGFuZCBjbG9zZSBidXR0b25zCisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgMCkKKyAgICAgICAgaGJveC5zaG93KCkKKyAgICAgICAgc2VsZi5hZGQoaGJveCkKKworICAgICAgICBpbWcgPSBndGsuSW1hZ2UoKQorICAgICAgICBpbWcuc2V0X2Zyb21fc3RvY2soZ3RrLlNUT0NLX0NMT1NFLCBndGsuSUNPTl9TSVpFX0JVVFRPTikKKworICAgICAgICBzZWxmLmJ1dHRvbiA9IGd0ay5CdXR0b24oKQorICAgICAgICBzZWxmLmJ1dHRvbi5zZXRfaW1hZ2UoaW1nKQorICAgICAgICBzZWxmLmJ1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5fZGlzbWlzc19jYikKKyAgICAgICAgc2VsZi5idXR0b24uc2V0X2ZsYWdzKGd0ay5DQU5fREVGQVVMVCkKKyAgICAgICAgc2VsZi5idXR0b24uZ3JhYl9mb2N1cygpCisgICAgICAgIHNlbGYuYnV0dG9uLnNob3coKQorICAgICAgICB2Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDApCisgICAgICAgIHZib3guc2hvdygpCisgICAgICAgIHZib3gucGFja19zdGFydChzZWxmLmJ1dHRvbiwgRmFsc2UsIEZhbHNlLCAwKQorICAgICAgICBpZiBfX2J1dHRvbl9yaWdodDoKKyAgICAgICAgICAgIGhib3gucGFja19lbmQodmJveCwgVHJ1ZSwgVHJ1ZSwgMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhib3gucGFja19zdGFydCh2Ym94LCBUcnVlLCBUcnVlLCAwKQorCisgICAgICAgIHNlbGYuc2V0X2RlZmF1bHQoc2VsZi5idXR0b24pCisKKyAgICAgICAgYmluID0gZ3RrLkhCb3goVHJ1ZSwgNikKKyAgICAgICAgYmluLnNldF9ib3JkZXJfd2lkdGgoNikKKyAgICAgICAgYmluLnNob3coKQorICAgICAgICBzZWxmLmxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgc2VsZi5sYWJlbC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICMgV2Ugd2FudCB0byBtYXRjaCB0aGUgY29sb3VycyBvZiB0aGUgbm9ybWFsIHRvb2x0aXBzLCBhcyBkaWN0YXRlZCBieQorICAgICAgICAjIHRoZSB1c2VycyBndGsrLTIuMCB0aGVtZSwgd2hlcmV2ZXIgcG9zc2libGUgLSBvbiBzb21lIHN5c3RlbXMgdGhpcworICAgICAgICAjIHJlcXVpcmVzIGV4cGxpY2l0bHkgc2V0dGluZyBhIGZnX2NvbG9yIGZvciB0aGUgbGFiZWwgd2hpY2ggbWF0Y2hlcyB0aGUKKyAgICAgICAgIyB0b29sdGlwX2ZnX2NvbG9yCisgICAgICAgIHNldHRpbmdzID0gZ3RrLnNldHRpbmdzX2dldF9kZWZhdWx0KCkKKyAgICAgICAgY29sb3VycyA9IHNldHRpbmdzLmdldF9wcm9wZXJ0eSgnZ3RrLWNvbG9yLXNjaGVtZScpLnNwbGl0KCdcbicpCisgICAgICAgICMgcmVtb3ZlIGFueSBlbXB0eSBsaW5lcywgdGhlcmUncyBsaWtlbHkgdG8gYmUgYSB0cmFpbGluZyBvbmUgYWZ0ZXIKKyAgICAgICAgIyBjYWxsaW5nIHNwbGl0IG9uIGEgZGljdGlvbmFyeS1saWtlIHN0cmluZworICAgICAgICBjb2xvdXJzID0gZmlsdGVyKE5vbmUsIGNvbG91cnMpCisgICAgICAgIGZvciBjb2wgaW4gY29sb3VyczoKKyAgICAgICAgICAgIGl0ZW0sIHZhbCA9IGNvbC5zcGxpdCgnOiAnKQorICAgICAgICAgICAgaWYgaXRlbSA9PSAndG9vbHRpcF9mZ19jb2xvcic6CisgICAgICAgICAgICAgICAgc3R5bGUgPSBzZWxmLmxhYmVsLmdldF9zdHlsZSgpCisgICAgICAgICAgICAgICAgc3R5bGUuZmdbZ3RrLlNUQVRFX05PUk1BTF0gPSBndGsuZ2RrLmNvbG9yX3BhcnNlKHZhbCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsLnNldF9zdHlsZShzdHlsZSkKKyAgICAgICAgICAgICAgICBicmVhayAjIHdlIG9ubHkgY2FyZSBmb3IgdGhlIHRvb2x0aXBfZmdfY29sb3IKKworICAgICAgICBzZWxmLmxhYmVsLnNldF9tYXJrdXAobWFya3VwKQorICAgICAgICBzZWxmLmxhYmVsLnNob3coKQorICAgICAgICBiaW4uYWRkKHNlbGYubGFiZWwpCisgICAgICAgIGhib3gucGFja19lbmQoYmluLCBUcnVlLCBUcnVlLCA2KQorCisgICAgICAgICMgYWRkIHRoZSBvcmlnaW5hbCBVUkwgZGlzcGxheSBmb3IgdXNlciByZWZlcmVuY2UKKyAgICAgICAgaWYgJ2EgaHJlZicgaW4gbWFya3VwOgorICAgICAgICAgICAgaGJveC5zZXRfdG9vbHRpcF90ZXh0KHNlbGYuZ2V0X21hcmt1cF91cmwobWFya3VwKSkKKyAgICAgICAgaGJveC5zaG93KCkKKworICAgICAgICBzZWxmLmNvbm5lY3QoImtleS1wcmVzcy1ldmVudCIsIHNlbGYuX2NhdGNoX2VzY19jYikKKworICAgICIiIgorICAgIENhbGxiYWNrIHdoZW4gdGhlIFBlcnNpc3RlbnRUb29sdGlwJ3MgY2xvc2UgYnV0dG9uIGlzIGNsaWNrZWQuCisgICAgSGlkZXMgdGhlIFBlcnNpc3RlbnRUb29sdGlwLgorICAgICIiIgorICAgIGRlZiBfZGlzbWlzc19jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmhpZGUoKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIiIiCisgICAgQ2FsbGJhY2sgd2hlbiB0aGUgRXNjIGtleSBpcyBkZXRlY3RlZC4gSGlkZXMgdGhlIFBlcnNpc3RlbnRUb29sdGlwLgorICAgICIiIgorICAgIGRlZiBfY2F0Y2hfZXNjX2NiKHNlbGYsIHdpZGdldCwgZXZlbnQpOgorICAgICAgICBrZXluYW1lID0gZ3RrLmdkay5rZXl2YWxfbmFtZShldmVudC5rZXl2YWwpCisgICAgICAgIGlmIGtleW5hbWUgPT0gIkVzY2FwZSI6CisgICAgICAgICAgICBzZWxmLmhpZGUoKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIiIiCisgICAgQ2FsbGVkIHRvIHByZXNlbnQgdGhlIFBlcnNpc3RlbnRUb29sdGlwLgorICAgIE92ZXJyaWRlcyB0aGUgc3VwZXJjbGFzc2VzIHNob3coKSBtZXRob2QgdG8gaW5jbHVkZSBzdGF0ZSB0cmFja2luZy4KKyAgICAiIiIKKyAgICBkZWYgc2hvdyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuc2hvd246CisgICAgICAgICAgICBzZWxmLnNob3duID0gVHJ1ZQorICAgICAgICAgICAgZ3RrLldpbmRvdy5zaG93KHNlbGYpCisKKyAgICAiIiIKKyAgICBDYWxsZWQgdG8gaGlkZSB0aGUgUGVyc2lzdGVudFRvb2x0aXAuCisgICAgT3ZlcnJpZGVzIHRoZSBzdXBlcmNsYXNzZXMgaGlkZSgpIG1ldGhvZCB0byBpbmNsdWRlIHN0YXRlIHRyYWNraW5nLgorICAgICIiIgorICAgIGRlZiBoaWRlKHNlbGYpOgorICAgICAgICBzZWxmLnNob3duID0gRmFsc2UKKyAgICAgICAgZ3RrLldpbmRvdy5oaWRlKHNlbGYpCisKKyAgICAiIiIKKyAgICBDYWxsZWQgdG8gZ2V0IHRoZSBoeXBlcmxpbmsgVVJMIGZyb20gbWFya3VwIHRleHQuCisgICAgIiIiCisgICAgZGVmIGdldF9tYXJrdXBfdXJsKHNlbGYsIG1hcmt1cCk6CisgICAgICAgIHVybCA9ICJodHRwOiIKKyAgICAgICAgaWYgbWFya3VwIGFuZCB0eXBlKG1hcmt1cCkgPT0gc3RyOgorICAgICAgICAgICAgcyA9IG1hcmt1cAorICAgICAgICAgICAgaWYgJ2h0dHA6JyBpbiBzOgorICAgICAgICAgICAgICAgIGltcG9ydCByZQorICAgICAgICAgICAgICAgIHVybCA9IHJlLnNlYXJjaCgnKGh0dHA6W14sXFwgIl0rKScsIHMpLmdyb3VwKDApCisKKyAgICAgICAgcmV0dXJuIHVybApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcHJvZ3Jlc3MucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wcm9ncmVzcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDI4YTExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcHJvZ3Jlc3MucHkKQEAgLTAsMCArMSwyMyBAQAoraW1wb3J0IGd0aworCitjbGFzcyBQcm9ncmVzc0JhcihndGsuRGlhbG9nKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50KToKKworICAgICAgICBndGsuRGlhbG9nLl9faW5pdF9fKHNlbGYsIGZsYWdzPShndGsuRElBTE9HX01PREFMIHwgZ3RrLkRJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5UKSkKKyAgICAgICAgc2VsZi5zZXRfdGl0bGUoIlBhcnNpbmcgbWV0YWRhdGEsIHBsZWFzZSB3YWl0Li4uIikKKyAgICAgICAgc2VsZi5zZXRfZGVmYXVsdF9zaXplKDUwMCwgMCkKKyAgICAgICAgc2VsZi5zZXRfdHJhbnNpZW50X2ZvcihwYXJlbnQpCisgICAgICAgIHNlbGYucHJvZ3Jlc3MgPSBndGsuUHJvZ3Jlc3NCYXIoKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLnByb2dyZXNzKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiBzZXRfdGV4dChzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLnByb2dyZXNzLnNldF90ZXh0KG1zZykKKworICAgIGRlZiB1cGRhdGUoc2VsZiwgeCwgeSk6CisgICAgICAgIHNlbGYucHJvZ3Jlc3Muc2V0X2ZyYWN0aW9uKGZsb2F0KHgpL2Zsb2F0KHkpKQorICAgICAgICBzZWxmLnByb2dyZXNzLnNldF90ZXh0KCIlMmQgJSUiICUgKHgqMTAwL3kpKQorCisgICAgZGVmIHB1bHNlKHNlbGYpOgorICAgICAgICBzZWxmLnByb2dyZXNzLnNldF90ZXh0KCJMb2FkaW5nLi4uIikKKyAgICAgICAgc2VsZi5wcm9ncmVzcy5wdWxzZSgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wcm9ncmVzc2Jhci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3Byb2dyZXNzYmFyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMmM2NjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wcm9ncmVzc2Jhci5weQpAQCAtMCwwICsxLDU5IEBACisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworZnJvbSBiYi51aS5jcnVtYnMuaG9iY29sb3IgaW1wb3J0IEhvYkNvbG9ycworCitjbGFzcyBIb2JQcm9ncmVzc0JhciAoZ3RrLlByb2dyZXNzQmFyKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGd0ay5Qcm9ncmVzc0Jhci5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnNldF9yY3N0eWxlKFRydWUpCisgICAgICAgIHNlbGYucGVyY2VudGFnZSA9IDAKKworICAgIGRlZiBzZXRfcmNzdHlsZShzZWxmLCBzdGF0dXMpOgorICAgICAgICByY3N0eWxlID0gZ3RrLlJjU3R5bGUoKQorICAgICAgICByY3N0eWxlLmZnWzJdID0gZ3RrLmdkay5Db2xvcihIb2JDb2xvcnMuQkxBQ0spCisgICAgICAgIGlmIHN0YXR1cyA9PSAic3RvcCI6CisgICAgICAgICAgICByY3N0eWxlLmJnWzNdID0gZ3RrLmdkay5Db2xvcihIb2JDb2xvcnMuV0FSTklORykKKyAgICAgICAgZWxpZiBzdGF0dXMgPT0gImZhaWwiOgorICAgICAgICAgICAgcmNzdHlsZS5iZ1szXSA9IGd0ay5nZGsuQ29sb3IoSG9iQ29sb3JzLkVSUk9SKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmNzdHlsZS5iZ1szXSA9IGd0ay5nZGsuQ29sb3IoSG9iQ29sb3JzLlJVTk5JTkcpCisgICAgICAgIHNlbGYubW9kaWZ5X3N0eWxlKHJjc3R5bGUpCisKKyAgICBkZWYgc2V0X3RpdGxlKHNlbGYsIHRleHQ9Tm9uZSk6CisgICAgICAgIGlmIG5vdCB0ZXh0OgorICAgICAgICAgICAgdGV4dCA9ICIiCisgICAgICAgIHRleHQgKz0gIiAlLjBmJSUiICUgc2VsZi5wZXJjZW50YWdlCisgICAgICAgIHNlbGYuc2V0X3RleHQodGV4dCkKKworICAgIGRlZiBzZXRfc3RvcF90aXRsZShzZWxmLCB0ZXh0PU5vbmUpOgorCWlmIG5vdCB0ZXh0OgorCSAgICB0ZXh0ID0gIiIKKwlzZWxmLnNldF90ZXh0KHRleHQpCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0X2ZyYWN0aW9uKDApCisgICAgICAgIHNlbGYuc2V0X3RleHQoIiIpCisgICAgICAgIHNlbGYuc2V0X3Jjc3R5bGUoVHJ1ZSkKKyAgICAgICAgc2VsZi5wZXJjZW50YWdlID0gMAorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBmcmFjdGlvbik6CisgICAgICAgIHNlbGYucGVyY2VudGFnZSA9IGludChmcmFjdGlvbiAqIDEwMCkKKyAgICAgICAgc2VsZi5zZXRfZnJhY3Rpb24oZnJhY3Rpb24pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wdWNjaG8uZ2xhZGUgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wdWNjaG8uZ2xhZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc1NTNhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3B1Y2Noby5nbGFkZQpAQCAtMCwwICsxLDYwNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8IURPQ1RZUEUgZ2xhZGUtaW50ZXJmYWNlIFNZU1RFTSAiZ2xhZGUtMi4wLmR0ZCI+Cis8IS0tR2VuZXJhdGVkIHdpdGggZ2xhZGUzIDMuNC41IG9uIE1vbiBOb3YgMTAgMTI6MjQ6MTIgMjAwOCAtLT4KKzxnbGFkZS1pbnRlcmZhY2U+CisgIDx3aWRnZXQgY2xhc3M9Ikd0a0RpYWxvZyIgaWQ9ImJ1aWxkX2RpYWxvZyI+CisgICAgPHByb3BlcnR5IG5hbWU9InRpdGxlIiB0cmFuc2xhdGFibGU9InllcyI+U3RhcnQgYSBidWlsZDwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9IndpbmRvd19wb3NpdGlvbiI+R1RLX1dJTl9QT1NfQ0VOVEVSX09OX1BBUkVOVDwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9InR5cGVfaGludCI+R0RLX1dJTkRPV19UWVBFX0hJTlRfRElBTE9HPC9wcm9wZXJ0eT4KKyAgICA8cHJvcGVydHkgbmFtZT0iaGFzX3NlcGFyYXRvciI+RmFsc2U8L3Byb3BlcnR5PgorICAgIDxjaGlsZCBpbnRlcm5hbC1jaGlsZD0idmJveCI+CisgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtWQm94IiBpZD0iZGlhbG9nLXZib3gxIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ic3BhY2luZyI+MjwvcHJvcGVydHk+CisgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtUYWJsZSIgaWQ9ImJ1aWxkX3RhYmxlIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3JkZXJfd2lkdGgiPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5fcm93cyI+NzwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibl9jb2x1bW5zIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjb2x1bW5fc3BhY2luZyI+NTwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icm93X3NwYWNpbmciPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtBbGlnbm1lbnQiIGlkPSJzdGF0dXNfYWxpZ25tZW50Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfcGFkZGluZyI+MTI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0hCb3giIGlkPSJzdGF0dXNfaGJveCI+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzcGFjaW5nIj42PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlIiBpZD0ic3RhdHVzX2ltYWdlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJub19zaG93X2FsbCI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3RrLWRpYWxvZy1lcnJvcjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZmlsbCI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0ic3RhdHVzX2xhYmVsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+SWYgeW91IHNlZSB0aGlzIHRleHQgc29tZXRoaW5nIGlzIHdyb25nLi4uPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfbWFya3VwIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3NpdGlvbiI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0ibGFiZWwyIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Jmx0O2ImZ3Q7QnVpbGQgY29uZmlndXJhdGlvbiZsdDsvYiZndDs8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfbWFya3VwIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQ29tYm9Cb3giIGlkPSJpbWFnZV9jb21ibyI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZW5zaXRpdmUiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X2F0dGFjaCI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj43PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtMYWJlbCIgaWQ9ImltYWdlX2xhYmVsIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNlbnNpdGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4xMjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+SW1hZ2U6PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj42PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQ29tYm9Cb3giIGlkPSJkaXN0cmlidXRpb25fY29tYm8iPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2Vuc2l0aXZlIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjE8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJkaXN0cmlidXRpb25fbGFiZWwiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2Vuc2l0aXZlIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjEyPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5EaXN0cmlidXRpb246PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQ29tYm9Cb3giIGlkPSJtYWNoaW5lX2NvbWJvIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNlbnNpdGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+NDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0ibWFjaGluZV9sYWJlbCI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZW5zaXRpdmUiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+MTI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPk1hY2hpbmU6PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj40PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQnV0dG9uIiBpZD0icmVmcmVzaF9idXR0b24iPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2Vuc2l0aXZlIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlY2VpdmVzX2RlZmF1bHQiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPmd0ay1yZWZyZXNoPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3N0b2NrIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzcG9uc2VfaWQiPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0VudHJ5IiBpZD0ibG9jYXRpb25fZW50cnkiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0id2lkdGhfY2hhcnMiPjMyPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X2F0dGFjaCI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjE8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtMYWJlbCIgaWQ9ImxhYmVsMyI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4xMjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+TG9jYXRpb246PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJsYWJlbDEiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj4mbHQ7YiZndDtSZXBvc2l0b3J5Jmx0Oy9iJmd0OzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9tYXJrdXAiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQWxpZ25tZW50IiBpZD0iYWxpZ25tZW50MSI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgIDxwbGFjZWhvbGRlci8+CisgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjQ8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtBbGlnbm1lbnQiIGlkPSJhbGlnbm1lbnQyIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgPHBsYWNlaG9sZGVyLz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+NTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0FsaWdubWVudCIgaWQ9ImFsaWdubWVudDMiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIvPgorICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj42PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3NpdGlvbiI+MTwvcHJvcGVydHk+CisgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICA8L2NoaWxkPgorICAgICAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImFjdGlvbl9hcmVhIj4KKyAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtIQnV0dG9uQm94IiBpZD0iZGlhbG9nLWFjdGlvbl9hcmVhMSI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGF5b3V0X3N0eWxlIj5HVEtfQlVUVE9OQk9YX0VORDwvcHJvcGVydHk+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDxwbGFjZWhvbGRlci8+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIvPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHBsYWNlaG9sZGVyLz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icGFja190eXBlIj5HVEtfUEFDS19FTkQ8L3Byb3BlcnR5PgorICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgPC9jaGlsZD4KKyAgICAgIDwvd2lkZ2V0PgorICAgIDwvY2hpbGQ+CisgIDwvd2lkZ2V0PgorICA8d2lkZ2V0IGNsYXNzPSJHdGtEaWFsb2ciIGlkPSJkaWFsb2cyIj4KKyAgICA8cHJvcGVydHkgbmFtZT0id2luZG93X3Bvc2l0aW9uIj5HVEtfV0lOX1BPU19DRU5URVJfT05fUEFSRU5UPC9wcm9wZXJ0eT4KKyAgICA8cHJvcGVydHkgbmFtZT0idHlwZV9oaW50Ij5HREtfV0lORE9XX1RZUEVfSElOVF9ESUFMT0c8L3Byb3BlcnR5PgorICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNfc2VwYXJhdG9yIj5GYWxzZTwvcHJvcGVydHk+CisgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJ2Ym94Ij4KKyAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZCb3giIGlkPSJkaWFsb2ctdmJveDIiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzcGFjaW5nIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgPGNoaWxkPgorICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1RhYmxlIiBpZD0idGFibGUyIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3JkZXJfd2lkdGgiPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5fcm93cyI+NzwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibl9jb2x1bW5zIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjb2x1bW5fc3BhY2luZyI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icm93X3NwYWNpbmciPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtMYWJlbCIgaWQ9ImxhYmVsNyI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPiZsdDtiJmd0O1JlcG9zaXRvcmllcyZsdDsvYiZndDs8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfbWFya3VwIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0FsaWdubWVudCIgaWQ9ImFsaWdubWVudDQiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9wYWRkaW5nIj4xMjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrU2Nyb2xsZWRXaW5kb3ciIGlkPSJzY3JvbGxlZHdpbmRvdzEiPgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iaHNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtUcmVlVmlldyIgaWQ9InRyZWV2aWV3MSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoZWFkZXJzX2NsaWNrYWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtFbnRyeSIgaWQ9ImVudHJ5MSI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0ibGFiZWw5Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Jmx0O2ImZ3Q7QWRkaXRpb25hbCBwYWNrYWdlcyZsdDsvYiZndDs8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfbWFya3VwIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj40PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQWxpZ25tZW50IiBpZD0iYWxpZ25tZW50NiI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4c2NhbGUiPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0ibGFiZWw4Ij4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4xMjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkxvY2F0aW9uOiA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQWxpZ25tZW50IiBpZD0iYWxpZ25tZW50NyI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjE8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4c2NhbGUiPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0hCdXR0b25Cb3giIGlkPSJoYnV0dG9uYm94MSI+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNwYWNpbmciPjU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQnV0dG9uIiBpZD0iYnV0dG9uNyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZWNlaXZlc19kZWZhdWx0Ij5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPmd0ay1yZW1vdmU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9zdG9jayI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzcG9uc2VfaWQiPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQnV0dG9uIiBpZD0iYnV0dG9uNiI+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZWNlaXZlc19kZWZhdWx0Ij5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPmd0ay1lZGl0PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2Vfc3RvY2siPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlc3BvbnNlX2lkIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3NpdGlvbiI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQnV0dG9uIiBpZD0iYnV0dG9uNSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZWNlaXZlc19kZWZhdWx0Ij5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPmd0ay1hZGQ8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9zdG9jayI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzcG9uc2VfaWQiPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InBvc2l0aW9uIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjQ8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0FsaWdubWVudCIgaWQ9ImFsaWdubWVudDUiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIvPgorICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjQ8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0ibGFiZWwxMCI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4xMjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2VhcmNoOjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+NTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0VudHJ5IiBpZD0iZW50cnkyIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjE8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQWxpZ25tZW50IiBpZD0iYWxpZ25tZW50OCI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X3BhZGRpbmciPjEyPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRvdyIgaWQ9InNjcm9sbGVkd2luZG93MiI+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoc2Nyb2xsYmFyX3BvbGljeSI+R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1RyZWVWaWV3IiBpZD0idHJlZXZpZXcyIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImhlYWRlcnNfY2xpY2thYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjc8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icG9zaXRpb24iPjE8L3Byb3BlcnR5PgorICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJhY3Rpb25fYXJlYSI+CisgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrSEJ1dHRvbkJveCIgaWQ9ImRpYWxvZy1hY3Rpb25fYXJlYTIiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxheW91dF9zdHlsZSI+R1RLX0JVVFRPTkJPWF9FTkQ8L3Byb3BlcnR5PgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtCdXR0b24iIGlkPSJidXR0b240Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlY2VpdmVzX2RlZmF1bHQiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPmd0ay1jbG9zZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9zdG9jayI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlc3BvbnNlX2lkIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InBhY2tfdHlwZSI+R1RLX1BBQ0tfRU5EPC9wcm9wZXJ0eT4KKyAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgIDwvY2hpbGQ+CisgICAgICA8L3dpZGdldD4KKyAgICA8L2NoaWxkPgorICA8L3dpZGdldD4KKyAgPHdpZGdldCBjbGFzcz0iR3RrV2luZG93IiBpZD0ibWFpbl93aW5kb3ciPgorICAgIDxjaGlsZD4KKyAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZCb3giIGlkPSJtYWluX3dpbmRvd192Ym94Ij4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVG9vbGJhciIgaWQ9Im1haW5fdG9vbGJhciI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJtYWluX3Rvb2xidXR0b25fYnVpbGQiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5CdWlsZDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InN0b2NrX2lkIj5ndGstZXhlY3V0ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICA8L2NoaWxkPgorICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVlBhbmVkIiBpZD0idnBhbmVkMSI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrU2Nyb2xsZWRXaW5kb3ciIGlkPSJyZXN1bHRzX3Njcm9sbGVkd2luZG93Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImhzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgPHBsYWNlaG9sZGVyLz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlc2l6ZSI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaHJpbmsiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRvdyIgaWQ9InByb2dyZXNzX3Njcm9sbGVkd2luZG93Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImhzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgPHBsYWNlaG9sZGVyLz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlc2l6ZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNocmluayI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icG9zaXRpb24iPjE8L3Byb3BlcnR5PgorICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgPC9jaGlsZD4KKyAgICAgIDwvd2lkZ2V0PgorICAgIDwvY2hpbGQ+CisgIDwvd2lkZ2V0PgorPC9nbGFkZS1pbnRlcmZhY2U+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9yZWNpcGVzZWxlY3Rpb25wYWdlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcmVjaXBlc2VsZWN0aW9ucGFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41OGRiNDNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcmVjaXBlc2VsZWN0aW9ucGFnZS5weQpAQCAtMCwwICsxLDMzNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IGdsaWIKK2Zyb20gYmIudWkuY3J1bWJzLmhvYmNvbG9yIGltcG9ydCBIb2JDb2xvcnMKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iVmlld1RhYmxlLCBIb2JOb3RlYm9vaywgSG9iQWx0QnV0dG9uLCBIb2JCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLmhvYmxpc3Rtb2RlbCBpbXBvcnQgUmVjaXBlTGlzdE1vZGVsCitmcm9tIGJiLnVpLmNydW1icy5ob2JwYWdlcyBpbXBvcnQgSG9iUGFnZQorCisjCisjIFJlY2lwZVNlbGVjdGlvblBhZ2UKKyMKK2NsYXNzIFJlY2lwZVNlbGVjdGlvblBhZ2UgKEhvYlBhZ2UpOgorICAgIHBhZ2VzID0gWworICAgICAgICB7CisgICAgICAgICAnbmFtZScgICAgICA6ICdJbmNsdWRlZCByZWNpcGVzJywKKyAgICAgICAgICd0b29sdGlwJyAgIDogJ1RoZSByZWNpcGVzIGN1cnJlbnRseSBpbmNsdWRlZCBmb3IgeW91ciBpbWFnZScsCisgICAgICAgICAnZmlsdGVyJyAgICA6IHsgUmVjaXBlTGlzdE1vZGVsLkNPTF9JTkMgIDogW1RydWVdLAorICAgICAgICAgICAgICAgICAgICAgICBSZWNpcGVMaXN0TW9kZWwuQ09MX1RZUEUgOiBbJ3JlY2lwZScsICdwYWNrYWdlZ3JvdXAnXSB9LAorICAgICAgICAgJ3NlYXJjaCcgICAgOiAnU2VhcmNoIHJlY2lwZXMgYnkgbmFtZScsCisgICAgICAgICAnc2VhcmNodGlwJyA6ICdFbnRlciBhIHJlY2lwZSBuYW1lIHRvIGZpbmQgaXQnLAorICAgICAgICAgJ2NvbHVtbnMnICAgOiBbeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ1JlY2lwZSBuYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICd0ZXh0JywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDQwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZCcgICA6ICdUcnVlJworICAgICAgICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdHcm91cCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBSZWNpcGVMaXN0TW9kZWwuQ09MX0dST1VQLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogMzAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ0Jyb3VnaHQgaW4gYnkgKCtvdGhlcnMpJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFJlY2lwZUxpc3RNb2RlbC5DT0xfQklOQiwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICdiaW5iJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDUwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZCcgICA6ICdUcnVlJworICAgICAgICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdJbmNsdWRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBSZWNpcGVMaXN0TW9kZWwuQ09MX0lOQywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICdjaGVjayB0b2dnbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogMTAwCisgICAgICAgICAgICAgICAgICAgICAgfV0KKyAgICAgICAgfSwgeworICAgICAgICAgJ25hbWUnICAgICAgOiAnQWxsIHJlY2lwZXMnLAorICAgICAgICAgJ3Rvb2x0aXAnICAgOiAnQWxsIHJlY2lwZXMgaW4geW91ciBjb25maWd1cmVkIGxheWVycycsCisgICAgICAgICAnZmlsdGVyJyAgICA6IHsgUmVjaXBlTGlzdE1vZGVsLkNPTF9UWVBFIDogWydyZWNpcGUnXSB9LAorICAgICAgICAgJ3NlYXJjaCcgICAgOiAnU2VhcmNoIHJlY2lwZXMgYnkgbmFtZScsCisgICAgICAgICAnc2VhcmNodGlwJyA6ICdFbnRlciBhIHJlY2lwZSBuYW1lIHRvIGZpbmQgaXQnLAorICAgICAgICAgJ2NvbHVtbnMnICAgOiBbeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ1JlY2lwZSBuYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICd0ZXh0JywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDQwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZCcgICA6ICdUcnVlJworICAgICAgICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdHcm91cCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBSZWNpcGVMaXN0TW9kZWwuQ09MX0dST1VQLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogNDAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ0xpY2Vuc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUmVjaXBlTGlzdE1vZGVsLkNPTF9MSUMsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAndGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiA0MDAsCisgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnICAgOiAnVHJ1ZScKKyAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnSW5jbHVkZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUmVjaXBlTGlzdE1vZGVsLkNPTF9JTkMsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAnY2hlY2sgdG9nZ2xlJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDEwMAorICAgICAgICAgICAgICAgICAgICAgIH1dCisgICAgICAgIH0sIHsKKyAgICAgICAgICduYW1lJyAgICAgIDogJ1BhY2thZ2UgR3JvdXBzJywKKyAgICAgICAgICd0b29sdGlwJyAgIDogJ0FsbCBwYWNrYWdlIGdyb3VwcyBpbiB5b3VyIGNvbmZpZ3VyZWQgbGF5ZXJzJywKKyAgICAgICAgICdmaWx0ZXInICAgIDogeyBSZWNpcGVMaXN0TW9kZWwuQ09MX1RZUEUgOiBbJ3BhY2thZ2Vncm91cCddIH0sCisgICAgICAgICAnc2VhcmNoJyAgICA6ICdTZWFyY2ggcGFja2FnZSBncm91cHMgYnkgbmFtZScsCisgICAgICAgICAnc2VhcmNodGlwJyA6ICdFbnRlciBhIHBhY2thZ2UgZ3JvdXAgbmFtZSB0byBmaW5kIGl0JywKKyAgICAgICAgICdjb2x1bW5zJyAgIDogW3sKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdQYWNrYWdlIGdyb3VwIG5hbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogNDAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ0luY2x1ZGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFJlY2lwZUxpc3RNb2RlbC5DT0xfSU5DLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ2NoZWNrIHRvZ2dsZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiAxMDAKKyAgICAgICAgICAgICAgICAgICAgICB9XQorICAgICAgICB9CisgICAgXQorICAgIAorICAgIChJTkNMVURFRCwKKyAgICAgQUxMLAorICAgICBUQVNLUykgPSByYW5nZSgzKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1aWxkZXIgPSBOb25lKToKKyAgICAgICAgc3VwZXIoUmVjaXBlU2VsZWN0aW9uUGFnZSwgc2VsZikuX19pbml0X18oYnVpbGRlciwgIlN0ZXAgMSBvZiAyOiBFZGl0IHJlY2lwZXMiKQorCisgICAgICAgICMgc2V0IGludmlzaWJsZSBtZW1iZXJzCisgICAgICAgIHNlbGYucmVjaXBlX21vZGVsID0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbAorCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorCisgICAgZGVmIGluY2x1ZGVkX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5pbnMuc2V0X2N1cnJlbnRfcGFnZShzZWxmLklOQ0xVREVEKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuZXZlbnRib3ggPSBzZWxmLmFkZF9vbnRvX3RvcF9iYXIoTm9uZSwgNzMpCisgICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLmV2ZW50Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLmdyb3VwX2FsaWduLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgICMgc2V0IHZpc2libGUgbWVtYmVycworICAgICAgICBzZWxmLmlucyA9IEhvYk5vdGVib29rKCkKKyAgICAgICAgc2VsZi50YWJsZXMgPSBbXSAjIHdlIG5lZWQgbW9kaWZ5IHRhYmxlIHdoZW4gdGhlIGRpYWxvZyBpcyBzaG93bgorCisgICAgICAgIHNlYXJjaF9uYW1lcyA9IFtdCisgICAgICAgIHNlYXJjaF90aXBzID0gW10KKyAgICAgICAgIyBhcHBlbmQgdGhlIHRhYnMgaW4gb3JkZXIKKyAgICAgICAgZm9yIHBhZ2UgaW4gc2VsZi5wYWdlczoKKyAgICAgICAgICAgIGNvbHVtbnMgPSBwYWdlWydjb2x1bW5zJ10KKyAgICAgICAgICAgIG5hbWUgPSBwYWdlWyduYW1lJ10KKyAgICAgICAgICAgIHRhYiA9IEhvYlZpZXdUYWJsZShjb2x1bW5zLCBuYW1lKQorICAgICAgICAgICAgc2VhcmNoX25hbWVzLmFwcGVuZChwYWdlWydzZWFyY2gnXSkKKyAgICAgICAgICAgIHNlYXJjaF90aXBzLmFwcGVuZChwYWdlWydzZWFyY2h0aXAnXSkKKyAgICAgICAgICAgIGZpbHRlciA9IHBhZ2VbJ2ZpbHRlciddCisgICAgICAgICAgICBzb3J0X21vZGVsID0gc2VsZi5yZWNpcGVfbW9kZWwudHJlZV9tb2RlbChmaWx0ZXIsIGluaXRpYWw9VHJ1ZSkKKyAgICAgICAgICAgIHRhYi5zZXRfbW9kZWwoc29ydF9tb2RlbCkKKyAgICAgICAgICAgIHRhYi5jb25uZWN0KCJ0b2dnbGVkIiwgc2VsZi50YWJsZV90b2dnbGVkX2NiLCBuYW1lKQorICAgICAgICAgICAgdGFiLmNvbm5lY3QoImJ1dHRvbi1yZWxlYXNlLWV2ZW50Iiwgc2VsZi5idXR0b25fY2xpY2tfY2IpCisgICAgICAgICAgICB0YWIuY29ubmVjdCgiY2VsbC1mYWRlaW5vdXQtc3RvcHBlZCIsIHNlbGYuYWZ0ZXJfZmFkZW91dF9jaGVja2luX2luY2x1ZGUsIGZpbHRlcikKKyAgICAgICAgICAgIHNlbGYuaW5zLmFwcGVuZF9wYWdlKHRhYiwgcGFnZVsnbmFtZSddLCBwYWdlWyd0b29sdGlwJ10pCisgICAgICAgICAgICBzZWxmLnRhYmxlcy5hcHBlbmQodGFiKQorCisgICAgICAgIHNlbGYuaW5zLnNldF9lbnRyeShzZWFyY2hfbmFtZXMsIHNlYXJjaF90aXBzKQorICAgICAgICBzZWxmLmlucy5zZWFyY2guY29ubmVjdCgiY2hhbmdlZCIsIHNlbGYuc2VhcmNoX2VudHJ5X2NoYW5nZWQpCisKKyAgICAgICAgIyBhZGQgYWxsIGludG8gdGhlIHdpbmRvdworICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi5pbnMsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgYnV0dG9uX2JveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfZW5kKGJ1dHRvbl9ib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzZWxmLmJ1aWxkX3BhY2thZ2VzX2J1dHRvbiA9IEhvYkJ1dHRvbignQnVpbGQgcGFja2FnZXMnKQorICAgICAgICAjc2VsZi5idWlsZF9wYWNrYWdlc19idXR0b24uc2V0X3NpemVfcmVxdWVzdCgyMDUsIDQ5KQorICAgICAgICBzZWxmLmJ1aWxkX3BhY2thZ2VzX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJCdWlsZCBzZWxlY3RlZCByZWNpcGVzIGludG8gcGFja2FnZXMiKQorICAgICAgICBzZWxmLmJ1aWxkX3BhY2thZ2VzX2J1dHRvbi5zZXRfZmxhZ3MoZ3RrLkNBTl9ERUZBVUxUKQorICAgICAgICBzZWxmLmJ1aWxkX3BhY2thZ2VzX2J1dHRvbi5ncmFiX2RlZmF1bHQoKQorICAgICAgICBzZWxmLmJ1aWxkX3BhY2thZ2VzX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5idWlsZF9wYWNrYWdlc19jbGlja2VkX2NiKQorICAgICAgICBidXR0b25fYm94LnBhY2tfZW5kKHNlbGYuYnVpbGRfcGFja2FnZXNfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc2VsZi5iYWNrX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbignQ2FuY2VsJykKKyAgICAgICAgc2VsZi5iYWNrX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5iYWNrX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICBidXR0b25fYm94LnBhY2tfZW5kKHNlbGYuYmFja19idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgIGRlZiBzZWFyY2hfZW50cnlfY2hhbmdlZChzZWxmLCBlbnRyeSk6CisgICAgICAgIHRleHQgPSBlbnRyeS5nZXRfdGV4dCgpCisgICAgICAgIGlmIHNlbGYuaW5zLnNlYXJjaF9mb2N1czoKKyAgICAgICAgICAgIHNlbGYuaW5zLnNlYXJjaF9mb2N1cyA9IEZhbHNlCisgICAgICAgIGVsaWYgc2VsZi5pbnMucGFnZV9jaGFuZ2VkOgorICAgICAgICAgICAgc2VsZi5pbnMucGFnZV9jaGFuZ2UgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5maWx0ZXJfc2VhcmNoKGVudHJ5KQorICAgICAgICBlbGlmIHRleHQgbm90IGluIHNlbGYuaW5zLnNlYXJjaF9uYW1lczoKKyAgICAgICAgICAgIHNlbGYuZmlsdGVyX3NlYXJjaChlbnRyeSkKKworICAgIGRlZiBmaWx0ZXJfc2VhcmNoKHNlbGYsIGVudHJ5KToKKyAgICAgICAgdGV4dCA9IGVudHJ5LmdldF90ZXh0KCkKKyAgICAgICAgY3VycmVudF90YWIgPSBzZWxmLmlucy5nZXRfY3VycmVudF9wYWdlKCkKKyAgICAgICAgZmlsdGVyID0gc2VsZi5wYWdlc1tjdXJyZW50X3RhYl1bJ2ZpbHRlciddCisgICAgICAgIGZpbHRlcltSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUVdID0gdGV4dAorICAgICAgICBzZWxmLnRhYmxlc1tjdXJyZW50X3RhYl0uc2V0X21vZGVsKHNlbGYucmVjaXBlX21vZGVsLnRyZWVfbW9kZWwoZmlsdGVyLCBzZWFyY2hfZGF0YT10ZXh0KSkKKyAgICAgICAgaWYgc2VsZi5yZWNpcGVfbW9kZWwuZmlsdGVyZWRfbmIgPT0gMDoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnRvcF9iYXI6CisgICAgICAgICAgICAgICAgc2VsZi5pbnMuZ2V0X250aF9wYWdlKGN1cnJlbnRfdGFiKS5hZGRfbm9fcmVzdWx0X2JhcihlbnRyeSkKKyAgICAgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnRvcF9iYXIuc2V0X25vX3Nob3dfYWxsKFRydWUpCisgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnRvcF9iYXIuc2hvdygpCisgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnNjcm9sbC5oaWRlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2JhcjoKKyAgICAgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnRvcF9iYXIuaGlkZSgpCisgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnNjcm9sbC5zaG93KCkKKyAgICAgICAgaWYgZW50cnkuZ2V0X3RleHQoKSA9PSAnJzoKKyAgICAgICAgICAgIGVudHJ5LnNldF9pY29uX3NlbnNpdGl2ZShndGsuRU5UUllfSUNPTl9TRUNPTkRBUlksIEZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZW50cnkuc2V0X2ljb25fc2Vuc2l0aXZlKGd0ay5FTlRSWV9JQ09OX1NFQ09OREFSWSwgVHJ1ZSkKKworICAgIGRlZiBidXR0b25fY2xpY2tfY2Ioc2VsZiwgd2lkZ2V0LCBldmVudCk6CisgICAgICAgIHBhdGgsIGNvbCA9IHdpZGdldC50YWJsZV90cmVlLmdldF9jdXJzb3IoKQorICAgICAgICB0cmVlX21vZGVsID0gd2lkZ2V0LnRhYmxlX3RyZWUuZ2V0X21vZGVsKCkKKyAgICAgICAgaWYgcGF0aCBhbmQgY29sLmdldF90aXRsZSgpICE9ICdJbmNsdWRlZCc6ICMgZWxzZSBhY3RpdmF0aW9uIGlzIGxpa2VseSBhIHJlbW92YWwKKyAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7J3N1bW1hcnknOiAnJywgJ25hbWUnOiAnJywgJ3ZlcnNpb24nOiAnJywgJ3JldmlzaW9uJzogJycsICdiaW5iJzogJycsICdncm91cCc6ICcnLCAnbGljZW5zZSc6ICcnLCAnaG9tZXBhZ2UnOiAnJywgJ2J1Z3RyYWNrZXInOiAnJywgJ2Rlc2NyaXB0aW9uJzogJyd9CisgICAgICAgICAgICBwcm9wZXJ0aWVzWydzdW1tYXJ5J10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBSZWNpcGVMaXN0TW9kZWwuQ09MX1NVTU1BUlkpCisgICAgICAgICAgICBwcm9wZXJ0aWVzWyduYW1lJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICBwcm9wZXJ0aWVzWyd2ZXJzaW9uJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBSZWNpcGVMaXN0TW9kZWwuQ09MX1ZFUlNJT04pCisgICAgICAgICAgICBwcm9wZXJ0aWVzWydyZXZpc2lvbiddID0gdHJlZV9tb2RlbC5nZXRfdmFsdWUodHJlZV9tb2RlbC5nZXRfaXRlcihwYXRoKSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9SRVZJU0lPTikKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ2JpbmInXSA9IHRyZWVfbW9kZWwuZ2V0X3ZhbHVlKHRyZWVfbW9kZWwuZ2V0X2l0ZXIocGF0aCksIFJlY2lwZUxpc3RNb2RlbC5DT0xfQklOQikKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ2dyb3VwJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0dST1VQKQorICAgICAgICAgICAgcHJvcGVydGllc1snbGljZW5zZSddID0gdHJlZV9tb2RlbC5nZXRfdmFsdWUodHJlZV9tb2RlbC5nZXRfaXRlcihwYXRoKSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9MSUMpCisgICAgICAgICAgICBwcm9wZXJ0aWVzWydob21lcGFnZSddID0gdHJlZV9tb2RlbC5nZXRfdmFsdWUodHJlZV9tb2RlbC5nZXRfaXRlcihwYXRoKSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9IT01FUEFHRSkKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ2J1Z3RyYWNrZXInXSA9IHRyZWVfbW9kZWwuZ2V0X3ZhbHVlKHRyZWVfbW9kZWwuZ2V0X2l0ZXIocGF0aCksIFJlY2lwZUxpc3RNb2RlbC5DT0xfQlVHVFJBQ0tFUikKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ2Rlc2NyaXB0aW9uJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0RFU0MpCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19yZWNpcGVfcHJvcGVydHlfZGlhbG9nKHByb3BlcnRpZXMpCisKKyAgICBkZWYgYnVpbGRfcGFja2FnZXNfY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLnJlZnJlc2hfdGFibGVzKCkKKyAgICAgICAgc2VsZi5idWlsZGVyLmJ1aWxkX3BhY2thZ2VzKCkKKworICAgIGRlZiByZWZyZXNoX3RhYmxlcyhzZWxmKToKKyAgICAgICAgc2VsZi5pbnMucmVzZXRfZW50cnkoc2VsZi5pbnMuc2VhcmNoLCAwKQorICAgICAgICBmb3IgdGFiIGluIHNlbGYudGFibGVzOgorICAgICAgICAgICAgaW5kZXggPSBzZWxmLnRhYmxlcy5pbmRleCh0YWIpCisgICAgICAgICAgICBmaWx0ZXIgPSBzZWxmLnBhZ2VzW2luZGV4XVsnZmlsdGVyJ10KKyAgICAgICAgICAgIHRhYi5zZXRfbW9kZWwoc2VsZi5yZWNpcGVfbW9kZWwudHJlZV9tb2RlbChmaWx0ZXIsIHNlYXJjaF9kYXRhPSIiLCBpbml0aWFsPVRydWUpKQorCisgICAgZGVmIGJhY2tfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5zZXRfc2VsZWN0ZWRfaW1hZ2Uoc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uaW5pdGlhbF9zZWxlY3RlZF9pbWFnZSkKKyAgICAgICAgc2VsZi5idWlsZGVyLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS51cGRhdGVfaW1hZ2VfY29tYm8oc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbCwgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uaW5pdGlhbF9zZWxlY3RlZF9pbWFnZSkKKyAgICAgICAgc2VsZi5idWlsZGVyLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS51cGRhdGVfaW1hZ2VfZGVzYygpCisgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X2NvbmZpZ3VyYXRpb24oKQorICAgICAgICBzZWxmLnJlZnJlc2hfdGFibGVzKCkKKworICAgIGRlZiByZWZyZXNoX3NlbGVjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfaW1hZ2UgPSBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfaW1hZ2UoKQorICAgICAgICBfLCBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9yZWNpcGVzID0gc2VsZi5yZWNpcGVfbW9kZWwuZ2V0X3NlbGVjdGVkX3JlY2lwZXMoKQorICAgICAgICBzZWxmLmlucy5zaG93X2luZGljYXRvcl9pY29uKCJJbmNsdWRlZCByZWNpcGVzIiwgbGVuKHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLnNlbGVjdGVkX3JlY2lwZXMpKQorCisgICAgZGVmIHRvZ2dsZV9pdGVtX2lkbGVfY2Ioc2VsZiwgcGF0aCwgdmlld190cmVlLCBjZWxsLCBwYWdlbmFtZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLnJlY2lwZV9tb2RlbC5wYXRoX2luY2x1ZGVkKHBhdGgpOgorICAgICAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwuaW5jbHVkZV9pdGVtKGl0ZW1fcGF0aD1wYXRoLCBiaW5iPSJVc2VyIFNlbGVjdGVkIiwgaW1hZ2VfY29udGVudHM9RmFsc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnByZV9mYWRlb3V0X2NoZWNrb3V0X2luY2x1ZGUodmlld190cmVlLCBwYWdlbmFtZSkKKyAgICAgICAgICAgIHNlbGYucmVjaXBlX21vZGVsLmV4Y2x1ZGVfaXRlbShpdGVtX3BhdGg9cGF0aCkKKyAgICAgICAgICAgIHNlbGYucmVuZGVyX2ZhZGVvdXQodmlld190cmVlLCBjZWxsKQorCisgICAgICAgIHNlbGYucmVmcmVzaF9zZWxlY3Rpb24oKQorICAgICAgICBpZiBub3Qgc2VsZi5idWlsZGVyLmN1c3RvbWl6ZWQ6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuY3VzdG9taXplZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLnNlbGVjdGVkX2ltYWdlID0gc2VsZi5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXworICAgICAgICAgICAgc2VsZi5idWlsZGVyLnJjcHBrZ2xpc3RfcG9wdWxhdGVkKCkKKworICAgICAgICBzZWxmLmJ1aWxkZXIud2luZG93X3NlbnNpdGl2ZShUcnVlKQorCisgICAgICAgIHZpZXdfbW9kZWwgPSB2aWV3X3RyZWUuZ2V0X21vZGVsKCkKKyAgICAgICAgdnBhdGggPSBzZWxmLnJlY2lwZV9tb2RlbC5jb252ZXJ0X3BhdGhfdG9fdnBhdGgodmlld19tb2RlbCwgcGF0aCkKKyAgICAgICAgdmlld190cmVlLnNldF9jdXJzb3IodnBhdGgpCisKKyAgICBkZWYgdGFibGVfdG9nZ2xlZF9jYihzZWxmLCB0YWJsZSwgY2VsbCwgdmlld19wYXRoLCB0b2dnbGVkX2NvbHVtbmlkLCB2aWV3X3RyZWUsIHBhZ2VuYW1lKToKKyAgICAgICAgIyBDbGljayB0byBpbmNsdWRlIGEgcmVjaXBlCisgICAgICAgIHNlbGYuYnVpbGRlci53aW5kb3dfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICB2aWV3X21vZGVsID0gdmlld190cmVlLmdldF9tb2RlbCgpCisgICAgICAgIHBhdGggPSBzZWxmLnJlY2lwZV9tb2RlbC5jb252ZXJ0X3ZwYXRoX3RvX3BhdGgodmlld19tb2RlbCwgdmlld19wYXRoKQorICAgICAgICBnbGliLmlkbGVfYWRkKHNlbGYudG9nZ2xlX2l0ZW1faWRsZV9jYiwgcGF0aCwgdmlld190cmVlLCBjZWxsLCBwYWdlbmFtZSkKKworICAgIGRlZiBwcmVfZmFkZW91dF9jaGVja291dF9pbmNsdWRlKHNlbGYsIHRyZWUsIHBhZ2VuYW1lKToKKyAgICAgICAgI2FmdGVyIHRoZSBmYWRlb3V0IHRoZSB0YWJsZSB3aWxsIGJlIHNvcnRlZCBhcyBiZWZvcmUKKyAgICAgICAgc2VsZi5zb3J0X2NvbHVtbl9pZCA9IHNlbGYucmVjaXBlX21vZGVsLnNvcnRfY29sdW1uX2lkCisgICAgICAgIHNlbGYuc29ydF9vcmRlciA9IHNlbGYucmVjaXBlX21vZGVsLnNvcnRfb3JkZXIKKworICAgICAgICAjcmVzeW5jIHRoZSBpbmNsdWRlZCBpdGVtcyB0byBhIGJhY2t1cCBmYWRlIGluY2x1ZGUgY29sdW1uCisgICAgICAgIGl0ID0gc2VsZi5yZWNpcGVfbW9kZWwuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIGFjdGl2ZSA9IHNlbGYucmVjaXBlX21vZGVsLmdldF92YWx1ZShpdCwgc2VsZi5yZWNpcGVfbW9kZWwuQ09MX0lOQykKKyAgICAgICAgICAgIHNlbGYucmVjaXBlX21vZGVsLnNldChpdCwgc2VsZi5yZWNpcGVfbW9kZWwuQ09MX0ZBREVfSU5DLCBhY3RpdmUpCisgICAgICAgICAgICBpdCA9IHNlbGYucmVjaXBlX21vZGVsLml0ZXJfbmV4dChpdCkKKyAgICAgICAgIyBDaGVjayBvdXQgYSBtb2RlbCB3aGljaCBiYXNlIG9uIHRoZSBjb2x1bW4gQ09MX0ZBREVfSU5DLAorICAgICAgICAjIGl0J3Mgc2F2ZSB0aGUgcHJldiBzdGF0ZSBvZiBjb2x1bW4gQ09MX0lOQyBiZWZvcmUgZG8gZXhjbHVkZV9pdGVtCisgICAgICAgIGZpbHRlciA9IHsgUmVjaXBlTGlzdE1vZGVsLkNPTF9GQURFX0lOQzpbVHJ1ZV0gfQorICAgICAgICBpZiBwYWdlbmFtZSA9PSAiSW5jbHVkZWQgcmVjaXBlcyI6CisgICAgICAgICAgICBmaWx0ZXJbUmVjaXBlTGlzdE1vZGVsLkNPTF9UWVBFXSA9IFsncmVjaXBlJywgJ3BhY2thZ2Vncm91cCddCisgICAgICAgIGVsaWYgcGFnZW5hbWUgPT0gIkFsbCByZWNpcGVzIjoKKyAgICAgICAgICAgIGZpbHRlcltSZWNpcGVMaXN0TW9kZWwuQ09MX1RZUEVdID0gWydyZWNpcGUnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsdGVyW1JlY2lwZUxpc3RNb2RlbC5DT0xfVFlQRV0gPSBbJ3BhY2thZ2Vncm91cCddCisKKyAgICAgICAgbmV3X21vZGVsID0gc2VsZi5yZWNpcGVfbW9kZWwudHJlZV9tb2RlbChmaWx0ZXIsIGV4Y2x1ZGVkX2l0ZW1zX2FoZWFkPVRydWUpCisgICAgICAgIHRyZWUuc2V0X21vZGVsKG5ld19tb2RlbCkKKworICAgIGRlZiByZW5kZXJfZmFkZW91dChzZWxmLCB0cmVlLCBjZWxsKToKKyAgICAgICAgaWYgKG5vdCBjZWxsKSBvciAobm90IHRyZWUpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRvX3JlbmRlcl9jZWxscyA9IFtdCisgICAgICAgIG1vZGVsID0gdHJlZS5nZXRfbW9kZWwoKQorICAgICAgICBpdCA9IG1vZGVsLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBwYXRoID0gbW9kZWwuZ2V0X3BhdGgoaXQpCisgICAgICAgICAgICBwcmV2X2NlbGxfaXNfYWN0aXZlID0gbW9kZWwuZ2V0X3ZhbHVlKGl0LCBSZWNpcGVMaXN0TW9kZWwuQ09MX0ZBREVfSU5DKQorICAgICAgICAgICAgY3Vycl9jZWxsX2lzX2FjdGl2ZSA9IG1vZGVsLmdldF92YWx1ZShpdCwgUmVjaXBlTGlzdE1vZGVsLkNPTF9JTkMpCisgICAgICAgICAgICBpZiAocHJldl9jZWxsX2lzX2FjdGl2ZSA9PSBUcnVlKSBhbmQgKGN1cnJfY2VsbF9pc19hY3RpdmUgPT0gRmFsc2UpOgorICAgICAgICAgICAgICAgIHRvX3JlbmRlcl9jZWxscy5hcHBlbmQocGF0aCkKKyAgICAgICAgICAgIGl0ID0gbW9kZWwuaXRlcl9uZXh0KGl0KQorCisgICAgICAgIGNlbGwuZmFkZW91dCh0cmVlLCAxMDAwLCB0b19yZW5kZXJfY2VsbHMpCisKKyAgICBkZWYgYWZ0ZXJfZmFkZW91dF9jaGVja2luX2luY2x1ZGUoc2VsZiwgdGFibGUsIGN0cmwsIGNlbGwsIHRyZWUsIGZpbHRlcik6CisgICAgICAgIHNlbGYucmVjaXBlX21vZGVsLnNvcnRfY29sdW1uX2lkID0gc2VsZi5zb3J0X2NvbHVtbl9pZAorICAgICAgICBzZWxmLnJlY2lwZV9tb2RlbC5zb3J0X29yZGVyID0gc2VsZi5zb3J0X29yZGVyCisgICAgICAgIHRyZWUuc2V0X21vZGVsKHNlbGYucmVjaXBlX21vZGVsLnRyZWVfbW9kZWwoZmlsdGVyKSkKKworICAgIGRlZiBzZXRfcmVjaXBlX2N1cnJfdGFiKHNlbGYsIGN1cnJfcGFnZSk6CisgICAgICAgIHNlbGYuaW5zLnNldF9jdXJyZW50X3BhZ2UoY3Vycl9wYWdlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcnVubmluZ2J1aWxkLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcnVubmluZ2J1aWxkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YTk1NWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ydW5uaW5nYnVpbGQucHkKQEAgLTAsMCArMSw1NTEgQEAKKworIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4ICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBSb2IgQnJhZGZvcmQgPHJvYkBsaW51eC5pbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdXJsbGliCitpbXBvcnQgdXJsbGliMgoraW1wb3J0IHBhbmdvCitmcm9tIGJiLnVpLmNydW1icy5ob2Jjb2xvciBpbXBvcnQgSG9iQ29sb3JzCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IEhvYldhcnBDZWxsUmVuZGVyZXJUZXh0LCBIb2JDZWxsUmVuZGVyZXJQaXhidWYKKworY2xhc3MgUnVubmluZ0J1aWxkTW9kZWwgKGd0ay5UcmVlU3RvcmUpOgorICAgIChDT0xfTE9HLCBDT0xfUEFDS0FHRSwgQ09MX1RBU0ssIENPTF9NRVNTQUdFLCBDT0xfSUNPTiwgQ09MX0NPTE9SLCBDT0xfTlVNX0FDVElWRSkgPSByYW5nZSg3KQorCisgICAgZGVmIF9faW5pdF9fIChzZWxmKToKKyAgICAgICAgZ3RrLlRyZWVTdG9yZS5fX2luaXRfXyAoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX0lOVCkKKworICAgIGRlZiBmYWlsdXJlX21vZGVsX2ZpbHRlcihzZWxmLCBtb2RlbCwgaXQpOgorICAgICAgICBjb2xvciA9IG1vZGVsLmdldChpdCwgc2VsZi5DT0xfQ09MT1IpWzBdCisgICAgICAgIGlmIG5vdCBjb2xvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBjb2xvciA9PSBIb2JDb2xvcnMuRVJST1Igb3IgY29sb3IgPT0gSG9iQ29sb3JzLldBUk5JTkc6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBmYWlsdXJlX21vZGVsKHNlbGYpOgorICAgICAgICBtb2RlbCA9IHNlbGYuZmlsdGVyX25ldygpCisgICAgICAgIG1vZGVsLnNldF92aXNpYmxlX2Z1bmMoc2VsZi5mYWlsdXJlX21vZGVsX2ZpbHRlcikKKyAgICAgICAgcmV0dXJuIG1vZGVsCisKKyAgICBkZWYgZm9yZWFjaF9jZWxsX2Z1bmMoc2VsZiwgbW9kZWwsIHBhdGgsIGl0ZXIsIHVzcl9kYXRhPU5vbmUpOgorICAgICAgICBpZiBtb2RlbC5nZXRfdmFsdWUoaXRlciwgc2VsZi5DT0xfSUNPTikgPT0gImd0ay1leGVjdXRlIjoKKyAgICAgICAgICAgIG1vZGVsLnNldChpdGVyLCBzZWxmLkNPTF9JQ09OLCAiIikKKworICAgIGRlZiBjbG9zZV90YXNrX3JlZnJlc2goc2VsZik6CisgICAgICAgIHNlbGYuZm9yZWFjaChzZWxmLmZvcmVhY2hfY2VsbF9mdW5jLCBOb25lKQorCitjbGFzcyBSdW5uaW5nQnVpbGQgKGdvYmplY3QuR09iamVjdCk6CisgICAgX19nc2lnbmFsc19fID0geworICAgICAgICAgICdidWlsZC1zdGFydGVkJyAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgICdidWlsZC1zdWNjZWVkZWQnIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgICdidWlsZC1mYWlsZWQnICAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgICdidWlsZC1jb21wbGV0ZScgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgICdidWlsZC1hYm9ydGVkJyAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgICd0YXNrLXN0YXJ0ZWQnICAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9QWU9CSkVDVCwpKSwKKyAgICAgICAgICAnbG9nLWVycm9yJyAgICAgICA6ICAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICAgICAgICAnbG9nLXdhcm5pbmcnICAgICA6ICAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICAgICAgICAnZGlzay1mdWxsJyAgICAgICA6ICAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICAgICAgICAnbm8tcHJvdmlkZXInICAgICA6ICAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsKSksCisgICAgICAgICAgJ2xvZycgICAgICAgICAgICAgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1NUUklORywgZ29iamVjdC5UWVBFX1BZT0JKRUNULCkpLAorICAgICAgICAgIH0KKyAgICBwaWRzX3RvX3Rhc2sgPSB7fQorICAgIHRhc2tzX3RvX2l0ZXIgPSB7fQorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCBzZXF1ZW50aWFsPUZhbHNlKToKKyAgICAgICAgZ29iamVjdC5HT2JqZWN0Ll9faW5pdF9fIChzZWxmKQorICAgICAgICBzZWxmLm1vZGVsID0gUnVubmluZ0J1aWxkTW9kZWwoKQorICAgICAgICBzZWxmLnNlcXVlbnRpYWwgPSBzZXF1ZW50aWFsCisgICAgICAgIHNlbGYuYnVpbGRhYm9ydGVkID0gRmFsc2UKKworICAgIGRlZiByZXNldCAoc2VsZik6CisgICAgICAgIHNlbGYucGlkc190b190YXNrLmNsZWFyKCkKKyAgICAgICAgc2VsZi50YXNrc190b19pdGVyLmNsZWFyKCkKKyAgICAgICAgc2VsZi5tb2RlbC5jbGVhcigpCisKKyAgICBkZWYgaGFuZGxlX2V2ZW50IChzZWxmLCBldmVudCwgcGJhcj1Ob25lKToKKyAgICAgICAgIyBIYW5kbGUgYW4gZXZlbnQgZnJvbSB0aGUgZXZlbnQgcXVldWUsIHRoaXMgbWF5IHJlc3VsdCBpbiB1cGRhdGluZworICAgICAgICAjIHRoZSBtb2RlbCBhbmQgdGh1cyB0aGUgVUkuIE9yIGl0IG1heSBiZSB0byB0ZWxsIHVzIHRoYXQgdGhlIGJ1aWxkCisgICAgICAgICMgaGFzIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseSAob3Igbm90LCBhcyB0aGUgY2FzZSBtYXkgYmUuKQorCisgICAgICAgIHBhcmVudCA9IE5vbmUKKyAgICAgICAgcGlkID0gMAorICAgICAgICBwYWNrYWdlID0gTm9uZQorICAgICAgICB0YXNrID0gTm9uZQorCisgICAgICAgICMgSWYgd2UgaGF2ZSBhIHBpZCBhdHRhY2hlZCB0byB0aGlzIG1lc3NhZ2UvZXZlbnQgdHJ5IGFuZCBnZXQgdGhlCisgICAgICAgICMgKHBhY2thZ2UsIHRhc2spIHBhaXIgZm9yIGl0LiBJZiB3ZSBnZXQgdGhhdCB0aGVuIGdldCB0aGUgcGFyZW50IGl0ZXIKKyAgICAgICAgIyBmb3IgdGhlIG1lc3NhZ2UuCisgICAgICAgIGlmIGhhc2F0dHIoZXZlbnQsICdwaWQnKToKKyAgICAgICAgICAgIHBpZCA9IGV2ZW50LnBpZAorICAgICAgICBpZiBoYXNhdHRyKGV2ZW50LCAncHJvY2VzcycpOgorICAgICAgICAgICAgcGlkID0gZXZlbnQucHJvY2VzcworCisgICAgICAgIGlmIHBpZCBhbmQgcGlkIGluIHNlbGYucGlkc190b190YXNrOgorICAgICAgICAgICAgKHBhY2thZ2UsIHRhc2spID0gc2VsZi5waWRzX3RvX3Rhc2tbcGlkXQorICAgICAgICAgICAgcGFyZW50ID0gc2VsZi50YXNrc190b19pdGVyWyhwYWNrYWdlLCB0YXNrKV0KKworICAgICAgICBpZihpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCkpOgorICAgICAgICAgICAgaWYgZXZlbnQudGFza3BpZCA9PSAwIG9yIGV2ZW50LmxldmVsbm8gPiBsb2dnaW5nLklORk86CisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiaGFuZGxlIiwgZXZlbnQpCisgICAgICAgICAgICAjIEZJWE1FOiB0aGlzIGlzIGEgaGFjayEgTW9yZSBpbmZvIGluIFlvY3RvICMxNDMzCisgICAgICAgICAgICAjIGh0dHA6Ly9idWd6aWxsYS5wb2t5bGludXgub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMzLCB0ZW1wb3JhcmlseQorICAgICAgICAgICAgIyBtYXNrIHRoZSBlcnJvciBtZXNzYWdlIGFzIGl0J3Mgbm90IGluZm9ybWF0aXZlIGZvciB0aGUgdXNlci4KKyAgICAgICAgICAgIGlmIGV2ZW50Lm1zZy5zdGFydHN3aXRoKCJFeGVjdXRpb24gb2YgZXZlbnQgaGFuZGxlciAncnVuX2J1aWxkc3RhdHMnIGZhaWxlZCIpOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBpZiAoZXZlbnQubGV2ZWxubyA8IGxvZ2dpbmcuSU5GTyBvcgorICAgICAgICAgICAgICAgIGV2ZW50Lm1zZy5zdGFydHN3aXRoKCJSdW5uaW5nIHRhc2siKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuICMgZG9uJ3QgYWRkIHRoZXNlIHRvIHRoZSBsaXN0CisKKyAgICAgICAgICAgIGlmIGV2ZW50LmxldmVsbm8gPj0gbG9nZ2luZy5FUlJPUjoKKyAgICAgICAgICAgICAgICBpY29uID0gImRpYWxvZy1lcnJvciIKKyAgICAgICAgICAgICAgICBjb2xvciA9IEhvYkNvbG9ycy5FUlJPUgorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgibG9nLWVycm9yIikKKyAgICAgICAgICAgIGVsaWYgZXZlbnQubGV2ZWxubyA+PSBsb2dnaW5nLldBUk5JTkc6CisgICAgICAgICAgICAgICAgaWNvbiA9ICJkaWFsb2ctd2FybmluZyIKKyAgICAgICAgICAgICAgICBjb2xvciA9IEhvYkNvbG9ycy5XQVJOSU5HCisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ctd2FybmluZyIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGljb24gPSBOb25lCisgICAgICAgICAgICAgICAgY29sb3IgPSBIb2JDb2xvcnMuT0sKKworICAgICAgICAgICAgIyBpZiB3ZSBrbm93IHdoaWNoIHBhY2thZ2Ugd2UgYmVsb25nIHRvLCB3ZSdsbCBhcHBlbmQgb250byBpdHMgbGlzdC4KKyAgICAgICAgICAgICMgb3RoZXJ3aXNlLCB3ZSdsbCBqdW1wIHRvIHRoZSB0b3Agb2YgdGhlIG1hc3RlciBsaXN0CisgICAgICAgICAgICBpZiBzZWxmLnNlcXVlbnRpYWwgb3Igbm90IHBhcmVudDoKKyAgICAgICAgICAgICAgICB0cmVlX2FkZCA9IHNlbGYubW9kZWwuYXBwZW5kCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyZWVfYWRkID0gc2VsZi5tb2RlbC5wcmVwZW5kCisgICAgICAgICAgICB0cmVlX2FkZChwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAoTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLAorICAgICAgICAgICAgICAgICAgICAgIHRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZ2V0TWVzc2FnZSgpLAorICAgICAgICAgICAgICAgICAgICAgIGljb24sCisgICAgICAgICAgICAgICAgICAgICAgY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgMCkpCisKKyAgICAgICAgICAgICMgaWYgdGhlcmUgYXJlIHdhcm5pbmdzIHdoaWxlIHByb2Nlc3NpbmcgYSBwYWNrYWdlCisgICAgICAgICAgICAjICAocGFyZW50KSwgbWFyayB0aGUgdGFzayB3aXRoIHdhcm5pbmcgY29sb3I7CisgICAgICAgICAgICAjIGluIGNhc2UgdGhlcmUgYXJlIGVycm9ycywgdGhlIHVwZGF0ZXMgd2lsbCBiZQorICAgICAgICAgICAgIyAgaGFuZGxlZCBvbiBUYXNrRmFpbGVkLgorICAgICAgICAgICAgaWYgY29sb3IgPT0gSG9iQ29sb3JzLldBUk5JTkcgYW5kIHBhcmVudDoKKyAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLnNldChwYXJlbnQsIHNlbGYubW9kZWwuQ09MX0NPTE9SLCBjb2xvcikKKyAgICAgICAgICAgICAgICBpZiB0YXNrOiAjdGhlbiB3ZSBoYXZlIGEgcGFyZW50IChwYWNrYWdlKSwgYW5kIHVwZGF0ZSBpdCdzIGNvbG9yCisgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHNlbGYudGFza3NfdG9faXRlclsocGFja2FnZSwgTm9uZSldLCBzZWxmLm1vZGVsLkNPTF9DT0xPUiwgY29sb3IpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrU3RhcnRlZCk6CisgICAgICAgICAgICAocGFja2FnZSwgdGFzaykgPSAoZXZlbnQuX3BhY2thZ2UsIGV2ZW50Ll90YXNrKQorCisgICAgICAgICAgICAjIFNhdmUgb3V0IHRoaXMgUElELgorICAgICAgICAgICAgc2VsZi5waWRzX3RvX3Rhc2tbcGlkXSA9IChwYWNrYWdlLCB0YXNrKQorCisgICAgICAgICAgICAjIENoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGlzIHBhY2thZ2UgaW4gb3VyIG1vZGVsLiBJZiBzbyB0aGVuCisgICAgICAgICAgICAjIHRoYXQgY2FuIGJlIHRoZSBwYXJlbnQgZm9yIHRoZSB0YXNrLiBPdGhlcndpc2Ugd2UgY3JlYXRlIGEgbmV3CisgICAgICAgICAgICAjIHRvcCBsZXZlbCBmb3IgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICBpZiAoKHBhY2thZ2UsIE5vbmUpIGluIHNlbGYudGFza3NfdG9faXRlcik6CisgICAgICAgICAgICAgICAgcGFyZW50ID0gc2VsZi50YXNrc190b19pdGVyWyhwYWNrYWdlLCBOb25lKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXF1ZW50aWFsOgorICAgICAgICAgICAgICAgICAgICBhZGQgPSBzZWxmLm1vZGVsLmFwcGVuZAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGFkZCA9IHNlbGYubW9kZWwucHJlcGVuZAorICAgICAgICAgICAgICAgIHBhcmVudCA9IGFkZChOb25lLCAoTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhY2thZ2U6ICVzIiAlIChwYWNrYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb2JDb2xvcnMuT0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkKKyAgICAgICAgICAgICAgICBzZWxmLnRhc2tzX3RvX2l0ZXJbKHBhY2thZ2UsIE5vbmUpXSA9IHBhcmVudAorCisgICAgICAgICAgICAjIEJlY2F1c2UgdGhpcyBwYXJlbnQgcGFja2FnZSBub3cgaGFzIGFuIGFjdGl2ZSBjaGlsZCBtYXJrIGl0IGFzCisgICAgICAgICAgICAjIHN1Y2guCisgICAgICAgICAgICBzZWxmLm1vZGVsLnNldChwYXJlbnQsIHNlbGYubW9kZWwuQ09MX0lDT04sICJndGstZXhlY3V0ZSIpCisgICAgICAgICAgICBwYXJlbnRfY29sb3IgPSBzZWxmLm1vZGVsLmdldChwYXJlbnQsIHNlbGYubW9kZWwuQ09MX0NPTE9SKVswXQorICAgICAgICAgICAgaWYgcGFyZW50X2NvbG9yICE9IEhvYkNvbG9ycy5FUlJPUiBhbmQgcGFyZW50X2NvbG9yICE9IEhvYkNvbG9ycy5XQVJOSU5HOgorICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfQ09MT1IsIEhvYkNvbG9ycy5SVU5OSU5HKQorCisgICAgICAgICAgICAjIEFkZCBhbiBlbnRyeSBpbiB0aGUgbW9kZWwgZm9yIHRoaXMgdGFzaworICAgICAgICAgICAgaSA9IHNlbGYubW9kZWwuYXBwZW5kIChwYXJlbnQsIChOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGFzazogJXMiICUgKHRhc2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3RrLWV4ZWN1dGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb2JDb2xvcnMuUlVOTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpCisKKyAgICAgICAgICAgICMgdXBkYXRlIHRoZSBwYXJlbnQncyBhY3RpdmUgdGFzayBjb3VudAorICAgICAgICAgICAgbnVtX2FjdGl2ZSA9IHNlbGYubW9kZWwuZ2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfTlVNX0FDVElWRSlbMF0gKyAxCisgICAgICAgICAgICBzZWxmLm1vZGVsLnNldChwYXJlbnQsIHNlbGYubW9kZWwuQ09MX05VTV9BQ1RJVkUsIG51bV9hY3RpdmUpCisKKyAgICAgICAgICAgICMgU2F2ZSBvdXQgdGhlIGl0ZXIgc28gdGhhdCB3ZSBjYW4gZmluZCBpdCB3aGVuIHdlIGhhdmUgYSBtZXNzYWdlCisgICAgICAgICAgICAjIHRoYXQgd2UgbmVlZCB0byBhdHRhY2ggdG8gYSB0YXNrLgorICAgICAgICAgICAgc2VsZi50YXNrc190b19pdGVyWyhwYWNrYWdlLCB0YXNrKV0gPSBpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrQmFzZSk6CisgICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJpbmZvIiwgZXZlbnQuX21lc3NhZ2UpCisgICAgICAgICAgICBjdXJyZW50ID0gc2VsZi50YXNrc190b19pdGVyWyhwYWNrYWdlLCB0YXNrKV0KKyAgICAgICAgICAgIHBhcmVudCA9IHNlbGYudGFza3NfdG9faXRlclsocGFja2FnZSwgTm9uZSldCisKKyAgICAgICAgICAgICMgcmVtb3ZlIHRoaXMgdGFzayBmcm9tIHRoZSBwYXJlbnQncyBhY3RpdmUgY291bnQKKyAgICAgICAgICAgIG51bV9hY3RpdmUgPSBzZWxmLm1vZGVsLmdldChwYXJlbnQsIHNlbGYubW9kZWwuQ09MX05VTV9BQ1RJVkUpWzBdIC0gMQorICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQocGFyZW50LCBzZWxmLm1vZGVsLkNPTF9OVU1fQUNUSVZFLCBudW1fYWN0aXZlKQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrRmFpbGVkKToKKyAgICAgICAgICAgICAgICAjIE1hcmsgdGhlIHRhc2sgYW5kIHBhcmVudCBhcyBmYWlsZWQKKyAgICAgICAgICAgICAgICBpY29uID0gImRpYWxvZy1lcnJvciIKKyAgICAgICAgICAgICAgICBjb2xvciA9IEhvYkNvbG9ycy5FUlJPUgorCisgICAgICAgICAgICAgICAgbG9nZmlsZSA9IGV2ZW50LmxvZ2ZpbGUKKyAgICAgICAgICAgICAgICBpZiBsb2dmaWxlIGFuZCBvcy5wYXRoLmV4aXN0cyhsb2dmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxvZ2ZpbGUpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuYXBwZW5kKGN1cnJlbnQsICgncGFzdGViaW4nLCBOb25lLCBOb25lLCBsb2dkYXRhLCAnZ3RrLWVycm9yJywgSG9iQ29sb3JzLk9LLCAwKSkKKworICAgICAgICAgICAgICAgIGZvciBpIGluIChjdXJyZW50LCBwYXJlbnQpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLnNldChpLCBzZWxmLm1vZGVsLkNPTF9JQ09OLCBpY29uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLkNPTF9DT0xPUiwgY29sb3IpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgTWFyayB0aGUgcGFyZW50IHBhY2thZ2UgYW5kIHRoZSB0YXNrIGFzIGluYWN0aXZlLAorICAgICAgICAgICAgICAgICMgYnV0IG1ha2Ugc3VyZSB0byBwcmVzZXJ2ZSBlcnJvciwgd2FybmluZ3MgYW5kIGFjdGl2ZQorICAgICAgICAgICAgICAgICMgc3RhdGVzCisgICAgICAgICAgICAgICAgcGFyZW50X2NvbG9yID0gc2VsZi5tb2RlbC5nZXQocGFyZW50LCBzZWxmLm1vZGVsLkNPTF9DT0xPUilbMF0KKyAgICAgICAgICAgICAgICB0YXNrX2NvbG9yID0gc2VsZi5tb2RlbC5nZXQoY3VycmVudCwgc2VsZi5tb2RlbC5DT0xfQ09MT1IpWzBdCisKKyAgICAgICAgICAgICAgICAjIE1hcmsgdGhlIHRhc2sgYXMgaW5hY3RpdmUKKyAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLnNldChjdXJyZW50LCBzZWxmLm1vZGVsLkNPTF9JQ09OLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIHRhc2tfY29sb3IgIT0gSG9iQ29sb3JzLkVSUk9SOgorICAgICAgICAgICAgICAgICAgICBpZiB0YXNrX2NvbG9yID09IEhvYkNvbG9ycy5XQVJOSU5HOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQoY3VycmVudCwgc2VsZi5tb2RlbC5DT0xfSUNPTiwgJ2RpYWxvZy13YXJuaW5nJykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KGN1cnJlbnQsIHNlbGYubW9kZWwuQ09MX0NPTE9SLCBIb2JDb2xvcnMuT0spCisKKyAgICAgICAgICAgICAgICAjIE1hcmsgdGhlIHBhcmVudCBhcyBpbmFjdGl2ZQorICAgICAgICAgICAgICAgIGlmIHBhcmVudF9jb2xvciAhPSBIb2JDb2xvcnMuRVJST1I6CisgICAgICAgICAgICAgICAgICAgIGlmIHBhcmVudF9jb2xvciA9PSBIb2JDb2xvcnMuV0FSTklORzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfSUNPTiwgImRpYWxvZy13YXJuaW5nIikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfSUNPTiwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bV9hY3RpdmUgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLnNldChwYXJlbnQsIHNlbGYubW9kZWwuQ09MX0NPTE9SLCBIb2JDb2xvcnMuT0spCisKKyAgICAgICAgICAgICMgQ2xlYXIgdGhlIGl0ZXJzIGFuZCB0aGUgcGlkcyBzaW5jZSB3aGVuIHRoZSB0YXNrIGdvZXMgYXdheSB0aGUKKyAgICAgICAgICAgICMgcGlkIHdpbGwgbm8gbG9uZ2VyIGJlIHVzZWQgZm9yIG1lc3NhZ2VzCisgICAgICAgICAgICBkZWwgc2VsZi50YXNrc190b19pdGVyWyhwYWNrYWdlLCB0YXNrKV0KKyAgICAgICAgICAgIGRlbCBzZWxmLnBpZHNfdG9fdGFza1twaWRdCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5CdWlsZFN0YXJ0ZWQpOgorCisgICAgICAgICAgICBzZWxmLmVtaXQoImJ1aWxkLXN0YXJ0ZWQiKQorICAgICAgICAgICAgc2VsZi5tb2RlbC5wcmVwZW5kKE5vbmUsIChOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnVpbGQgU3RhcnRlZCAoJXMpIiAlIHRpbWUuc3RyZnRpbWUoJyVtLyVkLyVZICVIOiVNOiVTJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvYkNvbG9ycy5PSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpCisgICAgICAgICAgICBpZiBwYmFyOgorICAgICAgICAgICAgICAgIHBiYXIudXBkYXRlKDAsIHNlbGYucHJvZ3Jlc3NfdG90YWwpCisgICAgICAgICAgICAgICAgcGJhci5zZXRfdGl0bGUoYmIuZXZlbnQuZ2V0TmFtZShldmVudCkpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCk6CisgICAgICAgICAgICBmYWlsdXJlcyA9IGludCAoZXZlbnQuX2ZhaWx1cmVzKQorICAgICAgICAgICAgc2VsZi5tb2RlbC5wcmVwZW5kKE5vbmUsIChOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnVpbGQgQ29tcGxldGVkICglcykiICUgdGltZS5zdHJmdGltZSgnJW0vJWQvJVkgJUg6JU06JVMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9iQ29sb3JzLk9LLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkKKworICAgICAgICAgICAgIyBFbWl0IHRoZSBhcHByb3ByaWF0ZSBzaWduYWwgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgZmFpbHVyZXMKKyAgICAgICAgICAgIGlmIHNlbGYuYnVpbGRhYm9ydGVkOgorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCAoImJ1aWxkLWFib3J0ZWQiKQorICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRhYm9ydGVkID0gRmFsc2UKKyAgICAgICAgICAgIGVsaWYgKGZhaWx1cmVzID49IDEpOgorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCAoImJ1aWxkLWZhaWxlZCIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCAoImJ1aWxkLXN1Y2NlZWRlZCIpCisgICAgICAgICAgICAjIEVtaXQgYSBnZW5lcmljICJidWlsZC1jb21wbGV0ZSIgc2lnbmFsIGZvciB0aGluZ3Mgd2lzaGluZyB0bworICAgICAgICAgICAgIyBoYW5kbGUgd2hlbiB0aGUgYnVpbGQgaXMgZmluaXNoZWQKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiYnVpbGQtY29tcGxldGUiKQorICAgICAgICAgICAgIyByZXNldCB0aGUgYWxsIGNlbGwncyBpY29uIGluZGljYXRvcgorICAgICAgICAgICAgc2VsZi5tb2RlbC5jbG9zZV90YXNrX3JlZnJlc2goKQorICAgICAgICAgICAgaWYgcGJhcjoKKyAgICAgICAgICAgICAgICBwYmFyLnNldF90ZXh0KGV2ZW50Lm1zZykKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkRpc2tGdWxsKToKKyAgICAgICAgICAgIHNlbGYuYnVpbGRhYm9ydGVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5lbWl0KCJkaXNrLWZ1bGwiKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkKToKKyAgICAgICAgICAgIHNlbGYuZW1pdCgibG9nIiwgImVycm9yIiwgIkNvbW1hbmQgZXhlY3V0aW9uIGZhaWxlZDogJXMiICUgKGV2ZW50LmVycm9yKSkKKyAgICAgICAgICAgIGlmIGV2ZW50LmVycm9yLnN0YXJ0c3dpdGgoIkV4aXRlZCB3aXRoIik6CisgICAgICAgICAgICAgICAgIyBJZiB0aGUgY29tbWFuZCBmYWlscyB3aXRoIGFuIGV4aXQgY29kZSB3ZSdyZSBkb25lLCBlbWl0IHRoZQorICAgICAgICAgICAgICAgICMgZ2VuZXJpYyBzaWduYWwgZm9yIHRoZSBVSSB0byBub3RpZnkgdGhlIHVzZXIKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImJ1aWxkLWNvbXBsZXRlIikKKyAgICAgICAgICAgICAgICAjIHJlc2V0IHRoZSBhbGwgY2VsbCdzIGljb24gaW5kaWNhdG9yCisgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5jbG9zZV90YXNrX3JlZnJlc2goKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkU3RhcnRlZCkgYW5kIHBiYXI6CisgICAgICAgICAgICBwYmFyLnNldF90aXRsZSgiTG9hZGluZyBjYWNoZSIpCisgICAgICAgICAgICBzZWxmLnByb2dyZXNzX3RvdGFsID0gZXZlbnQudG90YWwKKyAgICAgICAgICAgIHBiYXIudXBkYXRlKDAsIHNlbGYucHJvZ3Jlc3NfdG90YWwpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkUHJvZ3Jlc3MpIGFuZCBwYmFyOgorICAgICAgICAgICAgcGJhci51cGRhdGUoZXZlbnQuY3VycmVudCwgc2VsZi5wcm9ncmVzc190b3RhbCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRDb21wbGV0ZWQpIGFuZCBwYmFyOgorICAgICAgICAgICAgcGJhci51cGRhdGUoc2VsZi5wcm9ncmVzc190b3RhbCwgc2VsZi5wcm9ncmVzc190b3RhbCkKKyAgICAgICAgICAgIHBiYXIuaGlkZSgpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VTdGFydGVkKSBhbmQgcGJhcjoKKyAgICAgICAgICAgIGlmIGV2ZW50LnRvdGFsID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwYmFyLnNldF90aXRsZSgiUHJvY2Vzc2luZyByZWNpcGVzIikKKyAgICAgICAgICAgIHNlbGYucHJvZ3Jlc3NfdG90YWwgPSBldmVudC50b3RhbAorICAgICAgICAgICAgcGJhci51cGRhdGUoMCwgc2VsZi5wcm9ncmVzc190b3RhbCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVByb2dyZXNzKSBhbmQgcGJhcjoKKyAgICAgICAgICAgIHBiYXIudXBkYXRlKGV2ZW50LmN1cnJlbnQsIHNlbGYucHJvZ3Jlc3NfdG90YWwpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQpIGFuZCBwYmFyOgorICAgICAgICAgICAgcGJhci5oaWRlKCkKKyAgICAgICAgI3VzaW5nIHJ1bnF1ZXVlIGV2ZW50cyBhcyBtYW55IGFzIHBvc3NpYmxlIHRvIHVwZGF0ZSB0aGUgcHJvZ3Jlc3MgYmFyCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrRmFpbGVkKToKKyAgICAgICAgICAgIHNlbGYuZW1pdCgibG9nIiwgImVycm9yIiwgIlRhc2sgJXMgKCVzKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJyVzJyIgJSAoZXZlbnQudGFza2lkLCBldmVudC50YXNrc3RyaW5nLCBldmVudC5leGl0Y29kZSkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tGYWlsZWQpOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAid2FybiIsICJTZXRzY2VuZSB0YXNrICVzICglcykgZmFpbGVkIHdpdGggZXhpdCBjb2RlICclcycgLSByZWFsIHRhc2sgd2lsbCBiZSBydW4gaW5zdGVhZCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGV2ZW50LnRhc2tpZCwgZXZlbnQudGFza3N0cmluZywgZXZlbnQuZXhpdGNvZGUpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTdGFydGVkLCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza1N0YXJ0ZWQpKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiaW5mbyIsICJSdW5uaW5nIHNldHNjZW5lIHRhc2sgJWQgb2YgJWQgKCVzKSIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChldmVudC5zdGF0cy5jb21wbGV0ZWQgKyBldmVudC5zdGF0cy5hY3RpdmUgKyBldmVudC5zdGF0cy5mYWlsZWQgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RhdHMudG90YWwsIGV2ZW50LnRhc2tzdHJpbmcpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBldmVudC5ub2V4ZWM6CisgICAgICAgICAgICAgICAgICAgIHRhc2t0eXBlID0gJ25vZXhlYyB0YXNrJworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRhc2t0eXBlID0gJ3Rhc2snCisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiaW5mbyIsICJSdW5uaW5nICVzICVzIG9mICVzIChJRDogJXMsICVzKSIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YXNrdHlwZSwgZXZlbnQuc3RhdHMuY29tcGxldGVkICsgZXZlbnQuc3RhdHMuYWN0aXZlICsgZXZlbnQuc3RhdHMuZmFpbGVkICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0YXRzLnRvdGFsLCBldmVudC50YXNraWQsIGV2ZW50LnRhc2tzdHJpbmcpKQorICAgICAgICAgICAgbWVzc2FnZSA9IHt9CisgICAgICAgICAgICBtZXNzYWdlWyJldmVudG5hbWUiXSA9IGJiLmV2ZW50LmdldE5hbWUoZXZlbnQpCisgICAgICAgICAgICBudW1fb2ZfY29tcGxldGVkID0gZXZlbnQuc3RhdHMuY29tcGxldGVkICsgZXZlbnQuc3RhdHMuZmFpbGVkCisgICAgICAgICAgICBtZXNzYWdlWyJjdXJyZW50Il0gPSBudW1fb2ZfY29tcGxldGVkCisgICAgICAgICAgICBtZXNzYWdlWyJ0b3RhbCJdID0gZXZlbnQuc3RhdHMudG90YWwKKyAgICAgICAgICAgIG1lc3NhZ2VbInRpdGxlIl0gPSAiIgorICAgICAgICAgICAgbWVzc2FnZVsidGFzayJdID0gZXZlbnQudGFza3N0cmluZworICAgICAgICAgICAgc2VsZi5lbWl0KCJ0YXNrLXN0YXJ0ZWQiLCBtZXNzYWdlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50Lk11bHRpcGxlUHJvdmlkZXJzKToKKyAgICAgICAgICAgIHNlbGYuZW1pdCgibG9nIiwgImluZm8iLCAibXVsdGlwbGUgcHJvdmlkZXJzIGFyZSBhdmFpbGFibGUgZm9yICVzJXMgKCVzKSIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGV2ZW50Ll9pc19ydW50aW1lIGFuZCAicnVudGltZSAiIG9yICIiLCBldmVudC5faXRlbSwgIiwgIi5qb2luKGV2ZW50Ll9jYW5kaWRhdGVzKSkpCisgICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJpbmZvIiwgImNvbnNpZGVyIGRlZmluaW5nIGEgUFJFRkVSUkVEX1BST1ZJREVSIGVudHJ5IHRvIG1hdGNoICVzIiAlIChldmVudC5faXRlbSkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTm9Qcm92aWRlcik6CisgICAgICAgICAgICBtc2cgPSAiIgorICAgICAgICAgICAgaWYgZXZlbnQuX3J1bnRpbWU6CisgICAgICAgICAgICAgICAgciA9ICJSIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByID0gIiIKKworICAgICAgICAgICAgZXh0cmEgPSAnJworICAgICAgICAgICAgaWYgbm90IGV2ZW50Ll9yZWFzb25zOgorICAgICAgICAgICAgICAgIGlmIGV2ZW50Ll9jbG9zZV9tYXRjaGVzOgorICAgICAgICAgICAgICAgICAgICBleHRyYSA9ICIuIENsb3NlIG1hdGNoZXM6XG4gICVzIiAlICdcbiAgJy5qb2luKGV2ZW50Ll9jbG9zZV9tYXRjaGVzKQorCisgICAgICAgICAgICBpZiBldmVudC5fZGVwZW5kZWVzOgorICAgICAgICAgICAgICAgIG1zZyA9ICJOb3RoaW5nICVzUFJPVklERVMgJyVzJyAoYnV0ICVzICVzREVQRU5EUyBvbiBvciBvdGhlcndpc2UgcmVxdWlyZXMgaXQpJXNcbiIgJSAociwgZXZlbnQuX2l0ZW0sICIsICIuam9pbihldmVudC5fZGVwZW5kZWVzKSwgciwgZXh0cmEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZyA9ICJOb3RoaW5nICVzUFJPVklERVMgJyVzJyVzXG4iICUgKHIsIGV2ZW50Ll9pdGVtLCBleHRyYSkKKyAgICAgICAgICAgIGlmIGV2ZW50Ll9yZWFzb25zOgorICAgICAgICAgICAgICAgIGZvciByZWFzb24gaW4gZXZlbnQuX3JlYXNvbnM6CisgICAgICAgICAgICAgICAgICAgIG1zZyArPSAoIiVzXG4iICUgcmVhc29uKQorICAgICAgICAgICAgc2VsZi5lbWl0KCJuby1wcm92aWRlciIsIG1zZykKKyAgICAgICAgICAgIHNlbGYuZW1pdCgibG9nIiwgImVycm9yIiwgbXNnKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkxvZ0V4ZWNUVFkpOgorICAgICAgICAgICAgaWNvbiA9ICJkaWFsb2ctd2FybmluZyIKKyAgICAgICAgICAgIGNvbG9yID0gSG9iQ29sb3JzLldBUk5JTkcKKyAgICAgICAgICAgIGlmIHNlbGYuc2VxdWVudGlhbCBvciBub3QgcGFyZW50OgorICAgICAgICAgICAgICAgIHRyZWVfYWRkID0gc2VsZi5tb2RlbC5hcHBlbmQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJlZV9hZGQgPSBzZWxmLm1vZGVsLnByZXBlbmQKKyAgICAgICAgICAgIHRyZWVfYWRkKHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgIChOb25lLAorICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgICAgdGFzaywKKyAgICAgICAgICAgICAgICAgICAgICBldmVudC5tc2csCisgICAgICAgICAgICAgICAgICAgICAgaWNvbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAwKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV2ZW50LCAoYmIuZXZlbnQuQnVpbGRCYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5TdGFtcFVwZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuQ29uZmlnUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5SZWNpcGVQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ydW5xdWV1ZS5ydW5RdWV1ZUV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ydW5xdWV1ZS5ydW5RdWV1ZUV4aXRXYWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5PcGVyYXRpb25TdGFydGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5PcGVyYXRpb25Db21wbGV0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk9wZXJhdGlvblByb2dyZXNzKSk6CisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiZXJyb3IiLCAiVW5rbm93biBldmVudDogJXMiICUgKGV2ZW50LmVycm9yIGlmIGhhc2F0dHIoZXZlbnQsICdlcnJvcicpIGVsc2UgJ2Vycm9yJykpCisKKyAgICAgICAgcmV0dXJuCisKKworZGVmIGRvX3Bhc3RlYmluKHRleHQpOgorICAgIHVybCA9ICdodHRwOi8vcGFzdGViaW4uY29tL2FwaV9wdWJsaWMucGhwJworICAgIHBhcmFtcyA9IHsncGFzdGVfY29kZSc6IHRleHQsICdwYXN0ZV9mb3JtYXQnOiAndGV4dCd9CisKKyAgICByZXEgPSB1cmxsaWIyLlJlcXVlc3QodXJsLCB1cmxsaWIudXJsZW5jb2RlKHBhcmFtcykpCisgICAgcmVzcG9uc2UgPSB1cmxsaWIyLnVybG9wZW4ocmVxKQorICAgIHBhc3RlX3VybCA9IHJlc3BvbnNlLnJlYWQoKQorCisgICAgcmV0dXJuIHBhc3RlX3VybAorCisKK2NsYXNzIFJ1bm5pbmdCdWlsZFRyZWVWaWV3IChndGsuVHJlZVZpZXcpOgorICAgIF9fZ3NpZ25hbHNfXyA9IHsKKyAgICAgICAgImJ1dHRvbl9wcmVzc19ldmVudCIgOiAib3ZlcnJpZGUiCisgICAgICAgIH0KKyAgICBkZWYgX19pbml0X18gKHNlbGYsIHJlYWRvbmx5PUZhbHNlLCBob2I9RmFsc2UpOgorICAgICAgICBndGsuVHJlZVZpZXcuX19pbml0X18gKHNlbGYpCisgICAgICAgIHNlbGYucmVhZG9ubHkgPSByZWFkb25seQorCisgICAgICAgICMgVGhlIGljb24gdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB3ZSdyZSBidWlsZGluZyBvciBmYWlsZWQuCisgICAgICAgICMgYWRkICdob2InIGZsYWcgYmVjYXVzZSB0aGVyZSBoYXMgbm90IG9ubHkgaG9iIHRvIHNoYXJlIHRoaXMgY29kZQorICAgICAgICBpZiBob2I6CisgICAgICAgICAgICByZW5kZXJlciA9IEhvYkNlbGxSZW5kZXJlclBpeGJ1ZiAoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVuZGVyZXIgPSBndGsuQ2VsbFJlbmRlcmVyUGl4YnVmKCkKKyAgICAgICAgY29sID0gZ3RrLlRyZWVWaWV3Q29sdW1uICgiU3RhdHVzIiwgcmVuZGVyZXIpCisgICAgICAgIGNvbC5hZGRfYXR0cmlidXRlIChyZW5kZXJlciwgImljb24tbmFtZSIsIDQpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoY29sKQorCisgICAgICAgICMgVGhlIG1lc3NhZ2Ugb2YgdGhlIGJ1aWxkLgorICAgICAgICAjIGFkZCAnaG9iJyBmbGFnIGJlY2F1c2UgdGhlcmUgaGFzIG5vdCBvbmx5IGhvYiB0byBzaGFyZSB0aGlzIGNvZGUKKyAgICAgICAgaWYgaG9iOgorICAgICAgICAgICAgc2VsZi5tZXNzYWdlX3JlbmRlcmVyID0gSG9iV2FycENlbGxSZW5kZXJlclRleHQgKGNvbF9udW1iZXI9MSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubWVzc2FnZV9yZW5kZXJlciA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0ICgpCisgICAgICAgIHNlbGYubWVzc2FnZV9jb2x1bW4gPSBndGsuVHJlZVZpZXdDb2x1bW4gKCJNZXNzYWdlIiwgc2VsZi5tZXNzYWdlX3JlbmRlcmVyLCB0ZXh0PTMpCisgICAgICAgIHNlbGYubWVzc2FnZV9jb2x1bW4uYWRkX2F0dHJpYnV0ZShzZWxmLm1lc3NhZ2VfcmVuZGVyZXIsICdiYWNrZ3JvdW5kJywgNSkKKyAgICAgICAgc2VsZi5tZXNzYWdlX3JlbmRlcmVyLnNldF9wcm9wZXJ0eSgnZWRpdGFibGUnLCAobm90IHNlbGYucmVhZG9ubHkpKQorICAgICAgICBzZWxmLmFwcGVuZF9jb2x1bW4gKHNlbGYubWVzc2FnZV9jb2x1bW4pCisKKyAgICBkZWYgZG9fYnV0dG9uX3ByZXNzX2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICAgICAgZ3RrLlRyZWVWaWV3LmRvX2J1dHRvbl9wcmVzc19ldmVudChzZWxmLCBldmVudCkKKworICAgICAgICBpZiBldmVudC5idXR0b24gPT0gMzoKKyAgICAgICAgICAgIHNlbGVjdGlvbiA9IHN1cGVyKFJ1bm5pbmdCdWlsZFRyZWVWaWV3LCBzZWxmKS5nZXRfc2VsZWN0aW9uKCkKKyAgICAgICAgICAgIChtb2RlbCwgaXQpID0gc2VsZWN0aW9uLmdldF9zZWxlY3RlZCgpCisgICAgICAgICAgICBpZiBpdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjYW5fcGFzdGUgPSBtb2RlbC5nZXQoaXQsIG1vZGVsLkNPTF9MT0cpWzBdCisgICAgICAgICAgICAgICAgaWYgY2FuX3Bhc3RlID09ICdwYXN0ZWJpbic6CisgICAgICAgICAgICAgICAgICAgICMgYnVpbGQgYSBzaW1wbGUgbWVudSB3aXRoIGEgcGFzdGViaW4gb3B0aW9uCisgICAgICAgICAgICAgICAgICAgIG1lbnUgPSBndGsuTWVudSgpCisgICAgICAgICAgICAgICAgICAgIG1lbnVpdGVtID0gZ3RrLk1lbnVJdGVtKCJDb3B5IikKKyAgICAgICAgICAgICAgICAgICAgbWVudS5hcHBlbmQobWVudWl0ZW0pCisgICAgICAgICAgICAgICAgICAgIG1lbnVpdGVtLmNvbm5lY3QoImFjdGl2YXRlIiwgc2VsZi5jbGlwYm9hcmRfaGFuZGxlciwgKG1vZGVsLCBpdCkpCisgICAgICAgICAgICAgICAgICAgIG1lbnVpdGVtLnNob3coKQorICAgICAgICAgICAgICAgICAgICBtZW51aXRlbSA9IGd0ay5NZW51SXRlbSgiU2VuZCBsb2cgdG8gcGFzdGViaW4iKQorICAgICAgICAgICAgICAgICAgICBtZW51LmFwcGVuZChtZW51aXRlbSkKKyAgICAgICAgICAgICAgICAgICAgbWVudWl0ZW0uY29ubmVjdCgiYWN0aXZhdGUiLCBzZWxmLnBhc3RlYmluX2hhbmRsZXIsIChtb2RlbCwgaXQpKQorICAgICAgICAgICAgICAgICAgICBtZW51aXRlbS5zaG93KCkKKyAgICAgICAgICAgICAgICAgICAgbWVudS5zaG93KCkKKyAgICAgICAgICAgICAgICAgICAgbWVudS5wb3B1cChOb25lLCBOb25lLCBOb25lLCBldmVudC5idXR0b24sIGV2ZW50LnRpbWUpCisKKyAgICBkZWYgX2FkZF90b19jbGlwYm9hcmQoc2VsZiwgY2xpcHBpbmcpOgorICAgICAgICAiIiIKKyAgICAgICAgQWRkIHRoZSBjb250ZW50cyBvZiBjbGlwcGluZyB0byB0aGUgc3lzdGVtIGNsaXBib2FyZC4KKyAgICAgICAgIiIiCisgICAgICAgIGNsaXBib2FyZCA9IGd0ay5jbGlwYm9hcmRfZ2V0KCkKKyAgICAgICAgY2xpcGJvYXJkLnNldF90ZXh0KGNsaXBwaW5nKQorICAgICAgICBjbGlwYm9hcmQuc3RvcmUoKQorCisgICAgZGVmIHBhc3RlYmluX2hhbmRsZXIoc2VsZiwgd2lkZ2V0LCBkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIFNlbmQgdGhlIGxvZyBkYXRhIHRvIHBhc3RlYmluLCB0aGVuIGFkZCB0aGUgbmV3IHBhc3RlIHVybCB0byB0aGUKKyAgICAgICAgY2xpcGJvYXJkLgorICAgICAgICAiIiIKKyAgICAgICAgKG1vZGVsLCBpdCkgPSBkYXRhCisgICAgICAgIHBhc3RlX3VybCA9IGRvX3Bhc3RlYmluKG1vZGVsLmdldChpdCwgbW9kZWwuQ09MX01FU1NBR0UpWzBdKQorCisgICAgICAgICMgQHRvZG8gUHJvdmlkZSB2aXN1YWwgZmVlZGJhY2sgdG8gdGhlIHVzZXIgdGhhdCBpdCBpcyBkb25lIGFuZCB0aGF0CisgICAgICAgICMgaXQgd29ya2VkLgorICAgICAgICBwcmludCBwYXN0ZV91cmwKKworICAgICAgICBzZWxmLl9hZGRfdG9fY2xpcGJvYXJkKHBhc3RlX3VybCkKKworICAgIGRlZiBjbGlwYm9hcmRfaGFuZGxlcihzZWxmLCB3aWRnZXQsIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCisgICAgICAgIChtb2RlbCwgaXQpID0gZGF0YQorICAgICAgICBtZXNzYWdlID0gbW9kZWwuZ2V0KGl0LCBtb2RlbC5DT0xfTUVTU0FHRSlbMF0KKworICAgICAgICBzZWxmLl9hZGRfdG9fY2xpcGJvYXJkKG1lc3NhZ2UpCisKK2NsYXNzIEJ1aWxkRmFpbHVyZVRyZWVWaWV3KGd0ay5UcmVlVmlldyk6CisKKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgorICAgICAgICBndGsuVHJlZVZpZXcuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zZXRfcnVsZXNfaGludChGYWxzZSkKKyAgICAgICAgc2VsZi5zZXRfaGVhZGVyc192aXNpYmxlKEZhbHNlKQorICAgICAgICBzZWxmLmdldF9zZWxlY3Rpb24oKS5zZXRfbW9kZShndGsuU0VMRUNUSU9OX1NJTkdMRSkKKworICAgICAgICAjIFRoZSBpY29uIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgd2UncmUgYnVpbGRpbmcgb3IgZmFpbGVkLgorICAgICAgICByZW5kZXJlciA9IEhvYkNlbGxSZW5kZXJlclBpeGJ1ZiAoKQorICAgICAgICBjb2wgPSBndGsuVHJlZVZpZXdDb2x1bW4gKCJTdGF0dXMiLCByZW5kZXJlcikKKyAgICAgICAgY29sLmFkZF9hdHRyaWJ1dGUgKHJlbmRlcmVyLCAiaWNvbi1uYW1lIiwgUnVubmluZ0J1aWxkTW9kZWwuQ09MX0lDT04pCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoY29sKQorCisgICAgICAgICMgVGhlIG1lc3NhZ2Ugb2YgdGhlIGJ1aWxkLgorICAgICAgICBzZWxmLm1lc3NhZ2VfcmVuZGVyZXIgPSBIb2JXYXJwQ2VsbFJlbmRlcmVyVGV4dCAoY29sX251bWJlcj0xKQorICAgICAgICBzZWxmLm1lc3NhZ2VfY29sdW1uID0gZ3RrLlRyZWVWaWV3Q29sdW1uICgiTWVzc2FnZSIsIHNlbGYubWVzc2FnZV9yZW5kZXJlciwgdGV4dD1SdW5uaW5nQnVpbGRNb2RlbC5DT0xfTUVTU0FHRSwgYmFja2dyb3VuZD1SdW5uaW5nQnVpbGRNb2RlbC5DT0xfQ09MT1IpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoc2VsZi5tZXNzYWdlX2NvbHVtbikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3Nhbml0eWNoZWNrcGFnZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3Nhbml0eWNoZWNrcGFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmNlMmVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvc2FuaXR5Y2hlY2twYWdlLnB5CkBAIC0wLDAgKzEsODUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBCb2dkYW4gTWFyaW5lc2N1IDxib2dkYW4uYS5tYXJpbmVzY3VAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aywgZ29iamVjdAorZnJvbSBiYi51aS5jcnVtYnMucHJvZ3Jlc3NiYXIgaW1wb3J0IEhvYlByb2dyZXNzQmFyCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IGhpYworZnJvbSBiYi51aS5jcnVtYnMuaG9icGFnZXMgaW1wb3J0IEhvYlBhZ2UKKworIworIyBTYW5pdHlDaGVja1BhZ2UKKyMKK2NsYXNzIFNhbml0eUNoZWNrUGFnZSAoSG9iUGFnZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnVpbGRlcik6CisgICAgICAgIHN1cGVyKFNhbml0eUNoZWNrUGFnZSwgc2VsZikuX19pbml0X18oYnVpbGRlcikKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5jcmVhdGVfdmlzdWFsX2VsZW1lbnRzKCkKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICBkZWYgbWFrZV9sYWJlbChzZWxmLCB0ZXh0LCBib2xkPVRydWUpOgorICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIG1hcmsgPSAiPHNwYW4gJXM+JXM8L3NwYW4+IiAlIChzZWxmLnNwYW5fdGFnKCd4LWxhcmdlJywgJ2JvbGQnKSBpZiBib2xkIGVsc2Ugc2VsZi5zcGFuX3RhZygnbWVkaXVtJyksIHRleHQpCisgICAgICAgIGxhYmVsLnNldF9tYXJrdXAobWFyaykKKyAgICAgICAgcmV0dXJuIGxhYmVsCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnJ1bm5pbmc6CisgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgIGdvYmplY3QudGltZW91dF9hZGQoMTAwLCBzZWxmLnRpbWVyX2Z1bmMpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKworICAgIGRlZiBpc19ydW5uaW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5uaW5nCisKKyAgICBkZWYgdGltZXJfZnVuYyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIucHVsc2UoKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5uaW5nCisKKyAgICBkZWYgY3JlYXRlX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgIyBUYWJsZSdkIGxheW91dC4gJ3Jvd3MnIGFuZCAnY29scycgZ2l2ZSB0aGUgdGFibGUgc2l6ZQorICAgICAgICByb3dzLCBjb2xzID0gMzAsIDUwCisgICAgICAgIHNlbGYudGFibGUgPSBndGsuVGFibGUocm93cywgY29scywgVHJ1ZSkKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYudGFibGUsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc3gsIHN5ID0gMiwgMgorICAgICAgICAjICdpbmZvJyBpY29uCisgICAgICAgIGltYWdlID0gZ3RrLkltYWdlKCkKKyAgICAgICAgaW1hZ2Uuc2V0X2Zyb21fZmlsZShoaWMuSUNPTl9JTkZPX0RJU1BMQVlfRklMRSkKKyAgICAgICAgc2VsZi50YWJsZS5hdHRhY2goaW1hZ2UsIHN4LCBzeCArIDIsIHN5LCBzeSArIDMgKQorICAgICAgICBpbWFnZS5zaG93KCkKKyAgICAgICAgIyAnQ2hlY2tpbmcnIG1lc3NhZ2UKKyAgICAgICAgbGFiZWwgPSBzZWxmLm1ha2VfbGFiZWwoJ0hvYiBpcyBjaGVja2luZyBmb3IgY29ycmVjdCBidWlsZCBzeXN0ZW0gc2V0dXAnKQorICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChsYWJlbCwgc3ggKyAyLCBjb2xzLCBzeSwgc3kgKyAzLCB4cGFkZGluZz01ICkKKyAgICAgICAgbGFiZWwuc2hvdygpCisgICAgICAgICMgJ1Nob3VsZG4ndCB0YWtlIGxvbmcnIG1lc3NhZ2UuCisgICAgICAgIGxhYmVsID0gc2VsZi5tYWtlX2xhYmVsKCJUaGUgY2hlY2sgc2hvdWxkbid0IHRha2UgbG9uZy4iLCBGYWxzZSkKKyAgICAgICAgc2VsZi50YWJsZS5hdHRhY2gobGFiZWwsIHN4ICsgMiwgY29scywgc3kgKyAzLCBzeSArIDQsIHhwYWRkaW5nPTUpCisgICAgICAgIGxhYmVsLnNob3coKQorICAgICAgICAjIFByb2dyZXNzIGJhcgorICAgICAgICBzZWxmLnByb2dyZXNzX2JhciA9IEhvYlByb2dyZXNzQmFyKCkKKyAgICAgICAgc2VsZi50YWJsZS5hdHRhY2goc2VsZi5wcm9ncmVzc19iYXIsIHN4ICsgMiwgY29scyAtIDMsIHN5ICsgNSwgc3kgKyA3LCB4cGFkZGluZz01KQorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zaG93KCkKKyAgICAgICAgIyBBbGwgZG9uZQorICAgICAgICBzZWxmLnRhYmxlLnNob3coKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy91dGlscy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOTg2NGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy91dGlscy5weQpAQCAtMCwwICsxLDM0IEBACisjCisjIEJpdEJha2UgVUkgVXRpbHMgCisjCisjIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIyBUaGlzIHV0aWxpdHkgbWV0aG9kIGxvb2tzIGZvciB4dGVybSBvciB2dGUgYW5kIHJldHVybiB0aGUgCisjIGZyaXN0IHRvIGV4aXN0LCBjdXJyZW50bHkgd2UgYXJlIGtlZXBpbmcgdGhpcyBzaW1wbGUsIGJ1dCAKKyMgd2Ugd2lsbCBsaWtlbHkgbW92ZSB0aGUgb2UudGVybWluYWwgaW1wbGVtZW50YXRpb24gaW50byAKKyMgYml0YmFrZSB3aGljaCB3aWxsIGFsbG93IG1vcmUgZmxleGliaWxpdHkuCisKK2ltcG9ydCBvcworaW1wb3J0IGJiCisKK2RlZiB3aGljaF90ZXJtaW5hbCgpOgorICAgIHRlcm0gPSBiYi51dGlscy53aGljaChvcy5lbnZpcm9uWyJQQVRIIl0sICJ4dGVybSIpCisgICAgaWYgdGVybToKKyAgICAgICAgcmV0dXJuIHRlcm0gKyAiIC1lICIKKyAgICB0ZXJtID0gYmIudXRpbHMud2hpY2gob3MuZW52aXJvblsiUEFUSCJdLCAidnRlIikKKyAgICBpZiB0ZXJtOgorICAgICAgICByZXR1cm4gdGVybSArICIgLWMgIgorICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2RlcGV4cC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvZGVwZXhwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MGFhZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2RlcGV4cC5weQpAQCAtMCwwICsxLDMzMyBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgYmFzZWQgRGVwZW5kZW5jeSBFeHBsb3JlcgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDcgICAgICAgIFJvc3MgQnVydG9uCisjIENvcHlyaWdodCAoQykgMjAwNyAtIDIwMDggUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgZ3RrCitpbXBvcnQgUXVldWUKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB4bWxycGNsaWIKK2ltcG9ydCBiYgoraW1wb3J0IGJiLmV2ZW50Citmcm9tIGJiLnVpLmNydW1icy5wcm9ncmVzc2JhciBpbXBvcnQgSG9iUHJvZ3Jlc3NCYXIKKworIyBQYWNrYWdlIE1vZGVsCisoQ09MX1BLR19OQU1FKSA9ICgwKQorCisjIERlcGVuZGVuY3kgTW9kZWwKKyhUWVBFX0RFUCwgVFlQRV9SREVQKSA9ICgwLCAxKQorKENPTF9ERVBfVFlQRSwgQ09MX0RFUF9QQVJFTlQsIENPTF9ERVBfUEFDS0FHRSkgPSAoMCwgMSwgMikKKworCitjbGFzcyBQYWNrYWdlRGVwVmlldyhndGsuVHJlZVZpZXcpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgZGVwX3R5cGUsIGxhYmVsKToKKyAgICAgICAgZ3RrLlRyZWVWaWV3Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuY3VycmVudCA9IE5vbmUKKyAgICAgICAgc2VsZi5kZXBfdHlwZSA9IGRlcF90eXBlCisgICAgICAgIHNlbGYuZmlsdGVyX21vZGVsID0gbW9kZWwuZmlsdGVyX25ldygpCisgICAgICAgIHNlbGYuZmlsdGVyX21vZGVsLnNldF92aXNpYmxlX2Z1bmMoc2VsZi5fZmlsdGVyKQorICAgICAgICBzZWxmLnNldF9tb2RlbChzZWxmLmZpbHRlcl9tb2RlbCkKKyAgICAgICAgI3NlbGYuY29ubmVjdCgicm93LWFjdGl2YXRlZCIsIHNlbGYub25fcGFja2FnZV9hY3RpdmF0ZWQsIENPTF9ERVBfUEFDS0FHRSkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uKGd0ay5UcmVlVmlld0NvbHVtbihsYWJlbCwgZ3RrLkNlbGxSZW5kZXJlclRleHQoKSwgdGV4dD1DT0xfREVQX1BBQ0tBR0UpKQorCisgICAgZGVmIF9maWx0ZXIoc2VsZiwgbW9kZWwsIGl0ZXIpOgorICAgICAgICAodGhpc190eXBlLCBwYWNrYWdlKSA9IG1vZGVsLmdldChpdGVyLCBDT0xfREVQX1RZUEUsIENPTF9ERVBfUEFSRU5UKQorICAgICAgICBpZiB0aGlzX3R5cGUgIT0gc2VsZi5kZXBfdHlwZTogcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBwYWNrYWdlID09IHNlbGYuY3VycmVudAorCisgICAgZGVmIHNldF9jdXJyZW50X3BhY2thZ2Uoc2VsZiwgcGFja2FnZSk6CisgICAgICAgIHNlbGYuY3VycmVudCA9IHBhY2thZ2UKKyAgICAgICAgc2VsZi5maWx0ZXJfbW9kZWwucmVmaWx0ZXIoKQorCisKK2NsYXNzIFBhY2thZ2VSZXZlcnNlRGVwVmlldyhndGsuVHJlZVZpZXcpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgbGFiZWwpOgorICAgICAgICBndGsuVHJlZVZpZXcuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jdXJyZW50ID0gTm9uZQorICAgICAgICBzZWxmLmZpbHRlcl9tb2RlbCA9IG1vZGVsLmZpbHRlcl9uZXcoKQorICAgICAgICBzZWxmLmZpbHRlcl9tb2RlbC5zZXRfdmlzaWJsZV9mdW5jKHNlbGYuX2ZpbHRlcikKKyAgICAgICAgc2VsZi5zZXRfbW9kZWwoc2VsZi5maWx0ZXJfbW9kZWwpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbihndGsuVHJlZVZpZXdDb2x1bW4obGFiZWwsIGd0ay5DZWxsUmVuZGVyZXJUZXh0KCksIHRleHQ9Q09MX0RFUF9QQVJFTlQpKQorCisgICAgZGVmIF9maWx0ZXIoc2VsZiwgbW9kZWwsIGl0ZXIpOgorICAgICAgICBwYWNrYWdlID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIsIENPTF9ERVBfUEFDS0FHRSkKKyAgICAgICAgcmV0dXJuIHBhY2thZ2UgPT0gc2VsZi5jdXJyZW50CisKKyAgICBkZWYgc2V0X2N1cnJlbnRfcGFja2FnZShzZWxmLCBwYWNrYWdlKToKKyAgICAgICAgc2VsZi5jdXJyZW50ID0gcGFja2FnZQorICAgICAgICBzZWxmLmZpbHRlcl9tb2RlbC5yZWZpbHRlcigpCisKKworY2xhc3MgRGVwRXhwbG9yZXIoZ3RrLldpbmRvdyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBndGsuV2luZG93Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuc2V0X3RpdGxlKCJEZXBlbmRlbmN5IEV4cGxvcmVyIikKKyAgICAgICAgc2VsZi5zZXRfZGVmYXVsdF9zaXplKDUwMCwgNTAwKQorICAgICAgICBzZWxmLmNvbm5lY3QoImRlbGV0ZS1ldmVudCIsIGd0ay5tYWluX3F1aXQpCisKKyAgICAgICAgIyBDcmVhdGUgdGhlIGRhdGEgbW9kZWxzCisgICAgICAgIHNlbGYucGtnX21vZGVsID0gZ3RrLkxpc3RTdG9yZShnb2JqZWN0LlRZUEVfU1RSSU5HKQorICAgICAgICBzZWxmLnBrZ19tb2RlbC5zZXRfc29ydF9jb2x1bW5faWQoQ09MX1BLR19OQU1FLCBndGsuU09SVF9BU0NFTkRJTkcpCisgICAgICAgIHNlbGYuZGVwZW5kc19tb2RlbCA9IGd0ay5MaXN0U3RvcmUoZ29iamVjdC5UWVBFX0lOVCwgZ29iamVjdC5UWVBFX1NUUklORywgZ29iamVjdC5UWVBFX1NUUklORykKKyAgICAgICAgc2VsZi5kZXBlbmRzX21vZGVsLnNldF9zb3J0X2NvbHVtbl9pZChDT0xfREVQX1BBQ0tBR0UsIGd0ay5TT1JUX0FTQ0VORElORykKKworICAgICAgICBwYW5lID0gZ3RrLkhQYW5lZCgpCisgICAgICAgIHBhbmUuc2V0X3Bvc2l0aW9uKDI1MCkKKyAgICAgICAgc2VsZi5hZGQocGFuZSkKKworICAgICAgICAjIFRoZSBtYXN0ZXIgbGlzdCBvZiBwYWNrYWdlcworICAgICAgICBzY3JvbGxlZCA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgIHNjcm9sbGVkLnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorICAgICAgICBzY3JvbGxlZC5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKworICAgICAgICBzZWxmLnBrZ190cmVldmlldyA9IGd0ay5UcmVlVmlldyhzZWxmLnBrZ19tb2RlbCkKKyAgICAgICAgc2VsZi5wa2dfdHJlZXZpZXcuZ2V0X3NlbGVjdGlvbigpLmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLm9uX2N1cnNvcl9jaGFuZ2VkKQorICAgICAgICBjb2x1bW4gPSBndGsuVHJlZVZpZXdDb2x1bW4oIlBhY2thZ2UiLCBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpLCB0ZXh0PUNPTF9QS0dfTkFNRSkKKyAgICAgICAgc2VsZi5wa2dfdHJlZXZpZXcuYXBwZW5kX2NvbHVtbihjb2x1bW4pCisgICAgICAgIHBhbmUuYWRkMShzY3JvbGxlZCkKKyAgICAgICAgc2Nyb2xsZWQuYWRkKHNlbGYucGtnX3RyZWV2aWV3KQorCisgICAgICAgIGJveCA9IGd0ay5WQm94KGhvbW9nZW5lb3VzPVRydWUsIHNwYWNpbmc9NCkKKworICAgICAgICAjIFJ1bnRpbWUgRGVwZW5kcworICAgICAgICBzY3JvbGxlZCA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgIHNjcm9sbGVkLnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorICAgICAgICBzY3JvbGxlZC5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKyAgICAgICAgc2VsZi5yZGVwX3RyZWV2aWV3ID0gUGFja2FnZURlcFZpZXcoc2VsZi5kZXBlbmRzX21vZGVsLCBUWVBFX1JERVAsICJSdW50aW1lIERlcGVuZHMiKQorICAgICAgICBzZWxmLnJkZXBfdHJlZXZpZXcuY29ubmVjdCgicm93LWFjdGl2YXRlZCIsIHNlbGYub25fcGFja2FnZV9hY3RpdmF0ZWQsIENPTF9ERVBfUEFDS0FHRSkKKyAgICAgICAgc2Nyb2xsZWQuYWRkKHNlbGYucmRlcF90cmVldmlldykKKyAgICAgICAgYm94LmFkZChzY3JvbGxlZCkKKworICAgICAgICAjIEJ1aWxkIERlcGVuZHMKKyAgICAgICAgc2Nyb2xsZWQgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorICAgICAgICBzY3JvbGxlZC5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfQVVUT01BVElDLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKyAgICAgICAgc2Nyb2xsZWQuc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCisgICAgICAgIHNlbGYuZGVwX3RyZWV2aWV3ID0gUGFja2FnZURlcFZpZXcoc2VsZi5kZXBlbmRzX21vZGVsLCBUWVBFX0RFUCwgIkJ1aWxkIERlcGVuZHMiKQorICAgICAgICBzZWxmLmRlcF90cmVldmlldy5jb25uZWN0KCJyb3ctYWN0aXZhdGVkIiwgc2VsZi5vbl9wYWNrYWdlX2FjdGl2YXRlZCwgQ09MX0RFUF9QQUNLQUdFKQorICAgICAgICBzY3JvbGxlZC5hZGQoc2VsZi5kZXBfdHJlZXZpZXcpCisgICAgICAgIGJveC5hZGQoc2Nyb2xsZWQpCisgICAgICAgIHBhbmUuYWRkMihib3gpCisKKyAgICAgICAgIyBSZXZlcnNlIERlcGVuZHMKKyAgICAgICAgc2Nyb2xsZWQgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorICAgICAgICBzY3JvbGxlZC5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfQVVUT01BVElDLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKyAgICAgICAgc2Nyb2xsZWQuc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCisgICAgICAgIHNlbGYucmV2ZGVwX3RyZWV2aWV3ID0gUGFja2FnZVJldmVyc2VEZXBWaWV3KHNlbGYuZGVwZW5kc19tb2RlbCwgIlJldmVyc2UgRGVwZW5kcyIpCisgICAgICAgIHNlbGYucmV2ZGVwX3RyZWV2aWV3LmNvbm5lY3QoInJvdy1hY3RpdmF0ZWQiLCBzZWxmLm9uX3BhY2thZ2VfYWN0aXZhdGVkLCBDT0xfREVQX1BBUkVOVCkKKyAgICAgICAgc2Nyb2xsZWQuYWRkKHNlbGYucmV2ZGVwX3RyZWV2aWV3KQorICAgICAgICBib3guYWRkKHNjcm9sbGVkKQorICAgICAgICBwYW5lLmFkZDIoYm94KQorCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIG9uX3BhY2thZ2VfYWN0aXZhdGVkKHNlbGYsIHRyZWV2aWV3LCBwYXRoLCBjb2x1bW4sIGRhdGFfY29sKToKKyAgICAgICAgbW9kZWwgPSB0cmVldmlldy5nZXRfbW9kZWwoKQorICAgICAgICBwYWNrYWdlID0gbW9kZWwuZ2V0X3ZhbHVlKG1vZGVsLmdldF9pdGVyKHBhdGgpLCBkYXRhX2NvbCkKKworICAgICAgICBwa2dfcGF0aCA9IFtdCisgICAgICAgIGRlZiBmaW5kZXIobW9kZWwsIHBhdGgsIGl0ZXIsIG5lZWRsZSk6CisgICAgICAgICAgICBwYWNrYWdlID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIsIENPTF9QS0dfTkFNRSkKKyAgICAgICAgICAgIGlmIHBhY2thZ2UgPT0gbmVlZGxlOgorICAgICAgICAgICAgICAgIHBrZ19wYXRoLmFwcGVuZChwYXRoKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLnBrZ19tb2RlbC5mb3JlYWNoKGZpbmRlciwgcGFja2FnZSkKKyAgICAgICAgaWYgcGtnX3BhdGg6CisgICAgICAgICAgICBzZWxmLnBrZ190cmVldmlldy5nZXRfc2VsZWN0aW9uKCkuc2VsZWN0X3BhdGgocGtnX3BhdGhbMF0pCisgICAgICAgICAgICBzZWxmLnBrZ190cmVldmlldy5zY3JvbGxfdG9fY2VsbChwa2dfcGF0aFswXSkKKworICAgIGRlZiBvbl9jdXJzb3JfY2hhbmdlZChzZWxmLCBzZWxlY3Rpb24pOgorICAgICAgICAobW9kZWwsIGl0KSA9IHNlbGVjdGlvbi5nZXRfc2VsZWN0ZWQoKQorICAgICAgICBpZiBpdCBpcyBOb25lOgorICAgICAgICAgICAgY3VycmVudF9wYWNrYWdlID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3VycmVudF9wYWNrYWdlID0gbW9kZWwuZ2V0X3ZhbHVlKGl0LCBDT0xfUEtHX05BTUUpCisgICAgICAgIHNlbGYucmRlcF90cmVldmlldy5zZXRfY3VycmVudF9wYWNrYWdlKGN1cnJlbnRfcGFja2FnZSkKKyAgICAgICAgc2VsZi5kZXBfdHJlZXZpZXcuc2V0X2N1cnJlbnRfcGFja2FnZShjdXJyZW50X3BhY2thZ2UpCisgICAgICAgIHNlbGYucmV2ZGVwX3RyZWV2aWV3LnNldF9jdXJyZW50X3BhY2thZ2UoY3VycmVudF9wYWNrYWdlKQorCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGVwZ3JhcGgpOgorICAgICAgICBmb3IgcGFja2FnZSBpbiBkZXBncmFwaFsicG4iXToKKyAgICAgICAgICAgIHNlbGYucGtnX21vZGVsLmluc2VydCgwLCAocGFja2FnZSwpKQorCisgICAgICAgIGZvciBwYWNrYWdlIGluIGRlcGdyYXBoWyJkZXBlbmRzIl06CisgICAgICAgICAgICBmb3IgZGVwZW5kIGluIGRlcGdyYXBoWyJkZXBlbmRzIl1bcGFja2FnZV06CisgICAgICAgICAgICAgICAgc2VsZi5kZXBlbmRzX21vZGVsLmluc2VydCAoMCwgKFRZUEVfREVQLCBwYWNrYWdlLCBkZXBlbmQpKQorCisgICAgICAgIGZvciBwYWNrYWdlIGluIGRlcGdyYXBoWyJyZGVwZW5kcy1wbiJdOgorICAgICAgICAgICAgZm9yIHJkZXBlbmQgaW4gZGVwZ3JhcGhbInJkZXBlbmRzLXBuIl1bcGFja2FnZV06CisgICAgICAgICAgICAgICAgc2VsZi5kZXBlbmRzX21vZGVsLmluc2VydCAoMCwgKFRZUEVfUkRFUCwgcGFja2FnZSwgcmRlcGVuZCkpCisKKworY2xhc3MgZ3RrdGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgIHF1aXQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaHV0ZG93bik6CisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgc2VsZi5zaHV0ZG93biA9IHNodXRkb3duCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBnb2JqZWN0LnRocmVhZHNfaW5pdCgpCisgICAgICAgIGd0ay5nZGsudGhyZWFkc19pbml0KCkKKyAgICAgICAgZ3RrLm1haW4oKQorICAgICAgICBndGt0aHJlYWQucXVpdC5zZXQoKQorCisKK2RlZiBtYWluKHNlcnZlciwgZXZlbnRIYW5kbGVyLCBwYXJhbXMpOgorICAgIHRyeToKKyAgICAgICAgcGFyYW1zLnVwZGF0ZUZyb21TZXJ2ZXIoc2VydmVyKQorICAgICAgICBjbWRsaW5lID0gcGFyYW1zLnBhcnNlQWN0aW9ucygpCisgICAgICAgIGlmIG5vdCBjbWRsaW5lOgorICAgICAgICAgICAgcHJpbnQoIk5vdGhpbmcgdG8gZG8uICBVc2UgJ2JpdGJha2Ugd29ybGQnIHRvIGJ1aWxkIGV2ZXJ5dGhpbmcsIG9yIHJ1biAnYml0YmFrZSAtLWhlbHAnIGZvciB1c2FnZSBpbmZvcm1hdGlvbi4iKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgaWYgJ21zZycgaW4gY21kbGluZSBhbmQgY21kbGluZVsnbXNnJ106CisgICAgICAgICAgICBwcmludChjbWRsaW5lWydtc2cnXSkKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGNtZGxpbmUgPSBjbWRsaW5lWydhY3Rpb24nXQorICAgICAgICBpZiBub3QgY21kbGluZSBvciBjbWRsaW5lWzBdICE9ICJnZW5lcmF0ZURvdEdyYXBoIjoKKyAgICAgICAgICAgIHByaW50KCJUaGlzIFVJIHJlcXVpcmVzIHRoZSAtZyBvcHRpb24iKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgcmV0LCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsiZ2VuZXJhdGVEZXBUcmVlRXZlbnQiLCBjbWRsaW5lWzFdLCBjbWRsaW5lWzJdXSkKKyAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICBwcmludCgiRXJyb3IgcnVubmluZyBjb21tYW5kICclcyc6ICVzIiAlIChjbWRsaW5lLCBlcnJvcikpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBlbGlmIHJldCAhPSBUcnVlOgorICAgICAgICAgICAgcHJpbnQoIkVycm9yIHJ1bm5pbmcgY29tbWFuZCAnJXMnOiByZXR1cm5lZCAlcyIgJSAoY21kbGluZSwgcmV0KSkKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgZXhjZXB0IHhtbHJwY2xpYi5GYXVsdCBhcyB4OgorICAgICAgICBwcmludCgiWE1MUlBDIEZhdWx0IGdldHRpbmcgY29tbWFuZGxpbmU6XG4gJXMiICUgeCkKKyAgICAgICAgcmV0dXJuCisKKyAgICB0cnk6CisgICAgICAgIGd0ay5pbml0X2NoZWNrKCkKKyAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJQbGVhc2Ugc2V0IERJU1BMQVkgdmFyaWFibGUgYmVmb3JlIHJ1bm5pbmcgdGhpcyBjb21tYW5kIFxuIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBzaHV0ZG93biA9IDAKKworICAgIGd0a2d1aSA9IGd0a3RocmVhZChzaHV0ZG93bikKKyAgICBndGtndWkuc3RhcnQoKQorCisgICAgZ3RrLmdkay50aHJlYWRzX2VudGVyKCkKKyAgICBkZXAgPSBEZXBFeHBsb3JlcigpCisgICAgYmFyZGlhbG9nID0gZ3RrLkRpYWxvZyhwYXJlbnQ9ZGVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M9Z3RrLkRJQUxPR19NT0RBTHxndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQpCisgICAgYmFyZGlhbG9nLnNldF9kZWZhdWx0X3NpemUoNDAwLCA1MCkKKyAgICBwYmFyID0gSG9iUHJvZ3Jlc3NCYXIoKQorICAgIGJhcmRpYWxvZy52Ym94LnBhY2tfc3RhcnQocGJhcikKKyAgICBiYXJkaWFsb2cuc2hvd19hbGwoKQorICAgIGJhcmRpYWxvZy5jb25uZWN0KCJkZWxldGUtZXZlbnQiLCBndGsubWFpbl9xdWl0KQorICAgIGd0ay5nZGsudGhyZWFkc19sZWF2ZSgpCisKKyAgICBwcm9ncmVzc190b3RhbCA9IDAKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmVudCA9IGV2ZW50SGFuZGxlci53YWl0RXZlbnQoMC4yNSkKKyAgICAgICAgICAgIGlmIGd0a3RocmVhZC5xdWl0LmlzU2V0KCk6CisgICAgICAgICAgICAgICAgXywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbInN0YXRlRm9yY2VTaHV0ZG93biJdKQorICAgICAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnVW5hYmxlIHRvIGNsZWFubHkgc3RvcDogJXMnICUgZXJyb3IpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgZXZlbnQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRTdGFydGVkKToKKyAgICAgICAgICAgICAgICBwcm9ncmVzc190b3RhbCA9IGV2ZW50LnRvdGFsCisgICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2VudGVyKCkKKyAgICAgICAgICAgICAgICBiYXJkaWFsb2cuc2V0X3RpdGxlKCJMb2FkaW5nIENhY2hlIikKKyAgICAgICAgICAgICAgICBwYmFyLnVwZGF0ZSgwKQorICAgICAgICAgICAgICAgIGd0ay5nZGsudGhyZWFkc19sZWF2ZSgpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZFByb2dyZXNzKToKKyAgICAgICAgICAgICAgICB4ID0gZXZlbnQuY3VycmVudAorICAgICAgICAgICAgICAgIGd0ay5nZGsudGhyZWFkc19lbnRlcigpCisgICAgICAgICAgICAgICAgcGJhci51cGRhdGUoeCAqIDEuMCAvIHByb2dyZXNzX3RvdGFsKQorICAgICAgICAgICAgICAgIHBiYXIuc2V0X3RpdGxlKCcnKQorICAgICAgICAgICAgICAgIGd0ay5nZGsudGhyZWFkc19sZWF2ZSgpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkQ29tcGxldGVkKToKKyAgICAgICAgICAgICAgICBiYXJkaWFsb2cuaGlkZSgpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VTdGFydGVkKToKKyAgICAgICAgICAgICAgICBwcm9ncmVzc190b3RhbCA9IGV2ZW50LnRvdGFsCisgICAgICAgICAgICAgICAgaWYgcHJvZ3Jlc3NfdG90YWwgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBndGsuZ2RrLnRocmVhZHNfZW50ZXIoKQorICAgICAgICAgICAgICAgIHBiYXIudXBkYXRlKDApCisgICAgICAgICAgICAgICAgYmFyZGlhbG9nLnNldF90aXRsZSgiUHJvY2Vzc2luZyByZWNpcGVzIikKKworICAgICAgICAgICAgICAgIGd0ay5nZGsudGhyZWFkc19sZWF2ZSgpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlUHJvZ3Jlc3MpOgorICAgICAgICAgICAgICAgIHggPSBldmVudC5jdXJyZW50CisgICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2VudGVyKCkKKyAgICAgICAgICAgICAgICBwYmFyLnVwZGF0ZSh4ICogMS4wIC8gcHJvZ3Jlc3NfdG90YWwpCisgICAgICAgICAgICAgICAgcGJhci5zZXRfdGl0bGUoJycpCisgICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCk6CisgICAgICAgICAgICAgICAgYmFyZGlhbG9nLmhpZGUoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkRlcFRyZWVHZW5lcmF0ZWQpOgorICAgICAgICAgICAgICAgIGd0ay5nZGsudGhyZWFkc19lbnRlcigpCisgICAgICAgICAgICAgICAgZGVwLnBhcnNlKGV2ZW50Ll9kZXBncmFwaCkKKyAgICAgICAgICAgICAgICBndGsuZ2RrLnRocmVhZHNfbGVhdmUoKQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZEZhaWxlZCk6CisgICAgICAgICAgICAgICAgcHJpbnQoIkNvbW1hbmQgZXhlY3V0aW9uIGZhaWxlZDogJXMiICUgZXZlbnQuZXJyb3IpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmV4aXRjb2RlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZEV4aXQpOgorICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5leGl0Y29kZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb29rZXIuQ29va2VyRXhpdCk6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgaW9lcnJvcjoKKyAgICAgICAgICAgICMgaWdub3JlIGludGVycnVwdGVkIGlvCisgICAgICAgICAgICBpZiBpb2Vycm9yLmFyZ3NbMF0gPT0gNDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIGlmIHNodXRkb3duID09IDI6CisgICAgICAgICAgICAgICAgcHJpbnQoIlxuVGhpcmQgS2V5Ym9hcmQgSW50ZXJydXB0LCBleGl0LlxuIikKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgc2h1dGRvd24gPT0gMToKKyAgICAgICAgICAgICAgICBwcmludCgiXG5TZWNvbmQgS2V5Ym9hcmQgSW50ZXJydXB0LCBzdG9wcGluZy4uLlxuIikKKyAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCisgICAgICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdVbmFibGUgdG8gY2xlYW5seSBzdG9wOiAlcycgJSBlcnJvcikKKyAgICAgICAgICAgIGlmIHNodXRkb3duID09IDA6CisgICAgICAgICAgICAgICAgcHJpbnQoIlxuS2V5Ym9hcmQgSW50ZXJydXB0LCBjbG9zaW5nIGRvd24uLi5cbiIpCisgICAgICAgICAgICAgICAgXywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbInN0YXRlU2h1dGRvd24iXSkKKyAgICAgICAgICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ1VuYWJsZSB0byBjbGVhbmx5IHNodXRkb3duOiAlcycgJSBlcnJvcikKKyAgICAgICAgICAgIHNodXRkb3duID0gc2h1dGRvd24gKyAxCisgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2dvZ2dsZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvZ29nZ2xlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZWU3YjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2dvZ2dsZS5weQpAQCAtMCwwICsxLDEyMSBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4ICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBSb2IgQnJhZGZvcmQgPHJvYkBsaW51eC5pbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IGd0aworaW1wb3J0IHhtbHJwY2xpYgorZnJvbSBiYi51aS5jcnVtYnMucnVubmluZ2J1aWxkIGltcG9ydCBSdW5uaW5nQnVpbGRUcmVlVmlldywgUnVubmluZ0J1aWxkCitmcm9tIGJiLnVpLmNydW1icy5wcm9ncmVzcyBpbXBvcnQgUHJvZ3Jlc3NCYXIKKworaW1wb3J0IFF1ZXVlCisKKworZGVmIGV2ZW50X2hhbmRsZV9pZGxlX2Z1bmMgKGV2ZW50SGFuZGxlciwgYnVpbGQsIHBiYXIpOgorCisgICAgIyBDb25zdW1lIGFzIG1hbnkgbWVzc2FnZXMgYXMgd2UgY2FuIGluIHRoZSB0aW1lIGF2YWlsYWJsZSB0byB1cworICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLmdldEV2ZW50KCkKKyAgICB3aGlsZSBldmVudDoKKyAgICAgICAgYnVpbGQuaGFuZGxlX2V2ZW50IChldmVudCwgcGJhcikKKyAgICAgICAgZXZlbnQgPSBldmVudEhhbmRsZXIuZ2V0RXZlbnQoKQorCisgICAgcmV0dXJuIFRydWUKKworZGVmIHNjcm9sbF90dl9jYiAobW9kZWwsIHBhdGgsIGl0ZXIsIHZpZXcpOgorICAgIHZpZXcuc2Nyb2xsX3RvX2NlbGwgKHBhdGgpCisKKworIyBAdG9kbyBob29rIHRoZXNlIGludG8gdGhlIEdVSSBzbyB0aGUgdXNlciBoYXMgZmVlZGJhY2suLi4KK2RlZiBydW5uaW5nX2J1aWxkX2ZhaWxlZF9jYiAocnVubmluZ19idWlsZCk6CisgICAgcGFzcworCisKK2RlZiBydW5uaW5nX2J1aWxkX3N1Y2NlZWRlZF9jYiAocnVubmluZ19idWlsZCk6CisgICAgcGFzcworCisKK2NsYXNzIE1haW5XaW5kb3cgKGd0ay5XaW5kb3cpOgorICAgIGRlZiBfX2luaXRfXyAoc2VsZik6CisgICAgICAgIGd0ay5XaW5kb3cuX19pbml0X18gKHNlbGYsIGd0ay5XSU5ET1dfVE9QTEVWRUwpCisKKyAgICAgICAgIyBTZXR1cCB0cmVlIHZpZXcgYW5kIHRoZSBzY3JvbGxlZCB3aW5kb3cKKyAgICAgICAgc2Nyb2xsZWRfd2luZG93ID0gZ3RrLlNjcm9sbGVkV2luZG93ICgpCisgICAgICAgIHNlbGYuYWRkIChzY3JvbGxlZF93aW5kb3cpCisgICAgICAgIHNlbGYuY3VyX2J1aWxkX3R2ID0gUnVubmluZ0J1aWxkVHJlZVZpZXcoKQorICAgICAgICBzZWxmLmNvbm5lY3QoImRlbGV0ZS1ldmVudCIsIGd0ay5tYWluX3F1aXQpCisgICAgICAgIHNlbGYuc2V0X2RlZmF1bHRfc2l6ZSg2NDAsIDQ4MCkKKyAgICAgICAgc2Nyb2xsZWRfd2luZG93LmFkZCAoc2VsZi5jdXJfYnVpbGRfdHYpCisKKworZGVmIG1haW4gKHNlcnZlciwgZXZlbnRIYW5kbGVyLCBwYXJhbXMpOgorICAgIGdvYmplY3QudGhyZWFkc19pbml0KCkKKyAgICBndGsuZ2RrLnRocmVhZHNfaW5pdCgpCisKKyAgICB3aW5kb3cgPSBNYWluV2luZG93ICgpCisgICAgd2luZG93LnNob3dfYWxsICgpCisgICAgcGJhciA9IFByb2dyZXNzQmFyKHdpbmRvdykKKyAgICBwYmFyLmNvbm5lY3QoImRlbGV0ZS1ldmVudCIsIGd0ay5tYWluX3F1aXQpCisKKyAgICAjIENyZWF0ZSB0aGUgb2JqZWN0IGZvciB0aGUgY3VycmVudCBidWlsZAorICAgIHJ1bm5pbmdfYnVpbGQgPSBSdW5uaW5nQnVpbGQgKCkKKyAgICB3aW5kb3cuY3VyX2J1aWxkX3R2LnNldF9tb2RlbCAocnVubmluZ19idWlsZC5tb2RlbCkKKyAgICBydW5uaW5nX2J1aWxkLm1vZGVsLmNvbm5lY3QoInJvdy1pbnNlcnRlZCIsIHNjcm9sbF90dl9jYiwgd2luZG93LmN1cl9idWlsZF90dikKKyAgICBydW5uaW5nX2J1aWxkLmNvbm5lY3QgKCJidWlsZC1zdWNjZWVkZWQiLCBydW5uaW5nX2J1aWxkX3N1Y2NlZWRlZF9jYikKKyAgICBydW5uaW5nX2J1aWxkLmNvbm5lY3QgKCJidWlsZC1mYWlsZWQiLCBydW5uaW5nX2J1aWxkX2ZhaWxlZF9jYikKKworICAgIHRyeToKKyAgICAgICAgcGFyYW1zLnVwZGF0ZUZyb21TZXJ2ZXIoc2VydmVyKQorICAgICAgICBjbWRsaW5lID0gcGFyYW1zLnBhcnNlQWN0aW9ucygpCisgICAgICAgIGlmIG5vdCBjbWRsaW5lOgorICAgICAgICAgICAgcHJpbnQoIk5vdGhpbmcgdG8gZG8uICBVc2UgJ2JpdGJha2Ugd29ybGQnIHRvIGJ1aWxkIGV2ZXJ5dGhpbmcsIG9yIHJ1biAnYml0YmFrZSAtLWhlbHAnIGZvciB1c2FnZSBpbmZvcm1hdGlvbi4iKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgaWYgJ21zZycgaW4gY21kbGluZSBhbmQgY21kbGluZVsnbXNnJ106CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoY21kbGluZVsnbXNnJ10pCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBjbWRsaW5lID0gY21kbGluZVsnYWN0aW9uJ10KKyAgICAgICAgcmV0LCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKGNtZGxpbmUpCisgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgcHJpbnQoIkVycm9yIHJ1bm5pbmcgY29tbWFuZCAnJXMnOiAlcyIgJSAoY21kbGluZSwgZXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZWxpZiByZXQgIT0gVHJ1ZToKKyAgICAgICAgICAgIHByaW50KCJFcnJvciBydW5uaW5nIGNvbW1hbmQgJyVzJzogcmV0dXJuZWQgJXMiICUgKGNtZGxpbmUsIHJldCkpCisgICAgICAgICAgICByZXR1cm4gMQorICAgIGV4Y2VwdCB4bWxycGNsaWIuRmF1bHQgYXMgeDoKKyAgICAgICAgcHJpbnQoIlhNTFJQQyBGYXVsdCBnZXR0aW5nIGNvbW1hbmRsaW5lOlxuICVzIiAlIHgpCisgICAgICAgIHJldHVybiAxCisKKyAgICAjIFVzZSBhIHRpbWVvdXQgZnVuY3Rpb24gZm9yIHByb2JpbmcgdGhlIGV2ZW50IHF1ZXVlIHRvIGZpbmQgb3V0IGlmIHdlCisgICAgIyBoYXZlIGEgbWVzc2FnZSB3YWl0aW5nIGZvciB1cy4KKyAgICBnb2JqZWN0LnRpbWVvdXRfYWRkICgxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfaGFuZGxlX2lkbGVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBldmVudEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZ19idWlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYmFyKQorCisgICAgdHJ5OgorICAgICAgICBndGsubWFpbigpCisgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgaW9lcnJvcjoKKyAgICAgICAgIyBpZ25vcmUgaW50ZXJydXB0ZWQgaW8KKyAgICAgICAgaWYgaW9lcnJvci5hcmdzWzBdID09IDQ6CisgICAgICAgICAgICBwYXNzCisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICBwYXNzCisgICAgZmluYWxseToKKyAgICAgICAgc2VydmVyLnJ1bkNvbW1hbmQoWyJzdGF0ZUZvcmNlU2h1dGRvd24iXSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9ob2IucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2hvYi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYTViNDExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9ob2IucHkKQEAgLTAsMCArMSwxMDkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK3JlcXVpcmVtZW50cyA9ICJGQVRBTDogSG9iIHJlcXVpcmVzIEd0aysgMi4yMC4wIG9yIGhpZ2hlciwgUHlHdGsgMi4yMS4wIG9yIGhpZ2hlciIKK3RyeToKKyAgICBpbXBvcnQgZ29iamVjdAorICAgIGltcG9ydCBndGsKKyAgICBpbXBvcnQgcHlndGsKKyAgICBweWd0ay5yZXF1aXJlKCcyLjAnKSAjIHRvIGJlIGNlcnRhaW4gd2UgZG9uJ3QgaGF2ZSBndGsrIDEueCAhPyEKKyAgICBndGt2ZXIgPSBndGsuZ3RrX3ZlcnNpb24KKyAgICBweWd0a3ZlciA9IGd0ay5weWd0a192ZXJzaW9uCisgICAgaWYgZ3RrdmVyICA8ICgyLCAyMCwgMCkgb3IgcHlndGt2ZXIgPCAoMiwgMjEsIDApOgorICAgICAgICBzeXMuZXhpdCgiJXMsXG5Zb3UgaGF2ZSBHdGsrICVzIGFuZCBQeUd0ayAlcy4iICUgKHJlcXVpcmVtZW50cywKKyAgICAgICAgICAgICAgICAiLiIuam9pbihtYXAoc3RyLCBndGt2ZXIpKSwKKyAgICAgICAgICAgICAgICAiLiIuam9pbihtYXAoc3RyLCBweWd0a3ZlcikpKSkKK2V4Y2VwdCBJbXBvcnRFcnJvciBhcyBleGM6CisgICAgc3lzLmV4aXQoIiVzICglcykuIiAlIChyZXF1aXJlbWVudHMsIHN0cihleGMpKSkKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpKSkKK3RyeToKKyAgICBpbXBvcnQgYmIKK2V4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXhjOgorICAgIHN5cy5leGl0KHN0cihleGMpKQorZnJvbSBiYi51aSBpbXBvcnQgdWloZWxwZXIKK2Zyb20gYmIudWkuY3J1bWJzLmhvYmxpc3Rtb2RlbCBpbXBvcnQgUmVjaXBlTGlzdE1vZGVsLCBQYWNrYWdlTGlzdE1vZGVsCitmcm9tIGJiLnVpLmNydW1icy5ob2JldmVudGhhbmRsZXIgaW1wb3J0IEhvYkhhbmRsZXIKK2Zyb20gYmIudWkuY3J1bWJzLmJ1aWxkZXIgaW1wb3J0IEJ1aWxkZXIKKworZmVhdHVyZVNldCA9IFtiYi5jb29rZXIuQ29va2VyRmVhdHVyZXMuSE9CX0VYVFJBX0NBQ0hFUywgYmIuY29va2VyLkNvb2tlckZlYXR1cmVzLkJBU0VEQVRBU1RPUkVfVFJBQ0tJTkddCisKK2RlZiBldmVudF9oYW5kbGVfaWRsZV9mdW5jKGV2ZW50SGFuZGxlciwgaG9iSGFuZGxlcik6CisgICAgIyBDb25zdW1lIGFzIG1hbnkgbWVzc2FnZXMgYXMgd2UgY2FuIGluIHRoZSB0aW1lIGF2YWlsYWJsZSB0byB1cworICAgIGlmIG5vdCBldmVudEhhbmRsZXI6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLmdldEV2ZW50KCkKKyAgICB3aGlsZSBldmVudDoKKyAgICAgICAgaG9iSGFuZGxlci5oYW5kbGVfZXZlbnQoZXZlbnQpCisgICAgICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLmdldEV2ZW50KCkKKyAgICByZXR1cm4gVHJ1ZQorCitfZXZ0X2xpc3QgPSBbICJiYi5ydW5xdWV1ZS5ydW5RdWV1ZUV4aXRXYWl0IiwgImJiLmV2ZW50LkxvZ0V4ZWNUVFkiLCAibG9nZ2luZy5Mb2dSZWNvcmQiLAorICAgICAgICAgICAgICAiYmIuYnVpbGQuVGFza0ZhaWxlZCIsICJiYi5idWlsZC5UYXNrQmFzZSIsICJiYi5ldmVudC5QYXJzZVN0YXJ0ZWQiLAorICAgICAgICAgICAgICAiYmIuZXZlbnQuUGFyc2VQcm9ncmVzcyIsICJiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCIsICJiYi5ldmVudC5DYWNoZUxvYWRTdGFydGVkIiwKKyAgICAgICAgICAgICAgImJiLmV2ZW50LkNhY2hlTG9hZFByb2dyZXNzIiwgImJiLmV2ZW50LkNhY2hlTG9hZENvbXBsZXRlZCIsICJiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQiLAorICAgICAgICAgICAgICAiYmIuY29tbWFuZC5Db21tYW5kRXhpdCIsICJiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQiLCAgImJiLmNvb2tlci5Db29rZXJFeGl0IiwKKyAgICAgICAgICAgICAgImJiLmV2ZW50Lk11bHRpcGxlUHJvdmlkZXJzIiwgImJiLmV2ZW50Lk5vUHJvdmlkZXIiLCAiYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkIiwKKyAgICAgICAgICAgICAgImJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza1N0YXJ0ZWQiLCAiYmIucnVucXVldWUucnVuUXVldWVUYXNrRmFpbGVkIiwgImJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrRmFpbGVkIiwKKyAgICAgICAgICAgICAgImJiLmV2ZW50LkJ1aWxkQmFzZSIsICJiYi5idWlsZC5UYXNrU3RhcnRlZCIsICJiYi5idWlsZC5UYXNrU3VjY2VlZGVkIiwgImJiLmJ1aWxkLlRhc2tGYWlsZWRTaWxlbnQiLAorICAgICAgICAgICAgICAiYmIuZXZlbnQuU2FuaXR5Q2hlY2tQYXNzZWQiLCAiYmIuZXZlbnQuU2FuaXR5Q2hlY2tGYWlsZWQiLCAiYmIuZXZlbnQuUGFja2FnZUluZm8iLAorICAgICAgICAgICAgICAiYmIuZXZlbnQuVGFyZ2V0c1RyZWVHZW5lcmF0ZWQiLCAiYmIuZXZlbnQuQ29uZmlnRmlsZXNGb3VuZCIsICJiYi5ldmVudC5Db25maWdGaWxlUGF0aEZvdW5kIiwKKyAgICAgICAgICAgICAgImJiLmV2ZW50LkZpbGVzTWF0Y2hpbmdGb3VuZCIsICJiYi5ldmVudC5OZXR3b3JrVGVzdEZhaWxlZCIsICJiYi5ldmVudC5OZXR3b3JrVGVzdFBhc3NlZCIsCisgICAgICAgICAgICAgICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQiLCAiYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQiLCAiYmIuZXZlbnQuRGlza0Z1bGwiXQorCitkZWYgbWFpbiAoc2VydmVyLCBldmVudEhhbmRsZXIsIHBhcmFtcyk6CisgICAgcGFyYW1zLnVwZGF0ZUZyb21TZXJ2ZXIoc2VydmVyKQorICAgIGdvYmplY3QudGhyZWFkc19pbml0KCkKKworICAgICMgVGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgSG9iIGFuZCB0aGUgYml0YmFrZSBzZXJ2ZXIgYXJlCisgICAgIyBydW5uaW5nIG9uIGRpZmZlcmVudCBtYWNoaW5lcworICAgICMgcmVjaXBlIG1vZGVsIGFuZCBwYWNrYWdlIG1vZGVsCisgICAgcmVjaXBlX21vZGVsID0gUmVjaXBlTGlzdE1vZGVsKCkKKyAgICBwYWNrYWdlX21vZGVsID0gUGFja2FnZUxpc3RNb2RlbCgpCisKKyAgICBsbGV2ZWwsIGRlYnVnX2RvbWFpbnMgPSBiYi5tc2cuY29uc3RydWN0TG9nT3B0aW9ucygpCisgICAgc2VydmVyLnJ1bkNvbW1hbmQoWyJzZXRFdmVudE1hc2siLCBzZXJ2ZXIuZ2V0RXZlbnRIYW5kbGUoKSwgbGxldmVsLCBkZWJ1Z19kb21haW5zLCBfZXZ0X2xpc3RdKQorICAgIGhvYkhhbmRsZXIgPSBIb2JIYW5kbGVyKHNlcnZlciwgcmVjaXBlX21vZGVsLCBwYWNrYWdlX21vZGVsKQorICAgIGJ1aWxkZXIgPSBCdWlsZGVyKGhvYkhhbmRsZXIsIHJlY2lwZV9tb2RlbCwgcGFja2FnZV9tb2RlbCkKKworICAgICMgVGhpcyB0aW1lb3V0IGZ1bmN0aW9uIHJlZ3VsYXJseSBwcm9iZXMgdGhlIGV2ZW50IHF1ZXVlIHRvIGZpbmQgb3V0IGlmIHdlCisgICAgIyBoYXZlIGFueSBtZXNzYWdlcyB3YWl0aW5nIGZvciB1cy4KKyAgICBnb2JqZWN0LnRpbWVvdXRfYWRkKDEwLCBldmVudF9oYW5kbGVfaWRsZV9mdW5jLCBldmVudEhhbmRsZXIsIGhvYkhhbmRsZXIpCisKKyAgICB0cnk6CisgICAgICAgIGd0ay5tYWluKCkKKyAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBpb2Vycm9yOgorICAgICAgICAjIGlnbm9yZSBpbnRlcnJ1cHRlZCBpbworICAgICAgICBpZiBpb2Vycm9yLmFyZ3NbMF0gPT0gNDoKKyAgICAgICAgICAgIHBhc3MKKyAgICBmaW5hbGx5OgorICAgICAgICBob2JIYW5kbGVyLmNhbmNlbF9idWlsZChmb3JjZSA9IFRydWUpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygxNSkKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2ltYWdlcy9pbWFnZXNfZGlzcGxheS5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2ltYWdlcy9pbWFnZXNfZGlzcGxheS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmODcxMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW1hZ2VzL2ltYWdlc19kaXNwbGF5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2ltYWdlcy9pbWFnZXNfaG92ZXIucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbWFnZXMvaW1hZ2VzX2hvdmVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDljZDk5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbWFnZXMvaW1hZ2VzX2hvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvYWRkLWhvdmVyLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9hZGQtaG92ZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNmRmNzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvYWRkLWhvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvYWRkLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9hZGQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZTcwOTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvYWRkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvYWxlcnQucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL2FsZXJ0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWM2ZjU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL2FsZXJ0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvY29uZmlybWF0aW9uLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9jb25maXJtYXRpb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNTQwMmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvY29uZmlybWF0aW9uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvZGVuaWVkLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9kZW5pZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMzVjN2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvZGVuaWVkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvZXJyb3IucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL2Vycm9yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDZhOGMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL2Vycm9yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvaW5mby5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvaW5mby5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU4ZThkOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9pbmZvLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvaXNzdWVzLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9pc3N1ZXMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYzc0NjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvaXNzdWVzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvcmVmcmVzaC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvcmVmcmVzaC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI2YzQxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9yZWZyZXNoLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvcmVtb3ZlLWhvdmVyLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9yZW1vdmUtaG92ZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNTdjNjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvcmVtb3ZlLWhvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvcmVtb3ZlLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9yZW1vdmUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YzNjMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvcmVtb3ZlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvdGljay5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvdGljay5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVhYWQzNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy90aWNrLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZm8vaW5mb19kaXNwbGF5LnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5mby9pbmZvX2Rpc3BsYXkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZmJiYTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZm8vaW5mb19kaXNwbGF5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZm8vaW5mb19ob3Zlci5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZm8vaW5mb19ob3Zlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlkMjk0ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5mby9pbmZvX2hvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2xheWVycy9sYXllcnNfZGlzcGxheS5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2xheWVycy9sYXllcnNfZGlzcGxheS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdmOTA1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvbGF5ZXJzL2xheWVyc19kaXNwbGF5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2xheWVycy9sYXllcnNfaG92ZXIucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9sYXllcnMvbGF5ZXJzX2hvdmVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmYzY2UwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9sYXllcnMvbGF5ZXJzX2hvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3BhY2thZ2VzL3BhY2thZ2VzX2Rpc3BsYXkucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9wYWNrYWdlcy9wYWNrYWdlc19kaXNwbGF5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWQwYTUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9wYWNrYWdlcy9wYWNrYWdlc19kaXNwbGF5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3BhY2thZ2VzL3BhY2thZ2VzX2hvdmVyLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvcGFja2FnZXMvcGFja2FnZXNfaG92ZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwODExNjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3BhY2thZ2VzL3BhY2thZ2VzX2hvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3JlY2lwZS9yZWNpcGVfZGlzcGxheS5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3JlY2lwZS9yZWNpcGVfZGlzcGxheS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk4MDliYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvcmVjaXBlL3JlY2lwZV9kaXNwbGF5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3JlY2lwZS9yZWNpcGVfaG92ZXIucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9yZWNpcGUvcmVjaXBlX2hvdmVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTQ4ZGE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9yZWNpcGUvcmVjaXBlX2hvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3NldHRpbmdzL3NldHRpbmdzX2Rpc3BsYXkucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9zZXR0aW5ncy9zZXR0aW5nc19kaXNwbGF5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGM0NjRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9zZXR0aW5ncy9zZXR0aW5nc19kaXNwbGF5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3NldHRpbmdzL3NldHRpbmdzX2hvdmVyLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvc2V0dGluZ3Mvc2V0dGluZ3NfaG92ZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MmEwYmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3NldHRpbmdzL3NldHRpbmdzX2hvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3RlbXBsYXRlcy90ZW1wbGF0ZXNfZGlzcGxheS5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3RlbXBsYXRlcy90ZW1wbGF0ZXNfZGlzcGxheS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUzYzdhZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvdGVtcGxhdGVzL3RlbXBsYXRlc19kaXNwbGF5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3RlbXBsYXRlcy90ZW1wbGF0ZXNfaG92ZXIucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy90ZW1wbGF0ZXMvdGVtcGxhdGVzX2hvdmVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmI3MTY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy90ZW1wbGF0ZXMvdGVtcGxhdGVzX2hvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2tub3R0eS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkva25vdHR5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZWUyNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2tub3R0eS5weQpAQCAtMCwwICsxLDU2NCBAQAorIworIyBCaXRCYWtlIChObylUVFkgVUkgSW1wbGVtZW50YXRpb24KKyMKKyMgSGFuZGxpbmcgb3V0cHV0IHRvIFRUWXMgb3IgZmlsZXMgKG5vIFRUWSkKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTIgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgeG1scnBjbGliCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHByb2dyZXNzYmFyCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgYmIubXNnCitpbXBvcnQgdGltZQoraW1wb3J0IGZjbnRsCitpbXBvcnQgc3RydWN0CitpbXBvcnQgY29weQoraW1wb3J0IGF0ZXhpdAorZnJvbSBiYi51aSBpbXBvcnQgdWloZWxwZXIKKworZmVhdHVyZVNldCA9IFtiYi5jb29rZXIuQ29va2VyRmVhdHVyZXMuU0VORF9TQU5JVFlFVkVOVFNdCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKK2ludGVyYWN0aXZlID0gc3lzLnN0ZG91dC5pc2F0dHkoKQorCitjbGFzcyBCQlByb2dyZXNzKHByb2dyZXNzYmFyLlByb2dyZXNzQmFyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnLCBtYXh2YWwpOgorICAgICAgICBzZWxmLm1zZyA9IG1zZworICAgICAgICB3aWRnZXRzID0gW3Byb2dyZXNzYmFyLlBlcmNlbnRhZ2UoKSwgJyAnLCBwcm9ncmVzc2Jhci5CYXIoKSwgJyAnLAorICAgICAgICAgICBwcm9ncmVzc2Jhci5FVEEoKV0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9yZXNpemVfZGVmYXVsdCA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR1dJTkNIKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLl9yZXNpemVfZGVmYXVsdCA9IE5vbmUKKyAgICAgICAgcHJvZ3Jlc3NiYXIuUHJvZ3Jlc3NCYXIuX19pbml0X18oc2VsZiwgbWF4dmFsLCBbc2VsZi5tc2cgKyAiOiAiXSArIHdpZGdldHMsIGZkPXN5cy5zdGRvdXQpCisKKyAgICBkZWYgX2hhbmRsZV9yZXNpemUoc2VsZiwgc2lnbnVtLCBmcmFtZSk6CisgICAgICAgIHByb2dyZXNzYmFyLlByb2dyZXNzQmFyLl9oYW5kbGVfcmVzaXplKHNlbGYsIHNpZ251bSwgZnJhbWUpCisgICAgICAgIGlmIHNlbGYuX3Jlc2l6ZV9kZWZhdWx0OgorICAgICAgICAgICAgc2VsZi5fcmVzaXplX2RlZmF1bHQoc2lnbnVtLCBmcmFtZSkKKyAgICBkZWYgZmluaXNoKHNlbGYpOgorICAgICAgICBwcm9ncmVzc2Jhci5Qcm9ncmVzc0Jhci5maW5pc2goc2VsZikKKyAgICAgICAgaWYgc2VsZi5fcmVzaXplX2RlZmF1bHQ6CisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdXSU5DSCwgc2VsZi5fcmVzaXplX2RlZmF1bHQpCisKK2NsYXNzIE5vbkludGVyYWN0aXZlUHJvZ3Jlc3Mob2JqZWN0KToKKyAgICBmb2JqID0gc3lzLnN0ZG91dAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZywgbWF4dmFsKToKKyAgICAgICAgc2VsZi5tc2cgPSBtc2cKKyAgICAgICAgc2VsZi5tYXh2YWwgPSBtYXh2YWwKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5mb2JqLndyaXRlKCIlcy4uLiIgJSBzZWxmLm1zZykKKyAgICAgICAgc2VsZi5mb2JqLmZsdXNoKCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiB1cGRhdGUoc2VsZiwgdmFsdWUpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZmluaXNoKHNlbGYpOgorICAgICAgICBzZWxmLmZvYmoud3JpdGUoImRvbmUuXG4iKQorICAgICAgICBzZWxmLmZvYmouZmx1c2goKQorCitkZWYgbmV3X3Byb2dyZXNzKG1zZywgbWF4dmFsKToKKyAgICBpZiBpbnRlcmFjdGl2ZToKKyAgICAgICAgcmV0dXJuIEJCUHJvZ3Jlc3MobXNnLCBtYXh2YWwpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIE5vbkludGVyYWN0aXZlUHJvZ3Jlc3MobXNnLCBtYXh2YWwpCisKK2RlZiBwbHVyYWxpc2Uoc2luZ3VsYXIsIHBsdXJhbCwgcXR5KToKKyAgICBpZihxdHkgPT0gMSk6CisgICAgICAgIHJldHVybiBzaW5ndWxhciAlIHF0eQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBwbHVyYWwgJSBxdHkKKworCitjbGFzcyBJbnRlcmFjdENvbnNvbGVMb2dGaWx0ZXIobG9nZ2luZy5GaWx0ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZiwgZm9ybWF0KToKKyAgICAgICAgc2VsZi50ZiA9IHRmCisgICAgICAgIHNlbGYuZm9ybWF0ID0gZm9ybWF0CisKKyAgICBkZWYgZmlsdGVyKHNlbGYsIHJlY29yZCk6CisgICAgICAgIGlmIHJlY29yZC5sZXZlbG5vID09IHNlbGYuZm9ybWF0Lk5PVEUgYW5kIChyZWNvcmQubXNnLnN0YXJ0c3dpdGgoIlJ1bm5pbmciKSBvciByZWNvcmQubXNnLnN0YXJ0c3dpdGgoInJlY2lwZSAiKSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi50Zi5jbGVhckZvb3RlcigpCisgICAgICAgIHJldHVybiBUcnVlCisKK2NsYXNzIFRlcm1pbmFsRmlsdGVyKG9iamVjdCk6CisgICAgY29sdW1ucyA9IDgwCisKKyAgICBkZWYgc2lnd2luY2hfaGFuZGxlKHNlbGYsIHNpZ251bSwgZnJhbWUpOgorICAgICAgICBzZWxmLmNvbHVtbnMgPSBzZWxmLmdldFRlcm1pbmFsQ29sdW1ucygpCisgICAgICAgIGlmIHNlbGYuX3NpZ3dpbmNoX2RlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLl9zaWd3aW5jaF9kZWZhdWx0KHNpZ251bSwgZnJhbWUpCisKKyAgICBkZWYgZ2V0VGVybWluYWxDb2x1bW5zKHNlbGYpOgorICAgICAgICBkZWYgaW9jdGxfR1dJTlNaKGZkKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjciA9IHN0cnVjdC51bnBhY2soJ2hoJywgZmNudGwuaW9jdGwoZmQsIHNlbGYudGVybWlvcy5USU9DR1dJTlNaLCAnMTIzNCcpKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICByZXR1cm4gY3IKKyAgICAgICAgY3IgPSBpb2N0bF9HV0lOU1ooc3lzLnN0ZG91dC5maWxlbm8oKSkKKyAgICAgICAgaWYgbm90IGNyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZkID0gb3Mub3Blbihvcy5jdGVybWlkKCksIG9zLk9fUkRPTkxZKQorICAgICAgICAgICAgICAgIGNyID0gaW9jdGxfR1dJTlNaKGZkKQorICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgbm90IGNyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNyID0gKGVudlsnTElORVMnXSwgZW52WydDT0xVTU5TJ10pCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgY3IgPSAoMjUsIDgwKQorICAgICAgICByZXR1cm4gY3JbMV0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYWluLCBoZWxwZXIsIGNvbnNvbGUsIGVycmNvbnNvbGUsIGZvcm1hdCk6CisgICAgICAgIHNlbGYubWFpbiA9IG1haW4KKyAgICAgICAgc2VsZi5oZWxwZXIgPSBoZWxwZXIKKyAgICAgICAgc2VsZi5jdXUgPSBOb25lCisgICAgICAgIHNlbGYuc3RkaW5iYWNrdXAgPSBOb25lCisgICAgICAgIHNlbGYuaW50ZXJhY3RpdmUgPSBzeXMuc3Rkb3V0LmlzYXR0eSgpCisgICAgICAgIHNlbGYuZm9vdGVyX3ByZXNlbnQgPSBGYWxzZQorICAgICAgICBzZWxmLmxhc3RwaWRzID0gW10KKworICAgICAgICBpZiBub3Qgc2VsZi5pbnRlcmFjdGl2ZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBjdXJzZXMKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgc3lzLmV4aXQoIkZBVEFMOiBUaGUga25vdHR5IHVpIGNvdWxkIG5vdCBsb2FkIHRoZSByZXF1aXJlZCBjdXJzZXMgcHl0aG9uIG1vZHVsZS4iKQorCisgICAgICAgIGltcG9ydCB0ZXJtaW9zCisgICAgICAgIHNlbGYuY3Vyc2VzID0gY3Vyc2VzCisgICAgICAgIHNlbGYudGVybWlvcyA9IHRlcm1pb3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmQgPSBzeXMuc3RkaW4uZmlsZW5vKCkKKyAgICAgICAgICAgIHNlbGYuc3RkaW5iYWNrdXAgPSB0ZXJtaW9zLnRjZ2V0YXR0cihmZCkKKyAgICAgICAgICAgIG5ldyA9IGNvcHkuZGVlcGNvcHkoc2VsZi5zdGRpbmJhY2t1cCkKKyAgICAgICAgICAgIG5ld1szXSA9IG5ld1szXSAmIH50ZXJtaW9zLkVDSE8KKyAgICAgICAgICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0ZXJtaW9zLlRDU0FEUkFJTiwgbmV3KQorICAgICAgICAgICAgY3Vyc2VzLnNldHVwdGVybSgpCisgICAgICAgICAgICBpZiBjdXJzZXMudGlnZXRudW0oImNvbG9ycyIpID4gMjoKKyAgICAgICAgICAgICAgICBmb3JtYXQuZW5hYmxlX2NvbG9yKCkKKyAgICAgICAgICAgIHNlbGYuZWQgPSBjdXJzZXMudGlnZXRzdHIoImVkIikKKyAgICAgICAgICAgIGlmIHNlbGYuZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5jdXUgPSBjdXJzZXMudGlnZXRzdHIoImN1dSIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fc2lnd2luY2hfZGVmYXVsdCA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR1dJTkNIKQorICAgICAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1dJTkNILCBzZWxmLnNpZ3dpbmNoX2hhbmRsZSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzZWxmLmNvbHVtbnMgPSBzZWxmLmdldFRlcm1pbmFsQ29sdW1ucygpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuY3V1ID0gTm9uZQorICAgICAgICBjb25zb2xlLmFkZEZpbHRlcihJbnRlcmFjdENvbnNvbGVMb2dGaWx0ZXIoc2VsZiwgZm9ybWF0KSkKKyAgICAgICAgZXJyY29uc29sZS5hZGRGaWx0ZXIoSW50ZXJhY3RDb25zb2xlTG9nRmlsdGVyKHNlbGYsIGZvcm1hdCkpCisKKyAgICBkZWYgY2xlYXJGb290ZXIoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZm9vdGVyX3ByZXNlbnQ6CisgICAgICAgICAgICBsaW5lcyA9IHNlbGYuZm9vdGVyX3ByZXNlbnQKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoc2VsZi5jdXJzZXMudHBhcm0oc2VsZi5jdXUsIGxpbmVzKSkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoc2VsZi5jdXJzZXMudHBhcm0oc2VsZi5lZCkpCisgICAgICAgIHNlbGYuZm9vdGVyX3ByZXNlbnQgPSBGYWxzZQorCisgICAgZGVmIHVwZGF0ZUZvb3RlcihzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuY3V1OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGFjdGl2ZXRhc2tzID0gc2VsZi5oZWxwZXIucnVubmluZ190YXNrcworICAgICAgICBmYWlsZWR0YXNrcyA9IHNlbGYuaGVscGVyLmZhaWxlZF90YXNrcworICAgICAgICBydW5uaW5ncGlkcyA9IHNlbGYuaGVscGVyLnJ1bm5pbmdfcGlkcworICAgICAgICBpZiBzZWxmLmZvb3Rlcl9wcmVzZW50IGFuZCAoc2VsZi5sYXN0Y291bnQgPT0gc2VsZi5oZWxwZXIudGFza251bWJlcl9jdXJyZW50KSBhbmQgKHNlbGYubGFzdHBpZHMgPT0gcnVubmluZ3BpZHMpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYuZm9vdGVyX3ByZXNlbnQ6CisgICAgICAgICAgICBzZWxmLmNsZWFyRm9vdGVyKCkKKyAgICAgICAgaWYgKG5vdCBzZWxmLmhlbHBlci50YXNrbnVtYmVyX3RvdGFsIG9yIHNlbGYuaGVscGVyLnRhc2tudW1iZXJfY3VycmVudCA9PSBzZWxmLmhlbHBlci50YXNrbnVtYmVyX3RvdGFsKSBhbmQgbm90IGxlbihhY3RpdmV0YXNrcyk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdGFza3MgPSBbXQorICAgICAgICBmb3IgdCBpbiBydW5uaW5ncGlkczoKKyAgICAgICAgICAgIHRhc2tzLmFwcGVuZCgiJXMgKHBpZCAlcykiICUgKGFjdGl2ZXRhc2tzW3RdWyJ0aXRsZSJdLCB0KSkKKworICAgICAgICBpZiBzZWxmLm1haW4uc2h1dGRvd246CisgICAgICAgICAgICBjb250ZW50ID0gIldhaXRpbmcgZm9yICVzIHJ1bm5pbmcgdGFza3MgdG8gZmluaXNoOiIgJSBsZW4oYWN0aXZldGFza3MpCisgICAgICAgIGVsaWYgbm90IGxlbihhY3RpdmV0YXNrcyk6CisgICAgICAgICAgICBjb250ZW50ID0gIk5vIGN1cnJlbnRseSBydW5uaW5nIHRhc2tzICglcyBvZiAlcykiICUgKHNlbGYuaGVscGVyLnRhc2tudW1iZXJfY3VycmVudCwgc2VsZi5oZWxwZXIudGFza251bWJlcl90b3RhbCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbnRlbnQgPSAiQ3VycmVudGx5ICVzIHJ1bm5pbmcgdGFza3MgKCVzIG9mICVzKToiICUgKGxlbihhY3RpdmV0YXNrcyksIHNlbGYuaGVscGVyLnRhc2tudW1iZXJfY3VycmVudCwgc2VsZi5oZWxwZXIudGFza251bWJlcl90b3RhbCkKKyAgICAgICAgcHJpbnQoY29udGVudCkKKyAgICAgICAgbGluZXMgPSAxICsgaW50KGxlbihjb250ZW50KSAvIChzZWxmLmNvbHVtbnMgKyAxKSkKKyAgICAgICAgZm9yIHRhc2tudW0sIHRhc2sgaW4gZW51bWVyYXRlKHRhc2tzKToKKyAgICAgICAgICAgIGNvbnRlbnQgPSAiJXM6ICVzIiAlICh0YXNrbnVtLCB0YXNrKQorICAgICAgICAgICAgcHJpbnQoY29udGVudCkKKyAgICAgICAgICAgIGxpbmVzID0gbGluZXMgKyAxICsgaW50KGxlbihjb250ZW50KSAvIChzZWxmLmNvbHVtbnMgKyAxKSkKKyAgICAgICAgc2VsZi5mb290ZXJfcHJlc2VudCA9IGxpbmVzCisgICAgICAgIHNlbGYubGFzdHBpZHMgPSBydW5uaW5ncGlkc1s6XQorICAgICAgICBzZWxmLmxhc3Rjb3VudCA9IHNlbGYuaGVscGVyLnRhc2tudW1iZXJfY3VycmVudAorCisgICAgZGVmIGZpbmlzaChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zdGRpbmJhY2t1cDoKKyAgICAgICAgICAgIGZkID0gc3lzLnN0ZGluLmZpbGVubygpCisgICAgICAgICAgICBzZWxmLnRlcm1pb3MudGNzZXRhdHRyKGZkLCBzZWxmLnRlcm1pb3MuVENTQURSQUlOLCBzZWxmLnN0ZGluYmFja3VwKQorCitkZWYgX2xvZ19zZXR0aW5nc19mcm9tX3NlcnZlcihzZXJ2ZXIpOgorICAgICMgR2V0IHZhbHVlcyBvZiB2YXJpYWJsZXMgd2hpY2ggY29udHJvbCBvdXIgb3V0cHV0CisgICAgaW5jbHVkZWxvZ3MsIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQklOQ0xVREVMT0dTIl0pCisgICAgaWYgZXJyb3I6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGdldCB0aGUgdmFsdWUgb2YgQkJJTkNMVURFTE9HUyB2YXJpYWJsZTogJXMiICUgZXJyb3IpCisgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oZXJyb3IpCisgICAgbG9nbGluZXMsIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQklOQ0xVREVMT0dTX0xJTkVTIl0pCisgICAgaWYgZXJyb3I6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGdldCB0aGUgdmFsdWUgb2YgQkJJTkNMVURFTE9HU19MSU5FUyB2YXJpYWJsZTogJXMiICUgZXJyb3IpCisgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oZXJyb3IpCisgICAgY29uc29sZWxvZ2ZpbGUsIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQl9DT05TT0xFTE9HIl0pCisgICAgaWYgZXJyb3I6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGdldCB0aGUgdmFsdWUgb2YgQkJfQ09OU09MRUxPRyB2YXJpYWJsZTogJXMiICUgZXJyb3IpCisgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oZXJyb3IpCisgICAgcmV0dXJuIGluY2x1ZGVsb2dzLCBsb2dsaW5lcywgY29uc29sZWxvZ2ZpbGUKKworX2V2dF9saXN0ID0gWyAiYmIucnVucXVldWUucnVuUXVldWVFeGl0V2FpdCIsICJiYi5ldmVudC5Mb2dFeGVjVFRZIiwgImxvZ2dpbmcuTG9nUmVjb3JkIiwKKyAgICAgICAgICAgICAgImJiLmJ1aWxkLlRhc2tGYWlsZWQiLCAiYmIuYnVpbGQuVGFza0Jhc2UiLCAiYmIuZXZlbnQuUGFyc2VTdGFydGVkIiwKKyAgICAgICAgICAgICAgImJiLmV2ZW50LlBhcnNlUHJvZ3Jlc3MiLCAiYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQiLCAiYmIuZXZlbnQuQ2FjaGVMb2FkU3RhcnRlZCIsCisgICAgICAgICAgICAgICJiYi5ldmVudC5DYWNoZUxvYWRQcm9ncmVzcyIsICJiYi5ldmVudC5DYWNoZUxvYWRDb21wbGV0ZWQiLCAiYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkIiwKKyAgICAgICAgICAgICAgImJiLmNvbW1hbmQuQ29tbWFuZEV4aXQiLCAiYmIuY29tbWFuZC5Db21tYW5kQ29tcGxldGVkIiwgICJiYi5jb29rZXIuQ29va2VyRXhpdCIsCisgICAgICAgICAgICAgICJiYi5ldmVudC5NdWx0aXBsZVByb3ZpZGVycyIsICJiYi5ldmVudC5Ob1Byb3ZpZGVyIiwgImJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrU3RhcnRlZCIsCisgICAgICAgICAgICAgICJiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTdGFydGVkIiwgImJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza0ZhaWxlZCIsICJiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza0ZhaWxlZCIsCisgICAgICAgICAgICAgICJiYi5ldmVudC5CdWlsZEJhc2UiLCAiYmIuYnVpbGQuVGFza1N0YXJ0ZWQiLCAiYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCIsICJiYi5idWlsZC5UYXNrRmFpbGVkU2lsZW50Il0KKworZGVmIG1haW4oc2VydmVyLCBldmVudEhhbmRsZXIsIHBhcmFtcywgdGYgPSBUZXJtaW5hbEZpbHRlcik6CisKKyAgICBpbmNsdWRlbG9ncywgbG9nbGluZXMsIGNvbnNvbGVsb2dmaWxlID0gX2xvZ19zZXR0aW5nc19mcm9tX3NlcnZlcihzZXJ2ZXIpCisKKyAgICBpZiBzeXMuc3RkaW4uaXNhdHR5KCkgYW5kIHN5cy5zdGRvdXQuaXNhdHR5KCk6CisgICAgICAgIGxvZ19leGVjX3R0eSA9IFRydWUKKyAgICBlbHNlOgorICAgICAgICBsb2dfZXhlY190dHkgPSBGYWxzZQorCisgICAgaGVscGVyID0gdWloZWxwZXIuQkJVSUhlbHBlcigpCisKKyAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCisgICAgZXJyY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3RkZXJyKQorICAgIGZvcm1hdF9zdHIgPSAiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiCisgICAgZm9ybWF0ID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyKGZvcm1hdF9zdHIpCisgICAgYmIubXNnLmFkZERlZmF1bHRsb2dGaWx0ZXIoY29uc29sZSwgYmIubXNnLkJCTG9nRmlsdGVyU3RkT3V0KQorICAgIGJiLm1zZy5hZGREZWZhdWx0bG9nRmlsdGVyKGVycmNvbnNvbGUsIGJiLm1zZy5CQkxvZ0ZpbHRlclN0ZEVycikKKyAgICBjb25zb2xlLnNldEZvcm1hdHRlcihmb3JtYXQpCisgICAgZXJyY29uc29sZS5zZXRGb3JtYXR0ZXIoZm9ybWF0KQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGNvbnNvbGUpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoZXJyY29uc29sZSkKKworICAgIGlmIHBhcmFtcy5vcHRpb25zLnJlbW90ZV9zZXJ2ZXIgYW5kIHBhcmFtcy5vcHRpb25zLmtpbGxfc2VydmVyOgorICAgICAgICBzZXJ2ZXIudGVybWluYXRlU2VydmVyKCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBjb25zb2xlbG9nZmlsZSBhbmQgbm90IHBhcmFtcy5vcHRpb25zLnNob3dfZW52aXJvbm1lbnQgYW5kIG5vdCBwYXJhbXMub3B0aW9ucy5zaG93X3ZlcnNpb25zOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGNvbnNvbGVsb2dmaWxlKSkKKyAgICAgICAgY29ubG9nZm9ybWF0ID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyKGZvcm1hdF9zdHIpCisgICAgICAgIGNvbnNvbGVsb2cgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKGNvbnNvbGVsb2dmaWxlKQorICAgICAgICBiYi5tc2cuYWRkRGVmYXVsdGxvZ0ZpbHRlcihjb25zb2xlbG9nKQorICAgICAgICBjb25zb2xlbG9nLnNldEZvcm1hdHRlcihjb25sb2dmb3JtYXQpCisgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGNvbnNvbGVsb2cpCisKKyAgICBsbGV2ZWwsIGRlYnVnX2RvbWFpbnMgPSBiYi5tc2cuY29uc3RydWN0TG9nT3B0aW9ucygpCisgICAgc2VydmVyLnJ1bkNvbW1hbmQoWyJzZXRFdmVudE1hc2siLCBzZXJ2ZXIuZ2V0RXZlbnRIYW5kbGUoKSwgbGxldmVsLCBkZWJ1Z19kb21haW5zLCBfZXZ0X2xpc3RdKQorCisgICAgaWYgbm90IHBhcmFtcy5vYnNlcnZlX29ubHk6CisgICAgICAgIHBhcmFtcy51cGRhdGVGcm9tU2VydmVyKHNlcnZlcikKKyAgICAgICAgcGFyYW1zLnVwZGF0ZVRvU2VydmVyKHNlcnZlciwgb3MuZW52aXJvbi5jb3B5KCkpCisgICAgICAgIGNtZGxpbmUgPSBwYXJhbXMucGFyc2VBY3Rpb25zKCkKKyAgICAgICAgaWYgbm90IGNtZGxpbmU6CisgICAgICAgICAgICBwcmludCgiTm90aGluZyB0byBkby4gIFVzZSAnYml0YmFrZSB3b3JsZCcgdG8gYnVpbGQgZXZlcnl0aGluZywgb3IgcnVuICdiaXRiYWtlIC0taGVscCcgZm9yIHVzYWdlIGluZm9ybWF0aW9uLiIpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBpZiAnbXNnJyBpbiBjbWRsaW5lIGFuZCBjbWRsaW5lWydtc2cnXToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihjbWRsaW5lWydtc2cnXSkKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgcmV0LCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKGNtZGxpbmVbJ2FjdGlvbiddKQorICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ29tbWFuZCAnJXMnIGZhaWxlZDogJXMiICUgKGNtZGxpbmUsIGVycm9yKSkKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGVsaWYgcmV0ICE9IFRydWU6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNvbW1hbmQgJyVzJyBmYWlsZWQ6IHJldHVybmVkICVzIiAlIChjbWRsaW5lLCByZXQpKQorICAgICAgICAgICAgcmV0dXJuIDEKKworCisgICAgcGFyc2Vwcm9ncmVzcyA9IE5vbmUKKyAgICBjYWNoZXByb2dyZXNzID0gTm9uZQorICAgIG1haW4uc2h1dGRvd24gPSAwCisgICAgaW50ZXJydXB0ZWQgPSBGYWxzZQorICAgIHJldHVybl92YWx1ZSA9IDAKKyAgICBlcnJvcnMgPSAwCisgICAgd2FybmluZ3MgPSAwCisgICAgdGFza2ZhaWx1cmVzID0gW10KKworICAgIHRlcm1maWx0ZXIgPSB0ZihtYWluLCBoZWxwZXIsIGNvbnNvbGUsIGVycmNvbnNvbGUsIGZvcm1hdCkKKyAgICBhdGV4aXQucmVnaXN0ZXIodGVybWZpbHRlci5maW5pc2gpCisKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmVudCA9IGV2ZW50SGFuZGxlci53YWl0RXZlbnQoMCkKKyAgICAgICAgICAgIGlmIGV2ZW50IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgbWFpbi5zaHV0ZG93biA+IDE6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgdGVybWZpbHRlci51cGRhdGVGb290ZXIoKQorICAgICAgICAgICAgICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLndhaXRFdmVudCgwLjI1KQorICAgICAgICAgICAgICAgIGlmIGV2ZW50IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBoZWxwZXIuZXZlbnRIYW5kbGVyKGV2ZW50KQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUucnVuUXVldWVFeGl0V2FpdCk6CisgICAgICAgICAgICAgICAgaWYgbm90IG1haW4uc2h1dGRvd246CisgICAgICAgICAgICAgICAgICAgIG1haW4uc2h1dGRvd24gPSAxCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkxvZ0V4ZWNUVFkpOgorICAgICAgICAgICAgICAgIGlmIGxvZ19leGVjX3R0eToKKyAgICAgICAgICAgICAgICAgICAgdHJpZXMgPSBldmVudC5yZXRyaWVzCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIHRyaWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlRyeWluZyB0byBydW46ICVzIiAlIGV2ZW50LnByb2cpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5zeXN0ZW0oZXZlbnQucHJvZykgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcChldmVudC5zbGVlcF9kZWxheSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyaWVzIC09IDEKKyAgICAgICAgICAgICAgICAgICAgaWYgdHJpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKGV2ZW50Lm1zZykKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CisgICAgICAgICAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA+PSBmb3JtYXQuRVJST1I6CisgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyArIDEKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gMQorICAgICAgICAgICAgICAgIGVsaWYgZXZlbnQubGV2ZWxubyA9PSBmb3JtYXQuV0FSTklORzoKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MgPSB3YXJuaW5ncyArIDEKKyAgICAgICAgICAgICAgICAjIEZvciAibm9ybWFsIiBsb2dnaW5nIGNvbmRpdGlvbnMsIGRvbid0IHNob3cgbm90ZSBsb2dzIGZyb20gdGFza3MKKyAgICAgICAgICAgICAgICAjIGJ1dCBkbyBzaG93IHRoZW0gaWYgdGhlIHVzZXIgaGFzIGNoYW5nZWQgdGhlIGRlZmF1bHQgbG9nIGxldmVsIHRvCisgICAgICAgICAgICAgICAgIyBpbmNsdWRlIHZlcmJvc2UvZGVidWcgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICBpZiBldmVudC50YXNrcGlkICE9IDAgYW5kIGV2ZW50LmxldmVsbm8gPD0gZm9ybWF0Lk5PVEUgYW5kIChldmVudC5sZXZlbG5vIDwgbGxldmVsIG9yIChldmVudC5sZXZlbG5vID09IGZvcm1hdC5OT1RFIGFuZCBsbGV2ZWwgIT0gZm9ybWF0LlZFUkJPU0UpKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBsb2dnZXIuaGFuZGxlKGV2ZW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tGYWlsZWRTaWxlbnQpOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJMb2dmaWxlIGZvciBmYWlsZWQgc2V0c2NlbmUgdGFzayBpcyAlcyIgJSBldmVudC5sb2dmaWxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrRmFpbGVkKToKKyAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSAxCisgICAgICAgICAgICAgICAgbG9nZmlsZSA9IGV2ZW50LmxvZ2ZpbGUKKyAgICAgICAgICAgICAgICBpZiBsb2dmaWxlIGFuZCBvcy5wYXRoLmV4aXN0cyhsb2dmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgdGVybWZpbHRlci5jbGVhckZvb3RlcigpCisgICAgICAgICAgICAgICAgICAgIGJiLmVycm9yKCJMb2dmaWxlIG9mIGZhaWx1cmUgc3RvcmVkIGluOiAlcyIgJSBsb2dmaWxlKQorICAgICAgICAgICAgICAgICAgICBpZiBpbmNsdWRlbG9ncyBhbmQgbm90IGV2ZW50LmVycnByaW50ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiTG9nIGRhdGEgZm9sbG93czoiKQorICAgICAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4obG9nZmlsZSwgInIiKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbCA9PSAnJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gbC5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxvZ2xpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyB8ICVzJyAlIGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lcykgPiBpbnQobG9nbGluZXMpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMucG9wKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ3wgJXMnICUgbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGxpbmUpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrQmFzZSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oZXZlbnQuX21lc3NhZ2UpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgaWYgZXZlbnQudG90YWwgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBwYXJzZXByb2dyZXNzID0gbmV3X3Byb2dyZXNzKCJQYXJzaW5nIHJlY2lwZXMiLCBldmVudC50b3RhbCkuc3RhcnQoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVByb2dyZXNzKToKKyAgICAgICAgICAgICAgICBwYXJzZXByb2dyZXNzLnVwZGF0ZShldmVudC5jdXJyZW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCk6CisgICAgICAgICAgICAgICAgaWYgbm90IHBhcnNlcHJvZ3Jlc3M6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBwYXJzZXByb2dyZXNzLmZpbmlzaCgpCisgICAgICAgICAgICAgICAgcHJpbnQoKCJQYXJzaW5nIG9mICVkIC5iYiBmaWxlcyBjb21wbGV0ZSAoJWQgY2FjaGVkLCAlZCBwYXJzZWQpLiAlZCB0YXJnZXRzLCAlZCBza2lwcGVkLCAlZCBtYXNrZWQsICVkIGVycm9ycy4iCisgICAgICAgICAgICAgICAgICAgICUgKCBldmVudC50b3RhbCwgZXZlbnQuY2FjaGVkLCBldmVudC5wYXJzZWQsIGV2ZW50LnZpcnR1YWxzLCBldmVudC5za2lwcGVkLCBldmVudC5tYXNrZWQsIGV2ZW50LmVycm9ycykpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZFN0YXJ0ZWQpOgorICAgICAgICAgICAgICAgIGNhY2hlcHJvZ3Jlc3MgPSBuZXdfcHJvZ3Jlc3MoIkxvYWRpbmcgY2FjaGUiLCBldmVudC50b3RhbCkuc3RhcnQoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRQcm9ncmVzcyk6CisgICAgICAgICAgICAgICAgY2FjaGVwcm9ncmVzcy51cGRhdGUoZXZlbnQuY3VycmVudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkQ29tcGxldGVkKToKKyAgICAgICAgICAgICAgICBjYWNoZXByb2dyZXNzLmZpbmlzaCgpCisgICAgICAgICAgICAgICAgcHJpbnQoIkxvYWRlZCAlZCBlbnRyaWVzIGZyb20gZGVwZW5kZW5jeSBjYWNoZS4iICUgZXZlbnQubnVtX2VudHJpZXMpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkKToKKyAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBldmVudC5leGl0Y29kZQorICAgICAgICAgICAgICAgIGlmIGV2ZW50LmVycm9yOgorICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgKyAxCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ29tbWFuZCBleGVjdXRpb24gZmFpbGVkOiAlcyIsIGV2ZW50LmVycm9yKQorICAgICAgICAgICAgICAgIG1haW4uc2h1dGRvd24gPSAyCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZEV4aXQpOgorICAgICAgICAgICAgICAgIGlmIG5vdCByZXR1cm5fdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IGV2ZW50LmV4aXRjb2RlCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQsIGJiLmNvb2tlci5Db29rZXJFeGl0KSk6CisgICAgICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IDIKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTXVsdGlwbGVQcm92aWRlcnMpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJtdWx0aXBsZSBwcm92aWRlcnMgYXJlIGF2YWlsYWJsZSBmb3IgJXMlcyAoJXMpIiwgZXZlbnQuX2lzX3J1bnRpbWUgYW5kICJydW50aW1lICIgb3IgIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuX2l0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgIi5qb2luKGV2ZW50Ll9jYW5kaWRhdGVzKSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiY29uc2lkZXIgZGVmaW5pbmcgYSBQUkVGRVJSRURfUFJPVklERVIgZW50cnkgdG8gbWF0Y2ggJXMiLCBldmVudC5faXRlbSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTm9Qcm92aWRlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gMQorICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyArIDEKKyAgICAgICAgICAgICAgICBpZiBldmVudC5fcnVudGltZToKKyAgICAgICAgICAgICAgICAgICAgciA9ICJSIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHIgPSAiIgorCisgICAgICAgICAgICAgICAgZXh0cmEgPSAnJworICAgICAgICAgICAgICAgIGlmIG5vdCBldmVudC5fcmVhc29uczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZXZlbnQuX2Nsb3NlX21hdGNoZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9ICIuIENsb3NlIG1hdGNoZXM6XG4gICVzIiAlICdcbiAgJy5qb2luKGV2ZW50Ll9jbG9zZV9tYXRjaGVzKQorCisgICAgICAgICAgICAgICAgaWYgZXZlbnQuX2RlcGVuZGVlczoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJOb3RoaW5nICVzUFJPVklERVMgJyVzJyAoYnV0ICVzICVzREVQRU5EUyBvbiBvciBvdGhlcndpc2UgcmVxdWlyZXMgaXQpJXMiLCByLCBldmVudC5faXRlbSwgIiwgIi5qb2luKGV2ZW50Ll9kZXBlbmRlZXMpLCByLCBleHRyYSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnJXMiLCByLCBldmVudC5faXRlbSwgZXh0cmEpCisgICAgICAgICAgICAgICAgaWYgZXZlbnQuX3JlYXNvbnM6CisgICAgICAgICAgICAgICAgICAgIGZvciByZWFzb24gaW4gZXZlbnQuX3JlYXNvbnM6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIiVzIiwgcmVhc29uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlJ1bm5pbmcgc2V0c2NlbmUgdGFzayAlZCBvZiAlZCAoJXMpIiAlIChldmVudC5zdGF0cy5jb21wbGV0ZWQgKyBldmVudC5zdGF0cy5hY3RpdmUgKyBldmVudC5zdGF0cy5mYWlsZWQgKyAxLCBldmVudC5zdGF0cy50b3RhbCwgZXZlbnQudGFza3N0cmluZykpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgaWYgZXZlbnQubm9leGVjOgorICAgICAgICAgICAgICAgICAgICB0YXNrdHlwZSA9ICdub2V4ZWMgdGFzaycKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0YXNrdHlwZSA9ICd0YXNrJworICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJSdW5uaW5nICVzICVzIG9mICVzIChJRDogJXMsICVzKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RhdHMuY29tcGxldGVkICsgZXZlbnQuc3RhdHMuYWN0aXZlICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RhdHMuZmFpbGVkICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdGF0cy50b3RhbCwgZXZlbnQudGFza2lkLCBldmVudC50YXNrc3RyaW5nKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza0ZhaWxlZCk6CisgICAgICAgICAgICAgICAgdGFza2ZhaWx1cmVzLmFwcGVuZChldmVudC50YXNrc3RyaW5nKQorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVGFzayAlcyAoJXMpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFza2lkLCBldmVudC50YXNrc3RyaW5nLCBldmVudC5leGl0Y29kZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza0ZhaWxlZCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlNldHNjZW5lIHRhc2sgJXMgKCVzKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJyVzJyAtIHJlYWwgdGFzayB3aWxsIGJlIHJ1biBpbnN0ZWFkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFza2lkLCBldmVudC50YXNrc3RyaW5nLCBldmVudC5leGl0Y29kZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5EZXBUcmVlR2VuZXJhdGVkKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIGlnbm9yZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmV2ZW50LkJ1aWxkQmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5NZXRhZGF0YUV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlN0YW1wVXBkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LkNvbmZpZ1BhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5SZWNpcGVQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIucnVucXVldWUucnVuUXVldWVFdmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5PcGVyYXRpb25TdGFydGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk9wZXJhdGlvbkNvbXBsZXRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5PcGVyYXRpb25Qcm9ncmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5EaXNrRnVsbCkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5rbm93biBldmVudDogJXMiLCBldmVudCkKKworICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBpb2Vycm9yOgorICAgICAgICAgICAgdGVybWZpbHRlci5jbGVhckZvb3RlcigpCisgICAgICAgICAgICAjIGlnbm9yZSBpbnRlcnJ1cHRlZCBpbworICAgICAgICAgICAgaWYgaW9lcnJvci5hcmdzWzBdID09IDQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoc3RyKGlvZXJyb3IpKQorICAgICAgICAgICAgaWYgbm90IHBhcmFtcy5vYnNlcnZlX29ubHk6CisgICAgICAgICAgICAgICAgXywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbInN0YXRlRm9yY2VTaHV0ZG93biJdKQorICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IDIKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgdGVybWZpbHRlci5jbGVhckZvb3RlcigpCisgICAgICAgICAgICBpZiBwYXJhbXMub2JzZXJ2ZV9vbmx5OgorICAgICAgICAgICAgICAgIHByaW50KCJcbktleWJvYXJkIEludGVycnVwdCwgZXhpdGluZyBvYnNlcnZlci4uLiIpCisgICAgICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IDIKKyAgICAgICAgICAgIGlmIG5vdCBwYXJhbXMub2JzZXJ2ZV9vbmx5IGFuZCBtYWluLnNodXRkb3duID09IDE6CisgICAgICAgICAgICAgICAgcHJpbnQoIlxuU2Vjb25kIEtleWJvYXJkIEludGVycnVwdCwgc3RvcHBpbmcuLi5cbiIpCisgICAgICAgICAgICAgICAgXywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbInN0YXRlRm9yY2VTaHV0ZG93biJdKQorICAgICAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBjbGVhbmx5IHN0b3A6ICVzIiAlIGVycm9yKQorICAgICAgICAgICAgaWYgbm90IHBhcmFtcy5vYnNlcnZlX29ubHkgYW5kIG1haW4uc2h1dGRvd24gPT0gMDoKKyAgICAgICAgICAgICAgICBwcmludCgiXG5LZXlib2FyZCBJbnRlcnJ1cHQsIGNsb3NpbmcgZG93bi4uLlxuIikKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVTaHV0ZG93biJdKQorICAgICAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBjbGVhbmx5IHNodXRkb3duOiAlcyIgJSBlcnJvcikKKyAgICAgICAgICAgIG1haW4uc2h1dGRvd24gPSBtYWluLnNodXRkb3duICsgMQorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHN0cihlKSkKKyAgICAgICAgICAgIGlmIG5vdCBwYXJhbXMub2JzZXJ2ZV9vbmx5OgorICAgICAgICAgICAgICAgIF8sIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJzdGF0ZUZvcmNlU2h1dGRvd24iXSkKKyAgICAgICAgICAgIG1haW4uc2h1dGRvd24gPSAyCisgICAgdHJ5OgorICAgICAgICBzdW1tYXJ5ID0gIiIKKyAgICAgICAgaWYgdGFza2ZhaWx1cmVzOgorICAgICAgICAgICAgc3VtbWFyeSArPSBwbHVyYWxpc2UoIlxuU3VtbWFyeTogJXMgdGFzayBmYWlsZWQ6IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcblN1bW1hcnk6ICVzIHRhc2tzIGZhaWxlZDoiLCBsZW4odGFza2ZhaWx1cmVzKSkKKyAgICAgICAgICAgIGZvciBmYWlsdXJlIGluIHRhc2tmYWlsdXJlczoKKyAgICAgICAgICAgICAgICBzdW1tYXJ5ICs9ICJcbiAgJXMiICUgZmFpbHVyZQorICAgICAgICBpZiB3YXJuaW5nczoKKyAgICAgICAgICAgIHN1bW1hcnkgKz0gcGx1cmFsaXNlKCJcblN1bW1hcnk6IFRoZXJlIHdhcyAlcyBXQVJOSU5HIG1lc3NhZ2Ugc2hvd24uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcblN1bW1hcnk6IFRoZXJlIHdlcmUgJXMgV0FSTklORyBtZXNzYWdlcyBzaG93bi4iLCB3YXJuaW5ncykKKyAgICAgICAgaWYgcmV0dXJuX3ZhbHVlIGFuZCBlcnJvcnM6CisgICAgICAgICAgICBzdW1tYXJ5ICs9IHBsdXJhbGlzZSgiXG5TdW1tYXJ5OiBUaGVyZSB3YXMgJXMgRVJST1IgbWVzc2FnZSBzaG93biwgcmV0dXJuaW5nIGEgbm9uLXplcm8gZXhpdCBjb2RlLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5TdW1tYXJ5OiBUaGVyZSB3ZXJlICVzIEVSUk9SIG1lc3NhZ2VzIHNob3duLCByZXR1cm5pbmcgYSBub24temVybyBleGl0IGNvZGUuIiwgZXJyb3JzKQorICAgICAgICBpZiBzdW1tYXJ5OgorICAgICAgICAgICAgcHJpbnQoc3VtbWFyeSkKKworICAgICAgICBpZiBpbnRlcnJ1cHRlZDoKKyAgICAgICAgICAgIHByaW50KCJFeGVjdXRpb24gd2FzIGludGVycnVwdGVkLCByZXR1cm5pbmcgYSBub24temVybyBleGl0IGNvZGUuIikKKyAgICAgICAgICAgIGlmIHJldHVybl92YWx1ZSA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IDEKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBpbXBvcnQgZXJybm8KKyAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FUElQRToKKyAgICAgICAgICAgIHBhc3MKKworICAgIHJldHVybiByZXR1cm5fdmFsdWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvbmN1cnNlcy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvbmN1cnNlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTg5YTc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9uY3Vyc2VzLnB5CkBAIC0wLDAgKzEsMzczIEBACisjCisjIEJpdEJha2UgQ3Vyc2VzIFVJIEltcGxlbWVudGF0aW9uCisjCisjIEltcGxlbWVudHMgYW4gbmN1cnNlcyBmcm9udGVuZCBmb3IgdGhlIEJpdEJha2UgdXRpbGl0eS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyIiIgorICAgIFdlIGhhdmUgdGhlIGZvbGxvd2luZyB3aW5kb3dzOgorCisgICAgICAgIDEuKSBNYWluIFdpbmRvdzogU2hvd3Mgd2hhdCB3ZSBhcmUgdWx0aW1hdGVseSBidWlsZGluZyBhbmQgaG93IGZhciB3ZSBhcmUuIEluY2x1ZGVzIHN0YXR1cyBiYXIKKyAgICAgICAgMi4pIFRocmVhZCBBY3Rpdml0eSBXaW5kb3c6IFNob3dzIG9uZSBzdGF0dXMgbGluZSBmb3IgZXZlcnkgY29uY3VycmVudCBiaXRiYWtlIHRocmVhZC4KKyAgICAgICAgMy4pIENvbW1hbmQgTGluZSBXaW5kb3c6IENvbnRhaW5zIGFuIGludGVyYWN0aXZlIGNvbW1hbmQgbGluZSB3aGVyZSB5b3UgY2FuIGludGVyYWN0IHcvIEJpdGJha2UuCisKKyAgICBCYXNpYyB3aW5kb3cgbGF5b3V0IGlzIGxpa2UgdGhhdDoKKworICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgICAgICB8IDxNYWluIFdpbmRvdz4gICAgICAgICAgICAgICB8IDxUaHJlYWQgQWN0aXZpdHkgV2luZG93PiAgfAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDA6IGZvbyBkb19jb21waWxlIGNvbXBsZXRlfAorICAgICAgICB8IEJ1aWxkaW5nIEd0aystMi42LjEwICAgICAgICB8IDE6IGJhciBkb19wYXRjaCBjb21wbGV0ZSAgfAorICAgICAgICB8IFN0YXR1czogNjAlICAgICAgICAgICAgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgICAgICB8PENvbW1hbmQgTGluZSBXaW5kb3c+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8Pj4+IHdoaWNoIHZpcnR1YWwva2VybmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8b3BlbnphdXJ1cy1rZXJuZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8Pj4+IF8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCisiIiIKKworCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLCBzeXMsIGl0ZXJ0b29scywgdGltZSwgc3VicHJvY2VzcworCit0cnk6CisgICAgaW1wb3J0IGN1cnNlcworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHN5cy5leGl0KCJGQVRBTDogVGhlIG5jdXJzZXMgdWkgY291bGQgbm90IGxvYWQgdGhlIHJlcXVpcmVkIGN1cnNlcyBweXRob24gbW9kdWxlLiIpCisKK2ltcG9ydCBiYgoraW1wb3J0IHhtbHJwY2xpYgorZnJvbSBiYiBpbXBvcnQgdWkKK2Zyb20gYmIudWkgaW1wb3J0IHVpaGVscGVyCisKK3BhcnNlc3BpbiA9IGl0ZXJ0b29scy5jeWNsZSggcid8Ly1cXCcgKQorCitYID0gMAorWSA9IDEKK1dJRFRIID0gMgorSEVJR0hUID0gMworCitNQVhTVEFUVVNMRU5HVEggPSAzMgorCitjbGFzcyBOQ3Vyc2VzVUk6CisgICAgIiIiCisgICAgTkN1cnNlcyBVSSBDbGFzcworICAgICIiIgorICAgIGNsYXNzIFdpbmRvdzoKKyAgICAgICAgIiIiQmFzZSBXaW5kb3cgQ2xhc3MiIiIKKyAgICAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmZz1jdXJzZXMuQ09MT1JfQkxBQ0ssIGJnPWN1cnNlcy5DT0xPUl9XSElURSApOgorICAgICAgICAgICAgc2VsZi53aW4gPSBjdXJzZXMubmV3d2luKCBoZWlnaHQsIHdpZHRoLCB5LCB4ICkKKyAgICAgICAgICAgIHNlbGYuZGltZW5zaW9ucyA9ICggeCwgeSwgd2lkdGgsIGhlaWdodCApCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGlmIGN1cnNlcy5oYXNfY29sb3JzKCk6CisgICAgICAgICAgICAgICAgY29sb3IgPSAxCisgICAgICAgICAgICAgICAgY3Vyc2VzLmluaXRfcGFpciggY29sb3IsIGZnLCBiZyApCisgICAgICAgICAgICAgICAgc2VsZi53aW4uYmtnZHNldCggb3JkKCcgJyksIGN1cnNlcy5jb2xvcl9wYWlyKGNvbG9yKSApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYud2luLmJrZ2RzZXQoIG9yZCgnICcpLCBjdXJzZXMuQV9CT0xEICkKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgc2VsZi5lcmFzZSgpCisgICAgICAgICAgICBzZWxmLnNldFNjcm9sbGluZygpCisgICAgICAgICAgICBzZWxmLndpbi5ub3V0cmVmcmVzaCgpCisKKyAgICAgICAgZGVmIGVyYXNlKCBzZWxmICk6CisgICAgICAgICAgICBzZWxmLndpbi5lcmFzZSgpCisKKyAgICAgICAgZGVmIHNldFNjcm9sbGluZyggc2VsZiwgYiA9IFRydWUgKToKKyAgICAgICAgICAgIHNlbGYud2luLnNjcm9sbG9rKCBiICkKKyAgICAgICAgICAgIHNlbGYud2luLmlkbG9rKCBiICkKKworICAgICAgICBkZWYgc2V0Qm94ZWQoIHNlbGYgKToKKyAgICAgICAgICAgIHNlbGYuYm94ZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndpbi5ib3goKQorICAgICAgICAgICAgc2VsZi53aW4ubm91dHJlZnJlc2goKQorCisgICAgICAgIGRlZiBzZXRUZXh0KCBzZWxmLCB4LCB5LCB0ZXh0LCAqYXJncyApOgorICAgICAgICAgICAgc2VsZi53aW4uYWRkc3RyKCB5LCB4LCB0ZXh0LCAqYXJncyApCisgICAgICAgICAgICBzZWxmLndpbi5ub3V0cmVmcmVzaCgpCisKKyAgICAgICAgZGVmIGFwcGVuZFRleHQoIHNlbGYsIHRleHQsICphcmdzICk6CisgICAgICAgICAgICBzZWxmLndpbi5hZGRzdHIoIHRleHQsICphcmdzICkKKyAgICAgICAgICAgIHNlbGYud2luLm5vdXRyZWZyZXNoKCkKKworICAgICAgICBkZWYgZHJhd0hsaW5lKCBzZWxmLCB5ICk6CisgICAgICAgICAgICBzZWxmLndpbi5obGluZSggeSwgMCwgY3Vyc2VzLkFDU19ITElORSwgc2VsZi5kaW1lbnNpb25zW1dJRFRIXSApCisgICAgICAgICAgICBzZWxmLndpbi5ub3V0cmVmcmVzaCgpCisKKyAgICBjbGFzcyBEZWNvcmF0ZWRXaW5kb3coIFdpbmRvdyApOgorICAgICAgICAiIiJCYXNlIGNsYXNzIGZvciB3aW5kb3dzIHdpdGggYSBib3ggYW5kIGEgdGl0bGUgYmFyIiIiCisgICAgICAgIGRlZiBfX2luaXRfXyggc2VsZiwgdGl0bGUsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZnPWN1cnNlcy5DT0xPUl9CTEFDSywgYmc9Y3Vyc2VzLkNPTE9SX1dISVRFICk6CisgICAgICAgICAgICBOQ3Vyc2VzVUkuV2luZG93Ll9faW5pdF9fKCBzZWxmLCB4KzEsIHkrMywgd2lkdGgtMiwgaGVpZ2h0LTQsIGZnLCBiZyApCisgICAgICAgICAgICBzZWxmLmRlY29yYXRpb24gPSBOQ3Vyc2VzVUkuV2luZG93KCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmZywgYmcgKQorICAgICAgICAgICAgc2VsZi5kZWNvcmF0aW9uLnNldEJveGVkKCkKKyAgICAgICAgICAgIHNlbGYuZGVjb3JhdGlvbi53aW4uaGxpbmUoIDIsIDEsIGN1cnNlcy5BQ1NfSExJTkUsIHdpZHRoLTIgKQorICAgICAgICAgICAgc2VsZi5zZXRUaXRsZSggdGl0bGUgKQorCisgICAgICAgIGRlZiBzZXRUaXRsZSggc2VsZiwgdGl0bGUgKToKKyAgICAgICAgICAgIHNlbGYuZGVjb3JhdGlvbi5zZXRUZXh0KCAxLCAxLCB0aXRsZS5jZW50ZXIoIHNlbGYuZGltZW5zaW9uc1tXSURUSF0tMiApLCBjdXJzZXMuQV9CT0xEICkKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworIyAgICBjbGFzcyBUaXRsZVdpbmRvdyggV2luZG93ICk6CisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisjICAgICAgICAiIiJUaXRsZSBXaW5kb3ciIiIKKyMgICAgICAgIGRlZiBfX2luaXRfXyggc2VsZiwgeCwgeSwgd2lkdGgsIGhlaWdodCApOgorIyAgICAgICAgICAgIE5DdXJzZXNVSS5XaW5kb3cuX19pbml0X18oIHNlbGYsIHgsIHksIHdpZHRoLCBoZWlnaHQgKQorIyAgICAgICAgICAgIHZlcnNpb24gPSBiYi5fX3ZlcnNpb25fXworIyAgICAgICAgICAgIHRpdGxlID0gIkJpdEJha2UgJXMiICUgdmVyc2lvbgorIyAgICAgICAgICAgIGNyZWRpdCA9ICIoQykgMjAwMy0yMDA3IFRlYW0gQml0QmFrZSIKKyMgICAgICAgICAgICAjc2VsZi53aW4uaGxpbmUoIDIsIDEsIGN1cnNlcy5BQ1NfSExJTkUsIHdpZHRoLTIgKQorIyAgICAgICAgICAgIHNlbGYud2luLmJvcmRlcigpCisjICAgICAgICAgICAgc2VsZi5zZXRUZXh0KCAxLCAxLCB0aXRsZS5jZW50ZXIoIHNlbGYuZGltZW5zaW9uc1tXSURUSF0tMiApLCBjdXJzZXMuQV9CT0xEICkKKyMgICAgICAgICAgICBzZWxmLnNldFRleHQoIDEsIDIsIGNyZWRpdC5jZW50ZXIoIHNlbGYuZGltZW5zaW9uc1tXSURUSF0tMiApLCBjdXJzZXMuQV9CT0xEICkKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworICAgIGNsYXNzIFRocmVhZEFjdGl2aXR5V2luZG93KCBEZWNvcmF0ZWRXaW5kb3cgKToKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKyAgICAgICAgIiIiVGhyZWFkIEFjdGl2aXR5IFdpbmRvdyIiIgorICAgICAgICBkZWYgX19pbml0X18oIHNlbGYsIHgsIHksIHdpZHRoLCBoZWlnaHQgKToKKyAgICAgICAgICAgIE5DdXJzZXNVSS5EZWNvcmF0ZWRXaW5kb3cuX19pbml0X18oIHNlbGYsICJUaHJlYWQgQWN0aXZpdHkiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkKKworICAgICAgICBkZWYgc2V0U3RhdHVzKCBzZWxmLCB0aHJlYWQsIHRleHQgKToKKyAgICAgICAgICAgIGxpbmUgPSAiJTAyZDogJXMiICUgKCB0aHJlYWQsIHRleHQgKQorICAgICAgICAgICAgd2lkdGggPSBzZWxmLmRpbWVuc2lvbnNbV0lEVEhdCisgICAgICAgICAgICBpZiAoIGxlbihsaW5lKSA+IHdpZHRoICk6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOndpZHRoLTNdICsgIi4uLiIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUubGp1c3QoIHdpZHRoICkKKyAgICAgICAgICAgIHNlbGYuc2V0VGV4dCggMCwgdGhyZWFkLCBsaW5lICkKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworICAgIGNsYXNzIE1haW5XaW5kb3coIERlY29yYXRlZFdpbmRvdyApOgorICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworICAgICAgICAiIiJNYWluIFdpbmRvdyIiIgorICAgICAgICBkZWYgX19pbml0X18oIHNlbGYsIHgsIHksIHdpZHRoLCBoZWlnaHQgKToKKyAgICAgICAgICAgIHNlbGYuU3RhdHVzUG9zaXRpb24gPSB3aWR0aCAtIE1BWFNUQVRVU0xFTkdUSAorICAgICAgICAgICAgTkN1cnNlc1VJLkRlY29yYXRlZFdpbmRvdy5fX2luaXRfXyggc2VsZiwgTm9uZSwgeCwgeSwgd2lkdGgsIGhlaWdodCApCisgICAgICAgICAgICBjdXJzZXMubmwoKQorCisgICAgICAgIGRlZiBzZXRUaXRsZSggc2VsZiwgdGl0bGUgKToKKyAgICAgICAgICAgIHRpdGxlID0gIkJpdEJha2UgJXMiICUgYmIuX192ZXJzaW9uX18KKyAgICAgICAgICAgIHNlbGYuZGVjb3JhdGlvbi5zZXRUZXh0KCAyLCAxLCB0aXRsZSwgY3Vyc2VzLkFfQk9MRCApCisgICAgICAgICAgICBzZWxmLmRlY29yYXRpb24uc2V0VGV4dCggc2VsZi5TdGF0dXNQb3NpdGlvbiAtIDgsIDEsICJTdGF0dXM6IiwgY3Vyc2VzLkFfQk9MRCApCisKKyAgICAgICAgZGVmIHNldFN0YXR1cyhzZWxmLCBzdGF0dXMpOgorICAgICAgICAgICAgd2hpbGUgbGVuKHN0YXR1cykgPCBNQVhTVEFUVVNMRU5HVEg6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gc3RhdHVzICsgIiAiCisgICAgICAgICAgICBzZWxmLmRlY29yYXRpb24uc2V0VGV4dCggc2VsZi5TdGF0dXNQb3NpdGlvbiwgMSwgc3RhdHVzLCBjdXJzZXMuQV9CT0xEICkKKworCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisgICAgY2xhc3MgU2hlbGxPdXRwdXRXaW5kb3coIERlY29yYXRlZFdpbmRvdyApOgorICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworICAgICAgICAiIiJJbnRlcmFjdGl2ZSBDb21tYW5kIExpbmUgT3V0cHV0IiIiCisgICAgICAgIGRlZiBfX2luaXRfXyggc2VsZiwgeCwgeSwgd2lkdGgsIGhlaWdodCApOgorICAgICAgICAgICAgTkN1cnNlc1VJLkRlY29yYXRlZFdpbmRvdy5fX2luaXRfXyggc2VsZiwgIkNvbW1hbmQgTGluZSBXaW5kb3ciLCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworICAgIGNsYXNzIFNoZWxsSW5wdXRXaW5kb3coIFdpbmRvdyApOgorICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworICAgICAgICAiIiJJbnRlcmFjdGl2ZSBDb21tYW5kIExpbmUgSW5wdXQiIiIKKyAgICAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICk6CisgICAgICAgICAgICBOQ3Vyc2VzVUkuV2luZG93Ll9faW5pdF9fKCBzZWxmLCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkKKworIyBwdXQgdGhhdCB0byB0aGUgdG9wIGFnYWluIGZyb20gY3Vyc2VzLnRleHRwYWQgaW1wb3J0IFRleHRib3gKKyMgICAgICAgICAgICBzZWxmLnRleHRib3ggPSBUZXh0Ym94KCBzZWxmLndpbiApCisjICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQoKQorIyAgICAgICAgICAgIHQucnVuID0gc2VsZi50ZXh0Ym94LmVkaXQKKyMgICAgICAgICAgICB0LnN0YXJ0KCkKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworICAgIGRlZiBtYWluKHNlbGYsIHN0ZHNjciwgc2VydmVyLCBldmVudEhhbmRsZXIsIHBhcmFtcyk6CisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisgICAgICAgIGhlaWdodCwgd2lkdGggPSBzdGRzY3IuZ2V0bWF4eXgoKQorCisgICAgICAgICMgZm9yIG5vdyBzcGxpdCBpdCBsaWtlIHRoYXQ6CisgICAgICAgICMgTUFJTl95ICsgVEhSRUFEX3kgPSAyLzMgc2NyZWVuIGF0IHRoZSB0b3AKKyAgICAgICAgIyBNQUlOX3ggPSAyLzMgbGVmdCwgVEhSRUFEX3kgPSAxLzMgcmlnaHQKKyAgICAgICAgIyBDTElfeSA9IDEvMyBvZiBzY3JlZW4gYXQgdGhlIGJvdHRvbQorICAgICAgICAjIENMSV94ID0gZnVsbAorCisgICAgICAgIG1haW5fbGVmdCA9IDAKKyAgICAgICAgbWFpbl90b3AgPSAwCisgICAgICAgIG1haW5faGVpZ2h0ID0gKCBoZWlnaHQgLy8gMyAqIDIgKQorICAgICAgICBtYWluX3dpZHRoID0gKCB3aWR0aCAvLyAzICkgKiAyCisgICAgICAgIGNsb19sZWZ0ID0gbWFpbl9sZWZ0CisgICAgICAgIGNsb190b3AgPSBtYWluX3RvcCArIG1haW5faGVpZ2h0CisgICAgICAgIGNsb19oZWlnaHQgPSBoZWlnaHQgLSBtYWluX2hlaWdodCAtIG1haW5fdG9wIC0gMQorICAgICAgICBjbG9fd2lkdGggPSB3aWR0aAorICAgICAgICBjbGlfbGVmdCA9IG1haW5fbGVmdAorICAgICAgICBjbGlfdG9wID0gY2xvX3RvcCArIGNsb19oZWlnaHQKKyAgICAgICAgY2xpX2hlaWdodCA9IDEKKyAgICAgICAgY2xpX3dpZHRoID0gd2lkdGgKKyAgICAgICAgdGhyZWFkX2xlZnQgPSBtYWluX2xlZnQgKyBtYWluX3dpZHRoCisgICAgICAgIHRocmVhZF90b3AgPSBtYWluX3RvcAorICAgICAgICB0aHJlYWRfaGVpZ2h0ID0gbWFpbl9oZWlnaHQKKyAgICAgICAgdGhyZWFkX3dpZHRoID0gd2lkdGggLSBtYWluX3dpZHRoCisKKyAgICAgICAgI3R3ID0gc2VsZi5UaXRsZVdpbmRvdyggMCwgMCwgd2lkdGgsIG1haW5fdG9wICkKKyAgICAgICAgbXcgPSBzZWxmLk1haW5XaW5kb3coIG1haW5fbGVmdCwgbWFpbl90b3AsIG1haW5fd2lkdGgsIG1haW5faGVpZ2h0ICkKKyAgICAgICAgdGF3ID0gc2VsZi5UaHJlYWRBY3Rpdml0eVdpbmRvdyggdGhyZWFkX2xlZnQsIHRocmVhZF90b3AsIHRocmVhZF93aWR0aCwgdGhyZWFkX2hlaWdodCApCisgICAgICAgIGNsbyA9IHNlbGYuU2hlbGxPdXRwdXRXaW5kb3coIGNsb19sZWZ0LCBjbG9fdG9wLCBjbG9fd2lkdGgsIGNsb19oZWlnaHQgKQorICAgICAgICBjbGkgPSBzZWxmLlNoZWxsSW5wdXRXaW5kb3coIGNsaV9sZWZ0LCBjbGlfdG9wLCBjbGlfd2lkdGgsIGNsaV9oZWlnaHQgKQorICAgICAgICBjbGkuc2V0VGV4dCggMCwgMCwgIkJCPiIgKQorCisgICAgICAgIG13LnNldFN0YXR1cygiSWRsZSIpCisKKyAgICAgICAgaGVscGVyID0gdWloZWxwZXIuQkJVSUhlbHBlcigpCisgICAgICAgIHNodXRkb3duID0gMAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcmFtcy51cGRhdGVGcm9tU2VydmVyKHNlcnZlcikKKyAgICAgICAgICAgIGNtZGxpbmUgPSBwYXJhbXMucGFyc2VBY3Rpb25zKCkKKyAgICAgICAgICAgIGlmIG5vdCBjbWRsaW5lOgorICAgICAgICAgICAgICAgIHByaW50KCJOb3RoaW5nIHRvIGRvLiAgVXNlICdiaXRiYWtlIHdvcmxkJyB0byBidWlsZCBldmVyeXRoaW5nLCBvciBydW4gJ2JpdGJha2UgLS1oZWxwJyBmb3IgdXNhZ2UgaW5mb3JtYXRpb24uIikKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgaWYgJ21zZycgaW4gY21kbGluZSBhbmQgY21kbGluZVsnbXNnJ106CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGNtZGxpbmVbJ21zZyddKQorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICBjbWRsaW5lID0gY21kbGluZVsnYWN0aW9uJ10KKyAgICAgICAgICAgIHJldCwgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChjbWRsaW5lKQorICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgcHJpbnQoIkVycm9yIHJ1bm5pbmcgY29tbWFuZCAnJXMnOiAlcyIgJSAoY21kbGluZSwgZXJyb3IpKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxpZiByZXQgIT0gVHJ1ZToKKyAgICAgICAgICAgICAgICBwcmludCgiQ291bGRuJ3QgZ2V0IGRlZmF1bHQgY29tbWFuZGxpbmQhICVzIiAlIHJldCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0IHhtbHJwY2xpYi5GYXVsdCBhcyB4OgorICAgICAgICAgICAgcHJpbnQoIlhNTFJQQyBGYXVsdCBnZXR0aW5nIGNvbW1hbmRsaW5lOlxuICVzIiAlIHgpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBleGl0ZmxhZyA9IEZhbHNlCisgICAgICAgIHdoaWxlIG5vdCBleGl0ZmxhZzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBldmVudCA9IGV2ZW50SGFuZGxlci53YWl0RXZlbnQoMC4yNSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZXZlbnQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBoZWxwZXIuZXZlbnRIYW5kbGVyKGV2ZW50KQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tCYXNlKToKKyAgICAgICAgICAgICAgICAgICAgbXcuYXBwZW5kVGV4dCgiTk9URTogJXNcbiIgJSBldmVudC5fbWVzc2FnZSkKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CisgICAgICAgICAgICAgICAgICAgIG13LmFwcGVuZFRleHQobG9nZ2luZy5nZXRMZXZlbE5hbWUoZXZlbnQubGV2ZWxubykgKyAnOiAnICsgZXZlbnQuZ2V0TWVzc2FnZSgpICsgJ1xuJykKKworICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZFN0YXJ0ZWQpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX3RvdGFsID0gZXZlbnQudG90YWwKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRQcm9ncmVzcyk6CisgICAgICAgICAgICAgICAgICAgIHggPSBldmVudC5jdXJyZW50CisgICAgICAgICAgICAgICAgICAgIHkgPSBzZWxmLnBhcnNlX3RvdGFsCisgICAgICAgICAgICAgICAgICAgIG13LnNldFN0YXR1cygiTG9hZGluZyBDYWNoZTogICAlcyBbJTJkICUlXSIgJSAoIG5leHQocGFyc2VzcGluKSwgeCoxMDAveSApICkKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgICAgICBtdy5zZXRTdGF0dXMoIklkbGUiKQorICAgICAgICAgICAgICAgICAgICBtdy5hcHBlbmRUZXh0KCJMb2FkZWQgJWQgZW50cmllcyBmcm9tIGRlcGVuZGVuY3kgY2FjaGUuXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKCBldmVudC5udW1fZW50cmllcykpCisKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX3RvdGFsID0gZXZlbnQudG90YWwKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVByb2dyZXNzKToKKyAgICAgICAgICAgICAgICAgICAgeCA9IGV2ZW50LmN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgeSA9IHNlbGYucGFyc2VfdG90YWwKKyAgICAgICAgICAgICAgICAgICAgbXcuc2V0U3RhdHVzKCJQYXJzaW5nIFJlY2lwZXM6ICVzIFslMmQgJSVdIiAlICggbmV4dChwYXJzZXNwaW4pLCB4KjEwMC95ICkgKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlQ29tcGxldGVkKToKKyAgICAgICAgICAgICAgICAgICAgbXcuc2V0U3RhdHVzKCJJZGxlIikKKyAgICAgICAgICAgICAgICAgICAgbXcuYXBwZW5kVGV4dCgiUGFyc2luZyBmaW5pc2hlZC4gJWQgY2FjaGVkLCAlZCBwYXJzZWQsICVkIHNraXBwZWQsICVkIG1hc2tlZC5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoIGV2ZW50LmNhY2hlZCwgZXZlbnQucGFyc2VkLCBldmVudC5za2lwcGVkLCBldmVudC5tYXNrZWQgKSkKKworIyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrRmFpbGVkKToKKyMgICAgICAgICAgICAgICAgICAgIGlmIGV2ZW50LmxvZ2ZpbGU6CisjICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGF0YS5nZXRWYXIoIkJCSU5DTFVERUxPR1MiLCBkKToKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoImxvZyBkYXRhIGZvbGxvd3MgKCVzKSIgJSBsb2dmaWxlKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJfb2ZfbGluZXMgPSBkYXRhLmdldFZhcigiQkJJTkNMVURFTE9HU19MSU5FUyIsIGQpCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bWJlcl9vZl9saW5lczoKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbCgndGFpbCAtbiVzICVzJyAlIChudW1iZXJfb2ZfbGluZXMsIGxvZ2ZpbGUpLCBzaGVsbD1UcnVlKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4obG9nZmlsZSwgInIiKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gZi5yZWFkbGluZSgpCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbCA9PSAnJzoKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gbC5yc3RyaXAoKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICd8ICVzJyAlIGwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorIyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmVycm9yKCJzZWUgbG9nIGluICVzIiAlIGxvZ2ZpbGUpCisKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgICAgICAjIHN0b3Agc28gdGhlIHVzZXIgY2FuIHNlZSB0aGUgcmVzdWx0IG9mIHRoZSBidWlsZCwgYnV0CisgICAgICAgICAgICAgICAgICAgICMgYWxzbyBhbGxvdyB0aGVtIHRvIG5vdyBleGl0IHdpdGggYSBzaW5nbGUgXkMKKyAgICAgICAgICAgICAgICAgICAgc2h1dGRvd24gPSAyCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkKToKKyAgICAgICAgICAgICAgICAgICAgbXcuYXBwZW5kVGV4dCgiQ29tbWFuZCBleGVjdXRpb24gZmFpbGVkOiAlcyIgJSBldmVudC5lcnJvcikKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgyKQorICAgICAgICAgICAgICAgICAgICBleGl0ZmxhZyA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRFeGl0KToKKyAgICAgICAgICAgICAgICAgICAgZXhpdGZsYWcgPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29va2VyLkNvb2tlckV4aXQpOgorICAgICAgICAgICAgICAgICAgICBleGl0ZmxhZyA9IFRydWUKKworICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkxvZ0V4ZWNUVFkpOgorICAgICAgICAgICAgICAgICAgICBtdy5hcHBlbmRUZXh0KCdXQVJOOiAnICsgZXZlbnQubXNnICsgJ1xuJykKKyAgICAgICAgICAgICAgICBpZiBoZWxwZXIubmVlZFVwZGF0ZToKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZldGFza3MsIGZhaWxlZHRhc2tzID0gaGVscGVyLmdldFRhc2tzKCkKKyAgICAgICAgICAgICAgICAgICAgdGF3LmVyYXNlKCkKKyAgICAgICAgICAgICAgICAgICAgdGF3LnNldFRleHQoMCwgMCwgIiIpCisgICAgICAgICAgICAgICAgICAgIGlmIGFjdGl2ZXRhc2tzOgorICAgICAgICAgICAgICAgICAgICAgICAgdGF3LmFwcGVuZFRleHQoIkFjdGl2ZSBUYXNrczpcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGFzayBpbiBhY3RpdmV0YXNrcy5pdGVydmFsdWVzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF3LmFwcGVuZFRleHQodGFza1sidGl0bGUiXSArICdcbicpCisgICAgICAgICAgICAgICAgICAgIGlmIGZhaWxlZHRhc2tzOgorICAgICAgICAgICAgICAgICAgICAgICAgdGF3LmFwcGVuZFRleHQoIkZhaWxlZCBUYXNrczpcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGFzayBpbiBmYWlsZWR0YXNrczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXcuYXBwZW5kVGV4dCh0YXNrWyJ0aXRsZSJdICsgJ1xuJykKKworICAgICAgICAgICAgICAgIGN1cnNlcy5kb3VwZGF0ZSgpCisgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBpb2Vycm9yOgorICAgICAgICAgICAgICAgICMgaWdub3JlIGludGVycnVwdGVkIGlvCisgICAgICAgICAgICAgICAgaWYgaW9lcnJvci5hcmdzWzBdID09IDQ6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgIGlmIHNodXRkb3duID09IDI6CisgICAgICAgICAgICAgICAgICAgIG13LmFwcGVuZFRleHQoIlRoaXJkIEtleWJvYXJkIEludGVycnVwdCwgZXhpdC5cbiIpCisgICAgICAgICAgICAgICAgICAgIGV4aXRmbGFnID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIHNodXRkb3duID09IDE6CisgICAgICAgICAgICAgICAgICAgIG13LmFwcGVuZFRleHQoIlNlY29uZCBLZXlib2FyZCBJbnRlcnJ1cHQsIHN0b3BwaW5nLi4uXG4iKQorICAgICAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCisgICAgICAgICAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlVuYWJsZSB0byBjbGVhbmx5IHN0b3A6ICVzIiAlIGVycm9yKQorICAgICAgICAgICAgICAgIGlmIHNodXRkb3duID09IDA6CisgICAgICAgICAgICAgICAgICAgIG13LmFwcGVuZFRleHQoIktleWJvYXJkIEludGVycnVwdCwgY2xvc2luZyBkb3duLi4uXG4iKQorICAgICAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVTaHV0ZG93biJdKQorICAgICAgICAgICAgICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJVbmFibGUgdG8gY2xlYW5seSBzaHV0ZG93bjogJXMiICUgZXJyb3IpCisgICAgICAgICAgICAgICAgc2h1dGRvd24gPSBzaHV0ZG93biArIDEKKyAgICAgICAgICAgICAgICBwYXNzCisKK2RlZiBtYWluKHNlcnZlciwgZXZlbnRIYW5kbGVyLCBwYXJhbXMpOgorICAgIGlmIG5vdCBvcy5pc2F0dHkoc3lzLnN0ZG91dC5maWxlbm8oKSk6CisgICAgICAgIHByaW50KCJGQVRBTDogVW5hYmxlIHRvIHJ1biAnbmN1cnNlcycgVUkgd2l0aG91dCBhIFRUWS4iKQorICAgICAgICByZXR1cm4KKyAgICB1aSA9IE5DdXJzZXNVSSgpCisgICAgdHJ5OgorICAgICAgICBjdXJzZXMud3JhcHBlcih1aS5tYWluLCBzZXJ2ZXIsIGV2ZW50SGFuZGxlciwgcGFyYW1zKQorICAgIGV4Y2VwdDoKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvcHVjY2hvLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9wdWNjaG8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NlNDU5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvcHVjY2hvLnB5CkBAIC0wLDAgKzEsNDI1IEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IFJvYiBCcmFkZm9yZCA8cm9iQGxpbnV4LmludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgZ3RrLmdsYWRlCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdXJsbGliMgoraW1wb3J0IG9zCitpbXBvcnQgY29udGV4dGxpYgorCitmcm9tIGJiLnVpLmNydW1icy5idWlsZG1hbmFnZXIgaW1wb3J0IEJ1aWxkTWFuYWdlciwgQnVpbGRDb25maWd1cmF0aW9uCitmcm9tIGJiLnVpLmNydW1icy5idWlsZG1hbmFnZXIgaW1wb3J0IEJ1aWxkTWFuYWdlclRyZWVWaWV3CisKK2Zyb20gYmIudWkuY3J1bWJzLnJ1bm5pbmdidWlsZCBpbXBvcnQgUnVubmluZ0J1aWxkLCBSdW5uaW5nQnVpbGRUcmVlVmlldworCisjIFRoZSBtZXRhZGF0YSBsb2FkZXIgaXMgdXNlZCBieSB0aGUgQnVpbGRTZXR1cERpYWxvZyB0byBkb3dubG9hZCB0aGUKKyMgYXZhaWxhYmxlIG9wdGlvbnMgdG8gcG9wdWxhdGUgdGhlIGRpYWxvZworY2xhc3MgTWV0YURhdGFMb2FkZXIoZ29iamVjdC5HT2JqZWN0KToKKyAgICAiIiIgVGhpcyBjbGFzcyBwcm92aWRlcyB0aGUgbWVjaGFuaXNtIGZvciBsb2FkaW5nIHRoZSBtZXRhZGF0YSAodGhlCisgICAgZmV0Y2hpbmcgYW5kIHBhcnNpbmcpIGZyb20gYSBnaXZlbiBVUkwuIFRoZSBtZXRhZGF0YSBlbmNvbXBhc3NlcyBkZXRhaWxzCisgICAgb24gd2hhdCBtYWNoaW5lcyBhcmUgYXZhaWxhYmxlLiBUaGUgZGlzdHJpYnV0aW9uIGFuZCBpbWFnZXMgYXZhaWxhYmxlIGZvcgorICAgIHRoZSBtYWNoaW5lIGFuZCB0aGUgdGhlIHVyaXMgdG8gdXNlIGZvciBidWlsZGluZyB0aGUgZ2l2ZW4gbWFjaGluZS4iIiIKKyAgICBfX2dzaWduYWxzX18gPSB7CisgICAgICAgICdzdWNjZXNzJyA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAnZXJyb3InIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfU1RSSU5HLCkpCisgICAgICAgIH0KKworICAgICMgV2UgdXNlIHRoZXNlIGxpdHRsZSBoZWxwZXIgZnVuY3Rpb25zIHRvIGVuc3VyZSB0aGF0IHdlIHRha2UgdGhlIGdkayBsb2NrCisgICAgIyB3aGVuIGVtaXR0aW5nIHRoZSBzaWduYWwuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGFzIGlkbGVzIChzbyB0aGF0CisgICAgIyB0aGV5IGhhcHBlbiBpbiB0aGUgZ3RrIC8gbWFpbiB0aHJlYWQncyBtYWluIGxvb3AuCisgICAgZGVmIGVtaXRfZXJyb3Jfc2lnbmFsIChzZWxmLCByZW1hcmspOgorICAgICAgICBndGsuZ2RrLnRocmVhZHNfZW50ZXIoKQorICAgICAgICBzZWxmLmVtaXQgKCJlcnJvciIsIHJlbWFyaykKKyAgICAgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKworICAgIGRlZiBlbWl0X3N1Y2Nlc3Nfc2lnbmFsIChzZWxmKToKKyAgICAgICAgZ3RrLmdkay50aHJlYWRzX2VudGVyKCkKKyAgICAgICAgc2VsZi5lbWl0ICgic3VjY2VzcyIpCisgICAgICAgIGd0ay5nZGsudGhyZWFkc19sZWF2ZSgpCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgorICAgICAgICBnb2JqZWN0LkdPYmplY3QuX19pbml0X18gKHNlbGYpCisKKyAgICBjbGFzcyBMb2FkZXJUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CisgICAgICAgICIiIiBUaGlzIGNsYXNzIHByb3ZpZGVzIGFuIGFzeW5jaHJvbm91cyBsb2FkZXIgZm9yIHRoZSBtZXRhZGF0YSAoYnkKKyAgICAgICAgdXNpbmcgdGhyZWFkcyBhbmQgc2lnbmFscykuIFRoaXMgaXMgdXNlZnVsIHNpbmNlIHRoZSBtZXRhZGF0YSBtYXkgYmUKKyAgICAgICAgYXQgYSByZW1vdGUgVVJMLiIiIgorICAgICAgICBjbGFzcyBMb2FkZXJJbXBvcnRFeGNlcHRpb24gKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvYWRlciwgdXJsKToKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18gKHNlbGYpCisgICAgICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICAgICAgc2VsZi5sb2FkZXIgPSBsb2FkZXIKKworICAgICAgICBkZWYgcnVuIChzZWxmKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHt9CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLmNsb3NpbmcgKHVybGxpYjIudXJsb3BlbiAoc2VsZi51cmwpKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAjIFBhcnNlIHRoZSBtZXRhZGF0YSBmb3JtYXQuIFRoZSBmb3JtYXQgaXMuLi4uCisgICAgICAgICAgICAgICAgICAgICMgPG1hY2hpbmU+OzxkZWZhdWx0IGRpc3Rybz58PGRpc3Rybz4uLi47PGRlZmF1bHQgaW1hZ2U+fDxpbWFnZT4uLi47PHR5cGUjI3VybD58Li4uCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzID0gbGluZS5zcGxpdCgiOyIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuIChjb21wb25lbnRzKSA8IDQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIE1ldGFEYXRhTG9hZGVyLkxvYWRlclRocmVhZC5Mb2FkZXJJbXBvcnRFeGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgPSBjb21wb25lbnRzWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cm9zID0gY29tcG9uZW50c1sxXS5zcGxpdCgifCIpCisgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMgPSBjb21wb25lbnRzWzJdLnNwbGl0KCJ8IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHVybHMgPSBjb21wb25lbnRzWzNdLnNwbGl0KCJ8IikKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W21hY2hpbmVdID0gKGRpc3Ryb3MsIGltYWdlcywgdXJscykKKworICAgICAgICAgICAgICAgICMgQ3JlYXRlIGFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyAqcG90ZW50aWFsKgorICAgICAgICAgICAgICAgICMgY29uZmlndXJhdGlvbi4gSXQgY2FuIGJlY29tZSBjb25jcmV0ZSBpZiB0aGUgbWFjaGluZSwgZGlzdHJvCisgICAgICAgICAgICAgICAgIyBhbmQgaW1hZ2UgYXJlIGFsbCBjaG9zZW4gaW4gdGhlIFVJCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9IEJ1aWxkQ29uZmlndXJhdGlvbigpCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5tZXRhZGF0YV91cmwgPSBzZWxmLnVybAorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24ubWFjaGluZV9vcHRpb25zID0gcmVzdWx0CisgICAgICAgICAgICAgICAgc2VsZi5sb2FkZXIuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24KKworICAgICAgICAgICAgICAgICMgRW1pdCB0aGF0IHdlJ3ZlIGFjdHVhbGx5IGdvdCBhIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBnb2JqZWN0LmlkbGVfYWRkIChNZXRhRGF0YUxvYWRlci5lbWl0X3N1Y2Nlc3Nfc2lnbmFsLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRlcikKKworICAgICAgICAgICAgZXhjZXB0IE1ldGFEYXRhTG9hZGVyLkxvYWRlclRocmVhZC5Mb2FkZXJJbXBvcnRFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBnb2JqZWN0LmlkbGVfYWRkIChNZXRhRGF0YUxvYWRlci5lbWl0X2Vycm9yX3NpZ25hbCwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICJSZXBvc2l0b3J5IG1ldGFkYXRhIGNvcnJ1cHQiKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGdvYmplY3QuaWRsZV9hZGQgKE1ldGFEYXRhTG9hZGVyLmVtaXRfZXJyb3Jfc2lnbmFsLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBkb3dubG9hZCByZXBvc2l0b3J5IG1ldGFkYXRhIikKKyAgICAgICAgICAgICAgICBwcmludChlKQorCisgICAgZGVmIHRyeV9mZXRjaF9mcm9tX3VybCAoc2VsZiwgdXJsKToKKyAgICAgICAgIyBUcnkgYW5kIGRvd25sb2FkIHRoZSBtZXRhZGF0YS4gRmlyaW5nIGEgc2lnbmFsIGlmIHN1Y2Nlc3NmdWwKKyAgICAgICAgdGhyZWFkID0gTWV0YURhdGFMb2FkZXIuTG9hZGVyVGhyZWFkKHNlbGYsIHVybCkKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKworY2xhc3MgQnVpbGRTZXR1cERpYWxvZyAoZ3RrLkRpYWxvZyk6CisgICAgUkVTUE9OU0VfQlVJTEQgPSAxCisKKyAgICAjIEEgbGl0dGxlIGhlbHBlciBtZXRob2QgdGhhdCBqdXN0IHNldHMgdGhlIHN0YXRlcyBvbiB0aGUgd2lkZ2V0cyBiYXNlZCBvbgorICAgICMgd2hldGhlciB3ZSd2ZSBnb3QgZ29vZCBtZXRhZGF0YSBvciBub3QuCisgICAgZGVmIHNldF9jb25maWd1cmFibGUgKHNlbGYsIGNvbmZpZ3VyYWJsZSk6CisgICAgICAgIGlmIChzZWxmLmNvbmZpZ3VyYWJsZSA9PSBjb25maWd1cmFibGUpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5jb25maWd1cmFibGUgPSBjb25maWd1cmFibGUKKyAgICAgICAgZm9yIHdpZGdldCBpbiBzZWxmLmNvbmZfd2lkZ2V0czoKKyAgICAgICAgICAgIHdpZGdldC5zZXRfc2Vuc2l0aXZlIChjb25maWd1cmFibGUpCisKKyAgICAgICAgaWYgbm90IGNvbmZpZ3VyYWJsZToKKyAgICAgICAgICAgIHNlbGYubWFjaGluZV9jb21iby5zZXRfYWN0aXZlICgtMSkKKyAgICAgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uX2NvbWJvLnNldF9hY3RpdmUgKC0xKQorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb21iby5zZXRfYWN0aXZlICgtMSkKKworICAgICMgR1RLIHdpZGdldCBjYWxsYmFja3MKKyAgICBkZWYgcmVmcmVzaF9idXR0b25fY2xpY2tlZCAoc2VsZiwgYnV0dG9uKToKKyAgICAgICAgIyBSZWZyZXNoIGJ1dHRvbiBjbGlja2VkLgorCisgICAgICAgIHVybCA9IHNlbGYubG9jYXRpb25fZW50cnkuZ2V0X2NoYXJzICgwLCAtMSkKKyAgICAgICAgc2VsZi5sb2FkZXIudHJ5X2ZldGNoX2Zyb21fdXJsKHVybCkKKworICAgIGRlZiByZXBvc2l0b3J5X2VudHJ5X2VkaXRhYmxlX2NoYW5nZWQgKHNlbGYsIGVudHJ5KToKKyAgICAgICAgaWYgKGxlbiAoZW50cnkuZ2V0X2NoYXJzICgwLCAtMSkpID4gMCk6CisgICAgICAgICAgICBzZWxmLnJlZnJlc2hfYnV0dG9uLnNldF9zZW5zaXRpdmUgKFRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnJlZnJlc2hfYnV0dG9uLnNldF9zZW5zaXRpdmUgKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5jbGVhcl9zdGF0dXNfbWVzc2FnZSgpCisKKyAgICAgICAgIyBJZiB3ZSB3ZXJlIHByZXZpb3VzbHkgY29uZmlndXJhYmxlIHdlIGFyZSBubyBsb25nZXIgc2luY2UgdGhlCisgICAgICAgICMgbG9jYXRpb24gZW50cnkgaGFzIGJlZW4gY2hhbmdlZAorICAgICAgICBzZWxmLnNldF9jb25maWd1cmFibGUgKEZhbHNlKQorCisgICAgZGVmIG1hY2hpbmVfY29tYm9fY2hhbmdlZCAoc2VsZiwgY29tYm9ib3gpOgorICAgICAgICBhY3RpdmVfaXRlciA9IGNvbWJvYm94LmdldF9hY3RpdmVfaXRlcigpCisKKyAgICAgICAgaWYgbm90IGFjdGl2ZV9pdGVyOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbW9kZWwgPSBjb21ib2JveC5nZXRfbW9kZWwoKQorCisgICAgICAgIGlmIG1vZGVsOgorICAgICAgICAgICAgY2hvc2VuX21hY2hpbmUgPSBtb2RlbC5nZXQgKGFjdGl2ZV9pdGVyLCAwKVswXQorCisgICAgICAgIChkaXN0cm9zX21vZGVsLCBpbWFnZXNfbW9kZWwpID0gXAorICAgICAgICAgICAgc2VsZi5sb2FkZXIuY29uZmlndXJhdGlvbi5nZXRfZGlzdHJvX2FuZF9pbWFnZXNfbW9kZWxzIChjaG9zZW5fbWFjaGluZSkKKworICAgICAgICBzZWxmLmRpc3RyaWJ1dGlvbl9jb21iby5zZXRfbW9kZWwgKGRpc3Ryb3NfbW9kZWwpCisgICAgICAgIHNlbGYuaW1hZ2VfY29tYm8uc2V0X21vZGVsIChpbWFnZXNfbW9kZWwpCisKKyAgICAjIENhbGxiYWNrcyBmcm9tIHRoZSBsb2FkZXIKKyAgICBkZWYgbG9hZGVyX3N1Y2Nlc3NfY2IgKHNlbGYsIGxvYWRlcik6CisgICAgICAgIHNlbGYuc3RhdHVzX2ltYWdlLnNldF9mcm9tX2ljb25fbmFtZSAoImluZm8iLAorICAgICAgICAgICAgZ3RrLklDT05fU0laRV9CVVRUT04pCisgICAgICAgIHNlbGYuc3RhdHVzX2ltYWdlLnNob3coKQorICAgICAgICBzZWxmLnN0YXR1c19sYWJlbC5zZXRfbGFiZWwgKCJSZXBvc2l0b3J5IG1ldGFkYXRhIHN1Y2Nlc3NmdWxseSBkb3dubG9hZGVkIikKKworICAgICAgICAjIFNldCB0aGUgbW9kZWxzIG9uIHRoZSBjb21ibyBib3hlcyBiYXNlZCBvbiB0aGUgbW9kZWxzIGdlbmVyYXRlZCBmcm9tCisgICAgICAgICMgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCB0aGUgbG9hZGVyIGhhcyBjcmVhdGVkCisKKyAgICAgICAgIyBXZSBqdXN0IG5lZWQgdG8gc2V0IHRoZSBtYWNoaW5lIGhlcmUsIHRoYXQgdGhlbiBkZXRlcm1pbmVzIHRoZQorICAgICAgICAjIGRpc3RybyBhbmQgaW1hZ2Ugb3B0aW9ucy4gQ3VubmluZyBodWg/IDotKQorCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbiA9IHNlbGYubG9hZGVyLmNvbmZpZ3VyYXRpb24KKyAgICAgICAgbW9kZWwgPSBzZWxmLmNvbmZpZ3VyYXRpb24uZ2V0X21hY2hpbmVzX21vZGVsICgpCisgICAgICAgIHNlbGYubWFjaGluZV9jb21iby5zZXRfbW9kZWwgKG1vZGVsKQorCisgICAgICAgIHNlbGYuc2V0X2NvbmZpZ3VyYWJsZSAoVHJ1ZSkKKworICAgIGRlZiBsb2FkZXJfZXJyb3JfY2IgKHNlbGYsIGxvYWRlciwgbWVzc2FnZSk6CisgICAgICAgIHNlbGYuc3RhdHVzX2ltYWdlLnNldF9mcm9tX2ljb25fbmFtZSAoImVycm9yIiwKKyAgICAgICAgICAgIGd0ay5JQ09OX1NJWkVfQlVUVE9OKQorICAgICAgICBzZWxmLnN0YXR1c19pbWFnZS5zaG93KCkKKyAgICAgICAgc2VsZi5zdGF0dXNfbGFiZWwuc2V0X3RleHQgKCJFcnJvciBkb3dubG9hZGluZyByZXBvc2l0b3J5IG1ldGFkYXRhIikKKyAgICAgICAgZm9yIHdpZGdldCBpbiBzZWxmLmNvbmZfd2lkZ2V0czoKKyAgICAgICAgICAgIHdpZGdldC5zZXRfc2Vuc2l0aXZlIChGYWxzZSkKKworICAgIGRlZiBjbGVhcl9zdGF0dXNfbWVzc2FnZSAoc2VsZik6CisgICAgICAgIHNlbGYuc3RhdHVzX2ltYWdlLmhpZGUoKQorICAgICAgICBzZWxmLnN0YXR1c19sYWJlbC5zZXRfbGFiZWwgKAorICAgICAgICAgICAgIiIiPGk+RW50ZXIgdGhlIHJlcG9zaXRvcnkgbG9jYXRpb24gYW5kIHByZXNzIF9SZWZyZXNoPC9pPiIiIikKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZik6CisgICAgICAgIGd0ay5EaWFsb2cuX19pbml0X18gKHNlbGYpCisKKyAgICAgICAgIyBDYW5jZWwKKyAgICAgICAgc2VsZi5hZGRfYnV0dG9uIChndGsuU1RPQ0tfQ0FOQ0VMLCBndGsuUkVTUE9OU0VfQ0FOQ0VMKQorCisgICAgICAgICMgQnVpbGQKKyAgICAgICAgYnV0dG9uID0gZ3RrLkJ1dHRvbiAoIl9CdWlsZCIsIE5vbmUsIFRydWUpCisgICAgICAgIGltYWdlID0gZ3RrLkltYWdlICgpCisgICAgICAgIGltYWdlLnNldF9mcm9tX3N0b2NrIChndGsuU1RPQ0tfRVhFQ1VURSwgZ3RrLklDT05fU0laRV9CVVRUT04pCisgICAgICAgIGJ1dHRvbi5zZXRfaW1hZ2UgKGltYWdlKQorICAgICAgICBzZWxmLmFkZF9hY3Rpb25fd2lkZ2V0IChidXR0b24sIEJ1aWxkU2V0dXBEaWFsb2cuUkVTUE9OU0VfQlVJTEQpCisgICAgICAgIGJ1dHRvbi5zaG93X2FsbCAoKQorCisgICAgICAgICMgUHVsbCBpbiAqanVzdCogdGhlIHRhYmxlIGZyb20gdGhlIEdsYWRlIFhNTCBkYXRhLgorICAgICAgICBneG1sID0gZ3RrLmdsYWRlLlhNTCAob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSArICIvY3J1bWJzL3B1Y2Noby5nbGFkZSIsCisgICAgICAgICAgICByb290ID0gImJ1aWxkX3RhYmxlIikKKyAgICAgICAgdGFibGUgPSBneG1sLmdldF93aWRnZXQgKCJidWlsZF90YWJsZSIpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0ICh0YWJsZSwgVHJ1ZSwgRmFsc2UsIDApCisKKyAgICAgICAgIyBHcmFiIGFsbCB0aGUgd2lkZ2V0cyB0aGF0IHdlIG5lZWQgdG8gdHVybiBvbi9vZmYgd2hlbiB3ZSByZWZyZXNoLi4uCisgICAgICAgIHNlbGYuY29uZl93aWRnZXRzID0gW10KKyAgICAgICAgc2VsZi5jb25mX3dpZGdldHMgKz0gW2d4bWwuZ2V0X3dpZGdldCAoIm1hY2hpbmVfbGFiZWwiKV0KKyAgICAgICAgc2VsZi5jb25mX3dpZGdldHMgKz0gW2d4bWwuZ2V0X3dpZGdldCAoImRpc3RyaWJ1dGlvbl9sYWJlbCIpXQorICAgICAgICBzZWxmLmNvbmZfd2lkZ2V0cyArPSBbZ3htbC5nZXRfd2lkZ2V0ICgiaW1hZ2VfbGFiZWwiKV0KKyAgICAgICAgc2VsZi5jb25mX3dpZGdldHMgKz0gW2d4bWwuZ2V0X3dpZGdldCAoIm1hY2hpbmVfY29tYm8iKV0KKyAgICAgICAgc2VsZi5jb25mX3dpZGdldHMgKz0gW2d4bWwuZ2V0X3dpZGdldCAoImRpc3RyaWJ1dGlvbl9jb21ibyIpXQorICAgICAgICBzZWxmLmNvbmZfd2lkZ2V0cyArPSBbZ3htbC5nZXRfd2lkZ2V0ICgiaW1hZ2VfY29tYm8iKV0KKworICAgICAgICAjIEdyYWIgdGhlIHN0YXR1cyB3aWRnZXRzCisgICAgICAgIHNlbGYuc3RhdHVzX2ltYWdlID0gZ3htbC5nZXRfd2lkZ2V0ICgic3RhdHVzX2ltYWdlIikKKyAgICAgICAgc2VsZi5zdGF0dXNfbGFiZWwgPSBneG1sLmdldF93aWRnZXQgKCJzdGF0dXNfbGFiZWwiKQorCisgICAgICAgICMgR3JhYiB0aGUgcmVmcmVzaCBidXR0b24gYW5kIGNvbm5lY3QgdG8gdGhlIGNsaWNrZWQgc2lnbmFsCisgICAgICAgIHNlbGYucmVmcmVzaF9idXR0b24gPSBneG1sLmdldF93aWRnZXQgKCJyZWZyZXNoX2J1dHRvbiIpCisgICAgICAgIHNlbGYucmVmcmVzaF9idXR0b24uY29ubmVjdCAoImNsaWNrZWQiLCBzZWxmLnJlZnJlc2hfYnV0dG9uX2NsaWNrZWQpCisKKyAgICAgICAgIyBHcmFiIHRoZSBsb2NhdGlvbiBlbnRyeSBhbmQgY29ubmVjdCB0byBlZGl0YWJsZTo6Y2hhbmdlZAorICAgICAgICBzZWxmLmxvY2F0aW9uX2VudHJ5ID0gZ3htbC5nZXRfd2lkZ2V0ICgibG9jYXRpb25fZW50cnkiKQorICAgICAgICBzZWxmLmxvY2F0aW9uX2VudHJ5LmNvbm5lY3QgKCJjaGFuZ2VkIiwKKyAgICAgICAgICAgIHNlbGYucmVwb3NpdG9yeV9lbnRyeV9lZGl0YWJsZV9jaGFuZ2VkKQorCisgICAgICAgICMgR3JhYiB0aGUgbWFjaGluZSBjb21ibyBhbmQgaG9vayBvbnRvIHRoZSBjaGFuZ2VkIHNpZ25hbC4gVGhpcyB0aGVuCisgICAgICAgICMgYWxsb3dzIHVzIHRvIHBvcHVsYXRlIHRoZSBkaXN0cm8gYW5kIGltYWdlIGNvbWJvcworICAgICAgICBzZWxmLm1hY2hpbmVfY29tYm8gPSBneG1sLmdldF93aWRnZXQgKCJtYWNoaW5lX2NvbWJvIikKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLmNvbm5lY3QgKCJjaGFuZ2VkIiwgc2VsZi5tYWNoaW5lX2NvbWJvX2NoYW5nZWQpCisKKyAgICAgICAgIyBTZXR1cCB0aGUgY29tYm8KKyAgICAgICAgY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLnBhY2tfc3RhcnQoY2VsbCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLmFkZF9hdHRyaWJ1dGUoY2VsbCwgJ3RleHQnLCAwKQorCisgICAgICAgICMgR3JhYiB0aGUgZGlzdHJvIGFuZCBpbWFnZSBjb21ib3MuIFdlIG5lZWQgdGhlc2UgdG8gcG9wdWxhdGUgd2l0aAorICAgICAgICAjIG1vZGVscyBvbmNlIHRoZSBtYWNoaW5lIGlzIGNob3NlbgorICAgICAgICBzZWxmLmRpc3RyaWJ1dGlvbl9jb21ibyA9IGd4bWwuZ2V0X3dpZGdldCAoImRpc3RyaWJ1dGlvbl9jb21ibyIpCisgICAgICAgIGNlbGwgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uX2NvbWJvLnBhY2tfc3RhcnQoY2VsbCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5kaXN0cmlidXRpb25fY29tYm8uYWRkX2F0dHJpYnV0ZShjZWxsLCAndGV4dCcsIDApCisKKyAgICAgICAgc2VsZi5pbWFnZV9jb21ibyA9IGd4bWwuZ2V0X3dpZGdldCAoImltYWdlX2NvbWJvIikKKyAgICAgICAgY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKKyAgICAgICAgc2VsZi5pbWFnZV9jb21iby5wYWNrX3N0YXJ0KGNlbGwsIFRydWUpCisgICAgICAgIHNlbGYuaW1hZ2VfY29tYm8uYWRkX2F0dHJpYnV0ZShjZWxsLCAndGV4dCcsIDApCisKKyAgICAgICAgIyBQdXQgdGhlIGRlZmF1bHQgZGVzY3JpcHRpdmUgdGV4dCBpbiB0aGUgc3RhdHVzIGJveAorICAgICAgICBzZWxmLmNsZWFyX3N0YXR1c19tZXNzYWdlKCkKKworICAgICAgICAjIE1hcmsgYXMgbm9uLWNvbmZpZ3VyYWJsZSwgdGhpcyBpcyBqdXN0IGdyZXlzIG91dCB0aGUgd2lkZ2V0cyB0aGUKKyAgICAgICAgIyB1c2VyIGNhbid0IHlldCB1c2UKKyAgICAgICAgc2VsZi5jb25maWd1cmFibGUgPSBGYWxzZQorICAgICAgICBzZWxmLnNldF9jb25maWd1cmFibGUoRmFsc2UpCisKKyAgICAgICAgIyBTaG93IHRoZSB0YWJsZQorICAgICAgICB0YWJsZS5zaG93X2FsbCAoKQorCisgICAgICAgICMgVGhlIGxvYWRlciBhbmQgc29tZSBzaWduYWxzIGNvbm5lY3RlZCB0byBpdCB0byB1cGRhdGUgdGhlIHN0YXR1cworICAgICAgICAjIGFyZWEKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBNZXRhRGF0YUxvYWRlcigpCisgICAgICAgIHNlbGYubG9hZGVyLmNvbm5lY3QgKCJzdWNjZXNzIiwgc2VsZi5sb2FkZXJfc3VjY2Vzc19jYikKKyAgICAgICAgc2VsZi5sb2FkZXIuY29ubmVjdCAoImVycm9yIiwgc2VsZi5sb2FkZXJfZXJyb3JfY2IpCisKKyAgICBkZWYgdXBkYXRlX2NvbmZpZ3VyYXRpb24gKHNlbGYpOgorICAgICAgICAiIiIgQSBwb29ybHkgbmFtZWQgZnVuY3Rpb24gYnV0IGl0IHVwZGF0ZXMgdGhlIGludGVybmFsIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgZnJvbSB0aGUgd2lkZ2V0cy4gVGhpcyBjYW4gbWFrZSB0aGF0IGNvbmZpZ3VyYXRpb24gY29uY3JldGUgYW5kIGNhbgorICAgICAgICB0aHVzIGJlIHVzZWQgZm9yIGJ1aWxkaW5nICIiIgorICAgICAgICAjIEV4dHJhY3QgdGhlIGNob3NlbiBtYWNoaW5lIGZyb20gdGhlIGNvbWJvCisgICAgICAgIG1vZGVsID0gc2VsZi5tYWNoaW5lX2NvbWJvLmdldF9tb2RlbCgpCisgICAgICAgIGFjdGl2ZV9pdGVyID0gc2VsZi5tYWNoaW5lX2NvbWJvLmdldF9hY3RpdmVfaXRlcigpCisgICAgICAgIGlmIChhY3RpdmVfaXRlcik6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24ubWFjaGluZSA9IG1vZGVsLmdldChhY3RpdmVfaXRlciwgMClbMF0KKworICAgICAgICAjIEV4dHJhY3QgdGhlIGNob3NlbiBkaXN0cm8gZnJvbSB0aGUgY29tYm8KKyAgICAgICAgbW9kZWwgPSBzZWxmLmRpc3RyaWJ1dGlvbl9jb21iby5nZXRfbW9kZWwoKQorICAgICAgICBhY3RpdmVfaXRlciA9IHNlbGYuZGlzdHJpYnV0aW9uX2NvbWJvLmdldF9hY3RpdmVfaXRlcigpCisgICAgICAgIGlmIChhY3RpdmVfaXRlcik6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uZGlzdHJvID0gbW9kZWwuZ2V0KGFjdGl2ZV9pdGVyLCAwKVswXQorCisgICAgICAgICMgRXh0cmFjdCB0aGUgY2hvc2VuIGltYWdlIGZyb20gdGhlIGNvbWJvCisgICAgICAgIG1vZGVsID0gc2VsZi5pbWFnZV9jb21iby5nZXRfbW9kZWwoKQorICAgICAgICBhY3RpdmVfaXRlciA9IHNlbGYuaW1hZ2VfY29tYm8uZ2V0X2FjdGl2ZV9pdGVyKCkKKyAgICAgICAgaWYgKGFjdGl2ZV9pdGVyKToKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZSA9IG1vZGVsLmdldChhY3RpdmVfaXRlciwgMClbMF0KKworIyBUaGlzIGZ1bmN0aW9uIG9wZXJhdGVzIHRvIHB1bGwgZXZlbnRzIG91dCBmcm9tIHRoZSBldmVudCBxdWV1ZSBhbmQgdGhlbiBwdXNoCisjIHRoZW0gaW50byB0aGUgUnVubmluZ0J1aWxkICh3aGljaCB0aGVuIGRyaXZlcyB0aGUgUnVubmluZ0J1aWxkIHdoaWNoIHRoZW4KKyMgcHVzaGVzIHRocm91Z2ggYW5kIHVwZGF0ZXMgdGhlIHByb2dyZXNzIHRyZWUgdmlldy4pCisjCisjIFRPRE86IFNob3VsZCBiZSBhIG1ldGhvZCBvbiB0aGUgUnVubmluZ0J1aWxkIGNsYXNzCitkZWYgZXZlbnRfaGFuZGxlX3RpbWVvdXQgKGV2ZW50SGFuZGxlciwgYnVpbGQpOgorICAgICMgQ29uc3VtZSBhcyBtYW55IG1lc3NhZ2VzIGFzIHdlIGNhbiAuLi4KKyAgICBldmVudCA9IGV2ZW50SGFuZGxlci5nZXRFdmVudCgpCisgICAgd2hpbGUgZXZlbnQ6CisgICAgICAgIGJ1aWxkLmhhbmRsZV9ldmVudCAoZXZlbnQpCisgICAgICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLmdldEV2ZW50KCkKKyAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBNYWluV2luZG93IChndGsuV2luZG93KToKKworICAgICMgQ2FsbGJhY2sgdGhhdCBnZXRzIGZpcmVkIHdoZW4gdGhlIHVzZXIgaGl0cyBhIGJ1dHRvbiBpbiB0aGUKKyAgICAjIEJ1aWxkU2V0dXBEaWFsb2cuCisgICAgZGVmIGJ1aWxkX2RpYWxvZ19ib3hfcmVzcG9uc2VfY2IgKHNlbGYsIGRpYWxvZywgcmVzcG9uc2VfaWQpOgorICAgICAgICBjb25mID0gTm9uZQorICAgICAgICBpZiAocmVzcG9uc2VfaWQgPT0gQnVpbGRTZXR1cERpYWxvZy5SRVNQT05TRV9CVUlMRCk6CisgICAgICAgICAgICBkaWFsb2cudXBkYXRlX2NvbmZpZ3VyYXRpb24oKQorICAgICAgICAgICAgcHJpbnQoZGlhbG9nLmNvbmZpZ3VyYXRpb24ubWFjaGluZSwgZGlhbG9nLmNvbmZpZ3VyYXRpb24uZGlzdHJvLCBcCisgICAgICAgICAgICAgICAgZGlhbG9nLmNvbmZpZ3VyYXRpb24uaW1hZ2UpCisgICAgICAgICAgICBjb25mID0gZGlhbG9nLmNvbmZpZ3VyYXRpb24KKworICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKKyAgICAgICAgaWYgY29uZjoKKyAgICAgICAgICAgIHNlbGYubWFuYWdlci5kb19idWlsZCAoY29uZikKKworICAgIGRlZiBidWlsZF9idXR0b25fY2xpY2tlZF9jYiAoc2VsZiwgYnV0dG9uKToKKyAgICAgICAgZGlhbG9nID0gQnVpbGRTZXR1cERpYWxvZyAoKQorCisgICAgICAgICMgRm9yIHNvbWUgdW5rbm93biByZWFzb24gRGlhbG9nLnJ1biBjYXVzZXMgbmljZSBsaXR0bGUgZGVhZGxvY2tzIC4uLiA6LSgKKyAgICAgICAgZGlhbG9nLmNvbm5lY3QgKCJyZXNwb25zZSIsIHNlbGYuYnVpbGRfZGlhbG9nX2JveF9yZXNwb25zZV9jYikKKyAgICAgICAgZGlhbG9nLnNob3coKQorCisgICAgZGVmIF9faW5pdF9fIChzZWxmKToKKyAgICAgICAgZ3RrLldpbmRvdy5fX2luaXRfXyAoc2VsZikKKworICAgICAgICAjIFB1bGwgaW4gKmp1c3QqIHRoZSBtYWluIHZib3ggZnJvbSB0aGUgR2xhZGUgWE1MIGRhdGEgYW5kIHRoZW4gcGFjaworICAgICAgICAjIHRoYXQgaW5zaWRlIHRoZSB3aW5kb3cKKyAgICAgICAgZ3htbCA9IGd0ay5nbGFkZS5YTUwgKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgKyAiL2NydW1icy9wdWNjaG8uZ2xhZGUiLAorICAgICAgICAgICAgcm9vdCA9ICJtYWluX3dpbmRvd192Ym94IikKKyAgICAgICAgdmJveCA9IGd4bWwuZ2V0X3dpZGdldCAoIm1haW5fd2luZG93X3Zib3giKQorICAgICAgICBzZWxmLmFkZCAodmJveCkKKworICAgICAgICAjIENyZWF0ZSB0aGUgdHJlZSB2aWV3cyBmb3IgdGhlIGJ1aWxkIG1hbmFnZXIgdmlldyBhbmQgdGhlIHByb2dyZXNzIHZpZXcKKyAgICAgICAgc2VsZi5idWlsZF9tYW5hZ2VyX3ZpZXcgPSBCdWlsZE1hbmFnZXJUcmVlVmlldygpCisgICAgICAgIHNlbGYucnVubmluZ19idWlsZF92aWV3ID0gUnVubmluZ0J1aWxkVHJlZVZpZXcoKQorCisgICAgICAgICMgR3JhYiB0aGUgc2Nyb2xsZWQgd2luZG93cyB0aGF0IHdlIHB1dCB0aGUgdHJlZSB2aWV3cyBpbnRvCisgICAgICAgIHNlbGYucmVzdWx0c19zY3JvbGxlZHdpbmRvdyA9IGd4bWwuZ2V0X3dpZGdldCAoInJlc3VsdHNfc2Nyb2xsZWR3aW5kb3ciKQorICAgICAgICBzZWxmLnByb2dyZXNzX3Njcm9sbGVkd2luZG93ID0gZ3htbC5nZXRfd2lkZ2V0ICgicHJvZ3Jlc3Nfc2Nyb2xsZWR3aW5kb3ciKQorCisgICAgICAgICMgUHV0IHRoZSB0cmVlIHZpZXdzIGluc2lkZSAuLi4KKyAgICAgICAgc2VsZi5yZXN1bHRzX3Njcm9sbGVkd2luZG93LmFkZCAoc2VsZi5idWlsZF9tYW5hZ2VyX3ZpZXcpCisgICAgICAgIHNlbGYucHJvZ3Jlc3Nfc2Nyb2xsZWR3aW5kb3cuYWRkIChzZWxmLnJ1bm5pbmdfYnVpbGRfdmlldykKKworICAgICAgICAjIEhvb2sgdXAgdGhlIGJ1aWxkIGJ1dHRvbi4uLgorICAgICAgICBzZWxmLmJ1aWxkX2J1dHRvbiA9IGd4bWwuZ2V0X3dpZGdldCAoIm1haW5fdG9vbGJ1dHRvbl9idWlsZCIpCisgICAgICAgIHNlbGYuYnVpbGRfYnV0dG9uLmNvbm5lY3QgKCJjbGlja2VkIiwgc2VsZi5idWlsZF9idXR0b25fY2xpY2tlZF9jYikKKworIyBJJ20gbm90IHZlcnkgaGFwcHkgYWJvdXQgdGhlIGN1cnJlbnQgb3duZXJzaGlwIG9mIHRoZSBSdW5uaW5nQnVpbGQuIEkgaGF2ZQorIyBteSBzdXNwaWNpb25zIHRoYXQgdGhpcyBvYmplY3Qgc2hvdWxkIGJlIGhlbGQgYnkgdGhlIEJ1aWxkTWFuYWdlciBzaW5jZSB3ZQorIyBjYXJlIGFib3V0IHRoZSBzaWduYWxzIGluIHRoZSBtYW5hZ2VyCisKK2RlZiBydW5uaW5nX2J1aWxkX3N1Y2NlZWRlZF9jYiAocnVubmluZ19idWlsZCwgbWFuYWdlcik6CisgICAgIyBOb3RpZnkgdGhlIG1hbmFnZXIgdGhhdCBhIGJ1aWxkIGhhcyBzdWNjZWVkZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IGFzIHBhcnQKKyAgICAjIG9mIHRoZSAnaGFjaycgdGhhdCB3ZSB1c2UgZm9yIG1ha2luZyB0aGUgcm93IGluIHRoZSBtb2RlbCAvIHZpZXcKKyAgICAjIHJlcHJlc2VudGluZyB0aGUgb25nb2luZyBidWlsZCBjaGFuZ2UgaW50byBhIHJvdyByZXByZXNlbnRpbmcgdGhlCisgICAgIyBjb21wbGV0ZWQgYnVpbGQuIFNpbmNlIHdlIGtub3cgb25seSBvbmUgYnVpbGQgY2FuIGJlIHJ1bm5pbmcgYSB0aW1lIHRoZW4KKyAgICAjIHdlIGNhbiBoYW5kbGUgdGhpcy4KKworICAgICMgRklYTUU6IFJlZmFjdG9yIGFsbCB0aGlzIHNvIHRoYXQgdGhlIFJ1bm5pbmdCdWlsZCBpcyBvd25lZCBieSB0aGUKKyAgICAjIEJ1aWxkTWFuYWdlci4gSXQgY2FuIHRoZW4gaG9vayBvbnRvIHRoZSBzaWduYWxzIGRpcmVjdGx5IGFuZCBkcml2ZQorICAgICMgaW50ZXJlc3RpbmcgdGhpbmdzIGl0IGNhcmVzIGFib3V0LgorICAgIG1hbmFnZXIubm90aWZ5X2J1aWxkX3N1Y2NlZWRlZCAoKQorICAgIHByaW50KCJidWlsZCBzdWNjZWVkZWQiKQorCitkZWYgcnVubmluZ19idWlsZF9mYWlsZWRfY2IgKHJ1bm5pbmdfYnVpbGQsIG1hbmFnZXIpOgorICAgICMgQXMgYWJvdmUKKyAgICBwcmludCgiYnVpbGQgZmFpbGVkIikKKyAgICBtYW5hZ2VyLm5vdGlmeV9idWlsZF9mYWlsZWQgKCkKKworZGVmIG1haW4gKHNlcnZlciwgZXZlbnRIYW5kbGVyKToKKyAgICAjIEluaXRpYWxpc2UgdGhyZWFkaW5nLi4uCisgICAgZ29iamVjdC50aHJlYWRzX2luaXQoKQorICAgIGd0ay5nZGsudGhyZWFkc19pbml0KCkKKworICAgIG1haW5fd2luZG93ID0gTWFpbldpbmRvdyAoKQorICAgIG1haW5fd2luZG93LnNob3dfYWxsICgpCisKKyAgICAjIFNldCB1cCB0aGUgYnVpbGQgbWFuYWdlciBzdHVmZiBpbiBnZW5lcmFsCisgICAgYnVpbGRzX2RpciA9IG9zLnBhdGguam9pbiAob3MuZ2V0Y3dkKCksICAicmVzdWx0cyIpCisgICAgbWFuYWdlciA9IEJ1aWxkTWFuYWdlciAoc2VydmVyLCBidWlsZHNfZGlyKQorICAgIG1haW5fd2luZG93LmJ1aWxkX21hbmFnZXJfdmlldy5zZXRfbW9kZWwgKG1hbmFnZXIubW9kZWwpCisKKyAgICAjIERvIHRoZSBydW5uaW5nIGJ1aWxkIHNldHVwCisgICAgcnVubmluZ19idWlsZCA9IFJ1bm5pbmdCdWlsZCAoKQorICAgIG1haW5fd2luZG93LnJ1bm5pbmdfYnVpbGRfdmlldy5zZXRfbW9kZWwgKHJ1bm5pbmdfYnVpbGQubW9kZWwpCisgICAgcnVubmluZ19idWlsZC5jb25uZWN0ICgiYnVpbGQtc3VjY2VlZGVkIiwgcnVubmluZ19idWlsZF9zdWNjZWVkZWRfY2IsCisgICAgICAgIG1hbmFnZXIpCisgICAgcnVubmluZ19idWlsZC5jb25uZWN0ICgiYnVpbGQtZmFpbGVkIiwgcnVubmluZ19idWlsZF9mYWlsZWRfY2IsIG1hbmFnZXIpCisKKyAgICAjIFdlIG5lZWQgdG8gc2F2ZSB0aGUgbWFuYWdlciBpbnRvIHRoZSBNYWluV2luZG93IHNvIHRoYXQgdGhlIHRvb2xiYXIKKyAgICAjIGJ1dHRvbiBjYW4gdXNlIGl0LgorICAgICMgRklYTUU6IFJlZmFjdG9yID8KKyAgICBtYWluX3dpbmRvdy5tYW5hZ2VyID0gbWFuYWdlcgorCisgICAgIyBVc2UgYSB0aW1lb3V0IGZ1bmN0aW9uIGZvciBwcm9iaW5nIHRoZSBldmVudCBxdWV1ZSB0byBmaW5kIG91dCBpZiB3ZQorICAgICMgaGF2ZSBhIG1lc3NhZ2Ugd2FpdGluZyBmb3IgdXMuCisgICAgZ29iamVjdC50aW1lb3V0X2FkZCAoMjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2hhbmRsZV90aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nX2J1aWxkKQorCisgICAgZ3RrLm1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS90b2FzdGVydWkucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3RvYXN0ZXJ1aS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzdlODdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS90b2FzdGVydWkucHkKQEAgLTAsMCArMSwzNTUgQEAKKyMKKyMgQml0QmFrZSBUb2FzdGVyVUkgSW1wbGVtZW50YXRpb24KKyMgYmFzZWQgb24gKE5vKVRUWSBVSSBJbXBsZW1lbnRhdGlvbiBieSBSaWNoYXJkIFB1cmRpZQorIworIyBIYW5kbGluZyBvdXRwdXQgdG8gVFRZcyBvciBmaWxlcyAobm8gVFRZKQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMiBSaWNoYXJkIFB1cmRpZQorIyBDb3B5cmlnaHQgKEMpIDIwMTMgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgoraW1wb3J0IHN5cwordHJ5OgorICAgIGltcG9ydCBiYgorZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBleGM6CisgICAgc3lzLmV4aXQoc3RyKGV4YykpCisKK2Zyb20gYmIudWkgaW1wb3J0IHVpaGVscGVyCitmcm9tIGJiLnVpLmJ1aWxkaW5mb2hlbHBlciBpbXBvcnQgQnVpbGRJbmZvSGVscGVyCisKK2ltcG9ydCBiYi5tc2cKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKKworIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCisjIG1vZHVsZSBwcm9wZXJ0aWVzIGZvciBVSSBtb2R1bGVzIGFyZSByZWFkIGJ5IGJpdGJha2UgYW5kIHRoZSBjb250cmFjdCBzaG91bGQgbm90IGJlIGJyb2tlbgorCisKK2ZlYXR1cmVTZXQgPSBbYmIuY29va2VyLkNvb2tlckZlYXR1cmVzLkhPQl9FWFRSQV9DQUNIRVMsIGJiLmNvb2tlci5Db29rZXJGZWF0dXJlcy5TRU5EX0RFUEVORFNfVFJFRSwgYmIuY29va2VyLkNvb2tlckZlYXR1cmVzLkJBU0VEQVRBU1RPUkVfVFJBQ0tJTkcsIGJiLmNvb2tlci5Db29rZXJGZWF0dXJlcy5TRU5EX1NBTklUWUVWRU5UU10KKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIlRvYXN0ZXJMb2dnZXIiKQoraW50ZXJhY3RpdmUgPSBzeXMuc3Rkb3V0LmlzYXR0eSgpCisKKworCitkZWYgX2xvZ19zZXR0aW5nc19mcm9tX3NlcnZlcihzZXJ2ZXIpOgorICAgICMgR2V0IHZhbHVlcyBvZiB2YXJpYWJsZXMgd2hpY2ggY29udHJvbCBvdXIgb3V0cHV0CisgICAgaW5jbHVkZWxvZ3MsIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQklOQ0xVREVMT0dTIl0pCisgICAgaWYgZXJyb3I6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGdldCB0aGUgdmFsdWUgb2YgQkJJTkNMVURFTE9HUyB2YXJpYWJsZTogJXMiLCBlcnJvcikKKyAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbihlcnJvcikKKyAgICBsb2dsaW5lcywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCSU5DTFVERUxPR1NfTElORVMiXSkKKyAgICBpZiBlcnJvcjoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBCQklOQ0xVREVMT0dTX0xJTkVTIHZhcmlhYmxlOiAlcyIsIGVycm9yKQorICAgICAgICByYWlzZSBCYXNlRXhjZXB0aW9uKGVycm9yKQorICAgIGNvbnNvbGVsb2dmaWxlLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJfQ09OU09MRUxPRyJdKQorICAgIGlmIGVycm9yOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBnZXQgdGhlIHZhbHVlIG9mIEJCX0NPTlNPTEVMT0cgdmFyaWFibGU6ICVzIiwgZXJyb3IpCisgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oZXJyb3IpCisgICAgcmV0dXJuIGluY2x1ZGVsb2dzLCBsb2dsaW5lcywgY29uc29sZWxvZ2ZpbGUKKworCitkZWYgbWFpbihzZXJ2ZXIsIGV2ZW50SGFuZGxlciwgcGFyYW1zICk6CisgICAgaGVscGVyID0gdWloZWxwZXIuQkJVSUhlbHBlcigpCisKKyAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCisgICAgZm9ybWF0X3N0ciA9ICIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIKKyAgICBmb3JtYXR0ZXIgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoZm9ybWF0X3N0cikKKyAgICBiYi5tc2cuYWRkRGVmYXVsdGxvZ0ZpbHRlcihjb25zb2xlKQorICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihjb25zb2xlKQorICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisKKyAgICBfLCBfLCBjb25zb2xlbG9nZmlsZSA9IF9sb2dfc2V0dGluZ3NfZnJvbV9zZXJ2ZXIoc2VydmVyKQorCisgICAgIyB2ZXJpZnkgYW5kIHdhcm4KKyAgICBidWlsZF9oaXN0b3J5X2VuYWJsZWQgPSBUcnVlCisgICAgaW5oZXJpdGxpc3QsIF8gPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIklOSEVSSVQiXSkKKworICAgIGlmIG5vdCAiYnVpbGRoaXN0b3J5IiBpbiBpbmhlcml0bGlzdC5zcGxpdCgiICIpOgorICAgICAgICBsb2dnZXIud2FybigiYnVpbGRoaXN0b3J5IGlzIG5vdCBlbmFibGVkLiBQbGVhc2UgZW5hYmxlIElOSEVSSVQgKz0gXCJidWlsZGhpc3RvcnlcIiB0byBzZWUgaW1hZ2UgZGV0YWlscy4iKQorICAgICAgICBidWlsZF9oaXN0b3J5X2VuYWJsZWQgPSBGYWxzZQorCisgICAgaWYgbm90IHBhcmFtcy5vYnNlcnZlX29ubHk6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVG9hc3RlclVJIGNhbiBvbmx5IHdvcmsgaW4gb2JzZXJ2ZXIgbW9kZSIpCisgICAgICAgIHJldHVybiAxCisKKworICAgIG1haW4uc2h1dGRvd24gPSAwCisgICAgaW50ZXJydXB0ZWQgPSBGYWxzZQorICAgIHJldHVybl92YWx1ZSA9IDAKKyAgICBlcnJvcnMgPSAwCisgICAgd2FybmluZ3MgPSAwCisgICAgdGFza2ZhaWx1cmVzID0gW10KKyAgICBmaXJzdCA9IFRydWUKKworICAgIGJ1aWxkaW5mb2hlbHBlciA9IEJ1aWxkSW5mb0hlbHBlcihzZXJ2ZXIsIGJ1aWxkX2hpc3RvcnlfZW5hYmxlZCkKKworICAgIGlmIGJ1aWxkaW5mb2hlbHBlci5icmJlIGlzIG5vdCBOb25lIGFuZCBjb25zb2xlbG9nZmlsZToKKyAgICAgICAgIyBpZiB3ZSBhcmUgdW5kZXIgbWFuYWdlZCBtb2RlIHdlIGhhdmUgbm8gb3RoZXIgVUkgYW5kIHdlIG5lZWQgdG8gd3JpdGUgb3VyIG93biBmaWxlCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoY29uc29sZWxvZ2ZpbGUpKQorICAgICAgICBjb25sb2dmb3JtYXQgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoZm9ybWF0X3N0cikKKyAgICAgICAgY29uc29sZWxvZyA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoY29uc29sZWxvZ2ZpbGUpCisgICAgICAgIGJiLm1zZy5hZGREZWZhdWx0bG9nRmlsdGVyKGNvbnNvbGVsb2cpCisgICAgICAgIGNvbnNvbGVsb2cuc2V0Rm9ybWF0dGVyKGNvbmxvZ2Zvcm1hdCkKKyAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoY29uc29sZWxvZykKKworCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXZlbnQgPSBldmVudEhhbmRsZXIud2FpdEV2ZW50KDAuMjUpCisgICAgICAgICAgICBpZiBmaXJzdDoKKyAgICAgICAgICAgICAgICBmaXJzdCA9IEZhbHNlCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlRvYXN0ZXJVSSB3YWl0aW5nIGZvciBldmVudHMiKQorCisgICAgICAgICAgICBpZiBldmVudCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIG1haW4uc2h1dGRvd24gPiAwOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGhlbHBlci5ldmVudEhhbmRsZXIoZXZlbnQpCisKKyAgICAgICAgICAgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKKyAgICAgICAgICAgICMgdGhlIGNvZGUgd2lsbCBsb29rIGludG8gdGhlIHByb3RlY3RlZCB2YXJpYWJsZXMgb2YgdGhlIGV2ZW50OyBubyBlYXN5IHdheSBhcm91bmQgdGhpcworCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5CdWlsZFN0YXJ0ZWQpOgorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV9zdGFydGVkX2J1aWxkKGV2ZW50KQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIuYnVpbGQuVGFza1N0YXJ0ZWQsIGJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQsIGJiLmJ1aWxkLlRhc2tGYWlsZWRTaWxlbnQpKToKKyAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIudXBkYXRlX2FuZF9zdG9yZV90YXNrKGV2ZW50KQorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJMb2dmaWxlIGZvciB0YXNrICVzIiwgZXZlbnQubG9nZmlsZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrQmFzZSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oZXZlbnQuX21lc3NhZ2UpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkxvZ0V4ZWNUVFkpOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKGV2ZW50Lm1zZykKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CisgICAgICAgICAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA9PSAtMToKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQubGV2ZWxubyA9IGZvcm1hdHRlci5FUlJPUgorCisgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnN0b3JlX2xvZ19ldmVudChldmVudCkKKyAgICAgICAgICAgICAgICBpZiBldmVudC5sZXZlbG5vID49IGZvcm1hdHRlci5FUlJPUjoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICsgMQorICAgICAgICAgICAgICAgIGVsaWYgZXZlbnQubGV2ZWxubyA9PSBmb3JtYXR0ZXIuV0FSTklORzoKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MgPSB3YXJuaW5ncyArIDEKKyAgICAgICAgICAgICAgICAjIEZvciAibm9ybWFsIiBsb2dnaW5nIGNvbmRpdGlvbnMsIGRvbid0IHNob3cgbm90ZSBsb2dzIGZyb20gdGFza3MKKyAgICAgICAgICAgICAgICAjIGJ1dCBkbyBzaG93IHRoZW0gaWYgdGhlIHVzZXIgaGFzIGNoYW5nZWQgdGhlIGRlZmF1bHQgbG9nIGxldmVsIHRvCisgICAgICAgICAgICAgICAgIyBpbmNsdWRlIHZlcmJvc2UvZGVidWcgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICBpZiBldmVudC50YXNrcGlkICE9IDAgYW5kIGV2ZW50LmxldmVsbm8gPD0gZm9ybWF0dGVyLk5PVEU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBsb2dnZXIuaGFuZGxlKGV2ZW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tGYWlsZWQpOgorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci51cGRhdGVfYW5kX3N0b3JlX3Rhc2soZXZlbnQpCisgICAgICAgICAgICAgICAgbG9nZmlsZSA9IGV2ZW50LmxvZ2ZpbGUKKyAgICAgICAgICAgICAgICBpZiBsb2dmaWxlIGFuZCBvcy5wYXRoLmV4aXN0cyhsb2dmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoIkxvZ2ZpbGUgb2YgZmFpbHVyZSBzdG9yZWQgaW46ICVzIiAlIGxvZ2ZpbGUpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyB0aGVzZSBldmVudHMgYXJlIHVucHJvY2Vzc2VkIG5vdywgYnV0IG1heSBiZSB1c2VkIGluIHRoZSBmdXR1cmUgdG8gbG9nCisgICAgICAgICAgICAjIHRpbWluZyBhbmQgZXJyb3IgaW5mb3JtYXRpb25zIGZyb20gdGhlIHBhcnNpbmcgcGhhc2UgaW4gVG9hc3RlcgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmV2ZW50LlNhbml0eUNoZWNrUGFzc2VkLCBiYi5ldmVudC5TYW5pdHlDaGVjaykpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVByb2dyZXNzKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRTdGFydGVkKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkUHJvZ3Jlc3MpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5NdWx0aXBsZVByb3ZpZGVycyk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIm11bHRpcGxlIHByb3ZpZGVycyBhcmUgYXZhaWxhYmxlIGZvciAlcyVzICglcykiLCBldmVudC5faXNfcnVudGltZSBhbmQgInJ1bnRpbWUgIiBvciAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5faXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCAiLmpvaW4oZXZlbnQuX2NhbmRpZGF0ZXMpKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJjb25zaWRlciBkZWZpbmluZyBhIFBSRUZFUlJFRF9QUk9WSURFUiBlbnRyeSB0byBtYXRjaCAlcyIsIGV2ZW50Ll9pdGVtKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50Lk5vUHJvdmlkZXIpOgorICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyArIDEKKyAgICAgICAgICAgICAgICBpZiBldmVudC5fcnVudGltZToKKyAgICAgICAgICAgICAgICAgICAgciA9ICJSIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHIgPSAiIgorCisgICAgICAgICAgICAgICAgaWYgZXZlbnQuX2RlcGVuZGVlczoKKyAgICAgICAgICAgICAgICAgICAgdGV4dCA9ICJOb3RoaW5nICVzUFJPVklERVMgJyVzJyAoYnV0ICVzICVzREVQRU5EUyBvbiBvciBvdGhlcndpc2UgcmVxdWlyZXMgaXQpIiAlIChyLCBldmVudC5faXRlbSwgIiwgIi5qb2luKGV2ZW50Ll9kZXBlbmRlZXMpLCByKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRleHQgPSAiTm90aGluZyAlc1BST1ZJREVTICclcyciICUgKHIsIGV2ZW50Ll9pdGVtKQorCisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHRleHQpCisgICAgICAgICAgICAgICAgaWYgZXZlbnQuX3JlYXNvbnM6CisgICAgICAgICAgICAgICAgICAgIGZvciByZWFzb24gaW4gZXZlbnQuX3JlYXNvbnM6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIiVzIiwgcmVhc29uKQorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSByZWFzb24KKyAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfbG9nX2Vycm9yKHRleHQpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ29uZmlnUGFyc2VkKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUmVjaXBlUGFyc2VkKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIGVuZCBvZiBzYXZlZCBldmVudHMKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrU3RhcnRlZCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrU3RhcnRlZCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrU2tpcHBlZCkpOgorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV9zdGFydGVkX3Rhc2soZXZlbnQpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrQ29tcGxldGVkKToKKyAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIudXBkYXRlX2FuZF9zdG9yZV90YXNrKGV2ZW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza0ZhaWxlZCk6CisgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnVwZGF0ZV9hbmRfc3RvcmVfdGFzayhldmVudCkKKyAgICAgICAgICAgICAgICB0YXNrZmFpbHVyZXMuYXBwZW5kKGV2ZW50LnRhc2tzdHJpbmcpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJUYXNrICVzICglcykgZmFpbGVkIHdpdGggZXhpdCBjb2RlICclcyciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC50YXNraWQsIGV2ZW50LnRhc2tzdHJpbmcsIGV2ZW50LmV4aXRjb2RlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza0NvbXBsZXRlZCwgYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tGYWlsZWQpKToKKyAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIudXBkYXRlX2FuZF9zdG9yZV90YXNrKGV2ZW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmV2ZW50LlRyZWVEYXRhUHJlcGFyYXRpb25TdGFydGVkLCBiYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uQ29tcGxldGVkKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkLCBiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQpKToKKworICAgICAgICAgICAgICAgIGVycm9yY29kZSA9IDAKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQpOgorICAgICAgICAgICAgICAgICAgICBlcnJvcnMgKz0gMQorICAgICAgICAgICAgICAgICAgICBlcnJvcmNvZGUgPSAxCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ29tbWFuZCBleGVjdXRpb24gZmFpbGVkOiAlcyIsIGV2ZW50LmVycm9yKQorCisgICAgICAgICAgICAgICAgIyB1cGRhdGUgdGhlIGJ1aWxkIGluZm8gaGVscGVyIG9uIEJ1aWxkQ29tcGxldGVkLCBub3Qgb24gQ29tbWFuZFhYWAorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci51cGRhdGVfYnVpbGRfaW5mb3JtYXRpb24oZXZlbnQsIGVycm9ycywgd2FybmluZ3MsIHRhc2tmYWlsdXJlcykKKyAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuY2xvc2UoZXJyb3Jjb2RlKQorICAgICAgICAgICAgICAgICMgbWFyayB0aGUgbG9nIG91dHB1dDsgY29udHJvbGxlcnMgbWF5IGtpbGwgdGhlIHRvYXN0ZXJVSSBhZnRlciBzZWVpbmcgdGhpcyBsb2cKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiVG9hc3RlclVJIGJ1aWxkIGRvbmUgMSwgYnJiZTogJXMiLCBidWlsZGluZm9oZWxwZXIuYnJiZSApCisKKyAgICAgICAgICAgICAgICAjIHdlIHN0YXJ0IGEgbmV3IGJ1aWxkIGluZm8KKyAgICAgICAgICAgICAgICBpZiBidWlsZGluZm9oZWxwZXIuYnJiZSBpcyBub3QgTm9uZToKKworICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIlRvYXN0ZXJVSSB1bmRlciBCdWlsZEVudmlyb25tZW50IG1hbmFnZW1lbnQgLSBleGl0aW5nIGFmdGVyIHRoZSBidWlsZCIpCisgICAgICAgICAgICAgICAgICAgIHNlcnZlci50ZXJtaW5hdGVTZXJ2ZXIoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiVG9hc3RlclVJIHByZXBhcmVkIGZvciBuZXcgYnVpbGQiKQorICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSAwCisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzID0gMAorICAgICAgICAgICAgICAgICAgICB0YXNrZmFpbHVyZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIgPSBCdWlsZEluZm9IZWxwZXIoc2VydmVyLCBidWlsZF9oaXN0b3J5X2VuYWJsZWQpCisKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiVG9hc3RlclVJIGJ1aWxkIGRvbmUgMiIpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuY29tbWFuZC5Db21tYW5kRXhpdCkpOgorICAgICAgICAgICAgICAgIGVycm9yY29kZSA9IDAKKworICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQpOgorICAgICAgICAgICAgICAgIGlmIGV2ZW50LnR5cGUgPT0gIlNpbmdsZVBhY2thZ2VJbmZvIjoKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnN0b3JlX2J1aWxkX3BhY2thZ2VfaW5mb3JtYXRpb24oZXZlbnQpCisgICAgICAgICAgICAgICAgZWxpZiBldmVudC50eXBlID09ICJMYXllckluZm8iOgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfbGF5ZXJfaW5mbyhldmVudCkKKyAgICAgICAgICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gIkJ1aWxkU3RhdHNMaXN0IjoKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnN0b3JlX3Rhc2tzX3N0YXRzKGV2ZW50KQorICAgICAgICAgICAgICAgIGVsaWYgZXZlbnQudHlwZSA9PSAiSW1hZ2VQa2dMaXN0IjoKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnN0b3JlX3RhcmdldF9wYWNrYWdlX2RhdGEoZXZlbnQpCisgICAgICAgICAgICAgICAgZWxpZiBldmVudC50eXBlID09ICJNaXNzZWRTc3RhdGUiOgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfbWlzc2VkX3N0YXRlX3Rhc2tzKGV2ZW50KQorICAgICAgICAgICAgICAgIGVsaWYgZXZlbnQudHlwZSA9PSAiSW1hZ2VGaWxlU2l6ZSI6CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci51cGRhdGVfdGFyZ2V0X2ltYWdlX2ZpbGUoZXZlbnQpCisgICAgICAgICAgICAgICAgZWxpZiBldmVudC50eXBlID09ICJBcnRpZmFjdEZpbGVTaXplIjoKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnVwZGF0ZV9hcnRpZmFjdF9pbWFnZV9maWxlKGV2ZW50KQorICAgICAgICAgICAgICAgIGVsaWYgZXZlbnQudHlwZSA9PSAiTGljZW5zZU1hbmlmZXN0UGF0aCI6CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV9saWNlbnNlX21hbmlmZXN0X3BhdGgoZXZlbnQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbnByb2Nlc3NlZCBNZXRhZGF0YUV2ZW50ICVzICIsIHN0cihldmVudCkpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29va2VyLkNvb2tlckV4aXQpOgorICAgICAgICAgICAgICAgICMgZXhpdCB3aGVuIHRoZSBzZXJ2ZXIgZXhpdHMKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAjIGlnbm9yZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmV2ZW50LkJ1aWxkQmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5TdGFtcFVwZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5SZWNpcGVQcmVGaW5hbGlzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ydW5xdWV1ZS5ydW5RdWV1ZUV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlRXhpdFdhaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuT3BlcmF0aW9uUHJvZ3Jlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmNvbW1hbmQuQ29tbWFuZEV4aXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuY29tbWFuZC5Db21tYW5kQ29tcGxldGVkKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuRGVwVHJlZUdlbmVyYXRlZCk6CisgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnN0b3JlX2RlcGVuZGVuY3lfaW5mb3JtYXRpb24oZXZlbnQpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmtub3duIGV2ZW50OiAlcyIsIGV2ZW50KQorICAgICAgICAgICAgcmV0dXJuX3ZhbHVlICs9IDEKKworICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBpb2Vycm9yOgorICAgICAgICAgICAgIyBpZ25vcmUgaW50ZXJydXB0ZWQgaW8KKyAgICAgICAgICAgIGlmIGlvZXJyb3IuYXJnc1swXSA9PSA0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IDEKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgIyBwcmludCBlcnJvcnMgdG8gbG9nCisgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgICAgICBmcm9tIHBwcmludCBpbXBvcnQgcGZvcm1hdAorICAgICAgICAgICAgZXhjZXB0aW9uX2RhdGEgPSB0cmFjZWJhY2suZm9ybWF0X2V4YygpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIiVzXG4lcyIgLCBlLCBleGNlcHRpb25fZGF0YSkKKworICAgICAgICAgICAgXywgXywgdGIgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgaWYgdGIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgY3VyciA9IHRiCisgICAgICAgICAgICAgICAgd2hpbGUgY3VyciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIkVycm9yIGRhdGEgZHVtcCAlc1xuJXNcbiIgLCB0cmFjZWJhY2suZm9ybWF0X3RiKGN1cnIsMSksIHBmb3JtYXQoY3Vyci50Yl9mcmFtZS5mX2xvY2FscykpCisgICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyLnRiX25leHQKKworICAgICAgICAgICAgIyBzYXZlIHRoZW0gdG8gZGF0YWJhc2UsIGlmIHBvc3NpYmxlOyBpZiBpdCBmYWlscywgd2UgYWxyZWFkeSBsb2dnZWQgdG8gY29uc29sZS4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfbG9nX2V4Y2VwdGlvbigiJXNcbiVzIiAlIChzdHIoZSksIGV4Y2VwdGlvbl9kYXRhKSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgY2U6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJDUklUSUNBTCAtIEZhaWxlZCB0byB0byBzYXZlIHRvYXN0ZXIgZXhjZXB0aW9uIHRvIHRoZSBkYXRhYmFzZTogJXMiLCBzdHIoY2UpKQorCisgICAgICAgICAgICAjIG1ha2Ugc3VyZSB3ZSByZXR1cm4gd2l0aCBhbiBlcnJvcgorICAgICAgICAgICAgcmV0dXJuX3ZhbHVlICs9IDEKKworICAgIGlmIGludGVycnVwdGVkOgorICAgICAgICBpZiByZXR1cm5fdmFsdWUgPT0gMDoKKyAgICAgICAgICAgIHJldHVybl92YWx1ZSArPSAxCisKKyAgICBsb2dnZXIud2FybigiUmV0dXJuIHZhbHVlIGlzICVkIiwgcmV0dXJuX3ZhbHVlKQorICAgIHJldHVybiByZXR1cm5fdmFsdWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvdWlldmVudC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvdWlldmVudC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmM1MGM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS91aWV2ZW50LnB5CkBAIC0wLDAgKzEsMTU1IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA3ICBNaWNoYWVsICdNaWNrZXknIExhdWVyCisjIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDcgIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisKKyIiIgorVXNlIHRoaXMgY2xhc3MgdG8gZm9yayBvZmYgYSB0aHJlYWQgdG8gcmVjaWV2ZSBldmVudCBjYWxsYmFja3MgZnJvbSB0aGUgYml0YmFrZQorc2VydmVyIGFuZCBxdWV1ZSB0aGVtIGZvciB0aGUgVUkgdG8gcHJvY2Vzcy4gVGhpcyBwcm9jZXNzIG11c3QgYmUgdXNlZCB0byBhdm9pZAorY2xpZW50L3NlcnZlciBkZWFkbG9ja3MuCisiIiIKKworaW1wb3J0IHNvY2tldCwgdGhyZWFkaW5nLCBwaWNrbGUKK2Zyb20gU2ltcGxlWE1MUlBDU2VydmVyIGltcG9ydCBTaW1wbGVYTUxSUENTZXJ2ZXIsIFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyCisKK2NsYXNzIEJCVUlFdmVudFF1ZXVlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBCQlNlcnZlciwgY2xpZW50aW5mbz0oImxvY2FsaG9zdCwgMCIpKToKKworICAgICAgICBzZWxmLmV2ZW50UXVldWUgPSBbXQorICAgICAgICBzZWxmLmV2ZW50UXVldWVMb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBzZWxmLmV2ZW50UXVldWVOb3RpZnkgPSB0aHJlYWRpbmcuRXZlbnQoKQorCisgICAgICAgIHNlbGYuQkJTZXJ2ZXIgPSBCQlNlcnZlcgorICAgICAgICBzZWxmLmNsaWVudGluZm8gPSBjbGllbnRpbmZvCisKKyAgICAgICAgc2VydmVyID0gVUlYTUxSUENTZXJ2ZXIoc2VsZi5jbGllbnRpbmZvKQorICAgICAgICBzZWxmLmhvc3QsIHNlbGYucG9ydCA9IHNlcnZlci5zb2NrZXQuZ2V0c29ja25hbWUoKQorCisgICAgICAgIHNlcnZlci5yZWdpc3Rlcl9mdW5jdGlvbiggc2VsZi5zeXN0ZW1fcXVpdCwgImV2ZW50LnF1aXQiICkKKyAgICAgICAgc2VydmVyLnJlZ2lzdGVyX2Z1bmN0aW9uKCBzZWxmLnNlbmRfZXZlbnQsICJldmVudC5zZW5kcGlja2xlIiApCisgICAgICAgIHNlcnZlci5zb2NrZXQuc2V0dGltZW91dCgxKQorCisgICAgICAgIHNlbGYuRXZlbnRIYW5kbGVyID0gTm9uZQorICAgICAgICBjb3VudF90cmllcyA9IDAKKworICAgICAgICAjIHRoZSBldmVudCBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBtYXkgZmFpbCBoZXJlIGR1ZSB0byBjb29rZXIgYmVpbmcgaW4gaW52YWxpZCBzdGF0ZQorICAgICAgICAjIHRoaXMgaXMgYSB0cmFuc2llbnQgc2l0dWF0aW9uLCBhbmQgd2Ugc2hvdWxkIHJldHJ5IGEgY291cGxlIG9mIHRpbWVzIGJlZm9yZQorICAgICAgICAjIGdpdmluZyB1cAorCisgICAgICAgIHdoaWxlIHNlbGYuRXZlbnRIYW5kbGVyID09IE5vbmUgYW5kIGNvdW50X3RyaWVzIDwgNToKKyAgICAgICAgICAgIHNlbGYuRXZlbnRIYW5kbGUgPSBzZWxmLkJCU2VydmVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKHNlbGYuaG9zdCwgc2VsZi5wb3J0KQorCisgICAgICAgICAgICBpZiAoc2VsZi5FdmVudEhhbmRsZSAhPSBOb25lKToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBiYi53YXJuKCJDb3VsZCBub3QgcmVnaXN0ZXIgVUkgZXZlbnQgaGFuZGxlciAlczolZCwgcmV0cnkiICUgKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSkKKyAgICAgICAgICAgIGNvdW50X3RyaWVzICs9IDEKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisKKworICAgICAgICBpZiBzZWxmLkV2ZW50SGFuZGxlID09IE5vbmU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNvdWxkIG5vdCByZWdpc3RlciBVSSBldmVudCBoYW5kbGVyIikKKworICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlcgorCisgICAgICAgIHNlbGYudCA9IHRocmVhZGluZy5UaHJlYWQoKQorICAgICAgICBzZWxmLnQuc2V0RGFlbW9uKFRydWUpCisgICAgICAgIHNlbGYudC5ydW4gPSBzZWxmLnN0YXJ0Q2FsbGJhY2tIYW5kbGVyCisgICAgICAgIHNlbGYudC5zdGFydCgpCisKKyAgICBkZWYgZ2V0RXZlbnQoc2VsZik6CisKKyAgICAgICAgc2VsZi5ldmVudFF1ZXVlTG9jay5hY3F1aXJlKCkKKworICAgICAgICBpZiBsZW4oc2VsZi5ldmVudFF1ZXVlKSA9PSAwOgorICAgICAgICAgICAgc2VsZi5ldmVudFF1ZXVlTG9jay5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaXRlbSA9IHNlbGYuZXZlbnRRdWV1ZS5wb3AoMCkKKworICAgICAgICBpZiBsZW4oc2VsZi5ldmVudFF1ZXVlKSA9PSAwOgorICAgICAgICAgICAgc2VsZi5ldmVudFF1ZXVlTm90aWZ5LmNsZWFyKCkKKworICAgICAgICBzZWxmLmV2ZW50UXVldWVMb2NrLnJlbGVhc2UoKQorICAgICAgICByZXR1cm4gaXRlbQorCisgICAgZGVmIHdhaXRFdmVudChzZWxmLCBkZWxheSk6CisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZU5vdGlmeS53YWl0KGRlbGF5KQorICAgICAgICByZXR1cm4gc2VsZi5nZXRFdmVudCgpCisKKyAgICBkZWYgcXVldWVfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICBzZWxmLmV2ZW50UXVldWVMb2NrLmFjcXVpcmUoKQorICAgICAgICBzZWxmLmV2ZW50UXVldWUuYXBwZW5kKGV2ZW50KQorICAgICAgICBzZWxmLmV2ZW50UXVldWVOb3RpZnkuc2V0KCkKKyAgICAgICAgc2VsZi5ldmVudFF1ZXVlTG9jay5yZWxlYXNlKCkKKworICAgIGRlZiBzZW5kX2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICAgICAgc2VsZi5xdWV1ZV9ldmVudChwaWNrbGUubG9hZHMoZXZlbnQpKQorCisgICAgZGVmIHN0YXJ0Q2FsbGJhY2tIYW5kbGVyKHNlbGYpOgorCisgICAgICAgIHNlbGYuc2VydmVyLnRpbWVvdXQgPSAxCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLnNlcnZlci5xdWl0OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLmhhbmRsZV9yZXF1ZXN0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJCQlVJRXZlbnRRdWV1ZS5zdGFydENhbGxiYWNrSGFuZGxlcjogRXhjZXB0aW9uIHdoaWxlIHRyeWluZyB0byBoYW5kbGUgcmVxdWVzdDogJXNcbiVzIiAlIChlLCB0cmFjZWJhY2suZm9ybWF0X2V4YyhlKSkpCisKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc2VydmVyX2Nsb3NlKCkKKworICAgIGRlZiBzeXN0ZW1fcXVpdCggc2VsZiApOgorICAgICAgICAiIiIKKyAgICAgICAgU2h1dCBkb3duIHRoZSBjYWxsYmFjayB0aHJlYWQKKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuQkJTZXJ2ZXIudW5yZWdpc3RlckV2ZW50SGFuZGxlcihzZWxmLkV2ZW50SGFuZGxlKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuc2VydmVyLnF1aXQgPSBUcnVlCisKK2NsYXNzIFVJWE1MUlBDU2VydmVyIChTaW1wbGVYTUxSUENTZXJ2ZXIpOgorCisgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBpbnRlcmZhY2UgKToKKyAgICAgICAgc2VsZi5xdWl0ID0gRmFsc2UKKyAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLl9faW5pdF9fKCBzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhhbmRsZXI9U2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dSZXF1ZXN0cz1GYWxzZSwgYWxsb3dfbm9uZT1UcnVlKQorCisgICAgZGVmIGdldF9yZXF1ZXN0KHNlbGYpOgorICAgICAgICB3aGlsZSBub3Qgc2VsZi5xdWl0OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNvY2ssIGFkZHIgPSBzZWxmLnNvY2tldC5hY2NlcHQoKQorICAgICAgICAgICAgICAgIHNvY2suc2V0dGltZW91dCgxKQorICAgICAgICAgICAgICAgIHJldHVybiAoc29jaywgYWRkcikKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSkKKworICAgIGRlZiBjbG9zZV9yZXF1ZXN0KHNlbGYsIHJlcXVlc3QpOgorICAgICAgICBpZiByZXF1ZXN0IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLmNsb3NlX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCkKKworICAgIGRlZiBwcm9jZXNzX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgorICAgICAgICBpZiByZXF1ZXN0IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLnByb2Nlc3NfcmVxdWVzdChzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS91aWhlbHBlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvdWloZWxwZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcwMzM4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvdWloZWxwZXIucHkKQEAgLTAsMCArMSwxMDAgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDcgIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwNyAgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBiYi5idWlsZAorCitjbGFzcyBCQlVJSGVscGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5uZWVkVXBkYXRlID0gRmFsc2UKKyAgICAgICAgc2VsZi5ydW5uaW5nX3Rhc2tzID0ge30KKyAgICAgICAgIyBSdW5uaW5nIFBJRHMgcHJlc2VydmVzIHRoZSBvcmRlciB0YXNrcyB3ZXJlIGV4ZWN1dGVkIGluCisgICAgICAgIHNlbGYucnVubmluZ19waWRzID0gW10KKyAgICAgICAgc2VsZi5mYWlsZWRfdGFza3MgPSBbXQorICAgICAgICBzZWxmLnRhc2tudW1iZXJfY3VycmVudCA9IDAKKyAgICAgICAgc2VsZi50YXNrbnVtYmVyX3RvdGFsID0gMAorCisgICAgZGVmIGV2ZW50SGFuZGxlcihzZWxmLCBldmVudCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tTdGFydGVkKToKKyAgICAgICAgICAgIHNlbGYucnVubmluZ190YXNrc1tldmVudC5waWRdID0geyAndGl0bGUnIDogIiVzICVzIiAlIChldmVudC5fcGFja2FnZSwgZXZlbnQuX3Rhc2spIH0KKyAgICAgICAgICAgIHNlbGYucnVubmluZ19waWRzLmFwcGVuZChldmVudC5waWQpCisgICAgICAgICAgICBzZWxmLm5lZWRVcGRhdGUgPSBUcnVlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQpOgorICAgICAgICAgICAgZGVsIHNlbGYucnVubmluZ190YXNrc1tldmVudC5waWRdCisgICAgICAgICAgICBzZWxmLnJ1bm5pbmdfcGlkcy5yZW1vdmUoZXZlbnQucGlkKQorICAgICAgICAgICAgc2VsZi5uZWVkVXBkYXRlID0gVHJ1ZQorICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrRmFpbGVkU2lsZW50KToKKyAgICAgICAgICAgIGRlbCBzZWxmLnJ1bm5pbmdfdGFza3NbZXZlbnQucGlkXQorICAgICAgICAgICAgc2VsZi5ydW5uaW5nX3BpZHMucmVtb3ZlKGV2ZW50LnBpZCkKKyAgICAgICAgICAgICMgRG9uJ3QgYWRkIHRvIHRoZSBmYWlsZWQgdGFza3MgbGlzdCBzaW5jZSB0aGlzIGlzIGUuZy4gYSBzZXRzY2VuZSB0YXNrIGZhaWx1cmUKKyAgICAgICAgICAgIHNlbGYubmVlZFVwZGF0ZSA9IFRydWUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuYnVpbGQuVGFza0ZhaWxlZCk6CisgICAgICAgICAgICBkZWwgc2VsZi5ydW5uaW5nX3Rhc2tzW2V2ZW50LnBpZF0KKyAgICAgICAgICAgIHNlbGYucnVubmluZ19waWRzLnJlbW92ZShldmVudC5waWQpCisgICAgICAgICAgICBzZWxmLmZhaWxlZF90YXNrcy5hcHBlbmQoIHsgJ3RpdGxlJyA6ICIlcyAlcyIgJSAoZXZlbnQuX3BhY2thZ2UsIGV2ZW50Ll90YXNrKX0pCisgICAgICAgICAgICBzZWxmLm5lZWRVcGRhdGUgPSBUcnVlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza1N0YXJ0ZWQpIG9yIGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrU3RhcnRlZCk6CisgICAgICAgICAgICBzZWxmLnRhc2tudW1iZXJfY3VycmVudCA9IGV2ZW50LnN0YXRzLmNvbXBsZXRlZCArIGV2ZW50LnN0YXRzLmFjdGl2ZSArIGV2ZW50LnN0YXRzLmZhaWxlZCArIDEKKyAgICAgICAgICAgIHNlbGYudGFza251bWJlcl90b3RhbCA9IGV2ZW50LnN0YXRzLnRvdGFsCisgICAgICAgICAgICBzZWxmLm5lZWRVcGRhdGUgPSBUcnVlCisKKyAgICBkZWYgZ2V0VGFza3Moc2VsZik6CisgICAgICAgIHNlbGYubmVlZFVwZGF0ZSA9IEZhbHNlCisgICAgICAgIHJldHVybiAoc2VsZi5ydW5uaW5nX3Rhc2tzLCBzZWxmLmZhaWxlZF90YXNrcykKKworICAgIGRlZiBmaW5kU2VydmVyRGV0YWlscyhzZWxmKToKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBpbXBvcnQgb3B0cGFyc2UKKyAgICAgICAgZnJvbSBiYi5zZXJ2ZXIueG1scnBjIGltcG9ydCBCaXRiYWtlU2VydmVySW5mbywgQml0QmFrZVNlcnZlckNvbm5lY3Rpb24KKyAgICAgICAgaG9zdCA9ICIiCisgICAgICAgIHBvcnQgPSAwCisgICAgICAgIGJpbmQgPSAiIgorICAgICAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCisgICAgICAgICAgICB1c2FnZSA9ICIiIiVwcm9nIC1IIGhvc3QgLVAgcG9ydCAtQiBiaW5kYWRkciIiIikKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLUgiLCAiLS1ob3N0IiwgaGVscCA9ICJCaXRiYWtlIHNlcnZlcidzIElQIGFkZHJlc3MiLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAiaG9zdCIsIGRlZmF1bHQgPSBOb25lKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItUCIsICItLXBvcnQiLCBoZWxwID0gIkJpdGJha2Ugc2VydmVyJ3MgUG9ydCBudW1iZXIiLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAicG9ydCIsIGRlZmF1bHQgPSBOb25lKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItQiIsICItLWJpbmQiLCBoZWxwID0gIkhvYjIgbG9jYWwgYmluZCBhZGRyZXNzIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gImJpbmQiLCBkZWZhdWx0ID0gTm9uZSkKKworICAgICAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisgICAgICAgIGZvciBrZXksIHZhbCBpbiBvcHRpb25zLl9fZGljdF9fLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBrZXkgPT0gJ2hvc3QnIGFuZCB2YWw6CisgICAgICAgICAgICAgICAgaG9zdCA9IHZhbAorICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ3BvcnQnIGFuZCB2YWw6CisgICAgICAgICAgICAgICAgcG9ydCA9IGludCh2YWwpCisgICAgICAgICAgICBlbGlmIGtleSA9PSAnYmluZCcgYW5kIHZhbDoKKyAgICAgICAgICAgICAgICBiaW5kID0gdmFsCisKKyAgICAgICAgaWYgbm90IGhvc3Qgb3Igbm90IHBvcnQgb3Igbm90IGJpbmQ6CisgICAgICAgICAgICBwYXJzZXIucHJpbnRfdXNhZ2UoKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBzZXJ2ZXJpbmZvID0gQml0YmFrZVNlcnZlckluZm8oaG9zdCwgcG9ydCkKKyAgICAgICAgY2xpZW50aW5mbyA9IChiaW5kLCAwKQorICAgICAgICBjb25uZWN0aW9uID0gQml0QmFrZVNlcnZlckNvbm5lY3Rpb24oc2VydmVyaW5mbywgY2xpZW50aW5mbykKKworICAgICAgICBzZXJ2ZXIgPSBjb25uZWN0aW9uLmNvbm5lY3Rpb24KKyAgICAgICAgZXZlbnRIYW5kbGVyID0gY29ubmVjdGlvbi5ldmVudHMKKworICAgICAgICByZXR1cm4gc2VydmVyLCBldmVudEhhbmRsZXIsIGhvc3QsIGJpbmQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91dGlscy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFmYWE0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdXRpbHMucHkKQEAgLTAsMCArMSwxMzEyIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlIFV0aWxpdHkgRnVuY3Rpb25zCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDQgTWljaGFlbCBMYXVlcgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHJlLCBmY250bCwgb3MsIHN0cmluZywgc3RhdCwgc2h1dGlsLCB0aW1lCitpbXBvcnQgc3lzCitpbXBvcnQgZXJybm8KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYmIKK2ltcG9ydCBiYi5tc2cKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCBmY250bAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBnbG9iCitpbXBvcnQgZm5tYXRjaAoraW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IGVycm5vCitpbXBvcnQgc2lnbmFsCitmcm9tIGNvbW1hbmRzIGltcG9ydCBnZXRzdGF0dXNvdXRwdXQKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKK2Zyb20gY3R5cGVzIGltcG9ydCBjZGxsCisKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuVXRpbCIpCisKK2RlZiBjbGVhbl9jb250ZXh0KCk6CisgICAgcmV0dXJuIHsKKyAgICAgICAgIm9zIjogb3MsCisgICAgICAgICJiYiI6IGJiLAorICAgICAgICAidGltZSI6IHRpbWUsCisgICAgfQorCitkZWYgZ2V0X2NvbnRleHQoKToKKyAgICByZXR1cm4gX2NvbnRleHQKKyAgICAKKworZGVmIHNldF9jb250ZXh0KGN0eCk6CisgICAgX2NvbnRleHQgPSBjdHgKKworIyBDb250ZXh0IHVzZWQgaW4gYmV0dGVyX2V4ZWMsIGV2YWwKK19jb250ZXh0ID0gY2xlYW5fY29udGV4dCgpCisKK2NsYXNzIFZlcnNpb25TdHJpbmdFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICAiIiJFeGNlcHRpb24gcmFpc2VkIHdoZW4gYW4gaW52YWxpZCB2ZXJzaW9uIHNwZWNpZmljYXRpb24gaXMgZm91bmQiIiIKKworZGVmIGV4cGxvZGVfdmVyc2lvbihzKToKKyAgICByID0gW10KKyAgICBhbHBoYV9yZWdleHAgPSByZS5jb21waWxlKCdeKFthLXpBLVpdKykoLiopJCcpCisgICAgbnVtZXJpY19yZWdleHAgPSByZS5jb21waWxlKCdeKFxkKykoLiopJCcpCisgICAgd2hpbGUgKHMgIT0gJycpOgorICAgICAgICBpZiBzWzBdIGluIHN0cmluZy5kaWdpdHM6CisgICAgICAgICAgICBtID0gbnVtZXJpY19yZWdleHAubWF0Y2gocykKKyAgICAgICAgICAgIHIuYXBwZW5kKCgwLCBpbnQobS5ncm91cCgxKSkpKQorICAgICAgICAgICAgcyA9IG0uZ3JvdXAoMikKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIHNbMF0gaW4gc3RyaW5nLmxldHRlcnM6CisgICAgICAgICAgICBtID0gYWxwaGFfcmVnZXhwLm1hdGNoKHMpCisgICAgICAgICAgICByLmFwcGVuZCgoMSwgbS5ncm91cCgxKSkpCisgICAgICAgICAgICBzID0gbS5ncm91cCgyKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgc1swXSA9PSAnfic6CisgICAgICAgICAgICByLmFwcGVuZCgoLTEsIHNbMF0pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgci5hcHBlbmQoKDIsIHNbMF0pKQorICAgICAgICBzID0gc1sxOl0KKyAgICByZXR1cm4gcgorCitkZWYgc3BsaXRfdmVyc2lvbihzKToKKyAgICAiIiJTcGxpdCBhIHZlcnNpb24gc3RyaW5nIGludG8gaXRzIGNvbnN0aXR1ZW50IHBhcnRzIChQRSwgUFYsIFBSKSIiIgorICAgIHMgPSBzLnN0cmlwKCIgPD49IikKKyAgICBlID0gMAorICAgIGlmIHMuY291bnQoJzonKToKKyAgICAgICAgZSA9IGludChzLnNwbGl0KCI6IilbMF0pCisgICAgICAgIHMgPSBzLnNwbGl0KCI6IilbMV0KKyAgICByID0gIiIKKyAgICBpZiBzLmNvdW50KCctJyk6CisgICAgICAgIHIgPSBzLnJzcGxpdCgiLSIsIDEpWzFdCisgICAgICAgIHMgPSBzLnJzcGxpdCgiLSIsIDEpWzBdCisgICAgdiA9IHMKKyAgICByZXR1cm4gKGUsIHYsIHIpCisKK2RlZiB2ZXJjbXBfcGFydChhLCBiKToKKyAgICB2YSA9IGV4cGxvZGVfdmVyc2lvbihhKQorICAgIHZiID0gZXhwbG9kZV92ZXJzaW9uKGIpCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgaWYgdmEgPT0gW106CisgICAgICAgICAgICAob2EsIGNhKSA9ICgwLCBOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgKG9hLCBjYSkgPSB2YS5wb3AoMCkKKyAgICAgICAgaWYgdmIgPT0gW106CisgICAgICAgICAgICAob2IsIGNiKSA9ICgwLCBOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgKG9iLCBjYikgPSB2Yi5wb3AoMCkKKyAgICAgICAgaWYgKG9hLCBjYSkgPT0gKDAsIE5vbmUpIGFuZCAob2IsIGNiKSA9PSAoMCwgTm9uZSk6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBpZiBvYSA8IG9iOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGVsaWYgb2EgPiBvYjoKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGVsaWYgY2EgPCBjYjoKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICBlbGlmIGNhID4gY2I6CisgICAgICAgICAgICByZXR1cm4gMQorCitkZWYgdmVyY21wKHRhLCB0Yik6CisgICAgKGVhLCB2YSwgcmEpID0gdGEKKyAgICAoZWIsIHZiLCByYikgPSB0YgorCisgICAgciA9IGludChlYSBvciAwKSAtIGludChlYiBvciAwKQorICAgIGlmIChyID09IDApOgorICAgICAgICByID0gdmVyY21wX3BhcnQodmEsIHZiKQorICAgIGlmIChyID09IDApOgorICAgICAgICByID0gdmVyY21wX3BhcnQocmEsIHJiKQorICAgIHJldHVybiByCisKK2RlZiB2ZXJjbXBfc3RyaW5nKGEsIGIpOgorICAgIHRhID0gc3BsaXRfdmVyc2lvbihhKQorICAgIHRiID0gc3BsaXRfdmVyc2lvbihiKQorICAgIHJldHVybiB2ZXJjbXAodGEsIHRiKQorCitkZWYgdmVyY21wX3N0cmluZ19vcChhLCBiLCBvcCk6CisgICAgIiIiCisgICAgQ29tcGFyZSB0d28gdmVyc2lvbnMgYW5kIGNoZWNrIGlmIHRoZSBzcGVjaWZpZWQgY29tcGFyaXNvbiBvcGVyYXRvciBtYXRjaGVzIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24uCisgICAgVGhpcyBmdW5jdGlvbiBpcyBmYWlybHkgbGliZXJhbCBhYm91dCB3aGF0IG9wZXJhdG9ycyBpdCB3aWxsIGFjY2VwdCBzaW5jZSB0aGVyZSBhcmUgYSB2YXJpZXR5IG9mIHN0eWxlcworICAgIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4KKyAgICAiIiIKKyAgICByZXMgPSB2ZXJjbXBfc3RyaW5nKGEsIGIpCisgICAgaWYgb3AgaW4gKCc9JywgJz09Jyk6CisgICAgICAgIHJldHVybiByZXMgPT0gMAorICAgIGVsaWYgb3AgPT0gJzw9JzoKKyAgICAgICAgcmV0dXJuIHJlcyA8PSAwCisgICAgZWxpZiBvcCA9PSAnPj0nOgorICAgICAgICByZXR1cm4gcmVzID49IDAKKyAgICBlbGlmIG9wIGluICgnPicsICc+PicpOgorICAgICAgICByZXR1cm4gcmVzID4gMAorICAgIGVsaWYgb3AgaW4gKCc8JywgJzw8Jyk6CisgICAgICAgIHJldHVybiByZXMgPCAwCisgICAgZWxpZiBvcCA9PSAnIT0nOgorICAgICAgICByZXR1cm4gcmVzICE9IDAKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBWZXJzaW9uU3RyaW5nRXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBjb21wYXJpc29uIG9wZXJhdG9yICIlcyInICUgb3ApCisKK2RlZiBleHBsb2RlX2RlcHMocyk6CisgICAgIiIiCisgICAgVGFrZSBhbiBSREVQRU5EUyBzdHlsZSBzdHJpbmcgb2YgZm9ybWF0OgorICAgICJERVBFTkQxIChvcHRpb25hbCB2ZXJzaW9uKSBERVBFTkQyIChvcHRpb25hbCB2ZXJzaW9uKSAuLi4iCisgICAgYW5kIHJldHVybiBhIGxpc3Qgb2YgZGVwZW5kZW5jaWVzLgorICAgIFZlcnNpb24gaW5mb3JtYXRpb24gaXMgaWdub3JlZC4KKyAgICAiIiIKKyAgICByID0gW10KKyAgICBsID0gcy5zcGxpdCgpCisgICAgZmxhZyA9IEZhbHNlCisgICAgZm9yIGkgaW4gbDoKKyAgICAgICAgaWYgaVswXSA9PSAnKCc6CisgICAgICAgICAgICBmbGFnID0gVHJ1ZQorICAgICAgICAgICAgI2ogPSBbXQorICAgICAgICBpZiBub3QgZmxhZzoKKyAgICAgICAgICAgIHIuYXBwZW5kKGkpCisgICAgICAgICNlbHNlOgorICAgICAgICAjICAgIGouYXBwZW5kKGkpCisgICAgICAgIGlmIGZsYWcgYW5kIGkuZW5kc3dpdGgoJyknKToKKyAgICAgICAgICAgIGZsYWcgPSBGYWxzZQorICAgICAgICAgICAgIyBJZ25vcmUgdmVyc2lvbgorICAgICAgICAgICAgI3JbLTFdICs9ICcgJyArICcgJy5qb2luKGopCisgICAgcmV0dXJuIHIKKworZGVmIGV4cGxvZGVfZGVwX3ZlcnNpb25zMihzKToKKyAgICAiIiIKKyAgICBUYWtlIGFuIFJERVBFTkRTIHN0eWxlIHN0cmluZyBvZiBmb3JtYXQ6CisgICAgIkRFUEVORDEgKG9wdGlvbmFsIHZlcnNpb24pIERFUEVORDIgKG9wdGlvbmFsIHZlcnNpb24pIC4uLiIKKyAgICBhbmQgcmV0dXJuIGEgZGljdGlvbmFyeSBvZiBkZXBlbmRlbmNpZXMgYW5kIHZlcnNpb25zLgorICAgICIiIgorICAgIHIgPSB7fQorICAgIGwgPSBzLnJlcGxhY2UoIiwiLCAiIikuc3BsaXQoKQorICAgIGxhc3RkZXAgPSBOb25lCisgICAgbGFzdGNtcCA9ICIiCisgICAgbGFzdHZlciA9ICIiCisgICAgaW5jbXAgPSBGYWxzZQorICAgIGludmVyc2lvbiA9IEZhbHNlCisgICAgZm9yIGkgaW4gbDoKKyAgICAgICAgaWYgaVswXSA9PSAnKCc6CisgICAgICAgICAgICBpbmNtcCA9IFRydWUKKyAgICAgICAgICAgIGkgPSBpWzE6XS5zdHJpcCgpCisgICAgICAgICAgICBpZiBub3QgaToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIGluY21wOgorICAgICAgICAgICAgaW5jbXAgPSBGYWxzZQorICAgICAgICAgICAgaW52ZXJzaW9uID0gVHJ1ZQorICAgICAgICAgICAgIyBUaGlzIGxpc3QgaXMgYmFzZWQgb24gYmVoYXZpb3IgYW5kIHN1cHBvcnRlZCBjb21wYXJpc29ucyBmcm9tIGRlYiwgb3BrZyBhbmQgcnBtLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBFdmVuIHRob3VnaCA9PCwgPDwsID09LCAhPSwgPT4sIGFuZCA+PiBtYXkgbm90IGJlIHN1cHBvcnRlZCwgCisgICAgICAgICAgICAjIHdlIGxpc3QgZWFjaCBwb3NzaWJseSB2YWxpZCBpdGVtLiAKKyAgICAgICAgICAgICMgVGhlIGJ1aWxkIHN5c3RlbSBpcyByZXNwb25zaWJsZSBmb3IgdmFsaWRhdGlvbiBvZiB3aGF0IGl0IHN1cHBvcnRzLgorICAgICAgICAgICAgaWYgaS5zdGFydHN3aXRoKCgnPD0nLCAnPTwnLCAnPDwnLCAnPT0nLCAnIT0nLCAnPj0nLCAnPT4nLCAnPj4nKSk6CisgICAgICAgICAgICAgICAgbGFzdGNtcCA9IGlbMDoyXQorICAgICAgICAgICAgICAgIGkgPSBpWzI6XQorICAgICAgICAgICAgZWxpZiBpLnN0YXJ0c3dpdGgoKCc8JywgJz4nLCAnPScpKToKKyAgICAgICAgICAgICAgICBsYXN0Y21wID0gaVswOjFdCisgICAgICAgICAgICAgICAgaSA9IGlbMTpdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhbiB1bnN1cHBvcnRlZCBjYXNlIQorICAgICAgICAgICAgICAgIHJhaXNlIFZlcnNpb25TdHJpbmdFeGNlcHRpb24oJ0ludmFsaWQgdmVyc2lvbiBzcGVjaWZpY2F0aW9uIGluICIoJXMiIC0gaW52YWxpZCBvciBtaXNzaW5nIG9wZXJhdG9yJyAlIGkpCisgICAgICAgICAgICAgICAgbGFzdGNtcCA9IChpIG9yICIiKQorICAgICAgICAgICAgICAgIGkgPSAiIgorICAgICAgICAgICAgaS5zdHJpcCgpCisgICAgICAgICAgICBpZiBub3QgaToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIGludmVyc2lvbjoKKyAgICAgICAgICAgIGlmIGkuZW5kc3dpdGgoJyknKToKKyAgICAgICAgICAgICAgICBpID0gaVs6LTFdIG9yICIiCisgICAgICAgICAgICAgICAgaW52ZXJzaW9uID0gRmFsc2UKKyAgICAgICAgICAgICAgICBpZiBsYXN0dmVyIGFuZCBpOgorICAgICAgICAgICAgICAgICAgICBsYXN0dmVyICs9ICIgIgorICAgICAgICAgICAgaWYgaToKKyAgICAgICAgICAgICAgICBsYXN0dmVyICs9IGkKKyAgICAgICAgICAgICAgICBpZiBsYXN0ZGVwIG5vdCBpbiByOgorICAgICAgICAgICAgICAgICAgICByW2xhc3RkZXBdID0gW10KKyAgICAgICAgICAgICAgICByW2xhc3RkZXBdLmFwcGVuZChsYXN0Y21wICsgIiAiICsgbGFzdHZlcikKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgI2lmIG5vdCBpbnZlcnNpb246CisgICAgICAgIGxhc3RkZXAgPSBpCisgICAgICAgIGxhc3R2ZXIgPSAiIgorICAgICAgICBsYXN0Y21wID0gIiIKKyAgICAgICAgaWYgbm90IChpIGluIHIgYW5kIHJbaV0pOgorICAgICAgICAgICAgcltsYXN0ZGVwXSA9IFtdCisKKyAgICByZXR1cm4gcgorCitkZWYgZXhwbG9kZV9kZXBfdmVyc2lvbnMocyk6CisgICAgciA9IGV4cGxvZGVfZGVwX3ZlcnNpb25zMihzKQorICAgIGZvciBkIGluIHI6CisgICAgICAgIGlmIG5vdCByW2RdOgorICAgICAgICAgICAgcltkXSA9IE5vbmUKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGxlbihyW2RdKSA+IDE6CisgICAgICAgICAgICBiYi53YXJuKCJleHBsb2RlX2RlcF92ZXJzaW9ucygpOiBJdGVtICVzIGFwcGVhcmVkIGluIGRlcGVuZGVuY3kgc3RyaW5nICclcycgbXVsdGlwbGUgdGltZXMgd2l0aCBkaWZmZXJlbnQgdmFsdWVzLiAgZXhwbG9kZV9kZXBfdmVyc2lvbnMgY2Fubm90IGNvcGUgd2l0aCB0aGlzLiIgJSAoZCwgcykpCisgICAgICAgIHJbZF0gPSByW2RdWzBdCisgICAgcmV0dXJuIHIKKworZGVmIGpvaW5fZGVwcyhkZXBzLCBjb21tYXNlcD1UcnVlKToKKyAgICAiIiIKKyAgICBUYWtlIHRoZSByZXN1bHQgZnJvbSBleHBsb2RlX2RlcF92ZXJzaW9ucyBhbmQgZ2VuZXJhdGUgYSBkZXBlbmRlbmN5IHN0cmluZworICAgICIiIgorICAgIHJlc3VsdCA9IFtdCisgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICBpZiBkZXBzW2RlcF06CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRlcHNbZGVwXSwgbGlzdCk6CisgICAgICAgICAgICAgICAgZm9yIHYgaW4gZGVwc1tkZXBdOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRlcCArICIgKCIgKyB2ICsgIikiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRlcCArICIgKCIgKyBkZXBzW2RlcF0gKyAiKSIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRlcCkKKyAgICBpZiBjb21tYXNlcDoKKyAgICAgICAgcmV0dXJuICIsICIuam9pbihyZXN1bHQpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICIgIi5qb2luKHJlc3VsdCkKKworZGVmIF9wcmludF90cmFjZShib2R5LCBsaW5lKToKKyAgICAiIiIKKyAgICBQcmludCB0aGUgRW52aXJvbm1lbnQgb2YgYSBUZXh0IEJvZHkKKyAgICAiIiIKKyAgICBlcnJvciA9IFtdCisgICAgIyBwcmludCB0aGUgZW52aXJvbm1lbnQgb2YgdGhlIG1ldGhvZAorICAgIG1pbl9saW5lID0gbWF4KDEsIGxpbmUtNCkKKyAgICBtYXhfbGluZSA9IG1pbihsaW5lICsgNCwgbGVuKGJvZHkpKQorICAgIGZvciBpIGluIHJhbmdlKG1pbl9saW5lLCBtYXhfbGluZSArIDEpOgorICAgICAgICBpZiBsaW5lID09IGk6CisgICAgICAgICAgICBlcnJvci5hcHBlbmQoJyAqKiogJS40ZDolcycgJSAoaSwgYm9keVtpLTFdLnJzdHJpcCgpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVycm9yLmFwcGVuZCgnICAgICAlLjRkOiVzJyAlIChpLCBib2R5W2ktMV0ucnN0cmlwKCkpKQorICAgIHJldHVybiBlcnJvcgorCitkZWYgYmV0dGVyX2NvbXBpbGUodGV4dCwgZmlsZSwgcmVhbGZpbGUsIG1vZGUgPSAiZXhlYyIpOgorICAgICIiIgorICAgIEEgYmV0dGVyIGNvbXBpbGUgbWV0aG9kLiBUaGlzIG1ldGhvZAorICAgIHdpbGwgcHJpbnQgdGhlIG9mZmVuZGluZyBsaW5lcy4KKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBjb21waWxlKHRleHQsIGZpbGUsIG1vZGUpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBlcnJvciA9IFtdCisgICAgICAgICMgc3BsaXQgdGhlIHRleHQgaW50byBsaW5lcyBhZ2FpbgorICAgICAgICBib2R5ID0gdGV4dC5zcGxpdCgnXG4nKQorICAgICAgICBlcnJvci5hcHBlbmQoIkVycm9yIGluIGNvbXBpbGluZyBweXRob24gZnVuY3Rpb24gaW4gJXM6XG4iICUgcmVhbGZpbGUpCisgICAgICAgIGlmIGUubGluZW5vOgorICAgICAgICAgICAgZXJyb3IuYXBwZW5kKCJUaGUgY29kZSBsaW5lcyByZXN1bHRpbmcgaW4gdGhpcyBlcnJvciB3ZXJlOiIpCisgICAgICAgICAgICBlcnJvci5leHRlbmQoX3ByaW50X3RyYWNlKGJvZHksIGUubGluZW5vKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVycm9yLmFwcGVuZCgiVGhlIGZ1bmN0aW9uIGNhdXNpbmcgdGhpcyBlcnJvciB3YXM6IikKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGJvZHk6CisgICAgICAgICAgICAgICAgZXJyb3IuYXBwZW5kKGxpbmUpCisgICAgICAgIGVycm9yLmFwcGVuZCgiJXM6ICVzIiAlIChlLl9fY2xhc3NfXy5fX25hbWVfXywgc3RyKGUpKSkKKworICAgICAgICBsb2dnZXIuZXJyb3IoIlxuIi5qb2luKGVycm9yKSkKKworICAgICAgICBlID0gYmIuQkJIYW5kbGVkRXhjZXB0aW9uKGUpCisgICAgICAgIHJhaXNlIGUKKworZGVmIF9wcmludF9leGNlcHRpb24odCwgdmFsdWUsIHRiLCByZWFsZmlsZSwgdGV4dCwgY29udGV4dCk6CisgICAgZXJyb3IgPSBbXQorICAgIHRyeToKKyAgICAgICAgZXhjZXB0aW9uID0gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seSh0LCB2YWx1ZSkKKyAgICAgICAgZXJyb3IuYXBwZW5kKCdFcnJvciBleGVjdXRpbmcgYSBweXRob24gZnVuY3Rpb24gaW4gJXM6XG4nICUgcmVhbGZpbGUpCisKKyAgICAgICAgIyBTdHJpcCAndXMnIGZyb20gdGhlIHN0YWNrIChiZXR0ZXJfZXhlYyBjYWxsKQorICAgICAgICB0YiA9IHRiLnRiX25leHQKKworICAgICAgICB0ZXh0YXJyYXkgPSB0ZXh0LnNwbGl0KCdcbicpCisKKyAgICAgICAgbGluZWZhaWxlZCA9IHRiLnRiX2xpbmVubworCisgICAgICAgIHRiZXh0cmFjdCA9IHRyYWNlYmFjay5leHRyYWN0X3RiKHRiKQorICAgICAgICB0YmZvcm1hdCA9IHRyYWNlYmFjay5mb3JtYXRfbGlzdCh0YmV4dHJhY3QpCisgICAgICAgIGVycm9yLmFwcGVuZCgiVGhlIHN0YWNrIHRyYWNlIG9mIHB5dGhvbiBjYWxscyB0aGF0IHJlc3VsdGVkIGluIHRoaXMgZXhjZXB0aW9uL2ZhaWx1cmUgd2FzOiIpCisgICAgICAgIGVycm9yLmFwcGVuZCgiRmlsZTogJyVzJywgbGluZW5vOiAlcywgZnVuY3Rpb246ICVzIiAlICh0YmV4dHJhY3RbMF1bMF0sIHRiZXh0cmFjdFswXVsxXSwgdGJleHRyYWN0WzBdWzJdKSkKKyAgICAgICAgZXJyb3IuZXh0ZW5kKF9wcmludF90cmFjZSh0ZXh0YXJyYXksIGxpbmVmYWlsZWQpKQorCisgICAgICAgICMgU2VlIGlmIHRoaXMgaXMgYSBmdW5jdGlvbiB3ZSBjb25zdHJ1Y3RlZCBhbmQgaGFzIGNhbGxzIGJhY2sgaW50byBvdGhlciBmdW5jdGlvbnMgaW4KKyAgICAgICAgIyAidGV4dCIuIElmIHNvLCB0cnkgYW5kIGltcHJvdmUgdGhlIGNvbnRleHQgb2YgdGhlIGVycm9yIGJ5IGRpdmluZyBkb3duIHRoZSB0cmFjZQorICAgICAgICBsZXZlbCA9IDAKKyAgICAgICAgbmV4dHRiID0gdGIudGJfbmV4dAorICAgICAgICB3aGlsZSBuZXh0dGIgaXMgbm90IE5vbmUgYW5kIChsZXZlbCsxKSA8IGxlbih0YmV4dHJhY3QpOgorICAgICAgICAgICAgZXJyb3IuYXBwZW5kKCJGaWxlOiAnJXMnLCBsaW5lbm86ICVzLCBmdW5jdGlvbjogJXMiICUgKHRiZXh0cmFjdFtsZXZlbCsxXVswXSwgdGJleHRyYWN0W2xldmVsKzFdWzFdLCB0YmV4dHJhY3RbbGV2ZWwrMV1bMl0pKQorICAgICAgICAgICAgaWYgdGJleHRyYWN0W2xldmVsXVswXSA9PSB0YmV4dHJhY3RbbGV2ZWwrMV1bMF0gYW5kIHRiZXh0cmFjdFtsZXZlbCsxXVsyXSA9PSB0YmV4dHJhY3RbbGV2ZWxdWzBdOgorICAgICAgICAgICAgICAgICMgVGhlIGNvZGUgd2FzIHBvc3NpYmx5IGluIHRoZSBzdHJpbmcgd2UgY29tcGlsZWQgb3Vyc2VsdmVzCisgICAgICAgICAgICAgICAgZXJyb3IuZXh0ZW5kKF9wcmludF90cmFjZSh0ZXh0YXJyYXksIHRiZXh0cmFjdFtsZXZlbCsxXVsxXSkpCisgICAgICAgICAgICBlbGlmIHRiZXh0cmFjdFtsZXZlbCsxXVswXS5zdGFydHN3aXRoKCIvIik6CisgICAgICAgICAgICAgICAgIyBUaGUgY29kZSBsb29rcyBsaWtlIGl0IG1pZ2h0IGJlIGluIGEgZmlsZSwgdHJ5IGFuZCBsb2FkIGl0CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4odGJleHRyYWN0W2xldmVsKzFdWzBdLCAiciIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IuZXh0ZW5kKF9wcmludF90cmFjZSh0ZXh0LCB0YmV4dHJhY3RbbGV2ZWwrMV1bMV0pKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IuYXBwZW5kKHRiZm9ybWF0W2xldmVsKzFdKQorICAgICAgICAgICAgZWxpZiAiZCIgaW4gY29udGV4dCBhbmQgdGJleHRyYWN0W2xldmVsKzFdWzJdOgorICAgICAgICAgICAgICAgICMgVHJ5IGFuZCBmaW5kIHRoZSBjb2RlIGluIHRoZSBkYXRhc3RvcmUgYmFzZWQgb24gdGhlIGZ1bmN0aW9ubmFtZQorICAgICAgICAgICAgICAgIGQgPSBjb250ZXh0WyJkIl0KKyAgICAgICAgICAgICAgICBmdW5jdGlvbm5hbWUgPSB0YmV4dHJhY3RbbGV2ZWwrMV1bMl0KKyAgICAgICAgICAgICAgICB0ZXh0ID0gZC5nZXRWYXIoZnVuY3Rpb25uYW1lLCBUcnVlKQorICAgICAgICAgICAgICAgIGlmIHRleHQ6CisgICAgICAgICAgICAgICAgICAgIGVycm9yLmV4dGVuZChfcHJpbnRfdHJhY2UodGV4dC5zcGxpdCgnXG4nKSwgdGJleHRyYWN0W2xldmVsKzFdWzFdKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBlcnJvci5hcHBlbmQodGJmb3JtYXRbbGV2ZWwrMV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVycm9yLmFwcGVuZCh0YmZvcm1hdFtsZXZlbCsxXSkKKyAgICAgICAgICAgIG5leHR0YiA9IHRiLnRiX25leHQKKyAgICAgICAgICAgIGxldmVsID0gbGV2ZWwgKyAxCisKKyAgICAgICAgZXJyb3IuYXBwZW5kKCJFeGNlcHRpb246ICVzIiAlICcnLmpvaW4oZXhjZXB0aW9uKSkKKyAgICBmaW5hbGx5OgorICAgICAgICBsb2dnZXIuZXJyb3IoIlxuIi5qb2luKGVycm9yKSkKKworZGVmIGJldHRlcl9leGVjKGNvZGUsIGNvbnRleHQsIHRleHQgPSBOb25lLCByZWFsZmlsZSA9ICI8Y29kZT4iKToKKyAgICAiIiIKKyAgICBTaW1pbGlhciB0byBiZXR0ZXJfY29tcGlsZSwgYmV0dGVyX2V4ZWMgd2lsbAorICAgIHByaW50IHRoZSBsaW5lcyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgdGhlCisgICAgZXJyb3IuCisgICAgIiIiCisgICAgaW1wb3J0IGJiLnBhcnNlCisgICAgaWYgbm90IHRleHQ6CisgICAgICAgIHRleHQgPSBjb2RlCisgICAgaWYgbm90IGhhc2F0dHIoY29kZSwgImNvX2ZpbGVuYW1lIik6CisgICAgICAgIGNvZGUgPSBiZXR0ZXJfY29tcGlsZShjb2RlLCByZWFsZmlsZSwgcmVhbGZpbGUpCisgICAgdHJ5OgorICAgICAgICBleGVjKGNvZGUsIGdldF9jb250ZXh0KCksIGNvbnRleHQpCisgICAgZXhjZXB0IChiYi5CQkhhbmRsZWRFeGNlcHRpb24sIGJiLnBhcnNlLlNraXBSZWNpcGUsIGJiLmJ1aWxkLkZ1bmNGYWlsZWQsIGJiLmRhdGFfc21hcnQuRXhwYW5zaW9uRXJyb3IpOgorICAgICAgICAjIEVycm9yIGFscmVhZHkgc2hvd24gc28gcGFzc3Rocm91Z2gsIG5vIG5lZWQgZm9yIHRyYWNlYmFjaworICAgICAgICByYWlzZQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgKHQsIHZhbHVlLCB0YikgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfcHJpbnRfZXhjZXB0aW9uKHQsIHZhbHVlLCB0YiwgcmVhbGZpbGUsIHRleHQsIGNvbnRleHQpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIGhhbmRsZXIgZXJyb3I6ICVzIiAlIHN0cihlKSkKKworICAgICAgICBlID0gYmIuQkJIYW5kbGVkRXhjZXB0aW9uKGUpCisgICAgICAgIHJhaXNlIGUKKworZGVmIHNpbXBsZV9leGVjKGNvZGUsIGNvbnRleHQpOgorICAgIGV4ZWMoY29kZSwgZ2V0X2NvbnRleHQoKSwgY29udGV4dCkKKworZGVmIGJldHRlcl9ldmFsKHNvdXJjZSwgbG9jYWxzKToKKyAgICByZXR1cm4gZXZhbChzb3VyY2UsIGdldF9jb250ZXh0KCksIGxvY2FscykKKworQGNvbnRleHRtYW5hZ2VyCitkZWYgZmlsZXNsb2NrZWQoZmlsZXMpOgorICAgICIiIkNvbnRleHQgbWFuYWdlciBmb3IgbG9ja2luZyBhbmQgdW5sb2NraW5nIGZpbGUgbG9ja3MuIiIiCisgICAgbG9ja3MgPSBbXQorICAgIGlmIGZpbGVzOgorICAgICAgICBmb3IgbG9ja2ZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBsb2Nrcy5hcHBlbmQoYmIudXRpbHMubG9ja2ZpbGUobG9ja2ZpbGUpKQorCisgICAgeWllbGQKKworICAgIGZvciBsb2NrIGluIGxvY2tzOgorICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxvY2spCisKK0Bjb250ZXh0bWFuYWdlcgorZGVmIHRpbWVvdXQoc2Vjb25kcyk6CisgICAgZGVmIHRpbWVvdXRfaGFuZGxlcihzaWdudW0sIGZyYW1lKToKKyAgICAgICAgcGFzcworCisgICAgb3JpZ2luYWxfaGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIHRpbWVvdXRfaGFuZGxlcikKKworICAgIHRyeToKKyAgICAgICAgc2lnbmFsLmFsYXJtKHNlY29uZHMpCisgICAgICAgIHlpZWxkCisgICAgZmluYWxseToKKyAgICAgICAgc2lnbmFsLmFsYXJtKDApCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIG9yaWdpbmFsX2hhbmRsZXIpCisKK2RlZiBsb2NrZmlsZShuYW1lLCBzaGFyZWQ9RmFsc2UsIHJldHJ5PVRydWUsIGJsb2NrPUZhbHNlKToKKyAgICAiIiIKKyAgICBVc2UgdGhlIHNwZWNpZmllZCBmaWxlIGFzIGEgbG9jayBmaWxlLCByZXR1cm4gd2hlbiB0aGUgbG9jayBoYXMKKyAgICBiZWVuIGFjcXVpcmVkLiBSZXR1cm5zIGEgdmFyaWFibGUgdG8gcGFzcyB0byB1bmxvY2tmaWxlKCkuCisgICAgUGFyYW1ldGVyczoKKyAgICAgICAgcmV0cnk6IFRydWUgdG8gcmUtdHJ5IGxvY2tpbmcgaWYgaXQgZmFpbHMsIEZhbHNlIG90aGVyd2lzZQorICAgICAgICBibG9jazogVHJ1ZSB0byBibG9jayB1bnRpbCB0aGUgbG9jayBzdWNjZWVkcywgRmFsc2Ugb3RoZXJ3aXNlCisgICAgVGhlIHJldHJ5IGFuZCBibG9jayBwYXJhbWV0ZXJzIGFyZSBraW5kIG9mIGVxdWl2YWxlbnQgdW5sZXNzIHlvdQorICAgIGNvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSBvZiBzZW5kaW5nIGEgc2lnbmFsIHRvIHRoZSBwcm9jZXNzIHRvIGJyZWFrCisgICAgb3V0IC0gYXQgd2hpY2ggcG9pbnQgeW91IHdhbnQgYmxvY2s9VHJ1ZSByYXRoZXIgdGhhbiByZXRyeT1UcnVlLgorICAgICIiIgorICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUobmFtZSkKKyAgICBta2RpcmhpZXIoZGlybmFtZSkKKworICAgIGlmIG5vdCBvcy5hY2Nlc3MoZGlybmFtZSwgb3MuV19PSyk6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGFjcXVpcmUgbG9jayAnJXMnLCBkaXJlY3RvcnkgaXMgbm90IHdyaXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgIG5hbWUpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBvcCA9IGZjbnRsLkxPQ0tfRVgKKyAgICBpZiBzaGFyZWQ6CisgICAgICAgIG9wID0gZmNudGwuTE9DS19TSAorICAgIGlmIG5vdCByZXRyeSBhbmQgbm90IGJsb2NrOgorICAgICAgICBvcCA9IG9wIHwgZmNudGwuTE9DS19OQgorCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgIyBJZiB3ZSBsZWF2ZSB0aGUgbG9ja2ZpbGVzIGx5aW5nIGFyb3VuZCB0aGVyZSBpcyBubyBwcm9ibGVtCisgICAgICAgICMgYnV0IHdlIHNob3VsZCBjbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMuIFRoaXMgZ2l2ZXMgcG90ZW50aWFsCisgICAgICAgICMgZm9yIHJhY2VzIHRob3VnaC4gVG8gd29yayBhcm91bmQgdGhpcywgd2hlbiB3ZSBhY3F1aXJlIHRoZSBsb2NrCisgICAgICAgICMgd2UgY2hlY2sgdGhlIGZpbGUgd2UgbG9ja2VkIHdhcyBzdGlsbCB0aGUgbG9jayBmaWxlIG9uIGRpc2suCisgICAgICAgICMgYnkgY29tcGFyaW5nIGlub2RlIG51bWJlcnMuIElmIHRoZXkgZG9uJ3QgbWF0Y2ggb3IgdGhlIGxvY2tmaWxlCisgICAgICAgICMgbm8gbG9uZ2VyIGV4aXN0cywgd2Ugc3RhcnQgYWdhaW4uCisKKyAgICAgICAgIyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIHVuZmFpciBzaW5jZSB0aGUgbGFzdCBwZXJzb24gdG8gcmVxdWVzdCB0aGUKKyAgICAgICAgIyBsb2NrIGlzIHRoZSBtb3N0IGxpa2VseSB0byB3aW4gaXQuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGYgPSBvcGVuKG5hbWUsICdhKycpCisgICAgICAgICAgICBmaWxlbm8gPSBsZi5maWxlbm8oKQorICAgICAgICAgICAgZmNudGwuZmxvY2soZmlsZW5vLCBvcCkKKyAgICAgICAgICAgIHN0YXRpbmZvID0gb3MuZnN0YXQoZmlsZW5vKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobGYubmFtZSk6CisgICAgICAgICAgICAgICAgc3RhdGluZm8yID0gb3Muc3RhdChsZi5uYW1lKQorICAgICAgICAgICAgICAgIGlmIHN0YXRpbmZvLnN0X2lubyA9PSBzdGF0aW5mbzIuc3RfaW5vOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGYKKyAgICAgICAgICAgIGxmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsZi5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgbm90IHJldHJ5OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworZGVmIHVubG9ja2ZpbGUobGYpOgorICAgICIiIgorICAgIFVubG9jayBhIGZpbGUgbG9ja2VkIHVzaW5nIGxvY2tmaWxlKCkKKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgICMgSWYgd2UgaGFkIGEgc2hhcmVkIGxvY2ssIHdlIG5lZWQgdG8gcHJvbW90ZSB0byBleGNsdXNpdmUgYmVmb3JlCisgICAgICAgICMgcmVtb3ZpbmcgdGhlIGxvY2tmaWxlLiBBdHRlbXB0IHRoaXMsIGlnbm9yZSBmYWlsdXJlcy4KKyAgICAgICAgZmNudGwuZmxvY2sobGYuZmlsZW5vKCksIGZjbnRsLkxPQ0tfRVh8ZmNudGwuTE9DS19OQikKKyAgICAgICAgb3MudW5saW5rKGxmLm5hbWUpCisgICAgZXhjZXB0IChJT0Vycm9yLCBPU0Vycm9yKToKKyAgICAgICAgcGFzcworICAgIGZjbnRsLmZsb2NrKGxmLmZpbGVubygpLCBmY250bC5MT0NLX1VOKQorICAgIGxmLmNsb3NlKCkKKworZGVmIG1kNV9maWxlKGZpbGVuYW1lKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIE1ENSBjaGVja3N1bSBvZiBmaWxlbmFtZS4KKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBoYXNobGliCisgICAgICAgIG0gPSBoYXNobGliLm1kNSgpCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBpbXBvcnQgbWQ1CisgICAgICAgIG0gPSBtZDUubmV3KCkKKworICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIG0udXBkYXRlKGxpbmUpCisgICAgcmV0dXJuIG0uaGV4ZGlnZXN0KCkKKworZGVmIHNoYTI1Nl9maWxlKGZpbGVuYW1lKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDI1Ni1iaXQgU0hBIGNoZWNrc3VtIG9mCisgICAgZmlsZW5hbWUuICBPbiBQeXRob24gMi40IHRoaXMgd2lsbCByZXR1cm4gTm9uZSwgc28gY2FsbGVycyB3aWxsIG5lZWQgdG8KKyAgICBoYW5kbGUgdGhhdCBieSBlaXRoZXIgc2tpcHBpbmcgU0hBIGNoZWNrcywgb3IgcnVubmluZyBhIHN0YW5kYWxvbmUgc2hhMjU2c3VtCisgICAgYmluYXJ5LgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IGhhc2hsaWIKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBzID0gaGFzaGxpYi5zaGEyNTYoKQorICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIHMudXBkYXRlKGxpbmUpCisgICAgcmV0dXJuIHMuaGV4ZGlnZXN0KCkKKworZGVmIHByZXNlcnZlZF9lbnZ2YXJzX2V4cG9ydGVkKCk6CisgICAgIiIiVmFyaWFibGVzIHdoaWNoIGFyZSB0YWtlbiBmcm9tIHRoZSBlbnZpcm9ubWVudCBhbmQgcGxhY2VkIGluIGFuZCBleHBvcnRlZAorICAgIGZyb20gdGhlIG1ldGFkYXRhIiIiCisgICAgcmV0dXJuIFsKKyAgICAgICAgJ0JCX1RBU0tIQVNIJywKKyAgICAgICAgJ0hPTUUnLAorICAgICAgICAnTE9HTkFNRScsCisgICAgICAgICdQQVRIJywKKyAgICAgICAgJ1BXRCcsCisgICAgICAgICdTSEVMTCcsCisgICAgICAgICdURVJNJywKKyAgICAgICAgJ1VTRVInLAorICAgIF0KKworZGVmIHByZXNlcnZlZF9lbnZ2YXJzKCk6CisgICAgIiIiVmFyaWFibGVzIHdoaWNoIGFyZSB0YWtlbiBmcm9tIHRoZSBlbnZpcm9ubWVudCBhbmQgcGxhY2VkIGluIHRoZSBtZXRhZGF0YSIiIgorICAgIHYgPSBbCisgICAgICAgICdCQlBBVEgnLAorICAgICAgICAnQkJfUFJFU0VSVkVfRU5WJywKKyAgICAgICAgJ0JCX0VOVl9XSElURUxJU1QnLAorICAgICAgICAnQkJfRU5WX0VYVFJBV0hJVEUnLAorICAgIF0KKyAgICByZXR1cm4gdiArIHByZXNlcnZlZF9lbnZ2YXJzX2V4cG9ydGVkKCkKKworZGVmIGZpbHRlcl9lbnZpcm9ubWVudChnb29kX3ZhcnMpOgorICAgICIiIgorICAgIENyZWF0ZSBhIHByaXN0aW5lIGVudmlyb25tZW50IGZvciBiaXRiYWtlLiBUaGlzIHdpbGwgcmVtb3ZlIHZhcmlhYmxlcyB0aGF0CisgICAgYXJlIG5vdCBrbm93biBhbmQgbWF5IGluZmx1ZW5jZSB0aGUgYnVpbGQgaW4gYSBuZWdhdGl2ZSB3YXkuCisgICAgIiIiCisKKyAgICByZW1vdmVkX3ZhcnMgPSB7fQorICAgIGZvciBrZXkgaW4gb3MuZW52aXJvbi5rZXlzKCk6CisgICAgICAgIGlmIGtleSBpbiBnb29kX3ZhcnM6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHJlbW92ZWRfdmFyc1trZXldID0gb3MuZW52aXJvbltrZXldCisgICAgICAgIG9zLnVuc2V0ZW52KGtleSkKKyAgICAgICAgZGVsIG9zLmVudmlyb25ba2V5XQorCisgICAgaWYgcmVtb3ZlZF92YXJzOgorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJlbW92ZWQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQ6ICVzIiwgIiwgIi5qb2luKHJlbW92ZWRfdmFycy5rZXlzKCkpKQorCisgICAgcmV0dXJuIHJlbW92ZWRfdmFycworCitkZWYgYXBwcm92ZWRfdmFyaWFibGVzKCk6CisgICAgIiIiCisgICAgRGV0ZXJtaW5lIGFuZCByZXR1cm4gdGhlIGxpc3Qgb2Ygd2hpdGVsaXN0ZWQgdmFyaWFibGVzIHdoaWNoIGFyZSBhcHByb3ZlZAorICAgIHRvIHJlbWFpbiBpbiB0aGUgZW52aXJvbm1lbnQuCisgICAgIiIiCisgICAgaWYgJ0JCX1BSRVNFUlZFX0VOVicgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgcmV0dXJuIG9zLmVudmlyb24ua2V5cygpCisgICAgYXBwcm92ZWQgPSBbXQorICAgIGlmICdCQl9FTlZfV0hJVEVMSVNUJyBpbiBvcy5lbnZpcm9uOgorICAgICAgICBhcHByb3ZlZCA9IG9zLmVudmlyb25bJ0JCX0VOVl9XSElURUxJU1QnXS5zcGxpdCgpCisgICAgICAgIGFwcHJvdmVkLmV4dGVuZChbJ0JCX0VOVl9XSElURUxJU1QnXSkKKyAgICBlbHNlOgorICAgICAgICBhcHByb3ZlZCA9IHByZXNlcnZlZF9lbnZ2YXJzKCkKKyAgICBpZiAnQkJfRU5WX0VYVFJBV0hJVEUnIGluIG9zLmVudmlyb246CisgICAgICAgIGFwcHJvdmVkLmV4dGVuZChvcy5lbnZpcm9uWydCQl9FTlZfRVhUUkFXSElURSddLnNwbGl0KCkpCisgICAgICAgIGlmICdCQl9FTlZfRVhUUkFXSElURScgbm90IGluIGFwcHJvdmVkOgorICAgICAgICAgICAgYXBwcm92ZWQuZXh0ZW5kKFsnQkJfRU5WX0VYVFJBV0hJVEUnXSkKKyAgICByZXR1cm4gYXBwcm92ZWQKKworZGVmIGNsZWFuX2Vudmlyb25tZW50KCk6CisgICAgIiIiCisgICAgQ2xlYW4gdXAgYW55IHNwdXJpb3VzIGVudmlyb25tZW50IHZhcmlhYmxlcy4gVGhpcyB3aWxsIHJlbW92ZSBhbnkKKyAgICB2YXJpYWJsZXMgdGhlIHVzZXIgaGFzbid0IGNob3NlbiB0byBwcmVzZXJ2ZS4KKyAgICAiIiIKKyAgICBpZiAnQkJfUFJFU0VSVkVfRU5WJyBub3QgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgZ29vZF92YXJzID0gYXBwcm92ZWRfdmFyaWFibGVzKCkKKyAgICAgICAgcmV0dXJuIGZpbHRlcl9lbnZpcm9ubWVudChnb29kX3ZhcnMpCisKKyAgICByZXR1cm4ge30KKworZGVmIGVtcHR5X2Vudmlyb25tZW50KCk6CisgICAgIiIiCisgICAgUmVtb3ZlIGFsbCB2YXJpYWJsZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuCisgICAgIiIiCisgICAgZm9yIHMgaW4gb3MuZW52aXJvbi5rZXlzKCk6CisgICAgICAgIG9zLnVuc2V0ZW52KHMpCisgICAgICAgIGRlbCBvcy5lbnZpcm9uW3NdCisKK2RlZiBidWlsZF9lbnZpcm9ubWVudChkKToKKyAgICAiIiIKKyAgICBCdWlsZCBhbiBlbnZpcm9ubWVudCBmcm9tIGFsbCBleHBvcnRlZCB2YXJpYWJsZXMuCisgICAgIiIiCisgICAgaW1wb3J0IGJiLmRhdGEKKyAgICBmb3IgdmFyIGluIGJiLmRhdGEua2V5cyhkKToKKyAgICAgICAgZXhwb3J0ID0gZC5nZXRWYXJGbGFnKHZhciwgImV4cG9ydCIpCisgICAgICAgIGlmIGV4cG9ydDoKKyAgICAgICAgICAgIG9zLmVudmlyb25bdmFyXSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIKKworZGVmIF9jaGVja191bnNhZmVfZGVsZXRlX3BhdGgocGF0aCk6CisgICAgIiIiCisgICAgQmFzaWMgc2FmZWd1YXJkIGFnYWluc3QgcmVjdXJzaXZlbHkgZGVsZXRpbmcgc29tZXRoaW5nIHdlIHNob3VsZG4ndC4gSWYgaXQgcmV0dXJucyBUcnVlLAorICAgIHRoZSBjYWxsZXIgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aXRoIGFuIGFwcHJvcHJpYXRlIG1lc3NhZ2UuCisgICAgTk9URTogVGhpcyBpcyBOT1QgbWVhbnQgdG8gYmUgYSBzZWN1cml0eSBtZWNoYW5pc20gLSBqdXN0IGEgZ3VhcmQgYWdhaW5zdCBzaWxseSBtaXN0YWtlcworICAgIHdpdGggcG90ZW50aWFsbHkgZGlzYXN0cm91cyByZXN1bHRzLgorICAgICIiIgorICAgIGV4dHJhID0gJycKKyAgICAjIEhPTUUgbWlnaHQgbm90IGJlIC9ob21lL3NvbWV0aGluZywgc28gaW4gY2FzZSB3ZSBjYW4gZ2V0IGl0LCBjaGVjayBhZ2FpbnN0IGl0CisgICAgaG9tZWRpciA9IG9zLmVudmlyb24uZ2V0KCdIT01FJywgJycpCisgICAgaWYgaG9tZWRpcjoKKyAgICAgICAgZXh0cmEgPSAnfCVzJyAlIGhvbWVkaXIKKyAgICBpZiByZS5tYXRjaCgnKC98Ly98L2hvbWV8L2hvbWUvW14vXSolcykkJyAlIGV4dHJhLCBvcy5wYXRoLmFic3BhdGgocGF0aCkpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCitkZWYgcmVtb3ZlKHBhdGgsIHJlY3Vyc2U9RmFsc2UpOgorICAgICIiIkVxdWl2YWxlbnQgdG8gcm0gLWYgb3Igcm0gLXJmIiIiCisgICAgaWYgbm90IHBhdGg6CisgICAgICAgIHJldHVybgorICAgIGlmIHJlY3Vyc2U6CisgICAgICAgIGZvciBuYW1lIGluIGdsb2IuZ2xvYihwYXRoKToKKyAgICAgICAgICAgIGlmIF9jaGVja191bnNhZmVfZGVsZXRlX3BhdGgocGF0aCk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdiYi51dGlscy5yZW1vdmU6IGNhbGxlZCB3aXRoIGRhbmdlcm91cyBwYXRoICIlcyIgYW5kIHJlY3Vyc2U9VHJ1ZSwgcmVmdXNpbmcgdG8gZGVsZXRlIScgJSBwYXRoKQorICAgICAgICAjIHNodXRpbC5ybXRyZWUobmFtZSkgd291bGQgYmUgaWRlYWwgYnV0IGl0cyB0b28gc2xvdworICAgICAgICBzdWJwcm9jZXNzLmNhbGwoWydybScsICctcmYnXSArIGdsb2IuZ2xvYihwYXRoKSkKKyAgICAgICAgcmV0dXJuCisgICAgZm9yIG5hbWUgaW4gZ2xvYi5nbG9iKHBhdGgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaWYgZXhjLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorCitkZWYgcHJ1bmVkaXIodG9wZGlyKToKKyAgICAjIERlbGV0ZSBldmVyeXRoaW5nIHJlYWNoYWJsZSBmcm9tIHRoZSBkaXJlY3RvcnkgbmFtZWQgaW4gJ3RvcGRpcicuCisgICAgIyBDQVVUSU9OOiAgVGhpcyBpcyBkYW5nZXJvdXMhCisgICAgaWYgX2NoZWNrX3Vuc2FmZV9kZWxldGVfcGF0aCh0b3BkaXIpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oJ2JiLnV0aWxzLnBydW5lZGlyOiBjYWxsZWQgd2l0aCBkYW5nZXJvdXMgcGF0aCAiJXMiLCByZWZ1c2luZyB0byBkZWxldGUhJyAlIHRvcGRpcikKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh0b3BkaXIsIHRvcGRvd24gPSBGYWxzZSk6CisgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihyb290LCBuYW1lKSkKKyAgICAgICAgZm9yIG5hbWUgaW4gZGlyczoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKG9zLnBhdGguam9pbihyb290LCBuYW1lKSk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihyb290LCBuYW1lKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3Mucm1kaXIob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQorICAgIG9zLnJtZGlyKHRvcGRpcikKKworIworIyBDb3VsZCBhbHNvIHVzZSByZXR1cm4gcmUuY29tcGlsZSgiKCVzKSIgJSAifCIuam9pbihtYXAocmUuZXNjYXBlLCBzdWZmaXhlcykpKS5zdWIobGFtYmRhIG1vOiAiIiwgdmFyKQorIyBidXQgdGhhdHMgcG9zc2libHkgaW5zYW5lIGFuZCBzdWZmaXhlcyBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBzbWFsbAorIworZGVmIHBydW5lX3N1ZmZpeCh2YXIsIHN1ZmZpeGVzLCBkKToKKyAgICAjIFNlZSBpZiB2YXIgZW5kcyB3aXRoIGFueSBvZiB0aGUgc3VmZml4ZXMgbGlzdGVkIGFuZAorICAgICMgcmVtb3ZlIGl0IGlmIGZvdW5kCisgICAgZm9yIHN1ZmZpeCBpbiBzdWZmaXhlczoKKyAgICAgICAgaWYgdmFyLmVuZHN3aXRoKHN1ZmZpeCk6CisgICAgICAgICAgICByZXR1cm4gdmFyLnJlcGxhY2Uoc3VmZml4LCAiIikKKyAgICByZXR1cm4gdmFyCisKK2RlZiBta2RpcmhpZXIoZGlyZWN0b3J5KToKKyAgICAiIiJDcmVhdGUgYSBkaXJlY3RvcnkgbGlrZSAnbWtkaXIgLXAnLCBidXQgZG9lcyBub3QgY29tcGxhaW4gaWYKKyAgICBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMgbGlrZSBvcy5tYWtlZGlycworICAgICIiIgorCisgICAgdHJ5OgorICAgICAgICBvcy5tYWtlZGlycyhkaXJlY3RvcnkpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICByYWlzZSBlCisKK2RlZiBtb3ZlZmlsZShzcmMsIGRlc3QsIG5ld210aW1lID0gTm9uZSwgc3N0YXQgPSBOb25lKToKKyAgICAiIiJNb3ZlcyBhIGZpbGUgZnJvbSBzcmMgdG8gZGVzdCwgcHJlc2VydmluZyBhbGwgcGVybWlzc2lvbnMgYW5kCisgICAgYXR0cmlidXRlczsgbXRpbWUgd2lsbCBiZSBwcmVzZXJ2ZWQgZXZlbiB3aGVuIG1vdmluZyBhY3Jvc3MKKyAgICBmaWxlc3lzdGVtcy4gIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzIGFuZCBmYWxzZSBvbiBmYWlsdXJlLiBNb3ZlIGlzCisgICAgYXRvbWljLgorICAgICIiIgorCisgICAgI3ByaW50ICJtb3ZlZmlsZSgiICsgc3JjICsgIiwiICsgZGVzdCArICIsIiArIHN0cihuZXdtdGltZSkgKyAiLCIgKyBzdHIoc3N0YXQpICsgIikiCisgICAgdHJ5OgorICAgICAgICBpZiBub3Qgc3N0YXQ6CisgICAgICAgICAgICBzc3RhdCA9IG9zLmxzdGF0KHNyYykKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIHByaW50KCJtb3ZlZmlsZTogU3RhdGluZyBzb3VyY2UgZmlsZSBmYWlsZWQuLi4iLCBlKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVzdGV4aXN0cyA9IDEKKyAgICB0cnk6CisgICAgICAgIGRzdGF0ID0gb3MubHN0YXQoZGVzdCkKKyAgICBleGNlcHQ6CisgICAgICAgIGRzdGF0ID0gb3MubHN0YXQob3MucGF0aC5kaXJuYW1lKGRlc3QpKQorICAgICAgICBkZXN0ZXhpc3RzID0gMAorCisgICAgaWYgZGVzdGV4aXN0czoKKyAgICAgICAgaWYgc3RhdC5TX0lTTE5LKGRzdGF0W3N0YXQuU1RfTU9ERV0pOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnVubGluayhkZXN0KQorICAgICAgICAgICAgICAgIGRlc3RleGlzdHMgPSAwCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgaWYgc3RhdC5TX0lTTE5LKHNzdGF0W3N0YXQuU1RfTU9ERV0pOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YXJnZXQgPSBvcy5yZWFkbGluayhzcmMpCisgICAgICAgICAgICBpZiBkZXN0ZXhpc3RzIGFuZCBub3Qgc3RhdC5TX0lTRElSKGRzdGF0W3N0YXQuU1RfTU9ERV0pOgorICAgICAgICAgICAgICAgIG9zLnVubGluayhkZXN0KQorICAgICAgICAgICAgb3Muc3ltbGluayh0YXJnZXQsIGRlc3QpCisgICAgICAgICAgICAjb3MubGNob3duKGRlc3Qsc3N0YXRbc3RhdC5TVF9VSURdLHNzdGF0W3N0YXQuU1RfR0lEXSkKKyAgICAgICAgICAgIG9zLnVubGluayhzcmMpCisgICAgICAgICAgICByZXR1cm4gb3MubHN0YXQoZGVzdCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcHJpbnQoIm1vdmVmaWxlOiBmYWlsZWQgdG8gcHJvcGVybHkgY3JlYXRlIHN5bWxpbms6IiwgZGVzdCwgIi0+IiwgdGFyZ2V0LCBlKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIHJlbmFtZWZhaWxlZCA9IDEKKyAgICBpZiBzc3RhdFtzdGF0LlNUX0RFVl0gPT0gZHN0YXRbc3RhdC5TVF9ERVZdOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIG9zLnJlbmFtZSBuZWVkcyB0byBrbm93IHRoZSBkZXN0IHBhdGggZW5kaW5nIHdpdGggZmlsZSBuYW1lCisgICAgICAgICAgICAjIHNvIGFwcGVuZCB0aGUgZmlsZSBuYW1lIHRvIGEgcGF0aCBvbmx5IGlmIGl0J3MgYSBkaXIgc3BlY2lmaWVkCisgICAgICAgICAgICBzcmNmbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3JjKQorICAgICAgICAgICAgZGVzdHBhdGggPSBvcy5wYXRoLmpvaW4oZGVzdCwgc3JjZm5hbWUpIGlmIG9zLnBhdGguaXNkaXIoZGVzdCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBkZXN0CisgICAgICAgICAgICBvcy5yZW5hbWUoc3JjLCBkZXN0cGF0aCkKKyAgICAgICAgICAgIHJlbmFtZWZhaWxlZCA9IDAKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgaWYgZVswXSAhPSBlcnJuby5FWERFVjoKKyAgICAgICAgICAgICAgICAjIFNvbWUgcmFuZG9tIGVycm9yLgorICAgICAgICAgICAgICAgIHByaW50KCJtb3ZlZmlsZTogRmFpbGVkIHRvIG1vdmUiLCBzcmMsICJ0byIsIGRlc3QsIGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICMgSW52YWxpZCBjcm9zcy1kZXZpY2UtbGluayAnYmluZCcgbW91bnRlZCBvciBhY3R1YWxseSBDcm9zcy1EZXZpY2UKKworICAgIGlmIHJlbmFtZWZhaWxlZDoKKyAgICAgICAgZGlkY29weSA9IDAKKyAgICAgICAgaWYgc3RhdC5TX0lTUkVHKHNzdGF0W3N0YXQuU1RfTU9ERV0pOgorICAgICAgICAgICAgdHJ5OiAjIEZvciBzYWZldHkgY29weSB0aGVuIG1vdmUgaXQgb3Zlci4KKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoc3JjLCBkZXN0ICsgIiNuZXciKQorICAgICAgICAgICAgICAgIG9zLnJlbmFtZShkZXN0ICsgIiNuZXciLCBkZXN0KQorICAgICAgICAgICAgICAgIGRpZGNvcHkgPSAxCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgcHJpbnQoJ21vdmVmaWxlOiBjb3B5Jywgc3JjLCAnLT4nLCBkZXN0LCAnZmFpbGVkLicsIGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICN3ZSBkb24ndCB5ZXQgaGFuZGxlIHNwZWNpYWwsIHNvIHdlIG5lZWQgdG8gZmFsbCBiYWNrIHRvIC9iaW4vbXYKKyAgICAgICAgICAgIGEgPSBnZXRzdGF0dXNvdXRwdXQoIi9iaW4vbXYgLWYgIiArICInIiArIHNyYyArICInICciICsgZGVzdCArICInIikKKyAgICAgICAgICAgIGlmIGFbMF0gIT0gMDoKKyAgICAgICAgICAgICAgICBwcmludCgibW92ZWZpbGU6IEZhaWxlZCB0byBtb3ZlIHNwZWNpYWwgZmlsZToiICsgc3JjICsgIicgdG8gJyIgKyBkZXN0ICsgIiciLCBhKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lICMgZmFpbHVyZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBkaWRjb3B5OgorICAgICAgICAgICAgICAgIG9zLmxjaG93bihkZXN0LCBzc3RhdFtzdGF0LlNUX1VJRF0sIHNzdGF0W3N0YXQuU1RfR0lEXSkKKyAgICAgICAgICAgICAgICBvcy5jaG1vZChkZXN0LCBzdGF0LlNfSU1PREUoc3N0YXRbc3RhdC5TVF9NT0RFXSkpICMgU3RpY2t5IGlzIHJlc2V0IG9uIGNob3duCisgICAgICAgICAgICAgICAgb3MudW5saW5rKHNyYykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcHJpbnQoIm1vdmVmaWxlOiBGYWlsZWQgdG8gY2hvd24vY2htb2QvdW5saW5rIiwgZGVzdCwgZSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBpZiBuZXdtdGltZToKKyAgICAgICAgb3MudXRpbWUoZGVzdCwgKG5ld210aW1lLCBuZXdtdGltZSkpCisgICAgZWxzZToKKyAgICAgICAgb3MudXRpbWUoZGVzdCwgKHNzdGF0W3N0YXQuU1RfQVRJTUVdLCBzc3RhdFtzdGF0LlNUX01USU1FXSkpCisgICAgICAgIG5ld210aW1lID0gc3N0YXRbc3RhdC5TVF9NVElNRV0KKyAgICByZXR1cm4gbmV3bXRpbWUKKworZGVmIGNvcHlmaWxlKHNyYywgZGVzdCwgbmV3bXRpbWUgPSBOb25lLCBzc3RhdCA9IE5vbmUpOgorICAgICIiIgorICAgIENvcGllcyBhIGZpbGUgZnJvbSBzcmMgdG8gZGVzdCwgcHJlc2VydmluZyBhbGwgcGVybWlzc2lvbnMgYW5kCisgICAgYXR0cmlidXRlczsgbXRpbWUgd2lsbCBiZSBwcmVzZXJ2ZWQgZXZlbiB3aGVuIG1vdmluZyBhY3Jvc3MKKyAgICBmaWxlc3lzdGVtcy4gIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzIGFuZCBmYWxzZSBvbiBmYWlsdXJlLgorICAgICIiIgorICAgICNwcmludCAiY29weWZpbGUoIiArIHNyYyArICIsIiArIGRlc3QgKyAiLCIgKyBzdHIobmV3bXRpbWUpICsgIiwiICsgc3RyKHNzdGF0KSArICIpIgorICAgIHRyeToKKyAgICAgICAgaWYgbm90IHNzdGF0OgorICAgICAgICAgICAgc3N0YXQgPSBvcy5sc3RhdChzcmMpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBsb2dnZXIud2FybigiY29weWZpbGU6IHN0YXQgb2YgJXMgZmFpbGVkICglcykiICUgKHNyYywgZSkpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVzdGV4aXN0cyA9IDEKKyAgICB0cnk6CisgICAgICAgIGRzdGF0ID0gb3MubHN0YXQoZGVzdCkKKyAgICBleGNlcHQ6CisgICAgICAgIGRzdGF0ID0gb3MubHN0YXQob3MucGF0aC5kaXJuYW1lKGRlc3QpKQorICAgICAgICBkZXN0ZXhpc3RzID0gMAorCisgICAgaWYgZGVzdGV4aXN0czoKKyAgICAgICAgaWYgc3RhdC5TX0lTTE5LKGRzdGF0W3N0YXQuU1RfTU9ERV0pOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnVubGluayhkZXN0KQorICAgICAgICAgICAgICAgIGRlc3RleGlzdHMgPSAwCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgaWYgc3RhdC5TX0lTTE5LKHNzdGF0W3N0YXQuU1RfTU9ERV0pOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YXJnZXQgPSBvcy5yZWFkbGluayhzcmMpCisgICAgICAgICAgICBpZiBkZXN0ZXhpc3RzIGFuZCBub3Qgc3RhdC5TX0lTRElSKGRzdGF0W3N0YXQuU1RfTU9ERV0pOgorICAgICAgICAgICAgICAgIG9zLnVubGluayhkZXN0KQorICAgICAgICAgICAgb3Muc3ltbGluayh0YXJnZXQsIGRlc3QpCisgICAgICAgICAgICAjb3MubGNob3duKGRlc3Qsc3N0YXRbc3RhdC5TVF9VSURdLHNzdGF0W3N0YXQuU1RfR0lEXSkKKyAgICAgICAgICAgIHJldHVybiBvcy5sc3RhdChkZXN0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBsb2dnZXIud2FybigiY29weWZpbGU6IGZhaWxlZCB0byBjcmVhdGUgc3ltbGluayAlcyB0byAlcyAoJXMpIiAlIChkZXN0LCB0YXJnZXQsIGUpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBzdGF0LlNfSVNSRUcoc3N0YXRbc3RhdC5TVF9NT0RFXSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNyY2Nob3duID0gRmFsc2UKKyAgICAgICAgICAgIGlmIG5vdCBvcy5hY2Nlc3Moc3JjLCBvcy5SX09LKToKKyAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBjYW4gcmVhZCBpdAorICAgICAgICAgICAgICAgIHNyY2Nob3duID0gVHJ1ZQorICAgICAgICAgICAgICAgIG9zLmNobW9kKHNyYywgc3N0YXRbc3RhdC5TVF9NT0RFXSB8IHN0YXQuU19JUlVTUikKKworICAgICAgICAgICAgIyBGb3Igc2FmZXR5IGNvcHkgdGhlbiBtb3ZlIGl0IG92ZXIuCisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoc3JjLCBkZXN0ICsgIiNuZXciKQorICAgICAgICAgICAgb3MucmVuYW1lKGRlc3QgKyAiI25ldyIsIGRlc3QpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCJjb3B5ZmlsZTogY29weSAlcyB0byAlcyBmYWlsZWQgKCVzKSIgJSAoc3JjLCBkZXN0LCBlKSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgc3JjY2hvd246CisgICAgICAgICAgICAgICAgb3MuY2htb2Qoc3JjLCBzc3RhdFtzdGF0LlNUX01PREVdKQorICAgICAgICAgICAgICAgIG9zLnV0aW1lKHNyYywgKHNzdGF0W3N0YXQuU1RfQVRJTUVdLCBzc3RhdFtzdGF0LlNUX01USU1FXSkpCisKKyAgICBlbHNlOgorICAgICAgICAjd2UgZG9uJ3QgeWV0IGhhbmRsZSBzcGVjaWFsLCBzbyB3ZSBuZWVkIHRvIGZhbGwgYmFjayB0byAvYmluL212CisgICAgICAgIGEgPSBnZXRzdGF0dXNvdXRwdXQoIi9iaW4vY3AgLWYgIiArICInIiArIHNyYyArICInICciICsgZGVzdCArICInIikKKyAgICAgICAgaWYgYVswXSAhPSAwOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oImNvcHlmaWxlOiBmYWlsZWQgdG8gY29weSBzcGVjaWFsIGZpbGUgJXMgdG8gJXMgKCVzKSIgJSAoc3JjLCBkZXN0LCBhKSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSAjIGZhaWx1cmUKKyAgICB0cnk6CisgICAgICAgIG9zLmxjaG93bihkZXN0LCBzc3RhdFtzdGF0LlNUX1VJRF0sIHNzdGF0W3N0YXQuU1RfR0lEXSkKKyAgICAgICAgb3MuY2htb2QoZGVzdCwgc3RhdC5TX0lNT0RFKHNzdGF0W3N0YXQuU1RfTU9ERV0pKSAjIFN0aWNreSBpcyByZXNldCBvbiBjaG93bgorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgbG9nZ2VyLndhcm4oImNvcHlmaWxlOiBmYWlsZWQgdG8gY2hvd24vY2htb2QgJXMgKCVzKSIgJSAoZGVzdCwgZSkpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgbmV3bXRpbWU6CisgICAgICAgIG9zLnV0aW1lKGRlc3QsIChuZXdtdGltZSwgbmV3bXRpbWUpKQorICAgIGVsc2U6CisgICAgICAgIG9zLnV0aW1lKGRlc3QsIChzc3RhdFtzdGF0LlNUX0FUSU1FXSwgc3N0YXRbc3RhdC5TVF9NVElNRV0pKQorICAgICAgICBuZXdtdGltZSA9IHNzdGF0W3N0YXQuU1RfTVRJTUVdCisgICAgcmV0dXJuIG5ld210aW1lCisKK2RlZiB3aGljaChwYXRoLCBpdGVtLCBkaXJlY3Rpb24gPSAwLCBoaXN0b3J5ID0gRmFsc2UpOgorICAgICIiIgorICAgIExvY2F0ZSBhIGZpbGUgaW4gYSBQQVRICisgICAgIiIiCisKKyAgICBoaXN0ID0gW10KKyAgICBwYXRocyA9IChwYXRoIG9yICIiKS5zcGxpdCgnOicpCisgICAgaWYgZGlyZWN0aW9uICE9IDA6CisgICAgICAgIHBhdGhzLnJldmVyc2UoKQorCisgICAgZm9yIHAgaW4gcGF0aHM6CisgICAgICAgIG5leHQgPSBvcy5wYXRoLmpvaW4ocCwgaXRlbSkKKyAgICAgICAgaGlzdC5hcHBlbmQobmV4dCkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobmV4dCk6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhuZXh0KToKKyAgICAgICAgICAgICAgICBuZXh0ID0gb3MucGF0aC5hYnNwYXRoKG5leHQpCisgICAgICAgICAgICBpZiBoaXN0b3J5OgorICAgICAgICAgICAgICAgIHJldHVybiBuZXh0LCBoaXN0CisgICAgICAgICAgICByZXR1cm4gbmV4dAorCisgICAgaWYgaGlzdG9yeToKKyAgICAgICAgcmV0dXJuICIiLCBoaXN0CisgICAgcmV0dXJuICIiCisKK2RlZiB0b19ib29sZWFuKHN0cmluZywgZGVmYXVsdD1Ob25lKToKKyAgICBpZiBub3Qgc3RyaW5nOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorCisgICAgbm9ybWFsaXplZCA9IHN0cmluZy5sb3dlcigpCisgICAgaWYgbm9ybWFsaXplZCBpbiAoInkiLCAieWVzIiwgIjEiLCAidHJ1ZSIpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsaWYgbm9ybWFsaXplZCBpbiAoIm4iLCAibm8iLCAiMCIsICJmYWxzZSIpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHZhbHVlIGZvciB0b19ib29sZWFuOiAlcyIgJSBzdHJpbmcpCisKK2RlZiBjb250YWlucyh2YXJpYWJsZSwgY2hlY2t2YWx1ZXMsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgdmFsID0gZC5nZXRWYXIodmFyaWFibGUsIFRydWUpCisgICAgaWYgbm90IHZhbDoKKyAgICAgICAgcmV0dXJuIGZhbHNldmFsdWUKKyAgICB2YWwgPSBzZXQodmFsLnNwbGl0KCkpCisgICAgaWYgaXNpbnN0YW5jZShjaGVja3ZhbHVlcywgYmFzZXN0cmluZyk6CisgICAgICAgIGNoZWNrdmFsdWVzID0gc2V0KGNoZWNrdmFsdWVzLnNwbGl0KCkpCisgICAgZWxzZToKKyAgICAgICAgY2hlY2t2YWx1ZXMgPSBzZXQoY2hlY2t2YWx1ZXMpCisgICAgaWYgY2hlY2t2YWx1ZXMuaXNzdWJzZXQodmFsKTogCisgICAgICAgIHJldHVybiB0cnVldmFsdWUKKyAgICByZXR1cm4gZmFsc2V2YWx1ZQorCitkZWYgY29udGFpbnNfYW55KHZhcmlhYmxlLCBjaGVja3ZhbHVlcywgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKToKKyAgICB2YWwgPSBkLmdldFZhcih2YXJpYWJsZSwgVHJ1ZSkKKyAgICBpZiBub3QgdmFsOgorICAgICAgICByZXR1cm4gZmFsc2V2YWx1ZQorICAgIHZhbCA9IHNldCh2YWwuc3BsaXQoKSkKKyAgICBpZiBpc2luc3RhbmNlKGNoZWNrdmFsdWVzLCBiYXNlc3RyaW5nKToKKyAgICAgICAgY2hlY2t2YWx1ZXMgPSBzZXQoY2hlY2t2YWx1ZXMuc3BsaXQoKSkKKyAgICBlbHNlOgorICAgICAgICBjaGVja3ZhbHVlcyA9IHNldChjaGVja3ZhbHVlcykKKyAgICBpZiBjaGVja3ZhbHVlcyAmIHZhbDoKKyAgICAgICAgcmV0dXJuIHRydWV2YWx1ZQorICAgIHJldHVybiBmYWxzZXZhbHVlCisKK2RlZiBjcHVfY291bnQoKToKKyAgICByZXR1cm4gbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpCisKK2RlZiBub25ibG9ja2luZ2ZkKGZkKToKKyAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpIHwgb3MuT19OT05CTE9DSykKKworZGVmIHByb2Nlc3NfcHJvZmlsZWxvZyhmbiwgcG91dCA9IE5vbmUpOgorICAgICMgRWl0aGVyIGNhbGwgd2l0aCBhIGxpc3Qgb2YgZmlsZW5hbWVzIGFuZCBzZXQgcG91dCBvciBhIGZpbGVuYW1lIGFuZCBvcHRpb25hbGx5IHBvdXQuCisgICAgaWYgbm90IHBvdXQ6CisgICAgICAgIHBvdXQgPSBmbiArICcucHJvY2Vzc2VkJworICAgIHBvdXQgPSBvcGVuKHBvdXQsICd3JykKKyAgIAorICAgIGltcG9ydCBwc3RhdHMKKyAgICBpZiBpc2luc3RhbmNlKGZuLCBsaXN0KToKKyAgICAgICAgcCA9IHBzdGF0cy5TdGF0cygqZm4sIHN0cmVhbT1wb3V0KQorICAgIGVsc2U6CisgICAgICAgIHAgPSBwc3RhdHMuU3RhdHMoZm4sIHN0cmVhbT1wb3V0KQorICAgIHAuc29ydF9zdGF0cygndGltZScpCisgICAgcC5wcmludF9zdGF0cygpCisgICAgcC5wcmludF9jYWxsZXJzKCkKKyAgICBwLnNvcnRfc3RhdHMoJ2N1bXVsYXRpdmUnKQorICAgIHAucHJpbnRfc3RhdHMoKQorCisgICAgcG91dC5mbHVzaCgpCisgICAgcG91dC5jbG9zZSgpICAKKworIworIyBXYXMgcHJlc2VudCB0byB3b3JrIGFyb3VuZCBtdWx0aXByb2Nlc3NpbmcgcG9vbCBidWdzIGluIHB5dGhvbiA8IDIuNy4zCisjCitkZWYgbXVsdGlwcm9jZXNzaW5ncG9vbCgqYXJncywgKiprd2FyZ3MpOgorCisgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5wb29sCisgICAgI2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcudXRpbAorICAgICNtdWx0aXByb2Nlc3NpbmcudXRpbC5sb2dfdG9fc3RkZXJyKDEwKQorICAgICMgRGVhbCB3aXRoIGEgbXVsdGlwcm9jZXNzaW5nIGJ1ZyB3aGVyZSBzaWduYWxzIHRvIHRoZSBwcm9jZXNzZXMgd291bGQgYmUgZGVsYXllZCB1bnRpbCB0aGUgd29yaworICAgICMgY29tcGxldGVzLiBQdXR0aW5nIGluIGEgdGltZW91dCBtZWFucyB0aGUgc2lnbmFscyAobGlrZSBTSUdJTlQvU0lHVEVSTSkgZ2V0IHByb2Nlc3NlZC4KKyAgICBkZWYgd3JhcHBlcihmdW5jKToKKyAgICAgICAgZGVmIHdyYXAoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgICAgIHJldHVybiBmdW5jKHNlbGYsIHRpbWVvdXQ9dGltZW91dCBpZiB0aW1lb3V0IGlzIG5vdCBOb25lIGVsc2UgMWUxMDApCisgICAgICAgIHJldHVybiB3cmFwCisgICAgbXVsdGlwcm9jZXNzaW5nLnBvb2wuSU1hcEl0ZXJhdG9yLm5leHQgPSB3cmFwcGVyKG11bHRpcHJvY2Vzc2luZy5wb29sLklNYXBJdGVyYXRvci5uZXh0KQorCisgICAgcmV0dXJuIG11bHRpcHJvY2Vzc2luZy5Qb29sKCphcmdzLCAqKmt3YXJncykKKworZGVmIGV4ZWNfZmxhdF9weXRob25fZnVuYyhmdW5jLCAqYXJncywgKiprd2FyZ3MpOgorICAgICIiIkV4ZWN1dGUgYSBmbGF0IHB5dGhvbiBmdW5jdGlvbiAoZGVmaW5lZCB3aXRoIGRlZiBmdW5jbmFtZShhcmdzKTouLi4pIiIiCisgICAgIyBQcmVwYXJlIGEgc21hbGwgcGllY2Ugb2YgcHl0aG9uIGNvZGUgd2hpY2ggY2FsbHMgdGhlIHJlcXVlc3RlZCBmdW5jdGlvbgorICAgICMgVG8gZG8gdGhpcyB3ZSBuZWVkIHRvIHByZXBhcmUgdHdvIHRoaW5ncyAtIGEgc2V0IG9mIHZhcmlhYmxlcyB3ZSBjYW4gdXNlIHRvIHBhc3MKKyAgICAjIHRoZSB2YWx1ZXMgb2YgYXJndW1lbnRzIGludG8gdGhlIGNhbGxpbmcgZnVuY3Rpb24sIGFuZCB0aGUgbGlzdCBvZiBhcmd1bWVudHMgZm9yCisgICAgIyB0aGUgZnVuY3Rpb24gYmVpbmcgY2FsbGVkCisgICAgY29udGV4dCA9IHt9CisgICAgZnVuY2FyZ3MgPSBbXQorICAgICMgSGFuZGxlIHVubmFtZWQgYXJndW1lbnRzCisgICAgYWlkeCA9IDEKKyAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgIGFyZ25hbWUgPSAnYXJnXyVzJyAlIGFpZHgKKyAgICAgICAgY29udGV4dFthcmduYW1lXSA9IGFyZworICAgICAgICBmdW5jYXJncy5hcHBlbmQoYXJnbmFtZSkKKyAgICAgICAgYWlkeCArPSAxCisgICAgIyBIYW5kbGUga2V5d29yZCBhcmd1bWVudHMKKyAgICBjb250ZXh0LnVwZGF0ZShrd2FyZ3MpCisgICAgZnVuY2FyZ3MuZXh0ZW5kKFsnJXM9JXMnICUgKGFyZywgYXJnKSBmb3IgYXJnIGluIGt3YXJncy5pdGVya2V5cygpXSkKKyAgICBjb2RlID0gJ3JldHZhbCA9ICVzKCVzKScgJSAoZnVuYywgJywgJy5qb2luKGZ1bmNhcmdzKSkKKyAgICBjb21wID0gYmIudXRpbHMuYmV0dGVyX2NvbXBpbGUoY29kZSwgJzxzdHJpbmc+JywgJzxzdHJpbmc+JykKKyAgICBiYi51dGlscy5iZXR0ZXJfZXhlYyhjb21wLCBjb250ZXh0LCBjb2RlLCAnPHN0cmluZz4nKQorICAgIHJldHVybiBjb250ZXh0WydyZXR2YWwnXQorCitkZWYgZWRpdF9tZXRhZGF0YShtZXRhX2xpbmVzLCB2YXJpYWJsZXMsIHZhcmZ1bmMsIG1hdGNoX292ZXJyaWRlcz1GYWxzZSk6CisgICAgIiIiRWRpdCBsaW5lcyBmcm9tIGEgcmVjaXBlIG9yIGNvbmZpZyBmaWxlIGFuZCBtb2RpZnkgb25lIG9yIG1vcmUKKyAgICBzcGVjaWZpZWQgdmFyaWFibGUgdmFsdWVzIHNldCBpbiB0aGUgZmlsZSB1c2luZyBhIHNwZWNpZmllZCBjYWxsYmFjaworICAgIGZ1bmN0aW9uLiBMaW5lcyBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSB0cmFpbGluZyBuZXdsaW5lcy4KKyAgICBQYXJhbWV0ZXJzOgorICAgICAgICBtZXRhX2xpbmVzOiBsaW5lcyBmcm9tIHRoZSBmaWxlOyBjYW4gYmUgYSBsaXN0IG9yIGFuIGl0ZXJhYmxlCisgICAgICAgICAgICAoZS5nLiBmaWxlIHBvaW50ZXIpCisgICAgICAgIHZhcmlhYmxlczogYSBsaXN0IG9mIHZhcmlhYmxlIG5hbWVzIHRvIGxvb2sgZm9yLiBGdW5jdGlvbnMKKyAgICAgICAgICAgIG1heSBhbHNvIGJlIHNwZWNpZmllZCwgYnV0IG11c3QgYmUgc3BlY2lmaWVkIHdpdGggJygpJyBhdAorICAgICAgICAgICAgdGhlIGVuZCBvZiB0aGUgbmFtZS4gTm90ZSB0aGF0IHRoZSBmdW5jdGlvbiBkb2Vzbid0IGhhdmUKKyAgICAgICAgICAgIGFueSBpbnRyaW5zaWMgdW5kZXJzdGFuZGluZyBvZiBfYXBwZW5kLCBfcHJlcGVuZCwgX3JlbW92ZSwKKyAgICAgICAgICAgIG9yIG92ZXJyaWRlcywgc28gdGhlc2UgYXJlIGNvbnNpZGVyZWQgYXMgcGFydCBvZiB0aGUgbmFtZS4KKyAgICAgICAgICAgIFRoZXNlIHZhbHVlcyBnbyBpbnRvIGEgcmVndWxhciBleHByZXNzaW9uLCBzbyByZWd1bGFyCisgICAgICAgICAgICBleHByZXNzaW9uIHN5bnRheCBpcyBhbGxvd2VkLgorICAgICAgICB2YXJmdW5jOiBjYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgZm9yIGV2ZXJ5IHZhcmlhYmxlIG1hdGNoaW5nCisgICAgICAgICAgICBvbmUgb2YgdGhlIGVudHJpZXMgaW4gdGhlIHZhcmlhYmxlcyBwYXJhbWV0ZXIuIFRoZSBmdW5jdGlvbgorICAgICAgICAgICAgc2hvdWxkIHRha2UgZm91ciBhcmd1bWVudHM6CisgICAgICAgICAgICAgICAgdmFybmFtZTogbmFtZSBvZiB2YXJpYWJsZSBtYXRjaGVkCisgICAgICAgICAgICAgICAgb3JpZ3ZhbHVlOiBjdXJyZW50IHZhbHVlIGluIGZpbGUKKyAgICAgICAgICAgICAgICBvcDogdGhlIG9wZXJhdG9yIChlLmcuICcrPScpCisgICAgICAgICAgICAgICAgbmV3bGluZXM6IGxpc3Qgb2YgbGluZXMgdXAgdG8gdGhpcyBwb2ludC4gWW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgdGhpcyB0byBwcmVwZW5kIGxpbmVzIGJlZm9yZSB0aGlzIHZhcmlhYmxlIHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgaWYgeW91IHdpc2guCisgICAgICAgICAgICBhbmQgc2hvdWxkIHJldHVybiBhIHRocmVlLWVsZW1lbnQgdHVwbGU6CisgICAgICAgICAgICAgICAgbmV3dmFsdWU6IG5ldyB2YWx1ZSB0byBzdWJzdGl0dXRlIGluLCBvciBOb25lIHRvIGRyb3AKKyAgICAgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlIHNldHRpbmcgZW50aXJlbHkuIChJZiB0aGUgcmVtb3ZhbAorICAgICAgICAgICAgICAgICAgICByZXN1bHRzIGluIHR3byBjb25zZWN1dGl2ZSBibGFuayBsaW5lcywgb25lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBibGFuayBsaW5lcyB3aWxsIGFsc28gYmUgZHJvcHBlZCkuCisgICAgICAgICAgICAgICAgbmV3b3A6IHRoZSBvcGVyYXRvciB0byB1c2UgLSBpZiB5b3Ugc3BlY2lmeSBOb25lIGhlcmUsCisgICAgICAgICAgICAgICAgICAgIHRoZSBvcmlnaW5hbCBvcGVyYXRpb24gd2lsbCBiZSB1c2VkLgorICAgICAgICAgICAgICAgIGluZGVudDogbnVtYmVyIG9mIHNwYWNlcyB0byBpbmRlbnQgbXVsdGktbGluZSBlbnRyaWVzLAorICAgICAgICAgICAgICAgICAgICBvciAtMSB0byBpbmRlbnQgdXAgdG8gdGhlIGxldmVsIG9mIHRoZSBhc3NpZ25tZW50CisgICAgICAgICAgICAgICAgICAgIGFuZCBvcGVuaW5nIHF1b3RlLCBvciBhIHN0cmluZyB0byB1c2UgYXMgdGhlIGluZGVudC4KKyAgICAgICAgICAgICAgICBtaW5icmVhazogVHJ1ZSB0byBhbGxvdyB0aGUgZmlyc3QgZWxlbWVudCBvZiBhCisgICAgICAgICAgICAgICAgICAgIG11bHRpLWxpbmUgdmFsdWUgdG8gY29udGludWUgb24gdGhlIHNhbWUgbGluZSBhcworICAgICAgICAgICAgICAgICAgICB0aGUgYXNzaWdubWVudCwgRmFsc2UgdG8gaW5kZW50IGJlZm9yZSB0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudC4KKyAgICAgICAgbWF0Y2hfb3ZlcnJpZGVzOiBUcnVlIHRvIG1hdGNoIGl0ZW1zIHdpdGggX292ZXJyaWRlcyBvbiB0aGUgZW5kLAorICAgICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlCisgICAgUmV0dXJucyBhIHR1cGxlOgorICAgICAgICB1cGRhdGVkOgorICAgICAgICAgICAgVHJ1ZSBpZiBjaGFuZ2VzIHdlcmUgbWFkZSwgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICBuZXdsaW5lczoKKyAgICAgICAgICAgIExpbmVzIGFmdGVyIHByb2Nlc3NpbmcKKyAgICAiIiIKKworICAgIHZhcl9yZXMgPSB7fQorICAgIGlmIG1hdGNoX292ZXJyaWRlczoKKyAgICAgICAgb3ZlcnJpZGVfcmUgPSAnKF9bYS16QS1aMC05LV8kKCl7fV0rKT8nCisgICAgZWxzZToKKyAgICAgICAgb3ZlcnJpZGVfcmUgPSAnJworICAgIGZvciB2YXIgaW4gdmFyaWFibGVzOgorICAgICAgICBpZiB2YXIuZW5kc3dpdGgoJygpJyk6CisgICAgICAgICAgICB2YXJfcmVzW3Zhcl0gPSByZS5jb21waWxlKCdeKCVzJXMpWyBcXHRdKlwoWyBcXHRdKlwpWyBcXHRdKnsnICUgKHZhcls6LTJdLnJzdHJpcCgpLCBvdmVycmlkZV9yZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2YXJfcmVzW3Zhcl0gPSByZS5jb21waWxlKCdeKCVzJXMpWyBcXHRdKls/KzouXSo9WysuXSpbIFxcdF0qKFsiXCddKScgJSAodmFyLCBvdmVycmlkZV9yZSkpCisKKyAgICB1cGRhdGVkID0gRmFsc2UKKyAgICB2YXJzZXRfc3RhcnQgPSAnJworICAgIHZhcmxpbmVzID0gW10KKyAgICBuZXdsaW5lcyA9IFtdCisgICAgaW5fdmFyID0gTm9uZQorICAgIGZ1bGxfdmFsdWUgPSAnJworICAgIHZhcl9lbmQgPSAnJworCisgICAgZGVmIGhhbmRsZV92YXJfZW5kKCk6CisgICAgICAgIHByZXJ1bl9uZXdsaW5lcyA9IG5ld2xpbmVzWzpdCisgICAgICAgIG9wID0gdmFyc2V0X3N0YXJ0W2xlbihpbl92YXIpOl0uc3RyaXAoKQorICAgICAgICAobmV3dmFsdWUsIG5ld29wLCBpbmRlbnQsIG1pbmJyZWFrKSA9IHZhcmZ1bmMoaW5fdmFyLCBmdWxsX3ZhbHVlLCBvcCwgbmV3bGluZXMpCisgICAgICAgIGNoYW5nZWQgPSAocHJlcnVuX25ld2xpbmVzICE9IG5ld2xpbmVzKQorCisgICAgICAgIGlmIG5ld3ZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAjIERyb3AgdGhlIHZhbHVlCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbGlmIG5ld3ZhbHVlICE9IGZ1bGxfdmFsdWUgb3IgKG5ld29wIG5vdCBpbiBbTm9uZSwgb3BdKToKKyAgICAgICAgICAgIGlmIG5ld29wIG5vdCBpbiBbTm9uZSwgb3BdOgorICAgICAgICAgICAgICAgICMgQ2FsbGJhY2sgY2hhbmdlZCB0aGUgb3BlcmF0b3IKKyAgICAgICAgICAgICAgICB2YXJzZXRfbmV3ID0gIiVzICVzIiAlIChpbl92YXIsIG5ld29wKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YXJzZXRfbmV3ID0gdmFyc2V0X3N0YXJ0CisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaW5kZW50LCAoaW50LCBsb25nKSk6CisgICAgICAgICAgICAgICAgaWYgaW5kZW50ID09IC0xOgorICAgICAgICAgICAgICAgICAgICBpbmRlbnRzcGMgPSAnICcgKiAobGVuKHZhcnNldF9uZXcpICsgMikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpbmRlbnRzcGMgPSAnICcgKiBpbmRlbnQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5kZW50c3BjID0gaW5kZW50CisgICAgICAgICAgICBpZiBpbl92YXIuZW5kc3dpdGgoJygpJyk6CisgICAgICAgICAgICAgICAgIyBBIGZ1bmN0aW9uIGRlZmluaXRpb24KKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG5ld3ZhbHVlLCBsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyB7XG4lcyVzXG59XG4nICUgKHZhcnNldF9uZXcsIGluZGVudHNwYywgKCdcbiVzJyAlIGluZGVudHNwYykuam9pbihuZXd2YWx1ZSkpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXd2YWx1ZS5zdGFydHN3aXRoKCdcbicpOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3dmFsdWUgPSAnXG4nICsgbmV3dmFsdWUKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5ld3ZhbHVlLmVuZHN3aXRoKCdcbicpOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3dmFsdWUgPSBuZXd2YWx1ZSArICdcbicKKyAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyB7JXN9XG4nICUgKHZhcnNldF9uZXcsIG5ld3ZhbHVlKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBOb3JtYWwgdmFyaWFibGUKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG5ld3ZhbHVlLCBsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5ld3ZhbHVlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBFbXB0eSBsaXN0IC0+IGVtcHR5IHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyAiIlxuJyAlIHZhcnNldF9uZXcpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgbWluYnJlYWs6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEZpcnN0IGl0ZW0gb24gZmlyc3QgbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKG5ld3ZhbHVlKSA9PSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnJXMgIiVzIlxuJyAlICh2YXJzZXRfbmV3LCBuZXd2YWx1ZVswXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnJXMgIiVzIFxcXG4nICUgKHZhcnNldF9uZXcsIG5ld3ZhbHVlWzBdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBuZXd2YWx1ZVsxOl06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnJXMlcyBcXFxuJyAlIChpbmRlbnRzcGMsIGl0ZW0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnJXMiXG4nICUgaW5kZW50c3BjKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBObyBpdGVtIG9uIGZpcnN0IGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnJXMgIiBcXFxuJyAlIHZhcnNldF9uZXcpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBuZXd2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzJXMgXFxcbicgJSAoaW5kZW50c3BjLCBpdGVtKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnJXMiXG4nICUgaW5kZW50c3BjKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnJXMgIiVzIlxuJyAlICh2YXJzZXRfbmV3LCBuZXd2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBQdXQgdGhlIG9sZCBsaW5lcyBiYWNrIHdoZXJlIHRoZXkgd2VyZQorICAgICAgICAgICAgbmV3bGluZXMuZXh0ZW5kKHZhcmxpbmVzKQorICAgICAgICAgICAgIyBJZiBuZXdsaW5lcyB3YXMgdG91Y2hlZCBieSB0aGUgZnVuY3Rpb24sIHdlJ2xsIG5lZWQgdG8gcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkCisKKyAgICBjaGVja3NwYyA9IEZhbHNlCisKKyAgICBmb3IgbGluZSBpbiBtZXRhX2xpbmVzOgorICAgICAgICBpZiBpbl92YXI6CisgICAgICAgICAgICB2YWx1ZSA9IGxpbmUucnN0cmlwKCkKKyAgICAgICAgICAgIHZhcmxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgaWYgaW5fdmFyLmVuZHN3aXRoKCcoKScpOgorICAgICAgICAgICAgICAgIGZ1bGxfdmFsdWUgKz0gJ1xuJyArIHZhbHVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZ1bGxfdmFsdWUgKz0gdmFsdWVbOi0xXQorICAgICAgICAgICAgaWYgdmFsdWUuZW5kc3dpdGgodmFyX2VuZCk6CisgICAgICAgICAgICAgICAgaWYgaW5fdmFyLmVuZHN3aXRoKCcoKScpOgorICAgICAgICAgICAgICAgICAgICBpZiBmdWxsX3ZhbHVlLmNvdW50KCd7JykgLSBmdWxsX3ZhbHVlLmNvdW50KCd9JykgPj0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZnVsbF92YWx1ZSA9IGZ1bGxfdmFsdWVbOi0xXQorICAgICAgICAgICAgICAgIGlmIGhhbmRsZV92YXJfZW5kKCk6CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGNoZWNrc3BjID0gVHJ1ZQorICAgICAgICAgICAgICAgIGluX3ZhciA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNraXAgPSBGYWxzZQorICAgICAgICAgICAgZm9yICh2YXJuYW1lLCB2YXJfcmUpIGluIHZhcl9yZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgcmVzID0gdmFyX3JlLm1hdGNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgICAgICAgICBpc2Z1bmMgPSB2YXJuYW1lLmVuZHN3aXRoKCcoKScpCisgICAgICAgICAgICAgICAgICAgIGlmIGlzZnVuYzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsdWUgPSBsaW5lLnNwbGl0KCd7JywgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcl9lbmQgPSAnfScKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcl9lbmQgPSByZXMuZ3JvdXBzKClbLTFdCisgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHZhbHVlID0gbGluZS5zcGxpdCh2YXJfZW5kLCAxKQorICAgICAgICAgICAgICAgICAgICB2YXJzZXRfc3RhcnQgPSBzcGxpdHZhbHVlWzBdLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3BsaXR2YWx1ZVsxXS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNmdW5jIGFuZCB2YWx1ZS5lbmRzd2l0aCgnXFwnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbOi0xXQorICAgICAgICAgICAgICAgICAgICBmdWxsX3ZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgdmFybGluZXMgPSBbbGluZV0KKyAgICAgICAgICAgICAgICAgICAgaW5fdmFyID0gcmVzLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgIGlmIGlzZnVuYzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluX3ZhciArPSAnKCknCisgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlLmVuZHN3aXRoKHZhcl9lbmQpOgorICAgICAgICAgICAgICAgICAgICAgICAgZnVsbF92YWx1ZSA9IGZ1bGxfdmFsdWVbOi0xXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaGFuZGxlX3Zhcl9lbmQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrc3BjID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgaW5fdmFyID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBza2lwID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgbm90IHNraXA6CisgICAgICAgICAgICAgICAgaWYgY2hlY2tzcGM6CisgICAgICAgICAgICAgICAgICAgIGNoZWNrc3BjID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgbmV3bGluZXNbLTFdID09ICdcbicgYW5kIGxpbmUgPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgU3F1YXNoIGJsYW5rIGxpbmUgaWYgdGhlcmUgYXJlIHR3byBjb25zZWN1dGl2ZSBibGFua3MgYWZ0ZXIgYSByZW1vdmFsCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZChsaW5lKQorICAgIHJldHVybiAodXBkYXRlZCwgbmV3bGluZXMpCisKKworZGVmIGVkaXRfbWV0YWRhdGFfZmlsZShtZXRhX2ZpbGUsIHZhcmlhYmxlcywgdmFyZnVuYyk6CisgICAgIiIiRWRpdCBhIHJlY2lwZSBvciBjb25maWcgZmlsZSBhbmQgbW9kaWZ5IG9uZSBvciBtb3JlIHNwZWNpZmllZAorICAgIHZhcmlhYmxlIHZhbHVlcyBzZXQgaW4gdGhlIGZpbGUgdXNpbmcgYSBzcGVjaWZpZWQgY2FsbGJhY2sgZnVuY3Rpb24uCisgICAgVGhlIGZpbGUgaXMgb25seSB3cml0dGVuIHRvIGlmIHRoZSB2YWx1ZShzKSBhY3R1YWxseSBjaGFuZ2UuCisgICAgVGhpcyBpcyBiYXNpY2FsbHkgdGhlIGZpbGUgdmVyc2lvbiBvZiBlZGl0X21ldGFkYXRhKCksIHNlZSB0aGF0CisgICAgZnVuY3Rpb24ncyBkZXNjcmlwdGlvbiBmb3IgcGFyYW1ldGVyL3VzYWdlIGluZm9ybWF0aW9uLgorICAgIFJldHVybnMgVHJ1ZSBpZiB0aGUgZmlsZSB3YXMgd3JpdHRlbiB0bywgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICIiIgorICAgIHdpdGggb3BlbihtZXRhX2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgKHVwZGF0ZWQsIG5ld2xpbmVzKSA9IGVkaXRfbWV0YWRhdGEoZiwgdmFyaWFibGVzLCB2YXJmdW5jKQorICAgIGlmIHVwZGF0ZWQ6CisgICAgICAgIHdpdGggb3BlbihtZXRhX2ZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGVsaW5lcyhuZXdsaW5lcykKKyAgICByZXR1cm4gdXBkYXRlZAorCisKK2RlZiBlZGl0X2JibGF5ZXJzX2NvbmYoYmJsYXllcnNfY29uZiwgYWRkLCByZW1vdmUpOgorICAgICIiIkVkaXQgYmJsYXllcnMuY29uZiwgYWRkaW5nIGFuZC9vciByZW1vdmluZyBsYXllcnMiIiIKKworICAgIGltcG9ydCBmbm1hdGNoCisKKyAgICBkZWYgcmVtb3ZlX3RyYWlsaW5nX3NlcChwdGgpOgorICAgICAgICBpZiBwdGggYW5kIHB0aFstMV0gPT0gb3Muc2VwOgorICAgICAgICAgICAgcHRoID0gcHRoWzotMV0KKyAgICAgICAgcmV0dXJuIHB0aAorCisgICAgZGVmIGxheWVybGlzdF9wYXJhbSh2YWx1ZSk6CisgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgorICAgICAgICAgICAgcmV0dXJuIFtyZW1vdmVfdHJhaWxpbmdfc2VwKHgpIGZvciB4IGluIHZhbHVlXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFtyZW1vdmVfdHJhaWxpbmdfc2VwKHZhbHVlKV0KKworICAgIG5vdGFkZGVkID0gW10KKyAgICBub3RyZW1vdmVkID0gW10KKworICAgIGFkZGxheWVycyA9IGxheWVybGlzdF9wYXJhbShhZGQpCisgICAgcmVtb3ZlbGF5ZXJzID0gbGF5ZXJsaXN0X3BhcmFtKHJlbW92ZSkKKworICAgICMgTmVlZCB0byB1c2UgYSBsaXN0IGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBzZXQgbm9uLWxvY2FsIHZhcmlhYmxlcyBmcm9tIGEgY2FsbGJhY2sgaW4gcHl0aG9uIDIueAorICAgIGJibGF5ZXJjYWxscyA9IFtdCisKKyAgICBkZWYgaGFuZGxlX2JibGF5ZXJzKHZhcm5hbWUsIG9yaWd2YWx1ZSwgb3AsIG5ld2xpbmVzKToKKyAgICAgICAgYmJsYXllcmNhbGxzLmFwcGVuZCh2YXJuYW1lKQorICAgICAgICB1cGRhdGVkID0gRmFsc2UKKyAgICAgICAgYmJsYXllcnMgPSBbcmVtb3ZlX3RyYWlsaW5nX3NlcCh4KSBmb3IgeCBpbiBvcmlndmFsdWUuc3BsaXQoKV0KKyAgICAgICAgaWYgcmVtb3ZlbGF5ZXJzOgorICAgICAgICAgICAgZm9yIHJlbW92ZWxheWVyIGluIHJlbW92ZWxheWVyczoKKyAgICAgICAgICAgICAgICBtYXRjaGVkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBmb3IgbGF5ZXIgaW4gYmJsYXllcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChsYXllciwgcmVtb3ZlbGF5ZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBiYmxheWVycy5yZW1vdmUobGF5ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIG5vdCBtYXRjaGVkOgorICAgICAgICAgICAgICAgICAgICBub3RyZW1vdmVkLmFwcGVuZChyZW1vdmVsYXllcikKKyAgICAgICAgaWYgYWRkbGF5ZXJzOgorICAgICAgICAgICAgZm9yIGFkZGxheWVyIGluIGFkZGxheWVyczoKKyAgICAgICAgICAgICAgICBpZiBhZGRsYXllciBub3QgaW4gYmJsYXllcnM6CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJibGF5ZXJzLmFwcGVuZChhZGRsYXllcikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBub3RhZGRlZC5hcHBlbmQoYWRkbGF5ZXIpCisKKyAgICAgICAgaWYgdXBkYXRlZDoKKyAgICAgICAgICAgIHJldHVybiAoYmJsYXllcnMsIE5vbmUsIDIsIEZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIChvcmlndmFsdWUsIE5vbmUsIDIsIEZhbHNlKQorCisgICAgZWRpdF9tZXRhZGF0YV9maWxlKGJibGF5ZXJzX2NvbmYsIFsnQkJMQVlFUlMnXSwgaGFuZGxlX2JibGF5ZXJzKQorCisgICAgaWYgbm90IGJibGF5ZXJjYWxsczoKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdVbmFibGUgdG8gZmluZCBCQkxBWUVSUyBpbiAlcycgJSBiYmxheWVyc19jb25mKQorCisgICAgcmV0dXJuIChub3RhZGRlZCwgbm90cmVtb3ZlZCkKKworCitkZWYgZ2V0X2ZpbGVfbGF5ZXIoZmlsZW5hbWUsIGQpOgorICAgICIiIkRldGVybWluZSB0aGUgY29sbGVjdGlvbiAoYXMgZGVmaW5lZCBieSBhIGxheWVyJ3MgbGF5ZXIuY29uZiBmaWxlKSBjb250YWluaW5nIHRoZSBzcGVjaWZpZWQgZmlsZSIiIgorICAgIGNvbGxlY3Rpb25zID0gKGQuZ2V0VmFyKCdCQkZJTEVfQ09MTEVDVElPTlMnLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgIGNvbGxlY3Rpb25fcmVzID0ge30KKyAgICBmb3IgY29sbGVjdGlvbiBpbiBjb2xsZWN0aW9uczoKKyAgICAgICAgY29sbGVjdGlvbl9yZXNbY29sbGVjdGlvbl0gPSBkLmdldFZhcignQkJGSUxFX1BBVFRFUk5fJXMnICUgY29sbGVjdGlvbiwgVHJ1ZSkgb3IgJycKKworICAgIGRlZiBwYXRoX3RvX2xheWVyKHBhdGgpOgorICAgICAgICAjIFVzZSBsb25nZXN0IHBhdGggc28gd2UgaGFuZGxlIG5lc3RlZCBsYXllcnMKKyAgICAgICAgbWF0Y2hsZW4gPSAwCisgICAgICAgIG1hdGNoID0gTm9uZQorICAgICAgICBmb3IgY29sbGVjdGlvbiwgcmVnZXggaW4gY29sbGVjdGlvbl9yZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBsZW4ocmVnZXgpID4gbWF0Y2hsZW4gYW5kIHJlLm1hdGNoKHJlZ2V4LCBwYXRoKToKKyAgICAgICAgICAgICAgICBtYXRjaGxlbiA9IGxlbihyZWdleCkKKyAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbGxlY3Rpb24KKyAgICAgICAgcmV0dXJuIG1hdGNoCisKKyAgICByZXN1bHQgPSBOb25lCisgICAgYmJmaWxlcyA9IChkLmdldFZhcignQkJGSUxFUycsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgYmJmaWxlc21hdGNoID0gRmFsc2UKKyAgICBmb3IgYmJmaWxlc2VudHJ5IGluIGJiZmlsZXM6CisgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChmaWxlbmFtZSwgYmJmaWxlc2VudHJ5KToKKyAgICAgICAgICAgIGJiZmlsZXNtYXRjaCA9IFRydWUKKyAgICAgICAgICAgIHJlc3VsdCA9IHBhdGhfdG9fbGF5ZXIoYmJmaWxlc2VudHJ5KQorCisgICAgaWYgbm90IGJiZmlsZXNtYXRjaDoKKyAgICAgICAgIyBQcm9iYWJseSBhIGJiY2xhc3MKKyAgICAgICAgcmVzdWx0ID0gcGF0aF90b19sYXllcihmaWxlbmFtZSkKKworICAgIHJldHVybiByZXN1bHQKKworCisjIENvbnN0YW50IHRha2VuIGZyb20gaHR0cDovL2xpbnV4LmRpZS5uZXQvaW5jbHVkZS9saW51eC9wcmN0bC5oCitQUl9TRVRfUERFQVRIU0lHID0gMQorCitjbGFzcyBQckN0bEVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitkZWYgc2lnbmFsX29uX3BhcmVudF9leGl0KHNpZ25hbWUpOgorICAgICIiIgorICAgIFRyaWdnZXIgc2lnbmFtZSB0byBiZSBzZW50IHdoZW4gdGhlIHBhcmVudCBwcm9jZXNzIGRpZXMKKyAgICAiIiIKKyAgICBzaWdudW0gPSBnZXRhdHRyKHNpZ25hbCwgc2lnbmFtZSkKKyAgICAjIGh0dHA6Ly9saW51eC5kaWUubmV0L21hbi8yL3ByY3RsCisgICAgcmVzdWx0ID0gY2RsbFsnbGliYy5zby42J10ucHJjdGwoUFJfU0VUX1BERUFUSFNJRywgc2lnbnVtKQorICAgIGlmIHJlc3VsdCAhPSAwOgorICAgICAgICByYWlzZSBQckN0bEVycm9yKCdwcmN0bCBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVzJyAlIHJlc3VsdCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L0FVVEhPUlMudHh0IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvQVVUSE9SUy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFjOGZjYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L0FVVEhPUlMudHh0CkBAIC0wLDAgKzEsNDMgQEAKK0JlaG9sZCwgbW9ydGFsLCB0aGUgb3JpZ2lucyBvZiBCZWF1dGlmdWwgU291cC4uLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0xlb25hcmQgUmljaGFyZHNvbiBpcyB0aGUgcHJpbWFyeSBwcm9ncmFtbWVyLgorCitBYXJvbiBEZVZvcmUgaXMgYXdlc29tZS4KKworTWFyayBQaWxncmltIHByb3ZpZGVkIHRoZSBlbmNvZGluZyBkZXRlY3Rpb24gY29kZSB0aGF0IGZvcm1zIHRoZSBiYXNlCitvZiBVbmljb2RlRGFtbWl0LgorCitUaG9tYXMgS2x1eXZlciBhbmQgRXppbyBNZWxvdHRpIGZpbmlzaGVkIHRoZSB3b3JrIG9mIGdldHRpbmcgQmVhdXRpZnVsCitTb3VwIDQgd29ya2luZyB1bmRlciBQeXRob24gMy4KKworU2ltb24gV2lsbGlzb24gd3JvdGUgc291cHNlbGVjdCwgd2hpY2ggd2FzIHVzZWQgdG8gbWFrZSBCZWF1dGlmdWwgU291cAorc3VwcG9ydCBDU1Mgc2VsZWN0b3JzLgorCitTYW0gUnVieSBoZWxwZWQgd2l0aCBhIGxvdCBvZiBlZGdlIGNhc2VzLgorCitKb25hdGhhbiBFbGxpcyB3YXMgYXdhcmRlZCB0aGUgcHJlc3RpZ291cyBCZWF1IFBvdGFnZSBEJ09yIGZvciBoaXMKK3dvcmsgaW4gc29sdmluZyB0aGUgbmVzdGFibGUgdGFncyBjb251bmRydW0uCisKK0FuIGluY29tcGxldGUgbGlzdCBvZiBwZW9wbGUgaGF2ZSBjb250cmlidXRlZCBwYXRjaGVzIHRvIEJlYXV0aWZ1bAorU291cDoKKworIElzdHZhbiBBbGJlcnQsIEFuZHJldyBMaW4sIEFudGhvbnkgQmF4dGVyLCBBbmRyZXcgQm95a28sIFRvbnkgQ2hhbmcsCisgWmVwaHlyIEZhbmcsIEZ1enp5LCBSb21hbiBHYXVmbWFuLCBZb25pIEdpbGFkLCBSaWNoaWUgSGluZGxlLCBQZXRlcmlzCisgS3J1bWlucywgS2VudCBKb2huc29uLCBCZW4gTGFzdCwgUm9iZXJ0IExlZnR3aWNoLCBTdGFmZmFuIE1hbG1ncmVuLAorIEtzZW5pYSBNYXJhc2Fub3ZhLCBKUCBNb2lucywgQWRhbSBNb25zZW4sIEpvaG4gTmFnbGUsICJKb24iLCBFZAorIE9za2lld2ljeiwgR3JlZyBQaGlsbGlwcywgR2lsZXMgUmFkZm9yZCwgQXJ0aHVyIFJ1ZG9scGgsIE1hcmtvCisgU2FtYXN0dXIsIEpvdW5pIFNlcHDkbmVuLCBBbGV4YW5kZXIgU2NobW9sY2ssIEFuZHkgVGhleWVycywgR2x5bgorIFdlYnN0ZXIsIFBhdWwgV3JpZ2h0LCBEYW5ueSBZb28KKworQW4gaW5jb21wbGV0ZSBsaXN0IG9mIHBlb3BsZSB3aG8gbWFkZSBzdWdnZXN0aW9ucyBvciBmb3VuZCBidWdzIG9yCitmb3VuZCB3YXlzIHRvIGJyZWFrIEJlYXV0aWZ1bCBTb3VwOgorCisgSGFubm8gQvZjaywgTWF0dGVvIEJlcnRpbmksIENocmlzIEN1cnZleSwgU2ltb24gQ3VzYWNrLCBCcnVjZSBFY2tlbCwKKyBNYXR0IEVybnN0LCBNaWNoYWVsIEZvb3JkLCBUb20gSGFycmlzLCBCaWxsIGRlIGhPcmEsIERvbmFsZCBIb3dlcywKKyBNYXR0IFBhdHRlcnNvbiwgU2NvdHQgUm9iZXJ0cywgU3RldmUgU3RyYXNzbWFubiwgTWlrZSBXaWxsaWFtcywKKyB3YXJjaGlsZCBhdCByZWRobyBkb3QgY29tLCBTYW1pIEt1aXNtYSwgQ2FybG9zIFJvY2hhLCBCb2IgSHV0Y2hpc29uLAorIEpvcmVuIE1jLCBNaWNoYWwgTWlndXJza2ksIEpvaG4gS2xldmVuLCBUaW0gSGVhbmV5LCBUcmlwcCBMaWxsZXksIEVkCisgU3VtbWVycywgRGVubmlzIFN1dGNoLCBDaHJpcyBTbWl0aCwgQWFyb24gU3dlZXBeVyBTd2FydHosIFN0dWFydAorIFR1cm5lciwgR3JlZyBFZHdhcmRzLCBLZXZpbiBKIEthbHVwc29uLCBOaWtvcyBLb3VyZW1lbm9zLCBBcnR1ciBkZQorIFNvdXNhIFJvY2hhLCBZaWNodW4gV2VpLCBQZXIgVm9nbnNlbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvQ09QWUlORy50eHQgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9DT1BZSU5HLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjY4ZDEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvQ09QWUlORy50eHQKQEAgLTAsMCArMSwyNiBAQAorQmVhdXRpZnVsIFNvdXAgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOgorCisgQ29weXJpZ2h0IChjKSAyMDA0LTIwMTIgTGVvbmFyZCBSaWNoYXJkc29uCisKKyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyBTT0ZUV0FSRSwgREFNTUlULgorCitCZWF1dGlmdWwgU291cCBpbmNvcnBvcmF0ZXMgY29kZSBmcm9tIHRoZSBodG1sNWxpYiBsaWJyYXJ5LCB3aGljaCBpcworYWxzbyBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9ORVdTLnR4dCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L05FV1MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YTYwYTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9ORVdTLnR4dApAQCAtMCwwICsxLDEwNjYgQEAKKz0gNC4zLjIgKDIwMTMxMDAyKSA9CisKKyogRml4ZWQgYSBidWcgaW4gd2hpY2ggc2hvcnQgVW5pY29kZSBpbnB1dCB3YXMgaW1wcm9wZXJseSBlbmNvZGVkIHRvCisgIEFTQ0lJIHdoZW4gY2hlY2tpbmcgd2hldGhlciBvciBub3QgaXQgd2FzIHRoZSBuYW1lIG9mIGEgZmlsZSBvbgorICBkaXNrLiBbYnVnPTEyMjcwMTZdCisKKyogRml4ZWQgYSBjcmFzaCB3aGVuIGEgc2hvcnQgaW5wdXQgY29udGFpbnMgZGF0YSBub3QgdmFsaWQgaW4KKyAgZmlsZW5hbWVzLiBbYnVnPTEyMzI2MDRdCisKKyogRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgVW5pY29kZSBkYXRhIHB1dCBpbnRvIFVuaWNvZGVEYW1taXQgdG8KKyAgcmV0dXJuIE5vbmUgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgZGF0YS4gW2J1Zz0xMjE0OTgzXQorCisqIENvbWJpbmVkIHR3byB0ZXN0cyB0byBzdG9wIGEgc3B1cmlvdXMgdGVzdCBmYWlsdXJlIHdoZW4gdGVzdHMgYXJlCisgIHJ1biBieSBub3NldGVzdHMuIFtidWc9MTIxMjQ0NV0KKworPSA0LjMuMSAoMjAxMzA4MTUpID0KKworKiBGaXhlZCB5ZXQgYW5vdGhlciBwcm9ibGVtIHdpdGggdGhlIGh0bWw1bGliIHRyZWUgYnVpbGRlciwgY2F1c2VkIGJ5CisgIGh0bWw1bGliJ3MgdGVuZGVuY3kgdG8gcmVhcnJhbmdlIHRoZSB0cmVlIGR1cmluZworICBwYXJzaW5nLiBbYnVnPTExODkyNjddCisKKyogRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgdGhlIG9wdGltaXplZCB2ZXJzaW9uIG9mIGZpbmRfYWxsKCkgdG8KKyAgcmV0dXJuIG5vdGhpbmcuIFtidWc9MTIxMjY1NV0KKworPSA0LjMuMCAoMjAxMzA4MTIpID0KKworKiBJbnN0ZWFkIG9mIGNvbnZlcnRpbmcgaW5jb21pbmcgZGF0YSB0byBVbmljb2RlIGFuZCBmZWVkaW5nIGl0IHRvIHRoZQorICBseG1sIHRyZWUgYnVpbGRlciBpbiBjaHVua3MsIEJlYXV0aWZ1bCBTb3VwIG5vdyBtYWtlcyBzdWNjZXNzaXZlCisgIGd1ZXNzZXMgYXQgdGhlIGVuY29kaW5nIG9mIHRoZSBpbmNvbWluZyBkYXRhLCBhbmQgdGVsbHMgbHhtbCB0bworICBwYXJzZSB0aGUgZGF0YSBhcyB0aGF0IGVuY29kaW5nLiBHaXZpbmcgbHhtbCBtb3JlIGNvbnRyb2wgb3ZlciB0aGUKKyAgcGFyc2luZyBwcm9jZXNzIGltcHJvdmVzIHBlcmZvcm1hbmNlIGFuZCBhdm9pZHMgYSBudW1iZXIgb2YgYnVncyBhbmQKKyAgaXNzdWVzIHdpdGggdGhlIGx4bWwgcGFyc2VyIHdoaWNoIGhhZCBwcmV2aW91c2x5IHJlcXVpcmVkIGVsYWJvcmF0ZQorICB3b3JrYXJvdW5kczoKKworICAtIEFuIGlzc3VlIGluIHdoaWNoIGx4bWwgcmVmdXNlcyB0byBwYXJzZSBVbmljb2RlIHN0cmluZ3Mgb24gc29tZQorICAgIHN5c3RlbXMuIFtidWc9MTE4MDUyN10KKworICAtIEEgcmV0dXJuaW5nIGJ1ZyB0aGF0IHRydW5jYXRlZCBkb2N1bWVudHMgbG9uZ2VyIHRoYW4gYSAodmVyeQorICAgIHNtYWxsKSBzaXplLiBbYnVnPTk2Mzg4MF0KKworICAtIEEgcmV0dXJuaW5nIGJ1ZyBpbiB3aGljaCBleHRyYSBzcGFjZXMgd2VyZSBhZGRlZCB0byBhIGRvY3VtZW50IGlmCisgICAgdGhlIGRvY3VtZW50IGRlZmluZWQgYSBjaGFyc2V0IG90aGVyIHRoYW4gVVRGLTguIFtidWc9OTcyNDY2XQorCisgIFRoaXMgcmVxdWlyZWQgYSBtYWpvciBvdmVyaGF1bCBvZiB0aGUgdHJlZSBidWlsZGVyIGFyY2hpdGVjdHVyZS4gSWYKKyAgeW91IHdyb3RlIHlvdXIgb3duIHRyZWUgYnVpbGRlciBhbmQgZGlkbid0IHRlbGwgbWUsIHlvdSdsbCBuZWVkIHRvCisgIG1vZGlmeSB5b3VyIHByZXBhcmVfbWFya3VwKCkgbWV0aG9kLgorCisqIFRoZSBVbmljb2RlRGFtbWl0IGNvZGUgdGhhdCBtYWtlcyBndWVzc2VzIGF0IGVuY29kaW5ncyBoYXMgYmVlbgorICBzcGxpdCBpbnRvIGl0cyBvd24gY2xhc3MsIEVuY29kaW5nRGV0ZWN0b3IuIEEgbG90IG9mIGFwcGFyZW50bHkKKyAgcmVkdW5kYW50IGNvZGUgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIFVuaWNvZGUsIERhbW1pdCwgYW5kIHNvbWUKKyAgdW5kb2N1bWVudGVkIGZlYXR1cmVzIGhhdmUgYWxzbyBiZWVuIHJlbW92ZWQuCisKKyogQmVhdXRpZnVsIFNvdXAgd2lsbCBpc3N1ZSBhIHdhcm5pbmcgaWYgaW5zdGVhZCBvZiBtYXJrdXAgeW91IHBhc3MgaXQKKyAgYSBVUkwgb3IgdGhlIG5hbWUgb2YgYSBmaWxlIG9uIGRpc2sgKGEgY29tbW9uIGJlZ2lubmVyJ3MgbWlzdGFrZSkuCisKKyogQSBudW1iZXIgb2Ygb3B0aW1pemF0aW9ucyBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgbHhtbCB0cmVlCisgIGJ1aWxkZXIgYnkgYWJvdXQgMzMlLCB0aGUgaHRtbC5wYXJzZXIgdHJlZSBidWlsZGVyIGJ5IGFib3V0IDIwJSwgYW5kCisgIHRoZSBodG1sNWxpYiB0cmVlIGJ1aWxkZXIgYnkgYWJvdXQgMTUlLgorCisqIEFsbCBmaW5kX2FsbCBjYWxscyBzaG91bGQgbm93IHJldHVybiBhIFJlc3VsdFNldCBvYmplY3QuIFBhdGNoIGJ5CisgIEFhcm9uIERlVm9yZS4gW2J1Zz0xMTk0MDM0XQorCis9IDQuMi4xICgyMDEzMDUzMSkgPQorCisqIFRoZSBkZWZhdWx0IFhNTCBmb3JtYXR0ZXIgd2lsbCBub3cgcmVwbGFjZSBhbXBlcnNhbmRzIGV2ZW4gaWYgdGhleQorICBhcHBlYXIgdG8gYmUgcGFydCBvZiBlbnRpdGllcy4gVGhhdCBpcywgIiZsdDsiIHdpbGwgYmVjb21lCisgICImYW1wO2x0OyIuIFRoZSBvbGQgY29kZSB3YXMgbGVmdCBvdmVyIGZyb20gQmVhdXRpZnVsIFNvdXAgMywgd2hpY2gKKyAgZGlkbid0IGFsd2F5cyB0dXJuIGVudGl0aWVzIGludG8gVW5pY29kZSBjaGFyYWN0ZXJzLgorCisgIElmIHlvdSByZWFsbHkgd2FudCB0aGUgb2xkIGJlaGF2aW9yIChtYXliZSBiZWNhdXNlIHlvdSBhZGQgbmV3CisgIHN0cmluZ3MgdG8gdGhlIHRyZWUsIHRob3NlIHN0cmluZ3MgaW5jbHVkZSBlbnRpdGllcywgYW5kIHlvdSB3YW50CisgIHRoZSBmb3JtYXR0ZXIgdG8gbGVhdmUgdGhlbSBhbG9uZSBvbiBvdXRwdXQpLCBpdCBjYW4gYmUgZm91bmQgaW4KKyAgRW50aXR5U3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVfeG1sX2NvbnRhaW5pbmdfZW50aXRpZXMoKS4gW2J1Zz0xMTgyMTgzXQorCisqIEdhdmUgbmV3X3N0cmluZygpIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBzdWJjbGFzc2VzIG9mCisgIE5hdmlnYWJsZVN0cmluZy4gW2J1Zz0xMTgxOTg2XQorCisqIEZpeGVkIGFub3RoZXIgYnVnIGJ5IHdoaWNoIHRoZSBodG1sNWxpYiB0cmVlIGJ1aWxkZXIgY291bGQgY3JlYXRlIGEKKyAgZGlzY29ubmVjdGVkIHRyZWUuIFtidWc9MTE4MjA4OV0KKworKiBUaGUgLnByZXZpb3VzX2VsZW1lbnQgb2YgYSBCZWF1dGlmdWxTb3VwIG9iamVjdCBpcyBub3cgYWx3YXlzIE5vbmUsCisgIG5vdCB0aGUgbGFzdCBlbGVtZW50IHRvIGJlIHBhcnNlZC4gW2J1Zz0xMTgyMDg5XQorCisqIEZpeGVkIHRlc3QgZmFpbHVyZXMgd2hlbiBseG1sIGlzIG5vdCBpbnN0YWxsZWQuIFtidWc9MTE4MTU4OV0KKworKiBodG1sNWxpYiBub3cgc3VwcG9ydHMgUHl0aG9uIDMuIEZpeGVkIHNvbWUgUHl0aG9uIDItc3BlY2lmaWMKKyAgY29kZSBpbiB0aGUgaHRtbDVsaWIgdGVzdCBzdWl0ZS4gW2J1Zz0xMTgxNjI0XQorCisqIFRoZSBodG1sLnBhcnNlciB0cmVlYnVpbGRlciBjYW4gbm93IGhhbmRsZSBudW1lcmljIGF0dHJpYnV0ZXMgaW4KKyAgdGV4dCB3aGVuIHRoZSBoZXhpZGVjaW1hbCBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgc3RhcnRzIHdpdGggYQorICBjYXBpdGFsIFguIFBhdGNoIGJ5IFRpbSBTaGlybGV5LiBbYnVnPTExODYyNDJdCisKKz0gNC4yLjAgKDIwMTMwNTE0KSA9CisKKyogVGhlIFRhZy5zZWxlY3QoKSBtZXRob2Qgbm93IHN1cHBvcnRzIGEgbXVjaCB3aWRlciB2YXJpZXR5IG9mIENTUworICBzZWxlY3RvcnMuCisKKyAtIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBhZGphY2VudCBzaWJsaW5nIGNvbWJpbmF0b3IgKCspIGFuZCB0aGUKKyAgIGdlbmVyYWwgc2libGluZyBjb21iaW5hdG9yICh+KS4gVGVzdHMgYnkgImxpcXVpZGVyIi4gW2J1Zz0xMDgyMTQ0XQorCisgLSBUaGUgY29tYmluYXRvcnMgKD4sICssIGFuZCB+KSBjYW4gbm93IGNvbWJpbmUgd2l0aCBhbnkgc3VwcG9ydGVkCisgICBzZWxlY3Rvciwgbm90IGp1c3Qgb25lIHRoYXQgc2VsZWN0cyBiYXNlZCBvbiB0YWcgbmFtZS4KKworIC0gQWRkZWQgbGltaXRlZCBzdXBwb3J0IGZvciB0aGUgIm50aC1vZi10eXBlIiBwc2V1ZG8tY2xhc3MuIENvZGUKKyAgIGJ5IFN2ZW4gU2xvb3R3ZWcuIFtidWc9MTEwOTk1Ml0KKworKiBUaGUgQmVhdXRpZnVsU291cCBjbGFzcyBpcyBub3cgYWxpYXNlZCB0byAiX3MiIGFuZCAiX3NvdXAiLCBtYWtpbmcKKyAgaXQgcXVpY2tlciB0byB0eXBlIHRoZSBpbXBvcnQgc3RhdGVtZW50IGluIGFuIGludGVyYWN0aXZlIHNlc3Npb246CisKKyAgZnJvbSBiczQgaW1wb3J0IF9zCisgICBvcgorICBmcm9tIGJzNCBpbXBvcnQgX3NvdXAKKworICBUaGUgYWxpYXMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLCBzbyBkb24ndCB1c2UgdGhpcyBpbiBjb2RlIHlvdSdyZQorICBnb2luZyB0byBydW4gbW9yZSB0aGFuIG9uY2UuCisKKyogQWRkZWQgdGhlICdkaWFnbm9zZScgc3VibW9kdWxlLCB3aGljaCBpbmNsdWRlcyBzZXZlcmFsIHVzZWZ1bAorICBmdW5jdGlvbnMgZm9yIHJlcG9ydGluZyBwcm9ibGVtcyBhbmQgZG9pbmcgdGVjaCBzdXBwb3J0LgorCisgIC0gZGlhZ25vc2UoZGF0YSkgdHJpZXMgdGhlIGdpdmVuIG1hcmt1cCBvbiBldmVyeSBpbnN0YWxsZWQgcGFyc2VyLAorICAgIHJlcG9ydGluZyBleGNlcHRpb25zIGFuZCBkaXNwbGF5aW5nIHN1Y2Nlc3Nlcy4gSWYgYSBwYXJzZXIgaXMgbm90CisgICAgaW5zdGFsbGVkLCBkaWFnbm9zZSgpIG1lbnRpb25zIHRoaXMgZmFjdC4KKworICAtIGx4bWxfdHJhY2UoZGF0YSwgaHRtbD1UcnVlKSBydW5zIHRoZSBnaXZlbiBtYXJrdXAgdGhyb3VnaCBseG1sJ3MKKyAgICBYTUwgcGFyc2VyIG9yIEhUTUwgcGFyc2VyLCBhbmQgcHJpbnRzIG91dCB0aGUgcGFyc2VyIGV2ZW50cyBhcworICAgIHRoZXkgaGFwcGVuLiBUaGlzIGhlbHBzIHlvdSBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIGEgZ2l2ZW4KKyAgICBwcm9ibGVtIG9jY3VycyBpbiBseG1sIGNvZGUgb3IgQmVhdXRpZnVsIFNvdXAgY29kZS4KKworICAtIGh0bWxwYXJzZXJfdHJhY2UoZGF0YSkgaXMgdGhlIHNhbWUgdGhpbmcsIGJ1dCBmb3IgUHl0aG9uJ3MKKyAgICBidWlsdC1pbiBIVE1MUGFyc2VyIGNsYXNzLgorCisqIEluIGFuIEhUTUwgZG9jdW1lbnQsIHRoZSBjb250ZW50cyBvZiBhIDxzY3JpcHQ+IG9yIDxzdHlsZT4gdGFnIHdpbGwKKyAgbm8gbG9uZ2VyIHVuZGVyZ28gZW50aXR5IHN1YnN0aXR1dGlvbiBieSBkZWZhdWx0LiBYTUwgZG9jdW1lbnRzIHdvcmsKKyAgdGhlIHNhbWUgd2F5IHRoZXkgZGlkIGJlZm9yZS4gW2J1Zz0xMDg1OTUzXQorCisqIE1ldGhvZHMgbGlrZSBnZXRfdGV4dCgpIGFuZCBwcm9wZXJ0aWVzIGxpa2UgLnN0cmluZ3Mgbm93IG9ubHkgZ2l2ZQorICB5b3Ugc3RyaW5ncyB0aGF0IGFyZSB2aXNpYmxlIGluIHRoZSBkb2N1bWVudC0tbm8gY29tbWVudHMgb3IKKyAgcHJvY2Vzc2luZyBjb21tYW5kcy4gW2J1Zz0xMDUwMTY0XQorCisqIFRoZSBwcmV0dGlmeSgpIG1ldGhvZCBub3cgbGVhdmVzIHRoZSBjb250ZW50cyBvZiA8cHJlPiB0YWdzCisgIGFsb25lLiBbYnVnPTEwOTU2NTRdCisKKyogRml4IGEgYnVnIGluIHRoZSBodG1sNWxpYiB0cmVlYnVpbGRlciB3aGljaCBzb21ldGltZXMgY3JlYXRlZAorICBkaXNjb25uZWN0ZWQgdHJlZXMuIFtidWc9MTAzOTUyN10KKworKiBGaXggYSBidWcgaW4gdGhlIGx4bWwgdHJlZWJ1aWxkZXIgd2hpY2ggY3Jhc2hlZCB3aGVuIGEgdGFnIGluY2x1ZGVkCisgIGFuIGF0dHJpYnV0ZSBmcm9tIHRoZSBwcmVkZWZpbmVkICJ4bWw6IiBuYW1lc3BhY2UuIFtidWc9MTA2NTYxN10KKworKiBGaXggYSBidWcgYnkgd2hpY2gga2V5d29yZCBhcmd1bWVudHMgdG8gZmluZF9wYXJlbnQoKSB3ZXJlIG5vdAorICBiZWluZyBwYXNzZWQgb24uIFtidWc9MTEyNjczNF0KKworKiBTdG9wIGEgY3Jhc2ggd2hlbiB1bndpc2VseSBtZXNzaW5nIHdpdGggYSB0YWcgdGhhdCdzIGJlZW4KKyAgZGVjb21wb3NlZC4gW2J1Zz0xMDk3Njk5XQorCisqIE5vdyB0aGF0IGx4bWwncyBzZWdmYXVsdCBvbiBpbnZhbGlkIGRvY3R5cGUgaGFzIGJlZW4gZml4ZWQsIGZpeGVkIGEKKyAgY29ycmVzcG9uZGluZyBwcm9ibGVtIG9uIHRoZSBCZWF1dGlmdWwgU291cCBlbmQgdGhhdCB3YXMgcHJldmlvdXNseQorICBpbnZpc2libGUuIFtidWc9OTg0OTM2XQorCisqIEZpeGVkIGFuIGV4Y2VwdGlvbiB3aGVuIGFuIG92ZXJzcGVjaWZpZWQgQ1NTIHNlbGVjdG9yIGRpZG4ndCBtYXRjaAorICBhbnl0aGluZy4gQ29kZSBieSBTdGVmYWFuIExpcHBlbnMuIFtidWc9MTE2ODE2N10KKworPSA0LjEuMyAoMjAxMjA4MjApID0KKworKiBTa2lwcGVkIGEgdGVzdCB1bmRlciBQeXRob24gMi42IGFuZCBQeXRob24gMy4xIHRvIGF2b2lkIGEgc3B1cmlvdXMKKyAgdGVzdCBmYWlsdXJlIGNhdXNlZCBieSB0aGUgbG91c3kgSFRNTFBhcnNlciBpbiB0aG9zZQorICB2ZXJzaW9ucy4gW2J1Zz0xMDM4NTAzXQorCisqIFJhaXNlIGEgbW9yZSBzcGVjaWZpYyBlcnJvciAoRmVhdHVyZU5vdEZvdW5kKSB3aGVuIGEgcmVxdWVzdGVkCisgIHBhcnNlciBvciBwYXJzZXIgZmVhdHVyZSBpcyBub3QgaW5zdGFsbGVkLiBSYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgIGluc3RlYWQgb2YgVmFsdWVFcnJvciB3aGVuIHRoZSB1c2VyIGNhbGxzIGluc2VydF9iZWZvcmUoKSBvcgorICBpbnNlcnRfYWZ0ZXIoKSBvbiB0aGUgQmVhdXRpZnVsU291cCBvYmplY3QgaXRzZWxmLiBQYXRjaCBieSBBYXJvbgorICBEZXZvcmUuIFtidWc9MTAzODMwMV0KKworPSA0LjEuMiAoMjAxMjA4MTcpID0KKworKiBBcyBwZXIgUEVQLTgsIGFsbG93IHNlYXJjaGluZyBieSBDU1MgY2xhc3MgdXNpbmcgdGhlICdjbGFzc18nCisgIGtleXdvcmQgYXJndW1lbnQuIFtidWc9MTAzNzYyNF0KKworKiBEaXNwbGF5IG5hbWVzcGFjZSBwcmVmaXhlcyBmb3IgbmFtZXNwYWNlZCBhdHRyaWJ1dGUgbmFtZXMsIGluc3RlYWQgb2YKKyAgdGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lcyBnaXZlbiBieSB0aGUgbHhtbCBwYXJzZXIuIFtidWc9MTAzNzU5N10KKworKiBGaXhlZCBhIGNyYXNoIG9uIGVuY29kaW5nIHdoZW4gYW4gYXR0cmlidXRlIG5hbWUgY29udGFpbmVkCisgIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgorCisqIFdoZW4gc25pZmZpbmcgZW5jb2RpbmdzLCBpZiB0aGUgY2NoYXJkZXQgbGlicmFyeSBpcyBpbnN0YWxsZWQsCisgIEJlYXV0aWZ1bCBTb3VwIHVzZXMgaXQgaW5zdGVhZCBvZiBjaGFyZGV0LiBjY2hhcmRldCBpcyBtdWNoCisgIGZhc3Rlci4gW2J1Zz0xMDIwNzQ4XQorCisqIFVzZSBsb2dnaW5nLndhcm5pbmcoKSBpbnN0ZWFkIG9mIHdhcm5pbmcud2FybigpIHRvIG5vdGlmeSB0aGUgdXNlcgorICB0aGF0IGNoYXJhY3RlcnMgd2VyZSByZXBsYWNlZCB3aXRoIFJFUExBQ0VNRU5UCisgIENIQVJBQ1RFUi4gW2J1Zz0xMDEzODYyXQorCis9IDQuMS4xICgyMDEyMDcwMykgPQorCisqIEZpeGVkIGFuIGh0bWw1bGliIHRyZWUgYnVpbGRlciBjcmFzaCB3aGljaCBoYXBwZW5lZCB3aGVuIGh0bWw1bGliCisgIG1vdmVkIGEgdGFnIHdpdGggYSBtdWx0aXZhbHVlZCBhdHRyaWJ1dGUgZnJvbSBvbmUgcGFydCBvZiB0aGUgdHJlZQorICB0byBhbm90aGVyLiBbYnVnPTEwMTk2MDNdCisKKyogQ29ycmVjdGx5IGRpc3BsYXkgY2xvc2luZyB0YWdzIHdpdGggYW4gWE1MIG5hbWVzcGFjZSBkZWNsYXJlZC4gUGF0Y2gKKyAgYnkgQW5kcmVhcyBLb3N0eXJrYS4gW2J1Zz0xMDE5NjM1XQorCisqIEZpeGVkIGEgdHlwbyB0aGF0IG1hZGUgcGFyc2luZyBzaWduaWZpY2FudGx5IHNsb3dlciB0aGFuIGl0IHNob3VsZAorICBoYXZlIGJlZW4sIGFuZCBhbHNvIHdhaXRlZCB0b28gbG9uZyB0byBjbG9zZSB0YWdzIHdpdGggWE1MCisgIG5hbWVzcGFjZXMuIFtidWc9MTAyMDI2OF0KKworKiBnZXRfdGV4dCgpIG5vdyByZXR1cm5zIGFuIGVtcHR5IFVuaWNvZGUgc3RyaW5nIGlmIHRoZXJlIGlzIG5vIHRleHQsCisgIHJhdGhlciB0aGFuIGFuIGVtcHR5IGJ5dGVzdHJpbmcuIFtidWc9MTAyMDM4N10KKworPSA0LjEuMCAoMjAxMjA1MjkpID0KKworKiBBZGRlZCBleHBlcmltZW50YWwgc3VwcG9ydCBmb3IgZml4aW5nIFdpbmRvd3MtMTI1MiBjaGFyYWN0ZXJzCisgIGVtYmVkZGVkIGluIFVURi04IGRvY3VtZW50cy4gKFVuaWNvZGVEYW1taXQuZGV0d2luZ2xlKCkpCisKKyogRml4ZWQgdGhlIGhhbmRsaW5nIG9mICZxdW90OyB3aXRoIHRoZSBidWlsdC1pbiBwYXJzZXIuIFtidWc9OTkzODcxXQorCisqIENvbW1lbnRzLCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucywgZG9jdW1lbnQgdHlwZSBkZWNsYXJhdGlvbnMsIGFuZAorICBtYXJrdXAgZGVjbGFyYXRpb25zIGFyZSBub3cgdHJlYXRlZCBhcyBwcmVmb3JtYXR0ZWQgc3RyaW5ncywgdGhlIHdheQorICBDRGF0YSBibG9ja3MgYXJlLiBbYnVnPTEwMDEwMjVdCisKKyogRml4ZWQgYSBidWcgd2l0aCB0aGUgbHhtbCB0cmVlYnVpbGRlciB0aGF0IHByZXZlbnRlZCB0aGUgdXNlciBmcm9tCisgIGFkZGluZyBhdHRyaWJ1dGVzIHRvIGEgdGFnIHRoYXQgZGlkbid0IG9yaWdpbmFsbHkgaGF2ZQorICBhdHRyaWJ1dGVzLiBbYnVnPTEwMDIzNzhdIFRoYW5rcyB0byBPbGl2ZXIgQmVhdHRpZSBmb3IgdGhlIHBhdGNoLgorCisqIEZpeGVkIHNvbWUgZWRnZS1jYXNlIGJ1Z3MgaGF2aW5nIHRvIGRvIHdpdGggaW5zZXJ0aW5nIGFuIGVsZW1lbnQKKyAgaW50byBhIHRhZyBpdCdzIGFscmVhZHkgaW5zaWRlLCBhbmQgcmVwbGFjaW5nIG9uZSBvZiBhIHRhZydzCisgIGNoaWxkcmVuIHdpdGggYW5vdGhlci4gW2J1Zz05OTc1MjldCisKKyogQWRkZWQgdGhlIGFiaWxpdHkgdG8gc2VhcmNoIGZvciBhdHRyaWJ1dGUgdmFsdWVzIHNwZWNpZmllZCBpbiBVVEYtOC4gW2J1Zz0xMDAzOTc0XQorCisgIFRoaXMgY2F1c2VkIGEgbWFqb3IgcmVmYWN0b3Jpbmcgb2YgdGhlIHNlYXJjaCBjb2RlLiBBbGwgdGhlIHRlc3RzCisgIHBhc3MsIGJ1dCBpdCdzIHBvc3NpYmxlIHRoYXQgc29tZSBzZWFyY2hlcyB3aWxsIGJlaGF2ZSBkaWZmZXJlbnRseS4KKworPSA0LjAuNSAoMjAxMjA0MjcpID0KKworKiBBZGRlZCBhIG5ldyBtZXRob2QsIHdyYXAoKSwgd2hpY2ggd3JhcHMgYW4gZWxlbWVudCBpbiBhIHRhZy4KKworKiBSZW5hbWVkIHJlcGxhY2Vfd2l0aF9jaGlsZHJlbigpIHRvIHVud3JhcCgpLCB3aGljaCBpcyBlYXNpZXIgdG8KKyAgdW5kZXJzdGFuZCBhbmQgYWxzbyB0aGUgalF1ZXJ5IG5hbWUgb2YgdGhlIGZ1bmN0aW9uLgorCisqIE1hZGUgZW5jb2Rpbmcgc3Vic3RpdHV0aW9uIGluIDxtZXRhPiB0YWdzIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQgKG5vCisgIG1vcmUgJVNPVVAtRU5DT0RJTkclKS4KKworKiBGaXhlZCBhIGJ1ZyBpbiBkZWNvZGluZyBkYXRhIHRoYXQgY29udGFpbmVkIGEgYnl0ZS1vcmRlciBtYXJrLCBzdWNoCisgIGFzIGRhdGEgZW5jb2RlZCBpbiBVVEYtMTZMRS4gW2J1Zz05ODg5ODBdCisKKyogRml4ZWQgYSBidWcgdGhhdCBtYWRlIHRoZSBIVE1MUGFyc2VyIHRyZWVidWlsZGVyIGdlbmVyYXRlIFhNTAorICBkZWZpbml0aW9ucyBlbmRpbmcgd2l0aCB0d28gcXVlc3Rpb24gbWFya3MgaW5zdGVhZCBvZgorICBvbmUuIFtidWc9OTg0MjU4XQorCisqIFVwb24gZG9jdW1lbnQgZ2VuZXJhdGlvbiwgQ0RhdGEgb2JqZWN0cyBhcmUgbm8gbG9uZ2VyIHJ1biB0aHJvdWdoCisgIHRoZSBmb3JtYXR0ZXIuIFtidWc9OTg4OTA1XQorCisqIFRoZSB0ZXN0IHN1aXRlIG5vdyBwYXNzZXMgd2hlbiBseG1sIGlzIG5vdCBpbnN0YWxsZWQsIHdoZXRoZXIgb3Igbm90CisgIGh0bWw1bGliIGlzIGluc3RhbGxlZC4gW2J1Zz05ODcwMDRdCisKKyogUHJpbnQgYSB3YXJuaW5nIG9uIEhUTUxQYXJzZUVycm9ycyB0byBsZXQgcGVvcGxlIGtub3cgdGhleSBzaG91bGQKKyAgaW5zdGFsbCBhIGJldHRlciBwYXJzZXIgbGlicmFyeS4KKworPSA0LjAuNCAoMjAxMjA0MTYpID0KKworKiBGaXhlZCBhIGJ1ZyB0aGF0IHNvbWV0aW1lcyBjcmVhdGVkIGRpc2Nvbm5lY3RlZCB0cmVlcy4KKworKiBGaXhlZCBhIGJ1ZyB3aXRoIHRoZSBzdHJpbmcgc2V0dGVyIHRoYXQgbW92ZWQgYSBzdHJpbmcgYXJvdW5kIHRoZQorICB0cmVlIGluc3RlYWQgb2YgY29weWluZyBpdC4gW2J1Zz05ODMwNTBdCisKKyogQXR0cmlidXRlIHZhbHVlcyBhcmUgbm93IHJ1biB0aHJvdWdoIHRoZSBwcm92aWRlZCBvdXRwdXQgZm9ybWF0dGVyLgorICBQcmV2aW91c2x5IHRoZXkgd2VyZSBhbHdheXMgcnVuIHRocm91Z2ggdGhlICdtaW5pbWFsJyBmb3JtYXR0ZXIuIEluCisgIHRoZSBmdXR1cmUgSSBtYXkgbWFrZSBpdCBwb3NzaWJsZSB0byBzcGVjaWZ5IGRpZmZlcmVudCBmb3JtYXR0ZXJzCisgIGZvciBhdHRyaWJ1dGUgdmFsdWVzIGFuZCBzdHJpbmdzLCBidXQgZm9yIG5vdywgY29uc2lzdGVudCBiZWhhdmlvcgorICBpcyBiZXR0ZXIgdGhhbiBpbmNvbnNpc3RlbnQgYmVoYXZpb3IuIFtidWc9OTgwMjM3XQorCisqIEFkZGVkIHRoZSBtaXNzaW5nIHJlbmRlckNvbnRlbnRzIG1ldGhvZCBmcm9tIEJlYXV0aWZ1bCBTb3VwIDMuIEFsc28KKyAgYWRkZWQgYW4gZW5jb2RlX2NvbnRlbnRzKCkgbWV0aG9kIHRvIGdvIGFsb25nIHdpdGggZGVjb2RlX2NvbnRlbnRzKCkuCisKKyogR2l2ZSBhIG1vcmUgdXNlZnVsIGVycm9yIHdoZW4gdGhlIHVzZXIgdHJpZXMgdG8gcnVuIHRoZSBQeXRob24gMgorICB2ZXJzaW9uIG9mIEJTIHVuZGVyIFB5dGhvbiAzLgorCisqIFVuaWNvZGVEYW1taXQgY2FuIG5vdyBjb252ZXJ0IE1pY3Jvc29mdCBzbWFydCBxdW90ZXMgdG8gQVNDSUkgd2l0aAorICBVbmljb2RlRGFtbWl0KG1hcmt1cCwgc21hcnRfcXVvdGVzX3RvPSJhc2NpaSIpLgorCis9IDQuMC4zICgyMDEyMDQwMykgPQorCisqIEZpeGVkIGEgdHlwbyB0aGF0IGNhdXNlZCBzb21lIHZlcnNpb25zIG9mIFB5dGhvbiAzIHRvIGNvbnZlcnQgdGhlCisgIEJlYXV0aWZ1bCBTb3VwIGNvZGViYXNlIGluY29ycmVjdGx5LgorCisqIEdvdCByaWQgb2YgdGhlIDQuMC4yIHdvcmthcm91bmQgZm9yIEhUTUwgZG9jdW1lbnRzLS1pdCB3YXMKKyAgdW5uZWNlc3NhcnkgYW5kIHRoZSB3b3JrYXJvdW5kIHdhcyB0cmlnZ2VyaW5nIGEgKHBvc3NpYmx5IGRpZmZlcmVudCwKKyAgYnV0IHJlbGF0ZWQpIGJ1ZyBpbiBseG1sLiBbYnVnPTk3MjQ2Nl0KKworPSA0LjAuMiAoMjAxMjAzMjYpID0KKworKiBXb3JrZWQgYXJvdW5kIGEgcG9zc2libGUgYnVnIGluIGx4bWwgdGhhdCBwcmV2ZW50cyBub24tdGlueSBYTUwKKyAgZG9jdW1lbnRzIGZyb20gYmVpbmcgcGFyc2VkLiBbYnVnPTk2Mzg4MCwgYnVnPTk2MzkzNl0KKworKiBGaXhlZCBhIGJ1ZyB3aGVyZSBzcGVjaWZ5aW5nIGB0ZXh0YCB3aGlsZSBhbHNvIHNlYXJjaGluZyBmb3IgYSB0YWcKKyAgb25seSB3b3JrZWQgaWYgYHRleHRgIHdhbnRlZCBhbiBleGFjdCBzdHJpbmcgbWF0Y2guIFtidWc9OTU1OTQyXQorCis9IDQuMC4xICgyMDEyMDMxNCkgPQorCisqIFRoaXMgaXMgdGhlIGZpcnN0IG9mZmljaWFsIHJlbGVhc2Ugb2YgQmVhdXRpZnVsIFNvdXAgNC4gVGhlcmUgaXMgbm8KKyAgNC4wLjAgcmVsZWFzZSwgdG8gZWxpbWluYXRlIGFueSBwb3NzaWJpbGl0eSB0aGF0IHBhY2thZ2luZyBzb2Z0d2FyZQorICBtaWdodCB0cmVhdCAiNC4wLjAiIGFzIGJlaW5nIGFuIGVhcmxpZXIgdmVyc2lvbiB0aGFuICI0LjAuMGIxMCIuCisKKyogQnJvdWdodCBCUyB1cCB0byBkYXRlIHdpdGggdGhlIGxhdGVzdCByZWxlYXNlIG9mIHNvdXBzZWxlY3QsIGFkZGluZworICBDU1Mgc2VsZWN0b3Igc3VwcG9ydCBmb3IgZGlyZWN0IGRlc2NlbmRhbnQgbWF0Y2hlcyBhbmQgbXVsdGlwbGUgQ1NTCisgIGNsYXNzIG1hdGNoZXMuCisKKz0gNC4wLjBiMTAgKDIwMTIwMzAyKSA9CisKKyogQWRkZWQgc3VwcG9ydCBmb3Igc2ltcGxlIENTUyBzZWxlY3RvcnMsIHRha2VuIGZyb20gdGhlIHNvdXBzZWxlY3QgcHJvamVjdC4KKworKiBGaXhlZCBhIGNyYXNoIHdoZW4gdXNpbmcgaHRtbDVsaWIuIFtidWc9OTQzMjQ2XQorCisqIEluIEhUTUw1LXN0eWxlIDxtZXRhIGNoYXJzZXQ9ImZvbyI+IHRhZ3MsIHRoZSB2YWx1ZSBvZiB0aGUgImNoYXJzZXQiCisgIGF0dHJpYnV0ZSBpcyBub3cgcmVwbGFjZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZW5jb2Rpbmcgb24KKyAgb3V0cHV0LiBbYnVnPTk0MjcxNF0KKworKiBGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCBjYWxsaW5nIGEgdGFnIHRvIHNvbWV0aW1lcyBjYWxsIGZpbmRfYWxsKCkKKyAgd2l0aCB0aGUgd3JvbmcgYXJndW1lbnRzLiBbYnVnPTk0NDQyNl0KKworKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGJyb3VnaHQgYmFjayB0aGUgQmVhdXRpZnVsU3RvbmVTb3VwCisgIGNsYXNzIGFzIGEgZGVwcmVjYXRlZCB3cmFwcGVyIGFyb3VuZCBCZWF1dGlmdWxTb3VwLgorCis9IDQuMC4wYjkgKDIwMTIwMjI4KSA9CisKKyogRml4ZWQgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBET0NUWVBFcyB0aGF0IGhhdmUgYm90aCBhIHB1YmxpYworICBJRCBhbmQgYSBzeXN0ZW0gSUQuCisKKyogRml4ZWQgdGhlIGdlbmVyYXRlZCBYTUwgZGVjbGFyYXRpb24uCisKKyogUmVuYW1lZCBUYWcubnNwcmVmaXggdG8gVGFnLnByZWZpeCwgZm9yIGNvbnNpc3RlbmN5IHdpdGgKKyAgTmFtZXNwYWNlZEF0dHJpYnV0ZS4KKworKiBGaXhlZCBhIHRlc3QgZmFpbHVyZSB0aGF0IG9jY3VyZWQgb24gUHl0aG9uIDMueCB3aGVuIGNoYXJkZXQgd2FzCisgIGluc3RhbGxlZC4KKworKiBNYWRlIHByZXR0aWZ5KCkgcmV0dXJuIFVuaWNvZGUgYnkgZGVmYXVsdCwgc28gaXQgd2lsbCBsb29rIG5pY2Ugb24KKyAgUHl0aG9uIDMgd2hlbiBwYXNzZWQgaW50byBwcmludCgpLgorCis9IDQuMC4wYjggKDIwMTIwMjI0KSA9CisKKyogQWxsIHRyZWUgYnVpbGRlcnMgbm93IHByZXNlcnZlIG5hbWVzcGFjZSBpbmZvcm1hdGlvbiBpbiB0aGUKKyAgZG9jdW1lbnRzIHRoZXkgcGFyc2UuIElmIHlvdSB1c2UgdGhlIGh0bWw1bGliIHBhcnNlciBvciBseG1sJ3MgWE1MCisgIHBhcnNlciwgeW91IGNhbiBhY2Nlc3MgdGhlIG5hbWVzcGFjZSBVUkwgZm9yIGEgdGFnIGFzIHRhZy5uYW1lc3BhY2UuCisKKyAgSG93ZXZlciwgdGhlcmUgaXMgbm8gc3BlY2lhbCBzdXBwb3J0IGZvciBuYW1lc3BhY2Utb3JpZW50ZWQKKyAgc2VhcmNoaW5nIG9yIHRyZWUgbWFuaXB1bGF0aW9uLiBXaGVuIHlvdSBzZWFyY2ggdGhlIHRyZWUsIHlvdSBuZWVkCisgIHRvIHVzZSBuYW1lc3BhY2UgcHJlZml4ZXMgZXhhY3RseSBhcyB0aGV5J3JlIHVzZWQgaW4gdGhlIG9yaWdpbmFsCisgIGRvY3VtZW50LgorCisqIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBET0NUWVBFIGFsd2F5cyBlbmRzIGluIGEgbmV3bGluZS4KKworKiBJc3N1ZSBhIHdhcm5pbmcgaWYgdGhlIHVzZXIgdHJpZXMgdG8gdXNlIGEgU291cFN0cmFpbmVyIGluCisgIGNvbmp1bmN0aW9uIHdpdGggdGhlIGh0bWw1bGliIHRyZWUgYnVpbGRlciwgd2hpY2ggZG9lc24ndCBzdXBwb3J0CisgIHRoZW0uCisKKz0gNC4wLjBiNyAoMjAxMjAyMjMpID0KKworKiBVcG9uIGRlY29kaW5nIHRvIHN0cmluZywgYW55IGNoYXJhY3RlcnMgdGhhdCBjYW4ndCBiZSByZXByZXNlbnRlZCBpbgorICB5b3VyIGNob3NlbiBlbmNvZGluZyB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIG51bWVyaWMgWE1MIGVudGl0eQorICByZWZlcmVuY2VzLgorCisqIElzc3VlIGEgd2FybmluZyBpZiBjaGFyYWN0ZXJzIHdlcmUgcmVwbGFjZWQgd2l0aCBSRVBMQUNFTUVOVAorICBDSEFSQUNURVIgZHVyaW5nIFVuaWNvZGUgY29udmVyc2lvbi4KKworKiBSZXN0b3JlZCBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIuNi4KKworKiBUaGUgaW5zdGFsbCBwcm9jZXNzIG5vIGxvbmdlciBpbnN0YWxscyBkb2NzIG9yIGF1eGlsbGFyeSB0ZXh0IGZpbGVzLgorCisqIEl0J3Mgbm93IHBvc3NpYmxlIHRvIGRlZXBjb3B5IGEgQmVhdXRpZnVsU291cCBvYmplY3QgY3JlYXRlZCB3aXRoCisgIFB5dGhvbidzIGJ1aWx0LWluIEhUTUwgcGFyc2VyLgorCisqIEFib3V0IDEwMCB1bml0IHRlc3RzIHRoYXQgInRlc3QiIHRoZSBiZWhhdmlvciBvZiB2YXJpb3VzIHBhcnNlcnMgb24KKyAgaW52YWxpZCBtYXJrdXAgaGF2ZSBiZWVuIHJlbW92ZWQuIExlZ2l0aW1hdGUgY2hhbmdlcyB0byB0aG9zZQorICBwYXJzZXJzIGNhdXNlZCB0aGVzZSB0ZXN0cyB0byBmYWlsLCBpbmRpY2F0aW5nIHRoYXQgcGVyaGFwcworICBCZWF1dGlmdWwgU291cCBzaG91bGQgbm90IHRlc3QgdGhlIGJlaGF2aW9yIG9mIGZvcmVpZ24KKyAgbGlicmFyaWVzLgorCisgIFRoZSBwcm9ibGVtYXRpYyB1bml0IHRlc3RzIGhhdmUgYmVlbiByZWZvcm11bGF0ZWQgYXMgaW5mb3JtYXRpb25hbAorICBjb21wYXJpc29ucyBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdAorICBzY3JpcHRzL2RlbW9uc3RyYXRlX3BhcnNlcl9kaWZmZXJlbmNlcy5weS4KKworICBUaGlzIG1ha2VzIEJlYXV0aWZ1bCBTb3VwIGNvbXBhdGlibGUgd2l0aCBodG1sNWxpYiB2ZXJzaW9uIDAuOTUgYW5kCisgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBIVE1MUGFyc2VyLgorCis9IDQuMC4wYjYgKDIwMTIwMjE2KSA9CisKKyogTXVsdGktdmFsdWVkIGF0dHJpYnV0ZXMgbGlrZSAiY2xhc3MiIGFsd2F5cyBoYXZlIGEgbGlzdCBvZiB2YWx1ZXMsCisgIGV2ZW4gaWYgdGhlcmUncyBvbmx5IG9uZSB2YWx1ZSBpbiB0aGUgbGlzdC4KKworKiBBZGRlZCBhIG51bWJlciBvZiBtdWx0aS12YWx1ZWQgYXR0cmlidXRlcyBkZWZpbmVkIGluIEhUTUw1LgorCisqIFN0b3BwZWQgZ2VuZXJhdGluZyBhIHNwYWNlIGJlZm9yZSB0aGUgc2xhc2ggdGhhdCBjbG9zZXMgYW4KKyAgZW1wdHktZWxlbWVudCB0YWcuIFRoaXMgbWF5IGNvbWUgYmFjayBpZiBJIGFkZCBhIHNwZWNpYWwgWEhUTUwgbW9kZQorICAoaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxLyNDXzIpLCBidXQgcmlnaHQgbm93IGl0J3MgcHJldHR5CisgIHVzZWxlc3MuCisKKyogUGFzc2luZyB0ZXh0IGFsb25nIHdpdGggdGFnLXNwZWNpZmljIGFyZ3VtZW50cyB0byBhIGZpbmQqIG1ldGhvZDoKKworICAgZmluZCgiYSIsIHRleHQ9IkNsaWNrIGhlcmUiKQorCisgIHdpbGwgZmluZCB0YWdzIHRoYXQgY29udGFpbiB0aGUgZ2l2ZW4gdGV4dCBhcyB0aGVpcgorICAuc3RyaW5nLiBQcmV2aW91c2x5LCB0aGUgdGFnLXNwZWNpZmljIGFyZ3VtZW50cyB3ZXJlIGlnbm9yZWQgYW5kCisgIG9ubHkgc3RyaW5ncyB3ZXJlIHNlYXJjaGVkLgorCisqIEZpeGVkIGEgYnVnIHRoYXQgY2F1c2VkIHRoZSBodG1sNWxpYiB0cmVlIGJ1aWxkZXIgdG8gYnVpbGQgYQorICBwYXJ0aWFsbHkgZGlzY29ubmVjdGVkIHRyZWUuIEdlbmVyYWxseSBjbGVhbmVkIHVwIHRoZSBodG1sNWxpYiB0cmVlCisgIGJ1aWxkZXIuCisKKyogSWYgeW91IHJlc3RyaWN0IGEgbXVsdGktdmFsdWVkIGF0dHJpYnV0ZSBsaWtlICJjbGFzcyIgdG8gYSBzdHJpbmcKKyAgdGhhdCBjb250YWlucyBzcGFjZXMsIEJlYXV0aWZ1bCBTb3VwIHdpbGwgb25seSBjb25zaWRlciBpdCBhIG1hdGNoCisgIGlmIHRoZSB2YWx1ZXMgY29ycmVzcG9uZCB0byB0aGF0IHNwZWNpZmljIHN0cmluZy4KKworPSA0LjAuMGI1ICgyMDEyMDIwOSkgPQorCisqIFJhdGlvbmFsaXplZCBCZWF1dGlmdWwgU291cCdzIHRyZWF0bWVudCBvZiBDU1MgY2xhc3MuIEEgdGFnCisgIGJlbG9uZ2luZyB0byBtdWx0aXBsZSBDU1MgY2xhc3NlcyBpcyB0cmVhdGVkIGFzIGhhdmluZyBhIGxpc3Qgb2YKKyAgdmFsdWVzIGZvciB0aGUgJ2NsYXNzJyBhdHRyaWJ1dGUuIFNlYXJjaGluZyBmb3IgYSBDU1MgY2xhc3Mgd2lsbAorICBtYXRjaCAqYW55KiBvZiB0aGUgQ1NTIGNsYXNzZXMuCisKKyAgVGhpcyBhY3R1YWxseSBhZmZlY3RzIGFsbCBhdHRyaWJ1dGVzIHRoYXQgdGhlIEhUTUwgc3RhbmRhcmQgZGVmaW5lcworICBhcyB0YWtpbmcgbXVsdGlwbGUgdmFsdWVzIChjbGFzcywgcmVsLCByZXYsIGFyY2hpdmUsIGFjY2VwdC1jaGFyc2V0LAorICBhbmQgaGVhZGVycyksIGJ1dCAnY2xhc3MnIGlzIGJ5IGZhciB0aGUgbW9zdCBjb21tb24uIFtidWc9NDEwMzRdCisKKyogSWYgeW91IHBhc3MgYW55dGhpbmcgb3RoZXIgdGhhbiBhIGRpY3Rpb25hcnkgYXMgdGhlIHNlY29uZCBhcmd1bWVudAorICB0byBvbmUgb2YgdGhlIGZpbmQqIG1ldGhvZHMsIGl0J2xsIGFzc3VtZSB5b3Ugd2FudCB0byB1c2UgdGhhdAorICBvYmplY3QgdG8gc2VhcmNoIGFnYWluc3QgYSB0YWcncyBDU1MgY2xhc3Nlcy4gUHJldmlvdXNseSB0aGlzIG9ubHkKKyAgd29ya2VkIGlmIHlvdSBwYXNzZWQgaW4gYSBzdHJpbmcuCisKKyogRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgYSBjcmFzaCB3aGVuIHlvdSBwYXNzZWQgYSBkaWN0aW9uYXJ5IGFzIGFuCisgIGF0dHJpYnV0ZSB2YWx1ZSAocG9zc2libHkgYmVjYXVzZSB5b3UgbWlzdHlwZWQgImF0dHJzIikuIFtidWc9ODQyNDE5XQorCisqIFVuaWNvZGUsIERhbW1pdCBub3cgZGV0ZWN0cyB0aGUgZW5jb2RpbmcgaW4gSFRNTCA1LXN0eWxlIDxtZXRhPiB0YWdzCisgIGxpa2UgPG1ldGEgY2hhcnNldD0idXRmLTgiIC8+LiBbYnVnPTgzNzI2OF0KKworKiBJZiBVbmljb2RlLCBEYW1taXQgY2FuJ3QgZmlndXJlIG91dCBhIGNvbnNpc3RlbnQgZW5jb2RpbmcgZm9yIGEKKyAgcGFnZSwgaXQgd2lsbCB0cnkgZWFjaCBvZiBpdHMgZ3Vlc3NlcyBhZ2Fpbiwgd2l0aCBlcnJvcnM9InJlcGxhY2UiCisgIGluc3RlYWQgb2YgZXJyb3JzPSJzdHJpY3QiLiBUaGlzIG1heSBtZWFuIHRoYXQgc29tZSBkYXRhIGdldHMKKyAgcmVwbGFjZWQgd2l0aCBSRVBMQUNFTUVOVCBDSEFSQUNURVIsIGJ1dCBhdCBsZWFzdCBtb3N0IG9mIGl0IHdpbGwKKyAgZ2V0IHR1cm5lZCBpbnRvIFVuaWNvZGUuIFtidWc9NzU0OTAzXQorCisqIFBhdGNoZWQgb3ZlciBhIGJ1ZyBpbiBodG1sNWxpYiAoPykgdGhhdCB3YXMgY3Jhc2hpbmcgQmVhdXRpZnVsIFNvdXAKKyAgb24gY2VydGFpbiBraW5kcyBvZiBtYXJrdXAuIFtidWc9ODM4ODAwXQorCisqIEZpeGVkIGEgYnVnIHRoYXQgd3JlY2tlZCB0aGUgdHJlZSBpZiB5b3UgcmVwbGFjZWQgYW4gZWxlbWVudCB3aXRoIGFuCisgIGVtcHR5IHN0cmluZy4gW2J1Zz03Mjg2OTddCisKKyogSW1wcm92ZWQgVW5pY29kZSwgRGFtbWl0J3MgYmVoYXZpb3Igd2hlbiB5b3UgZ2l2ZSBpdCBVbmljb2RlIHRvCisgIGJlZ2luIHdpdGguCisKKz0gNC4wLjBiNCAoMjAxMjAyMDgpID0KKworKiBBZGRlZCBCZWF1dGlmdWxTb3VwLm5ld19zdHJpbmcoKSB0byBnbyBhbG9uZyB3aXRoIEJlYXV0aWZ1bFNvdXAubmV3X3RhZygpCisKKyogQmVhdXRpZnVsU291cC5uZXdfdGFnKCkgd2lsbCBmb2xsb3cgdGhlIHJ1bGVzIG9mIHdoYXRldmVyCisgIHRyZWUtYnVpbGRlciB3YXMgdXNlZCB0byBjcmVhdGUgdGhlIG9yaWdpbmFsIEJlYXV0aWZ1bFNvdXAgb2JqZWN0LiBBCisgIG5ldyA8cD4gdGFnIHdpbGwgbG9vayBsaWtlICI8cCAvPiIgaWYgdGhlIHNvdXAgb2JqZWN0IHdhcyBjcmVhdGVkIHRvCisgIHBhcnNlIFhNTCwgYnV0IGl0IHdpbGwgbG9vayBsaWtlICI8cD48L3A+IiBpZiB0aGUgc291cCBvYmplY3Qgd2FzCisgIGNyZWF0ZWQgdG8gcGFyc2UgSFRNTC4KKworKiBXZSBwYXNzIGluIHN0cmljdD1GYWxzZSB0byBodG1sLnBhcnNlciBvbiBQeXRob24gMywgZ3JlYXRseQorICBpbXByb3ZpbmcgaHRtbC5wYXJzZXIncyBhYmlsaXR5IHRvIGhhbmRsZSBiYWQgSFRNTC4KKworKiBXZSBhbHNvIG1vbmtleXBhdGNoIGEgc2VyaW91cyBidWcgaW4gaHRtbC5wYXJzZXIgdGhhdCBtYWRlCisgIHN0cmljdD1GYWxzZSBkaXNhc3Ryb3VzIG9uIFB5dGhvbiAzLjIuMi4KKworKiBSZXBsYWNlZCB0aGUgInN1YnN0aXR1dGVfaHRtbF9lbnRpdGllcyIgYXJndW1lbnQgd2l0aCB0aGUKKyAgbW9yZSBnZW5lcmFsICJmb3JtYXR0ZXIiIGFyZ3VtZW50LgorCisqIEJhcmUgYW1wZXJzYW5kcyBhbmQgYW5nbGUgYnJhY2tldHMgYXJlIGFsd2F5cyBjb252ZXJ0ZWQgdG8gWE1MCisgIGVudGl0aWVzIHVubGVzcyB0aGUgdXNlciBwcmV2ZW50cyBpdC4KKworKiBBZGRlZCBQYWdlRWxlbWVudC5pbnNlcnRfYmVmb3JlKCkgYW5kIFBhZ2VFbGVtZW50Lmluc2VydF9hZnRlcigpLAorICB3aGljaCBsZXQgeW91IHB1dCBhbiBlbGVtZW50IGludG8gdGhlIHBhcnNlIHRyZWUgd2l0aCByZXNwZWN0IHRvCisgIHNvbWUgb3RoZXIgZWxlbWVudC4KKworKiBSYWlzZSBhbiBleGNlcHRpb24gd2hlbiB0aGUgdXNlciB0cmllcyB0byBkbyBzb21ldGhpbmcgbm9uc2Vuc2ljYWwKKyAgbGlrZSBpbnNlcnQgYSB0YWcgaW50byBpdHNlbGYuCisKKworPSA0LjAuMGIzICgyMDEyMDIwMykgPQorCitCZWF1dGlmdWwgU291cCA0IGlzIGEgbmVhcmx5LWNvbXBsZXRlIHJld3JpdGUgdGhhdCByZW1vdmVzIEJlYXV0aWZ1bAorU291cCdzIGN1c3RvbSBIVE1MIHBhcnNlciBpbiBmYXZvciBvZiBhIHN5c3RlbSB0aGF0IGxldHMgeW91IHdyaXRlIGEKK2xpdHRsZSBnbHVlIGNvZGUgYW5kIHBsdWcgaW4gYW55IEhUTUwgb3IgWE1MIHBhcnNlciB5b3Ugd2FudC4KKworQmVhdXRpZnVsIFNvdXAgNC4wIGNvbWVzIHdpdGggZ2x1ZSBjb2RlIGZvciBmb3VyIHBhcnNlcnM6CisKKyAqIFB5dGhvbidzIHN0YW5kYXJkIEhUTUxQYXJzZXIgKGh0bWwucGFyc2VyIGluIFB5dGhvbiAzKQorICogbHhtbCdzIEhUTUwgYW5kIFhNTCBwYXJzZXJzCisgKiBodG1sNWxpYidzIEhUTUwgcGFyc2VyCisKK0hUTUxQYXJzZXIgaXMgdGhlIGRlZmF1bHQsIGJ1dCBJIHJlY29tbWVuZCB5b3UgaW5zdGFsbCBseG1sIGlmIHlvdQorY2FuLgorCitGb3IgY29tcGxldGUgZG9jdW1lbnRhdGlvbiwgc2VlIHRoZSBTcGhpbnggZG9jdW1lbnRhdGlvbiBpbgorYnM0L2RvYy9zb3VyY2UvLiBXaGF0IGZvbGxvd3MgaXMgYSBzdW1tYXJ5IG9mIHRoZSBjaGFuZ2VzIGZyb20KK0JlYXV0aWZ1bCBTb3VwIDMuCisKKz09PSBUaGUgbW9kdWxlIG5hbWUgaGFzIGNoYW5nZWQgPT09CisKK1ByZXZpb3VzbHkgeW91IGltcG9ydGVkIHRoZSBCZWF1dGlmdWxTb3VwIGNsYXNzIGZyb20gYSBtb2R1bGUgYWxzbworY2FsbGVkIEJlYXV0aWZ1bFNvdXAuIFRvIHNhdmUga2V5c3Ryb2tlcyBhbmQgbWFrZSBpdCBjbGVhciB3aGljaAordmVyc2lvbiBvZiB0aGUgQVBJIGlzIGluIHVzZSwgdGhlIG1vZHVsZSBpcyBub3cgY2FsbGVkICdiczQnOgorCisgICAgPj4+IGZyb20gYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwCisKKz09PSBJdCB3b3JrcyB3aXRoIFB5dGhvbiAzID09PQorCitCZWF1dGlmdWwgU291cCAzLjEuMCB3b3JrZWQgd2l0aCBQeXRob24gMywgYnV0IHRoZSBwYXJzZXIgaXQgdXNlZCB3YXMKK3NvIGJhZCB0aGF0IGl0IGJhcmVseSB3b3JrZWQgYXQgYWxsLiBCZWF1dGlmdWwgU291cCA0IHdvcmtzIHdpdGgKK1B5dGhvbiAzLCBhbmQgc2luY2UgaXRzIHBhcnNlciBpcyBwbHVnZ2FibGUsIHlvdSBkb24ndCBzYWNyaWZpY2UKK3F1YWxpdHkuCisKK1NwZWNpYWwgdGhhbmtzIHRvIFRob21hcyBLbHV5dmVyIGFuZCBFemlvIE1lbG90dGkgZm9yIGdldHRpbmcgUHl0aG9uIDMKK3N1cHBvcnQgdG8gdGhlIGZpbmlzaCBsaW5lLiBFemlvIE1lbG90dGkgaXMgYWxzbyB0byB0aGFuayBmb3IgZ3JlYXRseQoraW1wcm92aW5nIHRoZSBIVE1MIHBhcnNlciB0aGF0IGNvbWVzIHdpdGggUHl0aG9uIDMuMi4KKworPT09IENEQVRBIHNlY3Rpb25zIGFyZSBub3JtYWwgdGV4dCwgaWYgdGhleSdyZSB1bmRlcnN0b29kIGF0IGFsbC4gPT09CisKK0N1cnJlbnRseSwgdGhlIGx4bWwgYW5kIGh0bWw1bGliIEhUTUwgcGFyc2VycyBpZ25vcmUgQ0RBVEEgc2VjdGlvbnMgaW4KK21hcmt1cDoKKworIDxwPjwhW0NEQVRBW2Zvb11dPjwvcD4gPT4gPHA+PC9wPgorCitBIGZ1dHVyZSB2ZXJzaW9uIG9mIGh0bWw1bGliIHdpbGwgdHVybiBDREFUQSBzZWN0aW9ucyBpbnRvIHRleHQgbm9kZXMsCitidXQgb25seSB3aXRoaW4gdGFncyBsaWtlIDxzdmc+IGFuZCA8bWF0aD46CisKKyA8c3ZnPjwhW0NEQVRBW2Zvb11dPjwvc3ZnPiA9PiA8cD5mb288L3A+CisKK1RoZSBkZWZhdWx0IFhNTCBwYXJzZXIgKHdoaWNoIHVzZXMgbHhtbCBiZWhpbmQgdGhlIHNjZW5lcykgdHVybnMgQ0RBVEEKK3NlY3Rpb25zIGludG8gb3JkaW5hcnkgdGV4dCBlbGVtZW50czoKKworIDxwPjwhW0NEQVRBW2Zvb11dPjwvcD4gPT4gPHA+Zm9vPC9wPgorCitJbiB0aGVvcnkgaXQncyBwb3NzaWJsZSB0byBwcmVzZXJ2ZSB0aGUgQ0RBVEEgc2VjdGlvbnMgd2hlbiB1c2luZyB0aGUKK1hNTCBwYXJzZXIsIGJ1dCBJIGRvbid0IHNlZSBob3cgdG8gZ2V0IGl0IHRvIHdvcmsgaW4gcHJhY3RpY2UuCisKKz09PSBNaXNjZWxsYW5lb3VzIG90aGVyIHN0dWZmID09PQorCitJZiB0aGUgQmVhdXRpZnVsU291cCBpbnN0YW5jZSBoYXMgLmlzX3htbCBzZXQgdG8gVHJ1ZSwgYW4gYXBwcm9wcmlhdGUKK1hNTCBkZWNsYXJhdGlvbiB3aWxsIGJlIGVtaXR0ZWQgd2hlbiB0aGUgdHJlZSBpcyB0cmFuc2Zvcm1lZCBpbnRvIGEKK3N0cmluZzoKKworICAgIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij4KKyAgICA8bWFya3VwPgorICAgICAuLi4KKyAgICA8L21hcmt1cD4KKworVGhlIFsnbHhtbCcsICd4bWwnXSB0cmVlIGJ1aWxkZXIgc2V0cyAuaXNfeG1sIHRvIFRydWU7IHRoZSBvdGhlciB0cmVlCitidWlsZGVycyBzZXQgaXQgdG8gRmFsc2UuIElmIHlvdSB3YW50IHRvIHBhcnNlIFhIVE1MIHdpdGggYW4gSFRNTAorcGFyc2VyLCB5b3UgY2FuIHNldCBpdCBtYW51YWxseS4KKworCis9IDMuMi4wID0KKworVGhlIDMuMSBzZXJpZXMgd2Fzbid0IHZlcnkgdXNlZnVsLCBzbyBJIHJlbmFtZWQgdGhlIDMuMCBzZXJpZXMgdG8gMy4yCit0byBtYWtlIGl0IG9idmlvdXMgd2hpY2ggb25lIHlvdSBzaG91bGQgdXNlLgorCis9IDMuMS4wID0KKworQSBoeWJyaWQgdmVyc2lvbiB0aGF0IHN1cHBvcnRzIDIuNCBhbmQgY2FuIGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkCit0byBydW4gdW5kZXIgUHl0aG9uIDMuMC4gVGhlcmUgYXJlIHRocmVlIGJhY2t3YXJkcy1pbmNvbXBhdGlibGUKK2NoYW5nZXMgeW91IHNob3VsZCBiZSBhd2FyZSBvZiwgYnV0IG5vIG5ldyBmZWF0dXJlcyBvciBkZWxpYmVyYXRlCitiZWhhdmlvciBjaGFuZ2VzLgorCisxLiBzdHIoKSBtYXkgbm8gbG9uZ2VyIGRvIHdoYXQgeW91IHdhbnQuIFRoaXMgaXMgYmVjYXVzZSB0aGUgbWVhbmluZworb2Ygc3RyKCkgaW52ZXJ0cyBiZXR3ZWVuIFB5dGhvbiAyIGFuZCAzOyBpbiBQeXRob24gMiBpdCBnaXZlcyB5b3UgYQorYnl0ZSBzdHJpbmcsIGluIFB5dGhvbiAzIGl0IGdpdmVzIHlvdSBhIFVuaWNvZGUgc3RyaW5nLgorCitUaGUgZWZmZWN0IG9mIHRoaXMgaXMgdGhhdCB5b3UgY2FuJ3QgcGFzcyBhbiBlbmNvZGluZyB0byAuX19zdHJfXworYW55bW9yZS4gVXNlIGVuY29kZSgpIHRvIGdldCBhIHN0cmluZyBhbmQgZGVjb2RlKCkgdG8gZ2V0IFVuaWNvZGUsIGFuZAoreW91J2xsIGJlIHJlYWR5ICh3ZWxsLCByZWFkaWVyKSBmb3IgUHl0aG9uIDMuCisKKzIuIEJlYXV0aWZ1bCBTb3VwIGlzIG5vdyBiYXNlZCBvbiBIVE1MUGFyc2VyIHJhdGhlciB0aGFuIFNHTUxQYXJzZXIsCit3aGljaCBpcyBnb25lIGluIFB5dGhvbiAzLiBUaGVyZSdzIHNvbWUgYmFkIEhUTUwgdGhhdCBTR01MUGFyc2VyCitoYW5kbGVkIGJ1dCBIVE1MUGFyc2VyIGRvZXNuJ3QsIHVzdWFsbHkgdG8gZG8gd2l0aCBhdHRyaWJ1dGUgdmFsdWVzCit0aGF0IGFyZW4ndCBjbG9zZWQgb3IgaGF2ZSBicmFja2V0cyBpbnNpZGUgdGhlbToKKworICA8YSBocmVmPSJmb288L2E+LCA8L2E+PGEgaHJlZj0iYmFyIj5iYXo8L2E+CisgIDxhIGI9IjxhPiI+JywgJzxhIGI9IiZsdDthJmd0OyI+PC9hPjxhPiI+PC9hPgorCitBIGxhdGVyIHZlcnNpb24gb2YgQmVhdXRpZnVsIFNvdXAgd2lsbCBhbGxvdyB5b3UgdG8gcGx1ZyBpbiBkaWZmZXJlbnQKK3BhcnNlcnMgdG8gbWFrZSB0cmFkZW9mZnMgYmV0d2VlbiBzcGVlZCBhbmQgdGhlIGFiaWxpdHkgdG8gaGFuZGxlIGJhZAorSFRNTC4KKworMy4gSW4gUHl0aG9uIDMgKGJ1dCBub3QgUHl0aG9uIDIpLCBIVE1MUGFyc2VyIGNvbnZlcnRzIGVudGl0aWVzIHdpdGhpbgorYXR0cmlidXRlcyB0byB0aGUgY29ycmVzcG9uZGluZyBVbmljb2RlIGNoYXJhY3RlcnMuIEluIFB5dGhvbiAyIGl0J3MKK3Bvc3NpYmxlIHRvIHBhcnNlIHRoaXMgc3RyaW5nIGFuZCBsZWF2ZSB0aGUgJmVhY3V0ZTsgaW50YWN0LgorCisgPGEgaHJlZj0iaHR0cDovL2NydW1teS5jb20/c2FjciZlYWN1dGU7JmJsZXUiPgorCitJbiBQeXRob24gMywgdGhlICZlYWN1dGU7IGlzIGFsd2F5cyBjb252ZXJ0ZWQgdG8gXHhlOSBkdXJpbmcKK3BhcnNpbmcuCisKKworPSAzLjAuN2EgPQorCitBZGRlZCBhbiBpbXBvcnQgdGhhdCBtYWtlcyBCUyB3b3JrIGluIFB5dGhvbiAyLjMuCisKKworPSAzLjAuNyA9CisKK0ZpeGVkIGEgVW5pY29kZURlY29kZUVycm9yIHdoZW4gdW5waWNrbGluZyBkb2N1bWVudHMgdGhhdCBjb250YWluCitub24tQVNDSUkgY2hhcmFjdGVycy4KKworRml4ZWQgYSBUeXBlRXJyb3IgdGhhdCBvY2N1cmVkIGluIHNvbWUgY2lyY3Vtc3RhbmNlcyB3aGVuIGEgdGFnCitjb250YWluZWQgbm8gdGV4dC4KKworSnVtcCB0aHJvdWdoIGhvb3BzIHRvIGF2b2lkIHRoZSB1c2Ugb2YgY2hhcmRldCwgd2hpY2ggY2FuIGJlIGV4dHJlbWVseQorc2xvdyBpbiBzb21lIGNpcmN1bXN0YW5jZXMuIFVURi04IGRvY3VtZW50cyBzaG91bGQgbmV2ZXIgdHJpZ2dlciB0aGUKK3VzZSBvZiBjaGFyZGV0LgorCitXaGl0ZXNwYWNlIGlzIHByZXNlcnZlZCBpbnNpZGUgPHByZT4gYW5kIDx0ZXh0YXJlYT4gdGFncyB0aGF0IGNvbnRhaW4KK25vdGhpbmcgYnV0IHdoaXRlc3BhY2UuCisKK0JlYXV0aWZ1bCBTb3VwIGNhbiBub3cgcGFyc2UgYSBkb2N0eXBlIHRoYXQncyBzY29wZWQgdG8gYW4gWE1MIG5hbWVzcGFjZS4KKworCis9IDMuMC42ID0KKworR290IHJpZCBvZiBhIHZlcnkgb2xkIGRlYnVnIGxpbmUgdGhhdCBwcmV2ZW50ZWQgY2hhcmRldCBmcm9tIHdvcmtpbmcuCisKK0FkZGVkIGEgVGFnLmRlY29tcG9zZSgpIG1ldGhvZCB0aGF0IGNvbXBsZXRlbHkgZGlzY29ubmVjdHMgYSB0cmVlIG9yIGEKK3N1YnNldCBvZiBhIHRyZWUsIGJyZWFraW5nIGl0IHVwIGludG8gYml0ZS1zaXplZCBwaWVjZXMgdGhhdCBhcmUKK2Vhc3kgZm9yIHRoZSBnYXJiYWdlIGNvbGxlY3RlciB0byBjb2xsZWN0LgorCitUYWcuZXh0cmFjdCgpIG5vdyByZXR1cm5zIHRoZSB0YWcgdGhhdCB3YXMgZXh0cmFjdGVkLgorCitUYWcuZmluZE5leHQoKSBub3cgZG9lcyBzb21ldGhpbmcgd2l0aCB0aGUga2V5d29yZCBhcmd1bWVudHMgeW91IHBhc3MKK2l0IGluc3RlYWQgb2YgZHJvcHBpbmcgdGhlbSBvbiB0aGUgZmxvb3IuCisKK0ZpeGVkIGEgVW5pY29kZSBjb252ZXJzaW9uIGJ1Zy4KKworRml4ZWQgYSBidWcgdGhhdCBnYXJibGVkIHNvbWUgPG1ldGE+IHRhZ3Mgd2hlbiByZXdyaXRpbmcgdGhlbS4KKworCis9IDMuMC41ID0KKworU291cCBvYmplY3RzIGNhbiBub3cgYmUgcGlja2xlZCwgYW5kIGNvcGllZCB3aXRoIGNvcHkuZGVlcGNvcHkuCisKK1RhZy5hcHBlbmQgbm93IHdvcmtzIHByb3Blcmx5IG9uIGV4aXN0aW5nIEJTIG9iamVjdHMuIChJdCB3YXNuJ3QKK29yaWdpbmFsbHkgaW50ZW5kZWQgZm9yIG91dHNpZGUgdXNlLCBidXQgaXQgY2FuIGJlIG5vdy4pIChHaWxlcworUmFkZm9yZCkKKworUGFzc2luZyBpbiBhIG5vbmV4aXN0ZW50IGVuY29kaW5nIHdpbGwgbm8gbG9uZ2VyIGNyYXNoIHRoZSBwYXJzZXIgb24KK1B5dGhvbiAyLjQgKEpvaG4gTmFnbGUpLgorCitGaXhlZCBhbiB1bmRlcmx5aW5nIGJ1ZyBpbiBTR01MUGFyc2VyIHRoYXQgdGhpbmtzIEFTQ0lJIGhhcyAyNTUKK2NoYXJhY3RlcnMgaW5zdGVhZCBvZiAxMjcgKEpvaG4gTmFnbGUpLgorCitFbnRpdGllcyBhcmUgY29udmVydGVkIG1vcmUgY29uc2lzdGVudGx5IHRvIFVuaWNvZGUgY2hhcmFjdGVycy4KKworRW50aXR5IHJlZmVyZW5jZXMgaW4gYXR0cmlidXRlIHZhbHVlcyBhcmUgbm93IGNvbnZlcnRlZCB0byBVbmljb2RlCitjaGFyYWN0ZXJzIHdoZW4gYXBwcm9wcmlhdGUuIE51bWVyaWMgZW50aXRpZXMgYXJlIGFsd2F5cyBjb252ZXJ0ZWQsCitiZWNhdXNlIFNHTUxQYXJzZXIgYWx3YXlzIGNvbnZlcnRzIHRoZW0gb3V0c2lkZSBvZiBhdHRyaWJ1dGUgdmFsdWVzLgorCitBTExfRU5USVRJRVMgaGFwcGVucyB0byBqdXN0IGJlIHRoZSBYSFRNTCBlbnRpdGllcywgc28gSSByZW5hbWVkIGl0IHRvCitYSFRNTF9FTlRJVElFUy4KKworVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgYmFyZSBhbXBlcnNhbmRzIHdhcyB0b28gbG9vc2UuIEluIHNvbWUKK2Nhc2VzIGFtcGVyc2FuZHMgd2VyZSBub3QgYmVpbmcgZXNjYXBlZC4gKFNhbSBSdWJ5PykKKworTm9uLWJyZWFraW5nIHNwYWNlcyBhbmQgb3RoZXIgc3BlY2lhbCBVbmljb2RlIHNwYWNlIGNoYXJhY3RlcnMgYXJlIG5vCitsb25nZXIgZm9sZGVkIHRvIEFTQ0lJIHNwYWNlcy4gKFJvYmVydCBMZWZ0d2ljaCkKKworSW5mb3JtYXRpb24gaW5zaWRlIGEgVEVYVEFSRUEgdGFnIGlzIG5vdyBwYXJzZWQgbGl0ZXJhbGx5LCBub3QgYXMgSFRNTAordGFncy4gVEVYVEFSRUEgbm93IHdvcmtzIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIFNDUklQVC4gKFplcGh5ciBGYW5nKQorCis9IDMuMC40ID0KKworRml4ZWQgYSBidWcgdGhhdCBjcmFzaGVkIFVuaWNvZGUgY29udmVyc2lvbiBpbiBzb21lIGNhc2VzLgorCitGaXhlZCBhIGJ1ZyB0aGF0IHByZXZlbnRlZCBVbmljb2RlRGFtbWl0IGZyb20gYmVpbmcgdXNlZCBhcyBhCitnZW5lcmFsLXB1cnBvc2UgZGF0YSBzY3J1YmJlci4KKworRml4ZWQgc29tZSB1bml0IHRlc3QgZmFpbHVyZXMgd2hlbiBydW5uaW5nIGFnYWluc3QgUHl0aG9uIDIuNS4KKworV2hlbiBjb25zaWRlcmluZyB3aGV0aGVyIHRvIGNvbnZlcnQgc21hcnQgcXVvdGVzLCBVbmljb2RlRGFtbWl0IG5vdworbG9va3MgYXQgdGhlIG9yaWdpbmFsIGVuY29kaW5nIGluIGEgY2FzZS1pbnNlbnNpdGl2ZSB3YXkuCisKKz0gMy4wLjMgKDIwMDYwNjA2KSA9CisKK0JlYXV0aWZ1bCBTb3VwIGlzIG5vdyB1c2FibGUgYXMgYSB3YXkgdG8gY2xlYW4gdXAgaW52YWxpZCBYTUwvSFRNTCAoYmUKK3N1cmUgdG8gcGFzcyBpbiBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBmb3IgY29udmVydEVudGl0aWVzLCBvciBYTUwvSFRNTAorZW50aXRpZXMgbWlnaHQgc3RpY2sgYXJvdW5kIHRoYXQgYXJlbid0IHZhbGlkIGluIEhUTUwvWE1MKS4gVGhlIHJlc3VsdAorbWF5IG5vdCB2YWxpZGF0ZSwgYnV0IGl0IHNob3VsZCBiZSBnb29kIGVub3VnaCB0byBub3QgY2hva2UgYQorcmVhbC13b3JsZCBYTUwgcGFyc2VyLiBTcGVjaWZpY2FsbHksIHRoZSBvdXRwdXQgb2YgYSBwcm9wZXJseQorY29uc3RydWN0ZWQgc291cCBvYmplY3Qgc2hvdWxkIGFsd2F5cyBiZSB2YWxpZCBhcyBwYXJ0IG9mIGFuIFhNTAorZG9jdW1lbnQsIGJ1dCBwYXJ0cyBtYXkgYmUgbWlzc2luZyBpZiB0aGV5IHdlcmUgbWlzc2luZyBpbiB0aGUKK29yaWdpbmFsLiBBcyBhbHdheXMsIGlmIHRoZSBpbnB1dCBpcyB2YWxpZCBYTUwsIHRoZSBvdXRwdXQgd2lsbCBhbHNvCitiZSB2YWxpZC4KKworPSAzLjAuMiAoMjAwNjA2MDIpID0KKworUHJldmlvdXNseSwgQmVhdXRpZnVsIFNvdXAgY29ycmVjdGx5IGhhbmRsZWQgYXR0cmlidXRlIHZhbHVlcyB0aGF0Citjb250YWluZWQgZW1iZWRkZWQgcXVvdGVzIChzb21ldGltZXMgYnkgZXNjYXBpbmcpLCBidXQgbm90IG90aGVyIGtpbmRzCitvZiBYTUwgY2hhcmFjdGVyLiBOb3csIGl0IGNvcnJlY3RseSBoYW5kbGVzIG9yIGVzY2FwZXMgYWxsIHNwZWNpYWwgWE1MCitjaGFyYWN0ZXJzIGluIGF0dHJpYnV0ZSB2YWx1ZXMuCisKK0kgYWxpYXNlZCBtZXRob2RzIHRvIHRoZSAyLnggbmFtZXMgKGZldGNoLCBmaW5kLCBmaW5kVGV4dCwgZXRjLikgZm9yCitiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBwdXJwb3Nlcy4gVGhvc2UgbmFtZXMgYXJlIGRlcHJlY2F0ZWQgYW5kIGlmIEkKK2V2ZXIgZG8gYSA0LjAgSSB3aWxsIHJlbW92ZSB0aGVtLiBJIHdpbGwsIEkgdGVsbCB5b3UhCisKK0ZpeGVkIGEgYnVnIHdoZXJlIHRoZSBmaW5kQWxsIG1ldGhvZCB3YXNuJ3QgcGFzc2luZyBhbG9uZyBhbnkga2V5d29yZAorYXJndW1lbnRzLgorCitXaGVuIHJ1biBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIEJlYXV0aWZ1bCBTb3VwIG5vdyBhY3RzIGFzIGFuIEhUTUwKK3ByZXR0eS1wcmludGVyLCBub3QgYW4gWE1MIHByZXR0eS1wcmludGVyLgorCis9IDMuMC4xICgyMDA2MDUzMCkgPQorCitSZWludHJvZHVjZWQgdGhlICJmZXRjaCBieSBDU1MgY2xhc3MiIHNob3J0Y3V0LiBJIHRob3VnaHQga2V5d29yZAorYXJndW1lbnRzIHdvdWxkIHJlcGxhY2UgaXQsIGJ1dCB0aGV5IGRvbid0LiBZb3UgY2FuJ3QgY2FsbCBzb3VwKCdhJywKK2NsYXNzPSdmb28nKSBiZWNhdXNlIGNsYXNzIGlzIGEgUHl0aG9uIGtleXdvcmQuCisKK0lmIEJlYXV0aWZ1bCBTb3VwIGVuY291bnRlcnMgYSBtZXRhIHRhZyB0aGF0IGRlY2xhcmVzIHRoZSBlbmNvZGluZywKK2J1dCBhIFNvdXBTdHJhaW5lciB0ZWxscyBpdCBub3QgdG8gcGFyc2UgdGhhdCB0YWcsIEJlYXV0aWZ1bCBTb3VwIHdpbGwKK25vIGxvbmdlciB0cnkgdG8gcmV3cml0ZSB0aGUgbWV0YSB0YWcgdG8gbWVudGlvbiB0aGUgbmV3CitlbmNvZGluZy4gQmFzaWNhbGx5LCB0aGlzIG1ha2VzIFNvdXBTdHJhaW5lcnMgd29yayBpbiByZWFsLXdvcmxkCithcHBsaWNhdGlvbnMgaW5zdGVhZCBvZiBjcmFzaGluZyB0aGUgcGFyc2VyLgorCis9IDMuMC4wICJXaG8gd291bGQgbm90IGdpdmUgYWxsIGVsc2UgZm9yIHR3byBwIiAoMjAwNjA1MjgpID0KKworVGhpcyByZWxlYXNlIGlzIG5vdCBiYWNrd2FyZC1jb21wYXRpYmxlIHdpdGggcHJldmlvdXMgcmVsZWFzZXMuIElmCit5b3UndmUgZ290IGNvZGUgd3JpdHRlbiB3aXRoIGEgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgZ28KK2FoZWFkIGFuZCBrZWVwIHVzaW5nIGl0LCB1bmxlc3Mgb25lIG9mIHRoZSBmZWF0dXJlcyBtZW50aW9uZWQgaGVyZQorcmVhbGx5IG1ha2VzIHlvdXIgbGlmZSBlYXNpZXIuIFNpbmNlIHRoZSBsaWJyYXJ5IGlzIHNlbGYtY29udGFpbmVkLAoreW91IGNhbiBpbmNsdWRlIGFuIG9sZCBjb3B5IG9mIHRoZSBsaWJyYXJ5IGluIHlvdXIgb2xkIGFwcGxpY2F0aW9ucywKK2FuZCB1c2UgdGhlIG5ldyB2ZXJzaW9uIGZvciBldmVyeXRoaW5nIGVsc2UuCisKK1RoZSBkb2N1bWVudGF0aW9uIGhhcyBiZWVuIHJld3JpdHRlbiBhbmQgZ3JlYXRseSBleHBhbmRlZCB3aXRoIG1hbnkKK21vcmUgZXhhbXBsZXMuCisKK0JlYXV0aWZ1bCBTb3VwIGF1dG9kZXRlY3RzIHRoZSBlbmNvZGluZyBvZiBhIGRvY3VtZW50IChvciB1c2VzIHRoZSBvbmUKK3lvdSBzcGVjaWZ5KSwgYW5kIGNvbnZlcnRzIGl0IGZyb20gaXRzIG5hdGl2ZSBlbmNvZGluZyB0bworVW5pY29kZS4gSW50ZXJuYWxseSwgaXQgb25seSBkZWFscyB3aXRoIFVuaWNvZGUgc3RyaW5ncy4gV2hlbiB5b3UKK3ByaW50IG91dCB0aGUgZG9jdW1lbnQsIGl0IGNvbnZlcnRzIHRvIFVURi04IChvciBhbm90aGVyIGVuY29kaW5nIHlvdQorc3BlY2lmeSkuIFtEb2MgcmVmZXJlbmNlXQorCitJdCdzIG5vdyBlYXN5IHRvIG1ha2UgbGFyZ2Utc2NhbGUgY2hhbmdlcyB0byB0aGUgcGFyc2UgdHJlZSB3aXRob3V0CitzY3Jld2luZyB1cCB0aGUgbmF2aWdhdGlvbiBtZW1iZXJzLiBUaGUgbWV0aG9kcyBhcmUgZXh0cmFjdCwKK3JlcGxhY2VXaXRoLCBhbmQgaW5zZXJ0LiBbRG9jIHJlZmVyZW5jZS4gU2VlIGFsc28gSW1wcm92aW5nIE1lbW9yeQorVXNhZ2Ugd2l0aCBleHRyYWN0XQorCitQYXNzaW5nIFRydWUgaW4gYXMgYW4gYXR0cmlidXRlIHZhbHVlIGdpdmVzIHlvdSB0YWdzIHRoYXQgaGF2ZSBhbnkKK3ZhbHVlIGZvciB0aGF0IGF0dHJpYnV0ZS4gWW91IGRvbid0IGhhdmUgdG8gY3JlYXRlIGEgcmVndWxhcgorZXhwcmVzc2lvbi4gUGFzc2luZyBOb25lIGZvciBhbiBhdHRyaWJ1dGUgdmFsdWUgZ2l2ZXMgeW91IHRhZ3MgdGhhdAorZG9uJ3QgaGF2ZSB0aGF0IGF0dHJpYnV0ZSBhdCBhbGwuCisKK1RhZyBvYmplY3RzIG5vdyBrbm93IHdoZXRoZXIgb3Igbm90IHRoZXkncmUgc2VsZi1jbG9zaW5nLiBUaGlzIGF2b2lkcwordGhlIHByb2JsZW0gd2hlcmUgQmVhdXRpZnVsIFNvdXAgdGhvdWdodCB0aGF0IHRhZ3MgbGlrZSA8QlIgLz4gd2VyZQorc2VsZi1jbG9zaW5nIGV2ZW4gaW4gWE1MIGRvY3VtZW50cy4gWW91IGNhbiBjdXN0b21pemUgdGhlIHNlbGYtY2xvc2luZwordGFncyBmb3IgYSBwYXJzZXIgb2JqZWN0IGJ5IHBhc3NpbmcgdGhlbSBpbiBhcyBhIGxpc3Qgb2YKK3NlbGZDbG9zaW5nVGFnczogeW91IGRvbid0IGhhdmUgdG8gc3ViY2xhc3MgYW55bW9yZS4KKworVGhlcmUncyBhIG5ldyBidWlsdC1pbiBwYXJzZXIsIE1pbmltYWxTb3VwLCB3aGljaCBoYXMgbW9zdCBvZgorQmVhdXRpZnVsU291cCdzIEhUTUwtc3BlY2lmaWMgcnVsZXMsIGJ1dCBubyB0YWcgbmVzdGluZyBydWxlcy4gW0RvYworcmVmZXJlbmNlXQorCitZb3UgY2FuIHVzZSBhIFNvdXBTdHJhaW5lciB0byB0ZWxsIEJlYXV0aWZ1bCBTb3VwIHRvIHBhcnNlIG9ubHkgcGFydAorb2YgYSBkb2N1bWVudC4gVGhpcyBzYXZlcyB0aW1lIGFuZCBtZW1vcnksIG9mdGVuIG1ha2luZyBCZWF1dGlmdWwgU291cAorYWJvdXQgYXMgZmFzdCBhcyBhIGN1c3RvbS1idWlsdCBTR01MUGFyc2VyIHN1YmNsYXNzLiBbRG9jIHJlZmVyZW5jZSwKK1NvdXBTdHJhaW5lciByZWZlcmVuY2VdCisKK1lvdSBjYW4gKHVzdWFsbHkpIHVzZSBrZXl3b3JkIGFyZ3VtZW50cyBpbnN0ZWFkIG9mIHBhc3NpbmcgYQorZGljdGlvbmFyeSBvZiBhdHRyaWJ1dGVzIHRvIGEgc2VhcmNoIG1ldGhvZC4gVGhhdCBpcywgeW91IGNhbiByZXBsYWNlCitzb3VwKGFyZ3M9eyJpZCIgOiAiNSJ9KSB3aXRoIHNvdXAoaWQ9IjUiKS4gWW91IGNhbiBzdGlsbCB1c2UgYXJncyBpZgorKGZvciBpbnN0YW5jZSkgeW91IG5lZWQgdG8gZmluZCBhbiBhdHRyaWJ1dGUgd2hvc2UgbmFtZSBjbGFzaGVzIHdpdGgKK3RoZSBuYW1lIG9mIGFuIGFyZ3VtZW50IHRvIGZpbmRBbGwuIFtEb2MgcmVmZXJlbmNlOiAqKmt3YXJncyBhdHRyc10KKworVGhlIG1ldGhvZCBuYW1lcyBoYXZlIGNoYW5nZWQgdG8gdGhlIGJldHRlciBtZXRob2QgbmFtZXMgdXNlZCBpbgorUnVieWZ1bCBTb3VwLiBJbnN0ZWFkIG9mIGZpbmQgbWV0aG9kcyBhbmQgZmV0Y2ggbWV0aG9kcywgdGhlcmUgYXJlCitvbmx5IGZpbmQgbWV0aG9kcy4gSW5zdGVhZCBvZiBhIHNjaGVtZSB3aGVyZSB5b3UgY2FuJ3QgcmVtZW1iZXIgd2hpY2gKK21ldGhvZCBmaW5kcyBvbmUgZWxlbWVudCBhbmQgd2hpY2ggb25lIGZpbmRzIHRoZW0gYWxsLCB3ZSBoYXZlIGZpbmQKK2FuZCBmaW5kQWxsLiBJbiBnZW5lcmFsLCBpZiB0aGUgbWV0aG9kIG5hbWUgbWVudGlvbnMgQWxsIG9yIGEgcGx1cmFsCitub3VuIChlZy4gZmluZE5leHRTaWJsaW5ncyksIHRoZW4gaXQgZmluZHMgbWFueSBlbGVtZW50cworbWV0aG9kLiBPdGhlcndpc2UsIGl0IG9ubHkgZmluZHMgb25lIGVsZW1lbnQuIFtEb2MgcmVmZXJlbmNlXQorCitTb21lIG9mIHRoZSBhcmd1bWVudCBuYW1lcyBoYXZlIGJlZW4gcmVuYW1lZCBmb3IgY2xhcml0eS4gRm9yIGluc3RhbmNlCithdm9pZFBhcnNlclByb2JsZW1zIGlzIG5vdyBwYXJzZXJNYXNzYWdlLgorCitCZWF1dGlmdWwgU291cCBubyBsb25nZXIgaW1wbGVtZW50cyBhIGZlZWQgbWV0aG9kLiBZb3UgbmVlZCB0byBwYXNzIGEKK3N0cmluZyBvciBhIGZpbGVoYW5kbGUgaW50byB0aGUgc291cCBjb25zdHJ1Y3Rvciwgbm90IHdpdGggZmVlZCBhZnRlcgordGhlIHNvdXAgaGFzIGJlZW4gY3JlYXRlZC4gVGhlcmUgaXMgc3RpbGwgYSBmZWVkIG1ldGhvZCwgYnV0IGl0J3MgdGhlCitmZWVkIG1ldGhvZCBpbXBsZW1lbnRlZCBieSBTR01MUGFyc2VyIGFuZCBjYWxsaW5nIGl0IHdpbGwgYnlwYXNzCitCZWF1dGlmdWwgU291cCBhbmQgY2F1c2UgcHJvYmxlbXMuCisKK1RoZSBOYXZpZ2FibGVUZXh0IGNsYXNzIGhhcyBiZWVuIHJlbmFtZWQgdG8gTmF2aWdhYmxlU3RyaW5nLiBUaGVyZSBpcworbm8gTmF2aWdhYmxlVW5pY29kZVN0cmluZyBhbnltb3JlLCBiZWNhdXNlIGV2ZXJ5IHN0cmluZyBpbnNpZGUgYQorQmVhdXRpZnVsIFNvdXAgcGFyc2UgdHJlZSBpcyBhIFVuaWNvZGUgc3RyaW5nLgorCitmaW5kVGV4dCBhbmQgZmV0Y2hUZXh0IGFyZSBnb25lLiBKdXN0IHBhc3MgYSB0ZXh0IGFyZ3VtZW50IGludG8gZmluZAorb3IgZmluZEFsbC4KKworTnVsbCB3YXMgbW9yZSB0cm91YmxlIHRoYW4gaXQgd2FzIHdvcnRoLCBzbyBJIGdvdCByaWQgb2YgaXQuIEFueXRoaW5nCit0aGF0IHVzZWQgdG8gcmV0dXJuIE51bGwgbm93IHJldHVybnMgTm9uZS4KKworU3BlY2lhbCBYTUwgY29uc3RydWN0cyBsaWtlIGNvbW1lbnRzIGFuZCBDREFUQSBub3cgaGF2ZSB0aGVpciBvd24KK05hdmlnYWJsZVN0cmluZyBzdWJjbGFzc2VzLCBpbnN0ZWFkIG9mIGJlaW5nIHRyZWF0ZWQgYXMgb2RkbHktZm9ybWVkCitkYXRhLiBJZiB5b3UgcGFyc2UgYSBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIENEQVRBIGFuZCB3cml0ZSBpdCBiYWNrCitvdXQsIHRoZSBDREFUQSB3aWxsIHN0aWxsIGJlIHRoZXJlLgorCitXaGVuIHlvdSdyZSBwYXJzaW5nIGEgZG9jdW1lbnQsIHlvdSBjYW4gZ2V0IEJlYXV0aWZ1bCBTb3VwIHRvIGNvbnZlcnQKK1hNTCBvciBIVE1MIGVudGl0aWVzIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgVW5pY29kZSBjaGFyYWN0ZXJzLiBbRG9jCityZWZlcmVuY2VdCisKKz0gMi4xLjEgKDIwMDUwOTE4KSA9CisKK0ZpeGVkIGEgc2VyaW91cyBwZXJmb3JtYW5jZSBidWcgaW4gQmVhdXRpZnVsU3RvbmVTb3VwIHdoaWNoIHdhcworY2F1c2luZyBwYXJzaW5nIHRvIGJlIGluY3JlZGlibHkgc2xvdy4KKworQ29ycmVjdGVkIHNldmVyYWwgZW50aXRpZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgYmVpbmcgaW5jb3JyZWN0bHkKK3RyYW5zbGF0ZWQgZnJvbSBNaWNyb3NvZnQgc21hcnQtcXVvdGUtbGlrZSBjaGFyYWN0ZXJzLgorCitGaXhlZCBhIGJ1ZyB0aGF0IHdhcyBicmVha2luZyB0ZXh0IGZldGNoLgorCitGaXhlZCBhIGJ1ZyB0aGF0IGNyYXNoZWQgdGhlIHBhcnNlciB3aGVuIHRleHQgY2h1bmtzIHRoYXQgbG9vayBsaWtlCitIVE1MIHRhZyBuYW1lcyBzaG93ZWQgdXAgd2l0aGluIGEgU0NSSVBUIHRhZy4KKworVEhFQUQsIFRCT0RZLCBhbmQgVEZPT1QgdGFncyBhcmUgbm93IG5lc3RhYmxlIHdpdGhpbiBUQUJMRQordGFncy4gTmVzdGVkIHRhYmxlcyBzaG91bGQgcGFyc2UgbW9yZSBzZW5zaWJseSBub3cuCisKK0JBU0UgaXMgbm93IGNvbnNpZGVyZWQgYSBzZWxmLWNsb3NpbmcgdGFnLgorCis9IDIuMS4wICJHYW1lLCBvciBhbnkgb3RoZXIgZGlzaD8iICgyMDA1MDUwNCkgPQorCitBZGRlZCBhIHdpZGUgdmFyaWV0eSBvZiBuZXcgc2VhcmNoIG1ldGhvZHMgd2hpY2gsIGdpdmVuIGEgc3RhcnRpbmcKK3BvaW50IGluc2lkZSB0aGUgdHJlZSwgZm9sbG93IGEgcGFydGljdWxhciBuYXZpZ2F0aW9uIG1lbWJlciAobGlrZQorbmV4dFNpYmxpbmcpIG92ZXIgYW5kIG92ZXIgYWdhaW4sIGxvb2tpbmcgZm9yIFRhZyBhbmQgTmF2aWdhYmxlVGV4dAorb2JqZWN0cyB0aGF0IG1hdGNoIGNlcnRhaW4gY3JpdGVyaWEuIFRoZSBuZXcgbWV0aG9kcyBhcmUgZmluZE5leHQsCitmZXRjaE5leHQsIGZpbmRQcmV2aW91cywgZmV0Y2hQcmV2aW91cywgZmluZE5leHRTaWJsaW5nLAorZmV0Y2hOZXh0U2libGluZ3MsIGZpbmRQcmV2aW91c1NpYmxpbmcsIGZldGNoUHJldmlvdXNTaWJsaW5ncywKK2ZpbmRQYXJlbnQsIGFuZCBmZXRjaFBhcmVudHMuIEFsbCBvZiB0aGVzZSB1c2UgdGhlIHNhbWUgYmFzaWMgY29kZQordXNlZCBieSBmaXJzdCBhbmQgZmV0Y2gsIHNvIHlvdSBjYW4gcGFzcyB5b3VyIHdlaXJkIHdheXMgb2YgbWF0Y2hpbmcKK3RoaW5ncyBpbnRvIHRoZXNlIG1ldGhvZHMuCisKK1RoZSBmZXRjaCBtZXRob2QgYW5kIGl0cyBkZXJpdmF0aXZlcyBub3cgYWNjZXB0IGEgbGltaXQgYXJndW1lbnQuCisKK1lvdSBjYW4gbm93IHBhc3Mga2V5d29yZCBhcmd1bWVudHMgd2hlbiBjYWxsaW5nIGEgVGFnIG9iamVjdCBhcyB0aG91Z2gKK2l0IHdlcmUgYSBtZXRob2QuCisKK0ZpeGVkIGEgYnVnIHRoYXQgY2F1c2VkIGFsbCBoYW5kLWNyZWF0ZWQgdGFncyB0byBzaGFyZSBhIHNpbmdsZSBzZXQgb2YKK2F0dHJpYnV0ZXMuCisKKz0gMi4wLjMgKDIwMDUwNTAxKSA9CisKK0ZpeGVkIFB5dGhvbiAyLjIgc3VwcG9ydCBmb3IgaXRlcmF0b3JzLgorCitGaXhlZCBhIGJ1ZyB0aGF0IGdhdmUgdGhlIHdyb25nIHJlcHJlc2VudGF0aW9uIHRvIHRhZ3Mgd2l0aGluIHF1b3RlCit0YWdzIGxpa2UgPHNjcmlwdD4uCisKK1Rvb2sgc29tZSBjb2RlIGZyb20gTWFyayBQaWxncmltIHRoYXQgdHJlYXRzIENEQVRBIGRlY2xhcmF0aW9ucyBhcworZGF0YSBpbnN0ZWFkIG9mIGlnbm9yaW5nIHRoZW0uCisKK0JlYXV0aWZ1bCBTb3VwJ3Mgc2V0dXAucHkgd2lsbCBub3cgZG8gYW4gaW5zdGFsbCBldmVuIGlmIHRoZSB1bml0Cit0ZXN0cyBmYWlsLiBJdCB3b24ndCBidWlsZCBhIHNvdXJjZSBkaXN0cmlidXRpb24gaWYgdGhlIHVuaXQgdGVzdHMKK2ZhaWwsIHNvIEkgY2FuJ3QgcmVsZWFzZSBhIG5ldyB2ZXJzaW9uIHVubGVzcyB0aGV5IHBhc3MuCisKKz0gMi4wLjIgKDIwMDUwNDE2KSA9CisKK0FkZGVkIHRoZSB1bml0IHRlc3RzIGluIGEgc2VwYXJhdGUgbW9kdWxlLCBhbmQgcGFja2FnZWQgaXQgd2l0aAorZGlzdHV0aWxzLgorCitGaXhlZCBhIGJ1ZyB0aGF0IHNvbWV0aW1lcyBjYXVzZWQgcmVuZGVyQ29udGVudHMoKSB0byByZXR1cm4gYSBVbmljb2RlCitzdHJpbmcgZXZlbiBpZiB0aGVyZSB3YXMgbm8gVW5pY29kZSBpbiB0aGUgb3JpZ2luYWwgc3RyaW5nLgorCitBZGRlZCB0aGUgZG9uZSgpIG1ldGhvZCwgd2hpY2ggY2xvc2VzIGFsbCBvZiB0aGUgcGFyc2VyJ3Mgb3BlbgordGFncy4gSXQgZ2V0cyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIHlvdSBwYXNzIGluIHNvbWUgdGV4dCB0byB0aGUKK2NvbnN0cnVjdG9yIG9mIGEgcGFyc2VyIGNsYXNzOyBvdGhlcndpc2UgeW91IG11c3QgY2FsbCBpdCB5b3Vyc2VsZi4KKworUmVpbnN0YXRlZCBzb21lIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggMS54IHZlcnNpb25zOiByZWZlcmVuY2luZwordGhlIHN0cmluZyBtZW1iZXIgb2YgYSBOYXZpZ2FibGVUZXh0IG9iamVjdCByZXR1cm5zIHRoZSBOYXZpZ2FibGVUZXh0CitvYmplY3QgaW5zdGVhZCBvZiB0aHJvd2luZyBhbiBlcnJvci4KKworPSAyLjAuMSAoMjAwNTA0MTIpID0KKworRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgYmFkIHJlc3VsdHMgd2hlbiB5b3UgdHJpZWQgdG8gcmVmZXJlbmNlIGEgdGFnCituYW1lIHNob3J0ZXIgdGhhbiAzIGNoYXJhY3RlcnMgYXMgYSBtZW1iZXIgb2YgYSBUYWcsIGVnLiB0YWcudGFibGUudGQuCisKK01hZGUgc3VyZSBhbGwgVGFncyBoYXZlIHRoZSAnaGlkZGVuJyBhdHRyaWJ1dGUgc28gdGhhdCBhbiBhdHRlbXB0IHRvCithY2Nlc3MgdGFnLmhpZGRlbiBkb2Vzbid0IHNwYXduIGFuIGF0dGVtcHQgdG8gZmluZCBhIHRhZyBuYW1lZAorJ2hpZGRlbicuCisKK0ZpeGVkIGEgYnVnIGluIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yLgorCis9IDIuMC4wICJXaG8gY2FyZXMgZm9yIGZpc2g/IiAoMjAwNTA0MTApCisKK0JlYXV0aWZ1bCBTb3VwIHZlcnNpb24gMSB3YXMgdmVyeSB1c2VmdWwgYnV0IGFsc28gcHJldHR5IHN0dXBpZC4gSQorb3JpZ2luYWxseSB3cm90ZSBpdCB3aXRob3V0IG5vdGljaW5nIGFueSBvZiB0aGUgcHJvYmxlbXMgaW5oZXJlbnQgaW4KK3RyeWluZyB0byBidWlsZCBhIHBhcnNlIHRyZWUgb3V0IG9mIGFtYmlndW91cyBIVE1MIHRhZ3MuIFRoaXMgdmVyc2lvbgorc29sdmVzIGFsbCBvZiB0aG9zZSBwcm9ibGVtcyB0byBteSBzYXRpc2ZhY3Rpb24uIEl0IGFsc28gYWRkcyBtYW55IG5ldworY2xldmVyIHRoaW5ncyB0byBtYWtlIHVwIGZvciB0aGUgcmVtb3ZhbCBvZiB0aGUgc3R1cGlkIHRoaW5ncy4KKworPT0gUGFyc2luZyA9PQorCitUaGUgcGFyc2VyIGxvZ2ljIGhhcyBiZWVuIGdyZWF0bHkgaW1wcm92ZWQsIGFuZCB0aGUgQmVhdXRpZnVsU291cAorY2xhc3Mgc2hvdWxkIG11Y2ggbW9yZSByZWxpYWJseSB5aWVsZCBhIHBhcnNlIHRyZWUgdGhhdCBsb29rcyBsaWtlCit3aGF0IHRoZSBwYWdlIGF1dGhvciBpbnRlbmRlZC4gRm9yIGEgcGFydGljdWxhciBjbGFzcyBvZiBvZGQgZWRnZQorY2FzZXMgdGhhdCBub3cgY2F1c2VzIHByb2JsZW1zLCB0aGVyZSBpcyBhIG5ldyBjbGFzcywKK0lDYW50QmVsaWV2ZUl0c0JlYXV0aWZ1bFNvdXAuCisKK0J5IGRlZmF1bHQsIEJlYXV0aWZ1bCBTb3VwIG5vdyBwZXJmb3JtcyBzb21lIGNsZWFudXAgb3BlcmF0aW9ucyBvbgordGV4dCBiZWZvcmUgcGFyc2luZyBpdC4gVGhpcyBpcyB0byBhdm9pZCBjb21tb24gcHJvYmxlbXMgd2l0aCBiYWQKK2RlZmluaXRpb25zIGFuZCBzZWxmLWNsb3NpbmcgdGFncyB0aGF0IGNyYXNoIFNHTUxQYXJzZXIuIFlvdSBjYW4KK3Byb3ZpZGUgeW91ciBvd24gc2V0IG9mIGNsZWFudXAgb3BlcmF0aW9ucywgb3IgdHVybiBpdCBvZmYKK2FsdG9nZXRoZXIuIFRoZSBjbGVhbnVwIG9wZXJhdGlvbnMgaW5jbHVkZSBmaXhpbmcgc2VsZi1jbG9zaW5nIHRhZ3MKK3RoYXQgZG9uJ3QgY2xvc2UsIGFuZCByZXBsYWNpbmcgTWljcm9zb2Z0IHNtYXJ0IHF1b3RlcyBhbmQgc2ltaWxhcgorY2hhcmFjdGVycyB3aXRoIHRoZWlyIEhUTUwgZW50aXR5IGVxdWl2YWxlbnRzLgorCitZb3UgY2FuIG5vdyBnZXQgYSBwcmV0dHktcHJpbnQgdmVyc2lvbiBvZiBwYXJzZWQgSFRNTCB0byBnZXQgYSB2aXN1YWwKK3BpY3R1cmUgb2YgaG93IEJlYXV0aWZ1bCBTb3VwIHBhcnNlcyBpdCwgd2l0aCB0aGUgVGFnLnByZXR0aWZ5KCkKK21ldGhvZC4KKworPT0gU3RyaW5ncyBhbmQgVW5pY29kZSA9PQorCitUaGVyZSBhcmUgc2VwYXJhdGUgTmF2aWdhYmxlVGV4dCBzdWJjbGFzc2VzIGZvciBBU0NJSSBhbmQgVW5pY29kZQorc3RyaW5ncy4gVGhlc2UgY2xhc3NlcyBkaXJlY3RseSBzdWJjbGFzcyB0aGUgY29ycmVzcG9uZGluZyBiYXNlIGRhdGEKK3R5cGVzLiBUaGlzIG1lYW5zIHlvdSBjYW4gdHJlYXQgTmF2aWdhYmxlVGV4dCBvYmplY3RzIGFzIHN0cmluZ3MKK2luc3RlYWQgb2YgaGF2aW5nIHRvIGNhbGwgbWV0aG9kcyBvbiB0aGVtIHRvIGdldCB0aGUgc3RyaW5ncy4KKworc3RyKCkgb24gYSBUYWcgYWx3YXlzIHJldHVybnMgYSBzdHJpbmcsIGFuZCB1bmljb2RlKCkgYWx3YXlzIHJldHVybnMKK1VuaWNvZGUuIFByZXZpb3VzbHkgaXQgd2FzIGluY29uc2lzdGVudC4KKworPT0gVHJlZSB0cmF2ZXJzYWwgPT0KKworSW4gYSBmaXJzdCgpIG9yIGZldGNoKCkgY2FsbCwgdGhlIHRhZyBuYW1lIG9yIHRoZSBkZXNpcmVkIHZhbHVlIG9mIGFuCithdHRyaWJ1dGUgY2FuIG5vdyBiZSBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKworICogQSBzdHJpbmcgKG1hdGNoZXMgdGhhdCBzcGVjaWZpYyB0YWcgb3IgdGhhdCBzcGVjaWZpYyBhdHRyaWJ1dGUgdmFsdWUpCisgKiBBIGxpc3Qgb2Ygc3RyaW5ncyAobWF0Y2hlcyBhbnkgdGFnIG9yIGF0dHJpYnV0ZSB2YWx1ZSBpbiB0aGUgbGlzdCkKKyAqIEEgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCAobWF0Y2hlcyBhbnkgdGFnIG9yIGF0dHJpYnV0ZQorICAgdmFsdWUgdGhhdCBtYXRjaGVzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24pCisgKiBBIGNhbGxhYmxlIG9iamVjdCB0aGF0IHRha2VzIHRoZSBUYWcgb2JqZWN0IG9yIGF0dHJpYnV0ZSB2YWx1ZSBhcyBhCisgICBzdHJpbmcuIEl0IHJldHVybnMgTm9uZS9mYWxzZS9lbXB0eSBzdHJpbmcgaWYgdGhlIGdpdmVuIHN0cmluZworICAgZG9lc24ndCBtYXRjaCwgYW5kIGFueSBvdGhlciB2YWx1ZSBpZiBpdCBkb2VzLgorCitUaGlzIGlzIG11Y2ggZWFzaWVyIHRvIHVzZSB0aGFuIFNRTC1zdHlsZSB3aWxkY2FyZHMgKHNlZSwgcmVndWxhcgorZXhwcmVzc2lvbnMgYXJlIGdvb2QgZm9yIHNvbWV0aGluZykuIEJlY2F1c2Ugb2YgdGhpcywgSSB0b29rIG91dAorU1FMLXN0eWxlIHdpbGRjYXJkcy4gSSdsbCBwdXQgdGhlbSBiYWNrIGlmIHNvbWVvbmUgY29tcGxhaW5zLCBidXQKK3RoZWlyIHJlbW92YWwgc2ltcGxpZmllcyB0aGUgY29kZSBhIGxvdC4KKworWW91IGNhbiB1c2UgZmV0Y2goKSBhbmQgZmlyc3QoKSB0byBzZWFyY2ggZm9yIHRleHQgaW4gdGhlIHBhcnNlIHRyZWUsCitub3QganVzdCB0YWdzLiBUaGVyZSBhcmUgbmV3IGFsaWFzIG1ldGhvZHMgZmV0Y2hUZXh0KCkgYW5kIGZpcnN0VGV4dCgpCitkZXNpZ25lZCBmb3IgdGhpcyBwdXJwb3NlLiBBcyB3aXRoIHNlYXJjaGluZyBmb3IgdGFncywgeW91IGNhbiBwYXNzIGluCithIHN0cmluZywgYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LCBvciBhIG1ldGhvZCB0byBtYXRjaCB5b3VyIHRleHQuCisKK0lmIHlvdSBwYXNzIGluIHNvbWV0aGluZyBiZXNpZGVzIGEgbWFwIHRvIHRoZSBhdHRycyBhcmd1bWVudCBvZgorZmV0Y2goKSBvciBmaXJzdCgpLCBCZWF1dGlmdWwgU291cCB3aWxsIGFzc3VtZSB5b3Ugd2FudCB0byBtYXRjaCB0aGF0Cit0aGluZyBhZ2FpbnN0IHRoZSAiY2xhc3MiIGF0dHJpYnV0ZS4gV2hlbiB5b3UncmUgc2NyYXBpbmcKK3dlbGwtc3RydWN0dXJlZCBIVE1MLCB0aGlzIG1ha2VzIHlvdXIgY29kZSBhIGxvdCBjbGVhbmVyLgorCisxLnggYW5kIDIueCBib3RoIGxldCB5b3UgY2FsbCBhIFRhZyBvYmplY3QgYXMgYSBzaG9ydGhhbmQgZm9yCitmZXRjaCgpLiBGb3IgaW5zdGFuY2UsIGZvbygiYmFyIikgaXMgYSBzaG9ydGhhbmQgZm9yCitmb28uZmV0Y2goImJhciIpLiBJbiAyLngsIHlvdSBjYW4gYWxzbyBhY2Nlc3MgYSBzcGVjaWFsbHktbmFtZWQgbWVtYmVyCitvZiBhIFRhZyBvYmplY3QgYXMgYSBzaG9ydGhhbmQgZm9yIGZpcnN0KCkuIEZvciBpbnN0YW5jZSwgZm9vLmJhclRhZworaXMgYSBzaG9ydGhhbmQgZm9yIGZvby5maXJzdCgiYmFyIikuIEJ5IGNoYWluaW5nIHRoZXNlIHNob3J0Y3V0cyB5b3UKK3RyYXZlcnNlIGEgdHJlZSBpbiB2ZXJ5IGxpdHRsZSBjb2RlOiBmb3IgaGVhZGVyIGluCitzb3VwLmJvZHlUYWcucFRhZy50YWJsZVRhZygndGgnKToKKworSWYgYW4gZWxlbWVudCByZWxhdGlvbnNoaXAgKGxpa2UgcGFyZW50IG9yIG5leHQpIGRvZXNuJ3QgYXBwbHkgdG8gYQordGFnLCBpdCdsbCBub3cgc2hvdyB1cCBOdWxsIGluc3RlYWQgb2YgTm9uZS4gZmlyc3QoKSB3aWxsIGFsc28gcmV0dXJuCitOdWxsIGlmIHlvdSBhc2sgaXQgZm9yIGEgbm9uZXhpc3RlbnQgdGFnLiBOdWxsIGlzIGFuIG9iamVjdCB0aGF0J3MKK2p1c3QgbGlrZSBOb25lLCBleGNlcHQgeW91IGNhbiBkbyB3aGF0ZXZlciB5b3Ugd2FudCB0byBpdCBhbmQgaXQnbGwKK2dpdmUgeW91IE51bGwgaW5zdGVhZCBvZiB0aHJvd2luZyBhbiBlcnJvci4KKworVGhpcyBsZXRzIHlvdSBkbyB0cmVlIHRyYXZlcnNhbHMgbGlrZSBzb3VwLmh0bWxUYWcuaGVhZFRhZy50aXRsZVRhZword2l0aG91dCBoYXZpbmcgdG8gd29ycnkgaWYgdGhlIGludGVybWVkaWF0ZSBzdGFnZXMgYXJlIGFjdHVhbGx5Cit0aGVyZS4gUHJldmlvdXNseSwgaWYgdGhlcmUgd2FzIG5vICdoZWFkJyB0YWcgaW4gdGhlIGRvY3VtZW50LCBoZWFkVGFnCitpbiB0aGF0IGluc3RhbmNlIHdvdWxkIGhhdmUgYmVlbiBOb25lLCBhbmQgYWNjZXNzaW5nIGl0cyAndGl0bGVUYWcnCittZW1iZXIgd291bGQgaGF2ZSB0aHJvd24gYW4gQXR0cmlidXRlRXJyb3IuIE5vdywgeW91IGNhbiBnZXQgd2hhdCB5b3UKK3dhbnQgd2hlbiBpdCBleGlzdHMsIGFuZCBnZXQgTnVsbCB3aGVuIGl0IGRvZXNuJ3QsIHdpdGhvdXQgaGF2aW5nIHRvCitkbyBhIGxvdCBvZiBjb25kaXRpb25hbHMgY2hlY2tpbmcgdG8gc2VlIGlmIGV2ZXJ5IHN0YWdlIGlzIE5vbmUuCisKK1RoZXJlIGFyZSB0d28gbmV3IHJlbGF0aW9ucyBiZXR3ZWVuIHBhZ2UgZWxlbWVudHM6IHByZXZpb3VzU2libGluZyBhbmQKK25leHRTaWJsaW5nLiBUaGV5IHJlZmVyZW5jZSB0aGUgcHJldmlvdXMgYW5kIG5leHQgZWxlbWVudCBhdCB0aGUgc2FtZQorbGV2ZWwgb2YgdGhlIHBhcnNlIHRyZWUuIEZvciBpbnN0YW5jZSwgaWYgeW91IGhhdmUgSFRNTCBsaWtlIHRoaXM6CisKKyAgPHA+PHVsPjxsaT5Gb288YnIgLz48bGk+QmFyPC91bD4KKworVGhlIGZpcnN0ICdsaScgdGFnIGhhcyBhIHByZXZpb3VzU2libGluZyBvZiBOdWxsIGFuZCBpdHMgbmV4dFNpYmxpbmcKK2lzIHRoZSBzZWNvbmQgJ2xpJyB0YWcuIFRoZSBzZWNvbmQgJ2xpJyB0YWcgaGFzIGEgbmV4dFNpYmxpbmcgb2YgTnVsbAorYW5kIGl0cyBwcmV2aW91c1NpYmxpbmcgaXMgdGhlIGZpcnN0ICdsaScgdGFnLiBUaGUgcHJldmlvdXNTaWJsaW5nIG9mCit0aGUgJ3VsJyB0YWcgaXMgdGhlIGZpcnN0ICdwJyB0YWcuIFRoZSBuZXh0U2libGluZyBvZiAnRm9vJyBpcyB0aGUKKydicicgdGFnLgorCitJIHRvb2sgb3V0IHRoZSBhYmlsaXR5IHRvIHVzZSBmZXRjaCgpIHRvIGZpbmQgdGFncyB0aGF0IGhhdmUgYQorc3BlY2lmaWMgbGlzdCBvZiBjb250ZW50cy4gU2VlLCBJIGNhbid0IGV2ZW4gZXhwbGFpbiBpdCB3ZWxsLiBJdCB3YXMKK3JlYWxseSBkaWZmaWN1bHQgdG8gdXNlLCBJIG5ldmVyIHVzZWQgaXQsIGFuZCBJIGRvbid0IHRoaW5rIGFueW9uZQorZWxzZSBldmVyIHVzZWQgaXQuIFRvIHRoZSBleHRlbnQgYW55b25lIGRpZCwgdGhleSBjYW4gcHJvYmFibHkgdXNlCitmZXRjaFRleHQoKSBpbnN0ZWFkLiBJZiBpdCB0dXJucyBvdXQgc29tZW9uZSBuZWVkcyBpdCBJJ2xsIHRoaW5rIG9mCithbm90aGVyIHNvbHV0aW9uLgorCis9PSBUcmVlIG1hbmlwdWxhdGlvbiA9PQorCitZb3UgY2FuIGFkZCBuZXcgYXR0cmlidXRlcyB0byBhIHRhZywgYW5kIGRlbGV0ZSBhdHRyaWJ1dGVzIGZyb20gYQordGFnLiBJbiAxLnggeW91IGNvdWxkIG9ubHkgY2hhbmdlIGEgdGFnJ3MgZXhpc3RpbmcgYXR0cmlidXRlcy4KKworPT0gUG9ydGluZyBDb25zaWRlcmF0aW9ucyA9PQorCitUaGVyZSBhcmUgdGhyZWUgY2hhbmdlcyBpbiAyLjAgdGhhdCBicmVhayBvbGQgY29kZToKKworSW4gdGhlIHBvc3QtMS4yIHJlbGVhc2UgeW91IGNvdWxkIHBhc3MgaW4gYSBmdW5jdGlvbiBpbnRvIGZldGNoKCkuIFRoZQorZnVuY3Rpb24gdG9vayBhIHN0cmluZywgdGhlIHRhZyBuYW1lLiBJbiAyLjAsIHRoZSBmdW5jdGlvbiB0YWtlcyB0aGUKK2FjdHVhbCBUYWcgb2JqZWN0LgorCitJdCdzIG5vIGxvbmdlciB0byBwYXNzIGluIFNRTC1zdHlsZSB3aWxkY2FyZHMgdG8gZmV0Y2goKS4gVXNlIGEKK3JlZ3VsYXIgZXhwcmVzc2lvbiBpbnN0ZWFkLgorCitUaGUgZGlmZmVyZW50IHBhcnNpbmcgYWxnb3JpdGhtIG1lYW5zIHRoZSBwYXJzZSB0cmVlIG1heSBub3QgYmUgc2hhcGVkCitsaWtlIHlvdSBleHBlY3QuIFRoaXMgd2lsbCBvbmx5IGFjdHVhbGx5IGFmZmVjdCB5b3UgaWYgeW91ciBjb2RlIHVzZXMKK29uZSBvZiB0aGUgYWZmZWN0ZWQgcGFydHMuIEkgaGF2ZW4ndCBydW4gaW50byB0aGlzIHByb2JsZW0geWV0IHdoaWxlCitwb3J0aW5nIG15IGNvZGUuCisKKz0gQmV0d2VlbiAxLjIgYW5kIDIuMCA9CisKK1RoaXMgaXMgdGhlIHJlbGVhc2UgdG8gZ2V0IGlmIHlvdSB3YW50IFB5dGhvbiAxLjUgY29tcGF0aWJpbGl0eS4KKworVGhlIGRlc2lyZWQgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGNhbiBub3cgYmUgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisKKyAqIEEgc3RyaW5nCisgKiBBIHN0cmluZyB3aXRoIFNRTC1zdHlsZSB3aWxkY2FyZHMKKyAqIEEgY29tcGlsZWQgUkUgb2JqZWN0CisgKiBBIGNhbGxhYmxlIHRoYXQgcmV0dXJucyBOb25lL2ZhbHNlL2VtcHR5IHN0cmluZyBpZiB0aGUgZ2l2ZW4gdmFsdWUKKyAgIGRvZXNuJ3QgbWF0Y2gsIGFuZCBhbnkgb3RoZXIgdmFsdWUgb3RoZXJ3aXNlLgorCitUaGlzIGlzIG11Y2ggZWFzaWVyIHRvIHVzZSB0aGFuIFNRTC1zdHlsZSB3aWxkY2FyZHMgKHNlZSwgcmVndWxhcgorZXhwcmVzc2lvbnMgYXJlIGdvb2QgZm9yIHNvbWV0aGluZykuIEJlY2F1c2Ugb2YgdGhpcywgSSBubyBsb25nZXIKK3JlY29tbWVuZCB5b3UgdXNlIFNRTC1zdHlsZSB3aWxkY2FyZHMuIFRoZXkgbWF5IGdvIGF3YXkgaW4gYSBmdXR1cmUKK3JlbGVhc2UgdG8gY2xlYW4gdXAgdGhlIGNvZGUuCisKK01hZGUgQmVhdXRpZnVsIFNvdXAgaGFuZGxlIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zIGFzIHRleHQgaW5zdGVhZCBvZgoraWdub3JpbmcgdGhlbS4KKworQXBwbGllZCBwYXRjaCBmcm9tIFJpY2hpZSBIaW5kbGUgKHJpY2hpZSBhdCBlbnRyaWFuIGRvdCBjb20pIHRoYXQKK21ha2VzIHRhZy5zdHJpbmcgYSBzaG9ydGhhbmQgZm9yIHRhZy5jb250ZW50c1swXS5zdHJpbmcgd2hlbiB0aGUgdGFnCitoYXMgb25seSBvbmUgc3RyaW5nLW93bmluZyBjaGlsZC4KKworQWRkZWQgc3RpbGwgbW9yZSBuZXN0YWJsZSB0YWdzLiBUaGUgbmVzdGFibGUgdGFncyB0aGluZyB3b24ndCB3b3JrIGluCithIGxvdCBvZiBjYXNlcyBhbmQgbmVlZHMgdG8gYmUgcmV0aG91Z2h0LgorCitGaXhlZCBhbiBlZGdlIGNhc2Ugd2hlcmUgc2VhcmNoaW5nIGZvciAiJWZvbyIgd291bGQgbWF0Y2ggYW55IHN0cmluZworc2hvcnRlciB0aGFuICJmb28iLgorCis9IDEuMiAiV2hvIGZvciBzdWNoIGRhaW50aWVzIHdvdWxkIG5vdCBzdG9vcD8iICgyMDA0MDcwOCkgPQorCitBcHBsaWVkIHBhdGNoIGZyb20gQmVuIExhc3QgKGJlbiBhdCBiZW5sYXN0IGRvdCBjb20pIHRoYXQgbWFkZQorVGFnLnJlbmRlckNvbnRlbnRzKCkgY29ycmVjdGx5IGhhbmRsZSBVbmljb2RlLgorCitNYWRlIEJlYXV0aWZ1bFN0b25lU291cCBldmVuIGR1bWJlciBieSBtYWtpbmcgaXQgbm90IGltcGxpY2l0bHkgY2xvc2UKK2EgdGFnIHdoZW4gYW5vdGhlciB0YWcgb2YgdGhlIHNhbWUgdHlwZSBpcyBlbmNvdW50ZXJlZDsgb25seSB3aGVuIGFuCithY3R1YWwgY2xvc2luZyB0YWcgaXMgZW5jb3VudGVyZWQuIFRoaXMgY2hhbmdlIGNvdXJ0ZXN5IG9mIEZ1enp5IChtaWtlCithdCBwY2Jsb2tlcyBkb3QgY29tKS4gQmVhdXRpZnVsU291cCBzdGlsbCB3b3JrcyBhcyBiZWZvcmUuCisKKz0gMS4xICJTd2ltbWluZyBpbiBhIGhvdCB0dXJlZW4iID0KKworQWRkZWQgbW9yZSAnbmVzdGFibGUnIHRhZ3MuIENoYW5nZWQgcG9wcGluZyBzZW1hbnRpY3Mgc28gdGhhdCB3aGVuIGEKK25lc3RhYmxlIHRhZyBpcyBlbmNvdW50ZXJlZCwgdGFncyBhcmUgcG9wcGVkIHVwIHRvIHRoZSBwcmV2aW91c2x5CitlbmNvdW50ZXJlZCBuZXN0YWJsZSB0YWcgKG9mIHdoYXRldmVyIGtpbmQpLiBJIHdpbGwgcmV2ZXJ0IHRoaXMgaWYKK2Vub3VnaCBwZW9wbGUgY29tcGxhaW4sIGJ1dCBpdCBzaG91bGQgbWFrZSBtb3JlIHBlb3BsZSdzIGxpdmVzIGVhc2llcgordGhhbiBoYXJkZXIuIFRoaXMgZW5oYW5jZW1lbnQgd2FzIHN1Z2dlc3RlZCBieSBBbnRob255IEJheHRlciAoYW50aG9ueQorYXQgaW50ZXJsaW5rIGRvdCBjb20gZG90IGF1KS4KKworPSAxLjAgIlNvIHJpY2ggYW5kIGdyZWVuIiAoMjAwNDA0MjApID0KKworSW5pdGlhbCByZWxlYXNlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmEzNDI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvX19pbml0X18ucHkKQEAgLTAsMCArMSw0MDYgQEAKKyIiIkJlYXV0aWZ1bCBTb3VwCitFbGl4aXIgYW5kIFRvbmljCisiVGhlIFNjcmVlbi1TY3JhcGVyJ3MgRnJpZW5kIgoraHR0cDovL3d3dy5jcnVtbXkuY29tL3NvZnR3YXJlL0JlYXV0aWZ1bFNvdXAvCisKK0JlYXV0aWZ1bCBTb3VwIHVzZXMgYSBwbHVnZ2FibGUgWE1MIG9yIEhUTUwgcGFyc2VyIHRvIHBhcnNlIGEKKyhwb3NzaWJseSBpbnZhbGlkKSBkb2N1bWVudCBpbnRvIGEgdHJlZSByZXByZXNlbnRhdGlvbi4gQmVhdXRpZnVsIFNvdXAKK3Byb3ZpZGVzIHByb3ZpZGVzIG1ldGhvZHMgYW5kIFB5dGhvbmljIGlkaW9tcyB0aGF0IG1ha2UgaXQgZWFzeSB0bworbmF2aWdhdGUsIHNlYXJjaCwgYW5kIG1vZGlmeSB0aGUgcGFyc2UgdHJlZS4KKworQmVhdXRpZnVsIFNvdXAgd29ya3Mgd2l0aCBQeXRob24gMi42IGFuZCB1cC4gSXQgd29ya3MgYmV0dGVyIGlmIGx4bWwKK2FuZC9vciBodG1sNWxpYiBpcyBpbnN0YWxsZWQuCisKK0ZvciBtb3JlIHRoYW4geW91IGV2ZXIgd2FudGVkIHRvIGtub3cgYWJvdXQgQmVhdXRpZnVsIFNvdXAsIHNlZSB0aGUKK2RvY3VtZW50YXRpb246CitodHRwOi8vd3d3LmNydW1teS5jb20vc29mdHdhcmUvQmVhdXRpZnVsU291cC9iczQvZG9jLworIiIiCisKK19fYXV0aG9yX18gPSAiTGVvbmFyZCBSaWNoYXJkc29uIChsZW9uYXJkckBzZWdmYXVsdC5vcmcpIgorX192ZXJzaW9uX18gPSAiNC4zLjIiCitfX2NvcHlyaWdodF9fID0gIkNvcHlyaWdodCAoYykgMjAwNC0yMDEzIExlb25hcmQgUmljaGFyZHNvbiIKK19fbGljZW5zZV9fID0gIk1JVCIKKworX19hbGxfXyA9IFsnQmVhdXRpZnVsU291cCddCisKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgd2FybmluZ3MKKworZnJvbSAuYnVpbGRlciBpbXBvcnQgYnVpbGRlcl9yZWdpc3RyeSwgUGFyc2VyUmVqZWN0ZWRNYXJrdXAKK2Zyb20gLmRhbW1pdCBpbXBvcnQgVW5pY29kZURhbW1pdAorZnJvbSAuZWxlbWVudCBpbXBvcnQgKAorICAgIENEYXRhLAorICAgIENvbW1lbnQsCisgICAgREVGQVVMVF9PVVRQVVRfRU5DT0RJTkcsCisgICAgRGVjbGFyYXRpb24sCisgICAgRG9jdHlwZSwKKyAgICBOYXZpZ2FibGVTdHJpbmcsCisgICAgUGFnZUVsZW1lbnQsCisgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uLAorICAgIFJlc3VsdFNldCwKKyAgICBTb3VwU3RyYWluZXIsCisgICAgVGFnLAorICAgICkKKworIyBUaGUgdmVyeSBmaXJzdCB0aGluZyB3ZSBkbyBpcyBnaXZlIGEgdXNlZnVsIGVycm9yIGlmIHNvbWVvbmUgaXMKKyMgcnVubmluZyB0aGlzIGNvZGUgdW5kZXIgUHl0aG9uIDMgd2l0aG91dCBjb252ZXJ0aW5nIGl0Lgorc3ludGF4X2Vycm9yID0gdSdZb3UgYXJlIHRyeWluZyB0byBydW4gdGhlIFB5dGhvbiAyIHZlcnNpb24gb2YgQmVhdXRpZnVsIFNvdXAgdW5kZXIgUHl0aG9uIDMuIFRoaXMgd2lsbCBub3Qgd29yay4gWW91IG5lZWQgdG8gY29udmVydCB0aGUgY29kZSwgZWl0aGVyIGJ5IGluc3RhbGxpbmcgaXQgKGBweXRob24gc2V0dXAucHkgaW5zdGFsbGApIG9yIGJ5IHJ1bm5pbmcgMnRvMyAoYDJ0bzMgLXcgYnM0YCkuJworCitjbGFzcyBCZWF1dGlmdWxTb3VwKFRhZyk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyBkZWZpbmVzIHRoZSBiYXNpYyBpbnRlcmZhY2UgY2FsbGVkIGJ5IHRoZSB0cmVlIGJ1aWxkZXJzLgorCisgICAgVGhlc2UgbWV0aG9kcyB3aWxsIGJlIGNhbGxlZCBieSB0aGUgcGFyc2VyOgorICAgICAgcmVzZXQoKQorICAgICAgZmVlZChtYXJrdXApCisKKyAgICBUaGUgdHJlZSBidWlsZGVyIG1heSBjYWxsIHRoZXNlIG1ldGhvZHMgZnJvbSBpdHMgZmVlZCgpIGltcGxlbWVudGF0aW9uOgorICAgICAgaGFuZGxlX3N0YXJ0dGFnKG5hbWUsIGF0dHJzKSAjIFNlZSBub3RlIGFib3V0IHJldHVybiB2YWx1ZQorICAgICAgaGFuZGxlX2VuZHRhZyhuYW1lKQorICAgICAgaGFuZGxlX2RhdGEoZGF0YSkgIyBBcHBlbmRzIHRvIHRoZSBjdXJyZW50IGRhdGEgbm9kZQorICAgICAgZW5kRGF0YShjb250YWluZXJDbGFzcz1OYXZpZ2FibGVTdHJpbmcpICMgRW5kcyB0aGUgY3VycmVudCBkYXRhIG5vZGUKKworICAgIE5vIG1hdHRlciBob3cgY29tcGxpY2F0ZWQgdGhlIHVuZGVybHlpbmcgcGFyc2VyIGlzLCB5b3Ugc2hvdWxkIGJlCisgICAgYWJsZSB0byBidWlsZCBhIHRyZWUgdXNpbmcgJ3N0YXJ0IHRhZycgZXZlbnRzLCAnZW5kIHRhZycgZXZlbnRzLAorICAgICdkYXRhJyBldmVudHMsIGFuZCAiZG9uZSB3aXRoIGRhdGEiIGV2ZW50cy4KKworICAgIElmIHlvdSBlbmNvdW50ZXIgYW4gZW1wdHktZWxlbWVudCB0YWcgKGFrYSBhIHNlbGYtY2xvc2luZyB0YWcsCisgICAgbGlrZSBIVE1MJ3MgPGJyPiB0YWcpLCBjYWxsIGhhbmRsZV9zdGFydHRhZyBhbmQgdGhlbgorICAgIGhhbmRsZV9lbmR0YWcuCisgICAgIiIiCisgICAgUk9PVF9UQUdfTkFNRSA9IHUnW2RvY3VtZW50XScKKworICAgICMgSWYgdGhlIGVuZC11c2VyIGdpdmVzIG5vIGluZGljYXRpb24gd2hpY2ggdHJlZSBidWlsZGVyIHRoZXkKKyAgICAjIHdhbnQsIGxvb2sgZm9yIG9uZSB3aXRoIHRoZXNlIGZlYXR1cmVzLgorICAgIERFRkFVTFRfQlVJTERFUl9GRUFUVVJFUyA9IFsnaHRtbCcsICdmYXN0J10KKworICAgIEFTQ0lJX1NQQUNFUyA9ICdceDIwXHgwYVx4MDlceDBjXHgwZCcKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrdXA9IiIsIGZlYXR1cmVzPU5vbmUsIGJ1aWxkZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcGFyc2Vfb25seT1Ob25lLCBmcm9tX2VuY29kaW5nPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiVGhlIFNvdXAgb2JqZWN0IGlzIGluaXRpYWxpemVkIGFzIHRoZSAncm9vdCB0YWcnLCBhbmQgdGhlCisgICAgICAgIHByb3ZpZGVkIG1hcmt1cCAod2hpY2ggY2FuIGJlIGEgc3RyaW5nIG9yIGEgZmlsZS1saWtlIG9iamVjdCkKKyAgICAgICAgaXMgZmVkIGludG8gdGhlIHVuZGVybHlpbmcgcGFyc2VyLiIiIgorCisgICAgICAgIGlmICdjb252ZXJ0RW50aXRpZXMnIGluIGt3YXJnczoKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgIkJTNCBkb2VzIG5vdCByZXNwZWN0IHRoZSBjb252ZXJ0RW50aXRpZXMgYXJndW1lbnQgdG8gdGhlICIKKyAgICAgICAgICAgICAgICAiQmVhdXRpZnVsU291cCBjb25zdHJ1Y3Rvci4gRW50aXRpZXMgYXJlIGFsd2F5cyBjb252ZXJ0ZWQgIgorICAgICAgICAgICAgICAgICJ0byBVbmljb2RlIGNoYXJhY3RlcnMuIikKKworICAgICAgICBpZiAnbWFya3VwTWFzc2FnZScgaW4ga3dhcmdzOgorICAgICAgICAgICAgZGVsIGt3YXJnc1snbWFya3VwTWFzc2FnZSddCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICJCUzQgZG9lcyBub3QgcmVzcGVjdCB0aGUgbWFya3VwTWFzc2FnZSBhcmd1bWVudCB0byB0aGUgIgorICAgICAgICAgICAgICAgICJCZWF1dGlmdWxTb3VwIGNvbnN0cnVjdG9yLiBUaGUgdHJlZSBidWlsZGVyIGlzIHJlc3BvbnNpYmxlICIKKyAgICAgICAgICAgICAgICAiZm9yIGFueSBuZWNlc3NhcnkgbWFya3VwIG1hc3NhZ2UuIikKKworICAgICAgICBpZiAnc21hcnRRdW90ZXNUbycgaW4ga3dhcmdzOgorICAgICAgICAgICAgZGVsIGt3YXJnc1snc21hcnRRdW90ZXNUbyddCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICJCUzQgZG9lcyBub3QgcmVzcGVjdCB0aGUgc21hcnRRdW90ZXNUbyBhcmd1bWVudCB0byB0aGUgIgorICAgICAgICAgICAgICAgICJCZWF1dGlmdWxTb3VwIGNvbnN0cnVjdG9yLiBTbWFydCBxdW90ZXMgYXJlIGFsd2F5cyBjb252ZXJ0ZWQgIgorICAgICAgICAgICAgICAgICJ0byBVbmljb2RlIGNoYXJhY3RlcnMuIikKKworICAgICAgICBpZiAnc2VsZkNsb3NpbmdUYWdzJyBpbiBrd2FyZ3M6CisgICAgICAgICAgICBkZWwga3dhcmdzWydzZWxmQ2xvc2luZ1RhZ3MnXQorICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAiQlM0IGRvZXMgbm90IHJlc3BlY3QgdGhlIHNlbGZDbG9zaW5nVGFncyBhcmd1bWVudCB0byB0aGUgIgorICAgICAgICAgICAgICAgICJCZWF1dGlmdWxTb3VwIGNvbnN0cnVjdG9yLiBUaGUgdHJlZSBidWlsZGVyIGlzIHJlc3BvbnNpYmxlICIKKyAgICAgICAgICAgICAgICAiZm9yIHVuZGVyc3RhbmRpbmcgc2VsZi1jbG9zaW5nIHRhZ3MuIikKKworICAgICAgICBpZiAnaXNIVE1MJyBpbiBrd2FyZ3M6CisgICAgICAgICAgICBkZWwga3dhcmdzWydpc0hUTUwnXQorICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAiQlM0IGRvZXMgbm90IHJlc3BlY3QgdGhlIGlzSFRNTCBhcmd1bWVudCB0byB0aGUgIgorICAgICAgICAgICAgICAgICJCZWF1dGlmdWxTb3VwIGNvbnN0cnVjdG9yLiBZb3UgY2FuIHBhc3MgaW4gZmVhdHVyZXM9J2h0bWwnICIKKyAgICAgICAgICAgICAgICAib3IgZmVhdHVyZXM9J3htbCcgdG8gZ2V0IGEgYnVpbGRlciBjYXBhYmxlIG9mIGhhbmRsaW5nICIKKyAgICAgICAgICAgICAgICAib25lIG9yIHRoZSBvdGhlci4iKQorCisgICAgICAgIGRlZiBkZXByZWNhdGVkX2FyZ3VtZW50KG9sZF9uYW1lLCBuZXdfbmFtZSk6CisgICAgICAgICAgICBpZiBvbGRfbmFtZSBpbiBrd2FyZ3M6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAgICAgJ1RoZSAiJXMiIGFyZ3VtZW50IHRvIHRoZSBCZWF1dGlmdWxTb3VwIGNvbnN0cnVjdG9yICcKKyAgICAgICAgICAgICAgICAgICAgJ2hhcyBiZWVuIHJlbmFtZWQgdG8gIiVzLiInICUgKG9sZF9uYW1lLCBuZXdfbmFtZSkpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBrd2FyZ3Nbb2xkX25hbWVdCisgICAgICAgICAgICAgICAgZGVsIGt3YXJnc1tvbGRfbmFtZV0KKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcGFyc2Vfb25seSA9IHBhcnNlX29ubHkgb3IgZGVwcmVjYXRlZF9hcmd1bWVudCgKKyAgICAgICAgICAgICJwYXJzZU9ubHlUaGVzZSIsICJwYXJzZV9vbmx5IikKKworICAgICAgICBmcm9tX2VuY29kaW5nID0gZnJvbV9lbmNvZGluZyBvciBkZXByZWNhdGVkX2FyZ3VtZW50KAorICAgICAgICAgICAgImZyb21FbmNvZGluZyIsICJmcm9tX2VuY29kaW5nIikKKworICAgICAgICBpZiBsZW4oa3dhcmdzKSA+IDA6CisgICAgICAgICAgICBhcmcgPSBrd2FyZ3Mua2V5cygpLnBvcCgpCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCisgICAgICAgICAgICAgICAgIl9faW5pdF9fKCkgZ290IGFuIHVuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudCAnJXMnIiAlIGFyZykKKworICAgICAgICBpZiBidWlsZGVyIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGZlYXR1cmVzLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICBmZWF0dXJlcyA9IFtmZWF0dXJlc10KKyAgICAgICAgICAgIGlmIGZlYXR1cmVzIGlzIE5vbmUgb3IgbGVuKGZlYXR1cmVzKSA9PSAwOgorICAgICAgICAgICAgICAgIGZlYXR1cmVzID0gc2VsZi5ERUZBVUxUX0JVSUxERVJfRkVBVFVSRVMKKyAgICAgICAgICAgIGJ1aWxkZXJfY2xhc3MgPSBidWlsZGVyX3JlZ2lzdHJ5Lmxvb2t1cCgqZmVhdHVyZXMpCisgICAgICAgICAgICBpZiBidWlsZGVyX2NsYXNzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgRmVhdHVyZU5vdEZvdW5kKAorICAgICAgICAgICAgICAgICAgICAiQ291bGRuJ3QgZmluZCBhIHRyZWUgYnVpbGRlciB3aXRoIHRoZSBmZWF0dXJlcyB5b3UgIgorICAgICAgICAgICAgICAgICAgICAicmVxdWVzdGVkOiAlcy4gRG8geW91IG5lZWQgdG8gaW5zdGFsbCBhIHBhcnNlciBsaWJyYXJ5PyIKKyAgICAgICAgICAgICAgICAgICAgJSAiLCIuam9pbihmZWF0dXJlcykpCisgICAgICAgICAgICBidWlsZGVyID0gYnVpbGRlcl9jbGFzcygpCisgICAgICAgIHNlbGYuYnVpbGRlciA9IGJ1aWxkZXIKKyAgICAgICAgc2VsZi5pc194bWwgPSBidWlsZGVyLmlzX3htbAorICAgICAgICBzZWxmLmJ1aWxkZXIuc291cCA9IHNlbGYKKworICAgICAgICBzZWxmLnBhcnNlX29ubHkgPSBwYXJzZV9vbmx5CisKKyAgICAgICAgaWYgaGFzYXR0cihtYXJrdXAsICdyZWFkJyk6ICAgICAgICAjIEl0J3MgYSBmaWxlLXR5cGUgb2JqZWN0LgorICAgICAgICAgICAgbWFya3VwID0gbWFya3VwLnJlYWQoKQorICAgICAgICBlbGlmIGxlbihtYXJrdXApIDw9IDI1NjoKKyAgICAgICAgICAgICMgUHJpbnQgb3V0IHdhcm5pbmdzIGZvciBhIGNvdXBsZSBiZWdpbm5lciBwcm9ibGVtcworICAgICAgICAgICAgIyBpbnZvbHZpbmcgcGFzc2luZyBub24tbWFya3VwIHRvIEJlYXV0aWZ1bCBTb3VwLgorICAgICAgICAgICAgIyBCZWF1dGlmdWwgU291cCB3aWxsIHN0aWxsIHBhcnNlIHRoZSBpbnB1dCBhcyBtYXJrdXAsCisgICAgICAgICAgICAjIGp1c3QgaW4gY2FzZSB0aGF0J3Mgd2hhdCB0aGUgdXNlciByZWFsbHkgd2FudHMuCisgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShtYXJrdXAsIHVuaWNvZGUpCisgICAgICAgICAgICAgICAgYW5kIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzKToKKyAgICAgICAgICAgICAgICBwb3NzaWJsZV9maWxlbmFtZSA9IG1hcmt1cC5lbmNvZGUoInV0ZjgiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwb3NzaWJsZV9maWxlbmFtZSA9IG1hcmt1cAorICAgICAgICAgICAgaXNfZmlsZSA9IEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXNfZmlsZSA9IG9zLnBhdGguZXhpc3RzKHBvc3NpYmxlX2ZpbGVuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBhIHByb2JsZW0gaW52b2x2aW5nCisgICAgICAgICAgICAgICAgIyBjaGFyYWN0ZXJzIG5vdCB2YWxpZCBpbiBmaWxlbmFtZXMgb24gdGhpcworICAgICAgICAgICAgICAgICMgc3lzdGVtLiBKdXN0IGxldCBpdCBnby4KKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBpZiBpc19maWxlOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgICAgICciJXMiIGxvb2tzIGxpa2UgYSBmaWxlbmFtZSwgbm90IG1hcmt1cC4gWW91IHNob3VsZCBwcm9iYWJseSBvcGVuIHRoaXMgZmlsZSBhbmQgcGFzcyB0aGUgZmlsZWhhbmRsZSBpbnRvIEJlYXV0aWZ1bCBTb3VwLicgJSBtYXJrdXApCisgICAgICAgICAgICBpZiBtYXJrdXBbOjVdID09ICJodHRwOiIgb3IgbWFya3VwWzo2XSA9PSAiaHR0cHM6IjoKKyAgICAgICAgICAgICAgICAjIFRPRE86IFRoaXMgaXMgdWdseSBidXQgSSBjb3VsZG4ndCBnZXQgaXQgdG8gd29yayBpbgorICAgICAgICAgICAgICAgICMgUHl0aG9uIDMgb3RoZXJ3aXNlLgorICAgICAgICAgICAgICAgIGlmICgoaXNpbnN0YW5jZShtYXJrdXAsIGJ5dGVzKSBhbmQgbm90IGInICcgaW4gbWFya3VwKQorICAgICAgICAgICAgICAgICAgICBvciAoaXNpbnN0YW5jZShtYXJrdXAsIHVuaWNvZGUpIGFuZCBub3QgdScgJyBpbiBtYXJrdXApKToKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAgICAgICAgICciJXMiIGxvb2tzIGxpa2UgYSBVUkwuIEJlYXV0aWZ1bCBTb3VwIGlzIG5vdCBhbiBIVFRQIGNsaWVudC4gWW91IHNob3VsZCBwcm9iYWJseSB1c2UgYW4gSFRUUCBjbGllbnQgdG8gZ2V0IHRoZSBkb2N1bWVudCBiZWhpbmQgdGhlIFVSTCwgYW5kIGZlZWQgdGhhdCBkb2N1bWVudCB0byBCZWF1dGlmdWwgU291cC4nICUgbWFya3VwKQorCisgICAgICAgIGZvciAoc2VsZi5tYXJrdXAsIHNlbGYub3JpZ2luYWxfZW5jb2RpbmcsIHNlbGYuZGVjbGFyZWRfaHRtbF9lbmNvZGluZywKKyAgICAgICAgIHNlbGYuY29udGFpbnNfcmVwbGFjZW1lbnRfY2hhcmFjdGVycykgaW4gKAorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnByZXBhcmVfbWFya3VwKG1hcmt1cCwgZnJvbV9lbmNvZGluZykpOgorICAgICAgICAgICAgc2VsZi5yZXNldCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZCgpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBQYXJzZXJSZWplY3RlZE1hcmt1cDoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBDbGVhciBvdXQgdGhlIG1hcmt1cCBhbmQgcmVtb3ZlIHRoZSBidWlsZGVyJ3MgY2lyY3VsYXIKKyAgICAgICAgIyByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QuCisgICAgICAgIHNlbGYubWFya3VwID0gTm9uZQorICAgICAgICBzZWxmLmJ1aWxkZXIuc291cCA9IE5vbmUKKworICAgIGRlZiBfZmVlZChzZWxmKToKKyAgICAgICAgIyBDb252ZXJ0IHRoZSBkb2N1bWVudCB0byBVbmljb2RlLgorICAgICAgICBzZWxmLmJ1aWxkZXIucmVzZXQoKQorCisgICAgICAgIHNlbGYuYnVpbGRlci5mZWVkKHNlbGYubWFya3VwKQorICAgICAgICAjIENsb3NlIG91dCBhbnkgdW5maW5pc2hlZCBzdHJpbmdzIGFuZCBjbG9zZSBhbGwgdGhlIG9wZW4gdGFncy4KKyAgICAgICAgc2VsZi5lbmREYXRhKCkKKyAgICAgICAgd2hpbGUgc2VsZi5jdXJyZW50VGFnLm5hbWUgIT0gc2VsZi5ST09UX1RBR19OQU1FOgorICAgICAgICAgICAgc2VsZi5wb3BUYWcoKQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBUYWcuX19pbml0X18oc2VsZiwgc2VsZiwgc2VsZi5idWlsZGVyLCBzZWxmLlJPT1RfVEFHX05BTUUpCisgICAgICAgIHNlbGYuaGlkZGVuID0gMQorICAgICAgICBzZWxmLmJ1aWxkZXIucmVzZXQoKQorICAgICAgICBzZWxmLmN1cnJlbnRfZGF0YSA9IFtdCisgICAgICAgIHNlbGYuY3VycmVudFRhZyA9IE5vbmUKKyAgICAgICAgc2VsZi50YWdTdGFjayA9IFtdCisgICAgICAgIHNlbGYucHJlc2VydmVfd2hpdGVzcGFjZV90YWdfc3RhY2sgPSBbXQorICAgICAgICBzZWxmLnB1c2hUYWcoc2VsZikKKworICAgIGRlZiBuZXdfdGFnKHNlbGYsIG5hbWUsIG5hbWVzcGFjZT1Ob25lLCBuc3ByZWZpeD1Ob25lLCAqKmF0dHJzKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IHRhZyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzb3VwLiIiIgorICAgICAgICByZXR1cm4gVGFnKE5vbmUsIHNlbGYuYnVpbGRlciwgbmFtZSwgbmFtZXNwYWNlLCBuc3ByZWZpeCwgYXR0cnMpCisKKyAgICBkZWYgbmV3X3N0cmluZyhzZWxmLCBzLCBzdWJjbGFzcz1OYXZpZ2FibGVTdHJpbmcpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgTmF2aWdhYmxlU3RyaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNvdXAuIiIiCisgICAgICAgIG5hdmlnYWJsZSA9IHN1YmNsYXNzKHMpCisgICAgICAgIG5hdmlnYWJsZS5zZXR1cCgpCisgICAgICAgIHJldHVybiBuYXZpZ2FibGUKKworICAgIGRlZiBpbnNlcnRfYmVmb3JlKHNlbGYsIHN1Y2Nlc3Nvcik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIkJlYXV0aWZ1bFNvdXAgb2JqZWN0cyBkb24ndCBzdXBwb3J0IGluc2VydF9iZWZvcmUoKS4iKQorCisgICAgZGVmIGluc2VydF9hZnRlcihzZWxmLCBzdWNjZXNzb3IpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJCZWF1dGlmdWxTb3VwIG9iamVjdHMgZG9uJ3Qgc3VwcG9ydCBpbnNlcnRfYWZ0ZXIoKS4iKQorCisgICAgZGVmIHBvcFRhZyhzZWxmKToKKyAgICAgICAgdGFnID0gc2VsZi50YWdTdGFjay5wb3AoKQorICAgICAgICBpZiBzZWxmLnByZXNlcnZlX3doaXRlc3BhY2VfdGFnX3N0YWNrIGFuZCB0YWcgPT0gc2VsZi5wcmVzZXJ2ZV93aGl0ZXNwYWNlX3RhZ19zdGFja1stMV06CisgICAgICAgICAgICBzZWxmLnByZXNlcnZlX3doaXRlc3BhY2VfdGFnX3N0YWNrLnBvcCgpCisgICAgICAgICNwcmludCAiUG9wIiwgdGFnLm5hbWUKKyAgICAgICAgaWYgc2VsZi50YWdTdGFjazoKKyAgICAgICAgICAgIHNlbGYuY3VycmVudFRhZyA9IHNlbGYudGFnU3RhY2tbLTFdCisgICAgICAgIHJldHVybiBzZWxmLmN1cnJlbnRUYWcKKworICAgIGRlZiBwdXNoVGFnKHNlbGYsIHRhZyk6CisgICAgICAgICNwcmludCAiUHVzaCIsIHRhZy5uYW1lCisgICAgICAgIGlmIHNlbGYuY3VycmVudFRhZzoKKyAgICAgICAgICAgIHNlbGYuY3VycmVudFRhZy5jb250ZW50cy5hcHBlbmQodGFnKQorICAgICAgICBzZWxmLnRhZ1N0YWNrLmFwcGVuZCh0YWcpCisgICAgICAgIHNlbGYuY3VycmVudFRhZyA9IHNlbGYudGFnU3RhY2tbLTFdCisgICAgICAgIGlmIHRhZy5uYW1lIGluIHNlbGYuYnVpbGRlci5wcmVzZXJ2ZV93aGl0ZXNwYWNlX3RhZ3M6CisgICAgICAgICAgICBzZWxmLnByZXNlcnZlX3doaXRlc3BhY2VfdGFnX3N0YWNrLmFwcGVuZCh0YWcpCisKKyAgICBkZWYgZW5kRGF0YShzZWxmLCBjb250YWluZXJDbGFzcz1OYXZpZ2FibGVTdHJpbmcpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZGF0YToKKyAgICAgICAgICAgIGN1cnJlbnRfZGF0YSA9IHUnJy5qb2luKHNlbGYuY3VycmVudF9kYXRhKQorICAgICAgICAgICAgIyBJZiB3aGl0ZXNwYWNlIGlzIG5vdCBwcmVzZXJ2ZWQsIGFuZCB0aGlzIHN0cmluZyBjb250YWlucworICAgICAgICAgICAgIyBub3RoaW5nIGJ1dCBBU0NJSSBzcGFjZXMsIHJlcGxhY2UgaXQgd2l0aCBhIHNpbmdsZSBzcGFjZQorICAgICAgICAgICAgIyBvciBuZXdsaW5lLgorICAgICAgICAgICAgaWYgbm90IHNlbGYucHJlc2VydmVfd2hpdGVzcGFjZV90YWdfc3RhY2s6CisgICAgICAgICAgICAgICAgc3RyaXBwYWJsZSA9IFRydWUKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiBjdXJyZW50X2RhdGE6CisgICAgICAgICAgICAgICAgICAgIGlmIGkgbm90IGluIHNlbGYuQVNDSUlfU1BBQ0VTOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBwYWJsZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIHN0cmlwcGFibGU6CisgICAgICAgICAgICAgICAgICAgIGlmICdcbicgaW4gY3VycmVudF9kYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9kYXRhID0gJ1xuJworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9kYXRhID0gJyAnCisKKyAgICAgICAgICAgICMgUmVzZXQgdGhlIGRhdGEgY29sbGVjdG9yLgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X2RhdGEgPSBbXQorCisgICAgICAgICAgICAjIFNob3VsZCB3ZSBhZGQgdGhpcyBzdHJpbmcgdG8gdGhlIHRyZWUgYXQgYWxsPworICAgICAgICAgICAgaWYgc2VsZi5wYXJzZV9vbmx5IGFuZCBsZW4oc2VsZi50YWdTdGFjaykgPD0gMSBhbmQgXAorICAgICAgICAgICAgICAgICAgIChub3Qgc2VsZi5wYXJzZV9vbmx5LnRleHQgb3IgXAorICAgICAgICAgICAgICAgICAgICBub3Qgc2VsZi5wYXJzZV9vbmx5LnNlYXJjaChjdXJyZW50X2RhdGEpKToKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgbyA9IGNvbnRhaW5lckNsYXNzKGN1cnJlbnRfZGF0YSkKKyAgICAgICAgICAgIHNlbGYub2JqZWN0X3dhc19wYXJzZWQobykKKworICAgIGRlZiBvYmplY3Rfd2FzX3BhcnNlZChzZWxmLCBvLCBwYXJlbnQ9Tm9uZSwgbW9zdF9yZWNlbnRfZWxlbWVudD1Ob25lKToKKyAgICAgICAgIiIiQWRkIGFuIG9iamVjdCB0byB0aGUgcGFyc2UgdHJlZS4iIiIKKyAgICAgICAgcGFyZW50ID0gcGFyZW50IG9yIHNlbGYuY3VycmVudFRhZworICAgICAgICBtb3N0X3JlY2VudF9lbGVtZW50ID0gbW9zdF9yZWNlbnRfZWxlbWVudCBvciBzZWxmLl9tb3N0X3JlY2VudF9lbGVtZW50CisgICAgICAgIG8uc2V0dXAocGFyZW50LCBtb3N0X3JlY2VudF9lbGVtZW50KQorCisgICAgICAgIGlmIG1vc3RfcmVjZW50X2VsZW1lbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBtb3N0X3JlY2VudF9lbGVtZW50Lm5leHRfZWxlbWVudCA9IG8KKyAgICAgICAgc2VsZi5fbW9zdF9yZWNlbnRfZWxlbWVudCA9IG8KKyAgICAgICAgcGFyZW50LmNvbnRlbnRzLmFwcGVuZChvKQorCisgICAgZGVmIF9wb3BUb1RhZyhzZWxmLCBuYW1lLCBuc3ByZWZpeD1Ob25lLCBpbmNsdXNpdmVQb3A9VHJ1ZSk6CisgICAgICAgICIiIlBvcHMgdGhlIHRhZyBzdGFjayB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBtb3N0IHJlY2VudAorICAgICAgICBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gdGFnLiBJZiBpbmNsdXNpdmVQb3AgaXMgZmFsc2UsIHBvcHMgdGhlIHRhZworICAgICAgICBzdGFjayB1cCB0byBidXQgKm5vdCogaW5jbHVkaW5nIHRoZSBtb3N0IHJlY2VudCBpbnN0cWFuY2Ugb2YKKyAgICAgICAgdGhlIGdpdmVuIHRhZy4iIiIKKyAgICAgICAgI3ByaW50ICJQb3BwaW5nIHRvICVzIiAlIG5hbWUKKyAgICAgICAgaWYgbmFtZSA9PSBzZWxmLlJPT1RfVEFHX05BTUU6CisgICAgICAgICAgICAjIFRoZSBCZWF1dGlmdWxTb3VwIG9iamVjdCBpdHNlbGYgY2FuIG5ldmVyIGJlIHBvcHBlZC4KKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIG1vc3RfcmVjZW50bHlfcG9wcGVkID0gTm9uZQorCisgICAgICAgIHN0YWNrX3NpemUgPSBsZW4oc2VsZi50YWdTdGFjaykKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc3RhY2tfc2l6ZSAtIDEsIDAsIC0xKToKKyAgICAgICAgICAgIHQgPSBzZWxmLnRhZ1N0YWNrW2ldCisgICAgICAgICAgICBpZiAobmFtZSA9PSB0Lm5hbWUgYW5kIG5zcHJlZml4ID09IHQucHJlZml4KToKKyAgICAgICAgICAgICAgICBpZiBpbmNsdXNpdmVQb3A6CisgICAgICAgICAgICAgICAgICAgIG1vc3RfcmVjZW50bHlfcG9wcGVkID0gc2VsZi5wb3BUYWcoKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBtb3N0X3JlY2VudGx5X3BvcHBlZCA9IHNlbGYucG9wVGFnKCkKKworICAgICAgICByZXR1cm4gbW9zdF9yZWNlbnRseV9wb3BwZWQKKworICAgIGRlZiBoYW5kbGVfc3RhcnR0YWcoc2VsZiwgbmFtZSwgbmFtZXNwYWNlLCBuc3ByZWZpeCwgYXR0cnMpOgorICAgICAgICAiIiJQdXNoIGEgc3RhcnQgdGFnIG9uIHRvIHRoZSBzdGFjay4KKworICAgICAgICBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIE5vbmUsIHRoZSB0YWcgd2FzIHJlamVjdGVkIGJ5IHRoZQorICAgICAgICBTb3VwU3RyYWluZXIuIFlvdSBzaG91bGQgcHJvY2VlZCBhcyBpZiB0aGUgdGFnIGhhZCBub3Qgb2NjdXJlZAorICAgICAgICBpbiB0aGUgZG9jdW1lbnQuIEZvciBpbnN0YW5jZSwgaWYgdGhpcyB3YXMgYSBzZWxmLWNsb3NpbmcgdGFnLAorICAgICAgICBkb24ndCBjYWxsIGhhbmRsZV9lbmR0YWcuCisgICAgICAgICIiIgorCisgICAgICAgICMgcHJpbnQgIlN0YXJ0IHRhZyAlczogJXMiICUgKG5hbWUsIGF0dHJzKQorICAgICAgICBzZWxmLmVuZERhdGEoKQorCisgICAgICAgIGlmIChzZWxmLnBhcnNlX29ubHkgYW5kIGxlbihzZWxmLnRhZ1N0YWNrKSA8PSAxCisgICAgICAgICAgICBhbmQgKHNlbGYucGFyc2Vfb25seS50ZXh0CisgICAgICAgICAgICAgICAgIG9yIG5vdCBzZWxmLnBhcnNlX29ubHkuc2VhcmNoX3RhZyhuYW1lLCBhdHRycykpKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgdGFnID0gVGFnKHNlbGYsIHNlbGYuYnVpbGRlciwgbmFtZSwgbmFtZXNwYWNlLCBuc3ByZWZpeCwgYXR0cnMsCisgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRUYWcsIHNlbGYuX21vc3RfcmVjZW50X2VsZW1lbnQpCisgICAgICAgIGlmIHRhZyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHRhZworICAgICAgICBpZiBzZWxmLl9tb3N0X3JlY2VudF9lbGVtZW50OgorICAgICAgICAgICAgc2VsZi5fbW9zdF9yZWNlbnRfZWxlbWVudC5uZXh0X2VsZW1lbnQgPSB0YWcKKyAgICAgICAgc2VsZi5fbW9zdF9yZWNlbnRfZWxlbWVudCA9IHRhZworICAgICAgICBzZWxmLnB1c2hUYWcodGFnKQorICAgICAgICByZXR1cm4gdGFnCisKKyAgICBkZWYgaGFuZGxlX2VuZHRhZyhzZWxmLCBuYW1lLCBuc3ByZWZpeD1Ob25lKToKKyAgICAgICAgI3ByaW50ICJFbmQgdGFnOiAiICsgbmFtZQorICAgICAgICBzZWxmLmVuZERhdGEoKQorICAgICAgICBzZWxmLl9wb3BUb1RhZyhuYW1lLCBuc3ByZWZpeCkKKworICAgIGRlZiBoYW5kbGVfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5jdXJyZW50X2RhdGEuYXBwZW5kKGRhdGEpCisKKyAgICBkZWYgZGVjb2RlKHNlbGYsIHByZXR0eV9wcmludD1GYWxzZSwKKyAgICAgICAgICAgICAgIGV2ZW50dWFsX2VuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HLAorICAgICAgICAgICAgICAgZm9ybWF0dGVyPSJtaW5pbWFsIik6CisgICAgICAgICIiIlJldHVybnMgYSBzdHJpbmcgb3IgVW5pY29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGRvY3VtZW50LgorICAgICAgICBUbyBnZXQgVW5pY29kZSwgcGFzcyBOb25lIGZvciBlbmNvZGluZy4iIiIKKworICAgICAgICBpZiBzZWxmLmlzX3htbDoKKyAgICAgICAgICAgICMgUHJpbnQgdGhlIFhNTCBkZWNsYXJhdGlvbgorICAgICAgICAgICAgZW5jb2RpbmdfcGFydCA9ICcnCisgICAgICAgICAgICBpZiBldmVudHVhbF9lbmNvZGluZyAhPSBOb25lOgorICAgICAgICAgICAgICAgIGVuY29kaW5nX3BhcnQgPSAnIGVuY29kaW5nPSIlcyInICUgZXZlbnR1YWxfZW5jb2RpbmcKKyAgICAgICAgICAgIHByZWZpeCA9IHUnPD94bWwgdmVyc2lvbj0iMS4wIiVzPz5cbicgJSBlbmNvZGluZ19wYXJ0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmVmaXggPSB1JycKKyAgICAgICAgaWYgbm90IHByZXR0eV9wcmludDoKKyAgICAgICAgICAgIGluZGVudF9sZXZlbCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGluZGVudF9sZXZlbCA9IDAKKyAgICAgICAgcmV0dXJuIHByZWZpeCArIHN1cGVyKEJlYXV0aWZ1bFNvdXAsIHNlbGYpLmRlY29kZSgKKyAgICAgICAgICAgIGluZGVudF9sZXZlbCwgZXZlbnR1YWxfZW5jb2RpbmcsIGZvcm1hdHRlcikKKworIyBBbGlhcyB0byBtYWtlIGl0IGVhc2llciB0byB0eXBlIGltcG9ydDogJ2Zyb20gYnM0IGltcG9ydCBfc291cCcKK19zID0gQmVhdXRpZnVsU291cAorX3NvdXAgPSBCZWF1dGlmdWxTb3VwCisKK2NsYXNzIEJlYXV0aWZ1bFN0b25lU291cChCZWF1dGlmdWxTb3VwKToKKyAgICAiIiJEZXByZWNhdGVkIGludGVyZmFjZSB0byBhbiBYTUwgcGFyc2VyLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGt3YXJnc1snZmVhdHVyZXMnXSA9ICd4bWwnCisgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAnVGhlIEJlYXV0aWZ1bFN0b25lU291cCBjbGFzcyBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkIG9mIHVzaW5nICcKKyAgICAgICAgICAgICdpdCwgcGFzcyBmZWF0dXJlcz0ieG1sIiBpbnRvIHRoZSBCZWF1dGlmdWxTb3VwIGNvbnN0cnVjdG9yLicpCisgICAgICAgIHN1cGVyKEJlYXV0aWZ1bFN0b25lU291cCwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorCisKK2NsYXNzIFN0b3BQYXJzaW5nKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBGZWF0dXJlTm90Rm91bmQoVmFsdWVFcnJvcik6CisgICAgcGFzcworCisKKyNCeSBkZWZhdWx0LCBhY3QgYXMgYW4gSFRNTCBwcmV0dHktcHJpbnRlci4KK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaW1wb3J0IHN5cworICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKHN5cy5zdGRpbikKKyAgICBwcmludCBzb3VwLnByZXR0aWZ5KCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MGY1ZjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMzIxIEBACitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IHN5cworZnJvbSBiczQuZWxlbWVudCBpbXBvcnQgKAorICAgIENoYXJzZXRNZXRhQXR0cmlidXRlVmFsdWUsCisgICAgQ29udGVudE1ldGFBdHRyaWJ1dGVWYWx1ZSwKKyAgICB3aGl0ZXNwYWNlX3JlCisgICAgKQorCitfX2FsbF9fID0gWworICAgICdIVE1MVHJlZUJ1aWxkZXInLAorICAgICdTQVhUcmVlQnVpbGRlcicsCisgICAgJ1RyZWVCdWlsZGVyJywKKyAgICAnVHJlZUJ1aWxkZXJSZWdpc3RyeScsCisgICAgXQorCisjIFNvbWUgdXNlZnVsIGZlYXR1cmVzIGZvciBhIFRyZWVCdWlsZGVyIHRvIGhhdmUuCitGQVNUID0gJ2Zhc3QnCitQRVJNSVNTSVZFID0gJ3Blcm1pc3NpdmUnCitTVFJJQ1QgPSAnc3RyaWN0JworWE1MID0gJ3htbCcKK0hUTUwgPSAnaHRtbCcKK0hUTUxfNSA9ICdodG1sNScKKworCitjbGFzcyBUcmVlQnVpbGRlclJlZ2lzdHJ5KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuYnVpbGRlcnNfZm9yX2ZlYXR1cmUgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgICAgICBzZWxmLmJ1aWxkZXJzID0gW10KKworICAgIGRlZiByZWdpc3RlcihzZWxmLCB0cmVlYnVpbGRlcl9jbGFzcyk6CisgICAgICAgICIiIlJlZ2lzdGVyIGEgdHJlZWJ1aWxkZXIgYmFzZWQgb24gaXRzIGFkdmVydGlzZWQgZmVhdHVyZXMuIiIiCisgICAgICAgIGZvciBmZWF0dXJlIGluIHRyZWVidWlsZGVyX2NsYXNzLmZlYXR1cmVzOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyc19mb3JfZmVhdHVyZVtmZWF0dXJlXS5pbnNlcnQoMCwgdHJlZWJ1aWxkZXJfY2xhc3MpCisgICAgICAgIHNlbGYuYnVpbGRlcnMuaW5zZXJ0KDAsIHRyZWVidWlsZGVyX2NsYXNzKQorCisgICAgZGVmIGxvb2t1cChzZWxmLCAqZmVhdHVyZXMpOgorICAgICAgICBpZiBsZW4oc2VsZi5idWlsZGVycykgPT0gMDoKKyAgICAgICAgICAgICMgVGhlcmUgYXJlIG5vIGJ1aWxkZXJzIGF0IGFsbC4KKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgbGVuKGZlYXR1cmVzKSA9PSAwOgorICAgICAgICAgICAgIyBUaGV5IGRpZG4ndCBhc2sgZm9yIGFueSBmZWF0dXJlcy4gR2l2ZSB0aGVtIHRoZSBtb3N0CisgICAgICAgICAgICAjIHJlY2VudGx5IHJlZ2lzdGVyZWQgYnVpbGRlci4KKyAgICAgICAgICAgIHJldHVybiBzZWxmLmJ1aWxkZXJzWzBdCisKKyAgICAgICAgIyBHbyBkb3duIHRoZSBsaXN0IG9mIGZlYXR1cmVzIGluIG9yZGVyLCBhbmQgZWxpbWluYXRlIGFueSBidWlsZGVycworICAgICAgICAjIHRoYXQgZG9uJ3QgbWF0Y2ggZXZlcnkgZmVhdHVyZS4KKyAgICAgICAgZmVhdHVyZXMgPSBsaXN0KGZlYXR1cmVzKQorICAgICAgICBmZWF0dXJlcy5yZXZlcnNlKCkKKyAgICAgICAgY2FuZGlkYXRlcyA9IE5vbmUKKyAgICAgICAgY2FuZGlkYXRlX3NldCA9IE5vbmUKKyAgICAgICAgd2hpbGUgbGVuKGZlYXR1cmVzKSA+IDA6CisgICAgICAgICAgICBmZWF0dXJlID0gZmVhdHVyZXMucG9wKCkKKyAgICAgICAgICAgIHdlX2hhdmVfdGhlX2ZlYXR1cmUgPSBzZWxmLmJ1aWxkZXJzX2Zvcl9mZWF0dXJlLmdldChmZWF0dXJlLCBbXSkKKyAgICAgICAgICAgIGlmIGxlbih3ZV9oYXZlX3RoZV9mZWF0dXJlKSA+IDA6CisgICAgICAgICAgICAgICAgaWYgY2FuZGlkYXRlcyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzID0gd2VfaGF2ZV90aGVfZmVhdHVyZQorICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVfc2V0ID0gc2V0KGNhbmRpZGF0ZXMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBFbGltaW5hdGUgYW55IGNhbmRpZGF0ZXMgdGhhdCBkb24ndCBoYXZlIHRoaXMgZmVhdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlX3NldCA9IGNhbmRpZGF0ZV9zZXQuaW50ZXJzZWN0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgc2V0KHdlX2hhdmVfdGhlX2ZlYXR1cmUpKQorCisgICAgICAgICMgVGhlIG9ubHkgdmFsaWQgY2FuZGlkYXRlcyBhcmUgdGhlIG9uZXMgaW4gY2FuZGlkYXRlX3NldC4KKyAgICAgICAgIyBHbyB0aHJvdWdoIHRoZSBvcmlnaW5hbCBsaXN0IG9mIGNhbmRpZGF0ZXMgYW5kIHBpY2sgdGhlIGZpcnN0IG9uZQorICAgICAgICAjIHRoYXQncyBpbiBjYW5kaWRhdGVfc2V0LgorICAgICAgICBpZiBjYW5kaWRhdGVfc2V0IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBmb3IgY2FuZGlkYXRlIGluIGNhbmRpZGF0ZXM6CisgICAgICAgICAgICBpZiBjYW5kaWRhdGUgaW4gY2FuZGlkYXRlX3NldDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlCisgICAgICAgIHJldHVybiBOb25lCisKKyMgVGhlIEJlYXV0aWZ1bFNvdXAgY2xhc3Mgd2lsbCB0YWtlIGZlYXR1cmUgbGlzdHMgZnJvbSBkZXZlbG9wZXJzIGFuZCB1c2UgdGhlbQorIyB0byBsb29rIHVwIGJ1aWxkZXJzIGluIHRoaXMgcmVnaXN0cnkuCitidWlsZGVyX3JlZ2lzdHJ5ID0gVHJlZUJ1aWxkZXJSZWdpc3RyeSgpCisKK2NsYXNzIFRyZWVCdWlsZGVyKG9iamVjdCk6CisgICAgIiIiVHVybiBhIGRvY3VtZW50IGludG8gYSBCZWF1dGlmdWwgU291cCBvYmplY3QgdHJlZS4iIiIKKworICAgIGZlYXR1cmVzID0gW10KKworICAgIGlzX3htbCA9IEZhbHNlCisgICAgcHJlc2VydmVfd2hpdGVzcGFjZV90YWdzID0gc2V0KCkKKyAgICBlbXB0eV9lbGVtZW50X3RhZ3MgPSBOb25lICMgQSB0YWcgd2lsbCBiZSBjb25zaWRlcmVkIGFuIGVtcHR5LWVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGFnIHdoZW4gYW5kIG9ubHkgd2hlbiBpdCBoYXMgbm8gY29udGVudHMuCisKKyAgICAjIEEgdmFsdWUgZm9yIHRoZXNlIHRhZy9hdHRyaWJ1dGUgY29tYmluYXRpb25zIGlzIGEgc3BhY2UtIG9yCisgICAgIyBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBDREFUQSwgcmF0aGVyIHRoYW4gYSBzaW5nbGUgQ0RBVEEuCisgICAgY2RhdGFfbGlzdF9hdHRyaWJ1dGVzID0ge30KKworCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnNvdXAgPSBOb25lCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBjYW5fYmVfZW1wdHlfZWxlbWVudChzZWxmLCB0YWdfbmFtZSk6CisgICAgICAgICIiIk1pZ2h0IGEgdGFnIHdpdGggdGhpcyBuYW1lIGJlIGFuIGVtcHR5LWVsZW1lbnQgdGFnPworCisgICAgICAgIFRoZSBmaW5hbCBtYXJrdXAgbWF5IG9yIG1heSBub3QgYWN0dWFsbHkgcHJlc2VudCB0aGlzIHRhZyBhcworICAgICAgICBzZWxmLWNsb3NpbmcuCisKKyAgICAgICAgRm9yIGluc3RhbmNlOiBhbiBIVE1MQnVpbGRlciBkb2VzIG5vdCBjb25zaWRlciBhIDxwPiB0YWcgdG8gYmUKKyAgICAgICAgYW4gZW1wdHktZWxlbWVudCB0YWcgKGl0J3Mgbm90IGluCisgICAgICAgIEhUTUxCdWlsZGVyLmVtcHR5X2VsZW1lbnRfdGFncykuIFRoaXMgbWVhbnMgYW4gZW1wdHkgPHA+IHRhZworICAgICAgICB3aWxsIGJlIHByZXNlbnRlZCBhcyAiPHA+PC9wPiIsIG5vdCAiPHAgLz4iLgorCisgICAgICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGhhcyBubyBvcGluaW9uIGFib3V0IHdoaWNoIHRhZ3MgYXJlCisgICAgICAgIGVtcHR5LWVsZW1lbnQgdGFncywgc28gYSB0YWcgd2lsbCBiZSBwcmVzZW50ZWQgYXMgYW4KKyAgICAgICAgZW1wdHktZWxlbWVudCB0YWcgaWYgYW5kIG9ubHkgaWYgaXQgaGFzIG5vIGNvbnRlbnRzLgorICAgICAgICAiPGZvbz48L2Zvbz4iIHdpbGwgYmVjb21lICI8Zm9vIC8+IiwgYW5kICI8Zm9vPmJhcjwvZm9vPiIgd2lsbAorICAgICAgICBiZSBsZWZ0IGFsb25lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5lbXB0eV9lbGVtZW50X3RhZ3MgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiB0YWdfbmFtZSBpbiBzZWxmLmVtcHR5X2VsZW1lbnRfdGFncworCisgICAgZGVmIGZlZWQoc2VsZiwgbWFya3VwKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgcHJlcGFyZV9tYXJrdXAoc2VsZiwgbWFya3VwLCB1c2VyX3NwZWNpZmllZF9lbmNvZGluZz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudF9kZWNsYXJlZF9lbmNvZGluZz1Ob25lKToKKyAgICAgICAgcmV0dXJuIG1hcmt1cCwgTm9uZSwgTm9uZSwgRmFsc2UKKworICAgIGRlZiB0ZXN0X2ZyYWdtZW50X3RvX2RvY3VtZW50KHNlbGYsIGZyYWdtZW50KToKKyAgICAgICAgIiIiV3JhcCBhbiBIVE1MIGZyYWdtZW50IHRvIG1ha2UgaXQgbG9vayBsaWtlIGEgZG9jdW1lbnQuCisKKyAgICAgICAgRGlmZmVyZW50IHBhcnNlcnMgZG8gdGhpcyBkaWZmZXJlbnRseS4gRm9yIGluc3RhbmNlLCBseG1sCisgICAgICAgIGludHJvZHVjZXMgYW4gZW1wdHkgPGhlYWQ+IHRhZywgYW5kIGh0bWw1bGliCisgICAgICAgIGRvZXNuJ3QuIEFic3RyYWN0aW5nIHRoaXMgYXdheSBsZXRzIHVzIHdyaXRlIHNpbXBsZSB0ZXN0cworICAgICAgICB3aGljaCBydW4gSFRNTCBmcmFnbWVudHMgdGhyb3VnaCB0aGUgcGFyc2VyIGFuZCBjb21wYXJlIHRoZQorICAgICAgICByZXN1bHRzIGFnYWluc3Qgb3RoZXIgSFRNTCBmcmFnbWVudHMuCisKKyAgICAgICAgVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkIG91dHNpZGUgb2YgdGVzdHMuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gZnJhZ21lbnQKKworICAgIGRlZiBzZXRfdXBfc3Vic3RpdHV0aW9ucyhzZWxmLCB0YWcpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfcmVwbGFjZV9jZGF0YV9saXN0X2F0dHJpYnV0ZV92YWx1ZXMoc2VsZiwgdGFnX25hbWUsIGF0dHJzKToKKyAgICAgICAgIiIiUmVwbGFjZXMgY2xhc3M9ImZvbyBiYXIiIHdpdGggY2xhc3M9WyJmb28iLCAiYmFyIl0KKworICAgICAgICBNb2RpZmllcyBpdHMgaW5wdXQgaW4gcGxhY2UuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgYXR0cnM6CisgICAgICAgICAgICByZXR1cm4gYXR0cnMKKyAgICAgICAgaWYgc2VsZi5jZGF0YV9saXN0X2F0dHJpYnV0ZXM6CisgICAgICAgICAgICB1bml2ZXJzYWwgPSBzZWxmLmNkYXRhX2xpc3RfYXR0cmlidXRlcy5nZXQoJyonLCBbXSkKKyAgICAgICAgICAgIHRhZ19zcGVjaWZpYyA9IHNlbGYuY2RhdGFfbGlzdF9hdHRyaWJ1dGVzLmdldCgKKyAgICAgICAgICAgICAgICB0YWdfbmFtZS5sb3dlcigpLCBOb25lKQorICAgICAgICAgICAgZm9yIGF0dHIgaW4gYXR0cnMua2V5cygpOgorICAgICAgICAgICAgICAgIGlmIGF0dHIgaW4gdW5pdmVyc2FsIG9yICh0YWdfc3BlY2lmaWMgYW5kIGF0dHIgaW4gdGFnX3NwZWNpZmljKToKKyAgICAgICAgICAgICAgICAgICAgIyBXZSBoYXZlIGEgImNsYXNzIi10eXBlIGF0dHJpYnV0ZSB3aG9zZSBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgIyB2YWx1ZSBpcyBhIHdoaXRlc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgIyB2YWx1ZXMuIFNwbGl0IGl0IGludG8gYSBsaXN0LgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGF0dHJzW2F0dHJdCisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gd2hpdGVzcGFjZV9yZS5zcGxpdCh2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaHRtbDVsaWIgc29tZXRpbWVzIGNhbGxzIHNldEF0dHJpYnV0ZXMgdHdpY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZm9yIHRoZSBzYW1lIHRhZyB3aGVuIHJlYXJyYW5naW5nIHRoZSBwYXJzZQorICAgICAgICAgICAgICAgICAgICAgICAgIyB0cmVlLiBPbiB0aGUgc2Vjb25kIGNhbGwgdGhlIGF0dHJpYnV0ZSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBoZXJlIGlzIGFscmVhZHkgYSBsaXN0LiAgSWYgdGhpcyBoYXBwZW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgIyBsZWF2ZSB0aGUgdmFsdWUgYWxvbmUgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAjIHNwbGl0IGl0IGFnYWluLgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgYXR0cnNbYXR0cl0gPSB2YWx1ZXMKKyAgICAgICAgcmV0dXJuIGF0dHJzCisKK2NsYXNzIFNBWFRyZWVCdWlsZGVyKFRyZWVCdWlsZGVyKToKKyAgICAiIiJBIEJlYXV0aWZ1bCBTb3VwIHRyZWVidWlsZGVyIHRoYXQgbGlzdGVucyBmb3IgU0FYIGV2ZW50cy4iIiIKKworICAgIGRlZiBmZWVkKHNlbGYsIG1hcmt1cCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RhcnRFbGVtZW50KHNlbGYsIG5hbWUsIGF0dHJzKToKKyAgICAgICAgYXR0cnMgPSBkaWN0KChrZXlbMV0sIHZhbHVlKSBmb3Iga2V5LCB2YWx1ZSBpbiBsaXN0KGF0dHJzLml0ZW1zKCkpKQorICAgICAgICAjcHJpbnQgIlN0YXJ0ICVzLCAlciIgJSAobmFtZSwgYXR0cnMpCisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfc3RhcnR0YWcobmFtZSwgYXR0cnMpCisKKyAgICBkZWYgZW5kRWxlbWVudChzZWxmLCBuYW1lKToKKyAgICAgICAgI3ByaW50ICJFbmQgJXMiICUgbmFtZQorICAgICAgICBzZWxmLnNvdXAuaGFuZGxlX2VuZHRhZyhuYW1lKQorCisgICAgZGVmIHN0YXJ0RWxlbWVudE5TKHNlbGYsIG5zVHVwbGUsIG5vZGVOYW1lLCBhdHRycyk6CisgICAgICAgICMgVGhyb3cgYXdheSAobnMsIG5vZGVOYW1lKSBmb3Igbm93LgorICAgICAgICBzZWxmLnN0YXJ0RWxlbWVudChub2RlTmFtZSwgYXR0cnMpCisKKyAgICBkZWYgZW5kRWxlbWVudE5TKHNlbGYsIG5zVHVwbGUsIG5vZGVOYW1lKToKKyAgICAgICAgIyBUaHJvdyBhd2F5IChucywgbm9kZU5hbWUpIGZvciBub3cuCisgICAgICAgIHNlbGYuZW5kRWxlbWVudChub2RlTmFtZSkKKyAgICAgICAgI2hhbmRsZXIuZW5kRWxlbWVudE5TKChucywgbm9kZS5ub2RlTmFtZSksIG5vZGUubm9kZU5hbWUpCisKKyAgICBkZWYgc3RhcnRQcmVmaXhNYXBwaW5nKHNlbGYsIHByZWZpeCwgbm9kZVZhbHVlKToKKyAgICAgICAgIyBJZ25vcmUgdGhlIHByZWZpeCBmb3Igbm93LgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZW5kUHJlZml4TWFwcGluZyhzZWxmLCBwcmVmaXgpOgorICAgICAgICAjIElnbm9yZSB0aGUgcHJlZml4IGZvciBub3cuCisgICAgICAgICMgaGFuZGxlci5lbmRQcmVmaXhNYXBwaW5nKHByZWZpeCkKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNoYXJhY3RlcnMoc2VsZiwgY29udGVudCk6CisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZGF0YShjb250ZW50KQorCisgICAgZGVmIHN0YXJ0RG9jdW1lbnQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBlbmREb2N1bWVudChzZWxmKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIEhUTUxUcmVlQnVpbGRlcihUcmVlQnVpbGRlcik6CisgICAgIiIiVGhpcyBUcmVlQnVpbGRlciBrbm93cyBmYWN0cyBhYm91dCBIVE1MLgorCisgICAgU3VjaCBhcyB3aGljaCB0YWdzIGFyZSBlbXB0eS1lbGVtZW50IHRhZ3MuCisgICAgIiIiCisKKyAgICBwcmVzZXJ2ZV93aGl0ZXNwYWNlX3RhZ3MgPSBzZXQoWydwcmUnLCAndGV4dGFyZWEnXSkKKyAgICBlbXB0eV9lbGVtZW50X3RhZ3MgPSBzZXQoWydicicgLCAnaHInLCAnaW5wdXQnLCAnaW1nJywgJ21ldGEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NwYWNlcicsICdsaW5rJywgJ2ZyYW1lJywgJ2Jhc2UnXSkKKworICAgICMgVGhlIEhUTUwgc3RhbmRhcmQgZGVmaW5lcyB0aGVzZSBhdHRyaWJ1dGVzIGFzIGNvbnRhaW5pbmcgYQorICAgICMgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdmFsdWVzLCBub3QgYSBzaW5nbGUgdmFsdWUuIFRoYXQgaXMsCisgICAgIyBjbGFzcz0iZm9vIGJhciIgbWVhbnMgdGhhdCB0aGUgJ2NsYXNzJyBhdHRyaWJ1dGUgaGFzIHR3byB2YWx1ZXMsCisgICAgIyAnZm9vJyBhbmQgJ2JhcicsIG5vdCB0aGUgc2luZ2xlIHZhbHVlICdmb28gYmFyJy4gIFdoZW4gd2UKKyAgICAjIGVuY291bnRlciBvbmUgb2YgdGhlc2UgYXR0cmlidXRlcywgd2Ugd2lsbCBwYXJzZSBpdHMgdmFsdWUgaW50bworICAgICMgYSBsaXN0IG9mIHZhbHVlcyBpZiBwb3NzaWJsZS4gVXBvbiBvdXRwdXQsIHRoZSBsaXN0IHdpbGwgYmUKKyAgICAjIGNvbnZlcnRlZCBiYWNrIGludG8gYSBzdHJpbmcuCisgICAgY2RhdGFfbGlzdF9hdHRyaWJ1dGVzID0geworICAgICAgICAiKiIgOiBbJ2NsYXNzJywgJ2FjY2Vzc2tleScsICdkcm9wem9uZSddLAorICAgICAgICAiYSIgOiBbJ3JlbCcsICdyZXYnXSwKKyAgICAgICAgImxpbmsiIDogIFsncmVsJywgJ3JldiddLAorICAgICAgICAidGQiIDogWyJoZWFkZXJzIl0sCisgICAgICAgICJ0aCIgOiBbImhlYWRlcnMiXSwKKyAgICAgICAgInRkIiA6IFsiaGVhZGVycyJdLAorICAgICAgICAiZm9ybSIgOiBbImFjY2VwdC1jaGFyc2V0Il0sCisgICAgICAgICJvYmplY3QiIDogWyJhcmNoaXZlIl0sCisKKyAgICAgICAgIyBUaGVzZSBhcmUgSFRNTDUgc3BlY2lmaWMsIGFzIGFyZSAqLmFjY2Vzc2tleSBhbmQgKi5kcm9wem9uZSBhYm92ZS4KKyAgICAgICAgImFyZWEiIDogWyJyZWwiXSwKKyAgICAgICAgImljb24iIDogWyJzaXplcyJdLAorICAgICAgICAiaWZyYW1lIiA6IFsic2FuZGJveCJdLAorICAgICAgICAib3V0cHV0IiA6IFsiZm9yIl0sCisgICAgICAgIH0KKworICAgIGRlZiBzZXRfdXBfc3Vic3RpdHV0aW9ucyhzZWxmLCB0YWcpOgorICAgICAgICAjIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gPG1ldGE+IHRhZ3MKKyAgICAgICAgaWYgdGFnLm5hbWUgIT0gJ21ldGEnOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaHR0cF9lcXVpdiA9IHRhZy5nZXQoJ2h0dHAtZXF1aXYnKQorICAgICAgICBjb250ZW50ID0gdGFnLmdldCgnY29udGVudCcpCisgICAgICAgIGNoYXJzZXQgPSB0YWcuZ2V0KCdjaGFyc2V0JykKKworICAgICAgICAjIFdlIGFyZSBpbnRlcmVzdGVkIGluIDxtZXRhPiB0YWdzIHRoYXQgc2F5IHdoYXQgZW5jb2RpbmcgdGhlCisgICAgICAgICMgZG9jdW1lbnQgd2FzIG9yaWdpbmFsbHkgaW4uIFRoaXMgbWVhbnMgSFRNTCA1LXN0eWxlIDxtZXRhPgorICAgICAgICAjIHRhZ3MgdGhhdCBwcm92aWRlIHRoZSAiY2hhcnNldCIgYXR0cmlidXRlLiBJdCBhbHNvIG1lYW5zCisgICAgICAgICMgSFRNTCA0LXN0eWxlIDxtZXRhPiB0YWdzIHRoYXQgcHJvdmlkZSB0aGUgImNvbnRlbnQiCisgICAgICAgICMgYXR0cmlidXRlIGFuZCBoYXZlICJodHRwLWVxdWl2IiBzZXQgdG8gImNvbnRlbnQtdHlwZSIuCisgICAgICAgICMKKyAgICAgICAgIyBJbiBib3RoIGNhc2VzIHdlIHdpbGwgcmVwbGFjZSB0aGUgdmFsdWUgb2YgdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICMgYXR0cmlidXRlIHdpdGggYSBzdGFuZGluIG9iamVjdCB0aGF0IGNhbiB0YWtlIG9uIGFueQorICAgICAgICAjIGVuY29kaW5nLgorICAgICAgICBtZXRhX2VuY29kaW5nID0gTm9uZQorICAgICAgICBpZiBjaGFyc2V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBIVE1MIDUgc3R5bGU6CisgICAgICAgICAgICAjIDxtZXRhIGNoYXJzZXQ9InV0ZjgiPgorICAgICAgICAgICAgbWV0YV9lbmNvZGluZyA9IGNoYXJzZXQKKyAgICAgICAgICAgIHRhZ1snY2hhcnNldCddID0gQ2hhcnNldE1ldGFBdHRyaWJ1dGVWYWx1ZShjaGFyc2V0KQorCisgICAgICAgIGVsaWYgKGNvbnRlbnQgaXMgbm90IE5vbmUgYW5kIGh0dHBfZXF1aXYgaXMgbm90IE5vbmUKKyAgICAgICAgICAgICAgYW5kIGh0dHBfZXF1aXYubG93ZXIoKSA9PSAnY29udGVudC10eXBlJyk6CisgICAgICAgICAgICAjIEhUTUwgNCBzdHlsZToKKyAgICAgICAgICAgICMgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmOCI+CisgICAgICAgICAgICB0YWdbJ2NvbnRlbnQnXSA9IENvbnRlbnRNZXRhQXR0cmlidXRlVmFsdWUoY29udGVudCkKKworICAgICAgICByZXR1cm4gKG1ldGFfZW5jb2RpbmcgaXMgbm90IE5vbmUpCisKK2RlZiByZWdpc3Rlcl90cmVlYnVpbGRlcnNfZnJvbShtb2R1bGUpOgorICAgICIiIkNvcHkgVHJlZUJ1aWxkZXJzIGZyb20gdGhlIGdpdmVuIG1vZHVsZSBpbnRvIHRoaXMgbW9kdWxlLiIiIgorICAgICMgSSdtIGZhaXJseSBzdXJlIHRoaXMgaXMgbm90IHRoZSBiZXN0IHdheSB0byBkbyB0aGlzLgorICAgIHRoaXNfbW9kdWxlID0gc3lzLm1vZHVsZXNbJ2JzNC5idWlsZGVyJ10KKyAgICBmb3IgbmFtZSBpbiBtb2R1bGUuX19hbGxfXzoKKyAgICAgICAgb2JqID0gZ2V0YXR0cihtb2R1bGUsIG5hbWUpCisKKyAgICAgICAgaWYgaXNzdWJjbGFzcyhvYmosIFRyZWVCdWlsZGVyKToKKyAgICAgICAgICAgIHNldGF0dHIodGhpc19tb2R1bGUsIG5hbWUsIG9iaikKKyAgICAgICAgICAgIHRoaXNfbW9kdWxlLl9fYWxsX18uYXBwZW5kKG5hbWUpCisgICAgICAgICAgICAjIFJlZ2lzdGVyIHRoZSBidWlsZGVyIHdoaWxlIHdlJ3JlIGF0IGl0LgorICAgICAgICAgICAgdGhpc19tb2R1bGUuYnVpbGRlcl9yZWdpc3RyeS5yZWdpc3RlcihvYmopCisKK2NsYXNzIFBhcnNlclJlamVjdGVkTWFya3VwKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisjIEJ1aWxkZXJzIGFyZSByZWdpc3RlcmVkIGluIHJldmVyc2Ugb3JkZXIgb2YgcHJpb3JpdHksIHNvIHRoYXQgY3VzdG9tCisjIGJ1aWxkZXIgcmVnaXN0cmF0aW9ucyB3aWxsIHRha2UgcHJlY2VkZW5jZS4gSW4gZ2VuZXJhbCwgd2Ugd2FudCBseG1sCisjIHRvIHRha2UgcHJlY2VkZW5jZSBvdmVyIGh0bWw1bGliLCBiZWNhdXNlIGl0J3MgZmFzdGVyLiBBbmQgd2Ugb25seQorIyB3YW50IHRvIHVzZSBIVE1MUGFyc2VyIGFzIGEgbGFzdCByZXN1bHQuCitmcm9tIC4gaW1wb3J0IF9odG1scGFyc2VyCityZWdpc3Rlcl90cmVlYnVpbGRlcnNfZnJvbShfaHRtbHBhcnNlcikKK3RyeToKKyAgICBmcm9tIC4gaW1wb3J0IF9odG1sNWxpYgorICAgIHJlZ2lzdGVyX3RyZWVidWlsZGVyc19mcm9tKF9odG1sNWxpYikKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAjIFRoZXkgZG9uJ3QgaGF2ZSBodG1sNWxpYiBpbnN0YWxsZWQuCisgICAgcGFzcwordHJ5OgorICAgIGZyb20gLiBpbXBvcnQgX2x4bWwKKyAgICByZWdpc3Rlcl90cmVlYnVpbGRlcnNfZnJvbShfbHhtbCkKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAjIFRoZXkgZG9uJ3QgaGF2ZSBseG1sIGluc3RhbGxlZC4KKyAgICBwYXNzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19odG1sNWxpYi5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX2h0bWw1bGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZTM2YWU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9faHRtbDVsaWIucHkKQEAgLTAsMCArMSwyODUgQEAKK19fYWxsX18gPSBbCisgICAgJ0hUTUw1VHJlZUJ1aWxkZXInLAorICAgIF0KKworaW1wb3J0IHdhcm5pbmdzCitmcm9tIGJzNC5idWlsZGVyIGltcG9ydCAoCisgICAgUEVSTUlTU0lWRSwKKyAgICBIVE1MLAorICAgIEhUTUxfNSwKKyAgICBIVE1MVHJlZUJ1aWxkZXIsCisgICAgKQorZnJvbSBiczQuZWxlbWVudCBpbXBvcnQgTmFtZXNwYWNlZEF0dHJpYnV0ZQoraW1wb3J0IGh0bWw1bGliCitmcm9tIGh0bWw1bGliLmNvbnN0YW50cyBpbXBvcnQgbmFtZXNwYWNlcworZnJvbSBiczQuZWxlbWVudCBpbXBvcnQgKAorICAgIENvbW1lbnQsCisgICAgRG9jdHlwZSwKKyAgICBOYXZpZ2FibGVTdHJpbmcsCisgICAgVGFnLAorICAgICkKKworY2xhc3MgSFRNTDVUcmVlQnVpbGRlcihIVE1MVHJlZUJ1aWxkZXIpOgorICAgICIiIlVzZSBodG1sNWxpYiB0byBidWlsZCBhIHRyZWUuIiIiCisKKyAgICBmZWF0dXJlcyA9IFsnaHRtbDVsaWInLCBQRVJNSVNTSVZFLCBIVE1MXzUsIEhUTUxdCisKKyAgICBkZWYgcHJlcGFyZV9tYXJrdXAoc2VsZiwgbWFya3VwLCB1c2VyX3NwZWNpZmllZF9lbmNvZGluZyk6CisgICAgICAgICMgU3RvcmUgdGhlIHVzZXItc3BlY2lmaWVkIGVuY29kaW5nIGZvciB1c2UgbGF0ZXIgb24uCisgICAgICAgIHNlbGYudXNlcl9zcGVjaWZpZWRfZW5jb2RpbmcgPSB1c2VyX3NwZWNpZmllZF9lbmNvZGluZworICAgICAgICB5aWVsZCAobWFya3VwLCBOb25lLCBOb25lLCBGYWxzZSkKKworICAgICMgVGhlc2UgbWV0aG9kcyBhcmUgZGVmaW5lZCBieSBCZWF1dGlmdWwgU291cC4KKyAgICBkZWYgZmVlZChzZWxmLCBtYXJrdXApOgorICAgICAgICBpZiBzZWxmLnNvdXAucGFyc2Vfb25seSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIllvdSBwcm92aWRlZCBhIHZhbHVlIGZvciBwYXJzZV9vbmx5LCBidXQgdGhlIGh0bWw1bGliIHRyZWUgYnVpbGRlciBkb2Vzbid0IHN1cHBvcnQgcGFyc2Vfb25seS4gVGhlIGVudGlyZSBkb2N1bWVudCB3aWxsIGJlIHBhcnNlZC4iKQorICAgICAgICBwYXJzZXIgPSBodG1sNWxpYi5IVE1MUGFyc2VyKHRyZWU9c2VsZi5jcmVhdGVfdHJlZWJ1aWxkZXIpCisgICAgICAgIGRvYyA9IHBhcnNlci5wYXJzZShtYXJrdXAsIGVuY29kaW5nPXNlbGYudXNlcl9zcGVjaWZpZWRfZW5jb2RpbmcpCisKKyAgICAgICAgIyBTZXQgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBkZXRlY3RlZCBieSB0aGUgdG9rZW5pemVyLgorICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSk6CisgICAgICAgICAgICAjIFdlIG5lZWQgdG8gc3BlY2lhbC1jYXNlIHRoaXMgYmVjYXVzZSBodG1sNWxpYiBzZXRzCisgICAgICAgICAgICAjIGNoYXJFbmNvZGluZyB0byBVVEYtOCBpZiBpdCBnZXRzIFVuaWNvZGUgaW5wdXQuCisgICAgICAgICAgICBkb2Mub3JpZ2luYWxfZW5jb2RpbmcgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkb2Mub3JpZ2luYWxfZW5jb2RpbmcgPSBwYXJzZXIudG9rZW5pemVyLnN0cmVhbS5jaGFyRW5jb2RpbmdbMF0KKworICAgIGRlZiBjcmVhdGVfdHJlZWJ1aWxkZXIoc2VsZiwgbmFtZXNwYWNlSFRNTEVsZW1lbnRzKToKKyAgICAgICAgc2VsZi51bmRlcmx5aW5nX2J1aWxkZXIgPSBUcmVlQnVpbGRlckZvckh0bWw1bGliKAorICAgICAgICAgICAgc2VsZi5zb3VwLCBuYW1lc3BhY2VIVE1MRWxlbWVudHMpCisgICAgICAgIHJldHVybiBzZWxmLnVuZGVybHlpbmdfYnVpbGRlcgorCisgICAgZGVmIHRlc3RfZnJhZ21lbnRfdG9fZG9jdW1lbnQoc2VsZiwgZnJhZ21lbnQpOgorICAgICAgICAiIiJTZWUgYFRyZWVCdWlsZGVyYC4iIiIKKyAgICAgICAgcmV0dXJuIHUnPGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PiVzPC9ib2R5PjwvaHRtbD4nICUgZnJhZ21lbnQKKworCitjbGFzcyBUcmVlQnVpbGRlckZvckh0bWw1bGliKGh0bWw1bGliLnRyZWVidWlsZGVycy5fYmFzZS5UcmVlQnVpbGRlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc291cCwgbmFtZXNwYWNlSFRNTEVsZW1lbnRzKToKKyAgICAgICAgc2VsZi5zb3VwID0gc291cAorICAgICAgICBzdXBlcihUcmVlQnVpbGRlckZvckh0bWw1bGliLCBzZWxmKS5fX2luaXRfXyhuYW1lc3BhY2VIVE1MRWxlbWVudHMpCisKKyAgICBkZWYgZG9jdW1lbnRDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5zb3VwLnJlc2V0KCkKKyAgICAgICAgcmV0dXJuIEVsZW1lbnQoc2VsZi5zb3VwLCBzZWxmLnNvdXAsIE5vbmUpCisKKyAgICBkZWYgaW5zZXJ0RG9jdHlwZShzZWxmLCB0b2tlbik6CisgICAgICAgIG5hbWUgPSB0b2tlblsibmFtZSJdCisgICAgICAgIHB1YmxpY0lkID0gdG9rZW5bInB1YmxpY0lkIl0KKyAgICAgICAgc3lzdGVtSWQgPSB0b2tlblsic3lzdGVtSWQiXQorCisgICAgICAgIGRvY3R5cGUgPSBEb2N0eXBlLmZvcl9uYW1lX2FuZF9pZHMobmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKQorICAgICAgICBzZWxmLnNvdXAub2JqZWN0X3dhc19wYXJzZWQoZG9jdHlwZSkKKworICAgIGRlZiBlbGVtZW50Q2xhc3Moc2VsZiwgbmFtZSwgbmFtZXNwYWNlKToKKyAgICAgICAgdGFnID0gc2VsZi5zb3VwLm5ld190YWcobmFtZSwgbmFtZXNwYWNlKQorICAgICAgICByZXR1cm4gRWxlbWVudCh0YWcsIHNlbGYuc291cCwgbmFtZXNwYWNlKQorCisgICAgZGVmIGNvbW1lbnRDbGFzcyhzZWxmLCBkYXRhKToKKyAgICAgICAgcmV0dXJuIFRleHROb2RlKENvbW1lbnQoZGF0YSksIHNlbGYuc291cCkKKworICAgIGRlZiBmcmFnbWVudENsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnNvdXAgPSBCZWF1dGlmdWxTb3VwKCIiKQorICAgICAgICBzZWxmLnNvdXAubmFtZSA9ICJbZG9jdW1lbnRfZnJhZ21lbnRdIgorICAgICAgICByZXR1cm4gRWxlbWVudChzZWxmLnNvdXAsIHNlbGYuc291cCwgTm9uZSkKKworICAgIGRlZiBhcHBlbmRDaGlsZChzZWxmLCBub2RlKToKKyAgICAgICAgIyBYWFggVGhpcyBjb2RlIGlzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBCUzQgdGVzdHMuCisgICAgICAgIHNlbGYuc291cC5hcHBlbmQobm9kZS5lbGVtZW50KQorCisgICAgZGVmIGdldERvY3VtZW50KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zb3VwCisKKyAgICBkZWYgZ2V0RnJhZ21lbnQoc2VsZik6CisgICAgICAgIHJldHVybiBodG1sNWxpYi50cmVlYnVpbGRlcnMuX2Jhc2UuVHJlZUJ1aWxkZXIuZ2V0RnJhZ21lbnQoc2VsZikuZWxlbWVudAorCitjbGFzcyBBdHRyTGlzdChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbGVtZW50KToKKyAgICAgICAgc2VsZi5lbGVtZW50ID0gZWxlbWVudAorICAgICAgICBzZWxmLmF0dHJzID0gZGljdChzZWxmLmVsZW1lbnQuYXR0cnMpCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGlzdChzZWxmLmF0dHJzLml0ZW1zKCkpLl9faXRlcl9fKCkKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICAic2V0IGF0dHIiLCBuYW1lLCB2YWx1ZQorICAgICAgICBzZWxmLmVsZW1lbnRbbmFtZV0gPSB2YWx1ZQorICAgIGRlZiBpdGVtcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5hdHRycy5pdGVtcygpKQorICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICByZXR1cm4gbGlzdChzZWxmLmF0dHJzLmtleXMoKSkKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmF0dHJzKQorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYXR0cnNbbmFtZV0KKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gbmFtZSBpbiBsaXN0KHNlbGYuYXR0cnMua2V5cygpKQorCisKK2NsYXNzIEVsZW1lbnQoaHRtbDVsaWIudHJlZWJ1aWxkZXJzLl9iYXNlLk5vZGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbGVtZW50LCBzb3VwLCBuYW1lc3BhY2UpOgorICAgICAgICBodG1sNWxpYi50cmVlYnVpbGRlcnMuX2Jhc2UuTm9kZS5fX2luaXRfXyhzZWxmLCBlbGVtZW50Lm5hbWUpCisgICAgICAgIHNlbGYuZWxlbWVudCA9IGVsZW1lbnQKKyAgICAgICAgc2VsZi5zb3VwID0gc291cAorICAgICAgICBzZWxmLm5hbWVzcGFjZSA9IG5hbWVzcGFjZQorCisgICAgZGVmIGFwcGVuZENoaWxkKHNlbGYsIG5vZGUpOgorICAgICAgICBzdHJpbmdfY2hpbGQgPSBjaGlsZCA9IE5vbmUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICMgU29tZSBvdGhlciBwaWVjZSBvZiBjb2RlIGRlY2lkZWQgdG8gcGFzcyBpbiBhIHN0cmluZworICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgVGV4dEVsZW1lbnQgb2JqZWN0IHRvIGNvbnRhaW4gdGhlCisgICAgICAgICAgICAjIHN0cmluZy4KKyAgICAgICAgICAgIHN0cmluZ19jaGlsZCA9IGNoaWxkID0gbm9kZQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgVGFnKToKKyAgICAgICAgICAgICMgU29tZSBvdGhlciBwaWVjZSBvZiBjb2RlIGRlY2lkZWQgdG8gcGFzcyBpbiBhIFRhZworICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGNyZWF0aW5nIGFuIEVsZW1lbnQgb2JqZWN0IHRvIGNvbnRhaW4gdGhlCisgICAgICAgICAgICAjIFRhZy4KKyAgICAgICAgICAgIGNoaWxkID0gbm9kZQorICAgICAgICBlbGlmIG5vZGUuZWxlbWVudC5fX2NsYXNzX18gPT0gTmF2aWdhYmxlU3RyaW5nOgorICAgICAgICAgICAgc3RyaW5nX2NoaWxkID0gY2hpbGQgPSBub2RlLmVsZW1lbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNoaWxkID0gbm9kZS5lbGVtZW50CisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY2hpbGQsIGJhc2VzdHJpbmcpIGFuZCBjaGlsZC5wYXJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBub2RlLmVsZW1lbnQuZXh0cmFjdCgpCisKKyAgICAgICAgaWYgKHN0cmluZ19jaGlsZCBhbmQgc2VsZi5lbGVtZW50LmNvbnRlbnRzCisgICAgICAgICAgICBhbmQgc2VsZi5lbGVtZW50LmNvbnRlbnRzWy0xXS5fX2NsYXNzX18gPT0gTmF2aWdhYmxlU3RyaW5nKToKKyAgICAgICAgICAgICMgV2UgYXJlIGFwcGVuZGluZyBhIHN0cmluZyBvbnRvIGFub3RoZXIgc3RyaW5nLgorICAgICAgICAgICAgIyBUT0RPIFRoaXMgaGFzIE8obl4yKSBwZXJmb3JtYW5jZSwgZm9yIGlucHV0IGxpa2UKKyAgICAgICAgICAgICMgImE8L2E+YTwvYT5hPC9hPi4uLiIKKyAgICAgICAgICAgIG9sZF9lbGVtZW50ID0gc2VsZi5lbGVtZW50LmNvbnRlbnRzWy0xXQorICAgICAgICAgICAgbmV3X2VsZW1lbnQgPSBzZWxmLnNvdXAubmV3X3N0cmluZyhvbGRfZWxlbWVudCArIHN0cmluZ19jaGlsZCkKKyAgICAgICAgICAgIG9sZF9lbGVtZW50LnJlcGxhY2Vfd2l0aChuZXdfZWxlbWVudCkKKyAgICAgICAgICAgIHNlbGYuc291cC5fbW9zdF9yZWNlbnRfZWxlbWVudCA9IG5ld19lbGVtZW50CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgICMgQ3JlYXRlIGEgYnJhbmQgbmV3IE5hdmlnYWJsZVN0cmluZyBmcm9tIHRoaXMgc3RyaW5nLgorICAgICAgICAgICAgICAgIGNoaWxkID0gc2VsZi5zb3VwLm5ld19zdHJpbmcobm9kZSkKKworICAgICAgICAgICAgIyBUZWxsIEJlYXV0aWZ1bCBTb3VwIHRvIGFjdCBhcyBpZiBpdCBwYXJzZWQgdGhpcyBlbGVtZW50CisgICAgICAgICAgICAjIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBwYXJlbnQncyBsYXN0IGRlc2NlbmRhbnQuIChPcgorICAgICAgICAgICAgIyBpbW1lZGlhdGVseSBhZnRlciB0aGUgcGFyZW50LCBpZiBpdCBoYXMgbm8gY2hpbGRyZW4uKQorICAgICAgICAgICAgaWYgc2VsZi5lbGVtZW50LmNvbnRlbnRzOgorICAgICAgICAgICAgICAgIG1vc3RfcmVjZW50X2VsZW1lbnQgPSBzZWxmLmVsZW1lbnQuX2xhc3RfZGVzY2VuZGFudChGYWxzZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbW9zdF9yZWNlbnRfZWxlbWVudCA9IHNlbGYuZWxlbWVudAorCisgICAgICAgICAgICBzZWxmLnNvdXAub2JqZWN0X3dhc19wYXJzZWQoCisgICAgICAgICAgICAgICAgY2hpbGQsIHBhcmVudD1zZWxmLmVsZW1lbnQsCisgICAgICAgICAgICAgICAgbW9zdF9yZWNlbnRfZWxlbWVudD1tb3N0X3JlY2VudF9lbGVtZW50KQorCisgICAgZGVmIGdldEF0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHJldHVybiBBdHRyTGlzdChzZWxmLmVsZW1lbnQpCisKKyAgICBkZWYgc2V0QXR0cmlidXRlcyhzZWxmLCBhdHRyaWJ1dGVzKToKKyAgICAgICAgaWYgYXR0cmlidXRlcyBpcyBub3QgTm9uZSBhbmQgbGVuKGF0dHJpYnV0ZXMpID4gMDoKKworICAgICAgICAgICAgY29udmVydGVkX2F0dHJpYnV0ZXMgPSBbXQorICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGxpc3QoYXR0cmlidXRlcy5pdGVtcygpKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG5hbWUsIHR1cGxlKToKKyAgICAgICAgICAgICAgICAgICAgbmV3X25hbWUgPSBOYW1lc3BhY2VkQXR0cmlidXRlKCpuYW1lKQorICAgICAgICAgICAgICAgICAgICBkZWwgYXR0cmlidXRlc1tuYW1lXQorICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW25ld19uYW1lXSA9IHZhbHVlCisKKyAgICAgICAgICAgIHNlbGYuc291cC5idWlsZGVyLl9yZXBsYWNlX2NkYXRhX2xpc3RfYXR0cmlidXRlX3ZhbHVlcygKKyAgICAgICAgICAgICAgICBzZWxmLm5hbWUsIGF0dHJpYnV0ZXMpCisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gYXR0cmlidXRlcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHNlbGYuZWxlbWVudFtuYW1lXSA9IHZhbHVlCisKKyAgICAgICAgICAgICMgVGhlIGF0dHJpYnV0ZXMgbWF5IGNvbnRhaW4gdmFyaWFibGVzIHRoYXQgbmVlZCBzdWJzdGl0dXRpb24uCisgICAgICAgICAgICAjIENhbGwgc2V0X3VwX3N1YnN0aXR1dGlvbnMgbWFudWFsbHkuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRoZSBUYWcgY29uc3RydWN0b3IgY2FsbGVkIHRoaXMgbWV0aG9kIHdoZW4gdGhlIFRhZyB3YXMgY3JlYXRlZCwKKyAgICAgICAgICAgICMgYnV0IHdlIGp1c3Qgc2V0L2NoYW5nZWQgdGhlIGF0dHJpYnV0ZXMsIHNvIGNhbGwgaXQgYWdhaW4uCisgICAgICAgICAgICBzZWxmLnNvdXAuYnVpbGRlci5zZXRfdXBfc3Vic3RpdHV0aW9ucyhzZWxmLmVsZW1lbnQpCisgICAgYXR0cmlidXRlcyA9IHByb3BlcnR5KGdldEF0dHJpYnV0ZXMsIHNldEF0dHJpYnV0ZXMpCisKKyAgICBkZWYgaW5zZXJ0VGV4dChzZWxmLCBkYXRhLCBpbnNlcnRCZWZvcmU9Tm9uZSk6CisgICAgICAgIGlmIGluc2VydEJlZm9yZToKKyAgICAgICAgICAgIHRleHQgPSBUZXh0Tm9kZShzZWxmLnNvdXAubmV3X3N0cmluZyhkYXRhKSwgc2VsZi5zb3VwKQorICAgICAgICAgICAgc2VsZi5pbnNlcnRCZWZvcmUoZGF0YSwgaW5zZXJ0QmVmb3JlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hcHBlbmRDaGlsZChkYXRhKQorCisgICAgZGVmIGluc2VydEJlZm9yZShzZWxmLCBub2RlLCByZWZOb2RlKToKKyAgICAgICAgaW5kZXggPSBzZWxmLmVsZW1lbnQuaW5kZXgocmVmTm9kZS5lbGVtZW50KQorICAgICAgICBpZiAobm9kZS5lbGVtZW50Ll9fY2xhc3NfXyA9PSBOYXZpZ2FibGVTdHJpbmcgYW5kIHNlbGYuZWxlbWVudC5jb250ZW50cworICAgICAgICAgICAgYW5kIHNlbGYuZWxlbWVudC5jb250ZW50c1tpbmRleC0xXS5fX2NsYXNzX18gPT0gTmF2aWdhYmxlU3RyaW5nKToKKyAgICAgICAgICAgICMgKFNlZSBjb21tZW50cyBpbiBhcHBlbmRDaGlsZCkKKyAgICAgICAgICAgIG9sZF9ub2RlID0gc2VsZi5lbGVtZW50LmNvbnRlbnRzW2luZGV4LTFdCisgICAgICAgICAgICBuZXdfc3RyID0gc2VsZi5zb3VwLm5ld19zdHJpbmcob2xkX25vZGUgKyBub2RlLmVsZW1lbnQpCisgICAgICAgICAgICBvbGRfbm9kZS5yZXBsYWNlX3dpdGgobmV3X3N0cikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZWxlbWVudC5pbnNlcnQoaW5kZXgsIG5vZGUuZWxlbWVudCkKKyAgICAgICAgICAgIG5vZGUucGFyZW50ID0gc2VsZgorCisgICAgZGVmIHJlbW92ZUNoaWxkKHNlbGYsIG5vZGUpOgorICAgICAgICBub2RlLmVsZW1lbnQuZXh0cmFjdCgpCisKKyAgICBkZWYgcmVwYXJlbnRDaGlsZHJlbihzZWxmLCBuZXdfcGFyZW50KToKKyAgICAgICAgIiIiTW92ZSBhbGwgb2YgdGhpcyB0YWcncyBjaGlsZHJlbiBpbnRvIGFub3RoZXIgdGFnLiIiIgorICAgICAgICBlbGVtZW50ID0gc2VsZi5lbGVtZW50CisgICAgICAgIG5ld19wYXJlbnRfZWxlbWVudCA9IG5ld19wYXJlbnQuZWxlbWVudAorICAgICAgICAjIERldGVybWluZSB3aGF0IHRoaXMgdGFnJ3MgbmV4dF9lbGVtZW50IHdpbGwgYmUgb25jZSBhbGwgdGhlIGNoaWxkcmVuCisgICAgICAgICMgYXJlIHJlbW92ZWQuCisgICAgICAgIGZpbmFsX25leHRfZWxlbWVudCA9IGVsZW1lbnQubmV4dF9zaWJsaW5nCisKKyAgICAgICAgbmV3X3BhcmVudHNfbGFzdF9kZXNjZW5kYW50ID0gbmV3X3BhcmVudF9lbGVtZW50Ll9sYXN0X2Rlc2NlbmRhbnQoRmFsc2UsIEZhbHNlKQorICAgICAgICBpZiBsZW4obmV3X3BhcmVudF9lbGVtZW50LmNvbnRlbnRzKSA+IDA6CisgICAgICAgICAgICAjIFRoZSBuZXcgcGFyZW50IGFscmVhZHkgY29udGFpbnMgY2hpbGRyZW4uIFdlIHdpbGwgYmUKKyAgICAgICAgICAgICMgYXBwZW5kaW5nIHRoaXMgdGFnJ3MgY2hpbGRyZW4gdG8gdGhlIGVuZC4KKyAgICAgICAgICAgIG5ld19wYXJlbnRzX2xhc3RfY2hpbGQgPSBuZXdfcGFyZW50X2VsZW1lbnQuY29udGVudHNbLTFdCisgICAgICAgICAgICBuZXdfcGFyZW50c19sYXN0X2Rlc2NlbmRhbnRfbmV4dF9lbGVtZW50ID0gbmV3X3BhcmVudHNfbGFzdF9kZXNjZW5kYW50Lm5leHRfZWxlbWVudAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUaGUgbmV3IHBhcmVudCBjb250YWlucyBubyBjaGlsZHJlbi4KKyAgICAgICAgICAgIG5ld19wYXJlbnRzX2xhc3RfY2hpbGQgPSBOb25lCisgICAgICAgICAgICBuZXdfcGFyZW50c19sYXN0X2Rlc2NlbmRhbnRfbmV4dF9lbGVtZW50ID0gbmV3X3BhcmVudF9lbGVtZW50Lm5leHRfZWxlbWVudAorCisgICAgICAgIHRvX2FwcGVuZCA9IGVsZW1lbnQuY29udGVudHMKKyAgICAgICAgYXBwZW5kX2FmdGVyID0gbmV3X3BhcmVudC5lbGVtZW50LmNvbnRlbnRzCisgICAgICAgIGlmIGxlbih0b19hcHBlbmQpID4gMDoKKyAgICAgICAgICAgICMgU2V0IHRoZSBmaXJzdCBjaGlsZCdzIHByZXZpb3VzX2VsZW1lbnQgYW5kIHByZXZpb3VzX3NpYmxpbmcKKyAgICAgICAgICAgICMgdG8gZWxlbWVudHMgd2l0aGluIHRoZSBuZXcgcGFyZW50CisgICAgICAgICAgICBmaXJzdF9jaGlsZCA9IHRvX2FwcGVuZFswXQorICAgICAgICAgICAgZmlyc3RfY2hpbGQucHJldmlvdXNfZWxlbWVudCA9IG5ld19wYXJlbnRzX2xhc3RfZGVzY2VuZGFudAorICAgICAgICAgICAgZmlyc3RfY2hpbGQucHJldmlvdXNfc2libGluZyA9IG5ld19wYXJlbnRzX2xhc3RfY2hpbGQKKworICAgICAgICAgICAgIyBGaXggdGhlIGxhc3QgY2hpbGQncyBuZXh0X2VsZW1lbnQgYW5kIG5leHRfc2libGluZworICAgICAgICAgICAgbGFzdF9jaGlsZCA9IHRvX2FwcGVuZFstMV0KKyAgICAgICAgICAgIGxhc3RfY2hpbGQubmV4dF9lbGVtZW50ID0gbmV3X3BhcmVudHNfbGFzdF9kZXNjZW5kYW50X25leHRfZWxlbWVudAorICAgICAgICAgICAgbGFzdF9jaGlsZC5uZXh0X3NpYmxpbmcgPSBOb25lCisKKyAgICAgICAgZm9yIGNoaWxkIGluIHRvX2FwcGVuZDoKKyAgICAgICAgICAgIGNoaWxkLnBhcmVudCA9IG5ld19wYXJlbnRfZWxlbWVudAorICAgICAgICAgICAgbmV3X3BhcmVudF9lbGVtZW50LmNvbnRlbnRzLmFwcGVuZChjaGlsZCkKKworICAgICAgICAjIE5vdyB0aGF0IHRoaXMgZWxlbWVudCBoYXMgbm8gY2hpbGRyZW4sIGNoYW5nZSBpdHMgLm5leHRfZWxlbWVudC4KKyAgICAgICAgZWxlbWVudC5jb250ZW50cyA9IFtdCisgICAgICAgIGVsZW1lbnQubmV4dF9lbGVtZW50ID0gZmluYWxfbmV4dF9lbGVtZW50CisKKyAgICBkZWYgY2xvbmVOb2RlKHNlbGYpOgorICAgICAgICB0YWcgPSBzZWxmLnNvdXAubmV3X3RhZyhzZWxmLmVsZW1lbnQubmFtZSwgc2VsZi5uYW1lc3BhY2UpCisgICAgICAgIG5vZGUgPSBFbGVtZW50KHRhZywgc2VsZi5zb3VwLCBzZWxmLm5hbWVzcGFjZSkKKyAgICAgICAgZm9yIGtleSx2YWx1ZSBpbiBzZWxmLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICBub2RlLmF0dHJpYnV0ZXNba2V5XSA9IHZhbHVlCisgICAgICAgIHJldHVybiBub2RlCisKKyAgICBkZWYgaGFzQ29udGVudChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZWxlbWVudC5jb250ZW50cworCisgICAgZGVmIGdldE5hbWVUdXBsZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5uYW1lc3BhY2UgPT0gTm9uZToKKyAgICAgICAgICAgIHJldHVybiBuYW1lc3BhY2VzWyJodG1sIl0sIHNlbGYubmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmFtZXNwYWNlLCBzZWxmLm5hbWUKKworICAgIG5hbWVUdXBsZSA9IHByb3BlcnR5KGdldE5hbWVUdXBsZSkKKworY2xhc3MgVGV4dE5vZGUoRWxlbWVudCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVsZW1lbnQsIHNvdXApOgorICAgICAgICBodG1sNWxpYi50cmVlYnVpbGRlcnMuX2Jhc2UuTm9kZS5fX2luaXRfXyhzZWxmLCBOb25lKQorICAgICAgICBzZWxmLmVsZW1lbnQgPSBlbGVtZW50CisgICAgICAgIHNlbGYuc291cCA9IHNvdXAKKworICAgIGRlZiBjbG9uZU5vZGUoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX2h0bWxwYXJzZXIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19odG1scGFyc2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhOGQ4YjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19odG1scGFyc2VyLnB5CkBAIC0wLDAgKzEsMjU4IEBACisiIiJVc2UgdGhlIEhUTUxQYXJzZXIgbGlicmFyeSB0byBwYXJzZSBIVE1MIGZpbGVzIHRoYXQgYXJlbid0IHRvbyBiYWQuIiIiCisKK19fYWxsX18gPSBbCisgICAgJ0hUTUxQYXJzZXJUcmVlQnVpbGRlcicsCisgICAgXQorCitmcm9tIEhUTUxQYXJzZXIgaW1wb3J0ICgKKyAgICBIVE1MUGFyc2VyLAorICAgIEhUTUxQYXJzZUVycm9yLAorICAgICkKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworCisjIFN0YXJ0aW5nIGluIFB5dGhvbiAzLjIsIHRoZSBIVE1MUGFyc2VyIGNvbnN0cnVjdG9yIHRha2VzIGEgJ3N0cmljdCcKKyMgYXJndW1lbnQsIHdoaWNoIHdlJ2QgbGlrZSB0byBzZXQgdG8gRmFsc2UuIFVuZm9ydHVuYXRlbHksCisjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMzI3MyBtYWtlcyBzdHJpY3Q9VHJ1ZSBhIGJldHRlciBiZXQKKyMgYmVmb3JlIFB5dGhvbiAzLjIuMy4KKyMKKyMgQXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUsIHdlIG1vbmtleXBhdGNoIEhUTUxQYXJzZXIgc28gdGhhdAorIyBzdHJpY3Q9VHJ1ZSB3b3JrcyB3ZWxsIG9uIFB5dGhvbiAzLjIuMi4KK21ham9yLCBtaW5vciwgcmVsZWFzZSA9IHN5cy52ZXJzaW9uX2luZm9bOjNdCitDT05TVFJVQ1RPUl9UQUtFU19TVFJJQ1QgPSAoCisgICAgbWFqb3IgPiAzCisgICAgb3IgKG1ham9yID09IDMgYW5kIG1pbm9yID4gMikKKyAgICBvciAobWFqb3IgPT0gMyBhbmQgbWlub3IgPT0gMiBhbmQgcmVsZWFzZSA+PSAzKSkKKworZnJvbSBiczQuZWxlbWVudCBpbXBvcnQgKAorICAgIENEYXRhLAorICAgIENvbW1lbnQsCisgICAgRGVjbGFyYXRpb24sCisgICAgRG9jdHlwZSwKKyAgICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sCisgICAgKQorZnJvbSBiczQuZGFtbWl0IGltcG9ydCBFbnRpdHlTdWJzdGl0dXRpb24sIFVuaWNvZGVEYW1taXQKKworZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgKAorICAgIEhUTUwsCisgICAgSFRNTFRyZWVCdWlsZGVyLAorICAgIFNUUklDVCwKKyAgICApCisKKworSFRNTFBBUlNFUiA9ICdodG1sLnBhcnNlcicKKworY2xhc3MgQmVhdXRpZnVsU291cEhUTUxQYXJzZXIoSFRNTFBhcnNlcik6CisgICAgZGVmIGhhbmRsZV9zdGFydHRhZyhzZWxmLCBuYW1lLCBhdHRycyk6CisgICAgICAgICMgWFhYIG5hbWVzcGFjZQorICAgICAgICBhdHRyX2RpY3QgPSB7fQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBhdHRyczoKKyAgICAgICAgICAgICMgQ2hhbmdlIE5vbmUgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgZW1wdHkgc3RyaW5nCisgICAgICAgICAgICAjIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBvdGhlciB0cmVlIGJ1aWxkZXJzLgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICcnCisgICAgICAgICAgICBhdHRyX2RpY3Rba2V5XSA9IHZhbHVlCisgICAgICAgICAgICBhdHRydmFsdWUgPSAnIiInCisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfc3RhcnR0YWcobmFtZSwgTm9uZSwgTm9uZSwgYXR0cl9kaWN0KQorCisgICAgZGVmIGhhbmRsZV9lbmR0YWcoc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZW5kdGFnKG5hbWUpCisKKyAgICBkZWYgaGFuZGxlX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZGF0YShkYXRhKQorCisgICAgZGVmIGhhbmRsZV9jaGFycmVmKHNlbGYsIG5hbWUpOgorICAgICAgICAjIFhYWCB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBIVE1MUGFyc2VyLiBSZW1vdmUgdGhpcyBvbmNlCisgICAgICAgICMgaXQncyBmaXhlZC4KKyAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCd4Jyk6CisgICAgICAgICAgICByZWFsX25hbWUgPSBpbnQobmFtZS5sc3RyaXAoJ3gnKSwgMTYpCisgICAgICAgIGVsaWYgbmFtZS5zdGFydHN3aXRoKCdYJyk6CisgICAgICAgICAgICByZWFsX25hbWUgPSBpbnQobmFtZS5sc3RyaXAoJ1gnKSwgMTYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZWFsX25hbWUgPSBpbnQobmFtZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gdW5pY2hyKHJlYWxfbmFtZSkKKyAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSwgZToKKyAgICAgICAgICAgIGRhdGEgPSB1IlxOe1JFUExBQ0VNRU5UIENIQVJBQ1RFUn0iCisKKyAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShkYXRhKQorCisgICAgZGVmIGhhbmRsZV9lbnRpdHlyZWYoc2VsZiwgbmFtZSk6CisgICAgICAgIGNoYXJhY3RlciA9IEVudGl0eVN1YnN0aXR1dGlvbi5IVE1MX0VOVElUWV9UT19DSEFSQUNURVIuZ2V0KG5hbWUpCisgICAgICAgIGlmIGNoYXJhY3RlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRhdGEgPSBjaGFyYWN0ZXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGEgPSAiJiVzOyIgJSBuYW1lCisgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEoZGF0YSkKKworICAgIGRlZiBoYW5kbGVfY29tbWVudChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5zb3VwLmVuZERhdGEoKQorICAgICAgICBzZWxmLnNvdXAuaGFuZGxlX2RhdGEoZGF0YSkKKyAgICAgICAgc2VsZi5zb3VwLmVuZERhdGEoQ29tbWVudCkKKworICAgIGRlZiBoYW5kbGVfZGVjbChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5zb3VwLmVuZERhdGEoKQorICAgICAgICBpZiBkYXRhLnN0YXJ0c3dpdGgoIkRPQ1RZUEUgIik6CisgICAgICAgICAgICBkYXRhID0gZGF0YVtsZW4oIkRPQ1RZUEUgIik6XQorICAgICAgICBlbGlmIGRhdGEgPT0gJ0RPQ1RZUEUnOgorICAgICAgICAgICAgIyBpLmUuICI8IURPQ1RZUEU+IgorICAgICAgICAgICAgZGF0YSA9ICcnCisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZGF0YShkYXRhKQorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YShEb2N0eXBlKQorCisgICAgZGVmIHVua25vd25fZGVjbChzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgZGF0YS51cHBlcigpLnN0YXJ0c3dpdGgoJ0NEQVRBWycpOgorICAgICAgICAgICAgY2xzID0gQ0RhdGEKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhW2xlbignQ0RBVEFbJyk6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2xzID0gRGVjbGFyYXRpb24KKyAgICAgICAgc2VsZi5zb3VwLmVuZERhdGEoKQorICAgICAgICBzZWxmLnNvdXAuaGFuZGxlX2RhdGEoZGF0YSkKKyAgICAgICAgc2VsZi5zb3VwLmVuZERhdGEoY2xzKQorCisgICAgZGVmIGhhbmRsZV9waShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5zb3VwLmVuZERhdGEoKQorICAgICAgICBpZiBkYXRhLmVuZHN3aXRoKCI/IikgYW5kIGRhdGEubG93ZXIoKS5zdGFydHN3aXRoKCJ4bWwiKToKKyAgICAgICAgICAgICMgIkFuIFhIVE1MIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gdXNpbmcgdGhlIHRyYWlsaW5nICc/JworICAgICAgICAgICAgIyB3aWxsIGNhdXNlIHRoZSAnPycgdG8gYmUgaW5jbHVkZWQgaW4gZGF0YS4iIC0gSFRNTFBhcnNlcgorICAgICAgICAgICAgIyBkb2NzLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBTdHJpcCB0aGUgcXVlc3Rpb24gbWFyayBzbyB3ZSBkb24ndCBlbmQgdXAgd2l0aCB0d28KKyAgICAgICAgICAgICMgcXVlc3Rpb24gbWFya3MuCisgICAgICAgICAgICBkYXRhID0gZGF0YVs6LTFdCisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZGF0YShkYXRhKQorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YShQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pCisKKworY2xhc3MgSFRNTFBhcnNlclRyZWVCdWlsZGVyKEhUTUxUcmVlQnVpbGRlcik6CisKKyAgICBpc194bWwgPSBGYWxzZQorICAgIGZlYXR1cmVzID0gW0hUTUwsIFNUUklDVCwgSFRNTFBBUlNFUl0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBDT05TVFJVQ1RPUl9UQUtFU19TVFJJQ1Q6CisgICAgICAgICAgICBrd2FyZ3NbJ3N0cmljdCddID0gRmFsc2UKKyAgICAgICAgc2VsZi5wYXJzZXJfYXJncyA9IChhcmdzLCBrd2FyZ3MpCisKKyAgICBkZWYgcHJlcGFyZV9tYXJrdXAoc2VsZiwgbWFya3VwLCB1c2VyX3NwZWNpZmllZF9lbmNvZGluZz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudF9kZWNsYXJlZF9lbmNvZGluZz1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIDpyZXR1cm46IEEgNC10dXBsZSAobWFya3VwLCBvcmlnaW5hbCBlbmNvZGluZywgZW5jb2RpbmcKKyAgICAgICAgZGVjbGFyZWQgd2l0aGluIG1hcmt1cCwgd2hldGhlciBhbnkgY2hhcmFjdGVycyBoYWQgdG8gYmUKKyAgICAgICAgcmVwbGFjZWQgd2l0aCBSRVBMQUNFTUVOVCBDSEFSQUNURVIpLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAsIHVuaWNvZGUpOgorICAgICAgICAgICAgeWllbGQgKG1hcmt1cCwgTm9uZSwgTm9uZSwgRmFsc2UpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnlfZW5jb2RpbmdzID0gW3VzZXJfc3BlY2lmaWVkX2VuY29kaW5nLCBkb2N1bWVudF9kZWNsYXJlZF9lbmNvZGluZ10KKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdChtYXJrdXAsIHRyeV9lbmNvZGluZ3MsIGlzX2h0bWw9VHJ1ZSkKKyAgICAgICAgeWllbGQgKGRhbW1pdC5tYXJrdXAsIGRhbW1pdC5vcmlnaW5hbF9lbmNvZGluZywKKyAgICAgICAgICAgICAgIGRhbW1pdC5kZWNsYXJlZF9odG1sX2VuY29kaW5nLAorICAgICAgICAgICAgICAgZGFtbWl0LmNvbnRhaW5zX3JlcGxhY2VtZW50X2NoYXJhY3RlcnMpCisKKyAgICBkZWYgZmVlZChzZWxmLCBtYXJrdXApOgorICAgICAgICBhcmdzLCBrd2FyZ3MgPSBzZWxmLnBhcnNlcl9hcmdzCisgICAgICAgIHBhcnNlciA9IEJlYXV0aWZ1bFNvdXBIVE1MUGFyc2VyKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgcGFyc2VyLnNvdXAgPSBzZWxmLnNvdXAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyc2VyLmZlZWQobWFya3VwKQorICAgICAgICBleGNlcHQgSFRNTFBhcnNlRXJyb3IsIGU6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKFJ1bnRpbWVXYXJuaW5nKAorICAgICAgICAgICAgICAgICJQeXRob24ncyBidWlsdC1pbiBIVE1MUGFyc2VyIGNhbm5vdCBwYXJzZSB0aGUgZ2l2ZW4gZG9jdW1lbnQuIFRoaXMgaXMgbm90IGEgYnVnIGluIEJlYXV0aWZ1bCBTb3VwLiBUaGUgYmVzdCBzb2x1dGlvbiBpcyB0byBpbnN0YWxsIGFuIGV4dGVybmFsIHBhcnNlciAobHhtbCBvciBodG1sNWxpYiksIGFuZCB1c2UgQmVhdXRpZnVsIFNvdXAgd2l0aCB0aGF0IHBhcnNlci4gU2VlIGh0dHA6Ly93d3cuY3J1bW15LmNvbS9zb2Z0d2FyZS9CZWF1dGlmdWxTb3VwL2JzNC9kb2MvI2luc3RhbGxpbmctYS1wYXJzZXIgZm9yIGhlbHAuIikpCisgICAgICAgICAgICByYWlzZSBlCisKKyMgUGF0Y2ggMy4yIHZlcnNpb25zIG9mIEhUTUxQYXJzZXIgZWFybGllciB0aGFuIDMuMi4zIHRvIHVzZSBzb21lCisjIDMuMi4zIGNvZGUuIFRoaXMgZW5zdXJlcyB0aGV5IGRvbid0IHRyZWF0IG1hcmt1cCBsaWtlIDxwPjwvcD4gYXMgYQorIyBzdHJpbmcuCisjCisjIFhYWCBUaGlzIGNvZGUgY2FuIGJlIHJlbW92ZWQgb25jZSBtb3N0IFB5dGhvbiAzIHVzZXJzIGFyZSBvbiAzLjIuMy4KK2lmIG1ham9yID09IDMgYW5kIG1pbm9yID09IDIgYW5kIG5vdCBDT05TVFJVQ1RPUl9UQUtFU19TVFJJQ1Q6CisgICAgaW1wb3J0IHJlCisgICAgYXR0cmZpbmRfdG9sZXJhbnQgPSByZS5jb21waWxlKAorICAgICAgICByJ1xzKigoPzw9W1wnIlxzXSlbXlxzLz5dW15ccy89Pl0qKShccyo9K1xzKicKKyAgICAgICAgcicoXCdbXlwnXSpcJ3wiW14iXSoifCg/IVtcJyJdKVtePlxzXSopKT8nKQorICAgIEhUTUxQYXJzZXJUcmVlQnVpbGRlci5hdHRyZmluZF90b2xlcmFudCA9IGF0dHJmaW5kX3RvbGVyYW50CisKKyAgICBsb2NhdGVzdGFydHRhZ2VuZCA9IHJlLmNvbXBpbGUociIiIgorICA8W2EtekEtWl1bLS5hLXpBLVowLTk6X10qICAgICAgICAgICMgdGFnIG5hbWUKKyAgKD86XHMrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdoaXRlc3BhY2UgYmVmb3JlIGF0dHJpYnV0ZSBuYW1lCisgICAgKD86W2EtekEtWl9dWy0uOmEtekEtWjAtOV9dKiAgICAgIyBhdHRyaWJ1dGUgbmFtZQorICAgICAgKD86XHMqPVxzKiAgICAgICAgICAgICAgICAgICAgICMgdmFsdWUgaW5kaWNhdG9yCisgICAgICAgICg/OidbXiddKicgICAgICAgICAgICAgICAgICAgIyBMSVRBLWVuY2xvc2VkIHZhbHVlCisgICAgICAgICAgfFwiW15cIl0qXCIgICAgICAgICAgICAgICAgIyBMSVQtZW5jbG9zZWQgdmFsdWUKKyAgICAgICAgICB8W14nXCI+XHNdKyAgICAgICAgICAgICAgICAjIGJhcmUgdmFsdWUKKyAgICAgICAgICkKKyAgICAgICApPworICAgICApCisgICApKgorICBccyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdHJhaWxpbmcgd2hpdGVzcGFjZQorIiIiLCByZS5WRVJCT1NFKQorICAgIEJlYXV0aWZ1bFNvdXBIVE1MUGFyc2VyLmxvY2F0ZXN0YXJ0dGFnZW5kID0gbG9jYXRlc3RhcnR0YWdlbmQKKworICAgIGZyb20gaHRtbC5wYXJzZXIgaW1wb3J0IHRhZ2ZpbmQsIGF0dHJmaW5kCisKKyAgICBkZWYgcGFyc2Vfc3RhcnR0YWcoc2VsZiwgaSk6CisgICAgICAgIHNlbGYuX19zdGFydHRhZ190ZXh0ID0gTm9uZQorICAgICAgICBlbmRwb3MgPSBzZWxmLmNoZWNrX2Zvcl93aG9sZV9zdGFydF90YWcoaSkKKyAgICAgICAgaWYgZW5kcG9zIDwgMDoKKyAgICAgICAgICAgIHJldHVybiBlbmRwb3MKKyAgICAgICAgcmF3ZGF0YSA9IHNlbGYucmF3ZGF0YQorICAgICAgICBzZWxmLl9fc3RhcnR0YWdfdGV4dCA9IHJhd2RhdGFbaTplbmRwb3NdCisKKyAgICAgICAgIyBOb3cgcGFyc2UgdGhlIGRhdGEgYmV0d2VlbiBpKzEgYW5kIGogaW50byBhIHRhZyBhbmQgYXR0cnMKKyAgICAgICAgYXR0cnMgPSBbXQorICAgICAgICBtYXRjaCA9IHRhZ2ZpbmQubWF0Y2gocmF3ZGF0YSwgaSsxKQorICAgICAgICBhc3NlcnQgbWF0Y2gsICd1bmV4cGVjdGVkIGNhbGwgdG8gcGFyc2Vfc3RhcnR0YWcoKScKKyAgICAgICAgayA9IG1hdGNoLmVuZCgpCisgICAgICAgIHNlbGYubGFzdHRhZyA9IHRhZyA9IHJhd2RhdGFbaSsxOmtdLmxvd2VyKCkKKyAgICAgICAgd2hpbGUgayA8IGVuZHBvczoKKyAgICAgICAgICAgIGlmIHNlbGYuc3RyaWN0OgorICAgICAgICAgICAgICAgIG0gPSBhdHRyZmluZC5tYXRjaChyYXdkYXRhLCBrKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtID0gYXR0cmZpbmRfdG9sZXJhbnQubWF0Y2gocmF3ZGF0YSwgaykKKyAgICAgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBhdHRybmFtZSwgcmVzdCwgYXR0cnZhbHVlID0gbS5ncm91cCgxLCAyLCAzKQorICAgICAgICAgICAgaWYgbm90IHJlc3Q6CisgICAgICAgICAgICAgICAgYXR0cnZhbHVlID0gTm9uZQorICAgICAgICAgICAgZWxpZiBhdHRydmFsdWVbOjFdID09ICdcJycgPT0gYXR0cnZhbHVlWy0xOl0gb3IgXAorICAgICAgICAgICAgICAgICBhdHRydmFsdWVbOjFdID09ICciJyA9PSBhdHRydmFsdWVbLTE6XToKKyAgICAgICAgICAgICAgICBhdHRydmFsdWUgPSBhdHRydmFsdWVbMTotMV0KKyAgICAgICAgICAgIGlmIGF0dHJ2YWx1ZToKKyAgICAgICAgICAgICAgICBhdHRydmFsdWUgPSBzZWxmLnVuZXNjYXBlKGF0dHJ2YWx1ZSkKKyAgICAgICAgICAgIGF0dHJzLmFwcGVuZCgoYXR0cm5hbWUubG93ZXIoKSwgYXR0cnZhbHVlKSkKKyAgICAgICAgICAgIGsgPSBtLmVuZCgpCisKKyAgICAgICAgZW5kID0gcmF3ZGF0YVtrOmVuZHBvc10uc3RyaXAoKQorICAgICAgICBpZiBlbmQgbm90IGluICgiPiIsICIvPiIpOgorICAgICAgICAgICAgbGluZW5vLCBvZmZzZXQgPSBzZWxmLmdldHBvcygpCisgICAgICAgICAgICBpZiAiXG4iIGluIHNlbGYuX19zdGFydHRhZ190ZXh0OgorICAgICAgICAgICAgICAgIGxpbmVubyA9IGxpbmVubyArIHNlbGYuX19zdGFydHRhZ190ZXh0LmNvdW50KCJcbiIpCisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbGVuKHNlbGYuX19zdGFydHRhZ190ZXh0KSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgLSBzZWxmLl9fc3RhcnR0YWdfdGV4dC5yZmluZCgiXG4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgKyBsZW4oc2VsZi5fX3N0YXJ0dGFnX3RleHQpCisgICAgICAgICAgICBpZiBzZWxmLnN0cmljdDoKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yKCJqdW5rIGNoYXJhY3RlcnMgaW4gc3RhcnQgdGFnOiAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHJhd2RhdGFbazplbmRwb3NdWzoyMF0sKSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOmVuZHBvc10pCisgICAgICAgICAgICByZXR1cm4gZW5kcG9zCisgICAgICAgIGlmIGVuZC5lbmRzd2l0aCgnLz4nKToKKyAgICAgICAgICAgICMgWEhUTUwtc3R5bGUgZW1wdHkgdGFnOiA8c3BhbiBhdHRyPSJ2YWx1ZSIgLz4KKyAgICAgICAgICAgIHNlbGYuaGFuZGxlX3N0YXJ0ZW5kdGFnKHRhZywgYXR0cnMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmhhbmRsZV9zdGFydHRhZyh0YWcsIGF0dHJzKQorICAgICAgICAgICAgaWYgdGFnIGluIHNlbGYuQ0RBVEFfQ09OVEVOVF9FTEVNRU5UUzoKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9jZGF0YV9tb2RlKHRhZykKKyAgICAgICAgcmV0dXJuIGVuZHBvcworCisgICAgZGVmIHNldF9jZGF0YV9tb2RlKHNlbGYsIGVsZW0pOgorICAgICAgICBzZWxmLmNkYXRhX2VsZW0gPSBlbGVtLmxvd2VyKCkKKyAgICAgICAgc2VsZi5pbnRlcmVzdGluZyA9IHJlLmNvbXBpbGUocic8L1xzKiVzXHMqPicgJSBzZWxmLmNkYXRhX2VsZW0sIHJlLkkpCisKKyAgICBCZWF1dGlmdWxTb3VwSFRNTFBhcnNlci5wYXJzZV9zdGFydHRhZyA9IHBhcnNlX3N0YXJ0dGFnCisgICAgQmVhdXRpZnVsU291cEhUTUxQYXJzZXIuc2V0X2NkYXRhX21vZGUgPSBzZXRfY2RhdGFfbW9kZQorCisgICAgQ09OU1RSVUNUT1JfVEFLRVNfU1RSSUNUID0gVHJ1ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9fbHhtbC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX2x4bWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE1ZDQ5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX2x4bWwucHkKQEAgLTAsMCArMSwyMzMgQEAKK19fYWxsX18gPSBbCisgICAgJ0xYTUxUcmVlQnVpbGRlckZvclhNTCcsCisgICAgJ0xYTUxUcmVlQnVpbGRlcicsCisgICAgXQorCitmcm9tIGlvIGltcG9ydCBCeXRlc0lPCitmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworaW1wb3J0IGNvbGxlY3Rpb25zCitmcm9tIGx4bWwgaW1wb3J0IGV0cmVlCitmcm9tIGJzNC5lbGVtZW50IGltcG9ydCBDb21tZW50LCBEb2N0eXBlLCBOYW1lc3BhY2VkQXR0cmlidXRlCitmcm9tIGJzNC5idWlsZGVyIGltcG9ydCAoCisgICAgRkFTVCwKKyAgICBIVE1MLAorICAgIEhUTUxUcmVlQnVpbGRlciwKKyAgICBQRVJNSVNTSVZFLAorICAgIFBhcnNlclJlamVjdGVkTWFya3VwLAorICAgIFRyZWVCdWlsZGVyLAorICAgIFhNTCkKK2Zyb20gYnM0LmRhbW1pdCBpbXBvcnQgRW5jb2RpbmdEZXRlY3RvcgorCitMWE1MID0gJ2x4bWwnCisKK2NsYXNzIExYTUxUcmVlQnVpbGRlckZvclhNTChUcmVlQnVpbGRlcik6CisgICAgREVGQVVMVF9QQVJTRVJfQ0xBU1MgPSBldHJlZS5YTUxQYXJzZXIKKworICAgIGlzX3htbCA9IFRydWUKKworICAgICMgV2VsbCwgaXQncyBwZXJtaXNzaXZlIGJ5IFhNTCBwYXJzZXIgc3RhbmRhcmRzLgorICAgIGZlYXR1cmVzID0gW0xYTUwsIFhNTCwgRkFTVCwgUEVSTUlTU0lWRV0KKworICAgIENIVU5LX1NJWkUgPSA1MTIKKworICAgICMgVGhpcyBuYW1lc3BhY2UgbWFwcGluZyBpcyBzcGVjaWZpZWQgaW4gdGhlIFhNTCBOYW1lc3BhY2UKKyAgICAjIHN0YW5kYXJkLgorICAgIERFRkFVTFRfTlNNQVBTID0geydodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnIDogInhtbCJ9CisKKyAgICBkZWYgZGVmYXVsdF9wYXJzZXIoc2VsZiwgZW5jb2RpbmcpOgorICAgICAgICAjIFRoaXMgY2FuIGVpdGhlciByZXR1cm4gYSBwYXJzZXIgb2JqZWN0IG9yIGEgY2xhc3MsIHdoaWNoCisgICAgICAgICMgd2lsbCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBkZWZhdWx0IGFyZ3VtZW50cy4KKyAgICAgICAgaWYgc2VsZi5fZGVmYXVsdF9wYXJzZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGVmYXVsdF9wYXJzZXIKKyAgICAgICAgcmV0dXJuIGV0cmVlLlhNTFBhcnNlcigKKyAgICAgICAgICAgIHRhcmdldD1zZWxmLCBzdHJpcF9jZGF0YT1GYWxzZSwgcmVjb3Zlcj1UcnVlLCBlbmNvZGluZz1lbmNvZGluZykKKworICAgIGRlZiBwYXJzZXJfZm9yKHNlbGYsIGVuY29kaW5nKToKKyAgICAgICAgIyBVc2UgdGhlIGRlZmF1bHQgcGFyc2VyLgorICAgICAgICBwYXJzZXIgPSBzZWxmLmRlZmF1bHRfcGFyc2VyKGVuY29kaW5nKQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyc2VyLCBjb2xsZWN0aW9ucy5DYWxsYWJsZSk6CisgICAgICAgICAgICAjIEluc3RhbnRpYXRlIHRoZSBwYXJzZXIgd2l0aCBkZWZhdWx0IGFyZ3VtZW50cworICAgICAgICAgICAgcGFyc2VyID0gcGFyc2VyKHRhcmdldD1zZWxmLCBzdHJpcF9jZGF0YT1GYWxzZSwgZW5jb2Rpbmc9ZW5jb2RpbmcpCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJzZXI9Tm9uZSwgZW1wdHlfZWxlbWVudF90YWdzPU5vbmUpOgorICAgICAgICAjIFRPRE86IElzc3VlIGEgd2FybmluZyBpZiBwYXJzZXIgaXMgcHJlc2VudCBidXQgbm90IGEKKyAgICAgICAgIyBjYWxsYWJsZSwgc2luY2UgdGhhdCBtZWFucyB0aGVyZSdzIG5vIHdheSB0byBjcmVhdGUgbmV3CisgICAgICAgICMgcGFyc2VycyBmb3IgZGlmZmVyZW50IGVuY29kaW5ncy4KKyAgICAgICAgc2VsZi5fZGVmYXVsdF9wYXJzZXIgPSBwYXJzZXIKKyAgICAgICAgaWYgZW1wdHlfZWxlbWVudF90YWdzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5lbXB0eV9lbGVtZW50X3RhZ3MgPSBzZXQoZW1wdHlfZWxlbWVudF90YWdzKQorICAgICAgICBzZWxmLnNvdXAgPSBOb25lCisgICAgICAgIHNlbGYubnNtYXBzID0gW3NlbGYuREVGQVVMVF9OU01BUFNdCisKKyAgICBkZWYgX2dldE5zVGFnKHNlbGYsIHRhZyk6CisgICAgICAgICMgU3BsaXQgdGhlIG5hbWVzcGFjZSBVUkwgb3V0IG9mIGEgZnVsbHktcXVhbGlmaWVkIGx4bWwgdGFnCisgICAgICAgICMgbmFtZS4gQ29waWVkIGZyb20gbHhtbCdzIHNyYy9seG1sL3NheC5weS4KKyAgICAgICAgaWYgdGFnWzBdID09ICd7JzoKKyAgICAgICAgICAgIHJldHVybiB0dXBsZSh0YWdbMTpdLnNwbGl0KCd9JywgMSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gKE5vbmUsIHRhZykKKworICAgIGRlZiBwcmVwYXJlX21hcmt1cChzZWxmLCBtYXJrdXAsIHVzZXJfc3BlY2lmaWVkX2VuY29kaW5nPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50X2RlY2xhcmVkX2VuY29kaW5nPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgOnlpZWxkOiBBIHNlcmllcyBvZiA0LXR1cGxlcy4KKyAgICAgICAgIChtYXJrdXAsIGVuY29kaW5nLCBkZWNsYXJlZCBlbmNvZGluZywKKyAgICAgICAgICBoYXMgdW5kZXJnb25lIGNoYXJhY3RlciByZXBsYWNlbWVudCkKKworICAgICAgICBFYWNoIDQtdHVwbGUgcmVwcmVzZW50cyBhIHN0cmF0ZWd5IGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCB1bmljb2RlKToKKyAgICAgICAgICAgICMgV2Ugd2VyZSBnaXZlbiBVbmljb2RlLiBNYXliZSBseG1sIGNhbiBwYXJzZSBVbmljb2RlIG9uCisgICAgICAgICAgICAjIHRoaXMgc3lzdGVtPworICAgICAgICAgICAgeWllbGQgbWFya3VwLCBOb25lLCBkb2N1bWVudF9kZWNsYXJlZF9lbmNvZGluZywgRmFsc2UKKworICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSk6CisgICAgICAgICAgICAjIE5vLCBhcHBhcmVudGx5IG5vdC4gQ29udmVydCB0aGUgVW5pY29kZSB0byBVVEYtOCBhbmQKKyAgICAgICAgICAgICMgdGVsbCBseG1sIHRvIHBhcnNlIGl0IGFzIFVURi04LgorICAgICAgICAgICAgeWllbGQgKG1hcmt1cC5lbmNvZGUoInV0ZjgiKSwgInV0ZjgiLAorICAgICAgICAgICAgICAgICAgIGRvY3VtZW50X2RlY2xhcmVkX2VuY29kaW5nLCBGYWxzZSkKKworICAgICAgICAjIEluc3RlYWQgb2YgdXNpbmcgVW5pY29kZURhbW1pdCB0byBjb252ZXJ0IHRoZSBieXRlc3RyaW5nIHRvCisgICAgICAgICMgVW5pY29kZSB1c2luZyBkaWZmZXJlbnQgZW5jb2RpbmdzLCB1c2UgRW5jb2RpbmdEZXRlY3RvciB0bworICAgICAgICAjIGl0ZXJhdGUgb3ZlciB0aGUgZW5jb2RpbmdzLCBhbmQgdGVsbCBseG1sIHRvIHRyeSB0byBwYXJzZQorICAgICAgICAjIHRoZSBkb2N1bWVudCBhcyBlYWNoIG9uZSBpbiB0dXJuLgorICAgICAgICBpc19odG1sID0gbm90IHNlbGYuaXNfeG1sCisgICAgICAgIHRyeV9lbmNvZGluZ3MgPSBbdXNlcl9zcGVjaWZpZWRfZW5jb2RpbmcsIGRvY3VtZW50X2RlY2xhcmVkX2VuY29kaW5nXQorICAgICAgICBkZXRlY3RvciA9IEVuY29kaW5nRGV0ZWN0b3IobWFya3VwLCB0cnlfZW5jb2RpbmdzLCBpc19odG1sKQorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gZGV0ZWN0b3IuZW5jb2RpbmdzOgorICAgICAgICAgICAgeWllbGQgKGRldGVjdG9yLm1hcmt1cCwgZW5jb2RpbmcsIGRvY3VtZW50X2RlY2xhcmVkX2VuY29kaW5nLCBGYWxzZSkKKworICAgIGRlZiBmZWVkKHNlbGYsIG1hcmt1cCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCBieXRlcyk6CisgICAgICAgICAgICBtYXJrdXAgPSBCeXRlc0lPKG1hcmt1cCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSk6CisgICAgICAgICAgICBtYXJrdXAgPSBTdHJpbmdJTyhtYXJrdXApCisKKyAgICAgICAgIyBDYWxsIGZlZWQoKSBhdCBsZWFzdCBvbmNlLCBldmVuIGlmIHRoZSBtYXJrdXAgaXMgZW1wdHksCisgICAgICAgICMgb3IgdGhlIHBhcnNlciB3b24ndCBiZSBpbml0aWFsaXplZC4KKyAgICAgICAgZGF0YSA9IG1hcmt1cC5yZWFkKHNlbGYuQ0hVTktfU0laRSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wYXJzZXIgPSBzZWxmLnBhcnNlcl9mb3Ioc2VsZi5zb3VwLm9yaWdpbmFsX2VuY29kaW5nKQorICAgICAgICAgICAgc2VsZi5wYXJzZXIuZmVlZChkYXRhKQorICAgICAgICAgICAgd2hpbGUgbGVuKGRhdGEpICE9IDA6CisgICAgICAgICAgICAgICAgIyBOb3cgY2FsbCBmZWVkKCkgb24gdGhlIHJlc3Qgb2YgdGhlIGRhdGEsIGNodW5rIGJ5IGNodW5rLgorICAgICAgICAgICAgICAgIGRhdGEgPSBtYXJrdXAucmVhZChzZWxmLkNIVU5LX1NJWkUpCisgICAgICAgICAgICAgICAgaWYgbGVuKGRhdGEpICE9IDA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLmZlZWQoZGF0YSkKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IChVbmljb2RlRGVjb2RlRXJyb3IsIExvb2t1cEVycm9yLCBldHJlZS5QYXJzZXJFcnJvciksIGU6CisgICAgICAgICAgICByYWlzZSBQYXJzZXJSZWplY3RlZE1hcmt1cChzdHIoZSkpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYubnNtYXBzID0gW3NlbGYuREVGQVVMVF9OU01BUFNdCisKKyAgICBkZWYgc3RhcnQoc2VsZiwgbmFtZSwgYXR0cnMsIG5zbWFwPXt9KToKKyAgICAgICAgIyBNYWtlIHN1cmUgYXR0cnMgaXMgYSBtdXRhYmxlIGRpY3QtLWx4bWwgbWF5IHNlbmQgYW4gaW1tdXRhYmxlIGRpY3Rwcm94eS4KKyAgICAgICAgYXR0cnMgPSBkaWN0KGF0dHJzKQorICAgICAgICBuc3ByZWZpeCA9IE5vbmUKKyAgICAgICAgIyBJbnZlcnQgZWFjaCBuYW1lc3BhY2UgbWFwIGFzIGl0IGNvbWVzIGluLgorICAgICAgICBpZiBsZW4oc2VsZi5uc21hcHMpID4gMToKKyAgICAgICAgICAgICMgVGhlcmUgYXJlIG5vIG5ldyBuYW1lc3BhY2VzIGZvciB0aGlzIHRhZywgYnV0CisgICAgICAgICAgICAjIG5vbi1kZWZhdWx0IG5hbWVzcGFjZXMgYXJlIGluIHBsYXksIHNvIHdlIG5lZWQgYQorICAgICAgICAgICAgIyBzZXBhcmF0ZSB0YWcgc3RhY2sgdG8ga25vdyB3aGVuIHRoZXkgZW5kLgorICAgICAgICAgICAgc2VsZi5uc21hcHMuYXBwZW5kKE5vbmUpCisgICAgICAgIGVsaWYgbGVuKG5zbWFwKSA+IDA6CisgICAgICAgICAgICAjIEEgbmV3IG5hbWVzcGFjZSBtYXBwaW5nIGhhcyBjb21lIGludG8gcGxheS4KKyAgICAgICAgICAgIGludmVydGVkX25zbWFwID0gZGljdCgodmFsdWUsIGtleSkgZm9yIGtleSwgdmFsdWUgaW4gbnNtYXAuaXRlbXMoKSkKKyAgICAgICAgICAgIHNlbGYubnNtYXBzLmFwcGVuZChpbnZlcnRlZF9uc21hcCkKKyAgICAgICAgICAgICMgQWxzbyB0cmVhdCB0aGUgbmFtZXNwYWNlIG1hcHBpbmcgYXMgYSBzZXQgb2YgYXR0cmlidXRlcyBvbiB0aGUKKyAgICAgICAgICAgICMgdGFnLCBzbyB3ZSBjYW4gcmVjcmVhdGUgaXQgbGF0ZXIuCisgICAgICAgICAgICBhdHRycyA9IGF0dHJzLmNvcHkoKQorICAgICAgICAgICAgZm9yIHByZWZpeCwgbmFtZXNwYWNlIGluIG5zbWFwLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgYXR0cmlidXRlID0gTmFtZXNwYWNlZEF0dHJpYnV0ZSgKKyAgICAgICAgICAgICAgICAgICAgInhtbG5zIiwgcHJlZml4LCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iKQorICAgICAgICAgICAgICAgIGF0dHJzW2F0dHJpYnV0ZV0gPSBuYW1lc3BhY2UKKworICAgICAgICAjIE5hbWVzcGFjZXMgYXJlIGluIHBsYXkuIEZpbmQgYW55IGF0dHJpYnV0ZXMgdGhhdCBjYW1lIGluCisgICAgICAgICMgZnJvbSBseG1sIHdpdGggbmFtZXNwYWNlcyBhdHRhY2hlZCB0byB0aGVpciBuYW1lcywgYW5kCisgICAgICAgICMgdHVybiB0aGVuIGludG8gTmFtZXNwYWNlZEF0dHJpYnV0ZSBvYmplY3RzLgorICAgICAgICBuZXdfYXR0cnMgPSB7fQorICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gYXR0cnMuaXRlbXMoKToKKyAgICAgICAgICAgIG5hbWVzcGFjZSwgYXR0ciA9IHNlbGYuX2dldE5zVGFnKGF0dHIpCisgICAgICAgICAgICBpZiBuYW1lc3BhY2UgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBuZXdfYXR0cnNbYXR0cl0gPSB2YWx1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuc3ByZWZpeCA9IHNlbGYuX3ByZWZpeF9mb3JfbmFtZXNwYWNlKG5hbWVzcGFjZSkKKyAgICAgICAgICAgICAgICBhdHRyID0gTmFtZXNwYWNlZEF0dHJpYnV0ZShuc3ByZWZpeCwgYXR0ciwgbmFtZXNwYWNlKQorICAgICAgICAgICAgICAgIG5ld19hdHRyc1thdHRyXSA9IHZhbHVlCisgICAgICAgIGF0dHJzID0gbmV3X2F0dHJzCisKKyAgICAgICAgbmFtZXNwYWNlLCBuYW1lID0gc2VsZi5fZ2V0TnNUYWcobmFtZSkKKyAgICAgICAgbnNwcmVmaXggPSBzZWxmLl9wcmVmaXhfZm9yX25hbWVzcGFjZShuYW1lc3BhY2UpCisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfc3RhcnR0YWcobmFtZSwgbmFtZXNwYWNlLCBuc3ByZWZpeCwgYXR0cnMpCisKKyAgICBkZWYgX3ByZWZpeF9mb3JfbmFtZXNwYWNlKHNlbGYsIG5hbWVzcGFjZSk6CisgICAgICAgICIiIkZpbmQgdGhlIGN1cnJlbnRseSBhY3RpdmUgcHJlZml4IGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlLiIiIgorICAgICAgICBpZiBuYW1lc3BhY2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGZvciBpbnZlcnRlZF9uc21hcCBpbiByZXZlcnNlZChzZWxmLm5zbWFwcyk6CisgICAgICAgICAgICBpZiBpbnZlcnRlZF9uc21hcCBpcyBub3QgTm9uZSBhbmQgbmFtZXNwYWNlIGluIGludmVydGVkX25zbWFwOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnZlcnRlZF9uc21hcFtuYW1lc3BhY2VdCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZW5kKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YSgpCisgICAgICAgIGNvbXBsZXRlZF90YWcgPSBzZWxmLnNvdXAudGFnU3RhY2tbLTFdCisgICAgICAgIG5hbWVzcGFjZSwgbmFtZSA9IHNlbGYuX2dldE5zVGFnKG5hbWUpCisgICAgICAgIG5zcHJlZml4ID0gTm9uZQorICAgICAgICBpZiBuYW1lc3BhY2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgaW52ZXJ0ZWRfbnNtYXAgaW4gcmV2ZXJzZWQoc2VsZi5uc21hcHMpOgorICAgICAgICAgICAgICAgIGlmIGludmVydGVkX25zbWFwIGlzIG5vdCBOb25lIGFuZCBuYW1lc3BhY2UgaW4gaW52ZXJ0ZWRfbnNtYXA6CisgICAgICAgICAgICAgICAgICAgIG5zcHJlZml4ID0gaW52ZXJ0ZWRfbnNtYXBbbmFtZXNwYWNlXQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLnNvdXAuaGFuZGxlX2VuZHRhZyhuYW1lLCBuc3ByZWZpeCkKKyAgICAgICAgaWYgbGVuKHNlbGYubnNtYXBzKSA+IDE6CisgICAgICAgICAgICAjIFRoaXMgdGFnLCBvciBvbmUgb2YgaXRzIHBhcmVudHMsIGludHJvZHVjZWQgYSBuYW1lc3BhY2UKKyAgICAgICAgICAgICMgbWFwcGluZywgc28gcG9wIGl0IG9mZiB0aGUgc3RhY2suCisgICAgICAgICAgICBzZWxmLm5zbWFwcy5wb3AoKQorCisgICAgZGVmIHBpKHNlbGYsIHRhcmdldCwgZGF0YSk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBkYXRhKHNlbGYsIGNvbnRlbnQpOgorICAgICAgICBzZWxmLnNvdXAuaGFuZGxlX2RhdGEoY29udGVudCkKKworICAgIGRlZiBkb2N0eXBlKHNlbGYsIG5hbWUsIHB1YmlkLCBzeXN0ZW0pOgorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YSgpCisgICAgICAgIGRvY3R5cGUgPSBEb2N0eXBlLmZvcl9uYW1lX2FuZF9pZHMobmFtZSwgcHViaWQsIHN5c3RlbSkKKyAgICAgICAgc2VsZi5zb3VwLm9iamVjdF93YXNfcGFyc2VkKGRvY3R5cGUpCisKKyAgICBkZWYgY29tbWVudChzZWxmLCBjb250ZW50KToKKyAgICAgICAgIkhhbmRsZSBjb21tZW50cyBhcyBDb21tZW50IG9iamVjdHMuIgorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YSgpCisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZGF0YShjb250ZW50KQorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YShDb21tZW50KQorCisgICAgZGVmIHRlc3RfZnJhZ21lbnRfdG9fZG9jdW1lbnQoc2VsZiwgZnJhZ21lbnQpOgorICAgICAgICAiIiJTZWUgYFRyZWVCdWlsZGVyYC4iIiIKKyAgICAgICAgcmV0dXJuIHUnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz5cbiVzJyAlIGZyYWdtZW50CisKKworY2xhc3MgTFhNTFRyZWVCdWlsZGVyKEhUTUxUcmVlQnVpbGRlciwgTFhNTFRyZWVCdWlsZGVyRm9yWE1MKToKKworICAgIGZlYXR1cmVzID0gW0xYTUwsIEhUTUwsIEZBU1QsIFBFUk1JU1NJVkVdCisgICAgaXNfeG1sID0gRmFsc2UKKworICAgIGRlZiBkZWZhdWx0X3BhcnNlcihzZWxmLCBlbmNvZGluZyk6CisgICAgICAgIHJldHVybiBldHJlZS5IVE1MUGFyc2VyCisKKyAgICBkZWYgZmVlZChzZWxmLCBtYXJrdXApOgorICAgICAgICBlbmNvZGluZyA9IHNlbGYuc291cC5vcmlnaW5hbF9lbmNvZGluZworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnBhcnNlciA9IHNlbGYucGFyc2VyX2ZvcihlbmNvZGluZykKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLmZlZWQobWFya3VwKQorICAgICAgICAgICAgc2VsZi5wYXJzZXIuY2xvc2UoKQorICAgICAgICBleGNlcHQgKFVuaWNvZGVEZWNvZGVFcnJvciwgTG9va3VwRXJyb3IsIGV0cmVlLlBhcnNlckVycm9yKSwgZToKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlclJlamVjdGVkTWFya3VwKHN0cihlKSkKKworCisgICAgZGVmIHRlc3RfZnJhZ21lbnRfdG9fZG9jdW1lbnQoc2VsZiwgZnJhZ21lbnQpOgorICAgICAgICAiIiJTZWUgYFRyZWVCdWlsZGVyYC4iIiIKKyAgICAgICAgcmV0dXJuIHUnPGh0bWw+PGJvZHk+JXM8L2JvZHk+PC9odG1sPicgJSBmcmFnbWVudApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvZGFtbWl0LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvZGFtbWl0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NjQwYjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9kYW1taXQucHkKQEAgLTAsMCArMSw4MjkgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisiIiJCZWF1dGlmdWwgU291cCBib251cyBsaWJyYXJ5OiBVbmljb2RlLCBEYW1taXQKKworVGhpcyBsaWJyYXJ5IGNvbnZlcnRzIGEgYnl0ZXN0cmVhbSB0byBVbmljb2RlIHRocm91Z2ggYW55IG1lYW5zCituZWNlc3NhcnkuIEl0IGlzIGhlYXZpbHkgYmFzZWQgb24gY29kZSBmcm9tIE1hcmsgUGlsZ3JpbSdzIFVuaXZlcnNhbAorRmVlZCBQYXJzZXIuIEl0IHdvcmtzIGJlc3Qgb24gWE1MIGFuZCBYTUwsIGJ1dCBpdCBkb2VzIG5vdCByZXdyaXRlIHRoZQorWE1MIG9yIEhUTUwgdG8gcmVmbGVjdCBhIG5ldyBlbmNvZGluZzsgdGhhdCdzIHRoZSB0cmVlIGJ1aWxkZXIncyBqb2IuCisiIiIKKworaW1wb3J0IGNvZGVjcworZnJvbSBodG1sZW50aXR5ZGVmcyBpbXBvcnQgY29kZXBvaW50Mm5hbWUKK2ltcG9ydCByZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcKKworIyBJbXBvcnQgYSBsaWJyYXJ5IHRvIGF1dG9kZXRlY3QgY2hhcmFjdGVyIGVuY29kaW5ncy4KK2NoYXJkZXRfdHlwZSA9IE5vbmUKK3RyeToKKyAgICAjIEZpcnN0IHRyeSB0aGUgZmFzdCBDIGltcGxlbWVudGF0aW9uLgorICAgICMgIFB5UEkgcGFja2FnZTogY2NoYXJkZXQKKyAgICBpbXBvcnQgY2NoYXJkZXQKKyAgICBkZWYgY2hhcmRldF9kYW1taXQocyk6CisgICAgICAgIHJldHVybiBjY2hhcmRldC5kZXRlY3QocylbJ2VuY29kaW5nJ10KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0cnk6CisgICAgICAgICMgRmFsbCBiYWNrIHRvIHRoZSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbgorICAgICAgICAjICBEZWJpYW4gcGFja2FnZTogcHl0aG9uLWNoYXJkZXQKKyAgICAgICAgIyAgUHlQSSBwYWNrYWdlOiBjaGFyZGV0CisgICAgICAgIGltcG9ydCBjaGFyZGV0CisgICAgICAgIGRlZiBjaGFyZGV0X2RhbW1pdChzKToKKyAgICAgICAgICAgIHJldHVybiBjaGFyZGV0LmRldGVjdChzKVsnZW5jb2RpbmcnXQorICAgICAgICAjaW1wb3J0IGNoYXJkZXQuY29uc3RhbnRzCisgICAgICAgICNjaGFyZGV0LmNvbnN0YW50cy5fZGVidWcgPSAxCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAjIE5vIGNoYXJkZXQgYXZhaWxhYmxlLgorICAgICAgICBkZWYgY2hhcmRldF9kYW1taXQocyk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisjIEF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9jamtweXRob24uaTE4bi5vcmcvLgordHJ5OgorICAgIGltcG9ydCBpY29udl9jb2RlYworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKKworeG1sX2VuY29kaW5nX3JlID0gcmUuY29tcGlsZSgKKyAgICAnXjxcPy4qZW5jb2Rpbmc9W1wnIl0oLio/KVtcJyJdLipcPz4nLmVuY29kZSgpLCByZS5JKQoraHRtbF9tZXRhX3JlID0gcmUuY29tcGlsZSgKKyAgICAnPFxzKm1ldGFbXj5dK2NoYXJzZXRccyo9XHMqWyJcJ10/KFtePl0qPylbIC87XCciPl0nLmVuY29kZSgpLCByZS5JKQorCitjbGFzcyBFbnRpdHlTdWJzdGl0dXRpb24ob2JqZWN0KToKKworICAgICIiIlN1YnN0aXR1dGUgWE1MIG9yIEhUTUwgZW50aXRpZXMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcnMuIiIiCisKKyAgICBkZWYgX3BvcHVsYXRlX2NsYXNzX3ZhcmlhYmxlcygpOgorICAgICAgICBsb29rdXAgPSB7fQorICAgICAgICByZXZlcnNlX2xvb2t1cCA9IHt9CisgICAgICAgIGNoYXJhY3RlcnNfZm9yX3JlID0gW10KKyAgICAgICAgZm9yIGNvZGVwb2ludCwgbmFtZSBpbiBsaXN0KGNvZGVwb2ludDJuYW1lLml0ZW1zKCkpOgorICAgICAgICAgICAgY2hhcmFjdGVyID0gdW5pY2hyKGNvZGVwb2ludCkKKyAgICAgICAgICAgIGlmIGNvZGVwb2ludCAhPSAzNDoKKyAgICAgICAgICAgICAgICAjIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gdHVybmluZyB0aGUgcXVvdGF0aW9uIG1hcmsgaW50bworICAgICAgICAgICAgICAgICMgJnF1b3Q7LCB1bmxlc3MgaXQgaGFwcGVucyB3aXRoaW4gYW4gYXR0cmlidXRlIHZhbHVlLCB3aGljaAorICAgICAgICAgICAgICAgICMgaXMgaGFuZGxlZCBlbHNld2hlcmUuCisgICAgICAgICAgICAgICAgY2hhcmFjdGVyc19mb3JfcmUuYXBwZW5kKGNoYXJhY3RlcikKKyAgICAgICAgICAgICAgICBsb29rdXBbY2hhcmFjdGVyXSA9IG5hbWUKKyAgICAgICAgICAgICMgQnV0IHdlIGRvIHdhbnQgdG8gdHVybiAmcXVvdDsgaW50byB0aGUgcXVvdGF0aW9uIG1hcmsuCisgICAgICAgICAgICByZXZlcnNlX2xvb2t1cFtuYW1lXSA9IGNoYXJhY3RlcgorICAgICAgICByZV9kZWZpbml0aW9uID0gIlslc10iICUgIiIuam9pbihjaGFyYWN0ZXJzX2Zvcl9yZSkKKyAgICAgICAgcmV0dXJuIGxvb2t1cCwgcmV2ZXJzZV9sb29rdXAsIHJlLmNvbXBpbGUocmVfZGVmaW5pdGlvbikKKyAgICAoQ0hBUkFDVEVSX1RPX0hUTUxfRU5USVRZLCBIVE1MX0VOVElUWV9UT19DSEFSQUNURVIsCisgICAgIENIQVJBQ1RFUl9UT19IVE1MX0VOVElUWV9SRSkgPSBfcG9wdWxhdGVfY2xhc3NfdmFyaWFibGVzKCkKKworICAgIENIQVJBQ1RFUl9UT19YTUxfRU5USVRZID0geworICAgICAgICAiJyI6ICJhcG9zIiwKKyAgICAgICAgJyInOiAicXVvdCIsCisgICAgICAgICImIjogImFtcCIsCisgICAgICAgICI8IjogImx0IiwKKyAgICAgICAgIj4iOiAiZ3QiLAorICAgICAgICB9CisKKyAgICBCQVJFX0FNUEVSU0FORF9PUl9CUkFDS0VUID0gcmUuY29tcGlsZSgiKFs8Pl18IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICImKD8hI1xkKzt8I3hbMC05YS1mQS1GXSs7fFx3KzspIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpIikKKworICAgIEFNUEVSU0FORF9PUl9CUkFDS0VUID0gcmUuY29tcGlsZSgiKFs8PiZdKSIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3N1YnN0aXR1dGVfaHRtbF9lbnRpdHkoY2xzLCBtYXRjaG9iaik6CisgICAgICAgIGVudGl0eSA9IGNscy5DSEFSQUNURVJfVE9fSFRNTF9FTlRJVFkuZ2V0KG1hdGNob2JqLmdyb3VwKDApKQorICAgICAgICByZXR1cm4gIiYlczsiICUgZW50aXR5CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3N1YnN0aXR1dGVfeG1sX2VudGl0eShjbHMsIG1hdGNob2JqKToKKyAgICAgICAgIiIiVXNlZCB3aXRoIGEgcmVndWxhciBleHByZXNzaW9uIHRvIHN1YnN0aXR1dGUgdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIFhNTCBlbnRpdHkgZm9yIGFuIFhNTCBzcGVjaWFsIGNoYXJhY3Rlci4iIiIKKyAgICAgICAgZW50aXR5ID0gY2xzLkNIQVJBQ1RFUl9UT19YTUxfRU5USVRZW21hdGNob2JqLmdyb3VwKDApXQorICAgICAgICByZXR1cm4gIiYlczsiICUgZW50aXR5CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcXVvdGVkX2F0dHJpYnV0ZV92YWx1ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIk1ha2UgYSB2YWx1ZSBpbnRvIGEgcXVvdGVkIFhNTCBhdHRyaWJ1dGUsIHBvc3NpYmx5IGVzY2FwaW5nIGl0LgorCisgICAgICAgICBNb3N0IHN0cmluZ3Mgd2lsbCBiZSBxdW90ZWQgdXNpbmcgZG91YmxlIHF1b3Rlcy4KKworICAgICAgICAgIEJvYidzIEJhciAtPiAiQm9iJ3MgQmFyIgorCisgICAgICAgICBJZiBhIHN0cmluZyBjb250YWlucyBkb3VibGUgcXVvdGVzLCBpdCB3aWxsIGJlIHF1b3RlZCB1c2luZworICAgICAgICAgc2luZ2xlIHF1b3Rlcy4KKworICAgICAgICAgIFdlbGNvbWUgdG8gIm15IGJhciIgLT4gJ1dlbGNvbWUgdG8gIm15IGJhciInCisKKyAgICAgICAgIElmIGEgc3RyaW5nIGNvbnRhaW5zIGJvdGggc2luZ2xlIGFuZCBkb3VibGUgcXVvdGVzLCB0aGUKKyAgICAgICAgIGRvdWJsZSBxdW90ZXMgd2lsbCBiZSBlc2NhcGVkLCBhbmQgdGhlIHN0cmluZyB3aWxsIGJlIHF1b3RlZAorICAgICAgICAgdXNpbmcgZG91YmxlIHF1b3Rlcy4KKworICAgICAgICAgIFdlbGNvbWUgdG8gIkJvYidzIEJhciIgLT4gIldlbGNvbWUgdG8gJnF1b3Q7Qm9iJ3MgYmFyJnF1b3Q7CisgICAgICAgICIiIgorICAgICAgICBxdW90ZV93aXRoID0gJyInCisgICAgICAgIGlmICciJyBpbiB2YWx1ZToKKyAgICAgICAgICAgIGlmICInIiBpbiB2YWx1ZToKKyAgICAgICAgICAgICAgICAjIFRoZSBzdHJpbmcgY29udGFpbnMgYm90aCBzaW5nbGUgYW5kIGRvdWJsZQorICAgICAgICAgICAgICAgICMgcXVvdGVzLiAgVHVybiB0aGUgZG91YmxlIHF1b3RlcyBpbnRvCisgICAgICAgICAgICAgICAgIyBlbnRpdGllcy4gV2UgcXVvdGUgdGhlIGRvdWJsZSBxdW90ZXMgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAjIHRoZSBzaW5nbGUgcXVvdGVzIGJlY2F1c2UgdGhlIGVudGl0eSBuYW1lIGlzCisgICAgICAgICAgICAgICAgIyAiJnF1b3Q7IiB3aGV0aGVyIHRoaXMgaXMgSFRNTCBvciBYTUwuICBJZiB3ZQorICAgICAgICAgICAgICAgICMgcXVvdGVkIHRoZSBzaW5nbGUgcXVvdGVzLCB3ZSdkIGhhdmUgdG8gZGVjaWRlCisgICAgICAgICAgICAgICAgIyBiZXR3ZWVuICZhcG9zOyBhbmQgJnNxdW90Oy4KKyAgICAgICAgICAgICAgICByZXBsYWNlX3dpdGggPSAiJnF1b3Q7IgorICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnIicsIHJlcGxhY2Vfd2l0aCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBUaGVyZSBhcmUgZG91YmxlIHF1b3RlcyBidXQgbm8gc2luZ2xlIHF1b3Rlcy4KKyAgICAgICAgICAgICAgICAjIFdlIGNhbiB1c2Ugc2luZ2xlIHF1b3RlcyB0byBxdW90ZSB0aGUgYXR0cmlidXRlLgorICAgICAgICAgICAgICAgIHF1b3RlX3dpdGggPSAiJyIKKyAgICAgICAgcmV0dXJuIHF1b3RlX3dpdGggKyB2YWx1ZSArIHF1b3RlX3dpdGgKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzdWJzdGl0dXRlX3htbChjbHMsIHZhbHVlLCBtYWtlX3F1b3RlZF9hdHRyaWJ1dGU9RmFsc2UpOgorICAgICAgICAiIiJTdWJzdGl0dXRlIFhNTCBlbnRpdGllcyBmb3Igc3BlY2lhbCBYTUwgY2hhcmFjdGVycy4KKworICAgICAgICA6cGFyYW0gdmFsdWU6IEEgc3RyaW5nIHRvIGJlIHN1YnN0aXR1dGVkLiBUaGUgbGVzcy10aGFuIHNpZ24KKyAgICAgICAgICB3aWxsIGJlY29tZSAmbHQ7LCB0aGUgZ3JlYXRlci10aGFuIHNpZ24gd2lsbCBiZWNvbWUgJmd0OywKKyAgICAgICAgICBhbmQgYW55IGFtcGVyc2FuZHMgd2lsbCBiZWNvbWUgJmFtcDsuIElmIHlvdSB3YW50IGFtcGVyc2FuZHMKKyAgICAgICAgICB0aGF0IGFwcGVhciB0byBiZSBwYXJ0IG9mIGFuIGVudGl0eSBkZWZpbml0aW9uIHRvIGJlIGxlZnQKKyAgICAgICAgICBhbG9uZSwgdXNlIHN1YnN0aXR1dGVfeG1sX2NvbnRhaW5pbmdfZW50aXRpZXMoKSBpbnN0ZWFkLgorCisgICAgICAgIDpwYXJhbSBtYWtlX3F1b3RlZF9hdHRyaWJ1dGU6IElmIFRydWUsIHRoZW4gdGhlIHN0cmluZyB3aWxsIGJlCisgICAgICAgICBxdW90ZWQsIGFzIGJlZml0cyBhbiBhdHRyaWJ1dGUgdmFsdWUuCisgICAgICAgICIiIgorICAgICAgICAjIEVzY2FwZSBhbmdsZSBicmFja2V0cyBhbmQgYW1wZXJzYW5kcy4KKyAgICAgICAgdmFsdWUgPSBjbHMuQU1QRVJTQU5EX09SX0JSQUNLRVQuc3ViKAorICAgICAgICAgICAgY2xzLl9zdWJzdGl0dXRlX3htbF9lbnRpdHksIHZhbHVlKQorCisgICAgICAgIGlmIG1ha2VfcXVvdGVkX2F0dHJpYnV0ZToKKyAgICAgICAgICAgIHZhbHVlID0gY2xzLnF1b3RlZF9hdHRyaWJ1dGVfdmFsdWUodmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHN1YnN0aXR1dGVfeG1sX2NvbnRhaW5pbmdfZW50aXRpZXMoCisgICAgICAgIGNscywgdmFsdWUsIG1ha2VfcXVvdGVkX2F0dHJpYnV0ZT1GYWxzZSk6CisgICAgICAgICIiIlN1YnN0aXR1dGUgWE1MIGVudGl0aWVzIGZvciBzcGVjaWFsIFhNTCBjaGFyYWN0ZXJzLgorCisgICAgICAgIDpwYXJhbSB2YWx1ZTogQSBzdHJpbmcgdG8gYmUgc3Vic3RpdHV0ZWQuIFRoZSBsZXNzLXRoYW4gc2lnbiB3aWxsCisgICAgICAgICAgYmVjb21lICZsdDssIHRoZSBncmVhdGVyLXRoYW4gc2lnbiB3aWxsIGJlY29tZSAmZ3Q7LCBhbmQgYW55CisgICAgICAgICAgYW1wZXJzYW5kcyB0aGF0IGFyZSBub3QgcGFydCBvZiBhbiBlbnRpdHkgZGVmaXRpb24gd2lsbAorICAgICAgICAgIGJlY29tZSAmYW1wOy4KKworICAgICAgICA6cGFyYW0gbWFrZV9xdW90ZWRfYXR0cmlidXRlOiBJZiBUcnVlLCB0aGVuIHRoZSBzdHJpbmcgd2lsbCBiZQorICAgICAgICAgcXVvdGVkLCBhcyBiZWZpdHMgYW4gYXR0cmlidXRlIHZhbHVlLgorICAgICAgICAiIiIKKyAgICAgICAgIyBFc2NhcGUgYW5nbGUgYnJhY2tldHMsIGFuZCBhbXBlcnNhbmRzIHRoYXQgYXJlbid0IHBhcnQgb2YKKyAgICAgICAgIyBlbnRpdGllcy4KKyAgICAgICAgdmFsdWUgPSBjbHMuQkFSRV9BTVBFUlNBTkRfT1JfQlJBQ0tFVC5zdWIoCisgICAgICAgICAgICBjbHMuX3N1YnN0aXR1dGVfeG1sX2VudGl0eSwgdmFsdWUpCisKKyAgICAgICAgaWYgbWFrZV9xdW90ZWRfYXR0cmlidXRlOgorICAgICAgICAgICAgdmFsdWUgPSBjbHMucXVvdGVkX2F0dHJpYnV0ZV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc3Vic3RpdHV0ZV9odG1sKGNscywgcyk6CisgICAgICAgICIiIlJlcGxhY2UgY2VydGFpbiBVbmljb2RlIGNoYXJhY3RlcnMgd2l0aCBuYW1lZCBIVE1MIGVudGl0aWVzLgorCisgICAgICAgIFRoaXMgZGlmZmVycyBmcm9tIGRhdGEuZW5jb2RlKGVuY29kaW5nLCAneG1sY2hhcnJlZnJlcGxhY2UnKQorICAgICAgICBpbiB0aGF0IHRoZSBnb2FsIGlzIHRvIG1ha2UgdGhlIHJlc3VsdCBtb3JlIHJlYWRhYmxlICh0byB0aG9zZQorICAgICAgICB3aXRoIEFTQ0lJIGRpc3BsYXlzKSByYXRoZXIgdGhhbiB0byByZWNvdmVyIGZyb20KKyAgICAgICAgZXJyb3JzLiBUaGVyZSdzIGFic29sdXRlbHkgbm90aGluZyB3cm9uZyB3aXRoIGEgVVRGLTggc3RyaW5nCisgICAgICAgIGNvbnRhaW5nIGEgTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURSwgYnV0IHJlcGxhY2luZyB0aGF0CisgICAgICAgIGNoYXJhY3RlciB3aXRoICImZWFjdXRlOyIgd2lsbCBtYWtlIGl0IG1vcmUgcmVhZGFibGUgdG8gc29tZQorICAgICAgICBwZW9wbGUuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gY2xzLkNIQVJBQ1RFUl9UT19IVE1MX0VOVElUWV9SRS5zdWIoCisgICAgICAgICAgICBjbHMuX3N1YnN0aXR1dGVfaHRtbF9lbnRpdHksIHMpCisKKworY2xhc3MgRW5jb2RpbmdEZXRlY3RvcjoKKyAgICAiIiJTdWdnZXN0cyBhIG51bWJlciBvZiBwb3NzaWJsZSBlbmNvZGluZ3MgZm9yIGEgYnl0ZXN0cmluZy4KKworICAgIE9yZGVyIG9mIHByZWNlZGVuY2U6CisKKyAgICAxLiBFbmNvZGluZ3MgeW91IHNwZWNpZmljYWxseSB0ZWxsIEVuY29kaW5nRGV0ZWN0b3IgdG8gdHJ5IGZpcnN0CisgICAgKHRoZSBvdmVycmlkZV9lbmNvZGluZ3MgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yKS4KKworICAgIDIuIEFuIGVuY29kaW5nIGRlY2xhcmVkIHdpdGhpbiB0aGUgYnl0ZXN0cmluZyBpdHNlbGYsIGVpdGhlciBpbiBhbgorICAgIFhNTCBkZWNsYXJhdGlvbiAoaWYgdGhlIGJ5dGVzdHJpbmcgaXMgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgYW4gWE1MCisgICAgZG9jdW1lbnQpLCBvciBpbiBhIDxtZXRhPiB0YWcgKGlmIHRoZSBieXRlc3RyaW5nIGlzIHRvIGJlCisgICAgaW50ZXJwcmV0ZWQgYXMgYW4gSFRNTCBkb2N1bWVudC4pCisKKyAgICAzLiBBbiBlbmNvZGluZyBkZXRlY3RlZCB0aHJvdWdoIHRleHR1YWwgYW5hbHlzaXMgYnkgY2hhcmRldCwKKyAgICBjY2hhcmRldCwgb3IgYSBzaW1pbGFyIGV4dGVybmFsIGxpYnJhcnkuCisKKyAgICA0LiBVVEYtOC4KKworICAgIDUuIFdpbmRvd3MtMTI1Mi4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya3VwLCBvdmVycmlkZV9lbmNvZGluZ3M9Tm9uZSwgaXNfaHRtbD1GYWxzZSk6CisgICAgICAgIHNlbGYub3ZlcnJpZGVfZW5jb2RpbmdzID0gb3ZlcnJpZGVfZW5jb2RpbmdzIG9yIFtdCisgICAgICAgIHNlbGYuY2hhcmRldF9lbmNvZGluZyA9IE5vbmUKKyAgICAgICAgc2VsZi5pc19odG1sID0gaXNfaHRtbAorICAgICAgICBzZWxmLmRlY2xhcmVkX2VuY29kaW5nID0gTm9uZQorCisgICAgICAgICMgRmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3M6IHN0cmlwIGEgYnl0ZS1vcmRlciBtYXJrLgorICAgICAgICBzZWxmLm1hcmt1cCwgc2VsZi5zbmlmZmVkX2VuY29kaW5nID0gc2VsZi5zdHJpcF9ieXRlX29yZGVyX21hcmsobWFya3VwKQorCisgICAgZGVmIF91c2FibGUoc2VsZiwgZW5jb2RpbmcsIHRyaWVkKToKKyAgICAgICAgaWYgZW5jb2RpbmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBlbmNvZGluZyA9IGVuY29kaW5nLmxvd2VyKCkKKyAgICAgICAgICAgIGlmIGVuY29kaW5nIG5vdCBpbiB0cmllZDoKKyAgICAgICAgICAgICAgICB0cmllZC5hZGQoZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZW5jb2RpbmdzKHNlbGYpOgorICAgICAgICAiIiJZaWVsZCBhIG51bWJlciBvZiBlbmNvZGluZ3MgdGhhdCBtaWdodCB3b3JrIGZvciB0aGlzIG1hcmt1cC4iIiIKKyAgICAgICAgdHJpZWQgPSBzZXQoKQorICAgICAgICBmb3IgZSBpbiBzZWxmLm92ZXJyaWRlX2VuY29kaW5nczoKKyAgICAgICAgICAgIGlmIHNlbGYuX3VzYWJsZShlLCB0cmllZCk6CisgICAgICAgICAgICAgICAgeWllbGQgZQorCisgICAgICAgICMgRGlkIHRoZSBkb2N1bWVudCBvcmlnaW5hbGx5IHN0YXJ0IHdpdGggYSBieXRlLW9yZGVyIG1hcmsKKyAgICAgICAgIyB0aGF0IGluZGljYXRlZCBpdHMgZW5jb2Rpbmc/CisgICAgICAgIGlmIHNlbGYuX3VzYWJsZShzZWxmLnNuaWZmZWRfZW5jb2RpbmcsIHRyaWVkKToKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuc25pZmZlZF9lbmNvZGluZworCisgICAgICAgICMgTG9vayB3aXRoaW4gdGhlIGRvY3VtZW50IGZvciBhbiBYTUwgb3IgSFRNTCBlbmNvZGluZworICAgICAgICAjIGRlY2xhcmF0aW9uLgorICAgICAgICBpZiBzZWxmLmRlY2xhcmVkX2VuY29kaW5nIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmRlY2xhcmVkX2VuY29kaW5nID0gc2VsZi5maW5kX2RlY2xhcmVkX2VuY29kaW5nKAorICAgICAgICAgICAgICAgIHNlbGYubWFya3VwLCBzZWxmLmlzX2h0bWwpCisgICAgICAgIGlmIHNlbGYuX3VzYWJsZShzZWxmLmRlY2xhcmVkX2VuY29kaW5nLCB0cmllZCk6CisgICAgICAgICAgICB5aWVsZCBzZWxmLmRlY2xhcmVkX2VuY29kaW5nCisKKyAgICAgICAgIyBVc2UgdGhpcmQtcGFydHkgY2hhcmFjdGVyIHNldCBkZXRlY3Rpb24gdG8gZ3Vlc3MgYXQgdGhlCisgICAgICAgICMgZW5jb2RpbmcuCisgICAgICAgIGlmIHNlbGYuY2hhcmRldF9lbmNvZGluZyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5jaGFyZGV0X2VuY29kaW5nID0gY2hhcmRldF9kYW1taXQoc2VsZi5tYXJrdXApCisgICAgICAgIGlmIHNlbGYuX3VzYWJsZShzZWxmLmNoYXJkZXRfZW5jb2RpbmcsIHRyaWVkKToKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuY2hhcmRldF9lbmNvZGluZworCisgICAgICAgICMgQXMgYSBsYXN0LWRpdGNoIGVmZm9ydCwgdHJ5IHV0Zi04IGFuZCB3aW5kb3dzLTEyNTIuCisgICAgICAgIGZvciBlIGluICgndXRmLTgnLCAnd2luZG93cy0xMjUyJyk6CisgICAgICAgICAgICBpZiBzZWxmLl91c2FibGUoZSwgdHJpZWQpOgorICAgICAgICAgICAgICAgIHlpZWxkIGUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzdHJpcF9ieXRlX29yZGVyX21hcmsoY2xzLCBkYXRhKToKKyAgICAgICAgIiIiSWYgYSBieXRlLW9yZGVyIG1hcmsgaXMgcHJlc2VudCwgc3RyaXAgaXQgYW5kIHJldHVybiB0aGUgZW5jb2RpbmcgaXQgaW1wbGllcy4iIiIKKyAgICAgICAgZW5jb2RpbmcgPSBOb25lCisgICAgICAgIGlmIChsZW4oZGF0YSkgPj0gNCkgYW5kIChkYXRhWzoyXSA9PSBiJ1x4ZmVceGZmJykgXAorICAgICAgICAgICAgICAgYW5kIChkYXRhWzI6NF0gIT0gJ1x4MDBceDAwJyk6CisgICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtMTZiZScKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzI6XQorICAgICAgICBlbGlmIChsZW4oZGF0YSkgPj0gNCkgYW5kIChkYXRhWzoyXSA9PSBiJ1x4ZmZceGZlJykgXAorICAgICAgICAgICAgICAgICBhbmQgKGRhdGFbMjo0XSAhPSAnXHgwMFx4MDAnKToKKyAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0Zi0xNmxlJworICAgICAgICAgICAgZGF0YSA9IGRhdGFbMjpdCisgICAgICAgIGVsaWYgZGF0YVs6M10gPT0gYidceGVmXHhiYlx4YmYnOgorICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmLTgnCisgICAgICAgICAgICBkYXRhID0gZGF0YVszOl0KKyAgICAgICAgZWxpZiBkYXRhWzo0XSA9PSBiJ1x4MDBceDAwXHhmZVx4ZmYnOgorICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmLTMyYmUnCisgICAgICAgICAgICBkYXRhID0gZGF0YVs0Ol0KKyAgICAgICAgZWxpZiBkYXRhWzo0XSA9PSBiJ1x4ZmZceGZlXHgwMFx4MDAnOgorICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmLTMybGUnCisgICAgICAgICAgICBkYXRhID0gZGF0YVs0Ol0KKyAgICAgICAgcmV0dXJuIGRhdGEsIGVuY29kaW5nCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZmluZF9kZWNsYXJlZF9lbmNvZGluZyhjbHMsIG1hcmt1cCwgaXNfaHRtbD1GYWxzZSwgc2VhcmNoX2VudGlyZV9kb2N1bWVudD1GYWxzZSk6CisgICAgICAgICIiIkdpdmVuIGEgZG9jdW1lbnQsIHRyaWVzIHRvIGZpbmQgaXRzIGRlY2xhcmVkIGVuY29kaW5nLgorCisgICAgICAgIEFuIFhNTCBlbmNvZGluZyBpcyBkZWNsYXJlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudC4KKworICAgICAgICBBbiBIVE1MIGVuY29kaW5nIGlzIGRlY2xhcmVkIGluIGEgPG1ldGE+IHRhZywgaG9wZWZ1bGx5IG5lYXIgdGhlCisgICAgICAgIGJlZ2lubmluZyBvZiB0aGUgZG9jdW1lbnQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWFyY2hfZW50aXJlX2RvY3VtZW50OgorICAgICAgICAgICAgeG1sX2VuZHBvcyA9IGh0bWxfZW5kcG9zID0gbGVuKG1hcmt1cCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHhtbF9lbmRwb3MgPSAxMDI0CisgICAgICAgICAgICBodG1sX2VuZHBvcyA9IG1heCgyMDQ4LCBpbnQobGVuKG1hcmt1cCkgKiAwLjA1KSkKKyAgICAgICAgICAgIAorICAgICAgICBkZWNsYXJlZF9lbmNvZGluZyA9IE5vbmUKKyAgICAgICAgZGVjbGFyZWRfZW5jb2RpbmdfbWF0Y2ggPSB4bWxfZW5jb2RpbmdfcmUuc2VhcmNoKG1hcmt1cCwgZW5kcG9zPXhtbF9lbmRwb3MpCisgICAgICAgIGlmIG5vdCBkZWNsYXJlZF9lbmNvZGluZ19tYXRjaCBhbmQgaXNfaHRtbDoKKyAgICAgICAgICAgIGRlY2xhcmVkX2VuY29kaW5nX21hdGNoID0gaHRtbF9tZXRhX3JlLnNlYXJjaChtYXJrdXAsIGVuZHBvcz1odG1sX2VuZHBvcykKKyAgICAgICAgaWYgZGVjbGFyZWRfZW5jb2RpbmdfbWF0Y2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZWNsYXJlZF9lbmNvZGluZyA9IGRlY2xhcmVkX2VuY29kaW5nX21hdGNoLmdyb3VwcygpWzBdLmRlY29kZSgKKyAgICAgICAgICAgICAgICAnYXNjaWknKQorICAgICAgICBpZiBkZWNsYXJlZF9lbmNvZGluZzoKKyAgICAgICAgICAgIHJldHVybiBkZWNsYXJlZF9lbmNvZGluZy5sb3dlcigpCisgICAgICAgIHJldHVybiBOb25lCisKK2NsYXNzIFVuaWNvZGVEYW1taXQ6CisgICAgIiIiQSBjbGFzcyBmb3IgZGV0ZWN0aW5nIHRoZSBlbmNvZGluZyBvZiBhICpNTCBkb2N1bWVudCBhbmQKKyAgICBjb252ZXJ0aW5nIGl0IHRvIGEgVW5pY29kZSBzdHJpbmcuIElmIHRoZSBzb3VyY2UgZW5jb2RpbmcgaXMKKyAgICB3aW5kb3dzLTEyNTIsIGNhbiByZXBsYWNlIE1TIHNtYXJ0IHF1b3RlcyB3aXRoIHRoZWlyIEhUTUwgb3IgWE1MCisgICAgZXF1aXZhbGVudHMuIiIiCisKKyAgICAjIFRoaXMgZGljdGlvbmFyeSBtYXBzIGNvbW1vbmx5IHNlZW4gdmFsdWVzIGZvciAiY2hhcnNldCIgaW4gSFRNTAorICAgICMgbWV0YSB0YWdzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFB5dGhvbiBjb2RlYyBuYW1lcy4gSXQgb25seSBjb3ZlcnMKKyAgICAjIHZhbHVlcyB0aGF0IGFyZW4ndCBpbiBQeXRob24ncyBhbGlhc2VzIGFuZCBjYW4ndCBiZSBkZXRlcm1pbmVkCisgICAgIyBieSB0aGUgaGV1cmlzdGljcyBpbiBmaW5kX2NvZGVjLgorICAgIENIQVJTRVRfQUxJQVNFUyA9IHsibWFjaW50b3NoIjogIm1hYy1yb21hbiIsCisgICAgICAgICAgICAgICAgICAgICAgICJ4LXNqaXMiOiAic2hpZnQtamlzIn0KKworICAgIEVOQ09ESU5HU19XSVRIX1NNQVJUX1FVT1RFUyA9IFsKKyAgICAgICAgIndpbmRvd3MtMTI1MiIsCisgICAgICAgICJpc28tODg1OS0xIiwKKyAgICAgICAgImlzby04ODU5LTIiLAorICAgICAgICBdCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya3VwLCBvdmVycmlkZV9lbmNvZGluZ3M9W10sCisgICAgICAgICAgICAgICAgIHNtYXJ0X3F1b3Rlc190bz1Ob25lLCBpc19odG1sPUZhbHNlKToKKyAgICAgICAgc2VsZi5zbWFydF9xdW90ZXNfdG8gPSBzbWFydF9xdW90ZXNfdG8KKyAgICAgICAgc2VsZi50cmllZF9lbmNvZGluZ3MgPSBbXQorICAgICAgICBzZWxmLmNvbnRhaW5zX3JlcGxhY2VtZW50X2NoYXJhY3RlcnMgPSBGYWxzZQorICAgICAgICBzZWxmLmlzX2h0bWwgPSBpc19odG1sCisKKyAgICAgICAgc2VsZi5kZXRlY3RvciA9IEVuY29kaW5nRGV0ZWN0b3IobWFya3VwLCBvdmVycmlkZV9lbmNvZGluZ3MsIGlzX2h0bWwpCisKKyAgICAgICAgIyBTaG9ydC1jaXJjdWl0IGlmIHRoZSBkYXRhIGlzIGluIFVuaWNvZGUgdG8gYmVnaW4gd2l0aC4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAsIHVuaWNvZGUpIG9yIG1hcmt1cCA9PSAnJzoKKyAgICAgICAgICAgIHNlbGYubWFya3VwID0gbWFya3VwCisgICAgICAgICAgICBzZWxmLnVuaWNvZGVfbWFya3VwID0gdW5pY29kZShtYXJrdXApCisgICAgICAgICAgICBzZWxmLm9yaWdpbmFsX2VuY29kaW5nID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBUaGUgZW5jb2RpbmcgZGV0ZWN0b3IgbWF5IGhhdmUgc3RyaXBwZWQgYSBieXRlLW9yZGVyIG1hcmsuCisgICAgICAgICMgVXNlIHRoZSBzdHJpcHBlZCBtYXJrdXAgZnJvbSB0aGlzIHBvaW50IG9uLgorICAgICAgICBzZWxmLm1hcmt1cCA9IHNlbGYuZGV0ZWN0b3IubWFya3VwCisKKyAgICAgICAgdSA9IE5vbmUKKyAgICAgICAgZm9yIGVuY29kaW5nIGluIHNlbGYuZGV0ZWN0b3IuZW5jb2RpbmdzOgorICAgICAgICAgICAgbWFya3VwID0gc2VsZi5kZXRlY3Rvci5tYXJrdXAKKyAgICAgICAgICAgIHUgPSBzZWxmLl9jb252ZXJ0X2Zyb20oZW5jb2RpbmcpCisgICAgICAgICAgICBpZiB1IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgbm90IHU6CisgICAgICAgICAgICAjIE5vbmUgb2YgdGhlIGVuY29kaW5ncyB3b3JrZWQuIEFzIGFuIGFic29sdXRlIGxhc3QgcmVzb3J0LAorICAgICAgICAgICAgIyB0cnkgdGhlbSBhZ2FpbiB3aXRoIGNoYXJhY3RlciByZXBsYWNlbWVudC4KKworICAgICAgICAgICAgZm9yIGVuY29kaW5nIGluIHNlbGYuZGV0ZWN0b3IuZW5jb2RpbmdzOgorICAgICAgICAgICAgICAgIGlmIGVuY29kaW5nICE9ICJhc2NpaSI6CisgICAgICAgICAgICAgICAgICAgIHUgPSBzZWxmLl9jb252ZXJ0X2Zyb20oZW5jb2RpbmcsICJyZXBsYWNlIikKKyAgICAgICAgICAgICAgICBpZiB1IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNvbWUgY2hhcmFjdGVycyBjb3VsZCBub3QgYmUgZGVjb2RlZCwgYW5kIHdlcmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXBsYWNlZCB3aXRoIFJFUExBQ0VNRU5UIENIQVJBQ1RFUi4iKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRhaW5zX3JlcGxhY2VtZW50X2NoYXJhY3RlcnMgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgIyBJZiBub25lIG9mIHRoYXQgd29ya2VkLCB3ZSBjb3VsZCBhdCB0aGlzIHBvaW50IGZvcmNlIGl0IHRvCisgICAgICAgICMgQVNDSUksIGJ1dCB0aGF0IHdvdWxkIGRlc3Ryb3kgc28gbXVjaCBkYXRhIHRoYXQgSSB0aGluaworICAgICAgICAjIGdpdmluZyB1cCBpcyBiZXR0ZXIuCisgICAgICAgIHNlbGYudW5pY29kZV9tYXJrdXAgPSB1CisgICAgICAgIGlmIG5vdCB1OgorICAgICAgICAgICAgc2VsZi5vcmlnaW5hbF9lbmNvZGluZyA9IE5vbmUKKworICAgIGRlZiBfc3ViX21zX2NoYXIoc2VsZiwgbWF0Y2gpOgorICAgICAgICAiIiJDaGFuZ2VzIGEgTVMgc21hcnQgcXVvdGUgY2hhcmFjdGVyIHRvIGFuIFhNTCBvciBIVE1MCisgICAgICAgIGVudGl0eSwgb3IgYW4gQVNDSUkgY2hhcmFjdGVyLiIiIgorICAgICAgICBvcmlnID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgaWYgc2VsZi5zbWFydF9xdW90ZXNfdG8gPT0gJ2FzY2lpJzoKKyAgICAgICAgICAgIHN1YiA9IHNlbGYuTVNfQ0hBUlNfVE9fQVNDSUkuZ2V0KG9yaWcpLmVuY29kZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdWIgPSBzZWxmLk1TX0NIQVJTLmdldChvcmlnKQorICAgICAgICAgICAgaWYgdHlwZShzdWIpID09IHR1cGxlOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuc21hcnRfcXVvdGVzX3RvID09ICd4bWwnOgorICAgICAgICAgICAgICAgICAgICBzdWIgPSAnJiN4Jy5lbmNvZGUoKSArIHN1YlsxXS5lbmNvZGUoKSArICc7Jy5lbmNvZGUoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHN1YiA9ICcmJy5lbmNvZGUoKSArIHN1YlswXS5lbmNvZGUoKSArICc7Jy5lbmNvZGUoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdWIgPSBzdWIuZW5jb2RlKCkKKyAgICAgICAgcmV0dXJuIHN1YgorCisgICAgZGVmIF9jb252ZXJ0X2Zyb20oc2VsZiwgcHJvcG9zZWQsIGVycm9ycz0ic3RyaWN0Iik6CisgICAgICAgIHByb3Bvc2VkID0gc2VsZi5maW5kX2NvZGVjKHByb3Bvc2VkKQorICAgICAgICBpZiBub3QgcHJvcG9zZWQgb3IgKHByb3Bvc2VkLCBlcnJvcnMpIGluIHNlbGYudHJpZWRfZW5jb2RpbmdzOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgc2VsZi50cmllZF9lbmNvZGluZ3MuYXBwZW5kKChwcm9wb3NlZCwgZXJyb3JzKSkKKyAgICAgICAgbWFya3VwID0gc2VsZi5tYXJrdXAKKyAgICAgICAgIyBDb252ZXJ0IHNtYXJ0IHF1b3RlcyB0byBIVE1MIGlmIGNvbWluZyBmcm9tIGFuIGVuY29kaW5nCisgICAgICAgICMgdGhhdCBtaWdodCBoYXZlIHRoZW0uCisgICAgICAgIGlmIChzZWxmLnNtYXJ0X3F1b3Rlc190byBpcyBub3QgTm9uZQorICAgICAgICAgICAgYW5kIHByb3Bvc2VkIGluIHNlbGYuRU5DT0RJTkdTX1dJVEhfU01BUlRfUVVPVEVTKToKKyAgICAgICAgICAgIHNtYXJ0X3F1b3Rlc19yZSA9IGIiKFtceDgwLVx4OWZdKSIKKyAgICAgICAgICAgIHNtYXJ0X3F1b3Rlc19jb21waWxlZCA9IHJlLmNvbXBpbGUoc21hcnRfcXVvdGVzX3JlKQorICAgICAgICAgICAgbWFya3VwID0gc21hcnRfcXVvdGVzX2NvbXBpbGVkLnN1YihzZWxmLl9zdWJfbXNfY2hhciwgbWFya3VwKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICNwcmludCAiVHJ5aW5nIHRvIGNvbnZlcnQgZG9jdW1lbnQgdG8gJXMgKGVycm9ycz0lcykiICUgKAorICAgICAgICAgICAgIyAgICBwcm9wb3NlZCwgZXJyb3JzKQorICAgICAgICAgICAgdSA9IHNlbGYuX3RvX3VuaWNvZGUobWFya3VwLCBwcm9wb3NlZCwgZXJyb3JzKQorICAgICAgICAgICAgc2VsZi5tYXJrdXAgPSB1CisgICAgICAgICAgICBzZWxmLm9yaWdpbmFsX2VuY29kaW5nID0gcHJvcG9zZWQKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgI3ByaW50ICJUaGF0IGRpZG4ndCB3b3JrISIKKyAgICAgICAgICAgICNwcmludCBlCisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAjcHJpbnQgIkNvcnJlY3QgZW5jb2Rpbmc6ICVzIiAlIHByb3Bvc2VkCisgICAgICAgIHJldHVybiBzZWxmLm1hcmt1cAorCisgICAgZGVmIF90b191bmljb2RlKHNlbGYsIGRhdGEsIGVuY29kaW5nLCBlcnJvcnM9InN0cmljdCIpOgorICAgICAgICAnJydHaXZlbiBhIHN0cmluZyBhbmQgaXRzIGVuY29kaW5nLCBkZWNvZGVzIHRoZSBzdHJpbmcgaW50byBVbmljb2RlLgorICAgICAgICAlZW5jb2RpbmcgaXMgYSBzdHJpbmcgcmVjb2duaXplZCBieSBlbmNvZGluZ3MuYWxpYXNlcycnJworICAgICAgICByZXR1cm4gdW5pY29kZShkYXRhLCBlbmNvZGluZywgZXJyb3JzKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRlY2xhcmVkX2h0bWxfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmlzX2h0bWw6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5kZXRlY3Rvci5kZWNsYXJlZF9lbmNvZGluZworCisgICAgZGVmIGZpbmRfY29kZWMoc2VsZiwgY2hhcnNldCk6CisgICAgICAgIHZhbHVlID0gKHNlbGYuX2NvZGVjKHNlbGYuQ0hBUlNFVF9BTElBU0VTLmdldChjaGFyc2V0LCBjaGFyc2V0KSkKKyAgICAgICAgICAgICAgIG9yIChjaGFyc2V0IGFuZCBzZWxmLl9jb2RlYyhjaGFyc2V0LnJlcGxhY2UoIi0iLCAiIikpKQorICAgICAgICAgICAgICAgb3IgKGNoYXJzZXQgYW5kIHNlbGYuX2NvZGVjKGNoYXJzZXQucmVwbGFjZSgiLSIsICJfIikpKQorICAgICAgICAgICAgICAgb3IgKGNoYXJzZXQgYW5kIGNoYXJzZXQubG93ZXIoKSkKKyAgICAgICAgICAgICAgIG9yIGNoYXJzZXQKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGlmIHZhbHVlOgorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmxvd2VyKCkKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfY29kZWMoc2VsZiwgY2hhcnNldCk6CisgICAgICAgIGlmIG5vdCBjaGFyc2V0OgorICAgICAgICAgICAgcmV0dXJuIGNoYXJzZXQKKyAgICAgICAgY29kZWMgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvZGVjcy5sb29rdXAoY2hhcnNldCkKKyAgICAgICAgICAgIGNvZGVjID0gY2hhcnNldAorICAgICAgICBleGNlcHQgKExvb2t1cEVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIGNvZGVjCisKKworICAgICMgQSBwYXJ0aWFsIG1hcHBpbmcgb2YgSVNPLUxhdGluLTEgdG8gSFRNTCBlbnRpdGllcy9YTUwgbnVtZXJpYyBlbnRpdGllcy4KKyAgICBNU19DSEFSUyA9IHtiJ1x4ODAnOiAoJ2V1cm8nLCAnMjBBQycpLAorICAgICAgICAgICAgICAgIGInXHg4MSc6ICcgJywKKyAgICAgICAgICAgICAgICBiJ1x4ODInOiAoJ3NicXVvJywgJzIwMUEnKSwKKyAgICAgICAgICAgICAgICBiJ1x4ODMnOiAoJ2Zub2YnLCAnMTkyJyksCisgICAgICAgICAgICAgICAgYidceDg0JzogKCdiZHF1bycsICcyMDFFJyksCisgICAgICAgICAgICAgICAgYidceDg1JzogKCdoZWxsaXAnLCAnMjAyNicpLAorICAgICAgICAgICAgICAgIGInXHg4Nic6ICgnZGFnZ2VyJywgJzIwMjAnKSwKKyAgICAgICAgICAgICAgICBiJ1x4ODcnOiAoJ0RhZ2dlcicsICcyMDIxJyksCisgICAgICAgICAgICAgICAgYidceDg4JzogKCdjaXJjJywgJzJDNicpLAorICAgICAgICAgICAgICAgIGInXHg4OSc6ICgncGVybWlsJywgJzIwMzAnKSwKKyAgICAgICAgICAgICAgICBiJ1x4OEEnOiAoJ1NjYXJvbicsICcxNjAnKSwKKyAgICAgICAgICAgICAgICBiJ1x4OEInOiAoJ2xzYXF1bycsICcyMDM5JyksCisgICAgICAgICAgICAgICAgYidceDhDJzogKCdPRWxpZycsICcxNTInKSwKKyAgICAgICAgICAgICAgICBiJ1x4OEQnOiAnPycsCisgICAgICAgICAgICAgICAgYidceDhFJzogKCcjeDE3RCcsICcxN0QnKSwKKyAgICAgICAgICAgICAgICBiJ1x4OEYnOiAnPycsCisgICAgICAgICAgICAgICAgYidceDkwJzogJz8nLAorICAgICAgICAgICAgICAgIGInXHg5MSc6ICgnbHNxdW8nLCAnMjAxOCcpLAorICAgICAgICAgICAgICAgIGInXHg5Mic6ICgncnNxdW8nLCAnMjAxOScpLAorICAgICAgICAgICAgICAgIGInXHg5Myc6ICgnbGRxdW8nLCAnMjAxQycpLAorICAgICAgICAgICAgICAgIGInXHg5NCc6ICgncmRxdW8nLCAnMjAxRCcpLAorICAgICAgICAgICAgICAgIGInXHg5NSc6ICgnYnVsbCcsICcyMDIyJyksCisgICAgICAgICAgICAgICAgYidceDk2JzogKCduZGFzaCcsICcyMDEzJyksCisgICAgICAgICAgICAgICAgYidceDk3JzogKCdtZGFzaCcsICcyMDE0JyksCisgICAgICAgICAgICAgICAgYidceDk4JzogKCd0aWxkZScsICcyREMnKSwKKyAgICAgICAgICAgICAgICBiJ1x4OTknOiAoJ3RyYWRlJywgJzIxMjInKSwKKyAgICAgICAgICAgICAgICBiJ1x4OWEnOiAoJ3NjYXJvbicsICcxNjEnKSwKKyAgICAgICAgICAgICAgICBiJ1x4OWInOiAoJ3JzYXF1bycsICcyMDNBJyksCisgICAgICAgICAgICAgICAgYidceDljJzogKCdvZWxpZycsICcxNTMnKSwKKyAgICAgICAgICAgICAgICBiJ1x4OWQnOiAnPycsCisgICAgICAgICAgICAgICAgYidceDllJzogKCcjeDE3RScsICcxN0UnKSwKKyAgICAgICAgICAgICAgICBiJ1x4OWYnOiAoJ1l1bWwnLCAnJyksfQorCisgICAgIyBBIHBhcm9jaGlhbCBwYXJ0aWFsIG1hcHBpbmcgb2YgSVNPLUxhdGluLTEgdG8gQVNDSUkuIENvbnRhaW5zCisgICAgIyBob3Jyb3JzIGxpa2Ugc3RyaXBwaW5nIGRpYWNyaXRpY2FsIG1hcmtzIHRvIHR1cm4gw6EgaW50byBhLCBidXQgYWxzbworICAgICMgY29udGFpbnMgbm9uLWhvcnJvcnMgbGlrZSB0dXJuaW5nIOKAnCBpbnRvICIuCisgICAgTVNfQ0hBUlNfVE9fQVNDSUkgPSB7CisgICAgICAgIGInXHg4MCcgOiAnRVVSJywKKyAgICAgICAgYidceDgxJyA6ICcgJywKKyAgICAgICAgYidceDgyJyA6ICcsJywKKyAgICAgICAgYidceDgzJyA6ICdmJywKKyAgICAgICAgYidceDg0JyA6ICcsLCcsCisgICAgICAgIGInXHg4NScgOiAnLi4uJywKKyAgICAgICAgYidceDg2JyA6ICcrJywKKyAgICAgICAgYidceDg3JyA6ICcrKycsCisgICAgICAgIGInXHg4OCcgOiAnXicsCisgICAgICAgIGInXHg4OScgOiAnJScsCisgICAgICAgIGInXHg4YScgOiAnUycsCisgICAgICAgIGInXHg4YicgOiAnPCcsCisgICAgICAgIGInXHg4YycgOiAnT0UnLAorICAgICAgICBiJ1x4OGQnIDogJz8nLAorICAgICAgICBiJ1x4OGUnIDogJ1onLAorICAgICAgICBiJ1x4OGYnIDogJz8nLAorICAgICAgICBiJ1x4OTAnIDogJz8nLAorICAgICAgICBiJ1x4OTEnIDogIiciLAorICAgICAgICBiJ1x4OTInIDogIiciLAorICAgICAgICBiJ1x4OTMnIDogJyInLAorICAgICAgICBiJ1x4OTQnIDogJyInLAorICAgICAgICBiJ1x4OTUnIDogJyonLAorICAgICAgICBiJ1x4OTYnIDogJy0nLAorICAgICAgICBiJ1x4OTcnIDogJy0tJywKKyAgICAgICAgYidceDk4JyA6ICd+JywKKyAgICAgICAgYidceDk5JyA6ICcoVE0pJywKKyAgICAgICAgYidceDlhJyA6ICdzJywKKyAgICAgICAgYidceDliJyA6ICc+JywKKyAgICAgICAgYidceDljJyA6ICdvZScsCisgICAgICAgIGInXHg5ZCcgOiAnPycsCisgICAgICAgIGInXHg5ZScgOiAneicsCisgICAgICAgIGInXHg5ZicgOiAnWScsCisgICAgICAgIGInXHhhMCcgOiAnICcsCisgICAgICAgIGInXHhhMScgOiAnIScsCisgICAgICAgIGInXHhhMicgOiAnYycsCisgICAgICAgIGInXHhhMycgOiAnR0JQJywKKyAgICAgICAgYidceGE0JyA6ICckJywgI1RoaXMgYXBwcm94aW1hdGlvbiBpcyBlc3BlY2lhbGx5IHBhcm9jaGlhbC0tdGhpcyBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgI2dlbmVyaWMgY3VycmVuY3kgc3ltYm9sLgorICAgICAgICBiJ1x4YTUnIDogJ1lFTicsCisgICAgICAgIGInXHhhNicgOiAnfCcsCisgICAgICAgIGInXHhhNycgOiAnUycsCisgICAgICAgIGInXHhhOCcgOiAnLi4nLAorICAgICAgICBiJ1x4YTknIDogJycsCisgICAgICAgIGInXHhhYScgOiAnKHRoKScsCisgICAgICAgIGInXHhhYicgOiAnPDwnLAorICAgICAgICBiJ1x4YWMnIDogJyEnLAorICAgICAgICBiJ1x4YWQnIDogJyAnLAorICAgICAgICBiJ1x4YWUnIDogJyhSKScsCisgICAgICAgIGInXHhhZicgOiAnLScsCisgICAgICAgIGInXHhiMCcgOiAnbycsCisgICAgICAgIGInXHhiMScgOiAnKy0nLAorICAgICAgICBiJ1x4YjInIDogJzInLAorICAgICAgICBiJ1x4YjMnIDogJzMnLAorICAgICAgICBiJ1x4YjQnIDogKCInIiwgJ2FjdXRlJyksCisgICAgICAgIGInXHhiNScgOiAndScsCisgICAgICAgIGInXHhiNicgOiAnUCcsCisgICAgICAgIGInXHhiNycgOiAnKicsCisgICAgICAgIGInXHhiOCcgOiAnLCcsCisgICAgICAgIGInXHhiOScgOiAnMScsCisgICAgICAgIGInXHhiYScgOiAnKHRoKScsCisgICAgICAgIGInXHhiYicgOiAnPj4nLAorICAgICAgICBiJ1x4YmMnIDogJzEvNCcsCisgICAgICAgIGInXHhiZCcgOiAnMS8yJywKKyAgICAgICAgYidceGJlJyA6ICczLzQnLAorICAgICAgICBiJ1x4YmYnIDogJz8nLAorICAgICAgICBiJ1x4YzAnIDogJ0EnLAorICAgICAgICBiJ1x4YzEnIDogJ0EnLAorICAgICAgICBiJ1x4YzInIDogJ0EnLAorICAgICAgICBiJ1x4YzMnIDogJ0EnLAorICAgICAgICBiJ1x4YzQnIDogJ0EnLAorICAgICAgICBiJ1x4YzUnIDogJ0EnLAorICAgICAgICBiJ1x4YzYnIDogJ0FFJywKKyAgICAgICAgYidceGM3JyA6ICdDJywKKyAgICAgICAgYidceGM4JyA6ICdFJywKKyAgICAgICAgYidceGM5JyA6ICdFJywKKyAgICAgICAgYidceGNhJyA6ICdFJywKKyAgICAgICAgYidceGNiJyA6ICdFJywKKyAgICAgICAgYidceGNjJyA6ICdJJywKKyAgICAgICAgYidceGNkJyA6ICdJJywKKyAgICAgICAgYidceGNlJyA6ICdJJywKKyAgICAgICAgYidceGNmJyA6ICdJJywKKyAgICAgICAgYidceGQwJyA6ICdEJywKKyAgICAgICAgYidceGQxJyA6ICdOJywKKyAgICAgICAgYidceGQyJyA6ICdPJywKKyAgICAgICAgYidceGQzJyA6ICdPJywKKyAgICAgICAgYidceGQ0JyA6ICdPJywKKyAgICAgICAgYidceGQ1JyA6ICdPJywKKyAgICAgICAgYidceGQ2JyA6ICdPJywKKyAgICAgICAgYidceGQ3JyA6ICcqJywKKyAgICAgICAgYidceGQ4JyA6ICdPJywKKyAgICAgICAgYidceGQ5JyA6ICdVJywKKyAgICAgICAgYidceGRhJyA6ICdVJywKKyAgICAgICAgYidceGRiJyA6ICdVJywKKyAgICAgICAgYidceGRjJyA6ICdVJywKKyAgICAgICAgYidceGRkJyA6ICdZJywKKyAgICAgICAgYidceGRlJyA6ICdiJywKKyAgICAgICAgYidceGRmJyA6ICdCJywKKyAgICAgICAgYidceGUwJyA6ICdhJywKKyAgICAgICAgYidceGUxJyA6ICdhJywKKyAgICAgICAgYidceGUyJyA6ICdhJywKKyAgICAgICAgYidceGUzJyA6ICdhJywKKyAgICAgICAgYidceGU0JyA6ICdhJywKKyAgICAgICAgYidceGU1JyA6ICdhJywKKyAgICAgICAgYidceGU2JyA6ICdhZScsCisgICAgICAgIGInXHhlNycgOiAnYycsCisgICAgICAgIGInXHhlOCcgOiAnZScsCisgICAgICAgIGInXHhlOScgOiAnZScsCisgICAgICAgIGInXHhlYScgOiAnZScsCisgICAgICAgIGInXHhlYicgOiAnZScsCisgICAgICAgIGInXHhlYycgOiAnaScsCisgICAgICAgIGInXHhlZCcgOiAnaScsCisgICAgICAgIGInXHhlZScgOiAnaScsCisgICAgICAgIGInXHhlZicgOiAnaScsCisgICAgICAgIGInXHhmMCcgOiAnbycsCisgICAgICAgIGInXHhmMScgOiAnbicsCisgICAgICAgIGInXHhmMicgOiAnbycsCisgICAgICAgIGInXHhmMycgOiAnbycsCisgICAgICAgIGInXHhmNCcgOiAnbycsCisgICAgICAgIGInXHhmNScgOiAnbycsCisgICAgICAgIGInXHhmNicgOiAnbycsCisgICAgICAgIGInXHhmNycgOiAnLycsCisgICAgICAgIGInXHhmOCcgOiAnbycsCisgICAgICAgIGInXHhmOScgOiAndScsCisgICAgICAgIGInXHhmYScgOiAndScsCisgICAgICAgIGInXHhmYicgOiAndScsCisgICAgICAgIGInXHhmYycgOiAndScsCisgICAgICAgIGInXHhmZCcgOiAneScsCisgICAgICAgIGInXHhmZScgOiAnYicsCisgICAgICAgIGInXHhmZicgOiAneScsCisgICAgICAgIH0KKworICAgICMgQSBtYXAgdXNlZCB3aGVuIHJlbW92aW5nIHJvZ3VlIFdpbmRvd3MtMTI1Mi9JU08tODg1OS0xCisgICAgIyBjaGFyYWN0ZXJzIGluIG90aGVyd2lzZSBVVEYtOCBkb2N1bWVudHMuCisgICAgIworICAgICMgTm90ZSB0aGF0IFx4ODEsIFx4OGQsIFx4OGYsIFx4OTAsIGFuZCBceDlkIGFyZSB1bmRlZmluZWQgaW4KKyAgICAjIFdpbmRvd3MtMTI1Mi4KKyAgICBXSU5ET1dTXzEyNTJfVE9fVVRGOCA9IHsKKyAgICAgICAgMHg4MCA6IGInXHhlMlx4ODJceGFjJywgIyDigqwKKyAgICAgICAgMHg4MiA6IGInXHhlMlx4ODBceDlhJywgIyDigJoKKyAgICAgICAgMHg4MyA6IGInXHhjNlx4OTInLCAgICAgIyDGkgorICAgICAgICAweDg0IDogYidceGUyXHg4MFx4OWUnLCAjIOKAngorICAgICAgICAweDg1IDogYidceGUyXHg4MFx4YTYnLCAjIOKApgorICAgICAgICAweDg2IDogYidceGUyXHg4MFx4YTAnLCAjIOKAoAorICAgICAgICAweDg3IDogYidceGUyXHg4MFx4YTEnLCAjIOKAoQorICAgICAgICAweDg4IDogYidceGNiXHg4NicsICAgICAjIMuGCisgICAgICAgIDB4ODkgOiBiJ1x4ZTJceDgwXHhiMCcsICMg4oCwCisgICAgICAgIDB4OGEgOiBiJ1x4YzVceGEwJywgICAgICMgxaAKKyAgICAgICAgMHg4YiA6IGInXHhlMlx4ODBceGI5JywgIyDigLkKKyAgICAgICAgMHg4YyA6IGInXHhjNVx4OTInLCAgICAgIyDFkgorICAgICAgICAweDhlIDogYidceGM1XHhiZCcsICAgICAjIMW9CisgICAgICAgIDB4OTEgOiBiJ1x4ZTJceDgwXHg5OCcsICMg4oCYCisgICAgICAgIDB4OTIgOiBiJ1x4ZTJceDgwXHg5OScsICMg4oCZCisgICAgICAgIDB4OTMgOiBiJ1x4ZTJceDgwXHg5YycsICMg4oCcCisgICAgICAgIDB4OTQgOiBiJ1x4ZTJceDgwXHg5ZCcsICMg4oCdCisgICAgICAgIDB4OTUgOiBiJ1x4ZTJceDgwXHhhMicsICMg4oCiCisgICAgICAgIDB4OTYgOiBiJ1x4ZTJceDgwXHg5MycsICMg4oCTCisgICAgICAgIDB4OTcgOiBiJ1x4ZTJceDgwXHg5NCcsICMg4oCUCisgICAgICAgIDB4OTggOiBiJ1x4Y2JceDljJywgICAgICMgy5wKKyAgICAgICAgMHg5OSA6IGInXHhlMlx4ODRceGEyJywgIyDihKIKKyAgICAgICAgMHg5YSA6IGInXHhjNVx4YTEnLCAgICAgIyDFoQorICAgICAgICAweDliIDogYidceGUyXHg4MFx4YmEnLCAjIOKAugorICAgICAgICAweDljIDogYidceGM1XHg5MycsICAgICAjIMWTCisgICAgICAgIDB4OWUgOiBiJ1x4YzVceGJlJywgICAgICMgxb4KKyAgICAgICAgMHg5ZiA6IGInXHhjNVx4YjgnLCAgICAgIyDFuAorICAgICAgICAweGEwIDogYidceGMyXHhhMCcsICAgICAjIMKgCisgICAgICAgIDB4YTEgOiBiJ1x4YzJceGExJywgICAgICMgwqEKKyAgICAgICAgMHhhMiA6IGInXHhjMlx4YTInLCAgICAgIyDCogorICAgICAgICAweGEzIDogYidceGMyXHhhMycsICAgICAjIMKjCisgICAgICAgIDB4YTQgOiBiJ1x4YzJceGE0JywgICAgICMgwqQKKyAgICAgICAgMHhhNSA6IGInXHhjMlx4YTUnLCAgICAgIyDCpQorICAgICAgICAweGE2IDogYidceGMyXHhhNicsICAgICAjIMKmCisgICAgICAgIDB4YTcgOiBiJ1x4YzJceGE3JywgICAgICMgwqcKKyAgICAgICAgMHhhOCA6IGInXHhjMlx4YTgnLCAgICAgIyDCqAorICAgICAgICAweGE5IDogYidceGMyXHhhOScsICAgICAjIMKpCisgICAgICAgIDB4YWEgOiBiJ1x4YzJceGFhJywgICAgICMgwqoKKyAgICAgICAgMHhhYiA6IGInXHhjMlx4YWInLCAgICAgIyDCqworICAgICAgICAweGFjIDogYidceGMyXHhhYycsICAgICAjIMKsCisgICAgICAgIDB4YWQgOiBiJ1x4YzJceGFkJywgICAgICMgwq0KKyAgICAgICAgMHhhZSA6IGInXHhjMlx4YWUnLCAgICAgIyDCrgorICAgICAgICAweGFmIDogYidceGMyXHhhZicsICAgICAjIMKvCisgICAgICAgIDB4YjAgOiBiJ1x4YzJceGIwJywgICAgICMgwrAKKyAgICAgICAgMHhiMSA6IGInXHhjMlx4YjEnLCAgICAgIyDCsQorICAgICAgICAweGIyIDogYidceGMyXHhiMicsICAgICAjIMKyCisgICAgICAgIDB4YjMgOiBiJ1x4YzJceGIzJywgICAgICMgwrMKKyAgICAgICAgMHhiNCA6IGInXHhjMlx4YjQnLCAgICAgIyDCtAorICAgICAgICAweGI1IDogYidceGMyXHhiNScsICAgICAjIMK1CisgICAgICAgIDB4YjYgOiBiJ1x4YzJceGI2JywgICAgICMgwrYKKyAgICAgICAgMHhiNyA6IGInXHhjMlx4YjcnLCAgICAgIyDCtworICAgICAgICAweGI4IDogYidceGMyXHhiOCcsICAgICAjIMK4CisgICAgICAgIDB4YjkgOiBiJ1x4YzJceGI5JywgICAgICMgwrkKKyAgICAgICAgMHhiYSA6IGInXHhjMlx4YmEnLCAgICAgIyDCugorICAgICAgICAweGJiIDogYidceGMyXHhiYicsICAgICAjIMK7CisgICAgICAgIDB4YmMgOiBiJ1x4YzJceGJjJywgICAgICMgwrwKKyAgICAgICAgMHhiZCA6IGInXHhjMlx4YmQnLCAgICAgIyDCvQorICAgICAgICAweGJlIDogYidceGMyXHhiZScsICAgICAjIMK+CisgICAgICAgIDB4YmYgOiBiJ1x4YzJceGJmJywgICAgICMgwr8KKyAgICAgICAgMHhjMCA6IGInXHhjM1x4ODAnLCAgICAgIyDDgAorICAgICAgICAweGMxIDogYidceGMzXHg4MScsICAgICAjIMOBCisgICAgICAgIDB4YzIgOiBiJ1x4YzNceDgyJywgICAgICMgw4IKKyAgICAgICAgMHhjMyA6IGInXHhjM1x4ODMnLCAgICAgIyDDgworICAgICAgICAweGM0IDogYidceGMzXHg4NCcsICAgICAjIMOECisgICAgICAgIDB4YzUgOiBiJ1x4YzNceDg1JywgICAgICMgw4UKKyAgICAgICAgMHhjNiA6IGInXHhjM1x4ODYnLCAgICAgIyDDhgorICAgICAgICAweGM3IDogYidceGMzXHg4NycsICAgICAjIMOHCisgICAgICAgIDB4YzggOiBiJ1x4YzNceDg4JywgICAgICMgw4gKKyAgICAgICAgMHhjOSA6IGInXHhjM1x4ODknLCAgICAgIyDDiQorICAgICAgICAweGNhIDogYidceGMzXHg4YScsICAgICAjIMOKCisgICAgICAgIDB4Y2IgOiBiJ1x4YzNceDhiJywgICAgICMgw4sKKyAgICAgICAgMHhjYyA6IGInXHhjM1x4OGMnLCAgICAgIyDDjAorICAgICAgICAweGNkIDogYidceGMzXHg4ZCcsICAgICAjIMONCisgICAgICAgIDB4Y2UgOiBiJ1x4YzNceDhlJywgICAgICMgw44KKyAgICAgICAgMHhjZiA6IGInXHhjM1x4OGYnLCAgICAgIyDDjworICAgICAgICAweGQwIDogYidceGMzXHg5MCcsICAgICAjIMOQCisgICAgICAgIDB4ZDEgOiBiJ1x4YzNceDkxJywgICAgICMgw5EKKyAgICAgICAgMHhkMiA6IGInXHhjM1x4OTInLCAgICAgIyDDkgorICAgICAgICAweGQzIDogYidceGMzXHg5MycsICAgICAjIMOTCisgICAgICAgIDB4ZDQgOiBiJ1x4YzNceDk0JywgICAgICMgw5QKKyAgICAgICAgMHhkNSA6IGInXHhjM1x4OTUnLCAgICAgIyDDlQorICAgICAgICAweGQ2IDogYidceGMzXHg5NicsICAgICAjIMOWCisgICAgICAgIDB4ZDcgOiBiJ1x4YzNceDk3JywgICAgICMgw5cKKyAgICAgICAgMHhkOCA6IGInXHhjM1x4OTgnLCAgICAgIyDDmAorICAgICAgICAweGQ5IDogYidceGMzXHg5OScsICAgICAjIMOZCisgICAgICAgIDB4ZGEgOiBiJ1x4YzNceDlhJywgICAgICMgw5oKKyAgICAgICAgMHhkYiA6IGInXHhjM1x4OWInLCAgICAgIyDDmworICAgICAgICAweGRjIDogYidceGMzXHg5YycsICAgICAjIMOcCisgICAgICAgIDB4ZGQgOiBiJ1x4YzNceDlkJywgICAgICMgw50KKyAgICAgICAgMHhkZSA6IGInXHhjM1x4OWUnLCAgICAgIyDDngorICAgICAgICAweGRmIDogYidceGMzXHg5ZicsICAgICAjIMOfCisgICAgICAgIDB4ZTAgOiBiJ1x4YzNceGEwJywgICAgICMgw6AKKyAgICAgICAgMHhlMSA6IGInXHhhMScsICAgICAjIMOhCisgICAgICAgIDB4ZTIgOiBiJ1x4YzNceGEyJywgICAgICMgw6IKKyAgICAgICAgMHhlMyA6IGInXHhjM1x4YTMnLCAgICAgIyDDoworICAgICAgICAweGU0IDogYidceGMzXHhhNCcsICAgICAjIMOkCisgICAgICAgIDB4ZTUgOiBiJ1x4YzNceGE1JywgICAgICMgw6UKKyAgICAgICAgMHhlNiA6IGInXHhjM1x4YTYnLCAgICAgIyDDpgorICAgICAgICAweGU3IDogYidceGMzXHhhNycsICAgICAjIMOnCisgICAgICAgIDB4ZTggOiBiJ1x4YzNceGE4JywgICAgICMgw6gKKyAgICAgICAgMHhlOSA6IGInXHhjM1x4YTknLCAgICAgIyDDqQorICAgICAgICAweGVhIDogYidceGMzXHhhYScsICAgICAjIMOqCisgICAgICAgIDB4ZWIgOiBiJ1x4YzNceGFiJywgICAgICMgw6sKKyAgICAgICAgMHhlYyA6IGInXHhjM1x4YWMnLCAgICAgIyDDrAorICAgICAgICAweGVkIDogYidceGMzXHhhZCcsICAgICAjIMOtCisgICAgICAgIDB4ZWUgOiBiJ1x4YzNceGFlJywgICAgICMgw64KKyAgICAgICAgMHhlZiA6IGInXHhjM1x4YWYnLCAgICAgIyDDrworICAgICAgICAweGYwIDogYidceGMzXHhiMCcsICAgICAjIMOwCisgICAgICAgIDB4ZjEgOiBiJ1x4YzNceGIxJywgICAgICMgw7EKKyAgICAgICAgMHhmMiA6IGInXHhjM1x4YjInLCAgICAgIyDDsgorICAgICAgICAweGYzIDogYidceGMzXHhiMycsICAgICAjIMOzCisgICAgICAgIDB4ZjQgOiBiJ1x4YzNceGI0JywgICAgICMgw7QKKyAgICAgICAgMHhmNSA6IGInXHhjM1x4YjUnLCAgICAgIyDDtQorICAgICAgICAweGY2IDogYidceGMzXHhiNicsICAgICAjIMO2CisgICAgICAgIDB4ZjcgOiBiJ1x4YzNceGI3JywgICAgICMgw7cKKyAgICAgICAgMHhmOCA6IGInXHhjM1x4YjgnLCAgICAgIyDDuAorICAgICAgICAweGY5IDogYidceGMzXHhiOScsICAgICAjIMO5CisgICAgICAgIDB4ZmEgOiBiJ1x4YzNceGJhJywgICAgICMgw7oKKyAgICAgICAgMHhmYiA6IGInXHhjM1x4YmInLCAgICAgIyDDuworICAgICAgICAweGZjIDogYidceGMzXHhiYycsICAgICAjIMO8CisgICAgICAgIDB4ZmQgOiBiJ1x4YzNceGJkJywgICAgICMgw70KKyAgICAgICAgMHhmZSA6IGInXHhjM1x4YmUnLCAgICAgIyDDvgorICAgICAgICB9CisKKyAgICBNVUxUSUJZVEVfTUFSS0VSU19BTkRfU0laRVMgPSBbCisgICAgICAgICgweGMyLCAweGRmLCAyKSwgIyAyLWJ5dGUgY2hhcmFjdGVycyBzdGFydCB3aXRoIGEgYnl0ZSBDMi1ERgorICAgICAgICAoMHhlMCwgMHhlZiwgMyksICMgMy1ieXRlIGNoYXJhY3RlcnMgc3RhcnQgd2l0aCBFMC1FRgorICAgICAgICAoMHhmMCwgMHhmNCwgNCksICMgNC1ieXRlIGNoYXJhY3RlcnMgc3RhcnQgd2l0aCBGMC1GNAorICAgICAgICBdCisKKyAgICBGSVJTVF9NVUxUSUJZVEVfTUFSS0VSID0gTVVMVElCWVRFX01BUktFUlNfQU5EX1NJWkVTWzBdWzBdCisgICAgTEFTVF9NVUxUSUJZVEVfTUFSS0VSID0gTVVMVElCWVRFX01BUktFUlNfQU5EX1NJWkVTWy0xXVsxXQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRldHdpbmdsZShjbHMsIGluX2J5dGVzLCBtYWluX2VuY29kaW5nPSJ1dGY4IiwKKyAgICAgICAgICAgICAgICAgIGVtYmVkZGVkX2VuY29kaW5nPSJ3aW5kb3dzLTEyNTIiKToKKyAgICAgICAgIiIiRml4IGNoYXJhY3RlcnMgZnJvbSBvbmUgZW5jb2RpbmcgZW1iZWRkZWQgaW4gc29tZSBvdGhlciBlbmNvZGluZy4KKworICAgICAgICBDdXJyZW50bHkgdGhlIG9ubHkgc2l0dWF0aW9uIHN1cHBvcnRlZCBpcyBXaW5kb3dzLTEyNTIgKG9yIGl0cworICAgICAgICBzdWJzZXQgSVNPLTg4NTktMSksIGVtYmVkZGVkIGluIFVURi04LgorCisgICAgICAgIFRoZSBpbnB1dCBtdXN0IGJlIGEgYnl0ZXN0cmluZy4gSWYgeW91J3ZlIGFscmVhZHkgY29udmVydGVkCisgICAgICAgIHRoZSBkb2N1bWVudCB0byBVbmljb2RlLCB5b3UncmUgdG9vIGxhdGUuCisKKyAgICAgICAgVGhlIG91dHB1dCBpcyBhIGJ5dGVzdHJpbmcgaW4gd2hpY2ggYGVtYmVkZGVkX2VuY29kaW5nYAorICAgICAgICBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gdGhlaXIgYG1haW5fZW5jb2RpbmdgCisgICAgICAgIGVxdWl2YWxlbnRzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgZW1iZWRkZWRfZW5jb2RpbmcucmVwbGFjZSgnXycsICctJykubG93ZXIoKSBub3QgaW4gKAorICAgICAgICAgICAgJ3dpbmRvd3MtMTI1MicsICd3aW5kb3dzXzEyNTInKToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCisgICAgICAgICAgICAgICAgIldpbmRvd3MtMTI1MiBhbmQgSVNPLTg4NTktMSBhcmUgdGhlIG9ubHkgY3VycmVudGx5IHN1cHBvcnRlZCAiCisgICAgICAgICAgICAgICAgImVtYmVkZGVkIGVuY29kaW5ncy4iKQorCisgICAgICAgIGlmIG1haW5fZW5jb2RpbmcubG93ZXIoKSBub3QgaW4gKCd1dGY4JywgJ3V0Zi04Jyk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAorICAgICAgICAgICAgICAgICJVVEYtOCBpcyB0aGUgb25seSBjdXJyZW50bHkgc3VwcG9ydGVkIG1haW4gZW5jb2RpbmcuIikKKworICAgICAgICBieXRlX2NodW5rcyA9IFtdCisKKyAgICAgICAgY2h1bmtfc3RhcnQgPSAwCisgICAgICAgIHBvcyA9IDAKKyAgICAgICAgd2hpbGUgcG9zIDwgbGVuKGluX2J5dGVzKToKKyAgICAgICAgICAgIGJ5dGUgPSBpbl9ieXRlc1twb3NdCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShieXRlLCBpbnQpOgorICAgICAgICAgICAgICAgICMgUHl0aG9uIDIueAorICAgICAgICAgICAgICAgIGJ5dGUgPSBvcmQoYnl0ZSkKKyAgICAgICAgICAgIGlmIChieXRlID49IGNscy5GSVJTVF9NVUxUSUJZVEVfTUFSS0VSCisgICAgICAgICAgICAgICAgYW5kIGJ5dGUgPD0gY2xzLkxBU1RfTVVMVElCWVRFX01BUktFUik6CisgICAgICAgICAgICAgICAgIyBUaGlzIGlzIHRoZSBzdGFydCBvZiBhIFVURi04IG11bHRpYnl0ZSBjaGFyYWN0ZXIuIFNraXAKKyAgICAgICAgICAgICAgICAjIHRvIHRoZSBlbmQuCisgICAgICAgICAgICAgICAgZm9yIHN0YXJ0LCBlbmQsIHNpemUgaW4gY2xzLk1VTFRJQllURV9NQVJLRVJTX0FORF9TSVpFUzoKKyAgICAgICAgICAgICAgICAgICAgaWYgYnl0ZSA+PSBzdGFydCBhbmQgYnl0ZSA8PSBlbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwb3MgKz0gc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsaWYgYnl0ZSA+PSAweDgwIGFuZCBieXRlIGluIGNscy5XSU5ET1dTXzEyNTJfVE9fVVRGODoKKyAgICAgICAgICAgICAgICAjIFdlIGZvdW5kIGEgV2luZG93cy0xMjUyIGNoYXJhY3RlciEKKyAgICAgICAgICAgICAgICAjIFNhdmUgdGhlIHN0cmluZyB1cCB0byB0aGlzIHBvaW50IGFzIGEgY2h1bmsuCisgICAgICAgICAgICAgICAgYnl0ZV9jaHVua3MuYXBwZW5kKGluX2J5dGVzW2NodW5rX3N0YXJ0OnBvc10pCisKKyAgICAgICAgICAgICAgICAjIE5vdyB0cmFuc2xhdGUgdGhlIFdpbmRvd3MtMTI1MiBjaGFyYWN0ZXIgaW50byBVVEYtOAorICAgICAgICAgICAgICAgICMgYW5kIGFkZCBpdCBhcyBhbm90aGVyLCBvbmUtYnl0ZSBjaHVuay4KKyAgICAgICAgICAgICAgICBieXRlX2NodW5rcy5hcHBlbmQoY2xzLldJTkRPV1NfMTI1Ml9UT19VVEY4W2J5dGVdKQorICAgICAgICAgICAgICAgIHBvcyArPSAxCisgICAgICAgICAgICAgICAgY2h1bmtfc3RhcnQgPSBwb3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBHbyBvbiB0byB0aGUgbmV4dCBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgcG9zICs9IDEKKyAgICAgICAgaWYgY2h1bmtfc3RhcnQgPT0gMDoKKyAgICAgICAgICAgICMgVGhlIHN0cmluZyBpcyB1bmNoYW5nZWQuCisgICAgICAgICAgICByZXR1cm4gaW5fYnl0ZXMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgU3RvcmUgdGhlIGZpbmFsIGNodW5rLgorICAgICAgICAgICAgYnl0ZV9jaHVua3MuYXBwZW5kKGluX2J5dGVzW2NodW5rX3N0YXJ0Ol0pCisgICAgICAgIHJldHVybiBiJycuam9pbihieXRlX2NodW5rcykKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvZGlhZ25vc2UucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9kaWFnbm9zZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDBiMDBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvZGlhZ25vc2UucHkKQEAgLTAsMCArMSwyMDQgQEAKKyIiIkRpYWdub3N0aWMgZnVuY3Rpb25zLCBtYWlubHkgZm9yIHVzZSB3aGVuIGRvaW5nIHRlY2ggc3VwcG9ydC4iIiIKK2ltcG9ydCBjUHJvZmlsZQorZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gSFRNTFBhcnNlciBpbXBvcnQgSFRNTFBhcnNlcgoraW1wb3J0IGJzNAorZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAsIF9fdmVyc2lvbl9fCitmcm9tIGJzNC5idWlsZGVyIGltcG9ydCBidWlsZGVyX3JlZ2lzdHJ5CisKK2ltcG9ydCBvcworaW1wb3J0IHBzdGF0cworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGltZQoraW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHN5cworaW1wb3J0IGNQcm9maWxlCisKK2RlZiBkaWFnbm9zZShkYXRhKToKKyAgICAiIiJEaWFnbm9zdGljIHN1aXRlIGZvciBpc29sYXRpbmcgY29tbW9uIHByb2JsZW1zLiIiIgorICAgIHByaW50ICJEaWFnbm9zdGljIHJ1bm5pbmcgb24gQmVhdXRpZnVsIFNvdXAgJXMiICUgX192ZXJzaW9uX18KKyAgICBwcmludCAiUHl0aG9uIHZlcnNpb24gJXMiICUgc3lzLnZlcnNpb24KKworICAgIGJhc2ljX3BhcnNlcnMgPSBbImh0bWwucGFyc2VyIiwgImh0bWw1bGliIiwgImx4bWwiXQorICAgIGZvciBuYW1lIGluIGJhc2ljX3BhcnNlcnM6CisgICAgICAgIGZvciBidWlsZGVyIGluIGJ1aWxkZXJfcmVnaXN0cnkuYnVpbGRlcnM6CisgICAgICAgICAgICBpZiBuYW1lIGluIGJ1aWxkZXIuZmVhdHVyZXM6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJhc2ljX3BhcnNlcnMucmVtb3ZlKG5hbWUpCisgICAgICAgICAgICBwcmludCAoCisgICAgICAgICAgICAgICAgIkkgbm90aWNlZCB0aGF0ICVzIGlzIG5vdCBpbnN0YWxsZWQuIEluc3RhbGxpbmcgaXQgbWF5IGhlbHAuIiAlCisgICAgICAgICAgICAgICAgbmFtZSkKKworICAgIGlmICdseG1sJyBpbiBiYXNpY19wYXJzZXJzOgorICAgICAgICBiYXNpY19wYXJzZXJzLmFwcGVuZChbImx4bWwiLCAieG1sIl0pCisgICAgICAgIGZyb20gbHhtbCBpbXBvcnQgZXRyZWUKKyAgICAgICAgcHJpbnQgIkZvdW5kIGx4bWwgdmVyc2lvbiAlcyIgJSAiLiIuam9pbihtYXAoc3RyLGV0cmVlLkxYTUxfVkVSU0lPTikpCisKKyAgICBpZiAnaHRtbDVsaWInIGluIGJhc2ljX3BhcnNlcnM6CisgICAgICAgIGltcG9ydCBodG1sNWxpYgorICAgICAgICBwcmludCAiRm91bmQgaHRtbDVsaWIgdmVyc2lvbiAlcyIgJSBodG1sNWxpYi5fX3ZlcnNpb25fXworCisgICAgaWYgaGFzYXR0cihkYXRhLCAncmVhZCcpOgorICAgICAgICBkYXRhID0gZGF0YS5yZWFkKCkKKyAgICBlbGlmIG9zLnBhdGguZXhpc3RzKGRhdGEpOgorICAgICAgICBwcmludCAnIiVzIiBsb29rcyBsaWtlIGEgZmlsZW5hbWUuIFJlYWRpbmcgZGF0YSBmcm9tIHRoZSBmaWxlLicgJSBkYXRhCisgICAgICAgIGRhdGEgPSBvcGVuKGRhdGEpLnJlYWQoKQorICAgIGVsaWYgZGF0YS5zdGFydHN3aXRoKCJodHRwOiIpIG9yIGRhdGEuc3RhcnRzd2l0aCgiaHR0cHM6Iik6CisgICAgICAgIHByaW50ICciJXMiIGxvb2tzIGxpa2UgYSBVUkwuIEJlYXV0aWZ1bCBTb3VwIGlzIG5vdCBhbiBIVFRQIGNsaWVudC4nICUgZGF0YQorICAgICAgICBwcmludCAiWW91IG5lZWQgdG8gdXNlIHNvbWUgb3RoZXIgbGlicmFyeSB0byBnZXQgdGhlIGRvY3VtZW50IGJlaGluZCB0aGUgVVJMLCBhbmQgZmVlZCB0aGF0IGRvY3VtZW50IHRvIEJlYXV0aWZ1bCBTb3VwLiIKKyAgICAgICAgcmV0dXJuCisgICAgcHJpbnQKKworICAgIGZvciBwYXJzZXIgaW4gYmFzaWNfcGFyc2VyczoKKyAgICAgICAgcHJpbnQgIlRyeWluZyB0byBwYXJzZSB5b3VyIG1hcmt1cCB3aXRoICVzIiAlIHBhcnNlcgorICAgICAgICBzdWNjZXNzID0gRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc291cCA9IEJlYXV0aWZ1bFNvdXAoZGF0YSwgcGFyc2VyKQorICAgICAgICAgICAgc3VjY2VzcyA9IFRydWUKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHByaW50ICIlcyBjb3VsZCBub3QgcGFyc2UgdGhlIG1hcmt1cC4iICUgcGFyc2VyCisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgaWYgc3VjY2VzczoKKyAgICAgICAgICAgIHByaW50ICJIZXJlJ3Mgd2hhdCAlcyBkaWQgd2l0aCB0aGUgbWFya3VwOiIgJSBwYXJzZXIKKyAgICAgICAgICAgIHByaW50IHNvdXAucHJldHRpZnkoKQorCisgICAgICAgIHByaW50ICItIiAqIDgwCisKK2RlZiBseG1sX3RyYWNlKGRhdGEsIGh0bWw9VHJ1ZSwgKiprd2FyZ3MpOgorICAgICIiIlByaW50IG91dCB0aGUgbHhtbCBldmVudHMgdGhhdCBvY2N1ciBkdXJpbmcgcGFyc2luZy4KKworICAgIFRoaXMgbGV0cyB5b3Ugc2VlIGhvdyBseG1sIHBhcnNlcyBhIGRvY3VtZW50IHdoZW4gbm8gQmVhdXRpZnVsCisgICAgU291cCBjb2RlIGlzIHJ1bm5pbmcuCisgICAgIiIiCisgICAgZnJvbSBseG1sIGltcG9ydCBldHJlZQorICAgIGZvciBldmVudCwgZWxlbWVudCBpbiBldHJlZS5pdGVycGFyc2UoU3RyaW5nSU8oZGF0YSksIGh0bWw9aHRtbCwgKiprd2FyZ3MpOgorICAgICAgICBwcmludCgiJXMsICU0cywgJXMiICUgKGV2ZW50LCBlbGVtZW50LnRhZywgZWxlbWVudC50ZXh0KSkKKworY2xhc3MgQW5ub3VuY2luZ1BhcnNlcihIVE1MUGFyc2VyKToKKyAgICAiIiJBbm5vdW5jZXMgSFRNTFBhcnNlciBwYXJzZSBldmVudHMsIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcgZWxzZS4iIiIKKworICAgIGRlZiBfcChzZWxmLCBzKToKKyAgICAgICAgcHJpbnQocykKKworICAgIGRlZiBoYW5kbGVfc3RhcnR0YWcoc2VsZiwgbmFtZSwgYXR0cnMpOgorICAgICAgICBzZWxmLl9wKCIlcyBTVEFSVCIgJSBuYW1lKQorCisgICAgZGVmIGhhbmRsZV9lbmR0YWcoc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYuX3AoIiVzIEVORCIgJSBuYW1lKQorCisgICAgZGVmIGhhbmRsZV9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl9wKCIlcyBEQVRBIiAlIGRhdGEpCisKKyAgICBkZWYgaGFuZGxlX2NoYXJyZWYoc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYuX3AoIiVzIENIQVJSRUYiICUgbmFtZSkKKworICAgIGRlZiBoYW5kbGVfZW50aXR5cmVmKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLl9wKCIlcyBFTlRJVFlSRUYiICUgbmFtZSkKKworICAgIGRlZiBoYW5kbGVfY29tbWVudChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5fcCgiJXMgQ09NTUVOVCIgJSBkYXRhKQorCisgICAgZGVmIGhhbmRsZV9kZWNsKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl9wKCIlcyBERUNMIiAlIGRhdGEpCisKKyAgICBkZWYgdW5rbm93bl9kZWNsKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl9wKCIlcyBVTktOT1dOLURFQ0wiICUgZGF0YSkKKworICAgIGRlZiBoYW5kbGVfcGkoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuX3AoIiVzIFBJIiAlIGRhdGEpCisKK2RlZiBodG1scGFyc2VyX3RyYWNlKGRhdGEpOgorICAgICIiIlByaW50IG91dCB0aGUgSFRNTFBhcnNlciBldmVudHMgdGhhdCBvY2N1ciBkdXJpbmcgcGFyc2luZy4KKworICAgIFRoaXMgbGV0cyB5b3Ugc2VlIGhvdyBIVE1MUGFyc2VyIHBhcnNlcyBhIGRvY3VtZW50IHdoZW4gbm8KKyAgICBCZWF1dGlmdWwgU291cCBjb2RlIGlzIHJ1bm5pbmcuCisgICAgIiIiCisgICAgcGFyc2VyID0gQW5ub3VuY2luZ1BhcnNlcigpCisgICAgcGFyc2VyLmZlZWQoZGF0YSkKKworX3Zvd2VscyA9ICJhZWlvdSIKK19jb25zb25hbnRzID0gImJjZGZnaGprbG1ucHFyc3R2d3h5eiIKKworZGVmIHJ3b3JkKGxlbmd0aD01KToKKyAgICAiR2VuZXJhdGUgYSByYW5kb20gd29yZC1saWtlIHN0cmluZy4iCisgICAgcyA9ICcnCisgICAgZm9yIGkgaW4gcmFuZ2UobGVuZ3RoKToKKyAgICAgICAgaWYgaSAlIDIgPT0gMDoKKyAgICAgICAgICAgIHQgPSBfY29uc29uYW50cworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdCA9IF92b3dlbHMKKyAgICAgICAgcyArPSByYW5kb20uY2hvaWNlKHQpCisgICAgcmV0dXJuIHMKKworZGVmIHJzZW50ZW5jZShsZW5ndGg9NCk6CisgICAgIkdlbmVyYXRlIGEgcmFuZG9tIHNlbnRlbmNlLWxpa2Ugc3RyaW5nLiIKKyAgICByZXR1cm4gIiAiLmpvaW4ocndvcmQocmFuZG9tLnJhbmRpbnQoNCw5KSkgZm9yIGkgaW4gcmFuZ2UobGVuZ3RoKSkKKyAgICAgICAgCitkZWYgcmRvYyhudW1fZWxlbWVudHM9MTAwMCk6CisgICAgIiIiUmFuZG9tbHkgZ2VuZXJhdGUgYW4gaW52YWxpZCBIVE1MIGRvY3VtZW50LiIiIgorICAgIHRhZ19uYW1lcyA9IFsncCcsICdkaXYnLCAnc3BhbicsICdpJywgJ2InLCAnc2NyaXB0JywgJ3RhYmxlJ10KKyAgICBlbGVtZW50cyA9IFtdCisgICAgZm9yIGkgaW4gcmFuZ2UobnVtX2VsZW1lbnRzKToKKyAgICAgICAgY2hvaWNlID0gcmFuZG9tLnJhbmRpbnQoMCwzKQorICAgICAgICBpZiBjaG9pY2UgPT0gMDoKKyAgICAgICAgICAgICMgTmV3IHRhZy4KKyAgICAgICAgICAgIHRhZ19uYW1lID0gcmFuZG9tLmNob2ljZSh0YWdfbmFtZXMpCisgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQoIjwlcz4iICUgdGFnX25hbWUpCisgICAgICAgIGVsaWYgY2hvaWNlID09IDE6CisgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQocnNlbnRlbmNlKHJhbmRvbS5yYW5kaW50KDEsNCkpKQorICAgICAgICBlbGlmIGNob2ljZSA9PSAyOgorICAgICAgICAgICAgIyBDbG9zZSBhIHRhZy4KKyAgICAgICAgICAgIHRhZ19uYW1lID0gcmFuZG9tLmNob2ljZSh0YWdfbmFtZXMpCisgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQoIjwvJXM+IiAlIHRhZ19uYW1lKQorICAgIHJldHVybiAiPGh0bWw+IiArICJcbiIuam9pbihlbGVtZW50cykgKyAiPC9odG1sPiIKKworZGVmIGJlbmNobWFya19wYXJzZXJzKG51bV9lbGVtZW50cz0xMDAwMDApOgorICAgICIiIlZlcnkgYmFzaWMgaGVhZC10by1oZWFkIHBlcmZvcm1hbmNlIGJlbmNobWFyay4iIiIKKyAgICBwcmludCAiQ29tcGFyYXRpdmUgcGFyc2VyIGJlbmNobWFyayBvbiBCZWF1dGlmdWwgU291cCAlcyIgJSBfX3ZlcnNpb25fXworICAgIGRhdGEgPSByZG9jKG51bV9lbGVtZW50cykKKyAgICBwcmludCAiR2VuZXJhdGVkIGEgbGFyZ2UgaW52YWxpZCBIVE1MIGRvY3VtZW50ICglZCBieXRlcykuIiAlIGxlbihkYXRhKQorICAgIAorICAgIGZvciBwYXJzZXIgaW4gWyJseG1sIiwgWyJseG1sIiwgImh0bWwiXSwgImh0bWw1bGliIiwgImh0bWwucGFyc2VyIl06CisgICAgICAgIHN1Y2Nlc3MgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBhID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKGRhdGEsIHBhcnNlcikKKyAgICAgICAgICAgIGIgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgc3VjY2VzcyA9IFRydWUKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHByaW50ICIlcyBjb3VsZCBub3QgcGFyc2UgdGhlIG1hcmt1cC4iICUgcGFyc2VyCisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgaWYgc3VjY2VzczoKKyAgICAgICAgICAgIHByaW50ICJCUzQrJXMgcGFyc2VkIHRoZSBtYXJrdXAgaW4gJS4yZnMuIiAlIChwYXJzZXIsIGItYSkKKworICAgIGZyb20gbHhtbCBpbXBvcnQgZXRyZWUKKyAgICBhID0gdGltZS50aW1lKCkKKyAgICBldHJlZS5IVE1MKGRhdGEpCisgICAgYiA9IHRpbWUudGltZSgpCisgICAgcHJpbnQgIlJhdyBseG1sIHBhcnNlZCB0aGUgbWFya3VwIGluICUuMmZzLiIgJSAoYi1hKQorCisgICAgaW1wb3J0IGh0bWw1bGliCisgICAgcGFyc2VyID0gaHRtbDVsaWIuSFRNTFBhcnNlcigpCisgICAgYSA9IHRpbWUudGltZSgpCisgICAgcGFyc2VyLnBhcnNlKGRhdGEpCisgICAgYiA9IHRpbWUudGltZSgpCisgICAgcHJpbnQgIlJhdyBodG1sNWxpYiBwYXJzZWQgdGhlIG1hcmt1cCBpbiAlLjJmcy4iICUgKGItYSkKKworZGVmIHByb2ZpbGUobnVtX2VsZW1lbnRzPTEwMDAwMCwgcGFyc2VyPSJseG1sIik6CisKKyAgICBmaWxlaGFuZGxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKKyAgICBmaWxlbmFtZSA9IGZpbGVoYW5kbGUubmFtZQorCisgICAgZGF0YSA9IHJkb2MobnVtX2VsZW1lbnRzKQorICAgIHZhcnMgPSBkaWN0KGJzND1iczQsIGRhdGE9ZGF0YSwgcGFyc2VyPXBhcnNlcikKKyAgICBjUHJvZmlsZS5ydW5jdHgoJ2JzNC5CZWF1dGlmdWxTb3VwKGRhdGEsIHBhcnNlciknICwgdmFycywgdmFycywgZmlsZW5hbWUpCisKKyAgICBzdGF0cyA9IHBzdGF0cy5TdGF0cyhmaWxlbmFtZSkKKyAgICAjIHN0YXRzLnN0cmlwX2RpcnMoKQorICAgIHN0YXRzLnNvcnRfc3RhdHMoImN1bXVsYXRpdmUiKQorICAgIHN0YXRzLnByaW50X3N0YXRzKCdfaHRtbDVsaWJ8YnM0JywgNTApCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgZGlhZ25vc2Uoc3lzLnN0ZGluLnJlYWQoKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2VsZW1lbnQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9lbGVtZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOWFmZGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9lbGVtZW50LnB5CkBAIC0wLDAgKzEsMTYxMSBAQAoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworZnJvbSBiczQuZGFtbWl0IGltcG9ydCBFbnRpdHlTdWJzdGl0dXRpb24KKworREVGQVVMVF9PVVRQVVRfRU5DT0RJTkcgPSAidXRmLTgiCitQWTNLID0gKHN5cy52ZXJzaW9uX2luZm9bMF0gPiAyKQorCit3aGl0ZXNwYWNlX3JlID0gcmUuY29tcGlsZSgiXHMrIikKKworZGVmIF9hbGlhcyhhdHRyKToKKyAgICAiIiJBbGlhcyBvbmUgYXR0cmlidXRlIG5hbWUgdG8gYW5vdGhlciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSIiIgorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhbGlhcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgYXR0cikKKworICAgIEBhbGlhcy5zZXR0ZXIKKyAgICBkZWYgYWxpYXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZXRhdHRyKHNlbGYsIGF0dHIpCisgICAgcmV0dXJuIGFsaWFzCisKKworY2xhc3MgTmFtZXNwYWNlZEF0dHJpYnV0ZSh1bmljb2RlKToKKworICAgIGRlZiBfX25ld19fKGNscywgcHJlZml4LCBuYW1lLCBuYW1lc3BhY2U9Tm9uZSk6CisgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIG9iaiA9IHVuaWNvZGUuX19uZXdfXyhjbHMsIHByZWZpeCkKKyAgICAgICAgZWxpZiBwcmVmaXggaXMgTm9uZToKKyAgICAgICAgICAgICMgTm90IHJlYWxseSBuYW1lc3BhY2VkLgorICAgICAgICAgICAgb2JqID0gdW5pY29kZS5fX25ld19fKGNscywgbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9iaiA9IHVuaWNvZGUuX19uZXdfXyhjbHMsIHByZWZpeCArICI6IiArIG5hbWUpCisgICAgICAgIG9iai5wcmVmaXggPSBwcmVmaXgKKyAgICAgICAgb2JqLm5hbWUgPSBuYW1lCisgICAgICAgIG9iai5uYW1lc3BhY2UgPSBuYW1lc3BhY2UKKyAgICAgICAgcmV0dXJuIG9iagorCitjbGFzcyBBdHRyaWJ1dGVWYWx1ZVdpdGhDaGFyc2V0U3Vic3RpdHV0aW9uKHVuaWNvZGUpOgorICAgICIiIkEgc3RhbmQtaW4gb2JqZWN0IGZvciBhIGNoYXJhY3RlciBlbmNvZGluZyBzcGVjaWZpZWQgaW4gSFRNTC4iIiIKKworY2xhc3MgQ2hhcnNldE1ldGFBdHRyaWJ1dGVWYWx1ZShBdHRyaWJ1dGVWYWx1ZVdpdGhDaGFyc2V0U3Vic3RpdHV0aW9uKToKKyAgICAiIiJBIGdlbmVyaWMgc3RhbmQtaW4gZm9yIHRoZSB2YWx1ZSBvZiBhIG1ldGEgdGFnJ3MgJ2NoYXJzZXQnIGF0dHJpYnV0ZS4KKworICAgIFdoZW4gQmVhdXRpZnVsIFNvdXAgcGFyc2VzIHRoZSBtYXJrdXAgJzxtZXRhIGNoYXJzZXQ9InV0ZjgiPicsIHRoZQorICAgIHZhbHVlIG9mIHRoZSAnY2hhcnNldCcgYXR0cmlidXRlIHdpbGwgYmUgb25lIG9mIHRoZXNlIG9iamVjdHMuCisgICAgIiIiCisKKyAgICBkZWYgX19uZXdfXyhjbHMsIG9yaWdpbmFsX3ZhbHVlKToKKyAgICAgICAgb2JqID0gdW5pY29kZS5fX25ld19fKGNscywgb3JpZ2luYWxfdmFsdWUpCisgICAgICAgIG9iai5vcmlnaW5hbF92YWx1ZSA9IG9yaWdpbmFsX3ZhbHVlCisgICAgICAgIHJldHVybiBvYmoKKworICAgIGRlZiBlbmNvZGUoc2VsZiwgZW5jb2RpbmcpOgorICAgICAgICByZXR1cm4gZW5jb2RpbmcKKworCitjbGFzcyBDb250ZW50TWV0YUF0dHJpYnV0ZVZhbHVlKEF0dHJpYnV0ZVZhbHVlV2l0aENoYXJzZXRTdWJzdGl0dXRpb24pOgorICAgICIiIkEgZ2VuZXJpYyBzdGFuZC1pbiBmb3IgdGhlIHZhbHVlIG9mIGEgbWV0YSB0YWcncyAnY29udGVudCcgYXR0cmlidXRlLgorCisgICAgV2hlbiBCZWF1dGlmdWwgU291cCBwYXJzZXMgdGhlIG1hcmt1cDoKKyAgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmOCI+CisKKyAgICBUaGUgdmFsdWUgb2YgdGhlICdjb250ZW50JyBhdHRyaWJ1dGUgd2lsbCBiZSBvbmUgb2YgdGhlc2Ugb2JqZWN0cy4KKyAgICAiIiIKKworICAgIENIQVJTRVRfUkUgPSByZS5jb21waWxlKCIoKF58OylccypjaGFyc2V0PSkoW147XSopIiwgcmUuTSkKKworICAgIGRlZiBfX25ld19fKGNscywgb3JpZ2luYWxfdmFsdWUpOgorICAgICAgICBtYXRjaCA9IGNscy5DSEFSU0VUX1JFLnNlYXJjaChvcmlnaW5hbF92YWx1ZSkKKyAgICAgICAgaWYgbWF0Y2ggaXMgTm9uZToKKyAgICAgICAgICAgICMgTm8gc3Vic3RpdHV0aW9uIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgIHJldHVybiB1bmljb2RlLl9fbmV3X18odW5pY29kZSwgb3JpZ2luYWxfdmFsdWUpCisKKyAgICAgICAgb2JqID0gdW5pY29kZS5fX25ld19fKGNscywgb3JpZ2luYWxfdmFsdWUpCisgICAgICAgIG9iai5vcmlnaW5hbF92YWx1ZSA9IG9yaWdpbmFsX3ZhbHVlCisgICAgICAgIHJldHVybiBvYmoKKworICAgIGRlZiBlbmNvZGUoc2VsZiwgZW5jb2RpbmcpOgorICAgICAgICBkZWYgcmV3cml0ZShtYXRjaCk6CisgICAgICAgICAgICByZXR1cm4gbWF0Y2guZ3JvdXAoMSkgKyBlbmNvZGluZworICAgICAgICByZXR1cm4gc2VsZi5DSEFSU0VUX1JFLnN1YihyZXdyaXRlLCBzZWxmLm9yaWdpbmFsX3ZhbHVlKQorCitjbGFzcyBIVE1MQXdhcmVFbnRpdHlTdWJzdGl0dXRpb24oRW50aXR5U3Vic3RpdHV0aW9uKToKKworICAgICIiIkVudGl0eSBzdWJzdGl0dXRpb24gcnVsZXMgdGhhdCBhcmUgYXdhcmUgb2Ygc29tZSBIVE1MIHF1aXJrcy4KKworICAgIFNwZWNpZmljYWxseSwgdGhlIGNvbnRlbnRzIG9mIDxzY3JpcHQ+IGFuZCA8c3R5bGU+IHRhZ3Mgc2hvdWxkIG5vdAorICAgIHVuZGVyZ28gZW50aXR5IHN1YnN0aXR1dGlvbi4KKworICAgIEluY29taW5nIE5hdmlnYWJsZVN0cmluZyBvYmplY3RzIGFyZSBjaGVja2VkIHRvIHNlZSBpZiB0aGV5J3JlIHRoZQorICAgIGRpcmVjdCBjaGlsZHJlbiBvZiBhIDxzY3JpcHQ+IG9yIDxzdHlsZT4gdGFnLgorICAgICIiIgorCisgICAgY2RhdGFfY29udGFpbmluZ190YWdzID0gc2V0KFsic2NyaXB0IiwgInN0eWxlIl0pCisKKyAgICBwcmVmb3JtYXR0ZWRfdGFncyA9IHNldChbInByZSJdKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9zdWJzdGl0dXRlX2lmX2FwcHJvcHJpYXRlKGNscywgbnMsIGYpOgorICAgICAgICBpZiAoaXNpbnN0YW5jZShucywgTmF2aWdhYmxlU3RyaW5nKQorICAgICAgICAgICAgYW5kIG5zLnBhcmVudCBpcyBub3QgTm9uZQorICAgICAgICAgICAgYW5kIG5zLnBhcmVudC5uYW1lIGluIGNscy5jZGF0YV9jb250YWluaW5nX3RhZ3MpOgorICAgICAgICAgICAgIyBEbyBub3RoaW5nLgorICAgICAgICAgICAgcmV0dXJuIG5zCisgICAgICAgICMgU3Vic3RpdHV0ZS4KKyAgICAgICAgcmV0dXJuIGYobnMpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc3Vic3RpdHV0ZV9odG1sKGNscywgbnMpOgorICAgICAgICByZXR1cm4gY2xzLl9zdWJzdGl0dXRlX2lmX2FwcHJvcHJpYXRlKAorICAgICAgICAgICAgbnMsIEVudGl0eVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlX2h0bWwpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc3Vic3RpdHV0ZV94bWwoY2xzLCBucyk6CisgICAgICAgIHJldHVybiBjbHMuX3N1YnN0aXR1dGVfaWZfYXBwcm9wcmlhdGUoCisgICAgICAgICAgICBucywgRW50aXR5U3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVfeG1sKQorCitjbGFzcyBQYWdlRWxlbWVudChvYmplY3QpOgorICAgICIiIkNvbnRhaW5zIHRoZSBuYXZpZ2F0aW9uYWwgaW5mb3JtYXRpb24gZm9yIHNvbWUgcGFydCBvZiB0aGUgcGFnZQorICAgIChlaXRoZXIgYSB0YWcgb3IgYSBwaWVjZSBvZiB0ZXh0KSIiIgorCisgICAgIyBUaGVyZSBhcmUgZml2ZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSAiZm9ybWF0dGVyIiBhcmd1bWVudCBwYXNzZWQgaW4KKyAgICAjIHRvIG1ldGhvZHMgbGlrZSBlbmNvZGUoKSBhbmQgcHJldHRpZnkoKToKKyAgICAjCisgICAgIyAiaHRtbCIgLSBBbGwgVW5pY29kZSBjaGFyYWN0ZXJzIHdpdGggY29ycmVzcG9uZGluZyBIVE1MIGVudGl0aWVzCisgICAgIyAgIGFyZSBjb252ZXJ0ZWQgdG8gdGhvc2UgZW50aXRpZXMgb24gb3V0cHV0LgorICAgICMgIm1pbmltYWwiIC0gQmFyZSBhbXBlcnNhbmRzIGFuZCBhbmdsZSBicmFja2V0cyBhcmUgY29udmVydGVkIHRvCisgICAgIyAgIFhNTCBlbnRpdGllczogJmFtcDsgJmx0OyAmZ3Q7CisgICAgIyBOb25lIC0gVGhlIG51bGwgZm9ybWF0dGVyLiBVbmljb2RlIGNoYXJhY3RlcnMgYXJlIG5ldmVyCisgICAgIyAgIGNvbnZlcnRlZCB0byBlbnRpdGllcy4gIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkLCBidXQgaXQncworICAgICMgICBmYXN0ZXIgdGhhbiAibWluaW1hbCIuCisgICAgIyBBIGZ1bmN0aW9uIC0gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBvbiBldmVyeSBzdHJpbmcgdGhhdAorICAgICMgIG5lZWRzIHRvIHVuZGVyZ28gZW50aXR5IHN1YnN0aXR1dGlvbi4KKyAgICAjCisKKyAgICAjIEluIGFuIEhUTUwgZG9jdW1lbnQsIHRoZSBkZWZhdWx0ICJodG1sIiBhbmQgIm1pbmltYWwiIGZ1bmN0aW9ucworICAgICMgd2lsbCBsZWF2ZSB0aGUgY29udGVudHMgb2YgPHNjcmlwdD4gYW5kIDxzdHlsZT4gdGFncyBhbG9uZS4gRm9yCisgICAgIyBhbiBYTUwgZG9jdW1lbnQsIGFsbCB0YWdzIHdpbGwgYmUgZ2l2ZW4gdGhlIHNhbWUgdHJlYXRtZW50LgorCisgICAgSFRNTF9GT1JNQVRURVJTID0geworICAgICAgICAiaHRtbCIgOiBIVE1MQXdhcmVFbnRpdHlTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZV9odG1sLAorICAgICAgICAibWluaW1hbCIgOiBIVE1MQXdhcmVFbnRpdHlTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZV94bWwsCisgICAgICAgIE5vbmUgOiBOb25lCisgICAgICAgIH0KKworICAgIFhNTF9GT1JNQVRURVJTID0geworICAgICAgICAiaHRtbCIgOiBFbnRpdHlTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZV9odG1sLAorICAgICAgICAibWluaW1hbCIgOiBFbnRpdHlTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZV94bWwsCisgICAgICAgIE5vbmUgOiBOb25lCisgICAgICAgIH0KKworICAgIGRlZiBmb3JtYXRfc3RyaW5nKHNlbGYsIHMsIGZvcm1hdHRlcj0nbWluaW1hbCcpOgorICAgICAgICAiIiJGb3JtYXQgdGhlIGdpdmVuIHN0cmluZyB1c2luZyB0aGUgZ2l2ZW4gZm9ybWF0dGVyLiIiIgorICAgICAgICBpZiBub3QgY2FsbGFibGUoZm9ybWF0dGVyKToKKyAgICAgICAgICAgIGZvcm1hdHRlciA9IHNlbGYuX2Zvcm1hdHRlcl9mb3JfbmFtZShmb3JtYXR0ZXIpCisgICAgICAgIGlmIGZvcm1hdHRlciBpcyBOb25lOgorICAgICAgICAgICAgb3V0cHV0ID0gcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0cHV0ID0gZm9ybWF0dGVyKHMpCisgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfaXNfeG1sKHNlbGYpOgorICAgICAgICAiIiJJcyB0aGlzIGVsZW1lbnQgcGFydCBvZiBhbiBYTUwgdHJlZSBvciBhbiBIVE1MIHRyZWU/CisKKyAgICAgICAgVGhpcyBpcyB1c2VkIHdoZW4gbWFwcGluZyBhIGZvcm1hdHRlciBuYW1lICgibWluaW1hbCIpIHRvIGFuCisgICAgICAgIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIChvbmUgdGhhdCBwZXJmb3JtcyBlbnRpdHktc3Vic3RpdHV0aW9uIG9uCisgICAgICAgIHRoZSBjb250ZW50cyBvZiA8c2NyaXB0PiBhbmQgPHN0eWxlPiB0YWdzLCBvciBub3QpLiBJdCdzCisgICAgICAgIGluZWZmaWNpZW50LCBidXQgaXQgc2hvdWxkIGJlIGNhbGxlZCB2ZXJ5IHJhcmVseS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYucGFyZW50IGlzIE5vbmU6CisgICAgICAgICAgICAjIFRoaXMgaXMgdGhlIHRvcC1sZXZlbCBvYmplY3QuIEl0IHNob3VsZCBoYXZlIC5pc194bWwgc2V0CisgICAgICAgICAgICAjIGZyb20gdHJlZSBjcmVhdGlvbi4gSWYgbm90LCB0YWtlIGEgZ3Vlc3MtLUJTIGlzIHVzdWFsbHkKKyAgICAgICAgICAgICMgdXNlZCBvbiBIVE1MIG1hcmt1cC4KKyAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYsICdpc194bWwnLCBGYWxzZSkKKyAgICAgICAgcmV0dXJuIHNlbGYucGFyZW50Ll9pc194bWwKKworICAgIGRlZiBfZm9ybWF0dGVyX2Zvcl9uYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICAiTG9vayB1cCBhIGZvcm1hdHRlciBmdW5jdGlvbiBiYXNlZCBvbiBpdHMgbmFtZSBhbmQgdGhlIHRyZWUuIgorICAgICAgICBpZiBzZWxmLl9pc194bWw6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5YTUxfRk9STUFUVEVSUy5nZXQoCisgICAgICAgICAgICAgICAgbmFtZSwgRW50aXR5U3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVfeG1sKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuSFRNTF9GT1JNQVRURVJTLmdldCgKKyAgICAgICAgICAgICAgICBuYW1lLCBIVE1MQXdhcmVFbnRpdHlTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZV94bWwpCisKKyAgICBkZWYgc2V0dXAoc2VsZiwgcGFyZW50PU5vbmUsIHByZXZpb3VzX2VsZW1lbnQ9Tm9uZSk6CisgICAgICAgICIiIlNldHMgdXAgdGhlIGluaXRpYWwgcmVsYXRpb25zIGJldHdlZW4gdGhpcyBlbGVtZW50IGFuZAorICAgICAgICBvdGhlciBlbGVtZW50cy4iIiIKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBwYXJlbnQKKyAgICAgICAgc2VsZi5wcmV2aW91c19lbGVtZW50ID0gcHJldmlvdXNfZWxlbWVudAorICAgICAgICBpZiBwcmV2aW91c19lbGVtZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5wcmV2aW91c19lbGVtZW50Lm5leHRfZWxlbWVudCA9IHNlbGYKKyAgICAgICAgc2VsZi5uZXh0X2VsZW1lbnQgPSBOb25lCisgICAgICAgIHNlbGYucHJldmlvdXNfc2libGluZyA9IE5vbmUKKyAgICAgICAgc2VsZi5uZXh0X3NpYmxpbmcgPSBOb25lCisgICAgICAgIGlmIHNlbGYucGFyZW50IGlzIG5vdCBOb25lIGFuZCBzZWxmLnBhcmVudC5jb250ZW50czoKKyAgICAgICAgICAgIHNlbGYucHJldmlvdXNfc2libGluZyA9IHNlbGYucGFyZW50LmNvbnRlbnRzWy0xXQorICAgICAgICAgICAgc2VsZi5wcmV2aW91c19zaWJsaW5nLm5leHRfc2libGluZyA9IHNlbGYKKworICAgIG5leHRTaWJsaW5nID0gX2FsaWFzKCJuZXh0X3NpYmxpbmciKSAgIyBCUzMKKyAgICBwcmV2aW91c1NpYmxpbmcgPSBfYWxpYXMoInByZXZpb3VzX3NpYmxpbmciKSAgIyBCUzMKKworICAgIGRlZiByZXBsYWNlX3dpdGgoc2VsZiwgcmVwbGFjZV93aXRoKToKKyAgICAgICAgaWYgcmVwbGFjZV93aXRoIGlzIHNlbGY6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgcmVwbGFjZV93aXRoIGlzIHNlbGYucGFyZW50OgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2Fubm90IHJlcGxhY2UgYSBUYWcgd2l0aCBpdHMgcGFyZW50LiIpCisgICAgICAgIG9sZF9wYXJlbnQgPSBzZWxmLnBhcmVudAorICAgICAgICBteV9pbmRleCA9IHNlbGYucGFyZW50LmluZGV4KHNlbGYpCisgICAgICAgIHNlbGYuZXh0cmFjdCgpCisgICAgICAgIG9sZF9wYXJlbnQuaW5zZXJ0KG15X2luZGV4LCByZXBsYWNlX3dpdGgpCisgICAgICAgIHJldHVybiBzZWxmCisgICAgcmVwbGFjZVdpdGggPSByZXBsYWNlX3dpdGggICMgQlMzCisKKyAgICBkZWYgdW53cmFwKHNlbGYpOgorICAgICAgICBteV9wYXJlbnQgPSBzZWxmLnBhcmVudAorICAgICAgICBteV9pbmRleCA9IHNlbGYucGFyZW50LmluZGV4KHNlbGYpCisgICAgICAgIHNlbGYuZXh0cmFjdCgpCisgICAgICAgIGZvciBjaGlsZCBpbiByZXZlcnNlZChzZWxmLmNvbnRlbnRzWzpdKToKKyAgICAgICAgICAgIG15X3BhcmVudC5pbnNlcnQobXlfaW5kZXgsIGNoaWxkKQorICAgICAgICByZXR1cm4gc2VsZgorICAgIHJlcGxhY2Vfd2l0aF9jaGlsZHJlbiA9IHVud3JhcAorICAgIHJlcGxhY2VXaXRoQ2hpbGRyZW4gPSB1bndyYXAgICMgQlMzCisKKyAgICBkZWYgd3JhcChzZWxmLCB3cmFwX2luc2lkZSk6CisgICAgICAgIG1lID0gc2VsZi5yZXBsYWNlX3dpdGgod3JhcF9pbnNpZGUpCisgICAgICAgIHdyYXBfaW5zaWRlLmFwcGVuZChtZSkKKyAgICAgICAgcmV0dXJuIHdyYXBfaW5zaWRlCisKKyAgICBkZWYgZXh0cmFjdChzZWxmKToKKyAgICAgICAgIiIiRGVzdHJ1Y3RpdmVseSByaXBzIHRoaXMgZWxlbWVudCBvdXQgb2YgdGhlIHRyZWUuIiIiCisgICAgICAgIGlmIHNlbGYucGFyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGVsIHNlbGYucGFyZW50LmNvbnRlbnRzW3NlbGYucGFyZW50LmluZGV4KHNlbGYpXQorCisgICAgICAgICNGaW5kIHRoZSB0d28gZWxlbWVudHMgdGhhdCB3b3VsZCBiZSBuZXh0IHRvIGVhY2ggb3RoZXIgaWYKKyAgICAgICAgI3RoaXMgZWxlbWVudCAoYW5kIGFueSBjaGlsZHJlbikgaGFkbid0IGJlZW4gcGFyc2VkLiBDb25uZWN0CisgICAgICAgICN0aGUgdHdvLgorICAgICAgICBsYXN0X2NoaWxkID0gc2VsZi5fbGFzdF9kZXNjZW5kYW50KCkKKyAgICAgICAgbmV4dF9lbGVtZW50ID0gbGFzdF9jaGlsZC5uZXh0X2VsZW1lbnQKKworICAgICAgICBpZiBzZWxmLnByZXZpb3VzX2VsZW1lbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnByZXZpb3VzX2VsZW1lbnQubmV4dF9lbGVtZW50ID0gbmV4dF9lbGVtZW50CisgICAgICAgIGlmIG5leHRfZWxlbWVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG5leHRfZWxlbWVudC5wcmV2aW91c19lbGVtZW50ID0gc2VsZi5wcmV2aW91c19lbGVtZW50CisgICAgICAgIHNlbGYucHJldmlvdXNfZWxlbWVudCA9IE5vbmUKKyAgICAgICAgbGFzdF9jaGlsZC5uZXh0X2VsZW1lbnQgPSBOb25lCisKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBOb25lCisgICAgICAgIGlmIHNlbGYucHJldmlvdXNfc2libGluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYucHJldmlvdXNfc2libGluZy5uZXh0X3NpYmxpbmcgPSBzZWxmLm5leHRfc2libGluZworICAgICAgICBpZiBzZWxmLm5leHRfc2libGluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYubmV4dF9zaWJsaW5nLnByZXZpb3VzX3NpYmxpbmcgPSBzZWxmLnByZXZpb3VzX3NpYmxpbmcKKyAgICAgICAgc2VsZi5wcmV2aW91c19zaWJsaW5nID0gc2VsZi5uZXh0X3NpYmxpbmcgPSBOb25lCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX2xhc3RfZGVzY2VuZGFudChzZWxmLCBpc19pbml0aWFsaXplZD1UcnVlLCBhY2NlcHRfc2VsZj1UcnVlKToKKyAgICAgICAgIkZpbmRzIHRoZSBsYXN0IGVsZW1lbnQgYmVuZWF0aCB0aGlzIG9iamVjdCB0byBiZSBwYXJzZWQuIgorICAgICAgICBpZiBpc19pbml0aWFsaXplZCBhbmQgc2VsZi5uZXh0X3NpYmxpbmc6CisgICAgICAgICAgICBsYXN0X2NoaWxkID0gc2VsZi5uZXh0X3NpYmxpbmcucHJldmlvdXNfZWxlbWVudAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGFzdF9jaGlsZCA9IHNlbGYKKyAgICAgICAgICAgIHdoaWxlIGlzaW5zdGFuY2UobGFzdF9jaGlsZCwgVGFnKSBhbmQgbGFzdF9jaGlsZC5jb250ZW50czoKKyAgICAgICAgICAgICAgICBsYXN0X2NoaWxkID0gbGFzdF9jaGlsZC5jb250ZW50c1stMV0KKyAgICAgICAgaWYgbm90IGFjY2VwdF9zZWxmIGFuZCBsYXN0X2NoaWxkID09IHNlbGY6CisgICAgICAgICAgICBsYXN0X2NoaWxkID0gTm9uZQorICAgICAgICByZXR1cm4gbGFzdF9jaGlsZAorICAgICMgQlMzOiBOb3QgcGFydCBvZiB0aGUgQVBJIQorICAgIF9sYXN0UmVjdXJzaXZlQ2hpbGQgPSBfbGFzdF9kZXNjZW5kYW50CisKKyAgICBkZWYgaW5zZXJ0KHNlbGYsIHBvc2l0aW9uLCBuZXdfY2hpbGQpOgorICAgICAgICBpZiBuZXdfY2hpbGQgaXMgc2VsZjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBpbnNlcnQgYSB0YWcgaW50byBpdHNlbGYuIikKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UobmV3X2NoaWxkLCBiYXNlc3RyaW5nKQorICAgICAgICAgICAgYW5kIG5vdCBpc2luc3RhbmNlKG5ld19jaGlsZCwgTmF2aWdhYmxlU3RyaW5nKSk6CisgICAgICAgICAgICBuZXdfY2hpbGQgPSBOYXZpZ2FibGVTdHJpbmcobmV3X2NoaWxkKQorCisgICAgICAgIHBvc2l0aW9uID0gbWluKHBvc2l0aW9uLCBsZW4oc2VsZi5jb250ZW50cykpCisgICAgICAgIGlmIGhhc2F0dHIobmV3X2NoaWxkLCAncGFyZW50JykgYW5kIG5ld19jaGlsZC5wYXJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIFdlJ3JlICdpbnNlcnRpbmcnIGFuIGVsZW1lbnQgdGhhdCdzIGFscmVhZHkgb25lCisgICAgICAgICAgICAjIG9mIHRoaXMgb2JqZWN0J3MgY2hpbGRyZW4uCisgICAgICAgICAgICBpZiBuZXdfY2hpbGQucGFyZW50IGlzIHNlbGY6CisgICAgICAgICAgICAgICAgY3VycmVudF9pbmRleCA9IHNlbGYuaW5kZXgobmV3X2NoaWxkKQorICAgICAgICAgICAgICAgIGlmIGN1cnJlbnRfaW5kZXggPCBwb3NpdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgIyBXZSdyZSBtb3ZpbmcgdGhpcyBlbGVtZW50IGZ1cnRoZXIgZG93biB0aGUgbGlzdAorICAgICAgICAgICAgICAgICAgICAjIG9mIHRoaXMgb2JqZWN0J3MgY2hpbGRyZW4uIFRoYXQgbWVhbnMgdGhhdCB3aGVuCisgICAgICAgICAgICAgICAgICAgICMgd2UgZXh0cmFjdCB0aGlzIGVsZW1lbnQsIG91ciB0YXJnZXQgaW5kZXggd2lsbAorICAgICAgICAgICAgICAgICAgICAjIGp1bXAgZG93biBvbmUuCisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uIC09IDEKKyAgICAgICAgICAgIG5ld19jaGlsZC5leHRyYWN0KCkKKworICAgICAgICBuZXdfY2hpbGQucGFyZW50ID0gc2VsZgorICAgICAgICBwcmV2aW91c19jaGlsZCA9IE5vbmUKKyAgICAgICAgaWYgcG9zaXRpb24gPT0gMDoKKyAgICAgICAgICAgIG5ld19jaGlsZC5wcmV2aW91c19zaWJsaW5nID0gTm9uZQorICAgICAgICAgICAgbmV3X2NoaWxkLnByZXZpb3VzX2VsZW1lbnQgPSBzZWxmCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmV2aW91c19jaGlsZCA9IHNlbGYuY29udGVudHNbcG9zaXRpb24gLSAxXQorICAgICAgICAgICAgbmV3X2NoaWxkLnByZXZpb3VzX3NpYmxpbmcgPSBwcmV2aW91c19jaGlsZAorICAgICAgICAgICAgbmV3X2NoaWxkLnByZXZpb3VzX3NpYmxpbmcubmV4dF9zaWJsaW5nID0gbmV3X2NoaWxkCisgICAgICAgICAgICBuZXdfY2hpbGQucHJldmlvdXNfZWxlbWVudCA9IHByZXZpb3VzX2NoaWxkLl9sYXN0X2Rlc2NlbmRhbnQoRmFsc2UpCisgICAgICAgIGlmIG5ld19jaGlsZC5wcmV2aW91c19lbGVtZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbmV3X2NoaWxkLnByZXZpb3VzX2VsZW1lbnQubmV4dF9lbGVtZW50ID0gbmV3X2NoaWxkCisKKyAgICAgICAgbmV3X2NoaWxkc19sYXN0X2VsZW1lbnQgPSBuZXdfY2hpbGQuX2xhc3RfZGVzY2VuZGFudChGYWxzZSkKKworICAgICAgICBpZiBwb3NpdGlvbiA+PSBsZW4oc2VsZi5jb250ZW50cyk6CisgICAgICAgICAgICBuZXdfY2hpbGQubmV4dF9zaWJsaW5nID0gTm9uZQorCisgICAgICAgICAgICBwYXJlbnQgPSBzZWxmCisgICAgICAgICAgICBwYXJlbnRzX25leHRfc2libGluZyA9IE5vbmUKKyAgICAgICAgICAgIHdoaWxlIHBhcmVudHNfbmV4dF9zaWJsaW5nIGlzIE5vbmUgYW5kIHBhcmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBwYXJlbnRzX25leHRfc2libGluZyA9IHBhcmVudC5uZXh0X3NpYmxpbmcKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50CisgICAgICAgICAgICAgICAgaWYgcGFyZW50c19uZXh0X3NpYmxpbmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICMgV2UgZm91bmQgdGhlIGVsZW1lbnQgdGhhdCBjb21lcyBuZXh0IGluIHRoZSBkb2N1bWVudC4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHBhcmVudHNfbmV4dF9zaWJsaW5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG5ld19jaGlsZHNfbGFzdF9lbGVtZW50Lm5leHRfZWxlbWVudCA9IHBhcmVudHNfbmV4dF9zaWJsaW5nCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVGhlIGxhc3QgZWxlbWVudCBvZiB0aGlzIHRhZyBpcyB0aGUgbGFzdCBlbGVtZW50IGluCisgICAgICAgICAgICAgICAgIyB0aGUgZG9jdW1lbnQuCisgICAgICAgICAgICAgICAgbmV3X2NoaWxkc19sYXN0X2VsZW1lbnQubmV4dF9lbGVtZW50ID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmV4dF9jaGlsZCA9IHNlbGYuY29udGVudHNbcG9zaXRpb25dCisgICAgICAgICAgICBuZXdfY2hpbGQubmV4dF9zaWJsaW5nID0gbmV4dF9jaGlsZAorICAgICAgICAgICAgaWYgbmV3X2NoaWxkLm5leHRfc2libGluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBuZXdfY2hpbGQubmV4dF9zaWJsaW5nLnByZXZpb3VzX3NpYmxpbmcgPSBuZXdfY2hpbGQKKyAgICAgICAgICAgIG5ld19jaGlsZHNfbGFzdF9lbGVtZW50Lm5leHRfZWxlbWVudCA9IG5leHRfY2hpbGQKKworICAgICAgICBpZiBuZXdfY2hpbGRzX2xhc3RfZWxlbWVudC5uZXh0X2VsZW1lbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBuZXdfY2hpbGRzX2xhc3RfZWxlbWVudC5uZXh0X2VsZW1lbnQucHJldmlvdXNfZWxlbWVudCA9IG5ld19jaGlsZHNfbGFzdF9lbGVtZW50CisgICAgICAgIHNlbGYuY29udGVudHMuaW5zZXJ0KHBvc2l0aW9uLCBuZXdfY2hpbGQpCisKKyAgICBkZWYgYXBwZW5kKHNlbGYsIHRhZyk6CisgICAgICAgICIiIkFwcGVuZHMgdGhlIGdpdmVuIHRhZyB0byB0aGUgY29udGVudHMgb2YgdGhpcyB0YWcuIiIiCisgICAgICAgIHNlbGYuaW5zZXJ0KGxlbihzZWxmLmNvbnRlbnRzKSwgdGFnKQorCisgICAgZGVmIGluc2VydF9iZWZvcmUoc2VsZiwgcHJlZGVjZXNzb3IpOgorICAgICAgICAiIiJNYWtlcyB0aGUgZ2l2ZW4gZWxlbWVudCB0aGUgaW1tZWRpYXRlIHByZWRlY2Vzc29yIG9mIHRoaXMgb25lLgorCisgICAgICAgIFRoZSB0d28gZWxlbWVudHMgd2lsbCBoYXZlIHRoZSBzYW1lIHBhcmVudCwgYW5kIHRoZSBnaXZlbiBlbGVtZW50CisgICAgICAgIHdpbGwgYmUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoaXMgb25lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZiBpcyBwcmVkZWNlc3NvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbid0IGluc2VydCBhbiBlbGVtZW50IGJlZm9yZSBpdHNlbGYuIikKKyAgICAgICAgcGFyZW50ID0gc2VsZi5wYXJlbnQKKyAgICAgICAgaWYgcGFyZW50IGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICJFbGVtZW50IGhhcyBubyBwYXJlbnQsIHNvICdiZWZvcmUnIGhhcyBubyBtZWFuaW5nLiIpCisgICAgICAgICMgRXh0cmFjdCBmaXJzdCBzbyB0aGF0IHRoZSBpbmRleCB3b24ndCBiZSBzY3Jld2VkIHVwIGlmIHRoZXkKKyAgICAgICAgIyBhcmUgc2libGluZ3MuCisgICAgICAgIGlmIGlzaW5zdGFuY2UocHJlZGVjZXNzb3IsIFBhZ2VFbGVtZW50KToKKyAgICAgICAgICAgIHByZWRlY2Vzc29yLmV4dHJhY3QoKQorICAgICAgICBpbmRleCA9IHBhcmVudC5pbmRleChzZWxmKQorICAgICAgICBwYXJlbnQuaW5zZXJ0KGluZGV4LCBwcmVkZWNlc3NvcikKKworICAgIGRlZiBpbnNlcnRfYWZ0ZXIoc2VsZiwgc3VjY2Vzc29yKToKKyAgICAgICAgIiIiTWFrZXMgdGhlIGdpdmVuIGVsZW1lbnQgdGhlIGltbWVkaWF0ZSBzdWNjZXNzb3Igb2YgdGhpcyBvbmUuCisKKyAgICAgICAgVGhlIHR3byBlbGVtZW50cyB3aWxsIGhhdmUgdGhlIHNhbWUgcGFyZW50LCBhbmQgdGhlIGdpdmVuIGVsZW1lbnQKKyAgICAgICAgd2lsbCBiZSBpbW1lZGlhdGVseSBhZnRlciB0aGlzIG9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYgaXMgc3VjY2Vzc29yOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2FuJ3QgaW5zZXJ0IGFuIGVsZW1lbnQgYWZ0ZXIgaXRzZWxmLiIpCisgICAgICAgIHBhcmVudCA9IHNlbGYucGFyZW50CisgICAgICAgIGlmIHBhcmVudCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAiRWxlbWVudCBoYXMgbm8gcGFyZW50LCBzbyAnYWZ0ZXInIGhhcyBubyBtZWFuaW5nLiIpCisgICAgICAgICMgRXh0cmFjdCBmaXJzdCBzbyB0aGF0IHRoZSBpbmRleCB3b24ndCBiZSBzY3Jld2VkIHVwIGlmIHRoZXkKKyAgICAgICAgIyBhcmUgc2libGluZ3MuCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3VjY2Vzc29yLCBQYWdlRWxlbWVudCk6CisgICAgICAgICAgICBzdWNjZXNzb3IuZXh0cmFjdCgpCisgICAgICAgIGluZGV4ID0gcGFyZW50LmluZGV4KHNlbGYpCisgICAgICAgIHBhcmVudC5pbnNlcnQoaW5kZXgrMSwgc3VjY2Vzc29yKQorCisgICAgZGVmIGZpbmRfbmV4dChzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZmlyc3QgaXRlbSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIGNyaXRlcmlhIGFuZAorICAgICAgICBhcHBlYXJzIGFmdGVyIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfb25lKHNlbGYuZmluZF9hbGxfbmV4dCwgbmFtZSwgYXR0cnMsIHRleHQsICoqa3dhcmdzKQorICAgIGZpbmROZXh0ID0gZmluZF9uZXh0ICAjIEJTMworCisgICAgZGVmIGZpbmRfYWxsX25leHQoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCBsaW1pdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgYWxsIGl0ZW1zIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIGNyaXRlcmlhIGFuZCBhcHBlYXIKKyAgICAgICAgYWZ0ZXIgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9hbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LCBzZWxmLm5leHRfZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorICAgIGZpbmRBbGxOZXh0ID0gZmluZF9hbGxfbmV4dCAgIyBCUzMKKworICAgIGRlZiBmaW5kX25leHRfc2libGluZyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgY2xvc2VzdCBzaWJsaW5nIHRvIHRoaXMgVGFnIHRoYXQgbWF0Y2hlcyB0aGUKKyAgICAgICAgZ2l2ZW4gY3JpdGVyaWEgYW5kIGFwcGVhcnMgYWZ0ZXIgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9vbmUoc2VsZi5maW5kX25leHRfc2libGluZ3MsIG5hbWUsIGF0dHJzLCB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKyAgICBmaW5kTmV4dFNpYmxpbmcgPSBmaW5kX25leHRfc2libGluZyAgIyBCUzMKKworICAgIGRlZiBmaW5kX25leHRfc2libGluZ3Moc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCBsaW1pdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBzaWJsaW5ncyBvZiB0aGlzIFRhZyB0aGF0IG1hdGNoIHRoZSBnaXZlbgorICAgICAgICBjcml0ZXJpYSBhbmQgYXBwZWFyIGFmdGVyIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfYWxsKG5hbWUsIGF0dHJzLCB0ZXh0LCBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmV4dF9zaWJsaW5ncywgKiprd2FyZ3MpCisgICAgZmluZE5leHRTaWJsaW5ncyA9IGZpbmRfbmV4dF9zaWJsaW5ncyAgICMgQlMzCisgICAgZmV0Y2hOZXh0U2libGluZ3MgPSBmaW5kX25leHRfc2libGluZ3MgICMgQlMyCisKKyAgICBkZWYgZmluZF9wcmV2aW91cyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZmlyc3QgaXRlbSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIGNyaXRlcmlhIGFuZAorICAgICAgICBhcHBlYXJzIGJlZm9yZSB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kX29uZSgKKyAgICAgICAgICAgIHNlbGYuZmluZF9hbGxfcHJldmlvdXMsIG5hbWUsIGF0dHJzLCB0ZXh0LCAqKmt3YXJncykKKyAgICBmaW5kUHJldmlvdXMgPSBmaW5kX3ByZXZpb3VzICAjIEJTMworCisgICAgZGVmIGZpbmRfYWxsX3ByZXZpb3VzKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgbGltaXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyBhbGwgaXRlbXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gY3JpdGVyaWEgYW5kIGFwcGVhcgorICAgICAgICBiZWZvcmUgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9hbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LCBzZWxmLnByZXZpb3VzX2VsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisgICAgZmluZEFsbFByZXZpb3VzID0gZmluZF9hbGxfcHJldmlvdXMgICMgQlMzCisgICAgZmV0Y2hQcmV2aW91cyA9IGZpbmRfYWxsX3ByZXZpb3VzICAgICMgQlMyCisKKyAgICBkZWYgZmluZF9wcmV2aW91c19zaWJsaW5nKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBjbG9zZXN0IHNpYmxpbmcgdG8gdGhpcyBUYWcgdGhhdCBtYXRjaGVzIHRoZQorICAgICAgICBnaXZlbiBjcml0ZXJpYSBhbmQgYXBwZWFycyBiZWZvcmUgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9vbmUoc2VsZi5maW5kX3ByZXZpb3VzX3NpYmxpbmdzLCBuYW1lLCBhdHRycywgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisgICAgZmluZFByZXZpb3VzU2libGluZyA9IGZpbmRfcHJldmlvdXNfc2libGluZyAgIyBCUzMKKworICAgIGRlZiBmaW5kX3ByZXZpb3VzX3NpYmxpbmdzKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHNpYmxpbmdzIG9mIHRoaXMgVGFnIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhIGFuZCBhcHBlYXIgYmVmb3JlIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfYWxsKG5hbWUsIGF0dHJzLCB0ZXh0LCBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJldmlvdXNfc2libGluZ3MsICoqa3dhcmdzKQorICAgIGZpbmRQcmV2aW91c1NpYmxpbmdzID0gZmluZF9wcmV2aW91c19zaWJsaW5ncyAgICMgQlMzCisgICAgZmV0Y2hQcmV2aW91c1NpYmxpbmdzID0gZmluZF9wcmV2aW91c19zaWJsaW5ncyAgIyBCUzIKKworICAgIGRlZiBmaW5kX3BhcmVudChzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGNsb3Nlc3QgcGFyZW50IG9mIHRoaXMgVGFnIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4KKyAgICAgICAgY3JpdGVyaWEuIiIiCisgICAgICAgICMgTk9URTogV2UgY2FuJ3QgdXNlIF9maW5kX29uZSBiZWNhdXNlIGZpbmRQYXJlbnRzIHRha2VzIGEgZGlmZmVyZW50CisgICAgICAgICMgc2V0IG9mIGFyZ3VtZW50cy4KKyAgICAgICAgciA9IE5vbmUKKyAgICAgICAgbCA9IHNlbGYuZmluZF9wYXJlbnRzKG5hbWUsIGF0dHJzLCAxLCAqKmt3YXJncykKKyAgICAgICAgaWYgbDoKKyAgICAgICAgICAgIHIgPSBsWzBdCisgICAgICAgIHJldHVybiByCisgICAgZmluZFBhcmVudCA9IGZpbmRfcGFyZW50ICAjIEJTMworCisgICAgZGVmIGZpbmRfcGFyZW50cyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCBsaW1pdD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHBhcmVudHMgb2YgdGhpcyBUYWcgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4KKyAgICAgICAgY3JpdGVyaWEuIiIiCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfYWxsKG5hbWUsIGF0dHJzLCBOb25lLCBsaW1pdCwgc2VsZi5wYXJlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKyAgICBmaW5kUGFyZW50cyA9IGZpbmRfcGFyZW50cyAgICMgQlMzCisgICAgZmV0Y2hQYXJlbnRzID0gZmluZF9wYXJlbnRzICAjIEJTMgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm5leHRfZWxlbWVudAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHByZXZpb3VzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wcmV2aW91c19lbGVtZW50CisKKyAgICAjVGhlc2UgbWV0aG9kcyBkbyB0aGUgcmVhbCBoZWF2eSBsaWZ0aW5nLgorCisgICAgZGVmIF9maW5kX29uZShzZWxmLCBtZXRob2QsIG5hbWUsIGF0dHJzLCB0ZXh0LCAqKmt3YXJncyk6CisgICAgICAgIHIgPSBOb25lCisgICAgICAgIGwgPSBtZXRob2QobmFtZSwgYXR0cnMsIHRleHQsIDEsICoqa3dhcmdzKQorICAgICAgICBpZiBsOgorICAgICAgICAgICAgciA9IGxbMF0KKyAgICAgICAgcmV0dXJuIHIKKworICAgIGRlZiBfZmluZF9hbGwoc2VsZiwgbmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LCBnZW5lcmF0b3IsICoqa3dhcmdzKToKKyAgICAgICAgIkl0ZXJhdGVzIG92ZXIgYSBnZW5lcmF0b3IgbG9va2luZyBmb3IgdGhpbmdzIHRoYXQgbWF0Y2guIgorCisgICAgICAgIGlmIGlzaW5zdGFuY2UobmFtZSwgU291cFN0cmFpbmVyKToKKyAgICAgICAgICAgIHN0cmFpbmVyID0gbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RyYWluZXIgPSBTb3VwU3RyYWluZXIobmFtZSwgYXR0cnMsIHRleHQsICoqa3dhcmdzKQorCisgICAgICAgIGlmIHRleHQgaXMgTm9uZSBhbmQgbm90IGxpbWl0IGFuZCBub3QgYXR0cnMgYW5kIG5vdCBrd2FyZ3M6CisgICAgICAgICAgICBpZiBuYW1lIGlzIFRydWUgb3IgbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgT3B0aW1pemF0aW9uIHRvIGZpbmQgYWxsIHRhZ3MuCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gKGVsZW1lbnQgZm9yIGVsZW1lbnQgaW4gZ2VuZXJhdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZWxlbWVudCwgVGFnKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0U2V0KHN0cmFpbmVyLCByZXN1bHQpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UobmFtZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgIyBPcHRpbWl6YXRpb24gdG8gZmluZCBhbGwgdGFncyB3aXRoIGEgZ2l2ZW4gbmFtZS4KKyAgICAgICAgICAgICAgICByZXN1bHQgPSAoZWxlbWVudCBmb3IgZWxlbWVudCBpbiBnZW5lcmF0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlbGVtZW50LCBUYWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGVsZW1lbnQubmFtZSA9PSBuYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRTZXQoc3RyYWluZXIsIHJlc3VsdCkKKyAgICAgICAgcmVzdWx0cyA9IFJlc3VsdFNldChzdHJhaW5lcikKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpID0gbmV4dChnZW5lcmF0b3IpCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgaToKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHN0cmFpbmVyLnNlYXJjaChpKQorICAgICAgICAgICAgICAgIGlmIGZvdW5kOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChmb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGltaXQgYW5kIGxlbihyZXN1bHRzKSA+PSBsaW1pdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICAjVGhlc2UgZ2VuZXJhdG9ycyBjYW4gYmUgdXNlZCB0byBuYXZpZ2F0ZSBzdGFydGluZyBmcm9tIGJvdGgKKyAgICAjTmF2aWdhYmxlU3RyaW5ncyBhbmQgVGFncy4KKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmV4dF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgaSA9IHNlbGYubmV4dF9lbGVtZW50CisgICAgICAgIHdoaWxlIGkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB5aWVsZCBpCisgICAgICAgICAgICBpID0gaS5uZXh0X2VsZW1lbnQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBuZXh0X3NpYmxpbmdzKHNlbGYpOgorICAgICAgICBpID0gc2VsZi5uZXh0X3NpYmxpbmcKKyAgICAgICAgd2hpbGUgaSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHlpZWxkIGkKKyAgICAgICAgICAgIGkgPSBpLm5leHRfc2libGluZworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHByZXZpb3VzX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICBpID0gc2VsZi5wcmV2aW91c19lbGVtZW50CisgICAgICAgIHdoaWxlIGkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB5aWVsZCBpCisgICAgICAgICAgICBpID0gaS5wcmV2aW91c19lbGVtZW50CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHJldmlvdXNfc2libGluZ3Moc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnByZXZpb3VzX3NpYmxpbmcKKyAgICAgICAgd2hpbGUgaSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHlpZWxkIGkKKyAgICAgICAgICAgIGkgPSBpLnByZXZpb3VzX3NpYmxpbmcKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYXJlbnRzKHNlbGYpOgorICAgICAgICBpID0gc2VsZi5wYXJlbnQKKyAgICAgICAgd2hpbGUgaSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHlpZWxkIGkKKyAgICAgICAgICAgIGkgPSBpLnBhcmVudAorCisgICAgIyBNZXRob2RzIGZvciBzdXBwb3J0aW5nIENTUyBzZWxlY3RvcnMuCisKKyAgICB0YWdfbmFtZV9yZSA9IHJlLmNvbXBpbGUoJ15bYS16MC05XSskJykKKworICAgICMgL14oXHcrKVxbKFx3KykoWz1+XHxcXlwkXCpdPyk9PyI/KFteXF0iXSopIj9cXSQvCisgICAgIyAgIFwtLS0vICBcLS0tL1wtLS0tLS0tLS0tLS0tLyAgICBcLS0tLS0tLS8KKyAgICAjICAgICB8ICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICB8CisgICAgIyAgICAgfCAgICAgIHwgICAgICAgICB8ICAgICAgICAgICBUaGUgdmFsdWUKKyAgICAjICAgICB8ICAgICAgfCAgICB+LHwsXiwkLCogb3IgPQorICAgICMgICAgIHwgICBBdHRyaWJ1dGUKKyAgICAjICAgIFRhZworICAgIGF0dHJpYnNlbGVjdF9yZSA9IHJlLmNvbXBpbGUoCisgICAgICAgIHInXig/UDx0YWc+XHcrKT9cWyg/UDxhdHRyaWJ1dGU+XHcrKSg/UDxvcGVyYXRvcj5bPX5cfFxeXCRcKl0/KScgKworICAgICAgICByJz0/Ij8oP1A8dmFsdWU+W15cXSJdKikiP1xdJCcKKyAgICAgICAgKQorCisgICAgZGVmIF9hdHRyX3ZhbHVlX2FzX3N0cmluZyhzZWxmLCB2YWx1ZSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiRm9yY2UgYW4gYXR0cmlidXRlIHZhbHVlIGludG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uCisKKyAgICAgICAgQSBtdWx0aS12YWx1ZWQgYXR0cmlidXRlIHdpbGwgYmUgY29udmVydGVkIGludG8gYQorICAgICAgICBzcGFjZS1zZXBhcmF0ZWQgc3Rpcm5nLgorICAgICAgICAiIiIKKyAgICAgICAgdmFsdWUgPSBzZWxmLmdldCh2YWx1ZSwgZGVmYXVsdCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCkgb3IgaXNpbnN0YW5jZSh2YWx1ZSwgdHVwbGUpOgorICAgICAgICAgICAgdmFsdWUgPSIgIi5qb2luKHZhbHVlKQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiBfdGFnX25hbWVfbWF0Y2hlc19hbmQoc2VsZiwgZnVuY3Rpb24sIHRhZ19uYW1lKToKKyAgICAgICAgaWYgbm90IHRhZ19uYW1lOgorICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWYgX21hdGNoKHRhZyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRhZy5uYW1lID09IHRhZ19uYW1lIGFuZCBmdW5jdGlvbih0YWcpCisgICAgICAgICAgICByZXR1cm4gX21hdGNoCisKKyAgICBkZWYgX2F0dHJpYnV0ZV9jaGVja2VyKHNlbGYsIG9wZXJhdG9yLCBhdHRyaWJ1dGUsIHZhbHVlPScnKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhIENTUyBzZWxlY3RvciBvcGVyYXRpb24uCisKKyAgICAgICAgVGFrZXMgYW4gb3BlcmF0b3IsIGF0dHJpYnV0ZSBhbmQgb3B0aW9uYWwgdmFsdWUuIFJldHVybnMgYQorICAgICAgICBmdW5jdGlvbiB0aGF0IHdpbGwgcmV0dXJuIFRydWUgZm9yIGVsZW1lbnRzIHRoYXQgbWF0Y2ggdGhhdAorICAgICAgICBjb21iaW5hdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG9wZXJhdG9yID09ICc9JzoKKyAgICAgICAgICAgICMgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGBhdHRyaWJ1dGVgIGlzIGVxdWFsIHRvIGB2YWx1ZWAKKyAgICAgICAgICAgIHJldHVybiBsYW1iZGEgZWw6IGVsLl9hdHRyX3ZhbHVlX2FzX3N0cmluZyhhdHRyaWJ1dGUpID09IHZhbHVlCisgICAgICAgIGVsaWYgb3BlcmF0b3IgPT0gJ34nOgorICAgICAgICAgICAgIyBzcGFjZS1zZXBhcmF0ZWQgbGlzdCByZXByZXNlbnRhdGlvbiBvZiBgYXR0cmlidXRlYAorICAgICAgICAgICAgIyBjb250YWlucyBgdmFsdWVgCisgICAgICAgICAgICBkZWYgX2luY2x1ZGVzX3ZhbHVlKGVsZW1lbnQpOgorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZV92YWx1ZSA9IGVsZW1lbnQuZ2V0KGF0dHJpYnV0ZSwgW10pCisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXR0cmlidXRlX3ZhbHVlLCBsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlX3ZhbHVlID0gYXR0cmlidXRlX3ZhbHVlLnNwbGl0KCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgaW4gYXR0cmlidXRlX3ZhbHVlCisgICAgICAgICAgICByZXR1cm4gX2luY2x1ZGVzX3ZhbHVlCisgICAgICAgIGVsaWYgb3BlcmF0b3IgPT0gJ14nOgorICAgICAgICAgICAgIyBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYGF0dHJpYnV0ZWAgc3RhcnRzIHdpdGggYHZhbHVlYAorICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSBlbDogZWwuX2F0dHJfdmFsdWVfYXNfc3RyaW5nKAorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSwgJycpLnN0YXJ0c3dpdGgodmFsdWUpCisgICAgICAgIGVsaWYgb3BlcmF0b3IgPT0gJyQnOgorICAgICAgICAgICAgIyBzdHJpbmcgcmVwcmVzZW5hdGlvbiBvZiBgYXR0cmlidXRlYCBlbmRzIHdpdGggYHZhbHVlYAorICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSBlbDogZWwuX2F0dHJfdmFsdWVfYXNfc3RyaW5nKAorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSwgJycpLmVuZHN3aXRoKHZhbHVlKQorICAgICAgICBlbGlmIG9wZXJhdG9yID09ICcqJzoKKyAgICAgICAgICAgICMgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGBhdHRyaWJ1dGVgIGNvbnRhaW5zIGB2YWx1ZWAKKyAgICAgICAgICAgIHJldHVybiBsYW1iZGEgZWw6IHZhbHVlIGluIGVsLl9hdHRyX3ZhbHVlX2FzX3N0cmluZyhhdHRyaWJ1dGUsICcnKQorICAgICAgICBlbGlmIG9wZXJhdG9yID09ICd8JzoKKyAgICAgICAgICAgICMgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGBhdHRyaWJ1dGVgIGlzIGVpdGhlciBleGFjdGx5CisgICAgICAgICAgICAjIGB2YWx1ZWAgb3Igc3RhcnRzIHdpdGggYHZhbHVlYCBhbmQgdGhlbiBhIGRhc2guCisgICAgICAgICAgICBkZWYgX2lzX29yX3N0YXJ0c193aXRoX2Rhc2goZWxlbWVudCk6CisgICAgICAgICAgICAgICAgYXR0cmlidXRlX3ZhbHVlID0gZWxlbWVudC5fYXR0cl92YWx1ZV9hc19zdHJpbmcoYXR0cmlidXRlLCAnJykKKyAgICAgICAgICAgICAgICByZXR1cm4gKGF0dHJpYnV0ZV92YWx1ZSA9PSB2YWx1ZSBvciBhdHRyaWJ1dGVfdmFsdWUuc3RhcnRzd2l0aCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICsgJy0nKSkKKyAgICAgICAgICAgIHJldHVybiBfaXNfb3Jfc3RhcnRzX3dpdGhfZGFzaAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSBlbDogZWwuaGFzX2F0dHIoYXR0cmlidXRlKQorCisgICAgIyBPbGQgbm9uLXByb3BlcnR5IHZlcnNpb25zIG9mIHRoZSBnZW5lcmF0b3JzLCBmb3IgYmFja3dhcmRzCisgICAgIyBjb21wYXRpYmlsaXR5IHdpdGggQlMzLgorICAgIGRlZiBuZXh0R2VuZXJhdG9yKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5uZXh0X2VsZW1lbnRzCisKKyAgICBkZWYgbmV4dFNpYmxpbmdHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm5leHRfc2libGluZ3MKKworICAgIGRlZiBwcmV2aW91c0dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucHJldmlvdXNfZWxlbWVudHMKKworICAgIGRlZiBwcmV2aW91c1NpYmxpbmdHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnByZXZpb3VzX3NpYmxpbmdzCisKKyAgICBkZWYgcGFyZW50R2VuZXJhdG9yKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wYXJlbnRzCisKKworY2xhc3MgTmF2aWdhYmxlU3RyaW5nKHVuaWNvZGUsIFBhZ2VFbGVtZW50KToKKworICAgIFBSRUZJWCA9ICcnCisgICAgU1VGRklYID0gJycKKworICAgIGRlZiBfX25ld19fKGNscywgdmFsdWUpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgTmF2aWdhYmxlU3RyaW5nLgorCisgICAgICAgIFdoZW4gdW5waWNrbGluZyBhIE5hdmlnYWJsZVN0cmluZywgdGhpcyBtZXRob2QgaXMgY2FsbGVkIHdpdGgKKyAgICAgICAgdGhlIHN0cmluZyBpbiBERUZBVUxUX09VVFBVVF9FTkNPRElORy4gVGhhdCBlbmNvZGluZyBuZWVkcyB0byBiZQorICAgICAgICBwYXNzZWQgaW4gdG8gdGhlIHN1cGVyY2xhc3MncyBfX25ld19fIG9yIHRoZSBzdXBlcmNsYXNzIHdvbid0IGtub3cKKyAgICAgICAgaG93IHRvIGhhbmRsZSBub24tQVNDSUkgY2hhcmFjdGVycy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHVuaWNvZGUpOgorICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGUuX19uZXdfXyhjbHMsIHZhbHVlKQorICAgICAgICByZXR1cm4gdW5pY29kZS5fX25ld19fKGNscywgdmFsdWUsIERFRkFVTFRfT1VUUFVUX0VOQ09ESU5HKQorCisgICAgZGVmIF9fY29weV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgorICAgICAgICByZXR1cm4gKHVuaWNvZGUoc2VsZiksKQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgorICAgICAgICAiIiJ0ZXh0LnN0cmluZyBnaXZlcyB5b3UgdGV4dC4gVGhpcyBpcyBmb3IgYmFja3dhcmRzCisgICAgICAgIGNvbXBhdGliaWxpdHkgZm9yIE5hdmlnYWJsZSpTdHJpbmcsIGJ1dCBmb3IgQ0RhdGEqIGl0IGxldHMgeW91CisgICAgICAgIGdldCB0aGUgc3RyaW5nIHdpdGhvdXQgdGhlIENEYXRhIHdyYXBwZXIuIiIiCisgICAgICAgIGlmIGF0dHIgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoCisgICAgICAgICAgICAgICAgIiclcycgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJyVzJyIgJSAoCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBhdHRyKSkKKworICAgIGRlZiBvdXRwdXRfcmVhZHkoc2VsZiwgZm9ybWF0dGVyPSJtaW5pbWFsIik6CisgICAgICAgIG91dHB1dCA9IHNlbGYuZm9ybWF0X3N0cmluZyhzZWxmLCBmb3JtYXR0ZXIpCisgICAgICAgIHJldHVybiBzZWxmLlBSRUZJWCArIG91dHB1dCArIHNlbGYuU1VGRklYCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBuYW1lLnNldHRlcgorICAgIGRlZiBuYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiQSBOYXZpZ2FibGVTdHJpbmcgY2Fubm90IGJlIGdpdmVuIGEgbmFtZS4iKQorCitjbGFzcyBQcmVmb3JtYXR0ZWRTdHJpbmcoTmF2aWdhYmxlU3RyaW5nKToKKyAgICAiIiJBIE5hdmlnYWJsZVN0cmluZyBub3Qgc3ViamVjdCB0byB0aGUgbm9ybWFsIGZvcm1hdHRpbmcgcnVsZXMuCisKKyAgICBUaGUgc3RyaW5nIHdpbGwgYmUgcGFzc2VkIGludG8gdGhlIGZvcm1hdHRlciAodG8gdHJpZ2dlciBzaWRlIGVmZmVjdHMpLAorICAgIGJ1dCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgaWdub3JlZC4KKyAgICAiIiIKKworICAgIGRlZiBvdXRwdXRfcmVhZHkoc2VsZiwgZm9ybWF0dGVyPSJtaW5pbWFsIik6CisgICAgICAgICIiIkNEYXRhIHN0cmluZ3MgYXJlIHBhc3NlZCBpbnRvIHRoZSBmb3JtYXR0ZXIuCisgICAgICAgIEJ1dCB0aGUgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQuIiIiCisgICAgICAgIHNlbGYuZm9ybWF0X3N0cmluZyhzZWxmLCBmb3JtYXR0ZXIpCisgICAgICAgIHJldHVybiBzZWxmLlBSRUZJWCArIHNlbGYgKyBzZWxmLlNVRkZJWAorCitjbGFzcyBDRGF0YShQcmVmb3JtYXR0ZWRTdHJpbmcpOgorCisgICAgUFJFRklYID0gdSc8IVtDREFUQVsnCisgICAgU1VGRklYID0gdSddXT4nCisKK2NsYXNzIFByb2Nlc3NpbmdJbnN0cnVjdGlvbihQcmVmb3JtYXR0ZWRTdHJpbmcpOgorCisgICAgUFJFRklYID0gdSc8PycKKyAgICBTVUZGSVggPSB1Jz8+JworCitjbGFzcyBDb21tZW50KFByZWZvcm1hdHRlZFN0cmluZyk6CisKKyAgICBQUkVGSVggPSB1JzwhLS0nCisgICAgU1VGRklYID0gdSctLT4nCisKKworY2xhc3MgRGVjbGFyYXRpb24oUHJlZm9ybWF0dGVkU3RyaW5nKToKKyAgICBQUkVGSVggPSB1JzwhJworICAgIFNVRkZJWCA9IHUnIT4nCisKKworY2xhc3MgRG9jdHlwZShQcmVmb3JtYXR0ZWRTdHJpbmcpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZvcl9uYW1lX2FuZF9pZHMoY2xzLCBuYW1lLCBwdWJfaWQsIHN5c3RlbV9pZCk6CisgICAgICAgIHZhbHVlID0gbmFtZSBvciAnJworICAgICAgICBpZiBwdWJfaWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB2YWx1ZSArPSAnIFBVQkxJQyAiJXMiJyAlIHB1Yl9pZAorICAgICAgICAgICAgaWYgc3lzdGVtX2lkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHZhbHVlICs9ICcgIiVzIicgJSBzeXN0ZW1faWQKKyAgICAgICAgZWxpZiBzeXN0ZW1faWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB2YWx1ZSArPSAnIFNZU1RFTSAiJXMiJyAlIHN5c3RlbV9pZAorCisgICAgICAgIHJldHVybiBEb2N0eXBlKHZhbHVlKQorCisgICAgUFJFRklYID0gdSc8IURPQ1RZUEUgJworICAgIFNVRkZJWCA9IHUnPlxuJworCisKK2NsYXNzIFRhZyhQYWdlRWxlbWVudCk6CisKKyAgICAiIiJSZXByZXNlbnRzIGEgZm91bmQgSFRNTCB0YWcgd2l0aCBpdHMgYXR0cmlidXRlcyBhbmQgY29udGVudHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyc2VyPU5vbmUsIGJ1aWxkZXI9Tm9uZSwgbmFtZT1Ob25lLCBuYW1lc3BhY2U9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcHJlZml4PU5vbmUsIGF0dHJzPU5vbmUsIHBhcmVudD1Ob25lLCBwcmV2aW91cz1Ob25lKToKKyAgICAgICAgIkJhc2ljIGNvbnN0cnVjdG9yLiIKKworICAgICAgICBpZiBwYXJzZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYucGFyc2VyX2NsYXNzID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBXZSBkb24ndCBhY3R1YWxseSBzdG9yZSB0aGUgcGFyc2VyIG9iamVjdDogdGhhdCBsZXRzIGV4dHJhY3RlZAorICAgICAgICAgICAgIyBjaHVua3MgYmUgZ2FyYmFnZS1jb2xsZWN0ZWQuCisgICAgICAgICAgICBzZWxmLnBhcnNlcl9jbGFzcyA9IHBhcnNlci5fX2NsYXNzX18KKyAgICAgICAgaWYgbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm8gdmFsdWUgcHJvdmlkZWQgZm9yIG5ldyB0YWcncyBuYW1lLiIpCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5uYW1lc3BhY2UgPSBuYW1lc3BhY2UKKyAgICAgICAgc2VsZi5wcmVmaXggPSBwcmVmaXgKKyAgICAgICAgaWYgYXR0cnMgaXMgTm9uZToKKyAgICAgICAgICAgIGF0dHJzID0ge30KKyAgICAgICAgZWxpZiBhdHRycyBhbmQgYnVpbGRlci5jZGF0YV9saXN0X2F0dHJpYnV0ZXM6CisgICAgICAgICAgICBhdHRycyA9IGJ1aWxkZXIuX3JlcGxhY2VfY2RhdGFfbGlzdF9hdHRyaWJ1dGVfdmFsdWVzKAorICAgICAgICAgICAgICAgIHNlbGYubmFtZSwgYXR0cnMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhdHRycyA9IGRpY3QoYXR0cnMpCisgICAgICAgIHNlbGYuYXR0cnMgPSBhdHRycworICAgICAgICBzZWxmLmNvbnRlbnRzID0gW10KKyAgICAgICAgc2VsZi5zZXR1cChwYXJlbnQsIHByZXZpb3VzKQorICAgICAgICBzZWxmLmhpZGRlbiA9IEZhbHNlCisKKyAgICAgICAgIyBTZXQgdXAgYW55IHN1YnN0aXR1dGlvbnMsIHN1Y2ggYXMgdGhlIGNoYXJzZXQgaW4gYSBNRVRBIHRhZy4KKyAgICAgICAgaWYgYnVpbGRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGJ1aWxkZXIuc2V0X3VwX3N1YnN0aXR1dGlvbnMoc2VsZikKKyAgICAgICAgICAgIHNlbGYuY2FuX2JlX2VtcHR5X2VsZW1lbnQgPSBidWlsZGVyLmNhbl9iZV9lbXB0eV9lbGVtZW50KG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNhbl9iZV9lbXB0eV9lbGVtZW50ID0gRmFsc2UKKworICAgIHBhcnNlckNsYXNzID0gX2FsaWFzKCJwYXJzZXJfY2xhc3MiKSAgIyBCUzMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19lbXB0eV9lbGVtZW50KHNlbGYpOgorICAgICAgICAiIiJJcyB0aGlzIHRhZyBhbiBlbXB0eS1lbGVtZW50IHRhZz8gKGFrYSBhIHNlbGYtY2xvc2luZyB0YWcpCisKKyAgICAgICAgQSB0YWcgdGhhdCBoYXMgY29udGVudHMgaXMgbmV2ZXIgYW4gZW1wdHktZWxlbWVudCB0YWcuCisKKyAgICAgICAgQSB0YWcgdGhhdCBoYXMgbm8gY29udGVudHMgbWF5IG9yIG1heSBub3QgYmUgYW4gZW1wdHktZWxlbWVudAorICAgICAgICB0YWcuIEl0IGRlcGVuZHMgb24gdGhlIGJ1aWxkZXIgdXNlZCB0byBjcmVhdGUgdGhlIHRhZy4gSWYgdGhlCisgICAgICAgIGJ1aWxkZXIgaGFzIGEgZGVzaWduYXRlZCBsaXN0IG9mIGVtcHR5LWVsZW1lbnQgdGFncywgdGhlbiBvbmx5CisgICAgICAgIGEgdGFnIHdob3NlIG5hbWUgc2hvd3MgdXAgaW4gdGhhdCBsaXN0IGlzIGNvbnNpZGVyZWQgYW4KKyAgICAgICAgZW1wdHktZWxlbWVudCB0YWcuCisKKyAgICAgICAgSWYgdGhlIGJ1aWxkZXIgaGFzIG5vIGRlc2lnbmF0ZWQgbGlzdCBvZiBlbXB0eS1lbGVtZW50IHRhZ3MsCisgICAgICAgIHRoZW4gYW55IHRhZyB3aXRoIG5vIGNvbnRlbnRzIGlzIGFuIGVtcHR5LWVsZW1lbnQgdGFnLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmNvbnRlbnRzKSA9PSAwIGFuZCBzZWxmLmNhbl9iZV9lbXB0eV9lbGVtZW50CisgICAgaXNTZWxmQ2xvc2luZyA9IGlzX2VtcHR5X2VsZW1lbnQgICMgQlMzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc3RyaW5nKHNlbGYpOgorICAgICAgICAiIiJDb252ZW5pZW5jZSBwcm9wZXJ0eSB0byBnZXQgdGhlIHNpbmdsZSBzdHJpbmcgd2l0aGluIHRoaXMgdGFnLgorCisgICAgICAgIDpSZXR1cm46IElmIHRoaXMgdGFnIGhhcyBhIHNpbmdsZSBzdHJpbmcgY2hpbGQsIHJldHVybiB2YWx1ZQorICAgICAgICAgaXMgdGhhdCBzdHJpbmcuIElmIHRoaXMgdGFnIGhhcyBubyBjaGlsZHJlbiwgb3IgbW9yZSB0aGFuIG9uZQorICAgICAgICAgY2hpbGQsIHJldHVybiB2YWx1ZSBpcyBOb25lLiBJZiB0aGlzIHRhZyBoYXMgb25lIGNoaWxkIHRhZywKKyAgICAgICAgIHJldHVybiB2YWx1ZSBpcyB0aGUgJ3N0cmluZycgYXR0cmlidXRlIG9mIHRoZSBjaGlsZCB0YWcsCisgICAgICAgICByZWN1cnNpdmVseS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxlbihzZWxmLmNvbnRlbnRzKSAhPSAxOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgY2hpbGQgPSBzZWxmLmNvbnRlbnRzWzBdCisgICAgICAgIGlmIGlzaW5zdGFuY2UoY2hpbGQsIE5hdmlnYWJsZVN0cmluZyk6CisgICAgICAgICAgICByZXR1cm4gY2hpbGQKKyAgICAgICAgcmV0dXJuIGNoaWxkLnN0cmluZworCisgICAgQHN0cmluZy5zZXR0ZXIKKyAgICBkZWYgc3RyaW5nKHNlbGYsIHN0cmluZyk6CisgICAgICAgIHNlbGYuY2xlYXIoKQorICAgICAgICBzZWxmLmFwcGVuZChzdHJpbmcuX19jbGFzc19fKHN0cmluZykpCisKKyAgICBkZWYgX2FsbF9zdHJpbmdzKHNlbGYsIHN0cmlwPUZhbHNlLCB0eXBlcz0oTmF2aWdhYmxlU3RyaW5nLCBDRGF0YSkpOgorICAgICAgICAiIiJZaWVsZCBhbGwgc3RyaW5ncyBvZiBjZXJ0YWluIGNsYXNzZXMsIHBvc3NpYmx5IHN0cmlwcGluZyB0aGVtLgorCisgICAgICAgIEJ5IGRlZmF1bHQsIHlpZWxkcyBvbmx5IE5hdmlnYWJsZVN0cmluZyBhbmQgQ0RhdGEgb2JqZWN0cy4gU28KKyAgICAgICAgbm8gY29tbWVudHMsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCBldGMuCisgICAgICAgICIiIgorICAgICAgICBmb3IgZGVzY2VuZGFudCBpbiBzZWxmLmRlc2NlbmRhbnRzOgorICAgICAgICAgICAgaWYgKAorICAgICAgICAgICAgICAgICh0eXBlcyBpcyBOb25lIGFuZCBub3QgaXNpbnN0YW5jZShkZXNjZW5kYW50LCBOYXZpZ2FibGVTdHJpbmcpKQorICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgKHR5cGVzIGlzIG5vdCBOb25lIGFuZCB0eXBlKGRlc2NlbmRhbnQpIG5vdCBpbiB0eXBlcykpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBzdHJpcDoKKyAgICAgICAgICAgICAgICBkZXNjZW5kYW50ID0gZGVzY2VuZGFudC5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgbGVuKGRlc2NlbmRhbnQpID09IDA6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB5aWVsZCBkZXNjZW5kYW50CisKKyAgICBzdHJpbmdzID0gcHJvcGVydHkoX2FsbF9zdHJpbmdzKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHN0cmlwcGVkX3N0cmluZ3Moc2VsZik6CisgICAgICAgIGZvciBzdHJpbmcgaW4gc2VsZi5fYWxsX3N0cmluZ3MoVHJ1ZSk6CisgICAgICAgICAgICB5aWVsZCBzdHJpbmcKKworICAgIGRlZiBnZXRfdGV4dChzZWxmLCBzZXBhcmF0b3I9dSIiLCBzdHJpcD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgdHlwZXM9KE5hdmlnYWJsZVN0cmluZywgQ0RhdGEpKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCBhbGwgY2hpbGQgc3RyaW5ncywgY29uY2F0ZW5hdGVkIHVzaW5nIHRoZSBnaXZlbiBzZXBhcmF0b3IuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VwYXJhdG9yLmpvaW4oW3MgZm9yIHMgaW4gc2VsZi5fYWxsX3N0cmluZ3MoCisgICAgICAgICAgICAgICAgICAgIHN0cmlwLCB0eXBlcz10eXBlcyldKQorICAgIGdldFRleHQgPSBnZXRfdGV4dAorICAgIHRleHQgPSBwcm9wZXJ0eShnZXRfdGV4dCkKKworICAgIGRlZiBkZWNvbXBvc2Uoc2VsZik6CisgICAgICAgICIiIlJlY3Vyc2l2ZWx5IGRlc3Ryb3lzIHRoZSBjb250ZW50cyBvZiB0aGlzIHRyZWUuIiIiCisgICAgICAgIHNlbGYuZXh0cmFjdCgpCisgICAgICAgIGkgPSBzZWxmCisgICAgICAgIHdoaWxlIGkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBuZXh0ID0gaS5uZXh0X2VsZW1lbnQKKyAgICAgICAgICAgIGkuX19kaWN0X18uY2xlYXIoKQorICAgICAgICAgICAgaS5jb250ZW50cyA9IFtdCisgICAgICAgICAgICBpID0gbmV4dAorCisgICAgZGVmIGNsZWFyKHNlbGYsIGRlY29tcG9zZT1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBFeHRyYWN0IGFsbCBjaGlsZHJlbi4gSWYgZGVjb21wb3NlIGlzIFRydWUsIGRlY29tcG9zZSBpbnN0ZWFkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgZGVjb21wb3NlOgorICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gc2VsZi5jb250ZW50c1s6XToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIFRhZyk6CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZGVjb21wb3NlKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmV4dHJhY3QoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gc2VsZi5jb250ZW50c1s6XToKKyAgICAgICAgICAgICAgICBlbGVtZW50LmV4dHJhY3QoKQorCisgICAgZGVmIGluZGV4KHNlbGYsIGVsZW1lbnQpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCB0aGUgaW5kZXggb2YgYSBjaGlsZCBieSBpZGVudGl0eSwgbm90IHZhbHVlLiBBdm9pZHMgaXNzdWVzIHdpdGgKKyAgICAgICAgdGFnLmNvbnRlbnRzLmluZGV4KGVsZW1lbnQpIGdldHRpbmcgdGhlIGluZGV4IG9mIGVxdWFsIGVsZW1lbnRzLgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIGksIGNoaWxkIGluIGVudW1lcmF0ZShzZWxmLmNvbnRlbnRzKToKKyAgICAgICAgICAgIGlmIGNoaWxkIGlzIGVsZW1lbnQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVGFnLmluZGV4OiBlbGVtZW50IG5vdCBpbiB0YWciKQorCisgICAgZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAna2V5JyBhdHRyaWJ1dGUgZm9yIHRoZSB0YWcsIG9yCisgICAgICAgIHRoZSB2YWx1ZSBnaXZlbiBmb3IgJ2RlZmF1bHQnIGlmIGl0IGRvZXNuJ3QgaGF2ZSB0aGF0CisgICAgICAgIGF0dHJpYnV0ZS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuYXR0cnMuZ2V0KGtleSwgZGVmYXVsdCkKKworICAgIGRlZiBoYXNfYXR0cihzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4ga2V5IGluIHNlbGYuYXR0cnMKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmKS5fX2hhc2hfXygpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgIiIidGFnW2tleV0gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICdrZXknIGF0dHJpYnV0ZSBmb3IgdGhlIHRhZywKKyAgICAgICAgYW5kIHRocm93cyBhbiBleGNlcHRpb24gaWYgaXQncyBub3QgdGhlcmUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLmF0dHJzW2tleV0KKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgIkl0ZXJhdGluZyBvdmVyIGEgdGFnIGl0ZXJhdGVzIG92ZXIgaXRzIGNvbnRlbnRzLiIKKyAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5jb250ZW50cykKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAiVGhlIGxlbmd0aCBvZiBhIHRhZyBpcyB0aGUgbGVuZ3RoIG9mIGl0cyBsaXN0IG9mIGNvbnRlbnRzLiIKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmNvbnRlbnRzKQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB4KToKKyAgICAgICAgcmV0dXJuIHggaW4gc2VsZi5jb250ZW50cworCisgICAgZGVmIF9fbm9uemVyb19fKHNlbGYpOgorICAgICAgICAiQSB0YWcgaXMgbm9uLU5vbmUgZXZlbiBpZiBpdCBoYXMgbm8gY29udGVudHMuIgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICAiIiJTZXR0aW5nIHRhZ1trZXldIHNldHMgdGhlIHZhbHVlIG9mIHRoZSAna2V5JyBhdHRyaWJ1dGUgZm9yIHRoZQorICAgICAgICB0YWcuIiIiCisgICAgICAgIHNlbGYuYXR0cnNba2V5XSA9IHZhbHVlCisKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgIkRlbGV0aW5nIHRhZ1trZXldIGRlbGV0ZXMgYWxsICdrZXknIGF0dHJpYnV0ZXMgZm9yIHRoZSB0YWcuIgorICAgICAgICBzZWxmLmF0dHJzLnBvcChrZXksIE5vbmUpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ2FsbGluZyBhIHRhZyBsaWtlIGEgZnVuY3Rpb24gaXMgdGhlIHNhbWUgYXMgY2FsbGluZyBpdHMKKyAgICAgICAgZmluZF9hbGwoKSBtZXRob2QuIEVnLiB0YWcoJ2EnKSByZXR1cm5zIGEgbGlzdCBvZiBhbGwgdGhlIEEgdGFncworICAgICAgICBmb3VuZCB3aXRoaW4gdGhpcyB0YWcuIiIiCisgICAgICAgIHJldHVybiBzZWxmLmZpbmRfYWxsKCphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCB0YWcpOgorICAgICAgICAjcHJpbnQgIkdldGF0dHIgJXMuJXMiICUgKHNlbGYuX19jbGFzc19fLCB0YWcpCisgICAgICAgIGlmIGxlbih0YWcpID4gMyBhbmQgdGFnLmVuZHN3aXRoKCdUYWcnKToKKyAgICAgICAgICAgICMgQlMzOiBzb3VwLmFUYWcgLT4gInNvdXAuZmluZCgiYSIpCisgICAgICAgICAgICB0YWdfbmFtZSA9IHRhZ1s6LTNdCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICcuJXNUYWcgaXMgZGVwcmVjYXRlZCwgdXNlIC5maW5kKCIlcyIpIGluc3RlYWQuJyAlICgKKyAgICAgICAgICAgICAgICAgICAgdGFnX25hbWUsIHRhZ19uYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbmQodGFnX25hbWUpCisgICAgICAgICMgV2Ugc3BlY2lhbCBjYXNlIGNvbnRlbnRzIHRvIGF2b2lkIHJlY3Vyc2lvbi4KKyAgICAgICAgZWxpZiBub3QgdGFnLnN0YXJ0c3dpdGgoIl9fIikgYW5kIG5vdCB0YWc9PSJjb250ZW50cyI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5maW5kKHRhZykKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoCisgICAgICAgICAgICAiJyVzJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnJXMnIiAlIChzZWxmLl9fY2xhc3NfXywgdGFnKSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIHRoaXMgdGFnIGhhcyB0aGUgc2FtZSBuYW1lLCB0aGUgc2FtZSBhdHRyaWJ1dGVzLAorICAgICAgICBhbmQgdGhlIHNhbWUgY29udGVudHMgKHJlY3Vyc2l2ZWx5KSBhcyB0aGUgZ2l2ZW4gdGFnLiIiIgorICAgICAgICBpZiBzZWxmIGlzIG90aGVyOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgKG5vdCBoYXNhdHRyKG90aGVyLCAnbmFtZScpIG9yCisgICAgICAgICAgICBub3QgaGFzYXR0cihvdGhlciwgJ2F0dHJzJykgb3IKKyAgICAgICAgICAgIG5vdCBoYXNhdHRyKG90aGVyLCAnY29udGVudHMnKSBvcgorICAgICAgICAgICAgc2VsZi5uYW1lICE9IG90aGVyLm5hbWUgb3IKKyAgICAgICAgICAgIHNlbGYuYXR0cnMgIT0gb3RoZXIuYXR0cnMgb3IKKyAgICAgICAgICAgIGxlbihzZWxmKSAhPSBsZW4ob3RoZXIpKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBmb3IgaSwgbXlfY2hpbGQgaW4gZW51bWVyYXRlKHNlbGYuY29udGVudHMpOgorICAgICAgICAgICAgaWYgbXlfY2hpbGQgIT0gb3RoZXIuY29udGVudHNbaV06CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiUmV0dXJucyB0cnVlIGlmZiB0aGlzIHRhZyBpcyBub3QgaWRlbnRpY2FsIHRvIHRoZSBvdGhlciB0YWcsCisgICAgICAgIGFzIGRlZmluZWQgaW4gX19lcV9fLiIiIgorICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORyk6CisgICAgICAgICIiIlJlbmRlcnMgdGhpcyB0YWcgYXMgYSBzdHJpbmcuIiIiCisgICAgICAgIHJldHVybiBzZWxmLmVuY29kZShlbmNvZGluZykKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGVjb2RlKCkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5lbmNvZGUoKQorCisgICAgaWYgUFkzSzoKKyAgICAgICAgX19zdHJfXyA9IF9fcmVwcl9fID0gX191bmljb2RlX18KKworICAgIGRlZiBlbmNvZGUoc2VsZiwgZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcsCisgICAgICAgICAgICAgICBpbmRlbnRfbGV2ZWw9Tm9uZSwgZm9ybWF0dGVyPSJtaW5pbWFsIiwKKyAgICAgICAgICAgICAgIGVycm9ycz0ieG1sY2hhcnJlZnJlcGxhY2UiKToKKyAgICAgICAgIyBUdXJuIHRoZSBkYXRhIHN0cnVjdHVyZSBpbnRvIFVuaWNvZGUsIHRoZW4gZW5jb2RlIHRoZQorICAgICAgICAjIFVuaWNvZGUuCisgICAgICAgIHUgPSBzZWxmLmRlY29kZShpbmRlbnRfbGV2ZWwsIGVuY29kaW5nLCBmb3JtYXR0ZXIpCisgICAgICAgIHJldHVybiB1LmVuY29kZShlbmNvZGluZywgZXJyb3JzKQorCisgICAgZGVmIF9zaG91bGRfcHJldHR5X3ByaW50KHNlbGYsIGluZGVudF9sZXZlbCk6CisgICAgICAgICIiIlNob3VsZCB0aGlzIHRhZyBiZSBwcmV0dHktcHJpbnRlZD8iIiIKKyAgICAgICAgcmV0dXJuICgKKyAgICAgICAgICAgIGluZGVudF9sZXZlbCBpcyBub3QgTm9uZSBhbmQKKyAgICAgICAgICAgIChzZWxmLm5hbWUgbm90IGluIEhUTUxBd2FyZUVudGl0eVN1YnN0aXR1dGlvbi5wcmVmb3JtYXR0ZWRfdGFncworICAgICAgICAgICAgIG9yIHNlbGYuX2lzX3htbCkpCisKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGluZGVudF9sZXZlbD1Ob25lLAorICAgICAgICAgICAgICAgZXZlbnR1YWxfZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcsCisgICAgICAgICAgICAgICBmb3JtYXR0ZXI9Im1pbmltYWwiKToKKyAgICAgICAgIiIiUmV0dXJucyBhIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhpcyB0YWcgYW5kIGl0cyBjb250ZW50cy4KKworICAgICAgICA6cGFyYW0gZXZlbnR1YWxfZW5jb2Rpbmc6IFRoZSB0YWcgaXMgZGVzdGluZWQgdG8gYmUKKyAgICAgICAgICAgZW5jb2RlZCBpbnRvIHRoaXMgZW5jb2RpbmcuIFRoaXMgbWV0aG9kIGlzIF9ub3RfCisgICAgICAgICAgIHJlc3BvbnNpYmxlIGZvciBwZXJmb3JtaW5nIHRoYXQgZW5jb2RpbmcuIFRoaXMgaW5mb3JtYXRpb24KKyAgICAgICAgICAgaXMgcGFzc2VkIGluIHNvIHRoYXQgaXQgY2FuIGJlIHN1YnN0aXR1dGVkIGluIGlmIHRoZQorICAgICAgICAgICBkb2N1bWVudCBjb250YWlucyBhIDxNRVRBPiB0YWcgdGhhdCBtZW50aW9ucyB0aGUgZG9jdW1lbnQncworICAgICAgICAgICBlbmNvZGluZy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBGaXJzdCBvZmYsIHR1cm4gYSBzdHJpbmcgZm9ybWF0dGVyIGludG8gYSBmdW5jdGlvbi4gVGhpcworICAgICAgICAjIHdpbGwgc3RvcCB0aGUgbG9va3VwIGZyb20gaGFwcGVuaW5nIG92ZXIgYW5kIG92ZXIgYWdhaW4uCisgICAgICAgIGlmIG5vdCBjYWxsYWJsZShmb3JtYXR0ZXIpOgorICAgICAgICAgICAgZm9ybWF0dGVyID0gc2VsZi5fZm9ybWF0dGVyX2Zvcl9uYW1lKGZvcm1hdHRlcikKKworICAgICAgICBhdHRycyA9IFtdCisgICAgICAgIGlmIHNlbGYuYXR0cnM6CisgICAgICAgICAgICBmb3Iga2V5LCB2YWwgaW4gc29ydGVkKHNlbGYuYXR0cnMuaXRlbXMoKSk6CisgICAgICAgICAgICAgICAgaWYgdmFsIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGRlY29kZWQgPSBrZXkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbCwgbGlzdCkgb3IgaXNpbnN0YW5jZSh2YWwsIHR1cGxlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9ICcgJy5qb2luKHZhbCkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZSh2YWwsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdW5pY29kZSh2YWwpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgKAorICAgICAgICAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZSh2YWwsIEF0dHJpYnV0ZVZhbHVlV2l0aENoYXJzZXRTdWJzdGl0dXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZXZlbnR1YWxfZW5jb2RpbmcgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLmVuY29kZShldmVudHVhbF9lbmNvZGluZykKKworICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5mb3JtYXRfc3RyaW5nKHZhbCwgZm9ybWF0dGVyKQorICAgICAgICAgICAgICAgICAgICBkZWNvZGVkID0gKAorICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZShrZXkpICsgJz0nCisgICAgICAgICAgICAgICAgICAgICAgICArIEVudGl0eVN1YnN0aXR1dGlvbi5xdW90ZWRfYXR0cmlidXRlX3ZhbHVlKHRleHQpKQorICAgICAgICAgICAgICAgIGF0dHJzLmFwcGVuZChkZWNvZGVkKQorICAgICAgICBjbG9zZSA9ICcnCisgICAgICAgIGNsb3NlVGFnID0gJycKKworICAgICAgICBwcmVmaXggPSAnJworICAgICAgICBpZiBzZWxmLnByZWZpeDoKKyAgICAgICAgICAgIHByZWZpeCA9IHNlbGYucHJlZml4ICsgIjoiCisKKyAgICAgICAgaWYgc2VsZi5pc19lbXB0eV9lbGVtZW50OgorICAgICAgICAgICAgY2xvc2UgPSAnLycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNsb3NlVGFnID0gJzwvJXMlcz4nICUgKHByZWZpeCwgc2VsZi5uYW1lKQorCisgICAgICAgIHByZXR0eV9wcmludCA9IHNlbGYuX3Nob3VsZF9wcmV0dHlfcHJpbnQoaW5kZW50X2xldmVsKQorICAgICAgICBzcGFjZSA9ICcnCisgICAgICAgIGluZGVudF9zcGFjZSA9ICcnCisgICAgICAgIGlmIGluZGVudF9sZXZlbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGluZGVudF9zcGFjZSA9ICgnICcgKiAoaW5kZW50X2xldmVsIC0gMSkpCisgICAgICAgIGlmIHByZXR0eV9wcmludDoKKyAgICAgICAgICAgIHNwYWNlID0gaW5kZW50X3NwYWNlCisgICAgICAgICAgICBpbmRlbnRfY29udGVudHMgPSBpbmRlbnRfbGV2ZWwgKyAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbmRlbnRfY29udGVudHMgPSBOb25lCisgICAgICAgIGNvbnRlbnRzID0gc2VsZi5kZWNvZGVfY29udGVudHMoCisgICAgICAgICAgICBpbmRlbnRfY29udGVudHMsIGV2ZW50dWFsX2VuY29kaW5nLCBmb3JtYXR0ZXIpCisKKyAgICAgICAgaWYgc2VsZi5oaWRkZW46CisgICAgICAgICAgICAjIFRoaXMgaXMgdGhlICdkb2N1bWVudCByb290JyBvYmplY3QuCisgICAgICAgICAgICBzID0gY29udGVudHMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHMgPSBbXQorICAgICAgICAgICAgYXR0cmlidXRlX3N0cmluZyA9ICcnCisgICAgICAgICAgICBpZiBhdHRyczoKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVfc3RyaW5nID0gJyAnICsgJyAnLmpvaW4oYXR0cnMpCisgICAgICAgICAgICBpZiBpbmRlbnRfbGV2ZWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyBFdmVuIGlmIHRoaXMgcGFydGljdWxhciB0YWcgaXMgbm90IHByZXR0eS1wcmludGVkLAorICAgICAgICAgICAgICAgICMgd2Ugc2hvdWxkIGluZGVudCB1cCB0byB0aGUgc3RhcnQgb2YgdGhlIHRhZy4KKyAgICAgICAgICAgICAgICBzLmFwcGVuZChpbmRlbnRfc3BhY2UpCisgICAgICAgICAgICBzLmFwcGVuZCgnPCVzJXMlcyVzPicgJSAoCisgICAgICAgICAgICAgICAgICAgIHByZWZpeCwgc2VsZi5uYW1lLCBhdHRyaWJ1dGVfc3RyaW5nLCBjbG9zZSkpCisgICAgICAgICAgICBpZiBwcmV0dHlfcHJpbnQ6CisgICAgICAgICAgICAgICAgcy5hcHBlbmQoIlxuIikKKyAgICAgICAgICAgIHMuYXBwZW5kKGNvbnRlbnRzKQorICAgICAgICAgICAgaWYgcHJldHR5X3ByaW50IGFuZCBjb250ZW50cyBhbmQgY29udGVudHNbLTFdICE9ICJcbiI6CisgICAgICAgICAgICAgICAgcy5hcHBlbmQoIlxuIikKKyAgICAgICAgICAgIGlmIHByZXR0eV9wcmludCBhbmQgY2xvc2VUYWc6CisgICAgICAgICAgICAgICAgcy5hcHBlbmQoc3BhY2UpCisgICAgICAgICAgICBzLmFwcGVuZChjbG9zZVRhZykKKyAgICAgICAgICAgIGlmIGluZGVudF9sZXZlbCBpcyBub3QgTm9uZSBhbmQgY2xvc2VUYWcgYW5kIHNlbGYubmV4dF9zaWJsaW5nOgorICAgICAgICAgICAgICAgICMgRXZlbiBpZiB0aGlzIHBhcnRpY3VsYXIgdGFnIGlzIG5vdCBwcmV0dHktcHJpbnRlZCwKKyAgICAgICAgICAgICAgICAjIHdlJ3JlIG5vdyBkb25lIHdpdGggdGhlIHRhZywgYW5kIHdlIHNob3VsZCBhZGQgYQorICAgICAgICAgICAgICAgICMgbmV3bGluZSBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgICAgICAgICBzLmFwcGVuZCgiXG4iKQorICAgICAgICAgICAgcyA9ICcnLmpvaW4ocykKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBwcmV0dGlmeShzZWxmLCBlbmNvZGluZz1Ob25lLCBmb3JtYXR0ZXI9Im1pbmltYWwiKToKKyAgICAgICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRlY29kZShUcnVlLCBmb3JtYXR0ZXI9Zm9ybWF0dGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZW5jb2RlKGVuY29kaW5nLCBUcnVlLCBmb3JtYXR0ZXI9Zm9ybWF0dGVyKQorCisgICAgZGVmIGRlY29kZV9jb250ZW50cyhzZWxmLCBpbmRlbnRfbGV2ZWw9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZXZlbnR1YWxfZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcsCisgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcj0ibWluaW1hbCIpOgorICAgICAgICAiIiJSZW5kZXJzIHRoZSBjb250ZW50cyBvZiB0aGlzIHRhZyBhcyBhIFVuaWNvZGUgc3RyaW5nLgorCisgICAgICAgIDpwYXJhbSBldmVudHVhbF9lbmNvZGluZzogVGhlIHRhZyBpcyBkZXN0aW5lZCB0byBiZQorICAgICAgICAgICBlbmNvZGVkIGludG8gdGhpcyBlbmNvZGluZy4gVGhpcyBtZXRob2QgaXMgX25vdF8KKyAgICAgICAgICAgcmVzcG9uc2libGUgZm9yIHBlcmZvcm1pbmcgdGhhdCBlbmNvZGluZy4gVGhpcyBpbmZvcm1hdGlvbgorICAgICAgICAgICBpcyBwYXNzZWQgaW4gc28gdGhhdCBpdCBjYW4gYmUgc3Vic3RpdHV0ZWQgaW4gaWYgdGhlCisgICAgICAgICAgIGRvY3VtZW50IGNvbnRhaW5zIGEgPE1FVEE+IHRhZyB0aGF0IG1lbnRpb25zIHRoZSBkb2N1bWVudCdzCisgICAgICAgICAgIGVuY29kaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgIyBGaXJzdCBvZmYsIHR1cm4gYSBzdHJpbmcgZm9ybWF0dGVyIGludG8gYSBmdW5jdGlvbi4gVGhpcworICAgICAgICAjIHdpbGwgc3RvcCB0aGUgbG9va3VwIGZyb20gaGFwcGVuaW5nIG92ZXIgYW5kIG92ZXIgYWdhaW4uCisgICAgICAgIGlmIG5vdCBjYWxsYWJsZShmb3JtYXR0ZXIpOgorICAgICAgICAgICAgZm9ybWF0dGVyID0gc2VsZi5fZm9ybWF0dGVyX2Zvcl9uYW1lKGZvcm1hdHRlcikKKworICAgICAgICBwcmV0dHlfcHJpbnQgPSAoaW5kZW50X2xldmVsIGlzIG5vdCBOb25lKQorICAgICAgICBzID0gW10KKyAgICAgICAgZm9yIGMgaW4gc2VsZjoKKyAgICAgICAgICAgIHRleHQgPSBOb25lCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGMsIE5hdmlnYWJsZVN0cmluZyk6CisgICAgICAgICAgICAgICAgdGV4dCA9IGMub3V0cHV0X3JlYWR5KGZvcm1hdHRlcikKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShjLCBUYWcpOgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKGMuZGVjb2RlKGluZGVudF9sZXZlbCwgZXZlbnR1YWxfZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyKSkKKyAgICAgICAgICAgIGlmIHRleHQgYW5kIGluZGVudF9sZXZlbCBhbmQgbm90IHNlbGYubmFtZSA9PSAncHJlJzoKKyAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5zdHJpcCgpCisgICAgICAgICAgICBpZiB0ZXh0OgorICAgICAgICAgICAgICAgIGlmIHByZXR0eV9wcmludCBhbmQgbm90IHNlbGYubmFtZSA9PSAncHJlJzoKKyAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoIiAiICogKGluZGVudF9sZXZlbCAtIDEpKQorICAgICAgICAgICAgICAgIHMuYXBwZW5kKHRleHQpCisgICAgICAgICAgICAgICAgaWYgcHJldHR5X3ByaW50IGFuZCBub3Qgc2VsZi5uYW1lID09ICdwcmUnOgorICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZCgiXG4iKQorICAgICAgICByZXR1cm4gJycuam9pbihzKQorCisgICAgZGVmIGVuY29kZV9jb250ZW50cygKKyAgICAgICAgc2VsZiwgaW5kZW50X2xldmVsPU5vbmUsIGVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HLAorICAgICAgICBmb3JtYXR0ZXI9Im1pbmltYWwiKToKKyAgICAgICAgIiIiUmVuZGVycyB0aGUgY29udGVudHMgb2YgdGhpcyB0YWcgYXMgYSBieXRlc3RyaW5nLiIiIgorICAgICAgICBjb250ZW50cyA9IHNlbGYuZGVjb2RlX2NvbnRlbnRzKGluZGVudF9sZXZlbCwgZW5jb2RpbmcsIGZvcm1hdHRlcikKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRzLmVuY29kZShlbmNvZGluZykKKworICAgICMgT2xkIG1ldGhvZCBmb3IgQlMzIGNvbXBhdGliaWxpdHkKKyAgICBkZWYgcmVuZGVyQ29udGVudHMoc2VsZiwgZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcsCisgICAgICAgICAgICAgICAgICAgICAgIHByZXR0eVByaW50PUZhbHNlLCBpbmRlbnRMZXZlbD0wKToKKyAgICAgICAgaWYgbm90IHByZXR0eVByaW50OgorICAgICAgICAgICAgaW5kZW50TGV2ZWwgPSBOb25lCisgICAgICAgIHJldHVybiBzZWxmLmVuY29kZV9jb250ZW50cygKKyAgICAgICAgICAgIGluZGVudF9sZXZlbD1pbmRlbnRMZXZlbCwgZW5jb2Rpbmc9ZW5jb2RpbmcpCisKKyAgICAjU291cCBtZXRob2RzCisKKyAgICBkZWYgZmluZChzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCByZWN1cnNpdmU9VHJ1ZSwgdGV4dD1Ob25lLAorICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJuIG9ubHkgdGhlIGZpcnN0IGNoaWxkIG9mIHRoaXMgVGFnIG1hdGNoaW5nIHRoZSBnaXZlbgorICAgICAgICBjcml0ZXJpYS4iIiIKKyAgICAgICAgciA9IE5vbmUKKyAgICAgICAgbCA9IHNlbGYuZmluZF9hbGwobmFtZSwgYXR0cnMsIHJlY3Vyc2l2ZSwgdGV4dCwgMSwgKiprd2FyZ3MpCisgICAgICAgIGlmIGw6CisgICAgICAgICAgICByID0gbFswXQorICAgICAgICByZXR1cm4gcgorICAgIGZpbmRDaGlsZCA9IGZpbmQKKworICAgIGRlZiBmaW5kX2FsbChzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCByZWN1cnNpdmU9VHJ1ZSwgdGV4dD1Ob25lLAorICAgICAgICAgICAgICAgICBsaW1pdD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIkV4dHJhY3RzIGEgbGlzdCBvZiBUYWcgb2JqZWN0cyB0aGF0IG1hdGNoIHRoZSBnaXZlbgorICAgICAgICBjcml0ZXJpYS4gIFlvdSBjYW4gc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgVGFnIGFuZCBhbnkKKyAgICAgICAgYXR0cmlidXRlcyB5b3Ugd2FudCB0aGUgVGFnIHRvIGhhdmUuCisKKyAgICAgICAgVGhlIHZhbHVlIG9mIGEga2V5LXZhbHVlIHBhaXIgaW4gdGhlICdhdHRycycgbWFwIGNhbiBiZSBhCisgICAgICAgIHN0cmluZywgYSBsaXN0IG9mIHN0cmluZ3MsIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCwgb3IgYQorICAgICAgICBjYWxsYWJsZSB0aGF0IHRha2VzIGEgc3RyaW5nIGFuZCByZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZQorICAgICAgICBzdHJpbmcgbWF0Y2hlcyBmb3Igc29tZSBjdXN0b20gZGVmaW5pdGlvbiBvZiAnbWF0Y2hlcycuIFRoZQorICAgICAgICBzYW1lIGlzIHRydWUgb2YgdGhlIHRhZyBuYW1lLiIiIgorCisgICAgICAgIGdlbmVyYXRvciA9IHNlbGYuZGVzY2VuZGFudHMKKyAgICAgICAgaWYgbm90IHJlY3Vyc2l2ZToKKyAgICAgICAgICAgIGdlbmVyYXRvciA9IHNlbGYuY2hpbGRyZW4KKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfYWxsKG5hbWUsIGF0dHJzLCB0ZXh0LCBsaW1pdCwgZ2VuZXJhdG9yLCAqKmt3YXJncykKKyAgICBmaW5kQWxsID0gZmluZF9hbGwgICAgICAgIyBCUzMKKyAgICBmaW5kQ2hpbGRyZW4gPSBmaW5kX2FsbCAgIyBCUzIKKworICAgICNHZW5lcmF0b3IgbWV0aG9kcworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjaGlsZHJlbihzZWxmKToKKyAgICAgICAgIyByZXR1cm4gaXRlcigpIHRvIG1ha2UgdGhlIHB1cnBvc2Ugb2YgdGhlIG1ldGhvZCBjbGVhcgorICAgICAgICByZXR1cm4gaXRlcihzZWxmLmNvbnRlbnRzKSAgIyBYWFggVGhpcyBzZWVtcyB0byBiZSB1bnRlc3RlZC4KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkZXNjZW5kYW50cyhzZWxmKToKKyAgICAgICAgaWYgbm90IGxlbihzZWxmLmNvbnRlbnRzKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzdG9wTm9kZSA9IHNlbGYuX2xhc3RfZGVzY2VuZGFudCgpLm5leHRfZWxlbWVudAorICAgICAgICBjdXJyZW50ID0gc2VsZi5jb250ZW50c1swXQorICAgICAgICB3aGlsZSBjdXJyZW50IGlzIG5vdCBzdG9wTm9kZToKKyAgICAgICAgICAgIHlpZWxkIGN1cnJlbnQKKyAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHRfZWxlbWVudAorCisgICAgIyBDU1Mgc2VsZWN0b3IgY29kZQorCisgICAgX3NlbGVjdG9yX2NvbWJpbmF0b3JzID0gWyc+JywgJysnLCAnfiddCisgICAgX3NlbGVjdF9kZWJ1ZyA9IEZhbHNlCisgICAgZGVmIHNlbGVjdChzZWxmLCBzZWxlY3RvciwgX2NhbmRpZGF0ZV9nZW5lcmF0b3I9Tm9uZSk6CisgICAgICAgICIiIlBlcmZvcm0gYSBDU1Mgc2VsZWN0aW9uIG9wZXJhdGlvbiBvbiB0aGUgY3VycmVudCBlbGVtZW50LiIiIgorICAgICAgICB0b2tlbnMgPSBzZWxlY3Rvci5zcGxpdCgpCisgICAgICAgIGN1cnJlbnRfY29udGV4dCA9IFtzZWxmXQorCisgICAgICAgIGlmIHRva2Vuc1stMV0gaW4gc2VsZi5fc2VsZWN0b3JfY29tYmluYXRvcnM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICdGaW5hbCBjb21iaW5hdG9yICIlcyIgaXMgbWlzc2luZyBhbiBhcmd1bWVudC4nICUgdG9rZW5zWy0xXSkKKyAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgorICAgICAgICAgICAgcHJpbnQgJ1J1bm5pbmcgQ1NTIHNlbGVjdG9yICIlcyInICUgc2VsZWN0b3IKKyAgICAgICAgZm9yIGluZGV4LCB0b2tlbiBpbiBlbnVtZXJhdGUodG9rZW5zKToKKyAgICAgICAgICAgIGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICBwcmludCAnIENvbnNpZGVyaW5nIHRva2VuICIlcyInICUgdG9rZW4KKyAgICAgICAgICAgIHJlY3Vyc2l2ZV9jYW5kaWRhdGVfZ2VuZXJhdG9yID0gTm9uZQorICAgICAgICAgICAgdGFnX25hbWUgPSBOb25lCisgICAgICAgICAgICBpZiB0b2tlbnNbaW5kZXgtMV0gaW4gc2VsZi5fc2VsZWN0b3JfY29tYmluYXRvcnM6CisgICAgICAgICAgICAgICAgIyBUaGlzIHRva2VuIHdhcyBjb25zdW1lZCBieSB0aGUgcHJldmlvdXMgY29tYmluYXRvci4gU2tpcCBpdC4KKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9zZWxlY3RfZGVidWc6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICcgIFRva2VuIHdhcyBjb25zdW1lZCBieSB0aGUgcHJldmlvdXMgY29tYmluYXRvci4nCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMgRWFjaCBvcGVyYXRpb24gY29ycmVzcG9uZHMgdG8gYSBjaGVja2VyIGZ1bmN0aW9uLCBhIHJ1bGUKKyAgICAgICAgICAgICMgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgYSBjYW5kaWRhdGUgbWF0Y2hlcyB0aGUKKyAgICAgICAgICAgICMgc2VsZWN0b3IuIENhbmRpZGF0ZXMgYXJlIGdlbmVyYXRlZCBieSB0aGUgYWN0aXZlCisgICAgICAgICAgICAjIGl0ZXJhdG9yLgorICAgICAgICAgICAgY2hlY2tlciA9IE5vbmUKKworICAgICAgICAgICAgbSA9IHNlbGYuYXR0cmlic2VsZWN0X3JlLm1hdGNoKHRva2VuKQorICAgICAgICAgICAgaWYgbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIEF0dHJpYnV0ZSBzZWxlY3RvcgorICAgICAgICAgICAgICAgIHRhZ19uYW1lLCBhdHRyaWJ1dGUsIG9wZXJhdG9yLCB2YWx1ZSA9IG0uZ3JvdXBzKCkKKyAgICAgICAgICAgICAgICBjaGVja2VyID0gc2VsZi5fYXR0cmlidXRlX2NoZWNrZXIob3BlcmF0b3IsIGF0dHJpYnV0ZSwgdmFsdWUpCisKKyAgICAgICAgICAgIGVsaWYgJyMnIGluIHRva2VuOgorICAgICAgICAgICAgICAgICMgSUQgc2VsZWN0b3IKKyAgICAgICAgICAgICAgICB0YWdfbmFtZSwgdGFnX2lkID0gdG9rZW4uc3BsaXQoJyMnLCAxKQorICAgICAgICAgICAgICAgIGRlZiBpZF9tYXRjaGVzKHRhZyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YWcuZ2V0KCdpZCcsIE5vbmUpID09IHRhZ19pZAorICAgICAgICAgICAgICAgIGNoZWNrZXIgPSBpZF9tYXRjaGVzCisKKyAgICAgICAgICAgIGVsaWYgJy4nIGluIHRva2VuOgorICAgICAgICAgICAgICAgICMgQ2xhc3Mgc2VsZWN0b3IKKyAgICAgICAgICAgICAgICB0YWdfbmFtZSwga2xhc3MgPSB0b2tlbi5zcGxpdCgnLicsIDEpCisgICAgICAgICAgICAgICAgY2xhc3NlcyA9IHNldChrbGFzcy5zcGxpdCgnLicpKQorICAgICAgICAgICAgICAgIGRlZiBjbGFzc2VzX21hdGNoKGNhbmRpZGF0ZSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc2VzLmlzc3Vic2V0KGNhbmRpZGF0ZS5nZXQoJ2NsYXNzJywgW10pKQorICAgICAgICAgICAgICAgIGNoZWNrZXIgPSBjbGFzc2VzX21hdGNoCisKKyAgICAgICAgICAgIGVsaWYgJzonIGluIHRva2VuOgorICAgICAgICAgICAgICAgICMgUHNldWRvLWNsYXNzCisgICAgICAgICAgICAgICAgdGFnX25hbWUsIHBzZXVkbyA9IHRva2VuLnNwbGl0KCc6JywgMSkKKyAgICAgICAgICAgICAgICBpZiB0YWdfbmFtZSA9PSAnJzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICJBIHBzZXVkby1jbGFzcyBtdXN0IGJlIHByZWZpeGVkIHdpdGggYSB0YWcgbmFtZS4iKQorICAgICAgICAgICAgICAgIHBzZXVkb19hdHRyaWJ1dGVzID0gcmUubWF0Y2goJyhbYS16QS1aXGQtXSspXCgoW2EtekEtWlxkXSspXCknLCBwc2V1ZG8pCisgICAgICAgICAgICAgICAgZm91bmQgPSBbXQorICAgICAgICAgICAgICAgIGlmIHBzZXVkb19hdHRyaWJ1dGVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBwc2V1ZG9fdHlwZSwgcHNldWRvX3ZhbHVlID0gcHNldWRvX2F0dHJpYnV0ZXMuZ3JvdXBzKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcHNldWRvX3R5cGUgPT0gJ250aC1vZi10eXBlJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2V1ZG9fdmFsdWUgPSBpbnQocHNldWRvX3ZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdPbmx5IG51bWVyaWMgdmFsdWVzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkIGZvciB0aGUgbnRoLW9mLXR5cGUgcHNldWRvLWNsYXNzLicpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwc2V1ZG9fdmFsdWUgPCAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdudGgtb2YtdHlwZSBwc2V1ZG8tY2xhc3MgdmFsdWUgbXVzdCBiZSBhdCBsZWFzdCAxLicpCisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBDb3VudGVyKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlc3RpbmF0aW9uKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudCA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgbnRoX2NoaWxkX29mX3R5cGUoc2VsZiwgdGFnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudCArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY291bnQgPT0gc2VsZi5kZXN0aW5hdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY291bnQgPiBzZWxmLmRlc3RpbmF0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTdG9wIHRoZSBnZW5lcmF0b3IgdGhhdCdzIHNlbmRpbmcgdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlc2UgdGhpbmdzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlciA9IENvdW50ZXIocHNldWRvX3ZhbHVlKS5udGhfY2hpbGRfb2ZfdHlwZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnT25seSB0aGUgZm9sbG93aW5nIHBzZXVkby1jbGFzc2VzIGFyZSBpbXBsZW1lbnRlZDogbnRoLW9mLXR5cGUuJykKKworICAgICAgICAgICAgZWxpZiB0b2tlbiA9PSAnKic6CisgICAgICAgICAgICAgICAgIyBTdGFyIHNlbGVjdG9yIC0tIG1hdGNoZXMgZXZlcnl0aGluZworICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsaWYgdG9rZW4gPT0gJz4nOgorICAgICAgICAgICAgICAgICMgUnVuIHRoZSBuZXh0IHRva2VuIGFzIGEgQ1NTIHNlbGVjdG9yIGFnYWluc3QgdGhlCisgICAgICAgICAgICAgICAgIyBkaXJlY3QgY2hpbGRyZW4gb2YgZWFjaCB0YWcgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KKyAgICAgICAgICAgICAgICByZWN1cnNpdmVfY2FuZGlkYXRlX2dlbmVyYXRvciA9IGxhbWJkYSB0YWc6IHRhZy5jaGlsZHJlbgorICAgICAgICAgICAgZWxpZiB0b2tlbiA9PSAnfic6CisgICAgICAgICAgICAgICAgIyBSdW4gdGhlIG5leHQgdG9rZW4gYXMgYSBDU1Mgc2VsZWN0b3IgYWdhaW5zdCB0aGUKKyAgICAgICAgICAgICAgICAjIHNpYmxpbmdzIG9mIGVhY2ggdGFnIGluIHRoZSBjdXJyZW50IGNvbnRleHQuCisgICAgICAgICAgICAgICAgcmVjdXJzaXZlX2NhbmRpZGF0ZV9nZW5lcmF0b3IgPSBsYW1iZGEgdGFnOiB0YWcubmV4dF9zaWJsaW5ncworICAgICAgICAgICAgZWxpZiB0b2tlbiA9PSAnKyc6CisgICAgICAgICAgICAgICAgIyBGb3IgZWFjaCB0YWcgaW4gdGhlIGN1cnJlbnQgY29udGV4dCwgcnVuIHRoZSBuZXh0CisgICAgICAgICAgICAgICAgIyB0b2tlbiBhcyBhIENTUyBzZWxlY3RvciBhZ2FpbnN0IHRoZSB0YWcncyBuZXh0CisgICAgICAgICAgICAgICAgIyBzaWJsaW5nIHRoYXQncyBhIHRhZy4KKyAgICAgICAgICAgICAgICBkZWYgbmV4dF90YWdfc2libGluZyh0YWcpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCB0YWcuZmluZF9uZXh0X3NpYmxpbmcoVHJ1ZSkKKyAgICAgICAgICAgICAgICByZWN1cnNpdmVfY2FuZGlkYXRlX2dlbmVyYXRvciA9IG5leHRfdGFnX3NpYmxpbmcKKworICAgICAgICAgICAgZWxpZiBzZWxmLnRhZ19uYW1lX3JlLm1hdGNoKHRva2VuKToKKyAgICAgICAgICAgICAgICAjIEp1c3QgYSB0YWcgbmFtZS4KKyAgICAgICAgICAgICAgICB0YWdfbmFtZSA9IHRva2VuCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICdVbnN1cHBvcnRlZCBvciBpbnZhbGlkIENTUyBzZWxlY3RvcjogIiVzIicgJSB0b2tlbikKKworICAgICAgICAgICAgaWYgcmVjdXJzaXZlX2NhbmRpZGF0ZV9nZW5lcmF0b3I6CisgICAgICAgICAgICAgICAgIyBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgc2VsZWN0b3IgbG9va3MgbGlrZSAgIj4gZm9vIi4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBUaGUgZ2VuZXJhdG9yIGNhbGxzIHNlbGVjdCgpIHJlY3Vyc2l2ZWx5IG9uIGV2ZXJ5CisgICAgICAgICAgICAgICAgIyBtZW1iZXIgb2YgdGhlIGN1cnJlbnQgY29udGV4dCwgcGFzc2luZyBpbiBhIGRpZmZlcmVudAorICAgICAgICAgICAgICAgICMgY2FuZGlkYXRlIGdlbmVyYXRvciBhbmQgYSBkaWZmZXJlbnQgc2VsZWN0b3IuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgSW4gdGhlIGNhc2Ugb2YgIj4gZm9vIiwgdGhlIGNhbmRpZGF0ZSBnZW5lcmF0b3IgaXMKKyAgICAgICAgICAgICAgICAjIG9uZSB0aGF0IHlpZWxkcyBhIHRhZydzIGRpcmVjdCBjaGlsZHJlbiAoIj4iKSwgYW5kCisgICAgICAgICAgICAgICAgIyB0aGUgc2VsZWN0b3IgaXMgImZvbyIuCisgICAgICAgICAgICAgICAgbmV4dF90b2tlbiA9IHRva2Vuc1tpbmRleCsxXQorICAgICAgICAgICAgICAgIGRlZiByZWN1cnNpdmVfc2VsZWN0KHRhZyk6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICcgICAgQ2FsbGluZyBzZWxlY3QoIiVzIikgcmVjdXJzaXZlbHkgb24gJXMgJXMnICUgKG5leHRfdG9rZW4sIHRhZy5uYW1lLCB0YWcuYXR0cnMpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAnLScgKiA0MAorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiB0YWcuc2VsZWN0KG5leHRfdG9rZW4sIHJlY3Vyc2l2ZV9jYW5kaWRhdGVfZ2VuZXJhdG9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAnKFJlY3Vyc2l2ZSBzZWxlY3QgcGlja2VkIHVwIGNhbmRpZGF0ZSAlcyAlcyknICUgKGkubmFtZSwgaS5hdHRycykKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJy0nICogNDAKKyAgICAgICAgICAgICAgICBfdXNlX2NhbmRpZGF0ZV9nZW5lcmF0b3IgPSByZWN1cnNpdmVfc2VsZWN0CisgICAgICAgICAgICBlbGlmIF9jYW5kaWRhdGVfZ2VuZXJhdG9yIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBCeSBkZWZhdWx0LCBhIHRhZydzIGNhbmRpZGF0ZXMgYXJlIGFsbCBvZiBpdHMKKyAgICAgICAgICAgICAgICAjIGNoaWxkcmVuLiBJZiB0YWdfbmFtZSBpcyBkZWZpbmVkLCBvbmx5IHlpZWxkIHRhZ3MKKyAgICAgICAgICAgICAgICAjIHdpdGggdGhhdCBuYW1lLgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgaWYgdGFnX25hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayA9ICJbYW55XSIKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrID0gdGFnX25hbWUKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJyAgIERlZmF1bHQgY2FuZGlkYXRlIGdlbmVyYXRvciwgdGFnIG5hbWU9IiVzIicgJSBjaGVjaworICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIHJlZHVuZGFudCB3aXRoIGxhdGVyIGNvZGUsIGJ1dCBpdCBzdG9wcworICAgICAgICAgICAgICAgICAgICAjIGEgYnVuY2ggb2YgYm9ndXMgdGFncyBmcm9tIGNsdXR0ZXJpbmcgdXAgdGhlCisgICAgICAgICAgICAgICAgICAgICMgZGVidWcgbG9nLgorICAgICAgICAgICAgICAgICAgICBkZWYgZGVmYXVsdF9jYW5kaWRhdGVfZ2VuZXJhdG9yKHRhZyk6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgY2hpbGQgaW4gdGFnLmRlc2NlbmRhbnRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGNoaWxkLCBUYWcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRhZ19uYW1lIGFuZCBub3QgY2hpbGQubmFtZSA9PSB0YWdfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBjaGlsZAorICAgICAgICAgICAgICAgICAgICBfdXNlX2NhbmRpZGF0ZV9nZW5lcmF0b3IgPSBkZWZhdWx0X2NhbmRpZGF0ZV9nZW5lcmF0b3IKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBfdXNlX2NhbmRpZGF0ZV9nZW5lcmF0b3IgPSBsYW1iZGEgdGFnOiB0YWcuZGVzY2VuZGFudHMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgX3VzZV9jYW5kaWRhdGVfZ2VuZXJhdG9yID0gX2NhbmRpZGF0ZV9nZW5lcmF0b3IKKworICAgICAgICAgICAgbmV3X2NvbnRleHQgPSBbXQorICAgICAgICAgICAgbmV3X2NvbnRleHRfaWRzID0gc2V0KFtdKQorICAgICAgICAgICAgZm9yIHRhZyBpbiBjdXJyZW50X2NvbnRleHQ6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiICAgIFJ1bm5pbmcgY2FuZGlkYXRlIGdlbmVyYXRvciBvbiAlcyAlcyIgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICB0YWcubmFtZSwgcmVwcih0YWcuYXR0cnMpKQorICAgICAgICAgICAgICAgIGZvciBjYW5kaWRhdGUgaW4gX3VzZV9jYW5kaWRhdGVfZ2VuZXJhdG9yKHRhZyk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGNhbmRpZGF0ZSwgVGFnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGlmIHRhZ19uYW1lIGFuZCBjYW5kaWRhdGUubmFtZSAhPSB0YWdfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGlmIGNoZWNrZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY2hlY2tlcihjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBjaGVja2VyIGhhcyBkZWNpZGVkIHdlIHNob3VsZCBubyBsb25nZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJ1biB0aGUgZ2VuZXJhdG9yLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGlmIGNoZWNrZXIgaXMgTm9uZSBvciByZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9zZWxlY3RfZGVidWc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgICAgU1VDQ0VTUyAlcyAlcyIgJSAoY2FuZGlkYXRlLm5hbWUsIHJlcHIoY2FuZGlkYXRlLmF0dHJzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlkKGNhbmRpZGF0ZSkgbm90IGluIG5ld19jb250ZXh0X2lkczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIGEgdGFnIG1hdGNoZXMgYSBzZWxlY3RvciBtb3JlIHRoYW4gb25jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRvbid0IGluY2x1ZGUgaXQgaW4gdGhlIGNvbnRleHQgbW9yZSB0aGFuIG9uY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NvbnRleHQuYXBwZW5kKGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY29udGV4dF9pZHMuYWRkKGlkKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgICAgRkFJTFVSRSAlcyAlcyIgJSAoY2FuZGlkYXRlLm5hbWUsIHJlcHIoY2FuZGlkYXRlLmF0dHJzKSkKKworICAgICAgICAgICAgY3VycmVudF9jb250ZXh0ID0gbmV3X2NvbnRleHQKKworICAgICAgICBpZiBzZWxmLl9zZWxlY3RfZGVidWc6CisgICAgICAgICAgICBwcmludCAiRmluYWwgdmVyZGljdDoiCisgICAgICAgICAgICBmb3IgaSBpbiBjdXJyZW50X2NvbnRleHQ6CisgICAgICAgICAgICAgICAgcHJpbnQgIiAlcyAlcyIgJSAoaS5uYW1lLCBpLmF0dHJzKQorICAgICAgICByZXR1cm4gY3VycmVudF9jb250ZXh0CisKKyAgICAjIE9sZCBuYW1lcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyAgICBkZWYgY2hpbGRHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmNoaWxkcmVuCisKKyAgICBkZWYgcmVjdXJzaXZlQ2hpbGRHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmRlc2NlbmRhbnRzCisKKyAgICBkZWYgaGFzX2tleShzZWxmLCBrZXkpOgorICAgICAgICAiIiJUaGlzIHdhcyBraW5kIG9mIG1pc2xlYWRpbmcgYmVjYXVzZSBoYXNfa2V5KCkgKGF0dHJpYnV0ZXMpCisgICAgICAgIHdhcyBkaWZmZXJlbnQgZnJvbSBfX2luX18gKGNvbnRlbnRzKS4gaGFzX2tleSgpIGlzIGdvbmUgaW4KKyAgICAgICAgUHl0aG9uIDMsIGFueXdheS4iIiIKKyAgICAgICAgd2FybmluZ3Mud2FybignaGFzX2tleSBpcyBkZXByZWNhdGVkLiBVc2UgaGFzX2F0dHIoIiVzIikgaW5zdGVhZC4nICUgKAorICAgICAgICAgICAgICAgIGtleSkpCisgICAgICAgIHJldHVybiBzZWxmLmhhc19hdHRyKGtleSkKKworIyBOZXh0LCBhIGNvdXBsZSBjbGFzc2VzIHRvIHJlcHJlc2VudCBxdWVyaWVzIGFuZCB0aGVpciByZXN1bHRzLgorY2xhc3MgU291cFN0cmFpbmVyKG9iamVjdCk6CisgICAgIiIiRW5jYXBzdWxhdGVzIGEgbnVtYmVyIG9mIHdheXMgb2YgbWF0Y2hpbmcgYSBtYXJrdXAgZWxlbWVudCAodGFnIG9yCisgICAgdGV4dCkuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYubmFtZSA9IHNlbGYuX25vcm1hbGl6ZV9zZWFyY2hfdmFsdWUobmFtZSkKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXR0cnMsIGRpY3QpOgorICAgICAgICAgICAgIyBUcmVhdCBhIG5vbi1kaWN0IHZhbHVlIGZvciBhdHRycyBhcyBhIHNlYXJjaCBmb3IgdGhlICdjbGFzcycKKyAgICAgICAgICAgICMgYXR0cmlidXRlLgorICAgICAgICAgICAga3dhcmdzWydjbGFzcyddID0gYXR0cnMKKyAgICAgICAgICAgIGF0dHJzID0gTm9uZQorCisgICAgICAgIGlmICdjbGFzc18nIGluIGt3YXJnczoKKyAgICAgICAgICAgICMgVHJlYXQgY2xhc3NfPSJmb28iIGFzIGEgc2VhcmNoIGZvciB0aGUgJ2NsYXNzJworICAgICAgICAgICAgIyBhdHRyaWJ1dGUsIG92ZXJyaWRpbmcgYW55IG5vbi1kaWN0IHZhbHVlIGZvciBhdHRycy4KKyAgICAgICAgICAgIGt3YXJnc1snY2xhc3MnXSA9IGt3YXJnc1snY2xhc3NfJ10KKyAgICAgICAgICAgIGRlbCBrd2FyZ3NbJ2NsYXNzXyddCisKKyAgICAgICAgaWYga3dhcmdzOgorICAgICAgICAgICAgaWYgYXR0cnM6CisgICAgICAgICAgICAgICAgYXR0cnMgPSBhdHRycy5jb3B5KCkKKyAgICAgICAgICAgICAgICBhdHRycy51cGRhdGUoa3dhcmdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhdHRycyA9IGt3YXJncworICAgICAgICBub3JtYWxpemVkX2F0dHJzID0ge30KKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gYXR0cnMuaXRlbXMoKToKKyAgICAgICAgICAgIG5vcm1hbGl6ZWRfYXR0cnNba2V5XSA9IHNlbGYuX25vcm1hbGl6ZV9zZWFyY2hfdmFsdWUodmFsdWUpCisKKyAgICAgICAgc2VsZi5hdHRycyA9IG5vcm1hbGl6ZWRfYXR0cnMKKyAgICAgICAgc2VsZi50ZXh0ID0gc2VsZi5fbm9ybWFsaXplX3NlYXJjaF92YWx1ZSh0ZXh0KQorCisgICAgZGVmIF9ub3JtYWxpemVfc2VhcmNoX3ZhbHVlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIyBMZWF2ZSBpdCBhbG9uZSBpZiBpdCdzIGEgVW5pY29kZSBzdHJpbmcsIGEgY2FsbGFibGUsIGEKKyAgICAgICAgIyByZWd1bGFyIGV4cHJlc3Npb24sIGEgYm9vbGVhbiwgb3IgTm9uZS4KKyAgICAgICAgaWYgKGlzaW5zdGFuY2UodmFsdWUsIHVuaWNvZGUpIG9yIGNhbGxhYmxlKHZhbHVlKSBvciBoYXNhdHRyKHZhbHVlLCAnbWF0Y2gnKQorICAgICAgICAgICAgb3IgaXNpbnN0YW5jZSh2YWx1ZSwgYm9vbCkgb3IgdmFsdWUgaXMgTm9uZSk6CisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKworICAgICAgICAjIElmIGl0J3MgYSBieXRlc3RyaW5nLCBjb252ZXJ0IGl0IHRvIFVuaWNvZGUsIHRyZWF0aW5nIGl0IGFzIFVURi04LgorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBieXRlcyk6CisgICAgICAgICAgICByZXR1cm4gdmFsdWUuZGVjb2RlKCJ1dGY4IikKKworICAgICAgICAjIElmIGl0J3MgbGlzdGxpa2UsIGNvbnZlcnQgaXQgaW50byBhIGxpc3Qgb2Ygc3RyaW5ncy4KKyAgICAgICAgaWYgaGFzYXR0cih2YWx1ZSwgJ19faXRlcl9fJyk6CisgICAgICAgICAgICBuZXdfdmFsdWUgPSBbXQorICAgICAgICAgICAgZm9yIHYgaW4gdmFsdWU6CisgICAgICAgICAgICAgICAgaWYgKGhhc2F0dHIodiwgJ19faXRlcl9fJykgYW5kIG5vdCBpc2luc3RhbmNlKHYsIGJ5dGVzKQorICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGlzaW5zdGFuY2UodiwgdW5pY29kZSkpOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSB0aGUgdXNlcidzIG1pc3Rha2UuIEluIHRoZQorICAgICAgICAgICAgICAgICAgICAjIGludGVyZXN0cyBvZiBhdm9pZGluZyBpbmZpbml0ZSBsb29wcywgd2UnbGwgbGV0CisgICAgICAgICAgICAgICAgICAgICMgaXQgdGhyb3VnaCBhcy1pcyByYXRoZXIgdGhhbiBkb2luZyBhIHJlY3Vyc2l2ZSBjYWxsLgorICAgICAgICAgICAgICAgICAgICBuZXdfdmFsdWUuYXBwZW5kKHYpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbmV3X3ZhbHVlLmFwcGVuZChzZWxmLl9ub3JtYWxpemVfc2VhcmNoX3ZhbHVlKHYpKQorICAgICAgICAgICAgcmV0dXJuIG5ld192YWx1ZQorCisgICAgICAgICMgT3RoZXJ3aXNlLCBjb252ZXJ0IGl0IGludG8gYSBVbmljb2RlIHN0cmluZy4KKyAgICAgICAgIyBUaGUgdW5pY29kZShzdHIoKSkgdGhpbmcgaXMgc28gdGhpcyB3aWxsIGRvIHRoZSBzYW1lIHRoaW5nIG9uIFB5dGhvbiAyCisgICAgICAgICMgYW5kIFB5dGhvbiAzLgorICAgICAgICByZXR1cm4gdW5pY29kZShzdHIodmFsdWUpKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYudGV4dDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRleHQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiJXN8JXMiICUgKHNlbGYubmFtZSwgc2VsZi5hdHRycykKKworICAgIGRlZiBzZWFyY2hfdGFnKHNlbGYsIG1hcmt1cF9uYW1lPU5vbmUsIG1hcmt1cF9hdHRycz17fSk6CisgICAgICAgIGZvdW5kID0gTm9uZQorICAgICAgICBtYXJrdXAgPSBOb25lCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwX25hbWUsIFRhZyk6CisgICAgICAgICAgICBtYXJrdXAgPSBtYXJrdXBfbmFtZQorICAgICAgICAgICAgbWFya3VwX2F0dHJzID0gbWFya3VwCisgICAgICAgIGNhbGxfZnVuY3Rpb25fd2l0aF90YWdfZGF0YSA9ICgKKyAgICAgICAgICAgIGlzaW5zdGFuY2Uoc2VsZi5uYW1lLCBjb2xsZWN0aW9ucy5DYWxsYWJsZSkKKyAgICAgICAgICAgIGFuZCBub3QgaXNpbnN0YW5jZShtYXJrdXBfbmFtZSwgVGFnKSkKKworICAgICAgICBpZiAoKG5vdCBzZWxmLm5hbWUpCisgICAgICAgICAgICBvciBjYWxsX2Z1bmN0aW9uX3dpdGhfdGFnX2RhdGEKKyAgICAgICAgICAgIG9yIChtYXJrdXAgYW5kIHNlbGYuX21hdGNoZXMobWFya3VwLCBzZWxmLm5hbWUpKQorICAgICAgICAgICAgb3IgKG5vdCBtYXJrdXAgYW5kIHNlbGYuX21hdGNoZXMobWFya3VwX25hbWUsIHNlbGYubmFtZSkpKToKKyAgICAgICAgICAgIGlmIGNhbGxfZnVuY3Rpb25fd2l0aF90YWdfZGF0YToKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYubmFtZShtYXJrdXBfbmFtZSwgbWFya3VwX2F0dHJzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtYXRjaCA9IFRydWUKKyAgICAgICAgICAgICAgICBtYXJrdXBfYXR0cl9tYXAgPSBOb25lCisgICAgICAgICAgICAgICAgZm9yIGF0dHIsIG1hdGNoX2FnYWluc3QgaW4gbGlzdChzZWxmLmF0dHJzLml0ZW1zKCkpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbWFya3VwX2F0dHJfbWFwOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihtYXJrdXBfYXR0cnMsICdnZXQnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXBfYXR0cl9tYXAgPSBtYXJrdXBfYXR0cnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwX2F0dHJfbWFwID0ge30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBtYXJrdXBfYXR0cnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cF9hdHRyX21hcFtrXSA9IHYKKyAgICAgICAgICAgICAgICAgICAgYXR0cl92YWx1ZSA9IG1hcmt1cF9hdHRyX21hcC5nZXQoYXR0cikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX21hdGNoZXMoYXR0cl92YWx1ZSwgbWF0Y2hfYWdhaW5zdCk6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgaWYgbWFya3VwOgorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1hcmt1cAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gbWFya3VwX25hbWUKKyAgICAgICAgaWYgZm91bmQgYW5kIHNlbGYudGV4dCBhbmQgbm90IHNlbGYuX21hdGNoZXMoZm91bmQuc3RyaW5nLCBzZWxmLnRleHQpOgorICAgICAgICAgICAgZm91bmQgPSBOb25lCisgICAgICAgIHJldHVybiBmb3VuZAorICAgIHNlYXJjaFRhZyA9IHNlYXJjaF90YWcKKworICAgIGRlZiBzZWFyY2goc2VsZiwgbWFya3VwKToKKyAgICAgICAgIyBwcmludCAnbG9va2luZyBmb3IgJXMgaW4gJXMnICUgKHNlbGYsIG1hcmt1cCkKKyAgICAgICAgZm91bmQgPSBOb25lCisgICAgICAgICMgSWYgZ2l2ZW4gYSBsaXN0IG9mIGl0ZW1zLCBzY2FuIGl0IGZvciBhIHRleHQgZWxlbWVudCB0aGF0CisgICAgICAgICMgbWF0Y2hlcy4KKyAgICAgICAgaWYgaGFzYXR0cihtYXJrdXAsICdfX2l0ZXJfXycpIGFuZCBub3QgaXNpbnN0YW5jZShtYXJrdXAsIChUYWcsIGJhc2VzdHJpbmcpKToKKyAgICAgICAgICAgIGZvciBlbGVtZW50IGluIG1hcmt1cDoKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIE5hdmlnYWJsZVN0cmluZykgXAorICAgICAgICAgICAgICAgICAgICAgICBhbmQgc2VsZi5zZWFyY2goZWxlbWVudCk6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gZWxlbWVudAorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAjIElmIGl0J3MgYSBUYWcsIG1ha2Ugc3VyZSBpdHMgbmFtZSBvciBhdHRyaWJ1dGVzIG1hdGNoLgorICAgICAgICAjIERvbid0IGJvdGhlciB3aXRoIFRhZ3MgaWYgd2UncmUgc2VhcmNoaW5nIGZvciB0ZXh0LgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UobWFya3VwLCBUYWcpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYudGV4dCBvciBzZWxmLm5hbWUgb3Igc2VsZi5hdHRyczoKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHNlbGYuc2VhcmNoX3RhZyhtYXJrdXApCisgICAgICAgICMgSWYgaXQncyB0ZXh0LCBtYWtlIHN1cmUgdGhlIHRleHQgbWF0Y2hlcy4KKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG1hcmt1cCwgTmF2aWdhYmxlU3RyaW5nKSBvciBcCisgICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UobWFya3VwLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLm5hbWUgYW5kIG5vdCBzZWxmLmF0dHJzIGFuZCBzZWxmLl9tYXRjaGVzKG1hcmt1cCwgc2VsZi50ZXh0KToKKyAgICAgICAgICAgICAgICBmb3VuZCA9IG1hcmt1cAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICJJIGRvbid0IGtub3cgaG93IHRvIG1hdGNoIGFnYWluc3QgYSAlcyIgJSBtYXJrdXAuX19jbGFzc19fKQorICAgICAgICByZXR1cm4gZm91bmQKKworICAgIGRlZiBfbWF0Y2hlcyhzZWxmLCBtYXJrdXAsIG1hdGNoX2FnYWluc3QpOgorICAgICAgICAjIHByaW50IHUiTWF0Y2hpbmcgJXMgYWdhaW5zdCAlcyIgJSAobWFya3VwLCBtYXRjaF9hZ2FpbnN0KQorICAgICAgICByZXN1bHQgPSBGYWxzZQorICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgbGlzdCkgb3IgaXNpbnN0YW5jZShtYXJrdXAsIHR1cGxlKToKKyAgICAgICAgICAgICMgVGhpcyBzaG91bGQgb25seSBoYXBwZW4gd2hlbiBzZWFyY2hpbmcgYSBtdWx0aS12YWx1ZWQgYXR0cmlidXRlCisgICAgICAgICAgICAjIGxpa2UgJ2NsYXNzJy4KKyAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKG1hdGNoX2FnYWluc3QsIHVuaWNvZGUpCisgICAgICAgICAgICAgICAgYW5kICcgJyBpbiBtYXRjaF9hZ2FpbnN0KToKKyAgICAgICAgICAgICAgICAjIEEgYml0IG9mIGEgc3BlY2lhbCBjYXNlLiBJZiB0aGV5IHRyeSB0byBtYXRjaCAiZm9vCisgICAgICAgICAgICAgICAgIyBiYXIiIG9uIGEgbXVsdGl2YWx1ZSBhdHRyaWJ1dGUncyB2YWx1ZSwgb25seSBhY2NlcHQKKyAgICAgICAgICAgICAgICAjIHRoZSBsaXRlcmFsIHZhbHVlICJmb28gYmFyIgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIFhYWCBUaGlzIGlzIGdvaW5nIHRvIGJlIHByZXR0eSBzbG93IGJlY2F1c2Ugd2Uga2VlcAorICAgICAgICAgICAgICAgICMgc3BsaXR0aW5nIG1hdGNoX2FnYWluc3QuIEJ1dCBpdCBzaG91bGRuJ3QgY29tZSB1cAorICAgICAgICAgICAgICAgICMgdG9vIG9mdGVuLgorICAgICAgICAgICAgICAgIHJldHVybiAod2hpdGVzcGFjZV9yZS5zcGxpdChtYXRjaF9hZ2FpbnN0KSA9PSBtYXJrdXApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIG1hcmt1cDoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fbWF0Y2hlcyhpdGVtLCBtYXRjaF9hZ2FpbnN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgbWF0Y2hfYWdhaW5zdCBpcyBUcnVlOgorICAgICAgICAgICAgIyBUcnVlIG1hdGNoZXMgYW55IG5vbi1Ob25lIHZhbHVlLgorICAgICAgICAgICAgcmV0dXJuIG1hcmt1cCBpcyBub3QgTm9uZQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWF0Y2hfYWdhaW5zdCwgY29sbGVjdGlvbnMuQ2FsbGFibGUpOgorICAgICAgICAgICAgcmV0dXJuIG1hdGNoX2FnYWluc3QobWFya3VwKQorCisgICAgICAgICMgQ3VzdG9tIGNhbGxhYmxlcyB0YWtlIHRoZSB0YWcgYXMgYW4gYXJndW1lbnQsIGJ1dCBhbGwKKyAgICAgICAgIyBvdGhlciB3YXlzIG9mIG1hdGNoaW5nIG1hdGNoIHRoZSB0YWcgbmFtZSBhcyBhIHN0cmluZy4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAsIFRhZyk6CisgICAgICAgICAgICBtYXJrdXAgPSBtYXJrdXAubmFtZQorCisgICAgICAgICMgRW5zdXJlIHRoYXQgYG1hcmt1cGAgaXMgZWl0aGVyIGEgVW5pY29kZSBzdHJpbmcsIG9yIE5vbmUuCisgICAgICAgIG1hcmt1cCA9IHNlbGYuX25vcm1hbGl6ZV9zZWFyY2hfdmFsdWUobWFya3VwKQorCisgICAgICAgIGlmIG1hcmt1cCBpcyBOb25lOgorICAgICAgICAgICAgIyBOb25lIG1hdGNoZXMgTm9uZSwgRmFsc2UsIGFuIGVtcHR5IHN0cmluZywgYW4gZW1wdHkgbGlzdCwgYW5kIHNvIG9uLgorICAgICAgICAgICAgcmV0dXJuIG5vdCBtYXRjaF9hZ2FpbnN0CisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXRjaF9hZ2FpbnN0LCB1bmljb2RlKToKKyAgICAgICAgICAgICMgRXhhY3Qgc3RyaW5nIG1hdGNoCisgICAgICAgICAgICByZXR1cm4gbWFya3VwID09IG1hdGNoX2FnYWluc3QKKworICAgICAgICBpZiBoYXNhdHRyKG1hdGNoX2FnYWluc3QsICdtYXRjaCcpOgorICAgICAgICAgICAgIyBSZWdleHAgbWF0Y2gKKyAgICAgICAgICAgIHJldHVybiBtYXRjaF9hZ2FpbnN0LnNlYXJjaChtYXJrdXApCisKKyAgICAgICAgaWYgaGFzYXR0cihtYXRjaF9hZ2FpbnN0LCAnX19pdGVyX18nKToKKyAgICAgICAgICAgICMgVGhlIG1hcmt1cCBtdXN0IGJlIGFuIGV4YWN0IG1hdGNoIGFnYWluc3Qgc29tZXRoaW5nCisgICAgICAgICAgICAjIGluIHRoZSBpdGVyYWJsZS4KKyAgICAgICAgICAgIHJldHVybiBtYXJrdXAgaW4gbWF0Y2hfYWdhaW5zdAorCisKK2NsYXNzIFJlc3VsdFNldChsaXN0KToKKyAgICAiIiJBIFJlc3VsdFNldCBpcyBqdXN0IGEgbGlzdCB0aGF0IGtlZXBzIHRyYWNrIG9mIHRoZSBTb3VwU3RyYWluZXIKKyAgICB0aGF0IGNyZWF0ZWQgaXQuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSwgcmVzdWx0PSgpKToKKyAgICAgICAgc3VwZXIoUmVzdWx0U2V0LCBzZWxmKS5fX2luaXRfXyhyZXN1bHQpCisgICAgICAgIHNlbGYuc291cmNlID0gc291cmNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0aW5nLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdGluZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDQ0OTVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdGluZy5weQpAQCAtMCwwICsxLDU5MiBAQAorIiIiSGVscGVyIGNsYXNzZXMgZm9yIHRlc3RzLiIiIgorCitpbXBvcnQgY29weQoraW1wb3J0IGZ1bmN0b29scworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQorZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKK2Zyb20gYnM0LmVsZW1lbnQgaW1wb3J0ICgKKyAgICBDaGFyc2V0TWV0YUF0dHJpYnV0ZVZhbHVlLAorICAgIENvbW1lbnQsCisgICAgQ29udGVudE1ldGFBdHRyaWJ1dGVWYWx1ZSwKKyAgICBEb2N0eXBlLAorICAgIFNvdXBTdHJhaW5lciwKKykKKworZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgSFRNTFBhcnNlclRyZWVCdWlsZGVyCitkZWZhdWx0X2J1aWxkZXIgPSBIVE1MUGFyc2VyVHJlZUJ1aWxkZXIKKworCitjbGFzcyBTb3VwVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGVmYXVsdF9idWlsZGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gZGVmYXVsdF9idWlsZGVyKCkKKworICAgIGRlZiBzb3VwKHNlbGYsIG1hcmt1cCwgKiprd2FyZ3MpOgorICAgICAgICAiIiJCdWlsZCBhIEJlYXV0aWZ1bCBTb3VwIG9iamVjdCBmcm9tIG1hcmt1cC4iIiIKKyAgICAgICAgYnVpbGRlciA9IGt3YXJncy5wb3AoJ2J1aWxkZXInLCBzZWxmLmRlZmF1bHRfYnVpbGRlcikKKyAgICAgICAgcmV0dXJuIEJlYXV0aWZ1bFNvdXAobWFya3VwLCBidWlsZGVyPWJ1aWxkZXIsICoqa3dhcmdzKQorCisgICAgZGVmIGRvY3VtZW50X2ZvcihzZWxmLCBtYXJrdXApOgorICAgICAgICAiIiJUdXJuIGFuIEhUTUwgZnJhZ21lbnQgaW50byBhIGRvY3VtZW50LgorCisgICAgICAgIFRoZSBkZXRhaWxzIGRlcGVuZCBvbiB0aGUgYnVpbGRlci4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLmRlZmF1bHRfYnVpbGRlci50ZXN0X2ZyYWdtZW50X3RvX2RvY3VtZW50KG1hcmt1cCkKKworICAgIGRlZiBhc3NlcnRTb3VwRXF1YWxzKHNlbGYsIHRvX3BhcnNlLCBjb21wYXJlX3BhcnNlZF90bz1Ob25lKToKKyAgICAgICAgYnVpbGRlciA9IHNlbGYuZGVmYXVsdF9idWlsZGVyCisgICAgICAgIG9iaiA9IEJlYXV0aWZ1bFNvdXAodG9fcGFyc2UsIGJ1aWxkZXI9YnVpbGRlcikKKyAgICAgICAgaWYgY29tcGFyZV9wYXJzZWRfdG8gaXMgTm9uZToKKyAgICAgICAgICAgIGNvbXBhcmVfcGFyc2VkX3RvID0gdG9fcGFyc2UKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoY29tcGFyZV9wYXJzZWRfdG8pKQorCisKK2NsYXNzIEhUTUxUcmVlQnVpbGRlclNtb2tlVGVzdChvYmplY3QpOgorCisgICAgIiIiQSBiYXNpYyB0ZXN0IG9mIGEgdHJlZWJ1aWxkZXIncyBjb21wZXRlbmNlLgorCisgICAgQW55IEhUTUwgdHJlZWJ1aWxkZXIsIHByZXNlbnQgb3IgZnV0dXJlLCBzaG91bGQgYmUgYWJsZSB0byBwYXNzCisgICAgdGhlc2UgdGVzdHMuIFdpdGggaW52YWxpZCBtYXJrdXAsIHRoZXJlJ3Mgcm9vbSBmb3IgaW50ZXJwcmV0YXRpb24sCisgICAgYW5kIGRpZmZlcmVudCBwYXJzZXJzIGNhbiBoYW5kbGUgaXQgZGlmZmVyZW50bHkuIEJ1dCB3aXRoIHRoZQorICAgIG1hcmt1cCBpbiB0aGVzZSB0ZXN0cywgdGhlcmUncyBub3QgbXVjaCByb29tIGZvciBpbnRlcnByZXRhdGlvbi4KKyAgICAiIiIKKworICAgIGRlZiBhc3NlcnREb2N0eXBlSGFuZGxlZChzZWxmLCBkb2N0eXBlX2ZyYWdtZW50KToKKyAgICAgICAgIiIiQXNzZXJ0IHRoYXQgYSBnaXZlbiBkb2N0eXBlIHN0cmluZyBpcyBoYW5kbGVkIGNvcnJlY3RseS4iIiIKKyAgICAgICAgZG9jdHlwZV9zdHIsIHNvdXAgPSBzZWxmLl9kb2N1bWVudF93aXRoX2RvY3R5cGUoZG9jdHlwZV9mcmFnbWVudCkKKworICAgICAgICAjIE1ha2Ugc3VyZSBhIERvY3R5cGUgb2JqZWN0IHdhcyBjcmVhdGVkLgorICAgICAgICBkb2N0eXBlID0gc291cC5jb250ZW50c1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvY3R5cGUuX19jbGFzc19fLCBEb2N0eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvY3R5cGUsIGRvY3R5cGVfZnJhZ21lbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNvdXApWzpsZW4oZG9jdHlwZV9zdHIpXSwgZG9jdHlwZV9zdHIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgZG9jdHlwZSB3YXMgY29ycmVjdGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgICAgICAgIyBwYXJzZSB0cmVlIGFuZCB0aGF0IHRoZSByZXN0IG9mIHRoZSBkb2N1bWVudCBwYXJzZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5wLmNvbnRlbnRzWzBdLCAnZm9vJykKKworICAgIGRlZiBfZG9jdW1lbnRfd2l0aF9kb2N0eXBlKHNlbGYsIGRvY3R5cGVfZnJhZ21lbnQpOgorICAgICAgICAiIiJHZW5lcmF0ZSBhbmQgcGFyc2UgYSBkb2N1bWVudCB3aXRoIHRoZSBnaXZlbiBkb2N0eXBlLiIiIgorICAgICAgICBkb2N0eXBlID0gJzwhRE9DVFlQRSAlcz4nICUgZG9jdHlwZV9mcmFnbWVudAorICAgICAgICBtYXJrdXAgPSBkb2N0eXBlICsgJ1xuPHA+Zm9vPC9wPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHJldHVybiBkb2N0eXBlLCBzb3VwCisKKyAgICBkZWYgdGVzdF9ub3JtYWxfZG9jdHlwZXMoc2VsZik6CisgICAgICAgICIiIk1ha2Ugc3VyZSBub3JtYWwsIGV2ZXJ5ZGF5IEhUTUwgZG9jdHlwZXMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LiIiIgorICAgICAgICBzZWxmLmFzc2VydERvY3R5cGVIYW5kbGVkKCJodG1sIikKKyAgICAgICAgc2VsZi5hc3NlcnREb2N0eXBlSGFuZGxlZCgKKyAgICAgICAgICAgICdodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iJykKKworICAgIGRlZiB0ZXN0X2VtcHR5X2RvY3R5cGUoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjwhRE9DVFlQRT4iKQorICAgICAgICBkb2N0eXBlID0gc291cC5jb250ZW50c1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIiLCBkb2N0eXBlLnN0cmlwKCkpCisKKyAgICBkZWYgdGVzdF9wdWJsaWNfZG9jdHlwZV93aXRoX3VybChzZWxmKToKKyAgICAgICAgZG9jdHlwZSA9ICdodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIicKKyAgICAgICAgc2VsZi5hc3NlcnREb2N0eXBlSGFuZGxlZChkb2N0eXBlKQorCisgICAgZGVmIHRlc3Rfc3lzdGVtX2RvY3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RG9jdHlwZUhhbmRsZWQoJ2ZvbyBTWVNURU0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIicpCisKKyAgICBkZWYgdGVzdF9uYW1lc3BhY2VkX3N5c3RlbV9kb2N0eXBlKHNlbGYpOgorICAgICAgICAjIFdlIGNhbiBoYW5kbGUgYSBuYW1lc3BhY2VkIGRvY3R5cGUgd2l0aCBhIHN5c3RlbSBJRC4KKyAgICAgICAgc2VsZi5hc3NlcnREb2N0eXBlSGFuZGxlZCgneHNsOnN0eWxlc2hlZXQgU1lTVEVNICJodG1sZW50LmR0ZCInKQorCisgICAgZGVmIHRlc3RfbmFtZXNwYWNlZF9wdWJsaWNfZG9jdHlwZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGEgbmFtZXNwYWNlZCBkb2N0eXBlIHdpdGggYSBwdWJsaWMgaWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RG9jdHlwZUhhbmRsZWQoJ3hzbDpzdHlsZXNoZWV0IFBVQkxJQyAiaHRtbGVudC5kdGQiJykKKworICAgIGRlZiB0ZXN0X3JlYWxfeGh0bWxfZG9jdW1lbnQoc2VsZik6CisgICAgICAgICIiIkEgcmVhbCBYSFRNTCBkb2N1bWVudCBzaG91bGQgY29tZSBvdXQgbW9yZSBvciBsZXNzIHRoZSBzYW1lIGFzIGl0IHdlbnQgaW4uIiIiCisgICAgICAgIG1hcmt1cCA9IGIiIiI8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD48dGl0bGU+SGVsbG8uPC90aXRsZT48L2hlYWQ+Cis8Ym9keT5Hb29kYnllLjwvYm9keT4KKzwvaHRtbD4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmVuY29kZSgidXRmLTgiKS5yZXBsYWNlKGIiXG4iLCBiIiIpLAorICAgICAgICAgICAgbWFya3VwLnJlcGxhY2UoYiJcbiIsIGIiIikpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weShzZWxmKToKKyAgICAgICAgIiIiTWFrZSBzdXJlIHlvdSBjYW4gY29weSB0aGUgdHJlZSBidWlsZGVyLgorCisgICAgICAgIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIGJ1aWxkZXIgaXMgcGFydCBvZiBhCisgICAgICAgIEJlYXV0aWZ1bFNvdXAgb2JqZWN0LCBhbmQgd2Ugd2FudCB0byBiZSBhYmxlIHRvIGNvcHkgdGhhdC4KKyAgICAgICAgIiIiCisgICAgICAgIGNvcHkuZGVlcGNvcHkoc2VsZi5kZWZhdWx0X2J1aWxkZXIpCisKKyAgICBkZWYgdGVzdF9wX3RhZ19pc19uZXZlcl9lbXB0eV9lbGVtZW50KHNlbGYpOgorICAgICAgICAiIiJBIDxwPiB0YWcgaXMgbmV2ZXIgZGVzaWduYXRlZCBhcyBhbiBlbXB0eS1lbGVtZW50IHRhZy4KKworICAgICAgICBFdmVuIGlmIHRoZSBtYXJrdXAgc2hvd3MgaXQgYXMgYW4gZW1wdHktZWxlbWVudCB0YWcsIGl0CisgICAgICAgIHNob3VsZG4ndCBiZSBwcmVzZW50ZWQgdGhhdCB3YXkuCisgICAgICAgICIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8cC8+IikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb3VwLnAuaXNfZW1wdHlfZWxlbWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc291cC5wKSwgIjxwPjwvcD4iKQorCisgICAgZGVmIHRlc3RfdW5jbG9zZWRfdGFnc19nZXRfY2xvc2VkKHNlbGYpOgorICAgICAgICAiIiJBIHRhZyB0aGF0J3Mgbm90IGNsb3NlZCBieSB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudCBzaG91bGQgYmUgY2xvc2VkLgorCisgICAgICAgIFRoaXMgYXBwbGllcyB0byBhbGwgdGFncyBleGNlcHQgZW1wdHktZWxlbWVudCB0YWdzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8cD4iLCAiPHA+PC9wPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiPGI+IiwgIjxiPjwvYj4iKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiPGJyPiIsICI8YnIvPiIpCisKKyAgICBkZWYgdGVzdF9icl9pc19hbHdheXNfZW1wdHlfZWxlbWVudF90YWcoc2VsZik6CisgICAgICAgICIiIkEgPGJyPiB0YWcgaXMgZGVzaWduYXRlZCBhcyBhbiBlbXB0eS1lbGVtZW50IHRhZy4KKworICAgICAgICBTb21lIHBhcnNlcnMgdHJlYXQgPGJyPjwvYnI+IGFzIG9uZSA8YnIvPiB0YWcsIHNvbWUgcGFyc2VycyBhcworICAgICAgICB0d28gdGFncywgYnV0IGl0IHNob3VsZCBhbHdheXMgYmUgYW4gZW1wdHktZWxlbWVudCB0YWcuCisgICAgICAgICIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YnI+PC9icj4iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc291cC5ici5pc19lbXB0eV9lbGVtZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzb3VwLmJyKSwgIjxici8+IikKKworICAgIGRlZiB0ZXN0X25lc3RlZF9mb3JtYXR0aW5nX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxlbT48ZW0+PC9lbT48L2VtPiIpCisKKyAgICBkZWYgdGVzdF9jb21tZW50KHNlbGYpOgorICAgICAgICAjIENvbW1lbnRzIGFyZSByZXByZXNlbnRlZCBhcyBDb21tZW50IG9iamVjdHMuCisgICAgICAgIG1hcmt1cCA9ICI8cD5mb288IS0tZm9vYmFyLS0+YmF6PC9wPiIKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKG1hcmt1cCkKKworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgY29tbWVudCA9IHNvdXAuZmluZCh0ZXh0PSJmb29iYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1lbnQuX19jbGFzc19fLCBDb21tZW50KQorCisgICAgICAgICMgVGhlIGNvbW1lbnQgaXMgcHJvcGVybHkgaW50ZWdyYXRlZCBpbnRvIHRoZSB0cmVlLgorICAgICAgICBmb28gPSBzb3VwLmZpbmQodGV4dD0iZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21tZW50LCBmb28ubmV4dF9lbGVtZW50KQorICAgICAgICBiYXogPSBzb3VwLmZpbmQodGV4dD0iYmF6IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21tZW50LCBiYXoucHJldmlvdXNfZWxlbWVudCkKKworICAgIGRlZiB0ZXN0X3ByZXNlcnZlZF93aGl0ZXNwYWNlX2luX3ByZV9hbmRfdGV4dGFyZWEoc2VsZik6CisgICAgICAgICIiIldoaXRlc3BhY2UgbXVzdCBiZSBwcmVzZXJ2ZWQgaW4gPHByZT4gYW5kIDx0ZXh0YXJlYT4gdGFncy4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8cHJlPiAgIDwvcHJlPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiPHRleHRhcmVhPiB3b28gIDwvdGV4dGFyZWE+IikKKworICAgIGRlZiB0ZXN0X25lc3RlZF9pbmxpbmVfZWxlbWVudHMoc2VsZik6CisgICAgICAgICIiIklubGluZSBlbGVtZW50cyBjYW4gYmUgbmVzdGVkIGluZGVmaW5pdGVseS4iIiIKKyAgICAgICAgYl90YWcgPSAiPGI+SW5zaWRlIGEgQiB0YWc8L2I+IgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoYl90YWcpCisKKyAgICAgICAgbmVzdGVkX2JfdGFnID0gIjxwPkEgPGk+bmVzdGVkIDxiPnRhZzwvYj48L2k+PC9wPiIKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKG5lc3RlZF9iX3RhZykKKworICAgICAgICBkb3VibGVfbmVzdGVkX2JfdGFnID0gIjxwPkEgPGE+ZG91Ymx5IDxpPm5lc3RlZCA8Yj50YWc8L2I+PC9pPjwvYT48L3A+IgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMobmVzdGVkX2JfdGFnKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX2Jsb2NrX2xldmVsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICAiIiJCbG9jayBlbGVtZW50cyBjYW4gYmUgbmVzdGVkLiIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCc8YmxvY2txdW90ZT48cD48Yj5Gb288L2I+PC9wPjwvYmxvY2txdW90ZT4nKQorICAgICAgICBibG9ja3F1b3RlID0gc291cC5ibG9ja3F1b3RlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmxvY2txdW90ZS5wLmIuc3RyaW5nLCAnRm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChibG9ja3F1b3RlLmIuc3RyaW5nLCAnRm9vJykKKworICAgIGRlZiB0ZXN0X2NvcnJlY3RseV9uZXN0ZWRfdGFibGVzKHNlbGYpOgorICAgICAgICAiIiJPbmUgdGFibGUgY2FuIGdvIGluc2lkZSBhbm90aGVyIG9uZS4iIiIKKyAgICAgICAgbWFya3VwID0gKCc8dGFibGUgaWQ9IjEiPicKKyAgICAgICAgICAgICAgICAgICc8dHI+JworICAgICAgICAgICAgICAgICAgIjx0ZD5IZXJlJ3MgYW5vdGhlciB0YWJsZToiCisgICAgICAgICAgICAgICAgICAnPHRhYmxlIGlkPSIyIj4nCisgICAgICAgICAgICAgICAgICAnPHRyPjx0ZD5mb288L3RkPjwvdHI+JworICAgICAgICAgICAgICAgICAgJzwvdGFibGU+PC90ZD4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygKKyAgICAgICAgICAgIG1hcmt1cCwKKyAgICAgICAgICAgICc8dGFibGUgaWQ9IjEiPjx0cj48dGQ+SGVyZVwncyBhbm90aGVyIHRhYmxlOicKKyAgICAgICAgICAgICc8dGFibGUgaWQ9IjIiPjx0cj48dGQ+Zm9vPC90ZD48L3RyPjwvdGFibGU+JworICAgICAgICAgICAgJzwvdGQ+PC90cj48L3RhYmxlPicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKAorICAgICAgICAgICAgIjx0YWJsZT48dGhlYWQ+PHRyPjx0ZD5Gb288L3RkPjwvdHI+PC90aGVhZD4iCisgICAgICAgICAgICAiPHRib2R5Pjx0cj48dGQ+QmFyPC90ZD48L3RyPjwvdGJvZHk+IgorICAgICAgICAgICAgIjx0Zm9vdD48dHI+PHRkPkJhejwvdGQ+PC90cj48L3Rmb290PjwvdGFibGU+IikKKworICAgIGRlZiB0ZXN0X2RlZXBseV9uZXN0ZWRfbXVsdGl2YWx1ZWRfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICAjIGh0bWw1bGliIGNhbiBzZXQgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHNhbWUgdGFnIG1hbnkgdGltZXMKKyAgICAgICAgIyBhcyBpdCByZWFycmFuZ2VzIHRoZSB0cmVlLiBUaGlzIGhhcyBjYXVzZWQgcHJvYmxlbXMgd2l0aAorICAgICAgICAjIG11bHRpdmFsdWVkIGF0dHJpYnV0ZXMuCisgICAgICAgIG1hcmt1cCA9ICc8dGFibGU+PGRpdj48ZGl2IGNsYXNzPSJjc3MiPjwvZGl2PjwvZGl2PjwvdGFibGU+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbImNzcyJdLCBzb3VwLmRpdi5kaXZbJ2NsYXNzJ10pCisKKyAgICBkZWYgdGVzdF9hbmdsZV9icmFja2V0c19pbl9hdHRyaWJ1dGVfdmFsdWVzX2FyZV9lc2NhcGVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoJzxhIGI9IjxhPiI+PC9hPicsICc8YSBiPSImbHQ7YSZndDsiPjwvYT4nKQorCisgICAgZGVmIHRlc3RfZW50aXRpZXNfaW5fYXR0cmlidXRlc19jb252ZXJ0ZWRfdG9fdW5pY29kZShzZWxmKToKKyAgICAgICAgZXhwZWN0ID0gdSc8cCBpZD0icGlcTntMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFfWF0YSI+PC9wPicKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCc8cCBpZD0icGkmIzI0MTthdGEiPjwvcD4nLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygnPHAgaWQ9InBpJiN4ZjE7YXRhIj48L3A+JywgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoJzxwIGlkPSJwaSYjWGYxO2F0YSI+PC9wPicsIGV4cGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCc8cCBpZD0icGkmbnRpbGRlO2F0YSI+PC9wPicsIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X2VudGl0aWVzX2luX3RleHRfY29udmVydGVkX3RvX3VuaWNvZGUoc2VsZik6CisgICAgICAgIGV4cGVjdCA9IHUnPHA+cGlcTntMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFfWF0YTwvcD4nCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiPHA+cGkmIzI0MTthdGE8L3A+IiwgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxwPnBpJiN4ZjE7YXRhPC9wPiIsIGV4cGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8cD5waSYjWGYxO2F0YTwvcD4iLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiPHA+cGkmbnRpbGRlO2F0YTwvcD4iLCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9xdW90X2VudGl0eV9jb252ZXJ0ZWRfdG9fcXVvdGF0aW9uX21hcmsoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiPHA+SSBzYWlkICZxdW90O2dvb2QgZGF5ISZxdW90OzwvcD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxwPkkgc2FpZCAiZ29vZCBkYXkhIjwvcD4nKQorCisgICAgZGVmIHRlc3Rfb3V0X29mX3JhbmdlX2VudGl0eShzZWxmKToKKyAgICAgICAgZXhwZWN0ID0gdSJcTntSRVBMQUNFTUVOVCBDSEFSQUNURVJ9IgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIiYjMTAwMDAwMDAwMDAwMDA7IiwgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIiYjeDEwMDAwMDAwMDAwMDAwOyIsIGV4cGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCImIzEwMDAwMDAwMDA7IiwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfbXVsdGlwYXJ0X3N0cmluZ3Moc2VsZik6CisgICAgICAgICJNb3N0bHkgdG8gcHJldmVudCBhIHJlY3VycmVuY2Ugb2YgYSBidWcgaW4gdGhlIGh0bWw1bGliIHRyZWVidWlsZGVyLiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGh0bWw+PGgyPlxuZm9vPC9oMj48cD48L3A+PC9odG1sPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInAiLCBzb3VwLmgyLnN0cmluZy5uZXh0X2VsZW1lbnQubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgicCIsIHNvdXAucC5uYW1lKQorCisgICAgZGVmIHRlc3RfYmFzaWNfbmFtZXNwYWNlcyhzZWxmKToKKyAgICAgICAgIiIiUGFyc2VycyBkb24ndCBuZWVkIHRvICp1bmRlcnN0YW5kKiBuYW1lc3BhY2VzLCBidXQgYXQgdGhlCisgICAgICAgIHZlcnkgbGVhc3QgdGhleSBzaG91bGQgbm90IGNob2tlIG9uIG5hbWVzcGFjZXMgb3IgbG9zZQorICAgICAgICBkYXRhLiIiIgorCisgICAgICAgIG1hcmt1cCA9IGInPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOm1hdGhtbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGhlYWQ+PC9oZWFkPjxib2R5PjxtYXRobWw6bXNxcnQ+NDwvbWF0aG1sOm1zcXJ0PjxiIHN2ZzpmaWxsPSJyZWQiPjwvYj48L2JvZHk+PC9odG1sPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFya3VwLCBzb3VwLmVuY29kZSgpKQorICAgICAgICBodG1sID0gc291cC5odG1sCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLCBzb3VwLmh0bWxbJ3htbG5zJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCcsIHNvdXAuaHRtbFsneG1sbnM6bWF0aG1sJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCBzb3VwLmh0bWxbJ3htbG5zOnN2ZyddKQorCisgICAgZGVmIHRlc3RfbXVsdGl2YWx1ZWRfYXR0cmlidXRlX3ZhbHVlX2JlY29tZXNfbGlzdChzZWxmKToKKyAgICAgICAgbWFya3VwID0gYic8YSBjbGFzcz0iZm9vIGJhciI+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ2ZvbycsICdiYXInXSwgc291cC5hWydjbGFzcyddKQorCisgICAgIworICAgICMgR2VuZXJhbGx5IHNwZWFraW5nLCB0ZXN0cyBiZWxvdyB0aGlzIHBvaW50IGFyZSBtb3JlIHRlc3RzIG9mCisgICAgIyBCZWF1dGlmdWwgU291cCB0aGFuIHRlc3RzIG9mIHRoZSB0cmVlIGJ1aWxkZXJzLiBCdXQgcGFyc2VycyBhcmUKKyAgICAjIHdlaXJkLCBzbyB3ZSBydW4gdGhlc2UgdGVzdHMgc2VwYXJhdGVseSBmb3IgZXZlcnkgdHJlZSBidWlsZGVyCisgICAgIyB0byBkZXRlY3QgYW55IGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlbS4KKyAgICAjCisKKyAgICBkZWYgdGVzdF9jYW5fcGFyc2VfdW5pY29kZV9kb2N1bWVudChzZWxmKToKKyAgICAgICAgIyBBIHNlZW1pbmdseSBpbm5vY3VvdXMgZG9jdW1lbnQuLi4gYnV0IGl0J3MgaW4gVW5pY29kZSEgQW5kCisgICAgICAgICMgaXQgY29udGFpbnMgY2hhcmFjdGVycyB0aGF0IGNhbid0IGJlIHJlcHJlc2VudGVkIGluIHRoZQorICAgICAgICAjIGVuY29kaW5nIGZvdW5kIGluIHRoZSAgZGVjbGFyYXRpb24hIFRoZSBob3Jyb3IhCisgICAgICAgIG1hcmt1cCA9IHUnPGh0bWw+PGhlYWQ+PG1ldGEgZW5jb2Rpbmc9ImV1Yy1qcCI+PC9oZWFkPjxib2R5PlNhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ITwvYm9keT4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnU2Fjclx4ZTkgYmxldSEnLCBzb3VwLmJvZHkuc3RyaW5nKQorCisgICAgZGVmIHRlc3Rfc291cHN0cmFpbmVyKHNlbGYpOgorICAgICAgICAiIiJQYXJzZXJzIHNob3VsZCBiZSBhYmxlIHRvIHdvcmsgd2l0aCBTb3VwU3RyYWluZXJzLiIiIgorICAgICAgICBzdHJhaW5lciA9IFNvdXBTdHJhaW5lcigiYiIpCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIkEgPGI+Ym9sZDwvYj4gPG1ldGEvPiA8aT5zdGF0ZW1lbnQ8L2k+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9vbmx5PXN0cmFpbmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZGVjb2RlKCksICI8Yj5ib2xkPC9iPiIpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfcXVvdGVfYXR0cmlidXRlX3ZhbHVlc19iZWNvbWVfZG91YmxlX3F1b3RlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8Zm9vIGF0dHI9J2Jhcic+PC9mb28+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8Zm9vIGF0dHI9ImJhciI+PC9mb28+JykKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV92YWx1ZXNfd2l0aF9uZXN0ZWRfcXVvdGVzX2FyZV9sZWZ0X2Fsb25lKHNlbGYpOgorICAgICAgICB0ZXh0ID0gIiIiPGZvbyBhdHRyPSdiYXIgImJyYXdscyIgaGFwcGVuJz5hPC9mb28+IiIiCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscyh0ZXh0KQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX3ZhbHVlc193aXRoX2RvdWJsZV9uZXN0ZWRfcXVvdGVzX2dldF9xdW90ZWQoc2VsZik6CisgICAgICAgIHRleHQgPSAiIiI8Zm9vIGF0dHI9J2JhciAiYnJhd2xzIiBoYXBwZW4nPmE8L2Zvbz4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCh0ZXh0KQorICAgICAgICBzb3VwLmZvb1snYXR0ciddID0gJ0JyYXdscyBoYXBwZW4gYXQgIkJvYlwncyBCYXIiJworICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoCisgICAgICAgICAgICBzb3VwLmZvby5kZWNvZGUoKSwKKyAgICAgICAgICAgICIiIjxmb28gYXR0cj0iQnJhd2xzIGhhcHBlbiBhdCAmcXVvdDtCb2JcJ3MgQmFyJnF1b3Q7Ij5hPC9mb28+IiIiKQorCisgICAgZGVmIHRlc3RfYW1wZXJzYW5kX2luX2F0dHJpYnV0ZV92YWx1ZV9nZXRzX2VzY2FwZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygnPHRoaXMgaXM9InJlYWxseSBtZXNzZWQgdXAgJiBzdHVmZiI+PC90aGlzPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHRoaXMgaXM9InJlYWxseSBtZXNzZWQgdXAgJmFtcDsgc3R1ZmYiPjwvdGhpcz4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygKKyAgICAgICAgICAgICc8YSBocmVmPSJodHRwOi8vZXhhbXBsZS5vcmc/YT0xJmI9MjszIj5mb288L2E+JywKKyAgICAgICAgICAgICc8YSBocmVmPSJodHRwOi8vZXhhbXBsZS5vcmc/YT0xJmFtcDtiPTI7MyI+Zm9vPC9hPicpCisKKyAgICBkZWYgdGVzdF9lc2NhcGVkX2FtcGVyc2FuZF9pbl9hdHRyaWJ1dGVfdmFsdWVfaXNfbGVmdF9hbG9uZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCc8YSBocmVmPSJodHRwOi8vZXhhbXBsZS5vcmc/YT0xJmFtcDtiPTI7MyI+PC9hPicpCisKKyAgICBkZWYgdGVzdF9lbnRpdGllc19pbl9zdHJpbmdzX2NvbnZlcnRlZF9kdXJpbmdfcGFyc2luZyhzZWxmKToKKyAgICAgICAgIyBCb3RoIFhNTCBhbmQgSFRNTCBlbnRpdGllcyBhcmUgY29udmVydGVkIHRvIFVuaWNvZGUgY2hhcmFjdGVycworICAgICAgICAjIGR1cmluZyBwYXJzaW5nLgorICAgICAgICB0ZXh0ID0gIjxwPiZsdDsmbHQ7c2FjciZlYWN1dGU7JiMzMjtibGV1ISZndDsmZ3Q7PC9wPiIKKyAgICAgICAgZXhwZWN0ZWQgPSB1IjxwPiZsdDsmbHQ7c2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhJmd0OyZndDs8L3A+IgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHModGV4dCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9zbWFydF9xdW90ZXNfY29udmVydGVkX29uX3RoZV93YXlfaW4oc2VsZik6CisgICAgICAgICMgTWljcm9zb2Z0IHNtYXJ0IHF1b3RlcyBhcmUgY29udmVydGVkIHRvIFVuaWNvZGUgY2hhcmFjdGVycyBkdXJpbmcKKyAgICAgICAgIyBwYXJzaW5nLgorICAgICAgICBxdW90ZSA9IGIiPHA+XHg5MUZvb1x4OTI8L3A+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHF1b3RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5wLnN0cmluZywKKyAgICAgICAgICAgIHUiXE57TEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkt9Rm9vXE57UklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLfSIpCisKKyAgICBkZWYgdGVzdF9ub25fYnJlYWtpbmdfc3BhY2VzX2NvbnZlcnRlZF9vbl90aGVfd2F5X2luKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT4mbmJzcDsmbmJzcDs8L2E+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmEuc3RyaW5nLCB1IlxOe05PLUJSRUFLIFNQQUNFfSIgKiAyKQorCisgICAgZGVmIHRlc3RfZW50aXRpZXNfY29udmVydGVkX29uX3RoZV93YXlfb3V0KHNlbGYpOgorICAgICAgICB0ZXh0ID0gIjxwPiZsdDsmbHQ7c2FjciZlYWN1dGU7JiMzMjtibGV1ISZndDsmZ3Q7PC9wPiIKKyAgICAgICAgZXhwZWN0ZWQgPSB1IjxwPiZsdDsmbHQ7c2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhJmd0OyZndDs8L3A+Ii5lbmNvZGUoInV0Zi04IikKKyAgICAgICAgc291cCA9IHNlbGYuc291cCh0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAucC5lbmNvZGUoInV0Zi04IiksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcmVhbF9pc29fbGF0aW5fZG9jdW1lbnQoc2VsZik6CisgICAgICAgICMgU21va2UgdGVzdCBvZiBpbnRlcnJlbGF0ZWQgZnVuY3Rpb25hbGl0eSwgdXNpbmcgYW4KKyAgICAgICAgIyBlYXN5LXRvLXVuZGVyc3RhbmQgZG9jdW1lbnQuCisKKyAgICAgICAgIyBIZXJlIGl0IGlzIGluIFVuaWNvZGUuIE5vdGUgdGhhdCBpdCBjbGFpbXMgdG8gYmUgaW4gSVNPLUxhdGluLTEuCisgICAgICAgIHVuaWNvZGVfaHRtbCA9IHUnPGh0bWw+PGhlYWQ+PG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy1MYXRpbi0xIiBodHRwLWVxdWl2PSJDb250ZW50LXR5cGUiLz48L2hlYWQ+PGJvZHk+PHA+U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhPC9wPjwvYm9keT48L2h0bWw+JworCisgICAgICAgICMgVGhhdCdzIGJlY2F1c2Ugd2UncmUgZ29pbmcgdG8gZW5jb2RlIGl0IGludG8gSVNPLUxhdGluLTEsIGFuZCB1c2UKKyAgICAgICAgIyB0aGF0IHRvIHRlc3QuCisgICAgICAgIGlzb19sYXRpbl9odG1sID0gdW5pY29kZV9odG1sLmVuY29kZSgiaXNvLTg4NTktMSIpCisKKyAgICAgICAgIyBQYXJzZSB0aGUgSVNPLUxhdGluLTEgSFRNTC4KKyAgICAgICAgc291cCA9IHNlbGYuc291cChpc29fbGF0aW5faHRtbCkKKyAgICAgICAgIyBFbmNvZGUgaXQgdG8gVVRGLTguCisgICAgICAgIHJlc3VsdCA9IHNvdXAuZW5jb2RlKCJ1dGYtOCIpCisKKyAgICAgICAgIyBXaGF0IGRvIHdlIGV4cGVjdCB0aGUgcmVzdWx0IHRvIGxvb2sgbGlrZT8gV2VsbCwgaXQgd291bGQKKyAgICAgICAgIyBsb29rIGxpa2UgdW5pY29kZV9odG1sLCBleGNlcHQgdGhhdCB0aGUgTUVUQSB0YWcgd291bGQgc2F5CisgICAgICAgICMgVVRGLTggaW5zdGVhZCBvZiBJU08tTGF0aW4tMS4KKyAgICAgICAgZXhwZWN0ZWQgPSB1bmljb2RlX2h0bWwucmVwbGFjZSgiSVNPLUxhdGluLTEiLCAidXRmLTgiKQorCisgICAgICAgICMgQW5kLCBvZiBjb3Vyc2UsIGl0IHdvdWxkIGJlIGluIFVURi04LCBub3QgVW5pY29kZS4KKyAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RlZC5lbmNvZGUoInV0Zi04IikKKworICAgICAgICAjIFRhLWRhIQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9yZWFsX3NoaWZ0X2ppc19kb2N1bWVudChzZWxmKToKKyAgICAgICAgIyBTbW9rZSB0ZXN0IHRvIG1ha2Ugc3VyZSB0aGUgcGFyc2VyIGNhbiBoYW5kbGUgYSBkb2N1bWVudCBpbgorICAgICAgICAjIFNoaWZ0LUpJUyBlbmNvZGluZywgd2l0aG91dCBjaG9raW5nLgorICAgICAgICBzaGlmdF9qaXNfaHRtbCA9ICgKKyAgICAgICAgICAgIGInPGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PjxwcmU+JworICAgICAgICAgICAgYidceDgyXHhiMVx4ODJceGVhXHg4Mlx4Y2RTaGlmdC1KSVNceDgyXHhjNVx4ODNSXHg4MVtceDgzZicKKyAgICAgICAgICAgIGInXHg4M0JceDgzXHg5M1x4ODNPXHg4Mlx4YjNceDgyXHhlYVx4ODJceGJkXHg5M1x4ZmFceDk2e1x4OGMnCisgICAgICAgICAgICBiJ1x4ZWFceDgyXHhjY1x4ODN0XHg4M0BceDgzQ1x4ODNceDhiXHg4Mlx4YzVceDgyXHhiN1x4ODFCJworICAgICAgICAgICAgYic8L3ByZT48L2JvZHk+PC9odG1sPicpCisgICAgICAgIHVuaWNvZGVfaHRtbCA9IHNoaWZ0X2ppc19odG1sLmRlY29kZSgic2hpZnQtamlzIikKKyAgICAgICAgc291cCA9IHNlbGYuc291cCh1bmljb2RlX2h0bWwpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlIHBhcnNlIHRyZWUgaXMgY29ycmVjdGx5IGVuY29kZWQgdG8gdmFyaW91cworICAgICAgICAjIGVuY29kaW5ncy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmVuY29kZSgidXRmLTgiKSwgdW5pY29kZV9odG1sLmVuY29kZSgidXRmLTgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmVuY29kZSgiZXVjX2pwIiksIHVuaWNvZGVfaHRtbC5lbmNvZGUoImV1Y19qcCIpKQorCisgICAgZGVmIHRlc3RfcmVhbF9oZWJyZXdfZG9jdW1lbnQoc2VsZik6CisgICAgICAgICMgQSByZWFsLXdvcmxkIHRlc3QgdG8gbWFrZSBzdXJlIHdlIGNhbiBjb252ZXJ0IElTTy04ODU5LTkgKGEKKyAgICAgICAgIyBIZWJyZXcgZW5jb2RpbmcpIHRvIFVURi04LgorICAgICAgICBoZWJyZXdfZG9jdW1lbnQgPSBiJzxodG1sPjxoZWFkPjx0aXRsZT5IZWJyZXcgKElTTyA4ODU5LTgpIGluIFZpc3VhbCBEaXJlY3Rpb25hbGl0eTwvdGl0bGU+PC9oZWFkPjxib2R5PjxoMT5IZWJyZXcgKElTTyA4ODU5LTgpIGluIFZpc3VhbCBEaXJlY3Rpb25hbGl0eTwvaDE+XHhlZFx4ZTVceGVjXHhmOTwvYm9keT48L2h0bWw+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKAorICAgICAgICAgICAgaGVicmV3X2RvY3VtZW50LCBmcm9tX2VuY29kaW5nPSJpc284ODU5LTgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAub3JpZ2luYWxfZW5jb2RpbmcsICdpc284ODU5LTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5lbmNvZGUoJ3V0Zi04JyksCisgICAgICAgICAgICBoZWJyZXdfZG9jdW1lbnQuZGVjb2RlKCJpc284ODU5LTgiKS5lbmNvZGUoInV0Zi04IikpCisKKyAgICBkZWYgdGVzdF9tZXRhX3RhZ19yZWZsZWN0c19jdXJyZW50X2VuY29kaW5nKHNlbGYpOgorICAgICAgICAjIEhlcmUncyB0aGUgPG1ldGE+IHRhZyBzYXlpbmcgdGhhdCBhIGRvY3VtZW50IGlzCisgICAgICAgICMgZW5jb2RlZCBpbiBTaGlmdC1KSVMuCisgICAgICAgIG1ldGFfdGFnID0gKCc8bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9eC1zamlzIiAnCisgICAgICAgICAgICAgICAgICAgICdodHRwLWVxdWl2PSJDb250ZW50LXR5cGUiLz4nKQorCisgICAgICAgICMgSGVyZSdzIGEgZG9jdW1lbnQgaW5jb3Jwb3JhdGluZyB0aGF0IG1ldGEgdGFnLgorICAgICAgICBzaGlmdF9qaXNfaHRtbCA9ICgKKyAgICAgICAgICAgICc8aHRtbD48aGVhZD5cbiVzXG4nCisgICAgICAgICAgICAnPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1sYW5ndWFnZSIgY29udGVudD0iamEiLz4nCisgICAgICAgICAgICAnPC9oZWFkPjxib2R5PlNoaWZ0LUpJUyBtYXJrdXAgZ29lcyBoZXJlLicpICUgbWV0YV90YWcKKyAgICAgICAgc291cCA9IHNlbGYuc291cChzaGlmdF9qaXNfaHRtbCkKKworICAgICAgICAjIFBhcnNlIHRoZSBkb2N1bWVudCwgYW5kIHRoZSBjaGFyc2V0IGlzIHNlZW1pbmdseSB1bmFmZmVjdGVkLgorICAgICAgICBwYXJzZWRfbWV0YSA9IHNvdXAuZmluZCgnbWV0YScsIHsnaHR0cC1lcXVpdic6ICdDb250ZW50LXR5cGUnfSkKKyAgICAgICAgY29udGVudCA9IHBhcnNlZF9tZXRhWydjb250ZW50J10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgndGV4dC9odG1sOyBjaGFyc2V0PXgtc2ppcycsIGNvbnRlbnQpCisKKyAgICAgICAgIyBCdXQgdGhhdCB2YWx1ZSBpcyBhY3R1YWxseSBhIENvbnRlbnRNZXRhQXR0cmlidXRlVmFsdWUgb2JqZWN0LgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShjb250ZW50LCBDb250ZW50TWV0YUF0dHJpYnV0ZVZhbHVlKSkKKworICAgICAgICAjIEFuZCBpdCB3aWxsIHRha2Ugb24gYSB2YWx1ZSB0aGF0IHJlZmxlY3RzIGl0cyBjdXJyZW50CisgICAgICAgICMgZW5jb2RpbmcuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3RleHQvaHRtbDsgY2hhcnNldD11dGY4JywgY29udGVudC5lbmNvZGUoInV0ZjgiKSkKKworICAgICAgICAjIEZvciB0aGUgcmVzdCBvZiB0aGUgc3RvcnksIHNlZSBUZXN0U3Vic3RpdHV0aW9ucyBpbgorICAgICAgICAjIHRlc3RfdHJlZS5weS4KKworICAgIGRlZiB0ZXN0X2h0bWw1X3N0eWxlX21ldGFfdGFnX3JlZmxlY3RzX2N1cnJlbnRfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgICMgSGVyZSdzIHRoZSA8bWV0YT4gdGFnIHNheWluZyB0aGF0IGEgZG9jdW1lbnQgaXMKKyAgICAgICAgIyBlbmNvZGVkIGluIFNoaWZ0LUpJUy4KKyAgICAgICAgbWV0YV90YWcgPSAoJzxtZXRhIGlkPSJlbmNvZGluZyIgY2hhcnNldD0ieC1zamlzIiAvPicpCisKKyAgICAgICAgIyBIZXJlJ3MgYSBkb2N1bWVudCBpbmNvcnBvcmF0aW5nIHRoYXQgbWV0YSB0YWcuCisgICAgICAgIHNoaWZ0X2ppc19odG1sID0gKAorICAgICAgICAgICAgJzxodG1sPjxoZWFkPlxuJXNcbicKKyAgICAgICAgICAgICc8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LWxhbmd1YWdlIiBjb250ZW50PSJqYSIvPicKKyAgICAgICAgICAgICc8L2hlYWQ+PGJvZHk+U2hpZnQtSklTIG1hcmt1cCBnb2VzIGhlcmUuJykgJSBtZXRhX3RhZworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHNoaWZ0X2ppc19odG1sKQorCisgICAgICAgICMgUGFyc2UgdGhlIGRvY3VtZW50LCBhbmQgdGhlIGNoYXJzZXQgaXMgc2VlbWluZ2x5IHVuYWZmZWN0ZWQuCisgICAgICAgIHBhcnNlZF9tZXRhID0gc291cC5maW5kKCdtZXRhJywgaWQ9ImVuY29kaW5nIikKKyAgICAgICAgY2hhcnNldCA9IHBhcnNlZF9tZXRhWydjaGFyc2V0J10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneC1zamlzJywgY2hhcnNldCkKKworICAgICAgICAjIEJ1dCB0aGF0IHZhbHVlIGlzIGFjdHVhbGx5IGEgQ2hhcnNldE1ldGFBdHRyaWJ1dGVWYWx1ZSBvYmplY3QuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGNoYXJzZXQsIENoYXJzZXRNZXRhQXR0cmlidXRlVmFsdWUpKQorCisgICAgICAgICMgQW5kIGl0IHdpbGwgdGFrZSBvbiBhIHZhbHVlIHRoYXQgcmVmbGVjdHMgaXRzIGN1cnJlbnQKKyAgICAgICAgIyBlbmNvZGluZy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgndXRmOCcsIGNoYXJzZXQuZW5jb2RlKCJ1dGY4IikpCisKKyAgICBkZWYgdGVzdF90YWdfd2l0aF9ub19hdHRyaWJ1dGVzX2Nhbl9oYXZlX2F0dHJpYnV0ZXNfYWRkZWQoc2VsZik6CisgICAgICAgIGRhdGEgPSBzZWxmLnNvdXAoIjxhPnRleHQ8L2E+IikKKyAgICAgICAgZGF0YS5hWydmb28nXSA9ICdiYXInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzxhIGZvbz0iYmFyIj50ZXh0PC9hPicsIGRhdGEuYS5kZWNvZGUoKSkKKworY2xhc3MgWE1MVHJlZUJ1aWxkZXJTbW9rZVRlc3Qob2JqZWN0KToKKworICAgIGRlZiB0ZXN0X2RvY3N0cmluZ19nZW5lcmF0ZWQoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxyb290Lz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5lbmNvZGUoKSwgYic8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PlxuPHJvb3QvPicpCisKKyAgICBkZWYgdGVzdF9yZWFsX3hodG1sX2RvY3VtZW50KHNlbGYpOgorICAgICAgICAiIiJBIHJlYWwgWEhUTUwgZG9jdW1lbnQgc2hvdWxkIGNvbWUgb3V0ICpleGFjdGx5KiB0aGUgc2FtZSBhcyBpdCB3ZW50IGluLiIiIgorICAgICAgICBtYXJrdXAgPSBiIiIiPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+PHRpdGxlPkhlbGxvLjwvdGl0bGU+PC9oZWFkPgorPGJvZHk+R29vZGJ5ZS48L2JvZHk+Cis8L2h0bWw+IiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5lbmNvZGUoInV0Zi04IiksIG1hcmt1cCkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdHRlcl9wcm9jZXNzZXNfc2NyaXB0X3RhZ19mb3JfeG1sX2RvY3VtZW50cyhzZWxmKToKKyAgICAgICAgZG9jID0gIiIiCisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgPC9zY3JpcHQ+CisiIiIKKyAgICAgICAgc291cCA9IEJlYXV0aWZ1bFNvdXAoZG9jLCAieG1sIikKKyAgICAgICAgIyBseG1sIHdvdWxkIGhhdmUgc3RyaXBwZWQgdGhpcyB3aGlsZSBwYXJzaW5nLCBidXQgd2UgY2FuIGFkZAorICAgICAgICAjIGl0IGxhdGVyLgorICAgICAgICBzb3VwLnNjcmlwdC5zdHJpbmcgPSAnY29uc29sZS5sb2coIjwgPCBoZXkgPiA+ICIpOycKKyAgICAgICAgZW5jb2RlZCA9IHNvdXAuZW5jb2RlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiJmx0OyAmbHQ7IGhleSAmZ3Q7ICZndDsiIGluIGVuY29kZWQpCisKKyAgICBkZWYgdGVzdF9jYW5fcGFyc2VfdW5pY29kZV9kb2N1bWVudChzZWxmKToKKyAgICAgICAgbWFya3VwID0gdSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJldWMtanAiPjxyb290PlNhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ITwvcm9vdD4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnU2Fjclx4ZTkgYmxldSEnLCBzb3VwLnJvb3Quc3RyaW5nKQorCisgICAgZGVmIHRlc3RfcG9wcGluZ19uYW1lc3BhY2VkX3RhZyhzZWxmKToKKyAgICAgICAgbWFya3VwID0gJzxyc3MgeG1sbnM6ZGM9ImZvbyI+PGRjOmNyZWF0b3I+YjwvZGM6Y3JlYXRvcj48ZGM6ZGF0ZT4yMDEyLTA3LTAyVDIwOjMzOjQyWjwvZGM6ZGF0ZT48ZGM6cmlnaHRzPmM8L2RjOnJpZ2h0cz48aW1hZ2U+ZDwvaW1hZ2U+PC9yc3M+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHVuaWNvZGUoc291cC5yc3MpLCBtYXJrdXApCisKKyAgICBkZWYgdGVzdF9kb2NzdHJpbmdfaW5jbHVkZXNfY29ycmVjdF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPHJvb3QvPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmVuY29kZSgibGF0aW4xIiksCisgICAgICAgICAgICBiJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9ImxhdGluMSI/PlxuPHJvb3QvPicpCisKKyAgICBkZWYgdGVzdF9sYXJnZV94bWxfZG9jdW1lbnQoc2VsZik6CisgICAgICAgICIiIkEgbGFyZ2UgWE1MIGRvY3VtZW50IHNob3VsZCBjb21lIG91dCB0aGUgc2FtZSBhcyBpdCB3ZW50IGluLiIiIgorICAgICAgICBtYXJrdXAgPSAoYic8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PlxuPHJvb3Q+JworICAgICAgICAgICAgICAgICAgKyBiJzAnICogKDIqKjEyKQorICAgICAgICAgICAgICAgICAgKyBiJzwvcm9vdD4nKQorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmVuY29kZSgidXRmLTgiKSwgbWFya3VwKQorCisKKyAgICBkZWYgdGVzdF90YWdzX2FyZV9lbXB0eV9lbGVtZW50X2lmX2FuZF9vbmx5X2lmX3RoZXlfYXJlX2VtcHR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxwPiIsICI8cC8+IikKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8cD5mb288L3A+IikKKworICAgIGRlZiB0ZXN0X25hbWVzcGFjZXNfYXJlX3ByZXNlcnZlZChzZWxmKToKKyAgICAgICAgbWFya3VwID0gJzxyb290IHhtbG5zOmE9Imh0dHA6Ly9leGFtcGxlLmNvbS8iIHhtbG5zOmI9Imh0dHA6Ly9leGFtcGxlLm5ldC8iPjxhOmZvbz5UaGlzIHRhZyBpcyBpbiB0aGUgYSBuYW1lc3BhY2U8L2E6Zm9vPjxiOmZvbz5UaGlzIHRhZyBpcyBpbiB0aGUgYiBuYW1lc3BhY2U8L2I6Zm9vPjwvcm9vdD4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICByb290ID0gc291cC5yb290CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImh0dHA6Ly9leGFtcGxlLmNvbS8iLCByb290Wyd4bWxuczphJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImh0dHA6Ly9leGFtcGxlLm5ldC8iLCByb290Wyd4bWxuczpiJ10pCisKKyAgICBkZWYgdGVzdF9jbG9zaW5nX25hbWVzcGFjZWRfdGFnKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnPHAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj48ZGM6ZGF0ZT4yMDAxMDUwNDwvZGM6ZGF0ZT48L3A+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKHNvdXAucCksIG1hcmt1cCkKKworICAgIGRlZiB0ZXN0X25hbWVzcGFjZWRfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgbWFya3VwID0gJzxmb28geG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+PGJhciB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iLz48L2Zvbz4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoc291cC5mb28pLCBtYXJrdXApCisKKyAgICBkZWYgdGVzdF9uYW1lc3BhY2VkX2F0dHJpYnV0ZXNfeG1sX25hbWVzcGFjZShzZWxmKToKKyAgICAgICAgbWFya3VwID0gJzxmb28geG1sOmxhbmc9ImZyIj5iYXI8L2Zvbz4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoc291cC5mb28pLCBtYXJrdXApCisKK2NsYXNzIEhUTUw1VHJlZUJ1aWxkZXJTbW9rZVRlc3QoSFRNTFRyZWVCdWlsZGVyU21va2VUZXN0KToKKyAgICAiIiJTbW9rZSB0ZXN0IGZvciBhIHRyZWUgYnVpbGRlciB0aGF0IHN1cHBvcnRzIEhUTUw1LiIiIgorCisgICAgZGVmIHRlc3RfcmVhbF94aHRtbF9kb2N1bWVudChzZWxmKToKKyAgICAgICAgIyBTaW5jZSBYSFRNTCBpcyBub3QgSFRNTDUsIEhUTUw1IHBhcnNlcnMgYXJlIG5vdCB0ZXN0ZWQgdG8gaGFuZGxlCisgICAgICAgICMgWEhUTUwgZG9jdW1lbnRzIGluIGFueSBwYXJ0aWN1bGFyIHdheS4KKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfaHRtbF90YWdzX2hhdmVfbmFtZXNwYWNlKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAiPGE+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsIHNvdXAuYS5uYW1lc3BhY2UpCisKKyAgICBkZWYgdGVzdF9zdmdfdGFnc19oYXZlX25hbWVzcGFjZShzZWxmKToKKyAgICAgICAgbWFya3VwID0gJzxzdmc+PGNpcmNsZS8+PC9zdmc+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgbmFtZXNwYWNlID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWVzcGFjZSwgc291cC5zdmcubmFtZXNwYWNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWVzcGFjZSwgc291cC5jaXJjbGUubmFtZXNwYWNlKQorCisKKyAgICBkZWYgdGVzdF9tYXRobWxfdGFnc19oYXZlX25hbWVzcGFjZShzZWxmKToKKyAgICAgICAgbWFya3VwID0gJzxtYXRoPjxtc3FydD41PC9tc3FydD48L21hdGg+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgbmFtZXNwYWNlID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZXNwYWNlLCBzb3VwLm1hdGgubmFtZXNwYWNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWVzcGFjZSwgc291cC5tc3FydC5uYW1lc3BhY2UpCisKKyAgICBkZWYgdGVzdF94bWxfZGVjbGFyYXRpb25fYmVjb21lc19jb21tZW50KHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48aHRtbD48L2h0bWw+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc291cC5jb250ZW50c1swXSwgQ29tbWVudCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5jb250ZW50c1swXSwgJz94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImh0bWwiLCBzb3VwLmNvbnRlbnRzWzBdLm5leHRfZWxlbWVudC5uYW1lKQorCitkZWYgc2tpcElmKGNvbmRpdGlvbiwgcmVhc29uKToKKyAgIGRlZiBub3RoaW5nKHRlc3QsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgcmV0dXJuIE5vbmUKKworICAgZGVmIGRlY29yYXRvcih0ZXN0X2l0ZW0pOgorICAgICAgIGlmIGNvbmRpdGlvbjoKKyAgICAgICAgICAgcmV0dXJuIG5vdGhpbmcKKyAgICAgICBlbHNlOgorICAgICAgICAgICByZXR1cm4gdGVzdF9pdGVtCisKKyAgIHJldHVybiBkZWNvcmF0b3IKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQyYzhjYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEgQEAKKyJUaGUgYmVhdXRpZnVsc291cCB0ZXN0cy4iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2J1aWxkZXJfcmVnaXN0cnkucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2J1aWxkZXJfcmVnaXN0cnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJhZDEwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfYnVpbGRlcl9yZWdpc3RyeS5weQpAQCAtMCwwICsxLDE0MSBAQAorIiIiVGVzdHMgb2YgdGhlIGJ1aWxkZXIgcmVnaXN0cnkuIiIiCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGJzNCBpbXBvcnQgQmVhdXRpZnVsU291cAorZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgKAorICAgIGJ1aWxkZXJfcmVnaXN0cnkgYXMgcmVnaXN0cnksCisgICAgSFRNTFBhcnNlclRyZWVCdWlsZGVyLAorICAgIFRyZWVCdWlsZGVyUmVnaXN0cnksCispCisKK3RyeToKKyAgICBmcm9tIGJzNC5idWlsZGVyIGltcG9ydCBIVE1MNVRyZWVCdWlsZGVyCisgICAgSFRNTDVMSUJfUFJFU0VOVCA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBIVE1MNUxJQl9QUkVTRU5UID0gRmFsc2UKKwordHJ5OgorICAgIGZyb20gYnM0LmJ1aWxkZXIgaW1wb3J0ICgKKyAgICAgICAgTFhNTFRyZWVCdWlsZGVyRm9yWE1MLAorICAgICAgICBMWE1MVHJlZUJ1aWxkZXIsCisgICAgICAgICkKKyAgICBMWE1MX1BSRVNFTlQgPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgTFhNTF9QUkVTRU5UID0gRmFsc2UKKworCitjbGFzcyBCdWlsdEluUmVnaXN0cnlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBidWlsdC1pbiByZWdpc3RyeSB3aXRoIHRoZSBkZWZhdWx0IGJ1aWxkZXJzIHJlZ2lzdGVyZWQuIiIiCisKKyAgICBkZWYgdGVzdF9jb21iaW5hdGlvbihzZWxmKToKKyAgICAgICAgaWYgTFhNTF9QUkVTRU5UOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3RyeS5sb29rdXAoJ2Zhc3QnLCAnaHRtbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMWE1MVHJlZUJ1aWxkZXIpCisKKyAgICAgICAgaWYgTFhNTF9QUkVTRU5UOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3RyeS5sb29rdXAoJ3Blcm1pc3NpdmUnLCAneG1sJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExYTUxUcmVlQnVpbGRlckZvclhNTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3RyeS5sb29rdXAoJ3N0cmljdCcsICdodG1sJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxQYXJzZXJUcmVlQnVpbGRlcikKKyAgICAgICAgaWYgSFRNTDVMSUJfUFJFU0VOVDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVnaXN0cnkubG9va3VwKCdodG1sNWxpYicsICdodG1sJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVE1MNVRyZWVCdWlsZGVyKQorCisgICAgZGVmIHRlc3RfbG9va3VwX2J5X21hcmt1cF90eXBlKHNlbGYpOgorICAgICAgICBpZiBMWE1MX1BSRVNFTlQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgnaHRtbCcpLCBMWE1MVHJlZUJ1aWxkZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgneG1sJyksIExYTUxUcmVlQnVpbGRlckZvclhNTCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVnaXN0cnkubG9va3VwKCd4bWwnKSwgTm9uZSkKKyAgICAgICAgICAgIGlmIEhUTUw1TElCX1BSRVNFTlQ6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3RyeS5sb29rdXAoJ2h0bWwnKSwgSFRNTDVUcmVlQnVpbGRlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3RyeS5sb29rdXAoJ2h0bWwnKSwgSFRNTFBhcnNlclRyZWVCdWlsZGVyKQorCisgICAgZGVmIHRlc3RfbmFtZWRfbGlicmFyeShzZWxmKToKKyAgICAgICAgaWYgTFhNTF9QUkVTRU5UOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3RyeS5sb29rdXAoJ2x4bWwnLCAneG1sJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExYTUxUcmVlQnVpbGRlckZvclhNTCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVnaXN0cnkubG9va3VwKCdseG1sJywgJ2h0bWwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFhNTFRyZWVCdWlsZGVyKQorICAgICAgICBpZiBIVE1MNUxJQl9QUkVTRU5UOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3RyeS5sb29rdXAoJ2h0bWw1bGliJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVE1MNVRyZWVCdWlsZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVnaXN0cnkubG9va3VwKCdodG1sLnBhcnNlcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBIVE1MUGFyc2VyVHJlZUJ1aWxkZXIpCisKKyAgICBkZWYgdGVzdF9iZWF1dGlmdWxzb3VwX2NvbnN0cnVjdG9yX2RvZXNfbG9va3VwKHNlbGYpOgorICAgICAgICAjIFlvdSBjYW4gcGFzcyBpbiBhIHN0cmluZy4KKyAgICAgICAgQmVhdXRpZnVsU291cCgiIiwgZmVhdHVyZXM9Imh0bWwiKQorICAgICAgICAjIE9yIGEgbGlzdCBvZiBzdHJpbmdzLgorICAgICAgICBCZWF1dGlmdWxTb3VwKCIiLCBmZWF0dXJlcz1bImh0bWwiLCAiZmFzdCJdKQorCisgICAgICAgICMgWW91J2xsIGdldCBhbiBleGNlcHRpb24gaWYgQlMgY2FuJ3QgZmluZCBhbiBhcHByb3ByaWF0ZQorICAgICAgICAjIGJ1aWxkZXIuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEJlYXV0aWZ1bFNvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCBmZWF0dXJlcz0ibm8tc3VjaC1mZWF0dXJlIikKKworY2xhc3MgUmVnaXN0cnlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBUcmVlQnVpbGRlclJlZ2lzdHJ5IGNsYXNzIGluIGdlbmVyYWwuIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucmVnaXN0cnkgPSBUcmVlQnVpbGRlclJlZ2lzdHJ5KCkKKworICAgIGRlZiBidWlsZGVyX2Zvcl9mZWF0dXJlcyhzZWxmLCAqZmVhdHVyZV9saXN0KToKKyAgICAgICAgY2xzID0gdHlwZSgnQnVpbGRlcl8nICsgJ18nLmpvaW4oZmVhdHVyZV9saXN0KSwKKyAgICAgICAgICAgICAgICAgICAob2JqZWN0LCksIHsnZmVhdHVyZXMnIDogZmVhdHVyZV9saXN0fSkKKworICAgICAgICBzZWxmLnJlZ2lzdHJ5LnJlZ2lzdGVyKGNscykKKyAgICAgICAgcmV0dXJuIGNscworCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJfd2l0aF9ub19mZWF0dXJlcyhzZWxmKToKKyAgICAgICAgYnVpbGRlciA9IHNlbGYuYnVpbGRlcl9mb3JfZmVhdHVyZXMoKQorCisgICAgICAgICMgU2luY2UgdGhlIGJ1aWxkZXIgYWR2ZXJ0aXNlcyBubyBmZWF0dXJlcywgeW91IGNhbid0IGZpbmQgaXQKKyAgICAgICAgIyBieSBsb29raW5nIHVwIGZlYXR1cmVzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVnaXN0cnkubG9va3VwKCdmb28nKSwgTm9uZSkKKworICAgICAgICAjIEJ1dCB5b3UgY2FuIGZpbmQgaXQgYnkgZG9pbmcgYSBsb29rdXAgd2l0aCBubyBmZWF0dXJlcywgaWYKKyAgICAgICAgIyB0aGlzIGhhcHBlbnMgdG8gYmUgdGhlIG9ubHkgcmVnaXN0ZXJlZCBidWlsZGVyLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVnaXN0cnkubG9va3VwKCksIGJ1aWxkZXIpCisKKyAgICBkZWYgdGVzdF9yZWdpc3Rlcl93aXRoX2ZlYXR1cmVzX21ha2VzX2xvb2t1cF9zdWNjZWVkKHNlbGYpOgorICAgICAgICBidWlsZGVyID0gc2VsZi5idWlsZGVyX2Zvcl9mZWF0dXJlcygnZm9vJywgJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWdpc3RyeS5sb29rdXAoJ2ZvbycpLCBidWlsZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVnaXN0cnkubG9va3VwKCdiYXInKSwgYnVpbGRlcikKKworICAgIGRlZiB0ZXN0X2xvb2t1cF9mYWlsc193aGVuX25vX2J1aWxkZXJfaW1wbGVtZW50c19mZWF0dXJlKHNlbGYpOgorICAgICAgICBidWlsZGVyID0gc2VsZi5idWlsZGVyX2Zvcl9mZWF0dXJlcygnZm9vJywgJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWdpc3RyeS5sb29rdXAoJ2JheicpLCBOb25lKQorCisgICAgZGVmIHRlc3RfbG9va3VwX2dldHNfbW9zdF9yZWNlbnRfcmVnaXN0cmF0aW9uX3doZW5fbm9fZmVhdHVyZV9zcGVjaWZpZWQoc2VsZik6CisgICAgICAgIGJ1aWxkZXIxID0gc2VsZi5idWlsZGVyX2Zvcl9mZWF0dXJlcygnZm9vJykKKyAgICAgICAgYnVpbGRlcjIgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVnaXN0cnkubG9va3VwKCksIGJ1aWxkZXIyKQorCisgICAgZGVmIHRlc3RfbG9va3VwX2ZhaWxzX3doZW5fbm9fdHJlZV9idWlsZGVyc19yZWdpc3RlcmVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVnaXN0cnkubG9va3VwKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9sb29rdXBfZ2V0c19tb3N0X3JlY2VudF9idWlsZGVyX3N1cHBvcnRpbmdfYWxsX2ZlYXR1cmVzKHNlbGYpOgorICAgICAgICBoYXNfb25lID0gc2VsZi5idWlsZGVyX2Zvcl9mZWF0dXJlcygnZm9vJykKKyAgICAgICAgaGFzX3RoZV9vdGhlciA9IHNlbGYuYnVpbGRlcl9mb3JfZmVhdHVyZXMoJ2JhcicpCisgICAgICAgIGhhc19ib3RoX2Vhcmx5ID0gc2VsZi5idWlsZGVyX2Zvcl9mZWF0dXJlcygnZm9vJywgJ2JhcicsICdiYXonKQorICAgICAgICBoYXNfYm90aF9sYXRlID0gc2VsZi5idWlsZGVyX2Zvcl9mZWF0dXJlcygnZm9vJywgJ2JhcicsICdxdXV4JykKKyAgICAgICAgbGFja3Nfb25lID0gc2VsZi5idWlsZGVyX2Zvcl9mZWF0dXJlcygnYmFyJykKKyAgICAgICAgaGFzX3RoZV9vdGhlciA9IHNlbGYuYnVpbGRlcl9mb3JfZmVhdHVyZXMoJ2ZvbycpCisKKyAgICAgICAgIyBUaGVyZSBhcmUgdHdvIGJ1aWxkZXJzIGZlYXR1cmluZyAnZm9vJyBhbmQgJ2JhcicsIGJ1dAorICAgICAgICAjIHRoZSBvbmUgdGhhdCBhbHNvIGZlYXR1cmVzICdxdXV4JyB3YXMgcmVnaXN0ZXJlZCBsYXRlci4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZ2lzdHJ5Lmxvb2t1cCgnZm9vJywgJ2JhcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNfYm90aF9sYXRlKQorCisgICAgICAgICMgVGhlcmUgaXMgb25seSBvbmUgYnVpbGRlciBmZWF0dXJpbmcgJ2ZvbycsICdiYXInLCBhbmQgJ2JheicuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWdpc3RyeS5sb29rdXAoJ2ZvbycsICdiYXInLCAnYmF6JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19ib3RoX2Vhcmx5KQorCisgICAgZGVmIHRlc3RfbG9va3VwX2ZhaWxzX3doZW5fY2Fubm90X3JlY29uY2lsZV9yZXF1ZXN0ZWRfZmVhdHVyZXMoc2VsZik6CisgICAgICAgIGJ1aWxkZXIxID0gc2VsZi5idWlsZGVyX2Zvcl9mZWF0dXJlcygnZm9vJywgJ2JhcicpCisgICAgICAgIGJ1aWxkZXIyID0gc2VsZi5idWlsZGVyX2Zvcl9mZWF0dXJlcygnZm9vJywgJ2JheicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWdpc3RyeS5sb29rdXAoJ2JhcicsICdiYXonKSwgTm9uZSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfZG9jcy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfZG9jcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjlmNjc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9kb2NzLnB5CkBAIC0wLDAgKzEsMzYgQEAKKyJUZXN0IGhhcm5lc3MgZm9yIGRvY3Rlc3RzLiIKKworIyBweWxpbnQ6IGRpc2FibGUtbXNnPUUwNjExLFcwMTQyCisKK19fbWV0YWNsYXNzX18gPSB0eXBlCitfX2FsbF9fID0gWworICAgICdhZGRpdGlvbmFsX3Rlc3RzJywKKyAgICBdCisKK2ltcG9ydCBhdGV4aXQKK2ltcG9ydCBkb2N0ZXN0CitpbXBvcnQgb3MKKyNmcm9tIHBrZ19yZXNvdXJjZXMgaW1wb3J0ICgKKyMgICAgcmVzb3VyY2VfZmlsZW5hbWUsIHJlc291cmNlX2V4aXN0cywgcmVzb3VyY2VfbGlzdGRpciwgY2xlYW51cF9yZXNvdXJjZXMpCitpbXBvcnQgdW5pdHRlc3QKKworRE9DVEVTVF9GTEFHUyA9ICgKKyAgICBkb2N0ZXN0LkVMTElQU0lTIHwKKyAgICBkb2N0ZXN0Lk5PUk1BTElaRV9XSElURVNQQUNFIHwKKyAgICBkb2N0ZXN0LlJFUE9SVF9ORElGRikKKworCisjIGRlZiBhZGRpdGlvbmFsX3Rlc3RzKCk6CisjICAgICAiUnVuIHRoZSBkb2MgdGVzdHMgKFJFQURNRS50eHQgYW5kIGRvY3MvKiwgaWYgYW55IGV4aXN0KSIKKyMgICAgIGRvY3Rlc3RfZmlsZXMgPSBbCisjICAgICAgICAgb3MucGF0aC5hYnNwYXRoKHJlc291cmNlX2ZpbGVuYW1lKCdiczQnLCAnUkVBRE1FLnR4dCcpKV0KKyMgICAgIGlmIHJlc291cmNlX2V4aXN0cygnYnM0JywgJ2RvY3MnKToKKyMgICAgICAgICBmb3IgbmFtZSBpbiByZXNvdXJjZV9saXN0ZGlyKCdiczQnLCAnZG9jcycpOgorIyAgICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCcudHh0Jyk6CisjICAgICAgICAgICAgICAgICBkb2N0ZXN0X2ZpbGVzLmFwcGVuZCgKKyMgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmFic3BhdGgoCisjICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlX2ZpbGVuYW1lKCdiczQnLCAnZG9jcy8lcycgJSBuYW1lKSkpCisjICAgICBrd2FyZ3MgPSBkaWN0KG1vZHVsZV9yZWxhdGl2ZT1GYWxzZSwgb3B0aW9uZmxhZ3M9RE9DVEVTVF9GTEFHUykKKyMgICAgIGF0ZXhpdC5yZWdpc3RlcihjbGVhbnVwX3Jlc291cmNlcykKKyMgICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUoKAorIyAgICAgICAgIGRvY3Rlc3QuRG9jRmlsZVN1aXRlKCpkb2N0ZXN0X2ZpbGVzLCAqKmt3YXJncykpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9odG1sNWxpYi5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfaHRtbDVsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk0YzNlMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfaHRtbDVsaWIucHkKQEAgLTAsMCArMSw4NSBAQAorIiIiVGVzdHMgdG8gZW5zdXJlIHRoYXQgdGhlIGh0bWw1bGliIHRyZWUgYnVpbGRlciBnZW5lcmF0ZXMgZ29vZCB0cmVlcy4iIiIKKworaW1wb3J0IHdhcm5pbmdzCisKK3RyeToKKyAgICBmcm9tIGJzNC5idWlsZGVyIGltcG9ydCBIVE1MNVRyZWVCdWlsZGVyCisgICAgSFRNTDVMSUJfUFJFU0VOVCA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvciwgZToKKyAgICBIVE1MNUxJQl9QUkVTRU5UID0gRmFsc2UKK2Zyb20gYnM0LmVsZW1lbnQgaW1wb3J0IFNvdXBTdHJhaW5lcgorZnJvbSBiczQudGVzdGluZyBpbXBvcnQgKAorICAgIEhUTUw1VHJlZUJ1aWxkZXJTbW9rZVRlc3QsCisgICAgU291cFRlc3QsCisgICAgc2tpcElmLAorKQorCitAc2tpcElmKAorICAgIG5vdCBIVE1MNUxJQl9QUkVTRU5ULAorICAgICJodG1sNWxpYiBzZWVtcyBub3QgdG8gYmUgcHJlc2VudCwgbm90IHRlc3RpbmcgaXRzIHRyZWUgYnVpbGRlci4iKQorY2xhc3MgSFRNTDVMaWJCdWlsZGVyU21va2VUZXN0KFNvdXBUZXN0LCBIVE1MNVRyZWVCdWlsZGVyU21va2VUZXN0KToKKyAgICAiIiJTZWUgYGBIVE1MNVRyZWVCdWlsZGVyU21va2VUZXN0YGAuIiIiCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGVmYXVsdF9idWlsZGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gSFRNTDVUcmVlQnVpbGRlcigpCisKKyAgICBkZWYgdGVzdF9zb3Vwc3RyYWluZXIoc2VsZik6CisgICAgICAgICMgVGhlIGh0bWw1bGliIHRyZWUgYnVpbGRlciBkb2VzIG5vdCBzdXBwb3J0IFNvdXBTdHJhaW5lcnMuCisgICAgICAgIHN0cmFpbmVyID0gU291cFN0cmFpbmVyKCJiIikKKyAgICAgICAgbWFya3VwID0gIjxwPkEgPGI+Ym9sZDwvYj4gc3RhdGVtZW50LjwvcD4iCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CisgICAgICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCwgcGFyc2Vfb25seT1zdHJhaW5lcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKG1hcmt1cCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgInRoZSBodG1sNWxpYiB0cmVlIGJ1aWxkZXIgZG9lc24ndCBzdXBwb3J0IHBhcnNlX29ubHkiIGluCisgICAgICAgICAgICBzdHIod1swXS5tZXNzYWdlKSkKKworICAgIGRlZiB0ZXN0X2NvcnJlY3RseV9uZXN0ZWRfdGFibGVzKHNlbGYpOgorICAgICAgICAiIiJodG1sNWxpYiBpbnNlcnRzIDx0Ym9keT4gdGFncyB3aGVyZSBvdGhlciBwYXJzZXJzIGRvbid0LiIiIgorICAgICAgICBtYXJrdXAgPSAoJzx0YWJsZSBpZD0iMSI+JworICAgICAgICAgICAgICAgICAgJzx0cj4nCisgICAgICAgICAgICAgICAgICAiPHRkPkhlcmUncyBhbm90aGVyIHRhYmxlOiIKKyAgICAgICAgICAgICAgICAgICc8dGFibGUgaWQ9IjIiPicKKyAgICAgICAgICAgICAgICAgICc8dHI+PHRkPmZvbzwvdGQ+PC90cj4nCisgICAgICAgICAgICAgICAgICAnPC90YWJsZT48L3RkPicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKAorICAgICAgICAgICAgbWFya3VwLAorICAgICAgICAgICAgJzx0YWJsZSBpZD0iMSI+PHRib2R5Pjx0cj48dGQ+SGVyZVwncyBhbm90aGVyIHRhYmxlOicKKyAgICAgICAgICAgICc8dGFibGUgaWQ9IjIiPjx0Ym9keT48dHI+PHRkPmZvbzwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+JworICAgICAgICAgICAgJzwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+JykKKworICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoCisgICAgICAgICAgICAiPHRhYmxlPjx0aGVhZD48dHI+PHRkPkZvbzwvdGQ+PC90cj48L3RoZWFkPiIKKyAgICAgICAgICAgICI8dGJvZHk+PHRyPjx0ZD5CYXI8L3RkPjwvdHI+PC90Ym9keT4iCisgICAgICAgICAgICAiPHRmb290Pjx0cj48dGQ+QmF6PC90ZD48L3RyPjwvdGZvb3Q+PC90YWJsZT4iKQorCisgICAgZGVmIHRlc3RfeG1sX2RlY2xhcmF0aW9uX2ZvbGxvd2VkX2J5X2RvY3R5cGUoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICcnJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorICA8aGVhZD4KKyAgPC9oZWFkPgorICA8Ym9keT4KKyAgIDxwPmZvbzwvcD4KKyAgPC9ib2R5PgorPC9odG1sPicnJworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgIyBWZXJpZnkgdGhhdCB3ZSBjYW4gcmVhY2ggdGhlIDxwPiB0YWc7IHRoaXMgbWVhbnMgdGhlIHRyZWUgaXMgY29ubmVjdGVkLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiPHA+Zm9vPC9wPiIsIHNvdXAucC5lbmNvZGUoKSkKKworICAgIGRlZiB0ZXN0X3JlcGFyZW50ZWRfbWFya3VwKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnPHA+PGVtPmZvbzwvcD5cbjxwPmJhcjxhPjwvYT48L2VtPjwvcD4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiPGJvZHk+PHA+PGVtPmZvbzwvZW0+PC9wPjxlbT5cbjwvZW0+PHA+PGVtPmJhcjxhPjwvYT48L2VtPjwvcD48L2JvZHk+Iiwgc291cC5ib2R5LmRlY29kZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihzb3VwLmZpbmRfYWxsKCdwJykpKQorCisKKyAgICBkZWYgdGVzdF9yZXBhcmVudGVkX21hcmt1cF9lbmRzX3dpdGhfd2hpdGVzcGFjZShzZWxmKToKKyAgICAgICAgbWFya3VwID0gJzxwPjxlbT5mb288L3A+XG48cD5iYXI8YT48L2E+PC9lbT48L3A+XG4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiPGJvZHk+PHA+PGVtPmZvbzwvZW0+PC9wPjxlbT5cbjwvZW0+PHA+PGVtPmJhcjxhPjwvYT48L2VtPjwvcD5cbjwvYm9keT4iLCBzb3VwLmJvZHkuZGVjb2RlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKHNvdXAuZmluZF9hbGwoJ3AnKSkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2h0bWxwYXJzZXIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2h0bWxwYXJzZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNiNWVkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfaHRtbHBhcnNlci5weQpAQCAtMCwwICsxLDE5IEBACisiIiJUZXN0cyB0byBlbnN1cmUgdGhhdCB0aGUgaHRtbC5wYXJzZXIgdHJlZSBidWlsZGVyIGdlbmVyYXRlcyBnb29kCit0cmVlcy4iIiIKKworZnJvbSBiczQudGVzdGluZyBpbXBvcnQgU291cFRlc3QsIEhUTUxUcmVlQnVpbGRlclNtb2tlVGVzdAorZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgSFRNTFBhcnNlclRyZWVCdWlsZGVyCisKK2NsYXNzIEhUTUxQYXJzZXJUcmVlQnVpbGRlclNtb2tlVGVzdChTb3VwVGVzdCwgSFRNTFRyZWVCdWlsZGVyU21va2VUZXN0KToKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkZWZhdWx0X2J1aWxkZXIoc2VsZik6CisgICAgICAgIHJldHVybiBIVE1MUGFyc2VyVHJlZUJ1aWxkZXIoKQorCisgICAgZGVmIHRlc3RfbmFtZXNwYWNlZF9zeXN0ZW1fZG9jdHlwZShzZWxmKToKKyAgICAgICAgIyBodG1sLnBhcnNlciBjYW4ndCBoYW5kbGUgbmFtZXNwYWNlZCBkb2N0eXBlcywgc28gc2tpcCB0aGlzIG9uZS4KKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfbmFtZXNwYWNlZF9wdWJsaWNfZG9jdHlwZShzZWxmKToKKyAgICAgICAgIyBodG1sLnBhcnNlciBjYW4ndCBoYW5kbGUgbmFtZXNwYWNlZCBkb2N0eXBlcywgc28gc2tpcCB0aGlzIG9uZS4KKyAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9seG1sLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9seG1sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMmU5YjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2x4bWwucHkKQEAgLTAsMCArMSw5MSBAQAorIiIiVGVzdHMgdG8gZW5zdXJlIHRoYXQgdGhlIGx4bWwgdHJlZSBidWlsZGVyIGdlbmVyYXRlcyBnb29kIHRyZWVzLiIiIgorCitpbXBvcnQgcmUKK2ltcG9ydCB3YXJuaW5ncworCit0cnk6CisgICAgaW1wb3J0IGx4bWwuZXRyZWUKKyAgICBMWE1MX1BSRVNFTlQgPSBUcnVlCisgICAgTFhNTF9WRVJTSU9OID0gbHhtbC5ldHJlZS5MWE1MX1ZFUlNJT04KK2V4Y2VwdCBJbXBvcnRFcnJvciwgZToKKyAgICBMWE1MX1BSRVNFTlQgPSBGYWxzZQorICAgIExYTUxfVkVSU0lPTiA9ICgwLCkKKworaWYgTFhNTF9QUkVTRU5UOgorICAgIGZyb20gYnM0LmJ1aWxkZXIgaW1wb3J0IExYTUxUcmVlQnVpbGRlciwgTFhNTFRyZWVCdWlsZGVyRm9yWE1MCisKK2Zyb20gYnM0IGltcG9ydCAoCisgICAgQmVhdXRpZnVsU291cCwKKyAgICBCZWF1dGlmdWxTdG9uZVNvdXAsCisgICAgKQorZnJvbSBiczQuZWxlbWVudCBpbXBvcnQgQ29tbWVudCwgRG9jdHlwZSwgU291cFN0cmFpbmVyCitmcm9tIGJzNC50ZXN0aW5nIGltcG9ydCBza2lwSWYKK2Zyb20gYnM0LnRlc3RzIGltcG9ydCB0ZXN0X2h0bWxwYXJzZXIKK2Zyb20gYnM0LnRlc3RpbmcgaW1wb3J0ICgKKyAgICBIVE1MVHJlZUJ1aWxkZXJTbW9rZVRlc3QsCisgICAgWE1MVHJlZUJ1aWxkZXJTbW9rZVRlc3QsCisgICAgU291cFRlc3QsCisgICAgc2tpcElmLAorKQorCitAc2tpcElmKAorICAgIG5vdCBMWE1MX1BSRVNFTlQsCisgICAgImx4bWwgc2VlbXMgbm90IHRvIGJlIHByZXNlbnQsIG5vdCB0ZXN0aW5nIGl0cyB0cmVlIGJ1aWxkZXIuIikKK2NsYXNzIExYTUxUcmVlQnVpbGRlclNtb2tlVGVzdChTb3VwVGVzdCwgSFRNTFRyZWVCdWlsZGVyU21va2VUZXN0KToKKyAgICAiIiJTZWUgYGBIVE1MVHJlZUJ1aWxkZXJTbW9rZVRlc3RgYC4iIiIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkZWZhdWx0X2J1aWxkZXIoc2VsZik6CisgICAgICAgIHJldHVybiBMWE1MVHJlZUJ1aWxkZXIoKQorCisgICAgZGVmIHRlc3Rfb3V0X29mX3JhbmdlX2VudGl0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKAorICAgICAgICAgICAgIjxwPmZvbyYjMTAwMDAwMDAwMDAwMDA7YmFyPC9wPiIsICI8cD5mb29iYXI8L3A+IikKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKAorICAgICAgICAgICAgIjxwPmZvbyYjeDEwMDAwMDAwMDAwMDAwO2JhcjwvcD4iLCAiPHA+Zm9vYmFyPC9wPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygKKyAgICAgICAgICAgICI8cD5mb28mIzEwMDAwMDAwMDA7YmFyPC9wPiIsICI8cD5mb29iYXI8L3A+IikKKworICAgICMgSW4gbHhtbCA8IDIuMy41LCBhbiBlbXB0eSBkb2N0eXBlIGNhdXNlcyBhIHNlZ2ZhdWx0LiBTa2lwIHRoaXMKKyAgICAjIHRlc3QgaWYgYW4gb2xkIHZlcnNpb24gb2YgbHhtbCBpcyBpbnN0YWxsZWQuCisKKyAgICBAc2tpcElmKAorICAgICAgICBub3QgTFhNTF9QUkVTRU5UIG9yIExYTUxfVkVSU0lPTiA8ICgyLDMsNSwwKSwKKyAgICAgICAgIlNraXBwaW5nIGRvY3R5cGUgdGVzdCBmb3Igb2xkIHZlcnNpb24gb2YgbHhtbCB0byBhdm9pZCBzZWdmYXVsdC4iKQorICAgIGRlZiB0ZXN0X2VtcHR5X2RvY3R5cGUoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjwhRE9DVFlQRT4iKQorICAgICAgICBkb2N0eXBlID0gc291cC5jb250ZW50c1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIiLCBkb2N0eXBlLnN0cmlwKCkpCisKKyAgICBkZWYgdGVzdF9iZWF1dGlmdWxzdG9uZXNvdXBfaXNfeG1sX3BhcnNlcihzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgZGVwcmVjYXRlZCBCU1MgY2xhc3MgdXNlcyBhbiB4bWwgYnVpbGRlcgorICAgICAgICAjIGlmIG9uZSBpcyBpbnN0YWxsZWQuCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CisgICAgICAgICAgICBzb3VwID0gQmVhdXRpZnVsU3RvbmVTb3VwKCI8YiAvPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSI8Yi8+IiwgdW5pY29kZShzb3VwLmIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIkJlYXV0aWZ1bFN0b25lU291cCBjbGFzcyBpcyBkZXByZWNhdGVkIiBpbiBzdHIod1swXS5tZXNzYWdlKSkKKworICAgIGRlZiB0ZXN0X3JlYWxfeGh0bWxfZG9jdW1lbnQoc2VsZik6CisgICAgICAgICIiImx4bWwgc3RyaXBzIHRoZSBYTUwgZGVmaW5pdGlvbiBmcm9tIGFuIFhIVE1MIGRvYywgd2hpY2ggaXMgZmluZS4iIiIKKyAgICAgICAgbWFya3VwID0gYiIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPjx0aXRsZT5IZWxsby48L3RpdGxlPjwvaGVhZD4KKzxib2R5Pkdvb2RieWUuPC9ib2R5PgorPC9odG1sPiIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZW5jb2RlKCJ1dGYtOCIpLnJlcGxhY2UoYiJcbiIsIGInJyksCisgICAgICAgICAgICBtYXJrdXAucmVwbGFjZShiJ1xuJywgYicnKS5yZXBsYWNlKAorICAgICAgICAgICAgICAgIGInPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4nLCBiJycpKQorCisKK0Bza2lwSWYoCisgICAgbm90IExYTUxfUFJFU0VOVCwKKyAgICAibHhtbCBzZWVtcyBub3QgdG8gYmUgcHJlc2VudCwgbm90IHRlc3RpbmcgaXRzIFhNTCB0cmVlIGJ1aWxkZXIuIikKK2NsYXNzIExYTUxYTUxUcmVlQnVpbGRlclNtb2tlVGVzdChTb3VwVGVzdCwgWE1MVHJlZUJ1aWxkZXJTbW9rZVRlc3QpOgorICAgICIiIlNlZSBgYEhUTUxUcmVlQnVpbGRlclNtb2tlVGVzdGBgLiIiIgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRlZmF1bHRfYnVpbGRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIExYTUxUcmVlQnVpbGRlckZvclhNTCgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X3NvdXAucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X3NvdXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhYzI0NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3Rfc291cC5weQpAQCAtMCwwICsxLDQzNCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKyIiIlRlc3RzIG9mIEJlYXV0aWZ1bCBTb3VwIGFzIGEgd2hvbGUuIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQorCitmcm9tIGJzNCBpbXBvcnQgKAorICAgIEJlYXV0aWZ1bFNvdXAsCisgICAgQmVhdXRpZnVsU3RvbmVTb3VwLAorKQorZnJvbSBiczQuZWxlbWVudCBpbXBvcnQgKAorICAgIENoYXJzZXRNZXRhQXR0cmlidXRlVmFsdWUsCisgICAgQ29udGVudE1ldGFBdHRyaWJ1dGVWYWx1ZSwKKyAgICBTb3VwU3RyYWluZXIsCisgICAgTmFtZXNwYWNlZEF0dHJpYnV0ZSwKKyAgICApCitpbXBvcnQgYnM0LmRhbW1pdAorZnJvbSBiczQuZGFtbWl0IGltcG9ydCAoCisgICAgRW50aXR5U3Vic3RpdHV0aW9uLAorICAgIFVuaWNvZGVEYW1taXQsCispCitmcm9tIGJzNC50ZXN0aW5nIGltcG9ydCAoCisgICAgU291cFRlc3QsCisgICAgc2tpcElmLAorKQoraW1wb3J0IHdhcm5pbmdzCisKK3RyeToKKyAgICBmcm9tIGJzNC5idWlsZGVyIGltcG9ydCBMWE1MVHJlZUJ1aWxkZXIsIExYTUxUcmVlQnVpbGRlckZvclhNTAorICAgIExYTUxfUFJFU0VOVCA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvciwgZToKKyAgICBMWE1MX1BSRVNFTlQgPSBGYWxzZQorCitQWVRIT05fMl9QUkVfMl83ID0gKHN5cy52ZXJzaW9uX2luZm8gPCAoMiw3KSkKK1BZVEhPTl8zX1BSRV8zXzIgPSAoc3lzLnZlcnNpb25faW5mb1swXSA9PSAzIGFuZCBzeXMudmVyc2lvbl9pbmZvIDwgKDMsMikpCisKK2NsYXNzIFRlc3RDb25zdHJ1Y3RvcihTb3VwVGVzdCk6CisKKyAgICBkZWYgdGVzdF9zaG9ydF91bmljb2RlX2lucHV0KHNlbGYpOgorICAgICAgICBkYXRhID0gdSI8aDE+w6nDqTwvaDE+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSLDqcOpIiwgc291cC5oMS5zdHJpbmcpCisKKyAgICBkZWYgdGVzdF9lbWJlZGRlZF9udWxsKHNlbGYpOgorICAgICAgICBkYXRhID0gdSI8aDE+Zm9vXDBiYXI8L2gxPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiZm9vXDBiYXIiLCBzb3VwLmgxLnN0cmluZykKKworCitjbGFzcyBUZXN0RGVwcmVjYXRlZENvbnN0cnVjdG9yQXJndW1lbnRzKFNvdXBUZXN0KToKKworICAgIGRlZiB0ZXN0X3BhcnNlT25seVRoZXNlX3JlbmFtZWRfdG9fcGFyc2Vfb25seShzZWxmKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjxiPjwvYj48L2E+IiwgcGFyc2VPbmx5VGhlc2U9U291cFN0cmFpbmVyKCJiIikpCisgICAgICAgIG1zZyA9IHN0cih3WzBdLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgicGFyc2VPbmx5VGhlc2UiIGluIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJwYXJzZV9vbmx5IiBpbiBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiI8Yj48L2I+Iiwgc291cC5lbmNvZGUoKSkKKworICAgIGRlZiB0ZXN0X2Zyb21FbmNvZGluZ19yZW5hbWVkX3RvX2Zyb21fZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CisgICAgICAgICAgICB1dGY4ID0gYiJceGMzXHhhOSIKKyAgICAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAodXRmOCwgZnJvbUVuY29kaW5nPSJ1dGY4IikKKyAgICAgICAgbXNnID0gc3RyKHdbMF0ubWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJmcm9tRW5jb2RpbmciIGluIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJmcm9tX2VuY29kaW5nIiBpbiBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInV0ZjgiLCBzb3VwLm9yaWdpbmFsX2VuY29kaW5nKQorCisgICAgZGVmIHRlc3RfdW5yZWNvZ25pemVkX2tleXdvcmRfYXJndW1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVHlwZUVycm9yLCBzZWxmLnNvdXAsICI8YT4iLCBub19zdWNoX2FyZ3VtZW50PVRydWUpCisKK2NsYXNzIFRlc3RXYXJuaW5ncyhTb3VwVGVzdCk6CisKKyAgICBkZWYgdGVzdF9kaXNrX2ZpbGVfd2FybmluZyhzZWxmKToKKyAgICAgICAgZmlsZWhhbmRsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIGZpbGVuYW1lID0gZmlsZWhhbmRsZS5uYW1lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CisgICAgICAgICAgICAgICAgc291cCA9IHNlbGYuc291cChmaWxlbmFtZSkKKyAgICAgICAgICAgIG1zZyA9IHN0cih3WzBdLm1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoImxvb2tzIGxpa2UgYSBmaWxlbmFtZSIgaW4gbXNnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZWhhbmRsZS5jbG9zZSgpCisKKyAgICAgICAgIyBUaGUgZmlsZSBubyBsb25nZXIgZXhpc3RzLCBzbyBCZWF1dGlmdWwgU291cCB3aWxsIG5vIGxvbmdlciBpc3N1ZSB0aGUgd2FybmluZy4KKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoZmlsZW5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKHcpKQorCisgICAgZGVmIHRlc3RfdXJsX3dhcm5pbmcoc2VsZik6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CisgICAgICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCJodHRwOi8vd3d3LmNydW1teS5jb20vIikKKyAgICAgICAgbXNnID0gc3RyKHdbMF0ubWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJsb29rcyBsaWtlIGEgVVJMIiBpbiBtc2cpCisKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoImh0dHA6Ly93d3cuY3J1bW15LmNvbS8gaXMgZ3JlYXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbih3KSkKKworY2xhc3MgVGVzdFNlbGVjdGl2ZVBhcnNpbmcoU291cFRlc3QpOgorCisgICAgZGVmIHRlc3RfcGFyc2Vfd2l0aF9zb3Vwc3RyYWluZXIoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICJObzxiPlllczwvYj48YT5ObzxiPlllcyA8Yz5ZZXM8L2M+PC9iPiIKKyAgICAgICAgc3RyYWluZXIgPSBTb3VwU3RyYWluZXIoImIiKQorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCwgcGFyc2Vfb25seT1zdHJhaW5lcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmVuY29kZSgpLCBiIjxiPlllczwvYj48Yj5ZZXMgPGM+WWVzPC9jPjwvYj4iKQorCisKK2NsYXNzIFRlc3RFbnRpdHlTdWJzdGl0dXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlN0YW5kYWxvbmUgdGVzdHMgb2YgdGhlIEVudGl0eVN1YnN0aXR1dGlvbiBjbGFzcy4iIiIKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc3ViID0gRW50aXR5U3Vic3RpdHV0aW9uCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfaHRtbF9zdWJzdGl0dXRpb24oc2VsZik6CisgICAgICAgICMgVW5pY29kZSBjaGFyYWN0ZXJzIGNvcnJlc3BvbmRpbmcgdG8gbmFtZWQgSFRNTCBlbnRpdGVzCisgICAgICAgICMgYXJlIHN1YnN0aXR1dGVkLCBhbmQgbm8gb3RoZXJzLgorICAgICAgICBzID0gdSJmb29cdTIyMDBcTntTTk9XTUFOfVx1MDBmNWJhciIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN1Yi5zdWJzdGl0dXRlX2h0bWwocyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHUiZm9vJmZvcmFsbDtcTntTTk9XTUFOfSZvdGlsZGU7YmFyIikKKworICAgIGRlZiB0ZXN0X3NtYXJ0X3F1b3RlX3N1YnN0aXR1dGlvbihzZWxmKToKKyAgICAgICAgIyBNUyBzbWFydCBxdW90ZXMgYXJlIGEgY29tbW9uIHNvdXJjZSBvZiBmcnVzdHJhdGlvbiwgc28gd2UKKyAgICAgICAgIyBnaXZlIHRoZW0gYSBzcGVjaWFsIHRlc3QuCisgICAgICAgIHF1b3RlcyA9IGIiXHg5MVx4OTJmb29ceDkzXHg5NCIKKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdChxdW90ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdWIuc3Vic3RpdHV0ZV9odG1sKGRhbW1pdC5tYXJrdXApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJmxzcXVvOyZyc3F1bztmb28mbGRxdW87JnJkcXVvOyIpCisKKyAgICBkZWYgdGVzdF94bWxfY29udmVyc3Rpb25faW5jbHVkZXNfbm9fcXVvdGVzX2lmX21ha2VfcXVvdGVkX2F0dHJpYnV0ZV9pc19mYWxzZShzZWxmKToKKyAgICAgICAgcyA9ICdXZWxjb21lIHRvICJteSBiYXIiJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3ViLnN1YnN0aXR1dGVfeG1sKHMsIEZhbHNlKSwgcykKKworICAgIGRlZiB0ZXN0X3htbF9hdHRyaWJ1dGVfcXVvdGluZ19ub3JtYWxseV91c2VzX2RvdWJsZV9xdW90ZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdWIuc3Vic3RpdHV0ZV94bWwoIldlbGNvbWUiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJyJXZWxjb21lIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdWIuc3Vic3RpdHV0ZV94bWwoIkJvYidzIEJhciIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnIkJvYlwncyBCYXIiJykKKworICAgIGRlZiB0ZXN0X3htbF9hdHRyaWJ1dGVfcXVvdGluZ191c2VzX3NpbmdsZV9xdW90ZXNfd2hlbl92YWx1ZV9jb250YWluc19kb3VibGVfcXVvdGVzKHNlbGYpOgorICAgICAgICBzID0gJ1dlbGNvbWUgdG8gIm15IGJhciInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdWIuc3Vic3RpdHV0ZV94bWwocywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICInV2VsY29tZSB0byBcIm15IGJhclwiJyIpCisKKyAgICBkZWYgdGVzdF94bWxfYXR0cmlidXRlX3F1b3RpbmdfZXNjYXBlc19zaW5nbGVfcXVvdGVzX3doZW5fdmFsdWVfY29udGFpbnNfYm90aF9zaW5nbGVfYW5kX2RvdWJsZV9xdW90ZXMoc2VsZik6CisgICAgICAgIHMgPSAnV2VsY29tZSB0byAiQm9iXCdzIEJhciInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnN1Yi5zdWJzdGl0dXRlX3htbChzLCBUcnVlKSwKKyAgICAgICAgICAgICciV2VsY29tZSB0byAmcXVvdDtCb2JcJ3MgQmFyJnF1b3Q7IicpCisKKyAgICBkZWYgdGVzdF94bWxfcXVvdGVzX2FyZW50X2VzY2FwZWRfd2hlbl92YWx1ZV9pc19ub3RfYmVpbmdfcXVvdGVkKHNlbGYpOgorICAgICAgICBxdW90ZWQgPSAnV2VsY29tZSB0byAiQm9iXCdzIEJhciInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdWIuc3Vic3RpdHV0ZV94bWwocXVvdGVkKSwgcXVvdGVkKQorCisgICAgZGVmIHRlc3RfeG1sX3F1b3RpbmdfaGFuZGxlc19hbmdsZV9icmFja2V0cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYuc3ViLnN1YnN0aXR1dGVfeG1sKCJmb288YmFyPiIpLAorICAgICAgICAgICAgImZvbyZsdDtiYXImZ3Q7IikKKworICAgIGRlZiB0ZXN0X3htbF9xdW90aW5nX2hhbmRsZXNfYW1wZXJzYW5kcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN1Yi5zdWJzdGl0dXRlX3htbCgiQVQmVCIpLCAiQVQmYW1wO1QiKQorCisgICAgZGVmIHRlc3RfeG1sX3F1b3RpbmdfaW5jbHVkaW5nX2FtcGVyc2FuZHNfd2hlbl90aGV5X2FyZV9wYXJ0X29mX2FuX2VudGl0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYuc3ViLnN1YnN0aXR1dGVfeG1sKCImQWFjdXRlO1QmVCIpLAorICAgICAgICAgICAgIiZhbXA7QWFjdXRlO1QmYW1wO1QiKQorCisgICAgZGVmIHRlc3RfeG1sX3F1b3RpbmdfaWdub3JpbmdfYW1wZXJzYW5kc193aGVuX3RoZXlfYXJlX3BhcnRfb2ZfYW5fZW50aXR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5zdWIuc3Vic3RpdHV0ZV94bWxfY29udGFpbmluZ19lbnRpdGllcygiJkFhY3V0ZTtUJlQiKSwKKyAgICAgICAgICAgICImQWFjdXRlO1QmYW1wO1QiKQorCisgICAgZGVmIHRlc3RfcXVvdGVzX25vdF9odG1sX3N1YnN0aXR1dGVkKHNlbGYpOgorICAgICAgICAiIiJUaGVyZSdzIG5vIG5lZWQgdG8gZG8gdGhpcyBleGNlcHQgaW5zaWRlIGF0dHJpYnV0ZSB2YWx1ZXMuIiIiCisgICAgICAgIHRleHQgPSAnQm9iXCdzICJiYXIiJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3ViLnN1YnN0aXR1dGVfaHRtbCh0ZXh0KSwgdGV4dCkKKworCitjbGFzcyBUZXN0RW5jb2RpbmdDb252ZXJzaW9uKFNvdXBUZXN0KToKKyAgICAjIFRlc3QgQmVhdXRpZnVsIFNvdXAncyBhYmlsaXR5IHRvIGRlY29kZSBhbmQgZW5jb2RlIGZyb20gdmFyaW91cworICAgICMgZW5jb2RpbmdzLgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0RW5jb2RpbmdDb252ZXJzaW9uLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYudW5pY29kZV9kYXRhID0gdSc8aHRtbD48aGVhZD48bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPjwvaGVhZD48Ym9keT48Zm9vPlNhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ITwvZm9vPjwvYm9keT48L2h0bWw+JworICAgICAgICBzZWxmLnV0ZjhfZGF0YSA9IHNlbGYudW5pY29kZV9kYXRhLmVuY29kZSgidXRmLTgiKQorICAgICAgICAjIEp1c3Qgc28geW91IGtub3cgd2hhdCBpdCBsb29rcyBsaWtlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi51dGY4X2RhdGEsCisgICAgICAgICAgICBiJzxodG1sPjxoZWFkPjxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+PC9oZWFkPjxib2R5Pjxmb28+U2Fjclx4YzNceGE5IGJsZXUhPC9mb28+PC9ib2R5PjwvaHRtbD4nKQorCisgICAgZGVmIHRlc3RfYXNjaWlfaW5fdW5pY29kZV9vdXQoc2VsZik6CisgICAgICAgICMgQVNDSUkgaW5wdXQgaXMgY29udmVydGVkIHRvIFVuaWNvZGUuIFRoZSBvcmlnaW5hbF9lbmNvZGluZworICAgICAgICAjIGF0dHJpYnV0ZSBpcyBzZXQgdG8gJ3V0Zi04JywgYSBzdXBlcnNldCBvZiBBU0NJSS4KKyAgICAgICAgY2hhcmRldCA9IGJzNC5kYW1taXQuY2hhcmRldF9kYW1taXQKKyAgICAgICAgbG9nZ2luZy5kaXNhYmxlKGxvZ2dpbmcuV0FSTklORykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVmIG5vb3Aoc3RyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgIyBEaXNhYmxlIGNoYXJkZXQsIHdoaWNoIHdpbGwgcmVhbGl6ZSB0aGF0IHRoZSBBU0NJSSBpcyBBU0NJSS4KKyAgICAgICAgICAgIGJzNC5kYW1taXQuY2hhcmRldF9kYW1taXQgPSBub29wCisgICAgICAgICAgICBhc2NpaSA9IGIiPGZvbz5hPC9mb28+IgorICAgICAgICAgICAgc291cF9mcm9tX2FzY2lpID0gc2VsZi5zb3VwKGFzY2lpKQorICAgICAgICAgICAgdW5pY29kZV9vdXRwdXQgPSBzb3VwX2Zyb21fYXNjaWkuZGVjb2RlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHVuaWNvZGVfb3V0cHV0LCB1bmljb2RlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZV9vdXRwdXQsIHNlbGYuZG9jdW1lbnRfZm9yKGFzY2lpLmRlY29kZSgpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cF9mcm9tX2FzY2lpLm9yaWdpbmFsX2VuY29kaW5nLmxvd2VyKCksICJ1dGYtOCIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsb2dnaW5nLmRpc2FibGUobG9nZ2luZy5OT1RTRVQpCisgICAgICAgICAgICBiczQuZGFtbWl0LmNoYXJkZXRfZGFtbWl0ID0gY2hhcmRldAorCisgICAgZGVmIHRlc3RfdW5pY29kZV9pbl91bmljb2RlX291dChzZWxmKToKKyAgICAgICAgIyBVbmljb2RlIGlucHV0IGlzIGxlZnQgYWxvbmUuIFRoZSBvcmlnaW5hbF9lbmNvZGluZyBhdHRyaWJ1dGUKKyAgICAgICAgIyBpcyBub3Qgc2V0LgorICAgICAgICBzb3VwX2Zyb21fdW5pY29kZSA9IHNlbGYuc291cChzZWxmLnVuaWNvZGVfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwX2Zyb21fdW5pY29kZS5kZWNvZGUoKSwgc2VsZi51bmljb2RlX2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cF9mcm9tX3VuaWNvZGUuZm9vLnN0cmluZywgdSdTYWNyXHhlOSBibGV1IScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cF9mcm9tX3VuaWNvZGUub3JpZ2luYWxfZW5jb2RpbmcsIE5vbmUpCisKKyAgICBkZWYgdGVzdF91dGY4X2luX3VuaWNvZGVfb3V0KHNlbGYpOgorICAgICAgICAjIFVURi04IGlucHV0IGlzIGNvbnZlcnRlZCB0byBVbmljb2RlLiBUaGUgb3JpZ2luYWxfZW5jb2RpbmcKKyAgICAgICAgIyBhdHRyaWJ1dGUgaXMgc2V0LgorICAgICAgICBzb3VwX2Zyb21fdXRmOCA9IHNlbGYuc291cChzZWxmLnV0ZjhfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwX2Zyb21fdXRmOC5kZWNvZGUoKSwgc2VsZi51bmljb2RlX2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cF9mcm9tX3V0ZjguZm9vLnN0cmluZywgdSdTYWNyXHhlOSBibGV1IScpCisKKyAgICBkZWYgdGVzdF91dGY4X291dChzZWxmKToKKyAgICAgICAgIyBUaGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGNhbiBiZSBlbmNvZGVkIGFzIFVURi04LgorICAgICAgICBzb3VwX2Zyb21fdW5pY29kZSA9IHNlbGYuc291cChzZWxmLnVuaWNvZGVfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwX2Zyb21fdW5pY29kZS5lbmNvZGUoJ3V0Zi04JyksIHNlbGYudXRmOF9kYXRhKQorCisgICAgQHNraXBJZigKKyAgICAgICAgUFlUSE9OXzJfUFJFXzJfNyBvciBQWVRIT05fM19QUkVfM18yLAorICAgICAgICAiQmFkIEhUTUxQYXJzZXIgZGV0ZWN0ZWQ7IHNraXBwaW5nIHRlc3Qgb2Ygbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW4gYXR0cmlidXRlIG5hbWUuIikKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfbmFtZV9jb250YWluaW5nX3VuaWNvZGVfY2hhcmFjdGVycyhzZWxmKToKKyAgICAgICAgbWFya3VwID0gdSc8ZGl2PjxhIFxOe1NOT1dNQU59PSJzbm93bWFuIj48L2E+PC9kaXY+JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc291cChtYXJrdXApLmRpdi5lbmNvZGUoInV0ZjgiKSwgbWFya3VwLmVuY29kZSgidXRmOCIpKQorCitjbGFzcyBUZXN0VW5pY29kZURhbW1pdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiU3RhbmRhbG9uZSB0ZXN0cyBvZiBVbmljb2RlRGFtbWl0LiIiIgorCisgICAgZGVmIHRlc3RfdW5pY29kZV9pbnB1dChzZWxmKToKKyAgICAgICAgbWFya3VwID0gdSJJJ20gYWxyZWFkeSBVbmljb2RlISBcTntTTk9XTUFOfSIKKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFtbWl0LnVuaWNvZGVfbWFya3VwLCBtYXJrdXApCisKKyAgICBkZWYgdGVzdF9zbWFydF9xdW90ZXNfdG9fdW5pY29kZShzZWxmKToKKyAgICAgICAgbWFya3VwID0gYiI8Zm9vPlx4OTFceDkyXHg5M1x4OTQ8L2Zvbz4iCisgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZGFtbWl0LnVuaWNvZGVfbWFya3VwLCB1Ijxmb28+XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkPC9mb28+IikKKworICAgIGRlZiB0ZXN0X3NtYXJ0X3F1b3Rlc190b194bWxfZW50aXRpZXMoc2VsZik6CisgICAgICAgIG1hcmt1cCA9IGIiPGZvbz5ceDkxXHg5Mlx4OTNceDk0PC9mb28+IgorICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KG1hcmt1cCwgc21hcnRfcXVvdGVzX3RvPSJ4bWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZGFtbWl0LnVuaWNvZGVfbWFya3VwLCAiPGZvbz4mI3gyMDE4OyYjeDIwMTk7JiN4MjAxQzsmI3gyMDFEOzwvZm9vPiIpCisKKyAgICBkZWYgdGVzdF9zbWFydF9xdW90ZXNfdG9faHRtbF9lbnRpdGllcyhzZWxmKToKKyAgICAgICAgbWFya3VwID0gYiI8Zm9vPlx4OTFceDkyXHg5M1x4OTQ8L2Zvbz4iCisgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQobWFya3VwLCBzbWFydF9xdW90ZXNfdG89Imh0bWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZGFtbWl0LnVuaWNvZGVfbWFya3VwLCAiPGZvbz4mbHNxdW87JnJzcXVvOyZsZHF1bzsmcmRxdW87PC9mb28+IikKKworICAgIGRlZiB0ZXN0X3NtYXJ0X3F1b3Rlc190b19hc2NpaShzZWxmKToKKyAgICAgICAgbWFya3VwID0gYiI8Zm9vPlx4OTFceDkyXHg5M1x4OTQ8L2Zvbz4iCisgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQobWFya3VwLCBzbWFydF9xdW90ZXNfdG89ImFzY2lpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGRhbW1pdC51bmljb2RlX21hcmt1cCwgIiIiPGZvbz4nJyIiPC9mb28+IiIiKQorCisgICAgZGVmIHRlc3RfZGV0ZWN0X3V0Zjgoc2VsZik6CisgICAgICAgIHV0ZjggPSBiIlx4YzNceGE5IgorICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KHV0ZjgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFtbWl0LnVuaWNvZGVfbWFya3VwLCB1J1x4ZTknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhbW1pdC5vcmlnaW5hbF9lbmNvZGluZy5sb3dlcigpLCAndXRmLTgnKQorCisgICAgZGVmIHRlc3RfY29udmVydF9oZWJyZXcoc2VsZik6CisgICAgICAgIGhlYnJldyA9IGIiXHhlZFx4ZTVceGVjXHhmOSIKKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdChoZWJyZXcsIFsiaXNvLTg4NTktOCJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhbW1pdC5vcmlnaW5hbF9lbmNvZGluZy5sb3dlcigpLCAnaXNvLTg4NTktOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFtbWl0LnVuaWNvZGVfbWFya3VwLCB1J1x1MDVkZFx1MDVkNVx1MDVkY1x1MDVlOScpCisKKyAgICBkZWYgdGVzdF9kb250X3NlZV9zbWFydF9xdW90ZXNfd2hlcmVfdGhlcmVfYXJlX25vbmUoc2VsZik6CisgICAgICAgIHV0Zl84ID0gYiJcMzQzXDIwMlwyNjFcMzQzXDIwM1wyNzRcMzQzXDIwMlwyNzdcMzQzXDIwMlwyNDQgV2F0Y2giCisgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQodXRmXzgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFtbWl0Lm9yaWdpbmFsX2VuY29kaW5nLmxvd2VyKCksICd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFtbWl0LnVuaWNvZGVfbWFya3VwLmVuY29kZSgidXRmLTgiKSwgdXRmXzgpCisKKyAgICBkZWYgdGVzdF9pZ25vcmVfaW5hcHByb3ByaWF0ZV9jb2RlY3Moc2VsZik6CisgICAgICAgIHV0ZjhfZGF0YSA9IHUiUsOka3Ntw7ZyZ8OlcyIuZW5jb2RlKCJ1dGYtOCIpCisgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQodXRmOF9kYXRhLCBbImlzby04ODU5LTgiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYW1taXQub3JpZ2luYWxfZW5jb2RpbmcubG93ZXIoKSwgJ3V0Zi04JykKKworICAgIGRlZiB0ZXN0X2lnbm9yZV9pbnZhbGlkX2NvZGVjcyhzZWxmKToKKyAgICAgICAgdXRmOF9kYXRhID0gdSJSw6Rrc23DtnJnw6VzIi5lbmNvZGUoInV0Zi04IikKKyAgICAgICAgZm9yIGJhZF9lbmNvZGluZyBpbiBbJy51dGY4JywgJy4uLicsICd1dEYtLS0xNi4hJ106CisgICAgICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KHV0ZjhfZGF0YSwgW2JhZF9lbmNvZGluZ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhbW1pdC5vcmlnaW5hbF9lbmNvZGluZy5sb3dlcigpLCAndXRmLTgnKQorCisgICAgZGVmIHRlc3RfZGV0ZWN0X2h0bWw1X3N0eWxlX21ldGFfdGFnKHNlbGYpOgorCisgICAgICAgIGZvciBkYXRhIGluICgKKyAgICAgICAgICAgIGInPGh0bWw+PG1ldGEgY2hhcnNldD0iZXVjLWpwIiAvPjwvaHRtbD4nLAorICAgICAgICAgICAgYiI8aHRtbD48bWV0YSBjaGFyc2V0PSdldWMtanAnIC8+PC9odG1sPiIsCisgICAgICAgICAgICBiIjxodG1sPjxtZXRhIGNoYXJzZXQ9ZXVjLWpwIC8+PC9odG1sPiIsCisgICAgICAgICAgICBiIjxodG1sPjxtZXRhIGNoYXJzZXQ9ZXVjLWpwLz48L2h0bWw+Iik6CisgICAgICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KGRhdGEsIGlzX2h0bWw9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgImV1Yy1qcCIsIGRhbW1pdC5vcmlnaW5hbF9lbmNvZGluZykKKworICAgIGRlZiB0ZXN0X2xhc3RfZGl0Y2hfZW50aXR5X3JlcGxhY2VtZW50KHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgYSBVVEYtOCBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIGJ5dGVzdHJpbmdzCisgICAgICAgICMgY29tcGxldGVseSBpbmNvbXBhdGlibGUgd2l0aCBVVEYtOCAoaWUuIGVuY29kZWQgd2l0aCBzb21lIG90aGVyCisgICAgICAgICMgZW5jb2RpbmcpLgorICAgICAgICAjCisgICAgICAgICMgU2luY2UgdGhlcmUgaXMgbm8gY29uc2lzdGVudCBlbmNvZGluZyBmb3IgdGhlIGRvY3VtZW50LAorICAgICAgICAjIFVuaWNvZGUsIERhbW1pdCB3aWxsIGV2ZW50dWFsbHkgZW5jb2RlIHRoZSBkb2N1bWVudCBhcyBVVEYtOAorICAgICAgICAjIGFuZCBlbmNvZGUgdGhlIGluY29tcGF0aWJsZSBjaGFyYWN0ZXJzIGFzIFJFUExBQ0VNRU5UCisgICAgICAgICMgQ0hBUkFDVEVSLgorICAgICAgICAjCisgICAgICAgICMgSWYgY2hhcmRldCBpcyBpbnN0YWxsZWQsIGl0IHdpbGwgZGV0ZWN0IHRoYXQgdGhlIGRvY3VtZW50CisgICAgICAgICMgY2FuIGJlIGNvbnZlcnRlZCBpbnRvIElTTy04ODU5LTEgd2l0aG91dCBlcnJvcnMuIFRoaXMgaGFwcGVucworICAgICAgICAjIHRvIGJlIHRoZSB3cm9uZyBlbmNvZGluZywgYnV0IGl0IGlzIGEgY29uc2lzdGVudCBlbmNvZGluZywgc28gdGhlCisgICAgICAgICMgY29kZSB3ZSdyZSB0ZXN0aW5nIGhlcmUgd29uJ3QgcnVuLgorICAgICAgICAjCisgICAgICAgICMgU28gd2UgdGVtcG9yYXJpbHkgZGlzYWJsZSBjaGFyZGV0IGlmIGl0J3MgcHJlc2VudC4KKyAgICAgICAgZG9jID0gYiIiIlwzNTdcMjczXDI3Nzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8aHRtbD48Yj5cMzMwXDI1MFwzMzBcMjUyXDMzMFwyNjE8L2I+Cis8aT5cMzEwXDMyMlwzMjFcMjIwXDMxMlwzMjFcMzU1XDM0NDwvaT48L2h0bWw+IiIiCisgICAgICAgIGNoYXJkZXQgPSBiczQuZGFtbWl0LmNoYXJkZXRfZGFtbWl0CisgICAgICAgIGxvZ2dpbmcuZGlzYWJsZShsb2dnaW5nLldBUk5JTkcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZiBub29wKHN0cik6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGJzNC5kYW1taXQuY2hhcmRldF9kYW1taXQgPSBub29wCisgICAgICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KGRvYykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgZGFtbWl0LmNvbnRhaW5zX3JlcGxhY2VtZW50X2NoYXJhY3RlcnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodSJcdWZmZmQiIGluIGRhbW1pdC51bmljb2RlX21hcmt1cCkKKworICAgICAgICAgICAgc291cCA9IEJlYXV0aWZ1bFNvdXAoZG9jLCAiaHRtbC5wYXJzZXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvdXAuY29udGFpbnNfcmVwbGFjZW1lbnRfY2hhcmFjdGVycykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGxvZ2dpbmcuZGlzYWJsZShsb2dnaW5nLk5PVFNFVCkKKyAgICAgICAgICAgIGJzNC5kYW1taXQuY2hhcmRldF9kYW1taXQgPSBjaGFyZGV0CisKKyAgICBkZWYgdGVzdF9ieXRlX29yZGVyX21hcmtfcmVtb3ZlZChzZWxmKToKKyAgICAgICAgIyBBIGRvY3VtZW50IHdyaXR0ZW4gaW4gVVRGLTE2TEUgd2lsbCBoYXZlIGl0cyBieXRlIG9yZGVyIG1hcmtlciBzdHJpcHBlZC4KKyAgICAgICAgZGF0YSA9IGInXHhmZlx4ZmU8XHgwMGFceDAwPlx4MDBceGUxXHgwMFx4ZTlceDAwPFx4MDAvXHgwMGFceDAwPlx4MDAnCisgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IjxhPsOhw6k8L2E+IiwgZGFtbWl0LnVuaWNvZGVfbWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ1dGYtMTZsZSIsIGRhbW1pdC5vcmlnaW5hbF9lbmNvZGluZykKKworICAgIGRlZiB0ZXN0X2RldHdpbmdsZShzZWxmKToKKyAgICAgICAgIyBIZXJlJ3MgYSBVVEY4IGRvY3VtZW50LgorICAgICAgICB1dGY4ID0gKHUiXE57U05PV01BTn0iICogMykuZW5jb2RlKCJ1dGY4IikKKworICAgICAgICAjIEhlcmUncyBhIFdpbmRvd3MtMTI1MiBkb2N1bWVudC4KKyAgICAgICAgd2luZG93c18xMjUyID0gKAorICAgICAgICAgICAgdSJcTntMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSS31IaSwgSSBsaWtlIFdpbmRvd3MhIgorICAgICAgICAgICAgdSJcTntSSUdIVCBET1VCTEUgUVVPVEFUSU9OIE1BUkt9IikuZW5jb2RlKCJ3aW5kb3dzXzEyNTIiKQorCisgICAgICAgICMgVGhyb3VnaCBzb21lIHVuaG9seSBhbGNoZW15LCB0aGV5J3ZlIGJlZW4gc3R1Y2sgdG9nZXRoZXIuCisgICAgICAgIGRvYyA9IHV0ZjggKyB3aW5kb3dzXzEyNTIgKyB1dGY4CisKKyAgICAgICAgIyBUaGUgZG9jdW1lbnQgY2FuJ3QgYmUgdHVybmVkIGludG8gVVRGLTg6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgZG9jLmRlY29kZSwgInV0ZjgiKQorCisgICAgICAgICMgVW5pY29kZSwgRGFtbWl0IHRoaW5rcyB0aGUgd2hvbGUgZG9jdW1lbnQgaXMgV2luZG93cy0xMjUyLAorICAgICAgICAjIGFuZCBkZWNvZGVzIGl0IGludG8gIsOiy5zGksOiy5zGksOiy5zGkuKAnEhpLCBJIGxpa2UgV2luZG93cyHigJ3DosucxpLDosucxpLDosucxpIiCisKKyAgICAgICAgIyBCdXQgaWYgd2UgcnVuIGl0IHRocm91Z2ggZml4X2VtYmVkZGVkX3dpbmRvd3NfMTI1MiwgaXQncyBmaXhlZDoKKworICAgICAgICBmaXhlZCA9IFVuaWNvZGVEYW1taXQuZGV0d2luZ2xlKGRvYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHUi4piD4piD4piD4oCcSGksIEkgbGlrZSBXaW5kb3dzIeKAneKYg+KYg+KYgyIsIGZpeGVkLmRlY29kZSgidXRmOCIpKQorCisgICAgZGVmIHRlc3RfZGV0d2luZ2xlX2lnbm9yZXNfbXVsdGlieXRlX2NoYXJhY3RlcnMoc2VsZik6CisgICAgICAgICMgRWFjaCBvZiB0aGVzZSBjaGFyYWN0ZXJzIGhhcyBhIFVURi04IHJlcHJlc2VudGF0aW9uIGVuZGluZworICAgICAgICAjIGluIFx4OTMuIFx4OTMgaXMgYSBzbWFydCBxdW90ZSBpZiBpbnRlcnByZXRlZCBhcworICAgICAgICAjIFdpbmRvd3MtMTI1Mi4gQnV0IG91ciBjb2RlIGtub3dzIHRvIHNraXAgb3ZlciBtdWx0aWJ5dGUKKyAgICAgICAgIyBVVEYtOCBjaGFyYWN0ZXJzLCBzbyB0aGV5J2xsIHN1cnZpdmUgdGhlIHByb2Nlc3MgdW5zY2F0aGVkLgorICAgICAgICBmb3IgdHJpY2t5X3VuaWNvZGVfY2hhciBpbiAoCisgICAgICAgICAgICB1IlxOe0xBVElOIFNNQUxMIExJR0FUVVJFIE9FfSIsICMgMi1ieXRlIGNoYXIgJ1x4YzVceDkzJworICAgICAgICAgICAgdSJcTntMQVRJTiBTVUJTQ1JJUFQgU01BTEwgTEVUVEVSIFh9IiwgIyAzLWJ5dGUgY2hhciAnXHhlMlx4ODJceDkzJworICAgICAgICAgICAgdSJceGYwXHg5MFx4OTBceDkzIiwgIyBUaGlzIGlzIGEgQ0pLIGNoYXJhY3Rlciwgbm90IHN1cmUgd2hpY2ggb25lLgorICAgICAgICAgICAgKToKKyAgICAgICAgICAgIGlucHV0ID0gdHJpY2t5X3VuaWNvZGVfY2hhci5lbmNvZGUoInV0ZjgiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlucHV0LmVuZHN3aXRoKGInXHg5MycpKQorICAgICAgICAgICAgb3V0cHV0ID0gVW5pY29kZURhbW1pdC5kZXR3aW5nbGUoaW5wdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgaW5wdXQpCisKK2NsYXNzIFRlc3ROYW1lZHNwYWNlZEF0dHJpYnV0ZShTb3VwVGVzdCk6CisKKyAgICBkZWYgdGVzdF9uYW1lX21heV9iZV9ub25lKHNlbGYpOgorICAgICAgICBhID0gTmFtZXNwYWNlZEF0dHJpYnV0ZSgieG1sbnMiLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsICJ4bWxucyIpCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfaXNfZXF1aXZhbGVudF90b19jb2xvbl9zZXBhcmF0ZWRfc3RyaW5nKHNlbGYpOgorICAgICAgICBhID0gTmFtZXNwYWNlZEF0dHJpYnV0ZSgiYSIsICJiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYTpiIiwgYSkKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXNfYXJlX2VxdWl2YWxlbnRfaWZfcHJlZml4X2FuZF9uYW1lX2lkZW50aWNhbChzZWxmKToKKyAgICAgICAgYSA9IE5hbWVzcGFjZWRBdHRyaWJ1dGUoImEiLCAiYiIsICJjIikKKyAgICAgICAgYiA9IE5hbWVzcGFjZWRBdHRyaWJ1dGUoImEiLCAiYiIsICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorCisgICAgICAgICMgVGhlIGFjdHVhbCBuYW1lc3BhY2UgaXMgbm90IGNvbnNpZGVyZWQuCisgICAgICAgIGMgPSBOYW1lc3BhY2VkQXR0cmlidXRlKCJhIiwgImIiLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGMpCisKKyAgICAgICAgIyBCdXQgbmFtZSBhbmQgcHJlZml4IGFyZSBpbXBvcnRhbnQuCisgICAgICAgIGQgPSBOYW1lc3BhY2VkQXR0cmlidXRlKCJhIiwgInoiLCAiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYSwgZCkKKworICAgICAgICBlID0gTmFtZXNwYWNlZEF0dHJpYnV0ZSgieiIsICJiIiwgImMiKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGEsIGUpCisKKworY2xhc3MgVGVzdEF0dHJpYnV0ZVZhbHVlV2l0aENoYXJzZXRTdWJzdGl0dXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY29udGVudF9tZXRhX2F0dHJpYnV0ZV92YWx1ZShzZWxmKToKKyAgICAgICAgdmFsdWUgPSBDaGFyc2V0TWV0YUF0dHJpYnV0ZVZhbHVlKCJldWMtanAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJldWMtanAiLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiZXVjLWpwIiwgdmFsdWUub3JpZ2luYWxfdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInV0ZjgiLCB2YWx1ZS5lbmNvZGUoInV0ZjgiKSkKKworCisgICAgZGVmIHRlc3RfY29udGVudF9tZXRhX2F0dHJpYnV0ZV92YWx1ZShzZWxmKToKKyAgICAgICAgdmFsdWUgPSBDb250ZW50TWV0YUF0dHJpYnV0ZVZhbHVlKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9ZXVjLWpwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGV4dC9odG1sOyBjaGFyc2V0PWV1Yy1qcCIsIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9ZXVjLWpwIiwgdmFsdWUub3JpZ2luYWxfdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInRleHQvaHRtbDsgY2hhcnNldD11dGY4IiwgdmFsdWUuZW5jb2RlKCJ1dGY4IikpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X3RyZWUucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X3RyZWUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg1MTVjMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfdHJlZS5weQpAQCAtMCwwICsxLDE4MjkgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisiIiJUZXN0cyBmb3IgQmVhdXRpZnVsIFNvdXAncyB0cmVlIHRyYXZlcnNhbCBtZXRob2RzLgorCitUaGUgdHJlZSB0cmF2ZXJzYWwgbWV0aG9kcyBhcmUgdGhlIG1haW4gYWR2YW50YWdlIG9mIHVzaW5nIEJlYXV0aWZ1bAorU291cCBvdmVyIGp1c3QgdXNpbmcgYSBwYXJzZXIuCisKK0RpZmZlcmVudCBwYXJzZXJzIHdpbGwgYnVpbGQgZGlmZmVyZW50IEJlYXV0aWZ1bCBTb3VwIHRyZWVzIGdpdmVuIHRoZQorc2FtZSBtYXJrdXAsIGJ1dCBhbGwgQmVhdXRpZnVsIFNvdXAgdHJlZXMgY2FuIGJlIHRyYXZlcnNlZCB3aXRoIHRoZQorbWV0aG9kcyB0ZXN0ZWQgaGVyZS4KKyIiIgorCitpbXBvcnQgY29weQoraW1wb3J0IHBpY2tsZQoraW1wb3J0IHJlCitpbXBvcnQgd2FybmluZ3MKK2Zyb20gYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwCitmcm9tIGJzNC5idWlsZGVyIGltcG9ydCAoCisgICAgYnVpbGRlcl9yZWdpc3RyeSwKKyAgICBIVE1MUGFyc2VyVHJlZUJ1aWxkZXIsCispCitmcm9tIGJzNC5lbGVtZW50IGltcG9ydCAoCisgICAgQ0RhdGEsCisgICAgQ29tbWVudCwKKyAgICBEb2N0eXBlLAorICAgIE5hdmlnYWJsZVN0cmluZywKKyAgICBTb3VwU3RyYWluZXIsCisgICAgVGFnLAorKQorZnJvbSBiczQudGVzdGluZyBpbXBvcnQgKAorICAgIFNvdXBUZXN0LAorICAgIHNraXBJZiwKKykKKworWE1MX0JVSUxERVJfUFJFU0VOVCA9IChidWlsZGVyX3JlZ2lzdHJ5Lmxvb2t1cCgieG1sIikgaXMgbm90IE5vbmUpCitMWE1MX1BSRVNFTlQgPSAoYnVpbGRlcl9yZWdpc3RyeS5sb29rdXAoImx4bWwiKSBpcyBub3QgTm9uZSkKKworY2xhc3MgVHJlZVRlc3QoU291cFRlc3QpOgorCisgICAgZGVmIGFzc2VydFNlbGVjdHMoc2VsZiwgdGFncywgc2hvdWxkX21hdGNoKToKKyAgICAgICAgIiIiTWFrZSBzdXJlIHRoYXQgdGhlIGdpdmVuIHRhZ3MgaGF2ZSB0aGUgY29ycmVjdCB0ZXh0LgorCisgICAgICAgIFRoaXMgaXMgdXNlZCBpbiB0ZXN0cyB0aGF0IGRlZmluZSBhIGJ1bmNoIG9mIHRhZ3MsIGVhY2gKKyAgICAgICAgY29udGFpbmluZyBhIHNpbmdsZSBzdHJpbmcsIGFuZCB0aGVuIHNlbGVjdCBjZXJ0YWluIHN0cmluZ3MgYnkKKyAgICAgICAgc29tZSBtZWNoYW5pc20uCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt0YWcuc3RyaW5nIGZvciB0YWcgaW4gdGFnc10sIHNob3VsZF9tYXRjaCkKKworICAgIGRlZiBhc3NlcnRTZWxlY3RzSURzKHNlbGYsIHRhZ3MsIHNob3VsZF9tYXRjaCk6CisgICAgICAgICIiIk1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiB0YWdzIGhhdmUgdGhlIGNvcnJlY3QgSURzLgorCisgICAgICAgIFRoaXMgaXMgdXNlZCBpbiB0ZXN0cyB0aGF0IGRlZmluZSBhIGJ1bmNoIG9mIHRhZ3MsIGVhY2gKKyAgICAgICAgY29udGFpbmluZyBhIHNpbmdsZSBzdHJpbmcsIGFuZCB0aGVuIHNlbGVjdCBjZXJ0YWluIHN0cmluZ3MgYnkKKyAgICAgICAgc29tZSBtZWNoYW5pc20uCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt0YWdbJ2lkJ10gZm9yIHRhZyBpbiB0YWdzXSwgc2hvdWxkX21hdGNoKQorCisKK2NsYXNzIFRlc3RGaW5kKFRyZWVUZXN0KToKKyAgICAiIiJCYXNpYyB0ZXN0cyBvZiB0aGUgZmluZCgpIG1ldGhvZC4KKworICAgIGZpbmQoKSBqdXN0IGNhbGxzIGZpbmRfYWxsKCkgd2l0aCBsaW1pdD0xLCBzbyBpdCdzIG5vdCB0ZXN0ZWQgYWxsCisgICAgdGhhdCB0aG91cm91Z2hseSBoZXJlLgorICAgICIiIgorCisgICAgZGVmIHRlc3RfZmluZF90YWcoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjE8L2E+PGI+MjwvYj48YT4zPC9hPjxiPjQ8L2I+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmZpbmQoImIiKS5zdHJpbmcsICIyIikKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfdGV4dF9maW5kKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHUnPGgxPlLDpGtzbcO2cmfDpXM8L2gxPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5maW5kKHRleHQ9dSdSw6Rrc23DtnJnw6VzJyksIHUnUsOka3Ntw7ZyZ8OlcycpCisKKyAgICBkZWYgdGVzdF9maW5kX2V2ZXJ5dGhpbmcoc2VsZik6CisgICAgICAgICIiIlRlc3QgYW4gb3B0aW1pemF0aW9uIHRoYXQgZmluZHMgYWxsIHRhZ3MuIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPmZvbzwvYT48Yj5iYXI8L2I+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oc291cC5maW5kX2FsbCgpKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfZXZlcnl0aGluZ193aXRoX25hbWUoc2VsZik6CisgICAgICAgICIiIlRlc3QgYW4gb3B0aW1pemF0aW9uIHRoYXQgZmluZHMgYWxsIHRhZ3Mgd2l0aCBhIGdpdmVuIG5hbWUuIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPmZvbzwvYT48Yj5iYXI8L2I+PGE+YmF6PC9hPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKHNvdXAuZmluZF9hbGwoJ2EnKSkpCisKK2NsYXNzIFRlc3RGaW5kQWxsKFRyZWVUZXN0KToKKyAgICAiIiJCYXNpYyB0ZXN0cyBvZiB0aGUgZmluZF9hbGwoKSBtZXRob2QuIiIiCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF90ZXh0X25vZGVzKHNlbGYpOgorICAgICAgICAiIiJZb3UgY2FuIHNlYXJjaCB0aGUgdHJlZSBmb3IgdGV4dCBub2Rlcy4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGh0bWw+Rm9vPGI+YmFyPC9iPlx4YmI8L2h0bWw+IikKKyAgICAgICAgIyBFeGFjdCBtYXRjaC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmZpbmRfYWxsKHRleHQ9ImJhciIpLCBbdSJiYXIiXSkKKyAgICAgICAgIyBNYXRjaCBhbnkgb2YgYSBudW1iZXIgb2Ygc3RyaW5ncy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZmluZF9hbGwodGV4dD1bIkZvbyIsICJiYXIiXSksIFt1IkZvbyIsIHUiYmFyIl0pCisgICAgICAgICMgTWF0Y2ggYSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5maW5kX2FsbCh0ZXh0PXJlLmNvbXBpbGUoJy4qJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFt1IkZvbyIsIHUiYmFyIiwgdSdceGJiJ10pCisgICAgICAgICMgTWF0Y2ggYW55dGhpbmcuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5maW5kX2FsbCh0ZXh0PVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFt1IkZvbyIsIHUiYmFyIiwgdSdceGJiJ10pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9saW1pdChzZWxmKToKKyAgICAgICAgIiIiWW91IGNhbiBsaW1pdCB0aGUgbnVtYmVyIG9mIGl0ZW1zIHJldHVybmVkIGJ5IGZpbmRfYWxsLiIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT4xPC9hPjxhPjI8L2E+PGE+MzwvYT48YT40PC9hPjxhPjU8L2E+IikKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNvdXAuZmluZF9hbGwoJ2EnLCBsaW1pdD0zKSwgWyIxIiwgIjIiLCAiMyJdKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc291cC5maW5kX2FsbCgnYScsIGxpbWl0PTEpLCBbIjEiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgc291cC5maW5kX2FsbCgnYScsIGxpbWl0PTEwKSwgWyIxIiwgIjIiLCAiMyIsICI0IiwgIjUiXSkKKworICAgICAgICAjIEEgbGltaXQgb2YgMCBtZWFucyBubyBsaW1pdC4KKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgc291cC5maW5kX2FsbCgnYScsIGxpbWl0PTApLCBbIjEiLCAiMiIsICIzIiwgIjQiLCAiNSJdKQorCisgICAgZGVmIHRlc3RfY2FsbGluZ19hX3RhZ19pc19jYWxsaW5nX2ZpbmRhbGwoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjE8L2E+PGI+MjxhIGlkPSdmb28nPjM8L2E+PC9iPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzb3VwKCdhJywgbGltaXQ9MSksIFsiMSJdKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc291cC5iKGlkPSJmb28iKSwgWyIzIl0pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF93aXRoX3NlbGZfcmVmZXJlbnRpYWxfZGF0YV9zdHJ1Y3R1cmVfZG9lc19ub3RfY2F1c2VfaW5maW5pdGVfcmVjdXJzaW9uKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT48L2E+IikKKyAgICAgICAgIyBDcmVhdGUgYSBzZWxmLXJlZmVyZW50aWFsIGxpc3QuCisgICAgICAgIGwgPSBbXQorICAgICAgICBsLmFwcGVuZChsKQorCisgICAgICAgICMgV2l0aG91dCBzcGVjaWFsIGNvZGUgaW4gX25vcm1hbGl6ZV9zZWFyY2hfdmFsdWUsIHRoaXMgd291bGQgY2F1c2UgaW5maW5pdGUKKyAgICAgICAgIyByZWN1cnNpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHNvdXAuZmluZF9hbGwobCkpCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9yZXN1bHRzZXQoc2VsZik6CisgICAgICAgICIiIkFsbCBmaW5kX2FsbCBjYWxscyByZXR1cm4gYSBSZXN1bHRTZXQiIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+PC9hPiIpCisgICAgICAgIHJlc3VsdCA9IHNvdXAuZmluZF9hbGwoImEiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihyZXN1bHQsICJzb3VyY2UiKSkKKworICAgICAgICByZXN1bHQgPSBzb3VwLmZpbmRfYWxsKFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHJlc3VsdCwgInNvdXJjZSIpKQorCisgICAgICAgIHJlc3VsdCA9IHNvdXAuZmluZF9hbGwodGV4dD0iZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIocmVzdWx0LCAic291cmNlIikpCisKKworY2xhc3MgVGVzdEZpbmRBbGxCYXNpY05hbWVzcGFjZXMoVHJlZVRlc3QpOgorCisgICAgZGVmIHRlc3RfZmluZF9ieV9uYW1lc3BhY2VkX25hbWUoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoJzxtYXRobWw6bXNxcnQ+NDwvbWF0aG1sOm1zcXJ0PjxhIHN2ZzpmaWxsPSJyZWQiPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjQiLCBzb3VwLmZpbmQoIm1hdGhtbDptc3FydCIpLnN0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYSIsIHNvdXAuZmluZChhdHRycz0geyAic3ZnOmZpbGwiIDogInJlZCIgfSkubmFtZSkKKworCitjbGFzcyBUZXN0RmluZEFsbEJ5TmFtZShUcmVlVGVzdCk6CisgICAgIiIiVGVzdCB3YXlzIG9mIGZpbmRpbmcgdGFncyBieSB0YWcgbmFtZS4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVHJlZVRlc3QsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi50cmVlID0gIHNlbGYuc291cCgiIiI8YT5GaXJzdCB0YWcuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPlNlY29uZCB0YWcuPC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjPlRoaXJkIDxhPk5lc3RlZCB0YWcuPC9hPiB0YWcuPC9jPiIiIikKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX2J5X3RhZ19uYW1lKHNlbGYpOgorICAgICAgICAjIEZpbmQgYWxsIHRoZSA8YT4gdGFncy4KKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgc2VsZi50cmVlLmZpbmRfYWxsKCdhJyksIFsnRmlyc3QgdGFnLicsICdOZXN0ZWQgdGFnLiddKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfYnlfbmFtZV9hbmRfdGV4dChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgc2VsZi50cmVlLmZpbmRfYWxsKCdhJywgdGV4dD0nRmlyc3QgdGFnLicpLCBbJ0ZpcnN0IHRhZy4nXSkKKworICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICBzZWxmLnRyZWUuZmluZF9hbGwoJ2EnLCB0ZXh0PVRydWUpLCBbJ0ZpcnN0IHRhZy4nLCAnTmVzdGVkIHRhZy4nXSkKKworICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICBzZWxmLnRyZWUuZmluZF9hbGwoJ2EnLCB0ZXh0PXJlLmNvbXBpbGUoInRhZyIpKSwKKyAgICAgICAgICAgIFsnRmlyc3QgdGFnLicsICdOZXN0ZWQgdGFnLiddKQorCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9vbl9ub25fcm9vdF9lbGVtZW50KHNlbGYpOgorICAgICAgICAjIFlvdSBjYW4gY2FsbCBmaW5kX2FsbCBvbiBhbnkgbm9kZSwgbm90IGp1c3QgdGhlIHJvb3QuCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzZWxmLnRyZWUuYy5maW5kX2FsbCgnYScpLCBbJ05lc3RlZCB0YWcuJ10pCisKKyAgICBkZWYgdGVzdF9jYWxsaW5nX2VsZW1lbnRfaW52b2tlc19maW5kX2FsbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNlbGYudHJlZSgnYScpLCBbJ0ZpcnN0IHRhZy4nLCAnTmVzdGVkIHRhZy4nXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX2J5X3RhZ19zdHJhaW5lcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgc2VsZi50cmVlLmZpbmRfYWxsKFNvdXBTdHJhaW5lcignYScpKSwKKyAgICAgICAgICAgIFsnRmlyc3QgdGFnLicsICdOZXN0ZWQgdGFnLiddKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfYnlfdGFnX25hbWVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICBzZWxmLnRyZWUuZmluZF9hbGwoWydhJywgJ2InXSksCisgICAgICAgICAgICBbJ0ZpcnN0IHRhZy4nLCAnU2Vjb25kIHRhZy4nLCAnTmVzdGVkIHRhZy4nXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX2J5X3RhZ19kaWN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICBzZWxmLnRyZWUuZmluZF9hbGwoeydhJyA6IFRydWUsICdiJyA6IFRydWV9KSwKKyAgICAgICAgICAgIFsnRmlyc3QgdGFnLicsICdTZWNvbmQgdGFnLicsICdOZXN0ZWQgdGFnLiddKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfYnlfdGFnX3JlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICBzZWxmLnRyZWUuZmluZF9hbGwocmUuY29tcGlsZSgnXlthYl0kJykpLAorICAgICAgICAgICAgWydGaXJzdCB0YWcuJywgJ1NlY29uZCB0YWcuJywgJ05lc3RlZCB0YWcuJ10pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF93aXRoX3RhZ3NfbWF0Y2hpbmdfbWV0aG9kKHNlbGYpOgorICAgICAgICAjIFlvdSBjYW4gZGVmaW5lIGFuIG9yYWNsZSBtZXRob2QgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIKKyAgICAgICAgIyBhIHRhZyBtYXRjaGVzIHRoZSBzZWFyY2guCisgICAgICAgIGRlZiBpZF9tYXRjaGVzX25hbWUodGFnKToKKyAgICAgICAgICAgIHJldHVybiB0YWcubmFtZSA9PSB0YWcuZ2V0KCdpZCcpCisKKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiIiI8YSBpZD0iYSI+TWF0Y2ggMS48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9IjEiPkRvZXMgbm90IG1hdGNoLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YiBpZD0iYiI+TWF0Y2ggMi48L2E+IiIiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHRyZWUuZmluZF9hbGwoaWRfbWF0Y2hlc19uYW1lKSwgWyJNYXRjaCAxLiIsICJNYXRjaCAyLiJdKQorCisKK2NsYXNzIFRlc3RGaW5kQWxsQnlBdHRyaWJ1dGUoVHJlZVRlc3QpOgorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfYnlfYXR0cmlidXRlX25hbWUoc2VsZik6CisgICAgICAgICMgWW91IGNhbiBwYXNzIGluIGtleXdvcmQgYXJndW1lbnRzIHRvIGZpbmRfYWxsIHRvIHNlYXJjaCBieQorICAgICAgICAjIGF0dHJpYnV0ZS4KKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iZmlyc3QiPk1hdGNoaW5nIGEuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSJzZWNvbmQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICBOb24tbWF0Y2hpbmcgPGIgaWQ9ImZpcnN0Ij5NYXRjaGluZyBiLjwvYj5hLgorICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4iIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKGlkPSdmaXJzdCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJNYXRjaGluZyBhLiIsICJNYXRjaGluZyBiLiJdKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfYnlfdXRmOF9hdHRyaWJ1dGVfdmFsdWUoc2VsZik6CisgICAgICAgIHBlYWNlID0gdSLXndeV15zXqSIuZW5jb2RlKCJ1dGY4IikKKyAgICAgICAgZGF0YSA9IHUnPGEgdGl0bGU9Ited15XXnNepIj48L2E+Jy5lbmNvZGUoInV0ZjgiKQorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3NvdXAuYV0sIHNvdXAuZmluZF9hbGwodGl0bGU9cGVhY2UpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtzb3VwLmFdLCBzb3VwLmZpbmRfYWxsKHRpdGxlPXBlYWNlLmRlY29kZSgidXRmOCIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbc291cC5hXSwgc291cC5maW5kX2FsbCh0aXRsZT1bcGVhY2UsICJzb21ldGhpbmcgZWxzZSJdKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX2J5X2F0dHJpYnV0ZV9kaWN0KHNlbGYpOgorICAgICAgICAjIFlvdSBjYW4gcGFzcyBpbiBhIGRpY3Rpb25hcnkgYXMgdGhlIGFyZ3VtZW50ICdhdHRycycuIFRoaXMKKyAgICAgICAgIyBsZXRzIHlvdSBzZWFyY2ggZm9yIGF0dHJpYnV0ZXMgbGlrZSAnbmFtZScgKGEgZml4ZWQgYXJndW1lbnQKKyAgICAgICAgIyB0byBmaW5kX2FsbCkgYW5kICdjbGFzcycgKGEgcmVzZXJ2ZWQgd29yZCBpbiBQeXRob24uKQorICAgICAgICB0cmVlID0gc2VsZi5zb3VwKCIiIgorICAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5hbWU9Im5hbWUxIiBjbGFzcz0iY2xhc3MxIj5OYW1lIG1hdGNoLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBuYW1lPSJuYW1lMiIgY2xhc3M9ImNsYXNzMiI+Q2xhc3MgbWF0Y2guPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5hbWU9Im5hbWUzIiBjbGFzcz0iY2xhc3MzIj5Ob24tbWF0Y2guPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lMT5BIHRhZyBjYWxsZWQgJ25hbWUxJy48L25hbWUxPgorICAgICAgICAgICAgICAgICAgICAgICAgICIiIikKKworICAgICAgICAjIFRoaXMgZG9lc24ndCBkbyB3aGF0IHlvdSB3YW50LgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbChuYW1lPSduYW1lMScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJBIHRhZyBjYWxsZWQgJ25hbWUxJy4iXSkKKyAgICAgICAgIyBUaGlzIGRvZXMgd2hhdCB5b3Ugd2FudC4KKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoYXR0cnM9eyduYW1lJyA6ICduYW1lMSd9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiTmFtZSBtYXRjaC4iXSkKKworICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbChhdHRycz17J2NsYXNzJyA6ICdjbGFzczInfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbIkNsYXNzIG1hdGNoLiJdKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfYnlfY2xhc3Moc2VsZik6CisgICAgICAgIHRyZWUgPSBzZWxmLnNvdXAoIiIiCisgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IjEiPkNsYXNzIDEuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSIyIj5DbGFzcyAyLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz0iMSI+Q2xhc3MgMS48L2I+CisgICAgICAgICAgICAgICAgICAgICAgICAgPGMgY2xhc3M9IjMgNCI+Q2xhc3MgMyBhbmQgNC48L2M+CisgICAgICAgICAgICAgICAgICAgICAgICAgIiIiKQorCisgICAgICAgICMgUGFzc2luZyBpbiB0aGUgY2xhc3NfIGtleXdvcmQgYXJndW1lbnQgd2lsbCBzZWFyY2ggYWdhaW5zdAorICAgICAgICAjIHRoZSAnY2xhc3MnIGF0dHJpYnV0ZS4KKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoJ2EnLCBjbGFzc189JzEnKSwgWydDbGFzcyAxLiddKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbCgnYycsIGNsYXNzXz0nMycpLCBbJ0NsYXNzIDMgYW5kIDQuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKCdjJywgY2xhc3NfPSc0JyksIFsnQ2xhc3MgMyBhbmQgNC4nXSkKKworICAgICAgICAjIFBhc3NpbmcgaW4gYSBzdHJpbmcgdG8gJ2F0dHJzJyB3aWxsIGFsc28gc2VhcmNoIHRoZSBDU1MgY2xhc3MuCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKCdhJywgJzEnKSwgWydDbGFzcyAxLiddKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbChhdHRycz0nMScpLCBbJ0NsYXNzIDEuJywgJ0NsYXNzIDEuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKCdjJywgJzMnKSwgWydDbGFzcyAzIGFuZCA0LiddKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbCgnYycsICc0JyksIFsnQ2xhc3MgMyBhbmQgNC4nXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYnlfY2xhc3Nfd2hlbl9tdWx0aXBsZV9jbGFzc2VzX3ByZXNlbnQoc2VsZik6CisgICAgICAgIHRyZWUgPSBzZWxmLnNvdXAoIjxnYXIgY2xhc3M9J2ZvbyBiYXInPkZvdW5kIGl0PC9nYXI+IikKKworICAgICAgICBmID0gdHJlZS5maW5kX2FsbCgiZ2FyIiwgY2xhc3NfPXJlLmNvbXBpbGUoIm8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKGYsIFsiRm91bmQgaXQiXSkKKworICAgICAgICBmID0gdHJlZS5maW5kX2FsbCgiZ2FyIiwgY2xhc3NfPXJlLmNvbXBpbGUoImEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKGYsIFsiRm91bmQgaXQiXSkKKworICAgICAgICAjIFNpbmNlIHRoZSBjbGFzcyBpcyBub3QgdGhlIHN0cmluZyAiZm9vIGJhciIsIGJ1dCB0aGUgdHdvCisgICAgICAgICMgc3RyaW5ncyAiZm9vIiBhbmQgImJhciIsIHRoaXMgd2lsbCBub3QgZmluZCBhbnl0aGluZy4KKyAgICAgICAgZiA9IHRyZWUuZmluZF9hbGwoImdhciIsIGNsYXNzXz1yZS5jb21waWxlKCJvIGIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKGYsIFtdKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfd2l0aF9ub25fZGljdGlvbmFyeV9mb3JfYXR0cnNfZmluZHNfYnlfY2xhc3Moc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhIGNsYXNzPSdiYXInPkZvdW5kIGl0PC9hPiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNvdXAuZmluZF9hbGwoImEiLCByZS5jb21waWxlKCJiYSIpKSwgWyJGb3VuZCBpdCJdKQorCisgICAgICAgIGRlZiBiaWdfYXR0cmlidXRlX3ZhbHVlKHZhbHVlKToKKyAgICAgICAgICAgIHJldHVybiBsZW4odmFsdWUpID4gMworCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzb3VwLmZpbmRfYWxsKCJhIiwgYmlnX2F0dHJpYnV0ZV92YWx1ZSksIFtdKQorCisgICAgICAgIGRlZiBzbWFsbF9hdHRyaWJ1dGVfdmFsdWUodmFsdWUpOgorICAgICAgICAgICAgcmV0dXJuIGxlbih2YWx1ZSkgPD0gMworCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHNvdXAuZmluZF9hbGwoImEiLCBzbWFsbF9hdHRyaWJ1dGVfdmFsdWUpLCBbIkZvdW5kIGl0Il0pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF93aXRoX3N0cmluZ19mb3JfYXR0cnNfZmluZHNfbXVsdGlwbGVfY2xhc3NlcyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgnPGEgY2xhc3M9ImZvbyBiYXIiPjwvYT48YSBjbGFzcz0iZm9vIj48L2E+JykKKyAgICAgICAgYSwgYTIgPSBzb3VwLmZpbmRfYWxsKCJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYSwgYTJdLCBzb3VwLmZpbmRfYWxsKCJhIiwgImZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFthXSwgc291cC5maW5kX2FsbCgiYSIsICJiYXIiKSkKKworICAgICAgICAjIElmIHlvdSBzcGVjaWZ5IHRoZSBjbGFzcyBhcyBhIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEKKyAgICAgICAgIyBzcGFjZSwgb25seSB0aGF0IHNwZWNpZmljIHZhbHVlIHdpbGwgYmUgZm91bmQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2FdLCBzb3VwLmZpbmRfYWxsKCJhIiwgY2xhc3NfPSJmb28gYmFyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2FdLCBzb3VwLmZpbmRfYWxsKCJhIiwgImZvbyBiYXIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgc291cC5maW5kX2FsbCgiYSIsICJiYXIgZm9vIikpCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9ieV9hdHRyaWJ1dGVfc291cHN0cmFpbmVyKHNlbGYpOgorICAgICAgICB0cmVlID0gc2VsZi5zb3VwKCIiIgorICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSJmaXJzdCI+TWF0Y2guPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSJzZWNvbmQiPk5vbi1tYXRjaC48L2E+IiIiKQorCisgICAgICAgIHN0cmFpbmVyID0gU291cFN0cmFpbmVyKGF0dHJzPXsnaWQnIDogJ2ZpcnN0J30pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKHN0cmFpbmVyKSwgWydNYXRjaC4nXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3dpdGhfbWlzc2luZ19hdHJpYnV0ZShzZWxmKToKKyAgICAgICAgIyBZb3UgY2FuIHBhc3MgaW4gTm9uZSBhcyB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIHRvIGZpbmRfYWxsLgorICAgICAgICAjIFRoaXMgd2lsbCBtYXRjaCB0YWdzIHRoYXQgZG8gbm90IGhhdmUgdGhhdCBhdHRyaWJ1dGUgc2V0LgorICAgICAgICB0cmVlID0gc2VsZi5zb3VwKCIiIjxhIGlkPSIxIj5JRCBwcmVzZW50LjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YT5ObyBJRCBwcmVzZW50LjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iIj5JRCBpcyBlbXB0eS48L2E+IiIiKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbCgnYScsIGlkPU5vbmUpLCBbIk5vIElEIHByZXNlbnQuIl0pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF93aXRoX2RlZmluZWRfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICAjIFlvdSBjYW4gcGFzcyBpbiBOb25lIGFzIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgdG8gZmluZF9hbGwuCisgICAgICAgICMgVGhpcyB3aWxsIG1hdGNoIHRhZ3MgdGhhdCBoYXZlIHRoYXQgYXR0cmlidXRlIHNldCB0byBhbnkgdmFsdWUuCisgICAgICAgIHRyZWUgPSBzZWxmLnNvdXAoIiIiPGEgaWQ9IjEiPklEIHByZXNlbnQuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhPk5vIElEIHByZXNlbnQuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSIiPklEIGlzIGVtcHR5LjwvYT4iIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHRyZWUuZmluZF9hbGwoaWQ9VHJ1ZSksIFsiSUQgcHJlc2VudC4iLCAiSUQgaXMgZW1wdHkuIl0pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF93aXRoX251bWVyaWNfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICAjIElmIHlvdSBzZWFyY2ggZm9yIGEgbnVtYmVyLCBpdCdzIHRyZWF0ZWQgYXMgYSBzdHJpbmcuCisgICAgICAgIHRyZWUgPSBzZWxmLnNvdXAoIiIiPGEgaWQ9MT5VbnF1b3RlZCBhdHRyaWJ1dGUuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSIxIj5RdW90ZWQgYXR0cmlidXRlLjwvYT4iIiIpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbIlVucXVvdGVkIGF0dHJpYnV0ZS4iLCAiUXVvdGVkIGF0dHJpYnV0ZS4iXQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbChpZD0xKSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKGlkPSIxIiksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfd2l0aF9saXN0X2F0dHJpYnV0ZV92YWx1ZXMoc2VsZik6CisgICAgICAgICMgWW91IGNhbiBwYXNzIGEgbGlzdCBvZiBhdHRyaWJ1dGUgdmFsdWVzIGluc3RlYWQgb2YganVzdCBvbmUsCisgICAgICAgICMgYW5kIHlvdSdsbCBnZXQgdGFncyB0aGF0IG1hdGNoIGFueSBvZiB0aGUgdmFsdWVzLgorICAgICAgICB0cmVlID0gc2VsZi5zb3VwKCIiIjxhIGlkPSIxIj4xPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSIyIj4yPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSIzIj4zPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhPk5vIElELjwvYT4iIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKGlkPVsiMSIsICIzIiwgIjQiXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbIjEiLCAiMyJdKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfd2l0aF9yZWd1bGFyX2V4cHJlc3Npb25fYXR0cmlidXRlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIFlvdSBjYW4gcGFzcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhcyBhbiBhdHRyaWJ1dGUgdmFsdWUsIGFuZAorICAgICAgICAjIHlvdSdsbCBnZXQgdGFncyB3aG9zZSB2YWx1ZXMgZm9yIHRoYXQgYXR0cmlidXRlIG1hdGNoIHRoZQorICAgICAgICAjIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiIiI8YSBpZD0iYSI+T25lIGEuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSJhYSI+VHdvIGFzLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iYWIiPk1peGVkIGFzIGFuZCBicy48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9ImIiPk9uZSBiLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YT5ObyBJRC48L2E+IiIiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKGlkPXJlLmNvbXBpbGUoIl5hKyQiKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbIk9uZSBhLiIsICJUd28gYXMuIl0pCisKKyAgICBkZWYgdGVzdF9maW5kX2J5X25hbWVfYW5kX2NvbnRhaW5pbmdfc3RyaW5nKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8Yj5mb288L2I+PGI+YmFyPC9iPjxhPmZvbzwvYT4iKQorICAgICAgICBhID0gc291cC5hCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYV0sIHNvdXAuZmluZF9hbGwoImEiLCB0ZXh0PSJmb28iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgc291cC5maW5kX2FsbCgiYSIsIHRleHQ9ImJhciIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBzb3VwLmZpbmRfYWxsKCJhIiwgdGV4dD0iYmFyIikpCisKKyAgICBkZWYgdGVzdF9maW5kX2J5X25hbWVfYW5kX2NvbnRhaW5pbmdfc3RyaW5nX3doZW5fc3RyaW5nX2lzX2J1cmllZChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+Zm9vPC9hPjxhPjxiPjxjPmZvbzwvYz48L2I+PC9hPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5maW5kX2FsbCgiYSIpLCBzb3VwLmZpbmRfYWxsKCJhIiwgdGV4dD0iZm9vIikpCisKKyAgICBkZWYgdGVzdF9maW5kX2J5X2F0dHJpYnV0ZV9hbmRfY29udGFpbmluZ19zdHJpbmcoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoJzxiIGlkPSIxIj5mb288L2I+PGEgaWQ9IjIiPmZvbzwvYT4nKQorICAgICAgICBhID0gc291cC5hCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYV0sIHNvdXAuZmluZF9hbGwoaWQ9MiwgdGV4dD0iZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHNvdXAuZmluZF9hbGwoaWQ9MSwgdGV4dD0iYmFyIikpCisKKworCisKK2NsYXNzIFRlc3RJbmRleChUcmVlVGVzdCk6CisgICAgIiIiVGVzdCBUYWcuaW5kZXgiIiIKKyAgICBkZWYgdGVzdF9pbmRleChzZWxmKToKKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiIiI8ZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhPklkZW50aWNhbDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5Ob3QgaWRlbnRpY2FsPC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhPklkZW50aWNhbDwvYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjPjxkPklkZW50aWNhbCB3aXRoIGNoaWxkPC9kPjwvYz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BbHNvIG5vdCBpZGVudGljYWw8L2I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGM+PGQ+SWRlbnRpY2FsIHdpdGggY2hpbGQ8L2Q+PC9jPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiIiIikKKyAgICAgICAgZGl2ID0gdHJlZS5kaXYKKyAgICAgICAgZm9yIGksIGVsZW1lbnQgaW4gZW51bWVyYXRlKGRpdi5jb250ZW50cyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGksIGRpdi5pbmRleChlbGVtZW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHJlZS5pbmRleCwgMSkKKworCitjbGFzcyBUZXN0UGFyZW50T3BlcmF0aW9ucyhUcmVlVGVzdCk6CisgICAgIiIiVGVzdCBuYXZpZ2F0aW9uIGFuZCBzZWFyY2hpbmcgdGhyb3VnaCBhbiBlbGVtZW50J3MgcGFyZW50cy4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdFBhcmVudE9wZXJhdGlvbnMsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi50cmVlID0gc2VsZi5zb3VwKCcnJzx1bCBpZD0iZW1wdHkiPjwvdWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgaWQ9InRvcCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGlkPSJtaWRkbGUiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgaWQ9ImJvdHRvbSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5TdGFydCBoZXJlPC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+JycnKQorICAgICAgICBzZWxmLnN0YXJ0ID0gc2VsZi50cmVlLmIKKworCisgICAgZGVmIHRlc3RfcGFyZW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhcnQucGFyZW50WydpZCddLCAnYm90dG9tJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXJ0LnBhcmVudC5wYXJlbnRbJ2lkJ10sICdtaWRkbGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhcnQucGFyZW50LnBhcmVudC5wYXJlbnRbJ2lkJ10sICd0b3AnKQorCisgICAgZGVmIHRlc3RfcGFyZW50X29mX3RvcF90YWdfaXNfc291cF9vYmplY3Qoc2VsZik6CisgICAgICAgIHRvcF90YWcgPSBzZWxmLnRyZWUuY29udGVudHNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0b3BfdGFnLnBhcmVudCwgc2VsZi50cmVlKQorCisgICAgZGVmIHRlc3Rfc291cF9vYmplY3RfaGFzX25vX3BhcmVudChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnRyZWUucGFyZW50KQorCisgICAgZGVmIHRlc3RfZmluZF9wYXJlbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHNJRHMoCisgICAgICAgICAgICBzZWxmLnN0YXJ0LmZpbmRfcGFyZW50cygndWwnKSwgWydib3R0b20nLCAnbWlkZGxlJywgJ3RvcCddKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHNJRHMoCisgICAgICAgICAgICBzZWxmLnN0YXJ0LmZpbmRfcGFyZW50cygndWwnLCBpZD0ibWlkZGxlIiksIFsnbWlkZGxlJ10pCisKKyAgICBkZWYgdGVzdF9maW5kX3BhcmVudChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXJ0LmZpbmRfcGFyZW50KCd1bCcpWydpZCddLCAnYm90dG9tJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXJ0LmZpbmRfcGFyZW50KCd1bCcsIGlkPSd0b3AnKVsnaWQnXSwgJ3RvcCcpCisKKyAgICBkZWYgdGVzdF9wYXJlbnRfb2ZfdGV4dF9lbGVtZW50KHNlbGYpOgorICAgICAgICB0ZXh0ID0gc2VsZi50cmVlLmZpbmQodGV4dD0iU3RhcnQgaGVyZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dC5wYXJlbnQubmFtZSwgJ2InKQorCisgICAgZGVmIHRlc3RfdGV4dF9lbGVtZW50X2ZpbmRfcGFyZW50KHNlbGYpOgorICAgICAgICB0ZXh0ID0gc2VsZi50cmVlLmZpbmQodGV4dD0iU3RhcnQgaGVyZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dC5maW5kX3BhcmVudCgndWwnKVsnaWQnXSwgJ2JvdHRvbScpCisKKyAgICBkZWYgdGVzdF9wYXJlbnRfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBwYXJlbnRzID0gW3BhcmVudFsnaWQnXSBmb3IgcGFyZW50IGluIHNlbGYuc3RhcnQucGFyZW50cworICAgICAgICAgICAgICAgICAgIGlmIHBhcmVudCBpcyBub3QgTm9uZSBhbmQgJ2lkJyBpbiBwYXJlbnQuYXR0cnNdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyZW50cywgWydib3R0b20nLCAnbWlkZGxlJywgJ3RvcCddKQorCisKK2NsYXNzIFByb3hpbWl0eVRlc3QoVHJlZVRlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUcmVlVGVzdCwgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLnRyZWUgPSBzZWxmLnNvdXAoCisgICAgICAgICAgICAnPGh0bWwgaWQ9InN0YXJ0Ij48aGVhZD48L2hlYWQ+PGJvZHk+PGIgaWQ9IjEiPk9uZTwvYj48YiBpZD0iMiI+VHdvPC9iPjxiIGlkPSIzIj5UaHJlZTwvYj48L2JvZHk+PC9odG1sPicpCisKKworY2xhc3MgVGVzdE5leHRPcGVyYXRpb25zKFByb3hpbWl0eVRlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0TmV4dE9wZXJhdGlvbnMsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi5zdGFydCA9IHNlbGYudHJlZS5iCisKKyAgICBkZWYgdGVzdF9uZXh0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhcnQubmV4dF9lbGVtZW50LCAiT25lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXJ0Lm5leHRfZWxlbWVudC5uZXh0X2VsZW1lbnRbJ2lkJ10sICIyIikKKworICAgIGRlZiB0ZXN0X25leHRfb2ZfbGFzdF9pdGVtX2lzX25vbmUoc2VsZik6CisgICAgICAgIGxhc3QgPSBzZWxmLnRyZWUuZmluZCh0ZXh0PSJUaHJlZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGFzdC5uZXh0X2VsZW1lbnQsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9uZXh0X29mX3Jvb3RfaXNfbm9uZShzZWxmKToKKyAgICAgICAgIyBUaGUgZG9jdW1lbnQgcm9vdCBpcyBvdXRzaWRlIHRoZSBuZXh0L3ByZXZpb3VzIGNoYWluLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJlZS5uZXh0X2VsZW1lbnQsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9uZXh0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc2VsZi5zdGFydC5maW5kX2FsbF9uZXh0KCdiJyksIFsiVHdvIiwgIlRocmVlIl0pCisgICAgICAgIHNlbGYuc3RhcnQuZmluZF9hbGxfbmV4dChpZD0zKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc2VsZi5zdGFydC5maW5kX2FsbF9uZXh0KGlkPTMpLCBbIlRocmVlIl0pCisKKyAgICBkZWYgdGVzdF9maW5kX25leHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGFydC5maW5kX25leHQoJ2InKVsnaWQnXSwgJzInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhcnQuZmluZF9uZXh0KHRleHQ9IlRocmVlIiksICJUaHJlZSIpCisKKyAgICBkZWYgdGVzdF9maW5kX25leHRfZm9yX3RleHRfZWxlbWVudChzZWxmKToKKyAgICAgICAgdGV4dCA9IHNlbGYudHJlZS5maW5kKHRleHQ9Ik9uZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dC5maW5kX25leHQoImIiKS5zdHJpbmcsICJUd28iKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModGV4dC5maW5kX2FsbF9uZXh0KCJiIiksIFsiVHdvIiwgIlRocmVlIl0pCisKKyAgICBkZWYgdGVzdF9uZXh0X2dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgc3RhcnQgPSBzZWxmLnRyZWUuZmluZCh0ZXh0PSJUd28iKQorICAgICAgICBzdWNjZXNzb3JzID0gW25vZGUgZm9yIG5vZGUgaW4gc3RhcnQubmV4dF9lbGVtZW50c10KKyAgICAgICAgIyBUaGVyZSBhcmUgdHdvIHN1Y2Nlc3NvcnM6IHRoZSBmaW5hbCA8Yj4gdGFnIGFuZCBpdHMgdGV4dCBjb250ZW50cy4KKyAgICAgICAgdGFnLCBjb250ZW50cyA9IHN1Y2Nlc3NvcnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWdbJ2lkJ10sICczJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50cywgIlRocmVlIikKKworY2xhc3MgVGVzdFByZXZpb3VzT3BlcmF0aW9ucyhQcm94aW1pdHlUZXN0KToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdFByZXZpb3VzT3BlcmF0aW9ucywgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLmVuZCA9IHNlbGYudHJlZS5maW5kKHRleHQ9IlRocmVlIikKKworICAgIGRlZiB0ZXN0X3ByZXZpb3VzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW5kLnByZXZpb3VzX2VsZW1lbnRbJ2lkJ10sICIzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVuZC5wcmV2aW91c19lbGVtZW50LnByZXZpb3VzX2VsZW1lbnQsICJUd28iKQorCisgICAgZGVmIHRlc3RfcHJldmlvdXNfb2ZfZmlyc3RfaXRlbV9pc19ub25lKHNlbGYpOgorICAgICAgICBmaXJzdCA9IHNlbGYudHJlZS5maW5kKCdodG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXJzdC5wcmV2aW91c19lbGVtZW50LCBOb25lKQorCisgICAgZGVmIHRlc3RfcHJldmlvdXNfb2Zfcm9vdF9pc19ub25lKHNlbGYpOgorICAgICAgICAjIFRoZSBkb2N1bWVudCByb290IGlzIG91dHNpZGUgdGhlIG5leHQvcHJldmlvdXMgY2hhaW4uCisgICAgICAgICMgWFhYIFRoaXMgaXMgYnJva2VuIQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyZWUucHJldmlvdXNfZWxlbWVudCwgTm9uZSkKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfZmluZF9hbGxfcHJldmlvdXMoc2VsZik6CisgICAgICAgICMgVGhlIDxiPiB0YWcgY29udGFpbmluZyB0aGUgIlRocmVlIiBub2RlIGlzIHRoZSBwcmVkZWNlc3NvcgorICAgICAgICAjIG9mIHRoZSAiVGhyZWUiIG5vZGUgaXRzZWxmLCB3aGljaCBpcyB3aHkgIlRocmVlIiBzaG93cyB1cAorICAgICAgICAjIGhlcmUuCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHNlbGYuZW5kLmZpbmRfYWxsX3ByZXZpb3VzKCdiJyksIFsiVGhyZWUiLCAiVHdvIiwgIk9uZSJdKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc2VsZi5lbmQuZmluZF9hbGxfcHJldmlvdXMoaWQ9MSksIFsiT25lIl0pCisKKyAgICBkZWYgdGVzdF9maW5kX3ByZXZpb3VzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW5kLmZpbmRfcHJldmlvdXMoJ2InKVsnaWQnXSwgJzMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW5kLmZpbmRfcHJldmlvdXModGV4dD0iT25lIiksICJPbmUiKQorCisgICAgZGVmIHRlc3RfZmluZF9wcmV2aW91c19mb3JfdGV4dF9lbGVtZW50KHNlbGYpOgorICAgICAgICB0ZXh0ID0gc2VsZi50cmVlLmZpbmQodGV4dD0iVGhyZWUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQuZmluZF9wcmV2aW91cygiYiIpLnN0cmluZywgIlRocmVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgdGV4dC5maW5kX2FsbF9wcmV2aW91cygiYiIpLCBbIlRocmVlIiwgIlR3byIsICJPbmUiXSkKKworICAgIGRlZiB0ZXN0X3ByZXZpb3VzX2dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgc3RhcnQgPSBzZWxmLnRyZWUuZmluZCh0ZXh0PSJPbmUiKQorICAgICAgICBwcmVkZWNlc3NvcnMgPSBbbm9kZSBmb3Igbm9kZSBpbiBzdGFydC5wcmV2aW91c19lbGVtZW50c10KKworICAgICAgICAjIFRoZXJlIGFyZSBmb3VyIHByZWRlY2Vzc29yczogdGhlIDxiPiB0YWcgY29udGFpbmluZyAiT25lIgorICAgICAgICAjIHRoZSA8Ym9keT4gdGFnLCB0aGUgPGhlYWQ+IHRhZywgYW5kIHRoZSA8aHRtbD4gdGFnLgorICAgICAgICBiLCBib2R5LCBoZWFkLCBodG1sID0gcHJlZGVjZXNzb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYlsnaWQnXSwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvZHkubmFtZSwgImJvZHkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhlYWQubmFtZSwgImhlYWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0bWwubmFtZSwgImh0bWwiKQorCisKK2NsYXNzIFNpYmxpbmdUZXN0KFRyZWVUZXN0KToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoU2libGluZ1Rlc3QsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgbWFya3VwID0gJycnPGh0bWw+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSIxIj4KKyAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSIxLjEiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iMiI+CisgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iMi4xIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9IjMiPgorICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9IjMuMSI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSI0Ij48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDwvaHRtbD4nJycKKyAgICAgICAgIyBBbGwgdGhhdCB3aGl0ZXNwYWNlIGxvb2tzIGdvb2QgYnV0IG1ha2VzIHRoZSB0ZXN0cyBtb3JlCisgICAgICAgICMgZGlmZmljdWx0LiBHZXQgcmlkIG9mIGl0LgorICAgICAgICBtYXJrdXAgPSByZS5jb21waWxlKCJcblxzKiIpLnN1YigiIiwgbWFya3VwKQorICAgICAgICBzZWxmLnRyZWUgPSBzZWxmLnNvdXAobWFya3VwKQorCisKK2NsYXNzIFRlc3ROZXh0U2libGluZyhTaWJsaW5nVGVzdCk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3ROZXh0U2libGluZywgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLnN0YXJ0ID0gc2VsZi50cmVlLmZpbmQoaWQ9IjEiKQorCisgICAgZGVmIHRlc3RfbmV4dF9zaWJsaW5nX29mX3Jvb3RfaXNfbm9uZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyZWUubmV4dF9zaWJsaW5nLCBOb25lKQorCisgICAgZGVmIHRlc3RfbmV4dF9zaWJsaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhcnQubmV4dF9zaWJsaW5nWydpZCddLCAnMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGFydC5uZXh0X3NpYmxpbmcubmV4dF9zaWJsaW5nWydpZCddLCAnMycpCisKKyAgICAgICAgIyBOb3RlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbmV4dF9zaWJsaW5nIGFuZCBuZXh0X2VsZW1lbnQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGFydC5uZXh0X2VsZW1lbnRbJ2lkJ10sICcxLjEnKQorCisgICAgZGVmIHRlc3RfbmV4dF9zaWJsaW5nX21heV9ub3RfZXhpc3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50cmVlLmh0bWwubmV4dF9zaWJsaW5nLCBOb25lKQorCisgICAgICAgIG5lc3RlZF9zcGFuID0gc2VsZi50cmVlLmZpbmQoaWQ9IjEuMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmVzdGVkX3NwYW4ubmV4dF9zaWJsaW5nLCBOb25lKQorCisgICAgICAgIGxhc3Rfc3BhbiA9IHNlbGYudHJlZS5maW5kKGlkPSI0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsYXN0X3NwYW4ubmV4dF9zaWJsaW5nLCBOb25lKQorCisgICAgZGVmIHRlc3RfZmluZF9uZXh0X3NpYmxpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGFydC5maW5kX25leHRfc2libGluZygnc3BhbicpWydpZCddLCAnMicpCisKKyAgICBkZWYgdGVzdF9uZXh0X3NpYmxpbmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHNJRHMoc2VsZi5zdGFydC5maW5kX25leHRfc2libGluZ3MoInNwYW4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnMicsICczJywgJzQnXSkKKworICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHNJRHMoc2VsZi5zdGFydC5maW5kX25leHRfc2libGluZ3MoaWQ9JzMnKSwgWyczJ10pCisKKyAgICBkZWYgdGVzdF9uZXh0X3NpYmxpbmdfZm9yX3RleHRfZWxlbWVudChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiRm9vPGI+YmFyPC9iPmJheiIpCisgICAgICAgIHN0YXJ0ID0gc291cC5maW5kKHRleHQ9IkZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhcnQubmV4dF9zaWJsaW5nLm5hbWUsICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydC5uZXh0X3NpYmxpbmcubmV4dF9zaWJsaW5nLCAnYmF6JykKKworICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc3RhcnQuZmluZF9uZXh0X3NpYmxpbmdzKCdiJyksIFsnYmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhcnQuZmluZF9uZXh0X3NpYmxpbmcodGV4dD0iYmF6IiksICJiYXoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0LmZpbmRfbmV4dF9zaWJsaW5nKHRleHQ9Im5vbmVzdWNoIiksIE5vbmUpCisKKworY2xhc3MgVGVzdFByZXZpb3VzU2libGluZyhTaWJsaW5nVGVzdCk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RQcmV2aW91c1NpYmxpbmcsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi5lbmQgPSBzZWxmLnRyZWUuZmluZChpZD0iNCIpCisKKyAgICBkZWYgdGVzdF9wcmV2aW91c19zaWJsaW5nX29mX3Jvb3RfaXNfbm9uZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyZWUucHJldmlvdXNfc2libGluZywgTm9uZSkKKworICAgIGRlZiB0ZXN0X3ByZXZpb3VzX3NpYmxpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbmQucHJldmlvdXNfc2libGluZ1snaWQnXSwgJzMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW5kLnByZXZpb3VzX3NpYmxpbmcucHJldmlvdXNfc2libGluZ1snaWQnXSwgJzInKQorCisgICAgICAgICMgTm90ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHByZXZpb3VzX3NpYmxpbmcgYW5kIHByZXZpb3VzX2VsZW1lbnQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbmQucHJldmlvdXNfZWxlbWVudFsnaWQnXSwgJzMuMScpCisKKyAgICBkZWYgdGVzdF9wcmV2aW91c19zaWJsaW5nX21heV9ub3RfZXhpc3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50cmVlLmh0bWwucHJldmlvdXNfc2libGluZywgTm9uZSkKKworICAgICAgICBuZXN0ZWRfc3BhbiA9IHNlbGYudHJlZS5maW5kKGlkPSIxLjEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5lc3RlZF9zcGFuLnByZXZpb3VzX3NpYmxpbmcsIE5vbmUpCisKKyAgICAgICAgZmlyc3Rfc3BhbiA9IHNlbGYudHJlZS5maW5kKGlkPSIxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXJzdF9zcGFuLnByZXZpb3VzX3NpYmxpbmcsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9maW5kX3ByZXZpb3VzX3NpYmxpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbmQuZmluZF9wcmV2aW91c19zaWJsaW5nKCdzcGFuJylbJ2lkJ10sICczJykKKworICAgIGRlZiB0ZXN0X3ByZXZpb3VzX3NpYmxpbmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHNJRHMoc2VsZi5lbmQuZmluZF9wcmV2aW91c19zaWJsaW5ncygic3BhbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyczJywgJzInLCAnMSddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0c0lEcyhzZWxmLmVuZC5maW5kX3ByZXZpb3VzX3NpYmxpbmdzKGlkPScxJyksIFsnMSddKQorCisgICAgZGVmIHRlc3RfcHJldmlvdXNfc2libGluZ19mb3JfdGV4dF9lbGVtZW50KHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCJGb288Yj5iYXI8L2I+YmF6IikKKyAgICAgICAgc3RhcnQgPSBzb3VwLmZpbmQodGV4dD0iYmF6IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydC5wcmV2aW91c19zaWJsaW5nLm5hbWUsICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydC5wcmV2aW91c19zaWJsaW5nLnByZXZpb3VzX3NpYmxpbmcsICdGb28nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzdGFydC5maW5kX3ByZXZpb3VzX3NpYmxpbmdzKCdiJyksIFsnYmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhcnQuZmluZF9wcmV2aW91c19zaWJsaW5nKHRleHQ9IkZvbyIpLCAiRm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydC5maW5kX3ByZXZpb3VzX3NpYmxpbmcodGV4dD0ibm9uZXN1Y2giKSwgTm9uZSkKKworCitjbGFzcyBUZXN0VGFnQ3JlYXRpb24oU291cFRlc3QpOgorICAgICIiIlRlc3QgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIG5ldyB0YWdzLiIiIgorICAgIGRlZiB0ZXN0X25ld190YWcoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIiIpCisgICAgICAgIG5ld190YWcgPSBzb3VwLm5ld190YWcoImZvbyIsIGJhcj0iYmF6IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobmV3X3RhZywgVGFnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiZm9vIiwgbmV3X3RhZy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoYmFyPSJiYXoiKSwgbmV3X3RhZy5hdHRycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBuZXdfdGFnLnBhcmVudCkKKworICAgIGRlZiB0ZXN0X3RhZ19pbmhlcml0c19zZWxmX2Nsb3NpbmdfcnVsZXNfZnJvbV9idWlsZGVyKHNlbGYpOgorICAgICAgICBpZiBYTUxfQlVJTERFUl9QUkVTRU5UOgorICAgICAgICAgICAgeG1sX3NvdXAgPSBCZWF1dGlmdWxTb3VwKCIiLCAieG1sIikKKyAgICAgICAgICAgIHhtbF9iciA9IHhtbF9zb3VwLm5ld190YWcoImJyIikKKyAgICAgICAgICAgIHhtbF9wID0geG1sX3NvdXAubmV3X3RhZygicCIpCisKKyAgICAgICAgICAgICMgQm90aCB0aGUgPGJyPiBhbmQgPHA+IHRhZyBhcmUgZW1wdHktZWxlbWVudCwganVzdCBiZWNhdXNlCisgICAgICAgICAgICAjIHRoZXkgaGF2ZSBubyBjb250ZW50cy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiI8YnIvPiIsIHhtbF9ici5lbmNvZGUoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiI8cC8+IiwgeG1sX3AuZW5jb2RlKCkpCisKKyAgICAgICAgaHRtbF9zb3VwID0gQmVhdXRpZnVsU291cCgiIiwgImh0bWwiKQorICAgICAgICBodG1sX2JyID0gaHRtbF9zb3VwLm5ld190YWcoImJyIikKKyAgICAgICAgaHRtbF9wID0gaHRtbF9zb3VwLm5ld190YWcoInAiKQorCisgICAgICAgICMgVGhlIEhUTUwgYnVpbGRlciB1c2VycyBIVE1MJ3MgcnVsZXMgYWJvdXQgd2hpY2ggdGFncyBhcmUKKyAgICAgICAgIyBlbXB0eS1lbGVtZW50IHRhZ3MsIGFuZCB0aGUgbmV3IHRhZ3MgcmVmbGVjdCB0aGVzZSBydWxlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIjxici8+IiwgaHRtbF9ici5lbmNvZGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIjxwPjwvcD4iLCBodG1sX3AuZW5jb2RlKCkpCisKKyAgICBkZWYgdGVzdF9uZXdfc3RyaW5nX2NyZWF0ZXNfbmF2aWdhYmxlc3RyaW5nKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCIiKQorICAgICAgICBzID0gc291cC5uZXdfc3RyaW5nKCJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJmb28iLCBzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzLCBOYXZpZ2FibGVTdHJpbmcpKQorCisgICAgZGVmIHRlc3RfbmV3X3N0cmluZ19jYW5fY3JlYXRlX25hdmlnYWJsZXN0cmluZ19zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiIikKKyAgICAgICAgcyA9IHNvdXAubmV3X3N0cmluZygiZm9vIiwgQ29tbWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiZm9vIiwgcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UocywgQ29tbWVudCkpCisKK2NsYXNzIFRlc3RUcmVlTW9kaWZpY2F0aW9uKFNvdXBUZXN0KToKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9tb2RpZmljYXRpb24oc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoJzxhIGlkPSIxIj48L2E+JykKKyAgICAgICAgc291cC5hWydpZCddID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKCc8YSBpZD0iMiI+PC9hPicpKQorICAgICAgICBkZWwoc291cC5hWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKCc8YT48L2E+JykpCisgICAgICAgIHNvdXAuYVsnaWQyJ10gPSAnZm9vJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKCc8YSBpZDI9ImZvbyI+PC9hPicpKQorCisgICAgZGVmIHRlc3RfbmV3X3RhZ19jcmVhdGlvbihzZWxmKToKKyAgICAgICAgYnVpbGRlciA9IGJ1aWxkZXJfcmVnaXN0cnkubG9va3VwKCdodG1sJykoKQorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8Ym9keT48L2JvZHk+IiwgYnVpbGRlcj1idWlsZGVyKQorICAgICAgICBhID0gVGFnKHNvdXAsIGJ1aWxkZXIsICdhJykKKyAgICAgICAgb2wgPSBUYWcoc291cCwgYnVpbGRlciwgJ29sJykKKyAgICAgICAgYVsnaHJlZiddID0gJ2h0dHA6Ly9mb28uY29tLycKKyAgICAgICAgc291cC5ib2R5Lmluc2VydCgwLCBhKQorICAgICAgICBzb3VwLmJvZHkuaW5zZXJ0KDEsIG9sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5ib2R5LmVuY29kZSgpLAorICAgICAgICAgICAgYic8Ym9keT48YSBocmVmPSJodHRwOi8vZm9vLmNvbS8iPjwvYT48b2w+PC9vbD48L2JvZHk+JykKKworICAgIGRlZiB0ZXN0X2FwcGVuZF90b19jb250ZW50c19tb3Zlc190YWcoc2VsZik6CisgICAgICAgIGRvYyA9ICIiIjxwIGlkPSIxIj5Eb24ndCBsZWF2ZSBtZSA8Yj5oZXJlPC9iPi48L3A+CisgICAgICAgICAgICAgICAgPHAgaWQ9IjIiPkRvblwndCBsZWF2ZSE8L3A+IiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoZG9jKQorICAgICAgICBzZWNvbmRfcGFyYSA9IHNvdXAuZmluZChpZD0nMicpCisgICAgICAgIGJvbGQgPSBzb3VwLmIKKworICAgICAgICAjIE1vdmUgdGhlIDxiPiB0YWcgdG8gdGhlIGVuZCBvZiB0aGUgc2Vjb25kIHBhcmFncmFwaC4KKyAgICAgICAgc291cC5maW5kKGlkPScyJykuYXBwZW5kKHNvdXAuYikKKworICAgICAgICAjIFRoZSA8Yj4gdGFnIGlzIG5vdyBhIGNoaWxkIG9mIHRoZSBzZWNvbmQgcGFyYWdyYXBoLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvbGQucGFyZW50LCBzZWNvbmRfcGFyYSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoCisgICAgICAgICAgICAgICAgJzxwIGlkPSIxIj5Eb25cJ3QgbGVhdmUgbWUgLjwvcD5cbicKKyAgICAgICAgICAgICAgICAnPHAgaWQ9IjIiPkRvblwndCBsZWF2ZSE8Yj5oZXJlPC9iPjwvcD4nKSkKKworICAgIGRlZiB0ZXN0X3JlcGxhY2Vfd2l0aF9yZXR1cm5zX3RoaW5nX3RoYXRfd2FzX3JlcGxhY2VkKHNlbGYpOgorICAgICAgICB0ZXh0ID0gIjxhPjwvYT48Yj48Yz48L2M+PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCh0ZXh0KQorICAgICAgICBhID0gc291cC5hCisgICAgICAgIG5ld19hID0gYS5yZXBsYWNlX3dpdGgoc291cC5jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIG5ld19hKQorCisgICAgZGVmIHRlc3RfdW53cmFwX3JldHVybnNfdGhpbmdfdGhhdF93YXNfcmVwbGFjZWQoc2VsZik6CisgICAgICAgIHRleHQgPSAiPGE+PGI+PC9iPjxjPjwvYz48L2E+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHRleHQpCisgICAgICAgIGEgPSBzb3VwLmEKKyAgICAgICAgbmV3X2EgPSBhLnVud3JhcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgbmV3X2EpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlX3RhZ193aXRoX2l0c2VsZihzZWxmKToKKyAgICAgICAgdGV4dCA9ICI8YT48Yj48L2I+PGM+Rm9vPGQ+PC9kPjwvYz48L2E+PGE+PGU+PC9lPjwvYT4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAodGV4dCkKKyAgICAgICAgYyA9IHNvdXAuYworICAgICAgICBzb3VwLmMucmVwbGFjZV93aXRoKGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IodGV4dCkpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlX3RhZ193aXRoX2l0c19wYXJlbnRfcmFpc2VzX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgdGV4dCA9ICI8YT48Yj48L2I+PC9hPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCh0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzb3VwLmIucmVwbGFjZV93aXRoLCBzb3VwLmEpCisKKyAgICBkZWYgdGVzdF9pbnNlcnRfdGFnX2ludG9faXRzZWxmX3JhaXNlc19leGNlcHRpb24oc2VsZik6CisgICAgICAgIHRleHQgPSAiPGE+PGI+PC9iPjwvYT4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAodGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc291cC5hLmluc2VydCwgMCwgc291cC5hKQorCisgICAgZGVmIHRlc3RfcmVwbGFjZV93aXRoX21haW50YWluc19uZXh0X2VsZW1lbnRfdGhyb3VnaG91dChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgnPHA+PGE+b25lPC9hPjxiPnRocmVlPC9iPjwvcD4nKQorICAgICAgICBhID0gc291cC5hCisgICAgICAgIGIgPSBhLmNvbnRlbnRzWzBdCisgICAgICAgICMgTWFrZSBpdCBzbyB0aGUgPGE+IHRhZyBoYXMgdHdvIHRleHQgY2hpbGRyZW4uCisgICAgICAgIGEuaW5zZXJ0KDEsICJ0d28iKQorCisgICAgICAgICMgTm93IHJlcGxhY2UgZWFjaCBvbmUgd2l0aCB0aGUgZW1wdHkgc3RyaW5nLgorICAgICAgICBsZWZ0LCByaWdodCA9IGEuY29udGVudHMKKyAgICAgICAgbGVmdC5yZXBsYWNlV2l0aCgnJykKKyAgICAgICAgcmlnaHQucmVwbGFjZVdpdGgoJycpCisKKyAgICAgICAgIyBUaGUgPGI+IHRhZyBpcyBzdGlsbCBjb25uZWN0ZWQgdG8gdGhlIHRyZWUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInRocmVlIiwgc291cC5iLnN0cmluZykKKworICAgIGRlZiB0ZXN0X3JlcGxhY2VfZmluYWxfbm9kZShzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGI+QXJnaCE8L2I+IikKKyAgICAgICAgc291cC5maW5kKHRleHQ9IkFyZ2ghIikucmVwbGFjZV93aXRoKCJIb29yYXkhIikKKyAgICAgICAgbmV3X3RleHQgPSBzb3VwLmZpbmQodGV4dD0iSG9vcmF5ISIpCisgICAgICAgIGIgPSBzb3VwLmIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfdGV4dC5wcmV2aW91c19lbGVtZW50LCBiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld190ZXh0LnBhcmVudCwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfdGV4dC5wcmV2aW91c19lbGVtZW50Lm5leHRfZWxlbWVudCwgbmV3X3RleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X3RleHQubmV4dF9lbGVtZW50LCBOb25lKQorCisgICAgZGVmIHRlc3RfY29uc2VjdXRpdmVfdGV4dF9ub2RlcyhzZWxmKToKKyAgICAgICAgIyBBIGJ1aWxkZXIgc2hvdWxkIG5ldmVyIGNyZWF0ZSB0d28gY29uc2VjdXRpdmUgdGV4dCBub2RlcywKKyAgICAgICAgIyBidXQgaWYgeW91IGluc2VydCBvbmUgbmV4dCB0byBhbm90aGVyLCBCZWF1dGlmdWwgU291cCB3aWxsCisgICAgICAgICMgaGFuZGxlIGl0IGNvcnJlY3RseS4KKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+PGI+QXJnaCE8L2I+PGM+PC9jPjwvYT4iKQorICAgICAgICBzb3VwLmIuaW5zZXJ0KDEsICJIb29yYXkhIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoCisgICAgICAgICAgICAgICAgIjxhPjxiPkFyZ2ghSG9vcmF5ITwvYj48Yz48L2M+PC9hPiIpKQorCisgICAgICAgIG5ld190ZXh0ID0gc291cC5maW5kKHRleHQ9Ikhvb3JheSEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld190ZXh0LnByZXZpb3VzX2VsZW1lbnQsICJBcmdoISIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X3RleHQucHJldmlvdXNfZWxlbWVudC5uZXh0X2VsZW1lbnQsIG5ld190ZXh0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X3RleHQucHJldmlvdXNfc2libGluZywgIkFyZ2ghIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfdGV4dC5wcmV2aW91c19zaWJsaW5nLm5leHRfc2libGluZywgbmV3X3RleHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfdGV4dC5uZXh0X3NpYmxpbmcsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X3RleHQubmV4dF9lbGVtZW50LCBzb3VwLmMpCisKKyAgICBkZWYgdGVzdF9pbnNlcnRfc3RyaW5nKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT48L2E+IikKKyAgICAgICAgc291cC5hLmluc2VydCgwLCAiYmFyIikKKyAgICAgICAgc291cC5hLmluc2VydCgwLCAiZm9vIikKKyAgICAgICAgIyBUaGUgc3RyaW5nIHdlcmUgYWRkZWQgdG8gdGhlIHRhZy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbImZvbyIsICJiYXIiXSwgc291cC5hLmNvbnRlbnRzKQorICAgICAgICAjIEFuZCB0aGV5IHdlcmUgY29udmVydGVkIHRvIE5hdmlnYWJsZVN0cmluZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5hLmNvbnRlbnRzWzBdLm5leHRfZWxlbWVudCwgImJhciIpCisKKyAgICBkZWYgdGVzdF9pbnNlcnRfdGFnKHNlbGYpOgorICAgICAgICBidWlsZGVyID0gc2VsZi5kZWZhdWx0X2J1aWxkZXIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgKKyAgICAgICAgICAgICI8YT48Yj5GaW5kPC9iPjxjPmxhZHkhPC9jPjxkPjwvZD48L2E+IiwgYnVpbGRlcj1idWlsZGVyKQorICAgICAgICBtYWdpY190YWcgPSBUYWcoc291cCwgYnVpbGRlciwgJ21hZ2ljdGFnJykKKyAgICAgICAgbWFnaWNfdGFnLmluc2VydCgwLCAidGhlIikKKyAgICAgICAgc291cC5hLmluc2VydCgxLCBtYWdpY190YWcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKAorICAgICAgICAgICAgICAgICI8YT48Yj5GaW5kPC9iPjxtYWdpY3RhZz50aGU8L21hZ2ljdGFnPjxjPmxhZHkhPC9jPjxkPjwvZD48L2E+IikpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgYWxsIHRoZSByZWxhdGlvbnNoaXBzIGFyZSBob29rZWQgdXAgY29ycmVjdGx5LgorICAgICAgICBiX3RhZyA9IHNvdXAuYgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJfdGFnLm5leHRfc2libGluZywgbWFnaWNfdGFnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hZ2ljX3RhZy5wcmV2aW91c19zaWJsaW5nLCBiX3RhZykKKworICAgICAgICBmaW5kID0gYl90YWcuZmluZCh0ZXh0PSJGaW5kIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaW5kLm5leHRfZWxlbWVudCwgbWFnaWNfdGFnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hZ2ljX3RhZy5wcmV2aW91c19lbGVtZW50LCBmaW5kKQorCisgICAgICAgIGNfdGFnID0gc291cC5jCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFnaWNfdGFnLm5leHRfc2libGluZywgY190YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY190YWcucHJldmlvdXNfc2libGluZywgbWFnaWNfdGFnKQorCisgICAgICAgIHRoZSA9IG1hZ2ljX3RhZy5maW5kKHRleHQ9InRoZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhlLnBhcmVudCwgbWFnaWNfdGFnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoZS5uZXh0X2VsZW1lbnQsIGNfdGFnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfdGFnLnByZXZpb3VzX2VsZW1lbnQsIHRoZSkKKworICAgIGRlZiB0ZXN0X2FwcGVuZF9jaGlsZF90aGF0c19hbHJlYWR5X2F0X3RoZV9lbmQoc2VsZik6CisgICAgICAgIGRhdGEgPSAiPGE+PGI+PC9iPjwvYT4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoZGF0YSkKKyAgICAgICAgc291cC5hLmFwcGVuZChzb3VwLmIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgc291cC5kZWNvZGUoKSkKKworICAgIGRlZiB0ZXN0X21vdmVfdGFnX3RvX2JlZ2lubmluZ19vZl9wYXJlbnQoc2VsZik6CisgICAgICAgIGRhdGEgPSAiPGE+PGI+PC9iPjxjPjwvYz48ZD48L2Q+PC9hPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChkYXRhKQorICAgICAgICBzb3VwLmEuaW5zZXJ0KDAsIHNvdXAuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiPGE+PGQ+PC9kPjxiPjwvYj48Yz48L2M+PC9hPiIsIHNvdXAuZGVjb2RlKCkpCisKKyAgICBkZWYgdGVzdF9pbnNlcnRfd29ya3Nfb25fZW1wdHlfZWxlbWVudF90YWcoc2VsZik6CisgICAgICAgICMgVGhpcyBpcyBhIGxpdHRsZSBzdHJhbmdlLCBzaW5jZSBtb3N0IEhUTUwgcGFyc2VycyBkb24ndCBhbGxvdworICAgICAgICAjIG1hcmt1cCBsaWtlIHRoaXMgdG8gY29tZSB0aHJvdWdoLiBCdXQgaW4gZ2VuZXJhbCwgd2UgZG9uJ3QKKyAgICAgICAgIyBrbm93IHdoYXQgdGhlIHBhcnNlciB3b3VsZCBvciB3b3VsZG4ndCBoYXZlIGFsbG93ZWQsIHNvCisgICAgICAgICMgSSdtIGxldHRpbmcgdGhpcyBzdWNjZWVkIGZvciBub3cuCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxici8+IikKKyAgICAgICAgc291cC5ici5pbnNlcnQoMSwgIkNvbnRlbnRzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc291cC5iciksICI8YnI+Q29udGVudHM8L2JyPiIpCisKKyAgICBkZWYgdGVzdF9pbnNlcnRfYmVmb3JlKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT5mb288L2E+PGI+YmFyPC9iPiIpCisgICAgICAgIHNvdXAuYi5pbnNlcnRfYmVmb3JlKCJCQVoiKQorICAgICAgICBzb3VwLmEuaW5zZXJ0X2JlZm9yZSgiUVVVWCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcigiUVVVWDxhPmZvbzwvYT5CQVo8Yj5iYXI8L2I+IikpCisKKyAgICAgICAgc291cC5hLmluc2VydF9iZWZvcmUoc291cC5iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoIlFVVVg8Yj5iYXI8L2I+PGE+Zm9vPC9hPkJBWiIpKQorCisgICAgZGVmIHRlc3RfaW5zZXJ0X2FmdGVyKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT5mb288L2E+PGI+YmFyPC9iPiIpCisgICAgICAgIHNvdXAuYi5pbnNlcnRfYWZ0ZXIoIkJBWiIpCisgICAgICAgIHNvdXAuYS5pbnNlcnRfYWZ0ZXIoIlFVVVgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoIjxhPmZvbzwvYT5RVVVYPGI+YmFyPC9iPkJBWiIpKQorICAgICAgICBzb3VwLmIuaW5zZXJ0X2FmdGVyKHNvdXAuYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKCJRVVVYPGI+YmFyPC9iPjxhPmZvbzwvYT5CQVoiKSkKKworICAgIGRlZiB0ZXN0X2luc2VydF9hZnRlcl9yYWlzZXNfZXhjZXB0aW9uX2lmX2FmdGVyX2hhc19ub19tZWFuaW5nKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCIiKQorICAgICAgICB0YWcgPSBzb3VwLm5ld190YWcoImEiKQorICAgICAgICBzdHJpbmcgPSBzb3VwLm5ld19zdHJpbmcoIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cmluZy5pbnNlcnRfYWZ0ZXIsIHRhZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgc291cC5pbnNlcnRfYWZ0ZXIsIHRhZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGFnLmluc2VydF9hZnRlciwgdGFnKQorCisgICAgZGVmIHRlc3RfaW5zZXJ0X2JlZm9yZV9yYWlzZXNfbm90aW1wbGVtZW50ZWRlcnJvcl9pZl9iZWZvcmVfaGFzX25vX21lYW5pbmcoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIiIpCisgICAgICAgIHRhZyA9IHNvdXAubmV3X3RhZygiYSIpCisgICAgICAgIHN0cmluZyA9IHNvdXAubmV3X3N0cmluZygiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3RyaW5nLmluc2VydF9iZWZvcmUsIHRhZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgc291cC5pbnNlcnRfYmVmb3JlLCB0YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRhZy5pbnNlcnRfYmVmb3JlLCB0YWcpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlX3dpdGgoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoCisgICAgICAgICAgICAgICAgIjxwPlRoZXJlJ3MgPGI+bm88L2I+IGJ1c2luZXNzIGxpa2UgPGI+c2hvdzwvYj4gYnVzaW5lc3M8L3A+IikKKyAgICAgICAgbm8sIHNob3cgPSBzb3VwLmZpbmRfYWxsKCdiJykKKyAgICAgICAgc2hvdy5yZXBsYWNlX3dpdGgobm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLAorICAgICAgICAgICAgc2VsZi5kb2N1bWVudF9mb3IoCisgICAgICAgICAgICAgICAgIjxwPlRoZXJlJ3MgIGJ1c2luZXNzIGxpa2UgPGI+bm88L2I+IGJ1c2luZXNzPC9wPiIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2hvdy5wYXJlbnQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm8ucGFyZW50LCBzb3VwLnApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm8ubmV4dF9lbGVtZW50LCAibm8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vLm5leHRfc2libGluZywgIiBidXNpbmVzcyIpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlX2ZpcnN0X2NoaWxkKHNlbGYpOgorICAgICAgICBkYXRhID0gIjxhPjxiPjwvYj48Yz48L2M+PC9hPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChkYXRhKQorICAgICAgICBzb3VwLmIucmVwbGFjZV93aXRoKHNvdXAuYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiPGE+PGM+PC9jPjwvYT4iLCBzb3VwLmRlY29kZSgpKQorCisgICAgZGVmIHRlc3RfcmVwbGFjZV9sYXN0X2NoaWxkKHNlbGYpOgorICAgICAgICBkYXRhID0gIjxhPjxiPjwvYj48Yz48L2M+PC9hPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChkYXRhKQorICAgICAgICBzb3VwLmMucmVwbGFjZV93aXRoKHNvdXAuYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiPGE+PGI+PC9iPjwvYT4iLCBzb3VwLmRlY29kZSgpKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX3RhZ19yZXBsYWNlX3dpdGgoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoCisgICAgICAgICAgICAiIiI8YT5XZTxiPnJlc2VydmU8Yz50aGU8L2M+PGQ+cmlnaHQ8L2Q+PC9iPjwvYT48ZT50bzxmPnJlZnVzZTwvZj48Zz5zZXJ2aWNlPC9nPjwvZT4iIiIpCisKKyAgICAgICAgIyBSZXBsYWNlIHRoZSBlbnRpcmUgPGI+IHRhZyBhbmQgaXRzIGNvbnRlbnRzICgicmVzZXJ2ZSB0aGUKKyAgICAgICAgIyByaWdodCIpIHdpdGggdGhlIDxmPiB0YWcgKCJyZWZ1c2UiKS4KKyAgICAgICAgcmVtb3ZlX3RhZyA9IHNvdXAuYgorICAgICAgICBtb3ZlX3RhZyA9IHNvdXAuZgorICAgICAgICByZW1vdmVfdGFnLnJlcGxhY2Vfd2l0aChtb3ZlX3RhZykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoCisgICAgICAgICAgICAgICAgIjxhPldlPGY+cmVmdXNlPC9mPjwvYT48ZT50bzxnPnNlcnZpY2U8L2c+PC9lPiIpKQorCisgICAgICAgICMgVGhlIDxiPiB0YWcgaXMgbm93IGFuIG9ycGhhbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1vdmVfdGFnLnBhcmVudCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1vdmVfdGFnLmZpbmQodGV4dD0icmlnaHQiKS5uZXh0X2VsZW1lbnQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtb3ZlX3RhZy5wcmV2aW91c19lbGVtZW50LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW92ZV90YWcubmV4dF9zaWJsaW5nLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW92ZV90YWcucHJldmlvdXNfc2libGluZywgTm9uZSkKKworICAgICAgICAjIFRoZSA8Zj4gdGFnIGlzIG5vdyBjb25uZWN0ZWQgdG8gdGhlIDxhPiB0YWcuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW92ZV90YWcucGFyZW50LCBzb3VwLmEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW92ZV90YWcucHJldmlvdXNfZWxlbWVudCwgIldlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb3ZlX3RhZy5uZXh0X2VsZW1lbnQubmV4dF9lbGVtZW50LCBzb3VwLmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW92ZV90YWcubmV4dF9zaWJsaW5nLCBOb25lKQorCisgICAgICAgICMgVGhlIGdhcCB3aGVyZSB0aGUgPGY+IHRhZyB1c2VkIHRvIGJlIGhhcyBiZWVuIG1lbmRlZCwgYW5kCisgICAgICAgICMgdGhlIHdvcmQgInRvIiBpcyBub3cgY29ubmVjdGVkIHRvIHRoZSA8Zz4gdGFnLgorICAgICAgICB0b190ZXh0ID0gc291cC5maW5kKHRleHQ9InRvIikKKyAgICAgICAgZ190YWcgPSBzb3VwLmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0b190ZXh0Lm5leHRfZWxlbWVudCwgZ190YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodG9fdGV4dC5uZXh0X3NpYmxpbmcsIGdfdGFnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdfdGFnLnByZXZpb3VzX2VsZW1lbnQsIHRvX3RleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ190YWcucHJldmlvdXNfc2libGluZywgdG9fdGV4dCkKKworICAgIGRlZiB0ZXN0X3Vud3JhcChzZWxmKToKKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiIiIKKyAgICAgICAgICAgIDxwPlVubmVlZGVkIDxlbT5mb3JtYXR0aW5nPC9lbT4gaXMgdW5uZWVkZWQ8L3A+CisgICAgICAgICAgICAiIiIpCisgICAgICAgIHRyZWUuZW0udW53cmFwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmVlLmVtLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyZWUucC50ZXh0LCAiVW5uZWVkZWQgZm9ybWF0dGluZyBpcyB1bm5lZWRlZCIpCisKKyAgICBkZWYgdGVzdF93cmFwKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCJJIHdpc2ggSSB3YXMgYm9sZC4iKQorICAgICAgICB2YWx1ZSA9IHNvdXAuc3RyaW5nLndyYXAoc291cC5uZXdfdGFnKCJiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUuZGVjb2RlKCksICI8Yj5JIHdpc2ggSSB3YXMgYm9sZC48L2I+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKCI8Yj5JIHdpc2ggSSB3YXMgYm9sZC48L2I+IikpCisKKyAgICBkZWYgdGVzdF93cmFwX2V4dHJhY3RzX3RhZ19mcm9tX2Vsc2V3aGVyZShzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGI+PC9iPkkgd2lzaCBJIHdhcyBib2xkLiIpCisgICAgICAgIHNvdXAuYi5uZXh0X3NpYmxpbmcud3JhcChzb3VwLmIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcigiPGI+SSB3aXNoIEkgd2FzIGJvbGQuPC9iPiIpKQorCisgICAgZGVmIHRlc3Rfd3JhcF9wdXRzX25ld19jb250ZW50c19hdF90aGVfZW5kKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8Yj5JIGxpa2UgYmVpbmcgYm9sZC48L2I+SSB3aXNoIEkgd2FzIGJvbGQuIikKKyAgICAgICAgc291cC5iLm5leHRfc2libGluZy53cmFwKHNvdXAuYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oc291cC5iLmNvbnRlbnRzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKAorICAgICAgICAgICAgICAgICI8Yj5JIGxpa2UgYmVpbmcgYm9sZC5JIHdpc2ggSSB3YXMgYm9sZC48L2I+IikpCisKKyAgICBkZWYgdGVzdF9leHRyYWN0KHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKAorICAgICAgICAgICAgJzxodG1sPjxib2R5PlNvbWUgY29udGVudC4gPGRpdiBpZD0ibmF2Ij5OYXYgY3JhcDwvZGl2PiBNb3JlIGNvbnRlbnQuPC9ib2R5PjwvaHRtbD4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNvdXAuYm9keS5jb250ZW50cyksIDMpCisgICAgICAgIGV4dHJhY3RlZCA9IHNvdXAuZmluZChpZD0ibmF2IikuZXh0cmFjdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZGVjb2RlKCksICI8aHRtbD48Ym9keT5Tb21lIGNvbnRlbnQuICBNb3JlIGNvbnRlbnQuPC9ib2R5PjwvaHRtbD4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHJhY3RlZC5kZWNvZGUoKSwgJzxkaXYgaWQ9Im5hdiI+TmF2IGNyYXA8L2Rpdj4nKQorCisgICAgICAgICMgVGhlIGV4dHJhY3RlZCB0YWcgaXMgbm93IGFuIG9ycGhhbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc291cC5ib2R5LmNvbnRlbnRzKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRyYWN0ZWQucGFyZW50LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHJhY3RlZC5wcmV2aW91c19lbGVtZW50LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHJhY3RlZC5uZXh0X2VsZW1lbnQubmV4dF9lbGVtZW50LCBOb25lKQorCisgICAgICAgICMgVGhlIGdhcCB3aGVyZSB0aGUgZXh0cmFjdGVkIHRhZyB1c2VkIHRvIGJlIGhhcyBiZWVuIG1lbmRlZC4KKyAgICAgICAgY29udGVudF8xID0gc291cC5maW5kKHRleHQ9IlNvbWUgY29udGVudC4gIikKKyAgICAgICAgY29udGVudF8yID0gc291cC5maW5kKHRleHQ9IiBNb3JlIGNvbnRlbnQuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50XzEubmV4dF9lbGVtZW50LCBjb250ZW50XzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudF8xLm5leHRfc2libGluZywgY29udGVudF8yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRfMi5wcmV2aW91c19lbGVtZW50LCBjb250ZW50XzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudF8yLnByZXZpb3VzX3NpYmxpbmcsIGNvbnRlbnRfMSkKKworICAgIGRlZiB0ZXN0X2V4dHJhY3RfZGlzdGluZ3Vpc2hlc19iZXR3ZWVuX2lkZW50aWNhbF9zdHJpbmdzKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT5mb288L2E+PGI+YmFyPC9iPiIpCisgICAgICAgIGZvb18xID0gc291cC5hLnN0cmluZworICAgICAgICBiYXJfMSA9IHNvdXAuYi5zdHJpbmcKKyAgICAgICAgZm9vXzIgPSBzb3VwLm5ld19zdHJpbmcoImZvbyIpCisgICAgICAgIGJhcl8yID0gc291cC5uZXdfc3RyaW5nKCJiYXIiKQorICAgICAgICBzb3VwLmEuYXBwZW5kKGZvb18yKQorICAgICAgICBzb3VwLmIuYXBwZW5kKGJhcl8yKQorCisgICAgICAgICMgTm93IHRoZXJlIGFyZSB0d28gaWRlbnRpY2FsIHN0cmluZ3MgaW4gdGhlIDxhPiB0YWcsIGFuZCB0d28KKyAgICAgICAgIyBpbiB0aGUgPGI+IHRhZy4gTGV0J3MgcmVtb3ZlIHRoZSBmaXJzdCAiZm9vIiBhbmQgdGhlIHNlY29uZAorICAgICAgICAjICJiYXIiLgorICAgICAgICBmb29fMS5leHRyYWN0KCkKKyAgICAgICAgYmFyXzIuZXh0cmFjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vXzIsIHNvdXAuYS5zdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFyXzIsIHNvdXAuYi5zdHJpbmcpCisKKyAgICBkZWYgdGVzdF9jbGVhcihzZWxmKToKKyAgICAgICAgIiIiVGFnLmNsZWFyKCkiIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPHA+PGE+U3RyaW5nIDxlbT5JdGFsaWNpemVkPC9lbT48L2E+IGFuZCBhbm90aGVyPC9wPiIpCisgICAgICAgICMgY2xlYXIgdXNpbmcgZXh0cmFjdCgpCisgICAgICAgIGEgPSBzb3VwLmEKKyAgICAgICAgc291cC5wLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc291cC5wLmNvbnRlbnRzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoYSwgImNvbnRlbnRzIikpCisKKyAgICAgICAgIyBjbGVhciB1c2luZyBkZWNvbXBvc2UoKQorICAgICAgICBlbSA9IGEuZW0KKyAgICAgICAgYS5jbGVhcihkZWNvbXBvc2U9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4oZW0uY29udGVudHMpKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX3NldChzZWxmKToKKyAgICAgICAgIiIiVGFnLnN0cmluZyA9ICdzdHJpbmcnIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjwvYT4gPGI+PGM+PC9jPjwvYj4iKQorICAgICAgICBzb3VwLmEuc3RyaW5nID0gImZvbyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmEuY29udGVudHMsIFsiZm9vIl0pCisgICAgICAgIHNvdXAuYi5zdHJpbmcgPSAiYmFyIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYi5jb250ZW50cywgWyJiYXIiXSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ19zZXRfZG9lc19ub3RfYWZmZWN0X29yaWdpbmFsX3N0cmluZyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+PGI+Zm9vPC9iPjxjPmJhcjwvYz4iKQorICAgICAgICBzb3VwLmIuc3RyaW5nID0gc291cC5jLnN0cmluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYS5lbmNvZGUoKSwgYiI8YT48Yj5iYXI8L2I+PGM+YmFyPC9jPjwvYT4iKQorCisgICAgZGVmIHRlc3Rfc2V0X3N0cmluZ19wcmVzZXJ2ZXNfY2xhc3Nfb2Zfc3RyaW5nKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT48L2E+IikKKyAgICAgICAgY2RhdGEgPSBDRGF0YSgiZm9vIikKKyAgICAgICAgc291cC5hLnN0cmluZyA9IGNkYXRhCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNvdXAuYS5zdHJpbmcsIENEYXRhKSkKKworY2xhc3MgVGVzdEVsZW1lbnRPYmplY3RzKFNvdXBUZXN0KToKKyAgICAiIiJUZXN0IHZhcmlvdXMgZmVhdHVyZXMgb2YgZWxlbWVudCBvYmplY3RzLiIiIgorCisgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgorICAgICAgICAiIiJUaGUgbGVuZ3RoIG9mIGFuIGVsZW1lbnQgaXMgaXRzIG51bWJlciBvZiBjaGlsZHJlbi4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPHRvcD4xPGI+MjwvYj4zPC90b3A+IikKKworICAgICAgICAjIFRoZSBCZWF1dGlmdWxTb3VwIG9iamVjdCBpdHNlbGYgY29udGFpbnMgb25lIGVsZW1lbnQ6IHRoZQorICAgICAgICAjIDx0b3A+IHRhZy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc291cC5jb250ZW50cyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNvdXApLCAxKQorCisgICAgICAgICMgVGhlIDx0b3A+IHRhZyBjb250YWlucyB0aHJlZSBlbGVtZW50czogdGhlIHRleHQgbm9kZSAiMSIsIHRoZQorICAgICAgICAjIDxiPiB0YWcsIGFuZCB0aGUgdGV4dCBub2RlICIzIi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc291cC50b3ApLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzb3VwLnRvcC5jb250ZW50cyksIDMpCisKKyAgICBkZWYgdGVzdF9tZW1iZXJfYWNjZXNzX2ludm9rZXNfZmluZChzZWxmKToKKyAgICAgICAgIiIiQWNjZXNzaW5nIGEgUHl0aG9uIG1lbWJlciAuZm9vIGludm9rZXMgZmluZCgnZm9vJykiIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgnPGI+PGk+PC9pPjwvYj4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYiwgc291cC5maW5kKCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5iLmksIHNvdXAuZmluZCgnYicpLmZpbmQoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmEsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9kZXByZWNhdGVkX21lbWJlcl9hY2Nlc3Moc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoJzxiPjxpPjwvaT48L2I+JykKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHRhZyA9IHNvdXAuYlRhZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYiwgdGFnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgJy5iVGFnIGlzIGRlcHJlY2F0ZWQsIHVzZSAuZmluZCgiYiIpIGluc3RlYWQuJywKKyAgICAgICAgICAgIHN0cih3WzBdLm1lc3NhZ2UpKQorCisgICAgZGVmIHRlc3RfaGFzX2F0dHIoc2VsZik6CisgICAgICAgICIiImhhc19hdHRyKCkgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgYW4gYXR0cmlidXRlLgorCisgICAgICAgIFBsZWFzZSBub3RlIG5vdGU6IGhhc19hdHRyKCkgaXMgZGlmZmVyZW50IGZyb20KKyAgICAgICAgX19pbl9fLiBoYXNfYXR0cigpIGNoZWNrcyB0aGUgdGFnJ3MgYXR0cmlidXRlcyBhbmQgX19pbl9fCisgICAgICAgIGNoZWNrcyB0aGUgdGFnJ3MgY2hpZGxyZW4uCisgICAgICAgICIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8Zm9vIGF0dHI9J2Jhcic+IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvdXAuZm9vLmhhc19hdHRyKCdhdHRyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc291cC5mb28uaGFzX2F0dHIoJ2F0dHIyJykpCisKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXNfY29tZV9vdXRfaW5fYWxwaGFiZXRpY2FsX29yZGVyKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnPGIgYT0iMSIgej0iNSIgbT0iMyIgZj0iMiIgeT0iNCI+PC9iPicKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKG1hcmt1cCwgJzxiIGE9IjEiIGY9IjIiIG09IjMiIHk9IjQiIHo9IjUiPjwvYj4nKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nKHNlbGYpOgorICAgICAgICAjIEEgdGFnIHRoYXQgY29udGFpbnMgb25seSBhIHRleHQgbm9kZSBtYWtlcyB0aGF0IG5vZGUKKyAgICAgICAgIyBhdmFpbGFibGUgYXMgLnN0cmluZy4KKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGI+Zm9vPC9iPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5iLnN0cmluZywgJ2ZvbycpCisKKyAgICBkZWYgdGVzdF9lbXB0eV90YWdfaGFzX25vX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBBIHRhZyB3aXRoIG5vIGNoaWxkcmVuIGhhcyBubyAuc3Rpcm5nLgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8Yj48L2I+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmIuc3RyaW5nLCBOb25lKQorCisgICAgZGVmIHRlc3RfdGFnX3dpdGhfbXVsdGlwbGVfY2hpbGRyZW5faGFzX25vX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBBIHRhZyB3aXRoIG5vIGNoaWxkcmVuIGhhcyBubyAuc3RyaW5nLgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT5mb288Yj48L2I+PGI+PC9iPjwvYj4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYi5zdHJpbmcsIE5vbmUpCisKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+Zm9vPGI+PC9iPmJhcjwvYj4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYi5zdHJpbmcsIE5vbmUpCisKKyAgICAgICAgIyBFdmVuIGlmIGFsbCB0aGUgY2hpbGRyZW4gYXJlIHN0cmluZ3MsIGR1ZSB0byB0cmlja2VyeSwKKyAgICAgICAgIyBpdCB3b24ndCB3b3JrLS1idXQgdGhpcyB3b3VsZCBiZSBhIGdvb2Qgb3B0aW1pemF0aW9uLgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT5mb288L2I+IikKKyAgICAgICAgc291cC5hLmluc2VydCgxLCAiYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmEuc3RyaW5nLCBOb25lKQorCisgICAgZGVmIHRlc3RfdGFnX3dpdGhfcmVjdXJzaXZlX3N0cmluZ19oYXNfc3RyaW5nKHNlbGYpOgorICAgICAgICAjIEEgdGFnIHdpdGggYSBzaW5nbGUgY2hpbGQgd2hpY2ggaGFzIGEgLnN0cmluZyBpbmhlcml0cyB0aGF0CisgICAgICAgICMgLnN0cmluZy4KKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+PGI+Zm9vPC9iPjwvYT4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYS5zdHJpbmcsICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuc3RyaW5nLCAiZm9vIikKKworICAgIGRlZiB0ZXN0X2xhY2tfb2Zfc3RyaW5nKHNlbGYpOgorICAgICAgICAiIiJPbmx5IGEgdGFnIGNvbnRhaW5pbmcgYSBzaW5nbGUgdGV4dCBub2RlIGhhcyBhIC5zdHJpbmcuIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxiPmY8aT5lPC9pPm88L2I+IikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb3VwLmIuc3RyaW5nKQorCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxiPjwvYj4iKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvdXAuYi5zdHJpbmcpCisKKyAgICBkZWYgdGVzdF9hbGxfdGV4dChzZWxmKToKKyAgICAgICAgIiIiVGFnLnRleHQgYW5kIFRhZy5nZXRfdGV4dChzZXA9dSIiKSAtPiBhbGwgY2hpbGQgdGV4dCwgY29uY2F0ZW5hdGVkIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPmE8Yj5yPC9iPiAgIDxyPiB0IDwvcj48L2E+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmEudGV4dCwgImFyICB0ICIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5hLmdldF90ZXh0KHN0cmlwPVRydWUpLCAiYXJ0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmEuZ2V0X3RleHQoIiwiKSwgImEsciwgLCB0ICIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5hLmdldF90ZXh0KCIsIiwgc3RyaXA9VHJ1ZSksICJhLHIsdCIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9pZ25vcmVzX2NvbW1lbnRzKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCJmb288IS0tSUdOT1JFLS0+YmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmdldF90ZXh0KCksICJmb29iYXIiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmdldF90ZXh0KHR5cGVzPShOYXZpZ2FibGVTdHJpbmcsIENvbW1lbnQpKSwgImZvb0lHTk9SRWJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmdldF90ZXh0KHR5cGVzPU5vbmUpLCAiZm9vSUdOT1JFYmFyIikKKworICAgIGRlZiB0ZXN0X2FsbF9zdHJpbmdzX2lnbm9yZXNfY29tbWVudHMoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoImZvbzwhLS1JR05PUkUtLT5iYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnZm9vJywgJ2JhciddLCBsaXN0KHNvdXAuc3RyaW5ncykpCisKK2NsYXNzIFRlc3RDREF0YUxpc3RBdHRyaWJ1dGVzKFNvdXBUZXN0KToKKworICAgICIiIlRlc3RpbmcgY2RhdGEtbGlzdCBhdHRyaWJ1dGVzIGxpa2UgJ2NsYXNzJy4KKyAgICAiIiIKKyAgICBkZWYgdGVzdF9zaW5nbGVfdmFsdWVfYmVjb21lc19saXN0KHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YSBjbGFzcz0nZm9vJz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsiZm9vIl0sc291cC5hWydjbGFzcyddKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfdmFsdWVzX2JlY29tZXNfbGlzdChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGEgY2xhc3M9J2ZvbyBiYXInPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyJmb28iLCAiYmFyIl0sIHNvdXAuYVsnY2xhc3MnXSkKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX3ZhbHVlc19zZXBhcmF0ZWRfYnlfd2VpcmRfd2hpdGVzcGFjZShzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGEgY2xhc3M9J2Zvb1x0YmFyXG5iYXonPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyJmb28iLCAiYmFyIiwgImJheiJdLHNvdXAuYVsnY2xhc3MnXSkKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXNfam9pbmVkX2ludG9fc3RyaW5nX29uX291dHB1dChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGEgY2xhc3M9J2Zvb1x0YmFyJz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInPGEgY2xhc3M9ImZvbyBiYXIiPjwvYT4nLCBzb3VwLmEuZW5jb2RlKCkpCisKKyAgICBkZWYgdGVzdF9hY2NlcHRfY2hhcnNldChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgnPGZvcm0gYWNjZXB0LWNoYXJzZXQ9IklTTy04ODU5LTEgVVRGLTgiPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydJU08tODg1OS0xJywgJ1VURi04J10sIHNvdXAuZm9ybVsnYWNjZXB0LWNoYXJzZXQnXSkKKworICAgIGRlZiB0ZXN0X2NkYXRhX2F0dHJpYnV0ZV9hcHBseWluZ19vbmx5X3RvX29uZV90YWcoc2VsZik6CisgICAgICAgIGRhdGEgPSAnPGEgYWNjZXB0LWNoYXJzZXQ9IklTTy04ODU5LTEgVVRGLTgiPjwvYT4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoZGF0YSkKKyAgICAgICAgIyBXZSBzYXcgaW4gYW5vdGhlciB0ZXN0IHRoYXQgYWNjZXB0LWNoYXJzZXQgaXMgYSBjZGF0YS1saXN0CisgICAgICAgICMgYXR0cmlidXRlIGZvciB0aGUgPGZvcm0+IHRhZy4gQnV0IGl0J3Mgbm90IGEgY2RhdGEtbGlzdAorICAgICAgICAjIGF0dHJpYnV0ZSBmb3IgYW55IG90aGVyIHRhZy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSVNPLTg4NTktMSBVVEYtOCcsIHNvdXAuYVsnYWNjZXB0LWNoYXJzZXQnXSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ19oYXNfaW1tdXRhYmxlX25hbWVfcHJvcGVydHkoc2VsZik6CisgICAgICAgIHN0cmluZyA9IHNlbGYuc291cCgicyIpLnN0cmluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHN0cmluZy5uYW1lKQorICAgICAgICBkZWYgdCgpOgorICAgICAgICAgICAgc3RyaW5nLm5hbWUgPSAnZm9vJworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgdCkKKworY2xhc3MgVGVzdFBlcnNpc3RlbmNlKFNvdXBUZXN0KToKKyAgICAiVGVzdGluZyBmZWF0dXJlcyBsaWtlIHBpY2tsZSBhbmQgZGVlcGNvcHkuIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0UGVyc2lzdGVuY2UsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi5wYWdlID0gIiIiPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIgorImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvdHJhbnNpdGlvbmFsLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHRpdGxlPkJlYXV0aWZ1bCBTb3VwOiBXZSBjYWxsZWQgaGltIFRvcnRvaXNlIGJlY2F1c2UgaGUgdGF1Z2h0IHVzLjwvdGl0bGU+Cis8bGluayByZXY9Im1hZGUiIGhyZWY9Im1haWx0bzpsZW9uYXJkckBzZWdmYXVsdC5vcmciPgorPG1ldGEgbmFtZT0iRGVzY3JpcHRpb24iIGNvbnRlbnQ9IkJlYXV0aWZ1bCBTb3VwOiBhbiBIVE1MIHBhcnNlciBvcHRpbWl6ZWQgZm9yIHNjcmVlbi1zY3JhcGluZy4iPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJNYXJrb3YgQXBwcm94aW1hdGlvbiAxLjQgKG1vZHVsZTogbGVvbmFyZHIpIj4KKzxtZXRhIG5hbWU9ImF1dGhvciIgY29udGVudD0iTGVvbmFyZCBSaWNoYXJkc29uIj4KKzwvaGVhZD4KKzxib2R5PgorPGEgaHJlZj0iZm9vIj5mb288L2E+Cis8YSBocmVmPSJmb28iPjxiPmJhcjwvYj48L2E+Cis8L2JvZHk+Cis8L2h0bWw+IiIiCisgICAgICAgIHNlbGYudHJlZSA9IHNlbGYuc291cChzZWxmLnBhZ2UpCisKKyAgICBkZWYgdGVzdF9waWNrbGVfYW5kX3VucGlja2xlX2lkZW50aXR5KHNlbGYpOgorICAgICAgICAjIFBpY2tsaW5nIGEgdHJlZSwgdGhlbiB1bnBpY2tsaW5nIGl0LCB5aWVsZHMgYSB0cmVlIGlkZW50aWNhbAorICAgICAgICAjIHRvIHRoZSBvcmlnaW5hbC4KKyAgICAgICAgZHVtcGVkID0gcGlja2xlLmR1bXBzKHNlbGYudHJlZSwgMikKKyAgICAgICAgbG9hZGVkID0gcGlja2xlLmxvYWRzKGR1bXBlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuX19jbGFzc19fLCBCZWF1dGlmdWxTb3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5kZWNvZGUoKSwgc2VsZi50cmVlLmRlY29kZSgpKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfaWRlbnRpdHkoc2VsZik6CisgICAgICAgICMgTWFraW5nIGEgZGVlcGNvcHkgb2YgYSB0cmVlIHlpZWxkcyBhbiBpZGVudGljYWwgdHJlZS4KKyAgICAgICAgY29waWVkID0gY29weS5kZWVwY29weShzZWxmLnRyZWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29waWVkLmRlY29kZSgpLCBzZWxmLnRyZWUuZGVjb2RlKCkpCisKKyAgICBkZWYgdGVzdF91bmljb2RlX3BpY2tsZShzZWxmKToKKyAgICAgICAgIyBBIHRyZWUgY29udGFpbmluZyBVbmljb2RlIGNoYXJhY3RlcnMgY2FuIGJlIHBpY2tsZWQuCisgICAgICAgIGh0bWwgPSB1IjxiPlxOe1NOT1dNQU59PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChodG1sKQorICAgICAgICBkdW1wZWQgPSBwaWNrbGUuZHVtcHMoc291cCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpCisgICAgICAgIGxvYWRlZCA9IHBpY2tsZS5sb2FkcyhkdW1wZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmRlY29kZSgpLCBzb3VwLmRlY29kZSgpKQorCisKK2NsYXNzIFRlc3RTdWJzdGl0dXRpb25zKFNvdXBUZXN0KToKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfZm9ybWF0dGVyX2lzX21pbmltYWwoc2VsZik6CisgICAgICAgIG1hcmt1cCA9IHUiPGI+Jmx0OyZsdDtTYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvYj4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBkZWNvZGVkID0gc291cC5kZWNvZGUoZm9ybWF0dGVyPSJtaW5pbWFsIikKKyAgICAgICAgIyBUaGUgPCBpcyBjb252ZXJ0ZWQgYmFjayBpbnRvICZsdDsgYnV0IHRoZSBlLXdpdGgtYWN1dGUgaXMgbGVmdCBhbG9uZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGRlY29kZWQsCisgICAgICAgICAgICBzZWxmLmRvY3VtZW50X2ZvcigKKyAgICAgICAgICAgICAgICB1IjxiPiZsdDsmbHQ7U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhJmd0OyZndDs8L2I+IikpCisKKyAgICBkZWYgdGVzdF9mb3JtYXR0ZXJfaHRtbChzZWxmKToKKyAgICAgICAgbWFya3VwID0gdSI8Yj4mbHQ7Jmx0O1NhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ISZndDsmZ3Q7PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIGRlY29kZWQgPSBzb3VwLmRlY29kZShmb3JtYXR0ZXI9Imh0bWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZGVjb2RlZCwKKyAgICAgICAgICAgIHNlbGYuZG9jdW1lbnRfZm9yKCI8Yj4mbHQ7Jmx0O1NhY3ImZWFjdXRlOyBibGV1ISZndDsmZ3Q7PC9iPiIpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0dGVyX21pbmltYWwoc2VsZik6CisgICAgICAgIG1hcmt1cCA9IHUiPGI+Jmx0OyZsdDtTYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvYj4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBkZWNvZGVkID0gc291cC5kZWNvZGUoZm9ybWF0dGVyPSJtaW5pbWFsIikKKyAgICAgICAgIyBUaGUgPCBpcyBjb252ZXJ0ZWQgYmFjayBpbnRvICZsdDsgYnV0IHRoZSBlLXdpdGgtYWN1dGUgaXMgbGVmdCBhbG9uZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGRlY29kZWQsCisgICAgICAgICAgICBzZWxmLmRvY3VtZW50X2ZvcigKKyAgICAgICAgICAgICAgICB1IjxiPiZsdDsmbHQ7U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhJmd0OyZndDs8L2I+IikpCisKKyAgICBkZWYgdGVzdF9mb3JtYXR0ZXJfbnVsbChzZWxmKToKKyAgICAgICAgbWFya3VwID0gdSI8Yj4mbHQ7Jmx0O1NhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ISZndDsmZ3Q7PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIGRlY29kZWQgPSBzb3VwLmRlY29kZShmb3JtYXR0ZXI9Tm9uZSkKKyAgICAgICAgIyBOZWl0aGVyIHRoZSBhbmdsZSBicmFja2V0cyBub3IgdGhlIGUtd2l0aC1hY3V0ZSBhcmUgY29udmVydGVkLgorICAgICAgICAjIFRoaXMgaXMgbm90IHZhbGlkIEhUTUwsIGJ1dCBpdCdzIHdoYXQgdGhlIHVzZXIgd2FudGVkLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZG9jdW1lbnRfZm9yKHUiPGI+PDxTYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSE+PjwvYj4iKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdHRlcl9jdXN0b20oc2VsZik6CisgICAgICAgIG1hcmt1cCA9IHUiPGI+Jmx0O2ZvbyZndDs8L2I+PGI+YmFyPC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIGRlY29kZWQgPSBzb3VwLmRlY29kZShmb3JtYXR0ZXIgPSBsYW1iZGEgeDogeC51cHBlcigpKQorICAgICAgICAjIEluc3RlYWQgb2Ygbm9ybWFsIGVudGl0eSBjb252ZXJzaW9uIGNvZGUsIHRoZSBjdXN0b20KKyAgICAgICAgIyBjYWxsYWJsZSBpcyBjYWxsZWQgb24gZXZlcnkgc3RyaW5nLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZGVjb2RlZCwKKyAgICAgICAgICAgIHNlbGYuZG9jdW1lbnRfZm9yKHUiPGI+PEZPTz48L2I+PGI+QkFSPC9iPiIpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0dGVyX2lzX3J1bl9vbl9hdHRyaWJ1dGVfdmFsdWVzKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSB1JzxhIGhyZWY9Imh0dHA6Ly9hLmNvbT9hPWImYz3DqSI+ZTwvYT4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBhID0gc291cC5hCisKKyAgICAgICAgZXhwZWN0X21pbmltYWwgPSB1JzxhIGhyZWY9Imh0dHA6Ly9hLmNvbT9hPWImYW1wO2M9w6kiPmU8L2E+JworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0X21pbmltYWwsIGEuZGVjb2RlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0X21pbmltYWwsIGEuZGVjb2RlKGZvcm1hdHRlcj0ibWluaW1hbCIpKQorCisgICAgICAgIGV4cGVjdF9odG1sID0gdSc8YSBocmVmPSJodHRwOi8vYS5jb20/YT1iJmFtcDtjPSZlYWN1dGU7Ij5lPC9hPicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RfaHRtbCwgYS5kZWNvZGUoZm9ybWF0dGVyPSJodG1sIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXJrdXAsIGEuZGVjb2RlKGZvcm1hdHRlcj1Ob25lKSkKKyAgICAgICAgZXhwZWN0X3VwcGVyID0gdSc8YSBocmVmPSJIVFRQOi8vQS5DT00/QT1CJkM9w4kiPkU8L2E+JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdF91cHBlciwgYS5kZWNvZGUoZm9ybWF0dGVyPWxhbWJkYSB4OiB4LnVwcGVyKCkpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0dGVyX3NraXBzX3NjcmlwdF90YWdfZm9yX2h0bWxfZG9jdW1lbnRzKHNlbGYpOgorICAgICAgICBkb2MgPSAiIiIKKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgY29uc29sZS5sb2coIjwgPCBoZXkgPiA+ICIpOworICA8L3NjcmlwdD4KKyIiIgorICAgICAgICBlbmNvZGVkID0gQmVhdXRpZnVsU291cChkb2MpLmVuY29kZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiIjwgPCBoZXkgPiA+IiBpbiBlbmNvZGVkKQorCisgICAgZGVmIHRlc3RfZm9ybWF0dGVyX3NraXBzX3N0eWxlX3RhZ19mb3JfaHRtbF9kb2N1bWVudHMoc2VsZik6CisgICAgICAgIGRvYyA9ICIiIgorICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgY29uc29sZS5sb2coIjwgPCBoZXkgPiA+ICIpOworICA8L3N0eWxlPgorIiIiCisgICAgICAgIGVuY29kZWQgPSBCZWF1dGlmdWxTb3VwKGRvYykuZW5jb2RlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiPCA8IGhleSA+ID4iIGluIGVuY29kZWQpCisKKyAgICBkZWYgdGVzdF9wcmV0dGlmeV9sZWF2ZXNfcHJlZm9ybWF0dGVkX3RleHRfYWxvbmUoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxkaXY+ICBmb28gIDxwcmU+ICBcdGJhclxuICBcbiAgPC9wcmU+ICBiYXogICIpCisgICAgICAgICMgRXZlcnl0aGluZyBvdXRzaWRlIHRoZSA8cHJlPiB0YWcgaXMgcmVmb3JtYXR0ZWQsIGJ1dCBldmVyeXRoaW5nCisgICAgICAgICMgaW5zaWRlIGlzIGxlZnQgYWxvbmUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1JzxkaXY+XG4gZm9vXG4gPHByZT4gIFx0YmFyXG4gIFxuICA8L3ByZT5cbiBiYXpcbjwvZGl2PicsCisgICAgICAgICAgICBzb3VwLmRpdi5wcmV0dGlmeSgpKQorCisgICAgZGVmIHRlc3RfcHJldHRpZnlfYWNjZXB0c19mb3JtYXR0ZXIoc2VsZik6CisgICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKCI8aHRtbD48Ym9keT5mb288L2JvZHk+PC9odG1sPiIpCisgICAgICAgIHByZXR0eSA9IHNvdXAucHJldHRpZnkoZm9ybWF0dGVyID0gbGFtYmRhIHg6IHgudXBwZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJGT08iIGluIHByZXR0eSkKKworICAgIGRlZiB0ZXN0X3ByZXR0aWZ5X291dHB1dHNfdW5pY29kZV9ieV9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT48L2E+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlLCB0eXBlKHNvdXAucHJldHRpZnkoKSkpCisKKyAgICBkZWYgdGVzdF9wcmV0dGlmeV9jYW5fZW5jb2RlX2RhdGEoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjwvYT4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzLCB0eXBlKHNvdXAucHJldHRpZnkoInV0Zi04IikpKQorCisgICAgZGVmIHRlc3RfaHRtbF9lbnRpdHlfc3Vic3RpdHV0aW9uX29mZl9ieV9kZWZhdWx0KHNlbGYpOgorICAgICAgICBtYXJrdXAgPSB1IjxiPlNhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ITwvYj4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBlbmNvZGVkID0gc291cC5iLmVuY29kZSgidXRmLTgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZWQsIG1hcmt1cC5lbmNvZGUoJ3V0Zi04JykpCisKKyAgICBkZWYgdGVzdF9lbmNvZGluZ19zdWJzdGl0dXRpb24oc2VsZik6CisgICAgICAgICMgSGVyZSdzIHRoZSA8bWV0YT4gdGFnIHNheWluZyB0aGF0IGEgZG9jdW1lbnQgaXMKKyAgICAgICAgIyBlbmNvZGVkIGluIFNoaWZ0LUpJUy4KKyAgICAgICAgbWV0YV90YWcgPSAoJzxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD14LXNqaXMiICcKKyAgICAgICAgICAgICAgICAgICAgJ2h0dHAtZXF1aXY9IkNvbnRlbnQtdHlwZSIvPicpCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWV0YV90YWcpCisKKyAgICAgICAgIyBQYXJzZSB0aGUgZG9jdW1lbnQsIGFuZCB0aGUgY2hhcnNldCBhcHByZWFycyB1bmNoYW5nZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5tZXRhWydjb250ZW50J10sICd0ZXh0L2h0bWw7IGNoYXJzZXQ9eC1zamlzJykKKworICAgICAgICAjIEVuY29kZSB0aGUgZG9jdW1lbnQgaW50byBzb21lIGVuY29kaW5nLCBhbmQgdGhlIGVuY29kaW5nIGlzCisgICAgICAgICMgc3Vic3RpdHV0ZWQgaW50byB0aGUgbWV0YSB0YWcuCisgICAgICAgIHV0Zl84ID0gc291cC5lbmNvZGUoInV0Zi04IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiY2hhcnNldD11dGYtOCIgaW4gdXRmXzgpCisKKyAgICAgICAgZXVjX2pwID0gc291cC5lbmNvZGUoImV1Y19qcCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiImNoYXJzZXQ9ZXVjX2pwIiBpbiBldWNfanApCisKKyAgICAgICAgc2hpZnRfamlzID0gc291cC5lbmNvZGUoInNoaWZ0LWppcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiImNoYXJzZXQ9c2hpZnQtamlzIiBpbiBzaGlmdF9qaXMpCisKKyAgICAgICAgdXRmXzE2X3UgPSBzb3VwLmVuY29kZSgidXRmLTE2IikuZGVjb2RlKCJ1dGYtMTYiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoImNoYXJzZXQ9dXRmLTE2IiBpbiB1dGZfMTZfdSkKKworICAgIGRlZiB0ZXN0X2VuY29kaW5nX3N1YnN0aXR1dGlvbl9kb2VzbnRfaGFwcGVuX2lmX3RhZ19pc19zdHJhaW5lZChzZWxmKToKKyAgICAgICAgbWFya3VwID0gKCc8aGVhZD48bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9eC1zamlzIiAnCisgICAgICAgICAgICAgICAgICAgICdodHRwLWVxdWl2PSJDb250ZW50LXR5cGUiLz48L2hlYWQ+PHByZT5mb288L3ByZT4nKQorCisgICAgICAgICMgQmVhdXRpZnVsIFNvdXAgdXNlZCB0byB0cnkgdG8gcmV3cml0ZSB0aGUgbWV0YSB0YWcgZXZlbiBpZiB0aGUKKyAgICAgICAgIyBtZXRhIHRhZyBnb3QgZmlsdGVyZWQgb3V0IGJ5IHRoZSBzdHJhaW5lci4gVGhpcyB0ZXN0IG1ha2VzCisgICAgICAgICMgc3VyZSB0aGF0IGRvZXNuJ3QgaGFwcGVuLgorICAgICAgICBzdHJhaW5lciA9IFNvdXBTdHJhaW5lcigncHJlJykKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXAsIHBhcnNlX29ubHk9c3RyYWluZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5jb250ZW50c1swXS5uYW1lLCAncHJlJykKKworY2xhc3MgVGVzdEVuY29kaW5nKFNvdXBUZXN0KToKKyAgICAiIiJUZXN0IHRoZSBhYmlsaXR5IHRvIGVuY29kZSBvYmplY3RzIGludG8gc3RyaW5ncy4iIiIKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfc3RyaW5nX2Nhbl9iZV9lbmNvZGVkKHNlbGYpOgorICAgICAgICBodG1sID0gdSI8Yj5cTntTTk9XTUFOfTwvYj4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoaHRtbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmIuc3RyaW5nLmVuY29kZSgidXRmLTgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdSJcTntTTk9XTUFOfSIuZW5jb2RlKCJ1dGYtOCIpKQorCisgICAgZGVmIHRlc3RfdGFnX2NvbnRhaW5pbmdfdW5pY29kZV9zdHJpbmdfY2FuX2JlX2VuY29kZWQoc2VsZik6CisgICAgICAgIGh0bWwgPSB1IjxiPlxOe1NOT1dNQU59PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChodG1sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5iLmVuY29kZSgidXRmLTgiKSwgaHRtbC5lbmNvZGUoInV0Zi04IikpCisKKyAgICBkZWYgdGVzdF9lbmNvZGluZ19zdWJzdGl0dXRlc191bnJlY29nbml6ZWRfY2hhcmFjdGVyc19ieV9kZWZhdWx0KHNlbGYpOgorICAgICAgICBodG1sID0gdSI8Yj5cTntTTk9XTUFOfTwvYj4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoaHRtbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmIuZW5jb2RlKCJhc2NpaSIpLCBiIjxiPiYjOTczMTs8L2I+IikKKworICAgIGRlZiB0ZXN0X2VuY29kaW5nX2Nhbl9iZV9tYWRlX3N0cmljdChzZWxmKToKKyAgICAgICAgaHRtbCA9IHUiPGI+XE57U05PV01BTn08L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGh0bWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yLCBzb3VwLmVuY29kZSwgImFzY2lpIiwgZXJyb3JzPSJzdHJpY3QiKQorCisgICAgZGVmIHRlc3RfZGVjb2RlX2NvbnRlbnRzKHNlbGYpOgorICAgICAgICBodG1sID0gdSI8Yj5cTntTTk9XTUFOfTwvYj4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoaHRtbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IlxOe1NOT1dNQU59Iiwgc291cC5iLmRlY29kZV9jb250ZW50cygpKQorCisgICAgZGVmIHRlc3RfZW5jb2RlX2NvbnRlbnRzKHNlbGYpOgorICAgICAgICBodG1sID0gdSI8Yj5cTntTTk9XTUFOfTwvYj4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoaHRtbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHUiXE57U05PV01BTn0iLmVuY29kZSgidXRmOCIpLCBzb3VwLmIuZW5jb2RlX2NvbnRlbnRzKAorICAgICAgICAgICAgICAgIGVuY29kaW5nPSJ1dGY4IikpCisKKyAgICBkZWYgdGVzdF9kZXByZWNhdGVkX3JlbmRlckNvbnRlbnRzKHNlbGYpOgorICAgICAgICBodG1sID0gdSI8Yj5cTntTTk9XTUFOfTwvYj4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoaHRtbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHUiXE57U05PV01BTn0iLmVuY29kZSgidXRmOCIpLCBzb3VwLmIucmVuZGVyQ29udGVudHMoKSkKKworY2xhc3MgVGVzdE5hdmlnYWJsZVN0cmluZ1N1YmNsYXNzZXMoU291cFRlc3QpOgorCisgICAgZGVmIHRlc3RfY2RhdGEoc2VsZik6CisgICAgICAgICMgTm9uZSBvZiB0aGUgY3VycmVudCBidWlsZGVycyB0dXJuIENEQVRBIHNlY3Rpb25zIGludG8gQ0RhdGEKKyAgICAgICAgIyBvYmplY3RzLCBidXQgeW91IGNhbiBjcmVhdGUgdGhlbSBtYW51YWxseS4KKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiIikKKyAgICAgICAgY2RhdGEgPSBDRGF0YSgiZm9vIikKKyAgICAgICAgc291cC5pbnNlcnQoMSwgY2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNvdXApLCAiPCFbQ0RBVEFbZm9vXV0+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmZpbmQodGV4dD0iZm9vIiksICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuY29udGVudHNbMF0sICJmb28iKQorCisgICAgZGVmIHRlc3RfY2RhdGFfaXNfbmV2ZXJfZm9ybWF0dGVkKHNlbGYpOgorICAgICAgICAiIiJUZXh0IGluc2lkZSBhIENEYXRhIG9iamVjdCBpcyBwYXNzZWQgaW50byB0aGUgZm9ybWF0dGVyLgorCisgICAgICAgIEJ1dCB0aGUgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuY291bnQgPSAwCisgICAgICAgIGRlZiBpbmNyZW1lbnQoKmFyZ3MpOgorICAgICAgICAgICAgc2VsZi5jb3VudCArPSAxCisgICAgICAgICAgICByZXR1cm4gIkJJVFRFUiBGQUlMVVJFIgorCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIiIpCisgICAgICAgIGNkYXRhID0gQ0RhdGEoIjw+PD48PiIpCisgICAgICAgIHNvdXAuaW5zZXJ0KDEsIGNkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYiI8IVtDREFUQVs8Pjw+PD5dXT4iLCBzb3VwLmVuY29kZShmb3JtYXR0ZXI9aW5jcmVtZW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmNvdW50KQorCisgICAgZGVmIHRlc3RfZG9jdHlwZV9lbmRzX2luX25ld2xpbmUoc2VsZik6CisgICAgICAgICMgVW5saWtlIG90aGVyIE5hdmlnYWJsZVN0cmluZyBzdWJjbGFzc2VzLCBhIERPQ1RZUEUgYWx3YXlzIGVuZHMKKyAgICAgICAgIyBpbiBhIG5ld2xpbmUuCisgICAgICAgIGRvY3R5cGUgPSBEb2N0eXBlKCJmb28iKQorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCIiKQorICAgICAgICBzb3VwLmluc2VydCgxLCBkb2N0eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZW5jb2RlKCksIGIiPCFET0NUWVBFIGZvbz5cbiIpCisKKworY2xhc3MgVGVzdFNvdXBTZWxlY3RvcihUcmVlVGVzdCk6CisKKyAgICBIVE1MID0gIiIiCis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMS8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPlRoZSB0aXRsZTwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImJsYWguY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgaWQ9ImwxIj4KKzwvaGVhZD4KKzxib2R5PgorCis8ZGl2IGlkPSJtYWluIiBjbGFzcz0iZmFuY3kiPgorPGRpdiBpZD0iaW5uZXIiPgorPGgxIGlkPSJoZWFkZXIxIj5BbiBIMTwvaDE+Cis8cD5Tb21lIHRleHQ8L3A+Cis8cCBjbGFzcz0ib25lcCIgaWQ9InAxIj5Tb21lIG1vcmUgdGV4dDwvcD4KKzxoMiBpZD0iaGVhZGVyMiI+QW4gSDI8L2gyPgorPHAgY2xhc3M9ImNsYXNzMSBjbGFzczIgY2xhc3MzIiBpZD0icG11bHRpIj5Bbm90aGVyPC9wPgorPGEgaHJlZj0iaHR0cDovL2JvYi5leGFtcGxlLm9yZy8iIHJlbD0iZnJpZW5kIG1ldCIgaWQ9ImJvYiI+Qm9iPC9hPgorPGgyIGlkPSJoZWFkZXIzIj5Bbm90aGVyIEgyPC9oMj4KKzxhIGlkPSJtZSIgaHJlZj0iaHR0cDovL3NpbW9ud2lsbGlzb24ubmV0LyIgcmVsPSJtZSI+bWU8L2E+Cis8c3BhbiBjbGFzcz0iczEiPgorPGEgaHJlZj0iIyIgaWQ9InMxYTEiPnNwYW4xYTE8L2E+Cis8YSBocmVmPSIjIiBpZD0iczFhMiI+c3BhbjFhMiA8c3BhbiBpZD0iczFhMnMxIj50ZXN0PC9zcGFuPjwvYT4KKzxzcGFuIGNsYXNzPSJzcGFuMiI+Cis8YSBocmVmPSIjIiBpZD0iczJhMSI+c3BhbjJhMTwvYT4KKzwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGFuMyI+PC9zcGFuPgorPC9zcGFuPgorPC9kaXY+Cis8cCBsYW5nPSJlbiIgaWQ9ImxhbmctZW4iPkVuZ2xpc2g8L3A+Cis8cCBsYW5nPSJlbi1nYiIgaWQ9ImxhbmctZW4tZ2IiPkVuZ2xpc2ggVUs8L3A+Cis8cCBsYW5nPSJlbi11cyIgaWQ9ImxhbmctZW4tdXMiPkVuZ2xpc2ggVVM8L3A+Cis8cCBsYW5nPSJmciIgaWQ9ImxhbmctZnIiPkZyZW5jaDwvcD4KKzwvZGl2PgorCis8ZGl2IGlkPSJmb290ZXIiPgorPC9kaXY+CisiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zb3VwID0gQmVhdXRpZnVsU291cChzZWxmLkhUTUwpCisKKyAgICBkZWYgYXNzZXJ0U2VsZWN0cyhzZWxmLCBzZWxlY3RvciwgZXhwZWN0ZWRfaWRzKToKKyAgICAgICAgZWxfaWRzID0gW2VsWydpZCddIGZvciBlbCBpbiBzZWxmLnNvdXAuc2VsZWN0KHNlbGVjdG9yKV0KKyAgICAgICAgZWxfaWRzLnNvcnQoKQorICAgICAgICBleHBlY3RlZF9pZHMuc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfaWRzLCBlbF9pZHMsCisgICAgICAgICAgICAiU2VsZWN0b3IgJXMsIGV4cGVjdGVkIFslc10sIGdvdCBbJXNdIiAlICgKKyAgICAgICAgICAgICAgICBzZWxlY3RvciwgJywgJy5qb2luKGV4cGVjdGVkX2lkcyksICcsICcuam9pbihlbF9pZHMpCisgICAgICAgICAgICApCisgICAgICAgICkKKworICAgIGFzc2VydFNlbGVjdCA9IGFzc2VydFNlbGVjdHMKKworICAgIGRlZiBhc3NlcnRTZWxlY3RNdWx0aXBsZShzZWxmLCAqdGVzdHMpOgorICAgICAgICBmb3Igc2VsZWN0b3IsIGV4cGVjdGVkX2lkcyBpbiB0ZXN0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0KHNlbGVjdG9yLCBleHBlY3RlZF9pZHMpCisKKyAgICBkZWYgdGVzdF9vbmVfdGFnX29uZShzZWxmKToKKyAgICAgICAgZWxzID0gc2VsZi5zb3VwLnNlbGVjdCgndGl0bGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbHMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsc1swXS5uYW1lLCAndGl0bGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsc1swXS5jb250ZW50cywgW3UnVGhlIHRpdGxlJ10pCisKKyAgICBkZWYgdGVzdF9vbmVfdGFnX21hbnkoc2VsZik6CisgICAgICAgIGVscyA9IHNlbGYuc291cC5zZWxlY3QoJ2RpdicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVscyksIDMpCisgICAgICAgIGZvciBkaXYgaW4gZWxzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXYubmFtZSwgJ2RpdicpCisKKyAgICBkZWYgdGVzdF90YWdfaW5fdGFnX29uZShzZWxmKToKKyAgICAgICAgZWxzID0gc2VsZi5zb3VwLnNlbGVjdCgnZGl2IGRpdicpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygnZGl2IGRpdicsIFsnaW5uZXInXSkKKworICAgIGRlZiB0ZXN0X3RhZ19pbl90YWdfbWFueShzZWxmKToKKyAgICAgICAgZm9yIHNlbGVjdG9yIGluICgnaHRtbCBkaXYnLCAnaHRtbCBib2R5IGRpdicsICdib2R5IGRpdicpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNlbGVjdG9yLCBbJ21haW4nLCAnaW5uZXInLCAnZm9vdGVyJ10pCisKKyAgICBkZWYgdGVzdF90YWdfbm9fbWF0Y2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuc291cC5zZWxlY3QoJ2RlbCcpKSwgMCkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfdGFnKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnNvdXAuc2VsZWN0LCAndGFnJXQnKQorCisgICAgZGVmIHRlc3RfaGVhZGVyX3RhZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0TXVsdGlwbGUoCisgICAgICAgICAgICAoJ2gxJywgWydoZWFkZXIxJ10pLAorICAgICAgICAgICAgKCdoMicsIFsnaGVhZGVyMicsICdoZWFkZXIzJ10pLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9jbGFzc19vbmUoc2VsZik6CisgICAgICAgIGZvciBzZWxlY3RvciBpbiAoJy5vbmVwJywgJ3Aub25lcCcsICdodG1sIHAub25lcCcpOgorICAgICAgICAgICAgZWxzID0gc2VsZi5zb3VwLnNlbGVjdChzZWxlY3RvcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVscyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsc1swXS5uYW1lLCAncCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsc1swXVsnY2xhc3MnXSwgWydvbmVwJ10pCisKKyAgICBkZWYgdGVzdF9jbGFzc19taXNtYXRjaGVkX3RhZyhzZWxmKToKKyAgICAgICAgZWxzID0gc2VsZi5zb3VwLnNlbGVjdCgnZGl2Lm9uZXAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbHMpLCAwKQorCisgICAgZGVmIHRlc3Rfb25lX2lkKHNlbGYpOgorICAgICAgICBmb3Igc2VsZWN0b3IgaW4gKCdkaXYjaW5uZXInLCAnI2lubmVyJywgJ2RpdiBkaXYjaW5uZXInKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzZWxlY3RvciwgWydpbm5lciddKQorCisgICAgZGVmIHRlc3RfYmFkX2lkKHNlbGYpOgorICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KCcjZG9lc25vdGV4aXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxzKSwgMCkKKworICAgIGRlZiB0ZXN0X2l0ZW1zX2luX2lkKHNlbGYpOgorICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KCdkaXYjaW5uZXIgcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVscyksIDMpCisgICAgICAgIGZvciBlbCBpbiBlbHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsLm5hbWUsICdwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbHNbMV1bJ2NsYXNzJ10sIFsnb25lcCddKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVsc1swXS5oYXNfYXR0cignY2xhc3MnKSkKKworICAgIGRlZiB0ZXN0X2FfYnVuY2hfb2ZfZW1wdHlzKHNlbGYpOgorICAgICAgICBmb3Igc2VsZWN0b3IgaW4gKCdkaXYjbWFpbiBkZWwnLCAnZGl2I21haW4gZGl2Lm9vcHMnLCAnZGl2IGRpdiNtYWluJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnNvdXAuc2VsZWN0KHNlbGVjdG9yKSksIDApCisKKyAgICBkZWYgdGVzdF9tdWx0aV9jbGFzc19zdXBwb3J0KHNlbGYpOgorICAgICAgICBmb3Igc2VsZWN0b3IgaW4gKCcuY2xhc3MxJywgJ3AuY2xhc3MxJywgJy5jbGFzczInLCAncC5jbGFzczInLAorICAgICAgICAgICAgJy5jbGFzczMnLCAncC5jbGFzczMnLCAnaHRtbCBwLmNsYXNzMicsICdkaXYjaW5uZXIgLmNsYXNzMicpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNlbGVjdG9yLCBbJ3BtdWx0aSddKQorCisgICAgZGVmIHRlc3RfbXVsdGlfY2xhc3Nfc2VsZWN0aW9uKHNlbGYpOgorICAgICAgICBmb3Igc2VsZWN0b3IgaW4gKCcuY2xhc3MxLmNsYXNzMycsICcuY2xhc3MzLmNsYXNzMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJy5jbGFzczEuY2xhc3MyLmNsYXNzMycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNlbGVjdG9yLCBbJ3BtdWx0aSddKQorCisgICAgZGVmIHRlc3RfY2hpbGRfc2VsZWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygnLnMxID4gYScsIFsnczFhMScsICdzMWEyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygnLnMxID4gYSBzcGFuJywgWydzMWEyczEnXSkKKworICAgIGRlZiB0ZXN0X2NoaWxkX3NlbGVjdG9yX2lkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJy5zMSA+IGEjczFhMiBzcGFuJywgWydzMWEyczEnXSkKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9lcXVhbHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0TXVsdGlwbGUoCisgICAgICAgICAgICAoJ3BbY2xhc3M9Im9uZXAiXScsIFsncDEnXSksCisgICAgICAgICAgICAoJ3BbaWQ9InAxIl0nLCBbJ3AxJ10pLAorICAgICAgICAgICAgKCdbY2xhc3M9Im9uZXAiXScsIFsncDEnXSksCisgICAgICAgICAgICAoJ1tpZD0icDEiXScsIFsncDEnXSksCisgICAgICAgICAgICAoJ2xpbmtbcmVsPSJzdHlsZXNoZWV0Il0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdsaW5rW3R5cGU9InRleHQvY3NzIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdsaW5rW2hyZWY9ImJsYWguY3NzIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdsaW5rW2hyZWY9Im5vLWJsYWguY3NzIl0nLCBbXSksCisgICAgICAgICAgICAoJ1tyZWw9InN0eWxlc2hlZXQiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ1t0eXBlPSJ0ZXh0L2NzcyJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnW2hyZWY9ImJsYWguY3NzIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdbaHJlZj0ibm8tYmxhaC5jc3MiXScsIFtdKSwKKyAgICAgICAgICAgICgncFtocmVmPSJuby1ibGFoLmNzcyJdJywgW10pLAorICAgICAgICAgICAgKCdbaHJlZj0ibm8tYmxhaC5jc3MiXScsIFtdKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX3RpbGRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdE11bHRpcGxlKAorICAgICAgICAgICAgKCdwW2NsYXNzfj0iY2xhc3MxIl0nLCBbJ3BtdWx0aSddKSwKKyAgICAgICAgICAgICgncFtjbGFzc349ImNsYXNzMiJdJywgWydwbXVsdGknXSksCisgICAgICAgICAgICAoJ3BbY2xhc3N+PSJjbGFzczMiXScsIFsncG11bHRpJ10pLAorICAgICAgICAgICAgKCdbY2xhc3N+PSJjbGFzczEiXScsIFsncG11bHRpJ10pLAorICAgICAgICAgICAgKCdbY2xhc3N+PSJjbGFzczIiXScsIFsncG11bHRpJ10pLAorICAgICAgICAgICAgKCdbY2xhc3N+PSJjbGFzczMiXScsIFsncG11bHRpJ10pLAorICAgICAgICAgICAgKCdhW3JlbH49ImZyaWVuZCJdJywgWydib2InXSksCisgICAgICAgICAgICAoJ2FbcmVsfj0ibWV0Il0nLCBbJ2JvYiddKSwKKyAgICAgICAgICAgICgnW3JlbH49ImZyaWVuZCJdJywgWydib2InXSksCisgICAgICAgICAgICAoJ1tyZWx+PSJtZXQiXScsIFsnYm9iJ10pLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfc3RhcnRzd2l0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RNdWx0aXBsZSgKKyAgICAgICAgICAgICgnW3JlbF49InN0eWxlIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdsaW5rW3JlbF49InN0eWxlIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdub3RsaW5rW3JlbF49Im5vdHN0eWxlIl0nLCBbXSksCisgICAgICAgICAgICAoJ1tyZWxePSJub3RzdHlsZSJdJywgW10pLAorICAgICAgICAgICAgKCdsaW5rW3JlbF49Im5vdHN0eWxlIl0nLCBbXSksCisgICAgICAgICAgICAoJ2xpbmtbaHJlZl49ImJsYSJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnYVtocmVmXj0iaHR0cDovLyJdJywgWydib2InLCAnbWUnXSksCisgICAgICAgICAgICAoJ1tocmVmXj0iaHR0cDovLyJdJywgWydib2InLCAnbWUnXSksCisgICAgICAgICAgICAoJ1tpZF49InAiXScsIFsncG11bHRpJywgJ3AxJ10pLAorICAgICAgICAgICAgKCdbaWRePSJtIl0nLCBbJ21lJywgJ21haW4nXSksCisgICAgICAgICAgICAoJ2RpdltpZF49Im0iXScsIFsnbWFpbiddKSwKKyAgICAgICAgICAgICgnYVtpZF49Im0iXScsIFsnbWUnXSksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9lbmRzd2l0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RNdWx0aXBsZSgKKyAgICAgICAgICAgICgnW2hyZWYkPSIuY3NzIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdsaW5rW2hyZWYkPSIuY3NzIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdsaW5rW2lkJD0iMSJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnW2lkJD0iMSJdJywgWydsMScsICdwMScsICdoZWFkZXIxJywgJ3MxYTEnLCAnczJhMScsICdzMWEyczEnXSksCisgICAgICAgICAgICAoJ2RpdltpZCQ9IjEiXScsIFtdKSwKKyAgICAgICAgICAgICgnW2lkJD0ibm9lbmRpbmciXScsIFtdKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX2NvbnRhaW5zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdE11bHRpcGxlKAorICAgICAgICAgICAgIyBGcm9tIHRlc3RfYXR0cmlidXRlX3N0YXJ0c3dpdGgKKyAgICAgICAgICAgICgnW3JlbCo9InN0eWxlIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdsaW5rW3JlbCo9InN0eWxlIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdub3RsaW5rW3JlbCo9Im5vdHN0eWxlIl0nLCBbXSksCisgICAgICAgICAgICAoJ1tyZWwqPSJub3RzdHlsZSJdJywgW10pLAorICAgICAgICAgICAgKCdsaW5rW3JlbCo9Im5vdHN0eWxlIl0nLCBbXSksCisgICAgICAgICAgICAoJ2xpbmtbaHJlZio9ImJsYSJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnYVtocmVmKj0iaHR0cDovLyJdJywgWydib2InLCAnbWUnXSksCisgICAgICAgICAgICAoJ1tocmVmKj0iaHR0cDovLyJdJywgWydib2InLCAnbWUnXSksCisgICAgICAgICAgICAoJ1tpZCo9InAiXScsIFsncG11bHRpJywgJ3AxJ10pLAorICAgICAgICAgICAgKCdkaXZbaWQqPSJtIl0nLCBbJ21haW4nXSksCisgICAgICAgICAgICAoJ2FbaWQqPSJtIl0nLCBbJ21lJ10pLAorICAgICAgICAgICAgIyBGcm9tIHRlc3RfYXR0cmlidXRlX2VuZHN3aXRoCisgICAgICAgICAgICAoJ1tocmVmKj0iLmNzcyJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnbGlua1tocmVmKj0iLmNzcyJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnbGlua1tpZCo9IjEiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ1tpZCo9IjEiXScsIFsnbDEnLCAncDEnLCAnaGVhZGVyMScsICdzMWExJywgJ3MxYTInLCAnczJhMScsICdzMWEyczEnXSksCisgICAgICAgICAgICAoJ2RpdltpZCo9IjEiXScsIFtdKSwKKyAgICAgICAgICAgICgnW2lkKj0ibm9lbmRpbmciXScsIFtdKSwKKyAgICAgICAgICAgICMgTmV3IGZvciB0aGlzIHRlc3QKKyAgICAgICAgICAgICgnW2hyZWYqPSIuIl0nLCBbJ2JvYicsICdtZScsICdsMSddKSwKKyAgICAgICAgICAgICgnYVtocmVmKj0iLiJdJywgWydib2InLCAnbWUnXSksCisgICAgICAgICAgICAoJ2xpbmtbaHJlZio9Ii4iXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2RpdltpZCo9Im4iXScsIFsnbWFpbicsICdpbm5lciddKSwKKyAgICAgICAgICAgICgnZGl2W2lkKj0ibm4iXScsIFsnaW5uZXInXSksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9leGFjdF9vcl9oeXBlbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RNdWx0aXBsZSgKKyAgICAgICAgICAgICgncFtsYW5nfD0iZW4iXScsIFsnbGFuZy1lbicsICdsYW5nLWVuLWdiJywgJ2xhbmctZW4tdXMnXSksCisgICAgICAgICAgICAoJ1tsYW5nfD0iZW4iXScsIFsnbGFuZy1lbicsICdsYW5nLWVuLWdiJywgJ2xhbmctZW4tdXMnXSksCisgICAgICAgICAgICAoJ3BbbGFuZ3w9ImZyIl0nLCBbJ2xhbmctZnInXSksCisgICAgICAgICAgICAoJ3BbbGFuZ3w9ImdiIl0nLCBbXSksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9leGlzdHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0TXVsdGlwbGUoCisgICAgICAgICAgICAoJ1tyZWxdJywgWydsMScsICdib2InLCAnbWUnXSksCisgICAgICAgICAgICAoJ2xpbmtbcmVsXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2FbcmVsXScsIFsnYm9iJywgJ21lJ10pLAorICAgICAgICAgICAgKCdbbGFuZ10nLCBbJ2xhbmctZW4nLCAnbGFuZy1lbi1nYicsICdsYW5nLWVuLXVzJywgJ2xhbmctZnInXSksCisgICAgICAgICAgICAoJ3BbY2xhc3NdJywgWydwMScsICdwbXVsdGknXSksCisgICAgICAgICAgICAoJ1tibGFoXScsIFtdKSwKKyAgICAgICAgICAgICgncFtibGFoXScsIFtdKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfbnRoX29mX3R5cGUoc2VsZik6CisgICAgICAgICMgVHJ5IHRvIHNlbGVjdCBmaXJzdCBwYXJhZ3JhcGgKKyAgICAgICAgZWxzID0gc2VsZi5zb3VwLnNlbGVjdCgnZGl2I2lubmVyIHA6bnRoLW9mLXR5cGUoMSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbHMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsc1swXS5zdHJpbmcsIHUnU29tZSB0ZXh0JykKKworICAgICAgICAjIFRyeSB0byBzZWxlY3QgdGhpcmQgcGFyYWdyYXBoCisgICAgICAgIGVscyA9IHNlbGYuc291cC5zZWxlY3QoJ2RpdiNpbm5lciBwOm50aC1vZi10eXBlKDMpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbHNbMF0uc3RyaW5nLCB1J0Fub3RoZXInKQorCisgICAgICAgICMgVHJ5IHRvIHNlbGVjdCAobm9uLWV4aXN0ZW50ISkgZm91cnRoIHBhcmFncmFwaAorICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KCdkaXYjaW5uZXIgcDpudGgtb2YtdHlwZSg0KScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVscyksIDApCisKKyAgICAgICAgIyBQYXNzIGluIGFuIGludmFsaWQgdmFsdWUuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5zb3VwLnNlbGVjdCwgJ2RpdiBwOm50aC1vZi10eXBlKDApJykKKworICAgIGRlZiB0ZXN0X250aF9vZl90eXBlX2RpcmVjdF9kZXNjZW5kYW50KHNlbGYpOgorICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KCdkaXYjaW5uZXIgPiBwOm50aC1vZi10eXBlKDEpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbHNbMF0uc3RyaW5nLCB1J1NvbWUgdGV4dCcpCisKKyAgICBkZWYgdGVzdF9pZF9jaGlsZF9zZWxlY3Rvcl9udGhfb2ZfdHlwZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCcjaW5uZXIgPiBwOm50aC1vZi10eXBlKDIpJywgWydwMSddKQorCisgICAgZGVmIHRlc3Rfc2VsZWN0X29uX2VsZW1lbnQoc2VsZik6CisgICAgICAgICMgT3RoZXIgdGVzdHMgb3BlcmF0ZSBvbiB0aGUgdHJlZTsgdGhpcyBvcGVyYXRlcyBvbiBhbiBlbGVtZW50CisgICAgICAgICMgd2l0aGluIHRoZSB0cmVlLgorICAgICAgICBpbm5lciA9IHNlbGYuc291cC5maW5kKCJkaXYiLCBpZD0ibWFpbiIpCisgICAgICAgIHNlbGVjdGVkID0gaW5uZXIuc2VsZWN0KCJkaXYiKQorICAgICAgICAjIFRoZSA8ZGl2IGlkPSJpbm5lciI+IHRhZyB3YXMgc2VsZWN0ZWQuIFRoZSA8ZGl2IGlkPSJmb290ZXIiPgorICAgICAgICAjIHRhZyB3YXMgbm90LgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHNJRHMoc2VsZWN0ZWQsIFsnaW5uZXInXSkKKworICAgIGRlZiB0ZXN0X292ZXJzcGVjaWZpZWRfY2hpbGRfaWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygiLmZhbmN5ICNpbm5lciIsIFsnaW5uZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCIubm9ybWFsICNpbm5lciIsIFtdKQorCisgICAgZGVmIHRlc3RfYWRqYWNlbnRfc2libGluZ19zZWxlY3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCcjcDEgKyBoMicsIFsnaGVhZGVyMiddKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJyNwMSArIGgyICsgcCcsIFsncG11bHRpJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygnI3AxICsgI2hlYWRlcjIgKyAuY2xhc3MxJywgWydwbXVsdGknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgc2VsZi5zb3VwLnNlbGVjdCgnI3AxICsgcCcpKQorCisgICAgZGVmIHRlc3RfZ2VuZXJhbF9zaWJsaW5nX3NlbGVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJyNwMSB+IGgyJywgWydoZWFkZXIyJywgJ2hlYWRlcjMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCcjcDEgfiAjaGVhZGVyMicsIFsnaGVhZGVyMiddKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJyNwMSB+IGgyICsgYScsIFsnbWUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCcjcDEgfiBoMiArIFtyZWw9Im1lIl0nLCBbJ21lJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHNlbGYuc291cC5zZWxlY3QoJyNpbm5lciB+IGgyJykpCisKKyAgICBkZWYgdGVzdF9kYW5nbGluZ19jb21iaW5hdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnNvdXAuc2VsZWN0LCAnaDEgPicpCisKKyAgICBkZWYgdGVzdF9zaWJsaW5nX2NvbWJpbmF0b3Jfd29udF9zZWxlY3Rfc2FtZV90YWdfdHdpY2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygncFtsYW5nXSB+IHAnLCBbJ2xhbmctZW4tZ2InLCAnbGFuZy1lbi11cycsICdsYW5nLWZyJ10pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2NvZGVnZW4ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2NvZGVnZW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3NzJkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvY29kZWdlbi5weQpAQCAtMCwwICsxLDU3MCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKyIiIgorICAgIGNvZGVnZW4KKyAgICB+fn5+fn5+CisKKyAgICBFeHRlbnNpb24gdG8gYXN0IHRoYXQgYWxsb3cgYXN0IC0+IHB5dGhvbiBjb2RlIGdlbmVyYXRpb24uCisKKyAgICA6Y29weXJpZ2h0OiBDb3B5cmlnaHQgMjAwOCBieSBBcm1pbiBSb25hY2hlci4KKyAgICA6bGljZW5zZTogQlNELgorIiIiCitmcm9tIGFzdCBpbXBvcnQgKgorCitCT09MT1BfU1lNQk9MUyA9IHsKKyAgICBBbmQ6ICAgICAgICAnYW5kJywKKyAgICBPcjogICAgICAgICAnb3InCit9CisKK0JJTk9QX1NZTUJPTFMgPSB7CisgICAgQWRkOiAgICAgICAgJysnLAorICAgIFN1YjogICAgICAgICctJywKKyAgICBNdWx0OiAgICAgICAnKicsCisgICAgRGl2OiAgICAgICAgJy8nLAorICAgIEZsb29yRGl2OiAgICcvLycsCisgICAgTW9kOiAgICAgICAgJyUnLAorICAgIExTaGlmdDogICAgICc8PCcsCisgICAgUlNoaWZ0OiAgICAgJz4+JywKKyAgICBCaXRPcjogICAgICAnfCcsCisgICAgQml0QW5kOiAgICAgJyYnLAorICAgIEJpdFhvcjogICAgICdeJworfQorCitDTVBPUF9TWU1CT0xTID0geworICAgIEVxOiAgICAgICAgICc9PScsCisgICAgR3Q6ICAgICAgICAgJz4nLAorICAgIEd0RTogICAgICAgICc+PScsCisgICAgSW46ICAgICAgICAgJ2luJywKKyAgICBJczogICAgICAgICAnaXMnLAorICAgIElzTm90OiAgICAgICdpcyBub3QnLAorICAgIEx0OiAgICAgICAgICc8JywKKyAgICBMdEU6ICAgICAgICAnPD0nLAorICAgIE5vdEVxOiAgICAgICchPScsCisgICAgTm90SW46ICAgICAgJ25vdCBpbicKK30KKworVU5BUllPUF9TWU1CT0xTID0geworICAgIEludmVydDogICAgICd+JywKKyAgICBOb3Q6ICAgICAgICAnbm90JywKKyAgICBVQWRkOiAgICAgICAnKycsCisgICAgVVN1YjogICAgICAgJy0nCit9CisKK0FMTF9TWU1CT0xTID0ge30KK0FMTF9TWU1CT0xTLnVwZGF0ZShCT09MT1BfU1lNQk9MUykKK0FMTF9TWU1CT0xTLnVwZGF0ZShCSU5PUF9TWU1CT0xTKQorQUxMX1NZTUJPTFMudXBkYXRlKENNUE9QX1NZTUJPTFMpCitBTExfU1lNQk9MUy51cGRhdGUoVU5BUllPUF9TWU1CT0xTKQorCitkZWYgdG9fc291cmNlKG5vZGUsIGluZGVudF93aXRoPScgJyAqIDQsIGFkZF9saW5lX2luZm9ybWF0aW9uPUZhbHNlKToKKyAgICAiIiJUaGlzIGZ1bmN0aW9uIGNhbiBjb252ZXJ0IGEgbm9kZSB0cmVlIGJhY2sgaW50byBweXRob24gc291cmNlY29kZS4KKyAgICBUaGlzIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLCBlc3BlY2lhbGx5IGlmIHlvdSdyZSBkZWFsaW5nIHdpdGgKKyAgICBjdXN0b20gYXN0cyBub3QgZ2VuZXJhdGVkIGJ5IHB5dGhvbiBpdHNlbGYuCisKKyAgICBJdCBjb3VsZCBiZSB0aGF0IHRoZSBzb3VyY2Vjb2RlIGlzIGV2YWx1YWJsZSB3aGVuIHRoZSBBU1QgaXRzZWxmIGlzIG5vdAorICAgIGNvbXBpbGFibGUgLyBldmFsdWFibGUuICBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgdGhlIEFTVCBjb250YWlucyBzb21lCisgICAgbW9yZSBkYXRhIHRoYW4gcmVndWxhciBzb3VyY2Vjb2RlIGRvZXMsIHdoaWNoIGlzIGRyb3BwZWQgZHVyaW5nCisgICAgY29udmVyc2lvbi4KKworICAgIEVhY2ggbGV2ZWwgb2YgaW5kZW50YXRpb24gaXMgcmVwbGFjZWQgd2l0aCBgaW5kZW50X3dpdGhgLiAgUGVyIGRlZmF1bHQgdGhpcworICAgIHBhcmFtZXRlciBpcyBlcXVhbCB0byBmb3VyIHNwYWNlcyBhcyBzdWdnZXN0ZWQgYnkgUEVQIDgsIGJ1dCBpdCBtaWdodCBiZQorICAgIGFkanVzdGVkIHRvIG1hdGNoIHRoZSBhcHBsaWNhdGlvbidzIHN0eWxlZ3VpZGUuCisKKyAgICBJZiBgYWRkX2xpbmVfaW5mb3JtYXRpb25gIGlzIHNldCB0byBgVHJ1ZWAgY29tbWVudHMgZm9yIHRoZSBsaW5lIG51bWJlcnMKKyAgICBvZiB0aGUgbm9kZXMgYXJlIGFkZGVkIHRvIHRoZSBvdXRwdXQuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHNwb3Qgd3JvbmcgbGluZQorICAgIG51bWJlciBpbmZvcm1hdGlvbiBvZiBzdGF0ZW1lbnQgbm9kZXMuCisgICAgIiIiCisgICAgZ2VuZXJhdG9yID0gU291cmNlR2VuZXJhdG9yKGluZGVudF93aXRoLCBhZGRfbGluZV9pbmZvcm1hdGlvbikKKyAgICBnZW5lcmF0b3IudmlzaXQobm9kZSkKKyAgICByZXR1cm4gJycuam9pbihnZW5lcmF0b3IucmVzdWx0KQorCisKK2NsYXNzIFNvdXJjZUdlbmVyYXRvcihOb2RlVmlzaXRvcik6CisgICAgIiIiVGhpcyB2aXNpdG9yIGlzIGFibGUgdG8gdHJhbnNmb3JtIGEgd2VsbCBmb3JtZWQgc3ludGF4IHRyZWUgaW50byBweXRob24KKyAgICBzb3VyY2Vjb2RlLiAgRm9yIG1vcmUgZGV0YWlscyBoYXZlIGEgbG9vayBhdCB0aGUgZG9jc3RyaW5nIG9mIHRoZQorICAgIGBub2RlX3RvX3NvdXJjZWAgZnVuY3Rpb24uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW5kZW50X3dpdGgsIGFkZF9saW5lX2luZm9ybWF0aW9uPUZhbHNlKToKKyAgICAgICAgc2VsZi5yZXN1bHQgPSBbXQorICAgICAgICBzZWxmLmluZGVudF93aXRoID0gaW5kZW50X3dpdGgKKyAgICAgICAgc2VsZi5hZGRfbGluZV9pbmZvcm1hdGlvbiA9IGFkZF9saW5lX2luZm9ybWF0aW9uCisgICAgICAgIHNlbGYuaW5kZW50YXRpb24gPSAwCisgICAgICAgIHNlbGYubmV3X2xpbmVzID0gMAorCisgICAgZGVmIHdyaXRlKHNlbGYsIHgpOgorICAgICAgICBpZiBzZWxmLm5ld19saW5lczoKKyAgICAgICAgICAgIGlmIHNlbGYucmVzdWx0OgorICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0LmFwcGVuZCgnXG4nICogc2VsZi5uZXdfbGluZXMpCisgICAgICAgICAgICBzZWxmLnJlc3VsdC5hcHBlbmQoc2VsZi5pbmRlbnRfd2l0aCAqIHNlbGYuaW5kZW50YXRpb24pCisgICAgICAgICAgICBzZWxmLm5ld19saW5lcyA9IDAKKyAgICAgICAgc2VsZi5yZXN1bHQuYXBwZW5kKHgpCisKKyAgICBkZWYgbmV3bGluZShzZWxmLCBub2RlPU5vbmUsIGV4dHJhPTApOgorICAgICAgICBzZWxmLm5ld19saW5lcyA9IG1heChzZWxmLm5ld19saW5lcywgMSArIGV4dHJhKQorICAgICAgICBpZiBub2RlIGlzIG5vdCBOb25lIGFuZCBzZWxmLmFkZF9saW5lX2luZm9ybWF0aW9uOgorICAgICAgICAgICAgc2VsZi53cml0ZSgnIyBsaW5lOiAlcycgJSBub2RlLmxpbmVubykKKyAgICAgICAgICAgIHNlbGYubmV3X2xpbmVzID0gMQorCisgICAgZGVmIGJvZHkoc2VsZiwgc3RhdGVtZW50cyk6CisgICAgICAgIHNlbGYubmV3X2xpbmUgPSBUcnVlCisgICAgICAgIHNlbGYuaW5kZW50YXRpb24gKz0gMQorICAgICAgICBmb3Igc3RtdCBpbiBzdGF0ZW1lbnRzOgorICAgICAgICAgICAgc2VsZi52aXNpdChzdG10KQorICAgICAgICBzZWxmLmluZGVudGF0aW9uIC09IDEKKworICAgIGRlZiBib2R5X29yX2Vsc2Uoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYuYm9keShub2RlLmJvZHkpCisgICAgICAgIGlmIG5vZGUub3JlbHNlOgorICAgICAgICAgICAgc2VsZi5uZXdsaW5lKCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJ2Vsc2U6JykKKyAgICAgICAgICAgIHNlbGYuYm9keShub2RlLm9yZWxzZSkKKworICAgIGRlZiBzaWduYXR1cmUoc2VsZiwgbm9kZSk6CisgICAgICAgIHdhbnRfY29tbWEgPSBbXQorICAgICAgICBkZWYgd3JpdGVfY29tbWEoKToKKyAgICAgICAgICAgIGlmIHdhbnRfY29tbWE6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnLCAnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3YW50X2NvbW1hLmFwcGVuZChUcnVlKQorCisgICAgICAgIHBhZGRpbmcgPSBbTm9uZV0gKiAobGVuKG5vZGUuYXJncykgLSBsZW4obm9kZS5kZWZhdWx0cykpCisgICAgICAgIGZvciBhcmcsIGRlZmF1bHQgaW4gemlwKG5vZGUuYXJncywgcGFkZGluZyArIG5vZGUuZGVmYXVsdHMpOgorICAgICAgICAgICAgd3JpdGVfY29tbWEoKQorICAgICAgICAgICAgc2VsZi52aXNpdChhcmcpCisgICAgICAgICAgICBpZiBkZWZhdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJz0nKQorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQoZGVmYXVsdCkKKyAgICAgICAgaWYgbm9kZS52YXJhcmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB3cml0ZV9jb21tYSgpCisgICAgICAgICAgICBzZWxmLndyaXRlKCcqJyArIG5vZGUudmFyYXJnKQorICAgICAgICBpZiBub2RlLmt3YXJnIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd3JpdGVfY29tbWEoKQorICAgICAgICAgICAgc2VsZi53cml0ZSgnKionICsgbm9kZS5rd2FyZykKKworICAgIGRlZiBkZWNvcmF0b3JzKHNlbGYsIG5vZGUpOgorICAgICAgICBmb3IgZGVjb3JhdG9yIGluIG5vZGUuZGVjb3JhdG9yX2xpc3Q6CisgICAgICAgICAgICBzZWxmLm5ld2xpbmUoZGVjb3JhdG9yKQorICAgICAgICAgICAgc2VsZi53cml0ZSgnQCcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KGRlY29yYXRvcikKKworICAgICMgU3RhdGVtZW50cworCisgICAgZGVmIHZpc2l0X0Fzc2lnbihzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIGZvciBpZHgsIHRhcmdldCBpbiBlbnVtZXJhdGUobm9kZS50YXJnZXRzKToKKyAgICAgICAgICAgIGlmIGlkeDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KHRhcmdldCkKKyAgICAgICAgc2VsZi53cml0ZSgnID0gJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnZhbHVlKQorCisgICAgZGVmIHZpc2l0X0F1Z0Fzc2lnbihzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS50YXJnZXQpCisgICAgICAgIHNlbGYud3JpdGUoQklOT1BfU1lNQk9MU1t0eXBlKG5vZGUub3ApXSArICc9JykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnZhbHVlKQorCisgICAgZGVmIHZpc2l0X0ltcG9ydEZyb20oc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdmcm9tICVzJXMgaW1wb3J0ICcgJSAoJy4nICogbm9kZS5sZXZlbCwgbm9kZS5tb2R1bGUpKQorICAgICAgICBmb3IgaWR4LCBpdGVtIGluIGVudW1lcmF0ZShub2RlLm5hbWVzKToKKyAgICAgICAgICAgIGlmIGlkeDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICBzZWxmLndyaXRlKGl0ZW0pCisKKyAgICBkZWYgdmlzaXRfSW1wb3J0KHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgZm9yIGl0ZW0gaW4gbm9kZS5uYW1lczoKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJ2ltcG9ydCAnKQorICAgICAgICAgICAgc2VsZi52aXNpdChpdGVtKQorCisgICAgZGVmIHZpc2l0X0V4cHIoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLmdlbmVyaWNfdmlzaXQobm9kZSkKKworICAgIGRlZiB2aXNpdF9GdW5jdGlvbkRlZihzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKGV4dHJhPTEpCisgICAgICAgIHNlbGYuZGVjb3JhdG9ycyhub2RlKQorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnZGVmICVzKCcgJSBub2RlLm5hbWUpCisgICAgICAgIHNlbGYuc2lnbmF0dXJlKG5vZGUuYXJncykKKyAgICAgICAgc2VsZi53cml0ZSgnKTonKQorICAgICAgICBzZWxmLmJvZHkobm9kZS5ib2R5KQorCisgICAgZGVmIHZpc2l0X0NsYXNzRGVmKHNlbGYsIG5vZGUpOgorICAgICAgICBoYXZlX2FyZ3MgPSBbXQorICAgICAgICBkZWYgcGFyZW5fb3JfY29tbWEoKToKKyAgICAgICAgICAgIGlmIGhhdmVfYXJnczoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGhhdmVfYXJncy5hcHBlbmQoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcoJykKKworICAgICAgICBzZWxmLm5ld2xpbmUoZXh0cmE9MikKKyAgICAgICAgc2VsZi5kZWNvcmF0b3JzKG5vZGUpCisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdjbGFzcyAlcycgJSBub2RlLm5hbWUpCisgICAgICAgIGZvciBiYXNlIGluIG5vZGUuYmFzZXM6CisgICAgICAgICAgICBwYXJlbl9vcl9jb21tYSgpCisgICAgICAgICAgICBzZWxmLnZpc2l0KGJhc2UpCisgICAgICAgICMgWFhYOiB0aGUgaWYgaGVyZSBpcyB1c2VkIHRvIGtlZXAgdGhpcyBtb2R1bGUgY29tcGF0aWJsZQorICAgICAgICAjICAgICAgd2l0aCBweXRob24gMi42LgorICAgICAgICBpZiBoYXNhdHRyKG5vZGUsICdrZXl3b3JkcycpOgorICAgICAgICAgICAgZm9yIGtleXdvcmQgaW4gbm9kZS5rZXl3b3JkczoKKyAgICAgICAgICAgICAgICBwYXJlbl9vcl9jb21tYSgpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShrZXl3b3JkLmFyZyArICc9JykKKyAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KGtleXdvcmQudmFsdWUpCisgICAgICAgICAgICBpZiBub2RlLnN0YXJhcmdzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHBhcmVuX29yX2NvbW1hKCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcqJykKKyAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUuc3RhcmFyZ3MpCisgICAgICAgICAgICBpZiBub2RlLmt3YXJncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBwYXJlbl9vcl9jb21tYSgpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnKionKQorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5rd2FyZ3MpCisgICAgICAgIHNlbGYud3JpdGUoaGF2ZV9hcmdzIGFuZCAnKTonIG9yICc6JykKKyAgICAgICAgc2VsZi5ib2R5KG5vZGUuYm9keSkKKworICAgIGRlZiB2aXNpdF9JZihzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ2lmICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS50ZXN0KQorICAgICAgICBzZWxmLndyaXRlKCc6JykKKyAgICAgICAgc2VsZi5ib2R5KG5vZGUuYm9keSkKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGVsc2VfID0gbm9kZS5vcmVsc2UKKyAgICAgICAgICAgIGlmIGxlbihlbHNlXykgPT0gMSBhbmQgaXNpbnN0YW5jZShlbHNlX1swXSwgSWYpOgorICAgICAgICAgICAgICAgIG5vZGUgPSBlbHNlX1swXQorICAgICAgICAgICAgICAgIHNlbGYubmV3bGluZSgpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnZWxpZiAnKQorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS50ZXN0KQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJzonKQorICAgICAgICAgICAgICAgIHNlbGYuYm9keShub2RlLmJvZHkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYubmV3bGluZSgpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnZWxzZTonKQorICAgICAgICAgICAgICAgIHNlbGYuYm9keShlbHNlXykKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgZGVmIHZpc2l0X0ZvcihzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ2ZvciAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudGFyZ2V0KQorICAgICAgICBzZWxmLndyaXRlKCcgaW4gJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLml0ZXIpCisgICAgICAgIHNlbGYud3JpdGUoJzonKQorICAgICAgICBzZWxmLmJvZHlfb3JfZWxzZShub2RlKQorCisgICAgZGVmIHZpc2l0X1doaWxlKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnd2hpbGUgJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnRlc3QpCisgICAgICAgIHNlbGYud3JpdGUoJzonKQorICAgICAgICBzZWxmLmJvZHlfb3JfZWxzZShub2RlKQorCisgICAgZGVmIHZpc2l0X1dpdGgoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCd3aXRoICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS5jb250ZXh0X2V4cHIpCisgICAgICAgIGlmIG5vZGUub3B0aW9uYWxfdmFycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJyBhcyAnKQorICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLm9wdGlvbmFsX3ZhcnMpCisgICAgICAgIHNlbGYud3JpdGUoJzonKQorICAgICAgICBzZWxmLmJvZHkobm9kZS5ib2R5KQorCisgICAgZGVmIHZpc2l0X1Bhc3Moc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdwYXNzJykKKworICAgIGRlZiB2aXNpdF9QcmludChzZWxmLCBub2RlKToKKyAgICAgICAgIyBYWFg6IHB5dGhvbiAyLjYgb25seQorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgncHJpbnQgJykKKyAgICAgICAgd2FudF9jb21tYSA9IEZhbHNlCisgICAgICAgIGlmIG5vZGUuZGVzdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJyA+PiAnKQorICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLmRlc3QpCisgICAgICAgICAgICB3YW50X2NvbW1hID0gVHJ1ZQorICAgICAgICBmb3IgdmFsdWUgaW4gbm9kZS52YWx1ZXM6CisgICAgICAgICAgICBpZiB3YW50X2NvbW1hOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJywgJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQodmFsdWUpCisgICAgICAgICAgICB3YW50X2NvbW1hID0gVHJ1ZQorICAgICAgICBpZiBub3Qgbm9kZS5ubDoKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJywnKQorCisgICAgZGVmIHZpc2l0X0RlbGV0ZShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ2RlbCAnKQorICAgICAgICBmb3IgaWR4LCB0YXJnZXQgaW4gZW51bWVyYXRlKG5vZGUpOgorICAgICAgICAgICAgaWYgaWR4OgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJywgJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQodGFyZ2V0KQorCisgICAgZGVmIHZpc2l0X1RyeUV4Y2VwdChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ3RyeTonKQorICAgICAgICBzZWxmLmJvZHkobm9kZS5ib2R5KQorICAgICAgICBmb3IgaGFuZGxlciBpbiBub2RlLmhhbmRsZXJzOgorICAgICAgICAgICAgc2VsZi52aXNpdChoYW5kbGVyKQorCisgICAgZGVmIHZpc2l0X1RyeUZpbmFsbHkoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCd0cnk6JykKKyAgICAgICAgc2VsZi5ib2R5KG5vZGUuYm9keSkKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ2ZpbmFsbHk6JykKKyAgICAgICAgc2VsZi5ib2R5KG5vZGUuZmluYWxib2R5KQorCisgICAgZGVmIHZpc2l0X0dsb2JhbChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ2dsb2JhbCAnICsgJywgJy5qb2luKG5vZGUubmFtZXMpKQorCisgICAgZGVmIHZpc2l0X05vbmxvY2FsKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnbm9ubG9jYWwgJyArICcsICcuam9pbihub2RlLm5hbWVzKSkKKworICAgIGRlZiB2aXNpdF9SZXR1cm4oc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdyZXR1cm4gJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnZhbHVlKQorCisgICAgZGVmIHZpc2l0X0JyZWFrKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnYnJlYWsnKQorCisgICAgZGVmIHZpc2l0X0NvbnRpbnVlKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnY29udGludWUnKQorCisgICAgZGVmIHZpc2l0X1JhaXNlKHNlbGYsIG5vZGUpOgorICAgICAgICAjIFhYWDogUHl0aG9uIDIuNiAvIDMuMCBjb21wYXRpYmlsaXR5CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdyYWlzZScpCisgICAgICAgIGlmIGhhc2F0dHIobm9kZSwgJ2V4YycpIGFuZCBub2RlLmV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJyAnKQorICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLmV4YykKKyAgICAgICAgICAgIGlmIG5vZGUuY2F1c2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnIGZyb20gJykKKyAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUuY2F1c2UpCisgICAgICAgIGVsaWYgaGFzYXR0cihub2RlLCAndHlwZScpIGFuZCBub2RlLnR5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUudHlwZSkKKyAgICAgICAgICAgIGlmIG5vZGUuaW5zdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLmluc3QpCisgICAgICAgICAgICBpZiBub2RlLnRiYWNrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJywgJykKKyAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUudGJhY2spCisKKyAgICAjIEV4cHJlc3Npb25zCisKKyAgICBkZWYgdmlzaXRfQXR0cmlidXRlKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudmFsdWUpCisgICAgICAgIHNlbGYud3JpdGUoJy4nICsgbm9kZS5hdHRyKQorCisgICAgZGVmIHZpc2l0X0NhbGwoc2VsZiwgbm9kZSk6CisgICAgICAgIHdhbnRfY29tbWEgPSBbXQorICAgICAgICBkZWYgd3JpdGVfY29tbWEoKToKKyAgICAgICAgICAgIGlmIHdhbnRfY29tbWE6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnLCAnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3YW50X2NvbW1hLmFwcGVuZChUcnVlKQorCisgICAgICAgIHNlbGYudmlzaXQobm9kZS5mdW5jKQorICAgICAgICBzZWxmLndyaXRlKCcoJykKKyAgICAgICAgZm9yIGFyZyBpbiBub2RlLmFyZ3M6CisgICAgICAgICAgICB3cml0ZV9jb21tYSgpCisgICAgICAgICAgICBzZWxmLnZpc2l0KGFyZykKKyAgICAgICAgZm9yIGtleXdvcmQgaW4gbm9kZS5rZXl3b3JkczoKKyAgICAgICAgICAgIHdyaXRlX2NvbW1hKCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoa2V5d29yZC5hcmcgKyAnPScpCisgICAgICAgICAgICBzZWxmLnZpc2l0KGtleXdvcmQudmFsdWUpCisgICAgICAgIGlmIG5vZGUuc3RhcmFyZ3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB3cml0ZV9jb21tYSgpCisgICAgICAgICAgICBzZWxmLndyaXRlKCcqJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5zdGFyYXJncykKKyAgICAgICAgaWYgbm9kZS5rd2FyZ3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB3cml0ZV9jb21tYSgpCisgICAgICAgICAgICBzZWxmLndyaXRlKCcqKicpCisgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUua3dhcmdzKQorICAgICAgICBzZWxmLndyaXRlKCcpJykKKworICAgIGRlZiB2aXNpdF9OYW1lKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKG5vZGUuaWQpCisKKyAgICBkZWYgdmlzaXRfU3RyKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKHJlcHIobm9kZS5zKSkKKworICAgIGRlZiB2aXNpdF9CeXRlcyhzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZShyZXByKG5vZGUucykpCisKKyAgICBkZWYgdmlzaXRfTnVtKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKHJlcHIobm9kZS5uKSkKKworICAgIGRlZiB2aXNpdF9UdXBsZShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZSgnKCcpCisgICAgICAgIGlkeCA9IC0xCisgICAgICAgIGZvciBpZHgsIGl0ZW0gaW4gZW51bWVyYXRlKG5vZGUuZWx0cyk6CisgICAgICAgICAgICBpZiBpZHg6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnLCAnKQorICAgICAgICAgICAgc2VsZi52aXNpdChpdGVtKQorICAgICAgICBzZWxmLndyaXRlKGlkeCBhbmQgJyknIG9yICcsKScpCisKKyAgICBkZWYgc2VxdWVuY2VfdmlzaXQobGVmdCwgcmlnaHQpOgorICAgICAgICBkZWYgdmlzaXQoc2VsZiwgbm9kZSk6CisgICAgICAgICAgICBzZWxmLndyaXRlKGxlZnQpCisgICAgICAgICAgICBmb3IgaWR4LCBpdGVtIGluIGVudW1lcmF0ZShub2RlLmVsdHMpOgorICAgICAgICAgICAgICAgIGlmIGlkeDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnLCAnKQorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQoaXRlbSkKKyAgICAgICAgICAgIHNlbGYud3JpdGUocmlnaHQpCisgICAgICAgIHJldHVybiB2aXNpdAorCisgICAgdmlzaXRfTGlzdCA9IHNlcXVlbmNlX3Zpc2l0KCdbJywgJ10nKQorICAgIHZpc2l0X1NldCA9IHNlcXVlbmNlX3Zpc2l0KCd7JywgJ30nKQorICAgIGRlbCBzZXF1ZW5jZV92aXNpdAorCisgICAgZGVmIHZpc2l0X0RpY3Qoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUoJ3snKQorICAgICAgICBmb3IgaWR4LCAoa2V5LCB2YWx1ZSkgaW4gZW51bWVyYXRlKHppcChub2RlLmtleXMsIG5vZGUudmFsdWVzKSk6CisgICAgICAgICAgICBpZiBpZHg6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnLCAnKQorICAgICAgICAgICAgc2VsZi52aXNpdChrZXkpCisgICAgICAgICAgICBzZWxmLndyaXRlKCc6ICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KHZhbHVlKQorICAgICAgICBzZWxmLndyaXRlKCd9JykKKworICAgIGRlZiB2aXNpdF9CaW5PcChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi52aXNpdChub2RlLmxlZnQpCisgICAgICAgIHNlbGYud3JpdGUoJyAlcyAnICUgQklOT1BfU1lNQk9MU1t0eXBlKG5vZGUub3ApXSkKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnJpZ2h0KQorCisgICAgZGVmIHZpc2l0X0Jvb2xPcChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZSgnKCcpCisgICAgICAgIGZvciBpZHgsIHZhbHVlIGluIGVudW1lcmF0ZShub2RlLnZhbHVlcyk6CisgICAgICAgICAgICBpZiBpZHg6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnICVzICcgJSBCT09MT1BfU1lNQk9MU1t0eXBlKG5vZGUub3ApXSkKKyAgICAgICAgICAgIHNlbGYudmlzaXQodmFsdWUpCisgICAgICAgIHNlbGYud3JpdGUoJyknKQorCisgICAgZGVmIHZpc2l0X0NvbXBhcmUoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUoJygnKQorICAgICAgICBzZWxmLndyaXRlKG5vZGUubGVmdCkKKyAgICAgICAgZm9yIG9wLCByaWdodCBpbiB6aXAobm9kZS5vcHMsIG5vZGUuY29tcGFyYXRvcnMpOgorICAgICAgICAgICAgc2VsZi53cml0ZSgnICVzICUlJyAlIENNUE9QX1NZTUJPTFNbdHlwZShvcCldKQorICAgICAgICAgICAgc2VsZi52aXNpdChyaWdodCkKKyAgICAgICAgc2VsZi53cml0ZSgnKScpCisKKyAgICBkZWYgdmlzaXRfVW5hcnlPcChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZSgnKCcpCisgICAgICAgIG9wID0gVU5BUllPUF9TWU1CT0xTW3R5cGUobm9kZS5vcCldCisgICAgICAgIHNlbGYud3JpdGUob3ApCisgICAgICAgIGlmIG9wID09ICdub3QnOgorICAgICAgICAgICAgc2VsZi53cml0ZSgnICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS5vcGVyYW5kKQorICAgICAgICBzZWxmLndyaXRlKCcpJykKKworICAgIGRlZiB2aXNpdF9TdWJzY3JpcHQoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYudmlzaXQobm9kZS52YWx1ZSkKKyAgICAgICAgc2VsZi53cml0ZSgnWycpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS5zbGljZSkKKyAgICAgICAgc2VsZi53cml0ZSgnXScpCisKKyAgICBkZWYgdmlzaXRfU2xpY2Uoc2VsZiwgbm9kZSk6CisgICAgICAgIGlmIG5vZGUubG93ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUubG93ZXIpCisgICAgICAgIHNlbGYud3JpdGUoJzonKQorICAgICAgICBpZiBub2RlLnVwcGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLnVwcGVyKQorICAgICAgICBpZiBub2RlLnN0ZXAgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLndyaXRlKCc6JykKKyAgICAgICAgICAgIGlmIG5vdCAoaXNpbnN0YW5jZShub2RlLnN0ZXAsIE5hbWUpIGFuZCBub2RlLnN0ZXAuaWQgPT0gJ05vbmUnKToKKyAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUuc3RlcCkKKworICAgIGRlZiB2aXNpdF9FeHRTbGljZShzZWxmLCBub2RlKToKKyAgICAgICAgZm9yIGlkeCwgaXRlbSBpbiBub2RlLmRpbXM6CisgICAgICAgICAgICBpZiBpZHg6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnLCAnKQorICAgICAgICAgICAgc2VsZi52aXNpdChpdGVtKQorCisgICAgZGVmIHZpc2l0X1lpZWxkKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKCd5aWVsZCAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudmFsdWUpCisKKyAgICBkZWYgdmlzaXRfTGFtYmRhKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKCdsYW1iZGEgJykKKyAgICAgICAgc2VsZi5zaWduYXR1cmUobm9kZS5hcmdzKQorICAgICAgICBzZWxmLndyaXRlKCc6ICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS5ib2R5KQorCisgICAgZGVmIHZpc2l0X0VsbGlwc2lzKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKCdFbGxpcHNpcycpCisKKyAgICBkZWYgZ2VuZXJhdG9yX3Zpc2l0KGxlZnQsIHJpZ2h0KToKKyAgICAgICAgZGVmIHZpc2l0KHNlbGYsIG5vZGUpOgorICAgICAgICAgICAgc2VsZi53cml0ZShsZWZ0KQorICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLmVsdCkKKyAgICAgICAgICAgIGZvciBjb21wcmVoZW5zaW9uIGluIG5vZGUuZ2VuZXJhdG9yczoKKyAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KGNvbXByZWhlbnNpb24pCisgICAgICAgICAgICBzZWxmLndyaXRlKHJpZ2h0KQorICAgICAgICByZXR1cm4gdmlzaXQKKworICAgIHZpc2l0X0xpc3RDb21wID0gZ2VuZXJhdG9yX3Zpc2l0KCdbJywgJ10nKQorICAgIHZpc2l0X0dlbmVyYXRvckV4cCA9IGdlbmVyYXRvcl92aXNpdCgnKCcsICcpJykKKyAgICB2aXNpdF9TZXRDb21wID0gZ2VuZXJhdG9yX3Zpc2l0KCd7JywgJ30nKQorICAgIGRlbCBnZW5lcmF0b3JfdmlzaXQKKworICAgIGRlZiB2aXNpdF9EaWN0Q29tcChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZSgneycpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS5rZXkpCisgICAgICAgIHNlbGYud3JpdGUoJzogJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnZhbHVlKQorICAgICAgICBmb3IgY29tcHJlaGVuc2lvbiBpbiBub2RlLmdlbmVyYXRvcnM6CisgICAgICAgICAgICBzZWxmLnZpc2l0KGNvbXByZWhlbnNpb24pCisgICAgICAgIHNlbGYud3JpdGUoJ30nKQorCisgICAgZGVmIHZpc2l0X0lmRXhwKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLnZpc2l0KG5vZGUuYm9keSkKKyAgICAgICAgc2VsZi53cml0ZSgnIGlmICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS50ZXN0KQorICAgICAgICBzZWxmLndyaXRlKCcgZWxzZSAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUub3JlbHNlKQorCisgICAgZGVmIHZpc2l0X1N0YXJyZWQoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUoJyonKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudmFsdWUpCisKKyAgICBkZWYgdmlzaXRfUmVwcihzZWxmLCBub2RlKToKKyAgICAgICAgIyBYWFg6IHB5dGhvbiAyLjYgb25seQorICAgICAgICBzZWxmLndyaXRlKCdgJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnZhbHVlKQorICAgICAgICBzZWxmLndyaXRlKCdgJykKKworICAgICMgSGVscGVyIE5vZGVzCisKKyAgICBkZWYgdmlzaXRfYWxpYXMoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUobm9kZS5uYW1lKQorICAgICAgICBpZiBub2RlLmFzbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJyBhcyAnICsgbm9kZS5hc25hbWUpCisKKyAgICBkZWYgdmlzaXRfY29tcHJlaGVuc2lvbihzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZSgnIGZvciAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudGFyZ2V0KQorICAgICAgICBzZWxmLndyaXRlKCcgaW4gJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLml0ZXIpCisgICAgICAgIGlmIG5vZGUuaWZzOgorICAgICAgICAgICAgZm9yIGlmXyBpbiBub2RlLmlmczoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcgaWYgJykKKyAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KGlmXykKKworICAgIGRlZiB2aXNpdF9leGNlcHRoYW5kbGVyKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnZXhjZXB0JykKKyAgICAgICAgaWYgbm9kZS50eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi53cml0ZSgnICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUudHlwZSkKKyAgICAgICAgICAgIGlmIG5vZGUubmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcgYXMgJykKKyAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUubmFtZSkKKyAgICAgICAgc2VsZi53cml0ZSgnOicpCisgICAgICAgIHNlbGYuYm9keShub2RlLmJvZHkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3BseS9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcGx5L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1M2E5ODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3BseS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDQgQEAKKyMgUExZIHBhY2thZ2UKKyMgQXV0aG9yOiBEYXZpZCBCZWF6bGV5IChkYXZlQGRhYmVhei5jb20pCisKK19fYWxsX18gPSBbJ2xleCcsJ3lhY2MnXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wbHkvbGV4LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wbHkvbGV4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2N2VjMTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3BseS9sZXgucHkKQEAgLTAsMCArMSwxMDU4IEBACisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHBseTogbGV4LnB5CisjCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDA5LAorIyBEYXZpZCBNLiBCZWF6bGV5IChEYWJlYXogTExDKQorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyMgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAgCisjICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyMgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisjICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uICAKKyMgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBEYXZpZCBCZWF6bGV5IG9yIERhYmVheiBMTEMgbWF5IGJlIHVzZWQgdG8KKyMgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorIyAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitfX3ZlcnNpb25fXyAgICA9ICIzLjMiCitfX3RhYnZlcnNpb25fXyA9ICIzLjIiICAgICAgICMgVmVyc2lvbiBvZiB0YWJsZSBmaWxlIHVzZWQKKworaW1wb3J0IHJlLCBzeXMsIHR5cGVzLCBjb3B5LCBvcworCisjIFRoaXMgdHVwbGUgY29udGFpbnMga25vd24gc3RyaW5nIHR5cGVzCit0cnk6CisgICAgIyBQeXRob24gMi42CisgICAgU3RyaW5nVHlwZXMgPSAodHlwZXMuU3RyaW5nVHlwZSwgdHlwZXMuVW5pY29kZVR5cGUpCitleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgIyBQeXRob24gMy4wCisgICAgU3RyaW5nVHlwZXMgPSAoc3RyLCBieXRlcykKKworIyBFeHRyYWN0IHRoZSBjb2RlIGF0dHJpYnV0ZSBvZiBhIGZ1bmN0aW9uLiBEaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zCisjIGFyZSBmb3IgUHl0aG9uIDIvMyBjb21wYXRpYmlsaXR5LgorCitpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMzoKKyAgICBkZWYgZnVuY19jb2RlKGYpOgorICAgICAgICByZXR1cm4gZi5mdW5jX2NvZGUKK2Vsc2U6CisgICAgZGVmIGZ1bmNfY29kZShmKToKKyAgICAgICAgcmV0dXJuIGYuX19jb2RlX18KKworIyBUaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyB1c2VkIHRvIG1hdGNoIHZhbGlkIHRva2VuIG5hbWVzCitfaXNfaWRlbnRpZmllciA9IHJlLmNvbXBpbGUocideW2EtekEtWjAtOV9dKyQnKQorCisjIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBpbnZhbGlkIHRva2VuIGVuY291bnRlcmVkIGFuZCBubyBkZWZhdWx0IGVycm9yCisjIGhhbmRsZXIgaXMgZGVmaW5lZC4KKworY2xhc3MgTGV4RXJyb3IoRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZixtZXNzYWdlLHMpOgorICAgICAgICAgc2VsZi5hcmdzID0gKG1lc3NhZ2UsKQorICAgICAgICAgc2VsZi50ZXh0ID0gcworCisjIFRva2VuIGNsYXNzLiAgVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgdG9rZW5zIHByb2R1Y2VkLgorY2xhc3MgTGV4VG9rZW4ob2JqZWN0KToKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJMZXhUb2tlbiglcywlciwlZCwlZCkiICUgKHNlbGYudHlwZSxzZWxmLnZhbHVlLHNlbGYubGluZW5vLHNlbGYubGV4cG9zKQorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmKQorCisjIFRoaXMgb2JqZWN0IGlzIGEgc3RhbmQtaW4gZm9yIGEgbG9nZ2luZyBvYmplY3QgY3JlYXRlZCBieSB0aGUgCisjIGxvZ2dpbmcgbW9kdWxlLiAgCisKK2NsYXNzIFBseUxvZ2dlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLGYpOgorICAgICAgICBzZWxmLmYgPSBmCisgICAgZGVmIGNyaXRpY2FsKHNlbGYsbXNnLCphcmdzLCoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5mLndyaXRlKChtc2cgJSBhcmdzKSArICJcbiIpCisKKyAgICBkZWYgd2FybmluZyhzZWxmLG1zZywqYXJncywqKmt3YXJncyk6CisgICAgICAgIHNlbGYuZi53cml0ZSgiV0FSTklORzogIisgKG1zZyAlIGFyZ3MpICsgIlxuIikKKworICAgIGRlZiBlcnJvcihzZWxmLG1zZywqYXJncywqKmt3YXJncyk6CisgICAgICAgIHNlbGYuZi53cml0ZSgiRVJST1I6ICIgKyAobXNnICUgYXJncykgKyAiXG4iKQorCisgICAgaW5mbyA9IGNyaXRpY2FsCisgICAgZGVidWcgPSBjcml0aWNhbAorCisjIE51bGwgbG9nZ2VyIGlzIHVzZWQgd2hlbiBubyBvdXRwdXQgaXMgZ2VuZXJhdGVkLiBEb2VzIG5vdGhpbmcuCitjbGFzcyBOdWxsTG9nZ2VyKG9iamVjdCk6CisgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oc2VsZixuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKyAgICBkZWYgX19jYWxsX18oc2VsZiwqYXJncywqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxmCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICAgICA9PT0gTGV4aW5nIEVuZ2luZSA9PT0KKyMKKyMgVGhlIGZvbGxvd2luZyBMZXhlciBjbGFzcyBpbXBsZW1lbnRzIHRoZSBsZXhlciBydW50aW1lLiAgIFRoZXJlIGFyZSBvbmx5CisjIGEgZmV3IHB1YmxpYyBtZXRob2RzIGFuZCBhdHRyaWJ1dGVzOgorIworIyAgICBpbnB1dCgpICAgICAgICAgIC0gIFN0b3JlIGEgbmV3IHN0cmluZyBpbiB0aGUgbGV4ZXIKKyMgICAgdG9rZW4oKSAgICAgICAgICAtICBHZXQgdGhlIG5leHQgdG9rZW4KKyMgICAgY2xvbmUoKSAgICAgICAgICAtICBDbG9uZSB0aGUgbGV4ZXIKKyMKKyMgICAgbGluZW5vICAgICAgICAgICAtICBDdXJyZW50IGxpbmUgbnVtYmVyCisjICAgIGxleHBvcyAgICAgICAgICAgLSAgQ3VycmVudCBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgc3RyaW5nCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIExleGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5sZXhyZSA9IE5vbmUgICAgICAgICAgICAgIyBNYXN0ZXIgcmVndWxhciBleHByZXNzaW9uLiBUaGlzIGlzIGEgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHR1cGxlcyAocmUsZmluZGV4KSB3aGVyZSByZSBpcyBhIGNvbXBpbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVndWxhciBleHByZXNzaW9uIGFuZCBmaW5kZXggaXMgYSBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbWFwcGluZyByZWdleCBncm91cCBudW1iZXJzIHRvIHJ1bGVzCisgICAgICAgIHNlbGYubGV4cmV0ZXh0ID0gTm9uZSAgICAgICAgICMgQ3VycmVudCByZWd1bGFyIGV4cHJlc3Npb24gc3RyaW5ncworICAgICAgICBzZWxmLmxleHN0YXRlcmUgPSB7fSAgICAgICAgICAjIERpY3Rpb25hcnkgbWFwcGluZyBsZXhlciBzdGF0ZXMgdG8gbWFzdGVyIHJlZ2V4cworICAgICAgICBzZWxmLmxleHN0YXRlcmV0ZXh0ID0ge30gICAgICAjIERpY3Rpb25hcnkgbWFwcGluZyBsZXhlciBzdGF0ZXMgdG8gcmVnZXggc3RyaW5ncworICAgICAgICBzZWxmLmxleHN0YXRlcmVuYW1lcyA9IHt9ICAgICAjIERpY3Rpb25hcnkgbWFwcGluZyBsZXhlciBzdGF0ZXMgdG8gc3ltYm9sIG5hbWVzCisgICAgICAgIHNlbGYubGV4c3RhdGUgPSAiSU5JVElBTCIgICAgICMgQ3VycmVudCBsZXhlciBzdGF0ZQorICAgICAgICBzZWxmLmxleHN0YXRlc3RhY2sgPSBbXSAgICAgICAjIFN0YWNrIG9mIGxleGVyIHN0YXRlcworICAgICAgICBzZWxmLmxleHN0YXRlaW5mbyA9IE5vbmUgICAgICAjIFN0YXRlIGluZm9ybWF0aW9uCisgICAgICAgIHNlbGYubGV4c3RhdGVpZ25vcmUgPSB7fSAgICAgICMgRGljdGlvbmFyeSBvZiBpZ25vcmVkIGNoYXJhY3RlcnMgZm9yIGVhY2ggc3RhdGUKKyAgICAgICAgc2VsZi5sZXhzdGF0ZWVycm9yZiA9IHt9ICAgICAgIyBEaWN0aW9uYXJ5IG9mIGVycm9yIGZ1bmN0aW9ucyBmb3IgZWFjaCBzdGF0ZQorICAgICAgICBzZWxmLmxleHJlZmxhZ3MgPSAwICAgICAgICAgICAjIE9wdGlvbmFsIHJlIGNvbXBpbGUgZmxhZ3MKKyAgICAgICAgc2VsZi5sZXhkYXRhID0gTm9uZSAgICAgICAgICAgIyBBY3R1YWwgaW5wdXQgZGF0YSAoYXMgYSBzdHJpbmcpCisgICAgICAgIHNlbGYubGV4cG9zID0gMCAgICAgICAgICAgICAgICMgQ3VycmVudCBwb3NpdGlvbiBpbiBpbnB1dCB0ZXh0CisgICAgICAgIHNlbGYubGV4bGVuID0gMCAgICAgICAgICAgICAgICMgTGVuZ3RoIG9mIHRoZSBpbnB1dCB0ZXh0CisgICAgICAgIHNlbGYubGV4ZXJyb3JmID0gTm9uZSAgICAgICAgICMgRXJyb3IgcnVsZSAoaWYgYW55KQorICAgICAgICBzZWxmLmxleHRva2VucyA9IE5vbmUgICAgICAgICAjIExpc3Qgb2YgdmFsaWQgdG9rZW5zCisgICAgICAgIHNlbGYubGV4aWdub3JlID0gIiIgICAgICAgICAgICMgSWdub3JlZCBjaGFyYWN0ZXJzCisgICAgICAgIHNlbGYubGV4bGl0ZXJhbHMgPSAiIiAgICAgICAgICMgTGl0ZXJhbCBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIHBhc3NlZCB0aHJvdWdoCisgICAgICAgIHNlbGYubGV4bW9kdWxlID0gTm9uZSAgICAgICAgICMgTW9kdWxlCisgICAgICAgIHNlbGYubGluZW5vID0gMSAgICAgICAgICAgICAgICMgQ3VycmVudCBsaW5lIG51bWJlcgorICAgICAgICBzZWxmLmxleG9wdGltaXplID0gMCAgICAgICAgICAjIE9wdGltaXplZCBtb2RlCisKKyAgICBkZWYgY2xvbmUoc2VsZixvYmplY3Q9Tm9uZSk6CisgICAgICAgIGMgPSBjb3B5LmNvcHkoc2VsZikKKworICAgICAgICAjIElmIHRoZSBvYmplY3QgcGFyYW1ldGVyIGhhcyBiZWVuIHN1cHBsaWVkLCBpdCBtZWFucyB3ZSBhcmUgYXR0YWNoaW5nIHRoZQorICAgICAgICAjIGxleGVyIHRvIGEgbmV3IG9iamVjdC4gIEluIHRoaXMgY2FzZSwgd2UgaGF2ZSB0byByZWJpbmQgYWxsIG1ldGhvZHMgaW4KKyAgICAgICAgIyB0aGUgbGV4c3RhdGVyZSBhbmQgbGV4c3RhdGVlcnJvcmYgdGFibGVzLgorCisgICAgICAgIGlmIG9iamVjdDoKKyAgICAgICAgICAgIG5ld3RhYiA9IHsgfQorICAgICAgICAgICAgZm9yIGtleSwgcml0ZW0gaW4gc2VsZi5sZXhzdGF0ZXJlLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgbmV3cmUgPSBbXQorICAgICAgICAgICAgICAgIGZvciBjcmUsIGZpbmRleCBpbiByaXRlbToKKyAgICAgICAgICAgICAgICAgICAgIG5ld2ZpbmRleCA9IFtdCisgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaW5kZXg6CisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGYgb3Igbm90IGZbMF06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2ZpbmRleC5hcHBlbmQoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXdmaW5kZXguYXBwZW5kKChnZXRhdHRyKG9iamVjdCxmWzBdLl9fbmFtZV9fKSxmWzFdKSkKKyAgICAgICAgICAgICAgICBuZXdyZS5hcHBlbmQoKGNyZSxuZXdmaW5kZXgpKQorICAgICAgICAgICAgICAgIG5ld3RhYltrZXldID0gbmV3cmUKKyAgICAgICAgICAgIGMubGV4c3RhdGVyZSA9IG5ld3RhYgorICAgICAgICAgICAgYy5sZXhzdGF0ZWVycm9yZiA9IHsgfQorICAgICAgICAgICAgZm9yIGtleSwgZWYgaW4gc2VsZi5sZXhzdGF0ZWVycm9yZi5pdGVtcygpOgorICAgICAgICAgICAgICAgIGMubGV4c3RhdGVlcnJvcmZba2V5XSA9IGdldGF0dHIob2JqZWN0LGVmLl9fbmFtZV9fKQorICAgICAgICAgICAgYy5sZXhtb2R1bGUgPSBvYmplY3QKKyAgICAgICAgcmV0dXJuIGMKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyB3cml0ZXRhYigpIC0gV3JpdGUgbGV4ZXIgaW5mb3JtYXRpb24gdG8gYSB0YWJsZSBmaWxlCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgd3JpdGV0YWIoc2VsZix0YWJmaWxlLG91dHB1dGRpcj0iIik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodGFiZmlsZSx0eXBlcy5Nb2R1bGVUeXBlKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBiYXNldGFiZmlsZW5hbWUgPSB0YWJmaWxlLnNwbGl0KCIuIilbLTFdCisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG91dHB1dGRpcixiYXNldGFiZmlsZW5hbWUpKyIucHkiCisgICAgICAgIHRmID0gb3BlbihmaWxlbmFtZSwidyIpCisgICAgICAgIHRmLndyaXRlKCIjICVzLnB5LiBUaGlzIGZpbGUgYXV0b21hdGljYWxseSBjcmVhdGVkIGJ5IFBMWSAodmVyc2lvbiAlcykuIERvbid0IGVkaXQhXG4iICUgKHRhYmZpbGUsX192ZXJzaW9uX18pKQorICAgICAgICB0Zi53cml0ZSgiX3RhYnZlcnNpb24gICA9ICVzXG4iICUgcmVwcihfX3ZlcnNpb25fXykpCisgICAgICAgIHRmLndyaXRlKCJfbGV4dG9rZW5zICAgID0gJXNcbiIgJSByZXByKHNlbGYubGV4dG9rZW5zKSkKKyAgICAgICAgdGYud3JpdGUoIl9sZXhyZWZsYWdzICAgPSAlc1xuIiAlIHJlcHIoc2VsZi5sZXhyZWZsYWdzKSkKKyAgICAgICAgdGYud3JpdGUoIl9sZXhsaXRlcmFscyAgPSAlc1xuIiAlIHJlcHIoc2VsZi5sZXhsaXRlcmFscykpCisgICAgICAgIHRmLndyaXRlKCJfbGV4c3RhdGVpbmZvID0gJXNcbiIgJSByZXByKHNlbGYubGV4c3RhdGVpbmZvKSkKKworICAgICAgICB0YWJyZSA9IHsgfQorICAgICAgICAjIENvbGxlY3QgYWxsIGZ1bmN0aW9ucyBpbiB0aGUgaW5pdGlhbCBzdGF0ZQorICAgICAgICBpbml0aWFsID0gc2VsZi5sZXhzdGF0ZXJlWyJJTklUSUFMIl0KKyAgICAgICAgaW5pdGlhbGZ1bmNzID0gW10KKyAgICAgICAgZm9yIHBhcnQgaW4gaW5pdGlhbDoKKyAgICAgICAgICAgIGZvciBmIGluIHBhcnRbMV06CisgICAgICAgICAgICAgICAgaWYgZiBhbmQgZlswXToKKyAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGZ1bmNzLmFwcGVuZChmKQorCisgICAgICAgIGZvciBrZXksIGxyZSBpbiBzZWxmLmxleHN0YXRlcmUuaXRlbXMoKToKKyAgICAgICAgICAgICB0aXRlbSA9IFtdCisgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGxyZSkpOgorICAgICAgICAgICAgICAgICAgdGl0ZW0uYXBwZW5kKChzZWxmLmxleHN0YXRlcmV0ZXh0W2tleV1baV0sX2Z1bmNzX3RvX25hbWVzKGxyZVtpXVsxXSxzZWxmLmxleHN0YXRlcmVuYW1lc1trZXldW2ldKSkpCisgICAgICAgICAgICAgdGFicmVba2V5XSA9IHRpdGVtCisKKyAgICAgICAgdGYud3JpdGUoIl9sZXhzdGF0ZXJlICAgPSAlc1xuIiAlIHJlcHIodGFicmUpKQorICAgICAgICB0Zi53cml0ZSgiX2xleHN0YXRlaWdub3JlID0gJXNcbiIgJSByZXByKHNlbGYubGV4c3RhdGVpZ25vcmUpKQorCisgICAgICAgIHRhYmVyciA9IHsgfQorICAgICAgICBmb3Iga2V5LCBlZiBpbiBzZWxmLmxleHN0YXRlZXJyb3JmLml0ZW1zKCk6CisgICAgICAgICAgICAgaWYgZWY6CisgICAgICAgICAgICAgICAgICB0YWJlcnJba2V5XSA9IGVmLl9fbmFtZV9fCisgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgIHRhYmVycltrZXldID0gTm9uZQorICAgICAgICB0Zi53cml0ZSgiX2xleHN0YXRlZXJyb3JmID0gJXNcbiIgJSByZXByKHRhYmVycikpCisgICAgICAgIHRmLmNsb3NlKCkKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyByZWFkdGFiKCkgLSBSZWFkIGxleGVyIGluZm9ybWF0aW9uIGZyb20gYSB0YWIgZmlsZQorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZGVmIHJlYWR0YWIoc2VsZix0YWJmaWxlLGZkaWN0KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0YWJmaWxlLHR5cGVzLk1vZHVsZVR5cGUpOgorICAgICAgICAgICAgbGV4dGFiID0gdGFiZmlsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDM6CisgICAgICAgICAgICAgICAgZXhlYygiaW1wb3J0ICVzIGFzIGxleHRhYiIgJSB0YWJmaWxlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlbnYgPSB7IH0KKyAgICAgICAgICAgICAgICBleGVjKCJpbXBvcnQgJXMgYXMgbGV4dGFiIiAlIHRhYmZpbGUsIGVudixlbnYpCisgICAgICAgICAgICAgICAgbGV4dGFiID0gZW52WydsZXh0YWInXQorCisgICAgICAgIGlmIGdldGF0dHIobGV4dGFiLCJfdGFidmVyc2lvbiIsIjAuMCIpICE9IF9fdmVyc2lvbl9fOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIkluY29uc2lzdGVudCBQTFkgdmVyc2lvbiIpCisKKyAgICAgICAgc2VsZi5sZXh0b2tlbnMgICAgICA9IGxleHRhYi5fbGV4dG9rZW5zCisgICAgICAgIHNlbGYubGV4cmVmbGFncyAgICAgPSBsZXh0YWIuX2xleHJlZmxhZ3MKKyAgICAgICAgc2VsZi5sZXhsaXRlcmFscyAgICA9IGxleHRhYi5fbGV4bGl0ZXJhbHMKKyAgICAgICAgc2VsZi5sZXhzdGF0ZWluZm8gICA9IGxleHRhYi5fbGV4c3RhdGVpbmZvCisgICAgICAgIHNlbGYubGV4c3RhdGVpZ25vcmUgPSBsZXh0YWIuX2xleHN0YXRlaWdub3JlCisgICAgICAgIHNlbGYubGV4c3RhdGVyZSAgICAgPSB7IH0KKyAgICAgICAgc2VsZi5sZXhzdGF0ZXJldGV4dCA9IHsgfQorICAgICAgICBmb3Iga2V5LGxyZSBpbiBsZXh0YWIuX2xleHN0YXRlcmUuaXRlbXMoKToKKyAgICAgICAgICAgICB0aXRlbSA9IFtdCisgICAgICAgICAgICAgdHh0aXRlbSA9IFtdCisgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGxyZSkpOgorICAgICAgICAgICAgICAgICAgdGl0ZW0uYXBwZW5kKChyZS5jb21waWxlKGxyZVtpXVswXSxsZXh0YWIuX2xleHJlZmxhZ3MgfCByZS5WRVJCT1NFKSxfbmFtZXNfdG9fZnVuY3MobHJlW2ldWzFdLGZkaWN0KSkpCisgICAgICAgICAgICAgICAgICB0eHRpdGVtLmFwcGVuZChscmVbaV1bMF0pCisgICAgICAgICAgICAgc2VsZi5sZXhzdGF0ZXJlW2tleV0gPSB0aXRlbQorICAgICAgICAgICAgIHNlbGYubGV4c3RhdGVyZXRleHRba2V5XSA9IHR4dGl0ZW0KKyAgICAgICAgc2VsZi5sZXhzdGF0ZWVycm9yZiA9IHsgfQorICAgICAgICBmb3Iga2V5LGVmIGluIGxleHRhYi5fbGV4c3RhdGVlcnJvcmYuaXRlbXMoKToKKyAgICAgICAgICAgICBzZWxmLmxleHN0YXRlZXJyb3JmW2tleV0gPSBmZGljdFtlZl0KKyAgICAgICAgc2VsZi5iZWdpbignSU5JVElBTCcpCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgaW5wdXQoKSAtIFB1c2ggYSBuZXcgc3RyaW5nIGludG8gdGhlIGxleGVyCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgaW5wdXQoc2VsZixzKToKKyAgICAgICAgIyBQdWxsIG9mZiB0aGUgZmlyc3QgY2hhcmFjdGVyIHRvIHNlZSBpZiBzIGxvb2tzIGxpa2UgYSBzdHJpbmcKKyAgICAgICAgYyA9IHNbOjFdCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGMsU3RyaW5nVHlwZXMpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRXhwZWN0ZWQgYSBzdHJpbmciKQorICAgICAgICBzZWxmLmxleGRhdGEgPSBzCisgICAgICAgIHNlbGYubGV4cG9zID0gMAorICAgICAgICBzZWxmLmxleGxlbiA9IGxlbihzKQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGJlZ2luKCkgLSBDaGFuZ2VzIHRoZSBsZXhpbmcgc3RhdGUKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiBiZWdpbihzZWxmLHN0YXRlKToKKyAgICAgICAgaWYgbm90IHN0YXRlIGluIHNlbGYubGV4c3RhdGVyZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuZGVmaW5lZCBzdGF0ZSIpCisgICAgICAgIHNlbGYubGV4cmUgPSBzZWxmLmxleHN0YXRlcmVbc3RhdGVdCisgICAgICAgIHNlbGYubGV4cmV0ZXh0ID0gc2VsZi5sZXhzdGF0ZXJldGV4dFtzdGF0ZV0KKyAgICAgICAgc2VsZi5sZXhpZ25vcmUgPSBzZWxmLmxleHN0YXRlaWdub3JlLmdldChzdGF0ZSwiIikKKyAgICAgICAgc2VsZi5sZXhlcnJvcmYgPSBzZWxmLmxleHN0YXRlZXJyb3JmLmdldChzdGF0ZSxOb25lKQorICAgICAgICBzZWxmLmxleHN0YXRlID0gc3RhdGUKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBwdXNoX3N0YXRlKCkgLSBDaGFuZ2VzIHRoZSBsZXhpbmcgc3RhdGUgYW5kIHNhdmVzIG9sZCBvbiBzdGFjaworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZGVmIHB1c2hfc3RhdGUoc2VsZixzdGF0ZSk6CisgICAgICAgIHNlbGYubGV4c3RhdGVzdGFjay5hcHBlbmQoc2VsZi5sZXhzdGF0ZSkKKyAgICAgICAgc2VsZi5iZWdpbihzdGF0ZSkKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBwb3Bfc3RhdGUoKSAtIFJlc3RvcmVzIHRoZSBwcmV2aW91cyBzdGF0ZQorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZGVmIHBvcF9zdGF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5iZWdpbihzZWxmLmxleHN0YXRlc3RhY2sucG9wKCkpCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgY3VycmVudF9zdGF0ZSgpIC0gUmV0dXJucyB0aGUgY3VycmVudCBsZXhpbmcgc3RhdGUKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiBjdXJyZW50X3N0YXRlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5sZXhzdGF0ZQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHNraXAoKSAtIFNraXAgYWhlYWQgbiBjaGFyYWN0ZXJzCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgc2tpcChzZWxmLG4pOgorICAgICAgICBzZWxmLmxleHBvcyArPSBuCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgb3B0dG9rZW4oKSAtIFJldHVybiB0aGUgbmV4dCB0b2tlbiBmcm9tIHRoZSBMZXhlcgorICAgICMKKyAgICAjIE5vdGU6IFRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gY2FyZWZ1bGx5IGltcGxlbWVudGVkIHRvIGJlIGFzIGZhc3QKKyAgICAjIGFzIHBvc3NpYmxlLiAgRG9uJ3QgbWFrZSBjaGFuZ2VzIHVubGVzcyB5b3UgcmVhbGx5IGtub3cgd2hhdAorICAgICMgeW91IGFyZSBkb2luZworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZGVmIHRva2VuKHNlbGYpOgorICAgICAgICAjIE1ha2UgbG9jYWwgY29waWVzIG9mIGZyZXF1ZW50bHkgcmVmZXJlbmNlZCBhdHRyaWJ1dGVzCisgICAgICAgIGxleHBvcyAgICA9IHNlbGYubGV4cG9zCisgICAgICAgIGxleGxlbiAgICA9IHNlbGYubGV4bGVuCisgICAgICAgIGxleGlnbm9yZSA9IHNlbGYubGV4aWdub3JlCisgICAgICAgIGxleGRhdGEgICA9IHNlbGYubGV4ZGF0YQorCisgICAgICAgIHdoaWxlIGxleHBvcyA8IGxleGxlbjoKKyAgICAgICAgICAgICMgVGhpcyBjb2RlIHByb3ZpZGVzIHNvbWUgc2hvcnQtY2lyY3VpdCBjb2RlIGZvciB3aGl0ZXNwYWNlLCB0YWJzLCBhbmQgb3RoZXIgaWdub3JlZCBjaGFyYWN0ZXJzCisgICAgICAgICAgICBpZiBsZXhkYXRhW2xleHBvc10gaW4gbGV4aWdub3JlOgorICAgICAgICAgICAgICAgIGxleHBvcyArPSAxCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBMb29rIGZvciBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaAorICAgICAgICAgICAgZm9yIGxleHJlLGxleGluZGV4ZnVuYyBpbiBzZWxmLmxleHJlOgorICAgICAgICAgICAgICAgIG0gPSBsZXhyZS5tYXRjaChsZXhkYXRhLGxleHBvcykKKyAgICAgICAgICAgICAgICBpZiBub3QgbTogY29udGludWUKKworICAgICAgICAgICAgICAgICMgQ3JlYXRlIGEgdG9rZW4gZm9yIHJldHVybgorICAgICAgICAgICAgICAgIHRvayA9IExleFRva2VuKCkKKyAgICAgICAgICAgICAgICB0b2sudmFsdWUgPSBtLmdyb3VwKCkKKyAgICAgICAgICAgICAgICB0b2subGluZW5vID0gc2VsZi5saW5lbm8KKyAgICAgICAgICAgICAgICB0b2subGV4cG9zID0gbGV4cG9zCisKKyAgICAgICAgICAgICAgICBpID0gbS5sYXN0aW5kZXgKKyAgICAgICAgICAgICAgICBmdW5jLHRvay50eXBlID0gbGV4aW5kZXhmdW5jW2ldCisKKyAgICAgICAgICAgICAgICBpZiBub3QgZnVuYzoKKyAgICAgICAgICAgICAgICAgICAjIElmIG5vIHRva2VuIHR5cGUgd2FzIHNldCwgaXQncyBhbiBpZ25vcmVkIHRva2VuCisgICAgICAgICAgICAgICAgICAgaWYgdG9rLnR5cGU6CisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sZXhwb3MgPSBtLmVuZCgpCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvaworICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgbGV4cG9zID0gbS5lbmQoKQorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICBsZXhwb3MgPSBtLmVuZCgpCisKKyAgICAgICAgICAgICAgICAjIElmIHRva2VuIGlzIHByb2Nlc3NlZCBieSBhIGZ1bmN0aW9uLCBjYWxsIGl0CisKKyAgICAgICAgICAgICAgICB0b2subGV4ZXIgPSBzZWxmICAgICAgIyBTZXQgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIHVzZWZ1bCBpbiB0b2tlbiBydWxlcworICAgICAgICAgICAgICAgIHNlbGYubGV4bWF0Y2ggPSBtCisgICAgICAgICAgICAgICAgc2VsZi5sZXhwb3MgPSBsZXhwb3MKKworICAgICAgICAgICAgICAgIG5ld3RvayA9IGZ1bmModG9rKQorCisgICAgICAgICAgICAgICAgIyBFdmVyeSBmdW5jdGlvbiBtdXN0IHJldHVybiBhIHRva2VuLCBpZiBub3RoaW5nLCB3ZSBqdXN0IG1vdmUgdG8gbmV4dCB0b2tlbgorICAgICAgICAgICAgICAgIGlmIG5vdCBuZXd0b2s6CisgICAgICAgICAgICAgICAgICAgIGxleHBvcyAgICA9IHNlbGYubGV4cG9zICAgICAgICAgIyBUaGlzIGlzIGhlcmUgaW4gY2FzZSB1c2VyIGhhcyB1cGRhdGVkIGxleHBvcy4KKyAgICAgICAgICAgICAgICAgICAgbGV4aWdub3JlID0gc2VsZi5sZXhpZ25vcmUgICAgICAjIFRoaXMgaXMgaGVyZSBpbiBjYXNlIHRoZXJlIHdhcyBhIHN0YXRlIGNoYW5nZQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgIyBWZXJpZnkgdHlwZSBvZiB0aGUgdG9rZW4uICBJZiBub3QgaW4gdGhlIHRva2VuIG1hcCwgcmFpc2UgYW4gZXJyb3IKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5sZXhvcHRpbWl6ZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5ld3Rvay50eXBlIGluIHNlbGYubGV4dG9rZW5zOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTGV4RXJyb3IoIiVzOiVkOiBSdWxlICclcycgcmV0dXJuZWQgYW4gdW5rbm93biB0b2tlbiB0eXBlICclcyciICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfY29kZShmdW5jKS5jb19maWxlbmFtZSwgZnVuY19jb2RlKGZ1bmMpLmNvX2ZpcnN0bGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuX19uYW1lX18sIG5ld3Rvay50eXBlKSxsZXhkYXRhW2xleHBvczpdKQorCisgICAgICAgICAgICAgICAgcmV0dXJuIG5ld3RvaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIE5vIG1hdGNoLCBzZWUgaWYgaW4gbGl0ZXJhbHMKKyAgICAgICAgICAgICAgICBpZiBsZXhkYXRhW2xleHBvc10gaW4gc2VsZi5sZXhsaXRlcmFsczoKKyAgICAgICAgICAgICAgICAgICAgdG9rID0gTGV4VG9rZW4oKQorICAgICAgICAgICAgICAgICAgICB0b2sudmFsdWUgPSBsZXhkYXRhW2xleHBvc10KKyAgICAgICAgICAgICAgICAgICAgdG9rLmxpbmVubyA9IHNlbGYubGluZW5vCisgICAgICAgICAgICAgICAgICAgIHRvay50eXBlID0gdG9rLnZhbHVlCisgICAgICAgICAgICAgICAgICAgIHRvay5sZXhwb3MgPSBsZXhwb3MKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sZXhwb3MgPSBsZXhwb3MgKyAxCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2sKKworICAgICAgICAgICAgICAgICMgTm8gbWF0Y2guIENhbGwgdF9lcnJvcigpIGlmIGRlZmluZWQuCisgICAgICAgICAgICAgICAgaWYgc2VsZi5sZXhlcnJvcmY6CisgICAgICAgICAgICAgICAgICAgIHRvayA9IExleFRva2VuKCkKKyAgICAgICAgICAgICAgICAgICAgdG9rLnZhbHVlID0gc2VsZi5sZXhkYXRhW2xleHBvczpdCisgICAgICAgICAgICAgICAgICAgIHRvay5saW5lbm8gPSBzZWxmLmxpbmVubworICAgICAgICAgICAgICAgICAgICB0b2sudHlwZSA9ICJlcnJvciIKKyAgICAgICAgICAgICAgICAgICAgdG9rLmxleGVyID0gc2VsZgorICAgICAgICAgICAgICAgICAgICB0b2subGV4cG9zID0gbGV4cG9zCisgICAgICAgICAgICAgICAgICAgIHNlbGYubGV4cG9zID0gbGV4cG9zCisgICAgICAgICAgICAgICAgICAgIG5ld3RvayA9IHNlbGYubGV4ZXJyb3JmKHRvaykKKyAgICAgICAgICAgICAgICAgICAgaWYgbGV4cG9zID09IHNlbGYubGV4cG9zOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBFcnJvciBtZXRob2QgZGlkbid0IGNoYW5nZSB0ZXh0IHBvc2l0aW9uIGF0IGFsbC4gVGhpcyBpcyBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIExleEVycm9yKCJTY2FubmluZyBlcnJvci4gSWxsZWdhbCBjaGFyYWN0ZXIgJyVzJyIgJSAobGV4ZGF0YVtsZXhwb3NdKSwgbGV4ZGF0YVtsZXhwb3M6XSkKKyAgICAgICAgICAgICAgICAgICAgbGV4cG9zID0gc2VsZi5sZXhwb3MKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5ld3RvazogY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld3RvaworCisgICAgICAgICAgICAgICAgc2VsZi5sZXhwb3MgPSBsZXhwb3MKKyAgICAgICAgICAgICAgICByYWlzZSBMZXhFcnJvcigiSWxsZWdhbCBjaGFyYWN0ZXIgJyVzJyBhdCBpbmRleCAlZCIgJSAobGV4ZGF0YVtsZXhwb3NdLGxleHBvcyksIGxleGRhdGFbbGV4cG9zOl0pCisKKyAgICAgICAgc2VsZi5sZXhwb3MgPSBsZXhwb3MgKyAxCisgICAgICAgIGlmIHNlbGYubGV4ZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiTm8gaW5wdXQgc3RyaW5nIGdpdmVuIHdpdGggaW5wdXQoKSIpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICAjIEl0ZXJhdG9yIGludGVyZmFjZQorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICB0ID0gc2VsZi50b2tlbigpCisgICAgICAgIGlmIHQgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgcmV0dXJuIHQKKworICAgIF9fbmV4dF9fID0gbmV4dAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09PSBMZXggQnVpbGRlciA9PT0KKyMKKyMgVGhlIGZ1bmN0aW9ucyBhbmQgY2xhc3NlcyBiZWxvdyBhcmUgdXNlZCB0byBjb2xsZWN0IGxleGluZyBpbmZvcm1hdGlvbgorIyBhbmQgYnVpbGQgYSBMZXhlciBvYmplY3QgZnJvbSBpdC4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBnZXRfY2FsbGVyX21vZHVsZV9kaWN0KCkKKyMKKyMgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGFsbCBvZiB0aGUgc3ltYm9scyBkZWZpbmVkIHdpdGhpbgorIyBhIGNhbGxlciBmdXJ0aGVyIGRvd24gdGhlIGNhbGwgc3RhY2suICBUaGlzIGlzIHVzZWQgdG8gZ2V0IHRoZSBlbnZpcm9ubWVudAorIyBhc3NvY2lhdGVkIHdpdGggdGhlIHlhY2MoKSBjYWxsIGlmIG5vbmUgd2FzIHByb3ZpZGVkLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgZ2V0X2NhbGxlcl9tb2R1bGVfZGljdChsZXZlbHMpOgorICAgIHRyeToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgZSxiLHQgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICBmID0gdC50Yl9mcmFtZQorICAgICAgICB3aGlsZSBsZXZlbHMgPiAwOgorICAgICAgICAgICAgZiA9IGYuZl9iYWNrICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbGV2ZWxzIC09IDEKKyAgICAgICAgbGRpY3QgPSBmLmZfZ2xvYmFscy5jb3B5KCkKKyAgICAgICAgaWYgZi5mX2dsb2JhbHMgIT0gZi5mX2xvY2FsczoKKyAgICAgICAgICAgIGxkaWN0LnVwZGF0ZShmLmZfbG9jYWxzKQorCisgICAgICAgIHJldHVybiBsZGljdAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIF9mdW5jc190b19uYW1lcygpCisjCisjIEdpdmVuIGEgbGlzdCBvZiByZWd1bGFyIGV4cHJlc3Npb24gZnVuY3Rpb25zLCB0aGlzIGNvbnZlcnRzIGl0IHRvIGEgbGlzdAorIyBzdWl0YWJsZSBmb3Igb3V0cHV0IHRvIGEgdGFibGUgZmlsZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgX2Z1bmNzX3RvX25hbWVzKGZ1bmNsaXN0LG5hbWVsaXN0KToKKyAgICByZXN1bHQgPSBbXQorICAgIGZvciBmLG5hbWUgaW4gemlwKGZ1bmNsaXN0LG5hbWVsaXN0KToKKyAgICAgICAgIGlmIGYgYW5kIGZbMF06CisgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgobmFtZSwgZlsxXSkpCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZikKKyAgICByZXR1cm4gcmVzdWx0CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgX25hbWVzX3RvX2Z1bmNzKCkKKyMKKyMgR2l2ZW4gYSBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiBmdW5jdGlvbiBuYW1lcywgdGhpcyBjb252ZXJ0cyBpdCBiYWNrIHRvCisjIGZ1bmN0aW9ucy4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIF9uYW1lc190b19mdW5jcyhuYW1lbGlzdCxmZGljdCk6CisgICAgIHJlc3VsdCA9IFtdCisgICAgIGZvciBuIGluIG5hbWVsaXN0OgorICAgICAgICAgIGlmIG4gYW5kIG5bMF06CisgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKGZkaWN0W25bMF1dLG5bMV0pKQorICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobikKKyAgICAgcmV0dXJuIHJlc3VsdAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIF9mb3JtX21hc3Rlcl9yZSgpCisjCisjIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBsaXN0IG9mIGFsbCBvZiB0aGUgcmVnZXggY29tcG9uZW50cyBhbmQgYXR0ZW1wdHMgdG8KKyMgZm9ybSB0aGUgbWFzdGVyIHJlZ3VsYXIgZXhwcmVzc2lvbi4gIEdpdmVuIGxpbWl0YXRpb25zIGluIHRoZSBQeXRob24gcmUKKyMgbW9kdWxlLCBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIGJyZWFrIHRoZSBtYXN0ZXIgcmVnZXggaW50byBzZXBhcmF0ZSBleHByZXNzaW9ucy4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIF9mb3JtX21hc3Rlcl9yZShyZWxpc3QscmVmbGFncyxsZGljdCx0b2tuYW1lcyk6CisgICAgaWYgbm90IHJlbGlzdDogcmV0dXJuIFtdCisgICAgcmVnZXggPSAifCIuam9pbihyZWxpc3QpCisgICAgdHJ5OgorICAgICAgICBsZXhyZSA9IHJlLmNvbXBpbGUocmVnZXgscmUuVkVSQk9TRSB8IHJlZmxhZ3MpCisKKyAgICAgICAgIyBCdWlsZCB0aGUgaW5kZXggdG8gZnVuY3Rpb24gbWFwIGZvciB0aGUgbWF0Y2hpbmcgZW5naW5lCisgICAgICAgIGxleGluZGV4ZnVuYyA9IFsgTm9uZSBdICogKG1heChsZXhyZS5ncm91cGluZGV4LnZhbHVlcygpKSsxKQorICAgICAgICBsZXhpbmRleG5hbWVzID0gbGV4aW5kZXhmdW5jWzpdCisKKyAgICAgICAgZm9yIGYsaSBpbiBsZXhyZS5ncm91cGluZGV4Lml0ZW1zKCk6CisgICAgICAgICAgICBoYW5kbGUgPSBsZGljdC5nZXQoZixOb25lKQorICAgICAgICAgICAgaWYgdHlwZShoYW5kbGUpIGluICh0eXBlcy5GdW5jdGlvblR5cGUsIHR5cGVzLk1ldGhvZFR5cGUpOgorICAgICAgICAgICAgICAgIGxleGluZGV4ZnVuY1tpXSA9IChoYW5kbGUsdG9rbmFtZXNbZl0pCisgICAgICAgICAgICAgICAgbGV4aW5kZXhuYW1lc1tpXSA9IGYKKyAgICAgICAgICAgIGVsaWYgaGFuZGxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGxleGluZGV4bmFtZXNbaV0gPSBmCisgICAgICAgICAgICAgICAgaWYgZi5maW5kKCJpZ25vcmVfIikgPiAwOgorICAgICAgICAgICAgICAgICAgICBsZXhpbmRleGZ1bmNbaV0gPSAoTm9uZSxOb25lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxleGluZGV4ZnVuY1tpXSA9IChOb25lLCB0b2tuYW1lc1tmXSkKKyAgICAgICAgCisgICAgICAgIHJldHVybiBbKGxleHJlLGxleGluZGV4ZnVuYyldLFtyZWdleF0sW2xleGluZGV4bmFtZXNdCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgbSA9IGludChsZW4ocmVsaXN0KS8yKQorICAgICAgICBpZiBtID09IDA6IG0gPSAxCisgICAgICAgIGxsaXN0LCBscmUsIGxuYW1lcyA9IF9mb3JtX21hc3Rlcl9yZShyZWxpc3RbOm1dLHJlZmxhZ3MsbGRpY3QsdG9rbmFtZXMpCisgICAgICAgIHJsaXN0LCBycmUsIHJuYW1lcyA9IF9mb3JtX21hc3Rlcl9yZShyZWxpc3RbbTpdLHJlZmxhZ3MsbGRpY3QsdG9rbmFtZXMpCisgICAgICAgIHJldHVybiBsbGlzdCtybGlzdCwgbHJlK3JyZSwgbG5hbWVzK3JuYW1lcworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGRlZiBfc3RhdGV0b2tlbihzLG5hbWVzKQorIworIyBHaXZlbiBhIGRlY2xhcmF0aW9uIG5hbWUgcyBvZiB0aGUgZm9ybSAidF8iIGFuZCBhIGRpY3Rpb25hcnkgd2hvc2Uga2V5cyBhcmUKKyMgc3RhdGUgbmFtZXMsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHR1cGxlIChzdGF0ZXMsdG9rZW5uYW1lKSB3aGVyZSBzdGF0ZXMKKyMgaXMgYSB0dXBsZSBvZiBzdGF0ZSBuYW1lcyBhbmQgdG9rZW5uYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSB0b2tlbi4gIEZvciBleGFtcGxlLAorIyBjYWxsaW5nIHRoaXMgd2l0aCBzID0gInRfZm9vX2Jhcl9TUEFNIiBtaWdodCByZXR1cm4gKCgnZm9vJywnYmFyJyksJ1NQQU0nKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgX3N0YXRldG9rZW4ocyxuYW1lcyk6CisgICAgbm9uc3RhdGUgPSAxCisgICAgcGFydHMgPSBzLnNwbGl0KCJfIikKKyAgICBmb3IgaSBpbiByYW5nZSgxLGxlbihwYXJ0cykpOgorICAgICAgICAgaWYgbm90IHBhcnRzW2ldIGluIG5hbWVzIGFuZCBwYXJ0c1tpXSAhPSAnQU5ZJzogYnJlYWsKKyAgICBpZiBpID4gMToKKyAgICAgICBzdGF0ZXMgPSB0dXBsZShwYXJ0c1sxOmldKQorICAgIGVsc2U6CisgICAgICAgc3RhdGVzID0gKCdJTklUSUFMJywpCisKKyAgICBpZiAnQU5ZJyBpbiBzdGF0ZXM6CisgICAgICAgc3RhdGVzID0gdHVwbGUobmFtZXMpCisKKyAgICB0b2tlbm5hbWUgPSAiXyIuam9pbihwYXJ0c1tpOl0pCisgICAgcmV0dXJuIChzdGF0ZXMsdG9rZW5uYW1lKQorCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGV4ZXJSZWZsZWN0KCkKKyMKKyMgVGhpcyBjbGFzcyByZXByZXNlbnRzIGluZm9ybWF0aW9uIG5lZWRlZCB0byBidWlsZCBhIGxleGVyIGFzIGV4dHJhY3RlZCBmcm9tIGEKKyMgdXNlcidzIGlucHV0IGZpbGUuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjbGFzcyBMZXhlclJlZmxlY3Qob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZixsZGljdCxsb2c9Tm9uZSxyZWZsYWdzPTApOgorICAgICAgICBzZWxmLmxkaWN0ICAgICAgPSBsZGljdAorICAgICAgICBzZWxmLmVycm9yX2Z1bmMgPSBOb25lCisgICAgICAgIHNlbGYudG9rZW5zICAgICA9IFtdCisgICAgICAgIHNlbGYucmVmbGFncyAgICA9IHJlZmxhZ3MKKyAgICAgICAgc2VsZi5zdGF0ZWluZm8gID0geyAnSU5JVElBTCcgOiAnaW5jbHVzaXZlJ30KKyAgICAgICAgc2VsZi5maWxlcyAgICAgID0ge30KKyAgICAgICAgc2VsZi5lcnJvciAgICAgID0gMAorCisgICAgICAgIGlmIGxvZyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5sb2cgPSBQbHlMb2dnZXIoc3lzLnN0ZGVycikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubG9nID0gbG9nCisKKyAgICAjIEdldCBhbGwgb2YgdGhlIGJhc2ljIGluZm9ybWF0aW9uCisgICAgZGVmIGdldF9hbGwoc2VsZik6CisgICAgICAgIHNlbGYuZ2V0X3Rva2VucygpCisgICAgICAgIHNlbGYuZ2V0X2xpdGVyYWxzKCkKKyAgICAgICAgc2VsZi5nZXRfc3RhdGVzKCkKKyAgICAgICAgc2VsZi5nZXRfcnVsZXMoKQorICAgICAgICAKKyAgICAjIFZhbGlkYXRlIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24KKyAgICBkZWYgdmFsaWRhdGVfYWxsKHNlbGYpOgorICAgICAgICBzZWxmLnZhbGlkYXRlX3Rva2VucygpCisgICAgICAgIHNlbGYudmFsaWRhdGVfbGl0ZXJhbHMoKQorICAgICAgICBzZWxmLnZhbGlkYXRlX3J1bGVzKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuZXJyb3IKKworICAgICMgR2V0IHRoZSB0b2tlbnMgbWFwCisgICAgZGVmIGdldF90b2tlbnMoc2VsZik6CisgICAgICAgIHRva2VucyA9IHNlbGYubGRpY3QuZ2V0KCJ0b2tlbnMiLE5vbmUpCisgICAgICAgIGlmIG5vdCB0b2tlbnM6CisgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiTm8gdG9rZW4gbGlzdCBpcyBkZWZpbmVkIikKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0b2tlbnMsKGxpc3QsIHR1cGxlKSk6CisgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigidG9rZW5zIG11c3QgYmUgYSBsaXN0IG9yIHR1cGxlIikKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgCisgICAgICAgIGlmIG5vdCB0b2tlbnM6CisgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigidG9rZW5zIGlzIGVtcHR5IikKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLnRva2VucyA9IHRva2VucworCisgICAgIyBWYWxpZGF0ZSB0aGUgdG9rZW5zCisgICAgZGVmIHZhbGlkYXRlX3Rva2VucyhzZWxmKToKKyAgICAgICAgdGVybWluYWxzID0ge30KKyAgICAgICAgZm9yIG4gaW4gc2VsZi50b2tlbnM6CisgICAgICAgICAgICBpZiBub3QgX2lzX2lkZW50aWZpZXIubWF0Y2gobik6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIkJhZCB0b2tlbiBuYW1lICclcyciLG4pCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIGlmIG4gaW4gdGVybWluYWxzOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLndhcm5pbmcoIlRva2VuICclcycgbXVsdGlwbHkgZGVmaW5lZCIsIG4pCisgICAgICAgICAgICB0ZXJtaW5hbHNbbl0gPSAxCisKKyAgICAjIEdldCB0aGUgbGl0ZXJhbHMgc3BlY2lmaWVyCisgICAgZGVmIGdldF9saXRlcmFscyhzZWxmKToKKyAgICAgICAgc2VsZi5saXRlcmFscyA9IHNlbGYubGRpY3QuZ2V0KCJsaXRlcmFscyIsIiIpCisKKyAgICAjIFZhbGlkYXRlIGxpdGVyYWxzCisgICAgZGVmIHZhbGlkYXRlX2xpdGVyYWxzKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgYyBpbiBzZWxmLmxpdGVyYWxzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGMsU3RyaW5nVHlwZXMpIG9yIGxlbihjKSA+IDE6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJJbnZhbGlkIGxpdGVyYWwgJXMuIE11c3QgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIiwgcmVwcihjKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIkludmFsaWQgbGl0ZXJhbHMgc3BlY2lmaWNhdGlvbi4gbGl0ZXJhbHMgbXVzdCBiZSBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMiKQorICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKworICAgIGRlZiBnZXRfc3RhdGVzKHNlbGYpOgorICAgICAgICBzZWxmLnN0YXRlcyA9IHNlbGYubGRpY3QuZ2V0KCJzdGF0ZXMiLE5vbmUpCisgICAgICAgICMgQnVpbGQgc3RhdGVtYXAKKyAgICAgICAgaWYgc2VsZi5zdGF0ZXM6CisgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5zdGF0ZXMsKHR1cGxlLGxpc3QpKToKKyAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJzdGF0ZXMgbXVzdCBiZSBkZWZpbmVkIGFzIGEgdHVwbGUgb3IgbGlzdCIpCisgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICBmb3IgcyBpbiBzZWxmLnN0YXRlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHMsdHVwbGUpIG9yIGxlbihzKSAhPSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJJbnZhbGlkIHN0YXRlIHNwZWNpZmllciAlcy4gTXVzdCBiZSBhIHR1cGxlIChzdGF0ZW5hbWUsJ2V4Y2x1c2l2ZXxpbmNsdXNpdmUnKSIscmVwcihzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBzdGF0ZXR5cGUgPSBzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShuYW1lLFN0cmluZ1R5cGVzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiU3RhdGUgbmFtZSAlcyBtdXN0IGJlIGEgc3RyaW5nIiwgcmVwcihuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgKHN0YXRldHlwZSA9PSAnaW5jbHVzaXZlJyBvciBzdGF0ZXR5cGUgPT0gJ2V4Y2x1c2l2ZScpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJTdGF0ZSB0eXBlIGZvciBzdGF0ZSAlcyBtdXN0IGJlICdpbmNsdXNpdmUnIG9yICdleGNsdXNpdmUnIixuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5zdGF0ZWluZm86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIlN0YXRlICclcycgYWxyZWFkeSBkZWZpbmVkIixuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGVpbmZvW25hbWVdID0gc3RhdGV0eXBlCisKKyAgICAjIEdldCBhbGwgb2YgdGhlIHN5bWJvbHMgd2l0aCBhIHRfIHByZWZpeCBhbmQgc29ydCB0aGVtIGludG8gdmFyaW91cworICAgICMgY2F0ZWdvcmllcyAoZnVuY3Rpb25zLCBzdHJpbmdzLCBlcnJvciBmdW5jdGlvbnMsIGFuZCBpZ25vcmUgY2hhcmFjdGVycykKKworICAgIGRlZiBnZXRfcnVsZXMoc2VsZik6CisgICAgICAgIHRzeW1ib2xzID0gW2YgZm9yIGYgaW4gc2VsZi5sZGljdCBpZiBmWzoyXSA9PSAndF8nIF0KKworICAgICAgICAjIE5vdyBidWlsZCB1cCBhIGxpc3Qgb2YgZnVuY3Rpb25zIGFuZCBhIGxpc3Qgb2Ygc3RyaW5ncworCisgICAgICAgIHNlbGYudG9rbmFtZXMgPSB7IH0gICAgICAgICMgTWFwcGluZyBvZiBzeW1ib2xzIHRvIHRva2VuIG5hbWVzCisgICAgICAgIHNlbGYuZnVuY3N5bSA9ICB7IH0gICAgICAgICMgU3ltYm9scyBkZWZpbmVkIGFzIGZ1bmN0aW9ucworICAgICAgICBzZWxmLnN0cnN5bSA9ICAgeyB9ICAgICAgICAjIFN5bWJvbHMgZGVmaW5lZCBhcyBzdHJpbmdzCisgICAgICAgIHNlbGYuaWdub3JlICAgPSB7IH0gICAgICAgICMgSWdub3JlIHN0cmluZ3MgYnkgc3RhdGUKKyAgICAgICAgc2VsZi5lcnJvcmYgICA9IHsgfSAgICAgICAgIyBFcnJvciBmdW5jdGlvbnMgYnkgc3RhdGUKKworICAgICAgICBmb3IgcyBpbiBzZWxmLnN0YXRlaW5mbzoKKyAgICAgICAgICAgICBzZWxmLmZ1bmNzeW1bc10gPSBbXQorICAgICAgICAgICAgIHNlbGYuc3Ryc3ltW3NdID0gW10KKworICAgICAgICBpZiBsZW4odHN5bWJvbHMpID09IDA6CisgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiTm8gcnVsZXMgb2YgdGhlIGZvcm0gdF9ydWxlbmFtZSBhcmUgZGVmaW5lZCIpCisgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZm9yIGYgaW4gdHN5bWJvbHM6CisgICAgICAgICAgICB0ID0gc2VsZi5sZGljdFtmXQorICAgICAgICAgICAgc3RhdGVzLCB0b2tuYW1lID0gX3N0YXRldG9rZW4oZixzZWxmLnN0YXRlaW5mbykKKyAgICAgICAgICAgIHNlbGYudG9rbmFtZXNbZl0gPSB0b2tuYW1lCisKKyAgICAgICAgICAgIGlmIGhhc2F0dHIodCwiX19jYWxsX18iKToKKyAgICAgICAgICAgICAgICBpZiB0b2tuYW1lID09ICdlcnJvcic6CisgICAgICAgICAgICAgICAgICAgIGZvciBzIGluIHN0YXRlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JmW3NdID0gdAorICAgICAgICAgICAgICAgIGVsaWYgdG9rbmFtZSA9PSAnaWdub3JlJzoKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGZ1bmNfY29kZSh0KS5jb19maXJzdGxpbmVubworICAgICAgICAgICAgICAgICAgICBmaWxlID0gZnVuY19jb2RlKHQpLmNvX2ZpbGVuYW1lCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlczolZDogUnVsZSAnJXMnIG11c3QgYmUgZGVmaW5lZCBhcyBhIHN0cmluZyIsZmlsZSxsaW5lLHQuX19uYW1lX18pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHMgaW4gc3RhdGVzOiAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnVuY3N5bVtzXS5hcHBlbmQoKGYsdCkpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodCwgU3RyaW5nVHlwZXMpOgorICAgICAgICAgICAgICAgIGlmIHRva25hbWUgPT0gJ2lnbm9yZSc6CisgICAgICAgICAgICAgICAgICAgIGZvciBzIGluIHN0YXRlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaWdub3JlW3NdID0gdAorICAgICAgICAgICAgICAgICAgICBpZiAiXFwiIGluIHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy53YXJuaW5nKCIlcyBjb250YWlucyBhIGxpdGVyYWwgYmFja3NsYXNoICdcXCciLGYpCisKKyAgICAgICAgICAgICAgICBlbGlmIHRva25hbWUgPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIlJ1bGUgJyVzJyBtdXN0IGJlIGRlZmluZWQgYXMgYSBmdW5jdGlvbiIsIGYpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHMgaW4gc3RhdGVzOiAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3Ryc3ltW3NdLmFwcGVuZCgoZix0KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzIG5vdCBkZWZpbmVkIGFzIGEgZnVuY3Rpb24gb3Igc3RyaW5nIiwgZikKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorCisgICAgICAgICMgU29ydCB0aGUgZnVuY3Rpb25zIGJ5IGxpbmUgbnVtYmVyCisgICAgICAgIGZvciBmIGluIHNlbGYuZnVuY3N5bS52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzOgorICAgICAgICAgICAgICAgIGYuc29ydChsYW1iZGEgeCx5OiBjbXAoZnVuY19jb2RlKHhbMV0pLmNvX2ZpcnN0bGluZW5vLGZ1bmNfY29kZSh5WzFdKS5jb19maXJzdGxpbmVubykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgUHl0aG9uIDMuMAorICAgICAgICAgICAgICAgIGYuc29ydChrZXk9bGFtYmRhIHg6IGZ1bmNfY29kZSh4WzFdKS5jb19maXJzdGxpbmVubykKKworICAgICAgICAjIFNvcnQgdGhlIHN0cmluZ3MgYnkgcmVndWxhciBleHByZXNzaW9uIGxlbmd0aAorICAgICAgICBmb3IgcyBpbiBzZWxmLnN0cnN5bS52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzOgorICAgICAgICAgICAgICAgIHMuc29ydChsYW1iZGEgeCx5OiAobGVuKHhbMV0pIDwgbGVuKHlbMV0pKSAtIChsZW4oeFsxXSkgPiBsZW4oeVsxXSkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFB5dGhvbiAzLjAKKyAgICAgICAgICAgICAgICBzLnNvcnQoa2V5PWxhbWJkYSB4OiBsZW4oeFsxXSkscmV2ZXJzZT1UcnVlKQorCisgICAgIyBWYWxpZGF0ZSBhbGwgb2YgdGhlIHRfcnVsZXMgY29sbGVjdGVkIAorICAgIGRlZiB2YWxpZGF0ZV9ydWxlcyhzZWxmKToKKyAgICAgICAgZm9yIHN0YXRlIGluIHNlbGYuc3RhdGVpbmZvOgorICAgICAgICAgICAgIyBWYWxpZGF0ZSBhbGwgcnVsZXMgZGVmaW5lZCBieSBmdW5jdGlvbnMKKworICAgICAgICAgICAgCisKKyAgICAgICAgICAgIGZvciBmbmFtZSwgZiBpbiBzZWxmLmZ1bmNzeW1bc3RhdGVdOgorICAgICAgICAgICAgICAgIGxpbmUgPSBmdW5jX2NvZGUoZikuY29fZmlyc3RsaW5lbm8KKyAgICAgICAgICAgICAgICBmaWxlID0gZnVuY19jb2RlKGYpLmNvX2ZpbGVuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5maWxlc1tmaWxlXSA9IDEKKworICAgICAgICAgICAgICAgIHRva25hbWUgPSBzZWxmLnRva25hbWVzW2ZuYW1lXQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZiwgdHlwZXMuTWV0aG9kVHlwZSk6CisgICAgICAgICAgICAgICAgICAgIHJlcWFyZ3MgPSAyCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVxYXJncyA9IDEKKyAgICAgICAgICAgICAgICBuYXJncyA9IGZ1bmNfY29kZShmKS5jb19hcmdjb3VudAorICAgICAgICAgICAgICAgIGlmIG5hcmdzID4gcmVxYXJnczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzOiVkOiBSdWxlICclcycgaGFzIHRvbyBtYW55IGFyZ3VtZW50cyIsZmlsZSxsaW5lLGYuX19uYW1lX18pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBuYXJncyA8IHJlcWFyZ3M6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlczolZDogUnVsZSAnJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiwgZmlsZSxsaW5lLGYuX19uYW1lX18pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBub3QgZi5fX2RvY19fOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXM6JWQ6IE5vIHJlZ3VsYXIgZXhwcmVzc2lvbiBkZWZpbmVkIGZvciBydWxlICclcyciLGZpbGUsbGluZSxmLl9fbmFtZV9fKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBjID0gcmUuY29tcGlsZSgiKD9QPCVzPiVzKSIgJSAoZm5hbWUsZi5fX2RvY19fKSwgcmUuVkVSQk9TRSB8IHNlbGYucmVmbGFncykKKyAgICAgICAgICAgICAgICAgICAgaWYgYy5tYXRjaCgiIik6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXM6JWQ6IFJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcnVsZSAnJXMnIG1hdGNoZXMgZW1wdHkgc3RyaW5nIiwgZmlsZSxsaW5lLGYuX19uYW1lX18pCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgIGV4Y2VwdCByZS5lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgX2V0eXBlLCBlLCBfZXRyYWNlID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzOiVkOiBJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcnVsZSAnJXMnLiAlcyIsIGZpbGUsbGluZSxmLl9fbmFtZV9fLGUpCisgICAgICAgICAgICAgICAgICAgIGlmICcjJyBpbiBmLl9fZG9jX186CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXM6JWQuIE1ha2Ugc3VyZSAnIycgaW4gcnVsZSAnJXMnIGlzIGVzY2FwZWQgd2l0aCAnXFwjJyIsZmlsZSxsaW5lLCBmLl9fbmFtZV9fKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorCisgICAgICAgICAgICAjIFZhbGlkYXRlIGFsbCBydWxlcyBkZWZpbmVkIGJ5IHN0cmluZ3MKKyAgICAgICAgICAgIGZvciBuYW1lLHIgaW4gc2VsZi5zdHJzeW1bc3RhdGVdOgorICAgICAgICAgICAgICAgIHRva25hbWUgPSBzZWxmLnRva25hbWVzW25hbWVdCisgICAgICAgICAgICAgICAgaWYgdG9rbmFtZSA9PSAnZXJyb3InOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiUnVsZSAnJXMnIG11c3QgYmUgZGVmaW5lZCBhcyBhIGZ1bmN0aW9uIiwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIG5vdCB0b2tuYW1lIGluIHNlbGYudG9rZW5zIGFuZCB0b2tuYW1lLmZpbmQoImlnbm9yZV8iKSA8IDA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJSdWxlICclcycgZGVmaW5lZCBmb3IgYW4gdW5zcGVjaWZpZWQgdG9rZW4gJXMiLG5hbWUsdG9rbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgYyA9IHJlLmNvbXBpbGUoIig/UDwlcz4lcykiICUgKG5hbWUscikscmUuVkVSQk9TRSB8IHNlbGYucmVmbGFncykKKyAgICAgICAgICAgICAgICAgICAgaWYgKGMubWF0Y2goIiIpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiUmVndWxhciBleHByZXNzaW9uIGZvciBydWxlICclcycgbWF0Y2hlcyBlbXB0eSBzdHJpbmciLG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICBleGNlcHQgcmUuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIF9ldHlwZSwgZSwgX2V0cmFjZSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcnVsZSAnJXMnLiAlcyIsbmFtZSxlKQorICAgICAgICAgICAgICAgICAgICBpZiAnIycgaW4gcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiTWFrZSBzdXJlICcjJyBpbiBydWxlICclcycgaXMgZXNjYXBlZCB3aXRoICdcXCMnIixuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5mdW5jc3ltW3N0YXRlXSBhbmQgbm90IHNlbGYuc3Ryc3ltW3N0YXRlXToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiTm8gcnVsZXMgZGVmaW5lZCBmb3Igc3RhdGUgJyVzJyIsc3RhdGUpCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKworICAgICAgICAgICAgIyBWYWxpZGF0ZSB0aGUgZXJyb3IgZnVuY3Rpb24KKyAgICAgICAgICAgIGVmdW5jID0gc2VsZi5lcnJvcmYuZ2V0KHN0YXRlLE5vbmUpCisgICAgICAgICAgICBpZiBlZnVuYzoKKyAgICAgICAgICAgICAgICBmID0gZWZ1bmMKKyAgICAgICAgICAgICAgICBsaW5lID0gZnVuY19jb2RlKGYpLmNvX2ZpcnN0bGluZW5vCisgICAgICAgICAgICAgICAgZmlsZSA9IGZ1bmNfY29kZShmKS5jb19maWxlbmFtZQorICAgICAgICAgICAgICAgIHNlbGYuZmlsZXNbZmlsZV0gPSAxCisKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGYsIHR5cGVzLk1ldGhvZFR5cGUpOgorICAgICAgICAgICAgICAgICAgICByZXFhcmdzID0gMgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlcWFyZ3MgPSAxCisgICAgICAgICAgICAgICAgbmFyZ3MgPSBmdW5jX2NvZGUoZikuY29fYXJnY291bnQKKyAgICAgICAgICAgICAgICBpZiBuYXJncyA+IHJlcWFyZ3M6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlczolZDogUnVsZSAnJXMnIGhhcyB0b28gbWFueSBhcmd1bWVudHMiLGZpbGUsbGluZSxmLl9fbmFtZV9fKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorCisgICAgICAgICAgICAgICAgaWYgbmFyZ3MgPCByZXFhcmdzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXM6JWQ6IFJ1bGUgJyVzJyByZXF1aXJlcyBhbiBhcmd1bWVudCIsIGZpbGUsbGluZSxmLl9fbmFtZV9fKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorCisgICAgICAgIGZvciBmIGluIHNlbGYuZmlsZXM6CisgICAgICAgICAgICBzZWxmLnZhbGlkYXRlX2ZpbGUoZikKKworCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgdmFsaWRhdGVfZmlsZSgpCisgICAgIworICAgICMgVGhpcyBjaGVja3MgdG8gc2VlIGlmIHRoZXJlIGFyZSBkdXBsaWNhdGVkIHRfcnVsZW5hbWUoKSBmdW5jdGlvbnMgb3Igc3RyaW5ncworICAgICMgaW4gdGhlIHBhcnNlciBpbnB1dCBmaWxlLiAgVGhpcyBpcyBkb25lIHVzaW5nIGEgc2ltcGxlIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICMgbWF0Y2ggb24gZWFjaCBsaW5lIGluIHRoZSBnaXZlbiBmaWxlLiAgCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHZhbGlkYXRlX2ZpbGUoc2VsZixmaWxlbmFtZSk6CisgICAgICAgIGltcG9ydCBvcy5wYXRoCisgICAgICAgIGJhc2UsZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKKyAgICAgICAgaWYgZXh0ICE9ICcucHknOiByZXR1cm4gICAgICAgICAjIE5vIGlkZWEgd2hhdCB0aGUgZmlsZSBpcy4gUmV0dXJuIE9LCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUpCisgICAgICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHJldHVybiAgICAgICAgICAgICAgICAgICAgICAjIENvdWxkbid0IGZpbmQgdGhlIGZpbGUuICBEb24ndCB3b3JyeSBhYm91dCBpdAorCisgICAgICAgIGZyZSA9IHJlLmNvbXBpbGUocidccypkZWZccysodF9bYS16QS1aXzAtOV0qKVwoJykKKyAgICAgICAgc3JlID0gcmUuY29tcGlsZShyJ1xzKih0X1thLXpBLVpfMC05XSopXHMqPScpCisKKyAgICAgICAgY291bnRoYXNoID0geyB9CisgICAgICAgIGxpbmVuID0gMQorICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgIG0gPSBmcmUubWF0Y2gobCkKKyAgICAgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgICAgIG0gPSBzcmUubWF0Y2gobCkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgbmFtZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBwcmV2ID0gY291bnRoYXNoLmdldChuYW1lKQorICAgICAgICAgICAgICAgIGlmIG5vdCBwcmV2OgorICAgICAgICAgICAgICAgICAgICBjb3VudGhhc2hbbmFtZV0gPSBsaW5lbgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlczolZDogUnVsZSAlcyByZWRlZmluZWQuIFByZXZpb3VzbHkgZGVmaW5lZCBvbiBsaW5lICVkIixmaWxlbmFtZSxsaW5lbixuYW1lLHByZXYpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICBsaW5lbiArPSAxCisgICAgICAgICAgICAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbGV4KG1vZHVsZSkKKyMKKyMgQnVpbGQgYWxsIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gcnVsZXMgZnJvbSBkZWZpbml0aW9ucyBpbiB0aGUgc3VwcGxpZWQgbW9kdWxlCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWYgbGV4KG1vZHVsZT1Ob25lLG9iamVjdD1Ob25lLGRlYnVnPTAsb3B0aW1pemU9MCxsZXh0YWI9ImxleHRhYiIscmVmbGFncz0wLG5vd2Fybj0wLG91dHB1dGRpcj0iIiwgZGVidWdsb2c9Tm9uZSwgZXJyb3Jsb2c9Tm9uZSk6CisgICAgZ2xvYmFsIGxleGVyCisgICAgbGRpY3QgPSBOb25lCisgICAgc3RhdGVpbmZvICA9IHsgJ0lOSVRJQUwnIDogJ2luY2x1c2l2ZSd9CisgICAgbGV4b2JqID0gTGV4ZXIoKQorICAgIGxleG9iai5sZXhvcHRpbWl6ZSA9IG9wdGltaXplCisgICAgZ2xvYmFsIHRva2VuLGlucHV0CisKKyAgICBpZiBlcnJvcmxvZyBpcyBOb25lOgorICAgICAgICBlcnJvcmxvZyA9IFBseUxvZ2dlcihzeXMuc3RkZXJyKQorCisgICAgaWYgZGVidWc6CisgICAgICAgIGlmIGRlYnVnbG9nIGlzIE5vbmU6CisgICAgICAgICAgICBkZWJ1Z2xvZyA9IFBseUxvZ2dlcihzeXMuc3RkZXJyKQorCisgICAgIyBHZXQgdGhlIG1vZHVsZSBkaWN0aW9uYXJ5IHVzZWQgZm9yIHRoZSBsZXhlcgorICAgIGlmIG9iamVjdDogbW9kdWxlID0gb2JqZWN0CisKKyAgICBpZiBtb2R1bGU6CisgICAgICAgIF9pdGVtcyA9IFsoayxnZXRhdHRyKG1vZHVsZSxrKSkgZm9yIGsgaW4gZGlyKG1vZHVsZSldCisgICAgICAgIGxkaWN0ID0gZGljdChfaXRlbXMpCisgICAgZWxzZToKKyAgICAgICAgbGRpY3QgPSBnZXRfY2FsbGVyX21vZHVsZV9kaWN0KDIpCisKKyAgICAjIENvbGxlY3QgcGFyc2VyIGluZm9ybWF0aW9uIGZyb20gdGhlIGRpY3Rpb25hcnkKKyAgICBsaW5mbyA9IExleGVyUmVmbGVjdChsZGljdCxsb2c9ZXJyb3Jsb2cscmVmbGFncz1yZWZsYWdzKQorICAgIGxpbmZvLmdldF9hbGwoKQorICAgIGlmIG5vdCBvcHRpbWl6ZToKKyAgICAgICAgaWYgbGluZm8udmFsaWRhdGVfYWxsKCk6CisgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiQ2FuJ3QgYnVpbGQgbGV4ZXIiKQorCisgICAgaWYgb3B0aW1pemUgYW5kIGxleHRhYjoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGV4b2JqLnJlYWR0YWIobGV4dGFiLGxkaWN0KQorICAgICAgICAgICAgdG9rZW4gPSBsZXhvYmoudG9rZW4KKyAgICAgICAgICAgIGlucHV0ID0gbGV4b2JqLmlucHV0CisgICAgICAgICAgICBsZXhlciA9IGxleG9iagorICAgICAgICAgICAgcmV0dXJuIGxleG9iagorCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICMgRHVtcCBzb21lIGJhc2ljIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgorICAgIGlmIGRlYnVnOgorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCJsZXg6IHRva2VucyAgID0gJXIiLCBsaW5mby50b2tlbnMpCisgICAgICAgIGRlYnVnbG9nLmluZm8oImxleDogbGl0ZXJhbHMgPSAlciIsIGxpbmZvLmxpdGVyYWxzKQorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCJsZXg6IHN0YXRlcyAgID0gJXIiLCBsaW5mby5zdGF0ZWluZm8pCisKKyAgICAjIEJ1aWxkIGEgZGljdGlvbmFyeSBvZiB2YWxpZCB0b2tlbiBuYW1lcworICAgIGxleG9iai5sZXh0b2tlbnMgPSB7IH0KKyAgICBmb3IgbiBpbiBsaW5mby50b2tlbnM6CisgICAgICAgIGxleG9iai5sZXh0b2tlbnNbbl0gPSAxCisKKyAgICAjIEdldCBsaXRlcmFscyBzcGVjaWZpY2F0aW9uCisgICAgaWYgaXNpbnN0YW5jZShsaW5mby5saXRlcmFscywobGlzdCx0dXBsZSkpOgorICAgICAgICBsZXhvYmoubGV4bGl0ZXJhbHMgPSB0eXBlKGxpbmZvLmxpdGVyYWxzWzBdKSgpLmpvaW4obGluZm8ubGl0ZXJhbHMpCisgICAgZWxzZToKKyAgICAgICAgbGV4b2JqLmxleGxpdGVyYWxzID0gbGluZm8ubGl0ZXJhbHMKKworICAgICMgR2V0IHRoZSBzdGF0ZWluZm8gZGljdGlvbmFyeQorICAgIHN0YXRlaW5mbyA9IGxpbmZvLnN0YXRlaW5mbworCisgICAgcmVnZXhzID0geyB9CisgICAgIyBCdWlsZCB0aGUgbWFzdGVyIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKyAgICBmb3Igc3RhdGUgaW4gc3RhdGVpbmZvOgorICAgICAgICByZWdleF9saXN0ID0gW10KKworICAgICAgICAjIEFkZCBydWxlcyBkZWZpbmVkIGJ5IGZ1bmN0aW9ucyBmaXJzdAorICAgICAgICBmb3IgZm5hbWUsIGYgaW4gbGluZm8uZnVuY3N5bVtzdGF0ZV06CisgICAgICAgICAgICBsaW5lID0gZnVuY19jb2RlKGYpLmNvX2ZpcnN0bGluZW5vCisgICAgICAgICAgICBmaWxlID0gZnVuY19jb2RlKGYpLmNvX2ZpbGVuYW1lCisgICAgICAgICAgICByZWdleF9saXN0LmFwcGVuZCgiKD9QPCVzPiVzKSIgJSAoZm5hbWUsZi5fX2RvY19fKSkKKyAgICAgICAgICAgIGlmIGRlYnVnOgorICAgICAgICAgICAgICAgIGRlYnVnbG9nLmluZm8oImxleDogQWRkaW5nIHJ1bGUgJXMgLT4gJyVzJyAoc3RhdGUgJyVzJykiLGZuYW1lLGYuX19kb2NfXywgc3RhdGUpCisKKyAgICAgICAgIyBOb3cgYWRkIGFsbCBvZiB0aGUgc2ltcGxlIHJ1bGVzCisgICAgICAgIGZvciBuYW1lLHIgaW4gbGluZm8uc3Ryc3ltW3N0YXRlXToKKyAgICAgICAgICAgIHJlZ2V4X2xpc3QuYXBwZW5kKCIoP1A8JXM+JXMpIiAlIChuYW1lLHIpKQorICAgICAgICAgICAgaWYgZGVidWc6CisgICAgICAgICAgICAgICAgZGVidWdsb2cuaW5mbygibGV4OiBBZGRpbmcgcnVsZSAlcyAtPiAnJXMnIChzdGF0ZSAnJXMnKSIsbmFtZSxyLCBzdGF0ZSkKKworICAgICAgICByZWdleHNbc3RhdGVdID0gcmVnZXhfbGlzdAorCisgICAgIyBCdWlsZCB0aGUgbWFzdGVyIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKworICAgIGlmIGRlYnVnOgorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCJsZXg6ID09PT0gTUFTVEVSIFJFR0VYUyBGT0xMT1cgPT09PSIpCisKKyAgICBmb3Igc3RhdGUgaW4gcmVnZXhzOgorICAgICAgICBsZXhyZSwgcmVfdGV4dCwgcmVfbmFtZXMgPSBfZm9ybV9tYXN0ZXJfcmUocmVnZXhzW3N0YXRlXSxyZWZsYWdzLGxkaWN0LGxpbmZvLnRva25hbWVzKQorICAgICAgICBsZXhvYmoubGV4c3RhdGVyZVtzdGF0ZV0gPSBsZXhyZQorICAgICAgICBsZXhvYmoubGV4c3RhdGVyZXRleHRbc3RhdGVdID0gcmVfdGV4dAorICAgICAgICBsZXhvYmoubGV4c3RhdGVyZW5hbWVzW3N0YXRlXSA9IHJlX25hbWVzCisgICAgICAgIGlmIGRlYnVnOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHJlX3RleHQpKToKKyAgICAgICAgICAgICAgICBkZWJ1Z2xvZy5pbmZvKCJsZXg6IHN0YXRlICclcycgOiByZWdleFslZF0gPSAnJXMnIixzdGF0ZSwgaSwgcmVfdGV4dFtpXSkKKworICAgICMgRm9yIGluY2x1c2l2ZSBzdGF0ZXMsIHdlIG5lZWQgdG8gYWRkIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zIGZyb20gdGhlIElOSVRJQUwgc3RhdGUKKyAgICBmb3Igc3RhdGUsc3R5cGUgaW4gc3RhdGVpbmZvLml0ZW1zKCk6CisgICAgICAgIGlmIHN0YXRlICE9ICJJTklUSUFMIiBhbmQgc3R5cGUgPT0gJ2luY2x1c2l2ZSc6CisgICAgICAgICAgICAgbGV4b2JqLmxleHN0YXRlcmVbc3RhdGVdLmV4dGVuZChsZXhvYmoubGV4c3RhdGVyZVsnSU5JVElBTCddKQorICAgICAgICAgICAgIGxleG9iai5sZXhzdGF0ZXJldGV4dFtzdGF0ZV0uZXh0ZW5kKGxleG9iai5sZXhzdGF0ZXJldGV4dFsnSU5JVElBTCddKQorICAgICAgICAgICAgIGxleG9iai5sZXhzdGF0ZXJlbmFtZXNbc3RhdGVdLmV4dGVuZChsZXhvYmoubGV4c3RhdGVyZW5hbWVzWydJTklUSUFMJ10pCisKKyAgICBsZXhvYmoubGV4c3RhdGVpbmZvID0gc3RhdGVpbmZvCisgICAgbGV4b2JqLmxleHJlID0gbGV4b2JqLmxleHN0YXRlcmVbIklOSVRJQUwiXQorICAgIGxleG9iai5sZXhyZXRleHQgPSBsZXhvYmoubGV4c3RhdGVyZXRleHRbIklOSVRJQUwiXQorICAgIGxleG9iai5sZXhyZWZsYWdzID0gcmVmbGFncworCisgICAgIyBTZXQgdXAgaWdub3JlIHZhcmlhYmxlcworICAgIGxleG9iai5sZXhzdGF0ZWlnbm9yZSA9IGxpbmZvLmlnbm9yZQorICAgIGxleG9iai5sZXhpZ25vcmUgPSBsZXhvYmoubGV4c3RhdGVpZ25vcmUuZ2V0KCJJTklUSUFMIiwiIikKKworICAgICMgU2V0IHVwIGVycm9yIGZ1bmN0aW9ucworICAgIGxleG9iai5sZXhzdGF0ZWVycm9yZiA9IGxpbmZvLmVycm9yZgorICAgIGxleG9iai5sZXhlcnJvcmYgPSBsaW5mby5lcnJvcmYuZ2V0KCJJTklUSUFMIixOb25lKQorICAgIGlmIG5vdCBsZXhvYmoubGV4ZXJyb3JmOgorICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJObyB0X2Vycm9yIHJ1bGUgaXMgZGVmaW5lZCIpCisKKyAgICAjIENoZWNrIHN0YXRlIGluZm9ybWF0aW9uIGZvciBpZ25vcmUgYW5kIGVycm9yIHJ1bGVzCisgICAgZm9yIHMsc3R5cGUgaW4gc3RhdGVpbmZvLml0ZW1zKCk6CisgICAgICAgIGlmIHN0eXBlID09ICdleGNsdXNpdmUnOgorICAgICAgICAgICAgICBpZiBub3QgcyBpbiBsaW5mby5lcnJvcmY6CisgICAgICAgICAgICAgICAgICAgZXJyb3Jsb2cud2FybmluZygiTm8gZXJyb3IgcnVsZSBpcyBkZWZpbmVkIGZvciBleGNsdXNpdmUgc3RhdGUgJyVzJyIsIHMpCisgICAgICAgICAgICAgIGlmIG5vdCBzIGluIGxpbmZvLmlnbm9yZSBhbmQgbGV4b2JqLmxleGlnbm9yZToKKyAgICAgICAgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJObyBpZ25vcmUgcnVsZSBpcyBkZWZpbmVkIGZvciBleGNsdXNpdmUgc3RhdGUgJyVzJyIsIHMpCisgICAgICAgIGVsaWYgc3R5cGUgPT0gJ2luY2x1c2l2ZSc6CisgICAgICAgICAgICAgIGlmIG5vdCBzIGluIGxpbmZvLmVycm9yZjoKKyAgICAgICAgICAgICAgICAgICBsaW5mby5lcnJvcmZbc10gPSBsaW5mby5lcnJvcmYuZ2V0KCJJTklUSUFMIixOb25lKQorICAgICAgICAgICAgICBpZiBub3QgcyBpbiBsaW5mby5pZ25vcmU6CisgICAgICAgICAgICAgICAgICAgbGluZm8uaWdub3JlW3NdID0gbGluZm8uaWdub3JlLmdldCgiSU5JVElBTCIsIiIpCisKKyAgICAjIENyZWF0ZSBnbG9iYWwgdmVyc2lvbnMgb2YgdGhlIHRva2VuKCkgYW5kIGlucHV0KCkgZnVuY3Rpb25zCisgICAgdG9rZW4gPSBsZXhvYmoudG9rZW4KKyAgICBpbnB1dCA9IGxleG9iai5pbnB1dAorICAgIGxleGVyID0gbGV4b2JqCisKKyAgICAjIElmIGluIG9wdGltaXplIG1vZGUsIHdlIHdyaXRlIHRoZSBsZXh0YWIKKyAgICBpZiBsZXh0YWIgYW5kIG9wdGltaXplOgorICAgICAgICBsZXhvYmoud3JpdGV0YWIobGV4dGFiLG91dHB1dGRpcikKKworICAgIHJldHVybiBsZXhvYmoKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBydW5tYWluKCkKKyMKKyMgVGhpcyBydW5zIHRoZSBsZXhlciBhcyBhIG1haW4gcHJvZ3JhbQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgcnVubWFpbihsZXhlcj1Ob25lLGRhdGE9Tm9uZSk6CisgICAgaWYgbm90IGRhdGE6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gc3lzLmFyZ3ZbMV0KKyAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQorICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJSZWFkaW5nIGZyb20gc3RhbmRhcmQgaW5wdXQgKHR5cGUgRU9GIHRvIGVuZCk6XG4iKQorICAgICAgICAgICAgZGF0YSA9IHN5cy5zdGRpbi5yZWFkKCkKKworICAgIGlmIGxleGVyOgorICAgICAgICBfaW5wdXQgPSBsZXhlci5pbnB1dAorICAgIGVsc2U6CisgICAgICAgIF9pbnB1dCA9IGlucHV0CisgICAgX2lucHV0KGRhdGEpCisgICAgaWYgbGV4ZXI6CisgICAgICAgIF90b2tlbiA9IGxleGVyLnRva2VuCisgICAgZWxzZToKKyAgICAgICAgX3Rva2VuID0gdG9rZW4KKworICAgIHdoaWxlIDE6CisgICAgICAgIHRvayA9IF90b2tlbigpCisgICAgICAgIGlmIG5vdCB0b2s6IGJyZWFrCisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiglcywlciwlZCwlZClcbiIgJSAodG9rLnR5cGUsIHRvay52YWx1ZSwgdG9rLmxpbmVubyx0b2subGV4cG9zKSkKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBAVE9LRU4ocmVnZXgpCisjCisjIFRoaXMgZGVjb3JhdG9yIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgcmVnZXggZXhwcmVzc2lvbiBvbiBhIGZ1bmN0aW9uCisjIHdoZW4gaXRzIGRvY3N0cmluZyBtaWdodCBuZWVkIHRvIGJlIHNldCBpbiBhbiBhbHRlcm5hdGl2ZSB3YXkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIFRPS0VOKHIpOgorICAgIGRlZiBzZXRfZG9jKGYpOgorICAgICAgICBpZiBoYXNhdHRyKHIsIl9fY2FsbF9fIik6CisgICAgICAgICAgICBmLl9fZG9jX18gPSByLl9fZG9jX18KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGYuX19kb2NfXyA9IHIKKyAgICAgICAgcmV0dXJuIGYKKyAgICByZXR1cm4gc2V0X2RvYworCisjIEFsdGVybmF0aXZlIHNwZWxsaW5nIG9mIHRoZSBUT0tFTiBkZWNvcmF0b3IKK1Rva2VuID0gVE9LRU4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wbHkveWFjYy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcGx5L3lhY2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE2OGZkOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcGx5L3lhY2MucHkKQEAgLTAsMCArMSwzMjc2IEBACisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHBseTogeWFjYy5weQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOSwKKyMgRGF2aWQgTS4gQmVhemxleSAoRGFiZWF6IExMQykKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIyAKKyMgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisjICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gIAorIyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisjICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorIyAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAgCisjICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRGF2aWQgQmVhemxleSBvciBEYWJlYXogTExDIG1heSBiZSB1c2VkIHRvCisjICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyMgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgVGhpcyBpbXBsZW1lbnRzIGFuIExSIHBhcnNlciB0aGF0IGlzIGNvbnN0cnVjdGVkIGZyb20gZ3JhbW1hciBydWxlcyBkZWZpbmVkCisjIGFzIFB5dGhvbiBmdW5jdGlvbnMuIFRoZSBncmFtbWVyIGlzIHNwZWNpZmllZCBieSBzdXBwbHlpbmcgdGhlIEJORiBpbnNpZGUKKyMgUHl0aG9uIGRvY3VtZW50YXRpb24gc3RyaW5ncy4gIFRoZSBpbnNwaXJhdGlvbiBmb3IgdGhpcyB0ZWNobmlxdWUgd2FzIGJvcnJvd2VkCisjIGZyb20gSm9obiBBeWNvY2sncyBTcGFyayBwYXJzaW5nIHN5c3RlbS4gIFBMWSBtaWdodCBiZSB2aWV3ZWQgYXMgY3Jvc3MgYmV0d2VlbgorIyBTcGFyayBhbmQgdGhlIEdOVSBiaXNvbiB1dGlsaXR5LgorIworIyBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpcyBvbmx5IHNvbWV3aGF0IG9iamVjdC1vcmllbnRlZC4gVGhlCisjIExSIHBhcnNlciBpdHNlbGYgaXMgZGVmaW5lZCBpbiB0ZXJtcyBvZiBhbiBvYmplY3QgKHdoaWNoIGFsbG93cyBtdWx0aXBsZQorIyBwYXJzZXJzIHRvIGNvLWV4aXN0KS4gIEhvd2V2ZXIsIG1vc3Qgb2YgdGhlIHZhcmlhYmxlcyB1c2VkIGR1cmluZyB0YWJsZQorIyBjb25zdHJ1Y3Rpb24gYXJlIGRlZmluZWQgaW4gdGVybXMgb2YgZ2xvYmFsIHZhcmlhYmxlcy4gIFVzZXJzIHNob3VsZG4ndAorIyBub3RpY2UgdW5sZXNzIHRoZXkgYXJlIHRyeWluZyB0byBkZWZpbmUgbXVsdGlwbGUgcGFyc2VycyBhdCB0aGUgc2FtZQorIyB0aW1lIHVzaW5nIHRocmVhZHMgKGluIHdoaWNoIGNhc2UgdGhleSBzaG91bGQgaGF2ZSB0aGVpciBoZWFkIGV4YW1pbmVkKS4KKyMKKyMgVGhpcyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBib3RoIFNMUiBhbmQgTEFMUigxKSBwYXJzaW5nLiAgTEFMUigxKQorIyBzdXBwb3J0IHdhcyBvcmlnaW5hbGx5IGltcGxlbWVudGVkIGJ5IEVsaWFzIElvdXAgKGV6aW91cEBhbHVtbmkudWNoaWNhZ28uZWR1KSwKKyMgdXNpbmcgdGhlIGFsZ29yaXRobSBmb3VuZCBpbiBBaG8sIFNldGhpLCBhbmQgVWxsbWFuICJDb21waWxlcnM6IFByaW5jaXBsZXMsCisjIFRlY2huaXF1ZXMsIGFuZCBUb29scyIgKFRoZSBEcmFnb24gQm9vaykuICBMQUxSKDEpIGhhcyBzaW5jZSBiZWVuIHJlcGxhY2VkCisjIGJ5IHRoZSBtb3JlIGVmZmljaWVudCBEZVJlbWVyIGFuZCBQZW5uZWxsbyBhbGdvcml0aG0uCisjCisjIDo6Ojo6Ojo6IFdBUk5JTkcgOjo6Ojo6OgorIworIyBDb25zdHJ1Y3Rpb24gb2YgTFIgcGFyc2luZyB0YWJsZXMgaXMgZmFpcmx5IGNvbXBsaWNhdGVkIGFuZCBleHBlbnNpdmUuCisjIFRvIG1ha2UgdGhpcyBtb2R1bGUgcnVuIGZhc3QsIGEgKkxPVCogb2Ygd29yayBoYXMgYmVlbiBwdXQgaW50bworIyBvcHRpbWl6YXRpb24tLS1vZnRlbiBhdCB0aGUgZXhwZW5zaXZlIG9mIHJlYWRhYmlsaXR5IGFuZCB3aGF0IG1pZ2h0CisjIGNvbnNpZGVyIHRvIGJlIGdvb2QgUHl0aG9uICJjb2Rpbmcgc3R5bGUuIiAgIE1vZGlmeSB0aGUgY29kZSBhdCB5b3VyCisjIG93biByaXNrIQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK19fdmVyc2lvbl9fICAgID0gIjMuMyIKK19fdGFidmVyc2lvbl9fID0gIjMuMiIgICAgICAgIyBUYWJsZSB2ZXJzaW9uCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgICAgICAgICAgICAgICAgID09PSBVc2VyIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzID09PQorIworIyBDaGFuZ2UgdGhlc2UgdG8gbW9kaWZ5IHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHlhY2MgKGlmIHlvdSB3aXNoKQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3lhY2NkZWJ1ZyAgID0gMCAgICAgICAgICAgICAgICAjIERlYnVnZ2luZyBtb2RlLiAgSWYgc2V0LCB5YWNjIGdlbmVyYXRlcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhICdwYXJzZXIub3V0JyBmaWxlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorCitkZWJ1Z19maWxlICA9ICdwYXJzZXIub3V0JyAgICAgIyBEZWZhdWx0IG5hbWUgb2YgdGhlIGRlYnVnZ2luZyBmaWxlCit0YWJfbW9kdWxlICA9ICdwYXJzZXRhYicgICAgICAgIyBEZWZhdWx0IG5hbWUgb2YgdGhlIHRhYmxlIG1vZHVsZQorZGVmYXVsdF9sciAgPSAnTEFMUicgICAgICAgICAgICMgRGVmYXVsdCBMUiB0YWJsZSBnZW5lcmF0aW9uIG1ldGhvZAorCitlcnJvcl9jb3VudCA9IDMgICAgICAgICAgICAgICAgIyBOdW1iZXIgb2Ygc3ltYm9scyB0aGF0IG11c3QgYmUgc2hpZnRlZCB0byBsZWF2ZSByZWNvdmVyeSBtb2RlCisKK3lhY2NkZXZlbCAgID0gMCAgICAgICAgICAgICAgICAjIFNldCB0byBUcnVlIGlmIGRldmVsb3BpbmcgeWFjYy4gIFRoaXMgdHVybnMgb2ZmIG9wdGltaXplZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW1wbGVtZW50YXRpb25zIG9mIGNlcnRhaW4gZnVuY3Rpb25zLgorCityZXN1bHRsaW1pdCA9IDQwICAgICAgICAgICAgICAgIyBTaXplIGxpbWl0IG9mIHJlc3VsdHMgd2hlbiBydW5uaW5nIGluIGRlYnVnIG1vZGUuCisKK3BpY2tsZV9wcm90b2NvbCA9IDAgICAgICAgICAgICAjIFByb3RvY29sIHRvIHVzZSB3aGVuIHdyaXRpbmcgcGlja2xlIGZpbGVzCisKK2ltcG9ydCByZSwgdHlwZXMsIHN5cywgb3MucGF0aAorCisjIENvbXBhdGliaWxpdHkgZnVuY3Rpb24gZm9yIHB5dGhvbiAyLjYvMy4wCitpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMzoKKyAgICBkZWYgZnVuY19jb2RlKGYpOgorICAgICAgICByZXR1cm4gZi5mdW5jX2NvZGUKK2Vsc2U6CisgICAgZGVmIGZ1bmNfY29kZShmKToKKyAgICAgICAgcmV0dXJuIGYuX19jb2RlX18KKworIyBDb21wYXRpYmlsaXR5Cit0cnk6CisgICAgTUFYSU5UID0gc3lzLm1heGludAorZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgIE1BWElOVCA9IHN5cy5tYXhzaXplCisKKyMgUHl0aG9uIDIueC8zLjAgY29tcGF0aWJpbGl0eS4KK2RlZiBsb2FkX3BseV9sZXgoKToKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMzoKKyAgICAgICAgaW1wb3J0IGxleAorICAgIGVsc2U6CisgICAgICAgIGltcG9ydCBwbHkubGV4IGFzIGxleAorICAgIHJldHVybiBsZXgKKworIyBUaGlzIG9iamVjdCBpcyBhIHN0YW5kLWluIGZvciBhIGxvZ2dpbmcgb2JqZWN0IGNyZWF0ZWQgYnkgdGhlIAorIyBsb2dnaW5nIG1vZHVsZS4gICBQTFkgd2lsbCB1c2UgdGhpcyBieSBkZWZhdWx0IHRvIGNyZWF0ZSB0aGluZ3MKKyMgc3VjaCBhcyB0aGUgcGFyc2VyLm91dCBmaWxlLiAgSWYgYSB1c2VyIHdhbnRzIG1vcmUgZGV0YWlsZWQKKyMgaW5mb3JtYXRpb24sIHRoZXkgY2FuIGNyZWF0ZSB0aGVpciBvd24gbG9nZ2luZyBvYmplY3QgYW5kIHBhc3MKKyMgaXQgaW50byBQTFkuCisKK2NsYXNzIFBseUxvZ2dlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLGYpOgorICAgICAgICBzZWxmLmYgPSBmCisgICAgZGVmIGRlYnVnKHNlbGYsbXNnLCphcmdzLCoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5mLndyaXRlKChtc2cgJSBhcmdzKSArICJcbiIpCisgICAgaW5mbyAgICAgPSBkZWJ1ZworCisgICAgZGVmIHdhcm5pbmcoc2VsZixtc2csKmFyZ3MsKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmYud3JpdGUoIldBUk5JTkc6ICIrIChtc2cgJSBhcmdzKSArICJcbiIpCisKKyAgICBkZWYgZXJyb3Ioc2VsZixtc2csKmFyZ3MsKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmYud3JpdGUoIkVSUk9SOiAiICsgKG1zZyAlIGFyZ3MpICsgIlxuIikKKworICAgIGNyaXRpY2FsID0gZGVidWcKKworIyBOdWxsIGxvZ2dlciBpcyB1c2VkIHdoZW4gbm8gb3V0cHV0IGlzIGdlbmVyYXRlZC4gRG9lcyBub3RoaW5nLgorY2xhc3MgTnVsbExvZ2dlcihvYmplY3QpOgorICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKHNlbGYsbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsKmFyZ3MsKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAKKyMgRXhjZXB0aW9uIHJhaXNlZCBmb3IgeWFjYy1yZWxhdGVkIGVycm9ycworY2xhc3MgWWFjY0Vycm9yKEV4Y2VwdGlvbik6ICAgcGFzcworCisjIEZvcm1hdCB0aGUgcmVzdWx0IG1lc3NhZ2UgdGhhdCB0aGUgcGFyc2VyIHByb2R1Y2VzIHdoZW4gcnVubmluZyBpbiBkZWJ1ZyBtb2RlLgorZGVmIGZvcm1hdF9yZXN1bHQocik6CisgICAgcmVwcl9zdHIgPSByZXByKHIpCisgICAgaWYgJ1xuJyBpbiByZXByX3N0cjogcmVwcl9zdHIgPSByZXByKHJlcHJfc3RyKQorICAgIGlmIGxlbihyZXByX3N0cikgPiByZXN1bHRsaW1pdDoKKyAgICAgICAgcmVwcl9zdHIgPSByZXByX3N0cls6cmVzdWx0bGltaXRdKyIgLi4uIgorICAgIHJlc3VsdCA9ICI8JXMgQCAweCV4PiAoJXMpIiAlICh0eXBlKHIpLl9fbmFtZV9fLGlkKHIpLHJlcHJfc3RyKQorICAgIHJldHVybiByZXN1bHQKKworCisjIEZvcm1hdCBzdGFjayBlbnRyaWVzIHdoZW4gdGhlIHBhcnNlciBpcyBydW5uaW5nIGluIGRlYnVnIG1vZGUKK2RlZiBmb3JtYXRfc3RhY2tfZW50cnkocik6CisgICAgcmVwcl9zdHIgPSByZXByKHIpCisgICAgaWYgJ1xuJyBpbiByZXByX3N0cjogcmVwcl9zdHIgPSByZXByKHJlcHJfc3RyKQorICAgIGlmIGxlbihyZXByX3N0cikgPCAxNjoKKyAgICAgICAgcmV0dXJuIHJlcHJfc3RyCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICI8JXMgQCAweCV4PiIgJSAodHlwZShyKS5fX25hbWVfXyxpZChyKSkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICAgICAgICAgICAgICAgICAgICAgPT09ICBMUiBQYXJzaW5nIEVuZ2luZSA9PT0KKyMKKyMgVGhlIGZvbGxvd2luZyBjbGFzc2VzIGFyZSB1c2VkIGZvciB0aGUgTFIgcGFyc2VyIGl0c2VsZi4gIFRoZXNlIGFyZSBub3QKKyMgdXNlZCBkdXJpbmcgdGFibGUgY29uc3RydWN0aW9uIGFuZCBhcmUgaW5kZXBlbmRlbnQgb2YgdGhlIGFjdHVhbCBMUgorIyB0YWJsZSBnZW5lcmF0aW9uIGFsZ29yaXRobQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGhvbGQgbm9uLXRlcm1pbmFsIGdyYW1tYXIgc3ltYm9scyBkdXJpbmcgcGFyc2luZy4KKyMgSXQgbm9ybWFsbHkgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBzZXQ6CisjICAgICAgICAudHlwZSAgICAgICA9IEdyYW1tYXIgc3ltYm9sIHR5cGUKKyMgICAgICAgIC52YWx1ZSAgICAgID0gU3ltYm9sIHZhbHVlCisjICAgICAgICAubGluZW5vICAgICA9IFN0YXJ0aW5nIGxpbmUgbnVtYmVyCisjICAgICAgICAuZW5kbGluZW5vICA9IEVuZGluZyBsaW5lIG51bWJlciAob3B0aW9uYWwsIHNldCBhdXRvbWF0aWNhbGx5KQorIyAgICAgICAgLmxleHBvcyAgICAgPSBTdGFydGluZyBsZXggcG9zaXRpb24KKyMgICAgICAgIC5lbmRsZXhwb3MgID0gRW5kaW5nIGxleCBwb3NpdGlvbiAob3B0aW9uYWwsIHNldCBhdXRvbWF0aWNhbGx5KQorCitjbGFzcyBZYWNjU3ltYm9sOgorICAgIGRlZiBfX3N0cl9fKHNlbGYpOiAgICByZXR1cm4gc2VsZi50eXBlCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOiAgIHJldHVybiBzdHIoc2VsZikKKworIyBUaGlzIGNsYXNzIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIG9iamVjdHMgYWN0dWFsbHkgcGFzc2VkIHRvIGVhY2gKKyMgZ3JhbW1hciBydWxlLiAgIEluZGV4IGxvb2t1cCBhbmQgYXNzaWdubWVudCBhY3R1YWxseSBhc3NpZ24gdGhlCisjIC52YWx1ZSBhdHRyaWJ1dGUgb2YgdGhlIHVuZGVybHlpbmcgWWFjY1N5bWJvbCBvYmplY3QuCisjIFRoZSBsaW5lbm8oKSBtZXRob2QgcmV0dXJucyB0aGUgbGluZSBudW1iZXIgb2YgYSBnaXZlbgorIyBpdGVtIChvciAwIGlmIG5vdCBkZWZpbmVkKS4gICBUaGUgbGluZXNwYW4oKSBtZXRob2QgcmV0dXJucworIyBhIHR1cGxlIG9mIChzdGFydGxpbmUsZW5kbGluZSkgcmVwcmVzZW50aW5nIHRoZSByYW5nZSBvZiBsaW5lcworIyBmb3IgYSBzeW1ib2wuICBUaGUgbGV4c3BhbigpIG1ldGhvZCByZXR1cm5zIGEgdHVwbGUgKGxleHBvcyxlbmRsZXhwb3MpCisjIHJlcHJlc2VudGluZyB0aGUgcmFuZ2Ugb2YgcG9zaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgYSBzeW1ib2wuCisKK2NsYXNzIFlhY2NQcm9kdWN0aW9uOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLHMsc3RhY2s9Tm9uZSk6CisgICAgICAgIHNlbGYuc2xpY2UgPSBzCisgICAgICAgIHNlbGYuc3RhY2sgPSBzdGFjaworICAgICAgICBzZWxmLmxleGVyID0gTm9uZQorICAgICAgICBzZWxmLnBhcnNlcj0gTm9uZQorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLG4pOgorICAgICAgICBpZiBuID49IDA6IHJldHVybiBzZWxmLnNsaWNlW25dLnZhbHVlCisgICAgICAgIGVsc2U6IHJldHVybiBzZWxmLnN0YWNrW25dLnZhbHVlCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZixuLHYpOgorICAgICAgICBzZWxmLnNsaWNlW25dLnZhbHVlID0gdgorCisgICAgZGVmIF9fZ2V0c2xpY2VfXyhzZWxmLGksaik6CisgICAgICAgIHJldHVybiBbcy52YWx1ZSBmb3IgcyBpbiBzZWxmLnNsaWNlW2k6al1dCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLnNsaWNlKQorCisgICAgZGVmIGxpbmVubyhzZWxmLG4pOgorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLnNsaWNlW25dLCJsaW5lbm8iLDApCisKKyAgICBkZWYgc2V0X2xpbmVubyhzZWxmLG4sbGluZW5vKToKKyAgICAgICAgc2VsZi5zbGljZVtuXS5saW5lbm8gPSBsaW5lbm8KKworICAgIGRlZiBsaW5lc3BhbihzZWxmLG4pOgorICAgICAgICBzdGFydGxpbmUgPSBnZXRhdHRyKHNlbGYuc2xpY2Vbbl0sImxpbmVubyIsMCkKKyAgICAgICAgZW5kbGluZSA9IGdldGF0dHIoc2VsZi5zbGljZVtuXSwiZW5kbGluZW5vIixzdGFydGxpbmUpCisgICAgICAgIHJldHVybiBzdGFydGxpbmUsZW5kbGluZQorCisgICAgZGVmIGxleHBvcyhzZWxmLG4pOgorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLnNsaWNlW25dLCJsZXhwb3MiLDApCisKKyAgICBkZWYgbGV4c3BhbihzZWxmLG4pOgorICAgICAgICBzdGFydHBvcyA9IGdldGF0dHIoc2VsZi5zbGljZVtuXSwibGV4cG9zIiwwKQorICAgICAgICBlbmRwb3MgPSBnZXRhdHRyKHNlbGYuc2xpY2Vbbl0sImVuZGxleHBvcyIsc3RhcnRwb3MpCisgICAgICAgIHJldHVybiBzdGFydHBvcyxlbmRwb3MKKworICAgIGRlZiBlcnJvcihzZWxmKToKKyAgICAgICByYWlzZSBTeW50YXhFcnJvcgorCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gTFJQYXJzZXIgPT0KKyMKKyMgVGhlIExSIFBhcnNpbmcgZW5naW5lLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBMUlBhcnNlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZixscnRhYixlcnJvcmYpOgorICAgICAgICBzZWxmLnByb2R1Y3Rpb25zID0gbHJ0YWIubHJfcHJvZHVjdGlvbnMKKyAgICAgICAgc2VsZi5hY3Rpb24gICAgICA9IGxydGFiLmxyX2FjdGlvbgorICAgICAgICBzZWxmLmdvdG8gICAgICAgID0gbHJ0YWIubHJfZ290bworICAgICAgICBzZWxmLmVycm9yZnVuYyAgID0gZXJyb3JmCisKKyAgICBkZWYgZXJyb2soc2VsZik6CisgICAgICAgIHNlbGYuZXJyb3JvayAgICAgPSAxCisKKyAgICBkZWYgcmVzdGFydChzZWxmKToKKyAgICAgICAgZGVsIHNlbGYuc3RhdGVzdGFja1s6XQorICAgICAgICBkZWwgc2VsZi5zeW1zdGFja1s6XQorICAgICAgICBzeW0gPSBZYWNjU3ltYm9sKCkKKyAgICAgICAgc3ltLnR5cGUgPSAnJGVuZCcKKyAgICAgICAgc2VsZi5zeW1zdGFjay5hcHBlbmQoc3ltKQorICAgICAgICBzZWxmLnN0YXRlc3RhY2suYXBwZW5kKDApCisKKyAgICBkZWYgcGFyc2Uoc2VsZixpbnB1dD1Ob25lLGxleGVyPU5vbmUsZGVidWc9MCx0cmFja2luZz0wLHRva2VuZnVuYz1Ob25lKToKKyAgICAgICAgaWYgZGVidWcgb3IgeWFjY2RldmVsOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkZWJ1ZyxpbnQpOgorICAgICAgICAgICAgICAgIGRlYnVnID0gUGx5TG9nZ2VyKHN5cy5zdGRlcnIpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJzZWRlYnVnKGlucHV0LGxleGVyLGRlYnVnLHRyYWNraW5nLHRva2VuZnVuYykKKyAgICAgICAgZWxpZiB0cmFja2luZzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlb3B0KGlucHV0LGxleGVyLGRlYnVnLHRyYWNraW5nLHRva2VuZnVuYykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlb3B0X25vdHJhY2soaW5wdXQsbGV4ZXIsZGVidWcsdHJhY2tpbmcsdG9rZW5mdW5jKQorICAgICAgICAKKworICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAgICAjIHBhcnNlZGVidWcoKS4KKyAgICAjCisgICAgIyBUaGlzIGlzIHRoZSBkZWJ1Z2dpbmcgZW5hYmxlZCB2ZXJzaW9uIG9mIHBhcnNlKCkuICBBbGwgY2hhbmdlcyBtYWRlIHRvIHRoZQorICAgICMgcGFyc2luZyBlbmdpbmUgc2hvdWxkIGJlIG1hZGUgaGVyZS4gICBGb3IgdGhlIG5vbi1kZWJ1Z2dpbmcgdmVyc2lvbiwKKyAgICAjIGNvcHkgdGhpcyBjb2RlIHRvIGEgbWV0aG9kIHBhcnNlb3B0KCkgYW5kIGRlbGV0ZSBhbGwgb2YgdGhlIHNlY3Rpb25zCisgICAgIyBlbmNsb3NlZCBpbjoKKyAgICAjCisgICAgIyAgICAgICMtLSEgREVCVUcKKyAgICAjICAgICAgc3RhdGVtZW50cworICAgICMgICAgICAjLS0hIERFQlVHCisgICAgIworICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKworICAgIGRlZiBwYXJzZWRlYnVnKHNlbGYsaW5wdXQ9Tm9uZSxsZXhlcj1Ob25lLGRlYnVnPU5vbmUsdHJhY2tpbmc9MCx0b2tlbmZ1bmM9Tm9uZSk6CisgICAgICAgIGxvb2thaGVhZCA9IE5vbmUgICAgICAgICAgICAgICAgICMgQ3VycmVudCBsb29rYWhlYWQgc3ltYm9sCisgICAgICAgIGxvb2thaGVhZHN0YWNrID0gWyBdICAgICAgICAgICAgICMgU3RhY2sgb2YgbG9va2FoZWFkIHN5bWJvbHMKKyAgICAgICAgYWN0aW9ucyA9IHNlbGYuYWN0aW9uICAgICAgICAgICAgIyBMb2NhbCByZWZlcmVuY2UgdG8gYWN0aW9uIHRhYmxlICh0byBhdm9pZCBsb29rdXAgb24gc2VsZi4pCisgICAgICAgIGdvdG8gICAgPSBzZWxmLmdvdG8gICAgICAgICAgICAgICMgTG9jYWwgcmVmZXJlbmNlIHRvIGdvdG8gdGFibGUgKHRvIGF2b2lkIGxvb2t1cCBvbiBzZWxmLikKKyAgICAgICAgcHJvZCAgICA9IHNlbGYucHJvZHVjdGlvbnMgICAgICAgIyBMb2NhbCByZWZlcmVuY2UgdG8gcHJvZHVjdGlvbiBsaXN0ICh0byBhdm9pZCBsb29rdXAgb24gc2VsZi4pCisgICAgICAgIHBzbGljZSAgPSBZYWNjUHJvZHVjdGlvbihOb25lKSAgICMgUHJvZHVjdGlvbiBvYmplY3QgcGFzc2VkIHRvIGdyYW1tYXIgcnVsZXMKKyAgICAgICAgZXJyb3Jjb3VudCA9IDAgICAgICAgICAgICAgICAgICAgIyBVc2VkIGR1cmluZyBlcnJvciByZWNvdmVyeSAKKworICAgICAgICAjIC0tISBERUJVRworICAgICAgICBkZWJ1Zy5pbmZvKCJQTFk6IFBBUlNFIERFQlVHIFNUQVJUIikKKyAgICAgICAgIyAtLSEgREVCVUcKKworICAgICAgICAjIElmIG5vIGxleGVyIHdhcyBnaXZlbiwgd2Ugd2lsbCB0cnkgdG8gdXNlIHRoZSBsZXggbW9kdWxlCisgICAgICAgIGlmIG5vdCBsZXhlcjoKKyAgICAgICAgICAgIGxleCA9IGxvYWRfcGx5X2xleCgpCisgICAgICAgICAgICBsZXhlciA9IGxleC5sZXhlcgorCisgICAgICAgICMgU2V0IHVwIHRoZSBsZXhlciBhbmQgcGFyc2VyIG9iamVjdHMgb24gcHNsaWNlCisgICAgICAgIHBzbGljZS5sZXhlciA9IGxleGVyCisgICAgICAgIHBzbGljZS5wYXJzZXIgPSBzZWxmCisKKyAgICAgICAgIyBJZiBpbnB1dCB3YXMgc3VwcGxpZWQsIHBhc3MgdG8gbGV4ZXIKKyAgICAgICAgaWYgaW5wdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsZXhlci5pbnB1dChpbnB1dCkKKworICAgICAgICBpZiB0b2tlbmZ1bmMgaXMgTm9uZToKKyAgICAgICAgICAgIyBUb2tlbml6ZSBmdW5jdGlvbgorICAgICAgICAgICBnZXRfdG9rZW4gPSBsZXhlci50b2tlbgorICAgICAgICBlbHNlOgorICAgICAgICAgICBnZXRfdG9rZW4gPSB0b2tlbmZ1bmMKKworICAgICAgICAjIFNldCB1cCB0aGUgc3RhdGUgYW5kIHN5bWJvbCBzdGFja3MKKworICAgICAgICBzdGF0ZXN0YWNrID0gWyBdICAgICAgICAgICAgICAgICMgU3RhY2sgb2YgcGFyc2luZyBzdGF0ZXMKKyAgICAgICAgc2VsZi5zdGF0ZXN0YWNrID0gc3RhdGVzdGFjaworICAgICAgICBzeW1zdGFjayAgID0gWyBdICAgICAgICAgICAgICAgICMgU3RhY2sgb2YgZ3JhbW1hciBzeW1ib2xzCisgICAgICAgIHNlbGYuc3ltc3RhY2sgPSBzeW1zdGFjaworCisgICAgICAgIHBzbGljZS5zdGFjayA9IHN5bXN0YWNrICAgICAgICAgIyBQdXQgaW4gdGhlIHByb2R1Y3Rpb24KKyAgICAgICAgZXJydG9rZW4gICA9IE5vbmUgICAgICAgICAgICAgICAjIEVyciB0b2tlbgorCisgICAgICAgICMgVGhlIHN0YXJ0IHN0YXRlIGlzIGFzc3VtZWQgdG8gYmUgKDAsJGVuZCkKKworICAgICAgICBzdGF0ZXN0YWNrLmFwcGVuZCgwKQorICAgICAgICBzeW0gPSBZYWNjU3ltYm9sKCkKKyAgICAgICAgc3ltLnR5cGUgPSAiJGVuZCIKKyAgICAgICAgc3ltc3RhY2suYXBwZW5kKHN5bSkKKyAgICAgICAgc3RhdGUgPSAwCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAjIEdldCB0aGUgbmV4dCBzeW1ib2wgb24gdGhlIGlucHV0LiAgSWYgYSBsb29rYWhlYWQgc3ltYm9sCisgICAgICAgICAgICAjIGlzIGFscmVhZHkgc2V0LCB3ZSBqdXN0IHVzZSB0aGF0LiBPdGhlcndpc2UsIHdlJ2xsIHB1bGwKKyAgICAgICAgICAgICMgdGhlIG5leHQgdG9rZW4gb2ZmIG9mIHRoZSBsb29rYWhlYWRzdGFjayBvciBmcm9tIHRoZSBsZXhlcgorCisgICAgICAgICAgICAjIC0tISBERUJVRworICAgICAgICAgICAgZGVidWcuZGVidWcoJycpCisgICAgICAgICAgICBkZWJ1Zy5kZWJ1ZygnU3RhdGUgIDogJXMnLCBzdGF0ZSkKKyAgICAgICAgICAgICMgLS0hIERFQlVHCisKKyAgICAgICAgICAgIGlmIG5vdCBsb29rYWhlYWQ6CisgICAgICAgICAgICAgICAgaWYgbm90IGxvb2thaGVhZHN0YWNrOgorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBnZXRfdG9rZW4oKSAgICAgIyBHZXQgdGhlIG5leHQgdG9rZW4KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBsb29rYWhlYWRzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsb29rYWhlYWQ6CisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IFlhY2NTeW1ib2woKQorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQudHlwZSA9ICIkZW5kIgorCisgICAgICAgICAgICAjIC0tISBERUJVRworICAgICAgICAgICAgZGVidWcuZGVidWcoJ1N0YWNrICA6ICVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICgiJXMgLiAlcyIgJSAoIiAiLmpvaW4oW3h4LnR5cGUgZm9yIHh4IGluIHN5bXN0YWNrXVsxOl0pLCBzdHIobG9va2FoZWFkKSkpLmxzdHJpcCgpKQorICAgICAgICAgICAgIyAtLSEgREVCVUcKKworICAgICAgICAgICAgIyBDaGVjayB0aGUgYWN0aW9uIHRhYmxlCisgICAgICAgICAgICBsdHlwZSA9IGxvb2thaGVhZC50eXBlCisgICAgICAgICAgICB0ID0gYWN0aW9uc1tzdGF0ZV0uZ2V0KGx0eXBlKQorCisgICAgICAgICAgICBpZiB0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIHQgPiAwOgorICAgICAgICAgICAgICAgICAgICAjIHNoaWZ0IGEgc3ltYm9sIG9uIHRoZSBzdGFjaworICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLmFwcGVuZCh0KQorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHQKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgICAgICAgICAgICAgIGRlYnVnLmRlYnVnKCJBY3Rpb24gOiBTaGlmdCBhbmQgZ290byBzdGF0ZSAlcyIsIHQpCisgICAgICAgICAgICAgICAgICAgICMgLS0hIERFQlVHCisKKyAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2suYXBwZW5kKGxvb2thaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gTm9uZQorCisgICAgICAgICAgICAgICAgICAgICMgRGVjcmVhc2UgZXJyb3IgY291bnQgb24gc3VjY2Vzc2Z1bCBzaGlmdAorICAgICAgICAgICAgICAgICAgICBpZiBlcnJvcmNvdW50OiBlcnJvcmNvdW50IC09MQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgdCA8IDA6CisgICAgICAgICAgICAgICAgICAgICMgcmVkdWNlIGEgc3ltYm9sIG9uIHRoZSBzdGFjaywgZW1pdCBhIHByb2R1Y3Rpb24KKyAgICAgICAgICAgICAgICAgICAgcCA9IHByb2RbLXRdCisgICAgICAgICAgICAgICAgICAgIHBuYW1lID0gcC5uYW1lCisgICAgICAgICAgICAgICAgICAgIHBsZW4gID0gcC5sZW4KKworICAgICAgICAgICAgICAgICAgICAjIEdldCBwcm9kdWN0aW9uIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgIHN5bSA9IFlhY2NTeW1ib2woKQorICAgICAgICAgICAgICAgICAgICBzeW0udHlwZSA9IHBuYW1lICAgICAgICMgUHJvZHVjdGlvbiBuYW1lCisgICAgICAgICAgICAgICAgICAgIHN5bS52YWx1ZSA9IE5vbmUKKworICAgICAgICAgICAgICAgICAgICAjIC0tISBERUJVRworICAgICAgICAgICAgICAgICAgICBpZiBwbGVuOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcuaW5mbygiQWN0aW9uIDogUmVkdWNlIHJ1bGUgWyVzXSB3aXRoICVzIGFuZCBnb3RvIHN0YXRlICVkIiwgcC5zdHIsICJbIisiLCIuam9pbihbZm9ybWF0X3N0YWNrX2VudHJ5KF92LnZhbHVlKSBmb3IgX3YgaW4gc3ltc3RhY2tbLXBsZW46XV0pKyJdIiwtdCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnLmluZm8oIkFjdGlvbiA6IFJlZHVjZSBydWxlIFslc10gd2l0aCAlcyBhbmQgZ290byBzdGF0ZSAlZCIsIHAuc3RyLCBbXSwtdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAjIC0tISBERUJVRworCisgICAgICAgICAgICAgICAgICAgIGlmIHBsZW46CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnID0gc3ltc3RhY2tbLXBsZW4tMTpdCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnWzBdID0gc3ltCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgLS0hIFRSQUNLSU5HCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0cmFja2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHQxID0gdGFyZ1sxXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLmxpbmVubyA9IHQxLmxpbmVubworICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLmxleHBvcyA9IHQxLmxleHBvcworICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSB0YXJnWy0xXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLmVuZGxpbmVubyA9IGdldGF0dHIodDEsImVuZGxpbmVubyIsdDEubGluZW5vKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLmVuZGxleHBvcyA9IGdldGF0dHIodDEsImVuZGxleHBvcyIsdDEubGV4cG9zKQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIC0tISBUUkFDS0lORworCisgICAgICAgICAgICAgICAgICAgICAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBjb2RlIGVuY2xvc2VkIGluIHRoaXMgc2VjdGlvbiBpcyBkdXBsaWNhdGVkIAorICAgICAgICAgICAgICAgICAgICAgICAgIyBiZWxvdyBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gIE1ha2Ugc3VyZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGFuZ2VzIGdldCBtYWRlIGluIGJvdGggbG9jYXRpb25zLgorCisgICAgICAgICAgICAgICAgICAgICAgICBwc2xpY2Uuc2xpY2UgPSB0YXJnCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENhbGwgdGhlIGdyYW1tYXIgcnVsZSB3aXRoIG91ciBzcGVjaWFsIHNsaWNlIG9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBzeW1zdGFja1stcGxlbjpdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHN0YXRlc3RhY2tbLXBsZW46XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuY2FsbGFibGUocHNsaWNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcuaW5mbygiUmVzdWx0IDogJXMiLCBmb3JtYXRfcmVzdWx0KHBzbGljZVswXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAtLSEgREVCVUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5hcHBlbmQoc3ltKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gZ290b1tzdGF0ZXN0YWNrWy0xXV1bcG5hbWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5hcHBlbmQoc3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBhbiBlcnJvciB3YXMgc2V0LiBFbnRlciBlcnJvciByZWNvdmVyeSBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZHN0YWNrLmFwcGVuZChsb29rYWhlYWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZXN0YWNrWy0xXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS50eXBlID0gJ2Vycm9yJworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IHN5bQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yY291bnQgPSBlcnJvcl9jb3VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JvayA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgICAgCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgLS0hIFRSQUNLSU5HCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0cmFja2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS5saW5lbm8gPSBsZXhlci5saW5lbm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS5sZXhwb3MgPSBsZXhlci5sZXhwb3MKKyAgICAgICAgICAgICAgICAgICAgICAgICMgLS0hIFRSQUNLSU5HCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmcgPSBbIHN5bSBdCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIGNvZGUgZW5jbG9zZWQgaW4gdGhpcyBzZWN0aW9uIGlzIGR1cGxpY2F0ZWQgCisgICAgICAgICAgICAgICAgICAgICAgICAjIGFib3ZlIGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiAgTWFrZSBzdXJlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGNoYW5nZXMgZ2V0IG1hZGUgaW4gYm90aCBsb2NhdGlvbnMuCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzbGljZS5zbGljZSA9IHRhcmcKKworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2FsbCB0aGUgZ3JhbW1hciBydWxlIHdpdGggb3VyIHNwZWNpYWwgc2xpY2Ugb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5jYWxsYWJsZShwc2xpY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAtLSEgREVCVUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zy5pbmZvKCJSZXN1bHQgOiAlcyIsIGZvcm1hdF9yZXN1bHQocHNsaWNlWzBdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIC0tISBERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLmFwcGVuZChzeW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBnb3RvW3N0YXRlc3RhY2tbLTFdXVtwbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLmFwcGVuZChzdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIGFuIGVycm9yIHdhcyBzZXQuIEVudGVyIGVycm9yIHJlY292ZXJ5IHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkc3RhY2suYXBwZW5kKGxvb2thaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlc3RhY2tbLTFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLnR5cGUgPSAnZXJyb3InCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gc3ltCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb3VudCA9IGVycm9yX2NvdW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcm9rID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKworICAgICAgICAgICAgICAgIGlmIHQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgbiA9IHN5bXN0YWNrWy0xXQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBnZXRhdHRyKG4sInZhbHVlIixOb25lKQorICAgICAgICAgICAgICAgICAgICAjIC0tISBERUJVRworICAgICAgICAgICAgICAgICAgICBkZWJ1Zy5pbmZvKCJEb25lICAgOiBSZXR1cm5pbmcgJXMiLCBmb3JtYXRfcmVzdWx0KHJlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgIGRlYnVnLmluZm8oIlBMWTogUEFSU0UgREVCVUcgRU5EIikKKyAgICAgICAgICAgICAgICAgICAgIyAtLSEgREVCVUcKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgICAgICAgICBpZiB0ID09IE5vbmU6CisKKyAgICAgICAgICAgICAgICAjIC0tISBERUJVRworICAgICAgICAgICAgICAgIGRlYnVnLmVycm9yKCdFcnJvciAgOiAlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCIlcyAuICVzIiAlICgiICIuam9pbihbeHgudHlwZSBmb3IgeHggaW4gc3ltc3RhY2tdWzE6XSksIHN0cihsb29rYWhlYWQpKSkubHN0cmlwKCkpCisgICAgICAgICAgICAgICAgIyAtLSEgREVCVUcKKworICAgICAgICAgICAgICAgICMgV2UgaGF2ZSBzb21lIGtpbmQgb2YgcGFyc2luZyBlcnJvciBoZXJlLiAgVG8gaGFuZGxlCisgICAgICAgICAgICAgICAgIyB0aGlzLCB3ZSBhcmUgZ29pbmcgdG8gcHVzaCB0aGUgY3VycmVudCB0b2tlbiBvbnRvCisgICAgICAgICAgICAgICAgIyB0aGUgdG9rZW5zdGFjayBhbmQgcmVwbGFjZSBpdCB3aXRoIGFuICdlcnJvcicgdG9rZW4uCisgICAgICAgICAgICAgICAgIyBJZiB0aGVyZSBhcmUgYW55IHN5bmNocm9uaXphdGlvbiBydWxlcywgdGhleSBtYXkKKyAgICAgICAgICAgICAgICAjIGNhdGNoIGl0LgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIEluIGFkZGl0aW9uIHRvIHB1c2hpbmcgdGhlIGVycm9yIHRva2VuLCB3ZSBjYWxsIGNhbGwKKyAgICAgICAgICAgICAgICAjIHRoZSB1c2VyIGRlZmluZWQgcF9lcnJvcigpIGZ1bmN0aW9uIGlmIHRoaXMgaXMgdGhlCisgICAgICAgICAgICAgICAgIyBmaXJzdCBzeW50YXggZXJyb3IuICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGlmCisgICAgICAgICAgICAgICAgIyBlcnJvcmNvdW50ID09IDAuCisgICAgICAgICAgICAgICAgaWYgZXJyb3Jjb3VudCA9PSAwIG9yIHNlbGYuZXJyb3JvazoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb3VudCA9IGVycm9yX2NvdW50CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JvayA9IDAKKyAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4gPSBsb29rYWhlYWQKKyAgICAgICAgICAgICAgICAgICAgaWYgZXJydG9rZW4udHlwZSA9PSAiJGVuZCI6CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbiA9IE5vbmUgICAgICAgICAgICAgICAjIEVuZCBvZiBmaWxlIQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmVycm9yZnVuYzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbCBlcnJvayx0b2tlbixyZXN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvayA9IHNlbGYuZXJyb2sgICAgICAgICMgU2V0IHNvbWUgc3BlY2lhbCBmdW5jdGlvbnMgYXZhaWxhYmxlIGluIGVycm9yIHJlY292ZXJ5CisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGdldF90b2tlbgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdGFydCA9IHNlbGYucmVzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJydG9rZW4gYW5kIG5vdCBoYXNhdHRyKGVycnRva2VuLCdsZXhlcicpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycnRva2VuLmxleGVyID0gbGV4ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvayA9IHNlbGYuZXJyb3JmdW5jKGVycnRva2VuKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGVycm9rLCB0b2tlbiwgcmVzdGFydCAgICMgRGVsZXRlIHNwZWNpYWwgZnVuY3Rpb25zCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZXJyb3JvazoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFVzZXIgbXVzdCBoYXZlIGRvbmUgc29tZSBraW5kIG9mIHBhbmljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtb2RlIHJlY292ZXJ5IG9uIHRoZWlyIG93bi4gIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmV0dXJuZWQgdG9rZW4gaXMgdGhlIG5leHQgbG9va2FoZWFkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gdG9rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4gPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVycnRva2VuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoZXJydG9rZW4sImxpbmVubyIpOiBsaW5lbm8gPSBsb29rYWhlYWQubGluZW5vCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZTogbGluZW5vID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmVubzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgieWFjYzogU3ludGF4IGVycm9yIGF0IGxpbmUgJWQsIHRva2VuPSVzXG4iICUgKGxpbmVubywgZXJydG9rZW4udHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgieWFjYzogU3ludGF4IGVycm9yLCB0b2tlbj0lcyIgJSBlcnJ0b2tlbi50eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ5YWNjOiBQYXJzZSBlcnJvciBpbiBpbnB1dC4gRU9GXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb3VudCA9IGVycm9yX2NvdW50CisKKyAgICAgICAgICAgICAgICAjIGNhc2UgMTogIHRoZSBzdGF0ZXN0YWNrIG9ubHkgaGFzIDEgZW50cnkgb24gaXQuICBJZiB3ZSdyZSBpbiB0aGlzIHN0YXRlLCB0aGUKKyAgICAgICAgICAgICAgICAjIGVudGlyZSBwYXJzZSBoYXMgYmVlbiByb2xsZWQgYmFjayBhbmQgd2UncmUgY29tcGxldGVseSBob3NlZC4gICBUaGUgdG9rZW4gaXMKKyAgICAgICAgICAgICAgICAjIGRpc2NhcmRlZCBhbmQgd2UganVzdCBrZWVwIGdvaW5nLgorCisgICAgICAgICAgICAgICAgaWYgbGVuKHN0YXRlc3RhY2spIDw9IDEgYW5kIGxvb2thaGVhZC50eXBlICE9ICIkZW5kIjoKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbiA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAwCisgICAgICAgICAgICAgICAgICAgICMgTnVrZSB0aGUgcHVzaGJhY2sgc3RhY2sKKyAgICAgICAgICAgICAgICAgICAgZGVsIGxvb2thaGVhZHN0YWNrWzpdCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAjIGNhc2UgMjogdGhlIHN0YXRlc3RhY2sgaGFzIGEgY291cGxlIG9mIGVudHJpZXMgb24gaXQsIGJ1dCB3ZSdyZQorICAgICAgICAgICAgICAgICMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4gbnVrZSB0aGUgdG9wIGVudHJ5IGFuZCBnZW5lcmF0ZSBhbiBlcnJvciB0b2tlbgorCisgICAgICAgICAgICAgICAgIyBTdGFydCBudWtpbmcgZW50cmllcyBvbiB0aGUgc3RhY2sKKyAgICAgICAgICAgICAgICBpZiBsb29rYWhlYWQudHlwZSA9PSAiJGVuZCI6CisgICAgICAgICAgICAgICAgICAgICMgV2hvYS4gV2UncmUgcmVhbGx5IGhvc2VkIGhlcmUuIEJhaWwgb3V0CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICAgICAgaWYgbG9va2FoZWFkLnR5cGUgIT0gJ2Vycm9yJzoKKyAgICAgICAgICAgICAgICAgICAgc3ltID0gc3ltc3RhY2tbLTFdCisgICAgICAgICAgICAgICAgICAgIGlmIHN5bS50eXBlID09ICdlcnJvcic6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEhtbW0uIEVycm9yIGlzIG9uIHRvcCBvZiBzdGFjaywgd2UnbGwganVzdCBudWtlIGlucHV0CisgICAgICAgICAgICAgICAgICAgICAgICAjIHN5bWJvbCBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHQgPSBZYWNjU3ltYm9sKCkKKyAgICAgICAgICAgICAgICAgICAgdC50eXBlID0gJ2Vycm9yJworICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGxvb2thaGVhZCwibGluZW5vIik6CisgICAgICAgICAgICAgICAgICAgICAgICB0LmxpbmVubyA9IGxvb2thaGVhZC5saW5lbm8KKyAgICAgICAgICAgICAgICAgICAgdC52YWx1ZSA9IGxvb2thaGVhZAorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzdGFjay5hcHBlbmQobG9va2FoZWFkKQorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSB0CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlc3RhY2tbLTFdICAgICAgICMgUG90ZW50aWFsIGJ1ZyBmaXgKKworICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgQ2FsbCBhbiBlcnJvciBmdW5jdGlvbiBoZXJlCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoInlhY2M6IGludGVybmFsIHBhcnNlciBlcnJvciEhIVxuIikKKworICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAgICAjIHBhcnNlb3B0KCkuCisgICAgIworICAgICMgT3B0aW1pemVkIHZlcnNpb24gb2YgcGFyc2UoKSBtZXRob2QuICBETyBOT1QgRURJVCBUSElTIENPREUgRElSRUNUTFkuCisgICAgIyBFZGl0IHRoZSBkZWJ1ZyB2ZXJzaW9uIGFib3ZlLCB0aGVuIGNvcHkgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1ldGhvZAorICAgICMgYmVsb3cgd2hpbGUgcmVtb3ZpbmcgIy0tISBERUJVRyBzZWN0aW9ucy4KKyAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisKKworICAgIGRlZiBwYXJzZW9wdChzZWxmLGlucHV0PU5vbmUsbGV4ZXI9Tm9uZSxkZWJ1Zz0wLHRyYWNraW5nPTAsdG9rZW5mdW5jPU5vbmUpOgorICAgICAgICBsb29rYWhlYWQgPSBOb25lICAgICAgICAgICAgICAgICAjIEN1cnJlbnQgbG9va2FoZWFkIHN5bWJvbAorICAgICAgICBsb29rYWhlYWRzdGFjayA9IFsgXSAgICAgICAgICAgICAjIFN0YWNrIG9mIGxvb2thaGVhZCBzeW1ib2xzCisgICAgICAgIGFjdGlvbnMgPSBzZWxmLmFjdGlvbiAgICAgICAgICAgICMgTG9jYWwgcmVmZXJlbmNlIHRvIGFjdGlvbiB0YWJsZSAodG8gYXZvaWQgbG9va3VwIG9uIHNlbGYuKQorICAgICAgICBnb3RvICAgID0gc2VsZi5nb3RvICAgICAgICAgICAgICAjIExvY2FsIHJlZmVyZW5jZSB0byBnb3RvIHRhYmxlICh0byBhdm9pZCBsb29rdXAgb24gc2VsZi4pCisgICAgICAgIHByb2QgICAgPSBzZWxmLnByb2R1Y3Rpb25zICAgICAgICMgTG9jYWwgcmVmZXJlbmNlIHRvIHByb2R1Y3Rpb24gbGlzdCAodG8gYXZvaWQgbG9va3VwIG9uIHNlbGYuKQorICAgICAgICBwc2xpY2UgID0gWWFjY1Byb2R1Y3Rpb24oTm9uZSkgICAjIFByb2R1Y3Rpb24gb2JqZWN0IHBhc3NlZCB0byBncmFtbWFyIHJ1bGVzCisgICAgICAgIGVycm9yY291bnQgPSAwICAgICAgICAgICAgICAgICAgICMgVXNlZCBkdXJpbmcgZXJyb3IgcmVjb3ZlcnkgCisKKyAgICAgICAgIyBJZiBubyBsZXhlciB3YXMgZ2l2ZW4sIHdlIHdpbGwgdHJ5IHRvIHVzZSB0aGUgbGV4IG1vZHVsZQorICAgICAgICBpZiBub3QgbGV4ZXI6CisgICAgICAgICAgICBsZXggPSBsb2FkX3BseV9sZXgoKQorICAgICAgICAgICAgbGV4ZXIgPSBsZXgubGV4ZXIKKyAgICAgICAgCisgICAgICAgICMgU2V0IHVwIHRoZSBsZXhlciBhbmQgcGFyc2VyIG9iamVjdHMgb24gcHNsaWNlCisgICAgICAgIHBzbGljZS5sZXhlciA9IGxleGVyCisgICAgICAgIHBzbGljZS5wYXJzZXIgPSBzZWxmCisKKyAgICAgICAgIyBJZiBpbnB1dCB3YXMgc3VwcGxpZWQsIHBhc3MgdG8gbGV4ZXIKKyAgICAgICAgaWYgaW5wdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsZXhlci5pbnB1dChpbnB1dCkKKworICAgICAgICBpZiB0b2tlbmZ1bmMgaXMgTm9uZToKKyAgICAgICAgICAgIyBUb2tlbml6ZSBmdW5jdGlvbgorICAgICAgICAgICBnZXRfdG9rZW4gPSBsZXhlci50b2tlbgorICAgICAgICBlbHNlOgorICAgICAgICAgICBnZXRfdG9rZW4gPSB0b2tlbmZ1bmMKKworICAgICAgICAjIFNldCB1cCB0aGUgc3RhdGUgYW5kIHN5bWJvbCBzdGFja3MKKworICAgICAgICBzdGF0ZXN0YWNrID0gWyBdICAgICAgICAgICAgICAgICMgU3RhY2sgb2YgcGFyc2luZyBzdGF0ZXMKKyAgICAgICAgc2VsZi5zdGF0ZXN0YWNrID0gc3RhdGVzdGFjaworICAgICAgICBzeW1zdGFjayAgID0gWyBdICAgICAgICAgICAgICAgICMgU3RhY2sgb2YgZ3JhbW1hciBzeW1ib2xzCisgICAgICAgIHNlbGYuc3ltc3RhY2sgPSBzeW1zdGFjaworCisgICAgICAgIHBzbGljZS5zdGFjayA9IHN5bXN0YWNrICAgICAgICAgIyBQdXQgaW4gdGhlIHByb2R1Y3Rpb24KKyAgICAgICAgZXJydG9rZW4gICA9IE5vbmUgICAgICAgICAgICAgICAjIEVyciB0b2tlbgorCisgICAgICAgICMgVGhlIHN0YXJ0IHN0YXRlIGlzIGFzc3VtZWQgdG8gYmUgKDAsJGVuZCkKKworICAgICAgICBzdGF0ZXN0YWNrLmFwcGVuZCgwKQorICAgICAgICBzeW0gPSBZYWNjU3ltYm9sKCkKKyAgICAgICAgc3ltLnR5cGUgPSAnJGVuZCcKKyAgICAgICAgc3ltc3RhY2suYXBwZW5kKHN5bSkKKyAgICAgICAgc3RhdGUgPSAwCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAjIEdldCB0aGUgbmV4dCBzeW1ib2wgb24gdGhlIGlucHV0LiAgSWYgYSBsb29rYWhlYWQgc3ltYm9sCisgICAgICAgICAgICAjIGlzIGFscmVhZHkgc2V0LCB3ZSBqdXN0IHVzZSB0aGF0LiBPdGhlcndpc2UsIHdlJ2xsIHB1bGwKKyAgICAgICAgICAgICMgdGhlIG5leHQgdG9rZW4gb2ZmIG9mIHRoZSBsb29rYWhlYWRzdGFjayBvciBmcm9tIHRoZSBsZXhlcgorCisgICAgICAgICAgICBpZiBub3QgbG9va2FoZWFkOgorICAgICAgICAgICAgICAgIGlmIG5vdCBsb29rYWhlYWRzdGFjazoKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gZ2V0X3Rva2VuKCkgICAgICMgR2V0IHRoZSBuZXh0IHRva2VuCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gbG9va2FoZWFkc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgbG9va2FoZWFkOgorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBZYWNjU3ltYm9sKCkKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkLnR5cGUgPSAnJGVuZCcKKworICAgICAgICAgICAgIyBDaGVjayB0aGUgYWN0aW9uIHRhYmxlCisgICAgICAgICAgICBsdHlwZSA9IGxvb2thaGVhZC50eXBlCisgICAgICAgICAgICB0ID0gYWN0aW9uc1tzdGF0ZV0uZ2V0KGx0eXBlKQorCisgICAgICAgICAgICBpZiB0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIHQgPiAwOgorICAgICAgICAgICAgICAgICAgICAjIHNoaWZ0IGEgc3ltYm9sIG9uIHRoZSBzdGFjaworICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLmFwcGVuZCh0KQorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHQKKworICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5hcHBlbmQobG9va2FoZWFkKQorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgIyBEZWNyZWFzZSBlcnJvciBjb3VudCBvbiBzdWNjZXNzZnVsIHNoaWZ0CisgICAgICAgICAgICAgICAgICAgIGlmIGVycm9yY291bnQ6IGVycm9yY291bnQgLT0xCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiB0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgIyByZWR1Y2UgYSBzeW1ib2wgb24gdGhlIHN0YWNrLCBlbWl0IGEgcHJvZHVjdGlvbgorICAgICAgICAgICAgICAgICAgICBwID0gcHJvZFstdF0KKyAgICAgICAgICAgICAgICAgICAgcG5hbWUgPSBwLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgcGxlbiAgPSBwLmxlbgorCisgICAgICAgICAgICAgICAgICAgICMgR2V0IHByb2R1Y3Rpb24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgc3ltID0gWWFjY1N5bWJvbCgpCisgICAgICAgICAgICAgICAgICAgIHN5bS50eXBlID0gcG5hbWUgICAgICAgIyBQcm9kdWN0aW9uIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgc3ltLnZhbHVlID0gTm9uZQorCisgICAgICAgICAgICAgICAgICAgIGlmIHBsZW46CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnID0gc3ltc3RhY2tbLXBsZW4tMTpdCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnWzBdID0gc3ltCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgLS0hIFRSQUNLSU5HCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0cmFja2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHQxID0gdGFyZ1sxXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLmxpbmVubyA9IHQxLmxpbmVubworICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLmxleHBvcyA9IHQxLmxleHBvcworICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSB0YXJnWy0xXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLmVuZGxpbmVubyA9IGdldGF0dHIodDEsImVuZGxpbmVubyIsdDEubGluZW5vKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLmVuZGxleHBvcyA9IGdldGF0dHIodDEsImVuZGxleHBvcyIsdDEubGV4cG9zKQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIC0tISBUUkFDS0lORworCisgICAgICAgICAgICAgICAgICAgICAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBjb2RlIGVuY2xvc2VkIGluIHRoaXMgc2VjdGlvbiBpcyBkdXBsaWNhdGVkIAorICAgICAgICAgICAgICAgICAgICAgICAgIyBiZWxvdyBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gIE1ha2Ugc3VyZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGFuZ2VzIGdldCBtYWRlIGluIGJvdGggbG9jYXRpb25zLgorCisgICAgICAgICAgICAgICAgICAgICAgICBwc2xpY2Uuc2xpY2UgPSB0YXJnCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENhbGwgdGhlIGdyYW1tYXIgcnVsZSB3aXRoIG91ciBzcGVjaWFsIHNsaWNlIG9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBzeW1zdGFja1stcGxlbjpdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHN0YXRlc3RhY2tbLXBsZW46XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuY2FsbGFibGUocHNsaWNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLmFwcGVuZChzeW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBnb3RvW3N0YXRlc3RhY2tbLTFdXVtwbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLmFwcGVuZChzdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIGFuIGVycm9yIHdhcyBzZXQuIEVudGVyIGVycm9yIHJlY292ZXJ5IHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkc3RhY2suYXBwZW5kKGxvb2thaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlc3RhY2tbLTFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLnR5cGUgPSAnZXJyb3InCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gc3ltCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb3VudCA9IGVycm9yX2NvdW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcm9rID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAgICAKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKworICAgICAgICAgICAgICAgICAgICAgICAgIyAtLSEgVFJBQ0tJTkcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRyYWNraW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLmxpbmVubyA9IGxleGVyLmxpbmVubworICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLmxleHBvcyA9IGxleGVyLmxleHBvcworICAgICAgICAgICAgICAgICAgICAgICAgIyAtLSEgVFJBQ0tJTkcKKworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZyA9IFsgc3ltIF0KKworICAgICAgICAgICAgICAgICAgICAgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgY29kZSBlbmNsb3NlZCBpbiB0aGlzIHNlY3Rpb24gaXMgZHVwbGljYXRlZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYWJvdmUgYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uICBNYWtlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgY2hhbmdlcyBnZXQgbWFkZSBpbiBib3RoIGxvY2F0aW9ucy4KKworICAgICAgICAgICAgICAgICAgICAgICAgcHNsaWNlLnNsaWNlID0gdGFyZworCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDYWxsIHRoZSBncmFtbWFyIHJ1bGUgd2l0aCBvdXIgc3BlY2lhbCBzbGljZSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmNhbGxhYmxlKHBzbGljZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5hcHBlbmQoc3ltKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gZ290b1tzdGF0ZXN0YWNrWy0xXV1bcG5hbWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5hcHBlbmQoc3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBhbiBlcnJvciB3YXMgc2V0LiBFbnRlciBlcnJvciByZWNvdmVyeSBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZHN0YWNrLmFwcGVuZChsb29rYWhlYWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZXN0YWNrWy0xXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS50eXBlID0gJ2Vycm9yJworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IHN5bQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yY291bnQgPSBlcnJvcl9jb3VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JvayA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisKKyAgICAgICAgICAgICAgICBpZiB0ID09IDA6CisgICAgICAgICAgICAgICAgICAgIG4gPSBzeW1zdGFja1stMV0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIobiwidmFsdWUiLE5vbmUpCisKKyAgICAgICAgICAgIGlmIHQgPT0gTm9uZToKKworICAgICAgICAgICAgICAgICMgV2UgaGF2ZSBzb21lIGtpbmQgb2YgcGFyc2luZyBlcnJvciBoZXJlLiAgVG8gaGFuZGxlCisgICAgICAgICAgICAgICAgIyB0aGlzLCB3ZSBhcmUgZ29pbmcgdG8gcHVzaCB0aGUgY3VycmVudCB0b2tlbiBvbnRvCisgICAgICAgICAgICAgICAgIyB0aGUgdG9rZW5zdGFjayBhbmQgcmVwbGFjZSBpdCB3aXRoIGFuICdlcnJvcicgdG9rZW4uCisgICAgICAgICAgICAgICAgIyBJZiB0aGVyZSBhcmUgYW55IHN5bmNocm9uaXphdGlvbiBydWxlcywgdGhleSBtYXkKKyAgICAgICAgICAgICAgICAjIGNhdGNoIGl0LgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIEluIGFkZGl0aW9uIHRvIHB1c2hpbmcgdGhlIGVycm9yIHRva2VuLCB3ZSBjYWxsIGNhbGwKKyAgICAgICAgICAgICAgICAjIHRoZSB1c2VyIGRlZmluZWQgcF9lcnJvcigpIGZ1bmN0aW9uIGlmIHRoaXMgaXMgdGhlCisgICAgICAgICAgICAgICAgIyBmaXJzdCBzeW50YXggZXJyb3IuICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGlmCisgICAgICAgICAgICAgICAgIyBlcnJvcmNvdW50ID09IDAuCisgICAgICAgICAgICAgICAgaWYgZXJyb3Jjb3VudCA9PSAwIG9yIHNlbGYuZXJyb3JvazoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb3VudCA9IGVycm9yX2NvdW50CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JvayA9IDAKKyAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4gPSBsb29rYWhlYWQKKyAgICAgICAgICAgICAgICAgICAgaWYgZXJydG9rZW4udHlwZSA9PSAnJGVuZCc6CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbiA9IE5vbmUgICAgICAgICAgICAgICAjIEVuZCBvZiBmaWxlIQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmVycm9yZnVuYzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbCBlcnJvayx0b2tlbixyZXN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvayA9IHNlbGYuZXJyb2sgICAgICAgICMgU2V0IHNvbWUgc3BlY2lhbCBmdW5jdGlvbnMgYXZhaWxhYmxlIGluIGVycm9yIHJlY292ZXJ5CisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGdldF90b2tlbgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdGFydCA9IHNlbGYucmVzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJydG9rZW4gYW5kIG5vdCBoYXNhdHRyKGVycnRva2VuLCdsZXhlcicpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycnRva2VuLmxleGVyID0gbGV4ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvayA9IHNlbGYuZXJyb3JmdW5jKGVycnRva2VuKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGVycm9rLCB0b2tlbiwgcmVzdGFydCAgICMgRGVsZXRlIHNwZWNpYWwgZnVuY3Rpb25zCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZXJyb3JvazoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFVzZXIgbXVzdCBoYXZlIGRvbmUgc29tZSBraW5kIG9mIHBhbmljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtb2RlIHJlY292ZXJ5IG9uIHRoZWlyIG93bi4gIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmV0dXJuZWQgdG9rZW4gaXMgdGhlIG5leHQgbG9va2FoZWFkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gdG9rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4gPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVycnRva2VuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoZXJydG9rZW4sImxpbmVubyIpOiBsaW5lbm8gPSBsb29rYWhlYWQubGluZW5vCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZTogbGluZW5vID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmVubzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgieWFjYzogU3ludGF4IGVycm9yIGF0IGxpbmUgJWQsIHRva2VuPSVzXG4iICUgKGxpbmVubywgZXJydG9rZW4udHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgieWFjYzogU3ludGF4IGVycm9yLCB0b2tlbj0lcyIgJSBlcnJ0b2tlbi50eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ5YWNjOiBQYXJzZSBlcnJvciBpbiBpbnB1dC4gRU9GXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb3VudCA9IGVycm9yX2NvdW50CisKKyAgICAgICAgICAgICAgICAjIGNhc2UgMTogIHRoZSBzdGF0ZXN0YWNrIG9ubHkgaGFzIDEgZW50cnkgb24gaXQuICBJZiB3ZSdyZSBpbiB0aGlzIHN0YXRlLCB0aGUKKyAgICAgICAgICAgICAgICAjIGVudGlyZSBwYXJzZSBoYXMgYmVlbiByb2xsZWQgYmFjayBhbmQgd2UncmUgY29tcGxldGVseSBob3NlZC4gICBUaGUgdG9rZW4gaXMKKyAgICAgICAgICAgICAgICAjIGRpc2NhcmRlZCBhbmQgd2UganVzdCBrZWVwIGdvaW5nLgorCisgICAgICAgICAgICAgICAgaWYgbGVuKHN0YXRlc3RhY2spIDw9IDEgYW5kIGxvb2thaGVhZC50eXBlICE9ICckZW5kJzoKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbiA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAwCisgICAgICAgICAgICAgICAgICAgICMgTnVrZSB0aGUgcHVzaGJhY2sgc3RhY2sKKyAgICAgICAgICAgICAgICAgICAgZGVsIGxvb2thaGVhZHN0YWNrWzpdCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAjIGNhc2UgMjogdGhlIHN0YXRlc3RhY2sgaGFzIGEgY291cGxlIG9mIGVudHJpZXMgb24gaXQsIGJ1dCB3ZSdyZQorICAgICAgICAgICAgICAgICMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4gbnVrZSB0aGUgdG9wIGVudHJ5IGFuZCBnZW5lcmF0ZSBhbiBlcnJvciB0b2tlbgorCisgICAgICAgICAgICAgICAgIyBTdGFydCBudWtpbmcgZW50cmllcyBvbiB0aGUgc3RhY2sKKyAgICAgICAgICAgICAgICBpZiBsb29rYWhlYWQudHlwZSA9PSAnJGVuZCc6CisgICAgICAgICAgICAgICAgICAgICMgV2hvYS4gV2UncmUgcmVhbGx5IGhvc2VkIGhlcmUuIEJhaWwgb3V0CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICAgICAgaWYgbG9va2FoZWFkLnR5cGUgIT0gJ2Vycm9yJzoKKyAgICAgICAgICAgICAgICAgICAgc3ltID0gc3ltc3RhY2tbLTFdCisgICAgICAgICAgICAgICAgICAgIGlmIHN5bS50eXBlID09ICdlcnJvcic6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEhtbW0uIEVycm9yIGlzIG9uIHRvcCBvZiBzdGFjaywgd2UnbGwganVzdCBudWtlIGlucHV0CisgICAgICAgICAgICAgICAgICAgICAgICAjIHN5bWJvbCBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHQgPSBZYWNjU3ltYm9sKCkKKyAgICAgICAgICAgICAgICAgICAgdC50eXBlID0gJ2Vycm9yJworICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGxvb2thaGVhZCwibGluZW5vIik6CisgICAgICAgICAgICAgICAgICAgICAgICB0LmxpbmVubyA9IGxvb2thaGVhZC5saW5lbm8KKyAgICAgICAgICAgICAgICAgICAgdC52YWx1ZSA9IGxvb2thaGVhZAorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzdGFjay5hcHBlbmQobG9va2FoZWFkKQorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSB0CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlc3RhY2tbLTFdICAgICAgICMgUG90ZW50aWFsIGJ1ZyBmaXgKKworICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgQ2FsbCBhbiBlcnJvciBmdW5jdGlvbiBoZXJlCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoInlhY2M6IGludGVybmFsIHBhcnNlciBlcnJvciEhIVxuIikKKworICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAgICAjIHBhcnNlb3B0X25vdHJhY2soKS4KKyAgICAjCisgICAgIyBPcHRpbWl6ZWQgdmVyc2lvbiBvZiBwYXJzZW9wdCgpIHdpdGggbGluZSBudW1iZXIgdHJhY2tpbmcgcmVtb3ZlZC4gCisgICAgIyBETyBOT1QgRURJVCBUSElTIENPREUgRElSRUNUTFkuIENvcHkgdGhlIG9wdGltaXplZCB2ZXJzaW9uIGFuZCByZW1vdmUKKyAgICAjIGNvZGUgaW4gdGhlICMtLSEgVFJBQ0tJTkcgc2VjdGlvbnMKKyAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisKKyAgICBkZWYgcGFyc2VvcHRfbm90cmFjayhzZWxmLGlucHV0PU5vbmUsbGV4ZXI9Tm9uZSxkZWJ1Zz0wLHRyYWNraW5nPTAsdG9rZW5mdW5jPU5vbmUpOgorICAgICAgICBsb29rYWhlYWQgPSBOb25lICAgICAgICAgICAgICAgICAjIEN1cnJlbnQgbG9va2FoZWFkIHN5bWJvbAorICAgICAgICBsb29rYWhlYWRzdGFjayA9IFsgXSAgICAgICAgICAgICAjIFN0YWNrIG9mIGxvb2thaGVhZCBzeW1ib2xzCisgICAgICAgIGFjdGlvbnMgPSBzZWxmLmFjdGlvbiAgICAgICAgICAgICMgTG9jYWwgcmVmZXJlbmNlIHRvIGFjdGlvbiB0YWJsZSAodG8gYXZvaWQgbG9va3VwIG9uIHNlbGYuKQorICAgICAgICBnb3RvICAgID0gc2VsZi5nb3RvICAgICAgICAgICAgICAjIExvY2FsIHJlZmVyZW5jZSB0byBnb3RvIHRhYmxlICh0byBhdm9pZCBsb29rdXAgb24gc2VsZi4pCisgICAgICAgIHByb2QgICAgPSBzZWxmLnByb2R1Y3Rpb25zICAgICAgICMgTG9jYWwgcmVmZXJlbmNlIHRvIHByb2R1Y3Rpb24gbGlzdCAodG8gYXZvaWQgbG9va3VwIG9uIHNlbGYuKQorICAgICAgICBwc2xpY2UgID0gWWFjY1Byb2R1Y3Rpb24oTm9uZSkgICAjIFByb2R1Y3Rpb24gb2JqZWN0IHBhc3NlZCB0byBncmFtbWFyIHJ1bGVzCisgICAgICAgIGVycm9yY291bnQgPSAwICAgICAgICAgICAgICAgICAgICMgVXNlZCBkdXJpbmcgZXJyb3IgcmVjb3ZlcnkgCisKKyAgICAgICAgIyBJZiBubyBsZXhlciB3YXMgZ2l2ZW4sIHdlIHdpbGwgdHJ5IHRvIHVzZSB0aGUgbGV4IG1vZHVsZQorICAgICAgICBpZiBub3QgbGV4ZXI6CisgICAgICAgICAgICBsZXggPSBsb2FkX3BseV9sZXgoKQorICAgICAgICAgICAgbGV4ZXIgPSBsZXgubGV4ZXIKKyAgICAgICAgCisgICAgICAgICMgU2V0IHVwIHRoZSBsZXhlciBhbmQgcGFyc2VyIG9iamVjdHMgb24gcHNsaWNlCisgICAgICAgIHBzbGljZS5sZXhlciA9IGxleGVyCisgICAgICAgIHBzbGljZS5wYXJzZXIgPSBzZWxmCisKKyAgICAgICAgIyBJZiBpbnB1dCB3YXMgc3VwcGxpZWQsIHBhc3MgdG8gbGV4ZXIKKyAgICAgICAgaWYgaW5wdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsZXhlci5pbnB1dChpbnB1dCkKKworICAgICAgICBpZiB0b2tlbmZ1bmMgaXMgTm9uZToKKyAgICAgICAgICAgIyBUb2tlbml6ZSBmdW5jdGlvbgorICAgICAgICAgICBnZXRfdG9rZW4gPSBsZXhlci50b2tlbgorICAgICAgICBlbHNlOgorICAgICAgICAgICBnZXRfdG9rZW4gPSB0b2tlbmZ1bmMKKworICAgICAgICAjIFNldCB1cCB0aGUgc3RhdGUgYW5kIHN5bWJvbCBzdGFja3MKKworICAgICAgICBzdGF0ZXN0YWNrID0gWyBdICAgICAgICAgICAgICAgICMgU3RhY2sgb2YgcGFyc2luZyBzdGF0ZXMKKyAgICAgICAgc2VsZi5zdGF0ZXN0YWNrID0gc3RhdGVzdGFjaworICAgICAgICBzeW1zdGFjayAgID0gWyBdICAgICAgICAgICAgICAgICMgU3RhY2sgb2YgZ3JhbW1hciBzeW1ib2xzCisgICAgICAgIHNlbGYuc3ltc3RhY2sgPSBzeW1zdGFjaworCisgICAgICAgIHBzbGljZS5zdGFjayA9IHN5bXN0YWNrICAgICAgICAgIyBQdXQgaW4gdGhlIHByb2R1Y3Rpb24KKyAgICAgICAgZXJydG9rZW4gICA9IE5vbmUgICAgICAgICAgICAgICAjIEVyciB0b2tlbgorCisgICAgICAgICMgVGhlIHN0YXJ0IHN0YXRlIGlzIGFzc3VtZWQgdG8gYmUgKDAsJGVuZCkKKworICAgICAgICBzdGF0ZXN0YWNrLmFwcGVuZCgwKQorICAgICAgICBzeW0gPSBZYWNjU3ltYm9sKCkKKyAgICAgICAgc3ltLnR5cGUgPSAnJGVuZCcKKyAgICAgICAgc3ltc3RhY2suYXBwZW5kKHN5bSkKKyAgICAgICAgc3RhdGUgPSAwCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAjIEdldCB0aGUgbmV4dCBzeW1ib2wgb24gdGhlIGlucHV0LiAgSWYgYSBsb29rYWhlYWQgc3ltYm9sCisgICAgICAgICAgICAjIGlzIGFscmVhZHkgc2V0LCB3ZSBqdXN0IHVzZSB0aGF0LiBPdGhlcndpc2UsIHdlJ2xsIHB1bGwKKyAgICAgICAgICAgICMgdGhlIG5leHQgdG9rZW4gb2ZmIG9mIHRoZSBsb29rYWhlYWRzdGFjayBvciBmcm9tIHRoZSBsZXhlcgorCisgICAgICAgICAgICBpZiBub3QgbG9va2FoZWFkOgorICAgICAgICAgICAgICAgIGlmIG5vdCBsb29rYWhlYWRzdGFjazoKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gZ2V0X3Rva2VuKCkgICAgICMgR2V0IHRoZSBuZXh0IHRva2VuCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gbG9va2FoZWFkc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgbG9va2FoZWFkOgorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBZYWNjU3ltYm9sKCkKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkLnR5cGUgPSAnJGVuZCcKKworICAgICAgICAgICAgIyBDaGVjayB0aGUgYWN0aW9uIHRhYmxlCisgICAgICAgICAgICBsdHlwZSA9IGxvb2thaGVhZC50eXBlCisgICAgICAgICAgICB0ID0gYWN0aW9uc1tzdGF0ZV0uZ2V0KGx0eXBlKQorCisgICAgICAgICAgICBpZiB0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIHQgPiAwOgorICAgICAgICAgICAgICAgICAgICAjIHNoaWZ0IGEgc3ltYm9sIG9uIHRoZSBzdGFjaworICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLmFwcGVuZCh0KQorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHQKKworICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5hcHBlbmQobG9va2FoZWFkKQorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgIyBEZWNyZWFzZSBlcnJvciBjb3VudCBvbiBzdWNjZXNzZnVsIHNoaWZ0CisgICAgICAgICAgICAgICAgICAgIGlmIGVycm9yY291bnQ6IGVycm9yY291bnQgLT0xCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiB0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgIyByZWR1Y2UgYSBzeW1ib2wgb24gdGhlIHN0YWNrLCBlbWl0IGEgcHJvZHVjdGlvbgorICAgICAgICAgICAgICAgICAgICBwID0gcHJvZFstdF0KKyAgICAgICAgICAgICAgICAgICAgcG5hbWUgPSBwLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgcGxlbiAgPSBwLmxlbgorCisgICAgICAgICAgICAgICAgICAgICMgR2V0IHByb2R1Y3Rpb24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgc3ltID0gWWFjY1N5bWJvbCgpCisgICAgICAgICAgICAgICAgICAgIHN5bS50eXBlID0gcG5hbWUgICAgICAgIyBQcm9kdWN0aW9uIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgc3ltLnZhbHVlID0gTm9uZQorCisgICAgICAgICAgICAgICAgICAgIGlmIHBsZW46CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnID0gc3ltc3RhY2tbLXBsZW4tMTpdCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnWzBdID0gc3ltCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIGNvZGUgZW5jbG9zZWQgaW4gdGhpcyBzZWN0aW9uIGlzIGR1cGxpY2F0ZWQgCisgICAgICAgICAgICAgICAgICAgICAgICAjIGJlbG93IGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiAgTWFrZSBzdXJlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGNoYW5nZXMgZ2V0IG1hZGUgaW4gYm90aCBsb2NhdGlvbnMuCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzbGljZS5zbGljZSA9IHRhcmcKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2FsbCB0aGUgZ3JhbW1hciBydWxlIHdpdGggb3VyIHNwZWNpYWwgc2xpY2Ugb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHN5bXN0YWNrWy1wbGVuOl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgc3RhdGVzdGFja1stcGxlbjpdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5jYWxsYWJsZShwc2xpY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2suYXBwZW5kKHN5bSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGdvdG9bc3RhdGVzdGFja1stMV1dW3BuYW1lXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKHN0YXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgYW4gZXJyb3Igd2FzIHNldC4gRW50ZXIgZXJyb3IgcmVjb3Zlcnkgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzdGFjay5hcHBlbmQobG9va2FoZWFkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVzdGFja1stMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0udHlwZSA9ICdlcnJvcicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBzeW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yb2sgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICAgIAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnID0gWyBzeW0gXQorCisgICAgICAgICAgICAgICAgICAgICAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBjb2RlIGVuY2xvc2VkIGluIHRoaXMgc2VjdGlvbiBpcyBkdXBsaWNhdGVkIAorICAgICAgICAgICAgICAgICAgICAgICAgIyBhYm92ZSBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gIE1ha2Ugc3VyZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGFuZ2VzIGdldCBtYWRlIGluIGJvdGggbG9jYXRpb25zLgorCisgICAgICAgICAgICAgICAgICAgICAgICBwc2xpY2Uuc2xpY2UgPSB0YXJnCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENhbGwgdGhlIGdyYW1tYXIgcnVsZSB3aXRoIG91ciBzcGVjaWFsIHNsaWNlIG9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuY2FsbGFibGUocHNsaWNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLmFwcGVuZChzeW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBnb3RvW3N0YXRlc3RhY2tbLTFdXVtwbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLmFwcGVuZChzdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIGFuIGVycm9yIHdhcyBzZXQuIEVudGVyIGVycm9yIHJlY292ZXJ5IHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkc3RhY2suYXBwZW5kKGxvb2thaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlc3RhY2tbLTFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLnR5cGUgPSAnZXJyb3InCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gc3ltCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb3VudCA9IGVycm9yX2NvdW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcm9rID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKworICAgICAgICAgICAgICAgIGlmIHQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgbiA9IHN5bXN0YWNrWy0xXQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihuLCJ2YWx1ZSIsTm9uZSkKKworICAgICAgICAgICAgaWYgdCA9PSBOb25lOgorCisgICAgICAgICAgICAgICAgIyBXZSBoYXZlIHNvbWUga2luZCBvZiBwYXJzaW5nIGVycm9yIGhlcmUuICBUbyBoYW5kbGUKKyAgICAgICAgICAgICAgICAjIHRoaXMsIHdlIGFyZSBnb2luZyB0byBwdXNoIHRoZSBjdXJyZW50IHRva2VuIG9udG8KKyAgICAgICAgICAgICAgICAjIHRoZSB0b2tlbnN0YWNrIGFuZCByZXBsYWNlIGl0IHdpdGggYW4gJ2Vycm9yJyB0b2tlbi4KKyAgICAgICAgICAgICAgICAjIElmIHRoZXJlIGFyZSBhbnkgc3luY2hyb25pemF0aW9uIHJ1bGVzLCB0aGV5IG1heQorICAgICAgICAgICAgICAgICMgY2F0Y2ggaXQuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgSW4gYWRkaXRpb24gdG8gcHVzaGluZyB0aGUgZXJyb3IgdG9rZW4sIHdlIGNhbGwgY2FsbAorICAgICAgICAgICAgICAgICMgdGhlIHVzZXIgZGVmaW5lZCBwX2Vycm9yKCkgZnVuY3Rpb24gaWYgdGhpcyBpcyB0aGUKKyAgICAgICAgICAgICAgICAjIGZpcnN0IHN5bnRheCBlcnJvci4gIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaWYKKyAgICAgICAgICAgICAgICAjIGVycm9yY291bnQgPT0gMC4KKyAgICAgICAgICAgICAgICBpZiBlcnJvcmNvdW50ID09IDAgb3Igc2VsZi5lcnJvcm9rOgorICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcm9rID0gMAorICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbiA9IGxvb2thaGVhZAorICAgICAgICAgICAgICAgICAgICBpZiBlcnJ0b2tlbi50eXBlID09ICckZW5kJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycnRva2VuID0gTm9uZSAgICAgICAgICAgICAgICMgRW5kIG9mIGZpbGUhCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZXJyb3JmdW5jOgorICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsIGVycm9rLHRva2VuLHJlc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9rID0gc2VsZi5lcnJvayAgICAgICAgIyBTZXQgc29tZSBzcGVjaWFsIGZ1bmN0aW9ucyBhdmFpbGFibGUgaW4gZXJyb3IgcmVjb3ZlcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gZ2V0X3Rva2VuCisgICAgICAgICAgICAgICAgICAgICAgICByZXN0YXJ0ID0gc2VsZi5yZXN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnJ0b2tlbiBhbmQgbm90IGhhc2F0dHIoZXJydG9rZW4sJ2xleGVyJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4ubGV4ZXIgPSBsZXhlcgorICAgICAgICAgICAgICAgICAgICAgICAgdG9rID0gc2VsZi5lcnJvcmZ1bmMoZXJydG9rZW4pCisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgZXJyb2ssIHRva2VuLCByZXN0YXJ0ICAgIyBEZWxldGUgc3BlY2lhbCBmdW5jdGlvbnMKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5lcnJvcm9rOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVXNlciBtdXN0IGhhdmUgZG9uZSBzb21lIGtpbmQgb2YgcGFuaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1vZGUgcmVjb3Zlcnkgb24gdGhlaXIgb3duLiAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXR1cm5lZCB0b2tlbiBpcyB0aGUgbmV4dCBsb29rYWhlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSB0b2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbiA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJydG9rZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihlcnJ0b2tlbiwibGluZW5vIik6IGxpbmVubyA9IGxvb2thaGVhZC5saW5lbm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOiBsaW5lbm8gPSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZW5vOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ5YWNjOiBTeW50YXggZXJyb3IgYXQgbGluZSAlZCwgdG9rZW49JXNcbiIgJSAobGluZW5vLCBlcnJ0b2tlbi50eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ5YWNjOiBTeW50YXggZXJyb3IsIHRva2VuPSVzIiAlIGVycnRva2VuLnR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInlhY2M6IFBhcnNlIGVycm9yIGluIGlucHV0LiBFT0ZcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKworICAgICAgICAgICAgICAgICMgY2FzZSAxOiAgdGhlIHN0YXRlc3RhY2sgb25seSBoYXMgMSBlbnRyeSBvbiBpdC4gIElmIHdlJ3JlIGluIHRoaXMgc3RhdGUsIHRoZQorICAgICAgICAgICAgICAgICMgZW50aXJlIHBhcnNlIGhhcyBiZWVuIHJvbGxlZCBiYWNrIGFuZCB3ZSdyZSBjb21wbGV0ZWx5IGhvc2VkLiAgIFRoZSB0b2tlbiBpcworICAgICAgICAgICAgICAgICMgZGlzY2FyZGVkIGFuZCB3ZSBqdXN0IGtlZXAgZ29pbmcuCisKKyAgICAgICAgICAgICAgICBpZiBsZW4oc3RhdGVzdGFjaykgPD0gMSBhbmQgbG9va2FoZWFkLnR5cGUgIT0gJyRlbmQnOgorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGVycnRva2VuID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDAKKyAgICAgICAgICAgICAgICAgICAgIyBOdWtlIHRoZSBwdXNoYmFjayBzdGFjaworICAgICAgICAgICAgICAgICAgICBkZWwgbG9va2FoZWFkc3RhY2tbOl0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICMgY2FzZSAyOiB0aGUgc3RhdGVzdGFjayBoYXMgYSBjb3VwbGUgb2YgZW50cmllcyBvbiBpdCwgYnV0IHdlJ3JlCisgICAgICAgICAgICAgICAgIyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiBudWtlIHRoZSB0b3AgZW50cnkgYW5kIGdlbmVyYXRlIGFuIGVycm9yIHRva2VuCisKKyAgICAgICAgICAgICAgICAjIFN0YXJ0IG51a2luZyBlbnRyaWVzIG9uIHRoZSBzdGFjaworICAgICAgICAgICAgICAgIGlmIGxvb2thaGVhZC50eXBlID09ICckZW5kJzoKKyAgICAgICAgICAgICAgICAgICAgIyBXaG9hLiBXZSdyZSByZWFsbHkgaG9zZWQgaGVyZS4gQmFpbCBvdXQKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICBpZiBsb29rYWhlYWQudHlwZSAhPSAnZXJyb3InOgorICAgICAgICAgICAgICAgICAgICBzeW0gPSBzeW1zdGFja1stMV0KKyAgICAgICAgICAgICAgICAgICAgaWYgc3ltLnR5cGUgPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgSG1tbS4gRXJyb3IgaXMgb24gdG9wIG9mIHN0YWNrLCB3ZSdsbCBqdXN0IG51a2UgaW5wdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgc3ltYm9sIGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgdCA9IFlhY2NTeW1ib2woKQorICAgICAgICAgICAgICAgICAgICB0LnR5cGUgPSAnZXJyb3InCisgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIobG9va2FoZWFkLCJsaW5lbm8iKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHQubGluZW5vID0gbG9va2FoZWFkLmxpbmVubworICAgICAgICAgICAgICAgICAgICB0LnZhbHVlID0gbG9va2FoZWFkCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZHN0YWNrLmFwcGVuZChsb29rYWhlYWQpCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IHQKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVzdGFja1stMV0gICAgICAgIyBQb3RlbnRpYWwgYnVnIGZpeAorCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBDYWxsIGFuIGVycm9yIGZ1bmN0aW9uIGhlcmUKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigieWFjYzogaW50ZXJuYWwgcGFyc2VyIGVycm9yISEhXG4iKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0gR3JhbW1hciBSZXByZXNlbnRhdGlvbiA9PT0KKyMKKyMgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMsIGNsYXNzZXMsIGFuZCB2YXJpYWJsZXMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IGFuZAorIyBtYW5pcHVsYXRlIHRoZSBydWxlcyB0aGF0IG1ha2UgdXAgYSBncmFtbWFyLiAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaW1wb3J0IHJlCisKKyMgcmVnZXggbWF0Y2hpbmcgaWRlbnRpZmllcnMKK19pc19pZGVudGlmaWVyID0gcmUuY29tcGlsZShyJ15bYS16QS1aMC05Xy1dKyQnKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNsYXNzIFByb2R1Y3Rpb246CisjCisjIFRoaXMgY2xhc3Mgc3RvcmVzIHRoZSByYXcgaW5mb3JtYXRpb24gYWJvdXQgYSBzaW5nbGUgcHJvZHVjdGlvbiBvciBncmFtbWFyIHJ1bGUuCisjIEEgZ3JhbW1hciBydWxlIHJlZmVycyB0byBhIHNwZWNpZmljYXRpb24gc3VjaCBhcyB0aGlzOgorIworIyAgICAgICBleHByIDogZXhwciBQTFVTIHRlcm0gCisjCisjIEhlcmUgYXJlIHRoZSBiYXNpYyBhdHRyaWJ1dGVzIGRlZmluZWQgb24gYWxsIHByb2R1Y3Rpb25zCisjCisjICAgICAgIG5hbWUgICAgIC0gTmFtZSBvZiB0aGUgcHJvZHVjdGlvbi4gIEZvciBleGFtcGxlICdleHByJworIyAgICAgICBwcm9kICAgICAtIEEgbGlzdCBvZiBzeW1ib2xzIG9uIHRoZSByaWdodCBzaWRlIFsnZXhwcicsJ1BMVVMnLCd0ZXJtJ10KKyMgICAgICAgcHJlYyAgICAgLSBQcm9kdWN0aW9uIHByZWNlZGVuY2UgbGV2ZWwKKyMgICAgICAgbnVtYmVyICAgLSBQcm9kdWN0aW9uIG51bWJlci4KKyMgICAgICAgZnVuYyAgICAgLSBGdW5jdGlvbiB0aGF0IGV4ZWN1dGVzIG9uIHJlZHVjZQorIyAgICAgICBmaWxlICAgICAtIEZpbGUgd2hlcmUgcHJvZHVjdGlvbiBmdW5jdGlvbiBpcyBkZWZpbmVkCisjICAgICAgIGxpbmVubyAgIC0gTGluZSBudW1iZXIgd2hlcmUgcHJvZHVjdGlvbiBmdW5jdGlvbiBpcyBkZWZpbmVkCisjCisjIFRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgZGVmaW5lZCBvciBvcHRpb25hbC4KKyMKKyMgICAgICAgbGVuICAgICAgIC0gTGVuZ3RoIG9mIHRoZSBwcm9kdWN0aW9uIChudW1iZXIgb2Ygc3ltYm9scyBvbiByaWdodCBoYW5kIHNpZGUpCisjICAgICAgIHVzeW1zICAgICAtIFNldCBvZiB1bmlxdWUgc3ltYm9scyBmb3VuZCBpbiB0aGUgcHJvZHVjdGlvbgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBQcm9kdWN0aW9uKG9iamVjdCk6CisgICAgcmVkdWNlZCA9IDAKKyAgICBkZWYgX19pbml0X18oc2VsZixudW1iZXIsbmFtZSxwcm9kLHByZWNlZGVuY2U9KCdyaWdodCcsMCksZnVuYz1Ob25lLGZpbGU9JycsbGluZT0wKToKKyAgICAgICAgc2VsZi5uYW1lICAgICA9IG5hbWUKKyAgICAgICAgc2VsZi5wcm9kICAgICA9IHR1cGxlKHByb2QpCisgICAgICAgIHNlbGYubnVtYmVyICAgPSBudW1iZXIKKyAgICAgICAgc2VsZi5mdW5jICAgICA9IGZ1bmMKKyAgICAgICAgc2VsZi5jYWxsYWJsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5maWxlICAgICA9IGZpbGUKKyAgICAgICAgc2VsZi5saW5lICAgICA9IGxpbmUKKyAgICAgICAgc2VsZi5wcmVjICAgICA9IHByZWNlZGVuY2UKKworICAgICAgICAjIEludGVybmFsIHNldHRpbmdzIHVzZWQgZHVyaW5nIHRhYmxlIGNvbnN0cnVjdGlvbgorICAgICAgICAKKyAgICAgICAgc2VsZi5sZW4gID0gbGVuKHNlbGYucHJvZCkgICAjIExlbmd0aCBvZiB0aGUgcHJvZHVjdGlvbgorCisgICAgICAgICMgQ3JlYXRlIGEgbGlzdCBvZiB1bmlxdWUgcHJvZHVjdGlvbiBzeW1ib2xzIHVzZWQgaW4gdGhlIHByb2R1Y3Rpb24KKyAgICAgICAgc2VsZi51c3ltcyA9IFsgXSAgICAgICAgICAgICAKKyAgICAgICAgZm9yIHMgaW4gc2VsZi5wcm9kOgorICAgICAgICAgICAgaWYgcyBub3QgaW4gc2VsZi51c3ltczoKKyAgICAgICAgICAgICAgICBzZWxmLnVzeW1zLmFwcGVuZChzKQorCisgICAgICAgICMgTGlzdCBvZiBhbGwgTFIgaXRlbXMgZm9yIHRoZSBwcm9kdWN0aW9uCisgICAgICAgIHNlbGYubHJfaXRlbXMgPSBbXQorICAgICAgICBzZWxmLmxyX25leHQgPSBOb25lCisKKyAgICAgICAgIyBDcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24KKyAgICAgICAgaWYgc2VsZi5wcm9kOgorICAgICAgICAgICAgc2VsZi5zdHIgPSAiJXMgLT4gJXMiICUgKHNlbGYubmFtZSwiICIuam9pbihzZWxmLnByb2QpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zdHIgPSAiJXMgLT4gPGVtcHR5PiIgJSBzZWxmLm5hbWUKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zdHIKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJQcm9kdWN0aW9uKCIrc3RyKHNlbGYpKyIpIgorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5wcm9kKQorCisgICAgZGVmIF9fbm9uemVyb19fKHNlbGYpOgorICAgICAgICByZXR1cm4gMQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsaW5kZXgpOgorICAgICAgICByZXR1cm4gc2VsZi5wcm9kW2luZGV4XQorICAgICAgICAgICAgCisgICAgIyBSZXR1cm4gdGhlIG50aCBscl9pdGVtIGZyb20gdGhlIHByb2R1Y3Rpb24gKG9yIE5vbmUgaWYgYXQgdGhlIGVuZCkKKyAgICBkZWYgbHJfaXRlbShzZWxmLG4pOgorICAgICAgICBpZiBuID4gbGVuKHNlbGYucHJvZCk6IHJldHVybiBOb25lCisgICAgICAgIHAgPSBMUkl0ZW0oc2VsZixuKQorCisgICAgICAgICMgUHJlY29tcHV0ZSB0aGUgbGlzdCBvZiBwcm9kdWN0aW9ucyBpbW1lZGlhdGVseSBmb2xsb3dpbmcuICBIYWNrLiBSZW1vdmUgbGF0ZXIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcC5scl9hZnRlciA9IFByb2RuYW1lc1twLnByb2RbbisxXV0KKyAgICAgICAgZXhjZXB0IChJbmRleEVycm9yLEtleUVycm9yKToKKyAgICAgICAgICAgIHAubHJfYWZ0ZXIgPSBbXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwLmxyX2JlZm9yZSA9IHAucHJvZFtuLTFdCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgcC5scl9iZWZvcmUgPSBOb25lCisKKyAgICAgICAgcmV0dXJuIHAKKyAgICAKKyAgICAjIEJpbmQgdGhlIHByb2R1Y3Rpb24gZnVuY3Rpb24gbmFtZSB0byBhIGNhbGxhYmxlCisgICAgZGVmIGJpbmQoc2VsZixwZGljdCk6CisgICAgICAgIGlmIHNlbGYuZnVuYzoKKyAgICAgICAgICAgIHNlbGYuY2FsbGFibGUgPSBwZGljdFtzZWxmLmZ1bmNdCisKKyMgVGhpcyBjbGFzcyBzZXJ2ZXMgYXMgYSBtaW5pbWFsIHN0YW5kaW4gZm9yIFByb2R1Y3Rpb24gb2JqZWN0cyB3aGVuCisjIHJlYWRpbmcgdGFibGUgZGF0YSBmcm9tIGZpbGVzLiAgIEl0IG9ubHkgY29udGFpbnMgaW5mb3JtYXRpb24KKyMgYWN0dWFsbHkgdXNlZCBieSB0aGUgTFIgcGFyc2luZyBlbmdpbmUsIHBsdXMgc29tZSBhZGRpdGlvbmFsCisjIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KK2NsYXNzIE1pbmlQcm9kdWN0aW9uKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsc3RyLG5hbWUsbGVuLGZ1bmMsZmlsZSxsaW5lKToKKyAgICAgICAgc2VsZi5uYW1lICAgICA9IG5hbWUKKyAgICAgICAgc2VsZi5sZW4gICAgICA9IGxlbgorICAgICAgICBzZWxmLmZ1bmMgICAgID0gZnVuYworICAgICAgICBzZWxmLmNhbGxhYmxlID0gTm9uZQorICAgICAgICBzZWxmLmZpbGUgICAgID0gZmlsZQorICAgICAgICBzZWxmLmxpbmUgICAgID0gbGluZQorICAgICAgICBzZWxmLnN0ciAgICAgID0gc3RyCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnN0cgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJNaW5pUHJvZHVjdGlvbiglcykiICUgc2VsZi5zdHIKKworICAgICMgQmluZCB0aGUgcHJvZHVjdGlvbiBmdW5jdGlvbiBuYW1lIHRvIGEgY2FsbGFibGUKKyAgICBkZWYgYmluZChzZWxmLHBkaWN0KToKKyAgICAgICAgaWYgc2VsZi5mdW5jOgorICAgICAgICAgICAgc2VsZi5jYWxsYWJsZSA9IHBkaWN0W3NlbGYuZnVuY10KKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNsYXNzIExSSXRlbQorIworIyBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBzcGVjaWZpYyBzdGFnZSBvZiBwYXJzaW5nIGEgcHJvZHVjdGlvbiBydWxlLiAgRm9yCisjIGV4YW1wbGU6IAorIworIyAgICAgICBleHByIDogZXhwciAuIFBMVVMgdGVybSAKKyMKKyMgSW4gdGhlIGFib3ZlLCB0aGUgIi4iIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgbG9jYXRpb24gb2YgdGhlIHBhcnNlLiAgSGVyZQorIyBiYXNpYyBhdHRyaWJ1dGVzOgorIworIyAgICAgICBuYW1lICAgICAgIC0gTmFtZSBvZiB0aGUgcHJvZHVjdGlvbi4gIEZvciBleGFtcGxlICdleHByJworIyAgICAgICBwcm9kICAgICAgIC0gQSBsaXN0IG9mIHN5bWJvbHMgb24gdGhlIHJpZ2h0IHNpZGUgWydleHByJywnLicsICdQTFVTJywndGVybSddCisjICAgICAgIG51bWJlciAgICAgLSBQcm9kdWN0aW9uIG51bWJlci4KKyMKKyMgICAgICAgbHJfbmV4dCAgICAgIE5leHQgTFIgaXRlbS4gRXhhbXBsZSwgaWYgd2UgYXJlICcgZXhwciAtPiBleHByIC4gUExVUyB0ZXJtJworIyAgICAgICAgICAgICAgICAgICAgdGhlbiBscl9uZXh0IHJlZmVycyB0byAnZXhwciAtPiBleHByIFBMVVMgLiB0ZXJtJworIyAgICAgICBscl9pbmRleCAgIC0gTFIgaXRlbSBpbmRleCAobG9jYXRpb24gb2YgdGhlICIuIikgaW4gdGhlIHByb2QgbGlzdC4KKyMgICAgICAgbG9va2FoZWFkcyAtIExBTFIgbG9va2FoZWFkIHN5bWJvbHMgZm9yIHRoaXMgaXRlbQorIyAgICAgICBsZW4gICAgICAgIC0gTGVuZ3RoIG9mIHRoZSBwcm9kdWN0aW9uIChudW1iZXIgb2Ygc3ltYm9scyBvbiByaWdodCBoYW5kIHNpZGUpCisjICAgICAgIGxyX2FmdGVyICAgIC0gTGlzdCBvZiBhbGwgcHJvZHVjdGlvbnMgdGhhdCBpbW1lZGlhdGVseSBmb2xsb3cKKyMgICAgICAgbHJfYmVmb3JlICAgLSBHcmFtbWFyIHN5bWJvbCBpbW1lZGlhdGVseSBiZWZvcmUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgTFJJdGVtKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYscCxuKToKKyAgICAgICAgc2VsZi5uYW1lICAgICAgID0gcC5uYW1lCisgICAgICAgIHNlbGYucHJvZCAgICAgICA9IGxpc3QocC5wcm9kKQorICAgICAgICBzZWxmLm51bWJlciAgICAgPSBwLm51bWJlcgorICAgICAgICBzZWxmLmxyX2luZGV4ICAgPSBuCisgICAgICAgIHNlbGYubG9va2FoZWFkcyA9IHsgfQorICAgICAgICBzZWxmLnByb2QuaW5zZXJ0KG4sIi4iKQorICAgICAgICBzZWxmLnByb2QgICAgICAgPSB0dXBsZShzZWxmLnByb2QpCisgICAgICAgIHNlbGYubGVuICAgICAgICA9IGxlbihzZWxmLnByb2QpCisgICAgICAgIHNlbGYudXN5bXMgICAgICA9IHAudXN5bXMKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnByb2Q6CisgICAgICAgICAgICBzID0gIiVzIC0+ICVzIiAlIChzZWxmLm5hbWUsIiAiLmpvaW4oc2VsZi5wcm9kKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHMgPSAiJXMgLT4gPGVtcHR5PiIgJSBzZWxmLm5hbWUKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJMUkl0ZW0oIitzdHIoc2VsZikrIikiCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcmlnaHRtb3N0X3Rlcm1pbmFsKCkKKyMKKyMgUmV0dXJuIHRoZSByaWdodG1vc3QgdGVybWluYWwgZnJvbSBhIGxpc3Qgb2Ygc3ltYm9scy4gIFVzZWQgaW4gYWRkX3Byb2R1Y3Rpb24oKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVmIHJpZ2h0bW9zdF90ZXJtaW5hbChzeW1ib2xzLCB0ZXJtaW5hbHMpOgorICAgIGkgPSBsZW4oc3ltYm9scykgLSAxCisgICAgd2hpbGUgaSA+PSAwOgorICAgICAgICBpZiBzeW1ib2xzW2ldIGluIHRlcm1pbmFsczoKKyAgICAgICAgICAgIHJldHVybiBzeW1ib2xzW2ldCisgICAgICAgIGkgLT0gMQorICAgIHJldHVybiBOb25lCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0gR1JBTU1BUiBDTEFTUyA9PT0KKyMKKyMgVGhlIGZvbGxvd2luZyBjbGFzcyByZXByZXNlbnRzIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGdyYW1tYXIgYWxvbmcKKyMgd2l0aCB2YXJpb3VzIGNvbXB1dGVkIHByb3BlcnRpZXMgc3VjaCBhcyBmaXJzdCBzZXRzLCBmb2xsb3cgc2V0cywgTFIgaXRlbXMsIGV0Yy4KKyMgVGhpcyBkYXRhIGlzIHVzZWQgZm9yIGNyaXRpY2FsIHBhcnRzIG9mIHRoZSB0YWJsZSBnZW5lcmF0aW9uIHByb2Nlc3MgbGF0ZXIuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIEdyYW1tYXJFcnJvcihZYWNjRXJyb3IpOiBwYXNzCisKK2NsYXNzIEdyYW1tYXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZix0ZXJtaW5hbHMpOgorICAgICAgICBzZWxmLlByb2R1Y3Rpb25zICA9IFtOb25lXSAgIyBBIGxpc3Qgb2YgYWxsIG9mIHRoZSBwcm9kdWN0aW9ucy4gIFRoZSBmaXJzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBlbnRyeSBpcyBhbHdheXMgcmVzZXJ2ZWQgZm9yIHRoZSBwdXJwb3NlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJ1aWxkaW5nIGFuIGF1Z21lbnRlZCBncmFtbWFyCisKKyAgICAgICAgc2VsZi5Qcm9kbmFtZXMgICAgPSB7IH0gICAgICMgQSBkaWN0aW9uYXJ5IG1hcHBpbmcgdGhlIG5hbWVzIG9mIG5vbnRlcm1pbmFscyB0byBhIGxpc3Qgb2YgYWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHByb2R1Y3Rpb25zIG9mIHRoYXQgbm9udGVybWluYWwuCisKKyAgICAgICAgc2VsZi5Qcm9kbWFwICAgICAgPSB7IH0gICAgICMgQSBkaWN0aW9uYXJ5IHRoYXQgaXMgb25seSB1c2VkIHRvIGRldGVjdCBkdXBsaWNhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHJvZHVjdGlvbnMuCisKKyAgICAgICAgc2VsZi5UZXJtaW5hbHMgICAgPSB7IH0gICAgICMgQSBkaWN0aW9uYXJ5IG1hcHBpbmcgdGhlIG5hbWVzIG9mIHRlcm1pbmFsIHN5bWJvbHMgdG8gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsaXN0IG9mIHRoZSBydWxlcyB3aGVyZSB0aGV5IGFyZSB1c2VkLgorCisgICAgICAgIGZvciB0ZXJtIGluIHRlcm1pbmFsczoKKyAgICAgICAgICAgIHNlbGYuVGVybWluYWxzW3Rlcm1dID0gW10KKworICAgICAgICBzZWxmLlRlcm1pbmFsc1snZXJyb3InXSA9IFtdCisKKyAgICAgICAgc2VsZi5Ob250ZXJtaW5hbHMgPSB7IH0gICAgICMgQSBkaWN0aW9uYXJ5IG1hcHBpbmcgbmFtZXMgb2Ygbm9udGVybWluYWxzIHRvIGEgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvZiBydWxlIG51bWJlcnMgd2hlcmUgdGhleSBhcmUgdXNlZC4KKworICAgICAgICBzZWxmLkZpcnN0ICAgICAgICA9IHsgfSAgICAgIyBBIGRpY3Rpb25hcnkgb2YgcHJlY29tcHV0ZWQgRklSU1QoeCkgc3ltYm9scworCisgICAgICAgIHNlbGYuRm9sbG93ICAgICAgID0geyB9ICAgICAjIEEgZGljdGlvbmFyeSBvZiBwcmVjb21wdXRlZCBGT0xMT1coeCkgc3ltYm9scworCisgICAgICAgIHNlbGYuUHJlY2VkZW5jZSAgID0geyB9ICAgICAjIFByZWNlZGVuY2UgcnVsZXMgZm9yIGVhY2ggdGVybWluYWwuIENvbnRhaW5zIHR1cGxlcyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZm9ybSAoJ3JpZ2h0JyxsZXZlbCkgb3IgKCdub25hc3NvYycsIGxldmVsKSBvciAoJ2xlZnQnLGxldmVsKQorCisgICAgICAgIHNlbGYuVXNlZFByZWNlZGVuY2UgPSB7IH0gICAjIFByZWNlZGVuY2UgcnVsZXMgdGhhdCB3ZXJlIGFjdHVhbGx5IHVzZWQgYnkgdGhlIGdyYW1tZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgb25seSB1c2VkIHRvIHByb3ZpZGUgZXJyb3IgY2hlY2tpbmcgYW5kIHRvIGdlbmVyYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGEgd2FybmluZyBhYm91dCB1bnVzZWQgcHJlY2VkZW5jZSBydWxlcy4KKworICAgICAgICBzZWxmLlN0YXJ0ID0gTm9uZSAgICAgICAgICAgIyBTdGFydGluZyBzeW1ib2wgZm9yIHRoZSBncmFtbWFyCisKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuUHJvZHVjdGlvbnMpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZixpbmRleCk6CisgICAgICAgIHJldHVybiBzZWxmLlByb2R1Y3Rpb25zW2luZGV4XQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgc2V0X3ByZWNlZGVuY2UoKQorICAgICMKKyAgICAjIFNldHMgdGhlIHByZWNlZGVuY2UgZm9yIGEgZ2l2ZW4gdGVybWluYWwuIGFzc29jIGlzIHRoZSBhc3NvY2lhdGl2aXR5IHN1Y2ggYXMKKyAgICAjICdsZWZ0JywncmlnaHQnLCBvciAnbm9uYXNzb2MnLiAgbGV2ZWwgaXMgYSBudW1lcmljIGxldmVsLgorICAgICMKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgc2V0X3ByZWNlZGVuY2Uoc2VsZix0ZXJtLGFzc29jLGxldmVsKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuUHJvZHVjdGlvbnMgPT0gW05vbmVdLCJNdXN0IGNhbGwgc2V0X3ByZWNlZGVuY2UoKSBiZWZvcmUgYWRkX3Byb2R1Y3Rpb24oKSIKKyAgICAgICAgaWYgdGVybSBpbiBzZWxmLlByZWNlZGVuY2U6CisgICAgICAgICAgICByYWlzZSBHcmFtbWFyRXJyb3IoIlByZWNlZGVuY2UgYWxyZWFkeSBzcGVjaWZpZWQgZm9yIHRlcm1pbmFsICclcyciICUgdGVybSkKKyAgICAgICAgaWYgYXNzb2Mgbm90IGluIFsnbGVmdCcsJ3JpZ2h0Jywnbm9uYXNzb2MnXToKKyAgICAgICAgICAgIHJhaXNlIEdyYW1tYXJFcnJvcigiQXNzb2NpYXRpdml0eSBtdXN0IGJlIG9uZSBvZiAnbGVmdCcsJ3JpZ2h0Jywgb3IgJ25vbmFzc29jJyIpCisgICAgICAgIHNlbGYuUHJlY2VkZW5jZVt0ZXJtXSA9IChhc3NvYyxsZXZlbCkKKyAKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBhZGRfcHJvZHVjdGlvbigpCisgICAgIworICAgICMgR2l2ZW4gYW4gYWN0aW9uIGZ1bmN0aW9uLCB0aGlzIGZ1bmN0aW9uIGFzc2VtYmxlcyBhIHByb2R1Y3Rpb24gcnVsZSBhbmQKKyAgICAjIGNvbXB1dGVzIGl0cyBwcmVjZWRlbmNlIGxldmVsLgorICAgICMKKyAgICAjIFRoZSBwcm9kdWN0aW9uIHJ1bGUgaXMgc3VwcGxpZWQgYXMgYSBsaXN0IG9mIHN5bWJvbHMuICAgRm9yIGV4YW1wbGUsCisgICAgIyBhIHJ1bGUgc3VjaCBhcyAnZXhwciA6IGV4cHIgUExVUyB0ZXJtJyBoYXMgYSBwcm9kdWN0aW9uIG5hbWUgb2YgJ2V4cHInIGFuZAorICAgICMgc3ltYm9scyBbJ2V4cHInLCdQTFVTJywndGVybSddLgorICAgICMKKyAgICAjIFByZWNlZGVuY2UgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcHJlY2VkZW5jZSBvZiB0aGUgcmlnaHQtbW9zdCBub24tdGVybWluYWwKKyAgICAjIG9yIHRoZSBwcmVjZWRlbmNlIG9mIGEgdGVybWluYWwgc3BlY2lmaWVkIGJ5ICVwcmVjLgorICAgICMKKyAgICAjIEEgdmFyaWV0eSBvZiBlcnJvciBjaGVja3MgYXJlIHBlcmZvcm1lZCB0byBtYWtlIHN1cmUgcHJvZHVjdGlvbiBzeW1ib2xzCisgICAgIyBhcmUgdmFsaWQgYW5kIHRoYXQgJXByZWMgaXMgdXNlZCBjb3JyZWN0bHkuCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIGFkZF9wcm9kdWN0aW9uKHNlbGYscHJvZG5hbWUsc3ltcyxmdW5jPU5vbmUsZmlsZT0nJyxsaW5lPTApOgorCisgICAgICAgIGlmIHByb2RuYW1lIGluIHNlbGYuVGVybWluYWxzOgorICAgICAgICAgICAgcmFpc2UgR3JhbW1hckVycm9yKCIlczolZDogSWxsZWdhbCBydWxlIG5hbWUgJyVzJy4gQWxyZWFkeSBkZWZpbmVkIGFzIGEgdG9rZW4iICUgKGZpbGUsbGluZSxwcm9kbmFtZSkpCisgICAgICAgIGlmIHByb2RuYW1lID09ICdlcnJvcic6CisgICAgICAgICAgICByYWlzZSBHcmFtbWFyRXJyb3IoIiVzOiVkOiBJbGxlZ2FsIHJ1bGUgbmFtZSAnJXMnLiBlcnJvciBpcyBhIHJlc2VydmVkIHdvcmQiICUgKGZpbGUsbGluZSxwcm9kbmFtZSkpCisgICAgICAgIGlmIG5vdCBfaXNfaWRlbnRpZmllci5tYXRjaChwcm9kbmFtZSk6CisgICAgICAgICAgICByYWlzZSBHcmFtbWFyRXJyb3IoIiVzOiVkOiBJbGxlZ2FsIHJ1bGUgbmFtZSAnJXMnIiAlIChmaWxlLGxpbmUscHJvZG5hbWUpKQorCisgICAgICAgICMgTG9vayBmb3IgbGl0ZXJhbCB0b2tlbnMgCisgICAgICAgIGZvciBuLHMgaW4gZW51bWVyYXRlKHN5bXMpOgorICAgICAgICAgICAgaWYgc1swXSBpbiAiJ1wiIjoKKyAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgYyA9IGV2YWwocykKKyAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4oYykgPiAxKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgR3JhbW1hckVycm9yKCIlczolZDogTGl0ZXJhbCB0b2tlbiAlcyBpbiBydWxlICclcycgbWF5IG9ubHkgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIiAlIChmaWxlLGxpbmUscywgcHJvZG5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGMgaW4gc2VsZi5UZXJtaW5hbHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuVGVybWluYWxzW2NdID0gW10KKyAgICAgICAgICAgICAgICAgICAgIHN5bXNbbl0gPSBjCisgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBpZiBub3QgX2lzX2lkZW50aWZpZXIubWF0Y2gocykgYW5kIHMgIT0gJyVwcmVjJzoKKyAgICAgICAgICAgICAgICByYWlzZSBHcmFtbWFyRXJyb3IoIiVzOiVkOiBJbGxlZ2FsIG5hbWUgJyVzJyBpbiBydWxlICclcyciICUgKGZpbGUsbGluZSxzLCBwcm9kbmFtZSkpCisgICAgICAgIAorICAgICAgICAjIERldGVybWluZSB0aGUgcHJlY2VkZW5jZSBsZXZlbAorICAgICAgICBpZiAnJXByZWMnIGluIHN5bXM6CisgICAgICAgICAgICBpZiBzeW1zWy0xXSA9PSAnJXByZWMnOgorICAgICAgICAgICAgICAgIHJhaXNlIEdyYW1tYXJFcnJvcigiJXM6JWQ6IFN5bnRheCBlcnJvci4gTm90aGluZyBmb2xsb3dzICUlcHJlYyIgJSAoZmlsZSxsaW5lKSkKKyAgICAgICAgICAgIGlmIHN5bXNbLTJdICE9ICclcHJlYyc6CisgICAgICAgICAgICAgICAgcmFpc2UgR3JhbW1hckVycm9yKCIlczolZDogU3ludGF4IGVycm9yLiAlJXByZWMgY2FuIG9ubHkgYXBwZWFyIGF0IHRoZSBlbmQgb2YgYSBncmFtbWFyIHJ1bGUiICUgKGZpbGUsbGluZSkpCisgICAgICAgICAgICBwcmVjbmFtZSA9IHN5bXNbLTFdCisgICAgICAgICAgICBwcm9kcHJlYyA9IHNlbGYuUHJlY2VkZW5jZS5nZXQocHJlY25hbWUsTm9uZSkKKyAgICAgICAgICAgIGlmIG5vdCBwcm9kcHJlYzoKKyAgICAgICAgICAgICAgICByYWlzZSBHcmFtbWFyRXJyb3IoIiVzOiVkOiBOb3RoaW5nIGtub3duIGFib3V0IHRoZSBwcmVjZWRlbmNlIG9mICclcyciICUgKGZpbGUsbGluZSxwcmVjbmFtZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuVXNlZFByZWNlZGVuY2VbcHJlY25hbWVdID0gMQorICAgICAgICAgICAgZGVsIHN5bXNbLTI6XSAgICAgIyBEcm9wICVwcmVjIGZyb20gdGhlIHJ1bGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgSWYgbm8gJXByZWMsIHByZWNlZGVuY2UgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcmlnaHRtb3N0IHRlcm1pbmFsIHN5bWJvbAorICAgICAgICAgICAgcHJlY25hbWUgPSByaWdodG1vc3RfdGVybWluYWwoc3ltcyxzZWxmLlRlcm1pbmFscykKKyAgICAgICAgICAgIHByb2RwcmVjID0gc2VsZi5QcmVjZWRlbmNlLmdldChwcmVjbmFtZSwoJ3JpZ2h0JywwKSkgCisgICAgICAgICAgICAKKyAgICAgICAgIyBTZWUgaWYgdGhlIHJ1bGUgaXMgYWxyZWFkeSBpbiB0aGUgcnVsZW1hcAorICAgICAgICBtYXAgPSAiJXMgLT4gJXMiICUgKHByb2RuYW1lLHN5bXMpCisgICAgICAgIGlmIG1hcCBpbiBzZWxmLlByb2RtYXA6CisgICAgICAgICAgICBtID0gc2VsZi5Qcm9kbWFwW21hcF0KKyAgICAgICAgICAgIHJhaXNlIEdyYW1tYXJFcnJvcigiJXM6JWQ6IER1cGxpY2F0ZSBydWxlICVzLiAiICUgKGZpbGUsbGluZSwgbSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmV2aW91cyBkZWZpbml0aW9uIGF0ICVzOiVkIiAlIChtLmZpbGUsIG0ubGluZSkpCisKKyAgICAgICAgIyBGcm9tIHRoaXMgcG9pbnQgb24sIGV2ZXJ5dGhpbmcgaXMgdmFsaWQuICBDcmVhdGUgYSBuZXcgUHJvZHVjdGlvbiBpbnN0YW5jZQorICAgICAgICBwbnVtYmVyICA9IGxlbihzZWxmLlByb2R1Y3Rpb25zKQorICAgICAgICBpZiBub3QgcHJvZG5hbWUgaW4gc2VsZi5Ob250ZXJtaW5hbHM6CisgICAgICAgICAgICBzZWxmLk5vbnRlcm1pbmFsc1twcm9kbmFtZV0gPSBbIF0KKworICAgICAgICAjIEFkZCB0aGUgcHJvZHVjdGlvbiBudW1iZXIgdG8gVGVybWluYWxzIGFuZCBOb250ZXJtaW5hbHMKKyAgICAgICAgZm9yIHQgaW4gc3ltczoKKyAgICAgICAgICAgIGlmIHQgaW4gc2VsZi5UZXJtaW5hbHM6CisgICAgICAgICAgICAgICAgc2VsZi5UZXJtaW5hbHNbdF0uYXBwZW5kKHBudW1iZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG5vdCB0IGluIHNlbGYuTm9udGVybWluYWxzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLk5vbnRlcm1pbmFsc1t0XSA9IFsgXQorICAgICAgICAgICAgICAgIHNlbGYuTm9udGVybWluYWxzW3RdLmFwcGVuZChwbnVtYmVyKQorCisgICAgICAgICMgQ3JlYXRlIGEgcHJvZHVjdGlvbiBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0IG9mIHByb2R1Y3Rpb25zCisgICAgICAgIHAgPSBQcm9kdWN0aW9uKHBudW1iZXIscHJvZG5hbWUsc3ltcyxwcm9kcHJlYyxmdW5jLGZpbGUsbGluZSkKKyAgICAgICAgc2VsZi5Qcm9kdWN0aW9ucy5hcHBlbmQocCkKKyAgICAgICAgc2VsZi5Qcm9kbWFwW21hcF0gPSBwCisKKyAgICAgICAgIyBBZGQgdG8gdGhlIGdsb2JhbCBwcm9kdWN0aW9ucyBsaXN0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuUHJvZG5hbWVzW3Byb2RuYW1lXS5hcHBlbmQocCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5Qcm9kbmFtZXNbcHJvZG5hbWVdID0gWyBwIF0KKyAgICAgICAgcmV0dXJuIDAKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHNldF9zdGFydCgpCisgICAgIworICAgICMgU2V0cyB0aGUgc3RhcnRpbmcgc3ltYm9sIGFuZCBjcmVhdGVzIHRoZSBhdWdtZW50ZWQgZ3JhbW1hci4gIFByb2R1Y3Rpb24gCisgICAgIyBydWxlIDAgaXMgUycgLT4gc3RhcnQgd2hlcmUgc3RhcnQgaXMgdGhlIHN0YXJ0IHN5bWJvbC4KKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgc2V0X3N0YXJ0KHNlbGYsc3RhcnQ9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBzdGFydDoKKyAgICAgICAgICAgIHN0YXJ0ID0gc2VsZi5Qcm9kdWN0aW9uc1sxXS5uYW1lCisgICAgICAgIGlmIHN0YXJ0IG5vdCBpbiBzZWxmLk5vbnRlcm1pbmFsczoKKyAgICAgICAgICAgIHJhaXNlIEdyYW1tYXJFcnJvcigic3RhcnQgc3ltYm9sICVzIHVuZGVmaW5lZCIgJSBzdGFydCkKKyAgICAgICAgc2VsZi5Qcm9kdWN0aW9uc1swXSA9IFByb2R1Y3Rpb24oMCwiUyciLFtzdGFydF0pCisgICAgICAgIHNlbGYuTm9udGVybWluYWxzW3N0YXJ0XS5hcHBlbmQoMCkKKyAgICAgICAgc2VsZi5TdGFydCA9IHN0YXJ0CisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBmaW5kX3VucmVhY2hhYmxlKCkKKyAgICAjCisgICAgIyBGaW5kIGFsbCBvZiB0aGUgbm9udGVybWluYWwgc3ltYm9scyB0aGF0IGNhbid0IGJlIHJlYWNoZWQgZnJvbSB0aGUgc3RhcnRpbmcKKyAgICAjIHN5bWJvbC4gIFJldHVybnMgYSBsaXN0IG9mIG5vbnRlcm1pbmFscyB0aGF0IGNhbid0IGJlIHJlYWNoZWQuCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIGZpbmRfdW5yZWFjaGFibGUoc2VsZik6CisgICAgICAgIAorICAgICAgICAjIE1hcmsgYWxsIHN5bWJvbHMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gYSBzeW1ib2wgcworICAgICAgICBkZWYgbWFya19yZWFjaGFibGVfZnJvbShzKToKKyAgICAgICAgICAgIGlmIHJlYWNoYWJsZVtzXToKKyAgICAgICAgICAgICAgICAjIFdlJ3ZlIGFscmVhZHkgcmVhY2hlZCBzeW1ib2wgcy4KKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHJlYWNoYWJsZVtzXSA9IDEKKyAgICAgICAgICAgIGZvciBwIGluIHNlbGYuUHJvZG5hbWVzLmdldChzLFtdKToKKyAgICAgICAgICAgICAgICBmb3IgciBpbiBwLnByb2Q6CisgICAgICAgICAgICAgICAgICAgIG1hcmtfcmVhY2hhYmxlX2Zyb20ocikKKworICAgICAgICByZWFjaGFibGUgICA9IHsgfQorICAgICAgICBmb3IgcyBpbiBsaXN0KHNlbGYuVGVybWluYWxzKSArIGxpc3Qoc2VsZi5Ob250ZXJtaW5hbHMpOgorICAgICAgICAgICAgcmVhY2hhYmxlW3NdID0gMAorCisgICAgICAgIG1hcmtfcmVhY2hhYmxlX2Zyb20oIHNlbGYuUHJvZHVjdGlvbnNbMF0ucHJvZFswXSApCisKKyAgICAgICAgcmV0dXJuIFtzIGZvciBzIGluIGxpc3Qoc2VsZi5Ob250ZXJtaW5hbHMpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVhY2hhYmxlW3NdXQorICAgIAorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGluZmluaXRlX2N5Y2xlcygpCisgICAgIworICAgICMgVGhpcyBmdW5jdGlvbiBsb29rcyBhdCB0aGUgdmFyaW91cyBwYXJzaW5nIHJ1bGVzIGFuZCB0cmllcyB0byBkZXRlY3QKKyAgICAjIGluZmluaXRlIHJlY3Vyc2lvbiBjeWNsZXMgKGdyYW1tYXIgcnVsZXMgd2hlcmUgdGhlcmUgaXMgbm8gcG9zc2libGUgd2F5CisgICAgIyB0byBkZXJpdmUgYSBzdHJpbmcgb2Ygb25seSB0ZXJtaW5hbHMpLgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBpbmZpbml0ZV9jeWNsZXMoc2VsZik6CisgICAgICAgIHRlcm1pbmF0ZXMgPSB7fQorCisgICAgICAgICMgVGVybWluYWxzOgorICAgICAgICBmb3IgdCBpbiBzZWxmLlRlcm1pbmFsczoKKyAgICAgICAgICAgIHRlcm1pbmF0ZXNbdF0gPSAxCisKKyAgICAgICAgdGVybWluYXRlc1snJGVuZCddID0gMQorCisgICAgICAgICMgTm9udGVybWluYWxzOgorCisgICAgICAgICMgSW5pdGlhbGl6ZSB0byBmYWxzZToKKyAgICAgICAgZm9yIG4gaW4gc2VsZi5Ob250ZXJtaW5hbHM6CisgICAgICAgICAgICB0ZXJtaW5hdGVzW25dID0gMAorCisgICAgICAgICMgVGhlbiBwcm9wYWdhdGUgdGVybWluYXRpb24gdW50aWwgbm8gY2hhbmdlOgorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgc29tZV9jaGFuZ2UgPSAwCisgICAgICAgICAgICBmb3IgKG4scGwpIGluIHNlbGYuUHJvZG5hbWVzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgIyBOb250ZXJtaW5hbCBuIHRlcm1pbmF0ZXMgaWZmIGFueSBvZiBpdHMgcHJvZHVjdGlvbnMgdGVybWluYXRlcy4KKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBwbDoKKyAgICAgICAgICAgICAgICAgICAgIyBQcm9kdWN0aW9uIHAgdGVybWluYXRlcyBpZmYgYWxsIG9mIGl0cyByaHMgc3ltYm9scyB0ZXJtaW5hdGUuCisgICAgICAgICAgICAgICAgICAgIGZvciBzIGluIHAucHJvZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCB0ZXJtaW5hdGVzW3NdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIHN5bWJvbCBzIGRvZXMgbm90IHRlcm1pbmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNvIHByb2R1Y3Rpb24gcCBkb2VzIG5vdCB0ZXJtaW5hdGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF90ZXJtaW5hdGVzID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGRpZG4ndCBicmVhayBmcm9tIHRoZSBsb29wLAorICAgICAgICAgICAgICAgICAgICAgICAgIyBzbyBldmVyeSBzeW1ib2wgcyB0ZXJtaW5hdGVzCisgICAgICAgICAgICAgICAgICAgICAgICAjIHNvIHByb2R1Y3Rpb24gcCB0ZXJtaW5hdGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgcF90ZXJtaW5hdGVzID0gMQorCisgICAgICAgICAgICAgICAgICAgIGlmIHBfdGVybWluYXRlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgc3ltYm9sIG4gdGVybWluYXRlcyEKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCB0ZXJtaW5hdGVzW25dOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZXNbbl0gPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29tZV9jaGFuZ2UgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAjIERvbid0IG5lZWQgdG8gY29uc2lkZXIgYW55IG1vcmUgcHJvZHVjdGlvbnMgZm9yIHRoaXMgbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIG5vdCBzb21lX2NoYW5nZToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGluZmluaXRlID0gW10KKyAgICAgICAgZm9yIChzLHRlcm0pIGluIHRlcm1pbmF0ZXMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5vdCB0ZXJtOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzIGluIHNlbGYuUHJvZG5hbWVzIGFuZCBub3QgcyBpbiBzZWxmLlRlcm1pbmFscyBhbmQgcyAhPSAnZXJyb3InOgorICAgICAgICAgICAgICAgICAgICAjIHMgaXMgdXNlZC1idXQtbm90LWRlZmluZWQsIGFuZCB3ZSd2ZSBhbHJlYWR5IHdhcm5lZCBvZiB0aGF0LAorICAgICAgICAgICAgICAgICAgICAjIHNvIGl0IHdvdWxkIGJlIG92ZXJraWxsIHRvIHNheSB0aGF0IGl0J3MgYWxzbyBub24tdGVybWluYXRpbmcuCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpbmZpbml0ZS5hcHBlbmQocykKKworICAgICAgICByZXR1cm4gaW5maW5pdGUKKworCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgdW5kZWZpbmVkX3N5bWJvbHMoKQorICAgICMKKyAgICAjIEZpbmQgYWxsIHN5bWJvbHMgdGhhdCB3ZXJlIHVzZWQgdGhlIGdyYW1tYXIsIGJ1dCBub3QgZGVmaW5lZCBhcyB0b2tlbnMgb3IKKyAgICAjIGdyYW1tYXIgcnVsZXMuICBSZXR1cm5zIGEgbGlzdCBvZiB0dXBsZXMgKHN5bSwgcHJvZCkgd2hlcmUgc3ltIGluIHRoZSBzeW1ib2wKKyAgICAjIGFuZCBwcm9kIGlzIHRoZSBwcm9kdWN0aW9uIHdoZXJlIHRoZSBzeW1ib2wgd2FzIHVzZWQuIAorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgdW5kZWZpbmVkX3N5bWJvbHMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIGZvciBwIGluIHNlbGYuUHJvZHVjdGlvbnM6CisgICAgICAgICAgICBpZiBub3QgcDogY29udGludWUKKworICAgICAgICAgICAgZm9yIHMgaW4gcC5wcm9kOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzIGluIHNlbGYuUHJvZG5hbWVzIGFuZCBub3QgcyBpbiBzZWxmLlRlcm1pbmFscyBhbmQgcyAhPSAnZXJyb3InOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKChzLHApKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyB1bnVzZWRfdGVybWluYWxzKCkKKyAgICAjCisgICAgIyBGaW5kIGFsbCB0ZXJtaW5hbHMgdGhhdCB3ZXJlIGRlZmluZWQsIGJ1dCBub3QgdXNlZCBieSB0aGUgZ3JhbW1hci4gIFJldHVybnMKKyAgICAjIGEgbGlzdCBvZiBhbGwgc3ltYm9scy4KKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZGVmIHVudXNlZF90ZXJtaW5hbHMoc2VsZik6CisgICAgICAgIHVudXNlZF90b2sgPSBbXQorICAgICAgICBmb3Igcyx2IGluIHNlbGYuVGVybWluYWxzLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBzICE9ICdlcnJvcicgYW5kIG5vdCB2OgorICAgICAgICAgICAgICAgIHVudXNlZF90b2suYXBwZW5kKHMpCisKKyAgICAgICAgcmV0dXJuIHVudXNlZF90b2sKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyB1bnVzZWRfcnVsZXMoKQorICAgICMKKyAgICAjIEZpbmQgYWxsIGdyYW1tYXIgcnVsZXMgdGhhdCB3ZXJlIGRlZmluZWQsICBidXQgbm90IHVzZWQgKG1heWJlIG5vdCByZWFjaGFibGUpCisgICAgIyBSZXR1cm5zIGEgbGlzdCBvZiBwcm9kdWN0aW9ucy4KKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHVudXNlZF9ydWxlcyhzZWxmKToKKyAgICAgICAgdW51c2VkX3Byb2QgPSBbXQorICAgICAgICBmb3Igcyx2IGluIHNlbGYuTm9udGVybWluYWxzLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBub3QgdjoKKyAgICAgICAgICAgICAgICBwID0gc2VsZi5Qcm9kbmFtZXNbc11bMF0KKyAgICAgICAgICAgICAgICB1bnVzZWRfcHJvZC5hcHBlbmQocCkKKyAgICAgICAgcmV0dXJuIHVudXNlZF9wcm9kCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyB1bnVzZWRfcHJlY2VkZW5jZSgpCisgICAgIworICAgICMgUmV0dXJucyBhIGxpc3Qgb2YgdHVwbGVzICh0ZXJtLHByZWNlZGVuY2UpIGNvcnJlc3BvbmRpbmcgdG8gcHJlY2VkZW5jZQorICAgICMgcnVsZXMgdGhhdCB3ZXJlIG5ldmVyIHVzZWQgYnkgdGhlIGdyYW1tYXIuICB0ZXJtIGlzIHRoZSBuYW1lIG9mIHRoZSB0ZXJtaW5hbAorICAgICMgb24gd2hpY2ggcHJlY2VkZW5jZSB3YXMgYXBwbGllZCBhbmQgcHJlY2VkZW5jZSBpcyBhIHN0cmluZyBzdWNoIGFzICdsZWZ0JyBvcgorICAgICMgJ3JpZ2h0JyBjb3JyZXNwb25kaW5nIHRvIHRoZSB0eXBlIG9mIHByZWNlZGVuY2UuIAorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiB1bnVzZWRfcHJlY2VkZW5jZShzZWxmKToKKyAgICAgICAgdW51c2VkID0gW10KKyAgICAgICAgZm9yIHRlcm1uYW1lIGluIHNlbGYuUHJlY2VkZW5jZToKKyAgICAgICAgICAgIGlmIG5vdCAodGVybW5hbWUgaW4gc2VsZi5UZXJtaW5hbHMgb3IgdGVybW5hbWUgaW4gc2VsZi5Vc2VkUHJlY2VkZW5jZSk6CisgICAgICAgICAgICAgICAgdW51c2VkLmFwcGVuZCgodGVybW5hbWUsc2VsZi5QcmVjZWRlbmNlW3Rlcm1uYW1lXVswXSkpCisgICAgICAgICAgICAgICAgCisgICAgICAgIHJldHVybiB1bnVzZWQKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgX2ZpcnN0KCkKKyAgICAjCisgICAgIyBDb21wdXRlIHRoZSB2YWx1ZSBvZiBGSVJTVDEoYmV0YSkgd2hlcmUgYmV0YSBpcyBhIHR1cGxlIG9mIHN5bWJvbHMuCisgICAgIworICAgICMgRHVyaW5nIGV4ZWN1dGlvbiBvZiBjb21wdXRlX2ZpcnN0MSwgdGhlIHJlc3VsdCBtYXkgYmUgaW5jb21wbGV0ZS4KKyAgICAjIEFmdGVyd2FyZCAoZS5nLiwgd2hlbiBjYWxsZWQgZnJvbSBjb21wdXRlX2ZvbGxvdygpKSwgaXQgd2lsbCBiZSBjb21wbGV0ZS4KKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgX2ZpcnN0KHNlbGYsYmV0YSk6CisKKyAgICAgICAgIyBXZSBhcmUgY29tcHV0aW5nIEZpcnN0KHgxLHgyLHgzLC4uLix4bikKKyAgICAgICAgcmVzdWx0ID0gWyBdCisgICAgICAgIGZvciB4IGluIGJldGE6CisgICAgICAgICAgICB4X3Byb2R1Y2VzX2VtcHR5ID0gMAorCisgICAgICAgICAgICAjIEFkZCBhbGwgdGhlIG5vbi08ZW1wdHk+IHN5bWJvbHMgb2YgRmlyc3RbeF0gdG8gdGhlIHJlc3VsdC4KKyAgICAgICAgICAgIGZvciBmIGluIHNlbGYuRmlyc3RbeF06CisgICAgICAgICAgICAgICAgaWYgZiA9PSAnPGVtcHR5Pic6CisgICAgICAgICAgICAgICAgICAgIHhfcHJvZHVjZXNfZW1wdHkgPSAxCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZiBub3QgaW4gcmVzdWx0OiByZXN1bHQuYXBwZW5kKGYpCisKKyAgICAgICAgICAgIGlmIHhfcHJvZHVjZXNfZW1wdHk6CisgICAgICAgICAgICAgICAgIyBXZSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBuZXh0IHggaW4gYmV0YSwKKyAgICAgICAgICAgICAgICAjIGkuZS4gc3RheSBpbiB0aGUgbG9vcC4KKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgV2UgZG9uJ3QgaGF2ZSB0byBjb25zaWRlciBhbnkgZnVydGhlciBzeW1ib2xzIGluIGJldGEuCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVGhlcmUgd2FzIG5vICdicmVhaycgZnJvbSB0aGUgbG9vcCwKKyAgICAgICAgICAgICMgc28geF9wcm9kdWNlc19lbXB0eSB3YXMgdHJ1ZSBmb3IgYWxsIHggaW4gYmV0YSwKKyAgICAgICAgICAgICMgc28gYmV0YSBwcm9kdWNlcyBlbXB0eSBhcyB3ZWxsLgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnPGVtcHR5PicpCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBjb21wdXRlX2ZpcnN0KCkKKyAgICAjCisgICAgIyBDb21wdXRlIHRoZSB2YWx1ZSBvZiBGSVJTVDEoWCkgZm9yIGFsbCBzeW1ib2xzCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZGVmIGNvbXB1dGVfZmlyc3Qoc2VsZik6CisgICAgICAgIGlmIHNlbGYuRmlyc3Q6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5GaXJzdAorCisgICAgICAgICMgVGVybWluYWxzOgorICAgICAgICBmb3IgdCBpbiBzZWxmLlRlcm1pbmFsczoKKyAgICAgICAgICAgIHNlbGYuRmlyc3RbdF0gPSBbdF0KKworICAgICAgICBzZWxmLkZpcnN0WyckZW5kJ10gPSBbJyRlbmQnXQorCisgICAgICAgICMgTm9udGVybWluYWxzOgorCisgICAgICAgICMgSW5pdGlhbGl6ZSB0byB0aGUgZW1wdHkgc2V0OgorICAgICAgICBmb3IgbiBpbiBzZWxmLk5vbnRlcm1pbmFsczoKKyAgICAgICAgICAgIHNlbGYuRmlyc3Rbbl0gPSBbXQorCisgICAgICAgICMgVGhlbiBwcm9wYWdhdGUgc3ltYm9scyB1bnRpbCBubyBjaGFuZ2U6CisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBzb21lX2NoYW5nZSA9IDAKKyAgICAgICAgICAgIGZvciBuIGluIHNlbGYuTm9udGVybWluYWxzOgorICAgICAgICAgICAgICAgIGZvciBwIGluIHNlbGYuUHJvZG5hbWVzW25dOgorICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBzZWxmLl9maXJzdChwLnByb2QpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZiBub3QgaW4gc2VsZi5GaXJzdFtuXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkZpcnN0W25dLmFwcGVuZCggZiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29tZV9jaGFuZ2UgPSAxCisgICAgICAgICAgICBpZiBub3Qgc29tZV9jaGFuZ2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBzZWxmLkZpcnN0CisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgY29tcHV0ZV9mb2xsb3coKQorICAgICMKKyAgICAjIENvbXB1dGVzIGFsbCBvZiB0aGUgZm9sbG93IHNldHMgZm9yIGV2ZXJ5IG5vbi10ZXJtaW5hbCBzeW1ib2wuICBUaGUKKyAgICAjIGZvbGxvdyBzZXQgaXMgdGhlIHNldCBvZiBhbGwgc3ltYm9scyB0aGF0IG1pZ2h0IGZvbGxvdyBhIGdpdmVuCisgICAgIyBub24tdGVybWluYWwuICBTZWUgdGhlIERyYWdvbiBib29rLCAybmQgRWQuIHAuIDE4OS4KKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiBjb21wdXRlX2ZvbGxvdyhzZWxmLHN0YXJ0PU5vbmUpOgorICAgICAgICAjIElmIGFscmVhZHkgY29tcHV0ZWQsIHJldHVybiB0aGUgcmVzdWx0CisgICAgICAgIGlmIHNlbGYuRm9sbG93OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuRm9sbG93CisKKyAgICAgICAgIyBJZiBmaXJzdCBzZXRzIG5vdCBjb21wdXRlZCB5ZXQsIGRvIHRoYXQgZmlyc3QuCisgICAgICAgIGlmIG5vdCBzZWxmLkZpcnN0OgorICAgICAgICAgICAgc2VsZi5jb21wdXRlX2ZpcnN0KCkKKworICAgICAgICAjIEFkZCAnJGVuZCcgdG8gdGhlIGZvbGxvdyBsaXN0IG9mIHRoZSBzdGFydCBzeW1ib2wKKyAgICAgICAgZm9yIGsgaW4gc2VsZi5Ob250ZXJtaW5hbHM6CisgICAgICAgICAgICBzZWxmLkZvbGxvd1trXSA9IFsgXQorCisgICAgICAgIGlmIG5vdCBzdGFydDoKKyAgICAgICAgICAgIHN0YXJ0ID0gc2VsZi5Qcm9kdWN0aW9uc1sxXS5uYW1lCisKKyAgICAgICAgc2VsZi5Gb2xsb3dbc3RhcnRdID0gWyAnJGVuZCcgXQorCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBkaWRhZGQgPSAwCisgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLlByb2R1Y3Rpb25zWzE6XToKKyAgICAgICAgICAgICAgICAjIEhlcmUgaXMgdGhlIHByb2R1Y3Rpb24gc2V0CisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHAucHJvZCkpOgorICAgICAgICAgICAgICAgICAgICBCID0gcC5wcm9kW2ldCisgICAgICAgICAgICAgICAgICAgIGlmIEIgaW4gc2VsZi5Ob250ZXJtaW5hbHM6CisgICAgICAgICAgICAgICAgICAgICAgICAjIE9rYXkuIFdlIGdvdCBhIG5vbi10ZXJtaW5hbCBpbiBhIHByb2R1Y3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZzdCA9IHNlbGYuX2ZpcnN0KHAucHJvZFtpKzE6XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc2VtcHR5ID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gZnN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGYgIT0gJzxlbXB0eT4nIGFuZCBmIG5vdCBpbiBzZWxmLkZvbGxvd1tCXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5Gb2xsb3dbQl0uYXBwZW5kKGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZGFkZCA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmID09ICc8ZW1wdHk+JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzZW1wdHkgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNlbXB0eSBvciBpID09IChsZW4ocC5wcm9kKS0xKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBlbGVtZW50cyBvZiBmb2xsb3coYSkgdG8gZm9sbG93KGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gc2VsZi5Gb2xsb3dbcC5uYW1lXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZiBub3QgaW4gc2VsZi5Gb2xsb3dbQl06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkZvbGxvd1tCXS5hcHBlbmQoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZGFkZCA9IDEKKyAgICAgICAgICAgIGlmIG5vdCBkaWRhZGQ6IGJyZWFrCisgICAgICAgIHJldHVybiBzZWxmLkZvbGxvdworCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBidWlsZF9scml0ZW1zKCkKKyAgICAjCisgICAgIyBUaGlzIGZ1bmN0aW9uIHdhbGtzIHRoZSBsaXN0IG9mIHByb2R1Y3Rpb25zIGFuZCBidWlsZHMgYSBjb21wbGV0ZSBzZXQgb2YgdGhlCisgICAgIyBMUiBpdGVtcy4gIFRoZSBMUiBpdGVtcyBhcmUgc3RvcmVkIGluIHR3byB3YXlzOiAgRmlyc3QsIHRoZXkgYXJlIHVuaXF1ZWx5CisgICAgIyBudW1iZXJlZCBhbmQgcGxhY2VkIGluIHRoZSBsaXN0IF9scml0ZW1zLiAgU2Vjb25kLCBhIGxpbmtlZCBsaXN0IG9mIExSIGl0ZW1zCisgICAgIyBpcyBidWlsdCBmb3IgZWFjaCBwcm9kdWN0aW9uLiAgRm9yIGV4YW1wbGU6CisgICAgIworICAgICMgICBFIC0+IEUgUExVUyBFCisgICAgIworICAgICMgQ3JlYXRlcyB0aGUgbGlzdAorICAgICMKKyAgICAjICBbRSAtPiAuIEUgUExVUyBFLCBFIC0+IEUgLiBQTFVTIEUsIEUgLT4gRSBQTFVTIC4gRSwgRSAtPiBFIFBMVVMgRSAuIF0KKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgYnVpbGRfbHJpdGVtcyhzZWxmKToKKyAgICAgICAgZm9yIHAgaW4gc2VsZi5Qcm9kdWN0aW9uczoKKyAgICAgICAgICAgIGxhc3RscmkgPSBwCisgICAgICAgICAgICBpID0gMAorICAgICAgICAgICAgbHJfaXRlbXMgPSBbXQorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBpZiBpID4gbGVuKHApOgorICAgICAgICAgICAgICAgICAgICBscmkgPSBOb25lCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbHJpID0gTFJJdGVtKHAsaSkKKyAgICAgICAgICAgICAgICAgICAgIyBQcmVjb21wdXRlIHRoZSBsaXN0IG9mIHByb2R1Y3Rpb25zIGltbWVkaWF0ZWx5IGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBscmkubHJfYWZ0ZXIgPSBzZWxmLlByb2RuYW1lc1tscmkucHJvZFtpKzFdXQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgKEluZGV4RXJyb3IsS2V5RXJyb3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgbHJpLmxyX2FmdGVyID0gW10KKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgbHJpLmxyX2JlZm9yZSA9IGxyaS5wcm9kW2ktMV0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBscmkubHJfYmVmb3JlID0gTm9uZQorCisgICAgICAgICAgICAgICAgbGFzdGxyaS5scl9uZXh0ID0gbHJpCisgICAgICAgICAgICAgICAgaWYgbm90IGxyaTogYnJlYWsKKyAgICAgICAgICAgICAgICBscl9pdGVtcy5hcHBlbmQobHJpKQorICAgICAgICAgICAgICAgIGxhc3RscmkgPSBscmkKKyAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgICAgIHAubHJfaXRlbXMgPSBscl9pdGVtcworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IENsYXNzIExSVGFibGUgPT0KKyMKKyMgVGhpcyBiYXNpYyBjbGFzcyByZXByZXNlbnRzIGEgYmFzaWMgdGFibGUgb2YgTFIgcGFyc2luZyBpbmZvcm1hdGlvbi4gIAorIyBNZXRob2RzIGZvciBnZW5lcmF0aW5nIHRoZSB0YWJsZXMgYXJlIG5vdCBkZWZpbmVkIGhlcmUuICBUaGV5IGFyZSBkZWZpbmVkCisjIGluIHRoZSBkZXJpdmVkIGNsYXNzIExSR2VuZXJhdGVkVGFibGUuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFZlcnNpb25FcnJvcihZYWNjRXJyb3IpOiBwYXNzCisKK2NsYXNzIExSVGFibGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYubHJfYWN0aW9uID0gTm9uZQorICAgICAgICBzZWxmLmxyX2dvdG8gPSBOb25lCisgICAgICAgIHNlbGYubHJfcHJvZHVjdGlvbnMgPSBOb25lCisgICAgICAgIHNlbGYubHJfbWV0aG9kID0gTm9uZQorCisgICAgZGVmIHJlYWRfdGFibGUoc2VsZixtb2R1bGUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG1vZHVsZSx0eXBlcy5Nb2R1bGVUeXBlKToKKyAgICAgICAgICAgIHBhcnNldGFiID0gbW9kdWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMzoKKyAgICAgICAgICAgICAgICBleGVjKCJpbXBvcnQgJXMgYXMgcGFyc2V0YWIiICUgbW9kdWxlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlbnYgPSB7IH0KKyAgICAgICAgICAgICAgICBleGVjKCJpbXBvcnQgJXMgYXMgcGFyc2V0YWIiICUgbW9kdWxlLCBlbnYsIGVudikKKyAgICAgICAgICAgICAgICBwYXJzZXRhYiA9IGVudlsncGFyc2V0YWInXQorCisgICAgICAgIGlmIHBhcnNldGFiLl90YWJ2ZXJzaW9uICE9IF9fdGFidmVyc2lvbl9fOgorICAgICAgICAgICAgcmFpc2UgVmVyc2lvbkVycm9yKCJ5YWNjIHRhYmxlIGZpbGUgdmVyc2lvbiBpcyBvdXQgb2YgZGF0ZSIpCisKKyAgICAgICAgc2VsZi5scl9hY3Rpb24gPSBwYXJzZXRhYi5fbHJfYWN0aW9uCisgICAgICAgIHNlbGYubHJfZ290byA9IHBhcnNldGFiLl9scl9nb3RvCisKKyAgICAgICAgc2VsZi5scl9wcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGZvciBwIGluIHBhcnNldGFiLl9scl9wcm9kdWN0aW9uczoKKyAgICAgICAgICAgIHNlbGYubHJfcHJvZHVjdGlvbnMuYXBwZW5kKE1pbmlQcm9kdWN0aW9uKCpwKSkKKworICAgICAgICBzZWxmLmxyX21ldGhvZCA9IHBhcnNldGFiLl9scl9tZXRob2QKKyAgICAgICAgcmV0dXJuIHBhcnNldGFiLl9scl9zaWduYXR1cmUKKworICAgIGRlZiByZWFkX3BpY2tsZShzZWxmLGZpbGVuYW1lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIGltcG9ydCBwaWNrbGUKKworICAgICAgICBpbl9mID0gb3BlbihmaWxlbmFtZSwicmIiKQorCisgICAgICAgIHRhYnZlcnNpb24gPSBwaWNrbGUubG9hZChpbl9mKQorICAgICAgICBpZiB0YWJ2ZXJzaW9uICE9IF9fdGFidmVyc2lvbl9fOgorICAgICAgICAgICAgcmFpc2UgVmVyc2lvbkVycm9yKCJ5YWNjIHRhYmxlIGZpbGUgdmVyc2lvbiBpcyBvdXQgb2YgZGF0ZSIpCisgICAgICAgIHNlbGYubHJfbWV0aG9kID0gcGlja2xlLmxvYWQoaW5fZikKKyAgICAgICAgc2lnbmF0dXJlICAgICAgPSBwaWNrbGUubG9hZChpbl9mKQorICAgICAgICBzZWxmLmxyX2FjdGlvbiA9IHBpY2tsZS5sb2FkKGluX2YpCisgICAgICAgIHNlbGYubHJfZ290byAgID0gcGlja2xlLmxvYWQoaW5fZikKKyAgICAgICAgcHJvZHVjdGlvbnMgICAgPSBwaWNrbGUubG9hZChpbl9mKQorCisgICAgICAgIHNlbGYubHJfcHJvZHVjdGlvbnMgPSBbXQorICAgICAgICBmb3IgcCBpbiBwcm9kdWN0aW9uczoKKyAgICAgICAgICAgIHNlbGYubHJfcHJvZHVjdGlvbnMuYXBwZW5kKE1pbmlQcm9kdWN0aW9uKCpwKSkKKworICAgICAgICBpbl9mLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIHNpZ25hdHVyZQorCisgICAgIyBCaW5kIGFsbCBwcm9kdWN0aW9uIGZ1bmN0aW9uIG5hbWVzIHRvIGNhbGxhYmxlIG9iamVjdHMgaW4gcGRpY3QKKyAgICBkZWYgYmluZF9jYWxsYWJsZXMoc2VsZixwZGljdCk6CisgICAgICAgIGZvciBwIGluIHNlbGYubHJfcHJvZHVjdGlvbnM6CisgICAgICAgICAgICBwLmJpbmQocGRpY3QpCisgICAgCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09IExSIEdlbmVyYXRvciA9PT0KKyMKKyMgVGhlIGZvbGxvd2luZyBjbGFzc2VzIGFuZCBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gZ2VuZXJhdGUgTFIgcGFyc2luZyB0YWJsZXMgb24gCisjIGEgZ3JhbW1hci4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBkaWdyYXBoKCkKKyMgdHJhdmVyc2UoKQorIworIyBUaGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gY29tcHV0ZSBzZXQgdmFsdWVkIGZ1bmN0aW9ucworIyBvZiB0aGUgZm9ybToKKyMKKyMgICAgIEYoeCkgPSBGJyh4KSBVIFV7Rih5KSB8IHggUiB5fQorIworIyBUaGlzIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgdmFsdWVzIG9mIFJlYWQoKSBzZXRzIGFzIHdlbGwgYXMgRk9MTE9XIHNldHMKKyMgaW4gTEFMUigxKSBnZW5lcmF0aW9uLgorIworIyBJbnB1dHM6ICBYICAgIC0gQW4gaW5wdXQgc2V0CisjICAgICAgICAgIFIgICAgLSBBIHJlbGF0aW9uCisjICAgICAgICAgIEZQICAgLSBTZXQtdmFsdWVkIGZ1bmN0aW9uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgZGlncmFwaChYLFIsRlApOgorICAgIE4gPSB7IH0KKyAgICBmb3IgeCBpbiBYOgorICAgICAgIE5beF0gPSAwCisgICAgc3RhY2sgPSBbXQorICAgIEYgPSB7IH0KKyAgICBmb3IgeCBpbiBYOgorICAgICAgICBpZiBOW3hdID09IDA6IHRyYXZlcnNlKHgsTixzdGFjayxGLFgsUixGUCkKKyAgICByZXR1cm4gRgorCitkZWYgdHJhdmVyc2UoeCxOLHN0YWNrLEYsWCxSLEZQKToKKyAgICBzdGFjay5hcHBlbmQoeCkKKyAgICBkID0gbGVuKHN0YWNrKQorICAgIE5beF0gPSBkCisgICAgRlt4XSA9IEZQKHgpICAgICAgICAgICAgICMgRihYKSA8LSBGJyh4KQorCisgICAgcmVsID0gUih4KSAgICAgICAgICAgICAgICMgR2V0IHkncyByZWxhdGVkIHRvIHgKKyAgICBmb3IgeSBpbiByZWw6CisgICAgICAgIGlmIE5beV0gPT0gMDoKKyAgICAgICAgICAgICB0cmF2ZXJzZSh5LE4sc3RhY2ssRixYLFIsRlApCisgICAgICAgIE5beF0gPSBtaW4oTlt4XSxOW3ldKQorICAgICAgICBmb3IgYSBpbiBGLmdldCh5LFtdKToKKyAgICAgICAgICAgIGlmIGEgbm90IGluIEZbeF06IEZbeF0uYXBwZW5kKGEpCisgICAgaWYgTlt4XSA9PSBkOgorICAgICAgIE5bc3RhY2tbLTFdXSA9IE1BWElOVAorICAgICAgIEZbc3RhY2tbLTFdXSA9IEZbeF0KKyAgICAgICBlbGVtZW50ID0gc3RhY2sucG9wKCkKKyAgICAgICB3aGlsZSBlbGVtZW50ICE9IHg6CisgICAgICAgICAgIE5bc3RhY2tbLTFdXSA9IE1BWElOVAorICAgICAgICAgICBGW3N0YWNrWy0xXV0gPSBGW3hdCisgICAgICAgICAgIGVsZW1lbnQgPSBzdGFjay5wb3AoKQorCitjbGFzcyBMQUxSRXJyb3IoWWFjY0Vycm9yKTogcGFzcworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBMUkdlbmVyYXRlZFRhYmxlID09CisjCisjIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgTFIgdGFibGUgZ2VuZXJhdGlvbiBhbGdvcml0aG0uICBUaGVyZSBhcmUgbm8KKyMgcHVibGljIG1ldGhvZHMgZXhjZXB0IGZvciB3cml0ZSgpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIExSR2VuZXJhdGVkVGFibGUoTFJUYWJsZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsZ3JhbW1hcixtZXRob2Q9J0xBTFInLGxvZz1Ob25lKToKKyAgICAgICAgaWYgbWV0aG9kIG5vdCBpbiBbJ1NMUicsJ0xBTFInXToKKyAgICAgICAgICAgIHJhaXNlIExBTFJFcnJvcigiVW5zdXBwb3J0ZWQgbWV0aG9kICVzIiAlIG1ldGhvZCkKKworICAgICAgICBzZWxmLmdyYW1tYXIgPSBncmFtbWFyCisgICAgICAgIHNlbGYubHJfbWV0aG9kID0gbWV0aG9kCisKKyAgICAgICAgIyBTZXQgdXAgdGhlIGxvZ2dlcgorICAgICAgICBpZiBub3QgbG9nOgorICAgICAgICAgICAgbG9nID0gTnVsbExvZ2dlcigpCisgICAgICAgIHNlbGYubG9nID0gbG9nCisKKyAgICAgICAgIyBJbnRlcm5hbCBhdHRyaWJ1dGVzCisgICAgICAgIHNlbGYubHJfYWN0aW9uICAgICA9IHt9ICAgICAgICAjIEFjdGlvbiB0YWJsZQorICAgICAgICBzZWxmLmxyX2dvdG8gICAgICAgPSB7fSAgICAgICAgIyBHb3RvIHRhYmxlCisgICAgICAgIHNlbGYubHJfcHJvZHVjdGlvbnMgID0gZ3JhbW1hci5Qcm9kdWN0aW9ucyAgICAjIENvcHkgb2YgZ3JhbW1hciBQcm9kdWN0aW9uIGFycmF5CisgICAgICAgIHNlbGYubHJfZ290b19jYWNoZSA9IHt9ICAgICAgICAjIENhY2hlIG9mIGNvbXB1dGVkIGdvdG9zCisgICAgICAgIHNlbGYubHIwX2NpZGhhc2ggICA9IHt9ICAgICAgICAjIENhY2hlIG9mIGNsb3N1cmVzCisKKyAgICAgICAgc2VsZi5fYWRkX2NvdW50ICAgID0gMCAgICAgICAgICMgSW50ZXJuYWwgY291bnRlciB1c2VkIHRvIGRldGVjdCBjeWNsZXMKKworICAgICAgICAjIERpYWdvbmlzdGljIGluZm9ybWF0aW9uIGZpbGxlZCBpbiBieSB0aGUgdGFibGUgZ2VuZXJhdG9yCisgICAgICAgIHNlbGYuc3JfY29uZmxpY3QgICA9IDAKKyAgICAgICAgc2VsZi5ycl9jb25mbGljdCAgID0gMAorICAgICAgICBzZWxmLmNvbmZsaWN0cyAgICAgPSBbXSAgICAgICAgIyBMaXN0IG9mIGNvbmZsaWN0cworCisgICAgICAgIHNlbGYuc3JfY29uZmxpY3RzICA9IFtdCisgICAgICAgIHNlbGYucnJfY29uZmxpY3RzICA9IFtdCisKKyAgICAgICAgIyBCdWlsZCB0aGUgdGFibGVzCisgICAgICAgIHNlbGYuZ3JhbW1hci5idWlsZF9scml0ZW1zKCkKKyAgICAgICAgc2VsZi5ncmFtbWFyLmNvbXB1dGVfZmlyc3QoKQorICAgICAgICBzZWxmLmdyYW1tYXIuY29tcHV0ZV9mb2xsb3coKQorICAgICAgICBzZWxmLmxyX3BhcnNlX3RhYmxlKCkKKworICAgICMgQ29tcHV0ZSB0aGUgTFIoMCkgY2xvc3VyZSBvcGVyYXRpb24gb24gSSwgd2hlcmUgSSBpcyBhIHNldCBvZiBMUigwKSBpdGVtcy4KKworICAgIGRlZiBscjBfY2xvc3VyZShzZWxmLEkpOgorICAgICAgICBzZWxmLl9hZGRfY291bnQgKz0gMQorCisgICAgICAgICMgQWRkIGV2ZXJ5dGhpbmcgaW4gSSB0byBKCisgICAgICAgIEogPSBJWzpdCisgICAgICAgIGRpZGFkZCA9IDEKKyAgICAgICAgd2hpbGUgZGlkYWRkOgorICAgICAgICAgICAgZGlkYWRkID0gMAorICAgICAgICAgICAgZm9yIGogaW4gSjoKKyAgICAgICAgICAgICAgICBmb3IgeCBpbiBqLmxyX2FmdGVyOgorICAgICAgICAgICAgICAgICAgICBpZiBnZXRhdHRyKHgsImxyMF9hZGRlZCIsMCkgPT0gc2VsZi5fYWRkX2NvdW50OiBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAjIEFkZCBCIC0tPiAuRyB0byBKCisgICAgICAgICAgICAgICAgICAgIEouYXBwZW5kKHgubHJfbmV4dCkKKyAgICAgICAgICAgICAgICAgICAgeC5scjBfYWRkZWQgPSBzZWxmLl9hZGRfY291bnQKKyAgICAgICAgICAgICAgICAgICAgZGlkYWRkID0gMQorCisgICAgICAgIHJldHVybiBKCisKKyAgICAjIENvbXB1dGUgdGhlIExSKDApIGdvdG8gZnVuY3Rpb24gZ290byhJLFgpIHdoZXJlIEkgaXMgYSBzZXQKKyAgICAjIG9mIExSKDApIGl0ZW1zIGFuZCBYIGlzIGEgZ3JhbW1hciBzeW1ib2wuICAgVGhpcyBmdW5jdGlvbiBpcyB3cml0dGVuCisgICAgIyBpbiBhIHdheSB0aGF0IGd1YXJhbnRlZXMgdW5pcXVlbmVzcyBvZiB0aGUgZ2VuZXJhdGVkIGdvdG8gc2V0cworICAgICMgKGkuZS4gdGhlIHNhbWUgZ290byBzZXQgd2lsbCBuZXZlciBiZSByZXR1cm5lZCBhcyB0d28gZGlmZmVyZW50IFB5dGhvbgorICAgICMgb2JqZWN0cykuICBXaXRoIHVuaXF1ZW5lc3MsIHdlIGNhbiBsYXRlciBkbyBmYXN0IHNldCBjb21wYXJpc29ucyB1c2luZworICAgICMgaWQob2JqKSBpbnN0ZWFkIG9mIGVsZW1lbnQtd2lzZSBjb21wYXJpc29uLgorCisgICAgZGVmIGxyMF9nb3RvKHNlbGYsSSx4KToKKyAgICAgICAgIyBGaXJzdCB3ZSBsb29rIGZvciBhIHByZXZpb3VzbHkgY2FjaGVkIGVudHJ5CisgICAgICAgIGcgPSBzZWxmLmxyX2dvdG9fY2FjaGUuZ2V0KChpZChJKSx4KSxOb25lKQorICAgICAgICBpZiBnOiByZXR1cm4gZworCisgICAgICAgICMgTm93IHdlIGdlbmVyYXRlIHRoZSBnb3RvIHNldCBpbiBhIHdheSB0aGF0IGd1YXJhbnRlZXMgdW5pcXVlbmVzcworICAgICAgICAjIG9mIHRoZSByZXN1bHQKKworICAgICAgICBzID0gc2VsZi5scl9nb3RvX2NhY2hlLmdldCh4LE5vbmUpCisgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgcyA9IHsgfQorICAgICAgICAgICAgc2VsZi5scl9nb3RvX2NhY2hlW3hdID0gcworCisgICAgICAgIGdzID0gWyBdCisgICAgICAgIGZvciBwIGluIEk6CisgICAgICAgICAgICBuID0gcC5scl9uZXh0CisgICAgICAgICAgICBpZiBuIGFuZCBuLmxyX2JlZm9yZSA9PSB4OgorICAgICAgICAgICAgICAgIHMxID0gcy5nZXQoaWQobiksTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgczE6CisgICAgICAgICAgICAgICAgICAgIHMxID0geyB9CisgICAgICAgICAgICAgICAgICAgIHNbaWQobildID0gczEKKyAgICAgICAgICAgICAgICBncy5hcHBlbmQobikKKyAgICAgICAgICAgICAgICBzID0gczEKKyAgICAgICAgZyA9IHMuZ2V0KCckZW5kJyxOb25lKQorICAgICAgICBpZiBub3QgZzoKKyAgICAgICAgICAgIGlmIGdzOgorICAgICAgICAgICAgICAgIGcgPSBzZWxmLmxyMF9jbG9zdXJlKGdzKQorICAgICAgICAgICAgICAgIHNbJyRlbmQnXSA9IGcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc1snJGVuZCddID0gZ3MKKyAgICAgICAgc2VsZi5scl9nb3RvX2NhY2hlWyhpZChJKSx4KV0gPSBnCisgICAgICAgIHJldHVybiBnCisKKyAgICAjIENvbXB1dGUgdGhlIExSKDApIHNldHMgb2YgaXRlbSBmdW5jdGlvbgorICAgIGRlZiBscjBfaXRlbXMoc2VsZik6CisKKyAgICAgICAgQyA9IFsgc2VsZi5scjBfY2xvc3VyZShbc2VsZi5ncmFtbWFyLlByb2R1Y3Rpb25zWzBdLmxyX25leHRdKSBdCisgICAgICAgIGkgPSAwCisgICAgICAgIGZvciBJIGluIEM6CisgICAgICAgICAgICBzZWxmLmxyMF9jaWRoYXNoW2lkKEkpXSA9IGkKKyAgICAgICAgICAgIGkgKz0gMQorCisgICAgICAgICMgTG9vcCBvdmVyIHRoZSBpdGVtcyBpbiBDIGFuZCBlYWNoIGdyYW1tYXIgc3ltYm9scworICAgICAgICBpID0gMAorICAgICAgICB3aGlsZSBpIDwgbGVuKEMpOgorICAgICAgICAgICAgSSA9IENbaV0KKyAgICAgICAgICAgIGkgKz0gMQorCisgICAgICAgICAgICAjIENvbGxlY3QgYWxsIG9mIHRoZSBzeW1ib2xzIHRoYXQgY291bGQgcG9zc2libHkgYmUgaW4gdGhlIGdvdG8oSSxYKSBzZXRzCisgICAgICAgICAgICBhc3ltcyA9IHsgfQorICAgICAgICAgICAgZm9yIGlpIGluIEk6CisgICAgICAgICAgICAgICAgZm9yIHMgaW4gaWkudXN5bXM6CisgICAgICAgICAgICAgICAgICAgIGFzeW1zW3NdID0gTm9uZQorCisgICAgICAgICAgICBmb3IgeCBpbiBhc3ltczoKKyAgICAgICAgICAgICAgICBnID0gc2VsZi5scjBfZ290byhJLHgpCisgICAgICAgICAgICAgICAgaWYgbm90IGc6ICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGlkKGcpIGluIHNlbGYubHIwX2NpZGhhc2g6IGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2VsZi5scjBfY2lkaGFzaFtpZChnKV0gPSBsZW4oQykKKyAgICAgICAgICAgICAgICBDLmFwcGVuZChnKQorCisgICAgICAgIHJldHVybiBDCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyAgICAgICAgICAgICAgICAgICAgICAgPT09PSBMQUxSKDEpIFBhcnNpbmcgPT09PQorICAgICMKKyAgICAjIExBTFIoMSkgcGFyc2luZyBpcyBhbG1vc3QgZXhhY3RseSB0aGUgc2FtZSBhcyBTTFIgZXhjZXB0IHRoYXQgaW5zdGVhZCBvZgorICAgICMgcmVseWluZyB1cG9uIEZvbGxvdygpIHNldHMgd2hlbiBwZXJmb3JtaW5nIHJlZHVjdGlvbnMsIGEgbW9yZSBzZWxlY3RpdmUKKyAgICAjIGxvb2thaGVhZCBzZXQgdGhhdCBpbmNvcnBvcmF0ZXMgdGhlIHN0YXRlIG9mIHRoZSBMUigwKSBtYWNoaW5lIGlzIHV0aWxpemVkLgorICAgICMgVGh1cywgd2UgbWFpbmx5IGp1c3QgaGF2ZSB0byBmb2N1cyBvbiBjYWxjdWxhdGluZyB0aGUgbG9va2FoZWFkIHNldHMuCisgICAgIworICAgICMgVGhlIG1ldGhvZCB1c2VkIGhlcmUgaXMgZHVlIHRvIERlUmVtZXIgYW5kIFBlbm5lbG8gKDE5ODIpLgorICAgICMKKyAgICAjIERlUmVtZXIsIEYuIEwuLCBhbmQgVC4gSi4gUGVubmVsbzogIkVmZmljaWVudCBDb21wdXRhdGlvbiBvZiBMQUxSKDEpCisgICAgIyAgICAgTG9va2FoZWFkIFNldHMiLCBBQ00gVHJhbnNhY3Rpb25zIG9uIFByb2dyYW1taW5nIExhbmd1YWdlcyBhbmQgU3lzdGVtcywKKyAgICAjICAgICBWb2wuIDQsIE5vLiA0LCBPY3QuIDE5ODIsIHBwLiA2MTUtNjQ5CisgICAgIworICAgICMgRnVydGhlciBkZXRhaWxzIGNhbiBhbHNvIGJlIGZvdW5kIGluOgorICAgICMKKyAgICAjICBKLiBUcmVtYmxheSBhbmQgUC4gU29yZW5zb24sICJUaGUgVGhlb3J5IGFuZCBQcmFjdGljZSBvZiBDb21waWxlciBXcml0aW5nIiwKKyAgICAjICAgICAgTWNHcmF3LUhpbGwgQm9vayBDb21wYW55LCAoMTk4NSkuCisgICAgIworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGNvbXB1dGVfbnVsbGFibGVfbm9udGVybWluYWxzKCkKKyAgICAjCisgICAgIyBDcmVhdGVzIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGFsbCBvZiB0aGUgbm9uLXRlcm1pbmFscyB0aGF0IG1pZ2h0IHByb2R1Y2UKKyAgICAjIGFuIGVtcHR5IHByb2R1Y3Rpb24uCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIGNvbXB1dGVfbnVsbGFibGVfbm9udGVybWluYWxzKHNlbGYpOgorICAgICAgICBudWxsYWJsZSA9IHt9CisgICAgICAgIG51bV9udWxsYWJsZSA9IDAKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5ncmFtbWFyLlByb2R1Y3Rpb25zWzE6XToKKyAgICAgICAgICAgICAgIGlmIHAubGVuID09IDA6CisgICAgICAgICAgICAgICAgICAgIG51bGxhYmxlW3AubmFtZV0gPSAxCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICBmb3IgdCBpbiBwLnByb2Q6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCB0IGluIG51bGxhYmxlOiBicmVhaworICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbnVsbGFibGVbcC5uYW1lXSA9IDEKKyAgICAgICAgICAgaWYgbGVuKG51bGxhYmxlKSA9PSBudW1fbnVsbGFibGU6IGJyZWFrCisgICAgICAgICAgIG51bV9udWxsYWJsZSA9IGxlbihudWxsYWJsZSkKKyAgICAgICAgcmV0dXJuIG51bGxhYmxlCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBmaW5kX25vbnRlcm1pbmFsX3RyYW5zKEMpCisgICAgIworICAgICMgR2l2ZW4gYSBzZXQgb2YgTFIoMCkgaXRlbXMsIHRoaXMgZnVuY3Rpb25zIGZpbmRzIGFsbCBvZiB0aGUgbm9uLXRlcm1pbmFsCisgICAgIyB0cmFuc2l0aW9ucy4gICAgVGhlc2UgYXJlIHRyYW5zaXRpb25zIGluIHdoaWNoIGEgZG90IGFwcGVhcnMgaW1tZWRpYXRlbHkgYmVmb3JlCisgICAgIyBhIG5vbi10ZXJtaW5hbC4gICBSZXR1cm5zIGEgbGlzdCBvZiB0dXBsZXMgb2YgdGhlIGZvcm0gKHN0YXRlLE4pIHdoZXJlIHN0YXRlCisgICAgIyBpcyB0aGUgc3RhdGUgbnVtYmVyIGFuZCBOIGlzIHRoZSBub250ZXJtaW5hbCBzeW1ib2wuCisgICAgIworICAgICMgVGhlIGlucHV0IEMgaXMgdGhlIHNldCBvZiBMUigwKSBpdGVtcy4KKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgZmluZF9ub250ZXJtaW5hbF90cmFuc2l0aW9ucyhzZWxmLEMpOgorICAgICAgICAgdHJhbnMgPSBbXQorICAgICAgICAgZm9yIHN0YXRlIGluIHJhbmdlKGxlbihDKSk6CisgICAgICAgICAgICAgZm9yIHAgaW4gQ1tzdGF0ZV06CisgICAgICAgICAgICAgICAgIGlmIHAubHJfaW5kZXggPCBwLmxlbiAtIDE6CisgICAgICAgICAgICAgICAgICAgICAgdCA9IChzdGF0ZSxwLnByb2RbcC5scl9pbmRleCsxXSkKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0WzFdIGluIHNlbGYuZ3JhbW1hci5Ob250ZXJtaW5hbHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdCBub3QgaW4gdHJhbnM6IHRyYW5zLmFwcGVuZCh0KQorICAgICAgICAgICAgIHN0YXRlID0gc3RhdGUgKyAxCisgICAgICAgICByZXR1cm4gdHJhbnMKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGRyX3JlbGF0aW9uKCkKKyAgICAjCisgICAgIyBDb21wdXRlcyB0aGUgRFIocCxBKSByZWxhdGlvbnNoaXBzIGZvciBub24tdGVybWluYWwgdHJhbnNpdGlvbnMuICBUaGUgaW5wdXQKKyAgICAjIGlzIGEgdHVwbGUgKHN0YXRlLE4pIHdoZXJlIHN0YXRlIGlzIGEgbnVtYmVyIGFuZCBOIGlzIGEgbm9udGVybWluYWwgc3ltYm9sLgorICAgICMKKyAgICAjIFJldHVybnMgYSBsaXN0IG9mIHRlcm1pbmFscy4KKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgZHJfcmVsYXRpb24oc2VsZixDLHRyYW5zLG51bGxhYmxlKToKKyAgICAgICAgZHJfc2V0ID0geyB9CisgICAgICAgIHN0YXRlLE4gPSB0cmFucworICAgICAgICB0ZXJtcyA9IFtdCisKKyAgICAgICAgZyA9IHNlbGYubHIwX2dvdG8oQ1tzdGF0ZV0sTikKKyAgICAgICAgZm9yIHAgaW4gZzoKKyAgICAgICAgICAgaWYgcC5scl9pbmRleCA8IHAubGVuIC0gMToKKyAgICAgICAgICAgICAgIGEgPSBwLnByb2RbcC5scl9pbmRleCsxXQorICAgICAgICAgICAgICAgaWYgYSBpbiBzZWxmLmdyYW1tYXIuVGVybWluYWxzOgorICAgICAgICAgICAgICAgICAgIGlmIGEgbm90IGluIHRlcm1zOiB0ZXJtcy5hcHBlbmQoYSkKKworICAgICAgICAjIFRoaXMgZXh0cmEgYml0IGlzIHRvIGhhbmRsZSB0aGUgc3RhcnQgc3RhdGUKKyAgICAgICAgaWYgc3RhdGUgPT0gMCBhbmQgTiA9PSBzZWxmLmdyYW1tYXIuUHJvZHVjdGlvbnNbMF0ucHJvZFswXToKKyAgICAgICAgICAgdGVybXMuYXBwZW5kKCckZW5kJykKKworICAgICAgICByZXR1cm4gdGVybXMKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHJlYWRzX3JlbGF0aW9uKCkKKyAgICAjCisgICAgIyBDb21wdXRlcyB0aGUgUkVBRFMoKSByZWxhdGlvbiAocCxBKSBSRUFEUyAodCxDKS4KKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgcmVhZHNfcmVsYXRpb24oc2VsZixDLCB0cmFucywgZW1wdHkpOgorICAgICAgICAjIExvb2sgZm9yIGVtcHR5IHRyYW5zaXRpb25zCisgICAgICAgIHJlbCA9IFtdCisgICAgICAgIHN0YXRlLCBOID0gdHJhbnMKKworICAgICAgICBnID0gc2VsZi5scjBfZ290byhDW3N0YXRlXSxOKQorICAgICAgICBqID0gc2VsZi5scjBfY2lkaGFzaC5nZXQoaWQoZyksLTEpCisgICAgICAgIGZvciBwIGluIGc6CisgICAgICAgICAgICBpZiBwLmxyX2luZGV4IDwgcC5sZW4gLSAxOgorICAgICAgICAgICAgICAgICBhID0gcC5wcm9kW3AubHJfaW5kZXggKyAxXQorICAgICAgICAgICAgICAgICBpZiBhIGluIGVtcHR5OgorICAgICAgICAgICAgICAgICAgICAgIHJlbC5hcHBlbmQoKGosYSkpCisKKyAgICAgICAgcmV0dXJuIHJlbAorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgY29tcHV0ZV9sb29rYmFja19pbmNsdWRlcygpCisgICAgIworICAgICMgRGV0ZXJtaW5lcyB0aGUgbG9va2JhY2sgYW5kIGluY2x1ZGVzIHJlbGF0aW9ucworICAgICMKKyAgICAjIExPT0tCQUNLOgorICAgICMKKyAgICAjIFRoaXMgcmVsYXRpb24gaXMgZGV0ZXJtaW5lZCBieSBydW5uaW5nIHRoZSBMUigwKSBzdGF0ZSBtYWNoaW5lIGZvcndhcmQuCisgICAgIyBGb3IgZXhhbXBsZSwgc3RhcnRpbmcgd2l0aCBhIHByb2R1Y3Rpb24gIk4gOiAuIEEgQiBDIiwgd2UgcnVuIGl0IGZvcndhcmQKKyAgICAjIHRvIG9idGFpbiAiTiA6IEEgQiBDIC4iICAgV2UgdGhlbiBidWlsZCBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgZmluYWwKKyAgICAjIHN0YXRlIGFuZCB0aGUgc3RhcnRpbmcgc3RhdGUuICAgVGhlc2UgcmVsYXRpb25zaGlwcyBhcmUgc3RvcmVkIGluIGEgZGljdGlvbmFyeQorICAgICMgbG9va2RpY3QuCisgICAgIworICAgICMgSU5DTFVERVM6CisgICAgIworICAgICMgQ29tcHV0ZXMgdGhlIElOQ0xVREUoKSByZWxhdGlvbiAocCxBKSBJTkNMVURFUyAocCcsQikuCisgICAgIworICAgICMgVGhpcyByZWxhdGlvbiBpcyB1c2VkIHRvIGRldGVybWluZSBub24tdGVybWluYWwgdHJhbnNpdGlvbnMgdGhhdCBvY2N1cgorICAgICMgaW5zaWRlIG9mIG90aGVyIG5vbi10ZXJtaW5hbCB0cmFuc2l0aW9uIHN0YXRlcy4gICAocCxBKSBJTkNMVURFUyAocCcsIEIpCisgICAgIyBpZiB0aGUgZm9sbG93aW5nIGhvbGRzOgorICAgICMKKyAgICAjICAgICAgIEIgLT4gTEFULCB3aGVyZSBUIC0+IGVwc2lsb24gYW5kIHAnIC1MLT4gcAorICAgICMKKyAgICAjIEwgaXMgZXNzZW50aWFsbHkgYSBwcmVmaXggKHdoaWNoIG1heSBiZSBlbXB0eSksIFQgaXMgYSBzdWZmaXggdGhhdCBtdXN0IGJlCisgICAgIyBhYmxlIHRvIGRlcml2ZSBhbiBlbXB0eSBzdHJpbmcuICBTdGF0ZSBwJyBtdXN0IGxlYWQgdG8gc3RhdGUgcCB3aXRoIHRoZSBzdHJpbmcgTC4KKyAgICAjCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIGNvbXB1dGVfbG9va2JhY2tfaW5jbHVkZXMoc2VsZixDLHRyYW5zLG51bGxhYmxlKToKKworICAgICAgICBsb29rZGljdCA9IHt9ICAgICAgICAgICMgRGljdGlvbmFyeSBvZiBsb29rYmFjayByZWxhdGlvbnMKKyAgICAgICAgaW5jbHVkZWRpY3QgPSB7fSAgICAgICAjIERpY3Rpb25hcnkgb2YgaW5jbHVkZSByZWxhdGlvbnMKKworICAgICAgICAjIE1ha2UgYSBkaWN0aW9uYXJ5IG9mIG5vbi10ZXJtaW5hbCB0cmFuc2l0aW9ucworICAgICAgICBkdHJhbnMgPSB7fQorICAgICAgICBmb3IgdCBpbiB0cmFuczoKKyAgICAgICAgICAgIGR0cmFuc1t0XSA9IDEKKworICAgICAgICAjIExvb3Agb3ZlciBhbGwgdHJhbnNpdGlvbnMgYW5kIGNvbXB1dGUgbG9va2JhY2tzIGFuZCBpbmNsdWRlcworICAgICAgICBmb3Igc3RhdGUsTiBpbiB0cmFuczoKKyAgICAgICAgICAgIGxvb2tiID0gW10KKyAgICAgICAgICAgIGluY2x1ZGVzID0gW10KKyAgICAgICAgICAgIGZvciBwIGluIENbc3RhdGVdOgorICAgICAgICAgICAgICAgIGlmIHAubmFtZSAhPSBOOiBjb250aW51ZQorCisgICAgICAgICAgICAgICAgIyBPa2F5LCB3ZSBoYXZlIGEgbmFtZSBtYXRjaC4gIFdlIG5vdyBmb2xsb3cgdGhlIHByb2R1Y3Rpb24gYWxsIHRoZSB3YXkKKyAgICAgICAgICAgICAgICAjIHRocm91Z2ggdGhlIHN0YXRlIG1hY2hpbmUgdW50aWwgd2UgZ2V0IHRoZSAuIG9uIHRoZSByaWdodCBoYW5kIHNpZGUKKworICAgICAgICAgICAgICAgIGxyX2luZGV4ID0gcC5scl9pbmRleAorICAgICAgICAgICAgICAgIGogPSBzdGF0ZQorICAgICAgICAgICAgICAgIHdoaWxlIGxyX2luZGV4IDwgcC5sZW4gLSAxOgorICAgICAgICAgICAgICAgICAgICAgbHJfaW5kZXggPSBscl9pbmRleCArIDEKKyAgICAgICAgICAgICAgICAgICAgIHQgPSBwLnByb2RbbHJfaW5kZXhdCisKKyAgICAgICAgICAgICAgICAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoaXMgc3ltYm9sIGFuZCBzdGF0ZSBhcmUgYSBub24tdGVybWluYWwgdHJhbnNpdGlvbgorICAgICAgICAgICAgICAgICAgICAgaWYgKGosdCkgaW4gZHRyYW5zOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBZZXMuICBPa2F5LCB0aGVyZSBpcyBzb21lIGNoYW5jZSB0aGF0IHRoaXMgaXMgYW4gaW5jbHVkZXMgcmVsYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIG9ubHkgd2F5IHRvIGtub3cgZm9yIGNlcnRhaW4gaXMgd2hldGhlciB0aGUgcmVzdCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHJvZHVjdGlvbiBkZXJpdmVzIGVtcHR5CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpID0gbHJfaW5kZXggKyAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBsaSA8IHAubGVuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwLnByb2RbbGldIGluIHNlbGYuZ3JhbW1hci5UZXJtaW5hbHM6IGJyZWFrICAgICAgIyBObyBmb3JnZXQgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHAucHJvZFtsaV0gaW4gbnVsbGFibGU6IGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpID0gbGkgKyAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFwcGVhcnMgdG8gYmUgYSByZWxhdGlvbiBiZXR3ZWVuIChqLHQpIGFuZCAoc3RhdGUsTikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMuYXBwZW5kKChqLHQpKQorCisgICAgICAgICAgICAgICAgICAgICBnID0gc2VsZi5scjBfZ290byhDW2pdLHQpICAgICAgICAgICAgICAgIyBHbyB0byBuZXh0IHNldAorICAgICAgICAgICAgICAgICAgICAgaiA9IHNlbGYubHIwX2NpZGhhc2guZ2V0KGlkKGcpLC0xKSAgICAgIyBHbyB0byBuZXh0IHN0YXRlCisKKyAgICAgICAgICAgICAgICAjIFdoZW4gd2UgZ2V0IGhlcmUsIGogaXMgdGhlIGZpbmFsIHN0YXRlLCBub3cgd2UgaGF2ZSB0byBsb2NhdGUgdGhlIHByb2R1Y3Rpb24KKyAgICAgICAgICAgICAgICBmb3IgciBpbiBDW2pdOgorICAgICAgICAgICAgICAgICAgICAgaWYgci5uYW1lICE9IHAubmFtZTogY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgIGlmIHIubGVuICE9IHAubGVuOiAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICBpID0gMAorICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGxvb2sgaXMgY29tcGFyaW5nIGEgcHJvZHVjdGlvbiAiLiBBIEIgQyIgd2l0aCAiQSBCIEMgLiIKKyAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGkgPCByLmxyX2luZGV4OgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByLnByb2RbaV0gIT0gcC5wcm9kW2krMV06IGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgMQorICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2IuYXBwZW5kKChqLHIpKQorICAgICAgICAgICAgZm9yIGkgaW4gaW5jbHVkZXM6CisgICAgICAgICAgICAgICAgIGlmIG5vdCBpIGluIGluY2x1ZGVkaWN0OiBpbmNsdWRlZGljdFtpXSA9IFtdCisgICAgICAgICAgICAgICAgIGluY2x1ZGVkaWN0W2ldLmFwcGVuZCgoc3RhdGUsTikpCisgICAgICAgICAgICBsb29rZGljdFsoc3RhdGUsTildID0gbG9va2IKKworICAgICAgICByZXR1cm4gbG9va2RpY3QsaW5jbHVkZWRpY3QKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGNvbXB1dGVfcmVhZF9zZXRzKCkKKyAgICAjCisgICAgIyBHaXZlbiBhIHNldCBvZiBMUigwKSBpdGVtcywgdGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgcmVhZCBzZXRzLgorICAgICMKKyAgICAjIElucHV0czogIEMgICAgICAgID0gIFNldCBvZiBMUigwKSBpdGVtcworICAgICMgICAgICAgICAgbnRyYW5zICAgPSBTZXQgb2Ygbm9udGVybWluYWwgdHJhbnNpdGlvbnMKKyAgICAjICAgICAgICAgIG51bGxhYmxlID0gU2V0IG9mIGVtcHR5IHRyYW5zaXRpb25zCisgICAgIworICAgICMgUmV0dXJucyBhIHNldCBjb250YWluaW5nIHRoZSByZWFkIHNldHMKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgY29tcHV0ZV9yZWFkX3NldHMoc2VsZixDLCBudHJhbnMsIG51bGxhYmxlKToKKyAgICAgICAgRlAgPSBsYW1iZGEgeDogc2VsZi5kcl9yZWxhdGlvbihDLHgsbnVsbGFibGUpCisgICAgICAgIFIgPSAgbGFtYmRhIHg6IHNlbGYucmVhZHNfcmVsYXRpb24oQyx4LG51bGxhYmxlKQorICAgICAgICBGID0gZGlncmFwaChudHJhbnMsUixGUCkKKyAgICAgICAgcmV0dXJuIEYKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGNvbXB1dGVfZm9sbG93X3NldHMoKQorICAgICMKKyAgICAjIEdpdmVuIGEgc2V0IG9mIExSKDApIGl0ZW1zLCBhIHNldCBvZiBub24tdGVybWluYWwgdHJhbnNpdGlvbnMsIGEgcmVhZHNldCwKKyAgICAjIGFuZCBhbiBpbmNsdWRlIHNldCwgdGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgZm9sbG93IHNldHMKKyAgICAjCisgICAgIyBGb2xsb3cocCxBKSA9IFJlYWQocCxBKSBVIFUge0ZvbGxvdyhwJyxCKSB8IChwLEEpIElOQ0xVREVTIChwJyxCKX0KKyAgICAjCisgICAgIyBJbnB1dHM6CisgICAgIyAgICAgICAgICAgIG50cmFucyAgICAgPSBTZXQgb2Ygbm9udGVybWluYWwgdHJhbnNpdGlvbnMKKyAgICAjICAgICAgICAgICAgcmVhZHNldHMgICA9IFJlYWRzZXQgKHByZXZpb3VzbHkgY29tcHV0ZWQpCisgICAgIyAgICAgICAgICAgIGluY2xzZXRzICAgPSBJbmNsdWRlIHNldHMgKHByZXZpb3VzbHkgY29tcHV0ZWQpCisgICAgIworICAgICMgUmV0dXJucyBhIHNldCBjb250YWluaW5nIHRoZSBmb2xsb3cgc2V0cworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBjb21wdXRlX2ZvbGxvd19zZXRzKHNlbGYsbnRyYW5zLHJlYWRzZXRzLGluY2xzZXRzKToKKyAgICAgICAgIEZQID0gbGFtYmRhIHg6IHJlYWRzZXRzW3hdCisgICAgICAgICBSICA9IGxhbWJkYSB4OiBpbmNsc2V0cy5nZXQoeCxbXSkKKyAgICAgICAgIEYgPSBkaWdyYXBoKG50cmFucyxSLEZQKQorICAgICAgICAgcmV0dXJuIEYKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGFkZF9sb29rYWhlYWRzKCkKKyAgICAjCisgICAgIyBBdHRhY2hlcyB0aGUgbG9va2FoZWFkIHN5bWJvbHMgdG8gZ3JhbW1hciBydWxlcy4KKyAgICAjCisgICAgIyBJbnB1dHM6ICAgIGxvb2tiYWNrcyAgICAgICAgIC0gIFNldCBvZiBsb29rYmFjayByZWxhdGlvbnMKKyAgICAjICAgICAgICAgICAgZm9sbG93c2V0ICAgICAgICAgLSAgQ29tcHV0ZWQgZm9sbG93IHNldAorICAgICMKKyAgICAjIFRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgYXR0YWNoZXMgdGhlIGxvb2thaGVhZHMgdG8gcHJvZHVjdGlvbnMgY29udGFpbmVkCisgICAgIyBpbiB0aGUgbG9va2JhY2tzIHNldAorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBhZGRfbG9va2FoZWFkcyhzZWxmLGxvb2tiYWNrcyxmb2xsb3dzZXQpOgorICAgICAgICBmb3IgdHJhbnMsbGIgaW4gbG9va2JhY2tzLml0ZW1zKCk6CisgICAgICAgICAgICAjIExvb3Agb3ZlciBwcm9kdWN0aW9ucyBpbiBsb29rYmFjaworICAgICAgICAgICAgZm9yIHN0YXRlLHAgaW4gbGI6CisgICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0ZSBpbiBwLmxvb2thaGVhZHM6CisgICAgICAgICAgICAgICAgICAgICAgcC5sb29rYWhlYWRzW3N0YXRlXSA9IFtdCisgICAgICAgICAgICAgICAgIGYgPSBmb2xsb3dzZXQuZ2V0KHRyYW5zLFtdKQorICAgICAgICAgICAgICAgICBmb3IgYSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgIGlmIGEgbm90IGluIHAubG9va2FoZWFkc1tzdGF0ZV06IHAubG9va2FoZWFkc1tzdGF0ZV0uYXBwZW5kKGEpCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBhZGRfbGFscl9sb29rYWhlYWRzKCkKKyAgICAjCisgICAgIyBUaGlzIGZ1bmN0aW9uIGRvZXMgYWxsIG9mIHRoZSB3b3JrIG9mIGFkZGluZyBsb29rYWhlYWQgaW5mb3JtYXRpb24gZm9yIHVzZQorICAgICMgd2l0aCBMQUxSIHBhcnNpbmcKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgYWRkX2xhbHJfbG9va2FoZWFkcyhzZWxmLEMpOgorICAgICAgICAjIERldGVybWluZSBhbGwgb2YgdGhlIG51bGxhYmxlIG5vbnRlcm1pbmFscworICAgICAgICBudWxsYWJsZSA9IHNlbGYuY29tcHV0ZV9udWxsYWJsZV9ub250ZXJtaW5hbHMoKQorCisgICAgICAgICMgRmluZCBhbGwgbm9uLXRlcm1pbmFsIHRyYW5zaXRpb25zCisgICAgICAgIHRyYW5zID0gc2VsZi5maW5kX25vbnRlcm1pbmFsX3RyYW5zaXRpb25zKEMpCisKKyAgICAgICAgIyBDb21wdXRlIHJlYWQgc2V0cworICAgICAgICByZWFkc2V0cyA9IHNlbGYuY29tcHV0ZV9yZWFkX3NldHMoQyx0cmFucyxudWxsYWJsZSkKKworICAgICAgICAjIENvbXB1dGUgbG9va2JhY2svaW5jbHVkZXMgcmVsYXRpb25zCisgICAgICAgIGxvb2tkLCBpbmNsdWRlZCA9IHNlbGYuY29tcHV0ZV9sb29rYmFja19pbmNsdWRlcyhDLHRyYW5zLG51bGxhYmxlKQorCisgICAgICAgICMgQ29tcHV0ZSBMQUxSIEZPTExPVyBzZXRzCisgICAgICAgIGZvbGxvd3NldHMgPSBzZWxmLmNvbXB1dGVfZm9sbG93X3NldHModHJhbnMscmVhZHNldHMsaW5jbHVkZWQpCisKKyAgICAgICAgIyBBZGQgYWxsIG9mIHRoZSBsb29rYWhlYWRzCisgICAgICAgIHNlbGYuYWRkX2xvb2thaGVhZHMobG9va2QsZm9sbG93c2V0cykKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGxyX3BhcnNlX3RhYmxlKCkKKyAgICAjCisgICAgIyBUaGlzIGZ1bmN0aW9uIGNvbnN0cnVjdHMgdGhlIHBhcnNlIHRhYmxlcyBmb3IgU0xSIG9yIExBTFIKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZGVmIGxyX3BhcnNlX3RhYmxlKHNlbGYpOgorICAgICAgICBQcm9kdWN0aW9ucyA9IHNlbGYuZ3JhbW1hci5Qcm9kdWN0aW9ucworICAgICAgICBQcmVjZWRlbmNlICA9IHNlbGYuZ3JhbW1hci5QcmVjZWRlbmNlCisgICAgICAgIGdvdG8gICA9IHNlbGYubHJfZ290byAgICAgICAgICMgR290byBhcnJheQorICAgICAgICBhY3Rpb24gPSBzZWxmLmxyX2FjdGlvbiAgICAgICAjIEFjdGlvbiBhcnJheQorICAgICAgICBsb2cgICAgPSBzZWxmLmxvZyAgICAgICAgICAgICAjIExvZ2dlciBmb3Igb3V0cHV0CisKKyAgICAgICAgYWN0aW9ucCA9IHsgfSAgICAgICAgICAgICAgICAgIyBBY3Rpb24gcHJvZHVjdGlvbiBhcnJheSAodGVtcG9yYXJ5KQorICAgICAgICAKKyAgICAgICAgbG9nLmluZm8oIlBhcnNpbmcgbWV0aG9kOiAlcyIsIHNlbGYubHJfbWV0aG9kKQorCisgICAgICAgICMgU3RlcCAxOiBDb25zdHJ1Y3QgQyA9IHsgSTAsIEkxLCAuLi4gSU59LCBjb2xsZWN0aW9uIG9mIExSKDApIGl0ZW1zCisgICAgICAgICMgVGhpcyBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2Ygc3RhdGVzCisKKyAgICAgICAgQyA9IHNlbGYubHIwX2l0ZW1zKCkKKworICAgICAgICBpZiBzZWxmLmxyX21ldGhvZCA9PSAnTEFMUic6CisgICAgICAgICAgICBzZWxmLmFkZF9sYWxyX2xvb2thaGVhZHMoQykKKworICAgICAgICAjIEJ1aWxkIHRoZSBwYXJzZXIgdGFibGUsIHN0YXRlIGJ5IHN0YXRlCisgICAgICAgIHN0ID0gMAorICAgICAgICBmb3IgSSBpbiBDOgorICAgICAgICAgICAgIyBMb29wIG92ZXIgZWFjaCBwcm9kdWN0aW9uIGluIEkKKyAgICAgICAgICAgIGFjdGxpc3QgPSBbIF0gICAgICAgICAgICAgICMgTGlzdCBvZiBhY3Rpb25zCisgICAgICAgICAgICBzdF9hY3Rpb24gID0geyB9CisgICAgICAgICAgICBzdF9hY3Rpb25wID0geyB9CisgICAgICAgICAgICBzdF9nb3RvICAgID0geyB9CisgICAgICAgICAgICBsb2cuaW5mbygiIikKKyAgICAgICAgICAgIGxvZy5pbmZvKCJzdGF0ZSAlZCIsIHN0KQorICAgICAgICAgICAgbG9nLmluZm8oIiIpCisgICAgICAgICAgICBmb3IgcCBpbiBJOgorICAgICAgICAgICAgICAgIGxvZy5pbmZvKCIgICAgKCVkKSAlcyIsIHAubnVtYmVyLCBzdHIocCkpCisgICAgICAgICAgICBsb2cuaW5mbygiIikKKworICAgICAgICAgICAgZm9yIHAgaW4gSToKKyAgICAgICAgICAgICAgICAgICAgaWYgcC5sZW4gPT0gcC5scl9pbmRleCArIDE6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwLm5hbWUgPT0gIlMnIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFN0YXJ0IHN5bWJvbC4gQWNjZXB0IQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2FjdGlvblsiJGVuZCJdID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2FjdGlvbnBbIiRlbmQiXSA9IHAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBhcmUgYXQgdGhlIGVuZCBvZiBhIHByb2R1Y3Rpb24uICBSZWR1Y2UhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5scl9tZXRob2QgPT0gJ0xBTFInOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWhlYWRzID0gcC5sb29rYWhlYWRzW3N0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhaGVhZHMgPSBzZWxmLmdyYW1tYXIuRm9sbG93W3AubmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYSBpbiBsYWhlYWRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RsaXN0LmFwcGVuZCgoYSxwLCJyZWR1Y2UgdXNpbmcgcnVsZSAlZCAoJXMpIiAlIChwLm51bWJlcixwKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBzdF9hY3Rpb24uZ2V0KGEsTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2hvYS4gSGF2ZSBhIHNoaWZ0L3JlZHVjZSBvciByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE5lZWQgdG8gZGVjaWRlIG9uIHNoaWZ0IG9yIHJlZHVjZSBoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBCeSBkZWZhdWx0IHdlIGZhdm9yIHNoaWZ0aW5nLiBOZWVkIHRvIGFkZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc29tZSBwcmVjZWRlbmNlIHJ1bGVzIGhlcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByZWMsc2xldmVsID0gUHJvZHVjdGlvbnNbc3RfYWN0aW9ucFthXS5udW1iZXJdLnByZWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycHJlYyxybGV2ZWwgPSBQcmVjZWRlbmNlLmdldChhLCgncmlnaHQnLDApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbGV2ZWwgPCBybGV2ZWwpIG9yICgoc2xldmVsID09IHJsZXZlbCkgYW5kIChycHJlYyA9PSAnbGVmdCcpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSByZWFsbHkgbmVlZCB0byByZWR1Y2UgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9uW2FdID0gLXAubnVtYmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2FjdGlvbnBbYV0gPSBwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzbGV2ZWwgYW5kIG5vdCBybGV2ZWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbygiICAhIHNoaWZ0L3JlZHVjZSBjb25mbGljdCBmb3IgJXMgcmVzb2x2ZWQgYXMgcmVkdWNlIixhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zcl9jb25mbGljdHMuYXBwZW5kKChzdCxhLCdyZWR1Y2UnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdGlvbnNbcC5udW1iZXJdLnJlZHVjZWQgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgKHNsZXZlbCA9PSBybGV2ZWwpIGFuZCAocnByZWMgPT0gJ25vbmFzc29jJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2FjdGlvblthXSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEhtbW0uIEd1ZXNzIHdlJ2xsIGtlZXAgdGhlIHNoaWZ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBybGV2ZWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbygiICAhIHNoaWZ0L3JlZHVjZSBjb25mbGljdCBmb3IgJXMgcmVzb2x2ZWQgYXMgc2hpZnQiLGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNyX2NvbmZsaWN0cy5hcHBlbmQoKHN0LGEsJ3NoaWZ0JykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIHIgPCAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUmVkdWNlL3JlZHVjZSBjb25mbGljdC4gICBJbiB0aGlzIGNhc2UsIHdlIGZhdm9yIHRoZSBydWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGF0IHdhcyBkZWZpbmVkIGZpcnN0IGluIHRoZSBncmFtbWFyIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRwID0gUHJvZHVjdGlvbnNbLXJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHAgPSBQcm9kdWN0aW9uc1twLm51bWJlcl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBvbGRwLmxpbmUgPiBwcC5saW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25bYV0gPSAtcC5udW1iZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9ucFthXSA9IHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VucCxyZWplY3RwID0gcHAsb2xkcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0aW9uc1twLm51bWJlcl0ucmVkdWNlZCArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3Rpb25zW29sZHAubnVtYmVyXS5yZWR1Y2VkIC09IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5wLHJlamVjdHAgPSBvbGRwLHBwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycl9jb25mbGljdHMuYXBwZW5kKChzdCxjaG9zZW5wLHJlamVjdHApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKCIgICEgcmVkdWNlL3JlZHVjZSBjb25mbGljdCBmb3IgJXMgcmVzb2x2ZWQgdXNpbmcgcnVsZSAlZCAoJXMpIiwgYSxzdF9hY3Rpb25wW2FdLm51bWJlciwgc3RfYWN0aW9ucFthXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTEFMUkVycm9yKCJVbmtub3duIGNvbmZsaWN0IGluIHN0YXRlICVkIiAlIHN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9uW2FdID0gLXAubnVtYmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25wW2FdID0gcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdGlvbnNbcC5udW1iZXJdLnJlZHVjZWQgKz0gMQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHAubHJfaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBwLnByb2RbaSsxXSAgICAgICAjIEdldCBzeW1ib2wgcmlnaHQgYWZ0ZXIgdGhlICIuIgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYSBpbiBzZWxmLmdyYW1tYXIuVGVybWluYWxzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBzZWxmLmxyMF9nb3RvKEksYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gc2VsZi5scjBfY2lkaGFzaC5nZXQoaWQoZyksLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaiA+PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGFyZSBpbiBhIHNoaWZ0IHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGxpc3QuYXBwZW5kKChhLHAsInNoaWZ0IGFuZCBnbyB0byBzdGF0ZSAlZCIgJSBqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHN0X2FjdGlvbi5nZXQoYSxOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXaG9hIGhhdmUgYSBzaGlmdC9yZWR1Y2Ugb3Igc2hpZnQvc2hpZnQgY29uZmxpY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHIgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHIgIT0gajoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTEFMUkVycm9yKCJTaGlmdC9zaGlmdCBjb25mbGljdCBpbiBzdGF0ZSAlZCIgJSBzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgciA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEbyBhIHByZWNlZGVuY2UgY2hlY2suCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIC0gIGlmIHByZWNlZGVuY2Ugb2YgcmVkdWNlIHJ1bGUgaXMgaGlnaGVyLCB3ZSByZWR1Y2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIC0gIGlmIHByZWNlZGVuY2Ugb2YgcmVkdWNlIGlzIHNhbWUgYW5kIGxlZnQgYXNzb2MsIHdlIHJlZHVjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgLSAgb3RoZXJ3aXNlIHdlIHNoaWZ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnByZWMscmxldmVsID0gUHJvZHVjdGlvbnNbc3RfYWN0aW9ucFthXS5udW1iZXJdLnByZWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJlYyxzbGV2ZWwgPSBQcmVjZWRlbmNlLmdldChhLCgncmlnaHQnLDApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbGV2ZWwgPiBybGV2ZWwpIG9yICgoc2xldmVsID09IHJsZXZlbCkgYW5kIChycHJlYyA9PSAncmlnaHQnKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgZGVjaWRlIHRvIHNoaWZ0IGhlcmUuLi4gaGlnaGVzdCBwcmVjZWRlbmNlIHRvIHNoaWZ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3Rpb25zW3N0X2FjdGlvbnBbYV0ubnVtYmVyXS5yZWR1Y2VkIC09IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9uW2FdID0gagorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25wW2FdID0gcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmxldmVsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oIiAgISBzaGlmdC9yZWR1Y2UgY29uZmxpY3QgZm9yICVzIHJlc29sdmVkIGFzIHNoaWZ0IixhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zcl9jb25mbGljdHMuYXBwZW5kKChzdCxhLCdzaGlmdCcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgKHNsZXZlbCA9PSBybGV2ZWwpIGFuZCAocnByZWMgPT0gJ25vbmFzc29jJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2FjdGlvblthXSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEhtbW0uIEd1ZXNzIHdlJ2xsIGtlZXAgdGhlIHJlZHVjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2xldmVsIGFuZCBub3QgcmxldmVsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oIiAgISBzaGlmdC9yZWR1Y2UgY29uZmxpY3QgZm9yICVzIHJlc29sdmVkIGFzIHJlZHVjZSIsYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3JfY29uZmxpY3RzLmFwcGVuZCgoc3QsYSwncmVkdWNlJykpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTEFMUkVycm9yKCJVbmtub3duIGNvbmZsaWN0IGluIHN0YXRlICVkIiAlIHN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9uW2FdID0gagorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9ucFthXSA9IHAKKworICAgICAgICAgICAgIyBQcmludCB0aGUgYWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggZWFjaCB0ZXJtaW5hbAorICAgICAgICAgICAgX2FjdHByaW50ID0geyB9CisgICAgICAgICAgICBmb3IgYSxwLG0gaW4gYWN0bGlzdDoKKyAgICAgICAgICAgICAgICBpZiBhIGluIHN0X2FjdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgaWYgcCBpcyBzdF9hY3Rpb25wW2FdOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oIiAgICAlLTE1cyAlcyIsYSxtKQorICAgICAgICAgICAgICAgICAgICAgICAgX2FjdHByaW50WyhhLG0pXSA9IDEKKyAgICAgICAgICAgIGxvZy5pbmZvKCIiKQorICAgICAgICAgICAgIyBQcmludCB0aGUgYWN0aW9ucyB0aGF0IHdlcmUgbm90IHVzZWQuIChkZWJ1Z2dpbmcpCisgICAgICAgICAgICBub3RfdXNlZCA9IDAKKyAgICAgICAgICAgIGZvciBhLHAsbSBpbiBhY3RsaXN0OgorICAgICAgICAgICAgICAgIGlmIGEgaW4gc3RfYWN0aW9uOgorICAgICAgICAgICAgICAgICAgICBpZiBwIGlzIG5vdCBzdF9hY3Rpb25wW2FdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IChhLG0pIGluIF9hY3RwcmludDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoIiAgISAlLTE1cyBbICVzIF0iLGEsbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RfdXNlZCA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYWN0cHJpbnRbKGEsbSldID0gMQorICAgICAgICAgICAgaWYgbm90X3VzZWQ6CisgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCIiKQorCisgICAgICAgICAgICAjIENvbnN0cnVjdCB0aGUgZ290byB0YWJsZSBmb3IgdGhpcyBzdGF0ZQorCisgICAgICAgICAgICBua2V5cyA9IHsgfQorICAgICAgICAgICAgZm9yIGlpIGluIEk6CisgICAgICAgICAgICAgICAgZm9yIHMgaW4gaWkudXN5bXM6CisgICAgICAgICAgICAgICAgICAgIGlmIHMgaW4gc2VsZi5ncmFtbWFyLk5vbnRlcm1pbmFsczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5rZXlzW3NdID0gTm9uZQorICAgICAgICAgICAgZm9yIG4gaW4gbmtleXM6CisgICAgICAgICAgICAgICAgZyA9IHNlbGYubHIwX2dvdG8oSSxuKQorICAgICAgICAgICAgICAgIGogPSBzZWxmLmxyMF9jaWRoYXNoLmdldChpZChnKSwtMSkKKyAgICAgICAgICAgICAgICBpZiBqID49IDA6CisgICAgICAgICAgICAgICAgICAgIHN0X2dvdG9bbl0gPSBqCisgICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKCIgICAgJS0zMHMgc2hpZnQgYW5kIGdvIHRvIHN0YXRlICVkIixuLGopCisKKyAgICAgICAgICAgIGFjdGlvbltzdF0gPSBzdF9hY3Rpb24KKyAgICAgICAgICAgIGFjdGlvbnBbc3RdID0gc3RfYWN0aW9ucAorICAgICAgICAgICAgZ290b1tzdF0gPSBzdF9nb3RvCisgICAgICAgICAgICBzdCArPSAxCisKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHdyaXRlKCkKKyAgICAjCisgICAgIyBUaGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGUgTFIgcGFyc2luZyB0YWJsZXMgdG8gYSBmaWxlCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHdyaXRlX3RhYmxlKHNlbGYsbW9kdWxlbmFtZSxvdXRwdXRkaXI9Jycsc2lnbmF0dXJlPSIiKToKKyAgICAgICAgYmFzZW1vZHVsZW5hbWUgPSBtb2R1bGVuYW1lLnNwbGl0KCIuIilbLTFdCisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG91dHB1dGRpcixiYXNlbW9kdWxlbmFtZSkgKyAiLnB5IgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwidyIpCisKKyAgICAgICAgICAgIGYud3JpdGUoIiIiCisjICVzCisjIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4gRG8gbm90IGVkaXQuCitfdGFidmVyc2lvbiA9ICVyCisKK19scl9tZXRob2QgPSAlcgorCitfbHJfc2lnbmF0dXJlID0gJXIKKyAgICAiIiIgJSAoZmlsZW5hbWUsIF9fdGFidmVyc2lvbl9fLCBzZWxmLmxyX21ldGhvZCwgc2lnbmF0dXJlKSkKKworICAgICAgICAgICAgIyBDaGFuZ2Ugc21hbGxlciB0byAwIHRvIGdvIGJhY2sgdG8gb3JpZ2luYWwgdGFibGVzCisgICAgICAgICAgICBzbWFsbGVyID0gMQorCisgICAgICAgICAgICAjIEZhY3RvciBvdXQgbmFtZXMgdG8gdHJ5IGFuZCBtYWtlIHNtYWxsZXIKKyAgICAgICAgICAgIGlmIHNtYWxsZXI6CisgICAgICAgICAgICAgICAgaXRlbXMgPSB7IH0KKworICAgICAgICAgICAgICAgIGZvciBzLG5kIGluIHNlbGYubHJfYWN0aW9uLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgZm9yIG5hbWUsdiBpbiBuZC5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICAgIGkgPSBpdGVtcy5nZXQobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaToKKyAgICAgICAgICAgICAgICAgICAgICAgICBpID0gKFtdLFtdKQorICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zW25hbWVdID0gaQorICAgICAgICAgICAgICAgICAgICAgIGlbMF0uYXBwZW5kKHMpCisgICAgICAgICAgICAgICAgICAgICAgaVsxXS5hcHBlbmQodikKKworICAgICAgICAgICAgICAgIGYud3JpdGUoIlxuX2xyX2FjdGlvbl9pdGVtcyA9IHsiKQorICAgICAgICAgICAgICAgIGZvciBrLHYgaW4gaXRlbXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiJXI6KFsiICUgaykKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gdlswXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIiVyLCIgJSBpKQorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJdLFsiKQorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiB2WzFdOgorICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiJXIsIiAlIGkpCisKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiXSksIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJ9XG4iKQorCisgICAgICAgICAgICAgICAgZi53cml0ZSgiIiIKK19scl9hY3Rpb24gPSB7IH0KK2ZvciBfaywgX3YgaW4gX2xyX2FjdGlvbl9pdGVtcy5pdGVtcygpOgorICAgZm9yIF94LF95IGluIHppcChfdlswXSxfdlsxXSk6CisgICAgICBpZiBub3QgX3ggaW4gX2xyX2FjdGlvbjogIF9scl9hY3Rpb25bX3hdID0geyB9CisgICAgICBfbHJfYWN0aW9uW194XVtfa10gPSBfeQorZGVsIF9scl9hY3Rpb25faXRlbXMKKyIiIikKKworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJcbl9scl9hY3Rpb24gPSB7ICIpOworICAgICAgICAgICAgICAgIGZvciBrLHYgaW4gc2VsZi5scl9hY3Rpb24uaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiKCVyLCVyKTolciwiICUgKGtbMF0sa1sxXSx2KSkKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJ9XG4iKTsKKworICAgICAgICAgICAgaWYgc21hbGxlcjoKKyAgICAgICAgICAgICAgICAjIEZhY3RvciBvdXQgbmFtZXMgdG8gdHJ5IGFuZCBtYWtlIHNtYWxsZXIKKyAgICAgICAgICAgICAgICBpdGVtcyA9IHsgfQorCisgICAgICAgICAgICAgICAgZm9yIHMsbmQgaW4gc2VsZi5scl9nb3RvLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgZm9yIG5hbWUsdiBpbiBuZC5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICAgIGkgPSBpdGVtcy5nZXQobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaToKKyAgICAgICAgICAgICAgICAgICAgICAgICBpID0gKFtdLFtdKQorICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zW25hbWVdID0gaQorICAgICAgICAgICAgICAgICAgICAgIGlbMF0uYXBwZW5kKHMpCisgICAgICAgICAgICAgICAgICAgICAgaVsxXS5hcHBlbmQodikKKworICAgICAgICAgICAgICAgIGYud3JpdGUoIlxuX2xyX2dvdG9faXRlbXMgPSB7IikKKyAgICAgICAgICAgICAgICBmb3Igayx2IGluIGl0ZW1zLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIiVyOihbIiAlIGspCisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHZbMF06CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIlciwiICUgaSkKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiXSxbIikKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gdlsxXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIiVyLCIgJSBpKQorCisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIl0pLCIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgifVxuIikKKworICAgICAgICAgICAgICAgIGYud3JpdGUoIiIiCitfbHJfZ290byA9IHsgfQorZm9yIF9rLCBfdiBpbiBfbHJfZ290b19pdGVtcy5pdGVtcygpOgorICAgZm9yIF94LF95IGluIHppcChfdlswXSxfdlsxXSk6CisgICAgICAgaWYgbm90IF94IGluIF9scl9nb3RvOiBfbHJfZ290b1tfeF0gPSB7IH0KKyAgICAgICBfbHJfZ290b1tfeF1bX2tdID0gX3kKK2RlbCBfbHJfZ290b19pdGVtcworIiIiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJcbl9scl9nb3RvID0geyAiKTsKKyAgICAgICAgICAgICAgICBmb3Igayx2IGluIHNlbGYubHJfZ290by5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIoJXIsJXIpOiVyLCIgJSAoa1swXSxrWzFdLHYpKQorICAgICAgICAgICAgICAgIGYud3JpdGUoIn1cbiIpOworCisgICAgICAgICAgICAjIFdyaXRlIHByb2R1Y3Rpb24gdGFibGUKKyAgICAgICAgICAgIGYud3JpdGUoIl9scl9wcm9kdWN0aW9ucyA9IFtcbiIpCisgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLmxyX3Byb2R1Y3Rpb25zOgorICAgICAgICAgICAgICAgIGlmIHAuZnVuYzoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiICAoJXIsJXIsJWQsJXIsJXIsJWQpLFxuIiAlIChwLnN0cixwLm5hbWUsIHAubGVuLCBwLmZ1bmMscC5maWxlLHAubGluZSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiICAoJXIsJXIsJWQsTm9uZSxOb25lLE5vbmUpLFxuIiAlIChzdHIocCkscC5uYW1lLCBwLmxlbikpCisgICAgICAgICAgICBmLndyaXRlKCJdXG4iKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlVuYWJsZSB0byBjcmVhdGUgJyVzJ1xuIiAlIGZpbGVuYW1lKQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShzdHIoZSkrIlxuIikKKyAgICAgICAgICAgIHJldHVybgorCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBwaWNrbGVfdGFibGUoKQorICAgICMKKyAgICAjIFRoaXMgZnVuY3Rpb24gcGlja2xlcyB0aGUgTFIgcGFyc2luZyB0YWJsZXMgdG8gYSBzdXBwbGllZCBmaWxlIG9iamVjdAorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBwaWNrbGVfdGFibGUoc2VsZixmaWxlbmFtZSxzaWduYXR1cmU9IiIpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgaW1wb3J0IHBpY2tsZQorICAgICAgICBvdXRmID0gb3BlbihmaWxlbmFtZSwid2IiKQorICAgICAgICBwaWNrbGUuZHVtcChfX3RhYnZlcnNpb25fXyxvdXRmLHBpY2tsZV9wcm90b2NvbCkKKyAgICAgICAgcGlja2xlLmR1bXAoc2VsZi5scl9tZXRob2Qsb3V0ZixwaWNrbGVfcHJvdG9jb2wpCisgICAgICAgIHBpY2tsZS5kdW1wKHNpZ25hdHVyZSxvdXRmLHBpY2tsZV9wcm90b2NvbCkKKyAgICAgICAgcGlja2xlLmR1bXAoc2VsZi5scl9hY3Rpb24sb3V0ZixwaWNrbGVfcHJvdG9jb2wpCisgICAgICAgIHBpY2tsZS5kdW1wKHNlbGYubHJfZ290byxvdXRmLHBpY2tsZV9wcm90b2NvbCkKKworICAgICAgICBvdXRwID0gW10KKyAgICAgICAgZm9yIHAgaW4gc2VsZi5scl9wcm9kdWN0aW9uczoKKyAgICAgICAgICAgIGlmIHAuZnVuYzoKKyAgICAgICAgICAgICAgICBvdXRwLmFwcGVuZCgocC5zdHIscC5uYW1lLCBwLmxlbiwgcC5mdW5jLHAuZmlsZSxwLmxpbmUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRwLmFwcGVuZCgoc3RyKHApLHAubmFtZSxwLmxlbixOb25lLE5vbmUsTm9uZSkpCisgICAgICAgIHBpY2tsZS5kdW1wKG91dHAsb3V0ZixwaWNrbGVfcHJvdG9jb2wpCisgICAgICAgIG91dGYuY2xvc2UoKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PSBJTlRST1NQRUNUSU9OID09PQorIworIyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhbmQgY2xhc3NlcyBhcmUgdXNlZCB0byBpbXBsZW1lbnQgdGhlIFBMWQorIyBpbnRyb3NwZWN0aW9uIGZlYXR1cmVzIGZvbGxvd2VkIGJ5IHRoZSB5YWNjKCkgZnVuY3Rpb24gaXRzZWxmLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGdldF9jYWxsZXJfbW9kdWxlX2RpY3QoKQorIworIyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBzeW1ib2xzIGRlZmluZWQgd2l0aGluCisjIGEgY2FsbGVyIGZ1cnRoZXIgZG93biB0aGUgY2FsbCBzdGFjay4gIFRoaXMgaXMgdXNlZCB0byBnZXQgdGhlIGVudmlyb25tZW50CisjIGFzc29jaWF0ZWQgd2l0aCB0aGUgeWFjYygpIGNhbGwgaWYgbm9uZSB3YXMgcHJvdmlkZWQuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBnZXRfY2FsbGVyX21vZHVsZV9kaWN0KGxldmVscyk6CisgICAgdHJ5OgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKyAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICBlLGIsdCA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIGYgPSB0LnRiX2ZyYW1lCisgICAgICAgIHdoaWxlIGxldmVscyA+IDA6CisgICAgICAgICAgICBmID0gZi5mX2JhY2sgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBsZXZlbHMgLT0gMQorICAgICAgICBsZGljdCA9IGYuZl9nbG9iYWxzLmNvcHkoKQorICAgICAgICBpZiBmLmZfZ2xvYmFscyAhPSBmLmZfbG9jYWxzOgorICAgICAgICAgICAgbGRpY3QudXBkYXRlKGYuZl9sb2NhbHMpCisKKyAgICAgICAgcmV0dXJuIGxkaWN0CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcGFyc2VfZ3JhbW1hcigpCisjCisjIFRoaXMgdGFrZXMgYSByYXcgZ3JhbW1hciBydWxlIHN0cmluZyBhbmQgcGFyc2VzIGl0IGludG8gcHJvZHVjdGlvbiBkYXRhCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWYgcGFyc2VfZ3JhbW1hcihkb2MsZmlsZSxsaW5lKToKKyAgICBncmFtbWFyID0gW10KKyAgICAjIFNwbGl0IHRoZSBkb2Mgc3RyaW5nIGludG8gbGluZXMKKyAgICBwc3RyaW5ncyA9IGRvYy5zcGxpdGxpbmVzKCkKKyAgICBsYXN0cCA9IE5vbmUKKyAgICBkbGluZSA9IGxpbmUKKyAgICBmb3IgcHMgaW4gcHN0cmluZ3M6CisgICAgICAgIGRsaW5lICs9IDEKKyAgICAgICAgcCA9IHBzLnNwbGl0KCkKKyAgICAgICAgaWYgbm90IHA6IGNvbnRpbnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHBbMF0gPT0gJ3wnOgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhIGNvbnRpbnVhdGlvbiBvZiBhIHByZXZpb3VzIHJ1bGUKKyAgICAgICAgICAgICAgICBpZiBub3QgbGFzdHA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCIlczolZDogTWlzcGxhY2VkICd8JyIgJSAoZmlsZSxkbGluZSkpCisgICAgICAgICAgICAgICAgcHJvZG5hbWUgPSBsYXN0cAorICAgICAgICAgICAgICAgIHN5bXMgPSBwWzE6XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcm9kbmFtZSA9IHBbMF0KKyAgICAgICAgICAgICAgICBsYXN0cCA9IHByb2RuYW1lCisgICAgICAgICAgICAgICAgc3ltcyAgID0gcFsyOl0KKyAgICAgICAgICAgICAgICBhc3NpZ24gPSBwWzFdCisgICAgICAgICAgICAgICAgaWYgYXNzaWduICE9ICc6JyBhbmQgYXNzaWduICE9ICc6Oj0nOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiJXM6JWQ6IFN5bnRheCBlcnJvci4gRXhwZWN0ZWQgJzonIiAlIChmaWxlLGRsaW5lKSkKKworICAgICAgICAgICAgZ3JhbW1hci5hcHBlbmQoKGZpbGUsZGxpbmUscHJvZG5hbWUsc3ltcykpCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiJXM6JWQ6IFN5bnRheCBlcnJvciBpbiBydWxlICclcyciICUgKGZpbGUsZGxpbmUscHMuc3RyaXAoKSkpCisKKyAgICByZXR1cm4gZ3JhbW1hcgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBhcnNlclJlZmxlY3QoKQorIworIyBUaGlzIGNsYXNzIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gZXh0cmFjdGVkIGZvciBidWlsZGluZyBhIHBhcnNlciBpbmNsdWRpbmcKKyMgc3RhcnQgc3ltYm9sLCBlcnJvciBmdW5jdGlvbiwgdG9rZW5zLCBwcmVjZWRlbmNlIGxpc3QsIGFjdGlvbiBmdW5jdGlvbnMsCisjIGV0Yy4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NsYXNzIFBhcnNlclJlZmxlY3Qob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZixwZGljdCxsb2c9Tm9uZSk6CisgICAgICAgIHNlbGYucGRpY3QgICAgICA9IHBkaWN0CisgICAgICAgIHNlbGYuc3RhcnQgICAgICA9IE5vbmUKKyAgICAgICAgc2VsZi5lcnJvcl9mdW5jID0gTm9uZQorICAgICAgICBzZWxmLnRva2VucyAgICAgPSBOb25lCisgICAgICAgIHNlbGYuZmlsZXMgICAgICA9IHt9CisgICAgICAgIHNlbGYuZ3JhbW1hciAgICA9IFtdCisgICAgICAgIHNlbGYuZXJyb3IgICAgICA9IDAKKworICAgICAgICBpZiBsb2cgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYubG9nID0gUGx5TG9nZ2VyKHN5cy5zdGRlcnIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmxvZyA9IGxvZworCisgICAgIyBHZXQgYWxsIG9mIHRoZSBiYXNpYyBpbmZvcm1hdGlvbgorICAgIGRlZiBnZXRfYWxsKHNlbGYpOgorICAgICAgICBzZWxmLmdldF9zdGFydCgpCisgICAgICAgIHNlbGYuZ2V0X2Vycm9yX2Z1bmMoKQorICAgICAgICBzZWxmLmdldF90b2tlbnMoKQorICAgICAgICBzZWxmLmdldF9wcmVjZWRlbmNlKCkKKyAgICAgICAgc2VsZi5nZXRfcGZ1bmN0aW9ucygpCisgICAgICAgIAorICAgICMgVmFsaWRhdGUgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbgorICAgIGRlZiB2YWxpZGF0ZV9hbGwoc2VsZik6CisgICAgICAgIHNlbGYudmFsaWRhdGVfc3RhcnQoKQorICAgICAgICBzZWxmLnZhbGlkYXRlX2Vycm9yX2Z1bmMoKQorICAgICAgICBzZWxmLnZhbGlkYXRlX3Rva2VucygpCisgICAgICAgIHNlbGYudmFsaWRhdGVfcHJlY2VkZW5jZSgpCisgICAgICAgIHNlbGYudmFsaWRhdGVfcGZ1bmN0aW9ucygpCisgICAgICAgIHNlbGYudmFsaWRhdGVfZmlsZXMoKQorICAgICAgICByZXR1cm4gc2VsZi5lcnJvcgorCisgICAgIyBDb21wdXRlIGEgc2lnbmF0dXJlIG92ZXIgdGhlIGdyYW1tYXIKKyAgICBkZWYgc2lnbmF0dXJlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIGhhc2hsaWIgaW1wb3J0IG1kNQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBmcm9tIG1kNSBpbXBvcnQgbWQ1CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNpZyA9IG1kNSgpCisgICAgICAgICAgICBpZiBzZWxmLnN0YXJ0OgorICAgICAgICAgICAgICAgIHNpZy51cGRhdGUoc2VsZi5zdGFydC5lbmNvZGUoJ2xhdGluLTEnKSkKKyAgICAgICAgICAgIGlmIHNlbGYucHJlYzoKKyAgICAgICAgICAgICAgICBzaWcudXBkYXRlKCIiLmpvaW4oWyIiLmpvaW4ocCkgZm9yIHAgaW4gc2VsZi5wcmVjXSkuZW5jb2RlKCdsYXRpbi0xJykpCisgICAgICAgICAgICBpZiBzZWxmLnRva2VuczoKKyAgICAgICAgICAgICAgICBzaWcudXBkYXRlKCIgIi5qb2luKHNlbGYudG9rZW5zKS5lbmNvZGUoJ2xhdGluLTEnKSkKKyAgICAgICAgICAgIGZvciBmIGluIHNlbGYucGZ1bmNzOgorICAgICAgICAgICAgICAgIGlmIGZbM106CisgICAgICAgICAgICAgICAgICAgIHNpZy51cGRhdGUoZlszXS5lbmNvZGUoJ2xhdGluLTEnKSkKKyAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsVmFsdWVFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiBzaWcuZGlnZXN0KCkKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHZhbGlkYXRlX2ZpbGUoKQorICAgICMKKyAgICAjIFRoaXMgbWV0aG9kIGNoZWNrcyB0byBzZWUgaWYgdGhlcmUgYXJlIGR1cGxpY2F0ZWQgcF9ydWxlbmFtZSgpIGZ1bmN0aW9ucworICAgICMgaW4gdGhlIHBhcnNlciBtb2R1bGUgZmlsZS4gIFdpdGhvdXQgdGhpcyBmdW5jdGlvbiwgaXQgaXMgcmVhbGx5IGVhc3kgZm9yCisgICAgIyB1c2VycyB0byBtYWtlIG1pc3Rha2VzIGJ5IGN1dHRpbmcgYW5kIHBhc3RpbmcgY29kZSBmcmFnbWVudHMgKGFuZCBpdCdzIGEgcmVhbAorICAgICMgYnVnZ2VyIHRvIHRyeSBhbmQgZmlndXJlIG91dCB3aHkgdGhlIHJlc3VsdGluZyBwYXJzZXIgZG9lc24ndCB3b3JrKS4gIFRoZXJlZm9yZSwKKyAgICAjIHdlIGp1c3QgZG8gYSBsaXR0bGUgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gbWF0Y2hpbmcgb2YgZGVmIHN0YXRlbWVudHMKKyAgICAjIHRvIHRyeSBhbmQgZGV0ZWN0IGR1cGxpY2F0ZXMuCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHZhbGlkYXRlX2ZpbGVzKHNlbGYpOgorICAgICAgICAjIE1hdGNoIGRlZiBwX2Z1bmNuYW1lKAorICAgICAgICBmcmUgPSByZS5jb21waWxlKHInXHMqZGVmXHMrKHBfW2EtekEtWl8wLTldKilcKCcpCisKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIHNlbGYuZmlsZXMua2V5cygpOgorICAgICAgICAgICAgYmFzZSxleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQorICAgICAgICAgICAgaWYgZXh0ICE9ICcucHknOiByZXR1cm4gMSAgICAgICAgICAjIE5vIGlkZWEuIEFzc3VtZSBpdCdzIG9rYXkuCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGNvdW50aGFzaCA9IHsgfQorICAgICAgICAgICAgZm9yIGxpbmVuLGwgaW4gZW51bWVyYXRlKGxpbmVzKToKKyAgICAgICAgICAgICAgICBsaW5lbiArPSAxCisgICAgICAgICAgICAgICAgbSA9IGZyZS5tYXRjaChsKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgIHByZXYgPSBjb3VudGhhc2guZ2V0KG5hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwcmV2OgorICAgICAgICAgICAgICAgICAgICAgICAgY291bnRoYXNoW25hbWVdID0gbGluZW4KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLndhcm5pbmcoIiVzOiVkOiBGdW5jdGlvbiAlcyByZWRlZmluZWQuIFByZXZpb3VzbHkgZGVmaW5lZCBvbiBsaW5lICVkIiwgZmlsZW5hbWUsbGluZW4sbmFtZSxwcmV2KQorCisgICAgIyBHZXQgdGhlIHN0YXJ0IHN5bWJvbAorICAgIGRlZiBnZXRfc3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYuc3RhcnQgPSBzZWxmLnBkaWN0LmdldCgnc3RhcnQnKQorCisgICAgIyBWYWxpZGF0ZSB0aGUgc3RhcnQgc3ltYm9sCisgICAgZGVmIHZhbGlkYXRlX3N0YXJ0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLnN0YXJ0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5zdGFydCxzdHIpOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCInc3RhcnQnIG11c3QgYmUgYSBzdHJpbmciKQorCisgICAgIyBMb29rIGZvciBlcnJvciBoYW5kbGVyCisgICAgZGVmIGdldF9lcnJvcl9mdW5jKHNlbGYpOgorICAgICAgICBzZWxmLmVycm9yX2Z1bmMgPSBzZWxmLnBkaWN0LmdldCgncF9lcnJvcicpCisKKyAgICAjIFZhbGlkYXRlIHRoZSBlcnJvciBmdW5jdGlvbgorICAgIGRlZiB2YWxpZGF0ZV9lcnJvcl9mdW5jKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmVycm9yX2Z1bmM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuZXJyb3JfZnVuYyx0eXBlcy5GdW5jdGlvblR5cGUpOgorICAgICAgICAgICAgICAgIGlzbWV0aG9kID0gMAorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHNlbGYuZXJyb3JfZnVuYywgdHlwZXMuTWV0aG9kVHlwZSk6CisgICAgICAgICAgICAgICAgaXNtZXRob2QgPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIncF9lcnJvcicgZGVmaW5lZCwgYnV0IGlzIG5vdCBhIGZ1bmN0aW9uIG9yIG1ldGhvZCIpCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgZWxpbmUgPSBmdW5jX2NvZGUoc2VsZi5lcnJvcl9mdW5jKS5jb19maXJzdGxpbmVubworICAgICAgICAgICAgZWZpbGUgPSBmdW5jX2NvZGUoc2VsZi5lcnJvcl9mdW5jKS5jb19maWxlbmFtZQorICAgICAgICAgICAgc2VsZi5maWxlc1tlZmlsZV0gPSAxCisKKyAgICAgICAgICAgIGlmIChmdW5jX2NvZGUoc2VsZi5lcnJvcl9mdW5jKS5jb19hcmdjb3VudCAhPSAxK2lzbWV0aG9kKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXM6JWQ6IHBfZXJyb3IoKSByZXF1aXJlcyAxIGFyZ3VtZW50IixlZmlsZSxlbGluZSkKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorCisgICAgIyBHZXQgdGhlIHRva2VucyBtYXAKKyAgICBkZWYgZ2V0X3Rva2VucyhzZWxmKToKKyAgICAgICAgdG9rZW5zID0gc2VsZi5wZGljdC5nZXQoInRva2VucyIsTm9uZSkKKyAgICAgICAgaWYgbm90IHRva2VuczoKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJObyB0b2tlbiBsaXN0IGlzIGRlZmluZWQiKQorICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRva2VucywobGlzdCwgdHVwbGUpKToKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJ0b2tlbnMgbXVzdCBiZSBhIGxpc3Qgb3IgdHVwbGUiKQorICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAKKyAgICAgICAgaWYgbm90IHRva2VuczoKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJ0b2tlbnMgaXMgZW1wdHkiKQorICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYudG9rZW5zID0gdG9rZW5zCisKKyAgICAjIFZhbGlkYXRlIHRoZSB0b2tlbnMKKyAgICBkZWYgdmFsaWRhdGVfdG9rZW5zKHNlbGYpOgorICAgICAgICAjIFZhbGlkYXRlIHRoZSB0b2tlbnMuCisgICAgICAgIGlmICdlcnJvcicgaW4gc2VsZi50b2tlbnM6CisgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiSWxsZWdhbCB0b2tlbiBuYW1lICdlcnJvcicuIElzIGEgcmVzZXJ2ZWQgd29yZCIpCisgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdGVybWluYWxzID0ge30KKyAgICAgICAgZm9yIG4gaW4gc2VsZi50b2tlbnM6CisgICAgICAgICAgICBpZiBuIGluIHRlcm1pbmFsczoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy53YXJuaW5nKCJUb2tlbiAnJXMnIG11bHRpcGx5IGRlZmluZWQiLCBuKQorICAgICAgICAgICAgdGVybWluYWxzW25dID0gMQorCisgICAgIyBHZXQgdGhlIHByZWNlZGVuY2UgbWFwIChpZiBhbnkpCisgICAgZGVmIGdldF9wcmVjZWRlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLnByZWMgPSBzZWxmLnBkaWN0LmdldCgicHJlY2VkZW5jZSIsTm9uZSkKKworICAgICMgVmFsaWRhdGUgYW5kIHBhcnNlIHRoZSBwcmVjZWRlbmNlIG1hcAorICAgIGRlZiB2YWxpZGF0ZV9wcmVjZWRlbmNlKHNlbGYpOgorICAgICAgICBwcmVjbGlzdCA9IFtdCisgICAgICAgIGlmIHNlbGYucHJlYzoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYucHJlYywobGlzdCx0dXBsZSkpOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJwcmVjZWRlbmNlIG11c3QgYmUgYSBsaXN0IG9yIHR1cGxlIikKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZm9yIGxldmVsLHAgaW4gZW51bWVyYXRlKHNlbGYucHJlYyk6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocCwobGlzdCx0dXBsZSkpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiQmFkIHByZWNlZGVuY2UgdGFibGUiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgICAgIGlmIGxlbihwKSA8IDI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJNYWxmb3JtZWQgcHJlY2VkZW5jZSBlbnRyeSAlcy4gTXVzdCBiZSAoYXNzb2MsIHRlcm0sIC4uLiwgdGVybSkiLHApCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGFzc29jID0gcFswXQorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFzc29jLHN0cik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJwcmVjZWRlbmNlIGFzc29jaWF0aXZpdHkgbXVzdCBiZSBhIHN0cmluZyIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGZvciB0ZXJtIGluIHBbMTpdOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0ZXJtLHN0cik6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigicHJlY2VkZW5jZSBpdGVtcyBtdXN0IGJlIHN0cmluZ3MiKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICBwcmVjbGlzdC5hcHBlbmQoKHRlcm0sYXNzb2MsbGV2ZWwrMSkpCisgICAgICAgIHNlbGYucHJlY2xpc3QgPSBwcmVjbGlzdAorCisgICAgIyBHZXQgYWxsIHBfZnVuY3Rpb25zIGZyb20gdGhlIGdyYW1tYXIKKyAgICBkZWYgZ2V0X3BmdW5jdGlvbnMoc2VsZik6CisgICAgICAgIHBfZnVuY3Rpb25zID0gW10KKyAgICAgICAgZm9yIG5hbWUsIGl0ZW0gaW4gc2VsZi5wZGljdC5pdGVtcygpOgorICAgICAgICAgICAgaWYgbmFtZVs6Ml0gIT0gJ3BfJzogY29udGludWUKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gJ3BfZXJyb3InOiBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpdGVtLCh0eXBlcy5GdW5jdGlvblR5cGUsdHlwZXMuTWV0aG9kVHlwZSkpOgorICAgICAgICAgICAgICAgIGxpbmUgPSBmdW5jX2NvZGUoaXRlbSkuY29fZmlyc3RsaW5lbm8KKyAgICAgICAgICAgICAgICBmaWxlID0gZnVuY19jb2RlKGl0ZW0pLmNvX2ZpbGVuYW1lCisgICAgICAgICAgICAgICAgcF9mdW5jdGlvbnMuYXBwZW5kKChsaW5lLGZpbGUsbmFtZSxpdGVtLl9fZG9jX18pKQorCisgICAgICAgICMgU29ydCBhbGwgb2YgdGhlIGFjdGlvbnMgYnkgbGluZSBudW1iZXIKKyAgICAgICAgcF9mdW5jdGlvbnMuc29ydCgpCisgICAgICAgIHNlbGYucGZ1bmNzID0gcF9mdW5jdGlvbnMKKworCisgICAgIyBWYWxpZGF0ZSBhbGwgb2YgdGhlIHBfZnVuY3Rpb25zCisgICAgZGVmIHZhbGlkYXRlX3BmdW5jdGlvbnMoc2VsZik6CisgICAgICAgIGdyYW1tYXIgPSBbXQorICAgICAgICAjIENoZWNrIGZvciBub24tZW1wdHkgc3ltYm9scworICAgICAgICBpZiBsZW4oc2VsZi5wZnVuY3MpID09IDA6CisgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigibm8gcnVsZXMgb2YgdGhlIGZvcm0gcF9ydWxlbmFtZSBhcmUgZGVmaW5lZCIpCisgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgcmV0dXJuIAorICAgICAgICAKKyAgICAgICAgZm9yIGxpbmUsIGZpbGUsIG5hbWUsIGRvYyBpbiBzZWxmLnBmdW5jczoKKyAgICAgICAgICAgIGZ1bmMgPSBzZWxmLnBkaWN0W25hbWVdCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGZ1bmMsIHR5cGVzLk1ldGhvZFR5cGUpOgorICAgICAgICAgICAgICAgIHJlcWFyZ3MgPSAyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlcWFyZ3MgPSAxCisgICAgICAgICAgICBpZiBmdW5jX2NvZGUoZnVuYykuY29fYXJnY291bnQgPiByZXFhcmdzOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlczolZDogUnVsZSAnJXMnIGhhcyB0b28gbWFueSBhcmd1bWVudHMiLGZpbGUsbGluZSxmdW5jLl9fbmFtZV9fKQorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICBlbGlmIGZ1bmNfY29kZShmdW5jKS5jb19hcmdjb3VudCA8IHJlcWFyZ3M6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzOiVkOiBSdWxlICclcycgcmVxdWlyZXMgYW4gYXJndW1lbnQiLGZpbGUsbGluZSxmdW5jLl9fbmFtZV9fKQorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICBlbGlmIG5vdCBmdW5jLl9fZG9jX186CisgICAgICAgICAgICAgICAgc2VsZi5sb2cud2FybmluZygiJXM6JWQ6IE5vIGRvY3VtZW50YXRpb24gc3RyaW5nIHNwZWNpZmllZCBpbiBmdW5jdGlvbiAnJXMnIChpZ25vcmVkKSIsZmlsZSxsaW5lLGZ1bmMuX19uYW1lX18pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VkX2cgPSBwYXJzZV9ncmFtbWFyKGRvYyxmaWxlLGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGZvciBnIGluIHBhcnNlZF9nOgorICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hci5hcHBlbmQoKG5hbWUsIGcpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKHN0cihlKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKworICAgICAgICAgICAgICAgICMgTG9va3MgbGlrZSBhIHZhbGlkIGdyYW1tYXIgcnVsZQorICAgICAgICAgICAgICAgICMgTWFyayB0aGUgZmlsZSBpbiB3aGljaCBkZWZpbmVkLgorICAgICAgICAgICAgICAgIHNlbGYuZmlsZXNbZmlsZV0gPSAxCisKKyAgICAgICAgIyBTZWNvbmRhcnkgdmFsaWRhdGlvbiBzdGVwIHRoYXQgbG9va3MgZm9yIHBfIGRlZmluaXRpb25zIHRoYXQgYXJlIG5vdCBmdW5jdGlvbnMKKyAgICAgICAgIyBvciBmdW5jdGlvbnMgdGhhdCBsb29rIGxpa2UgdGhleSBtaWdodCBiZSBncmFtbWFyIHJ1bGVzLgorCisgICAgICAgIGZvciBuLHYgaW4gc2VsZi5wZGljdC5pdGVtcygpOgorICAgICAgICAgICAgaWYgblswOjJdID09ICdwXycgYW5kIGlzaW5zdGFuY2UodiwgKHR5cGVzLkZ1bmN0aW9uVHlwZSwgdHlwZXMuTWV0aG9kVHlwZSkpOiBjb250aW51ZQorICAgICAgICAgICAgaWYgblswOjJdID09ICd0Xyc6IGNvbnRpbnVlCisgICAgICAgICAgICBpZiBuWzA6Ml0gPT0gJ3BfJyBhbmQgbiAhPSAncF9lcnJvcic6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cud2FybmluZygiJyVzJyBub3QgZGVmaW5lZCBhcyBhIGZ1bmN0aW9uIiwgbikKKyAgICAgICAgICAgIGlmICgoaXNpbnN0YW5jZSh2LHR5cGVzLkZ1bmN0aW9uVHlwZSkgYW5kIGZ1bmNfY29kZSh2KS5jb19hcmdjb3VudCA9PSAxKSBvcgorICAgICAgICAgICAgICAgIChpc2luc3RhbmNlKHYsdHlwZXMuTWV0aG9kVHlwZSkgYW5kIGZ1bmNfY29kZSh2KS5jb19hcmdjb3VudCA9PSAyKSk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkb2MgPSB2Ll9fZG9jX18uc3BsaXQoIiAiKQorICAgICAgICAgICAgICAgICAgICBpZiBkb2NbMV0gPT0gJzonOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cud2FybmluZygiJXM6JWQ6IFBvc3NpYmxlIGdyYW1tYXIgcnVsZSAnJXMnIGRlZmluZWQgd2l0aG91dCBwXyBwcmVmaXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2NvZGUodikuY29fZmlsZW5hbWUsIGZ1bmNfY29kZSh2KS5jb19maXJzdGxpbmVubyxuKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmdyYW1tYXIgPSBncmFtbWFyCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgeWFjYyhtb2R1bGUpCisjCisjIEJ1aWxkIGEgcGFyc2VyCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiB5YWNjKG1ldGhvZD0nTEFMUicsIGRlYnVnPXlhY2NkZWJ1ZywgbW9kdWxlPU5vbmUsIHRhYm1vZHVsZT10YWJfbW9kdWxlLCBzdGFydD1Ob25lLCAKKyAgICAgICAgIGNoZWNrX3JlY3Vyc2lvbj0xLCBvcHRpbWl6ZT0wLCB3cml0ZV90YWJsZXM9MSwgZGVidWdmaWxlPWRlYnVnX2ZpbGUsb3V0cHV0ZGlyPScnLAorICAgICAgICAgZGVidWdsb2c9Tm9uZSwgZXJyb3Jsb2cgPSBOb25lLCBwaWNrbGVmaWxlPU5vbmUpOgorCisgICAgZ2xvYmFsIHBhcnNlICAgICAgICAgICAgICAgICAjIFJlZmVyZW5jZSB0byB0aGUgcGFyc2luZyBtZXRob2Qgb2YgdGhlIGxhc3QgYnVpbHQgcGFyc2VyCisKKyAgICAjIElmIHBpY2tsaW5nIGlzIGVuYWJsZWQsIHRhYmxlIGZpbGVzIGFyZSBub3QgY3JlYXRlZAorCisgICAgaWYgcGlja2xlZmlsZToKKyAgICAgICAgd3JpdGVfdGFibGVzID0gMAorCisgICAgaWYgZXJyb3Jsb2cgaXMgTm9uZToKKyAgICAgICAgZXJyb3Jsb2cgPSBQbHlMb2dnZXIoc3lzLnN0ZGVycikKKworICAgICMgR2V0IHRoZSBtb2R1bGUgZGljdGlvbmFyeSB1c2VkIGZvciB0aGUgcGFyc2VyCisgICAgaWYgbW9kdWxlOgorICAgICAgICBfaXRlbXMgPSBbKGssZ2V0YXR0cihtb2R1bGUsaykpIGZvciBrIGluIGRpcihtb2R1bGUpXQorICAgICAgICBwZGljdCA9IGRpY3QoX2l0ZW1zKQorICAgIGVsc2U6CisgICAgICAgIHBkaWN0ID0gZ2V0X2NhbGxlcl9tb2R1bGVfZGljdCgyKQorCisgICAgIyBDb2xsZWN0IHBhcnNlciBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkaWN0aW9uYXJ5CisgICAgcGluZm8gPSBQYXJzZXJSZWZsZWN0KHBkaWN0LGxvZz1lcnJvcmxvZykKKyAgICBwaW5mby5nZXRfYWxsKCkKKworICAgIGlmIHBpbmZvLmVycm9yOgorICAgICAgICByYWlzZSBZYWNjRXJyb3IoIlVuYWJsZSB0byBidWlsZCBwYXJzZXIiKQorCisgICAgIyBDaGVjayBzaWduYXR1cmUgYWdhaW5zdCB0YWJsZSBmaWxlcyAoaWYgYW55KQorICAgIHNpZ25hdHVyZSA9IHBpbmZvLnNpZ25hdHVyZSgpCisKKyAgICAjIFJlYWQgdGhlIHRhYmxlcworICAgIHRyeToKKyAgICAgICAgbHIgPSBMUlRhYmxlKCkKKyAgICAgICAgaWYgcGlja2xlZmlsZToKKyAgICAgICAgICAgIHJlYWRfc2lnbmF0dXJlID0gbHIucmVhZF9waWNrbGUocGlja2xlZmlsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlYWRfc2lnbmF0dXJlID0gbHIucmVhZF90YWJsZSh0YWJtb2R1bGUpCisgICAgICAgIGlmIG9wdGltaXplIG9yIChyZWFkX3NpZ25hdHVyZSA9PSBzaWduYXR1cmUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxyLmJpbmRfY2FsbGFibGVzKHBpbmZvLnBkaWN0KQorICAgICAgICAgICAgICAgIHBhcnNlciA9IExSUGFyc2VyKGxyLHBpbmZvLmVycm9yX2Z1bmMpCisgICAgICAgICAgICAgICAgcGFyc2UgPSBwYXJzZXIucGFyc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VyCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICAgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIlRoZXJlIHdhcyBhIHByb2JsZW0gbG9hZGluZyB0aGUgdGFibGUgZmlsZTogJXMiLCByZXByKGUpKQorICAgIGV4Y2VwdCBWZXJzaW9uRXJyb3I6CisgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICBlcnJvcmxvZy53YXJuaW5nKHN0cihlKSkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBwYXNzCisKKyAgICBpZiBkZWJ1Z2xvZyBpcyBOb25lOgorICAgICAgICBpZiBkZWJ1ZzoKKyAgICAgICAgICAgIGRlYnVnbG9nID0gUGx5TG9nZ2VyKG9wZW4oZGVidWdmaWxlLCJ3IikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWJ1Z2xvZyA9IE51bGxMb2dnZXIoKQorCisgICAgZGVidWdsb2cuaW5mbygiQ3JlYXRlZCBieSBQTFkgdmVyc2lvbiAlcyAoaHR0cDovL3d3dy5kYWJlYXouY29tL3BseSkiLCBfX3ZlcnNpb25fXykKKworCisgICAgZXJyb3JzID0gMAorCisgICAgIyBWYWxpZGF0ZSB0aGUgcGFyc2VyIGluZm9ybWF0aW9uCisgICAgaWYgcGluZm8udmFsaWRhdGVfYWxsKCk6CisgICAgICAgIHJhaXNlIFlhY2NFcnJvcigiVW5hYmxlIHRvIGJ1aWxkIHBhcnNlciIpCisgICAgCisgICAgaWYgbm90IHBpbmZvLmVycm9yX2Z1bmM6CisgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIm5vIHBfZXJyb3IoKSBmdW5jdGlvbiBpcyBkZWZpbmVkIikKKworICAgICMgQ3JlYXRlIGEgZ3JhbW1hciBvYmplY3QKKyAgICBncmFtbWFyID0gR3JhbW1hcihwaW5mby50b2tlbnMpCisKKyAgICAjIFNldCBwcmVjZWRlbmNlIGxldmVsIGZvciB0ZXJtaW5hbHMKKyAgICBmb3IgdGVybSwgYXNzb2MsIGxldmVsIGluIHBpbmZvLnByZWNsaXN0OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBncmFtbWFyLnNldF9wcmVjZWRlbmNlKHRlcm0sYXNzb2MsbGV2ZWwpCisgICAgICAgIGV4Y2VwdCBHcmFtbWFyRXJyb3I6CisgICAgICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIiVzIixzdHIoZSkpCisKKyAgICAjIEFkZCBwcm9kdWN0aW9ucyB0byB0aGUgZ3JhbW1hcgorICAgIGZvciBmdW5jbmFtZSwgZ3JhbSBpbiBwaW5mby5ncmFtbWFyOgorICAgICAgICBmaWxlLCBsaW5lLCBwcm9kbmFtZSwgc3ltcyA9IGdyYW0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZ3JhbW1hci5hZGRfcHJvZHVjdGlvbihwcm9kbmFtZSxzeW1zLGZ1bmNuYW1lLGZpbGUsbGluZSkKKyAgICAgICAgZXhjZXB0IEdyYW1tYXJFcnJvcjoKKyAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICAgICAgZXJyb3Jsb2cuZXJyb3IoIiVzIixzdHIoZSkpCisgICAgICAgICAgICBlcnJvcnMgPSAxCisKKyAgICAjIFNldCB0aGUgZ3JhbW1hciBzdGFydCBzeW1ib2xzCisgICAgdHJ5OgorICAgICAgICBpZiBzdGFydCBpcyBOb25lOgorICAgICAgICAgICAgZ3JhbW1hci5zZXRfc3RhcnQocGluZm8uc3RhcnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBncmFtbWFyLnNldF9zdGFydChzdGFydCkKKyAgICBleGNlcHQgR3JhbW1hckVycm9yOgorICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgZXJyb3Jsb2cuZXJyb3Ioc3RyKGUpKQorICAgICAgICBlcnJvcnMgPSAxCisKKyAgICBpZiBlcnJvcnM6CisgICAgICAgIHJhaXNlIFlhY2NFcnJvcigiVW5hYmxlIHRvIGJ1aWxkIHBhcnNlciIpCisKKyAgICAjIFZlcmlmeSB0aGUgZ3JhbW1hciBzdHJ1Y3R1cmUKKyAgICB1bmRlZmluZWRfc3ltYm9scyA9IGdyYW1tYXIudW5kZWZpbmVkX3N5bWJvbHMoKQorICAgIGZvciBzeW0sIHByb2QgaW4gdW5kZWZpbmVkX3N5bWJvbHM6CisgICAgICAgIGVycm9ybG9nLmVycm9yKCIlczolZDogU3ltYm9sICclcycgdXNlZCwgYnV0IG5vdCBkZWZpbmVkIGFzIGEgdG9rZW4gb3IgYSBydWxlIixwcm9kLmZpbGUscHJvZC5saW5lLHN5bSkKKyAgICAgICAgZXJyb3JzID0gMQorCisgICAgdW51c2VkX3Rlcm1pbmFscyA9IGdyYW1tYXIudW51c2VkX3Rlcm1pbmFscygpCisgICAgaWYgdW51c2VkX3Rlcm1pbmFsczoKKyAgICAgICAgZGVidWdsb2cuaW5mbygiIikKKyAgICAgICAgZGVidWdsb2cuaW5mbygiVW51c2VkIHRlcm1pbmFsczoiKQorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCIiKQorICAgICAgICBmb3IgdGVybSBpbiB1bnVzZWRfdGVybWluYWxzOgorICAgICAgICAgICAgZXJyb3Jsb2cud2FybmluZygiVG9rZW4gJyVzJyBkZWZpbmVkLCBidXQgbm90IHVzZWQiLCB0ZXJtKQorICAgICAgICAgICAgZGVidWdsb2cuaW5mbygiICAgICVzIiwgdGVybSkKKworICAgICMgUHJpbnQgb3V0IGFsbCBwcm9kdWN0aW9ucyB0byB0aGUgZGVidWcgbG9nCisgICAgaWYgZGVidWc6CisgICAgICAgIGRlYnVnbG9nLmluZm8oIiIpCisgICAgICAgIGRlYnVnbG9nLmluZm8oIkdyYW1tYXIiKQorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCIiKQorICAgICAgICBmb3IgbixwIGluIGVudW1lcmF0ZShncmFtbWFyLlByb2R1Y3Rpb25zKToKKyAgICAgICAgICAgIGRlYnVnbG9nLmluZm8oIlJ1bGUgJS01ZCAlcyIsIG4sIHApCisKKyAgICAjIEZpbmQgdW51c2VkIG5vbi10ZXJtaW5hbHMKKyAgICB1bnVzZWRfcnVsZXMgPSBncmFtbWFyLnVudXNlZF9ydWxlcygpCisgICAgZm9yIHByb2QgaW4gdW51c2VkX3J1bGVzOgorICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCIlczolZDogUnVsZSAnJXMnIGRlZmluZWQsIGJ1dCBub3QgdXNlZCIsIHByb2QuZmlsZSwgcHJvZC5saW5lLCBwcm9kLm5hbWUpCisKKyAgICBpZiBsZW4odW51c2VkX3Rlcm1pbmFscykgPT0gMToKKyAgICAgICAgZXJyb3Jsb2cud2FybmluZygiVGhlcmUgaXMgMSB1bnVzZWQgdG9rZW4iKQorICAgIGlmIGxlbih1bnVzZWRfdGVybWluYWxzKSA+IDE6CisgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIlRoZXJlIGFyZSAlZCB1bnVzZWQgdG9rZW5zIiwgbGVuKHVudXNlZF90ZXJtaW5hbHMpKQorCisgICAgaWYgbGVuKHVudXNlZF9ydWxlcykgPT0gMToKKyAgICAgICAgZXJyb3Jsb2cud2FybmluZygiVGhlcmUgaXMgMSB1bnVzZWQgcnVsZSIpCisgICAgaWYgbGVuKHVudXNlZF9ydWxlcykgPiAxOgorICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJUaGVyZSBhcmUgJWQgdW51c2VkIHJ1bGVzIiwgbGVuKHVudXNlZF9ydWxlcykpCisKKyAgICBpZiBkZWJ1ZzoKKyAgICAgICAgZGVidWdsb2cuaW5mbygiIikKKyAgICAgICAgZGVidWdsb2cuaW5mbygiVGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIikKKyAgICAgICAgZGVidWdsb2cuaW5mbygiIikKKyAgICAgICAgdGVybXMgPSBsaXN0KGdyYW1tYXIuVGVybWluYWxzKQorICAgICAgICB0ZXJtcy5zb3J0KCkKKyAgICAgICAgZm9yIHRlcm0gaW4gdGVybXM6CisgICAgICAgICAgICBkZWJ1Z2xvZy5pbmZvKCIlLTIwcyA6ICVzIiwgdGVybSwgIiAiLmpvaW4oW3N0cihzKSBmb3IgcyBpbiBncmFtbWFyLlRlcm1pbmFsc1t0ZXJtXV0pKQorICAgICAgICAKKyAgICAgICAgZGVidWdsb2cuaW5mbygiIikKKyAgICAgICAgZGVidWdsb2cuaW5mbygiTm9udGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRoZXkgYXBwZWFyIikKKyAgICAgICAgZGVidWdsb2cuaW5mbygiIikKKyAgICAgICAgbm9udGVybXMgPSBsaXN0KGdyYW1tYXIuTm9udGVybWluYWxzKQorICAgICAgICBub250ZXJtcy5zb3J0KCkKKyAgICAgICAgZm9yIG5vbnRlcm0gaW4gbm9udGVybXM6CisgICAgICAgICAgICBkZWJ1Z2xvZy5pbmZvKCIlLTIwcyA6ICVzIiwgbm9udGVybSwgIiAiLmpvaW4oW3N0cihzKSBmb3IgcyBpbiBncmFtbWFyLk5vbnRlcm1pbmFsc1tub250ZXJtXV0pKQorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCIiKQorCisgICAgaWYgY2hlY2tfcmVjdXJzaW9uOgorICAgICAgICB1bnJlYWNoYWJsZSA9IGdyYW1tYXIuZmluZF91bnJlYWNoYWJsZSgpCisgICAgICAgIGZvciB1IGluIHVucmVhY2hhYmxlOgorICAgICAgICAgICAgZXJyb3Jsb2cud2FybmluZygiU3ltYm9sICclcycgaXMgdW5yZWFjaGFibGUiLHUpCisKKyAgICAgICAgaW5maW5pdGUgPSBncmFtbWFyLmluZmluaXRlX2N5Y2xlcygpCisgICAgICAgIGZvciBpbmYgaW4gaW5maW5pdGU6CisgICAgICAgICAgICBlcnJvcmxvZy5lcnJvcigiSW5maW5pdGUgcmVjdXJzaW9uIGRldGVjdGVkIGZvciBzeW1ib2wgJyVzJyIsIGluZikKKyAgICAgICAgICAgIGVycm9ycyA9IDEKKyAgICAgICAgCisgICAgdW51c2VkX3ByZWMgPSBncmFtbWFyLnVudXNlZF9wcmVjZWRlbmNlKCkKKyAgICBmb3IgdGVybSwgYXNzb2MgaW4gdW51c2VkX3ByZWM6CisgICAgICAgIGVycm9ybG9nLmVycm9yKCJQcmVjZWRlbmNlIHJ1bGUgJyVzJyBkZWZpbmVkIGZvciB1bmtub3duIHN5bWJvbCAnJXMnIiwgYXNzb2MsIHRlcm0pCisgICAgICAgIGVycm9ycyA9IDEKKworICAgIGlmIGVycm9yczoKKyAgICAgICAgcmFpc2UgWWFjY0Vycm9yKCJVbmFibGUgdG8gYnVpbGQgcGFyc2VyIikKKyAgICAKKyAgICAjIFJ1biB0aGUgTFJHZW5lcmF0ZWRUYWJsZSBvbiB0aGUgZ3JhbW1hcgorICAgIGlmIGRlYnVnOgorICAgICAgICBlcnJvcmxvZy5kZWJ1ZygiR2VuZXJhdGluZyAlcyB0YWJsZXMiLCBtZXRob2QpCisgICAgICAgICAgICAKKyAgICBsciA9IExSR2VuZXJhdGVkVGFibGUoZ3JhbW1hcixtZXRob2QsZGVidWdsb2cpCisKKyAgICBpZiBkZWJ1ZzoKKyAgICAgICAgbnVtX3NyID0gbGVuKGxyLnNyX2NvbmZsaWN0cykKKworICAgICAgICAjIFJlcG9ydCBzaGlmdC9yZWR1Y2UgYW5kIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzCisgICAgICAgIGlmIG51bV9zciA9PSAxOgorICAgICAgICAgICAgZXJyb3Jsb2cud2FybmluZygiMSBzaGlmdC9yZWR1Y2UgY29uZmxpY3QiKQorICAgICAgICBlbGlmIG51bV9zciA+IDE6CisgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCIlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzIiwgbnVtX3NyKQorCisgICAgICAgIG51bV9yciA9IGxlbihsci5ycl9jb25mbGljdHMpCisgICAgICAgIGlmIG51bV9yciA9PSAxOgorICAgICAgICAgICAgZXJyb3Jsb2cud2FybmluZygiMSByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IikKKyAgICAgICAgZWxpZiBudW1fcnIgPiAxOgorICAgICAgICAgICAgZXJyb3Jsb2cud2FybmluZygiJWQgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMiLCBudW1fcnIpCisKKyAgICAjIFdyaXRlIG91dCBjb25mbGljdHMgdG8gdGhlIG91dHB1dCBmaWxlCisgICAgaWYgZGVidWcgYW5kIChsci5zcl9jb25mbGljdHMgb3IgbHIucnJfY29uZmxpY3RzKToKKyAgICAgICAgZGVidWdsb2cud2FybmluZygiIikKKyAgICAgICAgZGVidWdsb2cud2FybmluZygiQ29uZmxpY3RzOiIpCisgICAgICAgIGRlYnVnbG9nLndhcm5pbmcoIiIpCisKKyAgICAgICAgZm9yIHN0YXRlLCB0b2ssIHJlc29sdXRpb24gaW4gbHIuc3JfY29uZmxpY3RzOgorICAgICAgICAgICAgZGVidWdsb2cud2FybmluZygic2hpZnQvcmVkdWNlIGNvbmZsaWN0IGZvciAlcyBpbiBzdGF0ZSAlZCByZXNvbHZlZCBhcyAlcyIsICB0b2ssIHN0YXRlLCByZXNvbHV0aW9uKQorICAgICAgICAKKyAgICAgICAgYWxyZWFkeV9yZXBvcnRlZCA9IHt9CisgICAgICAgIGZvciBzdGF0ZSwgcnVsZSwgcmVqZWN0ZWQgaW4gbHIucnJfY29uZmxpY3RzOgorICAgICAgICAgICAgaWYgKHN0YXRlLGlkKHJ1bGUpLGlkKHJlamVjdGVkKSkgaW4gYWxyZWFkeV9yZXBvcnRlZDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZGVidWdsb2cud2FybmluZygicmVkdWNlL3JlZHVjZSBjb25mbGljdCBpbiBzdGF0ZSAlZCByZXNvbHZlZCB1c2luZyBydWxlICglcykiLCBzdGF0ZSwgcnVsZSkKKyAgICAgICAgICAgIGRlYnVnbG9nLndhcm5pbmcoInJlamVjdGVkIHJ1bGUgKCVzKSBpbiBzdGF0ZSAlZCIsIHJlamVjdGVkLHN0YXRlKQorICAgICAgICAgICAgZXJyb3Jsb2cud2FybmluZygicmVkdWNlL3JlZHVjZSBjb25mbGljdCBpbiBzdGF0ZSAlZCByZXNvbHZlZCB1c2luZyBydWxlICglcykiLCBzdGF0ZSwgcnVsZSkKKyAgICAgICAgICAgIGVycm9ybG9nLndhcm5pbmcoInJlamVjdGVkIHJ1bGUgKCVzKSBpbiBzdGF0ZSAlZCIsIHJlamVjdGVkLCBzdGF0ZSkKKyAgICAgICAgICAgIGFscmVhZHlfcmVwb3J0ZWRbc3RhdGUsaWQocnVsZSksaWQocmVqZWN0ZWQpXSA9IDEKKyAgICAgICAgCisgICAgICAgIHdhcm5lZF9uZXZlciA9IFtdCisgICAgICAgIGZvciBzdGF0ZSwgcnVsZSwgcmVqZWN0ZWQgaW4gbHIucnJfY29uZmxpY3RzOgorICAgICAgICAgICAgaWYgbm90IHJlamVjdGVkLnJlZHVjZWQgYW5kIChyZWplY3RlZCBub3QgaW4gd2FybmVkX25ldmVyKToKKyAgICAgICAgICAgICAgICBkZWJ1Z2xvZy53YXJuaW5nKCJSdWxlICglcykgaXMgbmV2ZXIgcmVkdWNlZCIsIHJlamVjdGVkKQorICAgICAgICAgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIlJ1bGUgKCVzKSBpcyBuZXZlciByZWR1Y2VkIiwgcmVqZWN0ZWQpCisgICAgICAgICAgICAgICAgd2FybmVkX25ldmVyLmFwcGVuZChyZWplY3RlZCkKKworICAgICMgV3JpdGUgdGhlIHRhYmxlIGZpbGUgaWYgcmVxdWVzdGVkCisgICAgaWYgd3JpdGVfdGFibGVzOgorICAgICAgICBsci53cml0ZV90YWJsZSh0YWJtb2R1bGUsb3V0cHV0ZGlyLHNpZ25hdHVyZSkKKworICAgICMgV3JpdGUgYSBwaWNrbGVkIHZlcnNpb24gb2YgdGhlIHRhYmxlcworICAgIGlmIHBpY2tsZWZpbGU6CisgICAgICAgIGxyLnBpY2tsZV90YWJsZShwaWNrbGVmaWxlLHNpZ25hdHVyZSkKKworICAgICMgQnVpbGQgdGhlIHBhcnNlcgorICAgIGxyLmJpbmRfY2FsbGFibGVzKHBpbmZvLnBkaWN0KQorICAgIHBhcnNlciA9IExSUGFyc2VyKGxyLHBpbmZvLmVycm9yX2Z1bmMpCisKKyAgICBwYXJzZSA9IHBhcnNlci5wYXJzZQorICAgIHJldHVybiBwYXJzZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJvZ3Jlc3NiYXIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3Byb2dyZXNzYmFyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNGNkYzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3Byb2dyZXNzYmFyLnB5CkBAIC0wLDAgKzEsMzg0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgLSotIGNvZGluZzogaXNvLTg4NTktMSAtKi0KKyMKKyMgcHJvZ3Jlc3NiYXIgIC0gVGV4dCBwcm9ncmVzc2JhciBsaWJyYXJ5IGZvciBweXRob24uCisjIENvcHlyaWdodCAoYykgMjAwNSBOaWx0b24gVm9scGF0bworIworIyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisjIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisKKworIiIiVGV4dCBwcm9ncmVzc2JhciBsaWJyYXJ5IGZvciBweXRob24uCisKK1RoaXMgbGlicmFyeSBwcm92aWRlcyBhIHRleHQgbW9kZSBwcm9ncmVzc2Jhci4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZAordG8gZGlzcGxheSB0aGUgcHJvZ3Jlc3Mgb2YgYSBsb25nIHJ1bm5pbmcgb3BlcmF0aW9uLCBwcm92aWRpbmcgYQordmlzdWFsIGNsdWUgdGhhdCBwcm9jZXNzaW5nIGlzIHVuZGVyd2F5LgorCitUaGUgUHJvZ3Jlc3NCYXIgY2xhc3MgbWFuYWdlcyB0aGUgcHJvZ3Jlc3MsIGFuZCB0aGUgZm9ybWF0IG9mIHRoZSBsaW5lCitpcyBnaXZlbiBieSBhIG51bWJlciBvZiB3aWRnZXRzLiBBIHdpZGdldCBpcyBhbiBvYmplY3QgdGhhdCBtYXkKK2Rpc3BsYXkgZGlmZXJlbnRseSBkZXBlbmRpbmcgb24gdGhlIHN0YXRlIG9mIHRoZSBwcm9ncmVzcy4gVGhlcmUgYXJlCit0aHJlZSB0eXBlcyBvZiB3aWRnZXQ6CistIGEgc3RyaW5nLCB3aGljaCBhbHdheXMgc2hvd3MgaXRzZWxmOworLSBhIFByb2dyZXNzQmFyV2lkZ2V0LCB3aGljaCBtYXkgcmV0dXJuIGEgZGlmZXJlbnQgdmFsdWUgZXZlcnkgdGltZQoraXQncyB1cGRhdGUgbWV0aG9kIGlzIGNhbGxlZDsgYW5kCistIGEgUHJvZ3Jlc3NCYXJXaWRnZXRIRmlsbCwgd2hpY2ggaXMgbGlrZSBQcm9ncmVzc0JhcldpZGdldCwgZXhjZXB0IGl0CitleHBhbmRzIHRvIGZpbGwgdGhlIHJlbWFpbmluZyB3aWR0aCBvZiB0aGUgbGluZS4KKworVGhlIHByb2dyZXNzYmFyIG1vZHVsZSBpcyB2ZXJ5IGVhc3kgdG8gdXNlLCB5ZXQgdmVyeSBwb3dlcmZ1bC4gQW5kCithdXRvbWF0aWNhbGx5IHN1cHBvcnRzIGZlYXR1cmVzIGxpa2UgYXV0by1yZXNpemluZyB3aGVuIGF2YWlsYWJsZS4KKyIiIgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCisKK19fYXV0aG9yX18gPSAiTmlsdG9uIFZvbHBhdG8iCitfX2F1dGhvcl9lbWFpbF9fID0gImZpcnN0LW5hbWUgZG90IGxhc3QtbmFtZSBAIGdtYWlsLmNvbSIKK19fZGF0ZV9fID0gIjIwMDYtMDUtMDciCitfX3ZlcnNpb25fXyA9ICIyLjMtZGV2IgorCitpbXBvcnQgc3lzLCB0aW1lLCBvcworZnJvbSBhcnJheSBpbXBvcnQgYXJyYXkKK3RyeToKKyAgICBmcm9tIGZjbnRsIGltcG9ydCBpb2N0bAorICAgIGltcG9ydCB0ZXJtaW9zCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworaW1wb3J0IHNpZ25hbAordHJ5OgorICAgIGJhc2VzdHJpbmcKK2V4Y2VwdCBOYW1lRXJyb3I6CisgICAgYmFzZXN0cmluZyA9IChzdHIsKQorCitjbGFzcyBQcm9ncmVzc0JhcldpZGdldChvYmplY3QpOgorICAgICIiIlRoaXMgaXMgYW4gZWxlbWVudCBvZiBQcm9ncmVzc0JhciBmb3JtYXR0aW5nLgorCisgICAgVGhlIFByb2dyZXNzQmFyIG9iamVjdCB3aWxsIGNhbGwgaXQncyB1cGRhdGUgdmFsdWUgd2hlbiBhbiB1cGRhdGUKKyAgICBpcyBuZWVkZWQuIEl0J3Mgc2l6ZSBtYXkgY2hhbmdlIGJldHdlZW4gY2FsbCwgYnV0IHRoZSByZXN1bHRzIHdpbGwKKyAgICBub3QgYmUgZ29vZCBpZiB0aGUgc2l6ZSBjaGFuZ2VzIGRyYXN0aWNhbGx5IGFuZCByZXBlYXRlZGx5LgorICAgICIiIgorICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhcik6CisgICAgICAgICIiIlJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHdpZGdldC4KKworICAgICAgICBUaGUgcGFyYW1ldGVyIHBiYXIgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGNhbGxpbmcgUHJvZ3Jlc3NCYXIsCisgICAgICAgIHdoZXJlIG9uZSBjYW4gYWNjZXNzIGF0dHJpYnV0ZXMgb2YgdGhlIGNsYXNzIGZvciBrbm93aW5nIGhvdworICAgICAgICB0aGUgdXBkYXRlIG11c3QgYmUgbWFkZS4KKworICAgICAgICBBdCBsZWFzdCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgb3ZlcnJpZGVuLiIiIgorICAgICAgICBwYXNzCisKK2NsYXNzIFByb2dyZXNzQmFyV2lkZ2V0SEZpbGwob2JqZWN0KToKKyAgICAiIiJUaGlzIGlzIGEgdmFyaWFibGUgd2lkdGggZWxlbWVudCBvZiBQcm9ncmVzc0JhciBmb3JtYXR0aW5nLgorCisgICAgVGhlIFByb2dyZXNzQmFyIG9iamVjdCB3aWxsIGNhbGwgaXQncyB1cGRhdGUgdmFsdWUsIGluZm9ybWluZyB0aGUKKyAgICB3aWR0aCB0aGlzIG9iamVjdCBtdXN0IHRoZSBtYWRlLiBUaGlzIGlzIGxpa2UgVGVYIFxcaGZpbGwsIGl0IHdpbGwKKyAgICBleHBhbmQgdG8gZmlsbCB0aGUgbGluZS4gWW91IGNhbiB1c2UgbW9yZSB0aGFuIG9uZSBpbiB0aGUgc2FtZQorICAgIGxpbmUsIGFuZCB0aGV5IHdpbGwgYWxsIGhhdmUgdGhlIHNhbWUgd2lkdGgsIGFuZCB0b2dldGhlciB3aWxsCisgICAgZmlsbCB0aGUgbGluZS4KKyAgICAiIiIKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHBiYXIsIHdpZHRoKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgd2lkZ2V0LgorCisgICAgICAgIFRoZSBwYXJhbWV0ZXIgcGJhciBpcyBhIHJlZmVyZW5jZSB0byB0aGUgY2FsbGluZyBQcm9ncmVzc0JhciwKKyAgICAgICAgd2hlcmUgb25lIGNhbiBhY2Nlc3MgYXR0cmlidXRlcyBvZiB0aGUgY2xhc3MgZm9yIGtub3dpbmcgaG93CisgICAgICAgIHRoZSB1cGRhdGUgbXVzdCBiZSBtYWRlLiBUaGUgcGFyYW1ldGVyIHdpZHRoIGlzIHRoZSB0b3RhbAorICAgICAgICBob3Jpem9udGFsIHdpZHRoIHRoZSB3aWRnZXQgbXVzdCBoYXZlLgorCisgICAgICAgIEF0IGxlYXN0IHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBvdmVycmlkZW4uIiIiCisgICAgICAgIHBhc3MKKworCitjbGFzcyBFVEEoUHJvZ3Jlc3NCYXJXaWRnZXQpOgorICAgICJXaWRnZXQgZm9yIHRoZSBFc3RpbWF0ZWQgVGltZSBvZiBBcnJpdmFsIgorICAgIGRlZiBmb3JtYXRfdGltZShzZWxmLCBzZWNvbmRzKToKKyAgICAgICAgcmV0dXJuIHRpbWUuc3RyZnRpbWUoJyVIOiVNOiVTJywgdGltZS5nbXRpbWUoc2Vjb25kcykpCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyKToKKyAgICAgICAgaWYgcGJhci5jdXJydmFsID09IDA6CisgICAgICAgICAgICByZXR1cm4gJ0VUQTogIC0tOi0tOi0tJworICAgICAgICBlbGlmIHBiYXIuZmluaXNoZWQ6CisgICAgICAgICAgICByZXR1cm4gJ1RpbWU6ICVzJyAlIHNlbGYuZm9ybWF0X3RpbWUocGJhci5zZWNvbmRzX2VsYXBzZWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbGFwc2VkID0gcGJhci5zZWNvbmRzX2VsYXBzZWQKKyAgICAgICAgICAgIGV0YSA9IGVsYXBzZWQgKiBwYmFyLm1heHZhbCAvIHBiYXIuY3VycnZhbCAtIGVsYXBzZWQKKyAgICAgICAgICAgIHJldHVybiAnRVRBOiAgJXMnICUgc2VsZi5mb3JtYXRfdGltZShldGEpCisKK2NsYXNzIEZpbGVUcmFuc2ZlclNwZWVkKFByb2dyZXNzQmFyV2lkZ2V0KToKKyAgICAiV2lkZ2V0IGZvciBzaG93aW5nIHRoZSB0cmFuc2ZlciBzcGVlZCAodXNlZnVsIGZvciBmaWxlIHRyYW5zZmVycykuIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1bml0PSdCJyk6CisgICAgICAgIHNlbGYudW5pdCA9IHVuaXQKKyAgICAgICAgc2VsZi5mbXQgPSAnJTYuMmYgJXMnCisgICAgICAgIHNlbGYucHJlZml4ZXMgPSBbJycsICdLJywgJ00nLCAnRycsICdUJywgJ1AnXQorICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhcik6CisgICAgICAgIGlmIHBiYXIuc2Vjb25kc19lbGFwc2VkIDwgMmUtNjojPT0gMDoKKyAgICAgICAgICAgIGJwcyA9IDAuMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYnBzID0gcGJhci5jdXJydmFsIC8gcGJhci5zZWNvbmRzX2VsYXBzZWQKKyAgICAgICAgc3BkID0gYnBzCisgICAgICAgIGZvciB1IGluIHNlbGYucHJlZml4ZXM6CisgICAgICAgICAgICBpZiBzcGQgPCAxMDAwOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBzcGQgLz0gMTAwMAorICAgICAgICByZXR1cm4gc2VsZi5mbXQgJSAoc3BkLCB1ICsgc2VsZi51bml0ICsgJy9zJykKKworY2xhc3MgUm90YXRpbmdNYXJrZXIoUHJvZ3Jlc3NCYXJXaWRnZXQpOgorICAgICJBIHJvdGF0aW5nIG1hcmtlciBmb3IgZmlsbGluZyB0aGUgYmFyIG9mIHByb2dyZXNzLiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya2Vycz0nfC8tXFwnKToKKyAgICAgICAgc2VsZi5tYXJrZXJzID0gbWFya2VycworICAgICAgICBzZWxmLmN1cm1hcmsgPSAtMQorICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhcik6CisgICAgICAgIGlmIHBiYXIuZmluaXNoZWQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5tYXJrZXJzWzBdCisgICAgICAgIHNlbGYuY3VybWFyayA9IChzZWxmLmN1cm1hcmsgKyAxKSAlIGxlbihzZWxmLm1hcmtlcnMpCisgICAgICAgIHJldHVybiBzZWxmLm1hcmtlcnNbc2VsZi5jdXJtYXJrXQorCitjbGFzcyBQZXJjZW50YWdlKFByb2dyZXNzQmFyV2lkZ2V0KToKKyAgICAiSnVzdCB0aGUgcGVyY2VudGFnZSBkb25lLiIKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHBiYXIpOgorICAgICAgICByZXR1cm4gJyUzZCUlJyAlIHBiYXIucGVyY2VudGFnZSgpCisKK2NsYXNzIFNpbXBsZVByb2dyZXNzKFByb2dyZXNzQmFyV2lkZ2V0KToKKyAgICAiUmV0dXJucyB3aGF0IGlzIGFscmVhZHkgZG9uZSBhbmQgdGhlIHRvdGFsLCBlLmcuOiAnNSBvZiA0NyciCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcD0nIG9mICcpOgorICAgICAgICBzZWxmLnNlcCA9IHNlcAorICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhcik6CisgICAgICAgIHJldHVybiAnJWQlcyVkJyAlIChwYmFyLmN1cnJ2YWwsIHNlbGYuc2VwLCBwYmFyLm1heHZhbCkKKworY2xhc3MgQmFyKFByb2dyZXNzQmFyV2lkZ2V0SEZpbGwpOgorICAgICJUaGUgYmFyIG9mIHByb2dyZXNzLiBJdCB3aWxsIHN0cmV0Y2ggdG8gZmlsbCB0aGUgbGluZS4iCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcmtlcj0nIycsIGxlZnQ9J3wnLCByaWdodD0nfCcpOgorICAgICAgICBzZWxmLm1hcmtlciA9IG1hcmtlcgorICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0CisgICAgICAgIHNlbGYucmlnaHQgPSByaWdodAorICAgIGRlZiBfZm9ybWF0X21hcmtlcihzZWxmLCBwYmFyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLm1hcmtlciwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5tYXJrZXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm1hcmtlci51cGRhdGUocGJhcikKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHBiYXIsIHdpZHRoKToKKyAgICAgICAgcGVyY2VudCA9IHBiYXIucGVyY2VudGFnZSgpCisgICAgICAgIGN3aWR0aCA9IHdpZHRoIC0gbGVuKHNlbGYubGVmdCkgLSBsZW4oc2VsZi5yaWdodCkKKyAgICAgICAgbWFya2VkX3dpZHRoID0gaW50KHBlcmNlbnQgKiBjd2lkdGggLy8gMTAwKQorICAgICAgICBtID0gc2VsZi5fZm9ybWF0X21hcmtlcihwYmFyKQorICAgICAgICBiYXIgPSAoc2VsZi5sZWZ0ICsgKG0gKiBtYXJrZWRfd2lkdGgpLmxqdXN0KGN3aWR0aCkgKyBzZWxmLnJpZ2h0KQorICAgICAgICByZXR1cm4gYmFyCisKK2NsYXNzIFJldmVyc2VCYXIoQmFyKToKKyAgICAiVGhlIHJldmVyc2UgYmFyIG9mIHByb2dyZXNzLCBvciBiYXIgb2YgcmVncmVzcy4gOikiCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyLCB3aWR0aCk6CisgICAgICAgIHBlcmNlbnQgPSBwYmFyLnBlcmNlbnRhZ2UoKQorICAgICAgICBjd2lkdGggPSB3aWR0aCAtIGxlbihzZWxmLmxlZnQpIC0gbGVuKHNlbGYucmlnaHQpCisgICAgICAgIG1hcmtlZF93aWR0aCA9IGludChwZXJjZW50ICogY3dpZHRoIC8vIDEwMCkKKyAgICAgICAgbSA9IHNlbGYuX2Zvcm1hdF9tYXJrZXIocGJhcikKKyAgICAgICAgYmFyID0gKHNlbGYubGVmdCArIChtKm1hcmtlZF93aWR0aCkucmp1c3QoY3dpZHRoKSArIHNlbGYucmlnaHQpCisgICAgICAgIHJldHVybiBiYXIKKworZGVmYXVsdF93aWRnZXRzID0gW1BlcmNlbnRhZ2UoKSwgJyAnLCBCYXIoKV0KK2NsYXNzIFByb2dyZXNzQmFyKG9iamVjdCk6CisgICAgIiIiVGhpcyBpcyB0aGUgUHJvZ3Jlc3NCYXIgY2xhc3MsIGl0IHVwZGF0ZXMgYW5kIHByaW50cyB0aGUgYmFyLgorCisgICAgQSBjb21tb24gd2F5IG9mIHVzaW5nIGl0IGlzIGxpa2U6CisgICAgPj4+IHBiYXIgPSBQcm9ncmVzc0JhcigpLnN0YXJ0KCkKKyAgICA+Pj4gZm9yIGkgaW4geHJhbmdlKDEwMCk6CisgICAgLi4uICAgICMgZG8gc29tZXRoaW5nCisgICAgLi4uICAgIHBiYXIudXBkYXRlKGkrMSkKKyAgICAuLi4KKyAgICA+Pj4gcGJhci5maW5pc2goKQorCisgICAgWW91IGNhbiBhbHNvIHVzZSBhIHByb2dyZXNzYmFyIGFzIGFuIGl0ZXJhdG9yOgorICAgID4+PiBwcm9ncmVzcyA9IFByb2dyZXNzQmFyKCkKKyAgICA+Pj4gZm9yIGkgaW4gcHJvZ3Jlc3Moc29tZV9pdGVyYWJsZSk6CisgICAgLi4uICAgICMgZG8gc29tZXRoaW5nCisgICAgLi4uCisKKyAgICBCdXQgYW55dGhpbmcgeW91IHdhbnQgdG8gZG8gaXMgcG9zc2libGUgKHdlbGwsIGFsbW9zdCBhbnl0aGluZykuCisgICAgWW91IGNhbiBzdXBwbHkgZGlmZmVyZW50IHdpZGdldHMgb2YgYW55IHR5cGUgaW4gYW55IG9yZGVyLiBBbmQgeW91CisgICAgY2FuIGV2ZW4gd3JpdGUgeW91ciBvd24gd2lkZ2V0cyEgVGhlcmUgYXJlIG1hbnkgd2lkZ2V0cyBhbHJlYWR5CisgICAgc2hpcHBlZCBhbmQgeW91IHNob3VsZCBleHBlcmltZW50IHdpdGggdGhlbS4KKworICAgIFRoZSB0ZXJtX3dpZHRoIHBhcmFtZXRlciBtdXN0IGJlIGFuIGludGVnZXIgb3IgTm9uZS4gSW4gdGhlIGxhdHRlciBjYXNlCisgICAgaXQgd2lsbCB0cnkgdG8gZ3Vlc3MgaXQsIGlmIGl0IGZhaWxzIGl0IHdpbGwgZGVmYXVsdCB0byA4MCBjb2x1bW5zLgorCisgICAgV2hlbiBpbXBsZW1lbnRpbmcgYSB3aWRnZXQgdXBkYXRlIG1ldGhvZCB5b3UgbWF5IGFjY2VzcyBhbnkKKyAgICBhdHRyaWJ1dGUgb3IgZnVuY3Rpb24gb2YgdGhlIFByb2dyZXNzQmFyIG9iamVjdCBjYWxsaW5nIHRoZQorICAgIHdpZGdldCdzIHVwZGF0ZSBtZXRob2QuIFRoZSBtb3N0IGltcG9ydGFudCBhdHRyaWJ1dGVzIHlvdSB3b3VsZAorICAgIGxpa2UgdG8gYWNjZXNzIGFyZToKKyAgICAtIGN1cnJ2YWw6IGN1cnJlbnQgdmFsdWUgb2YgdGhlIHByb2dyZXNzLCAwIDw9IGN1cnJ2YWwgPD0gbWF4dmFsCisgICAgLSBtYXh2YWw6IG1heGltdW0gKGFuZCBmaW5hbCkgdmFsdWUgb2YgdGhlIHByb2dyZXNzCisgICAgLSBmaW5pc2hlZDogVHJ1ZSBpZiB0aGUgYmFyIGhhcyBmaW5pc2hlZCAocmVhY2hlZCAxMDAlKSwgRmFsc2Ugby93CisgICAgLSBzdGFydF90aW1lOiB0aGUgdGltZSB3aGVuIHN0YXJ0KCkgbWV0aG9kIG9mIFByb2dyZXNzQmFyIHdhcyBjYWxsZWQKKyAgICAtIHNlY29uZHNfZWxhcHNlZDogc2Vjb25kcyBlbGFwc2VkIHNpbmNlIHN0YXJ0X3RpbWUKKyAgICAtIHBlcmNlbnRhZ2UoKTogcGVyY2VudGFnZSBvZiB0aGUgcHJvZ3Jlc3MgWzAuLjEwMF0uIFRoaXMgaXMgYSBtZXRob2QuCisKKyAgICBUaGUgYXR0cmlidXRlcyBhYm92ZSBhcmUgdW5saWtlbHkgdG8gY2hhbmdlIGJldHdlZW4gZGlmZmVyZW50IHZlcnNpb25zLAorICAgIHRoZSBvdGhlciBvbmVzIG1heSBjaGFuZ2Ugb3IgY2Vhc2UgdG8gZXhpc3Qgd2l0aG91dCBub3RpY2UsIHNvIHRyeSB0byByZWx5CisgICAgb25seSBvbiB0aGUgb25lcyBkb2N1bWVudGVkIGFib3ZlIGlmIHlvdSBhcmUgZXh0ZW5kaW5nIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoJ2N1cnJ2YWwnLCAnZmQnLCAnZmluaXNoZWQnLCAnbGFzdF91cGRhdGVfdGltZScsICdtYXh2YWwnLAorICAgICAgICAgICAgICAgICAnbmV4dF91cGRhdGUnLCAnbnVtX2ludGVydmFscycsICdzZWNvbmRzX2VsYXBzZWQnLAorICAgICAgICAgICAgICAgICAnc2lnbmFsX3NldCcsICdzdGFydF90aW1lJywgJ3Rlcm1fd2lkdGgnLCAndXBkYXRlX2ludGVydmFsJywKKyAgICAgICAgICAgICAgICAgJ3dpZGdldHMnLCAnX2l0ZXJhYmxlJykKKworICAgIF9ERUZBVUxUX01BWFZBTCA9IDEwMAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHZhbD1Ob25lLCB3aWRnZXRzPWRlZmF1bHRfd2lkZ2V0cywgdGVybV93aWR0aD1Ob25lLAorICAgICAgICAgICAgICAgICBmZD1zeXMuc3RkZXJyKToKKyAgICAgICAgc2VsZi5tYXh2YWwgPSBtYXh2YWwKKyAgICAgICAgc2VsZi53aWRnZXRzID0gd2lkZ2V0cworICAgICAgICBzZWxmLmZkID0gZmQKKyAgICAgICAgc2VsZi5zaWduYWxfc2V0ID0gRmFsc2UKKyAgICAgICAgaWYgdGVybV93aWR0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYudGVybV93aWR0aCA9IHRlcm1fd2lkdGgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfcmVzaXplKE5vbmUsIE5vbmUpCisgICAgICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHV0lOQ0gsIHNlbGYuX2hhbmRsZV9yZXNpemUpCisgICAgICAgICAgICAgICAgc2VsZi5zaWduYWxfc2V0ID0gVHJ1ZQorICAgICAgICAgICAgZXhjZXB0IChTeXN0ZW1FeGl0LCBLZXlib2FyZEludGVycnVwdCk6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBzZWxmLnRlcm1fd2lkdGggPSBpbnQob3MuZW52aXJvbi5nZXQoJ0NPTFVNTlMnLCA4MCkpIC0gMQorCisgICAgICAgIHNlbGYuY3VycnZhbCA9IDAKKyAgICAgICAgc2VsZi5maW5pc2hlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuc3RhcnRfdGltZSA9IE5vbmUKKyAgICAgICAgc2VsZi5sYXN0X3VwZGF0ZV90aW1lID0gTm9uZQorICAgICAgICBzZWxmLnNlY29uZHNfZWxhcHNlZCA9IDAKKyAgICAgICAgc2VsZi5faXRlcmFibGUgPSBOb25lCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgaXRlcmFibGUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLm1heHZhbCA9IGxlbihpdGVyYWJsZSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICMgSWYgdGhlIGl0ZXJhYmxlIGhhcyBubyBsZW5ndGgsIHRoZW4gcmVseSBvbiB0aGUgdmFsdWUgcHJvdmlkZWQKKyAgICAgICAgICAgICMgYnkgdGhlIHVzZXIsIG90aGVyd2lzZSBmYWlsLgorICAgICAgICAgICAgaWYgbm90IChpc2luc3RhbmNlKHNlbGYubWF4dmFsLCAoaW50LCBsb25nKSkgYW5kIHNlbGYubWF4dmFsID4gMCk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDb3VsZCBub3QgZGV0ZXJtaW5lIG1heHZhbCBmcm9tIGl0ZXJhYmxlLiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdZb3UgbXVzdCBleHBsaWNpdGx5IHByb3ZpZGUgYSBtYXh2YWwuJykKKyAgICAgICAgc2VsZi5faXRlcmFibGUgPSBpdGVyKGl0ZXJhYmxlKQorICAgICAgICBzZWxmLnN0YXJ0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBuZXh0ID0gc2VsZi5faXRlcmFibGUubmV4dCgpCisgICAgICAgICAgICBzZWxmLnVwZGF0ZShzZWxmLmN1cnJ2YWwgKyAxKQorICAgICAgICAgICAgcmV0dXJuIG5leHQKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICBzZWxmLmZpbmlzaCgpCisgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIF9oYW5kbGVfcmVzaXplKHNlbGYsIHNpZ251bSwgZnJhbWUpOgorICAgICAgICBoLCB3ID0gYXJyYXkoJ2gnLCBpb2N0bChzZWxmLmZkLCB0ZXJtaW9zLlRJT0NHV0lOU1osICdcMCcgKiA4KSlbOjJdCisgICAgICAgIHNlbGYudGVybV93aWR0aCA9IHcKKworICAgIGRlZiBwZXJjZW50YWdlKHNlbGYpOgorICAgICAgICAiUmV0dXJucyB0aGUgcGVyY2VudGFnZSBvZiB0aGUgcHJvZ3Jlc3MuIgorICAgICAgICByZXR1cm4gc2VsZi5jdXJydmFsICogMTAwLjAgLyBzZWxmLm1heHZhbAorCisgICAgZGVmIF9mb3JtYXRfd2lkZ2V0cyhzZWxmKToKKyAgICAgICAgciA9IFtdCisgICAgICAgIGhmaWxsX2luZHMgPSBbXQorICAgICAgICBudW1faGZpbGwgPSAwCisgICAgICAgIGN1cnJ3aWR0aCA9IDAKKyAgICAgICAgZm9yIGksIHcgaW4gZW51bWVyYXRlKHNlbGYud2lkZ2V0cyk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHcsIFByb2dyZXNzQmFyV2lkZ2V0SEZpbGwpOgorICAgICAgICAgICAgICAgIHIuYXBwZW5kKHcpCisgICAgICAgICAgICAgICAgaGZpbGxfaW5kcy5hcHBlbmQoaSkKKyAgICAgICAgICAgICAgICBudW1faGZpbGwgKz0gMQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHcsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgIHIuYXBwZW5kKHcpCisgICAgICAgICAgICAgICAgY3VycndpZHRoICs9IGxlbih3KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3ZXZhbCA9IHcudXBkYXRlKHNlbGYpCisgICAgICAgICAgICAgICAgY3VycndpZHRoICs9IGxlbih3ZXZhbCkKKyAgICAgICAgICAgICAgICByLmFwcGVuZCh3ZXZhbCkKKyAgICAgICAgZm9yIGl3IGluIGhmaWxsX2luZHM6CisgICAgICAgICAgICB3aWRnZXRfd2lkdGggPSBpbnQoKHNlbGYudGVybV93aWR0aCAtIGN1cnJ3aWR0aCkgLy8gbnVtX2hmaWxsKQorICAgICAgICAgICAgcltpd10gPSByW2l3XS51cGRhdGUoc2VsZiwgd2lkZ2V0X3dpZHRoKQorICAgICAgICByZXR1cm4gcgorCisgICAgZGVmIF9mb3JtYXRfbGluZShzZWxmKToKKyAgICAgICAgcmV0dXJuICcnLmpvaW4oc2VsZi5fZm9ybWF0X3dpZGdldHMoKSkubGp1c3Qoc2VsZi50ZXJtX3dpZHRoKQorCisgICAgZGVmIF9uZXh0X3VwZGF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGludCgoaW50KHNlbGYubnVtX2ludGVydmFscyAqCisgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5jdXJydmFsIC8gc2VsZi5tYXh2YWwpKSArIDEpICoKKyAgICAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9pbnRlcnZhbCkKKworICAgIGRlZiBfbmVlZF91cGRhdGUoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgdHJ1ZSB3aGVuIHRoZSBwcm9ncmVzc2JhciBzaG91bGQgcHJpbnQgYW4gdXBkYXRlZCBsaW5lLgorCisgICAgICAgIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgeW91IHdhbnQgZmluZXIgZ3JhaW5lZCBjb250cm9sIG92ZXIKKyAgICAgICAgdXBkYXRlcy4KKworICAgICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpcyBvcHRpbWl6ZWQgdG8gYmUgYXMgZmFzdCBhcyBwb3NzaWJsZSBhbmQKKyAgICAgICAgYXMgZWNvbm9taWNhbCBhcyBwb3NzaWJsZSBpbiB0aGUgbnVtYmVyIG9mIHVwZGF0ZXMuIEhvd2V2ZXIsIGRlcGVuZGluZworICAgICAgICBvbiB5b3VyIHVzYWdlIHlvdSBtYXkgd2FudCB0byBkbyBtb3JlIHVwZGF0ZXMuIEZvciBpbnN0YW5jZSwgaWYgeW91cgorICAgICAgICBwcm9ncmVzc2JhciBzdGF5cyBpbiB0aGUgc2FtZSBwZXJjZW50YWdlIGZvciBhIGxvbmcgdGltZSwgYW5kIHlvdSB3YW50CisgICAgICAgIHRvIHVwZGF0ZSBvdGhlciB3aWRnZXRzLCBsaWtlIEVUQSwgdGhlbiB5b3UgY291bGQgcmV0dXJuIFRydWUgYWZ0ZXIKKyAgICAgICAgc29tZSB0aW1lIGhhcyBwYXNzZWQgd2l0aCBubyB1cGRhdGVzLgorCisgICAgICAgIElkZWFsbHkgeW91IGNvdWxkIGNhbGwgc2VsZi5fZm9ybWF0X2xpbmUoKSBhbmQgc2VlIGlmIGl0J3MgZGlmZmVyZW50CisgICAgICAgIGZyb20gdGhlIHByZXZpb3VzIF9mb3JtYXRfbGluZSgpIGNhbGwsIGJ1dCBjYWxsaW5nIF9mb3JtYXRfbGluZSgpIHRha2VzCisgICAgICAgIGFyb3VuZCAyMCB0aW1lcyBtb3JlIHRpbWUgdGhhbiBjYWxsaW5nIHRoaXMgaW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgX25lZWRfdXBkYXRlKCkuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5jdXJydmFsID49IHNlbGYubmV4dF91cGRhdGUKKworICAgIGRlZiB1cGRhdGUoc2VsZiwgdmFsdWUpOgorICAgICAgICAiVXBkYXRlcyB0aGUgcHJvZ3Jlc3MgYmFyIHRvIGEgbmV3IHZhbHVlLiIKKyAgICAgICAgYXNzZXJ0IDAgPD0gdmFsdWUgPD0gc2VsZi5tYXh2YWwsICcwIDw9ICVkIDw9ICVkJyAlICh2YWx1ZSwgc2VsZi5tYXh2YWwpCisgICAgICAgIHNlbGYuY3VycnZhbCA9IHZhbHVlCisgICAgICAgIGlmIG5vdCBzZWxmLl9uZWVkX3VwZGF0ZSgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYuc3RhcnRfdGltZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdZb3UgbXVzdCBjYWxsIHN0YXJ0KCkgYmVmb3JlIGNhbGxpbmcgdXBkYXRlKCknKQorICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLnNlY29uZHNfZWxhcHNlZCA9IG5vdyAtIHNlbGYuc3RhcnRfdGltZQorICAgICAgICBzZWxmLm5leHRfdXBkYXRlID0gc2VsZi5fbmV4dF91cGRhdGUoKQorICAgICAgICBzZWxmLmZkLndyaXRlKHNlbGYuX2Zvcm1hdF9saW5lKCkgKyAnXHInKQorICAgICAgICBzZWxmLmxhc3RfdXBkYXRlX3RpbWUgPSBub3cKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgIiIiU3RhcnRzIG1lYXN1cmluZyB0aW1lLCBhbmQgcHJpbnRzIHRoZSBiYXIgYXQgMCUuCisKKyAgICAgICAgSXQgcmV0dXJucyBzZWxmIHNvIHlvdSBjYW4gdXNlIGl0IGxpa2UgdGhpczoKKyAgICAgICAgPj4+IHBiYXIgPSBQcm9ncmVzc0JhcigpLnN0YXJ0KCkKKyAgICAgICAgPj4+IGZvciBpIGluIHhyYW5nZSgxMDApOgorICAgICAgICAuLi4gICAgIyBkbyBzb21ldGhpbmcKKyAgICAgICAgLi4uICAgIHBiYXIudXBkYXRlKGkrMSkKKyAgICAgICAgLi4uCisgICAgICAgID4+PiBwYmFyLmZpbmlzaCgpCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLm1heHZhbCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5tYXh2YWwgPSBzZWxmLl9ERUZBVUxUX01BWFZBTAorICAgICAgICBhc3NlcnQgc2VsZi5tYXh2YWwgPiAwCisKKyAgICAgICAgc2VsZi5udW1faW50ZXJ2YWxzID0gbWF4KDEwMCwgc2VsZi50ZXJtX3dpZHRoKQorICAgICAgICBzZWxmLnVwZGF0ZV9pbnRlcnZhbCA9IHNlbGYubWF4dmFsIC8gc2VsZi5udW1faW50ZXJ2YWxzCisgICAgICAgIHNlbGYubmV4dF91cGRhdGUgPSAwCisKKyAgICAgICAgc2VsZi5zdGFydF90aW1lID0gc2VsZi5sYXN0X3VwZGF0ZV90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi51cGRhdGUoMCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBmaW5pc2goc2VsZik6CisgICAgICAgICIiIlVzZWQgdG8gdGVsbCB0aGUgcHJvZ3Jlc3MgaXMgZmluaXNoZWQuIiIiCisgICAgICAgIHNlbGYuZmluaXNoZWQgPSBUcnVlCisgICAgICAgIHNlbGYudXBkYXRlKHNlbGYubWF4dmFsKQorICAgICAgICBzZWxmLmZkLndyaXRlKCdcbicpCisgICAgICAgIGlmIHNlbGYuc2lnbmFsX3NldDoKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1dJTkNILCBzaWduYWwuU0lHX0RGTCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJzZXJ2L19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcnNlcnYvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNjYjczYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJzZXJ2L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTQgQEAKK19fdmVyc2lvbl9fID0gIjEuMC4wIgorCitpbXBvcnQgb3MsIHRpbWUKK2ltcG9ydCBzeXMsbG9nZ2luZworCitkZWYgaW5pdF9sb2dnZXIobG9nZmlsZSwgbG9nbGV2ZWwpOgorICAgIG51bWVyaWNfbGV2ZWwgPSBnZXRhdHRyKGxvZ2dpbmcsIGxvZ2xldmVsLnVwcGVyKCksIE5vbmUpCisgICAgaWYgbm90IGlzaW5zdGFuY2UobnVtZXJpY19sZXZlbCwgaW50KToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBsb2cgbGV2ZWw6ICVzJyAlIGxvZ2xldmVsKQorICAgIEZPUk1BVCA9ICclKGFzY3RpbWUpLTE1cyAlKG1lc3NhZ2UpcycKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPW51bWVyaWNfbGV2ZWwsIGZpbGVuYW1lPWxvZ2ZpbGUsIGZvcm1hdD1GT1JNQVQpCisKK2NsYXNzIE5vdEZvdW5kRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3Byc2Vydi9kYi5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJzZXJ2L2RiLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNzk1ODAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3Byc2Vydi9kYi5weQpAQCAtMCwwICsxLDI2OCBAQAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgZXJybm8KK2ltcG9ydCBwcnNlcnYKK2ltcG9ydCB0aW1lCisKK3RyeToKKyAgICBpbXBvcnQgc3FsaXRlMworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gcHlzcWxpdGUyIGltcG9ydCBkYmFwaTIgYXMgc3FsaXRlMworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5QUnNlcnYiKQorCitzcWx2ZXJzaW9uID0gc3FsaXRlMy5zcWxpdGVfdmVyc2lvbl9pbmZvCitpZiBzcWx2ZXJzaW9uWzBdIDwgMyBvciAoc3FsdmVyc2lvblswXSA9PSAzIGFuZCBzcWx2ZXJzaW9uWzFdIDwgMyk6CisgICAgcmFpc2UgRXhjZXB0aW9uKCJzcWxpdGUzIHZlcnNpb24gMy4zLjAgb3IgbGF0ZXIgaXMgcmVxdWlyZWQuIikKKworIworIyAiTm8gSGlzdG9yeSIgbW9kZSAtIGZvciBhIGdpdmVuIHF1ZXJ5IHR1cGxlICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSksCisjIHRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIGJlIHRoZSBsYXJnZXN0IGFtb25nIGFsbCB0aGUgdmFsdWVzIG9mIHRoZSBzYW1lCisjICh2ZXJzaW9uLCBwa2dhcmNoKS4gVGhpcyBtZWFucyB0aGUgUFIgdmFsdWUgcmV0dXJuZWQgY2FuIE5PVCBiZSBkZWNyZW1lbnRlZC4KKyMKKyMgIkhpc3RvcnkiIG1vZGUgLSBSZXR1cm4gYSBuZXcgaGlnaGVyIHZhbHVlIGZvciBwcmV2aW91c2x5IHVuc2VlbiBxdWVyeQorIyB0dXBsZSAodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pLCBvdGhlcndpc2UgcmV0dXJuIGhpc3RvcmljYWwgdmFsdWUuCisjIFZhbHVlIGNhbiBkZWNyZW1lbnQgaWYgcmV0dXJuaW5nIHRvIGEgcHJldmlvdXMgYnVpbGQuCisjCisKK2NsYXNzIFBSVGFibGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubiwgdGFibGUsIG5vaGlzdCk6CisgICAgICAgIHNlbGYuY29ubiA9IGNvbm4KKyAgICAgICAgc2VsZi5ub2hpc3QgPSBub2hpc3QKKyAgICAgICAgc2VsZi5kaXJ0eSA9IEZhbHNlCisgICAgICAgIGlmIG5vaGlzdDoKKyAgICAgICAgICAgIHNlbGYudGFibGUgPSAiJXNfbm9oaXN0IiAlIHRhYmxlIAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50YWJsZSA9ICIlc19oaXN0IiAlIHRhYmxlIAorCisgICAgICAgIHNlbGYuX2V4ZWN1dGUoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICVzIFwKKyAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24gVEVYVCBOT1QgTlVMTCwgXAorICAgICAgICAgICAgICAgICAgICBwa2dhcmNoIFRFWFQgTk9UIE5VTEwsICBcCisgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtIFRFWFQgTk9UIE5VTEwsIFwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgSU5URUdFUiwgXAorICAgICAgICAgICAgICAgICAgICBQUklNQVJZIEtFWSAodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pKTsiICUgc2VsZi50YWJsZSkKKworICAgIGRlZiBfZXhlY3V0ZShzZWxmLCAqcXVlcnkpOgorICAgICAgICAiIiJFeGVjdXRlIGEgcXVlcnksIHdhaXRpbmcgdG8gYWNxdWlyZSBhIGxvY2sgaWYgbmVjZXNzYXJ5IiIiCisgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKKyAgICAgICAgZW5kID0gc3RhcnQgKyAyMAorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbm4uZXhlY3V0ZSgqcXVlcnkpCisgICAgICAgICAgICBleGNlcHQgc3FsaXRlMy5PcGVyYXRpb25hbEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBpZiAnaXMgbG9ja2VkJyBpbiBzdHIoZXhjKSBhbmQgZW5kID4gdGltZS50aW1lKCk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcmFpc2UgZXhjCisKKyAgICBkZWYgc3luYyhzZWxmKToKKyAgICAgICAgc2VsZi5jb25uLmNvbW1pdCgpCisgICAgICAgIHNlbGYuX2V4ZWN1dGUoIkJFR0lOIEVYQ0xVU0lWRSBUUkFOU0FDVElPTiIpCisKKyAgICBkZWYgc3luY19pZl9kaXJ0eShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kaXJ0eToKKyAgICAgICAgICAgIHNlbGYuc3luYygpCisgICAgICAgICAgICBzZWxmLmRpcnR5ID0gRmFsc2UKKworICAgIGRlZiBfZ2V0VmFsdWVIaXN0KHNlbGYsIHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKToKKyAgICAgICAgZGF0YT1zZWxmLl9leGVjdXRlKCJTRUxFQ1QgdmFsdWUgRlJPTSAlcyBXSEVSRSB2ZXJzaW9uPT8gQU5EIHBrZ2FyY2g9PyBBTkQgY2hlY2tzdW09PzsiICUgc2VsZi50YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSkpCisgICAgICAgIHJvdz1kYXRhLmZldGNob25lKCkKKyAgICAgICAgaWYgcm93ICE9IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gcm93WzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjbm8gdmFsdWUgZm91bmQsIHRyeSB0byBpbnNlcnQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRlKCJJTlNFUlQgSU5UTyAlcyBWQUxVRVMgKD8sID8sID8sIChzZWxlY3QgaWZudWxsKG1heCh2YWx1ZSkrMSwwKSBmcm9tICVzIHdoZXJlIHZlcnNpb249PyBBTkQgcGtnYXJjaD0/KSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi50YWJsZSxzZWxmLnRhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uLHBrZ2FyY2gsIGNoZWNrc3VtLHZlcnNpb24sIHBrZ2FyY2gpKQorICAgICAgICAgICAgZXhjZXB0IHNxbGl0ZTMuSW50ZWdyaXR5RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZXhjKSkKKworICAgICAgICAgICAgc2VsZi5kaXJ0eSA9IFRydWUKKworICAgICAgICAgICAgZGF0YT1zZWxmLl9leGVjdXRlKCJTRUxFQ1QgdmFsdWUgRlJPTSAlcyBXSEVSRSB2ZXJzaW9uPT8gQU5EIHBrZ2FyY2g9PyBBTkQgY2hlY2tzdW09PzsiICUgc2VsZi50YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pKQorICAgICAgICAgICAgcm93PWRhdGEuZmV0Y2hvbmUoKQorICAgICAgICAgICAgaWYgcm93ICE9IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJvd1swXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBwcnNlcnYuTm90Rm91bmRFcnJvcgorCisgICAgZGVmIF9nZXRWYWx1ZU5vaGlzdChzZWxmLCB2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSk6CisgICAgICAgIGRhdGE9c2VsZi5fZXhlY3V0ZSgiU0VMRUNUIHZhbHVlIEZST00gJXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIHZlcnNpb249PyBBTkQgcGtnYXJjaD0/IEFORCBjaGVja3N1bT0/IEFORCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPj0gKHNlbGVjdCBtYXgodmFsdWUpIGZyb20gJXMgd2hlcmUgdmVyc2lvbj0/IEFORCBwa2dhcmNoPT8pOyIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi50YWJsZSwgc2VsZi50YWJsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2ZXJzaW9uLCBwa2dhcmNoKSkKKyAgICAgICAgcm93PWRhdGEuZmV0Y2hvbmUoKQorICAgICAgICBpZiByb3cgIT0gTm9uZToKKyAgICAgICAgICAgIHJldHVybiByb3dbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICNubyB2YWx1ZSBmb3VuZCwgdHJ5IHRvIGluc2VydAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGUoIklOU0VSVCBPUiBSRVBMQUNFIElOVE8gJXMgVkFMVUVTICg/LCA/LCA/LCAoc2VsZWN0IGlmbnVsbChtYXgodmFsdWUpKzEsMCkgZnJvbSAlcyB3aGVyZSB2ZXJzaW9uPT8gQU5EIHBrZ2FyY2g9PykpOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLnRhYmxlLHNlbGYudGFibGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmVyc2lvbiwgcGtnYXJjaCkpCisgICAgICAgICAgICBleGNlcHQgc3FsaXRlMy5JbnRlZ3JpdHlFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihleGMpKQorICAgICAgICAgICAgICAgIHNlbGYuY29ubi5yb2xsYmFjaygpCisKKyAgICAgICAgICAgIHNlbGYuZGlydHkgPSBUcnVlCisKKyAgICAgICAgICAgIGRhdGE9c2VsZi5fZXhlY3V0ZSgiU0VMRUNUIHZhbHVlIEZST00gJXMgV0hFUkUgdmVyc2lvbj0/IEFORCBwa2dhcmNoPT8gQU5EIGNoZWNrc3VtPT87IiAlIHNlbGYudGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKSkKKyAgICAgICAgICAgIHJvdz1kYXRhLmZldGNob25lKCkKKyAgICAgICAgICAgIGlmIHJvdyAhPSBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiByb3dbMF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgcHJzZXJ2Lk5vdEZvdW5kRXJyb3IKKworICAgIGRlZiBnZXRWYWx1ZShzZWxmLCB2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSk6CisgICAgICAgIGlmIHNlbGYubm9oaXN0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldFZhbHVlTm9oaXN0KHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldFZhbHVlSGlzdCh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSkKKworICAgIGRlZiBfaW1wb3J0SGlzdChzZWxmLCB2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmFsdWUpOgorICAgICAgICB2YWwgPSBOb25lIAorICAgICAgICBkYXRhID0gc2VsZi5fZXhlY3V0ZSgiU0VMRUNUIHZhbHVlIEZST00gJXMgV0hFUkUgdmVyc2lvbj0/IEFORCBwa2dhcmNoPT8gQU5EIGNoZWNrc3VtPT87IiAlIHNlbGYudGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pKQorICAgICAgICByb3cgPSBkYXRhLmZldGNob25lKCkKKyAgICAgICAgaWYgcm93ICE9IE5vbmU6CisgICAgICAgICAgICB2YWw9cm93WzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjbm8gdmFsdWUgZm91bmQsIHRyeSB0byBpbnNlcnQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRlKCJJTlNFUlQgSU5UTyAlcyBWQUxVRVMgKD8sID8sID8sID8pOyIgICUgKHNlbGYudGFibGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSkpCisgICAgICAgICAgICBleGNlcHQgc3FsaXRlMy5JbnRlZ3JpdHlFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihleGMpKQorCisgICAgICAgICAgICBzZWxmLmRpcnR5ID0gVHJ1ZQorCisgICAgICAgICAgICBkYXRhID0gc2VsZi5fZXhlY3V0ZSgiU0VMRUNUIHZhbHVlIEZST00gJXMgV0hFUkUgdmVyc2lvbj0/IEFORCBwa2dhcmNoPT8gQU5EIGNoZWNrc3VtPT87IiAlIHNlbGYudGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pKQorICAgICAgICAgICAgcm93ID0gZGF0YS5mZXRjaG9uZSgpCisgICAgICAgICAgICBpZiByb3cgIT0gTm9uZToKKyAgICAgICAgICAgICAgICB2YWwgPSByb3dbMF0KKyAgICAgICAgcmV0dXJuIHZhbAorCisgICAgZGVmIF9pbXBvcnROb2hpc3Qoc2VsZiwgdmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZhbHVlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgI3RyeSB0byBpbnNlcnQKKyAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGUoIklOU0VSVCBJTlRPICVzIFZBTFVFUyAoPywgPywgPywgPyk7IiAgJSAoc2VsZi50YWJsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sdmFsdWUpKQorICAgICAgICBleGNlcHQgc3FsaXRlMy5JbnRlZ3JpdHlFcnJvciBhcyBleGM6CisgICAgICAgICAgICAjYWxyZWFkeSBoYXZlIHRoZSByZWNvcmQsIHRyeSB0byB1cGRhdGUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRlKCJVUERBVEUgJXMgU0VUIHZhbHVlPT8gV0hFUkUgdmVyc2lvbj0/IEFORCBwa2dhcmNoPT8gQU5EIGNoZWNrc3VtPT8gQU5EIHZhbHVlPD8iICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYudGFibGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSx2ZXJzaW9uLHBrZ2FyY2gsY2hlY2tzdW0sdmFsdWUpKQorICAgICAgICAgICAgZXhjZXB0IHNxbGl0ZTMuSW50ZWdyaXR5RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZXhjKSkKKworICAgICAgICBzZWxmLmRpcnR5ID0gVHJ1ZQorCisgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRlKCJTRUxFQ1QgdmFsdWUgRlJPTSAlcyBXSEVSRSB2ZXJzaW9uPT8gQU5EIHBrZ2FyY2g9PyBBTkQgY2hlY2tzdW09PyBBTkQgdmFsdWU+PT87IiAlIHNlbGYudGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24scGtnYXJjaCxjaGVja3N1bSx2YWx1ZSkpCisgICAgICAgIHJvdz1kYXRhLmZldGNob25lKCkKKyAgICAgICAgaWYgcm93ICE9IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gcm93WzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGltcG9ydG9uZShzZWxmLCB2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmFsdWUpOgorICAgICAgICBpZiBzZWxmLm5vaGlzdDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbXBvcnROb2hpc3QodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ltcG9ydEhpc3QodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZhbHVlKQorCisgICAgZGVmIGV4cG9ydChzZWxmLCB2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgY29saW5mbyk6CisgICAgICAgIG1ldGFpbmZvID0ge30KKyAgICAgICAgI2NvbHVtbiBpbmZvIAorICAgICAgICBpZiBjb2xpbmZvOgorICAgICAgICAgICAgbWV0YWluZm9bJ3RibF9uYW1lJ10gPSBzZWxmLnRhYmxlCisgICAgICAgICAgICBtZXRhaW5mb1snY29yZV92ZXInXSA9IHByc2Vydi5fX3ZlcnNpb25fXworICAgICAgICAgICAgbWV0YWluZm9bJ2NvbF9pbmZvJ10gPSBbXQorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoIlBSQUdNQSB0YWJsZV9pbmZvKCVzKTsiICUgc2VsZi50YWJsZSkKKyAgICAgICAgICAgIGZvciByb3cgaW4gZGF0YToKKyAgICAgICAgICAgICAgICBjb2wgPSB7fQorICAgICAgICAgICAgICAgIGNvbFsnbmFtZSddID0gcm93WyduYW1lJ10KKyAgICAgICAgICAgICAgICBjb2xbJ3R5cGUnXSA9IHJvd1sndHlwZSddCisgICAgICAgICAgICAgICAgY29sWydub3RudWxsJ10gPSByb3dbJ25vdG51bGwnXQorICAgICAgICAgICAgICAgIGNvbFsnZGZsdF92YWx1ZSddID0gcm93WydkZmx0X3ZhbHVlJ10KKyAgICAgICAgICAgICAgICBjb2xbJ3BrJ10gPSByb3dbJ3BrJ10KKyAgICAgICAgICAgICAgICBtZXRhaW5mb1snY29sX2luZm8nXS5hcHBlbmQoY29sKQorCisgICAgICAgICNkYXRhIGluZm8KKyAgICAgICAgZGF0YWluZm8gPSBbXQorCisgICAgICAgIGlmIHNlbGYubm9oaXN0OgorICAgICAgICAgICAgc3Fsc3RtdCA9ICJTRUxFQ1QgVDEudmVyc2lvbiwgVDEucGtnYXJjaCwgVDEuY2hlY2tzdW0sIFQxLnZhbHVlIEZST00gJXMgYXMgVDEsIFwKKyAgICAgICAgICAgICAgICAgICAgKFNFTEVDVCB2ZXJzaW9uLHBrZ2FyY2gsbWF4KHZhbHVlKSBhcyBtYXh2YWx1ZSBGUk9NICVzIEdST1VQIEJZIHZlcnNpb24scGtnYXJjaCkgYXMgVDIgXAorICAgICAgICAgICAgICAgICAgICBXSEVSRSBUMS52ZXJzaW9uPVQyLnZlcnNpb24gQU5EIFQxLnBrZ2FyY2g9VDIucGtnYXJjaCBBTkQgVDEudmFsdWU9VDIubWF4dmFsdWUgIiAlIChzZWxmLnRhYmxlLCBzZWxmLnRhYmxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3Fsc3RtdCA9ICJTRUxFQ1QgKiBGUk9NICVzIGFzIFQxIFdIRVJFIDE9MSAiICUgc2VsZi50YWJsZQorICAgICAgICBzcWxhcmcgPSBbXQorICAgICAgICB3aGVyZSA9ICIiCisgICAgICAgIGlmIHZlcnNpb246CisgICAgICAgICAgICB3aGVyZSArPSAiQU5EIFQxLnZlcnNpb249PyAiCisgICAgICAgICAgICBzcWxhcmcuYXBwZW5kKHN0cih2ZXJzaW9uKSkKKyAgICAgICAgaWYgcGtnYXJjaDoKKyAgICAgICAgICAgIHdoZXJlICs9ICJBTkQgVDEucGtnYXJjaD0/ICIKKyAgICAgICAgICAgIHNxbGFyZy5hcHBlbmQoc3RyKHBrZ2FyY2gpKQorICAgICAgICBpZiBjaGVja3N1bToKKyAgICAgICAgICAgIHdoZXJlICs9ICJBTkQgVDEuY2hlY2tzdW09PyAiCisgICAgICAgICAgICBzcWxhcmcuYXBwZW5kKHN0cihjaGVja3N1bSkpCisKKyAgICAgICAgc3Fsc3RtdCArPSB3aGVyZSArICI7IgorCisgICAgICAgIGlmIGxlbihzcWxhcmcpOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoc3Fsc3RtdCwgdHVwbGUoc3FsYXJnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRlKHNxbHN0bXQpCisgICAgICAgIGZvciByb3cgaW4gZGF0YToKKyAgICAgICAgICAgIGlmIHJvd1sndmVyc2lvbiddOgorICAgICAgICAgICAgICAgIGNvbCA9IHt9CisgICAgICAgICAgICAgICAgY29sWyd2ZXJzaW9uJ10gPSByb3dbJ3ZlcnNpb24nXQorICAgICAgICAgICAgICAgIGNvbFsncGtnYXJjaCddID0gcm93Wydwa2dhcmNoJ10KKyAgICAgICAgICAgICAgICBjb2xbJ2NoZWNrc3VtJ10gPSByb3dbJ2NoZWNrc3VtJ10KKyAgICAgICAgICAgICAgICBjb2xbJ3ZhbHVlJ10gPSByb3dbJ3ZhbHVlJ10KKyAgICAgICAgICAgICAgICBkYXRhaW5mby5hcHBlbmQoY29sKQorICAgICAgICByZXR1cm4gKG1ldGFpbmZvLCBkYXRhaW5mbykKKworY2xhc3MgUFJEYXRhKG9iamVjdCk6CisgICAgIiIiT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgUFIgZGF0YWJhc2UiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIG5vaGlzdD1UcnVlKToKKyAgICAgICAgc2VsZi5maWxlbmFtZT1vcy5wYXRoLmFic3BhdGgoZmlsZW5hbWUpCisgICAgICAgIHNlbGYubm9oaXN0PW5vaGlzdAorICAgICAgICAjYnVpbGQgZGlyZWN0b3J5IGhpZXJhcmNoeQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmRpcm5hbWUoc2VsZi5maWxlbmFtZSkpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAgICAgICByYWlzZSBlCisgICAgICAgIHNlbGYuY29ubmVjdGlvbj1zcWxpdGUzLmNvbm5lY3Qoc2VsZi5maWxlbmFtZSwgaXNvbGF0aW9uX2xldmVsPSJFWENMVVNJVkUiLCBjaGVja19zYW1lX3RocmVhZCA9IEZhbHNlKQorICAgICAgICBzZWxmLmNvbm5lY3Rpb24ucm93X2ZhY3Rvcnk9c3FsaXRlMy5Sb3cKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uLmV4ZWN1dGUoInByYWdtYSBzeW5jaHJvbm91cyA9IG9mZjsiKQorICAgICAgICBzZWxmLmNvbm5lY3Rpb24uZXhlY3V0ZSgiUFJBR01BIGpvdXJuYWxfbW9kZSA9IFdBTDsiKQorICAgICAgICBzZWxmLl90YWJsZXM9e30KKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24uY2xvc2UoKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsdGJsbmFtZSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRibG5hbWUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ0YmxuYW1lIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIG5vdCAnJXMnIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSh0YmxuYW1lKSkKKyAgICAgICAgaWYgdGJsbmFtZSBpbiBzZWxmLl90YWJsZXM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fdGFibGVzW3RibG5hbWVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0YWJsZW9iaiA9IHNlbGYuX3RhYmxlc1t0YmxuYW1lXSA9IFBSVGFibGUoc2VsZi5jb25uZWN0aW9uLCB0YmxuYW1lLCBzZWxmLm5vaGlzdCkKKyAgICAgICAgICAgIHJldHVybiB0YWJsZW9iagorCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIHRibG5hbWUpOgorICAgICAgICBpZiB0YmxuYW1lIGluIHNlbGYuX3RhYmxlczoKKyAgICAgICAgICAgIGRlbCBzZWxmLl90YWJsZXNbdGJsbmFtZV0KKyAgICAgICAgbG9nZ2VyLmluZm8oImRyb3AgdGFibGUgJXMiICUgKHRibG5hbWUpKQorICAgICAgICBzZWxmLmNvbm5lY3Rpb24uZXhlY3V0ZSgiRFJPUCBUQUJMRSBJRiBFWElTVFMgJXM7IiAlIHRibG5hbWUpIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcnNlcnYvc2Vydi5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJzZXJ2L3NlcnYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMwZmZiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJzZXJ2L3NlcnYucHkKQEAgLTAsMCArMSw0MTggQEAKK2ltcG9ydCBvcyxzeXMsbG9nZ2luZworaW1wb3J0IHNpZ25hbCwgdGltZQorZnJvbSBTaW1wbGVYTUxSUENTZXJ2ZXIgaW1wb3J0IFNpbXBsZVhNTFJQQ1NlcnZlciwgU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCBRdWV1ZQorCit0cnk6CisgICAgaW1wb3J0IHNxbGl0ZTMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIHB5c3FsaXRlMiBpbXBvcnQgZGJhcGkyIGFzIHNxbGl0ZTMKKworaW1wb3J0IGJiLnNlcnZlci54bWxycGMKK2ltcG9ydCBwcnNlcnYKK2ltcG9ydCBwcnNlcnYuZGIKK2ltcG9ydCBlcnJubworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5QUnNlcnYiKQorCitpZiBzeXMuaGV4dmVyc2lvbiA8IDB4MDIwNjAwRjA6CisgICAgcHJpbnQoIlNvcnJ5LCBweXRob24gMi42IG9yIGxhdGVyIGlzIHJlcXVpcmVkLiIpCisgICAgc3lzLmV4aXQoMSkKKworY2xhc3MgSGFuZGxlcihTaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcik6CisgICAgZGVmIF9kaXNwYXRjaChzZWxmLG1ldGhvZCxwYXJhbXMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZT1zZWxmLnNlcnZlci5mdW5jc1ttZXRob2RdKCpwYXJhbXMpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKK1BJRFBSRUZJWCA9ICIvdG1wL1BSU2VydmVyXyVzXyVzLnBpZCIKK3NpbmdsZXRvbiA9IE5vbmUKKworCitjbGFzcyBQUlNlcnZlcihTaW1wbGVYTUxSUENTZXJ2ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYmZpbGUsIGxvZ2ZpbGUsIGludGVyZmFjZSwgZGFlbW9uPVRydWUpOgorICAgICAgICAnJycgY29uc3RydWN0b3IgJycnCisgICAgICAgIGltcG9ydCBzb2NrZXQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLl9faW5pdF9fKHNlbGYsIGludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dSZXF1ZXN0cz1GYWxzZSwgYWxsb3dfbm9uZT1UcnVlKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgaXA9c29ja2V0LmdldGhvc3RieW5hbWUoaW50ZXJmYWNlWzBdKQorICAgICAgICAgICAgcG9ydD1pbnRlcmZhY2VbMV0KKyAgICAgICAgICAgIG1zZz0iUFIgU2VydmVyIHVuYWJsZSB0byBiaW5kIHRvICVzOiVzXG4iICUgKGlwLCBwb3J0KQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShtc2cpCisgICAgICAgICAgICByYWlzZSBQUlNlcnZpY2VDb25maWdFcnJvcgorCisgICAgICAgIHNlbGYuZGJmaWxlPWRiZmlsZQorICAgICAgICBzZWxmLmRhZW1vbj1kYWVtb24KKyAgICAgICAgc2VsZi5sb2dmaWxlPWxvZ2ZpbGUKKyAgICAgICAgc2VsZi53b3JraW5nX3RocmVhZD1Ob25lCisgICAgICAgIHNlbGYuaG9zdCwgc2VsZi5wb3J0ID0gc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKQorICAgICAgICBzZWxmLnBpZGZpbGU9UElEUFJFRklYICUgKHNlbGYuaG9zdCwgc2VsZi5wb3J0KQorCisgICAgICAgIHNlbGYucmVnaXN0ZXJfZnVuY3Rpb24oc2VsZi5nZXRQUiwgImdldFBSIikKKyAgICAgICAgc2VsZi5yZWdpc3Rlcl9mdW5jdGlvbihzZWxmLnF1aXQsICJxdWl0IikKKyAgICAgICAgc2VsZi5yZWdpc3Rlcl9mdW5jdGlvbihzZWxmLnBpbmcsICJwaW5nIikKKyAgICAgICAgc2VsZi5yZWdpc3Rlcl9mdW5jdGlvbihzZWxmLmV4cG9ydCwgImV4cG9ydCIpCisgICAgICAgIHNlbGYucmVnaXN0ZXJfZnVuY3Rpb24oc2VsZi5pbXBvcnRvbmUsICJpbXBvcnRvbmUiKQorICAgICAgICBzZWxmLnJlZ2lzdGVyX2ludHJvc3BlY3Rpb25fZnVuY3Rpb25zKCkKKworICAgICAgICBzZWxmLmRiID0gcHJzZXJ2LmRiLlBSRGF0YShzZWxmLmRiZmlsZSkKKyAgICAgICAgc2VsZi50YWJsZSA9IHNlbGYuZGJbIlBSTUFJTiJdCisKKyAgICAgICAgc2VsZi5yZXF1ZXN0cXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIHNlbGYuaGFuZGxlcnRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0ID0gc2VsZi5wcm9jZXNzX3JlcXVlc3RfdGhyZWFkKQorICAgICAgICBzZWxmLmhhbmRsZXJ0aHJlYWQuZGFlbW9uID0gRmFsc2UKKworICAgIGRlZiBwcm9jZXNzX3JlcXVlc3RfdGhyZWFkKHNlbGYpOgorICAgICAgICAiIiJTYW1lIGFzIGluIEJhc2VTZXJ2ZXIgYnV0IGFzIGEgdGhyZWFkLgorCisgICAgICAgIEluIGFkZGl0aW9uLCBleGNlcHRpb24gaGFuZGxpbmcgaXMgZG9uZSBoZXJlLgorCisgICAgICAgICIiIgorICAgICAgICBpdGVyX2NvdW50ID0gMQorICAgICAgICAjIDYwIGl0ZXJhdGlvbnMgYmV0d2VlbiBzeW5jcyBvciBzeW5jIGlmIGRpcnR5IGV2ZXJ5IH4zMCBzZWNvbmRzCisgICAgICAgIGl0ZXJhdGlvbnNfYmV0d2Vlbl9zeW5jID0gNjAKKworICAgICAgICB3aGlsZSBub3Qgc2VsZi5xdWl0OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIChyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykgPSBzZWxmLnJlcXVlc3RxdWV1ZS5nZXQoVHJ1ZSwgMzApCisgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5zeW5jX2lmX2RpcnR5KCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZmluaXNoX3JlcXVlc3QocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCisgICAgICAgICAgICAgICAgc2VsZi5zaHV0ZG93bl9yZXF1ZXN0KHJlcXVlc3QpCisgICAgICAgICAgICAgICAgaXRlcl9jb3VudCA9IChpdGVyX2NvdW50ICsgMSkgJSBpdGVyYXRpb25zX2JldHdlZW5fc3luYworICAgICAgICAgICAgICAgIGlmIGl0ZXJfY291bnQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5zeW5jX2lmX2RpcnR5KCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9lcnJvcihyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKKyAgICAgICAgICAgICAgICBzZWxmLnNodXRkb3duX3JlcXVlc3QocmVxdWVzdCkKKyAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLnN5bmMoKQorICAgICAgICAgICAgc2VsZi50YWJsZS5zeW5jX2lmX2RpcnR5KCkKKworICAgIGRlZiBzaWdpbnRfaGFuZGxlcihzZWxmLCBzaWdudW0sIHN0YWNrKToKKyAgICAgICAgc2VsZi50YWJsZS5zeW5jKCkKKworICAgIGRlZiBzaWd0ZXJtX2hhbmRsZXIoc2VsZiwgc2lnbnVtLCBzdGFjayk6CisgICAgICAgIHNlbGYudGFibGUuc3luYygpCisgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQKKworICAgIGRlZiBwcm9jZXNzX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgorICAgICAgICBzZWxmLnJlcXVlc3RxdWV1ZS5wdXQoKHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKSkKKworICAgIGRlZiBleHBvcnQoc2VsZiwgdmVyc2lvbj1Ob25lLCBwa2dhcmNoPU5vbmUsIGNoZWNrc3VtPU5vbmUsIGNvbGluZm89VHJ1ZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRhYmxlLmV4cG9ydCh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgY29saW5mbykKKyAgICAgICAgZXhjZXB0IHNxbGl0ZTMuRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihleGMpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBpbXBvcnRvbmUoc2VsZiwgdmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZhbHVlKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGFibGUuaW1wb3J0b25lKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSkKKworICAgIGRlZiBwaW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYucXVpdAorCisgICAgZGVmIGdldGluZm8oc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpCisKKyAgICBkZWYgZ2V0UFIoc2VsZiwgdmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50YWJsZS5nZXRWYWx1ZSh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSkKKyAgICAgICAgZXhjZXB0IHByc2Vydi5Ob3RGb3VuZEVycm9yOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJjYW4gbm90IGZpbmQgdmFsdWUgZm9yICglcywgJXMpIix2ZXJzaW9uLCBjaGVja3N1bSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGV4Y2VwdCBzcWxpdGUzLkVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZXhjKSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcXVpdChzZWxmKToKKyAgICAgICAgc2VsZi5xdWl0PVRydWUKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgd29ya19mb3JldmVyKHNlbGYsKToKKyAgICAgICAgc2VsZi5xdWl0ID0gRmFsc2UKKyAgICAgICAgc2VsZi50aW1lb3V0ID0gMC41CisKKyAgICAgICAgbG9nZ2VyLmluZm8oIlN0YXJ0ZWQgUFJTZXJ2ZXIgd2l0aCBEQmZpbGU6ICVzLCBJUDogJXMsIFBPUlQ6ICVzLCBQSUQ6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAoc2VsZi5kYmZpbGUsIHNlbGYuaG9zdCwgc2VsZi5wb3J0LCBzdHIob3MuZ2V0cGlkKCkpKSkKKworICAgICAgICBzZWxmLmhhbmRsZXJ0aHJlYWQuc3RhcnQoKQorICAgICAgICB3aGlsZSBub3Qgc2VsZi5xdWl0OgorICAgICAgICAgICAgc2VsZi5oYW5kbGVfcmVxdWVzdCgpCisgICAgICAgIHNlbGYuaGFuZGxlcnRocmVhZC5qb2luKCkKKyAgICAgICAgc2VsZi50YWJsZS5zeW5jKCkKKyAgICAgICAgbG9nZ2VyLmluZm8oIlBSU2VydmVyOiBzdG9wcGluZy4uLiIpCisgICAgICAgIHNlbGYuc2VydmVyX2Nsb3NlKCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGFlbW9uOgorICAgICAgICAgICAgcGlkID0gc2VsZi5kYWVtb25pemUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGlkID0gc2VsZi5mb3JrKCkKKworICAgICAgICAjIEVuc3VyZSBib3RoIHRoZSBwYXJlbnQgc2VlcyB0aGlzIGFuZCB0aGUgY2hpbGQgZnJvbSB0aGUgd29ya19mb3JldmVyIGxvZyBlbnRyeSBhYm92ZQorICAgICAgICBsb2dnZXIuaW5mbygiU3RhcnRlZCBQUlNlcnZlciB3aXRoIERCZmlsZTogJXMsIElQOiAlcywgUE9SVDogJXMsIFBJRDogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgIChzZWxmLmRiZmlsZSwgc2VsZi5ob3N0LCBzZWxmLnBvcnQsIHN0cihwaWQpKSkKKworICAgIGRlZiBkZWxwaWQoc2VsZik6CisgICAgICAgIG9zLnJlbW92ZShzZWxmLnBpZGZpbGUpCisKKyAgICBkZWYgZGFlbW9uaXplKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU2VlIEFkdmFuY2VkIFByb2dyYW1taW5nIGluIHRoZSBVTklYLCBTZWMgMTMuMworICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICBpZiBwaWQgPiAwOgorICAgICAgICAgICAgICAgIG9zLndhaXRwaWQocGlkLCAwKQorICAgICAgICAgICAgICAgICNwYXJlbnQgcmV0dXJuIGluc3RlYWQgb2YgZXhpdCB0byBnaXZlIGNvbnRyb2wgCisgICAgICAgICAgICAgICAgcmV0dXJuIHBpZAorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCIlcyBbJWRdIiAlIChlLnN0cmVycm9yLCBlLmVycm5vKSkKKworICAgICAgICBvcy5zZXRzaWQoKQorICAgICAgICAiIiIKKyAgICAgICAgZm9yayBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlIGRhZW1vbiBpcyBub3Qgc2Vzc2lvbiBsZWFkZXIsIAorICAgICAgICB3aGljaCBwcmV2ZW50cyBpdCBmcm9tIGFjcXVpcmluZyBjb250cm9sbGluZyB0ZXJtaW5hbAorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICBpZiBwaWQgPiAwOiAjcGFyZW50CisgICAgICAgICAgICAgICAgb3MuX2V4aXQoMCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiJXMgWyVkXSIgJSAoZS5zdHJlcnJvciwgZS5lcnJubykpCisKKyAgICAgICAgc2VsZi5jbGVhbnVwX2hhbmRsZXMoKQorICAgICAgICBvcy5fZXhpdCgwKQorCisgICAgZGVmIGZvcmsoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICAgICAgaWYgcGlkID4gMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGlkCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIiVzIFslZF0iICUgKGUuc3RyZXJyb3IsIGUuZXJybm8pKQorCisgICAgICAgIGJiLnV0aWxzLnNpZ25hbF9vbl9wYXJlbnRfZXhpdCgiU0lHVEVSTSIpCisgICAgICAgIHNlbGYuY2xlYW51cF9oYW5kbGVzKCkKKyAgICAgICAgb3MuX2V4aXQoMCkKKworICAgIGRlZiBjbGVhbnVwX2hhbmRsZXMoc2VsZik6CisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgc2VsZi5zaWdpbnRfaGFuZGxlcikKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgc2VsZi5zaWd0ZXJtX2hhbmRsZXIpCisgICAgICAgIG9zLnVtYXNrKDApCisgICAgICAgIG9zLmNoZGlyKCIvIikKKworICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisgICAgICAgIHNpID0gZmlsZSgnL2Rldi9udWxsJywgJ3InKQorICAgICAgICBzbyA9IGZpbGUoc2VsZi5sb2dmaWxlLCAnYSsnKQorICAgICAgICBzZSA9IHNvCisgICAgICAgIG9zLmR1cDIoc2kuZmlsZW5vKCksc3lzLnN0ZGluLmZpbGVubygpKQorICAgICAgICBvcy5kdXAyKHNvLmZpbGVubygpLHN5cy5zdGRvdXQuZmlsZW5vKCkpCisgICAgICAgIG9zLmR1cDIoc2UuZmlsZW5vKCksc3lzLnN0ZGVyci5maWxlbm8oKSkKKworICAgICAgICAjIENsZWFyIG91dCBhbGwgbG9nIGhhbmRsZXJzIHByaW9yIHRvIHRoZSBmb3JrKCkgdG8gYXZvaWQgY2FsbGluZworICAgICAgICAjIGV2ZW50IGhhbmRsZXJzIG5vdCBwYXJ0IG9mIHRoZSBQUnNlcnZlcgorICAgICAgICBmb3IgbG9nZ2VyX2l0ZXIgaW4gbG9nZ2luZy5Mb2dnZXIubWFuYWdlci5sb2dnZXJEaWN0LmtleXMoKToKKyAgICAgICAgICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKGxvZ2dlcl9pdGVyKS5oYW5kbGVycyA9IFtdCisKKyAgICAgICAgIyBFbnN1cmUgbG9nZ2luZyBtYWtlcyBpdCB0byB0aGUgbG9nZmlsZQorICAgICAgICBzdHJlYW1oYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKKyAgICAgICAgc3RyZWFtaGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorICAgICAgICBmb3JtYXR0ZXIgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikKKyAgICAgICAgc3RyZWFtaGFuZGxlci5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihzdHJlYW1oYW5kbGVyKQorCisgICAgICAgICMgd3JpdGUgcGlkZmlsZQorICAgICAgICBwaWQgPSBzdHIob3MuZ2V0cGlkKCkpIAorICAgICAgICBwZiA9IGZpbGUoc2VsZi5waWRmaWxlLCAndycpCisgICAgICAgIHBmLndyaXRlKCIlc1xuIiAlIHBpZCkKKyAgICAgICAgcGYuY2xvc2UoKQorCisgICAgICAgIHNlbGYud29ya19mb3JldmVyKCkKKyAgICAgICAgc2VsZi5kZWxwaWQoKQorCitjbGFzcyBQUlNlcnZTaW5nbGV0b24ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGJmaWxlLCBsb2dmaWxlLCBpbnRlcmZhY2UpOgorICAgICAgICBzZWxmLmRiZmlsZSA9IGRiZmlsZQorICAgICAgICBzZWxmLmxvZ2ZpbGUgPSBsb2dmaWxlCisgICAgICAgIHNlbGYuaW50ZXJmYWNlID0gaW50ZXJmYWNlCisgICAgICAgIHNlbGYuaG9zdCA9IE5vbmUKKyAgICAgICAgc2VsZi5wb3J0ID0gTm9uZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLnByc2VydiA9IFBSU2VydmVyKHNlbGYuZGJmaWxlLCBzZWxmLmxvZ2ZpbGUsIHNlbGYuaW50ZXJmYWNlLCBkYWVtb249RmFsc2UpCisgICAgICAgIHNlbGYucHJzZXJ2LnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ob3N0LCBzZWxmLnBvcnQgPSBzZWxmLnByc2Vydi5nZXRpbmZvKCkKKworICAgIGRlZiBnZXRpbmZvKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuaG9zdCwgc2VsZi5wb3J0KQorCitjbGFzcyBQUlNlcnZlckNvbm5lY3Rpb24ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCk6CisgICAgICAgIGlmIGlzX2xvY2FsX3NwZWNpYWwoaG9zdCwgcG9ydCk6CisgICAgICAgICAgICBob3N0LCBwb3J0ID0gc2luZ2xldG9uLmdldGluZm8oKQorICAgICAgICBzZWxmLmhvc3QgPSBob3N0CisgICAgICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uLCBzZWxmLnRyYW5zcG9ydCA9IGJiLnNlcnZlci54bWxycGMuX2NyZWF0ZV9zZXJ2ZXIoc2VsZi5ob3N0LCBzZWxmLnBvcnQpCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiVGVybWluYXRpbmcgUFJTZXJ2ZXIuLi4iKQorICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uLnF1aXQoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzXG4iICUgc3RyKGV4YykpCisKKyAgICBkZWYgZ2V0UFIoc2VsZiwgdmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLmdldFBSKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKQorCisgICAgZGVmIHBpbmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24ucGluZygpCisKKyAgICBkZWYgZXhwb3J0KHNlbGYsdmVyc2lvbj1Ob25lLCBwa2dhcmNoPU5vbmUsIGNoZWNrc3VtPU5vbmUsIGNvbGluZm89VHJ1ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uZXhwb3J0KHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCBjb2xpbmZvKQorCisgICAgZGVmIGltcG9ydG9uZShzZWxmLCB2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmFsdWUpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLmltcG9ydG9uZSh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmFsdWUpCisKKyAgICBkZWYgZ2V0aW5mbyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaG9zdCwgc2VsZi5wb3J0CisKK2RlZiBzdGFydF9kYWVtb24oZGJmaWxlLCBob3N0LCBwb3J0LCBsb2dmaWxlKToKKyAgICBwaWRmaWxlID0gUElEUFJFRklYICUgKGhvc3QsIHBvcnQpCisgICAgdHJ5OgorICAgICAgICBwZiA9IGZpbGUocGlkZmlsZSwncicpCisgICAgICAgIHBpZCA9IGludChwZi5yZWFkbGluZSgpLnN0cmlwKCkpCisgICAgICAgIHBmLmNsb3NlKCkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcGlkID0gTm9uZQorCisgICAgaWYgcGlkOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJwaWRmaWxlICVzIGFscmVhZHkgZXhpc3QuIERhZW1vbiBhbHJlYWR5IHJ1bm5pbmc/XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBwaWRmaWxlKQorICAgICAgICByZXR1cm4gMQorCisgICAgc2VydmVyID0gUFJTZXJ2ZXIob3MucGF0aC5hYnNwYXRoKGRiZmlsZSksIG9zLnBhdGguYWJzcGF0aChsb2dmaWxlKSwgKGhvc3QscG9ydCkpCisgICAgc2VydmVyLnN0YXJ0KCkKKyAgICByZXR1cm4gMAorCitkZWYgc3RvcF9kYWVtb24oaG9zdCwgcG9ydCk6CisgICAgcGlkZmlsZSA9IFBJRFBSRUZJWCAlIChob3N0LCBwb3J0KQorICAgIHRyeToKKyAgICAgICAgcGYgPSBmaWxlKHBpZGZpbGUsJ3InKQorICAgICAgICBwaWQgPSBpbnQocGYucmVhZGxpbmUoKS5zdHJpcCgpKQorICAgICAgICBwZi5jbG9zZSgpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHBpZCA9IE5vbmUKKworICAgIGlmIG5vdCBwaWQ6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInBpZGZpbGUgJXMgZG9lcyBub3QgZXhpc3QuIERhZW1vbiBub3QgcnVubmluZz9cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICUgcGlkZmlsZSkKKworICAgIHRyeToKKyAgICAgICAgUFJTZXJ2ZXJDb25uZWN0aW9uKGhvc3QsIHBvcnQpLnRlcm1pbmF0ZSgpCisgICAgZXhjZXB0OgorICAgICAgICBsb2dnZXIuY3JpdGljYWwoIlN0b3AgUFJTZXJ2aWNlICVzOiVkIGZhaWxlZCIgJSAoaG9zdCxwb3J0KSkKKworICAgIHRyeToKKyAgICAgICAgaWYgcGlkOgorICAgICAgICAgICAgd2FpdF90aW1lb3V0ID0gMAorICAgICAgICAgICAgcHJpbnQoIldhaXRpbmcgZm9yIHByLXNlcnZlciB0byBleGl0LiIpCisgICAgICAgICAgICB3aGlsZSBpc19ydW5uaW5nKHBpZCkgYW5kIHdhaXRfdGltZW91dCA8IDUwOgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICAgICAgICAgIHdhaXRfdGltZW91dCArPSAxCisKKyAgICAgICAgICAgIGlmIGlzX3J1bm5pbmcocGlkKToKKyAgICAgICAgICAgICAgICBwcmludCgiU2VuZGluZyBTSUdURVJNIHRvIHByLXNlcnZlci4iKQorICAgICAgICAgICAgICAgIG9zLmtpbGwocGlkLHNpZ25hbC5TSUdURVJNKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwaWRmaWxlKToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUocGlkZmlsZSkKKworICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGVyciA9IHN0cihlKQorICAgICAgICBpZiBlcnIuZmluZCgiTm8gc3VjaCBwcm9jZXNzIikgPD0gMDoKKyAgICAgICAgICAgIHJhaXNlIGUKKworICAgIHJldHVybiAwCisKK2RlZiBpc19ydW5uaW5nKHBpZCk6CisgICAgdHJ5OgorICAgICAgICBvcy5raWxsKHBpZCwgMCkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgIGlmIGVyci5lcnJubyA9PSBlcnJuby5FU1JDSDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBUcnVlCisKK2RlZiBpc19sb2NhbF9zcGVjaWFsKGhvc3QsIHBvcnQpOgorICAgIGlmIGhvc3Quc3RyaXAoKS51cHBlcigpID09ICdsb2NhbGhvc3QnLnVwcGVyKCkgYW5kIChub3QgcG9ydCk6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2NsYXNzIFBSU2VydmljZUNvbmZpZ0Vycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitkZWYgYXV0b19zdGFydChkKToKKyAgICBnbG9iYWwgc2luZ2xldG9uCisKKyAgICBob3N0X3BhcmFtcyA9IGZpbHRlcihOb25lLCAoZC5nZXRWYXIoJ1BSU0VSVl9IT1NUJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCc6JykpCisgICAgaWYgbm90IGhvc3RfcGFyYW1zOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgaWYgbGVuKGhvc3RfcGFyYW1zKSAhPSAyOgorICAgICAgICBsb2dnZXIuY3JpdGljYWwoJ1xuJy5qb2luKFsnUFJTRVJWX0hPU1Q6IGluY29ycmVjdCBmb3JtYXQnLAorICAgICAgICAgICAgICAgICdVc2FnZTogUFJTRVJWX0hPU1QgPSAiPGhvc3RuYW1lPjo8cG9ydD4iJ10pKQorICAgICAgICByYWlzZSBQUlNlcnZpY2VDb25maWdFcnJvcgorCisgICAgaWYgaXNfbG9jYWxfc3BlY2lhbChob3N0X3BhcmFtc1swXSwgaW50KGhvc3RfcGFyYW1zWzFdKSkgYW5kIG5vdCBzaW5nbGV0b246CisgICAgICAgIGltcG9ydCBiYi51dGlscworICAgICAgICBjYWNoZWRpciA9IChkLmdldFZhcigiUEVSU0lTVEVOVF9ESVIiLCBUcnVlKSBvciBkLmdldFZhcigiQ0FDSEUiLCBUcnVlKSkKKyAgICAgICAgaWYgbm90IGNhY2hlZGlyOgorICAgICAgICAgICAgbG9nZ2VyLmNyaXRpY2FsKCJQbGVhc2Ugc2V0IHRoZSAnUEVSU0lTVEVOVF9ESVInIG9yICdDQUNIRScgdmFyaWFibGUiKQorICAgICAgICAgICAgcmFpc2UgUFJTZXJ2aWNlQ29uZmlnRXJyb3IKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGNhY2hlZGlyKQorICAgICAgICBkYmZpbGUgPSBvcy5wYXRoLmpvaW4oY2FjaGVkaXIsICJwcnNlcnYuc3FsaXRlMyIpCisgICAgICAgIGxvZ2ZpbGUgPSBvcy5wYXRoLmpvaW4oY2FjaGVkaXIsICJwcnNlcnYubG9nIikKKyAgICAgICAgc2luZ2xldG9uID0gUFJTZXJ2U2luZ2xldG9uKG9zLnBhdGguYWJzcGF0aChkYmZpbGUpLCBvcy5wYXRoLmFic3BhdGgobG9nZmlsZSksICgibG9jYWxob3N0IiwwKSkKKyAgICAgICAgc2luZ2xldG9uLnN0YXJ0KCkKKyAgICBpZiBzaW5nbGV0b246CisgICAgICAgIGhvc3QsIHBvcnQgPSBzaW5nbGV0b24uZ2V0aW5mbygpCisgICAgZWxzZToKKyAgICAgICAgaG9zdCA9IGhvc3RfcGFyYW1zWzBdCisgICAgICAgIHBvcnQgPSBpbnQoaG9zdF9wYXJhbXNbMV0pCisKKyAgICB0cnk6CisgICAgICAgIGNvbm5lY3Rpb24gPSBQUlNlcnZlckNvbm5lY3Rpb24oaG9zdCxwb3J0KQorICAgICAgICBjb25uZWN0aW9uLnBpbmcoKQorICAgICAgICByZWFsaG9zdCwgcmVhbHBvcnQgPSBjb25uZWN0aW9uLmdldGluZm8oKQorICAgICAgICByZXR1cm4gc3RyKHJlYWxob3N0KSArICI6IiArIHN0cihyZWFscG9ydCkKKyAgICAgICAgCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgbG9nZ2VyLmNyaXRpY2FsKCJQUnNlcnZpY2UgJXM6JWQgbm90IGF2YWlsYWJsZSIgJSAoaG9zdCwgcG9ydCkpCisgICAgICAgIHJhaXNlIFBSU2VydmljZUNvbmZpZ0Vycm9yCisKK2RlZiBhdXRvX3NodXRkb3duKGQ9Tm9uZSk6CisgICAgZ2xvYmFsIHNpbmdsZXRvbgorICAgIGlmIHNpbmdsZXRvbjoKKyAgICAgICAgaG9zdCwgcG9ydCA9IHNpbmdsZXRvbi5nZXRpbmZvKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgUFJTZXJ2ZXJDb25uZWN0aW9uKGhvc3QsIHBvcnQpLnRlcm1pbmF0ZSgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGxvZ2dlci5jcml0aWNhbCgiU3RvcCBQUlNlcnZpY2UgJXM6JWQgZmFpbGVkIiAlIChob3N0LHBvcnQpKQorICAgICAgICBzaW5nbGV0b24gPSBOb25lCisKK2RlZiBwaW5nKGhvc3QsIHBvcnQpOgorICAgIGNvbm49UFJTZXJ2ZXJDb25uZWN0aW9uKGhvc3QsIHBvcnQpCisgICAgcmV0dXJuIGNvbm4ucGluZygpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3B5aW5vdGlmeS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHlpbm90aWZ5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYWUwMDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3B5aW5vdGlmeS5weQpAQCAtMCwwICsxLDI0MTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIHB5aW5vdGlmeS5weSAtIHB5dGhvbiBpbnRlcmZhY2UgdG8gaW5vdGlmeQorIyBDb3B5cmlnaHQgKGMpIDIwMDUtMjAxNSBTZWJhc3RpZW4gTWFydGluaSA8c2ViQGRienRlYW0ub3JnPgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisjIFRIRSBTT0ZUV0FSRS4KKyIiIgorcHlpbm90aWZ5CisKK0BhdXRob3I6IFNlYmFzdGllbiBNYXJ0aW5pCitAbGljZW5zZTogTUlUIExpY2Vuc2UKK0Bjb250YWN0OiBzZWJAZGJ6dGVhbS5vcmcKKyIiIgorCitjbGFzcyBQeWlub3RpZnlFcnJvcihFeGNlcHRpb24pOgorICAgICIiIkluZGljYXRlcyBleGNlcHRpb25zIHJhaXNlZCBieSBhIFB5aW5vdGlmeSBjbGFzcy4iIiIKKyAgICBwYXNzCisKKworY2xhc3MgVW5zdXBwb3J0ZWRQeXRob25WZXJzaW9uRXJyb3IoUHlpbm90aWZ5RXJyb3IpOgorICAgICIiIgorICAgIFJhaXNlZCBvbiB1bnN1cHBvcnRlZCBQeXRob24gdmVyc2lvbnMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZlcnNpb24pOgorICAgICAgICAiIiIKKyAgICAgICAgQHBhcmFtIHZlcnNpb246IEN1cnJlbnQgUHl0aG9uIHZlcnNpb24KKyAgICAgICAgQHR5cGUgdmVyc2lvbjogc3RyaW5nCisgICAgICAgICIiIgorICAgICAgICBlcnIgPSAnUHl0aG9uICVzIGlzIHVuc3VwcG9ydGVkLCByZXF1aXJlcyBhdCBsZWFzdCBQeXRob24gMi40JworICAgICAgICBQeWlub3RpZnlFcnJvci5fX2luaXRfXyhzZWxmLCBlcnIgJSB2ZXJzaW9uKQorCisKKyMgQ2hlY2sgUHl0aG9uIHZlcnNpb24KK2ltcG9ydCBzeXMKK2lmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNCk6CisgICAgcmFpc2UgVW5zdXBwb3J0ZWRQeXRob25WZXJzaW9uRXJyb3Ioc3lzLnZlcnNpb24pCisKKworIyBJbXBvcnQgZGlyZWN0aXZlcworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IG9zCitpbXBvcnQgc2VsZWN0CitpbXBvcnQgc3RydWN0CitpbXBvcnQgZmNudGwKK2ltcG9ydCBlcnJubworaW1wb3J0IHRlcm1pb3MKK2ltcG9ydCBhcnJheQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBhdGV4aXQKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCitmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZWRlbHRhCitpbXBvcnQgdGltZQoraW1wb3J0IHJlCitpbXBvcnQgYXN5bmNvcmUKK2ltcG9ydCBzdWJwcm9jZXNzCisKK3RyeToKKyAgICBmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcyAgIyBXaWxsIGZhaWwgb24gUHl0aG9uIDIuNCB3aGljaCBoYXMgcmVkdWNlKCkgYnVpbHRpbiBhbnl3YXkuCisKK3RyeToKKyAgICBmcm9tIGdsb2IgaW1wb3J0IGlnbG9iIGFzIGdsb2IKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAjIFB5dGhvbiAyLjQgZG9lcyBub3QgaGF2ZSBnbG9iLmlnbG9iKCkuCisgICAgZnJvbSBnbG9iIGltcG9ydCBnbG9iIGFzIGdsb2IKKwordHJ5OgorICAgIGltcG9ydCBjdHlwZXMKKyAgICBpbXBvcnQgY3R5cGVzLnV0aWwKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBjdHlwZXMgPSBOb25lCisKK3RyeToKKyAgICBpbXBvcnQgaW5vdGlmeV9zeXNjYWxscworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGlub3RpZnlfc3lzY2FsbHMgPSBOb25lCisKKworX19hdXRob3JfXyA9ICJzZWJAZGJ6dGVhbS5vcmcgKFNlYmFzdGllbiBNYXJ0aW5pKSIKKworX192ZXJzaW9uX18gPSAiMC45LjUiCisKK19fbWV0YWNsYXNzX18gPSB0eXBlICAjIFVzZSBuZXctc3R5bGUgY2xhc3NlcyBieSBkZWZhdWx0CisKKworIyBDb21wYXRpYml0eSBtb2RlOiBzZXQgdG8gVHJ1ZSB0byBpbXByb3ZlIGNvbXBhdGliaWxpdHkgd2l0aAorIyBQeWlub3RpZnkgMC43LjEuIERvIG5vdCBzZXQgdGhpcyB2YXJpYWJsZSB5b3Vyc2VsZiwgY2FsbCB0aGUKKyMgZnVuY3Rpb24gY29tcGF0aWJpbGl0eV9tb2RlKCkgaW5zdGVhZC4KK0NPTVBBVElCSUxJVFlfTU9ERSA9IEZhbHNlCisKKworY2xhc3MgSW5vdGlmeUJpbmRpbmdOb3RGb3VuZEVycm9yKFB5aW5vdGlmeUVycm9yKToKKyAgICAiIiIKKyAgICBSYWlzZWQgd2hlbiBubyBpbm90aWZ5IHN1cHBvcnQgY291bGRuJ3QgYmUgZm91bmQuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBlcnIgPSAiQ291bGRuJ3QgZmluZCBhbnkgaW5vdGlmeSBiaW5kaW5nIgorICAgICAgICBQeWlub3RpZnlFcnJvci5fX2luaXRfXyhzZWxmLCBlcnIpCisKKworY2xhc3MgSU5vdGlmeVdyYXBwZXI6CisgICAgIiIiCisgICAgQWJzdHJhY3QgY2xhc3Mgd3JhcHBpbmcgYWNjZXNzIHRvIGlub3RpZnkncyBmdW5jdGlvbnMuIFRoaXMgaXMgYW4KKyAgICBpbnRlcm5hbCBjbGFzcy4KKyAgICAiIiIKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZSgpOgorICAgICAgICAjIEZpcnN0LCB0cnkgdG8gdXNlIGN0eXBlcy4KKyAgICAgICAgaWYgY3R5cGVzOgorICAgICAgICAgICAgaW5vdGlmeSA9IF9DdHlwZXNMaWJjSU5vdGlmeVdyYXBwZXIoKQorICAgICAgICAgICAgaWYgaW5vdGlmeS5pbml0KCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGlub3RpZnkKKyAgICAgICAgIyBTZWNvbmQsIHNlZSBpZiBDIGV4dGVuc2lvbiBpcyBjb21waWxlZC4KKyAgICAgICAgaWYgaW5vdGlmeV9zeXNjYWxsczoKKyAgICAgICAgICAgIGlub3RpZnkgPSBfSU5vdGlmeVN5c2NhbGxzV3JhcHBlcigpCisgICAgICAgICAgICBpZiBpbm90aWZ5LmluaXQoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5vdGlmeQorCisgICAgZGVmIGdldF9lcnJubyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBOb25lIGlzIG5vIGVycm5vIGNvZGUgaXMgYXZhaWxhYmxlLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9lcnJubygpCisKKyAgICBkZWYgc3RyX2Vycm5vKHNlbGYpOgorICAgICAgICBjb2RlID0gc2VsZi5nZXRfZXJybm8oKQorICAgICAgICBpZiBjb2RlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gJ0Vycm5vOiBubyBlcnJubyBzdXBwb3J0JworICAgICAgICByZXR1cm4gJ0Vycm5vPSVzICglcyknICUgKG9zLnN0cmVycm9yKGNvZGUpLCBlcnJuby5lcnJvcmNvZGVbY29kZV0pCisKKyAgICBkZWYgaW5vdGlmeV9pbml0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faW5vdGlmeV9pbml0KCkKKworICAgIGRlZiBpbm90aWZ5X2FkZF93YXRjaChzZWxmLCBmZCwgcGF0aG5hbWUsIG1hc2spOgorICAgICAgICAjIFVuaWNvZGUgc3RyaW5ncyBtdXN0IGJlIGVuY29kZWQgdG8gc3RyaW5nIHByaW9yIHRvIGNhbGxpbmcgdGhpcworICAgICAgICAjIG1ldGhvZC4KKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocGF0aG5hbWUsIHN0cikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lub3RpZnlfYWRkX3dhdGNoKGZkLCBwYXRobmFtZSwgbWFzaykKKworICAgIGRlZiBpbm90aWZ5X3JtX3dhdGNoKHNlbGYsIGZkLCB3ZCk6CisgICAgICAgIHJldHVybiBzZWxmLl9pbm90aWZ5X3JtX3dhdGNoKGZkLCB3ZCkKKworCitjbGFzcyBfSU5vdGlmeVN5c2NhbGxzV3JhcHBlcihJTm90aWZ5V3JhcHBlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAjIFN0b3JlcyB0aGUgbGFzdCBlcnJubyB2YWx1ZS4KKyAgICAgICAgc2VsZi5fbGFzdF9lcnJubyA9IE5vbmUKKworICAgIGRlZiBpbml0KHNlbGYpOgorICAgICAgICBhc3NlcnQgaW5vdGlmeV9zeXNjYWxscworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9nZXRfZXJybm8oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9sYXN0X2Vycm5vCisKKyAgICBkZWYgX2lub3RpZnlfaW5pdChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmQgPSBpbm90aWZ5X3N5c2NhbGxzLmlub3RpZnlfaW5pdCgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlcnI6CisgICAgICAgICAgICBzZWxmLl9sYXN0X2Vycm5vID0gZXJyLmVycm5vCisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgcmV0dXJuIGZkCisKKyAgICBkZWYgX2lub3RpZnlfYWRkX3dhdGNoKHNlbGYsIGZkLCBwYXRobmFtZSwgbWFzayk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdkID0gaW5vdGlmeV9zeXNjYWxscy5pbm90aWZ5X2FkZF93YXRjaChmZCwgcGF0aG5hbWUsIG1hc2spCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlcnI6CisgICAgICAgICAgICBzZWxmLl9sYXN0X2Vycm5vID0gZXJyLmVycm5vCisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgcmV0dXJuIHdkCisKKyAgICBkZWYgX2lub3RpZnlfcm1fd2F0Y2goc2VsZiwgZmQsIHdkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0ID0gaW5vdGlmeV9zeXNjYWxscy5pbm90aWZ5X3JtX3dhdGNoKGZkLCB3ZCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGVycjoKKyAgICAgICAgICAgIHNlbGYuX2xhc3RfZXJybm8gPSBlcnIuZXJybm8KKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICByZXR1cm4gcmV0CisKKworY2xhc3MgX0N0eXBlc0xpYmNJTm90aWZ5V3JhcHBlcihJTm90aWZ5V3JhcHBlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9saWJjID0gTm9uZQorICAgICAgICBzZWxmLl9nZXRfZXJybm9fZnVuYyA9IE5vbmUKKworICAgIGRlZiBpbml0KHNlbGYpOgorICAgICAgICBhc3NlcnQgY3R5cGVzCisKKyAgICAgICAgdHJ5X2xpYmNfbmFtZSA9ICdjJworICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnZnJlZWJzZCcpOgorICAgICAgICAgICAgdHJ5X2xpYmNfbmFtZSA9ICdpbm90aWZ5JworCisgICAgICAgIGxpYmNfbmFtZSA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGliY19uYW1lID0gY3R5cGVzLnV0aWwuZmluZF9saWJyYXJ5KHRyeV9saWJjX25hbWUpCisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJvcik6CisgICAgICAgICAgICBwYXNzICAjIFdpbGwgYXR0ZW1wIHRvIGxvYWQgaXQgd2l0aCBOb25lIGFueXdheS4KKworICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvID49ICgyLCA2KToKKyAgICAgICAgICAgIHNlbGYuX2xpYmMgPSBjdHlwZXMuQ0RMTChsaWJjX25hbWUsIHVzZV9lcnJubz1UcnVlKQorICAgICAgICAgICAgc2VsZi5fZ2V0X2Vycm5vX2Z1bmMgPSBjdHlwZXMuZ2V0X2Vycm5vCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9saWJjID0gY3R5cGVzLkNETEwobGliY19uYW1lKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gc2VsZi5fbGliYy5fX2Vycm5vX2xvY2F0aW9uCisgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVzdHlwZSA9IGN0eXBlcy5QT0lOVEVSKGN0eXBlcy5jX2ludCkKKyAgICAgICAgICAgICAgICBzZWxmLl9nZXRfZXJybm9fZnVuYyA9IGxhbWJkYTogbG9jYXRpb24oKS5jb250ZW50cy52YWx1ZQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIEV2ZW50dWFsbHkgY2hlY2sgdGhhdCBsaWJjIGhhcyBuZWVkZWQgaW5vdGlmeSBiaW5kaW5ncy4KKyAgICAgICAgaWYgKG5vdCBoYXNhdHRyKHNlbGYuX2xpYmMsICdpbm90aWZ5X2luaXQnKSBvcgorICAgICAgICAgICAgbm90IGhhc2F0dHIoc2VsZi5fbGliYywgJ2lub3RpZnlfYWRkX3dhdGNoJykgb3IKKyAgICAgICAgICAgIG5vdCBoYXNhdHRyKHNlbGYuX2xpYmMsICdpbm90aWZ5X3JtX3dhdGNoJykpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgc2VsZi5fbGliYy5pbm90aWZ5X2luaXQuYXJndHlwZXMgPSBbXQorICAgICAgICBzZWxmLl9saWJjLmlub3RpZnlfaW5pdC5yZXN0eXBlID0gY3R5cGVzLmNfaW50CisgICAgICAgIHNlbGYuX2xpYmMuaW5vdGlmeV9hZGRfd2F0Y2guYXJndHlwZXMgPSBbY3R5cGVzLmNfaW50LCBjdHlwZXMuY19jaGFyX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWludDMyXQorICAgICAgICBzZWxmLl9saWJjLmlub3RpZnlfYWRkX3dhdGNoLnJlc3R5cGUgPSBjdHlwZXMuY19pbnQKKyAgICAgICAgc2VsZi5fbGliYy5pbm90aWZ5X3JtX3dhdGNoLmFyZ3R5cGVzID0gW2N0eXBlcy5jX2ludCwgY3R5cGVzLmNfaW50XQorICAgICAgICBzZWxmLl9saWJjLmlub3RpZnlfcm1fd2F0Y2gucmVzdHlwZSA9IGN0eXBlcy5jX2ludAorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9nZXRfZXJybm8oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2dldF9lcnJub19mdW5jIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9lcnJub19mdW5jKCkKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfaW5vdGlmeV9pbml0KHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5fbGliYyBpcyBub3QgTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5fbGliYy5pbm90aWZ5X2luaXQoKQorCisgICAgZGVmIF9pbm90aWZ5X2FkZF93YXRjaChzZWxmLCBmZCwgcGF0aG5hbWUsIG1hc2spOgorICAgICAgICBhc3NlcnQgc2VsZi5fbGliYyBpcyBub3QgTm9uZQorICAgICAgICBwYXRobmFtZSA9IGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcihwYXRobmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpYmMuaW5vdGlmeV9hZGRfd2F0Y2goZmQsIHBhdGhuYW1lLCBtYXNrKQorCisgICAgZGVmIF9pbm90aWZ5X3JtX3dhdGNoKHNlbGYsIGZkLCB3ZCk6CisgICAgICAgIGFzc2VydCBzZWxmLl9saWJjIGlzIG5vdCBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9saWJjLmlub3RpZnlfcm1fd2F0Y2goZmQsIHdkKQorCisgICAgZGVmIF9zeXNjdGwoc2VsZiwgKmFyZ3MpOgorICAgICAgICBhc3NlcnQgc2VsZi5fbGliYyBpcyBub3QgTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5fbGliYy5zeXNjdGwoKmFyZ3MpCisKKworIyBMb2dnaW5nCitkZWYgbG9nZ2VyX2luaXQoKToKKyAgICAiIiJJbml0aWFsaXplIGxvZ2dlciBpbnN0YW5jZS4iIiIKKyAgICBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcigicHlpbm90aWZ5IikKKyAgICBjb25zb2xlX2hhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQorICAgIGNvbnNvbGVfaGFuZGxlci5zZXRGb3JtYXR0ZXIoCisgICAgICAgIGxvZ2dpbmcuRm9ybWF0dGVyKCJbJShhc2N0aW1lKXMgJShuYW1lKXMgJShsZXZlbG5hbWUpc10gJShtZXNzYWdlKXMiKSkKKyAgICBsb2cuYWRkSGFuZGxlcihjb25zb2xlX2hhbmRsZXIpCisgICAgbG9nLnNldExldmVsKDIwKQorICAgIHJldHVybiBsb2cKKworbG9nID0gbG9nZ2VyX2luaXQoKQorCisKKyMgaW5vdGlmeSdzIHZhcmlhYmxlcworY2xhc3MgU3lzQ3RsSU5vdGlmeToKKyAgICAiIiIKKyAgICBBY2Nlc3MgKHJlYWQsIHdyaXRlKSBpbm90aWZ5J3MgdmFyaWFibGVzIHRocm91Z2ggc3lzY3RsLiBVc3VhbGx5IGl0CisgICAgcmVxdWlyZXMgYWRtaW5pc3RyYXRvciByaWdodHMgdG8gdXBkYXRlIHRoZW0uCisKKyAgICBFeGFtcGxlczoKKyAgICAgIC0gUmVhZCBtYXhfcXVldWVkX2V2ZW50cyBhdHRyaWJ1dGU6IG15dmFyID0gbWF4X3F1ZXVlZF9ldmVudHMudmFsdWUKKyAgICAgIC0gVXBkYXRlIG1heF9xdWV1ZWRfZXZlbnRzIGF0dHJpYnV0ZTogbWF4X3F1ZXVlZF9ldmVudHMudmFsdWUgPSA0MgorICAgICIiIgorCisgICAgaW5vdGlmeV9hdHRycyA9IHsnbWF4X3VzZXJfaW5zdGFuY2VzJzogMSwKKyAgICAgICAgICAgICAgICAgICAgICdtYXhfdXNlcl93YXRjaGVzJzogMiwKKyAgICAgICAgICAgICAgICAgICAgICdtYXhfcXVldWVkX2V2ZW50cyc6IDN9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXR0cm5hbWUsIGlub3RpZnlfd3JhcHBlcik6CisgICAgICAgICMgRklYTUU6IHJpZ2h0IG5vdyBvbmx5IHN1cHBvcnRpbmcgY3R5cGVzCisgICAgICAgIGFzc2VydCBjdHlwZXMKKyAgICAgICAgc2VsZi5fYXR0cm5hbWUgPSBhdHRybmFtZQorICAgICAgICBzZWxmLl9pbm90aWZ5X3dyYXBwZXIgPSBpbm90aWZ5X3dyYXBwZXIKKyAgICAgICAgc2lubyA9IGN0eXBlcy5jX2ludCAqIDMKKyAgICAgICAgc2VsZi5fYXR0ciA9IHNpbm8oNSwgMjAsIFN5c0N0bElOb3RpZnkuaW5vdGlmeV9hdHRyc1thdHRybmFtZV0pCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZShhdHRybmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBGYWN0b3J5IG1ldGhvZCBpbnN0YW5jaWF0aW5nIGFuZCByZXR1cm5pbmcgdGhlIHJpZ2h0IHdyYXBwZXIuCisgICAgICAgICIiIgorICAgICAgICAjIEZJWE1FOiByaWdodCBub3cgb25seSBzdXBwb3J0aW5nIGN0eXBlcworICAgICAgICBpZiBjdHlwZXMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlub3RpZnlfd3JhcHBlciA9IF9DdHlwZXNMaWJjSU5vdGlmeVdyYXBwZXIoKQorICAgICAgICBpZiBub3QgaW5vdGlmeV93cmFwcGVyLmluaXQoKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBTeXNDdGxJTm90aWZ5KGF0dHJuYW1lLCBpbm90aWZ5X3dyYXBwZXIpCisKKyAgICBkZWYgZ2V0X3ZhbChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldHMgYXR0cmlidXRlJ3MgdmFsdWUuIFJhaXNlcyBPU0Vycm9yIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkLgorCisgICAgICAgIEByZXR1cm46IHN0b3JlZCB2YWx1ZS4KKyAgICAgICAgQHJ0eXBlOiBpbnQKKyAgICAgICAgIiIiCisgICAgICAgIG9sZHYgPSBjdHlwZXMuY19pbnQoMCkKKyAgICAgICAgc2l6ZSA9IGN0eXBlcy5jX2ludChjdHlwZXMuc2l6ZW9mKG9sZHYpKQorICAgICAgICBzeXNjdGwgPSBzZWxmLl9pbm90aWZ5X3dyYXBwZXIuX3N5c2N0bAorICAgICAgICByZXMgPSBzeXNjdGwoc2VsZi5fYXR0ciwgMywKKyAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3ZvaWRwKGN0eXBlcy5hZGRyZXNzb2Yob2xkdikpLAorICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmFkZHJlc3NvZihzaXplKSwKKyAgICAgICAgICAgICAgICAgICAgIE5vbmUsIDApCisgICAgICAgIGlmIHJlcyA9PSAtMToKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3Ioc2VsZi5faW5vdGlmeV93cmFwcGVyLmdldF9lcnJubygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbm90aWZ5X3dyYXBwZXIuc3RyX2Vycm5vKCkpCisgICAgICAgIHJldHVybiBvbGR2LnZhbHVlCisKKyAgICBkZWYgc2V0X3ZhbChzZWxmLCBudmFsKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldHMgbmV3IGF0dHJpYnV0ZSdzIHZhbHVlLiBSYWlzZXMgT1NFcnJvciBpZiB0aGUgb3BlcmF0aW9uIGZhaWxlZC4KKworICAgICAgICBAcGFyYW0gbnZhbDogcmVwbGFjZXMgY3VycmVudCB2YWx1ZSBieSBudmFsLgorICAgICAgICBAdHlwZSBudmFsOiBpbnQKKyAgICAgICAgIiIiCisgICAgICAgIG9sZHYgPSBjdHlwZXMuY19pbnQoMCkKKyAgICAgICAgc2l6ZW8gPSBjdHlwZXMuY19pbnQoY3R5cGVzLnNpemVvZihvbGR2KSkKKyAgICAgICAgbmV3diA9IGN0eXBlcy5jX2ludChudmFsKQorICAgICAgICBzaXplbiA9IGN0eXBlcy5jX2ludChjdHlwZXMuc2l6ZW9mKG5ld3YpKQorICAgICAgICBzeXNjdGwgPSBzZWxmLl9pbm90aWZ5X3dyYXBwZXIuX3N5c2N0bAorICAgICAgICByZXMgPSBzeXNjdGwoc2VsZi5fYXR0ciwgMywKKyAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3ZvaWRwKGN0eXBlcy5hZGRyZXNzb2Yob2xkdikpLAorICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmFkZHJlc3NvZihzaXplbyksCisgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY192b2lkcChjdHlwZXMuYWRkcmVzc29mKG5ld3YpKSwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVuKQorICAgICAgICBpZiByZXMgPT0gLTE6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKHNlbGYuX2lub3RpZnlfd3JhcHBlci5nZXRfZXJybm8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5vdGlmeV93cmFwcGVyLnN0cl9lcnJubygpKQorCisgICAgdmFsdWUgPSBwcm9wZXJ0eShnZXRfdmFsLCBzZXRfdmFsKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzwlcz0lZD4nICUgKHNlbGYuX2F0dHJuYW1lLCBzZWxmLmdldF92YWwoKSkKKworCisjIElub3RpZnkncyB2YXJpYWJsZXMKKyMKKyMgRklYTUU6IGN1cnJlbnRseSB0aGVzZSB2YXJpYWJsZXMgYXJlIG9ubHkgYWNjZXNzaWJsZSB3aGVuIGN0eXBlcyBpcyB1c2VkLAorIyAgICAgICAgb3RoZXJ3aXNlIHRoZXJlIGFyZSBzZXQgdG8gTm9uZS4KKyMKKyMgcmVhZDogbXl2YXIgPSBtYXhfcXVldWVkX2V2ZW50cy52YWx1ZQorIyB1cGRhdGU6IG1heF9xdWV1ZWRfZXZlbnRzLnZhbHVlID0gNDIKKyMKK2ZvciBhdHRybmFtZSBpbiAoJ21heF9xdWV1ZWRfZXZlbnRzJywgJ21heF91c2VyX2luc3RhbmNlcycsICdtYXhfdXNlcl93YXRjaGVzJyk6CisgICAgZ2xvYmFscygpW2F0dHJuYW1lXSA9IFN5c0N0bElOb3RpZnkuY3JlYXRlKGF0dHJuYW1lKQorCisKK2NsYXNzIEV2ZW50c0NvZGVzOgorICAgICIiIgorICAgIFNldCBvZiBjb2RlcyBjb3JyZXNwb25kaW5nIHRvIGVhY2gga2luZCBvZiBldmVudHMuCisgICAgU29tZSBvZiB0aGVzZSBmbGFncyBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIGlub3RpZnksIHdoZXJlYXMKKyAgICB0aGUgb3RoZXJzIGFyZSBzZW50IHRvIHVzZXJzcGFjZSBieSBpbm90aWZ5IG5vdGlmeWluZyBzb21lIGV2ZW50cy4KKworICAgIEBjdmFyIElOX0FDQ0VTUzogRmlsZSB3YXMgYWNjZXNzZWQuCisgICAgQHR5cGUgSU5fQUNDRVNTOiBpbnQKKyAgICBAY3ZhciBJTl9NT0RJRlk6IEZpbGUgd2FzIG1vZGlmaWVkLgorICAgIEB0eXBlIElOX01PRElGWTogaW50CisgICAgQGN2YXIgSU5fQVRUUklCOiBNZXRhZGF0YSBjaGFuZ2VkLgorICAgIEB0eXBlIElOX0FUVFJJQjogaW50CisgICAgQGN2YXIgSU5fQ0xPU0VfV1JJVEU6IFdyaXR0YWJsZSBmaWxlIHdhcyBjbG9zZWQuCisgICAgQHR5cGUgSU5fQ0xPU0VfV1JJVEU6IGludAorICAgIEBjdmFyIElOX0NMT1NFX05PV1JJVEU6IFVud3JpdHRhYmxlIGZpbGUgY2xvc2VkLgorICAgIEB0eXBlIElOX0NMT1NFX05PV1JJVEU6IGludAorICAgIEBjdmFyIElOX09QRU46IEZpbGUgd2FzIG9wZW5lZC4KKyAgICBAdHlwZSBJTl9PUEVOOiBpbnQKKyAgICBAY3ZhciBJTl9NT1ZFRF9GUk9NOiBGaWxlIHdhcyBtb3ZlZCBmcm9tIFguCisgICAgQHR5cGUgSU5fTU9WRURfRlJPTTogaW50CisgICAgQGN2YXIgSU5fTU9WRURfVE86IEZpbGUgd2FzIG1vdmVkIHRvIFkuCisgICAgQHR5cGUgSU5fTU9WRURfVE86IGludAorICAgIEBjdmFyIElOX0NSRUFURTogU3ViZmlsZSB3YXMgY3JlYXRlZC4KKyAgICBAdHlwZSBJTl9DUkVBVEU6IGludAorICAgIEBjdmFyIElOX0RFTEVURTogU3ViZmlsZSB3YXMgZGVsZXRlZC4KKyAgICBAdHlwZSBJTl9ERUxFVEU6IGludAorICAgIEBjdmFyIElOX0RFTEVURV9TRUxGOiBTZWxmICh3YXRjaGVkIGl0ZW0gaXRzZWxmKSB3YXMgZGVsZXRlZC4KKyAgICBAdHlwZSBJTl9ERUxFVEVfU0VMRjogaW50CisgICAgQGN2YXIgSU5fTU9WRV9TRUxGOiBTZWxmICh3YXRjaGVkIGl0ZW0gaXRzZWxmKSB3YXMgbW92ZWQuCisgICAgQHR5cGUgSU5fTU9WRV9TRUxGOiBpbnQKKyAgICBAY3ZhciBJTl9VTk1PVU5UOiBCYWNraW5nIGZzIHdhcyB1bm1vdW50ZWQuCisgICAgQHR5cGUgSU5fVU5NT1VOVDogaW50CisgICAgQGN2YXIgSU5fUV9PVkVSRkxPVzogRXZlbnQgcXVldWVkIG92ZXJmbG93ZWQuCisgICAgQHR5cGUgSU5fUV9PVkVSRkxPVzogaW50CisgICAgQGN2YXIgSU5fSUdOT1JFRDogRmlsZSB3YXMgaWdub3JlZC4KKyAgICBAdHlwZSBJTl9JR05PUkVEOiBpbnQKKyAgICBAY3ZhciBJTl9PTkxZRElSOiBvbmx5IHdhdGNoIHRoZSBwYXRoIGlmIGl0IGlzIGEgZGlyZWN0b3J5IChuZXcKKyAgICAgICAgICAgICAgICAgICAgICBpbiBrZXJuZWwgMi42LjE1KS4KKyAgICBAdHlwZSBJTl9PTkxZRElSOiBpbnQKKyAgICBAY3ZhciBJTl9ET05UX0ZPTExPVzogZG9uJ3QgZm9sbG93IGEgc3ltbGluayAobmV3IGluIGtlcm5lbCAyLjYuMTUpLgorICAgICAgICAgICAgICAgICAgICAgICAgICBJTl9PTkxZRElSIHdlIGNhbiBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCB3YXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHN5bWxpbmtzLgorICAgIEB0eXBlIElOX0RPTlRfRk9MTE9XOiBpbnQKKyAgICBAY3ZhciBJTl9FWENMX1VOTElOSzogRXZlbnRzIGFyZSBub3QgZ2VuZXJhdGVkIGZvciBjaGlsZHJlbiBhZnRlciB0aGV5CisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgYmVlbiB1bmxpbmtlZCBmcm9tIHRoZSB3YXRjaGVkIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ldyBpbiBrZXJuZWwgMi42LjM2KS4KKyAgICBAdHlwZSBJTl9FWENMX1VOTElOSzogaW50CisgICAgQGN2YXIgSU5fTUFTS19BREQ6IGFkZCB0byB0aGUgbWFzayBvZiBhbiBhbHJlYWR5IGV4aXN0aW5nIHdhdGNoIChuZXcKKyAgICAgICAgICAgICAgICAgICAgICAgaW4ga2VybmVsIDIuNi4xNCkuCisgICAgQHR5cGUgSU5fTUFTS19BREQ6IGludAorICAgIEBjdmFyIElOX0lTRElSOiBFdmVudCBvY2N1cnJlZCBhZ2FpbnN0IGRpci4KKyAgICBAdHlwZSBJTl9JU0RJUjogaW50CisgICAgQGN2YXIgSU5fT05FU0hPVDogT25seSBzZW5kIGV2ZW50IG9uY2UuCisgICAgQHR5cGUgSU5fT05FU0hPVDogaW50CisgICAgQGN2YXIgQUxMX0VWRU5UUzogQWxpYXMgZm9yIGNvbnNpZGVyaW5nIGFsbCBvZiB0aGUgZXZlbnRzLgorICAgIEB0eXBlIEFMTF9FVkVOVFM6IGludAorICAgICIiIgorCisgICAgIyBUaGUgaWRlYSBoZXJlIGlzICdjb25maWd1cmF0aW9uLWFzLWNvZGUnIC0gdGhpcyB3YXksIHdlIGdldCBvdXIgbmljZSBjbGFzcworICAgICMgY29uc3RhbnRzLCBidXQgd2UgYWxzbyBnZXQgbmljZSBodW1hbi1mcmllbmRseSB0ZXh0IG1hcHBpbmdzIHRvIGRvIGxvb2t1cHMKKyAgICAjIGFnYWluc3QgYXMgd2VsbCwgZm9yIGZyZWU6CisgICAgRkxBR19DT0xMRUNUSU9OUyA9IHsnT1BfRkxBR1MnOiB7CisgICAgICAgICdJTl9BQ0NFU1MnICAgICAgICA6IDB4MDAwMDAwMDEsICAjIEZpbGUgd2FzIGFjY2Vzc2VkCisgICAgICAgICdJTl9NT0RJRlknICAgICAgICA6IDB4MDAwMDAwMDIsICAjIEZpbGUgd2FzIG1vZGlmaWVkCisgICAgICAgICdJTl9BVFRSSUInICAgICAgICA6IDB4MDAwMDAwMDQsICAjIE1ldGFkYXRhIGNoYW5nZWQKKyAgICAgICAgJ0lOX0NMT1NFX1dSSVRFJyAgIDogMHgwMDAwMDAwOCwgICMgV3JpdGFibGUgZmlsZSB3YXMgY2xvc2VkCisgICAgICAgICdJTl9DTE9TRV9OT1dSSVRFJyA6IDB4MDAwMDAwMTAsICAjIFVud3JpdGFibGUgZmlsZSBjbG9zZWQKKyAgICAgICAgJ0lOX09QRU4nICAgICAgICAgIDogMHgwMDAwMDAyMCwgICMgRmlsZSB3YXMgb3BlbmVkCisgICAgICAgICdJTl9NT1ZFRF9GUk9NJyAgICA6IDB4MDAwMDAwNDAsICAjIEZpbGUgd2FzIG1vdmVkIGZyb20gWAorICAgICAgICAnSU5fTU9WRURfVE8nICAgICAgOiAweDAwMDAwMDgwLCAgIyBGaWxlIHdhcyBtb3ZlZCB0byBZCisgICAgICAgICdJTl9DUkVBVEUnICAgICAgICA6IDB4MDAwMDAxMDAsICAjIFN1YmZpbGUgd2FzIGNyZWF0ZWQKKyAgICAgICAgJ0lOX0RFTEVURScgICAgICAgIDogMHgwMDAwMDIwMCwgICMgU3ViZmlsZSB3YXMgZGVsZXRlZAorICAgICAgICAnSU5fREVMRVRFX1NFTEYnICAgOiAweDAwMDAwNDAwLCAgIyBTZWxmICh3YXRjaGVkIGl0ZW0gaXRzZWxmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3YXMgZGVsZXRlZAorICAgICAgICAnSU5fTU9WRV9TRUxGJyAgICAgOiAweDAwMDAwODAwLCAgIyBTZWxmICh3YXRjaGVkIGl0ZW0gaXRzZWxmKSB3YXMgbW92ZWQKKyAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdFVkVOVF9GTEFHUyc6IHsKKyAgICAgICAgJ0lOX1VOTU9VTlQnICAgICAgIDogMHgwMDAwMjAwMCwgICMgQmFja2luZyBmcyB3YXMgdW5tb3VudGVkCisgICAgICAgICdJTl9RX09WRVJGTE9XJyAgICA6IDB4MDAwMDQwMDAsICAjIEV2ZW50IHF1ZXVlZCBvdmVyZmxvd2VkCisgICAgICAgICdJTl9JR05PUkVEJyAgICAgICA6IDB4MDAwMDgwMDAsICAjIEZpbGUgd2FzIGlnbm9yZWQKKyAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdTUEVDSUFMX0ZMQUdTJzogeworICAgICAgICAnSU5fT05MWURJUicgICAgICAgOiAweDAxMDAwMDAwLCAgIyBvbmx5IHdhdGNoIHRoZSBwYXRoIGlmIGl0IGlzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGlyZWN0b3J5CisgICAgICAgICdJTl9ET05UX0ZPTExPVycgICA6IDB4MDIwMDAwMDAsICAjIGRvbid0IGZvbGxvdyBhIHN5bWxpbmsKKyAgICAgICAgJ0lOX0VYQ0xfVU5MSU5LJyAgIDogMHgwNDAwMDAwMCwgICMgZXhjbHVkZSBldmVudHMgb24gdW5saW5rZWQgb2JqZWN0cworICAgICAgICAnSU5fTUFTS19BREQnICAgICAgOiAweDIwMDAwMDAwLCAgIyBhZGQgdG8gdGhlIG1hc2sgb2YgYW4gYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBleGlzdGluZyB3YXRjaAorICAgICAgICAnSU5fSVNESVInICAgICAgICAgOiAweDQwMDAwMDAwLCAgIyBldmVudCBvY2N1cnJlZCBhZ2FpbnN0IGRpcgorICAgICAgICAnSU5fT05FU0hPVCcgICAgICAgOiAweDgwMDAwMDAwLCAgIyBvbmx5IHNlbmQgZXZlbnQgb25jZQorICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgZGVmIG1hc2tuYW1lKG1hc2spOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyB0aGUgZXZlbnQgbmFtZSBhc3NvY2lhdGVkIHRvIG1hc2suIElOX0lTRElSIGlzIGFwcGVuZGVkIHRvCisgICAgICAgIHRoZSByZXN1bHQgd2hlbiBhcHByb3ByaWF0ZS4gTm90ZTogb25seSBvbmUgZXZlbnQgaXMgcmV0dXJuZWQsIGJlY2F1c2UKKyAgICAgICAgb25seSBvbmUgZXZlbnQgY2FuIGJlIHJhaXNlZCBhdCBhIGdpdmVuIHRpbWUuCisKKyAgICAgICAgQHBhcmFtIG1hc2s6IG1hc2suCisgICAgICAgIEB0eXBlIG1hc2s6IGludAorICAgICAgICBAcmV0dXJuOiBldmVudCBuYW1lLgorICAgICAgICBAcnR5cGU6IHN0cgorICAgICAgICAiIiIKKyAgICAgICAgbXMgPSBtYXNrCisgICAgICAgIG5hbWUgPSAnJXMnCisgICAgICAgIGlmIG1hc2sgJiBJTl9JU0RJUjoKKyAgICAgICAgICAgIG1zID0gbWFzayAtIElOX0lTRElSCisgICAgICAgICAgICBuYW1lID0gJyVzfElOX0lTRElSJworICAgICAgICByZXR1cm4gbmFtZSAlIEV2ZW50c0NvZGVzLkFMTF9WQUxVRVNbbXNdCisKKyAgICBtYXNrbmFtZSA9IHN0YXRpY21ldGhvZChtYXNrbmFtZSkKKworCisjIFNvIGxldCdzIG5vdyB0dXJuIHRoZSBjb25maWd1cmF0aW9uIGludG8gY29kZQorRXZlbnRzQ29kZXMuQUxMX0ZMQUdTID0ge30KK0V2ZW50c0NvZGVzLkFMTF9WQUxVRVMgPSB7fQorZm9yIGZsYWdjLCB2YWxjIGluIEV2ZW50c0NvZGVzLkZMQUdfQ09MTEVDVElPTlMuaXRlbXMoKToKKyAgICAjIE1ha2UgdGhlIGNvbGxlY3Rpb25zJyBtZW1iZXJzIGRpcmVjdGx5IGFjY2Vzc2libGUgdGhyb3VnaCB0aGUKKyAgICAjIGNsYXNzIGRpY3Rpb25hcnkKKyAgICBzZXRhdHRyKEV2ZW50c0NvZGVzLCBmbGFnYywgdmFsYykKKworICAgICMgQ29sbGVjdCBhbGwgdGhlIGZsYWdzIHVuZGVyIGEgY29tbW9uIHVtYnJlbGxhCisgICAgRXZlbnRzQ29kZXMuQUxMX0ZMQUdTLnVwZGF0ZSh2YWxjKQorCisgICAgIyBNYWtlIHRoZSBpbmRpdmlkdWFsIG1hc2tzIGFjY2Vzc2libGUgYXMgJ2NvbnN0YW50cycgYXQgZ2xvYmFscygpIHNjb3BlCisgICAgIyBhbmQgbWFza25hbWVzIGFjY2Vzc2libGUgYnkgdmFsdWVzLgorICAgIGZvciBuYW1lLCB2YWwgaW4gdmFsYy5pdGVtcygpOgorICAgICAgICBnbG9iYWxzKClbbmFtZV0gPSB2YWwKKyAgICAgICAgRXZlbnRzQ29kZXMuQUxMX1ZBTFVFU1t2YWxdID0gbmFtZQorCisKKyMgYWxsICdub3JtYWwnIGV2ZW50cworQUxMX0VWRU5UUyA9IHJlZHVjZShsYW1iZGEgeCwgeTogeCB8IHksIEV2ZW50c0NvZGVzLk9QX0ZMQUdTLnZhbHVlcygpKQorRXZlbnRzQ29kZXMuQUxMX0ZMQUdTWydBTExfRVZFTlRTJ10gPSBBTExfRVZFTlRTCitFdmVudHNDb2Rlcy5BTExfVkFMVUVTW0FMTF9FVkVOVFNdID0gJ0FMTF9FVkVOVFMnCisKKworY2xhc3MgX0V2ZW50OgorICAgICIiIgorICAgIEV2ZW50IHN0cnVjdHVyZSwgcmVwcmVzZW50IGV2ZW50cyByYWlzZWQgYnkgdGhlIHN5c3RlbS4gVGhpcworICAgIGlzIHRoZSBiYXNlIGNsYXNzIGFuZCBzaG91bGQgYmUgc3ViY2xhc3NlZC4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaWN0Xyk6CisgICAgICAgICIiIgorICAgICAgICBBdHRhY2ggYXR0cmlidXRlcyAoY29udGFpbmVkIGluIGRpY3RfKSB0byBzZWxmLgorCisgICAgICAgIEBwYXJhbSBkaWN0XzogU2V0IG9mIGF0dHJpYnV0ZXMuCisgICAgICAgIEB0eXBlIGRpY3RfOiBkaWN0aW9uYXJ5CisgICAgICAgICIiIgorICAgICAgICBmb3IgdHBsIGluIGRpY3RfLml0ZW1zKCk6CisgICAgICAgICAgICBzZXRhdHRyKHNlbGYsICp0cGwpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBAcmV0dXJuOiBHZW5lcmljIGV2ZW50IHN0cmluZyByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgQHJ0eXBlOiBzdHIKKyAgICAgICAgIiIiCisgICAgICAgIHMgPSAnJworICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gc29ydGVkKHNlbGYuX19kaWN0X18uaXRlbXMoKSwga2V5PWxhbWJkYSB4OiB4WzBdKToKKyAgICAgICAgICAgIGlmIGF0dHIuc3RhcnRzd2l0aCgnXycpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBhdHRyID09ICdtYXNrJzoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGhleChnZXRhdHRyKHNlbGYsIGF0dHIpKQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKSBhbmQgbm90IHZhbHVlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gIicnIgorICAgICAgICAgICAgcyArPSAnICVzJXMlcycgJSAob3V0cHV0X2Zvcm1hdC5maWVsZF9uYW1lKGF0dHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdC5wdW5jdHVhdGlvbignPScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdC5maWVsZF92YWx1ZSh2YWx1ZSkpCisKKyAgICAgICAgcyA9ICclcyVzJXMgJXMnICUgKG91dHB1dF9mb3JtYXQucHVuY3R1YXRpb24oJzwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQuY2xhc3NfbmFtZShzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdC5wdW5jdHVhdGlvbignPicpKQorICAgICAgICByZXR1cm4gcworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiByZXByKHNlbGYpCisKKworY2xhc3MgX1Jhd0V2ZW50KF9FdmVudCk6CisgICAgIiIiCisgICAgUmF3IGV2ZW50LCBpdCBjb250YWlucyBvbmx5IHRoZSBpbmZvcm1hdGlvbnMgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbS4KKyAgICBJdCBkb2Vzbid0IGluZmVyIGFueXRoaW5nLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3ZCwgbWFzaywgY29va2llLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIEBwYXJhbSB3ZDogV2F0Y2ggRGVzY3JpcHRvci4KKyAgICAgICAgQHR5cGUgd2Q6IGludAorICAgICAgICBAcGFyYW0gbWFzazogQml0bWFzayBvZiBldmVudHMuCisgICAgICAgIEB0eXBlIG1hc2s6IGludAorICAgICAgICBAcGFyYW0gY29va2llOiBDb29raWUuCisgICAgICAgIEB0eXBlIGNvb2tpZTogaW50CisgICAgICAgIEBwYXJhbSBuYW1lOiBCYXNlbmFtZSBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYWdhaW5zdCB3aGljaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIGV2ZW50IHdhcyByYWlzZWQgaW4gY2FzZSB3aGVyZSB0aGUgd2F0Y2hlZCBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBwYXJlbnQgZGlyZWN0b3J5LiBOb25lIGlmIHRoZSBldmVudCB3YXMgcmFpc2VkCisgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgd2F0Y2hlZCBpdGVtIGl0c2VsZi4KKyAgICAgICAgQHR5cGUgbmFtZTogc3RyaW5nIG9yIE5vbmUKKyAgICAgICAgIiIiCisgICAgICAgICMgVXNlIHRoaXMgdmFyaWFibGUgdG8gY2FjaGUgdGhlIHJlc3VsdCBvZiBzdHIoc2VsZiksIHRoaXMgb2JqZWN0CisgICAgICAgICMgaXMgaW1tdXRhYmxlLgorICAgICAgICBzZWxmLl9zdHIgPSBOb25lCisgICAgICAgICMgbmFtZTogcmVtb3ZlIHRyYWlsaW5nICdcMCcKKyAgICAgICAgZCA9IHsnd2QnOiB3ZCwKKyAgICAgICAgICAgICAnbWFzayc6IG1hc2ssCisgICAgICAgICAgICAgJ2Nvb2tpZSc6IGNvb2tpZSwKKyAgICAgICAgICAgICAnbmFtZSc6IG5hbWUucnN0cmlwKCdcMCcpfQorICAgICAgICBfRXZlbnQuX19pbml0X18oc2VsZiwgZCkKKyAgICAgICAgbG9nLmRlYnVnKHN0cihzZWxmKSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9zdHIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3N0ciA9IF9FdmVudC5fX3N0cl9fKHNlbGYpCisgICAgICAgIHJldHVybiBzZWxmLl9zdHIKKworCitjbGFzcyBFdmVudChfRXZlbnQpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3MgY29udGFpbnMgYWxsIHRoZSB1c2VmdWwgaW5mb3JtYXRpb25zIGFib3V0IHRoZSBvYnNlcnZlZAorICAgIGV2ZW50LiBIb3dldmVyLCB0aGUgcHJlc2VuY2Ugb2YgZWFjaCBmaWVsZCBpcyBub3QgZ3VhcmFudGVlZCBhbmQKKyAgICBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mIGV2ZW50LiBJbiBlZmZlY3QsIHNvbWUgZmllbGRzIGFyZSBpcnJlbGV2YW50CisgICAgZm9yIHNvbWUga2luZCBvZiBldmVudCAoZm9yIGV4YW1wbGUgJ2Nvb2tpZScgaXMgbWVhbmluZ2xlc3MgZm9yCisgICAgSU5fQ1JFQVRFIHdoZXJlYXMgaXQgaXMgbWFuZGF0b3J5IGZvciBJTl9NT1ZFX1RPKS4KKworICAgIFRoZSBwb3NzaWJsZSBmaWVsZHMgYXJlOgorICAgICAgLSB3ZCAoaW50KTogV2F0Y2ggRGVzY3JpcHRvci4KKyAgICAgIC0gbWFzayAoaW50KTogTWFzay4KKyAgICAgIC0gbWFza25hbWUgKHN0cik6IFJlYWRhYmxlIGV2ZW50IG5hbWUuCisgICAgICAtIHBhdGggKHN0cik6IHBhdGggb2YgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGJlaW5nIHdhdGNoZWQuCisgICAgICAtIG5hbWUgKHN0cik6IEJhc2VuYW1lIG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBhZ2FpbnN0IHdoaWNoIHRoZQorICAgICAgICAgICAgICBldmVudCB3YXMgcmFpc2VkIGluIGNhc2Ugd2hlcmUgdGhlIHdhdGNoZWQgZGlyZWN0b3J5CisgICAgICAgICAgICAgIGlzIHRoZSBwYXJlbnQgZGlyZWN0b3J5LiBOb25lIGlmIHRoZSBldmVudCB3YXMgcmFpc2VkCisgICAgICAgICAgICAgIG9uIHRoZSB3YXRjaGVkIGl0ZW0gaXRzZWxmLiBUaGlzIGZpZWxkIGlzIGFsd2F5cyBwcm92aWRlZAorICAgICAgICAgICAgICBldmVuIGlmIHRoZSBzdHJpbmcgaXMgJycuCisgICAgICAtIHBhdGhuYW1lIChzdHIpOiBDb25jYXRlbmF0aW9uIG9mICdwYXRoJyBhbmQgJ25hbWUnLgorICAgICAgLSBzcmNfcGF0aG5hbWUgKHN0cik6IE9ubHkgcHJlc2VudCBmb3IgSU5fTU9WRURfVE8gZXZlbnRzIGFuZCBvbmx5IGluCisgICAgICAgICAgICAgIHRoZSBjYXNlIHdoZXJlIElOX01PVkVEX0ZST00gZXZlbnRzIGFyZSB3YXRjaGVkIHRvby4gSG9sZHMgdGhlCisgICAgICAgICAgICAgIHNvdXJjZSBwYXRobmFtZSBmcm9tIHdoZXJlIHBhdGhuYW1lIHdhcyBtb3ZlZCBmcm9tLgorICAgICAgLSBjb29raWUgKGludCk6IENvb2tpZS4KKyAgICAgIC0gZGlyIChib29sKTogVHJ1ZSBpZiB0aGUgZXZlbnQgd2FzIHJhaXNlZCBhZ2FpbnN0IGEgZGlyZWN0b3J5LgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhdyk6CisgICAgICAgICIiIgorICAgICAgICBDb25jcmV0ZWx5LCB0aGlzIGlzIHRoZSByYXcgZXZlbnQgcGx1cyBpbmZlcnJlZCBpbmZvcy4KKyAgICAgICAgIiIiCisgICAgICAgIF9FdmVudC5fX2luaXRfXyhzZWxmLCByYXcpCisgICAgICAgIHNlbGYubWFza25hbWUgPSBFdmVudHNDb2Rlcy5tYXNrbmFtZShzZWxmLm1hc2spCisgICAgICAgIGlmIENPTVBBVElCSUxJVFlfTU9ERToKKyAgICAgICAgICAgIHNlbGYuZXZlbnRfbmFtZSA9IHNlbGYubWFza25hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5uYW1lOgorICAgICAgICAgICAgICAgIHNlbGYucGF0aG5hbWUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hbWUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGhuYW1lID0gb3MucGF0aC5hYnNwYXRoKHNlbGYucGF0aCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlcnI6CisgICAgICAgICAgICAjIFVzdWFsbHkgaXQgaXMgbm90IGFuIGVycm9yIHNvbWUgZXZlbnRzIGFyZSBwZXJmZWN0bHkgdmFsaWRzCisgICAgICAgICAgICAjIGRlc3BpdGUgdGhlIGxhY2sgb2YgdGhlc2UgYXR0cmlidXRlcy4KKyAgICAgICAgICAgIGxvZy5kZWJ1ZyhlcnIpCisKKworY2xhc3MgUHJvY2Vzc0V2ZW50RXJyb3IoUHlpbm90aWZ5RXJyb3IpOgorICAgICIiIgorICAgIFByb2Nlc3NFdmVudEVycm9yIEV4Y2VwdGlvbi4gUmFpc2VkIG9uIFByb2Nlc3NFdmVudCBlcnJvci4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXJyKToKKyAgICAgICAgIiIiCisgICAgICAgIEBwYXJhbSBlcnI6IEV4Y2VwdGlvbiBlcnJvciBkZXNjcmlwdGlvbi4KKyAgICAgICAgQHR5cGUgZXJyOiBzdHJpbmcKKyAgICAgICAgIiIiCisgICAgICAgIFB5aW5vdGlmeUVycm9yLl9faW5pdF9fKHNlbGYsIGVycikKKworCitjbGFzcyBfUHJvY2Vzc0V2ZW50OgorICAgICIiIgorICAgIEFic3RyYWN0IHByb2Nlc3NpbmcgZXZlbnQgY2xhc3MuCisgICAgIiIiCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGV2ZW50KToKKyAgICAgICAgIiIiCisgICAgICAgIFRvIGJlaGF2ZSBsaWtlIGEgZnVuY3RvciB0aGUgb2JqZWN0IG11c3QgYmUgY2FsbGFibGUuCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGEgZGlzcGF0Y2ggbWV0aG9kLiBJdHMgbG9va3VwIG9yZGVyIGlzOgorICAgICAgICAgIDEuIHByb2Nlc3NfTUFTS05BTUUgbWV0aG9kCisgICAgICAgICAgMi4gcHJvY2Vzc19GQU1JTFlfTkFNRSBtZXRob2QKKyAgICAgICAgICAzLiBvdGhlcndpc2UgY2FsbHMgcHJvY2Vzc19kZWZhdWx0CisKKyAgICAgICAgQHBhcmFtIGV2ZW50OiBFdmVudCB0byBiZSBwcm9jZXNzZWQuCisgICAgICAgIEB0eXBlIGV2ZW50OiBFdmVudCBvYmplY3QKKyAgICAgICAgQHJldHVybjogQnkgY29udmVudGlvbiB3aGVuIHVzZWQgZnJvbSB0aGUgUHJvY2Vzc0V2ZW50IGNsYXNzOgorICAgICAgICAgICAgICAgICAtIFJldHVybmluZyBGYWxzZSBvciBOb25lIChkZWZhdWx0IHZhbHVlKSBtZWFucyBrZWVwIG9uCisgICAgICAgICAgICAgICAgIGV4ZWN1dGluZyBuZXh0IGNoYWluZWQgZnVuY3RvcnMgKHNlZSBjaGFpbi5weSBleGFtcGxlKS4KKyAgICAgICAgICAgICAgICAgLSBSZXR1cm5pbmcgVHJ1ZSBpbnN0ZWFkIG1lYW5zIGRvIG5vdCBleGVjdXRlIG5leHQKKyAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nIGZ1bmN0aW9ucy4KKyAgICAgICAgQHJ0eXBlOiBib29sCisgICAgICAgIEByYWlzZSBQcm9jZXNzRXZlbnRFcnJvcjogRXZlbnQgb2JqZWN0IHVuZGlzcGF0Y2hhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd24gZXZlbnQuCisgICAgICAgICIiIgorICAgICAgICBzdHJpcHBlZF9tYXNrID0gZXZlbnQubWFzayAtIChldmVudC5tYXNrICYgSU5fSVNESVIpCisgICAgICAgIG1hc2tuYW1lID0gRXZlbnRzQ29kZXMuQUxMX1ZBTFVFUy5nZXQoc3RyaXBwZWRfbWFzaykKKyAgICAgICAgaWYgbWFza25hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFByb2Nlc3NFdmVudEVycm9yKCJVbmtub3duIG1hc2sgMHglMDh4IiAlIHN0cmlwcGVkX21hc2spCisKKyAgICAgICAgIyAxLSBsb29rIGZvciBwcm9jZXNzX01BU0tOQU1FCisgICAgICAgIG1ldGggPSBnZXRhdHRyKHNlbGYsICdwcm9jZXNzXycgKyBtYXNrbmFtZSwgTm9uZSkKKyAgICAgICAgaWYgbWV0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBtZXRoKGV2ZW50KQorICAgICAgICAjIDItIGxvb2sgZm9yIHByb2Nlc3NfRkFNSUxZX05BTUUKKyAgICAgICAgbWV0aCA9IGdldGF0dHIoc2VsZiwgJ3Byb2Nlc3NfSU5fJyArIG1hc2tuYW1lLnNwbGl0KCdfJylbMV0sIE5vbmUpCisgICAgICAgIGlmIG1ldGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gbWV0aChldmVudCkKKyAgICAgICAgIyAzLSBkZWZhdWx0IGNhbGwgbWV0aG9kIHByb2Nlc3NfZGVmYXVsdAorICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2RlZmF1bHQoZXZlbnQpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPCVzPicgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisKK2NsYXNzIF9TeXNQcm9jZXNzRXZlbnQoX1Byb2Nlc3NFdmVudCk6CisgICAgIiIiCisgICAgVGhlcmUgaXMgdGhyZWUga2luZCBvZiBwcm9jZXNzaW5nIGFjY29yZGluZyB0byBlYWNoIGV2ZW50OgorCisgICAgICAxLiBzcGVjaWFsIGhhbmRsaW5nIChkZWxldGlvbiBmcm9tIGludGVybmFsIGNvbnRhaW5lciwgYnVnLCAuLi4pLgorICAgICAgMi4gZGVmYXVsdCB0cmVhdG1lbnQ6IHdoaWNoIGlzIGFwcGxpZWQgdG8gdGhlIG1ham9yaXR5IG9mIGV2ZW50cy4KKyAgICAgIDMuIElOX0lTRElSIGlzIG5ldmVyIHNlbnQgYWxvbmUsIGhlIGlzIHBpZ2d5YmFja2VkIHdpdGggYSBzdGFuZGFyZAorICAgICAgICAgZXZlbnQsIGhlIGlzIG5vdCBwcm9jZXNzZWQgYXMgdGhlIG90aGVycyBldmVudHMsIGluc3RlYWQsIGl0cworICAgICAgICAgdmFsdWUgaXMgY2FwdHVyZWQgYW5kIGFwcHJvcHJpYXRlbHkgYWdncmVnYXRlZCB0byBkc3QgZXZlbnQuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdtLCBub3RpZmllcik6CisgICAgICAgICIiIgorCisgICAgICAgIEBwYXJhbSB3bTogV2F0Y2ggTWFuYWdlci4KKyAgICAgICAgQHR5cGUgd206IFdhdGNoTWFuYWdlciBpbnN0YW5jZQorICAgICAgICBAcGFyYW0gbm90aWZpZXI6IE5vdGlmaWVyLgorICAgICAgICBAdHlwZSBub3RpZmllcjogTm90aWZpZXIgaW5zdGFuY2UKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3dhdGNoX21hbmFnZXIgPSB3bSAgIyB3YXRjaCBtYW5hZ2VyCisgICAgICAgIHNlbGYuX25vdGlmaWVyID0gbm90aWZpZXIgICMgbm90aWZpZXIKKyAgICAgICAgc2VsZi5fbXZfY29va2llID0ge30gICMge2Nvb2tpZShpbnQpOiAoc3JjX3BhdGgoc3RyKSwgZGF0ZSksIC4uLn0KKyAgICAgICAgc2VsZi5fbXYgPSB7fSAgIyB7c3JjX3BhdGgoc3RyKTogKGRzdF9wYXRoKHN0ciksIGRhdGUpLCAuLi59CisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENsZWFudXAgKGRlbGV0ZSkgb2xkICg+MW1uKSByZWNvcmRzIGNvbnRhaW5lZCBpbiBzZWxmLl9tdl9jb29raWUKKyAgICAgICAgYW5kIHNlbGYuX212LgorICAgICAgICAiIiIKKyAgICAgICAgZGF0ZV9jdXJfID0gZGF0ZXRpbWUubm93KCkKKyAgICAgICAgZm9yIHNlcSBpbiBbc2VsZi5fbXZfY29va2llLCBzZWxmLl9tdl06CisgICAgICAgICAgICBmb3IgayBpbiBzZXEua2V5cygpOgorICAgICAgICAgICAgICAgIGlmIChkYXRlX2N1cl8gLSBzZXFba11bMV0pID4gdGltZWRlbHRhKG1pbnV0ZXM9MSk6CisgICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygnQ2xlYW51cDogZGVsZXRpbmcgZW50cnkgJXMnLCBzZXFba11bMF0pCisgICAgICAgICAgICAgICAgICAgIGRlbCBzZXFba10KKworICAgIGRlZiBwcm9jZXNzX0lOX0NSRUFURShzZWxmLCByYXdfZXZlbnQpOgorICAgICAgICAiIiIKKyAgICAgICAgSWYgdGhlIGV2ZW50IGFmZmVjdHMgYSBkaXJlY3RvcnkgYW5kIHRoZSBhdXRvX2FkZCBmbGFnIG9mIHRoZQorICAgICAgICB0YXJnZXR0ZWQgd2F0Y2ggaXMgc2V0IHRvIFRydWUsIGEgbmV3IHdhdGNoIGlzIGFkZGVkIG9uIHRoaXMKKyAgICAgICAgbmV3IGRpcmVjdG9yeSwgd2l0aCB0aGUgc2FtZSBhdHRyaWJ1dGUgdmFsdWVzIHRoYW4gdGhvc2Ugb2YKKyAgICAgICAgdGhpcyB3YXRjaC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHJhd19ldmVudC5tYXNrICYgSU5fSVNESVI6CisgICAgICAgICAgICB3YXRjaF8gPSBzZWxmLl93YXRjaF9tYW5hZ2VyLmdldF93YXRjaChyYXdfZXZlbnQud2QpCisgICAgICAgICAgICBjcmVhdGVkX2RpciA9IG9zLnBhdGguam9pbih3YXRjaF8ucGF0aCwgcmF3X2V2ZW50Lm5hbWUpCisgICAgICAgICAgICBpZiB3YXRjaF8uYXV0b19hZGQgYW5kIG5vdCB3YXRjaF8uZXhjbHVkZV9maWx0ZXIoY3JlYXRlZF9kaXIpOgorICAgICAgICAgICAgICAgIGFkZHcgPSBzZWxmLl93YXRjaF9tYW5hZ2VyLmFkZF93YXRjaAorICAgICAgICAgICAgICAgICMgVGhlIG5ld2x5IG1vbml0b3JlZCBkaXJlY3RvcnkgaW5oZXJpdHMgYXR0cmlidXRlcyBmcm9tIGl0cworICAgICAgICAgICAgICAgICMgcGFyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBhZGR3X3JldCA9IGFkZHcoY3JlYXRlZF9kaXIsIHdhdGNoXy5tYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jX2Z1bj13YXRjaF8ucHJvY19mdW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYz1GYWxzZSwgYXV0b19hZGQ9d2F0Y2hfLmF1dG9fYWRkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlX2ZpbHRlcj13YXRjaF8uZXhjbHVkZV9maWx0ZXIpCisKKyAgICAgICAgICAgICAgICAjIFRyaWNrIHRvIGhhbmRsZSBta2RpciAtcCAvZDEvZDIvdDMgd2hlcmUgZDEgaXMgd2F0Y2hlZCBhbmQKKyAgICAgICAgICAgICAgICAjIGQyIGFuZCB0MyAoZGlyZWN0b3J5IG9yIGZpbGUpIGFyZSBjcmVhdGVkLgorICAgICAgICAgICAgICAgICMgU2luY2UgdGhlIGRpcmVjdG9yeSBkMiBpcyBuZXcsIHRoZW4gZXZlcnl0aGluZyBpbnNpZGUgaXQgbXVzdAorICAgICAgICAgICAgICAgICMgYWxzbyBiZSBuZXcuCisgICAgICAgICAgICAgICAgY3JlYXRlZF9kaXJfd2QgPSBhZGR3X3JldC5nZXQoY3JlYXRlZF9kaXIpCisgICAgICAgICAgICAgICAgaWYgKChjcmVhdGVkX2Rpcl93ZCBpcyBub3QgTm9uZSkgYW5kIChjcmVhdGVkX2Rpcl93ZCA+IDApIGFuZAorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmlzZGlyKGNyZWF0ZWRfZGlyKSk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIG9zLmxpc3RkaXIoY3JlYXRlZF9kaXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyID0gb3MucGF0aC5qb2luKGNyZWF0ZWRfZGlyLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3dhdGNoX21hbmFnZXIuZ2V0X3dkKGlubmVyKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEdlbmVyYXRlIChzaW11bGF0ZSkgY3JlYXRpb24gZXZlbnRzIGZvciBzdWItCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkaXJlY3RvcmllcyBhbmQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoaW5uZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN5bWxpbmtzIGFyZSBoYW5kbGVkIGFzIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyA9IElOX0NSRUFURQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2Rpcihpbm5lcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gSU5fQ1JFQVRFIHwgSU5fSVNESVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgcGF0aCBzaG91bGQgbm90IGJlIHRha2VuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd2V2ZW50ID0gX1Jhd0V2ZW50KGNyZWF0ZWRfZGlyX3dkLCBmbGFncywgMCwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9ub3RpZmllci5hcHBlbmRfZXZlbnQocmF3ZXZlbnQpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAicHJvY2Vzc19JTl9DUkVBVEUsIGludmFsaWQgZGlyZWN0b3J5ICVzOiAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1Zyhtc2cgJSAoY3JlYXRlZF9kaXIsIHN0cihlcnIpKSkKKyAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzc19kZWZhdWx0KHJhd19ldmVudCkKKworICAgIGRlZiBwcm9jZXNzX0lOX01PVkVEX0ZST00oc2VsZiwgcmF3X2V2ZW50KToKKyAgICAgICAgIiIiCisgICAgICAgIE1hcCB0aGUgY29va2llIHdpdGggdGhlIHNvdXJjZSBwYXRoICgrIGRhdGUgZm9yIGNsZWFuaW5nKS4KKyAgICAgICAgIiIiCisgICAgICAgIHdhdGNoXyA9IHNlbGYuX3dhdGNoX21hbmFnZXIuZ2V0X3dhdGNoKHJhd19ldmVudC53ZCkKKyAgICAgICAgcGF0aF8gPSB3YXRjaF8ucGF0aAorICAgICAgICBzcmNfcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKHBhdGhfLCByYXdfZXZlbnQubmFtZSkpCisgICAgICAgIHNlbGYuX212X2Nvb2tpZVtyYXdfZXZlbnQuY29va2llXSA9IChzcmNfcGF0aCwgZGF0ZXRpbWUubm93KCkpCisgICAgICAgIHJldHVybiBzZWxmLnByb2Nlc3NfZGVmYXVsdChyYXdfZXZlbnQsIHsnY29va2llJzogcmF3X2V2ZW50LmNvb2tpZX0pCisKKyAgICBkZWYgcHJvY2Vzc19JTl9NT1ZFRF9UTyhzZWxmLCByYXdfZXZlbnQpOgorICAgICAgICAiIiIKKyAgICAgICAgTWFwIHRoZSBzb3VyY2UgcGF0aCB3aXRoIHRoZSBkZXN0aW5hdGlvbiBwYXRoICgrIGRhdGUgZm9yCisgICAgICAgIGNsZWFuaW5nKS4KKyAgICAgICAgIiIiCisgICAgICAgIHdhdGNoXyA9IHNlbGYuX3dhdGNoX21hbmFnZXIuZ2V0X3dhdGNoKHJhd19ldmVudC53ZCkKKyAgICAgICAgcGF0aF8gPSB3YXRjaF8ucGF0aAorICAgICAgICBkc3RfcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKHBhdGhfLCByYXdfZXZlbnQubmFtZSkpCisgICAgICAgIG12XyA9IHNlbGYuX212X2Nvb2tpZS5nZXQocmF3X2V2ZW50LmNvb2tpZSkKKyAgICAgICAgdG9fYXBwZW5kID0geydjb29raWUnOiByYXdfZXZlbnQuY29va2llfQorICAgICAgICBpZiBtdl8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9tdlttdl9bMF1dID0gKGRzdF9wYXRoLCBkYXRldGltZS5ub3coKSkKKyAgICAgICAgICAgICMgTGV0J3MgYXNzdW1lIHRoYXQgSU5fTU9WRURfRlJPTSBldmVudCBpcyBhbHdheXMgcXVldWVkIGJlZm9yZQorICAgICAgICAgICAgIyB0aGF0IGl0cyBhc3NvY2lhdGVkICh0aGV5IHNoYXJlIGEgY29tbW9uIGNvb2tpZSkgSU5fTU9WRURfVE8KKyAgICAgICAgICAgICMgZXZlbnQgaXMgcXVldWVkIGl0c2VsZi4gSXQgaXMgdGhlbiBwb3NzaWJsZSBpbiB0aGF0IHNjZW5hcmlvCisgICAgICAgICAgICAjIHRvIHByb3ZpZGUgYXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byB0aGUgSU5fTU9WRURfVE8gZXZlbnQKKyAgICAgICAgICAgICMgdGhlIG9yaWdpbmFsIHBhdGhuYW1lIG9mIHRoZSBtb3ZlZCBmaWxlL2RpcmVjdG9yeS4KKyAgICAgICAgICAgIHRvX2FwcGVuZFsnc3JjX3BhdGhuYW1lJ10gPSBtdl9bMF0KKyAgICAgICAgZWxpZiAocmF3X2V2ZW50Lm1hc2sgJiBJTl9JU0RJUiBhbmQgd2F0Y2hfLmF1dG9fYWRkIGFuZAorICAgICAgICAgICAgICBub3Qgd2F0Y2hfLmV4Y2x1ZGVfZmlsdGVyKGRzdF9wYXRoKSk6CisgICAgICAgICAgICAjIFdlIGdvdCBhIGRpcmV0b3J5IHRoYXQncyAibW92ZWQgaW4iIGZyb20gYW4gdW5rbm93biBzb3VyY2UgYW5kCisgICAgICAgICAgICAjIGF1dG9fYWRkIGlzIGVuYWJsZWQuIE1hbnVhbGx5IGFkZCB3YXRjaGVzIHRvIHRoZSBpbm5lciBzdWJ0cmVlcy4KKyAgICAgICAgICAgICMgVGhlIG5ld2x5IG1vbml0b3JlZCBkaXJlY3RvcnkgaW5oZXJpdHMgYXR0cmlidXRlcyBmcm9tIGl0cworICAgICAgICAgICAgIyBwYXJlbnQgZGlyZWN0b3J5LgorICAgICAgICAgICAgc2VsZi5fd2F0Y2hfbWFuYWdlci5hZGRfd2F0Y2goZHN0X3BhdGgsIHdhdGNoXy5tYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY19mdW49d2F0Y2hfLnByb2NfZnVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjPVRydWUsIGF1dG9fYWRkPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlX2ZpbHRlcj13YXRjaF8uZXhjbHVkZV9maWx0ZXIpCisgICAgICAgIHJldHVybiBzZWxmLnByb2Nlc3NfZGVmYXVsdChyYXdfZXZlbnQsIHRvX2FwcGVuZCkKKworICAgIGRlZiBwcm9jZXNzX0lOX01PVkVfU0VMRihzZWxmLCByYXdfZXZlbnQpOgorICAgICAgICAiIiIKKyAgICAgICAgU1RBVFVTOiB0aGUgZm9sbG93aW5nIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiByZWNlbnQga2VybmVscyAoRklYTUU6CisgICAgICAgIHdoaWNoIHZlcnNpb24gPykuIE5vdyBpdCByYWlzZXMgSU5fREVMRVRFX1NFTEYgaW5zdGVhZC4KKworICAgICAgICBPbGQga2VybmVscyB3ZXJlIGJ1Z2dlZCwgdGhpcyBldmVudCByYWlzZWQgd2hlbiB0aGUgd2F0Y2hlZCBpdGVtCisgICAgICAgIHdlcmUgbW92ZWQsIHNvIHdlIGhhZCB0byB1cGRhdGUgaXRzIHBhdGgsIGJ1dCB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMKKyAgICAgICAgaXQgd2FzIGltcG9zc2libGU6IGlmIGl0cyBwYXJlbnQgZGlyZWN0b3J5IGFuZCBpdHMgZGVzdGluYXRpb24KKyAgICAgICAgZGlyZWN0b3J5IHdhc24ndCB3YXRjaGVkLiBUaGUga2VybmVsIChzZWUgaW5jbHVkZS9saW51eC9mc25vdGlmeS5oKQorICAgICAgICBkb2Vzbid0IGJyaW5nIHVzIGVub3VnaCBpbmZvcm1hdGlvbnMgbGlrZSB0aGUgZGVzdGluYXRpb24gcGF0aCBvZgorICAgICAgICBtb3ZlZCBpdGVtcy4KKyAgICAgICAgIiIiCisgICAgICAgIHdhdGNoXyA9IHNlbGYuX3dhdGNoX21hbmFnZXIuZ2V0X3dhdGNoKHJhd19ldmVudC53ZCkKKyAgICAgICAgc3JjX3BhdGggPSB3YXRjaF8ucGF0aAorICAgICAgICBtdl8gPSBzZWxmLl9tdi5nZXQoc3JjX3BhdGgpCisgICAgICAgIGlmIG12XzoKKyAgICAgICAgICAgIGRlc3RfcGF0aCA9IG12X1swXQorICAgICAgICAgICAgd2F0Y2hfLnBhdGggPSBkZXN0X3BhdGgKKyAgICAgICAgICAgICMgYWRkIHRoZSBzZXBhcmF0b3IgdG8gdGhlIHNvdXJjZSBwYXRoIHRvIGF2b2lkIG92ZXJsYXBwaW5nCisgICAgICAgICAgICAjIHBhdGggaXNzdWUgd2hlbiB0ZXN0aW5nIHdpdGggc3RhcnRzd2l0aCgpCisgICAgICAgICAgICBzcmNfcGF0aCArPSBvcy5wYXRoLnNlcAorICAgICAgICAgICAgc3JjX3BhdGhfbGVuID0gbGVuKHNyY19wYXRoKQorICAgICAgICAgICAgIyBUaGUgbmV4dCBsb29wIHJlbmFtZXMgYWxsIHdhdGNoZXMgd2l0aCBzcmNfcGF0aCBhcyBiYXNlIHBhdGguCisgICAgICAgICAgICAjIEl0IHNlZW1zIHRoYXQgSU5fTU9WRV9TRUxGIGRvZXMgbm90IHByb3ZpZGUgSU5fSVNESVIgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICMgdGhlcmVmb3JlIHRoZSBuZXh0IGxvb3AgaXMgaXRlcmF0ZWQgZXZlbiBpZiByYXdfZXZlbnQgaXMgYSBmaWxlLgorICAgICAgICAgICAgZm9yIHcgaW4gc2VsZi5fd2F0Y2hfbWFuYWdlci53YXRjaGVzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIGlmIHcucGF0aC5zdGFydHN3aXRoKHNyY19wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgZGVzdF9wYXRoIGlzIGEgbm9ybWFsaXplZCBwYXRoLgorICAgICAgICAgICAgICAgICAgICB3LnBhdGggPSBvcy5wYXRoLmpvaW4oZGVzdF9wYXRoLCB3LnBhdGhbc3JjX3BhdGhfbGVuOl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2cuZXJyb3IoIlRoZSBwYXRobmFtZSAnJXMnIG9mIHRoaXMgd2F0Y2ggJXMgaGFzIHByb2JhYmx5IGNoYW5nZWQgIgorICAgICAgICAgICAgICAgICAgICAgICJhbmQgY291bGRuJ3QgYmUgdXBkYXRlZCwgc28gaXQgY2Fubm90IGJlIHRydXN0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICJhbnltb3JlLiBUbyBmaXggdGhpcyBlcnJvciBtb3ZlIGRpcmVjdG9yaWVzL2ZpbGVzIG9ubHkgIgorICAgICAgICAgICAgICAgICAgICAgICJiZXR3ZWVuIHdhdGNoZWQgcGFyZW50cyBkaXJlY3RvcmllcywgaW4gdGhpcyBjYXNlIGUuZy4gIgorICAgICAgICAgICAgICAgICAgICAgICJwdXQgYSB3YXRjaCBvbiAnJXMnLiIsCisgICAgICAgICAgICAgICAgICAgICAgd2F0Y2hfLnBhdGgsIHdhdGNoXywKKyAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbih3YXRjaF8ucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLnBhcmRpcikpKQorICAgICAgICAgICAgaWYgbm90IHdhdGNoXy5wYXRoLmVuZHN3aXRoKCctdW5rbm93bi1wYXRoJyk6CisgICAgICAgICAgICAgICAgd2F0Y2hfLnBhdGggKz0gJy11bmtub3duLXBhdGgnCisgICAgICAgIHJldHVybiBzZWxmLnByb2Nlc3NfZGVmYXVsdChyYXdfZXZlbnQpCisKKyAgICBkZWYgcHJvY2Vzc19JTl9RX09WRVJGTE9XKHNlbGYsIHJhd19ldmVudCk6CisgICAgICAgICIiIgorICAgICAgICBPbmx5IHNpZ25hbCBhbiBvdmVyZmxvdywgbW9zdCBvZiB0aGUgY29tbW9uIGZsYWdzIGFyZSBpcnJlbGV2YW50CisgICAgICAgIGZvciB0aGlzIGV2ZW50IChwYXRoLCB3ZCwgbmFtZSkuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gRXZlbnQoeydtYXNrJzogcmF3X2V2ZW50Lm1hc2t9KQorCisgICAgZGVmIHByb2Nlc3NfSU5fSUdOT1JFRChzZWxmLCByYXdfZXZlbnQpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIHdhdGNoIGRlc2NyaXB0b3IgcmFpc2VkIGJ5IHRoaXMgZXZlbnQgaXMgbm93IGlnbm9yZWQgKGZvcmV2ZXIpLAorICAgICAgICBpdCBjYW4gYmUgc2FmZWx5IGRlbGV0ZWQgZnJvbSB0aGUgd2F0Y2ggbWFuYWdlciBkaWN0aW9uYXJ5LgorICAgICAgICBBZnRlciB0aGlzIGV2ZW50IHdlIGNhbiBiZSBzdXJlIHRoYXQgbmVpdGhlciB0aGUgZXZlbnQgcXVldWUgbm9yCisgICAgICAgIHRoZSBzeXN0ZW0gd2lsbCByYWlzZSBhbiBldmVudCBhc3NvY2lhdGVkIHRvIHRoaXMgd2QgYWdhaW4uCisgICAgICAgICIiIgorICAgICAgICBldmVudF8gPSBzZWxmLnByb2Nlc3NfZGVmYXVsdChyYXdfZXZlbnQpCisgICAgICAgIHNlbGYuX3dhdGNoX21hbmFnZXIuZGVsX3dhdGNoKHJhd19ldmVudC53ZCkKKyAgICAgICAgcmV0dXJuIGV2ZW50XworCisgICAgZGVmIHByb2Nlc3NfZGVmYXVsdChzZWxmLCByYXdfZXZlbnQsIHRvX2FwcGVuZD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbW1vbnMgaGFuZGxpbmcgZm9yIHRoZSBmb2xsb3dpbmdzIGV2ZW50czoKKworICAgICAgICBJTl9BQ0NFU1MsIElOX01PRElGWSwgSU5fQVRUUklCLCBJTl9DTE9TRV9XUklURSwgSU5fQ0xPU0VfTk9XUklURSwKKyAgICAgICAgSU5fT1BFTiwgSU5fREVMRVRFLCBJTl9ERUxFVEVfU0VMRiwgSU5fVU5NT1VOVC4KKyAgICAgICAgIiIiCisgICAgICAgIHdhdGNoXyA9IHNlbGYuX3dhdGNoX21hbmFnZXIuZ2V0X3dhdGNoKHJhd19ldmVudC53ZCkKKyAgICAgICAgaWYgcmF3X2V2ZW50Lm1hc2sgJiAoSU5fREVMRVRFX1NFTEYgfCBJTl9NT1ZFX1NFTEYpOgorICAgICAgICAgICAgIyBVbmZvcm51bGF0ZWx5IHRoaXMgaW5mb3JtYXRpb24gaXMgbm90IHByb3ZpZGVkIGJ5IHRoZSBrZXJuZWwKKyAgICAgICAgICAgIGRpcl8gPSB3YXRjaF8uZGlyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkaXJfID0gYm9vbChyYXdfZXZlbnQubWFzayAmIElOX0lTRElSKQorICAgICAgICBkaWN0XyA9IHsnd2QnOiByYXdfZXZlbnQud2QsCisgICAgICAgICAgICAgICAgICdtYXNrJzogcmF3X2V2ZW50Lm1hc2ssCisgICAgICAgICAgICAgICAgICdwYXRoJzogd2F0Y2hfLnBhdGgsCisgICAgICAgICAgICAgICAgICduYW1lJzogcmF3X2V2ZW50Lm5hbWUsCisgICAgICAgICAgICAgICAgICdkaXInOiBkaXJffQorICAgICAgICBpZiBDT01QQVRJQklMSVRZX01PREU6CisgICAgICAgICAgICBkaWN0X1snaXNfZGlyJ10gPSBkaXJfCisgICAgICAgIGlmIHRvX2FwcGVuZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRpY3RfLnVwZGF0ZSh0b19hcHBlbmQpCisgICAgICAgIHJldHVybiBFdmVudChkaWN0XykKKworCitjbGFzcyBQcm9jZXNzRXZlbnQoX1Byb2Nlc3NFdmVudCk6CisgICAgIiIiCisgICAgUHJvY2VzcyBldmVudHMgb2JqZWN0cywgY2FuIGJlIHNwZWNpYWxpemVkIHZpYSBzdWJjbGFzc2luZywgdGh1cyBpdHMKKyAgICBiZWhhdmlvciBjYW4gYmUgb3ZlcnJpZGVuOgorCisgICAgTm90ZTogeW91IHNob3VsZCBub3Qgb3ZlcnJpZGUgX19pbml0X18gaW4geW91ciBzdWJjbGFzcyBpbnN0ZWFkIGRlZmluZQorICAgIGEgbXlfaW5pdCgpIG1ldGhvZCwgdGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZQorICAgIGNvbnN0cnVjdG9yIG9mIHRoaXMgY2xhc3Mgd2l0aCBpdHMgb3B0aW9uYWxzIHBhcmFtZXRlcnMuCisKKyAgICAgIDEuIFByb3ZpZGUgc3BlY2lhbGl6ZWQgaW5kaXZpZHVhbCBtZXRob2RzLCBlLmcuIHByb2Nlc3NfSU5fREVMRVRFIGZvcgorICAgICAgICAgcHJvY2Vzc2luZyBhIHByZWNpc2UgdHlwZSBvZiBldmVudCAoZS5nLiBJTl9ERUxFVEUgaW4gdGhpcyBjYXNlKS4KKyAgICAgIDIuIE9yL2FuZCBwcm92aWRlIG1ldGhvZHMgZm9yIHByb2Nlc3NpbmcgZXZlbnRzIGJ5ICdmYW1pbHknLCBlLmcuCisgICAgICAgICBwcm9jZXNzX0lOX0NMT1NFIG1ldGhvZCB3aWxsIHByb2Nlc3MgYm90aCBJTl9DTE9TRV9XUklURSBhbmQKKyAgICAgICAgIElOX0NMT1NFX05PV1JJVEUgZXZlbnRzIChpZiBwcm9jZXNzX0lOX0NMT1NFX1dSSVRFIGFuZAorICAgICAgICAgcHJvY2Vzc19JTl9DTE9TRV9OT1dSSVRFIGFyZW4ndCBkZWZpbmVkIHRob3VnaCkuCisgICAgICAzLiBPci9hbmQgb3ZlcnJpZGUgcHJvY2Vzc19kZWZhdWx0IGZvciBjYXRjaGluZyBhbmQgcHJvY2Vzc2luZyBhbGwKKyAgICAgICAgIHRoZSByZW1haW5pbmcgdHlwZXMgb2YgZXZlbnRzLgorICAgICIiIgorICAgIHBldmVudCA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwZXZlbnQ9Tm9uZSwgKiprYXJncyk6CisgICAgICAgICIiIgorICAgICAgICBFbmFibGUgY2hhaW5pbmcgb2YgUHJvY2Vzc0V2ZW50IGluc3RhbmNlcy4KKworICAgICAgICBAcGFyYW0gcGV2ZW50OiBPcHRpb25hbCBjYWxsYWJsZSBvYmplY3QsIHdpbGwgYmUgY2FsbGVkIG9uIGV2ZW50CisgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcgKGJlZm9yZSBzZWxmKS4KKyAgICAgICAgQHR5cGUgcGV2ZW50OiBjYWxsYWJsZQorICAgICAgICBAcGFyYW0ga2FyZ3M6IFRoaXMgY29uc3RydWN0b3IgaXMgaW1wbGVtZW50ZWQgYXMgYSB0ZW1wbGF0ZSBtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0aW5nIGl0cyBvcHRpb25hbHMga2V5d29yZGVkIGFyZ3VtZW50cyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgbXlfaW5pdCgpLgorICAgICAgICBAdHlwZSBrYXJnczogZGljdAorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5wZXZlbnQgPSBwZXZlbnQKKyAgICAgICAgc2VsZi5teV9pbml0KCoqa2FyZ3MpCisKKyAgICBkZWYgbXlfaW5pdChzZWxmLCAqKmthcmdzKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIFByb2Nlc3NFdmVudC5fX2luaXRfXygpLiBUaGlzIG1ldGhvZCBpcworICAgICAgICBlbXB0eSBoZXJlIGFuZCBtdXN0IGJlIHJlZGVmaW5lZCB0byBiZSB1c2VmdWwuIEluIGVmZmVjdCwgaWYgeW91CisgICAgICAgIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGluaXRpYWxpemUgeW91ciBzdWJjbGFzcycgaW5zdGFuY2UgdGhlbiB5b3UKKyAgICAgICAganVzdCBoYXZlIHRvIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIHlvdXIgc3ViY2xhc3MuIFRoZW4gYWxsIHRoZQorICAgICAgICBrZXl3b3JkZWQgYXJndW1lbnRzIHBhc3NlZCB0byBQcm9jZXNzRXZlbnQuX19pbml0X18oKSB3aWxsIGJlCisgICAgICAgIHRyYW5zbWl0dGVkIGFzIHBhcmFtZXRlcnMgdG8gdGhpcyBtZXRob2QuIEJld2FyZSB5b3UgTVVTVCBwYXNzCisgICAgICAgIGtleXdvcmQgYXJndW1lbnRzIHRob3VnaC4KKworICAgICAgICBAcGFyYW0ga2FyZ3M6IG9wdGlvbmFsIGRlbGVnYXRlZCBhcmd1bWVudHMgZnJvbSBfX2luaXRfXygpLgorICAgICAgICBAdHlwZSBrYXJnczogZGljdAorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGV2ZW50KToKKyAgICAgICAgc3RvcF9jaGFpbmluZyA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYucGV2ZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBCeSBkZWZhdWx0IG1ldGhvZHMgcmV0dXJuIE5vbmUgc28gd2Ugc2V0IGFzIGd1aWRlbGluZQorICAgICAgICAgICAgIyB0aGF0IG1ldGhvZHMgYXNraW5nIGZvciBzdG9wIGNoYWluaW5nIG11c3QgZXhwbGljaXRlbHkKKyAgICAgICAgICAgICMgcmV0dXJuIG5vbiBOb25lIG9yIG5vbiBGYWxzZSB2YWx1ZXMsIG90aGVyd2lzZSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgIyBiZWhhdmlvciB3aWxsIGJlIHRvIGFjY2VwdCBjaGFpbiBjYWxsIHRvIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAjIGxvY2FsIG1ldGhvZC4KKyAgICAgICAgICAgIHN0b3BfY2hhaW5pbmcgPSBzZWxmLnBldmVudChldmVudCkKKyAgICAgICAgaWYgbm90IHN0b3BfY2hhaW5pbmc6CisgICAgICAgICAgICByZXR1cm4gX1Byb2Nlc3NFdmVudC5fX2NhbGxfXyhzZWxmLCBldmVudCkKKworICAgIGRlZiBuZXN0ZWRfcGV2ZW50KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wZXZlbnQKKworICAgIGRlZiBwcm9jZXNzX0lOX1FfT1ZFUkZMT1coc2VsZiwgZXZlbnQpOgorICAgICAgICAiIiIKKyAgICAgICAgQnkgZGVmYXVsdCB0aGlzIG1ldGhvZCBvbmx5IHJlcG9ydHMgd2FybmluZyBtZXNzYWdlcywgeW91IGNhbiBvdmVycmVkaWRlCisgICAgICAgIGl0IGJ5IHN1YmNsYXNzaW5nIFByb2Nlc3NFdmVudCBhbmQgaW1wbGVtZW50IHlvdXIgb3duCisgICAgICAgIHByb2Nlc3NfSU5fUV9PVkVSRkxPVyBtZXRob2QuIFRoZSBhY3Rpb25zIHlvdSBjYW4gdGFrZSBvbiByZWNlaXZpbmcgdGhpcworICAgICAgICBldmVudCBpcyBlaXRoZXIgdG8gdXBkYXRlIHRoZSB2YXJpYWJsZSBtYXhfcXVldWVkX2V2ZW50cyBpbiBvcmRlciB0bworICAgICAgICBoYW5kbGUgbW9yZSBzaW11bHRhbmVvdXMgZXZlbnRzIG9yIHRvIG1vZGlmeSB5b3VyIGNvZGUgaW4gb3JkZXIgdG8KKyAgICAgICAgYWNjb21wbGlzaCBhIGJldHRlciBmaWx0ZXJpbmcgZGltaW5pc2hpbmcgdGhlIG51bWJlciBvZiByYWlzZWQgZXZlbnRzLgorICAgICAgICBCZWNhdXNlIHRoaXMgbWV0aG9kIGlzIGRlZmluZWQsIElOX1FfT1ZFUkZMT1cgd2lsbCBuZXZlciBnZXQKKyAgICAgICAgdHJhbnNtaXR0ZWQgYXMgYXJndW1lbnRzIHRvIHByb2Nlc3NfZGVmYXVsdCBjYWxscy4KKworICAgICAgICBAcGFyYW0gZXZlbnQ6IElOX1FfT1ZFUkZMT1cgZXZlbnQuCisgICAgICAgIEB0eXBlIGV2ZW50OiBkaWN0CisgICAgICAgICIiIgorICAgICAgICBsb2cud2FybmluZygnRXZlbnQgcXVldWUgb3ZlcmZsb3dlZC4nKQorCisgICAgZGVmIHByb2Nlc3NfZGVmYXVsdChzZWxmLCBldmVudCk6CisgICAgICAgICIiIgorICAgICAgICBEZWZhdWx0IHByb2Nlc3NpbmcgZXZlbnQgbWV0aG9kLiBCeSBkZWZhdWx0IGRvZXMgbm90aGluZy4gU3ViY2xhc3MKKyAgICAgICAgUHJvY2Vzc0V2ZW50IGFuZCByZWRlZmluZSB0aGlzIG1ldGhvZCBpbiBvcmRlciB0byBtb2RpZnkgaXRzIGJlaGF2aW9yLgorCisgICAgICAgIEBwYXJhbSBldmVudDogRXZlbnQgdG8gYmUgcHJvY2Vzc2VkLiBDYW4gYmUgb2YgYW55IHR5cGUgb2YgZXZlbnRzIGJ1dAorICAgICAgICAgICAgICAgICAgICAgIElOX1FfT1ZFUkZMT1cgZXZlbnRzIChzZWUgbWV0aG9kIHByb2Nlc3NfSU5fUV9PVkVSRkxPVykuCisgICAgICAgIEB0eXBlIGV2ZW50OiBFdmVudCBpbnN0YW5jZQorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFByaW50QWxsRXZlbnRzKFByb2Nlc3NFdmVudCk6CisgICAgIiIiCisgICAgRHVtbXkgY2xhc3MgdXNlZCB0byBwcmludCBldmVudHMgc3RyaW5ncyByZXByZXNlbnRhdGlvbnMuIEZvciBpbnN0YW5jZSB0aGlzCisgICAgY2xhc3MgaXMgdXNlZCBmcm9tIGNvbW1hbmQgbGluZSB0byBwcmludCBhbGwgcmVjZWl2ZWQgZXZlbnRzIHRvIHN0ZG91dC4KKyAgICAiIiIKKyAgICBkZWYgbXlfaW5pdChzZWxmLCBvdXQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBAcGFyYW0gb3V0OiBXaGVyZSBldmVudHMgd2lsbCBiZSB3cml0dGVuLgorICAgICAgICBAdHlwZSBvdXQ6IE9iamVjdCBwcm92aWRpbmcgYSB2YWxpZCBmaWxlIG9iamVjdCBpbnRlcmZhY2UuCisgICAgICAgICIiIgorICAgICAgICBpZiBvdXQgaXMgTm9uZToKKyAgICAgICAgICAgIG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgc2VsZi5fb3V0ID0gb3V0CisKKyAgICBkZWYgcHJvY2Vzc19kZWZhdWx0KHNlbGYsIGV2ZW50KToKKyAgICAgICAgIiIiCisgICAgICAgIFdyaXRlcyBldmVudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gdG8gZmlsZSBvYmplY3QgcHJvdmlkZWQgdG8KKyAgICAgICAgbXlfaW5pdCgpLgorCisgICAgICAgIEBwYXJhbSBldmVudDogRXZlbnQgdG8gYmUgcHJvY2Vzc2VkLiBDYW4gYmUgb2YgYW55IHR5cGUgb2YgZXZlbnRzIGJ1dAorICAgICAgICAgICAgICAgICAgICAgIElOX1FfT1ZFUkZMT1cgZXZlbnRzIChzZWUgbWV0aG9kIHByb2Nlc3NfSU5fUV9PVkVSRkxPVykuCisgICAgICAgIEB0eXBlIGV2ZW50OiBFdmVudCBpbnN0YW5jZQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fb3V0LndyaXRlKHN0cihldmVudCkpCisgICAgICAgIHNlbGYuX291dC53cml0ZSgnXG4nKQorICAgICAgICBzZWxmLl9vdXQuZmx1c2goKQorCisKK2NsYXNzIENoYWluSWZUcnVlKFByb2Nlc3NFdmVudCk6CisgICAgIiIiCisgICAgTWFrZXMgY29uZGl0aW9uYWwgY2hhaW5pbmcgZGVwZW5kaW5nIG9uIHRoZSByZXN1bHQgb2YgdGhlIG5lc3RlZAorICAgIHByb2Nlc3NpbmcgaW5zdGFuY2UuCisgICAgIiIiCisgICAgZGVmIG15X2luaXQoc2VsZiwgZnVuYyk6CisgICAgICAgICIiIgorICAgICAgICBNZXRob2QgYXV0b21hdGljYWxseSBjYWxsZWQgZnJvbSBiYXNlIGNsYXNzIGNvbnN0cnVjdG9yLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fZnVuYyA9IGZ1bmMKKworICAgIGRlZiBwcm9jZXNzX2RlZmF1bHQoc2VsZiwgZXZlbnQpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX2Z1bmMoZXZlbnQpCisKKworY2xhc3MgU3RhdHMoUHJvY2Vzc0V2ZW50KToKKyAgICAiIiIKKyAgICBDb21wdXRlIGFuZCBkaXNwbGF5IHRyaXZpYWwgc3RhdGlzdGljcyBhYm91dCBwcm9jZXNzZWQgZXZlbnRzLgorICAgICIiIgorICAgIGRlZiBteV9pbml0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgTWV0aG9kIGF1dG9tYXRpY2FsbHkgY2FsbGVkIGZyb20gYmFzZSBjbGFzcyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3N0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLl9zdGF0cyA9IHt9CisgICAgICAgIHNlbGYuX3N0YXRzX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisKKyAgICBkZWYgcHJvY2Vzc19kZWZhdWx0KHNlbGYsIGV2ZW50KToKKyAgICAgICAgIiIiCisgICAgICAgIFByb2Nlc3NlcyB8ZXZlbnR8LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fc3RhdHNfbG9jay5hY3F1aXJlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXZlbnRzID0gZXZlbnQubWFza25hbWUuc3BsaXQoJ3wnKQorICAgICAgICAgICAgZm9yIGV2ZW50X25hbWUgaW4gZXZlbnRzOgorICAgICAgICAgICAgICAgIGNvdW50ID0gc2VsZi5fc3RhdHMuZ2V0KGV2ZW50X25hbWUsIDApCisgICAgICAgICAgICAgICAgc2VsZi5fc3RhdHNbZXZlbnRfbmFtZV0gPSBjb3VudCArIDEKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3N0YXRzX2xvY2sucmVsZWFzZSgpCisKKyAgICBkZWYgX3N0YXRzX2NvcHkoc2VsZik6CisgICAgICAgIHNlbGYuX3N0YXRzX2xvY2suYWNxdWlyZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zdGF0cy5jb3B5KCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3N0YXRzX2xvY2sucmVsZWFzZSgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHN0YXRzID0gc2VsZi5fc3RhdHNfY29weSgpCisKKyAgICAgICAgZWxhcHNlZCA9IGludCh0aW1lLnRpbWUoKSAtIHNlbGYuX3N0YXJ0X3RpbWUpCisgICAgICAgIGVsYXBzZWRfc3RyID0gJycKKyAgICAgICAgaWYgZWxhcHNlZCA8IDYwOgorICAgICAgICAgICAgZWxhcHNlZF9zdHIgPSBzdHIoZWxhcHNlZCkgKyAnc2VjJworICAgICAgICBlbGlmIDYwIDw9IGVsYXBzZWQgPCAzNjAwOgorICAgICAgICAgICAgZWxhcHNlZF9zdHIgPSAnJWRtbiVkc2VjJyAlIChlbGFwc2VkIC8gNjAsIGVsYXBzZWQgJSA2MCkKKyAgICAgICAgZWxpZiAzNjAwIDw9IGVsYXBzZWQgPCA4NjQwMDoKKyAgICAgICAgICAgIGVsYXBzZWRfc3RyID0gJyVkaCVkbW4nICUgKGVsYXBzZWQgLyAzNjAwLCAoZWxhcHNlZCAlIDM2MDApIC8gNjApCisgICAgICAgIGVsaWYgZWxhcHNlZCA+PSA4NjQwMDoKKyAgICAgICAgICAgIGVsYXBzZWRfc3RyID0gJyVkZCVkaCcgJSAoZWxhcHNlZCAvIDg2NDAwLCAoZWxhcHNlZCAlIDg2NDAwKSAvIDM2MDApCisgICAgICAgIHN0YXRzWydFbGFwc2VkVGltZSddID0gZWxhcHNlZF9zdHIKKworICAgICAgICBsID0gW10KKyAgICAgICAgZm9yIGV2LCB2YWx1ZSBpbiBzb3J0ZWQoc3RhdHMuaXRlbXMoKSwga2V5PWxhbWJkYSB4OiB4WzBdKToKKyAgICAgICAgICAgIGwuYXBwZW5kKCcgJXM9JXMnICUgKG91dHB1dF9mb3JtYXQuZmllbGRfbmFtZShldiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0LmZpZWxkX3ZhbHVlKHZhbHVlKSkpCisgICAgICAgIHMgPSAnPCVzJXMgPicgJSAob3V0cHV0X2Zvcm1hdC5jbGFzc19uYW1lKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnJy5qb2luKGwpKQorICAgICAgICByZXR1cm4gcworCisgICAgZGVmIGR1bXAoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgRHVtcHMgc3RhdGlzdGljcy4KKworICAgICAgICBAcGFyYW0gZmlsZW5hbWU6IGZpbGVuYW1lIHdoZXJlIHN0YXRzIHdpbGwgYmUgZHVtcGVkLCBmaWxlbmFtZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgYW5kIG11c3Qgbm90IGV4aXN0IHByaW9yIHRvIHRoaXMgY2FsbC4KKyAgICAgICAgQHR5cGUgZmlsZW5hbWU6IHN0cmluZworICAgICAgICAiIiIKKyAgICAgICAgZmxhZ3MgPSBvcy5PX1dST05MWXxvcy5PX0NSRUFUfG9zLk9fTk9GT0xMT1d8b3MuT19FWENMCisgICAgICAgIGZkID0gb3Mub3BlbihmaWxlbmFtZSwgZmxhZ3MsIDA2MDApCisgICAgICAgIG9zLndyaXRlKGZkLCBzdHIoc2VsZikpCisgICAgICAgIG9zLmNsb3NlKGZkKQorCisgICAgZGVmIF9fc3RyX18oc2VsZiwgc2NhbGU9NDUpOgorICAgICAgICBzdGF0cyA9IHNlbGYuX3N0YXRzX2NvcHkoKQorICAgICAgICBpZiBub3Qgc3RhdHM6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgICAgICBtID0gbWF4KHN0YXRzLnZhbHVlcygpKQorICAgICAgICB1bml0eSA9IGZsb2F0KHNjYWxlKSAvIG0KKyAgICAgICAgZm10ID0gJyUlLTI2cyUlLSVkcyUlcycgJSAobGVuKG91dHB1dF9mb3JtYXQuZmllbGRfdmFsdWUoJ0AnICogc2NhbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDEpCisgICAgICAgIGRlZiBmdW5jKHgpOgorICAgICAgICAgICAgcmV0dXJuIGZtdCAlIChvdXRwdXRfZm9ybWF0LmZpZWxkX25hbWUoeFswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQuZmllbGRfdmFsdWUoJ0AnICogaW50KHhbMV0gKiB1bml0eSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0LnNpbXBsZSgnJWQnICUgeFsxXSwgJ3llbGxvdycpKQorICAgICAgICBzID0gJ1xuJy5qb2luKG1hcChmdW5jLCBzb3J0ZWQoc3RhdHMuaXRlbXMoKSwga2V5PWxhbWJkYSB4OiB4WzBdKSkpCisgICAgICAgIHJldHVybiBzCisKKworY2xhc3MgTm90aWZpZXJFcnJvcihQeWlub3RpZnlFcnJvcik6CisgICAgIiIiCisgICAgTm90aWZpZXIgRXhjZXB0aW9uLiBSYWlzZWQgb24gTm90aWZpZXIgZXJyb3IuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXJyKToKKyAgICAgICAgIiIiCisgICAgICAgIEBwYXJhbSBlcnI6IEV4Y2VwdGlvbiBzdHJpbmcncyBkZXNjcmlwdGlvbi4KKyAgICAgICAgQHR5cGUgZXJyOiBzdHJpbmcKKyAgICAgICAgIiIiCisgICAgICAgIFB5aW5vdGlmeUVycm9yLl9faW5pdF9fKHNlbGYsIGVycikKKworCitjbGFzcyBOb3RpZmllcjoKKyAgICAiIiIKKyAgICBSZWFkIG5vdGlmaWNhdGlvbnMsIHByb2Nlc3MgZXZlbnRzLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdhdGNoX21hbmFnZXIsIGRlZmF1bHRfcHJvY19mdW49Tm9uZSwgcmVhZF9mcmVxPTAsCisgICAgICAgICAgICAgICAgIHRocmVzaG9sZD0wLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5pdGlhbGl6YXRpb24uIHJlYWRfZnJlcSwgdGhyZXNob2xkIGFuZCB0aW1lb3V0IHBhcmFtZXRlcnMgYXJlIHVzZWQKKyAgICAgICAgd2hlbiBsb29waW5nLgorCisgICAgICAgIEBwYXJhbSB3YXRjaF9tYW5hZ2VyOiBXYXRjaCBNYW5hZ2VyLgorICAgICAgICBAdHlwZSB3YXRjaF9tYW5hZ2VyOiBXYXRjaE1hbmFnZXIgaW5zdGFuY2UKKyAgICAgICAgQHBhcmFtIGRlZmF1bHRfcHJvY19mdW46IERlZmF1bHQgcHJvY2Vzc2luZyBtZXRob2QuIElmIE5vbmUsIGEgbmV3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSBvZiBQcmludEFsbEV2ZW50cyB3aWxsIGJlIGFzc2lnbmVkLgorICAgICAgICBAdHlwZSBkZWZhdWx0X3Byb2NfZnVuOiBpbnN0YW5jZSBvZiBQcm9jZXNzRXZlbnQKKyAgICAgICAgQHBhcmFtIHJlYWRfZnJlcTogaWYgcmVhZF9mcmVxID09IDAsIGV2ZW50cyBhcmUgcmVhZCBhc2FwLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZWFkX2ZyZXEgaXMgPiAwLCB0aGlzIHRocmVhZCBzbGVlcHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4KDAsIHJlYWRfZnJlcSAtIHRpbWVvdXQpIHNlY29uZHMuIEJ1dCBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0IGlzIE5vbmUgaXQgbWF5IGJlIGRpZmZlcmVudCBiZWNhdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGwgaXMgYmxvY2tpbmcgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIHJlYWQuCisgICAgICAgIEB0eXBlIHJlYWRfZnJlcTogaW50CisgICAgICAgIEBwYXJhbSB0aHJlc2hvbGQ6IEZpbGUgZGVzY3JpcHRvciB3aWxsIGJlIHJlYWQgb25seSBpZiB0aGUgYWNjdW11bGF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSB0byByZWFkIGJlY29tZXMgPj0gdGhyZXNob2xkLiBJZiAhPSAwLCB5b3UgbGlrZWx5CisgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgdG8gdXNlIGl0IGluIGNvbWJpbmF0aW9uIHdpdGggYW4gYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgZm9yIHJlYWRfZnJlcSBiZWNhdXNlIHdpdGhvdXQgdGhhdCB5b3Ugd291bGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAga2VlcCBsb29waW5nIHdpdGhvdXQgcmVhbGx5IHJlYWRpbmcgYW55dGhpbmcgYW5kIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW50aWwgdGhlIGFtb3VudCBvZiBldmVudHMgdG8gcmVhZCBpcyA+PSB0aHJlc2hvbGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgIEF0IGxlYXN0IHdpdGggcmVhZF9mcmVxIHNldCB5b3UgbWlnaHQgc2xlZXAuCisgICAgICAgIEB0eXBlIHRocmVzaG9sZDogaW50CisgICAgICAgIEBwYXJhbSB0aW1lb3V0OgorICAgICAgICAgICAgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdC5odG1sI3BvbGxpbmctb2JqZWN0cworICAgICAgICBAdHlwZSB0aW1lb3V0OiBpbnQKKyAgICAgICAgIiIiCisgICAgICAgICMgV2F0Y2ggTWFuYWdlciBpbnN0YW5jZQorICAgICAgICBzZWxmLl93YXRjaF9tYW5hZ2VyID0gd2F0Y2hfbWFuYWdlcgorICAgICAgICAjIEZpbGUgZGVzY3JpcHRvcgorICAgICAgICBzZWxmLl9mZCA9IHNlbGYuX3dhdGNoX21hbmFnZXIuZ2V0X2ZkKCkKKyAgICAgICAgIyBQb2xsIG9iamVjdCBhbmQgcmVnaXN0cmF0aW9uCisgICAgICAgIHNlbGYuX3BvbGxvYmogPSBzZWxlY3QucG9sbCgpCisgICAgICAgIHNlbGYuX3BvbGxvYmoucmVnaXN0ZXIoc2VsZi5fZmQsIHNlbGVjdC5QT0xMSU4pCisgICAgICAgICMgVGhpcyBwaXBlIGlzIGNvcnJlY3RlbHkgaW5pdGlhbGl6ZWQgYW5kIHVzZWQgYnkgVGhyZWFkZWROb3RpZmllcgorICAgICAgICBzZWxmLl9waXBlID0gKC0xLCAtMSkKKyAgICAgICAgIyBFdmVudCBxdWV1ZQorICAgICAgICBzZWxmLl9ldmVudHEgPSBkZXF1ZSgpCisgICAgICAgICMgU3lzdGVtIHByb2Nlc3NpbmcgZnVuY3RvciwgY29tbW9uIHRvIGFsbCBldmVudHMKKyAgICAgICAgc2VsZi5fc3lzX3Byb2NfZnVuID0gX1N5c1Byb2Nlc3NFdmVudChzZWxmLl93YXRjaF9tYW5hZ2VyLCBzZWxmKQorICAgICAgICAjIERlZmF1bHQgcHJvY2Vzc2luZyBtZXRob2QKKyAgICAgICAgc2VsZi5fZGVmYXVsdF9wcm9jX2Z1biA9IGRlZmF1bHRfcHJvY19mdW4KKyAgICAgICAgaWYgZGVmYXVsdF9wcm9jX2Z1biBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fZGVmYXVsdF9wcm9jX2Z1biA9IFByaW50QWxsRXZlbnRzKCkKKyAgICAgICAgIyBMb29wIHBhcmFtZXRlcnMKKyAgICAgICAgc2VsZi5fcmVhZF9mcmVxID0gcmVhZF9mcmVxCisgICAgICAgIHNlbGYuX3RocmVzaG9sZCA9IHRocmVzaG9sZAorICAgICAgICBzZWxmLl90aW1lb3V0ID0gdGltZW91dAorICAgICAgICAjIENvYWxlc2NlIGV2ZW50cyBvcHRpb24KKyAgICAgICAgc2VsZi5fY29hbGVzY2UgPSBGYWxzZQorICAgICAgICAjIHNldCBvZiBzdHIocmF3X2V2ZW50KSwgb25seSB1c2VkIHdoZW4gY29hbGVzY2Ugb3B0aW9uIGlzIFRydWUKKyAgICAgICAgc2VsZi5fZXZlbnRzZXQgPSBzZXQoKQorCisgICAgZGVmIGFwcGVuZF9ldmVudChzZWxmLCBldmVudCk6CisgICAgICAgICIiIgorICAgICAgICBBcHBlbmQgYSByYXcgZXZlbnQgdG8gdGhlIGV2ZW50IHF1ZXVlLgorCisgICAgICAgIEBwYXJhbSBldmVudDogQW4gZXZlbnQuCisgICAgICAgIEB0eXBlIGV2ZW50OiBfUmF3RXZlbnQgaW5zdGFuY2UuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9ldmVudHEuYXBwZW5kKGV2ZW50KQorCisgICAgZGVmIHByb2NfZnVuKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGVmYXVsdF9wcm9jX2Z1bgorCisgICAgZGVmIGNvYWxlc2NlX2V2ZW50cyhzZWxmLCBjb2FsZXNjZT1UcnVlKToKKyAgICAgICAgIiIiCisgICAgICAgIENvYWxlc2NpbmcgZXZlbnRzLiBFdmVudHMgYXJlIHVzdWFsbHkgcHJvY2Vzc2VkIGJ5IGJhdGNocywgdGhlaXIgc2l6ZQorICAgICAgICBkZXBlbmQgb24gdmFyaW91cyBmYWN0b3JzLiBUaHVzLCBiZWZvcmUgcHJvY2Vzc2luZyB0aGVtLCBldmVudHMgcmVjZWl2ZWQKKyAgICAgICAgZnJvbSBpbm90aWZ5IGFyZSBhZ2dyZWdhdGVkIGluIGEgZmlmbyBxdWV1ZS4gSWYgdGhpcyBjb2FsZXNjaW5nCisgICAgICAgIG9wdGlvbiBpcyBlbmFibGVkIGV2ZW50cyBhcmUgZmlsdGVyZWQgYmFzZWQgb24gdGhlaXIgdW5pY2l0eSwgb25seQorICAgICAgICB1bmlxdWUgZXZlbnRzIGFyZSBlbnF1ZXVlZCwgZG91YmxvbnMgYXJlIGRpc2NhcmRlZC4gQW4gZXZlbnQgaXMgdW5pcXVlCisgICAgICAgIHdoZW4gdGhlIGNvbWJpbmF0aW9uIG9mIGl0cyBmaWVsZHMgKHdkLCBtYXNrLCBjb29raWUsIG5hbWUpIGlzIHVuaXF1ZQorICAgICAgICBhbW9uZyBldmVudHMgb2YgYSBzYW1lIGJhdGNoLiBBZnRlciBhIGJhdGNoIG9mIGV2ZW50cyBpcyBwcm9jZXNzZWQgYW55CisgICAgICAgIGV2ZW50cyBpcyBhY2NlcHRlZCBhZ2Fpbi4gQnkgZGVmYXVsdCB0aGlzIG9wdGlvbiBpcyBkaXNhYmxlZCwgeW91IGhhdmUKKyAgICAgICAgdG8gZXhwbGljdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB0byB0dXJuIGl0IG9uLgorCisgICAgICAgIEBwYXJhbSBjb2FsZXNjZTogT3B0aW9uYWwgbmV3IGNvYWxlc2NpbmcgdmFsdWUuIFRydWUgYnkgZGVmYXVsdC4KKyAgICAgICAgQHR5cGUgY29hbGVzY2U6IEJvb2wKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NvYWxlc2NlID0gY29hbGVzY2UKKyAgICAgICAgaWYgbm90IGNvYWxlc2NlOgorICAgICAgICAgICAgc2VsZi5fZXZlbnRzZXQuY2xlYXIoKQorCisgICAgZGVmIGNoZWNrX2V2ZW50cyhzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgZm9yIG5ldyBldmVudHMgYXZhaWxhYmxlIHRvIHJlYWQsIGJsb2NrcyB1cCB0byB0aW1lb3V0CisgICAgICAgIG1pbGxpc2Vjb25kcy4KKworICAgICAgICBAcGFyYW0gdGltZW91dDogSWYgc3BlY2lmaWVkIGl0IG92ZXJyaWRlcyB0aGUgY29ycmVzcG9uZGluZyBpbnN0YW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIF90aW1lb3V0LgorICAgICAgICBAdHlwZSB0aW1lb3V0OiBpbnQKKworICAgICAgICBAcmV0dXJuOiBOZXcgZXZlbnRzIHRvIHJlYWQuCisgICAgICAgIEBydHlwZTogYm9vbAorICAgICAgICAiIiIKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIGJsb2NrcyB1cCB0byAndGltZW91dCcgbWlsbGlzZWNvbmRzCisgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2VsZi5fdGltZW91dAorICAgICAgICAgICAgICAgIHJldCA9IHNlbGYuX3BvbGxvYmoucG9sbCh0aW1lb3V0KQorICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciwgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyclswXSA9PSBlcnJuby5FSU5UUjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUgIyBpbnRlcnJ1cHRlZCwgcmV0cnkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIG5vdCByZXQgb3IgKHNlbGYuX3BpcGVbMF0gPT0gcmV0WzBdWzBdKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAjIG9ubHkgb25lIGZkIGlzIHBvbGxlZAorICAgICAgICByZXR1cm4gcmV0WzBdWzFdICYgc2VsZWN0LlBPTExJTgorCisgICAgZGVmIHJlYWRfZXZlbnRzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVhZCBldmVudHMgZnJvbSBkZXZpY2UsIGJ1aWxkIF9SYXdFdmVudHMsIGFuZCBlbnF1ZXVlIHRoZW0uCisgICAgICAgICIiIgorICAgICAgICBidWZfID0gYXJyYXkuYXJyYXkoJ2knLCBbMF0pCisgICAgICAgICMgZ2V0IGV2ZW50IHF1ZXVlIHNpemUKKyAgICAgICAgaWYgZmNudGwuaW9jdGwoc2VsZi5fZmQsIHRlcm1pb3MuRklPTlJFQUQsIGJ1Zl8sIDEpID09IC0xOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHF1ZXVlX3NpemUgPSBidWZfWzBdCisgICAgICAgIGlmIHF1ZXVlX3NpemUgPCBzZWxmLl90aHJlc2hvbGQ6CisgICAgICAgICAgICBsb2cuZGVidWcoJyhmZDogJWQpICVkIGJ5dGVzIGF2YWlsYWJsZSB0byByZWFkIGJ1dCB0aHJlc2hvbGQgaXMgJworICAgICAgICAgICAgICAgICAgICAgICdmaXhlZCB0byAlZCBieXRlcycsIHNlbGYuX2ZkLCBxdWV1ZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RocmVzaG9sZCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgUmVhZCBjb250ZW50IGZyb20gZmlsZQorICAgICAgICAgICAgciA9IG9zLnJlYWQoc2VsZi5fZmQsIHF1ZXVlX3NpemUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIG1zZzoKKyAgICAgICAgICAgIHJhaXNlIE5vdGlmaWVyRXJyb3IobXNnKQorICAgICAgICBsb2cuZGVidWcoJ0V2ZW50IHF1ZXVlIHNpemU6ICVkJywgcXVldWVfc2l6ZSkKKyAgICAgICAgcnN1bSA9IDAgICMgY291bnRlcgorICAgICAgICB3aGlsZSByc3VtIDwgcXVldWVfc2l6ZToKKyAgICAgICAgICAgIHNfc2l6ZSA9IDE2CisgICAgICAgICAgICAjIFJldHJpZXZlIHdkLCBtYXNrLCBjb29raWUgYW5kIGZuYW1lX2xlbgorICAgICAgICAgICAgd2QsIG1hc2ssIGNvb2tpZSwgZm5hbWVfbGVuID0gc3RydWN0LnVucGFjaygnaUlJSScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbcnN1bTpyc3VtK3Nfc2l6ZV0pCisgICAgICAgICAgICAjIFJldHJpZXZlIG5hbWUKKyAgICAgICAgICAgIGZuYW1lLCA9IHN0cnVjdC51bnBhY2soJyVkcycgJSBmbmFtZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbcnN1bSArIHNfc2l6ZTpyc3VtICsgc19zaXplICsgZm5hbWVfbGVuXSkKKyAgICAgICAgICAgIHJhd2V2ZW50ID0gX1Jhd0V2ZW50KHdkLCBtYXNrLCBjb29raWUsIGZuYW1lKQorICAgICAgICAgICAgaWYgc2VsZi5fY29hbGVzY2U6CisgICAgICAgICAgICAgICAgIyBPbmx5IGVucXVldWUgbmV3ICh1bmlxdWUpIGV2ZW50cy4KKyAgICAgICAgICAgICAgICByYXdldmVudHN0ciA9IHN0cihyYXdldmVudCkKKyAgICAgICAgICAgICAgICBpZiByYXdldmVudHN0ciBub3QgaW4gc2VsZi5fZXZlbnRzZXQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2V2ZW50c2V0LmFkZChyYXdldmVudHN0cikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXZlbnRxLmFwcGVuZChyYXdldmVudCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZXZlbnRxLmFwcGVuZChyYXdldmVudCkKKyAgICAgICAgICAgIHJzdW0gKz0gc19zaXplICsgZm5hbWVfbGVuCisKKyAgICBkZWYgcHJvY2Vzc19ldmVudHMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSb3V0aW5lIGZvciBwcm9jZXNzaW5nIGV2ZW50cyBmcm9tIHF1ZXVlIGJ5IGNhbGxpbmcgdGhlaXIKKyAgICAgICAgYXNzb2NpYXRlZCBwcm9jY2Vzc2luZyBtZXRob2QgKGFuIGluc3RhbmNlIG9mIFByb2Nlc3NFdmVudCkuCisgICAgICAgIEl0IGFsc28gZG9lcyBpbnRlcm5hbCBwcm9jZXNzaW5ncywgdG8ga2VlcCB0aGUgc3lzdGVtIHVwZGF0ZWQuCisgICAgICAgICIiIgorICAgICAgICB3aGlsZSBzZWxmLl9ldmVudHE6CisgICAgICAgICAgICByYXdfZXZlbnQgPSBzZWxmLl9ldmVudHEucG9wbGVmdCgpICAjIHBvcCBuZXh0IGV2ZW50CisgICAgICAgICAgICBpZiBzZWxmLl93YXRjaF9tYW5hZ2VyLmlnbm9yZV9ldmVudHM6CisgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCJFdmVudCBpZ25vcmVkOiAlcyIgJSByZXByKHJhd19ldmVudCkpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHdhdGNoXyA9IHNlbGYuX3dhdGNoX21hbmFnZXIuZ2V0X3dhdGNoKHJhd19ldmVudC53ZCkKKyAgICAgICAgICAgIGlmICh3YXRjaF8gaXMgTm9uZSkgYW5kIG5vdCAocmF3X2V2ZW50Lm1hc2sgJiBJTl9RX09WRVJGTE9XKToKKyAgICAgICAgICAgICAgICBpZiBub3QgKHJhd19ldmVudC5tYXNrICYgSU5fSUdOT1JFRCk6CisgICAgICAgICAgICAgICAgICAgICMgTm90IHJlYWxseSBzdXJlIGhvdyB3ZSBlbmRlZCB1cCBoZXJlLCBub3IgaG93IHdlIHNob3VsZAorICAgICAgICAgICAgICAgICAgICAjIGhhbmRsZSB0aGVzZSB0eXBlcyBvZiBldmVudHMgYW5kIGlmIGl0IGlzIGFwcHJvcHJpYXRlIHRvCisgICAgICAgICAgICAgICAgICAgICMgY29tcGxldGx5IHNraXAgdGhlbSAobGlrZSB3ZSBhcmUgZG9pbmcgaGVyZSkuCisgICAgICAgICAgICAgICAgICAgIGxvZy53YXJuaW5nKCJVbmFibGUgdG8gcmV0cmlldmUgV2F0Y2ggb2JqZWN0IGFzc29jaWF0ZWQgdG8gJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKHJhd19ldmVudCkpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHJldmVudCA9IHNlbGYuX3N5c19wcm9jX2Z1bihyYXdfZXZlbnQpICAjIHN5c3RlbSBwcm9jZXNzaW5ncworICAgICAgICAgICAgaWYgd2F0Y2hfIGFuZCB3YXRjaF8ucHJvY19mdW46CisgICAgICAgICAgICAgICAgd2F0Y2hfLnByb2NfZnVuKHJldmVudCkgICMgdXNlciBwcm9jZXNzaW5ncworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9kZWZhdWx0X3Byb2NfZnVuKHJldmVudCkKKyAgICAgICAgc2VsZi5fc3lzX3Byb2NfZnVuLmNsZWFudXAoKSAgIyByZW1vdmUgb2xkcyBNT1ZFRF8qIGV2ZW50cyByZWNvcmRzCisgICAgICAgIGlmIHNlbGYuX2NvYWxlc2NlOgorICAgICAgICAgICAgc2VsZi5fZXZlbnRzZXQuY2xlYXIoKQorCisgICAgZGVmIF9fZGFlbW9uaXplKHNlbGYsIHBpZF9maWxlPU5vbmUsIHN0ZGluPW9zLmRldm51bGwsIHN0ZG91dD1vcy5kZXZudWxsLAorICAgICAgICAgICAgICAgICAgICBzdGRlcnI9b3MuZGV2bnVsbCk6CisgICAgICAgICIiIgorICAgICAgICBAcGFyYW0gcGlkX2ZpbGU6IGZpbGUgd2hlcmUgdGhlIHBpZCB3aWxsIGJlIHdyaXR0ZW4uIElmIHBpZF9maWxlPU5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGlkIGlzIHdyaXR0ZW4gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAvdmFyL3J1bi88c3lzLmFyZ3ZbMF18cHlpbm90aWZ5Pi5waWQsIGlmIHBpZF9maWxlPUZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgbm8gcGlkX2ZpbGUgaXMgd3JpdHRlbi4KKyAgICAgICAgQHBhcmFtIHN0ZGluOgorICAgICAgICBAcGFyYW0gc3Rkb3V0OgorICAgICAgICBAcGFyYW0gc3RkZXJyOiBmaWxlcyBhc3NvY2lhdGVkIHRvIGNvbW1vbiBzdHJlYW1zLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgcGlkX2ZpbGUgaXMgTm9uZToKKyAgICAgICAgICAgIGRpcm5hbWUgPSAnL3Zhci9ydW4vJworICAgICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKSBvciAncHlpbm90aWZ5JworICAgICAgICAgICAgcGlkX2ZpbGUgPSBvcy5wYXRoLmpvaW4oZGlybmFtZSwgYmFzZW5hbWUgKyAnLnBpZCcpCisKKyAgICAgICAgaWYgcGlkX2ZpbGUgIT0gRmFsc2UgYW5kIG9zLnBhdGgubGV4aXN0cyhwaWRfZmlsZSk6CisgICAgICAgICAgICBlcnIgPSAnQ2Fubm90IGRhZW1vbml6ZTogcGlkIGZpbGUgJXMgYWxyZWFkeSBleGlzdHMuJyAlIHBpZF9maWxlCisgICAgICAgICAgICByYWlzZSBOb3RpZmllckVycm9yKGVycikKKworICAgICAgICBkZWYgZm9ya19kYWVtb24oKToKKyAgICAgICAgICAgICMgQWRhcHRlZCBmcm9tIENoYWQgSi4gU2Nocm9lZGVyJ3MgcmVjaXBlCisgICAgICAgICAgICAjIEBzZWUgaHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvMjc4NzMxLworICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICBpZiAocGlkID09IDApOgorICAgICAgICAgICAgICAgICMgcGFyZW50IDIKKyAgICAgICAgICAgICAgICBvcy5zZXRzaWQoKQorICAgICAgICAgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICAgICAgICAgIGlmIChwaWQgPT0gMCk6CisgICAgICAgICAgICAgICAgICAgICMgY2hpbGQKKyAgICAgICAgICAgICAgICAgICAgb3MuY2hkaXIoJy8nKQorICAgICAgICAgICAgICAgICAgICBvcy51bWFzaygwMjIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBwYXJlbnQgMgorICAgICAgICAgICAgICAgICAgICBvcy5fZXhpdCgwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIHBhcmVudCAxCisgICAgICAgICAgICAgICAgb3MuX2V4aXQoMCkKKworICAgICAgICAgICAgZmRfaW5wID0gb3Mub3BlbihzdGRpbiwgb3MuT19SRE9OTFkpCisgICAgICAgICAgICBvcy5kdXAyKGZkX2lucCwgMCkKKyAgICAgICAgICAgIGZkX291dCA9IG9zLm9wZW4oc3Rkb3V0LCBvcy5PX1dST05MWXxvcy5PX0NSRUFULCAwNjAwKQorICAgICAgICAgICAgb3MuZHVwMihmZF9vdXQsIDEpCisgICAgICAgICAgICBmZF9lcnIgPSBvcy5vcGVuKHN0ZGVyciwgb3MuT19XUk9OTFl8b3MuT19DUkVBVCwgMDYwMCkKKyAgICAgICAgICAgIG9zLmR1cDIoZmRfZXJyLCAyKQorCisgICAgICAgICMgRGV0YWNoIHRhc2sKKyAgICAgICAgZm9ya19kYWVtb24oKQorCisgICAgICAgICMgV3JpdGUgcGlkCisgICAgICAgIGlmIHBpZF9maWxlICE9IEZhbHNlOgorICAgICAgICAgICAgZmxhZ3MgPSBvcy5PX1dST05MWXxvcy5PX0NSRUFUfG9zLk9fTk9GT0xMT1d8b3MuT19FWENMCisgICAgICAgICAgICBmZF9waWQgPSBvcy5vcGVuKHBpZF9maWxlLCBmbGFncywgMDYwMCkKKyAgICAgICAgICAgIG9zLndyaXRlKGZkX3BpZCwgc3RyKG9zLmdldHBpZCgpKSArICdcbicpCisgICAgICAgICAgICBvcy5jbG9zZShmZF9waWQpCisgICAgICAgICAgICAjIFJlZ2lzdGVyIHVubGluayBmdW5jdGlvbgorICAgICAgICAgICAgYXRleGl0LnJlZ2lzdGVyKGxhbWJkYSA6IG9zLnVubGluayhwaWRfZmlsZSkpCisKKyAgICBkZWYgX3NsZWVwKHNlbGYsIHJlZl90aW1lKToKKyAgICAgICAgIyBPbmx5IGNvbnNpZGVyIHNsZWVwaW5nIGlmIHJlYWRfZnJlcSBpcyA+IDAKKyAgICAgICAgaWYgc2VsZi5fcmVhZF9mcmVxID4gMDoKKyAgICAgICAgICAgIGN1cl90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIHNsZWVwX2Ftb3VudCA9IHNlbGYuX3JlYWRfZnJlcSAtIChjdXJfdGltZSAtIHJlZl90aW1lKQorICAgICAgICAgICAgaWYgc2xlZXBfYW1vdW50ID4gMDoKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoJ05vdyBzbGVlcGluZyAlZCBzZWNvbmRzJywgc2xlZXBfYW1vdW50KQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoc2xlZXBfYW1vdW50KQorCisgICAgZGVmIGxvb3Aoc2VsZiwgY2FsbGJhY2s9Tm9uZSwgZGFlbW9uaXplPUZhbHNlLCAqKmFyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgRXZlbnRzIGFyZSByZWFkIG9ubHkgb25lIHRpbWUgZXZlcnkgbWluKHJlYWRfZnJlcSwgdGltZW91dCkKKyAgICAgICAgc2Vjb25kcyBhdCBiZXN0IGFuZCBvbmx5IGlmIHRoZSBzaXplIHRvIHJlYWQgaXMgPj0gdGhyZXNob2xkLgorICAgICAgICBBZnRlciB0aGlzIG1ldGhvZCByZXR1cm5zIGl0IG11c3Qgbm90IGJlIGNhbGxlZCBhZ2FpbiBmb3IgdGhlIHNhbWUKKyAgICAgICAgaW5zdGFuY2UuCisKKyAgICAgICAgQHBhcmFtIGNhbGxiYWNrOiBGdW5jdG9yIGNhbGxlZCBhZnRlciBlYWNoIGV2ZW50IHByb2Nlc3NpbmcgaXRlcmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgIEV4cGVjdHMgdG8gcmVjZWl2ZSB0aGUgbm90aWZpZXIgb2JqZWN0IChzZWxmKSBhcyBmaXJzdAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci4gSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIFRydWUgdGhlIGxvb3AgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbW1lZGlhdGVseSB0ZXJtaW5hdGVkIG90aGVyd2lzZSB0aGUgbG9vcCBtZXRob2Qga2VlcHMKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb29waW5nLgorICAgICAgICBAdHlwZSBjYWxsYmFjazogY2FsbGFibGUgb2JqZWN0IG9yIGZ1bmN0aW9uCisgICAgICAgIEBwYXJhbSBkYWVtb25pemU6IFRoaXMgdGhyZWFkIGlzIGRhZW1vbml6ZWQgaWYgc2V0IHRvIFRydWUuCisgICAgICAgIEB0eXBlIGRhZW1vbml6ZTogYm9vbGVhbgorICAgICAgICBAcGFyYW0gYXJnczogT3B0aW9uYWwgYW5kIHJlbGV2YW50IG9ubHkgaWYgZGFlbW9uaXplIGlzIFRydWUuIFJlbWFpbmluZworICAgICAgICAgICAgICAgICAgICAga2V5d29yZGVkIGFyZ3VtZW50cyBhcmUgZGlyZWN0bHkgcGFzc2VkIHRvIGRhZW1vbml6ZSBzZWUKKyAgICAgICAgICAgICAgICAgICAgIF9fZGFlbW9uaXplKCkgbWV0aG9kLiBJZiBwaWRfZmlsZT1Ob25lIG9yIGlzIHNldCB0byBhCisgICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSB0aGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0CisgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhpcyBtZXRob2QgaXMgY2FsbGVkIG90aGVyd2lzZSBhbiBleGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgIHB5aW5vdGlmeS5Ob3RpZmllckVycm9yIHdpbGwgYmUgcmFpc2VkLiBJZiBwaWRfZmlsZT1GYWxzZQorICAgICAgICAgICAgICAgICAgICAgaXQgaXMgc3RpbGwgZGFlbW9uaXplZCBidXQgdGhlIHBpZCBpcyBub3Qgd3JpdHRlbiBpbiBhbnkKKyAgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgIEB0eXBlIGFyZ3M6IHZhcmlvdXMKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGRhZW1vbml6ZToKKyAgICAgICAgICAgIHNlbGYuX19kYWVtb25pemUoKiphcmdzKQorCisgICAgICAgICMgUmVhZCBhbmQgcHJvY2VzcyBldmVudHMgZm9yZXZlcgorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc19ldmVudHMoKQorICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayBpcyBub3QgTm9uZSkgYW5kIChjYWxsYmFjayhzZWxmKSBpcyBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICByZWZfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgIyBjaGVja19ldmVudHMgaXMgYmxvY2tpbmcKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNoZWNrX2V2ZW50cygpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zbGVlcChyZWZfdGltZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWFkX2V2ZW50cygpCisgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgIyBTdG9wIG1vbml0b3JpbmcgaWYgc2lnaW50IGlzIGNhdWdodCAoQ29udHJvbC1DKS4KKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoJ1B5aW5vdGlmeSBzdG9wcyBtb25pdG9yaW5nLicpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgIyBDbG9zZSBpbnRlcm5hbHMKKyAgICAgICAgc2VsZi5zdG9wKCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2xvc2UgaW5vdGlmeSdzIGluc3RhbmNlIChjbG9zZSBpdHMgZmlsZSBkZXNjcmlwdG9yKS4KKyAgICAgICAgSXQgZGVzdHJveXMgYWxsIGV4aXN0aW5nIHdhdGNoZXMsIHBlbmRpbmcgZXZlbnRzLC4uLgorICAgICAgICBUaGlzIG1ldGhvZCBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBhdCB0aGUgZW5kIG9mIGxvb3AoKS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3BvbGxvYmoudW5yZWdpc3RlcihzZWxmLl9mZCkKKyAgICAgICAgb3MuY2xvc2Uoc2VsZi5fZmQpCisgICAgICAgIHNlbGYuX3N5c19wcm9jX2Z1biA9IE5vbmUKKworCitjbGFzcyBUaHJlYWRlZE5vdGlmaWVyKHRocmVhZGluZy5UaHJlYWQsIE5vdGlmaWVyKToKKyAgICAiIiIKKyAgICBUaGlzIG5vdGlmaWVyIGluaGVyaXRzIGZyb20gdGhyZWFkaW5nLlRocmVhZCBmb3IgaW5zdGFuY2lhdGluZyBhIHNlcGFyYXRlCisgICAgdGhyZWFkLCBhbmQgYWxzbyBpbmhlcml0cyBmcm9tIE5vdGlmaWVyLCBiZWNhdXNlIGl0IGlzIGEgdGhyZWFkZWQgbm90aWZpZXIuCisKKyAgICBOb3RlIHRoYXQgZXZlcnkgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0aGlzIGNsYXNzIGlzIGFsc28gcHJvdmlkZWQKKyAgICB0aHJvdWdoIE5vdGlmaWVyIGNsYXNzLiBNb3Jlb3ZlciBOb3RpZmllciBzaG91bGQgYmUgY29uc2lkZXJlZCBmaXJzdCBiZWNhdXNlCisgICAgaXQgaXMgbm90IHRocmVhZGVkIGFuZCBjb3VsZCBiZSBlYXNpbHkgZGFlbW9uaXplZC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2F0Y2hfbWFuYWdlciwgZGVmYXVsdF9wcm9jX2Z1bj1Ob25lLCByZWFkX2ZyZXE9MCwKKyAgICAgICAgICAgICAgICAgdGhyZXNob2xkPTAsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBJbml0aWFsaXphdGlvbiwgaW5pdGlhbGl6ZSBiYXNlIGNsYXNzZXMuIHJlYWRfZnJlcSwgdGhyZXNob2xkIGFuZAorICAgICAgICB0aW1lb3V0IHBhcmFtZXRlcnMgYXJlIHVzZWQgd2hlbiBsb29waW5nLgorCisgICAgICAgIEBwYXJhbSB3YXRjaF9tYW5hZ2VyOiBXYXRjaCBNYW5hZ2VyLgorICAgICAgICBAdHlwZSB3YXRjaF9tYW5hZ2VyOiBXYXRjaE1hbmFnZXIgaW5zdGFuY2UKKyAgICAgICAgQHBhcmFtIGRlZmF1bHRfcHJvY19mdW46IERlZmF1bHQgcHJvY2Vzc2luZyBtZXRob2QuIFNlZSBiYXNlIGNsYXNzLgorICAgICAgICBAdHlwZSBkZWZhdWx0X3Byb2NfZnVuOiBpbnN0YW5jZSBvZiBQcm9jZXNzRXZlbnQKKyAgICAgICAgQHBhcmFtIHJlYWRfZnJlcTogaWYgcmVhZF9mcmVxID09IDAsIGV2ZW50cyBhcmUgcmVhZCBhc2FwLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZWFkX2ZyZXEgaXMgPiAwLCB0aGlzIHRocmVhZCBzbGVlcHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4KDAsIHJlYWRfZnJlcSAtIHRpbWVvdXQpIHNlY29uZHMuCisgICAgICAgIEB0eXBlIHJlYWRfZnJlcTogaW50CisgICAgICAgIEBwYXJhbSB0aHJlc2hvbGQ6IEZpbGUgZGVzY3JpcHRvciB3aWxsIGJlIHJlYWQgb25seSBpZiB0aGUgYWNjdW11bGF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSB0byByZWFkIGJlY29tZXMgPj0gdGhyZXNob2xkLiBJZiAhPSAwLCB5b3UgbGlrZWx5CisgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgdG8gdXNlIGl0IGluIGNvbWJpbmF0aW9uIHdpdGggYW4gYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgc2V0IGZvciByZWFkX2ZyZXEgYmVjYXVzZSB3aXRob3V0IHRoYXQgeW91IHdvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXAgbG9vcGluZyB3aXRob3V0IHJlYWxseSByZWFkaW5nIGFueXRoaW5nIGFuZCB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgIHVudGlsIHRoZSBhbW91bnQgb2YgZXZlbnRzIHRvIHJlYWQgaXMgPj0gdGhyZXNob2xkLiBBdAorICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFzdCB3aXRoIHJlYWRfZnJlcSB5b3UgbWlnaHQgc2xlZXAuCisgICAgICAgIEB0eXBlIHRocmVzaG9sZDogaW50CisgICAgICAgIEBwYXJhbSB0aW1lb3V0OgorICAgICAgICAgICAgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdC5odG1sI3BvbGxpbmctb2JqZWN0cworICAgICAgICBAdHlwZSB0aW1lb3V0OiBpbnQKKyAgICAgICAgIiIiCisgICAgICAgICMgSW5pdCB0aHJlYWRpbmcgYmFzZSBjbGFzcworICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgICMgU3RvcCBjb25kaXRpb24KKyAgICAgICAgc2VsZi5fc3RvcF9ldmVudCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgICMgSW5pdCBOb3RpZmllciBiYXNlIGNsYXNzCisgICAgICAgIE5vdGlmaWVyLl9faW5pdF9fKHNlbGYsIHdhdGNoX21hbmFnZXIsIGRlZmF1bHRfcHJvY19mdW4sIHJlYWRfZnJlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZXNob2xkLCB0aW1lb3V0KQorICAgICAgICAjIENyZWF0ZSBhIG5ldyBwaXBlIHVzZWQgZm9yIHRocmVhZCB0ZXJtaW5hdGlvbgorICAgICAgICBzZWxmLl9waXBlID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuX3BvbGxvYmoucmVnaXN0ZXIoc2VsZi5fcGlwZVswXSwgc2VsZWN0LlBPTExJTikKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3RvcCBub3RpZmllcidzIGxvb3AuIFN0b3Agbm90aWZpY2F0aW9uLiBKb2luIHRoZSB0aHJlYWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9zdG9wX2V2ZW50LnNldCgpCisgICAgICAgIG9zLndyaXRlKHNlbGYuX3BpcGVbMV0sICdzdG9wJykKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5qb2luKHNlbGYpCisgICAgICAgIE5vdGlmaWVyLnN0b3Aoc2VsZikKKyAgICAgICAgc2VsZi5fcG9sbG9iai51bnJlZ2lzdGVyKHNlbGYuX3BpcGVbMF0pCisgICAgICAgIG9zLmNsb3NlKHNlbGYuX3BpcGVbMF0pCisgICAgICAgIG9zLmNsb3NlKHNlbGYuX3BpcGVbMV0pCisKKyAgICBkZWYgbG9vcChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRocmVhZCdzIG1haW4gbG9vcC4gRG9uJ3QgbWVhbnQgdG8gYmUgY2FsbGVkIGJ5IHVzZXIgZGlyZWN0bHkuCisgICAgICAgIENhbGwgaW5oZXJpdGVkIHN0YXJ0KCkgbWV0aG9kIGluc3RlYWQuCisKKyAgICAgICAgRXZlbnRzIGFyZSByZWFkIG9ubHkgb25jZSB0aW1lIGV2ZXJ5IG1pbihyZWFkX2ZyZXEsIHRpbWVvdXQpCisgICAgICAgIHNlY29uZHMgYXQgYmVzdCBhbmQgb25seSBpZiB0aGUgc2l6ZSBvZiBldmVudHMgdG8gcmVhZCBpcyA+PSB0aHJlc2hvbGQuCisgICAgICAgICIiIgorICAgICAgICAjIFdoZW4gdGhlIGxvb3AgbXVzdCBiZSB0ZXJtaW5hdGVkIC5zdG9wKCkgaXMgY2FsbGVkLCAnc3RvcCcKKyAgICAgICAgIyBpcyB3cml0dGVuIHRvIHBpcGUgZmQgc28gcG9sbCgpIHJldHVybnMgYW5kIC5jaGVja19ldmVudHMoKQorICAgICAgICAjIHJldHVybnMgRmFsc2Ugd2hpY2ggbWFrZSBldmFsdWF0ZSB0aGUgV2hpbGUncyBzdG9wIGNvbmRpdGlvbgorICAgICAgICAjIC5fc3RvcF9ldmVudC5pc1NldCgpIHdpY2ggcHV0IGFuIGVuZCB0byB0aGUgdGhyZWFkJ3MgZXhlY3V0aW9uLgorICAgICAgICB3aGlsZSBub3Qgc2VsZi5fc3RvcF9ldmVudC5pc1NldCgpOgorICAgICAgICAgICAgc2VsZi5wcm9jZXNzX2V2ZW50cygpCisgICAgICAgICAgICByZWZfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBpZiBzZWxmLmNoZWNrX2V2ZW50cygpOgorICAgICAgICAgICAgICAgIHNlbGYuX3NsZWVwKHJlZl90aW1lKQorICAgICAgICAgICAgICAgIHNlbGYucmVhZF9ldmVudHMoKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN0YXJ0IHRocmVhZCdzIGxvb3A6IHJlYWQgYW5kIHByb2Nlc3MgZXZlbnRzIHVudGlsIHRoZSBtZXRob2QKKyAgICAgICAgc3RvcCgpIGlzIGNhbGxlZC4KKyAgICAgICAgTmV2ZXIgY2FsbCB0aGlzIG1ldGhvZCBkaXJlY3RseSwgaW5zdGVhZCBjYWxsIHRoZSBzdGFydCgpIG1ldGhvZAorICAgICAgICBpbmhlcml0ZWQgZnJvbSB0aHJlYWRpbmcuVGhyZWFkLCB3aGljaCB0aGVuIHdpbGwgY2FsbCBydW4oKSBpbgorICAgICAgICBpdHMgdHVybi4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYubG9vcCgpCisKKworY2xhc3MgQXN5bmNOb3RpZmllcihhc3luY29yZS5maWxlX2Rpc3BhdGNoZXIsIE5vdGlmaWVyKToKKyAgICAiIiIKKyAgICBUaGlzIG5vdGlmaWVyIGluaGVyaXRzIGZyb20gYXN5bmNvcmUuZmlsZV9kaXNwYXRjaGVyIGluIG9yZGVyIHRvIGJlIGFibGUgdG8KKyAgICB1c2UgcHlpbm90aWZ5IGFsb25nIHdpdGggdGhlIGFzeW5jb3JlIGZyYW1ld29yay4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3YXRjaF9tYW5hZ2VyLCBkZWZhdWx0X3Byb2NfZnVuPU5vbmUsIHJlYWRfZnJlcT0wLAorICAgICAgICAgICAgICAgICB0aHJlc2hvbGQ9MCwgdGltZW91dD1Ob25lLCBjaGFubmVsX21hcD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIEluaXRpYWxpemVzIHRoZSBhc3luYyBub3RpZmllci4gVGhlIG9ubHkgYWRkaXRpb25hbCBwYXJhbWV0ZXIgaXMKKyAgICAgICAgJ2NoYW5uZWxfbWFwJyB3aGljaCBpcyB0aGUgb3B0aW9uYWwgYXN5bmNvcmUgcHJpdmF0ZSBtYXAuIFNlZQorICAgICAgICBOb3RpZmllciBjbGFzcyBmb3IgdGhlIG1lYW5pbmcgb2YgdGhlIG90aGVycyBwYXJhbWV0ZXJzLgorCisgICAgICAgICIiIgorICAgICAgICBOb3RpZmllci5fX2luaXRfXyhzZWxmLCB3YXRjaF9tYW5hZ2VyLCBkZWZhdWx0X3Byb2NfZnVuLCByZWFkX2ZyZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCwgdGltZW91dCkKKyAgICAgICAgYXN5bmNvcmUuZmlsZV9kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYsIHNlbGYuX2ZkLCBjaGFubmVsX21hcCkKKworICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZW4gYXN5bmNvcmUgdGVsbHMgdXMgd2UgY2FuIHJlYWQgZnJvbSB0aGUgZmQsIHdlIHByb2NlZWQgcHJvY2Vzc2luZworICAgICAgICBldmVudHMuIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIGZvciBoYW5kbGluZyBhIG5vdGlmaWNhdGlvbgorICAgICAgICBkaWZmZXJlbnRseS4KKworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5yZWFkX2V2ZW50cygpCisgICAgICAgIHNlbGYucHJvY2Vzc19ldmVudHMoKQorCisKK2NsYXNzIFRvcm5hZG9Bc3luY05vdGlmaWVyKE5vdGlmaWVyKToKKyAgICAiIiIKKyAgICBUb3JuYWRvIGlvbG9vcCBhZGFwdGVyLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdhdGNoX21hbmFnZXIsIGlvbG9vcCwgY2FsbGJhY2s9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZGVmYXVsdF9wcm9jX2Z1bj1Ob25lLCByZWFkX2ZyZXE9MCwgdGhyZXNob2xkPTAsIHRpbWVvdXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgY2hhbm5lbF9tYXA9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBOb3RlIHRoYXQgaWYgbGF0ZXIgeW91IG11c3QgY2FsbCBpb2xvb3AuY2xvc2UoKSBiZSBzdXJlIHRvIGxldCB0aGUKKyAgICAgICAgZGVmYXVsdCBwYXJhbWV0ZXIgdG8gYWxsX2Zkcz1GYWxzZS4KKworICAgICAgICBTZWUgZXhhbXBsZSB0b3JuYWRvX25vdGlmaWVyLnB5IGZvciBhbiBleGFtcGxlIHVzaW5nIHRoaXMgbm90aWZpZXIuCisKKyAgICAgICAgQHBhcmFtIGlvbG9vcDogVG9ybmFkbydzIElPIGxvb3AuCisgICAgICAgIEB0eXBlIGlvbG9vcDogdG9ybmFkby5pb2xvb3AuSU9Mb29wIGluc3RhbmNlLgorICAgICAgICBAcGFyYW0gY2FsbGJhY2s6IEZ1bmN0b3IgY2FsbGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBjYWxsIHRvIGhhbmRsZV9yZWFkCisgICAgICAgICAgICAgICAgICAgICAgICAgKElPTG9vcCdzIHJlYWQgaGFuZGxlcikuIEV4cGVjdHMgdG8gcmVjZWl2ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllciBvYmplY3QgKHNlbGYpIGFzIHNpbmdsZSBwYXJhbWV0ZXIuCisgICAgICAgIEB0eXBlIGNhbGxiYWNrOiBjYWxsYWJsZSBvYmplY3Qgb3IgZnVuY3Rpb24KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuaW9fbG9vcCA9IGlvbG9vcAorICAgICAgICBzZWxmLmhhbmRsZV9yZWFkX2NhbGxiYWNrID0gY2FsbGJhY2sKKyAgICAgICAgTm90aWZpZXIuX19pbml0X18oc2VsZiwgd2F0Y2hfbWFuYWdlciwgZGVmYXVsdF9wcm9jX2Z1biwgcmVhZF9mcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQsIHRpbWVvdXQpCisgICAgICAgIGlvbG9vcC5hZGRfaGFuZGxlcihzZWxmLl9mZCwgc2VsZi5oYW5kbGVfcmVhZCwgaW9sb29wLlJFQUQpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5pb19sb29wLnJlbW92ZV9oYW5kbGVyKHNlbGYuX2ZkKQorICAgICAgICBOb3RpZmllci5zdG9wKHNlbGYpCisKKyAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiCisgICAgICAgIFNlZSBjb21tZW50IGluIEFzeW5jTm90aWZpZXIuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucmVhZF9ldmVudHMoKQorICAgICAgICBzZWxmLnByb2Nlc3NfZXZlbnRzKCkKKyAgICAgICAgaWYgc2VsZi5oYW5kbGVfcmVhZF9jYWxsYmFjayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlX3JlYWRfY2FsbGJhY2soc2VsZikKKworCitjbGFzcyBBc3luY2lvTm90aWZpZXIoTm90aWZpZXIpOgorICAgICIiIgorCisgICAgYXN5bmNpby90cm9sbGl1cyBldmVudCBsb29wIGFkYXB0ZXIuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2F0Y2hfbWFuYWdlciwgbG9vcCwgY2FsbGJhY2s9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZGVmYXVsdF9wcm9jX2Z1bj1Ob25lLCByZWFkX2ZyZXE9MCwgdGhyZXNob2xkPTAsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICIiIgorCisgICAgICAgIFNlZSBleGFtcGxlcy9hc3luY2lvX25vdGlmaWVyLnB5IGZvciBhbiBleGFtcGxlIHVzYWdlLgorCisgICAgICAgIEBwYXJhbSBsb29wOiBhc3luY2lvIG9yIHRyb2xsaXVzIGV2ZW50IGxvb3AgaW5zdGFuY2UuCisgICAgICAgIEB0eXBlIGxvb3A6IGFzeW5jaW8uQmFzZUV2ZW50TG9vcCBvciB0cm9sbGl1cy5CYXNlRXZlbnRMb29wIGluc3RhbmNlLgorICAgICAgICBAcGFyYW0gY2FsbGJhY2s6IEZ1bmN0b3IgY2FsbGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBjYWxsIHRvIGhhbmRsZV9yZWFkLgorICAgICAgICAgICAgICAgICAgICAgICAgIEV4cGVjdHMgdG8gcmVjZWl2ZSB0aGUgbm90aWZpZXIgb2JqZWN0IChzZWxmKSBhcworICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZSBwYXJhbWV0ZXIuCisgICAgICAgIEB0eXBlIGNhbGxiYWNrOiBjYWxsYWJsZSBvYmplY3Qgb3IgZnVuY3Rpb24KKworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5sb29wID0gbG9vcAorICAgICAgICBzZWxmLmhhbmRsZV9yZWFkX2NhbGxiYWNrID0gY2FsbGJhY2sKKyAgICAgICAgTm90aWZpZXIuX19pbml0X18oc2VsZiwgd2F0Y2hfbWFuYWdlciwgZGVmYXVsdF9wcm9jX2Z1biwgcmVhZF9mcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQsIHRpbWVvdXQpCisgICAgICAgIGxvb3AuYWRkX3JlYWRlcihzZWxmLl9mZCwgc2VsZi5oYW5kbGVfcmVhZCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9mZCkKKyAgICAgICAgTm90aWZpZXIuc3RvcChzZWxmKQorCisgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYucmVhZF9ldmVudHMoKQorICAgICAgICBzZWxmLnByb2Nlc3NfZXZlbnRzKCkKKyAgICAgICAgaWYgc2VsZi5oYW5kbGVfcmVhZF9jYWxsYmFjayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlX3JlYWRfY2FsbGJhY2soc2VsZikKKworCitjbGFzcyBXYXRjaDoKKyAgICAiIiIKKyAgICBSZXByZXNlbnQgYSB3YXRjaCwgaS5lLiBhIGZpbGUgb3IgZGlyZWN0b3J5IGJlaW5nIHdhdGNoZWQuCisKKyAgICAiIiIKKyAgICBfX3Nsb3RzX18gPSAoJ3dkJywgJ3BhdGgnLCAnbWFzaycsICdwcm9jX2Z1bicsICdhdXRvX2FkZCcsCisgICAgICAgICAgICAgICAgICdleGNsdWRlX2ZpbHRlcicsICdkaXInKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdkLCBwYXRoLCBtYXNrLCBwcm9jX2Z1biwgYXV0b19hZGQsIGV4Y2x1ZGVfZmlsdGVyKToKKyAgICAgICAgIiIiCisgICAgICAgIEluaXRpYWxpemF0aW9ucy4KKworICAgICAgICBAcGFyYW0gd2Q6IFdhdGNoIGRlc2NyaXB0b3IuCisgICAgICAgIEB0eXBlIHdkOiBpbnQKKyAgICAgICAgQHBhcmFtIHBhdGg6IFBhdGggb2YgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGJlaW5nIHdhdGNoZWQuCisgICAgICAgIEB0eXBlIHBhdGg6IHN0cgorICAgICAgICBAcGFyYW0gbWFzazogTWFzay4KKyAgICAgICAgQHR5cGUgbWFzazogaW50CisgICAgICAgIEBwYXJhbSBwcm9jX2Z1bjogUHJvY2Vzc2luZyBjYWxsYWJsZSBvYmplY3QuCisgICAgICAgIEB0eXBlIHByb2NfZnVuOgorICAgICAgICBAcGFyYW0gYXV0b19hZGQ6IEF1dG9tYXRpY2FsbHkgYWRkIHdhdGNoZXMgb24gbmV3IGRpcmVjdG9yaWVzLgorICAgICAgICBAdHlwZSBhdXRvX2FkZDogYm9vbAorICAgICAgICBAcGFyYW0gZXhjbHVkZV9maWx0ZXI6IEJvb2xlYW4gZnVuY3Rpb24sIHVzZWQgdG8gZXhjbHVkZSBuZXcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyBmcm9tIGJlaW5nIGF1dG9tYXRpY2FsbHkgd2F0Y2hlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgV2F0Y2hNYW5hZ2VyLl9faW5pdF9fCisgICAgICAgIEB0eXBlIGV4Y2x1ZGVfZmlsdGVyOiBjYWxsYWJsZSBvYmplY3QKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYud2QgPSB3ZAorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisgICAgICAgIHNlbGYubWFzayA9IG1hc2sKKyAgICAgICAgc2VsZi5wcm9jX2Z1biA9IHByb2NfZnVuCisgICAgICAgIHNlbGYuYXV0b19hZGQgPSBhdXRvX2FkZAorICAgICAgICBzZWxmLmV4Y2x1ZGVfZmlsdGVyID0gZXhjbHVkZV9maWx0ZXIKKyAgICAgICAgc2VsZi5kaXIgPSBvcy5wYXRoLmlzZGlyKHNlbGYucGF0aCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEByZXR1cm46IFN0cmluZyByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgQHJ0eXBlOiBzdHIKKyAgICAgICAgIiIiCisgICAgICAgIHMgPSAnICcuam9pbihbJyVzJXMlcycgJSAob3V0cHV0X2Zvcm1hdC5maWVsZF9uYW1lKGF0dHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQucHVuY3R1YXRpb24oJz0nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0LmZpZWxkX3ZhbHVlKGdldGF0dHIoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cikpKSBcCisgICAgICAgICAgICAgICAgICAgICAgZm9yIGF0dHIgaW4gc2VsZi5fX3Nsb3RzX18gaWYgbm90IGF0dHIuc3RhcnRzd2l0aCgnXycpXSkKKworICAgICAgICBzID0gJyVzJXMgJXMgJXMnICUgKG91dHB1dF9mb3JtYXQucHVuY3R1YXRpb24oJzwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0LmNsYXNzX25hbWUoc2VsZi5fX2NsYXNzX18uX19uYW1lX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdC5wdW5jdHVhdGlvbignPicpKQorICAgICAgICByZXR1cm4gcworCisKK2NsYXNzIEV4Y2x1ZGVGaWx0ZXI6CisgICAgIiIiCisgICAgRXhjbHVkZUZpbHRlciBpcyBhbiBleGNsdXNpb24gZmlsdGVyLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ19sc3QpOgorICAgICAgICAiIiIKKyAgICAgICAgRXhhbXBsZXM6CisgICAgICAgICAgZWYxID0gRXhjbHVkZUZpbHRlcihbIi9ldGMvcmMuKiIsICIvZXRjL2hvc3RuYW1lIl0pCisgICAgICAgICAgZWYyID0gRXhjbHVkZUZpbHRlcigiL215L3BhdGgvZXhjbHVkZS5sc3QiKQorICAgICAgICAgIFdoZXJlIGV4Y2x1ZGUubHN0IGNvbnRhaW5zOgorICAgICAgICAgIC9ldGMvcmMuKgorICAgICAgICAgIC9ldGMvaG9zdG5hbWUKKworICAgICAgICBOb3RlOiBpdCBpcyBub3QgcG9zc2libGUgdG8gZXhjbHVkZSBhIGZpbGUgaWYgaXRzIGVuY2Fwc3VsYXRpbmcKKyAgICAgICAgICAgICAgZGlyZWN0b3J5IGlzIGl0c2VsZiB3YXRjaGVkLiBTZWUgdGhpcyBpc3N1ZSBmb3IgbW9yZSBkZXRhaWxzCisgICAgICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWItbS9weWlub3RpZnkvaXNzdWVzLzMxCisKKyAgICAgICAgQHBhcmFtIGFyZ19sc3Q6IGlzIGVpdGhlciBhIGxpc3Qgb2YgcGF0dGVybnMgb3IgYSBmaWxlbmFtZSBmcm9tIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJucyB3aWxsIGJlIGxvYWRlZC4KKyAgICAgICAgQHR5cGUgYXJnX2xzdDogbGlzdCBvZiBzdHIgb3Igc3RyCisgICAgICAgICIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKGFyZ19sc3QsIHN0cik6CisgICAgICAgICAgICBsc3QgPSBzZWxmLl9sb2FkX3BhdHRlcm5zX2Zyb21fZmlsZShhcmdfbHN0KQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoYXJnX2xzdCwgbGlzdCk6CisgICAgICAgICAgICBsc3QgPSBhcmdfbHN0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKKworICAgICAgICBzZWxmLl9scmVnZXggPSBbXQorICAgICAgICBmb3IgcmVnZXggaW4gbHN0OgorICAgICAgICAgICAgc2VsZi5fbHJlZ2V4LmFwcGVuZChyZS5jb21waWxlKHJlZ2V4LCByZS5VTklDT0RFKSkKKworICAgIGRlZiBfbG9hZF9wYXR0ZXJuc19mcm9tX2ZpbGUoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICBsc3QgPSBbXQorICAgICAgICBmaWxlX29iaiA9IGZpbGUoZmlsZW5hbWUsICdyJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmlsZV9vYmoucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgIyBUcmltIGxlYWRpbmcgYW4gdHJhaWxpbmcgd2hpdGVzcGFjZXMKKyAgICAgICAgICAgICAgICBwYXR0ZXJuID0gbGluZS5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgbm90IHBhdHRlcm4gb3IgcGF0dGVybi5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbHN0LmFwcGVuZChwYXR0ZXJuKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZV9vYmouY2xvc2UoKQorICAgICAgICByZXR1cm4gbHN0CisKKyAgICBkZWYgX21hdGNoKHNlbGYsIHJlZ2V4LCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHJlZ2V4Lm1hdGNoKHBhdGgpIGlzIG5vdCBOb25lCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgcGF0aCk6CisgICAgICAgICIiIgorICAgICAgICBAcGFyYW0gcGF0aDogUGF0aCB0byBtYXRjaCBhZ2FpbnN0IHByb3ZpZGVkIHJlZ2V4cHMuCisgICAgICAgIEB0eXBlIHBhdGg6IHN0cgorICAgICAgICBAcmV0dXJuOiBSZXR1cm4gVHJ1ZSBpZiBwYXRoIGhhcyBiZWVuIG1hdGNoZWQgYW5kIHNob3VsZAorICAgICAgICAgICAgICAgICBiZSBleGNsdWRlZCwgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICBAcnR5cGU6IGJvb2wKKyAgICAgICAgIiIiCisgICAgICAgIGZvciByZWdleCBpbiBzZWxmLl9scmVnZXg6CisgICAgICAgICAgICBpZiBzZWxmLl9tYXRjaChyZWdleCwgcGF0aCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgV2F0Y2hNYW5hZ2VyRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiIKKyAgICBXYXRjaE1hbmFnZXIgRXhjZXB0aW9uLiBSYWlzZWQgb24gZXJyb3IgZW5jb3VudGVyZWQgb24gd2F0Y2hlcworICAgIG9wZXJhdGlvbnMuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnLCB3bWQpOgorICAgICAgICAiIiIKKyAgICAgICAgQHBhcmFtIG1zZzogRXhjZXB0aW9uIHN0cmluZydzIGRlc2NyaXB0aW9uLgorICAgICAgICBAdHlwZSBtc2c6IHN0cmluZworICAgICAgICBAcGFyYW0gd21kOiBUaGlzIGRpY3Rpb25hcnkgY29udGFpbnMgdGhlIHdkIGFzc2lnbmVkIHRvIHBhdGhzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBzYW1lIGNhbGwgZm9yIHdoaWNoIHdhdGNoZXMgd2VyZSBzdWNjZXNzZnVsbHkgYWRkZWQuCisgICAgICAgIEB0eXBlIHdtZDogZGljdAorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi53bWQgPSB3bWQKKyAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1zZykKKworCitjbGFzcyBXYXRjaE1hbmFnZXI6CisgICAgIiIiCisgICAgUHJvdmlkZSBvcGVyYXRpb25zIGZvciB3YXRjaGluZyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuIEl0cyBpbnRlcm5hbAorICAgIGRpY3Rpb25hcnkgaXMgdXNlZCB0byByZWZlcmVuY2Ugd2F0Y2hlZCBpdGVtcy4gV2hlbiB1c2VkIGluc2lkZQorICAgIHRocmVhZGVkIGNvZGUsIG9uZSBtdXN0IGluc3RhbmNpYXRlIGFzIG1hbnkgV2F0Y2hNYW5hZ2VyIGluc3RhbmNlcyBhcworICAgIHRoZXJlIGFyZSBUaHJlYWRlZE5vdGlmaWVyIGluc3RhbmNlcy4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGNsdWRlX2ZpbHRlcj1sYW1iZGEgcGF0aDogRmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5pdGlhbGl6YXRpb246IGluaXQgaW5vdGlmeSwgaW5pdCB3YXRjaCBtYW5hZ2VyIGRpY3Rpb25hcnkuCisgICAgICAgIFJhaXNlIE9TRXJyb3IgaWYgaW5pdGlhbGl6YXRpb24gZmFpbHMsIHJhaXNlIElub3RpZnlCaW5kaW5nTm90Rm91bmRFcnJvcgorICAgICAgICBpZiBubyBpbm90aWZ5IGJpbmRpbmcgd2FzIGZvdW5kICh0aHJvdWdoIGN0eXBlcyBvciBmcm9tIGRpcmVjdCBhY2Nlc3MgdG8KKyAgICAgICAgc3lzY2FsbHMpLgorCisgICAgICAgIEBwYXJhbSBleGNsdWRlX2ZpbHRlcjogYm9vbGVhbiBmdW5jdGlvbiwgcmV0dXJucyBUcnVlIGlmIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoIG11c3QgYmUgZXhjbHVkZWQgZnJvbSBiZWluZyB3YXRjaGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlbmllbnQgZm9yIHByb3ZpZGluZyBhIGNvbW1vbiBleGNsdXNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgZm9yIGV2ZXJ5IGNhbGwgdG8gYWRkX3dhdGNoLgorICAgICAgICBAdHlwZSBleGNsdWRlX2ZpbHRlcjogY2FsbGFibGUgb2JqZWN0CisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9pZ25vcmVfZXZlbnRzID0gRmFsc2UKKyAgICAgICAgc2VsZi5fZXhjbHVkZV9maWx0ZXIgPSBleGNsdWRlX2ZpbHRlcgorICAgICAgICBzZWxmLl93bWQgPSB7fSAgIyB3YXRjaCBkaWN0IGtleTogd2F0Y2ggZGVzY3JpcHRvciwgdmFsdWU6IHdhdGNoCisKKyAgICAgICAgc2VsZi5faW5vdGlmeV93cmFwcGVyID0gSU5vdGlmeVdyYXBwZXIuY3JlYXRlKCkKKyAgICAgICAgaWYgc2VsZi5faW5vdGlmeV93cmFwcGVyIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBJbm90aWZ5QmluZGluZ05vdEZvdW5kRXJyb3IoKQorCisgICAgICAgIHNlbGYuX2ZkID0gc2VsZi5faW5vdGlmeV93cmFwcGVyLmlub3RpZnlfaW5pdCgpICMgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgIGlmIHNlbGYuX2ZkIDwgMDoKKyAgICAgICAgICAgIGVyciA9ICdDYW5ub3QgaW5pdGlhbGl6ZSBuZXcgaW5zdGFuY2Ugb2YgaW5vdGlmeSwgJXMnCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVyciAlIHNlbGYuX2lub3RpZnlfd3JhcHBlci5zdHJfZXJybm8oKSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENsb3NlIGlub3RpZnkncyBmaWxlIGRlc2NyaXB0b3IsIHRoaXMgYWN0aW9uIHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5CisgICAgICAgIHJlbW92ZSAoaS5lLiBzdG9wIHdhdGNoaW5nKSBhbGwgaXRzIGFzc29jaWF0ZWQgd2F0Y2ggZGVzY3JpcHRvcnMuCisgICAgICAgIEFmdGVyIGEgY2FsbCB0byB0aGlzIG1ldGhvZCB0aGUgV2F0Y2hNYW5hZ2VyJ3MgaW5zdGFuY2UgYmVjb21lIHVzZWxlc3MKKyAgICAgICAgYW5kIGNhbm5vdCBiZSByZXVzZWQsIGEgbmV3IGluc3RhbmNlIG11c3QgdGhlbiBiZSBpbnN0YW5jaWF0ZWQuIEl0CisgICAgICAgIG1ha2VzIHNlbnNlIHRvIGNhbGwgdGhpcyBtZXRob2QgaW4gZmV3IHNpdHVhdGlvbnMgZm9yIGluc3RhbmNlIGlmCisgICAgICAgIHNldmVyYWwgaW5kZXBlbmRhbnQgV2F0Y2hNYW5hZ2VyIG11c3QgYmUgaW5zdGFuY2lhdGVkIG9yIGlmIGFsbCB3YXRjaGVzCisgICAgICAgIG11c3QgYmUgcmVtb3ZlZCBhbmQgbm8gb3RoZXIgd2F0Y2hlcyBuZWVkIHRvIGJlIGFkZGVkLgorICAgICAgICAiIiIKKyAgICAgICAgb3MuY2xvc2Uoc2VsZi5fZmQpCisKKyAgICBkZWYgZ2V0X2ZkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGFzc2lnbmVkIGlub3RpZnkncyBmaWxlIGRlc2NyaXB0b3IuCisKKyAgICAgICAgQHJldHVybjogRmlsZSBkZXNjcmlwdG9yLgorICAgICAgICBAcnR5cGU6IGludAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZkCisKKyAgICBkZWYgZ2V0X3dhdGNoKHNlbGYsIHdkKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCB3YXRjaCBmcm9tIHByb3ZpZGVkIHdhdGNoIGRlc2NyaXB0b3Igd2QuCisKKyAgICAgICAgQHBhcmFtIHdkOiBXYXRjaCBkZXNjcmlwdG9yLgorICAgICAgICBAdHlwZSB3ZDogaW50CisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fd21kLmdldCh3ZCkKKworICAgIGRlZiBkZWxfd2F0Y2goc2VsZiwgd2QpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVtb3ZlIHdhdGNoIGVudHJ5IGFzc29jaWF0ZWQgdG8gd2F0Y2ggZGVzY3JpcHRvciB3ZC4KKworICAgICAgICBAcGFyYW0gd2Q6IFdhdGNoIGRlc2NyaXB0b3IuCisgICAgICAgIEB0eXBlIHdkOiBpbnQKKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLl93bWRbd2RdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvciwgZXJyOgorICAgICAgICAgICAgbG9nLmVycm9yKCdDYW5ub3QgZGVsZXRlIHVua25vd24gd2F0Y2ggZGVzY3JpcHRvciAlcycgJSBzdHIoZXJyKSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB3YXRjaGVzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0IGEgcmVmZXJlbmNlIG9uIHRoZSBpbnRlcm5hbCB3YXRjaCBtYW5hZ2VyIGRpY3Rpb25hcnkuCisKKyAgICAgICAgQHJldHVybjogSW50ZXJuYWwgd2F0Y2ggbWFuYWdlciBkaWN0aW9uYXJ5LgorICAgICAgICBAcnR5cGU6IGRpY3QKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl93bWQKKworICAgIGRlZiBfX2Zvcm1hdF9wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiIKKyAgICAgICAgRm9ybWF0IHBhdGggdG8gaXRzIGludGVybmFsIChzdG9yZWQgaW4gd2F0Y2ggbWFuYWdlcikgcmVwcmVzZW50YXRpb24uCisgICAgICAgICIiIgorICAgICAgICAjIFVuaWNvZGUgc3RyaW5ncyBhcmUgY29udmVydGVkIGJhY2sgdG8gc3RyaW5ncywgYmVjYXVzZSBpdCBzZWVtcworICAgICAgICAjIHRoYXQgaW5vdGlmeV9hZGRfd2F0Y2ggZnJvbSBjdHlwZXMgZG9lcyBub3Qgd29yayB3ZWxsIHdoZW4KKyAgICAgICAgIyBpdCByZWNlaXZlcyBhbiBjdHlwZXMuY3JlYXRlX3VuaWNvZGVfYnVmZmVyIGluc3RhbmNlIGFzIGFyZ3VtZW50LgorICAgICAgICAjIFRoZXJlZm9yZSBldmVuIHdkIGFyZSBpbmRleGVkIHdpdGggYnl0ZXMgc3RyaW5nIGFuZCBub3Qgd2l0aAorICAgICAgICAjIHVuaWNvZGUgcGF0aHMuCisgICAgICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgdW5pY29kZSk6CisgICAgICAgICAgICBwYXRoID0gcGF0aC5lbmNvZGUoc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpKQorICAgICAgICByZXR1cm4gb3MucGF0aC5ub3JtcGF0aChwYXRoKQorCisgICAgZGVmIF9fYWRkX3dhdGNoKHNlbGYsIHBhdGgsIG1hc2ssIHByb2NfZnVuLCBhdXRvX2FkZCwgZXhjbHVkZV9maWx0ZXIpOgorICAgICAgICAiIiIKKyAgICAgICAgQWRkIGEgd2F0Y2ggb24gcGF0aCwgYnVpbGQgYSBXYXRjaCBvYmplY3QgYW5kIGluc2VydCBpdCBpbiB0aGUKKyAgICAgICAgd2F0Y2ggbWFuYWdlciBkaWN0aW9uYXJ5LiBSZXR1cm4gdGhlIHdkIHZhbHVlLgorICAgICAgICAiIiIKKyAgICAgICAgcGF0aCA9IHNlbGYuX19mb3JtYXRfcGF0aChwYXRoKQorICAgICAgICBpZiBhdXRvX2FkZCBhbmQgbm90IG1hc2sgJiBJTl9DUkVBVEU6CisgICAgICAgICAgICBtYXNrIHw9IElOX0NSRUFURQorICAgICAgICB3ZCA9IHNlbGYuX2lub3RpZnlfd3JhcHBlci5pbm90aWZ5X2FkZF93YXRjaChzZWxmLl9mZCwgcGF0aCwgbWFzaykKKyAgICAgICAgaWYgd2QgPCAwOgorICAgICAgICAgICAgcmV0dXJuIHdkCisgICAgICAgIHdhdGNoID0gV2F0Y2god2Q9d2QsIHBhdGg9cGF0aCwgbWFzaz1tYXNrLCBwcm9jX2Z1bj1wcm9jX2Z1biwKKyAgICAgICAgICAgICAgICAgICAgICBhdXRvX2FkZD1hdXRvX2FkZCwgZXhjbHVkZV9maWx0ZXI9ZXhjbHVkZV9maWx0ZXIpCisgICAgICAgIHNlbGYuX3dtZFt3ZF0gPSB3YXRjaAorICAgICAgICBsb2cuZGVidWcoJ05ldyAlcycsIHdhdGNoKQorICAgICAgICByZXR1cm4gd2QKKworICAgIGRlZiBfX2dsb2Ioc2VsZiwgcGF0aCwgZG9fZ2xvYik6CisgICAgICAgIGlmIGRvX2dsb2I6CisgICAgICAgICAgICByZXR1cm4gZ2xvYihwYXRoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFtwYXRoXQorCisgICAgZGVmIGFkZF93YXRjaChzZWxmLCBwYXRoLCBtYXNrLCBwcm9jX2Z1bj1Ob25lLCByZWM9RmFsc2UsCisgICAgICAgICAgICAgICAgICBhdXRvX2FkZD1GYWxzZSwgZG9fZ2xvYj1GYWxzZSwgcXVpZXQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVfZmlsdGVyPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgQWRkIHdhdGNoKHMpIG9uIHRoZSBwcm92aWRlZCB8cGF0aHwocykgd2l0aCBhc3NvY2lhdGVkIHxtYXNrfCBmbGFnCisgICAgICAgIHZhbHVlIGFuZCBvcHRpb25hbGx5IHdpdGggYSBwcm9jZXNzaW5nIHxwcm9jX2Z1bnwgZnVuY3Rpb24gYW5kCisgICAgICAgIHJlY3Vyc2l2ZSBmbGFnIHxyZWN8IHNldCB0byBUcnVlLgorICAgICAgICBJZGVhbGx5IHxwYXRofCBjb21wb25lbnRzIHNob3VsZCBub3QgYmUgdW5pY29kZSBvYmplY3RzLiBOb3RlIHRoYXQKKyAgICAgICAgYWx0aG91Z2ggdW5pY29kZSBwYXRocyBhcmUgYWNjZXB0ZWQgdGhlcmUgYXJlIGNvbnZlcnRlZCB0byBieXRlCisgICAgICAgIHN0cmluZ3MgYmVmb3JlIGEgd2F0Y2ggaXMgcHV0IG9uIHRoYXQgcGF0aC4gVGhlIGVuY29kaW5nIHVzZWQgZm9yCisgICAgICAgIGNvbnZlcnRpbmcgdGhlIHVuaWNvZGUgb2JqZWN0IGlzIGdpdmVuIGJ5IHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKS4KKyAgICAgICAgSWYgfHBhdGh8IHNpIGFscmVhZHkgd2F0Y2hlZCBpdCBpcyBpZ25vcmVkLCBidXQgaWYgaXQgaXMgY2FsbGVkIHdpdGgKKyAgICAgICAgb3B0aW9uIHJlYz1UcnVlIGEgd2F0Y2ggaXMgcHV0IG9uIGVhY2ggb25lIG9mIGl0cyBub3Qtd2F0Y2hlZAorICAgICAgICBzdWJkaXJlY3RvcnkuCisKKyAgICAgICAgQHBhcmFtIHBhdGg6IFBhdGggdG8gd2F0Y2gsIHRoZSBwYXRoIGNhbiBlaXRoZXIgYmUgYSBmaWxlIG9yIGEKKyAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4gQWxzbyBhY2NlcHRzIGEgc2VxdWVuY2UgKGxpc3QpIG9mIHBhdGhzLgorICAgICAgICBAdHlwZSBwYXRoOiBzdHJpbmcgb3IgbGlzdCBvZiBzdHJpbmdzCisgICAgICAgIEBwYXJhbSBtYXNrOiBCaXRtYXNrIG9mIGV2ZW50cy4KKyAgICAgICAgQHR5cGUgbWFzazogaW50CisgICAgICAgIEBwYXJhbSBwcm9jX2Z1bjogUHJvY2Vzc2luZyBvYmplY3QuCisgICAgICAgIEB0eXBlIHByb2NfZnVuOiBmdW5jdGlvbiBvciBQcm9jZXNzRXZlbnQgaW5zdGFuY2Ugb3IgaW5zdGFuY2Ugb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uZSBvZiBpdHMgc3ViY2xhc3NlcyBvciBjYWxsYWJsZSBvYmplY3QuCisgICAgICAgIEBwYXJhbSByZWM6IFJlY3Vyc2l2ZWx5IGFkZCB3YXRjaGVzIGZyb20gcGF0aCBvbiBhbGwgaXRzCisgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzLCBzZXQgdG8gRmFsc2UgYnkgZGVmYXVsdCAoZG9lc24ndAorICAgICAgICAgICAgICAgICAgICBmb2xsb3dzIHN5bWxpbmtzIGluIGFueSBjYXNlKS4KKyAgICAgICAgQHR5cGUgcmVjOiBib29sCisgICAgICAgIEBwYXJhbSBhdXRvX2FkZDogQXV0b21hdGljYWxseSBhZGQgd2F0Y2hlcyBvbiBuZXdseSBjcmVhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgaW4gd2F0Y2hlZCBwYXJlbnQgfHBhdGh8IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICBJZiB8YXV0b19hZGR8IGlzIFRydWUsIElOX0NSRUFURSBpcyBvcmVkIHdpdGggfG1hc2t8CisgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgd2F0Y2ggaXMgYWRkZWQuCisgICAgICAgIEB0eXBlIGF1dG9fYWRkOiBib29sCisgICAgICAgIEBwYXJhbSBkb19nbG9iOiBEbyBnbG9iYmluZyBvbiBwYXRobmFtZSAoc2VlIHN0YW5kYXJkIGdsb2JiaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb25zKS4KKyAgICAgICAgQHR5cGUgZG9fZ2xvYjogYm9vbAorICAgICAgICBAcGFyYW0gcXVpZXQ6IGlmIEZhbHNlIHJhaXNlcyBhIFdhdGNoTWFuYWdlckVycm9yIGV4Y2VwdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICAgIGVycm9yLiBTZWUgZXhhbXBsZSBub3RfcXVpZXQucHkuCisgICAgICAgIEB0eXBlIHF1aWV0OiBib29sCisgICAgICAgIEBwYXJhbSBleGNsdWRlX2ZpbHRlcjogcHJlZGljYXRlIChib29sZWFuIGZ1bmN0aW9uKSwgd2hpY2ggcmV0dXJucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUgaWYgdGhlIGN1cnJlbnQgcGF0aCBtdXN0IGJlIGV4Y2x1ZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBiZWluZyB3YXRjaGVkLiBUaGlzIGFyZ3VtZW50IGhhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGVuY2Ugb3ZlciBleGNsdWRlX2ZpbHRlciBwYXNzZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY2xhc3MnIGNvbnN0cnVjdG9yLgorICAgICAgICBAdHlwZSBleGNsdWRlX2ZpbHRlcjogY2FsbGFibGUgb2JqZWN0CisgICAgICAgIEByZXR1cm46IGRpY3Qgb2YgcGF0aHMgYXNzb2NpYXRlZCB0byB3YXRjaCBkZXNjcmlwdG9ycy4gQSB3ZCB2YWx1ZQorICAgICAgICAgICAgICAgICBpcyBwb3NpdGl2ZSBpZiB0aGUgd2F0Y2ggd2FzIGFkZGVkIHN1Y2Vzc2Z1bGx5LAorICAgICAgICAgICAgICAgICBvdGhlcndpc2UgdGhlIHZhbHVlIGlzIG5lZ2F0aXZlLiBJZiB0aGUgcGF0aCB3YXMgaW52YWxpZAorICAgICAgICAgICAgICAgICBvciB3YXMgYWxyZWFkeSB3YXRjaGVkIGl0IGlzIG5vdCBpbmNsdWRlZCBpbnRvIHRoaXMgcmV0dXJuZWQKKyAgICAgICAgICAgICAgICAgZGljdGlvbmFyeS4KKyAgICAgICAgQHJ0eXBlOiBkaWN0IG9mIHtzdHI6IGludH0KKyAgICAgICAgIiIiCisgICAgICAgIHJldF8gPSB7fSAjIHJldHVybiB7cGF0aDogd2QsIC4uLn0KKworICAgICAgICBpZiBleGNsdWRlX2ZpbHRlciBpcyBOb25lOgorICAgICAgICAgICAgZXhjbHVkZV9maWx0ZXIgPSBzZWxmLl9leGNsdWRlX2ZpbHRlcgorCisgICAgICAgICMgbm9ybWFsaXplIGFyZ3MgYXMgbGlzdCBlbGVtZW50cworICAgICAgICBmb3IgbnBhdGggaW4gc2VsZi5fX2Zvcm1hdF9wYXJhbShwYXRoKToKKyAgICAgICAgICAgICMgdW5peCBwYXRobmFtZSBwYXR0ZXJuIGV4cGFuc2lvbgorICAgICAgICAgICAgZm9yIGFwYXRoIGluIHNlbGYuX19nbG9iKG5wYXRoLCBkb19nbG9iKToKKyAgICAgICAgICAgICAgICAjIHJlY3Vyc2l2ZWx5IGxpc3Qgc3ViZGlycyBhY2NvcmRpbmcgdG8gcmVjIHBhcmFtCisgICAgICAgICAgICAgICAgZm9yIHJwYXRoIGluIHNlbGYuX193YWxrX3JlYyhhcGF0aCwgcmVjKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGV4Y2x1ZGVfZmlsdGVyKHJwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkID0gcmV0X1tycGF0aF0gPSBzZWxmLl9fYWRkX3dhdGNoKHJwYXRoLCBtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY19mdW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvX2FkZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVfZmlsdGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgd2QgPCAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9ICgnYWRkX3dhdGNoOiBjYW5ub3Qgd2F0Y2ggJXMgV0Q9JWQsICVzJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChycGF0aCwgd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5vdGlmeV93cmFwcGVyLnN0cl9lcnJubygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBxdWlldDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKGVycikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBXYXRjaE1hbmFnZXJFcnJvcihlcnIsIHJldF8pCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjIExldCdzIHNheSAtMiBtZWFucyAnZXhwbGljaXRlbHkgZXhjbHVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZnJvbSB3YXRjaGluZycuCisgICAgICAgICAgICAgICAgICAgICAgICByZXRfW3JwYXRoXSA9IC0yCisgICAgICAgIHJldHVybiByZXRfCisKKyAgICBkZWYgX19nZXRfc3ViX3JlYyhzZWxmLCBscGF0aCk6CisgICAgICAgICIiIgorICAgICAgICBHZXQgZXZlcnkgd2QgZnJvbSBzZWxmLl93bWQgaWYgaXRzIHBhdGggaXMgdW5kZXIgdGhlIHBhdGggb2YKKyAgICAgICAgb25lIChhdCBsZWFzdCkgb2YgdGhvc2UgaW4gbHBhdGguIERvZXNuJ3QgZm9sbG93IHN5bWxpbmtzLgorCisgICAgICAgIEBwYXJhbSBscGF0aDogbGlzdCBvZiB3YXRjaCBkZXNjcmlwdG9yCisgICAgICAgIEB0eXBlIGxwYXRoOiBsaXN0IG9mIGludAorICAgICAgICBAcmV0dXJuOiBsaXN0IG9mIHdhdGNoIGRlc2NyaXB0b3IKKyAgICAgICAgQHJ0eXBlOiBsaXN0IG9mIGludAorICAgICAgICAiIiIKKyAgICAgICAgZm9yIGQgaW4gbHBhdGg6CisgICAgICAgICAgICByb290ID0gc2VsZi5nZXRfcGF0aChkKQorICAgICAgICAgICAgaWYgcm9vdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIGFsd2F5cyBrZWVwIHJvb3QKKyAgICAgICAgICAgICAgICB5aWVsZCBkCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgaWYgaW52YWxpZAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgbm90aGluZyBlbHNlIHRvIGV4cGVjdAorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIocm9vdCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBub3JtYWxpemF0aW9uCisgICAgICAgICAgICByb290ID0gb3MucGF0aC5ub3JtcGF0aChyb290KQorICAgICAgICAgICAgIyByZWN1cnNpb24KKyAgICAgICAgICAgIGxlbmQgPSBsZW4ocm9vdCkKKyAgICAgICAgICAgIGZvciBpd2QgaW4gc2VsZi5fd21kLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgY3VyID0gaXdkWzFdLnBhdGgKKyAgICAgICAgICAgICAgICBwcmVmID0gb3MucGF0aC5jb21tb25wcmVmaXgoW3Jvb3QsIGN1cl0pCisgICAgICAgICAgICAgICAgaWYgcm9vdCA9PSBvcy5zZXAgb3IgKGxlbihwcmVmKSA9PSBsZW5kIGFuZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihjdXIpID4gbGVuZCBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJbbGVuZF0gPT0gb3Muc2VwKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgaXdkWzFdLndkCisKKyAgICBkZWYgdXBkYXRlX3dhdGNoKHNlbGYsIHdkLCBtYXNrPU5vbmUsIHByb2NfZnVuPU5vbmUsIHJlYz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgIGF1dG9fYWRkPUZhbHNlLCBxdWlldD1UcnVlKToKKyAgICAgICAgIiIiCisgICAgICAgIFVwZGF0ZSBleGlzdGluZyB3YXRjaCBkZXNjcmlwdG9ycyB8d2R8LiBUaGUgfG1hc2t8IHZhbHVlLCB0aGUKKyAgICAgICAgcHJvY2Vzc2luZyBvYmplY3QgfHByb2NfZnVufCwgdGhlIHJlY3Vyc2l2ZSBwYXJhbSB8cmVjfCBhbmQgdGhlCisgICAgICAgIHxhdXRvX2FkZHwgYW5kIHxxdWlldHwgZmxhZ3MgY2FuIGFsbCBiZSB1cGRhdGVkLgorCisgICAgICAgIEBwYXJhbSB3ZDogV2F0Y2ggRGVzY3JpcHRvciB0byB1cGRhdGUuIEFsc28gYWNjZXB0cyBhIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICB3YXRjaCBkZXNjcmlwdG9ycy4KKyAgICAgICAgQHR5cGUgd2Q6IGludCBvciBsaXN0IG9mIGludAorICAgICAgICBAcGFyYW0gbWFzazogT3B0aW9uYWwgbmV3IGJpdG1hc2sgb2YgZXZlbnRzLgorICAgICAgICBAdHlwZSBtYXNrOiBpbnQKKyAgICAgICAgQHBhcmFtIHByb2NfZnVuOiBPcHRpb25hbCBuZXcgcHJvY2Vzc2luZyBmdW5jdGlvbi4KKyAgICAgICAgQHR5cGUgcHJvY19mdW46IGZ1bmN0aW9uIG9yIFByb2Nlc3NFdmVudCBpbnN0YW5jZSBvciBpbnN0YW5jZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgb25lIG9mIGl0cyBzdWJjbGFzc2VzIG9yIGNhbGxhYmxlIG9iamVjdC4KKyAgICAgICAgQHBhcmFtIHJlYzogT3B0aW9uYWxseSBhZGRzIHdhdGNoZXMgcmVjdXJzaXZlbHkgb24gYWxsCisgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzIGNvbnRhaW5lZCBpbnRvIHx3ZHwgZGlyZWN0b3J5LgorICAgICAgICBAdHlwZSByZWM6IGJvb2wKKyAgICAgICAgQHBhcmFtIGF1dG9fYWRkOiBBdXRvbWF0aWNhbGx5IGFkZHMgd2F0Y2hlcyBvbiBuZXdseSBjcmVhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgaW4gdGhlIHdhdGNoJ3MgcGF0aCBjb3JyZXNwb25kaW5nIHRvIHx3ZHwuCisgICAgICAgICAgICAgICAgICAgICAgICAgSWYgfGF1dG9fYWRkfCBpcyBUcnVlLCBJTl9DUkVBVEUgaXMgb3JlZCB3aXRoIHxtYXNrfAorICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHdhdGNoIGlzIHVwZGF0ZWQuCisgICAgICAgIEB0eXBlIGF1dG9fYWRkOiBib29sCisgICAgICAgIEBwYXJhbSBxdWlldDogSWYgRmFsc2UgcmFpc2VzIGEgV2F0Y2hNYW5hZ2VyRXJyb3IgZXhjZXB0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgICAgZXJyb3IuIFNlZSBleGFtcGxlIG5vdF9xdWlldC5weQorICAgICAgICBAdHlwZSBxdWlldDogYm9vbAorICAgICAgICBAcmV0dXJuOiBkaWN0IG9mIHdhdGNoIGRlc2NyaXB0b3JzIGFzc29jaWF0ZWQgdG8gYm9vbGVhbnMgdmFsdWVzLgorICAgICAgICAgICAgICAgICBUcnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIHdkIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseQorICAgICAgICAgICAgICAgICB1cGRhdGVkLCBGYWxzZSBvdGhlcndpc2UuCisgICAgICAgIEBydHlwZTogZGljdCBvZiB7aW50OiBib29sfQorICAgICAgICAiIiIKKyAgICAgICAgbHdkID0gc2VsZi5fX2Zvcm1hdF9wYXJhbSh3ZCkKKyAgICAgICAgaWYgcmVjOgorICAgICAgICAgICAgbHdkID0gc2VsZi5fX2dldF9zdWJfcmVjKGx3ZCkKKworICAgICAgICByZXRfID0ge30gICMgcmV0dXJuIHt3ZDogYm9vbCwgLi4ufQorICAgICAgICBmb3IgYXdkIGluIGx3ZDoKKyAgICAgICAgICAgIGFwYXRoID0gc2VsZi5nZXRfcGF0aChhd2QpCisgICAgICAgICAgICBpZiBub3QgYXBhdGggb3IgYXdkIDwgMDoKKyAgICAgICAgICAgICAgICBlcnIgPSAndXBkYXRlX3dhdGNoOiBpbnZhbGlkIFdEPSVkJyAlIGF3ZAorICAgICAgICAgICAgICAgIGlmIHF1aWV0OgorICAgICAgICAgICAgICAgICAgICBsb2cuZXJyb3IoZXJyKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHJhaXNlIFdhdGNoTWFuYWdlckVycm9yKGVyciwgcmV0XykKKworICAgICAgICAgICAgaWYgbWFzazoKKyAgICAgICAgICAgICAgICB3ZF8gPSBzZWxmLl9pbm90aWZ5X3dyYXBwZXIuaW5vdGlmeV9hZGRfd2F0Y2goc2VsZi5fZmQsIGFwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrKQorICAgICAgICAgICAgICAgIGlmIHdkXyA8IDA6CisgICAgICAgICAgICAgICAgICAgIHJldF9bYXdkXSA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGVyciA9ICgndXBkYXRlX3dhdGNoOiBjYW5ub3QgdXBkYXRlICVzIFdEPSVkLCAlcycgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFwYXRoLCB3ZF8sIHNlbGYuX2lub3RpZnlfd3JhcHBlci5zdHJfZXJybm8oKSkpCisgICAgICAgICAgICAgICAgICAgIGlmIHF1aWV0OgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKGVycikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFdhdGNoTWFuYWdlckVycm9yKGVyciwgcmV0XykKKworICAgICAgICAgICAgICAgIGFzc2VydChhd2QgPT0gd2RfKQorCisgICAgICAgICAgICBpZiBwcm9jX2Z1biBvciBhdXRvX2FkZDoKKyAgICAgICAgICAgICAgICB3YXRjaF8gPSBzZWxmLl93bWRbYXdkXQorCisgICAgICAgICAgICBpZiBwcm9jX2Z1bjoKKyAgICAgICAgICAgICAgICB3YXRjaF8ucHJvY19mdW4gPSBwcm9jX2Z1bgorCisgICAgICAgICAgICBpZiBhdXRvX2FkZDoKKyAgICAgICAgICAgICAgICB3YXRjaF8uYXV0b19hZGQgPSBhdXRvX2FkZAorCisgICAgICAgICAgICByZXRfW2F3ZF0gPSBUcnVlCisgICAgICAgICAgICBsb2cuZGVidWcoJ1VwZGF0ZWQgd2F0Y2ggLSAlcycsIHNlbGYuX3dtZFthd2RdKQorICAgICAgICByZXR1cm4gcmV0XworCisgICAgZGVmIF9fZm9ybWF0X3BhcmFtKHNlbGYsIHBhcmFtKToKKyAgICAgICAgIiIiCisgICAgICAgIEBwYXJhbSBwYXJhbTogUGFyYW1ldGVyLgorICAgICAgICBAdHlwZSBwYXJhbTogc3RyaW5nIG9yIGludAorICAgICAgICBAcmV0dXJuOiB3cmFwIHBhcmFtLgorICAgICAgICBAcnR5cGU6IGxpc3Qgb2YgdHlwZShwYXJhbSkKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW0sIGxpc3QpOgorICAgICAgICAgICAgZm9yIHBfIGluIHBhcmFtOgorICAgICAgICAgICAgICAgIHlpZWxkIHBfCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB5aWVsZCBwYXJhbQorCisgICAgZGVmIGdldF93ZChzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgdGhlIHdhdGNoIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB0byBwYXRoLiBUaGlzIG1ldGhvZAorICAgICAgICBwcmVzZW50cyBhIHByb2hpYml0aXZlIGNvc3QsIGFsd2F5cyBwcmVmZXIgdG8ga2VlcCB0aGUgV0QKKyAgICAgICAgcmV0dXJuZWQgYnkgYWRkX3dhdGNoKCkuIElmIHRoZSBwYXRoIGlzIHVua25vd24gaXQgcmV0dXJucyBOb25lLgorCisgICAgICAgIEBwYXJhbSBwYXRoOiBQYXRoLgorICAgICAgICBAdHlwZSBwYXRoOiBzdHIKKyAgICAgICAgQHJldHVybjogV0Qgb3IgTm9uZS4KKyAgICAgICAgQHJ0eXBlOiBpbnQgb3IgTm9uZQorICAgICAgICAiIiIKKyAgICAgICAgcGF0aCA9IHNlbGYuX19mb3JtYXRfcGF0aChwYXRoKQorICAgICAgICBmb3IgaXdkIGluIHNlbGYuX3dtZC5pdGVtcygpOgorICAgICAgICAgICAgaWYgaXdkWzFdLnBhdGggPT0gcGF0aDoKKyAgICAgICAgICAgICAgICByZXR1cm4gaXdkWzBdCisKKyAgICBkZWYgZ2V0X3BhdGgoc2VsZiwgd2QpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyB0aGUgcGF0aCBhc3NvY2lhdGVkIHRvIFdELCBpZiBXRCBpcyB1bmtub3duIGl0IHJldHVybnMgTm9uZS4KKworICAgICAgICBAcGFyYW0gd2Q6IFdhdGNoIGRlc2NyaXB0b3IuCisgICAgICAgIEB0eXBlIHdkOiBpbnQKKyAgICAgICAgQHJldHVybjogUGF0aCBvciBOb25lLgorICAgICAgICBAcnR5cGU6IHN0cmluZyBvciBOb25lCisgICAgICAgICIiIgorICAgICAgICB3YXRjaF8gPSBzZWxmLl93bWQuZ2V0KHdkKQorICAgICAgICBpZiB3YXRjaF8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gd2F0Y2hfLnBhdGgKKworICAgIGRlZiBfX3dhbGtfcmVjKHNlbGYsIHRvcCwgcmVjKToKKyAgICAgICAgIiIiCisgICAgICAgIFlpZWxkcyBlYWNoIHN1YmRpcmVjdG9yaWVzIG9mIHRvcCwgZG9lc24ndCBmb2xsb3cgc3ltbGlua3MuCisgICAgICAgIElmIHJlYyBpcyBmYWxzZSwgb25seSB5aWVsZCB0b3AuCisKKyAgICAgICAgQHBhcmFtIHRvcDogcm9vdCBkaXJlY3RvcnkuCisgICAgICAgIEB0eXBlIHRvcDogc3RyaW5nCisgICAgICAgIEBwYXJhbSByZWM6IHJlY3Vyc2l2ZSBmbGFnLgorICAgICAgICBAdHlwZSByZWM6IGJvb2wKKyAgICAgICAgQHJldHVybjogcGF0aCBvZiBvbmUgc3ViZGlyZWN0b3J5LgorICAgICAgICBAcnR5cGU6IHN0cmluZworICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHJlYyBvciBvcy5wYXRoLmlzbGluayh0b3ApIG9yIG5vdCBvcy5wYXRoLmlzZGlyKHRvcCk6CisgICAgICAgICAgICB5aWVsZCB0b3AKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHRvcCk6CisgICAgICAgICAgICAgICAgeWllbGQgcm9vdAorCisgICAgZGVmIHJtX3dhdGNoKHNlbGYsIHdkLCByZWM9RmFsc2UsIHF1aWV0PVRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVtb3ZlcyB3YXRjaChzKS4KKworICAgICAgICBAcGFyYW0gd2Q6IFdhdGNoIERlc2NyaXB0b3Igb2YgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IHRvIHVud2F0Y2guCisgICAgICAgICAgICAgICAgICAgQWxzbyBhY2NlcHRzIGEgbGlzdCBvZiBXRHMuCisgICAgICAgIEB0eXBlIHdkOiBpbnQgb3IgbGlzdCBvZiBpbnQuCisgICAgICAgIEBwYXJhbSByZWM6IFJlY3Vyc2l2ZWx5IHJlbW92ZXMgd2F0Y2hlcyBvbiBldmVyeSBhbHJlYWR5IHdhdGNoZWQKKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3JpZXMgYW5kIHN1YmZpbGVzLgorICAgICAgICBAdHlwZSByZWM6IGJvb2wKKyAgICAgICAgQHBhcmFtIHF1aWV0OiBJZiBGYWxzZSByYWlzZXMgYSBXYXRjaE1hbmFnZXJFcnJvciBleGNlcHRpb24gb24KKyAgICAgICAgICAgICAgICAgICAgICBlcnJvci4gU2VlIGV4YW1wbGUgbm90X3F1aWV0LnB5CisgICAgICAgIEB0eXBlIHF1aWV0OiBib29sCisgICAgICAgIEByZXR1cm46IGRpY3Qgb2Ygd2F0Y2ggZGVzY3JpcHRvcnMgYXNzb2NpYXRlZCB0byBib29sZWFucyB2YWx1ZXMuCisgICAgICAgICAgICAgICAgIFRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgd2QgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5CisgICAgICAgICAgICAgICAgIHJlbW92ZWQsIEZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgQHJ0eXBlOiBkaWN0IG9mIHtpbnQ6IGJvb2x9CisgICAgICAgICIiIgorICAgICAgICBsd2QgPSBzZWxmLl9fZm9ybWF0X3BhcmFtKHdkKQorICAgICAgICBpZiByZWM6CisgICAgICAgICAgICBsd2QgPSBzZWxmLl9fZ2V0X3N1Yl9yZWMobHdkKQorCisgICAgICAgIHJldF8gPSB7fSAgIyByZXR1cm4ge3dkOiBib29sLCAuLi59CisgICAgICAgIGZvciBhd2QgaW4gbHdkOgorICAgICAgICAgICAgIyByZW1vdmUgd2F0Y2gKKyAgICAgICAgICAgIHdkXyA9IHNlbGYuX2lub3RpZnlfd3JhcHBlci5pbm90aWZ5X3JtX3dhdGNoKHNlbGYuX2ZkLCBhd2QpCisgICAgICAgICAgICBpZiB3ZF8gPCAwOgorICAgICAgICAgICAgICAgIHJldF9bYXdkXSA9IEZhbHNlCisgICAgICAgICAgICAgICAgZXJyID0gKCdybV93YXRjaDogY2Fubm90IHJlbW92ZSBXRD0lZCwgJXMnICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGF3ZCwgc2VsZi5faW5vdGlmeV93cmFwcGVyLnN0cl9lcnJubygpKSkKKyAgICAgICAgICAgICAgICBpZiBxdWlldDoKKyAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKGVycikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICByYWlzZSBXYXRjaE1hbmFnZXJFcnJvcihlcnIsIHJldF8pCisKKyAgICAgICAgICAgICMgUmVtb3ZlIHdhdGNoIGZyb20gb3VyIGRpY3Rpb25hcnkKKyAgICAgICAgICAgIGlmIGF3ZCBpbiBzZWxmLl93bWQ6CisgICAgICAgICAgICAgICAgZGVsIHNlbGYuX3dtZFthd2RdCisgICAgICAgICAgICByZXRfW2F3ZF0gPSBUcnVlCisgICAgICAgICAgICBsb2cuZGVidWcoJ1dhdGNoIFdEPSVkICglcykgcmVtb3ZlZCcsIGF3ZCwgc2VsZi5nZXRfcGF0aChhd2QpKQorICAgICAgICByZXR1cm4gcmV0XworCisKKyAgICBkZWYgd2F0Y2hfdHJhbnNpZW50X2ZpbGUoc2VsZiwgZmlsZW5hbWUsIG1hc2ssIHByb2NfY2xhc3MpOgorICAgICAgICAiIiIKKyAgICAgICAgV2F0Y2ggYSB0cmFuc2llbnQgZmlsZSwgd2hpY2ggd2lsbCBiZSBjcmVhdGVkIGFuZCBkZWxldGVkIGZyZXF1ZW50bHkKKyAgICAgICAgb3ZlciB0aW1lIChlLmcuIHBpZCBmaWxlKS4KKworICAgICAgICBAYXR0ZW50aW9uOiBDdXJyZW50bHkgdW5kZXIgdGhlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBpdCBpcyBub3QKKyAgICAgICAgcG9zc2libGUgdG8gY29ycmVjdGx5IHdhdGNoIHRoZSBldmVudHMgdHJpZ2dlcmVkIGludG8gdGhlIHNhbWUKKyAgICAgICAgYmFzZSBkaXJlY3RvcnkgdGhhbiB0aGUgZGlyZWN0b3J5IHdoZXJlIGlzIGxvY2F0ZWQgdGhpcyB3YXRjaGVkCisgICAgICAgIHRyYW5zaWVudCBmaWxlLiBGb3IgaW5zdGFuY2UgaXQgd291bGQgYmUgd3JvbmcgdG8gbWFrZSB0aGVzZQorICAgICAgICB0d28gc3VjY2Vzc2l2ZSBjYWxsczogd20ud2F0Y2hfdHJhbnNpZW50X2ZpbGUoJy92YXIvcnVuL2Zvby5waWQnLCAuLi4pCisgICAgICAgIGFuZCB3bS5hZGRfd2F0Y2goJy92YXIvcnVuLycsIC4uLikKKworICAgICAgICBAcGFyYW0gZmlsZW5hbWU6IEZpbGVuYW1lLgorICAgICAgICBAdHlwZSBmaWxlbmFtZTogc3RyaW5nCisgICAgICAgIEBwYXJhbSBtYXNrOiBCaXRtYXNrIG9mIGV2ZW50cywgc2hvdWxkIGNvbnRhaW4gSU5fQ1JFQVRFIGFuZCBJTl9ERUxFVEUuCisgICAgICAgIEB0eXBlIG1hc2s6IGludAorICAgICAgICBAcGFyYW0gcHJvY19jbGFzczogUHJvY2Vzc0V2ZW50IChvciBvZiBvbmUgb2YgaXRzIHN1YmNsYXNzKSwgYmV3YXJlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHRpbmcgYSBQcm9jZXNzRXZlbnQncyBpbnN0YW5jZSBhcyBhcmd1bWVudCBpbnRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luaXRfXywgc2VlIHRyYW5zaWVudF9maWxlLnB5IGV4YW1wbGUgZm9yIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMuCisgICAgICAgIEB0eXBlIHByb2NfY2xhc3M6IFByb2Nlc3NFdmVudCdzIGluc3RhbmNlIG9yIG9mIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KKyAgICAgICAgQHJldHVybjogU2FtZSBhcyBhZGRfd2F0Y2goKS4KKyAgICAgICAgQHJ0eXBlOiBTYW1lIGFzIGFkZF93YXRjaCgpLgorICAgICAgICAiIiIKKyAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShmaWxlbmFtZSkKKyAgICAgICAgaWYgZGlybmFtZSA9PSAnJzoKKyAgICAgICAgICAgIHJldHVybiB7fSAgIyBNYWludGFpbnMgY29oZXJlbmNlIHdpdGggYWRkX3dhdGNoKCkKKyAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKQorICAgICAgICAjIEFzc3VtaW5nIHdlIGFyZSB3YXRjaGluZyBhdCBsZWFzdCBmb3IgSU5fQ1JFQVRFIGFuZCBJTl9ERUxFVEUKKyAgICAgICAgbWFzayB8PSBJTl9DUkVBVEUgfCBJTl9ERUxFVEUKKworICAgICAgICBkZWYgY21wX25hbWUoZXZlbnQpOgorICAgICAgICAgICAgaWYgZ2V0YXR0cihldmVudCwgJ25hbWUnKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIGJhc2VuYW1lID09IGV2ZW50Lm5hbWUKKyAgICAgICAgcmV0dXJuIHNlbGYuYWRkX3dhdGNoKGRpcm5hbWUsIG1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jX2Z1bj1wcm9jX2NsYXNzKENoYWluSWZUcnVlKGZ1bmM9Y21wX25hbWUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9fYWRkPUZhbHNlLCBkb19nbG9iPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZV9maWx0ZXI9bGFtYmRhIHBhdGg6IEZhbHNlKQorCisgICAgZGVmIGdldF9pZ25vcmVfZXZlbnRzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faWdub3JlX2V2ZW50cworCisgICAgZGVmIHNldF9pZ25vcmVfZXZlbnRzKHNlbGYsIG52YWwpOgorICAgICAgICBzZWxmLl9pZ25vcmVfZXZlbnRzID0gbnZhbAorCisgICAgaWdub3JlX2V2ZW50cyA9IHByb3BlcnR5KGdldF9pZ25vcmVfZXZlbnRzLCBzZXRfaWdub3JlX2V2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1ha2Ugd2F0Y2ggbWFuYWdlciBpZ25vcmluZyBuZXcgZXZlbnRzLiIpCisKKworCitjbGFzcyBSYXdPdXRwdXRGb3JtYXQ6CisgICAgIiIiCisgICAgRm9ybWF0IHN0cmluZyByZXByZXNlbnRhdGlvbnMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvcm1hdD1Ob25lKToKKyAgICAgICAgc2VsZi5mb3JtYXQgPSBmb3JtYXQgb3Ige30KKworICAgIGRlZiBzaW1wbGUoc2VsZiwgcywgYXR0cmlidXRlKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uocywgc3RyKToKKyAgICAgICAgICAgIHMgPSBzdHIocykKKyAgICAgICAgcmV0dXJuIChzZWxmLmZvcm1hdC5nZXQoYXR0cmlidXRlLCAnJykgKyBzICsKKyAgICAgICAgICAgICAgICBzZWxmLmZvcm1hdC5nZXQoJ25vcm1hbCcsICcnKSkKKworICAgIGRlZiBwdW5jdHVhdGlvbihzZWxmLCBzKToKKyAgICAgICAgIiIiUHVuY3R1YXRpb24gY29sb3IuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnNpbXBsZShzLCAnbm9ybWFsJykKKworICAgIGRlZiBmaWVsZF92YWx1ZShzZWxmLCBzKToKKyAgICAgICAgIiIiRmllbGQgdmFsdWUgY29sb3IuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnNpbXBsZShzLCAncHVycGxlJykKKworICAgIGRlZiBmaWVsZF9uYW1lKHNlbGYsIHMpOgorICAgICAgICAiIiJGaWVsZCBuYW1lIGNvbG9yLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5zaW1wbGUocywgJ2JsdWUnKQorCisgICAgZGVmIGNsYXNzX25hbWUoc2VsZiwgcyk6CisgICAgICAgICIiIkNsYXNzIG5hbWUgY29sb3IuIiIiCisgICAgICAgIHJldHVybiBzZWxmLmZvcm1hdC5nZXQoJ3JlZCcsICcnKSArIHNlbGYuc2ltcGxlKHMsICdib2xkJykKKworb3V0cHV0X2Zvcm1hdCA9IFJhd091dHB1dEZvcm1hdCgpCisKK2NsYXNzIENvbG9yZWRPdXRwdXRGb3JtYXQoUmF3T3V0cHV0Rm9ybWF0KToKKyAgICAiIiIKKyAgICBGb3JtYXQgY29sb3JlZCBzdHJpbmcgcmVwcmVzZW50YXRpb25zLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZiA9IHsnbm9ybWFsJzogJ1wwMzNbMG0nLAorICAgICAgICAgICAgICdibGFjayc6ICdcMDMzWzMwbScsCisgICAgICAgICAgICAgJ3JlZCc6ICdcMDMzWzMxbScsCisgICAgICAgICAgICAgJ2dyZWVuJzogJ1wwMzNbMzJtJywKKyAgICAgICAgICAgICAneWVsbG93JzogJ1wwMzNbMzNtJywKKyAgICAgICAgICAgICAnYmx1ZSc6ICdcMDMzWzM0bScsCisgICAgICAgICAgICAgJ3B1cnBsZSc6ICdcMDMzWzM1bScsCisgICAgICAgICAgICAgJ2N5YW4nOiAnXDAzM1szNm0nLAorICAgICAgICAgICAgICdib2xkJzogJ1wwMzNbMW0nLAorICAgICAgICAgICAgICd1bGluZSc6ICdcMDMzWzRtJywKKyAgICAgICAgICAgICAnYmxpbmsnOiAnXDAzM1s1bScsCisgICAgICAgICAgICAgJ2ludmVydCc6ICdcMDMzWzdtJ30KKyAgICAgICAgUmF3T3V0cHV0Rm9ybWF0Ll9faW5pdF9fKHNlbGYsIGYpCisKKworZGVmIGNvbXBhdGliaWxpdHlfbW9kZSgpOgorICAgICIiIgorICAgIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHR1cm4gb24gdGhlIGNvbXBhdGliaWxpdHkgbW9kZS4gVGhlIGNvbXBhdGliaWxpdHkKKyAgICBtb2RlIGlzIHVzZWQgdG8gaW1wcm92ZSBjb21wYXRpYmlsaXR5IHdpdGggUHlpbm90aWZ5IDAuNy4xIChvciBvbGRlcikKKyAgICBwcm9ncmFtcy4gVGhlIGNvbXBhdGliaWxpdHkgbW9kZSBwcm92aWRlcyBhZGRpdGlvbmFsIHZhcmlhYmxlcyAnaXNfZGlyJywKKyAgICAnZXZlbnRfbmFtZScsICdFdmVudHNDb2Rlcy5JTl8qJyBhbmQgJ0V2ZW50c0NvZGVzLkFMTF9FVkVOVFMnIGFzCisgICAgUHlpbm90aWZ5IDAuNy4xIHByb3ZpZGVkLiBEbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGZyb20gbmV3IHByb2dyYW1zISEKKyAgICBFc3BlY2lhbGx5IGlmIHRoZXJlIGFyZSBkZXZlbG9wcGVkIGZvciBQeWlub3RpZnkgPj0gMC44LnguCisgICAgIiIiCisgICAgc2V0YXR0cihFdmVudHNDb2RlcywgJ0FMTF9FVkVOVFMnLCBBTExfRVZFTlRTKQorICAgIGZvciBldm5hbWUgaW4gZ2xvYmFscygpOgorICAgICAgICBpZiBldm5hbWUuc3RhcnRzd2l0aCgnSU5fJyk6CisgICAgICAgICAgICBzZXRhdHRyKEV2ZW50c0NvZGVzLCBldm5hbWUsIGdsb2JhbHMoKVtldm5hbWVdKQorICAgIGdsb2JhbCBDT01QQVRJQklMSVRZX01PREUKKyAgICBDT01QQVRJQklMSVRZX01PREUgPSBUcnVlCisKKworZGVmIGNvbW1hbmRfbGluZSgpOgorICAgICIiIgorICAgIEJ5IGRlZmF1bHQgdGhlIHdhdGNoZWQgcGF0aCBpcyAnL3RtcCcgYW5kIGFsbCB0eXBlcyBvZiBldmVudHMgYXJlCisgICAgbW9uaXRvcmVkLiBFdmVudHMgbW9uaXRvcmluZyBzZXJ2ZXMgZm9yZXZlciwgdHlwZSBjXmMgdG8gc3RvcCBpdC4KKyAgICAiIiIKKyAgICBmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKKworICAgIHVzYWdlID0gInVzYWdlOiAlcHJvZyBbb3B0aW9uc10gW3BhdGgxXSBbcGF0aDJdIFtwYXRobl0iCisKKyAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIodXNhZ2U9dXNhZ2UpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi12IiwgIi0tdmVyYm9zZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0idmVyYm9zZSIsIGhlbHA9IlZlcmJvc2UgbW9kZSIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1yIiwgIi0tcmVjdXJzaXZlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJyZWN1cnNpdmUiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkFkZCB3YXRjaGVzIHJlY3Vyc2l2ZWx5IG9uIHBhdGhzIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWEiLCAiLS1hdXRvX2FkZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0iYXV0b19hZGQiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkF1dG9tYXRpY2FsbHkgYWRkIHdhdGNoZXMgb24gbmV3IGRpcmVjdG9yaWVzIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWciLCAiLS1nbG9iIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJnbG9iIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJUcmVhdCBwYXRocyBhcyBnbG9icyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1lIiwgIi0tZXZlbnRzLWxpc3QiLCBtZXRhdmFyPSJFVkVOVFssLi4uXSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0iZXZlbnRzX2xpc3QiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCJBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGV2ZW50cyB0byB3YXRjaCBmb3IgLSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB2YWxpZCBvcHRpb25zIChkZWZhdWx0cyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdG8gZXZlcnl0aGluZykiKSkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXMiLCAiLS1zdGF0cyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ic3RhdHMiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRpc3BsYXkgZHVtbXkgc3RhdGlzdGljcyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1WIiwgIi0tdmVyc2lvbiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0idmVyc2lvbiIsICBoZWxwPSJQeWlub3RpZnkgdmVyc2lvbiIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tcmF3LWZvcm1hdCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0icmF3X2Zvcm1hdCIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRGlzYWJsZSBlbmhhbmNlZCBvdXRwdXQgZm9ybWF0LiIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1jIiwgIi0tY29tbWFuZCIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9ImNvbW1hbmQiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlNoZWxsIGNvbW1hbmQgdG8gcnVuIHVwb24gZXZlbnQiKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgaWYgb3B0aW9ucy52ZXJib3NlOgorICAgICAgICBsb2cuc2V0TGV2ZWwoMTApCisKKyAgICBpZiBvcHRpb25zLnZlcnNpb246CisgICAgICAgIHByaW50KF9fdmVyc2lvbl9fKQorCisgICAgaWYgbm90IG9wdGlvbnMucmF3X2Zvcm1hdDoKKyAgICAgICAgZ2xvYmFsIG91dHB1dF9mb3JtYXQKKyAgICAgICAgb3V0cHV0X2Zvcm1hdCA9IENvbG9yZWRPdXRwdXRGb3JtYXQoKQorCisgICAgaWYgbGVuKGFyZ3MpIDwgMToKKyAgICAgICAgcGF0aCA9ICcvdG1wJyAgIyBkZWZhdWx0IHdhdGNoZWQgcGF0aAorICAgIGVsc2U6CisgICAgICAgIHBhdGggPSBhcmdzCisKKyAgICAjIHdhdGNoIG1hbmFnZXIgaW5zdGFuY2UKKyAgICB3bSA9IFdhdGNoTWFuYWdlcigpCisgICAgIyBub3RpZmllciBpbnN0YW5jZSBhbmQgaW5pdAorICAgIGlmIG9wdGlvbnMuc3RhdHM6CisgICAgICAgIG5vdGlmaWVyID0gTm90aWZpZXIod20sIGRlZmF1bHRfcHJvY19mdW49U3RhdHMoKSwgcmVhZF9mcmVxPTUpCisgICAgZWxzZToKKyAgICAgICAgbm90aWZpZXIgPSBOb3RpZmllcih3bSwgZGVmYXVsdF9wcm9jX2Z1bj1QcmludEFsbEV2ZW50cygpKQorCisgICAgIyBXaGF0IG1hc2sgdG8gYXBwbHkKKyAgICBtYXNrID0gMAorICAgIGlmIG9wdGlvbnMuZXZlbnRzX2xpc3Q6CisgICAgICAgIGV2ZW50c19saXN0ID0gb3B0aW9ucy5ldmVudHNfbGlzdC5zcGxpdCgnLCcpCisgICAgICAgIGZvciBldiBpbiBldmVudHNfbGlzdDoKKyAgICAgICAgICAgIGV2Y29kZSA9IEV2ZW50c0NvZGVzLkFMTF9GTEFHUy5nZXQoZXYsIDApCisgICAgICAgICAgICBpZiBldmNvZGU6CisgICAgICAgICAgICAgICAgbWFzayB8PSBldmNvZGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyc2VyLmVycm9yKCJUaGUgZXZlbnQgJyVzJyBzcGVjaWZpZWQgd2l0aCBvcHRpb24gLWUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaXMgbm90IHZhbGlkIiAlIGV2KQorICAgIGVsc2U6CisgICAgICAgIG1hc2sgPSBBTExfRVZFTlRTCisKKyAgICAjIHN0YXRzCisgICAgY2JfZnVuID0gTm9uZQorICAgIGlmIG9wdGlvbnMuc3RhdHM6CisgICAgICAgIGRlZiBjYihzKToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUocmVwcihzLnByb2NfZnVuKCkpKQorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShzdHIocy5wcm9jX2Z1bigpKSkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuJykKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICBjYl9mdW4gPSBjYgorCisgICAgIyBFeHRlcm5hbCBjb21tYW5kCisgICAgaWYgb3B0aW9ucy5jb21tYW5kOgorICAgICAgICBkZWYgY2Iocyk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKG9wdGlvbnMuY29tbWFuZCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgY2JfZnVuID0gY2IKKworICAgIGxvZy5kZWJ1ZygnU3RhcnQgbW9uaXRvcmluZyAlcywgKHByZXNzIGNeYyB0byBoYWx0IHB5aW5vdGlmeSknICUgcGF0aCkKKworICAgIHdtLmFkZF93YXRjaChwYXRoLCBtYXNrLCByZWM9b3B0aW9ucy5yZWN1cnNpdmUsIGF1dG9fYWRkPW9wdGlvbnMuYXV0b19hZGQsIGRvX2dsb2I9b3B0aW9ucy5nbG9iKQorICAgICMgTG9vcCBmb3JldmVyICh1bnRpbCBzaWdpbnQgc2lnbmFsIGdldCBjYXVnaHQpCisgICAgbm90aWZpZXIubG9vcChjYWxsYmFjaz1jYl9mdW4pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBjb21tYW5kX2xpbmUoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb2xsZWN0b3IvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL2FkbWluLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbGxlY3Rvci9hZG1pbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWY4NWQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbGxlY3Rvci9hZG1pbi5weQpAQCAtMCwwICsxLDMzIEBACitmcm9tIGRqYW5nby5jb250cmliIGltcG9ydCBhZG1pbgorZnJvbSBkamFuZ28uY29udHJpYi5hZG1pbi5maWx0ZXJzIGltcG9ydCBSZWxhdGVkRmllbGRMaXN0RmlsdGVyCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEJpdGJha2VWZXJzaW9uLCBSZWxlYXNlLCBMYXllclNvdXJjZSwgVG9hc3RlclNldHRpbmcKK2Zyb20gZGphbmdvLmZvcm1zLndpZGdldHMgaW1wb3J0IFRleHRhcmVhCitmcm9tIGRqYW5nbyBpbXBvcnQgZm9ybXMKK2ltcG9ydCBkamFuZ28uZGIubW9kZWxzIGFzIG1vZGVscworCitmcm9tIGRqYW5nby5jb250cmliLmFkbWluIGltcG9ydCB3aWRnZXRzLCBoZWxwZXJzCisKK2NsYXNzIExheWVyU291cmNlQWRtaW4oYWRtaW4uTW9kZWxBZG1pbik6CisgICAgcGFzcworCitjbGFzcyBCaXRiYWtlVmVyc2lvbkFkbWluKGFkbWluLk1vZGVsQWRtaW4pOgorCisgICAgIyB3ZSBvdmVycmlkZSB0aGUgZm9ybWZpZWxkIGZvciBkYiBVUkxGaWVsZCBiZWNhdXNlIG9mIGJyb2tlbiBVUkwgdmFsaWRhdGlvbgorCisgICAgZGVmIGZvcm1maWVsZF9mb3JfZGJmaWVsZChzZWxmLCBkYl9maWVsZCwgKiprd2FyZ3MpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGRiX2ZpZWxkLCBtb2RlbHMuZmllbGRzLlVSTEZpZWxkKToKKyAgICAgICAgICAgIHJldHVybiBmb3Jtcy5maWVsZHMuQ2hhckZpZWxkKCkKKyAgICAgICAgcmV0dXJuIHN1cGVyKEJpdGJha2VWZXJzaW9uQWRtaW4sIHNlbGYpLmZvcm1maWVsZF9mb3JfZGJmaWVsZChkYl9maWVsZCwgKiprd2FyZ3MpCisKKworCitjbGFzcyBSZWxlYXNlQWRtaW4oYWRtaW4uTW9kZWxBZG1pbik6CisgICAgcGFzcworCitjbGFzcyBUb2FzdGVyU2V0dGluZ0FkbWluKGFkbWluLk1vZGVsQWRtaW4pOgorICAgIHBhc3MKKworYWRtaW4uc2l0ZS5yZWdpc3RlcihMYXllclNvdXJjZSwgTGF5ZXJTb3VyY2VBZG1pbikKK2FkbWluLnNpdGUucmVnaXN0ZXIoQml0YmFrZVZlcnNpb24sIEJpdGJha2VWZXJzaW9uQWRtaW4pCithZG1pbi5zaXRlLnJlZ2lzdGVyKFJlbGVhc2UsIFJlbGVhc2VBZG1pbikKK2FkbWluLnNpdGUucmVnaXN0ZXIoVG9hc3RlclNldHRpbmcsIFRvYXN0ZXJTZXR0aW5nQWRtaW4pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL3VybHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL3VybHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ0Mzg3YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb2xsZWN0b3IvdXJscy5weQpAQCAtMCwwICsxLDI2IEBACisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisKK2Zyb20gZGphbmdvLmNvbmYudXJscyBpbXBvcnQgcGF0dGVybnMsIGluY2x1ZGUsIHVybAorZnJvbSBkamFuZ28udmlld3MuZ2VuZXJpYyBpbXBvcnQgUmVkaXJlY3RWaWV3CisKK3VybHBhdHRlcm5zID0gcGF0dGVybnMoJ2JsZGNvbGxlY3Rvci52aWV3cycsCisgICAgICAgICMgbGFuZGluZyBwb2ludCBmb3IgcHVzaGluZyBhIGJpdGJha2VfZXZlbnRsb2cuanNvbiBmaWxlIHRvIHRoaXMgdG9hc3RlciBpbnN0YWNlCisgICAgICAgIHVybChyJ15ldmVudGZpbGUkJywgJ2V2ZW50ZmlsZScsIG5hbWU9J2V2ZW50ZmlsZScpLAorICAgICAgICApCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL3ZpZXdzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbGxlY3Rvci92aWV3cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzJmYTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbGxlY3Rvci92aWV3cy5weQpAQCAtMCwwICsxLDYyIEBACisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIGRqYW5nby52aWV3cy5kZWNvcmF0b3JzLmNhY2hlIGltcG9ydCBjYWNoZV9jb250cm9sCitmcm9tIGRqYW5nby5jb3JlLnVybHJlc29sdmVycyBpbXBvcnQgcmV2ZXJzZQorZnJvbSBkamFuZ28uY29yZS5wYWdpbmF0b3IgaW1wb3J0IFBhZ2luYXRvciwgRW1wdHlQYWdlLCBQYWdlTm90QW5JbnRlZ2VyCitmcm9tIGRqYW5nby5odHRwIGltcG9ydCBIdHRwUmVzcG9uc2VCYWRSZXF1ZXN0LCBIdHRwUmVzcG9uc2UKK2Zyb20gZGphbmdvLnV0aWxzIGltcG9ydCB0aW1lem9uZQorZnJvbSBkamFuZ28udXRpbHMuaHRtbCBpbXBvcnQgZXNjYXBlCitmcm9tIGRhdGV0aW1lIGltcG9ydCB0aW1lZGVsdGEKK2Zyb20gZGphbmdvLnV0aWxzIGltcG9ydCBmb3JtYXRzCitmcm9tIHRvYXN0ZXJndWkudGVtcGxhdGV0YWdzLnByb2plY3R0YWdzIGltcG9ydCBqc29uIGFzIGpzb25maWx0ZXIKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0b2FzdGVybWFpbgorZnJvbSBkamFuZ28udmlld3MuZGVjb3JhdG9ycy5jc3JmIGltcG9ydCBjc3JmX2V4ZW1wdAorCisKK0Bjc3JmX2V4ZW1wdAorZGVmIGV2ZW50ZmlsZShyZXF1ZXN0KToKKyAgICAiIiIgUmVjZWl2ZXMgYSBmaWxlIGJ5IFBPU1QsIGFuZCBydW5zIHRvYXN0ZXItZXZlbnRyZXBseSBvbiB0aGlzIGZpbGUgIiIiCisgICAgaWYgcmVxdWVzdC5tZXRob2QgIT0gIlBPU1QiOgorICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlQmFkUmVxdWVzdCgiVGhpcyBBUEkgb25seSBhY2NlcHRzIFBPU1QgcmVxdWVzdHMuIFBvc3QgYSBmaWxlIHdpdGg6XG5cbmN1cmwgLUYgZXZlbnRsb2c9QGJpdGJha2VfZXZlbnRsb2cuanNvbiAlc1xuIiAlIHJlcXVlc3QuYnVpbGRfYWJzb2x1dGVfdXJpKHJldmVyc2UoJ2V2ZW50ZmlsZScpKSwgY29udGVudF90eXBlPSJ0ZXh0L3BsYWluO3V0ZjgiKQorCisgICAgIyB3cml0ZSB0ZW1wb3JhcnkgZmlsZQorICAgIChoYW5kbGUsIGFic3RlbXBwYXRoKSA9IHRlbXBmaWxlLm1rc3RlbXAoZGlyPSIvdG1wLyIpCisgICAgd2l0aCBvcy5mZG9wZW4oaGFuZGxlLCAidyIpIGFzIHRtcGZpbGU6CisgICAgICAgIGZvciBjaHVuayBpbiByZXF1ZXN0LkZJTEVTWydldmVudGxvZyddLmNodW5rcygpOgorICAgICAgICAgICAgdG1wZmlsZS53cml0ZShjaHVuaykKKyAgICB0bXBmaWxlLmNsb3NlKCkKKworICAgICMgY29tcHV0ZSB0aGUgcGF0aCB0byAiYml0YmFrZS9iaW4vdG9hc3Rlci1ldmVudHJlcGxheSIKKyAgICBmcm9tIG9zLnBhdGggaW1wb3J0IGRpcm5hbWUgYXMgRE4KKyAgICBpbXBvcnRfc2NyaXB0ID0gb3MucGF0aC5qb2luKEROKEROKEROKEROKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSkpLCAiYmluL3RvYXN0ZXItZXZlbnRyZXBsYXkiKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhpbXBvcnRfc2NyaXB0KToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJzY3JpcHQgbWlzc2luZyAlcyIgJSBpbXBvcnRfc2NyaXB0KQorICAgIHNjcmlwdGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgc2NyaXB0ZW52WyJEQVRBQkFTRV9VUkwiXSA9IHRvYXN0ZXJtYWluLnNldHRpbmdzLmdldERBVEFCQVNFX1VSTCgpCisKKyAgICAjIHJ1biB0aGUgZGF0YSBsb2FkaW5nIHByb2Nlc3MgYW5kIHJldHVybiB0aGUgcmVzdWx0cworICAgIGltcG9ydGVyID0gc3VicHJvY2Vzcy5Qb3BlbihbaW1wb3J0X3NjcmlwdCwgYWJzdGVtcHBhdGhdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLCBlbnY9c2NyaXB0ZW52KQorICAgIChvdXQsIGVycikgPSBpbXBvcnRlci5jb21tdW5pY2F0ZSgpCisgICAgaWYgaW1wb3J0ZXIucmV0dXJuY29kZSA9PSAwOgorICAgICAgICBvcy5yZW1vdmUoYWJzdGVtcHBhdGgpCisgICAgcmV0dXJuIEh0dHBSZXNwb25zZSgiPT0gUmV0dmFsICVkXG49PSBTVERPVVRcbiVzXG5cbj09IFNUREVSUlxuJXMiICUgKGltcG9ydGVyLnJldHVybmNvZGUsIG91dCwgZXJyKSwgY29udGVudF90eXBlPSJ0ZXh0L3BsYWluO3V0ZjgiKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL2FkbWluLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvYWRtaW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNiZTVmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL2FkbWluLnB5CkBAIC0wLDAgKzEsOCBAQAorZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KK2Zyb20gZGphbmdvLmNvbnRyaWIuYWRtaW4uZmlsdGVycyBpbXBvcnQgUmVsYXRlZEZpZWxkTGlzdEZpbHRlcgorZnJvbSAubW9kZWxzIGltcG9ydCBCdWlsZEVudmlyb25tZW50CisKK2NsYXNzIEJ1aWxkRW52aXJvbm1lbnRBZG1pbihhZG1pbi5Nb2RlbEFkbWluKToKKyAgICBwYXNzCisKK2FkbWluLnNpdGUucmVnaXN0ZXIoQnVpbGRFbnZpcm9ubWVudCwgQnVpbGRFbnZpcm9ubWVudEFkbWluKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvYmJjb250cm9sbGVyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvYmJjb250cm9sbGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNzBhYzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9iYmNvbnRyb2xsZXIucHkKQEAgLTAsMCArMSwyMDIgQEAKKyMKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHJlCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgdHJhbnNhY3Rpb24KK2Zyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUQorZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRFbnZpcm9ubWVudCwgQlJMYXllciwgQlJWYXJpYWJsZSwgQlJUYXJnZXQsIEJSQml0YmFrZQorCisjIGxvYWQgQml0YmFrZSBjb21wb25lbnRzCitwYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSkpCitzeXMucGF0aC5pbnNlcnQoMCwgcGF0aCkKK2ltcG9ydCBiYi5zZXJ2ZXIueG1scnBjCisKK2NsYXNzIEJpdGJha2VDb250cm9sbGVyKG9iamVjdCk6CisgICAgIiIiIFRoaXMgaXMgdGhlIGJhc2ljIGNsYXNzIHRoYXQgY29udHJvbGxzIGEgYml0YmFrZSBzZXJ2ZXIuCisgICAgICAgIEl0IGlzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgY2xhc3Mgb24gaG93IHRoZSBzZXJ2ZXIgaXMgc3RhcnRlZCBhbmQgYXF1aXJlZAorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm5lY3Rpb24pOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uCisKKyAgICBkZWYgX3J1bkNvbW1hbmQoc2VsZiwgY29tbWFuZCk6CisgICAgICAgIHJlc3VsdCwgZXJyb3IgPSBzZWxmLmNvbm5lY3Rpb24uY29ubmVjdGlvbi5ydW5Db21tYW5kKGNvbW1hbmQpCisgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKGVycm9yKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgZGlzY29ubmVjdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5yZW1vdmVDbGllbnQoKQorCisgICAgZGVmIHNldFZhcmlhYmxlKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bkNvbW1hbmQoWyJzZXRWYXJpYWJsZSIsIG5hbWUsIHZhbHVlXSkKKworICAgIGRlZiBidWlsZChzZWxmLCB0YXJnZXRzLCB0YXNrID0gTm9uZSk6CisgICAgICAgIGlmIHRhc2sgaXMgTm9uZToKKyAgICAgICAgICAgIHRhc2sgPSAiYnVpbGQiCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5Db21tYW5kKFsiYnVpbGRUYXJnZXRzIiwgdGFyZ2V0cywgdGFza10pCisKKworCitkZWYgZ2V0QnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIoKiprd2FyZ3MpOgorICAgICIiIiBHZXRzIHlvdSBhIEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyIHRoYXQgZW5jYXBzdWxhdGVzIGEgYnVpbGQgZW52aXJvbm1lbnQsCisgICAgICAgIGJhc2VkIG9uIHRoZSBxdWVyeSBkaWN0aW9uYXJ5IHNlbnQgaW4uCisKKyAgICAgICAgVGhpcyBpcyB1c2VkIHRvIHJldHJpZXZlLCBmb3IgZXhhbXBsZSwgdGhlIGN1cnJlbnRseSBydW5uaW5nIEJFIGZyb20gaW5zaWRlCisgICAgICAgIHRoZSB0b2FzdGVyIFVJLCBvciBmaW5kIGEgbmV3IEJFIHRvIHN0YXJ0IGEgbmV3IGJ1aWxkIGluIGl0LgorCisgICAgICAgIFRoZSByZXR1cm4gb2JqZWN0IE1VU1QgYWx3YXlzIGJlIGEgQnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIuCisgICAgIiIiCisKKyAgICBmcm9tIGxvY2FsaG9zdGJlY29udHJvbGxlciBpbXBvcnQgTG9jYWxob3N0QkVDb250cm9sbGVyCisgICAgZnJvbSBzc2hiZWNvbnRyb2xsZXIgICAgaW1wb3J0IFNTSEJFQ29udHJvbGxlcgorCisgICAgYmUgPSBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMuZmlsdGVyKFEoKiprd2FyZ3MpKVswXQorICAgIGlmIGJlLmJldHlwZSA9PSBCdWlsZEVudmlyb25tZW50LlRZUEVfTE9DQUw6CisgICAgICAgIHJldHVybiBMb2NhbGhvc3RCRUNvbnRyb2xsZXIoYmUpCisgICAgZWxpZiBiZS5iZXR5cGUgPT0gQnVpbGRFbnZpcm9ubWVudC5UWVBFX1NTSDoKKyAgICAgICAgcmV0dXJuIFNTSEJFQ29udHJvbGxlcihiZSkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBJbXBsZW1lbnQgQkVDIGZvciB0eXBlICVzIiAlIHN0cihiZS5iZXR5cGUpKQorCisKK2NsYXNzIEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyKG9iamVjdCk6CisgICAgIiIiIEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyIChCRUMpIGlzIHRoZSBhYnN0cmFjdCBjbGFzcyB0aGF0IGRlZmluZXMgdGhlIG9wZXJhdGlvbnMgdGhhdCBNVVNUCisgICAgICAgIG9yIFNIT1VMRCBiZSBzdXBwb3J0ZWQgYnkgYSBCdWlsZCBFbnZpcm9ubWVudC4gSXQgaXMgdXNlZCB0byBlc3RhYmxpc2ggdGhlIGZyYW1ld29yaywgYW5kIG11c3QKKyAgICAgICAgbm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseSBieSB0aGUgdXNlci4KKworICAgICAgICBVc2UgdGhlICJnZXRCdWlsZEVudmlyb25tZW50Q29udHJvbGxlcigpIiBmdW5jdGlvbiB0byBnZXQgYSB3b3JraW5nIEJFQyBmb3IgeW91ciByZW1vdGUuCisKKyAgICAgICAgSG93IHRoZSBCdWlsZEVudmlyb25tZW50cyBhcmUgZGlzY292ZXJlZCBpcyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIGNsYXNzLgorCisgICAgICAgIFlvdSBtdXN0IGRlcml2ZSB0aGlzIGNsYXNzIHRvIHRlYWNoIFRvYXN0ZXIgaG93IHRvIG9wZXJhdGUgaW4geW91ciBvd24gaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIFdlIHByb3ZpZGUgc29tZSBzcGVjaWZpYyBCdWlsZEVudmlyb25tZW50Q29udHJvbGxlciBjbGFzc2VzIHRoYXQgY2FuIGJlIHVzZWQgZWl0aGVyIHRvCisgICAgICAgIGRpcmVjdGx5IHNldC11cCBUb2FzdGVyIGluZnJhc3RydWN0dXJlLCBvciBhcyBhIG1vZGVsIGZvciB5b3VyIG93biBpbmZyYXN0cnVjdHVyZSBzZXQ6CisKKyAgICAgICAgICAgICogTG9jYWxob3N0IGNvbnRyb2xsZXIgd2lsbCBydW4gdGhlIFRvYXN0ZXIgQkUgb24gdGhlIHNhbWUgYWNjb3VudCBhcyB0aGUgd2ViIHNlcnZlcgorICAgICAgICAoY3VycmVudCB1c2VyIGlmIHlvdSBhcmUgdXNpbmcgdGhlIHRoZSBEamFuZ28gZGV2ZWxvcG1lbnQgd2ViIHNlcnZlcikKKyAgICAgICAgb24gdGhlIGxvY2FsIG1hY2hpbmUsIHdpdGggdGhlICJidWlsZC8iIGRpcmVjdG9yeSB1bmRlciB0aGUgInBva3kvIiBzb3VyY2UgY2hlY2tvdXQgZGlyZWN0b3J5LgorICAgICAgICBCYXNoIGlzIGV4cGVjdGVkIHRvIGJlIGF2YWlsYWJsZS4KKworICAgICAgICAgICAgKiBTU0ggY29udHJvbGxlciB3aWxsIHJ1biB0aGUgVG9hc3RlciBCRSBvbiBhIHJlbW90ZSBtYWNoaW5lLCB3aGVyZSB0aGUgY3VycmVudCB1c2VyCisgICAgICAgIGNhbiBjb25uZWN0IHdpdGhvdXQgcmFpc2UgRXhjZXB0aW9uKCJGSVhNRTogaW1wbGVtZW50Iil3b3JkIChzZXQgdXAgd2l0aCBlaXRoZXIgc3NoLWFnZW50IG9yIHJhaXNlIEV4Y2VwdGlvbigiRklYTUU6IGltcGxlbWVudCIpcGhyYXNlLWxlc3Mga2V5IGF1dGhlbnRpY2F0aW9uKQorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJlKToKKyAgICAgICAgIiIiIFRha2VzIGEgQnVpbGRFbnZpcm9ubWVudCBvYmplY3QgYXMgcGFyYW1ldGVyIHRoYXQgcG9pbnRzIHRvIHRoZSBzZXR0aW5ncyBvZiB0aGUgQkUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmJlID0gYmUKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gTm9uZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfdXBkYXRlQkJMYXllcnMoYmJsYXllcmNvbmYsIGxheWVybGlzdCk6CisgICAgICAgIGNvbmZsaW5lcyA9IG9wZW4oYmJsYXllcmNvbmYsICJyIikucmVhZGxpbmVzKCkKKworICAgICAgICBiYmxheWVyY29uZmZpbGUgPSBvcGVuKGJibGF5ZXJjb25mLCAidyIpCisgICAgICAgIHNraXAgPSAwCisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oY29uZmxpbmVzKSk6CisgICAgICAgICAgICBpZiBza2lwID4gMDoKKyAgICAgICAgICAgICAgICBza2lwID0tIDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgY29uZmxpbmVzW2ldLnN0YXJ0c3dpdGgoIiMgbGluZSBhZGRlZCBieSB0b2FzdGVyIik6CisgICAgICAgICAgICAgICAgc2tpcCA9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmJsYXllcmNvbmZmaWxlLndyaXRlKGNvbmZsaW5lc1tpXSkKKworICAgICAgICBiYmxheWVyY29uZmZpbGUud3JpdGUoIiMgbGluZSBhZGRlZCBieSB0b2FzdGVyIGJ1aWxkIGNvbnRyb2xcbkJCTEFZRVJTID0gXCIiICsgIiAiLmpvaW4obGF5ZXJsaXN0KSArICJcIiIpCisgICAgICAgIGJibGF5ZXJjb25mZmlsZS5jbG9zZSgpCisKKworICAgIGRlZiB3cml0ZUNvbmZGaWxlKHNlbGYsIHZhcmlhYmxlX2xpc3QgPSBOb25lLCByYXcgPSBOb25lKToKKyAgICAgICAgIiIiIFdyaXRlcyBhIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LiBPdmVycmlkZSB3aXRoIGJ1aWxkZW52LXNwZWNpZmljIGltcGxlbWVudGF0aW9uLiAiIiIKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGSVhNRTogTXVzdCBvdmVycmlkZSB0byBhY3R1YWxseSB3cml0ZSBhIGNvbmZpZ3VyYXRpb24gZmlsZSIpCisKKworICAgIGRlZiBzdGFydEJCU2VydmVyKHNlbGYpOgorICAgICAgICAiIiIgU3RhcnRzIGEgIEJCIHNlcnZlciB3aXRoIFRvYXN0ZXIgdG9hc3RlcnVpIHNldCB1cCB0byByZWNvcmQgdGhlIGJ1aWxkcywgYW4gbm8gY29udHJvbGxpbmcgVUkuCisgICAgICAgICAgICBBZnRlciB0aGlzIG1ldGhvZCBleGVjdXRlcywgc2VsZi5iZSBiYmFkZHJlc3MvYmJwb3J0IE1VU1QgcG9pbnQgdG8gYSBydW5uaW5nIGFuZCBmcmVlIHNlcnZlciwKKyAgICAgICAgICAgIGFuZCB0aGUgYmJzdGF0ZSBNVVNUIGJlICB1cGRhdGVkIHRvICJzdGFydGVkIi4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRklYTUU6IE11c3Qgb3ZlcnJpZGUgaW4gb3JkZXIgdG8gYWN0dWFsbHkgc3RhcnQgdGhlIEJCIHNlcnZlciIpCisKKyAgICBkZWYgc3RvcEJCU2VydmVyKHNlbGYpOgorICAgICAgICAiIiIgU3RvcHMgdGhlIGN1cnJlbnRseSBydW5uaW5nIEJCIHNlcnZlci4KKyAgICAgICAgICAgIFRoZSBiYnN0YXRlIE1VU1QgYmUgdXBkYXRlZCB0byAic3RvcHBlZCIuCisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24gbXVzdCBiZSBub25lLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGSVhNRTogTXVzdCBvdmVycmlkZSBzdG9CQlNlcnZlciIpCisKKyAgICBkZWYgc2V0TGF5ZXJzKHNlbGYsIGJicywgbHMpOgorICAgICAgICAiIiIgQ2hlY2tzLW91dCBiaXRiYWtlIGV4ZWN1dG9yIGFuZCBsYXllcnMgZnJvbSBnaXQgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgU2V0cyB0aGUgbGF5ZXIgdmFyaWFibGVzIGluIHRoZSBjb25maWcgZmlsZSwgYWZ0ZXIgdmFsaWRhdGluZyBsb2NhbCBsYXllciBwYXRocy4KKyAgICAgICAgICAgIFRoZSBiaXRiYWtlcyBtdXN0IGJlIGEgMS1sZW5ndGggbGlzdCBvZiBCUkJpdGJha2UKKyAgICAgICAgICAgIFRoZSBsYXllciBwYXRocyBtdXN0IGJlIGluIGEgbGlzdCBvZiBCUkxheWVyIG9iamVjdAorCisgICAgICAgICAgICBhIHdvcmQgb2YgYXR0ZW50aW9uOiBieSBjb252ZW50aW9uLCB0aGUgZmlyc3QgbGF5ZXIgZm9yIGFueSBidWlsZCB3aWxsIGJlIHBva3khCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBNdXN0IG92ZXJyaWRlIHNldExheWVycyIpCisKKworICAgIGRlZiBnZXRCQkNvbnRyb2xsZXIoc2VsZik6CisgICAgICAgICIiIiByZXR1cm5zIGEgQml0YmFrZUNvbnRyb2xsZXIgdG8gYW4gYWxyZWFkeSBzdGFydGVkIHNlcnZlcjsgdGhpcyBpcyB0aGUgcG9pbnQgd2hlcmUgdGhlIHNlcnZlcgorICAgICAgICAgICAgc3RhcnRzIGlmIG5lZWRlZDsgb3IgcmVjb25uZWN0cyB0byB0aGUgc2VydmVyIGlmIHdlIGNhbgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuY29ubmVjdGlvbjoKKyAgICAgICAgICAgIHNlbGYuc3RhcnRCQlNlcnZlcigpCisgICAgICAgICAgICBzZWxmLmJlLmxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfUlVOTklORworICAgICAgICAgICAgc2VsZi5iZS5zYXZlKCkKKworICAgICAgICBzZXJ2ZXIgPSBiYi5zZXJ2ZXIueG1scnBjLkJpdEJha2VYTUxSUENDbGllbnQoKQorICAgICAgICBzZXJ2ZXIuaW5pdFNlcnZlcigpCisgICAgICAgIHNlcnZlci5zYXZlQ29ubmVjdGlvbkRldGFpbHMoIiVzOiVzIiAlIChzZWxmLmJlLmJiYWRkcmVzcywgc2VsZi5iZS5iYnBvcnQpKQorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBzZXJ2ZXIuZXN0YWJsaXNoQ29ubmVjdGlvbihbXSkKKworICAgICAgICBzZWxmLmJlLmJidG9rZW4gPSBzZWxmLmNvbm5lY3Rpb24udHJhbnNwb3J0LmNvbm5lY3Rpb25fdG9rZW4KKyAgICAgICAgc2VsZi5iZS5zYXZlKCkKKworICAgICAgICByZXR1cm4gQml0YmFrZUNvbnRyb2xsZXIoc2VsZi5jb25uZWN0aW9uKQorCisgICAgZGVmIGdldEFydGlmYWN0KHNlbGYsIHBhdGgpOgorICAgICAgICAiIiIgVGhpcyBjYWxsIHJldHVybnMgYW4gYXJ0aWZhY3QgaWRlbnRpZmllZCBieSB0aGUgJ3BhdGgnLiBIb3cgJ3BhdGgnIGlzIGludGVycHJldGVkIGFzCisgICAgICAgICAgICB1cCB0byB0aGUgaW1wbGVtZW50aW5nIEJFQy4gVGhlIHJldHVybiBNVVNUIGJlIGEgUkVTVCBVUkwgd2hlcmUgYSBHRVQgd2lsbCBhY3R1YWxseSByZXR1cm4KKyAgICAgICAgICAgIHRoZSBjb250ZW50IG9mIHRoZSBhcnRpZmFjdCwgZS5nLiBmb3IgdXNlIGFzIGEgImRvd25sb2FkIGxpbmsiIGluIGEgd2ViIFVJLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJNdXN0IHJldHVybiB0aGUgUkVTVCBVUkwgb2YgdGhlIGFydGlmYWN0IikKKworICAgIGRlZiByZWxlYXNlKHNlbGYpOgorICAgICAgICAiIiIgVGhpcyBzdG9wcyB0aGUgc2VydmVyIGFuZCByZWxlYXNlcyBhbnkgcmVzb3VyY2VzLiBBZnRlciB0aGlzIHBvaW50LCBhbGwgcmVzb3VyY2VzCisgICAgICAgICAgICBhcmUgdW4tYXZhaWxhYmxlIGZvciBmdXJ0aGVyIHJlZmVyZW5jZQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJNdXN0IG92ZXJyaWRlIEJFIHJlbGVhc2UiKQorCisgICAgZGVmIHRyaWdnZXJCdWlsZChzZWxmLCBiaXRiYWtlLCBsYXllcnMsIHZhcmlhYmxlcywgdGFyZ2V0cyk6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTXVzdCBvdmVycmlkZSBCRSByZWxlYXNlIikKKworY2xhc3MgU2hlbGxDbWRFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgQnVpbGRTZXR1cEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbG9jYWxob3N0YmVjb250cm9sbGVyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbG9jYWxob3N0YmVjb250cm9sbGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OTA5YjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9sb2NhbGhvc3RiZWNvbnRyb2xsZXIucHkKQEAgLTAsMCArMSwzMzYgQEAKKyMKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHJlCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgdHJhbnNhY3Rpb24KK2Zyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUQorZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRFbnZpcm9ubWVudCwgQlJMYXllciwgQlJWYXJpYWJsZSwgQlJUYXJnZXQsIEJSQml0YmFrZQoraW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSB0b2FzdGVybWFpbiBpbXBvcnQgc2V0dGluZ3MKKworZnJvbSBiYmNvbnRyb2xsZXIgaW1wb3J0IEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyLCBTaGVsbENtZEV4Y2VwdGlvbiwgQnVpbGRTZXR1cEV4Y2VwdGlvbgorCitpbXBvcnQgbG9nZ2luZworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInRvYXN0ZXIiKQorCitmcm9tIHBwcmludCBpbXBvcnQgcHByaW50LCBwZm9ybWF0CisKK2NsYXNzIExvY2FsaG9zdEJFQ29udHJvbGxlcihCdWlsZEVudmlyb25tZW50Q29udHJvbGxlcik6CisgICAgIiIiIEltcGxlbWVudGF0aW9uIG9mIHRoZSBCdWlsZEVudmlyb25tZW50Q29udHJvbGxlciBmb3IgdGhlIGxvY2FsaG9zdDsKKyAgICAgICAgdGhpcyBjb250cm9sbGVyIG1hbmFnZXMgdGhlIGRlZmF1bHQgYnVpbGQgZGlyZWN0b3J5LAorICAgICAgICB0aGUgc2VydmVyIHNldHVwIGFuZCBzeXN0ZW0gc3RhcnQgYW5kIHN0b3AgZm9yIHRoZSBsb2NhbGhvc3QtdHlwZSBidWlsZCBlbnZpcm9ubWVudAorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYmUpOgorICAgICAgICBzdXBlcihMb2NhbGhvc3RCRUNvbnRyb2xsZXIsIHNlbGYpLl9faW5pdF9fKGJlKQorICAgICAgICBzZWxmLmRidXJsID0gc2V0dGluZ3MuZ2V0REFUQUJBU0VfVVJMKCkKKyAgICAgICAgc2VsZi5wb2t5ZGlybmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5pc2xheWVyc2V0ID0gRmFsc2UKKworICAgIGRlZiBfc2hlbGxjbWQoc2VsZiwgY29tbWFuZCwgY3dkID0gTm9uZSk6CisgICAgICAgIGlmIGN3ZCBpcyBOb25lOgorICAgICAgICAgICAgY3dkID0gc2VsZi5iZS5zb3VyY2VkaXIKKworICAgICAgICBsb2dnZXIuZGVidWcoImxiY19zaGVsbGNtbWQ6ICglcykgJXMiICUgKGN3ZCwgY29tbWFuZCkpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNvbW1hbmQsIGN3ZCA9IGN3ZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgKG91dCxlcnIpID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHAud2FpdCgpCisgICAgICAgIGlmIHAucmV0dXJuY29kZToKKyAgICAgICAgICAgIGlmIGxlbihlcnIpID09IDA6CisgICAgICAgICAgICAgICAgZXJyID0gImNvbW1hbmQ6ICVzIFxuJXMiICUgKGNvbW1hbmQsIG91dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXJyID0gImNvbW1hbmQ6ICVzIFxuJXMiICUgKGNvbW1hbmQsIGVycikKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IHNoZWxsY21kIGVycm9yICVzIiAlIGVycikKKyAgICAgICAgICAgIHJhaXNlIFNoZWxsQ21kRXhjZXB0aW9uKGVycikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBzaGVsbGNtZCBzdWNjZXNzIikKKyAgICAgICAgICAgIHJldHVybiBvdXQKKworICAgIGRlZiBfc2V0dXBCRShzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYucG9reWRpcm5hbWUgYW5kIG9zLnBhdGguZXhpc3RzKHNlbGYucG9reWRpcm5hbWUpCisgICAgICAgIHBhdGggPSBzZWxmLmJlLmJ1aWxkZGlyCisgICAgICAgIGlmIG5vdCBwYXRoOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJJbnZhbGlkIHBhdGggY3JlYXRpb24gc3BlY2lmaWVkLiIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKHBhdGgsIDA3NTUpCisgICAgICAgIHNlbGYuX3NoZWxsY21kKCJiYXNoIC1jIFwic291cmNlICVzL29lLWluaXQtYnVpbGQtZW52ICVzXCIiICUgKHNlbGYucG9reWRpcm5hbWUsIHBhdGgpKQorICAgICAgICAjIGRlbGV0ZSB0aGUgdGVtcGxhdGVjb25mLmNmZzsgaXQgbWF5IGNvbWUgZnJvbSBhbiB1bnN1cHBvcnRlZCBsYXllciBjb25maWd1cmF0aW9uCisgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4ocGF0aCwgImNvbmYvdGVtcGxhdGVjb25mLmNmZyIpKQorCisKKyAgICBkZWYgd3JpdGVDb25mRmlsZShzZWxmLCBmaWxlX25hbWUsIHZhcmlhYmxlX2xpc3QgPSBOb25lLCByYXcgPSBOb25lKToKKyAgICAgICAgZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5iZS5idWlsZGRpciwgZmlsZV9uYW1lKQorICAgICAgICB3aXRoIG9wZW4oZmlsZXBhdGgsICJ3IikgYXMgY29uZmZpbGU6CisgICAgICAgICAgICBpZiB2YXJpYWJsZV9saXN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGZvciBpIGluIHZhcmlhYmxlX2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIGNvbmZmaWxlLndyaXRlKCIlcz1cIiVzXCJcbiIgJSAoaS5uYW1lLCBpLnZhbHVlKSkKKyAgICAgICAgICAgIGlmIHJhdyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjb25mZmlsZS53cml0ZShyYXcpCisKKworICAgIGRlZiBzdGFydEJCU2VydmVyKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5wb2t5ZGlybmFtZSBhbmQgb3MucGF0aC5leGlzdHMoc2VsZi5wb2t5ZGlybmFtZSkKKyAgICAgICAgYXNzZXJ0IHNlbGYuaXNsYXllcnNldAorCisgICAgICAgICMgZmluZCBvdXIgb3duIHRvYXN0ZXJ1aSBsaXN0ZW5lci9iaXRiYWtlCisgICAgICAgIGZyb20gdG9hc3Rlci5ibGRjb250cm9sLm1hbmFnZW1lbnQuY29tbWFuZHMubG9hZGNvbmYgaW1wb3J0IF9yZWR1Y2VfY2Fub25fcGF0aAorCisgICAgICAgIG93bl9iaXRiYWtlID0gX3JlZHVjZV9jYW5vbl9wYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSksICIuLi8uLi8uLi9iaW4vYml0YmFrZSIpKQorCisgICAgICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyhvd25fYml0YmFrZSkgYW5kIG9zLnBhdGguaXNmaWxlKG93bl9iaXRiYWtlKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBydW5uaW5nIHRoZSBsaXN0ZW5lciBhdCAlcyIgJSBvd25fYml0YmFrZSkKKworICAgICAgICB0b2FzdGVyX3VpX2xvZ19maWxlcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJlLmJ1aWxkZGlyLCAidG9hc3Rlcl91aS5sb2ciKQorICAgICAgICAjIGdldCB0aGUgZmlsZSBsZW5ndGg7IHdlIG5lZWQgdG8gZGV0ZWN0IHRoZSBfbGFzdF8gc3RhcnQgb2YgdGhlIHRvYXN0ZXIgVUksIG5vdCB0aGUgZmlyc3QKKyAgICAgICAgdG9hc3Rlcl91aV9sb2dfZmlsZWxlbmd0aCA9IDAKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHModG9hc3Rlcl91aV9sb2dfZmlsZXBhdGgpOgorICAgICAgICAgICAgd2l0aCBvcGVuKHRvYXN0ZXJfdWlfbG9nX2ZpbGVwYXRoLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi5zZWVrKDAsIDIpICAgICMganVtcCB0byB0aGUgZW5kCisgICAgICAgICAgICAgICAgdG9hc3Rlcl91aV9sb2dfZmlsZWxlbmd0aCA9IGYudGVsbCgpCisKKyAgICAgICAgY21kID0gImJhc2ggLWMgXCJzb3VyY2UgJXMvb2UtaW5pdC1idWlsZC1lbnYgJXMgMj4mMSA+dG9hc3Rlcl9zZXJ2ZXIubG9nICYmIGJpdGJha2UgLS1yZWFkICVzL2NvbmYvdG9hc3Rlci1wcmUuY29uZiAtLXBvc3RyZWFkICVzL2NvbmYvdG9hc3Rlci5jb25mIC0tc2VydmVyLW9ubHkgLXQgeG1scnBjIC1CIDAuMC4wLjA6MCAyPiYxID4+dG9hc3Rlcl9zZXJ2ZXIubG9nIFwiIiAlIChzZWxmLnBva3lkaXJuYW1lLCBzZWxmLmJlLmJ1aWxkZGlyLCBzZWxmLmJlLmJ1aWxkZGlyLCBzZWxmLmJlLmJ1aWxkZGlyKQorCisgICAgICAgIHBvcnQgPSAiLTEiCisgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBzdGFydGluZyBidWlsZGVyIFxuJXNcbiIgJSBjbWQpCisKKyAgICAgICAgY21kb3V0cHV0ID0gc2VsZi5fc2hlbGxjbWQoY21kKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5iZS5idWlsZGRpciArICIvdG9hc3Rlcl9zZXJ2ZXIubG9nIiwgInIiKSBhcyBmOgorICAgICAgICAgICAgZm9yIGkgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBpZiBpLnN0YXJ0c3dpdGgoIkJpdGJha2Ugc2VydmVyIGFkZHJlc3MiKToKKyAgICAgICAgICAgICAgICAgICAgcG9ydCA9IGkuc3BsaXQoIiAiKVstMV0KKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IEZvdW5kIGJpdGJha2Ugc2VydmVyIHBvcnQgJXMiICUgcG9ydCkKKworICAgICAgICBjbWQgPSAiYmFzaCAtYyBcInNvdXJjZSAlcy9vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXMgLTEgJXMgJiYgREFUQUJBU0VfVVJMPSVzICVzIC0tb2JzZXJ2ZS1vbmx5IC11IHRvYXN0ZXJ1aSAtLXJlbW90ZS1zZXJ2ZXI9MC4wLjAuMDotMSAtdCB4bWxycGNcIiIgJSAoc2VsZi5wb2t5ZGlybmFtZSwgc2VsZi5iZS5idWlsZGRpciwgc2VsZi5kYnVybCwgb3duX2JpdGJha2UpCisgICAgICAgIHdpdGggb3Blbih0b2FzdGVyX3VpX2xvZ19maWxlcGF0aCwgImErIikgYXMgZjoKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgY3dkID0gc2VsZi5iZS5idWlsZGRpciwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PWYsIHN0ZGVycj1mKQorCisgICAgICAgIGRlZiBfdG9hc3Rlcl91aV9zdGFydGVkKGZpbGVwYXRoLCBmaWxlcG9zID0gMCk6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZXBhdGgpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVwYXRoLCAiciIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi5zZWVrKGZpbGVwb3MpCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJOT1RFOiBUb2FzdGVyVUkgd2FpdGluZyBmb3IgZXZlbnRzIik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgcmV0cmllcyA9IDAKKyAgICAgICAgc3RhcnRlZCA9IEZhbHNlCisgICAgICAgIHdoaWxlIG5vdCBzdGFydGVkIGFuZCByZXRyaWVzIDwgNTA6CisgICAgICAgICAgICBzdGFydGVkID0gX3RvYXN0ZXJfdWlfc3RhcnRlZCh0b2FzdGVyX3VpX2xvZ19maWxlcGF0aCwgdG9hc3Rlcl91aV9sb2dfZmlsZWxlbmd0aCkKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogV2FpdGluZyBiaXRiYWtlIHNlcnZlciB0byBzdGFydCIpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgICAgIHJldHJpZXMgKz0gMQorCisgICAgICAgIGlmIG5vdCBzdGFydGVkOgorICAgICAgICAgICAgdG9hc3Rlcl91aV9sb2cgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLmJlLmJ1aWxkZGlyLCAidG9hc3Rlcl91aS5sb2ciKSwgInIiKS5yZWFkKCkKKyAgICAgICAgICAgIHRvYXN0ZXJfc2VydmVyX2xvZyA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuYmUuYnVpbGRkaXIsICJ0b2FzdGVyX3NlcnZlci5sb2ciKSwgInIiKS5yZWFkKCkKKyAgICAgICAgICAgIHJhaXNlIEJ1aWxkU2V0dXBFeGNlcHRpb24oImxvY2FsaG9zdGJlY29udHJvbGxlcjogQml0YmFrZSBzZXJ2ZXIgZGlkIG5vdCBzdGFydCBpbiAyNSBzZWNvbmRzLCBhYm9ydGluZyAoRXJyb3I6ICclcycgJyVzJykiICUgKHRvYXN0ZXJfdWlfbG9nLCB0b2FzdGVyX3NlcnZlcl9sb2cpKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBTdGFydGVkIGJpdGJha2Ugc2VydmVyIikKKworICAgICAgICB3aGlsZSBwb3J0ID09ICItMSI6CisgICAgICAgICAgICAjIHRoZSBwb3J0IHNwZWNpZmljYXRpb24gaXMgImF1dG9kZXRlY3QiOyByZWFkIHRoZSBiaXRiYWtlLmxvY2sgZmlsZQorICAgICAgICAgICAgd2l0aCBvcGVuKCIlcy9iaXRiYWtlLmxvY2siICUgc2VsZi5iZS5idWlsZGRpciwgInIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgICAgIGlmICI6IiBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IGxpbmUuc3BsaXQoIjoiKVsxXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogQXV0b2RldGVjdGVkIGJpdGJha2UgcG9ydCAlcyIsIHBvcnQpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGFzc2VydCBzZWxmLmJlLnNvdXJjZWRpciBhbmQgb3MucGF0aC5leGlzdHMoc2VsZi5iZS5idWlsZGRpcikKKyAgICAgICAgc2VsZi5iZS5iYmFkZHJlc3MgPSAibG9jYWxob3N0IgorICAgICAgICBzZWxmLmJlLmJicG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5iZS5iYnN0YXRlID0gQnVpbGRFbnZpcm9ubWVudC5TRVJWRVJfU1RBUlRFRAorICAgICAgICBzZWxmLmJlLnNhdmUoKQorCisgICAgZGVmIHN0b3BCQlNlcnZlcihzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYucG9reWRpcm5hbWUgYW5kIG9zLnBhdGguZXhpc3RzKHNlbGYucG9reWRpcm5hbWUpCisgICAgICAgIGFzc2VydCBzZWxmLmlzbGF5ZXJzZXQKKyAgICAgICAgc2VsZi5fc2hlbGxjbWQoImJhc2ggLWMgXCJzb3VyY2UgJXMvb2UtaW5pdC1idWlsZC1lbnYgJXMgJiYgJXMgc291cmNlIHRvYXN0ZXIgc3RvcFwiIiAlCisgICAgICAgICAgICAoc2VsZi5wb2t5ZGlybmFtZSwgc2VsZi5iZS5idWlsZGRpciwgKGxhbWJkYTogIiIgaWYgc2VsZi5iZS5iYnRva2VuIGlzIE5vbmUgZWxzZSAiQkJUT0tFTj0lcyIgJSBzZWxmLmJlLmJidG9rZW4pKCkpKQorICAgICAgICBzZWxmLmJlLmJic3RhdGUgPSBCdWlsZEVudmlyb25tZW50LlNFUlZFUl9TVE9QUEVECisgICAgICAgIHNlbGYuYmUuc2F2ZSgpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBTdG9wcGVkIGJpdGJha2Ugc2VydmVyIikKKworICAgIGRlZiBnZXRHaXRDbG9uZURpcmVjdG9yeShzZWxmLCB1cmwsIGJyYW5jaCk6CisgICAgICAgICIiIiBVdGlsaXR5IHRoYXQgcmV0dXJucyB0aGUgbGFzdCBjb21wb25lbnQgb2YgYSBnaXQgcGF0aCBhcyBkaXJlY3RvcnkKKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCByZQorICAgICAgICBjb21wb25lbnRzID0gcmUuc3BsaXQocidbOlwuXC9dJywgdXJsKQorICAgICAgICBiYXNlID0gY29tcG9uZW50c1stMl0gaWYgY29tcG9uZW50c1stMV0gPT0gImdpdCIgZWxzZSBjb21wb25lbnRzWy0xXQorCisgICAgICAgIGlmIGJyYW5jaCAhPSAiSEVBRCI6CisgICAgICAgICAgICByZXR1cm4gIl8lc18lcy50b2FzdGVyX2Nsb25lZCIgJSAoYmFzZSwgYnJhbmNoKQorCisKKyAgICAgICAgIyB3b3JkIG9mIGF0dGVudGlvbjsgdGhpcyBpcyBhIGxvY2FsaG9zdC1zcGVjaWZpYyBpc3N1ZTsgb25seSBvbiB0aGUgbG9jYWxob3N0IHdlIGV4cGVjdCB0byBoYXZlICJIRUFEIiByZWxlYXNlcworICAgICAgICAjIHdoaWNoIF9BTFdBWVNfIG1lYW5zIHRoZSBjdXJyZW50IHBva3kgY2hlY2tvdXQKKyAgICAgICAgZnJvbSBvcy5wYXRoIGltcG9ydCBkaXJuYW1lIGFzIEROCisgICAgICAgIGxvY2FsX2NoZWNrb3V0X3BhdGggPSBETihETihETihETihETihvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkpKSkKKyAgICAgICAgI2xvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiB1c2luZyBIRUFEIGNoZWNrb3V0IGluICVzIiAlIGxvY2FsX2NoZWNrb3V0X3BhdGgpCisgICAgICAgIHJldHVybiBsb2NhbF9jaGVja291dF9wYXRoCisKKworICAgIGRlZiBzZXRMYXllcnMoc2VsZiwgYml0YmFrZXMsIGxheWVycyk6CisgICAgICAgICIiIiBhIHdvcmQgb2YgYXR0ZW50aW9uOiBieSBjb252ZW50aW9uLCB0aGUgZmlyc3QgbGF5ZXIgZm9yIGFueSBidWlsZCB3aWxsIGJlIHBva3khICIiIgorCisgICAgICAgIGFzc2VydCBzZWxmLmJlLnNvdXJjZWRpciBpcyBub3QgTm9uZQorICAgICAgICBhc3NlcnQgbGVuKGJpdGJha2VzKSA9PSAxCisgICAgICAgICMgc2V0IGxheWVycyBpbiB0aGUgbGF5ZXJzb3VyY2UKKworICAgICAgICAjIDEuIGdldCBhIGxpc3Qgb2YgcmVwb3Mgd2l0aCBicmFuY2hlcywgYW5kIG1hcCBkaXJwYXRocyBmb3IgZWFjaCBsYXllcgorICAgICAgICBnaXRyZXBvcyA9IHt9CisKKyAgICAgICAgZ2l0cmVwb3NbKGJpdGJha2VzWzBdLmdpdHVybCwgYml0YmFrZXNbMF0uY29tbWl0KV0gPSBbXQorICAgICAgICBnaXRyZXBvc1soYml0YmFrZXNbMF0uZ2l0dXJsLCBiaXRiYWtlc1swXS5jb21taXQpXS5hcHBlbmQoICgiYml0YmFrZSIsIGJpdGJha2VzWzBdLmRpcnBhdGgpICkKKworICAgICAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgorICAgICAgICAgICAgIyB3ZSBkb24ndCBwcm9jZXNzIGxvY2FsIFVSTHMKKyAgICAgICAgICAgIGlmIGxheWVyLmdpdHVybC5zdGFydHN3aXRoKCJmaWxlOi8vIik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG5vdCAobGF5ZXIuZ2l0dXJsLCBsYXllci5jb21taXQpIGluIGdpdHJlcG9zOgorICAgICAgICAgICAgICAgIGdpdHJlcG9zWyhsYXllci5naXR1cmwsIGxheWVyLmNvbW1pdCldID0gW10KKyAgICAgICAgICAgIGdpdHJlcG9zWyhsYXllci5naXR1cmwsIGxheWVyLmNvbW1pdCldLmFwcGVuZCggKGxheWVyLm5hbWUsIGxheWVyLmRpcnBhdGgpICkKKworCisgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyLCBvdXIgZ2l0IHJlcG9zIGFyZSAlcyIgJSBwZm9ybWF0KGdpdHJlcG9zKSkKKworCisgICAgICAgICMgMi4gZmluZCBjaGVja2VkLW91dCBnaXQgcmVwb3MgaW4gdGhlIHNvdXJjZWRpciBkaXJlY3RvcnkgdGhhdCBtYXkgaGVscCBmYXN0ZXIgY2xvbmluZworCisgICAgICAgIGNhY2hlZF9sYXllcnMgPSB7fQorICAgICAgICBmb3IgbGRpciBpbiBvcy5saXN0ZGlyKHNlbGYuYmUuc291cmNlZGlyKToKKyAgICAgICAgICAgIGZsZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYmUuc291cmNlZGlyLCBsZGlyKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmbGRpcik6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9zaGVsbGNtZCgiZ2l0IHJlbW90ZSAtdiIsIGZsZGlyKS5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGUgPSBsaW5lLnNwbGl0KCJcdCIpWzFdLnNwbGl0KCIgIilbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZW1vdGUgbm90IGluIGNhY2hlZF9sYXllcnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZF9sYXllcnNbcmVtb3RlXSA9IGZsZGlyCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZXhjZXB0IFNoZWxsQ21kRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAjIGlnbm9yZSBhbnkgZXJyb3JzIGluIGNvbGxlY3RpbmcgZ2l0IHJlbW90ZXMKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGxheWVybGlzdCA9IFtdCisKKworICAgICAgICAjIDMuIGNoZWNrb3V0IHRoZSByZXBvc2l0b3JpZXMKKyAgICAgICAgZm9yIGdpdHVybCwgY29tbWl0IGluIGdpdHJlcG9zLmtleXMoKToKKyAgICAgICAgICAgIGxvY2FsZGlybmFtZSA9IG9zLnBhdGguam9pbihzZWxmLmJlLnNvdXJjZWRpciwgc2VsZi5nZXRHaXRDbG9uZURpcmVjdG9yeShnaXR1cmwsIGNvbW1pdCkpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogZ2l0dXJsICVzOiVzIGNoZWNraW5nIG91dCBpbiBjdXJyZW50IGRpcmVjdG9yeSAlcyIgJSAoZ2l0dXJsLCBjb21taXQsIGxvY2FsZGlybmFtZSkpCisKKyAgICAgICAgICAgICMgbWFrZSBzdXJlIG91ciBkaXJlY3RvcnkgaXMgYSBnaXQgcmVwb3NpdG9yeQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobG9jYWxkaXJuYW1lKToKKyAgICAgICAgICAgICAgICBsb2NhbHJlbW90ZXMgPSBzZWxmLl9zaGVsbGNtZCgiZ2l0IHJlbW90ZSAtdiIsIGxvY2FsZGlybmFtZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZ2l0dXJsIGluIGxvY2FscmVtb3RlczoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQnVpbGRTZXR1cEV4Y2VwdGlvbigiRXhpc3RpbmcgZ2l0IHJlcG9zaXRvcnkgYXQgJXMsIGJ1dCB3aXRoIGRpZmZlcmVudCByZW1vdGVzICgnJXMnLCBleHBlY3RlZCAnJXMnKS4gVG9hc3RlciB3aWxsIG5vdCBjb250aW51ZSBvdXQgb2YgZmVhciBvZiBkYW1hZ2luZyBzb21ldGhpbmcuIiAlIChsb2NhbGRpcm5hbWUsICIsICIuam9pbihsb2NhbHJlbW90ZXMuc3BsaXQoIlxuIikpLCBnaXR1cmwpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBnaXR1cmwgaW4gY2FjaGVkX2xheWVyczoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXIgZ2l0LWNvcHlpbmcgJXMgdG8gJXMiICUgKGNhY2hlZF9sYXllcnNbZ2l0dXJsXSwgbG9jYWxkaXJuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hlbGxjbWQoImdpdCBjbG9uZSBcIiVzXCIgXCIlc1wiIiAlIChjYWNoZWRfbGF5ZXJzW2dpdHVybF0sIGxvY2FsZGlybmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NoZWxsY21kKCJnaXQgcmVtb3RlIHJlbW92ZSBvcmlnaW4iLCBsb2NhbGRpcm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NoZWxsY21kKCJnaXQgcmVtb3RlIGFkZCBvcmlnaW4gXCIlc1wiIiAlIGdpdHVybCwgbG9jYWxkaXJuYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBjbG9uaW5nICVzOiVzIGluICVzIiAlIChnaXR1cmwsIGNvbW1pdCwgbG9jYWxkaXJuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hlbGxjbWQoImdpdCBjbG9uZSBcIiVzXCIgLS1zaW5nbGUtYnJhbmNoIC0tYnJhbmNoIFwiJXNcIiBcIiVzXCIiICUgKGdpdHVybCwgY29tbWl0LCBsb2NhbGRpcm5hbWUpKQorCisgICAgICAgICAgICAjIGJyYW5jaCBtYWdpYyBuYW1lICJIRUFEIiB3aWxsIGluaGliaXQgY2hlY2tvdXQKKyAgICAgICAgICAgIGlmIGNvbW1pdCAhPSAiSEVBRCI6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IGNoZWNraW5nIG91dCBjb21taXQgJXMgdG8gJXMgIiAlIChjb21taXQsIGxvY2FsZGlybmFtZSkpCisgICAgICAgICAgICAgICAgc2VsZi5fc2hlbGxjbWQoImdpdCBmZXRjaCAtLWFsbCAmJiBnaXQgY2hlY2tvdXQgXCIlc1wiICYmIGdpdCByZWJhc2UgXCJvcmlnaW4vJXNcIiIgJSAoY29tbWl0LCBjb21taXQpICwgbG9jYWxkaXJuYW1lKQorCisgICAgICAgICAgICAjIHRha2UgdGhlIGxvY2FsZGlybmFtZSBhcyBwb2t5IGRpciBpZiB3ZSBjYW4gZmluZCB0aGUgb2UtaW5pdC1idWlsZC1lbnYKKyAgICAgICAgICAgIGlmIHNlbGYucG9reWRpcm5hbWUgaXMgTm9uZSBhbmQgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGxvY2FsZGlybmFtZSwgIm9lLWluaXQtYnVpbGQtZW52IikpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBzZWxlY3RlZCBwb2t5IGRpciBuYW1lICVzIiAlIGxvY2FsZGlybmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLnBva3lkaXJuYW1lID0gbG9jYWxkaXJuYW1lCisKKyAgICAgICAgICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgd29ya2luZyBiaXRiYWtlCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLnBva3lkaXJuYW1lLCAnYml0YmFrZScpKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IGNoZWNraW5nIGJpdGJha2UgaW50byB0aGUgcG9reSBkaXJuYW1lICVzICIgJSBzZWxmLnBva3lkaXJuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaGVsbGNtZCgiZ2l0IGNsb25lIC1iIFwiJXNcIiBcIiVzXCIgXCIlc1wiICIgJSAoYml0YmFrZXNbMF0uY29tbWl0LCBiaXRiYWtlc1swXS5naXR1cmwsIG9zLnBhdGguam9pbihzZWxmLnBva3lkaXJuYW1lLCAnYml0YmFrZScpKSkKKworICAgICAgICAgICAgIyB2ZXJpZnkgb3VyIHJlcG9zaXRvcmllcworICAgICAgICAgICAgZm9yIG5hbWUsIGRpcnBhdGggaW4gZ2l0cmVwb3NbKGdpdHVybCwgY29tbWl0KV06CisgICAgICAgICAgICAgICAgbG9jYWxkaXJwYXRoID0gb3MucGF0aC5qb2luKGxvY2FsZGlybmFtZSwgZGlycGF0aCkKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogbG9jYWxkaXJwYXRoIGV4cGVjdGVkICclcyciICUgbG9jYWxkaXJwYXRoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsb2NhbGRpcnBhdGgpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBCdWlsZFNldHVwRXhjZXB0aW9uKCJDYW5ub3QgZmluZCBsYXllciBnaXQgcGF0aCAnJXMnIGluIGNoZWNrZWQgb3V0IHJlcG9zaXRvcnkgJyVzOiVzJy4gQWJvcnRpbmcuIiAlIChsb2NhbGRpcnBhdGgsIGdpdHVybCwgY29tbWl0KSkKKworICAgICAgICAgICAgICAgIGlmIG5hbWUgIT0gImJpdGJha2UiOgorICAgICAgICAgICAgICAgICAgICBsYXllcmxpc3QuYXBwZW5kKGxvY2FsZGlycGF0aC5yc3RyaXAoIi8iKSkKKworICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogY3VycmVudCBsYXllciBsaXN0ICVzICIgJSBwZm9ybWF0KGxheWVybGlzdCkpCisKKyAgICAgICAgIyA0LiBjb25maWd1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50LCBzbyB3ZSBoYXZlIGEgY29uZi9iYmxheWVycy5jb25mCisgICAgICAgIGFzc2VydCBzZWxmLnBva3lkaXJuYW1lIGlzIG5vdCBOb25lCisgICAgICAgIHNlbGYuX3NldHVwQkUoKQorCisgICAgICAgICMgNS4gdXBkYXRlIHRoZSBiYmxheWVycy5jb25mCisgICAgICAgIGJibGF5ZXJjb25mID0gb3MucGF0aC5qb2luKHNlbGYuYmUuYnVpbGRkaXIsICJjb25mL2JibGF5ZXJzLmNvbmYiKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYmJsYXllcmNvbmYpOgorICAgICAgICAgICAgcmFpc2UgQnVpbGRTZXR1cEV4Y2VwdGlvbigiQkUgaXMgbm90IGNvbnNpc3RlbnQ6IGJibGF5ZXJzLmNvbmYgZmlsZSBtaXNzaW5nIGF0ICVzIiAlIGJibGF5ZXJjb25mKQorCisgICAgICAgIEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyLl91cGRhdGVCQkxheWVycyhiYmxheWVyY29uZiwgbGF5ZXJsaXN0KQorCisgICAgICAgIHNlbGYuaXNsYXllcnNldCA9IFRydWUKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiByZWFkU2VydmVyTG9nRmlsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuYmUuYnVpbGRkaXIsICJ0b2FzdGVyX3NlcnZlci5sb2ciKSwgInIiKS5yZWFkKCkKKworICAgIGRlZiByZWxlYXNlKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5iZS5zb3VyY2VkaXIgYW5kIG9zLnBhdGguZXhpc3RzKHNlbGYuYmUuYnVpbGRkaXIpCisgICAgICAgIGltcG9ydCBzaHV0aWwKKyAgICAgICAgc2h1dGlsLnJtdHJlZShvcy5wYXRoLmpvaW4oc2VsZi5iZS5zb3VyY2VkaXIsICJidWlsZCIpKQorICAgICAgICBhc3NlcnQgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuYmUuYnVpbGRkaXIpCisKKworICAgIGRlZiB0cmlnZ2VyQnVpbGQoc2VsZiwgYml0YmFrZSwgbGF5ZXJzLCB2YXJpYWJsZXMsIHRhcmdldHMpOgorICAgICAgICAjIHNldCB1cCB0aGUgYnVpZCBlbnZpcm9ubWVudCB3aXRoIHRoZSBuZWVkZWQgbGF5ZXJzCisgICAgICAgIHNlbGYuc2V0TGF5ZXJzKGJpdGJha2UsIGxheWVycykKKyAgICAgICAgc2VsZi53cml0ZUNvbmZGaWxlKCJjb25mL3RvYXN0ZXItcHJlLmNvbmYiLCB2YXJpYWJsZXMpCisgICAgICAgIHNlbGYud3JpdGVDb25mRmlsZSgiY29uZi90b2FzdGVyLmNvbmYiLCByYXcgPSAiSU5IRVJJVCs9XCJ0b2FzdGVyIGJ1aWxkaGlzdG9yeVwiIikKKworICAgICAgICAjIGdldCB0aGUgYmIgc2VydmVyIHJ1bm5pbmcgd2l0aCB0aGUgYnVpbGQgcmVxIGlkIGFuZCBidWlsZCBlbnYgaWQKKyAgICAgICAgYmJjdHJsID0gc2VsZi5nZXRCQkNvbnRyb2xsZXIoKQorCisgICAgICAgICMgdHJpZ2dlciB0aGUgYnVpbGQgY29tbWFuZAorICAgICAgICB0YXNrID0gcmVkdWNlKGxhbWJkYSB4LCB5OiB4IGlmIGxlbih5KT09IDAgZWxzZSB5LCBtYXAobGFtYmRhIHk6IHkudGFzaywgdGFyZ2V0cykpCisgICAgICAgIGlmIGxlbih0YXNrKSA9PSAwOgorICAgICAgICAgICAgdGFzayA9IE5vbmUKKworICAgICAgICBiYmN0cmwuYnVpbGQobGlzdChtYXAobGFtYmRhIHg6eC50YXJnZXQsIHRhcmdldHMpKSwgdGFzaykKKworICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogQnVpbGQgbGF1bmNoZWQsIGV4aXRpbmcuIEZvbGxvdyBidWlsZCBsb2dzIGF0ICVzL3RvYXN0ZXJfdWkubG9nIiAlIHNlbGYuYmUuYnVpbGRkaXIpCisKKyAgICAgICAgIyBkaXNjb25uZWN0IGZyb20gdGhlIHNlcnZlcgorICAgICAgICBiYmN0cmwuZGlzY29ubmVjdCgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvY2hlY2tzZXR0aW5ncy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvY2hlY2tzZXR0aW5ncy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2NjN2M2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9jaGVja3NldHRpbmdzLnB5CkBAIC0wLDAgKzEsMjQ3IEBACitmcm9tIGRqYW5nby5jb3JlLm1hbmFnZW1lbnQuYmFzZSBpbXBvcnQgTm9BcmdzQ29tbWFuZCwgQ29tbWFuZEVycm9yCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgdHJhbnNhY3Rpb24KK2Zyb20gYmxkY29udHJvbC5iYmNvbnRyb2xsZXIgaW1wb3J0IGdldEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyLCBTaGVsbENtZEV4Y2VwdGlvbgorZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRSZXF1ZXN0LCBCdWlsZEVudmlyb25tZW50LCBCUkVycm9yCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFRvYXN0ZXJTZXR0aW5nLCBCdWlsZAoraW1wb3J0IG9zCitpbXBvcnQgc3lzLCB0cmFjZWJhY2sKKworZGVmIEROKHBhdGgpOgorICAgIGlmIHBhdGggaXMgTm9uZToKKyAgICAgICAgcmV0dXJuICIiCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguZGlybmFtZShwYXRoKQorCisKK2NsYXNzIENvbW1hbmQoTm9BcmdzQ29tbWFuZCk6CisgICAgYXJncyA9ICIiCisgICAgaGVscCA9ICJWZXJpZmllcyB0aGF0IHRoZSBjb25maWd1cmVkIHNldHRpbmdzIGFyZSB2YWxpZCBhbmQgdXNhYmxlLCBvciBwcm9tcHRzIHRoZSB1c2VyIHRvIGZpeCB0aGUgc2V0dGluZ3MuIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKENvbW1hbmQsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5ndWVzc3BhdGggPSBETihETihETihETihETihETihETihfX2ZpbGVfXykpKSkpKSkKKworICAgIGRlZiBfZmluZF9maXJzdF9wYXRoX2Zvcl9maWxlKHNlbGYsIHN0YXJ0ZGlyZWN0b3J5LCBmaWxlbmFtZSwgbGV2ZWwgPSAwKToKKyAgICAgICAgaWYgbGV2ZWwgPCAwOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZGlycyA9IFtdCisgICAgICAgIGZvciBpIGluIG9zLmxpc3RkaXIoc3RhcnRkaXJlY3RvcnkpOgorICAgICAgICAgICAgaiA9IG9zLnBhdGguam9pbihzdGFydGRpcmVjdG9yeSwgaSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGopOgorICAgICAgICAgICAgICAgIGlmIGkgPT0gZmlsZW5hbWU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFydGRpcmVjdG9yeQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGopOgorICAgICAgICAgICAgICAgIGRpcnMuYXBwZW5kKGopCisgICAgICAgIGZvciBqIGluIGRpcnM6CisgICAgICAgICAgICByZXQgPSBzZWxmLl9maW5kX2ZpcnN0X3BhdGhfZm9yX2ZpbGUoaiwgZmlsZW5hbWUsIGxldmVsIC0gMSkKKyAgICAgICAgICAgIGlmIHJldCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3JlY3Vyc2l2ZV9saXN0X2RpcmVjdG9yaWVzKHNlbGYsIHN0YXJ0ZGlyZWN0b3J5LCBsZXZlbCA9IDApOgorICAgICAgICBpZiBsZXZlbCA8IDA6CisgICAgICAgICAgICByZXR1cm4gW10KKyAgICAgICAgZGlycyA9IFtdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBpIGluIG9zLmxpc3RkaXIoc3RhcnRkaXJlY3RvcnkpOgorICAgICAgICAgICAgICAgIGogPSBvcy5wYXRoLmpvaW4oc3RhcnRkaXJlY3RvcnksIGkpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihqKToKKyAgICAgICAgICAgICAgICAgICAgZGlycy5hcHBlbmQoaikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZvciBqIGluIGRpcnM6CisgICAgICAgICAgICAgICAgZGlycyA9IGRpcnMgKyBzZWxmLl9yZWN1cnNpdmVfbGlzdF9kaXJlY3RvcmllcyhqLCBsZXZlbCAtIDEpCisgICAgICAgIHJldHVybiBkaXJzCisKKworICAgIGRlZiBfZ2V0X3N1Z2dlc3RlZF9zb3VyY2VkaXIoc2VsZiwgYmUpOgorICAgICAgICBpZiBiZS5iZXR5cGUgIT0gQnVpbGRFbnZpcm9ubWVudC5UWVBFX0xPQ0FMOgorICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgIHJldHVybiBETihETihETihzZWxmLl9maW5kX2ZpcnN0X3BhdGhfZm9yX2ZpbGUoc2VsZi5ndWVzc3BhdGgsICJ0b2FzdGVyY29uZi5qc29uIiwgNCkpKSkKKworICAgIGRlZiBfZ2V0X3N1Z2dlc3RlZF9idWlsZGRpcihzZWxmLCBiZSk6CisgICAgICAgIGlmIGJlLmJldHlwZSAhPSBCdWlsZEVudmlyb25tZW50LlRZUEVfTE9DQUw6CisgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgcmV0dXJuIEROKHNlbGYuX2ZpbmRfZmlyc3RfcGF0aF9mb3JfZmlsZShETihzZWxmLmd1ZXNzcGF0aCksICJiYmxheWVycy5jb25mIiwgNCkpCisKKworICAgIGRlZiBfdmVyaWZ5X2FydGlmYWN0X3N0b3JhZ2VfZGlyKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSB0aGF0IHdlIGhhdmUgYSBzZXR0aW5ncyBmb3IgZG93bmxvYWRpbmcgYXJ0aWZhY3RzCisgICAgICAgIHdoaWxlIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZmlsdGVyKG5hbWU9IkFSVElGQUNUU19TVE9SQUdFX0RJUiIpLmNvdW50KCkgPT0gMDoKKyAgICAgICAgICAgIGd1ZXNzZWRwYXRoID0gb3MuZ2V0Y3dkKCkgKyAiL3RvYXN0ZXJfYnVpbGRfYXJ0aWZhY3RzLyIKKyAgICAgICAgICAgIHByaW50KCJcblRvYXN0ZXIgbmVlZHMgdG8ga25vdyBpbiB3aGljaCBkaXJlY3RvcnkgaXQgY2FuIGRvd25sb2FkIGJ1aWxkIGxvZyBmaWxlcyBhbmQgb3RoZXIgYXJ0aWZhY3RzLlxuVG9hc3RlciBzdWdnZXN0cyBcIiVzXCIuIiAlIGd1ZXNzZWRwYXRoKQorICAgICAgICAgICAgYXJ0aWZhY3RzX3N0b3JhZ2VfZGlyID0gcmF3X2lucHV0KCJQcmVzcyBFbnRlciB0byBzZWxlY3QgXCIlc1wiIG9yIHR5cGUgdGhlIGZ1bGwgcGF0aCB0byBhIGRpZmZlcmVudCBkaXJlY3Rvcnk6ICIgJSBndWVzc2VkcGF0aCkKKyAgICAgICAgICAgIGlmIGxlbihhcnRpZmFjdHNfc3RvcmFnZV9kaXIpID09IDA6CisgICAgICAgICAgICAgICAgYXJ0aWZhY3RzX3N0b3JhZ2VfZGlyID0gZ3Vlc3NlZHBhdGgKKyAgICAgICAgICAgIGlmIGxlbihhcnRpZmFjdHNfc3RvcmFnZV9kaXIpID4gMCBhbmQgYXJ0aWZhY3RzX3N0b3JhZ2VfZGlyLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGFydGlmYWN0c19zdG9yYWdlX2RpcikKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBvc2U6CisgICAgICAgICAgICAgICAgICAgIGlmICJGaWxlIGV4aXN0cyIgaW4gc3RyKG9zZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBvc2UKKyAgICAgICAgICAgICAgICBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmNyZWF0ZShuYW1lPSJBUlRJRkFDVFNfU1RPUkFHRV9ESVIiLCB2YWx1ZT1hcnRpZmFjdHNfc3RvcmFnZV9kaXIpCisgICAgICAgIHJldHVybiAwCisKKworICAgIGRlZiBfdmVyaWZ5X2J1aWxkX2Vudmlyb25tZW50KHNlbGYpOgorICAgICAgICAjIHJlZnVzZSB0byBzdGFydCBpZiB3ZSBoYXZlIG5vIGJ1aWxkIGVudmlyb25tZW50cworICAgICAgICB3aGlsZSBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMuY291bnQoKSA9PSAwOgorICAgICAgICAgICAgcHJpbnQoIiAhISBObyBidWlsZCBlbnZpcm9ubWVudHMgZm91bmQuIFRvYXN0ZXIgbmVlZHMgYXQgbGVhc3Qgb25lIGJ1aWxkIGVudmlyb25tZW50IGluIG9yZGVyIHRvIGJlIGFibGUgdG8gcnVuIGJ1aWxkcy5cbiIgKworICAgICAgICAgICAgICAgICJZb3UgY2FuIG1hbnVhbGx5IGRlZmluZSBidWlsZCBlbnZpcm9ubWVudHMgaW4gdGhlIGRhdGFiYXNlIHRhYmxlIGJsZGNvbnRyb2xfYnVpbGRlbnZpcm9ubWVudC5cbiIgKworICAgICAgICAgICAgICAgICJPciBUb2FzdGVyIGNhbiBkZWZpbmUgYSBzaW1wbGUgbG9jYWxob3N0LWJhc2VkIGJ1aWxkIGVudmlyb25tZW50IGZvciB5b3UuIikKKworICAgICAgICAgICAgaSA9IHJhd19pbnB1dCgiIC0tICBEbyB5b3Ugd2FudCB0byBjcmVhdGUgYSBiYXNpYyBsb2NhbGhvc3QgYnVpbGQgZW52aXJvbm1lbnQgPyAoWS9uKSAiKTsKKyAgICAgICAgICAgIGlmIG5vdCBsZW4oaSkgb3IgaS5zdGFydHN3aXRoKCJ5Iikgb3IgaS5zdGFydHN3aXRoKCJZIik6CisgICAgICAgICAgICAgICAgQnVpbGRFbnZpcm9ubWVudC5vYmplY3RzLmNyZWF0ZShwayA9IDEsIGJldHlwZSA9IDApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVG9hc3RlciBjYW5ub3Qgc3RhcnQgd2l0aG91dCBidWlsZCBlbnZpcm9ubWVudHMuIEFib3J0aW5nLiIpCisKKworICAgICAgICAjIHdlIG1ha2Ugc3VyZSB3ZSBoYXZlIGJ1aWxkZGlyIGFuZCBzb3VyY2VkaXIgZm9yIGFsbCBkZWZpbmVkIGJ1aWxkIGVudmlvbm1lbnRzCisgICAgICAgIGZvciBiZSBpbiBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMuYWxsKCk6CisgICAgICAgICAgICBiZS5uZWVkc19pbXBvcnQgPSBGYWxzZQorICAgICAgICAgICAgZGVmIF92ZXJpZnlfYmUoKToKKyAgICAgICAgICAgICAgICBpc19jaGFuZ2VkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBwcmludCgiXG5WZXJpZnlpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50LiBJZiB0aGUgbG9jYWwgYnVpbGQgZW52aXJvbm1lbnQgaXMgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQsIHlvdSB3aWxsIGJlIGFza2VkIHRvIGNvbmZpZ3VyZSBpdC4iKQorCisgICAgICAgICAgICAgICAgZGVmIF91cGRhdGVfc291cmNlZGlyKCk6CisgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3RlZGRpciA9IHNlbGYuX2dldF9zdWdnZXN0ZWRfc291cmNlZGlyKGJlKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc3VnZ2VzdGVkZGlyKSA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBiZS5zb3VyY2VkaXIgPSByYXdfaW5wdXQoIlRoaXMgaXMgdGhlIGRpcmVjdG9yeSBUb2FzdGVyIHVzZXMgdG8gY2hlY2sgb3V0IHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgbGF5ZXJzIHlvdSB3aWxsIGJ1aWxkLiBUb2FzdGVyIHdpbGwgY3JlYXRlIG5ldyBjbG9uZXMgb2YgdGhlIGxheWVycywgc28gZXhpc3RpbmcgY29udGVudCBpbiB0aGUgY2hvc2VuIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjaGFuZ2VkLlxuVG9hc3RlciBzdWdnZXN0cyB5b3UgdXNlIFwiJXNcIiBhcyB5b3VyIGxheWVycyBjaGVja291dCBkaXJlY3RvcnkuIElmIHlvdSBzZWxlY3QgdGhpcyBkaXJlY3RvcnksIGEgbGF5ZXIgbGlrZSBcIm1ldGEtaW50ZWxcIiB3aWxsIGVuZCB1cCBpbiBcIiVzL21ldGEtaW50ZWxcIi5cblByZXNzIEVudGVyIHRvIHNlbGVjdCBcIiVzXCIgb3IgdHlwZSB0aGUgZnVsbCBwYXRoIHRvIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4gSWYgeW91IHByb3ZpZGUgeW91ciBvd24gZGlyZWN0b3J5LCBpdCBtdXN0IGJlIGEgcGFyZW50IG9mIHRoZSBjbG9uZWQgZGlyZWN0b3J5IGZvciB0aGUgc291cmNlcyB5b3UgYXJlIHVzaW5nIHRvIHJ1biBUb2FzdGVyOiAiICUgKHN1Z2dlc3RlZGRpciwgc3VnZ2VzdGVkZGlyLCBzdWdnZXN0ZWRkaXIpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmUuc291cmNlZGlyID0gcmF3X2lucHV0KCJUb2FzdGVyIG5lZWRzIHRvIGtub3cgaW4gd2hpY2ggZGlyZWN0b3J5IGl0IHNob3VsZCBjaGVjayBvdXQgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBsYXllcnMgeW91IHdpbGwgYnVpbGQuIFRoZSBkaXJlY3Rvcnkgc2hvdWxkIGJlIGEgcGFyZW50IG9mIHRoZSBjbG9uZWQgZGlyZWN0b3J5IGZvciB0aGUgc291cmNlcyB5b3UgYXJlIHVzaW5nIHRvIHJ1biBUb2FzdGVyLiBUb2FzdGVyIHdpbGwgY3JlYXRlIG5ldyBjbG9uZXMgb2YgdGhlIGxheWVycywgc28gZXhpc3RpbmcgY29udGVudCBpbiB0aGUgY2hvc2VuIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjaGFuZ2VkLlxuVHlwZSB0aGUgZnVsbCBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgKGZvciBleGFtcGxlOiBcIiVzXCI6ICIgJSBvcy5lbnZpcm9uLmdldCgnSE9NRScsICcvdG1wLycpKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oYmUuc291cmNlZGlyKSA9PSAwIGFuZCBsZW4oc3VnZ2VzdGVkZGlyKSA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBiZS5zb3VyY2VkaXIgPSBzdWdnZXN0ZWRkaXIKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgICAgIGlmIGxlbihiZS5zb3VyY2VkaXIpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbiAtLSBWYWxpZGF0aW9uOiBUaGUgbGF5ZXJzIGNoZWNrb3V0IGRpcmVjdG9yeSBtdXN0IGJlIHNldC4iCisgICAgICAgICAgICAgICAgICAgIGlzX2NoYW5nZWQgPSBfdXBkYXRlX3NvdXJjZWRpcigpCisKKyAgICAgICAgICAgICAgICBpZiBub3QgYmUuc291cmNlZGlyLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIC0tIFZhbGlkYXRpb246IFRoZSBsYXllcnMgY2hlY2tvdXQgZGlyZWN0b3J5IG11c3QgYmUgc2V0IHRvIGFuIGFic29sdXRlIHBhdGguIgorICAgICAgICAgICAgICAgICAgICBpc19jaGFuZ2VkID0gX3VwZGF0ZV9zb3VyY2VkaXIoKQorCisgICAgICAgICAgICAgICAgaWYgbm90IGJlLnNvdXJjZWRpciBpbiBETihfX2ZpbGVfXyk6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbiAtLSBWYWxpZGF0aW9uOiBUaGUgbGF5ZXJzIGNoZWNrb3V0IGRpcmVjdG9yeSBtdXN0IGJlIGEgcGFyZW50IG9mIHRoZSBjdXJyZW50IGNoZWNrb3V0LiIKKyAgICAgICAgICAgICAgICAgICAgaXNfY2hhbmdlZCA9IF91cGRhdGVfc291cmNlZGlyKCkKKworICAgICAgICAgICAgICAgIGlmIGlzX2NoYW5nZWQ6CisgICAgICAgICAgICAgICAgICAgIGlmIGJlLmJldHlwZSA9PSBCdWlsZEVudmlyb25tZW50LlRZUEVfTE9DQUw6CisgICAgICAgICAgICAgICAgICAgICAgICBiZS5uZWVkc19pbXBvcnQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgICAgICAgICBkZWYgX3VwZGF0ZV9idWlsZGRpcigpOgorICAgICAgICAgICAgICAgICAgICBzdWdnZXN0ZWRkaXIgPSBzZWxmLl9nZXRfc3VnZ2VzdGVkX2J1aWxkZGlyKGJlKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc3VnZ2VzdGVkZGlyKSA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBiZS5idWlsZGRpciA9IHJhd19pbnB1dCgiVG9hc3RlciBuZWVkcyB0byBrbm93IHdoZXJlIHlvdXIgYnVpbGQgZGlyZWN0b3J5IGlzIGxvY2F0ZWQuXG5UaGUgYnVpbGQgZGlyZWN0b3J5IGlzIHdoZXJlIGFsbCB0aGUgYXJ0aWZhY3RzIGNyZWF0ZWQgYnkgeW91ciBidWlsZHMgd2lsbCBiZSBzdG9yZWQuIFRvYXN0ZXIgc3VnZ2VzdHMgXCIlc1wiLlxuUHJlc3MgRW50ZXIgdG8gc2VsZWN0IFwiJXNcIiBvciB0eXBlIHRoZSBmdWxsIHBhdGggdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5OiAiICUgKHN1Z2dlc3RlZGRpciwgc3VnZ2VzdGVkZGlyKSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlLmJ1aWxkZGlyID0gcmF3X2lucHV0KCJUb2FzdGVyIG5lZWRzIHRvIGtub3cgd2hlcmUgaXMgeW91ciBidWlsZCBkaXJlY3RvcnkuXG5UaGUgYnVpbGQgZGlyZWN0b3J5IGlzIHdoZXJlIGFsbCB0aGUgYXJ0aWZhY3RzIGNyZWF0ZWQgYnkgeW91ciBidWlsZHMgd2lsbCBiZSBzdG9yZWQuIFR5cGUgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZGlyZWN0b3J5IChmb3IgZXhhbXBsZTogXCIgJXMvYnVpbGRcIikiICUgb3MuZW52aXJvbi5nZXQoJ0hPTUUnLCcvdG1wLycpKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oYmUuYnVpbGRkaXIpID09IDAgYW5kIGxlbihzdWdnZXN0ZWRkaXIpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlLmJ1aWxkZGlyID0gc3VnZ2VzdGVkZGlyCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgICAgICAgICBpZiBsZW4oYmUuYnVpbGRkaXIpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbiAtLSBWYWxpZGF0aW9uOiBUaGUgYnVpbGQgZGlyZWN0b3J5IG11c3QgYmUgc2V0LiIKKyAgICAgICAgICAgICAgICAgICAgaXNfY2hhbmdlZCA9IF91cGRhdGVfYnVpbGRkaXIoKQorCisgICAgICAgICAgICAgICAgaWYgbm90IGJlLmJ1aWxkZGlyLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIC0tIFZhbGlkYXRpb246IFRoZSBidWlsZCBkaXJlY3RvcnkgbXVzdCB0byBiZSBzZXQgdG8gYW4gYWJzb2x1dGUgcGF0aC4iCisgICAgICAgICAgICAgICAgICAgIGlzX2NoYW5nZWQgPSBfdXBkYXRlX2J1aWxkZGlyKCkKKworCisgICAgICAgICAgICAgICAgaWYgaXNfY2hhbmdlZDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuQnVpbGQgY29uZmlndXJhdGlvbiBzYXZlZCIKKyAgICAgICAgICAgICAgICAgICAgYmUuc2F2ZSgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKworICAgICAgICAgICAgICAgIGlmIGJlLm5lZWRzX2ltcG9ydDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuVG9hc3RlciBjYW4gdXNlIGEgU0lOR0xFIHByZWRlZmluZWQgY29uZmlndXJhdGlvbiBmaWxlIHRvIHNldCB1cCBkZWZhdWx0IHByb2plY3Qgc2V0dGluZ3MgYW5kIGxheWVyIGluZm9ybWF0aW9uIHNvdXJjZXMuXG4iCisKKyAgICAgICAgICAgICAgICAgICAgIyBmaW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGVzID0gW10KKyAgICAgICAgICAgICAgICAgICAgZm9yIGRpcm5hbWUgaW4gc2VsZi5fcmVjdXJzaXZlX2xpc3RfZGlyZWN0b3JpZXMoYmUuc291cmNlZGlyLDIpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGRpcm5hbWUsICIudGVtcGxhdGVjb25mIikpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oJ2Jhc2ggLWMgIi4gJytvcy5wYXRoLmpvaW4oZGlybmFtZSwgIi50ZW1wbGF0ZWNvbmYiKSsnOyBlY2hvIFwiXCRURU1QTEFURUNPTkZcIiInLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZmaWxlcGF0aCwgc3RkZXJyb3JvdXRwdXQgPSBwcm9jLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jLndhaXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByb2MucmV0dXJuY29kZSAhPSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBzb3VyY2UgVEVNUExBVEVDT05GOiAlcyIgJSBzdGRlcnJvcm91dHB1dCkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZmaWxlcGF0aCA9IG9zLnBhdGguam9pbihjb25mZmlsZXBhdGguc3RyaXAoKSwgInRvYXN0ZXJjb25mLmpzb24iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZWZpbGVwYXRoID0gb3MucGF0aC5qb2luKGRpcm5hbWUsIGNvbmZmaWxlcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAidG9hc3Rlcl9jbG9uZWQiIGluIGNhbmRpZGF0ZWZpbGVwYXRoOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNhbmRpZGF0ZWZpbGVwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGVzLmFwcGVuZChjYW5kaWRhdGVmaWxlcGF0aCkKKworICAgICAgICAgICAgICAgICAgICBpZiBsZW4oY29uZmlnX2ZpbGVzKSA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiVG9hc3RlciB3aWxsIGxpc3Qgbm93IHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgaXQgZm91bmQuIFNlbGVjdCB0aGUgbnVtYmVyIHRvIHVzZSB0aGUgZGVzaXJlZCBjb25maWd1cmF0aW9uIGZpbGUuIgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNmIGluIGNvbmZpZ19maWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiICBbJWRdIC0gJXMiICUgKGNvbmZpZ19maWxlcy5pbmRleChjZikgKyAxLCBjZikKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbiAgWzBdIC0gRXhpdCB3aXRob3V0IGltcG9ydGluZyBhbnkgZmlsZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHJhd19pbnB1dCgiXG5FbnRlciB5b3VyIG9wdGlvbjogIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGkpIGFuZCAoaW50KGkpIC0gMSA+PSAwIGFuZCBpbnQoaSkgLSAxIDwgbGVuKGNvbmZpZ19maWxlcykpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuSW1wb3J0aW5nIGZpbGU6ICVzIiAlIGNvbmZpZ19maWxlc1tpbnQoaSktMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gbG9hZGNvbmYgaW1wb3J0IENvbW1hbmQgYXMgTG9hZENvbmZpZ0NvbW1hbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9hZENvbmZpZ0NvbW1hbmQoKS5faW1wb3J0X2xheWVyX2NvbmZpZyhjb25maWdfZmlsZXNbaW50KGkpLTFdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3ZSBydW4gbHN1cGRhdGVzIGFmdGVyIGNvbmZpZyB1cGRhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbkxheWVyIGNvbmZpZ3VyYXRpb24gaW1wb3J0ZWQuIFVwZGF0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGxheWVyIHNvdXJjZXMsIHBsZWFzZSB3YWl0LlxuWW91IGNhbiByZS11cGRhdGUgYW55IHRpbWUgbGF0ZXIgYnkgcnVubmluZyBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBsc3VwZGF0ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGRqYW5nby5jb3JlLm1hbmFnZW1lbnQgaW1wb3J0IGNhbGxfY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbF9jb21tYW5kKCJsc3VwZGF0ZXMiKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdlIGRvbid0IGxvb2sgZm9yIGFueSBvdGhlciBjb25maWcgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc19jaGFuZ2VkCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkZhaWx1cmUgd2hpbGUgdHJ5aW5nIHRvIGltcG9ydCB0aGUgdG9hc3RlciBjb25maWcgZmlsZTogJXMiICUgZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJcblRvYXN0ZXIgY291bGQgbm90IGZpbmQgYSBjb25maWd1cmF0aW9uIGZpbGUuIFlvdSBuZWVkIHRvIGNvbmZpZ3VyZSBUb2FzdGVyIG1hbnVhbGx5IHVzaW5nIHRoZSB3ZWIgaW50ZXJmYWNlLCBvciBjcmVhdGUgYSBjb25maWd1cmF0aW9uIGZpbGUgYW5kIHVzZVxuICBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZXB5LnB5IGxvYWRjb25mIFtmaWxlbmFtZV1cbiBjb21tYW5kIHRvIGxvYWQgaXQuIFlvdSBjYW4gdXNlIGh0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvRmlsZTpUb2FzdGVyY29uZi5qc29uLnR4dC5wYXRjaCBhcyBhIHN0YXJ0aW5nIHBvaW50LiIKKworCisKKworICAgICAgICAgICAgICAgIHJldHVybiBpc19jaGFuZ2VkCisKKyAgICAgICAgICAgIHdoaWxlIChfdmVyaWZ5X2JlKCkpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBfdmVyaWZ5X2RlZmF1bHRfc2V0dGluZ3Moc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHRoYXQgZGVmYXVsdCBzZXR0aW5ncyBhcmUgdGhlcmUKKyAgICAgICAgaWYgVG9hc3RlclNldHRpbmcub2JqZWN0cy5maWx0ZXIobmFtZSA9ICdERUZBVUxUX1JFTEVBU0UnKS5jb3VudCgpICE9IDE6CisgICAgICAgICAgICBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmZpbHRlcihuYW1lID0gJ0RFRkFVTFRfUkVMRUFTRScpLmRlbGV0ZSgpCisgICAgICAgICAgICBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmdldF9vcl9jcmVhdGUobmFtZSA9ICdERUZBVUxUX1JFTEVBU0UnLCB2YWx1ZSA9ICcnKQorICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIF92ZXJpZnlfYnVpbGRzX2luX3Byb2dyZXNzKHNlbGYpOgorICAgICAgICAjIHdlIGFyZSBqdXN0IHN0YXJ0aW5nIHVwLiB3ZSBtdXN0IG5vdCBoYXZlIGFueSBidWlsZHMgaW4gcHJvZ3Jlc3MsIG9yIGJ1aWxkIGVudmlyb25tZW50cyB0YWtlbgorICAgICAgICBmb3IgYiBpbiBCdWlsZFJlcXVlc3Qub2JqZWN0cy5maWx0ZXIoc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX0lOUFJPR1JFU1MpOgorICAgICAgICAgICAgQlJFcnJvci5vYmplY3RzLmNyZWF0ZShyZXEgPSBiLCBlcnJ0eXBlID0gInRvYXN0ZXIiLCBlcnJtc2cgPSAiVG9hc3RlciBmb3VuZCB0aGlzIGJ1aWxkIElOIFBST0dSRVNTIHdoaWxlIFRvYXN0ZXIgc3RhcnRlZCB1cC4gVGhpcyBpcyBhbiBpbmNvbnNpc3RlbnQgc3RhdGUsIGFuZCB0aGUgYnVpbGQgd2FzIG1hcmtlZCBhcyBmYWlsZWQiKQorCisgICAgICAgIEJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihzdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfSU5QUk9HUkVTUykudXBkYXRlKHN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9GQUlMRUQpCisKKyAgICAgICAgQnVpbGRFbnZpcm9ubWVudC5vYmplY3RzLnVwZGF0ZShsb2NrID0gQnVpbGRFbnZpcm9ubWVudC5MT0NLX0ZSRUUpCisKKyAgICAgICAgIyBhbHNvIG1hcmsgIkluIFByb2dyZXNzIGJ1aWxkcyBhcyBmYWlsdXJlcyIKKyAgICAgICAgZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCisgICAgICAgIEJ1aWxkLm9iamVjdHMuZmlsdGVyKG91dGNvbWUgPSBCdWlsZC5JTl9QUk9HUkVTUykudXBkYXRlKG91dGNvbWUgPSBCdWlsZC5GQUlMRUQsIGNvbXBsZXRlZF9vbiA9IHRpbWV6b25lLm5vdygpKQorCisgICAgICAgIHJldHVybiAwCisKKworCisgICAgZGVmIGhhbmRsZV9ub2FyZ3Moc2VsZiwgKipvcHRpb25zKToKKyAgICAgICAgcmV0dmFsID0gMAorICAgICAgICByZXR2YWwgKz0gc2VsZi5fdmVyaWZ5X2FydGlmYWN0X3N0b3JhZ2VfZGlyKCkKKyAgICAgICAgcmV0dmFsICs9IHNlbGYuX3ZlcmlmeV9idWlsZF9lbnZpcm9ubWVudCgpCisgICAgICAgIHJldHZhbCArPSBzZWxmLl92ZXJpZnlfZGVmYXVsdF9zZXR0aW5ncygpCisgICAgICAgIHJldHZhbCArPSBzZWxmLl92ZXJpZnlfYnVpbGRzX2luX3Byb2dyZXNzKCkKKworICAgICAgICByZXR1cm4gcmV0dmFsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL2xvYWRjb25mLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9sb2FkY29uZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDIyYjU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9sb2FkY29uZi5weQpAQCAtMCwwICsxLDE4MyBAQAorZnJvbSBkamFuZ28uY29yZS5tYW5hZ2VtZW50LmJhc2UgaW1wb3J0IEJhc2VDb21tYW5kLCBDb21tYW5kRXJyb3IKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgTGF5ZXJTb3VyY2UsIFRvYXN0ZXJTZXR0aW5nLCBCcmFuY2gsIExheWVyLCBMYXllcl9WZXJzaW9uCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEJpdGJha2VWZXJzaW9uLCBSZWxlYXNlLCBSZWxlYXNlRGVmYXVsdExheWVyLCBSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eQorZnJvbSBkamFuZ28uZGIgaW1wb3J0IEludGVncml0eUVycm9yCitpbXBvcnQgb3MKKworZnJvbSBjaGVja3NldHRpbmdzIGltcG9ydCBETgorCitpbXBvcnQgbG9nZ2luZworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInRvYXN0ZXIiKQorCitkZWYgX3JlZHVjZV9jYW5vbl9wYXRoKHBhdGgpOgorICAgIGNvbXBvbmVudHMgPSBbXQorICAgIGZvciBjIGluIHBhdGguc3BsaXQoIi8iKToKKyAgICAgICAgaWYgYyA9PSAiLi4iOgorICAgICAgICAgICAgZGVsIGNvbXBvbmVudHNbLTFdCisgICAgICAgIGVsaWYgYyA9PSAiLiI6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb21wb25lbnRzLmFwcGVuZChjKQorICAgIGlmIGxlbihjb21wb25lbnRzKSA8IDI6CisgICAgICAgIGNvbXBvbmVudHMuYXBwZW5kKCcnKQorICAgIHJldHVybiAiLyIuam9pbihjb21wb25lbnRzKQorCitkZWYgX2dldF9pZF9mb3Jfc291cmNldHlwZShzKToKKyAgICBmb3IgaSBpbiBMYXllclNvdXJjZS5TT1VSQ0VfVFlQRToKKyAgICAgICAgaWYgcyA9PSBpWzFdOgorICAgICAgICAgICAgcmV0dXJuIGlbMF0KKyAgICByYWlzZSBFeGNlcHRpb24oIkNvdWxkIG5vdCBmaW5kIGRlZmluaXRpb24gZm9yIHNvdXJjZXR5cGUgJyVzJy4gVmFsaWQgc291cmNlIHR5cGVzIGFyZSAlcyIgJSAoc3RyKHMpLCAnLCAnLmpvaW4obWFwKGxhbWJkYSB4OiAiJyVzJyIgJSB4WzFdLCBMYXllclNvdXJjZS5TT1VSQ0VfVFlQRSApKSkpCisKK2NsYXNzIENvbW1hbmQoQmFzZUNvbW1hbmQpOgorICAgIGhlbHAgPSAiTG9hZHMgYSB0b2FzdGVyY29uZi5qc29uIGZpbGUgaW4gdGhlIGRhdGFiYXNlIgorICAgIGFyZ3MgPSAiZmlsZXBhdGgiCisKKworCisgICAgZGVmIF9pbXBvcnRfbGF5ZXJfY29uZmlnKHNlbGYsIGZpbGVwYXRoKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVwYXRoKSBvciBub3Qgb3MucGF0aC5pc2ZpbGUoZmlsZXBhdGgpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gZmluZCB0b2FzdGVyIGNvbmZpZyBmaWxlICVzIC4iICUgZmlsZXBhdGgpCisKKyAgICAgICAgaW1wb3J0IGpzb24KKyAgICAgICAgZGF0YSA9IGpzb24ubG9hZHMob3BlbihmaWxlcGF0aCwgInIiKS5yZWFkKCkpCisKKyAgICAgICAgIyB2ZXJpZnkgY29uZmlnIGZpbGUgdmFsaWRpdHkgYmVmb3JlIHVwZGF0aW5nIHNldHRpbmdzCisgICAgICAgIGZvciBpIGluIFsnYml0YmFrZScsICdyZWxlYXNlcycsICdkZWZhdWx0cmVsZWFzZScsICdjb25maWcnLCAnbGF5ZXJzb3VyY2VzJ106CisgICAgICAgICAgICBhc3NlcnQgaSBpbiBkYXRhCisKKyAgICAgICAgZGVmIF9yZWFkX2dpdF91cmxfZnJvbV9sb2NhbF9yZXBvc2l0b3J5KGFkZHJlc3MpOgorICAgICAgICAgICAgdXJsID0gTm9uZQorICAgICAgICAgICAgIyB3ZSBkZXRlY3QgdGhlIHJlbW90ZSBuYW1lIGF0IHJ1bnRpbWUKKyAgICAgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgICAgICAgICAocmVtb3RlLCByZW1vdGVfbmFtZSkgPSBhZGRyZXNzLnNwbGl0KCI6IiwgMSkKKyAgICAgICAgICAgIGNtZCA9IHN1YnByb2Nlc3MuUG9wZW4oImdpdCByZW1vdGUgLXYiLCBzaGVsbD1UcnVlLCBjd2QgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZXBhdGgpLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnIgPSBzdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICAob3V0LGVycikgPSBjbWQuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgaWYgY21kLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoIkVycm9yIHdoaWxlIGltcG9ydGluZyBsYXllciB2Y3NfdXJsOiBnaXQgZXJyb3I6ICVzIiAlIGVycikKKyAgICAgICAgICAgIGZvciBsaW5lIGluIG91dC5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIChuYW1lLCBwYXRoKSA9IGxpbmUuc3BsaXQoIlx0IiwgMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSByZW1vdGVfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHBhdGguc3BsaXQoIiAiKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgdXJsID09IE5vbmU6CisgICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCJFcnJvciB3aGlsZSBsb29raW5nIGZvciByZW1vdGUgXCIlc1wiIGluIFwiJXNcIiIgJSAocmVtb3RlX25hbWUsIG91dCkpCisgICAgICAgICAgICByZXR1cm4gdXJsCisKKworICAgICAgICAjIGltcG9ydCBiaXRiYWtlIGRhdGEKKyAgICAgICAgZm9yIGJ2aSBpbiBkYXRhWydiaXRiYWtlJ106CisgICAgICAgICAgICBidm8sIGNyZWF0ZWQgPSBCaXRiYWtlVmVyc2lvbi5vYmplY3RzLmdldF9vcl9jcmVhdGUobmFtZT1idmlbJ25hbWUnXSkKKyAgICAgICAgICAgIGlmIGJ2aVsnZ2l0dXJsJ10uc3RhcnRzd2l0aCgicmVtb3RlOiIpOgorICAgICAgICAgICAgICAgIGJ2by5naXR1cmwgPSBfcmVhZF9naXRfdXJsX2Zyb21fbG9jYWxfcmVwb3NpdG9yeShidmlbJ2dpdHVybCddKQorICAgICAgICAgICAgICAgIGlmIGJ2by5naXR1cmwgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJUaGUgdG9hc3RlciBjb25maWcgZmlsZSByZWZlcmVuY2VzIHRoZSBsb2NhbCBnaXQgcmVwbywgYnV0IFRvYXN0ZXIgY2Fubm90IGRldGVjdCBpdC5cbllvdXIgbG9jYWwgY29uZmlndXJhdGlvbiBmb3IgYml0YmFrZSB2ZXJzaW9uICVzIGlzIGludmFsaWQuIE1ha2Ugc3VyZSB0aGF0IHRoZSB0b2FzdGVyY29uZi5qc29uIGZpbGUgaXMgY29ycmVjdC4iICUgYnZpWyduYW1lJ10pCisKKyAgICAgICAgICAgIGlmIGJ2by5naXR1cmwgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBidm8uZ2l0dXJsID0gYnZpWydnaXR1cmwnXQorICAgICAgICAgICAgYnZvLmJyYW5jaCA9IGJ2aVsnYnJhbmNoJ10KKyAgICAgICAgICAgIGJ2by5kaXJwYXRoID0gYnZpWydkaXJwYXRoJ10KKyAgICAgICAgICAgIGJ2by5zYXZlKCkKKworICAgICAgICAjIHNldCB0aGUgbGF5ZXIgc291cmNlcworICAgICAgICBmb3IgbHNpIGluIGRhdGFbJ2xheWVyc291cmNlcyddOgorICAgICAgICAgICAgYXNzZXJ0ICdzb3VyY2V0eXBlJyBpbiBsc2kKKyAgICAgICAgICAgIGFzc2VydCAnYXBpdXJsJyBpbiBsc2kKKyAgICAgICAgICAgIGFzc2VydCAnbmFtZScgaW4gbHNpCisgICAgICAgICAgICBhc3NlcnQgJ2JyYW5jaGVzJyBpbiBsc2kKKworCisgICAgICAgICAgICBpZiBfZ2V0X2lkX2Zvcl9zb3VyY2V0eXBlKGxzaVsnc291cmNldHlwZSddKSA9PSBMYXllclNvdXJjZS5UWVBFX0xBWUVSSU5ERVggb3IgbHNpWydhcGl1cmwnXS5zdGFydHN3aXRoKCIvIik6CisgICAgICAgICAgICAgICAgYXBpdXJsID0gbHNpWydhcGl1cmwnXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhcGl1cmwgPSBfcmVkdWNlX2Nhbm9uX3BhdGgob3MucGF0aC5qb2luKEROKG9zLnBhdGguYWJzcGF0aChmaWxlcGF0aCkpLCBsc2lbJ2FwaXVybCddKSkKKworICAgICAgICAgICAgYXNzZXJ0ICgoX2dldF9pZF9mb3Jfc291cmNldHlwZShsc2lbJ3NvdXJjZXR5cGUnXSkgPT0gTGF5ZXJTb3VyY2UuVFlQRV9MQVlFUklOREVYKSBvciBhcGl1cmwuc3RhcnRzd2l0aCgiLyIpKSwgKGxzaVsnc291cmNldHlwZSddLGFwaXVybCkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxzLCBjcmVhdGVkID0gTGF5ZXJTb3VyY2Uub2JqZWN0cy5nZXRfb3JfY3JlYXRlKHNvdXJjZXR5cGUgPSBfZ2V0X2lkX2Zvcl9zb3VyY2V0eXBlKGxzaVsnc291cmNldHlwZSddKSwgYXBpdXJsID0gYXBpdXJsKQorICAgICAgICAgICAgICAgIGxzLm5hbWUgPSBsc2lbJ25hbWUnXQorICAgICAgICAgICAgICAgIGxzLnNhdmUoKQorICAgICAgICAgICAgZXhjZXB0IEludGVncml0eUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkludGVncml0eUVycm9yICVzIFxuV2hpbGUgc2V0dGluZyBuYW1lICVzIGZvciBsYXllciBzb3VyY2UgJXMgIiAlIChlLCBsc2lbJ25hbWUnXSwgbHMpKQorCisKKyAgICAgICAgICAgIGxheWVyYnJhbmNoZXMgPSBbXQorICAgICAgICAgICAgZm9yIGJyYW5jaG5hbWUgaW4gbHNpWydicmFuY2hlcyddOgorICAgICAgICAgICAgICAgIGJvLCBjcmVhdGVkID0gQnJhbmNoLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl9zb3VyY2UgPSBscywgbmFtZSA9IGJyYW5jaG5hbWUpCisgICAgICAgICAgICAgICAgbGF5ZXJicmFuY2hlcy5hcHBlbmQoYm8pCisKKyAgICAgICAgICAgIGlmICdsYXllcnMnIGluIGxzaToKKyAgICAgICAgICAgICAgICBmb3IgbGF5ZXJpbmZvIGluIGxzaVsnbGF5ZXJzJ106CisgICAgICAgICAgICAgICAgICAgIGxvLCBjcmVhdGVkID0gTGF5ZXIub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyX3NvdXJjZSA9IGxzLCBuYW1lID0gbGF5ZXJpbmZvWyduYW1lJ10pCisgICAgICAgICAgICAgICAgICAgIGlmIGxheWVyaW5mb1snbG9jYWxfcGF0aCddLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvLmxvY2FsX3BhdGggPSBsYXllcmluZm9bJ2xvY2FsX3BhdGgnXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbG8ubG9jYWxfcGF0aCA9IF9yZWR1Y2VfY2Fub25fcGF0aChvcy5wYXRoLmpvaW4obHMuYXBpdXJsLCBsYXllcmluZm9bJ2xvY2FsX3BhdGgnXSkpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxvLmxvY2FsX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJMb2NhbCBsYXllciBwYXRoICVzIG11c3QgZXhpc3RzLiBBcmUgeW91IHRyeWluZyB0byBpbXBvcnQgYSBsYXllciB0aGF0IGRvZXMgbm90IGV4aXN0ID8gQ2hlY2sgeW91ciBsb2NhbCB0b2FzdGVyY29uZi5qc29uIiAlIGxvLmxvY2FsX3BhdGgpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgbGF5ZXJpbmZvWyd2Y3NfdXJsJ10uc3RhcnRzd2l0aCgicmVtb3RlOiIpOgorICAgICAgICAgICAgICAgICAgICAgICAgbG8udmNzX3VybCA9IF9yZWFkX2dpdF91cmxfZnJvbV9sb2NhbF9yZXBvc2l0b3J5KGxheWVyaW5mb1sndmNzX3VybCddKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbG8udmNzX3VybCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVGhlIHRvYXN0ZXIgY29uZmlnIGZpbGUgcmVmZXJlbmNlcyB0aGUgbG9jYWwgZ2l0IHJlcG8sIGJ1dCBUb2FzdGVyIGNhbm5vdCBkZXRlY3QgaXQuXG5Zb3VyIGxvY2FsIGNvbmZpZ3VyYXRpb24gZm9yIGxheWVyICVzIGlzIGludmFsaWQuIE1ha2Ugc3VyZSB0aGF0IHRoZSB0b2FzdGVyY29uZi5qc29uIGZpbGUgaXMgY29ycmVjdC4iICUgbGF5ZXJpbmZvWyduYW1lJ10pCisKKyAgICAgICAgICAgICAgICAgICAgaWYgbG8udmNzX3VybCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgbG8udmNzX3VybCA9IGxheWVyaW5mb1sndmNzX3VybCddCisKKyAgICAgICAgICAgICAgICAgICAgaWYgJ2xheWVyX2luZGV4X3VybCcgaW4gbGF5ZXJpbmZvOgorICAgICAgICAgICAgICAgICAgICAgICAgbG8ubGF5ZXJfaW5kZXhfdXJsID0gbGF5ZXJpbmZvWydsYXllcl9pbmRleF91cmwnXQorICAgICAgICAgICAgICAgICAgICBsby5zYXZlKCkKKworICAgICAgICAgICAgICAgICAgICBmb3IgYnJhbmNoIGluIGxheWVyYnJhbmNoZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBsdm8sIGNyZWF0ZWQgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl9zb3VyY2UgPSBscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBfYnJhbmNoID0gYnJhbmNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXQgPSBicmFuY2gubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgPSBsbykKKyAgICAgICAgICAgICAgICAgICAgICAgIGx2by5kaXJwYXRoID0gbGF5ZXJpbmZvWydkaXJwYXRoJ10KKyAgICAgICAgICAgICAgICAgICAgICAgIGx2by5zYXZlKCkKKyAgICAgICAgIyBzZXQgcmVsZWFzZXMKKyAgICAgICAgZm9yIHJpIGluIGRhdGFbJ3JlbGVhc2VzJ106CisgICAgICAgICAgICBidm8gPSBCaXRiYWtlVmVyc2lvbi5vYmplY3RzLmdldChuYW1lID0gcmlbJ2JpdGJha2UnXSkKKyAgICAgICAgICAgIGFzc2VydCBidm8gaXMgbm90IE5vbmUKKworICAgICAgICAgICAgcm8sIGNyZWF0ZWQgPSBSZWxlYXNlLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShuYW1lID0gcmlbJ25hbWUnXSwgYml0YmFrZV92ZXJzaW9uID0gYnZvLCBicmFuY2hfbmFtZSA9IHJpWydicmFuY2gnXSkKKyAgICAgICAgICAgIHJvLmRlc2NyaXB0aW9uID0gcmlbJ2Rlc2NyaXB0aW9uJ10KKyAgICAgICAgICAgIHJvLmhlbHB0ZXh0ID0gcmlbJ2hlbHB0ZXh0J10KKyAgICAgICAgICAgIHJvLnNhdmUoKQorCisgICAgICAgICAgICAjIHNhdmUgbGF5ZXIgc291cmNlIHByaW9yaXR5IGZvciByZWxlYXNlCisgICAgICAgICAgICBmb3IgbHNfbmFtZSBpbiByaVsnbGF5ZXJzb3VyY2Vwcmlvcml0eSddLmtleXMoKToKKyAgICAgICAgICAgICAgICBybHNwbywgY3JlYXRlZCA9IFJlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5Lm9iamVjdHMuZ2V0X29yX2NyZWF0ZShyZWxlYXNlID0gcm8sIGxheWVyX3NvdXJjZSA9IExheWVyU291cmNlLm9iamVjdHMuZ2V0KG5hbWU9bHNfbmFtZSkpCisgICAgICAgICAgICAgICAgcmxzcG8ucHJpb3JpdHkgPSByaVsnbGF5ZXJzb3VyY2Vwcmlvcml0eSddW2xzX25hbWVdCisgICAgICAgICAgICAgICAgcmxzcG8uc2F2ZSgpCisKKyAgICAgICAgICAgIGZvciBkbGkgaW4gcmlbJ2RlZmF1bHRsYXllcnMnXToKKyAgICAgICAgICAgICAgICAjIGZpbmQgbGF5ZXJzIHdpdGggdGhlIHNhbWUgbmFtZQorICAgICAgICAgICAgICAgIFJlbGVhc2VEZWZhdWx0TGF5ZXIub2JqZWN0cy5nZXRfb3JfY3JlYXRlKCByZWxlYXNlID0gcm8sIGxheWVyX25hbWUgPSBkbGkpCisKKyAgICAgICAgIyBzZXQgZGVmYXVsdCByZWxlYXNlCisgICAgICAgIGlmIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZmlsdGVyKG5hbWUgPSAiREVGQVVMVF9SRUxFQVNFIikuY291bnQoKSA+IDA6CisgICAgICAgICAgICBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmZpbHRlcihuYW1lID0gIkRFRkFVTFRfUkVMRUFTRSIpLnVwZGF0ZSh2YWx1ZSA9IGRhdGFbJ2RlZmF1bHRyZWxlYXNlJ10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmNyZWF0ZShuYW1lID0gIkRFRkFVTFRfUkVMRUFTRSIsIHZhbHVlID0gZGF0YVsnZGVmYXVsdHJlbGVhc2UnXSkKKworICAgICAgICAjIHNldCBkZWZhdWx0IGNvbmZpZyB2YXJpYWJsZXMKKyAgICAgICAgZm9yIGNvbmZpZ25hbWUgaW4gZGF0YVsnY29uZmlnJ106CisgICAgICAgICAgICBpZiBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmZpbHRlcihuYW1lID0gIkRFRkNPTkZfIiArIGNvbmZpZ25hbWUpLmNvdW50KCkgPiAwOgorICAgICAgICAgICAgICAgIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZmlsdGVyKG5hbWUgPSAiREVGQ09ORl8iICsgY29uZmlnbmFtZSkudXBkYXRlKHZhbHVlID0gZGF0YVsnY29uZmlnJ11bY29uZmlnbmFtZV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuY3JlYXRlKG5hbWUgPSAiREVGQ09ORl8iICsgY29uZmlnbmFtZSwgdmFsdWUgPSBkYXRhWydjb25maWcnXVtjb25maWduYW1lXSkKKworCisgICAgZGVmIGhhbmRsZShzZWxmLCAqYXJncywgKipvcHRpb25zKToKKyAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgICAgICByYWlzZSBDb21tYW5kRXJyb3IoIk5lZWQgYSBwYXRoIHRvIHRoZSB0b2FzdGVyY29uZi5qc29uIGZpbGUiKQorICAgICAgICBmaWxlcGF0aCA9IGFyZ3NbMF0KKyAgICAgICAgc2VsZi5faW1wb3J0X2xheWVyX2NvbmZpZyhmaWxlcGF0aCkKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvcnVuYnVpbGRzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9ydW5idWlsZHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNlOWI3NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvcnVuYnVpbGRzLnB5CkBAIC0wLDAgKzEsMTUzIEBACitmcm9tIGRqYW5nby5jb3JlLm1hbmFnZW1lbnQuYmFzZSBpbXBvcnQgTm9BcmdzQ29tbWFuZCwgQ29tbWFuZEVycm9yCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgdHJhbnNhY3Rpb24KK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgQnVpbGQsIFRvYXN0ZXJTZXR0aW5nLCBMb2dNZXNzYWdlLCBUYXJnZXQKK2Zyb20gYmxkY29udHJvbC5iYmNvbnRyb2xsZXIgaW1wb3J0IGdldEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyLCBTaGVsbENtZEV4Y2VwdGlvbiwgQnVpbGRTZXR1cEV4Y2VwdGlvbgorZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRSZXF1ZXN0LCBCdWlsZEVudmlyb25tZW50LCBCUkVycm9yLCBCUlZhcmlhYmxlCitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJUb2FzdGVyU2NoZWR1bGVyIikKKworY2xhc3MgQ29tbWFuZChOb0FyZ3NDb21tYW5kKToKKyAgICBhcmdzICAgID0gIiIKKyAgICBoZWxwICAgID0gIlNjaGVkdWxlcyBhbmQgZXhlY3V0ZXMgYnVpbGQgcmVxdWVzdHMgYXMgcG9zc2libGUuIERvZXMgbm90IHJldHVybiAoaW50ZXJydXB0IHdpdGggQ3RybC1DKSIKKworCisgICAgQHRyYW5zYWN0aW9uLmNvbW1pdF9vbl9zdWNjZXNzCisgICAgZGVmIF9zZWxlY3RCdWlsZEVudmlyb25tZW50KHNlbGYpOgorICAgICAgICBiZWMgPSBnZXRCdWlsZEVudmlyb25tZW50Q29udHJvbGxlcihsb2NrID0gQnVpbGRFbnZpcm9ubWVudC5MT0NLX0ZSRUUpCisgICAgICAgIGJlYy5iZS5sb2NrID0gQnVpbGRFbnZpcm9ubWVudC5MT0NLX0xPQ0sKKyAgICAgICAgYmVjLmJlLnNhdmUoKQorICAgICAgICByZXR1cm4gYmVjCisKKyAgICBAdHJhbnNhY3Rpb24uY29tbWl0X29uX3N1Y2Nlc3MKKyAgICBkZWYgX3NlbGVjdEJ1aWxkUmVxdWVzdChzZWxmKToKKyAgICAgICAgYnIgPSBCdWlsZFJlcXVlc3Qub2JqZWN0cy5maWx0ZXIoc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX1FVRVVFRCkub3JkZXJfYnkoJ3BrJylbMF0KKyAgICAgICAgYnIuc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX0lOUFJPR1JFU1MKKyAgICAgICAgYnIuc2F2ZSgpCisgICAgICAgIHJldHVybiBicgorCisgICAgZGVmIHNjaGVkdWxlKHNlbGYpOgorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJyID0gTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgc2VsZWN0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBhbmQgdGhlIHJlcXVlc3QgdG8gYnVpbGQKKyAgICAgICAgICAgICAgICBiciA9IHNlbGYuX3NlbGVjdEJ1aWxkUmVxdWVzdCgpCisgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICNsb2dnZXIuZGVidWcoInJ1bmJ1aWxkczogTm8gYnVpbGQgcmVxdWVzdCIpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYmVjID0gc2VsZi5fc2VsZWN0QnVpbGRFbnZpcm9ubWVudCgpCisgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICMgd2UgY291bGQgbm90IGZpbmQgYSBCRUM7IHBvc3Rwb25lIHRoZSBCUgorICAgICAgICAgICAgICAgIGJyLnN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9RVUVVRUQKKyAgICAgICAgICAgICAgICBici5zYXZlKCkKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoInJ1bmJ1aWxkczogTm8gYnVpbGQgZW52IikKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJydW5idWlsZHM6IHN0YXJ0aW5nIGJ1aWxkICVzLCBlbnZpcm9ubWVudCAlcyIgJSAoYnIsIGJlYy5iZSkpCisKKyAgICAgICAgICAgICMgd3JpdGUgdGhlIGJ1aWxkIGlkZW50aWZpY2F0aW9uIHZhcmlhYmxlCisgICAgICAgICAgICBCUlZhcmlhYmxlLm9iamVjdHMuY3JlYXRlKHJlcSA9IGJyLCBuYW1lPSJUT0FTVEVSX0JSQkUiLCB2YWx1ZT0iJWQ6JWQiICUgKGJyLnBrLCBiZWMuYmUucGspKQorCisgICAgICAgICAgICAjIGxldCB0aGUgYnVpbGQgcmVxdWVzdCBrbm93IHdoZXJlIGl0IGlzIGJlaW5nIGV4ZWN1dGVkCisgICAgICAgICAgICBici5lbnZpcm9ubWVudCA9IGJlYy5iZQorICAgICAgICAgICAgYnIuc2F2ZSgpCisKKyAgICAgICAgICAgICMgdGhpcyB0cmlnZ2VycyBhbiBhc3luYyBidWlsZAorICAgICAgICAgICAgYmVjLnRyaWdnZXJCdWlsZChici5icmJpdGJha2Vfc2V0LmFsbCgpLCBici5icmxheWVyX3NldC5hbGwoKSwgYnIuYnJ2YXJpYWJsZV9zZXQuYWxsKCksIGJyLmJydGFyZ2V0X3NldC5hbGwoKSkKKworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoInJ1bmJ1aWxkczogRXJyb3IgbGF1bmNoaW5nIGJ1aWxkICVzIiAlIGUpCisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGUpCisgICAgICAgICAgICBpZiAiW0Vycm5vIDExMV0gQ29ubmVjdGlvbiByZWZ1c2VkIiBpbiBzdHIoZSk6CisgICAgICAgICAgICAgICAgIyBDb25uZWN0aW9uIHJlZnVzZWQsIHJlYWQgdG9hc3Rlcl9zZXJ2ZXIub3V0CisgICAgICAgICAgICAgICAgZXJybXNnID0gYmVjLnJlYWRTZXJ2ZXJMb2dGaWxlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXJybXNnID0gc3RyKGUpCisKKyAgICAgICAgICAgIEJSRXJyb3Iub2JqZWN0cy5jcmVhdGUocmVxID0gYnIsCisgICAgICAgICAgICAgICAgICAgIGVycnR5cGUgPSBzdHIodHlwZShlKSksCisgICAgICAgICAgICAgICAgICAgIGVycm1zZyA9IGVycm1zZywKKyAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrID0gdHJhY2ViYWNrLmZvcm1hdF9leGMoZSkpCisgICAgICAgICAgICBici5zdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfRkFJTEVECisgICAgICAgICAgICBici5zYXZlKCkKKyAgICAgICAgICAgIGJlYy5iZS5sb2NrID0gQnVpbGRFbnZpcm9ubWVudC5MT0NLX0ZSRUUKKyAgICAgICAgICAgIGJlYy5iZS5zYXZlKCkKKworICAgIGRlZiBhcmNoaXZlKHNlbGYpOgorICAgICAgICAnJycgYXJjaGl2ZXMgZGF0YSBmcm9tIHRoZSBidWlsZHMgJycnCisgICAgICAgIGFydGlmYWN0X3N0b3JhZ2VfZGlyID0gVG9hc3RlclNldHRpbmcub2JqZWN0cy5nZXQobmFtZT0iQVJUSUZBQ1RTX1NUT1JBR0VfRElSIikudmFsdWUKKyAgICAgICAgZm9yIGJyIGluIEJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihzdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfQVJDSElWRSk6CisgICAgICAgICAgICAjIHNhdmUgY29va2VyIGxvZworICAgICAgICAgICAgaWYgYnIuYnVpbGQgPT0gTm9uZToKKyAgICAgICAgICAgICAgICBici5zdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfRkFJTEVECisgICAgICAgICAgICAgICAgYnIuc2F2ZSgpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGJ1aWxkX2FydGlmYWN0X3N0b3JhZ2VfZGlyID0gb3MucGF0aC5qb2luKGFydGlmYWN0X3N0b3JhZ2VfZGlyLCAiJWQiICUgYnIuYnVpbGQucGspCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoYnVpbGRfYXJ0aWZhY3Rfc3RvcmFnZV9kaXIpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBvc2U6CisgICAgICAgICAgICAgICAgaWYgIkZpbGUgZXhpc3RzIiBpbiBzdHIob3NlKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIG9zZQorCisgICAgICAgICAgICBmaWxlX25hbWUgPSBvcy5wYXRoLmpvaW4oYnVpbGRfYXJ0aWZhY3Rfc3RvcmFnZV9kaXIsICJjb29rZXJfbG9nLnR4dCIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVfbmFtZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGJyLmVudmlyb25tZW50LmdldF9hcnRpZmFjdChici5idWlsZC5jb29rZXJfbG9nX3BhdGgpLnJlYWQoKSkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIG9zLnVubGluayhmaWxlX25hbWUpCisKKyAgICAgICAgICAgIGJyLnN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9DT01QTEVURUQKKyAgICAgICAgICAgIGJyLnNhdmUoKQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIGZyb20gZGphbmdvLnV0aWxzIGltcG9ydCB0aW1lem9uZQorICAgICAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCB0aW1lZGVsdGEKKyAgICAgICAgIyBlbnZpcm9ubWVudHMgbG9ja2VkIGZvciBtb3JlIHRoYW4gMzAgc2Vjb25kcyAtIHRoZXkgc2hvdWxkIGJlIHVubG9ja2VkCisgICAgICAgIEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5maWx0ZXIoYnVpbGRyZXF1ZXN0X19zdGF0ZV9faW49W0J1aWxkUmVxdWVzdC5SRVFfRkFJTEVELCBCdWlsZFJlcXVlc3QuUkVRX0NPTVBMRVRFRF0pLmZpbHRlcihsb2NrPUJ1aWxkRW52aXJvbm1lbnQuTE9DS19MT0NLKS5maWx0ZXIodXBkYXRlZF9fbHQgPSB0aW1lem9uZS5ub3coKSAtIHRpbWVkZWx0YShzZWNvbmRzID0gMzApKS51cGRhdGUobG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19GUkVFKQorCisKKyAgICAgICAgIyB1cGRhdGUgYWxsIEJ1aWxkcyB0aGF0IGZhaWxlZCB0byBzdGFydAorCisgICAgICAgIGZvciBiciBpbiBCdWlsZFJlcXVlc3Qub2JqZWN0cy5maWx0ZXIoc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX0ZBSUxFRCwgYnVpbGRfX291dGNvbWUgPSBCdWlsZC5JTl9QUk9HUkVTUyk6CisgICAgICAgICAgICAjIHRyYW5zcG9zZSB0aGUgbGF1bmNoIGVycm9ycyBpbiBUb2FzdGVyRXhjZXB0aW9ucworICAgICAgICAgICAgYnIuYnVpbGQub3V0Y29tZSA9IEJ1aWxkLkZBSUxFRAorICAgICAgICAgICAgZm9yIGJyZXJyb3IgaW4gYnIuYnJlcnJvcl9zZXQuYWxsKCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJTYXZpbmcgZXJyb3IgJXMiICUgYnJlcnJvcikKKyAgICAgICAgICAgICAgICBMb2dNZXNzYWdlLm9iamVjdHMuY3JlYXRlKGJ1aWxkID0gYnIuYnVpbGQsIGxldmVsID0gTG9nTWVzc2FnZS5FWENFUFRJT04sIG1lc3NhZ2UgPSBicmVycm9yLmVycm1zZykKKyAgICAgICAgICAgIGJyLmJ1aWxkLnNhdmUoKQorCisgICAgICAgICAgICAjIHdlIGRvbid0IGhhdmUgYSB0cnVlIGJ1aWxkIG9iamVjdCBoZXJlOyBoZW5jZSwgdG9hc3RlcnVpIGRpZG4ndCBoYXZlIGEgY2hhbmdlIHRvIHJlbGVhc2UgdGhlIEJFIGxvY2sKKyAgICAgICAgICAgIGJyLmVudmlyb25tZW50LmxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfRlJFRQorICAgICAgICAgICAgYnIuZW52aXJvbm1lbnQuc2F2ZSgpCisKKworCisgICAgICAgICMgdXBkYXRlIGFsbCBCdWlsZFJlcXVlc3RzIHdpdGhvdXQgYSBidWlsZCBjcmVhdGVkCisgICAgICAgIGZvciBiciBpbiBCdWlsZFJlcXVlc3Qub2JqZWN0cy5maWx0ZXIoYnVpbGQgPSBOb25lKToKKyAgICAgICAgICAgIGJyLmJ1aWxkID0gQnVpbGQub2JqZWN0cy5jcmVhdGUocHJvamVjdCA9IGJyLnByb2plY3QsIGNvbXBsZXRlZF9vbiA9IGJyLnVwZGF0ZWQsIHN0YXJ0ZWRfb24gPSBici5jcmVhdGVkKQorICAgICAgICAgICAgYnIuYnVpbGQub3V0Y29tZSA9IEJ1aWxkLkZBSUxFRAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJyLmJ1aWxkLm1hY2hpbmUgPSBici5icnZhcmlhYmxlX3NldC5nZXQobmFtZT0nTUFDSElORScpLnZhbHVlCisgICAgICAgICAgICBleGNlcHQgQlJWYXJpYWJsZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgYnIuc2F2ZSgpCisgICAgICAgICAgICAjIHRyYW5zcG9zZSB0YXJnZXQgaW5mb3JtYXRpb24KKyAgICAgICAgICAgIGZvciBicnRhcmdldCBpbiBici5icnRhcmdldF9zZXQuYWxsKCk6CisgICAgICAgICAgICAgICAgVGFyZ2V0Lm9iamVjdHMuY3JlYXRlKGJ1aWxkID0gYnIuYnVpbGQsIHRhcmdldD0gYnJ0YXJnZXQudGFyZ2V0KQorICAgICAgICAgICAgIyB0cmFuc3Bvc2UgdGhlIGxhdW5jaCBlcnJvcnMgaW4gVG9hc3RlckV4Y2VwdGlvbnMKKyAgICAgICAgICAgIGZvciBicmVycm9yIGluIGJyLmJyZXJyb3Jfc2V0LmFsbCgpOgorICAgICAgICAgICAgICAgIExvZ01lc3NhZ2Uub2JqZWN0cy5jcmVhdGUoYnVpbGQgPSBici5idWlsZCwgbGV2ZWwgPSBMb2dNZXNzYWdlLkVYQ0VQVElPTiwgbWVzc2FnZSA9IGJyZXJyb3IuZXJybXNnKQorCisgICAgICAgICAgICBici5idWlsZC5zYXZlKCkKKyAgICAgICAgcGFzcworCisKKyAgICBkZWYgaGFuZGxlX25vYXJncyhzZWxmLCAqKm9wdGlvbnMpOgorICAgICAgICBzZWxmLmNsZWFudXAoKQorICAgICAgICBzZWxmLmFyY2hpdmUoKQorICAgICAgICBzZWxmLnNjaGVkdWxlKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwMV9pbml0aWFsLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDAxX2luaXRpYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdlNjM1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwMV9pbml0aWFsLnB5CkBAIC0wLDAgKzEsMTU0IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBtb2RlbCAnQnVpbGRFbnZpcm9ubWVudCcKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnYmxkY29udHJvbF9idWlsZGVudmlyb25tZW50JywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ2FkZHJlc3MnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCkpLAorICAgICAgICAgICAgKCdiZXR5cGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgICAgICgnYmJhZGRyZXNzJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0yNTQsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnYmJwb3J0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0tMSkpLAorICAgICAgICAgICAgKCdiYnRva2VuJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMjYsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnYmJzdGF0ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCkpLAorICAgICAgICAgICAgKCdsb2NrJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSksCisgICAgICAgICAgICAoJ2NyZWF0ZWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJykoYXV0b19ub3dfYWRkPVRydWUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgndXBkYXRlZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKShhdXRvX25vdz1UcnVlLCBibGFuaz1UcnVlKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J2JsZGNvbnRyb2wnLCBbJ0J1aWxkRW52aXJvbm1lbnQnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnQnVpbGRSZXF1ZXN0JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdibGRjb250cm9sX2J1aWxkcmVxdWVzdCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdwcm9qZWN0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUHJvamVjdCddKSksCisgICAgICAgICAgICAoJ2J1aWxkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uQnVpbGQnXSwgbnVsbD1UcnVlKSksCisgICAgICAgICAgICAoJ3N0YXRlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSksCisgICAgICAgICAgICAoJ2NyZWF0ZWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJykoYXV0b19ub3dfYWRkPVRydWUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgndXBkYXRlZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKShhdXRvX25vdz1UcnVlLCBibGFuaz1UcnVlKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J2JsZGNvbnRyb2wnLCBbJ0J1aWxkUmVxdWVzdCddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdCUkxheWVyJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdibGRjb250cm9sX2JybGF5ZXInLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgncmVxJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddKSksCisgICAgICAgICAgICAoJ25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICAgICAgKCdnaXR1cmwnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCkpLAorICAgICAgICAgICAgKCdjb21taXQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdibGRjb250cm9sJywgWydCUkxheWVyJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0JSVmFyaWFibGUnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnJ2YXJpYWJsZScsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdyZXEnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10pKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ3ZhbHVlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoYmxhbms9VHJ1ZSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdibGRjb250cm9sJywgWydCUlZhcmlhYmxlJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0JSVGFyZ2V0JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdibGRjb250cm9sX2JydGFyZ2V0JywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3JlcScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSkpLAorICAgICAgICAgICAgKCd0YXJnZXQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICAgICAgKCd0YXNrJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDAsIG51bGw9VHJ1ZSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdibGRjb250cm9sJywgWydCUlRhcmdldCddKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0J1aWxkRW52aXJvbm1lbnQnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnVpbGRlbnZpcm9ubWVudCcpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnQnVpbGRSZXF1ZXN0JworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdibGRjb250cm9sX2J1aWxkcmVxdWVzdCcpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnQlJMYXllcicKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnYmxkY29udHJvbF9icmxheWVyJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdCUlZhcmlhYmxlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdibGRjb250cm9sX2JydmFyaWFibGUnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0JSVGFyZ2V0JworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdibGRjb250cm9sX2JydGFyZ2V0JykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J2JsZGNvbnRyb2wuYnJsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkxheWVyJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnVpbGRlbnZpcm9ubWVudCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZEVudmlyb25tZW50J30sCisgICAgICAgICAgICAnYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnYmJhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JicG9ydCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdiYnN0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnYmJ0b2tlbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjYnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZHJlcXVlc3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRSZXF1ZXN0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnYmxkY29udHJvbCddCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDJfYXV0b19fYWRkX2ZpZWxkX2J1aWxkZW52aXJvbm1lbnRfc291cmNlZGlyX19hZGRfZmllbGRfYnVpbGRlbnZpcm9ubWVudC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwMl9hdXRvX19hZGRfZmllbGRfYnVpbGRlbnZpcm9ubWVudF9zb3VyY2VkaXJfX2FkZF9maWVsZF9idWlsZGVudmlyb25tZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MjJhNTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDJfYXV0b19fYWRkX2ZpZWxkX2J1aWxkZW52aXJvbm1lbnRfc291cmNlZGlyX19hZGRfZmllbGRfYnVpbGRlbnZpcm9ubWVudC5weQpAQCAtMCwwICsxLDEwNiBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0J1aWxkRW52aXJvbm1lbnQuc291cmNlZGlyJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnYmxkY29udHJvbF9idWlsZGVudmlyb25tZW50JywgJ3NvdXJjZWRpcicsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD01MTIsIGJsYW5rPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnVpbGRFbnZpcm9ubWVudC5idWlsZGRpcicKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J2JsZGNvbnRyb2xfYnVpbGRlbnZpcm9ubWVudCcsICdidWlsZGRpcicsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD01MTIsIGJsYW5rPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdCdWlsZEVudmlyb25tZW50LnNvdXJjZWRpcicKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J2JsZGNvbnRyb2xfYnVpbGRlbnZpcm9ubWVudCcsICdzb3VyY2VkaXInKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0J1aWxkRW52aXJvbm1lbnQuYnVpbGRkaXInCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdibGRjb250cm9sX2J1aWxkZW52aXJvbm1lbnQnLCAnYnVpbGRkaXInKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnYmxkY29udHJvbC5icmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSTGF5ZXInfSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZGVudmlyb25tZW50JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkRW52aXJvbm1lbnQnfSwKKyAgICAgICAgICAgICdhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdiYmFkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmJwb3J0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ2Jic3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdiYnRva2VuJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyNicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZGRpcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MTInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZWRpcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MTInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZHJlcXVlc3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRSZXF1ZXN0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ2JsZGNvbnRyb2wnXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwM19hdXRvX19hZGRfZmllbGRfYnJsYXllcl9kaXJwYXRoLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDAzX2F1dG9fX2FkZF9maWVsZF9icmxheWVyX2RpcnBhdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjliYTgzOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwM19hdXRvX19hZGRfZmllbGRfYnJsYXllcl9kaXJwYXRoLnB5CkBAIC0wLDAgKzEsOTkgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIGZpZWxkICdCUkxheWVyLmRpcnBhdGgnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdibGRjb250cm9sX2JybGF5ZXInLCAnZGlycGF0aCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD0yNTQpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdCUkxheWVyLmRpcnBhdGgnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdibGRjb250cm9sX2JybGF5ZXInLCAnZGlycGF0aCcpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdibGRjb250cm9sLmJybGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJMYXllcid9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkZW52aXJvbm1lbnQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRFbnZpcm9ubWVudCd9LAorICAgICAgICAgICAgJ2FkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2JiYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiYnBvcnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAnYmJzdGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2JidG9rZW4nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI2JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkcmVxdWVzdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZFJlcXVlc3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnYmxkY29udHJvbCddClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA0X2xvYWRpbml0aWFsZGF0YS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwNF9sb2FkaW5pdGlhbGRhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkwODU3OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwNF9sb2FkaW5pdGlhbGRhdGEucHkKQEAgLTAsMCArMSwxMDQgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IERhdGFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworY2xhc3MgTWlncmF0aW9uKERhdGFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICJXcml0ZSB5b3VyIGZvcndhcmRzIG1ldGhvZHMgaGVyZS4iCisgICAgICAgICMgTm90ZTogRG9uJ3QgdXNlICJmcm9tIGFwcG5hbWUubW9kZWxzIGltcG9ydCBNb2RlbE5hbWUiLgorICAgICAgICAjIFVzZSBvcm0uTW9kZWxOYW1lIHRvIHJlZmVyIHRvIG1vZGVscyBpbiB0aGlzIGFwcGxpY2F0aW9uLAorICAgICAgICAjIGFuZCBvcm1bJ2FwcG5hbWUuTW9kZWxOYW1lJ10gZm9yIG1vZGVscyBpbiBvdGhlciBhcHBsaWNhdGlvbnMuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9ybS5CdWlsZEVudmlyb25tZW50Lm9iamVjdHMuZ2V0KHBrID0gMSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCisgICAgICAgICAgICBvcm0uQnVpbGRFbnZpcm9ubWVudC5vYmplY3RzLmNyZWF0ZShwayA9IDEsCisgICAgICAgICAgICAgICAgY3JlYXRlZCA9IHRpbWV6b25lLm5vdygpLAorICAgICAgICAgICAgICAgIHVwZGF0ZWQgPSB0aW1lem9uZS5ub3coKSwKKyAgICAgICAgICAgICAgICBiZXR5cGUgPSAwKQorCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAiV3JpdGUgeW91ciBiYWNrd2FyZHMgbWV0aG9kcyBoZXJlLiIKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdibGRjb250cm9sLmJybGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJMYXllcid9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkZW52aXJvbm1lbnQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRFbnZpcm9ubWVudCd9LAorICAgICAgICAgICAgJ2FkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2JiYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiYnBvcnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAnYmJzdGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2JidG9rZW4nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI2JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkcmVxdWVzdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZFJlcXVlc3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnYmxkY29udHJvbCddCisgICAgc3ltbWV0cmljYWwgPSBUcnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDVfYXV0b19fYWRkX2JyZXJyb3IucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDVfYXV0b19fYWRkX2JyZXJyb3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThhZWI0MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwNV9hdXRvX19hZGRfYnJlcnJvci5weQpAQCAtMCwwICsxLDExMiBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0JSRXJyb3InCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnJlcnJvcicsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdyZXEnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10pKSwKKyAgICAgICAgICAgICgnZXJydHlwZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ2Vycm1zZycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCd0cmFjZWJhY2snLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKSgpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnYmxkY29udHJvbCcsIFsnQlJFcnJvciddKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0JSRXJyb3InCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnJlcnJvcicpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdibGRjb250cm9sLmJyZXJyb3InOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJFcnJvcid9LAorICAgICAgICAgICAgJ2Vycm1zZyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdlcnJ0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3RyYWNlYmFjayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkxheWVyJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnVpbGRlbnZpcm9ubWVudCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZEVudmlyb25tZW50J30sCisgICAgICAgICAgICAnYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnYmJhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JicG9ydCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdiYnN0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnYmJ0b2tlbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjYnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGRkaXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTEyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VkaXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTEyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnVpbGRyZXF1ZXN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkUmVxdWVzdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAnc3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydibGRjb250cm9sJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDZfYXV0b19fYWRkX2JyYml0YmFrZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwNl9hdXRvX19hZGRfYnJiaXRiYWtlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0Mzg4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDZfYXV0b19fYWRkX2JyYml0YmFrZS5weQpAQCAtMCwwICsxLDEyOCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0JSQml0YmFrZScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnYmxkY29udHJvbF9icmJpdGJha2UnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgncmVxJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddLCB1bmlxdWU9VHJ1ZSkpLAorICAgICAgICAgICAgKCdnaXR1cmwnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCkpLAorICAgICAgICAgICAgKCdjb21taXQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCkpLAorICAgICAgICAgICAgKCdkaXJwYXRoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0yNTQpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnYmxkY29udHJvbCcsIFsnQlJCaXRiYWtlJ10pCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnQlJCaXRiYWtlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdibGRjb250cm9sX2JyYml0YmFrZScpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdibGRjb250cm9sLmJyYml0YmFrZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkJpdGJha2UnfSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSIsICd1bmlxdWUnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJlcnJvcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkVycm9yJ30sCisgICAgICAgICAgICAnZXJybXNnJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2VycnR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndHJhY2ViYWNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSTGF5ZXInfSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZGVudmlyb25tZW50JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkRW52aXJvbm1lbnQnfSwKKyAgICAgICAgICAgICdhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdiYmFkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmJwb3J0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ2Jic3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdiYnRva2VuJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyNicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZGRpcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MTInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZWRpcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MTInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZHJlcXVlc3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRSZXF1ZXN0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnYmxkY29udHJvbCddClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA3X2F1dG9fX2FkZF9maWVsZF9idWlsZHJlcXVlc3RfZW52aXJvbm1lbnRfX2NoZ19maWVsZF9idWlsZHJlcXVlc3RfYnVpbGQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDdfYXV0b19fYWRkX2ZpZWxkX2J1aWxkcmVxdWVzdF9lbnZpcm9ubWVudF9fY2hnX2ZpZWxkX2J1aWxkcmVxdWVzdF9idWlsZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDY3N2EyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA3X2F1dG9fX2FkZF9maWVsZF9idWlsZHJlcXVlc3RfZW52aXJvbm1lbnRfX2NoZ19maWVsZF9idWlsZHJlcXVlc3RfYnVpbGQucHkKQEAgLTAsMCArMSwxNDUgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIGZpZWxkICdCdWlsZFJlcXVlc3QuZW52aXJvbm1lbnQnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdibGRjb250cm9sX2J1aWxkcmVxdWVzdCcsICdlbnZpcm9ubWVudCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydibGRjb250cm9sLkJ1aWxkRW52aXJvbm1lbnQnXSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdCdWlsZFJlcXVlc3QuYnVpbGQnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JywgJ2J1aWxkX2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5PbmVUb09uZUZpZWxkJykodG89b3JtWydvcm0uQnVpbGQnXSwgdW5pcXVlPVRydWUsIG51bGw9VHJ1ZSkpCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdCdWlsZFJlcXVlc3QnLCBmaWVsZHMgWydidWlsZCddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdibGRjb250cm9sX2J1aWxkcmVxdWVzdCcsIFsnYnVpbGRfaWQnXSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdCdWlsZFJlcXVlc3QnLCBmaWVsZHMgWydidWlsZCddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdibGRjb250cm9sX2J1aWxkcmVxdWVzdCcsIFsnYnVpbGRfaWQnXSkKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdCdWlsZFJlcXVlc3QuZW52aXJvbm1lbnQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdibGRjb250cm9sX2J1aWxkcmVxdWVzdCcsICdlbnZpcm9ubWVudF9pZCcpCisKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdCdWlsZFJlcXVlc3QuYnVpbGQnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JywgJ2J1aWxkX2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uQnVpbGQnXSwgbnVsbD1UcnVlKSkKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdibGRjb250cm9sLmJyYml0YmFrZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkJpdGJha2UnfSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSIsICd1bmlxdWUnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJlcnJvcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkVycm9yJ30sCisgICAgICAgICAgICAnZXJybXNnJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2VycnR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndHJhY2ViYWNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSTGF5ZXInfSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZGVudmlyb25tZW50JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkRW52aXJvbm1lbnQnfSwKKyAgICAgICAgICAgICdhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdiYmFkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmJwb3J0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ2Jic3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdiYnRva2VuJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyNicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZGRpcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MTInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZWRpcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MTInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZHJlcXVlc3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRSZXF1ZXN0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuT25lVG9PbmVGaWVsZCcsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIiwgJ3VuaXF1ZSc6ICdUcnVlJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbnZpcm9ubWVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZEVudmlyb25tZW50J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydibGRjb250cm9sJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDhfYnJhcmNoaXZlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA4X2JyYXJjaGl2ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTQ2OTYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA4X2JyYXJjaGl2ZS5weQpAQCAtMCwwICsxLDEzOCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgRGF0YU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCitjbGFzcyBNaWdyYXRpb24oRGF0YU1pZ3JhdGlvbik6CisgICAgIyBpZHMgdGhhdCBjYW5ub3QgYmUgaW1wb3J0ZWQgZnJvbSBCdWlsZFJlcXVlc3QKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICBSRVFfQ09NUExFVEVEID0gMworICAgICAgICBSRVFfQVJDSElWRSA9IDYKKyAgICAgICAgIldyaXRlIHlvdXIgZm9yd2FyZHMgbWV0aG9kcyBoZXJlLiIKKyAgICAgICAgIyBOb3RlOiBEb24ndCB1c2UgImZyb20gYXBwbmFtZS5tb2RlbHMgaW1wb3J0IE1vZGVsTmFtZSIuCisgICAgICAgICMgVXNlIG9ybS5Nb2RlbE5hbWUgdG8gcmVmZXIgdG8gbW9kZWxzIGluIHRoaXMgYXBwbGljYXRpb24sCisgICAgICAgICMgYW5kIG9ybVsnYXBwbmFtZS5Nb2RlbE5hbWUnXSBmb3IgbW9kZWxzIGluIG90aGVyIGFwcGxpY2F0aW9ucy4KKyAgICAgICAgb3JtLkJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihzdGF0ZT1SRVFfQ09NUExFVEVEKS51cGRhdGUoc3RhdGU9UkVRX0FSQ0hJVkUpCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgIFJFUV9DT01QTEVURUQgPSAzCisgICAgICAgIFJFUV9BUkNISVZFID0gNgorICAgICAgICAiV3JpdGUgeW91ciBiYWNrd2FyZHMgbWV0aG9kcyBoZXJlLiIKKyAgICAgICAgb3JtLkJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihzdGF0ZT1SRVFfQVJDSElWRSkudXBkYXRlKHN0YXRlPVJFUV9DT01QTEVURUQpCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnYmxkY29udHJvbC5icmJpdGJha2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJCaXRiYWtlJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10iLCAndW5pcXVlJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJyZXJyb3InOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJFcnJvcid9LAorICAgICAgICAgICAgJ2Vycm1zZyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdlcnJ0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3RyYWNlYmFjayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkxheWVyJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnVpbGRlbnZpcm9ubWVudCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZEVudmlyb25tZW50J30sCisgICAgICAgICAgICAnYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnYmJhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JicG9ydCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdiYnN0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnYmJ0b2tlbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjYnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGRkaXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTEyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VkaXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTEyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnVpbGRyZXF1ZXN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkUmVxdWVzdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLk9uZVRvT25lRmllbGQnLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSIsICd1bmlxdWUnOiAnVHJ1ZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZW52aXJvbm1lbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRFbnZpcm9ubWVudCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnYmxkY29udHJvbCddCisgICAgc3ltbWV0cmljYWwgPSBUcnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbW9kZWxzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbW9kZWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MWRlNTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tb2RlbHMucHkKQEAgLTAsMCArMSwxNjQgQEAKK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKK2Zyb20gZGphbmdvLmNvcmUudmFsaWRhdG9ycyBpbXBvcnQgTWF4VmFsdWVWYWxpZGF0b3IsIE1pblZhbHVlVmFsaWRhdG9yCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFByb2plY3QsIFByb2plY3RMYXllciwgUHJvamVjdFZhcmlhYmxlLCBQcm9qZWN0VGFyZ2V0LCBCdWlsZAorCisjIGEgQnVpbGRFbnZpcm9ubWVudCBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgImJ1aWxkLyIgZGlyZWN0b3J5IG9uIHRoZSBsb2NhbGhvc3QKK2NsYXNzIEJ1aWxkRW52aXJvbm1lbnQobW9kZWxzLk1vZGVsKToKKyAgICBTRVJWRVJfU1RPUFBFRCA9IDAKKyAgICBTRVJWRVJfU1RBUlRFRCA9IDEKKyAgICBTRVJWRVJfU1RBVEUgPSAoCisgICAgICAgIChTRVJWRVJfU1RPUFBFRCwgInN0b3BwZWQiKSwKKyAgICAgICAgKFNFUlZFUl9TVEFSVEVELCAic3RhcnRlZCIpLAorICAgICkKKworICAgIFRZUEVfTE9DQUwgPSAwCisgICAgVFlQRV9TU0ggICA9IDEKKyAgICBUWVBFID0gKAorICAgICAgICAoVFlQRV9MT0NBTCwgImxvY2FsIiksCisgICAgICAgIChUWVBFX1NTSCwgInNzaCIpLAorICAgICkKKworICAgIExPQ0tfRlJFRSA9IDAKKyAgICBMT0NLX0xPQ0sgPSAxCisgICAgTE9DS19SVU5OSU5HID0gMgorICAgIExPQ0tfU1RBVEUgPSAoCisgICAgICAgIChMT0NLX0ZSRUUsICJmcmVlIiksCisgICAgICAgIChMT0NLX0xPQ0ssICJsb2NrIiksCisgICAgICAgIChMT0NLX1JVTk5JTkcsICJydW5uaW5nIiksCisgICAgKQorCisgICAgYWRkcmVzcyAgICAgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGggPSAyNTQpCisgICAgYmV0eXBlICAgICAgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXMgPSBUWVBFKQorICAgIGJiYWRkcmVzcyAgID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoID0gMjU0LCBibGFuayA9IFRydWUpCisgICAgYmJwb3J0ICAgICAgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQgPSAtMSkKKyAgICBiYnRva2VuICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDEyNiwgYmxhbmsgPSBUcnVlKQorICAgIGJic3RhdGUgICAgID0gbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzID0gU0VSVkVSX1NUQVRFLCBkZWZhdWx0ID0gU0VSVkVSX1NUT1BQRUQpCisgICAgc291cmNlZGlyICAgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGggPSA1MTIsIGJsYW5rID0gVHJ1ZSkKKyAgICBidWlsZGRpciAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDUxMiwgYmxhbmsgPSBUcnVlKQorICAgIGxvY2sgICAgICAgID0gbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzID0gTE9DS19TVEFURSwgZGVmYXVsdCA9IExPQ0tfRlJFRSkKKyAgICBjcmVhdGVkICAgICA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGF1dG9fbm93X2FkZCA9IFRydWUpCisgICAgdXBkYXRlZCAgICAgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChhdXRvX25vdyA9IFRydWUpCisKKworICAgIGRlZiBnZXRfYXJ0aWZhY3RfdHlwZShzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgc2VsZi5iZXR5cGUgPT0gQnVpbGRFbnZpcm9ubWVudC5UWVBFX0xPQ0FMOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydCBtYWdpYworCisgICAgICAgICAgICAgICAgIyBmYWlyIHdhcm5pbmc6IHRoaXMgaXMgYSBtZXNzOyB0aGVyZSBhcmUgbXVsdGlwbGUgY29tcGV0ZWluZyBhbmQgaW5jb21wYXRpYmxlCisgICAgICAgICAgICAgICAgIyBtYWdpYyBtb2R1bGVzIGZsb2F0aW5nIGFyb3VuZCwgc28gd2UgdHJ5IHNvbWUgb2YgdGhlIG1vc3QgY29tbW9uIGNvbWJpbmF0aW9ucworCisgICAgICAgICAgICAgICAgdHJ5OiAgICAjIHdlIHRyeSB1YnVudHUncyBweXRob24tbWFnaWMgNS40CisgICAgICAgICAgICAgICAgICAgIG0gPSBtYWdpYy5vcGVuKG1hZ2ljLk1BR0lDX01JTUVfVFlQRSkKKyAgICAgICAgICAgICAgICAgICAgbS5sb2FkKCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0uZmlsZShwYXRoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgdHJ5OiAgICAjIHdlIHRyeSBweXRob24tbWFnaWMgMC40LjYKKyAgICAgICAgICAgICAgICAgICAgbSA9IG1hZ2ljLk1hZ2ljKG1hZ2ljLk1BR0lDX01JTUUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtLmZyb21fZmlsZShwYXRoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgdHJ5OiAgICAjIHdlIHRyeSBwaXAgZmlsZW1hZ2ljIDEuNgorICAgICAgICAgICAgICAgICAgICBtID0gbWFnaWMuTWFnaWMoZmxhZ3M9bWFnaWMuTUFHSUNfTUlNRV9UWVBFKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbS5pZF9maWxlbmFtZShwYXRoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgcmV0dXJuICJiaW5hcnkvb2N0ZXQtc3RyZWFtIgorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiAiYmluYXJ5L29jdGV0LXN0cmVhbSIKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGSVhNRTogYXJ0aWZhY3QgdHlwZSBub3QgaW1wbGVtZW50ZWQgZm9yIGJ1aWxkIGVudmlyb25tZW50IHR5cGUgJXMiICUgc2VsZi5nZXRfYmV0eXBlX2Rpc3BsYXkoKSkKKworCisgICAgZGVmIGdldF9hcnRpZmFjdChzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgc2VsZi5iZXR5cGUgPT0gQnVpbGRFbnZpcm9ubWVudC5UWVBFX0xPQ0FMOgorICAgICAgICAgICAgcmV0dXJuIG9wZW4ocGF0aCwgInIiKQorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBhcnRpZmFjdCBkb3dubG9hZCBub3QgaW1wbGVtZW50ZWQgZm9yIGJ1aWxkIGVudmlyb25tZW50IHR5cGUgJXMiICUgc2VsZi5nZXRfYmV0eXBlX2Rpc3BsYXkoKSkKKworICAgIGRlZiBoYXNfYXJ0aWZhY3Qoc2VsZiwgcGF0aCk6CisgICAgICAgIGltcG9ydCBvcworICAgICAgICBpZiBzZWxmLmJldHlwZSA9PSBCdWlsZEVudmlyb25tZW50LlRZUEVfTE9DQUw6CisgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5leGlzdHMocGF0aCkKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGSVhNRTogaGFzIGFydGlmYWN0IG5vdCBpbXBsZW1lbnRlZCBmb3IgYnVpbGQgZW52aXJvbm1lbnQgdHlwZSAlcyIgJSBzZWxmLmdldF9iZXR5cGVfZGlzcGxheSgpKQorCisjIGEgQnVpbGRSZXF1ZXN0IGlzIGEgcmVxdWVzdCB0aGF0IHRoZSBzY2hlZHVsZXIgd2lsbCBidWlsZCB1c2luZyBhIEJ1aWxkRW52aXJvbm1lbnQKKyMgdGhlIGJ1aWxkIHJlcXVlc3QgcXVldWUgaXMgdGhlIHRhYmxlIGl0c2VsZiwgb3JkZXJlZCBieSBzdGF0ZQorCitjbGFzcyBCdWlsZFJlcXVlc3QobW9kZWxzLk1vZGVsKToKKyAgICBSRVFfQ1JFQVRFRCA9IDAKKyAgICBSRVFfUVVFVUVEID0gMQorICAgIFJFUV9JTlBST0dSRVNTID0gMgorICAgIFJFUV9DT01QTEVURUQgPSAzCisgICAgUkVRX0ZBSUxFRCA9IDQKKyAgICBSRVFfREVMRVRFRCA9IDUKKyAgICBSRVFfQVJDSElWRSA9IDYKKworICAgIFJFUVVFU1RfU1RBVEUgPSAoCisgICAgICAgIChSRVFfQ1JFQVRFRCwgImNyZWF0ZWQiKSwKKyAgICAgICAgKFJFUV9RVUVVRUQsICJxdWV1ZWQiKSwKKyAgICAgICAgKFJFUV9JTlBST0dSRVNTLCAiaW4gcHJvZ3Jlc3MiKSwKKyAgICAgICAgKFJFUV9DT01QTEVURUQsICJjb21wbGV0ZWQiKSwKKyAgICAgICAgKFJFUV9GQUlMRUQsICJmYWlsZWQiKSwKKyAgICAgICAgKFJFUV9ERUxFVEVELCAiZGVsZXRlZCIpLAorICAgICAgICAoUkVRX0FSQ0hJVkUsICJhcmNoaXZlIiksCisgICAgKQorCisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gKCJicnRhcmdldF9fdGFyZ2V0IiwgImJ1aWxkX19wcm9qZWN0X19uYW1lIikKKworICAgIHByb2plY3QgICAgID0gbW9kZWxzLkZvcmVpZ25LZXkoUHJvamVjdCkKKyAgICBidWlsZCAgICAgICA9IG1vZGVscy5PbmVUb09uZUZpZWxkKEJ1aWxkLCBudWxsID0gVHJ1ZSkgICAgICMgVE9ETzogdG9hc3RlcnVpIHNob3VsZCBzZXQgdGhpcyB3aGVuIEJ1aWxkIGlzIGNyZWF0ZWQKKyAgICBlbnZpcm9ubWVudCA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkRW52aXJvbm1lbnQsIG51bGwgPSBUcnVlKQorICAgIHN0YXRlICAgICAgID0gbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzID0gUkVRVUVTVF9TVEFURSwgZGVmYXVsdCA9IFJFUV9DUkVBVEVEKQorICAgIGNyZWF0ZWQgICAgID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoYXV0b19ub3dfYWRkID0gVHJ1ZSkKKyAgICB1cGRhdGVkICAgICA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGF1dG9fbm93ID0gVHJ1ZSkKKworICAgIGRlZiBnZXRfZHVyYXRpb24oc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi51cGRhdGVkIC0gc2VsZi5jcmVhdGVkKS50b3RhbF9zZWNvbmRzKCkKKworICAgIGRlZiBnZXRfc29ydGVkX3RhcmdldF9saXN0KHNlbGYpOgorICAgICAgICB0Z3RzID0gc2VsZi5icnRhcmdldF9zZXQub3JkZXJfYnkoICd0YXJnZXQnICk7CisgICAgICAgIHJldHVybiggdGd0cyApOworCisgICAgZGVmIGdldF9tYWNoaW5lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5icnZhcmlhYmxlX3NldC5nZXQobmFtZT0iTUFDSElORSIpLnZhbHVlCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyAlcyIgJSAoc2VsZi5wcm9qZWN0LCBzZWxmLmdldF9zdGF0ZV9kaXNwbGF5KCkpCisKKyMgVGhlc2UgdGFibGVzIHNwZWNpZnkgdGhlIHNldHRpbmdzIGZvciBydW5uaW5nIGFuIGFjdHVhbCBidWlsZC4KKyMgVGhleSBNVVNUIGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSB0YWJsZXMgaW4gb3JtLm1vZGVscy5Qcm9qZWN0KgorCitjbGFzcyBCUkxheWVyKG1vZGVscy5Nb2RlbCk6CisgICAgcmVxICAgICAgICAgPSBtb2RlbHMuRm9yZWlnbktleShCdWlsZFJlcXVlc3QpCisgICAgbmFtZSAgICAgICAgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGggPSAxMDApCisgICAgZ2l0dXJsICAgICAgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGggPSAyNTQpCisgICAgY29tbWl0ICAgICAgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGggPSAyNTQpCisgICAgZGlycGF0aCAgICAgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGggPSAyNTQpCisKK2NsYXNzIEJSQml0YmFrZShtb2RlbHMuTW9kZWwpOgorICAgIHJlcSAgICAgICAgID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGRSZXF1ZXN0LCB1bmlxdWUgPSBUcnVlKSAgICAjIG9ubHkgb25lIGJpdGJha2UgZm9yIGEgcmVxdWVzdAorICAgIGdpdHVybCAgICAgID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoID0yNTQpCisgICAgY29tbWl0ICAgICAgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGggPSAyNTQpCisgICAgZGlycGF0aCAgICAgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGggPSAyNTQpCisKK2NsYXNzIEJSVmFyaWFibGUobW9kZWxzLk1vZGVsKToKKyAgICByZXEgICAgICAgICA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkUmVxdWVzdCkKKyAgICBuYW1lICAgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgdmFsdWUgICAgICAgPSBtb2RlbHMuVGV4dEZpZWxkKGJsYW5rID0gVHJ1ZSkKKworY2xhc3MgQlJUYXJnZXQobW9kZWxzLk1vZGVsKToKKyAgICByZXEgICAgICAgICA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkUmVxdWVzdCkKKyAgICB0YXJnZXQgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgdGFzayAgICAgICAgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwLCBudWxsPVRydWUpCisKK2NsYXNzIEJSRXJyb3IobW9kZWxzLk1vZGVsKToKKyAgICByZXEgICAgICAgICA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkUmVxdWVzdCkKKyAgICBlcnJ0eXBlICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgZXJybXNnICAgICAgPSBtb2RlbHMuVGV4dEZpZWxkKCkKKyAgICB0cmFjZWJhY2sgICA9IG1vZGVscy5UZXh0RmllbGQoKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXMgKCVzKSIgJSAoc2VsZi5lcnJtc2csIHNlbGYucmVxKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvc3NoYmVjb250cm9sbGVyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvc3NoYmVjb250cm9sbGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZjQzNGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9zc2hiZWNvbnRyb2xsZXIucHkKQEAgLTAsMCArMSwxNzkgQEAKKyMKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQorZnJvbSBkamFuZ28uZGIgaW1wb3J0IHRyYW5zYWN0aW9uCitmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IFEKK2Zyb20gYmxkY29udHJvbC5tb2RlbHMgaW1wb3J0IEJ1aWxkRW52aXJvbm1lbnQsIEJSTGF5ZXIsIEJSVmFyaWFibGUsIEJSVGFyZ2V0LCBCUkJpdGJha2UKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2Zyb20gdG9hc3Rlcm1haW4gaW1wb3J0IHNldHRpbmdzCisKK2Zyb20gYmJjb250cm9sbGVyIGltcG9ydCBCdWlsZEVudmlyb25tZW50Q29udHJvbGxlciwgU2hlbGxDbWRFeGNlcHRpb24sIEJ1aWxkU2V0dXBFeGNlcHRpb24KKworY2xhc3MgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2RlZiBETihwYXRoKToKKyAgICByZXR1cm4gIi8iLmpvaW4ocGF0aC5zcGxpdCgiLyIpWzA6LTFdKQorCitjbGFzcyBTU0hCRUNvbnRyb2xsZXIoQnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIpOgorICAgICIiIiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgQnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIgZm9yIHRoZSBsb2NhbGhvc3Q7CisgICAgICAgIHRoaXMgY29udHJvbGxlciBtYW5hZ2VzIHRoZSBkZWZhdWx0IGJ1aWxkIGRpcmVjdG9yeSwKKyAgICAgICAgdGhlIHNlcnZlciBzZXR1cCBhbmQgc3lzdGVtIHN0YXJ0IGFuZCBzdG9wIGZvciB0aGUgbG9jYWxob3N0LXR5cGUgYnVpbGQgZW52aXJvbm1lbnQKKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJlKToKKyAgICAgICAgc3VwZXIoU1NIQkVDb250cm9sbGVyLCBzZWxmKS5fX2luaXRfXyhiZSkKKyAgICAgICAgc2VsZi5kYnVybCA9IHNldHRpbmdzLmdldERBVEFCQVNFX1VSTCgpCisgICAgICAgIHNlbGYucG9reWRpcm5hbWUgPSBOb25lCisgICAgICAgIHNlbGYuaXNsYXllcnNldCA9IEZhbHNlCisKKyAgICBkZWYgX3NoZWxsY21kKHNlbGYsIGNvbW1hbmQsIGN3ZCA9IE5vbmUpOgorICAgICAgICBpZiBjd2QgaXMgTm9uZToKKyAgICAgICAgICAgIGN3ZCA9IHNlbGYuYmUuc291cmNlZGlyCisKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oInNzaCAlcyAnY2QgJXMgJiYgJXMnIiAlIChzZWxmLmJlLmFkZHJlc3MsIGN3ZCwgY29tbWFuZCksIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsIHNoZWxsPVRydWUpCisgICAgICAgIChvdXQsZXJyKSA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBpZiBwLnJldHVybmNvZGU6CisgICAgICAgICAgICBpZiBsZW4oZXJyKSA9PSAwOgorICAgICAgICAgICAgICAgIGVyciA9ICJjb21tYW5kOiAlcyBcbiVzIiAlIChjb21tYW5kLCBvdXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVyciA9ICJjb21tYW5kOiAlcyBcbiVzIiAlIChjb21tYW5kLCBlcnIpCisgICAgICAgICAgICByYWlzZSBTaGVsbENtZEV4Y2VwdGlvbihlcnIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gb3V0LnN0cmlwKCkKKworICAgIGRlZiBfcGF0aGV4aXN0cyhzZWxmLCBwYXRoKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fc2hlbGxjbWQoInRlc3QgLWUgXCIlc1wiIiAlIHBhdGgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9wYXRoY3JlYXRlKHNlbGYsIHBhdGgpOgorICAgICAgICBzZWxmLl9zaGVsbGNtZCgibWtkaXIgLXAgXCIlc1wiIiAlIHBhdGgpCisKKyAgICBkZWYgX3NldHVwQkUoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnBva3lkaXJuYW1lIGFuZCBzZWxmLl9wYXRoZXhpc3RzKHNlbGYucG9reWRpcm5hbWUpCisgICAgICAgIHNlbGYuX3BhdGhjcmVhdGUoc2VsZi5iZS5idWlsZGRpcikKKyAgICAgICAgc2VsZi5fc2hlbGxjbWQoImJhc2ggLWMgXCJzb3VyY2UgJXMvb2UtaW5pdC1idWlsZC1lbnYgJXNcIiIgJSAoc2VsZi5wb2t5ZGlybmFtZSwgc2VsZi5iZS5idWlsZGRpcikpCisKKyAgICBkZWYgc3RhcnRCQlNlcnZlcihzZWxmLCBicmJlKToKKyAgICAgICAgYXNzZXJ0IHNlbGYucG9reWRpcm5hbWUgYW5kIHNlbGYuX3BhdGhleGlzdHMoc2VsZi5wb2t5ZGlybmFtZSkKKyAgICAgICAgYXNzZXJ0IHNlbGYuaXNsYXllcnNldAorICAgICAgICBjbWQgPSBzZWxmLl9zaGVsbGNtZCgiYmFzaCAtYyBcInNvdXJjZSAlcy9vZS1pbml0LWJ1aWxkLWVudiAlcyAmJiBEQVRBQkFTRV9VUkw9JXMgc291cmNlIHRvYXN0ZXIgc3RhcnQgbm93ZWIgYnJiZT0lc1wiIiAlIChzZWxmLnBva3lkaXJuYW1lLCBzZWxmLmJlLmJ1aWxkZGlyLCBzZWxmLmRidXJsLCBicmJlKSkKKworICAgICAgICBwb3J0ID0gIi0xIgorICAgICAgICBmb3IgaSBpbiBjbWQuc3BsaXQoIlxuIik6CisgICAgICAgICAgICBpZiBpLnN0YXJ0c3dpdGgoIkJpdGJha2Ugc2VydmVyIGFkZHJlc3MiKToKKyAgICAgICAgICAgICAgICBwb3J0ID0gaS5zcGxpdCgiICIpWy0xXQorICAgICAgICAgICAgICAgIHByaW50ICJGb3VuZCBiaXRiYWtlIHNlcnZlciBwb3J0ICIsIHBvcnQKKworCisgICAgICAgIGFzc2VydCBzZWxmLmJlLnNvdXJjZWRpciBhbmQgc2VsZi5fcGF0aGV4aXN0cyhzZWxmLmJlLmJ1aWxkZGlyKQorICAgICAgICBzZWxmLmJlLmJiYWRkcmVzcyA9IHNlbGYuYmUuYWRkcmVzcy5zcGxpdCgiQCIpWy0xXQorICAgICAgICBzZWxmLmJlLmJicG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5iZS5iYnN0YXRlID0gQnVpbGRFbnZpcm9ubWVudC5TRVJWRVJfU1RBUlRFRAorICAgICAgICBzZWxmLmJlLnNhdmUoKQorCisgICAgZGVmIHN0b3BCQlNlcnZlcihzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYucG9reWRpcm5hbWUgYW5kIHNlbGYuX3BhdGhleGlzdHMoc2VsZi5wb2t5ZGlybmFtZSkKKyAgICAgICAgYXNzZXJ0IHNlbGYuaXNsYXllcnNldAorICAgICAgICBwcmludCBzZWxmLl9zaGVsbGNtZCgiYmFzaCAtYyBcInNvdXJjZSAlcy9vZS1pbml0LWJ1aWxkLWVudiAlcyAmJiAlcyBzb3VyY2UgdG9hc3RlciBzdG9wXCIiICUKKyAgICAgICAgICAgIChzZWxmLnBva3lkaXJuYW1lLCBzZWxmLmJlLmJ1aWxkZGlyLCAobGFtYmRhOiAiIiBpZiBzZWxmLmJlLmJidG9rZW4gaXMgTm9uZSBlbHNlICJCQlRPS0VOPSVzIiAlIHNlbGYuYmUuYmJ0b2tlbikoKSkpCisgICAgICAgIHNlbGYuYmUuYmJzdGF0ZSA9IEJ1aWxkRW52aXJvbm1lbnQuU0VSVkVSX1NUT1BQRUQKKyAgICAgICAgc2VsZi5iZS5zYXZlKCkKKyAgICAgICAgcHJpbnQgIlN0b3BwZWQgc2VydmVyIgorCisKKyAgICBkZWYgX2NvcHlGaWxlKHNlbGYsIGZpbGVwYXRoMSwgZmlsZXBhdGgyKToKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oInNjcCAnJXMnICclcyciICUgKGZpbGVwYXRoMSwgZmlsZXBhdGgyKSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyID0gc3VicHJvY2Vzcy5QSVBFLCBzaGVsbD1UcnVlKQorICAgICAgICAob3V0LCBlcnIpID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIGlmIHAucmV0dXJuY29kZToKKyAgICAgICAgICAgIHJhaXNlIFNoZWxsQ21kRXhjZXB0aW9uKGVycikKKworICAgIGRlZiBwdWxsRmlsZShzZWxmLCBsb2NhbF9maWxlbmFtZSwgcmVtb3RlX2ZpbGVuYW1lKToKKyAgICAgICAgX2NvcHlGaWxlKGxvY2FsX2ZpbGVuYW1lLCAiJXM6JXMiICUgKHNlbGYuYmUuYWRkcmVzcywgcmVtb3RlX2ZpbGVuYW1lKSkKKworICAgIGRlZiBwdXNoRmlsZShzZWxmLCBsb2NhbF9maWxlbmFtZSwgcmVtb3RlX2ZpbGVuYW1lKToKKyAgICAgICAgX2NvcHlGaWxlKCIlczolcyIgJSAoc2VsZi5iZS5hZGRyZXNzLCByZW1vdGVfZmlsZW5hbWUpLCBsb2NhbF9maWxlbmFtZSkKKworICAgIGRlZiBzZXRMYXllcnMoc2VsZiwgYml0YmFrZXMsIGxheWVycyk6CisgICAgICAgICIiIiBhIHdvcmQgb2YgYXR0ZW50aW9uOiBieSBjb252ZW50aW9uLCB0aGUgZmlyc3QgbGF5ZXIgZm9yIGFueSBidWlsZCB3aWxsIGJlIHBva3khICIiIgorCisgICAgICAgIGFzc2VydCBzZWxmLmJlLnNvdXJjZWRpciBpcyBub3QgTm9uZQorICAgICAgICBhc3NlcnQgbGVuKGJpdGJha2VzKSA9PSAxCisgICAgICAgICMgc2V0IGxheWVycyBpbiB0aGUgbGF5ZXJzb3VyY2UKKworCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXhjZXB0aW9uKCJOb3QgaW1wbGVtZW50ZWQ6IFNTSCBzZXRMYXllcnMiKQorICAgICAgICAjIDMuIGNvbmZpZ3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQsIHNvIHdlIGhhdmUgYSBjb25mL2JibGF5ZXJzLmNvbmYKKyAgICAgICAgYXNzZXJ0IHNlbGYucG9reWRpcm5hbWUgaXMgbm90IE5vbmUKKyAgICAgICAgc2VsZi5fc2V0dXBCRSgpCisKKyAgICAgICAgIyA0LiB1cGRhdGUgdGhlIGJibGF5ZXJzLmNvbmYKKyAgICAgICAgYmJsYXllcmNvbmYgPSBvcy5wYXRoLmpvaW4oc2VsZi5iZS5idWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpCisgICAgICAgIGlmIG5vdCBzZWxmLl9wYXRoZXhpc3RzKGJibGF5ZXJjb25mKToKKyAgICAgICAgICAgIHJhaXNlIEJ1aWxkU2V0dXBFeGNlcHRpb24oIkJFIGlzIG5vdCBjb25zaXN0ZW50OiBiYmxheWVycy5jb25mIGZpbGUgbWlzc2luZyBhdCAlcyIgJSBiYmxheWVyY29uZikKKworICAgICAgICBpbXBvcnQgdXVpZAorICAgICAgICBsb2NhbF9iYmxheWVyY29uZiA9ICIvdG1wLyIgKyB1dWlkLnV1aWQ0KCkgKyAiLWJibGF5ZXIuY29uZiIKKworICAgICAgICBzZWxmLnB1bGxGaWxlKGJibGF5ZXJjb25mLCBsb2NhbF9iYmxheWVyY29uZikKKworICAgICAgICBCdWlsZEVudmlyb25tZW50Q29udHJvbGxlci5fdXBkYXRlQkJMYXllcnMobG9jYWxfYmJsYXllcmNvbmYsIGxheWVybGlzdCkKKyAgICAgICAgc2VsZi5wdXNoRmlsZShsb2NhbF9iYmxheWVyY29uZiwgYmJsYXllcmNvbmYpCisKKyAgICAgICAgb3MudW5saW5rKGxvY2FsX2JibGF5ZXJjb25mKQorCisgICAgICAgIHNlbGYuaXNsYXllcnNldCA9IFRydWUKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiByZWxlYXNlKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5iZS5zb3VyY2VkaXIgYW5kIHNlbGYuX3BhdGhleGlzdHMoc2VsZi5iZS5idWlsZGRpcikKKyAgICAgICAgaW1wb3J0IHNodXRpbAorICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguam9pbihzZWxmLmJlLnNvdXJjZWRpciwgImJ1aWxkIikpCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fcGF0aGV4aXN0cyhzZWxmLmJlLmJ1aWxkZGlyKQorCisgICAgZGVmIHRyaWdnZXJCdWlsZChzZWxmLCBiaXRiYWtlLCBsYXllcnMsIHZhcmlhYmxlcywgdGFyZ2V0cyk6CisgICAgICAgICMgc2V0IHVwIHRoZSBidWlkIGVudmlyb25tZW50IHdpdGggdGhlIG5lZWRlZCBsYXllcnMKKyAgICAgICAgc2VsZi5zZXRMYXllcnMoYml0YmFrZSwgbGF5ZXJzKQorICAgICAgICBzZWxmLndyaXRlQ29uZkZpbGUoImNvbmYvdG9hc3Rlci1wcmUuY29uZiIsICkKKyAgICAgICAgc2VsZi53cml0ZUNvbmZGaWxlKCJjb25mL3RvYXN0ZXIuY29uZiIsIHJhdyA9ICJJTkhFUklUKz1cInRvYXN0ZXIgYnVpbGRoaXN0b3J5XCIiKQorCisgICAgICAgICMgZ2V0IHRoZSBiYiBzZXJ2ZXIgcnVubmluZyB3aXRoIHRoZSBidWlsZCByZXEgaWQgYW5kIGJ1aWxkIGVudiBpZAorICAgICAgICBiYmN0cmwgPSBzZWxmLmdldEJCQ29udHJvbGxlcigpCisKKyAgICAgICAgIyB0cmlnZ2VyIHRoZSBidWlsZCBjb21tYW5kCisgICAgICAgIHRhc2sgPSByZWR1Y2UobGFtYmRhIHgsIHk6IHggaWYgbGVuKHkpPT0gMCBlbHNlIHksIG1hcChsYW1iZGEgeTogeS50YXNrLCB0YXJnZXRzKSkKKyAgICAgICAgaWYgbGVuKHRhc2spID09IDA6CisgICAgICAgICAgICB0YXNrID0gTm9uZQorCisgICAgICAgIGJiY3RybC5idWlsZChsaXN0KG1hcChsYW1iZGEgeDp4LnRhcmdldCwgdGFyZ2V0cykpLCB0YXNrKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBCdWlsZCBsYXVuY2hlZCwgZXhpdGluZy4gRm9sbG93IGJ1aWxkIGxvZ3MgYXQgJXMvdG9hc3Rlcl91aS5sb2ciICUgc2VsZi5iZS5idWlsZGRpcikKKworICAgICAgICAjIGRpc2Nvbm5lY3QgZnJvbSB0aGUgc2VydmVyCisgICAgICAgIGJiY3RybC5kaXNjb25uZWN0KCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL3Rlc3RzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRiYzc3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL3Rlc3RzLnB5CkBAIC0wLDAgKzEsMTkwIEBACisiIiIKK1RoaXMgZmlsZSBkZW1vbnN0cmF0ZXMgd3JpdGluZyB0ZXN0cyB1c2luZyB0aGUgdW5pdHRlc3QgbW9kdWxlLiBUaGVzZSB3aWxsIHBhc3MKK3doZW4geW91IHJ1biAibWFuYWdlLnB5IHRlc3QiLgorCitSZXBsYWNlIHRoaXMgd2l0aCBtb3JlIGFwcHJvcHJpYXRlIHRlc3RzIGZvciB5b3VyIGFwcGxpY2F0aW9uLgorIiIiCisKK2Zyb20gZGphbmdvLnRlc3QgaW1wb3J0IFRlc3RDYXNlCisKK2Zyb20gYmxkY29udHJvbC5iYmNvbnRyb2xsZXIgaW1wb3J0IEJpdGJha2VDb250cm9sbGVyLCBCdWlsZFNldHVwRXhjZXB0aW9uCitmcm9tIGJsZGNvbnRyb2wubG9jYWxob3N0YmVjb250cm9sbGVyIGltcG9ydCBMb2NhbGhvc3RCRUNvbnRyb2xsZXIKK2Zyb20gYmxkY29udHJvbC5zc2hiZWNvbnRyb2xsZXIgaW1wb3J0IFNTSEJFQ29udHJvbGxlcgorZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRFbnZpcm9ubWVudCwgQnVpbGRSZXF1ZXN0Citmcm9tIGJsZGNvbnRyb2wubWFuYWdlbWVudC5jb21tYW5kcy5ydW5idWlsZHMgaW1wb3J0IENvbW1hbmQKKworaW1wb3J0IHNvY2tldAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBvcworCisjIHN0YW5kYXJkIHBva3kgZGF0YSBoYXJkY29kZWQgZm9yIHRlc3RpbmcKK0JJVEJBS0VfTEFZRVJTID0gW3R5cGUoJ2JpdGJha2VfaW5mbycsIChvYmplY3QsKSwgeyAiZ2l0dXJsIjogImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kuZ2l0IiwgImRpcnBhdGgiOiAiIiwgImNvbW1pdCI6ICJIRUFEIn0pXQorUE9LWV9MQVlFUlMgPSBbCisgICAgdHlwZSgncG9reV9pbmZvJywgKG9iamVjdCwpLCB7ICJuYW1lIjogIm1ldGEiLCAiZ2l0dXJsIjogImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kuZ2l0IiwgImRpcnBhdGgiOiAibWV0YSIsICJjb21taXQiOiAiSEVBRCJ9KSwKKyAgICB0eXBlKCdwb2t5X2luZm8nLCAob2JqZWN0LCksIHsgIm5hbWUiOiAibWV0YS15b2N0byIsICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reS5naXQiLCAiZGlycGF0aCI6ICJtZXRhLXlvY3RvIiwgImNvbW1pdCI6ICJIRUFEIn0pLAorICAgIHR5cGUoJ3Bva3lfaW5mbycsIChvYmplY3QsKSwgeyAibmFtZSI6ICJtZXRhLXlvY3RvLWJzcCIsICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reS5naXQiLCAiZGlycGF0aCI6ICJtZXRhLXlvY3RvLWJzcCIsICJjb21taXQiOiAiSEVBRCJ9KSwKKyAgICBdCisKKworCisjIHdlIGhhdmUgYW4gYWJzdHJhY3QgdGVzdCBjbGFzcyBkZXNpZ25lZCB0byBlbnN1cmUgdGhhdCB0aGUgY29udHJvbGxlcnMgdXNlIGEgc2luZ2xlIGludGVyZmFjZQorIyBzcGVjaWZpYyBjb250cm9sbGVyIHRlc3RzIG9ubHkgbmVlZCB0byBvdmVycmlkZSB0aGUgX2dldEJ1aWxkRW52aXJvbm1lbnQoKSBtZXRob2QKKwordGVzdF9zb3VyY2VkaXIgPSBvcy5nZXRlbnYoIlRUU19TT1VSQ0VfRElSIikKK3Rlc3RfYnVpbGRkaXIgPSBvcy5nZXRlbnYoIlRUU19CVUlMRF9ESVIiKQordGVzdF9hZGRyZXNzID0gb3MuZ2V0ZW52KCJUVFNfVEVTVF9BRERSRVNTIiwgImxvY2FsaG9zdCIpCisKK2lmIHRlc3Rfc291cmNlZGlyID09IE5vbmUgb3IgdGVzdF9idWlsZGRpciA9PSBOb25lIG9yIHRlc3RfYWRkcmVzcyA9PSBOb25lOgorICAgIHJhaXNlIEV4Y2VwdGlvbigiUGxlYXNlIHNldCBUVFRTX1NPVVJDRV9ESVIsIFRUU19CVUlMRF9ESVIgYW5kIFRUU19URVNUX0FERFJFU1MiKQorCisjIFRoZSBiYiBzZXJ2ZXIgd2lsbCBleHBlY3QgYSB0b2FzdGVyLXByZS5jb25mIGZpbGUgdG8gZXhpc3QuIElmIGl0IGRvZXNuJ3QgZXhpdCB0aGVuIHdlIG1ha2UKKyMgYW4gZW1wdHkgb25lIGhlcmUuCitvcGVuKHRlc3RfYnVpbGRkaXIgKyAnY29uZi90b2FzdGVyLXByZS5jb25mJywgJ2EnKS5jbG9zZSgpCisKK2NsYXNzIEJFQ29udHJvbGxlclRlc3RzKG9iamVjdCk6CisKKyAgICBkZWYgX3NlcnZlckZvcmNlU3RvcChzZWxmLCBiYyk6CisgICAgICAgIGVyciA9IGJjLl9zaGVsbGNtZCgibmV0c3RhdCAgLXRhcG4gMj4vZGV2L251bGwgfCBncmVwIDgyMDAgfCBhd2sgJ3twcmludCAkN30nIHwgc29ydCAtZnUgfCBjdXQgLWQgXCIvXCIgLWYgMSB8IGdyZXAgLXYgLS0gLSB8IHRlZSAvZGV2L2ZkLzIgfCB4YXJncyAtciBraWxsIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyciA9PSAnJywgImJpdGJha2Ugc2VydmVyIHBpZCAlcyBub3Qgc3RvcHBlZCIgJSBlcnIpCisKKyAgICBkZWYgdGVzdF9zZXJ2ZXJTdGFydEFuZFN0b3Aoc2VsZik6CisgICAgICAgIGZyb20gYmxkY29udHJvbC5zc2hiZWNvbnRyb2xsZXIgaW1wb3J0IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uCisgICAgICAgIG9iZSA9ICBzZWxmLl9nZXRCdWlsZEVudmlyb25tZW50KCkKKyAgICAgICAgYmMgPSBzZWxmLl9nZXRCRUNvbnRyb2xsZXIob2JlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHNldHRpbmcgbGF5ZXJzLCBza2lwIGFueSBsYXllciBpbmZvCisgICAgICAgICAgICBiYy5zZXRMYXllcnMoQklUQkFLRV9MQVlFUlMsIFBPS1lfTEFZRVJTKQorICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24sICBlOgorICAgICAgICAgICAgcHJpbnQgIlRlc3Qgc2tpcHBlZCBkdWUgdG8gY29tbWFuZCBub3QgaW1wbGVtZW50ZWQgeWV0IgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgIyBXZSBhcmUgb2sgd2l0aCB0aGUgZXhjZXB0aW9uIGFzIHdlJ3JlIGhhbmRsaW5nIHRoZSBnaXQgYWxyZWFkeSBleGlzdHMKKyAgICAgICAgZXhjZXB0IEJ1aWxkU2V0dXBFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYmMucG9reWRpcm5hbWUgPSB0ZXN0X3NvdXJjZWRpcgorICAgICAgICBiYy5pc2xheWVyc2V0ID0gVHJ1ZQorCisgICAgICAgIGhvc3RuYW1lID0gdGVzdF9hZGRyZXNzLnNwbGl0KCJAIilbLTFdCisKKyAgICAgICAgIyB0ZXN0IHN0YXJ0IHNlcnZlciBhbmQgc3RvcAorICAgICAgICBiYy5zdGFydEJCU2VydmVyKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkuY29ubmVjdF9leCgoaG9zdG5hbWUsIGludChiYy5iZS5iYnBvcnQpKSksICJTZXJ2ZXIgbm90IGFuc3dlcmluZyIpCisKKyAgICAgICAgYmMuc3RvcEJCU2VydmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkuY29ubmVjdF9leCgoaG9zdG5hbWUsIGludChiYy5iZS5iYnBvcnQpKSksICJTZXJ2ZXIgbm90IHN0b3BwZWQiKQorCisgICAgICAgIHNlbGYuX3NlcnZlckZvcmNlU3RvcChiYykKKworICAgIGRlZiB0ZXN0X2dldEJCQ29udHJvbGxlcihzZWxmKToKKyAgICAgICAgZnJvbSBibGRjb250cm9sLnNzaGJlY29udHJvbGxlciBpbXBvcnQgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24KKyAgICAgICAgb2JlID0gc2VsZi5fZ2V0QnVpbGRFbnZpcm9ubWVudCgpCisgICAgICAgIGJjID0gc2VsZi5fZ2V0QkVDb250cm9sbGVyKG9iZSkKKyAgICAgICAgbGF5ZXJTZXQgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHNldHRpbmcgbGF5ZXJzLCBza2lwIGFueSBsYXllciBpbmZvCisgICAgICAgICAgICBsYXllclNldCA9IGJjLnNldExheWVycyhCSVRCQUtFX0xBWUVSUywgUE9LWV9MQVlFUlMpCisgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHByaW50ICJUZXN0IHNraXBwZWQgZHVlIHRvIGNvbW1hbmQgbm90IGltcGxlbWVudGVkIHlldCIKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICMgV2UgYXJlIG9rIHdpdGggdGhlIGV4Y2VwdGlvbiBhcyB3ZSdyZSBoYW5kbGluZyB0aGUgZ2l0IGFscmVhZHkgZXhpc3RzCisgICAgICAgIGV4Y2VwdCBCdWlsZFNldHVwRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGJjLnBva3lkaXJuYW1lID0gdGVzdF9zb3VyY2VkaXIKKyAgICAgICAgYmMuaXNsYXllcnNldCA9IFRydWUKKworICAgICAgICBiYmMgPSBiYy5nZXRCQkNvbnRyb2xsZXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShiYmMsIEJpdGJha2VDb250cm9sbGVyKSkKKyAgICAgICAgYmMuc3RvcEJCU2VydmVyKCkKKworICAgICAgICBzZWxmLl9zZXJ2ZXJGb3JjZVN0b3AoYmMpCisKK2NsYXNzIExvY2FsaG9zdEJFQ29udHJvbGxlclRlc3RzKFRlc3RDYXNlLCBCRUNvbnRyb2xsZXJUZXN0cyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc3VwZXIoTG9jYWxob3N0QkVDb250cm9sbGVyVGVzdHMsIHNlbGYpLl9faW5pdF9fKCphcmdzKQorCisKKyAgICBkZWYgX2dldEJ1aWxkRW52aXJvbm1lbnQoc2VsZik6CisgICAgICAgIHJldHVybiBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMuY3JlYXRlKAorICAgICAgICAgICAgICAgIGxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfRlJFRSwKKyAgICAgICAgICAgICAgICBiZXR5cGUgPSBCdWlsZEVudmlyb25tZW50LlRZUEVfTE9DQUwsCisgICAgICAgICAgICAgICAgYWRkcmVzcyA9IHRlc3RfYWRkcmVzcywKKyAgICAgICAgICAgICAgICBzb3VyY2VkaXIgPSB0ZXN0X3NvdXJjZWRpciwKKyAgICAgICAgICAgICAgICBidWlsZGRpciA9IHRlc3RfYnVpbGRkaXIgKQorCisgICAgZGVmIF9nZXRCRUNvbnRyb2xsZXIoc2VsZiwgb2JlKToKKyAgICAgICAgcmV0dXJuIExvY2FsaG9zdEJFQ29udHJvbGxlcihvYmUpCisKK2NsYXNzIFNTSEJFQ29udHJvbGxlclRlc3RzKFRlc3RDYXNlLCBCRUNvbnRyb2xsZXJUZXN0cyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc3VwZXIoU1NIQkVDb250cm9sbGVyVGVzdHMsIHNlbGYpLl9faW5pdF9fKCphcmdzKQorCisgICAgZGVmIF9nZXRCdWlsZEVudmlyb25tZW50KHNlbGYpOgorICAgICAgICByZXR1cm4gQnVpbGRFbnZpcm9ubWVudC5vYmplY3RzLmNyZWF0ZSgKKyAgICAgICAgICAgICAgICBsb2NrID0gQnVpbGRFbnZpcm9ubWVudC5MT0NLX0ZSRUUsCisgICAgICAgICAgICAgICAgYmV0eXBlID0gQnVpbGRFbnZpcm9ubWVudC5UWVBFX1NTSCwKKyAgICAgICAgICAgICAgICBhZGRyZXNzID0gdGVzdF9hZGRyZXNzLAorICAgICAgICAgICAgICAgIHNvdXJjZWRpciA9IHRlc3Rfc291cmNlZGlyLAorICAgICAgICAgICAgICAgIGJ1aWxkZGlyID0gdGVzdF9idWlsZGRpciApCisKKyAgICBkZWYgX2dldEJFQ29udHJvbGxlcihzZWxmLCBvYmUpOgorICAgICAgICByZXR1cm4gU1NIQkVDb250cm9sbGVyKG9iZSkKKworICAgIGRlZiB0ZXN0X3BhdGhFeGlzdHMoc2VsZik6CisgICAgICAgIG9iZSA9IEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5jcmVhdGUoYmV0eXBlID0gQnVpbGRFbnZpcm9ubWVudC5UWVBFX1NTSCwgYWRkcmVzcz0gdGVzdF9hZGRyZXNzKQorICAgICAgICBzYmMgPSBTU0hCRUNvbnRyb2xsZXIob2JlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2JjLl9wYXRoZXhpc3RzKCIvIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2JjLl9wYXRoZXhpc3RzKCIvLmRlYWRiZWVmIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzYmMuX3BhdGhleGlzdHMoc2JjLl9zaGVsbGNtZCgicHdkIikpKQorCisKK2NsYXNzIFJ1bkJ1aWxkc0NvbW1hbmRUZXN0cyhUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYmVjX3NlbGVjdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3RzIHRoYXQgd2UgY2FuIGZpbmQgYW5kIGxvY2sgYSBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAiIiIKKworICAgICAgICBvYmUgPSBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMuY3JlYXRlKGxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfRlJFRSwgYmV0eXBlID0gQnVpbGRFbnZpcm9ubWVudC5UWVBFX0xPQ0FMKQorICAgICAgICBjb21tYW5kID0gQ29tbWFuZCgpCisgICAgICAgIGJlYyA9IGNvbW1hbmQuX3NlbGVjdEJ1aWxkRW52aXJvbm1lbnQoKQorCisgICAgICAgICMgbWFrZSBzdXJlIHdlIHNlbGVjdCB0aGUgb2JqZWN0IHdlJ3ZlIGp1c3QgYnVpbHQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJlYy5iZS5pZCA9PSBvYmUuaWQsICJFbnZpcm9ubWVudCBpcyBub3QgcHJvcGVybHkgc2VsZWN0ZWQiKQorICAgICAgICAjIHdlIGhhdmUgYSBsb2NrZWQgZW52aXJvbm1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJlYy5iZS5sb2NrID09IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19MT0NLLCAiRW52aXJvbm1lbnQgaXMgbm90IGxvY2tlZCIpCisgICAgICAgICMgbm8gbW9yZSBzZWxlY3Rpb25zIHBvc3NpYmxlIGhlcmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgY29tbWFuZC5fc2VsZWN0QnVpbGRFbnZpcm9ubWVudCkKKworICAgIGRlZiB0ZXN0X2JyX3NlbGVjdChzZWxmKToKKyAgICAgICAgZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBQcm9qZWN0LCBSZWxlYXNlLCBCaXRiYWtlVmVyc2lvbiwgQnJhbmNoCisgICAgICAgIHAgPSBQcm9qZWN0Lm9iamVjdHMuY3JlYXRlX3Byb2plY3QoInRlc3QiLCBSZWxlYXNlLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShuYW1lID0gIkhFQUQiLCBiaXRiYWtlX3ZlcnNpb24gPSBCaXRiYWtlVmVyc2lvbi5vYmplY3RzLmdldF9vcl9jcmVhdGUobmFtZT0iSEVBRCIsIGJyYW5jaD1CcmFuY2gub2JqZWN0cy5nZXRfb3JfY3JlYXRlKG5hbWU9IkhFQUQiKSlbMF0pWzBdKQorICAgICAgICBvYnIgPSBCdWlsZFJlcXVlc3Qub2JqZWN0cy5jcmVhdGUoc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX1FVRVVFRCwgcHJvamVjdCA9IHApCisgICAgICAgIGNvbW1hbmQgPSBDb21tYW5kKCkKKyAgICAgICAgYnIgPSBjb21tYW5kLl9zZWxlY3RCdWlsZFJlcXVlc3QoKQorCisgICAgICAgICMgbWFrZSBzdXJlIHdlIHNlbGVjdCB0aGUgb2JqZWN0IHdlJ3ZlIGp1c3QgYnVpbHQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9ici5pZCA9PSBici5pZCwgIlJlcXVlc3QgaXMgbm90IHByb3Blcmx5IHNlbGVjdGVkIikKKyAgICAgICAgIyB3ZSBoYXZlIGEgbG9ja2VkIGVudmlyb25tZW50CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShici5zdGF0ZSA9PSBCdWlsZFJlcXVlc3QuUkVRX0lOUFJPR1JFU1MsICJSZXF1ZXN0IGlzIG5vdCB1cGRhdGVkIikKKyAgICAgICAgIyBubyBtb3JlIHNlbGVjdGlvbnMgcG9zc2libGUgaGVyZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBjb21tYW5kLl9zZWxlY3RCdWlsZFJlcXVlc3QpCisKKworY2xhc3MgVXRpbGl0eVRlc3RzKFRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9yZWR1Y2VfcGF0aChzZWxmKToKKyAgICAgICAgZnJvbSBibGRjb250cm9sLm1hbmFnZW1lbnQuY29tbWFuZHMubG9hZGNvbmYgaW1wb3J0IF9yZWR1Y2VfY2Fub25fcGF0aCwgX2dldF9pZF9mb3Jfc291cmNldHlwZQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggX3JlZHVjZV9jYW5vbl9wYXRoKCIvIikgPT0gIi8iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIF9yZWR1Y2VfY2Fub25fcGF0aCgiL2hvbWUvLi4iKSA9PSAiLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggX3JlZHVjZV9jYW5vbl9wYXRoKCIvaG9tZS8uLi9hbmEiKSA9PSAiL2FuYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggX3JlZHVjZV9jYW5vbl9wYXRoKCIvaG9tZS8uLi9hbmEvLi4iKSA9PSAiLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggX3JlZHVjZV9jYW5vbl9wYXRoKCIvaG9tZS9hbmEvbWloYWkvLi4vbWFyaWEiKSA9PSAiL2hvbWUvYW5hL21hcmlhIikKKworICAgIGRlZiB0ZXN0X2dldF9pZF9mb3Jfc29ydWNldHlwZShzZWxmKToKKyAgICAgICAgZnJvbSBibGRjb250cm9sLm1hbmFnZW1lbnQuY29tbWFuZHMubG9hZGNvbmYgaW1wb3J0IF9yZWR1Y2VfY2Fub25fcGF0aCwgX2dldF9pZF9mb3Jfc291cmNldHlwZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIF9nZXRfaWRfZm9yX3NvdXJjZXR5cGUoImxheWVyaW5kZXgiKSA9PSAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIF9nZXRfaWRfZm9yX3NvdXJjZXR5cGUoImxvY2FsIikgPT0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCBfZ2V0X2lkX2Zvcl9zb3VyY2V0eXBlKCJpbXBvcnRlZCIpID09IDIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIF9nZXRfaWRfZm9yX3NvdXJjZXR5cGUoInVua25vd24iKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvdmlld3MucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC92aWV3cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGYwMGVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvdmlld3MucHkKQEAgLTAsMCArMSBAQAorIyBDcmVhdGUgeW91ciB2aWV3cyBoZXJlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvUkVBRE1FIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZDBmZjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9SRUFETUUKQEAgLTAsMCArMSw2IEBACitjb250cmliIGRpcmVjdG9yeSBmb3IgdG9hc3RlcgorCitUaGlzIGRpcmVjdG9yeSBob2xkcyBjb2RlIHRoYXQgd29ya3Mgd2l0aCBUb2FzdGVyLCB3aXRob3V0IGJlaW5nIGFuIGludGVncmFsIHBhcnQgb2YgdGhlIFRvYXN0ZXIgcHJvamVjdC4KK0l0IGlzIGludGVuZGVkIGZvciB0ZXN0aW5nIGNvZGUsIHRlc3RpbmcgZml4dHVyZXMsIHRvb2xzIGZvciBUb2FzdGVyLCBldGMuCisKK05PVEU6IFRoaXMgZGlyZWN0b3J5IGlzIE5PVCBhIFB5dGhvbiBtb2R1bGUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci8uZ2l0aWdub3JlIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDU2NTJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDEwIEBACisqLnB5YworKi5zd3AKKyouc3dvCisqLmtwZgorKi5lZ2ctaW5mby8KKy5pZGVhCisudG94Cit0bXAvCitkaXN0LworLkRTX1N0b3JlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci8udHJhdmlzLnltbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyLy50cmF2aXMueW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MjBmMzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci8udHJhdmlzLnltbApAQCAtMCwwICsxLDUwIEBACitsYW5ndWFnZTogcHl0aG9uCitweXRob246CisgIC0gIjIuNyIKKyAgLSAiMy40Igorc2VydmljZXM6CisgIC0gbXlzcWwKKyAgLSBwb3N0Z3Jlc3FsCitlbnY6CisgIC0gREpBTkdPPTEuNCBEQj1zcWxpdGUKKyAgLSBESkFOR089MS40IERCPW15c3FsCisgIC0gREpBTkdPPTEuNCBEQj1wb3N0Z3JlcworICAtIERKQU5HTz0xLjUgREI9c3FsaXRlCisgIC0gREpBTkdPPTEuNSBEQj1teXNxbAorICAtIERKQU5HTz0xLjUgREI9cG9zdGdyZXMKKyAgLSBESkFOR089MS42IERCPXNxbGl0ZQorICAtIERKQU5HTz0xLjYgREI9bXlzcWwKKyAgLSBESkFOR089MS42IERCPXBvc3RncmVzCisgIC0gREpBTkdPPTEuNyBEQj1zcWxpdGUKKyAgLSBESkFOR089MS43IERCPW15c3FsCisgIC0gREpBTkdPPTEuNyBEQj1wb3N0Z3JlcworCittYXRyaXg6CisgIGV4Y2x1ZGU6CisgICAgLSBweXRob246ICIzLjQiCisgICAgICBlbnY6IERKQU5HTz0xLjQgREI9c3FsaXRlCisgICAgLSBweXRob246ICIzLjQiCisgICAgICBlbnY6IERKQU5HTz0xLjQgREI9bXlzcWwKKyAgICAtIHB5dGhvbjogIjMuNCIKKyAgICAgIGVudjogREpBTkdPPTEuNCBEQj1wb3N0Z3JlcworICAgIC0gcHl0aG9uOiAiMy40IgorICAgICAgZW52OiBESkFOR089MS41IERCPXNxbGl0ZQorICAgIC0gcHl0aG9uOiAiMy40IgorICAgICAgZW52OiBESkFOR089MS41IERCPW15c3FsCisgICAgLSBweXRob246ICIzLjQiCisgICAgICBlbnY6IERKQU5HTz0xLjUgREI9cG9zdGdyZXMKKyAgICAtIHB5dGhvbjogIjMuNCIKKyAgICAgIGVudjogREpBTkdPPTEuNiBEQj1teXNxbAorICAgIC0gcHl0aG9uOiAiMy40IgorICAgICAgZW52OiBESkFOR089MS43IERCPW15c3FsCisKK2JlZm9yZV9zY3JpcHQ6CisgIC0gbXlzcWwgLWUgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisgIC0gcHNxbCAtYyAnY3JlYXRlIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycgLVUgcG9zdGdyZXMKK2luc3RhbGw6CisgIC0gcGlwIGluc3RhbGwgc2l4CisgIC0gaWYgWyAiJERCIiA9PSAibXlzcWwiIF07IHRoZW4gcGlwIGluc3RhbGwgbXlzcWwtcHl0aG9uOyBmaQorICAtIGlmIFsgIiREQiIgPT0gInBvc3RncmVzIiBdOyB0aGVuIHBpcCBpbnN0YWxsIHBzeWNvcGcyOyBmaQorICAtIHBpcCBpbnN0YWxsIC1xIERqYW5nbz09JERKQU5HTyAtLXVzZS1taXJyb3JzCitzY3JpcHQ6CisgIC0gLi9ydW50ZXN0cy5weSAtLXNldHRpbmdzPXRlc3RzLnRlc3RfJERCCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9MSUNFTlNFIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIvTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjdjM2IxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIvTElDRU5TRQpAQCAtMCwwICsxLDIxIEBACitUaGUgTUlUIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSAyMDEyIEhlbnJpcXVlIEJhc3RvcworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL1JFQURNRS5yc3QgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9SRUFETUUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOWQ0ZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9SRUFETUUucnN0CkBAIC0wLDAgKzEsMTU2IEBACitEamFuZ28gQWdncmVnYXRlIElmOiBDb25kaXRpb24gYWdncmVnYXRlcyBmb3IgRGphbmdvCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIGltYWdlOjogaHR0cHM6Ly90cmF2aXMtY2kub3JnL2hlbnJpcXVlYmFzdG9zL2RqYW5nby1hZ2dyZWdhdGUtaWYucG5nP2JyYW5jaD1tYXN0ZXIKKyAgICA6dGFyZ2V0OiBodHRwczovL3RyYXZpcy1jaS5vcmcvaGVucmlxdWViYXN0b3MvZGphbmdvLWFnZ3JlZ2F0ZS1pZgorICAgIDphbHQ6IFRlc3QgU3RhdHVzCisKKy4uIGltYWdlOjogaHR0cHM6Ly9sYW5kc2NhcGUuaW8vZ2l0aHViL2hlbnJpcXVlYmFzdG9zL2RqYW5nby1hZ2dyZWdhdGUtaWYvbWFzdGVyL2xhbmRzY2FwZS5wbmcKKyAgICA6dGFyZ2V0OiBodHRwczovL2xhbmRzY2FwZS5pby9naXRodWIvaGVucmlxdWViYXN0b3MvZGphbmdvLWFnZ3JlZ2F0ZS1pZi9tYXN0ZXIKKyAgICA6YWx0OiBDb2RlIEhlbHRoCisKKy4uIGltYWdlOjogaHR0cHM6Ly9weXBpcC5pbi92L2RqYW5nby1hZ2dyZWdhdGUtaWYvYmFkZ2UucG5nCisgICAgOnRhcmdldDogaHR0cHM6Ly9jcmF0ZS5pby9wYWNrYWdlcy9kamFuZ28tYWdncmVnYXRlLWlmLworICAgIDphbHQ6IExhdGVzdCBQeVBJIHZlcnNpb24KKworLi4gaW1hZ2U6OiBodHRwczovL3B5cGlwLmluL2QvZGphbmdvLWFnZ3JlZ2F0ZS1pZi9iYWRnZS5wbmcKKyAgICA6dGFyZ2V0OiBodHRwczovL2NyYXRlLmlvL3BhY2thZ2VzL2RqYW5nby1hZ2dyZWdhdGUtaWYvCisgICAgOmFsdDogTnVtYmVyIG9mIFB5UEkgZG93bmxvYWRzCisKKypBZ2dyZWdhdGUtaWYqIGFkZHMgY29uZGl0aW9uYWwgYWdncmVnYXRlcyB0byBEamFuZ28uCisKK0NvbmRpdGlvbmFsIGFnZ3JlZ2F0ZXMgY2FuIGhlbHAgeW91IHJlZHVjZSB0aGUgYW1tb3VudCBvZiBxdWVyaWVzIHRvIG9idGFpbgorYWdncmVnYXRlZCBpbmZvcm1hdGlvbiwgbGlrZSBzdGF0aXN0aWNzIGZvciBleGFtcGxlLgorCitJbWFnaW5lIHlvdSBoYXZlIGEgbW9kZWwgYGBPZmZlcmBgIGxpa2UgdGhpcyBvbmU6CisKKy4uIGNvZGUtYmxvY2s6OiBweXRob24KKworICAgIGNsYXNzIE9mZmVyKG1vZGVscy5Nb2RlbCk6CisgICAgICAgIHNwb25zb3IgPSBtb2RlbHMuRm9yZWlnbktleShVc2VyKQorICAgICAgICBwcmljZSA9IG1vZGVscy5EZWNpbWFsRmllbGQobWF4X2RpZ2l0cz05LCBkZWNpbWFsX3BsYWNlcz0yKQorICAgICAgICBzdGF0dXMgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MzApCisgICAgICAgIGV4cGlyZV9hdCA9IG1vZGVscy5EYXRlRmllbGQobnVsbD1UcnVlLCBibGFuaz1UcnVlKQorICAgICAgICBjcmVhdGVkX2F0ID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoYXV0b19ub3dfYWRkPVRydWUpCisgICAgICAgIHVwZGF0ZWRfYXQgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChhdXRvX25vdz1UcnVlKQorCisgICAgICAgIE9QRU4gPSAiT1BFTiIKKyAgICAgICAgUkVWT0tFRCA9ICJSRVZPS0VEIgorICAgICAgICBQQUlEID0gIlBBSUQiCisKK0xldCdzIHNheSB5b3Ugd2FudCB0byBrbm93OgorCisjLiBIb3cgbWFueSBvZmZlcnMgZXhpc3RzIGluIHRvdGFsOworIy4gSG93IG1hbnkgb2YgdGhlbSBhcmUgT1BFTiwgUkVWT0tFRCBvciBQQUlEOworIy4gSG93IG11Y2ggbW9uZXkgd2FzIG9mZmVyZWQgaW4gdG90YWw7CisjLiBIb3cgbXVjaCBtb25leSBpcyBpbiBPUEVOLCBSRVZPS0VEIGFuZCBQQUlEIG9mZmVyczsKKworVG8gZ2V0IHRoZXNlIGluZm9ybWF0aW9ucywgeW91IGNvdWxkIHF1ZXJ5OgorCisuLiBjb2RlLWJsb2NrOjogcHl0aG9uCisKKyAgICBmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IENvdW50LCBTdW0KKworICAgIE9mZmVyLm9iamVjdHMuY291bnQoKQorICAgIE9mZmVyLm9iamVjdHMuZmlsdGVyKHN0YXR1cz1PZmZlci5PUEVOKS5hZ2dyZWdhdGUoQ291bnQoJ3BrJykpCisgICAgT2ZmZXIub2JqZWN0cy5maWx0ZXIoc3RhdHVzPU9mZmVyLlJFVk9LRUQpLmFnZ3JlZ2F0ZShDb3VudCgncGsnKSkKKyAgICBPZmZlci5vYmplY3RzLmZpbHRlcihzdGF0dXM9T2ZmZXIuUEFJRCkuYWdncmVnYXRlKENvdW50KCdwaycpKQorICAgIE9mZmVyLm9iamVjdHMuYWdncmVnYXRlKFN1bSgncHJpY2UnKSkKKyAgICBPZmZlci5vYmplY3RzLmZpbHRlcihzdGF0dXM9T2ZmZXIuT1BFTikuYWdncmVnYXRlKFN1bSgncHJpY2UnKSkKKyAgICBPZmZlci5vYmplY3RzLmZpbHRlcihzdGF0dXM9T2ZmZXIuUkVWT0tFRCkuYWdncmVnYXRlKFN1bSgncHJpY2UnKSkKKyAgICBPZmZlci5vYmplY3RzLmZpbHRlcihzdGF0dXM9T2ZmZXIuUEFJRCkuYWdncmVnYXRlKFN1bSgncHJpY2UnKSkKKworSW4gdGhpcyBjYXNlLCAqKjggcXVlcmllcyoqIHdlcmUgbmVlZGVkIHRvIHJldHJpZXZlIHRoZSBkZXNpcmVkIGluZm9ybWF0aW9uLgorCitXaXRoIGNvbmRpdGlvbmFsIGFnZ3JlZ2F0ZXMgeW91IGNhbiBnZXQgaXQgYWxsIHdpdGggb25seSAqKjEgcXVlcnkqKjoKKworLi4gY29kZS1ibG9jazo6IHB5dGhvbgorCisgICAgZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCisgICAgZnJvbSBhZ2dyZWdhdGVfaWYgaW1wb3J0IENvdW50LCBTdW0KKworICAgIE9mZmVyLm9iamVjdHMuYWdncmVnYXRlKAorICAgICAgICBwa19fY291bnQ9Q291bnQoJ3BrJyksCisgICAgICAgIHBrX19vcGVuX19jb3VudD1Db3VudCgncGsnLCBvbmx5PVEoc3RhdHVzPU9mZmVyLk9QRU4pKSwKKyAgICAgICAgcGtfX3Jldm9rZWRfX2NvdW50PUNvdW50KCdwaycsIG9ubHk9UShzdGF0dXM9T2ZmZXIuUkVWT0tFRCkpLAorICAgICAgICBwa19fcGFpZF9fY291bnQ9Q291bnQoJ3BrJywgb25seT1RKHN0YXR1cz1PZmZlci5QQUlEKSksCisgICAgICAgIHBrX19zdW09U3VtKCdwcmljZScpLAorICAgICAgICBwa19fb3Blbl9fc3VtPVN1bSgncHJpY2UnLCBvbmx5PVEoc3RhdHVzPU9mZmVyLk9QRU4pKSwKKyAgICAgICAgcGtfX3Jldm9rZWRfX3N1bT1TdW0oJ3ByaWNlJyksIG9ubHk9UShzdGF0dXM9T2ZmZXIuUkVWT0tFRCkpLAorICAgICAgICBwa19fcGFpZF9fc3VtPVN1bSgncHJpY2UnKSwgb25seT1RKHN0YXR1cz1PZmZlci5QQUlEKSkKKyAgICApCisKK0luc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tCisKKypBZ2dyZWdhdGUtaWYqIHdvcmtzIHdpdGggRGphbmdvIDEuNCwgMS41LCAxLjYgYW5kIDEuNy4KKworVG8gaW5zdGFsbCBpdCwgc2ltcGx5OgorCisuLiBjb2RlLWJsb2NrOjogYmFzaAorCisgICAgJCBwaXAgaW5zdGFsbCBkamFuZ28tYWdncmVnYXRlLWlmCisKK0luc3BpcmF0aW9uCistLS0tLS0tLS0tLQorCitUaGVyZSBpcyBhIDUgeWVhcnMgb2xkIGB0aWNrZXQgMTEzMDVgXyB0aGF0IHdpbGwgKCpob3BlZnVsbHkqKSBpbXBsZW1lbnQgdGhpcyBmZWF0dXJlIGludG8KK0RqYW5nbyAxLjguCisKK1VzaW5nIERqYW5nbyAxLjYsIEkgc3RpbGwgd2FudGVkIHRvIGF2b2lkIGNyZWF0aW5nIGN1c3RvbSBxdWVyaWVzIGZvciB2ZXJ5IHNpbXBsZQorY29uZGl0aW9uYWwgYWdncmVnYXRpb25zLiBTbyBJJ3ZlIGNoZXJyeSBwaWNrZWQgdGhvc2UgaWRlYXMgYW5kIG90aGVycyBmcm9tIHRoZQoraW50ZXJuZXQgYW5kIGJ1aWx0IHRoaXMgbGlicmFyeS4KKworVGhpcyBsaWJyYXJ5IHVzZXMgdGhlIHNhbWUgQVBJIGFuZCB0ZXN0cyBwcm9wb3NlZCBvbiBgdGlja2V0IDExMzA1YF8sIHNvIHdoZW4gdGhlCituZXcgZmVhdHVyZSBpcyBhdmFpbGFibGUgeW91IGNhbiBlYXNpbHkgcmVwbGFjZSBgYGRqYW5nby1hZ2dyZWdhdGUtaWZgYC4KKworTGltaXRhdGlvbnMKKy0tLS0tLS0tLS0tCisKK0NvbmRpdGlvbnMgaW52b2x2aW5nIGpvaW5zIHdpdGggYWxpYXNlcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQuIElmIHlvdSB3YW50IHRvCitoZWxwIGFkZGluZyB0aGlzIGZlYXR1cmUsIHlvdSdyZSB3ZWxjb21lIHRvIGNoZWNrIHRoZSBgZmlyc3QgaXNzdWVgXy4KKworQ29udHJpYnV0b3JzCistLS0tLS0tLS0tLS0KKworKiBgSGVucmlxdWUgQmFzdG9zIDxodHRwOi8vZ2l0aHViLmNvbS9oZW5yaXF1ZWJhc3Rvcz5gXworKiBgSXVyaSBkZSBTaWx2aW8gPGh0dHBzOi8vZ2l0aHViLmNvbS9pdXJpc2lsdmlvPmBfCisqIGBIYW1wdXMgU3RqZXJuaGF2IDxodHRwczovL2dpdGh1Yi5jb20vY2hhbXA+YF8KKyogYEJyYWRsZXkgTWFydHNiZXJnZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJ0c2Jlcmdlcj5gXworKiBgTWFya3VzIEJlcnRoZWF1IDxodHRwczovL2dpdGh1Yi5jb20vbWJlcnRoZWF1PmBfCisqIGBlbmQwIDxodHRwczovL2dpdGh1Yi5jb20vZW5kMD5gXworKiBgU2NvdHQgU2V4dG9uIDxodHRwczovL2dpdGh1Yi5jb20vc2NvdHRzZXh0b24+YF8KKyogYE1hdWxlciA8aHR0cHM6Ly9naXRodWIuY29tL21hdWxlcj5gXworKiBgdHJicyA8aHR0cHM6Ly9naXRodWIuY29tL3RyYnM+YF8KKworQ2hhbmdlbG9nCistLS0tLS0tLS0KKworMC41CisgICAgLSBTdXBwb3J0IGZvciBEamFuZ28gMS43CisKKzAuNAorICAgIC0gVXNlIHRveCB0byBydW4gdGVzdHMuCisgICAgLSBBZGQgc3VwcG9ydCBmb3IgRGphbmdvIDEuNi4KKyAgICAtIEFkZCBzdXBwb3J0IGZvciBQeXRob24zLgorICAgIC0gVGhlIGBgb25seWBgIHBhcmFtZXRlciBub3cgZnJlZWx5IHN1cHBvcnRzIGpvaW5zIGluZGVwZW5kZW50IG9mIHRoZSBtYWluIHF1ZXJ5LgorICAgIC0gQWRkcyBzdXBwb3J0IGZvciBhbGlhcyByZWxhYmVsaW5nIHBlcm1pdHRpbmcgZXhjbHVkZXMgYW5kIHVwZGF0ZXMgd2l0aCBhZ2dyZWdhdGVzIGZpbHRlcmVkIG9uIHJlbW90ZSBmb3JlaWduIGtleSByZWxhdGlvbnMuCisKKzAuMy4xCisgICAgLSBGaXggcXVvdGF0aW9uIGVzY2FwaW5nLgorICAgIC0gRml4IGJvb2xlYW4gY2FzdHMgb24gUG9zdGdyZXMuCisKKzAuMgorICAgIC0gRml4IHBvc3RncmVzIGlzc3VlIHdpdGggTElLRSBjb25kaXRpb25zLgorCiswLjEKKyAgICAtIEluaXRpYWwgcmVsZWFzZS4KKworCitMaWNlbnNlCis9PT09PT09CisKK1RoZSBNSVQgTGljZW5zZS4KKworLi4gX3RpY2tldCAxMTMwNTogaHR0cHM6Ly9jb2RlLmRqYW5nb3Byb2plY3QuY29tL3RpY2tldC8xMTMwNQorLi4gX2ZpcnN0IGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vaGVucmlxdWViYXN0b3MvZGphbmdvLWFnZ3JlZ2F0ZS1pZi9pc3N1ZXMvMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIvYWdncmVnYXRlX2lmLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIvYWdncmVnYXRlX2lmLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZjM0MjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9hZ2dyZWdhdGVfaWYucHkKQEAgLTAsMCArMSwxNjQgQEAKKyMgY29kaW5nOiB1dGYtOAorJycnCitJbXBsZW1lbnRzIGNvbmRpdGlvbmFsIGFnZ3JlZ2F0ZXMuCisKK1RoaXMgY29kZSB3YXMgYmFzZWQgb24gdGhlIHdvcmsgb2Ygb3RoZXJzIGZvdW5kIG9uIHRoZSBpbnRlcm5ldDoKKworMS4gaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDExMTUxNzA4MDQvaHR0cDovL3d3dy52b3RlcnVuaXZlcnNlLmNvbS9NZW1iZXJzL2psYW50ei9ibG9nL2NvbmRpdGlvbmFsLWFnZ3JlZ2F0ZXMtaW4tZGphbmdvCisyLiBodHRwczovL2NvZGUuZGphbmdvcHJvamVjdC5jb20vdGlja2V0LzExMzA1CiszLiBodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2ZvcnVtLz9mcm9tZ3JvdXBzPSMhdG9waWMvZGphbmdvLXVzZXJzL2NqemxvVFV3bVMwCis0LiBodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2ZvcnVtLz9mcm9tZ3JvdXBzPSMhdG9waWMvZGphbmdvLXVzZXJzL3ZWcHJNcHNBblBvCisnJycKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscworZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHNpeAoraW1wb3J0IGRqYW5nbworZnJvbSBkamFuZ28uZGIubW9kZWxzLmFnZ3JlZ2F0ZXMgaW1wb3J0IEFnZ3JlZ2F0ZSBhcyBEamFuZ29BZ2dyZWdhdGUKK2Zyb20gZGphbmdvLmRiLm1vZGVscy5zcWwuYWdncmVnYXRlcyBpbXBvcnQgQWdncmVnYXRlIGFzIERqYW5nb1NxbEFnZ3JlZ2F0ZQorCisKK1ZFUlNJT04gPSBkamFuZ28uVkVSU0lPTls6Ml0KKworCitjbGFzcyBTcWxBZ2dyZWdhdGUoRGphbmdvU3FsQWdncmVnYXRlKToKKyAgICBjb25kaXRpb25hbF90ZW1wbGF0ZSA9ICclKGZ1bmN0aW9uKXMoQ0FTRSBXSEVOICUoY29uZGl0aW9uKXMgVEhFTiAlKGZpZWxkKXMgRUxTRSBudWxsIEVORCknCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29sLCBzb3VyY2U9Tm9uZSwgaXNfc3VtbWFyeT1GYWxzZSwgY29uZGl0aW9uPU5vbmUsICoqZXh0cmEpOgorICAgICAgICBzdXBlcihTcWxBZ2dyZWdhdGUsIHNlbGYpLl9faW5pdF9fKGNvbCwgc291cmNlLCBpc19zdW1tYXJ5LCAqKmV4dHJhKQorICAgICAgICBzZWxmLmNvbmRpdGlvbiA9IGNvbmRpdGlvbgorCisgICAgZGVmIHJlbGFiZWxfYWxpYXNlcyhzZWxmLCBjaGFuZ2VfbWFwKToKKyAgICAgICAgaWYgVkVSU0lPTiA8ICgxLCA3KToKKyAgICAgICAgICAgIHN1cGVyKFNxbEFnZ3JlZ2F0ZSwgc2VsZikucmVsYWJlbF9hbGlhc2VzKGNoYW5nZV9tYXApCisgICAgICAgIGlmIHNlbGYuaGFzX2NvbmRpdGlvbjoKKyAgICAgICAgICAgIGNvbmRpdGlvbl9jaGFuZ2VfbWFwID0gZGljdCgoaywgdikgZm9yIGssIHYgaW4gXAorICAgICAgICAgICAgICAgIGNoYW5nZV9tYXAuaXRlbXMoKSBpZiBrIGluIHNlbGYuY29uZGl0aW9uLnF1ZXJ5LmFsaWFzX21hcAorICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5jb25kaXRpb24ucXVlcnkuY2hhbmdlX2FsaWFzZXMoY29uZGl0aW9uX2NoYW5nZV9tYXApCisKKyAgICBkZWYgcmVsYWJlbGVkX2Nsb25lKHNlbGYsIGNoYW5nZV9tYXApOgorICAgICAgICBzZWxmLnJlbGFiZWxfYWxpYXNlcyhjaGFuZ2VfbWFwKQorICAgICAgICByZXR1cm4gc3VwZXIoU3FsQWdncmVnYXRlLCBzZWxmKS5yZWxhYmVsZWRfY2xvbmUoY2hhbmdlX21hcCkKKworICAgIGRlZiBhc19zcWwoc2VsZiwgcW4sIGNvbm5lY3Rpb24pOgorICAgICAgICBpZiBzZWxmLmhhc19jb25kaXRpb246CisgICAgICAgICAgICBzZWxmLnNxbF90ZW1wbGF0ZSA9IHNlbGYuY29uZGl0aW9uYWxfdGVtcGxhdGUKKyAgICAgICAgICAgIHNlbGYuZXh0cmFbJ2NvbmRpdGlvbiddID0gc2VsZi5fY29uZGl0aW9uX2FzX3NxbChxbiwgY29ubmVjdGlvbikKKworICAgICAgICByZXR1cm4gc3VwZXIoU3FsQWdncmVnYXRlLCBzZWxmKS5hc19zcWwocW4sIGNvbm5lY3Rpb24pCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaGFzX2NvbmRpdGlvbihzZWxmKToKKyAgICAgICAgIyBXYXJuaW5nOiBib29sKFF1ZXJ5U2V0KSB3aWxsIGhpdCB0aGUgZGF0YWJhc2UKKyAgICAgICAgcmV0dXJuIHNlbGYuY29uZGl0aW9uIGlzIG5vdCBOb25lCisKKyAgICBkZWYgX2NvbmRpdGlvbl9hc19zcWwoc2VsZiwgcW4sIGNvbm5lY3Rpb24pOgorICAgICAgICAnJycKKyAgICAgICAgUmV0dXJuIHNxbCBmb3IgY29uZGl0aW9uLgorICAgICAgICAnJycKKyAgICAgICAgZGVmIGVzY2FwZSh2YWx1ZSk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBib29sKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHN0cihpbnQodmFsdWUpKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc2l4LnN0cmluZ190eXBlcyk6CisgICAgICAgICAgICAgICAgIyBFc2NhcGUgcGFyYW1zIHVzZWQgd2l0aCBMSUtFCisgICAgICAgICAgICAgICAgaWYgJyUnIGluIHZhbHVlOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJyUnLCAnJSUnKQorICAgICAgICAgICAgICAgICMgRXNjYXBlIHNpbmdsZSBxdW90ZXMKKyAgICAgICAgICAgICAgICBpZiAiJyIgaW4gdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgiJyIsICInJyIpCisgICAgICAgICAgICAgICAgIyBBZGQgc2luZ2xlIHF1b3RlIHRvIHRleHQgdmFsdWVzCisgICAgICAgICAgICAgICAgdmFsdWUgPSAiJyIgKyB2YWx1ZSArICInIgorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICAgICAgc3FsLCBwYXJhbSA9IHNlbGYuY29uZGl0aW9uLnF1ZXJ5LndoZXJlLmFzX3NxbChxbiwgY29ubmVjdGlvbikKKyAgICAgICAgcGFyYW0gPSBtYXAoZXNjYXBlLCBwYXJhbSkKKworICAgICAgICByZXR1cm4gc3FsICUgdHVwbGUocGFyYW0pCisKKworY2xhc3MgU3FsU3VtKFNxbEFnZ3JlZ2F0ZSk6CisgICAgc3FsX2Z1bmN0aW9uID0gJ1NVTScKKworCitjbGFzcyBTcWxDb3VudChTcWxBZ2dyZWdhdGUpOgorICAgIGlzX29yZGluYWwgPSBUcnVlCisgICAgc3FsX2Z1bmN0aW9uID0gJ0NPVU5UJworICAgIHNxbF90ZW1wbGF0ZSA9ICclKGZ1bmN0aW9uKXMoJShkaXN0aW5jdClzJShmaWVsZClzKScKKyAgICBjb25kaXRpb25hbF90ZW1wbGF0ZSA9ICclKGZ1bmN0aW9uKXMoJShkaXN0aW5jdClzQ0FTRSBXSEVOICUoY29uZGl0aW9uKXMgVEhFTiAlKGZpZWxkKXMgRUxTRSBudWxsIEVORCknCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29sLCBkaXN0aW5jdD1GYWxzZSwgKipleHRyYSk6CisgICAgICAgIHN1cGVyKFNxbENvdW50LCBzZWxmKS5fX2luaXRfXyhjb2wsIGRpc3RpbmN0PWRpc3RpbmN0IGFuZCAnRElTVElOQ1QgJyBvciAnJywgKipleHRyYSkKKworCitjbGFzcyBTcWxBdmcoU3FsQWdncmVnYXRlKToKKyAgICBpc19jb21wdXRlZCA9IFRydWUKKyAgICBzcWxfZnVuY3Rpb24gPSAnQVZHJworCisKK2NsYXNzIFNxbE1heChTcWxBZ2dyZWdhdGUpOgorICAgIHNxbF9mdW5jdGlvbiA9ICdNQVgnCisKKworY2xhc3MgU3FsTWluKFNxbEFnZ3JlZ2F0ZSk6CisgICAgc3FsX2Z1bmN0aW9uID0gJ01JTicKKworCitjbGFzcyBBZ2dyZWdhdGUoRGphbmdvQWdncmVnYXRlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9va3VwLCBvbmx5PU5vbmUsICoqZXh0cmEpOgorICAgICAgICBzdXBlcihBZ2dyZWdhdGUsIHNlbGYpLl9faW5pdF9fKGxvb2t1cCwgKipleHRyYSkKKyAgICAgICAgc2VsZi5vbmx5ID0gb25seQorICAgICAgICBzZWxmLmNvbmRpdGlvbiA9IE5vbmUKKworICAgIGRlZiBfZ2V0X2ZpZWxkc19mcm9tX1Eoc2VsZiwgcSk6CisgICAgICAgIGZpZWxkcyA9IFtdCisgICAgICAgIGZvciBjaGlsZCBpbiBxLmNoaWxkcmVuOgorICAgICAgICAgICAgaWYgaGFzYXR0cihjaGlsZCwgJ2NoaWxkcmVuJyk6CisgICAgICAgICAgICAgICAgZmllbGRzLmV4dGVuZChzZWxmLl9nZXRfZmllbGRzX2Zyb21fUShjaGlsZCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoY2hpbGQpCisgICAgICAgIHJldHVybiBmaWVsZHMKKworICAgIGRlZiBhZGRfdG9fcXVlcnkoc2VsZiwgcXVlcnksIGFsaWFzLCBjb2wsIHNvdXJjZSwgaXNfc3VtbWFyeSk6CisgICAgICAgIGlmIHNlbGYub25seToKKyAgICAgICAgICAgIHNlbGYuY29uZGl0aW9uID0gcXVlcnkubW9kZWwuX2RlZmF1bHRfbWFuYWdlci5maWx0ZXIoc2VsZi5vbmx5KQorICAgICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuX2dldF9maWVsZHNfZnJvbV9RKHNlbGYub25seSk6CisgICAgICAgICAgICAgICAgZmllbGRfbGlzdCA9IGNoaWxkWzBdLnNwbGl0KCdfXycpCisgICAgICAgICAgICAgICAgIyBQb3Agb2ZmIHRoZSBsYXN0IGZpZWxkIGlmIGl0J3MgYSBxdWVyeSB0ZXJtICgnZ3RlJywgJ2NvbnRhaW5zJywgJ2lzbnVsbCcsIGV0Yy4pCisgICAgICAgICAgICAgICAgaWYgZmllbGRfbGlzdFstMV0gaW4gcXVlcnkucXVlcnlfdGVybXM6CisgICAgICAgICAgICAgICAgICAgIGZpZWxkX2xpc3QucG9wKCkKKyAgICAgICAgICAgICAgICAjIHNldHVwX2pvaW5zIGhhdmUgZGlmZmVyZW50IHJldHVybnMgaW4gRGphbmdvIDEuNSBhbmQgMS42LCBidXQgdGhlIG9yZGVyIG9mIHdoYXQgd2UgbmVlZCByZW1haW5zLgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHF1ZXJ5LnNldHVwX2pvaW5zKGZpZWxkX2xpc3QsIHF1ZXJ5Lm1vZGVsLl9tZXRhLCBxdWVyeS5nZXRfaW5pdGlhbF9hbGlhcygpLCBOb25lKQorICAgICAgICAgICAgICAgIGpvaW5fbGlzdCA9IHJlc3VsdFszXQorCisgICAgICAgICAgICAgICAgZm5hbWUgPSAncHJvbW90ZV9hbGlhc19jaGFpbicgaWYgVkVSU0lPTiA8ICgxLCA1KSBlbHNlICdwcm9tb3RlX2pvaW5zJworICAgICAgICAgICAgICAgIGFyZ3MgPSAoam9pbl9saXN0LCBUcnVlKSBpZiBWRVJTSU9OIDwgKDEsIDcpIGVsc2UgKGpvaW5fbGlzdCwpCisKKyAgICAgICAgICAgICAgICBwcm9tb3RlID0gZ2V0YXR0cihxdWVyeSwgZm5hbWUpCisgICAgICAgICAgICAgICAgcHJvbW90ZSgqYXJncykKKworICAgICAgICBhZ2dyZWdhdGUgPSBzZWxmLnNxbF9rbGFzcyhjb2wsIHNvdXJjZT1zb3VyY2UsIGlzX3N1bW1hcnk9aXNfc3VtbWFyeSwgY29uZGl0aW9uPXNlbGYuY29uZGl0aW9uLCAqKnNlbGYuZXh0cmEpCisgICAgICAgIHF1ZXJ5LmFnZ3JlZ2F0ZXNbYWxpYXNdID0gYWdncmVnYXRlCisKKworY2xhc3MgU3VtKEFnZ3JlZ2F0ZSk6CisgICAgbmFtZSA9ICdTdW0nCisgICAgc3FsX2tsYXNzID0gU3FsU3VtCisKKworY2xhc3MgQ291bnQoQWdncmVnYXRlKToKKyAgICBuYW1lID0gJ0NvdW50JworICAgIHNxbF9rbGFzcyA9IFNxbENvdW50CisKKworY2xhc3MgQXZnKEFnZ3JlZ2F0ZSk6CisgICAgbmFtZSA9ICdBdmcnCisgICAgc3FsX2tsYXNzID0gU3FsQXZnCisKKworY2xhc3MgTWF4KEFnZ3JlZ2F0ZSk6CisgICAgbmFtZSA9ICdNYXgnCisgICAgc3FsX2tsYXNzID0gU3FsTWF4CisKKworY2xhc3MgTWluKEFnZ3JlZ2F0ZSk6CisgICAgbmFtZSA9ICdNaW4nCisgICAgc3FsX2tsYXNzID0gU3FsTWluCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9ydW50ZXN0cy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL3J1bnRlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJlNTU4NjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9ydW50ZXN0cy5weQpAQCAtMCwwICsxLDQ4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKKworCitkZWYgcGFyc2VfYXJncygpOgorICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcigpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1zJywgJy0tc2V0dGluZ3MnLCBoZWxwPSdEZWZpbmUgc2V0dGluZ3MuJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS11bml0dGVzdCcsIGhlbHA9J0RlZmluZSB3aGljaCB0ZXN0IHRvIHJ1bi4gRGVmYXVsdCBhbGwuJykKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgaWYgbm90IG9wdGlvbnMuc2V0dGluZ3M6CisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIG5vdCBvcHRpb25zLnVuaXR0ZXN0OgorICAgICAgICBvcHRpb25zLnVuaXR0ZXN0ID0gWydhZ2dyZWdhdGlvbiddCisKKyAgICByZXR1cm4gb3B0aW9ucworCisKK2RlZiBnZXRfcnVubmVyKHNldHRpbmdzX21vZHVsZSk6CisgICAgJycnCisgICAgQXNrcyBEamFuZ28gZm9yIHRoZSBUZXN0UnVubmVyIGRlZmluZWQgaW4gc2V0dGluZ3Mgb3IgdGhlIGRlZmF1bHQgb25lLgorICAgICcnJworICAgIG9zLmVudmlyb25bJ0RKQU5HT19TRVRUSU5HU19NT0RVTEUnXSA9IHNldHRpbmdzX21vZHVsZQorCisgICAgaW1wb3J0IGRqYW5nbworICAgIGZyb20gZGphbmdvLnRlc3QudXRpbHMgaW1wb3J0IGdldF9ydW5uZXIKKyAgICBmcm9tIGRqYW5nby5jb25mIGltcG9ydCBzZXR0aW5ncworCisgICAgaWYgaGFzYXR0cihkamFuZ28sICdzZXR1cCcpOgorICAgICAgICBkamFuZ28uc2V0dXAoKQorCisgICAgcmV0dXJuIGdldF9ydW5uZXIoc2V0dGluZ3MpCisKKworZGVmIHJ1bnRlc3RzKCk6CisgICAgb3B0aW9ucyA9IHBhcnNlX2FyZ3MoKQorICAgIFRlc3RSdW5uZXIgPSBnZXRfcnVubmVyKG9wdGlvbnMuc2V0dGluZ3MpCisgICAgcnVubmVyID0gVGVzdFJ1bm5lcih2ZXJib3NpdHk9MSwgaW50ZXJhY3RpdmU9VHJ1ZSwgZmFpbGZhc3Q9RmFsc2UpCisgICAgc3lzLmV4aXQocnVubmVyLnJ1bl90ZXN0cyhbXSkpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBydW50ZXN0cygpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9zZXR1cC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL3NldHVwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZDNkYjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9zZXR1cC5weQpAQCAtMCwwICsxLDMzIEBACisjIGNvZGluZzogdXRmLTgKK2Zyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAKK2ltcG9ydCBvcworCisKK3NldHVwKG5hbWU9J2RqYW5nby1hZ2dyZWdhdGUtaWYnLAorICAgICAgdmVyc2lvbj0nMC41JywKKyAgICAgIGRlc2NyaXB0aW9uPSdDb25kaXRpb25hbCBhZ2dyZWdhdGVzIGZvciBEamFuZ28sIGp1c3QgbGlrZSB0aGUgZmFtb3VzIFN1bUlmIGluIEV4Y2VsLicsCisgICAgICBsb25nX2Rlc2NyaXB0aW9uPW9wZW4ob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJSRUFETUUucnN0IikpLnJlYWQoKSwKKyAgICAgIGF1dGhvcj0iSGVucmlxdWUgQmFzdG9zIiwgYXV0aG9yX2VtYWlsPSJoZW5yaXF1ZUBiYXN0b3MubmV0IiwKKyAgICAgIGxpY2Vuc2U9Ik1JVCIsCisgICAgICBweV9tb2R1bGVzPVsnYWdncmVnYXRlX2lmJ10sCisgICAgICBpbnN0YWxsX3JlcXVpcmVzPVsKKyAgICAgICAgICAnc2l4Pj0xLjYuMScsCisgICAgICBdLAorICAgICAgemlwX3NhZmU9RmFsc2UsCisgICAgICBwbGF0Zm9ybXM9J2FueScsCisgICAgICBpbmNsdWRlX3BhY2thZ2VfZGF0YT1UcnVlLAorICAgICAgY2xhc3NpZmllcnM9WworICAgICAgICAgICdEZXZlbG9wbWVudCBTdGF0dXMgOjogNSAtIFByb2R1Y3Rpb24vU3RhYmxlJywKKyAgICAgICAgICAnRnJhbWV3b3JrIDo6IERqYW5nbycsCisgICAgICAgICAgJ0ludGVuZGVkIEF1ZGllbmNlIDo6IERldmVsb3BlcnMnLAorICAgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNSVQgTGljZW5zZScsCisgICAgICAgICAgJ05hdHVyYWwgTGFuZ3VhZ2UgOjogRW5nbGlzaCcsCisgICAgICAgICAgJ09wZXJhdGluZyBTeXN0ZW0gOjogT1MgSW5kZXBlbmRlbnQnLAorICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24nLAorICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43JywKKyAgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMnLAorICAgICAgICAgICdUb3BpYyA6OiBEYXRhYmFzZScsCisgICAgICAgICAgJ1RvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IExpYnJhcmllcycsCisgICAgICBdLAorICAgICAgdXJsPSdodHRwOi8vZ2l0aHViLmNvbS9oZW5yaXF1ZWJhc3Rvcy9kamFuZ28tYWdncmVnYXRlLWlmLycsCispCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci90b3guaW5pIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIvdG94LmluaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGJlYjE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIvdG94LmluaQpAQCAtMCwwICsxLDE5OCBAQAorW3RveF0KK2Vudmxpc3QgPQorICAgIHB5MjctZGphbmdvMS40LXNxbGl0ZSwKKyAgICBweTI3LWRqYW5nbzEuNC1wb3N0Z3JlcywKKyAgICBweTI3LWRqYW5nbzEuNC1teXNxbCwKKworICAgIHB5MjctZGphbmdvMS41LXNxbGl0ZSwKKyAgICBweTI3LWRqYW5nbzEuNS1wb3N0Z3JlcywKKyAgICBweTI3LWRqYW5nbzEuNS1teXNxbCwKKworICAgIHB5MjctZGphbmdvMS42LXNxbGl0ZSwKKyAgICBweTI3LWRqYW5nbzEuNi1wb3N0Z3JlcywKKyAgICBweTI3LWRqYW5nbzEuNi1teXNxbCwKKworICAgIHB5MjctZGphbmdvMS43LXNxbGl0ZSwKKyAgICBweTI3LWRqYW5nbzEuNy1wb3N0Z3JlcywKKyAgICBweTI3LWRqYW5nbzEuNy1teXNxbCwKKworICAgIHB5MzQtZGphbmdvMS42LXNxbGl0ZSwKKyAgICBweTM0LWRqYW5nbzEuNi1wb3N0Z3JlcywKKyAgICAjcHkzNC1kamFuZ28xLjYtbXlzcWwKKworICAgIHB5MzQtZGphbmdvMS43LXNxbGl0ZSwKKyAgICBweTM0LWRqYW5nbzEuNy1wb3N0Z3JlcywKKyAgICAjcHkzNC1kamFuZ28xLjctbXlzcWwKKworW3Rlc3RlbnZdCit3aGl0ZWxpc3RfZXh0ZXJuYWxzPQorICAgIG15c3FsCisgICAgcHNxbAorCisjIFB5dGhvbiAyLjcKKyMgRGphbmdvIDEuNAorW3Rlc3RlbnY6cHkyNy1kamFuZ28xLjQtc3FsaXRlXQorYmFzZXB5dGhvbiA9IHB5dGhvbjIuNworZGVwcyA9CisgICAgZGphbmdvPT0xLjQKK2NvbW1hbmRzID0gcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9zcWxpdGUKKworW3Rlc3RlbnY6cHkyNy1kamFuZ28xLjQtcG9zdGdyZXNdCitiYXNlcHl0aG9uID0gcHl0aG9uMi43CitkZXBzID0KKyAgICBkamFuZ289PTEuNAorICAgIHBzeWNvcGcyCitjb21tYW5kcyA9CisgICAgcHNxbCAtYyAnY3JlYXRlIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycgcG9zdGdyZXMKKyAgICBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X3Bvc3RncmVzCisgICAgcHNxbCAtYyAnZHJvcCBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisKK1t0ZXN0ZW52OnB5MjctZGphbmdvMS40LW15c3FsXQorYmFzZXB5dGhvbiA9IHB5dGhvbjIuNworZGVwcyA9CisgICAgZGphbmdvPT0xLjQKKyAgICBteXNxbC1weXRob24KK2NvbW1hbmRzID0KKyAgICBteXNxbCAtZSAnY3JlYXRlIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKKyAgICBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X215c3FsCisgICAgbXlzcWwgLWUgJ2Ryb3AgZGF0YWJhc2UgYWdncmVnYXRpb247JworCisjIERqYW5nbyAxLjUKK1t0ZXN0ZW52OnB5MjctZGphbmdvMS41LXNxbGl0ZV0KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS41Citjb21tYW5kcyA9IHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3Rfc3FsaXRlCisKK1t0ZXN0ZW52OnB5MjctZGphbmdvMS41LXBvc3RncmVzXQorYmFzZXB5dGhvbiA9IHB5dGhvbjIuNworZGVwcyA9CisgICAgZGphbmdvPT0xLjUKKyAgICBwc3ljb3BnMgorY29tbWFuZHMgPQorICAgIHBzcWwgLWMgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9wb3N0Z3JlcworICAgIHBzcWwgLWMgJ2Ryb3AgZGF0YWJhc2UgYWdncmVnYXRpb247JyBwb3N0Z3JlcworCitbdGVzdGVudjpweTI3LWRqYW5nbzEuNS1teXNxbF0KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS41CisgICAgbXlzcWwtcHl0aG9uCitjb21tYW5kcyA9CisgICAgbXlzcWwgLWUgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9teXNxbAorICAgIG15c3FsIC1lICdkcm9wIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKKworIyBEamFuZ28gMS42CitbdGVzdGVudjpweTI3LWRqYW5nbzEuNi1zcWxpdGVdCitiYXNlcHl0aG9uID0gcHl0aG9uMi43CitkZXBzID0KKyAgICBkamFuZ289PTEuNgorY29tbWFuZHMgPSBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X3NxbGl0ZQorCitbdGVzdGVudjpweTI3LWRqYW5nbzEuNi1wb3N0Z3Jlc10KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS42CisgICAgcHN5Y29wZzIKK2NvbW1hbmRzID0KKyAgICBwc3FsIC1jICdjcmVhdGUgZGF0YWJhc2UgYWdncmVnYXRpb247JyBwb3N0Z3JlcworICAgIHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3RfcG9zdGdyZXMKKyAgICBwc3FsIC1jICdkcm9wIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycgcG9zdGdyZXMKKworW3Rlc3RlbnY6cHkyNy1kamFuZ28xLjYtbXlzcWxdCitiYXNlcHl0aG9uID0gcHl0aG9uMi43CitkZXBzID0KKyAgICBkamFuZ289PTEuNgorICAgIG15c3FsLXB5dGhvbgorY29tbWFuZHMgPQorICAgIG15c3FsIC1lICdjcmVhdGUgZGF0YWJhc2UgYWdncmVnYXRpb247JworICAgIHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3RfbXlzcWwKKyAgICBteXNxbCAtZSAnZHJvcCBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisKKworIyBQeXRob24gMi43IGFuZCBEamFuZ28gMS43CitbdGVzdGVudjpweTI3LWRqYW5nbzEuNy1zcWxpdGVdCitiYXNlcHl0aG9uID0gcHl0aG9uMi43CitkZXBzID0KKyAgICBkamFuZ289PTEuNworY29tbWFuZHMgPSBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X3NxbGl0ZQorCitbdGVzdGVudjpweTI3LWRqYW5nbzEuNy1wb3N0Z3Jlc10KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS43CisgICAgcHN5Y29wZzIKK2NvbW1hbmRzID0KKyAgICBwc3FsIC1jICdjcmVhdGUgZGF0YWJhc2UgYWdncmVnYXRpb247JyBwb3N0Z3JlcworICAgIHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3RfcG9zdGdyZXMKKyAgICBwc3FsIC1jICdkcm9wIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycgcG9zdGdyZXMKKworW3Rlc3RlbnY6cHkyNy1kamFuZ28xLjctbXlzcWxdCitiYXNlcHl0aG9uID0gcHl0aG9uMi43CitkZXBzID0KKyAgICBkamFuZ289PTEuNworICAgIG15c3FsLXB5dGhvbgorY29tbWFuZHMgPQorICAgIG15c3FsIC1lICdjcmVhdGUgZGF0YWJhc2UgYWdncmVnYXRpb247JworICAgIHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3RfbXlzcWwKKyAgICBteXNxbCAtZSAnZHJvcCBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisKKworIyBQeXRob24gMy40CisjIERqYW5nbyAxLjYKK1t0ZXN0ZW52OnB5MzQtZGphbmdvMS42LXNxbGl0ZV0KK2Jhc2VweXRob24gPSBweXRob24zLjQKK2RlcHMgPQorICAgIGRqYW5nbz09MS42Citjb21tYW5kcyA9IHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3Rfc3FsaXRlCisKK1t0ZXN0ZW52OnB5MzQtZGphbmdvMS42LXBvc3RncmVzXQorYmFzZXB5dGhvbiA9IHB5dGhvbjMuNAorZGVwcyA9CisgICAgZGphbmdvPT0xLjYKKyAgICBwc3ljb3BnMgorY29tbWFuZHMgPQorICAgIHBzcWwgLWMgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9wb3N0Z3JlcworICAgIHBzcWwgLWMgJ2Ryb3AgZGF0YWJhc2UgYWdncmVnYXRpb247JyBwb3N0Z3JlcworCitbdGVzdGVudjpweTM0LWRqYW5nbzEuNi1teXNxbF0KK2Jhc2VweXRob24gPSBweXRob24zLjQKK2RlcHMgPQorICAgIGRqYW5nbz09MS42CisgICAgbXlzcWwtcHl0aG9uMworY29tbWFuZHMgPQorICAgIG15c3FsIC1lICdjcmVhdGUgZGF0YWJhc2UgYWdncmVnYXRpb247JworICAgIHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3RfbXlzcWwKKyAgICBteXNxbCAtZSAnZHJvcCBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisKKworIyBQeXRob24gMy40CisjIERqYW5nbyAxLjcKK1t0ZXN0ZW52OnB5MzQtZGphbmdvMS43LXNxbGl0ZV0KK2Jhc2VweXRob24gPSBweXRob24zLjQKK2RlcHMgPQorICAgIGRqYW5nbz09MS43Citjb21tYW5kcyA9IHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3Rfc3FsaXRlCisKK1t0ZXN0ZW52OnB5MzQtZGphbmdvMS43LXBvc3RncmVzXQorYmFzZXB5dGhvbiA9IHB5dGhvbjMuNAorZGVwcyA9CisgICAgZGphbmdvPT0xLjcKKyAgICBwc3ljb3BnMgorY29tbWFuZHMgPQorICAgIHBzcWwgLWMgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9wb3N0Z3JlcworICAgIHBzcWwgLWMgJ2Ryb3AgZGF0YWJhc2UgYWdncmVnYXRpb247JyBwb3N0Z3JlcworCitbdGVzdGVudjpweTM0LWRqYW5nbzEuNy1teXNxbF0KK2Jhc2VweXRob24gPSBweXRob24zLjQKK2RlcHMgPQorICAgIGRqYW5nbz09MS43CisgICAgbXlzcWwtcHl0aG9uMworY29tbWFuZHMgPQorICAgIG15c3FsIC1lICdjcmVhdGUgZGF0YWJhc2UgYWdncmVnYXRpb247JworICAgIHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3RfbXlzcWwKKyAgICBteXNxbCAtZSAnZHJvcCBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvUkVBRE1FIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmZhNTY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL1JFQURNRQpAQCAtMCwwICsxLDQxIEBACisKK1RvYXN0ZXIgVGVzdGluZyBGcmFtZXdvcmsKK1lvY3RvIFByb2plY3QKKworCitSYXRpb25hbGUKKy0tLS0tLS0tLS0tLQorQXMgVG9hc3RlciBjb250cmlidXRpb25zIGdyb3cgd2l0aCB0aGUgbnVtYmVyIG9mIHBlb3BsZSB0aGF0IGNvbnRyaWJ1dGUgY29kZSwgdmVyaWZ5aW5nIGVhY2ggcGF0Y2ggcHJpb3IgdG8gc3VibWl0dGluZyB1cHN0cmVhbSBiZWNvbWVzIGEgaGFyZC10by1zY2FsZSBwcm9ibGVtIGZvciBodW1hbnMuIFdlIGRldmlzZWQgdGhpcyBzeXN0ZW0gaW4gb3JkZXIgdG8gcnVuIHBhdGNoLWxldmVsIHZhbGlkYXRpb24sIHRyeWluZyB0byBlbGltaW5hdGUgY29tbW9uIHByb2JsZW1zIGZyb20gc3VibWl0dGVkIHBhdGNoZXMsIGluIGFuIGF1dG9tYXRlZCBmYXNoaW9uLgorCitUaGUgVG9hc3RlciBUZXN0aW5nIEZyYW1ld29yayBpcyBhIHNldCBvZiBQeXRob24gc2NyaXB0cyB0aGF0IHByb3ZpZGVzIGFuIGV4dGVuc2libGUgd2F5IHRvIHdyaXRlIHNtb2tlIGFuZCByZWdyZXNzaW9uIHRlc3RzIHRoYXQgd2lsbCBiZSBydW4gb24gZWFjaCBwYXRjaCBzZXQgc2VudCBmb3IgcmV2aWV3IG9uIHRoZSB0b2FzdGVyIG1haWxpbmcgbGlzdC4KKworCitVc2FnZQorLS0tLS0tLS0tLS0tCitUaGVyZSBhcmUgdGhyZWUgbWFpbiBleGVjdXRhYmxlIHNjcmlwdHMgaW4gdGhpcyBkaXJlY3RvcnkuCisgICAgKiAgICBydW5uZXIucHkgIGlzIGRlc2lnbmVkIHRvIGJlIHJ1biBmcm9tIHRoZSBjb21tYW5kIGxpbmUuIEl0IHJlcXVpcmVzLCBhcyBtYW5kYXRvcnkgcGFyYW1ldGVyLCBhIGJyYW5jaCBuYW1lIG9uIHBva3ktY29udHJpYiwgYnJhbmNoIHdoaWNoIGNvbnRhaW5zIHRoZSBwYXRjaGVzIHRvIGJlIHRlc3RlZC4gVGhlIHByb2dyYW0gd2lsbCBhdXRvLWRpc2NvdmVyIHRoZSBhdmFpbGFibGUgdGVzdHMgcmVzaWRpbmcgaW4gdGhpcyBkaXJlY3RvcnkgYnkgbG9va2luZyBmb3IgdW5pdHRlc3QgY2xhc3NlcywgYW5kIHdpbGwgcnVuIHRoZSB0ZXN0cyBvbiB0aGUgYnJhbmNoIGR1bXBpbmcgdGhlIG91dHB1dCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiBPcHRpb25hbGx5LCBpdCBjYW4gdGFrZSBwYXJhbWV0ZXJzIGluaGliaXRpbmcgdGhlIGJyYW5jaCBjaGVja291dCwgb3Igc3BlY2lmeWluZyBhIHNpbmdsZSB0ZXN0IHRvIGJlIHJ1biwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKyAgICAqICAgIGxhdW5jaGVyLnB5ICBpcyBhIGRlc2lnbmVkIHRvIGJlIHJ1biBmcm9tIGEgY3JvbnRhYiBvciBzaW1pbGFyIHNjaGVkdWxpbmcgbWVjaGFuaXNtLiBJdCBsb29rcyB1cCBhIGJhY2tsb2cgZmlsZSBjb250YWluaW5nIGJyYW5jaGVzLXRvLXRlc3QgKG5hbWVkIHRhc2tzIGluIHRoZSBzb3VyY2UgY29kZSksIHNlbGVjdCB0aGUgZmlyc3Qgb25lIGluIEZJRk8gbWFubmVyLCBhbmQgbGF1bmNoIHJ1bm5lci5weSBvbiBpdC4gSXQgd2lsbCBhd2FpdCBmb3IgY29tcGxldGlvbiwgYW5kIGVtYWlsIHRoZSBzdGFuZGFyZCBvdXRwdXQgYW5kIHN0YW5kYXJkIGVycm9yIGR1bXBzIGZyb20gdGhlIHJ1bm5lci5weSBleGVjdXRpb24KKyAgICAqICAgIHJlY3YucHkgIGlzIGFuIGVtYWlsIHJlY2VpdmVyLCBkZXNpZ25lZCB0byBiZSBjYWxsZWQgYXMgYSBwaXBlIGZyb20gYSAuZm9yd2FyZCBmaWxlLiBJdCBpcyB1c2VkIHRvIG1vbml0b3IgYSBtYWlsaW5nIGxpc3QsIGZvciBleGFtcGxlLCBhbmQgYWRkIHRhc2tzIHRvIHRoZSBiYWNrbG9nIGJhc2VkIG9uIHJldmlldyByZXF1ZXN0cyBjb21pbmcgb24gdGhlIG1haWxpbmcgbGlzdC4KKworCitJbnN0YWxsYXRpb24KKy0tLS0tLS0tLS0tLQorQXMgcHJlcmVxdWlzaXRlLCB3ZSBleHBlY3QgYSBmdW5jdGlvbmluZyBlbWFpbCBzeXN0ZW0gb24gYSBtYWNoaW5lIHdpdGggUHl0aG9uMi4KKworVGhlIGJyb2FkIHN0ZXBzIHRvIGluc3RhbGxhdGlvbgorKiBzZXQgdXAgdGhlIC5mb3J3YXJkIG9uIHRoZSByZWNlaXZpbmcgZW1haWwgYWNjb3VudCB0byBwaXBlIHRvIHRoZSByZWN2LnB5IGZpbGUKKyogZWRpdCBjb25maWcucHkgYW5kIHNldHRpbmdzLmpzb24gdG8gYWx0ZXIgZm9yIGxvY2FsIGluc3RhbGxhdGlvbiBzZXR0aW5ncworKiBvbiBlbWFpbCByZWNlaXZlLCB2ZXJpZnkgYmFja2xvZy50eHQgdG8gc2VlIHRoYXQgdGhlIHRhc2tzIGFyZSByZWNlaXZlZCBhbmQgbWFya2VkIGZvciBwcm9jZXNzaW5nCisqIGV4ZWN1dGUgbGF1bmNoZXIucHkgaW4gY29tbWFuZCBsaW5lIHRvIHZlcmlmeSB0aGF0IGEgdGVzdCBvY2N1cnMgd2l0aCBubyBwcm9ibGVtcywgYW5kIHRoYXQgdGhlIG91dGdvaW5nIGVtYWlsIGlzIGRlbGl2ZXJlZAorKiBhZGQgbGF1bmNoZXIucHkKKworCisKK0NvbnRyaWJ1dGUKKy0tLS0tLS0tLS0tLQorV2hhdCB3ZSBuZWVkIGFyZSB0ZXN0cy4gQWRkIHlvdXIgb3duIHRlc3RzIHRvIGVpdGhlciB0ZXN0cy5weSBmaWxlLCBvciB0byBhIG5ldyBmaWxlLgorVXNlICJjb25maWcubG9nZ2VyIiB0byB3cml0ZSBsb2dzIHRoYXQgd2lsbCBtYWtlIGl0IHRvIGVtYWlsLgorCitDb21tb25seSB1c2VkIGNvZGUgc2hvdWxkIGJlIGdvaW5nIHRvIHNoZWxsdXRpbHMsIGFuZCBjb25maWd1cmF0aW9uIHRvIGNvbmZpZy5weS4KKworQ29udHJpYnV0ZSBjb2RlIGJ5IGVtYWlsaW5nIHBhdGNoZXMgdG8gdGhlIGxpc3Q6IHRvYXN0ZXJAeW9jdG9wcm9qZWN0Lm9yZyAobWVtYmVyc2hpcCByZXF1aXJlZCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9UT0RPIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE3MTkyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9UT0RPCkBAIC0wLDAgKzEsOSBAQAorV2UgbmVlZCB0byBpbXBsZW1lbnQgdGVzdHM6CisKK2F1dG9tYXRlZCBsaW5rIGNoZWNrZXI7IGN1cnJlbnRseQorJCBsaW5rY2hlY2tlciAtdCAxMDAwIC1GIGNzdiBodHRwOi8vbG9jYWxob3N0OjgwMDAvCisKK2ludGVncmF0ZSB0aGUgdzNjLXZhbGlkYXRpb24gc2VydmljZTsgY3VycmVudGx5CiskIHB5dGhvbiB1cmxjaGVjay5weQorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9jb25maWcucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvY29uZmlnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZDQ1ZjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvY29uZmlnLnB5CkBAIC0wLDAgKzEsOTggQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAxNSBBbGV4YW5kcnUgRGFtaWFuIGZvciBJbnRlbCBDb3JwLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIyBUaGlzIGlzIHRoZSBjb25maWd1cmF0aW9uL3NpbmdsZSBtb2R1bGUgZm9yIHR0cworIyBldmVyeXRoaW5nIHRoYXQgd291bGQgYmUgYSBnbG9iYWwgdmFyaWFibGUgZ29lcyBoZXJlCisKK2ltcG9ydCBvcywgc3lzLCBsb2dnaW5nCitpbXBvcnQgc29ja2V0CisKK0xPR0RJUiA9ICJsb2ciCitTRVRUSU5HU19GSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJzZXR0aW5ncy5qc29uIikKK1RFU1RfRElSX05BTUUgPSAidHRzX3Rlc3RkaXIiCisKK0RFQlVHID0gVHJ1ZQorCitPV05fUElEID0gb3MuZ2V0cGlkKCkKKworVzNDX1ZBTElEQVRPUiA9ICJodHRwOi8vaWNhcnVzLmxvY2FsL3czYy12YWxpZGF0b3IvY2hlY2s/ZG9jdHlwZT1IVE1MNSZ1cmk9IgorCitUT0FTVEVSX1BPUlQgPSA1Njc4OQorCitURVNURElSID0gTm9uZQorCisjd2UgcGFyc2UgdGhlIHczYyBVUkwgdG8ga25vdyB3aGVyZSB0byBjb25uZWN0CisKK2ltcG9ydCB1cmxwYXJzZQorCitkZWYgZ2V0X3B1YmxpY19pcCgpOgorICAgIHRlbXBfc29ja2V0ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCisgICAgcGFyc2VkX3VybCA9IHVybHBhcnNlLnVybHBhcnNlKCJodHRwOi8vaWNhcnVzLmxvY2FsL3czYy12YWxpZGF0b3IvY2hlY2s/ZG9jdHlwZT1IVE1MNSZ1cmk9IikKKyAgICB0ZW1wX3NvY2tldC5jb25uZWN0KChwYXJzZWRfdXJsLm5ldGxvYywgODAgaWYgcGFyc2VkX3VybC5wb3J0IGlzIE5vbmUgZWxzZSBwYXJzZWRfdXJsLnBvcnQpKQorICAgIHB1YmxpY19pcCA9IHRlbXBfc29ja2V0LmdldHNvY2tuYW1lKClbMF0KKyAgICB0ZW1wX3NvY2tldC5jbG9zZSgpCisgICAgcmV0dXJuIHB1YmxpY19pcAorCitUT0FTVEVSX0JBU0VVUkwgPSAiaHR0cDovLyVzOiVkLyIgJSAoZ2V0X3B1YmxpY19pcCgpLCBUT0FTVEVSX1BPUlQpCisKKworT1dOX0VNQUlMX0FERFJFU1MgPSAiVG9hc3RlciBUZXN0aW5nIEZyYW1ld29yayA8YWxleGFuZHJ1LmRhbWlhbkBpbnRlbC5jb20+IgorUkVQT1JUX0VNQUlMX0FERFJFU1MgPSAiYWxleGFuZHJ1LmRhbWlhbkBpbnRlbC5jb20iCisKKyMgbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGJhc2ljIGxvZ2dpbmcgaW5mcmFzdHJ1Y3R1cmUKKworI3B5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKKyMgd2UgZGlzYWJsZSB0aGUgaW52YWxpZCBuYW1lIGJlY2F1c2UgdGhlIG1vZHVsZS1sZXZlbCAibG9nZ2VyIiBpcyB1c2VkIHRocm91Z291dCBiaXRiYWtlCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigidG9hc3RlcnRlc3QiKQorX19jb25zb2xlX18gPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZG91dCkKK19fY29uc29sZV9fLnNldEZvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcigiJShhc2N0aW1lKXMgJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKSkKK2xvZ2dlci5hZGRIYW5kbGVyKF9fY29uc29sZV9fKQorbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisKKworIyBzaW5nbGV0b24gZmlsZSBuYW1lcworTE9DS0ZJTEUgPSAiL3RtcC90dGYubG9jayIKK0JBQ0tMT0dGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJiYWNrbG9nLnR4dCIpCisKKyMgdGFzayBzdGF0ZXMKK2RlZiBlbnVtKCpzZXF1ZW50aWFsLCAqKm5hbWVkKToKKyAgICBlbnVtcyA9IGRpY3QoemlwKHNlcXVlbnRpYWwsIHJhbmdlKGxlbihzZXF1ZW50aWFsKSkpLCAqKm5hbWVkKQorICAgIHJldmVyc2UgPSBkaWN0KCh2YWx1ZSwga2V5KSBmb3Iga2V5LCB2YWx1ZSBpbiBlbnVtcy5pdGVyaXRlbXMoKSkKKyAgICBlbnVtc1sncmV2ZXJzZV9tYXBwaW5nJ10gPSByZXZlcnNlCisgICAgcmV0dXJuIHR5cGUoJ0VudW0nLCAoKSwgZW51bXMpCisKKworY2xhc3MgVEFTS1Mob2JqZWN0KToKKyAgICAjcHlsaW50OiBkaXNhYmxlPXRvby1mZXctcHVibGljLW1ldGhvZHMKKyAgICBQRU5ESU5HID0gIlBFTkRJTkciCisgICAgSU5QUk9HUkVTUyA9ICJJTlBST0dSRVNTIgorICAgIERPTkUgPSAiRE9ORSIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbmV4dF90YXNrKHRhc2spOgorICAgICAgICBpZiB0YXNrID09IFRBU0tTLlBFTkRJTkc6CisgICAgICAgICAgICByZXR1cm4gVEFTS1MuSU5QUk9HUkVTUworICAgICAgICBpZiB0YXNrID09IFRBU0tTLklOUFJPR1JFU1M6CisgICAgICAgICAgICByZXR1cm4gVEFTS1MuRE9ORQorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkludmFsaWQgbmV4dCB0YXNrIHN0YXRlIGZvciAlcyIgJSB0YXNrKQorCisjIFRUUyBzcGVjaWZpYworQ09OVFJJQl9SRVBPID0gImdpdEBnaXQueW9jdG9wcm9qZWN0Lm9yZzpwb2t5LWNvbnRyaWIiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9sYXVuY2hlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9sYXVuY2hlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNTc5NGMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL2xhdW5jaGVyLnB5CkBAIC0wLDAgKzEsMTAxIEBACisjIS91c3IvYmluL3B5dGhvbgorCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQWxleGFuZHJ1IERhbWlhbiBmb3IgSW50ZWwgQ29ycC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyMgUHJvZ3JhbSB0byBydW4gdGhlIG5leHQgdGFzayBsaXN0ZWQgZnJvbSB0aGUgYmFja2xvZy50eHQ7IGRlc2lnbmVkIHRvIGJlCisjIHJ1biBmcm9tIGNyb250YWIuCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2ltcG9ydCBzeXMsIG9zLCBjb25maWcsIHNoZWxsdXRpbHMKK2Zyb20gc2hlbGx1dGlscyBpbXBvcnQgU2hlbGxDbWRFeGNlcHRpb24KKworIyBJbXBvcnQgc210cGxpYiBmb3IgdGhlIGFjdHVhbCBzZW5kaW5nIGZ1bmN0aW9uCitpbXBvcnQgc210cGxpYgorCisjIEltcG9ydCB0aGUgZW1haWwgbW9kdWxlcyB3ZSdsbCBuZWVkCitmcm9tIGVtYWlsLm1pbWUudGV4dCBpbXBvcnQgTUlNRVRleHQKKworZGVmIF90YWtlX2xvY2tmaWxlKCk6CisgICAgcmV0dXJuIHNoZWxsdXRpbHMubG9ja2ZpbGUoc2hlbGx1dGlscy5ta19sb2NrX2ZpbGVuYW1lKCkpCisKKworZGVmIHJlYWRfbmV4dF90YXNrX2J5X3N0YXRlKHRhc2tfc3RhdGUsIHRhc2tfbmFtZT1Ob25lKToKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIGNvbmZpZy5CQUNLTE9HRklMRSkpOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIG9zLnJlbmFtZShjb25maWcuQkFDS0xPR0ZJTEUsIGNvbmZpZy5CQUNLTE9HRklMRSArICIudG1wIikKKyAgICB0YXNrID0gTm9uZQorICAgIHdpdGggb3Blbihjb25maWcuQkFDS0xPR0ZJTEUgKyAiLnRtcCIsICJyIikgYXMgZl9pbjoKKyAgICAgICAgd2l0aCBvcGVuKGNvbmZpZy5CQUNLTE9HRklMRSwgInciKSBhcyBmX291dDoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGZfaW4ucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgaWYgdGFzayBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBmaWVsZHMgPSBsaW5lLnN0cmlwKCkuc3BsaXQoInwiLCAyKQorICAgICAgICAgICAgICAgICAgICBpZiBmaWVsZHNbMV0gPT0gdGFza19zdGF0ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRhc2tfbmFtZSBpcyBOb25lIG9yIHRhc2tfbmFtZSA9PSBmaWVsZHNbMF06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzayA9IGZpZWxkc1swXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJVcGRhdGluZyAlcyAlcyB0byAlcyIgJSAodGFzaywgdGFza19zdGF0ZSwgY29uZmlnLlRBU0tTLm5leHRfdGFzayh0YXNrX3N0YXRlKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9ICIlc3wlc1xuIiAlICh0YXNrLCBjb25maWcuVEFTS1MubmV4dF90YXNrKHRhc2tfc3RhdGUpKQorICAgICAgICAgICAgICAgIGZfb3V0LndyaXRlKGxpbmUpCisgICAgb3MucmVtb3ZlKGNvbmZpZy5CQUNLTE9HRklMRSArICIudG1wIikKKyAgICByZXR1cm4gdGFzaworCitkZWYgc2VuZF9yZXBvcnQodGFza19uYW1lLCBwbGFpbnRleHQsIGVycnRleHQ9Tm9uZSk6CisgICAgaWYgZXJydGV4dCBpcyBOb25lOgorICAgICAgICBtc2cgPSBNSU1FVGV4dChwbGFpbnRleHQpCisgICAgZWxzZToKKyAgICAgICAgaWYgcGxhaW50ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBwbGFpbnRleHQgPSAiIgorICAgICAgICBtc2cgPSBNSU1FVGV4dCgiLS1TVERPVVQgZHVtcC0tXG5cbiVzXG5cbi0tU1RERVJSIGR1bXAtLVxuXG4lcyIgJSAocGxhaW50ZXh0LCBlcnJ0ZXh0KSkKKworICAgIG1zZ1snU3ViamVjdCddID0gIltyZXZpZXctcmVxdWVzdF0gJXMgLSBzbW9rZSB0ZXN0IHJlc3VsdHMiICUgdGFza19uYW1lCisgICAgbXNnWydGcm9tJ10gPSBjb25maWcuT1dOX0VNQUlMX0FERFJFU1MKKyAgICBtc2dbJ1RvJ10gPSBjb25maWcuUkVQT1JUX0VNQUlMX0FERFJFU1MKKworICAgIHNtdHBfY29ubmVjdGlvbiA9IHNtdHBsaWIuU01UUCgibG9jYWxob3N0IikKKyAgICBzbXRwX2Nvbm5lY3Rpb24uc2VuZG1haWwoY29uZmlnLk9XTl9FTUFJTF9BRERSRVNTLCBbY29uZmlnLlJFUE9SVF9FTUFJTF9BRERSRVNTXSwgbXNnLmFzX3N0cmluZygpKQorICAgIHNtdHBfY29ubmVjdGlvbi5xdWl0KCkKKworZGVmIG1haW4oKToKKyAgICAjIHdlIGRvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhhdmUgYW5vdGhlciBpbnN0YW5jZSBvZiB1cyBydW5uaW5nCisgICAgbG9ja19maWxlID0gX3Rha2VfbG9ja2ZpbGUoKQorCisgICAgaWYgbG9ja19maWxlIGlzIE5vbmU6CisgICAgICAgIGlmIGNvbmZpZy5ERUJVRzoKKyAgICAgICAgICAgIHByaW50KCJDb25jdXJyZW50IHNjcmlwdCBpbiBwcm9ncmVzcywgZXhpdGluZyIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBuZXh0X3Rhc2sgPSByZWFkX25leHRfdGFza19ieV9zdGF0ZShjb25maWcuVEFTS1MuUEVORElORykKKyAgICBpZiBuZXh0X3Rhc2sgaXMgbm90IE5vbmU6CisgICAgICAgIHByaW50KCJOZXh0IHRhc2sgaXMiLCBuZXh0X3Rhc2spCisgICAgICAgIGVycnRleHQgPSBOb25lCisgICAgICAgIG91dCA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0ID0gc2hlbGx1dGlscy5ydW5fc2hlbGxfY21kKCIlcyAlcyIgJSAob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJydW5uZXIucHkiKSwgbmV4dF90YXNrKSkKKyAgICAgICAgZXhjZXB0IFNoZWxsQ21kRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHByaW50KCJGYWlsZWQgd2hpbGUgcnVubmluZyB0aGUgdGVzdCBydW5uZXI6ICVzIiwgZXhjKQorICAgICAgICAgICAgZXJydGV4dCA9IGV4Yy5fX3N0cl9fKCkKKyAgICAgICAgc2VuZF9yZXBvcnQobmV4dF90YXNrLCBvdXQsIGVycnRleHQpCisgICAgICAgIHJlYWRfbmV4dF90YXNrX2J5X3N0YXRlKGNvbmZpZy5UQVNLUy5JTlBST0dSRVNTLCBuZXh0X3Rhc2spCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIk5vIHRhc2siKQorCisgICAgc2hlbGx1dGlscy51bmxvY2tmaWxlKGxvY2tfZmlsZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL2xvZy8uY3JlYXRlIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL2xvZy8uY3JlYXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvbG9nLy5jcmVhdGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9yZWN2LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3JlY3YucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDdlZmRhYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9yZWN2LnB5CkBAIC0wLDAgKzEsNTYgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAxNSBBbGV4YW5kcnUgRGFtaWFuIGZvciBJbnRlbCBDb3JwLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIyBQcm9ncmFtIHRvIHJlY2VpdmUgcmV2aWV3IHJlcXVlc3RzIGJ5IGVtYWlsIGFuZCBsb2cgdGFza3MgdG8gYmFja2xvZy50eHQKKyMgRGVzaWduZWQgdG8gYmUgcnVuIGJ5IHRoZSBlbWFpbCBzeXN0ZW0gZnJvbSBhIC5mb3J3YXJkIGZpbGU6CisjCisjIGNhdCAuZm9yd2FyZAorIyB8W2Z1bGwvcGF0aF0vcmVjdi5weQorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCitpbXBvcnQgc3lzLCBjb25maWcsIHNoZWxsdXRpbHMKKworZnJvbSBlbWFpbC5wYXJzZXIgaW1wb3J0IFBhcnNlcgorCitkZWYgcmVjdl9tYWlsKGRhdGFzdHJpbmcpOgorICAgIGhlYWRlcnMgPSBQYXJzZXIoKS5wYXJzZXN0cihkYXRhc3RyaW5nKQorICAgIHJldHVybiBoZWFkZXJzWydzdWJqZWN0J10KKworZGVmIG1haW4oKToKKyAgICBsb2NrX2ZpbGUgPSBzaGVsbHV0aWxzLmxvY2tmaWxlKHNoZWxsdXRpbHMubWtfbG9ja19maWxlbmFtZSgpLCByZXRyeT1UcnVlKQorCisgICAgaWYgbG9ja19maWxlIGlzIE5vbmU6CisgICAgICAgIGlmIGNvbmZpZy5ERUJVRzoKKyAgICAgICAgICAgIHByaW50KCJDb25jdXJyZW50IHNjcmlwdCBpbiBwcm9ncmVzcywgZXhpdGluZyIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBzdWJqZWN0ID0gcmVjdl9tYWlsKHN5cy5zdGRpbi5yZWFkKCkpCisKKyAgICBzdWJqZWN0X3BhcnRzID0gc3ViamVjdC5zcGxpdCgpCisgICAgaWYgIltyZXZpZXctcmVxdWVzdF0iIGluIHN1YmplY3RfcGFydHM6CisgICAgICAgIHRhc2tfbmFtZSA9IHN1YmplY3RfcGFydHNbc3ViamVjdF9wYXJ0cy5pbmRleCgiW3Jldmlldy1yZXF1ZXN0XSIpICsgMV0KKyAgICAgICAgd2l0aCBvcGVuKGNvbmZpZy5CQUNLTE9HRklMRSwgImEiKSBhcyBmb3V0OgorICAgICAgICAgICAgbGluZSA9ICIlc3wlc1xuIiAlICh0YXNrX25hbWUsIGNvbmZpZy5UQVNLUy5QRU5ESU5HKQorICAgICAgICAgICAgZm91dC53cml0ZShsaW5lKQorCisgICAgc2hlbGx1dGlscy51bmxvY2tmaWxlKGxvY2tfZmlsZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9ydW5uZXIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvcnVubmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJlZDY2NTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvcnVubmVyLnB5CkBAIC0wLDAgKzEsMjIyIEBACisjIS91c3IvYmluL3B5dGhvbgorCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQWxleGFuZHJ1IERhbWlhbiBmb3IgSW50ZWwgQ29ycC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKworIyBUaGlzIGlzIHRoZSBtYWluIHRlc3QgZXhlY3V0aW9uIGNvbnRyb2xsZXIuIEl0IGlzIGRlc2lnbmVkIHRvIGJlIHJ1bgorIyBtYW51YWxseSBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIG9yIHRvIGJlIGNhbGxlZCBmcm9tIGEgZGlmZmVyZW50IHByb2dyYW0KKyMgdGhhdCBzY2hlZHVsZXMgdGVzdCBleGVjdXRpb24uCisjCisjIEV4ZWN1dGUgICBydW5uZXIucHkgLWggICBmb3IgaGVscC4KKworCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2ltcG9ydCBzeXMsIG9zCitpbXBvcnQgdW5pdHRlc3QsIGltcG9ydGxpYgoraW1wb3J0IGxvZ2dpbmcsIHBwcmludCwganNvbgoraW1wb3J0IHJlCitmcm9tIHNoZWxsdXRpbHMgaW1wb3J0IFNoZWxsQ21kRXhjZXB0aW9uLCBta2RpcmhpZXIsIHJ1bl9zaGVsbF9jbWQKKworaW1wb3J0IGNvbmZpZworCisjIHdlIGFsc28gbG9nIHRvIGEgZmlsZSwgaW4gYWRkaXRpb24gdG8gY29uc29sZSwgYmVjYXVzZSBvdXIgb3V0cHV0IGlzIGltcG9ydGFudAorX19sb2dfZmlsZV9uYW1lX18gPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgImxvZy90dHNfJWQubG9nIiAlIGNvbmZpZy5PV05fUElEKQorbWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShfX2xvZ19maWxlX25hbWVfXykpCitfX2xvZ19maWxlX18gPSBvcGVuKF9fbG9nX2ZpbGVfbmFtZV9fLCAidyIpCitfX2ZpbGVfaGFuZGxlcl9fID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKF9fbG9nX2ZpbGVfXykKK19fZmlsZV9oYW5kbGVyX18uc2V0Rm9ybWF0dGVyKGxvZ2dpbmcuRm9ybWF0dGVyKCIlKGFzY3RpbWUpcyAlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpKQorCitjb25maWcubG9nZ2VyLmFkZEhhbmRsZXIoX19maWxlX2hhbmRsZXJfXykKKworIyBzZXQgdXAgbG9nIGRpcmVjdG9yeQordHJ5OgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhjb25maWcuTE9HRElSKToKKyAgICAgICAgb3MubWtkaXIoY29uZmlnLkxPR0RJUikKKyAgICBlbHNlOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihjb25maWcuTE9HRElSKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXhwZWN0ZWQgbG9nIGRpciAnJXMnIGlzIG5vdCBhY3R1YWxseSBhIGRpcmVjdG9yeS4iICUgY29uZmlnLkxPR0RJUikKK2V4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICByYWlzZSBleGMKKworIyBjcmVhdGVzIHRoZSB1bmRlci10ZXN0LWJyYW5jaCBhcyBhIHNlcGFyYXRlIGRpcmVjdG9yeQorZGVmIHNldF91cF90ZXN0X2JyYW5jaChzZXR0aW5ncywgYnJhbmNoX25hbWUpOgorICAgIHRlc3RkaXIgPSAiJXMvJXMuJWQiICUgKHNldHRpbmdzWyd3b3JrZGlyJ10sIGNvbmZpZy5URVNUX0RJUl9OQU1FLCBjb25maWcuT1dOX1BJRCkKKworICAgICMgY3JlYXRlcyB0aGUgaG9zdCBkaXIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyh0ZXN0ZGlyKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUZXN0IGRpciAnJXMnaXMgYWxyZWFkeSB0aGVyZSwgYWJvcnRpbmciICUgdGVzdGRpcikKKworICAgICMgbWF5IHJhaXNlIE9TRXJyb3IsIGlzIHRvIGJlIGhhbmRsZWQgYnkgdGhlIGNhbGxlcgorICAgIG9zLm1ha2VkaXJzKHRlc3RkaXIpCisKKworICAgICMgY29waWVzIG92ZXIgdGhlIC5naXQgZnJvbSB0aGUgbG9jYWxjbG9uZQorICAgIHJ1bl9zaGVsbF9jbWQoImNwIC1hICclcycvLmdpdCAnJXMnIiAlIChzZXR0aW5nc1snbG9jYWxjbG9uZSddLCB0ZXN0ZGlyKSkKKworICAgICMgYWRkIHRoZSByZW1vdGUgaWYgaXQgZG9lc24ndCBleGlzdAorICAgIGNydF9yZW1vdGVzID0gcnVuX3NoZWxsX2NtZCgiZ2l0IHJlbW90ZSAtdiIsIGN3ZD10ZXN0ZGlyKQorICAgIHJlbW90ZXMgPSBbd29yZCBmb3IgbGluZSBpbiBjcnRfcmVtb3Rlcy5zcGxpdCgiXG4iKSBmb3Igd29yZCBpbiBsaW5lLnNwbGl0KCldCisgICAgaWYgbm90IGNvbmZpZy5DT05UUklCX1JFUE8gaW4gcmVtb3RlczoKKyAgICAgICAgcmVtb3RlX25hbWUgPSAidHRzX2NvbnRyaWIiCisgICAgICAgIHJ1bl9zaGVsbF9jbWQoImdpdCByZW1vdGUgYWRkICVzICVzIiAlIChyZW1vdGVfbmFtZSwgY29uZmlnLkNPTlRSSUJfUkVQTyksIGN3ZD10ZXN0ZGlyKQorICAgIGVsc2U6CisgICAgICAgIHJlbW90ZV9uYW1lID0gcmVtb3Rlc1tyZW1vdGVzLmluZGV4KGNvbmZpZy5DT05UUklCX1JFUE8pIC0gMV0KKworICAgICMgZG8gdGhlIGZldGNoCisgICAgcnVuX3NoZWxsX2NtZCgiZ2l0IGZldGNoICVzIC1wIiAlIHJlbW90ZV9uYW1lLCBjd2Q9dGVzdGRpcikKKworICAgICMgZG8gdGhlIGNoZWNrb3V0CisgICAgcnVuX3NoZWxsX2NtZCgiZ2l0IGNoZWNrb3V0IG9yaWdpbi9tYXN0ZXIgJiYgZ2l0IGJyYW5jaCAtRCAlczsgZ2l0IGNoZWNrb3V0ICVzLyVzIC1iICVzICYmIGdpdCByZXNldCAtLWhhcmQiICUgKGJyYW5jaF9uYW1lLCByZW1vdGVfbmFtZSwgYnJhbmNoX25hbWUsIGJyYW5jaF9uYW1lKSwgY3dkPXRlc3RkaXIpCisKKyAgICByZXR1cm4gdGVzdGRpcgorCisKK2RlZiBfX3NlYXJjaF9mb3JfdGVzdHMoKToKKyAgICAjIHdlIGZpbmQgYWxsIGNsYXNzZXMgdGhhdCBjYW4gcnVuLCBhbmQgcnVuIHRoZW0KKyAgICB0ZXN0cyA9IFtdCisgICAgZm9yIF8sIF8sIGZpbGVzX2xpc3QgaW4gb3Mud2Fsayhvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpOgorICAgICAgICBmb3IgbW9kdWxlX2ZpbGUgaW4gW2ZbOi0zXSBmb3IgZiBpbiBmaWxlc19saXN0IGlmIGYuZW5kc3dpdGgoIi5weSIpIGFuZCBub3QgZi5zdGFydHN3aXRoKCJfX2luaXRfXyIpXToKKyAgICAgICAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoIkluc3BlY3RpbmcgbW9kdWxlICVzIiwgbW9kdWxlX2ZpbGUpCisgICAgICAgICAgICBjdXJyZW50X21vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG1vZHVsZV9maWxlKQorICAgICAgICAgICAgY3J0Y2xhc3NfbmFtZXMgPSB2YXJzKGN1cnJlbnRfbW9kdWxlKQorICAgICAgICAgICAgZm9yIG5hbWUgaW4gY3J0Y2xhc3NfbmFtZXM6CisgICAgICAgICAgICAgICAgdGVzdGVkX3ZhbHVlID0gY3J0Y2xhc3NfbmFtZXNbbmFtZV0KKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRlc3RlZF92YWx1ZSwgdHlwZSh1bml0dGVzdC5UZXN0Q2FzZSkpIGFuZCBpc3N1YmNsYXNzKHRlc3RlZF92YWx1ZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0cy5hcHBlbmQoKG1vZHVsZV9maWxlLCBuYW1lKSkKKyAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gdGVzdHMKKworCisjIGJvaWxlcnBsYXRlIHRvIHNlbGYgZGlzY292ZXIgdGVzdHMgYW5kIHJ1biB0aGVtCitkZWYgZXhlY3V0ZV90ZXN0cyhkaXJfdW5kZXJfdGVzdCwgdGVzdG5hbWUpOgorCisgICAgaWYgdGVzdG5hbWUgaXMgbm90IE5vbmUgYW5kICIuIiBpbiB0ZXN0bmFtZToKKyAgICAgICAgdGVzdHMgPSBbXQorICAgICAgICB0ZXN0cy5hcHBlbmQodHVwbGUodGVzdG5hbWUuc3BsaXQoIi4iLCAyKSkpCisgICAgZWxzZToKKyAgICAgICAgdGVzdHMgPSBfX3NlYXJjaF9mb3JfdGVzdHMoKQorCisgICAgIyBsZXQncyBtb3ZlIHRvIHRoZSBkaXJlY3RvcnkgdW5kZXIgdGVzdAorICAgIGNydF9kaXIgPSBvcy5nZXRjd2QoKQorICAgIG9zLmNoZGlyKGRpcl91bmRlcl90ZXN0KQorCisgICAgIyBleGVjdXRlIGVhY2ggbW9kdWxlCisgICAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CisgICAgIyB3ZSBkaXNhYmxlIHRoZSBicm9hZC1leGNlcHQgYmVjYXVzZSB3ZSB3YW50IHRvIGFjdHVhbGx5IGNhdGNoIGFsbCBwb3NzaWJsZSBleGNlcHRpb25zCisgICAgdHJ5OgorICAgICAgICAjIHNvcnRpbmcgdGhlIHRlc3RzIGJ5IHRoZSBudW1lcmljIG9yZGVyIGluIHRoZSBjbGFzcyBuYW1lCisgICAgICAgIHRlc3RzID0gc29ydGVkKHRlc3RzLCBrZXk9bGFtYmRhIHg6IGludChyZS5zZWFyY2gociJbMC05XSsiLCB4WzFdKS5ncm91cCgwKSkpCisgICAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoIkRpc2NvdmVyZWQgdGVzdCBjbGFzZXM6ICVzIiwgcHByaW50LnBmb3JtYXQodGVzdHMpKQorICAgICAgICB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcigpCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICByZXN1bHQuZmFpbGZhc3QgPSBUcnVlCisgICAgICAgIGZvciBtb2R1bGVfZmlsZSwgdGVzdF9uYW1lIGluIHRlc3RzOgorICAgICAgICAgICAgc3VpdGUuYWRkVGVzdChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoIiVzLiVzIiAlIChtb2R1bGVfZmlsZSwgdGVzdF9uYW1lKSkpCisgICAgICAgIGNvbmZpZy5sb2dnZXIuaW5mbygiUnVubmluZyAlZCB0ZXN0KHMpIiwgc3VpdGUuY291bnRUZXN0Q2FzZXMoKSkKKyAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKKworICAgICAgICBmb3IgZXJyb3IgaW4gcmVzdWx0LmVycm9yczoKKyAgICAgICAgICAgIGNvbmZpZy5sb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBvbiB0ZXN0OiAlc1xuJXMiLCBlcnJvclswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIi5qb2luKFsiLS0gJXMiICUgeCBmb3IgeCBpbiBlcnJvclsxXS5zcGxpdCgiXG4iKV0pKQorCisgICAgICAgIGZvciBmYWlsdXJlIGluIHJlc3VsdC5mYWlsdXJlczoKKyAgICAgICAgICAgIGNvbmZpZy5sb2dnZXIuZXJyb3IoIkZhaWxlZCB0ZXN0OiAlczpcbiVzXG4iLCBmYWlsdXJlWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iLmpvaW4oWyItLSAgJXMiICUgeCBmb3IgeCBpbiBmYWlsdXJlWzFdLnNwbGl0KCJcbiIpXSkpCisKKyAgICAgICAgY29uZmlnLmxvZ2dlci5pbmZvKCJUZXN0IHJlc3VsdHM6ICVkIHJhbiwgJWQgZXJyb3JzLCAlZCBmYWlsdXJlcyIsIHJlc3VsdC50ZXN0c1J1biwgbGVuKHJlc3VsdC5lcnJvcnMpLCBsZW4ocmVzdWx0LmZhaWx1cmVzKSkKKworICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIGNvbmZpZy5sb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHRlc3QuIFRyYWNlZHVtcDogXG4lcyIsIHRyYWNlYmFjay5mb3JtYXRfZXhjKGV4YykpCisgICAgZmluYWxseToKKyAgICAgICAgb3MuY2hkaXIoY3J0X2RpcikKKyAgICByZXR1cm4gbGVuKHJlc3VsdC5mYWlsdXJlcykKKworIyB2ZXJpZnkgdGhhdCB3ZSBoYWQgYSBicmFuY2gtdW5kZXItdGVzdCBuYW1lIGFzIHBhcmFtZXRlcgorZGVmIHZhbGlkYXRlX2FyZ3MoKToKKyAgICBmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKKyAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIodXNhZ2U9InVzYWdlOiAlcHJvZyBbb3B0aW9uc10gYnJhbmNoX3VuZGVyX3Rlc3QiKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi10IiwgIi0tdGVzdC1kaXIiLCBkZXN0PSJ0ZXN0ZGlyIiwgZGVmYXVsdD1Ob25lLCBoZWxwPSJVc2Ugc3BlY2lmaWVkIGRpcmVjdG9yeSB0byBydW4gdGVzdHMsIGluaGliaXRzIHRoZSBjaGVja291dC4iKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcyIsICItLXNpbmdsZSIsIGRlc3Q9InNpbmdsZXRlc3QiLCBkZWZhdWx0PU5vbmUsIGhlbHA9IlJ1biBvbmx5IHRoZSBzcGVjaWZpZWQgdGVzdCIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgaWYgbGVuKGFyZ3MpIDwgMToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJQbGVhc2Ugc3BlY2lmeSB0aGUgYnJhbmNoIHRvIHJ1biBvbi4gVXNlIG9wdGlvbiAnLWgnIHdoZW4gaW4gZG91YnQuIikKKyAgICByZXR1cm4gKG9wdGlvbnMsIGFyZ3MpCisKKworCisKKyMgbG9hZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zCitkZWYgcmVhZF9zZXR0aW5ncygpOgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhjb25maWcuU0VUVElOR1NfRklMRSkgb3Igbm90IG9zLnBhdGguaXNmaWxlKGNvbmZpZy5TRVRUSU5HU19GSUxFKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb25maWcgZmlsZSAnJXMnIGNhbm5vdCBiZSBvcGVuZW5kIiAlIGNvbmZpZy5TRVRUSU5HU19GSUxFKQorICAgIHJldHVybiBqc29uLmxvYWRzKG9wZW4oY29uZmlnLlNFVFRJTkdTX0ZJTEUsICJyIikucmVhZCgpKQorCisKKyMgY2xlYW51cCAhCitkZWYgY2xlYW5fdXAodGVzdGRpcik6CisgICAgcnVuX3NoZWxsX2NtZCgicm0gLXJmIC0tICclcyciICUgdGVzdGRpcikKKworZGVmIGR1bXBfaW5mbyhzZXR0aW5ncywgb3B0aW9ucywgYXJncyk6CisgICAgIiIiIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgcnVuIGNvbmZpZ3VyYXRpb24sIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCisgICAgIiIiCisgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygiU2V0dGluZ3M6XG4lc1xuT3B0aW9uczpcbiVzXG5Bcmd1bWVudHM6XG4lc1xuIiwgc2V0dGluZ3MsIG9wdGlvbnMsIGFyZ3MpCisKK2RlZiBtYWluKCk6CisgICAgKG9wdGlvbnMsIGFyZ3MpID0gdmFsaWRhdGVfYXJncygpCisKKyAgICBzZXR0aW5ncyA9IHJlYWRfc2V0dGluZ3MoKQorICAgIG5lZWRfY2xlYW51cCA9IEZhbHNlCisKKyAgICAjIGR1bXAgZGVidWcgaW5mbworICAgIGR1bXBfaW5mbyhzZXR0aW5ncywgb3B0aW9ucywgYXJncykKKworICAgIHRlc3RkaXIgPSBOb25lCisgICAgbm9fZmFpbHVyZXMgPSAxCisgICAgdHJ5OgorICAgICAgICBpZiBvcHRpb25zLnRlc3RkaXIgaXMgbm90IE5vbmUgYW5kIG9zLnBhdGguZXhpc3RzKG9wdGlvbnMudGVzdGRpcik6CisgICAgICAgICAgICB0ZXN0ZGlyID0gb3MucGF0aC5hYnNwYXRoKG9wdGlvbnMudGVzdGRpcikKKyAgICAgICAgICAgIGNvbmZpZy5sb2dnZXIuaW5mbygiTm8gY2hlY2tvdXQsIHVzaW5nICVzIiwgdGVzdGRpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5lZWRfY2xlYW51cCA9IFRydWUKKyAgICAgICAgICAgIHRlc3RkaXIgPSBzZXRfdXBfdGVzdF9icmFuY2goc2V0dGluZ3MsIGFyZ3NbMF0pICMgd2UgZXhwZWN0IGEgYnJhbmNoIG5hbWUgYXMgZmlyc3QgYXJndW1lbnQKKworICAgICAgICBjb25maWcuVEVTVERJUiA9IHRlc3RkaXIgICAgIyB3ZSBsZXQgdGVzdHMga25vdyB3aGVyZSB0byBydW4KKworICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSB0ZXN0IGRpciBvbmx5IGNvbnRhaW5zIG5vICoucHljIGxlZnRvdmVycworICAgICAgICBydW5fc2hlbGxfY21kKCJmaW5kICclcycgLXR5cGUgZiAtbmFtZSAqLnB5YyAtZXhlYyBybSB7fSBcXDsiICUgdGVzdGRpcikKKworICAgICAgICBub19mYWlsdXJlcyA9IGV4ZWN1dGVfdGVzdHModGVzdGRpciwgb3B0aW9ucy5zaW5nbGV0ZXN0KQorCisgICAgZXhjZXB0IFNoZWxsQ21kRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICBjb25maWcubG9nZ2VyLmVycm9yKCJFcnJvciB3aGlsZSBzZXR0aW5nIHVwIHRlc3RpbmcuIFRyYWNlYmFjazogXG4lcyIsIHRyYWNlYmFjay5mb3JtYXRfZXhjKGV4YykpCisgICAgZmluYWxseToKKyAgICAgICAgaWYgbmVlZF9jbGVhbnVwIGFuZCB0ZXN0ZGlyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY2xlYW5fdXAodGVzdGRpcikKKworICAgIHN5cy5leGl0KG5vX2ZhaWx1cmVzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3NldHRpbmdzLmpzb24gYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvc2V0dGluZ3MuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjY3MWVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3NldHRpbmdzLmpzb24KQEAgLTAsMCArMSw1IEBACit7CisJInJlcG8iOiAiZ2l0QGdpdC55b2N0b3Byb2plY3Qub3JnOnBva3ktY29udHJpYiIsCisJImxvY2FsY2xvbmUiOiAiL2hvbWUvZGRhbGV4L3NzZC95b2N0by9wb2t5IiwKKwkid29ya2RpciI6ICIvaG9tZS9kZGFsZXgvc3NkL3lvY3RvIgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3NoZWxsdXRpbHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvc2hlbGx1dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjAxMmVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3NoZWxsdXRpbHMucHkKQEAgLTAsMCArMSwxNDEgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAxNSBBbGV4YW5kcnUgRGFtaWFuIGZvciBJbnRlbCBDb3JwLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIyBVdGlsaXRpZXMgc2hhcmVkIGJ5IHRlc3RzIGFuZCBvdGhlciBjb21tb24gYml0cyBvZiBjb2RlLgorCitpbXBvcnQgc3lzLCBvcywgc3VicHJvY2VzcywgZmNudGwsIGVycm5vCitpbXBvcnQgY29uZmlnCitmcm9tIGNvbmZpZyBpbXBvcnQgbG9nZ2VyCisKKworIyBMaWNlbnNlIHdhcm5pbmc7IHRoaXMgY29kZSBpcyBjb3BpZWQgZnJvbSB0aGUgQml0QmFrZSBwcm9qZWN0LCBmaWxlIGJpdGJha2UvbGliL2JiL3V0aWxzLnB5CisjIFRoZSBjb2RlIGlzIG9yaWdpbmFsbHkgbGljZW5zZWQgR1BMLTIuMCwgYW5kIHdlIHJlZGlzdHJpYnV0ZSBpdCB1bmRlciBzdGlsbCBHUEwtMi4wCisKKyMgRW5kIG9mIGNvcHkgaXMgbWFya2VkIHdpdGggI0VORE9GQ09QWSBtYXJrZXIKKworZGVmIG1rZGlyaGllcihkaXJlY3RvcnkpOgorICAgICIiIkNyZWF0ZSBhIGRpcmVjdG9yeSBsaWtlICdta2RpciAtcCcsIGJ1dCBkb2VzIG5vdCBjb21wbGFpbiBpZgorICAgIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyBsaWtlIG9zLm1ha2VkaXJzCisgICAgIiIiCisKKyAgICB0cnk6CisgICAgICAgIG9zLm1ha2VkaXJzKGRpcmVjdG9yeSkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgIGlmIGV4Yy5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICByYWlzZSBleGMKKworZGVmIGxvY2tmaWxlKG5hbWUsIHNoYXJlZD1GYWxzZSwgcmV0cnk9VHJ1ZSk6CisgICAgIiIiCisgICAgVXNlIHRoZSBmaWxlIGZuIGFzIGEgbG9jayBmaWxlLCByZXR1cm4gd2hlbiB0aGUgbG9jayBoYXMgYmVlbiBhY3F1aXJlZC4KKyAgICBSZXR1cm5zIGEgdmFyaWFibGUgdG8gcGFzcyB0byB1bmxvY2tmaWxlKCkuCisgICAgIiIiCisgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygidGFrZSBsb2NrZmlsZSAlcyIsIG5hbWUpCisgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShuYW1lKQorICAgIG1rZGlyaGllcihkaXJuYW1lKQorCisgICAgaWYgbm90IG9zLmFjY2VzcyhkaXJuYW1lLCBvcy5XX09LKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gYWNxdWlyZSBsb2NrICclcycsIGRpcmVjdG9yeSBpcyBub3Qgd3JpdGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgbmFtZSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIG9wZXJhdGlvbiA9IGZjbnRsLkxPQ0tfRVgKKyAgICBpZiBzaGFyZWQ6CisgICAgICAgIG9wZXJhdGlvbiA9IGZjbnRsLkxPQ0tfU0gKKyAgICBpZiBub3QgcmV0cnk6CisgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvbiB8IGZjbnRsLkxPQ0tfTkIKKworICAgIHdoaWxlIFRydWU6CisgICAgICAgICMgSWYgd2UgbGVhdmUgdGhlIGxvY2tmaWxlcyBseWluZyBhcm91bmQgdGhlcmUgaXMgbm8gcHJvYmxlbQorICAgICAgICAjIGJ1dCB3ZSBzaG91bGQgY2xlYW4gdXAgYWZ0ZXIgb3Vyc2VsdmVzLiBUaGlzIGdpdmVzIHBvdGVudGlhbAorICAgICAgICAjIGZvciByYWNlcyB0aG91Z2guIFRvIHdvcmsgYXJvdW5kIHRoaXMsIHdoZW4gd2UgYWNxdWlyZSB0aGUgbG9jaworICAgICAgICAjIHdlIGNoZWNrIHRoZSBmaWxlIHdlIGxvY2tlZCB3YXMgc3RpbGwgdGhlIGxvY2sgZmlsZSBvbiBkaXNrLgorICAgICAgICAjIGJ5IGNvbXBhcmluZyBpbm9kZSBudW1iZXJzLiBJZiB0aGV5IGRvbid0IG1hdGNoIG9yIHRoZSBsb2NrZmlsZQorICAgICAgICAjIG5vIGxvbmdlciBleGlzdHMsIHdlIHN0YXJ0IGFnYWluLgorCisgICAgICAgICMgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB1bmZhaXIgc2luY2UgdGhlIGxhc3QgcGVyc29uIHRvIHJlcXVlc3QgdGhlCisgICAgICAgICMgbG9jayBpcyB0aGUgbW9zdCBsaWtlbHkgdG8gd2luIGl0LgorCisgICAgICAgICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAorICAgICAgICAjIHdlIGRpc2FibGUgdGhlIGJyb2FkLWV4Y2VwdCBiZWNhdXNlIHdlIHdhbnQgdG8gYWN0dWFsbHkgY2F0Y2ggYWxsIHBvc3NpYmxlIGV4Y2VwdGlvbnMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9ja19maWxlID0gb3BlbihuYW1lLCAnYSsnKQorICAgICAgICAgICAgZmlsZW5vID0gbG9ja19maWxlLmZpbGVubygpCisgICAgICAgICAgICBmY250bC5mbG9jayhmaWxlbm8sIG9wZXJhdGlvbikKKyAgICAgICAgICAgIHN0YXRpbmZvID0gb3MuZnN0YXQoZmlsZW5vKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobG9ja19maWxlLm5hbWUpOgorICAgICAgICAgICAgICAgIHN0YXRpbmZvMiA9IG9zLnN0YXQobG9ja19maWxlLm5hbWUpCisgICAgICAgICAgICAgICAgaWYgc3RhdGluZm8uc3RfaW5vID09IHN0YXRpbmZvMi5zdF9pbm86CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NrX2ZpbGUKKyAgICAgICAgICAgIGxvY2tfZmlsZS5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxvY2tfZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzI6CisgICAgICAgICAgICAgICAgY29uZmlnLmxvZ2dlci5lcnJvcigiRmFpbGVkIHRvIGNsb3NlIHRoZSBsb2NrZmlsZTogJXMiLCBleGMyKQorICAgICAgICAgICAgY29uZmlnLmxvZ2dlci5lcnJvcigiRmFpbGVkIHRvIGFjcXVpcmUgdGhlIGxvY2tmaWxlOiAlcyIsIGV4YykKKyAgICAgICAgaWYgbm90IHJldHJ5OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworZGVmIHVubG9ja2ZpbGUobG9ja19maWxlKToKKyAgICAiIiIKKyAgICBVbmxvY2sgYSBmaWxlIGxvY2tlZCB1c2luZyBsb2NrZmlsZSgpCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICAjIElmIHdlIGhhZCBhIHNoYXJlZCBsb2NrLCB3ZSBuZWVkIHRvIHByb21vdGUgdG8gZXhjbHVzaXZlIGJlZm9yZQorICAgICAgICAjIHJlbW92aW5nIHRoZSBsb2NrZmlsZS4gQXR0ZW1wdCB0aGlzLCBpZ25vcmUgZmFpbHVyZXMuCisgICAgICAgIGZjbnRsLmZsb2NrKGxvY2tfZmlsZS5maWxlbm8oKSwgZmNudGwuTE9DS19FWHxmY250bC5MT0NLX05CKQorICAgICAgICBvcy51bmxpbmsobG9ja19maWxlLm5hbWUpCisgICAgZXhjZXB0IChJT0Vycm9yLCBPU0Vycm9yKToKKyAgICAgICAgcGFzcworICAgIGZjbnRsLmZsb2NrKGxvY2tfZmlsZS5maWxlbm8oKSwgZmNudGwuTE9DS19VTikKKyAgICBsb2NrX2ZpbGUuY2xvc2UoKQorCisjRU5ET0ZDT1BZCisKKworZGVmIG1rX2xvY2tfZmlsZW5hbWUoKToKKyAgICBvdXJfbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoX19maWxlX18pCisgICAgb3VyX25hbWUgPSAiLiVzIiAlICIuIi5qb2luKHJldmVyc2VkKG91cl9uYW1lLnNwbGl0KCIuIikpKQorICAgIHJldHVybiBjb25maWcuTE9DS0ZJTEUgKyBvdXJfbmFtZQorCisKKworY2xhc3MgU2hlbGxDbWRFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2RlZiBydW5fc2hlbGxfY21kKGNvbW1hbmQsIGN3ZD1Ob25lKToKKyAgICBpZiBjd2QgaXMgTm9uZToKKyAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKKworICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoIl9zaGVsbGNtZDogKCVzKSAlcyIsIGN3ZCwgY29tbWFuZCkKKyAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbihjb21tYW5kLCBjd2Q9Y3dkLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgIChvdXQsIGVycikgPSBwcm9jZXNzLmNvbW11bmljYXRlKCkKKyAgICBwcm9jZXNzLndhaXQoKQorICAgIGlmIHByb2Nlc3MucmV0dXJuY29kZToKKyAgICAgICAgaWYgbGVuKGVycikgPT0gMDoKKyAgICAgICAgICAgIGVyciA9ICJjb21tYW5kOiAlcyBcbiVzIiAlIChjb21tYW5kLCBvdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlcnIgPSAiY29tbWFuZDogJXMgXG4lcyIgJSAoY29tbWFuZCwgZXJyKQorICAgICAgICBjb25maWcubG9nZ2VyLndhcm4oIl9zaGVsbGNtZDogZXJyb3IgXG4lc1xuJXMiLCBvdXQsIGVycikKKyAgICAgICAgcmFpc2UgU2hlbGxDbWRFeGNlcHRpb24oZXJyKQorICAgIGVsc2U6CisgICAgICAgICNjb25maWcubG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IHNoZWxsY21kIHN1Y2Nlc3NcbiVzIiAlIG91dCkKKyAgICAgICAgcmV0dXJuIG91dAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdGVzdHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUxMGViYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90ZXN0cy5weQpAQCAtMCwwICsxLDExNSBAQAorIyEvdXNyL2Jpbi9weXRob24KKworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFsZXhhbmRydSBEYW1pYW4gZm9yIEludGVsIENvcnAuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisKKyMgVGVzdCBkZWZpbml0aW9ucy4gVGhlIHJ1bm5lciB3aWxsIGxvb2sgZm9yIGFuZCBhdXRvLWRpc2NvdmVyIHRoZSB0ZXN0cworIyBubyBtYXR0ZXIgd2hhdCB0aGV5IGZpbGUgYXJlIHRoZXkgaW4sIGFzIGxvbmcgYXMgdGhleSBhcmUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5CisjIGFzIHRoaXMgZmlsZS4KKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHNoZWxsdXRpbHMgaW1wb3J0IHJ1bl9zaGVsbF9jbWQsIFNoZWxsQ21kRXhjZXB0aW9uCitpbXBvcnQgY29uZmlnCisKK2ltcG9ydCBwZXhwZWN0CitpbXBvcnQgc3lzLCBvcywgc2lnbmFsLCB0aW1lCisKK2NsYXNzIFRlc3QwMFB5Q29tcGlsYWJsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgJycnIFZlcmlmaWVzIHRoYXQgYWxsIFB5dGhvbiBmaWxlcyBhcmUgc3ludGFjdGljYWxseSBjb3JyZWN0ICcnJworICAgIGRlZiB0ZXN0X2NvbXBpbGVfZmlsZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcnVuX3NoZWxsX2NtZCgiZmluZCAuIC1uYW1lICpweSAtdHlwZSBmIC1wcmludDAgfCB4YXJncyAtMCAtbjEgLVAyMCBweXRob24gLW0gcHlfY29tcGlsZSIsIGNvbmZpZy5URVNURElSKQorICAgICAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciBjb21waWxpbmcgcHl0aG9uIGZpbGVzOiAlcyIgJSAoZXhjKSkKKworICAgIGRlZiB0ZXN0X3B5bGludF9maWxlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBydW5fc2hlbGxfY21kKHIiZmluZCAuIC1pbmFtZSBcIipcLnB5XCIgLXR5cGUgZiAtcHJpbnQwIHwgUFlUSE9OUEFUSD0ke1BZVEhPTlBBVEh9Oi4geGFyZ3MgLXIgLTAgLW4xIHB5bGludCAtLWxvYWQtcGx1Z2lucyBweWxpbnRfZGphbmdvIC1FIC0tcmVwb3J0cz1uIDI+JjEiLCBjd2Q9Y29uZmlnLlRFU1RESVIgKyAiL2JpdGJha2UvbGliL3RvYXN0ZXIiKQorICAgICAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJQeWxpbnQgZmFpbHM6ICVzXG4iICUgZXhjKQorCitjbGFzcyBUZXN0MDFQeVN5c3RlbVN0YXJ0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAnJycgQXR0ZW1wdHMgdG8gc3RhcnQgVG9hc3RlciwgdmVyaWZ5IHRoYXQgaXQgaXMgc3VjY2VzZnVsbCwgYW5kIHN0b3AgaXQgJycnCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBydW5fc2hlbGxfY21kKCJiYXNoIC1jICdybSAtZiBidWlsZC8qbG9nJyIpCisKKyAgICBkZWYgdGVzdF9zdGFydF9pbnRlcmFjdGl2ZV9tb2RlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBydW5fc2hlbGxfY21kKCJiYXNoIC1jICdzb3VyY2UgJXMvb2UtaW5pdC1idWlsZC1lbnYgJiYgc291cmNlIHRvYXN0ZXIgc3RhcnQgd2VicG9ydD0lZCAmJiBzb3VyY2UgdG9hc3RlciBzdG9wJyIgJSAoY29uZmlnLlRFU1RESVIsIGNvbmZpZy5UT0FTVEVSX1BPUlQpLCBjb25maWcuVEVTVERJUikKKyAgICAgICAgZXhjZXB0IFNoZWxsQ21kRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHN0YXJ0aW5nIGludGVyYWN0aXZlIG1vZGU6ICVzIiAlIChleGMpKQorCisgICAgZGVmIHRlc3Rfc3RhcnRfbWFuYWdlZF9tb2RlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBydW5fc2hlbGxfY21kKCIlcy9iaXRiYWtlL2Jpbi90b2FzdGVyIHdlYnBvcnQ9JWQgbm9icm93c2VyICYgc2xlZXAgMTAgJiYgY3VybCBodHRwOi8vbG9jYWxob3N0OiVkLyAmJiBraWxsIC0yICUlMSIgJSAoY29uZmlnLlRFU1RESVIsIGNvbmZpZy5UT0FTVEVSX1BPUlQsIGNvbmZpZy5UT0FTVEVSX1BPUlQpLCBjb25maWcuVEVTVERJUikKKyAgICAgICAgZXhjZXB0IFNoZWxsQ21kRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHN0YXJ0aW5nIG1hbmFnZWQgbW9kZTogJXMiICUgKGV4YykpCisKK2NsYXNzIFRlc3QwMkhUTUw1Q29tcGxpYW5jZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm9yaWdkaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBzZWxmLmNydGRpciA9IG9zLnBhdGguZGlybmFtZShjb25maWcuVEVTVERJUikKKyAgICAgICAgc2VsZi5jbGVhbnVwX2RhdGFiYXNlID0gRmFsc2UKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5jcnRkaXIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5jcnRkaXIsICJ0b2FzdGVyLnNxbGl0ZSIpKToKKyAgICAgICAgICAgIHNlbGYuY2xlYW51cF9kYXRhYmFzZSA9IFRydWUKKyAgICAgICAgICAgIHJ1bl9zaGVsbF9jbWQoIiVzL2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IHN5bmNkYiAtLW5vaW5wdXQiICUgY29uZmlnLlRFU1RESVIpCisgICAgICAgICAgICBydW5fc2hlbGxfY21kKCIlcy9iaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBtaWdyYXRlIG9ybSIgJSBjb25maWcuVEVTVERJUikKKyAgICAgICAgICAgIHJ1bl9zaGVsbF9jbWQoIiVzL2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IG1pZ3JhdGUgYmxkY29udHJvbCIgJSBjb25maWcuVEVTVERJUikKKyAgICAgICAgICAgIHJ1bl9zaGVsbF9jbWQoIiVzL2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGxvYWRjb25mICVzL21ldGEteW9jdG8vY29uZi90b2FzdGVyY29uZi5qc29uIiAlIChjb25maWcuVEVTVERJUiwgY29uZmlnLlRFU1RESVIpKQorICAgICAgICAgICAgcnVuX3NoZWxsX2NtZCgiJXMvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbHN1cGRhdGVzIiAlIGNvbmZpZy5URVNURElSKQorCisgICAgICAgICAgICBzZXR1cCA9IHBleHBlY3Quc3Bhd24oIiVzL2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGNoZWNrc2V0dGluZ3MiICUgY29uZmlnLlRFU1RESVIpCisgICAgICAgICAgICBzZXR1cC5sb2dmaWxlID0gc3lzLnN0ZG91dAorICAgICAgICAgICAgc2V0dXAuZXhwZWN0KHIiLipvciB0eXBlIHRoZSBmdWxsIHBhdGggdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5OiAiKQorICAgICAgICAgICAgc2V0dXAuc2VuZGxpbmUoJycpCisgICAgICAgICAgICBzZXR1cC5zZW5kbGluZSgnJykKKyAgICAgICAgICAgIHNldHVwLmV4cGVjdChyIi4qb3IgdHlwZSB0aGUgZnVsbCBwYXRoIHRvIGEgZGlmZmVyZW50IGRpcmVjdG9yeTogIikKKyAgICAgICAgICAgIHNldHVwLnNlbmRsaW5lKCcnKQorICAgICAgICAgICAgc2V0dXAuZXhwZWN0KHIiRW50ZXIgeW91ciBvcHRpb246ICIpCisgICAgICAgICAgICBzZXR1cC5zZW5kbGluZSgnMCcpCisKKyAgICAgICAgc2VsZi5jaGlsZCA9IHBleHBlY3Quc3Bhd24oImJhc2giLCBbIiVzL2JpdGJha2UvYmluL3RvYXN0ZXIiICUgY29uZmlnLlRFU1RESVIsICJ3ZWJwb3J0PSVkIiAlIGNvbmZpZy5UT0FTVEVSX1BPUlQsICJub2Jyb3dzZXIiXSwgY3dkPXNlbGYuY3J0ZGlyKQorICAgICAgICBzZWxmLmNoaWxkLmxvZ2ZpbGUgPSBzeXMuc3Rkb3V0CisgICAgICAgIHNlbGYuY2hpbGQuZXhwZWN0KCJUb2FzdGVyIGlzIG5vdyBydW5uaW5nLiBZb3UgY2FuIHN0b3AgaXQgd2l0aCBDdHJsLUMiKQorCisgICAgZGVmIHRlc3RfaHRtbDVfY29tcGxpYW5jZShzZWxmKToKKyAgICAgICAgaW1wb3J0IHVybGxpc3QsIHVybGNoZWNrCisgICAgICAgIHJlc3VsdHMgPSB7fQorICAgICAgICBmb3IgdXJsIGluIHVybGxpc3QuVVJMUzoKKyAgICAgICAgICAgIHJlc3VsdHNbdXJsXSA9IHVybGNoZWNrLnZhbGlkYXRlX2h0bWw1KGNvbmZpZy5UT0FTVEVSX0JBU0VVUkwgKyB1cmwpCisKKyAgICAgICAgZmFpbGVkID0gW10KKyAgICAgICAgZm9yIHVybCBpbiByZXN1bHRzOgorICAgICAgICAgICAgaWYgcmVzdWx0c1t1cmxdWzFdICE9IDA6CisgICAgICAgICAgICAgICAgZmFpbGVkLmFwcGVuZCgodXJsLCByZXN1bHRzW3VybF0pKQorCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihmYWlsZWQpID09IDAsICJOb3QgYWxsIFVSTHMgdmFsaWRhdGU6IFxuJXMgIiAlICJcbiIuam9pbihbIiIuam9pbihzdHIoeCkpIGZvciB4IGluIGZhaWxlZF0pKQorCisgICAgICAgICMoY29uZmlnLlRPQVNURVJfQkFTRVVSTCArIHVybCwgc3RhdHVzLCBlcnJvcnMsIHdhcm5pbmdzKSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgd2hpbGUgc2VsZi5jaGlsZC5pc2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmNoaWxkLmtpbGwoc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5vcmlnZGlyKQorICAgICAgICB0b2FzdGVyX3NxbGl0ZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuY3J0ZGlyLCAidG9hc3Rlci5zcWxpdGUiKQorICAgICAgICBpZiBzZWxmLmNsZWFudXBfZGF0YWJhc2UgYW5kIG9zLnBhdGguZXhpc3RzKHRvYXN0ZXJfc3FsaXRlX3BhdGgpOgorICAgICAgICAgICAgb3MucmVtb3ZlKHRvYXN0ZXJfc3FsaXRlX3BhdGgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdG9hc3RlcnVpdGVzdC9ydW5fdG9hc3RlcnRlc3RzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3RvYXN0ZXJ1aXRlc3QvcnVuX3RvYXN0ZXJ0ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ODA0ODdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3RvYXN0ZXJ1aXRlc3QvcnVuX3RvYXN0ZXJ0ZXN0cy5weQpAQCAtMCwwICsxLDg3IEBACisjIS91c3IvYmluL3B5dGhvbgorCisjIENvcHlyaWdodAorCisjIERFU0NSSVBUSU9OCisjIFRoaXMgaXMgc2NyaXB0IGZvciBydW5uaW5nIGFsbCBzZWxlY3RlZCB0b2FzdGVyIGNhc2VzIG9uCisjIHNlbGVjdGVkIHdlYiBicm93c2VycyBtYW5pZmVzdGVkIGluIHRvYXN0ZXJfdGVzdC5jZmcuCisKKyMgMS4gSG93IHRvIHN0YXJ0IHRvYXN0ZXIgaW4geW9jdG86CisjICQgc291cmNlIHBva3kvb2UtaW5pdC1idWlsZC1lbnYKKyMgJCBzb3VyY2UgdG9hc3RlciBzdGFydAorIyAkIGJpdGJha2UgY29yZS1pbWFnZS1taW5pbWFsCisKKyMgMi4gSG93IHRvIGluc3RhbGwgc2VsZW5pdW0gb24gVWJ1bnR1OgorIyAkIHN1ZG8gYXB0LWdldCBpbnN0YWxsIHNjcm90IHB5dGhvbi1waXAKKyMgJCBzdWRvIHBpcCBpbnN0YWxsIHNlbGVuaXVtCisKKyMgMy4gSG93IHRvIGluc3RhbGwgc2VsZW5pdW0gYWRkb24gaW4gZmlyZWZveDoKKyMgRG93bmxvYWQgdGhlIGxhc3Rlc3QgZmlyZWZveCBhZGRvbiBmcm9tIGh0dHA6Ly9yZWxlYXNlLnNlbGVuaXVtaHEub3JnL3NlbGVuaXVtLWlkZS8KKyMgVGhlbiBpbnN0YWxsIGl0LiBZb3UgY2FuIGFsc28gaW5zdGFsbCBmaXJlYnVnIGFuZCBmaXJlcGF0aCBhZGRvbgorCisjIDQuIEhvdyB0byBzdGFydCB3cml0aW5nIGEgbmV3IGNhc2U6CisjIEFsbCB5b3UgbmVlZCB0byBkbyBpcyB0byBpbXBsZW1lbnQgdGhlIGZ1bmN0aW9uIHRlc3RfeHh4KCkgYW5kICBwaWxlIGl0IG9uLgorCisjIDUuIEhvdyB0byB0ZXN0IHdpdGggQ2hyb21lIGJyb3dzZXIKKyMgRG93bmxvYWQvaW5zdGFsbCBjaHJvbWUgb24gaG9zdAorIyBEb3dubG9hZCBjaHJvbWVkcml2ZXIgZnJvbSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9tZWRyaXZlci9kb3dubG9hZHMvbGlzdCAgYWNjb3JkaW5nIHRvIHlvdXIgaG9zdCB0eXBlCisjIHB1dCBjaHJvbWVkcml2ZXIgaW4gUEFUSCwgKGUuZy4gL3Vzci9iaW4vLCBiZWFyIGluIG1pbmQgdG8gY2htb2QpCisjIEZvciB3aW5kb3dzIGhvc3QsIHlvdSBtYXkgcHV0IGNocm9tZWRyaXZlci5leGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIGNocm9tZS5leGUKKworCitpbXBvcnQgdW5pdHRlc3QsIHRpbWUsIHJlLCBzeXMsIGdldG9wdCwgb3MsIGxvZ2dpbmcsIHBsYXRmb3JtCitpbXBvcnQgQ29uZmlnUGFyc2VyCitpbXBvcnQgc3VicHJvY2VzcworCisKK2NsYXNzIHRvYXN0ZXJfcnVuX2FsbCgpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgIyBpbiBjYXNlIHRoaXMgc2NyaXB0IGlzIGNhbGxlZCBmcm9tIG90aGVyIGRpcmVjdG9yeQorICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmFic3BhdGgoc3lzLnBhdGhbMF0pKQorICAgICAgICBzZWxmLnN0YXJ0dGltZSA9IHRpbWUuc3RycHRpbWUodGltZS5jdGltZSgpKQorICAgICAgICBzZWxmLnBhcnNlciA9IENvbmZpZ1BhcnNlci5TYWZlQ29uZmlnUGFyc2VyKCkKKyAgICAgICAgZm91bmQgPSBzZWxmLnBhcnNlci5yZWFkKCd0b2FzdGVyX3Rlc3QuY2ZnJykKKyAgICAgICAgc2VsZi5ob3N0X29zID0gcGxhdGZvcm0uc3lzdGVtKCkubG93ZXIoKQorICAgICAgICBzZWxmLnJ1bl9hbGxfY2FzZXMoKQorICAgICAgICBzZWxmLmNvbGxlY3RfbG9nKCkKKworICAgIGRlZiBnZXRfdGVzdF9jYXNlcyhzZWxmKToKKyAgICAgICAgIyB3ZSBoYXZlIGNvbmZpZyBncm91cHMgZm9yIGRpZmZlcmVudCBvcyB0eXBlIGluIHRvYXN0ZXJfdGVzdC5jZmcKKyAgICAgICAgY2FzZXNfdG9fcnVuID0gZXZhbChzZWxmLnBhcnNlci5nZXQoJ3RvYXN0ZXJfdGVzdF8nICsgc2VsZi5ob3N0X29zLCAndGVzdF9jYXNlcycpKQorICAgICAgICByZXR1cm4gY2FzZXNfdG9fcnVuCisKKworICAgIGRlZiBydW5fYWxsX2Nhc2VzKHNlbGYpOgorICAgICAgICBjYXNlc190ZW1wID0gc2VsZi5nZXRfdGVzdF9jYXNlcygpCisgICAgICAgIGZvciBjYXNlIGluIGNhc2VzX3RlbXA6CisgICAgICAgICAgICBzaW5nbGVfY2FzZV9jbWQgPSAicHl0aG9uIC1tIHVuaXR0ZXN0IHRvYXN0ZXJfYXV0b21hdGlvbl90ZXN0LnRvYXN0ZXJfY2FzZXMudGVzdF8iICsgc3RyKGNhc2UpCisgICAgICAgICAgICBwcmludCBzaW5nbGVfY2FzZV9jbWQKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChzaW5nbGVfY2FzZV9jbWQsIHNoZWxsPVRydWUpCisKKyAgICBkZWYgY29sbGVjdF9sb2coc2VsZik6CisgICAgICAgICIiIgorICAgICAgICB0aGUgbG9nIGZpbGVzIGFyZSB0ZW1wb3JhcmlseSBzdG9yZWQgaW4gLi9sb2cvdG1wLy4uCisgICAgICAgIEFmdGVyIGFsbCBjYXNlcyBhcmUgZG9uZSwgdGhleSBzaG91bGQgYmUgdHJhbnNmZXJlZCB0byAuL2xvZy8kVElNRVNUQU1QLworICAgICAgICAiIiIKKyAgICAgICAgZGVmIGNvbXBsZShudW1iZXIpOgorICAgICAgICAgICAgaWYgbnVtYmVyIDwgMTA6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cigwKSArIHN0cihudW1iZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBzdHIobnVtYmVyKQorICAgICAgICBub3cgPSBzZWxmLnN0YXJ0dGltZQorICAgICAgICBub3dfc3RyID0gY29tcGxlKG5vdy50bV95ZWFyKSArIGNvbXBsZShub3cudG1fbW9uKSArIGNvbXBsZShub3cudG1fbWRheSkgKyBcCisgICAgICAgICAgICAgICAgICBjb21wbGUobm93LnRtX2hvdXIpICsgY29tcGxlKG5vdy50bV9taW4pICsgY29tcGxlKG5vdy50bV9zZWMpCisgICAgICAgIGxvZ19kaXIgPSBvcy5wYXRoLmFic3BhdGgoc3lzLnBhdGhbMF0pICsgb3Muc2VwICsgJ2xvZycgKyBvcy5zZXAgKyBub3dfc3RyCisgICAgICAgIGxvZ190bXBfZGlyID0gb3MucGF0aC5hYnNwYXRoKHN5cy5wYXRoWzBdKSArIG9zLnNlcCArICdsb2cnICsgb3Muc2VwICsgJ3RtcCcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MucmVuYW1lcyhsb2dfdG1wX2RpciwgbG9nX2RpcikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgOgorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiIENhbm5vdCBjcmVhdGUgbG9nIGRpcih0aW1lc3RhbXApICB1bmRlciBsb2csIHBsZWFzZSBjaGVjayB5b3VyIHByaXZpbGVnZSIpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0b2FzdGVyX3J1bl9hbGwoKQorCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdG9hc3RlcnVpdGVzdC90b2FzdGVyX2F1dG9tYXRpb25fdGVzdC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90b2FzdGVydWl0ZXN0L3RvYXN0ZXJfYXV0b21hdGlvbl90ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhMjA3OGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdG9hc3RlcnVpdGVzdC90b2FzdGVyX2F1dG9tYXRpb25fdGVzdC5weQpAQCAtMCwwICsxLDE4ODMgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisjIENvcHlyaWdodAorCisjIERFU0NSSVBUSU9OCisjIFRoaXMgaXMgdG9hc3RlciBhdXRvbWF0aW9uIGJhc2UgY2xhc3MgYW5kIHRlc3QgY2FzZXMgZmlsZQorCisjIEhpc3Rvcnk6CisjIDIwMTUuMDMuMDkgIGluaXRhbCB2ZXJzaW9uCisjIDIwMTUuMDMuMjMgIGFkZGluZyB0b2FzdGVyX3Rlc3QuY2ZnLCBydW5fdG9hc3RlcnRlc3QucHkgc28gd2UgY2FuIHJ1biBjYXNlIGJ5IGNhc2UgZnJvbSBvdXRzaWRlCisKKyMgQnJpZWZzOgorIyBUaGlzIGZpbGUgaXMgY29tcHJpc2VkIG9mIDMgcGFydHM6CisjIEk6ICAgY29tbW9uIHV0aWxzIGxpa2Ugc29ydGluZywgZ2V0dGluZyBhdHRyaWJ1dGUuLiBldGMKKyMgSUk6ICBiYXNlIGNsYXNzIHBhcnQsIHdoaWNoIGNvbXBsaWVzIHdpdGggdW5pdHRlc3QgZnJhbWUgd29yayBhbmQKKyMgICAgICBjb250YWlucyBjbGFzcyBzZWxlbml1bS1iYXNlZCBmdW5jdGlvbnMKKyMgSUlJOiB0ZXN0IGNhc2VzCisjICAgICAgdG8gYWRkIG5ldyBjYXNlOiBqdXN0IGltcGxlbWVudCBuZXcgdGVzdF94eHgoKSBmdW5jdGlvbiBpbiBjbGFzcyB0b2FzdGVyX2Nhc2VzCisKKyMgTk9URVMgZm9yIGNhc2VzOgorIyBjYXNlIDk0NjoKKyMgc3RlcCA2IC0gOCBuZWVkcyB0byBiZSBvYnNlcnZlZCB1c2luZyBzY3JlZW5zaG90cworIyBjYXNlIDk1NjoKKyMgc3RlcCAyIC0gMyBuZWVkcyB0byBiZSBydW4gbWFudWFsbHkKKworaW1wb3J0IHVuaXR0ZXN0LCB0aW1lLCByZSwgc3lzLCBnZXRvcHQsIG9zLCBsb2dnaW5nLCBzdHJpbmcsIGVycm5vLCBleGNlcHRpb25zCitpbXBvcnQgc2h1dGlsLCBhcmdwYXJzZSwgQ29uZmlnUGFyc2VyLCBwbGF0Zm9ybQorZnJvbSBzZWxlbml1bSBpbXBvcnQgd2ViZHJpdmVyCitmcm9tIHNlbGVuaXVtLmNvbW1vbi5leGNlcHRpb25zIGltcG9ydCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uCitmcm9tIHNlbGVuaXVtIGltcG9ydCBzZWxlbml1bQorZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIuY29tbW9uLmJ5IGltcG9ydCBCeQorZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIuY29tbW9uLmtleXMgaW1wb3J0IEtleXMKK2Zyb20gc2VsZW5pdW0ud2ViZHJpdmVyLnN1cHBvcnQudWkgaW1wb3J0IFNlbGVjdAorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUEFSVCBJOiB1dGlscyBzdHVmZiAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgTGlzdGF0dHIob2JqZWN0KToKKyAgICAiIiIKKyAgICBTZXQgb2YgbGlzdCBhdHRyaWJ1dGUuIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCB0aGUgbGlzdCBjb250ZW50IGlzLgorICAgIExhdGVyIG9uIHdlIG1heSBhZGQgbW9yZSBhdHRyaWJ1dGVzIGhlcmUuCisgICAgIiIiCisgICAgTlVMTCA9ICJudWxsIgorICAgIE5VTUJFUlMgPSAibnVtYmVycyIKKyAgICBTVFJJTkdTID0gInN0cmluZ3MiCisgICAgUEVSQ0VOVCA9ICJwZXJjZW50YWdlIgorICAgIFNJWkUgPSAic2l6ZSIKKyAgICBVTktOT1dOID0gInVua25vd24iCisKKworZGVmIGdldF9sb2dfcm9vdF9kaXIoKToKKyAgICBtYXhfZGVwdGggPSA1CisgICAgcGFyZW50X2RpciA9ICcuLi8nCisgICAgZm9yIG51bWJlciBpbiByYW5nZSgwLCBtYXhfZGVwdGgpOgorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHN5cy5wYXRoWzBdICsgb3Muc2VwICsgKG9zLnBhcmRpciArIG9zLnNlcCkqbnVtYmVyICsgJ2xvZycpOgorICAgICAgICAgICAgbG9nX3Jvb3RfZGlyID0gb3MucGF0aC5hYnNwYXRoKHN5cy5wYXRoWzBdICsgb3Muc2VwICsgKG9zLnBhcmRpciArIG9zLnNlcCkqbnVtYmVyICsgJ2xvZycpCisgICAgICAgICAgICBicmVhaworCisgICAgaWYgbnVtYmVyID09IChtYXhfZGVwdGggLSAxKToKKyAgICAgICAgcHJpbnQgJ05vIGxvZyBkaXIgZm91bmQuIFBsZWFzZSBjaGVjaycKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uCisKKyAgICByZXR1cm4gbG9nX3Jvb3RfZGlyCisKKworZGVmIG1rZGlyX3AoZGlyKToKKyAgICB0cnk6CisgICAgICAgIG9zLm1ha2VkaXJzKGRpcikKKyAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FRVhJU1QgYW5kIG9zLnBhdGguaXNkaXIoZGlyKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlCisKKworZGVmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpOgorICAgICIiIgorICAgIFRvIGRldGVybWluZSB0aGUgbGlzdCBjb250ZW50CisgICAgIiIiCisgICAgaWYgbm90IHRlc3RsaXN0OgorICAgICAgICByZXR1cm4gTGlzdGF0dHIuTlVMTAorICAgIGxpc3R0ZXN0ID0gdGVzdGxpc3RbOl0KKyAgICB0cnk6CisgICAgICAgIGxpc3R0ZXN0LnJlbW92ZSgnJykKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIHBhdHRlcm5fcGVyY2VudCA9IHJlLmNvbXBpbGUociJeKFswLTldKSsoXC4pPyhbMC05XSkqJSQiKQorICAgIHBhdHRlcm5fc2l6ZSA9IHJlLmNvbXBpbGUociJeKFswLTldKSsoXC4pPyhbMC05XSkqKCApKihLKSooTSkqKEcpKkIkIikKKyAgICBwYXR0ZXJuX251bWJlciA9IHJlLmNvbXBpbGUociJeKFswLTldKSsoXC4pPyhbMC05XSkqJCIpCisgICAgZGVmIGdldF9wYXR0ZXJuZWRfbnVtYmVyKHBhdHRlcm4sIHRsaXN0KToKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGZvciBpdGVtIGluIHRsaXN0OgorICAgICAgICAgICAgaWYgcmUuc2VhcmNoKHBhdHRlcm4sIGl0ZW0pOgorICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgcmV0dXJuIGNvdW50CisgICAgaWYgZ2V0X3BhdHRlcm5lZF9udW1iZXIocGF0dGVybl9wZXJjZW50LCBsaXN0dGVzdCkgPT0gbGVuKGxpc3R0ZXN0KToKKyAgICAgICAgcmV0dXJuIExpc3RhdHRyLlBFUkNFTlQKKyAgICBlbGlmIGdldF9wYXR0ZXJuZWRfbnVtYmVyKHBhdHRlcm5fc2l6ZSwgbGlzdHRlc3QpID09IGxlbihsaXN0dGVzdCk6CisgICAgICAgIHJldHVybiBMaXN0YXR0ci5TSVpFCisgICAgZWxpZiBnZXRfcGF0dGVybmVkX251bWJlcihwYXR0ZXJuX251bWJlciwgbGlzdHRlc3QpID09IGxlbihsaXN0dGVzdCk6CisgICAgICAgIHJldHVybiBMaXN0YXR0ci5OVU1CRVJTCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIExpc3RhdHRyLlNUUklOR1MKKworCitkZWYgaXNfbGlzdF9zZXF1ZW5jZWQodGVzdGxpc3QpOgorICAgICIiIgorICAgIEZ1bmN0aW9uIHRvIHRlbGwgaWYgbGlzdCBpcyBzZXF1ZW5jZWQKKyAgICBDdXJyZW50bHkgd2UgbWF5IGhhdmUgbGlzdCBtYWRlIHVwIG9mOiBTdHJpbmdzIDsgbnVtYmVycyA7IHBlcmNlbnRhZ2UgOyB0aW1lOyBzaXplCisgICAgRWFjaCBoYXMgcmVzcGVjdGl2ZSB3YXkgdG8gZGV0ZXJtaW5lIGlmIGl0J3Mgc2VxdWVuY2VkLgorICAgICIiIgorICAgIHRlc3RfbGlzdCA9IHRlc3RsaXN0WzpdCisgICAgdHJ5OgorICAgICAgICB0ZXN0X2xpc3QucmVtb3ZlKCcnKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBwYXNzCisKKyAgICBpZiBnZXRfbGlzdF9hdHRyKHRlc3RsaXN0KSA9PSBMaXN0YXR0ci5OVUxMIDoKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGVsaWYgZ2V0X2xpc3RfYXR0cih0ZXN0bGlzdCkgPT0gTGlzdGF0dHIuU1RSSU5HUyA6CisgICAgICAgIHJldHVybiAoc29ydGVkKHRlc3RfbGlzdCkgPT0gdGVzdF9saXN0KQorCisgICAgZWxpZiBnZXRfbGlzdF9hdHRyKHRlc3RsaXN0KSA9PSBMaXN0YXR0ci5OVU1CRVJTIDoKKyAgICAgICAgbGlzdF9udW1iZXIgPSBbXQorICAgICAgICBmb3IgaXRlbSBpbiB0ZXN0X2xpc3Q6CisgICAgICAgICAgICBsaXN0X251bWJlci5hcHBlbmQoZXZhbChpdGVtKSkKKyAgICAgICAgcmV0dXJuIChzb3J0ZWQobGlzdF9udW1iZXIpID09IGxpc3RfbnVtYmVyKQorCisgICAgZWxpZiBnZXRfbGlzdF9hdHRyKHRlc3RsaXN0KSA9PSBMaXN0YXR0ci5QRVJDRU5UIDoKKyAgICAgICAgbGlzdF9udW1iZXIgPSBbXQorICAgICAgICBmb3IgaXRlbSBpbiB0ZXN0X2xpc3Q6CisgICAgICAgICAgICBsaXN0X251bWJlci5hcHBlbmQoZXZhbChpdGVtLnN0cmlwKCclJykpKQorICAgICAgICByZXR1cm4gKHNvcnRlZChsaXN0X251bWJlcikgPT0gbGlzdF9udW1iZXIpCisKKyAgICBlbGlmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpID09IExpc3RhdHRyLlNJWkUgOgorICAgICAgICBsaXN0X251bWJlciA9IFtdCisgICAgICAgICMgY3VycmVudGx5IFNJWkUgaXMgc3BsaXR0ZWQgYnkgc3BhY2UKKyAgICAgICAgZm9yIGl0ZW0gaW4gdGVzdF9saXN0OgorICAgICAgICAgICAgaWYgaXRlbS5zcGxpdCgpWzFdLnVwcGVyKCkgPT0gIktCIjoKKyAgICAgICAgICAgICAgICBsaXN0X251bWJlci5hcHBlbmQoMTAyNCAqIGV2YWwoaXRlbS5zcGxpdCgpWzBdKSkKKyAgICAgICAgICAgIGVsaWYgaXRlbS5zcGxpdCgpWzFdLnVwcGVyKCkgPT0gIk1CIjoKKyAgICAgICAgICAgICAgICBsaXN0X251bWJlci5hcHBlbmQoMTAyNCAqIDEwMjQgKiBldmFsKGl0ZW0uc3BsaXQoKVswXSkpCisgICAgICAgICAgICBlbGlmIGl0ZW0uc3BsaXQoKVsxXS51cHBlcigpID09ICJHQiI6CisgICAgICAgICAgICAgICAgbGlzdF9udW1iZXIuYXBwZW5kKDEwMjQgKiAxMDI0ICogMTAyNCAqIGV2YWwoaXRlbS5zcGxpdCgpWzBdKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGlzdF9udW1iZXIuYXBwZW5kKGV2YWwoaXRlbS5zcGxpdCgpWzBdKSkKKyAgICAgICAgcmV0dXJuIChzb3J0ZWQobGlzdF9udW1iZXIpID09IGxpc3RfbnVtYmVyKQorCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQgJ1VucmVjb2duaXplZCBsaXN0IHR5cGUsIHBsZWFzZSBjaGVjaycKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIGlzX2xpc3RfaW52ZXJ0ZWQodGVzdGxpc3QpOgorICAgICIiIgorICAgIEZ1bmN0aW9uIHRvIHRlbGwgaWYgbGlzdCBpcyBpbnZlcnRlZAorICAgIEN1cnJlbnRseSB3ZSBtYXkgaGF2ZSBsaXN0IG1hZGUgdXAgb2Y6IFN0cmluZ3MgOyBudW1iZXJzIDsgcGVyY2VudGFnZSA7IHRpbWU7IHNpemUKKyAgICBFYWNoIGhhcyByZXNwZWN0aXZlIHdheSB0byBkZXRlcm1pbmUgaWYgaXQncyBpbnZlcnRlZC4KKyAgICAiIiIKKyAgICB0ZXN0X2xpc3QgPSB0ZXN0bGlzdFs6XQorICAgIHRyeToKKyAgICAgICAgdGVzdF9saXN0LnJlbW92ZSgnJykKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgcGFzcworCisgICAgaWYgZ2V0X2xpc3RfYXR0cih0ZXN0bGlzdCkgPT0gTGlzdGF0dHIuTlVMTCA6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBlbGlmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpID09IExpc3RhdHRyLlNUUklOR1MgOgorICAgICAgICByZXR1cm4gKHNvcnRlZCh0ZXN0X2xpc3QsIHJldmVyc2UgPSBUcnVlKSA9PSB0ZXN0X2xpc3QpCisKKyAgICBlbGlmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpID09IExpc3RhdHRyLk5VTUJFUlMgOgorICAgICAgICBsaXN0X251bWJlciA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZChldmFsKGl0ZW0pKQorICAgICAgICByZXR1cm4gKHNvcnRlZChsaXN0X251bWJlciwgcmV2ZXJzZSA9IFRydWUpID09IGxpc3RfbnVtYmVyKQorCisgICAgZWxpZiBnZXRfbGlzdF9hdHRyKHRlc3RsaXN0KSA9PSBMaXN0YXR0ci5QRVJDRU5UIDoKKyAgICAgICAgbGlzdF9udW1iZXIgPSBbXQorICAgICAgICBmb3IgaXRlbSBpbiB0ZXN0X2xpc3Q6CisgICAgICAgICAgICBsaXN0X251bWJlci5hcHBlbmQoZXZhbChpdGVtLnN0cmlwKCclJykpKQorICAgICAgICByZXR1cm4gKHNvcnRlZChsaXN0X251bWJlciwgcmV2ZXJzZSA9IFRydWUpID09IGxpc3RfbnVtYmVyKQorCisgICAgZWxpZiBnZXRfbGlzdF9hdHRyKHRlc3RsaXN0KSA9PSBMaXN0YXR0ci5TSVpFIDoKKyAgICAgICAgbGlzdF9udW1iZXIgPSBbXQorICAgICAgICAjIGN1cnJlbnRseSBTSVpFIGlzIHNwbGl0dGVkIGJ5IHNwYWNlLiBzdWNoIGFzIDAgQjsgMSBLQjsgMiBNQgorICAgICAgICBmb3IgaXRlbSBpbiB0ZXN0X2xpc3Q6CisgICAgICAgICAgICBpZiBpdGVtLnNwbGl0KClbMV0udXBwZXIoKSA9PSAiS0IiOgorICAgICAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZCgxMDI0ICogZXZhbChpdGVtLnNwbGl0KClbMF0pKQorICAgICAgICAgICAgZWxpZiBpdGVtLnNwbGl0KClbMV0udXBwZXIoKSA9PSAiTUIiOgorICAgICAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZCgxMDI0ICogMTAyNCAqIGV2YWwoaXRlbS5zcGxpdCgpWzBdKSkKKyAgICAgICAgICAgIGVsaWYgaXRlbS5zcGxpdCgpWzFdLnVwcGVyKCkgPT0gIkdCIjoKKyAgICAgICAgICAgICAgICBsaXN0X251bWJlci5hcHBlbmQoMTAyNCAqIDEwMjQgKiAxMDI0ICogZXZhbChpdGVtLnNwbGl0KClbMF0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsaXN0X251bWJlci5hcHBlbmQoZXZhbChpdGVtLnNwbGl0KClbMF0pKQorICAgICAgICByZXR1cm4gKHNvcnRlZChsaXN0X251bWJlciwgcmV2ZXJzZSA9IFRydWUpID09IGxpc3RfbnVtYmVyKQorCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQgJ1VucmVjb2duaXplZCBsaXN0IHR5cGUsIHBsZWFzZSBjaGVjaycKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2RlZiByZXBsYWNlX2ZpbGVfY29udGVudChmaWxlbmFtZSwgaXRlbSwgb3B0aW9uKToKKyAgICBmID0gb3BlbihmaWxlbmFtZSkKKyAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICBmLmNsb3NlKCkKKyAgICBvdXRwdXQgPSBvcGVuKGZpbGVuYW1lLCAndycpCisgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aChpdGVtKToKKyAgICAgICAgICAgIG91dHB1dC53cml0ZShpdGVtICsgIiA9ICciICsgb3B0aW9uICsgIidcbiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRwdXQud3JpdGUobGluZSkKKyAgICBvdXRwdXQuY2xvc2UoKQorCitkZWYgZXh0cmFjdF9udW1iZXJfZnJvbV9zdHJpbmcocyk6CisgICAgIiIiCisgICAgZXh0cmFjdCB0aGUgbnVtYmVycyBpbiBhIHN0cmluZy4gcmV0dXJuIHR5cGUgaXMgJ2xpc3QnCisgICAgIiIiCisgICAgcmV0dXJuIHJlLmZpbmRhbGwocicoWzAtOV0rKScsIHMpCisKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBBUlQgSUk6IGJhc2UgY2xhc3MgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NsYXNzIHRvYXN0ZXJfY2FzZXNfYmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2NyZWVuc2hvdF9zZXF1ZW5jZSA9IDEKKyAgICAgICAgc2VsZi52ZXJpZmljYXRpb25FcnJvcnMgPSBbXQorICAgICAgICBzZWxmLmFjY2VwdF9uZXh0X2FsZXJ0ID0gVHJ1ZQorICAgICAgICBzZWxmLmhvc3Rfb3MgPSBwbGF0Zm9ybS5zeXN0ZW0oKS5sb3dlcigpCisgICAgICAgIHNlbGYucGFyc2VyID0gQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXIoKQorICAgICAgICBjb25maWdzID0gc2VsZi5wYXJzZXIucmVhZCgndG9hc3Rlcl90ZXN0LmNmZycpCisgICAgICAgIHNlbGYuYmFzZV91cmwgPSBldmFsKHNlbGYucGFyc2VyLmdldCgndG9hc3Rlcl90ZXN0XycgKyBzZWxmLmhvc3Rfb3MsICd0b2FzdGVyX3VybCcpKQorCisgICAgICAgICMgY3JlYXRlIGxvZyBkaXIgLiBDdXJyZW50bHkgLCB3ZSBwdXQgbG9nIGZpbGVzIGluIGxvZy90bXAuIEFmdGVyIGFsbAorICAgICAgICAjIHRlc3QgY2FzZXMgYXJlIGRvbmUsIG1vdmUgdGhlbSB0byBsb2cvJGRhdGV0aW1lIGRpcgorICAgICAgICBzZWxmLmxvZ190bXBfZGlyID0gb3MucGF0aC5hYnNwYXRoKHN5cy5wYXRoWzBdKSArIG9zLnNlcCArICdsb2cnICsgb3Muc2VwICsgJ3RtcCcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWtkaXJfcChzZWxmLmxvZ190bXBfZGlyKQorICAgICAgICBleGNlcHQgT1NFcnJvciA6CisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCIlKGFzY3RpbWUpcyBDYW5ub3QgY3JlYXRlIHRtcCBkaXIgdW5kZXIgbG9nLCBwbGVhc2UgY2hlY2sgeW91ciBwcml2aWxlZ2UiKQorICAgICAgICBzZWxmLmxvZyA9IHNlbGYubG9nZ2VyX2NyZWF0ZSgpCisgICAgICAgICMgZHJpdmVyIHNldHVwCisgICAgICAgIHNlbGYuc2V0dXBfYnJvd3NlcigpCisKKyAgICBkZWYgbG9nZ2VyX2NyZWF0ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIHdlIHVzZSByb290IGxvZ2dlciBmb3IgZXZlcnkgdGVzdGNhc2UuCisgICAgICAgIFRoZSByZWFzb24gd2h5IHdlIGRvbid0IHVzZSBUT0FTVEVSWFhYX2xvZ2dlciBpcyB0byBhdm9pZCBzZXR0aW5nIHJlc3BlY3RpdmUgbGV2ZWwgZm9yCisgICAgICAgIHJvb3QgbG9nZ2VyIGFuZCBUT0FTVEVSWFhYX2xvZ2dlcgorICAgICAgICBUbyBCZSBEaXNjdXNzZWQKKyAgICAgICAgIiIiCisgICAgICAgIGxvZ19sZXZlbF9kaWN0ID0geydDUklUSUNBTCc6bG9nZ2luZy5DUklUSUNBTCwgJ0VSUk9SJzpsb2dnaW5nLkVSUk9SLCAnV0FSTklORyc6bG9nZ2luZy5XQVJOSU5HLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICdJTkZPJzpsb2dnaW5nLklORk8sICdERUJVRyc6bG9nZ2luZy5ERUJVRywgJ05PVFNFVCc6bG9nZ2luZy5OT1RTRVR9CisgICAgICAgIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyMgICAgICAgIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdUT0FTVEVSXycgKyBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5sb2dnaW5nX2xldmVsID0gZXZhbChzZWxmLnBhcnNlci5nZXQoJ3RvYXN0ZXJfdGVzdF8nICsgc2VsZi5ob3N0X29zLCAnbG9nZ2luZ19sZXZlbCcpKQorICAgICAgICBrZXkgPSBzZWxmLmxvZ2dpbmdfbGV2ZWwudXBwZXIoKQorICAgICAgICBsb2cuc2V0TGV2ZWwobG9nX2xldmVsX2RpY3Rba2V5XSkKKyAgICAgICAgZmggPSBsb2dnaW5nLkZpbGVIYW5kbGVyKGZpbGVuYW1lPXNlbGYubG9nX3RtcF9kaXIgKyBvcy5zZXAgKyAnY2FzZV9hbGwnICsgJy5sb2cnLCBtb2RlPSdhJykKKyAgICAgICAgY2ggPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZG91dCkKKyAgICAgICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUocGF0aG5hbWUpcyAtICUobGluZW5vKWQgLSAlKGFzY3RpbWUpcyBcbiAgXAorICAgICAgICAgICAgICUobmFtZSlzIC0gJShsZXZlbG5hbWUpcyAtICUobWVzc2FnZSlzJykKKyAgICAgICAgZmguc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICAgICAgY2guc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICAgICAgbG9nLmFkZEhhbmRsZXIoZmgpCisgICAgICAgIGxvZy5hZGRIYW5kbGVyKGNoKQorICAgICAgICByZXR1cm4gbG9nCisKKworICAgIGRlZiBzZXR1cF9icm93c2VyKHNlbGYsICpicm93c2VyX3BhdGgpOgorICAgICAgICBzZWxmLmJyb3dzZXIgPSBldmFsKHNlbGYucGFyc2VyLmdldCgndG9hc3Rlcl90ZXN0XycgKyBzZWxmLmhvc3Rfb3MsICd0ZXN0X2Jyb3dzZXInKSkKKyAgICAgICAgcHJpbnQgc2VsZi5icm93c2VyCisgICAgICAgIGlmIHNlbGYuYnJvd3NlciA9PSAiZmlyZWZveCI6CisgICAgICAgICAgICBkcml2ZXIgPSB3ZWJkcml2ZXIuRmlyZWZveCgpCisgICAgICAgIGVsaWYgc2VsZi5icm93c2VyID09ICJjaHJvbWUiOgorICAgICAgICAgICAgZHJpdmVyID0gd2ViZHJpdmVyLkNocm9tZSgpCisgICAgICAgIGVsaWYgc2VsZi5icm93c2VyID09ICJpZSI6CisgICAgICAgICAgICBkcml2ZXIgPSB3ZWJkcml2ZXIuSWUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZHJpdmVyID0gTm9uZQorICAgICAgICAgICAgcHJpbnQgInVucmVjb2duaXplZCBicm93c2VyIHR5cGUsIHBsZWFzZSBjaGVjayIKKyAgICAgICAgc2VsZi5kcml2ZXIgPSBkcml2ZXIKKyAgICAgICAgc2VsZi5kcml2ZXIuaW1wbGljaXRseV93YWl0KDMwKQorICAgICAgICByZXR1cm4gc2VsZi5kcml2ZXIKKworCisgICAgZGVmIHNhdmVfc2NyZWVuc2hvdChzZWxmLCAgKipsb2dfYXJncyk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2F2ZSBzY3JlZW4gZWl0aGVyIGJ5IG9zIGludGVyZmFjZSBvciBzZWxlbml1bSBpbnRlcmZhY2UuCisgICAgICAgIEhvdyB0byB1c2U6CisgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZSA9ICduYXRpdmUnLydzZWxlbml1bScsIGxvZ19zdWJfZGlyID0gJ3h4eCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF9uYW1lID0gJ3N0ZXB4JykKKyAgICAgICAgd2hlcmUgbmF0aXZlIG1lYW5zIHNjcmVlbnNob3QgZnVuYyBwcm92aWRlZCBieSBPUywKKyAgICAgICAgc2VsZW5pdW0gbWVhbnMgc2NyZWVuc2hvdCBmdW5jIHByb3ZpZGVkIGJ5IHNlbGVuaXVtIHdlYmRyaXZlcgorICAgICAgICAiIiIKKyAgICAgICAgdHlwZXMgPSBbbG9nX2FyZ3MuZ2V0KCdzY3JlZW5zaG90X3R5cGUnKV0KKyAgICAgICAgIyB3aGVuIG5vIHNjcmVlbnNob3RfdHlwZSBpcyBzcGVjaWZpZWQKKyAgICAgICAgaWYgdHlwZXMgPT0gW05vbmVdOgorICAgICAgICAgICAgdHlwZXMgPSBbJ25hdGl2ZScsICdzZWxlbml1bSddCisgICAgICAgICMgbm9ybWFsbHkgYXBwZW5kX25hbWUgaXMgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIHN0ZXAuLgorICAgICAgICBhZGRfbmFtZSA9IGxvZ19hcmdzLmdldCgnYXBwZW5kX25hbWUnKQorICAgICAgICBpZiBub3QgYWRkX25hbWU6CisgICAgICAgICAgICBhZGRfbmFtZSA9ICctJworICAgICAgICAjIG5vcm1hbGx5IHRoZXJlJ3Mgbm8gbmVlZCB0byBzcGVjaWZ5IHN1Yl9kaXIKKyAgICAgICAgc3ViX2RpciA9IGxvZ19hcmdzLmdldCgnbG9nX3N1Yl9kaXInKQorICAgICAgICBpZiBub3Qgc3ViX2RpcjoKKyAgICAgICAgICAgICMgdXNlIGNhc2V4eHggYXMgc3ViX2RpciBuYW1lCisgICAgICAgICAgICBzdWJfZGlyID0gJ2Nhc2UnICsgc3RyKHNlbGYuY2FzZV9ubykKKyAgICAgICAgZm9yIGl0ZW0gaW4gdHlwZXM6CisgICAgICAgICAgICBsb2dfZGlyID0gc2VsZi5sb2dfdG1wX2RpciArIG9zLnNlcCArIHN1Yl9kaXIKKyAgICAgICAgICAgIG1rZGlyX3AobG9nX2RpcikKKyAgICAgICAgICAgIGxvZ19wYXRoID0gbG9nX2RpciArIG9zLnNlcCArICBzZWxmLmJyb3dzZXIgKyAnLScgK1wKKyAgICAgICAgICAgICAgICAgICAgaXRlbSArICctJyArIGFkZF9uYW1lICsgJy0nICsgc3RyKHNlbGYuc2NyZWVuc2hvdF9zZXF1ZW5jZSkgKyAnLnBuZycKKyAgICAgICAgICAgIGlmIGl0ZW0gPT0gJ25hdGl2ZSc6CisgICAgICAgICAgICAgICAgb3Muc3lzdGVtKCJzY3JvdCAiICsgbG9nX3BhdGgpCisgICAgICAgICAgICBlbGlmIGl0ZW0gPT0gJ3NlbGVuaXVtJzoKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5nZXRfc2NyZWVuc2hvdF9hc19maWxlKGxvZ19wYXRoKQorICAgICAgICAgICAgc2VsZi5zY3JlZW5zaG90X3NlcXVlbmNlICs9IDEKKworICAgIGRlZiBicm93c2VyX2RlbGF5KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgY3VycmVudGx5IHRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBzb21lIGNocm9tZSB0ZXN0LgorICAgICAgICBTb21ldGltZXMgd2UgbmVlZCBhIGRlbGF5IHRvIGFjY29tcGxpc2ggc29tZSBvcGVyYXRpb24uCisgICAgICAgIEJ1dCBmb3IgZmlyZWZveCwgbW9zdGx5IHdlIGRvbid0IG5lZWQgdGhpcy4KKyAgICAgICAgVG8gYmUgZGlzY3Vzc2VkCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmJyb3dzZXIgPT0gImNocm9tZSI6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgIHJldHVybgorCisKKyMgdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgY29udGFpbmVkIGluIFdlYkRyaXZlciBjbGFzcy4uCisgICAgZGVmIGZpbmRfZWxlbWVudF9ieV90ZXh0KHNlbGYsIHN0cmluZyk6CisgICAgICAgIHJldHVybiBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKlt0ZXh0KCk9JyIgKyBzdHJpbmcgKyAiJ10iKQorCisKKyAgICBkZWYgZmluZF9lbGVtZW50c19ieV90ZXh0KHNlbGYsIHN0cmluZyk6CisgICAgICAgIHJldHVybiBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvLypbdGV4dCgpPSciICsgc3RyaW5nICsgIiddIikKKworCisgICAgZGVmIGZpbmRfZWxlbWVudF9ieV90ZXh0X2luX3RhYmxlKHNlbGYsIHRhYmxlX2lkLCB0ZXh0X3N0cmluZyk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGlzIHVzZWQgdG8gc2VhcmNoIHNvbWUgY2VydGFpbiAndGV4dCcgaW4gY2VydGFpbiB0YWJsZQorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFibGVfZWxlbWVudCA9IHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQodGFibGVfaWQpCisgICAgICAgICAgICBlbGVtZW50ID0gdGFibGVfZWxlbWVudC5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKlt0ZXh0KCk9JyIgKyB0ZXh0X3N0cmluZyArICInXSIpCisgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcHJpbnQgJ25vIGVsZW1lbnQgZm91bmQnCisgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gZWxlbWVudAorCisKKyAgICBkZWYgZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZShzZWxmLCB0YWJsZV9pZCwgbGlua190ZXh0KToKKyAgICAgICAgIiIiCisgICAgICAgIEFzc3VtZSB0aGVyZSdyZSBtdWx0aXBsZSBzdWl0YWJsZSAiZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCIuCisgICAgICAgIEluIHRoaXMgY2lyY3Vtc3RhbmNlIHdlIG5lZWQgdG8gc3BlY2lmeSAidGFibGUiLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFibGVfZWxlbWVudCA9IHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQodGFibGVfaWQpCisgICAgICAgICAgICBlbGVtZW50ID0gdGFibGVfZWxlbWVudC5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KGxpbmtfdGV4dCkKKyAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBwcmludCAnbm8gZWxlbWVudCBmb3VuZCcKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBlbGVtZW50CisKKworICAgIGRlZiBmaW5kX2VsZW1lbnRzX2J5X2xpbmtfdGV4dF9pbl90YWJsZShzZWxmLCB0YWJsZV9pZCwgbGlua190ZXh0KToKKyAgICAgICAgIiIiCisgICAgICAgIFNlYXJjaCBsaW5rLXRleHQgaW4gY2VydGFpbiB0YWJsZS4gVGhpcyBoZWxwcyB0byBuYXJyb3cgZG93biBzZWFyY2ggYXJlYS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhYmxlX2VsZW1lbnQgPSBzZWxmLmdldF90YWJsZV9lbGVtZW50KHRhYmxlX2lkKQorICAgICAgICAgICAgZWxlbWVudF9saXN0ID0gdGFibGVfZWxlbWVudC5maW5kX2VsZW1lbnRzX2J5X2xpbmtfdGV4dChsaW5rX3RleHQpCisgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcHJpbnQgJ25vIGVsZW1lbnQgZm91bmQnCisgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gZWxlbWVudF9saXN0CisKKworICAgIGRlZiBmaW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHRfaW5fdGFibGUoc2VsZiwgdGFibGVfaWQsIGxpbmtfdGV4dCk6CisgICAgICAgICIiIgorICAgICAgICBTZWFyY2ggZWxlbWVudCBieSBwYXJ0aWFsIGxpbmsgdGV4dCBpbiBjZXJ0YWluIHRhYmxlLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFibGVfZWxlbWVudCA9IHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQodGFibGVfaWQpCisgICAgICAgICAgICBlbGVtZW50ID0gdGFibGVfZWxlbWVudC5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQobGlua190ZXh0KQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQKKyAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBwcmludCAnbm8gZWxlbWVudCBmb3VuZCcKKyAgICAgICAgICAgIHJhaXNlCisKKworICAgIGRlZiBmaW5kX2VsZW1lbnRzX2J5X3BhcnRpYWxfbGlua190ZXh0X2luX3RhYmxlKHNlbGYsIHRhYmxlX2lkLCBsaW5rX3RleHQpOgorICAgICAgICAiIiIKKyAgICAgICAgQXNzdW1lIHRoZXJlJ3JlIG11bHRpcGxlIHN1aXRhYmxlICJmaW5kX3BhcnRpYWxfZWxlbWVudF9ieV9saW5rX3RleHQiLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFibGVfZWxlbWVudCA9IHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQodGFibGVfaWQpCisgICAgICAgICAgICBlbGVtZW50X2xpc3QgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudHNfYnlfcGFydGlhbF9saW5rX3RleHQobGlua190ZXh0KQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRfbGlzdAorICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHByaW50ICdubyBlbGVtZW50IGZvdW5kJworICAgICAgICAgICAgcmFpc2UKKworCisgICAgZGVmIGZpbmRfZWxlbWVudF9ieV94cGF0aF9pbl90YWJsZShzZWxmLCB0YWJsZV9pZCwgeHBhdGgpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBoZWxwcyB0byBuYXJyb3cgZG93biBzZWFyY2ggYXJlYS4gRXNwZWNpYWxseSB1c2VmdWwgd2hlbiBkZWFsaW5nIHdpdGggcG9wLXVwIGZvcm0uCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YWJsZV9lbGVtZW50ID0gc2VsZi5nZXRfdGFibGVfZWxlbWVudCh0YWJsZV9pZCkKKyAgICAgICAgICAgIGVsZW1lbnQgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudF9ieV94cGF0aCh4cGF0aCkKKyAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBwcmludCAnbm8gZWxlbWVudCBmb3VuZCcKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBlbGVtZW50CisKKworICAgIGRlZiBmaW5kX2VsZW1lbnRzX2J5X3hwYXRoX2luX3RhYmxlKHNlbGYsIHRhYmxlX2lkLCB4cGF0aCk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGhlbHBzIHRvIG5hcnJvdyBkb3duIHNlYXJjaCBhcmVhLiBFc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIGRlYWxpbmcgd2l0aCBwb3AtdXAgZm9ybS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhYmxlX2VsZW1lbnQgPSBzZWxmLmdldF90YWJsZV9lbGVtZW50KHRhYmxlX2lkKQorICAgICAgICAgICAgZWxlbWVudF9saXN0ID0gdGFibGVfZWxlbWVudC5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKHhwYXRoKQorICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHByaW50ICdubyBlbGVtZW50cyBmb3VuZCcKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBlbGVtZW50X2xpc3QKKworCisgICAgZGVmIHNob3J0ZXN0X3hwYXRoKHNlbGYsIHBuYW1lLCBwdmFsdWUpOgorICAgICAgICByZXR1cm4gIi8vKltAIiArIHBuYW1lICsgIj0nIiArIHB2YWx1ZSArICInXSIKKworCisjdXN1YWxseSBlbGVtZW50cyBpbiB0aGUgc2FtZSBjb2x1bW4gYXJlIHdpdGggc2FtZSBjbGFzcyBuYW1lLiBmb3IgaW5zdGFuY2U6IGNsYXNzPSJvdXRjb21lIiAuVEJECisgICAgZGVmIGdldF90YWJsZV9jb2x1bW5fdGV4dChzZWxmLCBhdHRyX25hbWUsIGF0dHJfdmFsdWUpOgorICAgICAgICBjX3hwYXRoID0gc2VsZi5zaG9ydGVzdF94cGF0aChhdHRyX25hbWUsIGF0dHJfdmFsdWUpCisgICAgICAgIGVsZW1lbnRzID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aChjX3hwYXRoKQorICAgICAgICBjX2xpc3QgPSBbXQorICAgICAgICBmb3IgZWxlbWVudCBpbiBlbGVtZW50czoKKyAgICAgICAgICAgIGNfbGlzdC5hcHBlbmQoZWxlbWVudC50ZXh0KQorICAgICAgICByZXR1cm4gY19saXN0CisKKworICAgIGRlZiBnZXRfdGFibGVfY29sdW1uX3RleHRfYnlfY29sdW1uX251bWJlcihzZWxmLCB0YWJsZV9pZCwgY29sdW1uX251bWJlcik6CisgICAgICAgIGNfeHBhdGggPSAiLy8qW0BpZD0nIiArIHRhYmxlX2lkICsgIiddLy90ZFsiICsgc3RyKGNvbHVtbl9udW1iZXIpICsgIl0iCisgICAgICAgIGVsZW1lbnRzID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aChjX3hwYXRoKQorICAgICAgICBjX2xpc3QgPSBbXQorICAgICAgICBmb3IgZWxlbWVudCBpbiBlbGVtZW50czoKKyAgICAgICAgICAgIGNfbGlzdC5hcHBlbmQoZWxlbWVudC50ZXh0KQorICAgICAgICByZXR1cm4gY19saXN0CisKKworICAgIGRlZiBnZXRfdGFibGVfaGVhZF90ZXh0KHNlbGYsICp0YWJsZV9pZCk6Cisjbm93IHRhYmxlX2lkIGlzIGEgdHVwbGUuLi4KKyAgICAgICAgaWYgdGFibGVfaWQ6CisgICAgICAgICAgICB0aGVhZF94cGF0aCA9ICIvLypbQGlkPSciICsgdGFibGVfaWRbMF0gKyAiJ10vL3RoZWFkLy90aFt0ZXh0KCldIgorICAgICAgICAgICAgZWxlbWVudHMgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKHRoZWFkX3hwYXRoKQorICAgICAgICAgICAgY19saXN0ID0gW10KKyAgICAgICAgICAgIGZvciBlbGVtZW50IGluIGVsZW1lbnRzOgorICAgICAgICAgICAgICAgIGlmIGVsZW1lbnQudGV4dDoKKyAgICAgICAgICAgICAgICAgICAgY19saXN0LmFwcGVuZChlbGVtZW50LnRleHQpCisgICAgICAgICAgICByZXR1cm4gY19saXN0CisjZGVmYXVsdCB0YWJsZSBvbiBwYWdlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLyovdGFibGUvdGhlYWQiKS50ZXh0CisKKworCisgICAgZGVmIGdldF90YWJsZV9lbGVtZW50KHNlbGYsIHRhYmxlX2lkLCAqY29vcmRpbmF0ZSk6CisgICAgICAgIGlmIGxlbihjb29yZGluYXRlKSA9PSAwOgorI3JldHVybiB3aG9sZS10YWJsZSBlbGVtZW50CisgICAgICAgICAgICBlbGVtZW50X3hwYXRoID0gIi8vKltAaWQ9JyIgKyB0YWJsZV9pZCArICInXSIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBlbGVtZW50ID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKGVsZW1lbnRfeHBhdGgpCisgICAgICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQKKyAgICAgICAgcm93ID0gY29vcmRpbmF0ZVswXQorCisgICAgICAgIGlmIGxlbihjb29yZGluYXRlKSA9PSAxOgorI3JldHVybiB3aG9sZS1yb3cgZWxlbWVudAorICAgICAgICAgICAgZWxlbWVudF94cGF0aCA9ICIvLypbQGlkPSciICsgdGFibGVfaWQgKyAiJ10vdGJvZHkvdHJbIiArIHN0cihyb3cpICsgIl0iCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZWxlbWVudCA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aChlbGVtZW50X3hwYXRoKQorICAgICAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudAorI25vdyB3ZSBhcmUgbG9va2luZyBmb3IgYW4gZWxlbWVudCB3aXRoIHNwZWNpZmllZCBYIGFuZCBZCisgICAgICAgIGNvbHVtbiA9IGNvb3JkaW5hdGVbMV0KKworICAgICAgICBlbGVtZW50X3hwYXRoID0gIi8vKltAaWQ9JyIgKyB0YWJsZV9pZCArICInXS90Ym9keS90clsiICsgc3RyKHJvdykgKyAiXS90ZFsiICsgc3RyKGNvbHVtbikgKyAiXSIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZWxlbWVudCA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aChlbGVtZW50X3hwYXRoKQorICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gZWxlbWVudAorCisKKyAgICBkZWYgZ2V0X3RhYmxlX2RhdGEoc2VsZiwgdGFibGVfaWQsIHJvd19jb3VudCwgY29sdW1uX2NvdW50KToKKyAgICAgICAgcm93ID0gMQorICAgICAgICBMaXN0cyA9IFtdCisgICAgICAgIHdoaWxlIHJvdyA8PSByb3dfY291bnQ6CisgICAgICAgICAgICBjb2x1bW4gPSAxCisgICAgICAgICAgICByb3dfY29udGVudD1bXQorICAgICAgICAgICAgd2hpbGUgY29sdW1uIDw9IGNvbHVtbl9jb3VudDoKKyAgICAgICAgICAgICAgICBzPSAiLy8qW0BpZD0nIiArIHRhYmxlX2lkICsgIiddL3Rib2R5L3RyWyIgKyBzdHIocm93KSArIl0vdGRbIiArIHN0cihjb2x1bW4pICsgIl0iCisgICAgICAgICAgICAgICAgdiA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aChzKS50ZXh0CisgICAgICAgICAgICAgICAgcm93X2NvbnRlbnQuYXBwZW5kKHYpCisgICAgICAgICAgICAgICAgY29sdW1uID0gY29sdW1uICsgMQorICAgICAgICAgICAgICAgIHByaW50KCJyb3dfY29udGVudD0iLHJvd19jb250ZW50KQorICAgICAgICAgICAgTGlzdHMuZXh0ZW5kKHJvd19jb250ZW50KQorICAgICAgICAgICAgcHJpbnQgTGlzdHNbcm93LTFdWzBdCisgICAgICAgICAgICByb3cgPSByb3cgKyAxCisgICAgICAgIHJldHVybiBMaXN0cworCisgICAgIyBUaGUgaXNfeHh4X3ByZXNlbnQgZnVuY3Rpb25zIG9ubHkgcmV0dXJucyBUcnVlL0ZhbHNlCisgICAgIyBBbGwgdGhlIGxvZyB3b3JrIGlzIGRvbmUgaW4gdGVzdCBwcm9jZWR1cmUsIHNvIHdlIGNhbiBlYXNpbHkgdHJhY2UgYmFjaworICAgICMgdXNpbmcgbG9nZ2luZworICAgIGRlZiBpc190ZXh0X3ByZXNlbnQgKHNlbGYsIHBhdHRlcm5zKToKKyAgICAgICAgZm9yIHBhdHRlcm4gaW4gcGF0dGVybnM6CisgICAgICAgICAgICBpZiBzdHIocGF0dGVybikgbm90IGluIHNlbGYuZHJpdmVyLnBhZ2Vfc291cmNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisKKyAgICBkZWYgaXNfZWxlbWVudF9wcmVzZW50KHNlbGYsIGhvdywgd2hhdCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudChob3csIHdoYXQpCisgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKworICAgIGRlZiBpc19hbGVydF9wcmVzZW50KHNlbGYpOgorICAgICAgICB0cnk6IHNlbGYuZHJpdmVyLnN3aXRjaF90b19hbGVydCgpCisgICAgICAgIGV4Y2VwdCBOb0FsZXJ0UHJlc2VudEV4Y2VwdGlvbiwgZTogcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKworICAgIGRlZiBjbG9zZV9hbGVydF9hbmRfZ2V0X2l0c190ZXh0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhbGVydCA9IHNlbGYuZHJpdmVyLnN3aXRjaF90b19hbGVydCgpCisgICAgICAgICAgICBhbGVydF90ZXh0ID0gYWxlcnQudGV4dAorICAgICAgICAgICAgaWYgc2VsZi5hY2NlcHRfbmV4dF9hbGVydDoKKyAgICAgICAgICAgICAgICBhbGVydC5hY2NlcHQoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhbGVydC5kaXNtaXNzKCkKKyAgICAgICAgICAgIHJldHVybiBhbGVydF90ZXh0CisgICAgICAgIGZpbmFsbHk6IHNlbGYuYWNjZXB0X25leHRfYWxlcnQgPSBUcnVlCisKKworICAgIGRlZiBnZXRfY2FzZV9udW1iZXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICB3aGF0IGNhc2UgYXJlIHdlIHJ1bm5pbmcgbm93CisgICAgICAgICIiIgorICAgICAgICBmdW5jbmFtZSA9IHN5cy5fZ2V0ZnJhbWUoMSkuZl9jb2RlLmNvX25hbWUKKyAgICAgICAgY2FzZW5vX3N0ciA9IGZ1bmNuYW1lLnN0cmlwKCd0ZXN0XycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNhc2VubyA9IGludChjYXNlbm9fc3RyKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHByaW50ICJnZXQgY2FzZSBudW1iZXIgZXJyb3IhIHBsZWFzZSBjaGVjayBpZiBmdW5jIG5hbWUgaXMgdGVzdF94eHgiCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIGNhc2VubworCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9nLmluZm8oJyBFTkQ6IENBU0UgJXMgbG9nIFxuXG4nICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLnF1aXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBzZWxmLnZlcmlmaWNhdGlvbkVycm9ycykKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBBUlQgSUlJOiB0ZXN0IGNhc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIHBsZWFzZSByZWZlciB0byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIGh0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy90cl9zaG93X2Nhc2UuY2dpP2Nhc2VfaWQ9eHh4ICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgTm90ZTogdG8gY29tcGx5IHdpdGggdGhlIHVuaXR0ZXN0IGZyYW1ld29yaywgd2UgY2FsbCB0aGVzZSB0ZXN0X3h4eCBmdW5jdGlvbnMKKyMgZnJvbSBydW5fdG9hc3RlcmNhc2VzLnB5IHRvIGF2b2lkIGNhbGxpbmcgc2V0VXAoKSBhbmQgdGVhckRvd24oKSBtdWx0aXBsZSB0aW1lcworCisKK2NsYXNzIHRvYXN0ZXJfY2FzZXModG9hc3Rlcl9jYXNlc19iYXNlKToKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MDEgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MDEoc2VsZik6CisgICAgICAgICMgdGhlIHJlYXNvbiB3aHkgZ2V0X2Nhc2VfbnVtYmVyIGlzIG5vdCBpbiBzZXRVcCBmdW5jdGlvbiBpcyB0aGF0CisgICAgICAgICMgb3RoZXJ3aXNlIGl0IHJldHVybnMgInNldFVwIiBpbnN0ZWFkIG9mICJ0ZXN0X3h4eCIKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgICMgb3BlbiBhbGwgY29sdW1ucworICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgYWRkaW5nIGV4cGxpY2l0bHkgd2FpdCBmb3IgY2hyb21lZHJpdmVyLi4tXy0KKyAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzdGFydGVkX29uIikuY2xpY2soKQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInRpbWUiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBkaWN0OiB7bGludCB0ZXh0IG5hbWUgOiBhY3R1YWwgY2xhc3MgbmFtZX0KKyAgICAgICAgdGFibGVfaGVhZF9kaWN0ID0geydPdXRjb21lJzonb3V0Y29tZScsICdSZWNpcGUnOid0YXJnZXQnLCAnTWFjaGluZSc6J21hY2hpbmUnLCAnU3RhcnRlZCBvbic6J3N0YXJ0ZWRfb24nLCAnQ29tcGxldGVkIG9uJzonY29tcGxldGVkX29uJywgXAorICAgICAgICAgICAgICAgICdFcnJvcnMnOidlcnJvcnNfbm8nLCAnV2FybmluZ3MnOid3YXJuaW5nc19ubycsICdUaW1lJzondGltZSd9CisgICAgICAgIGZvciBrZXkgaW4gdGFibGVfaGVhZF9kaWN0OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoa2V5KS5jbGljaygpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlcyBjYW5ub3QgYmUgZm91bmQgb24gcGFnZSIgJSBrZXkpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAjIGFmdGVyIDFzdCBjbGljaywgdGhlIGxpc3Qgc2hvdWxkIGJlIGVpdGhlciBzZXF1ZW5jZWQgb3IgaW52ZXJ0ZWQsIGJ1dCB3ZSBkb24ndCBoYXZlIGEgImRlZmF1bHQgb3JkZXIiIGhlcmUKKyAgICAgICAgICAgICMgdGhlIHBvaW50IGlzLCBhZnRlciBhbm90aGVyIGNsaWNrLCBpdCBzaG91bGQgYmUgYW5vdGhlciBvcmRlcgorICAgICAgICAgICAgaWYgaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fbGlzdCk6CisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dChrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBjb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsIHRhYmxlX2hlYWRfZGljdFtrZXldKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X3NlcXVlbmNlZChjb2x1bW5fbGlzdCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X3NlcXVlbmNlZChjb2x1bW5fbGlzdCkpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dChrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBjb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsIHRhYmxlX2hlYWRfZGljdFtrZXldKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X2ludmVydGVkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygiY2FzZSBwYXNzZWQiKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MDIgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MDIoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICAjIENvdWxkIGFkZCBtb3JlIHRlc3QgcGF0dGVybnMgaGVyZSBpbiB0aGUgZnV0dXJlLiBBbHNvLCBjb3VsZCBzZWFyY2ggc29tZSBpdGVtcyBvdGhlciB0aGFuIHRhcmdldCBjb2x1bW4gaW4gZnV0dXJlLi4KKyAgICAgICAgcGF0dGVybnMgPSBbIm1pbmltYWwiLCAic2F0byJdCisgICAgICAgIGZvciBwYXR0ZXJuIGluIHBhdHRlcm5zOgorICAgICAgICAgICAgb3JpX3RhcmdldF9jb2x1bW5fdGV4dHMgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCAidGFyZ2V0IikKKyAgICAgICAgICAgIHByaW50IG9yaV90YXJnZXRfY29sdW1uX3RleHRzCisgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuc2VuZF9rZXlzKHBhdHRlcm4pCisgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaC1idXR0b24iKS5jbGljaygpCisgICAgICAgICAgICBuZXdfdGFyZ2V0X2NvbHVtbl90ZXh0cyA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsICJ0YXJnZXQiKQorICAgICAgICAgICAgIyBpZiBub3RoaW5nIGZvdW5kLCB3ZSBzdGlsbCBjb3VudCBpdCBhcyAicGFzcyIKKyAgICAgICAgICAgIGlmIG5ld190YXJnZXRfY29sdW1uX3RleHRzOgorICAgICAgICAgICAgICAgIGZvciB0ZXh0IGluIG5ld190YXJnZXRfY29sdW1uX3RleHRzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModGV4dC5maW5kKHBhdHRlcm4pKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiaS5pY29uLXJlbW92ZSIpLmNsaWNrKCkKKyAgICAgICAgICAgIHRhcmdldF9jb2x1bW5fdGV4dHMgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCAidGFyZ2V0IikKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcmlfdGFyZ2V0X2NvbHVtbl90ZXh0cyA9PSB0YXJnZXRfY29sdW1uX3RleHRzKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MDMgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MDMoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICAjIHdoZW4gb3BlbmluZyBhIG5ldyBwYWdlLCAic3RhcnRlZF9vbiIgaXMgbm90IGRpc3BsYXllZCBieSBkZWZhdWx0CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBjdXJyZW50bHkgYWxsIHRoZSBkZWxheSBhcmUgZm9yIGNocm9tZSBkcml2ZXIgLV8tCisgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic3RhcnRlZF9vbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIHN0ZXAgNAorICAgICAgICBpdGVtcyA9IFsiT3V0Y29tZSIsICJDb21wbGV0ZWQgb24iLCAiU3RhcnRlZCBvbiIsICJGYWlsZWQgdGFza3MiLCAiRXJyb3JzIiwgIldhcm5pbmdzIl0KKyAgICAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGVtcF9lbGVtZW50ID0gc2VsZi5maW5kX2VsZW1lbnRfYnlfdGV4dF9pbl90YWJsZSgnb3RhYmxlJywgaXRlbSkKKyAgICAgICAgICAgICAgICAjIHRoaXMgaXMgaG93IHdlIGZpbmQgImZpbHRlciBpY29uIiBpbiB0aGUgc2FtZSBsZXZlbCBhcyB0ZW1wX2VsZW1lbnQod2hlcmUgImEiIG1lYW5zIGNsaWNrYWJsZSwgImkiIG1lYW5zIGljb24pCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHRlbXBfZWxlbWVudC5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi4uLy8qL2EvaVtAY2xhc3M9J2ljb24tZmlsdGVyIGZpbHRlcmVkJ10iKSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sZToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiICVzIGNhbm5vdCBiZSBmb3VuZCEgJXMiICUgKGl0ZW0sIGUpKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKFRydWUpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgIyBzdGVwIDUtNgorICAgICAgICB0ZW1wX2VsZW1lbnQgPSBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ290YWJsZScsICdPdXRjb21lJykKKyAgICAgICAgdGVtcF9lbGVtZW50LmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLi4vLyovYS9pW0BjbGFzcz0naWNvbi1maWx0ZXIgZmlsdGVyZWQnXSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgIyB0aGUgMm5kIG9wdGlvbiwgd2hhdGV2ZXIgaXQgaXMKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIoLy9pbnB1dFtAbmFtZT0nZmlsdGVyJ10pWzJdIikuY2xpY2soKQorICAgICAgICAjIGNsaWNrICJBcHBseSIgYnV0dG9uCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0nZmlsdGVyX291dGNvbWUnXS8vKlt0ZXh0KCk9J0FwcGx5J10iKS5jbGljaygpCisgICAgICAgICMgc2F2ZSBzY3JlZW4gaGVyZQorICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nc2VsZW5pdW0nLCBhcHBlbmRfbmFtZT0nc3RlcDUnKQorICAgICAgICB0ZW1wX2VsZW1lbnQgPSBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ290YWJsZScsICdDb21wbGV0ZWQgb24nKQorICAgICAgICB0ZW1wX2VsZW1lbnQuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIuLi8vKi9hL2lbQGNsYXNzPSdpY29uLWZpbHRlciBmaWx0ZXJlZCddIikuY2xpY2soKQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltAaWQ9J2ZpbHRlcl9jb21wbGV0ZWRfb24nXS8vKlt0ZXh0KCk9J0FwcGx5J10iKS5jbGljaygpCisgICAgICAgICMgc2F2ZSBzY3JlZW4gaGVyZSB0byBjb21wYXJlIHRvIHByZXZpb3VzIG9uZQorICAgICAgICAjIHBsZWFzZSBub3RlIHRoYXQgZm9yIGNocm9tZSBkcml2ZXIsIG5lZWQgYSBsaXR0bGUgYnJlYWsgYmVmb3JlIHNhdmluZworICAgICAgICAjIHNjcmVlbiBoZXJlIC1fLQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA2JykKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5jbGVhcigpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuc2VuZF9rZXlzKCJjb3JlLWltYWdlIikKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2gtYnV0dG9uIikuY2xpY2soKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MDQgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MDQoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoImNvcmUtaW1hZ2UiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIlRhc2tzIikuY2xpY2soKQorIyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiQWxsIGJ1aWxkcyIpLmNsaWNrKCkKKyMgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorICAgICAgICBzZWxmLnRhYmxlX25hbWUgPSAnb3RhYmxlJworICAgICAgICAjIFRoaXMgaXMgaG93IHdlIGZpbmQgdGhlICJkZWZhdWx0IiByb3dzLW51bWJlciEKKyAgICAgICAgcm93c19kaXNwbGF5ZWQgPSBpbnQoU2VsZWN0KHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoInNlbGVjdC5wYWdlc2l6ZSIpKS5maXJzdF9zZWxlY3RlZF9vcHRpb24udGV4dCkKKyAgICAgICAgcHJpbnQgcm93c19kaXNwbGF5ZWQKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQoc2VsZi50YWJsZV9uYW1lLCByb3dzX2Rpc3BsYXllZCkpCisgICAgICAgIHNlbGYuZmFpbElmKHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQoc2VsZi50YWJsZV9uYW1lLCByb3dzX2Rpc3BsYXllZCArIDEpKQorICAgICAgICAjIFNlYXJjaCB0ZXh0IGJveCBiYWNrZ3JvdW5kIHRleHQgaXMgIlNlYXJjaCB0YXNrcyIKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0nc2VhcmNoZm9ybSddLypbQHBsYWNlaG9sZGVyPSdTZWFyY2ggdGFza3MnXSIpKQorCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuY2xlYXIoKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLnNlbmRfa2V5cygiYnVzeWJveCIpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwNScpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImkuaWNvbi1yZW1vdmUiKS5jbGljaygpCisgICAgICAgICMgU2F2ZSBzY3JlZW4gaGVyZQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA1XzInKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiY3B1X3VzZWQiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZGlza19pbyIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJ0YXNrX2xvZyIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJyZWNpcGVfdmVyc2lvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJ0aW1lX3Rha2VuIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIFRoZSBvcGVyYXRpb24gaXMgdGhlIHNhbWUgYXMgY2FzZTkwMQorICAgICAgICAjIGRpY3Q6IHtsaW50IHRleHQgbmFtZSA6IGFjdHVhbCBjbGFzcyBuYW1lfQorICAgICAgICB0YWJsZV9oZWFkX2RpY3QgPSB7J09yZGVyJzonb3JkZXInLCAnUmVjaXBlJzoncmVjaXBlX25hbWUnLCAnVGFzayc6J3Rhc2tfbmFtZScsICdFeGVjdXRlZCc6J2V4ZWN1dGVkJywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ091dGNvbWUnOidvdXRjb21lJywgJ0NhY2hlIGF0dGVtcHQnOidjYWNoZV9hdHRlbXB0JywgJ1RpbWUgKHNlY3MpJzondGltZV90YWtlbicsICdDUFUgdXNhZ2UnOidjcHVfdXNlZCcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdEaXNrIEkvTyAobXMpJzonZGlza19pbyd9CisgICAgICAgIGZvciBrZXkgaW4gdGFibGVfaGVhZF9kaWN0OgorIyBUaGlzIGlzIHRyaWNreSBoZXJlOiB3ZSBhcmUgZG9pbmcgc28gYmVjYXVzZSB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIDEKKyMgc2FtZS1uYW1lIGxpbmtfdGV4dCBpbiBvbmUgcGFnZS4gU28gd2Ugb25seSBmaW5kIGVsZW1lbnQgaW5zaWRlIHRoZSB0YWJsZQorICAgICAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwga2V5KS5jbGljaygpCisgICAgICAgICAgICBjb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsIHRhYmxlX2hlYWRfZGljdFtrZXldKQorIyBhZnRlciAxc3QgY2xpY2ssIHRoZSBsaXN0IHNob3VsZCBiZSBlaXRoZXIgc2VxdWVuY2VkIG9yIGludmVydGVkLCBidXQgd2UgZG9uJ3QgaGF2ZSBhICJkZWZhdWx0IG9yZGVyIiBoZXJlCisjIHRoZSBwb2ludCBpcywgYWZ0ZXIgYW5vdGhlciBjbGljaywgaXQgc2hvdWxkIGJlIGFub3RoZXIgb3JkZXIKKyMgdGhlIGZpc3QgY2FzZSBpcyBzcGVjaWFsOnRoaXMgbWVhbnMgZXZlcnkgaXRlbSBpbiBjb2x1bW5fbGlzdCBpcyB0aGUgc2FtZSwgc28KKyMgYWZ0ZXIgb25lIGNsaWNrLCBlaXRoZXIgc2VxdWVuY2VkIG9yIGludmVydGVkIHdpbGwgYmUgZmluZQorICAgICAgICAgICAgaWYgKGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpIGFuZCBpc19saXN0X3NlcXVlbmNlZChjb2x1bW5fbGlzdCkpIFwKKyAgICAgICAgICAgICAgICBvciAobm90IGNvbHVtbl9saXN0KSA6CisgICAgICAgICAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwga2V5KS5jbGljaygpCisgICAgICAgICAgICAgICAgY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCB0YWJsZV9oZWFkX2RpY3Rba2V5XSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY29sdW1uX2xpc3QpIG9yIGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpKQorICAgICAgICAgICAgZWxpZiBpc19saXN0X2ludmVydGVkKGNvbHVtbl9saXN0KToKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBjb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsIHRhYmxlX2hlYWRfZGljdFtrZXldKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X3NlcXVlbmNlZChjb2x1bW5fbGlzdCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X3NlcXVlbmNlZChjb2x1bW5fbGlzdCkpCisgICAgICAgICAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwga2V5KS5jbGljaygpCisgICAgICAgICAgICAgICAgY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCB0YWJsZV9oZWFkX2RpY3Rba2V5XSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fbGlzdCkpCisjIHN0ZXAgOC0xMAorICAgICAgICAjIGZpbHRlciBkaWN0OiB7bGluayB0ZXh0IG5hbWUgOiBmaWx0ZXIgdGFibGUgbmFtZSBpbiB4cGF0aH0KKyAgICAgICAgZmlsdGVyX2RpY3QgPSB7J0V4ZWN1dGVkJzonZmlsdGVyX2V4ZWN1dGVkJywgJ091dGNvbWUnOidmaWx0ZXJfb3V0Y29tZScsICdDYWNoZSBhdHRlbXB0JzonZmlsdGVyX2NhY2hlX2F0dGVtcHQnfQorICAgICAgICBmb3Iga2V5IGluIGZpbHRlcl9kaWN0OgorICAgICAgICAgICAgdGVtcF9lbGVtZW50ID0gc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwga2V5KQorICAgICAgICAgICAgIyBmaW5kIHRoZSBmaWx0ZXIgaWNvbiBiZXNpZGVzIGl0LgorICAgICAgICAgICAgIyBBbmQgaGVyZSB3ZSBtdXN0IGhhdmUgYnJlYWsgKDEgc2VjKSB0byBnZXQgdGhlIHBvcHVwIHN0dWZmCisgICAgICAgICAgICB0ZW1wX2VsZW1lbnQuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIuLi8vKltAY2xhc3M9J2ljb24tZmlsdGVyIGZpbHRlcmVkJ10iKS5jbGljaygpCisgICAgICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICAgICAgYXZhaWxfb3B0aW9ucyA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoIi8vKltAaWQ9JyIgKyBmaWx0ZXJfZGljdFtrZXldICsgIiddLy8qW0BuYW1lPSdmaWx0ZXInXVtub3QoQGRpc2FibGVkKV0iKQorICAgICAgICAgICAgZm9yIG51bWJlciBpbiByYW5nZSgwLCBsZW4oYXZhaWxfb3B0aW9ucykpOgorICAgICAgICAgICAgICAgIGF2YWlsX29wdGlvbnNbbnVtYmVyXS5jbGljaygpCisgICAgICAgICAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgICAgICAgICAjIGNsaWNrICJBcHBseSIKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltAaWQ9JyIgKyBmaWx0ZXJfZGljdFtrZXldICArICInXS8vKltAdHlwZT0nc3VibWl0J10iKS5jbGljaygpCisgICAgICAgICAgICAgICAgIyBpbnNlcnQgc2NyZWVuIGNhcHR1cmUgaGVyZQorICAgICAgICAgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgICAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwOCcpCisgICAgICAgICAgICAgICAgIyBhZnRlciB0aGUgbGFzdCBvcHRpb24gd2FzIGNsaWNrZWQsIHdlIGRvbid0IG5lZWQgb3BlcmF0aW9uIGJlbG93IGFueW1vcmUKKyAgICAgICAgICAgICAgICBpZiBudW1iZXIgPCBsZW4oYXZhaWxfb3B0aW9ucyktMToKKyAgICAgICAgICAgICAgICAgICAgIHRlbXBfZWxlbWVudCA9IHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZShzZWxmLnRhYmxlX25hbWUsIGtleSkKKyAgICAgICAgICAgICAgICAgICAgIHRlbXBfZWxlbWVudC5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi4uLy8qW0BjbGFzcz0naWNvbi1maWx0ZXIgZmlsdGVyZWQnXSIpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICAgICAgIGF2YWlsX29wdGlvbnMgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvLypbQGlkPSciICsgZmlsdGVyX2RpY3Rba2V5XSArICInXS8vKltAbmFtZT0nZmlsdGVyJ11bbm90KEBkaXNhYmxlZCldIikKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisjIHN0ZXAgMTEKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydvcmRlcicsICd0YXNrX25hbWUnLCAnZXhlY3V0ZWQnLCAnb3V0Y29tZScsICdyZWNpcGVfbmFtZScsICdyZWNpcGVfdmVyc2lvbiddOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X3hwYXRoX2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwgIi4vdGJvZHkvdHJbMV0vKltAY2xhc3M9JyIgKyBpdGVtICsgIiddL2EiKS5jbGljaygpCisgICAgICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICMgbGV0IGl0IGdvLi4uCisgICAgICAgICAgICAgICAgcHJpbnQgJ25vIGl0ZW0gaW4gdGhlIGNvbHVtJyArIGl0ZW0KKyAgICAgICAgICAgICMgaW5zZXJ0IHNjcmVlbiBzaG90IGhlcmUKKyAgICAgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nc2VsZW5pdW0nLCBhcHBlbmRfbmFtZT0nc3RlcDExJykKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorIyBzdGVwIDEyLTE0CisgICAgICAgICMgYWJvdXQgdGVzdF9kaWN0OiBwbGVhc2UgcmVmZXIgdG8gdGVzdGNhc2UgOTA0IHJlcXVpcmVtZW50IHN0ZXAgMTItMTQKKyAgICAgICAgdGVzdF9kaWN0ID0geworICAgICAgICAgICAgJ1RpbWUnOnsKKyAgICAgICAgICAgICAgICAnY2xhc3MnOid0aW1lX3Rha2VuJywKKyAgICAgICAgICAgICAgICAnY2hlY2tfaGVhZF9saXN0JzpbJ1JlY2lwZScsICdUYXNrJywgJ0V4ZWN1dGVkJywgJ091dGNvbWUnLCAnVGltZSAoc2VjcyknXSwKKyAgICAgICAgICAgICAgICAnY2hlY2tfY29sdW1uX2xpc3QnOlsnY3B1X3VzZWQnLCAnY2FjaGVfYXR0ZW1wdCcsICdkaXNrX2lvJywgJ29yZGVyJywgJ3JlY2lwZV92ZXJzaW9uJ10KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAnQ1BVIHVzYWdlJzp7CisgICAgICAgICAgICAgICAgJ2NsYXNzJzonY3B1X3VzZWQnLAorICAgICAgICAgICAgICAgICdjaGVja19oZWFkX2xpc3QnOlsnUmVjaXBlJywgJ1Rhc2snLCAnRXhlY3V0ZWQnLCAnT3V0Y29tZScsICdDUFUgdXNhZ2UnXSwKKyAgICAgICAgICAgICAgICAnY2hlY2tfY29sdW1uX2xpc3QnOlsnY2FjaGVfYXR0ZW1wdCcsICdkaXNrX2lvJywgJ29yZGVyJywgJ3JlY2lwZV92ZXJzaW9uJywgJ3RpbWVfdGFrZW4nXQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdEaXNrIEkvTyc6eworICAgICAgICAgICAgICAgICdjbGFzcyc6J2Rpc2tfaW8nLAorICAgICAgICAgICAgICAgICdjaGVja19oZWFkX2xpc3QnOlsnUmVjaXBlJywgJ1Rhc2snLCAnRXhlY3V0ZWQnLCAnT3V0Y29tZScsICdEaXNrIEkvTyAobXMpJ10sCisgICAgICAgICAgICAgICAgJ2NoZWNrX2NvbHVtbl9saXN0JzpbJ2NwdV91c2VkJywgJ2NhY2hlX2F0dGVtcHQnLCAnb3JkZXInLCAncmVjaXBlX3ZlcnNpb24nLCAndGltZV90YWtlbiddCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIGtleSBpbiB0ZXN0X2RpY3Q6CisgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ2NvcmUtaW1hZ2UnKS5jbGljaygpCisgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsIGtleSkuY2xpY2soKQorICAgICAgICAgICAgaGVhZF9saXN0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCdvdGFibGUnKQorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gdGVzdF9kaWN0W2tleV1bJ2NoZWNrX2hlYWRfbGlzdCddOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpdGVtIGluIGhlYWRfbGlzdCkKKyAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoJ2NsYXNzJywgdGVzdF9kaWN0W2tleV1bJ2NsYXNzJ10pCisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fbGlzdCkpCisKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgICAgIGZvciBpdGVtMiBpbiB0ZXN0X2RpY3Rba2V5XVsnY2hlY2tfY29sdW1uX2xpc3QnXToKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoaXRlbTIpLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgICAgICMgVEJEOiBzYXZlIHNjcmVlbiBoZXJlCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDkwNiAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0XzkwNihzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoImNvcmUtaW1hZ2UtbWluaW1hbCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCduYXYnLCAnUGFja2FnZXMnKS5jbGljaygpCisgICAgICAgICMgZmluZCAiYmFzaCIgaW4gZmlyc3QgY29sdW1uIChQYWNrYWdlcykKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGlkPSdvdGFibGUnXS8vdGRbMV0vLypbdGV4dCgpPSdiYXNoJ10iKS5jbGljaygpCisgICAgICAgICMgc2F2ZSBzY2VlbiBoZXJlIHRvIG9ic2VydmUuLi4KKyMgc3RlcCA2CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiR2VuZXJhdGVkIGZpbGVzIikuY2xpY2soKQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIGZvciBpdGVtIGluIFsnRmlsZScsICdTaXplJ106CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXRlbSBpbiBoZWFkX2xpc3QpCisgICAgICAgIGNfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCdjbGFzcycsICdwYXRoJykKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNfbGlzdCkpCisjIHN0ZXAgNworICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlJ1bnRpbWUgZGVwZW5kZW5jaWVzIikuY2xpY2soKQorICAgICAgICAjIHNhdmUgc2NlZW4gaGVyZSB0byBvYnNlcnZlLi4uCisgICAgICAgICMgbm90ZSB0aGF0IGhlcmUgdGFibGUgbmFtZSBpcyBub3QgJ290YWJsZScKKyAgICAgICAgaGVhZF9saXN0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCdkZXBlbmRlbmNpZXMnKQorICAgICAgICBmb3IgaXRlbSBpbiBbJ1BhY2thZ2UnLCAnVmVyc2lvbicsICdTaXplJ106CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXRlbSBpbiBoZWFkX2xpc3QpCisgICAgICAgIGNfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0X2J5X2NvbHVtbl9udW1iZXIoJ2RlcGVuZGVuY2llcycsIDEpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X3NlcXVlbmNlZChjX2xpc3QpKQorICAgICAgICB0ZXh0cyA9IFsnU2l6ZScsICdMaWNlbnNlJywgJ1JlY2lwZScsICdSZWNpcGUgdmVyc2lvbicsICdMYXllcicsIFwKKyAgICAgICAgICAgICAgICAgICAgICdMYXllciBicmFuY2gnLCAnTGF5ZXIgY29tbWl0JywgJ0xheWVyIGRpcmVjdG9yeSddCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZWxmLmlzX3RleHRfcHJlc2VudCh0ZXh0cykpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDkxMCAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0XzkxMChzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgaW1hZ2VfdHlwZT0iY29yZS1pbWFnZS1taW5pbWFsIgorICAgICAgICB0ZXN0X3BhY2thZ2UxPSJidXN5Ym94IgorICAgICAgICB0ZXN0X3BhY2thZ2UyPSJsaWIiCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KGltYWdlX3R5cGUpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiUmVjaXBlcyIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwMycpCisKKyAgICAgICAgc2VsZi50YWJsZV9uYW1lID0gJ290YWJsZScKKyAgICAgICAgIyBUaGlzIGlzIGhvdyB3ZSBmaW5kIHRoZSAiZGVmYXVsdCIgcm93cy1udW1iZXIhCisgICAgICAgIHJvd3NfZGlzcGxheWVkID0gaW50KFNlbGVjdChzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJzZWxlY3QucGFnZXNpemUiKSkuZmlyc3Rfc2VsZWN0ZWRfb3B0aW9uLnRleHQpCisgICAgICAgIHByaW50IHJvd3NfZGlzcGxheWVkCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZWxmLmdldF90YWJsZV9lbGVtZW50KHNlbGYudGFibGVfbmFtZSwgcm93c19kaXNwbGF5ZWQpKQorICAgICAgICBzZWxmLmZhaWxJZihzZWxmLmdldF90YWJsZV9lbGVtZW50KHNlbGYudGFibGVfbmFtZSwgcm93c19kaXNwbGF5ZWQgKyAxKSkKKworICAgICAgICAjIENoZWNrIHRoZSBkZWZhdWx0IHRhYmxlIGlzIHNvcnRlZCBieSBSZWNpcGUKKyAgICAgICAgdGFza3NfY29sdW1uX2NvdW50ID0gbGVuKHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoIi9odG1sL2JvZHkvZGl2WzJdL2Rpdi9kaXZbMl0vZGl2WzJdL3RhYmxlL3Rib2R5L3RyL3RkWzFdIikpCisgICAgICAgIHByaW50IHRhc2tzX2NvbHVtbl9jb3VudAorICAgICAgICBkZWZhdWx0X2NvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHRfYnlfY29sdW1uX251bWJlcihzZWxmLnRhYmxlX25hbWUsIDEpCisgICAgICAgICNwcmludCBkZWZhdWx0X2NvbHVtbl9saXN0CisKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGRlZmF1bHRfY29sdW1uX2xpc3QpKQorCisgICAgICAgICMgU2VhcmNoIHRleHQgYm94IGJhY2tncm91bmQgdGV4dCBpcyAiU2VhcmNoIHJlY2lwZXMiCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltAaWQ9J3NlYXJjaGZvcm0nXS8qW0BwbGFjZWhvbGRlcj0nU2VhcmNoIHJlY2lwZXMnXSIpKQorCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuY2xlYXIoKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLnNlbmRfa2V5cyh0ZXN0X3BhY2thZ2UxKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaC1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgU2F2ZSBzY3JlZW4gaGVyZQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA0JykKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiaS5pY29uLXJlbW92ZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwNF8yJykKKworICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZGVwZW5kc19vbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJsYXllcl92ZXJzaW9uX19icmFuY2giKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX2NvbW1pdCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJkZXBlbmRzX2J5IikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisKKyAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwgJ1JlY2lwZScpLmNsaWNrKCkKKyAgICAgICAgIyBDaGVjayB0aGUgaW52ZXJ0ZWQgdGFibGUgYnkgUmVjaXBlCisgICAgICAgICMgUmVjaXBlIGRvZXNuJ3QgaGF2ZSBjbGFzcyBuYW1lCisgICAgICAgICNpbnZlcnRlZF90YXNrc19jb2x1bW5fY291bnQgPSBsZW4oc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlsyXS9kaXZbMl0vdGFibGUvdGJvZHkvdHIvdGRbMV0iKSkKKyAgICAgICAgI3ByaW50IGludmVydGVkX3Rhc2tzX2NvbHVtbl9jb3VudAorICAgICAgICAjaW52ZXJ0ZWRfY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dF9ieV9jb2x1bW5fbnVtYmVyKHNlbGYudGFibGVfbmFtZSwgMSkKKyAgICAgICAgI3ByaW50IGludmVydGVkX2NvbHVtbl9saXN0CisKKyAgICAgICAgI3NlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiemxpYiIpLmNsaWNrKCkKKyAgICAgICAgI3NlbGYuZHJpdmVyLmJhY2soKQorICAgICAgICAjc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3RfaW52ZXJ0ZWQoaW52ZXJ0ZWRfY29sdW1uX2xpc3QpKQorICAgICAgICAjc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwgJ1JlY2lwZScpLmNsaWNrKCkKKworICAgICAgICB0YWJsZV9oZWFkX2RpY3QgPSB7J1JlY2lwZSc6J3JlY2lwZV9fbmFtZScsICdSZWNpcGUgZmlsZSc6J3JlY2lwZV9maWxlJywgJ1NlY3Rpb24nOidyZWNpcGVfc2VjdGlvbicsIFwKKyAgICAgICAgICAgICAgICAnTGljZW5zZSc6J3JlY2lwZV9saWNlbnNlJywgJ0xheWVyJzonbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUnLCBcCisgICAgICAgICAgICAgICAgJ0xheWVyIGJyYW5jaCc6J2xheWVyX3ZlcnNpb25fX2JyYW5jaCd9CisgICAgICAgIGZvciBrZXkgaW4gdGFibGVfaGVhZF9kaWN0OgorICAgICAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwga2V5KS5jbGljaygpCisgICAgICAgICAgICBjb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsIHRhYmxlX2hlYWRfZGljdFtrZXldKQorICAgICAgICAgICAgaWYgKGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpIGFuZCBpc19saXN0X3NlcXVlbmNlZChjb2x1bW5fbGlzdCkpIFwKKyAgICAgICAgICAgICAgICAgICAgb3IgKG5vdCBjb2x1bW5fbGlzdCkgOgorICAgICAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZShzZWxmLnRhYmxlX25hbWUsIGtleSkuY2xpY2soKQorICAgICAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSBvciBpc19saXN0X2ludmVydGVkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoImFjbCIpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5iYWNrKCkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY29sdW1uX2xpc3QpIG9yIGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpKQorICAgICAgICAgICAgICAgICMgU2VhcmNoIHRleHQgYm94IGJhY2tncm91bmQgdGV4dCBpcyAiU2VhcmNoIHJlY2lwZXMiCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0nc2VhcmNoZm9ybSddLypbQHBsYWNlaG9sZGVyPSdTZWFyY2ggcmVjaXBlcyddIikpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5jbGVhcigpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXModGVzdF9wYWNrYWdlMikKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaC1idXR0b24iKS5jbGljaygpCisgICAgICAgICAgICAgICAgY29sdW1uX3NlYXJjaF9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9zZWFyY2hfbGlzdCkgb3IgaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fc2VhcmNoX2xpc3QpKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImkuaWNvbi1yZW1vdmUiKS5jbGljaygpCisgICAgICAgICAgICBlbGlmIGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpOgorICAgICAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZShzZWxmLnRhYmxlX25hbWUsIGtleSkuY2xpY2soKQorICAgICAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoImFjbCIpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5iYWNrKCkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY29sdW1uX2xpc3QpKQorICAgICAgICAgICAgICAgICMgU2VhcmNoIHRleHQgYm94IGJhY2tncm91bmQgdGV4dCBpcyAiU2VhcmNoIHJlY2lwZXMiCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0nc2VhcmNoZm9ybSddLypbQHBsYWNlaG9sZGVyPSdTZWFyY2ggcmVjaXBlcyddIikpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5jbGVhcigpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXModGVzdF9wYWNrYWdlMikKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaC1idXR0b24iKS5jbGljaygpCisgICAgICAgICAgICAgICAgY29sdW1uX3NlYXJjaF9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9zZWFyY2hfbGlzdCkpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiaS5pY29uLXJlbW92ZSIpLmNsaWNrKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBjb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsIHRhYmxlX2hlYWRfZGljdFtrZXldKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X2ludmVydGVkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiYWNsIikuY2xpY2soKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJ6bGliIikuY2xpY2soKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X2ludmVydGVkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgICAgICAgICAjIFNlYXJjaCB0ZXh0IGJveCBiYWNrZ3JvdW5kIHRleHQgaXMgIlNlYXJjaCByZWNpcGVzIgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltAaWQ9J3NlYXJjaGZvcm0nXS8qW0BwbGFjZWhvbGRlcj0nU2VhcmNoIHJlY2lwZXMnXSIpKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuY2xlYXIoKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuc2VuZF9rZXlzKHRlc3RfcGFja2FnZTIpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2gtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAgICAgICAgIGNvbHVtbl9zZWFyY2hfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsIHRhYmxlX2hlYWRfZGljdFtrZXldKQorICAgICAgICAgICAgICAgICNwcmludCBjb2x1bW5fc2VhcmNoX2xpc3QKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fc2VhcmNoX2xpc3QpKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImkuaWNvbi1yZW1vdmUiKS5jbGljaygpCisKKyAgICAgICAgIyBCdWcgNTkxOQorICAgICAgICBmb3Iga2V5IGluIHRhYmxlX2hlYWRfZGljdDoKKyAgICAgICAgICAgIHByaW50IGtleQorICAgICAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwga2V5KS5jbGljaygpCisgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQodGFibGVfaGVhZF9kaWN0W2tleV0pLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgICAgICAjIEFmdGVyIGhpZGUgdGhlIGNvbHVtbiwgdGhlIGRlZmF1bHQgdGFibGUgc2hvdWxkIGJlIHNvcnRlZCBieSBSZWNpcGUKKyAgICAgICAgICAgIHRhc2tzX2NvbHVtbl9jb3VudCA9IGxlbihzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3BhcnRpYWxfbGlua190ZXh0KCJhY2wiKSkKKyAgICAgICAgICAgICNwcmludCB0YXNrc19jb2x1bW5fY291bnQKKyAgICAgICAgICAgIGRlZmF1bHRfY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dF9ieV9jb2x1bW5fbnVtYmVyKHNlbGYudGFibGVfbmFtZSwgMSkKKyAgICAgICAgICAgICNwcmludCBkZWZhdWx0X2NvbHVtbl9saXN0CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoZGVmYXVsdF9jb2x1bW5fbGlzdCkpCisKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInJlY2lwZV9maWxlIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInJlY2lwZV9zZWN0aW9uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInJlY2lwZV9saWNlbnNlIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDkxMSAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0XzkxMShzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoImNvcmUtaW1hZ2UtbWluaW1hbCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCduYXYnLCAnUmVjaXBlcycpLmNsaWNrKCkKKyMgc3RlcCAzLTUKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5jbGVhcigpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuc2VuZF9rZXlzKCJsaWIiKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaC1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgc2F2ZSBzY3JlZW4gaGVyZSBmb3Igb2JzZXJ2YXRpb24KKyAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwNScpCisjIHN0ZXAgNgorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJpLmljb24tcmVtb3ZlIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgIyB3ZSBkZWxpYmVyYXRlbHkgd2FudCAibm8gcmVzdWx0IiBoZXJlCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuc2VuZF9rZXlzKCJubyBzdWNoIGlucHV0IikKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2gtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV90ZXh0KCJTaG93IGFsbCByZWNpcGVzIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5xdWl0KCkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTEyICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTEyKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlciA9IHNlbGYuc2V0dXBfYnJvd3NlcihzZWxmKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsICdSZWNpcGVzJykuY2xpY2soKQorICAgICAgICAjIHN0ZXAgMworICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIGZvciBpdGVtIGluIFsnUmVjaXBlJywgJ1JlY2lwZSB2ZXJzaW9uJywgJ1JlY2lwZSBmaWxlJywgJ1NlY3Rpb24nLCAnTGljZW5zZScsICdMYXllciddOgorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGl0ZW0gaW4gaGVhZF9saXN0KQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJidXR0b24uYnRuLmRyb3Bkb3duLXRvZ2dsZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJkZXBlbmRzX29uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxheWVyX3ZlcnNpb25fX2JyYW5jaCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJsYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0IikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImRlcGVuZHNfYnkiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImJ1dHRvbi5idG4uZHJvcGRvd24tdG9nZ2xlIikuY2xpY2soKQorICAgICAgICAjIGNoZWNrIGlmIGNvbHVtbnMgc2VsZWN0ZWQgYWJvdmUgaXMgc2hvd24KKyAgICAgICAgY2hlY2tfbGlzdCA9IFsnRGVwZW5kZW5jaWVzJywgJ0xheWVyIGJyYW5jaCcsICdMYXllciBjb21taXQnLCAnTGF5ZXIgZGlyZWN0b3J5JywgJ1JldmVyc2UgZGVwZW5kZW5jaWVzJ10KKyAgICAgICAgaGVhZF9saXN0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCdvdGFibGUnKQorICAgICAgICB0aW1lLnNsZWVwKDIpCisgICAgICAgIHByaW50IGhlYWRfbGlzdAorICAgICAgICBmb3IgaXRlbSBpbiBjaGVja19saXN0OgorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGl0ZW0gaW4gaGVhZF9saXN0KQorICAgICAgICAjIHVuLWNoZWNrICdlbSBhbGwKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiYnV0dG9uLmJ0bi5kcm9wZG93bi10b2dnbGUiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZGVwZW5kc19vbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJsYXllcl92ZXJzaW9uX19icmFuY2giKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX2NvbW1pdCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJkZXBlbmRzX2J5IikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJidXR0b24uYnRuLmRyb3Bkb3duLXRvZ2dsZSIpLmNsaWNrKCkKKyAgICAgICAgIyBkb24ndCBleGlzdCBhbnkgbW9yZQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIGZvciBpdGVtIGluIGNoZWNrX2xpc3Q6CisgICAgICAgICAgICBzZWxmLmZhaWxJZihpdGVtIGluIGhlYWRfbGlzdCkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTEzICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTEzKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsICdSZWNpcGVzJykuY2xpY2soKQorICAgICAgICAjIHN0ZXAgMworICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIGZvciBpdGVtIGluIFsnUmVjaXBlJywgJ1JlY2lwZSB2ZXJzaW9uJywgJ1JlY2lwZSBmaWxlJywgJ1NlY3Rpb24nLCAnTGljZW5zZScsICdMYXllciddOgorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGl0ZW0gaW4gaGVhZF9saXN0KQorICAgICAgICAjIHN0ZXAgNAorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgc2F2ZSBzY3JlZW4KKyAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwNCcpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTE0ICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTE0KHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBpbWFnZV90eXBlPSJjb3JlLWltYWdlLW1pbmltYWwiCisgICAgICAgIHRlc3RfcGFja2FnZTE9ImJ1c3lib3giCisgICAgICAgIHRlc3RfcGFja2FnZTI9ImdkYm0iCisgICAgICAgIHRlc3RfcGFja2FnZTM9ImdldHRleHQtbmF0aXZlIgorICAgICAgICBkcml2ZXIgPSBzZWxmLmRyaXZlcgorICAgICAgICBkcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dChpbWFnZV90eXBlKS5jbGljaygpCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJSZWNpcGVzIikuY2xpY2soKQorICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCh0ZXN0X3BhY2thZ2UxKS5jbGljaygpCisKKyAgICAgICAgc2VsZi50YWJsZV9uYW1lID0gJ2luZm9ybWF0aW9uJworCisgICAgICAgIHRhc2tzX3Jvd19jb3VudCA9IGxlbihkcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlszXS9kaXYvZGl2WzFdL3RhYmxlL3Rib2R5L3RyL3RkWzFdIikpCisgICAgICAgIHRhc2tzX2NvbHVtbl9jb3VudCA9IGxlbihkcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlszXS9kaXYvZGl2WzFdL3RhYmxlL3Rib2R5L3RyWzFdL3RkIikpCisgICAgICAgIHByaW50IHRhc2tzX3Jvd19jb3VudAorICAgICAgICBwcmludCB0YXNrc19jb2x1bW5fY291bnQKKworICAgICAgICBUYXNrc19jb2x1bW4gPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dF9ieV9jb2x1bW5fbnVtYmVyKHNlbGYudGFibGVfbmFtZSwgMikKKyAgICAgICAgcHJpbnQgKCJUYXNrc19jb2x1bW49IiwgVGFza3NfY29sdW1uKQorCisgICAgICAgIGtleV90YXNrcz1bImRvX2ZldGNoIiwgImRvX3VucGFjayIsICAiZG9fcGF0Y2giLCAiZG9fY29uZmlndXJlIiwgImRvX2NvbXBpbGUiLCAiZG9faW5zdGFsbCIsICJkb19wYWNrYWdlIiwgImRvX2J1aWxkIl0KKyAgICAgICAgaSA9IDAKKyAgICAgICAgd2hpbGUgaSA8IGxlbihrZXlfdGFza3MpOgorICAgICAgICAgICAgaWYga2V5X3Rhc2tzW2ldIG5vdCBpbiBUYXNrc19jb2x1bW46CisgICAgICAgICAgICAgICAgcHJpbnQgKCJFcnJvciEgTWlzc2luZyBrZXkgdGFzazogJXMiICUga2V5X3Rhc2tzW2ldKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAoIiVzIGlzIGluIHRhc2tzIiAlIGtleV90YXNrc1tpXSkKKyAgICAgICAgICAgIGkgPSBpICsgMQorCisgICAgICAgIGlmIFRhc2tzX2NvbHVtbi5pbmRleChrZXlfdGFza3NbMF0pICE9IDA6CisgICAgICAgICAgICBwcmludCAoIkVycm9yISAlcyBpcyBub3QgaW4gdGhlIHJpZ2h0IHBvc2l0aW9uIiAlIGtleV90YXNrc1swXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICgiJXMgaXMgaW4gcmlnaHQgcG9zaXRpb24iICUga2V5X3Rhc2tzWzBdKQorCisgICAgICAgIGlmIFRhc2tzX2NvbHVtblstMV0gIT0ga2V5X3Rhc2tzWy0xXToKKyAgICAgICAgICAgIHByaW50ICgiRXJyb3IhICVzIGlzIG5vdCBpbiB0aGUgcmlnaHQgcG9zaXRpb24iICUga2V5X3Rhc2tzWy0xXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICgiJXMgaXMgaW4gcmlnaHQgcG9zaXRpb24iICUga2V5X3Rhc2tzWy0xXSkKKworICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJQYWNrYWdlcyAoIikuY2xpY2soKQorICAgICAgICBwYWNrYWdlc19uYW1lID0gZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUGFja2FnZXMgKCIpLnRleHQKKyAgICAgICAgcHJpbnQgcGFja2FnZXNfbmFtZQorICAgICAgICBwYWNrYWdlc19udW0gPSBzdHJpbmcuYXRvaShmaWx0ZXIoc3RyLmlzZGlnaXQsIHJlcHIocGFja2FnZXNfbmFtZSkpKQorICAgICAgICBwcmludCBwYWNrYWdlc19udW0KKworICAgICAgICBwYWNrYWdlc19yb3dfY291bnQgPSBsZW4oZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoIi9odG1sL2JvZHkvZGl2WzJdL2Rpdi9kaXZbM10vZGl2L2RpdlsyXS90YWJsZS90Ym9keS90ci90ZFsxXSIpKQorICAgICAgICBwcmludCBwYWNrYWdlc19yb3dfY291bnQKKworICAgICAgICBpZiBwYWNrYWdlc19udW0gIT0gcGFja2FnZXNfcm93X2NvdW50OgorICAgICAgICAgICAgcHJpbnQgKCJFcnJvciEgVGhlIHBhY2thZ2VzIG51bWJlciBpcyBub3QgY29ycmVjdCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAoIlRoZSBwYWtjYWdlcyBudW1iZXIgaXMgY29ycmVjdCIpCisKKyAgICAgICAgZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiQnVpbGQgZGVwZW5kZW5jaWVzICgiKS5jbGljaygpCisgICAgICAgIGRlcGVuZHNfbmFtZSA9IGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIkJ1aWxkIGRlcGVuZGVuY2llcyAoIikudGV4dAorICAgICAgICBwcmludCBkZXBlbmRzX25hbWUKKyAgICAgICAgZGVwZW5kc19udW0gPSBzdHJpbmcuYXRvaShmaWx0ZXIoc3RyLmlzZGlnaXQsIHJlcHIoZGVwZW5kc19uYW1lKSkpCisgICAgICAgIHByaW50IGRlcGVuZHNfbnVtCisKKyAgICAgICAgaWYgZGVwZW5kc19udW0gPT0gMDoKKyAgICAgICAgICAgIGRlcGVuZHNfbWVzc2FnZSA9IHJlcHIoZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImRpdi5hbGVydC5hbGVydC1pbmZvIikudGV4dCkKKyAgICAgICAgICAgIHByaW50IGRlcGVuZHNfbWVzc2FnZQorICAgICAgICAgICAgaWYgZGVwZW5kc19tZXNzYWdlLmZpbmQoImhhcyBubyBidWlsZCBkZXBlbmRlbmNpZXMuIikgPCAwOgorICAgICAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIFRoZSBtZXNzYWdlIGlzbid0IGV4cGVjdGVkLiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICgiVGhlIG1lc3NhZ2UgaXMgZXhwZWN0ZWQiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVwZW5kc19yb3dfY291bnQgPSBsZW4oZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoIi9odG1sL2JvZHkvZGl2WzJdL2Rpdi9kaXZbM10vZGl2L2RpdlszXS90YWJsZS90Ym9keS90ci90ZFsxXSIpKQorICAgICAgICAgICAgcHJpbnQgZGVwZW5kc19yb3dfY291bnQKKyAgICAgICAgICAgIGlmIGRlcGVuZHNfbnVtICE9IGRlcGVuZHNfcm93X2NvdW50OgorICAgICAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIFRoZSBkZXBlbmRlbnQgcGFja2FnZXMgbnVtYmVyIGlzIG5vdCBjb3JyZWN0IikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgKCJUaGUgZGVwZW5kZW50IHBhY2thZ2VzIG51bWJlciBpcyBjb3JyZWN0IikKKworICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJSZXZlcnNlIGJ1aWxkIGRlcGVuZGVuY2llcyAoIikuY2xpY2soKQorICAgICAgICByZGVwZW5kc19uYW1lID0gZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUmV2ZXJzZSBidWlsZCBkZXBlbmRlbmNpZXMgKCIpLnRleHQKKyAgICAgICAgcHJpbnQgcmRlcGVuZHNfbmFtZQorICAgICAgICByZGVwZW5kc19udW0gPSBzdHJpbmcuYXRvaShmaWx0ZXIoc3RyLmlzZGlnaXQsIHJlcHIocmRlcGVuZHNfbmFtZSkpKQorICAgICAgICBwcmludCByZGVwZW5kc19udW0KKworICAgICAgICBpZiByZGVwZW5kc19udW0gPT0gMDoKKyAgICAgICAgICAgIHJkZXBlbmRzX21lc3NhZ2UgPSByZXByKGRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCIjYnJvdWdodC1pbi1ieSA+IGRpdi5hbGVydC5hbGVydC1pbmZvIikudGV4dCkKKyAgICAgICAgICAgIHByaW50IHJkZXBlbmRzX21lc3NhZ2UKKyAgICAgICAgICAgIGlmIHJkZXBlbmRzX21lc3NhZ2UuZmluZCgiaGFzIG5vIHJldmVyc2UgYnVpbGQgZGVwZW5kZW5jaWVzLiIpIDwgMDoKKyAgICAgICAgICAgICAgICBwcmludCAoIkVycm9yISBUaGUgbWVzc2FnZSBpc24ndCBleHBlY3RlZC4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAoIlRoZSBtZXNzYWdlIGlzIGV4cGVjdGVkIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICgiVGhlIHJldmVyc2UgZGVwZW5kZW50IHBhY2thZ2VzIG51bWJlciBpcyBjb3JyZWN0IikKKworICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiUmVjaXBlcyIpLmNsaWNrKCkKKyAgICAgICAgZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQodGVzdF9wYWNrYWdlMikuY2xpY2soKQorICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJQYWNrYWdlcyAoIikuY2xpY2soKQorICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJCdWlsZCBkZXBlbmRlbmNpZXMgKCIpLmNsaWNrKCkKKyAgICAgICAgZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUmV2ZXJzZSBidWlsZCBkZXBlbmRlbmNpZXMgKCIpLmNsaWNrKCkKKworCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJSZWNpcGVzIikuY2xpY2soKQorICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCh0ZXN0X3BhY2thZ2UzKS5jbGljaygpCisKKyAgICAgICAgbmF0aXZlX3Rhc2tzX3Jvd19jb3VudCA9IGxlbihkcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlszXS9kaXYvZGl2WzFdL3RhYmxlL3Rib2R5L3RyL3RkWzFdIikpCisgICAgICAgIG5hdGl2ZV90YXNrc19jb2x1bW5fY291bnQgPSBsZW4oZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoIi9odG1sL2JvZHkvZGl2WzJdL2Rpdi9kaXZbM10vZGl2L2RpdlsxXS90YWJsZS90Ym9keS90clsxXS90ZCIpKQorICAgICAgICBwcmludCBuYXRpdmVfdGFza3Nfcm93X2NvdW50CisgICAgICAgIHByaW50IG5hdGl2ZV90YXNrc19jb2x1bW5fY291bnQKKworICAgICAgICBOYXRpdmVfVGFza3NfY29sdW1uID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHRfYnlfY29sdW1uX251bWJlcihzZWxmLnRhYmxlX25hbWUsIDIpCisgICAgICAgIHByaW50ICgiTmF0aXZlX1Rhc2tzX2NvbHVtbj0iLCBOYXRpdmVfVGFza3NfY29sdW1uKQorCisgICAgICAgIG5hdGl2ZV9rZXlfdGFza3M9WyJkb19mZXRjaCIsICJkb191bnBhY2siLCAgImRvX3BhdGNoIiwgImRvX2NvbmZpZ3VyZSIsICJkb19jb21waWxlIiwgImRvX2luc3RhbGwiLCAiZG9fYnVpbGQiXQorICAgICAgICBpID0gMAorICAgICAgICB3aGlsZSBpIDwgbGVuKG5hdGl2ZV9rZXlfdGFza3MpOgorICAgICAgICAgICAgaWYgbmF0aXZlX2tleV90YXNrc1tpXSBub3QgaW4gTmF0aXZlX1Rhc2tzX2NvbHVtbjoKKyAgICAgICAgICAgICAgICBwcmludCAoIkVycm9yISBNaXNzaW5nIGtleSB0YXNrOiAlcyIgJSBuYXRpdmVfa2V5X3Rhc2tzW2ldKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAoIiVzIGlzIGluIHRhc2tzIiAlIG5hdGl2ZV9rZXlfdGFza3NbaV0pCisgICAgICAgICAgICBpID0gaSArIDEKKworICAgICAgICBpZiBOYXRpdmVfVGFza3NfY29sdW1uLmluZGV4KG5hdGl2ZV9rZXlfdGFza3NbMF0pICE9IDA6CisgICAgICAgICAgICBwcmludCAoIkVycm9yISAlcyBpcyBub3QgaW4gdGhlIHJpZ2h0IHBvc2l0aW9uIiAlIG5hdGl2ZV9rZXlfdGFza3NbMF0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAoIiVzIGlzIGluIHJpZ2h0IHBvc2l0aW9uIiAlIG5hdGl2ZV9rZXlfdGFza3NbMF0pCisKKyAgICAgICAgaWYgTmF0aXZlX1Rhc2tzX2NvbHVtblstMV0gIT0gbmF0aXZlX2tleV90YXNrc1stMV06CisgICAgICAgICAgICBwcmludCAoIkVycm9yISAlcyBpcyBub3QgaW4gdGhlIHJpZ2h0IHBvc2l0aW9uIiAlIG5hdGl2ZV9rZXlfdGFza3NbLTFdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgKCIlcyBpcyBpbiByaWdodCBwb3NpdGlvbiIgJSBuYXRpdmVfa2V5X3Rhc2tzWy0xXSkKKworICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJQYWNrYWdlcyAoIikuY2xpY2soKQorICAgICAgICBuYXRpdmVfcGFja2FnZXNfbmFtZSA9IGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlBhY2thZ2VzICgiKS50ZXh0CisgICAgICAgIHByaW50IG5hdGl2ZV9wYWNrYWdlc19uYW1lCisgICAgICAgIG5hdGl2ZV9wYWNrYWdlc19udW0gPSBzdHJpbmcuYXRvaShmaWx0ZXIoc3RyLmlzZGlnaXQsIHJlcHIobmF0aXZlX3BhY2thZ2VzX25hbWUpKSkKKyAgICAgICAgcHJpbnQgbmF0aXZlX3BhY2thZ2VzX251bQorCisgICAgICAgIGlmIG5hdGl2ZV9wYWNrYWdlc19udW0gIT0gMDoKKyAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIE5hdGl2ZSB0YXNrIHNob3VsZG4ndCBoYXZlIGFueSBwYWNrYWdlcy4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmF0aXZlX3BhY2thZ2VfbWVzc2FnZSA9IHJlcHIoZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImRpdi5hbGVydC5hbGVydC1pbmZvIikudGV4dCkKKyAgICAgICAgICAgIHByaW50IG5hdGl2ZV9wYWNrYWdlX21lc3NhZ2UKKyAgICAgICAgICAgIGlmIG5hdGl2ZV9wYWNrYWdlX21lc3NhZ2UuZmluZCgiZG9lcyBub3QgYnVpbGQgYW55IHBhY2thZ2VzLiIpIDwgMDoKKyAgICAgICAgICAgICAgICBwcmludCAoIkVycm9yISBUaGUgbWVzc2FnZSBmb3IgbmF0aXZlIHRhc2sgaXNuJ3QgZXhwZWN0ZWQuIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgKCJUaGUgbWVzc2FnZSBmb3IgbmF0aXZlIHRhc2sgaXMgZXhwZWN0ZWQuIikKKworICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJCdWlsZCBkZXBlbmRlbmNpZXMgKCIpLmNsaWNrKCkKKyAgICAgICAgbmF0aXZlX2RlcGVuZHNfbmFtZSA9IGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIkJ1aWxkIGRlcGVuZGVuY2llcyAoIikudGV4dAorICAgICAgICBwcmludCBuYXRpdmVfZGVwZW5kc19uYW1lCisgICAgICAgIG5hdGl2ZV9kZXBlbmRzX251bSA9IHN0cmluZy5hdG9pKGZpbHRlcihzdHIuaXNkaWdpdCwgcmVwcihuYXRpdmVfZGVwZW5kc19uYW1lKSkpCisgICAgICAgIHByaW50IG5hdGl2ZV9kZXBlbmRzX251bQorCisgICAgICAgIG5hdGl2ZV9kZXBlbmRzX3Jvd19jb3VudCA9IGxlbihkcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlszXS9kaXYvZGl2WzNdL3RhYmxlL3Rib2R5L3RyL3RkWzFdIikpCisgICAgICAgIHByaW50IG5hdGl2ZV9kZXBlbmRzX3Jvd19jb3VudAorCisgICAgICAgIGlmIG5hdGl2ZV9kZXBlbmRzX251bSAhPSBuYXRpdmVfZGVwZW5kc19yb3dfY291bnQ6CisgICAgICAgICAgICBwcmludCAoIkVycm9yISBUaGUgZGVwZW5kZW50IHBhY2thZ2VzIG51bWJlciBpcyBub3QgY29ycmVjdCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAoIlRoZSBkZXBlbmRlbnQgcGFja2FnZXMgbnVtYmVyIGlzIGNvcnJlY3QiKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlJldmVyc2UgYnVpbGQgZGVwZW5kZW5jaWVzICgiKS5jbGljaygpCisgICAgICAgIG5hdGl2ZV9yZGVwZW5kc19uYW1lID0gZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUmV2ZXJzZSBidWlsZCBkZXBlbmRlbmNpZXMgKCIpLnRleHQKKyAgICAgICAgcHJpbnQgbmF0aXZlX3JkZXBlbmRzX25hbWUKKyAgICAgICAgbmF0aXZlX3JkZXBlbmRzX251bSA9IHN0cmluZy5hdG9pKGZpbHRlcihzdHIuaXNkaWdpdCwgcmVwcihuYXRpdmVfcmRlcGVuZHNfbmFtZSkpKQorICAgICAgICBwcmludCBuYXRpdmVfcmRlcGVuZHNfbnVtCisKKyAgICAgICAgbmF0aXZlX3JkZXBlbmRzX3Jvd19jb3VudCA9IGxlbihkcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlszXS9kaXYvZGl2WzRdL3RhYmxlL3Rib2R5L3RyL3RkWzFdIikpCisgICAgICAgIHByaW50IG5hdGl2ZV9yZGVwZW5kc19yb3dfY291bnQKKworICAgICAgICBpZiBuYXRpdmVfcmRlcGVuZHNfbnVtICE9IG5hdGl2ZV9yZGVwZW5kc19yb3dfY291bnQ6CisgICAgICAgICAgICBwcmludCAoIkVycm9yISBUaGUgcmV2ZXJzZSBkZXBlbmRlbnQgcGFja2FnZXMgbnVtYmVyIGlzIG5vdCBjb3JyZWN0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICgiVGhlIHJldmVyc2UgZGVwZW5kZW50IHBhY2thZ2VzIG51bWJlciBpcyBjb3JyZWN0IikKKworICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiUmVjaXBlcyIpLmNsaWNrKCkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTE1ICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTE1KHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorIyBzdGVwIDMKKyAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCduYXYnLCAnQ29uZmlndXJhdGlvbicpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiQml0QmFrZSB2YXJpYWJsZXMiKS5jbGljaygpCisjIHN0ZXAgNAorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMoImxpYiIpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBzYXZlIHNjcmVlbiB0byBzZWUgcmVzdWx0CisgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nc2VsZW5pdW0nLCBhcHBlbmRfbmFtZT0nc3RlcDQnKQorIyBzdGVwIDUKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiaS5pY29uLXJlbW92ZSIpLmNsaWNrKCkKKyAgICAgICAgaGVhZF9saXN0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCdvdGFibGUnKQorICAgICAgICBwcmludCBoZWFkX2xpc3QKKyAgICAgICAgcHJpbnQgbGVuKGhlYWRfbGlzdCkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGhlYWRfbGlzdCA9PSBbJ1ZhcmlhYmxlJywgJ1ZhbHVlJywgJ1NldCBpbiBmaWxlJywgJ0Rlc2NyaXB0aW9uJ10pCisjIHN0ZXAgOAorICAgICAgICAjIHNlYXJjaCBvdGhlciBzdHJpbmcuIGFuZCBjbGljayAiVmFyaWFibGUiIHRvIHJlLXNvcnQsIGNoZWNrIGlmIHRhYmxlCisgICAgICAgICMgaGVhZCBpcyBzdGlsbCB0aGUgc2FtZQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMoInBva3kiKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaC1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnb3RhYmxlJywgJ1ZhcmlhYmxlJykuY2xpY2soKQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhoZWFkX2xpc3QgPT0gWydWYXJpYWJsZScsICdWYWx1ZScsICdTZXQgaW4gZmlsZScsICdEZXNjcmlwdGlvbiddKQorICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ290YWJsZScsICdWYXJpYWJsZScpLmNsaWNrKCkKKyAgICAgICAgaGVhZF9saXN0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCdvdGFibGUnKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaGVhZF9saXN0ID09IFsnVmFyaWFibGUnLCAnVmFsdWUnLCAnU2V0IGluIGZpbGUnLCAnRGVzY3JpcHRpb24nXSkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTE2ICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTE2KHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorIyBzdGVwIDItMworICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsICdDb25maWd1cmF0aW9uJykuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJCaXRCYWtlIHZhcmlhYmxlcyIpLmNsaWNrKCkKKyAgICAgICAgdmFyaWFibGVfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCdjbGFzcycsICd2YXJpYWJsZV9uYW1lJykKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKHZhcmlhYmxlX2xpc3QpKQorIyBzdGVwIDQKKyAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCdvdGFibGUnLCAnVmFyaWFibGUnKS5jbGljaygpCisgICAgICAgIHZhcmlhYmxlX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgnY2xhc3MnLCAndmFyaWFibGVfbmFtZScpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X2ludmVydGVkKHZhcmlhYmxlX2xpc3QpKQorICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ290YWJsZScsICdWYXJpYWJsZScpLmNsaWNrKCkKKyMgc3RlcCA1CisgICAgICAgICMgc2VhcmNoaW5nIHdvbid0IGNoYW5nZSB0aGUgc2VxdWVudGlhbGl0eQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMoImxpYiIpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgdmFyaWFibGVfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCdjbGFzcycsICd2YXJpYWJsZV9uYW1lJykKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKHZhcmlhYmxlX2xpc3QpKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MjMgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MjMoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICAjIFN0ZXAgMgorICAgICAgICAjIGRlZmF1bHQgc2VxdWVuY2UgaW4gIkNvbXBsZXRlZCBvbiIgY29sdW1uIGlzIGludmVydGVkCisgICAgICAgIGNfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCdjbGFzcycsICdjb21wbGV0ZWRfb24nKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9pbnZlcnRlZChjX2xpc3QpKQorICAgICAgICAjIHN0ZXAgMworICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic3RhcnRlZF9vbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJsb2ciKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgidGltZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIGZvciBpdGVtIGluIFsnT3V0Y29tZScsICdUYXJnZXQnLCAnTWFjaGluZScsICdTdGFydGVkIG9uJywgJ0NvbXBsZXRlZCBvbicsICdGYWlsZWQgdGFza3MnLCAnRXJyb3JzJywgJ1dhcm5pbmdzJywgJ1dhcm5pbmdzJywgJ1RpbWUnXToKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpdGVtIGluIGhlYWRfbGlzdCkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTI0ICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTI0KHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgIyBQbGVhc2UgcmVmZXIgdG8gY2FzZSA5MjQgcmVxdWlyZW1lbnQKKyAgICAgICAgIyBkZWZhdWx0IHNlcXVlbmNlIGluICJDb21wbGV0ZWQgb24iIGNvbHVtbiBpcyBpbnZlcnRlZAorICAgICAgICBjX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgnY2xhc3MnLCAnY29tcGxldGVkX29uJykKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3RfaW52ZXJ0ZWQoY19saXN0KSkKKyAgICAgICAgIyBTdGVwIDQKKyAgICAgICAgIyBjbGljayBFcnJvcnMgLCBvcmRlciBpbiAiQ29tcGxldGVkIG9uIiBzaG91bGQgYmUgZGlzdHVyYmVkLiBUaGVuIGhpZGUKKyAgICAgICAgIyBlcnJvciBjb2x1bW4gdG8gY2hlY2sgaWYgb3JkZXIgaW4gIkNvbXBsZXRlZCBvbiIgY2FuIGJlIHJlc3RvcmVkCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnb3RhYmxlJywgJ0Vycm9ycycpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVycm9yc19ubyIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIE5vdGU6IHdpdGhvdXQgdGltZS5zbGVlcCBoZXJlLCB0aGVyZSdsbCBiZSB1bnByZWRpY3RhYmxlIGVycm9yLi5UQkQKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBjX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgnY2xhc3MnLCAnY29tcGxldGVkX29uJykKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3RfaW52ZXJ0ZWQoY19saXN0KSkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTQwICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTQwKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorIyBTdGVwIDItMworICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsICdQYWNrYWdlcycpLmNsaWNrKCkKKyAgICAgICAgY2hlY2tfaGVhZF9saXN0ID0gWydQYWNrYWdlJywgJ1BhY2thZ2UgdmVyc2lvbicsICdTaXplJywgJ1JlY2lwZSddCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGhlYWRfbGlzdCA9PSBjaGVja19oZWFkX2xpc3QpCisjIFN0ZXAgNAorICAgICAgICAjIHB1bGxkb3duIG1lbnUKKyAgICAgICAgb3B0aW9uX2lkcyA9IFsncmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZScsICdyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2JyYW5jaCcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAncmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0JywgJ2xpY2Vuc2UnLCAncmVjaXBlX192ZXJzaW9uJ10KKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBmb3IgaXRlbSBpbiBvcHRpb25faWRzOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZChpdGVtKS5pc19zZWxlY3RlZCgpOgorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZChpdGVtKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBzYXZlIHNjcmVlbiBoZXJlIHRvIG9ic2VydmUgdGhhdCAnUGFja2FnZScgYW5kICdQYWNrYWdlIHZlcnNpb24nIGlzCisgICAgICAgICMgbm90IHNlbGVjdGFibGUKKyAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwNCcpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDk0MSAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0Xzk0MShzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoImNvcmUtaW1hZ2UtbWluaW1hbCIpLmNsaWNrKCkKKyAgICAgICAgIyBTdGVwIDItMworICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsICdQYWNrYWdlcycpLmNsaWNrKCkKKyAgICAgICAgIyBjb2x1bW4gLS0gUGFja2FnZQorICAgICAgICBjb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0X2J5X2NvbHVtbl9udW1iZXIoJ290YWJsZScsIDEpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X3NlcXVlbmNlZChjb2x1bW5fbGlzdCkpCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnb3RhYmxlJywgJ1NpemUnKS5jbGljaygpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDk0MiAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0Xzk0MihzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoImNvcmUtaW1hZ2UtbWluaW1hbCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiUGFja2FnZXMiKS5jbGljaygpCisgICAgICAgICNnZXQgaW5pdGlhbCB0YWJsZSBoZWFkZXIKKyAgICAgICAgaGVhZF9saXN0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCdvdGFibGUnKQorICAgICAgICAjcmVtb3ZlIHRoZSBSZWNpcGUgY29sdW1uIGZyb20gdGFibGUgaGVhZGVyCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJyZWNpcGVfX25hbWUiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgI2dldCBtb2RpZmllZCB0YWJsZSBoZWFkZXIKKyAgICAgICAgbmV3X2hlYWQgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhoZWFkX2xpc3QgPiBuZXdfaGVhZCkKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDk0MyAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0Xzk0MyhzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoImNvcmUtaW1hZ2UtbWluaW1hbCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiUGFja2FnZXMiKS5jbGljaygpCisgICAgICAgICNzZWFyY2ggZm9yIHRoZSAiYmFzaCIgcGFja2FnZSAtPiB0aGlzIHNob3VsZCBkZWZpbml0ZWx5IGJlIHByZXNlbnQKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5jbGVhcigpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuc2VuZF9rZXlzKCJiYXNoIikKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2gtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjY2hlY2sgZm9yIHRoZSBzZWFyY2ggcmVzdWx0IG1lc3NhZ2UgIlhYIHBhY2thZ2VzIGZvdW5kIgorICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5pc190ZXh0X3ByZXNlbnQoInBhY2thZ2VzIGZvdW5kIikpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDk0NCAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0Xzk0NChzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoImNvcmUtaW1hZ2UtbWluaW1hbCIpLmNsaWNrKCkKKyAgICAgICAgIyBzdGVwIDE6IHRlc3QgUmVjaXBlcyBwYWdlIHN0dWZmCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIlJlY2lwZXMiKS5jbGljaygpCisgICAgICAgICMgZm9yIHRoZXNlIDMgaXRlbXMsIGRlZmF1bHQgc3RhdHVzIGlzIG5vdC1jaGVja2VkCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJsYXllcl92ZXJzaW9uX19icmFuY2giKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX2NvbW1pdCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIG90YWJsZSBpcyB0aGUgcmVjaXBlcyB0YWJsZSBoZXJlCisgICAgICAgIG90YWJsZV9oZWFkX3RleHQgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIGZvciBpdGVtIGluIFsiTGF5ZXIiLCAiTGF5ZXIgYnJhbmNoIiwgIkxheWVyIGNvbW1pdCIsICJMYXllciBkaXJlY3RvcnkiXToKKyAgICAgICAgICAgIHNlbGYuZmFpbElmKGl0ZW0gbm90IGluIG90YWJsZV9oZWFkX3RleHQpCisgICAgICAgICMgY2xpY2sgdGhlIGZpc3QgcmVjaXBlLCB3aGF0ZXZlciBpdCBpcworICAgICAgICBzZWxmLmdldF90YWJsZV9lbGVtZW50KCJvdGFibGUiLCAxLCAxKS5jbGljaygpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZWxmLmlzX3RleHRfcHJlc2VudChbIkxheWVyIiwgIkxheWVyIGJyYW5jaCIsICJMYXllciBjb21taXQiLCAiUmVjaXBlIGZpbGUiXSkpCisKKyAgICAgICAgIyBzdGVwIDI6IHRlc3QgUGFja2FnZXMgcGFnZSBzdHVmZi4gYWxtb3N0IHNhbWUgYXMgYWJvdmUKKyAgICAgICAgc2VsZi5kcml2ZXIuYmFjaygpCisgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIlBhY2thZ2VzIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgicmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2JyYW5jaCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19jb21taXQiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgb3RhYmxlX2hlYWRfdGV4dCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgib3RhYmxlIikKKyAgICAgICAgZm9yIGl0ZW0gaW4gWyJMYXllciIsICJMYXllciBicmFuY2giLCAiTGF5ZXIgY29tbWl0Il06CisgICAgICAgICAgICBzZWxmLmZhaWxJZihpdGVtIG5vdCBpbiBvdGFibGVfaGVhZF90ZXh0KQorICAgICAgICAjIGNsaWNrIHRoZSBmaXN0IHJlY2lwZSwgd2hhdGV2ZXIgaXQgaXMKKyAgICAgICAgc2VsZi5nZXRfdGFibGVfZWxlbWVudCgib3RhYmxlIiwgMSwgMSkuY2xpY2soKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5pc190ZXh0X3ByZXNlbnQoWyJMYXllciIsICJMYXllciBicmFuY2giLCAiTGF5ZXIgY29tbWl0Il0pKQorCisgICAgICAgICMgc3RlcCAzOiB0ZXN0IFBhY2thZ2VzIGNvcmUtaW1hZ2UtbWluaW1hbChpbWFnZXMpIHN0dWZmLiBhbG1vc3Qgc2FtZSBhcyBhYm92ZS4gTm90ZSB3aGVuIGZ1dHVyZSBlbGVtZW50LWlkIGNoYW5nZXMuLi4KKyAgICAgICAgc2VsZi5kcml2ZXIuYmFjaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoImNvcmUtaW1hZ2UtbWluaW1hbCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxheWVyX25hbWUiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgibGF5ZXJfYnJhbmNoIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxheWVyX2NvbW1pdCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBvdGFibGVfaGVhZF90ZXh0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCJvdGFibGUiKQorICAgICAgICBmb3IgaXRlbSBpbiBbIkxheWVyIiwgIkxheWVyIGJyYW5jaCIsICJMYXllciBjb21taXQiXToKKyAgICAgICAgICAgIHNlbGYuZmFpbElmKGl0ZW0gbm90IGluIG90YWJsZV9oZWFkX3RleHQpCisgICAgICAgICMgY2xpY2sgdGhlIGZpc3QgcmVjaXBlLCB3aGF0ZXZlciBpdCBpcworICAgICAgICBzZWxmLmdldF90YWJsZV9lbGVtZW50KCJvdGFibGUiLCAxLCAxKS5jbGljaygpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZWxmLmlzX3RleHRfcHJlc2VudChbIkxheWVyIiwgIkxheWVyIGJyYW5jaCIsICJMYXllciBjb21taXQiXSkpCisKKyAgICAgICAgIyBzdGVwIDQ6IGNoZWNrIENvbmZpZ3VyYXRpb24gcGFnZQorICAgICAgICBzZWxmLmRyaXZlci5iYWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiQ29uZmlndXJhdGlvbiIpLmNsaWNrKCkKKyAgICAgICAgb3RhYmxlX2hlYWRfdGV4dCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgpCisgICAgICAgIGZvciBpdGVtIGluIFsiTGF5ZXIiLCAiTGF5ZXIgYnJhbmNoIiwgIkxheWVyIGNvbW1pdCJdOgorICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXRlbSBub3QgaW4gb3RhYmxlX2hlYWRfdGV4dCkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTQ1ICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTQ1KHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBmb3IgaXRlbXMgaW4gWyJQYWNrYWdlcyIsICJSZWNpcGVzIiwgIlRhc2tzIl06CisgICAgICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoImNvcmUtaW1hZ2UtbWluaW1hbCIpLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoaXRlbXMpLmNsaWNrKCkKKworICAgICAgICAgICAgIyB0aGlzIG1heSBiZSBwYWdlIHNwZWNpZmljLiBJZiBmdXR1cmUgcGFnZSBjb250ZW50IGNoYW5nZXMsIHRyeSB0byByZXBsYWNlIGl0IHdpdGggbmV3IHhwYXRoCisgICAgICAgICAgICB4cGF0aF9zaG93cm93cyA9ICIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzJdL2RpdlsyXS9kaXZbMl0vZGl2L2Rpdi9kaXZbMl0vc2VsZWN0IgorICAgICAgICAgICAgeHBhdGhfdGFibGUgPSAiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlsyXS9kaXZbMl0vdGFibGUvdGJvZHkiCisgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoeHBhdGhfc2hvd3Jvd3MpLmNsaWNrKCkKKyAgICAgICAgICAgIHJvd3NfZGlzcGxheWVkID0gaW50KHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCh4cGF0aF9zaG93cm93cyArICIvb3B0aW9uWzJdIikudGV4dCkKKworICAgICAgICAgICAgIyBub3Qgc3VyZSBpZiB0aGlzIGlzIGEgU2VsZW5pdW0gU2VsZWN0IGJ1ZzogSWYgcGFnZSBpcyBub3QgcmVmcmVzaGVkIGhlcmUsICJzZWxlY3QoYnkgdmlzaWJsZSB0ZXh0KSIgb3BlcmF0aW9uIHdpbGwgZ28gYmFjayB0byAxMDAtcm93IHBhZ2UKKyAgICAgICAgICAgICMgU3VyZSB3ZSBjYW4gdXNlIGRyaXZlci5nZXQodXJsKSB0byByZWZyZXNoIHBhZ2UsIGJ1dCBzaW5jZSBwYWdlIHdpbGwgdmFyeSwgd2UgdXNlIGNsaWNrIGxpbmsgdGV4dCBoZXJlCisgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KGl0ZW1zKS5jbGljaygpCisgICAgICAgICAgICBTZWxlY3Qoc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3Rvcigic2VsZWN0LnBhZ2VzaXplIikpLnNlbGVjdF9ieV92aXNpYmxlX3RleHQoc3RyKHJvd3NfZGlzcGxheWVkKSkKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZWxmLmlzX2VsZW1lbnRfcHJlc2VudChCeS5YUEFUSCwgeHBhdGhfdGFibGUgKyAiL3RyWyIgKyBzdHIocm93c19kaXNwbGF5ZWQpICsiXSIpKQorICAgICAgICAgICAgc2VsZi5mYWlsSWYoc2VsZi5pc19lbGVtZW50X3ByZXNlbnQoQnkuWFBBVEgsIHhwYXRoX3RhYmxlICsgIi90clsiICsgc3RyKHJvd3NfZGlzcGxheWVkKzEpICsiXSIpKQorCisgICAgICAgICAgICAjIGNsaWNrIDFzdCBwYWNrYWdlLCB0aGVuIGdvIGJhY2sgdG8gY2hlY2sgaWYgaXQncyBzdGlsbCB0aG9zZSByb3dzIHNob3duLgorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKHhwYXRoX3RhYmxlICsgIi90clsxXS90ZFsxXSIpLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoaXRlbXMpLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZWxmLmlzX2VsZW1lbnRfcHJlc2VudChCeS5YUEFUSCwgeHBhdGhfdGFibGUgKyAiL3RyWyIgKyBzdHIocm93c19kaXNwbGF5ZWQpICsiXSIpKQorICAgICAgICAgICAgc2VsZi5mYWlsSWYoc2VsZi5pc19lbGVtZW50X3ByZXNlbnQoQnkuWFBBVEgsIHhwYXRoX3RhYmxlICsgIi90clsiICsgc3RyKHJvd3NfZGlzcGxheWVkKzEpICsiXSIpKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5NDYgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85NDYoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIkNvbmZpZ3VyYXRpb24iKS5jbGljaygpCisgICAgICAgICMgc3RlcCAzLTQKKyAgICAgICAgY2hlY2tfbGlzdCA9IFsiU3VtbWFyeSIsICJCaXRCYWtlIHZhcmlhYmxlcyJdCisgICAgICAgIGZvciBpdGVtIGluIGNoZWNrX2xpc3Q6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5pc19lbGVtZW50X3ByZXNlbnQoaG93PUJ5LkxJTktfVEVYVCwgd2hhdD1pdGVtKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXMgbm90IGZvdW5kIiAlaXRlbSkKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfdGV4dF9wcmVzZW50KFsnTGF5ZXJzJywgJ0xheWVyJywgJ0xheWVyIGJyYW5jaCcsICdMYXllciBjb21taXQnXSk6CisgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigidGV4dCBub3QgZm91bmQiKQorICAgICAgICAjIHN0ZXAgNQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJCaXRCYWtlIHZhcmlhYmxlcyIpLmNsaWNrKCkKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfdGV4dF9wcmVzZW50KFsnVmFyaWFibGUnLCAnVmFsdWUnLCAnU2V0IGluIGZpbGUnLCAnRGVzY3JpcHRpb24nXSk6CisgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigidGV4dCBub3QgZm91bmQiKQorICAgICAgICAjIFRoaXMgbWF5IGJlIHVuc3RhYmxlIGJlY2F1c2UgaXQncyBwYWdlLXNwZWNpZmljCisgICAgICAgICMgc3RlcCA2OiB0aGlzIGlzIGhvdyB3ZSBmaW5kIGZpbHRlciBiZXNpZGUgIlNldCBpbiBmaWxlIgorICAgICAgICB0ZW1wX2VsZW1lbnQgPSBzZWxmLmZpbmRfZWxlbWVudF9ieV90ZXh0X2luX3RhYmxlKCdvdGFibGUnLCAiU2V0IGluIGZpbGUiKQorICAgICAgICB0ZW1wX2VsZW1lbnQuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIuLi8vKi9hL2lbQGNsYXNzPSdpY29uLWZpbHRlciBmaWx0ZXJlZCddIikuY2xpY2soKQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIigvL2lucHV0W0BuYW1lPSdmaWx0ZXInXSlbM10iKS5jbGljaygpCisgICAgICAgIGJ0bnMgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X2Nzc19zZWxlY3RvcigiYnV0dG9uLmJ0bi5idG4tcHJpbWFyeSIpCisgICAgICAgIGZvciBidG4gaW4gYnRuczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBidG4uY2xpY2soKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAjIHNhdmUgc2NyZWVuIGhlcmUKKyAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwNicpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBzYXZlIHNjcmVlbiBoZXJlCisgICAgICAgICMgc3RlcCA3CisgICAgICAgICMgd2Ugc2hvdWxkIG1hbnVhbGx5IGNoZWNrIHRoZSBzdGVwIDYtOCByZXN1bHQgdXNpbmcgc2NyZWVuc2hvdAorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA3JykKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIHN0ZXAgOQorICAgICAgICAjIGNsaWNrIHRoZSAxc3QgaXRlbSwgbm8gbWF0dGVyIHdoYXQgaXQgaXMKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGlkPSdvdGFibGUnXS90Ym9keS90clsxXS90ZFsxXS9hIikuY2xpY2soKQorICAgICAgICAjIGdpdmUgaXQgMSBzZWMgc28gdGhlIHBvcC11cCBiZWNvbWVzIHRoZSAiYWN0aXZlX2VsZW1lbnQiCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgZWxlbWVudCA9IHNlbGYuZHJpdmVyLnN3aXRjaF90by5hY3RpdmVfZWxlbWVudAorICAgICAgICBjaGVja19saXN0ID0gWydPcmRlcicsICdDb25maWd1cmF0aW9uIGZpbGUnLCAnT3BlcmF0aW9uJywgJ0xpbmUgbnVtYmVyJ10KKyAgICAgICAgZm9yIGl0ZW0gaW4gY2hlY2tfbGlzdDoKKyAgICAgICAgICAgIGlmIGl0ZW0gbm90IGluIGVsZW1lbnQudGV4dDoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXMgbm90IGZvdW5kIiAlaXRlbSkKKyAgICAgICAgIyBhbnkgYmV0dGVyIHdheSB0byBjbG9zZSB0aGlzIHBvcC11cD8gLi4uIFRCRAorICAgICAgICBlbGVtZW50LmZpbmRfZWxlbWVudF9ieV9jbGFzc19uYW1lKCJjbG9zZSIpLmNsaWNrKCkKKyAgICAgICAgIyBzdGVwIDEwIDogbmVlZCB0byBtYW51YWxseSBjaGVjayAiWW9jdG8gTWFudWFsIiBpbiBzYXZlZCBzY3JlZW4KKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiaS5pY29uLXNoYXJlLmdldC1pbmZvIikuY2xpY2soKQorICAgICAgICAjIHNhdmUgc2NyZWVuIGhlcmUKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J25hdGl2ZScsIGFwcGVuZF9uYW1lPSdzdGVwMTAnKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5NDcgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85NDcoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ0NvbmZpZ3VyYXRpb24nKS5jbGljaygpCisgICAgICAgICMgc3RlcCAyCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIkJpdEJha2UgdmFyaWFibGVzIikuY2xpY2soKQorICAgICAgICAjIHN0ZXAgMworICAgICAgICBkZWYgeHBhdGhfb3B0aW9uKGNvbHVtbl9uYW1lKToKKyAgICAgICAgICAgICMgcmV0dXJuIHhwYXRoIG9mIG9wdGlvbnMgdW5kZXIgIkVkaXQgY29sdW1ucyIgYnV0dG9uCisgICAgICAgICAgICByZXR1cm4gc2VsZi5zaG9ydGVzdF94cGF0aCgnaWQnLCAnbmF2VGFiJykgKyBzZWxmLnNob3J0ZXN0X3hwYXRoKCdpZCcsICdlZGl0Y29sJykgXAorICAgICAgICAgICAgICAgICsgc2VsZi5zaG9ydGVzdF94cGF0aCgnaWQnLCBjb2x1bW5fbmFtZSkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCdlZGl0LWNvbHVtbnMtYnV0dG9uJykuY2xpY2soKQorICAgICAgICAjIGJ5IGRlZmF1bHQsIG9wdGlvbiAiRGVzY3JpcHRpb24iIGFuZCAiU2V0IGluIGZpbGUiIHdlcmUgY2hlY2tlZAorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoeHBhdGhfb3B0aW9uKCdkZXNjcmlwdGlvbicpKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCh4cGF0aF9vcHRpb24oJ2ZpbGUnKSkuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoJ2VkaXQtY29sdW1ucy1idXR0b24nKS5jbGljaygpCisgICAgICAgIGNoZWNrX2xpc3QgPSBbJ0Rlc2NyaXB0aW9uJywgJ1NldCBpbiBmaWxlJ10KKyAgICAgICAgaGVhZF9saXN0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCdvdGFibGUnKQorICAgICAgICBmb3IgaXRlbSBpbiBjaGVja19saXN0OgorICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXRlbSBpbiBoZWFkX2xpc3QpCisgICAgICAgICMgY2hlY2sgdGhlc2UgMiBvcHRpb25zIGFuZCB2ZXJpZnkgYWdhaW4KKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCdlZGl0LWNvbHVtbnMtYnV0dG9uJykuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoeHBhdGhfb3B0aW9uKCdkZXNjcmlwdGlvbicpKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCh4cGF0aF9vcHRpb24oJ2ZpbGUnKSkuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoJ2VkaXQtY29sdW1ucy1idXR0b24nKS5jbGljaygpCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gY2hlY2tfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpdGVtIGluIGhlYWRfbGlzdCkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTQ4ICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTQ4KHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsICdDb25maWd1cmF0aW9uJykuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJCaXRCYWtlIHZhcmlhYmxlcyIpLmNsaWNrKCkKKyAgICAgICAgI2dldCBudW1iZXIgb2YgdmFyaWFibGVzIHZpc2libGUgYnkgZGVmYXVsdAorICAgICAgICBudW1iZXJfYmVmb3JlX3NlYXJjaCA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jbGFzc19uYW1lKCdwYWdlLWhlYWRlcicpLnRleHQKKyAgICAgICAgIyBzZWFyY2ggZm9yIGEgd2hpbGUuLi4KKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5jbGVhcigpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuc2VuZF9rZXlzKCJCQiIpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgI2dldCBudW1iZXIgb2YgdmFyaWFibGVzIHZpc2libGUgYWZ0ZXIgc2VhcmNoCisgICAgICAgIG51bWJlcl9hZnRlcl9zZWFyY2ggPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY2xhc3NfbmFtZSgncGFnZS1oZWFkZXInKS50ZXh0CisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhudW1iZXJfYmVmb3JlX3NlYXJjaCA+IG51bWJlcl9hZnRlcl9zZWFyY2gpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDk0OSAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0Xzk0OShzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoImNvcmUtaW1hZ2UtbWluaW1hbCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCduYXYnLCAnY29yZS1pbWFnZS1taW5pbWFsJykuY2xpY2soKQorICAgICAgICAjIHN0ZXAgMworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlBhY2thZ2VzIGluY2x1ZGVkIikKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiRGlyZWN0b3J5IHN0cnVjdHVyZSIpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sZToKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKGUpCisgICAgICAgICAgICBzZWxmLmZhaWxJZihUcnVlKQorICAgICAgICAjIHN0ZXAgNAorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIGZvciBpdGVtIGluIFsnUGFja2FnZScsICdQYWNrYWdlIHZlcnNpb24nLCAnU2l6ZScsICdEZXBlbmRlbmNpZXMnLCAnUmV2ZXJzZSBkZXBlbmRlbmNpZXMnLCAnUmVjaXBlJ106CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXRlbSBpbiBoZWFkX2xpc3QpCisgICAgICAgICMgc3RlcCA1LTYKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBzZWxlY3RhYmxlX2NsYXNzID0gJ2NoZWNrYm94JworICAgICAgICAjIG1pbmltdW0tdGFibGUgOiBtZWFucyB1bnNlbGVjdGFibGUgaXRlbXMKKyAgICAgICAgdW5zZWxlY3RhYmxlX2NsYXNzID0gJ2NoZWNrYm94IG11dGVkJworICAgICAgICBzZWxlY3RhYmxlX2NoZWNrX2xpc3QgPSBbJ0RlcGVuZGVuY2llcycsICdMYXllcicsICdMYXllciBicmFuY2gnLCAnTGF5ZXIgY29tbWl0JywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xpY2Vuc2UnLCAnUmVjaXBlJywgJ1JlY2lwZSB2ZXJzaW9uJywgJ1JldmVyc2UgZGVwZW5kZW5jaWVzJywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NpemUnLCAnU2l6ZSBvdmVyIHRvdGFsICglKSddCisgICAgICAgIHVuc2VsZWN0YWJsZV9jaGVja19saXN0ID0gWydQYWNrYWdlJywgJ1BhY2thZ2UgdmVyc2lvbiddCisgICAgICAgIHNlbGVjdGFibGVfbGlzdCA9IGxpc3QoKQorICAgICAgICB1bnNlbGVjdGFibGVfbGlzdCA9IGxpc3QoKQorICAgICAgICBzZWxlY3RhYmxlX2VsZW1lbnRzID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiLy8qW0BpZD0nZWRpdGNvbCddLy8qW0BjbGFzcz0nIiArIHNlbGVjdGFibGVfY2xhc3MgKyAiJ10iKQorICAgICAgICB1bnNlbGVjdGFibGVfZWxlbWVudHMgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvLypbQGlkPSdlZGl0Y29sJ10vLypbQGNsYXNzPSciICsgdW5zZWxlY3RhYmxlX2NsYXNzICsgIiddIikKKyAgICAgICAgZm9yIGVsZW1lbnQgaW4gc2VsZWN0YWJsZV9lbGVtZW50czoKKyAgICAgICAgICAgIHNlbGVjdGFibGVfbGlzdC5hcHBlbmQoZWxlbWVudC50ZXh0KQorICAgICAgICBmb3IgZWxlbWVudCBpbiB1bnNlbGVjdGFibGVfZWxlbWVudHM6CisgICAgICAgICAgICB1bnNlbGVjdGFibGVfbGlzdC5hcHBlbmQoZWxlbWVudC50ZXh0KQorICAgICAgICAjIGNoZWNrIHRoZW0KKyAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZWN0YWJsZV9jaGVja19saXN0OgorICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4gc2VsZWN0YWJsZV9saXN0OgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIgJXMgbm90IGZvdW5kIGluIGRyb3Bkb3duIG1lbnUgXG4iICUgaXRlbSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxJZihUcnVlKQorICAgICAgICBmb3IgaXRlbSBpbiB1bnNlbGVjdGFibGVfY2hlY2tfbGlzdDoKKyAgICAgICAgICAgIGlmIGl0ZW0gbm90IGluIHVuc2VsZWN0YWJsZV9saXN0OgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIgJXMgbm90IGZvdW5kIGluIGRyb3Bkb3duIG1lbnUgXG4iICUgaXRlbSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxJZihUcnVlKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgc3RlcCA3CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiRGlyZWN0b3J5IHN0cnVjdHVyZSIpLmNsaWNrKCkKKyAgICAgICAgaGVhZF9saXN0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCdkaXJ0YWJsZScpCisgICAgICAgIGZvciBpdGVtIGluIFsnRGlyZWN0b3J5IC8gRmlsZScsICdTeW1ib2xpYyBsaW5rIHRvJywgJ1NvdXJjZSBwYWNrYWdlJywgJ1NpemUnLCAnUGVybWlzc2lvbnMnLCAnT3duZXInLCAnR3JvdXAnXToKKyAgICAgICAgICAgIGlmIGl0ZW0gbm90IGluIGhlYWRfbGlzdDoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiICVzIG5vdCBmb3VuZCBpbiBEaXJlY3Rvcnkgc3RydWN0dXJlIHRhYmxlIGhlYWQgXG4iICUgaXRlbSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxJZihUcnVlKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5NTAgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85NTAoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICAjIHN0ZXAzJjQ6IHNvIGZhciB3ZSdyZSBub3Qgc3VyZSBpZiB0aGVyZSdzICJzdWNjZXNzZnVsIGJ1aWxkIiBvciAiZmFpbGVkCisgICAgICAgICMgYnVpbGQiLklmIGVpdGhlciBvZiB0aGVtIGRvZXNuJ3QgZXhpc3QsIHdlIGNhbiBzdGlsbCBnbyBvbiBvdGhlciBzdGVwcworICAgICAgICBjaGVja19saXN0ID0gWydDb25maWd1cmF0aW9uJywgJ1Rhc2tzJywgJ1JlY2lwZXMnLCAnUGFja2FnZXMnLCAnVGltZScsICdDUFUgdXNhZ2UnLCAnRGlzayBJL08nXQorICAgICAgICBoYXNfc3VjY2Vzc2Z1bF9idWlsZCA9IDEKKyAgICAgICAgaGFzX2ZhaWxlZF9idWlsZCA9IDEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFzc19pY29uID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGNsYXNzPSdpY29uLW9rLXNpZ24gc3VjY2VzcyddIikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYubG9nLmluZm8oIm5vIHN1Y2Nlc3NmdWwgYnVpbGQgZXhpc3RzIikKKyAgICAgICAgICAgIGhhc19zdWNjZXNzZnVsX2J1aWxkID0gMAorICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBoYXNfc3VjY2Vzc2Z1bF9idWlsZDoKKyAgICAgICAgICAgIHBhc3NfaWNvbi5jbGljaygpCisgICAgICAgICAgICAjIHNhdmUgc2NyZWVuIGhlcmUgdG8gY2hlY2sgaWYgaXQgbWF0Y2hlcyByZXF1aXJlbWVudC4KKyAgICAgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXAzXzEnKQorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gY2hlY2tfbGlzdDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgaXRlbSkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigibGluayAgJXMgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBwYWdlIiAlIGl0ZW0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKFRydWUpCisgICAgICAgICAgICAjIHN0ZXAgNgorICAgICAgICAgICAgY2hlY2tfbGlzdF8yID0gWydQYWNrYWdlcyBpbmNsdWRlZCcsICdUb3RhbCBwYWNrYWdlIHNpemUnLCBcCisgICAgICAgICAgICAgICAgICAgICAgJ0xpY2Vuc2UgbWFuaWZlc3QnLCAnSW1hZ2UgZmlsZXMnXQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuaXNfdGV4dF9wcmVzZW50KGNoZWNrX2xpc3RfMikpCisgICAgICAgICAgICBzZWxmLmRyaXZlci5iYWNrKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmFpbF9pY29uID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGNsYXNzPSdpY29uLW1pbnVzLXNpZ24gZXJyb3InXSIpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBoYXNfZmFpbGVkX2J1aWxkID0gMAorICAgICAgICAgICAgc2VsZi5sb2cuaW5mbygibm8gZmFpbGVkIGJ1aWxkIGV4aXN0cyIpCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIGhhc19mYWlsZWRfYnVpbGQ6CisgICAgICAgICAgICBmYWlsX2ljb24uY2xpY2soKQorICAgICAgICAgICAgIyBzYXZlIHNjcmVlbiBoZXJlIHRvIGNoZWNrIGlmIGl0IG1hdGNoZXMgcmVxdWlyZW1lbnQuCisgICAgICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwM18yJykKKyAgICAgICAgICAgIGZvciBpdGVtIGluIGNoZWNrX2xpc3Q6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsIGl0ZW0pCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoImxpbmsgICVzIGNhbm5vdCBiZSBmb3VuZCBpbiB0aGUgcGFnZSIgJSBpdGVtKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWxJZihUcnVlKQorICAgICAgICAgICAgIyBzdGVwIDcgaW52b2x2ZWQKKyAgICAgICAgICAgIGNoZWNrX2xpc3RfMyA9IFsnTWFjaGluZScsICdEaXN0cm8nLCAnTGF5ZXJzJywgJ1RvdGFsIG51bWJlciBvZiB0YXNrcycsICdUYXNrcyBleGVjdXRlZCcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAnVGFza3Mgbm90IGV4ZWN1dGVkJywgJ1JldXNlJywgJ1JlY2lwZXMgYnVpbHQnLCAnUGFja2FnZXMgYnVpbHQnXQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuaXNfdGV4dF9wcmVzZW50KGNoZWNrX2xpc3RfMykpCisgICAgICAgICAgICBzZWxmLmRyaXZlci5iYWNrKCkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTUxICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTUxKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgIyBjdXJyZW50bHkgdGVzdCBjYXNlIGl0c2VsZiBpc24ndCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgIjEgc3VjY2Vzc2Z1bCBhbmQKKyAgICAgICAgIyAxIGZhaWxlZCBidWlsZCIKKyAgICAgICAgaGFzX3N1Y2Nlc3NmdWxfYnVpbGQgPSAxCisgICAgICAgIGhhc19mYWlsZWRfYnVpbGQgPSAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZhaWxfaWNvbiA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BjbGFzcz0naWNvbi1taW51cy1zaWduIGVycm9yJ10iKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgaGFzX2ZhaWxlZF9idWlsZCA9IDAKKyAgICAgICAgICAgIHNlbGYubG9nLmluZm8oIm5vIGZhaWxlZCBidWlsZCBleGlzdHMiKQorICAgICAgICAgICAgcGFzcworICAgICAgICAjIGlmIHRoZXJlJ3MgZmFpbGVkIGJ1aWxkLCB3ZSBjYW4gcHJvY2VlZAorICAgICAgICBpZiBoYXNfZmFpbGVkX2J1aWxkOgorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJlcnJvciIpLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorICAgICAgICAjIG5vdCBzdXJlIGlmIHRoZXJlICJtdXN0IGJlIiBzb21lIHdhcm5pbmdzLCBzbyBoZXJlIHNhdmUgYSBzY3JlZW4KKyAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwNCcpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDk1NSAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0Xzk1NShzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYubG9nLmluZm8oIiBZb3Ugc2hvdWxkIG1hbnVhbGx5IGNyZWF0ZSBhbGwgaW1hZ2VzIGJlZm9yZSB0ZXN0IHN0YXJ0cyEiKQorICAgICAgICAjIFNvIGZhciB0aGUgY2FzZSBpdHNlbGYgaXMgbm90IHJlc3BvbnNhYmxlIGZvciBjcmVhdGluZyBhbGwgc29ydHMgb2YgaW1hZ2VzLgorICAgICAgICAjIFNvIGFzc3VtaW5nIHRoZXkgYXJlIGFscmVhZHkgdGhlcmUKKyAgICAgICAgIyBzdGVwIDIKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICAjIHNhdmUgc2NyZWVuIGhlcmUgdG8gc2VlIHRoZSBwYWdlIGNvbXBvbmVudAorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5NTYgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85NTYoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICAjIHN0ZXAgMi0zIG5lZWQgdG8gcnVuIG1hbnVhbGx5CisgICAgICAgIHNlbGYubG9nLmluZm8oInN0ZXAgMi0zOiBjaGVja2luZyB0aGUgaGVscCBtZXNzYWdlIHdoZW4geW91IGhvdmVyIG9uIGhlbHAgaWNvbiBvZiB0YXJnZXQsXAorICAgICAgICAgICAgICAgICAgICAgICB0YXNrcywgcmVjaXBlcywgcGFja2FnZXMgbmVlZCB0byBydW4gbWFudWFsbHkiKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlRvYXN0ZXIgbWFudWFsIikuY2xpY2soKQorICAgICAgICBpZiBub3Qgc2VsZi5pc190ZXh0X3ByZXNlbnQoIlRvYXN0ZXIgTWFudWFsIik6CisgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigicGxlYXNlIGNoZWNrIFtUb2FzdGVyIG1hbnVhbF0gbGluayBvbiBwYWdlIikKKyAgICAgICAgICAgIHNlbGYuZmFpbElmKFRydWUpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90b2FzdGVydWl0ZXN0L3RvYXN0ZXJfdGVzdC5jZmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdG9hc3RlcnVpdGVzdC90b2FzdGVyX3Rlc3QuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MDVmOWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdG9hc3RlcnVpdGVzdC90b2FzdGVyX3Rlc3QuY2ZnCkBAIC0wLDAgKzEsMjEgQEAKKyMgQ29uZmlndXJhdGlvbiBmaWxlIGZvciB0b2FzdGVyX3Rlc3QKKyMgU29ydGVkIGJ5IGRpZmZlcmVudCBob3N0IHR5cGUKKworIyB0ZXN0IGJyb3dzZXIgY291bGQgYmU6IGZpcmVmb3g7IGNocm9tZTsgaWUoc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQpCisjIGxvZ2dpbmdfbGV2ZWwgY291bGQgYmU6IENSSVRJQ0FMOyBFUlJPUjsgV0FSTklORzsgSU5GTzsgREVCVUc7IE5PVFNFVAorCisKK1t0b2FzdGVyX3Rlc3RfbGludXhdCit0b2FzdGVyX3VybCA9ICdodHRwOi8vMTI3LjAuMC4xOjgwMDAnCit0ZXN0X2Jyb3dzZXIgPSAnZmlyZWZveCcKK3Rlc3RfY2FzZXMgPSBbOTQ2XQorbG9nZ2luZ19sZXZlbCA9ICdJTkZPJworCisKK1t0b2FzdGVyX3Rlc3Rfd2luZG93c10KK3RvYXN0ZXJfdXJsID0gJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMCcKK3Rlc3RfYnJvd3NlciA9IFsnaWUnLCAnZmlyZWZveCcsICdjaHJvbWUnXQordGVzdF9jYXNlcyA9IFs5MDEsIDkwMiwgOTAzXQorbG9nZ2luZ19sZXZlbCA9ICdERUJVRycKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdXJsY2hlY2sucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdXJsY2hlY2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgyMGY4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy91cmxjaGVjay5weQpAQCAtMCwwICsxLDUzIEBACitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCitpbXBvcnQgc3lzCisKK2ltcG9ydCBodHRwbGliMgoraW1wb3J0IGNvbmZpZworaW1wb3J0IHVybGxpc3QKKworCitjb25maWcubG9nZ2VyLmluZm8oIlRlc3RpbmcgJXMgd2l0aCAlcyIsIGNvbmZpZy5UT0FTVEVSX0JBU0VVUkwsIGNvbmZpZy5XM0NfVkFMSURBVE9SKQorCitkZWYgdmFsaWRhdGVfaHRtbDUodXJsKToKKyAgICBodHRwX2NsaWVudCA9IGh0dHBsaWIyLkh0dHAoTm9uZSkKKyAgICBzdGF0dXMgPSAiRmFpbGVkIgorICAgIGVycm9ycyA9IC0xCisgICAgd2FybmluZ3MgPSAtMQorCisgICAgdXJscmVxdWVzdCA9IGNvbmZpZy5XM0NfVkFMSURBVE9SK3VybAorCisgICAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CisgICAgIyB3ZSBkaXNhYmxlIHRoZSBicm9hZC1leGNlcHQgYmVjYXVzZSB3ZSB3YW50IHRvIGFjdHVhbGx5IGNhdGNoIGFsbCBwb3NzaWJsZSBleGNlcHRpb25zCisgICAgdHJ5OgorICAgICAgICByZXNwLCBfID0gaHR0cF9jbGllbnQucmVxdWVzdCh1cmxyZXF1ZXN0LCAiSEVBRCIpCisgICAgICAgIGlmIHJlc3BbJ3gtdzNjLXZhbGlkYXRvci1zdGF0dXMnXSAhPSAiQWJvcnQiOgorICAgICAgICAgICAgc3RhdHVzID0gcmVzcFsneC13M2MtdmFsaWRhdG9yLXN0YXR1cyddCisgICAgICAgICAgICBlcnJvcnMgPSBpbnQocmVzcFsneC13M2MtdmFsaWRhdG9yLWVycm9ycyddKQorICAgICAgICAgICAgd2FybmluZ3MgPSBpbnQocmVzcFsneC13M2MtdmFsaWRhdG9yLXdhcm5pbmdzJ10pCisKKyAgICAgICAgICAgIGlmIHN0YXR1cyA9PSAnSW52YWxpZCc6CisgICAgICAgICAgICAgICAgY29uZmlnLmxvZ2dlci53YXJuKCJGYWlsZWQgJXMgaXMgJXNcdGVycm9ycyAlcyB3YXJuaW5ncyAlcyAoY2hlY2sgYXQgJXMpIiwgdXJsLCBzdGF0dXMsIGVycm9ycywgd2FybmluZ3MsIHVybHJlcXVlc3QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoIk9LISAlcyIsIHVybCkKKworICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICBjb25maWcubG9nZ2VyLndhcm4oIkZhaWxlZCB2YWxpZGF0aW9uIGNhbGw6ICVzIiwgZXhjKQorICAgIHJldHVybiAoc3RhdHVzLCBlcnJvcnMsIHdhcm5pbmdzKQorCisKK2RlZiBwcmludF92YWxpZGF0aW9uKHVybCk6CisgICAgc3RhdHVzLCBlcnJvcnMsIHdhcm5pbmdzID0gdmFsaWRhdGVfaHRtbDUodXJsKQorICAgIGNvbmZpZy5sb2dnZXIuZXJyb3IoInVybCAlcyBpcyAlc1x0ZXJyb3JzICVzIHdhcm5pbmdzICVzIChjaGVjayBhdCAlcykiLCB1cmwsIHN0YXR1cywgZXJyb3JzLCB3YXJuaW5ncywgY29uZmlnLlczQ19WQUxJREFUT1IrdXJsKQorCisKK2RlZiBtYWluKCk6CisgICAgcHJpbnQoIlRlc3RpbmcgJXMgd2l0aCAlcyIgJSAoY29uZmlnLlRPQVNURVJfQkFTRVVSTCwgY29uZmlnLlczQ19WQUxJREFUT1IpKQorCisgICAgaWYgbGVuKHN5cy5hcmd2KSA+IDE6CisgICAgICAgIHByaW50X3ZhbGlkYXRpb24oc3lzLmFyZ3ZbMV0pCisgICAgZWxzZToKKyAgICAgICAgZm9yIHVybCBpbiB1cmxsaXN0LlVSTFM6CisgICAgICAgICAgICBwcmludF92YWxpZGF0aW9uKGNvbmZpZy5UT0FTVEVSX0JBU0VVUkwrdXJsKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3VybGxpc3QucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdXJsbGlzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGI5ZmZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3VybGxpc3QucHkKQEAgLTAsMCArMSwzOSBAQAorVVJMUyA9IFsKKyAgICAndG9hc3Rlcmd1aS9sYW5kaW5nLycsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGRzLycsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMScsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS90YXNrcy8nLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvdGFza3MvMS8nLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvdGFzay8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3JlY2lwZXMvJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3JlY2lwZS8xL2FjdGl2ZV90YWIvMScsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS9yZWNpcGUvMScsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS9yZWNpcGVfcGFja2FnZXMvMScsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS9wYWNrYWdlcy8nLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvcGFja2FnZS8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3BhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzLzEnLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvcGFja2FnZV9pbmNsdWRlZF9kZXRhaWwvMS8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3BhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzLzEvMScsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS9wYWNrYWdlX2luY2x1ZGVkX3JldmVyc2VfZGVwZW5kZW5jaWVzLzEvMScsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS90YXJnZXQvMScsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS90YXJnZXQvMS90YXJnZXRwa2cnLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvdGFyZ2V0LzEvZGlyaW5mbycsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS90YXJnZXQvMS9kaXJpbmZvX2ZpbGVwYXRoL18vYmluL2Jhc2gnLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvY29uZmlndXJhdGlvbicsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS9jb25maWd2YXJzJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL2J1aWxkdGltZScsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS9jcHV1c2FnZScsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS9kaXNraW8nLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvdGFyZ2V0LzEvcGFja2FnZWZpbGUvMScsCisgICAgJ3RvYXN0ZXJndWkvbmV3cHJvamVjdC8nLAorICAgICd0b2FzdGVyZ3VpL3Byb2plY3RzLycsCisgICAgJ3RvYXN0ZXJndWkvcHJvamVjdC8xJywKKyAgICAndG9hc3Rlcmd1aS9wcm9qZWN0LzEvY29uZmlndXJhdGlvbicsCisgICAgJ3RvYXN0ZXJndWkvcHJvamVjdC8xL2J1aWxkcy8nLAorICAgICd0b2FzdGVyZ3VpL3Byb2plY3QvMS9sYXllcnMvJywKKyAgICAndG9hc3Rlcmd1aS9wcm9qZWN0LzEvbGF5ZXIvMScsCisgICAgJ3RvYXN0ZXJndWkvcHJvamVjdC8xL2ltcG9ydGxheWVyJywKKyAgICAndG9hc3Rlcmd1aS9wcm9qZWN0LzEvdGFyZ2V0cy8nLAorICAgICd0b2FzdGVyZ3VpL3Byb2plY3QvMS9tYWNoaW5lcy8nLAorICAgICd0b2FzdGVyZ3VpLycsCitdCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZWFhMTFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weQpAQCAtMCwwICsxLDEwIEBACisjIS91c3IvYmluL2VudiBweXRob24KK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG9zLmVudmlyb24uc2V0ZGVmYXVsdCgiREpBTkdPX1NFVFRJTkdTX01PRFVMRSIsICJ0b2FzdGVybWFpbi5zZXR0aW5ncyIpCisKKyAgICBmcm9tIGRqYW5nby5jb3JlLm1hbmFnZW1lbnQgaW1wb3J0IGV4ZWN1dGVfZnJvbV9jb21tYW5kX2xpbmUKKworICAgIGV4ZWN1dGVfZnJvbV9jb21tYW5kX2xpbmUoc3lzLmFyZ3YpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9tYW5hZ2VtZW50L19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9tYW5hZ2VtZW50L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWFuYWdlbWVudC9jb21tYW5kcy9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWFuYWdlbWVudC9jb21tYW5kcy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9tYW5hZ2VtZW50L2NvbW1hbmRzL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvY29tbWFuZHMvbHN1cGRhdGVzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9tYW5hZ2VtZW50L2NvbW1hbmRzL2xzdXBkYXRlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWU5NTEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9tYW5hZ2VtZW50L2NvbW1hbmRzL2xzdXBkYXRlcy5weQpAQCAtMCwwICsxLDEyIEBACitmcm9tIGRqYW5nby5jb3JlLm1hbmFnZW1lbnQuYmFzZSBpbXBvcnQgTm9BcmdzQ29tbWFuZCwgQ29tbWFuZEVycm9yCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IExheWVyU291cmNlCitpbXBvcnQgb3MKKworY2xhc3MgQ29tbWFuZChOb0FyZ3NDb21tYW5kKToKKyAgICBhcmdzICAgID0gIiIKKyAgICBoZWxwICAgID0gIlVwZGF0ZXMgbG9jYWxseSBjYWNoZWQgaW5mb3JtYXRpb24gZnJvbSBhbGwgTGF5ZXJTb3VyY2VzIgorCisKKyAgICBkZWYgaGFuZGxlX25vYXJncyhzZWxmLCAqKm9wdGlvbnMpOgorICAgICAgICBmb3IgbHMgaW4gTGF5ZXJTb3VyY2Uub2JqZWN0cy5hbGwoKToKKyAgICAgICAgICAgIGxzLnVwZGF0ZSgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwMV9pbml0aWFsLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDFfaW5pdGlhbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWRlZWY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDFfaW5pdGlhbC5weQpAQCAtMCwwICsxLDQwMCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0J1aWxkJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fYnVpbGQnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbWFjaGluZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ2ltYWdlX2ZzdHlwZXMnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICAgICAgKCdkaXN0cm8nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICAgICAgKCdkaXN0cm9fdmVyc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ3N0YXJ0ZWRfb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJykoKSksCisgICAgICAgICAgICAoJ2NvbXBsZXRlZF9vbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKSgpKSwKKyAgICAgICAgICAgICgnb3V0Y29tZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MikpLAorICAgICAgICAgICAgKCdlcnJvcnNfbm8nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApKSwKKyAgICAgICAgICAgICgnd2FybmluZ3Nfbm8nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApKSwKKyAgICAgICAgICAgICgnY29va2VyX2xvZ19wYXRoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD01MDApKSwKKyAgICAgICAgICAgICgnYnVpbGRfbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ2JpdGJha2VfdmVyc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NTApKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydCdWlsZCddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdUYXJnZXQnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV90YXJnZXQnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnYnVpbGQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5CdWlsZCddKSksCisgICAgICAgICAgICAoJ3RhcmdldCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ2lzX2ltYWdlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJykoZGVmYXVsdD1GYWxzZSkpLAorICAgICAgICAgICAgKCdmaWxlX25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICAgICAgKCdmaWxlX3NpemUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydUYXJnZXQnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnVGFzaycKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3Rhc2snLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnYnVpbGQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShyZWxhdGVkX25hbWU9J3Rhc2tfYnVpbGQnLCB0bz1vcm1bJ29ybS5CdWlsZCddKSksCisgICAgICAgICAgICAoJ29yZGVyJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykobnVsbD1UcnVlKSksCisgICAgICAgICAgICAoJ3Rhc2tfZXhlY3V0ZWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnKShkZWZhdWx0PUZhbHNlKSksCisgICAgICAgICAgICAoJ291dGNvbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTUpKSwKKyAgICAgICAgICAgICgnc3N0YXRlX2NoZWNrc3VtJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgncGF0aF90b19zc3RhdGVfb2JqJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9NTAwLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ3JlY2lwZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0nYnVpbGRfcmVjaXBlJywgdG89b3JtWydvcm0uUmVjaXBlJ10pKSwKKyAgICAgICAgICAgICgndGFza19uYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnc291cmNlX3VybCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnKShtYXhfbGVuZ3RoPTI1NSwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCd3b3JrX2RpcmVjdG9yeScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnKShtYXhfbGVuZ3RoPTI1NSwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdzY3JpcHRfdHlwZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCkpLAorICAgICAgICAgICAgKCdsaW5lX251bWJlcicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCkpLAorICAgICAgICAgICAgKCdkaXNrX2lvJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykobnVsbD1UcnVlKSksCisgICAgICAgICAgICAoJ2NwdV91c2FnZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcpKG51bGw9VHJ1ZSwgbWF4X2RpZ2l0cz02LCBkZWNpbWFsX3BsYWNlcz0yKSksCisgICAgICAgICAgICAoJ2VsYXBzZWRfdGltZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKGRlZmF1bHQ9MCwgbWF4X2xlbmd0aD01MCkpLAorICAgICAgICAgICAgKCdzc3RhdGVfcmVzdWx0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSksCisgICAgICAgICAgICAoJ21lc3NhZ2UnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI0MCkpLAorICAgICAgICAgICAgKCdsb2dmaWxlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1LCBibGFuaz1UcnVlKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnVGFzayddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdUYXNrX0RlcGVuZGVuY3knCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV90YXNrX2RlcGVuZGVuY3knLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgndGFzaycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0ndGFza19kZXBlbmRlbmNpZXNfdGFzaycsIHRvPW9ybVsnb3JtLlRhc2snXSkpLAorICAgICAgICAgICAgKCdkZXBlbmRzX29uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSd0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJywgdG89b3JtWydvcm0uVGFzayddKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnVGFza19EZXBlbmRlbmN5J10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1BhY2thZ2UnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9wYWNrYWdlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ2J1aWxkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uQnVpbGQnXSkpLAorICAgICAgICAgICAgKCdyZWNpcGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5SZWNpcGUnXSwgbnVsbD1UcnVlKSksCisgICAgICAgICAgICAoJ25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICAgICAgKCd2ZXJzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgncmV2aXNpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTMyLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ3N1bW1hcnknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTIwMCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdkZXNjcmlwdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjAwLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ3NpemUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApKSwKKyAgICAgICAgICAgICgnaW5zdGFsbGVkX3NpemUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApKSwKKyAgICAgICAgICAgICgnc2VjdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9ODAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnbGljZW5zZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9ODAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydQYWNrYWdlJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1BhY2thZ2VfRGVwZW5kZW5jeScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3BhY2thZ2VfZGVwZW5kZW5jeScsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdwYWNrYWdlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnLCB0bz1vcm1bJ29ybS5QYWNrYWdlJ10pKSwKKyAgICAgICAgICAgICgnZGVwZW5kc19vbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0ncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JywgdG89b3JtWydvcm0uUGFja2FnZSddKSksCisgICAgICAgICAgICAoJ2RlcF90eXBlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoKSksCisgICAgICAgICAgICAoJ3RhcmdldCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlRhcmdldCddLCBudWxsPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydQYWNrYWdlX0RlcGVuZGVuY3knXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fdGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3RhcmdldCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlRhcmdldCddKSksCisgICAgICAgICAgICAoJ3BhY2thZ2UnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5QYWNrYWdlJ10pKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnUGFja2FnZV9GaWxlJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcGFja2FnZV9maWxlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3BhY2thZ2UnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShyZWxhdGVkX25hbWU9J2J1aWxkZmlsZWxpc3RfcGFja2FnZScsIHRvPW9ybVsnb3JtLlBhY2thZ2UnXSkpLAorICAgICAgICAgICAgKCdwYXRoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1LCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ3NpemUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydQYWNrYWdlX0ZpbGUnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnUmVjaXBlJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcmVjaXBlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCd2ZXJzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnbGF5ZXJfdmVyc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0ncmVjaXBlX2xheWVyX3ZlcnNpb24nLCB0bz1vcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10pKSwKKyAgICAgICAgICAgICgnc3VtbWFyeScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnc2VjdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ2xpY2Vuc2UnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTIwMCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdsaWNlbnNpbmdfaW5mbycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnaG9tZXBhZ2UnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcpKG1heF9sZW5ndGg9MjAwLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ2J1Z3RyYWNrZXInLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcpKG1heF9sZW5ndGg9MjAwLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ2ZpbGVfcGF0aCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnKShtYXhfbGVuZ3RoPTI1NSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1JlY2lwZSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdSZWNpcGVfRGVwZW5kZW5jeScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3JlY2lwZV9kZXBlbmRlbmN5JywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3JlY2lwZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0ncl9kZXBlbmRlbmNpZXNfcmVjaXBlJywgdG89b3JtWydvcm0uUmVjaXBlJ10pKSwKKyAgICAgICAgICAgICgnZGVwZW5kc19vbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0ncl9kZXBlbmRlbmNpZXNfZGVwZW5kcycsIHRvPW9ybVsnb3JtLlJlY2lwZSddKSksCisgICAgICAgICAgICAoJ2RlcF90eXBlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnUmVjaXBlX0RlcGVuZGVuY3knXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnTGF5ZXInCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9sYXllcicsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCduYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnbG9jYWxfcGF0aCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnKShtYXhfbGVuZ3RoPTI1NSkpLAorICAgICAgICAgICAgKCdsYXllcl9pbmRleF91cmwnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcpKG1heF9sZW5ndGg9MjAwKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnTGF5ZXInXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnTGF5ZXJfVmVyc2lvbicKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnYnVpbGQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShyZWxhdGVkX25hbWU9J2xheWVyX3ZlcnNpb25fYnVpbGQnLCB0bz1vcm1bJ29ybS5CdWlsZCddKSksCisgICAgICAgICAgICAoJ2xheWVyJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdsYXllcl92ZXJzaW9uX2xheWVyJywgdG89b3JtWydvcm0uTGF5ZXInXSkpLAorICAgICAgICAgICAgKCdicmFuY2gnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTUwKSksCisgICAgICAgICAgICAoJ2NvbW1pdCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ3ByaW9yaXR5Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnTGF5ZXJfVmVyc2lvbiddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdWYXJpYWJsZScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3ZhcmlhYmxlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ2J1aWxkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSd2YXJpYWJsZV9idWlsZCcsIHRvPW9ybVsnb3JtLkJ1aWxkJ10pKSwKKyAgICAgICAgICAgICgndmFyaWFibGVfbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ3ZhcmlhYmxlX3ZhbHVlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdjaGFuZ2VkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJykoZGVmYXVsdD1GYWxzZSkpLAorICAgICAgICAgICAgKCdodW1hbl9yZWFkYWJsZV9uYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0yMDApKSwKKyAgICAgICAgICAgICgnZGVzY3JpcHRpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShibGFuaz1UcnVlKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnVmFyaWFibGUnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnVmFyaWFibGVIaXN0b3J5JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fdmFyaWFibGVoaXN0b3J5JywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3ZhcmlhYmxlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uVmFyaWFibGUnXSkpLAorICAgICAgICAgICAgKCdmaWxlX25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0yNTUpKSwKKyAgICAgICAgICAgICgnbGluZV9udW1iZXInLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgnb3BlcmF0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xNikpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1ZhcmlhYmxlSGlzdG9yeSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdMb2dNZXNzYWdlJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fbG9nbWVzc2FnZScsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdidWlsZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkJ1aWxkJ10pKSwKKyAgICAgICAgICAgICgnbGV2ZWwnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApKSwKKyAgICAgICAgICAgICgnbWVzc2FnZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjQwKSksCisgICAgICAgICAgICAoJ3BhdGhuYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1LCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ2xpbmVubycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKG51bGw9VHJ1ZSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ0xvZ01lc3NhZ2UnXSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdCdWlsZCcKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX2J1aWxkJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdUYXJnZXQnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV90YXJnZXQnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1Rhc2snCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV90YXNrJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdUYXNrX0RlcGVuZGVuY3knCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV90YXNrX2RlcGVuZGVuY3knKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1BhY2thZ2UnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9wYWNrYWdlJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdQYWNrYWdlX0RlcGVuZGVuY3knCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9wYWNrYWdlX2RlcGVuZGVuY3knKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3RhcmdldF9pbnN0YWxsZWRfcGFja2FnZScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnUGFja2FnZV9GaWxlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fcGFja2FnZV9maWxlJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdSZWNpcGUnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9yZWNpcGUnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1JlY2lwZV9EZXBlbmRlbmN5JworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fcmVjaXBlX2RlcGVuZGVuY3knKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0xheWVyJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fbGF5ZXInKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0xheWVyX1ZlcnNpb24nCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9sYXllcl92ZXJzaW9uJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdWYXJpYWJsZScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3ZhcmlhYmxlJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdWYXJpYWJsZUhpc3RvcnknCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV92YXJpYWJsZWhpc3RvcnknKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0xvZ01lc3NhZ2UnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9sb2dtZXNzYWdlJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX2ZzdHlwZXMnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGljZW5zaW5nX2luZm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnNSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwMl9hdXRvX19hZGRfZmllbGRfYnVpbGRfdGltZXNwZW50LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDJfYXV0b19fYWRkX2ZpZWxkX2J1aWxkX3RpbWVzcGVudC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTQyMWNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDJfYXV0b19fYWRkX2ZpZWxkX2J1aWxkX3RpbWVzcGVudC5weQpAQCAtMCwwICsxLDE4MCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0J1aWxkLnRpbWVzcGVudCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9idWlsZCcsICd0aW1lc3BlbnQnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0J1aWxkLnRpbWVzcGVudCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9idWlsZCcsICd0aW1lc3BlbnQnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2VfZnN0eXBlcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGljZW5zaW5nX2luZm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnNSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwM190aW1lc3BlbnQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwM190aW1lc3BlbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYwMGY5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDAzX3RpbWVzcGVudC5weQpAQCAtMCwwICsxLDE4MiBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgRGF0YU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCitjbGFzcyBNaWdyYXRpb24oRGF0YU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIldyaXRlIHlvdXIgZm9yd2FyZHMgbWV0aG9kcyBoZXJlLiIKKyAgICAgICAgIyBOb3RlOiBEb24ndCB1c2UgImZyb20gYXBwbmFtZS5tb2RlbHMgaW1wb3J0IE1vZGVsTmFtZSIuCisgICAgICAgICMgVXNlIG9ybS5Nb2RlbE5hbWUgdG8gcmVmZXIgdG8gbW9kZWxzIGluIHRoaXMgYXBwbGljYXRpb24sCisgICAgICAgICMgYW5kIG9ybVsnYXBwbmFtZS5Nb2RlbE5hbWUnXSBmb3IgbW9kZWxzIGluIG90aGVyIGFwcGxpY2F0aW9ucy4KKworICAgICAgICBmb3IgYnVpbGQgaW4gb3JtLkJ1aWxkLm9iamVjdHMuYWxsKCk6CisgICAgICAgICAgICBidWlsZC50aW1lc3BlbnQgPSBpbnQoKGJ1aWxkLmNvbXBsZXRlZF9vbiAtIGJ1aWxkLnN0YXJ0ZWRfb24pLnRvdGFsX3NlY29uZHMoKSkKKyAgICAgICAgICAgIGJ1aWxkLnNhdmUoKQorCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAiV3JpdGUgeW91ciBiYWNrd2FyZHMgbWV0aG9kcyBoZXJlLiIKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4iKQorCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX2ZzdHlwZXMnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGljZW5zaW5nX2luZm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnNSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddCisgICAgc3ltbWV0cmljYWwgPSBUcnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwNF9hdXRvX19hZGRfZmllbGRfcGFja2FnZV9pbnN0YWxsZWRfbmFtZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA0X2F1dG9fX2FkZF9maWVsZF9wYWNrYWdlX2luc3RhbGxlZF9uYW1lLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNDQ0NWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwNF9hdXRvX19hZGRfZmllbGRfcGFja2FnZV9pbnN0YWxsZWRfbmFtZS5weQpAQCAtMCwwICsxLDE4MSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1BhY2thZ2UuaW5zdGFsbGVkX25hbWUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcGFja2FnZScsICdpbnN0YWxsZWRfbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD0xMDApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdQYWNrYWdlLmluc3RhbGxlZF9uYW1lJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3BhY2thZ2UnLCAnaW5zdGFsbGVkX25hbWUnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2VfZnN0eXBlcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNpbmdfaW5mbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCcsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICc1J30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA1X2F1dG9fX2FkZF90YXJnZXRfaW1hZ2VfZmlsZV9fYWRkX3RhcmdldF9maWxlX19hZGRfZmllbGRfdmFyaWFibGVoaXN0b3IucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwNV9hdXRvX19hZGRfdGFyZ2V0X2ltYWdlX2ZpbGVfX2FkZF90YXJnZXRfZmlsZV9fYWRkX2ZpZWxkX3ZhcmlhYmxlaGlzdG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZTdhYzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwNV9hdXRvX19hZGRfdGFyZ2V0X2ltYWdlX2ZpbGVfX2FkZF90YXJnZXRfZmlsZV9fYWRkX2ZpZWxkX3ZhcmlhYmxlaGlzdG9yLnB5CkBAIC0wLDAgKzEsMjgxIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBtb2RlbCAnVGFyZ2V0X0ZpbGUnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV90YXJnZXRfZmlsZScsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCd0YXJnZXQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5UYXJnZXQnXSkpLAorICAgICAgICAgICAgKCdwYXRoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ3NpemUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgICAgICgnaW5vZGV0eXBlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoKSksCisgICAgICAgICAgICAoJ3Blcm1pc3Npb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgICAgICgnb3duZXInLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEyOCkpLAorICAgICAgICAgICAgKCdncm91cCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTI4KSksCisgICAgICAgICAgICAoJ2RpcmVjdG9yeScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0nZGlyZWN0b3J5X3NldCcsIHRvPW9ybVsnb3JtLlRhcmdldF9GaWxlJ10pKSwKKyAgICAgICAgICAgICgnc3ltX3RhcmdldCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0nc3ltbGlua19zZXQnLCBibGFuaz1UcnVlLCB0bz1vcm1bJ29ybS5UYXJnZXRfRmlsZSddKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnVGFyZ2V0X0ZpbGUnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnVGFyZ2V0X0ltYWdlX0ZpbGUnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV90YXJnZXRfaW1hZ2VfZmlsZScsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCd0YXJnZXQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5UYXJnZXQnXSkpLAorICAgICAgICAgICAgKCdmaWxlX25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnZmlsZV9zaXplJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnVGFyZ2V0X0ltYWdlX0ZpbGUnXSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnVmFyaWFibGVIaXN0b3J5LnZhbHVlJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3ZhcmlhYmxlaGlzdG9yeScsICd2YWx1ZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoZGVmYXVsdD0nJywgYmxhbms9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1JlY2lwZS5saWNlbnNpbmdfaW5mbycKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9yZWNpcGUnLCAnbGljZW5zaW5nX2luZm8nKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1RhcmdldC5maWxlX25hbWUnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fdGFyZ2V0JywgJ2ZpbGVfbmFtZScpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnVGFyZ2V0LmZpbGVfc2l6ZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV90YXJnZXQnLCAnZmlsZV9zaXplJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdCdWlsZC5pbWFnZV9mc3R5cGVzJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2J1aWxkJywgJ2ltYWdlX2ZzdHlwZXMnKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMb2dNZXNzYWdlLnRhc2snCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbG9nbWVzc2FnZScsICd0YXNrJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5UYXNrJ10sIG51bGw9VHJ1ZSwgYmxhbms9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVGFzay5lbGFwc2VkX3RpbWUnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV90YXNrJywgJ2VsYXBzZWRfdGltZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcpKG51bGw9VHJ1ZSwgbWF4X2RpZ2l0cz02LCBkZWNpbWFsX3BsYWNlcz0yKSkKKyAgICAgICAgIyBBZGRpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ1Rhc2snLCBmaWVsZHMgWydidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJ10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J29ybV90YXNrJywgWydidWlsZF9pZCcsICdyZWNpcGVfaWQnLCAndGFza19uYW1lJ10pCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBSZW1vdmluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnVGFzaycsIGZpZWxkcyBbJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX3Rhc2snLCBbJ2J1aWxkX2lkJywgJ3JlY2lwZV9pZCcsICd0YXNrX25hbWUnXSkKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdUYXJnZXRfRmlsZScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3RhcmdldF9maWxlJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdUYXJnZXRfSW1hZ2VfRmlsZScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3RhcmdldF9pbWFnZV9maWxlJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdWYXJpYWJsZUhpc3RvcnkudmFsdWUnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fdmFyaWFibGVoaXN0b3J5JywgJ3ZhbHVlJykKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUmVjaXBlLmxpY2Vuc2luZ19pbmZvJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlY2lwZScsICdsaWNlbnNpbmdfaW5mbycsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoZGVmYXVsdD0nJywgYmxhbms9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdUYXJnZXQuZmlsZV9uYW1lJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3RhcmdldCcsICdmaWxlX25hbWUnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKGRlZmF1bHQ9JycsIG1heF9sZW5ndGg9MTAwKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1RhcmdldC5maWxlX3NpemUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fdGFyZ2V0JywgJ2ZpbGVfc2l6ZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0J1aWxkLmltYWdlX2ZzdHlwZXMnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fYnVpbGQnLCAnaW1hZ2VfZnN0eXBlcycsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD0xMDApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdMb2dNZXNzYWdlLnRhc2snCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbG9nbWVzc2FnZScsICd0YXNrX2lkJykKKworCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1Rhc2suZWxhcHNlZF90aW1lJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdGFzaycsICdlbGFwc2VkX3RpbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTUwKSkKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdibGFuayc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwNl9hdXRvX19hZGRfZmllbGRfdGFyZ2V0X2ltYWdlX3NpemVfX2FkZF9maWVsZF90YXJnZXRfbGljZW5zZV9tYW5pZmVzdF9wLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDZfYXV0b19fYWRkX2ZpZWxkX3RhcmdldF9pbWFnZV9zaXplX19hZGRfZmllbGRfdGFyZ2V0X2xpY2Vuc2VfbWFuaWZlc3RfcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmJlMzBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDZfYXV0b19fYWRkX2ZpZWxkX3RhcmdldF9pbWFnZV9zaXplX19hZGRfZmllbGRfdGFyZ2V0X2xpY2Vuc2VfbWFuaWZlc3RfcC5weQpAQCAtMCwwICsxLDIzNSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1RhcmdldC5pbWFnZV9zaXplJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3RhcmdldCcsICdpbWFnZV9zaXplJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnVGFyZ2V0LmxpY2Vuc2VfbWFuaWZlc3RfcGF0aCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV90YXJnZXQnLCAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTUwMCwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXJnZXRfRmlsZS5wZXJtaXNzaW9uJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdGFyZ2V0X2ZpbGUnLCAncGVybWlzc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTYpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1RhcmdldF9GaWxlLnN5bV90YXJnZXQnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV90YXJnZXRfZmlsZScsICdzeW1fdGFyZ2V0X2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykobnVsbD1UcnVlLCB0bz1vcm1bJ29ybS5UYXJnZXRfRmlsZSddKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXJnZXRfRmlsZS5kaXJlY3RvcnknCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV90YXJnZXRfZmlsZScsICdkaXJlY3RvcnlfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShudWxsPVRydWUsIHRvPW9ybVsnb3JtLlRhcmdldF9GaWxlJ10pKQorCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdUYXJnZXQuaW1hZ2Vfc2l6ZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV90YXJnZXQnLCAnaW1hZ2Vfc2l6ZScpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnVGFyZ2V0LmxpY2Vuc2VfbWFuaWZlc3RfcGF0aCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV90YXJnZXQnLCAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJykKKworCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1RhcmdldF9GaWxlLnBlcm1pc3Npb24nCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV90YXJnZXRfZmlsZScsICdwZXJtaXNzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoKSkKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdUYXJnZXRfRmlsZS5zeW1fdGFyZ2V0JworICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uLiAnVGFyZ2V0X0ZpbGUuc3ltX3RhcmdldCcgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24KKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVGFyZ2V0X0ZpbGUuc3ltX3RhcmdldCcKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3RhcmdldF9maWxlJywgJ3N5bV90YXJnZXRfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5UYXJnZXRfRmlsZSddKSkKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdUYXJnZXRfRmlsZS5kaXJlY3RvcnknCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IHJldmVyc2UgdGhpcyBtaWdyYXRpb24uICdUYXJnZXRfRmlsZS5kaXJlY3RvcnknIGFuZCBpdHMgdmFsdWVzIGNhbm5vdCBiZSByZXN0b3JlZC4iKQorICAgICAgICAKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgcHJvdmlkZWQgaGVyZSB0byBhaWQgaW4gd3JpdGluZyBhIGNvcnJlY3QgbWlncmF0aW9uCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1RhcmdldF9GaWxlLmRpcmVjdG9yeScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3RhcmdldF9maWxlJywgJ2RpcmVjdG9yeV9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlRhcmdldF9GaWxlJ10pKQorCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwN19hdXRvX19hZGRfaGVscHRleHQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwN19hdXRvX19hZGRfaGVscHRleHQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0YzUzNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA3X2F1dG9fX2FkZF9oZWxwdGV4dC5weQpAQCAtMCwwICsxLDIxNCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0hlbHBUZXh0JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1faGVscHRleHQnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnYnVpbGQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShyZWxhdGVkX25hbWU9J2hlbHB0ZXh0X2J1aWxkJywgdG89b3JtWydvcm0uQnVpbGQnXSkpLAorICAgICAgICAgICAgKCdhcmVhJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoKSksCisgICAgICAgICAgICAoJ2tleScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ3RleHQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKSgpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydIZWxwVGV4dCddKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0hlbHBUZXh0JworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1faGVscHRleHQnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwOF9hdXRvX19jaGdfZmllbGRfdmFyaWFibGVoaXN0b3J5X29wZXJhdGlvbl9fY2hnX2ZpZWxkX3JlY2lwZV9kZXNjcmlwdGlvLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDhfYXV0b19fY2hnX2ZpZWxkX3ZhcmlhYmxlaGlzdG9yeV9vcGVyYXRpb25fX2NoZ19maWVsZF9yZWNpcGVfZGVzY3JpcHRpby5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2U0MDhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDhfYXV0b19fY2hnX2ZpZWxkX3ZhcmlhYmxlaGlzdG9yeV9vcGVyYXRpb25fX2NoZ19maWVsZF9yZWNpcGVfZGVzY3JpcHRpby5weQpAQCAtMCwwICsxLDIyNSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdWYXJpYWJsZUhpc3Rvcnkub3BlcmF0aW9uJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdmFyaWFibGVoaXN0b3J5JywgJ29wZXJhdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NjQpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1JlY2lwZS5kZXNjcmlwdGlvbicKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3JlY2lwZScsICdkZXNjcmlwdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKCkpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVGFyZ2V0X0ltYWdlX0ZpbGUuZmlsZV9uYW1lJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdGFyZ2V0X2ltYWdlX2ZpbGUnLCAnZmlsZV9uYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdQYWNrYWdlLmRlc2NyaXB0aW9uJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcGFja2FnZScsICdkZXNjcmlwdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKCkpCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVmFyaWFibGVIaXN0b3J5Lm9wZXJhdGlvbicKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3ZhcmlhYmxlaGlzdG9yeScsICdvcGVyYXRpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTE2KSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdSZWNpcGUuZGVzY3JpcHRpb24nCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9yZWNpcGUnLCAnZGVzY3JpcHRpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVGFyZ2V0X0ltYWdlX0ZpbGUuZmlsZV9uYW1lJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdGFyZ2V0X2ltYWdlX2ZpbGUnLCAnZmlsZV9uYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdQYWNrYWdlLmRlc2NyaXB0aW9uJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcGFja2FnZScsICdkZXNjcmlwdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjAwKSkKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA5X2F1dG9fX2FkZF9wcm9qZWN0dmFyaWFibGVfX2FkZF9wcm9qZWN0bGF5ZXJfX2FkZF9wcm9qZWN0dGFyZ2V0X19hZGRfcHIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwOV9hdXRvX19hZGRfcHJvamVjdHZhcmlhYmxlX19hZGRfcHJvamVjdGxheWVyX19hZGRfcHJvamVjdHRhcmdldF9fYWRkX3ByLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNThkYzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwOV9hdXRvX19hZGRfcHJvamVjdHZhcmlhYmxlX19hZGRfcHJvamVjdGxheWVyX19hZGRfcHJvamVjdHRhcmdldF9fYWRkX3ByLnB5CkBAIC0wLDAgKzEsMjg2IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBtb2RlbCAnUHJvamVjdFZhcmlhYmxlJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcHJvamVjdHZhcmlhYmxlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3Byb2plY3QnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5Qcm9qZWN0J10pKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ3ZhbHVlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoYmxhbms9VHJ1ZSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1Byb2plY3RWYXJpYWJsZSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdQcm9qZWN0TGF5ZXInCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9wcm9qZWN0bGF5ZXInLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgncHJvamVjdCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlByb2plY3QnXSkpLAorICAgICAgICAgICAgKCduYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnZ2l0dXJsJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0yNTQpKSwKKyAgICAgICAgICAgICgnY29tbWl0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0yNTQpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydQcm9qZWN0TGF5ZXInXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnUHJvamVjdFRhcmdldCcKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3Byb2plY3R0YXJnZXQnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgncHJvamVjdCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlByb2plY3QnXSkpLAorICAgICAgICAgICAgKCd0YXJnZXQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1Byb2plY3RUYXJnZXQnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnUHJvamVjdCcKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3Byb2plY3QnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ2NyZWF0ZWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJykoYXV0b19ub3dfYWRkPVRydWUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgndXBkYXRlZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKShhdXRvX25vdz1UcnVlLCBibGFuaz1UcnVlKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnUHJvamVjdCddKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdCdWlsZC5wcm9qZWN0JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3Byb2plY3QnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlByb2plY3QnXSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnUHJvamVjdFZhcmlhYmxlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fcHJvamVjdHZhcmlhYmxlJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdQcm9qZWN0TGF5ZXInCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9wcm9qZWN0bGF5ZXInKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1Byb2plY3RUYXJnZXQnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9wcm9qZWN0dGFyZ2V0JykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdQcm9qZWN0JworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fcHJvamVjdCcpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnQnVpbGQucHJvamVjdCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9idWlsZCcsICdwcm9qZWN0X2lkJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxMF9hdXRvX19hZGRfZmllbGRfcHJvamVjdF9icmFuY2hfX2FkZF9maWVsZF9wcm9qZWN0X3Nob3J0X2Rlc2NyaXB0aW9uX19hLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTBfYXV0b19fYWRkX2ZpZWxkX3Byb2plY3RfYnJhbmNoX19hZGRfZmllbGRfcHJvamVjdF9zaG9ydF9kZXNjcmlwdGlvbl9fYS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTFjZTFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTBfYXV0b19fYWRkX2ZpZWxkX3Byb2plY3RfYnJhbmNoX19hZGRfZmllbGRfcHJvamVjdF9zaG9ydF9kZXNjcmlwdGlvbl9fYS5weQpAQCAtMCwwICsxLDI1NyBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1Byb2plY3QuYnJhbmNoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAnYnJhbmNoJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PSdtYXN0ZXInLCBtYXhfbGVuZ3RoPTUwKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1Byb2plY3Quc2hvcnRfZGVzY3JpcHRpb24nCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdzaG9ydF9kZXNjcmlwdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD01MCwgYmxhbms9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0LnVzZXJfaWQnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdCcsICd1c2VyX2lkJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdQcm9qZWN0LmJyYW5jaCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ2JyYW5jaCcpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdC5zaG9ydF9kZXNjcmlwdGlvbicKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ3Nob3J0X2Rlc2NyaXB0aW9uJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdQcm9qZWN0LnVzZXJfaWQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdCcsICd1c2VyX2lkJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3RsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDExX2F1dG9fX2FkZF9maWVsZF9wcm9qZWN0bGF5ZXJfZGlycGF0aC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDExX2F1dG9fX2FkZF9maWVsZF9wcm9qZWN0bGF5ZXJfZGlycGF0aC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTY1MjIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTFfYXV0b19fYWRkX2ZpZWxkX3Byb2plY3RsYXllcl9kaXJwYXRoLnB5CkBAIC0wLDAgKzEsMjQyIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdExheWVyLmRpcnBhdGgnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdGxheWVyJywgJ2RpcnBhdGgnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKGRlZmF1bHQ9JycsIG1heF9sZW5ndGg9MjU0KSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdExheWVyLmRpcnBhdGgnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdGxheWVyJywgJ2RpcnBhdGgnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTJfYXV0b19fYWRkX2ZpZWxkX3Byb2plY3RsYXllcl9vcHRpb25hbF9fYWRkX2ZpZWxkX3Byb2plY3R0YXJnZXRfdGFzay5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDEyX2F1dG9fX2FkZF9maWVsZF9wcm9qZWN0bGF5ZXJfb3B0aW9uYWxfX2FkZF9maWVsZF9wcm9qZWN0dGFyZ2V0X3Rhc2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0ODNmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDEyX2F1dG9fX2FkZF9maWVsZF9wcm9qZWN0bGF5ZXJfb3B0aW9uYWxfX2FkZF9maWVsZF9wcm9qZWN0dGFyZ2V0X3Rhc2sucHkKQEAgLTAsMCArMSwyNTIgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIub3B0aW9uYWwnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdGxheWVyJywgJ29wdGlvbmFsJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnKShkZWZhdWx0PVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdFRhcmdldC50YXNrJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3Byb2plY3R0YXJnZXQnLCAndGFzaycsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDAsIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3RMYXllci5vcHRpb25hbCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnb3B0aW9uYWwnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3RUYXJnZXQudGFzaycKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0dGFyZ2V0JywgJ3Rhc2snKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTNfYXV0b19fYWRkX3JlbGVhc2VfX2FkZF9sYXllcnZlcnNpb25kZXBlbmRlbmN5X19hZGRfdW5pcXVlX2xheWVydmVyc2lvbi5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDEzX2F1dG9fX2FkZF9yZWxlYXNlX19hZGRfbGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeV9fYWRkX3VuaXF1ZV9sYXllcnZlcnNpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M5NTRlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDEzX2F1dG9fX2FkZF9yZWxlYXNlX19hZGRfbGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeV9fYWRkX3VuaXF1ZV9sYXllcnZlcnNpb24ucHkKQEAgLTAsMCArMSw3MTAgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIG1vZGVsICdSZWxlYXNlJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcmVsZWFzZScsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCduYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykodW5pcXVlPVRydWUsIG1heF9sZW5ndGg9MzIpKSwKKyAgICAgICAgICAgICgnZGVzY3JpcHRpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NSkpLAorICAgICAgICAgICAgKCdiaXRiYWtlX3ZlcnNpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddKSksCisgICAgICAgICAgICAoJ2JyYW5jaCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MzIpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydSZWxlYXNlJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9sYXllcnZlcnNpb25kZXBlbmRlbmN5JywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ2xheWVyX3NvdXJjZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKGRlZmF1bHQ9Tm9uZSwgdG89b3JtWydvcm0uTGF5ZXJTb3VyY2UnXSwgbnVsbD1UcnVlKSksCisgICAgICAgICAgICAoJ3VwX2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgnbGF5ZXJfdmVyc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0nZGVwZW5kZW5jaWVzJywgdG89b3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddKSksCisgICAgICAgICAgICAoJ2RlcGVuZHNfb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShyZWxhdGVkX25hbWU9J2RlcGVuZGVlcycsIHRvPW9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knXSkKKworICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeScsIGZpZWxkcyBbJ2xheWVyX3NvdXJjZScsICd1cF9pZCddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fbGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeScsIFsnbGF5ZXJfc291cmNlX2lkJywgJ3VwX2lkJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1RvYXN0ZXJTZXR0aW5nJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fdG9hc3RlcnNldHRpbmcnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NjMpKSwKKyAgICAgICAgICAgICgnaGVscHRleHQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKSgpKSwKKyAgICAgICAgICAgICgndmFsdWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1RvYXN0ZXJTZXR0aW5nJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ01hY2hpbmUnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9tYWNoaW5lJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ2xheWVyX3NvdXJjZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKGRlZmF1bHQ9Tm9uZSwgdG89b3JtWydvcm0uTGF5ZXJTb3VyY2UnXSwgbnVsbD1UcnVlKSksCisgICAgICAgICAgICAoJ3VwX2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgndXBfZGF0ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKShkZWZhdWx0PU5vbmUsIG51bGw9VHJ1ZSkpLAorICAgICAgICAgICAgKCdsYXllcl92ZXJzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddKSksCisgICAgICAgICAgICAoJ25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NSkpLAorICAgICAgICAgICAgKCdkZXNjcmlwdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnTWFjaGluZSddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdNYWNoaW5lJywgZmllbGRzIFsnbGF5ZXJfc291cmNlJywgJ3VwX2lkJ10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J29ybV9tYWNoaW5lJywgWydsYXllcl9zb3VyY2VfaWQnLCAndXBfaWQnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnUmVsZWFzZURlZmF1bHRMYXllcicKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3JlbGVhc2VkZWZhdWx0bGF5ZXInLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgncmVsZWFzZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlJlbGVhc2UnXSkpLAorICAgICAgICAgICAgKCdsYXllcicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkxheWVyJ10pKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydSZWxlYXNlRGVmYXVsdExheWVyJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0JpdGJha2VWZXJzaW9uJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fYml0YmFrZXZlcnNpb24nLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKHVuaXF1ZT1UcnVlLCBtYXhfbGVuZ3RoPTMyKSksCisgICAgICAgICAgICAoJ2dpdHVybCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJykobWF4X2xlbmd0aD0yMDApKSwKKyAgICAgICAgICAgICgnYnJhbmNoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0zMikpLAorICAgICAgICAgICAgKCdkaXJwYXRoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0yNTUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydCaXRiYWtlVmVyc2lvbiddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdCcmFuY2gnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9icmFuY2gnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbGF5ZXJfc291cmNlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykoZGVmYXVsdD1UcnVlLCB0bz1vcm1bJ29ybS5MYXllclNvdXJjZSddLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgndXBfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PU5vbmUsIG51bGw9VHJ1ZSkpLAorICAgICAgICAgICAgKCd1cF9kYXRlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlKSksCisgICAgICAgICAgICAoJ25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTUwKSksCisgICAgICAgICAgICAoJ2JpdGJha2VfYnJhbmNoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD01MCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdzaG9ydF9kZXNjcmlwdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NTAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydCcmFuY2gnXSkKKworICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnQnJhbmNoJywgZmllbGRzIFsnbGF5ZXJfc291cmNlJywgJ25hbWUnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX2JyYW5jaCcsIFsnbGF5ZXJfc291cmNlX2lkJywgJ25hbWUnXSkKKworICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnQnJhbmNoJywgZmllbGRzIFsnbGF5ZXJfc291cmNlJywgJ3VwX2lkJ10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J29ybV9icmFuY2gnLCBbJ2xheWVyX3NvdXJjZV9pZCcsICd1cF9pZCddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdUb2FzdGVyU2V0dGluZ0RlZmF1bHRMYXllcicKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3RvYXN0ZXJzZXR0aW5nZGVmYXVsdGxheWVyJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ2xheWVyX3ZlcnNpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10pKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydUb2FzdGVyU2V0dGluZ0RlZmF1bHRMYXllciddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdMYXllclNvdXJjZScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX2xheWVyc291cmNlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTYzKSksCisgICAgICAgICAgICAoJ3NvdXJjZXR5cGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgICAgICgnYXBpdXJsJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD1Ob25lLCBtYXhfbGVuZ3RoPTI1NSwgbnVsbD1UcnVlKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnTGF5ZXJTb3VyY2UnXSkKKworICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnTGF5ZXJTb3VyY2UnLCBmaWVsZHMgWydzb3VyY2V0eXBlJywgJ2FwaXVybCddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fbGF5ZXJzb3VyY2UnLCBbJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJ10pCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdExheWVyLm5hbWUnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdGxheWVyJywgJ25hbWUnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3RMYXllci5kaXJwYXRoJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3RsYXllcicsICdkaXJwYXRoJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIuY29tbWl0JworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3RsYXllcicsICdjb21taXQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3RMYXllci5naXR1cmwnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdGxheWVyJywgJ2dpdHVybCcpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1Byb2plY3RMYXllci5sYXllcmNvbW1pdCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnbGF5ZXJjb21taXQnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24ubGF5ZXJfc291cmNlJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAnbGF5ZXJfc291cmNlJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShkZWZhdWx0PU5vbmUsIHRvPW9ybVsnb3JtLkxheWVyU291cmNlJ10sIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllcl9WZXJzaW9uLnVwX2lkJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAndXBfaWQnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24udXBfZGF0ZScKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcl92ZXJzaW9uJywgJ3VwX2RhdGUnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKShkZWZhdWx0PU5vbmUsIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllcl9WZXJzaW9uLnVwX2JyYW5jaCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcl92ZXJzaW9uJywgJ3VwX2JyYW5jaCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykoZGVmYXVsdD1Ob25lLCB0bz1vcm1bJ29ybS5CcmFuY2gnXSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24uZGlycGF0aCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcl92ZXJzaW9uJywgJ2RpcnBhdGgnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbWF4X2xlbmd0aD0yNTUsIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5idWlsZCcKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAnYnVpbGRfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShudWxsPVRydWUsIHRvPW9ybVsnb3JtLkJ1aWxkJ10pKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24uYnJhbmNoJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdicmFuY2gnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTgwKSkKKyAgICAgICAgIyBBZGRpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0xheWVyX1ZlcnNpb24nLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX2xheWVyX3ZlcnNpb24nLCBbJ2xheWVyX3NvdXJjZV9pZCcsICd1cF9pZCddKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdSZWNpcGUubGF5ZXJfc291cmNlJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlY2lwZScsICdsYXllcl9zb3VyY2UnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKGRlZmF1bHQ9Tm9uZSwgdG89b3JtWydvcm0uTGF5ZXJTb3VyY2UnXSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1JlY2lwZS51cF9pZCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9yZWNpcGUnLCAndXBfaWQnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1JlY2lwZS51cF9kYXRlJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlY2lwZScsICd1cF9kYXRlJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXIubGF5ZXJfc291cmNlJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyJywgJ2xheWVyX3NvdXJjZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykoZGVmYXVsdD1Ob25lLCB0bz1vcm1bJ29ybS5MYXllclNvdXJjZSddLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXIudXBfaWQnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXInLCAndXBfaWQnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0xheWVyLnVwX2RhdGUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXInLCAndXBfZGF0ZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0xheWVyLnZjc191cmwnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXInLCAndmNzX3VybCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnKShkZWZhdWx0PU5vbmUsIG1heF9sZW5ndGg9MjAwLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXIudmNzX3dlYl9maWxlX2Jhc2VfdXJsJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyJywgJ3Zjc193ZWJfZmlsZV9iYXNlX3VybCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnKShkZWZhdWx0PU5vbmUsIG1heF9sZW5ndGg9MjAwLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXIuc3VtbWFyeScKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcicsICdzdW1tYXJ5JywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PU5vbmUsIG1heF9sZW5ndGg9MjAwLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXIuZGVzY3JpcHRpb24nCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXInLCAnZGVzY3JpcHRpb24nLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdMYXllci5sb2NhbF9wYXRoJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fbGF5ZXInLCAnbG9jYWxfcGF0aCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnKShtYXhfbGVuZ3RoPTI1NSwgbnVsbD1UcnVlKSkKKyAgICAgICAgIyBBZGRpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0xheWVyJywgZmllbGRzIFsnbGF5ZXJfc291cmNlJywgJ3VwX2lkJ10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J29ybV9sYXllcicsIFsnbGF5ZXJfc291cmNlX2lkJywgJ3VwX2lkJ10pCisKKyAgICAgICAgIyBBZGRpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0xheWVyJywgZmllbGRzIFsnbGF5ZXJfc291cmNlJywgJ25hbWUnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX2xheWVyJywgWydsYXllcl9zb3VyY2VfaWQnLCAnbmFtZSddKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3QuYnJhbmNoJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAnYnJhbmNoJykKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdC5iaXRiYWtlX3ZlcnNpb24nCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdiaXRiYWtlX3ZlcnNpb24nLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKGRlZmF1bHQ9LTEsIHRvPW9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10pLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdC5yZWxlYXNlJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAncmVsZWFzZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykoZGVmYXVsdD0tMSwgdG89b3JtWydvcm0uUmVsZWFzZSddKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBSZW1vdmluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnTGF5ZXInLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAnbmFtZSddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fbGF5ZXInLCBbJ2xheWVyX3NvdXJjZV9pZCcsICduYW1lJ10pCisKKyAgICAgICAgIyBSZW1vdmluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnTGF5ZXInLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX2xheWVyJywgWydsYXllcl9zb3VyY2VfaWQnLCAndXBfaWQnXSkKKworICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllcl9WZXJzaW9uJywgZmllbGRzIFsnbGF5ZXJfc291cmNlJywgJ3VwX2lkJ10KKyAgICAgICAgZGIuZGVsZXRlX3VuaXF1ZSh1J29ybV9sYXllcl92ZXJzaW9uJywgWydsYXllcl9zb3VyY2VfaWQnLCAndXBfaWQnXSkKKworICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllclNvdXJjZScsIGZpZWxkcyBbJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJ10KKyAgICAgICAgZGIuZGVsZXRlX3VuaXF1ZSh1J29ybV9sYXllcnNvdXJjZScsIFsnc291cmNldHlwZScsICdhcGl1cmwnXSkKKworICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdCcmFuY2gnLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX2JyYW5jaCcsIFsnbGF5ZXJfc291cmNlX2lkJywgJ3VwX2lkJ10pCisKKyAgICAgICAgIyBSZW1vdmluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnQnJhbmNoJywgZmllbGRzIFsnbGF5ZXJfc291cmNlJywgJ25hbWUnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX2JyYW5jaCcsIFsnbGF5ZXJfc291cmNlX2lkJywgJ25hbWUnXSkKKworICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdNYWNoaW5lJywgZmllbGRzIFsnbGF5ZXJfc291cmNlJywgJ3VwX2lkJ10KKyAgICAgICAgZGIuZGVsZXRlX3VuaXF1ZSh1J29ybV9tYWNoaW5lJywgWydsYXllcl9zb3VyY2VfaWQnLCAndXBfaWQnXSkKKworICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllclZlcnNpb25EZXBlbmRlbmN5JywgZmllbGRzIFsnbGF5ZXJfc291cmNlJywgJ3VwX2lkJ10KKyAgICAgICAgZGIuZGVsZXRlX3VuaXF1ZSh1J29ybV9sYXllcnZlcnNpb25kZXBlbmRlbmN5JywgWydsYXllcl9zb3VyY2VfaWQnLCAndXBfaWQnXSkKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdSZWxlYXNlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fcmVsZWFzZScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX2xheWVydmVyc2lvbmRlcGVuZGVuY3knKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1RvYXN0ZXJTZXR0aW5nJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fdG9hc3RlcnNldHRpbmcnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ01hY2hpbmUnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9tYWNoaW5lJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdSZWxlYXNlRGVmYXVsdExheWVyJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fcmVsZWFzZWRlZmF1bHRsYXllcicpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnQml0YmFrZVZlcnNpb24nCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9iaXRiYWtldmVyc2lvbicpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnQnJhbmNoJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fYnJhbmNoJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdUb2FzdGVyU2V0dGluZ0RlZmF1bHRMYXllcicKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3RvYXN0ZXJzZXR0aW5nZGVmYXVsdGxheWVyJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdMYXllclNvdXJjZScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX2xheWVyc291cmNlJykKKworCisgICAgICAgICMgVXNlciBjaG9zZSB0byBub3QgZGVhbCB3aXRoIGJhY2t3YXJkcyBOVUxMIGlzc3VlcyBmb3IgJ1Byb2plY3RMYXllci5uYW1lJworICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uLiAnUHJvamVjdExheWVyLm5hbWUnIGFuZCBpdHMgdmFsdWVzIGNhbm5vdCBiZSByZXN0b3JlZC4iKQorICAgICAgICAKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgcHJvdmlkZWQgaGVyZSB0byBhaWQgaW4gd3JpdGluZyBhIGNvcnJlY3QgbWlncmF0aW9uICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdExheWVyLm5hbWUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdGxheWVyJywgJ25hbWUnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdQcm9qZWN0TGF5ZXIuZGlycGF0aCcKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ1Byb2plY3RMYXllci5kaXJwYXRoJyBhbmQgaXRzIHZhbHVlcyBjYW5ub3QgYmUgcmVzdG9yZWQuIikKKyAgICAgICAgCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIHByb3ZpZGVkIGhlcmUgdG8gYWlkIGluIHdyaXRpbmcgYSBjb3JyZWN0IG1pZ3JhdGlvbiAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1Byb2plY3RMYXllci5kaXJwYXRoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3Byb2plY3RsYXllcicsICdkaXJwYXRoJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICAgICAgIyBVc2VyIGNob3NlIHRvIG5vdCBkZWFsIHdpdGggYmFja3dhcmRzIE5VTEwgaXNzdWVzIGZvciAnUHJvamVjdExheWVyLmNvbW1pdCcKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ1Byb2plY3RMYXllci5jb21taXQnIGFuZCBpdHMgdmFsdWVzIGNhbm5vdCBiZSByZXN0b3JlZC4iKQorICAgICAgICAKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgcHJvdmlkZWQgaGVyZSB0byBhaWQgaW4gd3JpdGluZyBhIGNvcnJlY3QgbWlncmF0aW9uICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdExheWVyLmNvbW1pdCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnY29tbWl0JywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICAgICAgIyBVc2VyIGNob3NlIHRvIG5vdCBkZWFsIHdpdGggYmFja3dhcmRzIE5VTEwgaXNzdWVzIGZvciAnUHJvamVjdExheWVyLmdpdHVybCcKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ1Byb2plY3RMYXllci5naXR1cmwnIGFuZCBpdHMgdmFsdWVzIGNhbm5vdCBiZSByZXN0b3JlZC4iKQorICAgICAgICAKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgcHJvdmlkZWQgaGVyZSB0byBhaWQgaW4gd3JpdGluZyBhIGNvcnJlY3QgbWlncmF0aW9uICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdExheWVyLmdpdHVybCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnZ2l0dXJsJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3RMYXllci5sYXllcmNvbW1pdCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnbGF5ZXJjb21taXRfaWQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24ubGF5ZXJfc291cmNlJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAnbGF5ZXJfc291cmNlX2lkJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdMYXllcl9WZXJzaW9uLnVwX2lkJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAndXBfaWQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24udXBfZGF0ZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcl92ZXJzaW9uJywgJ3VwX2RhdGUnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24udXBfYnJhbmNoJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAndXBfYnJhbmNoX2lkJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdMYXllcl9WZXJzaW9uLmRpcnBhdGgnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdkaXJwYXRoJykKKworCisgICAgICAgICMgVXNlciBjaG9zZSB0byBub3QgZGVhbCB3aXRoIGJhY2t3YXJkcyBOVUxMIGlzc3VlcyBmb3IgJ0xheWVyX1ZlcnNpb24uYnVpbGQnCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IHJldmVyc2UgdGhpcyBtaWdyYXRpb24uICdMYXllcl9WZXJzaW9uLmJ1aWxkJyBhbmQgaXRzIHZhbHVlcyBjYW5ub3QgYmUgcmVzdG9yZWQuIikKKyAgICAgICAgCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIHByb3ZpZGVkIGhlcmUgdG8gYWlkIGluIHdyaXRpbmcgYSBjb3JyZWN0IG1pZ3JhdGlvbgorICAgICAgICAjIENoYW5naW5nIGZpZWxkICdMYXllcl9WZXJzaW9uLmJ1aWxkJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdidWlsZF9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkJ1aWxkJ10pKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24uYnJhbmNoJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdicmFuY2gnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTUwKSkKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUmVjaXBlLmxheWVyX3NvdXJjZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9yZWNpcGUnLCAnbGF5ZXJfc291cmNlX2lkJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdSZWNpcGUudXBfaWQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ3VwX2lkJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdSZWNpcGUudXBfZGF0ZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9yZWNpcGUnLCAndXBfZGF0ZScpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXIubGF5ZXJfc291cmNlJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2xheWVyJywgJ2xheWVyX3NvdXJjZV9pZCcpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXIudXBfaWQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXInLCAndXBfaWQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyLnVwX2RhdGUnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXInLCAndXBfZGF0ZScpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXIudmNzX3VybCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcicsICd2Y3NfdXJsJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdMYXllci52Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXInLCAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdMYXllci5zdW1tYXJ5JworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2xheWVyJywgJ3N1bW1hcnknKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyLmRlc2NyaXB0aW9uJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2xheWVyJywgJ2Rlc2NyaXB0aW9uJykKKworCisgICAgICAgICMgVXNlciBjaG9zZSB0byBub3QgZGVhbCB3aXRoIGJhY2t3YXJkcyBOVUxMIGlzc3VlcyBmb3IgJ0xheWVyLmxvY2FsX3BhdGgnCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IHJldmVyc2UgdGhpcyBtaWdyYXRpb24uICdMYXllci5sb2NhbF9wYXRoJyBhbmQgaXRzIHZhbHVlcyBjYW5ub3QgYmUgcmVzdG9yZWQuIikKKyAgICAgICAgCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIHByb3ZpZGVkIGhlcmUgdG8gYWlkIGluIHdyaXRpbmcgYSBjb3JyZWN0IG1pZ3JhdGlvbgorICAgICAgICAjIENoYW5naW5nIGZpZWxkICdMYXllci5sb2NhbF9wYXRoJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fbGF5ZXInLCAnbG9jYWxfcGF0aCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnKShtYXhfbGVuZ3RoPTI1NSkpCisKKyAgICAgICAgIyBVc2VyIGNob3NlIHRvIG5vdCBkZWFsIHdpdGggYmFja3dhcmRzIE5VTEwgaXNzdWVzIGZvciAnUHJvamVjdC5icmFuY2gnCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IHJldmVyc2UgdGhpcyBtaWdyYXRpb24uICdQcm9qZWN0LmJyYW5jaCcgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24gICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0LmJyYW5jaCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ2JyYW5jaCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD01MCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3QuYml0YmFrZV92ZXJzaW9uJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAnYml0YmFrZV92ZXJzaW9uX2lkJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdQcm9qZWN0LnJlbGVhc2UnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdyZWxlYXNlX2lkJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwgKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfZmlsZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZURlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmcnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmcnfSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmdEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNF9hdXRvX19jaGdfZmllbGRfcGFja2FnZV9zdW1tYXJ5X19jaGdfZmllbGRfbGF5ZXJfc3VtbWFyeV9fY2hnX2ZpZWxkX3JlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTRfYXV0b19fY2hnX2ZpZWxkX3BhY2thZ2Vfc3VtbWFyeV9fY2hnX2ZpZWxkX2xheWVyX3N1bW1hcnlfX2NoZ19maWVsZF9yZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTQ1ZjE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTRfYXV0b19fY2hnX2ZpZWxkX3BhY2thZ2Vfc3VtbWFyeV9fY2hnX2ZpZWxkX2xheWVyX3N1bW1hcnlfX2NoZ19maWVsZF9yZS5weQpAQCAtMCwwICsxLDMzNiBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdQYWNrYWdlLnN1bW1hcnknCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9wYWNrYWdlJywgJ3N1bW1hcnknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKSgpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0xheWVyLnN1bW1hcnknCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9sYXllcicsICdzdW1tYXJ5Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykobnVsbD1UcnVlKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdSZWNpcGUuc3VtbWFyeScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3JlY2lwZScsICdzdW1tYXJ5Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoKSkKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdQYWNrYWdlLnN1bW1hcnknCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9wYWNrYWdlJywgJ3N1bW1hcnknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTIwMCkpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnTGF5ZXIuc3VtbWFyeScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX2xheWVyJywgJ3N1bW1hcnknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTIwMCwgbnVsbD1UcnVlKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdSZWNpcGUuc3VtbWFyeScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3JlY2lwZScsICdzdW1tYXJ5Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKQorCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwgKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfZmlsZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZURlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmcnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmcnfSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmdEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNV9hdXRvX19hZGRfZmllbGRfbGF5ZXJfdmNzX3dlYl91cmxfX2FkZF9maWVsZF9sYXllcl92Y3Nfd2ViX3RyZWVfYmFzZV91LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTVfYXV0b19fYWRkX2ZpZWxkX2xheWVyX3Zjc193ZWJfdXJsX19hZGRfZmllbGRfbGF5ZXJfdmNzX3dlYl90cmVlX2Jhc2VfdS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTY2NGM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTVfYXV0b19fYWRkX2ZpZWxkX2xheWVyX3Zjc193ZWJfdXJsX19hZGRfZmllbGRfbGF5ZXJfdmNzX3dlYl90cmVlX2Jhc2VfdS5weQpAQCAtMCwwICsxLDMzNiBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0xheWVyLnZjc193ZWJfdXJsJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyJywgJ3Zjc193ZWJfdXJsJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbWF4X2xlbmd0aD0yMDAsIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllci52Y3Nfd2ViX3RyZWVfYmFzZV91cmwnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXInLCAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbWF4X2xlbmd0aD0yMDAsIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyLnZjc193ZWJfdXJsJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2xheWVyJywgJ3Zjc193ZWJfdXJsJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdMYXllci52Y3Nfd2ViX3RyZWVfYmFzZV91cmwnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXInLCAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwgKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfZmlsZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdHJlZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cF9icmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uQnJhbmNoJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyc291cmNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJTb3VyY2UnfSwKKyAgICAgICAgICAgICdhcGl1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAnc291cmNldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnZlcnNpb25kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVlcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZW5jaWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5tYWNoaW5lJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ01hY2hpbmUnfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZyc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZyd9LAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZ2RlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZ0RlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE2X2F1dG9fX2FkZF9maWVsZF9yZWxlYXNlX2hlbHB0ZXh0X19jaGdfZmllbGRfcmVsZWFzZV9icmFuY2hfX2FkZF9pbmRleF8ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNl9hdXRvX19hZGRfZmllbGRfcmVsZWFzZV9oZWxwdGV4dF9fY2hnX2ZpZWxkX3JlbGVhc2VfYnJhbmNoX19hZGRfaW5kZXhfLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NWMwYmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNl9hdXRvX19hZGRfZmllbGRfcmVsZWFzZV9oZWxwdGV4dF9fY2hnX2ZpZWxkX3JlbGVhc2VfYnJhbmNoX19hZGRfaW5kZXhfLnB5CkBAIC0wLDAgKzEsMzU5IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnUmVsZWFzZS5oZWxwdGV4dCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9yZWxlYXNlJywgJ2hlbHB0ZXh0JywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgICAgICMgUmVuYW1pbmcgY29sdW1uIGZvciAnUmVsZWFzZS5icmFuY2gnIHRvIG1hdGNoIG5ldyBmaWVsZCB0eXBlLgorICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3JlbGVhc2UnLCAnYnJhbmNoJykKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdSZWxlYXNlLmJyYW5jaCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9yZWxlYXNlJywgJ2JyYW5jaCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkJyYW5jaCddLCBkZWZhdWx0PS0xKSkKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdCcmFuY2guYml0YmFrZV9icmFuY2gnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fYnJhbmNoJywgJ2JpdGJha2VfYnJhbmNoJykKKworICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnUmVjaXBlJywgZmllbGRzIFsnbGF5ZXJfdmVyc2lvbicsICdmaWxlX3BhdGgnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX3JlY2lwZScsIFsnbGF5ZXJfdmVyc2lvbl9pZCcsICdmaWxlX3BhdGgnXSkKKworICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnUHJvamVjdExheWVyJywgZmllbGRzIFsncHJvamVjdCcsICdsYXllcmNvbW1pdCddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fcHJvamVjdGxheWVyJywgWydwcm9qZWN0X2lkJywgJ2xheWVyY29tbWl0X2lkJ10pCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBSZW1vdmluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnUHJvamVjdExheWVyJywgZmllbGRzIFsncHJvamVjdCcsICdsYXllcmNvbW1pdCddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fcHJvamVjdGxheWVyJywgWydwcm9qZWN0X2lkJywgJ2xheWVyY29tbWl0X2lkJ10pCisKKyAgICAgICAgIyBSZW1vdmluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnUmVjaXBlJywgZmllbGRzIFsnbGF5ZXJfdmVyc2lvbicsICdmaWxlX3BhdGgnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX3JlY2lwZScsIFsnbGF5ZXJfdmVyc2lvbl9pZCcsICdmaWxlX3BhdGgnXSkKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdSZWxlYXNlLmhlbHB0ZXh0JworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3JlbGVhc2UnLCAnaGVscHRleHQnKQorCisgICAgICAgICMgUmVuYW1pbmcgY29sdW1uIGZvciAnUmVsZWFzZS5icmFuY2gnIHRvIG1hdGNoIG5ldyBmaWVsZCB0eXBlLgorICAgICAgICBkYi5yZW5hbWVfY29sdW1uKHUnb3JtX3JlbGVhc2UnLCAnYnJhbmNoX2lkJywgJ2JyYW5jaCcpCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1JlbGVhc2UuYnJhbmNoJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcmVsZWFzZScsICdicmFuY2gnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTMyKSkKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0JyYW5jaC5iaXRiYWtlX2JyYW5jaCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9icmFuY2gnLCAnYml0YmFrZV9icmFuY2gnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKGRlZmF1bHQ9JycsIG1heF9sZW5ndGg9NTAsIGJsYW5rPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksICgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc191cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdwcm9qZWN0JywgJ2xheWVyY29tbWl0JyksKSIsICdvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wdGlvbmFsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxN19hdXRvX19kZWxfdG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXJfX2FkZF9yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eV9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTdfYXV0b19fZGVsX3RvYXN0ZXJzZXR0aW5nZGVmYXVsdGxheWVyX19hZGRfcmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHlfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Njg1YjU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTdfYXV0b19fZGVsX3RvYXN0ZXJzZXR0aW5nZGVmYXVsdGxheWVyX19hZGRfcmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHlfXy5weQpAQCAtMCwwICsxLDM5NiBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnVG9hc3RlclNldHRpbmdEZWZhdWx0TGF5ZXInCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV90b2FzdGVyc2V0dGluZ2RlZmF1bHRsYXllcicpCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1JlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHknLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgncmVsZWFzZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlJlbGVhc2UnXSkpLAorICAgICAgICAgICAgKCdsYXllcl9zb3VyY2UnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5MYXllclNvdXJjZSddKSksCisgICAgICAgICAgICAoJ3ByaW9yaXR5Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknXSkKKworICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknLCBmaWVsZHMgWydyZWxlYXNlJywgJ2xheWVyX3NvdXJjZSddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fcmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHknLCBbJ3JlbGVhc2VfaWQnLCAnbGF5ZXJfc291cmNlX2lkJ10pCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUmVsZWFzZS5icmFuY2gnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcmVsZWFzZScsICdicmFuY2hfaWQnKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdSZWxlYXNlLmJyYW5jaF9uYW1lJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlbGVhc2UnLCAnYnJhbmNoX25hbWUnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKGRlZmF1bHQ9JycsIG1heF9sZW5ndGg9NTApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnTGF5ZXJTb3VyY2UnLCBmaWVsZHMgWyduYW1lJ10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J29ybV9sYXllcnNvdXJjZScsIFsnbmFtZSddKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1JlbGVhc2VEZWZhdWx0TGF5ZXIubGF5ZXInCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcmVsZWFzZWRlZmF1bHRsYXllcicsICdsYXllcl9pZCcpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1JlbGVhc2VEZWZhdWx0TGF5ZXIubGF5ZXJfbmFtZScKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9yZWxlYXNlZGVmYXVsdGxheWVyJywgJ2xheWVyX25hbWUnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKGRlZmF1bHQ9JycsIG1heF9sZW5ndGg9MTAwKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBSZW1vdmluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnTGF5ZXJTb3VyY2UnLCBmaWVsZHMgWyduYW1lJ10KKyAgICAgICAgZGIuZGVsZXRlX3VuaXF1ZSh1J29ybV9sYXllcnNvdXJjZScsIFsnbmFtZSddKQorCisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ1JlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5JywgZmllbGRzIFsncmVsZWFzZScsICdsYXllcl9zb3VyY2UnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX3JlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JywgWydyZWxlYXNlX2lkJywgJ2xheWVyX3NvdXJjZV9pZCddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdUb2FzdGVyU2V0dGluZ0RlZmF1bHRMYXllcicKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3RvYXN0ZXJzZXR0aW5nZGVmYXVsdGxheWVyJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ2xheWVyX3ZlcnNpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10pKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydUb2FzdGVyU2V0dGluZ0RlZmF1bHRMYXllciddKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1JlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5JworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fcmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHknKQorCisKKyAgICAgICAgIyBVc2VyIGNob3NlIHRvIG5vdCBkZWFsIHdpdGggYmFja3dhcmRzIE5VTEwgaXNzdWVzIGZvciAnUmVsZWFzZS5icmFuY2gnCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IHJldmVyc2UgdGhpcyBtaWdyYXRpb24uICdSZWxlYXNlLmJyYW5jaCcgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24gICAgICAgICMgQWRkaW5nIGZpZWxkICdSZWxlYXNlLmJyYW5jaCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9yZWxlYXNlJywgJ2JyYW5jaCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uQnJhbmNoJ10pLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdSZWxlYXNlLmJyYW5jaF9uYW1lJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3JlbGVhc2UnLCAnYnJhbmNoX25hbWUnKQorCisKKyAgICAgICAgIyBVc2VyIGNob3NlIHRvIG5vdCBkZWFsIHdpdGggYmFja3dhcmRzIE5VTEwgaXNzdWVzIGZvciAnUmVsZWFzZURlZmF1bHRMYXllci5sYXllcicKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ1JlbGVhc2VEZWZhdWx0TGF5ZXIubGF5ZXInIGFuZCBpdHMgdmFsdWVzIGNhbm5vdCBiZSByZXN0b3JlZC4iKQorICAgICAgICAKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgcHJvdmlkZWQgaGVyZSB0byBhaWQgaW4gd3JpdGluZyBhIGNvcnJlY3QgbWlncmF0aW9uICAgICAgICAjIEFkZGluZyBmaWVsZCAnUmVsZWFzZURlZmF1bHRMYXllci5sYXllcicKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9yZWxlYXNlZGVmYXVsdGxheWVyJywgJ2xheWVyJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5MYXllciddKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUmVsZWFzZURlZmF1bHRMYXllci5sYXllcl9uYW1lJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3JlbGVhc2VkZWZhdWx0bGF5ZXInLCAnbGF5ZXJfbmFtZScpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJyYW5jaCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwgKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkiLCAnb2JqZWN0X25hbWUnOiAnQnJhbmNoJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3RsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncHJvamVjdCcsICdsYXllcmNvbW1pdCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfdmVyc2lvbicsICdmaWxlX3BhdGgnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdyZWxlYXNlJywgJ2xheWVyX3NvdXJjZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE4X2F1dG9fX2FkZF9maWVsZF9sYXllcl92ZXJzaW9uX3Byb2plY3QucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxOF9hdXRvX19hZGRfZmllbGRfbGF5ZXJfdmVyc2lvbl9wcm9qZWN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyODRiYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxOF9hdXRvX19hZGRfZmllbGRfbGF5ZXJfdmVyc2lvbl9wcm9qZWN0LnB5CkBAIC0wLDAgKzEsMzMxIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5wcm9qZWN0JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAncHJvamVjdCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykoZGVmYXVsdD1Ob25lLCB0bz1vcm1bJ29ybS5Qcm9qZWN0J10sIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24ucHJvamVjdCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcl92ZXJzaW9uJywgJ3Byb2plY3RfaWQnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwgKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfZmlsZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdHJlZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdwcm9qZWN0JywgJ2xheWVyY29tbWl0JyksKSIsICdvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wdGlvbmFsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdicmFuY2hfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZURlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3JlbGVhc2UnLCAnbGF5ZXJfc291cmNlJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmcnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmcnfSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTlfYXV0b19fYWRkX2J1aWxkYXJ0aWZhY3QucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxOV9hdXRvX19hZGRfYnVpbGRhcnRpZmFjdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGNlOWVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTlfYXV0b19fYWRkX2J1aWxkYXJ0aWZhY3QucHkKQEAgLTAsMCArMSwzNDIgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIG1vZGVsICdCdWlsZEFydGlmYWN0JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fYnVpbGRhcnRpZmFjdCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdidWlsZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkJ1aWxkJ10pKSwKKyAgICAgICAgICAgICgnZmlsZV9uYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ2ZpbGVfc2l6ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ0J1aWxkQXJ0aWZhY3QnXSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdCdWlsZEFydGlmYWN0JworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fYnVpbGRhcnRpZmFjdCcpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJyYW5jaCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwgKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkiLCAnb2JqZWN0X25hbWUnOiAnQnJhbmNoJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZGFydGlmYWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkQXJ0aWZhY3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9icmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uQnJhbmNoJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyc291cmNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJTb3VyY2UnfSwKKyAgICAgICAgICAgICdhcGl1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAnc291cmNldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnZlcnNpb25kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVlcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZW5jaWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5tYWNoaW5lJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ01hY2hpbmUnfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncmVsZWFzZScsICdsYXllcl9zb3VyY2UnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZyc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZyd9LAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyMF9hdXRvX19hZGRfZmllbGRfbGF5ZXJfdmVyc2lvbl9sb2NhbF9wYXRoX19hZGRfZmllbGRfcmVjaXBlX3BhdGhmbGFnc19fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjBfYXV0b19fYWRkX2ZpZWxkX2xheWVyX3ZlcnNpb25fbG9jYWxfcGF0aF9fYWRkX2ZpZWxkX3JlY2lwZV9wYXRoZmxhZ3NfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWM1Nzk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjBfYXV0b19fYWRkX2ZpZWxkX2xheWVyX3ZlcnNpb25fbG9jYWxfcGF0aF9fYWRkX2ZpZWxkX3JlY2lwZV9wYXRoZmxhZ3NfXy5weQpAQCAtMCwwICsxLDM2MSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBSZW1vdmluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnUmVjaXBlJywgZmllbGRzIFsnbGF5ZXJfdmVyc2lvbicsICdmaWxlX3BhdGgnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX3JlY2lwZScsIFsnbGF5ZXJfdmVyc2lvbl9pZCcsICdmaWxlX3BhdGgnXSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5sb2NhbF9wYXRoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAnbG9jYWxfcGF0aCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKGRlZmF1bHQ9Ii8iLCBtYXhfbGVuZ3RoPTEwMjQpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUmVjaXBlLnBhdGhmbGFncycKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9yZWNpcGUnLCAncGF0aGZsYWdzJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTIwMCwgYmxhbms9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdSZWNpcGUnLCBmaWVsZHMgWydsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCcsICdwYXRoZmxhZ3MnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX3JlY2lwZScsIFsnbGF5ZXJfdmVyc2lvbl9pZCcsICdmaWxlX3BhdGgnLCAncGF0aGZsYWdzJ10pCisKKyAgICAgICAgIyBNaWdyYXRlIGRhdGEgZnJvbSBMYXllci5sb2NhbF9wYXRoIHRvIExheWVyX1ZlcnNpb24ubG9jYWxfcGF0aAorICAgICAgICBpZiBub3QgZGIuZHJ5X3J1bjoKKyAgICAgICAgICAgIGZvciBsdiBpbiBvcm0uTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmFsbCgpOgorICAgICAgICAgICAgICAgIGlmIGx2LmxheWVyLmxvY2FsX3BhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGx2LmxvY2FsX3BhdGggPSBsdi5sYXllci5sb2NhbF9wYXRoCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbHYubG9jYWxfcGF0aCA9ICIvIgorICAgICAgICAgICAgICAgIGx2LnNhdmUoKQorCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXInLCAnbG9jYWxfcGF0aCcpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbiIpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJyYW5jaCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwgKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkiLCAnb2JqZWN0X25hbWUnOiAnQnJhbmNoJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkYXJ0aWZhY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRBcnRpZmFjdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksICgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc191cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdwcm9qZWN0JywgJ2xheWVyY29tbWl0JyksKSIsICdvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wdGlvbmFsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCcsICdwYXRoZmxhZ3MnKSwgKCdmaWxlX3BhdGgnLCAncGF0aGZsYWdzJykpIiwgJ29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncGF0aGZsYWdzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncmVsZWFzZScsICdsYXllcl9zb3VyY2UnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjFfYXV0b19fY2hnX2ZpZWxkX2J1aWxkX3Byb2plY3RfX2NoZ19maWVsZF9wcm9qZWN0X2JpdGJha2VfdmVyc2lvbl9fY2hnXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDIxX2F1dG9fX2NoZ19maWVsZF9idWlsZF9wcm9qZWN0X19jaGdfZmllbGRfcHJvamVjdF9iaXRiYWtlX3ZlcnNpb25fX2NoZ18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYyZGRiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDIxX2F1dG9fX2NoZ19maWVsZF9idWlsZF9wcm9qZWN0X19jaGdfZmllbGRfcHJvamVjdF9iaXRiYWtlX3ZlcnNpb25fX2NoZ18ucHkKQEAgLTAsMCArMSwzNzEgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgbm9fZHJ5X3J1biA9IFRydWUKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0J1aWxkLnByb2plY3QnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9idWlsZCcsICdwcm9qZWN0X2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUHJvamVjdCddKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdQcm9qZWN0LmJpdGJha2VfdmVyc2lvbicKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAnYml0YmFrZV92ZXJzaW9uX2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSwgbnVsbD1UcnVlKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdQcm9qZWN0LnJlbGVhc2UnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ3JlbGVhc2VfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5SZWxlYXNlJ10sIG51bGw9VHJ1ZSkpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVGFzay5jcHVfdXNhZ2UnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV90YXNrJywgJ2NwdV91c2FnZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcpKG51bGw9VHJ1ZSwgbWF4X2RpZ2l0cz04LCBkZWNpbWFsX3BsYWNlcz0yKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXNrLmVsYXBzZWRfdGltZScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3Rhc2snLCAnZWxhcHNlZF90aW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJykobnVsbD1UcnVlLCBtYXhfZGlnaXRzPTgsIGRlY2ltYWxfcGxhY2VzPTIpKQorCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0J1aWxkLnByb2plY3QnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9idWlsZCcsICdwcm9qZWN0X2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUHJvamVjdCddLCBudWxsPVRydWUpKQorCisgICAgICAgICMgVXNlciBjaG9zZSB0byBub3QgZGVhbCB3aXRoIGJhY2t3YXJkcyBOVUxMIGlzc3VlcyBmb3IgJ1Byb2plY3QuYml0YmFrZV92ZXJzaW9uJworICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uLiAnUHJvamVjdC5iaXRiYWtlX3ZlcnNpb24nIGFuZCBpdHMgdmFsdWVzIGNhbm5vdCBiZSByZXN0b3JlZC4iKQorICAgICAgICAKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgcHJvdmlkZWQgaGVyZSB0byBhaWQgaW4gd3JpdGluZyBhIGNvcnJlY3QgbWlncmF0aW9uCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1Byb2plY3QuYml0YmFrZV92ZXJzaW9uJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdiaXRiYWtlX3ZlcnNpb25faWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddKSkKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdQcm9qZWN0LnJlbGVhc2UnCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IHJldmVyc2UgdGhpcyBtaWdyYXRpb24uICdQcm9qZWN0LnJlbGVhc2UnIGFuZCBpdHMgdmFsdWVzIGNhbm5vdCBiZSByZXN0b3JlZC4iKQorICAgICAgICAKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgcHJvdmlkZWQgaGVyZSB0byBhaWQgaW4gd3JpdGluZyBhIGNvcnJlY3QgbWlncmF0aW9uCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1Byb2plY3QucmVsZWFzZScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAncmVsZWFzZV9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlJlbGVhc2UnXSkpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVGFzay5jcHVfdXNhZ2UnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV90YXNrJywgJ2NwdV91c2FnZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcpKG51bGw9VHJ1ZSwgbWF4X2RpZ2l0cz02LCBkZWNpbWFsX3BsYWNlcz0yKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXNrLmVsYXBzZWRfdGltZScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3Rhc2snLCAnZWxhcHNlZF90aW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJykobnVsbD1UcnVlLCBtYXhfZGlnaXRzPTYsIGRlY2ltYWxfcGxhY2VzPTIpKQorCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGRhcnRpZmFjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZEFydGlmYWN0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwgKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfZmlsZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdHJlZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJy8nIiwgJ21heF9sZW5ndGgnOiAnMTAyNCd9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9icmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uQnJhbmNoJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyc291cmNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJTb3VyY2UnfSwKKyAgICAgICAgICAgICdhcGl1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAnc291cmNldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnZlcnNpb25kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVlcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZW5jaWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5tYWNoaW5lJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ01hY2hpbmUnfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3RsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncHJvamVjdCcsICdsYXllcmNvbW1pdCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfdmVyc2lvbicsICdmaWxlX3BhdGgnLCAncGF0aGZsYWdzJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhdGhmbGFncyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdicmFuY2hfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZURlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3JlbGVhc2UnLCAnbGF5ZXJfc291cmNlJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnOCcsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZyc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZyd9LAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyMl9hdXRvX19hZGRfZmllbGRfdGFyZ2V0X3Rhc2tfX2FkZF9maWVsZF9sYXllcl92ZXJzaW9uX2xvY2FsX3BhdGhfX2RlbF9mLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjJfYXV0b19fYWRkX2ZpZWxkX3RhcmdldF90YXNrX19hZGRfZmllbGRfbGF5ZXJfdmVyc2lvbl9sb2NhbF9wYXRoX19kZWxfZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGVjMzkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjJfYXV0b19fYWRkX2ZpZWxkX3RhcmdldF90YXNrX19hZGRfZmllbGRfbGF5ZXJfdmVyc2lvbl9sb2NhbF9wYXRoX19kZWxfZi5weQpAQCAtMCwwICsxLDM0MyBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1RhcmdldC50YXNrJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3RhcmdldCcsICd0YXNrJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnVGFyZ2V0LnRhc2snCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fdGFyZ2V0JywgJ3Rhc2snKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZGFydGlmYWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkQXJ0aWZhY3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInLyciLCAnbWF4X2xlbmd0aCc6ICcxMDI0J30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdwcm9qZWN0JywgJ2xheWVyY29tbWl0JyksKSIsICdvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wdGlvbmFsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCcsICdwYXRoZmxhZ3MnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncGF0aGZsYWdzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncmVsZWFzZScsICdsYXllcl9zb3VyY2UnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnOCcsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZyc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZyd9LAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDIzX2F1dG9fX2RlbF9maWVsZF9idWlsZF93YXJuaW5nc19ub19fZGVsX2ZpZWxkX2J1aWxkX2Vycm9yc19ub19fZGVsX2ZpZWwucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyM19hdXRvX19kZWxfZmllbGRfYnVpbGRfd2FybmluZ3Nfbm9fX2RlbF9maWVsZF9idWlsZF9lcnJvcnNfbm9fX2RlbF9maWVsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YjIwMGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyM19hdXRvX19kZWxfZmllbGRfYnVpbGRfd2FybmluZ3Nfbm9fX2RlbF9maWVsZF9idWlsZF9lcnJvcnNfbm9fX2RlbF9maWVsLnB5CkBAIC0wLDAgKzEsMzUzIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdCdWlsZC53YXJuaW5nc19ubycKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9idWlsZCcsICd3YXJuaW5nc19ubycpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnQnVpbGQuZXJyb3JzX25vJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2J1aWxkJywgJ2Vycm9yc19ubycpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnQnVpbGQudGltZXNwZW50JworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3RpbWVzcGVudCcpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0J1aWxkLndhcm5pbmdzX25vJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3dhcm5pbmdzX25vJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnVpbGQuZXJyb3JzX25vJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2J1aWxkJywgJ2Vycm9yc19ubycsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0J1aWxkLnRpbWVzcGVudCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9idWlsZCcsICd0aW1lc3BlbnQnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGRhcnRpZmFjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZEFydGlmYWN0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwgKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfZmlsZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdHJlZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJy8nIiwgJ21heF9sZW5ndGgnOiAnMTAyNCd9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9icmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uQnJhbmNoJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyc291cmNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJTb3VyY2UnfSwKKyAgICAgICAgICAgICdhcGl1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAnc291cmNldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnZlcnNpb25kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVlcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZW5jaWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5tYWNoaW5lJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ01hY2hpbmUnfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3RsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncHJvamVjdCcsICdsYXllcmNvbW1pdCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfdmVyc2lvbicsICdmaWxlX3BhdGgnLCAncGF0aGZsYWdzJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhdGhmbGFncyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdicmFuY2hfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZURlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3JlbGVhc2UnLCAnbGF5ZXJfc291cmNlJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnOCcsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza3MnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmcnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmcnfSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjRfYXV0b19fYWRkX2ZpZWxkX3JlY2lwZV9pc19pbWFnZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDI0X2F1dG9fX2FkZF9maWVsZF9yZWNpcGVfaXNfaW1hZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhmNjBhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDI0X2F1dG9fX2FkZF9maWVsZF9yZWNpcGVfaXNfaW1hZ2UucHkKQEAgLTAsMCArMSwzMzggQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIGZpZWxkICdSZWNpcGUuaXNfaW1hZ2UnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ2lzX2ltYWdlJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnKShkZWZhdWx0PUZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUmVjaXBlLmlzX2ltYWdlJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3JlY2lwZScsICdpc19pbWFnZScpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJyYW5jaCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwgKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkiLCAnb2JqZWN0X25hbWUnOiAnQnJhbmNoJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZGFydGlmYWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkQXJ0aWZhY3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInLyciLCAnbWF4X2xlbmd0aCc6ICcxMDI0J30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdwcm9qZWN0JywgJ2xheWVyY29tbWl0JyksKSIsICdvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wdGlvbmFsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCcsICdwYXRoZmxhZ3MnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncGF0aGZsYWdzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncmVsZWFzZScsICdsYXllcl9zb3VyY2UnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnOCcsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZyc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZyd9LAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyNV9hdXRvX19hZGRfZmllbGRfcHJvamVjdF9pc19kZWZhdWx0LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjVfYXV0b19fYWRkX2ZpZWxkX3Byb2plY3RfaXNfZGVmYXVsdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzY5OTBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjVfYXV0b19fYWRkX2ZpZWxkX3Byb2plY3RfaXNfZGVmYXVsdC5weQpAQCAtMCwwICsxLDM0NiBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyB3b3JrLWFyb3VuZCBmb3IgaHR0cDovL3NvdXRoLmFlcmFjb2RlLm9yZy90aWNrZXQvNTc4OgorICAgICAgICAjIFNRTGl0ZSBib29sZWFuIGZpZWxkcyBhcmVuJ3Qgc2V0IHRvIHRoZSBjb3JyZWN0IGRlZmF1bHQgdmFsdWUKKyAgICAgICAgIyAobmVlZHMgdG8gYmUgMCBvciAxLCByYXRoZXIgdGhhbiBUcnVlIG9yIEZhbHNlKQorICAgICAgICBkZWZhdWx0ID0gRmFsc2UKKyAgICAgICAgaWYgZGIuYmFja2VuZF9uYW1lID09ICdzcWxpdGUzJzoKKyAgICAgICAgICAgZGVmYXVsdCA9IDAKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdC5pc19kZWZhdWx0JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAnaXNfZGVmYXVsdCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJykoZGVmYXVsdD1kZWZhdWx0KSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdC5pc19kZWZhdWx0JworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAnaXNfZGVmYXVsdCcpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJyYW5jaCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwgKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkiLCAnb2JqZWN0X25hbWUnOiAnQnJhbmNoJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZGFydGlmYWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkQXJ0aWZhY3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInLyciLCAnbWF4X2xlbmd0aCc6ICcxMDI0J30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lzX2RlZmF1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJywgJ3BhdGhmbGFncycpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYXRoZmxhZ3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdyZWxlYXNlJywgJ2xheWVyX3NvdXJjZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjZfc2V0X2RlZmF1bHRfcHJvamVjdC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDI2X3NldF9kZWZhdWx0X3Byb2plY3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI0MGFiZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDI2X3NldF9kZWZhdWx0X3Byb2plY3QucHkKQEAgLTAsMCArMSwzNzQgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisjIGRhdGEtb25seSBtaWdyYXRpb24gdG8gc2V0IHRoZSBpc19kZWZhdWx0IGZpZWxkIGNvcnJlY3RseQorIyBhY3Jvc3MgYWxsIHByb2plY3RzLCBzbyBpdCBoYXMgdGhlIGNvcnJlY3QgdmFsdWUgb24gYSBzaW5nbGUKKyMgcmVjb3JkIG9ubHk7IHRoaXMgd2lsbCBhZGQgb3IgYW1lbmQgZGVmYXVsdCBwcm9qZWN0IChtYXJrZWQgd2l0aAorIyBpc19kZWZhdWx0ID0gVHJ1ZSkKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgbm9fZHJ5X3J1biA9IFRydWUKKworICAgICMgd29yay1hcm91bmQgZm9yIGh0dHA6Ly9zb3V0aC5hZXJhY29kZS5vcmcvdGlja2V0LzU3ODoKKyAgICAjIFNRTGl0ZSBib29sZWFuIGZpZWxkcyBhcmVuJ3Qgc2V0IHRvIHRoZSBjb3JyZWN0IGRlZmF1bHQgdmFsdWUKKyAgICAjIHdoZW4gYWRkZWQgdG8gZXhpc3RpbmcgcmVjb3JkcyAodmFsdWUgbmVlZHMgdG8gYmUgMCBvciAxLCByYXRoZXIKKyAgICAjIHRoYW4gVHJ1ZSBvciBGYWxzZSksIHNvIG1hbnVhbGx5IHVwZGF0ZSB0aGF0IGZpZWxkIGZvciBhbGwKKyAgICAjIGV4aXN0aW5nIHJlY29yZHMKKyAgICBkZWYgX3NxbGl0ZV91cGRhdGVfYWxsX3Byb2plY3RzX2lzX2RlZmF1bHQoc2VsZiwgb3JtKToKKyAgICAgICAgaWYgZGIuYmFja2VuZF9uYW1lID09ICdzcWxpdGUzJzoKKyAgICAgICAgICAgIGZvciBwcm9qZWN0IGluIG9ybS5Qcm9qZWN0Lm9iamVjdHMuYWxsKCk6CisgICAgICAgICAgICAgICAgcHJvamVjdC5pc19kZWZhdWx0ID0gMAorICAgICAgICAgICAgICAgIHByb2plY3Quc2F2ZSgpCisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBmaXggaXNfZGVmYXVsdCBmaWVsZAorICAgICAgICBzZWxmLl9zcWxpdGVfdXBkYXRlX2FsbF9wcm9qZWN0c19pc19kZWZhdWx0KG9ybSkKKworICAgICAgICAjIG5vdyBjcmVhdGUgb3IgbW9kaWZ5IHRoZSBkZWZhdWx0IHByb2plY3QKKyAgICAgICAgcHJvamVjdCA9IE5vbmUKKworICAgICAgICAjIGNoZWNrIGZvciBleGlzdGluZyBkZWZhdWx0IHByb2plY3Qgd2l0aCBJRCAwIHdoaWNoIGhhcworICAgICAgICAjIGFscmVhZHkgYmVlbiBhZGRlZCBpbiBjb2RlCisgICAgICAgIHByb2plY3RzID0gb3JtLlByb2plY3Qub2JqZWN0cy5maWx0ZXIocGsgPSAwKQorCisgICAgICAgIGlmIGxlbihwcm9qZWN0cykgPT0gMToKKyAgICAgICAgICAgIHByb2plY3QgPSBwcm9qZWN0c1swXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBjcmVhdGUgZGVmYXVsdCBwcm9qZWN0CisgICAgICAgICAgICBvcHRpb25zID0geworICAgICAgICAgICAgICAgICJuYW1lIjogIkNvbW1hbmQgbGluZSBidWlsZHMiLAorICAgICAgICAgICAgICAgICJzaG9ydF9kZXNjcmlwdGlvbiI6ICJQcm9qZWN0IGZvciBidWlsZHMgc3RhcnRlZCBvdXRzaWRlIFRvYXN0ZXIiCisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcm9qZWN0ID0gb3JtLlByb2plY3Qub2JqZWN0cy5jcmVhdGUoKipvcHRpb25zKQorCisgICAgICAgIHByb2plY3QuaXNfZGVmYXVsdCA9IFRydWUKKyAgICAgICAgcHJvamVjdC5zYXZlKCkKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBkb24ndCBkbyBhbnl0aGluZyB3aGVuIHJldmVyc2luZyB0aGlzIG1pZ3JhdGlvbiwgYXMgd2UgY2FuIHNhZmVseQorICAgICAgICAjIGtlZXAgYW55IGdlbmVyYXRlZCBkZWZhdWx0IHByb2plY3Qgd2hpY2ggaGFzIGJ1aWxkcyBhdHRhY2hlZDsKKyAgICAgICAgIyBpdCdzIGp1c3QgdGhhdCB0aGUgb2xkIGNvZGUgd29uJ3QgdXNlIHRoYXQgcHJvamVjdCBhcyB0aGUKKyAgICAgICAgIyBjb250YWluZXIgZm9yIGFueSBuZXcgYnVpbGRzLCBhcyBpdCBkb2Vzbid0IGhhdmUgYW4gSUQgb2YgMAorICAgICAgICBwYXNzCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGRhcnRpZmFjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZEFydGlmYWN0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwgKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfZmlsZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdHJlZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJy8nIiwgJ21heF9sZW5ndGgnOiAnMTAyNCd9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9icmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uQnJhbmNoJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyc291cmNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJTb3VyY2UnfSwKKyAgICAgICAgICAgICdhcGl1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAnc291cmNldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnZlcnNpb25kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVlcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZW5jaWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5tYWNoaW5lJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ01hY2hpbmUnfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpc19kZWZhdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdwcm9qZWN0JywgJ2xheWVyY29tbWl0JyksKSIsICdvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wdGlvbmFsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCcsICdwYXRoZmxhZ3MnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncGF0aGZsYWdzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncmVsZWFzZScsICdsYXllcl9zb3VyY2UnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnOCcsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZyc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZyd9LAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21vZGVscy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbW9kZWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZDJlODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21vZGVscy5weQpAQCAtMCwwICsxLDEyMzMgQEAKKyMKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzLCBJbnRlZ3JpdHlFcnJvcgorZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBGLCBRLCBBdmcsIE1heAorZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCisKK2Zyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlCisKK2Zyb20gZGphbmdvLmNvcmUgaW1wb3J0IHZhbGlkYXRvcnMKK2Zyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCitpbXBvcnQgZGphbmdvLmRiLm1vZGVscy5zaWduYWxzCisKKworaW1wb3J0IGxvZ2dpbmcKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ0b2FzdGVyIikKKworCitjbGFzcyBHaXRVUkxWYWxpZGF0b3IodmFsaWRhdG9ycy5VUkxWYWxpZGF0b3IpOgorICAgIGltcG9ydCByZQorICAgIHJlZ2V4ID0gcmUuY29tcGlsZSgKKyAgICAgICAgcideKD86c3NofGdpdHxodHRwfGZ0cClzPzovLycgICMgaHR0cDovLyBvciBodHRwczovLworICAgICAgICByJyg/Oig/OltBLVowLTldKD86W0EtWjAtOS1dezAsNjF9W0EtWjAtOV0pP1wuKSsoPzpbQS1aXXsyLDZ9XC4/fFtBLVowLTktXXsyLH1cLj8pfCcgICMgZG9tYWluLi4uCisgICAgICAgIHInbG9jYWxob3N0fCcgICMgbG9jYWxob3N0Li4uCisgICAgICAgIHInXGR7MSwzfVwuXGR7MSwzfVwuXGR7MSwzfVwuXGR7MSwzfXwnICAjIC4uLm9yIGlwdjQKKyAgICAgICAgcidcWz9bQS1GMC05XSo6W0EtRjAtOTpdK1xdPyknICAjIC4uLm9yIGlwdjYKKyAgICAgICAgcicoPzo6XGQrKT8nICAjIG9wdGlvbmFsIHBvcnQKKyAgICAgICAgcicoPzovP3xbLz9dXFMrKSQnLCByZS5JR05PUkVDQVNFKQorCitkZWYgR2l0VVJMRmllbGQoKiprd2FyZ3MpOgorICAgIHIgPSBtb2RlbHMuVVJMRmllbGQoKiprd2FyZ3MpCisgICAgZm9yIGkgaW4geHJhbmdlKGxlbihyLnZhbGlkYXRvcnMpKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShyLnZhbGlkYXRvcnNbaV0sIHZhbGlkYXRvcnMuVVJMVmFsaWRhdG9yKToKKyAgICAgICAgICAgIHIudmFsaWRhdG9yc1tpXSA9IEdpdFVSTFZhbGlkYXRvcigpCisgICAgcmV0dXJuIHIKKworCitjbGFzcyBUb2FzdGVyU2V0dGluZyhtb2RlbHMuTW9kZWwpOgorICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NjMpCisgICAgaGVscHRleHQgPSBtb2RlbHMuVGV4dEZpZWxkKCkKKyAgICB2YWx1ZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTUpCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIHJldHVybiAiU2V0dGluZyAlcyA9ICVzIiAlIChzZWxmLm5hbWUsIHNlbGYudmFsdWUpCisKK2NsYXNzIFByb2plY3RNYW5hZ2VyKG1vZGVscy5NYW5hZ2VyKToKKyAgICBkZWYgY3JlYXRlX3Byb2plY3Qoc2VsZiwgbmFtZSwgcmVsZWFzZSk6CisgICAgICAgIGlmIHJlbGVhc2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBwcmogPSBzZWxmLm1vZGVsKG5hbWUgPSBuYW1lLCBiaXRiYWtlX3ZlcnNpb24gPSByZWxlYXNlLmJpdGJha2VfdmVyc2lvbiwgcmVsZWFzZSA9IHJlbGVhc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmogPSBzZWxmLm1vZGVsKG5hbWUgPSBuYW1lLCBiaXRiYWtlX3ZlcnNpb24gPSBOb25lLCByZWxlYXNlID0gTm9uZSkKKworICAgICAgICBwcmouc2F2ZSgpCisKKyAgICAgICAgZm9yIGRlZmF1bHRjb25mIGluIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZmlsdGVyKG5hbWVfX3N0YXJ0c3dpdGg9IkRFRkNPTkZfIik6CisgICAgICAgICAgICBuYW1lID0gZGVmYXVsdGNvbmYubmFtZVs4Ol0KKyAgICAgICAgICAgIFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmNyZWF0ZSggcHJvamVjdCA9IHByaiwKKyAgICAgICAgICAgICAgICBuYW1lID0gbmFtZSwKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlZmF1bHRjb25mLnZhbHVlKQorCisgICAgICAgIGlmIHJlbGVhc2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBwcmoKKworICAgICAgICBmb3IgcmRsIGluIHJlbGVhc2UucmVsZWFzZWRlZmF1bHRsYXllcl9zZXQuYWxsKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbHYgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZmlsdGVyKGxheWVyX19uYW1lID0gcmRsLmxheWVyX25hbWUsIHVwX2JyYW5jaF9fbmFtZSA9IHJlbGVhc2UuYnJhbmNoX25hbWUpWzBdLmdldF9lcXVpdmFsZW50c193cHJpb3JpdHkocHJqKVswXQorICAgICAgICAgICAgICAgIFByb2plY3RMYXllci5vYmplY3RzLmNyZWF0ZSggcHJvamVjdCA9IHByaiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyY29tbWl0ID0gbHYsCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCA9IEZhbHNlICkKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgICMgd2UgbWF5IGhhdmUgbm8gdmFsaWQgbGF5ZXIgdmVyc2lvbiBvYmplY3RzLCBhbmQgdGhhdCdzIG9rCisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJldHVybiBwcmoKKworICAgIGRlZiBjcmVhdGUoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJJbnZhbGlkIGNhbGwgdG8gUHJvamVjdC5vYmplY3RzLmNyZWF0ZS4gVXNlIFByb2plY3Qub2JqZWN0cy5jcmVhdGVfcHJvamVjdCgpIHRvIGNyZWF0ZSBhIHByb2plY3QiKQorCisgICAgIyByZXR1cm4gc2luZ2xlIG9iamVjdCB3aXRoIGlzX2RlZmF1bHQgPSBUcnVlCisgICAgZGVmIGdldF9kZWZhdWx0X3Byb2plY3Qoc2VsZik6CisgICAgICAgIHByb2plY3RzID0gc3VwZXIoUHJvamVjdE1hbmFnZXIsIHNlbGYpLmZpbHRlcihpc19kZWZhdWx0ID0gVHJ1ZSkKKyAgICAgICAgaWYgbGVuKHByb2plY3RzKSA+IDE6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkluY29uc2lzdGVudCBwcm9qZWN0IGRhdGE6IG11bHRpcGxlICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZhdWx0IHByb2plY3RzIChpLmUuIHdpdGggaXNfZGVmYXVsdD1UcnVlKSIpCisgICAgICAgIGVsaWYgbGVuKHByb2plY3RzKSA8IDE6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkluY29uc2lzdGVudCBwcm9qZWN0IGRhdGE6IG5vIGRlZmF1bHQgcHJvamVjdCBmb3VuZCIpCisgICAgICAgIHJldHVybiBwcm9qZWN0c1swXQorCitjbGFzcyBQcm9qZWN0KG1vZGVscy5Nb2RlbCk6CisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWyduYW1lJywgJ3Nob3J0X2Rlc2NyaXB0aW9uJywgJ3JlbGVhc2VfX25hbWUnLCAncmVsZWFzZV9fYnJhbmNoX25hbWUnXQorICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwKQorICAgIHNob3J0X2Rlc2NyaXB0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwLCBibGFuaz1UcnVlKQorICAgIGJpdGJha2VfdmVyc2lvbiA9IG1vZGVscy5Gb3JlaWduS2V5KCdCaXRiYWtlVmVyc2lvbicsIG51bGw9VHJ1ZSkKKyAgICByZWxlYXNlICAgICA9IG1vZGVscy5Gb3JlaWduS2V5KCJSZWxlYXNlIiwgbnVsbD1UcnVlKQorICAgIGNyZWF0ZWQgICAgID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoYXV0b19ub3dfYWRkID0gVHJ1ZSkKKyAgICB1cGRhdGVkICAgICA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGF1dG9fbm93ID0gVHJ1ZSkKKyAgICAjIFRoaXMgaXMgYSBob3JyaWJsZSBoYWNrOyBzaW5jZSBUb2FzdGVyIGhhcyBubyAiVXNlciIgbW9kZWwgYXZhaWxhYmxlIHdoZW4KKyAgICAjIHJ1bm5pbmcgaW4gaW50ZXJhY3RpdmUgbW9kZSwgd2UgY2FuJ3QgcmVmZXJlbmNlIHRoZSBmaWVsZCBoZXJlIGRpcmVjdGx5CisgICAgIyBJbnN0ZWFkLCB3ZSBrZWVwIGEgcG9zc2libGUgbnVsbCByZWZlcmVuY2UgdG8gdGhlIFVzZXIgaWQsIGFzIG5vdCB0byBmb3JjZQorICAgICMgaGFyZCBsaW5rcyB0byBwb3NzaWJseSBtaXNzaW5nIG1vZGVscworICAgIHVzZXJfaWQgICAgID0gbW9kZWxzLkludGVnZXJGaWVsZChudWxsID0gVHJ1ZSkKKyAgICBvYmplY3RzICAgICA9IFByb2plY3RNYW5hZ2VyKCkKKworICAgICMgc2V0IHRvIFRydWUgZm9yIHRoZSBwcm9qZWN0IHdoaWNoIGlzIHRoZSBkZWZhdWx0IGNvbnRhaW5lcgorICAgICMgZm9yIGJ1aWxkcyBpbml0aWF0ZWQgYnkgdGhlIGNvbW1hbmQgbGluZSBldGMuCisgICAgaXNfZGVmYXVsdCAgPSBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQgPSBGYWxzZSkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyAoUmVsZWFzZSAlcywgQkJWICVzKSIgJSAoc2VsZi5uYW1lLCBzZWxmLnJlbGVhc2UsIHNlbGYuYml0YmFrZV92ZXJzaW9uKQorCisgICAgZGVmIGdldF9jdXJyZW50X21hY2hpbmVfbmFtZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucHJvamVjdHZhcmlhYmxlX3NldC5nZXQobmFtZT0iTUFDSElORSIpLnZhbHVlCisgICAgICAgIGV4Y2VwdCAoUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdCxJbmRleEVycm9yKToKKyAgICAgICAgICAgIHJldHVybiggIk5vbmUiICk7CisKKyAgICBkZWYgZ2V0X251bWJlcl9vZl9idWlsZHMoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBsZW4oQnVpbGQub2JqZWN0cy5maWx0ZXIoIHByb2plY3QgPSBzZWxmLmlkICkpCisgICAgICAgIGV4Y2VwdCAoQnVpbGQuRG9lc05vdEV4aXN0LEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuKCAwICkKKworICAgIGRlZiBnZXRfbGFzdF9idWlsZF9pZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIEJ1aWxkLm9iamVjdHMuZmlsdGVyKCBwcm9qZWN0ID0gc2VsZi5pZCApLm9yZGVyX2J5KCctY29tcGxldGVkX29uJylbMF0uaWQKKyAgICAgICAgZXhjZXB0IChCdWlsZC5Eb2VzTm90RXhpc3QsSW5kZXhFcnJvcik6CisgICAgICAgICAgICByZXR1cm4oIC0xICkKKworICAgIGRlZiBnZXRfbGFzdF9vdXRjb21lKHNlbGYpOgorICAgICAgICBidWlsZF9pZCA9IHNlbGYuZ2V0X2xhc3RfYnVpbGRfaWQKKyAgICAgICAgaWYgKC0xID09IGJ1aWxkX2lkKToKKyAgICAgICAgICAgIHJldHVybiggIiIgKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gQnVpbGQub2JqZWN0cy5maWx0ZXIoIGlkID0gc2VsZi5nZXRfbGFzdF9idWlsZF9pZCApWyAwIF0ub3V0Y29tZQorICAgICAgICBleGNlcHQgKEJ1aWxkLkRvZXNOb3RFeGlzdCxJbmRleEVycm9yKToKKyAgICAgICAgICAgIHJldHVybiggIm5vdF9mb3VuZCIgKQorCisgICAgZGVmIGdldF9sYXN0X3RhcmdldChzZWxmKToKKyAgICAgICAgYnVpbGRfaWQgPSBzZWxmLmdldF9sYXN0X2J1aWxkX2lkCisgICAgICAgIGlmICgtMSA9PSBidWlsZF9pZCk6CisgICAgICAgICAgICByZXR1cm4oICIiICkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFRhcmdldC5vYmplY3RzLmZpbHRlcihidWlsZCA9IGJ1aWxkX2lkKVswXS50YXJnZXQKKyAgICAgICAgZXhjZXB0IChUYXJnZXQuRG9lc05vdEV4aXN0LEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuKCAibm90X2ZvdW5kIiApCisKKyAgICBkZWYgZ2V0X2xhc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICBidWlsZF9pZCA9IHNlbGYuZ2V0X2xhc3RfYnVpbGRfaWQKKyAgICAgICAgaWYgKC0xID09IGJ1aWxkX2lkKToKKyAgICAgICAgICAgIHJldHVybiggMCApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBCdWlsZC5vYmplY3RzLmZpbHRlcihpZCA9IGJ1aWxkX2lkKVsgMCBdLmVycm9ycy5jb3VudCgpCisgICAgICAgIGV4Y2VwdCAoQnVpbGQuRG9lc05vdEV4aXN0LEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuKCAibm90X2ZvdW5kIiApCisKKyAgICBkZWYgZ2V0X2xhc3Rfd2FybmluZ3Moc2VsZik6CisgICAgICAgIGJ1aWxkX2lkID0gc2VsZi5nZXRfbGFzdF9idWlsZF9pZAorICAgICAgICBpZiAoLTEgPT0gYnVpbGRfaWQpOgorICAgICAgICAgICAgcmV0dXJuKCAwICkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIEJ1aWxkLm9iamVjdHMuZmlsdGVyKGlkID0gYnVpbGRfaWQpWyAwIF0ud2FybmluZ3MuY291bnQoKQorICAgICAgICBleGNlcHQgKEJ1aWxkLkRvZXNOb3RFeGlzdCxJbmRleEVycm9yKToKKyAgICAgICAgICAgIHJldHVybiggIm5vdF9mb3VuZCIgKQorCisgICAgZGVmIGdldF9sYXN0X2ltZ2ZpbGVzKHNlbGYpOgorICAgICAgICBidWlsZF9pZCA9IHNlbGYuZ2V0X2xhc3RfYnVpbGRfaWQKKyAgICAgICAgaWYgKC0xID09IGJ1aWxkX2lkKToKKyAgICAgICAgICAgIHJldHVybiggIiIgKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gVmFyaWFibGUub2JqZWN0cy5maWx0ZXIoYnVpbGQgPSBidWlsZF9pZCwgdmFyaWFibGVfbmFtZSA9ICJJTUFHRV9GU1RZUEVTIilbIDAgXS52YXJpYWJsZV92YWx1ZQorICAgICAgICBleGNlcHQgKFZhcmlhYmxlLkRvZXNOb3RFeGlzdCxJbmRleEVycm9yKToKKyAgICAgICAgICAgIHJldHVybiggIm5vdF9mb3VuZCIgKQorCisgICAgIyByZXR1cm5zIGEgcXVlcnlzZXQgb2YgY29tcGF0aWJsZSBsYXllcnMgZm9yIGEgcHJvamVjdAorICAgIGRlZiBjb21wYXRpYmxlX2xheWVydmVyc2lvbnMoc2VsZiwgcmVsZWFzZSA9IE5vbmUsIGxheWVyX25hbWUgPSBOb25lKToKKyAgICAgICAgaWYgcmVsZWFzZSA9PSBOb25lOgorICAgICAgICAgICAgcmVsZWFzZSA9IHNlbGYucmVsZWFzZQorICAgICAgICAjIGxheWVycyBvbiB0aGUgc2FtZSBicmFuY2ggb3IgbGF5ZXJzIHNwZWNpZmljYWxseSBzZXQgZm9yIHRoaXMgcHJvamVjdAorICAgICAgICBxdWVyeXNldCA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5maWx0ZXIoKFEodXBfYnJhbmNoX19uYW1lID0gcmVsZWFzZS5icmFuY2hfbmFtZSkgJiBRKHByb2plY3QgPSBOb25lKSkgfCBRKHByb2plY3QgPSBzZWxmKSB8IFEoYnVpbGRfX3Byb2plY3QgPSBzZWxmKSkKKworICAgICAgICBpZiBsYXllcl9uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyB3ZSBzZWxlY3Qgb25seSBhIGxheWVyIG5hbWUKKyAgICAgICAgICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQuZmlsdGVyKGxheWVyX19uYW1lID0gbGF5ZXJfbmFtZSkKKworICAgICAgICAjIG9yZGVyIGJ5IGxheWVyIHZlcnNpb24gcHJpb3JpdHkKKyAgICAgICAgcXVlcnlzZXQgPSBxdWVyeXNldC5maWx0ZXIoUShsYXllcl9zb3VyY2U9Tm9uZSkgfCBRKGxheWVyX3NvdXJjZV9fcmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHlfX3JlbGVhc2UgPSByZWxlYXNlKSkuc2VsZWN0X3JlbGF0ZWQoJ2xheWVyX3NvdXJjZScsICdsYXllcicsICd1cF9icmFuY2gnLCAibGF5ZXJfc291cmNlX19yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eV9fcHJpb3JpdHkiKS5vcmRlcl9ieSgiLWxheWVyX3NvdXJjZV9fcmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHlfX3ByaW9yaXR5IikKKworICAgICAgICByZXR1cm4gcXVlcnlzZXQKKworICAgIGRlZiBwcm9qZWN0bGF5ZXJfZXF1aXZhbGVudF9zZXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucygpLmZpbHRlcihsYXllcl9fbmFtZV9faW4gPSBbeC5sYXllcmNvbW1pdC5sYXllci5uYW1lIGZvciB4IGluIHNlbGYucHJvamVjdGxheWVyX3NldC5hbGwoKV0pLnNlbGVjdF9yZWxhdGVkKCJ1cF9icmFuY2giKQorCisgICAgZGVmIGdldF9hdmFpbGFibGVfbWFjaGluZXMoc2VsZik6CisgICAgICAgICIiIiBSZXR1cm5zIFF1ZXJ5U2V0IG9mIGFsbCBNYWNoaW5lcyB3aGljaCBhcmUgcHJvdmlkZWQgYnkgdGhlCisgICAgICAgIExheWVycyBjdXJyZW50bHkgYWRkZWQgdG8gdGhlIFByb2plY3QgIiIiCisgICAgICAgIHF1ZXJ5c2V0ID0gTWFjaGluZS5vYmplY3RzLmZpbHRlcihsYXllcl92ZXJzaW9uX19pbj1zZWxmLnByb2plY3RsYXllcl9lcXVpdmFsZW50X3NldCkKKyAgICAgICAgcmV0dXJuIHF1ZXJ5c2V0CisKKyAgICBkZWYgZ2V0X2FsbF9jb21wYXRpYmxlX21hY2hpbmVzKHNlbGYpOgorICAgICAgICAiIiIgUmV0dXJucyBRdWVyeVNldCBvZiBhbGwgdGhlIGNvbXBhdGlibGUgbWFjaGluZXMgYXZhaWxhYmxlIHRvIHRoZQorICAgICAgICBwcm9qZWN0IGluY2x1ZGluZyBvbmVzIGZyb20gTGF5ZXJzIG5vdCBjdXJyZW50bHkgYWRkZWQgIiIiCisgICAgICAgIGNvbXBhdGlibGVfbGF5ZXJzID0gc2VsZi5jb21wYXRpYmxlX2xheWVydmVyc2lvbnMoKQorCisgICAgICAgIHF1ZXJ5c2V0ID0gTWFjaGluZS5vYmplY3RzLmZpbHRlcihsYXllcl92ZXJzaW9uX19pbj1jb21wYXRpYmxlX2xheWVycykKKyAgICAgICAgcmV0dXJuIHF1ZXJ5c2V0CisKKyAgICBkZWYgZ2V0X2F2YWlsYWJsZV9yZWNpcGVzKHNlbGYpOgorICAgICAgICAiIiIgUmV0dXJucyBRdWVyeVNldCBvZiBhbGwgUmVjaXBlcyB3aGljaCBhcmUgcHJvdmlkZWQgYnkgdGhlIExheWVycworICAgICAgICBjdXJyZW50bHkgYWRkZWQgdG8gdGhlIFByb2plY3QgIiIiCisgICAgICAgIHByb2plY3RfbGF5ZXJzID0gc2VsZi5wcm9qZWN0bGF5ZXJfZXF1aXZhbGVudF9zZXQoKQorICAgICAgICBxdWVyeXNldCA9IFJlY2lwZS5vYmplY3RzLmZpbHRlcihsYXllcl92ZXJzaW9uX19pbiA9IHByb2plY3RfbGF5ZXJzKQorCisgICAgICAgICMgQ29waWVkIGZyb20gZ2V0X2FsbF9jb21wYXRpYmxlX3JlY2lwZXMKKyAgICAgICAgc2VhcmNoX21heGlkcyA9IG1hcChsYW1iZGEgaTogaVswXSwgbGlzdChxdWVyeXNldC52YWx1ZXMoJ25hbWUnKS5kaXN0aW5jdCgpLmFubm90YXRlKG1heF9pZD1NYXgoJ2lkJykpLnZhbHVlc19saXN0KCdtYXhfaWQnKSkpCisgICAgICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQuZmlsdGVyKGlkX19pbj1zZWFyY2hfbWF4aWRzKS5zZWxlY3RfcmVsYXRlZCgnbGF5ZXJfdmVyc2lvbicsICdsYXllcl92ZXJzaW9uX19sYXllcicsICdsYXllcl92ZXJzaW9uX191cF9icmFuY2gnLCAnbGF5ZXJfc291cmNlJykKKyAgICAgICAgIyBFbmQgY29weQorCisgICAgICAgIHJldHVybiBxdWVyeXNldAorCisgICAgZGVmIGdldF9hbGxfY29tcGF0aWJsZV9yZWNpcGVzKHNlbGYpOgorICAgICAgICAiIiIgUmV0dXJucyBRdWVyeVNldCBvZiBhbGwgdGhlIGNvbXBhdGlibGUgUmVjaXBlcyBhdmFpbGFibGUgdG8gdGhlCisgICAgICAgIHByb2plY3QgaW5jbHVkaW5nIG9uZXMgZnJvbSBMYXllcnMgbm90IGN1cnJlbnRseSBhZGRlZCAiIiIKKyAgICAgICAgY29tcGF0aWJsZV9sYXllcnZlcnNpb25zID0gc2VsZi5jb21wYXRpYmxlX2xheWVydmVyc2lvbnMoKQorICAgICAgICBxdWVyeXNldCA9IFJlY2lwZS5vYmplY3RzLmZpbHRlcihsYXllcl92ZXJzaW9uX19pbiA9IGNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucykKKworICAgICAgICBzZWFyY2hfbWF4aWRzID0gbWFwKGxhbWJkYSBpOiBpWzBdLCBsaXN0KHF1ZXJ5c2V0LnZhbHVlcygnbmFtZScpLmRpc3RpbmN0KCkuYW5ub3RhdGUobWF4X2lkPU1heCgnaWQnKSkudmFsdWVzX2xpc3QoJ21heF9pZCcpKSkKKworICAgICAgICBxdWVyeXNldCA9IHF1ZXJ5c2V0LmZpbHRlcihpZF9faW49c2VhcmNoX21heGlkcykuc2VsZWN0X3JlbGF0ZWQoJ2xheWVyX3ZlcnNpb24nLCAnbGF5ZXJfdmVyc2lvbl9fbGF5ZXInLCAnbGF5ZXJfdmVyc2lvbl9fdXBfYnJhbmNoJywgJ2xheWVyX3NvdXJjZScpCisgICAgICAgIHJldHVybiBxdWVyeXNldAorCisKKyAgICBkZWYgc2NoZWR1bGVfYnVpbGQoc2VsZik6CisgICAgICAgIGZyb20gYmxkY29udHJvbC5tb2RlbHMgaW1wb3J0IEJ1aWxkUmVxdWVzdCwgQlJUYXJnZXQsIEJSTGF5ZXIsIEJSVmFyaWFibGUsIEJSQml0YmFrZQorICAgICAgICBiciA9IEJ1aWxkUmVxdWVzdC5vYmplY3RzLmNyZWF0ZShwcm9qZWN0ID0gc2VsZikKKyAgICAgICAgdHJ5OgorCisgICAgICAgICAgICBCUkJpdGJha2Uub2JqZWN0cy5jcmVhdGUocmVxID0gYnIsCisgICAgICAgICAgICAgICAgZ2l0dXJsID0gc2VsZi5iaXRiYWtlX3ZlcnNpb24uZ2l0dXJsLAorICAgICAgICAgICAgICAgIGNvbW1pdCA9IHNlbGYuYml0YmFrZV92ZXJzaW9uLmJyYW5jaCwKKyAgICAgICAgICAgICAgICBkaXJwYXRoID0gc2VsZi5iaXRiYWtlX3ZlcnNpb24uZGlycGF0aCkKKworICAgICAgICAgICAgZm9yIGwgaW4gc2VsZi5wcm9qZWN0bGF5ZXJfc2V0LmFsbCgpLm9yZGVyX2J5KCJwayIpOgorICAgICAgICAgICAgICAgIGNvbW1pdCA9IGwubGF5ZXJjb21taXQuZ2V0X3Zjc19yZWZlcmVuY2UoKQorICAgICAgICAgICAgICAgIHByaW50KCJpaSBCdWlsZGluZyBsYXllciAiLCBsLmxheWVyY29tbWl0LmxheWVyLm5hbWUsICIgYXQgdmNzIHBvaW50ICIsIGNvbW1pdCkKKyAgICAgICAgICAgICAgICBCUkxheWVyLm9iamVjdHMuY3JlYXRlKHJlcSA9IGJyLCBuYW1lID0gbC5sYXllcmNvbW1pdC5sYXllci5uYW1lLCBnaXR1cmwgPSBsLmxheWVyY29tbWl0LmxheWVyLnZjc191cmwsIGNvbW1pdCA9IGNvbW1pdCwgZGlycGF0aCA9IGwubGF5ZXJjb21taXQuZGlycGF0aCkKKworICAgICAgICAgICAgYnIuc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX1FVRVVFRAorICAgICAgICAgICAgbm93ID0gdGltZXpvbmUubm93KCkKKyAgICAgICAgICAgIGJyLmJ1aWxkID0gQnVpbGQub2JqZWN0cy5jcmVhdGUocHJvamVjdCA9IHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9vbj1ub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRfb249bm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBmb3IgdCBpbiBzZWxmLnByb2plY3R0YXJnZXRfc2V0LmFsbCgpOgorICAgICAgICAgICAgICAgIEJSVGFyZ2V0Lm9iamVjdHMuY3JlYXRlKHJlcSA9IGJyLCB0YXJnZXQgPSB0LnRhcmdldCwgdGFzayA9IHQudGFzaykKKyAgICAgICAgICAgICAgICBUYXJnZXQub2JqZWN0cy5jcmVhdGUoYnVpbGQgPSBici5idWlsZCwgdGFyZ2V0ID0gdC50YXJnZXQpCisKKyAgICAgICAgICAgIGZvciB2IGluIHNlbGYucHJvamVjdHZhcmlhYmxlX3NldC5hbGwoKToKKyAgICAgICAgICAgICAgICBCUlZhcmlhYmxlLm9iamVjdHMuY3JlYXRlKHJlcSA9IGJyLCBuYW1lID0gdi5uYW1lLCB2YWx1ZSA9IHYudmFsdWUpCisKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJyLmJ1aWxkLm1hY2hpbmUgPSBzZWxmLnByb2plY3R2YXJpYWJsZV9zZXQuZ2V0KG5hbWUgPSAnTUFDSElORScpLnZhbHVlCisgICAgICAgICAgICAgICAgYnIuYnVpbGQuc2F2ZSgpCisgICAgICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBici5zYXZlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICMgcmV2ZXJ0IHRoZSBidWlsZCByZXF1ZXN0IGNyZWF0aW9uIHNpbmNlIHdlJ3JlIG5vdCBkb25lIGNsZWFubHkKKyAgICAgICAgICAgIGJyLmRlbGV0ZSgpCisgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gYnIKKworY2xhc3MgQnVpbGQobW9kZWxzLk1vZGVsKToKKyAgICBTVUNDRUVERUQgPSAwCisgICAgRkFJTEVEID0gMQorICAgIElOX1BST0dSRVNTID0gMgorCisgICAgQlVJTERfT1VUQ09NRSA9ICgKKyAgICAgICAgKFNVQ0NFRURFRCwgJ1N1Y2NlZWRlZCcpLAorICAgICAgICAoRkFJTEVELCAnRmFpbGVkJyksCisgICAgICAgIChJTl9QUk9HUkVTUywgJ0luIFByb2dyZXNzJyksCisgICAgKQorCisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWydtYWNoaW5lJywgJ2Nvb2tlcl9sb2dfcGF0aCcsICJ0YXJnZXRfX3RhcmdldCIsICJ0YXJnZXRfX3RhcmdldF9pbWFnZV9maWxlX19maWxlX25hbWUiXQorCisgICAgcHJvamVjdCA9IG1vZGVscy5Gb3JlaWduS2V5KFByb2plY3QpICAgICAgICAgICAgIyBtdXN0IGhhdmUgYSBwcm9qZWN0CisgICAgbWFjaGluZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgZGlzdHJvID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBkaXN0cm9fdmVyc2lvbiA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgc3RhcnRlZF9vbiA9IG1vZGVscy5EYXRlVGltZUZpZWxkKCkKKyAgICBjb21wbGV0ZWRfb24gPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZCgpCisgICAgb3V0Y29tZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcz1CVUlMRF9PVVRDT01FLCBkZWZhdWx0PUlOX1BST0dSRVNTKQorICAgIGNvb2tlcl9sb2dfcGF0aCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD01MDApCisgICAgYnVpbGRfbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgYml0YmFrZV92ZXJzaW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwKQorCisgICAgZGVmIGNvbXBsZXRlcGVyKHNlbGYpOgorICAgICAgICB0ZiA9IFRhc2sub2JqZWN0cy5maWx0ZXIoYnVpbGQgPSBzZWxmKQorICAgICAgICB0ZmMgPSB0Zi5jb3VudCgpCisgICAgICAgIGlmIHRmYyA+IDA6CisgICAgICAgICAgICBjb21wbGV0ZXBlciA9IHRmLmV4Y2x1ZGUob3JkZXJfX2lzbnVsbD1UcnVlKS5jb3VudCgpKjEwMC90Zi5jb3VudCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb21wbGV0ZXBlciA9IDAKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRlcGVyCisKKyAgICBkZWYgZXRhKHNlbGYpOgorICAgICAgICBldGEgPSB0aW1lem9uZS5ub3coKQorICAgICAgICBjb21wbGV0ZXBlciA9IHNlbGYuY29tcGxldGVwZXIoKQorICAgICAgICBpZiBzZWxmLmNvbXBsZXRlcGVyKCkgPiAwOgorICAgICAgICAgICAgZXRhICs9ICgoZXRhIC0gc2VsZi5zdGFydGVkX29uKSooMTAwLWNvbXBsZXRlcGVyKSkvY29tcGxldGVwZXIKKyAgICAgICAgcmV0dXJuIGV0YQorCisKKyAgICBkZWYgZ2V0X3NvcnRlZF90YXJnZXRfbGlzdChzZWxmKToKKyAgICAgICAgdGd0cyA9IFRhcmdldC5vYmplY3RzLmZpbHRlcihidWlsZF9pZCA9IHNlbGYuaWQpLm9yZGVyX2J5KCAndGFyZ2V0JyApOworICAgICAgICByZXR1cm4oIHRndHMgKTsKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0b2FzdGVyX2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmxvZ21lc3NhZ2Vfc2V0LmZpbHRlcihsZXZlbD1Mb2dNZXNzYWdlLkVYQ0VQVElPTikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBlcnJvcnMoc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5sb2dtZXNzYWdlX3NldC5maWx0ZXIobGV2ZWw9TG9nTWVzc2FnZS5FUlJPUil8c2VsZi5sb2dtZXNzYWdlX3NldC5maWx0ZXIobGV2ZWw9TG9nTWVzc2FnZS5FWENFUFRJT04pKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHdhcm5pbmdzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5sb2dtZXNzYWdlX3NldC5maWx0ZXIobGV2ZWw9TG9nTWVzc2FnZS5XQVJOSU5HKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRpbWVzcGVudF9zZWNvbmRzKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuY29tcGxldGVkX29uIC0gc2VsZi5zdGFydGVkX29uKS50b3RhbF9zZWNvbmRzKCkKKworICAgIGRlZiBnZXRfY3VycmVudF9zdGF0dXMoc2VsZik6CisgICAgICAgIGZyb20gYmxkY29udHJvbC5tb2RlbHMgaW1wb3J0IEJ1aWxkUmVxdWVzdAorICAgICAgICBpZiBzZWxmLm91dGNvbWUgPT0gQnVpbGQuSU5fUFJPR1JFU1MgYW5kIHNlbGYuYnVpbGRyZXF1ZXN0LnN0YXRlICE9IEJ1aWxkUmVxdWVzdC5SRVFfSU5QUk9HUkVTUzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmJ1aWxkcmVxdWVzdC5nZXRfc3RhdGVfZGlzcGxheSgpCisgICAgICAgIHJldHVybiBzZWxmLmdldF9vdXRjb21lX2Rpc3BsYXkoKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJWQgJXMgJXMiICUgKHNlbGYuaWQsIHNlbGYucHJvamVjdCwgIiwiLmpvaW4oW3QudGFyZ2V0IGZvciB0IGluIHNlbGYudGFyZ2V0X3NldC5hbGwoKV0pKQorCisKKyMgYW4gQXJ0aWZhY3QgaXMgYW55dGhpbmcgdGhhdCByZXN1bHRzIGZyb20gYSBCdWlsZCwgYW5kIG1heSBiZSBvZiBpbnRlcmVzdCB0byB0aGUgdXNlciwgYW5kIGlzIG5vdCBzdG9yZWQgZWxzZXdoZXJlCitjbGFzcyBCdWlsZEFydGlmYWN0KG1vZGVscy5Nb2RlbCk6CisgICAgYnVpbGQgPSBtb2RlbHMuRm9yZWlnbktleShCdWlsZCkKKyAgICBmaWxlX25hbWUgPSBtb2RlbHMuRmlsZVBhdGhGaWVsZCgpCisgICAgZmlsZV9zaXplID0gbW9kZWxzLkludGVnZXJGaWVsZCgpCisKKyAgICBkZWYgZ2V0X2xvY2FsX2ZpbGVfbmFtZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVwbG95ZGlyID0gVmFyaWFibGUub2JqZWN0cy5nZXQoYnVpbGQgPSBzZWxmLmJ1aWxkLCB2YXJpYWJsZV9uYW1lPSJERVBMT1lfRElSIikudmFyaWFibGVfdmFsdWUKKyAgICAgICAgICAgIHJldHVybiAgc2VsZi5maWxlX25hbWVbbGVuKGRlcGxveWRpcikrMTpdCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZV9uYW1lCisKKworICAgIGRlZiBpc19hdmFpbGFibGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJ1aWxkLmJ1aWxkcmVxdWVzdC5lbnZpcm9ubWVudC5oYXNfYXJ0aWZhY3Qoc2VsZi5maWxlX25hbWUpCisKK2NsYXNzIFByb2plY3RUYXJnZXQobW9kZWxzLk1vZGVsKToKKyAgICBwcm9qZWN0ID0gbW9kZWxzLkZvcmVpZ25LZXkoUHJvamVjdCkKKyAgICB0YXJnZXQgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwKQorICAgIHRhc2sgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwLCBudWxsPVRydWUpCisKK2NsYXNzIFRhcmdldChtb2RlbHMuTW9kZWwpOgorICAgIHNlYXJjaF9hbGxvd2VkX2ZpZWxkcyA9IFsndGFyZ2V0JywgJ2ZpbGVfbmFtZSddCisgICAgYnVpbGQgPSBtb2RlbHMuRm9yZWlnbktleShCdWlsZCkKKyAgICB0YXJnZXQgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwKQorICAgIHRhc2sgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwLCBudWxsPVRydWUpCisgICAgaXNfaW1hZ2UgPSBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQgPSBGYWxzZSkKKyAgICBpbWFnZV9zaXplID0gbW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0PTApCisgICAgbGljZW5zZV9tYW5pZmVzdF9wYXRoID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwMCwgbnVsbD1UcnVlKQorCisgICAgZGVmIHBhY2thZ2VfY291bnQoc2VsZik6CisgICAgICAgIHJldHVybiBUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2Uub2JqZWN0cy5maWx0ZXIodGFyZ2V0X2lkX19leGFjdD1zZWxmLmlkKS5jb3VudCgpCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnRhcmdldAorCitjbGFzcyBUYXJnZXRfSW1hZ2VfRmlsZShtb2RlbHMuTW9kZWwpOgorICAgIHRhcmdldCA9IG1vZGVscy5Gb3JlaWduS2V5KFRhcmdldCkKKyAgICBmaWxlX25hbWUgPSBtb2RlbHMuRmlsZVBhdGhGaWVsZChtYXhfbGVuZ3RoPTI1NCkKKyAgICBmaWxlX3NpemUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKCkKKworY2xhc3MgVGFyZ2V0X0ZpbGUobW9kZWxzLk1vZGVsKToKKyAgICBJVFlQRV9SRUdVTEFSID0gMQorICAgIElUWVBFX0RJUkVDVE9SWSA9IDIKKyAgICBJVFlQRV9TWU1MSU5LID0gMworICAgIElUWVBFX1NPQ0tFVCA9IDQKKyAgICBJVFlQRV9GSUZPID0gNQorICAgIElUWVBFX0NIQVJBQ1RFUiA9IDYKKyAgICBJVFlQRV9CTE9DSyA9IDcKKyAgICBJVFlQRVMgPSAoIChJVFlQRV9SRUdVTEFSICwncmVndWxhcicpLAorICAgICAgICAoIElUWVBFX0RJUkVDVE9SWSAsJ2RpcmVjdG9yeScpLAorICAgICAgICAoIElUWVBFX1NZTUxJTksgLCdzeW1saW5rJyksCisgICAgICAgICggSVRZUEVfU09DS0VUICwnc29ja2V0JyksCisgICAgICAgICggSVRZUEVfRklGTyAsJ2ZpZm8nKSwKKyAgICAgICAgKCBJVFlQRV9DSEFSQUNURVIgLCdjaGFyYWN0ZXInKSwKKyAgICAgICAgKCBJVFlQRV9CTE9DSyAsJ2Jsb2NrJyksCisgICAgICAgICkKKworICAgIHRhcmdldCA9IG1vZGVscy5Gb3JlaWduS2V5KFRhcmdldCkKKyAgICBwYXRoID0gbW9kZWxzLkZpbGVQYXRoRmllbGQoKQorICAgIHNpemUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKCkKKyAgICBpbm9kZXR5cGUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXMgPSBJVFlQRVMpCisgICAgcGVybWlzc2lvbiA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xNikKKyAgICBvd25lciA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMjgpCisgICAgZ3JvdXAgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTI4KQorICAgIGRpcmVjdG9yeSA9IG1vZGVscy5Gb3JlaWduS2V5KCdUYXJnZXRfRmlsZScsIHJlbGF0ZWRfbmFtZT0iZGlyZWN0b3J5X3NldCIsIG51bGw9VHJ1ZSkKKyAgICBzeW1fdGFyZ2V0ID0gbW9kZWxzLkZvcmVpZ25LZXkoJ1RhcmdldF9GaWxlJywgcmVsYXRlZF9uYW1lPSJzeW1saW5rX3NldCIsIG51bGw9VHJ1ZSkKKworCitjbGFzcyBUYXNrKG1vZGVscy5Nb2RlbCk6CisKKyAgICBTU1RBVEVfTkEgPSAwCisgICAgU1NUQVRFX01JU1MgPSAxCisgICAgU1NUQVRFX0ZBSUxFRCA9IDIKKyAgICBTU1RBVEVfUkVTVE9SRUQgPSAzCisKKyAgICBTU1RBVEVfUkVTVUxUID0gKAorICAgICAgICAoU1NUQVRFX05BLCAnTm90IEFwcGxpY2FibGUnKSwgIyBGb3IgcmVzdCBvZiB0YXNrcywgYnV0IHRoZXkgc3RpbGwgbmVlZCBjaGVja2luZy4KKyAgICAgICAgKFNTVEFURV9NSVNTLCAnRmlsZSBub3QgaW4gY2FjaGUnKSwgIyB0aGUgc3N0YXRlIG9iamVjdCB3YXMgbm90IGZvdW5kCisgICAgICAgIChTU1RBVEVfRkFJTEVELCAnRmFpbGVkJyksICMgdGhlcmUgd2FzIGEgcGtnLCBidXQgdGhlIHNjcmlwdCBmYWlsZWQKKyAgICAgICAgKFNTVEFURV9SRVNUT1JFRCwgJ1N1Y2NlZWRlZCcpLCAjIHN1Y2Nlc3NmdWxseSByZXN0b3JlZAorICAgICkKKworICAgIENPRElOR19OQSA9IDAKKyAgICBDT0RJTkdfUFlUSE9OID0gMgorICAgIENPRElOR19TSEVMTCA9IDMKKworICAgIFRBU0tfQ09ESU5HID0gKAorICAgICAgICAoQ09ESU5HX05BLCAnTi9BJyksCisgICAgICAgIChDT0RJTkdfUFlUSE9OLCAnUHl0aG9uJyksCisgICAgICAgIChDT0RJTkdfU0hFTEwsICdTaGVsbCcpLAorICAgICkKKworICAgIE9VVENPTUVfTkEgPSAtMQorICAgIE9VVENPTUVfU1VDQ0VTUyA9IDAKKyAgICBPVVRDT01FX0NPVkVSRUQgPSAxCisgICAgT1VUQ09NRV9DQUNIRUQgPSAyCisgICAgT1VUQ09NRV9QUkVCVUlMVCA9IDMKKyAgICBPVVRDT01FX0ZBSUxFRCA9IDQKKyAgICBPVVRDT01FX0VNUFRZID0gNQorCisgICAgVEFTS19PVVRDT01FID0gKAorICAgICAgICAoT1VUQ09NRV9OQSwgJ05vdCBBdmFpbGFibGUnKSwKKyAgICAgICAgKE9VVENPTUVfU1VDQ0VTUywgJ1N1Y2NlZWRlZCcpLAorICAgICAgICAoT1VUQ09NRV9DT1ZFUkVELCAnQ292ZXJlZCcpLAorICAgICAgICAoT1VUQ09NRV9DQUNIRUQsICdDYWNoZWQnKSwKKyAgICAgICAgKE9VVENPTUVfUFJFQlVJTFQsICdQcmVidWlsdCcpLAorICAgICAgICAoT1VUQ09NRV9GQUlMRUQsICdGYWlsZWQnKSwKKyAgICAgICAgKE9VVENPTUVfRU1QVFksICdFbXB0eScpLAorICAgICkKKworICAgIFRBU0tfT1VUQ09NRV9IRUxQID0gKAorICAgICAgICAoT1VUQ09NRV9TVUNDRVNTLCAnVGhpcyB0YXNrIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQnKSwKKyAgICAgICAgKE9VVENPTUVfQ09WRVJFRCwgJ1RoaXMgdGFzayBkaWQgbm90IHJ1biBiZWNhdXNlIGl0cyBvdXRwdXQgaXMgcHJvdmlkZWQgYnkgYW5vdGhlciB0YXNrJyksCisgICAgICAgIChPVVRDT01FX0NBQ0hFRCwgJ1RoaXMgdGFzayByZXN0b3JlZCBvdXRwdXQgZnJvbSB0aGUgc3N0YXRlLWNhY2hlIGRpcmVjdG9yeSBvciBtaXJyb3JzJyksCisgICAgICAgIChPVVRDT01FX1BSRUJVSUxULCAnVGhpcyB0YXNrIGRpZCBub3QgcnVuIGJlY2F1c2UgaXRzIG91dGNvbWUgd2FzIHJldXNlZCBmcm9tIGEgcHJldmlvdXMgYnVpbGQnKSwKKyAgICAgICAgKE9VVENPTUVfRkFJTEVELCAnVGhpcyB0YXNrIGRpZCBub3QgY29tcGxldGUnKSwKKyAgICAgICAgKE9VVENPTUVfRU1QVFksICdUaGlzIHRhc2sgaGFzIG5vIGV4ZWN1dGFibGUgY29udGVudCcpLAorICAgICAgICAoT1VUQ09NRV9OQSwgJycpLAorICAgICkKKworICAgIHNlYXJjaF9hbGxvd2VkX2ZpZWxkcyA9IFsgInJlY2lwZV9fbmFtZSIsICJyZWNpcGVfX3ZlcnNpb24iLCAidGFza19uYW1lIiwgImxvZ2ZpbGUiIF0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihUYXNrLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2hlbHB0ZXh0ID0gSGVscFRleHQub2JqZWN0cy5nZXQoa2V5PXNlbGYudGFza19uYW1lLCBhcmVhPUhlbHBUZXh0LlZBUklBQkxFLCBidWlsZD1zZWxmLmJ1aWxkKS50ZXh0CisgICAgICAgIGV4Y2VwdCBIZWxwVGV4dC5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICBzZWxmLl9oZWxwdGV4dCA9IE5vbmUKKworICAgIGRlZiBnZXRfcmVsYXRlZF9zZXRzY2VuZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRhc2sub2JqZWN0cy5maWx0ZXIodGFza19leGVjdXRlZD1UcnVlLCBidWlsZCA9IHNlbGYuYnVpbGQsIHJlY2lwZSA9IHNlbGYucmVjaXBlLCB0YXNrX25hbWU9c2VsZi50YXNrX25hbWUrIl9zZXRzY2VuZSIpCisKKyAgICBkZWYgZ2V0X291dGNvbWVfdGV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRhc2suVEFTS19PVVRDT01FW2ludChzZWxmLm91dGNvbWUpICsgMV1bMV0KKworICAgIGRlZiBnZXRfb3V0Y29tZV9oZWxwKHNlbGYpOgorICAgICAgICByZXR1cm4gVGFzay5UQVNLX09VVENPTUVfSEVMUFtpbnQoc2VsZi5vdXRjb21lKV1bMV0KKworICAgIGRlZiBnZXRfc3N0YXRlX3RleHQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuc3N0YXRlX3Jlc3VsdD09VGFzay5TU1RBVEVfTkE6CisgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBUYXNrLlNTVEFURV9SRVNVTFRbaW50KHNlbGYuc3N0YXRlX3Jlc3VsdCldWzFdCisKKyAgICBkZWYgZ2V0X2V4ZWN1dGVkX2Rpc3BsYXkoc2VsZik6CisgICAgICAgIGlmIHNlbGYudGFza19leGVjdXRlZDoKKyAgICAgICAgICAgIHJldHVybiAiRXhlY3V0ZWQiCisgICAgICAgIHJldHVybiAiTm90IEV4ZWN1dGVkIgorCisgICAgZGVmIGdldF9kZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hlbHB0ZXh0CisKKyAgICBidWlsZCA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkLCByZWxhdGVkX25hbWU9J3Rhc2tfYnVpbGQnKQorICAgIG9yZGVyID0gbW9kZWxzLkludGVnZXJGaWVsZChudWxsPVRydWUpCisgICAgdGFza19leGVjdXRlZCA9IG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdD1GYWxzZSkgIyBUcnVlIG1lYW5zIEV4ZWN1dGVkLCBGYWxzZSBtZWFucyBOb3QvRXhlY3V0ZWQKKyAgICBvdXRjb21lID0gbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPVRBU0tfT1VUQ09NRSwgZGVmYXVsdD1PVVRDT01FX05BKQorICAgIHNzdGF0ZV9jaGVja3N1bSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpCisgICAgcGF0aF90b19zc3RhdGVfb2JqID0gbW9kZWxzLkZpbGVQYXRoRmllbGQobWF4X2xlbmd0aD01MDAsIGJsYW5rPVRydWUpCisgICAgcmVjaXBlID0gbW9kZWxzLkZvcmVpZ25LZXkoJ1JlY2lwZScsIHJlbGF0ZWRfbmFtZT0ndGFza3MnKQorICAgIHRhc2tfbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgc291cmNlX3VybCA9IG1vZGVscy5GaWxlUGF0aEZpZWxkKG1heF9sZW5ndGg9MjU1LCBibGFuaz1UcnVlKQorICAgIHdvcmtfZGlyZWN0b3J5ID0gbW9kZWxzLkZpbGVQYXRoRmllbGQobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpCisgICAgc2NyaXB0X3R5cGUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXM9VEFTS19DT0RJTkcsIGRlZmF1bHQ9Q09ESU5HX05BKQorICAgIGxpbmVfbnVtYmVyID0gbW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0PTApCisgICAgZGlza19pbyA9IG1vZGVscy5JbnRlZ2VyRmllbGQobnVsbD1UcnVlKQorICAgIGNwdV91c2FnZSA9IG1vZGVscy5EZWNpbWFsRmllbGQobWF4X2RpZ2l0cz04LCBkZWNpbWFsX3BsYWNlcz0yLCBudWxsPVRydWUpCisgICAgZWxhcHNlZF90aW1lID0gbW9kZWxzLkRlY2ltYWxGaWVsZChtYXhfZGlnaXRzPTgsIGRlY2ltYWxfcGxhY2VzPTIsIG51bGw9VHJ1ZSkKKyAgICBzc3RhdGVfcmVzdWx0ID0gbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPVNTVEFURV9SRVNVTFQsIGRlZmF1bHQ9U1NUQVRFX05BKQorICAgIG1lc3NhZ2UgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjQwKQorICAgIGxvZ2ZpbGUgPSBtb2RlbHMuRmlsZVBhdGhGaWVsZChtYXhfbGVuZ3RoPTI1NSwgYmxhbms9VHJ1ZSkKKworICAgIG91dGNvbWVfdGV4dCA9IHByb3BlcnR5KGdldF9vdXRjb21lX3RleHQpCisgICAgc3N0YXRlX3RleHQgID0gcHJvcGVydHkoZ2V0X3NzdGF0ZV90ZXh0KQorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVkKCVkKSAlczolcyIgJSAoc2VsZi5waywgc2VsZi5idWlsZC5waywgc2VsZi5yZWNpcGUubmFtZSwgc2VsZi50YXNrX25hbWUpCisKKyAgICBjbGFzcyBNZXRhOgorICAgICAgICBvcmRlcmluZyA9ICgnb3JkZXInLCAncmVjaXBlJyAsKQorICAgICAgICB1bmlxdWVfdG9nZXRoZXIgPSAoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnLCApCisKKworY2xhc3MgVGFza19EZXBlbmRlbmN5KG1vZGVscy5Nb2RlbCk6CisgICAgdGFzayA9IG1vZGVscy5Gb3JlaWduS2V5KFRhc2ssIHJlbGF0ZWRfbmFtZT0ndGFza19kZXBlbmRlbmNpZXNfdGFzaycpCisgICAgZGVwZW5kc19vbiA9IG1vZGVscy5Gb3JlaWduS2V5KFRhc2ssIHJlbGF0ZWRfbmFtZT0ndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcycpCisKK2NsYXNzIFBhY2thZ2UobW9kZWxzLk1vZGVsKToKKyAgICBzZWFyY2hfYWxsb3dlZF9maWVsZHMgPSBbJ25hbWUnLCAndmVyc2lvbicsICdyZXZpc2lvbicsICdyZWNpcGVfX25hbWUnLCAncmVjaXBlX192ZXJzaW9uJywgJ3JlY2lwZV9fbGljZW5zZScsICdyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lJywgJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoJywgJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fY29tbWl0JywgJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbG9jYWxfcGF0aCcsICdpbnN0YWxsZWRfbmFtZSddCisgICAgYnVpbGQgPSBtb2RlbHMuRm9yZWlnbktleSgnQnVpbGQnKQorICAgIHJlY2lwZSA9IG1vZGVscy5Gb3JlaWduS2V5KCdSZWNpcGUnLCBudWxsPVRydWUpCisgICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgaW5zdGFsbGVkX25hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwLCBkZWZhdWx0PScnKQorICAgIHZlcnNpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwLCBibGFuaz1UcnVlKQorICAgIHJldmlzaW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTMyLCBibGFuaz1UcnVlKQorICAgIHN1bW1hcnkgPSBtb2RlbHMuVGV4dEZpZWxkKGJsYW5rPVRydWUpCisgICAgZGVzY3JpcHRpb24gPSBtb2RlbHMuVGV4dEZpZWxkKGJsYW5rPVRydWUpCisgICAgc2l6ZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdD0wKQorICAgIGluc3RhbGxlZF9zaXplID0gbW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0PTApCisgICAgc2VjdGlvbiA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD04MCwgYmxhbms9VHJ1ZSkKKyAgICBsaWNlbnNlID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTgwLCBibGFuaz1UcnVlKQorCitjbGFzcyBQYWNrYWdlX0RlcGVuZGVuY3lNYW5hZ2VyKG1vZGVscy5NYW5hZ2VyKToKKyAgICB1c2VfZm9yX3JlbGF0ZWRfZmllbGRzID0gVHJ1ZQorCisgICAgZGVmIGdldF9xdWVyeV9zZXQoc2VsZik6CisgICAgICAgIHJldHVybiBzdXBlcihQYWNrYWdlX0RlcGVuZGVuY3lNYW5hZ2VyLCBzZWxmKS5nZXRfcXVlcnlfc2V0KCkuZXhjbHVkZShwYWNrYWdlX2lkID0gRignZGVwZW5kc19vbl9faWQnKSkKKworY2xhc3MgUGFja2FnZV9EZXBlbmRlbmN5KG1vZGVscy5Nb2RlbCk6CisgICAgVFlQRV9SREVQRU5EUyA9IDAKKyAgICBUWVBFX1RSREVQRU5EUyA9IDEKKyAgICBUWVBFX1JSRUNPTU1FTkRTID0gMgorICAgIFRZUEVfVFJFQ09NTUVORFMgPSAzCisgICAgVFlQRV9SU1VHR0VTVFMgPSA0CisgICAgVFlQRV9SUFJPVklERVMgPSA1CisgICAgVFlQRV9SUkVQTEFDRVMgPSA2CisgICAgVFlQRV9SQ09ORkxJQ1RTID0gNworICAgICcgVE9ETzogYnBhY2thZ2Ugc2hvdWxkIGJlIGNoYW5nZWQgdG8gcmVtb3ZlIHRoZSBERVBFTkRTX1RZUEUgYWNjZXNzICcKKyAgICBERVBFTkRTX1RZUEUgPSAoCisgICAgICAgIChUWVBFX1JERVBFTkRTLCAiZGVwZW5kcyIpLAorICAgICAgICAoVFlQRV9UUkRFUEVORFMsICJkZXBlbmRzIiksCisgICAgICAgIChUWVBFX1RSRUNPTU1FTkRTLCAicmVjb21tZW5kcyIpLAorICAgICAgICAoVFlQRV9SUkVDT01NRU5EUywgInJlY29tbWVuZHMiKSwKKyAgICAgICAgKFRZUEVfUlNVR0dFU1RTLCAic3VnZ2VzdHMiKSwKKyAgICAgICAgKFRZUEVfUlBST1ZJREVTLCAicHJvdmlkZXMiKSwKKyAgICAgICAgKFRZUEVfUlJFUExBQ0VTLCAicmVwbGFjZXMiKSwKKyAgICAgICAgKFRZUEVfUkNPTkZMSUNUUywgImNvbmZsaWN0cyIpLAorICAgICkKKyAgICAiIiIgSW5kZXhlZCBieSBkZXBfdHlwZSwgaW4gdmlldyBvcmRlciwga2V5IGZvciBzaG9ydCBuYW1lIGFuZCBoZWxwCisgICAgICAgIGRlc2NyaXB0aW9uIHdoaWNoIHdoZW4gdmlld2VkIHdpbGwgYmUgcHJpbnRmJ2Qgd2l0aCB0aGUKKyAgICAgICAgcGFja2FnZSBuYW1lLgorICAgICIiIgorICAgIERFUEVORFNfRElDVCA9IHsKKyAgICAgICAgVFlQRV9SREVQRU5EUyA6ICAgICAoImRlcGVuZHMiLCAiJXMgaXMgcmVxdWlyZWQgdG8gcnVuICVzIiksCisgICAgICAgIFRZUEVfVFJERVBFTkRTIDogICAgKCJkZXBlbmRzIiwgIiVzIGlzIHJlcXVpcmVkIHRvIHJ1biAlcyIpLAorICAgICAgICBUWVBFX1RSRUNPTU1FTkRTIDogICgicmVjb21tZW5kcyIsICIlcyBleHRlbmRzIHRoZSB1c2FiaWxpdHkgb2YgJXMiKSwKKyAgICAgICAgVFlQRV9SUkVDT01NRU5EUyA6ICAoInJlY29tbWVuZHMiLCAiJXMgZXh0ZW5kcyB0aGUgdXNhYmlsaXR5IG9mICVzIiksCisgICAgICAgIFRZUEVfUlNVR0dFU1RTIDogICAgKCJzdWdnZXN0cyIsICIlcyBpcyBzdWdnZXN0ZWQgZm9yIGluc3RhbGxhdGlvbiB3aXRoICVzIiksCisgICAgICAgIFRZUEVfUlBST1ZJREVTIDogICAgKCJwcm92aWRlcyIsICIlcyBpcyBwcm92aWRlZCBieSAlcyIpLAorICAgICAgICBUWVBFX1JSRVBMQUNFUyA6ICAgICgicmVwbGFjZXMiLCAiJXMgaXMgcmVwbGFjZWQgYnkgJXMiKSwKKyAgICAgICAgVFlQRV9SQ09ORkxJQ1RTIDogICAoImNvbmZsaWN0cyIsICIlcyBjb25mbGljdHMgd2l0aCAlcywgd2hpY2ggd2lsbCBub3QgYmUgaW5zdGFsbGVkIGlmIHRoaXMgcGFja2FnZSBpcyBub3QgZmlyc3QgcmVtb3ZlZCIpLAorICAgIH0KKworICAgIHBhY2thZ2UgPSBtb2RlbHMuRm9yZWlnbktleShQYWNrYWdlLCByZWxhdGVkX25hbWU9J3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZScpCisgICAgZGVwZW5kc19vbiA9IG1vZGVscy5Gb3JlaWduS2V5KFBhY2thZ2UsIHJlbGF0ZWRfbmFtZT0ncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JykgICAjIHNvZnQgZGVwZW5kZW5jeQorICAgIGRlcF90eXBlID0gbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPURFUEVORFNfVFlQRSkKKyAgICB0YXJnZXQgPSBtb2RlbHMuRm9yZWlnbktleShUYXJnZXQsIG51bGw9VHJ1ZSkKKyAgICBvYmplY3RzID0gUGFja2FnZV9EZXBlbmRlbmN5TWFuYWdlcigpCisKK2NsYXNzIFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZShtb2RlbHMuTW9kZWwpOgorICAgIHRhcmdldCA9IG1vZGVscy5Gb3JlaWduS2V5KFRhcmdldCkKKyAgICBwYWNrYWdlID0gbW9kZWxzLkZvcmVpZ25LZXkoUGFja2FnZSwgcmVsYXRlZF9uYW1lPSdidWlsZHRhcmdldGxpc3RfcGFja2FnZScpCisKK2NsYXNzIFBhY2thZ2VfRmlsZShtb2RlbHMuTW9kZWwpOgorICAgIHBhY2thZ2UgPSBtb2RlbHMuRm9yZWlnbktleShQYWNrYWdlLCByZWxhdGVkX25hbWU9J2J1aWxkZmlsZWxpc3RfcGFja2FnZScpCisgICAgcGF0aCA9IG1vZGVscy5GaWxlUGF0aEZpZWxkKG1heF9sZW5ndGg9MjU1LCBibGFuaz1UcnVlKQorICAgIHNpemUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKCkKKworY2xhc3MgUmVjaXBlKG1vZGVscy5Nb2RlbCk6CisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWyduYW1lJywgJ3ZlcnNpb24nLCAnZmlsZV9wYXRoJywgJ3NlY3Rpb24nLCAnc3VtbWFyeScsICdkZXNjcmlwdGlvbicsICdsaWNlbnNlJywgJ2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lJywgJ2xheWVyX3ZlcnNpb25fX2JyYW5jaCcsICdsYXllcl92ZXJzaW9uX19jb21taXQnLCAnbGF5ZXJfdmVyc2lvbl9fbG9jYWxfcGF0aCcsICdsYXllcl92ZXJzaW9uX19sYXllcl9zb3VyY2VfX25hbWUnXQorCisgICAgbGF5ZXJfc291cmNlID0gbW9kZWxzLkZvcmVpZ25LZXkoJ0xheWVyU291cmNlJywgZGVmYXVsdCA9IE5vbmUsIG51bGwgPSBUcnVlKSAgIyBmcm9tIHdoZXJlIGRpZCB3ZSBnZXQgdGhpcyByZWNpcGUKKyAgICB1cF9pZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgICAgICAgICAgICAgIyBpZCBvZiBlbnRyeSBpbiB0aGUgc291cmNlCisgICAgdXBfZGF0ZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkKKworICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwLCBibGFuaz1UcnVlKSAgICAgICAgICAgICAgICAgIyBwbgorICAgIHZlcnNpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwLCBibGFuaz1UcnVlKSAgICAgICAgICAgICAgIyBwdgorICAgIGxheWVyX3ZlcnNpb24gPSBtb2RlbHMuRm9yZWlnbktleSgnTGF5ZXJfVmVyc2lvbicsIHJlbGF0ZWRfbmFtZT0ncmVjaXBlX2xheWVyX3ZlcnNpb24nKQorICAgIHN1bW1hcnkgPSBtb2RlbHMuVGV4dEZpZWxkKGJsYW5rPVRydWUpCisgICAgZGVzY3JpcHRpb24gPSBtb2RlbHMuVGV4dEZpZWxkKGJsYW5rPVRydWUpCisgICAgc2VjdGlvbiA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpCisgICAgbGljZW5zZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yMDAsIGJsYW5rPVRydWUpCisgICAgaG9tZXBhZ2UgPSBtb2RlbHMuVVJMRmllbGQoYmxhbms9VHJ1ZSkKKyAgICBidWd0cmFja2VyID0gbW9kZWxzLlVSTEZpZWxkKGJsYW5rPVRydWUpCisgICAgZmlsZV9wYXRoID0gbW9kZWxzLkZpbGVQYXRoRmllbGQobWF4X2xlbmd0aD0yNTUpCisgICAgcGF0aGZsYWdzID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwMCwgYmxhbms9VHJ1ZSkKKyAgICBpc19pbWFnZSA9IG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdD1GYWxzZSkKKworICAgIGRlZiBnZXRfbGF5ZXJzb3VyY2Vfdmlld191cmwoc2VsZik6CisgICAgICAgIGlmIHNlbGYubGF5ZXJfc291cmNlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gIiIKKworICAgICAgICB1cmwgPSBzZWxmLmxheWVyX3NvdXJjZS5nZXRfb2JqZWN0X3ZpZXcoc2VsZi5sYXllcl92ZXJzaW9uLnVwX2JyYW5jaCwgInJlY2lwZXMiLCBzZWxmLm5hbWUpCisgICAgICAgIHJldHVybiB1cmwKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJSZWNpcGUgIiArIHNlbGYubmFtZSArICI6IiArIHNlbGYudmVyc2lvbgorCisgICAgZGVmIGdldF92Y3NfcmVjaXBlX2ZpbGVfbGlua191cmwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmxheWVyX3ZlcnNpb24uZ2V0X3Zjc19maWxlX2xpbmtfdXJsKHNlbGYuZmlsZV9wYXRoKQorCisgICAgZGVmIGdldF9kZXNjcmlwdGlvbl9vcl9zdW1tYXJ5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRlc2NyaXB0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVzY3JpcHRpb24KKyAgICAgICAgZWxpZiBzZWxmLnN1bW1hcnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zdW1tYXJ5CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIiIKKworICAgIGNsYXNzIE1ldGE6CisgICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgoImxheWVyX3ZlcnNpb24iLCAiZmlsZV9wYXRoIiwgInBhdGhmbGFncyIpLCApCisKKworY2xhc3MgUmVjaXBlX0RlcGVuZGVuY3lNYW5hZ2VyKG1vZGVscy5NYW5hZ2VyKToKKyAgICB1c2VfZm9yX3JlbGF0ZWRfZmllbGRzID0gVHJ1ZQorCisgICAgZGVmIGdldF9xdWVyeV9zZXQoc2VsZik6CisgICAgICAgIHJldHVybiBzdXBlcihSZWNpcGVfRGVwZW5kZW5jeU1hbmFnZXIsIHNlbGYpLmdldF9xdWVyeV9zZXQoKS5leGNsdWRlKHJlY2lwZV9pZCA9IEYoJ2RlcGVuZHNfb25fX2lkJykpCisKK2NsYXNzIFJlY2lwZV9EZXBlbmRlbmN5KG1vZGVscy5Nb2RlbCk6CisgICAgVFlQRV9ERVBFTkRTID0gMAorICAgIFRZUEVfUkRFUEVORFMgPSAxCisKKyAgICBERVBFTkRTX1RZUEUgPSAoCisgICAgICAgIChUWVBFX0RFUEVORFMsICJkZXBlbmRzIiksCisgICAgICAgIChUWVBFX1JERVBFTkRTLCAicmRlcGVuZHMiKSwKKyAgICApCisgICAgcmVjaXBlID0gbW9kZWxzLkZvcmVpZ25LZXkoUmVjaXBlLCByZWxhdGVkX25hbWU9J3JfZGVwZW5kZW5jaWVzX3JlY2lwZScpCisgICAgZGVwZW5kc19vbiA9IG1vZGVscy5Gb3JlaWduS2V5KFJlY2lwZSwgcmVsYXRlZF9uYW1lPSdyX2RlcGVuZGVuY2llc19kZXBlbmRzJykKKyAgICBkZXBfdHlwZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcz1ERVBFTkRTX1RZUEUpCisgICAgb2JqZWN0cyA9IFJlY2lwZV9EZXBlbmRlbmN5TWFuYWdlcigpCisKKworY2xhc3MgTWFjaGluZShtb2RlbHMuTW9kZWwpOgorICAgIHNlYXJjaF9hbGxvd2VkX2ZpZWxkcyA9IFsibmFtZSIsICJkZXNjcmlwdGlvbiIsICJsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSJdCisgICAgbGF5ZXJfc291cmNlID0gbW9kZWxzLkZvcmVpZ25LZXkoJ0xheWVyU291cmNlJywgZGVmYXVsdCA9IE5vbmUsIG51bGwgPSBUcnVlKSAgIyBmcm9tIHdoZXJlIGRpZCB3ZSBnZXQgdGhpcyBtYWNoaW5lCisgICAgdXBfaWQgPSBtb2RlbHMuSW50ZWdlckZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkgICAgICAgICAgICAgICAgICAgICAgIyBpZCBvZiBlbnRyeSBpbiB0aGUgc291cmNlCisgICAgdXBfZGF0ZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkKKworICAgIGxheWVyX3ZlcnNpb24gPSBtb2RlbHMuRm9yZWlnbktleSgnTGF5ZXJfVmVyc2lvbicpCisgICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTUpCisgICAgZGVzY3JpcHRpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjU1KQorCisgICAgZGVmIGdldF92Y3NfbWFjaGluZV9maWxlX2xpbmtfdXJsKHNlbGYpOgorICAgICAgICBwYXRoID0gJ2NvbmYvbWFjaGluZS8nK3NlbGYubmFtZSsnLmNvbmYnCisKKyAgICAgICAgcmV0dXJuIHNlbGYubGF5ZXJfdmVyc2lvbi5nZXRfdmNzX2ZpbGVfbGlua191cmwocGF0aCkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJNYWNoaW5lICIgKyBzZWxmLm5hbWUgKyAiKCIgKyBzZWxmLmRlc2NyaXB0aW9uICsgIikiCisKKyAgICBjbGFzcyBNZXRhOgorICAgICAgICB1bmlxdWVfdG9nZXRoZXIgPSAoImxheWVyX3NvdXJjZSIsICJ1cF9pZCIpCisKKworZnJvbSBkamFuZ28uZGIubW9kZWxzLmJhc2UgaW1wb3J0IE1vZGVsQmFzZQorCitjbGFzcyBJbmhlcml0YW5jZU1ldGFjbGFzcyhNb2RlbEJhc2UpOgorICAgIGRlZiBfX2NhbGxfXyhjbHMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIG9iaiA9IHN1cGVyKEluaGVyaXRhbmNlTWV0YWNsYXNzLCBjbHMpLl9fY2FsbF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgcmV0dXJuIG9iai5nZXRfb2JqZWN0KCkKKworCitjbGFzcyBMYXllclNvdXJjZShtb2RlbHMuTW9kZWwpOgorICAgIF9fbWV0YWNsYXNzX18gPSBJbmhlcml0YW5jZU1ldGFjbGFzcworCisgICAgY2xhc3MgTWV0YToKKyAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwgKQorCisgICAgVFlQRV9MT0NBTCA9IDAKKyAgICBUWVBFX0xBWUVSSU5ERVggPSAxCisgICAgVFlQRV9JTVBPUlRFRCA9IDIKKyAgICBTT1VSQ0VfVFlQRSA9ICgKKyAgICAgICAgKFRZUEVfTE9DQUwsICJsb2NhbCIpLAorICAgICAgICAoVFlQRV9MQVlFUklOREVYLCAibGF5ZXJpbmRleCIpLAorICAgICAgICAoVFlQRV9JTVBPUlRFRCwgImltcG9ydGVkIiksCisgICAgICApCisKKyAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTYzLCB1bmlxdWUgPSBUcnVlKQorICAgIHNvdXJjZXR5cGUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXM9U09VUkNFX1RZUEUpCisgICAgYXBpdXJsID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSwgbnVsbD1UcnVlLCBkZWZhdWx0PU5vbmUpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoTGF5ZXJTb3VyY2UsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgaWYgc2VsZi5zb3VyY2V0eXBlID09IExheWVyU291cmNlLlRZUEVfTE9DQUw6CisgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXyA9IExvY2FsTGF5ZXJTb3VyY2UKKyAgICAgICAgZWxpZiBzZWxmLnNvdXJjZXR5cGUgPT0gTGF5ZXJTb3VyY2UuVFlQRV9MQVlFUklOREVYOgorICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18gPSBMYXllckluZGV4TGF5ZXJTb3VyY2UKKyAgICAgICAgZWxpZiBzZWxmLnNvdXJjZXR5cGUgPT0gTGF5ZXJTb3VyY2UuVFlQRV9JTVBPUlRFRDoKKyAgICAgICAgICAgIHNlbGYuX19jbGFzc19fID0gSW1wb3J0ZWRMYXllclNvdXJjZQorICAgICAgICBlbGlmIHNlbGYuc291cmNldHlwZSA9PSBOb25lOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIExheWVyU291cmNlLWRlcml2ZWQgY2xhc3MuIElmIHlvdSBhZGRlZCBhIG5ldyBsYXllciBzb3VyY2UgdHlwZSwgZmlsbCBvdXQgYWxsIGNvZGUgc3R1YnMuIikKKworCisgICAgZGVmIHVwZGF0ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgICAgICBVcGRhdGVzIHRoZSBsb2NhbCBkYXRhYmFzZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSB1cHN0cmVhbSBsYXllciBzb3VyY2UKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQWJzdHJhY3QsIHVwZGF0ZSgpIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgYWxsIExheWVyU291cmNlLWRlcml2ZWQgY2xhc3NlcyAob2JqZWN0IGlzICVzKSIgJSBzdHIodmFycyhzZWxmKSkpCisKKyAgICBkZWYgc2F2ZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gc3VwZXIoTGF5ZXJTb3VyY2UsIHNlbGYpLnNhdmUoKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGdldF9vYmplY3Qoc2VsZik6CisgICAgICAgICMgcHJlc2V0IGFuIHVuLWluaXRpbGl6ZWQgb2JqZWN0CisgICAgICAgIGlmIE5vbmUgPT0gc2VsZi5uYW1lOgorICAgICAgICAgICAgc2VsZi5uYW1lPSIiCisgICAgICAgIGlmIE5vbmUgPT0gc2VsZi5hcGl1cmw6CisgICAgICAgICAgICBzZWxmLmFwaXVybD0iIgorICAgICAgICBpZiBOb25lID09IHNlbGYuc291cmNldHlwZToKKyAgICAgICAgICAgIHNlbGYuc291cmNldHlwZT1MYXllclNvdXJjZS5UWVBFX0xPQ0FMCisKKyAgICAgICAgaWYgc2VsZi5zb3VyY2V0eXBlID09IExheWVyU291cmNlLlRZUEVfTE9DQUw6CisgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXyA9IExvY2FsTGF5ZXJTb3VyY2UKKyAgICAgICAgZWxpZiBzZWxmLnNvdXJjZXR5cGUgPT0gTGF5ZXJTb3VyY2UuVFlQRV9MQVlFUklOREVYOgorICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18gPSBMYXllckluZGV4TGF5ZXJTb3VyY2UKKyAgICAgICAgZWxpZiBzZWxmLnNvdXJjZXR5cGUgPT0gTGF5ZXJTb3VyY2UuVFlQRV9JTVBPUlRFRDoKKyAgICAgICAgICAgIHNlbGYuX19jbGFzc19fID0gSW1wb3J0ZWRMYXllclNvdXJjZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIExheWVyU291cmNlIHR5cGUuIElmIHlvdSBhZGRlZCBhIG5ldyBsYXllciBzb3VyY2UgdHlwZSwgZmlsbCBvdXQgYWxsIGNvZGUgc3R1YnMuIikKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyAoJXMpIiAlIChzZWxmLm5hbWUsIHNlbGYuc291cmNldHlwZSkKKworCitjbGFzcyBMb2NhbExheWVyU291cmNlKExheWVyU291cmNlKToKKyAgICBjbGFzcyBNZXRhKExheWVyU291cmNlLl9tZXRhLl9fY2xhc3NfXyk6CisgICAgICAgIHByb3h5ID0gVHJ1ZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKExvY2FsTGF5ZXJTb3VyY2UsIHNlbGYpLl9faW5pdF9fKGFyZ3MsIGt3YXJncykKKyAgICAgICAgc2VsZi5zb3VyY2V0eXBlID0gTGF5ZXJTb3VyY2UuVFlQRV9MT0NBTAorCisgICAgZGVmIHVwZGF0ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgICAgICBGZXRjaGVzIGxheWVyLCByZWNpcGUgYW5kIG1hY2hpbmUgaW5mb3JtYXRpb24gZnJvbSBsb2NhbCByZXBvc2l0b3J5CisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKK2NsYXNzIEltcG9ydGVkTGF5ZXJTb3VyY2UoTGF5ZXJTb3VyY2UpOgorICAgIGNsYXNzIE1ldGEoTGF5ZXJTb3VyY2UuX21ldGEuX19jbGFzc19fKToKKyAgICAgICAgcHJveHkgPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoSW1wb3J0ZWRMYXllclNvdXJjZSwgc2VsZikuX19pbml0X18oYXJncywga3dhcmdzKQorICAgICAgICBzZWxmLnNvdXJjZXR5cGUgPSBMYXllclNvdXJjZS5UWVBFX0lNUE9SVEVECisKKyAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgICAgIEZldGNoZXMgbGF5ZXIsIHJlY2lwZSBhbmQgbWFjaGluZSBpbmZvcm1hdGlvbiBmcm9tIGxvY2FsIHJlcG9zaXRvcnkKKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworCitjbGFzcyBMYXllckluZGV4TGF5ZXJTb3VyY2UoTGF5ZXJTb3VyY2UpOgorICAgIGNsYXNzIE1ldGEoTGF5ZXJTb3VyY2UuX21ldGEuX19jbGFzc19fKToKKyAgICAgICAgcHJveHkgPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoTGF5ZXJJbmRleExheWVyU291cmNlLCBzZWxmKS5fX2luaXRfXyhhcmdzLCBrd2FyZ3MpCisgICAgICAgIHNlbGYuc291cmNldHlwZSA9IExheWVyU291cmNlLlRZUEVfTEFZRVJJTkRFWAorCisgICAgZGVmIGdldF9vYmplY3RfdmlldyhzZWxmLCBicmFuY2gsIG9iamVjdHlwZSwgdXBpZCk6CisgICAgICAgIHJldHVybiBzZWxmLmFwaXVybCArICIuLi9icmFuY2gvIiArIGJyYW5jaC5uYW1lICsgIi8iICsgb2JqZWN0eXBlICsgIi8/cT0iICsgc3RyKHVwaWQpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgICAgIEZldGNoZXMgbGF5ZXIsIHJlY2lwZSBhbmQgbWFjaGluZSBpbmZvcm1hdGlvbiBmcm9tIHJlbW90ZSByZXBvc2l0b3J5CisgICAgICAgICIiIgorICAgICAgICBhc3NlcnQgc2VsZi5hcGl1cmwgaXMgbm90IE5vbmUKKyAgICAgICAgZnJvbSBkamFuZ28uZGIgaW1wb3J0IHRyYW5zYWN0aW9uLCBjb25uZWN0aW9uCisKKyAgICAgICAgaW1wb3J0IHVybGxpYjIsIHVybHBhcnNlLCBqc29uCisgICAgICAgIGltcG9ydCBvcworICAgICAgICBwcm94eV9zZXR0aW5ncyA9IG9zLmVudmlyb24uZ2V0KCJodHRwX3Byb3h5IiwgTm9uZSkKKworICAgICAgICBkZWYgX2dldF9qc29uX3Jlc3BvbnNlKGFwaXVybCA9IHNlbGYuYXBpdXJsKToKKyAgICAgICAgICAgIF9wYXJzZWR1cmwgPSB1cmxwYXJzZS51cmxwYXJzZShhcGl1cmwpCisgICAgICAgICAgICBwYXRoID0gX3BhcnNlZHVybC5wYXRoCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXMgPSB1cmxsaWIyLnVybG9wZW4oYXBpdXJsKQorICAgICAgICAgICAgZXhjZXB0IHVybGxpYjIuVVJMRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byByZWFkICVzOiAlcyIgJSAocGF0aCwgZS5yZWFzb24pKQorCisgICAgICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhyZXMucmVhZCgpKQorCisgICAgICAgICMgdmVyaWZ5IHdlIGNhbiBnZXQgdGhlIGJhc2ljIGFwaQorICAgICAgICB0cnk6CisgICAgICAgICAgICBhcGlsaW5rcyA9IF9nZXRfanNvbl9yZXNwb25zZSgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgICAgIGlmIHByb3h5X3NldHRpbmdzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJFRTogVXNpbmcgcHJveHkgJXMiICUgcHJveHlfc2V0dGluZ3MpCisgICAgICAgICAgICBsb2dnZXIud2FybmluZygiRUU6IGNvdWxkIG5vdCBjb25uZWN0IHRvICVzLCBza2lwcGluZyB1cGRhdGU6ICVzXG4lcyIgJSAoc2VsZi5hcGl1cmwsIGUsIHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpKSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgdXBkYXRlIGJyYW5jaGVzOyBvbmx5IHRob3NlIHRoYXQgd2UgYWxyZWFkeSBoYXZlIG5hbWVzIGxpc3RlZCBpbiB0aGUKKyAgICAgICAgIyBSZWxlYXNlcyB0YWJsZQorICAgICAgICB3aGl0ZWxpc3RfYnJhbmNoX25hbWVzID0gbWFwKGxhbWJkYSB4OiB4LmJyYW5jaF9uYW1lLCBSZWxlYXNlLm9iamVjdHMuYWxsKCkpCisgICAgICAgIGlmIGxlbih3aGl0ZWxpc3RfYnJhbmNoX25hbWVzKSA9PSAwOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gbWFrZSBsaXN0IG9mIGJyYW5jaGVzIHRvIGZldGNoIikKKworICAgICAgICBsb2dnZXIuZGVidWcoIkZldGNoaW5nIGJyYW5jaGVzIikKKyAgICAgICAgYnJhbmNoZXNfaW5mbyA9IF9nZXRfanNvbl9yZXNwb25zZShhcGlsaW5rc1snYnJhbmNoZXMnXQorICAgICAgICAgICAgKyAiP2ZpbHRlcj1uYW1lOiVzIiAlICJPUiIuam9pbih3aGl0ZWxpc3RfYnJhbmNoX25hbWVzKSkKKyAgICAgICAgZm9yIGJpIGluIGJyYW5jaGVzX2luZm86CisgICAgICAgICAgICBiLCBjcmVhdGVkID0gQnJhbmNoLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl9zb3VyY2UgPSBzZWxmLCBuYW1lID0gYmlbJ25hbWUnXSkKKyAgICAgICAgICAgIGIudXBfaWQgPSBiaVsnaWQnXQorICAgICAgICAgICAgYi51cF9kYXRlID0gYmlbJ3VwZGF0ZWQnXQorICAgICAgICAgICAgYi5uYW1lID0gYmlbJ25hbWUnXQorICAgICAgICAgICAgYi5zaG9ydF9kZXNjcmlwdGlvbiA9IGJpWydzaG9ydF9kZXNjcmlwdGlvbiddCisgICAgICAgICAgICBiLnNhdmUoKQorCisgICAgICAgICMgdXBkYXRlIGxheWVycworICAgICAgICBsYXllcnNfaW5mbyA9IF9nZXRfanNvbl9yZXNwb25zZShhcGlsaW5rc1snbGF5ZXJJdGVtcyddKQorICAgICAgICBpZiBub3QgY29ubmVjdGlvbi5mZWF0dXJlcy5hdXRvY29tbWl0c193aGVuX2F1dG9jb21taXRfaXNfb2ZmOgorICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoRmFsc2UpCisgICAgICAgIGZvciBsaSBpbiBsYXllcnNfaW5mbzoKKyAgICAgICAgICAgIGwsIGNyZWF0ZWQgPSBMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJfc291cmNlID0gc2VsZiwgbmFtZSA9IGxpWyduYW1lJ10pCisgICAgICAgICAgICBsLnVwX2lkID0gbGlbJ2lkJ10KKyAgICAgICAgICAgIGwudXBfZGF0ZSA9IGxpWyd1cGRhdGVkJ10KKyAgICAgICAgICAgIGwudmNzX3VybCA9IGxpWyd2Y3NfdXJsJ10KKyAgICAgICAgICAgIGwudmNzX3dlYl91cmwgPSBsaVsndmNzX3dlYl91cmwnXQorICAgICAgICAgICAgbC52Y3Nfd2ViX3RyZWVfYmFzZV91cmwgPSBsaVsndmNzX3dlYl90cmVlX2Jhc2VfdXJsJ10KKyAgICAgICAgICAgIGwudmNzX3dlYl9maWxlX2Jhc2VfdXJsID0gbGlbJ3Zjc193ZWJfZmlsZV9iYXNlX3VybCddCisgICAgICAgICAgICBsLnN1bW1hcnkgPSBsaVsnc3VtbWFyeSddCisgICAgICAgICAgICBsLmRlc2NyaXB0aW9uID0gbGlbJ2Rlc2NyaXB0aW9uJ10KKyAgICAgICAgICAgIGwuc2F2ZSgpCisgICAgICAgIGlmIG5vdCBjb25uZWN0aW9uLmZlYXR1cmVzLmF1dG9jb21taXRzX3doZW5fYXV0b2NvbW1pdF9pc19vZmY6CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5zZXRfYXV0b2NvbW1pdChUcnVlKQorCisgICAgICAgICMgdXBkYXRlIGxheWVyYnJhbmNoZXMvbGF5ZXJfdmVyc2lvbnMKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJGZXRjaGluZyBsYXllciBpbmZvcm1hdGlvbiIpCisgICAgICAgIGxheWVyYnJhbmNoZXNfaW5mbyA9IF9nZXRfanNvbl9yZXNwb25zZShhcGlsaW5rc1snbGF5ZXJCcmFuY2hlcyddCisgICAgICAgICAgICAgICAgKyAiP2ZpbHRlcj1icmFuY2g6JXMiICUgIk9SIi5qb2luKG1hcChsYW1iZGEgeDogc3RyKHgudXBfaWQpLCBbaSBmb3IgaSBpbiBCcmFuY2gub2JqZWN0cy5maWx0ZXIobGF5ZXJfc291cmNlID0gc2VsZikgaWYgaS51cF9pZCBpcyBub3QgTm9uZV0gKSkKKyAgICAgICAgICAgICkKKworICAgICAgICBpZiBub3QgY29ubmVjdGlvbi5mZWF0dXJlcy5hdXRvY29tbWl0c193aGVuX2F1dG9jb21taXRfaXNfb2ZmOgorICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoRmFsc2UpCisgICAgICAgIGZvciBsYmkgaW4gbGF5ZXJicmFuY2hlc19pbmZvOgorICAgICAgICAgICAgbHYsIGNyZWF0ZWQgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl9zb3VyY2UgPSBzZWxmLAorICAgICAgICAgICAgICAgICAgICB1cF9pZCA9IGxiaVsnaWQnXSwKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXI9TGF5ZXIub2JqZWN0cy5nZXQobGF5ZXJfc291cmNlID0gc2VsZiwgdXBfaWQgPSBsYmlbJ2xheWVyJ10pCisgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAgICBsdi51cF9kYXRlID0gbGJpWyd1cGRhdGVkJ10KKyAgICAgICAgICAgIGx2LnVwX2JyYW5jaCA9IEJyYW5jaC5vYmplY3RzLmdldChsYXllcl9zb3VyY2UgPSBzZWxmLCB1cF9pZCA9IGxiaVsnYnJhbmNoJ10pCisgICAgICAgICAgICBsdi5icmFuY2ggPSBsYmlbJ2FjdHVhbF9icmFuY2gnXQorICAgICAgICAgICAgbHYuY29tbWl0ID0gbGJpWydhY3R1YWxfYnJhbmNoJ10KKyAgICAgICAgICAgIGx2LmRpcnBhdGggPSBsYmlbJ3Zjc19zdWJkaXInXQorICAgICAgICAgICAgbHYuc2F2ZSgpCisgICAgICAgIGlmIG5vdCBjb25uZWN0aW9uLmZlYXR1cmVzLmF1dG9jb21taXRzX3doZW5fYXV0b2NvbW1pdF9pc19vZmY6CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5zZXRfYXV0b2NvbW1pdChUcnVlKQorCisgICAgICAgICMgdXBkYXRlIGxheWVyIGRlcGVuZGVuY2llcworICAgICAgICBsYXllcmRlcGVuZGVuY2llc19pbmZvID0gX2dldF9qc29uX3Jlc3BvbnNlKGFwaWxpbmtzWydsYXllckRlcGVuZGVuY2llcyddKQorICAgICAgICBkZXBlbmRsaXN0ID0ge30KKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb24uZmVhdHVyZXMuYXV0b2NvbW1pdHNfd2hlbl9hdXRvY29tbWl0X2lzX29mZjoKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KEZhbHNlKQorICAgICAgICBmb3IgbGRpIGluIGxheWVyZGVwZW5kZW5jaWVzX2luZm86CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbHYgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0KGxheWVyX3NvdXJjZSA9IHNlbGYsIHVwX2lkID0gbGRpWydsYXllcmJyYW5jaCddKQorICAgICAgICAgICAgZXhjZXB0IExheWVyX1ZlcnNpb24uRG9lc05vdEV4aXN0IGFzIGU6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbHYgbm90IGluIGRlcGVuZGxpc3Q6CisgICAgICAgICAgICAgICAgZGVwZW5kbGlzdFtsdl0gPSBbXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlcGVuZGxpc3RbbHZdLmFwcGVuZChMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0KGxheWVyX3NvdXJjZSA9IHNlbGYsIGxheWVyX191cF9pZCA9IGxkaVsnZGVwZW5kZW5jeSddLCB1cF9icmFuY2ggPSBsdi51cF9icmFuY2gpKQorICAgICAgICAgICAgZXhjZXB0IExheWVyX1ZlcnNpb24uRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJDYW5ub3QgZmluZCBsYXllciB2ZXJzaW9uIChsczolcyksIHVwX2lkOiVzIGx2OiVzIiAlIChzZWxmLCBsZGlbJ2RlcGVuZGVuY3knXSwgbHYpKQorCisgICAgICAgIGZvciBsdiBpbiBkZXBlbmRsaXN0OgorICAgICAgICAgICAgTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeS5vYmplY3RzLmZpbHRlcihsYXllcl92ZXJzaW9uID0gbHYpLmRlbGV0ZSgpCisgICAgICAgICAgICBmb3IgbHZkIGluIGRlcGVuZGxpc3RbbHZdOgorICAgICAgICAgICAgICAgIExheWVyVmVyc2lvbkRlcGVuZGVuY3kub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyX3ZlcnNpb24gPSBsdiwgZGVwZW5kc19vbiA9IGx2ZCkKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb24uZmVhdHVyZXMuYXV0b2NvbW1pdHNfd2hlbl9hdXRvY29tbWl0X2lzX29mZjoKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KFRydWUpCisKKworICAgICAgICAjIHVwZGF0ZSBtYWNoaW5lcworICAgICAgICBsb2dnZXIuZGVidWcoIkZldGNoaW5nIG1hY2hpbmUgaW5mb3JtYXRpb24iKQorICAgICAgICBtYWNoaW5lc19pbmZvID0gX2dldF9qc29uX3Jlc3BvbnNlKGFwaWxpbmtzWydtYWNoaW5lcyddCisgICAgICAgICAgICAgICAgKyAiP2ZpbHRlcj1sYXllcmJyYW5jaDolcyIgJSAiT1IiLmpvaW4obWFwKGxhbWJkYSB4OiBzdHIoeC51cF9pZCksIExheWVyX1ZlcnNpb24ub2JqZWN0cy5maWx0ZXIobGF5ZXJfc291cmNlID0gc2VsZikpKQorICAgICAgICAgICAgKQorCisgICAgICAgIGlmIG5vdCBjb25uZWN0aW9uLmZlYXR1cmVzLmF1dG9jb21taXRzX3doZW5fYXV0b2NvbW1pdF9pc19vZmY6CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5zZXRfYXV0b2NvbW1pdChGYWxzZSkKKyAgICAgICAgZm9yIG1pIGluIG1hY2hpbmVzX2luZm86CisgICAgICAgICAgICBtbywgY3JlYXRlZCA9IE1hY2hpbmUub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyX3NvdXJjZSA9IHNlbGYsIHVwX2lkID0gbWlbJ2lkJ10sIGxheWVyX3ZlcnNpb24gPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0KGxheWVyX3NvdXJjZSA9IHNlbGYsIHVwX2lkID0gbWlbJ2xheWVyYnJhbmNoJ10pKQorICAgICAgICAgICAgbW8udXBfZGF0ZSA9IG1pWyd1cGRhdGVkJ10KKyAgICAgICAgICAgIG1vLm5hbWUgPSBtaVsnbmFtZSddCisgICAgICAgICAgICBtby5kZXNjcmlwdGlvbiA9IG1pWydkZXNjcmlwdGlvbiddCisgICAgICAgICAgICBtby5zYXZlKCkKKworICAgICAgICBpZiBub3QgY29ubmVjdGlvbi5mZWF0dXJlcy5hdXRvY29tbWl0c193aGVuX2F1dG9jb21taXRfaXNfb2ZmOgorICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoVHJ1ZSkKKworICAgICAgICAjIHVwZGF0ZSByZWNpcGVzOyBwYWdpbmF0ZSBieSBsYXllciB2ZXJzaW9uIC8gbGF5ZXIgYnJhbmNoCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiRmV0Y2hpbmcgdGFyZ2V0IGluZm9ybWF0aW9uIikKKyAgICAgICAgcmVjaXBlc19pbmZvID0gX2dldF9qc29uX3Jlc3BvbnNlKGFwaWxpbmtzWydyZWNpcGVzJ10KKyAgICAgICAgICAgICAgICArICI/ZmlsdGVyPWxheWVyYnJhbmNoOiVzIiAlICJPUiIuam9pbihtYXAobGFtYmRhIHg6IHN0cih4LnVwX2lkKSwgTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmZpbHRlcihsYXllcl9zb3VyY2UgPSBzZWxmKSkpCisgICAgICAgICAgICApCisgICAgICAgIGlmIG5vdCBjb25uZWN0aW9uLmZlYXR1cmVzLmF1dG9jb21taXRzX3doZW5fYXV0b2NvbW1pdF9pc19vZmY6CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5zZXRfYXV0b2NvbW1pdChGYWxzZSkKKyAgICAgICAgZm9yIHJpIGluIHJlY2lwZXNfaW5mbzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBybywgY3JlYXRlZCA9IFJlY2lwZS5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJfc291cmNlID0gc2VsZiwgdXBfaWQgPSByaVsnaWQnXSwgbGF5ZXJfdmVyc2lvbiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQobGF5ZXJfc291cmNlID0gc2VsZiwgdXBfaWQgPSByaVsnbGF5ZXJicmFuY2gnXSkpCisgICAgICAgICAgICAgICAgcm8udXBfZGF0ZSA9IHJpWyd1cGRhdGVkJ10KKyAgICAgICAgICAgICAgICByby5uYW1lID0gcmlbJ3BuJ10KKyAgICAgICAgICAgICAgICByby52ZXJzaW9uID0gcmlbJ3B2J10KKyAgICAgICAgICAgICAgICByby5zdW1tYXJ5ID0gcmlbJ3N1bW1hcnknXQorICAgICAgICAgICAgICAgIHJvLmRlc2NyaXB0aW9uID0gcmlbJ2Rlc2NyaXB0aW9uJ10KKyAgICAgICAgICAgICAgICByby5zZWN0aW9uID0gcmlbJ3NlY3Rpb24nXQorICAgICAgICAgICAgICAgIHJvLmxpY2Vuc2UgPSByaVsnbGljZW5zZSddCisgICAgICAgICAgICAgICAgcm8uaG9tZXBhZ2UgPSByaVsnaG9tZXBhZ2UnXQorICAgICAgICAgICAgICAgIHJvLmJ1Z3RyYWNrZXIgPSByaVsnYnVndHJhY2tlciddCisgICAgICAgICAgICAgICAgcm8uZmlsZV9wYXRoID0gcmlbJ2ZpbGVwYXRoJ10gKyAiLyIgKyByaVsnZmlsZW5hbWUnXQorICAgICAgICAgICAgICAgIGlmICdpbmhlcml0cycgaW4gcmk6CisgICAgICAgICAgICAgICAgICAgIHJvLmlzX2ltYWdlID0gJ2ltYWdlJyBpbiByaVsnaW5oZXJpdHMnXS5zcGxpdCgpCisgICAgICAgICAgICAgICAgcm8uc2F2ZSgpCisgICAgICAgICAgICBleGNlcHQgSW50ZWdyaXR5RXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIkZhaWxlZCBzYXZpbmcgcmVjaXBlLCBpZ25vcmluZzogJXMgKCVzOiVzKSIgJSAoZSwgcm8ubGF5ZXJfdmVyc2lvbiwgcmlbJ2ZpbGVwYXRoJ10rIi8iK3JpWydmaWxlbmFtZSddKSkKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb24uZmVhdHVyZXMuYXV0b2NvbW1pdHNfd2hlbl9hdXRvY29tbWl0X2lzX29mZjoKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KFRydWUpCisKK2NsYXNzIEJpdGJha2VWZXJzaW9uKG1vZGVscy5Nb2RlbCk6CisKKyAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTMyLCB1bmlxdWUgPSBUcnVlKQorICAgIGdpdHVybCA9IEdpdFVSTEZpZWxkKCkKKyAgICBicmFuY2ggPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MzIpCisgICAgZGlycGF0aCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTUpCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXMgKEJyYW5jaDogJXMpIiAlIChzZWxmLm5hbWUsIHNlbGYuYnJhbmNoKQorCisKK2NsYXNzIFJlbGVhc2UobW9kZWxzLk1vZGVsKToKKyAgICAiIiIgQSByZWxlYXNlIGlzIGEgcHJvamVjdCB0ZW1wbGF0ZSwgdXNlZCB0byBwcmUtcG9wdWxhdGUgUHJvamVjdCBzZXR0aW5ncyB3aXRoIGEgY29uZmlndXJhdGlvbiBzZXQgIiIiCisgICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0zMiwgdW5pcXVlID0gVHJ1ZSkKKyAgICBkZXNjcmlwdGlvbiA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTUpCisgICAgYml0YmFrZV92ZXJzaW9uID0gbW9kZWxzLkZvcmVpZ25LZXkoQml0YmFrZVZlcnNpb24pCisgICAgYnJhbmNoX25hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTAsIGRlZmF1bHQgPSAiIikKKyAgICBoZWxwdGV4dCA9IG1vZGVscy5UZXh0RmllbGQobnVsbD1UcnVlKQorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzICglcykiICUgKHNlbGYubmFtZSwgc2VsZi5icmFuY2hfbmFtZSkKKworY2xhc3MgUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHkobW9kZWxzLk1vZGVsKToKKyAgICAiIiIgRWFjaCByZWxlYXNlIHNlbGVjdHMgbGF5ZXJzIGZyb20gdGhlIHNldCB1cCBsYXllciBzb3VyY2VzLCBvcmRlcmVkIGJ5IHByaW9yaXR5ICIiIgorICAgIHJlbGVhc2UgPSBtb2RlbHMuRm9yZWlnbktleSgiUmVsZWFzZSIpCisgICAgbGF5ZXJfc291cmNlID0gbW9kZWxzLkZvcmVpZ25LZXkoIkxheWVyU291cmNlIikKKyAgICBwcmlvcml0eSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdCA9IDApCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXMtJXM6JWQiICUgKHNlbGYucmVsZWFzZS5uYW1lLCBzZWxmLmxheWVyX3NvdXJjZS5uYW1lLCBzZWxmLnByaW9yaXR5KQorICAgIGNsYXNzIE1ldGE6CisgICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgoJ3JlbGVhc2UnLCAnbGF5ZXJfc291cmNlJyksKQorCisKK2NsYXNzIFJlbGVhc2VEZWZhdWx0TGF5ZXIobW9kZWxzLk1vZGVsKToKKyAgICByZWxlYXNlID0gbW9kZWxzLkZvcmVpZ25LZXkoUmVsZWFzZSkKKyAgICBsYXllcl9uYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCwgZGVmYXVsdD0iIikKKworCisjIEJyYW5jaCBjbGFzcyBpcyBzeW5jZWQgd2l0aCBsYXllcmluZGV4LkJyYW5jaCwgYnJhbmNoZXMgY2FuIG9ubHkgY29tZSBmcm9tIHJlbW90ZSBsYXllciBpbmRleGVzCitjbGFzcyBCcmFuY2gobW9kZWxzLk1vZGVsKToKKyAgICBsYXllcl9zb3VyY2UgPSBtb2RlbHMuRm9yZWlnbktleSgnTGF5ZXJTb3VyY2UnLCBudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IFRydWUpCisgICAgdXBfaWQgPSBtb2RlbHMuSW50ZWdlckZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkgICAgICAgICAgICAgICAgICAgICMgaWQgb2YgYnJhbmNoIGluIHRoZSBzb3VyY2UKKyAgICB1cF9kYXRlID0gbW9kZWxzLkRhdGVUaW1lRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKQorCisgICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD01MCkKKyAgICBzaG9ydF9kZXNjcmlwdGlvbiA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD01MCwgYmxhbms9VHJ1ZSkKKworICAgIGNsYXNzIE1ldGE6CisgICAgICAgIHZlcmJvc2VfbmFtZV9wbHVyYWwgPSAiQnJhbmNoZXMiCisgICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgoJ2xheWVyX3NvdXJjZScsICduYW1lJyksKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubmFtZQorCisKKyMgTGF5ZXIgY2xhc3Mgc3luY2VkIHdpdGggbGF5ZXJpbmRleC5MYXllckl0ZW0KK2NsYXNzIExheWVyKG1vZGVscy5Nb2RlbCk6CisgICAgbGF5ZXJfc291cmNlID0gbW9kZWxzLkZvcmVpZ25LZXkoTGF5ZXJTb3VyY2UsIG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkgICMgZnJvbSB3aGVyZSBkaWQgd2UgZ290IHRoaXMgbGF5ZXIKKyAgICB1cF9pZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgICAgICAgICAgICAgIyBpZCBvZiBsYXllciBpbiB0aGUgcmVtb3RlIHNvdXJjZQorICAgIHVwX2RhdGUgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisKKyAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBsYXllcl9pbmRleF91cmwgPSBtb2RlbHMuVVJMRmllbGQoKQorICAgIHZjc191cmwgPSBHaXRVUkxGaWVsZChkZWZhdWx0ID0gTm9uZSwgbnVsbCA9IFRydWUpCisgICAgdmNzX3dlYl91cmwgPSBtb2RlbHMuVVJMRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKQorICAgIHZjc193ZWJfdHJlZV9iYXNlX3VybCA9IG1vZGVscy5VUkxGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisgICAgdmNzX3dlYl9maWxlX2Jhc2VfdXJsID0gbW9kZWxzLlVSTEZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkKKworICAgIHN1bW1hcnkgPSBtb2RlbHMuVGV4dEZpZWxkKGhlbHBfdGV4dD0nT25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIGxheWVyJywgbnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKQorICAgIGRlc2NyaXB0aW9uID0gbW9kZWxzLlRleHRGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXMgLyAlcyAiICUgKHNlbGYubmFtZSwgc2VsZi5sYXllcl9zb3VyY2UpCisKKyAgICBjbGFzcyBNZXRhOgorICAgICAgICB1bmlxdWVfdG9nZXRoZXIgPSAoKCJsYXllcl9zb3VyY2UiLCAidXBfaWQiKSwgKCJsYXllcl9zb3VyY2UiLCAibmFtZSIpKQorCisKKyMgTGF5ZXJDb21taXQgY2xhc3MgaXMgc3luY2VkIHdpdGggbGF5ZXJpbmRleC5MYXllckJyYW5jaAorY2xhc3MgTGF5ZXJfVmVyc2lvbihtb2RlbHMuTW9kZWwpOgorICAgIHNlYXJjaF9hbGxvd2VkX2ZpZWxkcyA9IFsibGF5ZXJfX25hbWUiLCAibGF5ZXJfX3N1bW1hcnkiLCAibGF5ZXJfX2Rlc2NyaXB0aW9uIiwgImxheWVyX192Y3NfdXJsIiwgImRpcnBhdGgiLCAidXBfYnJhbmNoX19uYW1lIiwgImNvbW1pdCIsICJicmFuY2giXQorICAgIGJ1aWxkID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGQsIHJlbGF0ZWRfbmFtZT0nbGF5ZXJfdmVyc2lvbl9idWlsZCcsIGRlZmF1bHQgPSBOb25lLCBudWxsID0gVHJ1ZSkKKyAgICBsYXllciA9IG1vZGVscy5Gb3JlaWduS2V5KExheWVyLCByZWxhdGVkX25hbWU9J2xheWVyX3ZlcnNpb25fbGF5ZXInKQorCisgICAgbGF5ZXJfc291cmNlID0gbW9kZWxzLkZvcmVpZ25LZXkoTGF5ZXJTb3VyY2UsIG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkgICAgICAgICAgICAgICAgICAgIyBmcm9tIHdoZXJlIGRpZCB3ZSBnZXQgdGhpcyBMYXllciBWZXJzaW9uCisgICAgdXBfaWQgPSBtb2RlbHMuSW50ZWdlckZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkgICAgICAgICMgaWQgb2YgbGF5ZXJicmFuY2ggaW4gdGhlIHJlbW90ZSBzb3VyY2UKKyAgICB1cF9kYXRlID0gbW9kZWxzLkRhdGVUaW1lRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKQorICAgIHVwX2JyYW5jaCA9IG1vZGVscy5Gb3JlaWduS2V5KEJyYW5jaCwgbnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKQorCisgICAgYnJhbmNoID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTgwKSAgICAgICAgICAgICMgTGF5ZXJCcmFuY2guYWN0dWFsX2JyYW5jaAorICAgIGNvbW1pdCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApICAgICAgICAgICAjIExheWVyQnJhbmNoLnZjc19sYXN0X3JldgorICAgIGRpcnBhdGggPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjU1LCBudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpICAgICAgICAgICMgTGF5ZXJCcmFuY2gudmNzX3N1YmRpcgorICAgIHByaW9yaXR5ID0gbW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0ID0gMCkgICAgICAgICAjIGlmIC0xLCB0aGlzIGlzIGEgZGVmYXVsdCBsYXllcgorCisgICAgbG9jYWxfcGF0aCA9IG1vZGVscy5GaWxlUGF0aEZpZWxkKG1heF9sZW5ndGg9MTAyNCwgZGVmYXVsdCA9ICIvIikgICMgd2hlcmUgdGhpcyBsYXllciB3YXMgY2hlY2tlZC1vdXQKKworICAgIHByb2plY3QgPSBtb2RlbHMuRm9yZWlnbktleSgnUHJvamVjdCcsIG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkgICAjIFNldCBpZiB0aGlzIGxheWVyIGlzIHByb2plY3Qtc3BlY2lmaWM7IGFsd2F5cyBzZXQgZm9yIGltcG9ydGVkIGxheWVycywgYW5kIHByb2plY3Qtc2V0IGJyYW5jaGVzCisKKyAgICAjIGNvZGUgbGlmdGVkLCB3aXRoIGFkYXB0YXRpb25zLCBmcm9tIHRoZSBsYXllcmluZGV4LXdlYiBhcHBsaWNhdGlvbiBodHRwczovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvbGF5ZXJpbmRleC13ZWIvCisgICAgZGVmIF9oYW5kbGVfdXJsX3BhdGgoc2VsZiwgYmFzZV91cmwsIHBhdGgpOgorICAgICAgICBpbXBvcnQgcmUsIHBvc2l4cGF0aAorICAgICAgICBpZiBiYXNlX3VybDoKKyAgICAgICAgICAgIGlmIHNlbGYuZGlycGF0aDoKKyAgICAgICAgICAgICAgICBpZiBwYXRoOgorICAgICAgICAgICAgICAgICAgICBleHRyYV9wYXRoID0gc2VsZi5kaXJwYXRoICsgJy8nICsgcGF0aAorICAgICAgICAgICAgICAgICAgICAjIE5vcm1hbGlzZSBvdXQgLi4vIGluIHBhdGggZm9yIHVzYWdlIFVSTAorICAgICAgICAgICAgICAgICAgICBleHRyYV9wYXRoID0gcG9zaXhwYXRoLm5vcm1wYXRoKGV4dHJhX3BhdGgpCisgICAgICAgICAgICAgICAgICAgICMgTWlub3Igd29ya2Fyb3VuZCB0byBoYW5kbGUgY2FzZSB3aGVyZSBzdWJkaXJlY3RvcnkgaGFzIGJlZW4gYWRkZWQgYmV0d2VlbiBicmFuY2hlcworICAgICAgICAgICAgICAgICAgICAjIChzaG91bGQgcHJvYmFibHkgc3VwcG9ydCB1c2FnZSBVUkwgcGVyIGJyYW5jaCB0byBoYW5kbGUgdGhpcy4uLiBzaWdoLi4uKQorICAgICAgICAgICAgICAgICAgICBpZiBleHRyYV9wYXRoLnN0YXJ0c3dpdGgoJy4uLycpOgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfcGF0aCA9IGV4dHJhX3BhdGhbMzpdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFfcGF0aCA9IHNlbGYuZGlycGF0aAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBleHRyYV9wYXRoID0gcGF0aAorICAgICAgICAgICAgYnJhbmNobmFtZSA9IHNlbGYudXBfYnJhbmNoLm5hbWUKKyAgICAgICAgICAgIHVybCA9IGJhc2VfdXJsLnJlcGxhY2UoJyVicmFuY2glJywgYnJhbmNobmFtZSkKKworICAgICAgICAgICAgIyBJZiB0aGVyZSdzIGEgJSBpbiB0aGUgcGF0aCAoZS5nLiBhIHdpbGRjYXJkIGJiYXBwZW5kKSB3ZSBuZWVkIHRvIGVuY29kZSBpdAorICAgICAgICAgICAgaWYgZXh0cmFfcGF0aDoKKyAgICAgICAgICAgICAgICBleHRyYV9wYXRoID0gZXh0cmFfcGF0aC5yZXBsYWNlKCclJywgJyUyNScpCisKKyAgICAgICAgICAgIGlmICclcGF0aCUnIGluIGJhc2VfdXJsOgorICAgICAgICAgICAgICAgIGlmIGV4dHJhX3BhdGg6CisgICAgICAgICAgICAgICAgICAgIHVybCA9IHJlLnN1YihyJ1xbKFteXF1dKiVwYXRoJVteXF1dKilcXScsICdcXDEnLCB1cmwpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdXJsID0gcmUuc3ViKHInXFsoW15cXV0qJXBhdGglW15cXV0qKVxdJywgJycsIHVybCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoJyVwYXRoJScsIGV4dHJhX3BhdGgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiB1cmwgKyBleHRyYV9wYXRoCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2V0X3Zjc19saW5rX3VybChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5sYXllci52Y3Nfd2ViX3VybCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYubGF5ZXIudmNzX3dlYl91cmwKKworICAgIGRlZiBnZXRfdmNzX2ZpbGVfbGlua191cmwoc2VsZiwgZmlsZV9wYXRoPSIiKToKKyAgICAgICAgaWYgc2VsZi5sYXllci52Y3Nfd2ViX2ZpbGVfYmFzZV91cmwgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGVfdXJsX3BhdGgoc2VsZi5sYXllci52Y3Nfd2ViX2ZpbGVfYmFzZV91cmwsIGZpbGVfcGF0aCkKKworICAgIGRlZiBnZXRfdmNzX2RpcnBhdGhfbGlua191cmwoc2VsZik6CisgICAgICAgIGlmIHNlbGYubGF5ZXIudmNzX3dlYl90cmVlX2Jhc2VfdXJsIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5faGFuZGxlX3VybF9wYXRoKHNlbGYubGF5ZXIudmNzX3dlYl90cmVlX2Jhc2VfdXJsLCAnJykKKworICAgIGRlZiBnZXRfZXF1aXZhbGVudHNfd3ByaW9yaXR5KHNlbGYsIHByb2plY3QpOgorICAgICAgICByZXR1cm4gcHJvamVjdC5jb21wYXRpYmxlX2xheWVydmVyc2lvbnMobGF5ZXJfbmFtZSA9IHNlbGYubGF5ZXIubmFtZSkKKworICAgIGRlZiBnZXRfdmNzX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jb21taXQgaXMgbm90IE5vbmUgYW5kIGxlbihzZWxmLmNvbW1pdCkgPiAwOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWl0CisgICAgICAgIGlmIHNlbGYuYnJhbmNoIGlzIG5vdCBOb25lIGFuZCBsZW4oc2VsZi5icmFuY2gpID4gMDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmJyYW5jaAorICAgICAgICBpZiBzZWxmLnVwX2JyYW5jaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnVwX2JyYW5jaC5uYW1lCisgICAgICAgIHJldHVybiAoIkNhbm5vdCBkZXRlcm1pbmUgdGhlIHZjc19yZWZlcmVuY2UgZm9yIGxheWVyIHZlcnNpb24gJXMiICUgdmFycyhzZWxmKSkKKworICAgIGRlZiBnZXRfZGV0YWlsc3BhZ2VfdXJsKHNlbGYsIHByb2plY3RfaWQpOgorICAgICAgICByZXR1cm4gcmV2ZXJzZSgnbGF5ZXJkZXRhaWxzJywgYXJncz0ocHJvamVjdF9pZCwgc2VsZi5waykpCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJWQgJXMgKFZDUyAlcywgUHJvamVjdCAlcykiICUgKHNlbGYucGssIHN0cihzZWxmLmxheWVyKSwgc2VsZi5nZXRfdmNzX3JlZmVyZW5jZSgpLCBzZWxmLmJ1aWxkLnByb2plY3QgaWYgc2VsZi5idWlsZCBpcyBub3QgTm9uZSBlbHNlICJObyBwcm9qZWN0IikKKworICAgIGNsYXNzIE1ldGE6CisgICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgibGF5ZXJfc291cmNlIiwgInVwX2lkIikKKworY2xhc3MgTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeShtb2RlbHMuTW9kZWwpOgorICAgIGxheWVyX3NvdXJjZSA9IG1vZGVscy5Gb3JlaWduS2V5KExheWVyU291cmNlLCBudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpICAjIGZyb20gd2hlcmUgZGlkIHdlIGdvdCB0aGlzIGxheWVyCisgICAgdXBfaWQgPSBtb2RlbHMuSW50ZWdlckZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkgICAgICAgICAgICAgICAgICAgICMgaWQgb2YgbGF5ZXJicmFuY2ggaW4gdGhlIHJlbW90ZSBzb3VyY2UKKworICAgIGxheWVyX3ZlcnNpb24gPSBtb2RlbHMuRm9yZWlnbktleShMYXllcl9WZXJzaW9uLCByZWxhdGVkX25hbWU9ImRlcGVuZGVuY2llcyIpCisgICAgZGVwZW5kc19vbiA9IG1vZGVscy5Gb3JlaWduS2V5KExheWVyX1ZlcnNpb24sIHJlbGF0ZWRfbmFtZT0iZGVwZW5kZWVzIikKKworICAgIGNsYXNzIE1ldGE6CisgICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgibGF5ZXJfc291cmNlIiwgInVwX2lkIikKKworY2xhc3MgUHJvamVjdExheWVyKG1vZGVscy5Nb2RlbCk6CisgICAgcHJvamVjdCA9IG1vZGVscy5Gb3JlaWduS2V5KFByb2plY3QpCisgICAgbGF5ZXJjb21taXQgPSBtb2RlbHMuRm9yZWlnbktleShMYXllcl9WZXJzaW9uLCBudWxsPVRydWUpCisgICAgb3B0aW9uYWwgPSBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQgPSBUcnVlKQorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzLCAlcyIgJSAoc2VsZi5wcm9qZWN0Lm5hbWUsIHNlbGYubGF5ZXJjb21taXQpCisKKyAgICBjbGFzcyBNZXRhOgorICAgICAgICB1bmlxdWVfdG9nZXRoZXIgPSAoKCJwcm9qZWN0IiwgImxheWVyY29tbWl0IiksKQorCitjbGFzcyBQcm9qZWN0VmFyaWFibGUobW9kZWxzLk1vZGVsKToKKyAgICBwcm9qZWN0ID0gbW9kZWxzLkZvcmVpZ25LZXkoUHJvamVjdCkKKyAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICB2YWx1ZSA9IG1vZGVscy5UZXh0RmllbGQoYmxhbmsgPSBUcnVlKQorCitjbGFzcyBWYXJpYWJsZShtb2RlbHMuTW9kZWwpOgorICAgIHNlYXJjaF9hbGxvd2VkX2ZpZWxkcyA9IFsndmFyaWFibGVfbmFtZScsICd2YXJpYWJsZV92YWx1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2aGlzdG9yeV9fZmlsZV9uYW1lJywgImRlc2NyaXB0aW9uIl0KKyAgICBidWlsZCA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkLCByZWxhdGVkX25hbWU9J3ZhcmlhYmxlX2J1aWxkJykKKyAgICB2YXJpYWJsZV9uYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICB2YXJpYWJsZV92YWx1ZSA9IG1vZGVscy5UZXh0RmllbGQoYmxhbms9VHJ1ZSkKKyAgICBjaGFuZ2VkID0gbW9kZWxzLkJvb2xlYW5GaWVsZChkZWZhdWx0PUZhbHNlKQorICAgIGh1bWFuX3JlYWRhYmxlX25hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjAwKQorICAgIGRlc2NyaXB0aW9uID0gbW9kZWxzLlRleHRGaWVsZChibGFuaz1UcnVlKQorCitjbGFzcyBWYXJpYWJsZUhpc3RvcnkobW9kZWxzLk1vZGVsKToKKyAgICB2YXJpYWJsZSA9IG1vZGVscy5Gb3JlaWduS2V5KFZhcmlhYmxlLCByZWxhdGVkX25hbWU9J3ZoaXN0b3J5JykKKyAgICB2YWx1ZSAgID0gbW9kZWxzLlRleHRGaWVsZChibGFuaz1UcnVlKQorICAgIGZpbGVfbmFtZSA9IG1vZGVscy5GaWxlUGF0aEZpZWxkKG1heF9sZW5ndGg9MjU1KQorICAgIGxpbmVfbnVtYmVyID0gbW9kZWxzLkludGVnZXJGaWVsZChudWxsPVRydWUpCisgICAgb3BlcmF0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTY0KQorCitjbGFzcyBIZWxwVGV4dChtb2RlbHMuTW9kZWwpOgorICAgIFZBUklBQkxFID0gMAorICAgIEhFTFBURVhUX0FSRUEgPSAoKFZBUklBQkxFLCAndmFyaWFibGUnKSwgKQorCisgICAgYnVpbGQgPSBtb2RlbHMuRm9yZWlnbktleShCdWlsZCwgcmVsYXRlZF9uYW1lPSdoZWxwdGV4dF9idWlsZCcpCisgICAgYXJlYSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcz1IRUxQVEVYVF9BUkVBKQorICAgIGtleSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgdGV4dCA9IG1vZGVscy5UZXh0RmllbGQoKQorCitjbGFzcyBMb2dNZXNzYWdlKG1vZGVscy5Nb2RlbCk6CisgICAgRVhDRVBUSU9OID0gLTEgICAgICAjIHVzZWQgdG8gc2lnbmFsIHNlbGYtdG9hc3Rlci1leGNlcHRpb25zCisgICAgSU5GTyA9IDAKKyAgICBXQVJOSU5HID0gMQorICAgIEVSUk9SID0gMgorCisgICAgTE9HX0xFVkVMID0gKCAoSU5GTywgImluZm8iKSwKKyAgICAgICAgICAgIChXQVJOSU5HLCAid2FybiIpLAorICAgICAgICAgICAgKEVSUk9SLCAiZXJyb3IiKSwKKyAgICAgICAgICAgIChFWENFUFRJT04sICJ0b2FzdGVyIGV4Y2VwdGlvbiIpKQorCisgICAgYnVpbGQgPSBtb2RlbHMuRm9yZWlnbktleShCdWlsZCkKKyAgICB0YXNrICA9IG1vZGVscy5Gb3JlaWduS2V5KFRhc2ssIGJsYW5rID0gVHJ1ZSwgbnVsbD1UcnVlKQorICAgIGxldmVsID0gbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPUxPR19MRVZFTCwgZGVmYXVsdD1JTkZPKQorICAgIG1lc3NhZ2U9bW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI0MCkKKyAgICBwYXRobmFtZSA9IG1vZGVscy5GaWxlUGF0aEZpZWxkKG1heF9sZW5ndGg9MjU1LCBibGFuaz1UcnVlKQorICAgIGxpbmVubyA9IG1vZGVscy5JbnRlZ2VyRmllbGQobnVsbD1UcnVlKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXMgJXMgJXMiICUgKHNlbGYuZ2V0X2xldmVsX2Rpc3BsYXkoKSwgc2VsZi5tZXNzYWdlLCBzZWxmLmJ1aWxkKQorCitkZWYgaW52YWxpZGF0ZV9jYWNoZSgqKmt3YXJncyk6CisgICAgZnJvbSBkamFuZ28uY29yZS5jYWNoZSBpbXBvcnQgY2FjaGUKKyAgICB0cnk6CisgICAgICBjYWNoZS5jbGVhcigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgbG9nZ2VyLndhcm5pbmcoIlByb2JsZW0gd2l0aCBjYWNoZSBiYWNrZW5kOiBGYWlsZWQgdG8gY2xlYXIgY2FjaGU6ICVzIiAlIGUpCisKK2RqYW5nby5kYi5tb2RlbHMuc2lnbmFscy5wb3N0X3NhdmUuY29ubmVjdChpbnZhbGlkYXRlX2NhY2hlKQorZGphbmdvLmRiLm1vZGVscy5zaWduYWxzLnBvc3RfZGVsZXRlLmNvbm5lY3QoaW52YWxpZGF0ZV9jYWNoZSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vdGVzdHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL3Rlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4M2FlYTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL3Rlc3RzLnB5CkBAIC0wLDAgKzEsMTg3IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyIiIlRlc3QgY2FzZXMgZm9yIFRvYXN0ZXIgT1JNLiIiIgorCitmcm9tIGRqYW5nby50ZXN0IGltcG9ydCBUZXN0Q2FzZSwgVHJhbnNhY3Rpb25UZXN0Q2FzZQorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBMb2NhbExheWVyU291cmNlLCBMYXllckluZGV4TGF5ZXJTb3VyY2UsIEltcG9ydGVkTGF5ZXJTb3VyY2UsIExheWVyU291cmNlCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEJyYW5jaAorCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFByb2plY3QsIEJ1aWxkLCBMYXllciwgTGF5ZXJfVmVyc2lvbiwgQnJhbmNoLCBQcm9qZWN0TGF5ZXIKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUmVsZWFzZSwgUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHksIEJpdGJha2VWZXJzaW9uCisKK2Zyb20gZGphbmdvLnV0aWxzIGltcG9ydCB0aW1lem9uZQorZnJvbSBkamFuZ28uZGIgaW1wb3J0IEludGVncml0eUVycm9yCisKK2ltcG9ydCBvcworCisjIHNldCBUVFNfTEFZRVJfSU5ERVggdG8gdGhlIGJhc2UgdXJsIHRvIHVzZSBhIGRpZmZlcmVudCBpbnN0YW5jZSBvZiB0aGUgbGF5ZXIgaW5kZXgKKworY2xhc3MgTGF5ZXJTb3VyY2VWZXJpZnlJbmhlcml0YW5jZVNhdmVMb2FkKFRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0cyB0byB2ZXJpZnkgaW5oZXJpdGFuY2UgZm9yIHRoZSBMYXllclNvdXJjZSBwcm94eS1pbmhlcml0YW5jZSBjbGFzc2VzLgorICAgICIiIgorICAgIGRlZiB0ZXN0X29iamVjdF9jcmVhdGlvbihzZWxmKToKKyAgICAgICAgIiIiVGVzdCBMYXllclNvdXJjZSBvYmplY3QgY3JlYXRpb24uIiIiCisgICAgICAgIGZvciBuYW1lLCBzb3VyY2V0eXBlIGluIFsoImExIiwgTGF5ZXJTb3VyY2UuVFlQRV9MT0NBTCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImEyIiwgTGF5ZXJTb3VyY2UuVFlQRV9MQVlFUklOREVYKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiYTMiLCBMYXllclNvdXJjZS5UWVBFX0lNUE9SVEVEKV06CisgICAgICAgICAgICBMYXllclNvdXJjZS5vYmplY3RzLmNyZWF0ZShuYW1lPW5hbWUsIHNvdXJjZXR5cGU9c291cmNldHlwZSkKKworICAgICAgICBvYmplY3RzID0gTGF5ZXJTb3VyY2Uub2JqZWN0cy5hbGwoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShvYmplY3RzWzBdLCBMb2NhbExheWVyU291cmNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uob2JqZWN0c1sxXSwgTGF5ZXJJbmRleExheWVyU291cmNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uob2JqZWN0c1syXSwgSW1wb3J0ZWRMYXllclNvdXJjZSkpCisKKyAgICBkZWYgdGVzdF9kdXBsaWNhdGVfZXJyb3Ioc2VsZik6CisgICAgICAgICIiIlRlc3QgY3JlYXRpb24gb2YgZHVwbGljYXRlIExheWVyU291cmNlIG9iamVjdHMuIiIiCisgICAgICAgIHN0eXBlID0gTGF5ZXJTb3VyY2UuVFlQRV9MT0NBTAorICAgICAgICBMYXllclNvdXJjZS5vYmplY3RzLmNyZWF0ZShuYW1lPSJhMSIsIHNvdXJjZXR5cGU9c3R5cGUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW50ZWdyaXR5RXJyb3IpOgorICAgICAgICAgICAgTGF5ZXJTb3VyY2Uub2JqZWN0cy5jcmVhdGUobmFtZT0iYTEiLCBzb3VyY2V0eXBlPXN0eXBlKQorCisKK2NsYXNzIExJTFNVcGRhdGVUZXN0Q2FzZShUcmFuc2FjdGlvblRlc3RDYXNlKToKKyAgICAiIiJUZXN0IExheWVyIFNvdXJjZSB1cGRhdGUuIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICIiIkNyZWF0ZSByZWxlYXNlLiIiIgorICAgICAgICBiYnYgPSBCaXRiYWtlVmVyc2lvbi5vYmplY3RzLmNyZWF0ZShcCisgICAgICAgICAgICAgICAgICBuYW1lPSJtYXN0ZXIiLCBnaXR1cmw9ImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiKQorICAgICAgICBSZWxlYXNlLm9iamVjdHMuY3JlYXRlKG5hbWU9ImRlZmF1bHQtcmVsZWFzZSIsIGJpdGJha2VfdmVyc2lvbj1iYnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoX25hbWU9Im1hc3RlciIpCisKKyAgICBkZWYgdGVzdF91cGRhdGUoc2VsZik6CisgICAgICAgICIiIkNoZWNrIGlmIExheWVyU291cmNlLnVwZGF0ZSBjYW4gZmV0Y2ggYnJhbmNoZXMuIiIiCisgICAgICAgIHVybCA9IG9zLmdldGVudigiVFRTX0xBWUVSX0lOREVYIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Imh0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy8iKQorCisgICAgICAgIGxzb2JqID0gTGF5ZXJTb3VyY2Uub2JqZWN0cy5jcmVhdGUoXAorICAgICAgICAgICAgICAgICAgICBuYW1lPSJiMSIsIHNvdXJjZXR5cGU9TGF5ZXJTb3VyY2UuVFlQRV9MQVlFUklOREVYLAorICAgICAgICAgICAgICAgICAgICBhcGl1cmw9dXJsICsgImxheWVyaW5kZXgvYXBpLyIpCisgICAgICAgIGxzb2JqLnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsc29iai5icmFuY2hfc2V0LmFsbCgpLmNvdW50KCkgPiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGJyYW5jaGVzIGZldGNoZWQiKQorCitjbGFzcyBMYXllclZlcnNpb25FcXVpdmFsZW5jZVRlc3RDYXNlKFRlc3RDYXNlKToKKyAgICAiIiJWZXJpZnkgTGF5ZXJfVmVyc2lvbiBwcmlvcml0eSBzZWxlY3Rpb24uIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICIiIkNyZWF0ZSByZXF1aXJlZCBvYmplY3RzLiIiIgorICAgICAgICAjIGNyZWF0ZSBsYXllciBzb3VyY2UKKyAgICAgICAgc2VsZi5sc3JjID0gTGF5ZXJTb3VyY2Uub2JqZWN0cy5jcmVhdGUobmFtZT0iZHVtbXktbGF5ZXJzb3VyY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2V0eXBlPUxheWVyU291cmNlLlRZUEVfTE9DQUwpCisgICAgICAgICMgY3JlYXRlIHJlbGVhc2UKKyAgICAgICAgYmJ2ID0gQml0YmFrZVZlcnNpb24ub2JqZWN0cy5jcmVhdGUoXAorICAgICAgICAgICAgICAgICAgbmFtZT0ibWFzdGVyIiwgZ2l0dXJsPSJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIikKKyAgICAgICAgc2VsZi5yZWxlYXNlID0gUmVsZWFzZS5vYmplY3RzLmNyZWF0ZShuYW1lPSJkZWZhdWx0LXJlbGVhc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdGJha2VfdmVyc2lvbj1iYnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoX25hbWU9Im1hc3RlciIpCisgICAgICAgICMgYXR0YWNoIGxheWVyIHNvdXJjZSB0byByZWxlYXNlCisgICAgICAgIFJlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5Lm9iamVjdHMuY3JlYXRlKFwKKyAgICAgICAgICAgIHJlbGVhc2U9c2VsZi5yZWxlYXNlLCBsYXllcl9zb3VyY2U9c2VsZi5sc3JjLCBwcmlvcml0eT0xKQorCisgICAgICAgICMgY3JlYXRlIGEgbGF5ZXIgdmVyc2lvbiBmb3IgdGhlIGxheWVyIG9uIHRoZSBzcGVjaWZpZWQgYnJhbmNoCisgICAgICAgIHNlbGYubGF5ZXIgPSBMYXllci5vYmplY3RzLmNyZWF0ZShuYW1lPSJtZXRhLXRlc3RsYXllciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcl9zb3VyY2U9c2VsZi5sc3JjKQorICAgICAgICBzZWxmLmJyYW5jaCA9IEJyYW5jaC5vYmplY3RzLmNyZWF0ZShuYW1lPSJtYXN0ZXIiLCBsYXllcl9zb3VyY2U9c2VsZi5sc3JjKQorICAgICAgICBzZWxmLmx2ZXIgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuY3JlYXRlKFwKKyAgICAgICAgICAgIGxheWVyPXNlbGYubGF5ZXIsIGxheWVyX3NvdXJjZT1zZWxmLmxzcmMsIHVwX2JyYW5jaD1zZWxmLmJyYW5jaCkKKworICAgICAgICAjIGNyZWF0ZSBwcm9qZWN0IGFuZCBwcm9qZWN0IGxheWVyCisgICAgICAgIHNlbGYucHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5jcmVhdGVfcHJvamVjdChuYW1lPSJ0ZXN0LXByb2plY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZT1zZWxmLnJlbGVhc2UpCisgICAgICAgIFByb2plY3RMYXllci5vYmplY3RzLmNyZWF0ZShwcm9qZWN0PXNlbGYucHJvamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyY29tbWl0PXNlbGYubHZlcikKKworICAgICAgICAjIGNyZWF0ZSBzcG9vZiBsYXllciB0aGF0IHNob3VsZCBub3QgYXBwZWFyIGluIHRoZSBzZWFyY2ggcmVzdWx0cworICAgICAgICBsYXllciA9IExheWVyLm9iamVjdHMuY3JlYXRlKG5hbWU9Im1ldGEtbm90dmFsaWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX3NvdXJjZT1zZWxmLmxzcmMpCisgICAgICAgIHNlbGYubHZlcjIgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuY3JlYXRlKGxheWVyPWxheWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcl9zb3VyY2U9c2VsZi5sc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cF9icmFuY2g9c2VsZi5icmFuY2gpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfbGF5ZXJzb3VyY2Uoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGVuIHdlIGhhdmUgYSBzaW5nbGUgbGF5ZXIgdmVyc2lvbiwKKyAgICAgICAgZ2V0X2VxdWl2YWxlbnRzX3dwcmlvcml0eSgpIHNob3VsZCByZXR1cm4gYSBsaXN0IHdpdGgKKyAgICAgICAganVzdCB0aGlzIGxheWVyX3ZlcnNpb24uCisgICAgICAgICIiIgorICAgICAgICBlcXVpdnFzID0gc2VsZi5sdmVyLmdldF9lcXVpdmFsZW50c193cHJpb3JpdHkoc2VsZi5wcm9qZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZXF1aXZxcyksIFtzZWxmLmx2ZXJdKQorCisgICAgZGVmIHRlc3RfZHVhbF9sYXllcnNvdXJjZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIElmIHdlIGhhdmUgdHdvIGxheWVycyB3aXRoIHRoZSBzYW1lIG5hbWUsIGZyb20gZGlmZmVyZW50IGxheWVyIHNvdXJjZXMsCisgICAgICAgIHdlIGV4cGVjdCBib3RoIGxheWVycyBpbiwgaW4gaW5jcmVhc2luZyBwcmlvcml0eSBvZiB0aGUgbGF5ZXIgc291cmNlLgorICAgICAgICAiIiIKKyAgICAgICAgbHNyYzIgPSBMYXllclNvdXJjZS5vYmplY3RzLmNyZWF0ZShcCisgICAgICAgICAgICAgICAgICAgIG5hbWU9ImR1bW15LWxheWVyc291cmNlMiIsCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZXR5cGU9TGF5ZXJTb3VyY2UuVFlQRV9MT0NBTCwKKyAgICAgICAgICAgICAgICAgICAgYXBpdXJsPSJ0ZXN0IikKKworICAgICAgICAjIGFzc2lnbiBhIGxvd2VyIHByaW9yaXR5IGZvciB0aGUgc2Vjb25kIGxheWVyIHNvdXJjZQorICAgICAgICBzZWxmLnJlbGVhc2UucmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHlfc2V0LmNyZWF0ZShsYXllcl9zb3VyY2U9bHNyYzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5PTIpCisKKyAgICAgICAgIyBjcmVhdGUgYSBuZXcgbGF5ZXJfdmVyc2lvbiBmb3IgYSBsYXllciB3aXRoIHRoZSBzYW1lIG5hbWUKKyAgICAgICAgIyBjb21pbmcgZnJvbSB0aGUgc2Vjb25kIGxheWVyIHNvdXJjZQorICAgICAgICBsYXllcjIgPSBMYXllci5vYmplY3RzLmNyZWF0ZShuYW1lPSJtZXRhLXRlc3RsYXllciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX3NvdXJjZT1sc3JjMikKKyAgICAgICAgbHZlcjIgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuY3JlYXRlKGxheWVyPWxheWVyMiwgbGF5ZXJfc291cmNlPWxzcmMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBfYnJhbmNoPXNlbGYuYnJhbmNoKQorCisgICAgICAgICMgZXhwZWN0IHR3byBsYXllciB2ZXJzaW9ucywgaW4gdGhlIHByaW9yaXR5IG9yZGVyCisgICAgICAgIGVxdWl2cXMgPSBzZWxmLmx2ZXIuZ2V0X2VxdWl2YWxlbnRzX3dwcmlvcml0eShzZWxmLnByb2plY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChlcXVpdnFzKSwgW2x2ZXIyLCBzZWxmLmx2ZXJdKQorCisgICAgZGVmIHRlc3RfYnVpbGRfbGF5ZXJ2ZXJzaW9uKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQW55IGxheWVyIHZlcnNpb24gY29taW5nIGZyb20gdGhlIGJ1aWxkIHNob3VsZCBzaG93IHVwCisgICAgICAgIGJlZm9yZSBhbnkgbGF5ZXIgdmVyc2lvbiBjb21pbmcgZnJvbSB1cHN0cmVhbQorICAgICAgICAiIiIKKyAgICAgICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZShwcm9qZWN0PXNlbGYucHJvamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVkX29uPXRpbWV6b25lLm5vdygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9vbj10aW1lem9uZS5ub3coKSkKKyAgICAgICAgbHZiID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmNyZWF0ZShsYXllcj1zZWxmLmxheWVyLCBidWlsZD1idWlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXQ9ImRlYWRiZWVmIikKKworICAgICAgICAjIGEgYnVpbGQgbGF5ZXJ2ZXJzaW9uIG11c3QgYmUgaW4gdGhlIGVxdWl2YWxlbmNlCisgICAgICAgICMgbGlzdCBmb3IgdGhlIG9yaWdpbmFsIGxheWVydmVyc2lvbgorICAgICAgICBlcXVpdnFzID0gc2VsZi5sdmVyLmdldF9lcXVpdmFsZW50c193cHJpb3JpdHkoc2VsZi5wcm9qZWN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGVxdWl2cXMpID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcXVpdnFzWzBdID09IHNlbGYubHZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVxdWl2cXNbMV0gPT0gbHZiKQorCisgICAgICAgICMgZ2V0dGluZyB0aGUgYnVpbGQgbGF5ZXJ2ZXJzaW9uIGVxdWl2YWxlbnQgbGlzdCBtdXN0CisgICAgICAgICMgcmV0dXJuIHRoZSBzYW1lIGxpc3QgYXMgdGhlIG9yaWdpbmFsIGxheWVyCisgICAgICAgIGJlcXVpdnFzID0gbHZiLmdldF9lcXVpdmFsZW50c193cHJpb3JpdHkoc2VsZi5wcm9qZWN0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChlcXVpdnFzKSwgbGlzdChiZXF1aXZxcykpCisKKyAgICBkZWYgdGVzdF9jb21wYXRpYmxlX2xheWVydmVyc2lvbnMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGVuIHdlIGhhdmUgYSAyIGxheWVyIHZlcnNpb25zLCBjb21wYXRpYmxlX2xheWVydmVyc2lvbnMoKQorICAgICAgICBzaG91bGQgcmV0dXJuIGEgcXVlcnlzZXQgd2l0aCBib3RoLgorICAgICAgICAiIiIKKyAgICAgICAgY29tcGF0X2x2ID0gc2VsZi5wcm9qZWN0LmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb21wYXRfbHYpLCBbc2VsZi5sdmVyLCBzZWxmLmx2ZXIyXSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvYm9vdHN0cmFwLXJlc3BvbnNpdmUubWluLmNzcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvYm9vdHN0cmFwLXJlc3BvbnNpdmUubWluLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNTk3ODYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9ib290c3RyYXAtcmVzcG9uc2l2ZS5taW4uY3NzCkBAIC0wLDAgKzEsOSBAQAorLyohCisgKiBCb290c3RyYXAgUmVzcG9uc2l2ZSB2Mi4zLjAKKyAqCisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSB2Mi4wCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBEZXNpZ25lZCBhbmQgYnVpbHQgd2l0aCBhbGwgdGhlIGxvdmUgaW4gdGhlIHdvcmxkIEB0d2l0dGVyIGJ5IEBtZG8gYW5kIEBmYXQuCisgKi8uY2xlYXJmaXh7Knpvb206MX0uY2xlYXJmaXg6YmVmb3JlLC5jbGVhcmZpeDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0uY2xlYXJmaXg6YWZ0ZXJ7Y2xlYXI6Ym90aH0uaGlkZS10ZXh0e2ZvbnQ6MC8wIGE7Y29sb3I6dHJhbnNwYXJlbnQ7dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjowfS5pbnB1dC1ibG9jay1sZXZlbHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7bWluLWhlaWdodDozMHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH1ALW1zLXZpZXdwb3J0e3dpZHRoOmRldmljZS13aWR0aH0uaGlkZGVue2Rpc3BsYXk6bm9uZTt2aXNpYmlsaXR5OmhpZGRlbn0udmlzaWJsZS1waG9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS52aXNpYmxlLXRhYmxldHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5oaWRkZW4tZGVza3RvcHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS52aXNpYmxlLWRlc2t0b3B7ZGlzcGxheTppbmhlcml0IWltcG9ydGFudH1AbWVkaWEobWluLXdpZHRoOjc2OHB4KSBhbmQgKG1heC13aWR0aDo5NzlweCl7LmhpZGRlbi1kZXNrdG9we2Rpc3BsYXk6aW5oZXJpdCFpbXBvcnRhbnR9LnZpc2libGUtZGVza3RvcHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS52aXNpYmxlLXRhYmxldHtkaXNwbGF5OmluaGVyaXQhaW1wb3J0YW50fS5oaWRkZW4tdGFibGV0e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYShtYXgtd2lkdGg6NzY3cHgpey5oaWRkZW4tZGVza3RvcHtkaXNwbGF5OmluaGVyaXQhaW1wb3J0YW50fS52aXNpYmxlLWRlc2t0b3B7ZGlzcGxheTpub25lIWltcG9ydGFudH0udmlzaWJsZS1waG9uZXtkaXNwbGF5OmluaGVyaXQhaW1wb3J0YW50fS5oaWRkZW4tcGhvbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH19LnZpc2libGUtcHJpbnR7ZGlzcGxheTpub25lIWltcG9ydGFudH1AbWVkaWEgcHJpbnR7LnZpc2libGUtcHJpbnR7ZGlzcGxheTppbmhlcml0IWltcG9ydGFudH0uaGlkZGVuLXByaW50e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6MTIwMHB4KXsucm93e21hcmdpbi1sZWZ0Oi0zMHB4Oyp6b29tOjF9LnJvdzpiZWZvcmUsLnJvdzphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ucm93OmFmdGVye2NsZWFyOmJvdGh9W2NsYXNzKj0ic3BhbiJde2Zsb2F0OmxlZnQ7bWluLWhlaWdodDoxcHg7bWFyZ2luLWxlZnQ6MzBweH0uY29udGFpbmVyLC5uYXZiYXItc3RhdGljLXRvcCAuY29udGFpbmVyLC5uYXZiYXItZml4ZWQtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC1ib3R0b20gLmNvbnRhaW5lcnt3aWR0aDoxMTcwcHh9LnNwYW4xMnt3aWR0aDoxMTcwcHh9LnNwYW4xMXt3aWR0aDoxMDcwcHh9LnNwYW4xMHt3aWR0aDo5NzBweH0uc3Bhbjl7d2lkdGg6ODcwcHh9LnNwYW44e3dpZHRoOjc3MHB4fS5zcGFuN3t3aWR0aDo2NzBweH0uc3BhbjZ7d2lkdGg6NTcwcHh9LnNwYW41e3dpZHRoOjQ3MHB4fS5zcGFuNHt3aWR0aDozNzBweH0uc3BhbjN7d2lkdGg6MjcwcHh9LnNwYW4ye3dpZHRoOjE3MHB4fS5zcGFuMXt3aWR0aDo3MHB4fS5vZmZzZXQxMnttYXJnaW4tbGVmdDoxMjMwcHh9Lm9mZnNldDExe21hcmdpbi1sZWZ0OjExMzBweH0ub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6MTAzMHB4fS5vZmZzZXQ5e21hcmdpbi1sZWZ0OjkzMHB4fS5vZmZzZXQ4e21hcmdpbi1sZWZ0OjgzMHB4fS5vZmZzZXQ3e21hcmdpbi1sZWZ0OjczMHB4fS5vZmZzZXQ2e21hcmdpbi1sZWZ0OjYzMHB4fS5vZmZzZXQ1e21hcmdpbi1sZWZ0OjUzMHB4fS5vZmZzZXQ0e21hcmdpbi1sZWZ0OjQzMHB4fS5vZmZzZXQze21hcmdpbi1sZWZ0OjMzMHB4fS5vZmZzZXQye21hcmdpbi1sZWZ0OjIzMHB4fS5vZmZzZXQxe21hcmdpbi1sZWZ0OjEzMHB4fS5yb3ctZmx1aWR7d2lkdGg6MTAwJTsqem9vbToxfS5yb3ctZmx1aWQ6YmVmb3JlLC5yb3ctZmx1aWQ6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LnJvdy1mbHVpZDphZnRlcntjbGVhcjpib3RofS5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bGVmdDt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MzBweDttYXJnaW4tbGVmdDoyLjU2NDEwMjU2NDEwMjU2NCU7Km1hcmdpbi1sZWZ0OjIuNTEwOTExMDc0NzQwODYxNiU7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJdOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjB9LnJvdy1mbHVpZCAuY29udHJvbHMtcm93IFtjbGFzcyo9InNwYW4iXStbY2xhc3MqPSJzcGFuIl17bWFyZ2luLWxlZnQ6Mi41NjQxMDI1NjQxMDI1NjQlfS5yb3ctZmx1aWQgLnNwYW4xMnt3aWR0aDoxMDAlOyp3aWR0aDo5OS45NDY4MDg1MTA2MzgyOSV9LnJvdy1mbHVpZCAuc3BhbjExe3dpZHRoOjkxLjQ1Mjk5MTQ1Mjk5MTQ1JTsqd2lkdGg6OTEuMzk5Nzk5OTYzNjI5NzUlfS5yb3ctZmx1aWQgLnNwYW4xMHt3aWR0aDo4Mi45MDU5ODI5MDU5ODI5MSU7KndpZHRoOjgyLjg1Mjc5MTQxNjYyMTIlfS5yb3ctZmx1aWQgLnNwYW45e3dpZHRoOjc0LjM1ODk3NDM1ODk3NDM2JTsqd2lkdGg6NzQuMzA1NzgyODY5NjEyNjYlfS5yb3ctZmx1aWQgLnNwYW44e3dpZHRoOjY1LjgxMTk2NTgxMTk2NTgyJTsqd2lkdGg6NjUuNzU4Nzc0MzIyNjA0MTElfS5yb3ctZmx1aWQgLnNwYW43e3dpZHRoOjU3LjI2NDk1NzI2NDk1NzI2JTsqd2lkdGg6NTcuMjExNzY1Nzc1NTk1NTYlfS5yb3ctZmx1aWQgLnNwYW42e3dpZHRoOjQ4LjcxNzk0ODcxNzk0ODcxNSU7KndpZHRoOjQ4LjY2NDc1NzIyODU4NzAxNCV9LnJvdy1mbHVpZCAuc3BhbjV7d2lkdGg6NDAuMTcwOTQwMTcwOTQwMTclOyp3aWR0aDo0MC4xMTc3NDg2ODE1Nzg0NyV9LnJvdy1mbHVpZCAuc3BhbjR7d2lkdGg6MzEuNjIzOTMxNjIzOTMxNjI1JTsqd2lkdGg6MzEuNTcwNzQwMTM0NTY5OTI0JX0ucm93LWZsdWlkIC5zcGFuM3t3aWR0aDoyMy4wNzY5MjMwNzY5MjMwNzclOyp3aWR0aDoyMy4wMjM3MzE1ODc1NjEzNzUlfS5yb3ctZmx1aWQgLnNwYW4ye3dpZHRoOjE0LjUyOTkxNDUyOTkxNDUzJTsqd2lkdGg6MTQuNDc2NzIzMDQwNTUyODI4JX0ucm93LWZsdWlkIC5zcGFuMXt3aWR0aDo1Ljk4MjkwNTk4MjkwNTk4MyU7KndpZHRoOjUuOTI5NzE0NDkzNTQ0MjgxJX0ucm93LWZsdWlkIC5vZmZzZXQxMnttYXJnaW4tbGVmdDoxMDUuMTI4MjA1MTI4MjA1MTIlOyptYXJnaW4tbGVmdDoxMDUuMDIxODIyMTQ5NDgxNzElfS5yb3ctZmx1aWQgLm9mZnNldDEyOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjEwMi41NjQxMDI1NjQxMDI1NyU7Km1hcmdpbi1sZWZ0OjEwMi40NTc3MTk1ODUzNzkxNSV9LnJvdy1mbHVpZCAub2Zmc2V0MTF7bWFyZ2luLWxlZnQ6OTYuNTgxMTk2NTgxMTk2NTglOyptYXJnaW4tbGVmdDo5Ni40NzQ4MTM2MDI0NzMxNiV9LnJvdy1mbHVpZCAub2Zmc2V0MTE6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6OTQuMDE3MDk0MDE3MDk0MDIlOyptYXJnaW4tbGVmdDo5My45MTA3MTEwMzgzNzA2MSV9LnJvdy1mbHVpZCAub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6ODguMDM0MTg4MDM0MTg4MDMlOyptYXJnaW4tbGVmdDo4Ny45Mjc4MDUwNTU0NjQ2MiV9LnJvdy1mbHVpZCAub2Zmc2V0MTA6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6ODUuNDcwMDg1NDcwMDg1NDglOyptYXJnaW4tbGVmdDo4NS4zNjM3MDI0OTEzNjIwNiV9LnJvdy1mbHVpZCAub2Zmc2V0OXttYXJnaW4tbGVmdDo3OS40ODcxNzk0ODcxNzk0OSU7Km1hcmdpbi1sZWZ0Ojc5LjM4MDc5NjUwODQ1NjA3JX0ucm93LWZsdWlkIC5vZmZzZXQ5OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojc2LjkyMzA3NjkyMzA3NjkzJTsqbWFyZ2luLWxlZnQ6NzYuODE2NjkzOTQ0MzUzNTIlfS5yb3ctZmx1aWQgLm9mZnNldDh7bWFyZ2luLWxlZnQ6NzAuOTQwMTcwOTQwMTcwOTQlOyptYXJnaW4tbGVmdDo3MC44MzM3ODc5NjE0NDc1MyV9LnJvdy1mbHVpZCAub2Zmc2V0ODpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo2OC4zNzYwNjgzNzYwNjgzOSU7Km1hcmdpbi1sZWZ0OjY4LjI2OTY4NTM5NzM0NDk3JX0ucm93LWZsdWlkIC5vZmZzZXQ3e21hcmdpbi1sZWZ0OjYyLjM5MzE2MjM5MzE2MjM4NSU7Km1hcmdpbi1sZWZ0OjYyLjI4Njc3OTQxNDQzODk5JX0ucm93LWZsdWlkIC5vZmZzZXQ3OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjU5LjgyOTA1OTgyOTA1OTgyJTsqbWFyZ2luLWxlZnQ6NTkuNzIyNjc2ODUwMzM2NDIlfS5yb3ctZmx1aWQgLm9mZnNldDZ7bWFyZ2luLWxlZnQ6NTMuODQ2MTUzODQ2MTUzODQlOyptYXJnaW4tbGVmdDo1My43Mzk3NzA4Njc0MzA0NDQlfS5yb3ctZmx1aWQgLm9mZnNldDY6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTEuMjgyMDUxMjgyMDUxMjglOyptYXJnaW4tbGVmdDo1MS4xNzU2NjgzMDMzMjc4NzUlfS5yb3ctZmx1aWQgLm9mZnNldDV7bWFyZ2luLWxlZnQ6NDUuMjk5MTQ1Mjk5MTQ1Mjk1JTsqbWFyZ2luLWxlZnQ6NDUuMTkyNzYyMzIwNDIxOSV9LnJvdy1mbHVpZCAub2Zmc2V0NTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo0Mi43MzUwNDI3MzUwNDI3MyU7Km1hcmdpbi1sZWZ0OjQyLjYyODY1OTc1NjMxOTMzJX0ucm93LWZsdWlkIC5vZmZzZXQ0e21hcmdpbi1sZWZ0OjM2Ljc1MjEzNjc1MjEzNjc1JTsqbWFyZ2luLWxlZnQ6MzYuNjQ1NzUzNzczNDEzMzU0JX0ucm93LWZsdWlkIC5vZmZzZXQ0OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjM0LjE4ODAzNDE4ODAzNDE5JTsqbWFyZ2luLWxlZnQ6MzQuMDgxNjUxMjA5MzEwNzg1JX0ucm93LWZsdWlkIC5vZmZzZXQze21hcmdpbi1sZWZ0OjI4LjIwNTEyODIwNTEyODIwNCU7Km1hcmdpbi1sZWZ0OjI4LjA5ODc0NTIyNjQwNDglfS5yb3ctZmx1aWQgLm9mZnNldDM6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MjUuNjQxMDI1NjQxMDI1NjQyJTsqbWFyZ2luLWxlZnQ6MjUuNTM0NjQyNjYyMzAyMjQlfS5yb3ctZmx1aWQgLm9mZnNldDJ7bWFyZ2luLWxlZnQ6MTkuNjU4MTE5NjU4MTE5NjYlOyptYXJnaW4tbGVmdDoxOS41NTE3MzY2NzkzOTYyNTclfS5yb3ctZmx1aWQgLm9mZnNldDI6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MTcuMDk0MDE3MDk0MDE3MDk0JTsqbWFyZ2luLWxlZnQ6MTYuOTg3NjM0MTE1MjkzNjklfS5yb3ctZmx1aWQgLm9mZnNldDF7bWFyZ2luLWxlZnQ6MTEuMTExMTExMTExMTExMTElOyptYXJnaW4tbGVmdDoxMS4wMDQ3MjgxMzIzODc3MDglfS5yb3ctZmx1aWQgLm9mZnNldDE6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6OC41NDcwMDg1NDcwMDg1NDclOyptYXJnaW4tbGVmdDo4LjQ0MDYyNTU2ODI4NTE0MiV9aW5wdXQsdGV4dGFyZWEsLnVuZWRpdGFibGUtaW5wdXR7bWFyZ2luLWxlZnQ6MH0uY29udHJvbHMtcm93IFtjbGFzcyo9InNwYW4iXStbY2xhc3MqPSJzcGFuIl17bWFyZ2luLWxlZnQ6MzBweH1pbnB1dC5zcGFuMTIsdGV4dGFyZWEuc3BhbjEyLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMnt3aWR0aDoxMTU2cHh9aW5wdXQuc3BhbjExLHRleHRhcmVhLnNwYW4xMSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMTF7d2lkdGg6MTA1NnB4fWlucHV0LnNwYW4xMCx0ZXh0YXJlYS5zcGFuMTAsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEwe3dpZHRoOjk1NnB4fWlucHV0LnNwYW45LHRleHRhcmVhLnNwYW45LC51bmVkaXRhYmxlLWlucHV0LnNwYW45e3dpZHRoOjg1NnB4fWlucHV0LnNwYW44LHRleHRhcmVhLnNwYW44LC51bmVkaXRhYmxlLWlucHV0LnNwYW44e3dpZHRoOjc1NnB4fWlucHV0LnNwYW43LHRleHRhcmVhLnNwYW43LC51bmVkaXRhYmxlLWlucHV0LnNwYW43e3dpZHRoOjY1NnB4fWlucHV0LnNwYW42LHRleHRhcmVhLnNwYW42LC51bmVkaXRhYmxlLWlucHV0LnNwYW42e3dpZHRoOjU1NnB4fWlucHV0LnNwYW41LHRleHRhcmVhLnNwYW41LC51bmVkaXRhYmxlLWlucHV0LnNwYW41e3dpZHRoOjQ1NnB4fWlucHV0LnNwYW40LHRleHRhcmVhLnNwYW40LC51bmVkaXRhYmxlLWlucHV0LnNwYW40e3dpZHRoOjM1NnB4fWlucHV0LnNwYW4zLHRleHRhcmVhLnNwYW4zLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ze3dpZHRoOjI1NnB4fWlucHV0LnNwYW4yLHRleHRhcmVhLnNwYW4yLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ye3dpZHRoOjE1NnB4fWlucHV0LnNwYW4xLHRleHRhcmVhLnNwYW4xLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xe3dpZHRoOjU2cHh9LnRodW1ibmFpbHN7bWFyZ2luLWxlZnQ6LTMwcHh9LnRodW1ibmFpbHM+bGl7bWFyZ2luLWxlZnQ6MzBweH0ucm93LWZsdWlkIC50aHVtYm5haWxze21hcmdpbi1sZWZ0OjB9fUBtZWRpYShtaW4td2lkdGg6NzY4cHgpIGFuZCAobWF4LXdpZHRoOjk3OXB4KXsucm93e21hcmdpbi1sZWZ0Oi0yMHB4Oyp6b29tOjF9LnJvdzpiZWZvcmUsLnJvdzphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ucm93OmFmdGVye2NsZWFyOmJvdGh9W2NsYXNzKj0ic3BhbiJde2Zsb2F0OmxlZnQ7bWluLWhlaWdodDoxcHg7bWFyZ2luLWxlZnQ6MjBweH0uY29udGFpbmVyLC5uYXZiYXItc3RhdGljLXRvcCAuY29udGFpbmVyLC5uYXZiYXItZml4ZWQtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC1ib3R0b20gLmNvbnRhaW5lcnt3aWR0aDo3MjRweH0uc3BhbjEye3dpZHRoOjcyNHB4fS5zcGFuMTF7d2lkdGg6NjYycHh9LnNwYW4xMHt3aWR0aDo2MDBweH0uc3Bhbjl7d2lkdGg6NTM4cHh9LnNwYW44e3dpZHRoOjQ3NnB4fS5zcGFuN3t3aWR0aDo0MTRweH0uc3BhbjZ7d2lkdGg6MzUycHh9LnNwYW41e3dpZHRoOjI5MHB4fS5zcGFuNHt3aWR0aDoyMjhweH0uc3BhbjN7d2lkdGg6MTY2cHh9LnNwYW4ye3dpZHRoOjEwNHB4fS5zcGFuMXt3aWR0aDo0MnB4fS5vZmZzZXQxMnttYXJnaW4tbGVmdDo3NjRweH0ub2Zmc2V0MTF7bWFyZ2luLWxlZnQ6NzAycHh9Lm9mZnNldDEwe21hcmdpbi1sZWZ0OjY0MHB4fS5vZmZzZXQ5e21hcmdpbi1sZWZ0OjU3OHB4fS5vZmZzZXQ4e21hcmdpbi1sZWZ0OjUxNnB4fS5vZmZzZXQ3e21hcmdpbi1sZWZ0OjQ1NHB4fS5vZmZzZXQ2e21hcmdpbi1sZWZ0OjM5MnB4fS5vZmZzZXQ1e21hcmdpbi1sZWZ0OjMzMHB4fS5vZmZzZXQ0e21hcmdpbi1sZWZ0OjI2OHB4fS5vZmZzZXQze21hcmdpbi1sZWZ0OjIwNnB4fS5vZmZzZXQye21hcmdpbi1sZWZ0OjE0NHB4fS5vZmZzZXQxe21hcmdpbi1sZWZ0OjgycHh9LnJvdy1mbHVpZHt3aWR0aDoxMDAlOyp6b29tOjF9LnJvdy1mbHVpZDpiZWZvcmUsLnJvdy1mbHVpZDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ucm93LWZsdWlkOmFmdGVye2NsZWFyOmJvdGh9LnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl17ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3dpZHRoOjEwMCU7bWluLWhlaWdodDozMHB4O21hcmdpbi1sZWZ0OjIuNzYyNDMwOTM5MjI2NTE5NCU7Km1hcmdpbi1sZWZ0OjIuNzA5MjM5NDQ5ODY0ODE3JTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0ucm93LWZsdWlkIC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDoyLjc2MjQzMDkzOTIyNjUxOTQlfS5yb3ctZmx1aWQgLnNwYW4xMnt3aWR0aDoxMDAlOyp3aWR0aDo5OS45NDY4MDg1MTA2MzgyOSV9LnJvdy1mbHVpZCAuc3BhbjExe3dpZHRoOjkxLjQzNjQ2NDA4ODM5Nzc4JTsqd2lkdGg6OTEuMzgzMjcyNTk5MDM2MDglfS5yb3ctZmx1aWQgLnNwYW4xMHt3aWR0aDo4Mi44NzI5MjgxNzY3OTU1OCU7KndpZHRoOjgyLjgxOTczNjY4NzQzMzg3JX0ucm93LWZsdWlkIC5zcGFuOXt3aWR0aDo3NC4zMDkzOTIyNjUxOTMzNyU7KndpZHRoOjc0LjI1NjIwMDc3NTgzMTY2JX0ucm93LWZsdWlkIC5zcGFuOHt3aWR0aDo2NS43NDU4NTYzNTM1OTExNyU7KndpZHRoOjY1LjY5MjY2NDg2NDIyOTQ2JX0ucm93LWZsdWlkIC5zcGFuN3t3aWR0aDo1Ny4xODIzMjA0NDE5ODg5NSU7KndpZHRoOjU3LjEyOTEyODk1MjYyNzI1JX0ucm93LWZsdWlkIC5zcGFuNnt3aWR0aDo0OC42MTg3ODQ1MzAzODY3NCU7KndpZHRoOjQ4LjU2NTU5MzA0MTAyNTA0JX0ucm93LWZsdWlkIC5zcGFuNXt3aWR0aDo0MC4wNTUyNDg2MTg3ODQ1MyU7KndpZHRoOjQwLjAwMjA1NzEyOTQyMjgzJX0ucm93LWZsdWlkIC5zcGFuNHt3aWR0aDozMS40OTE3MTI3MDcxODIzMjMlOyp3aWR0aDozMS40Mzg1MjEyMTc4MjA2MiV9LnJvdy1mbHVpZCAuc3BhbjN7d2lkdGg6MjIuOTI4MTc2Nzk1NTgwMTElOyp3aWR0aDoyMi44NzQ5ODUzMDYyMTg0MSV9LnJvdy1mbHVpZCAuc3BhbjJ7d2lkdGg6MTQuMzY0NjQwODgzOTc3OSU7KndpZHRoOjE0LjMxMTQ0OTM5NDYxNjE5OSV9LnJvdy1mbHVpZCAuc3BhbjF7d2lkdGg6NS44MDExMDQ5NzIzNzU2OTElOyp3aWR0aDo1Ljc0NzkxMzQ4MzAxMzk4OCV9LnJvdy1mbHVpZCAub2Zmc2V0MTJ7bWFyZ2luLWxlZnQ6MTA1LjUyNDg2MTg3ODQ1MzA0JTsqbWFyZ2luLWxlZnQ6MTA1LjQxODQ3ODg5OTcyOTYyJX0ucm93LWZsdWlkIC5vZmZzZXQxMjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxMDIuNzYyNDMwOTM5MjI2NTIlOyptYXJnaW4tbGVmdDoxMDIuNjU2MDQ3OTYwNTAzMSV9LnJvdy1mbHVpZCAub2Zmc2V0MTF7bWFyZ2luLWxlZnQ6OTYuOTYxMzI1OTY2ODUwODIlOyptYXJnaW4tbGVmdDo5Ni44NTQ5NDI5ODgxMjc0JX0ucm93LWZsdWlkIC5vZmZzZXQxMTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo5NC4xOTg4OTUwMjc2MjQzJTsqbWFyZ2luLWxlZnQ6OTQuMDkyNTEyMDQ4OTAwODklfS5yb3ctZmx1aWQgLm9mZnNldDEwe21hcmdpbi1sZWZ0Ojg4LjM5Nzc5MDA1NTI0ODYyJTsqbWFyZ2luLWxlZnQ6ODguMjkxNDA3MDc2NTI1MiV9LnJvdy1mbHVpZCAub2Zmc2V0MTA6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6ODUuNjM1MzU5MTE2MDIyMSU7Km1hcmdpbi1sZWZ0Ojg1LjUyODk3NjEzNzI5ODY4JX0ucm93LWZsdWlkIC5vZmZzZXQ5e21hcmdpbi1sZWZ0Ojc5LjgzNDI1NDE0MzY0NjQlOyptYXJnaW4tbGVmdDo3OS43Mjc4NzExNjQ5MjI5OSV9LnJvdy1mbHVpZCAub2Zmc2V0OTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo3Ny4wNzE4MjMyMDQ0MTk4OSU7Km1hcmdpbi1sZWZ0Ojc2Ljk2NTQ0MDIyNTY5NjQ3JX0ucm93LWZsdWlkIC5vZmZzZXQ4e21hcmdpbi1sZWZ0OjcxLjI3MDcxODIzMjA0NDIlOyptYXJnaW4tbGVmdDo3MS4xNjQzMzUyNTMzMjA3OSV9LnJvdy1mbHVpZCAub2Zmc2V0ODpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo2OC41MDgyODcyOTI4MTc2OCU7Km1hcmdpbi1sZWZ0OjY4LjQwMTkwNDMxNDA5NDI3JX0ucm93LWZsdWlkIC5vZmZzZXQ3e21hcmdpbi1sZWZ0OjYyLjcwNzE4MjMyMDQ0MTk5JTsqbWFyZ2luLWxlZnQ6NjIuNjAwNzk5MzQxNzE4NTg0JX0ucm93LWZsdWlkIC5vZmZzZXQ3OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjU5Ljk0NDc1MTM4MTIxNTQ3JTsqbWFyZ2luLWxlZnQ6NTkuODM4MzY4NDAyNDkyMDY1JX0ucm93LWZsdWlkIC5vZmZzZXQ2e21hcmdpbi1sZWZ0OjU0LjE0MzY0NjQwODgzOTc4JTsqbWFyZ2luLWxlZnQ6NTQuMDM3MjYzNDMwMTE2Mzc2JX0ucm93LWZsdWlkIC5vZmZzZXQ2OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjUxLjM4MTIxNTQ2OTYxMzI2JTsqbWFyZ2luLWxlZnQ6NTEuMjc0ODMyNDkwODg5ODYlfS5yb3ctZmx1aWQgLm9mZnNldDV7bWFyZ2luLWxlZnQ6NDUuNTgwMTEwNDk3MjM3NTclOyptYXJnaW4tbGVmdDo0NS40NzM3Mjc1MTg1MTQxNyV9LnJvdy1mbHVpZCAub2Zmc2V0NTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo0Mi44MTc2Nzk1NTgwMTEwNSU7Km1hcmdpbi1sZWZ0OjQyLjcxMTI5NjU3OTI4NzY1JX0ucm93LWZsdWlkIC5vZmZzZXQ0e21hcmdpbi1sZWZ0OjM3LjAxNjU3NDU4NTYzNTM2JTsqbWFyZ2luLWxlZnQ6MzYuOTEwMTkxNjA2OTExOTYlfS5yb3ctZmx1aWQgLm9mZnNldDQ6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MzQuMjU0MTQzNjQ2NDA4ODQlOyptYXJnaW4tbGVmdDozNC4xNDc3NjA2Njc2ODU0NCV9LnJvdy1mbHVpZCAub2Zmc2V0M3ttYXJnaW4tbGVmdDoyOC40NTMwMzg2NzQwMzMxNSU7Km1hcmdpbi1sZWZ0OjI4LjM0NjY1NTY5NTMwOTc0NiV9LnJvdy1mbHVpZCAub2Zmc2V0MzpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoyNS42OTA2MDc3MzQ4MDY2MyU7Km1hcmdpbi1sZWZ0OjI1LjU4NDIyNDc1NjA4MzIyNyV9LnJvdy1mbHVpZCAub2Zmc2V0MnttYXJnaW4tbGVmdDoxOS44ODk1MDI3NjI0MzA5NCU7Km1hcmdpbi1sZWZ0OjE5Ljc4MzExOTc4MzcwNzUzNyV9LnJvdy1mbHVpZCAub2Zmc2V0MjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxNy4xMjcwNzE4MjMyMDQ0MiU7Km1hcmdpbi1sZWZ0OjE3LjAyMDY4ODg0NDQ4MTAyJX0ucm93LWZsdWlkIC5vZmZzZXQxe21hcmdpbi1sZWZ0OjExLjMyNTk2Njg1MDgyODczJTsqbWFyZ2luLWxlZnQ6MTEuMjE5NTgzODcyMTA1MzI1JX0ucm93LWZsdWlkIC5vZmZzZXQxOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjguNTYzNTM1OTExNjAyMjElOyptYXJnaW4tbGVmdDo4LjQ1NzE1MjkzMjg3ODgwNiV9aW5wdXQsdGV4dGFyZWEsLnVuZWRpdGFibGUtaW5wdXR7bWFyZ2luLWxlZnQ6MH0uY29udHJvbHMtcm93IFtjbGFzcyo9InNwYW4iXStbY2xhc3MqPSJzcGFuIl17bWFyZ2luLWxlZnQ6MjBweH1pbnB1dC5zcGFuMTIsdGV4dGFyZWEuc3BhbjEyLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMnt3aWR0aDo3MTBweH1pbnB1dC5zcGFuMTEsdGV4dGFyZWEuc3BhbjExLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMXt3aWR0aDo2NDhweH1pbnB1dC5zcGFuMTAsdGV4dGFyZWEuc3BhbjEwLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMHt3aWR0aDo1ODZweH1pbnB1dC5zcGFuOSx0ZXh0YXJlYS5zcGFuOSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuOXt3aWR0aDo1MjRweH1pbnB1dC5zcGFuOCx0ZXh0YXJlYS5zcGFuOCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuOHt3aWR0aDo0NjJweH1pbnB1dC5zcGFuNyx0ZXh0YXJlYS5zcGFuNywudW5lZGl0YWJsZS1pbnB1dC5zcGFuN3t3aWR0aDo0MDBweH1pbnB1dC5zcGFuNix0ZXh0YXJlYS5zcGFuNiwudW5lZGl0YWJsZS1pbnB1dC5zcGFuNnt3aWR0aDozMzhweH1pbnB1dC5zcGFuNSx0ZXh0YXJlYS5zcGFuNSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuNXt3aWR0aDoyNzZweH1pbnB1dC5zcGFuNCx0ZXh0YXJlYS5zcGFuNCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuNHt3aWR0aDoyMTRweH1pbnB1dC5zcGFuMyx0ZXh0YXJlYS5zcGFuMywudW5lZGl0YWJsZS1pbnB1dC5zcGFuM3t3aWR0aDoxNTJweH1pbnB1dC5zcGFuMix0ZXh0YXJlYS5zcGFuMiwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMnt3aWR0aDo5MHB4fWlucHV0LnNwYW4xLHRleHRhcmVhLnNwYW4xLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xe3dpZHRoOjI4cHh9fUBtZWRpYShtYXgtd2lkdGg6NzY3cHgpe2JvZHl7cGFkZGluZy1yaWdodDoyMHB4O3BhZGRpbmctbGVmdDoyMHB4fS5uYXZiYXItZml4ZWQtdG9wLC5uYXZiYXItZml4ZWQtYm90dG9tLC5uYXZiYXItc3RhdGljLXRvcHttYXJnaW4tcmlnaHQ6LTIwcHg7bWFyZ2luLWxlZnQ6LTIwcHh9LmNvbnRhaW5lci1mbHVpZHtwYWRkaW5nOjB9LmRsLWhvcml6b250YWwgZHR7ZmxvYXQ6bm9uZTt3aWR0aDphdXRvO2NsZWFyOm5vbmU7dGV4dC1hbGlnbjpsZWZ0fS5kbC1ob3Jpem9udGFsIGRke21hcmdpbi1sZWZ0OjB9LmNvbnRhaW5lcnt3aWR0aDphdXRvfS5yb3ctZmx1aWR7d2lkdGg6MTAwJX0ucm93LC50aHVtYm5haWxze21hcmdpbi1sZWZ0OjB9LnRodW1ibmFpbHM+bGl7ZmxvYXQ6bm9uZTttYXJnaW4tbGVmdDowfVtjbGFzcyo9InNwYW4iXSwudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXXtkaXNwbGF5OmJsb2NrO2Zsb2F0Om5vbmU7d2lkdGg6MTAwJTttYXJnaW4tbGVmdDowOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uc3BhbjEyLC5yb3ctZmx1aWQgLnNwYW4xMnt3aWR0aDoxMDAlOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0ucm93LWZsdWlkIFtjbGFzcyo9Im9mZnNldCJdOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjB9LmlucHV0LWxhcmdlLC5pbnB1dC14bGFyZ2UsLmlucHV0LXh4bGFyZ2UsaW5wdXRbY2xhc3MqPSJzcGFuIl0sc2VsZWN0W2NsYXNzKj0ic3BhbiJdLHRleHRhcmVhW2NsYXNzKj0ic3BhbiJdLC51bmVkaXRhYmxlLWlucHV0e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjMwcHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5pbnB1dC1wcmVwZW5kIGlucHV0LC5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LXByZXBlbmQgaW5wdXRbY2xhc3MqPSJzcGFuIl0sLmlucHV0LWFwcGVuZCBpbnB1dFtjbGFzcyo9InNwYW4iXXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDphdXRvfS5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDowfS5tb2RhbHtwb3NpdGlvbjpmaXhlZDt0b3A6MjBweDtyaWdodDoyMHB4O2xlZnQ6MjBweDt3aWR0aDphdXRvO21hcmdpbjowfS5tb2RhbC5mYWRle3RvcDotMTAwcHh9Lm1vZGFsLmZhZGUuaW57dG9wOjIwcHh9fUBtZWRpYShtYXgtd2lkdGg6NDgwcHgpey5uYXYtY29sbGFwc2V7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApfS5wYWdlLWhlYWRlciBoMSBzbWFsbHtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9aW5wdXRbdHlwZT0iY2hlY2tib3giXSxpbnB1dFt0eXBlPSJyYWRpbyJde2JvcmRlcjoxcHggc29saWQgI2NjY30uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWxhYmVse2Zsb2F0Om5vbmU7d2lkdGg6YXV0bztwYWRkaW5nLXRvcDowO3RleHQtYWxpZ246bGVmdH0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sc3ttYXJnaW4tbGVmdDowfS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtbGlzdHtwYWRkaW5nLXRvcDowfS5mb3JtLWhvcml6b250YWwgLmZvcm0tYWN0aW9uc3twYWRkaW5nLXJpZ2h0OjEwcHg7cGFkZGluZy1sZWZ0OjEwcHh9Lm1lZGlhIC5wdWxsLWxlZnQsLm1lZGlhIC5wdWxsLXJpZ2h0e2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bm9uZTttYXJnaW4tYm90dG9tOjEwcHh9Lm1lZGlhLW9iamVjdHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDowfS5tb2RhbHt0b3A6MTBweDtyaWdodDoxMHB4O2xlZnQ6MTBweH0ubW9kYWwtaGVhZGVyIC5jbG9zZXtwYWRkaW5nOjEwcHg7bWFyZ2luOi0xMHB4fS5jYXJvdXNlbC1jYXB0aW9ue3Bvc2l0aW9uOnN0YXRpY319QG1lZGlhKG1heC13aWR0aDo5NzlweCl7Ym9keXtwYWRkaW5nLXRvcDowfS5uYXZiYXItZml4ZWQtdG9wLC5uYXZiYXItZml4ZWQtYm90dG9te3Bvc2l0aW9uOnN0YXRpY30ubmF2YmFyLWZpeGVkLXRvcHttYXJnaW4tYm90dG9tOjIwcHh9Lm5hdmJhci1maXhlZC1ib3R0b217bWFyZ2luLXRvcDoyMHB4fS5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItaW5uZXIsLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1pbm5lcntwYWRkaW5nOjVweH0ubmF2YmFyIC5jb250YWluZXJ7d2lkdGg6YXV0bztwYWRkaW5nOjB9Lm5hdmJhciAuYnJhbmR7cGFkZGluZy1yaWdodDoxMHB4O3BhZGRpbmctbGVmdDoxMHB4O21hcmdpbjowIDAgMCAtNXB4fS5uYXYtY29sbGFwc2V7Y2xlYXI6Ym90aH0ubmF2LWNvbGxhcHNlIC5uYXZ7ZmxvYXQ6bm9uZTttYXJnaW46MCAwIDEwcHh9Lm5hdi1jb2xsYXBzZSAubmF2Pmxpe2Zsb2F0Om5vbmV9Lm5hdi1jb2xsYXBzZSAubmF2PmxpPmF7bWFyZ2luLWJvdHRvbToycHh9Lm5hdi1jb2xsYXBzZSAubmF2Pi5kaXZpZGVyLXZlcnRpY2Fse2Rpc3BsYXk6bm9uZX0ubmF2LWNvbGxhcHNlIC5uYXYgLm5hdi1oZWFkZXJ7Y29sb3I6Izc3Nzt0ZXh0LXNoYWRvdzpub25lfS5uYXYtY29sbGFwc2UgLm5hdj5saT5hLC5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnUgYXtwYWRkaW5nOjlweCAxNXB4O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6Izc3Nzstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9Lm5hdi1jb2xsYXBzZSAuYnRue3BhZGRpbmc6NHB4IDEwcHggNHB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9Lm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSBsaStsaSBhe21hcmdpbi1ib3R0b206MnB4fS5uYXYtY29sbGFwc2UgLm5hdj5saT5hOmhvdmVyLC5uYXYtY29sbGFwc2UgLm5hdj5saT5hOmZvY3VzLC5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnUgYTpob3ZlciwubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IGE6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojZjJmMmYyfS5uYXZiYXItaW52ZXJzZSAubmF2LWNvbGxhcHNlIC5uYXY+bGk+YSwubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSBhe2NvbG9yOiM5OTl9Lm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLm5hdj5saT5hOmhvdmVyLC5uYXZiYXItaW52ZXJzZSAubmF2LWNvbGxhcHNlIC5uYXY+bGk+YTpmb2N1cywubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSBhOmhvdmVyLC5uYXZiYXItaW52ZXJzZSAubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IGE6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojMTExfS5uYXYtY29sbGFwc2UuaW4gLmJ0bi1ncm91cHtwYWRkaW5nOjA7bWFyZ2luLXRvcDo1cHh9Lm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudXtwb3NpdGlvbjpzdGF0aWM7dG9wOmF1dG87bGVmdDphdXRvO2Rpc3BsYXk6bm9uZTtmbG9hdDpub25lO21heC13aWR0aDpub25lO3BhZGRpbmc6MDttYXJnaW46MCAxNXB4O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOjA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowOy13ZWJraXQtYm94LXNoYWRvdzpub25lOy1tb3otYm94LXNoYWRvdzpub25lO2JveC1zaGFkb3c6bm9uZX0ubmF2LWNvbGxhcHNlIC5vcGVuPi5kcm9wZG93bi1tZW51e2Rpc3BsYXk6YmxvY2t9Lm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudTpiZWZvcmUsLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudTphZnRlcntkaXNwbGF5Om5vbmV9Lm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSAuZGl2aWRlcntkaXNwbGF5Om5vbmV9Lm5hdi1jb2xsYXBzZSAubmF2PmxpPi5kcm9wZG93bi1tZW51OmJlZm9yZSwubmF2LWNvbGxhcHNlIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YWZ0ZXJ7ZGlzcGxheTpub25lfS5uYXYtY29sbGFwc2UgLm5hdmJhci1mb3JtLC5uYXYtY29sbGFwc2UgLm5hdmJhci1zZWFyY2h7ZmxvYXQ6bm9uZTtwYWRkaW5nOjEwcHggMTVweDttYXJnaW46MTBweCAwO2JvcmRlci10b3A6MXB4IHNvbGlkICNmMmYyZjI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2YyZjJmMjstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSl9Lm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLm5hdmJhci1mb3JtLC5uYXZiYXItaW52ZXJzZSAubmF2LWNvbGxhcHNlIC5uYXZiYXItc2VhcmNoe2JvcmRlci10b3AtY29sb3I6IzExMTtib3JkZXItYm90dG9tLWNvbG9yOiMxMTF9Lm5hdmJhciAubmF2LWNvbGxhcHNlIC5uYXYucHVsbC1yaWdodHtmbG9hdDpub25lO21hcmdpbi1sZWZ0OjB9Lm5hdi1jb2xsYXBzZSwubmF2LWNvbGxhcHNlLmNvbGxhcHNle2hlaWdodDowO292ZXJmbG93OmhpZGRlbn0ubmF2YmFyIC5idG4tbmF2YmFye2Rpc3BsYXk6YmxvY2t9Lm5hdmJhci1zdGF0aWMgLm5hdmJhci1pbm5lcntwYWRkaW5nLXJpZ2h0OjEwcHg7cGFkZGluZy1sZWZ0OjEwcHh9fUBtZWRpYShtaW4td2lkdGg6OTgwcHgpey5uYXYtY29sbGFwc2UuY29sbGFwc2V7aGVpZ2h0OmF1dG8haW1wb3J0YW50O292ZXJmbG93OnZpc2libGUhaW1wb3J0YW50fX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvYm9vdHN0cmFwLm1pbi5jc3MgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2Jvb3RzdHJhcC5taW4uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJiOTI3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2Jvb3RzdHJhcC5taW4uY3NzCkBAIC0wLDAgKzEsOSBAQAorLyohCisgKiBCb290c3RyYXAgdjIuMy4wCisgKgorICogQ29weXJpZ2h0IDIwMTIgVHdpdHRlciwgSW5jCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgdjIuMAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogRGVzaWduZWQgYW5kIGJ1aWx0IHdpdGggYWxsIHRoZSBsb3ZlIGluIHRoZSB3b3JsZCBAdHdpdHRlciBieSBAbWRvIGFuZCBAZmF0LgorICovLmNsZWFyZml4eyp6b29tOjF9LmNsZWFyZml4OmJlZm9yZSwuY2xlYXJmaXg6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmNsZWFyZml4OmFmdGVye2NsZWFyOmJvdGh9LmhpZGUtdGV4dHtmb250OjAvMCBhO2NvbG9yOnRyYW5zcGFyZW50O3RleHQtc2hhZG93Om5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6MH0uaW5wdXQtYmxvY2stbGV2ZWx7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MzBweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9YXJ0aWNsZSxhc2lkZSxkZXRhaWxzLGZpZ2NhcHRpb24sZmlndXJlLGZvb3RlcixoZWFkZXIsaGdyb3VwLG5hdixzZWN0aW9ue2Rpc3BsYXk6YmxvY2t9YXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTsqem9vbToxfWF1ZGlvOm5vdChbY29udHJvbHNdKXtkaXNwbGF5Om5vbmV9aHRtbHtmb250LXNpemU6MTAwJTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbXMtdGV4dC1zaXplLWFkanVzdDoxMDAlfWE6Zm9jdXN7b3V0bGluZTp0aGluIGRvdHRlZCAjMzMzO291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0Oi0ycHh9YTpob3ZlcixhOmFjdGl2ZXtvdXRsaW5lOjB9c3ViLHN1cHtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6NzUlO2xpbmUtaGVpZ2h0OjA7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3Vwe3RvcDotMC41ZW19c3Vie2JvdHRvbTotMC4yNWVtfWltZ3t3aWR0aDphdXRvXDk7aGVpZ2h0OmF1dG87bWF4LXdpZHRoOjEwMCU7dmVydGljYWwtYWxpZ246bWlkZGxlO2JvcmRlcjowOy1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6YmljdWJpY30jbWFwX2NhbnZhcyBpbWcsLmdvb2dsZS1tYXBzIGltZ3ttYXgtd2lkdGg6bm9uZX1idXR0b24saW5wdXQsc2VsZWN0LHRleHRhcmVhe21hcmdpbjowO2ZvbnQtc2l6ZToxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1idXR0b24saW5wdXR7Km92ZXJmbG93OnZpc2libGU7bGluZS1oZWlnaHQ6bm9ybWFsfWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixpbnB1dDo6LW1vei1mb2N1cy1pbm5lcntwYWRkaW5nOjA7Ym9yZGVyOjB9YnV0dG9uLGh0bWwgaW5wdXRbdHlwZT0iYnV0dG9uIl0saW5wdXRbdHlwZT0icmVzZXQiXSxpbnB1dFt0eXBlPSJzdWJtaXQiXXtjdXJzb3I6cG9pbnRlcjstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufWxhYmVsLHNlbGVjdCxidXR0b24saW5wdXRbdHlwZT0iYnV0dG9uIl0saW5wdXRbdHlwZT0icmVzZXQiXSxpbnB1dFt0eXBlPSJzdWJtaXQiXSxpbnB1dFt0eXBlPSJyYWRpbyJdLGlucHV0W3R5cGU9ImNoZWNrYm94Il17Y3Vyc29yOnBvaW50ZXJ9aW5wdXRbdHlwZT0ic2VhcmNoIl17LXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGR9aW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24saW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9dGV4dGFyZWF7b3ZlcmZsb3c6YXV0bzt2ZXJ0aWNhbC1hbGlnbjp0b3B9QG1lZGlhIHByaW50eyp7Y29sb3I6IzAwMCFpbXBvcnRhbnQ7dGV4dC1zaGFkb3c6bm9uZSFpbXBvcnRhbnQ7YmFja2dyb3VuZDp0cmFuc3BhcmVudCFpbXBvcnRhbnQ7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH1hLGE6dmlzaXRlZHt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfWFbaHJlZl06YWZ0ZXJ7Y29udGVudDoiICgiIGF0dHIoaHJlZikgIikifWFiYnJbdGl0bGVdOmFmdGVye2NvbnRlbnQ6IiAoIiBhdHRyKHRpdGxlKSAiKSJ9LmlyIGE6YWZ0ZXIsYVtocmVmXj0iamF2YXNjcmlwdDoiXTphZnRlcixhW2hyZWZePSIjIl06YWZ0ZXJ7Y29udGVudDoiIn1wcmUsYmxvY2txdW90ZXtib3JkZXI6MXB4IHNvbGlkICM5OTk7cGFnZS1icmVhay1pbnNpZGU6YXZvaWR9dGhlYWR7ZGlzcGxheTp0YWJsZS1oZWFkZXItZ3JvdXB9dHIsaW1ne3BhZ2UtYnJlYWstaW5zaWRlOmF2b2lkfWltZ3ttYXgtd2lkdGg6MTAwJSFpbXBvcnRhbnR9QHBhZ2V7bWFyZ2luOi41Y219cCxoMixoM3tvcnBoYW5zOjM7d2lkb3dzOjN9aDIsaDN7cGFnZS1icmVhay1hZnRlcjphdm9pZH19Ym9keXttYXJnaW46MDtmb250LWZhbWlseToiSGVsdmV0aWNhIE5ldWUiLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9YXtjb2xvcjojMDhjO3RleHQtZGVjb3JhdGlvbjpub25lfWE6aG92ZXIsYTpmb2N1c3tjb2xvcjojMDA1NTgwO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmltZy1yb3VuZGVkey13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0uaW1nLXBvbGFyb2lke3BhZGRpbmc6NHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMik7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMSk7Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwwLjEpfS5pbWctY2lyY2xley13ZWJraXQtYm9yZGVyLXJhZGl1czo1MDBweDstbW96LWJvcmRlci1yYWRpdXM6NTAwcHg7Ym9yZGVyLXJhZGl1czo1MDBweH0ucm93e21hcmdpbi1sZWZ0Oi0yMHB4Oyp6b29tOjF9LnJvdzpiZWZvcmUsLnJvdzphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ucm93OmFmdGVye2NsZWFyOmJvdGh9W2NsYXNzKj0ic3BhbiJde2Zsb2F0OmxlZnQ7bWluLWhlaWdodDoxcHg7bWFyZ2luLWxlZnQ6MjBweH0uY29udGFpbmVyLC5uYXZiYXItc3RhdGljLXRvcCAuY29udGFpbmVyLC5uYXZiYXItZml4ZWQtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC1ib3R0b20gLmNvbnRhaW5lcnt3aWR0aDo5NDBweH0uc3BhbjEye3dpZHRoOjk0MHB4fS5zcGFuMTF7d2lkdGg6ODYwcHh9LnNwYW4xMHt3aWR0aDo3ODBweH0uc3Bhbjl7d2lkdGg6NzAwcHh9LnNwYW44e3dpZHRoOjYyMHB4fS5zcGFuN3t3aWR0aDo1NDBweH0uc3BhbjZ7d2lkdGg6NDYwcHh9LnNwYW41e3dpZHRoOjM4MHB4fS5zcGFuNHt3aWR0aDozMDBweH0uc3BhbjN7d2lkdGg6MjIwcHh9LnNwYW4ye3dpZHRoOjE0MHB4fS5zcGFuMXt3aWR0aDo2MHB4fS5vZmZzZXQxMnttYXJnaW4tbGVmdDo5ODBweH0ub2Zmc2V0MTF7bWFyZ2luLWxlZnQ6OTAwcHh9Lm9mZnNldDEwe21hcmdpbi1sZWZ0OjgyMHB4fS5vZmZzZXQ5e21hcmdpbi1sZWZ0Ojc0MHB4fS5vZmZzZXQ4e21hcmdpbi1sZWZ0OjY2MHB4fS5vZmZzZXQ3e21hcmdpbi1sZWZ0OjU4MHB4fS5vZmZzZXQ2e21hcmdpbi1sZWZ0OjUwMHB4fS5vZmZzZXQ1e21hcmdpbi1sZWZ0OjQyMHB4fS5vZmZzZXQ0e21hcmdpbi1sZWZ0OjM0MHB4fS5vZmZzZXQze21hcmdpbi1sZWZ0OjI2MHB4fS5vZmZzZXQye21hcmdpbi1sZWZ0OjE4MHB4fS5vZmZzZXQxe21hcmdpbi1sZWZ0OjEwMHB4fS5yb3ctZmx1aWR7d2lkdGg6MTAwJTsqem9vbToxfS5yb3ctZmx1aWQ6YmVmb3JlLC5yb3ctZmx1aWQ6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LnJvdy1mbHVpZDphZnRlcntjbGVhcjpib3RofS5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bGVmdDt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MzBweDttYXJnaW4tbGVmdDoyLjEyNzY1OTU3NDQ2ODA4NSU7Km1hcmdpbi1sZWZ0OjIuMDc0NDY4MDg1MTA2MzgzJTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0ucm93LWZsdWlkIC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDoyLjEyNzY1OTU3NDQ2ODA4NSV9LnJvdy1mbHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7KndpZHRoOjk5Ljk0NjgwODUxMDYzODI5JX0ucm93LWZsdWlkIC5zcGFuMTF7d2lkdGg6OTEuNDg5MzYxNzAyMTI3NjUlOyp3aWR0aDo5MS40MzYxNzAyMTI3NjU5NCV9LnJvdy1mbHVpZCAuc3BhbjEwe3dpZHRoOjgyLjk3ODcyMzQwNDI1NTMyJTsqd2lkdGg6ODIuOTI1NTMxOTE0ODkzNjElfS5yb3ctZmx1aWQgLnNwYW45e3dpZHRoOjc0LjQ2ODA4NTEwNjM4Mjk3JTsqd2lkdGg6NzQuNDE0ODkzNjE3MDIxMjYlfS5yb3ctZmx1aWQgLnNwYW44e3dpZHRoOjY1Ljk1NzQ0NjgwODUxMDY0JTsqd2lkdGg6NjUuOTA0MjU1MzE5MTQ4OTMlfS5yb3ctZmx1aWQgLnNwYW43e3dpZHRoOjU3LjQ0NjgwODUxMDYzODI5JTsqd2lkdGg6NTcuMzkzNjE3MDIxMjc2NTklfS5yb3ctZmx1aWQgLnNwYW42e3dpZHRoOjQ4LjkzNjE3MDIxMjc2NTk1JTsqd2lkdGg6NDguODgyOTc4NzIzNDA0MjUlfS5yb3ctZmx1aWQgLnNwYW41e3dpZHRoOjQwLjQyNTUzMTkxNDg5MzYyJTsqd2lkdGg6NDAuMzcyMzQwNDI1NTMxOTIlfS5yb3ctZmx1aWQgLnNwYW40e3dpZHRoOjMxLjkxNDg5MzYxNzAyMTI3OCU7KndpZHRoOjMxLjg2MTcwMjEyNzY1OTU3NiV9LnJvdy1mbHVpZCAuc3BhbjN7d2lkdGg6MjMuNDA0MjU1MzE5MTQ4OTM0JTsqd2lkdGg6MjMuMzUxMDYzODI5Nzg3MjMzJX0ucm93LWZsdWlkIC5zcGFuMnt3aWR0aDoxNC44OTM2MTcwMjEyNzY1OTUlOyp3aWR0aDoxNC44NDA0MjU1MzE5MTQ4OTQlfS5yb3ctZmx1aWQgLnNwYW4xe3dpZHRoOjYuMzgyOTc4NzIzNDA0MjU1JTsqd2lkdGg6Ni4zMjk3ODcyMzQwNDI1NTMlfS5yb3ctZmx1aWQgLm9mZnNldDEye21hcmdpbi1sZWZ0OjEwNC4yNTUzMTkxNDg5MzYxNyU7Km1hcmdpbi1sZWZ0OjEwNC4xNDg5MzYxNzAyMTI3NSV9LnJvdy1mbHVpZCAub2Zmc2V0MTI6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MTAyLjEyNzY1OTU3NDQ2ODA4JTsqbWFyZ2luLWxlZnQ6MTAyLjAyMTI3NjU5NTc0NDY3JX0ucm93LWZsdWlkIC5vZmZzZXQxMXttYXJnaW4tbGVmdDo5NS43NDQ2ODA4NTEwNjM4MiU7Km1hcmdpbi1sZWZ0Ojk1LjYzODI5Nzg3MjM0MDQlfS5yb3ctZmx1aWQgLm9mZnNldDExOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjkzLjYxNzAyMTI3NjU5NTc0JTsqbWFyZ2luLWxlZnQ6OTMuNTEwNjM4Mjk3ODcyMzIlfS5yb3ctZmx1aWQgLm9mZnNldDEwe21hcmdpbi1sZWZ0Ojg3LjIzNDA0MjU1MzE5MTQ5JTsqbWFyZ2luLWxlZnQ6ODcuMTI3NjU5NTc0NDY4MDclfS5yb3ctZmx1aWQgLm9mZnNldDEwOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojg1LjEwNjM4Mjk3ODcyMzQlOyptYXJnaW4tbGVmdDo4NC45OTk5OTk5OTk5OTk5OSV9LnJvdy1mbHVpZCAub2Zmc2V0OXttYXJnaW4tbGVmdDo3OC43MjM0MDQyNTUzMTkxNCU7Km1hcmdpbi1sZWZ0Ojc4LjYxNzAyMTI3NjU5NTcyJX0ucm93LWZsdWlkIC5vZmZzZXQ5OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojc2LjU5NTc0NDY4MDg1MTA2JTsqbWFyZ2luLWxlZnQ6NzYuNDg5MzYxNzAyMTI3NjQlfS5yb3ctZmx1aWQgLm9mZnNldDh7bWFyZ2luLWxlZnQ6NzAuMjEyNzY1OTU3NDQ2OCU7Km1hcmdpbi1sZWZ0OjcwLjEwNjM4Mjk3ODcyMzM5JX0ucm93LWZsdWlkIC5vZmZzZXQ4OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjY4LjA4NTEwNjM4Mjk3ODcyJTsqbWFyZ2luLWxlZnQ6NjcuOTc4NzIzNDA0MjU1MyV9LnJvdy1mbHVpZCAub2Zmc2V0N3ttYXJnaW4tbGVmdDo2MS43MDIxMjc2NTk1NzQ0NiU7Km1hcmdpbi1sZWZ0OjYxLjU5NTc0NDY4MDg1MTA2JX0ucm93LWZsdWlkIC5vZmZzZXQ3OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjU5LjU3NDQ2ODA4NTEwNjM3NSU7Km1hcmdpbi1sZWZ0OjU5LjQ2ODA4NTEwNjM4Mjk3JX0ucm93LWZsdWlkIC5vZmZzZXQ2e21hcmdpbi1sZWZ0OjUzLjE5MTQ4OTM2MTcwMjEyNSU7Km1hcmdpbi1sZWZ0OjUzLjA4NTEwNjM4Mjk3ODcxNSV9LnJvdy1mbHVpZCAub2Zmc2V0NjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo1MS4wNjM4Mjk3ODcyMzQwMzUlOyptYXJnaW4tbGVmdDo1MC45NTc0NDY4MDg1MTA2MyV9LnJvdy1mbHVpZCAub2Zmc2V0NXttYXJnaW4tbGVmdDo0NC42ODA4NTEwNjM4Mjk3OSU7Km1hcmdpbi1sZWZ0OjQ0LjU3NDQ2ODA4NTEwNjM4JX0ucm93LWZsdWlkIC5vZmZzZXQ1OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjQyLjU1MzE5MTQ4OTM2MTclOyptYXJnaW4tbGVmdDo0Mi40NDY4MDg1MTA2MzgzJX0ucm93LWZsdWlkIC5vZmZzZXQ0e21hcmdpbi1sZWZ0OjM2LjE3MDIxMjc2NTk1NzQ0NCU7Km1hcmdpbi1sZWZ0OjM2LjA2MzgyOTc4NzIzNDA1JX0ucm93LWZsdWlkIC5vZmZzZXQ0OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjM0LjA0MjU1MzE5MTQ4OTM2JTsqbWFyZ2luLWxlZnQ6MzMuOTM2MTcwMjEyNzY1OTYlfS5yb3ctZmx1aWQgLm9mZnNldDN7bWFyZ2luLWxlZnQ6MjcuNjU5NTc0NDY4MDg1MTA0JTsqbWFyZ2luLWxlZnQ6MjcuNTUzMTkxNDg5MzYxNyV9LnJvdy1mbHVpZCAub2Zmc2V0MzpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoyNS41MzE5MTQ4OTM2MTcwMiU7Km1hcmdpbi1sZWZ0OjI1LjQyNTUzMTkxNDg5MzYxOCV9LnJvdy1mbHVpZCAub2Zmc2V0MnttYXJnaW4tbGVmdDoxOS4xNDg5MzYxNzAyMTI3NjQlOyptYXJnaW4tbGVmdDoxOS4wNDI1NTMxOTE0ODkzNiV9LnJvdy1mbHVpZCAub2Zmc2V0MjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxNy4wMjEyNzY1OTU3NDQ2OCU7Km1hcmdpbi1sZWZ0OjE2LjkxNDg5MzYxNzAyMTI3OCV9LnJvdy1mbHVpZCAub2Zmc2V0MXttYXJnaW4tbGVmdDoxMC42MzgyOTc4NzIzNDA0MjUlOyptYXJnaW4tbGVmdDoxMC41MzE5MTQ4OTM2MTcwMiV9LnJvdy1mbHVpZCAub2Zmc2V0MTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4LjUxMDYzODI5Nzg3MjM0JTsqbWFyZ2luLWxlZnQ6OC40MDQyNTUzMTkxNDg5MzglfVtjbGFzcyo9InNwYW4iXS5oaWRlLC5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJdLmhpZGV7ZGlzcGxheTpub25lfVtjbGFzcyo9InNwYW4iXS5wdWxsLXJpZ2h0LC5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJdLnB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHR9LmNvbnRhaW5lcnttYXJnaW4tcmlnaHQ6YXV0bzttYXJnaW4tbGVmdDphdXRvOyp6b29tOjF9LmNvbnRhaW5lcjpiZWZvcmUsLmNvbnRhaW5lcjphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0uY29udGFpbmVyOmFmdGVye2NsZWFyOmJvdGh9LmNvbnRhaW5lci1mbHVpZHtwYWRkaW5nLXJpZ2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHg7Knpvb206MX0uY29udGFpbmVyLWZsdWlkOmJlZm9yZSwuY29udGFpbmVyLWZsdWlkOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jb250YWluZXItZmx1aWQ6YWZ0ZXJ7Y2xlYXI6Ym90aH1we21hcmdpbjowIDAgMTBweH0ubGVhZHttYXJnaW4tYm90dG9tOjIwcHg7Zm9udC1zaXplOjIxcHg7Zm9udC13ZWlnaHQ6MjAwO2xpbmUtaGVpZ2h0OjMwcHh9c21hbGx7Zm9udC1zaXplOjg1JX1zdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZH1lbXtmb250LXN0eWxlOml0YWxpY31jaXRle2ZvbnQtc3R5bGU6bm9ybWFsfS5tdXRlZHtjb2xvcjojOTk5fWEubXV0ZWQ6aG92ZXIsYS5tdXRlZDpmb2N1c3tjb2xvcjojODA4MDgwfS50ZXh0LXdhcm5pbmd7Y29sb3I6I2MwOTg1M31hLnRleHQtd2FybmluZzpob3ZlcixhLnRleHQtd2FybmluZzpmb2N1c3tjb2xvcjojYTQ3ZTNjfS50ZXh0LWVycm9ye2NvbG9yOiNiOTRhNDh9YS50ZXh0LWVycm9yOmhvdmVyLGEudGV4dC1lcnJvcjpmb2N1c3tjb2xvcjojOTUzYjM5fS50ZXh0LWluZm97Y29sb3I6IzNhODdhZH1hLnRleHQtaW5mbzpob3ZlcixhLnRleHQtaW5mbzpmb2N1c3tjb2xvcjojMmQ2OTg3fS50ZXh0LXN1Y2Nlc3N7Y29sb3I6IzQ2ODg0N31hLnRleHQtc3VjY2Vzczpob3ZlcixhLnRleHQtc3VjY2Vzczpmb2N1c3tjb2xvcjojMzU2NjM1fS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfWgxLGgyLGgzLGg0LGg1LGg2e21hcmdpbjoxMHB4IDA7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6aW5oZXJpdDt0ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZWxlZ2liaWxpdHl9aDEgc21hbGwsaDIgc21hbGwsaDMgc21hbGwsaDQgc21hbGwsaDUgc21hbGwsaDYgc21hbGx7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjE7Y29sb3I6Izk5OX1oMSxoMixoM3tsaW5lLWhlaWdodDo0MHB4fWgxe2ZvbnQtc2l6ZTozOC41cHh9aDJ7Zm9udC1zaXplOjMxLjVweH1oM3tmb250LXNpemU6MjQuNXB4fWg0e2ZvbnQtc2l6ZToxNy41cHh9aDV7Zm9udC1zaXplOjE0cHh9aDZ7Zm9udC1zaXplOjExLjlweH1oMSBzbWFsbHtmb250LXNpemU6MjQuNXB4fWgyIHNtYWxse2ZvbnQtc2l6ZToxNy41cHh9aDMgc21hbGx7Zm9udC1zaXplOjE0cHh9aDQgc21hbGx7Zm9udC1zaXplOjE0cHh9LnBhZ2UtaGVhZGVye3BhZGRpbmctYm90dG9tOjlweDttYXJnaW46MjBweCAwIDMwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2VlZX11bCxvbHtwYWRkaW5nOjA7bWFyZ2luOjAgMCAxMHB4IDI1cHh9dWwgdWwsdWwgb2wsb2wgb2wsb2wgdWx7bWFyZ2luLWJvdHRvbTowfWxpe2xpbmUtaGVpZ2h0OjIwcHh9dWwudW5zdHlsZWQsb2wudW5zdHlsZWR7bWFyZ2luLWxlZnQ6MDtsaXN0LXN0eWxlOm5vbmV9dWwuaW5saW5lLG9sLmlubGluZXttYXJnaW4tbGVmdDowO2xpc3Qtc3R5bGU6bm9uZX11bC5pbmxpbmU+bGksb2wuaW5saW5lPmxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTtwYWRkaW5nLXJpZ2h0OjVweDtwYWRkaW5nLWxlZnQ6NXB4Oyp6b29tOjF9ZGx7bWFyZ2luLWJvdHRvbToyMHB4fWR0LGRke2xpbmUtaGVpZ2h0OjIwcHh9ZHR7Zm9udC13ZWlnaHQ6Ym9sZH1kZHttYXJnaW4tbGVmdDoxMHB4fS5kbC1ob3Jpem9udGFseyp6b29tOjF9LmRsLWhvcml6b250YWw6YmVmb3JlLC5kbC1ob3Jpem9udGFsOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5kbC1ob3Jpem9udGFsOmFmdGVye2NsZWFyOmJvdGh9LmRsLWhvcml6b250YWwgZHR7ZmxvYXQ6bGVmdDt3aWR0aDoyMDBweDtvdmVyZmxvdzpoaWRkZW47Y2xlYXI6bGVmdDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5kbC1ob3Jpem9udGFsIGRke21hcmdpbi1sZWZ0OjIyMHB4fWhye21hcmdpbjoyMHB4IDA7Ym9yZGVyOjA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2VlZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZmZmfWFiYnJbdGl0bGVdLGFiYnJbZGF0YS1vcmlnaW5hbC10aXRsZV17Y3Vyc29yOmhlbHA7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICM5OTl9YWJici5pbml0aWFsaXNte2ZvbnQtc2l6ZTo5MCU7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfWJsb2NrcXVvdGV7cGFkZGluZzowIDAgMCAxNXB4O21hcmdpbjowIDAgMjBweDtib3JkZXItbGVmdDo1cHggc29saWQgI2VlZX1ibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowO2ZvbnQtc2l6ZToxNy41cHg7Zm9udC13ZWlnaHQ6MzAwO2xpbmUtaGVpZ2h0OjEuMjV9YmxvY2txdW90ZSBzbWFsbHtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6Izk5OX1ibG9ja3F1b3RlIHNtYWxsOmJlZm9yZXtjb250ZW50OidcMjAxNCBcMDBBMCd9YmxvY2txdW90ZS5wdWxsLXJpZ2h0e2Zsb2F0OnJpZ2h0O3BhZGRpbmctcmlnaHQ6MTVweDtwYWRkaW5nLWxlZnQ6MDtib3JkZXItcmlnaHQ6NXB4IHNvbGlkICNlZWU7Ym9yZGVyLWxlZnQ6MH1ibG9ja3F1b3RlLnB1bGwtcmlnaHQgcCxibG9ja3F1b3RlLnB1bGwtcmlnaHQgc21hbGx7dGV4dC1hbGlnbjpyaWdodH1ibG9ja3F1b3RlLnB1bGwtcmlnaHQgc21hbGw6YmVmb3Jle2NvbnRlbnQ6Jyd9YmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxsOmFmdGVye2NvbnRlbnQ6J1wwMEEwIFwyMDE0J31xOmJlZm9yZSxxOmFmdGVyLGJsb2NrcXVvdGU6YmVmb3JlLGJsb2NrcXVvdGU6YWZ0ZXJ7Y29udGVudDoiIn1hZGRyZXNze2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbToyMHB4O2ZvbnQtc3R5bGU6bm9ybWFsO2xpbmUtaGVpZ2h0OjIwcHh9Y29kZSxwcmV7cGFkZGluZzowIDNweCAycHg7Zm9udC1mYW1pbHk6TW9uYWNvLE1lbmxvLENvbnNvbGFzLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiMzMzM7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRpdXM6M3B4fWNvZGV7cGFkZGluZzoycHggNHB4O2NvbG9yOiNkMTQ7d2hpdGUtc3BhY2U6bm93cmFwO2JhY2tncm91bmQtY29sb3I6I2Y3ZjdmOTtib3JkZXI6MXB4IHNvbGlkICNlMWUxZTh9cHJle2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo5LjVweDttYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MjBweDt3b3JkLWJyZWFrOmJyZWFrLWFsbDt3b3JkLXdyYXA6YnJlYWstd29yZDt3aGl0ZS1zcGFjZTpwcmU7d2hpdGUtc3BhY2U6cHJlLXdyYXA7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4xNSk7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fXByZS5wcmV0dHlwcmludHttYXJnaW4tYm90dG9tOjIwcHh9cHJlIGNvZGV7cGFkZGluZzowO2NvbG9yOmluaGVyaXQ7d2hpdGUtc3BhY2U6cHJlO3doaXRlLXNwYWNlOnByZS13cmFwO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOjB9LnByZS1zY3JvbGxhYmxle21heC1oZWlnaHQ6MzQwcHg7b3ZlcmZsb3cteTpzY3JvbGx9Zm9ybXttYXJnaW46MCAwIDIwcHh9ZmllbGRzZXR7cGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowfWxlZ2VuZHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7cGFkZGluZzowO21hcmdpbi1ib3R0b206MjBweDtmb250LXNpemU6MjFweDtsaW5lLWhlaWdodDo0MHB4O2NvbG9yOiMzMzM7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U1ZTVlNX1sZWdlbmQgc21hbGx7Zm9udC1zaXplOjE1cHg7Y29sb3I6Izk5OX1sYWJlbCxpbnB1dCxidXR0b24sc2VsZWN0LHRleHRhcmVhe2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoyMHB4fWlucHV0LGJ1dHRvbixzZWxlY3QsdGV4dGFyZWF7Zm9udC1mYW1pbHk6IkhlbHZldGljYSBOZXVlIixIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZn1sYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NXB4fXNlbGVjdCx0ZXh0YXJlYSxpbnB1dFt0eXBlPSJ0ZXh0Il0saW5wdXRbdHlwZT0icGFzc3dvcmQiXSxpbnB1dFt0eXBlPSJkYXRldGltZSJdLGlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0saW5wdXRbdHlwZT0iZGF0ZSJdLGlucHV0W3R5cGU9Im1vbnRoIl0saW5wdXRbdHlwZT0idGltZSJdLGlucHV0W3R5cGU9IndlZWsiXSxpbnB1dFt0eXBlPSJudW1iZXIiXSxpbnB1dFt0eXBlPSJlbWFpbCJdLGlucHV0W3R5cGU9InVybCJdLGlucHV0W3R5cGU9InNlYXJjaCJdLGlucHV0W3R5cGU9InRlbCJdLGlucHV0W3R5cGU9ImNvbG9yIl0sLnVuZWRpdGFibGUtaW5wdXR7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjIwcHg7cGFkZGluZzo0cHggNnB4O21hcmdpbi1ib3R0b206MTBweDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM1NTU7dmVydGljYWwtYWxpZ246bWlkZGxlOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH1pbnB1dCx0ZXh0YXJlYSwudW5lZGl0YWJsZS1pbnB1dHt3aWR0aDoyMDZweH10ZXh0YXJlYXtoZWlnaHQ6YXV0b310ZXh0YXJlYSxpbnB1dFt0eXBlPSJ0ZXh0Il0saW5wdXRbdHlwZT0icGFzc3dvcmQiXSxpbnB1dFt0eXBlPSJkYXRldGltZSJdLGlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0saW5wdXRbdHlwZT0iZGF0ZSJdLGlucHV0W3R5cGU9Im1vbnRoIl0saW5wdXRbdHlwZT0idGltZSJdLGlucHV0W3R5cGU9IndlZWsiXSxpbnB1dFt0eXBlPSJudW1iZXIiXSxpbnB1dFt0eXBlPSJlbWFpbCJdLGlucHV0W3R5cGU9InVybCJdLGlucHV0W3R5cGU9InNlYXJjaCJdLGlucHV0W3R5cGU9InRlbCJdLGlucHV0W3R5cGU9ImNvbG9yIl0sLnVuZWRpdGFibGUtaW5wdXR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYzstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7LXdlYmtpdC10cmFuc2l0aW9uOmJvcmRlciBsaW5lYXIgLjJzLGJveC1zaGFkb3cgbGluZWFyIC4yczstbW96LXRyYW5zaXRpb246Ym9yZGVyIGxpbmVhciAuMnMsYm94LXNoYWRvdyBsaW5lYXIgLjJzOy1vLXRyYW5zaXRpb246Ym9yZGVyIGxpbmVhciAuMnMsYm94LXNoYWRvdyBsaW5lYXIgLjJzO3RyYW5zaXRpb246Ym9yZGVyIGxpbmVhciAuMnMsYm94LXNoYWRvdyBsaW5lYXIgLjJzfXRleHRhcmVhOmZvY3VzLGlucHV0W3R5cGU9InRleHQiXTpmb2N1cyxpbnB1dFt0eXBlPSJwYXNzd29yZCJdOmZvY3VzLGlucHV0W3R5cGU9ImRhdGV0aW1lIl06Zm9jdXMsaW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXTpmb2N1cyxpbnB1dFt0eXBlPSJkYXRlIl06Zm9jdXMsaW5wdXRbdHlwZT0ibW9udGgiXTpmb2N1cyxpbnB1dFt0eXBlPSJ0aW1lIl06Zm9jdXMsaW5wdXRbdHlwZT0id2VlayJdOmZvY3VzLGlucHV0W3R5cGU9Im51bWJlciJdOmZvY3VzLGlucHV0W3R5cGU9ImVtYWlsIl06Zm9jdXMsaW5wdXRbdHlwZT0idXJsIl06Zm9jdXMsaW5wdXRbdHlwZT0ic2VhcmNoIl06Zm9jdXMsaW5wdXRbdHlwZT0idGVsIl06Zm9jdXMsaW5wdXRbdHlwZT0iY29sb3IiXTpmb2N1cywudW5lZGl0YWJsZS1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6cmdiYSg4MiwxNjgsMjM2LDAuOCk7b3V0bGluZTowO291dGxpbmU6dGhpbiBkb3R0ZWQgXDk7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgOHB4IHJnYmEoODIsMTY4LDIzNiwwLjYpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDhweCByZ2JhKDgyLDE2OCwyMzYsMC42KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgOHB4IHJnYmEoODIsMTY4LDIzNiwwLjYpfWlucHV0W3R5cGU9InJhZGlvIl0saW5wdXRbdHlwZT0iY2hlY2tib3giXXttYXJnaW46NHB4IDAgMDttYXJnaW4tdG9wOjFweCBcOTsqbWFyZ2luLXRvcDowO2xpbmUtaGVpZ2h0Om5vcm1hbH1pbnB1dFt0eXBlPSJmaWxlIl0saW5wdXRbdHlwZT0iaW1hZ2UiXSxpbnB1dFt0eXBlPSJzdWJtaXQiXSxpbnB1dFt0eXBlPSJyZXNldCJdLGlucHV0W3R5cGU9ImJ1dHRvbiJdLGlucHV0W3R5cGU9InJhZGlvIl0saW5wdXRbdHlwZT0iY2hlY2tib3giXXt3aWR0aDphdXRvfXNlbGVjdCxpbnB1dFt0eXBlPSJmaWxlIl17aGVpZ2h0OjMwcHg7Km1hcmdpbi10b3A6NHB4O2xpbmUtaGVpZ2h0OjMwcHh9c2VsZWN0e3dpZHRoOjIyMHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2N9c2VsZWN0W211bHRpcGxlXSxzZWxlY3Rbc2l6ZV17aGVpZ2h0OmF1dG99c2VsZWN0OmZvY3VzLGlucHV0W3R5cGU9ImZpbGUiXTpmb2N1cyxpbnB1dFt0eXBlPSJyYWRpbyJdOmZvY3VzLGlucHV0W3R5cGU9ImNoZWNrYm94Il06Zm9jdXN7b3V0bGluZTp0aGluIGRvdHRlZCAjMzMzO291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0Oi0ycHh9LnVuZWRpdGFibGUtaW5wdXQsLnVuZWRpdGFibGUtdGV4dGFyZWF7Y29sb3I6Izk5OTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjojZmNmY2ZjO2JvcmRlci1jb2xvcjojY2NjOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjAyNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDI1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDI1KX0udW5lZGl0YWJsZS1pbnB1dHtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfS51bmVkaXRhYmxlLXRleHRhcmVhe3dpZHRoOmF1dG87aGVpZ2h0OmF1dG99aW5wdXQ6LW1vei1wbGFjZWhvbGRlcix0ZXh0YXJlYTotbW96LXBsYWNlaG9sZGVye2NvbG9yOiM5OTl9aW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyLHRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojOTk5fWlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyLHRleHRhcmVhOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiM5OTl9LnJhZGlvLC5jaGVja2JveHttaW4taGVpZ2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHh9LnJhZGlvIGlucHV0W3R5cGU9InJhZGlvIl0sLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il17ZmxvYXQ6bGVmdDttYXJnaW4tbGVmdDotMjBweH0uY29udHJvbHM+LnJhZGlvOmZpcnN0LWNoaWxkLC5jb250cm9scz4uY2hlY2tib3g6Zmlyc3QtY2hpbGR7cGFkZGluZy10b3A6NXB4fS5yYWRpby5pbmxpbmUsLmNoZWNrYm94LmlubGluZXtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nLXRvcDo1cHg7bWFyZ2luLWJvdHRvbTowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ucmFkaW8uaW5saW5lKy5yYWRpby5pbmxpbmUsLmNoZWNrYm94LmlubGluZSsuY2hlY2tib3guaW5saW5le21hcmdpbi1sZWZ0OjEwcHh9LmlucHV0LW1pbml7d2lkdGg6NjBweH0uaW5wdXQtc21hbGx7d2lkdGg6OTBweH0uaW5wdXQtbWVkaXVte3dpZHRoOjE1MHB4fS5pbnB1dC1sYXJnZXt3aWR0aDoyMTBweH0uaW5wdXQteGxhcmdle3dpZHRoOjI3MHB4fS5pbnB1dC14eGxhcmdle3dpZHRoOjUzMHB4fWlucHV0W2NsYXNzKj0ic3BhbiJdLHNlbGVjdFtjbGFzcyo9InNwYW4iXSx0ZXh0YXJlYVtjbGFzcyo9InNwYW4iXSwudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIGlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgc2VsZWN0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgdGV4dGFyZWFbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCAudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9InNwYW4iXXtmbG9hdDpub25lO21hcmdpbi1sZWZ0OjB9LmlucHV0LWFwcGVuZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwuaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5pbnB1dC1wcmVwZW5kIGlucHV0W2NsYXNzKj0ic3BhbiJdLC5pbnB1dC1wcmVwZW5kIC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgaW5wdXRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCBzZWxlY3RbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCB0ZXh0YXJlYVtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgLmlucHV0LXByZXBlbmQgW2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgLmlucHV0LWFwcGVuZCBbY2xhc3MqPSJzcGFuIl17ZGlzcGxheTppbmxpbmUtYmxvY2t9aW5wdXQsdGV4dGFyZWEsLnVuZWRpdGFibGUtaW5wdXR7bWFyZ2luLWxlZnQ6MH0uY29udHJvbHMtcm93IFtjbGFzcyo9InNwYW4iXStbY2xhc3MqPSJzcGFuIl17bWFyZ2luLWxlZnQ6MjBweH1pbnB1dC5zcGFuMTIsdGV4dGFyZWEuc3BhbjEyLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMnt3aWR0aDo5MjZweH1pbnB1dC5zcGFuMTEsdGV4dGFyZWEuc3BhbjExLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMXt3aWR0aDo4NDZweH1pbnB1dC5zcGFuMTAsdGV4dGFyZWEuc3BhbjEwLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMHt3aWR0aDo3NjZweH1pbnB1dC5zcGFuOSx0ZXh0YXJlYS5zcGFuOSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuOXt3aWR0aDo2ODZweH1pbnB1dC5zcGFuOCx0ZXh0YXJlYS5zcGFuOCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuOHt3aWR0aDo2MDZweH1pbnB1dC5zcGFuNyx0ZXh0YXJlYS5zcGFuNywudW5lZGl0YWJsZS1pbnB1dC5zcGFuN3t3aWR0aDo1MjZweH1pbnB1dC5zcGFuNix0ZXh0YXJlYS5zcGFuNiwudW5lZGl0YWJsZS1pbnB1dC5zcGFuNnt3aWR0aDo0NDZweH1pbnB1dC5zcGFuNSx0ZXh0YXJlYS5zcGFuNSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuNXt3aWR0aDozNjZweH1pbnB1dC5zcGFuNCx0ZXh0YXJlYS5zcGFuNCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuNHt3aWR0aDoyODZweH1pbnB1dC5zcGFuMyx0ZXh0YXJlYS5zcGFuMywudW5lZGl0YWJsZS1pbnB1dC5zcGFuM3t3aWR0aDoyMDZweH1pbnB1dC5zcGFuMix0ZXh0YXJlYS5zcGFuMiwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMnt3aWR0aDoxMjZweH1pbnB1dC5zcGFuMSx0ZXh0YXJlYS5zcGFuMSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMXt3aWR0aDo0NnB4fS5jb250cm9scy1yb3d7Knpvb206MX0uY29udHJvbHMtcm93OmJlZm9yZSwuY29udHJvbHMtcm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jb250cm9scy1yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH0uY29udHJvbHMtcm93IFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJde2Zsb2F0OmxlZnR9LmNvbnRyb2xzLXJvdyAuY2hlY2tib3hbY2xhc3MqPSJzcGFuIl0sLmNvbnRyb2xzLXJvdyAucmFkaW9bY2xhc3MqPSJzcGFuIl17cGFkZGluZy10b3A6NXB4fWlucHV0W2Rpc2FibGVkXSxzZWxlY3RbZGlzYWJsZWRdLHRleHRhcmVhW2Rpc2FibGVkXSxpbnB1dFtyZWFkb25seV0sc2VsZWN0W3JlYWRvbmx5XSx0ZXh0YXJlYVtyZWFkb25seV17Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6I2VlZX1pbnB1dFt0eXBlPSJyYWRpbyJdW2Rpc2FibGVkXSxpbnB1dFt0eXBlPSJjaGVja2JveCJdW2Rpc2FibGVkXSxpbnB1dFt0eXBlPSJyYWRpbyJdW3JlYWRvbmx5XSxpbnB1dFt0eXBlPSJjaGVja2JveCJdW3JlYWRvbmx5XXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5jb250cm9sLWdyb3VwLndhcm5pbmcgLmNvbnRyb2wtbGFiZWwsLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuaGVscC1ibG9jaywuY29udHJvbC1ncm91cC53YXJuaW5nIC5oZWxwLWlubGluZXtjb2xvcjojYzA5ODUzfS5jb250cm9sLWdyb3VwLndhcm5pbmcgLmNoZWNrYm94LC5jb250cm9sLWdyb3VwLndhcm5pbmcgLnJhZGlvLC5jb250cm9sLWdyb3VwLndhcm5pbmcgaW5wdXQsLmNvbnRyb2wtZ3JvdXAud2FybmluZyBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAud2FybmluZyB0ZXh0YXJlYXtjb2xvcjojYzA5ODUzfS5jb250cm9sLWdyb3VwLndhcm5pbmcgaW5wdXQsLmNvbnRyb2wtZ3JvdXAud2FybmluZyBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAud2FybmluZyB0ZXh0YXJlYXtib3JkZXItY29sb3I6I2MwOTg1Mzstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSl9LmNvbnRyb2wtZ3JvdXAud2FybmluZyBpbnB1dDpmb2N1cywuY29udHJvbC1ncm91cC53YXJuaW5nIHNlbGVjdDpmb2N1cywuY29udHJvbC1ncm91cC53YXJuaW5nIHRleHRhcmVhOmZvY3Vze2JvcmRlci1jb2xvcjojYTQ3ZTNjOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZGJjNTllOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZGJjNTllO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggI2RiYzU5ZX0uY29udHJvbC1ncm91cC53YXJuaW5nIC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuaW5wdXQtYXBwZW5kIC5hZGQtb257Y29sb3I6I2MwOTg1MztiYWNrZ3JvdW5kLWNvbG9yOiNmY2Y4ZTM7Ym9yZGVyLWNvbG9yOiNjMDk4NTN9LmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmNvbnRyb2wtbGFiZWwsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmhlbHAtYmxvY2ssLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmhlbHAtaW5saW5le2NvbG9yOiNiOTRhNDh9LmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmNoZWNrYm94LC5jb250cm9sLWdyb3VwLmVycm9yIC5yYWRpbywuY29udHJvbC1ncm91cC5lcnJvciBpbnB1dCwuY29udHJvbC1ncm91cC5lcnJvciBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgdGV4dGFyZWF7Y29sb3I6I2I5NGE0OH0uY29udHJvbC1ncm91cC5lcnJvciBpbnB1dCwuY29udHJvbC1ncm91cC5lcnJvciBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgdGV4dGFyZWF7Ym9yZGVyLWNvbG9yOiNiOTRhNDg7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpfS5jb250cm9sLWdyb3VwLmVycm9yIGlucHV0OmZvY3VzLC5jb250cm9sLWdyb3VwLmVycm9yIHNlbGVjdDpmb2N1cywuY29udHJvbC1ncm91cC5lcnJvciB0ZXh0YXJlYTpmb2N1c3tib3JkZXItY29sb3I6Izk1M2IzOTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggI2Q1OTM5MjstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggI2Q1OTM5Mjtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICNkNTkzOTJ9LmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmlucHV0LXByZXBlbmQgLmFkZC1vbiwuY29udHJvbC1ncm91cC5lcnJvciAuaW5wdXQtYXBwZW5kIC5hZGQtb257Y29sb3I6I2I5NGE0ODtiYWNrZ3JvdW5kLWNvbG9yOiNmMmRlZGU7Ym9yZGVyLWNvbG9yOiNiOTRhNDh9LmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuY29udHJvbC1sYWJlbCwuY29udHJvbC1ncm91cC5zdWNjZXNzIC5oZWxwLWJsb2NrLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmhlbHAtaW5saW5le2NvbG9yOiM0Njg4NDd9LmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuY2hlY2tib3gsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAucmFkaW8sLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBpbnB1dCwuY29udHJvbC1ncm91cC5zdWNjZXNzIHNlbGVjdCwuY29udHJvbC1ncm91cC5zdWNjZXNzIHRleHRhcmVhe2NvbG9yOiM0Njg4NDd9LmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBpbnB1dCwuY29udHJvbC1ncm91cC5zdWNjZXNzIHNlbGVjdCwuY29udHJvbC1ncm91cC5zdWNjZXNzIHRleHRhcmVhe2JvcmRlci1jb2xvcjojNDY4ODQ3Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KX0uY29udHJvbC1ncm91cC5zdWNjZXNzIGlucHV0OmZvY3VzLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3Mgc2VsZWN0OmZvY3VzLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMzNTY2MzU7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICM3YWJhN2I7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICM3YWJhN2I7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjN2FiYTdifS5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmlucHV0LXByZXBlbmQgLmFkZC1vbiwuY29udHJvbC1ncm91cC5zdWNjZXNzIC5pbnB1dC1hcHBlbmQgLmFkZC1vbntjb2xvcjojNDY4ODQ3O2JhY2tncm91bmQtY29sb3I6I2RmZjBkODtib3JkZXItY29sb3I6IzQ2ODg0N30uY29udHJvbC1ncm91cC5pbmZvIC5jb250cm9sLWxhYmVsLC5jb250cm9sLWdyb3VwLmluZm8gLmhlbHAtYmxvY2ssLmNvbnRyb2wtZ3JvdXAuaW5mbyAuaGVscC1pbmxpbmV7Y29sb3I6IzNhODdhZH0uY29udHJvbC1ncm91cC5pbmZvIC5jaGVja2JveCwuY29udHJvbC1ncm91cC5pbmZvIC5yYWRpbywuY29udHJvbC1ncm91cC5pbmZvIGlucHV0LC5jb250cm9sLWdyb3VwLmluZm8gc2VsZWN0LC5jb250cm9sLWdyb3VwLmluZm8gdGV4dGFyZWF7Y29sb3I6IzNhODdhZH0uY29udHJvbC1ncm91cC5pbmZvIGlucHV0LC5jb250cm9sLWdyb3VwLmluZm8gc2VsZWN0LC5jb250cm9sLWdyb3VwLmluZm8gdGV4dGFyZWF7Ym9yZGVyLWNvbG9yOiMzYTg3YWQ7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpfS5jb250cm9sLWdyb3VwLmluZm8gaW5wdXQ6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuaW5mbyBzZWxlY3Q6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuaW5mbyB0ZXh0YXJlYTpmb2N1c3tib3JkZXItY29sb3I6IzJkNjk4Nzstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggIzdhYjVkMzstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggIzdhYjVkMztib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICM3YWI1ZDN9LmNvbnRyb2wtZ3JvdXAuaW5mbyAuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLC5jb250cm9sLWdyb3VwLmluZm8gLmlucHV0LWFwcGVuZCAuYWRkLW9ue2NvbG9yOiMzYTg3YWQ7YmFja2dyb3VuZC1jb2xvcjojZDllZGY3O2JvcmRlci1jb2xvcjojM2E4N2FkfWlucHV0OmZvY3VzOmludmFsaWQsdGV4dGFyZWE6Zm9jdXM6aW52YWxpZCxzZWxlY3Q6Zm9jdXM6aW52YWxpZHtjb2xvcjojYjk0YTQ4O2JvcmRlci1jb2xvcjojZWU1ZjVifWlucHV0OmZvY3VzOmludmFsaWQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXM6aW52YWxpZDpmb2N1cyxzZWxlY3Q6Zm9jdXM6aW52YWxpZDpmb2N1c3tib3JkZXItY29sb3I6I2U5MzIyZDstd2Via2l0LWJveC1zaGFkb3c6MCAwIDZweCAjZjhiOWI3Oy1tb3otYm94LXNoYWRvdzowIDAgNnB4ICNmOGI5Yjc7Ym94LXNoYWRvdzowIDAgNnB4ICNmOGI5Yjd9LmZvcm0tYWN0aW9uc3twYWRkaW5nOjE5cHggMjBweCAyMHB4O21hcmdpbi10b3A6MjBweDttYXJnaW4tYm90dG9tOjIwcHg7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTU7Knpvb206MX0uZm9ybS1hY3Rpb25zOmJlZm9yZSwuZm9ybS1hY3Rpb25zOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5mb3JtLWFjdGlvbnM6YWZ0ZXJ7Y2xlYXI6Ym90aH0uaGVscC1ibG9jaywuaGVscC1pbmxpbmV7Y29sb3I6IzU5NTk1OX0uaGVscC1ibG9ja3tkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206MTBweH0uaGVscC1pbmxpbmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO3BhZGRpbmctbGVmdDo1cHg7dmVydGljYWwtYWxpZ246bWlkZGxlOyp6b29tOjF9LmlucHV0LWFwcGVuZCwuaW5wdXQtcHJlcGVuZHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tYm90dG9tOjEwcHg7Zm9udC1zaXplOjA7d2hpdGUtc3BhY2U6bm93cmFwO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaW5wdXQtYXBwZW5kIGlucHV0LC5pbnB1dC1wcmVwZW5kIGlucHV0LC5pbnB1dC1hcHBlbmQgc2VsZWN0LC5pbnB1dC1wcmVwZW5kIHNlbGVjdCwuaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0LC5pbnB1dC1wcmVwZW5kIC51bmVkaXRhYmxlLWlucHV0LC5pbnB1dC1hcHBlbmQgLmRyb3Bkb3duLW1lbnUsLmlucHV0LXByZXBlbmQgLmRyb3Bkb3duLW1lbnUsLmlucHV0LWFwcGVuZCAucG9wb3ZlciwuaW5wdXQtcHJlcGVuZCAucG9wb3Zlcntmb250LXNpemU6MTRweH0uaW5wdXQtYXBwZW5kIGlucHV0LC5pbnB1dC1wcmVwZW5kIGlucHV0LC5pbnB1dC1hcHBlbmQgc2VsZWN0LC5pbnB1dC1wcmVwZW5kIHNlbGVjdCwuaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0LC5pbnB1dC1wcmVwZW5kIC51bmVkaXRhYmxlLWlucHV0e3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi1ib3R0b206MDsqbWFyZ2luLWxlZnQ6MDt2ZXJ0aWNhbC1hbGlnbjp0b3A7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS5pbnB1dC1hcHBlbmQgaW5wdXQ6Zm9jdXMsLmlucHV0LXByZXBlbmQgaW5wdXQ6Zm9jdXMsLmlucHV0LWFwcGVuZCBzZWxlY3Q6Zm9jdXMsLmlucHV0LXByZXBlbmQgc2VsZWN0OmZvY3VzLC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQ6Zm9jdXMsLmlucHV0LXByZXBlbmQgLnVuZWRpdGFibGUtaW5wdXQ6Zm9jdXN7ei1pbmRleDoyfS5pbnB1dC1hcHBlbmQgLmFkZC1vbiwuaW5wdXQtcHJlcGVuZCAuYWRkLW9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOmF1dG87aGVpZ2h0OjIwcHg7bWluLXdpZHRoOjE2cHg7cGFkZGluZzo0cHggNXB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoyMHB4O3RleHQtYWxpZ246Y2VudGVyO3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7Ym9yZGVyOjFweCBzb2xpZCAjY2NjfS5pbnB1dC1hcHBlbmQgLmFkZC1vbiwuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLC5pbnB1dC1hcHBlbmQgLmJ0biwuaW5wdXQtcHJlcGVuZCAuYnRuLC5pbnB1dC1hcHBlbmQgLmJ0bi1ncm91cD4uZHJvcGRvd24tdG9nZ2xlLC5pbnB1dC1wcmVwZW5kIC5idG4tZ3JvdXA+LmRyb3Bkb3duLXRvZ2dsZXt2ZXJ0aWNhbC1hbGlnbjp0b3A7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5pbnB1dC1hcHBlbmQgLmFjdGl2ZSwuaW5wdXQtcHJlcGVuZCAuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2E5ZGJhOTtib3JkZXItY29sb3I6IzQ2YTU0Nn0uaW5wdXQtcHJlcGVuZCAuYWRkLW9uLC5pbnB1dC1wcmVwZW5kIC5idG57bWFyZ2luLXJpZ2h0Oi0xcHh9LmlucHV0LXByZXBlbmQgLmFkZC1vbjpmaXJzdC1jaGlsZCwuaW5wdXQtcHJlcGVuZCAuYnRuOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7Ym9yZGVyLXJhZGl1czo0cHggMCAwIDRweH0uaW5wdXQtYXBwZW5kIGlucHV0LC5pbnB1dC1hcHBlbmQgc2VsZWN0LC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDtib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4fS5pbnB1dC1hcHBlbmQgaW5wdXQrLmJ0bi1ncm91cCAuYnRuOmxhc3QtY2hpbGQsLmlucHV0LWFwcGVuZCBzZWxlY3QrLmJ0bi1ncm91cCAuYnRuOmxhc3QtY2hpbGQsLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dCsuYnRuLWdyb3VwIC5idG46bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwO2JvcmRlci1yYWRpdXM6MCA0cHggNHB4IDB9LmlucHV0LWFwcGVuZCAuYWRkLW9uLC5pbnB1dC1hcHBlbmQgLmJ0biwuaW5wdXQtYXBwZW5kIC5idG4tZ3JvdXB7bWFyZ2luLWxlZnQ6LTFweH0uaW5wdXQtYXBwZW5kIC5hZGQtb246bGFzdC1jaGlsZCwuaW5wdXQtYXBwZW5kIC5idG46bGFzdC1jaGlsZCwuaW5wdXQtYXBwZW5kIC5idG4tZ3JvdXA6bGFzdC1jaGlsZD4uZHJvcGRvd24tdG9nZ2xley13ZWJraXQtYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0uaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIHNlbGVjdCwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCBpbnB1dCsuYnRuLWdyb3VwIC5idG4sLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIHNlbGVjdCsuYnRuLWdyb3VwIC5idG4sLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0Ky5idG4tZ3JvdXAgLmJ0bnstd2Via2l0LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwO2JvcmRlci1yYWRpdXM6MCA0cHggNHB4IDB9LmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC5hZGQtb246Zmlyc3QtY2hpbGQsLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC5idG46Zmlyc3QtY2hpbGR7bWFyZ2luLXJpZ2h0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDtib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4fS5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAuYWRkLW9uOmxhc3QtY2hpbGQsLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC5idG46bGFzdC1jaGlsZHttYXJnaW4tbGVmdDotMXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0uaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmJ0bi1ncm91cDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowfWlucHV0LnNlYXJjaC1xdWVyeXtwYWRkaW5nLXJpZ2h0OjE0cHg7cGFkZGluZy1yaWdodDo0cHggXDk7cGFkZGluZy1sZWZ0OjE0cHg7cGFkZGluZy1sZWZ0OjRweCBcOTttYXJnaW4tYm90dG9tOjA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjE1cHg7LW1vei1ib3JkZXItcmFkaXVzOjE1cHg7Ym9yZGVyLXJhZGl1czoxNXB4fS5mb3JtLXNlYXJjaCAuaW5wdXQtYXBwZW5kIC5zZWFyY2gtcXVlcnksLmZvcm0tc2VhcmNoIC5pbnB1dC1wcmVwZW5kIC5zZWFyY2gtcXVlcnl7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5mb3JtLXNlYXJjaCAuaW5wdXQtYXBwZW5kIC5zZWFyY2gtcXVlcnl7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjE0cHggMCAwIDE0cHg7LW1vei1ib3JkZXItcmFkaXVzOjE0cHggMCAwIDE0cHg7Ym9yZGVyLXJhZGl1czoxNHB4IDAgMCAxNHB4fS5mb3JtLXNlYXJjaCAuaW5wdXQtYXBwZW5kIC5idG57LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDA7Ym9yZGVyLXJhZGl1czowIDE0cHggMTRweCAwfS5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCAuc2VhcmNoLXF1ZXJ5ey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDE0cHggMTRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDE0cHggMTRweCAwO2JvcmRlci1yYWRpdXM6MCAxNHB4IDE0cHggMH0uZm9ybS1zZWFyY2ggLmlucHV0LXByZXBlbmQgLmJ0bnstd2Via2l0LWJvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweDstbW96LWJvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweDtib3JkZXItcmFkaXVzOjE0cHggMCAwIDE0cHh9LmZvcm0tc2VhcmNoIGlucHV0LC5mb3JtLWlubGluZSBpbnB1dCwuZm9ybS1ob3Jpem9udGFsIGlucHV0LC5mb3JtLXNlYXJjaCB0ZXh0YXJlYSwuZm9ybS1pbmxpbmUgdGV4dGFyZWEsLmZvcm0taG9yaXpvbnRhbCB0ZXh0YXJlYSwuZm9ybS1zZWFyY2ggc2VsZWN0LC5mb3JtLWlubGluZSBzZWxlY3QsLmZvcm0taG9yaXpvbnRhbCBzZWxlY3QsLmZvcm0tc2VhcmNoIC5oZWxwLWlubGluZSwuZm9ybS1pbmxpbmUgLmhlbHAtaW5saW5lLC5mb3JtLWhvcml6b250YWwgLmhlbHAtaW5saW5lLC5mb3JtLXNlYXJjaCAudW5lZGl0YWJsZS1pbnB1dCwuZm9ybS1pbmxpbmUgLnVuZWRpdGFibGUtaW5wdXQsLmZvcm0taG9yaXpvbnRhbCAudW5lZGl0YWJsZS1pbnB1dCwuZm9ybS1zZWFyY2ggLmlucHV0LXByZXBlbmQsLmZvcm0taW5saW5lIC5pbnB1dC1wcmVwZW5kLC5mb3JtLWhvcml6b250YWwgLmlucHV0LXByZXBlbmQsLmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQsLmZvcm0taW5saW5lIC5pbnB1dC1hcHBlbmQsLmZvcm0taG9yaXpvbnRhbCAuaW5wdXQtYXBwZW5ke2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTttYXJnaW4tYm90dG9tOjA7dmVydGljYWwtYWxpZ246bWlkZGxlOyp6b29tOjF9LmZvcm0tc2VhcmNoIC5oaWRlLC5mb3JtLWlubGluZSAuaGlkZSwuZm9ybS1ob3Jpem9udGFsIC5oaWRle2Rpc3BsYXk6bm9uZX0uZm9ybS1zZWFyY2ggbGFiZWwsLmZvcm0taW5saW5lIGxhYmVsLC5mb3JtLXNlYXJjaCAuYnRuLWdyb3VwLC5mb3JtLWlubGluZSAuYnRuLWdyb3Vwe2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5mb3JtLXNlYXJjaCAuaW5wdXQtYXBwZW5kLC5mb3JtLWlubGluZSAuaW5wdXQtYXBwZW5kLC5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCwuZm9ybS1pbmxpbmUgLmlucHV0LXByZXBlbmR7bWFyZ2luLWJvdHRvbTowfS5mb3JtLXNlYXJjaCAucmFkaW8sLmZvcm0tc2VhcmNoIC5jaGVja2JveCwuZm9ybS1pbmxpbmUgLnJhZGlvLC5mb3JtLWlubGluZSAuY2hlY2tib3h7cGFkZGluZy1sZWZ0OjA7bWFyZ2luLWJvdHRvbTowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZm9ybS1zZWFyY2ggLnJhZGlvIGlucHV0W3R5cGU9InJhZGlvIl0sLmZvcm0tc2VhcmNoIC5jaGVja2JveCBpbnB1dFt0eXBlPSJjaGVja2JveCJdLC5mb3JtLWlubGluZSAucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwuZm9ybS1pbmxpbmUgLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il17ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6M3B4O21hcmdpbi1sZWZ0OjB9LmNvbnRyb2wtZ3JvdXB7bWFyZ2luLWJvdHRvbToxMHB4fWxlZ2VuZCsuY29udHJvbC1ncm91cHttYXJnaW4tdG9wOjIwcHg7LXdlYmtpdC1tYXJnaW4tdG9wLWNvbGxhcHNlOnNlcGFyYXRlfS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtZ3JvdXB7bWFyZ2luLWJvdHRvbToyMHB4Oyp6b29tOjF9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1ncm91cDpiZWZvcmUsLmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1ncm91cDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWdyb3VwOmFmdGVye2NsZWFyOmJvdGh9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1sYWJlbHtmbG9hdDpsZWZ0O3dpZHRoOjE2MHB4O3BhZGRpbmctdG9wOjVweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2xzeypkaXNwbGF5OmlubGluZS1ibG9jazsqcGFkZGluZy1sZWZ0OjIwcHg7bWFyZ2luLWxlZnQ6MTgwcHg7Km1hcmdpbi1sZWZ0OjB9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbHM6Zmlyc3QtY2hpbGR7KnBhZGRpbmctbGVmdDoxODBweH0uZm9ybS1ob3Jpem9udGFsIC5oZWxwLWJsb2Nre21hcmdpbi1ib3R0b206MH0uZm9ybS1ob3Jpem9udGFsIGlucHV0Ky5oZWxwLWJsb2NrLC5mb3JtLWhvcml6b250YWwgc2VsZWN0Ky5oZWxwLWJsb2NrLC5mb3JtLWhvcml6b250YWwgdGV4dGFyZWErLmhlbHAtYmxvY2ssLmZvcm0taG9yaXpvbnRhbCAudW5lZGl0YWJsZS1pbnB1dCsuaGVscC1ibG9jaywuZm9ybS1ob3Jpem9udGFsIC5pbnB1dC1wcmVwZW5kKy5oZWxwLWJsb2NrLC5mb3JtLWhvcml6b250YWwgLmlucHV0LWFwcGVuZCsuaGVscC1ibG9ja3ttYXJnaW4tdG9wOjEwcHh9LmZvcm0taG9yaXpvbnRhbCAuZm9ybS1hY3Rpb25ze3BhZGRpbmctbGVmdDoxODBweH10YWJsZXttYXgtd2lkdGg6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfS50YWJsZXt3aWR0aDoxMDAlO21hcmdpbi1ib3R0b206MjBweH0udGFibGUgdGgsLnRhYmxlIHRke3BhZGRpbmc6OHB4O2xpbmUtaGVpZ2h0OjIwcHg7dGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2FsLWFsaWduOnRvcDtib3JkZXItdG9wOjFweCBzb2xpZCAjZGRkfS50YWJsZSB0aHtmb250LXdlaWdodDpib2xkfS50YWJsZSB0aGVhZCB0aHt2ZXJ0aWNhbC1hbGlnbjpib3R0b219LnRhYmxlIGNhcHRpb24rdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlIGNhcHRpb24rdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGQsLnRhYmxlIGNvbGdyb3VwK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZSBjb2xncm91cCt0aGVhZCB0cjpmaXJzdC1jaGlsZCB0ZCwudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6MH0udGFibGUgdGJvZHkrdGJvZHl7Ym9yZGVyLXRvcDoycHggc29saWQgI2RkZH0udGFibGUgLnRhYmxle2JhY2tncm91bmQtY29sb3I6I2ZmZn0udGFibGUtY29uZGVuc2VkIHRoLC50YWJsZS1jb25kZW5zZWQgdGR7cGFkZGluZzo0cHggNXB4fS50YWJsZS1ib3JkZXJlZHtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlOypib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLWxlZnQ6MDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LnRhYmxlLWJvcmRlcmVkIHRoLC50YWJsZS1ib3JkZXJlZCB0ZHtib3JkZXItbGVmdDoxcHggc29saWQgI2RkZH0udGFibGUtYm9yZGVyZWQgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUtYm9yZGVyZWQgY2FwdGlvbit0Ym9keSB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUtYm9yZGVyZWQgY2FwdGlvbit0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCBjb2xncm91cCt0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZCwudGFibGUtYm9yZGVyZWQgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0ZHtib3JkZXItdG9wOjB9LnRhYmxlLWJvcmRlcmVkIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkPnRoOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZD50ZDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQ+dGg6Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo0cHh9LnRhYmxlLWJvcmRlcmVkIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkPnRoOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkPnRkOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkPnRoOmxhc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDo0cHh9LnRhYmxlLWJvcmRlcmVkIHRoZWFkOmxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZD50aDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRkOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGg6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRmb290Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZD50ZDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGZvb3Q6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRoOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NHB4fS50YWJsZS1ib3JkZXJlZCB0aGVhZDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGg6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRkOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZD50aDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Zm9vdDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGQ6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGZvb3Q6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRoOmxhc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo0cHh9LnRhYmxlLWJvcmRlcmVkIHRmb290K3Rib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZHstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6MH0udGFibGUtYm9yZGVyZWQgdGZvb3QrdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjB9LnRhYmxlLWJvcmRlcmVkIGNhcHRpb24rdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIGNhcHRpb24rdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCBjb2xncm91cCt0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZHstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjRweH0udGFibGUtYm9yZGVyZWQgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDo0cHh9LnRhYmxlLXN0cmlwZWQgdGJvZHk+dHI6bnRoLWNoaWxkKG9kZCk+dGQsLnRhYmxlLXN0cmlwZWQgdGJvZHk+dHI6bnRoLWNoaWxkKG9kZCk+dGh7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5fS50YWJsZS1ob3ZlciB0Ym9keSB0cjpob3Zlcj50ZCwudGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXI+dGh7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1fXRhYmxlIHRkW2NsYXNzKj0ic3BhbiJdLHRhYmxlIHRoW2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgdGFibGUgdGRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCB0YWJsZSB0aFtjbGFzcyo9InNwYW4iXXtkaXNwbGF5OnRhYmxlLWNlbGw7ZmxvYXQ6bm9uZTttYXJnaW4tbGVmdDowfS50YWJsZSB0ZC5zcGFuMSwudGFibGUgdGguc3BhbjF7ZmxvYXQ6bm9uZTt3aWR0aDo0NHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW4yLC50YWJsZSB0aC5zcGFuMntmbG9hdDpub25lO3dpZHRoOjEyNHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW4zLC50YWJsZSB0aC5zcGFuM3tmbG9hdDpub25lO3dpZHRoOjIwNHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW40LC50YWJsZSB0aC5zcGFuNHtmbG9hdDpub25lO3dpZHRoOjI4NHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW41LC50YWJsZSB0aC5zcGFuNXtmbG9hdDpub25lO3dpZHRoOjM2NHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW42LC50YWJsZSB0aC5zcGFuNntmbG9hdDpub25lO3dpZHRoOjQ0NHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW43LC50YWJsZSB0aC5zcGFuN3tmbG9hdDpub25lO3dpZHRoOjUyNHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW44LC50YWJsZSB0aC5zcGFuOHtmbG9hdDpub25lO3dpZHRoOjYwNHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW45LC50YWJsZSB0aC5zcGFuOXtmbG9hdDpub25lO3dpZHRoOjY4NHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW4xMCwudGFibGUgdGguc3BhbjEwe2Zsb2F0Om5vbmU7d2lkdGg6NzY0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjExLC50YWJsZSB0aC5zcGFuMTF7ZmxvYXQ6bm9uZTt3aWR0aDo4NDRweDttYXJnaW4tbGVmdDowfS50YWJsZSB0ZC5zcGFuMTIsLnRhYmxlIHRoLnNwYW4xMntmbG9hdDpub25lO3dpZHRoOjkyNHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRib2R5IHRyLnN1Y2Nlc3M+dGR7YmFja2dyb3VuZC1jb2xvcjojZGZmMGQ4fS50YWJsZSB0Ym9keSB0ci5lcnJvcj50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNmMmRlZGV9LnRhYmxlIHRib2R5IHRyLndhcm5pbmc+dGR7YmFja2dyb3VuZC1jb2xvcjojZmNmOGUzfS50YWJsZSB0Ym9keSB0ci5pbmZvPnRke2JhY2tncm91bmQtY29sb3I6I2Q5ZWRmN30udGFibGUtaG92ZXIgdGJvZHkgdHIuc3VjY2Vzczpob3Zlcj50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNkMGU5YzZ9LnRhYmxlLWhvdmVyIHRib2R5IHRyLmVycm9yOmhvdmVyPnRke2JhY2tncm91bmQtY29sb3I6I2ViY2NjY30udGFibGUtaG92ZXIgdGJvZHkgdHIud2FybmluZzpob3Zlcj50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNmYWYyY2N9LnRhYmxlLWhvdmVyIHRib2R5IHRyLmluZm86aG92ZXI+dGR7YmFja2dyb3VuZC1jb2xvcjojYzRlM2YzfVtjbGFzc149Imljb24tIl0sW2NsYXNzKj0iIGljb24tIl17ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTRweDtoZWlnaHQ6MTRweDttYXJnaW4tdG9wOjFweDsqbWFyZ2luLXJpZ2h0Oi4zZW07bGluZS1oZWlnaHQ6MTRweDt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcDtiYWNrZ3JvdW5kLWltYWdlOnVybCgiLi4vaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLnBuZyIpO2JhY2tncm91bmQtcG9zaXRpb246MTRweCAxNHB4O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0uaWNvbi13aGl0ZSwubmF2LXBpbGxzPi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5uYXYtcGlsbHM+LmFjdGl2ZT5hPltjbGFzcyo9IiBpY29uLSJdLC5uYXYtbGlzdD4uYWN0aXZlPmE+W2NsYXNzXj0iaWNvbi0iXSwubmF2LWxpc3Q+LmFjdGl2ZT5hPltjbGFzcyo9IiBpY29uLSJdLC5uYXZiYXItaW52ZXJzZSAubmF2Pi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5uYXZiYXItaW52ZXJzZSAubmF2Pi5hY3RpdmU+YT5bY2xhc3MqPSIgaWNvbi0iXSwuZHJvcGRvd24tbWVudT5saT5hOmhvdmVyPltjbGFzc149Imljb24tIl0sLmRyb3Bkb3duLW1lbnU+bGk+YTpmb2N1cz5bY2xhc3NePSJpY29uLSJdLC5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXI+W2NsYXNzKj0iIGljb24tIl0sLmRyb3Bkb3duLW1lbnU+bGk+YTpmb2N1cz5bY2xhc3MqPSIgaWNvbi0iXSwuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE+W2NsYXNzXj0iaWNvbi0iXSwuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXI+YT5bY2xhc3NePSJpY29uLSJdLC5kcm9wZG93bi1zdWJtZW51OmZvY3VzPmE+W2NsYXNzXj0iaWNvbi0iXSwuZHJvcGRvd24tc3VibWVudTpob3Zlcj5hPltjbGFzcyo9IiBpY29uLSJdLC5kcm9wZG93bi1zdWJtZW51OmZvY3VzPmE+W2NsYXNzKj0iIGljb24tIl17YmFja2dyb3VuZC1pbWFnZTp1cmwoIi4uL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy13aGl0ZS5wbmciKX0uaWNvbi1nbGFzc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH0uaWNvbi1tdXNpY3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IDB9Lmljb24tc2VhcmNoe2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggMH0uaWNvbi1lbnZlbG9wZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IDB9Lmljb24taGVhcnR7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAwfS5pY29uLXN0YXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggMH0uaWNvbi1zdGFyLWVtcHR5e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IDB9Lmljb24tdXNlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjhweCAwfS5pY29uLWZpbG17YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggMH0uaWNvbi10aC1sYXJnZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMTZweCAwfS5pY29uLXRoe2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IDB9Lmljb24tdGgtbGlzdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAwfS5pY29uLW9re2JhY2tncm91bmQtcG9zaXRpb246LTI4OHB4IDB9Lmljb24tcmVtb3Zle2JhY2tncm91bmQtcG9zaXRpb246LTMxMnB4IDB9Lmljb24tem9vbS1pbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAwfS5pY29uLXpvb20tb3V0e2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IDB9Lmljb24tb2Zme2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IDB9Lmljb24tc2lnbmFse2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IDB9Lmljb24tY29ne2JhY2tncm91bmQtcG9zaXRpb246LTQzMnB4IDB9Lmljb24tdHJhc2h7YmFja2dyb3VuZC1wb3NpdGlvbjotNDU2cHggMH0uaWNvbi1ob21le2JhY2tncm91bmQtcG9zaXRpb246MCAtMjRweH0uaWNvbi1maWxle2JhY2tncm91bmQtcG9zaXRpb246LTI0cHggLTI0cHh9Lmljb24tdGltZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0yNHB4fS5pY29uLXJvYWR7YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAtMjRweH0uaWNvbi1kb3dubG9hZC1hbHR7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMjRweH0uaWNvbi1kb3dubG9hZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtMjRweH0uaWNvbi11cGxvYWR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTI0cHh9Lmljb24taW5ib3h7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY4cHggLTI0cHh9Lmljb24tcGxheS1jaXJjbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTI0cHh9Lmljb24tcmVwZWF0e2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IC0yNHB4fS5pY29uLXJlZnJlc2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTI0cHh9Lmljb24tbGlzdC1hbHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0cHggLTI0cHh9Lmljb24tbG9ja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODdweCAtMjRweH0uaWNvbi1mbGFne2JhY2tncm91bmQtcG9zaXRpb246LTMxMnB4IC0yNHB4fS5pY29uLWhlYWRwaG9uZXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggLTI0cHh9Lmljb24tdm9sdW1lLW9mZntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNjBweCAtMjRweH0uaWNvbi12b2x1bWUtZG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRweCAtMjRweH0uaWNvbi12b2x1bWUtdXB7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggLTI0cHh9Lmljb24tcXJjb2Rle2JhY2tncm91bmQtcG9zaXRpb246LTQzMnB4IC0yNHB4fS5pY29uLWJhcmNvZGV7YmFja2dyb3VuZC1wb3NpdGlvbjotNDU2cHggLTI0cHh9Lmljb24tdGFne2JhY2tncm91bmQtcG9zaXRpb246MCAtNDhweH0uaWNvbi10YWdze2JhY2tncm91bmQtcG9zaXRpb246LTI1cHggLTQ4cHh9Lmljb24tYm9va3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC00OHB4fS5pY29uLWJvb2ttYXJre2JhY2tncm91bmQtcG9zaXRpb246LTcycHggLTQ4cHh9Lmljb24tcHJpbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtNDhweH0uaWNvbi1jYW1lcmF7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTQ4cHh9Lmljb24tZm9udHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtNDhweH0uaWNvbi1ib2xke2JhY2tncm91bmQtcG9zaXRpb246LTE2N3B4IC00OHB4fS5pY29uLWl0YWxpY3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtNDhweH0uaWNvbi10ZXh0LWhlaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMTZweCAtNDhweH0uaWNvbi10ZXh0LXdpZHRoe2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC00OHB4fS5pY29uLWFsaWduLWxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0cHggLTQ4cHh9Lmljb24tYWxpZ24tY2VudGVye2JhY2tncm91bmQtcG9zaXRpb246LTI4OHB4IC00OHB4fS5pY29uLWFsaWduLXJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTMxMnB4IC00OHB4fS5pY29uLWFsaWduLWp1c3RpZnl7YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggLTQ4cHh9Lmljb24tbGlzdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNjBweCAtNDhweH0uaWNvbi1pbmRlbnQtbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRweCAtNDhweH0uaWNvbi1pbmRlbnQtcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggLTQ4cHh9Lmljb24tZmFjZXRpbWUtdmlkZW97YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggLTQ4cHh9Lmljb24tcGljdHVyZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtNDhweH0uaWNvbi1wZW5jaWx7YmFja2dyb3VuZC1wb3NpdGlvbjowIC03MnB4fS5pY29uLW1hcC1tYXJrZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMjRweCAtNzJweH0uaWNvbi1hZGp1c3R7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtNzJweH0uaWNvbi10aW50e2JhY2tncm91bmQtcG9zaXRpb246LTcycHggLTcycHh9Lmljb24tZWRpdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC03MnB4fS5pY29uLXNoYXJle2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC03MnB4fS5pY29uLWNoZWNre2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC03MnB4fS5pY29uLW1vdmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY4cHggLTcycHh9Lmljb24tc3RlcC1iYWNrd2FyZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtNzJweH0uaWNvbi1mYXN0LWJhY2t3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IC03MnB4fS5pY29uLWJhY2t3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC03MnB4fS5pY29uLXBsYXl7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0cHggLTcycHh9Lmljb24tcGF1c2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg4cHggLTcycHh9Lmljb24tc3RvcHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMTJweCAtNzJweH0uaWNvbi1mb3J3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IC03MnB4fS5pY29uLWZhc3QtZm9yd2FyZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNjBweCAtNzJweH0uaWNvbi1zdGVwLWZvcndhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzg0cHggLTcycHh9Lmljb24tZWplY3R7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggLTcycHh9Lmljb24tY2hldnJvbi1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTQzMnB4IC03MnB4fS5pY29uLWNoZXZyb24tcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotNDU2cHggLTcycHh9Lmljb24tcGx1cy1zaWdue2JhY2tncm91bmQtcG9zaXRpb246MCAtOTZweH0uaWNvbi1taW51cy1zaWdue2JhY2tncm91bmQtcG9zaXRpb246LTI0cHggLTk2cHh9Lmljb24tcmVtb3ZlLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtOTZweH0uaWNvbi1vay1zaWdue2JhY2tncm91bmQtcG9zaXRpb246LTcycHggLTk2cHh9Lmljb24tcXVlc3Rpb24tc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC05NnB4fS5pY29uLWluZm8tc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtOTZweH0uaWNvbi1zY3JlZW5zaG90e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC05NnB4fS5pY29uLXJlbW92ZS1jaXJjbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY4cHggLTk2cHh9Lmljb24tb2stY2lyY2xle2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC05NnB4fS5pY29uLWJhbi1jaXJjbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTk2cHh9Lmljb24tYXJyb3ctbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtOTZweH0uaWNvbi1hcnJvdy1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtOTZweH0uaWNvbi1hcnJvdy11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODlweCAtOTZweH0uaWNvbi1hcnJvdy1kb3due2JhY2tncm91bmQtcG9zaXRpb246LTMxMnB4IC05NnB4fS5pY29uLXNoYXJlLWFsdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAtOTZweH0uaWNvbi1yZXNpemUtZnVsbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNjBweCAtOTZweH0uaWNvbi1yZXNpemUtc21hbGx7YmFja2dyb3VuZC1wb3NpdGlvbjotMzg0cHggLTk2cHh9Lmljb24tcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAtOTZweH0uaWNvbi1taW51c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzNweCAtOTZweH0uaWNvbi1hc3Rlcmlza3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtOTZweH0uaWNvbi1leGNsYW1hdGlvbi1zaWdue2JhY2tncm91bmQtcG9zaXRpb246MCAtMTIwcHh9Lmljb24tZ2lmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IC0xMjBweH0uaWNvbi1sZWFme2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTEyMHB4fS5pY29uLWZpcmV7YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAtMTIwcHh9Lmljb24tZXllLW9wZW57YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTIwcHh9Lmljb24tZXllLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC0xMjBweH0uaWNvbi13YXJuaW5nLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTEyMHB4fS5pY29uLXBsYW5le2JhY2tncm91bmQtcG9zaXRpb246LTE2OHB4IC0xMjBweH0uaWNvbi1jYWxlbmRhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMTIwcHh9Lmljb24tcmFuZG9te3dpZHRoOjE2cHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTEyMHB4fS5pY29uLWNvbW1lbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTEyMHB4fS5pY29uLW1hZ25ldHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtMTIwcHh9Lmljb24tY2hldnJvbi11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODhweCAtMTIwcHh9Lmljb24tY2hldnJvbi1kb3due2JhY2tncm91bmQtcG9zaXRpb246LTMxM3B4IC0xMTlweH0uaWNvbi1yZXR3ZWV0e2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IC0xMjBweH0uaWNvbi1zaG9wcGluZy1jYXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC0xMjBweH0uaWNvbi1mb2xkZXItY2xvc2V7d2lkdGg6MTZweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRweCAtMTIwcHh9Lmljb24tZm9sZGVyLW9wZW57d2lkdGg6MTZweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAtMTIwcHh9Lmljb24tcmVzaXplLXZlcnRpY2Fse2JhY2tncm91bmQtcG9zaXRpb246LTQzMnB4IC0xMTlweH0uaWNvbi1yZXNpemUtaG9yaXpvbnRhbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtMTE4cHh9Lmljb24taGRke2JhY2tncm91bmQtcG9zaXRpb246MCAtMTQ0cHh9Lmljb24tYnVsbGhvcm57YmFja2dyb3VuZC1wb3NpdGlvbjotMjRweCAtMTQ0cHh9Lmljb24tYmVsbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xNDRweH0uaWNvbi1jZXJ0aWZpY2F0ZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IC0xNDRweH0uaWNvbi10aHVtYnMtdXB7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTQ0cHh9Lmljb24tdGh1bWJzLWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTE0NHB4fS5pY29uLWhhbmQtcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTE0NHB4fS5pY29uLWhhbmQtbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjhweCAtMTQ0cHh9Lmljb24taGFuZC11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMTQ0cHh9Lmljb24taGFuZC1kb3due2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IC0xNDRweH0uaWNvbi1jaXJjbGUtYXJyb3ctcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTE0NHB4fS5pY29uLWNpcmNsZS1hcnJvdy1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IC0xNDRweH0uaWNvbi1jaXJjbGUtYXJyb3ctdXB7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg4cHggLTE0NHB4fS5pY29uLWNpcmNsZS1hcnJvdy1kb3due2JhY2tncm91bmQtcG9zaXRpb246LTMxMnB4IC0xNDRweH0uaWNvbi1nbG9iZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAtMTQ0cHh9Lmljb24td3JlbmNoe2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC0xNDRweH0uaWNvbi10YXNrc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRweCAtMTQ0cHh9Lmljb24tZmlsdGVye2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IC0xNDRweH0uaWNvbi1icmllZmNhc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggLTE0NHB4fS5pY29uLWZ1bGxzY3JlZW57YmFja2dyb3VuZC1wb3NpdGlvbjotNDU2cHggLTE0NHB4fS5kcm9wdXAsLmRyb3Bkb3due3Bvc2l0aW9uOnJlbGF0aXZlfS5kcm9wZG93bi10b2dnbGV7Km1hcmdpbi1ib3R0b206LTNweH0uZHJvcGRvd24tdG9nZ2xlOmFjdGl2ZSwub3BlbiAuZHJvcGRvd24tdG9nZ2xle291dGxpbmU6MH0uY2FyZXR7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MDtoZWlnaHQ6MDt2ZXJ0aWNhbC1hbGlnbjp0b3A7Ym9yZGVyLXRvcDo0cHggc29saWQgIzAwMDtib3JkZXItcmlnaHQ6NHB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OjRweCBzb2xpZCB0cmFuc3BhcmVudDtjb250ZW50OiIifS5kcm9wZG93biAuY2FyZXR7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLWxlZnQ6MnB4fS5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MDt6LWluZGV4OjEwMDA7ZGlzcGxheTpub25lO2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjE2MHB4O3BhZGRpbmc6NXB4IDA7bWFyZ2luOjJweCAwIDA7bGlzdC1zdHlsZTpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMik7KmJvcmRlci1yaWdodC13aWR0aDoycHg7KmJvcmRlci1ib3R0b20td2lkdGg6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweDstd2Via2l0LWJveC1zaGFkb3c6MCA1cHggMTBweCByZ2JhKDAsMCwwLDAuMik7LW1vei1ib3gtc2hhZG93OjAgNXB4IDEwcHggcmdiYSgwLDAsMCwwLjIpO2JveC1zaGFkb3c6MCA1cHggMTBweCByZ2JhKDAsMCwwLDAuMik7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7LW1vei1iYWNrZ3JvdW5kLWNsaXA6cGFkZGluZztiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3h9LmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodHtyaWdodDowO2xlZnQ6YXV0b30uZHJvcGRvd24tbWVudSAuZGl2aWRlcnsqd2lkdGg6MTAwJTtoZWlnaHQ6MXB4O21hcmdpbjo5cHggMXB4OyptYXJnaW46LTVweCAwIDVweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjojZTVlNWU1O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmZ9LmRyb3Bkb3duLW1lbnU+bGk+YXtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6M3B4IDIwcHg7Y2xlYXI6Ym90aDtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojMzMzO3doaXRlLXNwYWNlOm5vd3JhcH0uZHJvcGRvd24tbWVudT5saT5hOmhvdmVyLC5kcm9wZG93bi1tZW51PmxpPmE6Zm9jdXMsLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXI+YSwuZHJvcGRvd24tc3VibWVudTpmb2N1cz5he2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojMDA4MWMyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzA4YyksdG8oIzAwNzdiMykpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYwMDg4Y2MnLGVuZENvbG9yc3RyPScjZmYwMDc3YjMnLEdyYWRpZW50VHlwZT0wKX0uZHJvcGRvd24tbWVudT4uYWN0aXZlPmEsLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hOmhvdmVyLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YTpmb2N1c3tjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6IzAwODFjMjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMwOGMpLHRvKCMwMDc3YjMpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O291dGxpbmU6MDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjAwODhjYycsZW5kQ29sb3JzdHI9JyNmZjAwNzdiMycsR3JhZGllbnRUeXBlPTApfS5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hLC5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hOmhvdmVyLC5kcm9wZG93bi1tZW51Pi5kaXNhYmxlZD5hOmZvY3Vze2NvbG9yOiM5OTl9LmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmE6aG92ZXIsLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmE6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0ub3Blbnsqei1pbmRleDoxMDAwfS5vcGVuPi5kcm9wZG93bi1tZW51e2Rpc3BsYXk6YmxvY2t9LnB1bGwtcmlnaHQ+LmRyb3Bkb3duLW1lbnV7cmlnaHQ6MDtsZWZ0OmF1dG99LmRyb3B1cCAuY2FyZXQsLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5jYXJldHtib3JkZXItdG9wOjA7Ym9yZGVyLWJvdHRvbTo0cHggc29saWQgIzAwMDtjb250ZW50OiIifS5kcm9wdXAgLmRyb3Bkb3duLW1lbnUsLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51e3RvcDphdXRvO2JvdHRvbToxMDAlO21hcmdpbi1ib3R0b206MXB4fS5kcm9wZG93bi1zdWJtZW51e3Bvc2l0aW9uOnJlbGF0aXZlfS5kcm9wZG93bi1zdWJtZW51Pi5kcm9wZG93bi1tZW51e3RvcDowO2xlZnQ6MTAwJTttYXJnaW4tdG9wOi02cHg7bWFyZ2luLWxlZnQ6LTFweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MCA2cHggNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6MCA2cHggNnB4IDZweDtib3JkZXItcmFkaXVzOjAgNnB4IDZweCA2cHh9LmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXI+LmRyb3Bkb3duLW1lbnV7ZGlzcGxheTpibG9ja30uZHJvcHVwIC5kcm9wZG93bi1zdWJtZW51Pi5kcm9wZG93bi1tZW51e3RvcDphdXRvO2JvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOi0ycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjVweCA1cHggNXB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjVweCA1cHggNXB4IDA7Ym9yZGVyLXJhZGl1czo1cHggNXB4IDVweCAwfS5kcm9wZG93bi1zdWJtZW51PmE6YWZ0ZXJ7ZGlzcGxheTpibG9jaztmbG9hdDpyaWdodDt3aWR0aDowO2hlaWdodDowO21hcmdpbi10b3A6NXB4O21hcmdpbi1yaWdodDotMTBweDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQtY29sb3I6I2NjYztib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjVweCAwIDVweCA1cHg7Y29udGVudDoiICJ9LmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXI+YTphZnRlcntib3JkZXItbGVmdC1jb2xvcjojZmZmfS5kcm9wZG93bi1zdWJtZW51LnB1bGwtbGVmdHtmbG9hdDpub25lfS5kcm9wZG93bi1zdWJtZW51LnB1bGwtbGVmdD4uZHJvcGRvd24tbWVudXtsZWZ0Oi0xMDAlO21hcmdpbi1sZWZ0OjEwcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czo2cHggMCA2cHggNnB4fS5kcm9wZG93biAuZHJvcGRvd24tbWVudSAubmF2LWhlYWRlcntwYWRkaW5nLXJpZ2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHh9LnR5cGVhaGVhZHt6LWluZGV4OjEwNTE7bWFyZ2luLXRvcDoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS53ZWxse21pbi1oZWlnaHQ6MjBweDtwYWRkaW5nOjE5cHg7bWFyZ2luLWJvdHRvbToyMHB4O2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtib3JkZXI6MXB4IHNvbGlkICNlM2UzZTM7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA1KX0ud2VsbCBibG9ja3F1b3Rle2JvcmRlci1jb2xvcjojZGRkO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMTUpfS53ZWxsLWxhcmdle3BhZGRpbmc6MjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHh9LndlbGwtc21hbGx7cGFkZGluZzo5cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRpdXM6M3B4fS5mYWRle29wYWNpdHk6MDstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjstbW96LXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjstby10cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXI7dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyfS5mYWRlLmlue29wYWNpdHk6MX0uY29sbGFwc2V7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjA7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtdHJhbnNpdGlvbjpoZWlnaHQgLjM1cyBlYXNlOy1tb3otdHJhbnNpdGlvbjpoZWlnaHQgLjM1cyBlYXNlOy1vLXRyYW5zaXRpb246aGVpZ2h0IC4zNXMgZWFzZTt0cmFuc2l0aW9uOmhlaWdodCAuMzVzIGVhc2V9LmNvbGxhcHNlLmlue2hlaWdodDphdXRvfS5jbG9zZXtmbG9hdDpyaWdodDtmb250LXNpemU6MjBweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzAwMDt0ZXh0LXNoYWRvdzowIDFweCAwICNmZmY7b3BhY2l0eTouMjtmaWx0ZXI6YWxwaGEob3BhY2l0eT0yMCl9LmNsb3NlOmhvdmVyLC5jbG9zZTpmb2N1c3tjb2xvcjojMDAwO3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyO29wYWNpdHk6LjQ7ZmlsdGVyOmFscGhhKG9wYWNpdHk9NDApfWJ1dHRvbi5jbG9zZXtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0uYnRue2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTtwYWRkaW5nOjRweCAxMnB4O21hcmdpbi1ib3R0b206MDsqbWFyZ2luLWxlZnQ6LjNlbTtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiMzMzM7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1zaGFkb3c6MCAxcHggMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC43NSk7dmVydGljYWwtYWxpZ246bWlkZGxlO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTsqYmFja2dyb3VuZC1jb2xvcjojZTZlNmU2O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmZmYsI2U2ZTZlNik7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2ZmZiksdG8oI2U2ZTZlNikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmZmYsI2U2ZTZlNik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmZmYsI2U2ZTZlNik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmZmYsI2U2ZTZlNik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjOypib3JkZXI6MDtib3JkZXItY29sb3I6I2U2ZTZlNiAjZTZlNmU2ICNiZmJmYmY7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtib3JkZXItYm90dG9tLWNvbG9yOiNiM2IzYjM7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZmZmZmZmJyxlbmRDb2xvcnN0cj0nI2ZmZTZlNmU2JyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKTsqem9vbToxOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KX0uYnRuOmhvdmVyLC5idG46Zm9jdXMsLmJ0bjphY3RpdmUsLmJ0bi5hY3RpdmUsLmJ0bi5kaXNhYmxlZCwuYnRuW2Rpc2FibGVkXXtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNjsqYmFja2dyb3VuZC1jb2xvcjojZDlkOWQ5fS5idG46YWN0aXZlLC5idG4uYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2NjYyBcOX0uYnRuOmZpcnN0LWNoaWxkeyptYXJnaW4tbGVmdDowfS5idG46aG92ZXIsLmJ0bjpmb2N1c3tjb2xvcjojMzMzO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtcG9zaXRpb246MCAtMTVweDstd2Via2l0LXRyYW5zaXRpb246YmFja2dyb3VuZC1wb3NpdGlvbiAuMXMgbGluZWFyOy1tb3otdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xcyBsaW5lYXI7LW8tdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xcyBsaW5lYXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xcyBsaW5lYXJ9LmJ0bjpmb2N1c3tvdXRsaW5lOnRoaW4gZG90dGVkICMzMzM7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6LTJweH0uYnRuLmFjdGl2ZSwuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7b3V0bGluZTowOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAycHggNHB4IHJnYmEoMCwwLDAsMC4xNSksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KX0uYnRuLmRpc2FibGVkLC5idG5bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtaW1hZ2U6bm9uZTtvcGFjaXR5Oi42NTtmaWx0ZXI6YWxwaGEob3BhY2l0eT02NSk7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7LW1vei1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5idG4tbGFyZ2V7cGFkZGluZzoxMXB4IDE5cHg7Zm9udC1zaXplOjE3LjVweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHh9LmJ0bi1sYXJnZSBbY2xhc3NePSJpY29uLSJdLC5idG4tbGFyZ2UgW2NsYXNzKj0iIGljb24tIl17bWFyZ2luLXRvcDo0cHh9LmJ0bi1zbWFsbHtwYWRkaW5nOjJweCAxMHB4O2ZvbnQtc2l6ZToxMS45cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRpdXM6M3B4fS5idG4tc21hbGwgW2NsYXNzXj0iaWNvbi0iXSwuYnRuLXNtYWxsIFtjbGFzcyo9IiBpY29uLSJde21hcmdpbi10b3A6MH0uYnRuLW1pbmkgW2NsYXNzXj0iaWNvbi0iXSwuYnRuLW1pbmkgW2NsYXNzKj0iIGljb24tIl17bWFyZ2luLXRvcDotMXB4fS5idG4tbWluaXtwYWRkaW5nOjAgNnB4O2ZvbnQtc2l6ZToxMC41cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRpdXM6M3B4fS5idG4tYmxvY2t7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJ0bi1ibG9jaysuYnRuLWJsb2Nre21hcmdpbi10b3A6NXB4fWlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi1ibG9jayxpbnB1dFt0eXBlPSJyZXNldCJdLmJ0bi1ibG9jayxpbnB1dFt0eXBlPSJidXR0b24iXS5idG4tYmxvY2t7d2lkdGg6MTAwJX0uYnRuLXByaW1hcnkuYWN0aXZlLC5idG4td2FybmluZy5hY3RpdmUsLmJ0bi1kYW5nZXIuYWN0aXZlLC5idG4tc3VjY2Vzcy5hY3RpdmUsLmJ0bi1pbmZvLmFjdGl2ZSwuYnRuLWludmVyc2UuYWN0aXZle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsMC43NSl9LmJ0bi1wcmltYXJ5e2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDZkY2M7KmJhY2tncm91bmQtY29sb3I6IzA0YztiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwNGMpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMwOGMpLHRvKCMwNGMpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwNGMpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwNGMpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMDhjLCMwNGMpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojMDRjICMwNGMgIzAwMmE4MDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMDA4OGNjJyxlbmRDb2xvcnN0cj0nI2ZmMDA0NGNjJyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0uYnRuLXByaW1hcnk6aG92ZXIsLmJ0bi1wcmltYXJ5OmZvY3VzLC5idG4tcHJpbWFyeTphY3RpdmUsLmJ0bi1wcmltYXJ5LmFjdGl2ZSwuYnRuLXByaW1hcnkuZGlzYWJsZWQsLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzA0YzsqYmFja2dyb3VuZC1jb2xvcjojMDAzYmIzfS5idG4tcHJpbWFyeTphY3RpdmUsLmJ0bi1wcmltYXJ5LmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMzkgXDl9LmJ0bi13YXJuaW5ne2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiNmYWE3MzI7KmJhY2tncm91bmQtY29sb3I6I2Y4OTQwNjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmYmI0NTApLHRvKCNmODk0MDYpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojZjg5NDA2ICNmODk0MDYgI2FkNjcwNDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZmJiNDUwJyxlbmRDb2xvcnN0cj0nI2ZmZjg5NDA2JyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0uYnRuLXdhcm5pbmc6aG92ZXIsLmJ0bi13YXJuaW5nOmZvY3VzLC5idG4td2FybmluZzphY3RpdmUsLmJ0bi13YXJuaW5nLmFjdGl2ZSwuYnRuLXdhcm5pbmcuZGlzYWJsZWQsLmJ0bi13YXJuaW5nW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2Y4OTQwNjsqYmFja2dyb3VuZC1jb2xvcjojZGY4NTA1fS5idG4td2FybmluZzphY3RpdmUsLmJ0bi13YXJuaW5nLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNjNjc2MDUgXDl9LmJ0bi1kYW5nZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6I2RhNGY0OTsqYmFja2dyb3VuZC1jb2xvcjojYmQzNjJmO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2JkMzYyZik7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2VlNWY1YiksdG8oI2JkMzYyZikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2JkMzYyZik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2JkMzYyZik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNlZTVmNWIsI2JkMzYyZik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiNiZDM2MmYgI2JkMzYyZiAjODAyNDIwO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZlZTVmNWInLGVuZENvbG9yc3RyPScjZmZiZDM2MmYnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4tZGFuZ2VyOmhvdmVyLC5idG4tZGFuZ2VyOmZvY3VzLC5idG4tZGFuZ2VyOmFjdGl2ZSwuYnRuLWRhbmdlci5hY3RpdmUsLmJ0bi1kYW5nZXIuZGlzYWJsZWQsLmJ0bi1kYW5nZXJbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojYmQzNjJmOypiYWNrZ3JvdW5kLWNvbG9yOiNhOTMwMmF9LmJ0bi1kYW5nZXI6YWN0aXZlLC5idG4tZGFuZ2VyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiM5NDJhMjUgXDl9LmJ0bi1zdWNjZXNze2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiM1YmI3NWI7KmJhY2tncm91bmQtY29sb3I6IzUxYTM1MTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1MWEzNTEpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCM2MmM0NjIpLHRvKCM1MWEzNTEpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1MWEzNTEpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1MWEzNTEpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjNjJjNDYyLCM1MWEzNTEpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojNTFhMzUxICM1MWEzNTEgIzM4NzAzODtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNjJjNDYyJyxlbmRDb2xvcnN0cj0nI2ZmNTFhMzUxJyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0uYnRuLXN1Y2Nlc3M6aG92ZXIsLmJ0bi1zdWNjZXNzOmZvY3VzLC5idG4tc3VjY2VzczphY3RpdmUsLmJ0bi1zdWNjZXNzLmFjdGl2ZSwuYnRuLXN1Y2Nlc3MuZGlzYWJsZWQsLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzUxYTM1MTsqYmFja2dyb3VuZC1jb2xvcjojNDk5MjQ5fS5idG4tc3VjY2VzczphY3RpdmUsLmJ0bi1zdWNjZXNzLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiM0MDgxNDAgXDl9LmJ0bi1pbmZve2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiM0OWFmY2Q7KmJhY2tncm91bmQtY29sb3I6IzJmOTZiNDtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMyZjk2YjQpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCM1YmMwZGUpLHRvKCMyZjk2YjQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMyZjk2YjQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMyZjk2YjQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjNWJjMGRlLCMyZjk2YjQpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojMmY5NmI0ICMyZjk2YjQgIzFmNjM3Nztib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNWJjMGRlJyxlbmRDb2xvcnN0cj0nI2ZmMmY5NmI0JyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0uYnRuLWluZm86aG92ZXIsLmJ0bi1pbmZvOmZvY3VzLC5idG4taW5mbzphY3RpdmUsLmJ0bi1pbmZvLmFjdGl2ZSwuYnRuLWluZm8uZGlzYWJsZWQsLmJ0bi1pbmZvW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzJmOTZiNDsqYmFja2dyb3VuZC1jb2xvcjojMmE4NWEwfS5idG4taW5mbzphY3RpdmUsLmJ0bi1pbmZvLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMyNDc0OGMgXDl9LmJ0bi1pbnZlcnNle2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiMzNjM2MzY7KmJhY2tncm91bmQtY29sb3I6IzIyMjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjNDQ0LCMyMjIpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCM0NDQpLHRvKCMyMjIpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjNDQ0LCMyMjIpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjNDQ0LCMyMjIpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjNDQ0LCMyMjIpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojMjIyICMyMjIgIzAwMDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNDQ0NDQ0JyxlbmRDb2xvcnN0cj0nI2ZmMjIyMjIyJyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0uYnRuLWludmVyc2U6aG92ZXIsLmJ0bi1pbnZlcnNlOmZvY3VzLC5idG4taW52ZXJzZTphY3RpdmUsLmJ0bi1pbnZlcnNlLmFjdGl2ZSwuYnRuLWludmVyc2UuZGlzYWJsZWQsLmJ0bi1pbnZlcnNlW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzIyMjsqYmFja2dyb3VuZC1jb2xvcjojMTUxNTE1fS5idG4taW52ZXJzZTphY3RpdmUsLmJ0bi1pbnZlcnNlLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwODA4MDggXDl9YnV0dG9uLmJ0bixpbnB1dFt0eXBlPSJzdWJtaXQiXS5idG57KnBhZGRpbmctdG9wOjNweDsqcGFkZGluZy1ib3R0b206M3B4fWJ1dHRvbi5idG46Oi1tb3otZm9jdXMtaW5uZXIsaW5wdXRbdHlwZT0ic3VibWl0Il0uYnRuOjotbW96LWZvY3VzLWlubmVye3BhZGRpbmc6MDtib3JkZXI6MH1idXR0b24uYnRuLmJ0bi1sYXJnZSxpbnB1dFt0eXBlPSJzdWJtaXQiXS5idG4uYnRuLWxhcmdleypwYWRkaW5nLXRvcDo3cHg7KnBhZGRpbmctYm90dG9tOjdweH1idXR0b24uYnRuLmJ0bi1zbWFsbCxpbnB1dFt0eXBlPSJzdWJtaXQiXS5idG4uYnRuLXNtYWxseypwYWRkaW5nLXRvcDozcHg7KnBhZGRpbmctYm90dG9tOjNweH1idXR0b24uYnRuLmJ0bi1taW5pLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi5idG4tbWluaXsqcGFkZGluZy10b3A6MXB4OypwYWRkaW5nLWJvdHRvbToxcHh9LmJ0bi1saW5rLC5idG4tbGluazphY3RpdmUsLmJ0bi1saW5rW2Rpc2FibGVkXXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtaW1hZ2U6bm9uZTstd2Via2l0LWJveC1zaGFkb3c6bm9uZTstbW96LWJveC1zaGFkb3c6bm9uZTtib3gtc2hhZG93Om5vbmV9LmJ0bi1saW5re2NvbG9yOiMwOGM7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0uYnRuLWxpbms6aG92ZXIsLmJ0bi1saW5rOmZvY3Vze2NvbG9yOiMwMDU1ODA7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5idG4tbGlua1tkaXNhYmxlZF06aG92ZXIsLmJ0bi1saW5rW2Rpc2FibGVkXTpmb2N1c3tjb2xvcjojMzMzO3RleHQtZGVjb3JhdGlvbjpub25lfS5idG4tZ3JvdXB7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lOyptYXJnaW4tbGVmdDouM2VtO2ZvbnQtc2l6ZTowO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Knpvb206MX0uYnRuLWdyb3VwOmZpcnN0LWNoaWxkeyptYXJnaW4tbGVmdDowfS5idG4tZ3JvdXArLmJ0bi1ncm91cHttYXJnaW4tbGVmdDo1cHh9LmJ0bi10b29sYmFye21hcmdpbi10b3A6MTBweDttYXJnaW4tYm90dG9tOjEwcHg7Zm9udC1zaXplOjB9LmJ0bi10b29sYmFyPi5idG4rLmJ0biwuYnRuLXRvb2xiYXI+LmJ0bi1ncm91cCsuYnRuLC5idG4tdG9vbGJhcj4uYnRuKy5idG4tZ3JvdXB7bWFyZ2luLWxlZnQ6NXB4fS5idG4tZ3JvdXA+LmJ0bntwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmJ0bi1ncm91cD4uYnRuKy5idG57bWFyZ2luLWxlZnQ6LTFweH0uYnRuLWdyb3VwPi5idG4sLmJ0bi1ncm91cD4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwPi5wb3BvdmVye2ZvbnQtc2l6ZToxNHB4fS5idG4tZ3JvdXA+LmJ0bi1taW5pe2ZvbnQtc2l6ZToxMC41cHh9LmJ0bi1ncm91cD4uYnRuLXNtYWxse2ZvbnQtc2l6ZToxMS45cHh9LmJ0bi1ncm91cD4uYnRuLWxhcmdle2ZvbnQtc2l6ZToxNy41cHh9LmJ0bi1ncm91cD4uYnRuOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo0cHh9LmJ0bi1ncm91cD4uYnRuOmxhc3QtY2hpbGQsLmJ0bi1ncm91cD4uZHJvcGRvd24tdG9nZ2xley13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NHB4fS5idG4tZ3JvdXA+LmJ0bi5sYXJnZTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowOy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo2cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo2cHg7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjZweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDo2cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NnB4fS5idG4tZ3JvdXA+LmJ0bi5sYXJnZTpsYXN0LWNoaWxkLC5idG4tZ3JvdXA+LmxhcmdlLmRyb3Bkb3duLXRvZ2dsZXstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjZweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo2cHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo2cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDo2cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjZweH0uYnRuLWdyb3VwPi5idG46aG92ZXIsLmJ0bi1ncm91cD4uYnRuOmZvY3VzLC5idG4tZ3JvdXA+LmJ0bjphY3RpdmUsLmJ0bi1ncm91cD4uYnRuLmFjdGl2ZXt6LWluZGV4OjJ9LmJ0bi1ncm91cCAuZHJvcGRvd24tdG9nZ2xlOmFjdGl2ZSwuYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZXtvdXRsaW5lOjB9LmJ0bi1ncm91cD4uYnRuKy5kcm9wZG93bi10b2dnbGV7KnBhZGRpbmctdG9wOjVweDtwYWRkaW5nLXJpZ2h0OjhweDsqcGFkZGluZy1ib3R0b206NXB4O3BhZGRpbmctbGVmdDo4cHg7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEyNSksaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEyNSksaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzppbnNldCAxcHggMCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xMjUpLGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjIpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5idG4tZ3JvdXA+LmJ0bi1taW5pKy5kcm9wZG93bi10b2dnbGV7KnBhZGRpbmctdG9wOjJweDtwYWRkaW5nLXJpZ2h0OjVweDsqcGFkZGluZy1ib3R0b206MnB4O3BhZGRpbmctbGVmdDo1cHh9LmJ0bi1ncm91cD4uYnRuLXNtYWxsKy5kcm9wZG93bi10b2dnbGV7KnBhZGRpbmctdG9wOjVweDsqcGFkZGluZy1ib3R0b206NHB4fS5idG4tZ3JvdXA+LmJ0bi1sYXJnZSsuZHJvcGRvd24tdG9nZ2xleypwYWRkaW5nLXRvcDo3cHg7cGFkZGluZy1yaWdodDoxMnB4OypwYWRkaW5nLWJvdHRvbTo3cHg7cGFkZGluZy1sZWZ0OjEycHh9LmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1pbWFnZTpub25lOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAycHggNHB4IHJnYmEoMCwwLDAsMC4xNSksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KX0uYnRuLWdyb3VwLm9wZW4gLmJ0bi5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2fS5idG4tZ3JvdXAub3BlbiAuYnRuLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6IzA0Y30uYnRuLWdyb3VwLm9wZW4gLmJ0bi13YXJuaW5nLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmODk0MDZ9LmJ0bi1ncm91cC5vcGVuIC5idG4tZGFuZ2VyLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiNiZDM2MmZ9LmJ0bi1ncm91cC5vcGVuIC5idG4tc3VjY2Vzcy5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojNTFhMzUxfS5idG4tZ3JvdXAub3BlbiAuYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6IzJmOTZiNH0uYnRuLWdyb3VwLm9wZW4gLmJ0bi1pbnZlcnNlLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LmJ0biAuY2FyZXR7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLWxlZnQ6MH0uYnRuLWxhcmdlIC5jYXJldHttYXJnaW4tdG9wOjZweH0uYnRuLWxhcmdlIC5jYXJldHtib3JkZXItdG9wLXdpZHRoOjVweDtib3JkZXItcmlnaHQtd2lkdGg6NXB4O2JvcmRlci1sZWZ0LXdpZHRoOjVweH0uYnRuLW1pbmkgLmNhcmV0LC5idG4tc21hbGwgLmNhcmV0e21hcmdpbi10b3A6OHB4fS5kcm9wdXAgLmJ0bi1sYXJnZSAuY2FyZXR7Ym9yZGVyLWJvdHRvbS13aWR0aDo1cHh9LmJ0bi1wcmltYXJ5IC5jYXJldCwuYnRuLXdhcm5pbmcgLmNhcmV0LC5idG4tZGFuZ2VyIC5jYXJldCwuYnRuLWluZm8gLmNhcmV0LC5idG4tc3VjY2VzcyAuY2FyZXQsLmJ0bi1pbnZlcnNlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfS5idG4tZ3JvdXAtdmVydGljYWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lOyp6b29tOjF9LmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRue2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bm9uZTttYXgtd2lkdGg6MTAwJTstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuKy5idG57bWFyZ2luLXRvcDotMXB4O21hcmdpbi1sZWZ0OjB9LmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDstbW96LWJvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7Ym9yZGVyLXJhZGl1czo0cHggNHB4IDAgMH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG46bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAwIDRweCA0cHg7LW1vei1ib3JkZXItcmFkaXVzOjAgMCA0cHggNHB4O2JvcmRlci1yYWRpdXM6MCAwIDRweCA0cHh9LmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuLWxhcmdlOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHggNnB4IDAgMDstbW96LWJvcmRlci1yYWRpdXM6NnB4IDZweCAwIDA7Ym9yZGVyLXJhZGl1czo2cHggNnB4IDAgMH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tbGFyZ2U6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7LW1vei1ib3JkZXItcmFkaXVzOjAgMCA2cHggNnB4O2JvcmRlci1yYWRpdXM6MCAwIDZweCA2cHh9LmFsZXJ0e3BhZGRpbmc6OHB4IDM1cHggOHB4IDE0cHg7bWFyZ2luLWJvdHRvbToyMHB4O3RleHQtc2hhZG93OjAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjUpO2JhY2tncm91bmQtY29sb3I6I2ZjZjhlMztib3JkZXI6MXB4IHNvbGlkICNmYmVlZDU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS5hbGVydCwuYWxlcnQgaDR7Y29sb3I6I2MwOTg1M30uYWxlcnQgaDR7bWFyZ2luOjB9LmFsZXJ0IC5jbG9zZXtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LTJweDtyaWdodDotMjFweDtsaW5lLWhlaWdodDoyMHB4fS5hbGVydC1zdWNjZXNze2NvbG9yOiM0Njg4NDc7YmFja2dyb3VuZC1jb2xvcjojZGZmMGQ4O2JvcmRlci1jb2xvcjojZDZlOWM2fS5hbGVydC1zdWNjZXNzIGg0e2NvbG9yOiM0Njg4NDd9LmFsZXJ0LWRhbmdlciwuYWxlcnQtZXJyb3J7Y29sb3I6I2I5NGE0ODtiYWNrZ3JvdW5kLWNvbG9yOiNmMmRlZGU7Ym9yZGVyLWNvbG9yOiNlZWQzZDd9LmFsZXJ0LWRhbmdlciBoNCwuYWxlcnQtZXJyb3IgaDR7Y29sb3I6I2I5NGE0OH0uYWxlcnQtaW5mb3tjb2xvcjojM2E4N2FkO2JhY2tncm91bmQtY29sb3I6I2Q5ZWRmNztib3JkZXItY29sb3I6I2JjZThmMX0uYWxlcnQtaW5mbyBoNHtjb2xvcjojM2E4N2FkfS5hbGVydC1ibG9ja3twYWRkaW5nLXRvcDoxNHB4O3BhZGRpbmctYm90dG9tOjE0cHh9LmFsZXJ0LWJsb2NrPnAsLmFsZXJ0LWJsb2NrPnVse21hcmdpbi1ib3R0b206MH0uYWxlcnQtYmxvY2sgcCtwe21hcmdpbi10b3A6NXB4fS5uYXZ7bWFyZ2luLWJvdHRvbToyMHB4O21hcmdpbi1sZWZ0OjA7bGlzdC1zdHlsZTpub25lfS5uYXY+bGk+YXtkaXNwbGF5OmJsb2NrfS5uYXY+bGk+YTpob3ZlciwubmF2PmxpPmE6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5uYXY+bGk+YT5pbWd7bWF4LXdpZHRoOm5vbmV9Lm5hdj4ucHVsbC1yaWdodHtmbG9hdDpyaWdodH0ubmF2LWhlYWRlcntkaXNwbGF5OmJsb2NrO3BhZGRpbmc6M3B4IDE1cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM5OTk7dGV4dC1zaGFkb3c6MCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuNSk7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5uYXYgbGkrLm5hdi1oZWFkZXJ7bWFyZ2luLXRvcDo5cHh9Lm5hdi1saXN0e3BhZGRpbmctcmlnaHQ6MTVweDtwYWRkaW5nLWxlZnQ6MTVweDttYXJnaW4tYm90dG9tOjB9Lm5hdi1saXN0PmxpPmEsLm5hdi1saXN0IC5uYXYtaGVhZGVye21hcmdpbi1yaWdodDotMTVweDttYXJnaW4tbGVmdDotMTVweDt0ZXh0LXNoYWRvdzowIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC41KX0ubmF2LWxpc3Q+bGk+YXtwYWRkaW5nOjNweCAxNXB4fS5uYXYtbGlzdD4uYWN0aXZlPmEsLm5hdi1saXN0Pi5hY3RpdmU+YTpob3ZlciwubmF2LWxpc3Q+LmFjdGl2ZT5hOmZvY3Vze2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjIpO2JhY2tncm91bmQtY29sb3I6IzA4Y30ubmF2LWxpc3QgW2NsYXNzXj0iaWNvbi0iXSwubmF2LWxpc3QgW2NsYXNzKj0iIGljb24tIl17bWFyZ2luLXJpZ2h0OjJweH0ubmF2LWxpc3QgLmRpdmlkZXJ7KndpZHRoOjEwMCU7aGVpZ2h0OjFweDttYXJnaW46OXB4IDFweDsqbWFyZ2luOi01cHggMCA1cHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6I2U1ZTVlNTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZmZmfS5uYXYtdGFicywubmF2LXBpbGxzeyp6b29tOjF9Lm5hdi10YWJzOmJlZm9yZSwubmF2LXBpbGxzOmJlZm9yZSwubmF2LXRhYnM6YWZ0ZXIsLm5hdi1waWxsczphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ubmF2LXRhYnM6YWZ0ZXIsLm5hdi1waWxsczphZnRlcntjbGVhcjpib3RofS5uYXYtdGFicz5saSwubmF2LXBpbGxzPmxpe2Zsb2F0OmxlZnR9Lm5hdi10YWJzPmxpPmEsLm5hdi1waWxscz5saT5he3BhZGRpbmctcmlnaHQ6MTJweDtwYWRkaW5nLWxlZnQ6MTJweDttYXJnaW4tcmlnaHQ6MnB4O2xpbmUtaGVpZ2h0OjE0cHh9Lm5hdi10YWJze2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZGR9Lm5hdi10YWJzPmxpe21hcmdpbi1ib3R0b206LTFweH0ubmF2LXRhYnM+bGk+YXtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4O2xpbmUtaGVpZ2h0OjIwcHg7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7LW1vei1ib3JkZXItcmFkaXVzOjRweCA0cHggMCAwO2JvcmRlci1yYWRpdXM6NHB4IDRweCAwIDB9Lm5hdi10YWJzPmxpPmE6aG92ZXIsLm5hdi10YWJzPmxpPmE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNlZWUgI2VlZSAjZGRkfS5uYXYtdGFicz4uYWN0aXZlPmEsLm5hdi10YWJzPi5hY3RpdmU+YTpob3ZlciwubmF2LXRhYnM+LmFjdGl2ZT5hOmZvY3Vze2NvbG9yOiM1NTU7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50fS5uYXYtcGlsbHM+bGk+YXtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4O21hcmdpbi10b3A6MnB4O21hcmdpbi1ib3R0b206MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo1cHg7LW1vei1ib3JkZXItcmFkaXVzOjVweDtib3JkZXItcmFkaXVzOjVweH0ubmF2LXBpbGxzPi5hY3RpdmU+YSwubmF2LXBpbGxzPi5hY3RpdmU+YTpob3ZlciwubmF2LXBpbGxzPi5hY3RpdmU+YTpmb2N1c3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzA4Y30ubmF2LXN0YWNrZWQ+bGl7ZmxvYXQ6bm9uZX0ubmF2LXN0YWNrZWQ+bGk+YXttYXJnaW4tcmlnaHQ6MH0ubmF2LXRhYnMubmF2LXN0YWNrZWR7Ym9yZGVyLWJvdHRvbTowfS5uYXYtdGFicy5uYXYtc3RhY2tlZD5saT5he2JvcmRlcjoxcHggc29saWQgI2RkZDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9Lm5hdi10YWJzLm5hdi1zdGFja2VkPmxpOmZpcnN0LWNoaWxkPmF7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo0cHh9Lm5hdi10YWJzLm5hdi1zdGFja2VkPmxpOmxhc3QtY2hpbGQ+YXstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjRweH0ubmF2LXRhYnMubmF2LXN0YWNrZWQ+bGk+YTpob3ZlciwubmF2LXRhYnMubmF2LXN0YWNrZWQ+bGk+YTpmb2N1c3t6LWluZGV4OjI7Ym9yZGVyLWNvbG9yOiNkZGR9Lm5hdi1waWxscy5uYXYtc3RhY2tlZD5saT5he21hcmdpbi1ib3R0b206M3B4fS5uYXYtcGlsbHMubmF2LXN0YWNrZWQ+bGk6bGFzdC1jaGlsZD5he21hcmdpbi1ib3R0b206MXB4fS5uYXYtdGFicyAuZHJvcGRvd24tbWVudXstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7LW1vei1ib3JkZXItcmFkaXVzOjAgMCA2cHggNnB4O2JvcmRlci1yYWRpdXM6MCAwIDZweCA2cHh9Lm5hdi1waWxscyAuZHJvcGRvd24tbWVudXstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHh9Lm5hdiAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHttYXJnaW4tdG9wOjZweDtib3JkZXItdG9wLWNvbG9yOiMwOGM7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDhjfS5uYXYgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciAuY2FyZXQsLm5hdiAuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiMwMDU1ODA7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDA1NTgwfS5uYXYtdGFicyAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHttYXJnaW4tdG9wOjhweH0ubmF2IC5hY3RpdmUgLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZn0ubmF2LXRhYnMgLmFjdGl2ZSAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiM1NTU7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNTU1fS5uYXY+LmRyb3Bkb3duLmFjdGl2ZT5hOmhvdmVyLC5uYXY+LmRyb3Bkb3duLmFjdGl2ZT5hOmZvY3Vze2N1cnNvcjpwb2ludGVyfS5uYXYtdGFicyAub3BlbiAuZHJvcGRvd24tdG9nZ2xlLC5uYXYtcGlsbHMgLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSwubmF2PmxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPmE6aG92ZXIsLm5hdj5saS5kcm9wZG93bi5vcGVuLmFjdGl2ZT5hOmZvY3Vze2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojOTk5O2JvcmRlci1jb2xvcjojOTk5fS5uYXYgbGkuZHJvcGRvd24ub3BlbiAuY2FyZXQsLm5hdiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2ZSAuY2FyZXQsLm5hdiBsaS5kcm9wZG93bi5vcGVuIGE6aG92ZXIgLmNhcmV0LC5uYXYgbGkuZHJvcGRvd24ub3BlbiBhOmZvY3VzIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmO29wYWNpdHk6MTtmaWx0ZXI6YWxwaGEob3BhY2l0eT0xMDApfS50YWJzLXN0YWNrZWQgLm9wZW4+YTpob3ZlciwudGFicy1zdGFja2VkIC5vcGVuPmE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM5OTl9LnRhYmJhYmxleyp6b29tOjF9LnRhYmJhYmxlOmJlZm9yZSwudGFiYmFibGU6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LnRhYmJhYmxlOmFmdGVye2NsZWFyOmJvdGh9LnRhYi1jb250ZW50e292ZXJmbG93OmF1dG99LnRhYnMtYmVsb3c+Lm5hdi10YWJzLC50YWJzLXJpZ2h0Pi5uYXYtdGFicywudGFicy1sZWZ0Pi5uYXYtdGFic3tib3JkZXItYm90dG9tOjB9LnRhYi1jb250ZW50Pi50YWItcGFuZSwucGlsbC1jb250ZW50Pi5waWxsLXBhbmV7ZGlzcGxheTpub25lfS50YWItY29udGVudD4uYWN0aXZlLC5waWxsLWNvbnRlbnQ+LmFjdGl2ZXtkaXNwbGF5OmJsb2NrfS50YWJzLWJlbG93Pi5uYXYtdGFic3tib3JkZXItdG9wOjFweCBzb2xpZCAjZGRkfS50YWJzLWJlbG93Pi5uYXYtdGFicz5saXttYXJnaW4tdG9wOi0xcHg7bWFyZ2luLWJvdHRvbTowfS50YWJzLWJlbG93Pi5uYXYtdGFicz5saT5hey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNHB4IDRweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDRweCA0cHg7Ym9yZGVyLXJhZGl1czowIDAgNHB4IDRweH0udGFicy1iZWxvdz4ubmF2LXRhYnM+bGk+YTpob3ZlciwudGFicy1iZWxvdz4ubmF2LXRhYnM+bGk+YTpmb2N1c3tib3JkZXItdG9wLWNvbG9yOiNkZGQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp0cmFuc3BhcmVudH0udGFicy1iZWxvdz4ubmF2LXRhYnM+LmFjdGl2ZT5hLC50YWJzLWJlbG93Pi5uYXYtdGFicz4uYWN0aXZlPmE6aG92ZXIsLnRhYnMtYmVsb3c+Lm5hdi10YWJzPi5hY3RpdmU+YTpmb2N1c3tib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgI2RkZCAjZGRkICNkZGR9LnRhYnMtbGVmdD4ubmF2LXRhYnM+bGksLnRhYnMtcmlnaHQ+Lm5hdi10YWJzPmxpe2Zsb2F0Om5vbmV9LnRhYnMtbGVmdD4ubmF2LXRhYnM+bGk+YSwudGFicy1yaWdodD4ubmF2LXRhYnM+bGk+YXttaW4td2lkdGg6NzRweDttYXJnaW4tcmlnaHQ6MDttYXJnaW4tYm90dG9tOjNweH0udGFicy1sZWZ0Pi5uYXYtdGFic3tmbG9hdDpsZWZ0O21hcmdpbi1yaWdodDoxOXB4O2JvcmRlci1yaWdodDoxcHggc29saWQgI2RkZH0udGFicy1sZWZ0Pi5uYXYtdGFicz5saT5he21hcmdpbi1yaWdodDotMXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7Ym9yZGVyLXJhZGl1czo0cHggMCAwIDRweH0udGFicy1sZWZ0Pi5uYXYtdGFicz5saT5hOmhvdmVyLC50YWJzLWxlZnQ+Lm5hdi10YWJzPmxpPmE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNlZWUgI2RkZCAjZWVlICNlZWV9LnRhYnMtbGVmdD4ubmF2LXRhYnMgLmFjdGl2ZT5hLC50YWJzLWxlZnQ+Lm5hdi10YWJzIC5hY3RpdmU+YTpob3ZlciwudGFicy1sZWZ0Pi5uYXYtdGFicyAuYWN0aXZlPmE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNkZGQgdHJhbnNwYXJlbnQgI2RkZCAjZGRkOypib3JkZXItcmlnaHQtY29sb3I6I2ZmZn0udGFicy1yaWdodD4ubmF2LXRhYnN7ZmxvYXQ6cmlnaHQ7bWFyZ2luLWxlZnQ6MTlweDtib3JkZXItbGVmdDoxcHggc29saWQgI2RkZH0udGFicy1yaWdodD4ubmF2LXRhYnM+bGk+YXttYXJnaW4tbGVmdDotMXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0udGFicy1yaWdodD4ubmF2LXRhYnM+bGk+YTpob3ZlciwudGFicy1yaWdodD4ubmF2LXRhYnM+bGk+YTpmb2N1c3tib3JkZXItY29sb3I6I2VlZSAjZWVlICNlZWUgI2RkZH0udGFicy1yaWdodD4ubmF2LXRhYnMgLmFjdGl2ZT5hLC50YWJzLXJpZ2h0Pi5uYXYtdGFicyAuYWN0aXZlPmE6aG92ZXIsLnRhYnMtcmlnaHQ+Lm5hdi10YWJzIC5hY3RpdmU+YTpmb2N1c3tib3JkZXItY29sb3I6I2RkZCAjZGRkICNkZGQgdHJhbnNwYXJlbnQ7KmJvcmRlci1sZWZ0LWNvbG9yOiNmZmZ9Lm5hdj4uZGlzYWJsZWQ+YXtjb2xvcjojOTk5fS5uYXY+LmRpc2FibGVkPmE6aG92ZXIsLm5hdj4uZGlzYWJsZWQ+YTpmb2N1c3t0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5uYXZiYXJ7KnBvc2l0aW9uOnJlbGF0aXZlOyp6LWluZGV4OjI7bWFyZ2luLWJvdHRvbToyMHB4O292ZXJmbG93OnZpc2libGV9Lm5hdmJhci1pbm5lcnttaW4taGVpZ2h0OjQwcHg7cGFkZGluZy1yaWdodDoyMHB4O3BhZGRpbmctbGVmdDoyMHB4O2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmZmYpLHRvKCNmMmYyZjIpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlcjoxcHggc29saWQgI2Q0ZDRkNDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmZmZmZmYnLGVuZENvbG9yc3RyPScjZmZmMmYyZjInLEdyYWRpZW50VHlwZT0wKTsqem9vbToxOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCA0cHggcmdiYSgwLDAsMCwwLjA2NSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMCwwLDAuMDY1KTtib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMCwwLDAuMDY1KX0ubmF2YmFyLWlubmVyOmJlZm9yZSwubmF2YmFyLWlubmVyOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5uYXZiYXItaW5uZXI6YWZ0ZXJ7Y2xlYXI6Ym90aH0ubmF2YmFyIC5jb250YWluZXJ7d2lkdGg6YXV0b30ubmF2LWNvbGxhcHNlLmNvbGxhcHNle2hlaWdodDphdXRvO292ZXJmbG93OnZpc2libGV9Lm5hdmJhciAuYnJhbmR7ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3BhZGRpbmc6MTBweCAyMHB4IDEwcHg7bWFyZ2luLWxlZnQ6LTIwcHg7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6MjAwO2NvbG9yOiM3Nzc7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmfS5uYXZiYXIgLmJyYW5kOmhvdmVyLC5uYXZiYXIgLmJyYW5kOmZvY3Vze3RleHQtZGVjb3JhdGlvbjpub25lfS5uYXZiYXItdGV4dHttYXJnaW4tYm90dG9tOjA7bGluZS1oZWlnaHQ6NDBweDtjb2xvcjojNzc3fS5uYXZiYXItbGlua3tjb2xvcjojNzc3fS5uYXZiYXItbGluazpob3ZlciwubmF2YmFyLWxpbms6Zm9jdXN7Y29sb3I6IzMzM30ubmF2YmFyIC5kaXZpZGVyLXZlcnRpY2Fse2hlaWdodDo0MHB4O21hcmdpbjowIDlweDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNmZmY7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNmMmYyZjJ9Lm5hdmJhciAuYnRuLC5uYXZiYXIgLmJ0bi1ncm91cHttYXJnaW4tdG9wOjVweH0ubmF2YmFyIC5idG4tZ3JvdXAgLmJ0biwubmF2YmFyIC5pbnB1dC1wcmVwZW5kIC5idG4sLm5hdmJhciAuaW5wdXQtYXBwZW5kIC5idG4sLm5hdmJhciAuaW5wdXQtcHJlcGVuZCAuYnRuLWdyb3VwLC5uYXZiYXIgLmlucHV0LWFwcGVuZCAuYnRuLWdyb3Vwe21hcmdpbi10b3A6MH0ubmF2YmFyLWZvcm17bWFyZ2luLWJvdHRvbTowOyp6b29tOjF9Lm5hdmJhci1mb3JtOmJlZm9yZSwubmF2YmFyLWZvcm06YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9Lm5hdmJhci1mb3JtOmFmdGVye2NsZWFyOmJvdGh9Lm5hdmJhci1mb3JtIGlucHV0LC5uYXZiYXItZm9ybSBzZWxlY3QsLm5hdmJhci1mb3JtIC5yYWRpbywubmF2YmFyLWZvcm0gLmNoZWNrYm94e21hcmdpbi10b3A6NXB4fS5uYXZiYXItZm9ybSBpbnB1dCwubmF2YmFyLWZvcm0gc2VsZWN0LC5uYXZiYXItZm9ybSAuYnRue2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1ib3R0b206MH0ubmF2YmFyLWZvcm0gaW5wdXRbdHlwZT0iaW1hZ2UiXSwubmF2YmFyLWZvcm0gaW5wdXRbdHlwZT0iY2hlY2tib3giXSwubmF2YmFyLWZvcm0gaW5wdXRbdHlwZT0icmFkaW8iXXttYXJnaW4tdG9wOjNweH0ubmF2YmFyLWZvcm0gLmlucHV0LWFwcGVuZCwubmF2YmFyLWZvcm0gLmlucHV0LXByZXBlbmR7bWFyZ2luLXRvcDo1cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5uYXZiYXItZm9ybSAuaW5wdXQtYXBwZW5kIGlucHV0LC5uYXZiYXItZm9ybSAuaW5wdXQtcHJlcGVuZCBpbnB1dHttYXJnaW4tdG9wOjB9Lm5hdmJhci1zZWFyY2h7cG9zaXRpb246cmVsYXRpdmU7ZmxvYXQ6bGVmdDttYXJnaW4tdG9wOjVweDttYXJnaW4tYm90dG9tOjB9Lm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeXtwYWRkaW5nOjRweCAxNHB4O21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseToiSGVsdmV0aWNhIE5ldWUiLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoxOy13ZWJraXQtYm9yZGVyLXJhZGl1czoxNXB4Oy1tb3otYm9yZGVyLXJhZGl1czoxNXB4O2JvcmRlci1yYWRpdXM6MTVweH0ubmF2YmFyLXN0YXRpYy10b3B7cG9zaXRpb246c3RhdGljO21hcmdpbi1ib3R0b206MH0ubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1pbm5lcnstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9Lm5hdmJhci1maXhlZC10b3AsLm5hdmJhci1maXhlZC1ib3R0b217cG9zaXRpb246Zml4ZWQ7cmlnaHQ6MDtsZWZ0OjA7ei1pbmRleDoxMDMwO21hcmdpbi1ib3R0b206MH0ubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWlubmVyLC5uYXZiYXItc3RhdGljLXRvcCAubmF2YmFyLWlubmVye2JvcmRlci13aWR0aDowIDAgMXB4fS5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItaW5uZXJ7Ym9yZGVyLXdpZHRoOjFweCAwIDB9Lm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1pbm5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWlubmVye3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9Lm5hdmJhci1zdGF0aWMtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAuY29udGFpbmVye3dpZHRoOjk0MHB4fS5uYXZiYXItZml4ZWQtdG9we3RvcDowfS5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItaW5uZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5uYXZiYXItaW5uZXJ7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDEwcHggcmdiYSgwLDAsMCwwLjEpOy1tb3otYm94LXNoYWRvdzowIDFweCAxMHB4IHJnYmEoMCwwLDAsMC4xKTtib3gtc2hhZG93OjAgMXB4IDEwcHggcmdiYSgwLDAsMCwwLjEpfS5uYXZiYXItZml4ZWQtYm90dG9te2JvdHRvbTowfS5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItaW5uZXJ7LXdlYmtpdC1ib3gtc2hhZG93OjAgLTFweCAxMHB4IHJnYmEoMCwwLDAsMC4xKTstbW96LWJveC1zaGFkb3c6MCAtMXB4IDEwcHggcmdiYSgwLDAsMCwwLjEpO2JveC1zaGFkb3c6MCAtMXB4IDEwcHggcmdiYSgwLDAsMCwwLjEpfS5uYXZiYXIgLm5hdntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjA7ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O21hcmdpbjowIDEwcHggMCAwfS5uYXZiYXIgLm5hdi5wdWxsLXJpZ2h0e2Zsb2F0OnJpZ2h0O21hcmdpbi1yaWdodDowfS5uYXZiYXIgLm5hdj5saXtmbG9hdDpsZWZ0fS5uYXZiYXIgLm5hdj5saT5he2Zsb2F0Om5vbmU7cGFkZGluZzoxMHB4IDE1cHggMTBweDtjb2xvcjojNzc3O3RleHQtZGVjb3JhdGlvbjpub25lO3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZn0ubmF2YmFyIC5uYXYgLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7bWFyZ2luLXRvcDo4cHh9Lm5hdmJhciAubmF2PmxpPmE6Zm9jdXMsLm5hdmJhciAubmF2PmxpPmE6aG92ZXJ7Y29sb3I6IzMzMzt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5uYXZiYXIgLm5hdj4uYWN0aXZlPmEsLm5hdmJhciAubmF2Pi5hY3RpdmU+YTpob3ZlciwubmF2YmFyIC5uYXY+LmFjdGl2ZT5hOmZvY3Vze2NvbG9yOiM1NTU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZTVlNWU1Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDNweCA4cHggcmdiYSgwLDAsMCwwLjEyNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgM3B4IDhweCByZ2JhKDAsMCwwLDAuMTI1KTtib3gtc2hhZG93Omluc2V0IDAgM3B4IDhweCByZ2JhKDAsMCwwLDAuMTI1KX0ubmF2YmFyIC5idG4tbmF2YmFye2Rpc3BsYXk6bm9uZTtmbG9hdDpyaWdodDtwYWRkaW5nOjdweCAxMHB4O21hcmdpbi1yaWdodDo1cHg7bWFyZ2luLWxlZnQ6NXB4O2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiNlZGVkZWQ7KmJhY2tncm91bmQtY29sb3I6I2U1ZTVlNTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZjJmMmYyLCNlNWU1ZTUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmMmYyZjIpLHRvKCNlNWU1ZTUpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZjJmMmYyLCNlNWU1ZTUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZjJmMmYyLCNlNWU1ZTUpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZjJmMmYyLCNlNWU1ZTUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojZTVlNWU1ICNlNWU1ZTUgI2JmYmZiZjtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZjJmMmYyJyxlbmRDb2xvcnN0cj0nI2ZmZTVlNWU1JyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMDc1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMDc1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA3NSl9Lm5hdmJhciAuYnRuLW5hdmJhcjpob3ZlciwubmF2YmFyIC5idG4tbmF2YmFyOmZvY3VzLC5uYXZiYXIgLmJ0bi1uYXZiYXI6YWN0aXZlLC5uYXZiYXIgLmJ0bi1uYXZiYXIuYWN0aXZlLC5uYXZiYXIgLmJ0bi1uYXZiYXIuZGlzYWJsZWQsLm5hdmJhciAuYnRuLW5hdmJhcltkaXNhYmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1ZTU7KmJhY2tncm91bmQtY29sb3I6I2Q5ZDlkOX0ubmF2YmFyIC5idG4tbmF2YmFyOmFjdGl2ZSwubmF2YmFyIC5idG4tbmF2YmFyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNjY2MgXDl9Lm5hdmJhciAuYnRuLW5hdmJhciAuaWNvbi1iYXJ7ZGlzcGxheTpibG9jazt3aWR0aDoxOHB4O2hlaWdodDoycHg7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoxcHg7LW1vei1ib3JkZXItcmFkaXVzOjFweDtib3JkZXItcmFkaXVzOjFweDstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMCByZ2JhKDAsMCwwLDAuMjUpOy1tb3otYm94LXNoYWRvdzowIDFweCAwIHJnYmEoMCwwLDAsMC4yNSk7Ym94LXNoYWRvdzowIDFweCAwIHJnYmEoMCwwLDAsMC4yNSl9LmJ0bi1uYXZiYXIgLmljb24tYmFyKy5pY29uLWJhcnttYXJnaW4tdG9wOjNweH0ubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO3RvcDotN3B4O2xlZnQ6OXB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yaWdodDo3cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTo3cHggc29saWQgI2NjYztib3JkZXItbGVmdDo3cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsMCwwLDAuMik7Y29udGVudDonJ30ubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOi02cHg7bGVmdDoxMHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yaWdodDo2cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTo2cHggc29saWQgI2ZmZjtib3JkZXItbGVmdDo2cHggc29saWQgdHJhbnNwYXJlbnQ7Y29udGVudDonJ30ubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2PmxpPi5kcm9wZG93bi1tZW51OmJlZm9yZXt0b3A6YXV0bztib3R0b206LTdweDtib3JkZXItdG9wOjdweCBzb2xpZCAjY2NjO2JvcmRlci1ib3R0b206MDtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsMC4yKX0ubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2PmxpPi5kcm9wZG93bi1tZW51OmFmdGVye3RvcDphdXRvO2JvdHRvbTotNnB4O2JvcmRlci10b3A6NnB4IHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbTowfS5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bj5hOmhvdmVyIC5jYXJldCwubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24+YTpmb2N1cyAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojMzMzO2JvcmRlci1ib3R0b20tY29sb3I6IzMzM30ubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tdG9nZ2xlLC5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZSwubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24ub3Blbi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojNTU1O2JhY2tncm91bmQtY29sb3I6I2U1ZTVlNX0ubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojNzc3O2JvcmRlci1ib3R0b20tY29sb3I6Izc3N30ubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldCwubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0LC5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiM1NTU7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNTU1fS5uYXZiYXIgLnB1bGwtcmlnaHQ+bGk+LmRyb3Bkb3duLW1lbnUsLm5hdmJhciAubmF2PmxpPi5kcm9wZG93bi1tZW51LnB1bGwtcmlnaHR7cmlnaHQ6MDtsZWZ0OmF1dG99Lm5hdmJhciAucHVsbC1yaWdodD5saT4uZHJvcGRvd24tbWVudTpiZWZvcmUsLm5hdmJhciAubmF2PmxpPi5kcm9wZG93bi1tZW51LnB1bGwtcmlnaHQ6YmVmb3Jle3JpZ2h0OjEycHg7bGVmdDphdXRvfS5uYXZiYXIgLnB1bGwtcmlnaHQ+bGk+LmRyb3Bkb3duLW1lbnU6YWZ0ZXIsLm5hdmJhciAubmF2PmxpPi5kcm9wZG93bi1tZW51LnB1bGwtcmlnaHQ6YWZ0ZXJ7cmlnaHQ6MTNweDtsZWZ0OmF1dG99Lm5hdmJhciAucHVsbC1yaWdodD5saT4uZHJvcGRvd24tbWVudSAuZHJvcGRvd24tbWVudSwubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodCAuZHJvcGRvd24tbWVudXtyaWdodDoxMDAlO2xlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6LTFweDttYXJnaW4tbGVmdDowOy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHggMCA2cHggNnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHggMCA2cHggNnB4O2JvcmRlci1yYWRpdXM6NnB4IDAgNnB4IDZweH0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiMxYjFiMWI7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzIyMiwjMTExKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjMjIyKSx0bygjMTExKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzIyMiwjMTExKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzIyMiwjMTExKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzIyMiwjMTExKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6IzI1MjUyNTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjIyMjIyMicsZW5kQ29sb3JzdHI9JyNmZjExMTExMScsR3JhZGllbnRUeXBlPTApfS5uYXZiYXItaW52ZXJzZSAuYnJhbmQsLm5hdmJhci1pbnZlcnNlIC5uYXY+bGk+YXtjb2xvcjojOTk5O3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSl9Lm5hdmJhci1pbnZlcnNlIC5icmFuZDpob3ZlciwubmF2YmFyLWludmVyc2UgLm5hdj5saT5hOmhvdmVyLC5uYXZiYXItaW52ZXJzZSAuYnJhbmQ6Zm9jdXMsLm5hdmJhci1pbnZlcnNlIC5uYXY+bGk+YTpmb2N1c3tjb2xvcjojZmZmfS5uYXZiYXItaW52ZXJzZSAuYnJhbmR7Y29sb3I6Izk5OX0ubmF2YmFyLWludmVyc2UgLm5hdmJhci10ZXh0e2NvbG9yOiM5OTl9Lm5hdmJhci1pbnZlcnNlIC5uYXY+bGk+YTpmb2N1cywubmF2YmFyLWludmVyc2UgLm5hdj5saT5hOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubmF2YmFyLWludmVyc2UgLm5hdiAuYWN0aXZlPmEsLm5hdmJhci1pbnZlcnNlIC5uYXYgLmFjdGl2ZT5hOmhvdmVyLC5uYXZiYXItaW52ZXJzZSAubmF2IC5hY3RpdmU+YTpmb2N1c3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzExMX0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1saW5re2NvbG9yOiM5OTl9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbGluazpob3ZlciwubmF2YmFyLWludmVyc2UgLm5hdmJhci1saW5rOmZvY3Vze2NvbG9yOiNmZmZ9Lm5hdmJhci1pbnZlcnNlIC5kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjojMjIyO2JvcmRlci1sZWZ0LWNvbG9yOiMxMTF9Lm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tdG9nZ2xlLC5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xlLC5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPi5kcm9wZG93bi10b2dnbGV7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMxMTF9Lm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24+YTpob3ZlciAuY2FyZXQsLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24+YTpmb2N1cyAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZn0ubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiM5OTk7Ym9yZGVyLWJvdHRvbS1jb2xvcjojOTk5fS5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQsLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0LC5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLWNvbG9yOiNmZmZ9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnl7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM1MTUxNTE7Ym9yZGVyLWNvbG9yOiMxMTE7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpOy13ZWJraXQtdHJhbnNpdGlvbjpub25lOy1tb3otdHJhbnNpdGlvbjpub25lOy1vLXRyYW5zaXRpb246bm9uZTt0cmFuc2l0aW9uOm5vbmV9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnk6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojY2NjfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojY2NjfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNjY2N9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnk6Zm9jdXMsLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnkuZm9jdXNlZHtwYWRkaW5nOjVweCAxNXB4O2NvbG9yOiMzMzM7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MDtvdXRsaW5lOjA7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAzcHggcmdiYSgwLDAsMCwwLjE1KTstbW96LWJveC1zaGFkb3c6MCAwIDNweCByZ2JhKDAsMCwwLDAuMTUpO2JveC1zaGFkb3c6MCAwIDNweCByZ2JhKDAsMCwwLDAuMTUpfS5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcntjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojMGUwZTBlOypiYWNrZ3JvdW5kLWNvbG9yOiMwNDA0MDQ7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzE1MTUxNSwjMDQwNDA0KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjMTUxNTE1KSx0bygjMDQwNDA0KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzE1MTUxNSwjMDQwNDA0KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzE1MTUxNSwjMDQwNDA0KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzE1MTUxNSwjMDQwNDA0KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6IzA0MDQwNCAjMDQwNDA0ICMwMDA7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjE1MTUxNScsZW5kQ29sb3JzdHI9JyNmZjA0MDQwNCcsR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSl9Lm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyOmhvdmVyLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcjpmb2N1cywubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXI6YWN0aXZlLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhci5hY3RpdmUsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyLmRpc2FibGVkLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcltkaXNhYmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMwNDA0MDQ7KmJhY2tncm91bmQtY29sb3I6IzAwMH0ubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXI6YWN0aXZlLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhci5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojMDAwIFw5fS5icmVhZGNydW1ie3BhZGRpbmc6OHB4IDE1cHg7bWFyZ2luOjAgMCAyMHB4O2xpc3Qtc3R5bGU6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS5icmVhZGNydW1iPmxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTt0ZXh0LXNoYWRvdzowIDFweCAwICNmZmY7Knpvb206MX0uYnJlYWRjcnVtYj5saT4uZGl2aWRlcntwYWRkaW5nOjAgNXB4O2NvbG9yOiNjY2N9LmJyZWFkY3J1bWI+LmFjdGl2ZXtjb2xvcjojOTk5fS5wYWdpbmF0aW9ue21hcmdpbjoyMHB4IDB9LnBhZ2luYXRpb24gdWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO21hcmdpbi1ib3R0b206MDttYXJnaW4tbGVmdDowOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweDsqem9vbToxOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KX0ucGFnaW5hdGlvbiB1bD5saXtkaXNwbGF5OmlubGluZX0ucGFnaW5hdGlvbiB1bD5saT5hLC5wYWdpbmF0aW9uIHVsPmxpPnNwYW57ZmxvYXQ6bGVmdDtwYWRkaW5nOjRweCAxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItbGVmdC13aWR0aDowfS5wYWdpbmF0aW9uIHVsPmxpPmE6aG92ZXIsLnBhZ2luYXRpb24gdWw+bGk+YTpmb2N1cywucGFnaW5hdGlvbiB1bD4uYWN0aXZlPmEsLnBhZ2luYXRpb24gdWw+LmFjdGl2ZT5zcGFue2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNX0ucGFnaW5hdGlvbiB1bD4uYWN0aXZlPmEsLnBhZ2luYXRpb24gdWw+LmFjdGl2ZT5zcGFue2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHR9LnBhZ2luYXRpb24gdWw+LmRpc2FibGVkPnNwYW4sLnBhZ2luYXRpb24gdWw+LmRpc2FibGVkPmEsLnBhZ2luYXRpb24gdWw+LmRpc2FibGVkPmE6aG92ZXIsLnBhZ2luYXRpb24gdWw+LmRpc2FibGVkPmE6Zm9jdXN7Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5wYWdpbmF0aW9uIHVsPmxpOmZpcnN0LWNoaWxkPmEsLnBhZ2luYXRpb24gdWw+bGk6Zmlyc3QtY2hpbGQ+c3Bhbntib3JkZXItbGVmdC13aWR0aDoxcHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo0cHh9LnBhZ2luYXRpb24gdWw+bGk6bGFzdC1jaGlsZD5hLC5wYWdpbmF0aW9uIHVsPmxpOmxhc3QtY2hpbGQ+c3Bhbnstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjRweH0ucGFnaW5hdGlvbi1jZW50ZXJlZHt0ZXh0LWFsaWduOmNlbnRlcn0ucGFnaW5hdGlvbi1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS5wYWdpbmF0aW9uLWxhcmdlIHVsPmxpPmEsLnBhZ2luYXRpb24tbGFyZ2UgdWw+bGk+c3BhbntwYWRkaW5nOjExcHggMTlweDtmb250LXNpemU6MTcuNXB4fS5wYWdpbmF0aW9uLWxhcmdlIHVsPmxpOmZpcnN0LWNoaWxkPmEsLnBhZ2luYXRpb24tbGFyZ2UgdWw+bGk6Zmlyc3QtY2hpbGQ+c3Bhbnstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NnB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NnB4Oy13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo2cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NnB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjZweH0ucGFnaW5hdGlvbi1sYXJnZSB1bD5saTpsYXN0LWNoaWxkPmEsLnBhZ2luYXRpb24tbGFyZ2UgdWw+bGk6bGFzdC1jaGlsZD5zcGFuey13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NnB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjZweDstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjZweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjZweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NnB4fS5wYWdpbmF0aW9uLW1pbmkgdWw+bGk6Zmlyc3QtY2hpbGQ+YSwucGFnaW5hdGlvbi1zbWFsbCB1bD5saTpmaXJzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLW1pbmkgdWw+bGk6Zmlyc3QtY2hpbGQ+c3BhbiwucGFnaW5hdGlvbi1zbWFsbCB1bD5saTpmaXJzdC1jaGlsZD5zcGFuey13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDozcHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6M3B4fS5wYWdpbmF0aW9uLW1pbmkgdWw+bGk6bGFzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpOmxhc3QtY2hpbGQ+YSwucGFnaW5hdGlvbi1taW5pIHVsPmxpOmxhc3QtY2hpbGQ+c3BhbiwucGFnaW5hdGlvbi1zbWFsbCB1bD5saTpsYXN0LWNoaWxkPnNwYW57LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6M3B4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDozcHh9LnBhZ2luYXRpb24tc21hbGwgdWw+bGk+YSwucGFnaW5hdGlvbi1zbWFsbCB1bD5saT5zcGFue3BhZGRpbmc6MnB4IDEwcHg7Zm9udC1zaXplOjExLjlweH0ucGFnaW5hdGlvbi1taW5pIHVsPmxpPmEsLnBhZ2luYXRpb24tbWluaSB1bD5saT5zcGFue3BhZGRpbmc6MCA2cHg7Zm9udC1zaXplOjEwLjVweH0ucGFnZXJ7bWFyZ2luOjIwcHggMDt0ZXh0LWFsaWduOmNlbnRlcjtsaXN0LXN0eWxlOm5vbmU7Knpvb206MX0ucGFnZXI6YmVmb3JlLC5wYWdlcjphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ucGFnZXI6YWZ0ZXJ7Y2xlYXI6Ym90aH0ucGFnZXIgbGl7ZGlzcGxheTppbmxpbmV9LnBhZ2VyIGxpPmEsLnBhZ2VyIGxpPnNwYW57ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzo1cHggMTRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkOy13ZWJraXQtYm9yZGVyLXJhZGl1czoxNXB4Oy1tb3otYm9yZGVyLXJhZGl1czoxNXB4O2JvcmRlci1yYWRpdXM6MTVweH0ucGFnZXIgbGk+YTpob3ZlciwucGFnZXIgbGk+YTpmb2N1c3t0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjV9LnBhZ2VyIC5uZXh0PmEsLnBhZ2VyIC5uZXh0PnNwYW57ZmxvYXQ6cmlnaHR9LnBhZ2VyIC5wcmV2aW91cz5hLC5wYWdlciAucHJldmlvdXM+c3BhbntmbG9hdDpsZWZ0fS5wYWdlciAuZGlzYWJsZWQ+YSwucGFnZXIgLmRpc2FibGVkPmE6aG92ZXIsLnBhZ2VyIC5kaXNhYmxlZD5hOmZvY3VzLC5wYWdlciAuZGlzYWJsZWQ+c3Bhbntjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubW9kYWwtYmFja2Ryb3B7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7ei1pbmRleDoxMDQwO2JhY2tncm91bmQtY29sb3I6IzAwMH0ubW9kYWwtYmFja2Ryb3AuZmFkZXtvcGFjaXR5OjB9Lm1vZGFsLWJhY2tkcm9wLC5tb2RhbC1iYWNrZHJvcC5mYWRlLmlue29wYWNpdHk6Ljg7ZmlsdGVyOmFscGhhKG9wYWNpdHk9ODApfS5tb2RhbHtwb3NpdGlvbjpmaXhlZDt0b3A6MTAlO2xlZnQ6NTAlO3otaW5kZXg6MTA1MDt3aWR0aDo1NjBweDttYXJnaW4tbGVmdDotMjgwcHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4zKTsqYm9yZGVyOjFweCBzb2xpZCAjOTk5Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweDtvdXRsaW5lOjA7LXdlYmtpdC1ib3gtc2hhZG93OjAgM3B4IDdweCByZ2JhKDAsMCwwLDAuMyk7LW1vei1ib3gtc2hhZG93OjAgM3B4IDdweCByZ2JhKDAsMCwwLDAuMyk7Ym94LXNoYWRvdzowIDNweCA3cHggcmdiYSgwLDAsMCwwLjMpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94Oy1tb3otYmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94O2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveH0ubW9kYWwuZmFkZXt0b3A6LTI1JTstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyLHRvcCAuM3MgZWFzZS1vdXQ7LW1vei10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGxpbmVhcix0b3AgLjNzIGVhc2Utb3V0Oy1vLXRyYW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyLHRvcCAuM3MgZWFzZS1vdXQ7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXIsdG9wIC4zcyBlYXNlLW91dH0ubW9kYWwuZmFkZS5pbnt0b3A6MTAlfS5tb2RhbC1oZWFkZXJ7cGFkZGluZzo5cHggMTVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVlfS5tb2RhbC1oZWFkZXIgLmNsb3Nle21hcmdpbi10b3A6MnB4fS5tb2RhbC1oZWFkZXIgaDN7bWFyZ2luOjA7bGluZS1oZWlnaHQ6MzBweH0ubW9kYWwtYm9keXtwb3NpdGlvbjpyZWxhdGl2ZTttYXgtaGVpZ2h0OjQwMHB4O3BhZGRpbmc6MTVweDtvdmVyZmxvdy15OmF1dG99Lm1vZGFsLWZvcm17bWFyZ2luLWJvdHRvbTowfS5tb2RhbC1mb290ZXJ7cGFkZGluZzoxNHB4IDE1cHggMTVweDttYXJnaW4tYm90dG9tOjA7dGV4dC1hbGlnbjpyaWdodDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7LW1vei1ib3JkZXItcmFkaXVzOjAgMCA2cHggNnB4O2JvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7Knpvb206MTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCAjZmZmOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAwICNmZmY7Ym94LXNoYWRvdzppbnNldCAwIDFweCAwICNmZmZ9Lm1vZGFsLWZvb3RlcjpiZWZvcmUsLm1vZGFsLWZvb3RlcjphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ubW9kYWwtZm9vdGVyOmFmdGVye2NsZWFyOmJvdGh9Lm1vZGFsLWZvb3RlciAuYnRuKy5idG57bWFyZ2luLWJvdHRvbTowO21hcmdpbi1sZWZ0OjVweH0ubW9kYWwtZm9vdGVyIC5idG4tZ3JvdXAgLmJ0bisuYnRue21hcmdpbi1sZWZ0Oi0xcHh9Lm1vZGFsLWZvb3RlciAuYnRuLWJsb2NrKy5idG4tYmxvY2t7bWFyZ2luLWxlZnQ6MH0udG9vbHRpcHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMzA7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTFweDtsaW5lLWhlaWdodDoxLjQ7b3BhY2l0eTowO2ZpbHRlcjphbHBoYShvcGFjaXR5PTApO3Zpc2liaWxpdHk6dmlzaWJsZX0udG9vbHRpcC5pbntvcGFjaXR5Oi44O2ZpbHRlcjphbHBoYShvcGFjaXR5PTgwKX0udG9vbHRpcC50b3B7cGFkZGluZzo1cHggMDttYXJnaW4tdG9wOi0zcHh9LnRvb2x0aXAucmlnaHR7cGFkZGluZzowIDVweDttYXJnaW4tbGVmdDozcHh9LnRvb2x0aXAuYm90dG9te3BhZGRpbmc6NXB4IDA7bWFyZ2luLXRvcDozcHh9LnRvb2x0aXAubGVmdHtwYWRkaW5nOjAgNXB4O21hcmdpbi1sZWZ0Oi0zcHh9LnRvb2x0aXAtaW5uZXJ7bWF4LXdpZHRoOjIwMHB4O3BhZGRpbmc6OHB4O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojMDAwOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0udG9vbHRpcC1hcnJvd3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDowO2hlaWdodDowO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWR9LnRvb2x0aXAudG9wIC50b29sdGlwLWFycm93e2JvdHRvbTowO2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi01cHg7Ym9yZGVyLXRvcC1jb2xvcjojMDAwO2JvcmRlci13aWR0aDo1cHggNXB4IDB9LnRvb2x0aXAucmlnaHQgLnRvb2x0aXAtYXJyb3d7dG9wOjUwJTtsZWZ0OjA7bWFyZ2luLXRvcDotNXB4O2JvcmRlci1yaWdodC1jb2xvcjojMDAwO2JvcmRlci13aWR0aDo1cHggNXB4IDVweCAwfS50b29sdGlwLmxlZnQgLnRvb2x0aXAtYXJyb3d7dG9wOjUwJTtyaWdodDowO21hcmdpbi10b3A6LTVweDtib3JkZXItbGVmdC1jb2xvcjojMDAwO2JvcmRlci13aWR0aDo1cHggMCA1cHggNXB4fS50b29sdGlwLmJvdHRvbSAudG9vbHRpcC1hcnJvd3t0b3A6MDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotNXB4O2JvcmRlci1ib3R0b20tY29sb3I6IzAwMDtib3JkZXItd2lkdGg6MCA1cHggNXB4fS5wb3BvdmVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt6LWluZGV4OjEwMTA7ZGlzcGxheTpub25lO21heC13aWR0aDo0MDBweDtwYWRkaW5nOjFweDt0ZXh0LWFsaWduOmxlZnQ7d2hpdGUtc3BhY2U6bm9ybWFsO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMik7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTstbW96LWJveC1zaGFkb3c6MCA1cHggMTBweCByZ2JhKDAsMCwwLDAuMik7Ym94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDstbW96LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nO2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveH0ucG9wb3Zlci50b3B7bWFyZ2luLXRvcDotMTBweH0ucG9wb3Zlci5yaWdodHttYXJnaW4tbGVmdDoxMHB4fS5wb3BvdmVyLmJvdHRvbXttYXJnaW4tdG9wOjEwcHh9LnBvcG92ZXIubGVmdHttYXJnaW4tbGVmdDotMTBweH0ucG9wb3Zlci10aXRsZXtwYWRkaW5nOjhweCAxNHB4O21hcmdpbjowO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoxOHB4O2JhY2tncm91bmQtY29sb3I6I2Y3ZjdmNztib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViOy13ZWJraXQtYm9yZGVyLXJhZGl1czo1cHggNXB4IDAgMDstbW96LWJvcmRlci1yYWRpdXM6NXB4IDVweCAwIDA7Ym9yZGVyLXJhZGl1czo1cHggNXB4IDAgMH0ucG9wb3Zlci10aXRsZTplbXB0eXtkaXNwbGF5Om5vbmV9LnBvcG92ZXItY29udGVudHtwYWRkaW5nOjlweCAxNHB4fS5wb3BvdmVyIC5hcnJvdywucG9wb3ZlciAuYXJyb3c6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jazt3aWR0aDowO2hlaWdodDowO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWR9LnBvcG92ZXIgLmFycm93e2JvcmRlci13aWR0aDoxMXB4fS5wb3BvdmVyIC5hcnJvdzphZnRlcntib3JkZXItd2lkdGg6MTBweDtjb250ZW50OiIifS5wb3BvdmVyLnRvcCAuYXJyb3d7Ym90dG9tOi0xMXB4O2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi0xMXB4O2JvcmRlci10b3AtY29sb3I6Izk5OTtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsMC4yNSk7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS5wb3BvdmVyLnRvcCAuYXJyb3c6YWZ0ZXJ7Ym90dG9tOjFweDttYXJnaW4tbGVmdDotMTBweDtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS5wb3BvdmVyLnJpZ2h0IC5hcnJvd3t0b3A6NTAlO2xlZnQ6LTExcHg7bWFyZ2luLXRvcDotMTFweDtib3JkZXItcmlnaHQtY29sb3I6Izk5OTtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgwLDAsMCwwLjI1KTtib3JkZXItbGVmdC13aWR0aDowfS5wb3BvdmVyLnJpZ2h0IC5hcnJvdzphZnRlcntib3R0b206LTEwcHg7bGVmdDoxcHg7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNmZmY7Ym9yZGVyLWxlZnQtd2lkdGg6MH0ucG9wb3Zlci5ib3R0b20gLmFycm93e3RvcDotMTFweDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotMTFweDtib3JkZXItYm90dG9tLWNvbG9yOiM5OTk7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsMCwwLDAuMjUpO2JvcmRlci10b3Atd2lkdGg6MH0ucG9wb3Zlci5ib3R0b20gLmFycm93OmFmdGVye3RvcDoxcHg7bWFyZ2luLWxlZnQ6LTEwcHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmO2JvcmRlci10b3Atd2lkdGg6MH0ucG9wb3Zlci5sZWZ0IC5hcnJvd3t0b3A6NTAlO3JpZ2h0Oi0xMXB4O21hcmdpbi10b3A6LTExcHg7Ym9yZGVyLWxlZnQtY29sb3I6Izk5OTtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLDAuMjUpO2JvcmRlci1yaWdodC13aWR0aDowfS5wb3BvdmVyLmxlZnQgLmFycm93OmFmdGVye3JpZ2h0OjFweDtib3R0b206LTEwcHg7Ym9yZGVyLWxlZnQtY29sb3I6I2ZmZjtib3JkZXItcmlnaHQtd2lkdGg6MH0udGh1bWJuYWlsc3ttYXJnaW4tbGVmdDotMjBweDtsaXN0LXN0eWxlOm5vbmU7Knpvb206MX0udGh1bWJuYWlsczpiZWZvcmUsLnRodW1ibmFpbHM6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LnRodW1ibmFpbHM6YWZ0ZXJ7Y2xlYXI6Ym90aH0ucm93LWZsdWlkIC50aHVtYm5haWxze21hcmdpbi1sZWZ0OjB9LnRodW1ibmFpbHM+bGl7ZmxvYXQ6bGVmdDttYXJnaW4tYm90dG9tOjIwcHg7bWFyZ2luLWxlZnQ6MjBweH0udGh1bWJuYWlse2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo0cHg7bGluZS1oZWlnaHQ6MjBweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwwLjA1NSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMDU1KTtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMDU1KTstd2Via2l0LXRyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dDstbW96LXRyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dDstby10cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0fWEudGh1bWJuYWlsOmhvdmVyLGEudGh1bWJuYWlsOmZvY3Vze2JvcmRlci1jb2xvcjojMDhjOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCA0cHggcmdiYSgwLDEwNSwyMTQsMC4yNSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMTA1LDIxNCwwLjI1KTtib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMTA1LDIxNCwwLjI1KX0udGh1bWJuYWlsPmltZ3tkaXNwbGF5OmJsb2NrO21heC13aWR0aDoxMDAlO21hcmdpbi1yaWdodDphdXRvO21hcmdpbi1sZWZ0OmF1dG99LnRodW1ibmFpbCAuY2FwdGlvbntwYWRkaW5nOjlweDtjb2xvcjojNTU1fS5tZWRpYSwubWVkaWEtYm9keXtvdmVyZmxvdzpoaWRkZW47Km92ZXJmbG93OnZpc2libGU7em9vbToxfS5tZWRpYSwubWVkaWEgLm1lZGlhe21hcmdpbi10b3A6MTVweH0ubWVkaWE6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfS5tZWRpYS1vYmplY3R7ZGlzcGxheTpibG9ja30ubWVkaWEtaGVhZGluZ3ttYXJnaW46MCAwIDVweH0ubWVkaWE+LnB1bGwtbGVmdHttYXJnaW4tcmlnaHQ6MTBweH0ubWVkaWE+LnB1bGwtcmlnaHR7bWFyZ2luLWxlZnQ6MTBweH0ubWVkaWEtbGlzdHttYXJnaW4tbGVmdDowO2xpc3Qtc3R5bGU6bm9uZX0ubGFiZWwsLmJhZGdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MnB4IDRweDtmb250LXNpemU6MTEuODQ0cHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDoxNHB4O2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTt3aGl0ZS1zcGFjZTpub3dyYXA7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7YmFja2dyb3VuZC1jb2xvcjojOTk5fS5sYWJlbHstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9LmJhZGdle3BhZGRpbmctcmlnaHQ6OXB4O3BhZGRpbmctbGVmdDo5cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjlweDstbW96LWJvcmRlci1yYWRpdXM6OXB4O2JvcmRlci1yYWRpdXM6OXB4fS5sYWJlbDplbXB0eSwuYmFkZ2U6ZW1wdHl7ZGlzcGxheTpub25lfWEubGFiZWw6aG92ZXIsYS5sYWJlbDpmb2N1cyxhLmJhZGdlOmhvdmVyLGEuYmFkZ2U6Zm9jdXN7Y29sb3I6I2ZmZjt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcn0ubGFiZWwtaW1wb3J0YW50LC5iYWRnZS1pbXBvcnRhbnR7YmFja2dyb3VuZC1jb2xvcjojYjk0YTQ4fS5sYWJlbC1pbXBvcnRhbnRbaHJlZl0sLmJhZGdlLWltcG9ydGFudFtocmVmXXtiYWNrZ3JvdW5kLWNvbG9yOiM5NTNiMzl9LmxhYmVsLXdhcm5pbmcsLmJhZGdlLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojZjg5NDA2fS5sYWJlbC13YXJuaW5nW2hyZWZdLC5iYWRnZS13YXJuaW5nW2hyZWZde2JhY2tncm91bmQtY29sb3I6I2M2NzYwNX0ubGFiZWwtc3VjY2VzcywuYmFkZ2Utc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiM0Njg4NDd9LmxhYmVsLXN1Y2Nlc3NbaHJlZl0sLmJhZGdlLXN1Y2Nlc3NbaHJlZl17YmFja2dyb3VuZC1jb2xvcjojMzU2NjM1fS5sYWJlbC1pbmZvLC5iYWRnZS1pbmZve2JhY2tncm91bmQtY29sb3I6IzNhODdhZH0ubGFiZWwtaW5mb1tocmVmXSwuYmFkZ2UtaW5mb1tocmVmXXtiYWNrZ3JvdW5kLWNvbG9yOiMyZDY5ODd9LmxhYmVsLWludmVyc2UsLmJhZGdlLWludmVyc2V7YmFja2dyb3VuZC1jb2xvcjojMzMzfS5sYWJlbC1pbnZlcnNlW2hyZWZdLC5iYWRnZS1pbnZlcnNlW2hyZWZde2JhY2tncm91bmQtY29sb3I6IzFhMWExYX0uYnRuIC5sYWJlbCwuYnRuIC5iYWRnZXtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LTFweH0uYnRuLW1pbmkgLmxhYmVsLC5idG4tbWluaSAuYmFkZ2V7dG9wOjB9QC13ZWJraXQta2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVze2Zyb217YmFja2dyb3VuZC1wb3NpdGlvbjo0MHB4IDB9dG97YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9fUAtbW96LWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlc3tmcm9te2JhY2tncm91bmQtcG9zaXRpb246NDBweCAwfXRve2JhY2tncm91bmQtcG9zaXRpb246MCAwfX1ALW1zLWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlc3tmcm9te2JhY2tncm91bmQtcG9zaXRpb246NDBweCAwfXRve2JhY2tncm91bmQtcG9zaXRpb246MCAwfX1ALW8ta2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVze2Zyb217YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9dG97YmFja2dyb3VuZC1wb3NpdGlvbjo0MHB4IDB9fUBrZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXN7ZnJvbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjQwcHggMH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH19LnByb2dyZXNze2hlaWdodDoyMHB4O21hcmdpbi1ib3R0b206MjBweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjojZjdmN2Y3O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmNWY1ZjUsI2Y5ZjlmOSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2Y1ZjVmNSksdG8oI2Y5ZjlmOSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmNWY1ZjUsI2Y5ZjlmOSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmNWY1ZjUsI2Y5ZjlmOSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmNWY1ZjUsI2Y5ZjlmOSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZjVmNWY1JyxlbmRDb2xvcnN0cj0nI2ZmZjlmOWY5JyxHcmFkaWVudFR5cGU9MCk7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjEpfS5wcm9ncmVzcyAuYmFye2Zsb2F0OmxlZnQ7d2lkdGg6MDtoZWlnaHQ6MTAwJTtmb250LXNpemU6MTJweDtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojMGU5MGQyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMxNDliZGYsIzA0ODBiZSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzE0OWJkZiksdG8oIzA0ODBiZSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMxNDliZGYsIzA0ODBiZSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMxNDliZGYsIzA0ODBiZSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMxNDliZGYsIzA0ODBiZSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYxNDliZGYnLGVuZENvbG9yc3RyPScjZmYwNDgwYmUnLEdyYWRpZW50VHlwZT0wKTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwwLjE1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwwLjE1KTtib3gtc2hhZG93Omluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsMC4xNSk7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtdHJhbnNpdGlvbjp3aWR0aCAuNnMgZWFzZTstbW96LXRyYW5zaXRpb246d2lkdGggLjZzIGVhc2U7LW8tdHJhbnNpdGlvbjp3aWR0aCAuNnMgZWFzZTt0cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlfS5wcm9ncmVzcyAuYmFyKy5iYXJ7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgwLDAsMCwwLjE1KSxpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpOy1tb3otYm94LXNoYWRvdzppbnNldCAxcHggMCAwIHJnYmEoMCwwLDAsMC4xNSksaW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwwLjE1KTtib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgwLDAsMCwwLjE1KSxpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpfS5wcm9ncmVzcy1zdHJpcGVkIC5iYXJ7YmFja2dyb3VuZC1jb2xvcjojMTQ5YmRmO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAxMDAlLDEwMCUgMCxjb2xvci1zdG9wKDAuMjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjI1LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSx0cmFuc3BhcmVudCksdG8odHJhbnNwYXJlbnQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpOy13ZWJraXQtYmFja2dyb3VuZC1zaXplOjQwcHggNDBweDstbW96LWJhY2tncm91bmQtc2l6ZTo0MHB4IDQwcHg7LW8tYmFja2dyb3VuZC1zaXplOjQwcHggNDBweDtiYWNrZ3JvdW5kLXNpemU6NDBweCA0MHB4fS5wcm9ncmVzcy5hY3RpdmUgLmJhcnstd2Via2l0LWFuaW1hdGlvbjpwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7LW1vei1hbmltYXRpb246cHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlOy1tcy1hbmltYXRpb246cHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlOy1vLWFuaW1hdGlvbjpwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7YW5pbWF0aW9uOnByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZX0ucHJvZ3Jlc3MtZGFuZ2VyIC5iYXIsLnByb2dyZXNzIC5iYXItZGFuZ2Vye2JhY2tncm91bmQtY29sb3I6I2RkNTE0YztiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZWU1ZjViLCNjNDNjMzUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNlZTVmNWIpLHRvKCNjNDNjMzUpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZWU1ZjViLCNjNDNjMzUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZWU1ZjViLCNjNDNjMzUpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZWU1ZjViLCNjNDNjMzUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZWU1ZjViJyxlbmRDb2xvcnN0cj0nI2ZmYzQzYzM1JyxHcmFkaWVudFR5cGU9MCl9LnByb2dyZXNzLWRhbmdlci5wcm9ncmVzcy1zdHJpcGVkIC5iYXIsLnByb2dyZXNzLXN0cmlwZWQgLmJhci1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojZWU1ZjViO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAxMDAlLDEwMCUgMCxjb2xvci1zdG9wKDAuMjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjI1LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSx0cmFuc3BhcmVudCksdG8odHJhbnNwYXJlbnQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpfS5wcm9ncmVzcy1zdWNjZXNzIC5iYXIsLnByb2dyZXNzIC5iYXItc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiM1ZWI5NWU7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzYyYzQ2MiwjNTdhOTU3KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjNjJjNDYyKSx0bygjNTdhOTU3KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzYyYzQ2MiwjNTdhOTU3KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzYyYzQ2MiwjNTdhOTU3KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzYyYzQ2MiwjNTdhOTU3KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjYyYzQ2MicsZW5kQ29sb3JzdHI9JyNmZjU3YTk1NycsR3JhZGllbnRUeXBlPTApfS5wcm9ncmVzcy1zdWNjZXNzLnByb2dyZXNzLXN0cmlwZWQgLmJhciwucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojNjJjNDYyO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAxMDAlLDEwMCUgMCxjb2xvci1zdG9wKDAuMjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjI1LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSx0cmFuc3BhcmVudCksdG8odHJhbnNwYXJlbnQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpfS5wcm9ncmVzcy1pbmZvIC5iYXIsLnByb2dyZXNzIC5iYXItaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiM0YmIxY2Y7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzViYzBkZSwjMzM5YmI5KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjNWJjMGRlKSx0bygjMzM5YmI5KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzViYzBkZSwjMzM5YmI5KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzViYzBkZSwjMzM5YmI5KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzViYzBkZSwjMzM5YmI5KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjViYzBkZScsZW5kQ29sb3JzdHI9JyNmZjMzOWJiOScsR3JhZGllbnRUeXBlPTApfS5wcm9ncmVzcy1pbmZvLnByb2dyZXNzLXN0cmlwZWQgLmJhciwucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLWluZm97YmFja2dyb3VuZC1jb2xvcjojNWJjMGRlO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAxMDAlLDEwMCUgMCxjb2xvci1zdG9wKDAuMjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjI1LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSx0cmFuc3BhcmVudCksdG8odHJhbnNwYXJlbnQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpfS5wcm9ncmVzcy13YXJuaW5nIC5iYXIsLnByb2dyZXNzIC5iYXItd2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNmYWE3MzI7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZiYjQ1MCwjZjg5NDA2KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZmJiNDUwKSx0bygjZjg5NDA2KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZiYjQ1MCwjZjg5NDA2KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2ZiYjQ1MCwjZjg5NDA2KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2ZiYjQ1MCwjZjg5NDA2KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmZiYjQ1MCcsZW5kQ29sb3JzdHI9JyNmZmY4OTQwNicsR3JhZGllbnRUeXBlPTApfS5wcm9ncmVzcy13YXJuaW5nLnByb2dyZXNzLXN0cmlwZWQgLmJhciwucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojZmJiNDUwO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAxMDAlLDEwMCUgMCxjb2xvci1zdG9wKDAuMjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjI1LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSx0cmFuc3BhcmVudCksdG8odHJhbnNwYXJlbnQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpfS5hY2NvcmRpb257bWFyZ2luLWJvdHRvbToyMHB4fS5hY2NvcmRpb24tZ3JvdXB7bWFyZ2luLWJvdHRvbToycHg7Ym9yZGVyOjFweCBzb2xpZCAjZTVlNWU1Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0uYWNjb3JkaW9uLWhlYWRpbmd7Ym9yZGVyLWJvdHRvbTowfS5hY2NvcmRpb24taGVhZGluZyAuYWNjb3JkaW9uLXRvZ2dsZXtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6OHB4IDE1cHh9LmFjY29yZGlvbi10b2dnbGV7Y3Vyc29yOnBvaW50ZXJ9LmFjY29yZGlvbi1pbm5lcntwYWRkaW5nOjlweCAxNXB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTV9LmNhcm91c2Vse3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi1ib3R0b206MjBweDtsaW5lLWhlaWdodDoxfS5jYXJvdXNlbC1pbm5lcntwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbn0uY2Fyb3VzZWwtaW5uZXI+Lml0ZW17cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpub25lOy13ZWJraXQtdHJhbnNpdGlvbjouNnMgZWFzZS1pbi1vdXQgbGVmdDstbW96LXRyYW5zaXRpb246LjZzIGVhc2UtaW4tb3V0IGxlZnQ7LW8tdHJhbnNpdGlvbjouNnMgZWFzZS1pbi1vdXQgbGVmdDt0cmFuc2l0aW9uOi42cyBlYXNlLWluLW91dCBsZWZ0fS5jYXJvdXNlbC1pbm5lcj4uaXRlbT5pbWcsLmNhcm91c2VsLWlubmVyPi5pdGVtPmE+aW1ne2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MX0uY2Fyb3VzZWwtaW5uZXI+LmFjdGl2ZSwuY2Fyb3VzZWwtaW5uZXI+Lm5leHQsLmNhcm91c2VsLWlubmVyPi5wcmV2e2Rpc3BsYXk6YmxvY2t9LmNhcm91c2VsLWlubmVyPi5hY3RpdmV7bGVmdDowfS5jYXJvdXNlbC1pbm5lcj4ubmV4dCwuY2Fyb3VzZWwtaW5uZXI+LnByZXZ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJX0uY2Fyb3VzZWwtaW5uZXI+Lm5leHR7bGVmdDoxMDAlfS5jYXJvdXNlbC1pbm5lcj4ucHJldntsZWZ0Oi0xMDAlfS5jYXJvdXNlbC1pbm5lcj4ubmV4dC5sZWZ0LC5jYXJvdXNlbC1pbm5lcj4ucHJldi5yaWdodHtsZWZ0OjB9LmNhcm91c2VsLWlubmVyPi5hY3RpdmUubGVmdHtsZWZ0Oi0xMDAlfS5jYXJvdXNlbC1pbm5lcj4uYWN0aXZlLnJpZ2h0e2xlZnQ6MTAwJX0uY2Fyb3VzZWwtY29udHJvbHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NDAlO2xlZnQ6MTVweDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O21hcmdpbi10b3A6LTIwcHg7Zm9udC1zaXplOjYwcHg7Zm9udC13ZWlnaHQ6MTAwO2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiMyMjI7Ym9yZGVyOjNweCBzb2xpZCAjZmZmOy13ZWJraXQtYm9yZGVyLXJhZGl1czoyM3B4Oy1tb3otYm9yZGVyLXJhZGl1czoyM3B4O2JvcmRlci1yYWRpdXM6MjNweDtvcGFjaXR5Oi41O2ZpbHRlcjphbHBoYShvcGFjaXR5PTUwKX0uY2Fyb3VzZWwtY29udHJvbC5yaWdodHtyaWdodDoxNXB4O2xlZnQ6YXV0b30uY2Fyb3VzZWwtY29udHJvbDpob3ZlciwuY2Fyb3VzZWwtY29udHJvbDpmb2N1c3tjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lO29wYWNpdHk6Ljk7ZmlsdGVyOmFscGhhKG9wYWNpdHk9OTApfS5jYXJvdXNlbC1pbmRpY2F0b3Jze3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxNXB4O3JpZ2h0OjE1cHg7ei1pbmRleDo1O21hcmdpbjowO2xpc3Qtc3R5bGU6bm9uZX0uY2Fyb3VzZWwtaW5kaWNhdG9ycyBsaXtkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnQ7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDttYXJnaW4tbGVmdDo1cHg7dGV4dC1pbmRlbnQ6LTk5OXB4O2JhY2tncm91bmQtY29sb3I6I2NjYztiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsMC4yNSk7Ym9yZGVyLXJhZGl1czo1cHh9LmNhcm91c2VsLWluZGljYXRvcnMgLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmNhcm91c2VsLWNhcHRpb257cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7cGFkZGluZzoxNXB4O2JhY2tncm91bmQ6IzMzMztiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC43NSl9LmNhcm91c2VsLWNhcHRpb24gaDQsLmNhcm91c2VsLWNhcHRpb24gcHtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiNmZmZ9LmNhcm91c2VsLWNhcHRpb24gaDR7bWFyZ2luOjAgMCA1cHh9LmNhcm91c2VsLWNhcHRpb24gcHttYXJnaW4tYm90dG9tOjB9Lmhlcm8tdW5pdHtwYWRkaW5nOjYwcHg7bWFyZ2luLWJvdHRvbTozMHB4O2ZvbnQtc2l6ZToxOHB4O2ZvbnQtd2VpZ2h0OjIwMDtsaW5lLWhlaWdodDozMHB4O2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjojZWVlOy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0uaGVyby11bml0IGgxe21hcmdpbi1ib3R0b206MDtmb250LXNpemU6NjBweDtsaW5lLWhlaWdodDoxO2xldHRlci1zcGFjaW5nOi0xcHg7Y29sb3I6aW5oZXJpdH0uaGVyby11bml0IGxpe2xpbmUtaGVpZ2h0OjMwcHh9LnB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHR9LnB1bGwtbGVmdHtmbG9hdDpsZWZ0fS5oaWRle2Rpc3BsYXk6bm9uZX0uc2hvd3tkaXNwbGF5OmJsb2NrfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59LmFmZml4e3Bvc2l0aW9uOmZpeGVkfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9kZWZhdWx0LmNzcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvZGVmYXVsdC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NlM2UzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvZGVmYXVsdC5jc3MKQEAgLTAsMCArMSwzMzAgQEAKKy8qIFN0eWxlIHRoZSBZb2N0byBQcm9qZWN0IGxvZ28gKi8KKy5sb2dvIGltZyB7IGhlaWdodDogMzBweDsgd2lkdGg6IGF1dG8gIWltcG9ydGFudDsgfQorLmxvZ28geyBwYWRkaW5nLXRvcDogNHB4ICFpbXBvcnRhbnQ7IHBhZGRpbmctYm90dG9tOjBweCAhaW1wb3J0YW50OyB9CisKKy8qIHN0eWxlIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisuYnJhbmQgPiBhIHsgY29sb3I6ICM3Nzc7IH0KKy5icmFuZCA+IGE6aG92ZXIgeyBjb2xvcjogIzk5OTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9CisuaWNvbi1pbmZvLXNpZ24geyBjb2xvcjogIzc3NzsgZm9udC1zaXplOiAxNnB4OyBtYXJnaW4tbGVmdDogNXB4O30KKy5pY29uLWluZm8tc2lnbjpob3ZlciB7IGNvbG9yOiAjOTk5OyBjdXJzb3I6IHBvaW50ZXI7IH0KKworLyogU3R5bGUgdGhlIGJyZWFkY3J1bWIgKi8KKy5icmVhZGNydW1iIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfQorLmJyZWFkY3J1bWIgbGk6Zmlyc3QtY2hpbGQgeyBwYWRkaW5nLXJpZ2h0OiAxMHB4OyB9CisKKy8qIFN0eWxlcyBmb3IgdGhlIGhlbHAgaW5mb3JtYXRpb24gKi8KKy5nZXQtaGVscCB7IGNvbG9yOiAjQ0NDQ0NDOyB9CisuZ2V0LWhlbHA6aG92ZXIsIC5pY29uLXBsdXMtc2lnbjpob3ZlciB7IGNvbG9yOiAjOTk5OTk5OyBjdXJzb3I6IHBvaW50ZXI7IH0KKy5nZXQtaGVscC1ibHVlIHsgY29sb3I6ICMzQTg3QUQ7IH0KKy5nZXQtaGVscC1ibHVlOmhvdmVyIHsgY29sb3I6ICMwMDU1ODA7IGN1cnNvcjogcG9pbnRlcjsgfQorLmdldC1oZWxwLXllbGxvdyB7IGNvbG9yOiAjQzA5ODUzOyB9CisuZ2V0LWhlbHAteWVsbG93OmhvdmVyIHsgY29sb3I6ICNCMzg5NDI7IGN1cnNvcjogcG9pbnRlcjsgfQorLmdldC1oZWxwLXJlZCB7IGNvbG9yOiAjQjk0QTQ4OyBmb250LXNpemU6IDE2cHg7IHBhZGRpbmctbGVmdDogMnB4OyB9CisuZ2V0LWhlbHAtcmVkOmhvdmVyIHsgY29sb3I6ICM5NDNBMzg7IGN1cnNvcjogcG9pbnRlcjsgfQorLmJ1aWxkLWZvcm0+aTpmaXJzdC1vZi10eXBlIHsgbWFyZ2luLWxlZnQ6IDVweDsgfQorLm1hbnVhbCB7IG1hcmdpbjogMTFweCAxNXB4IDAgMTFweDt9CisuaGVhZGluZy1oZWxwIHsgZm9udC1zaXplOiAxNHB4OyB9CisKKy8qIFN0eWxlcyBmb3IgdGhlIGV4dGVybmFsIGxpbmsgKi8KKy5nZXQtaW5mbyB7IGNvbG9yOiAjMDA4OENDOyB9CisuZ2V0LWluZm86aG92ZXIgeyBjb2xvcjogIzAwNTU4MDsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0KKworLyogU3R5bGVzIGZvciBjb2RlIGFuZCBwcmUgdGFncyAqLworY29kZSB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyBib3JkZXI6IG5vbmU7IGNvbG9yOiAjMzMzMzMzOyB9CitkZCBjb2RlLCAuYWxlcnQgY29kZSB7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsgd29yZC1icmVhazogYnJlYWstYWxsOyB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IH0KKy5hbGVydC13YXJuaW5nIGNvZGUsIC5hbGVydC13YXJuaW5nIHByZSB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyBib3JkZXI6IG5vbmU7IGNvbG9yOiAjQzA5ODUzOyBtYXJnaW4tYm90dG9tOiAwcHg7IH0KKy5hbGVydC1lcnJvciBjb2RlIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJvcmRlcjogbm9uZTsgY29sb3I6ICNCOTRBNDg7IG1hcmdpbi1ib3R0b206MHB4OyB9CisuYWxlcnQtZXJyb3IgcHJlIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJvcmRlcjogbm9uZTsgY29sb3I6ICNCOTRBNDg7IHdvcmQtYnJlYWs6IG5vcm1hbDsgbWFyZ2luLWJvdHRvbTogMHB4OyB9CisuYWxlcnQtd2FybmluZyBwcmUgeyB3b3JkLWJyZWFrOiBub3JtYWw7IH0KKy5hbGVydC1pbmZvIGEgeyBmb250LXdlaWdodDogMzAwOyB9CisuYWxlcnQtaW5mbyBjb2RlIHsgY29sb3I6ICMzQTg3QUQ7IH0KKy50b29sdGlwIGNvZGUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGJvcmRlcjogbm9uZTsgZm9udC1zaXplOiAxZW07IH0KKworLyogU3R5bGUgZm9yIGRlZmluaXRpb24gbGlzdHMgKi8KK2RkIHVsIHsgbGlzdC1zdHlsZS10eXBlOiBub25lOyBtYXJnaW46IDBweDsgfQorZHQsIGRkICB7bGluZS1oZWlnaHQ6IDI1cHg7IH0KK2RkIGxpIHsgbGluZS1oZWlnaHQ6IDI1cHg7IH0KKy5pdGVtLWluZm8gZGQgeyBsaW5lLWhlaWdodDogMjBweDsgbWFyZ2luLWJvdHRvbTogMTBweDsgfQorCisvKiBTdHlsZSB0aGUgZmlsdGVyIG1vZGFsIGRpYWxvZ3MgKi8KKy5tb2RhbCB7IHdpZHRoOiA4MDBweDsgbWFyZ2luLWxlZnQ6IC00MDBweDsgfQorLm1vZGFsLWZvb3RlciAuYnRuIHsgZmxvYXQ6IGxlZnQ7IH0KKworLyogSG92ZXIgc3R5bGUgZm9yIHRoZSBjbGVhciBzZWFyY2ggaWNvbiAqLworLmljb24tcmVtb3ZlLXNpZ246aG92ZXIgeyBjb2xvcjogIzk5OTk5OTsgY3Vyc29yOiBwb2ludGVyOyB9CisKKy8qIFNvbWUgZXh0cmEgc3BhY2UgYmVmb3JlIGhlYWRpbmdzIHdoZW4gbmVlZGVkICovCisuZGV0YWlscyB7IG1hcmdpbi10b3A6IDMwcHg7IH0KKy5haXIgeyBtYXJnaW4tdG9wOiAzMHB4OyB9CisKKy8qIFJlcXVpcmVkIGNsYXNzZXMgZm9yIHRoZSBoaWdobGlnaHQgYmVoYXZpb3VyIGluIHRhYmxlcyAqLworLmhpZ2hsaWdodCB7IC13ZWJraXQtYW5pbWF0aW9uOiB0YXJnZXQtZmFkZSAxMHMgMTsgLW1vei1hbmltYXRpb246IHRhcmdldC1mYWRlIDEwcyAxOyBhbmltYXRpb246IHRhcmdldC1mYWRlIDEwcyAxOyB9CitALXdlYmtpdC1rZXlmcmFtZXMgdGFyZ2V0LWZhZGUgeyAwJSB7IGJhY2tncm91bmQtY29sb3I6ICNEOUVERjc7IH0gMjUlIHsgYmFja2dyb3VuZC1jb2xvcjogI0Q5RURGNzsgfSAxMDAlIHsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IH0gfQorQC1tb3ota2V5ZnJhbWVzIHRhcmdldC1mYWRlIHsgMCUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRDlFREY3OyB9IDI1JSB7IGJhY2tncm91bmQtY29sb3I6ICNEOUVERjc7IH0gMTAwJSB7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB9IH0KK0BrZXlmcmFtZXMgdGFyZ2V0LWZhZGUgeyAwJSB7IGJhY2tncm91bmQtY29sb3I6ICNEOUVERjc7IH0gMjUlIHsgYmFja2dyb3VuZC1jb2xvcjogI0Q5RURGNzsgfSAxMDAlIHsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IH0gfQorCisvKiBUaGlzIG1ha2VzIHRvb2x0aXBzIHdvcmsgaW5zaWRlIG1vZGFsIGRpYWxvZ3MgKi8KKy50b29sdGlwIHsgei1pbmRleDogMjAwMCAhaW1wb3J0YW50OyB9CisKKy8qIE92ZXJyaWRlIGRlZmF1bHQgVHdpdHRlciBCb29zdHJhcCBzdHlsZXMgZm9yIGFuY2hvciB0YWdzIGluc2lkZSB0YWJsZXMgKi8KK3RkIGEsIHRkIGEgPiBjb2RlIHsgY29sb3I6ICMzMzMzMzM7IH0KK3RkIGNvZGUgeyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB9Cit0ZCBhOmhvdmVyLCB0ZCBhID4gY29kZTpob3ZlciB7IGNvbG9yOiAjMDAwMDAwOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQorCisvKiBPdmVycmlkZSBkZWZhdWx0IFR3aXR0ZXIgQm9vdHN0cmFwIHN0eWxlcyBmb3IgdHIuZXJyb3IgKi8KKy50YWJsZSB0Ym9keSB0ci5lcnJvciA+IHRkIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0gLyogb3ZlcnJpZGUgZGVmYXVsdCBCb290c3RyYXAgYmVoYXZpb3VyICovCisudGFibGUtaG92ZXIgdGJvZHkgdHIuZXJyb3I6aG92ZXIgPiB0ZCB7IGJhY2tncm91bmQtY29sb3I6ICNGNUY1RjU7fSAvKiBvdmVycmlkZSBkZWZhdWx0IEJvb3RzdHJhcCBiZWhhdmlvdXIgKi8KKworLyogUmlnaHQganVzdGlmeSBCb290c3RyYXAgdGFibGUgY29sdW1ucyBmb3Igc2l6ZSBmaWVsZHMgKi8KKy50YWJsZSAuc2l6ZWNvbCB7IHRleHQtYWxpZ246IHJpZ2h0OyB9CisKKy8qIFNldCBlcnJvciwgd2FybmluZywgc3VjY2VzcyBhbmQgbXV0ZWQgc3R5bGVzICovCisuZXJyb3IsIC5yZWQsIHRkLmVycm9yIGEsIHRyLmVycm9yIGEgeyBjb2xvcjogI2I5NGE0ODsgfQorYS5lcnJvcjpob3ZlciwgYS5lcnJvcjpmb2N1cywgdHIuZXJyb3IgYTpob3ZlciB7IGNvbG9yOiAjOTQzQTM4OyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQorLndhcm5pbmcsIC55ZWxsb3cgeyBjb2xvcjogI2MwOTg1Mzt9CithLndhcm5pbmcgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfQorYS53YXJuaW5nOmhvdmVyLCBhLndhcm5pbmc6Zm9jdXMgeyBjb2xvcjogI0IzODk0MjsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KKy5zdWNjZXNzLCAuZ3JlZW4geyBjb2xvcjogIzQ2ODg0Nzt9Cisuc3VjY2Vzczpob3ZlciB7IGNvbG9yOiAjMzQ3MTMyOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQordGQgPiAuc3VjY2Vzczpob3ZlciB7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9CisubXV0ZWQgYSB7IGNvbG9yOiM5OTk5OTk7IH0KKy5tdXRlZCBhOmhvdmVyIHsgY29sb3I6Izk5OTk5OTsgfQorCisvKiBTb3J0aW5nIGZ1bmN0aW9uYWxpdHkgc3R5bGVzIGZvciB0YWJsZSBoZWFkaW5ncyAqLworLnNvcnRlZCB7IGNvbG9yOiAjMzMzMzMzOyBmb250LXdlaWdodDogYm9sZDsgfQorLnNvcnRlZDpob3ZlciB7IGNvbG9yOiAjMDAwMDAwOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQordGggPiBhLCB0aCA+IHNwYW4geyBmb250LXdlaWdodDogbm9ybWFsOyB9CisKKy8qIEZvcmNlIGxvbmcgc3RyaW5ncyBsaWtlIGNvbW1pdCBoYXNoZXMgdG8gd3JhcCAqLworLmlzY29tbWl0IHsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyB3b3JkLWJyZWFrOiBicmVhay1hbGw7IHdvcmQtd3JhcDogYnJlYWstd29yZDt9CisKKy8qIE1ha2UgdGhlIHBvcG92ZXJzIHNjcm9sbGFibGUgaWYgdGhleSBhcmUgdG9vIGxvbmcgKi8KKy5wb3BvdmVyLWNvbnRlbnQgeyBtYXgtaGVpZ2h0OiAzMGVtOyBvdmVyZmxvdy15OiBzY3JvbGw7IH0KKworLyogU3R5bGVzIGZvciB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSB0YWJsZS4gV2UnbGwgcHJvYmFibHkgd29uJ3QgdXNlIHRob3NlIGluIHByb2R1Y3Rpb24gKi8KKy5vbmUgeyBwYWRkaW5nLWxlZnQ6IDE4cHggIWltcG9ydGFudDsgfQorLnR3byB7IHBhZGRpbmctbGVmdDogMzZweCAhaW1wb3J0YW50OyB9CisudGhyZWUgeyBwYWRkaW5nLWxlZnQ6IDU0cHggIWltcG9ydGFudDsgfQorLmNvbnRlbnQtZGlyZWN0b3J5IGEgeyBjb2xvcjogIzAwODhDQzsgfQorLmNvbnRlbnQtZGlyZWN0b3J5IGE6aG92ZXIgeyBjb2xvcjogIzAwNTU4MDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KKy5zeW1saW5rIHsgY29sb3I6ICNDQ0NDQ0M7IH0KKworLyogU3R5bGVzIGZvciB0aGUgbmF2YmFyIGFjdGlvbnMgKi8KKy5idG4tZ3JvdXAgKyAuYnRuLWdyb3VwIHsgbWFyZ2luLXJpZ2h0OiAxMHB4OyB9CisubmF2YmFyLWlubmVyID4gLmJ0bi1ncm91cCB7IG1hcmdpbi10b3A6IDZweDsgfQorCisvKiBTdHlsZXMgZm9yIHRoZSBwYXJlbnQgaXRlbSBpbiB0aGUgbGVmdCBuYXZpZ2F0aW9uICovCisKKy5uYXYgPiBsaSA+IGEubmF2LXBhcmVudCB7IGZvbnQtc2l6ZTogMThweDsgbGluZS1oZWlnaHQ6IDI1cHg7ICB9CisKKy8qIE90aGVyIHN0eWxlcyAqLworLmRyb3Bkb3duLW1lbnUgeyBwYWRkaW5nOiAxMHB4OyB9CitzZWxlY3QgeyB3aWR0aDogYXV0bzsgfQorLnBhZ2UtaGVhZGVyIHsgY29sb3I6ICM1QTVBNUE7IH0KKy50b3AtYWlyIHsgbWFyZ2luLXRvcDogNDBweDt9CisucHJvZ3Jlc3MgeyBtYXJnaW4tYm90dG9tOiAwcHg7IH0KKy5sZWFkIC5iYWRnZSB7IGZvbnQtc2l6ZTogMThweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgYm9yZGVyLXJhZGl1czogMTVweDsgcGFkZGluZzogOXB4OyB9CisubGVhZCBvbCwgLmxlYWQgdWwgeyBwYWRkaW5nOiAxMHB4IDAgMCAyMHB4OyB9CisubGVhZCBvbCA+IGxpLCAubGVhZCB1bCA+IGxpIHsKKyAgICBsaW5lLWhlaWdodDogMzVweDsKK30KKy53ZWxsID4gLmxlYWQsIC5hbGVydCAubGVhZCB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLndlbGwtdHJhbnNwYXJlbnQgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfQorLm5vLXJlc3VsdHMgeyBtYXJnaW46IDEwcHggMDsgfQorLnRhc2stbmFtZSB7IG1hcmdpbi1sZWZ0OiA3cHg7IH0KKy5pY29uLWhhbmQtcmlnaHQge2NvbG9yOiAjQ0NDQ0NDOyB9CisuaGVscC1pbmxpbmUgeyBtYXJnaW46IDVweDsgfQorLmRhc2hib2FyZC1zZWN0aW9uIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0KKworLyogc3R5bGVzIGZvciBsYW5kaW5nIHBhZ2UgLSBhbmFseXNpcyBtb2RlICovCisuaGVyby11bml0IHsgbWFyZ2luOiAyMHB4IDAgMzBweDsgfQorLmhlcm8tdW5pdCA+IC5jbG9zZSB7IGZvbnQtc2l6ZTo0MHB4OyB9CisuaGVyby1hY3Rpb25zIHsgbWFyZ2luLXRvcDogMzBweDsgfQorCisvKiBzdHlsZXMgZm9yIGxhbmRpbmcgcGFnZSAtIGJ1aWxkIG1vZGUgKi8KKy5oZXJvLXVuaXQgcCB7IGxpbmUtaGVpZ2h0OiAyNXB4OyB9CisuaGVyby11bml0IHAsIC5oZXJvLXVuaXQgLmJ0bi1sYXJnZSB7IG1hcmdpbi10b3A6IDE1cHg7IH0KKy5oZXJvLXVuaXQgdWwgeyBtYXJnaW4tdG9wOiAyMHB4OyB9CisuaGVyby11bml0IGxpIHsgbGluZS1oZWlnaHQ6IDMwcHg7IH0KKy5oZXJvLXVuaXQgaW1nIHsgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsgbWFyZ2luLXRvcDogMTVweDsgfQorCisvKiBtYWtlIHRhYmxlcyBDaHJvbWUtaGFwcHkgKG1lLCBub3Qgc28gbXVjaCkgKi8KK3RhYmxlIHsgdGFibGUtbGF5b3V0OiBmaXhlZDsgd29yZC13cmFwOiBicmVhay13b3JkOyB9CisKKy8qIHN0eWxlcyBmb3IgdGhlIG5ldyBidWlsZCBidXR0b24gKi8KKy5uZXctYnVpbGQgLmJ0bi1wcmltYXJ5IHsgcGFkZGluZzogNHB4IDMwcHg7IH0KKy5uZXctYnVpbGQgLmFsZXJ0IHsgbWFyZ2luLXRvcDogMTBweDsgfQorLm5ldy1idWlsZCAuYWxlcnQgcCB7IG1hcmdpbi10b3A6IDEwcHg7IH0KKworLyogc3R5bGVzIGZvciBzaG93aW5nIHRoZSBwcm9qZWN0IG5hbWUgaW4gYnVpbGQgbW9kZSAqLworLnByb2plY3QtbmFtZSB7IHBhZGRpbmctdG9wOiAwOyB9CisucHJvamVjdC1uYW1lIC5sYWJlbCB7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLWxlZnQ6IC0xNXB4OyBwYWRkaW5nOiA1cHg7IH0KKy5wcm9qZWN0LW5hbWUgLmxhYmVsID4gYSB7IGNvbG9yOiAjZmZmOyBmb250LXdlaWdodDogbm9ybWFsOyB9CisKKy8qIFJlbW92ZSBib3R0b20gbWFyZ2luIGZvciBmb3JtcyBpbnNpZGUgbW9kYWwgZGlhbG9ncyAqLworI2RlcGVuZGVuY2llcy1tb2RhbC1mb3JtIHsgbWFyZ2luLWJvdHRvbTogMHB4OyB9CisKKy8qIENvbmZpZ3VyYXRpb24gc3R5bGVzICovCisuaWNvbi10cmFzaCB7IGNvbG9yOiAjQjk0QTQ4OyBmb250LXNpemU6IDE2cHg7IHBhZGRpbmctbGVmdDogNXB4OyB9CisuaWNvbi10cmFzaDpob3ZlciB7IGNvbG9yOiAjOTQzQTM4OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGN1cnNvcjogcG9pbnRlcjsgfQorLmljb24tcGVuY2lsLCAuaWNvbi1kb3dubG9hZC1hbHQsIC5pY29uLXJlZnJlc2gsIC5pY29uLXN0YXItZW1wdHksIC5pY29uLXN0YXIgIHsgZm9udC1zaXplOiAxNnB4OyBjb2xvcjogIzAwODhDQzsgcGFkZGluZy1sZWZ0OiAycHg7IH0KKy5pY29uLXBlbmNpbDpob3ZlciwgLmljb24tZG93bmxvYWQtYWx0OmhvdmVyLCAuaWNvbi1yZWZyZXNoOmhvdmVyLCAuaWNvbi1zdGFyLWVtcHR5OmhvdmVyLCAuaWNvbi1zdGFyOmhvdmVyLCAuaWNvbi10YXNrczpob3ZlciB7IGNvbG9yOiAjMDA1NTgwOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGN1cnNvcjogcG9pbnRlcjsgfQorLmljb24tc2hhcmUgeyBwYWRkaW5nLWxlZnQ6IDJweDsgfQorLmFsZXJ0LXN1Y2Nlc3MgLmljb24tcmVmcmVzaCwgLmFsZXJ0LXN1Y2Nlc3MgLmljb24tdGFza3MgeyBjb2xvcjogIzQ2ODg0NzsgfQorLmFsZXJ0LXN1Y2Nlc3MgLmljb24tcmVmcmVzaDpob3ZlciwgLmFsZXJ0LXN1Y2Nlc3MgLmljb24tdGFza3M6aG92ZXIgeyBjb2xvcjogIzM0NzEzMjsgfQorLmFsZXJ0LWVycm9yIC5pY29uLXJlZnJlc2gsIC5hbGVydC1lcnJvciAuaWNvbi10YXNrcyB7IGNvbG9yOiAjYjk0YTQ4OyB9CisuYWxlcnQtZXJyb3IgLmljb24tcmVmcmVzaDpob3ZlciwgLmFsZXJ0LWVycm9yIC5pY29uLXRhc2tzOmhvdmVyIHsgY29sb3I6ICM5NDNBMzg7IH0KKy5jb25maWd1cmF0aW9uLWxpc3QgbGksIC5jb25maWd1cmF0aW9uLWxpc3QgbGFiZWwgeyBsaW5lLWhlaWdodDogMzVweDsgZm9udC1zaXplOiAyMXB4OyBmb250LXdlaWdodDogMjAwOyBtYXJnaW4tYm90dG9tOiAwcHg7fQorLmNvbmZpZ3VyYXRpb24tbGlzdCB7IGZvbnQtc2l6ZTogMTZweDsgbWFyZ2luLWJvdHRvbTogMS41ZW07IH0KKy5jb25maWd1cmF0aW9uLWxpc3QgaSB7IGZvbnQtc2l6ZTogMTZweDsgfQorLyouY29uZmlndXJhdGlvbi1sYXllcnMgeyBoZWlnaHQ6IDEzNXB4OyBvdmVyZmxvdzogc2Nyb2xsOyB9Ki8KKy5jb3VudGVyIHsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgfQorLndlbGwtYWxlcnQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkNGOEUzOyBib3JkZXI6IDFweCBzb2xpZCAjRkJFRUQ1OyBib3JkZXItcmFkaXVzOiA0cHg7IH0KKy53ZWxsLWFsZXJ0ID4gLmxlYWQgeyBjb2xvcjogI0MwOTg1MzsgcGFkZGluZy1ib3R0b206IC43NWVtOyB9CisuY29uZmlndXJhdGlvbi1hbGVydCB7IG1hcmdpbi1ib3R0b206IDBweDsgcGFkZGluZzogOHB4IDE0cHg7IH0KKy5jb25maWd1cmF0aW9uLWFsZXJ0IHAgeyBtYXJnaW4tYm90dG9tOiAwcHg7IH0KKy5wcm9qZWN0LWZvcm0geyBtYXJnaW4tdG9wOiAxMHB4OyB9CisuYWRkLWxheWVycyAuYnRuLWJsb2NrICsgLmJ0bi1ibG9jaywgLmJ1aWxkIC5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHsgbWFyZ2luLXRvcDogMHB4OyB9CitpbnB1dC5odWdlIHsgZm9udC1zaXplOiAxNy41cHg7IHBhZGRpbmc6IDExcHggMTlweDsgfQorLmJ1aWxkLWZvcm0geyBtYXJnaW4tYm90dG9tOiAwcHg7IH0KKy5idWlsZC1mb3JtIC5pbnB1dC1hcHBlbmQgeyBtYXJnaW4tYm90dG9tOiAwcHg7IH0KKy5idWlsZC1mb3JtIC5idG4tbGFyZ2UgeyBwYWRkaW5nOiAxMXB4IDM1cHg7IH0KKy5idWlsZC1mb3JtIHAgeyBmb250LXNpemU6MTcuNXB4IDttYXJnaW46MTJweCAwIDAgMTBweDt9CisjbGF5ZXItY29udGFpbmVyIGZvcm0sICN0YXJnZXQtY29udGFpbmVyIGZvcm0geyBtYXJnaW4tYm90dG9tOiAwcHg7IH0KKy5idG4tcHJpbWFyeSAuaWNvbi1xdWVzdGlvbi1zaWduLCAuYnRuLWRhbmdlciAuaWNvbi1xdWVzdGlvbi1zaWduIHsgY29sb3I6ICNmZmY7IH0KKy5idG4tcHJpbWFyeSAuaWNvbi1xdWVzdGlvbi1zaWduOmhvdmVyLCAuYnRuLWRhbmdlciAuaWNvbi1xdWVzdGlvbi1zaWduOmhvdmVyIHsgY29sb3I6ICM5OTk7IH0KK2EgY29kZSB7IGNvbG9yOiAjMDA4OENDOyB9CithIGNvZGU6aG92ZXIgeyBjb2xvcjogIzAwNTU4MDsgfQorLmxvY2FsY29uZiB7IGZvbnQtc2l6ZTogMTcuNXB4OyBtYXJnaW4tdG9wOiA0MHB4OyB9CisubG9jYWxjb25mIGNvZGUgeyBmb250LXNpemU6IDE3LjVweDsgfQorI2FkZC1sYXllci1kZXBlbmRlbmNpZXMgeyAgbWFyZ2luLXRvcDogNXB4OyB9CisubGluay1hY3Rpb24geyBmb250LXNpemU6IDE3LjVweDsgbWFyZ2luLXRvcDogNDBweDsgfQorLmxpbmstYWN0aW9uIGNvZGUgeyBmb250LXNpemU6IDE3LjVweDsgfQorLmFydGlmYWN0IHsgd2lkdGg6IDllbTsgfQorLmNvbnRyb2wtZ3JvdXAgeyBtYXJnaW4tYm90dG9tOiAwcHg7IH0KKyNwcm9qZWN0LWRldGFpbHMgZm9ybSB7IG1hcmdpbjogMHB4OyB9CitkZCBmb3JtIHsgbWFyZ2luOiAxMHB4IDAgMCAwOyB9CitkbCB0ZXh0YXJlYSB7IHJlc2l6ZTogdmVydGljYWw7IH0KKy5uYXZiYXItZml4ZWQtdG9wIHsgIHotaW5kZXg6IDE7IH0KKy5wb3BvdmVyIHsgei1pbmRleDogMjsgfQorLmJ0bi1kYW5nZXIgLmljb24tdHJhc2ggeyBjb2xvcjogI2ZmZjsgfQorLmJiYXBwZW5kcyB7IGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsgbWFyZ2luLWxlZnQ6IDA7IH0KKy5iYmFwcGVuZHMgbGkgeyBsaW5lLWhlaWdodDogMjVweDsgfQorLmNvbmZpZ3VyYXRpb24tbGlzdCBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsgbWFyZ2luLXRvcDoxM3B4O21hcmdpbi1yaWdodDoxMHB4OyB9CisuYWxlcnQgaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7IG1hcmdpbi10b3A6IDBweDsgbWFyZ2luLXJpZ2h0OiAzcHg7IH0KKy5hbGVydCBvbCB7IHBhZGRpbmc6IDEwcHggMHB4IDBweCAyMHB4OyB9CisuYWxlcnQgb2wgPiBsaSB7IGxpbmUtaGVpZ2h0OiAzNXB4OyB9CisuZGwtdmVydGljYWwgZm9ybSB7IG1hcmdpbi10b3A6IDEwcHg7IH0KKy5zY3JvbGxpbmcgeyBib3JkZXI6IDFweCBzb2xpZCAjZGRkZGRkOyBoZWlnaHQ6IDE1NHB4OyBvdmVyZmxvdzogYXV0bzsgcGFkZGluZzogOHB4OyB3aWR0aDogMjcuNSU7IG1hcmdpbi1ib3R0b206IDEwcHg7IH0KKy5sZWFkIC5oZWxwLWJsb2NrIHsgZm9udC1zaXplOiAxNHB4OyBsaW5lLWhlaWdodDogMjBweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgfQorLmJ1dHRvbi1wbGFjZSAgLmJ0biB7IG1hcmdpbjogMCAwIDIwcHggMDsgfQorLnRvb2x0aXAtaW5uZXIgeyBtYXgtd2lkdGg6IDI1MHB4OyB9CisubmV3LWJ1aWxkIHsgcGFkZGluZzogMjBweDsgfQorLm5ldy1idWlsZCBsaSB7IGxpbmUtaGVpZ2h0OiAzMHB4OyB9CisubmV3LWJ1aWxkIGxpIC5hbGVydCB7IGxpbmUtaGVpZ2h0OiAyMHB4OyB3aWR0aDogMjAwcHg7IHdoaXRlLXNwYWNlOiBub3JtYWw7IH0KKy5uZXctYnVpbGQgaDYgeyBtYXJnaW46IDEwcHggMCAwIDA7IGNvbG9yOiAjNWE1YTVhOyB9CisubmV3LWJ1aWxkIGgzIHsgbWFyZ2luOiAwOyBjb2xvcjogIzVhNWE1YTsgfQorLm5ldy1idWlsZCBmb3JtIHsgbWFyZ2luOiA1cHggMCAwOyB9CisubmV3LWJ1aWxkIC5pbnB1dC1hcHBlbmQgeyBtYXJnaW4tYm90dG9tOiAwOyB9CisjYnVpbGQtc2VsZWN0ZWQgeyBtYXJnaW4tdG9wOiAxNXB4OyB9CitkaXYuYWRkLWRlcHMgeyBtYXJnaW4tdG9wOiAxNXB4OyB9CisuYnRuLmxvZyB7IG1hcmdpbi1sZWZ0OiAyMHB4OyB9CisKKworLmFuaW1hdGUtcmVwZWF0IHsKKyAgbGlzdC1zdHlsZTpub25lOworICBib3gtc2l6aW5nOmJvcmRlci1ib3g7Cit9CisKKy5hbmltYXRlLXJlcGVhdC5uZy1tb3ZlLAorLmFuaW1hdGUtcmVwZWF0Lm5nLWVudGVyLAorLmFuaW1hdGUtcmVwZWF0Lm5nLWxlYXZlIHsKKyAgLXdlYmtpdC10cmFuc2l0aW9uOmFsbCBsaW5lYXIgMC41czsKKyAgdHJhbnNpdGlvbjphbGwgbGluZWFyIDAuNXM7Cit9CisKKy5hbmltYXRlLXJlcGVhdC5uZy1sZWF2ZS5uZy1sZWF2ZS1hY3RpdmUsCisuYW5pbWF0ZS1yZXBlYXQubmctbW92ZSwKKy5hbmltYXRlLXJlcGVhdC5uZy1lbnRlciB7CisgIG9wYWNpdHk6MDsKK30KKworLmFuaW1hdGUtcmVwZWF0Lm5nLWxlYXZlLAorLmFuaW1hdGUtcmVwZWF0Lm5nLWVudGVyLm5nLWVudGVyLWFjdGl2ZSB7CisgIG9wYWNpdHk6MTsKK30KKworLnRhYi1wYW5lIHRhYmxlIHsgbWFyZ2luLXRvcDogMTBweDsgfQorCit0aGVhZCAuZGVzY3JpcHRpb24sIC5nZXRfZGVzY3JpcHRpb25fb3Jfc3VtbWFyeSB7IHdpZHRoOiAzNjRweDsgfQordGhlYWQgLmFkZC1kZWwtbGF5ZXJzIHsgd2lkdGg6IDEyNHB4OyB9CisKKyNsb2FkaW5nLW5vdGlmaWNhdGlvbiB7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgei1pbmRleDogMTAxOworICB0b3A6IDMlOworICBsZWZ0OiA0MCU7CisgIHJpZ2h0OiA0MCU7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDEwcHggI2MwOTg1MzsKKyAgLW1vei1ib3gtc2hhZG93OiAwIDAgMTBweCAjYzA5ODUzOworICBib3gtc2hhZG93OiAwIDAgMTBweCAjYzA5ODUzOworfQorCisjY2hhbmdlLW5vdGlmaWNhdGlvbiB7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgei1pbmRleDogMTAxOworICB0b3A6IDMlOworICBsZWZ0OiAyMCU7CisgIHJpZ2h0OiAyMCU7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDEwcHggIzNhODdhZDsKKyAgLW1vei1ib3gtc2hhZG93OiAwIDAgMTBweCAjM2E4N2FkOworICBib3gtc2hhZG93OiAwIDAgMTBweCAjM2E4N2FkOworfQorCisvKiBDb3BpZWQgaW4gZnJvbSBuZXdlciB2ZXJzaW9uIG9mIEZvbnQtQXdlc29tZSA0LjMuMCAqLworLmZhLXNwaW4geworICAtd2Via2l0LWFuaW1hdGlvbjogZmEtc3BpbiAycyBpbmZpbml0ZSBsaW5lYXI7CisgIGFuaW1hdGlvbjogZmEtc3BpbiAycyBpbmZpbml0ZSBsaW5lYXI7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKK30KKy5mYS1wdWxzZSB7CisgIC13ZWJraXQtYW5pbWF0aW9uOiBmYS1zcGluIDFzIGluZmluaXRlIHN0ZXBzKDgpOworICBhbmltYXRpb246IGZhLXNwaW4gMXMgaW5maW5pdGUgc3RlcHMoOCk7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKK30KKworQC13ZWJraXQta2V5ZnJhbWVzIGZhLXNwaW4geworICAwJSB7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKKyAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKKyAgfQorICAxMDAlIHsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7CisgICAgdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTsKKyAgfQorfQorCitAa2V5ZnJhbWVzIGZhLXNwaW4geworICAwJSB7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKKyAgICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpOworICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOworICB9CisgIDEwMCUgeworICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTsKKyAgICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7CisgICAgdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTsKKyAgfQorfQorLyogRW5kIGNvcGllZCBpbiBmcm9tIG5ld2VyIHZlcnNpb24gb2YgRm9udC1Bd2Vzb21lIDQuMy4wICovCisKKy50b3AtcGFkZGVkIHsKKyAgcGFkZGluZy10b3A6IDYwcHg7Cit9CisKK2lucHV0LmlucHV0LWxnIHsKKyAgZm9udC1zaXplOiAxOHB4OworICBoZWlnaHQ6IDIycHg7CisgIGxpbmUtaGVpZ2h0OiAxLjMzMzMzOworICBwYWRkaW5nOiAxMHB4IDE2cHg7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYTE1ZmQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcwpAQCAtMCwwICsxLDMzIEBACisvKiEKKyAqICBGb250IEF3ZXNvbWUgMy4wLjIKKyAqICB0aGUgaWNvbmljIGZvbnQgZGVzaWduZWQgZm9yIHVzZSB3aXRoIFR3aXR0ZXIgQm9vdHN0cmFwCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFRoZSBmdWxsIHN1aXRlIG9mIHBpY3RvZ3JhcGhpYyBpY29ucywgZXhhbXBsZXMsIGFuZCBkb2N1bWVudGF0aW9uCisgKiAgY2FuIGJlIGZvdW5kIGF0OiBodHRwOi8vZm9ydGF3ZXNvbWUuZ2l0aHViLmNvbS9Gb250LUF3ZXNvbWUvCisgKgorICogIExpY2Vuc2UKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgLSBUaGUgRm9udCBBd2Vzb21lIGZvbnQgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFNJTCBPcGVuIEZvbnQgTGljZW5zZSAtIGh0dHA6Ly9zY3JpcHRzLnNpbC5vcmcvT0ZMCisgKiAgLSBGb250IEF3ZXNvbWUgQ1NTLCBMRVNTLCBhbmQgU0FTUyBmaWxlcyBhcmUgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIC0KKyAqICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5odG1sCisgKiAgLSBUaGUgRm9udCBBd2Vzb21lIHBpY3RvZ3JhbXMgYXJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQyBCWSAzLjAgTGljZW5zZSAtIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMC8KKyAqICAtIEF0dHJpYnV0aW9uIGlzIG5vIGxvbmdlciByZXF1aXJlZCBpbiBGb250IEF3ZXNvbWUgMy4wLCBidXQgbXVjaCBhcHByZWNpYXRlZDoKKyAqICAgICJGb250IEF3ZXNvbWUgYnkgRGF2ZSBHYW5keSAtIGh0dHA6Ly9mb3J0YXdlc29tZS5naXRodWIuY29tL0ZvbnQtQXdlc29tZSIKKworICogIENvbnRhY3QKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgRW1haWw6IGRhdmVAZGF2ZWdhbmR5LmNvbQorICogIFR3aXR0ZXI6IGh0dHA6Ly90d2l0dGVyLmNvbS9mb3J0YXdlc29fbWUKKyAqICBXb3JrOiBMZWFkIFByb2R1Y3QgRGVzaWduZXIgQCBodHRwOi8va3lydXVzLmNvbQorICovCisKK0Bmb250LWZhY2V7CisgIGZvbnQtZmFtaWx5OidGb250QXdlc29tZSc7CisgIHNyYzp1cmwoJy4uL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQuZW90P3Y9My4wLjEnKTsKKyAgc3JjOnVybCgnLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5lb3Q/I2llZml4JnY9My4wLjEnKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksCisgIHVybCgnLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC53b2ZmP3Y9My4wLjEnKSBmb3JtYXQoJ3dvZmYnKSwKKyAgdXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LnR0Zj92PTMuMC4xJykgZm9ybWF0KCd0cnVldHlwZScpOworICBmb250LXdlaWdodDpub3JtYWw7CisgIGZvbnQtc3R5bGU6bm9ybWFsIH0KKworW2NsYXNzXj0iaWNvbi0iXSxbY2xhc3MqPSIgaWNvbi0iXXtmb250LWZhbWlseTpGb250QXdlc29tZTtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHlsZTpub3JtYWw7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtkaXNwbGF5OmlubGluZTt3aWR0aDphdXRvO2hlaWdodDphdXRvO2xpbmUtaGVpZ2h0Om5vcm1hbDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7YmFja2dyb3VuZC1wb3NpdGlvbjowIDA7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0O21hcmdpbi10b3A6MH0uaWNvbi13aGl0ZSwubmF2LXBpbGxzPi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5uYXYtcGlsbHM+LmFjdGl2ZT5hPltjbGFzcyo9IiBpY29uLSJdLC5uYXYtbGlzdD4uYWN0aXZlPmE+W2NsYXNzXj0iaWNvbi0iXSwubmF2LWxpc3Q+LmFjdGl2ZT5hPltjbGFzcyo9IiBpY29uLSJdLC5uYXZiYXItaW52ZXJzZSAubmF2Pi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5uYXZiYXItaW52ZXJzZSAubmF2Pi5hY3RpdmU+YT5bY2xhc3MqPSIgaWNvbi0iXSwuZHJvcGRvd24tbWVudT5saT5hOmhvdmVyPltjbGFzc149Imljb24tIl0sLmRyb3Bkb3duLW1lbnU+bGk+YTpob3Zlcj5bY2xhc3MqPSIgaWNvbi0iXSwuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE+W2NsYXNzXj0iaWNvbi0iXSwuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXI+YT5bY2xhc3NePSJpY29uLSJdLC5kcm9wZG93bi1zdWJtZW51OmhvdmVyPmE+W2NsYXNzKj0iIGljb24tIl17YmFja2dyb3VuZC1pbWFnZTpub25lfVtjbGFzc149Imljb24tIl06YmVmb3JlLFtjbGFzcyo9IiBpY29uLSJdOmJlZm9yZXt0ZXh0LWRlY29yYXRpb246aW5oZXJpdDtkaXNwbGF5OmlubGluZS1ibG9jaztzcGVhazpub25lfWEgW2NsYXNzXj0iaWNvbi0iXSxhIFtjbGFzcyo9IiBpY29uLSJde2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5pY29uLWxhcmdlOmJlZm9yZXt2ZXJ0aWNhbC1hbGlnbjotMTAlO2ZvbnQtc2l6ZToxLjMzMzMzMzMzMzMzMzMzMzNlbX0uYnRuIFtjbGFzc149Imljb24tIl0sLm5hdiBbY2xhc3NePSJpY29uLSJdLC5idG4gW2NsYXNzKj0iIGljb24tIl0sLm5hdiBbY2xhc3MqPSIgaWNvbi0iXXtkaXNwbGF5OmlubGluZX0uYnRuIFtjbGFzc149Imljb24tIl0uaWNvbi1sYXJnZSwubmF2IFtjbGFzc149Imljb24tIl0uaWNvbi1sYXJnZSwuYnRuIFtjbGFzcyo9IiBpY29uLSJdLmljb24tbGFyZ2UsLm5hdiBbY2xhc3MqPSIgaWNvbi0iXS5pY29uLWxhcmdle2xpbmUtaGVpZ2h0Oi45ZW19LmJ0biBbY2xhc3NePSJpY29uLSJdLmljb24tc3BpbiwubmF2IFtjbGFzc149Imljb24tIl0uaWNvbi1zcGluLC5idG4gW2NsYXNzKj0iIGljb24tIl0uaWNvbi1zcGluLC5uYXYgW2NsYXNzKj0iIGljb24tIl0uaWNvbi1zcGlue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5uYXYtdGFicyBbY2xhc3NePSJpY29uLSJdLC5uYXYtcGlsbHMgW2NsYXNzXj0iaWNvbi0iXSwubmF2LXRhYnMgW2NsYXNzKj0iIGljb24tIl0sLm5hdi1waWxscyBbY2xhc3MqPSIgaWNvbi0iXSwubmF2LXRhYnMgW2NsYXNzXj0iaWNvbi0iXS5pY29uLWxhcmdlLC5uYXYtcGlsbHMgW2NsYXNzXj0iaWNvbi0iXS5pY29uLWxhcmdlLC5uYXYtdGFicyBbY2xhc3MqPSIgaWNvbi0iXS5pY29uLWxhcmdlLC5uYXYtcGlsbHMgW2NsYXNzKj0iIGljb24tIl0uaWNvbi1sYXJnZXtsaW5lLWhlaWdodDouOWVtfWxpIFtjbGFzc149Imljb24tIl0sLm5hdiBsaSBbY2xhc3NePSJpY29uLSJdLGxpIFtjbGFzcyo9IiBpY29uLSJdLC5uYXYgbGkgW2NsYXNzKj0iIGljb24tIl17ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MS4yNWVtO3RleHQtYWxpZ246Y2VudGVyfWxpIFtjbGFzc149Imljb24tIl0uaWNvbi1sYXJnZSwubmF2IGxpIFtjbGFzc149Imljb24tIl0uaWNvbi1sYXJnZSxsaSBbY2xhc3MqPSIgaWNvbi0iXS5pY29uLWxhcmdlLC5uYXYgbGkgW2NsYXNzKj0iIGljb24tIl0uaWNvbi1sYXJnZXt3aWR0aDoxLjU2MjVlbX11bC5pY29uc3tsaXN0LXN0eWxlLXR5cGU6bm9uZTt0ZXh0LWluZGVudDotMC43NWVtfXVsLmljb25zIGxpIFtjbGFzc149Imljb24tIl0sdWwuaWNvbnMgbGkgW2NsYXNzKj0iIGljb24tIl17d2lkdGg6Ljc1ZW19Lmljb24tbXV0ZWR7Y29sb3I6I2VlZX0uaWNvbi1ib3JkZXJ7Ym9yZGVyOnNvbGlkIDFweCAjZWVlO3BhZGRpbmc6LjJlbSAuMjVlbSAuMTVlbTstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9Lmljb24tMnh7Zm9udC1zaXplOjJlbX0uaWNvbi0yeC5pY29uLWJvcmRlcntib3JkZXItd2lkdGg6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0uaWNvbi0zeHtmb250LXNpemU6M2VtfS5pY29uLTN4Lmljb24tYm9yZGVye2JvcmRlci13aWR0aDozcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjVweDstbW96LWJvcmRlci1yYWRpdXM6NXB4O2JvcmRlci1yYWRpdXM6NXB4fS5pY29uLTR4e2ZvbnQtc2l6ZTo0ZW19Lmljb24tNHguaWNvbi1ib3JkZXJ7Ym9yZGVyLXdpZHRoOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHh9LnB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHR9LnB1bGwtbGVmdHtmbG9hdDpsZWZ0fVtjbGFzc149Imljb24tIl0ucHVsbC1sZWZ0LFtjbGFzcyo9IiBpY29uLSJdLnB1bGwtbGVmdHttYXJnaW4tcmlnaHQ6LjNlbX1bY2xhc3NePSJpY29uLSJdLnB1bGwtcmlnaHQsW2NsYXNzKj0iIGljb24tIl0ucHVsbC1yaWdodHttYXJnaW4tbGVmdDouM2VtfS5idG4gW2NsYXNzXj0iaWNvbi0iXS5wdWxsLWxlZnQuaWNvbi0yeCwuYnRuIFtjbGFzcyo9IiBpY29uLSJdLnB1bGwtbGVmdC5pY29uLTJ4LC5idG4gW2NsYXNzXj0iaWNvbi0iXS5wdWxsLXJpZ2h0Lmljb24tMngsLmJ0biBbY2xhc3MqPSIgaWNvbi0iXS5wdWxsLXJpZ2h0Lmljb24tMnh7bWFyZ2luLXRvcDouMThlbX0uYnRuIFtjbGFzc149Imljb24tIl0uaWNvbi1zcGluLmljb24tbGFyZ2UsLmJ0biBbY2xhc3MqPSIgaWNvbi0iXS5pY29uLXNwaW4uaWNvbi1sYXJnZXtsaW5lLWhlaWdodDouOGVtfS5idG4uYnRuLXNtYWxsIFtjbGFzc149Imljb24tIl0ucHVsbC1sZWZ0Lmljb24tMngsLmJ0bi5idG4tc21hbGwgW2NsYXNzKj0iIGljb24tIl0ucHVsbC1sZWZ0Lmljb24tMngsLmJ0bi5idG4tc21hbGwgW2NsYXNzXj0iaWNvbi0iXS5wdWxsLXJpZ2h0Lmljb24tMngsLmJ0bi5idG4tc21hbGwgW2NsYXNzKj0iIGljb24tIl0ucHVsbC1yaWdodC5pY29uLTJ4e21hcmdpbi10b3A6LjI1ZW19LmJ0bi5idG4tbGFyZ2UgW2NsYXNzXj0iaWNvbi0iXSwuYnRuLmJ0bi1sYXJnZSBbY2xhc3MqPSIgaWNvbi0iXXttYXJnaW4tdG9wOjB9LmJ0bi5idG4tbGFyZ2UgW2NsYXNzXj0iaWNvbi0iXS5wdWxsLWxlZnQuaWNvbi0yeCwuYnRuLmJ0bi1sYXJnZSBbY2xhc3MqPSIgaWNvbi0iXS5wdWxsLWxlZnQuaWNvbi0yeCwuYnRuLmJ0bi1sYXJnZSBbY2xhc3NePSJpY29uLSJdLnB1bGwtcmlnaHQuaWNvbi0yeCwuYnRuLmJ0bi1sYXJnZSBbY2xhc3MqPSIgaWNvbi0iXS5wdWxsLXJpZ2h0Lmljb24tMnh7bWFyZ2luLXRvcDouMDVlbX0uYnRuLmJ0bi1sYXJnZSBbY2xhc3NePSJpY29uLSJdLnB1bGwtbGVmdC5pY29uLTJ4LC5idG4uYnRuLWxhcmdlIFtjbGFzcyo9IiBpY29uLSJdLnB1bGwtbGVmdC5pY29uLTJ4e21hcmdpbi1yaWdodDouMmVtfS5idG4uYnRuLWxhcmdlIFtjbGFzc149Imljb24tIl0ucHVsbC1yaWdodC5pY29uLTJ4LC5idG4uYnRuLWxhcmdlIFtjbGFzcyo9IiBpY29uLSJdLnB1bGwtcmlnaHQuaWNvbi0yeHttYXJnaW4tbGVmdDouMmVtfS5pY29uLXNwaW57ZGlzcGxheTppbmxpbmUtYmxvY2s7LW1vei1hbmltYXRpb246c3BpbiAycyBpbmZpbml0ZSBsaW5lYXI7LW8tYW5pbWF0aW9uOnNwaW4gMnMgaW5maW5pdGUgbGluZWFyOy13ZWJraXQtYW5pbWF0aW9uOnNwaW4gMnMgaW5maW5pdGUgbGluZWFyO2FuaW1hdGlvbjpzcGluIDJzIGluZmluaXRlIGxpbmVhcn1ALW1vei1rZXlmcmFtZXMgc3BpbnswJXstbW96LXRyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXstbW96LXRyYW5zZm9ybTpyb3RhdGUoMzU5ZGVnKX19QC13ZWJraXQta2V5ZnJhbWVzIHNwaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDBkZWcpfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDM1OWRlZyl9fUAtby1rZXlmcmFtZXMgc3BpbnswJXstby10cmFuc2Zvcm06cm90YXRlKDBkZWcpfTEwMCV7LW8tdHJhbnNmb3JtOnJvdGF0ZSgzNTlkZWcpfX1ALW1zLWtleWZyYW1lcyBzcGluezAley1tcy10cmFuc2Zvcm06cm90YXRlKDBkZWcpfTEwMCV7LW1zLXRyYW5zZm9ybTpyb3RhdGUoMzU5ZGVnKX19QGtleWZyYW1lcyBzcGluezAle3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXt0cmFuc2Zvcm06cm90YXRlKDM1OWRlZyl9fUAtbW96LWRvY3VtZW50IHVybC1wcmVmaXgoKXsuaWNvbi1zcGlue2hlaWdodDouOWVtfS5idG4gLmljb24tc3BpbntoZWlnaHQ6YXV0b30uaWNvbi1zcGluLmljb24tbGFyZ2V7aGVpZ2h0OjEuMjVlbX0uYnRuIC5pY29uLXNwaW4uaWNvbi1sYXJnZXtoZWlnaHQ6Ljc1ZW19fS5pY29uLWdsYXNzOmJlZm9yZXtjb250ZW50OiJcZjAwMCJ9Lmljb24tbXVzaWM6YmVmb3Jle2NvbnRlbnQ6IlxmMDAxIn0uaWNvbi1zZWFyY2g6YmVmb3Jle2NvbnRlbnQ6IlxmMDAyIn0uaWNvbi1lbnZlbG9wZTpiZWZvcmV7Y29udGVudDoiXGYwMDMifS5pY29uLWhlYXJ0OmJlZm9yZXtjb250ZW50OiJcZjAwNCJ9Lmljb24tc3RhcjpiZWZvcmV7Y29udGVudDoiXGYwMDUifS5pY29uLXN0YXItZW1wdHk6YmVmb3Jle2NvbnRlbnQ6IlxmMDA2In0uaWNvbi11c2VyOmJlZm9yZXtjb250ZW50OiJcZjAwNyJ9Lmljb24tZmlsbTpiZWZvcmV7Y29udGVudDoiXGYwMDgifS5pY29uLXRoLWxhcmdlOmJlZm9yZXtjb250ZW50OiJcZjAwOSJ9Lmljb24tdGg6YmVmb3Jle2NvbnRlbnQ6IlxmMDBhIn0uaWNvbi10aC1saXN0OmJlZm9yZXtjb250ZW50OiJcZjAwYiJ9Lmljb24tb2s6YmVmb3Jle2NvbnRlbnQ6IlxmMDBjIn0uaWNvbi1yZW1vdmU6YmVmb3Jle2NvbnRlbnQ6IlxmMDBkIn0uaWNvbi16b29tLWluOmJlZm9yZXtjb250ZW50OiJcZjAwZSJ9Lmljb24tem9vbS1vdXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDEwIn0uaWNvbi1vZmY6YmVmb3Jle2NvbnRlbnQ6IlxmMDExIn0uaWNvbi1zaWduYWw6YmVmb3Jle2NvbnRlbnQ6IlxmMDEyIn0uaWNvbi1jb2c6YmVmb3Jle2NvbnRlbnQ6IlxmMDEzIn0uaWNvbi10cmFzaDpiZWZvcmV7Y29udGVudDoiXGYwMTQifS5pY29uLWhvbWU6YmVmb3Jle2NvbnRlbnQ6IlxmMDE1In0uaWNvbi1maWxlOmJlZm9yZXtjb250ZW50OiJcZjAxNiJ9Lmljb24tdGltZTpiZWZvcmV7Y29udGVudDoiXGYwMTcifS5pY29uLXJvYWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDE4In0uaWNvbi1kb3dubG9hZC1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDE5In0uaWNvbi1kb3dubG9hZDpiZWZvcmV7Y29udGVudDoiXGYwMWEifS5pY29uLXVwbG9hZDpiZWZvcmV7Y29udGVudDoiXGYwMWIifS5pY29uLWluYm94OmJlZm9yZXtjb250ZW50OiJcZjAxYyJ9Lmljb24tcGxheS1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDFkIn0uaWNvbi1yZXBlYXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDFlIn0uaWNvbi1yZWZyZXNoOmJlZm9yZXtjb250ZW50OiJcZjAyMSJ9Lmljb24tbGlzdC1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDIyIn0uaWNvbi1sb2NrOmJlZm9yZXtjb250ZW50OiJcZjAyMyJ9Lmljb24tZmxhZzpiZWZvcmV7Y29udGVudDoiXGYwMjQifS5pY29uLWhlYWRwaG9uZXM6YmVmb3Jle2NvbnRlbnQ6IlxmMDI1In0uaWNvbi12b2x1bWUtb2ZmOmJlZm9yZXtjb250ZW50OiJcZjAyNiJ9Lmljb24tdm9sdW1lLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMDI3In0uaWNvbi12b2x1bWUtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMDI4In0uaWNvbi1xcmNvZGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDI5In0uaWNvbi1iYXJjb2RlOmJlZm9yZXtjb250ZW50OiJcZjAyYSJ9Lmljb24tdGFnOmJlZm9yZXtjb250ZW50OiJcZjAyYiJ9Lmljb24tdGFnczpiZWZvcmV7Y29udGVudDoiXGYwMmMifS5pY29uLWJvb2s6YmVmb3Jle2NvbnRlbnQ6IlxmMDJkIn0uaWNvbi1ib29rbWFyazpiZWZvcmV7Y29udGVudDoiXGYwMmUifS5pY29uLXByaW50OmJlZm9yZXtjb250ZW50OiJcZjAyZiJ9Lmljb24tY2FtZXJhOmJlZm9yZXtjb250ZW50OiJcZjAzMCJ9Lmljb24tZm9udDpiZWZvcmV7Y29udGVudDoiXGYwMzEifS5pY29uLWJvbGQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDMyIn0uaWNvbi1pdGFsaWM6YmVmb3Jle2NvbnRlbnQ6IlxmMDMzIn0uaWNvbi10ZXh0LWhlaWdodDpiZWZvcmV7Y29udGVudDoiXGYwMzQifS5pY29uLXRleHQtd2lkdGg6YmVmb3Jle2NvbnRlbnQ6IlxmMDM1In0uaWNvbi1hbGlnbi1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjAzNiJ9Lmljb24tYWxpZ24tY2VudGVyOmJlZm9yZXtjb250ZW50OiJcZjAzNyJ9Lmljb24tYWxpZ24tcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDM4In0uaWNvbi1hbGlnbi1qdXN0aWZ5OmJlZm9yZXtjb250ZW50OiJcZjAzOSJ9Lmljb24tbGlzdDpiZWZvcmV7Y29udGVudDoiXGYwM2EifS5pY29uLWluZGVudC1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjAzYiJ9Lmljb24taW5kZW50LXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjAzYyJ9Lmljb24tZmFjZXRpbWUtdmlkZW86YmVmb3Jle2NvbnRlbnQ6IlxmMDNkIn0uaWNvbi1waWN0dXJlOmJlZm9yZXtjb250ZW50OiJcZjAzZSJ9Lmljb24tcGVuY2lsOmJlZm9yZXtjb250ZW50OiJcZjA0MCJ9Lmljb24tbWFwLW1hcmtlcjpiZWZvcmV7Y29udGVudDoiXGYwNDEifS5pY29uLWFkanVzdDpiZWZvcmV7Y29udGVudDoiXGYwNDIifS5pY29uLXRpbnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDQzIn0uaWNvbi1lZGl0OmJlZm9yZXtjb250ZW50OiJcZjA0NCJ9Lmljb24tc2hhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMDQ1In0uaWNvbi1jaGVjazpiZWZvcmV7Y29udGVudDoiXGYwNDYifS5pY29uLW1vdmU6YmVmb3Jle2NvbnRlbnQ6IlxmMDQ3In0uaWNvbi1zdGVwLWJhY2t3YXJkOmJlZm9yZXtjb250ZW50OiJcZjA0OCJ9Lmljb24tZmFzdC1iYWNrd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNDkifS5pY29uLWJhY2t3YXJkOmJlZm9yZXtjb250ZW50OiJcZjA0YSJ9Lmljb24tcGxheTpiZWZvcmV7Y29udGVudDoiXGYwNGIifS5pY29uLXBhdXNlOmJlZm9yZXtjb250ZW50OiJcZjA0YyJ9Lmljb24tc3RvcDpiZWZvcmV7Y29udGVudDoiXGYwNGQifS5pY29uLWZvcndhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDRlIn0uaWNvbi1mYXN0LWZvcndhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDUwIn0uaWNvbi1zdGVwLWZvcndhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDUxIn0uaWNvbi1lamVjdDpiZWZvcmV7Y29udGVudDoiXGYwNTIifS5pY29uLWNoZXZyb24tbGVmdDpiZWZvcmV7Y29udGVudDoiXGYwNTMifS5pY29uLWNoZXZyb24tcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDU0In0uaWNvbi1wbHVzLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDU1In0uaWNvbi1taW51cy1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA1NiJ9Lmljb24tcmVtb3ZlLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDU3In0uaWNvbi1vay1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA1OCJ9Lmljb24tcXVlc3Rpb24tc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwNTkifS5pY29uLWluZm8tc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwNWEifS5pY29uLXNjcmVlbnNob3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMDViIn0uaWNvbi1yZW1vdmUtY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjA1YyJ9Lmljb24tb2stY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjA1ZCJ9Lmljb24tYmFuLWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYwNWUifS5pY29uLWFycm93LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDYwIn0uaWNvbi1hcnJvdy1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYwNjEifS5pY29uLWFycm93LXVwOmJlZm9yZXtjb250ZW50OiJcZjA2MiJ9Lmljb24tYXJyb3ctZG93bjpiZWZvcmV7Y29udGVudDoiXGYwNjMifS5pY29uLXNoYXJlLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwNjQifS5pY29uLXJlc2l6ZS1mdWxsOmJlZm9yZXtjb250ZW50OiJcZjA2NSJ9Lmljb24tcmVzaXplLXNtYWxsOmJlZm9yZXtjb250ZW50OiJcZjA2NiJ9Lmljb24tcGx1czpiZWZvcmV7Y29udGVudDoiXGYwNjcifS5pY29uLW1pbnVzOmJlZm9yZXtjb250ZW50OiJcZjA2OCJ9Lmljb24tYXN0ZXJpc2s6YmVmb3Jle2NvbnRlbnQ6IlxmMDY5In0uaWNvbi1leGNsYW1hdGlvbi1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA2YSJ9Lmljb24tZ2lmdDpiZWZvcmV7Y29udGVudDoiXGYwNmIifS5pY29uLWxlYWY6YmVmb3Jle2NvbnRlbnQ6IlxmMDZjIn0uaWNvbi1maXJlOmJlZm9yZXtjb250ZW50OiJcZjA2ZCJ9Lmljb24tZXllLW9wZW46YmVmb3Jle2NvbnRlbnQ6IlxmMDZlIn0uaWNvbi1leWUtY2xvc2U6YmVmb3Jle2NvbnRlbnQ6IlxmMDcwIn0uaWNvbi13YXJuaW5nLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDcxIn0uaWNvbi1wbGFuZTpiZWZvcmV7Y29udGVudDoiXGYwNzIifS5pY29uLWNhbGVuZGFyOmJlZm9yZXtjb250ZW50OiJcZjA3MyJ9Lmljb24tcmFuZG9tOmJlZm9yZXtjb250ZW50OiJcZjA3NCJ9Lmljb24tY29tbWVudDpiZWZvcmV7Y29udGVudDoiXGYwNzUifS5pY29uLW1hZ25ldDpiZWZvcmV7Y29udGVudDoiXGYwNzYifS5pY29uLWNoZXZyb24tdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMDc3In0uaWNvbi1jaGV2cm9uLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMDc4In0uaWNvbi1yZXR3ZWV0OmJlZm9yZXtjb250ZW50OiJcZjA3OSJ9Lmljb24tc2hvcHBpbmctY2FydDpiZWZvcmV7Y29udGVudDoiXGYwN2EifS5pY29uLWZvbGRlci1jbG9zZTpiZWZvcmV7Y29udGVudDoiXGYwN2IifS5pY29uLWZvbGRlci1vcGVuOmJlZm9yZXtjb250ZW50OiJcZjA3YyJ9Lmljb24tcmVzaXplLXZlcnRpY2FsOmJlZm9yZXtjb250ZW50OiJcZjA3ZCJ9Lmljb24tcmVzaXplLWhvcml6b250YWw6YmVmb3Jle2NvbnRlbnQ6IlxmMDdlIn0uaWNvbi1iYXItY2hhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDgwIn0uaWNvbi10d2l0dGVyLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDgxIn0uaWNvbi1mYWNlYm9vay1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA4MiJ9Lmljb24tY2FtZXJhLXJldHJvOmJlZm9yZXtjb250ZW50OiJcZjA4MyJ9Lmljb24ta2V5OmJlZm9yZXtjb250ZW50OiJcZjA4NCJ9Lmljb24tY29nczpiZWZvcmV7Y29udGVudDoiXGYwODUifS5pY29uLWNvbW1lbnRzOmJlZm9yZXtjb250ZW50OiJcZjA4NiJ9Lmljb24tdGh1bWJzLXVwOmJlZm9yZXtjb250ZW50OiJcZjA4NyJ9Lmljb24tdGh1bWJzLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMDg4In0uaWNvbi1zdGFyLWhhbGY6YmVmb3Jle2NvbnRlbnQ6IlxmMDg5In0uaWNvbi1oZWFydC1lbXB0eTpiZWZvcmV7Y29udGVudDoiXGYwOGEifS5pY29uLXNpZ25vdXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDhiIn0uaWNvbi1saW5rZWRpbi1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA4YyJ9Lmljb24tcHVzaHBpbjpiZWZvcmV7Y29udGVudDoiXGYwOGQifS5pY29uLWV4dGVybmFsLWxpbms6YmVmb3Jle2NvbnRlbnQ6IlxmMDhlIn0uaWNvbi1zaWduaW46YmVmb3Jle2NvbnRlbnQ6IlxmMDkwIn0uaWNvbi10cm9waHk6YmVmb3Jle2NvbnRlbnQ6IlxmMDkxIn0uaWNvbi1naXRodWItc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwOTIifS5pY29uLXVwbG9hZC1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDkzIn0uaWNvbi1sZW1vbjpiZWZvcmV7Y29udGVudDoiXGYwOTQifS5pY29uLXBob25lOmJlZm9yZXtjb250ZW50OiJcZjA5NSJ9Lmljb24tY2hlY2stZW1wdHk6YmVmb3Jle2NvbnRlbnQ6IlxmMDk2In0uaWNvbi1ib29rbWFyay1lbXB0eTpiZWZvcmV7Y29udGVudDoiXGYwOTcifS5pY29uLXBob25lLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDk4In0uaWNvbi10d2l0dGVyOmJlZm9yZXtjb250ZW50OiJcZjA5OSJ9Lmljb24tZmFjZWJvb2s6YmVmb3Jle2NvbnRlbnQ6IlxmMDlhIn0uaWNvbi1naXRodWI6YmVmb3Jle2NvbnRlbnQ6IlxmMDliIn0uaWNvbi11bmxvY2s6YmVmb3Jle2NvbnRlbnQ6IlxmMDljIn0uaWNvbi1jcmVkaXQtY2FyZDpiZWZvcmV7Y29udGVudDoiXGYwOWQifS5pY29uLXJzczpiZWZvcmV7Y29udGVudDoiXGYwOWUifS5pY29uLWhkZDpiZWZvcmV7Y29udGVudDoiXGYwYTAifS5pY29uLWJ1bGxob3JuOmJlZm9yZXtjb250ZW50OiJcZjBhMSJ9Lmljb24tYmVsbDpiZWZvcmV7Y29udGVudDoiXGYwYTIifS5pY29uLWNlcnRpZmljYXRlOmJlZm9yZXtjb250ZW50OiJcZjBhMyJ9Lmljb24taGFuZC1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYwYTQifS5pY29uLWhhbmQtbGVmdDpiZWZvcmV7Y29udGVudDoiXGYwYTUifS5pY29uLWhhbmQtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMGE2In0uaWNvbi1oYW5kLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMGE3In0uaWNvbi1jaXJjbGUtYXJyb3ctbGVmdDpiZWZvcmV7Y29udGVudDoiXGYwYTgifS5pY29uLWNpcmNsZS1hcnJvdy1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYwYTkifS5pY29uLWNpcmNsZS1hcnJvdy11cDpiZWZvcmV7Y29udGVudDoiXGYwYWEifS5pY29uLWNpcmNsZS1hcnJvdy1kb3duOmJlZm9yZXtjb250ZW50OiJcZjBhYiJ9Lmljb24tZ2xvYmU6YmVmb3Jle2NvbnRlbnQ6IlxmMGFjIn0uaWNvbi13cmVuY2g6YmVmb3Jle2NvbnRlbnQ6IlxmMGFkIn0uaWNvbi10YXNrczpiZWZvcmV7Y29udGVudDoiXGYwYWUifS5pY29uLWZpbHRlcjpiZWZvcmV7Y29udGVudDoiXGYwYjAifS5pY29uLWJyaWVmY2FzZTpiZWZvcmV7Y29udGVudDoiXGYwYjEifS5pY29uLWZ1bGxzY3JlZW46YmVmb3Jle2NvbnRlbnQ6IlxmMGIyIn0uaWNvbi1ncm91cDpiZWZvcmV7Y29udGVudDoiXGYwYzAifS5pY29uLWxpbms6YmVmb3Jle2NvbnRlbnQ6IlxmMGMxIn0uaWNvbi1jbG91ZDpiZWZvcmV7Y29udGVudDoiXGYwYzIifS5pY29uLWJlYWtlcjpiZWZvcmV7Y29udGVudDoiXGYwYzMifS5pY29uLWN1dDpiZWZvcmV7Y29udGVudDoiXGYwYzQifS5pY29uLWNvcHk6YmVmb3Jle2NvbnRlbnQ6IlxmMGM1In0uaWNvbi1wYXBlci1jbGlwOmJlZm9yZXtjb250ZW50OiJcZjBjNiJ9Lmljb24tc2F2ZTpiZWZvcmV7Y29udGVudDoiXGYwYzcifS5pY29uLXNpZ24tYmxhbms6YmVmb3Jle2NvbnRlbnQ6IlxmMGM4In0uaWNvbi1yZW9yZGVyOmJlZm9yZXtjb250ZW50OiJcZjBjOSJ9Lmljb24tbGlzdC11bDpiZWZvcmV7Y29udGVudDoiXGYwY2EifS5pY29uLWxpc3Qtb2w6YmVmb3Jle2NvbnRlbnQ6IlxmMGNiIn0uaWNvbi1zdHJpa2V0aHJvdWdoOmJlZm9yZXtjb250ZW50OiJcZjBjYyJ9Lmljb24tdW5kZXJsaW5lOmJlZm9yZXtjb250ZW50OiJcZjBjZCJ9Lmljb24tdGFibGU6YmVmb3Jle2NvbnRlbnQ6IlxmMGNlIn0uaWNvbi1tYWdpYzpiZWZvcmV7Y29udGVudDoiXGYwZDAifS5pY29uLXRydWNrOmJlZm9yZXtjb250ZW50OiJcZjBkMSJ9Lmljb24tcGludGVyZXN0OmJlZm9yZXtjb250ZW50OiJcZjBkMiJ9Lmljb24tcGludGVyZXN0LXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMGQzIn0uaWNvbi1nb29nbGUtcGx1cy1zaWduOmJlZm9yZXtjb250ZW50OiJcZjBkNCJ9Lmljb24tZ29vZ2xlLXBsdXM6YmVmb3Jle2NvbnRlbnQ6IlxmMGQ1In0uaWNvbi1tb25leTpiZWZvcmV7Y29udGVudDoiXGYwZDYifS5pY29uLWNhcmV0LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMGQ3In0uaWNvbi1jYXJldC11cDpiZWZvcmV7Y29udGVudDoiXGYwZDgifS5pY29uLWNhcmV0LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGQ5In0uaWNvbi1jYXJldC1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYwZGEifS5pY29uLWNvbHVtbnM6YmVmb3Jle2NvbnRlbnQ6IlxmMGRiIn0uaWNvbi1zb3J0OmJlZm9yZXtjb250ZW50OiJcZjBkYyJ9Lmljb24tc29ydC1kb3duOmJlZm9yZXtjb250ZW50OiJcZjBkZCJ9Lmljb24tc29ydC11cDpiZWZvcmV7Y29udGVudDoiXGYwZGUifS5pY29uLWVudmVsb3BlLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwZTAifS5pY29uLWxpbmtlZGluOmJlZm9yZXtjb250ZW50OiJcZjBlMSJ9Lmljb24tdW5kbzpiZWZvcmV7Y29udGVudDoiXGYwZTIifS5pY29uLWxlZ2FsOmJlZm9yZXtjb250ZW50OiJcZjBlMyJ9Lmljb24tZGFzaGJvYXJkOmJlZm9yZXtjb250ZW50OiJcZjBlNCJ9Lmljb24tY29tbWVudC1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGU1In0uaWNvbi1jb21tZW50cy1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGU2In0uaWNvbi1ib2x0OmJlZm9yZXtjb250ZW50OiJcZjBlNyJ9Lmljb24tc2l0ZW1hcDpiZWZvcmV7Y29udGVudDoiXGYwZTgifS5pY29uLXVtYnJlbGxhOmJlZm9yZXtjb250ZW50OiJcZjBlOSJ9Lmljb24tcGFzdGU6YmVmb3Jle2NvbnRlbnQ6IlxmMGVhIn0uaWNvbi1saWdodGJ1bGI6YmVmb3Jle2NvbnRlbnQ6IlxmMGViIn0uaWNvbi1leGNoYW5nZTpiZWZvcmV7Y29udGVudDoiXGYwZWMifS5pY29uLWNsb3VkLWRvd25sb2FkOmJlZm9yZXtjb250ZW50OiJcZjBlZCJ9Lmljb24tY2xvdWQtdXBsb2FkOmJlZm9yZXtjb250ZW50OiJcZjBlZSJ9Lmljb24tdXNlci1tZDpiZWZvcmV7Y29udGVudDoiXGYwZjAifS5pY29uLXN0ZXRob3Njb3BlOmJlZm9yZXtjb250ZW50OiJcZjBmMSJ9Lmljb24tc3VpdGNhc2U6YmVmb3Jle2NvbnRlbnQ6IlxmMGYyIn0uaWNvbi1iZWxsLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwZjMifS5pY29uLWNvZmZlZTpiZWZvcmV7Y29udGVudDoiXGYwZjQifS5pY29uLWZvb2Q6YmVmb3Jle2NvbnRlbnQ6IlxmMGY1In0uaWNvbi1maWxlLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwZjYifS5pY29uLWJ1aWxkaW5nOmJlZm9yZXtjb250ZW50OiJcZjBmNyJ9Lmljb24taG9zcGl0YWw6YmVmb3Jle2NvbnRlbnQ6IlxmMGY4In0uaWNvbi1hbWJ1bGFuY2U6YmVmb3Jle2NvbnRlbnQ6IlxmMGY5In0uaWNvbi1tZWRraXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGZhIn0uaWNvbi1maWdodGVyLWpldDpiZWZvcmV7Y29udGVudDoiXGYwZmIifS5pY29uLWJlZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMGZjIn0uaWNvbi1oLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMGZkIn0uaWNvbi1wbHVzLXNpZ24tYWx0OmJlZm9yZXtjb250ZW50OiJcZjBmZSJ9Lmljb24tZG91YmxlLWFuZ2xlLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTAwIn0uaWNvbi1kb3VibGUtYW5nbGUtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTAxIn0uaWNvbi1kb3VibGUtYW5nbGUtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMTAyIn0uaWNvbi1kb3VibGUtYW5nbGUtZG93bjpiZWZvcmV7Y29udGVudDoiXGYxMDMifS5pY29uLWFuZ2xlLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTA0In0uaWNvbi1hbmdsZS1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYxMDUifS5pY29uLWFuZ2xlLXVwOmJlZm9yZXtjb250ZW50OiJcZjEwNiJ9Lmljb24tYW5nbGUtZG93bjpiZWZvcmV7Y29udGVudDoiXGYxMDcifS5pY29uLWRlc2t0b3A6YmVmb3Jle2NvbnRlbnQ6IlxmMTA4In0uaWNvbi1sYXB0b3A6YmVmb3Jle2NvbnRlbnQ6IlxmMTA5In0uaWNvbi10YWJsZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTBhIn0uaWNvbi1tb2JpbGUtcGhvbmU6YmVmb3Jle2NvbnRlbnQ6IlxmMTBiIn0uaWNvbi1jaXJjbGUtYmxhbms6YmVmb3Jle2NvbnRlbnQ6IlxmMTBjIn0uaWNvbi1xdW90ZS1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjEwZCJ9Lmljb24tcXVvdGUtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTBlIn0uaWNvbi1zcGlubmVyOmJlZm9yZXtjb250ZW50OiJcZjExMCJ9Lmljb24tY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjExMSJ9Lmljb24tcmVwbHk6YmVmb3Jle2NvbnRlbnQ6IlxmMTEyIn0uaWNvbi1naXRodWItYWx0OmJlZm9yZXtjb250ZW50OiJcZjExMyJ9Lmljb24tZm9sZGVyLWNsb3NlLWFsdDpiZWZvcmV7Y29udGVudDoiXGYxMTQifS5pY29uLWZvbGRlci1vcGVuLWFsdDpiZWZvcmV7Y29udGVudDoiXGYxMTUifQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZGlhZ29uYWxzLXRoaWNrXzE4X2I4MTkwMF80MHg0MC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19kaWFnb25hbHMtdGhpY2tfMThfYjgxOTAwXzQweDQwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNWQ3OGEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZGlhZ29uYWxzLXRoaWNrXzE4X2I4MTkwMF80MHg0MC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZGlhZ29uYWxzLXRoaWNrXzIwXzY2NjY2Nl80MHg0MC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19kaWFnb25hbHMtdGhpY2tfMjBfNjY2NjY2XzQweDQwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYjBhMDQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZGlhZ29uYWxzLXRoaWNrXzIwXzY2NjY2Nl80MHg0MC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZmxhdF8xMF8wMDAwMDBfNDB4MTAwLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWJnX2ZsYXRfMTBfMDAwMDAwXzQweDEwMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzU1ZjhlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWJnX2ZsYXRfMTBfMDAwMDAwXzQweDEwMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xhc3NfMTAwX2Y2ZjZmNl8xeDQwMC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbGFzc18xMDBfZjZmNmY2XzF4NDAwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYTRmYTBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xhc3NfMTAwX2Y2ZjZmNl8xeDQwMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xhc3NfMTAwX2ZkZjVjZV8xeDQwMC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbGFzc18xMDBfZmRmNWNlXzF4NDAwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZjU5ZTJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xhc3NfMTAwX2ZkZjVjZV8xeDQwMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xhc3NfNjVfZmZmZmZmXzF4NDAwLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWJnX2dsYXNzXzY1X2ZmZmZmZl8xeDQwMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjE3MmIzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWJnX2dsYXNzXzY1X2ZmZmZmZl8xeDQwMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xvc3Mtd2F2ZV8zNV9mNmE4MjhfNTAweDEwMC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbG9zcy13YXZlXzM1X2Y2YTgyOF81MDB4MTAwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDM5ZDU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xvc3Mtd2F2ZV8zNV9mNmE4MjhfNTAweDEwMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfaGlnaGxpZ2h0LXNvZnRfMTAwX2VlZWVlZV8xeDEwMC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19oaWdobGlnaHQtc29mdF8xMDBfZWVlZWVlXzF4MTAwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMDg5YjcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfaGlnaGxpZ2h0LXNvZnRfMTAwX2VlZWVlZV8xeDEwMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfaGlnaGxpZ2h0LXNvZnRfNzVfZmZlNDVjXzF4MTAwLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWJnX2hpZ2hsaWdodC1zb2Z0Xzc1X2ZmZTQ1Y18xeDEwMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTYxYjdmOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWJnX2hpZ2hsaWdodC1zb2Z0Xzc1X2ZmZTQ1Y18xeDEwMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktaWNvbnNfMjIyMjIyXzI1NngyNDAucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktaWNvbnNfMjIyMjIyXzI1NngyNDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YzhlMTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc18yMjIyMjJfMjU2eDI0MC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktaWNvbnNfMjI4ZWYxXzI1NngyNDAucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktaWNvbnNfMjI4ZWYxXzI1NngyNDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNjhjNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc18yMjhlZjFfMjU2eDI0MC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktaWNvbnNfZWY4YzA4XzI1NngyNDAucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktaWNvbnNfZWY4YzA4XzI1NngyNDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YmJmZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc19lZjhjMDhfMjU2eDI0MC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktaWNvbnNfZmZkMjdhXzI1NngyNDAucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktaWNvbnNfZmZkMjdhXzI1NngyNDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MzViNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc19mZmQyN2FfMjU2eDI0MC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktaWNvbnNfZmZmZmZmXzI1NngyNDAucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktaWNvbnNfZmZmZmZmXzI1NngyNDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNjZmNTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc19mZmZmZmZfMjU2eDI0MC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnktdWkubWluLmNzcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLm1pbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzQ4NmVjMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLm1pbi5jc3MKQEAgLTAsMCArMSw3IEBACisvKiEgalF1ZXJ5IFVJIC0gdjEuMTEuNCAtIDIwMTUtMDMtMTcKKyogaHR0cDovL2pxdWVyeXVpLmNvbQorKiBJbmNsdWRlczogY29yZS5jc3MsIGRhdGVwaWNrZXIuY3NzLCB0aGVtZS5jc3MKKyogVG8gdmlldyBhbmQgbW9kaWZ5IHRoaXMgdGhlbWUsIHZpc2l0IGh0dHA6Ly9qcXVlcnl1aS5jb20vdGhlbWVyb2xsZXIvP2ZmRGVmYXVsdD1UcmVidWNoZXQlMjBNUyUyQ1RhaG9tYSUyQ1ZlcmRhbmElMkNBcmlhbCUyQ3NhbnMtc2VyaWYmZndEZWZhdWx0PWJvbGQmZnNEZWZhdWx0PTEuMWVtJmNvcm5lclJhZGl1cz00cHgmYmdDb2xvckhlYWRlcj1mNmE4MjgmYmdUZXh0dXJlSGVhZGVyPWdsb3NzX3dhdmUmYmdJbWdPcGFjaXR5SGVhZGVyPTM1JmJvcmRlckNvbG9ySGVhZGVyPWU3OGYwOCZmY0hlYWRlcj1mZmZmZmYmaWNvbkNvbG9ySGVhZGVyPWZmZmZmZiZiZ0NvbG9yQ29udGVudD1lZWVlZWUmYmdUZXh0dXJlQ29udGVudD1oaWdobGlnaHRfc29mdCZiZ0ltZ09wYWNpdHlDb250ZW50PTEwMCZib3JkZXJDb2xvckNvbnRlbnQ9ZGRkZGRkJmZjQ29udGVudD0zMzMzMzMmaWNvbkNvbG9yQ29udGVudD0yMjIyMjImYmdDb2xvckRlZmF1bHQ9ZjZmNmY2JmJnVGV4dHVyZURlZmF1bHQ9Z2xhc3MmYmdJbWdPcGFjaXR5RGVmYXVsdD0xMDAmYm9yZGVyQ29sb3JEZWZhdWx0PWNjY2NjYyZmY0RlZmF1bHQ9MWM5NGM0Jmljb25Db2xvckRlZmF1bHQ9ZWY4YzA4JmJnQ29sb3JIb3Zlcj1mZGY1Y2UmYmdUZXh0dXJlSG92ZXI9Z2xhc3MmYmdJbWdPcGFjaXR5SG92ZXI9MTAwJmJvcmRlckNvbG9ySG92ZXI9ZmJjYjA5JmZjSG92ZXI9Yzc3NDA1Jmljb25Db2xvckhvdmVyPWVmOGMwOCZiZ0NvbG9yQWN0aXZlPWZmZmZmZiZiZ1RleHR1cmVBY3RpdmU9Z2xhc3MmYmdJbWdPcGFjaXR5QWN0aXZlPTY1JmJvcmRlckNvbG9yQWN0aXZlPWZiZDg1MCZmY0FjdGl2ZT1lYjhmMDAmaWNvbkNvbG9yQWN0aXZlPWVmOGMwOCZiZ0NvbG9ySGlnaGxpZ2h0PWZmZTQ1YyZiZ1RleHR1cmVIaWdobGlnaHQ9aGlnaGxpZ2h0X3NvZnQmYmdJbWdPcGFjaXR5SGlnaGxpZ2h0PTc1JmJvcmRlckNvbG9ySGlnaGxpZ2h0PWZlZDIyZiZmY0hpZ2hsaWdodD0zNjM2MzYmaWNvbkNvbG9ySGlnaGxpZ2h0PTIyOGVmMSZiZ0NvbG9yRXJyb3I9YjgxOTAwJmJnVGV4dHVyZUVycm9yPWRpYWdvbmFsc190aGljayZiZ0ltZ09wYWNpdHlFcnJvcj0xOCZib3JkZXJDb2xvckVycm9yPWNkMGEwYSZmY0Vycm9yPWZmZmZmZiZpY29uQ29sb3JFcnJvcj1mZmQyN2EmYmdDb2xvck92ZXJsYXk9NjY2NjY2JmJnVGV4dHVyZU92ZXJsYXk9ZGlhZ29uYWxzX3RoaWNrJmJnSW1nT3BhY2l0eU92ZXJsYXk9MjAmb3BhY2l0eU92ZXJsYXk9NTAmYmdDb2xvclNoYWRvdz0wMDAwMDAmYmdUZXh0dXJlU2hhZG93PWZsYXQmYmdJbWdPcGFjaXR5U2hhZG93PTEwJm9wYWNpdHlTaGFkb3c9MjAmdGhpY2tuZXNzU2hhZG93PTVweCZvZmZzZXRUb3BTaGFkb3c9LTVweCZvZmZzZXRMZWZ0U2hhZG93PS01cHgmY29ybmVyUmFkaXVzU2hhZG93PTVweAorKiBDb3B5cmlnaHQgMjAxNSBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzOyBMaWNlbnNlZCBNSVQgKi8KKworLnVpLWhlbHBlci1oaWRkZW57ZGlzcGxheTpub25lfS51aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGV7Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHh9LnVpLWhlbHBlci1yZXNldHttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7b3V0bGluZTowO2xpbmUtaGVpZ2h0OjEuMzt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXNpemU6MTAwJTtsaXN0LXN0eWxlOm5vbmV9LnVpLWhlbHBlci1jbGVhcmZpeDpiZWZvcmUsLnVpLWhlbHBlci1jbGVhcmZpeDphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6dGFibGU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfS51aS1oZWxwZXItY2xlYXJmaXg6YWZ0ZXJ7Y2xlYXI6Ym90aH0udWktaGVscGVyLWNsZWFyZml4e21pbi1oZWlnaHQ6MH0udWktaGVscGVyLXpmaXh7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0b3A6MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO2ZpbHRlcjpBbHBoYShPcGFjaXR5PTApfS51aS1mcm9udHt6LWluZGV4OjEwMH0udWktc3RhdGUtZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHQhaW1wb3J0YW50fS51aS1pY29ue2Rpc3BsYXk6YmxvY2s7dGV4dC1pbmRlbnQ6LTk5OTk5cHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0udWktd2lkZ2V0LW92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LnVpLWRhdGVwaWNrZXJ7d2lkdGg6MTdlbTtwYWRkaW5nOi4yZW0gLjJlbSAwO2Rpc3BsYXk6bm9uZX0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1oZWFkZXJ7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzouMmVtIDB9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldiwudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDoycHg7d2lkdGg6MS44ZW07aGVpZ2h0OjEuOGVtfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYtaG92ZXIsLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dC1ob3Zlcnt0b3A6MXB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXZ7bGVmdDoycHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dHtyaWdodDoycHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3ZlcntsZWZ0OjFweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0LWhvdmVye3JpZ2h0OjFweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2IHNwYW4sLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dCBzcGFue2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LThweDt0b3A6NTAlO21hcmdpbi10b3A6LThweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci10aXRsZXttYXJnaW46MCAyLjNlbTtsaW5lLWhlaWdodDoxLjhlbTt0ZXh0LWFsaWduOmNlbnRlcn0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci10aXRsZSBzZWxlY3R7Zm9udC1zaXplOjFlbTttYXJnaW46MXB4IDB9LnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsLnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhcnt3aWR0aDo0NSV9LnVpLWRhdGVwaWNrZXIgdGFibGV7d2lkdGg6MTAwJTtmb250LXNpemU6LjllbTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7bWFyZ2luOjAgMCAuNGVtfS51aS1kYXRlcGlja2VyIHRoe3BhZGRpbmc6LjdlbSAuM2VtO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtd2VpZ2h0OmJvbGQ7Ym9yZGVyOjB9LnVpLWRhdGVwaWNrZXIgdGR7Ym9yZGVyOjA7cGFkZGluZzoxcHh9LnVpLWRhdGVwaWNrZXIgdGQgc3BhbiwudWktZGF0ZXBpY2tlciB0ZCBhe2Rpc3BsYXk6YmxvY2s7cGFkZGluZzouMmVtO3RleHQtYWxpZ246cmlnaHQ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZXtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7bWFyZ2luOi43ZW0gMCAwIDA7cGFkZGluZzowIC4yZW07Ym9yZGVyLWxlZnQ6MDtib3JkZXItcmlnaHQ6MDtib3JkZXItYm90dG9tOjB9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b257ZmxvYXQ6cmlnaHQ7bWFyZ2luOi41ZW0gLjJlbSAuNGVtO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6LjJlbSAuNmVtIC4zZW0gLjZlbTt3aWR0aDphdXRvO292ZXJmbG93OnZpc2libGV9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24udWktZGF0ZXBpY2tlci1jdXJyZW50e2Zsb2F0OmxlZnR9LnVpLWRhdGVwaWNrZXIudWktZGF0ZXBpY2tlci1tdWx0aXt3aWR0aDphdXRvfS51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3Vwe2Zsb2F0OmxlZnR9LnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAgdGFibGV7d2lkdGg6OTUlO21hcmdpbjowIGF1dG8gLjRlbX0udWktZGF0ZXBpY2tlci1tdWx0aS0yIC51aS1kYXRlcGlja2VyLWdyb3Vwe3dpZHRoOjUwJX0udWktZGF0ZXBpY2tlci1tdWx0aS0zIC51aS1kYXRlcGlja2VyLWdyb3Vwe3dpZHRoOjMzLjMlfS51aS1kYXRlcGlja2VyLW11bHRpLTQgLnVpLWRhdGVwaWNrZXItZ3JvdXB7d2lkdGg6MjUlfS51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QgLnVpLWRhdGVwaWNrZXItaGVhZGVyLC51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXJ7Ym9yZGVyLWxlZnQtd2lkdGg6MH0udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1idXR0b25wYW5le2NsZWFyOmxlZnR9LnVpLWRhdGVwaWNrZXItcm93LWJyZWFre2NsZWFyOmJvdGg7d2lkdGg6MTAwJTtmb250LXNpemU6MH0udWktZGF0ZXBpY2tlci1ydGx7ZGlyZWN0aW9uOnJ0bH0udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItcHJldntyaWdodDoycHg7bGVmdDphdXRvfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1uZXh0e2xlZnQ6MnB4O3JpZ2h0OmF1dG99LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLXByZXY6aG92ZXJ7cmlnaHQ6MXB4O2xlZnQ6YXV0b30udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItbmV4dDpob3ZlcntsZWZ0OjFweDtyaWdodDphdXRvfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1idXR0b25wYW5le2NsZWFyOnJpZ2h0fS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbntmbG9hdDpsZWZ0fS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbi51aS1kYXRlcGlja2VyLWN1cnJlbnQsLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3Vwe2Zsb2F0OnJpZ2h0fS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IC51aS1kYXRlcGlja2VyLWhlYWRlciwudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIC51aS1kYXRlcGlja2VyLWhlYWRlcntib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdC13aWR0aDoxcHh9LnVpLXdpZGdldHtmb250LWZhbWlseTpUcmVidWNoZXQgTVMsVGFob21hLFZlcmRhbmEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MS4xZW19LnVpLXdpZGdldCAudWktd2lkZ2V0e2ZvbnQtc2l6ZToxZW19LnVpLXdpZGdldCBpbnB1dCwudWktd2lkZ2V0IHNlbGVjdCwudWktd2lkZ2V0IHRleHRhcmVhLC51aS13aWRnZXQgYnV0dG9ue2ZvbnQtZmFtaWx5OlRyZWJ1Y2hldCBNUyxUYWhvbWEsVmVyZGFuYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxZW19LnVpLXdpZGdldC1jb250ZW50e2JvcmRlcjoxcHggc29saWQgI2RkZDtiYWNrZ3JvdW5kOiNlZWUgdXJsKCJpbWFnZXMvdWktYmdfaGlnaGxpZ2h0LXNvZnRfMTAwX2VlZWVlZV8xeDEwMC5wbmciKSA1MCUgdG9wIHJlcGVhdC14O2NvbG9yOiMzMzN9LnVpLXdpZGdldC1jb250ZW50IGF7Y29sb3I6IzMzM30udWktd2lkZ2V0LWhlYWRlcntib3JkZXI6MXB4IHNvbGlkICNlNzhmMDg7YmFja2dyb3VuZDojZjZhODI4IHVybCgiaW1hZ2VzL3VpLWJnX2dsb3NzLXdhdmVfMzVfZjZhODI4XzUwMHgxMDAucG5nIikgNTAlIDUwJSByZXBlYXQteDtjb2xvcjojZmZmO2ZvbnQtd2VpZ2h0OmJvbGR9LnVpLXdpZGdldC1oZWFkZXIgYXtjb2xvcjojZmZmfS51aS1zdGF0ZS1kZWZhdWx0LC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZGVmYXVsdCwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZGVmYXVsdHtib3JkZXI6MXB4IHNvbGlkICNjY2M7YmFja2dyb3VuZDojZjZmNmY2IHVybCgiaW1hZ2VzL3VpLWJnX2dsYXNzXzEwMF9mNmY2ZjZfMXg0MDAucG5nIikgNTAlIDUwJSByZXBlYXQteDtmb250LXdlaWdodDpib2xkO2NvbG9yOiMxYzk0YzR9LnVpLXN0YXRlLWRlZmF1bHQgYSwudWktc3RhdGUtZGVmYXVsdCBhOmxpbmssLnVpLXN0YXRlLWRlZmF1bHQgYTp2aXNpdGVke2NvbG9yOiMxYzk0YzQ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVpLXN0YXRlLWhvdmVyLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaG92ZXIsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhvdmVyLC51aS1zdGF0ZS1mb2N1cywudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWZvY3VzLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1mb2N1c3tib3JkZXI6MXB4IHNvbGlkICNmYmNiMDk7YmFja2dyb3VuZDojZmRmNWNlIHVybCgiaW1hZ2VzL3VpLWJnX2dsYXNzXzEwMF9mZGY1Y2VfMXg0MDAucG5nIikgNTAlIDUwJSByZXBlYXQteDtmb250LXdlaWdodDpib2xkO2NvbG9yOiNjNzc0MDV9LnVpLXN0YXRlLWhvdmVyIGEsLnVpLXN0YXRlLWhvdmVyIGE6aG92ZXIsLnVpLXN0YXRlLWhvdmVyIGE6bGluaywudWktc3RhdGUtaG92ZXIgYTp2aXNpdGVkLC51aS1zdGF0ZS1mb2N1cyBhLC51aS1zdGF0ZS1mb2N1cyBhOmhvdmVyLC51aS1zdGF0ZS1mb2N1cyBhOmxpbmssLnVpLXN0YXRlLWZvY3VzIGE6dmlzaXRlZHtjb2xvcjojYzc3NDA1O3RleHQtZGVjb3JhdGlvbjpub25lfS51aS1zdGF0ZS1hY3RpdmUsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1hY3RpdmUsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWFjdGl2ZXtib3JkZXI6MXB4IHNvbGlkICNmYmQ4NTA7YmFja2dyb3VuZDojZmZmIHVybCgiaW1hZ2VzL3VpLWJnX2dsYXNzXzY1X2ZmZmZmZl8xeDQwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6I2ViOGYwMH0udWktc3RhdGUtYWN0aXZlIGEsLnVpLXN0YXRlLWFjdGl2ZSBhOmxpbmssLnVpLXN0YXRlLWFjdGl2ZSBhOnZpc2l0ZWR7Y29sb3I6I2ViOGYwMDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktc3RhdGUtaGlnaGxpZ2h0LC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaGlnaGxpZ2h0LC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1oaWdobGlnaHR7Ym9yZGVyOjFweCBzb2xpZCAjZmVkMjJmO2JhY2tncm91bmQ6I2ZmZTQ1YyB1cmwoImltYWdlcy91aS1iZ19oaWdobGlnaHQtc29mdF83NV9mZmU0NWNfMXgxMDAucG5nIikgNTAlIHRvcCByZXBlYXQteDtjb2xvcjojMzYzNjM2fS51aS1zdGF0ZS1oaWdobGlnaHQgYSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhpZ2hsaWdodCBhLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1oaWdobGlnaHQgYXtjb2xvcjojMzYzNjM2fS51aS1zdGF0ZS1lcnJvciwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWVycm9yLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvcntib3JkZXI6MXB4IHNvbGlkICNjZDBhMGE7YmFja2dyb3VuZDojYjgxOTAwIHVybCgiaW1hZ2VzL3VpLWJnX2RpYWdvbmFscy10aGlja18xOF9iODE5MDBfNDB4NDAucG5nIikgNTAlIDUwJSByZXBlYXQ7Y29sb3I6I2ZmZn0udWktc3RhdGUtZXJyb3IgYSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWVycm9yIGEsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9yIGF7Y29sb3I6I2ZmZn0udWktc3RhdGUtZXJyb3ItdGV4dCwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWVycm9yLXRleHQsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9yLXRleHR7Y29sb3I6I2ZmZn0udWktcHJpb3JpdHktcHJpbWFyeSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXByaW9yaXR5LXByaW1hcnksLnVpLXdpZGdldC1oZWFkZXIgLnVpLXByaW9yaXR5LXByaW1hcnl7Zm9udC13ZWlnaHQ6Ym9sZH0udWktcHJpb3JpdHktc2Vjb25kYXJ5LC51aS13aWRnZXQtY29udGVudCAudWktcHJpb3JpdHktc2Vjb25kYXJ5LC51aS13aWRnZXQtaGVhZGVyIC51aS1wcmlvcml0eS1zZWNvbmRhcnl7b3BhY2l0eTouNztmaWx0ZXI6QWxwaGEoT3BhY2l0eT03MCk7Zm9udC13ZWlnaHQ6bm9ybWFsfS51aS1zdGF0ZS1kaXNhYmxlZCwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWRpc2FibGVkLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1kaXNhYmxlZHtvcGFjaXR5Oi4zNTtmaWx0ZXI6QWxwaGEoT3BhY2l0eT0zNSk7YmFja2dyb3VuZC1pbWFnZTpub25lfS51aS1zdGF0ZS1kaXNhYmxlZCAudWktaWNvbntmaWx0ZXI6QWxwaGEoT3BhY2l0eT0zNSl9LnVpLWljb257d2lkdGg6MTZweDtoZWlnaHQ6MTZweH0udWktaWNvbiwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc18yMjIyMjJfMjU2eDI0MC5wbmciKX0udWktd2lkZ2V0LWhlYWRlciAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zX2ZmZmZmZl8yNTZ4MjQwLnBuZyIpfS51aS1zdGF0ZS1kZWZhdWx0IC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfZWY4YzA4XzI1NngyNDAucG5nIil9LnVpLXN0YXRlLWhvdmVyIC51aS1pY29uLC51aS1zdGF0ZS1mb2N1cyAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zX2VmOGMwOF8yNTZ4MjQwLnBuZyIpfS51aS1zdGF0ZS1hY3RpdmUgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc19lZjhjMDhfMjU2eDI0MC5wbmciKX0udWktc3RhdGUtaGlnaGxpZ2h0IC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfMjI4ZWYxXzI1NngyNDAucG5nIil9LnVpLXN0YXRlLWVycm9yIC51aS1pY29uLC51aS1zdGF0ZS1lcnJvci10ZXh0IC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfZmZkMjdhXzI1NngyNDAucG5nIil9LnVpLWljb24tYmxhbmt7YmFja2dyb3VuZC1wb3NpdGlvbjoxNnB4IDE2cHh9LnVpLWljb24tY2FyYXQtMS1ue2JhY2tncm91bmQtcG9zaXRpb246MCAwfS51aS1pY29uLWNhcmF0LTEtbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAwfS51aS1pY29uLWNhcmF0LTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IDB9LnVpLWljb24tY2FyYXQtMS1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IDB9LnVpLWljb24tY2FyYXQtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggMH0udWktaWNvbi1jYXJhdC0xLXN3e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggMH0udWktaWNvbi1jYXJhdC0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAwfS51aS1pY29uLWNhcmF0LTEtbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggMH0udWktaWNvbi1jYXJhdC0yLW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAwfS51aS1pY29uLWNhcmF0LTItZS13e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IDB9LnVpLWljb24tdHJpYW5nbGUtMS1ue2JhY2tncm91bmQtcG9zaXRpb246MCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLW5le2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLW53e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTItbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTItZS13e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xNnB4fS51aS1pY29uLWFycm93LTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTMycHh9LnVpLWljb24tYXJyb3ctMS1uZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLXN3e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTMycHh9LnVpLWljb24tYXJyb3ctMS13e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMzJweH0udWktaWNvbi1hcnJvdy0yLW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMzJweH0udWktaWNvbi1hcnJvdy0yLW5lLXN3e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0zMnB4fS51aS1pY29uLWFycm93LTItZS13e2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC0zMnB4fS51aS1pY29uLWFycm93LTItc2Utbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTMycHh9LnVpLWljb24tYXJyb3dzdG9wLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMzJweH0udWktaWNvbi1hcnJvd3N0b3AtMS1le2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC0zMnB4fS51aS1pY29uLWFycm93c3RvcC0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMjI0cHggLTMycHh9LnVpLWljb24tYXJyb3dzdG9wLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMzJweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLW5le2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS13e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLW53e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMi1uLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0yLW5lLXN3e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMi1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0yLXNlLW53e2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMjA4cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtNDhweH0udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm4tMS13e2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm4tMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm4tMS1le2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm4tMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC02NHB4fS51aS1pY29uLWFycm93cmVmcmVzaC0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTY0cHh9LnVpLWljb24tYXJyb3dyZWZyZXNoLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtNjRweH0udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1le2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC02NHB4fS51aS1pY29uLWFycm93cmVmcmVzaC0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTY0cHh9LnVpLWljb24tYXJyb3ctNHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTgwcHh9LnVpLWljb24tYXJyb3ctNC1kaWFne2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTgwcHh9LnVpLWljb24tZXh0bGlua3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC04MHB4fS51aS1pY29uLW5ld3dpbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC04MHB4fS51aS1pY29uLXJlZnJlc2h7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtODBweH0udWktaWNvbi1zaHVmZmxle2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTgwcHh9LnVpLWljb24tdHJhbnNmZXItZS13e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTgwcHh9LnVpLWljb24tdHJhbnNmZXJ0aGljay1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTgwcHh9LnVpLWljb24tZm9sZGVyLWNvbGxhcHNlZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTk2cHh9LnVpLWljb24tZm9sZGVyLW9wZW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtOTZweH0udWktaWNvbi1kb2N1bWVudHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC05NnB4fS51aS1pY29uLWRvY3VtZW50LWJ7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtOTZweH0udWktaWNvbi1ub3Rle2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTk2cHh9LnVpLWljb24tbWFpbC1jbG9zZWR7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtOTZweH0udWktaWNvbi1tYWlsLW9wZW57YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtOTZweH0udWktaWNvbi1zdWl0Y2FzZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtOTZweH0udWktaWNvbi1jb21tZW50e2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC05NnB4fS51aS1pY29uLXBlcnNvbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtOTZweH0udWktaWNvbi1wcmludHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtOTZweH0udWktaWNvbi10cmFzaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtOTZweH0udWktaWNvbi1sb2NrZWR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTk2cHh9LnVpLWljb24tdW5sb2NrZWR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjA4cHggLTk2cHh9LnVpLWljb24tYm9va21hcmt7YmFja2dyb3VuZC1wb3NpdGlvbjotMjI0cHggLTk2cHh9LnVpLWljb24tdGFne2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC05NnB4fS51aS1pY29uLWhvbWV7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xMTJweH0udWktaWNvbi1mbGFne2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTExMnB4fS51aS1pY29uLWNhbGVuZGFye2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTExMnB4fS51aS1pY29uLWNhcnR7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTEycHh9LnVpLWljb24tcGVuY2lse2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTExMnB4fS51aS1pY29uLWNsb2Nre2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTExMnB4fS51aS1pY29uLWRpc2t7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTEycHh9LnVpLWljb24tY2FsY3VsYXRvcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTEycHh9LnVpLWljb24tem9vbWlue2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0xMTJweH0udWktaWNvbi16b29tb3V0e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xMTJweH0udWktaWNvbi1zZWFyY2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTExMnB4fS51aS1pY29uLXdyZW5jaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtMTEycHh9LnVpLWljb24tZ2VhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMTEycHh9LnVpLWljb24taGVhcnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjA4cHggLTExMnB4fS51aS1pY29uLXN0YXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMjI0cHggLTExMnB4fS51aS1pY29uLWxpbmt7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTExMnB4fS51aS1pY29uLWNhbmNlbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTEyOHB4fS51aS1pY29uLXBsdXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTI4cHh9LnVpLWljb24tcGx1c3RoaWNre2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTEyOHB4fS51aS1pY29uLW1pbnVze2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTEyOHB4fS51aS1pY29uLW1pbnVzdGhpY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTI4cHh9LnVpLWljb24tY2xvc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTI4cHh9LnVpLWljb24tY2xvc2V0aGlja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xMjhweH0udWktaWNvbi1rZXl7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTEyOHB4fS51aS1pY29uLWxpZ2h0YnVsYntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTI4cHh9LnVpLWljb24tc2Npc3NvcnN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTEyOHB4fS51aS1pY29uLWNsaXBib2FyZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtMTI4cHh9LnVpLWljb24tY29weXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtMTI4cHh9LnVpLWljb24tY29udGFjdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMTI4cHh9LnVpLWljb24taW1hZ2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMjA4cHggLTEyOHB4fS51aS1pY29uLXZpZGVve2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC0xMjhweH0udWktaWNvbi1zY3JpcHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTEyOHB4fS51aS1pY29uLWFsZXJ0e2JhY2tncm91bmQtcG9zaXRpb246MCAtMTQ0cHh9LnVpLWljb24taW5mb3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xNDRweH0udWktaWNvbi1ub3RpY2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTQ0cHh9LnVpLWljb24taGVscHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xNDRweH0udWktaWNvbi1jaGVja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xNDRweH0udWktaWNvbi1idWxsZXR7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTQ0cHh9LnVpLWljb24tcmFkaW8tb257YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTQ0cHh9LnVpLWljb24tcmFkaW8tb2Zme2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xNDRweH0udWktaWNvbi1waW4td3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTQ0cHh9LnVpLWljb24tcGluLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTE0NHB4fS51aS1pY29uLXBsYXl7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNjBweH0udWktaWNvbi1wYXVzZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xNjBweH0udWktaWNvbi1zZWVrLW5leHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTYwcHh9LnVpLWljb24tc2Vlay1wcmV2e2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE2MHB4fS51aS1pY29uLXNlZWstZW5ke2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE2MHB4fS51aS1pY29uLXNlZWstc3RhcnR7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTYwcHh9LnVpLWljb24tc2Vlay1maXJzdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNjBweH0udWktaWNvbi1zdG9we2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE2MHB4fS51aS1pY29uLWVqZWN0e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xNjBweH0udWktaWNvbi12b2x1bWUtb2Zme2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0xNjBweH0udWktaWNvbi12b2x1bWUtb257YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTE2MHB4fS51aS1pY29uLXBvd2Vye2JhY2tncm91bmQtcG9zaXRpb246MCAtMTc2cHh9LnVpLWljb24tc2lnbmFsLWRpYWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTc2cHh9LnVpLWljb24tc2lnbmFse2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE3NnB4fS51aS1pY29uLWJhdHRlcnktMHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xNzZweH0udWktaWNvbi1iYXR0ZXJ5LTF7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTc2cHh9LnVpLWljb24tYmF0dGVyeS0ye2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE3NnB4fS51aS1pY29uLWJhdHRlcnktM3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNzZweH0udWktaWNvbi1jaXJjbGUtcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE5MnB4fS51aS1pY29uLWNpcmNsZS1taW51c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtY2xvc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLW57YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWFycm93LWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1hcnJvdy1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtYXJyb3ctd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWFycm93LW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS16b29taW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS16b29tb3V0e2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtY2hlY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotMjA4cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZXNtYWxsLXBsdXN7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0yMDhweH0udWktaWNvbi1jaXJjbGVzbWFsbC1taW51c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0yMDhweH0udWktaWNvbi1jaXJjbGVzbWFsbC1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0yMDhweH0udWktaWNvbi1zcXVhcmVzbWFsbC1wbHVze2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTIwOHB4fS51aS1pY29uLXNxdWFyZXNtYWxsLW1pbnVze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTIwOHB4fS51aS1pY29uLXNxdWFyZXNtYWxsLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTIwOHB4fS51aS1pY29uLWdyaXAtZG90dGVkLXZlcnRpY2Fse2JhY2tncm91bmQtcG9zaXRpb246MCAtMjI0cHh9LnVpLWljb24tZ3JpcC1kb3R0ZWQtaG9yaXpvbnRhbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0yMjRweH0udWktaWNvbi1ncmlwLXNvbGlkLXZlcnRpY2Fse2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTIyNHB4fS51aS1pY29uLWdyaXAtc29saWQtaG9yaXpvbnRhbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0yMjRweH0udWktaWNvbi1ncmlwc21hbGwtZGlhZ29uYWwtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMjI0cHh9LnVpLWljb24tZ3JpcC1kaWFnb25hbC1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0yMjRweH0udWktY29ybmVyLWFsbCwudWktY29ybmVyLXRvcCwudWktY29ybmVyLWxlZnQsLnVpLWNvcm5lci10bHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweH0udWktY29ybmVyLWFsbCwudWktY29ybmVyLXRvcCwudWktY29ybmVyLXJpZ2h0LC51aS1jb3JuZXItdHJ7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4fS51aS1jb3JuZXItYWxsLC51aS1jb3JuZXItYm90dG9tLC51aS1jb3JuZXItbGVmdCwudWktY29ybmVyLWJse2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4fS51aS1jb3JuZXItYWxsLC51aS1jb3JuZXItYm90dG9tLC51aS1jb3JuZXItcmlnaHQsLnVpLWNvcm5lci1icntib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHh9LnVpLXdpZGdldC1vdmVybGF5e2JhY2tncm91bmQ6IzY2NiB1cmwoImltYWdlcy91aS1iZ19kaWFnb25hbHMtdGhpY2tfMjBfNjY2NjY2XzQweDQwLnBuZyIpIDUwJSA1MCUgcmVwZWF0O29wYWNpdHk6LjU7ZmlsdGVyOkFscGhhKE9wYWNpdHk9NTApfS51aS13aWRnZXQtc2hhZG93e21hcmdpbjotNXB4IDAgMCAtNXB4O3BhZGRpbmc6NXB4O2JhY2tncm91bmQ6IzAwMCB1cmwoImltYWdlcy91aS1iZ19mbGF0XzEwXzAwMDAwMF80MHgxMDAucG5nIikgNTAlIDUwJSByZXBlYXQteDtvcGFjaXR5Oi4yO2ZpbHRlcjpBbHBoYShPcGFjaXR5PTIwKTtib3JkZXItcmFkaXVzOjVweH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS11aS5zdHJ1Y3R1cmUubWluLmNzcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLnN0cnVjdHVyZS5taW4uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQxNTc4YTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS11aS5zdHJ1Y3R1cmUubWluLmNzcwpAQCAtMCwwICsxLDUgQEAKKy8qISBqUXVlcnkgVUkgLSB2MS4xMS40IC0gMjAxNS0wMy0xNQorKiBodHRwOi8vanF1ZXJ5dWkuY29tCisqIENvcHlyaWdodCAyMDE1IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqLworCisudWktaGVscGVyLWhpZGRlbntkaXNwbGF5Om5vbmV9LnVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweH0udWktaGVscGVyLXJlc2V0e21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtvdXRsaW5lOjA7bGluZS1oZWlnaHQ6MS4zO3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxMDAlO2xpc3Qtc3R5bGU6bm9uZX0udWktaGVscGVyLWNsZWFyZml4OmJlZm9yZSwudWktaGVscGVyLWNsZWFyZml4OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTp0YWJsZTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9LnVpLWhlbHBlci1jbGVhcmZpeDphZnRlcntjbGVhcjpib3RofS51aS1oZWxwZXItY2xlYXJmaXh7bWluLWhlaWdodDowfS51aS1oZWxwZXItemZpeHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RvcDowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MCl9LnVpLWZyb250e3otaW5kZXg6MTAwfS51aS1zdGF0ZS1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdCFpbXBvcnRhbnR9LnVpLWljb257ZGlzcGxheTpibG9jazt0ZXh0LWluZGVudDotOTk5OTlweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fS51aS13aWRnZXQtb3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0udWktZGF0ZXBpY2tlcnt3aWR0aDoxN2VtO3BhZGRpbmc6LjJlbSAuMmVtIDA7ZGlzcGxheTpub25lfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWhlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOi4yZW0gMH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjJweDt3aWR0aDoxLjhlbTtoZWlnaHQ6MS44ZW19LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciwudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0LWhvdmVye3RvcDoxcHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldntsZWZ0OjJweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0e3JpZ2h0OjJweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVye2xlZnQ6MXB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQtaG92ZXJ7cmlnaHQ6MXB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYgc3BhbiwudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0IHNwYW57ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTttYXJnaW4tbGVmdDotOHB4O3RvcDo1MCU7bWFyZ2luLXRvcDotOHB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxle21hcmdpbjowIDIuM2VtO2xpbmUtaGVpZ2h0OjEuOGVtO3RleHQtYWxpZ246Y2VudGVyfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxlIHNlbGVjdHtmb250LXNpemU6MWVtO21hcmdpbjoxcHggMH0udWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwudWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFye3dpZHRoOjQ1JX0udWktZGF0ZXBpY2tlciB0YWJsZXt3aWR0aDoxMDAlO2ZvbnQtc2l6ZTouOWVtO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTttYXJnaW46MCAwIC40ZW19LnVpLWRhdGVwaWNrZXIgdGh7cGFkZGluZzouN2VtIC4zZW07dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtib3JkZXI6MH0udWktZGF0ZXBpY2tlciB0ZHtib3JkZXI6MDtwYWRkaW5nOjFweH0udWktZGF0ZXBpY2tlciB0ZCBzcGFuLC51aS1kYXRlcGlja2VyIHRkIGF7ZGlzcGxheTpibG9jaztwYWRkaW5nOi4yZW07dGV4dC1hbGlnbjpyaWdodDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5le2JhY2tncm91bmQtaW1hZ2U6bm9uZTttYXJnaW46LjdlbSAwIDAgMDtwYWRkaW5nOjAgLjJlbTtib3JkZXItbGVmdDowO2JvcmRlci1yaWdodDowO2JvcmRlci1ib3R0b206MH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbntmbG9hdDpyaWdodDttYXJnaW46LjVlbSAuMmVtIC40ZW07Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzouMmVtIC42ZW0gLjNlbSAuNmVtO3dpZHRoOmF1dG87b3ZlcmZsb3c6dmlzaWJsZX0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbi51aS1kYXRlcGlja2VyLWN1cnJlbnR7ZmxvYXQ6bGVmdH0udWktZGF0ZXBpY2tlci51aS1kYXRlcGlja2VyLW11bHRpe3dpZHRoOmF1dG99LnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXB7ZmxvYXQ6bGVmdH0udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cCB0YWJsZXt3aWR0aDo5NSU7bWFyZ2luOjAgYXV0byAuNGVtfS51aS1kYXRlcGlja2VyLW11bHRpLTIgLnVpLWRhdGVwaWNrZXItZ3JvdXB7d2lkdGg6NTAlfS51aS1kYXRlcGlja2VyLW11bHRpLTMgLnVpLWRhdGVwaWNrZXItZ3JvdXB7d2lkdGg6MzMuMyV9LnVpLWRhdGVwaWNrZXItbXVsdGktNCAudWktZGF0ZXBpY2tlci1ncm91cHt3aWR0aDoyNSV9LnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCAudWktZGF0ZXBpY2tlci1oZWFkZXIsLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIC51aS1kYXRlcGlja2VyLWhlYWRlcntib3JkZXItbGVmdC13aWR0aDowfS51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmV7Y2xlYXI6bGVmdH0udWktZGF0ZXBpY2tlci1yb3ctYnJlYWt7Y2xlYXI6Ym90aDt3aWR0aDoxMDAlO2ZvbnQtc2l6ZTowfS51aS1kYXRlcGlja2VyLXJ0bHtkaXJlY3Rpb246cnRsfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1wcmV2e3JpZ2h0OjJweDtsZWZ0OmF1dG99LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLW5leHR7bGVmdDoycHg7cmlnaHQ6YXV0b30udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItcHJldjpob3ZlcntyaWdodDoxcHg7bGVmdDphdXRvfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1uZXh0OmhvdmVye2xlZnQ6MXB4O3JpZ2h0OmF1dG99LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmV7Y2xlYXI6cmlnaHR9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9ue2Zsb2F0OmxlZnR9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uLnVpLWRhdGVwaWNrZXItY3VycmVudCwudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXB7ZmxvYXQ6cmlnaHR9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QgLnVpLWRhdGVwaWNrZXItaGVhZGVyLC51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUgLnVpLWRhdGVwaWNrZXItaGVhZGVye2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1sZWZ0LXdpZHRoOjFweH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS11aS50aGVtZS5taW4uY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnktdWkudGhlbWUubWluLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNDU0MzExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnktdWkudGhlbWUubWluLmNzcwpAQCAtMCwwICsxLDUgQEAKKy8qISBqUXVlcnkgVUkgLSB2MS4xMS40IC0gMjAxNS0wMy0xNworKiBodHRwOi8vanF1ZXJ5dWkuY29tCisqIENvcHlyaWdodCAyMDE1IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqLworCisudWktd2lkZ2V0e2ZvbnQtZmFtaWx5OlRyZWJ1Y2hldCBNUyxUYWhvbWEsVmVyZGFuYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxLjFlbX0udWktd2lkZ2V0IC51aS13aWRnZXR7Zm9udC1zaXplOjFlbX0udWktd2lkZ2V0IGlucHV0LC51aS13aWRnZXQgc2VsZWN0LC51aS13aWRnZXQgdGV4dGFyZWEsLnVpLXdpZGdldCBidXR0b257Zm9udC1mYW1pbHk6VHJlYnVjaGV0IE1TLFRhaG9tYSxWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjFlbX0udWktd2lkZ2V0LWNvbnRlbnR7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JhY2tncm91bmQ6I2VlZSB1cmwoImltYWdlcy91aS1iZ19oaWdobGlnaHQtc29mdF8xMDBfZWVlZWVlXzF4MTAwLnBuZyIpIDUwJSB0b3AgcmVwZWF0LXg7Y29sb3I6IzMzM30udWktd2lkZ2V0LWNvbnRlbnQgYXtjb2xvcjojMzMzfS51aS13aWRnZXQtaGVhZGVye2JvcmRlcjoxcHggc29saWQgI2U3OGYwODtiYWNrZ3JvdW5kOiNmNmE4MjggdXJsKCJpbWFnZXMvdWktYmdfZ2xvc3Mtd2F2ZV8zNV9mNmE4MjhfNTAweDEwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6Ym9sZH0udWktd2lkZ2V0LWhlYWRlciBhe2NvbG9yOiNmZmZ9LnVpLXN0YXRlLWRlZmF1bHQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kZWZhdWx0LC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1kZWZhdWx0e2JvcmRlcjoxcHggc29saWQgI2NjYztiYWNrZ3JvdW5kOiNmNmY2ZjYgdXJsKCJpbWFnZXMvdWktYmdfZ2xhc3NfMTAwX2Y2ZjZmNl8xeDQwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6IzFjOTRjNH0udWktc3RhdGUtZGVmYXVsdCBhLC51aS1zdGF0ZS1kZWZhdWx0IGE6bGluaywudWktc3RhdGUtZGVmYXVsdCBhOnZpc2l0ZWR7Y29sb3I6IzFjOTRjNDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktc3RhdGUtaG92ZXIsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1ob3ZlciwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaG92ZXIsLnVpLXN0YXRlLWZvY3VzLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZm9jdXMsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWZvY3Vze2JvcmRlcjoxcHggc29saWQgI2ZiY2IwOTtiYWNrZ3JvdW5kOiNmZGY1Y2UgdXJsKCJpbWFnZXMvdWktYmdfZ2xhc3NfMTAwX2ZkZjVjZV8xeDQwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6I2M3NzQwNX0udWktc3RhdGUtaG92ZXIgYSwudWktc3RhdGUtaG92ZXIgYTpob3ZlciwudWktc3RhdGUtaG92ZXIgYTpsaW5rLC51aS1zdGF0ZS1ob3ZlciBhOnZpc2l0ZWQsLnVpLXN0YXRlLWZvY3VzIGEsLnVpLXN0YXRlLWZvY3VzIGE6aG92ZXIsLnVpLXN0YXRlLWZvY3VzIGE6bGluaywudWktc3RhdGUtZm9jdXMgYTp2aXNpdGVke2NvbG9yOiNjNzc0MDU7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVpLXN0YXRlLWFjdGl2ZSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWFjdGl2ZSwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtYWN0aXZle2JvcmRlcjoxcHggc29saWQgI2ZiZDg1MDtiYWNrZ3JvdW5kOiNmZmYgdXJsKCJpbWFnZXMvdWktYmdfZ2xhc3NfNjVfZmZmZmZmXzF4NDAwLnBuZyIpIDUwJSA1MCUgcmVwZWF0LXg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojZWI4ZjAwfS51aS1zdGF0ZS1hY3RpdmUgYSwudWktc3RhdGUtYWN0aXZlIGE6bGluaywudWktc3RhdGUtYWN0aXZlIGE6dmlzaXRlZHtjb2xvcjojZWI4ZjAwO3RleHQtZGVjb3JhdGlvbjpub25lfS51aS1zdGF0ZS1oaWdobGlnaHQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1oaWdobGlnaHQsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodHtib3JkZXI6MXB4IHNvbGlkICNmZWQyMmY7YmFja2dyb3VuZDojZmZlNDVjIHVybCgiaW1hZ2VzL3VpLWJnX2hpZ2hsaWdodC1zb2Z0Xzc1X2ZmZTQ1Y18xeDEwMC5wbmciKSA1MCUgdG9wIHJlcGVhdC14O2NvbG9yOiMzNjM2MzZ9LnVpLXN0YXRlLWhpZ2hsaWdodCBhLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaGlnaGxpZ2h0IGEsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodCBhe2NvbG9yOiMzNjM2MzZ9LnVpLXN0YXRlLWVycm9yLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3IsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9ye2JvcmRlcjoxcHggc29saWQgI2NkMGEwYTtiYWNrZ3JvdW5kOiNiODE5MDAgdXJsKCJpbWFnZXMvdWktYmdfZGlhZ29uYWxzLXRoaWNrXzE4X2I4MTkwMF80MHg0MC5wbmciKSA1MCUgNTAlIHJlcGVhdDtjb2xvcjojZmZmfS51aS1zdGF0ZS1lcnJvciBhLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3IgYSwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3IgYXtjb2xvcjojZmZmfS51aS1zdGF0ZS1lcnJvci10ZXh0LC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3ItdGV4dCwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3ItdGV4dHtjb2xvcjojZmZmfS51aS1wcmlvcml0eS1wcmltYXJ5LC51aS13aWRnZXQtY29udGVudCAudWktcHJpb3JpdHktcHJpbWFyeSwudWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktcHJpbWFyeXtmb250LXdlaWdodDpib2xkfS51aS1wcmlvcml0eS1zZWNvbmRhcnksLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1zZWNvbmRhcnksLnVpLXdpZGdldC1oZWFkZXIgLnVpLXByaW9yaXR5LXNlY29uZGFyeXtvcGFjaXR5Oi43O2ZpbHRlcjpBbHBoYShPcGFjaXR5PTcwKTtmb250LXdlaWdodDpub3JtYWx9LnVpLXN0YXRlLWRpc2FibGVkLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZGlzYWJsZWQsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRpc2FibGVke29wYWNpdHk6LjM1O2ZpbHRlcjpBbHBoYShPcGFjaXR5PTM1KTtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9LnVpLXN0YXRlLWRpc2FibGVkIC51aS1pY29ue2ZpbHRlcjpBbHBoYShPcGFjaXR5PTM1KX0udWktaWNvbnt3aWR0aDoxNnB4O2hlaWdodDoxNnB4fS51aS1pY29uLC51aS13aWRnZXQtY29udGVudCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zXzIyMjIyMl8yNTZ4MjQwLnBuZyIpfS51aS13aWRnZXQtaGVhZGVyIC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfZmZmZmZmXzI1NngyNDAucG5nIil9LnVpLXN0YXRlLWRlZmF1bHQgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc19lZjhjMDhfMjU2eDI0MC5wbmciKX0udWktc3RhdGUtaG92ZXIgLnVpLWljb24sLnVpLXN0YXRlLWZvY3VzIC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfZWY4YzA4XzI1NngyNDAucG5nIil9LnVpLXN0YXRlLWFjdGl2ZSAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zX2VmOGMwOF8yNTZ4MjQwLnBuZyIpfS51aS1zdGF0ZS1oaWdobGlnaHQgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc18yMjhlZjFfMjU2eDI0MC5wbmciKX0udWktc3RhdGUtZXJyb3IgLnVpLWljb24sLnVpLXN0YXRlLWVycm9yLXRleHQgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc19mZmQyN2FfMjU2eDI0MC5wbmciKX0udWktaWNvbi1ibGFua3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjE2cHggMTZweH0udWktaWNvbi1jYXJhdC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9LnVpLWljb24tY2FyYXQtMS1uZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IDB9LnVpLWljb24tY2FyYXQtMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggMH0udWktaWNvbi1jYXJhdC0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggMH0udWktaWNvbi1jYXJhdC0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAwfS51aS1pY29uLWNhcmF0LTEtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAwfS51aS1pY29uLWNhcmF0LTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IDB9LnVpLWljb24tY2FyYXQtMS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAwfS51aS1pY29uLWNhcmF0LTItbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IDB9LnVpLWljb24tY2FyYXQtMi1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggMH0udWktaWNvbi10cmlhbmdsZS0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMi1uLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMi1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTE2cHh9LnVpLWljb24tYXJyb3ctMS1ue2JhY2tncm91bmQtcG9zaXRpb246MCAtMzJweH0udWktaWNvbi1hcnJvdy0xLW5le2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLW53e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0zMnB4fS51aS1pY29uLWFycm93LTItbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0zMnB4fS51aS1pY29uLWFycm93LTItbmUtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1zZS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtMzJweH0udWktaWNvbi1hcnJvd3N0b3AtMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0zMnB4fS51aS1pY29uLWFycm93c3RvcC0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMjA4cHggLTMycHh9LnVpLWljb24tYXJyb3dzdG9wLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtMzJweH0udWktaWNvbi1hcnJvd3N0b3AtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0zMnB4fS51aS1pY29uLWFycm93dGhpY2stMS1ue2JhY2tncm91bmQtcG9zaXRpb246MCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXN3e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0yLW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItbmUtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItc2Utbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMjI0cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC00OHB4fS51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS13e2JhY2tncm91bmQtcG9zaXRpb246MCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTY0cHh9LnVpLWljb24tYXJyb3dyZWZyZXNoLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtNjRweH0udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC02NHB4fS51aS1pY29uLWFycm93cmVmcmVzaC0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTY0cHh9LnVpLWljb24tYXJyb3dyZWZyZXNoLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtNjRweH0udWktaWNvbi1hcnJvdy00e2JhY2tncm91bmQtcG9zaXRpb246MCAtODBweH0udWktaWNvbi1hcnJvdy00LWRpYWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtODBweH0udWktaWNvbi1leHRsaW5re2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTgwcHh9LnVpLWljb24tbmV3d2lue2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTgwcHh9LnVpLWljb24tcmVmcmVzaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC04MHB4fS51aS1pY29uLXNodWZmbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtODBweH0udWktaWNvbi10cmFuc2Zlci1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtODBweH0udWktaWNvbi10cmFuc2ZlcnRoaWNrLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtODBweH0udWktaWNvbi1mb2xkZXItY29sbGFwc2Vke2JhY2tncm91bmQtcG9zaXRpb246MCAtOTZweH0udWktaWNvbi1mb2xkZXItb3BlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC05NnB4fS51aS1pY29uLWRvY3VtZW50e2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTk2cHh9LnVpLWljb24tZG9jdW1lbnQtYntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC05NnB4fS51aS1pY29uLW5vdGV7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtOTZweH0udWktaWNvbi1tYWlsLWNsb3NlZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC05NnB4fS51aS1pY29uLW1haWwtb3BlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC05NnB4fS51aS1pY29uLXN1aXRjYXNle2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC05NnB4fS51aS1pY29uLWNvbW1lbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTk2cHh9LnVpLWljb24tcGVyc29ue2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC05NnB4fS51aS1pY29uLXByaW50e2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC05NnB4fS51aS1pY29uLXRyYXNoe2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC05NnB4fS51aS1pY29uLWxvY2tlZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtOTZweH0udWktaWNvbi11bmxvY2tlZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtOTZweH0udWktaWNvbi1ib29rbWFya3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtOTZweH0udWktaWNvbi10YWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTk2cHh9LnVpLWljb24taG9tZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTExMnB4fS51aS1pY29uLWZsYWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTEycHh9LnVpLWljb24tY2FsZW5kYXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTEycHh9LnVpLWljb24tY2FydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xMTJweH0udWktaWNvbi1wZW5jaWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTEycHh9LnVpLWljb24tY2xvY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTEycHh9LnVpLWljb24tZGlza3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xMTJweH0udWktaWNvbi1jYWxjdWxhdG9ye2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xMTJweH0udWktaWNvbi16b29taW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTExMnB4fS51aS1pY29uLXpvb21vdXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTExMnB4fS51aS1pY29uLXNlYXJjaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtMTEycHh9LnVpLWljb24td3JlbmNoe2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0xMTJweH0udWktaWNvbi1nZWFye2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xMTJweH0udWktaWNvbi1oZWFydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMTEycHh9LnVpLWljb24tc3RhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtMTEycHh9LnVpLWljb24tbGlua3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTEycHh9LnVpLWljb24tY2FuY2Vse2JhY2tncm91bmQtcG9zaXRpb246MCAtMTI4cHh9LnVpLWljb24tcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xMjhweH0udWktaWNvbi1wbHVzdGhpY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTI4cHh9LnVpLWljb24tbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTI4cHh9LnVpLWljb24tbWludXN0aGlja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xMjhweH0udWktaWNvbi1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xMjhweH0udWktaWNvbi1jbG9zZXRoaWNre2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTEyOHB4fS51aS1pY29uLWtleXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTI4cHh9LnVpLWljb24tbGlnaHRidWxie2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0xMjhweH0udWktaWNvbi1zY2lzc29yc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTI4cHh9LnVpLWljb24tY2xpcGJvYXJke2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC0xMjhweH0udWktaWNvbi1jb3B5e2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0xMjhweH0udWktaWNvbi1jb250YWN0e2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xMjhweH0udWktaWNvbi1pbWFnZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMTI4cHh9LnVpLWljb24tdmlkZW97YmFja2dyb3VuZC1wb3NpdGlvbjotMjI0cHggLTEyOHB4fS51aS1pY29uLXNjcmlwdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTI4cHh9LnVpLWljb24tYWxlcnR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNDRweH0udWktaWNvbi1pbmZve2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE0NHB4fS51aS1pY29uLW5vdGljZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNDRweH0udWktaWNvbi1oZWxwe2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE0NHB4fS51aS1pY29uLWNoZWNre2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE0NHB4fS51aS1pY29uLWJ1bGxldHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNDRweH0udWktaWNvbi1yYWRpby1vbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNDRweH0udWktaWNvbi1yYWRpby1vZmZ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTE0NHB4fS51aS1pY29uLXBpbi13e2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0xNDRweH0udWktaWNvbi1waW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTQ0cHh9LnVpLWljb24tcGxheXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE2MHB4fS51aS1pY29uLXBhdXNle2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE2MHB4fS51aS1pY29uLXNlZWstbmV4dHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNjBweH0udWktaWNvbi1zZWVrLXByZXZ7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTYwcHh9LnVpLWljb24tc2Vlay1lbmR7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTYwcHh9LnVpLWljb24tc2Vlay1zdGFydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNjBweH0udWktaWNvbi1zZWVrLWZpcnN0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE2MHB4fS51aS1pY29uLXN0b3B7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTYwcHh9LnVpLWljb24tZWplY3R7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTE2MHB4fS51aS1pY29uLXZvbHVtZS1vZmZ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE2MHB4fS51aS1pY29uLXZvbHVtZS1vbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTYwcHh9LnVpLWljb24tcG93ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNzZweH0udWktaWNvbi1zaWduYWwtZGlhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xNzZweH0udWktaWNvbi1zaWduYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTc2cHh9LnVpLWljb24tYmF0dGVyeS0we2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE3NnB4fS51aS1pY29uLWJhdHRlcnktMXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xNzZweH0udWktaWNvbi1iYXR0ZXJ5LTJ7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTc2cHh9LnVpLWljb24tYmF0dGVyeS0ze2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE3NnB4fS51aS1pY29uLWNpcmNsZS1wbHVze2JhY2tncm91bmQtcG9zaXRpb246MCAtMTkycHh9LnVpLWljb24tY2lyY2xlLW1pbnVze2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtYXJyb3ctZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWFycm93LXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1hcnJvdy13e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtYXJyb3ctbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLXpvb21pbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLXpvb21vdXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1jaGVja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMTkycHh9LnVpLWljb24tY2lyY2xlc21hbGwtcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTIwOHB4fS51aS1pY29uLWNpcmNsZXNtYWxsLW1pbnVze2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTIwOHB4fS51aS1pY29uLWNpcmNsZXNtYWxsLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTIwOHB4fS51aS1pY29uLXNxdWFyZXNtYWxsLXBsdXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMjA4cHh9LnVpLWljb24tc3F1YXJlc21hbGwtbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMjA4cHh9LnVpLWljb24tc3F1YXJlc21hbGwtY2xvc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMjA4cHh9LnVpLWljb24tZ3JpcC1kb3R0ZWQtdmVydGljYWx7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0yMjRweH0udWktaWNvbi1ncmlwLWRvdHRlZC1ob3Jpem9udGFse2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTIyNHB4fS51aS1pY29uLWdyaXAtc29saWQtdmVydGljYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMjI0cHh9LnVpLWljb24tZ3JpcC1zb2xpZC1ob3Jpem9udGFse2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTIyNHB4fS51aS1pY29uLWdyaXBzbWFsbC1kaWFnb25hbC1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0yMjRweH0udWktaWNvbi1ncmlwLWRpYWdvbmFsLXNle2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTIyNHB4fS51aS1jb3JuZXItYWxsLC51aS1jb3JuZXItdG9wLC51aS1jb3JuZXItbGVmdCwudWktY29ybmVyLXRse2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4fS51aS1jb3JuZXItYWxsLC51aS1jb3JuZXItdG9wLC51aS1jb3JuZXItcmlnaHQsLnVpLWNvcm5lci10cntib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci1ib3R0b20sLnVpLWNvcm5lci1sZWZ0LC51aS1jb3JuZXItYmx7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci1ib3R0b20sLnVpLWNvcm5lci1yaWdodCwudWktY29ybmVyLWJye2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweH0udWktd2lkZ2V0LW92ZXJsYXl7YmFja2dyb3VuZDojNjY2IHVybCgiaW1hZ2VzL3VpLWJnX2RpYWdvbmFscy10aGlja18yMF82NjY2NjZfNDB4NDAucG5nIikgNTAlIDUwJSByZXBlYXQ7b3BhY2l0eTouNTtmaWx0ZXI6QWxwaGEoT3BhY2l0eT01MCl9LnVpLXdpZGdldC1zaGFkb3d7bWFyZ2luOi01cHggMCAwIC01cHg7cGFkZGluZzo1cHg7YmFja2dyb3VuZDojMDAwIHVybCgiaW1hZ2VzL3VpLWJnX2ZsYXRfMTBfMDAwMDAwXzQweDEwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O29wYWNpdHk6LjI7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MjApO2JvcmRlci1yYWRpdXM6NXB4fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LnRyZWV0YWJsZS5jc3MgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS50cmVldGFibGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOTViZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS50cmVldGFibGUuY3NzCkBAIC0wLDAgKzEsMjggQEAKK3RhYmxlLnRyZWV0YWJsZSBzcGFuLmluZGVudGVyIHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBtYXJnaW46IDA7CisgIHBhZGRpbmc6IDA7CisgIHRleHQtYWxpZ246IHJpZ2h0OworCisgIC8qIERpc2FibGUgdGV4dCBzZWxlY3Rpb24gb2Ygbm9kZXMgKGZvciBiZXR0ZXIgRCZEIFVYKSAqLworICB1c2VyLXNlbGVjdDogbm9uZTsKKyAgLWtodG1sLXVzZXItc2VsZWN0OiBub25lOworICAtbW96LXVzZXItc2VsZWN0OiBub25lOworICAtby11c2VyLXNlbGVjdDogbm9uZTsKKyAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKKworICAvKiBGb3JjZSBjb250ZW50LWJveCBib3ggbW9kZWwgZm9yIGluZGVudGVyIChCb290c3RyYXAgY29tcGF0aWJpbGl0eSkgKi8KKyAgLXdlYmtpdC1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKKyAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKKyAgYm94LXNpemluZzogY29udGVudC1ib3g7CisKKyAgd2lkdGg6IDE5cHg7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgIHdpZHRoOiAxOXB4OworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnkudHJlZXRhYmxlLnRoZW1lLmRlZmF1bHQuY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnkudHJlZXRhYmxlLnRoZW1lLmRlZmF1bHQuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4Mjg5YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS50cmVldGFibGUudGhlbWUuZGVmYXVsdC5jc3MKQEAgLTAsMCArMSw2NCBAQAordGFibGUudHJlZXRhYmxlIHsKKyAgYm9yZGVyOiAxcHggc29saWQgIzg4ODsKKyAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKyAgZm9udC1zaXplOiAuOGVtOworICBsaW5lLWhlaWdodDogMTsKKyAgbWFyZ2luOiAuNmVtIDAgMS44ZW0gMDsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSBjYXB0aW9uIHsKKyAgZm9udC1zaXplOiAuOWVtOworICBmb250LXdlaWdodDogYm9sZDsKKyAgbWFyZ2luLWJvdHRvbTogLjJlbTsKK30KKwordGFibGUudHJlZXRhYmxlIHRib2R5IHRyIHRkIHsKKyAgY3Vyc29yOiBkZWZhdWx0OworICBwYWRkaW5nOiAuM2VtIDFlbTsKK30KKwordGFibGUudHJlZXRhYmxlIHNwYW4geworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgbGVmdDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgcGFkZGluZzogLjJlbSAwIC4yZW0gMS41ZW07Cit9CisKK3RhYmxlLnRyZWV0YWJsZSBzcGFuLmZpbGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FRQUFBQzEramZxQUFBQUJHZEJUVUVBQUsvSU53V0s2UUFBQUJsMFJWaDBVMjltZEhkaGNtVUFRV1J2WW1VZ1NXMWhaMlZTWldGa2VYSEpaVHdBQUFEb1NVUkJWQmdaQmNFeGJsTkJHQWJBMmNlZWdUUkJ1SUtPZ2lpaFNaTlRjQzVMVUhBaWhOSlIwa0dLQ0RjWUpZNkQzLzc3TWRPaW5UdnpBZ0N3OHlzVGhJdm4vVm9qSXlNakl5UFArYlMxc1VRSVYyczk1cEJERHZtYlAvbWRrZnQ4M3RwWWd1WnE1SmgvT2VhWWgreXp5OGhUSHZObGF4Tk5jem0rbGE5T1RsYXIxVWRBLytDMkE0dHJSQ25EM2pTOEJCMW9icTJHazZHVTZRYlFBUzRCVWFZU1FBZjRiaGhLS1RGZEF6ckFPd0F4RVVBSCtLRU0wMVNZM2dNNndCc0VBUUIwZ0orbWFab0MzZ0k2aVBZYUFJQkpzaVJtSFUwQUFMT2VGQzNhSzJjV0FBQ1VYZTcrQXdPMGxjOWVUSFlUQUFBQUFFbEZUa1N1UW1DQyk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSBzcGFuLmZvbGRlciB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkdkQlRVRUFBSy9JTndXSzZRQUFBQmwwUlZoMFUyOW1kSGRoY21VQVFXUnZZbVVnU1cxaFoyVlNaV0ZrZVhISlpUd0FBQUdyU1VSQlZEakx4Wk83aWhSQkZJYS82dTBaVzdHSEJVVjBVUVFUWnpkM1FkaE1ReE9md01SWEVBTkJNTlFYME16QXpGQXdFekh3QVJiTkZEZHdFZDMxTWozWDdhNnVPcjlCdHpOallqS0JKNm5pY1A3djNLcWNKRmF4aEJWdFpVQUs4T0hsbGQyc3Q3WGwzREpQVk9OUCt6RVVWNEhxTDVVRFlIcjV4dnVRQWpnbC9RczdUenZPT1ZBanhqbEMrZVBTd2U2RGZiVmVnTFZ1VDRyMTRlVHI2enZBOHhTQW9CTHp4NnB2ajRsK0RaSWV6dVZrRzlmWTJIN1lSUUlNWklCd3ljbXpIMS9zM0Y4QWFwZklQTkYza1FrNytrdzlQV0J5K0laT2RnNVVnM21rQUFUeS90MHVzb3Z6R2VDVVdUakN6MEIrU2owZWtmZHZrWjNhYkJ2K1U0R2FDdEoxaUVtNkFOUUo2ZkV6ckcvZW5nY0t3L3dYUXZFS3hTRUtReFJHS0U3SXp0K0RTaXdCSk1VU203MXJndU1ZaFFLckJ5Z09JUlN0ZjRUaUZGUkJ2YlJHS2lRTFdQMjl5UlNIS0JUdGZkQm1IczBCVXBndnRnRjR5UkZSK05VS2kwWFpjWWpDZUNHMnNta3pMQUhrYlJCbVAwL1VrMjZPNVluVUFjdEJwMUdzQUkrUzVuUkpKSmFsNUsxYUFNcnEwZDZUbTl1STZ6anlmNzVkQWU2dHgvU3NXZUQvL28yL0FiNklIMy9oMjVwT0FBQUFBRWxGVGtTdVFtQ0MpOworfQorCit0YWJsZS50cmVldGFibGUgdHIuY29sbGFwc2VkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBSGxKUkVGVWVOcmNVMXNOZ0RBUTZ3Z21jQU0yTUlDR0dsZzFnSm5OeldRY3Z3UUd5MWo0b1VsLzd0SDBtcHd6TTdTZ1F5TytFWkFVV2gyTWtrelNXaEp3dVJBbEhZc0p3RXd5dnMxZ0FCRHV6cW9KY1R3NXF4YUlKTjBiZ1FSZ0lqbmxtbjFoZVNPNVBFNlkyWVhlKzVDcjUraCsrZ3MxMkFjQVM2RlMrN1lPc2o0QUFBQUFTVVZPUks1Q1lJST0pOworfQorCit0YWJsZS50cmVldGFibGUgdHIuZXhwYW5kZWQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFIRkpSRUZVZU5waS9QLy9Qd01sZ0ltQlFzQTQ0QzZndmhmYTI5djNNekF3T09EUmM2Q3lzdElSYnhpMHQ3ZmpESmpLeWtwR1lyd3dpMWh4bkxIUTN0NytqSUdCUVJKSjZIbGxaYVVVS1lFWVJZQlBPQjBnQlNoS3dLR0EvLy8vNDhWdGJXMy84Y2xUbkJJSDNnQ0trekpnQUd2QlgwZERtMHNDQUFBQUFFbEZUa1N1UW1DQyk7Cit9CisKKworCit0YWJsZS50cmVldGFibGUgdHIuY29sbGFwc2VkLnNlbGVjdGVkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBRnBKUkVGVWVOcGkvUC8vUHdNbGdISEFEV0Q0Ly84L050eUFReHdENDVLQUFRZEtEZmovLy8vLy9mZ01Jc1lBWklNdzFES1JFRndPREF3TS80a05SS3E2NEFBREE0TWpGRE9RNmdLeVk0SG9kTUE0OVBNQ3hRWUFCZ0FWWUhzanlaMXg3UUFBQUFCSlJVNUVya0pnZ2c9PSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5leHBhbmRlZC5zZWxlY3RlZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUZ0SlJFRlVlTnBpL1AvL1B3TWxnSW1CUXNBNDRDNmdpUUVOREF3TS8vSGdCbUxDQUYvQU1CTGpCVWVpeGYvLy80OEw3LytQQ3ZaalU0ZlBBQWMwQXh5d3FjTVhDd2VnR0oxTmNrTDZqeDV3cEtZRHhxR1hFa2tDZ0FFQW1ycUJJZWpkZ25nQUFBQUFTVVZPUks1Q1lJST0pOworfQorCit0YWJsZS50cmVldGFibGUgdHIuYWNjZXB0IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2EzYmNlNDsKKyAgY29sb3I6ICNmZmYKK30KKwordGFibGUudHJlZXRhYmxlIHRyLmNvbGxhcHNlZC5hY2NlcHQgdGQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UveC1wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUZwSlJFRlVlTnBpL1AvL1B3TWxnSEhBRFdENC8vOC9OdHlBUXh3RDQ1S0FBUWRLRGZqLy8vLy8vZmdNSXNZQVpJTXcxREtSRUZ3T0RBd00vNGtOUktxNjRBQURBNE1qRkRPUTZnS3lZNEhvZE1BNDlQTUN4UVlBQmdBVllIc2p5WjF4N1FBQUFBQkpSVTVFcmtKZ2dnPT0pOworfQorCit0YWJsZS50cmVldGFibGUgdHIuZXhwYW5kZWQuYWNjZXB0IHRkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3gtcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFGdEpSRUZVZU5waS9QLy9Qd01sZ0ltQlFzQTQ0QzZnaVFFTkRBd00vL0hnQm1MQ0FGL0FNQkxqQlVlaXhmLy8vNDhMNy8rUEN2WmpVNGZQQUFjMEF4eXdxY01YQ3dlZ0dKMU5ja0w2ang1d3BLWUR4cUdYRWtrQ2dBRUFtcnFCSWVqZGduZ0FBQUFBU1VWT1JLNUNZSUk9KTsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LnRyZWV0YWJsZS50aGVtZS50b2FzdGVyLmNzcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LnRyZWV0YWJsZS50aGVtZS50b2FzdGVyLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODU1MmU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnkudHJlZXRhYmxlLnRoZW1lLnRvYXN0ZXIuY3NzCkBAIC0wLDAgKzEsMzggQEAKK3RhYmxlLnRyZWV0YWJsZSBzcGFuLmZpbGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FRQUFBQzEramZxQUFBQUJHZEJUVUVBQUsvSU53V0s2UUFBQUJsMFJWaDBVMjltZEhkaGNtVUFRV1J2WW1VZ1NXMWhaMlZTWldGa2VYSEpaVHdBQUFEb1NVUkJWQmdaQmNFeGJsTkJHQWJBMmNlZWdUUkJ1SUtPZ2lpaFNaTlRjQzVMVUhBaWhOSlIwa0dLQ0RjWUpZNkQzLzc3TWRPaW5UdnpBZ0N3OHlzVGhJdm4vVm9qSXlNakl5UFArYlMxc1VRSVYyczk1cEJERHZtYlAvbWRrZnQ4M3RwWWd1WnE1SmgvT2VhWWgreXp5OGhUSHZObGF4Tk5jem0rbGE5T1RsYXIxVWRBLytDMkE0dHJSQ25EM2pTOEJCMW9icTJHazZHVTZRYlFBUzRCVWFZU1FBZjRiaGhLS1RGZEF6ckFPd0F4RVVBSCtLRU0wMVNZM2dNNndCc0VBUUIwZ0orbWFab0MzZ0k2aVBZYUFJQkpzaVJtSFUwQUFMT2VGQzNhSzJjV0FBQ1VYZTcrQXdPMGxjOWVUSFlUQUFBQUFFbEZUa1N1UW1DQyk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSBzcGFuLmZvbGRlciB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkdkQlRVRUFBSy9JTndXSzZRQUFBQmwwUlZoMFUyOW1kSGRoY21VQVFXUnZZbVVnU1cxaFoyVlNaV0ZrZVhISlpUd0FBQUdyU1VSQlZEakx4Wk83aWhSQkZJYS82dTBaVzdHSEJVVjBVUVFUWnpkM1FkaE1ReE9md01SWEVBTkJNTlFYME16QXpGQXdFekh3QVJiTkZEZHdFZDMxTWozWDdhNnVPcjlCdHpOallqS0JKNm5pY1A3djNLcWNKRmF4aEJWdFpVQUs4T0hsbGQyc3Q3WGwzREpQVk9OUCt6RVVWNEhxTDVVRFlIcjV4dnVRQWpnbC9RczdUenZPT1ZBanhqbEMrZVBTd2U2RGZiVmVnTFZ1VDRyMTRlVHI2enZBOHhTQW9CTHp4NnB2ajRsK0RaSWV6dVZrRzlmWTJIN1lSUUlNWklCd3ljbXpIMS9zM0Y4QWFwZklQTkYza1FrNytrdzlQV0J5K0laT2RnNVVnM21rQUFUeS90MHVzb3Z6R2VDVVdUakN6MEIrU2owZWtmZHZrWjNhYkJ2K1U0R2FDdEoxaUVtNkFOUUo2ZkV6ckcvZW5nY0t3L3dYUXZFS3hTRUtReFJHS0U3SXp0K0RTaXdCSk1VU203MXJndU1ZaFFLckJ5Z09JUlN0ZjRUaUZGUkJ2YlJHS2lRTFdQMjl5UlNIS0JUdGZkQm1IczBCVXBndnRnRjR5UkZSK05VS2kwWFpjWWpDZUNHMnNta3pMQUhrYlJCbVAwL1VrMjZPNVluVUFjdEJwMUdzQUkrUzVuUkpKSmFsNUsxYUFNcnEwZDZUbTl1STZ6anlmNzVkQWU2dHgvU3NXZUQvL28yL0FiNklIMy9oMjVwT0FBQUFBRWxGVGtTdVFtQ0MpOworfQorCit0YWJsZS50cmVldGFibGUgdHIuY29sbGFwc2VkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBSGxKUkVGVWVOcmNVMXNOZ0RBUTZ3Z21jQU0yTUlDR0dsZzFnSm5OeldRY3Z3UUd5MWo0b1VsLzd0SDBtcHd6TTdTZ1F5TytFWkFVV2gyTWtrelNXaEp3dVJBbEhZc0p3RXd5dnMxZ0FCRHV6cW9KY1R3NXF4YUlKTjBiZ1FSZ0lqbmxtbjFoZVNPNVBFNlkyWVhlKzVDcjUraCsrZ3MxMkFjQVM2RlMrN1lPc2o0QUFBQUFTVVZPUks1Q1lJST0pOworfQorCit0YWJsZS50cmVldGFibGUgdHIuZXhwYW5kZWQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFIRkpSRUZVZU5waS9QLy9Qd01sZ0ltQlFzQTQ0QzZndmhmYTI5djNNekF3T09EUmM2Q3lzdElSYnhpMHQ3ZmpESmpLeWtwR1lyd3dpMWh4bkxIUTN0NytqSUdCUVJKSjZIbGxaYVVVS1lFWVJZQlBPQjBnQlNoS3dLR0EvLy8vNDhWdGJXMy84Y2xUbkJJSDNnQ0trekpnQUd2QlgwZERtMHNDQUFBQUFFbEZUa1N1UW1DQyk7Cit9CisKKworCit0YWJsZS50cmVldGFibGUgdHIuY29sbGFwc2VkLnNlbGVjdGVkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBRnBKUkVGVWVOcGkvUC8vUHdNbGdISEFEV0Q0Ly84L050eUFReHdENDVLQUFRZEtEZmovLy8vLy9mZ01Jc1lBWklNdzFES1JFRndPREF3TS80a05SS3E2NEFBREE0TWpGRE9RNmdLeVk0SG9kTUE0OVBNQ3hRWUFCZ0FWWUhzanlaMXg3UUFBQUFCSlJVNUVya0pnZ2c9PSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5leHBhbmRlZC5zZWxlY3RlZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUZ0SlJFRlVlTnBpL1AvL1B3TWxnSW1CUXNBNDRDNmdpUUVOREF3TS8vSGdCbUxDQUYvQU1CTGpCVWVpeGYvLy80OEw3LytQQ3ZaalU0ZlBBQWMwQXh5d3FjTVhDd2VnR0oxTmNrTDZqeDV3cEtZRHhxR1hFa2tDZ0FFQW1ycUJJZWpkZ25nQUFBQUFTVVZPUks1Q1lJST0pOworfQorCit0YWJsZS50cmVldGFibGUgdHIuYWNjZXB0IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2EzYmNlNDsKKyAgY29sb3I6ICNmZmYKK30KKwordGFibGUudHJlZXRhYmxlIHRyLmNvbGxhcHNlZC5hY2NlcHQgdGQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UveC1wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUZwSlJFRlVlTnBpL1AvL1B3TWxnSEhBRFdENC8vOC9OdHlBUXh3RDQ1S0FBUWRLRGZqLy8vLy8vZmdNSXNZQVpJTXcxREtSRUZ3T0RBd00vNGtOUktxNjRBQURBNE1qRkRPUTZnS3lZNEhvZE1BNDlQTUN4UVlBQmdBVllIc2p5WjF4N1FBQUFBQkpSVTVFcmtKZ2dnPT0pOworfQorCit0YWJsZS50cmVldGFibGUgdHIuZXhwYW5kZWQuYWNjZXB0IHRkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3gtcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFGdEpSRUZVZU5waS9QLy9Qd01sZ0ltQlFzQTQ0QzZnaVFFTkRBd00vL0hnQm1MQ0FGL0FNQkxqQlVlaXhmLy8vNDhMNy8rUEN2WmpVNGZQQUFjMEF4eXdxY01YQ3dlZ0dKMU5ja0w2ang1d3BLWUR4cUdYRWtrQ2dBRUFtcnFCSWVqZGduZ0FBQUFBU1VWT1JLNUNZSUk9KTsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvcHJldHRpZnkuY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9wcmV0dGlmeS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjMxN2E3YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvcHJldHRpZnkuY3NzCkBAIC0wLDAgKzEgQEAKKy5wbG57Y29sb3I6IzAwMH1AbWVkaWEgc2NyZWVuey5zdHJ7Y29sb3I6IzA4MH0ua3dke2NvbG9yOiMwMDh9LmNvbXtjb2xvcjojODAwfS50eXB7Y29sb3I6IzYwNn0ubGl0e2NvbG9yOiMwNjZ9LnB1biwub3BuLC5jbG97Y29sb3I6IzY2MH0udGFne2NvbG9yOiMwMDh9LmF0bntjb2xvcjojNjA2fS5hdHZ7Y29sb3I6IzA4MH0uZGVjLC52YXJ7Y29sb3I6IzYwNn0uZnVue2NvbG9yOnJlZH19QG1lZGlhIHByaW50LHByb2plY3Rpb257LnN0cntjb2xvcjojMDYwfS5rd2R7Y29sb3I6IzAwNjtmb250LXdlaWdodDpib2xkfS5jb217Y29sb3I6IzYwMDtmb250LXN0eWxlOml0YWxpY30udHlwe2NvbG9yOiM0MDQ7Zm9udC13ZWlnaHQ6Ym9sZH0ubGl0e2NvbG9yOiMwNDR9LnB1biwub3BuLC5jbG97Y29sb3I6IzQ0MH0udGFne2NvbG9yOiMwMDY7Zm9udC13ZWlnaHQ6Ym9sZH0uYXRue2NvbG9yOiM0MDR9LmF0dntjb2xvcjojMDYwfX1wcmUucHJldHR5cHJpbnR7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjODg4fW9sLmxpbmVudW1ze21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjB9bGkuTDAsbGkuTDEsbGkuTDIsbGkuTDMsbGkuTDUsbGkuTDYsbGkuTDcsbGkuTDh7bGlzdC1zdHlsZS10eXBlOm5vbmV9bGkuTDEsbGkuTDMsbGkuTDUsbGkuTDcsbGkuTDl7YmFja2dyb3VuZDojZWVlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9zY3JlZW4uY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9zY3JlZW4uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMzNlZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL3NjcmVlbi5jc3MKQEAgLTAsMCArMSwyOCBAQAorYm9keSB7CisgIGJhY2tncm91bmQ6ICNkZGQ7CisgIGNvbG9yOiAjMDAwOworICBmb250LWZhbWlseTogSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKKyAgbGluZS1oZWlnaHQ6IDEuNTsKKyAgbWFyZ2luOiAwOworICBwYWRkaW5nOiAwOworfQorCisjbWFpbiB7CisgIGJhY2tncm91bmQ6ICNmZmY7CisgIGJvcmRlci1sZWZ0OiAyMHB4IHNvbGlkICNlZWU7CisgIGJvcmRlci1yaWdodDogMjBweCBzb2xpZCAjZWVlOworICBtYXJnaW46IDAgYXV0bzsKKyAgbWF4LXdpZHRoOiA4MDBweDsKKyAgcGFkZGluZzogMjBweDsKK30KKworcHJlLmxpc3RpbmcgeworICBiYWNrZ3JvdW5kOiAjZWVlOworICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOworICBtYXJnaW46IC42ZW0gMCAuM2VtIDA7CisgIHBhZGRpbmc6IC4xZW0gLjNlbTsKK30KKworcHJlLmxpc3RpbmcgYiB7CisgIGNvbG9yOiAjZjAwOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL0ZvbnRBd2Vzb21lLm90ZiBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9Gb250QXdlc29tZS5vdGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwNDliZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9Gb250QXdlc29tZS5vdGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQuZW90IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQuZW90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkODEwMTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5lb3QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQuc3ZnIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQuc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMGFmZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5zdmcKQEAgLTAsMCArMSwyODQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0ibm8iPz4KKzwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCIgPgorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgorPG1ldGFkYXRhPjwvbWV0YWRhdGE+Cis8ZGVmcz4KKzxmb250IGlkPSJmb250YXdlc29tZXJlZ3VsYXIiIGhvcml6LWFkdi14PSIxNTM2IiA+Cis8Zm9udC1mYWNlIHVuaXRzLXBlci1lbT0iMTc5MiIgYXNjZW50PSIxNTM2IiBkZXNjZW50PSItMjU2IiAvPgorPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjQ0OCIgLz4KKzxnbHlwaCB1bmljb2RlPSIgIiAgaG9yaXotYWR2LXg9IjQ0OCIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gwOTsiIGhvcml6LWFkdi14PSI0NDgiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4YTA7IiBob3Jpei1hZHYteD0iNDQ4IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGE4OyIgaG9yaXotYWR2LXg9IjE3OTIiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4YTk7IiBob3Jpei1hZHYteD0iMTc5MiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hhZTsiIGhvcml6LWFkdi14PSIxNzkyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGI0OyIgaG9yaXotYWR2LXg9IjE3OTIiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4YzY7IiBob3Jpei1hZHYteD0iMTc5MiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDAwOyIgaG9yaXotYWR2LXg9Ijc2OCIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDAxOyIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDAyOyIgaG9yaXotYWR2LXg9Ijc2OCIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDAzOyIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDA0OyIgaG9yaXotYWR2LXg9IjUxMiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDA1OyIgaG9yaXotYWR2LXg9IjM4NCIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDA2OyIgaG9yaXotYWR2LXg9IjI1NiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDA3OyIgaG9yaXotYWR2LXg9IjI1NiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDA4OyIgaG9yaXotYWR2LXg9IjE5MiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDA5OyIgaG9yaXotYWR2LXg9IjMwNyIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDBhOyIgaG9yaXotYWR2LXg9Ijg1IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMmY7IiBob3Jpei1hZHYteD0iMzA3IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwNWY7IiBob3Jpei1hZHYteD0iMzg0IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIxMjI7IiBob3Jpei1hZHYteD0iMTc5MiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMjFlOyIgaG9yaXotYWR2LXg9IjE3OTIiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjI2MDsiIGhvcml6LWFkdi14PSIxNzkyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMDA7IiBob3Jpei1hZHYteD0iNTAwIiBkPSJNMCAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDAwOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNjk5IDEzNTBxMCAtMzUgLTQzIC03OGwtNjMyIC02MzJ2LTc2OGgzMjBxMjYgMCA0NSAtMTl0MTkgLTQ1dC0xOSAtNDV0LTQ1IC0xOWgtODk2cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTloMzIwdjc2OGwtNjMyIDYzMnEtNDMgNDMgLTQzIDc4cTAgMjMgMTggMzYuNXQzOCAxNy41dDQzIDRoMTQwOHEyMyAwIDQzIC00dDM4IC0xNy41dDE4IC0zNi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDAxOyIgZD0iTTE1MzYgMTMxMnYtMTEyMHEwIC01MCAtMzQgLTg5dC04NiAtNjAuNXQtMTAzLjUgLTMydC05Ni41IC0xMC41dC05Ni41IDEwLjV0LTEwMy41IDMydC04NiA2MC41dC0zNCA4OXQzNCA4OXQ4NiA2MC41dDEwMy41IDMydDk2LjUgMTAuNXExMDUgMCAxOTIgLTM5djUzN2wtNzY4IC0yMzd2LTcwOXEwIC01MCAtMzQgLTg5dC04NiAtNjAuNXQtMTAzLjUgLTMydC05Ni41IC0xMC41dC05Ni41IDEwLjV0LTEwMy41IDMydC04NiA2MC41dC0zNCA4OSB0MzQgODl0ODYgNjAuNXQxMDMuNSAzMnQ5Ni41IDEwLjVxMTA1IDAgMTkyIC0zOXY5NjdxMCAzMSAxOSA1Ni41dDQ5IDM1LjVsODMyIDI1NnExMiA0IDI4IDRxNDAgMCA2OCAtMjh0MjggLTY4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDAyOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xMTUyIDcwNHEwIDE4NSAtMTMxLjUgMzE2LjV0LTMxNi41IDEzMS41dC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXQxMzEuNSAtMzE2LjV0MzE2LjUgLTEzMS41dDMxNi41IDEzMS41dDEzMS41IDMxNi41ek0xNjY0IC0xMjhxMCAtNTIgLTM4IC05MHQtOTAgLTM4cS01NCAwIC05MCAzOGwtMzQzIDM0MnEtMTc5IC0xMjQgLTM5OSAtMTI0cS0xNDMgMCAtMjczLjUgNTUuNXQtMjI1IDE1MHQtMTUwIDIyNXQtNTUuNSAyNzMuNSB0NTUuNSAyNzMuNXQxNTAgMjI1dDIyNSAxNTB0MjczLjUgNTUuNXQyNzMuNSAtNTUuNXQyMjUgLTE1MHQxNTAgLTIyNXQ1NS41IC0yNzMuNXEwIC0yMjAgLTEyNCAtMzk5bDM0MyAtMzQzcTM3IC0zNyAzNyAtOTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMDM7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE2NjQgMzJ2NzY4cS0zMiAtMzYgLTY5IC02NnEtMjY4IC0yMDYgLTQyNiAtMzM4cS01MSAtNDMgLTgzIC02N3QtODYuNSAtNDguNXQtMTAyLjUgLTI0LjVoLTFoLTFxLTQ4IDAgLTEwMi41IDI0LjV0LTg2LjUgNDguNXQtODMgNjdxLTE1OCAxMzIgLTQyNiAzMzhxLTM3IDMwIC02OSA2NnYtNzY4cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTQ3MnExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xNjY0IDEwODN2MTF2MTMuNXQtMC41IDEzIHQtMyAxMi41dC01LjUgOXQtOSA3LjV0LTE0IDIuNWgtMTQ3MnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjVxMCAtMTY4IDE0NyAtMjg0cTE5MyAtMTUyIDQwMSAtMzE3cTYgLTUgMzUgLTI5LjV0NDYgLTM3LjV0NDQuNSAtMzEuNXQ1MC41IC0yNy41dDQzIC05aDFoMXEyMCAwIDQzIDl0NTAuNSAyNy41dDQ0LjUgMzEuNXQ0NiAzNy41dDM1IDI5LjVxMjA4IDE2NSA0MDEgMzE3cTU0IDQzIDEwMC41IDExNS41dDQ2LjUgMTMxLjV6IE0xNzkyIDExMjB2LTEwODhxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE0NzJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEwODhxMCA2NiA0NyAxMTN0MTEzIDQ3aDE0NzJxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMDQ7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTg5NiAtMTI4cS0yNiAwIC00NCAxOGwtNjI0IDYwMnEtMTAgOCAtMjcuNSAyNnQtNTUuNSA2NS41dC02OCA5Ny41dC01My41IDEyMXQtMjMuNSAxMzhxMCAyMjAgMTI3IDM0NHQzNTEgMTI0cTYyIDAgMTI2LjUgLTIxLjV0MTIwIC01OHQ5NS41IC02OC41dDc2IC02OHEzNiAzNiA3NiA2OHQ5NS41IDY4LjV0MTIwIDU4dDEyNi41IDIxLjVxMjI0IDAgMzUxIC0xMjR0MTI3IC0zNDRxMCAtMjIxIC0yMjkgLTQ1MGwtNjIzIC02MDAgcS0xOCAtMTggLTQ0IC0xOHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwNTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTY2NCA4ODlxMCAtMjIgLTI2IC00OGwtMzYzIC0zNTRsODYgLTUwMHExIC03IDEgLTIwcTAgLTIxIC0xMC41IC0zNS41dC0zMC41IC0xNC41cS0xOSAwIC00MCAxMmwtNDQ5IDIzNmwtNDQ5IC0yMzZxLTIyIC0xMiAtNDAgLTEycS0yMSAwIC0zMS41IDE0LjV0LTEwLjUgMzUuNXEwIDYgMiAyMGw4NiA1MDBsLTM2NCAzNTRxLTI1IDI3IC0yNSA0OHEwIDM3IDU2IDQ2bDUwMiA3M2wyMjUgNDU1cTE5IDQxIDQ5IDQxdDQ5IC00MWwyMjUgLTQ1NSBsNTAyIC03M3E1NiAtOSA1NiAtNDZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMDY7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTExMzcgNTMybDMwNiAyOTdsLTQyMiA2MmwtMTg5IDM4MmwtMTg5IC0zODJsLTQyMiAtNjJsMzA2IC0yOTdsLTczIC00MjFsMzc4IDE5OWwzNzcgLTE5OXpNMTY2NCA4ODlxMCAtMjIgLTI2IC00OGwtMzYzIC0zNTRsODYgLTUwMHExIC03IDEgLTIwcTAgLTUwIC00MSAtNTBxLTE5IDAgLTQwIDEybC00NDkgMjM2bC00NDkgLTIzNnEtMjIgLTEyIC00MCAtMTJxLTIxIDAgLTMxLjUgMTQuNXQtMTAuNSAzNS41cTAgNiAyIDIwbDg2IDUwMCBsLTM2NCAzNTRxLTI1IDI3IC0yNSA0OHEwIDM3IDU2IDQ2bDUwMiA3M2wyMjUgNDU1cTE5IDQxIDQ5IDQxdDQ5IC00MWwyMjUgLTQ1NWw1MDIgLTczcTU2IC05IDU2IC00NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwNzsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMTQwOCAxMzFxMCAtMTIwIC03MyAtMTg5LjV0LTE5NCAtNjkuNWgtODc0cS0xMjEgMCAtMTk0IDY5LjV0LTczIDE4OS41cTAgNTMgMy41IDEwMy41dDE0IDEwOXQyNi41IDEwOC41dDQzIDk3LjV0NjIgODF0ODUuNSA1My41dDExMS41IDIwcTkgMCA0MiAtMjEuNXQ3NC41IC00OHQxMDggLTQ4dDEzMy41IC0yMS41dDEzMy41IDIxLjV0MTA4IDQ4dDc0LjUgNDh0NDIgMjEuNXE2MSAwIDExMS41IC0yMHQ4NS41IC01My41dDYyIC04MSB0NDMgLTk3LjV0MjYuNSAtMTA4LjV0MTQgLTEwOXQzLjUgLTEwMy41ek0xMDg4IDEwMjRxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNXQtMjcxLjUgMTEyLjV0LTExMi41IDI3MS41dDExMi41IDI3MS41dDI3MS41IDExMi41dDI3MS41IC0xMTIuNXQxMTIuNSAtMjcxLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMDg7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTM4NCAtNjR2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTM4NCAzMjB2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTM4NCA3MDR2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4IHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNDA4IC02NHY1MTJxMCAyNiAtMTkgNDV0LTQ1IDE5aC03NjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di01MTJxMCAtMjYgMTkgLTQ1dDQ1IC0xOWg3NjhxMjYgMCA0NSAxOXQxOSA0NXpNMzg0IDEwODh2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NSB0NDUgLTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNzkyIC02NHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMTQwOCA3MDR2NTEycTAgMjYgLTE5IDQ1dC00NSAxOWgtNzY4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtNTEycTAgLTI2IDE5IC00NXQ0NSAtMTloNzY4cTI2IDAgNDUgMTl0MTkgNDV6TTE3OTIgMzIwdjEyOCBxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMTc5MiA3MDR2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTE3OTIgMTA4OHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOSB0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTE5MjAgMTI0OHYtMTM0NHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTYwMHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTM0NHEwIDY2IDQ3IDExM3QxMTMgNDdoMTYwMHE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwOTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNzY4IDUxMnYtMzg0cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtNTEycS01MiAwIC05MCAzOHQtMzggOTB2Mzg0cTAgNTIgMzggOTB0OTAgMzhoNTEycTUyIDAgOTAgLTM4dDM4IC05MHpNNzY4IDEyODB2LTM4NHEwIC01MiAtMzggLTkwdC05MCAtMzhoLTUxMnEtNTIgMCAtOTAgMzh0LTM4IDkwdjM4NHEwIDUyIDM4IDkwdDkwIDM4aDUxMnE1MiAwIDkwIC0zOHQzOCAtOTB6TTE2NjQgNTEydi0zODRxMCAtNTIgLTM4IC05MHQtOTAgLTM4IGgtNTEycS01MiAwIC05MCAzOHQtMzggOTB2Mzg0cTAgNTIgMzggOTB0OTAgMzhoNTEycTUyIDAgOTAgLTM4dDM4IC05MHpNMTY2NCAxMjgwdi0zODRxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC01MTJxLTUyIDAgLTkwIDM4dC0zOCA5MHYzODRxMCA1MiAzOCA5MHQ5MCAzOGg1MTJxNTIgMCA5MCAtMzh0MzggLTkweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDBhOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik01MTIgMjg4di0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OCAtMjh0MjggLTY4ek01MTIgODAwdi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OCAtMjh0MjggLTY4ek0xMTUyIDI4OHYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwIHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTUxMiAxMzEydi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OCAtMjh0MjggLTY4ek0xMTUyIDgwMHYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjggaDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTE3OTIgMjg4di0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OCAtMjh0MjggLTY4ek0xMTUyIDEzMTJ2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTE3OTIgODAwdi0xOTIgcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjggLTI4dDI4IC02OHpNMTc5MiAxMzEydi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OCAtMjh0MjggLTY4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDBiOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik01MTIgMjg4di0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OCAtMjh0MjggLTY4ek01MTIgODAwdi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OCAtMjh0MjggLTY4ek0xNzkyIDI4OHYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtOTYwIHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDk2MHE0MCAwIDY4IC0yOHQyOCAtNjh6TTUxMiAxMzEydi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OCAtMjh0MjggLTY4ek0xNzkyIDgwMHYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtOTYwcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjggaDk2MHE0MCAwIDY4IC0yOHQyOCAtNjh6TTE3OTIgMTMxMnYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtOTYwcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoOTYwcTQwIDAgNjggLTI4dDI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwYzsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTY3MSA5NzBxMCAtNDAgLTI4IC02OGwtNzI0IC03MjRsLTEzNiAtMTM2cS0yOCAtMjggLTY4IC0yOHQtNjggMjhsLTEzNiAxMzZsLTM2MiAzNjJxLTI4IDI4IC0yOCA2OHQyOCA2OGwxMzYgMTM2cTI4IDI4IDY4IDI4dDY4IC0yOGwyOTQgLTI5NWw2NTYgNjU3cTI4IDI4IDY4IDI4dDY4IC0yOGwxMzYgLTEzNnEyOCAtMjggMjggLTY4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDBkOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xMjk4IDIxNHEwIC00MCAtMjggLTY4bC0xMzYgLTEzNnEtMjggLTI4IC02OCAtMjh0LTY4IDI4bC0yOTQgMjk0bC0yOTQgLTI5NHEtMjggLTI4IC02OCAtMjh0LTY4IDI4bC0xMzYgMTM2cS0yOCAyOCAtMjggNjh0MjggNjhsMjk0IDI5NGwtMjk0IDI5NHEtMjggMjggLTI4IDY4dDI4IDY4bDEzNiAxMzZxMjggMjggNjggMjh0NjggLTI4bDI5NCAtMjk0bDI5NCAyOTRxMjggMjggNjggMjh0NjggLTI4bDEzNiAtMTM2cTI4IC0yOCAyOCAtNjggdC0yOCAtNjhsLTI5NCAtMjk0bDI5NCAtMjk0cTI4IC0yOCAyOCAtNjh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMGU7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTEwMjQgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTIyNHYtMjI0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYyMjRoLTIyNHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMjI0djIyNHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXYtMjI0aDIyNCBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xMTUyIDcwNHEwIDE4NSAtMTMxLjUgMzE2LjV0LTMxNi41IDEzMS41dC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXQxMzEuNSAtMzE2LjV0MzE2LjUgLTEzMS41dDMxNi41IDEzMS41dDEzMS41IDMxNi41ek0xNjY0IC0xMjhxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjVxLTU0IDAgLTkwIDM4bC0zNDMgMzQycS0xNzkgLTEyNCAtMzk5IC0xMjRxLTE0MyAwIC0yNzMuNSA1NS41IHQtMjI1IDE1MHQtMTUwIDIyNXQtNTUuNSAyNzMuNXQ1NS41IDI3My41dDE1MCAyMjV0MjI1IDE1MHQyNzMuNSA1NS41dDI3My41IC01NS41dDIyNSAtMTUwdDE1MCAtMjI1dDU1LjUgLTI3My41cTAgLTIyMCAtMTI0IC0zOTlsMzQzIC0zNDNxMzcgLTM3IDM3IC05MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAxMDsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTAyNCA3MzZ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNTc2cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg1NzZxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xMTUyIDcwNHEwIDE4NSAtMTMxLjUgMzE2LjV0LTMxNi41IDEzMS41dC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXQxMzEuNSAtMzE2LjV0MzE2LjUgLTEzMS41dDMxNi41IDEzMS41dDEzMS41IDMxNi41eiBNMTY2NCAtMTI4cTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41cS01NCAwIC05MCAzOGwtMzQzIDM0MnEtMTc5IC0xMjQgLTM5OSAtMTI0cS0xNDMgMCAtMjczLjUgNTUuNXQtMjI1IDE1MHQtMTUwIDIyNXQtNTUuNSAyNzMuNXQ1NS41IDI3My41dDE1MCAyMjV0MjI1IDE1MHQyNzMuNSA1NS41dDI3My41IC01NS41dDIyNSAtMTUwdDE1MCAtMjI1dDU1LjUgLTI3My41cTAgLTIyMCAtMTI0IC0zOTlsMzQzIC0zNDNxMzcgLTM3IDM3IC05MHogIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMTE7IiBkPSJNMTUzNiA2NDBxMCAtMTU2IC02MSAtMjk4dC0xNjQgLTI0NXQtMjQ1IC0xNjR0LTI5OCAtNjF0LTI5OCA2MXQtMjQ1IDE2NHQtMTY0IDI0NXQtNjEgMjk4cTAgMTgyIDgwLjUgMzQzdDIyNi41IDI3MHE0MyAzMiA5NS41IDI1dDgzLjUgLTUwcTMyIC00MiAyNC41IC05NC41dC00OS41IC04NC41cS05OCAtNzQgLTE1MS41IC0xODF0LTUzLjUgLTIyOHEwIC0xMDQgNDAuNSAtMTk4LjV0MTA5LjUgLTE2My41dDE2My41IC0xMDkuNSB0MTk4LjUgLTQwLjV0MTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNXQ0MC41IDE5OC41cTAgMTIxIC01My41IDIyOHQtMTUxLjUgMTgxcS00MiAzMiAtNDkuNSA4NC41dDI0LjUgOTQuNXEzMSA0MyA4NCA1MHQ5NSAtMjVxMTQ2IC0xMDkgMjI2LjUgLTI3MHQ4MC41IC0zNDN6TTg5NiAxNDA4di02NDBxMCAtNTIgLTM4IC05MHQtOTAgLTM4dC05MCAzOHQtMzggOTB2NjQwcTAgNTIgMzggOTB0OTAgMzh0OTAgLTM4dDM4IC05MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAxMjsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMjU2IDk2di0xOTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkycS0xNCAwIC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNNjQwIDIyNHYtMzIwcTAgLTE0IC05IC0yM3QtMjMgLTloLTE5MnEtMTQgMCAtMjMgOXQtOSAyM3YzMjBxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN6TTEwMjQgNDgwdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkycS0xNCAwIC0yMyA5dC05IDIzIHY1NzZxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN6TTE0MDggODY0di05NjBxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkycS0xNCAwIC0yMyA5dC05IDIzdjk2MHEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNMTc5MiAxMzc2di0xNDcycTAgLTE0IC05IC0yM3QtMjMgLTloLTE5MnEtMTQgMCAtMjMgOXQtOSAyM3YxNDcycTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDEzOyIgZD0iTTEwMjQgNjQwcTAgMTA2IC03NSAxODF0LTE4MSA3NXQtMTgxIC03NXQtNzUgLTE4MXQ3NSAtMTgxdDE4MSAtNzV0MTgxIDc1dDc1IDE4MXpNMTUzNiA3NDl2LTIyMnEwIC0xMiAtOCAtMjN0LTIwIC0xM2wtMTg1IC0yOHEtMTkgLTU0IC0zOSAtOTFxMzUgLTUwIDEwNyAtMTM4cTEwIC0xMiAxMCAtMjV0LTkgLTIzcS0yNyAtMzcgLTk5IC0xMDh0LTk0IC03MXEtMTIgMCAtMjYgOWwtMTM4IDEwOHEtNDQgLTIzIC05MSAtMzggcS0xNiAtMTM2IC0yOSAtMTg2cS03IC0yOCAtMzYgLTI4aC0yMjJxLTE0IDAgLTI0LjUgOC41dC0xMS41IDIxLjVsLTI4IDE4NHEtNDkgMTYgLTkwIDM3bC0xNDEgLTEwN3EtMTAgLTkgLTI1IC05cS0xNCAwIC0yNSAxMXEtMTI2IDExNCAtMTY1IDE2OHEtNyAxMCAtNyAyM3EwIDEyIDggMjNxMTUgMjEgNTEgNjYuNXQ1NCA3MC41cS0yNyA1MCAtNDEgOTlsLTE4MyAyN3EtMTMgMiAtMjEgMTIuNXQtOCAyMy41djIyMnEwIDEyIDggMjN0MTkgMTMgbDE4NiAyOHExNCA0NiAzOSA5MnEtNDAgNTcgLTEwNyAxMzhxLTEwIDEyIC0xMCAyNHEwIDEwIDkgMjNxMjYgMzYgOTguNSAxMDcuNXQ5NC41IDcxLjVxMTMgMCAyNiAtMTBsMTM4IC0xMDdxNDQgMjMgOTEgMzhxMTYgMTM2IDI5IDE4NnE3IDI4IDM2IDI4aDIyMnExNCAwIDI0LjUgLTguNXQxMS41IC0yMS41bDI4IC0xODRxNDkgLTE2IDkwIC0zN2wxNDIgMTA3cTkgOSAyNCA5cTEzIDAgMjUgLTEwcTEyOSAtMTE5IDE2NSAtMTcwcTcgLTggNyAtMjIgcTAgLTEyIC04IC0yM3EtMTUgLTIxIC01MSAtNjYuNXQtNTQgLTcwLjVxMjYgLTUwIDQxIC05OGwxODMgLTI4cTEzIC0yIDIxIC0xMi41dDggLTIzLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMTQ7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTUxMiA4MDB2LTU3NnEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3Y1NzZxMCAxNCA5IDIzdDIzIDloNjRxMTQgMCAyMyAtOXQ5IC0yM3pNNzY4IDgwMHYtNTc2cTAgLTE0IC05IC0yM3QtMjMgLTloLTY0cS0xNCAwIC0yMyA5dC05IDIzdjU3NnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzek0xMDI0IDgwMHYtNTc2cTAgLTE0IC05IC0yM3QtMjMgLTloLTY0cS0xNCAwIC0yMyA5dC05IDIzdjU3NiBxMCAxNCA5IDIzdDIzIDloNjRxMTQgMCAyMyAtOXQ5IC0yM3pNMTE1MiA3NnY5NDhoLTg5NnYtOTQ4cTAgLTIyIDcgLTQwLjV0MTQuNSAtMjd0MTAuNSAtOC41aDgzMnEzIDAgMTAuNSA4LjV0MTQuNSAyN3Q3IDQwLjV6TTQ4MCAxMTUyaDQ0OGwtNDggMTE3cS03IDkgLTE3IDExaC0zMTdxLTEwIC0yIC0xNyAtMTF6TTE0MDggMTEyMHYtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtOTZ2LTk0OHEwIC04MyAtNDcgLTE0My41dC0xMTMgLTYwLjVoLTgzMiBxLTY2IDAgLTExMyA1OC41dC00NyAxNDEuNXY5NTJoLTk2cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDMwOWw3MCAxNjdxMTUgMzcgNTQgNjN0NzkgMjZoMzIwcTQwIDAgNzkgLTI2dDU0IC02M2w3MCAtMTY3aDMwOXExNCAwIDIzIC05dDkgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDE1OyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNDA4IDU0NHYtNDgwcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMzg0djM4NGgtMjU2di0zODRoLTM4NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ4MHEwIDEgMC41IDN0MC41IDNsNTc1IDQ3NGw1NzUgLTQ3NHExIC0yIDEgLTZ6TTE2MzEgNjEzbC02MiAtNzRxLTggLTkgLTIxIC0xMWgtM3EtMTMgMCAtMjEgN2wtNjkyIDU3N2wtNjkyIC01NzdxLTEyIC04IC0yNCAtN3EtMTMgMiAtMjEgMTFsLTYyIDc0cS04IDEwIC03IDIzLjV0MTEgMjEuNSBsNzE5IDU5OXEzMiAyNiA3NiAyNnQ3NiAtMjZsMjQ0IC0yMDR2MTk1cTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzdi00MDhsMjE5IC0xODJxMTAgLTggMTEgLTIxLjV0LTcgLTIzLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMTY7IiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTEyOCAwaDEwMjR2NzY4aC00MTZxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTUxMnYtMTI4MHpNNzY4IDg5NmgyOTlsLTI5OSAyOTl2LTI5OXpNMTI4MCA3Njh2LTgwMHEwIC00MCAtMjggLTY4dC02OCAtMjhoLTEwODhxLTQwIDAgLTY4IDI4dC0yOCA2OHYxMzQ0cTAgNDAgMjggNjh0NjggMjhoNTQ0cTQwIDAgODggLTIwdDc2IC00OGw0MDggLTQwOHEyOCAtMjggNDggLTc2dDIwIC04OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAxNzsiIGQ9Ik0xMDg4IDYwOHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0zODRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY0NDhxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTM1MmgyODhxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xMjgwIDY0MHEwIDEwNCAtNDAuNSAxOTguNXQtMTA5LjUgMTYzLjV0LTE2My41IDEwOS41dC0xOTguNSA0MC41dC0xOTguNSAtNDAuNSB0LTE2My41IC0xMDkuNXQtMTA5LjUgLTE2My41dC00MC41IC0xOTguNXQ0MC41IC0xOTguNXQxMDkuNSAtMTYzLjV0MTYzLjUgLTEwOS41dDE5OC41IC00MC41dDE5OC41IDQwLjV0MTYzLjUgMTA5LjV0MTA5LjUgMTYzLjV0NDAuNSAxOTguNXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjUgdDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDE4OyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xMTExIDU0MHY0bC0yNCAzMjBxLTEgMTMgLTExIDIyLjV0LTIzIDkuNWgtMTg2cS0xMyAwIC0yMyAtOS41dC0xMSAtMjIuNWwtMjQgLTMyMHYtNHEtMSAtMTIgOCAtMjB0MjEgLThoMjQ0cTEyIDAgMjEgOHQ4IDIwek0xODcwIDczcTAgLTczIC00NiAtNzNoLTcwNHExMyAwIDIyIDkuNXQ4IDIyLjVsLTIwIDI1NnEtMSAxMyAtMTEgMjIuNXQtMjMgOS41aC0yNzJxLTEzIDAgLTIzIC05LjV0LTExIC0yMi41bC0yMCAtMjU2IHEtMSAtMTMgOCAtMjIuNXQyMiAtOS41aC03MDRxLTQ2IDAgLTQ2IDczcTAgNTQgMjYgMTE2bDQxNyAxMDQ0cTggMTkgMjYgMzN0MzggMTRoMzM5cS0xMyAwIC0yMyAtOS41dC0xMSAtMjIuNWwtMTUgLTE5MnEtMSAtMTQgOCAtMjN0MjIgLTloMTY2cTEzIDAgMjIgOXQ4IDIzbC0xNSAxOTJxLTEgMTMgLTExIDIyLjV0LTIzIDkuNWgzMzlxMjAgMCAzOCAtMTR0MjYgLTMzbDQxNyAtMTA0NHEyNiAtNjIgMjYgLTExNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAxOTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTMzOSA3MjlxMTcgLTQxIC0xNCAtNzBsLTQ0OCAtNDQ4cS0xOCAtMTkgLTQ1IC0xOXQtNDUgMTlsLTQ0OCA0NDhxLTMxIDI5IC0xNCA3MHExNyAzOSA1OSAzOWgyNTZ2NDQ4cTAgMjYgMTkgNDV0NDUgMTloMjU2cTI2IDAgNDUgLTE5dDE5IC00NXYtNDQ4aDI1NnE0MiAwIDU5IC0zOXpNMTYzMiA1MTJxMTQgMCAyMyAtOXQ5IC0yM3YtNTc2cTAgLTE0IC05IC0yM3QtMjMgLTloLTE2MDBxLTE0IDAgLTIzIDl0LTkgMjN2NTc2cTAgMTQgOSAyMyB0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3YtMzUyaDExNTJ2MzUycTAgMTQgOSAyM3QyMyA5aDE5MnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAxYTsiIGQ9Ik0xMTIwIDYwOHEwIC0xMiAtMTAgLTI0bC0zMTkgLTMxOXEtOSAtOSAtMjMgLTl0LTIzIDlsLTMyMCAzMjBxLTkgOSAtOSAyM3EwIDEzIDkuNSAyMi41dDIyLjUgOS41aDE5MnYzNTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0zNTJoMTkycTE0IDAgMjMgLTl0OSAtMjN6TTEyODAgNjQwcTAgMTA0IC00MC41IDE5OC41dC0xMDkuNSAxNjMuNXQtMTYzLjUgMTA5LjV0LTE5OC41IDQwLjUgdC0xOTguNSAtNDAuNXQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41dDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjV0MTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNXQ0MC41IDE5OC41ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNSB0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMWI7IiBkPSJNMTEyMCA2NzJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xOTJ2LTM1MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE5MnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djM1MmgtMTkycS0xNCAwIC0yMyA5dC05IDIzcTAgMTIgMTAgMjRsMzE5IDMxOXE5IDkgMjMgOXQyMyAtOWwzMjAgLTMyMHE5IC05IDkgLTIzek0xMjgwIDY0MHEwIDEwNCAtNDAuNSAxOTguNXQtMTA5LjUgMTYzLjV0LTE2My41IDEwOS41IHQtMTk4LjUgNDAuNXQtMTk4LjUgLTQwLjV0LTE2My41IC0xMDkuNXQtMTA5LjUgLTE2My41dC00MC41IC0xOTguNXQ0MC41IC0xOTguNXQxMDkuNSAtMTYzLjV0MTYzLjUgLTEwOS41dDE5OC41IC00MC41dDE5OC41IDQwLjV0MTYzLjUgMTA5LjV0MTA5LjUgMTYzLjV0NDAuNSAxOTguNXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNSB0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDFjOyIgZD0iTTEwMjMgNTc2aDMxNnEtMSAzIC0yLjUgOHQtMi41IDhsLTIxMiA0OTZoLTcwOGwtMjEyIC00OTZxLTEgLTIgLTIuNSAtOHQtMi41IC04aDMxNmw5NSAtMTkyaDMyMHpNMTUzNiA1NDZ2LTQ4MnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE0MDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXY0ODJxMCA2MiAyNSAxMjNsMjM4IDU1MnExMCAyNSAzNi41IDQydDUyLjUgMTdoODMycTI2IDAgNTIuNSAtMTd0MzYuNSAtNDJsMjM4IC01NTIgcTI1IC02MSAyNSAtMTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDFkOyIgZD0iTTExNTIgNjQwcTAgLTM3IC0zMyAtNTZsLTUxMiAtMjg4cS0xNCAtOCAtMzEgLTh0LTMyIDlxLTMyIDE4IC0zMiA1NXY1NzZxMCAzNyAzMiA1NXEzMSAyMCA2MyAxbDUxMiAtMjg4cTMzIC0xOSAzMyAtNTZ6TTEyODAgNjQwcTAgMTA0IC00MC41IDE5OC41dC0xMDkuNSAxNjMuNXQtMTYzLjUgMTA5LjV0LTE5OC41IDQwLjV0LTE5OC41IC00MC41dC0xNjMuNSAtMTA5LjV0LTEwOS41IC0xNjMuNXQtNDAuNSAtMTk4LjV0NDAuNSAtMTk4LjUgdDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjV0MTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNXQ0MC41IDE5OC41ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAxZTsiIGQ9Ik0xNTM2IDEyODB2LTQ0OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTQ0OHEtNDIgMCAtNTkgNDBxLTE3IDM5IDE0IDY5bDEzOCAxMzhxLTE0OCAxMzcgLTM0OSAxMzdxLTEwNCAwIC0xOTguNSAtNDAuNXQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41dDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjVxMTY5IDAgMzA0IDk5LjV0MTg1IDI2MS41cTcgMjMgMzAgMjNoMTk5IHExNiAwIDI1IC0xMnExMCAtMTMgNyAtMjdxLTM5IC0xNzUgLTE0Ny41IC0zMTJ0LTI2NiAtMjEzdC0zMzYuNSAtNzZxLTE1NiAwIC0yOTggNjF0LTI0NSAxNjR0LTE2NCAyNDV0LTYxIDI5OHQ2MSAyOTh0MTY0IDI0NXQyNDUgMTY0dDI5OCA2MXExNDcgMCAyODQuNSAtNTUuNXQyNDQuNSAtMTU2LjVsMTMwIDEyOXEyOSAzMSA3MCAxNHEzOSAtMTcgMzkgLTU5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDIxOyIgZD0iTTE1MTEgNDgwcTAgLTUgLTEgLTdxLTY0IC0yNjggLTI2OCAtNDM0LjV0LTQ3OCAtMTY2LjVxLTE0NiAwIC0yODIuNSA1NXQtMjQzLjUgMTU3bC0xMjkgLTEyOXEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5dC0xOSA0NXY0NDhxMCAyNiAxOSA0NXQ0NSAxOWg0NDhxMjYgMCA0NSAtMTl0MTkgLTQ1dC0xOSAtNDVsLTEzNyAtMTM3cTcxIC02NiAxNjEgLTEwMnQxODcgLTM2cTEzNCAwIDI1MCA2NXQxODYgMTc5cTExIDE3IDUzIDExNyBxOCAyMyAzMCAyM2gxOTJxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNTM2IDEyODB2LTQ0OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTQ0OHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1bDEzOCAxMzhxLTE0OCAxMzcgLTM0OSAxMzdxLTEzNCAwIC0yNTAgLTY1dC0xODYgLTE3OXEtMTEgLTE3IC01MyAtMTE3cS04IC0yMyAtMzAgLTIzaC0xOTlxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY3cTY1IDI2OCAyNzAgNDM0LjV0NDgwIDE2Ni41IHExNDYgMCAyODQgLTU1LjV0MjQ1IC0xNTYuNWwxMzAgMTI5cTE5IDE5IDQ1IDE5dDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMjI7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTM4NCAzNTJ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDYwOHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiBNMzg0IDg2NHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNTM2IDM1MnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC05NjBxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDk2MHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE0xNTM2IDYwOHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC05NjBxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDk2MHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE1MzYgODY0di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTk2MHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoOTYwcTEzIDAgMjIuNSAtOS41IHQ5LjUgLTIyLjV6TTE2NjQgMTYwdjgzMnEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTE0NzJxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di04MzJxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxNDcycTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE3OTIgMTI0OHYtMTA4OHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTQ3MnEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTA4OHEwIDY2IDQ3IDExM3QxMTMgNDdoMTQ3MnE2NiAwIDExMyAtNDcgdDQ3IC0xMTN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMjM7IiBob3Jpei1hZHYteD0iMTE1MiIgZD0iTTcwNCA1MTJxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjVxMCAtMzcgMTkgLTY3dDUxIC00N2wtNjkgLTIyOXEtNSAtMTUgNSAtMjh0MjYgLTEzaDE5MnExNiAwIDI2IDEzdDUgMjhsLTY5IDIyOXEzMiAxNyA1MSA0N3QxOSA2N3pNMzIwIDc2OGg1MTJ2MTkycTAgMTA2IC03NSAxODF0LTE4MSA3NXQtMTgxIC03NXQtNzUgLTE4MXYtMTkyek0xMTUyIDY3MnYtNTc2cTAgLTQwIC0yOCAtNjggdC02OCAtMjhoLTk2MHEtNDAgMCAtNjggMjh0LTI4IDY4djU3NnEwIDQwIDI4IDY4dDY4IDI4aDMydjE5MnEwIDE4NCAxMzIgMzE2dDMxNiAxMzJ0MzE2IC0xMzJ0MTMyIC0zMTZ2LTE5MmgzMnE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMjQ7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTMyMCAxMjgwcTAgLTcyIC02NCAtMTEwdi0xMjY2cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxMjY2cS02NCAzOCAtNjQgMTEwcTAgNTMgMzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTE3OTIgMTIxNnYtNzYzcTAgLTI1IC0xMi41IC0zOC41dC0zOS41IC0yNy41cS0yMTUgLTExNiAtMzY5IC0xMTZxLTYxIDAgLTEyMy41IDIydC0xMDguNSA0OCB0LTExNS41IDQ4dC0xNDIuNSAyMnEtMTkyIDAgLTQ2NCAtMTQ2cS0xNyAtOSAtMzMgLTlxLTI2IDAgLTQ1IDE5dC0xOSA0NXY3NDJxMCAzMiAzMSA1NXEyMSAxNCA3OSA0M3EyMzYgMTIwIDQyMSAxMjBxMTA3IDAgMjAwIC0yOXQyMTkgLTg4cTM4IC0xOSA4OCAtMTlxNTQgMCAxMTcuNSAyMXQxMTAgNDd0ODggNDd0NTQuNSAyMXEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMjU7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE2NjQgNjUwcTAgLTE2NiAtNjAgLTMxNGwtMjAgLTQ5bC0xODUgLTMzcS0yMiAtODMgLTkwLjUgLTEzNi41dC0xNTYuNSAtNTMuNXYtMzJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2NTc2cTAgMTQgOSAyM3QyMyA5aDY0cTE0IDAgMjMgLTl0OSAtMjN2LTMycTcxIDAgMTMwIC0zNS41dDkzIC05NS41bDY4IDEycTI5IDk1IDI5IDE5M3EwIDE0OCAtODggMjc5dC0yMzYuNSAyMDl0LTMxNS41IDc4IHQtMzE1LjUgLTc4dC0yMzYuNSAtMjA5dC04OCAtMjc5cTAgLTk4IDI5IC0xOTNsNjggLTEycTM0IDYwIDkzIDk1LjV0MTMwIDM1LjV2MzJxMCAxNCA5IDIzdDIzIDloNjRxMTQgMCAyMyAtOXQ5IC0yM3YtNTc2cTAgLTE0IC05IC0yM3QtMjMgLTloLTY0cS0xNCAwIC0yMyA5dC05IDIzdjMycS04OCAwIC0xNTYuNSA1My41dC05MC41IDEzNi41bC0xODUgMzNsLTIwIDQ5cS02MCAxNDggLTYwIDMxNHEwIDE1MSA2NyAyOTF0MTc5IDI0Mi41IHQyNjYgMTYzLjV0MzIwIDYxdDMyMCAtNjF0MjY2IC0xNjMuNXQxNzkgLTI0Mi41dDY3IC0yOTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMjY7IiBob3Jpei1hZHYteD0iNzY4IiBkPSJNNzY4IDExODR2LTEwODhxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOWwtMzMzIDMzM2gtMjYycS0yNiAwIC00NSAxOXQtMTkgNDV2Mzg0cTAgMjYgMTkgNDV0NDUgMTloMjYybDMzMyAzMzNxMTkgMTkgNDUgMTl0NDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyNzsiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNNzY4IDExODR2LTEwODhxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOWwtMzMzIDMzM2gtMjYycS0yNiAwIC00NSAxOXQtMTkgNDV2Mzg0cTAgMjYgMTkgNDV0NDUgMTloMjYybDMzMyAzMzNxMTkgMTkgNDUgMTl0NDUgLTE5dDE5IC00NXpNMTE1MiA2NDBxMCAtNzYgLTQyLjUgLTE0MS41dC0xMTIuNSAtOTMuNXEtMTAgLTUgLTI1IC01cS0yNiAwIC00NSAxOC41dC0xOSA0NS41cTAgMjEgMTIgMzUuNXQyOSAyNXQzNCAyM3QyOSAzNS41IHQxMiA1N3QtMTIgNTd0LTI5IDM1LjV0LTM0IDIzdC0yOSAyNXQtMTIgMzUuNXEwIDI3IDE5IDQ1LjV0NDUgMTguNXExNSAwIDI1IC01cTcwIC0yNyAxMTIuNSAtOTN0NDIuNSAtMTQyeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDI4OyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik03NjggMTE4NHYtMTA4OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0zMzMgMzMzaC0yNjJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYzODRxMCAyNiAxOSA0NXQ0NSAxOWgyNjJsMzMzIDMzM3ExOSAxOSA0NSAxOXQ0NSAtMTl0MTkgLTQ1ek0xMTUyIDY0MHEwIC03NiAtNDIuNSAtMTQxLjV0LTExMi41IC05My41cS0xMCAtNSAtMjUgLTVxLTI2IDAgLTQ1IDE4LjV0LTE5IDQ1LjVxMCAyMSAxMiAzNS41dDI5IDI1dDM0IDIzdDI5IDM1LjUgdDEyIDU3dC0xMiA1N3QtMjkgMzUuNXQtMzQgMjN0LTI5IDI1dC0xMiAzNS41cTAgMjcgMTkgNDUuNXQ0NSAxOC41cTE1IDAgMjUgLTVxNzAgLTI3IDExMi41IC05M3Q0Mi41IC0xNDJ6TTE0MDggNjQwcTAgLTE1MyAtODUgLTI4Mi41dC0yMjUgLTE4OC41cS0xMyAtNSAtMjUgLTVxLTI3IDAgLTQ2IDE5dC0xOSA0NXEwIDM5IDM5IDU5cTU2IDI5IDc2IDQ0cTc0IDU0IDExNS41IDEzNS41dDQxLjUgMTczLjV0LTQxLjUgMTczLjUgdC0xMTUuNSAxMzUuNXEtMjAgMTUgLTc2IDQ0cS0zOSAyMCAtMzkgNTlxMCAyNiAxOSA0NXQ0NSAxOXExMyAwIDI2IC01cTE0MCAtNTkgMjI1IC0xODguNXQ4NSAtMjgyLjV6TTE2NjQgNjQwcTAgLTIzMCAtMTI3IC00MjIuNXQtMzM4IC0yODMuNXEtMTMgLTUgLTI2IC01cS0yNiAwIC00NSAxOXQtMTkgNDVxMCAzNiAzOSA1OXE3IDQgMjIuNSAxMC41dDIyLjUgMTAuNXE0NiAyNSA4MiA1MXExMjMgOTEgMTkyIDIyN3Q2OSAyODl0LTY5IDI4OSB0LTE5MiAyMjdxLTM2IDI2IC04MiA1MXEtNyA0IC0yMi41IDEwLjV0LTIyLjUgMTAuNXEtMzkgMjMgLTM5IDU5cTAgMjYgMTkgNDV0NDUgMTlxMTMgMCAyNiAtNXEyMTEgLTkxIDMzOCAtMjgzLjV0MTI3IC00MjIuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyOTsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMzg0IDM4NHYtMTI4aC0xMjh2MTI4aDEyOHpNMzg0IDExNTJ2LTEyOGgtMTI4djEyOGgxMjh6TTExNTIgMTE1MnYtMTI4aC0xMjh2MTI4aDEyOHpNMTI4IDEyOWgzODR2MzgzaC0zODR2LTM4M3pNMTI4IDg5NmgzODR2Mzg0aC0zODR2LTM4NHpNODk2IDg5NmgzODR2Mzg0aC0zODR2LTM4NHpNNjQwIDY0MHYtNjQwaC02NDB2NjQwaDY0MHpNMTE1MiAxMjh2LTEyOGgtMTI4djEyOGgxMjh6TTE0MDggMTI4di0xMjhoLTEyOHYxMjhoMTI4eiBNMTQwOCA2NDB2LTM4NGgtMzg0djEyOGgtMTI4di0zODRoLTEyOHY2NDBoMzg0di0xMjhoMTI4djEyOGgxMjh6TTY0MCAxNDA4di02NDBoLTY0MHY2NDBoNjQwek0xNDA4IDE0MDh2LTY0MGgtNjQwdjY0MGg2NDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMmE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTY3MiAxNDA4di0xNTM2aC02NHYxNTM2aDY0ek0xNDA4IDE0MDh2LTE1MzZoLTY0djE1MzZoNjR6TTE1NjggMTQwOHYtMTUzNmgtNjR2MTUzNmg2NHpNNTc2IDE0MDh2LTE1MzZoLTY0djE1MzZoNjR6TTEyODAgMTQwOHYtMTUzNmgtMjU2djE1MzZoMjU2ek04OTYgMTQwOHYtMTUzNmgtMTI4djE1MzZoMTI4ek00NDggMTQwOHYtMTUzNmgtMTI4djE1MzZoMTI4ek0xNzkyIDE0MDh2LTE1MzZoLTEyOHYxNTM2aDEyOHpNMjU2IDE0MDh2LTE1MzYgaC0yNTZ2MTUzNmgyNTZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMmI7IiBkPSJNNDQ4IDEwODhxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTE1MTUgNTEycTAgLTUzIC0zNyAtOTBsLTQ5MSAtNDkycS0zOSAtMzcgLTkxIC0zN3EtNTMgMCAtOTAgMzdsLTcxNSA3MTZxLTM4IDM3IC02NC41IDEwMXQtMjYuNSAxMTd2NDE2cTAgNTIgMzggOTB0OTAgMzhoNDE2cTUzIDAgMTE3IC0yNi41dDEwMiAtNjQuNSBsNzE1IC03MTRxMzcgLTM5IDM3IC05MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyYzsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNNDQ4IDEwODhxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTE1MTUgNTEycTAgLTUzIC0zNyAtOTBsLTQ5MSAtNDkycS0zOSAtMzcgLTkxIC0zN3EtNTMgMCAtOTAgMzdsLTcxNSA3MTZxLTM4IDM3IC02NC41IDEwMXQtMjYuNSAxMTd2NDE2cTAgNTIgMzggOTB0OTAgMzhoNDE2cTUzIDAgMTE3IC0yNi41dDEwMiAtNjQuNSBsNzE1IC03MTRxMzcgLTM5IDM3IC05MXpNMTg5OSA1MTJxMCAtNTMgLTM3IC05MGwtNDkxIC00OTJxLTM5IC0zNyAtOTEgLTM3cS0zNiAwIC01OSAxNHQtNTMgNDVsNDcwIDQ3MHEzNyAzNyAzNyA5MHEwIDUyIC0zNyA5MWwtNzE1IDcxNHEtMzggMzggLTEwMiA2NC41dC0xMTcgMjYuNWgyMjRxNTMgMCAxMTcgLTI2LjV0MTAyIC02NC41bDcxNSAtNzE0cTM3IC0zOSAzNyAtOTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMmQ7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE2MzkgMTA1OHE0MCAtNTcgMTggLTEyOWwtMjc1IC05MDZxLTE5IC02NCAtNzYuNSAtMTA3LjV0LTEyMi41IC00My41aC05MjNxLTc3IDAgLTE0OC41IDUzLjV0LTk5LjUgMTMxLjVxLTI0IDY3IC0yIDEyN3EwIDQgMyAyN3Q0IDM3cTEgOCAtMyAyMS41dC0zIDE5LjVxMiAxMSA4IDIxdDE2LjUgMjMuNXQxNi41IDIzLjVxMjMgMzggNDUgOTEuNXQzMCA5MS41cTMgMTAgMC41IDMwdC0wLjUgMjhxMyAxMSAxNyAyOHQxNyAyMyBxMjEgMzYgNDIgOTJ0MjUgOTBxMSA5IC0yLjUgMzJ0MC41IDI4cTQgMTMgMjIgMzAuNXQyMiAyMi41cTE5IDI2IDQyLjUgODQuNXQyNy41IDk2LjVxMSA4IC0zIDI1LjV0LTIgMjYuNXEyIDggOSAxOHQxOCAyM3QxNyAyMXE4IDEyIDE2LjUgMzAuNXQxNSAzNXQxNiAzNnQxOS41IDMydDI2LjUgMjMuNXQzNiAxMS41dDQ3LjUgLTUuNWwtMSAtM3EzOCA5IDUxIDloNzYxcTc0IDAgMTE0IC01NnQxOCAtMTMwbC0yNzQgLTkwNiBxLTM2IC0xMTkgLTcxLjUgLTE1My41dC0xMjguNSAtMzQuNWgtODY5cS0yNyAwIC0zOCAtMTVxLTExIC0xNiAtMSAtNDNxMjQgLTcwIDE0NCAtNzBoOTIzcTI5IDAgNTYgMTUuNXQzNSA0MS41bDMwMCA5ODdxNyAyMiA1IDU3cTM4IC0xNSA1OSAtNDN6TTU3NSAxMDU2cS00IC0xMyAyIC0yMi41dDIwIC05LjVoNjA4cTEzIDAgMjUuNSA5LjV0MTYuNSAyMi41bDIxIDY0cTQgMTMgLTIgMjIuNXQtMjAgOS41aC02MDhxLTEzIDAgLTI1LjUgLTkuNSB0LTE2LjUgLTIyLjV6TTQ5MiA4MDBxLTQgLTEzIDIgLTIyLjV0MjAgLTkuNWg2MDhxMTMgMCAyNS41IDkuNXQxNi41IDIyLjVsMjEgNjRxNCAxMyAtMiAyMi41dC0yMCA5LjVoLTYwOHEtMTMgMCAtMjUuNSAtOS41dC0xNi41IC0yMi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDJlOyIgaG9yaXotYWR2LXg9IjEyODAiIGQ9Ik0xMTY0IDE0MDhxMjMgMCA0NCAtOXEzMyAtMTMgNTIuNSAtNDF0MTkuNSAtNjJ2LTEyODlxMCAtMzQgLTE5LjUgLTYydC01Mi41IC00MXEtMTkgLTggLTQ0IC04cS00OCAwIC04MyAzMmwtNDQxIDQyNGwtNDQxIC00MjRxLTM2IC0zMyAtODMgLTMzcS0yMyAwIC00NCA5cS0zMyAxMyAtNTIuNSA0MXQtMTkuNSA2MnYxMjg5cTAgMzQgMTkuNSA2MnQ1Mi41IDQxcTIxIDkgNDQgOWgxMDQ4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDJmOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0zODQgMGg4OTZ2MjU2aC04OTZ2LTI1NnpNMzg0IDY0MGg4OTZ2Mzg0aC0xNjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxNjBoLTY0MHYtNjQwek0xNTM2IDU3NnEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTE2NjQgNTc2di00MTZxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0yMjR2LTE2MHEwIC00MCAtMjggLTY4dC02OCAtMjhoLTk2MHEtNDAgMCAtNjggMjh0LTI4IDY4IHYxNjBoLTIyNHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djQxNnEwIDc5IDU2LjUgMTM1LjV0MTM1LjUgNTYuNWg2NHY1NDRxMCA0MCAyOCA2OHQ2OCAyOGg2NzJxNDAgMCA4OCAtMjB0NzYgLTQ4bDE1MiAtMTUycTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0yNTZoNjRxNzkgMCAxMzUuNSAtNTYuNXQ1Ni41IC0xMzUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzMDsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNOTYwIDg2NHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXQtODQuNSAtMjAzLjV0LTIwMy41IC04NC41dC0yMDMuNSA4NC41dC04NC41IDIwMy41dDg0LjUgMjAzLjV0MjAzLjUgODQuNXpNMTY2NCAxMjgwcTEwNiAwIDE4MSAtNzV0NzUgLTE4MXYtODk2cTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NWgtMTQwOHEtMTA2IDAgLTE4MSA3NXQtNzUgMTgxdjg5NnEwIDEwNiA3NSAxODF0MTgxIDc1aDIyNGw1MSAxMzYgcTE5IDQ5IDY5LjUgODQuNXQxMDMuNSAzNS41aDUxMnE1MyAwIDEwMy41IC0zNS41dDY5LjUgLTg0LjVsNTEgLTEzNmgyMjR6TTk2MCAxMjhxMTg1IDAgMzE2LjUgMTMxLjV0MTMxLjUgMzE2LjV0LTEzMS41IDMxNi41dC0zMTYuNSAxMzEuNXQtMzE2LjUgLTEzMS41dC0xMzEuNSAtMzE2LjV0MTMxLjUgLTMxNi41dDMxNi41IC0xMzEuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzMTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNzI1IDk3N2wtMTcwIC00NTBxNzMgLTEgMTUzLjUgLTJ0MTE5IC0xLjV0NTIuNSAtMC41bDI5IDJxLTMyIDk1IC05MiAyNDFxLTUzIDEzMiAtOTIgMjExek0yMSAtMTI4aC0yMWwyIDc5cTIyIDcgODAgMThxODkgMTYgMTEwIDMxcTIwIDE2IDQ4IDY4bDIzNyA2MTZsMjgwIDcyNGg3NWg1M2wxMSAtMjFsMjA1IC00ODBxMTAzIC0yNDIgMTI0IC0yOTdxMzkgLTEwMiA5NiAtMjM1cTI2IC01OCA2NSAtMTY0cTI0IC02NyA2NSAtMTQ5IHEyMiAtNDkgMzUgLTU3cTIyIC0xOSA2OSAtMjNxNDcgLTYgMTAzIC0yN3E2IC0zOSA2IC01N3EwIC0xNCAtMSAtMjZxLTgwIDAgLTE5MiA4cS05MyA4IC0xODkgOHEtNzkgMCAtMTM1IC0ybC0yMDAgLTExbC01OCAtMnEwIDQ1IDQgNzhsMTMxIDI4cTU2IDEzIDY4IDIzcTEyIDEyIDEyIDI3dC02IDMybC00NyAxMTRsLTkyIDIyOGwtNDUwIDJxLTI5IC02NSAtMTA0IC0yNzRxLTIzIC02NCAtMjMgLTg0cTAgLTMxIDE3IC00MyBxMjYgLTIxIDEwMyAtMzJxMyAwIDEzLjUgLTJ0MzAgLTV0NDAuNSAtNnExIC0yOCAxIC01OHEwIC0xNyAtMiAtMjdxLTY2IDAgLTM0OSAyMGwtNDggLThxLTgxIC0xNCAtMTY3IC0xNHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzMjsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNNTU1IDE1cTc2IC0zMiAxNDAgLTMycTEzMSAwIDIxNiA0MXQxMjIgMTEzcTM4IDcwIDM4IDE4MXEwIDExNCAtNDEgMTgwcS01OCA5NCAtMTQxIDEyNnEtODAgMzIgLTI0NyAzMnEtNzQgMCAtMTAxIC0xMHYtMTQ0bC0xIC0xNzNsMyAtMjcwcTAgLTE1IDEyIC00NHpNNTQxIDc2MXE0MyAtNyAxMDkgLTdxMTc1IDAgMjY0IDY1dDg5IDIyNHEwIDExMiAtODUgMTg3cS04NCA3NSAtMjU1IDc1cS01MiAwIC0xMzAgLTEzcTAgLTQ0IDIgLTc3IHE3IC0xMjIgNiAtMjc5bC0xIC05OHEwIC00MyAxIC03N3pNMCAtMTI4bDIgOTRxNDUgOSA2OCAxMnE3NyAxMiAxMjMgMzFxMTcgMjcgMjEgNTFxOSA2NiA5IDE5NGwtMiA0OTdxLTUgMjU2IC05IDQwNHEtMSA4NyAtMTEgMTA5cS0xIDQgLTEyIDEycS0xOCAxMiAtNjkgMTVxLTMwIDIgLTExNCAxM2wtNCA4M2wyNjAgNmwzODAgMTNsNDUgMXE1IDAgMTQgMC41dDE0IDAuNXExIDAgMjEuNSAtMC41dDQwLjUgLTAuNWg3NHE4OCAwIDE5MSAtMjcgcTQzIC0xMyA5NiAtMzlxNTcgLTI5IDEwMiAtNzZxNDQgLTQ3IDY1IC0xMDR0MjEgLTEyMnEwIC03MCAtMzIgLTEyOHQtOTUgLTEwNXEtMjYgLTIwIC0xNTAgLTc3cTE3NyAtNDEgMjY3IC0xNDZxOTIgLTEwNiA5MiAtMjM2cTAgLTc2IC0yOSAtMTYxcS0yMSAtNjIgLTcxIC0xMTdxLTY2IC03MiAtMTQwIC0xMDhxLTczIC0zNiAtMjAzIC02MHEtODIgLTE1IC0xOTggLTExbC0xOTcgNHEtODQgMiAtMjk4IC0xMXEtMzMgLTMgLTI3MiAtMTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMzM7IiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTAgLTEyNmwxNyA4NXE0IDEgNzcgMjBxNzYgMTkgMTE2IDM5cTI5IDM3IDQxIDEwMWwyNyAxMzlsNTYgMjY4bDEyIDY0cTggNDQgMTcgODQuNXQxNiA2N3QxMi41IDQ2LjV0OSAzMC41dDMuNSAxMS41bDI5IDE1N2wxNiA2M2wyMiAxMzVsOCA1MHYzOHEtNDEgMjIgLTE0NCAyOHEtMjggMiAtMzggNGwxOSAxMDNsMzE3IC0xNHEzOSAtMiA3MyAtMnE2NiAwIDIxNCA5cTMzIDIgNjggNC41dDM2IDIuNXEtMiAtMTkgLTYgLTM4IHEtNyAtMjkgLTEzIC01MXEtNTUgLTE5IC0xMDkgLTMxcS02NCAtMTYgLTEwMSAtMzFxLTEyIC0zMSAtMjQgLTg4cS05IC00NCAtMTMgLTgycS00NCAtMTk5IC02NiAtMzA2bC02MSAtMzExbC0zOCAtMTU4bC00MyAtMjM1bC0xMiAtNDVxLTIgLTcgMSAtMjdxNjQgLTE1IDExOSAtMjFxMzYgLTUgNjYgLTEwcS0xIC0yOSAtNyAtNThxLTcgLTMxIC05IC00MXEtMTggMCAtMjMgLTFxLTI0IC0yIC00MiAtMnEtOSAwIC0yOCAzcS0xOSA0IC0xNDUgMTcgbC0xOTggMnEtNDEgMSAtMTc0IC0xMXEtNzQgLTcgLTk4IC05eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDM0OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik04MSAxNDA3bDU0IC0yN3EyMCAtNSAyMTEgLTVoMTMwbDE5IDNsMTE1IDFsMjE1IC0xaDI5M2wzNCAtMnExNCAtMSAyOCA3dDIxIDE2bDcgOGw0MiAxcTE1IDAgMjggLTF2LTEwNC41dDEgLTEzMS41bDEgLTEwMGwtMSAtNThxMCAtMzIgLTQgLTUxcS0zOSAtMTUgLTY4IC0xOHEtMjUgNDMgLTU0IDEyOHEtOCAyNCAtMTUuNSA2Mi41dC0xMS41IDY1LjV0LTYgMjlxLTEzIDE1IC0yNyAxOXEtNyAyIC00Mi41IDJ0LTEwMy41IC0xdC0xMTEgLTEgcS0zNCAwIC02NyAtNXEtMTAgLTk3IC04IC0xMzZsMSAtMTUydi0zMzJsMyAtMzU5bC0xIC0xNDdxLTEgLTQ2IDExIC04NXE0OSAtMjUgODkgLTMycTIgMCAxOCAtNXQ0NCAtMTN0NDMgLTEycTMwIC04IDUwIC0xOHE1IC00NSA1IC01MHEwIC0xMCAtMyAtMjlxLTE0IC0xIC0zNCAtMXEtMTEwIDAgLTE4NyAxMHEtNzIgOCAtMjM4IDhxLTg4IDAgLTIzMyAtMTRxLTQ4IC00IC03MCAtNHEtMiAyMiAtMiAyNmwtMSAyNnY5cTIxIDMzIDc5IDQ5IHExMzkgMzggMTU5IDUwcTkgMjEgMTIgNTZxOCAxOTIgNiA0MzNsLTUgNDI4cS0xIDYyIC0wLjUgMTE4LjV0MC41IDEwMi41dC0yIDU3dC02IDE1cS02IDUgLTE0IDZxLTM4IDYgLTE0OCA2cS00MyAwIC0xMDAgLTEzLjV0LTczIC0yNC41cS0xMyAtOSAtMjIgLTMzdC0yMiAtNzV0LTI0IC04NHEtNiAtMTkgLTE5LjUgLTMydC0yMC41IC0xM3EtNDQgMjcgLTU2IDQ0djI5N3Y4NnpNMTc0NCAxMjhxMzMgMCA0MiAtMTguNXQtMTEgLTQ0LjUgbC0xMjYgLTE2MnEtMjAgLTI2IC00OSAtMjZ0LTQ5IDI2bC0xMjYgMTYycS0yMCAyNiAtMTEgNDQuNXQ0MiAxOC41aDgwdjEwMjRoLTgwcS0zMyAwIC00MiAxOC41dDExIDQ0LjVsMTI2IDE2MnEyMCAyNiA0OSAyNnQ0OSAtMjZsMTI2IC0xNjJxMjAgLTI2IDExIC00NC41dC00MiAtMTguNWgtODB2LTEwMjRoODB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMzU7IiBkPSJNODEgMTQwN2w1NCAtMjdxMjAgLTUgMjExIC01aDEzMGwxOSAzbDExNSAxbDQ0NiAtMWgzMThsMzQgLTJxMTQgLTEgMjggN3QyMSAxNmw3IDhsNDIgMXExNSAwIDI4IC0xdi0xMDQuNXQxIC0xMzEuNWwxIC0xMDBsLTEgLTU4cTAgLTMyIC00IC01MXEtMzkgLTE1IC02OCAtMThxLTI1IDQzIC01NCAxMjhxLTggMjQgLTE1LjUgNjIuNXQtMTEuNSA2NS41dC02IDI5cS0xMyAxNSAtMjcgMTlxLTcgMiAtNTguNSAydC0xMzguNSAtMXQtMTI4IC0xIHEtOTQgMCAtMTI3IC01cS0xMCAtOTcgLTggLTEzNmwxIC0xNTJ2NTJsMyAtMzU5bC0xIC0xNDdxLTEgLTQ2IDExIC04NXE0OSAtMjUgODkgLTMycTIgMCAxOCAtNXQ0NCAtMTN0NDMgLTEycTMwIC04IDUwIC0xOHE1IC00NSA1IC01MHEwIC0xMCAtMyAtMjlxLTE0IC0xIC0zNCAtMXEtMTEwIDAgLTE4NyAxMHEtNzIgOCAtMjM4IDhxLTgyIDAgLTIzMyAtMTNxLTQ1IC01IC03MCAtNXEtMiAyMiAtMiAyNmwtMSAyNnY5cTIxIDMzIDc5IDQ5IHExMzkgMzggMTU5IDUwcTkgMjEgMTIgNTZxNiAxMzcgNiA0MzNsLTUgNDRxMCAyNjUgLTIgMjc4cS0yIDExIC02IDE1cS02IDUgLTE0IDZxLTM4IDYgLTE0OCA2cS01MCAwIC0xNjguNSAtMTR0LTEzMi41IC0yNHEtMTMgLTkgLTIyIC0zM3QtMjIgLTc1dC0yNCAtODRxLTYgLTE5IC0xOS41IC0zMnQtMjAuNSAtMTNxLTQ0IDI3IC01NiA0NHYyOTd2ODZ6TTE1MDUgMTEzcTI2IC0yMCAyNiAtNDl0LTI2IC00OWwtMTYyIC0xMjYgcS0yNiAtMjAgLTQ0LjUgLTExdC0xOC41IDQydjgwaC0xMDI0di04MHEwIC0zMyAtMTguNSAtNDJ0LTQ0LjUgMTFsLTE2MiAxMjZxLTI2IDIwIC0yNiA0OXQyNiA0OWwxNjIgMTI2cTI2IDIwIDQ0LjUgMTF0MTguNSAtNDJ2LTgwaDEwMjR2ODBxMCAzMyAxOC41IDQydDQ0LjUgLTExeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDM2OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzkyIDE5MnYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNDA4IDU3NnYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4MHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDEyODBxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNjY0IDk2MHYtMTI4cTAgLTI2IC0xOSAtNDUgdC00NSAtMTloLTE1MzZxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNTM2cTI2IDAgNDUgLTE5dDE5IC00NXpNMTI4MCAxMzQ0di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMTUycS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTE1MnEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMzc7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgMTkydi0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE0MDggNTc2di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC04OTZxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWg4OTZxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNjY0IDk2MHYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOSBoLTE0MDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNDA4cTI2IDAgNDUgLTE5dDE5IC00NXpNMTI4MCAxMzQ0di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC02NDBxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWg2NDBxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDM4OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzkyIDE5MnYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNzkyIDU3NnYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4MHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDEyODBxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNzkyIDk2MHYtMTI4cTAgLTI2IC0xOSAtNDUgdC00NSAtMTloLTE1MzZxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNTM2cTI2IDAgNDUgLTE5dDE5IC00NXpNMTc5MiAxMzQ0di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMTUycS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTE1MnEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMzk7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgMTkydi0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgNTc2di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgOTYwdi0xMjhxMCAtMjYgLTE5IC00NSB0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNzkyIDEzNDR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE2NjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNjY0cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzYTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMjU2IDIyNHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTkycS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTkycTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMjU2IDYwOHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTkycS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTkycTEzIDAgMjIuNSAtOS41IHQ5LjUgLTIyLjV6TTI1NiA5OTJ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE5MnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDE5MnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgMjI0di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMzQ0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTM0NCBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0yNTYgMTM3NnYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTkycS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTkycTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiA2MDh2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEzNDRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNSB0MjIuNSA5LjVoMTM0NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgOTkydi0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMzQ0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTM0NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgMTM3NnYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTM0NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MiBxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMzQ0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzYjsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMzg0IDk5MnYtNTc2cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNXEtMTQgMCAtMjMgOWwtMjg4IDI4OHEtOSA5IC05IDIzdDkgMjNsMjg4IDI4OHE5IDkgMjMgOXExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgMjI0di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xNzI4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTcyOHExMyAwIDIyLjUgLTkuNSB0OS41IC0yMi41ek0xNzkyIDYwOHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTA4OHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEwODhxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDk5MnYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTA4OHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEwODggcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiAxMzc2di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xNzI4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTcyOHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwM2M7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTM1MiA3MDRxMCAtMTQgLTkgLTIzbC0yODggLTI4OHEtOSAtOSAtMjMgLTlxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY1NzZxMCAxMyA5LjUgMjIuNXQyMi41IDkuNXExNCAwIDIzIC05bDI4OCAtMjg4cTkgLTkgOSAtMjN6TTE3OTIgMjI0di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xNzI4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTcyOHExMyAwIDIyLjUgLTkuNSB0OS41IC0yMi41ek0xNzkyIDYwOHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTA4OHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEwODhxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDk5MnYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTA4OHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEwODggcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiAxMzc2di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xNzI4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTcyOHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwM2Q7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTE5MDAgMTI3OHEyMCAtOCAyMCAtMzB2LTEyMTZxMCAtMjIgLTIwIC0zMHEtOCAtMiAtMTIgLTJxLTEyIDAgLTIzIDlsLTU4NSA1ODZ2LTMwN3EwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtNzA0cS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY3MDRxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDcwNHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXYtMzA3bDU4NSA1ODZxMTYgMTUgMzUgN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzZTsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNNjQwIDk2MHEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ6TTE2NjQgNTc2di00NDhoLTE0MDh2MTkybDMyMCAzMjBsMTYwIC0xNjBsNTEyIDUxMnpNMTc2MCAxMjgwaC0xNjAwcS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtMTIxNnEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDE2MDBxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXYxMjE2IHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjV6TTE5MjAgMTI0OHYtMTIxNnEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTYwMHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTIxNnEwIDY2IDQ3IDExM3QxMTMgNDdoMTYwMHE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0MDsiIGQ9Ik0zNjMgMGw5MSA5MWwtMjM1IDIzNWwtOTEgLTkxdi0xMDdoMTI4di0xMjhoMTA3ek04ODYgOTI4cTAgMjIgLTIyIDIycS0xMCAwIC0xNyAtN2wtNTQyIC01NDJxLTcgLTcgLTcgLTE3cTAgLTIyIDIyIC0yMnExMCAwIDE3IDdsNTQyIDU0MnE3IDcgNyAxN3pNODMyIDExMjBsNDE2IC00MTZsLTgzMiAtODMyaC00MTZ2NDE2ek0xNTE1IDEwMjRxMCAtNTMgLTM3IC05MGwtMTY2IC0xNjZsLTQxNiA0MTZsMTY2IDE2NXEzNiAzOCA5MCAzOCBxNTMgMCA5MSAtMzhsMjM1IC0yMzRxMzcgLTM5IDM3IC05MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0MTsiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNNzY4IDg5NnEwIDEwNiAtNzUgMTgxdC0xODEgNzV0LTE4MSAtNzV0LTc1IC0xODF0NzUgLTE4MXQxODEgLTc1dDE4MSA3NXQ3NSAxODF6TTEwMjQgODk2cTAgLTEwOSAtMzMgLTE3OWwtMzY0IC03NzRxLTE2IC0zMyAtNDcuNSAtNTJ0LTY3LjUgLTE5dC02Ny41IDE5dC00Ni41IDUybC0zNjUgNzc0cS0zMyA3MCAtMzMgMTc5cTAgMjEyIDE1MCAzNjJ0MzYyIDE1MHQzNjIgLTE1MHQxNTAgLTM2MnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0MjsiIGQ9Ik03NjggMTQwOHEyMDkgMCAzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41dC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzek0yNTYgNjQwcTAgLTEwNCA0MC41IC0xOTguNXQxMDkuNSAtMTYzLjV0MTYzLjUgLTEwOS41dDE5OC41IC00MC41djEwMjRxLTEwNCAwIC0xOTguNSAtNDAuNSB0LTE2My41IC0xMDkuNXQtMTA5LjUgLTE2My41dC00MC41IC0xOTguNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0MzsiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNNTEyIDM4NHEwIDM2IC0yMCA2OXEtMSAxIC0xNS41IDIyLjV0LTI1LjUgMzh0LTI1IDQ0dC0yMSA1MC41cS00IDE2IC0yMSAxNnQtMjEgLTE2cS03IC0yMyAtMjEgLTUwLjV0LTI1IC00NHQtMjUuNSAtMzh0LTE1LjUgLTIyLjVxLTIwIC0zMyAtMjAgLTY5cTAgLTUzIDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xMDI0IDUxMnEwIC0yMTIgLTE1MCAtMzYydC0zNjIgLTE1MHQtMzYyIDE1MHQtMTUwIDM2MiBxMCAxNDUgODEgMjc1cTYgOSA2Mi41IDkwLjV0MTAxIDE1MXQ5OS41IDE3OHQ4MyAyMDEuNXE5IDMwIDM0IDQ3dDUxIDE3dDUxLjUgLTE3dDMzLjUgLTQ3cTI4IC05MyA4MyAtMjAxLjV0OTkuNSAtMTc4dDEwMSAtMTUxdDYyLjUgLTkwLjVxODEgLTEyNyA4MSAtMjc1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDQ0OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik04ODggMzUybDExNiAxMTZsLTE1MiAxNTJsLTExNiAtMTE2di01Nmg5NnYtOTZoNTZ6TTEzMjggMTA3MnEtMTYgMTYgLTMzIC0xbC0zNTAgLTM1MHEtMTcgLTE3IC0xIC0zM3QzMyAxbDM1MCAzNTBxMTcgMTcgMSAzM3pNMTQwOCA0Nzh2LTE5MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtODMycS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY4MzJxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDgzMiBxNjMgMCAxMTcgLTI1cTE1IC03IDE4IC0yM3EzIC0xNyAtOSAtMjlsLTQ5IC00OXEtMTQgLTE0IC0zMiAtOHEtMjMgNiAtNDUgNmgtODMycS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzdi04MzJxMCAtNjYgNDcgLTExM3QxMTMgLTQ3aDgzMnE2NiAwIDExMyA0N3Q0NyAxMTN2MTI2cTAgMTMgOSAyMmw2NCA2NHExNSAxNSAzNSA3dDIwIC0yOXpNMTMxMiAxMjE2bDI4OCAtMjg4bC02NzIgLTY3MmgtMjg4djI4OHpNMTc1NiAxMDg0bC05MiAtOTIgbC0yODggMjg4bDkyIDkycTI4IDI4IDY4IDI4dDY4IC0yOGwxNTIgLTE1MnEyOCAtMjggMjggLTY4dC0yOCAtNjh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNDU7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE0MDggNTQ3di0yNTlxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTgzMnEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2ODMycTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWgyNTV2MHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjVxMCAtMjcgLTI2IC0zMnEtNzcgLTI2IC0xMzMgLTYwcS0xMCAtNCAtMTYgLTRoLTExMnEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3YtODMycTAgLTY2IDQ3IC0xMTN0MTEzIC00N2g4MzIgcTY2IDAgMTEzIDQ3dDQ3IDExM3YyMTRxMCAxOSAxOCAyOXEyOCAxMyA1NCAzN3ExNiAxNiAzNSA4cTIxIC05IDIxIC0yOXpNMTY0NSAxMDQzbC0zODQgLTM4NHEtMTggLTE5IC00NSAtMTlxLTEyIDAgLTI1IDVxLTM5IDE3IC0zOSA1OXYxOTJoLTE2MHEtMzIzIDAgLTQzOCAtMTMxcS0xMTkgLTEzNyAtNzQgLTQ3M3EzIC0yMyAtMjAgLTM0cS04IC0yIC0xMiAtMnEtMTYgMCAtMjYgMTNxLTEwIDE0IC0yMSAzMXQtMzkuNSA2OC41dC00OS41IDk5LjUgdC0zOC41IDExNHQtMTcuNSAxMjJxMCA0OSAzLjUgOTF0MTQgOTB0MjggODh0NDcgODEuNXQ2OC41IDc0dDk0LjUgNjEuNXQxMjQuNSA0OC41dDE1OS41IDMwLjV0MTk2LjUgMTFoMTYwdjE5MnEwIDQyIDM5IDU5cTEzIDUgMjUgNXEyNiAwIDQ1IC0xOWwzODQgLTM4NHExOSAtMTkgMTkgLTQ1dC0xOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNDY7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE0MDggNjA2di0zMThxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTgzMnEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2ODMycTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg4MzJxNjMgMCAxMTcgLTI1cTE1IC03IDE4IC0yM3EzIC0xNyAtOSAtMjlsLTQ5IC00OXEtMTAgLTEwIC0yMyAtMTBxLTMgMCAtOSAycS0yMyA2IC00NSA2aC04MzJxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN2LTgzMiBxMCAtNjYgNDcgLTExM3QxMTMgLTQ3aDgzMnE2NiAwIDExMyA0N3Q0NyAxMTN2MjU0cTAgMTMgOSAyMmw2NCA2NHExMCAxMCAyMyAxMHE2IDAgMTIgLTNxMjAgLTggMjAgLTI5ek0xNjM5IDEwOTVsLTgxNCAtODE0cS0yNCAtMjQgLTU3IC0yNHQtNTcgMjRsLTQzMCA0MzBxLTI0IDI0IC0yNCA1N3QyNCA1N2wxMTAgMTEwcTI0IDI0IDU3IDI0dDU3IC0yNGwyNjMgLTI2M2w2NDcgNjQ3cTI0IDI0IDU3IDI0dDU3IC0yNGwxMTAgLTExMCBxMjQgLTI0IDI0IC01N3QtMjQgLTU3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDQ3OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzkyIDY0MHEwIC0yNiAtMTkgLTQ1bC0yNTYgLTI1NnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5dC0xOSA0NXYxMjhoLTM4NHYtMzg0aDEyOHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NWwtMjU2IC0yNTZxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtMjU2IDI1NnEtMTkgMTkgLTE5IDQ1dDE5IDQ1dDQ1IDE5aDEyOHYzODRoLTM4NHYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTlsLTI1NiAyNTZxLTE5IDE5IC0xOSA0NSB0MTkgNDVsMjU2IDI1NnExOSAxOSA0NSAxOXQ0NSAtMTl0MTkgLTQ1di0xMjhoMzg0djM4NGgtMTI4cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDVsMjU2IDI1NnExOSAxOSA0NSAxOXQ0NSAtMTlsMjU2IC0yNTZxMTkgLTE5IDE5IC00NXQtMTkgLTQ1dC00NSAtMTloLTEyOHYtMzg0aDM4NHYxMjhxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTlsMjU2IC0yNTZxMTkgLTE5IDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0ODsiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNOTc5IDEzOTVxMTkgMTkgMzIgMTN0MTMgLTMydi0xNDcycTAgLTI2IC0xMyAtMzJ0LTMyIDEzbC03MTAgNzEwcS05IDkgLTEzIDE5di02NzhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNDA4cTAgMjYgMTkgNDV0NDUgMTloMTI4cTI2IDAgNDUgLTE5dDE5IC00NXYtNjc4cTQgMTEgMTMgMTl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNDk7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3NDcgMTM5NXExOSAxOSAzMiAxM3QxMyAtMzJ2LTE0NzJxMCAtMjYgLTEzIC0zMnQtMzIgMTNsLTcxMCA3MTBxLTkgOSAtMTMgMTl2LTcxMHEwIC0yNiAtMTMgLTMydC0zMiAxM2wtNzEwIDcxMHEtOSA5IC0xMyAxOXYtNjc4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4cS0yNiAwIC00NSAxOXQtMTkgNDV2MTQwOHEwIDI2IDE5IDQ1dDQ1IDE5aDEyOHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTY3OHE0IDExIDEzIDE5bDcxMCA3MTAgcTE5IDE5IDMyIDEzdDEzIC0zMnYtNzEwcTQgMTEgMTMgMTl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNGE7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE2MTkgMTM5NXExOSAxOSAzMiAxM3QxMyAtMzJ2LTE0NzJxMCAtMjYgLTEzIC0zMnQtMzIgMTNsLTcxMCA3MTBxLTggOSAtMTMgMTl2LTcxMHEwIC0yNiAtMTMgLTMydC0zMiAxM2wtNzEwIDcxMHEtMTkgMTkgLTE5IDQ1dDE5IDQ1bDcxMCA3MTBxMTkgMTkgMzIgMTN0MTMgLTMydi03MTBxNSAxMSAxMyAxOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0YjsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMTM4NCA2MDlsLTEzMjggLTczOHEtMjMgLTEzIC0zOS41IC0zdC0xNi41IDM2djE0NzJxMCAyNiAxNi41IDM2dDM5LjUgLTNsMTMyOCAtNzM4cTIzIC0xMyAyMyAtMzF0LTIzIC0zMXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0YzsiIGQ9Ik0xNTM2IDEzNDR2LTE0MDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC01MTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNDA4cTAgMjYgMTkgNDV0NDUgMTloNTEycTI2IDAgNDUgLTE5dDE5IC00NXpNNjQwIDEzNDR2LTE0MDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC01MTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNDA4cTAgMjYgMTkgNDV0NDUgMTloNTEycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0ZDsiIGQ9Ik0xNTM2IDEzNDR2LTE0MDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNDA4cS0yNiAwIC00NSAxOXQtMTkgNDV2MTQwOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDRlOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik00NSAtMTE1cS0xOSAtMTkgLTMyIC0xM3QtMTMgMzJ2MTQ3MnEwIDI2IDEzIDMydDMyIC0xM2w3MTAgLTcxMHE4IC04IDEzIC0xOXY3MTBxMCAyNiAxMyAzMnQzMiAtMTNsNzEwIC03MTBxMTkgLTE5IDE5IC00NXQtMTkgLTQ1bC03MTAgLTcxMHEtMTkgLTE5IC0zMiAtMTN0LTEzIDMydjcxMHEtNSAtMTAgLTEzIC0xOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA1MDsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNDUgLTExNXEtMTkgLTE5IC0zMiAtMTN0LTEzIDMydjE0NzJxMCAyNiAxMyAzMnQzMiAtMTNsNzEwIC03MTBxOCAtOCAxMyAtMTl2NzEwcTAgMjYgMTMgMzJ0MzIgLTEzbDcxMCAtNzEwcTggLTggMTMgLTE5djY3OHEwIDI2IDE5IDQ1dDQ1IDE5aDEyOHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTE0MDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXY2NzhxLTUgLTEwIC0xMyAtMTlsLTcxMCAtNzEwIHEtMTkgLTE5IC0zMiAtMTN0LTEzIDMydjcxMHEtNSAtMTAgLTEzIC0xOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA1MTsiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNNDUgLTExNXEtMTkgLTE5IC0zMiAtMTN0LTEzIDMydjE0NzJxMCAyNiAxMyAzMnQzMiAtMTNsNzEwIC03MTBxOCAtOCAxMyAtMTl2Njc4cTAgMjYgMTkgNDV0NDUgMTloMTI4cTI2IDAgNDUgLTE5dDE5IC00NXYtMTQwOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djY3OHEtNSAtMTAgLTEzIC0xOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA1MjsiIGhvcml6LWFkdi14PSIxNTM4IiBkPSJNMTQgNTU3bDcxMCA3MTBxMTkgMTkgNDUgMTl0NDUgLTE5bDcxMCAtNzEwcTE5IC0xOSAxMyAtMzJ0LTMyIC0xM2gtMTQ3MnEtMjYgMCAtMzIgMTN0MTMgMzJ6TTE0NzMgMGgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1di0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDUzOyIgaG9yaXotYWR2LXg9IjExNTIiIGQ9Ik03NDIgLTM3bC02NTIgNjUxcS0zNyAzNyAtMzcgOTAuNXQzNyA5MC41bDY1MiA2NTFxMzcgMzcgOTAuNSAzN3Q5MC41IC0zN2w3NSAtNzVxMzcgLTM3IDM3IC05MC41dC0zNyAtOTAuNWwtNDg2IC00ODZsNDg2IC00ODVxMzcgLTM4IDM3IC05MXQtMzcgLTkwbC03NSAtNzVxLTM3IC0zNyAtOTAuNSAtMzd0LTkwLjUgMzd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNTQ7IiBob3Jpei1hZHYteD0iMTE1MiIgZD0iTTEwOTkgNzA0cTAgLTUyIC0zNyAtOTFsLTY1MiAtNjUxcS0zNyAtMzcgLTkwIC0zN3QtOTAgMzdsLTc2IDc1cS0zNyAzOSAtMzcgOTFxMCA1MyAzNyA5MGw0ODYgNDg2bC00ODYgNDg1cS0zNyAzOSAtMzcgOTFxMCA1MyAzNyA5MGw3NiA3NXEzNiAzOCA5MCAzOHQ5MCAtMzhsNjUyIC02NTFxMzcgLTM3IDM3IC05MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA1NTsiIGQ9Ik0xMjE2IDU3NnYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0yNTZ2MjU2cTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMjU2aC0yNTZxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgyNTZ2LTI1NnEwIC0yNiAxOSAtNDV0NDUgLTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1djI1NmgyNTZxMjYgMCA0NSAxOXQxOSA0NXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41IHQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDU2OyIgZD0iTTEyMTYgNTc2djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTc2OHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDc2OHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjUgdDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNTc7IiBkPSJNMTE0OSA0MTRxMCAyNiAtMTkgNDVsLTE4MSAxODFsMTgxIDE4MXExOSAxOSAxOSA0NXEwIDI3IC0xOSA0NmwtOTAgOTBxLTE5IDE5IC00NiAxOXEtMjYgMCAtNDUgLTE5bC0xODEgLTE4MWwtMTgxIDE4MXEtMTkgMTkgLTQ1IDE5cS0yNyAwIC00NiAtMTlsLTkwIC05MHEtMTkgLTE5IC0xOSAtNDZxMCAtMjYgMTkgLTQ1bDE4MSAtMTgxbC0xODEgLTE4MXEtMTkgLTE5IC0xOSAtNDVxMCAtMjcgMTkgLTQ2bDkwIC05MHExOSAtMTkgNDYgLTE5IHEyNiAwIDQ1IDE5bDE4MSAxODFsMTgxIC0xODFxMTkgLTE5IDQ1IC0xOXEyNyAwIDQ2IDE5bDkwIDkwcTE5IDE5IDE5IDQ2ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA1ODsiIGQ9Ik0xMjg0IDgwMnEwIDI4IC0xOCA0NmwtOTEgOTBxLTE5IDE5IC00NSAxOXQtNDUgLTE5bC00MDggLTQwN2wtMjI2IDIyNnEtMTkgMTkgLTQ1IDE5dC00NSAtMTlsLTkxIC05MHEtMTggLTE4IC0xOCAtNDZxMCAtMjcgMTggLTQ1bDM2MiAtMzYycTE5IC0xOSA0NSAtMTlxMjcgMCA0NiAxOWw1NDMgNTQzcTE4IDE4IDE4IDQ1ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzIHQtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNTk7IiBkPSJNODk2IDE2MHYxOTJxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xOTJxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0xOTJxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxOTJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTE1MiA4MzJxMCA5NyAtNTguNSAxNzJ0LTE0NC41IDExMS41dC0xODEgMzYuNXQtMTgxIC0zNi41dC0xNDQuNSAtMTExLjV0LTU4LjUgLTE3MnYtMTF2LTEzdDEgLTExLjV0MyAtMTEuNXQ1LjUgLTh0OSAtNyB0MTMuNSAtMmgxOTJxMTQgMCAyMyA5dDkgMjNxMCAxMiAxMSAyN3ExOSAzMSA1MC41IDUwdDY2LjUgMTlxMzkgMCA4MyAtMjEuNXQ0NCAtNTcuNXEwIC0zMyAtMjYuNSAtNTh0LTYzLjUgLTQ0dC03NC41IC00MS41dC02NCAtNjMuNXQtMjYuNSAtOTh2LTExdi0xM3QxIC0xMS41dDMgLTExLjV0NS41IC04dDkgLTd0MTMuNSAtMmgxOTJxMTcgMCAyNCAxMC41dDggMjQuNXQxMy41IDMzdDM3LjUgMzJxNjAgMzMgNzAgMzlxNjIgNDQgOTguNSAxMDggdDM2LjUgMTM3ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA1YTsiIGQ9Ik0xMDI0IDE2MHY2NHEwIDE0IC05IDIzdC0yMyA5aC05NnY0ODBxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDk2di0zODRoLTk2cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDQ0OHExNCAwIDIzIDl0OSAyM3pNODk2IDkyOHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMTkycS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yMyB0MjMgLTloMTkycTE0IDAgMjMgOXQ5IDIzek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA1YjsiIGQ9Ik0xMTk3IDUxMmgtMTA5cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTA5cS0zMiAxMDggLTExMi41IDE4OC41dC0xODguNSAxMTIuNXYtMTA5cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4cS0yNiAwIC00NSAxOXQtMTkgNDV2MTA5cS0xMDggLTMyIC0xODguNSAtMTEyLjV0LTExMi41IC0xODguNWgxMDlxMjYgMCA0NSAtMTl0MTkgLTQ1di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMDkgcTMyIC0xMDggMTEyLjUgLTE4OC41dDE4OC41IC0xMTIuNXYxMDlxMCAyNiAxOSA0NXQ0NSAxOWgxMjhxMjYgMCA0NSAtMTl0MTkgLTQ1di0xMDlxMTA4IDMyIDE4OC41IDExMi41dDExMi41IDE4OC41ek0xNTM2IDcwNHYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTQzcS0zNyAtMTYxIC0xNTQuNSAtMjc4LjV0LTI3OC41IC0xNTQuNXYtMTQzcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4cS0yNiAwIC00NSAxOXQtMTkgNDV2MTQzIHEtMTYxIDM3IC0yNzguNSAxNTQuNXQtMTU0LjUgMjc4LjVoLTE0M3EtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0M3EzNyAxNjEgMTU0LjUgMjc4LjV0Mjc4LjUgMTU0LjV2MTQzcTAgMjYgMTkgNDV0NDUgMTloMTI4cTI2IDAgNDUgLTE5dDE5IC00NXYtMTQzcTE2MSAtMzcgMjc4LjUgLTE1NC41dDE1NC41IC0yNzguNWgxNDNxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDVjOyIgZD0iTTExMjUgNDQ4cTAgLTI3IC0xOCAtNDVsLTEwMiAtMTAycS0xOCAtMTggLTQ1IC0xOHQtNDUgMThsLTE0NyAxNDdsLTE0NyAtMTQ3cS0xOCAtMTggLTQ1IC0xOHQtNDUgMThsLTEwMiAxMDJxLTE4IDE4IC0xOCA0NXQxOCA0NWwxNDcgMTQ3bC0xNDcgMTQ3cS0xOCAxOCAtMTggNDV0MTggNDVsMTAyIDEwMnExOCAxOCA0NSAxOHQ0NSAtMThsMTQ3IC0xNDdsMTQ3IDE0N3ExOCAxOCA0NSAxOHQ0NSAtMThsMTAyIC0xMDJxMTggLTE4IDE4IC00NSB0LTE4IC00NWwtMTQ3IC0xNDdsMTQ3IC0xNDdxMTggLTE4IDE4IC00NXpNMTI4MCA2NDBxMCAxMDQgLTQwLjUgMTk4LjV0LTEwOS41IDE2My41dC0xNjMuNSAxMDkuNXQtMTk4LjUgNDAuNXQtMTk4LjUgLTQwLjV0LTE2My41IC0xMDkuNXQtMTA5LjUgLTE2My41dC00MC41IC0xOTguNXQ0MC41IC0xOTguNXQxMDkuNSAtMTYzLjV0MTYzLjUgLTEwOS41dDE5OC41IC00MC41dDE5OC41IDQwLjV0MTYzLjUgMTA5LjV0MTA5LjUgMTYzLjUgdDQwLjUgMTk4LjV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDVkOyIgZD0iTTExODkgNzY4cTAgLTI3IC0xOCAtNDVsLTMyMCAtMzIwbC0xMDIgLTEwMnEtMTggLTE4IC00NSAtMTh0LTQ1IDE4bC0xMDIgMTAybC0xOTIgMTkycS0xOCAxOCAtMTggNDV0MTggNDVsMTAyIDEwMnExOCAxOCA0NSAxOHQ0NSAtMThsMTQ3IC0xNDdsMjc1IDI3NXExOCAxOCA0NSAxOHQ0NSAtMThsMTAyIC0xMDJxMTggLTE4IDE4IC00NXpNMTI4MCA2NDBxMCAxMDQgLTQwLjUgMTk4LjV0LTEwOS41IDE2My41dC0xNjMuNSAxMDkuNSB0LTE5OC41IDQwLjV0LTE5OC41IC00MC41dC0xNjMuNSAtMTA5LjV0LTEwOS41IC0xNjMuNXQtNDAuNSAtMTk4LjV0NDAuNSAtMTk4LjV0MTA5LjUgLTE2My41dDE2My41IC0xMDkuNXQxOTguNSAtNDAuNXQxOTguNSA0MC41dDE2My41IDEwOS41dDEwOS41IDE2My41dDQwLjUgMTk4LjV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjUgdDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA1ZTsiIGQ9Ik0xMjgwIDY0MHEwIDEzOSAtNzEgMjYwbC03MDEgLTcwMXExMjEgLTcxIDI2MCAtNzFxMTA0IDAgMTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNXQ0MC41IDE5OC41ek0zMjcgMzgwbDcwMSA3MDFxLTEyMSA3MSAtMjYwIDcxcS0xMDQgMCAtMTk4LjUgLTQwLjV0LTE2My41IC0xMDkuNXQtMTA5LjUgLTE2My41dC00MC41IC0xOTguNXEwIC0xMzkgNzEgLTI2MHpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41IHQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDYwOyIgZD0iTTE1MzYgNjQwdi0xMjhxMCAtNTMgLTMyLjUgLTkwLjV0LTg0LjUgLTM3LjVoLTcwNGwyOTMgLTI5NHEzOCAtMzYgMzggLTkwdC0zOCAtOTBsLTc1IC03NnEtMzcgLTM3IC05MCAtMzdxLTUyIDAgLTkxIDM3bC02NTEgNjUycS0zNyAzNyAtMzcgOTBxMCA1MiAzNyA5MWw2NTEgNjUwcTM4IDM4IDkxIDM4cTUyIDAgOTAgLTM4bDc1IC03NHEzOCAtMzggMzggLTkxdC0zOCAtOTFsLTI5MyAtMjkzaDcwNHE1MiAwIDg0LjUgLTM3LjUgdDMyLjUgLTkwLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNjE7IiBkPSJNMTQ3MiA1NzZxMCAtNTQgLTM3IC05MWwtNjUxIC02NTFxLTM5IC0zNyAtOTEgLTM3cS01MSAwIC05MCAzN2wtNzUgNzVxLTM4IDM4IC0zOCA5MXQzOCA5MWwyOTMgMjkzaC03MDRxLTUyIDAgLTg0LjUgMzcuNXQtMzIuNSA5MC41djEyOHEwIDUzIDMyLjUgOTAuNXQ4NC41IDM3LjVoNzA0bC0yOTMgMjk0cS0zOCAzNiAtMzggOTB0MzggOTBsNzUgNzVxMzggMzggOTAgMzhxNTMgMCA5MSAtMzhsNjUxIC02NTFxMzcgLTM1IDM3IC05MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2MjsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTYxMSA1NjVxMCAtNTEgLTM3IC05MGwtNzUgLTc1cS0zOCAtMzggLTkxIC0zOHEtNTQgMCAtOTAgMzhsLTI5NCAyOTN2LTcwNHEwIC01MiAtMzcuNSAtODQuNXQtOTAuNSAtMzIuNWgtMTI4cS01MyAwIC05MC41IDMyLjV0LTM3LjUgODQuNXY3MDRsLTI5NCAtMjkzcS0zNiAtMzggLTkwIC0zOHQtOTAgMzhsLTc1IDc1cS0zOCAzOCAtMzggOTBxMCA1MyAzOCA5MWw2NTEgNjUxcTM1IDM3IDkwIDM3cTU0IDAgOTEgLTM3bDY1MSAtNjUxIHEzNyAtMzkgMzcgLTkxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDYzOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNjExIDcwNHEwIC01MyAtMzcgLTkwbC02NTEgLTY1MnEtMzkgLTM3IC05MSAtMzdxLTUzIDAgLTkwIDM3bC02NTEgNjUycS0zOCAzNiAtMzggOTBxMCA1MyAzOCA5MWw3NCA3NXEzOSAzNyA5MSAzN3E1MyAwIDkwIC0zN2wyOTQgLTI5NHY3MDRxMCA1MiAzOCA5MHQ5MCAzOGgxMjhxNTIgMCA5MCAtMzh0MzggLTkwdi03MDRsMjk0IDI5NHEzNyAzNyA5MCAzN3E1MiAwIDkxIC0zN2w3NSAtNzVxMzcgLTM5IDM3IC05MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2NDsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiA4OTZxMCAtMjYgLTE5IC00NWwtNTEyIC01MTJxLTE5IC0xOSAtNDUgLTE5dC00NSAxOXQtMTkgNDV2MjU2aC0yMjRxLTk4IDAgLTE3NS41IC02dC0xNTQgLTIxLjV0LTEzMyAtNDIuNXQtMTA1LjUgLTY5LjV0LTgwIC0xMDF0LTQ4LjUgLTEzOC41dC0xNy41IC0xODFxMCAtNTUgNSAtMTIzcTAgLTYgMi41IC0yMy41dDIuNSAtMjYuNXEwIC0xNSAtOC41IC0yNXQtMjMuNSAtMTBxLTE2IDAgLTI4IDE3cS03IDkgLTEzIDIyIHQtMTMuNSAzMHQtMTAuNSAyNHEtMTI3IDI4NSAtMTI3IDQ1MXEwIDE5OSA1MyAzMzNxMTYyIDQwMyA4NzUgNDAzaDIyNHYyNTZxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTlsNTEyIC01MTJxMTkgLTE5IDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2NTsiIGQ9Ik03NTUgNDgwcTAgLTEzIC0xMCAtMjNsLTMzMiAtMzMybDE0NCAtMTQ0cTE5IC0xOSAxOSAtNDV0LTE5IC00NXQtNDUgLTE5aC00NDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXY0NDhxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTlsMTQ0IC0xNDRsMzMyIDMzMnExMCAxMCAyMyAxMHQyMyAtMTBsMTE0IC0xMTRxMTAgLTEwIDEwIC0yM3pNMTUzNiAxMzQ0di00NDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOWwtMTQ0IDE0NGwtMzMyIC0zMzIgcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTExNCAxMTRxLTEwIDEwIC0xMCAyM3QxMCAyM2wzMzIgMzMybC0xNDQgMTQ0cS0xOSAxOSAtMTkgNDV0MTkgNDV0NDUgMTloNDQ4cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2NjsiIGQ9Ik03NjggNTc2di00NDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOWwtMTQ0IDE0NGwtMzMyIC0zMzJxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtMTE0IDExNHEtMTAgMTAgLTEwIDIzdDEwIDIzbDMzMiAzMzJsLTE0NCAxNDRxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOWg0NDhxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNTIzIDEyNDhxMCAtMTMgLTEwIC0yM2wtMzMyIC0zMzJsMTQ0IC0xNDRxMTkgLTE5IDE5IC00NXQtMTkgLTQ1IHQtNDUgLTE5aC00NDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXY0NDhxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTlsMTQ0IC0xNDRsMzMyIDMzMnExMCAxMCAyMyAxMHQyMyAtMTBsMTE0IC0xMTRxMTAgLTEwIDEwIC0yM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2NzsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMTQwOCA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTQxNnYtNDE2cTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTkycS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC00MTZxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGg0MTZ2NDE2cTAgNDAgMjggNjh0NjggMjhoMTkycTQwIDAgNjggLTI4dDI4IC02OHYtNDE2aDQxNnE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNjg7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTE0MDggODAwdi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xMjE2cS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMTIxNnE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNjk7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE0ODIgNDg2cTQ2IC0yNiA1OS41IC03Ny41dC0xMi41IC05Ny41bC02NCAtMTEwcS0yNiAtNDYgLTc3LjUgLTU5LjV0LTk3LjUgMTIuNWwtMjY2IDE1M3YtMzA3cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtMTI4cS01MiAwIC05MCAzOHQtMzggOTB2MzA3bC0yNjYgLTE1M3EtNDYgLTI2IC05Ny41IC0xMi41dC03Ny41IDU5LjVsLTY0IDExMHEtMjYgNDYgLTEyLjUgOTcuNXQ1OS41IDc3LjVsMjY2IDE1NGwtMjY2IDE1NCBxLTQ2IDI2IC01OS41IDc3LjV0MTIuNSA5Ny41bDY0IDExMHEyNiA0NiA3Ny41IDU5LjV0OTcuNSAtMTIuNWwyNjYgLTE1M3YzMDdxMCA1MiAzOCA5MHQ5MCAzOGgxMjhxNTIgMCA5MCAtMzh0MzggLTkwdi0zMDdsMjY2IDE1M3E0NiAyNiA5Ny41IDEyLjV0NzcuNSAtNTkuNWw2NCAtMTEwcTI2IC00NiAxMi41IC05Ny41dC01OS41IC03Ny41bC0yNjYgLTE1NHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2YTsiIGQ9Ik03NjggMTQwOHEyMDkgMCAzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41dC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzek04OTYgMTYxdjE5MHEwIDE0IC05IDIzLjV0LTIyIDkuNWgtMTkycS0xMyAwIC0yMyAtMTB0LTEwIC0yM3YtMTkwcTAgLTEzIDEwIC0yM3QyMyAtMTBoMTkyIHExMyAwIDIyIDkuNXQ5IDIzLjV6TTg5NCA1MDVsMTggNjIxcTAgMTIgLTEwIDE4cS0xMCA4IC0yNCA4aC0yMjBxLTE0IDAgLTI0IC04cS0xMCAtNiAtMTAgLTE4bDE3IC02MjFxMCAtMTAgMTAgLTE3LjV0MjQgLTcuNWgxODVxMTQgMCAyMy41IDcuNXQxMC41IDE3LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNmI7IiBkPSJNOTI4IDE4MHY3MTZoLTMyMHYtNzE2cTAgLTI1IDE4LjUgLTM4LjV0NDUuNSAtMTMuNWgxOTJxMjcgMCA0NS41IDEzLjV0MTguNSAzOC41ek00NzIgMTAyNGgxOTVsLTEyNiAxNjFxLTI0IDMxIC02OSAzMXEtNDAgMCAtNjggLTI4dC0yOCAtNjh0MjggLTY4dDY4IC0yOHpNMTE2MCAxMTIwcTAgNDAgLTI4IDY4dC02OCAyOHEtNDUgMCAtNjkgLTMxbC0xMjUgLTE2MWgxOTRxNDAgMCA2OCAyOHQyOCA2OHpNMTUzNiA4NjR2LTMyMCBxMCAtMTQgLTEwIC0yMnQtMjcgLTEwLjV0LTMyIC0yLjV0LTM0LjUgMS41dC0yNC41IDEuNXYtNDE2cTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTA4OHEtNDAgMCAtNjggMjh0LTI4IDY4djQxNnEtNSAwIC0yNC41IC0xLjV0LTM0LjUgLTEuNXQtMzIgMi41dC0yNyAxMC41dC0xMCAyMnYzMjBxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg0NDBxLTkzIDAgLTE1OC41IDY1LjV0LTY1LjUgMTU4LjV0NjUuNSAxNTguNXQxNTguNSA2NS41IHExMDggMCAxNjggLTc3bDEyOCAtMTY1bDEyOCAxNjVxNjAgNzcgMTY4IDc3cTkzIDAgMTU4LjUgLTY1LjV0NjUuNSAtMTU4LjV0LTY1LjUgLTE1OC41dC0xNTguNSAtNjUuNWg0NDBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDZjOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xMjgwIDgzMnEwIDI2IC0xOSA0NXQtNDUgMTlxLTE3MiAwIC0zMTggLTQ5LjV0LTI1OS41IC0xMzR0LTIzNS41IC0yMTkuNXEtMTkgLTIxIC0xOSAtNDVxMCAtMjYgMTkgLTQ1dDQ1IC0xOXEyNCAwIDQ1IDE5cTI3IDI0IDc0IDcxdDY3IDY2cTEzNyAxMjQgMjY4LjUgMTc2dDMxMy41IDUycTI2IDAgNDUgMTl0MTkgNDV6TTE3OTIgMTAzMHEwIC05NSAtMjAgLTE5M3EtNDYgLTIyNCAtMTg0LjUgLTM4M3QtMzU3LjUgLTI2OCBxLTIxNCAtMTA4IC00MzggLTEwOHEtMTQ4IDAgLTI4NiA0N3EtMTUgNSAtODggNDJ0LTk2IDM3cS0xNiAwIC0zOS41IC0zMnQtNDUgLTcwdC01Mi41IC03MHQtNjAgLTMycS0zMCAwIC01MSAxMXQtMzEgMjR0LTI3IDQycS0yIDQgLTYgMTF0LTUuNSAxMHQtMyA5LjV0LTEuNSAxMy41cTAgMzUgMzEgNzMuNXQ2OCA2NS41dDY4IDU2dDMxIDQ4cTAgNCAtMTQgMzh0LTE2IDQ0cS05IDUxIC05IDEwNHEwIDExNSA0My41IDIyMHQxMTkgMTg0LjUgdDE3MC41IDEzOXQyMDQgOTUuNXE1NSAxOCAxNDUgMjUuNXQxNzkuNSA5dDE3OC41IDZ0MTYzLjUgMjR0MTEzLjUgNTYuNWwyOS41IDI5LjV0MjkuNSAyOHQyNyAyMHQzNi41IDE2dDQzLjUgNC41cTM5IDAgNzAuNSAtNDZ0NDcuNSAtMTEydDI0IC0xMjR0OCAtOTZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNmQ7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTE0MDggLTE2MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMzQ0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMzQ0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTE1MiA4OTZxMCAtNzggLTI0LjUgLTE0NHQtNjQgLTExMi41dC04Ny41IC04OHQtOTYgLTc3LjV0LTg3LjUgLTcydC02NCAtODEuNXQtMjQuNSAtOTYuNXEwIC05NiA2NyAtMjI0bC00IDFsMSAtMSBxLTkwIDQxIC0xNjAgODN0LTEzOC41IDEwMHQtMTEzLjUgMTIyLjV0LTcyLjUgMTUwLjV0LTI3LjUgMTg0cTAgNzggMjQuNSAxNDR0NjQgMTEyLjV0ODcuNSA4OHQ5NiA3Ny41dDg3LjUgNzJ0NjQgODEuNXQyNC41IDk2LjVxMCA5NCAtNjYgMjI0bDMgLTFsLTEgMXE5MCAtNDEgMTYwIC04M3QxMzguNSAtMTAwdDExMy41IC0xMjIuNXQ3Mi41IC0xNTAuNXQyNy41IC0xODR6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNmU7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE2NjQgNTc2cS0xNTIgMjM2IC0zODEgMzUzcTYxIC0xMDQgNjEgLTIyNXEwIC0xODUgLTEzMS41IC0zMTYuNXQtMzE2LjUgLTEzMS41dC0zMTYuNSAxMzEuNXQtMTMxLjUgMzE2LjVxMCAxMjEgNjEgMjI1cS0yMjkgLTExNyAtMzgxIC0zNTNxMTMzIC0yMDUgMzMzLjUgLTMyNi41dDQzNC41IC0xMjEuNXQ0MzQuNSAxMjEuNXQzMzMuNSAzMjYuNXpNOTQ0IDk2MHEwIDIwIC0xNCAzNHQtMzQgMTRxLTEyNSAwIC0yMTQuNSAtODkuNSB0LTg5LjUgLTIxNC41cTAgLTIwIDE0IC0zNHQzNCAtMTR0MzQgMTR0MTQgMzRxMCA4NiA2MSAxNDd0MTQ3IDYxcTIwIDAgMzQgMTR0MTQgMzR6TTE3OTIgNTc2cTAgLTM0IC0yMCAtNjlxLTE0MCAtMjMwIC0zNzYuNSAtMzY4LjV0LTQ5OS41IC0xMzguNXQtNDk5LjUgMTM5dC0zNzYuNSAzNjhxLTIwIDM1IC0yMCA2OXQyMCA2OXExNDAgMjI5IDM3Ni41IDM2OHQ0OTkuNSAxMzl0NDk5LjUgLTEzOXQzNzYuNSAtMzY4cTIwIC0zNSAyMCAtNjl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNzA7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTU1NSAyMDFsNzggMTQxcS04NyA2MyAtMTM2IDE1OXQtNDkgMjAzcTAgMTIxIDYxIDIyNXEtMjI5IC0xMTcgLTM4MSAtMzUzcTE2NyAtMjU4IDQyNyAtMzc1ek05NDQgOTYwcTAgMjAgLTE0IDM0dC0zNCAxNHEtMTI1IDAgLTIxNC41IC04OS41dC04OS41IC0yMTQuNXEwIC0yMCAxNCAtMzR0MzQgLTE0dDM0IDE0dDE0IDM0cTAgODYgNjEgMTQ3dDE0NyA2MXEyMCAwIDM0IDE0dDE0IDM0ek0xMzA3IDExNTFxMCAtNyAtMSAtOSBxLTEwNSAtMTg4IC0zMTUgLTU2NnQtMzE2IC01NjdsLTQ5IC04OXEtMTAgLTE2IC0yOCAtMTZxLTEyIDAgLTEzNCA3MHEtMTYgMTAgLTE2IDI4cTAgMTIgNDQgODdxLTE0MyA2NSAtMjYzLjUgMTczdC0yMDguNSAyNDVxLTIwIDMxIC0yMCA2OXQyMCA2OXExNTMgMjM1IDM4MCAzNzF0NDk2IDEzNnE4OSAwIDE4MCAtMTdsNTQgOTdxMTAgMTYgMjggMTZxNSAwIDE4IC02dDMxIC0xNS41dDMzIC0xOC41dDMxLjUgLTE4LjV0MTkuNSAtMTEuNSBxMTYgLTEwIDE2IC0yN3pNMTM0NCA3MDRxMCAtMTM5IC03OSAtMjUzLjV0LTIwOSAtMTY0LjVsMjgwIDUwMnE4IC00NSA4IC04NHpNMTc5MiA1NzZxMCAtMzUgLTIwIC02OXEtMzkgLTY0IC0xMDkgLTE0NXEtMTUwIC0xNzIgLTM0Ny41IC0yNjd0LTQxOS41IC05NWw3NCAxMzJxMjEyIDE4IDM5Mi41IDEzN3QzMDEuNSAzMDdxLTExNSAxNzkgLTI4MiAyOTRsNjMgMTEycTk1IC02NCAxODIuNSAtMTUzdDE0NC41IC0xODRxMjAgLTM0IDIwIC02OXogIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNzE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTEwMjQgMTYxdjE5MHEwIDE0IC05LjUgMjMuNXQtMjIuNSA5LjVoLTE5MnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIzLjV2LTE5MHEwIC0xNCA5LjUgLTIzLjV0MjIuNSAtOS41aDE5MnExMyAwIDIyLjUgOS41dDkuNSAyMy41ek0xMDIyIDUzNWwxOCA0NTlxMCAxMiAtMTAgMTlxLTEzIDExIC0yNCAxMWgtMjIwcS0xMSAwIC0yNCAtMTFxLTEwIC03IC0xMCAtMjFsMTcgLTQ1N3EwIC0xMCAxMCAtMTYuNXQyNCAtNi41aDE4NSBxMTQgMCAyMy41IDYuNXQxMC41IDE2LjV6TTEwMDggMTQ2OWw3NjggLTE0MDhxMzUgLTYzIC0yIC0xMjZxLTE3IC0yOSAtNDYuNSAtNDZ0LTYzLjUgLTE3aC0xNTM2cS0zNCAwIC02My41IDE3dC00Ni41IDQ2cS0zNyA2MyAtMiAxMjZsNzY4IDE0MDhxMTcgMzEgNDcgNDl0NjUgMTh0NjUgLTE4dDQ3IC00OXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3MjsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMTM5NyAxMzI0cTAgLTg3IC0xNDkgLTIzNmwtMjQwIC0yNDBsMTQzIC03NDZsMSAtNnEwIC0xNCAtOSAtMjNsLTY0IC02NHEtOSAtOSAtMjMgLTlxLTIxIDAgLTI5IDE4bC0yNzQgNTc1bC0yNDUgLTI0NXE2OCAtMjM4IDY4IC0yNTJ0LTkgLTIzbC02NCAtNjRxLTkgLTkgLTIzIC05cS0xOCAwIC0yOCAxNmwtMTU1IDI4MGwtMjgwIDE1NXEtMTcgOSAtMTcgMjhxMCAxNCA5IDIzbDY0IDY1cTkgOSAyMyA5dDI1MiAtNjhsMjQ1IDI0NSBsLTU3NSAyNzRxLTE4IDggLTE4IDI5cTAgMTQgOSAyM2w2NCA2NHE5IDkgMjMgOXE0IDAgNiAtMWw3NDYgLTE0M2wyNDAgMjQwcTE0OSAxNDkgMjM2IDE0OXEzMiAwIDUyLjUgLTIwLjV0MjAuNSAtNTIuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3MzsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTI4IC0xMjhoMjg4djI4OGgtMjg4di0yODh6TTQ4MCAtMTI4aDMyMHYyODhoLTMyMHYtMjg4ek0xMjggMjI0aDI4OHYzMjBoLTI4OHYtMzIwek00ODAgMjI0aDMyMHYzMjBoLTMyMHYtMzIwek0xMjggNjA4aDI4OHYyODhoLTI4OHYtMjg4ek04NjQgLTEyOGgzMjB2Mjg4aC0zMjB2LTI4OHpNNDgwIDYwOGgzMjB2Mjg4aC0zMjB2LTI4OHpNMTI0OCAtMTI4aDI4OHYyODhoLTI4OHYtMjg4ek04NjQgMjI0aDMyMHYzMjBoLTMyMHYtMzIweiBNNTEyIDEwODh2Mjg4cTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtNjRxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0yODhxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWg2NHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xMjQ4IDIyNGgyODh2MzIwaC0yODh2LTMyMHpNODY0IDYwOGgzMjB2Mjg4aC0zMjB2LTI4OHpNMTI0OCA2MDhoMjg4djI4OGgtMjg4di0yODh6TTEyODAgMTA4OHYyODhxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC02NCBxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0yODhxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWg2NHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xNjY0IDExNTJ2LTEyODBxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC0xNDA4cS01MiAwIC05MCAzOHQtMzggOTB2MTI4MHEwIDUyIDM4IDkwdDkwIDM4aDEyOHY5NnEwIDY2IDQ3IDExM3QxMTMgNDdoNjRxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTk2aDM4NHY5NnEwIDY2IDQ3IDExM3QxMTMgNDcgaDY0cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi05NmgxMjhxNTIgMCA5MCAtMzh0MzggLTkweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDc0OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik02NjYgMTA1NXEtNjAgLTkyIC0xMzcgLTI3M3EtMjIgNDUgLTM3IDcyLjV0LTQwLjUgNjMuNXQtNTEgNTYuNXQtNjMgMzV0LTgxLjUgMTQuNWgtMjI0cS0xNCAwIC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWgyMjRxMjUwIDAgNDEwIC0yMjV6TTE3OTIgMjU2cTAgLTE0IC05IC0yM2wtMzIwIC0zMjBxLTkgLTkgLTIzIC05cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycS0zMiAwIC04NSAtMC41dC04MSAtMXQtNzMgMSB0LTcxIDV0LTY0IDEwLjV0LTYzIDE4LjV0LTU4IDI4LjV0LTU5IDQwdC01NSA1My41dC01NiA2OS41cTU5IDkzIDEzNiAyNzNxMjIgLTQ1IDM3IC03Mi41dDQwLjUgLTYzLjV0NTEgLTU2LjV0NjMgLTM1dDgxLjUgLTE0LjVoMjU2djE5MnEwIDE0IDkgMjN0MjMgOXExMiAwIDI0IC0xMGwzMTkgLTMxOXE5IC05IDkgLTIzek0xNzkyIDExNTJxMCAtMTQgLTkgLTIzbC0zMjAgLTMyMHEtOSAtOSAtMjMgLTlxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNSB2MTkyaC0yNTZxLTQ4IDAgLTg3IC0xNXQtNjkgLTQ1dC01MSAtNjEuNXQtNDUgLTc3LjVxLTMyIC02MiAtNzggLTE3MXEtMjkgLTY2IC00OS41IC0xMTF0LTU0IC0xMDV0LTY0IC0xMDB0LTc0IC04M3QtOTAgLTY4LjV0LTEwNi41IC00MnQtMTI4IC0xNi41aC0yMjRxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDIyNHE0OCAwIDg3IDE1dDY5IDQ1dDUxIDYxLjV0NDUgNzcuNXEzMiA2MiA3OCAxNzFxMjkgNjYgNDkuNSAxMTEgdDU0IDEwNXQ2NCAxMDB0NzQgODN0OTAgNjguNXQxMDYuNSA0MnQxMjggMTYuNWgyNTZ2MTkycTAgMTQgOSAyM3QyMyA5cTEyIDAgMjQgLTEwbDMxOSAtMzE5cTkgLTkgOSAtMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNzU7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgNjQwcTAgLTE3NCAtMTIwIC0zMjEuNXQtMzI2IC0yMzN0LTQ1MCAtODUuNXEtNzAgMCAtMTQ1IDhxLTE5OCAtMTc1IC00NjAgLTI0MnEtNDkgLTE0IC0xMTQgLTIycS0xNyAtMiAtMzAuNSA5dC0xNy41IDI5djFxLTMgNCAtMC41IDEydDIgMTB0NC41IDkuNWw2IDl0NyA4LjV0OCA5cTcgOCAzMSAzNC41dDM0LjUgMzh0MzEgMzkuNXQzMi41IDUxdDI3IDU5dDI2IDc2cS0xNTcgODkgLTI0Ny41IDIyMHQtOTAuNSAyODEgcTAgMTMwIDcxIDI0OC41dDE5MSAyMDQuNXQyODYgMTM2LjV0MzQ4IDUwLjVxMjQ0IDAgNDUwIC04NS41dDMyNiAtMjMzdDEyMCAtMzIxLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNzY7IiBkPSJNMTUzNiA3MDR2LTEyOHEwIC0yMDEgLTk4LjUgLTM2MnQtMjc0IC0yNTEuNXQtMzk1LjUgLTkwLjV0LTM5NS41IDkwLjV0LTI3NCAyNTEuNXQtOTguNSAzNjJ2MTI4cTAgMjYgMTkgNDV0NDUgMTloMzg0cTI2IDAgNDUgLTE5dDE5IC00NXYtMTI4cTAgLTUyIDIzLjUgLTkwdDUzLjUgLTU3dDcxIC0zMHQ2NCAtMTN0NDQgLTJ0NDQgMnQ2NCAxM3Q3MSAzMHQ1My41IDU3dDIzLjUgOTB2MTI4cTAgMjYgMTkgNDV0NDUgMTloMzg0IHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTUxMiAxMzQ0di0zODRxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0zODRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYzODRxMCAyNiAxOSA0NXQ0NSAxOWgzODRxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNTM2IDEzNDR2LTM4NHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTM4NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djM4NHEwIDI2IDE5IDQ1dDQ1IDE5aDM4NHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNzc7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE2MTEgMzIwcTAgLTUzIC0zNyAtOTBsLTc1IC03NXEtMzggLTM4IC05MSAtMzhxLTU0IDAgLTkwIDM4bC00ODYgNDg1bC00ODYgLTQ4NXEtMzYgLTM4IC05MCAtMzh0LTkwIDM4bC03NSA3NXEtMzggMzYgLTM4IDkwcTAgNTMgMzggOTFsNjUxIDY1MXEzNyAzNyA5MCAzN3E1MiAwIDkxIC0zN2w2NTAgLTY1MXEzOCAtMzggMzggLTkxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDc4OyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNjExIDgzMnEwIC01MyAtMzcgLTkwbC02NTEgLTY1MXEtMzggLTM4IC05MSAtMzhxLTU0IDAgLTkwIDM4bC02NTEgNjUxcS0zOCAzNiAtMzggOTBxMCA1MyAzOCA5MWw3NCA3NXEzOSAzNyA5MSAzN3E1MyAwIDkwIC0zN2w0ODYgLTQ4Nmw0ODYgNDg2cTM3IDM3IDkwIDM3cTUyIDAgOTEgLTM3bDc1IC03NXEzNyAtMzkgMzcgLTkxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDc5OyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xMjgwIDMycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtOTYwcS04IDAgLTEzLjUgMnQtOSA3dC01LjUgOHQtMyAxMS41dC0xIDExLjV2MTN2MTF2MTYwdjQxNmgtMTkycS0yNiAwIC00NSAxOXQtMTkgNDVxMCAyNCAxNSA0MWwzMjAgMzg0cTE5IDIyIDQ5IDIydDQ5IC0yMmwzMjAgLTM4NHExNSAtMTcgMTUgLTQxcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTkydi0zODRoNTc2cTE2IDAgMjUgLTExbDE2MCAtMTkycTcgLTExIDcgLTIxIHpNMTkyMCA0NDhxMCAtMjQgLTE1IC00MWwtMzIwIC0zODRxLTIwIC0yMyAtNDkgLTIzdC00OSAyM2wtMzIwIDM4NHEtMTUgMTcgLTE1IDQxcTAgMjYgMTkgNDV0NDUgMTloMTkydjM4NGgtNTc2cS0xNiAwIC0yNSAxMmwtMTYwIDE5MnEtNyA5IC03IDIwcTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoOTYwcTggMCAxMy41IC0ydDkgLTd0NS41IC04dDMgLTExLjV0MSAtMTEuNXYtMTN2LTExdi0xNjB2LTQxNmgxOTJxMjYgMCA0NSAtMTl0MTkgLTQ1eiAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3YTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNjQwIDBxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjV0LTkwLjUgMzcuNXQtMzcuNSA5MC41dDM3LjUgOTAuNXQ5MC41IDM3LjV0OTAuNSAtMzcuNXQzNy41IC05MC41ek0xNTM2IDBxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjV0LTkwLjUgMzcuNXQtMzcuNSA5MC41dDM3LjUgOTAuNXQ5MC41IDM3LjV0OTAuNSAtMzcuNXQzNy41IC05MC41ek0xNjY0IDEwODh2LTUxMnEwIC0yNCAtMTYgLTQyLjV0LTQxIC0yMS41IGwtMTA0NCAtMTIycTEgLTcgNC41IC0yMS41dDYgLTI2LjV0Mi41IC0yMnEwIC0xNiAtMjQgLTY0aDkyMHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5aC0xMDI0cS0yNiAwIC00NSAxOXQtMTkgNDVxMCAxNCAxMSAzOS41dDI5LjUgNTkuNXQyMC41IDM4bC0xNzcgODIzaC0yMDRxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOWgyNTZxMTYgMCAyOC41IC02LjV0MjAgLTE1LjV0MTMgLTI0LjV0Ny41IC0yNi41IHQ1LjUgLTI5LjV0NC41IC0yNS41aDEyMDFxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDdiOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNjY0IDkyOHYtNzA0cTAgLTkyIC02NiAtMTU4dC0xNTggLTY2aC0xMjE2cS05MiAwIC0xNTggNjZ0LTY2IDE1OHY5NjBxMCA5MiA2NiAxNTh0MTU4IDY2aDMyMHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMzJoNjcycTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDdjOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xODc5IDU4NHEwIC0zMSAtMzEgLTY2bC0zMzYgLTM5NnEtNDMgLTUxIC0xMjAuNSAtODYuNXQtMTQzLjUgLTM1LjVoLTEwODhxLTM0IDAgLTYwLjUgMTN0LTI2LjUgNDNxMCAzMSAzMSA2NmwzMzYgMzk2cTQzIDUxIDEyMC41IDg2LjV0MTQzLjUgMzUuNWgxMDg4cTM0IDAgNjAuNSAtMTN0MjYuNSAtNDN6TTE1MzYgOTI4di0xNjBoLTgzMnEtOTQgMCAtMTk3IC00Ny41dC0xNjQgLTExOS41bC0zMzcgLTM5NmwtNSAtNnEwIDQgLTAuNSAxMi41IHQtMC41IDEyLjV2OTYwcTAgOTIgNjYgMTU4dDE1OCA2NmgzMjBxOTIgMCAxNTggLTY2dDY2IC0xNTh2LTMyaDU0NHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3ZDsiIGhvcml6LWFkdi14PSI3NjgiIGQ9Ik03MDQgMTIxNnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyOHYtMTAyNGgxMjhxMjYgMCA0NSAtMTl0MTkgLTQ1dC0xOSAtNDVsLTI1NiAtMjU2cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTI1NiAyNTZxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOWgxMjh2MTAyNGgtMTI4cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDVsMjU2IDI1NnExOSAxOSA0NSAxOXQ0NSAtMTlsMjU2IC0yNTZxMTkgLTE5IDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3ZTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiA2NDBxMCAtMjYgLTE5IC00NWwtMjU2IC0yNTZxLTE5IC0xOSAtNDUgLTE5dC00NSAxOXQtMTkgNDV2MTI4aC0xMDI0di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOWwtMjU2IDI1NnEtMTkgMTkgLTE5IDQ1dDE5IDQ1bDI1NiAyNTZxMTkgMTkgNDUgMTl0NDUgLTE5dDE5IC00NXYtMTI4aDEwMjR2MTI4cTAgMjYgMTkgNDV0NDUgMTl0NDUgLTE5bDI1NiAtMjU2cTE5IC0xOSAxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwODA7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTUxMiA1MTJ2LTM4NGgtMjU2djM4NGgyNTZ6TTg5NiAxMDI0di04OTZoLTI1NnY4OTZoMjU2ek0xMjgwIDc2OHYtNjQwaC0yNTZ2NjQwaDI1NnpNMTY2NCAxMTUydi0xMDI0aC0yNTZ2MTAyNGgyNTZ6TTE3OTIgMzJ2MTIxNnEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTE2MDBxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0xMjE2cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTYwMHExMyAwIDIyLjUgOS41dDkuNSAyMi41eiBNMTkyMCAxMjQ4di0xMjE2cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNjAwcS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMjE2cTAgNjYgNDcgMTEzdDExMyA0N2gxNjAwcTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDgxOyIgZD0iTTEyODAgOTU4cTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNXEtNSAwIC0xNSAtNHEyMCAzNCAyMCA1NXEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVxLTcgMCAtMTcgLTVxLTYwIC0zNCAtOTcgLTQzcS02NSA2MyAtMTU0IDYzcS05OCAwIC0xNjQuNSAtNzIuNXQtNjQuNSAtMTY5LjV2LTEycS0xMDcgMTQgLTE4Ny41IDY0dC0xNTYuNSAxMzlxLTEwIDEyIC0yOCAxMnEtMjYgMCAtNDEgLTUwLjV0LTE1IC04Ni41cTAgLTYyIDI5IC0xMTcgcS0xMyAtMiAtMjEuNSAtMTEuNXQtOC41IC0yMi41cTAgLTExMiA4MSAtMTg1cS0xMiAtOCAtMTIgLTI1cTAgLTYgMSAtOXExNSAtNTEgNTAuNSAtOTEuNXQ4NC41IC02MC41cS03NyAtNDMgLTE2NSAtNDNxLTggMCAtMjQgMS41dC0yMyAxLjVxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41cTAgLTE3IDE0IC0yNnE2MyAtNDcgMTUwIC03My41dDE3MCAtMjYuNXExMzAgMCAyNDggNThxMTY2IDc5IDI1NiAyMzIuNXQ4OCAzMzkuNXYxMiBxMjcgMjIgNjIuNSA2M3QzNS41IDYxek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4MjsiIGQ9Ik0xMjQ4IDE0MDhxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtMzUwcS0yIDAgLTIgMXY2NzFoMTc3cTMxIDAgMzIgMjNsMTIgMTY0cTIgMTUgLTggMjVxLTEwIDEyIC0yNCAxMmgtMTg5djcycTAgNDQgMTEuNSA1N3Q1NC41IDEzcTU3IDAgMTE3IC0xM3ExMyAtMyAyNiA1cTExIDggMTMgMjJsMjMgMTY2cTIgMTIgLTUuNSAyMi41dC0xOS41IDEzLjUgcS05MyAyNiAtMTk3IDI2cS0zMTEgMCAtMzExIC0yOTl2LTg1aC05NXEtMTMgMCAtMjMgLTEwLjV0LTEwIC0yNC41di0xNzJxMCAtOCA1LjUgLTEydDEwIC00LjV0MTcuNSAtMC41aDk1di02NzFsMTAgLTFoLTMzMHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwODM7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTkyOCA3MDRxMCAxNCAtOSAyM3QtMjMgOXEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3EwIC0xNCA5IC0yM3QyMyAtOXQyMyA5dDkgMjNxMCA0MCAyOCA2OHQ2OCAyOHExNCAwIDIzIDl0OSAyM3pNMTE1MiA1NzRxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1dC0xODEgNzV0LTc1IDE4MXQ3NSAxODF0MTgxIDc1dDE4MSAtNzV0NzUgLTE4MXpNMTI4IDBoMTUzNnYxMjhoLTE1MzZ2LTEyOHpNMTI4MCA1NzRxMCAxNTkgLTExMi41IDI3MS41IHQtMjcxLjUgMTEyLjV0LTI3MS41IC0xMTIuNXQtMTEyLjUgLTI3MS41dDExMi41IC0yNzEuNXQyNzEuNSAtMTEyLjV0MjcxLjUgMTEyLjV0MTEyLjUgMjcxLjV6TTI1NiAxMjE2aDM4NHYxMjhoLTM4NHYtMTI4ek0xMjggMTAyNGgxNTM2djExOHYxMzhoLTgyOGwtNjQgLTEyOGgtNjQ0di0xMjh6TTE3OTIgMTI4MHYtMTI4MHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNWgtMTUzNnEtNTMgMCAtOTAuNSAzNy41dC0zNy41IDkwLjV2MTI4MCBxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41aDE1MzZxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwODQ7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTgzMiAxMDI0cTAgODAgLTU2IDEzNnQtMTM2IDU2dC0xMzYgLTU2dC01NiAtMTM2cTAgLTQyIDE5IC04M3EtNDEgMTkgLTgzIDE5cS04MCAwIC0xMzYgLTU2dC01NiAtMTM2dDU2IC0xMzZ0MTM2IC01NnQxMzYgNTZ0NTYgMTM2cTAgNDIgLTE5IDgzcTQxIC0xOSA4MyAtMTlxODAgMCAxMzYgNTZ0NTYgMTM2ek0xNjgzIDMyMHEwIC0xNyAtNDkgLTY2dC02NiAtNDlxLTkgMCAtMjguNSAxNnQtMzYuNSAzM3QtMzguNSA0MHQtMjQuNSAyNiBsLTk2IC05NmwyMjAgLTIyMHEyOCAtMjggMjggLTY4cTAgLTQyIC0zOSAtODF0LTgxIC0zOXEtNDAgMCAtNjggMjhsLTY3MSA2NzFxLTE3NiAtMTMxIC0zNjUgLTEzMXEtMTYzIDAgLTI2NS41IDEwMi41dC0xMDIuNSAyNjUuNXEwIDE2MCA5NSAzMTN0MjQ4IDI0OHQzMTMgOTVxMTYzIDAgMjY1LjUgLTEwMi41dDEwMi41IC0yNjUuNXEwIC0xODkgLTEzMSAtMzY1bDM1NSAtMzU1bDk2IDk2cS0zIDMgLTI2IDI0LjV0LTQwIDM4LjV0LTMzIDM2LjUgdC0xNiAyOC41cTAgMTcgNDkgNjZ0NjYgNDlxMTMgMCAyMyAtMTBxNiAtNiA0NiAtNDQuNXQ4MiAtNzkuNXQ4Ni41IC04NnQ3MyAtNzh0MjguNSAtNDF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwODU7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTg5NiA2NDBxMCAxMDYgLTc1IDE4MXQtMTgxIDc1dC0xODEgLTc1dC03NSAtMTgxdDc1IC0xODF0MTgxIC03NXQxODEgNzV0NzUgMTgxek0xNjY0IDEyOHEwIDUyIC0zOCA5MHQtOTAgMzh0LTkwIC0zOHQtMzggLTkwcTAgLTUzIDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNjY0IDExNTJxMCA1MiAtMzggOTB0LTkwIDM4dC05MCAtMzh0LTM4IC05MHEwIC01MyAzNy41IC05MC41dDkwLjUgLTM3LjUgdDkwLjUgMzcuNXQzNy41IDkwLjV6TTEyODAgNzMxdi0xODVxMCAtMTAgLTcgLTE5LjV0LTE2IC0xMC41bC0xNTUgLTI0cS0xMSAtMzUgLTMyIC03NnEzNCAtNDggOTAgLTExNXE3IC0xMCA3IC0yMHEwIC0xMiAtNyAtMTlxLTIzIC0zMCAtODIuNSAtODkuNXQtNzguNSAtNTkuNXEtMTEgMCAtMjEgN2wtMTE1IDkwcS0zNyAtMTkgLTc3IC0zMXEtMTEgLTEwOCAtMjMgLTE1NXEtNyAtMjQgLTMwIC0yNGgtMTg2cS0xMSAwIC0yMCA3LjV0LTEwIDE3LjUgbC0yMyAxNTNxLTM0IDEwIC03NSAzMWwtMTE4IC04OXEtNyAtNyAtMjAgLTdxLTExIDAgLTIxIDhxLTE0NCAxMzMgLTE0NCAxNjBxMCA5IDcgMTlxMTAgMTQgNDEgNTN0NDcgNjFxLTIzIDQ0IC0zNSA4MmwtMTUyIDI0cS0xMCAxIC0xNyA5LjV0LTcgMTkuNXYxODVxMCAxMCA3IDE5LjV0MTYgMTAuNWwxNTUgMjRxMTEgMzUgMzIgNzZxLTM0IDQ4IC05MCAxMTVxLTcgMTEgLTcgMjBxMCAxMiA3IDIwcTIyIDMwIDgyIDg5dDc5IDU5cTExIDAgMjEgLTcgbDExNSAtOTBxMzQgMTggNzcgMzJxMTEgMTA4IDIzIDE1NHE3IDI0IDMwIDI0aDE4NnExMSAwIDIwIC03LjV0MTAgLTE3LjVsMjMgLTE1M3EzNCAtMTAgNzUgLTMxbDExOCA4OXE4IDcgMjAgN3ExMSAwIDIxIC04cTE0NCAtMTMzIDE0NCAtMTYwcTAgLTkgLTcgLTE5cS0xMiAtMTYgLTQyIC01NHQtNDUgLTYwcTIzIC00OCAzNCAtODJsMTUyIC0yM3ExMCAtMiAxNyAtMTAuNXQ3IC0xOS41ek0xOTIwIDE5OHYtMTQwcTAgLTE2IC0xNDkgLTMxIHEtMTIgLTI3IC0zMCAtNTJxNTEgLTExMyA1MSAtMTM4cTAgLTQgLTQgLTdxLTEyMiAtNzEgLTEyNCAtNzFxLTggMCAtNDYgNDd0LTUyIDY4cS0yMCAtMiAtMzAgLTJ0LTMwIDJxLTE0IC0yMSAtNTIgLTY4dC00NiAtNDdxLTIgMCAtMTI0IDcxcS00IDMgLTQgN3EwIDI1IDUxIDEzOHEtMTggMjUgLTMwIDUycS0xNDkgMTUgLTE0OSAzMXYxNDBxMCAxNiAxNDkgMzFxMTMgMjkgMzAgNTJxLTUxIDExMyAtNTEgMTM4cTAgNCA0IDdxNCAyIDM1IDIwIHQ1OSAzNHQzMCAxNnE4IDAgNDYgLTQ2LjV0NTIgLTY3LjVxMjAgMiAzMCAydDMwIC0ycTUxIDcxIDkyIDExMmw2IDJxNCAwIDEyNCAtNzBxNCAtMyA0IC03cTAgLTI1IC01MSAtMTM4cTE3IC0yMyAzMCAtNTJxMTQ5IC0xNSAxNDkgLTMxek0xOTIwIDEyMjJ2LTE0MHEwIC0xNiAtMTQ5IC0zMXEtMTIgLTI3IC0zMCAtNTJxNTEgLTExMyA1MSAtMTM4cTAgLTQgLTQgLTdxLTEyMiAtNzEgLTEyNCAtNzFxLTggMCAtNDYgNDd0LTUyIDY4IHEtMjAgLTIgLTMwIC0ydC0zMCAycS0xNCAtMjEgLTUyIC02OHQtNDYgLTQ3cS0yIDAgLTEyNCA3MXEtNCAzIC00IDdxMCAyNSA1MSAxMzhxLTE4IDI1IC0zMCA1MnEtMTQ5IDE1IC0xNDkgMzF2MTQwcTAgMTYgMTQ5IDMxcTEzIDI5IDMwIDUycS01MSAxMTMgLTUxIDEzOHEwIDQgNCA3cTQgMiAzNSAyMHQ1OSAzNHQzMCAxNnE4IDAgNDYgLTQ2LjV0NTIgLTY3LjVxMjAgMiAzMCAydDMwIC0ycTUxIDcxIDkyIDExMmw2IDJxNCAwIDEyNCAtNzAgcTQgLTMgNCAtN3EwIC0yNSAtNTEgLTEzOHExNyAtMjMgMzAgLTUycTE0OSAtMTUgMTQ5IC0zMXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4NjsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTQwOCA3NjhxMCAtMTM5IC05NCAtMjU3dC0yNTYuNSAtMTg2LjV0LTM1My41IC02OC41cS04NiAwIC0xNzYgMTZxLTEyNCAtODggLTI3OCAtMTI4cS0zNiAtOSAtODYgLTE2aC0zcS0xMSAwIC0yMC41IDh0LTExLjUgMjFxLTEgMyAtMSA2LjV0MC41IDYuNXQyIDZsMi41IDV0My41IDUuNXQ0IDV0NC41IDV0NCA0LjVxNSA2IDIzIDI1dDI2IDI5LjV0MjIuNSAyOXQyNSAzOC41dDIwLjUgNDRxLTEyNCA3MiAtMTk1IDE3N3QtNzEgMjI0IHEwIDEzOSA5NCAyNTd0MjU2LjUgMTg2LjV0MzUzLjUgNjguNXQzNTMuNSAtNjguNXQyNTYuNSAtMTg2LjV0OTQgLTI1N3pNMTc5MiA1MTJxMCAtMTIwIC03MSAtMjI0LjV0LTE5NSAtMTc2LjVxMTAgLTI0IDIwLjUgLTQ0dDI1IC0zOC41dDIyLjUgLTI5dDI2IC0yOS41dDIzIC0yNXExIC0xIDQgLTQuNXQ0LjUgLTV0NCAtNXQzLjUgLTUuNWwyLjUgLTV0MiAtNnQwLjUgLTYuNXQtMSAtNi41cS0zIC0xNCAtMTMgLTIydC0yMiAtNyBxLTUwIDcgLTg2IDE2cS0xNTQgNDAgLTI3OCAxMjhxLTkwIC0xNiAtMTc2IC0xNnEtMjcxIDAgLTQ3MiAxMzJxNTggLTQgODggLTRxMTYxIDAgMzA5IDQ1dDI2NCAxMjlxMTI1IDkyIDE5MiAyMTJ0NjcgMjU0cTAgNzcgLTIzIDE1MnExMjkgLTcxIDIwNCAtMTc4dDc1IC0yMzB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwODc7IiBkPSJNMjU2IDE5MnEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTE0MDggNzY4cTAgNTEgLTM5IDg5LjV0LTg5IDM4LjVoLTM1MnEwIDU4IDQ4IDE1OS41dDQ4IDE2MC41cTAgOTggLTMyIDE0NXQtMTI4IDQ3cS0yNiAtMjYgLTM4IC04NXQtMzAuNSAtMTI1LjV0LTU5LjUgLTEwOS41cS0yMiAtMjMgLTc3IC05MXEtNCAtNSAtMjMgLTMwdC0zMS41IC00MXQtMzQuNSAtNDIuNSB0LTQwIC00NHQtMzguNSAtMzUuNXQtNDAgLTI3dC0zNS41IC05aC0zMnYtNjQwaDMycTEzIDAgMzEuNSAtM3QzMyAtNi41dDM4IC0xMXQzNSAtMTEuNXQzNS41IC0xMi41dDI5IC0xMC41cTIxMSAtNzMgMzQyIC03M2gxMjFxMTkyIDAgMTkyIDE2N3EwIDI2IC01IDU2cTMwIDE2IDQ3LjUgNTIuNXQxNy41IDczLjV0LTE4IDY5cTUzIDUwIDUzIDExOXEwIDI1IC0xMCA1NS41dC0yNSA0Ny41cTMyIDEgNTMuNSA0N3QyMS41IDgxek0xNTM2IDc2OSBxMCAtODkgLTQ5IC0xNjNxOSAtMzMgOSAtNjlxMCAtNzcgLTM4IC0xNDRxMyAtMjEgMyAtNDNxMCAtMTAxIC02MCAtMTc4cTEgLTEzOSAtODUgLTIxOS41dC0yMjcgLTgwLjVoLTM2aC05M3EtOTYgMCAtMTg5LjUgMjIuNXQtMjE2LjUgNjUuNXEtMTE2IDQwIC0xMzggNDBoLTI4OHEtNTMgMCAtOTAuNSAzNy41dC0zNy41IDkwLjV2NjQwcTAgNTMgMzcuNSA5MC41dDkwLjUgMzcuNWgyNzRxMzYgMjQgMTM3IDE1NXE1OCA3NSAxMDcgMTI4IHEyNCAyNSAzNS41IDg1LjV0MzAuNSAxMjYuNXQ2MiAxMDhxMzkgMzcgOTAgMzdxODQgMCAxNTEgLTMyLjV0MTAyIC0xMDEuNXQzNSAtMTg2cTAgLTkzIC00OCAtMTkyaDE3NnExMDQgMCAxODAgLTc2dDc2IC0xNzl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwODg7IiBkPSJNMjU2IDEwODhxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xNDA4IDUxMnEwIDM1IC0yMS41IDgxdC01My41IDQ3cTE1IDE3IDI1IDQ3LjV0MTAgNTUuNXEwIDY5IC01MyAxMTlxMTggMzIgMTggNjl0LTE3LjUgNzMuNXQtNDcuNSA1Mi41cTUgMzAgNSA1NnEwIDg1IC00OSAxMjZ0LTEzNiA0MWgtMTI4cS0xMzEgMCAtMzQyIC03M3EtNSAtMiAtMjkgLTEwLjUgdC0zNS41IC0xMi41dC0zNSAtMTEuNXQtMzggLTExdC0zMyAtNi41dC0zMS41IC0zaC0zMnYtNjQwaDMycTE2IDAgMzUuNSAtOXQ0MCAtMjd0MzguNSAtMzUuNXQ0MCAtNDR0MzQuNSAtNDIuNXQzMS41IC00MXQyMyAtMzBxNTUgLTY4IDc3IC05MXE0MSAtNDMgNTkuNSAtMTA5LjV0MzAuNSAtMTI1LjV0MzggLTg1cTk2IDAgMTI4IDQ3dDMyIDE0NXEwIDU5IC00OCAxNjAuNXQtNDggMTU5LjVoMzUycTUwIDAgODkgMzguNXQzOSA4OS41eiBNMTUzNiA1MTFxMCAtMTAzIC03NiAtMTc5dC0xODAgLTc2aC0xNzZxNDggLTk5IDQ4IC0xOTJxMCAtMTE4IC0zNSAtMTg2cS0zNSAtNjkgLTEwMiAtMTAxLjV0LTE1MSAtMzIuNXEtNTEgMCAtOTAgMzdxLTM0IDMzIC01NCA4MnQtMjUuNSA5MC41dC0xNy41IDg0LjV0LTMxIDY0cS00OCA1MCAtMTA3IDEyN3EtMTAxIDEzMSAtMTM3IDE1NWgtMjc0cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXY2NDBxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41IGgyODhxMjIgMCAxMzggNDBxMTI4IDQ0IDIyMyA2NnQyMDAgMjJoMTEycTE0MCAwIDIyNi41IC03OXQ4NS41IC0yMTZ2LTVxNjAgLTc3IDYwIC0xNzhxMCAtMjIgLTMgLTQzcTM4IC02NyAzOCAtMTQ0cTAgLTM2IC05IC02OXE0OSAtNzQgNDkgLTE2M3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4OTsiIGhvcml6LWFkdi14PSI4OTYiIGQ9Ik04MzIgMTUwNHYtMTMzOWwtNDQ5IC0yMzZxLTIyIC0xMiAtNDAgLTEycS0yMSAwIC0zMS41IDE0LjV0LTEwLjUgMzUuNXEwIDYgMiAyMGw4NiA1MDBsLTM2NCAzNTRxLTI1IDI3IC0yNSA0OHEwIDM3IDU2IDQ2bDUwMiA3M2wyMjUgNDU1cTE5IDQxIDQ5IDQxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDhhOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNjY0IDk0MHEwIDgxIC0yMS41IDE0M3QtNTUgOTguNXQtODEuNSA1OS41dC05NCAzMXQtOTggOHQtMTEyIC0yNS41dC0xMTAuNSAtNjR0LTg2LjUgLTcydC02MCAtNjEuNXEtMTggLTIyIC00OSAtMjJ0LTQ5IDIycS0yNCAyOCAtNjAgNjEuNXQtODYuNSA3MnQtMTEwLjUgNjR0LTExMiAyNS41dC05OCAtOHQtOTQgLTMxdC04MS41IC01OS41dC01NSAtOTguNXQtMjEuNSAtMTQzcTAgLTE2OCAxODcgLTM1NWw1ODEgLTU2MGw1ODAgNTU5IHExODggMTg4IDE4OCAzNTZ6TTE3OTIgOTQwcTAgLTIyMSAtMjI5IC00NTBsLTYyMyAtNjAwcS0xOCAtMTggLTQ0IC0xOHQtNDQgMThsLTYyNCA2MDJxLTEwIDggLTI3LjUgMjZ0LTU1LjUgNjUuNXQtNjggOTcuNXQtNTMuNSAxMjF0LTIzLjUgMTM4cTAgMjIwIDEyNyAzNDR0MzUxIDEyNHE2MiAwIDEyNi41IC0yMS41dDEyMCAtNTh0OTUuNSAtNjguNXQ3NiAtNjhxMzYgMzYgNzYgNjh0OTUuNSA2OC41dDEyMCA1OHQxMjYuNSAyMS41IHEyMjQgMCAzNTEgLTEyNHQxMjcgLTM0NHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4YjsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNjQwIDk2cTAgLTQgMSAtMjB0MC41IC0yNi41dC0zIC0yMy41dC0xMCAtMTkuNXQtMjAuNSAtNi41aC0zMjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djcwNHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoMzIwcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXEwIC00IDEgLTIwdDAuNSAtMjYuNXQtMyAtMjMuNXQtMTAgLTE5LjV0LTIwLjUgLTYuNWgtMzIwcS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzdi03MDQgcTAgLTY2IDQ3IC0xMTN0MTEzIC00N2gyODhoMTFoMTN0MTEuNSAtMXQxMS41IC0zdDggLTUuNXQ3IC05dDIgLTEzLjV6TTE1NjggNjQwcTAgLTI2IC0xOSAtNDVsLTU0NCAtNTQ0cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djI4OGgtNDQ4cS0yNiAwIC00NSAxOXQtMTkgNDV2Mzg0cTAgMjYgMTkgNDV0NDUgMTloNDQ4djI4OHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWw1NDQgLTU0NHExOSAtMTkgMTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDhjOyIgZD0iTTUxMiAxNjB2NjQwcTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTkycS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtNjQwcTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTkycTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTUwMyAxMDI4cTAgNTEgLTM2IDg3LjV0LTg4IDM2LjVxLTUxIDAgLTg3IC0zNi41dC0zNiAtODcuNXQzNiAtODcuNXQ4NyAtMzYuNXE1MiAwIDg4IDM2LjV0MzYgODcuNXpNMTI4MCAxNjB2NDM1IHEwIDEyNyAtNzMuNSAxOTIuNXQtMjAyLjUgNjUuNXEtOTAgMCAtMTU4IC00NXEtMTIgLTggLTE0IC0xMnEwIDM2IC0zNSAzNmgtMTc2cS0xNCAwIC0yOS41IC03LjV0LTE1LjUgLTIwLjV2LTY0NHEwIC0xMyAxNS41IC0yMi41dDI5LjUgLTkuNWgxODJxMTIgMCAyMC41IDkuNXQ4LjUgMjIuNXYzNDlxMCAxNDAgMTE0IDE0MHE0OSAwIDYzLjUgLTIyLjV0MTQuNSAtNzMuNXYtMzkzcTAgLTEzIDEyIC0yMi41dDI2IC05LjVoMTg2IHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4ZDsiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNNDgwIDY3MnY0NDhxMCAxNCAtOSAyM3QtMjMgOXQtMjMgLTl0LTkgLTIzdi00NDhxMCAtMTQgOSAtMjN0MjMgLTl0MjMgOXQ5IDIzek0xMTUyIDMyMHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTQyOWwtNTEgLTQ4M3EtMiAtMTIgLTEwLjUgLTIwLjV0LTIwLjUgLTguNWgtMXEtMjcgMCAtMzIgMjdsLTc2IDQ4NWgtNDA0cS0yNiAwIC00NSAxOXQtMTkgNDVxMCAxMjMgNzguNSAyMjEuNXQxNzcuNSA5OC41djUxMnEtNTIgMCAtOTAgMzggdC0zOCA5MHQzOCA5MHQ5MCAzOGg2NDBxNTIgMCA5MCAtMzh0MzggLTkwdC0zOCAtOTB0LTkwIC0zOHYtNTEycTk5IDAgMTc3LjUgLTk4LjV0NzguNSAtMjIxLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOGU7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE0MDggNjA4di0zMjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTgzMnEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2ODMycTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg3MDRxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNzA0cS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzdi04MzJxMCAtNjYgNDcgLTExM3QxMTMgLTQ3aDgzMnE2NiAwIDExMyA0N3Q0NyAxMTN2MzIwIHEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzek0xNzkyIDE0NzJ2LTUxMnEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0xNzYgMTc2bC02NTIgLTY1MnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0xMTQgMTE0cS0xMCAxMCAtMTAgMjN0MTAgMjNsNjUyIDY1MmwtMTc2IDE3NnEtMTkgMTkgLTE5IDQ1dDE5IDQ1dDQ1IDE5aDUxMnEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOTA7IiBkPSJNMTE4NCA2NDBxMCAtMjYgLTE5IC00NWwtNTQ0IC01NDRxLTE5IC0xOSAtNDUgLTE5dC00NSAxOXQtMTkgNDV2Mjg4aC00NDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYzODRxMCAyNiAxOSA0NXQ0NSAxOWg0NDh2Mjg4cTAgMjYgMTkgNDV0NDUgMTl0NDUgLTE5bDU0NCAtNTQ0cTE5IC0xOSAxOSAtNDV6TTE1MzYgOTkydi03MDRxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTMyMHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41IHEwIDQgLTEgMjB0LTAuNSAyNi41dDMgMjMuNXQxMCAxOS41dDIwLjUgNi41aDMyMHE2NiAwIDExMyA0N3Q0NyAxMTN2NzA0cTAgNjYgLTQ3IDExM3QtMTEzIDQ3aC0yODhoLTExaC0xM3QtMTEuNSAxdC0xMS41IDN0LTggNS41dC03IDl0LTIgMTMuNXEwIDQgLTEgMjB0LTAuNSAyNi41dDMgMjMuNXQxMCAxOS41dDIwLjUgNi41aDMyMHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5MTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNDU4IDY1M3EtNzQgMTYyIC03NCAzNzFoLTI1NnYtOTZxMCAtNzggOTQuNSAtMTYydDIzNS41IC0xMTN6TTE1MzYgOTI4djk2aC0yNTZxMCAtMjA5IC03NCAtMzcxcTE0MSAyOSAyMzUuNSAxMTN0OTQuNSAxNjJ6TTE2NjQgMTA1NnYtMTI4cTAgLTcxIC00MS41IC0xNDN0LTExMiAtMTMwdC0xNzMgLTk3LjV0LTIxNS41IC00NC41cS00MiAtNTQgLTk1IC05NXEtMzggLTM0IC01Mi41IC03Mi41dC0xNC41IC04OS41cTAgLTU0IDMwLjUgLTkxIHQ5Ny41IC0zN3E3NSAwIDEzMy41IC00NS41dDU4LjUgLTExNC41di02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC04MzJxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCA2OSA1OC41IDExNC41dDEzMy41IDQ1LjVxNjcgMCA5Ny41IDM3dDMwLjUgOTFxMCA1MSAtMTQuNSA4OS41dC01Mi41IDcyLjVxLTUzIDQxIC05NSA5NXEtMTEzIDUgLTIxNS41IDQ0LjV0LTE3MyA5Ny41dC0xMTIgMTMwdC00MS41IDE0M3YxMjhxMCA0MCAyOCA2OHQ2OCAyOGgyODh2OTYgcTAgNjYgNDcgMTEzdDExMyA0N2g1NzZxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTk2aDI4OHE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOTI7IiBkPSJNNTgyIDIyOHEwIC02NiAtOTMgLTY2cS0xMDcgMCAtMTA3IDYzcTAgNjQgOTggNjRxMTAyIDAgMTAyIC02MXpNNTQ2IDY5NHEwIC04NSAtNzQgLTg1cS03NyAwIC03NyA4NHEwIDkwIDc3IDkwcTM2IDAgNTUgLTI2dDE5IC02M3pNNzEyIDc2OXYxMjVxLTc4IC0yOSAtMTM1IC0yOXEtNTAgMjkgLTExMCAyOXEtODYgMCAtMTQ1IC01N3QtNTkgLTE0M3EwIC01MCAyOS41IC0xMDJ0NzMuNSAtNjd2LTNxLTM4IC0xNyAtMzggLTg1IHEwIC01MiA0MSAtNzd2LTNxLTExMyAtMzcgLTExMyAtMTM5cTAgLTYwIDM2IC05OHQ4NCAtNTF0MTA3IC0xM3EyMjQgMCAyMjQgMTg3cTAgNDggLTI1LjUgNzh0LTYyLjUgNDIuNXQtNzQgMjEuNXQtNjIuNSAyMy41dC0yNS41IDM5LjVxMCA0NCA0OSA1MnE3NyAxNSAxMjIgNzB0NDUgMTM0cTAgMjQgLTEwIDUycTMwIDcgNDkgMTN6TTc3MSAzNTBoMTM3cS0yIDIwIC0yIDkwdjM3MnEwIDU5IDIgNzZoLTEzN3EzIC0yNiAzIC03OXYtMzc3IHEwIC01NSAtMyAtODJ6TTEyODAgMzY2djEyMXEtMzAgLTIxIC02OCAtMjFxLTUzIDAgLTUzIDgydjIyNWg1MnE5IDAgMjYuNSAtMXQyNi41IC0xdjExN2gtMTA1cTAgODIgMyAxMDJoLTE0MHE0IC0yNCA0IC01NXYtNDdoLTYwdi0xMTdxMzYgMyAzNyAzcTQgMCAxMS41IC0wLjV0MTEuNSAtMC41di0yaC0ydi0yMTdxMCAtMzcgMi41IC02NHQxMS41IC01Ni41dDI0LjUgLTQ4LjV0NDMuNSAtMzF0NjYgLTEycTY0IDAgMTA4IDI0ek05MjQgMTA3MiBxMCAzNiAtMjQgNjMuNXQtNjAgMjcuNXQtNjAuNSAtMjd0LTI0LjUgLTY0cTAgLTM2IDI1IC02Mi41dDYwIC0yNi41dDU5LjUgMjd0MjQuNSA2MnpNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOTM7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE2NjQgNDgwdi01NzZxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xNjAwcS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NTc2cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTkycTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXYtMzUyaDExNTJ2MzUycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTkycTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTM0NCA4MzJxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0yNTZ2LTQ0OCBxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0yNTZxLTI2IDAgLTQ1IDE5dC0xOSA0NXY0NDhoLTI1NnEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1bDQ0OCA0NDhxMTkgMTkgNDUgMTl0NDUgLTE5bDQ0OCAtNDQ4cTE5IC0xOSAxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOTQ7IiBkPSJNMTQwNyA3MTBxMCA0NCAtNyAxMTMuNXQtMTggOTYuNXEtMTIgMzAgLTE3IDQ0dC05IDM2LjV0LTQgNDguNXEwIDIzIDUgNjguNXQ1IDY3LjVxMCAzNyAtMTAgNTVxLTQgMSAtMTMgMXEtMTkgMCAtNTggLTQuNXQtNTkgLTQuNXEtNjAgMCAtMTc2IDI0dC0xNzUgMjRxLTQzIDAgLTk0LjUgLTExLjV0LTg1IC0yMy41dC04OS41IC0zNHEtMTM3IC01NCAtMjAyIC0xMDNxLTk2IC03MyAtMTU5LjUgLTE4OS41dC04OCAtMjM2dC0yNC41IC0yNDguNSBxMCAtNDAgMTIuNSAtMTIwdDEyLjUgLTEyMXEwIC0yMyAtMTEgLTY2LjV0LTExIC02NS41dDEyIC0zNi41dDM0IC0xNC41cTI0IDAgNzIuNSAxMXQ3My41IDExcTU3IDAgMTY5LjUgLTE1LjV0MTY5LjUgLTE1LjVxMTgxIDAgMjg0IDM2cTEyOSA0NSAyMzUuNSAxNTIuNXQxNjYgMjQ1LjV0NTkuNSAyNzV6TTE1MzUgNzEycTAgLTE2NSAtNzAgLTMyNy41dC0xOTYgLTI4OHQtMjgxIC0xODAuNXEtMTI0IC00NCAtMzI2IC00NCBxLTU3IDAgLTE3MCAxNC41dC0xNjkgMTQuNXEtMjQgMCAtNzIuNSAtMTQuNXQtNzMuNSAtMTQuNXEtNzMgMCAtMTIzLjUgNTUuNXQtNTAuNSAxMjguNXEwIDI0IDExIDY4dDExIDY3cTAgNDAgLTEyLjUgMTIwLjV0LTEyLjUgMTIxLjVxMCAxMTEgMTggMjE3LjV0NTQuNSAyMDkuNXQxMDAuNSAxOTR0MTUwIDE1NnE3OCA1OSAyMzIgMTIwcTE5NCA3OCAzMTYgNzhxNjAgMCAxNzUuNSAtMjR0MTczLjUgLTI0cTE5IDAgNTcgNXQ1OCA1IHE4MSAwIDExOCAtNTAuNXQzNyAtMTM0LjVxMCAtMjMgLTUgLTY4dC01IC02OHEwIC0xMCAxIC0xOC41dDMgLTE3dDQgLTEzLjV0Ni41IC0xNnQ2LjUgLTE3cTE2IC00MCAyNSAtMTE4LjV0OSAtMTM2LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOTU7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTE0MDggMjk2cTAgLTI3IC0xMCAtNzAuNXQtMjEgLTY4LjVxLTIxIC01MCAtMTIyIC0xMDZxLTk0IC01MSAtMTg2IC01MXEtMjcgMCAtNTIuNSAzLjV0LTU3LjUgMTIuNXQtNDcuNSAxNC41dC01NS41IDIwLjV0LTQ5IDE4cS05OCAzNSAtMTc1IDgzcS0xMjggNzkgLTI2NC41IDIxNS41dC0yMTUuNSAyNjQuNXEtNDggNzcgLTgzIDE3NXEtMyA5IC0xOCA0OXQtMjAuNSA1NS41dC0xNC41IDQ3LjV0LTEyLjUgNTcuNXQtMy41IDUyLjUgcTAgOTIgNTEgMTg2cTU2IDEwMSAxMDYgMTIycTI1IDExIDY4LjUgMjF0NzAuNSAxMHExNCAwIDIxIC0zcTE4IC02IDUzIC03NnExMSAtMTkgMzAgLTU0dDM1IC02My41dDMxIC01My41cTMgLTQgMTcuNSAtMjV0MjEuNSAtMzUuNXQ3IC0yOC41cTAgLTIwIC0yOC41IC01MHQtNjIgLTU1dC02MiAtNTN0LTI4LjUgLTQ2cTAgLTkgNSAtMjIuNXQ4LjUgLTIwLjV0MTQgLTI0dDExLjUgLTE5cTc2IC0xMzcgMTc0IC0yMzV0MjM1IC0xNzQgcTIgLTEgMTkgLTExLjV0MjQgLTE0dDIwLjUgLTguNXQyMi41IC01cTE4IDAgNDYgMjguNXQ1MyA2MnQ1NSA2MnQ1MCAyOC41cTE0IDAgMjguNSAtN3QzNS41IC0yMS41dDI1IC0xNy41cTI1IC0xNSA1My41IC0zMXQ2My41IC0zNXQ1NCAtMzBxNzAgLTM1IDc2IC01M3EzIC03IDMgLTIxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDk2OyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xMTIwIDEyODBoLTgzMnEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3YtODMycTAgLTY2IDQ3IC0xMTN0MTEzIC00N2g4MzJxNjYgMCAxMTMgNDd0NDcgMTEzdjgzMnEwIDY2IC00NyAxMTN0LTExMyA0N3pNMTQwOCAxMTIwdi04MzJxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTgzMnEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2ODMycTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg4MzIgcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDk3OyIgaG9yaXotYWR2LXg9IjEyODAiIGQ9Ik0xMTUyIDEyODBoLTEwMjR2LTEyNDJsNDIzIDQwNmw4OSA4NWw4OSAtODVsNDIzIC00MDZ2MTI0MnpNMTE2NCAxNDA4cTIzIDAgNDQgLTlxMzMgLTEzIDUyLjUgLTQxdDE5LjUgLTYydi0xMjg5cTAgLTM0IC0xOS41IC02MnQtNTIuNSAtNDFxLTE5IC04IC00NCAtOHEtNDggMCAtODMgMzJsLTQ0MSA0MjRsLTQ0MSAtNDI0cS0zNiAtMzMgLTgzIC0zM3EtMjMgMCAtNDQgOXEtMzMgMTMgLTUyLjUgNDF0LTE5LjUgNjJ2MTI4OSBxMCAzNCAxOS41IDYydDUyLjUgNDFxMjEgOSA0NCA5aDEwNDh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOTg7IiBkPSJNMTI4MCAzNDNxMCAxMSAtMiAxNnEtMyA4IC0zOC41IDI5LjV0LTg4LjUgNDkuNWwtNTMgMjlxLTUgMyAtMTkgMTN0LTI1IDE1dC0yMSA1cS0xOCAwIC00NyAtMzIuNXQtNTcgLTY1LjV0LTQ0IC0zM3EtNyAwIC0xNi41IDMuNXQtMTUuNSA2LjV0LTE3IDkuNXQtMTQgOC41cS05OSA1NSAtMTcwLjUgMTI2LjV0LTEyNi41IDE3MC41cS0yIDMgLTguNSAxNHQtOS41IDE3dC02LjUgMTUuNXQtMy41IDE2LjVxMCAxMyAyMC41IDMzLjV0NDUgMzguNSB0NDUgMzkuNXQyMC41IDM2LjVxMCAxMCAtNSAyMXQtMTUgMjV0LTEzIDE5cS0zIDYgLTE1IDI4LjV0LTI1IDQ1LjV0LTI2LjUgNDcuNXQtMjUgNDAuNXQtMTYuNSAxOHQtMTYgMnEtNDggMCAtMTAxIC0yMnEtNDYgLTIxIC04MCAtOTQuNXQtMzQgLTEzMC41cTAgLTE2IDIuNSAtMzR0NSAtMzAuNXQ5IC0zM3QxMCAtMjkuNXQxMi41IC0zM3QxMSAtMzBxNjAgLTE2NCAyMTYuNSAtMzIwLjV0MzIwLjUgLTIxNi41cTYgLTIgMzAgLTExdDMzIC0xMi41IHQyOS41IC0xMHQzMyAtOXQzMC41IC01dDM0IC0yLjVxNTcgMCAxMzAuNSAzNHQ5NC41IDgwcTIyIDUzIDIyIDEwMXpNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOTk7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTE4NzUgMTIwMnEwIC0xMCAtNSAtMThxLTY0IC0xMDQgLTE3OSAtMTkwdi0zM3E0IC0yMjcgLTEwMCAtNDU3cS0xMzQgLTI5NyAtMzk3LjUgLTQ2NC41dC01OTEuNSAtMTY3LjVxLTI2NSAwIC01MDAgMTIycS02NCAzMyAtODcgNTBxLTE1IDEyIC0xNSAyN3EwIDEzIDkuNSAyMi41dDIyLjUgOS41cTE0IDAgNDQgLTIuNXQ0NSAtMi41cTIwNCAwIDM3NSAxMDZxLTEwMyAyNCAtMTgxIDk2dC0xMTEgMTczcS0yIDggLTIgMTFxMCAxMiA5IDIxLjUgdDIyIDkuNXE1IDAgMTQgLTJ0MTIgLTJxLTg5IDU1IC0xNDIgMTQ3dC01MyAxOTZxMCAxNSAxMS41IDI1LjV0MjcuNSAxMC41cTEwIDAgMzUgLTExLjV0MzAgLTEzLjVxLTkyIDExMCAtOTIgMjU2cTAgNTEgMTQuNSAxMDh0NDAuNSA5NXExMCAxNiAyNSAxNnExNiAwIDI3IC0xMnE3NiAtODQgMTEwIC0xMTVxMTIzIC0xMTEgMjc2IC0xNzcuNXQzMTcgLTgwLjVxLTQgMjEgLTQgNDlxMCAxNjcgMTE4LjUgMjg1LjV0Mjg1LjUgMTE4LjUgcTE2MyAwIDI4MiAtMTE0cTk1IDIwIDIwOSA4MnE4IDUgMTYgNXExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjVxMCAtMjQgLTI4IC03M3QtNTEgLTc2cTcgMiAzMCAxMC41dDQzIDE2dDI0IDcuNXExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOWE7IiBob3Jpei1hZHYteD0iNzY4IiBkPSJNNTYwIDExMjVxLTQ5IDAgLTYyIC0xNS41dC0xMyAtNjYuNXYtODhoMjE3cTE2IDAgMjcgLTEycTExIC0xMyAxMCAtMjlsLTE0IC0yMDBxLTIgLTE1IC0xMi41IC0yNS41dC0yNS41IC0xMC41aC0yMDJ2LTc2OHEwIC0xNiAtMTEgLTI3dC0yNiAtMTFoLTI1MHEtMTYgMCAtMjcgMTF0LTExIDI3djc2OGgtMTIycS0xNiAwIC0yNyAxMS41dC0xMSAyNy41djIwMHEwIDE2IDExIDI3dDI3IDExaDEyMnYxMDNxMCAxNzcgODggMjYzLjUgdDI2NyA4Ni41cTEyMCAwIDIyNSAtMzBxMTQgLTQgMjIgLTE2dDYgLTI2bC0yNyAtMTk1cS0yIC0xNiAtMTYgLTI2cS0xNCAtOSAtMzAgLTZxLTc2IDE2IC0xMzUgMTZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOWI7IiBkPSJNMTQwOCA2NDBxMCAxMzAgLTUxIDI0OC41dC0xMzYuNSAyMDR0LTIwNCAxMzYuNXQtMjQ4LjUgNTF0LTI0OC41IC01MXQtMjA0IC0xMzYuNXQtMTM2LjUgLTIwNHQtNTEgLTI0OC41cTAgLTIwOSAxMjQuNSAtMzc4LjV0MzIzLjUgLTIzMS41djE2OXEtNTQgLTcgLTY5IC03cS0xMTAgMCAtMTUzIDEwMHEtMTUgMzggLTM2IDYzcS01IDYgLTIxIDE5dC0yOC41IDI0dC0xMi41IDE2cTAgMTIgMjggMTJxMjkgMCA1MS41IC0xNC41dDM4IC0zNSB0MzEuNSAtNDEuNXQ0MC41IC0zNS41dDU2LjUgLTE0LjVxNDIgMCA4MSAxNHExNiA1NyA2MyA4OXEtMTY2IDE2IC0yNDYgODMuNXQtODAgMjI0LjVxMCAxMTggNzMgMTk4cS0xNCA0MiAtMTQgODRxMCA1OCAyNyAxMDlxNTcgMCAxMDEgLTE5LjV0MTAxIC02MC41cTc2IDE4IDE2OSAxOHE4MCAwIDE1MyAtMTZxNTcgNDAgMTAwLjUgNTl0OTkuNSAxOXEyNyAtNTEgMjcgLTEwOXEwIC00MyAtMTQgLTgzcTczIC04MiA3MyAtMTk5IHEwIC0xNTcgLTgwIC0yMjUuNXQtMjQ1IC04My41cTY5IC00NyA2OSAtMTMxdi0yMjZxMTk5IDYyIDMyMy41IDIzMS41dDEyNC41IDM3OC41ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5YzsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNzA0IDE2MHEwIDYgLTE1IDU3dC0zNSAxMTUuNXQtMjAgNjUuNXEzMiAxNiA1MSA0N3QxOSA2N3EwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXEwIC0zNiAxOSAtNjYuNXQ1MSAtNDcuNXEwIC0yIC0yMCAtNjZ0LTM1IC0xMTV0LTE1IC01N3EwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDE5MnExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xNjY0IDk2MHYtMjU2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOSBoLTY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MjU2cTAgMTA2IC03NSAxODF0LTE4MSA3NXQtMTgxIC03NXQtNzUgLTE4MXYtMTkyaDk2cTQwIDAgNjggLTI4dDI4IC02OHYtNTc2cTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtOTYwcS00MCAwIC02OCAyOHQtMjggNjh2NTc2cTAgNDAgMjggNjh0NjggMjhoNjcydjE5MnEwIDE4NSAxMzEuNSAzMTYuNXQzMTYuNSAxMzEuNXQzMTYuNSAtMTMxLjV0MTMxLjUgLTMxNi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDlkOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xNzYwIDE0MDhxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTEyMTZxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE2MDBxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDE2MDB6TTE2MCAxMjgwcS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtMjI0aDE2NjR2MjI0cTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTYwMHpNMTc2MCAwcTEzIDAgMjIuNSA5LjV0OS41IDIyLjV2NjA4aC0xNjY0di02MDggcTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTYwMHpNMjU2IDEyOHYxMjhoMjU2di0xMjhoLTI1NnpNNjQwIDEyOHYxMjhoMzg0di0xMjhoLTM4NHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5ZTsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMzg0IDE5MnEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ6TTg5NiA2OXEyIC0yOCAtMTcgLTQ4cS0xOCAtMjEgLTQ3IC0yMWgtMTM1cS0yNSAwIC00MyAxNi41dC0yMCA0MS41cS0yMiAyMjkgLTE4NC41IDM5MS41dC0zOTEuNSAxODQuNXEtMjUgMiAtNDEuNSAyMHQtMTYuNSA0M3YxMzVxMCAyOSAyMSA0N3ExNyAxNyA0MyAxN2g1cTE2MCAtMTMgMzA2IC04MC41IHQyNTkgLTE4MS41cTExNCAtMTEzIDE4MS41IC0yNTl0ODAuNSAtMzA2ek0xNDA4IDY3cTIgLTI3IC0xOCAtNDdxLTE4IC0yMCAtNDYgLTIwaC0xNDNxLTI2IDAgLTQ0LjUgMTcuNXQtMTkuNSA0Mi41cS0xMiAyMTUgLTEwMSA0MDguNXQtMjMxLjUgMzM2dC0zMzYgMjMxLjV0LTQwOC41IDEwMnEtMjUgMSAtNDIuNSAxOS41dC0xNy41IDQzLjV2MTQzcTAgMjggMjAgNDZxMTggMTggNDQgMThoM3EyNjIgLTEzIDUwMS41IC0xMjB0NDI1LjUgLTI5NCBxMTg3IC0xODYgMjk0IC00MjUuNXQxMjAgLTUwMS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGEwOyIgZD0iTTEwNDAgMzIwcTAgLTMzIC0yMy41IC01Ni41dC01Ni41IC0yMy41dC01Ni41IDIzLjV0LTIzLjUgNTYuNXQyMy41IDU2LjV0NTYuNSAyMy41dDU2LjUgLTIzLjV0MjMuNSAtNTYuNXpNMTI5NiAzMjBxMCAtMzMgLTIzLjUgLTU2LjV0LTU2LjUgLTIzLjV0LTU2LjUgMjMuNXQtMjMuNSA1Ni41dDIzLjUgNTYuNXQ1Ni41IDIzLjV0NTYuNSAtMjMuNXQyMy41IC01Ni41ek0xNDA4IDE2MHYzMjBxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41IGgtMTIxNnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTMyMHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDEyMTZxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTc4IDY0MGgxMTgwbC0xNTcgNDgycS00IDEzIC0xNiAyMS41dC0yNiA4LjVoLTc4MnEtMTQgMCAtMjYgLTguNXQtMTYgLTIxLjV6TTE1MzYgNDgwdi0zMjBxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTEyMTZxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjMyMHEwIDI1IDE2IDc1IGwxOTcgNjA2cTE3IDUzIDYzIDg2dDEwMSAzM2g3ODJxNTUgMCAxMDEgLTMzdDYzIC04NmwxOTcgLTYwNnExNiAtNTAgMTYgLTc1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGExOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNjY0IDg5NnE1MyAwIDkwLjUgLTM3LjV0MzcuNSAtOTAuNXQtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXYtMzg0cTAgLTUyIC0zOCAtOTB0LTkwIC0zOHEtNDE3IDM0NyAtODEyIDM4MHEtNTggLTE5IC05MSAtNjZ0LTMxIC0xMDAuNXQ0MCAtOTIuNXEtMjAgLTMzIC0yMyAtNjUuNXQ2IC01OHQzMy41IC01NXQ0OCAtNTB0NjEuNSAtNTAuNXEtMjkgLTU4IC0xMTEuNSAtODN0LTE2OC41IC0xMS41dC0xMzIgNTUuNXEtNyAyMyAtMjkuNSA4Ny41IHQtMzIgOTQuNXQtMjMgODl0LTE1IDEwMXQzLjUgOTguNXQyMiAxMTAuNWgtMTIycS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxOTJxMCA2NiA0NyAxMTN0MTEzIDQ3aDQ4MHE0MzUgMCA4OTYgMzg0cTUyIDAgOTAgLTM4dDM4IC05MHYtMzg0ek0xNTM2IDI5MnY5NTRxLTM5NCAtMzAyIC03NjggLTM0M3YtMjcwcTM3NyAtNDIgNzY4IC0zNDF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYTI7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTg0OCAtMTYwcTAgMTYgLTE2IDE2cS01OSAwIC0xMDEuNSA0Mi41dC00Mi41IDEwMS41cTAgMTYgLTE2IDE2dC0xNiAtMTZxMCAtNzMgNTEuNSAtMTI0LjV0MTI0LjUgLTUxLjVxMTYgMCAxNiAxNnpNMTgzIDEyOGgxMjk4cS0xNjQgMTgxIC0yNDYuNSA0MTEuNXQtODIuNSA0ODQuNXEwIDI1NiAtMzIwIDI1NnQtMzIwIC0yNTZxMCAtMjU0IC04Mi41IC00ODQuNXQtMjQ2LjUgLTQxMS41ek0xNjY0IDEyOHEwIC01MiAtMzggLTkwdC05MCAtMzggaC00NDhxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1dC0xODEgNzV0LTc1IDE4MWgtNDQ4cS01MiAwIC05MCAzOHQtMzggOTBxMTkwIDE2MSAyODcgMzk3LjV0OTcgNDk4LjVxMCAxNjUgOTYgMjYydDI2NCAxMTdxLTggMTggLTggMzdxMCA0MCAyOCA2OHQ2OCAyOHQ2OCAtMjh0MjggLTY4cTAgLTE5IC04IC0zN3ExNjggLTIwIDI2NCAtMTE3dDk2IC0yNjJxMCAtMjYyIDk3IC00OTguNXQyODcgLTM5Ny41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGEzOyIgZD0iTTEzNzYgNjQwbDEzOCAtMTM1cTMwIC0yOCAyMCAtNzBxLTEyIC00MSAtNTIgLTUxbC0xODggLTQ4bDUzIC0xODZxMTIgLTQxIC0xOSAtNzBxLTI5IC0zMSAtNzAgLTE5bC0xODYgNTNsLTQ4IC0xODhxLTEwIC00MCAtNTEgLTUycS0xMiAtMiAtMTkgLTJxLTMxIDAgLTUxIDIybC0xMzUgMTM4bC0xMzUgLTEzOHEtMjggLTMwIC03MCAtMjBxLTQxIDExIC01MSA1MmwtNDggMTg4bC0xODYgLTUzcS00MSAtMTIgLTcwIDE5cS0zMSAyOSAtMTkgNzAgbDUzIDE4NmwtMTg4IDQ4cS00MCAxMCAtNTIgNTFxLTEwIDQyIDIwIDcwbDEzOCAxMzVsLTEzOCAxMzVxLTMwIDI4IC0yMCA3MHExMiA0MSA1MiA1MWwxODggNDhsLTUzIDE4NnEtMTIgNDEgMTkgNzBxMjkgMzEgNzAgMTlsMTg2IC01M2w0OCAxODhxMTAgNDEgNTEgNTFxNDEgMTIgNzAgLTE5bDEzNSAtMTM5bDEzNSAxMzlxMjkgMzAgNzAgMTlxNDEgLTEwIDUxIC01MWw0OCAtMTg4bDE4NiA1M3E0MSAxMiA3MCAtMTlxMzEgLTI5IDE5IC03MCBsLTUzIC0xODZsMTg4IC00OHE0MCAtMTAgNTIgLTUxcTEwIC00MiAtMjAgLTcweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGE0OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0yNTYgMTkycTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTY2NCA3NjhxMCA1MSAtMzkgODkuNXQtODkgMzguNWgtNTc2cTAgMjAgMTUgNDguNXQzMyA1NXQzMyA2OHQxNSA4NC41cTAgNjcgLTQ0LjUgOTcuNXQtMTE1LjUgMzAuNXEtMjQgMCAtOTAgLTEzOXEtMjQgLTQ0IC0zNyAtNjVxLTQwIC02NCAtMTEyIC0xNDVxLTcxIC04MSAtMTAxIC0xMDYgcS02OSAtNTcgLTE0MCAtNTdoLTMydi02NDBoMzJxNzIgMCAxNjcgLTMydDE5My41IC02NHQxNzkuNSAtMzJxMTg5IDAgMTg5IDE2N3EwIDI2IC01IDU2cTMwIDE2IDQ3LjUgNTIuNXQxNy41IDczLjV0LTE4IDY5cTUzIDUwIDUzIDExOXEwIDI1IC0xMCA1NS41dC0yNSA0Ny41aDMzMXE1MiAwIDkwIDM4dDM4IDkwek0xNzkyIDc2OXEwIC0xMDUgLTc1LjUgLTE4MXQtMTgwLjUgLTc2aC0xNjlxLTQgLTYyIC0zNyAtMTE5cTMgLTIxIDMgLTQzIHEwIC0xMDEgLTYwIC0xNzhxMSAtMTM5IC04NSAtMjE5LjV0LTIyNyAtODAuNXEtMTMzIDAgLTMyMiA2OXEtMTY0IDU5IC0yMjMgNTloLTI4OHEtNTMgMCAtOTAuNSAzNy41dC0zNy41IDkwLjV2NjQwcTAgNTMgMzcuNSA5MC41dDkwLjUgMzcuNWgyODhxMTAgMCAyMS41IDQuNXQyMy41IDE0dDIyLjUgMTh0MjQgMjIuNXQyMC41IDIxLjV0MTkgMjEuNXQxNCAxN3E2NSA3NCAxMDAgMTI5cTEzIDIxIDMzIDYydDM3IDcydDQwLjUgNjN0NTUgNDkuNSB0NjkuNSAxNy41cTEyNSAwIDIwNi41IC02N3Q4MS41IC0xODlxMCAtNjggLTIyIC0xMjhoMzc0cTEwNCAwIDE4MCAtNzZ0NzYgLTE3OXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhNTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTM3NiAxMjhoMzJ2NjQwaC0zMnEtMzUgMCAtNjcgMTEuNXQtNjQgMzguNXQtNDggNDR0LTUwIDU1cS0yIDMgLTMuNSA0LjV0LTQgNC41dC00LjUgNXEtNzIgODEgLTExMiAxNDVxLTE0IDIyIC0zOCA2OHEtMSAzIC0xMC41IDIyLjV0LTE4LjUgMzZ0LTIwIDM1LjV0LTIxLjUgMzAuNXQtMTguNSAxMS41cS03MSAwIC0xMTUuNSAtMzAuNXQtNDQuNSAtOTcuNXEwIC00MyAxNSAtODQuNXQzMyAtNjh0MzMgLTU1dDE1IC00OC41aC01NzYgcS01MCAwIC04OSAtMzguNXQtMzkgLTg5LjVxMCAtNTIgMzggLTkwdDkwIC0zOGgzMzFxLTE1IC0xNyAtMjUgLTQ3LjV0LTEwIC01NS41cTAgLTY5IDUzIC0xMTlxLTE4IC0zMiAtMTggLTY5dDE3LjUgLTczLjV0NDcuNSAtNTIuNXEtNCAtMjQgLTQgLTU2cTAgLTg1IDQ4LjUgLTEyNnQxMzUuNSAtNDFxODQgMCAxODMgMzJ0MTk0IDY0dDE2NyAzMnpNMTY2NCAxOTJxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXQxOSAtNDUgdDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTc5MiA3Njh2LTY0MHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNWgtMjg4cS01OSAwIC0yMjMgLTU5cS0xOTAgLTY5IC0zMTcgLTY5cS0xNDIgMCAtMjMwIDc3LjV0LTg3IDIxNy41bDEgNXEtNjEgNzYgLTYxIDE3OHEwIDIyIDMgNDNxLTMzIDU3IC0zNyAxMTloLTE2OXEtMTA1IDAgLTE4MC41IDc2dC03NS41IDE4MXEwIDEwMyA3NiAxNzl0MTgwIDc2aDM3NHEtMjIgNjAgLTIyIDEyOCBxMCAxMjIgODEuNSAxODl0MjA2LjUgNjdxMzggMCA2OS41IC0xNy41dDU1IC00OS41dDQwLjUgLTYzdDM3IC03MnQzMyAtNjJxMzUgLTU1IDEwMCAtMTI5cTIgLTMgMTQgLTE3dDE5IC0yMS41dDIwLjUgLTIxLjV0MjQgLTIyLjV0MjIuNSAtMTh0MjMuNSAtMTR0MjEuNSAtNC41aDI4OHE1MyAwIDkwLjUgLTM3LjV0MzcuNSAtOTAuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhNjsiIGQ9Ik0xMjgwIC02NHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTE0MDggNzAwcTAgMTg5IC0xNjcgMTg5cS0yNiAwIC01NiAtNXEtMTYgMzAgLTUyLjUgNDcuNXQtNzMuNSAxNy41dC02OSAtMThxLTUwIDUzIC0xMTkgNTNxLTI1IDAgLTU1LjUgLTEwdC00Ny41IC0yNXYzMzFxMCA1MiAtMzggOTB0LTkwIDM4cS01MSAwIC04OS41IC0zOXQtMzguNSAtODl2LTU3NiBxLTIwIDAgLTQ4LjUgMTV0LTU1IDMzdC02OCAzM3QtODQuNSAxNXEtNjcgMCAtOTcuNSAtNDQuNXQtMzAuNSAtMTE1LjVxMCAtMjQgMTM5IC05MHE0NCAtMjQgNjUgLTM3cTY0IC00MCAxNDUgLTExMnE4MSAtNzEgMTA2IC0xMDFxNTcgLTY5IDU3IC0xNDB2LTMyaDY0MHYzMnEwIDcyIDMyIDE2N3Q2NCAxOTMuNXQzMiAxNzkuNXpNMTUzNiA3MDVxMCAtMTMzIC02OSAtMzIycS01OSAtMTY0IC01OSAtMjIzdi0yODhxMCAtNTMgLTM3LjUgLTkwLjUgdC05MC41IC0zNy41aC02NDBxLTUzIDAgLTkwLjUgMzcuNXQtMzcuNSA5MC41djI4OHEwIDEwIC00LjUgMjEuNXQtMTQgMjMuNXQtMTggMjIuNXQtMjIuNSAyNHQtMjEuNSAyMC41dC0yMS41IDE5dC0xNyAxNHEtNzQgNjUgLTEyOSAxMDBxLTIxIDEzIC02MiAzM3QtNzIgMzd0LTYzIDQwLjV0LTQ5LjUgNTV0LTE3LjUgNjkuNXEwIDEyNSA2NyAyMDYuNXQxODkgODEuNXE2OCAwIDEyOCAtMjJ2Mzc0cTAgMTA0IDc2IDE4MHQxNzkgNzYgcTEwNSAwIDE4MSAtNzUuNXQ3NiAtMTgwLjV2LTE2OXE2MiAtNCAxMTkgLTM3cTIxIDMgNDMgM3ExMDEgMCAxNzggLTYwcTEzOSAxIDIxOS41IC04NXQ4MC41IC0yMjd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYTc7IiBkPSJNMTQwOCA1NzZxMCA4NCAtMzIgMTgzdC02NCAxOTR0LTMyIDE2N3YzMmgtNjQwdi0zMnEwIC00NiAtMjUgLTkxdC01MiAtNzJ0LTcyIC02NnEtOSAtOCAtMTQgLTEycS04MSAtNzIgLTE0NSAtMTEycS0yMiAtMTQgLTY4IC0zOHEtMyAtMSAtMjIuNSAtMTAuNXQtMzYgLTE4LjV0LTM1LjUgLTIwdC0zMC41IC0yMS41dC0xMS41IC0xOC41cTAgLTcxIDMwLjUgLTExNS41dDk3LjUgLTQ0LjVxNDMgMCA4NC41IDE1dDY4IDMzdDU1IDMzIHQ0OC41IDE1di01NzZxMCAtNTAgMzguNSAtODl0ODkuNSAtMzlxNTIgMCA5MCAzOHQzOCA5MHYzMzFxNDYgLTM1IDEwMyAtMzVxNjkgMCAxMTkgNTNxMzIgLTE4IDY5IC0xOHQ3My41IDE3LjV0NTIuNSA0Ny41cTI0IC00IDU2IC00cTg1IDAgMTI2IDQ4LjV0NDEgMTM1LjV6TTEyODAgMTM0NHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTE1MzYgNTgwcTAgLTE0MiAtNzcuNSAtMjMwIHQtMjE3LjUgLTg3bC01IDFxLTc2IC02MSAtMTc4IC02MXEtMjIgMCAtNDMgM3EtNTQgLTMwIC0xMTkgLTM3di0xNjlxMCAtMTA1IC03NiAtMTgwLjV0LTE4MSAtNzUuNXEtMTAzIDAgLTE3OSA3NnQtNzYgMTgwdjM3NHEtNTQgLTIyIC0xMjggLTIycS0xMjEgMCAtMTg4LjUgODEuNXQtNjcuNSAyMDYuNXEwIDM4IDE3LjUgNjkuNXQ0OS41IDU1dDYzIDQwLjV0NzIgMzd0NjIgMzNxNTUgMzUgMTI5IDEwMHEzIDIgMTcgMTR0MjEuNSAxOSB0MjEuNSAyMC41dDIyLjUgMjR0MTggMjIuNXQxNCAyMy41dDQuNSAyMS41djI4OHEwIDUzIDM3LjUgOTAuNXQ5MC41IDM3LjVoNjQwcTUzIDAgOTAuNSAtMzcuNXQzNy41IC05MC41di0yODhxMCAtNTkgNTkgLTIyM3E2OSAtMTkwIDY5IC0zMTd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYTg7IiBkPSJNMTI4MCA1NzZ2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOWgtNTAybDE4OSAxODlxMTkgMTkgMTkgNDV0LTE5IDQ1bC05MSA5MXEtMTggMTggLTQ1IDE4dC00NSAtMThsLTM2MiAtMzYybC05MSAtOTFxLTE4IC0xOCAtMTggLTQ1dDE4IC00NWw5MSAtOTFsMzYyIC0zNjJxMTggLTE4IDQ1IC0xOHQ0NSAxOGw5MSA5MXExOCAxOCAxOCA0NXQtMTggNDVsLTE4OSAxODloNTAycTI2IDAgNDUgMTl0MTkgNDV6TTE1MzYgNjQwIHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhOTsiIGQ9Ik0xMjg1IDY0MHEwIDI3IC0xOCA0NWwtOTEgOTFsLTM2MiAzNjJxLTE4IDE4IC00NSAxOHQtNDUgLTE4bC05MSAtOTFxLTE4IC0xOCAtMTggLTQ1dDE4IC00NWwxODkgLTE4OWgtNTAycS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloNTAybC0xODkgLTE4OXEtMTkgLTE5IC0xOSAtNDV0MTkgLTQ1bDkxIC05MXExOCAtMTggNDUgLTE4dDQ1IDE4bDM2MiAzNjJsOTEgOTFxMTggMTggMTggNDV6TTE1MzYgNjQwIHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhYTsiIGQ9Ik0xMjg0IDY0MXEwIDI3IC0xOCA0NWwtMzYyIDM2MmwtOTEgOTFxLTE4IDE4IC00NSAxOHQtNDUgLTE4bC05MSAtOTFsLTM2MiAtMzYycS0xOCAtMTggLTE4IC00NXQxOCAtNDVsOTEgLTkxcTE4IC0xOCA0NSAtMTh0NDUgMThsMTg5IDE4OXYtNTAycTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV2NTAybDE4OSAtMTg5cTE5IC0xOSA0NSAtMTl0NDUgMTlsOTEgOTFxMTggMTggMTggNDV6TTE1MzYgNjQwIHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhYjsiIGQ9Ik0xMjg0IDYzOXEwIDI3IC0xOCA0NWwtOTEgOTFxLTE4IDE4IC00NSAxOHQtNDUgLTE4bC0xODkgLTE4OXY1MDJxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di01MDJsLTE4OSAxODlxLTE5IDE5IC00NSAxOXQtNDUgLTE5bC05MSAtOTFxLTE4IC0xOCAtMTggLTQ1dDE4IC00NWwzNjIgLTM2Mmw5MSAtOTFxMTggLTE4IDQ1IC0xOHQ0NSAxOGw5MSA5MWwzNjIgMzYycTE4IDE4IDE4IDQ1ek0xNTM2IDY0MCBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYWM7IiBkPSJNMTE5MyA5OTNxMTEgNyAyNSAyMnYtMXEwIC0yIC05LjUgLTEwdC0xMS41IC0xMnEtMSAxIC00IDF6TTExODcgOTkycS0xIDEgLTIuNSAzdC0xLjUgM3EzIC0yIDEwIC01cS02IC00IC02IC0xek03MjggMTE3NXEtMTYgMiAtMjYgNXExIDAgNi41IC0xdDEwLjUgLTJ0OSAtMnpNNzczIDEyMTJxNyA0IDEzLjUgMi41dDcuNSAtNy41cS01IDMgLTIxIDV6TTc2NSAxMjA2bC0zIDJxLTIgMyAtNS41IDV0LTQuNSAycTIgLTEgMjEgLTMgcS02IC00IC04IC02ek02NjMgMTI5MHYycTEgLTIgMyAtNS41dDMgLTUuNXpNNTU4IDEyNTBxMCAtMiAtMSAtMmwtMSAyaDJ6TTkzMyAyMDZ2LTF2MXpNNzY4IDE0MDhxMjA5IDAgMzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXQtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3pNMTI0MCAxNjIgbDUgNXEtNyAxMCAtMjkgMTJxMSAxMiAtMTQgMjYuNXQtMjcgMTUuNXEwIDQgLTEwLjUgMTF0LTE3LjUgOHEtOSAyIC0yNyAtOXEtNyAtMyAtNCAtNXEtMyAzIC0xMiAxMXQtMTYgMTFxLTIgMSAtNy41IDF0LTguNSAycS0xIDEgLTYgNC41dC03IDQuNXQtNi41IDN0LTcuNSAxLjV0LTcuNSAtMi41dC04LjUgLTZ0LTQuNSAtMTUuNXQtMi41IC0xNC41cS04IDYgLTAuNSAyMHQxLjUgMjBxLTcgNyAtMjEgMC41dC0yMSAtMTUuNSBxLTEgLTEgLTkuNSAtNS41dC0xMS41IC03LjVxLTQgLTYgLTkgLTE3LjV0LTYgLTEzLjVxMCAyIC0yLjUgNi41dC0yLjUgNi41cS0xMiAtMiAtMTYgM3E1IC0xNiA4IC0xN2wtNCAycS0xIC02IDMgLTE1dDQgLTExcTEgLTUgLTEuNSAtMTN0LTIuNSAtMTFxMCAtMiA1IC0xMXE0IC0xOSAtMiAtMzJxMCAtMSAtMy41IC03dC02LjUgLTExbC0yIC01bC0yIDFxLTEgMSAtMiAwcS0xIC02IC05IC0xM3QtMTAgLTExcS0xNSAtMjMgLTkgLTM4IHEzIC04IDEwIC0xMHEzIC0xIDMgMnExIC05IC0xMSAtMjdxMSAtMSA0IC0zcS0xNyAwIC0xMCAtMTRxMjAyIDM2IDM1MiAxODFoLTN6TTY4MCAzNDdxMTYgMyAzMC41IC0xNnQyMi41IC0yM3E0MSAtMjAgNTkgLTExcTAgLTkgMTQgLTI4cTMgLTQgNi41IC0xMS41dDUuNSAtMTAuNXE1IC03IDE5IC0xNnQxOSAtMTZxNiAzIDkgOXExMyAtMzUgMjQgLTM0cTUgMCA4IDhxMCAtMSAtMC41IC0zdC0xLjUgLTNxNyAxNSA1IDI2bDYgNHE1IDQgNSA1IHEtNiA2IC05IC0zcS0zMCAtMTQgLTQ4IDIycS0yIDMgLTQuNSA4dC01IDEydC0xLjUgMTEuNXQ2IDQuNXExMSAwIDEyLjUgMS41dC0yLjUgNnQtNCA3LjVxLTEgNCAtMS41IDEyLjV0LTEuNSAxMi41bC01IDZxLTUgNiAtMTEuNSAxMy41dC03LjUgOS41cS00IC0xMCAtMTYuNSAtOC41dC0xOC41IDkuNXExIC0yIC0wLjUgLTYuNXQtMS41IC02LjVxLTE0IDAgLTE3IDFxMSA2IDMgMjF0NCAyMnExIDUgNS41IDEzLjV0OCAxNS41dDQuNSAxNCB0LTQuNSAxMC41dC0xOC41IDIuNXEtMjAgLTEgLTI5IC0yMnEtMSAtMyAtMyAtMTEuNXQtNSAtMTIuNXQtOSAtN3EtOCAtMyAtMjcgLTJ0LTI2IDVxLTE0IDggLTI0IDMwLjV0LTExIDQxLjVxMCAxMCAzIDI3LjV0MyAyN3QtNiAyNi41cTMgMiAxMCAxMC41dDExIDExLjVxMiAyIDUgMmg1dDQgMnQzIDZxLTEgMSAtNCAzcS0zIDMgLTQgM3E0IC0zIDE5IC0xdDE5IDJxMCAxIDIyIDBxMTcgLTEzIDI0IDJxMCAxIC0yLjUgMTAuNXQtMC41IDE0LjUgcTUgLTI5IDMyIC0xMHEzIC00IDE2LjUgLTZ0MTguNSAtNXEzIC0yIDcgLTUuNXQ2IC01dDYgLTAuNXQ5IDdxMTEgLTE3IDEzIC0yNXExMSAtNDMgMjAgLTQ4cTggLTIgMTIuNSAtMnQ1IDEwLjV0MCAxNS41dC0xLjUgMTNsLTIgMzdxLTE2IDMgLTIwIDEyLjV0MS41IDIwdDE2LjUgMTkuNXExIDEgMTYuNSA4dDIxLjUgMTJxMjQgMTkgMTcgMzlxOSAtMiAxMSA5bC01IDNxLTQgMyAtOCA1LjV0LTUgMS41cTExIDcgMiAxOHE1IDMgOCAxMS41IHQ5IDExLjVxOSAtMTQgMjIgLTNxOCA5IDIgMThxNSA4IDIyIDExLjV0MjAgOS41cTUgLTEgNyAwdDIgNC41djcuNXQxIDguNXQzIDcuNXE0IDYgMTYgMTAuNXQxNCA1LjVsMTkgMTJxNCA0IDAgNHExOCAtMiAzMiAxMXExMyAxMiAtNSAyM3EyIDcgLTQgMTAuNXQtMTYgNS41cTMgMSAxMiAwLjV0MTIgMS41cTE1IDExIC03IDE3cS0yMCA1IC00NyAtMTNxLTMgLTIgLTEzIC0xMnQtMTcgLTExcTE1IDE4IDUgMjJxOCAtMSAyMi41IDl0MTUuNSAxMSBxNCAyIDEwLjUgMi41dDguNSAxLjVxNzEgMjUgOTIgLTFxOCAxMSAxMSAxNXQ5LjUgOXQxNS41IDhxMjEgNyAyMyA5bDEgMjNxLTEyIC0xIC0xOCA4dC03IDIybC02IC04cTAgNiAtMy41IDcuNXQtNy41IDAuNXQtOS41IC0ydC03LjUgMHEtOSAyIC0xOS41IDE1LjV0LTE0LjUgMTYuNXE5IDAgOSA1cS0yIDUgLTEwIDhxMSA2IC0yIDh0LTkgMHEtMiAxMiAtMSAxM3EtNiAxIC0xMSAxMXQtOCAxMHEtMiAwIC00LjUgLTJ0LTUgLTUuNWwtNSAtNyB0LTMuNSAtNS41bC0yIC0ycS0xMiA2IC0yNCAtMTBxLTkgMSAtMTcgLTJxMTUgNiAyIDEzcS0xMSA1IC0yMSAycTEyIDUgMTAgMTR0LTEyIDE2cTEgMCA0IC0xdDQgLTFxLTEgNSAtOS41IDkuNXQtMTkuNSA5dC0xNCA2LjVxLTcgNSAtMzYgMTAuNXQtMzYgMS41cS01IC0zIC02IC02dDEuNSAtOC41dDMuNSAtOC41cTYgLTIzIDUgLTI3cS0xIC0zIC04LjUgLTh0LTUuNSAtMTJxMSAtNCAxMS41IC0xMHQxMi41IC0xMnE1IC0xMyAtNCAtMjUgcS00IC01IC0xNSAtMTF0LTE0IC0xMHEtNSAtNSAtMy41IC0xMS41dDAuNSAtOS41cTEgMSAxIDIuNXQxIDIuNXEwIC0xMyAxMSAtMjJxOCAtNiAtMTYgLTE4cS0yMCAtMTEgLTIwIC00cTEgOCAtNy41IDE2dC0xMC41IDEydC0zLjUgMTl0LTkuNSAyMXEtNiA0IC0xOSA0dC0xOCAtNXEwIDEwIC00OSAzMHEtMTcgOCAtNTggNHE3IDEgMCAxN3EtOCAxNiAtMjEgMTJxLTggMjUgLTQgMzVxMiA1IDkgMTR0OSAxNXExIDMgMTUuNSA2dDE2LjUgOCBxMSA0IC0yLjUgNi41dC05LjUgNC41cTUzIC02IDYzIDE4cTUgOSAzIDE0cTAgLTEgMiAtMXQyIC0xcTEyIDMgNyAxN3ExOSA4IDI2IDhxNSAtMSAxMSAtNnQxMCAtNXExNyAtMyAyMS41IDEwdC05LjUgMjNxNyAtNCA3IDZxLTEgMTMgLTcgMTlxLTMgMiAtNi41IDIuNXQtNi41IDB0LTcgMC41cS0xIDAgLTggMnEtMSAtMSAtMiAtMWgtOHEtNCAtMiAtNCAtNXYtMXEtMSAtMyA0IC02bDUgLTFsMyAtMnEtMSAwIC0yLjUgLTIuNXQtMi41IC0yLjUgcTAgLTMgMyAtNXEtMiAtMSAtMTQgLTcuNXQtMTcgLTEwLjVxLTEgLTEgLTQgLTIuNXQtNCAtMi41cS0yIC0xIC00IDJ0LTQgOXQtNCAxMS41dC00LjUgMTB0LTUuNSA0LjVxLTEyIDAgLTE4IC0xN3EzIDEwIC0xMyAxNy41dC0yNSA3LjVxMjAgMTUgLTkgMzBsLTEgMXEtMzAgLTQgLTQ1IC03cS0yIC02IDMgLTEycS0xIC03IDYgLTlxMCAtMSAwLjUgLTF0MC41IC0xcTAgMSAtMC41IDF0LTAuNSAxcTMgLTEgMTAuNSAtMS41dDkuNSAtMS41IHEzIC0xIDQuNSAtMmw3LjUgLTV0NS41IC02dC0yLjUgLTVxLTIgLTEgLTkgLTR0LTEyLjUgLTUuNXQtNi41IC0zLjVxLTMgLTUgMCAtMTZ0LTIgLTE1cS01IDUgLTEwIDE4LjV0LTggMTcuNXE4IC05IC0zMCAtNmwtOCAxcS00IDAgLTE1IC0ydC0xNiAtMXEtNyAwIC0yOSA2cTcgMTcgNSAyNXE1IDAgNyAybC02IDNxLTMgLTEgLTI1IC05cTIgLTMgOCAtOS41dDkgLTExLjVxLTIyIDYgLTI3IC0ycTAgLTEgLTkgMHEtMjUgMSAtMjQgLTcgcTEgLTQgOSAtMTJxMCAtOSAtMSAtOXEtMjcgMjIgLTMwIDIzcS0xNzIgLTgzIC0yNzYgLTI0OHExIC0yIDIuNSAtMTF0My41IC04LjV0MTEgNC41cTkgLTkgMyAtMjFxMiAyIDM2IC0yMXE1NiAtNDAgMjIgLTUzdjUuNXQxIDYuNXEtOSAtMSAtMTkgNXEtMyAtNiAwLjUgLTIwdDExLjUgLTE0cS04IDAgLTEwLjUgLTE3dC0yLjUgLTM4LjV0LTEgLTI1LjVsMiAtMXEtMyAtMTMgNiAtMzcuNXQyNCAtMjAuNXEtNCAtMTggNSAtMjFxLTEgLTQgMCAtOCB0NC41IC04LjV0NiAtN2w3LjUgLTcuNWw2IC02cTI4IC0xMSA0MSAtMjlxNCAtNiAxMC41IC0yNC41dDE1LjUgLTI1LjVxLTIgLTYgMTAgLTIxLjV0MTEgLTI1LjVxLTEgMCAtMi41IC0wLjV0LTIuNSAtMC41cTMgLTggMTYuNSAtMTZ0MTYuNSAtMTRxMiAtMyAyLjUgLTEwLjV0MyAtMTJ0OC41IC0yLjVxMyAyNCAtMjYgNjhxLTE2IDI3IC0xOCAzMXEtMyA1IC01LjUgMTYuNXQtNC41IDE1LjVxMjcgLTkgMjYgLTEzcS01IC0xMCAyNiAtNTIgcTIgLTMgMTAgLTEwdDExIC0xMnEzIC00IDkuNSAtMTQuNXQxMC41IC0xNS41cS0xIDAgLTMgLTJsLTMgLTNxNCAtMiA5IC01dDggLTQuNXQ3LjUgLTV0Ny41IC03LjVxMTYgLTE4IDIwIC0zM3ExIC00IDAuNSAtMTUuNXQxLjUgLTE2LjVxMiAtNiA2IC0xMXQxMS41IC0xMHQxMS41IC03dDE0LjUgLTYuNXQxMS41IC01LjVxMiAtMSAxOCAtMTF0MjUgLTE0cTEwIC00IDE2LjUgLTQuNXQxNiAyLjV0MTUuNSA0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGFkOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0zODQgNjRxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xMDI4IDQ4NGwtNjgyIC02ODJxLTM3IC0zNyAtOTAgLTM3cS01MiAwIC05MSAzN2wtMTA2IDEwOHEtMzggMzYgLTM4IDkwcTAgNTMgMzggOTFsNjgxIDY4MXEzOSAtOTggMTE0LjUgLTE3My41dDE3My41IC0xMTQuNXpNMTY2MiA5MTlxMCAtMzkgLTIzIC0xMDZxLTQ3IC0xMzQgLTE2NC41IC0yMTcuNSB0LTI1OC41IC04My41cS0xODUgMCAtMzE2LjUgMTMxLjV0LTEzMS41IDMxNi41dDEzMS41IDMxNi41dDMxNi41IDEzMS41cTU4IDAgMTIxLjUgLTE2LjV0MTA3LjUgLTQ2LjVxMTYgLTExIDE2IC0yOHQtMTYgLTI4bC0yOTMgLTE2OXYtMjI0bDE5MyAtMTA3cTUgMyA3OSA0OC41dDEzNS41IDgxdDcwLjUgMzUuNXExNSAwIDIzLjUgLTEwdDguNSAtMjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYWU7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTEwMjQgMTI4aDY0MHYxMjhoLTY0MHYtMTI4ek02NDAgNjQwaDEwMjR2MTI4aC0xMDI0di0xMjh6TTEyODAgMTE1MmgzODR2MTI4aC0zODR2LTEyOHpNMTc5MiAzMjB2LTI1NnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE2NjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYyNTZxMCAyNiAxOSA0NXQ0NSAxOWgxNjY0cTI2IDAgNDUgLTE5dDE5IC00NXpNMTc5MiA4MzJ2LTI1NnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE2NjRxLTI2IDAgLTQ1IDE5IHQtMTkgNDV2MjU2cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgMTM0NHYtMjU2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGIwOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xNDAzIDEyNDFxMTcgLTQxIC0xNCAtNzBsLTQ5MyAtNDkzdi03NDJxMCAtNDIgLTM5IC01OXEtMTMgLTUgLTI1IC01cS0yNyAwIC00NSAxOWwtMjU2IDI1NnEtMTkgMTkgLTE5IDQ1djQ4NmwtNDkzIDQ5M3EtMzEgMjkgLTE0IDcwcTE3IDM5IDU5IDM5aDEyODBxNDIgMCA1OSAtMzl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYjE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTY0MCAxMTUyaDUxMnYxMjhoLTUxMnYtMTI4ek0xNzkyIDUxMnYtNDgwcTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNDcycS02NiAwIC0xMTMgNDd0LTQ3IDExM3Y0ODBoNjcydi0xNjBxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgzMjBxMjYgMCA0NSAxOXQxOSA0NXYxNjBoNjcyek0xMDI0IDUxMnYtMTI4aC0yNTZ2MTI4aDI1NnpNMTc5MiA5OTJ2LTM4NGgtMTc5MnYzODRxMCA2NiA0NyAxMTN0MTEzIDQ3aDM1MnYxNjBxMCA0MCAyOCA2OCB0NjggMjhoNTc2cTQwIDAgNjggLTI4dDI4IC02OHYtMTYwaDM1MnE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBiMjsiIGQ9Ik0xMjgzIDk5NWwtMzU1IC0zNTVsMzU1IC0zNTVsMTQ0IDE0NHEyOSAzMSA3MCAxNHEzOSAtMTcgMzkgLTU5di00NDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC00NDhxLTQyIDAgLTU5IDQwcS0xNyAzOSAxNCA2OWwxNDQgMTQ0bC0zNTUgMzU1bC0zNTUgLTM1NWwxNDQgLTE0NHEzMSAtMzAgMTQgLTY5cS0xNyAtNDAgLTU5IC00MGgtNDQ4cS0yNiAwIC00NSAxOXQtMTkgNDV2NDQ4cTAgNDIgNDAgNTlxMzkgMTcgNjkgLTE0bDE0NCAtMTQ0IGwzNTUgMzU1bC0zNTUgMzU1bC0xNDQgLTE0NHEtMTkgLTE5IC00NSAtMTlxLTEyIDAgLTI0IDVxLTQwIDE3IC00MCA1OXY0NDhxMCAyNiAxOSA0NXQ0NSAxOWg0NDhxNDIgMCA1OSAtNDBxMTcgLTM5IC0xNCAtNjlsLTE0NCAtMTQ0bDM1NSAtMzU1bDM1NSAzNTVsLTE0NCAxNDRxLTMxIDMwIC0xNCA2OXExNyA0MCA1OSA0MGg0NDhxMjYgMCA0NSAtMTl0MTkgLTQ1di00NDhxMCAtNDIgLTM5IC01OXEtMTMgLTUgLTI1IC01cS0yNiAwIC00NSAxOXogIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYzA7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTU5MyA2NDBxLTE2MiAtNSAtMjY1IC0xMjhoLTEzNHEtODIgMCAtMTM4IDQwLjV0LTU2IDExOC41cTAgMzUzIDEyNCAzNTNxNiAwIDQzLjUgLTIxdDk3LjUgLTQyLjV0MTE5IC0yMS41cTY3IDAgMTMzIDIzcS01IC0zNyAtNSAtNjZxMCAtMTM5IDgxIC0yNTZ6TTE2NjQgM3EwIC0xMjAgLTczIC0xODkuNXQtMTk0IC02OS41aC04NzRxLTEyMSAwIC0xOTQgNjkuNXQtNzMgMTg5LjVxMCA1MyAzLjUgMTAzLjV0MTQgMTA5dDI2LjUgMTA4LjUgdDQzIDk3LjV0NjIgODF0ODUuNSA1My41dDExMS41IDIwcTEwIDAgNDMgLTIxLjV0NzMgLTQ4dDEwNyAtNDh0MTM1IC0yMS41dDEzNSAyMS41dDEwNyA0OHQ3MyA0OHQ0MyAyMS41cTYxIDAgMTExLjUgLTIwdDg1LjUgLTUzLjV0NjIgLTgxdDQzIC05Ny41dDI2LjUgLTEwOC41dDE0IC0xMDl0My41IC0xMDMuNXpNNjQwIDEyODBxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1dC0xODEgNzV0LTc1IDE4MXQ3NSAxODF0MTgxIDc1dDE4MSAtNzUgdDc1IC0xODF6TTEzNDQgODk2cTAgLTE1OSAtMTEyLjUgLTI3MS41dC0yNzEuNSAtMTEyLjV0LTI3MS41IDExMi41dC0xMTIuNSAyNzEuNXQxMTIuNSAyNzEuNXQyNzEuNSAxMTIuNXQyNzEuNSAtMTEyLjV0MTEyLjUgLTI3MS41ek0xOTIwIDY3MXEwIC03OCAtNTYgLTExOC41dC0xMzggLTQwLjVoLTEzNHEtMTAzIDEyMyAtMjY1IDEyOHE4MSAxMTcgODEgMjU2cTAgMjkgLTUgNjZxNjYgLTIzIDEzMyAtMjNxNTkgMCAxMTkgMjEuNXQ5Ny41IDQyLjUgdDQzLjUgMjFxMTI0IDAgMTI0IC0zNTN6TTE3OTIgMTI4MHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxdDc1IDE4MXQxODEgNzV0MTgxIC03NXQ3NSAtMTgxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGMxOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNDU2IDMyMHEwIDQwIC0yOCA2OGwtMjA4IDIwOHEtMjggMjggLTY4IDI4cS00MiAwIC03MiAtMzJxMyAtMyAxOSAtMTguNXQyMS41IC0yMS41dDE1IC0xOXQxMyAtMjUuNXQzLjUgLTI3LjVxMCAtNDAgLTI4IC02OHQtNjggLTI4cS0xNSAwIC0yNy41IDMuNXQtMjUuNSAxM3QtMTkgMTV0LTIxLjUgMjEuNXQtMTguNSAxOXEtMzMgLTMxIC0zMyAtNzNxMCAtNDAgMjggLTY4bDIwNiAtMjA3cTI3IC0yNyA2OCAtMjdxNDAgMCA2OCAyNiBsMTQ3IDE0NnEyOCAyOCAyOCA2N3pNNzUzIDEwMjVxMCA0MCAtMjggNjhsLTIwNiAyMDdxLTI4IDI4IC02OCAyOHEtMzkgMCAtNjggLTI3bC0xNDcgLTE0NnEtMjggLTI4IC0yOCAtNjdxMCAtNDAgMjggLTY4bDIwOCAtMjA4cTI3IC0yNyA2OCAtMjdxNDIgMCA3MiAzMXEtMyAzIC0xOSAxOC41dC0yMS41IDIxLjV0LTE1IDE5dC0xMyAyNS41dC0zLjUgMjcuNXEwIDQwIDI4IDY4dDY4IDI4cTE1IDAgMjcuNSAtMy41dDI1LjUgLTEzdDE5IC0xNSB0MjEuNSAtMjEuNXQxOC41IC0xOXEzMyAzMSAzMyA3M3pNMTY0OCAzMjBxMCAtMTIwIC04NSAtMjAzbC0xNDcgLTE0NnEtODMgLTgzIC0yMDMgLTgzcS0xMjEgMCAtMjA0IDg1bC0yMDYgMjA3cS04MyA4MyAtODMgMjAzcTAgMTIzIDg4IDIwOWwtODggODhxLTg2IC04OCAtMjA4IC04OHEtMTIwIDAgLTIwNCA4NGwtMjA4IDIwOHEtODQgODQgLTg0IDIwNHQ4NSAyMDNsMTQ3IDE0NnE4MyA4MyAyMDMgODNxMTIxIDAgMjA0IC04NWwyMDYgLTIwNyBxODMgLTgzIDgzIC0yMDNxMCAtMTIzIC04OCAtMjA5bDg4IC04OHE4NiA4OCAyMDggODhxMTIwIDAgMjA0IC04NGwyMDggLTIwOHE4NCAtODQgODQgLTIwNHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjMjsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMTkyMCAzODRxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNWgtMTA4OHEtMTg1IDAgLTMxNi41IDEzMS41dC0xMzEuNSAzMTYuNXEwIDEzMiA3MSAyNDEuNXQxODcgMTYzLjVxLTIgMjggLTIgNDNxMCAyMTIgMTUwIDM2MnQzNjIgMTUwcTE1OCAwIDI4Ni41IC04OHQxODcuNSAtMjMwcTcwIDYyIDE2NiA2MnExMDYgMCAxODEgLTc1dDc1IC0xODFxMCAtNzUgLTQxIC0xMzhxMTI5IC0zMCAyMTMgLTEzNC41dDg0IC0yMzkuNXogIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYzM7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE1MjcgODhxNTYgLTg5IDIxLjUgLTE1Mi41dC0xNDAuNSAtNjMuNWgtMTE1MnEtMTA2IDAgLTE0MC41IDYzLjV0MjEuNSAxNTIuNWw1MDMgNzkzdjM5OWgtNjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOWg1MTJxMjYgMCA0NSAtMTl0MTkgLTQ1dC0xOSAtNDV0LTQ1IC0xOWgtNjR2LTM5OXpNNzQ4IDgxM2wtMjcyIC00MjloNzEybC0yNzIgNDI5bC0yMCAzMXYzN3YzOTloLTEyOHYtMzk5di0zN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjNDsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNOTYwIDY0MHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5dC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTl6TTEyNjAgNTc2bDUwNyAtMzk4cTI4IC0yMCAyNSAtNTZxLTUgLTM1IC0zNSAtNTFsLTEyOCAtNjRxLTEzIC03IC0yOSAtN3EtMTcgMCAtMzEgOGwtNjkwIDM4N2wtMTEwIC02NnEtOCAtNCAtMTIgLTVxMTQgLTQ5IDEwIC05N3EtNyAtNzcgLTU2IC0xNDcuNXQtMTMyIC0xMjMuNXEtMTMyIC04NCAtMjc3IC04NCBxLTEzNiAwIC0yMjIgNzhxLTkwIDg0IC03OSAyMDdxNyA3NiA1NiAxNDd0MTMxIDEyNHExMzIgODQgMjc4IDg0cTgzIDAgMTUxIC0zMXE5IDEzIDIyIDIybDEyMiA3M2wtMTIyIDczcS0xMyA5IC0yMiAyMnEtNjggLTMxIC0xNTEgLTMxcS0xNDYgMCAtMjc4IDg0cS04MiA1MyAtMTMxIDEyNHQtNTYgMTQ3cS01IDU5IDE1LjUgMTEzdDYzLjUgOTNxODUgNzkgMjIyIDc5cTE0NSAwIDI3NyAtODRxODMgLTUyIDEzMiAtMTIzdDU2IC0xNDggcTQgLTQ4IC0xMCAtOTdxNCAtMSAxMiAtNWwxMTAgLTY2bDY5MCAzODdxMTQgOCAzMSA4cTE2IDAgMjkgLTdsMTI4IC02NHEzMCAtMTYgMzUgLTUxcTMgLTM2IC0yNSAtNTZ6TTU3OSA4MzZxNDYgNDIgMjEgMTA4dC0xMDYgMTE3cS05MiA1OSAtMTkyIDU5cS03NCAwIC0xMTMgLTM2cS00NiAtNDIgLTIxIC0xMDh0MTA2IC0xMTdxOTIgLTU5IDE5MiAtNTlxNzQgMCAxMTMgMzZ6TTQ5NCA5MXE4MSA1MSAxMDYgMTE3dC0yMSAxMDggcS0zOSAzNiAtMTEzIDM2cS0xMDAgMCAtMTkyIC01OXEtODEgLTUxIC0xMDYgLTExN3QyMSAtMTA4cTM5IC0zNiAxMTMgLTM2cTEwMCAwIDE5MiA1OXpNNjcyIDcwNGw5NiAtNTh2MTFxMCAzNiAzMyA1NmwxNCA4bC03OSA0N2wtMjYgLTI2cS0zIC0zIC0xMCAtMTF0LTEyIC0xMnEtMiAtMiAtNCAtMy41dC0zIC0yLjV6TTg5NiA0ODBsOTYgLTMybDczNiA1NzZsLTEyOCA2NGwtNzY4IC00MzF2LTExM2wtMTYwIC05Nmw5IC04cTIgLTIgNyAtNiBxNCAtNCAxMSAtMTJ0MTEgLTEybDI2IC0yNnpNMTYwMCA2NGwxMjggNjRsLTUyMCA0MDhsLTE3NyAtMTM4cS0yIC0zIC0xMyAtN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjNTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTY5NiAxMTUycTQwIDAgNjggLTI4dDI4IC02OHYtMTIxNnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTk2MHEtNDAgMCAtNjggMjh0LTI4IDY4djI4OGgtNTQ0cS00MCAwIC02OCAyOHQtMjggNjh2NjcycTAgNDAgMjAgODh0NDggNzZsNDA4IDQwOHEyOCAyOCA3NiA0OHQ4OCAyMGg0MTZxNDAgMCA2OCAtMjh0MjggLTY4di0zMjhxNjggNDAgMTI4IDQwaDQxNnpNMTE1MiA5MzlsLTI5OSAtMjk5aDI5OXYyOTl6TTUxMiAxMzIzbC0yOTkgLTI5OSBoMjk5djI5OXpNNzA4IDY3NmwzMTYgMzE2djQxNmgtMzg0di00MTZxMCAtNDAgLTI4IC02OHQtNjggLTI4aC00MTZ2LTY0MGg1MTJ2MjU2cTAgNDAgMjAgODh0NDggNzZ6TTE2NjQgLTEyOHYxMTUyaC0zODR2LTQxNnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTQxNnYtNjQwaDg5NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjNjsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMTQwNCAxNTFxMCAtMTE3IC03OSAtMTk2dC0xOTYgLTc5cS0xMzUgMCAtMjM1IDEwMGwtNzc3IDc3NnEtMTEzIDExNSAtMTEzIDI3MXEwIDE1OSAxMTAgMjcwdDI2OSAxMTFxMTU4IDAgMjczIC0xMTNsNjA1IC02MDZxMTAgLTEwIDEwIC0yMnEwIC0xNiAtMzAuNSAtNDYuNXQtNDYuNSAtMzAuNXEtMTMgMCAtMjMgMTBsLTYwNiA2MDdxLTc5IDc3IC0xODEgNzdxLTEwNiAwIC0xNzkgLTc1dC03MyAtMTgxcTAgLTEwNSA3NiAtMTgxIGw3NzYgLTc3N3E2MyAtNjMgMTQ1IC02M3E2NCAwIDEwNiA0MnQ0MiAxMDZxMCA4MiAtNjMgMTQ1bC01ODEgNTgxcS0yNiAyNCAtNjAgMjRxLTI5IDAgLTQ4IC0xOXQtMTkgLTQ4cTAgLTMyIDI1IC01OWw0MTAgLTQxMHExMCAtMTAgMTAgLTIycTAgLTE2IC0zMSAtNDd0LTQ3IC0zMXEtMTIgMCAtMjIgMTBsLTQxMCA0MTBxLTYzIDYxIC02MyAxNDlxMCA4MiA1NyAxMzl0MTM5IDU3cTg4IDAgMTQ5IC02M2w1ODEgLTU4MXExMDAgLTk4IDEwMCAtMjM1IHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjNzsiIGQ9Ik0zODQgMGg3Njh2Mzg0aC03Njh2LTM4NHpNMTI4MCAwaDEyOHY4OTZxMCAxNCAtMTAgMzguNXQtMjAgMzQuNWwtMjgxIDI4MXEtMTAgMTAgLTM0IDIwdC0zOSAxMHYtNDE2cTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtNTc2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC0xMjh2LTEyODBoMTI4djQxNnEwIDQwIDI4IDY4dDY4IDI4aDgzMnE0MCAwIDY4IC0yOHQyOCAtNjh2LTQxNnpNODk2IDkyOHYzMjBxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41IGgtMTkycS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtMzIwcTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTkycTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE1MzYgODk2di05MjhxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xMzQ0cS00MCAwIC02OCAyOHQtMjggNjh2MTM0NHEwIDQwIDI4IDY4dDY4IDI4aDkyOHE0MCAwIDg4IC0yMHQ3NiAtNDhsMjgwIC0yODBxMjggLTI4IDQ4IC03NnQyMCAtODh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYzg7IiBkPSJNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYzk7IiBkPSJNMTUzNiAxOTJ2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE0MDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNDA4cTI2IDAgNDUgLTE5dDE5IC00NXpNMTUzNiA3MDR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE0MDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNDA4cTI2IDAgNDUgLTE5dDE5IC00NXpNMTUzNiAxMjE2di0xMjhxMCAtMjYgLTE5IC00NSB0LTQ1IC0xOWgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGNhOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0zODQgMTI4cTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMzg0IDY0MHEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ6TTE3OTIgMjI0di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMjE2cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjUgdDIyLjUgOS41aDEyMTZxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgMTE1MnEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ6TTE3OTIgNzM2di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMjE2cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTIxNnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE0xNzkyIDEyNDh2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEyMTZxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMjE2cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjYjsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMzgxIC04NHEwIC04MCAtNTQuNSAtMTI2dC0xMzUuNSAtNDZxLTEwNiAwIC0xNzIgNjZsNTcgODhxNDkgLTQ1IDEwNiAtNDVxMjkgMCA1MC41IDE0LjV0MjEuNSA0Mi41cTAgNjQgLTEwNSA1NmwtMjYgNTZxOCAxMCAzMi41IDQzLjV0NDIuNSA1NHQzNyAzOC41djFxLTE2IDAgLTQ4LjUgLTF0LTQ4LjUgLTF2LTUzaC0xMDZ2MTUyaDMzM3YtODhsLTk1IC0xMTVxNTEgLTEyIDgxIC00OXQzMCAtODh6TTM4MyA1NDN2LTE1OWgtMzYyIHEtNiAzNiAtNiA1NHEwIDUxIDIzLjUgOTN0NTYuNSA2OHQ2NiA0Ny41dDU2LjUgNDMuNXQyMy41IDQ1cTAgMjUgLTE0LjUgMzguNXQtMzkuNSAxMy41cS00NiAwIC04MSAtNThsLTg1IDU5cTI0IDUxIDcxLjUgNzkuNXQxMDUuNSAyOC41cTczIDAgMTIzIC00MS41dDUwIC0xMTIuNXEwIC01MCAtMzQgLTkxLjV0LTc1IC02NC41dC03NS41IC01MC41dC0zNS41IC01Mi41aDEyN3Y2MGgxMDV6TTE3OTIgMjI0di0xOTJxMCAtMTMgLTkuNSAtMjIuNSB0LTIyLjUgLTkuNWgtMTIxNnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDE0IDkgMjN0MjMgOWgxMjE2cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDExMjN2LTk5aC0zMzV2OTloMTA3cTAgNDEgMC41IDEyMnQwLjUgMTIxdjEyaC0ycS04IC0xNyAtNTAgLTU0bC03MSA3NmwxMzYgMTI3aDEwNnYtNDA0aDEwOHpNMTc5MiA3MzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEyMTZxLTEzIDAgLTIyLjUgOS41IHQtOS41IDIyLjV2MTkycTAgMTQgOSAyM3QyMyA5aDEyMTZxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDEyNDh2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEyMTZxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMjE2cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjYzsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc2MCA2NDBxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTcyOHEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWgxNzI4ek00ODMgNzA0cS0yOCAzNSAtNTEgODBxLTQ4IDk3IC00OCAxODhxMCAxODEgMTM0IDMwOXExMzMgMTI3IDM5MyAxMjdxNTAgMCAxNjcgLTE5cTY2IC0xMiAxNzcgLTQ4cTEwIC0zOCAyMSAtMTE4cTE0IC0xMjMgMTQgLTE4M3EwIC0xOCAtNSAtNDVsLTEyIC0zbC04NCA2IGwtMTQgMnEtNTAgMTQ5IC0xMDMgMjA1cS04OCA5MSAtMjEwIDkxcS0xMTQgMCAtMTgyIC01OXEtNjcgLTU4IC02NyAtMTQ2cTAgLTczIDY2IC0xNDB0Mjc5IC0xMjlxNjkgLTIwIDE3MyAtNjZxNTggLTI4IDk1IC01MmgtNzQzek05OTAgNDQ4aDQxMXE3IC0zOSA3IC05MnEwIC0xMTEgLTQxIC0yMTJxLTIzIC01NSAtNzEgLTEwNHEtMzcgLTM1IC0xMDkgLTgxcS04MCAtNDggLTE1MyAtNjZxLTgwIC0yMSAtMjAzIC0yMXEtMTE0IDAgLTE5NSAyMyBsLTE0MCA0MHEtNTcgMTYgLTcyIDI4cS04IDggLTggMjJ2MTNxMCAxMDggLTIgMTU2cS0xIDMwIDAgNjhsMiAzN3Y0NGwxMDIgMnExNSAtMzQgMzAgLTcxdDIyLjUgLTU2dDEyLjUgLTI3cTM1IC01NyA4MCAtOTRxNDMgLTM2IDEwNSAtNTdxNTkgLTIyIDEzMiAtMjJxNjQgMCAxMzkgMjdxNzcgMjYgMTIyIDg2cTQ3IDYxIDQ3IDEyOXEwIDg0IC04MSAxNTdxLTM0IDI5IC0xMzcgNzF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwY2Q7IiBkPSJNNDggMTMxM3EtMzcgMiAtNDUgNGwtMyA4OHExMyAxIDQwIDFxNjAgMCAxMTIgLTRxMTMyIC03IDE2NiAtN3E4NiAwIDE2OCAzcTExNiA0IDE0NiA1cTU2IDAgODYgMmwtMSAtMTRsMiAtNjR2LTlxLTYwIC05IC0xMjQgLTlxLTYwIDAgLTc5IC0yNXEtMTMgLTE0IC0xMyAtMTMycTAgLTEzIDAuNSAtMzIuNXQwLjUgLTI1LjVsMSAtMjI5bDE0IC0yODBxNiAtMTI0IDUxIC0yMDJxMzUgLTU5IDk2IC05MnE4OCAtNDcgMTc3IC00NyBxMTA0IDAgMTkxIDI4cTU2IDE4IDk5IDUxcTQ4IDM2IDY1IDY0cTM2IDU2IDUzIDExNHEyMSA3MyAyMSAyMjlxMCA3OSAtMy41IDEyOHQtMTEgMTIyLjV0LTEzLjUgMTU5LjVsLTQgNTlxLTUgNjcgLTI0IDg4cS0zNCAzNSAtNzcgMzRsLTEwMCAtMmwtMTQgM2wyIDg2aDg0bDIwNSAtMTBxNzYgLTMgMTk2IDEwbDE4IC0ycTYgLTM4IDYgLTUxcTAgLTcgLTQgLTMxcS00NSAtMTIgLTg0IC0xM3EtNzMgLTExIC03OSAtMTdxLTE1IC0xNSAtMTUgLTQxIHEwIC03IDEuNSAtMjd0MS41IC0zMXE4IC0xOSAyMiAtMzk2cTYgLTE5NSAtMTUgLTMwNHEtMTUgLTc2IC00MSAtMTIycS0zOCAtNjUgLTExMiAtMTIzcS03NSAtNTcgLTE4MiAtODlxLTEwOSAtMzMgLTI1NSAtMzNxLTE2NyAwIC0yODQgNDZxLTExOSA0NyAtMTc5IDEyMnEtNjEgNzYgLTgzIDE5NXEtMTYgODAgLTE2IDIzN3YzMzNxMCAxODggLTE3IDIxM3EtMjUgMzYgLTE0NyAzOXpNMTUzNiAtOTZ2NjRxMCAxNCAtOSAyM3QtMjMgOWgtMTQ3MiBxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloMTQ3MnExNCAwIDIzIDl0OSAyM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjZTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNTEyIDE2MHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTUxMiA1NDR2MTkycTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek0xMDI0IDE2MHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjMgdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek01MTIgOTI4djE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzdDIzIC05aDMyMHExNCAwIDIzIDl0OSAyM3pNMTAyNCA1NDR2MTkycTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek0xNTM2IDE2MHYxOTIgcTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek0xMDI0IDkyOHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTE1MzYgNTQ0djE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkyIHEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTE1MzYgOTI4djE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzdDIzIC05aDMyMHExNCAwIDIzIDl0OSAyM3pNMTY2NCAxMjQ4di0xMDg4cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xMzQ0cS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2gxMzQ0cTY2IDAgMTEzIC00N3Q0NyAtMTEzIHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBkMDsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTE5MCA5NTVsMjkzIDI5M2wtMTA3IDEwN2wtMjkzIC0yOTN6TTE2MzcgMTI0OHEwIC0yNyAtMTggLTQ1bC0xMjg2IC0xMjg2cS0xOCAtMTggLTQ1IC0xOHQtNDUgMThsLTE5OCAxOThxLTE4IDE4IC0xOCA0NXQxOCA0NWwxMjg2IDEyODZxMTggMTggNDUgMTh0NDUgLTE4bDE5OCAtMTk4cTE4IC0xOCAxOCAtNDV6TTI4NiAxNDM4bDk4IC0zMGwtOTggLTMwbC0zMCAtOThsLTMwIDk4bC05OCAzMGw5OCAzMGwzMCA5OHpNNjM2IDEyNzYgbDE5NiAtNjBsLTE5NiAtNjBsLTYwIC0xOTZsLTYwIDE5NmwtMTk2IDYwbDE5NiA2MGw2MCAxOTZ6TTE1NjYgNzk4bDk4IC0zMGwtOTggLTMwbC0zMCAtOThsLTMwIDk4bC05OCAzMGw5OCAzMGwzMCA5OHpNOTI2IDE0MzhsOTggLTMwbC05OCAtMzBsLTMwIC05OGwtMzAgOThsLTk4IDMwbDk4IDMwbDMwIDk4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGQxOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik02NDAgMTI4cTAgNTIgLTM4IDkwdC05MCAzOHQtOTAgLTM4dC0zOCAtOTB0MzggLTkwdDkwIC0zOHQ5MCAzOHQzOCA5MHpNMjU2IDY0MGgzODR2MjU2aC0xNThxLTEzIDAgLTIyIC05bC0xOTUgLTE5NXEtOSAtOSAtOSAtMjJ2LTMwek0xNTM2IDEyOHEwIDUyIC0zOCA5MHQtOTAgMzh0LTkwIC0zOHQtMzggLTkwdDM4IC05MHQ5MCAtMzh0OTAgMzh0MzggOTB6TTE3OTIgMTIxNnYtMTAyNHEwIC0xNSAtNCAtMjYuNXQtMTMuNSAtMTguNSB0LTE2LjUgLTExLjV0LTIzLjUgLTZ0LTIyLjUgLTJ0LTI1LjUgMHQtMjIuNSAwLjVxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1dC0xODEgNzV0LTc1IDE4MWgtMzg0cTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODFoLTY0cS0zIDAgLTIyLjUgLTAuNXQtMjUuNSAwdC0yMi41IDJ0LTIzLjUgNnQtMTYuNSAxMS41dC0xMy41IDE4LjV0LTQgMjYuNXEwIDI2IDE5IDQ1dDQ1IDE5djMyMHEwIDggLTAuNSAzNXQwIDM4IHQyLjUgMzQuNXQ2LjUgMzd0MTQgMzAuNXQyMi41IDMwbDE5OCAxOThxMTkgMTkgNTAuNSAzMnQ1OC41IDEzaDE2MHYxOTJxMCAyNiAxOSA0NXQ0NSAxOWgxMDI0cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBkMjsiIGQ9Ik0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3EtMTExIDAgLTIxOCAzMnE1OSA5MyA3OCAxNjRxOSAzNCA1NCAyMTFxMjAgLTM5IDczIC02Ny41dDExNCAtMjguNXExMjEgMCAyMTYgNjguNXQxNDcgMTg4LjV0NTIgMjcwcTAgMTE0IC01OS41IDIxNHQtMTcyLjUgMTYzdC0yNTUgNjNxLTEwNSAwIC0xOTYgLTI5dC0xNTQuNSAtNzd0LTEwOSAtMTEwLjV0LTY3IC0xMjkuNXQtMjEuNSAtMTM0IHEwIC0xMDQgNDAgLTE4M3QxMTcgLTExMXEzMCAtMTIgMzggMjBxMiA3IDggMzF0OCAzMHE2IDIzIC0xMSA0M3EtNTEgNjEgLTUxIDE1MXEwIDE1MSAxMDQuNSAyNTkuNXQyNzMuNSAxMDguNXExNTEgMCAyMzUuNSAtODJ0ODQuNSAtMjEzcTAgLTE3MCAtNjguNSAtMjg5dC0xNzUuNSAtMTE5cS02MSAwIC05OCA0My41dC0yMyAxMDQuNXE4IDM1IDI2LjUgOTMuNXQzMCAxMDN0MTEuNSA3NS41cTAgNTAgLTI3IDgzdC03NyAzMyBxLTYyIDAgLTEwNSAtNTd0LTQzIC0xNDJxMCAtNzMgMjUgLTEyMmwtOTkgLTQxOHEtMTcgLTcwIC0xMyAtMTc3cS0yMDYgOTEgLTMzMyAyODF0LTEyNyA0MjNxMCAyMDkgMTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGQzOyIgZD0iTTEyNDggMTQwOHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC03MjVxODUgMTIyIDEwOCAyMTBxOSAzNCA1MyAyMDlxMjEgLTM5IDczLjUgLTY3dDExMi41IC0yOHExODEgMCAyOTUuNSAxNDcuNXQxMTQuNSAzNzMuNXEwIDg0IC0zNSAxNjIuNXQtOTYuNSAxMzl0LTE1Mi41IDk3dC0xOTcgMzYuNXEtMTA0IDAgLTE5NC41IC0yOC41dC0xNTMgLTc2LjUgdC0xMDcuNSAtMTA5LjV0LTY2LjUgLTEyOHQtMjEuNSAtMTMyLjVxMCAtMTAyIDM5LjUgLTE4MHQxMTYuNSAtMTEwcTEzIC01IDIzLjUgMHQxNC41IDE5cTEwIDQ0IDE1IDYxcTYgMjMgLTExIDQycS01MCA2MiAtNTAgMTUwcTAgMTUwIDEwMy41IDI1Ni41dDI3MC41IDEwNi41cTE0OSAwIDIzMi41IC04MXQ4My41IC0yMTBxMCAtMTY4IC02Ny41IC0yODZ0LTE3My41IC0xMThxLTYwIDAgLTk3IDQzLjV0LTIzIDEwMy41cTggMzQgMjYuNSA5Mi41IHQyOS41IDEwMnQxMSA3NC41cTAgNDkgLTI2LjUgODEuNXQtNzUuNSAzMi41cS02MSAwIC0xMDMuNSAtNTYuNXQtNDIuNSAtMTM5LjVxMCAtNzIgMjQgLTEyMWwtOTggLTQxNHEtMjQgLTEwMCAtNyAtMjU0aC0xODNxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGQ0OyIgZD0iTTY3OCAtNTdxMCAtMzggLTEwIC03MWgtMzgwcS05NSAwIC0xNzEuNSA1Ni41dC0xMDMuNSAxNDcuNXEyNCA0NSA2OSA3Ny41dDEwMCA0OS41dDEwNyAyNHQxMDcgN3EzMiAwIDQ5IC0ycTYgLTQgMzAuNSAtMjF0MzMgLTIzdDMxIC0yM3QzMiAtMjUuNXQyNy41IC0yNS41dDI2LjUgLTI5LjV0MjEgLTMwLjV0MTcuNSAtMzQuNXQ5LjUgLTM2dDQuNSAtNDAuNXpNMzg1IDI5NHEtMjM0IC03IC0zODUgLTg1djQzM3ExMDMgLTExOCAyNzMgLTExOCBxMzIgMCA3MCA1cS0yMSAtNjEgLTIxIC04NnEwIC02NyA2MyAtMTQ5ek01NTggODA1cTAgLTEwMCAtNDMuNSAtMTYwLjV0LTE0MC41IC02MC41cS01MSAwIC05NyAyNnQtNzggNjcuNXQtNTYgOTMuNXQtMzUuNSAxMDR0LTExLjUgOTlxMCA5NiA1MS41IDE2NXQxNDQuNSA2OXE2NiAwIDExOSAtNDF0ODQgLTEwNHQ0NyAtMTMwdDE2IC0xMjh6TTE1MzYgODk2di03MzZxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTQ2OCBxMzkgNzMgMzkgMTU3cTAgNjYgLTIyIDEyMi41dC01NS41IDkzdC03MiA3MXQtNzIgNTkuNXQtNTUuNSA1NC41dC0yMiA1OS41cTAgMzYgMjMgNjh0NTYgNjEuNXQ2NS41IDY0LjV0NTUuNSA5M3QyMyAxMzF0LTI2LjUgMTQ1LjV0LTc1LjUgMTE4LjVxLTYgNiAtMTQgMTF0LTEyLjUgNy41dC0xMCA5LjV0LTEwLjUgMTdoMTM1bDEzNSA2NGgtNDM3cS0xMzggMCAtMjQ0LjUgLTM4LjV0LTE4Mi41IC0xMzMuNXEwIDEyNiA4MSAyMTN0MjA3IDg3aDk2MCBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV2LTk2aC0yNTZ2MjU2aC0xMjh2LTI1NmgtMjU2di0xMjhoMjU2di0yNTZoMTI4djI1NmgyNTZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZDU7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTg3NiA3MXEwIDIxIC00LjUgNDAuNXQtOS41IDM2dC0xNy41IDM0LjV0LTIxIDMwLjV0LTI2LjUgMjkuNXQtMjcuNSAyNS41dC0zMiAyNS41dC0zMSAyM3QtMzMgMjN0LTMwLjUgMjFxLTE3IDIgLTUwIDJxLTU0IDAgLTEwNiAtN3QtMTA4IC0yNXQtOTggLTQ2dC02OSAtNzV0LTI3IC0xMDdxMCAtNjggMzUuNSAtMTIxLjV0OTMgLTg0dDEyMC41IC00NS41dDEyNyAtMTVxNTkgMCAxMTIuNSAxMi41dDEwMC41IDM5dDc0LjUgNzMuNSB0MjcuNSAxMTB6TTc1NiA5MzNxMCA2MCAtMTYuNSAxMjcuNXQtNDcgMTMwLjV0LTg0IDEwNHQtMTE5LjUgNDFxLTkzIDAgLTE0NCAtNjl0LTUxIC0xNjVxMCAtNDcgMTEuNSAtOTl0MzUuNSAtMTA0dDU2IC05My41dDc4IC02Ny41dDk3IC0yNnE5NyAwIDE0MC41IDYwLjV0NDMuNSAxNjAuNXpNNjI1IDE0MDhoNDM3bC0xMzUgLTc5aC0xMzVxNzEgLTQ1IDExMCAtMTI2dDM5IC0xNjlxMCAtNzQgLTIzIC0xMzEuNXQtNTYgLTkyLjV0LTY2IC02NC41IHQtNTYgLTYxdC0yMyAtNjcuNXEwIC0yNiAxNi41IC01MXQ0MyAtNDh0NTguNSAtNDh0NjQgLTU1LjV0NTguNSAtNjZ0NDMgLTg1dDE2LjUgLTEwNi41cTAgLTE2MCAtMTQwIC0yODJxLTE1MiAtMTMxIC00MjAgLTEzMXEtNTkgMCAtMTE5LjUgMTB0LTEyMiAzMy41dC0xMDguNSA1OHQtNzcgODl0LTMwIDEyMS41cTAgNjEgMzcgMTM1cTMyIDY0IDk2IDExMC41dDE0NSA3MXQxNTUgMzZ0MTUwIDEzLjVxLTY0IDgzIC02NCAxNDlxMCAxMiAyIDIzLjUgdDUgMTkuNXQ4IDIxLjV0NyAyMS41cS00MCAtNSAtNzAgLTVxLTE0OSAwIC0yNTUuNSA5OHQtMTA2LjUgMjQ2cTAgMTQwIDk1IDI1MC41dDIzNCAxNDEuNXE5NCAyMCAxODcgMjB6TTE2NjQgMTE1MnYtMTI4aC0yNTZ2LTI1NmgtMTI4djI1NmgtMjU2djEyOGgyNTZ2MjU2aDEyOHYtMjU2aDI1NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBkNjsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNNzY4IDM4NGgzODR2OTZoLTEyOHY0NDhoLTExNGwtMTQ4IC0xMzdsNzcgLTgwcTQyIDM3IDU1IDU3aDJ2LTI4OGgtMTI4di05NnpNMTI4MCA2NDBxMCAtNzAgLTIxIC0xNDJ0LTU5LjUgLTEzNHQtMTAxLjUgLTEwMXQtMTM4IC0zOXQtMTM4IDM5dC0xMDEuNSAxMDF0LTU5LjUgMTM0dC0yMSAxNDJ0MjEgMTQydDU5LjUgMTM0dDEwMS41IDEwMXQxMzggMzl0MTM4IC0zOXQxMDEuNSAtMTAxdDU5LjUgLTEzNHQyMSAtMTQyek0xNzkyIDM4NCB2NTEycS0xMDYgMCAtMTgxIDc1dC03NSAxODFoLTExNTJxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1di01MTJxMTA2IDAgMTgxIC03NXQ3NSAtMTgxaDExNTJxMCAxMDYgNzUgMTgxdDE4MSA3NXpNMTkyMCAxMjE2di0xMTUycTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTc5MnEtMjYgMCAtNDUgMTl0LTE5IDQ1djExNTJxMCAyNiAxOSA0NXQ0NSAxOWgxNzkycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBkNzsiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNMTAyNCA4MzJxMCAtMjYgLTE5IC00NWwtNDQ4IC00NDhxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtNDQ4IDQ0OHEtMTkgMTkgLTE5IDQ1dDE5IDQ1dDQ1IDE5aDg5NnEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZDg7IiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTEwMjQgMzIwcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtODk2cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDVsNDQ4IDQ0OHExOSAxOSA0NSAxOXQ0NSAtMTlsNDQ4IC00NDhxMTkgLTE5IDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBkOTsiIGhvcml6LWFkdi14PSI2NDAiIGQ9Ik02NDAgMTA4OHYtODk2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTlsLTQ0OCA0NDhxLTE5IDE5IC0xOSA0NXQxOSA0NWw0NDggNDQ4cTE5IDE5IDQ1IDE5dDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZGE7IiBob3Jpei1hZHYteD0iNjQwIiBkPSJNNTc2IDY0MHEwIC0yNiAtMTkgLTQ1bC00NDggLTQ0OHEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5dC0xOSA0NXY4OTZxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTlsNDQ4IC00NDhxMTkgLTE5IDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBkYjsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTYwIDBoNjA4djExNTJoLTY0MHYtMTEyMHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41ek0xNTM2IDMydjExMjBoLTY0MHYtMTE1Mmg2MDhxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTY2NCAxMjQ4di0xMjE2cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xMzQ0cS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMjE2cTAgNjYgNDcgMTEzdDExMyA0N2gxMzQ0cTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGRjOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik0xMDI0IDQ0OHEwIC0yNiAtMTkgLTQ1bC00NDggLTQ0OHEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC00NDggNDQ4cS0xOSAxOSAtMTkgNDV0MTkgNDV0NDUgMTloODk2cTI2IDAgNDUgLTE5dDE5IC00NXpNMTAyNCA4MzJxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC04OTZxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NWw0NDggNDQ4cTE5IDE5IDQ1IDE5dDQ1IC0xOWw0NDggLTQ0OHExOSAtMTkgMTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGRkOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik0xMDI0IDQ0OHEwIC0yNiAtMTkgLTQ1bC00NDggLTQ0OHEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC00NDggNDQ4cS0xOSAxOSAtMTkgNDV0MTkgNDV0NDUgMTloODk2cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBkZTsiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNMTAyNCA4MzJxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC04OTZxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NWw0NDggNDQ4cTE5IDE5IDQ1IDE5dDQ1IC0xOWw0NDggLTQ0OHExOSAtMTkgMTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGUwOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzkyIDgyNnYtNzk0cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNDcycS02NiAwIC0xMTMgNDd0LTQ3IDExM3Y3OTRxNDQgLTQ5IDEwMSAtODdxMzYyIC0yNDYgNDk3IC0zNDVxNTcgLTQyIDkyLjUgLTY1LjV0OTQuNSAtNDh0MTEwIC0yNC41aDFoMXE1MSAwIDExMCAyNC41dDk0LjUgNDh0OTIuNSA2NS41cTE3MCAxMjMgNDk4IDM0NXE1NyAzOSAxMDAgODd6TTE3OTIgMTEyMHEwIC03OSAtNDkgLTE1MXQtMTIyIC0xMjMgcS0zNzYgLTI2MSAtNDY4IC0zMjVxLTEwIC03IC00Mi41IC0zMC41dC01NCAtMzh0LTUyIC0zMi41dC01Ny41IC0yN3QtNTAgLTloLTFoLTFxLTIzIDAgLTUwIDl0LTU3LjUgMjd0LTUyIDMyLjV0LTU0IDM4dC00Mi41IDMwLjVxLTkxIDY0IC0yNjIgMTgyLjV0LTIwNSAxNDIuNXEtNjIgNDIgLTExNyAxMTUuNXQtNTUgMTM2LjVxMCA3OCA0MS41IDEzMHQxMTguNSA1MmgxNDcycTY1IDAgMTEyLjUgLTQ3dDQ3LjUgLTExM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBlMTsiIGhvcml6LWFkdi14PSIxMzc5IiBkPSJNMTAxNCA5NjFxMTcxIDAgMjY4IC04NS41dDk3IC0yNTQuNXYtNTg2cTAgLTE0IC0xMC41IC0yNC41dC0yNC41IC0xMC41aC0yNTJxLTE0IDAgLTI0LjUgMTAuNXQtMTAuNSAyNC41djUyOXEwIDcxIC0yNi41IDEwNHQtOTUuNSAzM3EtODggMCAtMTIzLjUgLTUxLjV0LTM1LjUgLTE0My41di00NzFxMCAtMTQgLTEwLjUgLTI0LjV0LTI1LjUgLTEwLjVoLTI0NnEtMTQgMCAtMjQuNSAxMC41dC0xMC41IDI0LjV2ODY4cTAgMTQgMTAuNSAyNC41IHQyNC41IDEwLjVoMjM5cTEzIDAgMjEgLTV0MTAuNSAtMTguNXQzIC0xOHQwLjUgLTIyLjVxOTMgODcgMjQ2IDg3ek0yOTAgOTM4cTE0IDAgMjQuNSAtMTAuNXQxMC41IC0yNC41di04NjhxMCAtMTQgLTEwLjUgLTI0LjV0LTI0LjUgLTEwLjVoLTI0NnEtMTQgMCAtMjQuNSAxMC41dC0xMC41IDI0LjV2ODY4cTAgMTQgMTAuNSAyNC41dDI0LjUgMTAuNWgyNDZ6TTE2NyAxMzcxcTY5IDAgMTE4IC00OXQ0OSAtMTE4dC00OSAtMTE4dC0xMTggLTQ5IHQtMTE4IDQ5dC00OSAxMTh0NDkgMTE4dDExOCA0OXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBlMjsiIGQ9Ik0xNTM2IDY0MHEwIC0xNTYgLTYxIC0yOTh0LTE2NCAtMjQ1dC0yNDUgLTE2NHQtMjk4IC02MXEtMTc5IDAgLTMzNi41IDc2dC0yNjYgMjEzdC0xNDcuNSAzMTJxLTMgMTQgNyAyN3E5IDEyIDI1IDEyaDE5OXEyMyAwIDMwIC0yM3E1MCAtMTYyIDE4NSAtMjYxLjV0MzA0IC05OS41cTEwNCAwIDE5OC41IDQwLjV0MTYzLjUgMTA5LjV0MTA5LjUgMTYzLjV0NDAuNSAxOTguNXQtNDAuNSAxOTguNXQtMTA5LjUgMTYzLjV0LTE2My41IDEwOS41IHQtMTk4LjUgNDAuNXEtOTggMCAtMTg4IC0zNS41dC0xNjAgLTEwMS41bDEzNyAtMTM4cTMxIC0zMCAxNCAtNjlxLTE3IC00MCAtNTkgLTQwaC00NDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXY0NDhxMCA0MiA0MCA1OXEzOSAxNyA2OSAtMTRsMTMwIC0xMjlxMTA3IDEwMSAyNDQuNSAxNTYuNXQyODQuNSA1NS41cTE1NiAwIDI5OCAtNjF0MjQ1IC0xNjR0MTY0IC0yNDV0NjEgLTI5OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBlMzsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc3MSAwcTAgLTUzIC0zNyAtOTBsLTEwNyAtMTA4cS0zOSAtMzcgLTkxIC0zN3EtNTMgMCAtOTAgMzdsLTM2MyAzNjRxLTM4IDM2IC0zOCA5MHEwIDUzIDQzIDk2bC0yNTYgMjU2bC0xMjYgLTEyNnEtMTQgLTE0IC0zNCAtMTR0LTM0IDE0cTIgLTIgMTIuNSAtMTJ0MTIuNSAtMTN0MTAgLTExLjV0MTAgLTEzLjV0NiAtMTMuNXQ1LjUgLTE2LjV0MS41IC0xOHEwIC0zOCAtMjggLTY4cS0zIC0zIC0xNi41IC0xOHQtMTkgLTIwLjUgdC0xOC41IC0xNi41dC0yMiAtMTUuNXQtMjIgLTl0LTI2IC00LjVxLTQwIDAgLTY4IDI4bC00MDggNDA4cS0yOCAyOCAtMjggNjhxMCAxMyA0LjUgMjZ0OSAyMnQxNS41IDIydDE2LjUgMTguNXQyMC41IDE5dDE4IDE2LjVxMzAgMjggNjggMjhxMTAgMCAxOCAtMS41dDE2LjUgLTUuNXQxMy41IC02dDEzLjUgLTEwdDExLjUgLTEwdDEzIC0xMi41dDEyIC0xMi41cS0xNCAxNCAtMTQgMzR0MTQgMzRsMzQ4IDM0OHExNCAxNCAzNCAxNHQzNCAtMTQgcS0yIDIgLTEyLjUgMTJ0LTEyLjUgMTN0LTEwIDExLjV0LTEwIDEzLjV0LTYgMTMuNXQtNS41IDE2LjV0LTEuNSAxOHEwIDM4IDI4IDY4cTMgMyAxNi41IDE4dDE5IDIwLjV0MTguNSAxNi41dDIyIDE1LjV0MjIgOXQyNiA0LjVxNDAgMCA2OCAtMjhsNDA4IC00MDhxMjggLTI4IDI4IC02OHEwIC0xMyAtNC41IC0yNnQtOSAtMjJ0LTE1LjUgLTIydC0xNi41IC0xOC41dC0yMC41IC0xOXQtMTggLTE2LjVxLTMwIC0yOCAtNjggLTI4IHEtMTAgMCAtMTggMS41dC0xNi41IDUuNXQtMTMuNSA2dC0xMy41IDEwdC0xMS41IDEwdC0xMyAxMi41dC0xMiAxMi41cTE0IC0xNCAxNCAtMzR0LTE0IC0zNGwtMTI2IC0xMjZsMjU2IC0yNTZxNDMgNDMgOTYgNDNxNTIgMCA5MSAtMzdsMzYzIC0zNjNxMzcgLTM5IDM3IC05MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBlNDsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMzg0IDM4NHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNNTc2IDgzMnEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTAwNCAzNTFsMTAxIDM4MnE2IDI2IC03LjUgNDguNXQtMzguNSAyOS41IHQtNDggLTYuNXQtMzAgLTM5LjVsLTEwMSAtMzgycS02MCAtNSAtMTA3IC00My41dC02MyAtOTguNXEtMjAgLTc3IDIwIC0xNDZ0MTE3IC04OXQxNDYgMjB0ODkgMTE3cTE2IDYwIC02IDExN3QtNzIgOTF6TTE2NjQgMzg0cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xMDI0IDEwMjRxMCA1MyAtMzcuNSA5MC41IHQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNDcyIDgzMnEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTc5MiAzODRxMCAtMjYxIC0xNDEgLTQ4M3EtMTkgLTI5IC01NCAtMjloLTE0MDJxLTM1IDAgLTU0IDI5IHEtMTQxIDIyMSAtMTQxIDQ4M3EwIDE4MiA3MSAzNDh0MTkxIDI4NnQyODYgMTkxdDM0OCA3MXQzNDggLTcxdDI4NiAtMTkxdDE5MSAtMjg2dDcxIC0zNDh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZTU7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTg5NiAxMTUycS0yMDQgMCAtMzgxLjUgLTY5LjV0LTI4MiAtMTg3LjV0LTEwNC41IC0yNTVxMCAtMTEyIDcxLjUgLTIxMy41dDIwMS41IC0xNzUuNWw4NyAtNTBsLTI3IC05NnEtMjQgLTkxIC03MCAtMTcycTE1MiA2MyAyNzUgMTcxbDQzIDM4bDU3IC02cTY5IC04IDEzMCAtOHEyMDQgMCAzODEuNSA2OS41dDI4MiAxODcuNXQxMDQuNSAyNTV0LTEwNC41IDI1NXQtMjgyIDE4Ny41dC0zODEuNSA2OS41ek0xNzkyIDY0MCBxMCAtMTc0IC0xMjAgLTMyMS41dC0zMjYgLTIzM3QtNDUwIC04NS41cS03MCAwIC0xNDUgOHEtMTk4IC0xNzUgLTQ2MCAtMjQycS00OSAtMTQgLTExNCAtMjJoLTVxLTE1IDAgLTI3IDEwLjV0LTE2IDI3LjV2MXEtMyA0IC0wLjUgMTJ0MiAxMHQ0LjUgOS41bDYgOXQ3IDguNXQ4IDlxNyA4IDMxIDM0LjV0MzQuNSAzOHQzMSAzOS41dDMyLjUgNTF0MjcgNTl0MjYgNzZxLTE1NyA4OSAtMjQ3LjUgMjIwdC05MC41IDI4MXEwIDE3NCAxMjAgMzIxLjUgdDMyNiAyMzN0NDUwIDg1LjV0NDUwIC04NS41dDMyNiAtMjMzdDEyMCAtMzIxLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZTY7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTcwNCAxMTUycS0xNTMgMCAtMjg2IC01MnQtMjExLjUgLTE0MXQtNzguNSAtMTkxcTAgLTgyIDUzIC0xNTh0MTQ5IC0xMzJsOTcgLTU2bC0zNSAtODRxMzQgMjAgNjIgMzlsNDQgMzFsNTMgLTEwcTc4IC0xNCAxNTMgLTE0cTE1MyAwIDI4NiA1MnQyMTEuNSAxNDF0NzguNSAxOTF0LTc4LjUgMTkxdC0yMTEuNSAxNDF0LTI4NiA1MnpNNzA0IDEyODBxMTkxIDAgMzUzLjUgLTY4LjV0MjU2LjUgLTE4Ni41dDk0IC0yNTd0LTk0IC0yNTcgdC0yNTYuNSAtMTg2LjV0LTM1My41IC02OC41cS04NiAwIC0xNzYgMTZxLTEyNCAtODggLTI3OCAtMTI4cS0zNiAtOSAtODYgLTE2aC0zcS0xMSAwIC0yMC41IDh0LTExLjUgMjFxLTEgMyAtMSA2LjV0MC41IDYuNXQyIDZsMi41IDV0My41IDUuNXQ0IDV0NC41IDV0NCA0LjVxNSA2IDIzIDI1dDI2IDI5LjV0MjIuNSAyOXQyNSAzOC41dDIwLjUgNDRxLTEyNCA3MiAtMTk1IDE3N3QtNzEgMjI0cTAgMTM5IDk0IDI1N3QyNTYuNSAxODYuNSB0MzUzLjUgNjguNXpNMTUyNiAxMTFxMTAgLTI0IDIwLjUgLTQ0dDI1IC0zOC41dDIyLjUgLTI5dDI2IC0yOS41dDIzIC0yNXExIC0xIDQgLTQuNXQ0LjUgLTV0NCAtNXQzLjUgLTUuNWwyLjUgLTV0MiAtNnQwLjUgLTYuNXQtMSAtNi41cS0zIC0xNCAtMTMgLTIydC0yMiAtN3EtNTAgNyAtODYgMTZxLTE1NCA0MCAtMjc4IDEyOHEtOTAgLTE2IC0xNzYgLTE2cS0yNzEgMCAtNDcyIDEzMnE1OCAtNCA4OCAtNHExNjEgMCAzMDkgNDV0MjY0IDEyOSBxMTI1IDkyIDE5MiAyMTJ0NjcgMjU0cTAgNzcgLTIzIDE1MnExMjkgLTcxIDIwNCAtMTc4dDc1IC0yMzBxMCAtMTIwIC03MSAtMjI0LjV0LTE5NSAtMTc2LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZTc7IiBob3Jpei1hZHYteD0iODk2IiBkPSJNODg1IDk3MHExOCAtMjAgNyAtNDRsLTU0MCAtMTE1N3EtMTMgLTI1IC00MiAtMjVxLTQgMCAtMTQgMnEtMTcgNSAtMjUuNSAxOXQtNC41IDMwbDE5NyA4MDhsLTQwNiAtMTAxcS00IC0xIC0xMiAtMXEtMTggMCAtMzEgMTFxLTE4IDE1IC0xMyAzOWwyMDEgODI1cTQgMTQgMTYgMjN0MjggOWgzMjhxMTkgMCAzMiAtMTIuNXQxMyAtMjkuNXEwIC04IC01IC0xOGwtMTcxIC00NjNsMzk2IDk4cTggMiAxMiAycTE5IDAgMzQgLTE1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGU4OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzkyIDI4OHYtMzIwcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwcS00MCAwIC02OCAyOHQtMjggNjh2MzIwcTAgNDAgMjggNjh0NjggMjhoOTZ2MTkyaC01MTJ2LTE5Mmg5NnE0MCAwIDY4IC0yOHQyOCAtNjh2LTMyMHEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djMyMHEwIDQwIDI4IDY4dDY4IDI4aDk2djE5MmgtNTEydi0xOTJoOTZxNDAgMCA2OCAtMjh0MjggLTY4di0zMjAgcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwcS00MCAwIC02OCAyOHQtMjggNjh2MzIwcTAgNDAgMjggNjh0NjggMjhoOTZ2MTkycTAgNTIgMzggOTB0OTAgMzhoNTEydjE5MmgtOTZxLTQwIDAgLTY4IDI4dC0yOCA2OHYzMjBxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OCAtMjh0MjggLTY4di0zMjBxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NnYtMTkyaDUxMnE1MiAwIDkwIC0zOHQzOCAtOTB2LTE5Mmg5NnE0MCAwIDY4IC0yOHQyOCAtNjggeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGU5OyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik04OTYgNzA4di01ODBxMCAtMTA0IC03NiAtMTgwdC0xODAgLTc2dC0xODAgNzZ0LTc2IDE4MHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDVxMCAtNTAgMzkgLTg5dDg5IC0zOXQ4OSAzOXQzOSA4OXY1ODBxMzMgMTEgNjQgMTF0NjQgLTExek0xNjY0IDY4MXEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVxLTExIDAgLTIzIDEwcS00OSA0NiAtOTMgNjl0LTEwMiAyM3EtNjggMCAtMTI4IC0zN3QtMTAzIC05NyBxLTcgLTEwIC0xNy41IC0yOHQtMTQuNSAtMjRxLTExIC0xNyAtMjggLTE3cS0xOCAwIC0yOSAxN3EtNCA2IC0xNC41IDI0dC0xNy41IDI4cS00MyA2MCAtMTAyLjUgOTd0LTEyNy41IDM3dC0xMjcuNSAtMzd0LTEwMi41IC05N3EtNyAtMTAgLTE3LjUgLTI4dC0xNC41IC0yNHEtMTEgLTE3IC0yOSAtMTdxLTE3IDAgLTI4IDE3cS00IDYgLTE0LjUgMjR0LTE3LjUgMjhxLTQzIDYwIC0xMDMgOTd0LTEyOCAzN3EtNTggMCAtMTAyIC0yM3QtOTMgLTY5IHEtMTIgLTEwIC0yMyAtMTBxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXEwIDUgMSA3cTQ1IDE4MyAxNzIuNSAzMTkuNXQyOTggMjA0LjV0MzYwLjUgNjhxMTQwIDAgMjc0LjUgLTQwdDI0Ni41IC0xMTMuNXQxOTQuNSAtMTg3dDExNS41IC0yNTEuNXExIC0yIDEgLTd6TTg5NiAxNDA4di05OHEtNDIgMiAtNjQgMnQtNjQgLTJ2OThxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGVhOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik03NjggLTEyOGg4OTZ2NjQwaC00MTZxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTM4NHYtMTE1MnpNMTAyNCAxMzEydjY0cTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtNzA0cS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtNjRxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWg3MDRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTI4MCA2NDBoMjk5bC0yOTkgMjk5di0yOTl6TTE3OTIgNTEydi02NzJxMCAtNDAgLTI4IC02OHQtNjggLTI4IGgtOTYwcS00MCAwIC02OCAyOHQtMjggNjh2MTYwaC01NDRxLTQwIDAgLTY4IDI4dC0yOCA2OHYxMzQ0cTAgNDAgMjggNjh0NjggMjhoMTA4OHE0MCAwIDY4IC0yOHQyOCAtNjh2LTMyOHEyMSAtMTMgMzYgLTI4bDQwOCAtNDA4cTI4IC0yOCA0OCAtNzZ0MjAgLTg4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGViOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik03MzYgOTYwcTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNXQtMjIuNSA5LjV0LTkuNSAyMi41cTAgNDYgLTU0IDcxdC0xMDYgMjVxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXQ5LjUgMjIuNXQyMi41IDkuNXE1MCAwIDk5LjUgLTE2dDg3IC01NHQzNy41IC05MHpNODk2IDk2MHEwIDcyIC0zNC41IDEzNHQtOTAgMTAxLjV0LTEyMyA2MnQtMTM2LjUgMjIuNXQtMTM2LjUgLTIyLjV0LTEyMyAtNjJ0LTkwIC0xMDEuNXQtMzQuNSAtMTM0IHEwIC0xMDEgNjggLTE4MHExMCAtMTEgMzAuNSAtMzN0MzAuNSAtMzNxMTI4IC0xNTMgMTQxIC0yOThoMjI4cTEzIDE0NSAxNDEgMjk4cTEwIDExIDMwLjUgMzN0MzAuNSAzM3E2OCA3OSA2OCAxODB6TTEwMjQgOTYwcTAgLTE1NSAtMTAzIC0yNjhxLTQ1IC00OSAtNzQuNSAtODd0LTU5LjUgLTk1LjV0LTM0IC0xMDcuNXE0NyAtMjggNDcgLTgycTAgLTM3IC0yNSAtNjRxMjUgLTI3IDI1IC02NHEwIC01MiAtNDUgLTgxcTEzIC0yMyAxMyAtNDcgcTAgLTQ2IC0zMS41IC03MXQtNzcuNSAtMjVxLTIwIC00NCAtNjAgLTcwdC04NyAtMjZ0LTg3IDI2dC02MCA3MHEtNDYgMCAtNzcuNSAyNXQtMzEuNSA3MXEwIDI0IDEzIDQ3cS00NSAyOSAtNDUgODFxMCAzNyAyNSA2NHEtMjUgMjcgLTI1IDY0cTAgNTQgNDcgODJxLTQgNTAgLTM0IDEwNy41dC01OS41IDk1LjV0LTc0LjUgODdxLTEwMyAxMTMgLTEwMyAyNjhxMCA5OSA0NC41IDE4NC41dDExNyAxNDJ0MTY0IDg5dDE4Ni41IDMyLjUgdDE4Ni41IC0zMi41dDE2NCAtODl0MTE3IC0xNDJ0NDQuNSAtMTg0LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZWM7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgMzUydi0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMzc2di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41cS0xMiAwIC0yNCAxMGwtMzE5IDMyMHEtOSA5IC05IDIycTAgMTQgOSAyM2wzMjAgMzIwcTkgOSAyMyA5cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXYtMTkyaDEzNzZxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDg5NnEwIC0xNCAtOSAtMjNsLTMyMCAtMzIwcS05IC05IC0yMyAtOSBxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJoLTEzNzZxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMzc2djE5MnEwIDE0IDkgMjN0MjMgOXExMiAwIDI0IC0xMGwzMTkgLTMxOXE5IC05IDkgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGVkOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xMjgwIDYwOHEwIDE0IC05IDIzdC0yMyA5aC0yMjR2MzUycTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTkycS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtMzUyaC0yMjRxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41cTAgLTE0IDkgLTIzbDM1MiAtMzUycTkgLTkgMjMgLTl0MjMgOWwzNTEgMzUxcTEwIDEyIDEwIDI0ek0xOTIwIDM4NHEwIC0xNTkgLTExMi41IC0yNzEuNXQtMjcxLjUgLTExMi41aC0xMDg4IHEtMTg1IDAgLTMxNi41IDEzMS41dC0xMzEuNSAzMTYuNXEwIDEzMCA3MCAyNDB0MTg4IDE2NXEtMiAzMCAtMiA0M3EwIDIxMiAxNTAgMzYydDM2MiAxNTBxMTU2IDAgMjg1LjUgLTg3dDE4OC41IC0yMzFxNzEgNjIgMTY2IDYycTEwNiAwIDE4MSAtNzV0NzUgLTE4MXEwIC03NiAtNDEgLTEzOHExMzAgLTMxIDIxMy41IC0xMzUuNXQ4My41IC0yMzguNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBlZTsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMTI4MCA2NzJxMCAxNCAtOSAyM2wtMzUyIDM1MnEtOSA5IC0yMyA5dC0yMyAtOWwtMzUxIC0zNTFxLTEwIC0xMiAtMTAgLTI0cTAgLTE0IDkgLTIzdDIzIC05aDIyNHYtMzUycTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTkycTEzIDAgMjIuNSA5LjV0OS41IDIyLjV2MzUyaDIyNHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xOTIwIDM4NHEwIC0xNTkgLTExMi41IC0yNzEuNXQtMjcxLjUgLTExMi41aC0xMDg4IHEtMTg1IDAgLTMxNi41IDEzMS41dC0xMzEuNSAzMTYuNXEwIDEzMCA3MCAyNDB0MTg4IDE2NXEtMiAzMCAtMiA0M3EwIDIxMiAxNTAgMzYydDM2MiAxNTBxMTU2IDAgMjg1LjUgLTg3dDE4OC41IC0yMzFxNzEgNjIgMTY2IDYycTEwNiAwIDE4MSAtNzV0NzUgLTE4MXEwIC03NiAtNDEgLTEzOHExMzAgLTMxIDIxMy41IC0xMzUuNXQ4My41IC0yMzguNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBmMDsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMzg0IDE5MnEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1ek0xNDA4IDEzMXEwIC0xMjEgLTczIC0xOTB0LTE5NCAtNjloLTg3NHEtMTIxIDAgLTE5NCA2OXQtNzMgMTkwcTAgNjggNS41IDEzMXQyNCAxMzh0NDcuNSAxMzIuNXQ4MSAxMDN0MTIwIDYwLjVxLTIyIC01MiAtMjIgLTEyMHYtMjAzcS01OCAtMjAgLTkzIC03MHQtMzUgLTExMXEwIC04MCA1NiAtMTM2dDEzNiAtNTYgdDEzNiA1NnQ1NiAxMzZxMCA2MSAtMzUuNSAxMTF0LTkyLjUgNzB2MjAzcTAgNjIgMjUgOTNxMTMyIC0xMDQgMjk1IC0xMDR0Mjk1IDEwNHEyNSAtMzEgMjUgLTkzdi02NHEtMTA2IDAgLTE4MSAtNzV0LTc1IC0xODF2LTg5cS0zMiAtMjkgLTMyIC03MXEwIC00MCAyOCAtNjh0NjggLTI4dDY4IDI4dDI4IDY4cTAgNDIgLTMyIDcxdjg5cTAgNTIgMzggOTB0OTAgMzh0OTAgLTM4dDM4IC05MHYtODlxLTMyIC0yOSAtMzIgLTcxcTAgLTQwIDI4IC02OCB0NjggLTI4dDY4IDI4dDI4IDY4cTAgNDIgLTMyIDcxdjg5cTAgNjggLTM0LjUgMTI3LjV0LTkzLjUgOTMuNXEwIDEwIDAuNSA0Mi41dDAgNDh0LTIuNSA0MS41dC03IDQ3dC0xMyA0MHE2OCAtMTUgMTIwIC02MC41dDgxIC0xMDN0NDcuNSAtMTMyLjV0MjQgLTEzOHQ1LjUgLTEzMXpNMTA4OCAxMDI0cTAgLTE1OSAtMTEyLjUgLTI3MS41dC0yNzEuNSAtMTEyLjV0LTI3MS41IDExMi41dC0xMTIuNSAyNzEuNXQxMTIuNSAyNzEuNXQyNzEuNSAxMTIuNSB0MjcxLjUgLTExMi41dDExMi41IC0yNzEuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBmMTsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMTI4MCA4MzJxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xNDA4IDgzMnEwIC02MiAtMzUuNSAtMTExdC05Mi41IC03MHYtMzk1cTAgLTE1OSAtMTMxLjUgLTI3MS41dC0zMTYuNSAtMTEyLjV0LTMxNi41IDExMi41dC0xMzEuNSAyNzEuNXYxMzJxLTE2NCAyMCAtMjc0IDEyOHQtMTEwIDI1MnY1MTJxMCAyNiAxOSA0NXQ0NSAxOXE2IDAgMTYgLTJxMTcgMzAgNDcgNDggdDY1IDE4cTUzIDAgOTAuNSAtMzcuNXQzNy41IC05MC41dC0zNy41IC05MC41dC05MC41IC0zNy41cS0zMyAwIC02NCAxOHYtNDAycTAgLTEwNiA5NCAtMTgxdDIyNiAtNzV0MjI2IDc1dDk0IDE4MXY0MDJxLTMxIC0xOCAtNjQgLTE4cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41cTM1IDAgNjUgLTE4dDQ3IC00OHExMCAyIDE2IDJxMjYgMCA0NSAtMTl0MTkgLTQ1di01MTJxMCAtMTQ0IC0xMTAgLTI1MiB0LTI3NCAtMTI4di0xMzJxMCAtMTA2IDk0IC0xODF0MjI2IC03NXQyMjYgNzV0OTQgMTgxdjM5NXEtNTcgMjEgLTkyLjUgNzB0LTM1LjUgMTExcTAgODAgNTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZjI7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTY0MCAxMTUyaDUxMnYxMjhoLTUxMnYtMTI4ek0yODggMTE1MnYtMTI4MGgtNjRxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djgzMnEwIDkyIDY2IDE1OHQxNTggNjZoNjR6TTE0MDggMTE1MnYtMTI4MGgtMTAyNHYxMjgwaDEyOHYxNjBxMCA0MCAyOCA2OHQ2OCAyOGg1NzZxNDAgMCA2OCAtMjh0MjggLTY4di0xNjBoMTI4ek0xNzkyIDkyOHYtODMycTAgLTkyIC02NiAtMTU4dC0xNTggLTY2aC02NHYxMjgwaDY0cTkyIDAgMTU4IC02NiB0NjYgLTE1OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBmMzsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNODQ4IC0xNjBxMCAxNiAtMTYgMTZxLTU5IDAgLTEwMS41IDQyLjV0LTQyLjUgMTAxLjVxMCAxNiAtMTYgMTZ0LTE2IC0xNnEwIC03MyA1MS41IC0xMjQuNXQxMjQuNSAtNTEuNXExNiAwIDE2IDE2ek0xNjY0IDEyOHEwIC01MiAtMzggLTkwdC05MCAtMzhoLTQ0OHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxaC00NDhxLTUyIDAgLTkwIDM4dC0zOCA5MHExOTAgMTYxIDI4NyAzOTcuNXQ5NyA0OTguNSBxMCAxNjUgOTYgMjYydDI2NCAxMTdxLTggMTggLTggMzdxMCA0MCAyOCA2OHQ2OCAyOHQ2OCAtMjh0MjggLTY4cTAgLTE5IC04IC0zN3ExNjggLTIwIDI2NCAtMTE3dDk2IC0yNjJxMCAtMjYyIDk3IC00OTguNXQyODcgLTM5Ny41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGY0OyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xNjY0IDg5NnEwIDgwIC01NiAxMzZ0LTEzNiA1NmgtNjR2LTM4NGg2NHE4MCAwIDEzNiA1NnQ1NiAxMzZ6TTAgMTI4aDE3OTJxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1aC0xMjgwcS0xMDYgMCAtMTgxIDc1dC03NSAxODF6TTE4NTYgODk2cTAgLTE1OSAtMTEyLjUgLTI3MS41dC0yNzEuNSAtMTEyLjVoLTY0di0zMnEwIC05MiAtNjYgLTE1OHQtMTU4IC02NmgtNzA0cS05MiAwIC0xNTggNjZ0LTY2IDE1OHY3MzZxMCAyNiAxOSA0NSB0NDUgMTloMTE1MnExNTkgMCAyNzEuNSAtMTEyLjV0MTEyLjUgLTI3MS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGY1OyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik02NDAgMTQ3MnYtNjQwcTAgLTYxIC0zNS41IC0xMTF0LTkyLjUgLTcwdi03NzlxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC0xMjhxLTUyIDAgLTkwIDM4dC0zOCA5MHY3NzlxLTU3IDIwIC05Mi41IDcwdC0zNS41IDExMXY2NDBxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1di00MTZxMCAtMjYgMTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXY0MTZxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1di00MTZxMCAtMjYgMTkgLTQ1IHQ0NSAtMTl0NDUgMTl0MTkgNDV2NDE2cTAgMjYgMTkgNDV0NDUgMTl0NDUgLTE5dDE5IC00NXpNMTQwOCAxNDcydi0xNjAwcTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtMTI4cS01MiAwIC05MCAzOHQtMzggOTB2NTEyaC0yMjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY4MDBxMCAxMzIgOTQgMjI2dDIyNiA5NGgyNTZxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGY2OyIgaG9yaXotYWR2LXg9IjEyODAiIGQ9Ik0xMDI0IDM1MnYtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNzA0cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDcwNHExNCAwIDIzIC05dDkgLTIzek0xMDI0IDYwOHYtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNzA0cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDcwNHExNCAwIDIzIC05dDkgLTIzek0xMjggMGgxMDI0djc2OGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC01MTJ2LTEyODB6IE03NjggODk2aDI5OWwtMjk5IDI5OXYtMjk5ek0xMjgwIDc2OHYtODAwcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTA4OHEtNDAgMCAtNjggMjh0LTI4IDY4djEzNDRxMCA0MCAyOCA2OHQ2OCAyOGg1NDRxNDAgMCA4OCAtMjB0NzYgLTQ4bDQwOCAtNDA4cTI4IC0yOCA0OCAtNzZ0MjAgLTg4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGY3OyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0zODQgMjI0di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTM4NCA0ODB2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTY0MCA0ODB2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDczNnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiBNMTE1MiAyMjR2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNODk2IDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiBNNjQwIDczNnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgOTkydi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE0xMTUyIDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek04OTYgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE02NDAgOTkydi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTM4NCAxMjQ4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE0xMTUyIDczNnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek04OTYgOTkydi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE02NDAgMTI0OHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xMTUyIDk5MnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiBNODk2IDEyNDh2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTE1MiAxMjQ4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE04OTYgLTEyOGgzODR2MTUzNmgtMTE1MnYtMTUzNmgzODR2MjI0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMzIwcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXYtMjI0ek0xNDA4IDE0NzJ2LTE2NjRxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjgwcS0yNiAwIC00NSAxOXQtMTkgNDV2MTY2NHEwIDI2IDE5IDQ1dDQ1IDE5aDEyODBxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGY4OyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0zODQgMjI0di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTM4NCA0ODB2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTY0MCA0ODB2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDczNnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiBNMTE1MiAyMjR2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNODk2IDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiBNNjQwIDczNnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xMTUyIDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiBNODk2IDczNnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xMTUyIDczNnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiBNODk2IC0xMjhoMzg0djExNTJoLTI1NnYtMzJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC00NDhxLTQwIDAgLTY4IDI4dC0yOCA2OHYzMmgtMjU2di0xMTUyaDM4NHYyMjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgzMjBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0yMjR6TTg5NiAxMDU2djMyMHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTY0cS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtOTZoLTEyOHY5NnEwIDEzIC05LjUgMjIuNSB0LTIyLjUgOS41aC02NHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTMyMHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDY0cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV2OTZoMTI4di05NnEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDY0cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE0MDggMTA4OHYtMTI4MHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyODBxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjgwcTAgMjYgMTkgNDV0NDUgMTloMzIwIHYyODhxMCA0MCAyOCA2OHQ2OCAyOGg0NDhxNDAgMCA2OCAtMjh0MjggLTY4di0yODhoMzIwcTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBmOTsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNNjQwIDEyOHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMjU2IDY0MGgzODR2MjU2aC0xNThxLTE0IC0yIC0yMiAtOWwtMTk1IC0xOTVxLTcgLTEyIC05IC0yMnYtMzB6TTE1MzYgMTI4cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNSB0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTY2NCA4MDB2MTkycTAgMTQgLTkgMjN0LTIzIDloLTIyNHYyMjRxMCAxNCAtOSAyM3QtMjMgOWgtMTkycS0xNCAwIC0yMyAtOXQtOSAtMjN2LTIyNGgtMjI0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgyMjR2LTIyNHEwIC0xNCA5IC0yM3QyMyAtOWgxOTJxMTQgMCAyMyA5dDkgMjN2MjI0aDIyNHExNCAwIDIzIDl0OSAyM3pNMTkyMCAxMzQ0di0xMTUyIHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE5MnEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxaC0zODRxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1dC0xODEgNzV0LTc1IDE4MWgtMTI4cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTl2NDE2cTAgMjYgMTMgNTh0MzIgNTFsMTk4IDE5OHExOSAxOSA1MSAzMnQ1OCAxM2gxNjB2MzIwcTAgMjYgMTkgNDV0NDUgMTloMTE1MnEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZmE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTEyODAgNDE2djE5MnEwIDE0IC05IDIzdC0yMyA5aC0yMjR2MjI0cTAgMTQgLTkgMjN0LTIzIDloLTE5MnEtMTQgMCAtMjMgLTl0LTkgLTIzdi0yMjRoLTIyNHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMjI0di0yMjRxMCAtMTQgOSAtMjN0MjMgLTloMTkycTE0IDAgMjMgOXQ5IDIzdjIyNGgyMjRxMTQgMCAyMyA5dDkgMjN6TTY0MCAxMTUyaDUxMnYxMjhoLTUxMnYtMTI4ek0yNTYgMTE1MnYtMTI4MGgtMzIgcS05MiAwIC0xNTggNjZ0LTY2IDE1OHY4MzJxMCA5MiA2NiAxNTh0MTU4IDY2aDMyek0xNDQwIDExNTJ2LTEyODBoLTEwODh2MTI4MGgxNjB2MTYwcTAgNDAgMjggNjh0NjggMjhoNTc2cTQwIDAgNjggLTI4dDI4IC02OHYtMTYwaDE2MHpNMTc5MiA5Mjh2LTgzMnEwIC05MiAtNjYgLTE1OHQtMTU4IC02NmgtMzJ2MTI4MGgzMnE5MiAwIDE1OCAtNjZ0NjYgLTE1OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBmYjsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMTYzMiA4MDBxMjYxIC01OCAyODcgLTkzbDEgLTNxLTEgLTMyIC0yODggLTk2bC0zNTIgLTMybC0yMjQgLTY0aC02NGwtMjkzIC0zNTJoNjlxMjYgMCA0NSAtNC41dDE5IC0xMS41dC0xOSAtMTEuNXQtNDUgLTQuNWgtOTZoLTE2MGgtNjR2MzJoNjR2NDE2aC0xNjBsLTE5MiAtMjI0aC05NmwtMzIgMzJ2MTkyaDMydjMyaDEyOHY4bC0xOTIgMjR2MTI4bDE5MiAyNHY4aC0xMjh2MzJoLTMydjE5MmwzMiAzMmg5NmwxOTIgLTIyNGgxNjB2NDE2IGgtNjR2MzJoNjRoMTYwaDk2cTI2IDAgNDUgLTQuNXQxOSAtMTEuNXQtMTkgLTExLjV0LTQ1IC00LjVoLTY5bDI5MyAtMzUyaDY0bDIyNCAtNjR6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZmM7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTY0MCA2NDB2Mzg0aC0yNTZ2LTE2MHEwIC00NSAyIC03NnQ3LjUgLTU2LjV0MTQuNSAtNDB0MjMgLTI2LjV0MzMuNSAtMTUuNXQ0NSAtNy41dDU4IC0yLjV0NzIuNSAwLjV6TTE2NjQgMTkydi0xOTJoLTExNTJ2MTkybDEyOCAxOTJoLTk3cS0yMTEgMCAtMzEzIDEwMi41dC0xMDIgMzE0LjV2Mjg3bC02NCA2NGwzMiAxMjhoNDgwbDMyIDEyOGg5NjBsMzIgLTE5MmwtNjQgLTMydi04MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZmQ7IiBkPSJNMTI4MCAxOTJ2ODk2cTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMzIwaC01MTJ2MzIwcTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtODk2cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV2MzIwaDUxMnYtMzIwcTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTE1MzYgMTEyMHYtOTYwIHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBmZTsiIGQ9Ik0xMjgwIDU3NnYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0zMjB2MzIwcTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMzIwaC0zMjBxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgzMjB2LTMyMHEwIC0yNiAxOSAtNDV0NDUgLTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1djMyMGgzMjBxMjYgMCA0NSAxOXQxOSA0NXpNMTUzNiAxMTIwdi05NjAgcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTAwOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik02MjcgMTYwcTAgLTEzIC0xMCAtMjNsLTUwIC01MHEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC00NjYgNDY2cS0xMCAxMCAtMTAgMjN0MTAgMjNsNDY2IDQ2NnExMCAxMCAyMyAxMHQyMyAtMTBsNTAgLTUwcTEwIC0xMCAxMCAtMjN0LTEwIC0yM2wtMzkzIC0zOTNsMzkzIC0zOTNxMTAgLTEwIDEwIC0yM3pNMTAxMSAxNjBxMCAtMTMgLTEwIC0yM2wtNTAgLTUwcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTQ2NiA0NjZxLTEwIDEwIC0xMCAyMyB0MTAgMjNsNDY2IDQ2NnExMCAxMCAyMyAxMHQyMyAtMTBsNTAgLTUwcTEwIC0xMCAxMCAtMjN0LTEwIC0yM2wtMzkzIC0zOTNsMzkzIC0zOTNxMTAgLTEwIDEwIC0yM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwMTsiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNNTk1IDU3NnEwIC0xMyAtMTAgLTIzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAgLTEwIDIzdDEwIDIzbDM5MyAzOTNsLTM5MyAzOTNxLTEwIDEwIC0xMCAyM3QxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMyAtMTBsNDY2IC00NjZxMTAgLTEwIDEwIC0yM3pNOTc5IDU3NnEwIC0xMyAtMTAgLTIzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAgLTEwIDIzdDEwIDIzIGwzOTMgMzkzbC0zOTMgMzkzcS0xMCAxMCAtMTAgMjN0MTAgMjNsNTAgNTBxMTAgMTAgMjMgMTB0MjMgLTEwbDQ2NiAtNDY2cTEwIC0xMCAxMCAtMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMDI7IiBob3Jpei1hZHYteD0iMTE1MiIgZD0iTTEwNzUgMjI0cTAgLTEzIC0xMCAtMjNsLTUwIC01MHEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0zOTMgMzkzbC0zOTMgLTM5M3EtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAgLTEwIDIzdDEwIDIzbDQ2NiA0NjZxMTAgMTAgMjMgMTB0MjMgLTEwbDQ2NiAtNDY2cTEwIC0xMCAxMCAtMjN6TTEwNzUgNjA4cTAgLTEzIC0xMCAtMjNsLTUwIC01MHEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0zOTMgMzkzbC0zOTMgLTM5MyBxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtNTAgNTBxLTEwIDEwIC0xMCAyM3QxMCAyM2w0NjYgNDY2cTEwIDEwIDIzIDEwdDIzIC0xMGw0NjYgLTQ2NnExMCAtMTAgMTAgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTAzOyIgaG9yaXotYWR2LXg9IjExNTIiIGQ9Ik0xMDc1IDY3MnEwIC0xMyAtMTAgLTIzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC00NjYgNDY2cS0xMCAxMCAtMTAgMjN0MTAgMjNsNTAgNTBxMTAgMTAgMjMgMTB0MjMgLTEwbDM5MyAtMzkzbDM5MyAzOTNxMTAgMTAgMjMgMTB0MjMgLTEwbDUwIC01MHExMCAtMTAgMTAgLTIzek0xMDc1IDEwNTZxMCAtMTMgLTEwIC0yM2wtNDY2IC00NjZxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtNDY2IDQ2NnEtMTAgMTAgLTEwIDIzIHQxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMyAtMTBsMzkzIC0zOTNsMzkzIDM5M3ExMCAxMCAyMyAxMHQyMyAtMTBsNTAgLTUwcTEwIC0xMCAxMCAtMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMDQ7IiBob3Jpei1hZHYteD0iNjQwIiBkPSJNNjI3IDk5MnEwIC0xMyAtMTAgLTIzbC0zOTMgLTM5M2wzOTMgLTM5M3ExMCAtMTAgMTAgLTIzdC0xMCAtMjNsLTUwIC01MHEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC00NjYgNDY2cS0xMCAxMCAtMTAgMjN0MTAgMjNsNDY2IDQ2NnExMCAxMCAyMyAxMHQyMyAtMTBsNTAgLTUwcTEwIC0xMCAxMCAtMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMDU7IiBob3Jpei1hZHYteD0iNjQwIiBkPSJNNTk1IDU3NnEwIC0xMyAtMTAgLTIzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAgLTEwIDIzdDEwIDIzbDM5MyAzOTNsLTM5MyAzOTNxLTEwIDEwIC0xMCAyM3QxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMyAtMTBsNDY2IC00NjZxMTAgLTEwIDEwIC0yM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwNjsiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNMTA3NSAzNTJxMCAtMTMgLTEwIC0yM2wtNTAgLTUwcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTM5MyAzOTNsLTM5MyAtMzkzcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTUwIDUwcS0xMCAxMCAtMTAgMjN0MTAgMjNsNDY2IDQ2NnExMCAxMCAyMyAxMHQyMyAtMTBsNDY2IC00NjZxMTAgLTEwIDEwIC0yM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwNzsiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNMTA3NSA4MDBxMCAtMTMgLTEwIC0yM2wtNDY2IC00NjZxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtNDY2IDQ2NnEtMTAgMTAgLTEwIDIzdDEwIDIzbDUwIDUwcTEwIDEwIDIzIDEwdDIzIC0xMGwzOTMgLTM5M2wzOTMgMzkzcTEwIDEwIDIzIDEwdDIzIC0xMGw1MCAtNTBxMTAgLTEwIDEwIC0yM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwODsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMTc5MiA1NDR2ODMycTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTYwMHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTgzMnEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDE2MDBxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTkyMCAxMzc2di0xMDg4cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC01NDRxMCAtMzcgMTYgLTc3LjV0MzIgLTcxdDE2IC00My41cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNTEycS0yNiAwIC00NSAxOSB0LTE5IDQ1cTAgMTQgMTYgNDR0MzIgNzB0MTYgNzhoLTU0NHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTA4OHEwIDY2IDQ3IDExM3QxMTMgNDdoMTYwMHE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwOTsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNNDE2IDI1NnEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2NzA0cTAgNjYgNDcgMTEzdDExMyA0N2gxMDg4cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi03MDRxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTEwODh6TTM4NCAxMTIwdi03MDRxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxMDg4cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV2NzA0cTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTA4OHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV6IE0xNzYwIDE5MmgxNjB2LTk2cTAgLTQwIC00NyAtNjh0LTExMyAtMjhoLTE2MDBxLTY2IDAgLTExMyAyOHQtNDcgNjh2OTZoMTYwaDE2MDB6TTEwNDAgOTZxMTYgMCAxNiAxNnQtMTYgMTZoLTE2MHEtMTYgMCAtMTYgLTE2dDE2IC0xNmgxNjB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMGE7IiBob3Jpei1hZHYteD0iMTE1MiIgZD0iTTY0MCAxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xMDI0IDI4OHY5NjBxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC04MzJxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di05NjBxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWg4MzJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTE1MiAxMjQ4di0xMDg4cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC04MzIgcS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2g4MzJxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMGI7IiBob3Jpei1hZHYteD0iNzY4IiBkPSJNNDY0IDEyOHEwIDMzIC0yMy41IDU2LjV0LTU2LjUgMjMuNXQtNTYuNSAtMjMuNXQtMjMuNSAtNTYuNXQyMy41IC01Ni41dDU2LjUgLTIzLjV0NTYuNSAyMy41dDIzLjUgNTYuNXpNNjcyIDI4OHY3MDRxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC01MTJxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di03MDRxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWg1MTJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNNDgwIDExMzYgcTAgMTYgLTE2IDE2aC0xNjBxLTE2IDAgLTE2IC0xNnQxNiAtMTZoMTYwcTE2IDAgMTYgMTZ6TTc2OCAxMTUydi0xMDI0cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtNTEycS01MiAwIC05MCAzOHQtMzggOTB2MTAyNHEwIDUyIDM4IDkwdDkwIDM4aDUxMnE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMGM7IiBkPSJNMTI4MCA2NDBxMCAxMDQgLTQwLjUgMTk4LjV0LTEwOS41IDE2My41dC0xNjMuNSAxMDkuNXQtMTk4LjUgNDAuNXQtMTk4LjUgLTQwLjV0LTE2My41IC0xMDkuNXQtMTA5LjUgLTE2My41dC00MC41IC0xOTguNXQ0MC41IC0xOTguNXQxMDkuNSAtMTYzLjV0MTYzLjUgLTEwOS41dDE5OC41IC00MC41dDE5OC41IDQwLjV0MTYzLjUgMTA5LjV0MTA5LjUgMTYzLjV0NDAuNSAxOTguNXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41IHQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTBkOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik03NjggNTc2di0zODRxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZoLTM4NHEtODAgMCAtMTM2IDU2dC01NiAxMzZ2NzA0cTAgMTA0IDQwLjUgMTk4LjV0MTA5LjUgMTYzLjV0MTYzLjUgMTA5LjV0MTk4LjUgNDAuNWg2NHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTY0cS0xMDYgMCAtMTgxIC03NXQtNzUgLTE4MXYtMzJxMCAtNDAgMjggLTY4dDY4IC0yOGgyMjRxODAgMCAxMzYgLTU2dDU2IC0xMzZ6IE0xNjY0IDU3NnYtMzg0cTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2aC0zODRxLTgwIDAgLTEzNiA1NnQtNTYgMTM2djcwNHEwIDEwNCA0MC41IDE5OC41dDEwOS41IDE2My41dDE2My41IDEwOS41dDE5OC41IDQwLjVoNjRxMjYgMCA0NSAtMTl0MTkgLTQ1di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC02NHEtMTA2IDAgLTE4MSAtNzV0LTc1IC0xODF2LTMycTAgLTQwIDI4IC02OHQ2OCAtMjhoMjI0cTgwIDAgMTM2IC01NnQ1NiAtMTM2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTBlOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik03NjggMTIxNnYtNzA0cTAgLTEwNCAtNDAuNSAtMTk4LjV0LTEwOS41IC0xNjMuNXQtMTYzLjUgLTEwOS41dC0xOTguNSAtNDAuNWgtNjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWg2NHExMDYgMCAxODEgNzV0NzUgMTgxdjMycTAgNDAgLTI4IDY4dC02OCAyOGgtMjI0cS04MCAwIC0xMzYgNTZ0LTU2IDEzNnYzODRxMCA4MCA1NiAxMzZ0MTM2IDU2aDM4NHE4MCAwIDEzNiAtNTZ0NTYgLTEzNnpNMTY2NCAxMjE2IHYtNzA0cTAgLTEwNCAtNDAuNSAtMTk4LjV0LTEwOS41IC0xNjMuNXQtMTYzLjUgLTEwOS41dC0xOTguNSAtNDAuNWgtNjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWg2NHExMDYgMCAxODEgNzV0NzUgMTgxdjMycTAgNDAgLTI4IDY4dC02OCAyOGgtMjI0cS04MCAwIC0xMzYgNTZ0LTU2IDEzNnYzODRxMCA4MCA1NiAxMzZ0MTM2IDU2aDM4NHE4MCAwIDEzNiAtNTZ0NTYgLTEzNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjExMDsiIGhvcml6LWFkdi14PSIxNTY4IiBkPSJNNDk2IDE5MnEwIC02MCAtNDIuNSAtMTAydC0xMDEuNSAtNDJxLTYwIDAgLTEwMiA0MnQtNDIgMTAydDQyIDEwMnQxMDIgNDJxNTkgMCAxMDEuNSAtNDJ0NDIuNSAtMTAyek05MjggMHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXQtOTAuNSAzNy41dC0zNy41IDkwLjV0MzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTMyMCA2NDBxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDd0LTExMyA0N3QtNDcgMTEzIHQ0NyAxMTN0MTEzIDQ3dDExMyAtNDd0NDcgLTExM3pNMTM2MCAxOTJxMCAtNDYgLTMzIC03OXQtNzkgLTMzdC03OSAzM3QtMzMgNzl0MzMgNzl0NzkgMzN0NzkgLTMzdDMzIC03OXpNNTI4IDEwODhxMCAtNzMgLTUxLjUgLTEyNC41dC0xMjQuNSAtNTEuNXQtMTI0LjUgNTEuNXQtNTEuNSAxMjQuNXQ1MS41IDEyNC41dDEyNC41IDUxLjV0MTI0LjUgLTUxLjV0NTEuNSAtMTI0LjV6TTk5MiAxMjgwcTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2IHQtMTM2IDU2dC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ6TTE1MzYgNjQwcTAgLTQwIC0yOCAtNjh0LTY4IC0yOHQtNjggMjh0LTI4IDY4dDI4IDY4dDY4IDI4dDY4IC0yOHQyOCAtNjh6TTEzMjggMTA4OHEwIC0zMyAtMjMuNSAtNTYuNXQtNTYuNSAtMjMuNXQtNTYuNSAyMy41dC0yMy41IDU2LjV0MjMuNSA1Ni41dDU2LjUgMjMuNXQ1Ni41IC0yMy41dDIzLjUgLTU2LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMTE7IiBkPSJNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMTI7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgNDE2cTAgLTE2NiAtMTI3IC00NTFxLTMgLTcgLTEwLjUgLTI0dC0xMy41IC0zMHQtMTMgLTIycS0xMiAtMTcgLTI4IC0xN3EtMTUgMCAtMjMuNSAxMHQtOC41IDI1cTAgOSAyLjUgMjYuNXQyLjUgMjMuNXE1IDY4IDUgMTIzcTAgMTAxIC0xNy41IDE4MXQtNDguNSAxMzguNXQtODAgMTAxdC0xMDUuNSA2OS41dC0xMzMgNDIuNXQtMTU0IDIxLjV0LTE3NS41IDZoLTIyNHYtMjU2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTkgbC01MTIgNTEycS0xOSAxOSAtMTkgNDV0MTkgNDVsNTEyIDUxMnExOSAxOSA0NSAxOXQ0NSAtMTl0MTkgLTQ1di0yNTZoMjI0cTcxMyAwIDg3NSAtNDAzcTUzIC0xMzQgNTMgLTMzM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjExMzsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNjQwIDMyMHEwIC00MCAtMTIuNSAtODJ0LTQzIC03NnQtNzIuNSAtMzR0LTcyLjUgMzR0LTQzIDc2dC0xMi41IDgydDEyLjUgODJ0NDMgNzZ0NzIuNSAzNHQ3Mi41IC0zNHQ0MyAtNzZ0MTIuNSAtODJ6TTEyODAgMzIwcTAgLTQwIC0xMi41IC04MnQtNDMgLTc2dC03Mi41IC0zNHQtNzIuNSAzNHQtNDMgNzZ0LTEyLjUgODJ0MTIuNSA4MnQ0MyA3NnQ3Mi41IDM0dDcyLjUgLTM0dDQzIC03NnQxMi41IC04MnpNMTQ0MCAzMjAgcTAgMTIwIC02OSAyMDR0LTE4NyA4NHEtNDEgMCAtMTk1IC0yMXEtNzEgLTExIC0xNTcgLTExdC0xNTcgMTFxLTE1MiAyMSAtMTk1IDIxcS0xMTggMCAtMTg3IC04NHQtNjkgLTIwNHEwIC04OCAzMiAtMTUzLjV0ODEgLTEwM3QxMjIgLTYwdDE0MCAtMjkuNXQxNDkgLTdoMTY4cTgyIDAgMTQ5IDd0MTQwIDI5LjV0MTIyIDYwdDgxIDEwM3QzMiAxNTMuNXpNMTY2NCA0OTZxMCAtMjA3IC02MSAtMzMxcS0zOCAtNzcgLTEwNS41IC0xMzN0LTE0MSAtODYgdC0xNzAgLTQ3LjV0LTE3MS41IC0yMnQtMTY3IC00LjVxLTc4IDAgLTE0MiAzdC0xNDcuNSAxMi41dC0xNTIuNSAzMHQtMTM3IDUxLjV0LTEyMSA4MXQtODYgMTE1cS02MiAxMjMgLTYyIDMzMXEwIDIzNyAxMzYgMzk2cS0yNyA4MiAtMjcgMTcwcTAgMTE2IDUxIDIxOHExMDggMCAxOTAgLTM5LjV0MTg5IC0xMjMuNXExNDcgMzUgMzA5IDM1cTE0OCAwIDI4MCAtMzJxMTA1IDgyIDE4NyAxMjF0MTg5IDM5cTUxIC0xMDIgNTEgLTIxOCBxMCAtODcgLTI3IC0xNjhxMTM2IC0xNjAgMTM2IC0zOTh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMTQ7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE1MzYgMjI0djcwNHEwIDQwIC0yOCA2OHQtNjggMjhoLTcwNHEtNDAgMCAtNjggMjh0LTI4IDY4djY0cTAgNDAgLTI4IDY4dC02OCAyOGgtMzIwcS00MCAwIC02OCAtMjh0LTI4IC02OHYtOTYwcTAgLTQwIDI4IC02OHQ2OCAtMjhoMTIxNnE0MCAwIDY4IDI4dDI4IDY4ek0xNjY0IDkyOHYtNzA0cTAgLTkyIC02NiAtMTU4dC0xNTggLTY2aC0xMjE2cS05MiAwIC0xNTggNjZ0LTY2IDE1OHY5NjBxMCA5MiA2NiAxNTh0MTU4IDY2aDMyMCBxOTIgMCAxNTggLTY2dDY2IC0xNTh2LTMyaDY3MnE5MiAwIDE1OCAtNjZ0NjYgLTE1OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjExNTsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMTc4MSA2MDVxMCAzNSAtNTMgMzVoLTEwODhxLTQwIDAgLTg1LjUgLTIxLjV0LTcxLjUgLTUyLjVsLTI5NCAtMzYzcS0xOCAtMjQgLTE4IC00MHEwIC0zNSA1MyAtMzVoMTA4OHE0MCAwIDg2IDIydDcxIDUzbDI5NCAzNjNxMTggMjIgMTggMzl6TTY0MCA3NjhoNzY4djE2MHEwIDQwIC0yOCA2OHQtNjggMjhoLTU3NnEtNDAgMCAtNjggMjh0LTI4IDY4djY0cTAgNDAgLTI4IDY4dC02OCAyOGgtMzIwcS00MCAwIC02OCAtMjh0LTI4IC02OCB2LTg1M2wyNTYgMzE1cTQ0IDUzIDExNiA4Ny41dDE0MCAzNC41ek0xOTA5IDYwNXEwIC02MiAtNDYgLTEyMGwtMjk1IC0zNjNxLTQzIC01MyAtMTE2IC04Ny41dC0xNDAgLTM0LjVoLTEwODhxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djk2MHEwIDkyIDY2IDE1OHQxNTggNjZoMzIwcTkyIDAgMTU4IC02NnQ2NiAtMTU4di0zMmg1NDRxOTIgMCAxNTggLTY2dDY2IC0xNTh2LTE2MGgxOTJxNTQgMCA5OSAtMjQuNXQ2NyAtNzAuNXExNSAtMzIgMTUgLTY4eiAiIC8+Cis8L2ZvbnQ+Cis8L2RlZnM+PC9zdmc+IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9mb250YXdlc29tZS13ZWJmb250LnR0ZiBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9mb250YXdlc29tZS13ZWJmb250LnR0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDYxNzI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQudHRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmYgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC53b2ZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODlhZTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC53b2ZmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLmVvdCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLmVvdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjNiZDVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuZW90CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnN2ZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnN2ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDY5NDg4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuc3ZnCkBAIC0wLDAgKzEsMjI5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9Im5vIj8+Cis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KKzxtZXRhZGF0YT48L21ldGFkYXRhPgorPGRlZnM+Cis8Zm9udCBpZD0iZ2x5cGhpY29uc19oYWxmbGluZ3NyZWd1bGFyIiBob3Jpei1hZHYteD0iMTIwMCIgPgorPGZvbnQtZmFjZSB1bml0cy1wZXItZW09IjEyMDAiIGFzY2VudD0iOTYwIiBkZXNjZW50PSItMjQwIiAvPgorPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjUwMCIgLz4KKzxnbHlwaCAvPgorPGdseXBoIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZDsiIC8+Cis8Z2x5cGggdW5pY29kZT0iICIgLz4KKzxnbHlwaCB1bmljb2RlPSIqIiBkPSJNMTAwIDUwMHYyMDBoMjU5bC0xODMgMTgzbDE0MSAxNDFsMTgzIC0xODN2MjU5aDIwMHYtMjU5bDE4MyAxODNsMTQxIC0xNDFsLTE4MyAtMTgzaDI1OXYtMjAwaC0yNTlsMTgzIC0xODNsLTE0MSAtMTQxbC0xODMgMTgzdi0yNTloLTIwMHYyNTlsLTE4MyAtMTgzbC0xNDEgMTQxbDE4MyAxODNoLTI1OXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iKyIgZD0iTTAgNDAwdjMwMGg0MDB2NDAwaDMwMHYtNDAwaDQwMHYtMzAwaC00MDB2LTQwMGgtMzAwdjQwMGgtNDAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hhMDsiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjAwMDsiIGhvcml6LWFkdi14PSI2NTIiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjAwMTsiIGhvcml6LWFkdi14PSIxMzA0IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDI7IiBob3Jpei1hZHYteD0iNjUyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDM7IiBob3Jpei1hZHYteD0iMTMwNCIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDA0OyIgaG9yaXotYWR2LXg9IjQzNCIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDA1OyIgaG9yaXotYWR2LXg9IjMyNiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDA2OyIgaG9yaXotYWR2LXg9IjIxNyIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDA3OyIgaG9yaXotYWR2LXg9IjIxNyIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDA4OyIgaG9yaXotYWR2LXg9IjE2MyIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDA5OyIgaG9yaXotYWR2LXg9IjI2MCIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDBhOyIgaG9yaXotYWR2LXg9IjcyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMmY7IiBob3Jpei1hZHYteD0iMjYwIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwNWY7IiBob3Jpei1hZHYteD0iMzI2IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwYWM7IiBkPSJNMTAwIDUwMGwxMDAgMTAwaDExM3EwIDQ3IDUgMTAwaC0yMThsMTAwIDEwMGgxMzVxMzcgMTY3IDExMiAyNTdxMTE3IDE0MSAyOTcgMTQxcTI0MiAwIDM1NCAtMTg5cTYwIC0xMDMgNjYgLTIwOWgtMTgxcTAgNTUgLTI1LjUgOTl0LTYzLjUgNjh0LTc1IDM2LjV0LTY3IDEyLjVxLTI0IDAgLTUyLjUgLTEwdC02Mi41IC0zMnQtNjUuNSAtNjd0LTUwLjUgLTEwN2gzNzlsLTEwMCAtMTAwaC0zMDBxLTYgLTQ2IC02IC0xMDBoNDA2bC0xMDAgLTEwMCBoLTMwMHE5IC03NCAzMyAtMTMydDUyLjUgLTkxdDYyIC01NC41dDU5IC0yOXQ0Ni41IC03LjVxMjkgMCA2NiAxM3Q3NSAzN3Q2My41IDY3LjV0MjUuNSA5Ni41aDE3NHEtMzEgLTE3MiAtMTI4IC0yNzhxLTEwNyAtMTE3IC0yNzQgLTExN3EtMjA1IDAgLTMyNCAxNThxLTM2IDQ2IC02OSAxMzEuNXQtNDUgMjA1LjVoLTIxN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjIxMjsiIGQ9Ik0yMDAgNDAwaDkwMHYzMDBoLTkwMHYtMzAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyNjAxOyIgZD0iTS0xNCA0OTRxMCAtODAgNTYuNSAtMTM3dDEzNS41IC01N2g3NTBxMTIwIDAgMjA1IDg2dDg1IDIwOHEwIDEyMCAtODUgMjA2LjV0LTIwNSA4Ni41cS00NiAwIC05MCAtMTRxLTQ0IDk3IC0xMzQuNSAxNTYuNXQtMjAwLjUgNTkuNXEtMTUyIDAgLTI2MCAtMTA3LjV0LTEwOCAtMjYwLjVxMCAtMjUgMiAtMzdxLTY2IC0xNCAtMTA4LjUgLTY3LjV0LTQyLjUgLTEyMi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyNzA5OyIgZD0iTTAgMTAwbDQwMCA0MDBsMjAwIC0yMDBsMjAwIDIwMGw0MDAgLTQwMGgtMTIwMHpNMCAzMDB2NjAwbDMwMCAtMzAwek0wIDExMDBsNjAwIC02MDNsNjAwIDYwM2gtMTIwMHpNOTAwIDYwMGwzMDAgMzAwdi02MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDI3MGY7IiBkPSJNLTEzIC0xM2wzMzMgMTEybC0yMjMgMjIzek0xODcgNDAzbDIxNCAtMjE0bDYxNCA2MTRsLTIxNCAyMTR6TTg4NyAxMTAzbDIxNCAtMjE0bDk5IDkycTEzIDEzIDEzIDMyLjV0LTEzIDMzLjVsLTE1MyAxNTNxLTE1IDEzIC0zMyAxM3QtMzMgLTEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDAwOyIgaG9yaXotYWR2LXg9IjUwMCIgZD0iTTAgMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMTsiIGQ9Ik0wIDEyMDBoMTIwMGwtNTAwIC01NTB2LTU1MGgzMDB2LTEwMGgtODAwdjEwMGgzMDB2NTUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDAyOyIgZD0iTTE0IDg0cTE4IC01NSA4NiAtNzUuNXQxNDcgNS41cTY1IDIxIDEwOSA2OXQ0NCA5MHY2MDZsNjAwIDE1NXYtNTIxcS02NCAxNiAtMTM4IC03cS03OSAtMjYgLTEyMi41IC04M3QtMjUuNSAtMTExcTE3IC01NSA4NS41IC03NS41dDE0Ny41IDQuNXE3MCAyMyAxMTEuNSA2My41dDQxLjUgOTUuNXY4ODFxMCAxMCAtNyAxNS41dC0xNyAyLjVsLTc1MiAtMTkzcS0xMCAtMyAtMTcgLTEyLjV0LTcgLTE5LjV2LTY4OXEtNjQgMTcgLTEzOCAtNyBxLTc5IC0yNSAtMTIyLjUgLTgydC0yNS41IC0xMTJ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMDM7IiBkPSJNMjMgNjkzcTAgMjAwIDE0MiAzNDJ0MzQyIDE0MnQzNDIgLTE0MnQxNDIgLTM0MnEwIC0xNDIgLTc4IC0yNjFsMzAwIC0zMDBxNyAtOCA3IC0xOHQtNyAtMThsLTEwOSAtMTA5cS04IC03IC0xOCAtN3QtMTggN2wtMzAwIDMwMHEtMTE5IC03OCAtMjYxIC03OHEtMjAwIDAgLTM0MiAxNDJ0LTE0MiAzNDJ6TTE3NiA2OTNxMCAtMTM2IDk3IC0yMzN0MjM0IC05N3QyMzMuNSA5Ni41dDk2LjUgMjMzLjV0LTk2LjUgMjMzLjV0LTIzMy41IDk2LjUgdC0yMzQgLTk3dC05NyAtMjMzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDA1OyIgZD0iTTEwMCA3ODRxMCA2NCAyOCAxMjN0NzMgMTAwLjV0MTA0LjUgNjR0MTE5IDIwLjV0MTIwIC0zOC41dDEwNC41IC0xMDQuNXE0OCA2OSAxMDkuNSAxMDV0MTIxLjUgMzh0MTE4LjUgLTIwLjV0MTAyLjUgLTY0dDcxIC0xMDAuNXQyNyAtMTIzcTAgLTU3IC0zMy41IC0xMTcuNXQtOTQgLTEyNC41dC0xMjYuNSAtMTI3LjV0LTE1MCAtMTUyLjV0LTE0NiAtMTc0cS02MiA4NSAtMTQ1LjUgMTc0dC0xNDkuNSAxNTIuNXQtMTI2LjUgMTI3LjUgdC05NCAxMjQuNXQtMzMuNSAxMTcuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAwNjsiIGQ9Ik0tNzIgODAwaDQ3OWwxNDYgNDAwaDJsMTQ2IC00MDBoNDcybC0zODIgLTI3OGwxNDUgLTQ0OWwtMzg0IDI3NWwtMzgyIC0yNzVsMTQ2IDQ0N3pNMTY4IDcxbDIgMXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAwNzsiIGQ9Ik0tNzIgODAwaDQ3OWwxNDYgNDAwaDJsMTQ2IC00MDBoNDcybC0zODIgLTI3OGwxNDUgLTQ0OWwtMzg0IDI3NWwtMzgyIC0yNzVsMTQ2IDQ0N3pNMTY4IDcxbDIgMXpNMjM3IDcwMGwxOTYgLTE0MmwtNzMgLTIyNmwxOTIgMTQwbDE5NSAtMTQxbC03NCAyMjlsMTkzIDE0MGgtMjM1bC03NyAyMTFsLTc4IC0yMTFoLTIzOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAwODsiIGQ9Ik0wIDB2MTQzbDQwMCAyNTd2MTAwcS0zNyAwIC02OC41IDc0LjV0LTMxLjUgMTI1LjV2MjAwcTAgMTI0IDg4IDIxMnQyMTIgODh0MjEyIC04OHQ4OCAtMjEydi0yMDBxMCAtNTEgLTMxLjUgLTEyNS41dC02OC41IC03NC41di0xMDBsNDAwIC0yNTd2LTE0M2gtMTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAwOTsiIGQ9Ik0wIDB2MTEwMGgxMjAwdi0xMTAwaC0xMjAwek0xMDAgMTAwaDEwMHYxMDBoLTEwMHYtMTAwek0xMDAgMzAwaDEwMHYxMDBoLTEwMHYtMTAwek0xMDAgNTAwaDEwMHYxMDBoLTEwMHYtMTAwek0xMDAgNzAwaDEwMHYxMDBoLTEwMHYtMTAwek0xMDAgOTAwaDEwMHYxMDBoLTEwMHYtMTAwek0zMDAgMTAwaDYwMHY0MDBoLTYwMHYtNDAwek0zMDAgNjAwaDYwMHY0MDBoLTYwMHYtNDAwek0xMDAwIDEwMGgxMDB2MTAwaC0xMDB2LTEwMHogTTEwMDAgMzAwaDEwMHYxMDBoLTEwMHYtMTAwek0xMDAwIDUwMGgxMDB2MTAwaC0xMDB2LTEwMHpNMTAwMCA3MDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMDAgOTAwaDEwMHYxMDBoLTEwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDEwOyIgZD0iTTAgNTB2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMCA2NTB2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTYwMCA1MHY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek02MDAgNjUwdjQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDExOyIgZD0iTTAgNTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMCA0NTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTAgODUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTQwMCA1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41IHQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNDAwIDQ1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek00MDAgODUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41IHYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek04MDAgNTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNODAwIDQ1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMCBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNODAwIDg1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDEyOyIgZD0iTTAgNTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMCA0NTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41aDIwMHEyMSAwIDM1LjUgMTQuNXQxNC41IDM1LjV2MjAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0yMDBxLTIxIDAgLTM1LjUgLTE0LjUgdC0xNC41IC0zNS41di0yMDB6TTAgODUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTQwMCA1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41IHQtMzUuNSAtMTQuNWgtNzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNDAwIDQ1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek00MDAgODUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41IHYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDEzOyIgZD0iTTI5IDQ1NGw0MTkgLTQyMGw4MTggODIwbC0yMTIgMjEybC02MDcgLTYwN2wtMjA2IDIwN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAxNDsiIGQ9Ik0xMDYgMzE4bDI4MiAyODJsLTI4MiAyODJsMjEyIDIxMmwyODIgLTI4MmwyODIgMjgybDIxMiAtMjEybC0yODIgLTI4MmwyODIgLTI4MmwtMjEyIC0yMTJsLTI4MiAyODJsLTI4MiAtMjgyeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDE1OyIgZD0iTTIzIDY5M3EwIDIwMCAxNDIgMzQydDM0MiAxNDJ0MzQyIC0xNDJ0MTQyIC0zNDJxMCAtMTQyIC03OCAtMjYxbDMwMCAtMzAwcTcgLTggNyAtMTh0LTcgLTE4bC0xMDkgLTEwOXEtOCAtNyAtMTggLTd0LTE4IDdsLTMwMCAzMDBxLTExOSAtNzggLTI2MSAtNzhxLTIwMCAwIC0zNDIgMTQydC0xNDIgMzQyek0xNzYgNjkzcTAgLTEzNiA5NyAtMjMzdDIzNCAtOTd0MjMzLjUgOTYuNXQ5Ni41IDIzMy41dC05Ni41IDIzMy41dC0yMzMuNSA5Ni41IHQtMjM0IC05N3QtOTcgLTIzM3pNMzAwIDYwMHYyMDBoMTAwdjEwMGgyMDB2LTEwMGgxMDB2LTIwMGgtMTAwdi0xMDBoLTIwMHYxMDBoLTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAxNjsiIGQ9Ik0yMyA2OTRxMCAyMDAgMTQyIDM0MnQzNDIgMTQydDM0MiAtMTQydDE0MiAtMzQycTAgLTE0MSAtNzggLTI2MmwzMDAgLTI5OXE3IC03IDcgLTE4dC03IC0xOGwtMTA5IC0xMDlxLTggLTggLTE4IC04dC0xOCA4bC0zMDAgMjk5cS0xMjAgLTc3IC0yNjEgLTc3cS0yMDAgMCAtMzQyIDE0MnQtMTQyIDM0MnpNMTc2IDY5NHEwIC0xMzYgOTcgLTIzM3QyMzQgLTk3dDIzMy41IDk3dDk2LjUgMjMzdC05Ni41IDIzM3QtMjMzLjUgOTd0LTIzNCAtOTcgdC05NyAtMjMzek0zMDAgNjAxaDQwMHYyMDBoLTQwMHYtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDE3OyIgZD0iTTIzIDYwMHEwIDE4MyAxMDUgMzMxdDI3MiAyMTB2LTE2NnEtMTAzIC01NSAtMTY1IC0xNTV0LTYyIC0yMjBxMCAtMTc3IDEyNSAtMzAydDMwMiAtMTI1dDMwMiAxMjV0MTI1IDMwMnEwIDEyMCAtNjIgMjIwdC0xNjUgMTU1djE2NnExNjcgLTYyIDI3MiAtMjEwdDEwNSAtMzMxcTAgLTExOCAtNDUuNSAtMjI0LjV0LTEyMyAtMTg0dC0xODQgLTEyM3QtMjI0LjUgLTQ1LjV0LTIyNC41IDQ1LjV0LTE4NCAxMjN0LTEyMyAxODR0LTQ1LjUgMjI0LjUgek01MDAgNzUwcTAgLTIxIDE0LjUgLTM1LjV0MzUuNSAtMTQuNWgxMDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djQwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di00MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTg7IiBkPSJNMTAwIDFoMjAwdjMwMGgtMjAwdi0zMDB6TTQwMCAxdjUwMGgyMDB2LTUwMGgtMjAwek03MDAgMXY4MDBoMjAwdi04MDBoLTIwMHpNMTAwMCAxdjEyMDBoMjAwdi0xMjAwaC0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTk7IiBkPSJNMjYgNjAxcTAgLTMzIDYgLTc0bDE1MSAtMzhsMiAtNnExNCAtNDkgMzggLTkzbDMgLTVsLTgwIC0xMzRxNDUgLTU5IDEwNSAtMTA1bDEzMyA4MWw1IC0zcTQ1IC0yNiA5NCAtMzlsNSAtMmwzOCAtMTUxcTQwIC01IDc0IC01cTI3IDAgNzQgNWwzOCAxNTFsNiAycTQ2IDEzIDkzIDM5bDUgM2wxMzQgLTgxcTU2IDQ0IDEwNCAxMDVsLTgwIDEzNGwzIDVxMjQgNDQgMzkgOTNsMSA2bDE1MiAzOHE1IDQwIDUgNzRxMCAyOCAtNSA3M2wtMTUyIDM4IGwtMSA2cS0xNiA1MSAtMzkgOTNsLTMgNWw4MCAxMzRxLTQ0IDU4IC0xMDQgMTA1bC0xMzQgLTgxbC01IDNxLTQ1IDI1IC05MyAzOWwtNiAxbC0zOCAxNTJxLTQwIDUgLTc0IDVxLTI3IDAgLTc0IC01bC0zOCAtMTUybC01IC0xcS01MCAtMTQgLTk0IC0zOWwtNSAtM2wtMTMzIDgxcS01OSAtNDcgLTEwNSAtMTA1bDgwIC0xMzRsLTMgLTVxLTI1IC00NyAtMzggLTkzbC0yIC02bC0xNTEgLTM4cS02IC00OCAtNiAtNzN6TTM4NSA2MDEgcTAgODggNjMgMTUxdDE1MiA2M3QxNTIgLTYzdDYzIC0xNTFxMCAtODkgLTYzIC0xNTJ0LTE1MiAtNjN0LTE1MiA2M3QtNjMgMTUyeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDIwOyIgZD0iTTEwMCAxMDI1djUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMjc1djEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBoMjc1cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTEgLTcgLTE4dC0xOCAtN2gtMTA1MHEtMTEgMCAtMTggN3QtNyAxOHpNMjAwIDEwMHY4MDBoOTAwdi04MDBxMCAtNDEgLTI5LjUgLTcxdC03MC41IC0zMGgtNzAwcS00MSAwIC03MC41IDMwIHQtMjkuNSA3MXpNMzAwIDEwMGgxMDB2NzAwaC0xMDB2LTcwMHpNNTAwIDEwMGgxMDB2NzAwaC0xMDB2LTcwMHpNNTAwIDExMDBoMzAwdjEwMGgtMzAwdi0xMDB6TTcwMCAxMDBoMTAwdjcwMGgtMTAwdi03MDB6TTkwMCAxMDBoMTAwdjcwMGgtMTAwdi03MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjE7IiBkPSJNMSA2MDFsNjU2IDY0NGw2NDQgLTY0NGgtMjAwdi02MDBoLTMwMHY0MDBoLTMwMHYtNDAwaC0zMDB2NjAwaC0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjI7IiBkPSJNMTAwIDI1djExNTBxMCAxMSA3IDE4dDE4IDdoNDc1di01MDBoNDAwdi02NzVxMCAtMTEgLTcgLTE4dC0xOCAtN2gtODUwcS0xMSAwIC0xOCA3dC03IDE4ek03MDAgODAwdjMwMGwzMDAgLTMwMGgtMzAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDIzOyIgZD0iTTQgNjAwcTAgMTYyIDgwIDI5OXQyMTcgMjE3dDI5OSA4MHQyOTkgLTgwdDIxNyAtMjE3dDgwIC0yOTl0LTgwIC0yOTl0LTIxNyAtMjE3dC0yOTkgLTgwdC0yOTkgODB0LTIxNyAyMTd0LTgwIDI5OXpNMTg2IDYwMHEwIC0xNzEgMTIxLjUgLTI5Mi41dDI5Mi41IC0xMjEuNXQyOTIuNSAxMjEuNXQxMjEuNSAyOTIuNXQtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNNTAwIDUwMHY0MDBoMTAwIHYtMzAwaDIwMHYtMTAwaC0zMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjQ7IiBkPSJNLTEwMCAwbDQzMSAxMjAwaDIwOWwtMjEgLTMwMGgxNjJsLTIwIDMwMGgyMDhsNDMxIC0xMjAwaC01MzhsLTQxIDQwMGgtMjQybC00MCAtNDAwaC01Mzl6TTQ4OCA1MDBoMjI0bC0yNyAzMDBoLTE3MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNTsiIGQ9Ik0wIDB2NDAwaDQ5MGwtMjkwIDMwMGgyMDB2NTAwaDMwMHYtNTAwaDIwMGwtMjkwIC0zMDBoNDkwdi00MDBoLTExMDB6TTgxMyAyMDBoMTc1djEwMGgtMTc1di0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjY7IiBkPSJNMSA2MDBxMCAxMjIgNDcuNSAyMzN0MTI3LjUgMTkxdDE5MSAxMjcuNXQyMzMgNDcuNXQyMzMgLTQ3LjV0MTkxIC0xMjcuNXQxMjcuNSAtMTkxdDQ3LjUgLTIzM3QtNDcuNSAtMjMzdC0xMjcuNSAtMTkxdC0xOTEgLTEyNy41dC0yMzMgLTQ3LjV0LTIzMyA0Ny41dC0xOTEgMTI3LjV0LTEyNy41IDE5MXQtNDcuNSAyMzN6TTE4OCA2MDBxMCAtMTcwIDEyMSAtMjkxdDI5MSAtMTIxdDI5MSAxMjF0MTIxIDI5MXQtMTIxIDI5MXQtMjkxIDEyMSB0LTI5MSAtMTIxdC0xMjEgLTI5MXpNMzUwIDYwMGgxNTB2MzAwaDIwMHYtMzAwaDE1MGwtMjUwIC0zMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjc7IiBkPSJNNCA2MDBxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODYgNjAwcTAgLTE3MSAxMjEuNSAtMjkyLjV0MjkyLjUgLTEyMS41dDI5Mi41IDEyMS41dDEyMS41IDI5Mi41dC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek0zNTAgNjAwbDI1MCAzMDAgbDI1MCAtMzAwaC0xNTB2LTMwMGgtMjAwdjMwMGgtMTUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDI4OyIgZD0iTTAgMjV2NDc1bDIwMCA3MDBoODAwcTE5OSAtNzAwIDIwMCAtNzAwdi00NzVxMCAtMTEgLTcgLTE4dC0xOCAtN2gtMTE1MHEtMTEgMCAtMTggN3QtNyAxOHpNMjAwIDUwMGgyMDBsNTAgLTIwMGgzMDBsNTAgMjAwaDIwMGwtOTcgNTAwaC02MDZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjk7IiBkPSJNNCA2MDBxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODYgNjAwcTAgLTE3MiAxMjEuNSAtMjkzdDI5Mi41IC0xMjF0MjkyLjUgMTIxdDEyMS41IDI5M3EwIDE3MSAtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNNTAwIDM5N3Y0MDEgbDI5NyAtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDMwOyIgZD0iTTIzIDYwMHEwIC0xMTggNDUuNSAtMjI0LjV0MTIzIC0xODR0MTg0IC0xMjN0MjI0LjUgLTQ1LjV0MjI0LjUgNDUuNXQxODQgMTIzdDEyMyAxODR0NDUuNSAyMjQuNWgtMTUwcTAgLTE3NyAtMTI1IC0zMDJ0LTMwMiAtMTI1dC0zMDIgMTI1dC0xMjUgMzAydDEyNSAzMDJ0MzAyIDEyNXExMzYgMCAyNDYgLTgxbC0xNDYgLTE0Nmg0MDB2NDAwbC0xNDUgLTE0NXEtMTU3IDEyMiAtMzU1IDEyMnEtMTE4IDAgLTIyNC41IC00NS41dC0xODQgLTEyMyB0LTEyMyAtMTg0dC00NS41IC0yMjQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAzMTsiIGQ9Ik0yMyA2MDBxMCAxMTggNDUuNSAyMjQuNXQxMjMgMTg0dDE4NCAxMjN0MjI0LjUgNDUuNXExOTggMCAzNTUgLTEyMmwxNDUgMTQ1di00MDBoLTQwMGwxNDcgMTQ3cS0xMTIgODAgLTI0NyA4MHEtMTc3IDAgLTMwMiAtMTI1dC0xMjUgLTMwMmgtMTUwek0xMDAgMHY0MDBoNDAwbC0xNDcgLTE0N3ExMTIgLTgwIDI0NyAtODBxMTc3IDAgMzAyIDEyNXQxMjUgMzAyaDE1MHEwIC0xMTggLTQ1LjUgLTIyNC41dC0xMjMgLTE4NHQtMTg0IC0xMjMgdC0yMjQuNSAtNDUuNXEtMTk4IDAgLTM1NSAxMjJ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMzI7IiBkPSJNMTAwIDBoMTEwMHYxMjAwaC0xMTAwdi0xMjAwek0yMDAgMTAwdjkwMGg5MDB2LTkwMGgtOTAwek0zMDAgMjAwdjEwMGgxMDB2LTEwMGgtMTAwek0zMDAgNDAwdjEwMGgxMDB2LTEwMGgtMTAwek0zMDAgNjAwdjEwMGgxMDB2LTEwMGgtMTAwek0zMDAgODAwdjEwMGgxMDB2LTEwMGgtMTAwek01MDAgMjAwaDUwMHYxMDBoLTUwMHYtMTAwek01MDAgNDAwdjEwMGg1MDB2LTEwMGgtNTAwek01MDAgNjAwdjEwMGg1MDB2LTEwMGgtNTAweiBNNTAwIDgwMHYxMDBoNTAwdi0xMDBoLTUwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAzMzsiIGQ9Ik0wIDEwMHY2MDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDEwMHYyMDBxMCA4MiA1OSAxNDF0MTQxIDU5aDMwMHE4MiAwIDE0MSAtNTl0NTkgLTE0MXYtMjAwaDEwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC05MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41ek00MDAgODAwaDMwMHYxNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTIwMCBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTE1MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNDsiIGQ9Ik0xMDAgMHYxMTAwaDEwMHYtMTEwMGgtMTAwek0zMDAgNDAwcTYwIDYwIDEyNy41IDg0dDEyNy41IDE3LjV0MTIyIC0yM3QxMTkgLTMwdDExMCAtMTF0MTAzIDQydDkxIDEyMC41djUwMHEtNDAgLTgxIC0xMDEuNSAtMTE1LjV0LTEyNy41IC0yOS41dC0xMzggMjV0LTEzOS41IDQwdC0xMjUuNSAyNXQtMTAzIC0yOS41dC02NSAtMTE1LjV2LTUwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNTsiIGQ9Ik0wIDI3NXEwIC0xMSA3IC0xOHQxOCAtN2g1MHExMSAwIDE4IDd0NyAxOHYzMDBxMCAxMjcgNzAuNSAyMzEuNXQxODQuNSAxNjEuNXQyNDUgNTd0MjQ1IC01N3QxODQuNSAtMTYxLjV0NzAuNSAtMjMxLjV2LTMwMHEwIC0xMSA3IC0xOHQxOCAtN2g1MHExMSAwIDE4IDd0NyAxOHYzMDBxMCAxMTYgLTQ5LjUgMjI3dC0xMzEgMTkyLjV0LTE5Mi41IDEzMXQtMjI3IDQ5LjV0LTIyNyAtNDkuNXQtMTkyLjUgLTEzMXQtMTMxIC0xOTIuNSB0LTQ5LjUgLTIyN3YtMzAwek0yMDAgMjB2NDYwcTAgOCA2IDE0dDE0IDZoMTYwcTggMCAxNCAtNnQ2IC0xNHYtNDYwcTAgLTggLTYgLTE0dC0xNCAtNmgtMTYwcS04IDAgLTE0IDZ0LTYgMTR6TTgwMCAyMHY0NjBxMCA4IDYgMTR0MTQgNmgxNjBxOCAwIDE0IC02dDYgLTE0di00NjBxMCAtOCAtNiAtMTR0LTE0IC02aC0xNjBxLTggMCAtMTQgNnQtNiAxNHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNjsiIGQ9Ik0wIDQwMGgzMDBsMzAwIC0yMDB2ODAwbC0zMDAgLTIwMGgtMzAwdi00MDB6TTY4OCA0NTlsMTQxIDE0MWwtMTQxIDE0MWw3MSA3MWwxNDEgLTE0MWwxNDEgMTQxbDcxIC03MWwtMTQxIC0xNDFsMTQxIC0xNDFsLTcxIC03MWwtMTQxIDE0MWwtMTQxIC0xNDF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMzc7IiBkPSJNMCA0MDBoMzAwbDMwMCAtMjAwdjgwMGwtMzAwIC0yMDBoLTMwMHYtNDAwek03MDAgODU3bDY5IDUzcTExMSAtMTM1IDExMSAtMzEwcTAgLTE2OSAtMTA2IC0zMDJsLTY3IDU0cTg2IDExMCA4NiAyNDhxMCAxNDYgLTkzIDI1N3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAzODsiIGQ9Ik0wIDQwMXY0MDBoMzAwbDMwMCAyMDB2LTgwMGwtMzAwIDIwMGgtMzAwek03MDIgODU4bDY5IDUzcTExMSAtMTM1IDExMSAtMzEwcTAgLTE3MCAtMTA2IC0zMDNsLTY3IDU1cTg2IDExMCA4NiAyNDhxMCAxNDUgLTkzIDI1N3pNODg5IDk1MWw3IC04cTEyMyAtMTUxIDEyMyAtMzQ0cTAgLTE4OSAtMTE5IC0zMzlsLTcgLThsODEgLTY2bDYgOHExNDIgMTc4IDE0MiA0MDVxMCAyMzAgLTE0NCA0MDhsLTYgOHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAzOTsiIGQ9Ik0wIDBoNTAwdjUwMGgtMjAwdjEwMGgtMTAwdi0xMDBoLTIwMHYtNTAwek0wIDYwMGgxMDB2MTAwaDQwMHYxMDBoMTAwdjEwMGgtMTAwdjMwMGgtNTAwdi02MDB6TTEwMCAxMDB2MzAwaDMwMHYtMzAwaC0zMDB6TTEwMCA4MDB2MzAwaDMwMHYtMzAwaC0zMDB6TTIwMCAyMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTIwMCA5MDBoMTAwdjEwMGgtMTAwdi0xMDB6TTUwMCA1MDB2MTAwaDMwMHYtMzAwaDIwMHYtMTAwaC0xMDB2LTEwMGgtMjAwdjEwMCBoLTEwMHYxMDBoMTAwdjIwMGgtMjAwek02MDAgMHYxMDBoMTAwdi0xMDBoLTEwMHpNNjAwIDEwMDBoMTAwdi0zMDBoMjAwdi0zMDBoMzAwdjIwMGgtMjAwdjEwMGgyMDB2NTAwaC02MDB2LTIwMHpNODAwIDgwMHYzMDBoMzAwdi0zMDBoLTMwMHpNOTAwIDB2MTAwaDMwMHYtMTAwaC0zMDB6TTkwMCA5MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTExMDAgMjAwdjEwMGgxMDB2LTEwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQwOyIgZD0iTTAgMjAwaDEwMHYxMDAwaC0xMDB2LTEwMDB6TTEwMCAwdjEwMGgzMDB2LTEwMGgtMzAwek0yMDAgMjAwdjEwMDBoMTAwdi0xMDAwaC0xMDB6TTUwMCAwdjkxaDEwMHYtOTFoLTEwMHpNNTAwIDIwMHYxMDAwaDIwMHYtMTAwMGgtMjAwek03MDAgMHY5MWgxMDB2LTkxaC0xMDB6TTgwMCAyMDB2MTAwMGgxMDB2LTEwMDBoLTEwMHpNOTAwIDB2OTFoMjAwdi05MWgtMjAwek0xMDAwIDIwMHYxMDAwaDIwMHYtMTAwMGgtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQxOyIgZD0iTTEgNzAwdjQ3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDQ3NGw3MDAgLTcwMGwtNTAwIC01MDB6TTE0OCA5NTNxMCAtNDIgMjkgLTcxcTMwIC0zMCA3MS41IC0zMHQ3MS41IDMwcTI5IDI5IDI5IDcxdC0yOSA3MXEtMzAgMzAgLTcxLjUgMzB0LTcxLjUgLTMwcS0yOSAtMjkgLTI5IC03MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA0MjsiIGQ9Ik0yIDcwMHY0NzVxMCAxMSA3IDE4dDE4IDdoNDc0bDcwMCAtNzAwbC01MDAgLTUwMHpNMTQ4IDk1M3EwIC00MiAzMCAtNzFxMjkgLTMwIDcxIC0zMHQ3MSAzMHEzMCAyOSAzMCA3MXQtMzAgNzFxLTI5IDMwIC03MSAzMHQtNzEgLTMwcS0zMCAtMjkgLTMwIC03MXpNNzAxIDEyMDBoMTAwbDcwMCAtNzAwbC01MDAgLTUwMGwtNTAgNTBsNDUwIDQ1MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA0MzsiIGQ9Ik0xMDAgMHYxMDI1bDE3NSAxNzVoOTI1di0xMDAwbC0xMDAgLTEwMHYxMDAwaC03NTBsLTEwMCAtMTAwaDc1MHYtMTAwMGgtOTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQ0OyIgZD0iTTIwMCAwbDQ1MCA0NDRsNDUwIC00NDN2MTE1MHEwIDIwIC0xNC41IDM1dC0zNS41IDE1aC04MDBxLTIxIDAgLTM1LjUgLTE1dC0xNC41IC0zNXYtMTE1MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NTsiIGQ9Ik0wIDEwMHY3MDBoMjAwbDEwMCAtMjAwaDYwMGwxMDAgMjAwaDIwMHYtNzAwaC0yMDB2MjAwaC04MDB2LTIwMGgtMjAwek0yNTMgODI5bDQwIC0xMjRoNTkybDYyIDEyNGwtOTQgMzQ2cS0yIDExIC0xMCAxOHQtMTggN2gtNDUwcS0xMCAwIC0xOCAtN3QtMTAgLTE4ek0yODEgMjRsMzggMTUycTIgMTAgMTEuNSAxN3QxOS41IDdoNTAwcTEwIDAgMTkuNSAtN3QxMS41IC0xN2wzOCAtMTUycTIgLTEwIC0zLjUgLTE3dC0xNS41IC03aC02MDAgcS0xMCAwIC0xNS41IDd0LTMuNSAxN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NjsiIGQ9Ik0wIDIwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoMTAwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NjAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC0xNTBxLTQgOCAtMTEuNSAyMS41dC0zMyA0OHQtNTMgNjF0LTY5IDQ4dC04My41IDIxLjVoLTIwMHEtNDEgMCAtODIgLTIwLjV0LTcwIC01MHQtNTIgLTU5dC0zNCAtNTAuNWwtMTIgLTIwaC0xNTBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTYwMHogTTM1NiA1MDBxMCAxMDAgNzIgMTcydDE3MiA3MnQxNzIgLTcydDcyIC0xNzJ0LTcyIC0xNzJ0LTE3MiAtNzJ0LTE3MiA3MnQtNzIgMTcyek00OTQgNTAwcTAgLTQ0IDMxIC03NXQ3NSAtMzF0NzUgMzF0MzEgNzV0LTMxIDc1dC03NSAzMXQtNzUgLTMxdC0zMSAtNzV6TTkwMCA3MDB2MTAwaDEwMHYtMTAwaC0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNDc7IiBkPSJNNTMgMGgzNjV2NjZxLTQxIDAgLTcyIDExdC00OSAzOHQxIDcxbDkyIDIzNGgzOTFsODIgLTIyMnExNiAtNDUgLTUuNSAtODguNXQtNzQuNSAtNDMuNXYtNjZoNDE3djY2cS0zNCAxIC03NCA0M3EtMTggMTkgLTMzIDQydC0yMSAzN2wtNiAxM2wtMzg1IDk5OGgtOTNsLTM5OSAtMTAwNnEtMjQgLTQ4IC01MiAtNzVxLTEyIC0xMiAtMzMgLTI1dC0zNiAtMjBsLTE1IC03di02NnpNNDE2IDUyMWwxNzggNDU3bDQ2IC0xNDBsMTE2IC0zMTdoLTM0MCB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNDg7IiBkPSJNMTAwIDB2ODlxNDEgNyA3MC41IDMyLjV0MjkuNSA2NS41djgyN3EwIDI4IC0xIDM5LjV0LTUuNSAyNnQtMTUuNSAyMXQtMjkgMTR0LTQ5IDE0LjV2NzBoNDcxcTEyMCAwIDIxMyAtODh0OTMgLTIyOHEwIC01NSAtMTEuNSAtMTAxLjV0LTI4IC03NHQtMzMuNSAtNDcuNXQtMjggLTI4bC0xMiAtN3E4IC0zIDIxLjUgLTl0NDggLTMxLjV0NjAuNSAtNTh0NDcuNSAtOTEuNXQyMS41IC0xMjlxMCAtODQgLTU5IC0xNTYuNXQtMTQyIC0xMTEgdC0xNjIgLTM4LjVoLTUwMHpNNDAwIDIwMGgxNjFxODkgMCAxNTMgNDguNXQ2NCAxMzIuNXEwIDkwIC02Mi41IDE1NC41dC0xNTYuNSA2NC41aC0xNTl2LTQwMHpNNDAwIDcwMGgxMzlxNzYgMCAxMzAgNjEuNXQ1NCAxMzguNXEwIDgyIC04NCAxMzAuNXQtMjM5IDQ4LjV2LTM3OXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA0OTsiIGQ9Ik0yMDAgMHY1N3E3NyA3IDEzNC41IDQwLjV0NjUuNSA4MC41bDE3MyA4NDlxMTAgNTYgLTEwIDc0dC05MSAzN3EtNiAxIC0xMC41IDIuNXQtOS41IDIuNXY1N2g0MjVsMiAtNTdxLTMzIC04IC02MiAtMjUuNXQtNDYgLTM3dC0yOS41IC0zOHQtMTcuNSAtMzAuNWwtNSAtMTJsLTEyOCAtODI1cS0xMCAtNTIgMTQgLTgydDk1IC0zNnYtNTdoLTUwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MDsiIGQ9Ik0tNzUgMjAwaDc1djgwMGgtNzVsMTI1IDE2N2wxMjUgLTE2N2gtNzV2LTgwMGg3NWwtMTI1IC0xNjd6TTMwMCA5MDB2MzAwaDE1MGg3MDBoMTUwdi0zMDBoLTUwcTAgMjkgLTggNDguNXQtMTguNSAzMHQtMzMuNSAxNXQtMzkuNSA1LjV0LTUwLjUgMWgtMjAwdi04NTBsMTAwIC01MHYtMTAwaC00MDB2MTAwbDEwMCA1MHY4NTBoLTIwMHEtMzQgMCAtNTAuNSAtMXQtNDAgLTUuNXQtMzMuNSAtMTV0LTE4LjUgLTMwdC04LjUgLTQ4LjVoLTQ5eiAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MTsiIGQ9Ik0zMyA1MWwxNjcgMTI1di03NWg4MDB2NzVsMTY3IC0xMjVsLTE2NyAtMTI1djc1aC04MDB2LTc1ek0xMDAgOTAxdjMwMGgxNTBoNzAwaDE1MHYtMzAwaC01MHEwIDI5IC04IDQ4LjV0LTE4IDMwdC0zMy41IDE1dC00MCA1LjV0LTUwLjUgMWgtMjAwdi02NTBsMTAwIC01MHYtMTAwaC00MDB2MTAwbDEwMCA1MHY2NTBoLTIwMHEtMzQgMCAtNTAuNSAtMXQtMzkuNSAtNS41dC0zMy41IC0xNXQtMTguNSAtMzB0LTggLTQ4LjVoLTUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDUyOyIgZD0iTTAgNTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoMTEwMHEyMSAwIDM1LjUgMTV0MTQuNSAzNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTExMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNMCAzNTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoODAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtODAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41IHYtMTAwek0wIDY1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMDAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek0wIDk1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg2MDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC02MDBxLTIxIDAgLTM1LjUgLTE0LjUgdC0xNC41IC0zNS41di0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNTM7IiBkPSJNMCA1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMTAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek0wIDY1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMTAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNSB2LTEwMHpNMjAwIDM1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg3MDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC03MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNMjAwIDk1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg3MDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC03MDBxLTIxIDAgLTM1LjUgLTE0LjUgdC0xNC41IC0zNS41di0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNTQ7IiBkPSJNMCA1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC0xMTAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1ek0xMDAgNjUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTEwMDBxLTIxIDAgLTM1LjUgMTUgdC0xNC41IDM1ek0zMDAgMzUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtODAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1ek01MDAgOTUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtNjAwIHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA1NTsiIGQ9Ik0wIDUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTExMDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTAgMzUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTExMDBxLTIxIDAgLTM1LjUgMTUgdC0xNC41IDM1ek0wIDY1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC0xMTAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1ek0wIDk1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC0xMTAwIHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA1NjsiIGQ9Ik0wIDUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1ek0wIDM1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTEwMHEtMjEgMCAtMzUuNSAxNSB0LTE0LjUgMzV6TTAgNjUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1ek0wIDk1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTEwMHEtMjEgMCAtMzUuNSAxNSB0LTE0LjUgMzV6TTMwMCA1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTgwMHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXpNMzAwIDM1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTgwMCBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTMwMCA2NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC04MDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTMwMCA5NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1IGgtODAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDU3OyIgZD0iTS0xMDEgNTAwdjEwMGgyMDF2NzVsMTY2IC0xMjVsLTE2NiAtMTI1djc1aC0yMDF6TTMwMCAwaDEwMHYxMTAwaC0xMDB2LTExMDB6TTUwMCA1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg2MDBxMjAgMCAzNSAxNXQxNSAzNXYxMDBxMCAyMSAtMTUgMzUuNXQtMzUgMTQuNWgtNjAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTUwMCAzNTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoMzAwcTIwIDAgMzUgMTV0MTUgMzUgdjEwMHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC0zMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNNTAwIDY1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg1MDBxMjAgMCAzNSAxNXQxNSAzNXYxMDBxMCAyMSAtMTUgMzUuNXQtMzUgMTQuNWgtNTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTUwMCA5NTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoMTAwcTIwIDAgMzUgMTV0MTUgMzV2MTAwIHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC0xMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA1ODsiIGQ9Ik0xIDUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDYwMHEyMCAwIDM1IDE1dDE1IDM1djEwMHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC02MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNMSAzNTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoMzAwcTIwIDAgMzUgMTV0MTUgMzV2MTAwcTAgMjEgLTE1IDM1LjV0LTM1IDE0LjVoLTMwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek0xIDY1MCBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoNTAwcTIwIDAgMzUgMTV0MTUgMzV2MTAwcTAgMjEgLTE1IDM1LjV0LTM1IDE0LjVoLTUwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek0xIDk1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMDBxMjAgMCAzNSAxNXQxNSAzNXYxMDBxMCAyMSAtMTUgMzUuNXQtMzUgMTQuNWgtMTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTgwMSAwdjExMDBoMTAwdi0xMTAwIGgtMTAwek05MzQgNTUwbDE2NyAtMTI1djc1aDIwMHYxMDBoLTIwMHY3NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA1OTsiIGQ9Ik0wIDI3NXY2NTBxMCAzMSAyMiA1M3Q1MyAyMmg3NTBxMzEgMCA1MyAtMjJ0MjIgLTUzdi02NTBxMCAtMzEgLTIyIC01M3QtNTMgLTIyaC03NTBxLTMxIDAgLTUzIDIydC0yMiA1M3pNOTAwIDYwMGwzMDAgMzAwdi02MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNjA7IiBkPSJNMCA0NHYxMDEycTAgMTggMTMgMzF0MzEgMTNoMTExMnExOSAwIDMxLjUgLTEzdDEyLjUgLTMxdi0xMDEycTAgLTE4IC0xMi41IC0zMXQtMzEuNSAtMTNoLTExMTJxLTE4IDAgLTMxIDEzdC0xMyAzMXpNMTAwIDI2M2wyNDcgMTgybDI5OCAtMTMxbC03NCAxNTZsMjkzIDMxOGwyMzYgLTI4OHY1MDBoLTEwMDB2LTczN3pNMjA4IDc1MHEwIDU2IDM5IDk1dDk1IDM5dDk1IC0zOXQzOSAtOTV0LTM5IC05NXQtOTUgLTM5dC05NSAzOXQtMzkgOTV6ICIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDYyOyIgZD0iTTE0OCA3NDVxMCAxMjQgNjAuNSAyMzEuNXQxNjUgMTcydDIyNi41IDY0LjVxMTIzIDAgMjI3IC02M3QxNjQuNSAtMTY5LjV0NjAuNSAtMjI5LjV0LTczIC0yNzJxLTczIC0xMTQgLTE2Ni41IC0yMzd0LTE1MC41IC0xODlsLTU3IC02NnEtMTAgOSAtMjcgMjZ0LTY2LjUgNzAuNXQtOTYgMTA5dC0xMDQgMTM1LjV0LTEwMC41IDE1NXEtNjMgMTM5IC02MyAyNjJ6TTM0MiA3NzJxMCAtMTA3IDc1LjUgLTE4Mi41dDE4MS41IC03NS41IHExMDcgMCAxODIuNSA3NS41dDc1LjUgMTgyLjV0LTc1LjUgMTgydC0xODIuNSA3NXQtMTgyIC03NS41dC03NSAtMTgxLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNjM7IiBkPSJNMSA2MDBxMCAxMjIgNDcuNSAyMzN0MTI3LjUgMTkxdDE5MSAxMjcuNXQyMzMgNDcuNXQyMzMgLTQ3LjV0MTkxIC0xMjcuNXQxMjcuNSAtMTkxdDQ3LjUgLTIzM3QtNDcuNSAtMjMzdC0xMjcuNSAtMTkxdC0xOTEgLTEyNy41dC0yMzMgLTQ3LjV0LTIzMyA0Ny41dC0xOTEgMTI3LjV0LTEyNy41IDE5MXQtNDcuNSAyMzN6TTE3MyA2MDBxMCAtMTc3IDEyNS41IC0zMDJ0MzAxLjUgLTEyNXY4NTRxLTE3NiAwIC0zMDEuNSAtMTI1IHQtMTI1LjUgLTMwMnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA2NDsiIGQ9Ik0xMTcgNDA2cTAgOTQgMzQgMTg2dDg4LjUgMTcyLjV0MTEyIDE1OXQxMTUgMTc3dDg3LjUgMTk0LjVxMjEgLTcxIDU3LjUgLTE0Mi41dDc2IC0xMzAuNXQ4MyAtMTE4LjV0ODIgLTExN3Q3MCAtMTE2dDUwIC0xMjUuNXQxOC41IC0xMzZxMCAtODkgLTM5IC0xNjUuNXQtMTAyIC0xMjYuNXQtMTQwIC03OS41dC0xNTYgLTMzLjVxLTExNCA2IC0yMTEuNSA1M3QtMTYxLjUgMTM4LjV0LTY0IDIxMC41ek0yNDMgNDE0cTE0IC04MiA1OS41IC0xMzYgdDEzNi41IC04MGwxNiA5OHEtNyA2IC0xOCAxN3QtMzQgNDh0LTMzIDc3cS0xNSA3MyAtMTQgMTQzLjV0MTAgMTIyLjVsOSA1MXEtOTIgLTExMCAtMTE5LjUgLTE4NXQtMTIuNSAtMTU2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDY1OyIgZD0iTTAgNDAwdjMwMHEwIDE2NSAxMTcuNSAyODIuNXQyODIuNSAxMTcuNXEzNjYgLTYgMzk3IC0xNGwtMTg2IC0xODZoLTMxMXEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djEyNWwyMDAgMjAwdi0yMjVxMCAtMTY1IC0xMTcuNSAtMjgyLjV0LTI4Mi41IC0xMTcuNWgtMzAwcS0xNjUgMCAtMjgyLjUgMTE3LjUgdC0xMTcuNSAyODIuNXpNNDM2IDM0MWwxNjEgNTBsNDEyIDQxMmwtMTE0IDExM2wtNDA1IC00MDV6TTk5NSAxMDE1bDExMyAtMTEzbDExMyAxMTNsLTIxIDg1bC05MiAyOHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA2NjsiIGQ9Ik0wIDQwMHYzMDBxMCAxNjUgMTE3LjUgMjgyLjV0MjgyLjUgMTE3LjVoMjYxbDIgLTgwcS0xMzMgLTMyIC0yMTggLTEyMGgtMTQ1cS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjVsMjAwIDE1M3YtNTNxMCAtMTY1IC0xMTcuNSAtMjgyLjV0LTI4Mi41IC0xMTcuNWgtMzAwcS0xNjUgMCAtMjgyLjUgMTE3LjV0LTExNy41IDI4Mi41IHpNNDIzIDUyNHEzMCAzOCA4MS41IDY0dDEwMyAzNS41dDk5IDE0dDc3LjUgMy41bDI5IC0xdi0yMDlsMzYwIDMyNGwtMzU5IDMxOHYtMjE2cS03IDAgLTE5IC0xdC00OCAtOHQtNjkuNSAtMTguNXQtNzYuNSAtMzd0LTc2LjUgLTU5dC02MiAtODh0LTM5LjUgLTEyMS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDY3OyIgZD0iTTAgNDAwdjMwMHEwIDE2NSAxMTcuNSAyODIuNXQyODIuNSAxMTcuNWgzMDBxNjAgMCAxMjcgLTIzbC0xNzggLTE3N2gtMzQ5cS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NjlsMjAwIDIwMHYtMTY5cTAgLTE2NSAtMTE3LjUgLTI4Mi41dC0yODIuNSAtMTE3LjVoLTMwMHEtMTY1IDAgLTI4Mi41IDExNy41IHQtMTE3LjUgMjgyLjV6TTM0MiA2MzJsMjgzIC0yODRsNTY2IDU2N2wtMTM2IDEzN2wtNDMwIC00MzFsLTE0NyAxNDd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNjg7IiBkPSJNMCA2MDNsMzAwIDI5NnYtMTk4aDIwMHYyMDBoLTIwMGwzMDAgMzAwbDI5NSAtMzAwaC0xOTV2LTIwMGgyMDB2MTk4bDMwMCAtMjk2bC0zMDAgLTMwMHYxOThoLTIwMHYtMjAwaDE5NWwtMjk1IC0zMDBsLTMwMCAzMDBoMjAwdjIwMGgtMjAwdi0xOTh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNjk7IiBkPSJNMjAwIDUwdjEwMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDM3bDUwMCA0ODd2LTExMDBsLTUwMCA0ODh2LTQzOHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3MDsiIGQ9Ik0wIDUwdjEwMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDM3bDUwMCA0ODd2LTQ4N2w1MDAgNDg3di0xMTAwbC01MDAgNDg4di00ODhsLTUwMCA0ODh2LTQzOHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3MTsiIGQ9Ik0xMzYgNTUwbDU2NCA1NTB2LTQ4N2w1MDAgNDg3di0xMTAwbC01MDAgNDg4di00ODh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNzI7IiBkPSJNMjAwIDBsOTAwIDU1MGwtOTAwIDU1MHYtMTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3MzsiIGQ9Ik0yMDAgMTUwcTAgLTIxIDE0LjUgLTM1LjV0MzUuNSAtMTQuNWgyMDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djgwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMjAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di04MDB6TTYwMCAxNTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41aDIwMHEyMSAwIDM1LjUgMTQuNXQxNC41IDM1LjV2ODAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0yMDAgcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di04MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNzQ7IiBkPSJNMjAwIDE1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg4MDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2ODAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC04MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTgwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NTsiIGQ9Ik0wIDB2MTEwMGw1MDAgLTQ4N3Y0ODdsNTY0IC01NTBsLTU2NCAtNTUwdjQ4OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NjsiIGQ9Ik0wIDB2MTEwMGw1MDAgLTQ4N3Y0ODdsNTAwIC00ODd2NDM3cTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDM4bC01MDAgLTQ4OHY0ODh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNzc7IiBkPSJNMzAwIDB2MTEwMGw1MDAgLTQ4N3Y0MzdxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0Mzh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNzg7IiBkPSJNMTAwIDI1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTEwMCA1MDBoMTEwMGwtNTUwIDU2NHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3OTsiIGQ9Ik0xODUgNTk5bDU5MiAtNTkybDI0MCAyNDBsLTM1MyAzNTNsMzUzIDM1M2wtMjQwIDI0MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4MDsiIGQ9Ik0yNzIgMTk0bDM1MyAzNTNsLTM1MyAzNTNsMjQxIDI0MGw1NzIgLTU3MWwyMSAtMjJsLTEgLTF2LTFsLTU5MiAtNTkxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDgxOyIgZD0iTTMgNjAwcTAgMTYyIDgwIDI5OS41dDIxNy41IDIxNy41dDI5OS41IDgwdDI5OS41IC04MHQyMTcuNSAtMjE3LjV0ODAgLTI5OS41dC04MCAtMzAwdC0yMTcuNSAtMjE4dC0yOTkuNSAtODB0LTI5OS41IDgwdC0yMTcuNSAyMTh0LTgwIDMwMHpNMzAwIDUwMGgyMDB2LTIwMGgyMDB2MjAwaDIwMHYyMDBoLTIwMHYyMDBoLTIwMHYtMjAwaC0yMDB2LTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4MjsiIGQ9Ik0zIDYwMHEwIDE2MiA4MCAyOTkuNXQyMTcuNSAyMTcuNXQyOTkuNSA4MHQyOTkuNSAtODB0MjE3LjUgLTIxNy41dDgwIC0yOTkuNXQtODAgLTMwMHQtMjE3LjUgLTIxOHQtMjk5LjUgLTgwdC0yOTkuNSA4MHQtMjE3LjUgMjE4dC04MCAzMDB6TTMwMCA1MDBoNjAwdjIwMGgtNjAwdi0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwODM7IiBkPSJNMyA2MDBxMCAxNjIgODAgMjk5LjV0MjE3LjUgMjE3LjV0Mjk5LjUgODB0Mjk5LjUgLTgwdDIxNy41IC0yMTcuNXQ4MCAtMjk5LjV0LTgwIC0zMDB0LTIxNy41IC0yMTh0LTI5OS41IC04MHQtMjk5LjUgODB0LTIxNy41IDIxOHQtODAgMzAwek0yNDYgNDU5bDIxMyAtMjEzbDE0MSAxNDJsMTQxIC0xNDJsMjEzIDIxM2wtMTQyIDE0MWwxNDIgMTQxbC0yMTMgMjEybC0xNDEgLTE0MWwtMTQxIDE0MmwtMjEyIC0yMTNsMTQxIC0xNDF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwODQ7IiBkPSJNMyA2MDBxMCAxNjIgODAgMjk5LjV0MjE3LjUgMjE3LjV0Mjk5LjUgODB0Mjk5LjUgLTgwdDIxNy41IC0yMTcuNXQ4MCAtMjk5LjV0LTgwIC0yOTkuNXQtMjE3LjUgLTIxNy41dC0yOTkuNSAtODB0LTI5OS41IDgwdC0yMTcuNSAyMTcuNXQtODAgMjk5LjV6TTI3MCA1NTFsMjc2IC0yNzdsNDExIDQxMWwtMTc1IDE3NGwtMjM2IC0yMzZsLTEwMiAxMDJ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwODU7IiBkPSJNMyA2MDBxMCAxNjIgODAgMjk5LjV0MjE3LjUgMjE3LjV0Mjk5LjUgODB0Mjk5LjUgLTgwdDIxNy41IC0yMTcuNXQ4MCAtMjk5LjV0LTgwIC0zMDB0LTIxNy41IC0yMTh0LTI5OS41IC04MHQtMjk5LjUgODB0LTIxNy41IDIxOHQtODAgMzAwek0zNjMgNzAwaDE0NHE0IDAgMTEuNSAtMXQxMSAtMXQ2LjUgM3QzIDl0MSAxMXQzLjUgOC41dDMuNSA2dDUuNSA0dDYuNSAyLjV0OSAxLjV0OSAwLjVoMTEuNWgxMi41cTE5IDAgMzAgLTEwdDExIC0yNiBxMCAtMjIgLTQgLTI4dC0yNyAtMjJxLTUgLTEgLTEyLjUgLTN0LTI3IC0xMy41dC0zNCAtMjd0LTI2LjUgLTQ2dC0xMSAtNjguNWgyMDBxNSAzIDE0IDh0MzEuNSAyNS41dDM5LjUgNDUuNXQzMSA2OXQxNCA5NHEwIDUxIC0xNy41IDg5dC00MiA1OHQtNTguNSAzMnQtNTguNSAxNXQtNTEuNSAzcS0xMDUgMCAtMTcyIC01NnQtNjcgLTE4M3pNNTAwIDMwMGgyMDB2MTAwaC0yMDB2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NjsiIGQ9Ik0zIDYwMHEwIDE2MiA4MCAyOTkuNXQyMTcuNSAyMTcuNXQyOTkuNSA4MHQyOTkuNSAtODB0MjE3LjUgLTIxNy41dDgwIC0yOTkuNXQtODAgLTMwMHQtMjE3LjUgLTIxOHQtMjk5LjUgLTgwdC0yOTkuNSA4MHQtMjE3LjUgMjE4dC04MCAzMDB6TTQwMCAzMDBoNDAwdjEwMGgtMTAwdjMwMGgtMzAwdi0xMDBoMTAwdi0yMDBoLTEwMHYtMTAwek01MDAgODAwaDIwMHYxMDBoLTIwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDg3OyIgZD0iTTAgNTAwdjIwMGgxOTRxMTUgNjAgMzYgMTA0LjV0NTUuNSA4NnQ4OCA2OXQxMjYuNSA0MC41djIwMGgyMDB2LTIwMHE1NCAtMjAgMTEzIC02MHQxMTIuNSAtMTA1LjV0NzEuNSAtMTM0LjVoMjAzdi0yMDBoLTIwM3EtMjUgLTEwMiAtMTE2LjUgLTE4NnQtMTgwLjUgLTExN3YtMTk3aC0yMDB2MTk3cS0xNDAgMjcgLTIwOCAxMDIuNXQtOTggMjAwLjVoLTE5NHpNMjkwIDUwMHEyNCAtNzMgNzkuNSAtMTI3LjV0MTMwLjUgLTc4LjV2MjA2aDIwMCB2LTIwNnExNDkgNDggMjAxIDIwNmgtMjAxdjIwMGgyMDBxLTI1IDc0IC03NiAxMjcuNXQtMTI0IDc2LjV2LTIwNGgtMjAwdjIwM3EtNzUgLTI0IC0xMzAgLTc3LjV0LTc5IC0xMjUuNWgyMDl2LTIwMGgtMjEweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDg4OyIgZD0iTTQgNjAwcTAgMTYyIDgwIDI5OXQyMTcgMjE3dDI5OSA4MHQyOTkgLTgwdDIxNyAtMjE3dDgwIC0yOTl0LTgwIC0yOTl0LTIxNyAtMjE3dC0yOTkgLTgwdC0yOTkgODB0LTIxNyAyMTd0LTgwIDI5OXpNMTg2IDYwMHEwIC0xNzEgMTIxLjUgLTI5Mi41dDI5Mi41IC0xMjEuNXQyOTIuNSAxMjEuNXQxMjEuNSAyOTIuNXQtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNMzU2IDQ2NWwxMzUgMTM1IGwtMTM1IDEzNWwxMDkgMTA5bDEzNSAtMTM1bDEzNSAxMzVsMTA5IC0xMDlsLTEzNSAtMTM1bDEzNSAtMTM1bC0xMDkgLTEwOWwtMTM1IDEzNWwtMTM1IC0xMzV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwODk7IiBkPSJNNCA2MDBxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODYgNjAwcTAgLTE3MSAxMjEuNSAtMjkyLjV0MjkyLjUgLTEyMS41dDI5Mi41IDEyMS41dDEyMS41IDI5Mi41dC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek0zMjIgNTM3bDE0MSAxNDEgbDg3IC04N2wyMDQgMjA1bDE0MiAtMTQybC0zNDYgLTM0NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA5MDsiIGQ9Ik00IDYwMHEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4NiA2MDBxMCAtMTE1IDYyIC0yMTVsNTY4IDU2N3EtMTAwIDYyIC0yMTYgNjJxLTE3MSAwIC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNMzkxIDI0NXE5NyAtNTkgMjA5IC01OXExNzEgMCAyOTIuNSAxMjEuNXQxMjEuNSAyOTIuNSBxMCAxMTIgLTU5IDIwOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA5MTsiIGQ9Ik0wIDU0N2w2MDAgNDUzdi0zMDBoNjAwdi0zMDBoLTYwMHYtMzAxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDkyOyIgZD0iTTAgNDAwdjMwMGg2MDB2MzAwbDYwMCAtNDUzbC02MDAgLTQ0OHYzMDFoLTYwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA5MzsiIGQ9Ik0yMDQgNjAwbDQ1MCA2MDBsNDQ0IC02MDBoLTI5OHYtNjAwaC0zMDB2NjAwaC0yOTZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwOTQ7IiBkPSJNMTA0IDYwMGgyOTZ2NjAwaDMwMHYtNjAwaDI5OGwtNDQ5IC02MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwOTU7IiBkPSJNMCAyMDBxNiAxMzIgNDEgMjM4LjV0MTAzLjUgMTkzdDE4NCAxMzh0MjcxLjUgNTkuNXYyNzFsNjAwIC00NTNsLTYwMCAtNDQ4djMwMXEtOTUgLTIgLTE4MyAtMjB0LTE3MCAtNTJ0LTE0NyAtOTIuNXQtMTAwIC0xMzUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA5NjsiIGQ9Ik0wIDB2NDAwbDEyOSAtMTI5bDI5NCAyOTRsMTQyIC0xNDJsLTI5NCAtMjk0bDEyOSAtMTI5aC00MDB6TTYzNSA3NzdsMTQyIC0xNDJsMjk0IDI5NGwxMjkgLTEyOXY0MDBoLTQwMGwxMjkgLTEyOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA5NzsiIGQ9Ik0zNCAxNzZsMjk1IDI5NWwtMTI5IDEyOWg0MDB2LTQwMGwtMTI5IDEzMGwtMjk1IC0yOTV6TTYwMCA2MDB2NDAwbDEyOSAtMTI5bDI5NSAyOTVsMTQyIC0xNDFsLTI5NSAtMjk1bDEyOSAtMTMwaC00MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMDE7IiBkPSJNMjMgNjAwcTAgMTE4IDQ1LjUgMjI0LjV0MTIzIDE4NHQxODQgMTIzdDIyNC41IDQ1LjV0MjI0LjUgLTQ1LjV0MTg0IC0xMjN0MTIzIC0xODR0NDUuNSAtMjI0LjV0LTQ1LjUgLTIyNC41dC0xMjMgLTE4NHQtMTg0IC0xMjN0LTIyNC41IC00NS41dC0yMjQuNSA0NS41dC0xODQgMTIzdC0xMjMgMTg0dC00NS41IDIyNC41ek00NTYgODUxbDU4IC0zMDJxNCAtMjAgMjEuNSAtMzQuNXQzNy41IC0xNC41aDU0cTIwIDAgMzcuNSAxNC41IHQyMS41IDM0LjVsNTggMzAycTQgMjAgLTggMzQuNXQtMzMgMTQuNWgtMjA3cS0yMCAwIC0zMiAtMTQuNXQtOCAtMzQuNXpNNTAwIDMwMGgyMDB2MTAwaC0yMDB2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEwMjsiIGQ9Ik0wIDgwMGgxMDB2LTIwMGg0MDB2MzAwaDIwMHYtMzAwaDQwMHYyMDBoMTAwdjEwMGgtMTExdjZ0LTEgMTV0LTMgMThsLTM0IDE3MnEtMTEgMzkgLTQxLjUgNjN0LTY5LjUgMjRxLTMyIDAgLTYxIC0xN2wtMjM5IC0xNDRxLTIyIC0xMyAtNDAgLTM1cS0xOSAyNCAtNDAgMzZsLTIzOCAxNDRxLTMzIDE4IC02MiAxOHEtMzkgMCAtNjkuNSAtMjN0LTQwLjUgLTYxbC0zNSAtMTc3cS0yIC04IC0zIC0xOHQtMSAtMTV2LTZoLTExMXYtMTAweiBNMTAwIDBoNDAwdjQwMGgtNDAwdi00MDB6TTIwMCA5MDBxLTMgMCAxNCA0OHQzNSA5NmwxOCA0N2wyMTQgLTE5MWgtMjgxek03MDAgMHY0MDBoNDAwdi00MDBoLTQwMHpNNzMxIDkwMGwyMDIgMTk3cTUgLTEyIDEyIC0zMi41dDIzIC02NHQyNSAtNzJ0NyAtMjguNWgtMjY5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTAzOyIgZD0iTTAgLTIydjE0M2wyMTYgMTkzcS05IDUzIC0xMyA4M3QtNS41IDk0dDkgMTEzdDM4LjUgMTE0dDc0IDEyNHE0NyA2MCA5OS41IDEwMi41dDEwMyA2OHQxMjcuNSA0OHQxNDUuNSAzNy41dDE4NC41IDQzLjV0MjIwIDU4LjVxMCAtMTg5IC0yMiAtMzQzdC01OSAtMjU4dC04OSAtMTgxLjV0LTEwOC41IC0xMjB0LTEyMiAtNjh0LTEyNS41IC0zMHQtMTIxLjUgLTEuNXQtMTA3LjUgMTIuNXQtODcuNSAxN3QtNTYuNSA3LjVsLTk5IC01NXogTTIzOC41IDMwMC41cTE5LjUgLTYuNSA4Ni41IDc2LjVxNTUgNjYgMzY3IDIzNHE3MCAzOCAxMTguNSA2OS41dDEwMiA3OXQ5OSAxMTEuNXQ4Ni41IDE0OHEyMiA1MCAyNCA2MHQtNiAxOXEtNyA1IC0xNyA1dC0yNi41IC0xNC41dC0zMy41IC0zOS41cS0zNSAtNTEgLTExMy41IC0xMDguNXQtMTM5LjUgLTg5LjVsLTYxIC0zMnEtMzY5IC0xOTcgLTQ1OCAtNDAxcS00OCAtMTExIC0yOC41IC0xMTcuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNDsiIGQ9Ik0xMTEgNDA4cTAgLTMzIDUgLTYzcTkgLTU2IDQ0IC0xMTkuNXQxMDUgLTEwOC41cTMxIC0yMSA2NCAtMTZ0NjIgMjMuNXQ1NyA0OS41dDQ4IDYxLjV0MzUgNjAuNXEzMiA2NiAzOSAxODQuNXQtMTMgMTU3LjVxNzkgLTgwIDEyMiAtMTY0dDI2IC0xODRxLTUgLTMzIC0yMC41IC02OS41dC0zNy41IC04MC41cS0xMCAtMTkgLTE0LjUgLTI5dC0xMiAtMjZ0LTkgLTIzLjV0LTMgLTE5dDIuNSAtMTUuNXQxMSAtOS41dDE5LjUgLTV0MzAuNSAyLjUgdDQyIDhxNTcgMjAgOTEgMzR0ODcuNSA0NC41dDg3IDY0dDY1LjUgODguNXQ0NyAxMjJxMzggMTcyIC00NC41IDM0MS41dC0yNDYuNSAyNzguNXEyMiAtNDQgNDMgLTEyOXEzOSAtMTU5IC0zMiAtMTU0cS0xNSAyIC0zMyA5cS03OSAzMyAtMTIwLjUgMTAwdC00NCAxNzUuNXQ0OC41IDI1Ny41cS0xMyAtOCAtMzQgLTIzLjV0LTcyLjUgLTY2LjV0LTg4LjUgLTEwNS41dC02MCAtMTM4dC04IC0xNjYuNXEyIC0xMiA4IC00MS41dDggLTQzdDYgLTM5LjUgdDMuNSAtMzkuNXQtMSAtMzMuNXQtNiAtMzEuNXQtMTMuNSAtMjR0LTIxIC0yMC41dC0zMSAtMTJxLTM4IC0xMCAtNjcgMTN0LTQwLjUgNjEuNXQtMTUgODEuNXQxMC41IDc1cS01MiAtNDYgLTgzLjUgLTEwMXQtMzkgLTEwN3QtNy41IC04NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNTsiIGQ9Ik0tNjEgNjAwbDI2IDQwcTYgMTAgMjAgMzB0NDkgNjMuNXQ3NC41IDg1LjV0OTcgOTB0MTE2LjUgODMuNXQxMzIuNSA1OXQxNDUuNSAyMy41dDE0NS41IC0yMy41dDEzMi41IC01OXQxMTYuNSAtODMuNXQ5NyAtOTB0NzQuNSAtODUuNXQ0OSAtNjMuNXQyMCAtMzBsMjYgLTQwbC0yNiAtNDBxLTYgLTEwIC0yMCAtMzB0LTQ5IC02My41dC03NC41IC04NS41dC05NyAtOTB0LTExNi41IC04My41dC0xMzIuNSAtNTl0LTE0NS41IC0yMy41IHQtMTQ1LjUgMjMuNXQtMTMyLjUgNTl0LTExNi41IDgzLjV0LTk3IDkwdC03NC41IDg1LjV0LTQ5IDYzLjV0LTIwIDMwek0xMjAgNjAwcTcgLTEwIDQwLjUgLTU4dDU2IC03OC41dDY4IC03Ny41dDg3LjUgLTc1dDEwMyAtNDkuNXQxMjUgLTIxLjV0MTIzLjUgMjB0MTAwLjUgNDUuNXQ4NS41IDcxLjV0NjYuNSA3NS41dDU4IDgxLjV0NDcgNjZxLTEgMSAtMjguNSAzNy41dC00MiA1NXQtNDMuNSA1M3QtNTcuNSA2My41dC01OC41IDU0IHE0OSAtNzQgNDkgLTE2M3EwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODh0LTIxMiA4OHQtODggMjEycTAgODUgNDYgMTU4cS0xMDIgLTg3IC0yMjYgLTI1OHpNMzc3IDY1NnE0OSAtMTI0IDE1NCAtMTkxbDEwNSAxMDVxLTM3IDI0IC03NSA3MnQtNTcgODRsLTIwIDM2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTA2OyIgZD0iTS02MSA2MDBsMjYgNDBxNiAxMCAyMCAzMHQ0OSA2My41dDc0LjUgODUuNXQ5NyA5MHQxMTYuNSA4My41dDEzMi41IDU5dDE0NS41IDIzLjVxNjEgMCAxMjEgLTE3bDM3IDE0MmgxNDhsLTMxNCAtMTIwMGgtMTQ4bDM3IDE0M3EtODIgMjEgLTE2NSA3MS41dC0xNDAgMTAydC0xMDkuNSAxMTJ0LTcyIDg4LjV0LTI5LjUgNDN6TTEyMCA2MDBxMjEwIC0yODIgMzkzIC0zMzZsMzcgMTQxcS0xMDcgMTggLTE3OC41IDEwMS41dC03MS41IDE5My41IHEwIDg1IDQ2IDE1OHEtMTAyIC04NyAtMjI2IC0yNTh6TTM3NyA2NTZxNDkgLTEyNCAxNTQgLTE5MWw0NyA0N2wyMyA4N3EtMzAgMjggLTU5IDY5dC00NCA2OGwtMTQgMjZ6TTc4MCAxNjFsMzggMTQ1cTIyIDE1IDQ0LjUgMzR0NDYgNDR0NDAuNSA0NHQ0MSA1MC41dDMzLjUgNDMuNXQzMyA0NHQyNC41IDM0cS05NyAxMjcgLTE0MCAxNzVsMzkgMTQ2cTY3IC01NCAxMzEuNSAtMTI1LjV0ODcuNSAtMTAzLjV0MzYgLTUybDI2IC00MGwtMjYgLTQwIHEtNyAtMTIgLTI1LjUgLTM4dC02My41IC03OS41dC05NS41IC0xMDIuNXQtMTI0IC0xMDB0LTE0Ni41IC03OXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNzsiIGQ9Ik0tOTcuNSAzNHExMy41IC0zNCA1MC41IC0zNGgxMjk0cTM3IDAgNTAuNSAzNS41dC03LjUgNjcuNWwtNjQyIDEwNTZxLTIwIDMzIC00OCAzNnQtNDggLTI5bC02NDIgLTEwNjZxLTIxIC0zMiAtNy41IC02NnpNMTU1IDIwMGw0NDUgNzIzbDQ0NSAtNzIzaC0zNDV2MTAwaC0yMDB2LTEwMGgtMzQ1ek01MDAgNjAwbDEwMCAtMzAwbDEwMCAzMDB2MTAwaC0yMDB2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEwODsiIGQ9Ik0xMDAgMjYydjQxcTAgMjAgMTEgNDQuNXQyNiAzOC41bDM2MyAzMjV2MzM5cTAgNjIgNDQgMTA2dDEwNiA0NHQxMDYgLTQ0dDQ0IC0xMDZ2LTMzOWwzNjMgLTMyNXExNSAtMTQgMjYgLTM4LjV0MTEgLTQ0LjV2LTQxcTAgLTIwIC0xMiAtMjYuNXQtMjkgNS41bC0zNTkgMjQ5di0yNjNxMTAwIC05MSAxMDAgLTExM3YtNjRxMCAtMjEgLTEzIC0yOXQtMzIgMWwtOTQgNzhoLTIyMmwtOTQgLTc4cS0xOSAtOSAtMzIgLTF0LTEzIDI5djY0IHEwIDIyIDEwMCAxMTN2MjYzbC0zNTkgLTI0OXEtMTcgLTEyIC0yOSAtNS41dC0xMiAyNi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTA5OyIgZD0iTTAgNTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoMTAwMHEyMSAwIDM1LjUgMTV0MTQuNSAzNXY3NTBoLTExMDB2LTc1MHpNMCA5MDBoMTEwMHYxNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTE1MHYxMDBoLTEwMHYtMTAwaC01MDB2MTAwaC0xMDB2LTEwMGgtMTUwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xNTB6TTEwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTEwMCAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6IE0xMDAgNTAwdjEwMGgxMDB2LTEwMGgtMTAwek0zMDAgMTAwdjEwMGgxMDB2LTEwMGgtMTAwek0zMDAgMzAwdjEwMGgxMDB2LTEwMGgtMTAwek0zMDAgNTAwdjEwMGgxMDB2LTEwMGgtMTAwek01MDAgMTAwdjEwMGgxMDB2LTEwMGgtMTAwek01MDAgMzAwdjEwMGgxMDB2LTEwMGgtMTAwek01MDAgNTAwdjEwMGgxMDB2LTEwMGgtMTAwek03MDAgMTAwdjEwMGgxMDB2LTEwMGgtMTAwek03MDAgMzAwdjEwMGgxMDB2LTEwMGgtMTAwek03MDAgNTAwIHYxMDBoMTAwdi0xMDBoLTEwMHpNOTAwIDEwMHYxMDBoMTAwdi0xMDBoLTEwMHpNOTAwIDMwMHYxMDBoMTAwdi0xMDBoLTEwMHpNOTAwIDUwMHYxMDBoMTAwdi0xMDBoLTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExMDsiIGQ9Ik0wIDIwMHYyMDBoMjU5bDYwMCA2MDBoMjQxdjE5OGwzMDAgLTI5NWwtMzAwIC0zMDB2MTk3aC0xNTlsLTYwMCAtNjAwaC0zNDF6TTAgODAwaDI1OWwxMjIgLTEyMmwxNDEgMTQybC0xODEgMTgwaC0zNDF2LTIwMHpNNjc4IDM4MWwxNDEgMTQybDEyMiAtMTIzaDE1OXYxOThsMzAwIC0yOTVsLTMwMCAtMzAwdjE5N2gtMjQxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTExOyIgZD0iTTAgNDAwdjYwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC01OTZsLTMwNCAtMzAwdjMwMGgtMTAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExMjsiIGQ9Ik0xMDAgNjAwdjIwMGgzMDB2LTI1MHEwIC0xMTMgNiAtMTQ1cTE3IC05MiAxMDIgLTExN3EzOSAtMTEgOTIgLTExcTM3IDAgNjYuNSA1LjV0NTAgMTUuNXQzNiAyNHQyNCAzMS41dDE0IDM3LjV0NyA0MnQyLjUgNDV0MCA0N3YyNXYyNTBoMzAwdi0yMDBxMCAtNDIgLTMgLTgzdC0xNSAtMTA0dC0zMS41IC0xMTZ0LTU4IC0xMDkuNXQtODkgLTk2LjV0LTEyOSAtNjUuNXQtMTc0LjUgLTI1LjV0LTE3NC41IDI1LjV0LTEyOSA2NS41dC04OSA5Ni41IHQtNTggMTA5LjV0LTMxLjUgMTE2dC0xNSAxMDR0LTMgODN6TTEwMCA5MDB2MzAwaDMwMHYtMzAwaC0zMDB6TTgwMCA5MDB2MzAwaDMwMHYtMzAwaC0zMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMTM7IiBkPSJNLTMwIDQxMWwyMjcgLTIyN2wzNTIgMzUzbDM1MyAtMzUzbDIyNiAyMjdsLTU3OCA1Nzl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMTQ7IiBkPSJNNzAgNzk3bDU4MCAtNTc5bDU3OCA1NzlsLTIyNiAyMjdsLTM1MyAtMzUzbC0zNTIgMzUzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTE1OyIgZD0iTS0xOTggNzAwbDI5OSAyODNsMzAwIC0yODNoLTIwM3YtNDAwaDM4NWwyMTUgLTIwMGgtODAwdjYwMGgtMTk2ek00MDIgMTAwMGwyMTUgLTIwMGgzODF2LTQwMGgtMTk4bDI5OSAtMjgzbDI5OSAyODNoLTIwMHY2MDBoLTc5NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExNjsiIGQ9Ik0xOCA5MzlxLTUgMjQgMTAgNDJxMTQgMTkgMzkgMTloODk2bDM4IDE2MnE1IDE3IDE4LjUgMjcuNXQzMC41IDEwLjVoOTRxMjAgMCAzNSAtMTQuNXQxNSAtMzUuNXQtMTUgLTM1LjV0LTM1IC0xNC41aC01NGwtMjAxIC05NjFxLTIgLTQgLTYgLTEwLjV0LTE5IC0xNy41dC0zMyAtMTFoLTMxdi01MHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1dC0zNS41IDE1dC0xNC41IDM1djUwaC0zMDB2LTUwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTUgdC0zNS41IDE1dC0xNC41IDM1djUwaC01MHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNTM1bDQ4IDIwMGgtNjMzcS0zMiAwIC01NC41IDIxdC0yNy41IDQzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTE3OyIgZD0iTTAgMHY4MDBoMTIwMHYtODAwaC0xMjAwek0wIDkwMHYxMDBoMjAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgzMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjVoNTAwdi0xMDBoLTEyMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMTg7IiBkPSJNMSAwbDMwMCA3MDBoMTIwMGwtMzAwIC03MDBoLTEyMDB6TTEgNDAwdjYwMGgyMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNWg1MDB2LTIwMGgtMTAwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExOTsiIGQ9Ik0zMDIgMzAwaDE5OHY2MDBoLTE5OGwyOTggMzAwbDI5OCAtMzAwaC0xOTh2LTYwMGgxOThsLTI5OCAtMzAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTIwOyIgZD0iTTAgNjAwbDMwMCAyOTh2LTE5OGg2MDB2MTk4bDMwMCAtMjk4bC0zMDAgLTI5N3YxOTdoLTYwMHYtMTk3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTIxOyIgZD0iTTAgMTAwdjEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtMTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXpNMzEgNDAwbDE3MiA3MzlxNSAyMiAyMyA0MS41dDM4IDE5LjVoNjcycTE5IDAgMzcuNSAtMjIuNXQyMy41IC00NS41bDE3MiAtNzMyaC0xMTM4ek04MDAgMTAwaDEwMHYxMDBoLTEwMHYtMTAweiBNMTAwMCAxMDBoMTAwdjEwMGgtMTAwdi0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMjI7IiBkPSJNLTEwMSA2MDB2NTBxMCAyNCAyNSA0OXQ1MCAzOGwyNSAxM3YtMjUwbC0xMSA1LjV0LTI0IDE0dC0zMCAyMS41dC0yNCAyNy41dC0xMSAzMS41ek05OSA1MDB2MjUwdjVxMCAxMyAwLjUgMTguNXQyLjUgMTN0OCAxMC41dDE1IDNoMjAwbDY3NSAyNTB2LTg1MGwtNjc1IDIwMGgtMzhsNDcgLTI3NnEyIC0xMiAtMyAtMTcuNXQtMTEgLTZ0LTIxIC0wLjVoLThoLTgzcS0yMCAwIC0zNC41IDE0dC0xOC41IDM1cS01NiAzMzcgLTU2IDM1MXogTTExMDAgMjAwdjg1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVxMjAgMCAzNSAtMTQuNXQxNSAtMzUuNXYtODUwcTAgLTIwIC0xNSAtMzV0LTM1IC0xNXEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEyMzsiIGQ9Ik03NCAzNTBxMCAyMSAxMy41IDM1LjV0MzMuNSAxNC41aDE3bDExOCAxNzNsNjMgMzI3cTE1IDc3IDc2IDE0MHQxNDQgODNsLTE4IDMycS02IDE5IDMgMzJ0MjkgMTNoOTRxMjAgMCAyOSAtMTAuNXQzIC0yOS41bC0xOCAtMzdxODMgLTE5IDE0NCAtODIuNXQ3NiAtMTQwLjVsNjMgLTMyN2wxMTggLTE3M2gxN3EyMCAwIDMzLjUgLTE0LjV0MTMuNSAtMzUuNXEwIC0yMCAtMTMgLTQwdC0zMSAtMjdxLTIyIC05IC02MyAtMjN0LTE2Ny41IC0zNyB0LTI1MS41IC0yM3QtMjQ1LjUgMjAuNXQtMTc4LjUgNDEuNWwtNTggMjBxLTE4IDcgLTMxIDI3LjV0LTEzIDQwLjV6TTQ5NyAxMTBxMTIgLTQ5IDQwIC03OS41dDYzIC0zMC41dDYzIDMwLjV0MzkgNzkuNXEtNDggLTYgLTEwMiAtNnQtMTAzIDZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMjQ7IiBkPSJNMjEgNDQ1bDIzMyAtNDVsLTc4IC0yMjRsMjI0IDc4bDQ1IC0yMzNsMTU1IDE3OWwxNTUgLTE3OWw0NSAyMzNsMjI0IC03OGwtNzggMjI0bDIzNCA0NWwtMTgwIDE1NWwxODAgMTU2bC0yMzQgNDRsNzggMjI1bC0yMjQgLTc4bC00NSAyMzNsLTE1NSAtMTgwbC0xNTUgMTgwbC00NSAtMjMzbC0yMjQgNzhsNzggLTIyNWwtMjMzIC00NGwxNzkgLTE1NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEyNTsiIGQ9Ik0wIDIwMGgyMDB2NjAwaC0yMDB2LTYwMHpNMzAwIDI3NXEwIC03NSAxMDAgLTc1aDYxcTEyMyAtMTAwIDEzOSAtMTAwaDI1MHE0NiAwIDgzIDU3bDIzOCAzNDRxMjkgMzEgMjkgNzR2MTAwcTAgNDQgLTMwLjUgODQuNXQtNjkuNSA0MC41aC0zMjhxMjggMTE4IDI4IDEyNXYxNTBxMCA0NCAtMzAuNSA4NC41dC02OS41IDQwLjVoLTUwcS0yNyAwIC01MSAtMjB0LTM4IC00OGwtOTYgLTE5OGwtMTQ1IC0xOTZxLTIwIC0yNiAtMjAgLTYzdi00MDB6IE00MDAgMzAwdjM3NWwxNTAgMjEybDEwMCAyMTNoNTB2LTE3NWwtNTAgLTIyNWg0NTB2LTEyNWwtMjUwIC0zNzVoLTIxNGwtMTM2IDEwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTI2OyIgZD0iTTAgNDAwdjYwMGgyMDB2LTYwMGgtMjAwek0zMDAgNTI1djQwMHEwIDc1IDEwMCA3NWg2MXExMjMgMTAwIDEzOSAxMDBoMjUwcTQ2IDAgODMgLTU3bDIzOCAtMzQ0cTI5IC0zMSAyOSAtNzR2LTEwMHEwIC00NCAtMzAuNSAtODQuNXQtNjkuNSAtNDAuNWgtMzI4cTI4IC0xMTggMjggLTEyNXYtMTUwcTAgLTQ0IC0zMC41IC04NC41dC02OS41IC00MC41aC01MHEtMjcgMCAtNTEgMjB0LTM4IDQ4bC05NiAxOThsLTE0NSAxOTYgcS0yMCAyNiAtMjAgNjN6TTQwMCA1MjVsMTUwIC0yMTJsMTAwIC0yMTNoNTB2MTc1bC01MCAyMjVoNDUwdjEyNWwtMjUwIDM3NWgtMjE0bC0xMzYgLTEwMGgtMTAwdi0zNzV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMjc7IiBkPSJNOCAyMDB2NjAwaDIwMHYtNjAwaC0yMDB6TTMwOCAyNzV2NTI1cTAgMTcgMTQgMzUuNXQyOCAyOC41bDE0IDlsMzYyIDIzMHExNCA2IDI1IDZxMTcgMCAyOSAtMTJsMTA5IC0xMTJxMTQgLTE0IDE0IC0zNHEwIC0xOCAtMTEgLTMybC04NSAtMTIxaDMwMnE4NSAwIDEzOC41IC0zOHQ1My41IC0xMTB0LTU0LjUgLTExMXQtMTM4LjUgLTM5aC0xMDdsLTEzMCAtMzM5cS03IC0yMiAtMjAuNSAtNDEuNXQtMjguNSAtMTkuNWgtMzQxIHEtNyAwIC05MCA4MXQtODMgOTR6TTQwOCAyODlsMTAwIC04OWgyOTNsMTMxIDMzOXE2IDIxIDE5LjUgNDF0MjguNSAyMGgyMDNxMTYgMCAyNSAxNXQ5IDM2cTAgMjAgLTkgMzQuNXQtMjUgMTQuNWgtNDU3aC02LjVoLTcuNXQtNi41IDAuNXQtNiAxdC01IDEuNXQtNS41IDIuNXQtNCA0dC00IDUuNXEtNSAxMiAtNSAyMHEwIDE0IDEwIDI3bDE0NyAxODNsLTg2IDgzbC0zMzkgLTIzNnYtNTAzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTI4OyIgZD0iTS0xMDEgNjUxcTAgNzIgNTQgMTEwdDEzOSAzN2gzMDJsLTg1IDEyMXEtMTEgMTYgLTExIDMycTAgMjEgMTQgMzRsMTA5IDExM3ExMyAxMiAyOSAxMnExMSAwIDI1IC02bDM2NSAtMjMwcTcgLTQgMTYuNSAtMTAuNXQyNiAtMjZ0MTYuNSAtMzYuNXYtNTI2cTAgLTEzIC04NS41IC05My41dC05My41IC04MC41aC0zNDJxLTE1IDAgLTI4LjUgMjB0LTE5LjUgNDFsLTEzMSAzMzloLTEwNnEtODQgMCAtMTM5IDM5dC01NSAxMTF6TS0xIDYwMWgyMjIgcTE1IDAgMjguNSAtMjAuNXQxOS41IC00MC41bDEzMSAtMzM5aDI5M2wxMDYgODl2NTAybC0zNDIgMjM3bC04NyAtODNsMTQ1IC0xODRxMTAgLTExIDEwIC0yNnEwIC0xMSAtNSAtMjBxLTEgLTMgLTMuNSAtNS41bC00IC00dC01IC0yLjV0LTUuNSAtMS41dC02LjUgLTF0LTYuNSAtMC41aC03LjVoLTYuNWgtNDc2di0xMDB6TTk5OSAyMDF2NjAwaDIwMHYtNjAwaC0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMjk7IiBkPSJNOTcgNzE5bDIzMCAtMzYzcTQgLTYgMTAuNSAtMTUuNXQyNiAtMjV0MzYuNSAtMTUuNWg1MjVxMTMgMCA5NCA4M3Q4MSA5MHYzNDJxMCAxNSAtMjAgMjguNXQtNDEgMTkuNWwtMzM5IDEzMXYxMDZxMCA4NCAtMzkgMTM5dC0xMTEgNTV0LTExMCAtNTMuNXQtMzggLTEzOC41di0zMDJsLTEyMSA4NHEtMTUgMTIgLTMzLjUgMTEuNXQtMzIuNSAtMTMuNWwtMTEyIC0xMTBxLTIyIC0yMiAtNiAtNTN6TTE3MiA3MzlsODMgODZsMTgzIC0xNDYgcTIyIC0xOCA0NyAtNXEzIDEgNS41IDMuNWw0IDR0Mi41IDV0MS41IDUuNXQxIDYuNXQwLjUgNnY3LjV2N3Y0NTZxMCAyMiAyNSAzMXQ1MCAtMC41dDI1IC0zMC41di0yMDJxMCAtMTYgMjAgLTI5LjV0NDEgLTE5LjVsMzM5IC0xMzB2LTI5NGwtODkgLTEwMGgtNTAzek00MDAgMHYyMDBoNjAwdi0yMDBoLTYwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMDsiIGQ9Ik0xIDU4NXEtMTUgLTMxIDcgLTUzbDExMiAtMTEwcTEzIC0xMyAzMiAtMTMuNXQzNCAxMC41bDEyMSA4NWwtMSAtMzAycTAgLTg0IDM4LjUgLTEzOHQxMTAuNSAtNTR0MTExIDU1dDM5IDEzOXYxMDZsMzM5IDEzMXEyMCA2IDQwLjUgMTkuNXQyMC41IDI4LjV2MzQycTAgNyAtODEgOTB0LTk0IDgzaC01MjVxLTE3IDAgLTM1LjUgLTE0dC0yOC41IC0yOGwtMTAgLTE1ek03NiA1NjVsMjM3IDMzOWg1MDNsODkgLTEwMHYtMjk0bC0zNDAgLTEzMCBxLTIwIC02IC00MCAtMjB0LTIwIC0yOXYtMjAycTAgLTIyIC0yNSAtMzF0LTUwIDB0LTI1IDMxdjQ1NnYxNC41dC0xLjUgMTEuNXQtNSAxMnQtOS41IDdxLTI0IDEzIC00NiAtNWwtMTg0IC0xNDZ6TTMwNSAxMTA0djIwMGg2MDB2LTIwMGgtNjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTMxOyIgZD0iTTUgNTk3cTAgMTIyIDQ3LjUgMjMyLjV0MTI3LjUgMTkwLjV0MTkwLjUgMTI3LjV0MjMyLjUgNDcuNXExNjIgMCAyOTkuNSAtODB0MjE3LjUgLTIxOHQ4MCAtMzAwdC04MCAtMjk5LjV0LTIxNy41IC0yMTcuNXQtMjk5LjUgLTgwdC0zMDAgODB0LTIxOCAyMTcuNXQtODAgMjk5LjV6TTMwMCA1MDBoMzAwbC0yIC0xOTRsNDAyIDI5NGwtNDAyIDI5OHYtMTk3aC0yOTh2LTIwMXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMjsiIGQ9Ik0wIDU5N3EwIDEyMiA0Ny41IDIzMi41dDEyNy41IDE5MC41dDE5MC41IDEyNy41dDIzMS41IDQ3LjVxMTIyIDAgMjMyLjUgLTQ3LjV0MTkwLjUgLTEyNy41dDEyNy41IC0xOTAuNXQ0Ny41IC0yMzIuNXEwIC0xNjIgLTgwIC0yOTkuNXQtMjE4IC0yMTcuNXQtMzAwIC04MHQtMjk5LjUgODB0LTIxNy41IDIxNy41dC04MCAyOTkuNXpNMjAwIDYwMGw0MDAgLTI5NHYxOTRoMzAydjIwMWgtMzAwdjE5N3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMzsiIGQ9Ik01IDU5N3EwIDEyMiA0Ny41IDIzMi41dDEyNy41IDE5MC41dDE5MC41IDEyNy41dDIzMi41IDQ3LjVxMTIxIDAgMjMxLjUgLTQ3LjV0MTkwLjUgLTEyNy41dDEyNy41IC0xOTAuNXQ0Ny41IC0yMzIuNXEwIC0xNjIgLTgwIC0yOTkuNXQtMjE3LjUgLTIxNy41dC0yOTkuNSAtODB0LTMwMCA4MHQtMjE4IDIxNy41dC04MCAyOTkuNXpNMzAwIDYwMGgyMDB2LTMwMGgyMDB2MzAwaDIwMGwtMzAwIDQwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEzNDsiIGQ9Ik01IDU5N3EwIDEyMiA0Ny41IDIzMi41dDEyNy41IDE5MC41dDE5MC41IDEyNy41dDIzMi41IDQ3LjVxMTIxIDAgMjMxLjUgLTQ3LjV0MTkwLjUgLTEyNy41dDEyNy41IC0xOTAuNXQ0Ny41IC0yMzIuNXEwIC0xNjIgLTgwIC0yOTkuNXQtMjE3LjUgLTIxNy41dC0yOTkuNSAtODB0LTMwMCA4MHQtMjE4IDIxNy41dC04MCAyOTkuNXpNMzAwIDYwMGwzMDAgLTQwMGwzMDAgNDAwaC0yMDB2MzAwaC0yMDB2LTMwMGgtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTM1OyIgZD0iTTUgNTk3cTAgMTIyIDQ3LjUgMjMyLjV0MTI3LjUgMTkwLjV0MTkwLjUgMTI3LjV0MjMyLjUgNDcuNXExMjEgMCAyMzEuNSAtNDcuNXQxOTAuNSAtMTI3LjV0MTI3LjUgLTE5MC41dDQ3LjUgLTIzMi41cTAgLTE2MiAtODAgLTI5OS41dC0yMTcuNSAtMjE3LjV0LTI5OS41IC04MHQtMzAwIDgwdC0yMTggMjE3LjV0LTgwIDI5OS41ek0yNTQgNzgwcS04IC0zNCA1LjUgLTkzdDcuNSAtODdxMCAtOSAxNyAtNDR0MTYgLTYwcTEyIDAgMjMgLTUuNSB0MjMgLTE1dDIwIC0xMy41cTIwIC0xMCAxMDggLTQycTIyIC04IDUzIC0zMS41dDU5LjUgLTM4LjV0NTcuNSAtMTFxOCAtMTggLTE1IC01NS41dC0yMCAtNTcuNXExMiAtMjEgMjIuNSAtMzQuNXQyOCAtMjd0MzYuNSAtMTcuNXEwIC02IC0zIC0xNS41dC0zLjUgLTE0LjV0NC41IC0xN3ExMDEgLTIgMjIxIDExMXEzMSAzMCA0NyA0OHQzNCA0OXQyMSA2MnEtMTQgOSAtMzcuNSA5LjV0LTM1LjUgNy41cS0xNCA3IC00OSAxNXQtNTIgMTkgcS05IDAgLTM5LjUgLTAuNXQtNDYuNSAtMS41dC0zOSAtNi41dC0zOSAtMTYuNXEtNTAgLTM1IC02NiAtMTJxLTQgMiAtMy41IDI1LjV0MC41IDI1LjVxLTYgMTMgLTI2LjUgMTd0LTI0LjUgN3EyIDIyIC0yIDQxdC0xNi41IDI4dC0zOC41IC0yMHEtMjMgLTI1IC00MiA0cS0xOSAyOCAtOCA1OHE4IDE2IDIyIDIycTYgLTEgMjYgLTEuNXQzMy41IC00LjV0MTkuNSAtMTNxMTIgLTE5IDMyIC0zNy41dDM0IC0yNy41bDE0IC04cTAgMyA5LjUgMzkuNSB0NS41IDU3LjVxLTQgMjMgMTQuNSA0NC41dDIyLjUgMzEuNXE1IDE0IDEwIDM1dDguNSAzMXQxNS41IDIyLjV0MzQgMjEuNXEtNiAxOCAxMCAzN3E4IDAgMjMuNSAtMS41dDI0LjUgLTEuNXQyMC41IDQuNXQyMC41IDE1LjVxLTEwIDIzIC0zMC41IDQyLjV0LTM4IDMwdC00OSAyNi41dC00My41IDIzcTExIDQxIDEgNDRxMzEgLTEzIDU4LjUgLTE0LjV0MzkuNSAzLjVsMTEgNHE2IDM2IC0xNyA1My41dC02NCAyOC41dC01NiAyMyBxLTE5IC0zIC0zNyAwcS0xNSAtMTIgLTM2LjUgLTIxdC0zNC41IC0xMnQtNDQgLTh0LTM5IC02cS0xNSAtMyAtNDYgMHQtNDUgLTNxLTIwIC02IC01MS41IC0yNS41dC0zNC41IC0zNC41cS0zIC0xMSA2LjUgLTIyLjV0OC41IC0xOC41cS0zIC0zNCAtMjcuNSAtOTF0LTI5LjUgLTc5ek01MTggOTE1cTMgMTIgMTYgMzAuNXQxNiAyNS41cTEwIC0xMCAxOC41IC0xMHQxNCA2dDE0LjUgMTQuNXQxNiAxMi41cTAgLTE4IDggLTQyLjV0MTYuNSAtNDQgdDkuNSAtMjMuNXEtNiAxIC0zOSA1dC01My41IDEwdC0zNi41IDE2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTM2OyIgZD0iTTAgMTY0LjVxMCAyMS41IDE1IDM3LjVsNjAwIDU5OXEtMzMgMTAxIDYgMjAxLjV0MTM1IDE1NC41cTE2NCA5MiAzMDYgLTlsLTI1OSAtMTM4bDE0NSAtMjMybDI1MSAxMjZxMTMgLTE3NSAtMTUxIC0yNjdxLTEyMyAtNzAgLTI1MyAtMjNsLTU5NiAtNTk2cS0xNSAtMTYgLTM2LjUgLTE2dC0zNi41IDE2bC0xMTEgMTEwcS0xNSAxNSAtMTUgMzYuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEzNzsiIGhvcml6LWFkdi14PSIxMjIwIiBkPSJNMCAxOTZ2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTEwMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41ek0wIDU5NnYxMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMCBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41ek0wIDk5NnYxMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV6TTYwMCA1OTZoNTAwdjEwMGgtNTAwdi0xMDB6TTgwMCAxOTZoMzAwdjEwMGgtMzAwdi0xMDB6TTkwMCA5OTZoMjAwdjEwMGgtMjAwdi0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMzg7IiBkPSJNMTAwIDExMDB2MTAwaDEwMDB2LTEwMGgtMTAwMHpNMTUwIDEwMDBoOTAwbC0zNTAgLTUwMHYtMzAwbC0yMDAgLTIwMHY1MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMzk7IiBkPSJNMCAyMDB2MjAwaDEyMDB2LTIwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV6TTAgNTAwdjQwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwdjEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMjAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di00MDBoLTUwMHYxMDBoLTIwMHYtMTAwaC01MDB6IE01MDAgMTAwMGgyMDB2MTAwaC0yMDB2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MDsiIGQ9Ik0wIDB2NDAwbDEyOSAtMTI5bDIwMCAyMDBsMTQyIC0xNDJsLTIwMCAtMjAwbDEyOSAtMTI5aC00MDB6TTAgODAwbDEyOSAxMjlsMjAwIC0yMDBsMTQyIDE0MmwtMjAwIDIwMGwxMjkgMTI5aC00MDB2LTQwMHpNNzI5IDMyOWwxNDIgMTQybDIwMCAtMjAwbDEyOSAxMjl2LTQwMGgtNDAwbDEyOSAxMjl6TTcyOSA4NzFsMjAwIDIwMGwtMTI5IDEyOWg0MDB2LTQwMGwtMTI5IDEyOWwtMjAwIC0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNDE7IiBkPSJNMCA1OTZxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODIgNTk2cTAgLTE3MiAxMjEuNSAtMjkzdDI5Mi41IC0xMjF0MjkyLjUgMTIxdDEyMS41IDI5M3EwIDE3MSAtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNMjkxIDY1NSBxMCAyMyAxNS41IDM4LjV0MzguNSAxNS41dDM5IC0xNnQxNiAtMzhxMCAtMjMgLTE2IC0zOXQtMzkgLTE2cS0yMiAwIC0zOCAxNnQtMTYgMzl6TTQwMCA4NTBxMCAyMiAxNiAzOC41dDM5IDE2LjVxMjIgMCAzOCAtMTZ0MTYgLTM5dC0xNiAtMzl0LTM4IC0xNnEtMjMgMCAtMzkgMTYuNXQtMTYgMzguNXpNNTEzIDYwOXEwIDMyIDIxIDU2LjV0NTIgMjkuNWwxMjIgMTI2bDEgMXEtOSAxNCAtOSAyOHEwIDIyIDE2IDM4LjV0MzkgMTYuNSBxMjIgMCAzOCAtMTZ0MTYgLTM5dC0xNiAtMzl0LTM4IC0xNnEtMTYgMCAtMjkgMTBsLTU1IC0xNDVxMTcgLTIyIDE3IC01MXEwIC0zNiAtMjUuNSAtNjEuNXQtNjEuNSAtMjUuNXEtMzcgMCAtNjIuNSAyNS41dC0yNS41IDYxLjV6TTgwMCA2NTVxMCAyMiAxNiAzOHQzOSAxNnQzOC41IC0xNS41dDE1LjUgLTM4LjV0LTE2IC0zOXQtMzggLTE2cS0yMyAwIC0zOSAxNnQtMTYgMzl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNDI7IiBkPSJNLTQwIDM3NXEtMTMgLTk1IDM1IC0xNzNxMzUgLTU3IDk0IC04OXQxMjkgLTMycTYzIDAgMTE5IDI4cTMzIDE2IDY1IDQwLjV0NTIuNSA0NS41dDU5LjUgNjRxNDAgNDQgNTcgNjFsMzk0IDM5NHEzNSAzNSA0NyA4NHQtMyA5NnEtMjcgODcgLTExNyAxMDRxLTIwIDIgLTI5IDJxLTQ2IDAgLTc5LjUgLTE3dC02Ny41IC01MWwtMzg4IC0zOTZsLTcgLTdsNjkgLTY3bDM3NyAzNzNxMjAgMjIgMzkgMzhxMjMgMjMgNTAgMjNxMzggMCA1MyAtMzYgcTE2IC0zOSAtMjAgLTc1bC01NDcgLTU0N3EtNTIgLTUyIC0xMjUgLTUycS01NSAwIC0xMDAgMzN0LTU0IDk2cS01IDM1IDIuNSA2NnQzMS41IDYzdDQyIDUwdDU2IDU0cTI0IDIxIDQ0IDQxbDM0OCAzNDhxNTIgNTIgODIuNSA3OS41dDg0IDU0dDEwNy41IDI2LjVxMjUgMCA0OCAtNHE5NSAtMTcgMTU0IC05NC41dDUxIC0xNzUuNXEtNyAtMTAxIC05OCAtMTkybC0yNTIgLTI0OWwtMjUzIC0yNTZsNyAtN2w2OSAtNjBsNTE3IDUxMSBxNjcgNjcgOTUgMTU3dDExIDE4M3EtMTYgODcgLTY3IDE1NHQtMTMwIDEwM3EtNjkgMzMgLTE1MiAzM3EtMTA3IDAgLTE5NyAtNTVxLTQwIC0yNCAtMTExIC05NWwtNTEyIC01MTJxLTY4IC02OCAtODEgLTE2M3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MzsiIGQ9Ik03OSA3ODRxMCAxMzEgOTkgMjI5LjV0MjMwIDk4LjVxMTQ0IDAgMjQyIC0xMjlxMTAzIDEyOSAyNDUgMTI5cTEzMCAwIDIyNyAtOTguNXQ5NyAtMjI5LjVxMCAtNDYgLTE3LjUgLTkxdC02MSAtOTl0LTc3IC04OS41dC0xMDQuNSAtMTA1LjVxLTE5NyAtMTkxIC0yOTMgLTMyMmwtMTcgLTIzbC0xNiAyM3EtNDMgNTggLTEwMCAxMjIuNXQtOTIgOTkuNXQtMTAxIDEwMGwtODQuNSA4NC41dC02OCA3NHQtNjAgNzh0LTMzLjUgNzAuNXQtMTUgNzh6IE0yNTAgNzg0cTAgLTI3IDMwLjUgLTcwdDYxLjUgLTc1LjV0OTUgLTk0LjVsMjIgLTIycTkzIC05MCAxOTAgLTIwMXE4MiA5MiAxOTUgMjAzbDEyIDEycTY0IDYyIDk3LjUgOTd0NjQuNSA3OXQzMSA3MnEwIDcxIC00OCAxMTkuNXQtMTA2IDQ4LjVxLTczIDAgLTEzMSAtODNsLTExOCAtMTcxbC0xMTQgMTc0cS01MSA4MCAtMTI0IDgwcS01OSAwIC0xMDguNSAtNDkuNXQtNDkuNSAtMTE4LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNDQ7IiBkPSJNNTcgMzUzcTAgLTk0IDY2IC0xNjBsMTQxIC0xNDFxNjYgLTY2IDE1OSAtNjZxOTUgMCAxNTkgNjZsMjgzIDI4M3E2NiA2NiA2NiAxNTl0LTY2IDE1OWwtMTQxIDE0MXEtMTIgMTIgLTE5IDE3bC0xMDUgLTEwNWwyMTIgLTIxMmwtMzg5IC0zODlsLTI0NyAyNDhsOTUgOTVsLTE4IDE4cS00NiA0NSAtNzUgMTAxbC01NSAtNTVxLTY2IC02NiAtNjYgLTE1OXpNMjY5IDcwNnEwIC05MyA2NiAtMTU5bDE0MSAtMTQxbDE5IC0xN2wxMDUgMTA1IGwtMjEyIDIxMmwzODkgMzg5bDI0NyAtMjQ3bC05NSAtOTZsMTggLTE4cTQ2IC00NiA3NyAtOTlsMjkgMjlxMzUgMzUgNjIuNSA4OHQyNy41IDk2cTAgOTMgLTY2IDE1OWwtMTQxIDE0MXEtNjYgNjYgLTE1OSA2NnEtOTUgMCAtMTU5IC02NmwtMjgzIC0yODNxLTY2IC02NCAtNjYgLTE1OXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE0NTsiIGQ9Ik0yMDAgMTAwdjk1M3EwIDIxIDMwIDQ2dDgxIDQ4dDEyOSAzOHQxNjMgMTV0MTYyIC0xNXQxMjcgLTM4dDc5IC00OHQyOSAtNDZ2LTk1M3EwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtNjAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXpNMzAwIDMwMGg2MDB2NzAwaC02MDB2LTcwMHpNNDk2IDE1MHEwIC00MyAzMC41IC03My41dDczLjUgLTMwLjV0NzMuNSAzMC41dDMwLjUgNzMuNXQtMzAuNSA3My41dC03My41IDMwLjUgdC03My41IC0zMC41dC0zMC41IC03My41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTQ2OyIgZD0iTTAgMGwzMDMgMzgwbDIwNyAyMDhsLTIxMCAyMTJoMzAwbDI2NyAyNzlsLTM1IDM2cS0xNSAxNCAtMTUgMzV0MTUgMzVxMTQgMTUgMzUgMTV0MzUgLTE1bDI4MyAtMjgycTE1IC0xNSAxNSAtMzZ0LTE1IC0zNXEtMTQgLTE1IC0zNSAtMTV0LTM1IDE1bC0zNiAzNWwtMjc5IC0yNjd2LTMwMGwtMjEyIDIxMGwtMjA4IC0yMDd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNDg7IiBkPSJNMjk1IDQzM2gxMzlxNSAtNzcgNDguNSAtMTI2LjV0MTE3LjUgLTY0LjV2MzM1bC0yNyA3cS00NiAxNCAtNzkgMjYuNXQtNzIgMzZ0LTYyLjUgNTJ0LTQwIDcyLjV0LTE2LjUgOTlxMCA5MiA0NCAxNTkuNXQxMDkgMTAxdDE0NCA0MC41djc4aDEwMHYtNzlxMzggLTQgNzIuNSAtMTMuNXQ3NS41IC0zMS41dDcxIC01My41dDUxLjUgLTg0dDI0LjUgLTExOC41aC0xNTlxLTggNzIgLTM1IDEwOS41dC0xMDEgNTAuNXYtMzA3bDY0IC0xNCBxMzQgLTcgNjQgLTE2LjV0NzAgLTMxLjV0NjcuNSAtNTJ0NDcuNSAtODAuNXQyMCAtMTEyLjVxMCAtMTM5IC04OSAtMjI0dC0yNDQgLTk2di03N2gtMTAwdjc4cS0xNTIgMTcgLTIzNyAxMDRxLTQwIDQwIC01Mi41IDkzLjV0LTE1LjUgMTM5LjV6TTQ2NiA4ODlxMCAtMjkgOCAtNTF0MTYuNSAtMzR0MjkuNSAtMjIuNXQzMSAtMTMuNXQzOCAtMTBxNyAtMiAxMSAtM3YyNzRxLTYxIC04IC05Ny41IC0zNy41dC0zNi41IC0xMDIuNXpNNzAwIDIzNyBxMTcwIDE4IDE3MCAxNTFxMCA2NCAtNDQgOTkuNXQtMTI2IDYwLjV2LTMxMXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE0OTsiIGQ9Ik0xMDAgNjAwdjEwMGgxNjZxLTI0IDQ5IC00NCAxMDRxLTEwIDI2IC0xNC41IDU1LjV0LTMgNzIuNXQyNSA5MHQ2OC41IDg3cTk3IDg4IDI2MyA4OHExMjkgMCAyMzAgLTg5dDEwMSAtMjA4aC0xNTNxMCA1MiAtMzQgODkuNXQtNzQgNTEuNXQtNzYgMTRxLTM3IDAgLTc5IC0xNC41dC02MiAtMzUuNXEtNDEgLTQ0IC00MSAtMTAxcTAgLTExIDIuNSAtMjQuNXQ1LjUgLTI0dDkuNSAtMjYuNXQxMC41IC0yNXQxNCAtMjcuNXQxNCAtMjUuNSB0MTUuNSAtMjd0MTMuNSAtMjRoMjQydi0xMDBoLTE5N3E4IC01MCAtMi41IC0xMTV0LTMxLjUgLTk0cS00MSAtNTkgLTk5IC0xMTNxMzUgMTEgODQgMTh0NzAgN3EzMiAxIDEwMiAtMTZ0MTA0IC0xN3E3NiAwIDEzNiAzMGw1MCAtMTQ3cS00MSAtMjUgLTgwLjUgLTM2LjV0LTU5IC0xM3QtNjEuNSAtMS41cS0yMyAwIC0xMjggMzN0LTE1NSAyOXEtMzkgLTQgLTgyIC0xN3QtNjYgLTI1bC0yNCAtMTFsLTU1IDE0NWwxNi41IDExdDE1LjUgMTAgdDEzLjUgOS41dDE0LjUgMTJ0MTQuNSAxNHQxNy41IDE4LjVxNDggNTUgNTQgMTI2LjV0LTMwIDE0Mi41aC0yMjF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTA7IiBkPSJNMiAzMDBsMjk4IC0zMDBsMjk4IDMwMGgtMTk4djkwMGgtMjAwdi05MDBoLTE5OHpNNjAyIDkwMGwyOTggMzAwbDI5OCAtMzAwaC0xOTh2LTkwMGgtMjAwdjkwMGgtMTk4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTUxOyIgZD0iTTIgMzAwaDE5OHY5MDBoMjAwdi05MDBoMTk4bC0yOTggLTMwMHpNNzAwIDB2MjAwaDEwMHYtMTAwaDIwMHYtMTAwaC0zMDB6TTcwMCA0MDB2MTAwaDMwMHYtMjAwaC05OXYtMTAwaC0xMDB2MTAwaDk5djEwMGgtMjAwek03MDAgNzAwdjUwMGgzMDB2LTUwMGgtMTAwdjEwMGgtMTAwdi0xMDBoLTEwMHpNODAxIDkwMGgxMDB2MjAwaC0xMDB2LTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE1MjsiIGQ9Ik0yIDMwMGgxOTh2OTAwaDIwMHYtOTAwaDE5OGwtMjk4IC0zMDB6TTcwMCAwdjUwMGgzMDB2LTUwMGgtMTAwdjEwMGgtMTAwdi0xMDBoLTEwMHpNNzAwIDcwMHYyMDBoMTAwdi0xMDBoMjAwdi0xMDBoLTMwMHpNNzAwIDExMDB2MTAwaDMwMHYtMjAwaC05OXYtMTAwaC0xMDB2MTAwaDk5djEwMGgtMjAwek04MDEgMjAwaDEwMHYyMDBoLTEwMHYtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTUzOyIgZD0iTTIgMzAwbDI5OCAtMzAwbDI5OCAzMDBoLTE5OHY5MDBoLTIwMHYtOTAwaC0xOTh6TTgwMCAxMDB2NDAwaDMwMHYtNTAwaC0xMDB2MTAwaC0yMDB6TTgwMCAxMTAwdjEwMGgyMDB2LTUwMGgtMTAwdjQwMGgtMTAwek05MDEgMjAwaDEwMHYyMDBoLTEwMHYtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTU0OyIgZD0iTTIgMzAwbDI5OCAtMzAwbDI5OCAzMDBoLTE5OHY5MDBoLTIwMHYtOTAwaC0xOTh6TTgwMCA0MDB2MTAwaDIwMHYtNTAwaC0xMDB2NDAwaC0xMDB6TTgwMCA4MDB2NDAwaDMwMHYtNTAwaC0xMDB2MTAwaC0yMDB6TTkwMSA5MDBoMTAwdjIwMGgtMTAwdi0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTU7IiBkPSJNMiAzMDBsMjk4IC0zMDBsMjk4IDMwMGgtMTk4djkwMGgtMjAwdi05MDBoLTE5OHpNNzAwIDEwMHYyMDBoNTAwdi0yMDBoLTUwMHpNNzAwIDQwMHYyMDBoNDAwdi0yMDBoLTQwMHpNNzAwIDcwMHYyMDBoMzAwdi0yMDBoLTMwMHpNNzAwIDEwMDB2MjAwaDIwMHYtMjAwaC0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTY7IiBkPSJNMiAzMDBsMjk4IC0zMDBsMjk4IDMwMGgtMTk4djkwMGgtMjAwdi05MDBoLTE5OHpNNzAwIDEwMHYyMDBoMjAwdi0yMDBoLTIwMHpNNzAwIDQwMHYyMDBoMzAwdi0yMDBoLTMwMHpNNzAwIDcwMHYyMDBoNDAwdi0yMDBoLTQwMHpNNzAwIDEwMDB2MjAwaDUwMHYtMjAwaC01MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTc7IiBkPSJNMCA0MDB2MzAwcTAgMTY1IDExNy41IDI4Mi41dDI4Mi41IDExNy41aDMwMHExNjIgMCAyODEgLTExOC41dDExOSAtMjgxLjV2LTMwMHEwIC0xNjUgLTExOC41IC0yODIuNXQtMjgxLjUgLTExNy41aC0zMDBxLTE2NSAwIC0yODIuNSAxMTcuNXQtMTE3LjUgMjgyLjV6TTIwMCAzMDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41IGgtNTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTg7IiBkPSJNMCA0MDB2MzAwcTAgMTYzIDExOSAyODEuNXQyODEgMTE4LjVoMzAwcTE2NSAwIDI4Mi41IC0xMTcuNXQxMTcuNSAtMjgyLjV2LTMwMHEwIC0xNjUgLTExNy41IC0yODIuNXQtMjgyLjUgLTExNy41aC0zMDBxLTE2MyAwIC0yODEuNSAxMTcuNXQtMTE4LjUgMjgyLjV6TTIwMCAzMDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41IGgtNTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDB6TTQwMCAzMDBsMzMzIDI1MGwtMzMzIDI1MHYtNTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTU5OyIgZD0iTTAgNDAwdjMwMHEwIDE2MyAxMTcuNSAyODEuNXQyODIuNSAxMTguNWgzMDBxMTYzIDAgMjgxLjUgLTExOXQxMTguNSAtMjgxdi0zMDBxMCAtMTY1IC0xMTcuNSAtMjgyLjV0LTI4Mi41IC0xMTcuNWgtMzAwcS0xNjUgMCAtMjgyLjUgMTE3LjV0LTExNy41IDI4Mi41ek0yMDAgMzAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNSBoLTUwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwek0zMDAgNzAwbDI1MCAtMzMzbDI1MCAzMzNoLTUwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE2MDsiIGQ9Ik0wIDQwMHYzMDBxMCAxNjUgMTE3LjUgMjgyLjV0MjgyLjUgMTE3LjVoMzAwcTE2NSAwIDI4Mi41IC0xMTcuNXQxMTcuNSAtMjgyLjV2LTMwMHEwIC0xNjIgLTExOC41IC0yODF0LTI4MS41IC0xMTloLTMwMHEtMTY1IDAgLTI4Mi41IDExOC41dC0xMTcuNSAyODEuNXpNMjAwIDMwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjUgaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHpNMzAwIDQwMGg1MDBsLTI1MCAzMzN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNjE7IiBkPSJNMCA0MDB2MzAwaDMwMHYyMDBsNDAwIC0zNTBsLTQwMCAtMzUwdjIwMGgtMzAwek01MDAgMHYyMDBoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTUwMHYyMDBoNDAwcTE2NSAwIDI4Mi41IC0xMTcuNXQxMTcuNSAtMjgyLjV2LTMwMHEwIC0xNjUgLTExNy41IC0yODIuNXQtMjgyLjUgLTExNy41aC00MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNjI7IiBkPSJNMjE2IDUxOXExMCAtMTkgMzIgLTE5aDMwMnEtMTU1IC00MzggLTE2MCAtNDU4cS01IC0yMSA0IC0zMmw5IC04bDkgLTFxMTMgMCAyNiAxNmw1MzggNjMwcTE1IDE5IDYgMzZxLTggMTggLTMyIDE2aC0zMDBxMSA0IDc4IDIxOS41dDc5IDIyNy41cTIgMTcgLTYgMjdsLTggOGgtOXEtMTYgMCAtMjUgLTE1cS00IC01IC05OC41IC0xMTEuNXQtMjI4IC0yNTd0LTIwOS41IC0yMzguNXEtMTcgLTE5IC03IC00MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE2MzsiIGQ9Ik0wIDQwMHEwIC0xNjUgMTE3LjUgLTI4Mi41dDI4Mi41IC0xMTcuNWgzMDBxNDcgMCAxMDAgMTV2MTg1aC01MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djUwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoNTAwdjE4NXEtMTQgNCAtMTE0IDcuNXQtMTkzIDUuNWwtOTMgMnEtMTY1IDAgLTI4Mi41IC0xMTcuNXQtMTE3LjUgLTI4Mi41di0zMDB6TTYwMCA0MDB2MzAwaDMwMHYyMDBsNDAwIC0zNTBsLTQwMCAtMzUwdjIwMGgtMzAweiAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE2NDsiIGQ9Ik0wIDQwMHEwIC0xNjUgMTE3LjUgLTI4Mi41dDI4Mi41IC0xMTcuNWgzMDBxMTYzIDAgMjgxLjUgMTE3LjV0MTE4LjUgMjgyLjV2OThsLTc4IDczbC0xMjIgLTEyM3YtMTQ4cTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC01MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djUwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTU2bDExOCAxMjJsLTc0IDc4aC0xMDBxLTE2NSAwIC0yODIuNSAtMTE3LjV0LTExNy41IC0yODIuNSB2LTMwMHpNNDk2IDcwOWwzNTMgMzQybC0xNDkgMTQ5aDUwMHYtNTAwbC0xNDkgMTQ5bC0zNDIgLTM1M3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE2NTsiIGQ9Ik00IDYwMHEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4NiA2MDBxMCAtMTcxIDEyMS41IC0yOTIuNXQyOTIuNSAtMTIxLjV0MjkyLjUgMTIxLjV0MTIxLjUgMjkyLjV0LTEyMS41IDI5Mi41dC0yOTIuNSAxMjEuNXQtMjkyLjUgLTEyMS41dC0xMjEuNSAtMjkyLjV6TTQwNiA2MDAgcTAgODAgNTcgMTM3dDEzNyA1N3QxMzcgLTU3dDU3IC0xMzd0LTU3IC0xMzd0LTEzNyAtNTd0LTEzNyA1N3QtNTcgMTM3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTY2OyIgZD0iTTAgMHYyNzVxMCAxMSA3IDE4dDE4IDdoMTA0OHExMSAwIDE5IC03LjV0OCAtMTcuNXYtMjc1aC0xMTAwek0xMDAgODAwbDQ0NSAtNTAwbDQ1MCA1MDBoLTI5NXY0MDBoLTMwMHYtNDAwaC0zMDB6TTkwMCAxNTBoMTAwdjUwaC0xMDB2LTUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTY3OyIgZD0iTTAgMHYyNzVxMCAxMSA3IDE4dDE4IDdoMTA0OHExMSAwIDE5IC03LjV0OCAtMTcuNXYtMjc1aC0xMTAwek0xMDAgNzAwaDMwMHYtMzAwaDMwMHYzMDBoMjk1bC00NDUgNTAwek05MDAgMTUwaDEwMHY1MGgtMTAwdi01MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE2ODsiIGQ9Ik0wIDB2Mjc1cTAgMTEgNyAxOHQxOCA3aDEwNDhxMTEgMCAxOSAtNy41dDggLTE3LjV2LTI3NWgtMTEwMHpNMTAwIDcwNWwzMDUgLTMwNWw1OTYgNTk2bC0xNTQgMTU1bC00NDIgLTQ0MmwtMTUwIDE1MXpNOTAwIDE1MGgxMDB2NTBoLTEwMHYtNTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNjk7IiBkPSJNMCAwdjI3NXEwIDExIDcgMTh0MTggN2gxMDQ4cTExIDAgMTkgLTcuNXQ4IC0xNy41di0yNzVoLTExMDB6TTEwMCA5ODhsOTcgLTk4bDIxMiAyMTNsLTk3IDk3ek0yMDAgNDAxaDcwMHY2OTlsLTI1MCAtMjM5bC0xNDkgMTQ5bC0yMTIgLTIxMmwxNDkgLTE0OXpNOTAwIDE1MGgxMDB2NTBoLTEwMHYtNTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNzA7IiBkPSJNMCAwdjI3NXEwIDExIDcgMTh0MTggN2gxMDQ4cTExIDAgMTkgLTcuNXQ4IC0xNy41di0yNzVoLTExMDB6TTIwMCA2MTJsMjEyIC0yMTJsOTggOTdsLTIxMyAyMTJ6TTMwMCAxMjAwbDIzOSAtMjUwbC0xNDkgLTE0OWwyMTIgLTIxMmwxNDkgMTQ4bDI0OCAtMjM3djcwMGgtNjk5ek05MDAgMTUwaDEwMHY1MGgtMTAwdi01MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MTsiIGQ9Ik0yMyA0MTVsMTE3NyA3ODR2LTEwNzlsLTQ3NSAyNzJsLTMxMCAtMzkzdjQxNmgtMzkyek00OTQgMjEwbDY3MiA5MzhsLTY3MiAtNzEydi0yMjZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNzI7IiBkPSJNMCAxNTB2MTAwMHEwIDIwIDE0LjUgMzV0MzUuNSAxNWgyNTB2LTMwMGg1MDB2MzAwaDEwMGwyMDAgLTIwMHYtODUwcTAgLTIxIC0xNSAtMzUuNXQtMzUgLTE0LjVoLTE1MHY0MDBoLTcwMHYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek02MDAgMTAwMGgxMDB2MjAwaC0xMDB2LTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MzsiIGQ9Ik0wIDE1MHYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwbDIwMCAtMjAwdi0yMThsLTI3NiAtMjc1bC0xMjAgMTIwbC0xMjYgLTEyN2gtMzc4di00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTU4MSAzMDZsMTIzIDEyM2wxMjAgLTEyMGwzNTMgMzUybDEyMyAtMTIzbC00NzUgLTQ3NnpNNjAwIDEwMDBoMTAwdjIwMGgtMTAwdi0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNzQ7IiBkPSJNMCAxNTB2MTAwMHEwIDIwIDE0LjUgMzV0MzUuNSAxNWgyNTB2LTMwMGg1MDB2MzAwaDEwMGwyMDAgLTIwMHYtMjY5bC0xMDMgLTEwM2wtMTcwIDE3MGwtMjk4IC0yOThoLTMyOXYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek02MDAgMTAwMGgxMDB2MjAwaC0xMDB2LTIwMHpNNzAwIDEzM2wxNzAgMTcwbC0xNzAgMTcwbDEyNyAxMjdsMTcwIC0xNzBsMTcwIDE3MGwxMjcgLTEyOGwtMTcwIC0xNjlsMTcwIC0xNzAgbC0xMjcgLTEyN2wtMTcwIDE3MGwtMTcwIC0xNzB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNzU7IiBkPSJNMCAxNTB2MTAwMHEwIDIwIDE0LjUgMzV0MzUuNSAxNWgyNTB2LTMwMGg1MDB2MzAwaDEwMGwyMDAgLTIwMHYtMzAwaC00MDB2LTIwMGgtNTAwdi00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTYwMCAzMDBsMzAwIC0zMDBsMzAwIDMwMGgtMjAwdjMwMGgtMjAwdi0zMDBoLTIwMHpNNjAwIDEwMDB2MjAwaDEwMHYtMjAwaC0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNzY7IiBkPSJNMCAxNTB2MTAwMHEwIDIwIDE0LjUgMzV0MzUuNSAxNWgyNTB2LTMwMGg1MDB2MzAwaDEwMGwyMDAgLTIwMHYtNDAybC0yMDAgMjAwbC0yOTggLTI5OGgtNDAydi00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTYwMCAzMDBoMjAwdi0zMDBoMjAwdjMwMGgyMDBsLTMwMCAzMDB6TTYwMCAxMDAwdjIwMGgxMDB2LTIwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTc3OyIgZD0iTTAgMjUwcTAgLTIxIDE0LjUgLTM1LjV0MzUuNSAtMTQuNWgxMTAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXY1NTBoLTEyMDB2LTU1MHpNMCA5MDBoMTIwMHYxNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTExMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTE1MHpNMTAwIDMwMHYyMDBoNDAwdi0yMDBoLTQwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3ODsiIGQ9Ik0wIDQwMGwzMDAgMjk4di0xOThoNDAwdi0yMDBoLTQwMHYtMTk4ek0xMDAgODAwdjIwMGgxMDB2LTIwMGgtMTAwek0zMDAgODAwdjIwMGgxMDB2LTIwMGgtMTAwek01MDAgODAwdjIwMGg0MDB2MTk4bDMwMCAtMjk4bC0zMDAgLTI5OHYxOThoLTQwMHpNODAwIDMwMHYyMDBoMTAwdi0yMDBoLTEwMHpNMTAwMCAzMDBoMTAwdjIwMGgtMTAwdi0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNzk7IiBkPSJNMTAwIDcwMHY0MDBsNTAgMTAwbDUwIC0xMDB2LTMwMGgxMDB2MzAwbDUwIDEwMGw1MCAtMTAwdi0zMDBoMTAwdjMwMGw1MCAxMDBsNTAgLTEwMHYtNDAwbC0xMDAgLTIwM3YtNDQ3cTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQ0N3pNODAwIDU5N3EwIC0yOSAxMC41IC01NS41dDI1IC00M3QyOSAtMjguNXQyNS41IC0xOGwxMCAtNXYtMzk3cTAgLTIxIDE0LjUgLTM1LjUgdDM1LjUgLTE0LjVoMjAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYxMTA2cTAgMzEgLTE4IDQwLjV0LTQ0IC03LjVsLTI3NiAtMTE3cS0yNSAtMTYgLTQzLjUgLTUwLjV0LTE4LjUgLTY1LjV2LTM1OXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE4MDsiIGQ9Ik0xMDAgMGg0MDB2NTZxLTc1IDAgLTg3LjUgNnQtMTIuNSA0NHYzOTRoNTAwdi0zOTRxMCAtMzggLTEyLjUgLTQ0dC04Ny41IC02di01Nmg0MDB2NTZxLTQgMCAtMTEgMC41dC0yNCAzdC0zMCA3dC0yNCAxNXQtMTEgMjQuNXY4ODhxMCAyMiAyNSAzNC41dDUwIDEzLjVsMjUgMnY1NmgtNDAwdi01NnE3NSAwIDg3LjUgLTZ0MTIuNSAtNDR2LTM5NGgtNTAwdjM5NHEwIDM4IDEyLjUgNDR0ODcuNSA2djU2aC00MDB2LTU2cTQgMCAxMSAtMC41IHQyNCAtM3QzMCAtN3QyNCAtMTV0MTEgLTI0LjV2LTg4OHEwIC0yMiAtMjUgLTM0LjV0LTUwIC0xMy41bC0yNSAtMnYtNTZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxODE7IiBkPSJNMCAzMDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDMwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC0zMDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHpNMTAwIDEwMGg0MDBsMjAwIDIwMGgxMDVsMjk1IDk4di0yOThoLTQyNWwtMTAwIC0xMDBoLTM3NXpNMTAwIDMwMHYyMDBoMzAwdi0yMDBoLTMwMHpNMTAwIDYwMHYyMDBoMzAwdi0yMDBoLTMwMHogTTEwMCAxMDAwaDQwMGwyMDAgLTIwMHYtOThsMjk1IDk4aDEwNXYyMDBoLTQyNWwtMTAwIDEwMGgtMzc1ek03MDAgNDAydjE2M2w0MDAgMTMzdi0xNjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxODI7IiBkPSJNMTYuNSA5NzQuNXEwLjUgLTIxLjUgMTYgLTkwdDQ2LjUgLTE0MHQxMDQgLTE3Ny41dDE3NSAtMjA4cTEwMyAtMTAzIDIwNy41IC0xNzZ0MTgwIC0xMDMuNXQxMzcgLTQ3dDkyLjUgLTE2LjVsMzEgMWwxNjMgMTYycTE2IDE3IDEzIDQwLjV0LTIyIDM3LjVsLTE5MiAxMzZxLTE5IDE0IC00NSAxMnQtNDIgLTE5bC0xMTkgLTExOHEtMTQzIDEwMyAtMjY3IDIyN3EtMTI2IDEyNiAtMjI3IDI2OGwxMTggMTE4cTE3IDE3IDIwIDQxLjUgdC0xMSA0NC41bC0xMzkgMTk0cS0xNCAxOSAtMzYuNSAyMnQtNDAuNSAtMTRsLTE2MiAtMTYycS0xIC0xMSAtMC41IC0zMi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTgzOyIgZD0iTTAgNTB2MjEycTAgMjAgMTAuNSA0NS41dDI0LjUgMzkuNWwzNjUgMzAzdjUwcTAgNCAxIDEwLjV0MTIgMjIuNXQzMCAyOC41dDYwIDIzdDk3IDEwLjV0OTcgLTEwdDYwIC0yMy41dDMwIC0yNy41dDEyIC0yNGwxIC0xMHYtNTBsMzY1IC0zMDNxMTQgLTE0IDI0LjUgLTM5LjV0MTAuNSAtNDUuNXYtMjEycTAgLTIxIC0xNSAtMzUuNXQtMzUgLTE0LjVoLTExMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0wIDcxMiBxMCAtMjEgMTQuNSAtMzMuNXQzNC41IC04LjVsMjAyIDMzcTIwIDQgMzQuNSAyMXQxNC41IDM4djE0NnExNDEgMjQgMzAwIDI0dDMwMCAtMjR2LTE0NnEwIC0yMSAxNC41IC0zOHQzNC41IC0yMWwyMDIgLTMzcTIwIC00IDM0LjUgOC41dDE0LjUgMzMuNXYyMDBxLTYgOCAtMTkgMjAuNXQtNjMgNDV0LTExMiA1N3QtMTcxIDQ1dC0yMzUgMjAuNXEtOTIgMCAtMTc1IC0xMC41dC0xNDEuNSAtMjd0LTEwOC41IC0zNi41dC04MS41IC00MCB0LTUzLjUgLTM2LjV0LTMxIC0yNy41bC05IC0xMHYtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTg0OyIgZD0iTTEwMCAwdjEwMGgxMTAwdi0xMDBoLTExMDB6TTE3NSAyMDBoOTUwbC0xMjUgMTUwdjI1MGwxMDAgMTAwdjQwMGgtMTAwdi0yMDBoLTEwMHYyMDBoLTIwMHYtMjAwaC0xMDB2MjAwaC0yMDB2LTIwMGgtMTAwdjIwMGgtMTAwdi00MDBsMTAwIC0xMDB2LTI1MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE4NTsiIGQ9Ik0xMDAgMGgzMDB2NDAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC0xMDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTQwMHpNNTAwIDB2MTAwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDAwaC0zMDB6TTkwMCAwdjcwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di03MDBoLTMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE4NjsiIGQ9Ik0tMTAwIDMwMHY1MDBxMCAxMjQgODggMjEydDIxMiA4OGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnpNMTAwIDIwMGg5MDB2NzAwaC05MDB2LTcwMHpNMjAwIDMwMGgzMDB2MzAwaC0yMDB2MTAwaDIwMHYxMDBoLTMwMHYtMzAwaDIwMHYtMTAwaC0yMDB2LTEwMHpNNjAwIDMwMGgyMDB2MTAwaDEwMHYzMDBoLTEwMHYxMDBoLTIwMHYtNTAwIHpNNzAwIDQwMHYzMDBoMTAwdi0zMDBoLTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE4NzsiIGQ9Ik0tMTAwIDMwMHY1MDBxMCAxMjQgODggMjEydDIxMiA4OGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnpNMTAwIDIwMGg5MDB2NzAwaC05MDB2LTcwMHpNMjAwIDMwMGgxMDB2MjAwaDEwMHYtMjAwaDEwMHY1MDBoLTEwMHYtMjAwaC0xMDB2MjAwaC0xMDB2LTUwMHpNNjAwIDMwMGgyMDB2MTAwaDEwMHYzMDBoLTEwMHYxMDBoLTIwMHYtNTAwIHpNNzAwIDQwMHYzMDBoMTAwdi0zMDBoLTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE4ODsiIGQ9Ik0tMTAwIDMwMHY1MDBxMCAxMjQgODggMjEydDIxMiA4OGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnpNMTAwIDIwMGg5MDB2NzAwaC05MDB2LTcwMHpNMjAwIDMwMGgzMDB2MTAwaC0yMDB2MzAwaDIwMHYxMDBoLTMwMHYtNTAwek02MDAgMzAwaDMwMHYxMDBoLTIwMHYzMDBoMjAwdjEwMGgtMzAwdi01MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxODk7IiBkPSJNLTEwMCAzMDB2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODhoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ6TTEwMCAyMDBoOTAwdjcwMGgtOTAwdi03MDB6TTIwMCA1NTBsMzAwIC0xNTB2MzAwek02MDAgNDAwbDMwMCAxNTBsLTMwMCAxNTB2LTMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MDsiIGQ9Ik0tMTAwIDMwMHY1MDBxMCAxMjQgODggMjEydDIxMiA4OGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnpNMTAwIDIwMGg5MDB2NzAwaC05MDB2LTcwMHpNMjAwIDMwMHY1MDBoNzAwdi01MDBoLTcwMHpNMzAwIDQwMGgxMzBxNDEgMCA2OCA0MnQyNyAxMDd0LTI4LjUgMTA4dC02Ni41IDQzaC0xMzB2LTMwMHpNNTc1IDU0OSBxMCAtNjUgMjcgLTEwN3Q2OCAtNDJoMTMwdjMwMGgtMTMwcS0zOCAwIC02Ni41IC00M3QtMjguNSAtMTA4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTkxOyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgMzAwaDMwMHYzMDBoLTIwMHYxMDBoMjAwdjEwMGgtMzAwdi0zMDBoMjAwdi0xMDBoLTIwMHYtMTAwek02MDEgMzAwaDEwMHYxMDBoLTEwMHYtMTAwek03MDAgNzAwaDEwMCB2LTQwMGgxMDB2NTAwaC0yMDB2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MjsiIGQ9Ik0tMTAwIDMwMHY1MDBxMCAxMjQgODggMjEydDIxMiA4OGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnpNMTAwIDIwMGg5MDB2NzAwaC05MDB2LTcwMHpNMjAwIDMwMGgzMDB2NDAwaC0yMDB2MTAwaC0xMDB2LTUwMHpNMzAxIDQwMHYyMDBoMTAwdi0yMDBoLTEwMHpNNjAxIDMwMGgxMDB2MTAwaC0xMDB2LTEwMHpNNzAwIDcwMGgxMDAgdi00MDBoMTAwdjUwMGgtMjAwdi0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxOTM7IiBkPSJNLTEwMCAzMDB2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODhoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ6TTEwMCAyMDBoOTAwdjcwMGgtOTAwdi03MDB6TTIwMCA3MDB2MTAwaDMwMHYtMzAwaC05OXYtMTAwaC0xMDB2MTAwaDk5djIwMGgtMjAwek0yMDEgMzAwdjEwMGgxMDB2LTEwMGgtMTAwek02MDEgMzAwdjEwMGgxMDB2LTEwMGgtMTAweiBNNzAwIDcwMHYxMDBoMjAwdi01MDBoLTEwMHY0MDBoLTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE5NDsiIGQ9Ik00IDYwMHEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4NiA2MDBxMCAtMTcxIDEyMS41IC0yOTIuNXQyOTIuNSAtMTIxLjV0MjkyLjUgMTIxLjV0MTIxLjUgMjkyLjV0LTEyMS41IDI5Mi41dC0yOTIuNSAxMjEuNXQtMjkyLjUgLTEyMS41dC0xMjEuNSAtMjkyLjV6TTQwMCA1MDB2MjAwIGwxMDAgMTAwaDMwMHYtMTAwaC0zMDB2LTIwMGgzMDB2LTEwMGgtMzAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTk1OyIgZD0iTTAgNjAwcTAgMTYyIDgwIDI5OXQyMTcgMjE3dDI5OSA4MHQyOTkgLTgwdDIxNyAtMjE3dDgwIC0yOTl0LTgwIC0yOTl0LTIxNyAtMjE3dC0yOTkgLTgwdC0yOTkgODB0LTIxNyAyMTd0LTgwIDI5OXpNMTgyIDYwMHEwIC0xNzEgMTIxLjUgLTI5Mi41dDI5Mi41IC0xMjEuNXQyOTIuNSAxMjEuNXQxMjEuNSAyOTIuNXQtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNNDAwIDQwMHY0MDBoMzAwIGwxMDAgLTEwMHYtMTAwaC0xMDB2MTAwaC0yMDB2LTEwMGgyMDB2LTEwMGgtMjAwdi0xMDBoLTEwMHpNNzAwIDQwMHYxMDBoMTAwdi0xMDBoLTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE5NzsiIGQ9Ik0tMTQgNDk0cTAgLTgwIDU2LjUgLTEzN3QxMzUuNSAtNTdoMjIydjMwMGg0MDB2LTMwMGgxMjhxMTIwIDAgMjA1IDg2dDg1IDIwOHEwIDEyMCAtODUgMjA2LjV0LTIwNSA4Ni41cS00NiAwIC05MCAtMTRxLTQ0IDk3IC0xMzQuNSAxNTYuNXQtMjAwLjUgNTkuNXEtMTUyIDAgLTI2MCAtMTA3LjV0LTEwOCAtMjYwLjVxMCAtMjUgMiAtMzdxLTY2IC0xNCAtMTA4LjUgLTY3LjV0LTQyLjUgLTEyMi41ek0zMDAgMjAwaDIwMHYzMDBoMjAwdi0zMDAgaDIwMGwtMzAwIC0zMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxOTg7IiBkPSJNLTE0IDQ5NHEwIC04MCA1Ni41IC0xMzd0MTM1LjUgLTU3aDhsNDE0IDQxNGw0MDMgLTQwM3E5NCAyNiAxNTQuNSAxMDR0NjAuNSAxNzhxMCAxMjEgLTg1IDIwNy41dC0yMDUgODYuNXEtNDYgMCAtOTAgLTE0cS00NCA5NyAtMTM0LjUgMTU2LjV0LTIwMC41IDU5LjVxLTE1MiAwIC0yNjAgLTEwNy41dC0xMDggLTI2MC41cTAgLTI1IDIgLTM3cS02NiAtMTQgLTEwOC41IC02Ny41dC00Mi41IC0xMjIuNXpNMzAwIDIwMGwzMDAgMzAwIGwzMDAgLTMwMGgtMjAwdi0zMDBoLTIwMHYzMDBoLTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE5OTsiIGQ9Ik0xMDAgMjAwaDQwMHYtMTU1bC03NSAtNDVoMzUwbC03NSA0NXYxNTVoNDAwbC0yNzAgMzAwaDE3MGwtMjcwIDMwMGgxNzBsLTMwMCAzMzNsLTMwMCAtMzMzaDE3MGwtMjcwIC0zMDBoMTcweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMjAwOyIgZD0iTTEyMSA3MDBxMCAtNTMgMjguNSAtOTd0NzUuNSAtNjVxLTQgLTE2IC00IC0zOHEwIC03NCA1Mi41IC0xMjYuNXQxMjYuNSAtNTIuNXE1NiAwIDEwMCAzMHYtMzA2bC03NSAtNDVoMzUwbC03NSA0NXYzMDZxNDYgLTMwIDEwMCAtMzBxNzQgMCAxMjYuNSA1Mi41dDUyLjUgMTI2LjVxMCAyNCAtOSA1NXE1MCAzMiA3OS41IDgzdDI5LjUgMTEycTAgOTAgLTYxLjUgMTU1LjV0LTE1MC41IDcxLjVxLTI2IDg5IC05OS41IDE0NS41IHQtMTY3LjUgNTYuNXEtMTE2IDAgLTE5Ny41IC04MS41dC04MS41IC0xOTcuNXEwIC00IDEgLTEydDEgLTExcS0xNCAyIC0yMyAycS03NCAwIC0xMjYuNSAtNTIuNXQtNTIuNSAtMTI2LjV6IiAvPgorPC9mb250PgorPC9kZWZzPjwvc3ZnPiAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci50dGYgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci50dGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5OGVmNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnR0ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci53b2ZmIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIud29mZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODNjNTM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIud29mZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaHRtbC9sYXllcl9kZXBzX21vZGFsLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaHRtbC9sYXllcl9kZXBzX21vZGFsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFkYmE0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9odG1sL2xheWVyX2RlcHNfbW9kYWwuaHRtbApAQCAtMCwwICsxLDE3IEBACis8ZGl2IGlkPSJkZXBlbmRlbmNpZXMtbW9kYWwiIGNsYXNzPSJtb2RhbCBoaWRlIGZhZGUiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWhpZGRlbj0iZmFsc2UiPgorICA8Zm9ybSBpZD0iZGVwZW5kZW5jaWVzLW1vZGFsLWZvcm0iPgorICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+eDwvYnV0dG9uPgorICAgICAgPGgzPjxzcGFuIGlkPSJ0aXRsZSI+PC9zcGFuPiBkZXBlbmRlbmNpZXM8L2gzPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgPHAgaWQ9ImJvZHktdGV4dCI+IDxzdHJvbmcgaWQ9ImxheWVyLW5hbWUiPjwvc3Ryb25nPiBkZXBlbmRzIG9uIHNvbWUgbGF5ZXJzIHRoYXQgYXJlIG5vdCBhZGRlZCB0byB5b3VyIHByb2plY3QuIFNlbGVjdCB0aGUgb25lcyB5b3Ugd2FudCB0byBhZGQ6PC9wPgorICAgICAgPHVsIGNsYXNzPSJ1bnN0eWxlZCIgaWQ9ImRlcGVuZGVuY2llcy1saXN0Ij4KKyAgICAgIDwvdWw+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KKyAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgdHlwZT0ic3VibWl0Ij5BZGQgbGF5ZXJzPC9idXR0b24+CisgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHR5cGU9InJlc2V0IiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DYW5jZWw8L2J1dHRvbj4KKyAgICA8L2Rpdj4KKyAgPC9mb3JtPgorPC9kaXY+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLXdoaXRlLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3Mtd2hpdGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZjY0ODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLXdoaXRlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OTY5OTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL2xvZ28ucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ltZy9sb2dvLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWFkNzMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ltZy9sb2dvLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL3RvYXN0ZXJfYncucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ltZy90b2FzdGVyX2J3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDY1OTA3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ltZy90b2FzdGVyX2J3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanF1ZXJ5LXRyZWV0YWJsZS1saWNlbnNlL0dQTC1MSUNFTlNFLnR4dCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcXVlcnktdHJlZXRhYmxlLWxpY2Vuc2UvR1BMLUxJQ0VOU0UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OTI3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanF1ZXJ5LXRyZWV0YWJsZS1saWNlbnNlL0dQTC1MSUNFTlNFLnR4dApAQCAtMCwwICsxLDI3OCBAQAorICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgICAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisgICAgICAgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisgICAgICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKyAgICAgICAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pxdWVyeS10cmVldGFibGUtbGljZW5zZS9NSVQtTElDRU5TRS50eHQgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanF1ZXJ5LXRyZWV0YWJsZS1saWNlbnNlL01JVC1MSUNFTlNFLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmU4MjRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pxdWVyeS10cmVldGFibGUtbGljZW5zZS9NSVQtTElDRU5TRS50eHQKQEAgLTAsMCArMSwyMCBAQAorQ29weXJpZ2h0IChjKSAyMDEzIEx1ZG8gdmFuIGRlbiBCb29tLCBodHRwOi8vbHVkb3ZhbmRlbmJvb20uY29tCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCitkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwordGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQoraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCitXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcXVlcnktdHJlZXRhYmxlLWxpY2Vuc2UvUkVBRE1FLm1kIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pxdWVyeS10cmVldGFibGUtbGljZW5zZS9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNlN2FmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcXVlcnktdHJlZXRhYmxlLWxpY2Vuc2UvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMjAgQEAKKyMgalF1ZXJ5IHRyZWV0YWJsZQorCitqUXVlcnkgdHJlZXRhYmxlIGlzIGEgcGx1Z2luIGZvciBqUXVlcnksIHRoZSAnV3JpdGUgTGVzcywgRG8gTW9yZSwgSmF2YVNjcmlwdAorTGlicmFyeScuIFdpdGggdGhpcyBwbHVnaW4geW91IGNhbiBkaXNwbGF5IGEgdHJlZSBpbiBhbiBIVE1MIHRhYmxlLCBlLmcuIGEKK2RpcmVjdG9yeSBzdHJ1Y3R1cmUgb3IgYSBuZXN0ZWQgbGlzdC4gV2h5IG5vdCB1c2UgYSBsaXN0LCB5b3Ugc2F5PyBCZWNhdXNlIGxpc3RzCithcmUgZ3JlYXQgZm9yIGRpc3BsYXlpbmcgYSB0cmVlLCBhbmQgdGFibGVzIGFyZSBub3QuIE9oIHdhaXQsIGJ1dCB0aGlzIHBsdWdpbgordXNlcyB0YWJsZXMsIGRvZXNuJ3QgaXQ/IFllcy4gV2h5IGRvIEkgdXNlIGEgdGFibGUgdG8gZGlzcGxheSBhIGxpc3Q/IEJlY2F1c2UgSQorbmVlZCBtdWx0aXBsZSBjb2x1bW5zIHRvIGRpc3BsYXkgYWRkaXRpb25hbCBkYXRhIGJlc2lkZXMgdGhlIHRyZWUuCisKK0Rvd25sb2FkIHRoZSBsYXRlc3QgcmVsZWFzZSBmcm9tIHRoZSBqUXVlcnkgUGx1Z2luIFJlZ2lzdHJ5IG9yIGdyYWIgdGhlIHNvdXJjZQorY29kZSBmcm9tIEdpdGh1Yi4gUGxlYXNlIHJlcG9ydCBpc3N1ZXMgdGhyb3VnaCBHaXRodWIgaXNzdWVzLiBUaGlzIHBsdWdpbiBpcworcmVsZWFzZWQgdW5kZXIgYm90aCB0aGUgTUlUIGFuZCB0aGUgR1BMdjIgbGljZW5zZSBieSBMdWRvIHZhbiBkZW4gQm9vbS4KKworIyMgRG9jdW1lbnRhdGlvbiBhbmQgRXhhbXBsZXMKKworU2VlIGluZGV4Lmh0bWwgZm9yIHRlY2huaWNhbCBkb2N1bWVudGF0aW9uIGFuZCBleGFtcGxlcy4gVGhlIG1vc3QgcmVjZW50IHZlcnNpb24KK29mIHRoaXMgZG9jdW1lbnQgaXMgYWxzbyBhdmFpbGFibGUgb25saW5lIGF0CitodHRwOi8vbHVkby5jdWJpY3BodXNlLm5sL2pxdWVyeS10cmVldGFibGUuIEFuIEFKQVggZW5hYmxlZCBleGFtcGxlIGJ1aWx0IHdpdGgKK1J1Ynkgb24gUmFpbHMgY2FuIGJlIGZvdW5kIGF0CitodHRwczovL2dpdGh1Yi5jb20vbHVkby9qcXVlcnktdHJlZXRhYmxlLWFqYXgtZXhhbXBsZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcXVlcnkudHJlZXRhYmxlLnRoZW1lLnRvYXN0ZXIuY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pxdWVyeS50cmVldGFibGUudGhlbWUudG9hc3Rlci5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5NGIyMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcXVlcnkudHJlZXRhYmxlLnRoZW1lLnRvYXN0ZXIuY3NzCkBAIC0wLDAgKzEsNjYgQEAKKy8qCit0YWJsZS50cmVldGFibGUgeworICBib3JkZXI6IDFweCBzb2xpZCAjODg4OyAKKyAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKyAgZm9udC1zaXplOiAuOGVtOworICBsaW5lLWhlaWdodDogMTsKKyAgbWFyZ2luOiAuNmVtIDAgMS44ZW0gMDsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSBjYXB0aW9uIHsKKyAgZm9udC1zaXplOiAuOWVtOworICBmb250LXdlaWdodDogYm9sZDsKKyAgbWFyZ2luLWJvdHRvbTogLjJlbTsKK30KKwordGFibGUudHJlZXRhYmxlIHRib2R5IHRyIHRkIHsKKyAgY3Vyc29yOiBkZWZhdWx0OworICBwYWRkaW5nOiAuM2VtIDFlbTsKK30KKwordGFibGUudHJlZXRhYmxlIHNwYW4geworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgbGVmdDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgcGFkZGluZzogLjJlbSAwIC4yZW0gMS41ZW07Cit9CisqLworCit0YWJsZS50cmVldGFibGUgc3Bhbi5maWxlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBUUFBQUMxK2pmcUFBQUFCR2RCVFVFQUFLL0lOd1dLNlFBQUFCbDBSVmgwVTI5bWRIZGhjbVVBUVdSdlltVWdTVzFoWjJWU1pXRmtlWEhKWlR3QUFBRG9TVVJCVkJnWkJjRXhibE5CR0FiQTJjZWVnVFJCdUlLT2dpaWhTWk5UY0M1TFVIQWloTkpSMGtHS0NEY1lKWTZEMy83N01kT2luVHZ6QWdDdzh5c1RoSXZuL1Zvakl5TWpJeVBQK2JTMXNVUUlWMnM5NXBCRER2bWJQL21ka2Z0ODN0cFlndVpxNUpoL09lYVloK3l6eThoVEh2TmxheE5OY3ptK2xhOU9UbGFyMVVkQS8rQzJBNHRyUkNuRDNqUzhCQjFvYnEyR2s2R1U2UWJRQVM0QlVhWVNRQWY0YmhoS0tURmRBenJBT3dBeEVVQUgrS0VNMDFTWTNnTTZ3QnNFQVFCMGdKK21hWm9DM2dJNmlQWWFBSUJKc2lSbUhVMEFBTE9lRkMzYUsyY1dBQUNVWGU3K0F3TzBsYzllVEhZVEFBQUFBRWxGVGtTdVFtQ0MpOworfQorCit0YWJsZS50cmVldGFibGUgc3Bhbi5mb2xkZXIgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUJHZEJUVUVBQUsvSU53V0s2UUFBQUJsMFJWaDBVMjltZEhkaGNtVUFRV1J2WW1VZ1NXMWhaMlZTWldGa2VYSEpaVHdBQUFHclNVUkJWRGpMeFpPN2loUkJGSWEvNnUwWlc3R0hCVVYwVVFRVFp6ZDNRZGhNUXhPZndNUlhFQU5CTU5RWDBNekF6RkF3RXpId0FSYk5GRGR3RWQzMU1qM1g3YTZ1T3I5QnR6TmpZaktCSjZuaWNQN3YzS3FjSkZheGhCVnRaVUFLOE9IbGxkMnN0N1hsM0RKUFZPTlArekVVVjRIcUw1VURZSHI1eHZ1UUFqZ2wvUXM3VHp2T09WQWp4amxDK2VQU3dlNkRmYlZlZ0xWdVQ0cjE0ZVRyNnp2QTh4U0FvQkx6eDZwdmo0bCtEWkllenVWa0c5ZlkySDdZUlFJTVpJQnd5Y216SDEvczNGOEFhcGZJUE5GM2tRazcra3c5UFdCeStJWk9kZzVVZzNta0FBVHkvdDB1c292ekdlQ1VXVGpDejBCK1NqMGVrZmR2a1ozYWJCditVNEdhQ3RKMWlFbTZBTlFKNmZFenJHL2VuZ2NLdy93WFF2RUt4U0VLUXhSR0tFN0l6dCtEU2l3QkpNVVNtNzFyZ3VNWWhRS3JCeWdPSVJTdGY0VGlGRlJCdmJSR0tpUUxXUDI5eVJTSEtCVHRmZEJtSHMwQlVwZ3Z0Z0Y0eVJGUitOVUtpMFhaY1lqQ2VDRzJzbWt6TEFIa2JSQm1QMC9VazI2TzVZblVBY3RCcDFHc0FJK1M1blJKSkphbDVLMWFBTXJxMGQ2VG05dUk2emp5Zjc1ZEFlNnR4L1NzV2VELy9vMi9BYjZJSDMvaDI1cE9BQUFBQUVsRlRrU3VRbUNDKTsKK30KKwordGFibGUudHJlZXRhYmxlIHRyLmNvbGxhcHNlZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUhsSlJFRlVlTnJjVTFzTmdEQVE2d2dtY0FNMk1JQ0dHbGcxZ0puTnpXUWN2d1FHeTFqNG9VbC83dEgwbXB3ek03U2dReU8rRVpBVVdoMk1ra3pTV2hKd3VSQWxIWXNKd0V3eXZzMWdBQkR1enFvSmNUdzVxeGFJSk4wYmdRUmdJam5sbW4xaGVTTzVQRTZZMllYZSs1Q3I1K2grK2dzMTJBY0FTNkZTKzdZT3NqNEFBQUFBU1VWT1JLNUNZSUk9KTsKK30KKwordGFibGUudHJlZXRhYmxlIHRyLmV4cGFuZGVkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBSEZKUkVGVWVOcGkvUC8vUHdNbGdJbUJRc0E0NEM2Z3ZoZmEyOXYzTXpBd09PRFJjNkN5c3RJUmJ4aTB0N2ZqREpqS3lrcEdZcnd3aTFoeG5MSFEzdDcraklHQlFSSko2SGxsWmFVVUtZRVlSWUJQT0IwZ0JTaEt3S0dBLy8vLzQ4VnRiVzMvOGNsVG5CSUgzZ0NLa3pKZ0FHdkJYMGREbTBzQ0FBQUFBRWxGVGtTdVFtQ0MpOworfQorCisKKwordGFibGUudHJlZXRhYmxlIHRyLmNvbGxhcHNlZC5zZWxlY3RlZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUZwSlJFRlVlTnBpL1AvL1B3TWxnSEhBRFdENC8vOC9OdHlBUXh3RDQ1S0FBUWRLRGZqLy8vLy8vZmdNSXNZQVpJTXcxREtSRUZ3T0RBd00vNGtOUktxNjRBQURBNE1qRkRPUTZnS3lZNEhvZE1BNDlQTUN4UVlBQmdBVllIc2p5WjF4N1FBQUFBQkpSVTVFcmtKZ2dnPT0pOworfQorCit0YWJsZS50cmVldGFibGUgdHIuZXhwYW5kZWQuc2VsZWN0ZWQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFGdEpSRUZVZU5waS9QLy9Qd01sZ0ltQlFzQTQ0QzZnaVFFTkRBd00vL0hnQm1MQ0FGL0FNQkxqQlVlaXhmLy8vNDhMNy8rUEN2WmpVNGZQQUFjMEF4eXdxY01YQ3dlZ0dKMU5ja0w2ang1d3BLWUR4cUdYRWtrQ2dBRUFtcnFCSWVqZGduZ0FBQUFBU1VWT1JLNUNZSUk9KTsKK30KKwordGFibGUudHJlZXRhYmxlIHRyLmFjY2VwdCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNhM2JjZTQ7CisgIGNvbG9yOiAjZmZmCit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5jb2xsYXBzZWQuYWNjZXB0IHRkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3gtcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFGcEpSRUZVZU5waS9QLy9Qd01sZ0hIQURXRDQvLzgvTnR5QVF4d0Q0NUtBQVFkS0Rmai8vLy8vL2ZnTUlzWUFaSU13MURLUkVGd09EQXdNLzRrTlJLcTY0QUFEQTRNakZET1E2Z0t5WTRIb2RNQTQ5UE1DeFFZQUJnQVZZSHNqeVoxeDdRQUFBQUJKUlU1RXJrSmdnZz09KTsKK30KKwordGFibGUudHJlZXRhYmxlIHRyLmV4cGFuZGVkLmFjY2VwdCB0ZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS94LXBuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBRnRKUkVGVWVOcGkvUC8vUHdNbGdJbUJRc0E0NEM2Z2lRRU5EQXdNLy9IZ0JtTENBRi9BTUJMakJVZWl4Zi8vLzQ4TDcvK1BDdlpqVTRmUEFBYzBBeHl3cWNNWEN3ZWdHSjFOY2tMNmp4NXdwS1lEeHFHWEVra0NnQUVBbXJxQkllamRnbmdBQUFBQVNVVk9SSzVDWUlJPSk7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvLmpzaGludHJjIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzLy5qc2hpbnRyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDJmM2VmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzLy5qc2hpbnRyYwpAQCAtMCwwICsxLDExIEBACit7CisgICJjdXJseSIgOiBmYWxzZSwKKyAgInByZWRlZiIgOiBbICIkIiwibGlidG9hc3RlciIsICJwcmV0dHlQcmludCIgXSwKKyAgImVxbnVsbCI6IHRydWUsCisgICJwbHVzcGx1cyIgOiBmYWxzZSwKKyAgImJyb3dzZXIiIDogdHJ1ZSwKKyAgImpxdWVyeSIgOiB0cnVlLAorICAiZGV2ZWwiIDogdHJ1ZSwKKyAgInVudXNlZCIgOiB0cnVlLAorICAibWF4ZXJyIiA6IDYwCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvYmFzZS5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZGY0NjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvYmFzZS5qcwpAQCAtMCwwICsxLDIzMSBAQAorJ3VzZSBzdHJpY3QnOworCitmdW5jdGlvbiBiYXNlUGFnZUluaXQoY3R4KSB7CisKKyAgdmFyIG5ld0J1aWxkQnV0dG9uID0gJCgiI25ldy1idWlsZC1idXR0b24iKTsKKyAgdmFyIG5ld0J1aWxkVGFyZ2V0SW5wdXQ7CisgIHZhciBuZXdCdWlsZFRhcmdldEJ1aWxkQnRuOworICB2YXIgcHJvamVjdE5hbWVGb3JtID0gJCgiI3Byb2plY3QtbmFtZS1jaGFuZ2UtZm9ybSIpOworICB2YXIgcHJvamVjdE5hbWUgPSAkKCIjcHJvamVjdC1uYW1lIik7CisgIHZhciBwcm9qZWN0TmFtZUZvcm1Ub2dnbGUgPSAkKCIjcHJvamVjdC1jaGFuZ2UtZm9ybS10b2dnbGUiKTsKKyAgdmFyIHByb2plY3ROYW1lQ2hhbmdlQ2FuY2VsID0gJCgiI3Byb2plY3QtbmFtZS1jaGFuZ2UtY2FuY2VsIik7CisKKyAgLyogaW5pdGlhbGx5IHRoZSBjdXJyZW50IHByb2plY3QgaXMgdXNlZCB1bmxlc3Mgb3ZlcnJpZGRlbiBieSB0aGUgbmV3IGJ1aWxkCisgICAqIGJ1dHRvbiBpbiB0b3AgcmlnaHQgbmF2CisgICAqLworICB2YXIgc2VsZWN0ZWRQcm9qZWN0ID0gbGlidG9hc3Rlci5jdHg7CisKKyAgdmFyIHNlbGVjdGVkVGFyZ2V0OworCisgIHZhciBuZXdCdWlsZFByb2plY3RJbnB1dCA9ICQoIiNuZXctYnVpbGQtYnV0dG9uICNwcm9qZWN0LW5hbWUtaW5wdXQiKTsKKyAgdmFyIG5ld0J1aWxkUHJvamVjdFNhdmVCdG4gPSAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAjc2F2ZS1wcm9qZWN0LWJ1dHRvbiIpOworCisgIC8qIFByb2plY3QgbmFtZSBjaGFuZ2UgZnVuY3Rpb25hbGl0eSAqLworICBwcm9qZWN0TmFtZUZvcm1Ub2dnbGUuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworCisgICAgJCh0aGlzKS5hZGQocHJvamVjdE5hbWUpLmhpZGUoKTsKKyAgICBwcm9qZWN0TmFtZUZvcm0uZmFkZUluKCk7CisgIH0pOworCisgIHByb2plY3ROYW1lQ2hhbmdlQ2FuY2VsLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgIGUucHJldmVudERlZmF1bHQoKTsKKworICAgIHByb2plY3ROYW1lRm9ybS5oaWRlKCk7CisgICAgcHJvamVjdE5hbWUuYWRkKHByb2plY3ROYW1lRm9ybVRvZ2dsZSkuZmFkZUluKCk7CisgIH0pOworCisgICQoIiNwcm9qZWN0LW5hbWUtY2hhbmdlLWJ0biIpLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgIHZhciBuZXdQcm9qZWN0TmFtZSA9ICQoIiNwcm9qZWN0LW5hbWUtY2hhbmdlLWlucHV0IikudmFsKCk7CisKKyAgICBsaWJ0b2FzdGVyLmVkaXRDdXJyZW50UHJvamVjdCh7IHByb2plY3ROYW1lOiBuZXdQcm9qZWN0TmFtZSB9LGZ1bmN0aW9uICgpeworCisgICAgICBwcm9qZWN0TmFtZS50ZXh0KG5ld1Byb2plY3ROYW1lKTsKKyAgICAgIGxpYnRvYXN0ZXIuY3R4LnByb2plY3ROYW1lID0gbmV3UHJvamVjdE5hbWU7CisgICAgICBwcm9qZWN0TmFtZUNoYW5nZUNhbmNlbC5jbGljaygpOworICAgIH0pOworICB9KTsKKworICBfY2hlY2tQcm9qZWN0QnVpbGRhYmxlKCk7CisKKyAgJCgiI3Byb2plY3QtdG9wYmFyIC5uYXYgbGkgYSIpLmVhY2goZnVuY3Rpb24oKXsKKyAgICBpZiAod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lID09PSAkKHRoaXMpLmF0dHIoJ2hyZWYnKSkKKyAgICAgICQodGhpcykucGFyZW50KCkuYWRkQ2xhc3MoJ2FjdGl2ZScpOworICAgIGVsc2UKKyAgICAgICQodGhpcykucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpOworICB9KTsKKworICBpZiAoJCgiLnRvdGFsLWJ1aWxkcyIpLmxlbmd0aCAhPT0gMCl7CisgICAgbGlidG9hc3Rlci5nZXRQcm9qZWN0SW5mbyhsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0UGFnZVVybCwgZnVuY3Rpb24ocHJqSW5mbyl7CisgICAgICBpZiAocHJqSW5mby5idWlsZHMpCisgICAgICAgICQoIi50b3RhbC1idWlsZHMiKS50ZXh0KHByakluZm8uYnVpbGRzLmxlbmd0aCk7CisgICAgfSk7CisgIH0KKworICAvKiBIaWRlIHRoZSBidXR0b24gaWYgd2UncmUgb24gdGhlIHByb2plY3QsbmV3cHJvamVjdCBvciBpbXBvcnRseWFlciBwYWdlCisgICAqIG9yIGlmIHRoZXJlIGFyZSBubyBwcm9qZWN0cyB5ZXQgZGVmaW5lZAorICAgKiBvbmx5IHNob3cgaWYgdGhlcmUgaXNuJ3QgYWxyZWFkeSBhIGJ1aWxkLXRhcmdldC1pbnB1dCBhbHJlYWR5CisgICAqLworICBpZiAoY3R4Lm51bVByb2plY3RzID4gMCAmJgorICAgICAgY3R4LmN1cnJlbnRVcmwuc2VhcmNoKCduZXdwcm9qZWN0JykgPCAwICYmCisgICAgICAkKCIuYnVpbGQtdGFyZ2V0LWlucHV0IikubGVuZ3RoID09PSAxKSB7CisKKyAgICBuZXdCdWlsZFRhcmdldElucHV0ID0gJCgiI25ldy1idWlsZC1idXR0b24gLmJ1aWxkLXRhcmdldC1pbnB1dCIpOworICAgIG5ld0J1aWxkVGFyZ2V0QnVpbGRCdG4gPSAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiIpLmZpbmQoIi5idWlsZC1idXR0b24iKTsKKworICAgIF9zZXR1cE5ld0J1aWxkQnV0dG9uKCk7CisgICAgbmV3QnVpbGRCdXR0b24uc2hvdygpOworICB9IGVsc2UgaWYgKCQoIi5idWlsZC10YXJnZXQtaW5wdXQiKS5sZW5ndGggPiAwKSB7CisgICAgbmV3QnVpbGRUYXJnZXRJbnB1dCA9ICQoIiNwcm9qZWN0LXRvcGJhciAuYnVpbGQtdGFyZ2V0LWlucHV0Iik7CisgICAgbmV3QnVpbGRUYXJnZXRCdWlsZEJ0biA9ICQoIiNwcm9qZWN0LXRvcGJhciAuYnVpbGQtYnV0dG9uIik7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuOworICB9CisKKyAgLyogSGlkZSB0aGUgY2hhbmdlIHByb2plY3QgaWNvbiB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIHByb2plY3QgKi8KKyAgaWYgKGN0eC5udW1Qcm9qZWN0cyA9PT0gMSkgeworICAgICQoJyNwcm9qZWN0IC5pY29uLXBlbmNpbCcpLmhpZGUoKTsKKyAgfQorCisgIC8qIElmIHdlIGhhdmUgYSBwcm9qZWN0IHNldHVwIHRoZSB0eXBlYWhlYWQgKi8KKyAgaWYgKHNlbGVjdGVkUHJvamVjdC5yZWNpcGVzVHlwZUFoZWFkVXJsKXsKKyAgICBsaWJ0b2FzdGVyLm1ha2VUeXBlYWhlYWQobmV3QnVpbGRUYXJnZXRJbnB1dCwgc2VsZWN0ZWRQcm9qZWN0LnJlY2lwZXNUeXBlQWhlYWRVcmwsIHsgZm9ybWF0OiAianNvbiIgfSwgZnVuY3Rpb24gKGl0ZW0pIHsKKyAgICAgIHNlbGVjdGVkVGFyZ2V0ID0gaXRlbTsKKyAgICAgIG5ld0J1aWxkVGFyZ2V0QnVpbGRCdG4ucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgICB9KTsKKyAgfQorCisgIG5ld0J1aWxkVGFyZ2V0SW5wdXQub24oJ2lucHV0JywgZnVuY3Rpb24gKCkgeworICAgIGlmICgkKHRoaXMpLnZhbCgpLmxlbmd0aCA9PT0gMCkgeworICAgICAgbmV3QnVpbGRUYXJnZXRCdWlsZEJ0bi5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOworICAgIH0gZWxzZSB7CisgICAgICBuZXdCdWlsZFRhcmdldEJ1aWxkQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgfQorICB9KTsKKworICBuZXdCdWlsZFRhcmdldEJ1aWxkQnRuLmNsaWNrKGZ1bmN0aW9uIChlKSB7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworCisgICAgaWYgKCFuZXdCdWlsZFRhcmdldElucHV0LnZhbCgpKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogV2UgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgZmllbGQgc28gYXMgdG8gbWFpbnRhaW4gYW55IGNvbW1hbmQgYWxzbworICAgICAqIGFkZGVkIGUuZy4gY29yZS1pbWFnZS1taW5pbWFsOmNsZWFuCisgICAgICovCisgICAgc2VsZWN0ZWRUYXJnZXQgPSB7IG5hbWU6IG5ld0J1aWxkVGFyZ2V0SW5wdXQudmFsKCkgfTsKKworICAgIC8qIEZpcmUgb2ZmIHRoZSBidWlsZCAqLworICAgIGxpYnRvYXN0ZXIuc3RhcnRBQnVpbGQoc2VsZWN0ZWRQcm9qZWN0LnByb2plY3RCdWlsZHNVcmwsCisgICAgICBzZWxlY3RlZFByb2plY3QucHJvamVjdElkLCBzZWxlY3RlZFRhcmdldC5uYW1lLCBmdW5jdGlvbigpeworICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2Uoc2VsZWN0ZWRQcm9qZWN0LnByb2plY3RCdWlsZHNVcmwpOworICAgIH0sIG51bGwpOworICB9KTsKKworICBmdW5jdGlvbiBfY2hlY2tQcm9qZWN0QnVpbGRhYmxlKCkgeworICAgIGlmIChzZWxlY3RlZFByb2plY3QucHJvamVjdElkID09PSB1bmRlZmluZWQpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsaWJ0b2FzdGVyLmdldFByb2plY3RJbmZvKHNlbGVjdGVkUHJvamVjdC5wcm9qZWN0UGFnZVVybCwKKyAgICAgIGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgIGlmIChkYXRhLm1hY2hpbmUgPT09IG51bGwgfHwgZGF0YS5tYWNoaW5lLm5hbWUgPT09IHVuZGVmaW5lZCB8fCBkYXRhLmxheWVycy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAvKiB3ZSBjYW4ndCBidWlsZCBhbnl0aGluZyB3aXRoIG91dCBhIG1hY2hpbmUgYW5kIHNvbWUgbGF5ZXJzICovCisgICAgICAgICAgJCgiI25ldy1idWlsZC1idXR0b24gI3RhcmdldHMtZm9ybSIpLmhpZGUoKTsKKyAgICAgICAgICAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAuYWxlcnQiKS5zaG93KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgJCgiI25ldy1idWlsZC1idXR0b24gI3RhcmdldHMtZm9ybSIpLnNob3coKTsKKyAgICAgICAgICAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAuYWxlcnQiKS5oaWRlKCk7CisKKyAgICAgICAgICAvKiB3ZSBjYW4gYnVpbGQgdGhpcyBwcm9qZWN0OyBlbmFibGUgaW5wdXQgZmllbGRzICovCisgICAgICAgICAgbmV3QnVpbGRUYXJnZXRJbnB1dC5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgIH0KKyAgICAgIH0sIG51bGwpOworICB9CisKKyAgLyogU2V0dXAgTmV3IGJ1aWxkIGJ1dHRvbiBpbiB0aGUgdG9wIG5hdiBiYXIgKi8KKyAgZnVuY3Rpb24gX3NldHVwTmV3QnVpbGRCdXR0b24oKSB7CisKKyAgICAvKiBJZiB3ZSBkb24ndCBoYXZlIGEgY3VycmVudCBwcm9qZWN0IHRoZW4gcHJlc2VudCB0aGUgc2V0IHByb2plY3QKKyAgICAgKiBmb3JtLgorICAgICAqLworICAgIGlmIChzZWxlY3RlZFByb2plY3QucHJvamVjdElkID09PSB1bmRlZmluZWQpIHsKKyAgICAgICQoJyNjaGFuZ2UtcHJvamVjdC1mb3JtJykuc2hvdygpOworICAgICAgJCgnI3Byb2plY3QgLmljb24tcGVuY2lsJykuaGlkZSgpOworICAgIH0KKworICAgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChuZXdCdWlsZFByb2plY3RJbnB1dCwgc2VsZWN0ZWRQcm9qZWN0LnByb2plY3RzVHlwZUFoZWFkVXJsLCB7IGZvcm1hdCA6ICJqc29uIiB9LCBmdW5jdGlvbiAoaXRlbSkgeworICAgICAgLyogc3VjY2Vzc2Z1bGx5IHNlbGVjdGVkIGEgcHJvamVjdCAqLworICAgICAgbmV3QnVpbGRQcm9qZWN0U2F2ZUJ0bi5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgc2VsZWN0ZWRQcm9qZWN0ID0gaXRlbTsKKyAgICB9KTsKKworICAgIC8qIEFueSB0eXBpbmcgaW4gdGhlIGlucHV0IGFwYXJ0IGZyb20gZW50ZXIga2V5IGlzIGdvaW5nIHRvIGludmFsaWRhdGUKKyAgICAgKiB0aGUgdmFsdWUgdGhhdCBoYXMgYmVlbiBzZXQgYnkgc2VsZWN0aW5nIGEgc3VnZ2VzdGlvbiBmcm9tIHRoZSB0eXBlYWhlYWQKKyAgICAgKi8KKyAgICBuZXdCdWlsZFByb2plY3RJbnB1dC5vbignaW5wdXQnLCBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBuZXdCdWlsZFByb2plY3RTYXZlQnRuLmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CisgICAgfSk7CisKKworICAgIG5ld0J1aWxkUHJvamVjdFNhdmVCdG4uY2xpY2soZnVuY3Rpb24gKCkgeworICAgICAgc2VsZWN0ZWRQcm9qZWN0LnByb2plY3RJZCA9IHNlbGVjdGVkUHJvamVjdC5pZDsKKyAgICAgIC8qIFVwZGF0ZSB0aGUgdHlwZWFoZWFkIHByb2plY3RfaWQgcGFyYW1hdGVyICovCisgICAgICBfY2hlY2tQcm9qZWN0QnVpbGRhYmxlKCk7CisKKyAgICAgIG5ld0J1aWxkVGFyZ2V0SW5wdXQucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKworICAgICAgLyogV2UndmUgZ290IGEgbmV3IHByb2plY3Qgc28gbm93IHdlIG5lZWQgdG8gdXBkYXRlIHRoZQorICAgICAgICogdGFyZ2V0IHVybHMuIFdlIGNhbiBnZXQgdGhpcyBmcm9tIHRoZSBuZXcgcHJvamVjdCdzIGluZm8KKyAgICAgICAqLworICAgICAgJC5nZXRKU09OKHNlbGVjdGVkUHJvamVjdC5wcm9qZWN0UGFnZVVybCwgeyBmb3JtYXQ6ICJqc29uIiB9LAorICAgICAgICBmdW5jdGlvbihwcm9qZWN0SW5mbyl7CisgICAgICAgICAgLyogVXBkYXRlIHRoZSB0eXBlYWhlYWQgdG8gdXNlIHRoZSBuZXcgc2VsZWN0ZWRQcm9qZWN0ICovCisgICAgICAgICAgc2VsZWN0ZWRQcm9qZWN0ID0gcHJvamVjdEluZm87CisKKyAgICAgICAgICBsaWJ0b2FzdGVyLm1ha2VUeXBlYWhlYWQobmV3QnVpbGRUYXJnZXRJbnB1dCwgc2VsZWN0ZWRQcm9qZWN0LnJlY2lwZXNUeXBlQWhlYWRVcmwsIHsgZm9ybWF0OiAianNvbiIgfSwgZnVuY3Rpb24gKGl0ZW0pIHsKKyAgICAgICAgICAgICAgLyogc3VjY2Vzc2Z1bGx5IHNlbGVjdGVkIGEgdGFyZ2V0ICovCisgICAgICAgICAgICAgIHNlbGVjdGVkVGFyZ2V0ID0gaXRlbTsKKyAgICAgICAgICAgICAgbmV3QnVpbGRUYXJnZXRCdWlsZEJ0bi5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgICAgIH0pOworCisgICAgICB9KTsKKyAgICAgIG5ld0J1aWxkVGFyZ2V0SW5wdXQudmFsKCIiKTsKKworICAgICAgLyogc2V0IHVwIG5ldyBmb3JtIGFzcGVjdCAqLworICAgICAgJCgiI25ldy1idWlsZC1idXR0b24gI3Byb2plY3QgYSIpLnRleHQoc2VsZWN0ZWRQcm9qZWN0Lm5hbWUpLmF0dHIoJ2hyZWYnLCBzZWxlY3RlZFByb2plY3QucHJvamVjdFBhZ2VVcmwpOworICAgICAgJCgiI25ldy1idWlsZC1idXR0b24gLmFsZXJ0IGEiKS5hdHRyKCdocmVmJywgc2VsZWN0ZWRQcm9qZWN0LnByb2plY3RQYWdlVXJsKTsKKyAgICAgICQoIiNwcm9qZWN0IC5pY29uLXBlbmNpbCIpLnNob3coKTsKKworICAgICAgJCgiI2NoYW5nZS1wcm9qZWN0LWZvcm0iKS5zbGlkZVVwKHsgJ2NvbXBsZXRlJyA6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAjcHJvamVjdCIpLnNob3coKTsKKyAgICAgIH19KTsKKyAgICB9KTsKKworICAgICQoJyNuZXctYnVpbGQtYnV0dG9uICNwcm9qZWN0IC5pY29uLXBlbmNpbCcpLmNsaWNrKGZ1bmN0aW9uICgpIHsKKyAgICAgIG5ld0J1aWxkUHJvamVjdFNhdmVCdG4uYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKKyAgICAgIG5ld0J1aWxkUHJvamVjdElucHV0LnZhbCgkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAjcHJvamVjdCBhIikudGV4dCgpKTsKKyAgICAgICQoIiNjYW5jZWwtY2hhbmdlLXByb2plY3QiKS5zaG93KCk7CisgICAgICAkKHRoaXMpLnBhcmVudCgpLmhpZGUoKTsKKyAgICAgICQoIiNjaGFuZ2UtcHJvamVjdC1mb3JtIikuc2xpZGVEb3duKCk7CisgICAgfSk7CisKKyAgICAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAjY2FuY2VsLWNoYW5nZS1wcm9qZWN0IikuY2xpY2soZnVuY3Rpb24gKCkgeworICAgICAgJCgiI2NoYW5nZS1wcm9qZWN0LWZvcm0iKS5oaWRlKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgJCgnI25ldy1idWlsZC1idXR0b24gI3Byb2plY3QnKS5zaG93KCk7CisgICAgICB9KTsKKworICAgICAgbmV3QnVpbGRQcm9qZWN0SW5wdXQudmFsKCIiKTsKKyAgICAgIG5ld0J1aWxkUHJvamVjdFNhdmVCdG4uYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKKyAgICB9KTsKKworICAgIC8qIEtlZXAgdGhlIGRyb3Bkb3duIG9wZW4gZXZlbiB1bmxlc3Mgd2UgY2xpY2sgb3V0c2lkZSB0aGUgZHJvcGRvd24gYXJlYSAqLworICAgICQoIi5uZXctYnVpbGQiKS5jbGljayAoZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICB9KTsKKyAgfTsKKworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2Jvb3RzdHJhcC5taW4uanMgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvYm9vdHN0cmFwLm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDgyNThkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2Jvb3RzdHJhcC5taW4uanMKQEAgLTAsMCArMSw2IEBACisvKiEKKyogQm9vdHN0cmFwLmpzIGJ5IEBmYXQgJiBAbWRvCisqIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYy4KKyogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLnR4dAorKi8KKyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZShmdW5jdGlvbigpe2Uuc3VwcG9ydC50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib290c3RyYXAiKSx0PXtXZWJraXRUcmFuc2l0aW9uOiJ3ZWJraXRUcmFuc2l0aW9uRW5kIixNb3pUcmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIixPVHJhbnNpdGlvbjoib1RyYW5zaXRpb25FbmQgb3RyYW5zaXRpb25lbmQiLHRyYW5zaXRpb246InRyYW5zaXRpb25lbmQifSxuO2ZvcihuIGluIHQpaWYoZS5zdHlsZVtuXSE9PXVuZGVmaW5lZClyZXR1cm4gdFtuXX0oKTtyZXR1cm4gZSYme2VuZDplfX0oKX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PSdbZGF0YS1kaXNtaXNzPSJhbGVydCJdJyxuPWZ1bmN0aW9uKG4pe2Uobikub24oImNsaWNrIix0LHRoaXMuY2xvc2UpfTtuLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBzKCl7aS50cmlnZ2VyKCJjbG9zZWQiKS5yZW1vdmUoKX12YXIgbj1lKHRoaXMpLHI9bi5hdHRyKCJkYXRhLXRhcmdldCIpLGk7cnx8KHI9bi5hdHRyKCJocmVmIikscj1yJiZyLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywiIikpLGk9ZShyKSx0JiZ0LnByZXZlbnREZWZhdWx0KCksaS5sZW5ndGh8fChpPW4uaGFzQ2xhc3MoImFsZXJ0Iik/bjpuLnBhcmVudCgpKSxpLnRyaWdnZXIodD1lLkV2ZW50KCJjbG9zZSIpKTtpZih0LmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjtpLnJlbW92ZUNsYXNzKCJpbiIpLGUuc3VwcG9ydC50cmFuc2l0aW9uJiZpLmhhc0NsYXNzKCJmYWRlIik/aS5vbihlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQscyk6cygpfTt2YXIgcj1lLmZuLmFsZXJ0O2UuZm4uYWxlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciByPWUodGhpcyksaT1yLmRhdGEoImFsZXJ0Iik7aXx8ci5kYXRhKCJhbGVydCIsaT1uZXcgbih0aGlzKSksdHlwZW9mIHQ9PSJzdHJpbmciJiZpW3RdLmNhbGwocil9KX0sZS5mbi5hbGVydC5Db25zdHJ1Y3Rvcj1uLGUuZm4uYWxlcnQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLmFsZXJ0PXIsdGhpc30sZShkb2N1bWVudCkub24oImNsaWNrLmFsZXJ0LmRhdGEtYXBpIix0LG4ucHJvdG90eXBlLmNsb3NlKX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1mdW5jdGlvbih0LG4pe3RoaXMuJGVsZW1lbnQ9ZSh0KSx0aGlzLm9wdGlvbnM9ZS5leHRlbmQoe30sZS5mbi5idXR0b24uZGVmYXVsdHMsbil9O3QucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGUpe3ZhciB0PSJkaXNhYmxlZCIsbj10aGlzLiRlbGVtZW50LHI9bi5kYXRhKCksaT1uLmlzKCJpbnB1dCIpPyJ2YWwiOiJodG1sIjtlKz0iVGV4dCIsci5yZXNldFRleHR8fG4uZGF0YSgicmVzZXRUZXh0IixuW2ldKCkpLG5baV0ocltlXXx8dGhpcy5vcHRpb25zW2VdKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZT09ImxvYWRpbmdUZXh0Ij9uLmFkZENsYXNzKHQpLmF0dHIodCx0KTpuLnJlbW92ZUNsYXNzKHQpLnJlbW92ZUF0dHIodCl9LDApfSx0LnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRlbGVtZW50LmNsb3Nlc3QoJ1tkYXRhLXRvZ2dsZT0iYnV0dG9ucy1yYWRpbyJdJyk7ZSYmZS5maW5kKCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoImFjdGl2ZSIpfTt2YXIgbj1lLmZuLmJ1dHRvbjtlLmZuLmJ1dHRvbj1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgiYnV0dG9uIikscz10eXBlb2Ygbj09Im9iamVjdCImJm47aXx8ci5kYXRhKCJidXR0b24iLGk9bmV3IHQodGhpcyxzKSksbj09InRvZ2dsZSI/aS50b2dnbGUoKTpuJiZpLnNldFN0YXRlKG4pfSl9LGUuZm4uYnV0dG9uLmRlZmF1bHRzPXtsb2FkaW5nVGV4dDoibG9hZGluZy4uLiJ9LGUuZm4uYnV0dG9uLkNvbnN0cnVjdG9yPXQsZS5mbi5idXR0b24ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLmJ1dHRvbj1uLHRoaXN9LGUoZG9jdW1lbnQpLm9uKCJjbGljay5idXR0b24uZGF0YS1hcGkiLCJbZGF0YS10b2dnbGVePWJ1dHRvbl0iLGZ1bmN0aW9uKHQpe3ZhciBuPWUodC50YXJnZXQpO24uaGFzQ2xhc3MoImJ0biIpfHwobj1uLmNsb3Nlc3QoIi5idG4iKSksbi5idXR0b24oInRvZ2dsZSIpfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ZnVuY3Rpb24odCxuKXt0aGlzLiRlbGVtZW50PWUodCksdGhpcy4kaW5kaWNhdG9ycz10aGlzLiRlbGVtZW50LmZpbmQoIi5jYXJvdXNlbC1pbmRpY2F0b3JzIiksdGhpcy5vcHRpb25zPW4sdGhpcy5vcHRpb25zLnBhdXNlPT0iaG92ZXIiJiZ0aGlzLiRlbGVtZW50Lm9uKCJtb3VzZWVudGVyIixlLnByb3h5KHRoaXMucGF1c2UsdGhpcykpLm9uKCJtb3VzZWxlYXZlIixlLnByb3h5KHRoaXMuY3ljbGUsdGhpcykpfTt0LnByb3RvdHlwZT17Y3ljbGU6ZnVuY3Rpb24odCl7cmV0dXJuIHR8fCh0aGlzLnBhdXNlZD0hMSksdGhpcy5pbnRlcnZhbCYmY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwmJiF0aGlzLnBhdXNlZCYmKHRoaXMuaW50ZXJ2YWw9c2V0SW50ZXJ2YWwoZS5wcm94eSh0aGlzLm5leHQsdGhpcyksdGhpcy5vcHRpb25zLmludGVydmFsKSksdGhpc30sZ2V0QWN0aXZlSW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYWN0aXZlPXRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0uYWN0aXZlIiksdGhpcy4kaXRlbXM9dGhpcy4kYWN0aXZlLnBhcmVudCgpLmNoaWxkcmVuKCksdGhpcy4kaXRlbXMuaW5kZXgodGhpcy4kYWN0aXZlKX0sdG86ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5nZXRBY3RpdmVJbmRleCgpLHI9dGhpcztpZih0PnRoaXMuJGl0ZW1zLmxlbmd0aC0xfHx0PDApcmV0dXJuO3JldHVybiB0aGlzLnNsaWRpbmc/dGhpcy4kZWxlbWVudC5vbmUoInNsaWQiLGZ1bmN0aW9uKCl7ci50byh0KX0pOm49PXQ/dGhpcy5wYXVzZSgpLmN5Y2xlKCk6dGhpcy5zbGlkZSh0Pm4/Im5leHQiOiJwcmV2IixlKHRoaXMuJGl0ZW1zW3RdKSl9LHBhdXNlOmZ1bmN0aW9uKHQpe3JldHVybiB0fHwodGhpcy5wYXVzZWQ9ITApLHRoaXMuJGVsZW1lbnQuZmluZCgiLm5leHQsIC5wcmV2IikubGVuZ3RoJiZlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQmJih0aGlzLiRlbGVtZW50LnRyaWdnZXIoZS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKSx0aGlzLmN5Y2xlKCEwKSksY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKSx0aGlzLmludGVydmFsPW51bGwsdGhpc30sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuc2xpZGluZylyZXR1cm47cmV0dXJuIHRoaXMuc2xpZGUoIm5leHQiKX0scHJldjpmdW5jdGlvbigpe2lmKHRoaXMuc2xpZGluZylyZXR1cm47cmV0dXJuIHRoaXMuc2xpZGUoInByZXYiKX0sc2xpZGU6ZnVuY3Rpb24odCxuKXt2YXIgcj10aGlzLiRlbGVtZW50LmZpbmQoIi5pdGVtLmFjdGl2ZSIpLGk9bnx8clt0XSgpLHM9dGhpcy5pbnRlcnZhbCxvPXQ9PSJuZXh0Ij8ibGVmdCI6InJpZ2h0Iix1PXQ9PSJuZXh0Ij8iZmlyc3QiOiJsYXN0IixhPXRoaXMsZjt0aGlzLnNsaWRpbmc9ITAscyYmdGhpcy5wYXVzZSgpLGk9aS5sZW5ndGg/aTp0aGlzLiRlbGVtZW50LmZpbmQoIi5pdGVtIilbdV0oKSxmPWUuRXZlbnQoInNsaWRlIix7cmVsYXRlZFRhcmdldDppWzBdLGRpcmVjdGlvbjpvfSk7aWYoaS5oYXNDbGFzcygiYWN0aXZlIikpcmV0dXJuO3RoaXMuJGluZGljYXRvcnMubGVuZ3RoJiYodGhpcy4kaW5kaWNhdG9ycy5maW5kKCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLHRoaXMuJGVsZW1lbnQub25lKCJzbGlkIixmdW5jdGlvbigpe3ZhciB0PWUoYS4kaW5kaWNhdG9ycy5jaGlsZHJlbigpW2EuZ2V0QWN0aXZlSW5kZXgoKV0pO3QmJnQuYWRkQ2xhc3MoImFjdGl2ZSIpfSkpO2lmKGUuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJzbGlkZSIpKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIoZik7aWYoZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47aS5hZGRDbGFzcyh0KSxpWzBdLm9mZnNldFdpZHRoLHIuYWRkQ2xhc3MobyksaS5hZGRDbGFzcyhvKSx0aGlzLiRlbGVtZW50Lm9uZShlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXtpLnJlbW92ZUNsYXNzKFt0LG9dLmpvaW4oIiAiKSkuYWRkQ2xhc3MoImFjdGl2ZSIpLHIucmVtb3ZlQ2xhc3MoWyJhY3RpdmUiLG9dLmpvaW4oIiAiKSksYS5zbGlkaW5nPSExLHNldFRpbWVvdXQoZnVuY3Rpb24oKXthLiRlbGVtZW50LnRyaWdnZXIoInNsaWQiKX0sMCl9KX1lbHNle3RoaXMuJGVsZW1lbnQudHJpZ2dlcihmKTtpZihmLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjtyLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxpLmFkZENsYXNzKCJhY3RpdmUiKSx0aGlzLnNsaWRpbmc9ITEsdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJzbGlkIil9cmV0dXJuIHMmJnRoaXMuY3ljbGUoKSx0aGlzfX07dmFyIG49ZS5mbi5jYXJvdXNlbDtlLmZuLmNhcm91c2VsPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJjYXJvdXNlbCIpLHM9ZS5leHRlbmQoe30sZS5mbi5jYXJvdXNlbC5kZWZhdWx0cyx0eXBlb2Ygbj09Im9iamVjdCImJm4pLG89dHlwZW9mIG49PSJzdHJpbmciP246cy5zbGlkZTtpfHxyLmRhdGEoImNhcm91c2VsIixpPW5ldyB0KHRoaXMscykpLHR5cGVvZiBuPT0ibnVtYmVyIj9pLnRvKG4pOm8/aVtvXSgpOnMuaW50ZXJ2YWwmJmkucGF1c2UoKS5jeWNsZSgpfSl9LGUuZm4uY2Fyb3VzZWwuZGVmYXVsdHM9e2ludGVydmFsOjVlMyxwYXVzZToiaG92ZXIifSxlLmZuLmNhcm91c2VsLkNvbnN0cnVjdG9yPXQsZS5mbi5jYXJvdXNlbC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4uY2Fyb3VzZWw9bix0aGlzfSxlKGRvY3VtZW50KS5vbigiY2xpY2suY2Fyb3VzZWwuZGF0YS1hcGkiLCJbZGF0YS1zbGlkZV0sIFtkYXRhLXNsaWRlLXRvXSIsZnVuY3Rpb24odCl7dmFyIG49ZSh0aGlzKSxyLGk9ZShuLmF0dHIoImRhdGEtdGFyZ2V0Iil8fChyPW4uYXR0cigiaHJlZiIpKSYmci5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpKSxzPWUuZXh0ZW5kKHt9LGkuZGF0YSgpLG4uZGF0YSgpKSxvO2kuY2Fyb3VzZWwocyksKG89bi5hdHRyKCJkYXRhLXNsaWRlLXRvIikpJiZpLmRhdGEoImNhcm91c2VsIikucGF1c2UoKS50byhvKS5jeWNsZSgpLHQucHJldmVudERlZmF1bHQoKX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQsbil7dGhpcy4kZWxlbWVudD1lKHQpLHRoaXMub3B0aW9ucz1lLmV4dGVuZCh7fSxlLmZuLmNvbGxhcHNlLmRlZmF1bHRzLG4pLHRoaXMub3B0aW9ucy5wYXJlbnQmJih0aGlzLiRwYXJlbnQ9ZSh0aGlzLm9wdGlvbnMucGFyZW50KSksdGhpcy5vcHRpb25zLnRvZ2dsZSYmdGhpcy50b2dnbGUoKX07dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQsZGltZW5zaW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kZWxlbWVudC5oYXNDbGFzcygid2lkdGgiKTtyZXR1cm4gZT8id2lkdGgiOiJoZWlnaHQifSxzaG93OmZ1bmN0aW9uKCl7dmFyIHQsbixyLGk7aWYodGhpcy50cmFuc2l0aW9uaW5nfHx0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJpbiIpKXJldHVybjt0PXRoaXMuZGltZW5zaW9uKCksbj1lLmNhbWVsQ2FzZShbInNjcm9sbCIsdF0uam9pbigiLSIpKSxyPXRoaXMuJHBhcmVudCYmdGhpcy4kcGFyZW50LmZpbmQoIj4gLmFjY29yZGlvbi1ncm91cCA+IC5pbiIpO2lmKHImJnIubGVuZ3RoKXtpPXIuZGF0YSgiY29sbGFwc2UiKTtpZihpJiZpLnRyYW5zaXRpb25pbmcpcmV0dXJuO3IuY29sbGFwc2UoImhpZGUiKSxpfHxyLmRhdGEoImNvbGxhcHNlIixudWxsKX10aGlzLiRlbGVtZW50W3RdKDApLHRoaXMudHJhbnNpdGlvbigiYWRkQ2xhc3MiLGUuRXZlbnQoInNob3ciKSwic2hvd24iKSxlLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudFt0XSh0aGlzLiRlbGVtZW50WzBdW25dKX0saGlkZTpmdW5jdGlvbigpe3ZhciB0O2lmKHRoaXMudHJhbnNpdGlvbmluZ3x8IXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIikpcmV0dXJuO3Q9dGhpcy5kaW1lbnNpb24oKSx0aGlzLnJlc2V0KHRoaXMuJGVsZW1lbnRbdF0oKSksdGhpcy50cmFuc2l0aW9uKCJyZW1vdmVDbGFzcyIsZS5FdmVudCgiaGlkZSIpLCJoaWRkZW4iKSx0aGlzLiRlbGVtZW50W3RdKDApfSxyZXNldDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmRpbWVuc2lvbigpO3JldHVybiB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJjb2xsYXBzZSIpW3RdKGV8fCJhdXRvIilbMF0ub2Zmc2V0V2lkdGgsdGhpcy4kZWxlbWVudFtlIT09bnVsbD8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKCJjb2xsYXBzZSIpLHRoaXN9LHRyYW5zaXRpb246ZnVuY3Rpb24odCxuLHIpe3ZhciBpPXRoaXMscz1mdW5jdGlvbigpe24udHlwZT09InNob3ciJiZpLnJlc2V0KCksaS50cmFuc2l0aW9uaW5nPTAsaS4kZWxlbWVudC50cmlnZ2VyKHIpfTt0aGlzLiRlbGVtZW50LnRyaWdnZXIobik7aWYobi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy50cmFuc2l0aW9uaW5nPTEsdGhpcy4kZWxlbWVudFt0XSgiaW4iKSxlLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiY29sbGFwc2UiKT90aGlzLiRlbGVtZW50Lm9uZShlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQscyk6cygpfSx0b2dnbGU6ZnVuY3Rpb24oKXt0aGlzW3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIik/ImhpZGUiOiJzaG93Il0oKX19O3ZhciBuPWUuZm4uY29sbGFwc2U7ZS5mbi5jb2xsYXBzZT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgiY29sbGFwc2UiKSxzPWUuZXh0ZW5kKHt9LGUuZm4uY29sbGFwc2UuZGVmYXVsdHMsci5kYXRhKCksdHlwZW9mIG49PSJvYmplY3QiJiZuKTtpfHxyLmRhdGEoImNvbGxhcHNlIixpPW5ldyB0KHRoaXMscykpLHR5cGVvZiBuPT0ic3RyaW5nIiYmaVtuXSgpfSl9LGUuZm4uY29sbGFwc2UuZGVmYXVsdHM9e3RvZ2dsZTohMH0sZS5mbi5jb2xsYXBzZS5Db25zdHJ1Y3Rvcj10LGUuZm4uY29sbGFwc2Uubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLmNvbGxhcHNlPW4sdGhpc30sZShkb2N1bWVudCkub24oImNsaWNrLmNvbGxhcHNlLmRhdGEtYXBpIiwiW2RhdGEtdG9nZ2xlPWNvbGxhcHNlXSIsZnVuY3Rpb24odCl7dmFyIG49ZSh0aGlzKSxyLGk9bi5hdHRyKCJkYXRhLXRhcmdldCIpfHx0LnByZXZlbnREZWZhdWx0KCl8fChyPW4uYXR0cigiaHJlZiIpKSYmci5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpLHM9ZShpKS5kYXRhKCJjb2xsYXBzZSIpPyJ0b2dnbGUiOm4uZGF0YSgpO25bZShpKS5oYXNDbGFzcygiaW4iKT8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKCJjb2xsYXBzZWQiKSxlKGkpLmNvbGxhcHNlKHMpfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2UoIi5kcm9wZG93bi1iYWNrZHJvcCIpLnJlbW92ZSgpLGUodCkuZWFjaChmdW5jdGlvbigpe2koZSh0aGlzKSkucmVtb3ZlQ2xhc3MoIm9wZW4iKX0pfWZ1bmN0aW9uIGkodCl7dmFyIG49dC5hdHRyKCJkYXRhLXRhcmdldCIpLHI7bnx8KG49dC5hdHRyKCJocmVmIiksbj1uJiYvIy8udGVzdChuKSYmbi5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIpKSxyPW4mJmUobik7aWYoIXJ8fCFyLmxlbmd0aClyPXQucGFyZW50KCk7cmV0dXJuIHJ9dmFyIHQ9IltkYXRhLXRvZ2dsZT1kcm9wZG93bl0iLG49ZnVuY3Rpb24odCl7dmFyIG49ZSh0KS5vbigiY2xpY2suZHJvcGRvd24uZGF0YS1hcGkiLHRoaXMudG9nZ2xlKTtlKCJodG1sIikub24oImNsaWNrLmRyb3Bkb3duLmRhdGEtYXBpIixmdW5jdGlvbigpe24ucGFyZW50KCkucmVtb3ZlQ2xhc3MoIm9wZW4iKX0pfTtuLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bix0b2dnbGU6ZnVuY3Rpb24odCl7dmFyIG49ZSh0aGlzKSxzLG87aWYobi5pcygiLmRpc2FibGVkLCA6ZGlzYWJsZWQiKSlyZXR1cm47cmV0dXJuIHM9aShuKSxvPXMuaGFzQ2xhc3MoIm9wZW4iKSxyKCksb3x8KCJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZlKCc8ZGl2IGNsYXNzPSJkcm9wZG93bi1iYWNrZHJvcCIvPicpLmluc2VydEJlZm9yZShlKHRoaXMpKS5vbigiY2xpY2siLHIpLHMudG9nZ2xlQ2xhc3MoIm9wZW4iKSksbi5mb2N1cygpLCExfSxrZXlkb3duOmZ1bmN0aW9uKG4pe3ZhciByLHMsbyx1LGEsZjtpZighLygzOHw0MHwyNykvLnRlc3Qobi5rZXlDb2RlKSlyZXR1cm47cj1lKHRoaXMpLG4ucHJldmVudERlZmF1bHQoKSxuLnN0b3BQcm9wYWdhdGlvbigpO2lmKHIuaXMoIi5kaXNhYmxlZCwgOmRpc2FibGVkIikpcmV0dXJuO3U9aShyKSxhPXUuaGFzQ2xhc3MoIm9wZW4iKTtpZighYXx8YSYmbi5rZXlDb2RlPT0yNylyZXR1cm4gbi53aGljaD09MjcmJnUuZmluZCh0KS5mb2N1cygpLHIuY2xpY2soKTtzPWUoIltyb2xlPW1lbnVdIGxpOm5vdCguZGl2aWRlcik6dmlzaWJsZSBhIix1KTtpZighcy5sZW5ndGgpcmV0dXJuO2Y9cy5pbmRleChzLmZpbHRlcigiOmZvY3VzIikpLG4ua2V5Q29kZT09MzgmJmY+MCYmZi0tLG4ua2V5Q29kZT09NDAmJmY8cy5sZW5ndGgtMSYmZisrLH5mfHwoZj0wKSxzLmVxKGYpLmZvY3VzKCl9fTt2YXIgcz1lLmZuLmRyb3Bkb3duO2UuZm4uZHJvcGRvd249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciByPWUodGhpcyksaT1yLmRhdGEoImRyb3Bkb3duIik7aXx8ci5kYXRhKCJkcm9wZG93biIsaT1uZXcgbih0aGlzKSksdHlwZW9mIHQ9PSJzdHJpbmciJiZpW3RdLmNhbGwocil9KX0sZS5mbi5kcm9wZG93bi5Db25zdHJ1Y3Rvcj1uLGUuZm4uZHJvcGRvd24ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLmRyb3Bkb3duPXMsdGhpc30sZShkb2N1bWVudCkub24oImNsaWNrLmRyb3Bkb3duLmRhdGEtYXBpIixyKS5vbigiY2xpY2suZHJvcGRvd24uZGF0YS1hcGkiLCIuZHJvcGRvd24gZm9ybSIsZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKCJjbGljay5kcm9wZG93bi5kYXRhLWFwaSIsdCxuLnByb3RvdHlwZS50b2dnbGUpLm9uKCJrZXlkb3duLmRyb3Bkb3duLmRhdGEtYXBpIix0KyIsIFtyb2xlPW1lbnVdIixuLnByb3RvdHlwZS5rZXlkb3duKX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1mdW5jdGlvbih0LG4pe3RoaXMub3B0aW9ucz1uLHRoaXMuJGVsZW1lbnQ9ZSh0KS5kZWxlZ2F0ZSgnW2RhdGEtZGlzbWlzcz0ibW9kYWwiXScsImNsaWNrLmRpc21pc3MubW9kYWwiLGUucHJveHkodGhpcy5oaWRlLHRoaXMpKSx0aGlzLm9wdGlvbnMucmVtb3RlJiZ0aGlzLiRlbGVtZW50LmZpbmQoIi5tb2RhbC1ib2R5IikubG9hZCh0aGlzLm9wdGlvbnMucmVtb3RlKX07dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQsdG9nZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdGhpcy5pc1Nob3duPyJoaWRlIjoic2hvdyJdKCl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49ZS5FdmVudCgic2hvdyIpO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihuKTtpZih0aGlzLmlzU2hvd258fG4uaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO3RoaXMuaXNTaG93bj0hMCx0aGlzLmVzY2FwZSgpLHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24oKXt2YXIgbj1lLnN1cHBvcnQudHJhbnNpdGlvbiYmdC4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpO3QuJGVsZW1lbnQucGFyZW50KCkubGVuZ3RofHx0LiRlbGVtZW50LmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLHQuJGVsZW1lbnQuc2hvdygpLG4mJnQuJGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsdC4kZWxlbWVudC5hZGRDbGFzcygiaW4iKS5hdHRyKCJhcmlhLWhpZGRlbiIsITEpLHQuZW5mb3JjZUZvY3VzKCksbj90LiRlbGVtZW50Lm9uZShlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXt0LiRlbGVtZW50LmZvY3VzKCkudHJpZ2dlcigic2hvd24iKX0pOnQuJGVsZW1lbnQuZm9jdXMoKS50cmlnZ2VyKCJzaG93biIpfSl9LGhpZGU6ZnVuY3Rpb24odCl7dCYmdC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuPXRoaXM7dD1lLkV2ZW50KCJoaWRlIiksdGhpcy4kZWxlbWVudC50cmlnZ2VyKHQpO2lmKCF0aGlzLmlzU2hvd258fHQuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO3RoaXMuaXNTaG93bj0hMSx0aGlzLmVzY2FwZSgpLGUoZG9jdW1lbnQpLm9mZigiZm9jdXNpbi5tb2RhbCIpLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImluIikuYXR0cigiYXJpYS1oaWRkZW4iLCEwKSxlLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpP3RoaXMuaGlkZVdpdGhUcmFuc2l0aW9uKCk6dGhpcy5oaWRlTW9kYWwoKX0sZW5mb3JjZUZvY3VzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztlKGRvY3VtZW50KS5vbigiZm9jdXNpbi5tb2RhbCIsZnVuY3Rpb24oZSl7dC4kZWxlbWVudFswXSE9PWUudGFyZ2V0JiYhdC4kZWxlbWVudC5oYXMoZS50YXJnZXQpLmxlbmd0aCYmdC4kZWxlbWVudC5mb2N1cygpfSl9LGVzY2FwZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5pc1Nob3duJiZ0aGlzLm9wdGlvbnMua2V5Ym9hcmQ/dGhpcy4kZWxlbWVudC5vbigia2V5dXAuZGlzbWlzcy5tb2RhbCIsZnVuY3Rpb24odCl7dC53aGljaD09MjcmJmUuaGlkZSgpfSk6dGhpcy5pc1Nob3dufHx0aGlzLiRlbGVtZW50Lm9mZigia2V5dXAuZGlzbWlzcy5tb2RhbCIpfSxoaWRlV2l0aFRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49c2V0VGltZW91dChmdW5jdGlvbigpe3QuJGVsZW1lbnQub2ZmKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCksdC5oaWRlTW9kYWwoKX0sNTAwKTt0aGlzLiRlbGVtZW50Lm9uZShlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQobiksdC5oaWRlTW9kYWwoKX0pfSxoaWRlTW9kYWw6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuJGVsZW1lbnQuaGlkZSgpLHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24oKXtlLnJlbW92ZUJhY2tkcm9wKCksZS4kZWxlbWVudC50cmlnZ2VyKCJoaWRkZW4iKX0pfSxyZW1vdmVCYWNrZHJvcDpmdW5jdGlvbigpe3RoaXMuJGJhY2tkcm9wJiZ0aGlzLiRiYWNrZHJvcC5yZW1vdmUoKSx0aGlzLiRiYWNrZHJvcD1udWxsfSxiYWNrZHJvcDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLHI9dGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpPyJmYWRlIjoiIjtpZih0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5iYWNrZHJvcCl7dmFyIGk9ZS5zdXBwb3J0LnRyYW5zaXRpb24mJnI7dGhpcy4kYmFja2Ryb3A9ZSgnPGRpdiBjbGFzcz0ibW9kYWwtYmFja2Ryb3AgJytyKyciIC8+JykuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSksdGhpcy4kYmFja2Ryb3AuY2xpY2sodGhpcy5vcHRpb25zLmJhY2tkcm9wPT0ic3RhdGljIj9lLnByb3h5KHRoaXMuJGVsZW1lbnRbMF0uZm9jdXMsdGhpcy4kZWxlbWVudFswXSk6ZS5wcm94eSh0aGlzLmhpZGUsdGhpcykpLGkmJnRoaXMuJGJhY2tkcm9wWzBdLm9mZnNldFdpZHRoLHRoaXMuJGJhY2tkcm9wLmFkZENsYXNzKCJpbiIpO2lmKCF0KXJldHVybjtpP3RoaXMuJGJhY2tkcm9wLm9uZShlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsdCk6dCgpfWVsc2UhdGhpcy5pc1Nob3duJiZ0aGlzLiRiYWNrZHJvcD8odGhpcy4kYmFja2Ryb3AucmVtb3ZlQ2xhc3MoImluIiksZS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKT90aGlzLiRiYWNrZHJvcC5vbmUoZS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLHQpOnQoKSk6dCYmdCgpfX07dmFyIG49ZS5mbi5tb2RhbDtlLmZuLm1vZGFsPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJtb2RhbCIpLHM9ZS5leHRlbmQoe30sZS5mbi5tb2RhbC5kZWZhdWx0cyxyLmRhdGEoKSx0eXBlb2Ygbj09Im9iamVjdCImJm4pO2l8fHIuZGF0YSgibW9kYWwiLGk9bmV3IHQodGhpcyxzKSksdHlwZW9mIG49PSJzdHJpbmciP2lbbl0oKTpzLnNob3cmJmkuc2hvdygpfSl9LGUuZm4ubW9kYWwuZGVmYXVsdHM9e2JhY2tkcm9wOiEwLGtleWJvYXJkOiEwLHNob3c6ITB9LGUuZm4ubW9kYWwuQ29uc3RydWN0b3I9dCxlLmZuLm1vZGFsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbi5tb2RhbD1uLHRoaXN9LGUoZG9jdW1lbnQpLm9uKCJjbGljay5tb2RhbC5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0ibW9kYWwiXScsZnVuY3Rpb24odCl7dmFyIG49ZSh0aGlzKSxyPW4uYXR0cigiaHJlZiIpLGk9ZShuLmF0dHIoImRhdGEtdGFyZ2V0Iil8fHImJnIucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIiKSkscz1pLmRhdGEoIm1vZGFsIik/InRvZ2dsZSI6ZS5leHRlbmQoe3JlbW90ZTohLyMvLnRlc3QocikmJnJ9LGkuZGF0YSgpLG4uZGF0YSgpKTt0LnByZXZlbnREZWZhdWx0KCksaS5tb2RhbChzKS5vbmUoImhpZGUiLGZ1bmN0aW9uKCl7bi5mb2N1cygpfSl9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1mdW5jdGlvbihlLHQpe3RoaXMuaW5pdCgidG9vbHRpcCIsZSx0KX07dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQsaW5pdDpmdW5jdGlvbih0LG4scil7dmFyIGkscyxvLHUsYTt0aGlzLnR5cGU9dCx0aGlzLiRlbGVtZW50PWUobiksdGhpcy5vcHRpb25zPXRoaXMuZ2V0T3B0aW9ucyhyKSx0aGlzLmVuYWJsZWQ9ITAsbz10aGlzLm9wdGlvbnMudHJpZ2dlci5zcGxpdCgiICIpO2ZvcihhPW8ubGVuZ3RoO2EtLTspdT1vW2FdLHU9PSJjbGljayI/dGhpcy4kZWxlbWVudC5vbigiY2xpY2suIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLGUucHJveHkodGhpcy50b2dnbGUsdGhpcykpOnUhPSJtYW51YWwiJiYoaT11PT0iaG92ZXIiPyJtb3VzZWVudGVyIjoiZm9jdXMiLHM9dT09ImhvdmVyIj8ibW91c2VsZWF2ZSI6ImJsdXIiLHRoaXMuJGVsZW1lbnQub24oaSsiLiIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3RvcixlLnByb3h5KHRoaXMuZW50ZXIsdGhpcykpLHRoaXMuJGVsZW1lbnQub24ocysiLiIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3RvcixlLnByb3h5KHRoaXMubGVhdmUsdGhpcykpKTt0aGlzLm9wdGlvbnMuc2VsZWN0b3I/dGhpcy5fb3B0aW9ucz1lLmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMse3RyaWdnZXI6Im1hbnVhbCIsc2VsZWN0b3I6IiJ9KTp0aGlzLmZpeFRpdGxlKCl9LGdldE9wdGlvbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9ZS5leHRlbmQoe30sZS5mblt0aGlzLnR5cGVdLmRlZmF1bHRzLHRoaXMuJGVsZW1lbnQuZGF0YSgpLHQpLHQuZGVsYXkmJnR5cGVvZiB0LmRlbGF5PT0ibnVtYmVyIiYmKHQuZGVsYXk9e3Nob3c6dC5kZWxheSxoaWRlOnQuZGVsYXl9KSx0fSxlbnRlcjpmdW5jdGlvbih0KXt2YXIgbj1lLmZuW3RoaXMudHlwZV0uZGVmYXVsdHMscj17fSxpO3RoaXMuX29wdGlvbnMmJmUuZWFjaCh0aGlzLl9vcHRpb25zLGZ1bmN0aW9uKGUsdCl7bltlXSE9dCYmKHJbZV09dCl9LHRoaXMpLGk9ZSh0LmN1cnJlbnRUYXJnZXQpW3RoaXMudHlwZV0ocikuZGF0YSh0aGlzLnR5cGUpO2lmKCFpLm9wdGlvbnMuZGVsYXl8fCFpLm9wdGlvbnMuZGVsYXkuc2hvdylyZXR1cm4gaS5zaG93KCk7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCksaS5ob3ZlclN0YXRlPSJpbiIsdGhpcy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLmhvdmVyU3RhdGU9PSJpbiImJmkuc2hvdygpfSxpLm9wdGlvbnMuZGVsYXkuc2hvdyl9LGxlYXZlOmZ1bmN0aW9uKHQpe3ZhciBuPWUodC5jdXJyZW50VGFyZ2V0KVt0aGlzLnR5cGVdKHRoaXMuX29wdGlvbnMpLmRhdGEodGhpcy50eXBlKTt0aGlzLnRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO2lmKCFuLm9wdGlvbnMuZGVsYXl8fCFuLm9wdGlvbnMuZGVsYXkuaGlkZSlyZXR1cm4gbi5oaWRlKCk7bi5ob3ZlclN0YXRlPSJvdXQiLHRoaXMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5ob3ZlclN0YXRlPT0ib3V0IiYmbi5oaWRlKCl9LG4ub3B0aW9ucy5kZWxheS5oaWRlKX0sc2hvdzpmdW5jdGlvbigpe3ZhciB0LG4scixpLHMsbyx1PWUuRXZlbnQoInNob3ciKTtpZih0aGlzLmhhc0NvbnRlbnQoKSYmdGhpcy5lbmFibGVkKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIodSk7aWYodS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dD10aGlzLnRpcCgpLHRoaXMuc2V0Q29udGVudCgpLHRoaXMub3B0aW9ucy5hbmltYXRpb24mJnQuYWRkQ2xhc3MoImZhZGUiKSxzPXR5cGVvZiB0aGlzLm9wdGlvbnMucGxhY2VtZW50PT0iZnVuY3Rpb24iP3RoaXMub3B0aW9ucy5wbGFjZW1lbnQuY2FsbCh0aGlzLHRbMF0sdGhpcy4kZWxlbWVudFswXSk6dGhpcy5vcHRpb25zLnBsYWNlbWVudCx0LmRldGFjaCgpLmNzcyh7dG9wOjAsbGVmdDowLGRpc3BsYXk6ImJsb2NrIn0pLHRoaXMub3B0aW9ucy5jb250YWluZXI/dC5hcHBlbmRUbyh0aGlzLm9wdGlvbnMuY29udGFpbmVyKTp0Lmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpLG49dGhpcy5nZXRQb3NpdGlvbigpLHI9dFswXS5vZmZzZXRXaWR0aCxpPXRbMF0ub2Zmc2V0SGVpZ2h0O3N3aXRjaChzKXtjYXNlImJvdHRvbSI6bz17dG9wOm4udG9wK24uaGVpZ2h0LGxlZnQ6bi5sZWZ0K24ud2lkdGgvMi1yLzJ9O2JyZWFrO2Nhc2UidG9wIjpvPXt0b3A6bi50b3AtaSxsZWZ0Om4ubGVmdCtuLndpZHRoLzItci8yfTticmVhaztjYXNlImxlZnQiOm89e3RvcDpuLnRvcCtuLmhlaWdodC8yLWkvMixsZWZ0Om4ubGVmdC1yfTticmVhaztjYXNlInJpZ2h0IjpvPXt0b3A6bi50b3Arbi5oZWlnaHQvMi1pLzIsbGVmdDpuLmxlZnQrbi53aWR0aH19dGhpcy5hcHBseVBsYWNlbWVudChvLHMpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcigic2hvd24iKX19LGFwcGx5UGxhY2VtZW50OmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy50aXAoKSxyPW5bMF0ub2Zmc2V0V2lkdGgsaT1uWzBdLm9mZnNldEhlaWdodCxzLG8sdSxhO24ub2Zmc2V0KGUpLmFkZENsYXNzKHQpLmFkZENsYXNzKCJpbiIpLHM9blswXS5vZmZzZXRXaWR0aCxvPW5bMF0ub2Zmc2V0SGVpZ2h0LHQ9PSJ0b3AiJiZvIT1pJiYoZS50b3A9ZS50b3AraS1vLGE9ITApLHQ9PSJib3R0b20ifHx0PT0idG9wIj8odT0wLGUubGVmdDwwJiYodT1lLmxlZnQqLTIsZS5sZWZ0PTAsbi5vZmZzZXQoZSkscz1uWzBdLm9mZnNldFdpZHRoLG89blswXS5vZmZzZXRIZWlnaHQpLHRoaXMucmVwbGFjZUFycm93KHUtcitzLHMsImxlZnQiKSk6dGhpcy5yZXBsYWNlQXJyb3coby1pLG8sInRvcCIpLGEmJm4ub2Zmc2V0KGUpfSxyZXBsYWNlQXJyb3c6ZnVuY3Rpb24oZSx0LG4pe3RoaXMuYXJyb3coKS5jc3MobixlPzUwKigxLWUvdCkrIiUiOiIiKX0sc2V0Q29udGVudDpmdW5jdGlvbigpe3ZhciBlPXRoaXMudGlwKCksdD10aGlzLmdldFRpdGxlKCk7ZS5maW5kKCIudG9vbHRpcC1pbm5lciIpW3RoaXMub3B0aW9ucy5odG1sPyJodG1sIjoidGV4dCJdKHQpLGUucmVtb3ZlQ2xhc3MoImZhZGUgaW4gdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0Iil9LGhpZGU6ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKCl7dmFyIHQ9c2V0VGltZW91dChmdW5jdGlvbigpe24ub2ZmKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCkuZGV0YWNoKCl9LDUwMCk7bi5vbmUoZS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHQpLG4uZGV0YWNoKCl9KX12YXIgdD10aGlzLG49dGhpcy50aXAoKSxyPWUuRXZlbnQoImhpZGUiKTt0aGlzLiRlbGVtZW50LnRyaWdnZXIocik7aWYoci5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47cmV0dXJuIG4ucmVtb3ZlQ2xhc3MoImluIiksZS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJHRpcC5oYXNDbGFzcygiZmFkZSIpP2koKTpuLmRldGFjaCgpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcigiaGlkZGVuIiksdGhpc30sZml4VGl0bGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRlbGVtZW50OyhlLmF0dHIoInRpdGxlIil8fHR5cGVvZiBlLmF0dHIoImRhdGEtb3JpZ2luYWwtdGl0bGUiKSE9InN0cmluZyIpJiZlLmF0dHIoImRhdGEtb3JpZ2luYWwtdGl0bGUiLGUuYXR0cigidGl0bGUiKXx8IiIpLmF0dHIoInRpdGxlIiwiIil9LGhhc0NvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuJGVsZW1lbnRbMF07cmV0dXJuIGUuZXh0ZW5kKHt9LHR5cGVvZiB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdD09ImZ1bmN0aW9uIj90LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOnt3aWR0aDp0Lm9mZnNldFdpZHRoLGhlaWdodDp0Lm9mZnNldEhlaWdodH0sdGhpcy4kZWxlbWVudC5vZmZzZXQoKSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLiRlbGVtZW50LG49dGhpcy5vcHRpb25zO3JldHVybiBlPXQuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpfHwodHlwZW9mIG4udGl0bGU9PSJmdW5jdGlvbiI/bi50aXRsZS5jYWxsKHRbMF0pOm4udGl0bGUpLGV9LHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiR0aXA9dGhpcy4kdGlwfHxlKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSl9LGFycm93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGFycm93PXRoaXMuJGFycm93fHx0aGlzLnRpcCgpLmZpbmQoIi50b29sdGlwLWFycm93Iil9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudFswXS5wYXJlbnROb2RlfHwodGhpcy5oaWRlKCksdGhpcy4kZWxlbWVudD1udWxsLHRoaXMub3B0aW9ucz1udWxsKX0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSEwfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSExfSx0b2dnbGVFbmFibGVkOmZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSF0aGlzLmVuYWJsZWR9LHRvZ2dsZTpmdW5jdGlvbih0KXt2YXIgbj10P2UodC5jdXJyZW50VGFyZ2V0KVt0aGlzLnR5cGVdKHRoaXMuX29wdGlvbnMpLmRhdGEodGhpcy50eXBlKTp0aGlzO24udGlwKCkuaGFzQ2xhc3MoImluIik/bi5oaWRlKCk6bi5zaG93KCl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmhpZGUoKS4kZWxlbWVudC5vZmYoIi4iK3RoaXMudHlwZSkucmVtb3ZlRGF0YSh0aGlzLnR5cGUpfX07dmFyIG49ZS5mbi50b29sdGlwO2UuZm4udG9vbHRpcD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgidG9vbHRpcCIpLHM9dHlwZW9mIG49PSJvYmplY3QiJiZuO2l8fHIuZGF0YSgidG9vbHRpcCIsaT1uZXcgdCh0aGlzLHMpKSx0eXBlb2Ygbj09InN0cmluZyImJmlbbl0oKX0pfSxlLmZuLnRvb2x0aXAuQ29uc3RydWN0b3I9dCxlLmZuLnRvb2x0aXAuZGVmYXVsdHM9e2FuaW1hdGlvbjohMCxwbGFjZW1lbnQ6InRvcCIsc2VsZWN0b3I6ITEsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InRvb2x0aXAiPjxkaXYgY2xhc3M9InRvb2x0aXAtYXJyb3ciPjwvZGl2PjxkaXYgY2xhc3M9InRvb2x0aXAtaW5uZXIiPjwvZGl2PjwvZGl2PicsdHJpZ2dlcjoiaG92ZXIgZm9jdXMiLHRpdGxlOiIiLGRlbGF5OjAsaHRtbDohMSxjb250YWluZXI6ITF9LGUuZm4udG9vbHRpcC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4udG9vbHRpcD1uLHRoaXN9fSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKGUsdCl7dGhpcy5pbml0KCJwb3BvdmVyIixlLHQpfTt0LnByb3RvdHlwZT1lLmV4dGVuZCh7fSxlLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp0LHNldENvbnRlbnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRpcCgpLHQ9dGhpcy5nZXRUaXRsZSgpLG49dGhpcy5nZXRDb250ZW50KCk7ZS5maW5kKCIucG9wb3Zlci10aXRsZSIpW3RoaXMub3B0aW9ucy5odG1sPyJodG1sIjoidGV4dCJdKHQpLGUuZmluZCgiLnBvcG92ZXItY29udGVudCIpW3RoaXMub3B0aW9ucy5odG1sPyJodG1sIjoidGV4dCJdKG4pLGUucmVtb3ZlQ2xhc3MoImZhZGUgdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0IGluIil9LGhhc0NvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfHx0aGlzLmdldENvbnRlbnQoKX0sZ2V0Q29udGVudDpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy4kZWxlbWVudCxuPXRoaXMub3B0aW9ucztyZXR1cm4gZT0odHlwZW9mIG4uY29udGVudD09ImZ1bmN0aW9uIj9uLmNvbnRlbnQuY2FsbCh0WzBdKTpuLmNvbnRlbnQpfHx0LmF0dHIoImRhdGEtY29udGVudCIpLGV9LHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiR0aXB8fCh0aGlzLiR0aXA9ZSh0aGlzLm9wdGlvbnMudGVtcGxhdGUpKSx0aGlzLiR0aXB9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmhpZGUoKS4kZWxlbWVudC5vZmYoIi4iK3RoaXMudHlwZSkucmVtb3ZlRGF0YSh0aGlzLnR5cGUpfX0pO3ZhciBuPWUuZm4ucG9wb3ZlcjtlLmZuLnBvcG92ZXI9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciByPWUodGhpcyksaT1yLmRhdGEoInBvcG92ZXIiKSxzPXR5cGVvZiBuPT0ib2JqZWN0IiYmbjtpfHxyLmRhdGEoInBvcG92ZXIiLGk9bmV3IHQodGhpcyxzKSksdHlwZW9mIG49PSJzdHJpbmciJiZpW25dKCl9KX0sZS5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yPXQsZS5mbi5wb3BvdmVyLmRlZmF1bHRzPWUuZXh0ZW5kKHt9LGUuZm4udG9vbHRpcC5kZWZhdWx0cyx7cGxhY2VtZW50OiJyaWdodCIsdHJpZ2dlcjoiY2xpY2siLGNvbnRlbnQ6IiIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InBvcG92ZXIiPjxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj48aDMgY2xhc3M9InBvcG92ZXItdGl0bGUiPjwvaDM+PGRpdiBjbGFzcz0icG9wb3Zlci1jb250ZW50Ij48L2Rpdj48L2Rpdj4nfSksZS5mbi5wb3BvdmVyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbi5wb3BvdmVyPW4sdGhpc319KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdCh0LG4pe3ZhciByPWUucHJveHkodGhpcy5wcm9jZXNzLHRoaXMpLGk9ZSh0KS5pcygiYm9keSIpP2Uod2luZG93KTplKHQpLHM7dGhpcy5vcHRpb25zPWUuZXh0ZW5kKHt9LGUuZm4uc2Nyb2xsc3B5LmRlZmF1bHRzLG4pLHRoaXMuJHNjcm9sbEVsZW1lbnQ9aS5vbigic2Nyb2xsLnNjcm9sbC1zcHkuZGF0YS1hcGkiLHIpLHRoaXMuc2VsZWN0b3I9KHRoaXMub3B0aW9ucy50YXJnZXR8fChzPWUodCkuYXR0cigiaHJlZiIpKSYmcy5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpfHwiIikrIiAubmF2IGxpID4gYSIsdGhpcy4kYm9keT1lKCJib2R5IiksdGhpcy5yZWZyZXNoKCksdGhpcy5wcm9jZXNzKCl9dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQscmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbjt0aGlzLm9mZnNldHM9ZShbXSksdGhpcy50YXJnZXRzPWUoW10pLG49dGhpcy4kYm9keS5maW5kKHRoaXMuc2VsZWN0b3IpLm1hcChmdW5jdGlvbigpe3ZhciBuPWUodGhpcykscj1uLmRhdGEoInRhcmdldCIpfHxuLmF0dHIoImhyZWYiKSxpPS9eI1x3Ly50ZXN0KHIpJiZlKHIpO3JldHVybiBpJiZpLmxlbmd0aCYmW1tpLnBvc2l0aW9uKCkudG9wKyghZS5pc1dpbmRvdyh0LiRzY3JvbGxFbGVtZW50LmdldCgwKSkmJnQuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkpLHJdXXx8bnVsbH0pLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVswXS10WzBdfSkuZWFjaChmdW5jdGlvbigpe3Qub2Zmc2V0cy5wdXNoKHRoaXNbMF0pLHQudGFyZ2V0cy5wdXNoKHRoaXNbMV0pfSl9LHByb2Nlc3M6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpK3RoaXMub3B0aW9ucy5vZmZzZXQsdD10aGlzLiRzY3JvbGxFbGVtZW50WzBdLnNjcm9sbEhlaWdodHx8dGhpcy4kYm9keVswXS5zY3JvbGxIZWlnaHQsbj10LXRoaXMuJHNjcm9sbEVsZW1lbnQuaGVpZ2h0KCkscj10aGlzLm9mZnNldHMsaT10aGlzLnRhcmdldHMscz10aGlzLmFjdGl2ZVRhcmdldCxvO2lmKGU+PW4pcmV0dXJuIHMhPShvPWkubGFzdCgpWzBdKSYmdGhpcy5hY3RpdmF0ZShvKTtmb3Iobz1yLmxlbmd0aDtvLS07KXMhPWlbb10mJmU+PXJbb10mJighcltvKzFdfHxlPD1yW28rMV0pJiZ0aGlzLmFjdGl2YXRlKGlbb10pfSxhY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgbixyO3RoaXMuYWN0aXZlVGFyZ2V0PXQsZSh0aGlzLnNlbGVjdG9yKS5wYXJlbnQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIikscj10aGlzLnNlbGVjdG9yKydbZGF0YS10YXJnZXQ9IicrdCsnIl0sJyt0aGlzLnNlbGVjdG9yKydbaHJlZj0iJyt0KyciXScsbj1lKHIpLnBhcmVudCgibGkiKS5hZGRDbGFzcygiYWN0aXZlIiksbi5wYXJlbnQoIi5kcm9wZG93bi1tZW51IikubGVuZ3RoJiYobj1uLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpKSxuLnRyaWdnZXIoImFjdGl2YXRlIil9fTt2YXIgbj1lLmZuLnNjcm9sbHNweTtlLmZuLnNjcm9sbHNweT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgic2Nyb2xsc3B5Iikscz10eXBlb2Ygbj09Im9iamVjdCImJm47aXx8ci5kYXRhKCJzY3JvbGxzcHkiLGk9bmV3IHQodGhpcyxzKSksdHlwZW9mIG49PSJzdHJpbmciJiZpW25dKCl9KX0sZS5mbi5zY3JvbGxzcHkuQ29uc3RydWN0b3I9dCxlLmZuLnNjcm9sbHNweS5kZWZhdWx0cz17b2Zmc2V0OjEwfSxlLmZuLnNjcm9sbHNweS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4uc2Nyb2xsc3B5PW4sdGhpc30sZSh3aW5kb3cpLm9uKCJsb2FkIixmdW5jdGlvbigpe2UoJ1tkYXRhLXNweT0ic2Nyb2xsIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTt0LnNjcm9sbHNweSh0LmRhdGEoKSl9KX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQpe3RoaXMuZWxlbWVudD1lKHQpfTt0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxzaG93OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LG49dC5jbG9zZXN0KCJ1bDpub3QoLmRyb3Bkb3duLW1lbnUpIikscj10LmF0dHIoImRhdGEtdGFyZ2V0IiksaSxzLG87cnx8KHI9dC5hdHRyKCJocmVmIikscj1yJiZyLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywiIikpO2lmKHQucGFyZW50KCJsaSIpLmhhc0NsYXNzKCJhY3RpdmUiKSlyZXR1cm47aT1uLmZpbmQoIi5hY3RpdmU6bGFzdCBhIilbMF0sbz1lLkV2ZW50KCJzaG93Iix7cmVsYXRlZFRhcmdldDppfSksdC50cmlnZ2VyKG8pO2lmKG8uaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO3M9ZShyKSx0aGlzLmFjdGl2YXRlKHQucGFyZW50KCJsaSIpLG4pLHRoaXMuYWN0aXZhdGUocyxzLnBhcmVudCgpLGZ1bmN0aW9uKCl7dC50cmlnZ2VyKHt0eXBlOiJzaG93biIscmVsYXRlZFRhcmdldDppfSl9KX0sYWN0aXZhdGU6ZnVuY3Rpb24odCxuLHIpe2Z1bmN0aW9uIG8oKXtpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5maW5kKCI+IC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSx0LmFkZENsYXNzKCJhY3RpdmUiKSxzPyh0WzBdLm9mZnNldFdpZHRoLHQuYWRkQ2xhc3MoImluIikpOnQucmVtb3ZlQ2xhc3MoImZhZGUiKSx0LnBhcmVudCgiLmRyb3Bkb3duLW1lbnUiKSYmdC5jbG9zZXN0KCJsaS5kcm9wZG93biIpLmFkZENsYXNzKCJhY3RpdmUiKSxyJiZyKCl9dmFyIGk9bi5maW5kKCI+IC5hY3RpdmUiKSxzPXImJmUuc3VwcG9ydC50cmFuc2l0aW9uJiZpLmhhc0NsYXNzKCJmYWRlIik7cz9pLm9uZShlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsbyk6bygpLGkucmVtb3ZlQ2xhc3MoImluIil9fTt2YXIgbj1lLmZuLnRhYjtlLmZuLnRhYj1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgidGFiIik7aXx8ci5kYXRhKCJ0YWIiLGk9bmV3IHQodGhpcykpLHR5cGVvZiBuPT0ic3RyaW5nIiYmaVtuXSgpfSl9LGUuZm4udGFiLkNvbnN0cnVjdG9yPXQsZS5mbi50YWIubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLnRhYj1uLHRoaXN9LGUoZG9jdW1lbnQpLm9uKCJjbGljay50YWIuZGF0YS1hcGkiLCdbZGF0YS10b2dnbGU9InRhYiJdLCBbZGF0YS10b2dnbGU9InBpbGwiXScsZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLGUodGhpcykudGFiKCJzaG93Iil9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1mdW5jdGlvbih0LG4pe3RoaXMuJGVsZW1lbnQ9ZSh0KSx0aGlzLm9wdGlvbnM9ZS5leHRlbmQoe30sZS5mbi50eXBlYWhlYWQuZGVmYXVsdHMsbiksdGhpcy5tYXRjaGVyPXRoaXMub3B0aW9ucy5tYXRjaGVyfHx0aGlzLm1hdGNoZXIsdGhpcy5zb3J0ZXI9dGhpcy5vcHRpb25zLnNvcnRlcnx8dGhpcy5zb3J0ZXIsdGhpcy5oaWdobGlnaHRlcj10aGlzLm9wdGlvbnMuaGlnaGxpZ2h0ZXJ8fHRoaXMuaGlnaGxpZ2h0ZXIsdGhpcy51cGRhdGVyPXRoaXMub3B0aW9ucy51cGRhdGVyfHx0aGlzLnVwZGF0ZXIsdGhpcy5zb3VyY2U9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLiRtZW51PWUodGhpcy5vcHRpb25zLm1lbnUpLHRoaXMuc2hvd249ITEsdGhpcy5saXN0ZW4oKX07dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQsc2VsZWN0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kbWVudS5maW5kKCIuYWN0aXZlIikuYXR0cigiZGF0YS12YWx1ZSIpO3JldHVybiB0aGlzLiRlbGVtZW50LnZhbCh0aGlzLnVwZGF0ZXIoZSkpLmNoYW5nZSgpLHRoaXMuaGlkZSgpfSx1cGRhdGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxzaG93OmZ1bmN0aW9uKCl7dmFyIHQ9ZS5leHRlbmQoe30sdGhpcy4kZWxlbWVudC5wb3NpdGlvbigpLHtoZWlnaHQ6dGhpcy4kZWxlbWVudFswXS5vZmZzZXRIZWlnaHR9KTtyZXR1cm4gdGhpcy4kbWVudS5pbnNlcnRBZnRlcih0aGlzLiRlbGVtZW50KS5jc3Moe3RvcDp0LnRvcCt0LmhlaWdodCxsZWZ0OnQubGVmdH0pLnNob3coKSx0aGlzLnNob3duPSEwLHRoaXN9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kbWVudS5oaWRlKCksdGhpcy5zaG93bj0hMSx0aGlzfSxsb29rdXA6ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHRoaXMucXVlcnk9dGhpcy4kZWxlbWVudC52YWwoKSwhdGhpcy5xdWVyeXx8dGhpcy5xdWVyeS5sZW5ndGg8dGhpcy5vcHRpb25zLm1pbkxlbmd0aD90aGlzLnNob3duP3RoaXMuaGlkZSgpOnRoaXM6KG49ZS5pc0Z1bmN0aW9uKHRoaXMuc291cmNlKT90aGlzLnNvdXJjZSh0aGlzLnF1ZXJ5LGUucHJveHkodGhpcy5wcm9jZXNzLHRoaXMpKTp0aGlzLnNvdXJjZSxuP3RoaXMucHJvY2VzcyhuKTp0aGlzKX0scHJvY2VzczpmdW5jdGlvbih0KXt2YXIgbj10aGlzO3JldHVybiB0PWUuZ3JlcCh0LGZ1bmN0aW9uKGUpe3JldHVybiBuLm1hdGNoZXIoZSl9KSx0PXRoaXMuc29ydGVyKHQpLHQubGVuZ3RoP3RoaXMucmVuZGVyKHQuc2xpY2UoMCx0aGlzLm9wdGlvbnMuaXRlbXMpKS5zaG93KCk6dGhpcy5zaG93bj90aGlzLmhpZGUoKTp0aGlzfSxtYXRjaGVyOmZ1bmN0aW9uKGUpe3JldHVybn5lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0aGlzLnF1ZXJ5LnRvTG93ZXJDYXNlKCkpfSxzb3J0ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1bXSxyPVtdLGk7d2hpbGUoaT1lLnNoaWZ0KCkpaS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy5xdWVyeS50b0xvd2VyQ2FzZSgpKT9+aS5pbmRleE9mKHRoaXMucXVlcnkpP24ucHVzaChpKTpyLnB1c2goaSk6dC5wdXNoKGkpO3JldHVybiB0LmNvbmNhdChuLHIpfSxoaWdobGlnaHRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnF1ZXJ5LnJlcGxhY2UoL1tcLVxbXF17fSgpKis/LixcXFxeJHwjXHNdL2csIlxcJCYiKTtyZXR1cm4gZS5yZXBsYWNlKG5ldyBSZWdFeHAoIigiK3QrIikiLCJpZyIpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIjxzdHJvbmc+Iit0KyI8L3N0cm9uZz4ifSl9LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgbj10aGlzO3JldHVybiB0PWUodCkubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQ9ZShuLm9wdGlvbnMuaXRlbSkuYXR0cigiZGF0YS12YWx1ZSIsciksdC5maW5kKCJhIikuaHRtbChuLmhpZ2hsaWdodGVyKHIpKSx0WzBdfSksdC5maXJzdCgpLmFkZENsYXNzKCJhY3RpdmUiKSx0aGlzLiRtZW51Lmh0bWwodCksdGhpc30sbmV4dDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIikscj1uLm5leHQoKTtyLmxlbmd0aHx8KHI9ZSh0aGlzLiRtZW51LmZpbmQoImxpIilbMF0pKSxyLmFkZENsYXNzKCJhY3RpdmUiKX0scHJldjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksbj10LnByZXYoKTtuLmxlbmd0aHx8KG49dGhpcy4kbWVudS5maW5kKCJsaSIpLmxhc3QoKSksbi5hZGRDbGFzcygiYWN0aXZlIil9LGxpc3RlbjpmdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQub24oImZvY3VzIixlLnByb3h5KHRoaXMuZm9jdXMsdGhpcykpLm9uKCJibHVyIixlLnByb3h5KHRoaXMuYmx1cix0aGlzKSkub24oImtleXByZXNzIixlLnByb3h5KHRoaXMua2V5cHJlc3MsdGhpcykpLm9uKCJrZXl1cCIsZS5wcm94eSh0aGlzLmtleXVwLHRoaXMpKSx0aGlzLmV2ZW50U3VwcG9ydGVkKCJrZXlkb3duIikmJnRoaXMuJGVsZW1lbnQub24oImtleWRvd24iLGUucHJveHkodGhpcy5rZXlkb3duLHRoaXMpKSx0aGlzLiRtZW51Lm9uKCJjbGljayIsZS5wcm94eSh0aGlzLmNsaWNrLHRoaXMpKS5vbigibW91c2VlbnRlciIsImxpIixlLnByb3h5KHRoaXMubW91c2VlbnRlcix0aGlzKSkub24oIm1vdXNlbGVhdmUiLCJsaSIsZS5wcm94eSh0aGlzLm1vdXNlbGVhdmUsdGhpcykpfSxldmVudFN1cHBvcnRlZDpmdW5jdGlvbihlKXt2YXIgdD1lIGluIHRoaXMuJGVsZW1lbnQ7cmV0dXJuIHR8fCh0aGlzLiRlbGVtZW50LnNldEF0dHJpYnV0ZShlLCJyZXR1cm47IiksdD10eXBlb2YgdGhpcy4kZWxlbWVudFtlXT09ImZ1bmN0aW9uIiksdH0sbW92ZTpmdW5jdGlvbihlKXtpZighdGhpcy5zaG93bilyZXR1cm47c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSA5OmNhc2UgMTM6Y2FzZSAyNzplLnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSAzODplLnByZXZlbnREZWZhdWx0KCksdGhpcy5wcmV2KCk7YnJlYWs7Y2FzZSA0MDplLnByZXZlbnREZWZhdWx0KCksdGhpcy5uZXh0KCl9ZS5zdG9wUHJvcGFnYXRpb24oKX0sa2V5ZG93bjpmdW5jdGlvbih0KXt0aGlzLnN1cHByZXNzS2V5UHJlc3NSZXBlYXQ9fmUuaW5BcnJheSh0LmtleUNvZGUsWzQwLDM4LDksMTMsMjddKSx0aGlzLm1vdmUodCl9LGtleXByZXNzOmZ1bmN0aW9uKGUpe2lmKHRoaXMuc3VwcHJlc3NLZXlQcmVzc1JlcGVhdClyZXR1cm47dGhpcy5tb3ZlKGUpfSxrZXl1cDpmdW5jdGlvbihlKXtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDQwOmNhc2UgMzg6Y2FzZSAxNjpjYXNlIDE3OmNhc2UgMTg6YnJlYWs7Y2FzZSA5OmNhc2UgMTM6aWYoIXRoaXMuc2hvd24pcmV0dXJuO3RoaXMuc2VsZWN0KCk7YnJlYWs7Y2FzZSAyNzppZighdGhpcy5zaG93bilyZXR1cm47dGhpcy5oaWRlKCk7YnJlYWs7ZGVmYXVsdDp0aGlzLmxvb2t1cCgpfWUuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpfSxmb2N1czpmdW5jdGlvbihlKXt0aGlzLmZvY3VzZWQ9ITB9LGJsdXI6ZnVuY3Rpb24oZSl7dGhpcy5mb2N1c2VkPSExLCF0aGlzLm1vdXNlZG92ZXImJnRoaXMuc2hvd24mJnRoaXMuaGlkZSgpfSxjbGljazpmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSx0aGlzLnNlbGVjdCgpLHRoaXMuJGVsZW1lbnQuZm9jdXMoKX0sbW91c2VlbnRlcjpmdW5jdGlvbih0KXt0aGlzLm1vdXNlZG92ZXI9ITAsdGhpcy4kbWVudS5maW5kKCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLGUodC5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcygiYWN0aXZlIil9LG1vdXNlbGVhdmU6ZnVuY3Rpb24oZSl7dGhpcy5tb3VzZWRvdmVyPSExLCF0aGlzLmZvY3VzZWQmJnRoaXMuc2hvd24mJnRoaXMuaGlkZSgpfX07dmFyIG49ZS5mbi50eXBlYWhlYWQ7ZS5mbi50eXBlYWhlYWQ9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciByPWUodGhpcyksaT1yLmRhdGEoInR5cGVhaGVhZCIpLHM9dHlwZW9mIG49PSJvYmplY3QiJiZuO2l8fHIuZGF0YSgidHlwZWFoZWFkIixpPW5ldyB0KHRoaXMscykpLHR5cGVvZiBuPT0ic3RyaW5nIiYmaVtuXSgpfSl9LGUuZm4udHlwZWFoZWFkLmRlZmF1bHRzPXtzb3VyY2U6W10saXRlbXM6OCxtZW51Oic8dWwgY2xhc3M9InR5cGVhaGVhZCBkcm9wZG93bi1tZW51Ij48L3VsPicsaXRlbTonPGxpPjxhIGhyZWY9IiMiPjwvYT48L2xpPicsbWluTGVuZ3RoOjF9LGUuZm4udHlwZWFoZWFkLkNvbnN0cnVjdG9yPXQsZS5mbi50eXBlYWhlYWQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLnR5cGVhaGVhZD1uLHRoaXN9LGUoZG9jdW1lbnQpLm9uKCJmb2N1cy50eXBlYWhlYWQuZGF0YS1hcGkiLCdbZGF0YS1wcm92aWRlPSJ0eXBlYWhlYWQiXScsZnVuY3Rpb24odCl7dmFyIG49ZSh0aGlzKTtpZihuLmRhdGEoInR5cGVhaGVhZCIpKXJldHVybjtuLnR5cGVhaGVhZChuLmRhdGEoKSl9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1mdW5jdGlvbih0LG4pe3RoaXMub3B0aW9ucz1lLmV4dGVuZCh7fSxlLmZuLmFmZml4LmRlZmF1bHRzLG4pLHRoaXMuJHdpbmRvdz1lKHdpbmRvdykub24oInNjcm9sbC5hZmZpeC5kYXRhLWFwaSIsZS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcykpLm9uKCJjbGljay5hZmZpeC5kYXRhLWFwaSIsZS5wcm94eShmdW5jdGlvbigpe3NldFRpbWVvdXQoZS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcyksMSl9LHRoaXMpKSx0aGlzLiRlbGVtZW50PWUodCksdGhpcy5jaGVja1Bvc2l0aW9uKCl9O3QucHJvdG90eXBlLmNoZWNrUG9zaXRpb249ZnVuY3Rpb24oKXtpZighdGhpcy4kZWxlbWVudC5pcygiOnZpc2libGUiKSlyZXR1cm47dmFyIHQ9ZShkb2N1bWVudCkuaGVpZ2h0KCksbj10aGlzLiR3aW5kb3cuc2Nyb2xsVG9wKCkscj10aGlzLiRlbGVtZW50Lm9mZnNldCgpLGk9dGhpcy5vcHRpb25zLm9mZnNldCxzPWkuYm90dG9tLG89aS50b3AsdT0iYWZmaXggYWZmaXgtdG9wIGFmZml4LWJvdHRvbSIsYTt0eXBlb2YgaSE9Im9iamVjdCImJihzPW89aSksdHlwZW9mIG89PSJmdW5jdGlvbiImJihvPWkudG9wKCkpLHR5cGVvZiBzPT0iZnVuY3Rpb24iJiYocz1pLmJvdHRvbSgpKSxhPXRoaXMudW5waW4hPW51bGwmJm4rdGhpcy51bnBpbjw9ci50b3A/ITE6cyE9bnVsbCYmci50b3ArdGhpcy4kZWxlbWVudC5oZWlnaHQoKT49dC1zPyJib3R0b20iOm8hPW51bGwmJm48PW8/InRvcCI6ITE7aWYodGhpcy5hZmZpeGVkPT09YSlyZXR1cm47dGhpcy5hZmZpeGVkPWEsdGhpcy51bnBpbj1hPT0iYm90dG9tIj9yLnRvcC1uOm51bGwsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyh1KS5hZGRDbGFzcygiYWZmaXgiKyhhPyItIithOiIiKSl9O3ZhciBuPWUuZm4uYWZmaXg7ZS5mbi5hZmZpeD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgiYWZmaXgiKSxzPXR5cGVvZiBuPT0ib2JqZWN0IiYmbjtpfHxyLmRhdGEoImFmZml4IixpPW5ldyB0KHRoaXMscykpLHR5cGVvZiBuPT0ic3RyaW5nIiYmaVtuXSgpfSl9LGUuZm4uYWZmaXguQ29uc3RydWN0b3I9dCxlLmZuLmFmZml4LmRlZmF1bHRzPXtvZmZzZXQ6MH0sZS5mbi5hZmZpeC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4uYWZmaXg9bix0aGlzfSxlKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7ZSgnW2RhdGEtc3B5PSJhZmZpeCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyksbj10LmRhdGEoKTtuLm9mZnNldD1uLm9mZnNldHx8e30sbi5vZmZzZXRCb3R0b20mJihuLm9mZnNldC5ib3R0b209bi5vZmZzZXRCb3R0b20pLG4ub2Zmc2V0VG9wJiYobi5vZmZzZXQudG9wPW4ub2Zmc2V0VG9wKSx0LmFmZml4KG4pfSl9KX0od2luZG93LmpRdWVyeSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2ZpbHRlcnNuaXBwZXQuanMgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvZmlsdGVyc25pcHBldC5qcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYjg0YzU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2ZpbHRlcnNuaXBwZXQuanMKQEAgLTAsMCArMSw5NCBAQAorInVzZSBzdHJpY3QiCisKKy8vIFRoZSBkaXNhYmxlIHJlbW92ZXMgdGhlICdkYXRlcGlja2VyJyBhdHRyaWJ1dGUgYW5kCisvLyBzZXR0aW5ncywgc28geW91IGhhdmUgdG8gcmUtaW5pdGlhbGl6ZSBpdCBlYWNoIHRpbWUKKy8vIHRoZSBkYXRlIHJhbmdlIGlzIHNlbGVjdGVkIGFuZCBlbmFibGVkCisvLyBET00gaXMgdXNlZCBpbnN0ZWFkIG9mIGpRdWVyeSB0byBmaW5kIHRoZSBlbGVtZW50cworLy8gaW4gYWxsIGNvbnRleHRzCitmdW5jdGlvbiBkYXRlX2VuYWJsZSAoa2V5LCBhY3Rpb24pIHsKKworICAgIHZhciBlbGVtRnJvbT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGF0ZV9mcm9tXyIra2V5KTsKKyAgICB2YXIgZWxlbVRvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkYXRlX3RvXyIra2V5KTsKKworICAgIGlmICgnZW5hYmxlJyA9PSBhY3Rpb24pIHsKKyAgICAgICAgZWxlbUZyb20ucmVtb3ZlQXR0cmlidXRlKCJkaXNhYmxlZCIpOworICAgICAgICBlbGVtVG8ucmVtb3ZlQXR0cmlidXRlKCJkaXNhYmxlZCIpOworCisgICAgICAgICQoZWxlbUZyb20pLmRhdGVwaWNrZXIoKTsKKyAgICAgICAgJChlbGVtVG8pLmRhdGVwaWNrZXIoKTsKKworICAgICAgICAkKGVsZW1Gcm9tKS5kYXRlcGlja2VyKCAib3B0aW9uIiwgImRhdGVGb3JtYXQiLCAiZGQvbW0veXkiICk7CisgICAgICAgICQoZWxlbVRvKS5kYXRlcGlja2VyKCAib3B0aW9uIiwgImRhdGVGb3JtYXQiLCAiZGQvbW0veXkiICk7CisKKyAgICAgICAgJChlbGVtRnJvbSkuZGF0ZXBpY2tlciggInNldERhdGUiLCBlbGVtRnJvbS5nZXRBdHRyaWJ1dGUoICJkYXRhLXNldERhdGUiKSApOworICAgICAgICAkKGVsZW1UbykuZGF0ZXBpY2tlciggInNldERhdGUiLCBlbGVtVG8uZ2V0QXR0cmlidXRlKCAiZGF0YS1zZXREYXRlIikgKTsKKyAgICAgICAgJChlbGVtRnJvbSkuZGF0ZXBpY2tlciggIm9wdGlvbiIsICJtaW5EYXRlIiwgZWxlbUZyb20uZ2V0QXR0cmlidXRlKCAiZGF0YS1taW5EYXRlIikpOworICAgICAgICAkKGVsZW1UbykuZGF0ZXBpY2tlciggIm9wdGlvbiIsICJtaW5EYXRlIiwgIGVsZW1Uby5nZXRBdHRyaWJ1dGUoICJkYXRhLW1pbkRhdGUiKSk7CisgICAgICAgICQoZWxlbUZyb20pLmRhdGVwaWNrZXIoICJvcHRpb24iLCAibWF4RGF0ZSIsIGVsZW1Gcm9tLmdldEF0dHJpYnV0ZSggImRhdGEtbWF4RGF0ZSIpKTsKKyAgICAgICAgJChlbGVtVG8pLmRhdGVwaWNrZXIoICJvcHRpb24iLCAibWF4RGF0ZSIsIGVsZW1Uby5nZXRBdHRyaWJ1dGUoICJkYXRhLW1heERhdGUiKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZWxlbUZyb20uc2V0QXR0cmlidXRlKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisgICAgICAgIGVsZW1Uby5zZXRBdHRyaWJ1dGUoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICB9Cit9CisKKy8vIEluaXRpYWxpemUgdGhlIGRhdGUgcGlja2VyIGVsZW1lbnRzIHdpdGggdGhlaXIgZGVmYXVsdCBzdGF0ZSB2YXJpYWJsZXMsIGFuZAorLy8gcmVnaXN0ZXIgdGhlIHJhZGlvIGJ1dHRvbiBhbmQgZm9ybSBhY3Rpb25zCitmdW5jdGlvbiBkYXRlX2luaXQgKGtleSwgZnJvbV9kYXRlLCB0b19kYXRlLCBtaW5fZGF0ZSwgbWF4X2RhdGUsIGluaXRpYWxfZW5hYmxlKSB7CisKKyAgICB2YXIgZWxlbUZyb209ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRhdGVfZnJvbV8iK2tleSk7CisgICAgdmFyIGVsZW1Ubz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGF0ZV90b18iK2tleSk7CisKKyAgICAvLyBXZXJlIHRoZXJlIGFueSBkYXRlcmFuZ2UgZmlsdGVycyBpbnN0YW50aWF0ZWQ/IChlLmcuIG5vIGJ1aWxkcyBmb3VuZCkKKyAgICBpZiAobnVsbCA9PSBlbGVtRnJvbSkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gaW5pdCB0aGUgZGF0ZXBpY2tlciBjb250ZXh0IGRhdGEKKyAgICBlbGVtRnJvbS5zZXRBdHRyaWJ1dGUoICJkYXRhLXNldERhdGUiLCBmcm9tX2RhdGUgKTsKKyAgICBlbGVtVG8uc2V0QXR0cmlidXRlKCAiZGF0YS1zZXREYXRlIiwgdG9fZGF0ZSApOworICAgIGVsZW1Gcm9tLnNldEF0dHJpYnV0ZSggImRhdGEtbWluRGF0ZSIsIG1pbl9kYXRlKTsKKyAgICBlbGVtVG8uc2V0QXR0cmlidXRlKCAiZGF0YS1taW5EYXRlIiwgIG1pbl9kYXRlKTsKKyAgICBlbGVtRnJvbS5zZXRBdHRyaWJ1dGUoICJkYXRhLW1heERhdGUiLCBtYXhfZGF0ZSk7CisgICAgZWxlbVRvLnNldEF0dHJpYnV0ZSggImRhdGEtbWF4RGF0ZSIsIG1heF9kYXRlKTsKKworICAgIC8vIGRvZXMgdGhlIGRhdGUgc2V0IHN0YXJ0IGVuYWJsZWQ/CisgICAgaWYgKGtleSA9PSBpbml0aWFsX2VuYWJsZSkgeworICAgICAgICBkYXRlX2VuYWJsZSAoa2V5LCAiZW5hYmxlIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGF0ZV9lbmFibGUgKGtleSwgImRpc2FibGUiKTsKKyAgICB9CisKKyAgICAvLyBjYXRjaCB0aGUgcmFkaW8gYnV0dG9uIHNlbGVjdHMgZm9yIGVuYWJsZS9kaXNhYmxlCisgICAgJCgnaW5wdXQ6cmFkaW9bbmFtZT0iZmlsdGVyIl0nKS5jaGFuZ2UoZnVuY3Rpb24oKXsKKyAgICAgICAgaWYgKCQodGhpcykudmFsKCkgPT0gJ2RhdGVyYW5nZScpIHsKKyAgICAgICAgICAgIGtleT0kKHRoaXMpLmF0dHIoImRhdGEta2V5Iik7CisgICAgICAgICAgICBkYXRlX2VuYWJsZSAoa2V5LCAnZW5hYmxlJyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBrZXk9JCh0aGlzKS5hdHRyKCJkYXRhLWtleSIpOworICAgICAgICAgICAgZGF0ZV9lbmFibGUgKGtleSwgJ2Rpc2FibGUnKTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgLy8gY2F0Y2ggYW55IG5ldyAnZnJvbScgZGF0ZSBhcyBtaW5EYXRlIGZvciAndG8nIGRhdGUKKyAgICAkKCIjZGF0ZV9mcm9tXyIra2V5KS5jaGFuZ2UoZnVuY3Rpb24oKXsKKyAgICAgICAgZnJvbV9kYXRlID0gJCgiI2RhdGVfZnJvbV8iK2tleSkudmFsKCk7CisgICAgICAgICQoIiNkYXRlX3RvXyIra2V5KS5kYXRlcGlja2VyKCAib3B0aW9uIiwgIm1pbkRhdGUiLCBmcm9tX2RhdGUgKTsKKyAgICB9KTsKKworICAgIC8vIGNhdGNoIHRoZSBzdWJtaXQgKGp1c3Qgb25jZSkKKyAgICAkKCJmb3JtIikudW5iaW5kKCdzdWJtaXQnKTsKKyAgICAkKCJmb3JtIikuc3VibWl0KGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgLy8gZm9ybWF0IGEgY29tcG9zaXRlIGRhdGVyYW5nZSBmaWx0ZXIgdmFsdWUgc28gdGhhdCBpdCBjYW4gYmUgcGFyc2VkIGFuZCBwb3N0LXByb2Nlc3NlZCBpbiB0aGUgdmlldworICAgICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGlmICgkKCIjZGF0ZV9mcm9tXyIra2V5KS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB2YXIgZmlsdGVyPWtleSsiX19ndGUhIitrZXkrIl9fbHQ6IiskKCIjZGF0ZV9mcm9tXyIra2V5KS52YWwoKSsiISIrJCgiI2RhdGVfdG9fIitrZXkpLnZhbCgpKyJfZGF0ZXJhbmdlIjsKKyAgICAgICAgICAgICAgICAkKCIjbGFzdF9kYXRlX2Zyb21fIitrZXkpLnZhbCgkKCIjZGF0ZV9mcm9tXyIra2V5KS52YWwoKSk7CisgICAgICAgICAgICAgICAgJCgiI2xhc3RfZGF0ZV90b18iK2tleSkudmFsKCQoIiNkYXRlX3RvXyIra2V5KS52YWwoKSk7CisgICAgICAgICAgICAgICAgJCgiI2ZpbHRlcl92YWx1ZV8iK2tleSkudmFsKGZpbHRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7CisKK307CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvaW1wb3J0bGF5ZXIuanMgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvaW1wb3J0bGF5ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhZGJjMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9pbXBvcnRsYXllci5qcwpAQCAtMCwwICsxLDI3NiBAQAorInVzZSBzdHJpY3QiCisKK2Z1bmN0aW9uIGltcG9ydExheWVyUGFnZUluaXQgKGN0eCkgeworCisgIHZhciBsYXllckRlcEJ0biA9ICQoIiNhZGQtbGF5ZXItZGVwZW5kZW5jeS1idG4iKTsKKyAgdmFyIGltcG9ydEFuZEFkZEJ0biA9ICQoIiNpbXBvcnQtYW5kLWFkZC1idG4iKTsKKyAgdmFyIGxheWVyTmFtZUlucHV0ID0gJCgiI2ltcG9ydC1sYXllci1uYW1lIik7CisgIHZhciB2Y3NVUkxJbnB1dCA9ICQoIiNsYXllci1naXQtcmVwby11cmwiKTsKKyAgdmFyIGdpdFJlZklucHV0ID0gJCgiI2xheWVyLWdpdC1yZWYiKTsKKyAgdmFyIGxheWVyRGVwSW5wdXQgPSAkKCIjbGF5ZXItZGVwZW5kZW5jeSIpOworICB2YXIgbGF5ZXJOYW1lQ3RybCA9ICQoIiNsYXllci1uYW1lLWN0cmwiKTsKKyAgdmFyIGR1cGxpY2F0ZWRMYXllck5hbWUgPSAkKCIjZHVwbGljYXRlZC1sYXllci1uYW1lLWhpbnQiKTsKKworICB2YXIgbGF5ZXJEZXBzID0ge307CisgIHZhciBsYXllckRlcHNEZXBzID0ge307CisgIHZhciBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb247CisgIHZhciB2YWxpZExheWVyTmFtZSA9IC9eKFx3fC0pKyQvOworCisgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChsYXllckRlcElucHV0LCBsaWJ0b2FzdGVyLmN0eC5sYXllcnNUeXBlQWhlYWRVcmwsIHsgaW5jbHVkZV9hZGRlZDogInRydWUiIH0sIGZ1bmN0aW9uKGl0ZW0peworICAgIGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbiA9IGl0ZW07CisKKyAgICBsYXllckRlcEJ0bi5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICB9KTsKKworCisgIC8qIFdlIGF1dG9tYXRpY2FsbHkgYWRkICJvcGVuZW1iZWRkZWQtY29yZSIgbGF5ZXIgZm9yIGNvbnZlbmllbmNlIGFzIGEKKyAgICogZGVwZW5kZW5jeSBhcyBwcmV0dHkgbXVjaCBhbGwgbGF5ZXJzIGRlcGVuZCBvbiB0aGlzIG9uZQorICAgKi8KKyAgJC5nZXRKU09OKGxpYnRvYXN0ZXIuY3R4LmxheWVyc1R5cGVBaGVhZFVybCwKKyAgICB7IGluY2x1ZGVfYWRkZWQ6ICJ0cnVlIiAsIHNlYXJjaDogIm9wZW5lbWJlZGRlZC1jb3JlIiB9LAorICAgIGZ1bmN0aW9uKGxheWVyKSB7CisgICAgaWYgKGxheWVyLnJlc3VsdHMubGVuZ3RoID4gMCkgeworICAgICAgY3VycmVudExheWVyRGVwU2VsZWN0aW9uID0gbGF5ZXIucmVzdWx0c1swXTsKKyAgICAgIGxheWVyRGVwQnRuLmNsaWNrKCk7CisgICAgfQorICB9KTsKKworICBsYXllckRlcEJ0bi5jbGljayhmdW5jdGlvbigpeworICAgIGlmIChjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24gPT0gdW5kZWZpbmVkKQorICAgICAgcmV0dXJuOworCisgICAgbGF5ZXJEZXBzW2N1cnJlbnRMYXllckRlcFNlbGVjdGlvbi5pZF0gPSBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb247CisKKyAgICAvKiBNYWtlIGEgbGlzdCBpdGVtIGZvciB0aGUgbmV3IGxheWVyIGRlcGVuZGVuY3kgKi8KKyAgICB2YXIgbmV3TGF5ZXJEZXAgPSAkKCI8bGk+PGE+PC9hPjxzcGFuIGNsYXNzPVwiaWNvbi10cmFzaFwiIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIHRpdGxlPVwiRGVsZXRlXCI+PC9zcGFuPjwvbGk+Iik7CisKKyAgICBuZXdMYXllckRlcC5kYXRhKCdsYXllci1pZCcsIGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbi5pZCk7CisgICAgbmV3TGF5ZXJEZXAuY2hpbGRyZW4oInNwYW4iKS50b29sdGlwKCk7CisKKyAgICB2YXIgbGluayA9IG5ld0xheWVyRGVwLmNoaWxkcmVuKCJhIik7CisgICAgbGluay5hdHRyKCJocmVmIiwgY3VycmVudExheWVyRGVwU2VsZWN0aW9uLmxheWVyZGV0YWlsdXJsKTsKKyAgICBsaW5rLnRleHQoY3VycmVudExheWVyRGVwU2VsZWN0aW9uLm5hbWUpOworICAgIGxpbmsudG9vbHRpcCh7dGl0bGU6IGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbi50b29sdGlwLCBwbGFjZW1lbnQ6ICJyaWdodCJ9KTsKKworICAgIHZhciB0cmFzaEl0ZW0gPSBuZXdMYXllckRlcC5jaGlsZHJlbigic3BhbiIpOworICAgIHRyYXNoSXRlbS5jbGljayhmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgdG9SZW1vdmUgPSAkKHRoaXMpLnBhcmVudCgpLmRhdGEoJ2xheWVyLWlkJyk7CisgICAgICBkZWxldGUgbGF5ZXJEZXBzW3RvUmVtb3ZlXTsKKyAgICAgICQodGhpcykucGFyZW50KCkuZmFkZU91dChmdW5jdGlvbiAoKXsKKyAgICAgICAgJCh0aGlzKS5yZW1vdmUoKTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgJCgiI2xheWVyLWRlcHMtbGlzdCIpLmFwcGVuZChuZXdMYXllckRlcCk7CisKKyAgICBsaWJ0b2FzdGVyLmdldExheWVyRGVwc0ZvclByb2plY3QoY3VycmVudExheWVyRGVwU2VsZWN0aW9uLmxheWVyZGV0YWlsdXJsLCBmdW5jdGlvbiAoZGF0YSl7CisgICAgICAgIC8qIFRoZXNlIGFyZSB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBsYXllciBhZGRlZCBhcyBhIGRlcGVuZGVuY3kgKi8KKyAgICAgICAgaWYgKGRhdGEubGlzdC5sZW5ndGggPiAwKSB7CisgICAgICAgICAgY3VycmVudExheWVyRGVwU2VsZWN0aW9uLnVybCA9IGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbi5sYXllcmRldGFpbHVybDsKKyAgICAgICAgICBsYXllckRlcHNbY3VycmVudExheWVyRGVwU2VsZWN0aW9uLmlkXS5kZXBzID0gZGF0YS5saXN0OworICAgICAgICB9CisKKyAgICAgICAgLyogQ2xlYXIgdGhlIGN1cnJlbnQgc2VsZWN0aW9uICovCisgICAgICAgIGxheWVyRGVwSW5wdXQudmFsKCIiKTsKKyAgICAgICAgY3VycmVudExheWVyRGVwU2VsZWN0aW9uID0gdW5kZWZpbmVkOworICAgICAgICBsYXllckRlcEJ0bi5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisgICAgICB9LCBudWxsKTsKKyAgfSk7CisKKyAgaW1wb3J0QW5kQWRkQnRuLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgLyogVGhpcyBpcyBhIGxpc3Qgb2YgdGhlIG5hbWVzIGZyb20gbGF5ZXJEZXBzIGZvciB0aGUgbGF5ZXIgZGVwcworICAgICAqIG1vZGFsIGRpYWxvZyBib2R5CisgICAgICovCisgICAgdmFyIGRlcE5hbWVzID0gW107CisKKyAgICAvKiBhcnJyYXkgb2YgYWxsIGxheWVyIGRlcCBpZHMgaW5jbHVkZXMgcGFyZW50IGFuZCBjaGlsZCBkZXBzICovCisgICAgdmFyIGFsbERlcHMgPSBbXTsKKworICAgIC8qIHRlbXBvcmFyeSBvYmplY3QgdG8gdXNlIHRvIGRvIGEgcmVkdWNlIG9uIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGVhY2gKKyAgICAgKiBsYXllciBkZXBlbmRlbmN5IGFkZGVkCisgICAgICovCisgICAgdmFyIGRlcERlcHMgPSB7fTsKKworICAgIC8qIHRoZSBsYXllcnMgdGhhdCBoYXZlIGRlcGVuZGVuY2llcyBoYXZlIGFuIGV4dHJhIHByb3BlcnR5ICJkZXBzIgorICAgICAqIGxvb2sgaW4gdGhpcyBmb3IgZWFjaCBsYXllciBhbmQgcmVkdWNlIHRoaXMgdG8gYSB1bnF1aWUgb2JqZWN0CisgICAgICogb2YgZGVwcy4KKyAgICAgKi8KKyAgICBmb3IgKHZhciBrZXkgaW4gbGF5ZXJEZXBzKXsKKyAgICAgIGlmIChsYXllckRlcHNba2V5XS5oYXNPd25Qcm9wZXJ0eSgnZGVwcycpKXsKKyAgICAgICAgZm9yICh2YXIgZGVwIGluIGxheWVyRGVwc1trZXldLmRlcHMpeworICAgICAgICAgIHZhciBsYXllciA9IGxheWVyRGVwc1trZXldLmRlcHNbZGVwXTsKKyAgICAgICAgICBkZXBEZXBzW2xheWVyLmlkXSA9IGxheWVyOworICAgICAgICB9CisgICAgICB9CisgICAgICBkZXBOYW1lcy5wdXNoKGxheWVyRGVwc1trZXldLm5hbWUpOworICAgICAgYWxsRGVwcy5wdXNoKGxheWVyRGVwc1trZXldLmlkKTsKKyAgICB9CisKKyAgICAvKiB3ZSBhY3R1YWxseSB3YW50IGl0IGFzIGFuIGFycmF5IHNvIGNvbnZlcnQgaXQgbm93ICovCisgICAgdmFyIGRlcERlcHNBcnJheSA9IFtdOworICAgIGZvciAodmFyIGtleSBpbiBkZXBEZXBzKQorICAgICAgZGVwRGVwc0FycmF5LnB1c2ggKGRlcERlcHNba2V5XSk7CisKKyAgICBpZiAoZGVwRGVwc0FycmF5Lmxlbmd0aCA+IDApIHsKKyAgICAgIHZhciBsYXllciA9IHsgbmFtZTogbGF5ZXJOYW1lSW5wdXQudmFsKCksIHVybDogIiMiLCBpZDogLTEgfTsKKyAgICAgIHZhciB0aXRsZSA9ICJMYXllciI7CisgICAgICB2YXIgYm9keSA9ICI8c3Ryb25nPiIrbGF5ZXIubmFtZSsiPC9zdHJvbmc+J3MgZGVwZW5kZW5jaWVzICgiKworICAgICAgICBkZXBOYW1lcy5qb2luKCIsICIpKyI8L3NwYW4+KSByZXF1aXJlIHNvbWUgbGF5ZXJzIHRoYXQgYXJlIG5vdCBhZGRlZCB0byB5b3VyIHByb2plY3QuIFNlbGVjdCB0aGUgb25lcyB5b3Ugd2FudCB0byBhZGQ6PC9wPiI7CisKKyAgICAgIHNob3dMYXllckRlcHNNb2RhbChsYXllciwgZGVwRGVwc0FycmF5LCB0aXRsZSwgYm9keSwgZmFsc2UsIGZ1bmN0aW9uKGxheWVyT2JzTGlzdCl7CisgICAgICAgIC8qIEFkZCB0aGUgYWNjZXB0ZWQgbGF5ZXIgZGVwZW5kZW5jaWVzJyBpZHMgdG8gdGhlIGFsbERlcHMgYXJyYXkgKi8KKyAgICAgICAgZm9yICh2YXIga2V5IGluIGxheWVyT2JzTGlzdCl7CisgICAgICAgICAgYWxsRGVwcy5wdXNoKGxheWVyT2JzTGlzdFtrZXldLmlkKTsKKyAgICAgICAgfQorICAgICAgICBpbXBvcnRfYW5kX2FkZCAoKTsKKyAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICBpbXBvcnRfYW5kX2FkZCAoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbXBvcnRfYW5kX2FkZCAoKSB7CisgICAgICAvKiBjb252ZXJ0IHRvIGEgY3N2IG9mIGFsbCB0aGUgZGVwcyB0byBiZSBhZGRlZCAqLworICAgICAgdmFyIGxheWVyRGVwc0NzdiA9IGFsbERlcHMuam9pbigiLCIpOworCisgICAgICB2YXIgbGF5ZXJEYXRhID0geworICAgICAgICBuYW1lOiBsYXllck5hbWVJbnB1dC52YWwoKSwKKyAgICAgICAgdmNzX3VybDogdmNzVVJMSW5wdXQudmFsKCksCisgICAgICAgIGdpdF9yZWY6IGdpdFJlZklucHV0LnZhbCgpLAorICAgICAgICBkaXJfcGF0aDogJCgiI2xheWVyLXN1YmRpciIpLnZhbCgpLAorICAgICAgICBwcm9qZWN0X2lkOiBsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0SWQsCisgICAgICAgIGxheWVyX2RlcHM6IGxheWVyRGVwc0NzdiwKKyAgICAgIH07CisKKyAgICAgICQuYWpheCh7CisgICAgICAgICAgdHlwZTogIlBPU1QiLAorICAgICAgICAgIHVybDogY3R4LnhockltcG9ydExheWVyVXJsLAorICAgICAgICAgIGRhdGE6IGxheWVyRGF0YSwKKyAgICAgICAgICBoZWFkZXJzOiB7ICdYLUNTUkZUb2tlbicgOiAkLmNvb2tpZSgnY3NyZnRva2VuJyl9LAorICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgICBpZiAoZGF0YS5lcnJvciAhPSAib2siKSB7CisgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEuZXJyb3IpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgLyogU3VjY2VzcyBsYXllciBpbXBvcnQgbm93IGdvIHRvIHRoZSBwcm9qZWN0IHBhZ2UgKi8KKyAgICAgICAgICAgICAgJC5jb29raWUoJ2xheWVyLWltcG9ydGVkLWFsZXJ0JywgSlNPTi5zdHJpbmdpZnkoZGF0YSksIHsgcGF0aDogJy8nfSk7CisgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RQYWdlVXJsKyc/bm90aWZ5PWxheWVyLWltcG9ydGVkJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwKKyAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJDYWxsIGZhaWxlZCIpOworICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CisgICAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorICB9KTsKKworICBmdW5jdGlvbiBlbmFibGVfaW1wb3J0X2J0bihlbmFibGVkKSB7CisgICAgdmFyIGltcG9ydEFuZEFkZEhpbnQgPSAkKCIjaW1wb3J0LWFuZC1hZGQtaGludCIpOworCisgICAgaWYgKGVuYWJsZWQpIHsKKyAgICAgIGltcG9ydEFuZEFkZEJ0bi5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgaW1wb3J0QW5kQWRkSGludC5oaWRlKCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW1wb3J0QW5kQWRkQnRuLmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CisgICAgaW1wb3J0QW5kQWRkSGludC5zaG93KCk7CisgIH0KKworICBmdW5jdGlvbiBjaGVja19mb3JtKCkgeworICAgIHZhciB2YWxpZCA9IGZhbHNlOworICAgIHZhciBpbnB1dHMgPSAkKCJpbnB1dDpyZXF1aXJlZCIpOworCisgICAgZm9yICh2YXIgaT0wOyBpPGlucHV0cy5sZW5ndGg7IGkrKyl7CisgICAgICBpZiAoISh2YWxpZCA9IGlucHV0c1tpXS52YWx1ZSkpeworICAgICAgICBlbmFibGVfaW1wb3J0X2J0bihmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGlmICh2YWxpZCkKKyAgICAgIGVuYWJsZV9pbXBvcnRfYnRuKHRydWUpOworICB9CisKKyAgZnVuY3Rpb24gbGF5ZXJFeGlzdHNFcnJvcihsYXllcil7CisgICAgdmFyIGR1cExheWVySW5mbyA9ICQoIiNkdXBsaWNhdGUtbGF5ZXItaW5mbyIpOworICAgIGR1cExheWVySW5mby5maW5kKCIuZHVwLWxheWVyLW5hbWUiKS50ZXh0KGxheWVyLm5hbWUpOworICAgIGR1cExheWVySW5mby5maW5kKCIuZHVwLWxheWVyLWxpbmsiKS5hdHRyKCJocmVmIiwgbGF5ZXIubGF5ZXJkZXRhaWx1cmwpOworICAgIGR1cExheWVySW5mby5maW5kKCIjZHVwLWxheWVyLXZjcy11cmwiKS50ZXh0KGxheWVyLmxheWVyX192Y3NfdXJsKTsKKyAgICBkdXBMYXllckluZm8uZmluZCgiI2R1cC1sYXllci1yZXZpc2lvbiIpLnRleHQobGF5ZXIucmV2aXNpb24uY29tbWl0KTsKKworICAgICQoIi5maWVsZHMtYXBhcnQtZnJvbS1sYXllci1uYW1lIikuZmFkZU91dChmdW5jdGlvbigpeworCisgICAgICBkdXBMYXllckluZm8uZmFkZUluKCk7CisgICAgfSk7CisgIH0KKworICBsYXllck5hbWVJbnB1dC5vbignYmx1cicsIGZ1bmN0aW9uKCkgeworICAgICAgaWYgKCEkKHRoaXMpLnZhbCgpKXsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgdmFyIG5hbWUgPSAkKHRoaXMpLnZhbCgpOworCisgICAgICAvKiBDaGVjayBpZiB0aGUgbGF5ZXIgbmFtZSBleGlzdHMgKi8KKyAgICAgICQuZ2V0SlNPTihsaWJ0b2FzdGVyLmN0eC5sYXllcnNUeXBlQWhlYWRVcmwsCisgICAgICAgIHsgaW5jbHVkZV9hZGRlZDogInRydWUiICwgc2VhcmNoOiBuYW1lLCBmb3JtYXQ6ICJqc29uIiB9LAorICAgICAgICBmdW5jdGlvbihsYXllcikgeworICAgICAgICAgIGlmIChsYXllci5yb3dzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgaW4gbGF5ZXIucm93cyl7CisgICAgICAgICAgICAgIGlmIChsYXllci5yb3dzW2ldLm5hbWUgPT0gbmFtZSkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxheWVyLnJvd3NbaV0pCisgICAgICAgICAgICAgICAgbGF5ZXJFeGlzdHNFcnJvcihsYXllci5yb3dzW2ldKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgIH0pOworICB9KTsKKworICB2Y3NVUkxJbnB1dC5vbignaW5wdXQnLCBmdW5jdGlvbigpIHsKKyAgICBjaGVja19mb3JtKCk7CisgIH0pOworCisgIGdpdFJlZklucHV0Lm9uKCdpbnB1dCcsIGZ1bmN0aW9uKCkgeworICAgIGNoZWNrX2Zvcm0oKTsKKyAgfSk7CisKKyAgbGF5ZXJOYW1lSW5wdXQub24oJ2lucHV0JywgZnVuY3Rpb24oKSB7CisgICAgaWYgKCQodGhpcykudmFsKCkgJiYgIXZhbGlkTGF5ZXJOYW1lLnRlc3QoJCh0aGlzKS52YWwoKSkpeworICAgICAgbGF5ZXJOYW1lQ3RybC5hZGRDbGFzcygiZXJyb3IiKQorICAgICAgJCgiI2ludmFsaWQtbGF5ZXItbmFtZS1oaW50Iikuc2hvdygpOworICAgICAgZW5hYmxlX2ltcG9ydF9idG4oZmFsc2UpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgkKCIjZHVwbGljYXRlLWxheWVyLWluZm8iKS5jc3MoImRpc3BsYXkiKSAhPSAiTm9uZSIpeworICAgICAgJCgiI2R1cGxpY2F0ZS1sYXllci1pbmZvIikuZmFkZU91dChmdW5jdGlvbigpeworICAgICAgICAkKCIuZmllbGRzLWFwYXJ0LWZyb20tbGF5ZXItbmFtZSIpLnNob3coKTsKKyAgICAgIH0pOworCisgICAgfQorCisgICAgLyogRG9uJ3QgcmVtb3ZlIHRoZSBlcnJvciBjbGFzcyBpZiB3ZSdyZSBkaXNwbGF5aW5nIHRoZSBlcnJvciBmb3IgYW5vdGhlcgorICAgICAqIHJlYXNvbi4KKyAgICAgKi8KKyAgICBpZiAoIWR1cGxpY2F0ZWRMYXllck5hbWUuaXMoIjp2aXNpYmxlIikpCisgICAgICBsYXllck5hbWVDdHJsLnJlbW92ZUNsYXNzKCJlcnJvciIpCisKKyAgICAkKCIjaW52YWxpZC1sYXllci1uYW1lLWhpbnQiKS5oaWRlKCk7CisgICAgY2hlY2tfZm9ybSgpOworICB9KTsKKworICAvKiBIYXZlIGEgZ3Vlc3MgYXQgdGhlIGxheWVyIG5hbWUgKi8KKyAgdmNzVVJMSW5wdXQuZm9jdXNvdXQoZnVuY3Rpb24gKCl7CisgICAgLyogSWYgd2UgYSBsYXllciBuYW1lIHNwZWNpZmllZCBkb24ndCBvdmVyd3JpdGUgaXQgb3IgaWYgdGhlcmUgaXNuJ3QgYQorICAgICAqIHVybCB0eXBlZCBpbiB5ZXQgcmV0dXJuCisgICAgICovCisgICAgaWYgKGxheWVyTmFtZUlucHV0LnZhbCgpIHx8ICEkKHRoaXMpLnZhbCgpKQorICAgICAgcmV0dXJuOworCisgICAgaWYgKCQodGhpcykudmFsKCkuc2VhcmNoKCIvIikpeworICAgICAgdmFyIHVybFB0cyA9ICQodGhpcykudmFsKCkuc3BsaXQoIi8iKTsKKyAgICAgIHZhciBzdWdnZXN0aW9uID0gdXJsUHRzW3VybFB0cy5sZW5ndGgtMV0ucmVwbGFjZSgiLmdpdCIsIiIpOworICAgICAgbGF5ZXJOYW1lSW5wdXQudmFsKHN1Z2dlc3Rpb24pOworICAgIH0KKyAgfSk7CisKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnktMi4wLjMubWluLmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2pxdWVyeS0yLjAuMy5taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJlMjA5ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnktMi4wLjMubWluLmpzCkBAIC0wLDAgKzEsNiBAQAorLyohIGpRdWVyeSB2Mi4wLjMgfCAoYykgMjAwNSwgMjAxMyBqUXVlcnkgRm91bmRhdGlvbiwgSW5jLiB8IGpxdWVyeS5vcmcvbGljZW5zZQorLy9AIHNvdXJjZU1hcHBpbmdVUkw9anF1ZXJ5LTIuMC4zLm1pbi5tYXAKKyovCisoZnVuY3Rpb24oZSx1bmRlZmluZWQpe3ZhciB0LG4scj10eXBlb2YgdW5kZWZpbmVkLGk9ZS5sb2NhdGlvbixvPWUuZG9jdW1lbnQscz1vLmRvY3VtZW50RWxlbWVudCxhPWUualF1ZXJ5LHU9ZS4kLGw9e30sYz1bXSxwPSIyLjAuMyIsZj1jLmNvbmNhdCxoPWMucHVzaCxkPWMuc2xpY2UsZz1jLmluZGV4T2YsbT1sLnRvU3RyaW5nLHk9bC5oYXNPd25Qcm9wZXJ0eSx2PXAudHJpbSx4PWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyB4LmZuLmluaXQoZSxuLHQpfSxiPS9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLHc9L1xTKy9nLFQ9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0qKSkkLyxDPS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8saz0vXi1tcy0vLE49Ly0oW1xkYS16XSkvZ2ksRT1mdW5jdGlvbihlLHQpe3JldHVybiB0LnRvVXBwZXJDYXNlKCl9LFM9ZnVuY3Rpb24oKXtvLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLFMsITEpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsUywhMSkseC5yZWFkeSgpfTt4LmZuPXgucHJvdG90eXBlPXtqcXVlcnk6cCxjb25zdHJ1Y3Rvcjp4LGluaXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoIWUpcmV0dXJuIHRoaXM7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZihyPSI8Ij09PWUuY2hhckF0KDApJiYiPiI9PT1lLmNoYXJBdChlLmxlbmd0aC0xKSYmZS5sZW5ndGg+PTM/W251bGwsZSxudWxsXTpULmV4ZWMoZSksIXJ8fCFyWzFdJiZ0KXJldHVybiF0fHx0LmpxdWVyeT8odHx8bikuZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKHQpLmZpbmQoZSk7aWYoclsxXSl7aWYodD10IGluc3RhbmNlb2YgeD90WzBdOnQseC5tZXJnZSh0aGlzLHgucGFyc2VIVE1MKHJbMV0sdCYmdC5ub2RlVHlwZT90Lm93bmVyRG9jdW1lbnR8fHQ6bywhMCkpLEMudGVzdChyWzFdKSYmeC5pc1BsYWluT2JqZWN0KHQpKWZvcihyIGluIHQpeC5pc0Z1bmN0aW9uKHRoaXNbcl0pP3RoaXNbcl0odFtyXSk6dGhpcy5hdHRyKHIsdFtyXSk7cmV0dXJuIHRoaXN9cmV0dXJuIGk9by5nZXRFbGVtZW50QnlJZChyWzJdKSxpJiZpLnBhcmVudE5vZGUmJih0aGlzLmxlbmd0aD0xLHRoaXNbMF09aSksdGhpcy5jb250ZXh0PW8sdGhpcy5zZWxlY3Rvcj1lLHRoaXN9cmV0dXJuIGUubm9kZVR5cGU/KHRoaXMuY29udGV4dD10aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzKTp4LmlzRnVuY3Rpb24oZSk/bi5yZWFkeShlKTooZS5zZWxlY3RvciE9PXVuZGVmaW5lZCYmKHRoaXMuc2VsZWN0b3I9ZS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9ZS5jb250ZXh0KSx4Lm1ha2VBcnJheShlLHRoaXMpKX0sc2VsZWN0b3I6IiIsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBkLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT90aGlzLnRvQXJyYXkoKTowPmU/dGhpc1t0aGlzLmxlbmd0aCtlXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9eC5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHQuY29udGV4dD10aGlzLmNvbnRleHQsdH0sZWFjaDpmdW5jdGlvbihlLHQpe3JldHVybiB4LmVhY2godGhpcyxlLHQpfSxyZWFkeTpmdW5jdGlvbihlKXtyZXR1cm4geC5yZWFkeS5wcm9taXNlKCkuZG9uZShlKSx0aGlzfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGVuZ3RoLG49K2UrKDA+ZT90OjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhuPj0wJiZ0Pm4/W3RoaXNbbl1dOltdKX0sbWFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayh4Lm1hcCh0aGlzLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4sdCl9KSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6aCxzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX0seC5mbi5pbml0LnByb3RvdHlwZT14LmZuLHguZXh0ZW5kPXguZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsaSxvLHM9YXJndW1lbnRzWzBdfHx7fSxhPTEsdT1hcmd1bWVudHMubGVuZ3RoLGw9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIHMmJihsPXMscz1hcmd1bWVudHNbMV18fHt9LGE9MiksIm9iamVjdCI9PXR5cGVvZiBzfHx4LmlzRnVuY3Rpb24ocyl8fChzPXt9KSx1PT09YSYmKHM9dGhpcywtLWEpO3U+YTthKyspaWYobnVsbCE9KGU9YXJndW1lbnRzW2FdKSlmb3IodCBpbiBlKW49c1t0XSxyPWVbdF0scyE9PXImJihsJiZyJiYoeC5pc1BsYWluT2JqZWN0KHIpfHwoaT14LmlzQXJyYXkocikpKT8oaT8oaT0hMSxvPW4mJnguaXNBcnJheShuKT9uOltdKTpvPW4mJnguaXNQbGFpbk9iamVjdChuKT9uOnt9LHNbdF09eC5leHRlbmQobCxvLHIpKTpyIT09dW5kZWZpbmVkJiYoc1t0XT1yKSk7cmV0dXJuIHN9LHguZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhwK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLG5vQ29uZmxpY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIGUuJD09PXgmJihlLiQ9dSksdCYmZS5qUXVlcnk9PT14JiYoZS5qUXVlcnk9YSkseH0saXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oZSl7ZT94LnJlYWR5V2FpdCsrOngucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihlKXsoZT09PSEwPy0teC5yZWFkeVdhaXQ6eC5pc1JlYWR5KXx8KHguaXNSZWFkeT0hMCxlIT09ITAmJi0teC5yZWFkeVdhaXQ+MHx8KG4ucmVzb2x2ZVdpdGgobyxbeF0pLHguZm4udHJpZ2dlciYmeChvKS50cmlnZ2VyKCJyZWFkeSIpLm9mZigicmVhZHkiKSkpfSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PT14LnR5cGUoZSl9LGlzQXJyYXk6QXJyYXkuaXNBcnJheSxpc1dpbmRvdzpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZT09PWUud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oZSl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQoZSkpJiZpc0Zpbml0ZShlKX0sdHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9lKyIiOiJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGU/bFttLmNhbGwoZSldfHwib2JqZWN0Ijp0eXBlb2YgZX0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihlKXtpZigib2JqZWN0IiE9PXgudHlwZShlKXx8ZS5ub2RlVHlwZXx8eC5pc1dpbmRvdyhlKSlyZXR1cm4hMTt0cnl7aWYoZS5jb25zdHJ1Y3RvciYmIXkuY2FsbChlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXJldHVybiExfWNhdGNoKHQpe3JldHVybiExfXJldHVybiEwfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGVycm9yOmZ1bmN0aW9uKGUpe3Rocm93IEVycm9yKGUpfSxwYXJzZUhUTUw6ZnVuY3Rpb24oZSx0LG4pe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7ImJvb2xlYW4iPT10eXBlb2YgdCYmKG49dCx0PSExKSx0PXR8fG87dmFyIHI9Qy5leGVjKGUpLGk9IW4mJltdO3JldHVybiByP1t0LmNyZWF0ZUVsZW1lbnQoclsxXSldOihyPXguYnVpbGRGcmFnbWVudChbZV0sdCxpKSxpJiZ4KGkpLnJlbW92ZSgpLHgubWVyZ2UoW10sci5jaGlsZE5vZGVzKSl9LHBhcnNlSlNPTjpKU09OLnBhcnNlLHBhcnNlWE1MOmZ1bmN0aW9uKGUpe3ZhciB0LG47aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0cnl7bj1uZXcgRE9NUGFyc2VyLHQ9bi5wYXJzZUZyb21TdHJpbmcoZSwidGV4dC94bWwiKX1jYXRjaChyKXt0PXVuZGVmaW5lZH1yZXR1cm4oIXR8fHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RoKSYmeC5lcnJvcigiSW52YWxpZCBYTUw6ICIrZSksdH0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihlKXt2YXIgdCxuPWV2YWw7ZT14LnRyaW0oZSksZSYmKDE9PT1lLmluZGV4T2YoInVzZSBzdHJpY3QiKT8odD1vLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLHQudGV4dD1lLG8uaGVhZC5hcHBlbmRDaGlsZCh0KS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpKTpuKGUpKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoaywibXMtIikucmVwbGFjZShOLEUpfSxub2RlTmFtZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9MCxvPWUubGVuZ3RoLHM9aihlKTtpZihuKXtpZihzKXtmb3IoO28+aTtpKyspaWYocj10LmFwcGx5KGVbaV0sbikscj09PSExKWJyZWFrfWVsc2UgZm9yKGkgaW4gZSlpZihyPXQuYXBwbHkoZVtpXSxuKSxyPT09ITEpYnJlYWt9ZWxzZSBpZihzKXtmb3IoO28+aTtpKyspaWYocj10LmNhbGwoZVtpXSxpLGVbaV0pLHI9PT0hMSlicmVha31lbHNlIGZvcihpIGluIGUpaWYocj10LmNhbGwoZVtpXSxpLGVbaV0pLHI9PT0hMSlicmVhaztyZXR1cm4gZX0sdHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjp2LmNhbGwoZSl9LG1ha2VBcnJheTpmdW5jdGlvbihlLHQpe3ZhciBuPXR8fFtdO3JldHVybiBudWxsIT1lJiYoaihPYmplY3QoZSkpP3gubWVyZ2Uobiwic3RyaW5nIj09dHlwZW9mIGU/W2VdOmUpOmguY2FsbChuLGUpKSxufSxpbkFycmF5OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09dD8tMTpnLmNhbGwodCxlLG4pfSxtZXJnZTpmdW5jdGlvbihlLHQpe3ZhciBuPXQubGVuZ3RoLHI9ZS5sZW5ndGgsaT0wO2lmKCJudW1iZXIiPT10eXBlb2Ygbilmb3IoO24+aTtpKyspZVtyKytdPXRbaV07ZWxzZSB3aGlsZSh0W2ldIT09dW5kZWZpbmVkKWVbcisrXT10W2krK107cmV0dXJuIGUubGVuZ3RoPXIsZX0sZ3JlcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT1bXSxvPTAscz1lLmxlbmd0aDtmb3Iobj0hIW47cz5vO28rKylyPSEhdChlW29dLG8pLG4hPT1yJiZpLnB1c2goZVtvXSk7cmV0dXJuIGl9LG1hcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT0wLG89ZS5sZW5ndGgscz1qKGUpLGE9W107aWYocylmb3IoO28+aTtpKyspcj10KGVbaV0saSxuKSxudWxsIT1yJiYoYVthLmxlbmd0aF09cik7ZWxzZSBmb3IoaSBpbiBlKXI9dChlW2ldLGksbiksbnVsbCE9ciYmKGFbYS5sZW5ndGhdPXIpO3JldHVybiBmLmFwcGx5KFtdLGEpfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYobj1lW3RdLHQ9ZSxlPW4pLHguaXNGdW5jdGlvbihlKT8ocj1kLmNhbGwoYXJndW1lbnRzLDIpLGk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0fHx0aGlzLHIuY29uY2F0KGQuY2FsbChhcmd1bWVudHMpKSl9LGkuZ3VpZD1lLmd1aWQ9ZS5ndWlkfHx4Lmd1aWQrKyxpKTp1bmRlZmluZWR9LGFjY2VzczpmdW5jdGlvbihlLHQsbixyLGksbyxzKXt2YXIgYT0wLHU9ZS5sZW5ndGgsbD1udWxsPT1uO2lmKCJvYmplY3QiPT09eC50eXBlKG4pKXtpPSEwO2ZvcihhIGluIG4peC5hY2Nlc3MoZSx0LGEsblthXSwhMCxvLHMpfWVsc2UgaWYociE9PXVuZGVmaW5lZCYmKGk9ITAseC5pc0Z1bmN0aW9uKHIpfHwocz0hMCksbCYmKHM/KHQuY2FsbChlLHIpLHQ9bnVsbCk6KGw9dCx0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbC5jYWxsKHgoZSksbil9KSksdCkpZm9yKDt1PmE7YSsrKXQoZVthXSxuLHM/cjpyLmNhbGwoZVthXSxhLHQoZVthXSxuKSkpO3JldHVybiBpP2U6bD90LmNhbGwoZSk6dT90KGVbMF0sbik6b30sbm93OkRhdGUubm93LHN3YXA6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxzPXt9O2ZvcihvIGluIHQpc1tvXT1lLnN0eWxlW29dLGUuc3R5bGVbb109dFtvXTtpPW4uYXBwbHkoZSxyfHxbXSk7Zm9yKG8gaW4gdCllLnN0eWxlW29dPXNbb107cmV0dXJuIGl9fSkseC5yZWFkeS5wcm9taXNlPWZ1bmN0aW9uKHQpe3JldHVybiBufHwobj14LkRlZmVycmVkKCksImNvbXBsZXRlIj09PW8ucmVhZHlTdGF0ZT9zZXRUaW1lb3V0KHgucmVhZHkpOihvLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLFMsITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsUywhMSkpKSxuLnByb21pc2UodCl9LHguZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe2xbIltvYmplY3QgIit0KyJdIl09dC50b0xvd2VyQ2FzZSgpfSk7ZnVuY3Rpb24gaihlKXt2YXIgdD1lLmxlbmd0aCxuPXgudHlwZShlKTtyZXR1cm4geC5pc1dpbmRvdyhlKT8hMToxPT09ZS5ub2RlVHlwZSYmdD8hMDoiYXJyYXkiPT09bnx8ImZ1bmN0aW9uIiE9PW4mJigwPT09dHx8Im51bWJlciI9PXR5cGVvZiB0JiZ0PjAmJnQtMSBpbiBlKX10PXgobyksZnVuY3Rpb24oZSx1bmRlZmluZWQpe3ZhciB0LG4scixpLG8scyxhLHUsbCxjLHAsZixoLGQsZyxtLHksdj0ic2l6emxlIistbmV3IERhdGUsYj1lLmRvY3VtZW50LHc9MCxUPTAsQz1zdCgpLGs9c3QoKSxOPXN0KCksRT0hMSxTPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10PyhFPSEwLDApOjB9LGo9dHlwZW9mIHVuZGVmaW5lZCxEPTE8PDMxLEE9e30uaGFzT3duUHJvcGVydHksTD1bXSxxPUwucG9wLEg9TC5wdXNoLE89TC5wdXNoLEY9TC5zbGljZSxQPUwuaW5kZXhPZnx8ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPXRoaXMubGVuZ3RoO2Zvcig7bj50O3QrKylpZih0aGlzW3RdPT09ZSlyZXR1cm4gdDtyZXR1cm4tMX0sUj0iY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLE09IltcXHgyMFxcdFxcclxcblxcZl0iLFc9Iig/OlxcXFwufFtcXHctXXxbXlxceDAwLVxceGEwXSkrIiwkPVcucmVwbGFjZSgidyIsIncjIiksQj0iXFxbIitNKyIqKCIrVysiKSIrTSsiKig/OihbKl4kfCF+XT89KSIrTSsiKig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIrJCsiKXwpfCkiK00rIipcXF0iLEk9IjooIitXKyIpKD86XFwoKChbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IitCLnJlcGxhY2UoMyw4KSsiKSopfC4qKVxcKXwpIix6PVJlZ0V4cCgiXiIrTSsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitNKyIrJCIsImciKSxfPVJlZ0V4cCgiXiIrTSsiKiwiK00rIioiKSxYPVJlZ0V4cCgiXiIrTSsiKihbPit+XXwiK00rIikiK00rIioiKSxVPVJlZ0V4cChNKyIqWyt+XSIpLFk9UmVnRXhwKCI9IitNKyIqKFteXFxdJ1wiXSopIitNKyIqXFxdIiwiZyIpLFY9UmVnRXhwKEkpLEc9UmVnRXhwKCJeIiskKyIkIiksSj17SUQ6UmVnRXhwKCJeIygiK1crIikiKSxDTEFTUzpSZWdFeHAoIl5cXC4oIitXKyIpIiksVEFHOlJlZ0V4cCgiXigiK1cucmVwbGFjZSgidyIsIncqIikrIikiKSxBVFRSOlJlZ0V4cCgiXiIrQiksUFNFVURPOlJlZ0V4cCgiXiIrSSksQ0hJTEQ6UmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK00rIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK00rIiooPzooWystXXwpIitNKyIqKFxcZCspfCkpIitNKyIqXFwpfCkiLCJpIiksYm9vbDpSZWdFeHAoIl4oPzoiK1IrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpSZWdFeHAoIl4iK00rIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIrTSsiKigoPzotXFxkKT9cXGQqKSIrTSsiKlxcKXwpKD89W14tXXwkKSIsImkiKX0sUT0vXltee10rXHtccypcW25hdGl2ZSBcdy8sSz0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLFo9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxldD0vXmhcZCQvaSx0dD0vJ3xcXC9nLG50PVJlZ0V4cCgiXFxcXChbXFxkYS1mXXsxLDZ9IitNKyI/fCgiK00rIil8LikiLCJpZyIpLHJ0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0iMHgiK3QtNjU1MzY7cmV0dXJuIHIhPT1yfHxuP3Q6MD5yP1N0cmluZy5mcm9tQ2hhckNvZGUocis2NTUzNik6U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxyPj4xMCw1NjMyMHwxMDIzJnIpfTt0cnl7Ty5hcHBseShMPUYuY2FsbChiLmNoaWxkTm9kZXMpLGIuY2hpbGROb2RlcyksTFtiLmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChpdCl7Tz17YXBwbHk6TC5sZW5ndGg/ZnVuY3Rpb24oZSx0KXtILmFwcGx5KGUsRi5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gb3QoZSx0LHIsaSl7dmFyIG8scyxhLHUsbCxmLGcsbSx4LHc7aWYoKHQ/dC5vd25lckRvY3VtZW50fHx0OmIpIT09cCYmYyh0KSx0PXR8fHAscj1yfHxbXSwhZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiByO2lmKDEhPT0odT10Lm5vZGVUeXBlKSYmOSE9PXUpcmV0dXJuW107aWYoaCYmIWkpe2lmKG89Sy5leGVjKGUpKWlmKGE9b1sxXSl7aWYoOT09PXUpe2lmKHM9dC5nZXRFbGVtZW50QnlJZChhKSwhc3x8IXMucGFyZW50Tm9kZSlyZXR1cm4gcjtpZihzLmlkPT09YSlyZXR1cm4gci5wdXNoKHMpLHJ9ZWxzZSBpZih0Lm93bmVyRG9jdW1lbnQmJihzPXQub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKSkmJnkodCxzKSYmcy5pZD09PWEpcmV0dXJuIHIucHVzaChzKSxyfWVsc2V7aWYob1syXSlyZXR1cm4gTy5hcHBseShyLHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSkpLHI7aWYoKGE9b1szXSkmJm4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBPLmFwcGx5KHIsdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpKSxyfWlmKG4ucXNhJiYoIWR8fCFkLnRlc3QoZSkpKXtpZihtPWc9dix4PXQsdz05PT09dSYmZSwxPT09dSYmIm9iamVjdCIhPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe2Y9Z3QoZSksKGc9dC5nZXRBdHRyaWJ1dGUoImlkIikpP209Zy5yZXBsYWNlKHR0LCJcXCQmIik6dC5zZXRBdHRyaWJ1dGUoImlkIixtKSxtPSJbaWQ9JyIrbSsiJ10gIixsPWYubGVuZ3RoO3doaWxlKGwtLSlmW2xdPW0rbXQoZltsXSk7eD1VLnRlc3QoZSkmJnQucGFyZW50Tm9kZXx8dCx3PWYuam9pbigiLCIpfWlmKHcpdHJ5e3JldHVybiBPLmFwcGx5KHIseC5xdWVyeVNlbGVjdG9yQWxsKHcpKSxyfWNhdGNoKFQpe31maW5hbGx5e2d8fHQucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGt0KGUucmVwbGFjZSh6LCIkMSIpLHQscixpKX1mdW5jdGlvbiBzdCgpe3ZhciBlPVtdO2Z1bmN0aW9uIHQobixyKXtyZXR1cm4gZS5wdXNoKG4rPSIgIik+aS5jYWNoZUxlbmd0aCYmZGVsZXRlIHRbZS5zaGlmdCgpXSx0W25dPXJ9cmV0dXJuIHR9ZnVuY3Rpb24gYXQoZSl7cmV0dXJuIGVbdl09ITAsZX1mdW5jdGlvbiB1dChlKXt2YXIgdD1wLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RyeXtyZXR1cm4hIWUodCl9Y2F0Y2gobil7cmV0dXJuITF9ZmluYWxseXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0PW51bGx9fWZ1bmN0aW9uIGx0KGUsdCl7dmFyIG49ZS5zcGxpdCgifCIpLHI9ZS5sZW5ndGg7d2hpbGUoci0tKWkuYXR0ckhhbmRsZVtuW3JdXT10fWZ1bmN0aW9uIGN0KGUsdCl7dmFyIG49dCYmZSxyPW4mJjE9PT1lLm5vZGVUeXBlJiYxPT09dC5ub2RlVHlwZSYmKH50LnNvdXJjZUluZGV4fHxEKS0ofmUuc291cmNlSW5kZXh8fEQpO2lmKHIpcmV0dXJuIHI7aWYobil3aGlsZShuPW4ubmV4dFNpYmxpbmcpaWYobj09PXQpcmV0dXJuLTE7cmV0dXJuIGU/MTotMX1mdW5jdGlvbiBwdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1uJiZ0LnR5cGU9PT1lfX1mdW5jdGlvbiBmdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybigiaW5wdXQiPT09bnx8ImJ1dHRvbiI9PT1uKSYmdC50eXBlPT09ZX19ZnVuY3Rpb24gaHQoZSl7cmV0dXJuIGF0KGZ1bmN0aW9uKHQpe3JldHVybiB0PSt0LGF0KGZ1bmN0aW9uKG4scil7dmFyIGksbz1lKFtdLG4ubGVuZ3RoLHQpLHM9by5sZW5ndGg7d2hpbGUocy0tKW5baT1vW3NdXSYmKG5baV09IShyW2ldPW5baV0pKX0pfSl9cz1vdC5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1lJiYoZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIHQ/IkhUTUwiIT09dC5ub2RlTmFtZTohMX0sbj1vdC5zdXBwb3J0PXt9LGM9b3Quc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZT9lLm93bmVyRG9jdW1lbnR8fGU6YixyPXQuZGVmYXVsdFZpZXc7cmV0dXJuIHQhPT1wJiY5PT09dC5ub2RlVHlwZSYmdC5kb2N1bWVudEVsZW1lbnQ/KHA9dCxmPXQuZG9jdW1lbnRFbGVtZW50LGg9IXModCksciYmci5hdHRhY2hFdmVudCYmciE9PXIudG9wJiZyLmF0dGFjaEV2ZW50KCJvbmJlZm9yZXVubG9hZCIsZnVuY3Rpb24oKXtjKCl9KSxuLmF0dHJpYnV0ZXM9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NOYW1lPSJpIiwhZS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksbi5nZXRFbGVtZW50c0J5VGFnTmFtZT11dChmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBlbmRDaGlsZCh0LmNyZWF0ZUNvbW1lbnQoIiIpKSwhZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT11dChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J2EnPjwvZGl2PjxkaXYgY2xhc3M9J2EgaSc+PC9kaXY+IixlLmZpcnN0Q2hpbGQuY2xhc3NOYW1lPSJpIiwyPT09ZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJpIikubGVuZ3RofSksbi5nZXRCeUlkPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBmLmFwcGVuZENoaWxkKGUpLmlkPXYsIXQuZ2V0RWxlbWVudHNCeU5hbWV8fCF0LmdldEVsZW1lbnRzQnlOYW1lKHYpLmxlbmd0aH0pLG4uZ2V0QnlJZD8oaS5maW5kLklEPWZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQhPT1qJiZoKXt2YXIgbj10LmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBuJiZuLnBhcmVudE5vZGU/W25dOltdfX0saS5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKG50LHJ0KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJpZCIpPT09dH19KTooZGVsZXRlIGkuZmluZC5JRCxpLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UobnQscnQpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj10eXBlb2YgZS5nZXRBdHRyaWJ1dGVOb2RlIT09aiYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBuJiZuLnZhbHVlPT09dH19KSxpLmZpbmQuVEFHPW4uZ2V0RWxlbWVudHNCeVRhZ05hbWU/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHlwZW9mIHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPT1qP3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk6dW5kZWZpbmVkfTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT0wLG89dC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKTtpZigiKiI9PT1lKXt3aGlsZShuPW9baSsrXSkxPT09bi5ub2RlVHlwZSYmci5wdXNoKG4pO3JldHVybiByfXJldHVybiBvfSxpLmZpbmQuQ0xBU1M9bi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZmdW5jdGlvbihlLHQpe3JldHVybiB0eXBlb2YgdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIT09aiYmaD90LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSk6dW5kZWZpbmVkfSxnPVtdLGQ9W10sKG4ucXNhPVEudGVzdCh0LnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKHV0KGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+IixlLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fGQucHVzaCgiXFxbIitNKyIqKD86dmFsdWV8IitSKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aHx8ZC5wdXNoKCI6Y2hlY2tlZCIpfSksdXQoZnVuY3Rpb24oZSl7dmFyIG49dC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO24uc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZS5hcHBlbmRDaGlsZChuKS5zZXRBdHRyaWJ1dGUoInQiLCIiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0Xj0nJ10iKS5sZW5ndGgmJmQucHVzaCgiWypeJF09IitNKyIqKD86Jyd8XCJcIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxkLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IiksZC5wdXNoKCIsLio6Iil9KSksKG4ubWF0Y2hlc1NlbGVjdG9yPVEudGVzdChtPWYud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxmLm1vek1hdGNoZXNTZWxlY3Rvcnx8Zi5vTWF0Y2hlc1NlbGVjdG9yfHxmLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJnV0KGZ1bmN0aW9uKGUpe24uZGlzY29ubmVjdGVkTWF0Y2g9bS5jYWxsKGUsImRpdiIpLG0uY2FsbChlLCJbcyE9JyddOngiKSxnLnB1c2goIiE9IixJKX0pLGQ9ZC5sZW5ndGgmJlJlZ0V4cChkLmpvaW4oInwiKSksZz1nLmxlbmd0aCYmUmVnRXhwKGcuam9pbigifCIpKSx5PVEudGVzdChmLmNvbnRhaW5zKXx8Zi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHQpe3ZhciBuPTk9PT1lLm5vZGVUeXBlP2UuZG9jdW1lbnRFbGVtZW50OmUscj10JiZ0LnBhcmVudE5vZGU7cmV0dXJuIGU9PT1yfHwhKCFyfHwxIT09ci5ub2RlVHlwZXx8IShuLmNvbnRhaW5zP24uY29udGFpbnMocik6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyKSkpfTpmdW5jdGlvbihlLHQpe2lmKHQpd2hpbGUodD10LnBhcmVudE5vZGUpaWYodD09PWUpcmV0dXJuITA7cmV0dXJuITF9LFM9Zi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHIpe2lmKGU9PT1yKXJldHVybiBFPSEwLDA7dmFyIGk9ci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyKTtyZXR1cm4gaT8xJml8fCFuLnNvcnREZXRhY2hlZCYmci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PWk/ZT09PXR8fHkoYixlKT8tMTpyPT09dHx8eShiLHIpPzE6bD9QLmNhbGwobCxlKS1QLmNhbGwobCxyKTowOjQmaT8tMToxOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24/LTE6MX06ZnVuY3Rpb24oZSxuKXt2YXIgcixpPTAsbz1lLnBhcmVudE5vZGUscz1uLnBhcmVudE5vZGUsYT1bZV0sdT1bbl07aWYoZT09PW4pcmV0dXJuIEU9ITAsMDtpZighb3x8IXMpcmV0dXJuIGU9PT10Py0xOm49PT10PzE6bz8tMTpzPzE6bD9QLmNhbGwobCxlKS1QLmNhbGwobCxuKTowO2lmKG89PT1zKXJldHVybiBjdChlLG4pO3I9ZTt3aGlsZShyPXIucGFyZW50Tm9kZSlhLnVuc2hpZnQocik7cj1uO3doaWxlKHI9ci5wYXJlbnROb2RlKXUudW5zaGlmdChyKTt3aGlsZShhW2ldPT09dVtpXSlpKys7cmV0dXJuIGk/Y3QoYVtpXSx1W2ldKTphW2ldPT09Yj8tMTp1W2ldPT09Yj8xOjB9LHQpOnB9LG90Lm1hdGNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gb3QoZSxudWxsLG51bGwsdCl9LG90Lm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe2lmKChlLm93bmVyRG9jdW1lbnR8fGUpIT09cCYmYyhlKSx0PXQucmVwbGFjZShZLCI9JyQxJ10iKSwhKCFuLm1hdGNoZXNTZWxlY3Rvcnx8IWh8fGcmJmcudGVzdCh0KXx8ZCYmZC50ZXN0KHQpKSl0cnl7dmFyIHI9bS5jYWxsKGUsdCk7aWYocnx8bi5kaXNjb25uZWN0ZWRNYXRjaHx8ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiByfWNhdGNoKGkpe31yZXR1cm4gb3QodCxwLG51bGwsW2VdKS5sZW5ndGg+MH0sb3QuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9PXAmJmMoZSkseShlLHQpfSxvdC5hdHRyPWZ1bmN0aW9uKGUsdCl7KGUub3duZXJEb2N1bWVudHx8ZSkhPT1wJiZjKGUpO3ZhciByPWkuYXR0ckhhbmRsZVt0LnRvTG93ZXJDYXNlKCldLG89ciYmQS5jYWxsKGkuYXR0ckhhbmRsZSx0LnRvTG93ZXJDYXNlKCkpP3IoZSx0LCFoKTp1bmRlZmluZWQ7cmV0dXJuIG89PT11bmRlZmluZWQ/bi5hdHRyaWJ1dGVzfHwhaD9lLmdldEF0dHJpYnV0ZSh0KToobz1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZvLnNwZWNpZmllZD9vLnZhbHVlOm51bGw6b30sb3QuZXJyb3I9ZnVuY3Rpb24oZSl7dGhyb3cgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LG90LnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQscj1bXSxpPTAsbz0wO2lmKEU9IW4uZGV0ZWN0RHVwbGljYXRlcyxsPSFuLnNvcnRTdGFibGUmJmUuc2xpY2UoMCksZS5zb3J0KFMpLEUpe3doaWxlKHQ9ZVtvKytdKXQ9PT1lW29dJiYoaT1yLnB1c2gobykpO3doaWxlKGktLSllLnNwbGljZShyW2ldLDEpfXJldHVybiBlfSxvPW90LmdldFRleHQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj0iIixyPTAsaT1lLm5vZGVUeXBlO2lmKGkpe2lmKDE9PT1pfHw5PT09aXx8MTE9PT1pKXtpZigic3RyaW5nIj09dHlwZW9mIGUudGV4dENvbnRlbnQpcmV0dXJuIGUudGV4dENvbnRlbnQ7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKW4rPW8oZSl9ZWxzZSBpZigzPT09aXx8ND09PWkpcmV0dXJuIGUubm9kZVZhbHVlfWVsc2UgZm9yKDt0PWVbcl07cisrKW4rPW8odCk7cmV0dXJuIG59LGk9b3Quc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86YXQsbWF0Y2g6SixhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKG50LHJ0KSxlWzNdPShlWzRdfHxlWzVdfHwiIikucmVwbGFjZShudCxydCksIn49Ij09PWVbMl0mJihlWzNdPSIgIitlWzNdKyIgIiksZS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnRvTG93ZXJDYXNlKCksIm50aCI9PT1lWzFdLnNsaWNlKDAsMyk/KGVbM118fG90LmVycm9yKGVbMF0pLGVbNF09KyhlWzRdP2VbNV0rKGVbNl18fDEpOjIqKCJldmVuIj09PWVbM118fCJvZGQiPT09ZVszXSkpLGVbNV09KyhlWzddK2VbOF18fCJvZGQiPT09ZVszXSkpOmVbM10mJm90LmVycm9yKGVbMF0pLGV9LFBTRVVETzpmdW5jdGlvbihlKXt2YXIgdCxuPSFlWzVdJiZlWzJdO3JldHVybiBKLkNISUxELnRlc3QoZVswXSk/bnVsbDooZVszXSYmZVs0XSE9PXVuZGVmaW5lZD9lWzJdPWVbNF06biYmVi50ZXN0KG4pJiYodD1ndChuLCEwKSkmJih0PW4uaW5kZXhPZigiKSIsbi5sZW5ndGgtdCktbi5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsdCksZVsyXT1uLnNsaWNlKDAsdCkpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UobnQscnQpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09ZT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dH19LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PUNbZSsiICJdO3JldHVybiB0fHwodD1SZWdFeHAoIihefCIrTSsiKSIrZSsiKCIrTSsifCQpIikpJiZDKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQudGVzdCgic3RyaW5nIj09dHlwZW9mIGUuY2xhc3NOYW1lJiZlLmNsYXNzTmFtZXx8dHlwZW9mIGUuZ2V0QXR0cmlidXRlIT09aiYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9b3QuYXR0cihyLGUpO3JldHVybiBudWxsPT1pPyIhPSI9PT10OnQ/KGkrPSIiLCI9Ij09PXQ/aT09PW46IiE9Ij09PXQ/aSE9PW46Il49Ij09PXQ/biYmMD09PWkuaW5kZXhPZihuKToiKj0iPT09dD9uJiZpLmluZGV4T2Yobik+LTE6IiQ9Ij09PXQ/biYmaS5zbGljZSgtbi5sZW5ndGgpPT09bjoifj0iPT09dD8oIiAiK2krIiAiKS5pbmRleE9mKG4pPi0xOiJ8PSI9PT10P2k9PT1ufHxpLnNsaWNlKDAsbi5sZW5ndGgrMSk9PT1uKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPSJudGgiIT09ZS5zbGljZSgwLDMpLHM9Imxhc3QiIT09ZS5zbGljZSgtNCksYT0ib2YtdHlwZSI9PT10O3JldHVybiAxPT09ciYmMD09PWk/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKHQsbix1KXt2YXIgbCxjLHAsZixoLGQsZz1vIT09cz8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLG09dC5wYXJlbnROb2RlLHk9YSYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHg9IXUmJiFhO2lmKG0pe2lmKG8pe3doaWxlKGcpe3A9dDt3aGlsZShwPXBbZ10paWYoYT9wLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT15OjE9PT1wLm5vZGVUeXBlKXJldHVybiExO2Q9Zz0ib25seSI9PT1lJiYhZCYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZihkPVtzP20uZmlyc3RDaGlsZDptLmxhc3RDaGlsZF0scyYmeCl7Yz1tW3ZdfHwobVt2XT17fSksbD1jW2VdfHxbXSxoPWxbMF09PT13JiZsWzFdLGY9bFswXT09PXcmJmxbMl0scD1oJiZtLmNoaWxkTm9kZXNbaF07d2hpbGUocD0rK2gmJnAmJnBbZ118fChmPWg9MCl8fGQucG9wKCkpaWYoMT09PXAubm9kZVR5cGUmJisrZiYmcD09PXQpe2NbZV09W3csaCxmXTticmVha319ZWxzZSBpZih4JiYobD0odFt2XXx8KHRbdl09e30pKVtlXSkmJmxbMF09PT13KWY9bFsxXTtlbHNlIHdoaWxlKHA9KytoJiZwJiZwW2ddfHwoZj1oPTApfHxkLnBvcCgpKWlmKChhP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXk6MT09PXAubm9kZVR5cGUpJiYrK2YmJih4JiYoKHBbdl18fChwW3ZdPXt9KSlbZV09W3csZl0pLHA9PT10KSlicmVhaztyZXR1cm4gZi09aSxmPT09cnx8MD09PWYlciYmZi9yPj0wfX19LFBTRVVETzpmdW5jdGlvbihlLHQpe3ZhciBuLHI9aS5wc2V1ZG9zW2VdfHxpLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXXx8b3QuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIitlKTtyZXR1cm4gclt2XT9yKHQpOnIubGVuZ3RoPjE/KG49W2UsZSwiIix0XSxpLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT9hdChmdW5jdGlvbihlLG4pe3ZhciBpLG89cihlLHQpLHM9by5sZW5ndGg7d2hpbGUocy0tKWk9UC5jYWxsKGUsb1tzXSksZVtpXT0hKG5baV09b1tzXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gcihlLDAsbil9KTpyfX0scHNldWRvczp7bm90OmF0KGZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W10scj1hKGUucmVwbGFjZSh6LCIkMSIpKTtyZXR1cm4gclt2XT9hdChmdW5jdGlvbihlLHQsbixpKXt2YXIgbyxzPXIoZSxudWxsLGksW10pLGE9ZS5sZW5ndGg7d2hpbGUoYS0tKShvPXNbYV0pJiYoZVthXT0hKHRbYV09bykpfSk6ZnVuY3Rpb24oZSxpLG8pe3JldHVybiB0WzBdPWUscih0LG51bGwsbyxuKSwhbi5wb3AoKX19KSxoYXM6YXQoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBvdChlLHQpLmxlbmd0aD4wfX0pLGNvbnRhaW5zOmF0KGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4odC50ZXh0Q29udGVudHx8dC5pbm5lclRleHR8fG8odCkpLmluZGV4T2YoZSk+LTF9fSksbGFuZzphdChmdW5jdGlvbihlKXtyZXR1cm4gRy50ZXN0KGV8fCIiKXx8b3QuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6ICIrZSksZT1lLnJlcGxhY2UobnQscnQpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24odCl7dmFyIG47ZG8gaWYobj1oP3QubGFuZzp0LmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8dC5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4gbj1uLnRvTG93ZXJDYXNlKCksbj09PWV8fDA9PT1uLmluZGV4T2YoZSsiLSIpO3doaWxlKCh0PXQucGFyZW50Tm9kZSkmJjE9PT10Lm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24odCl7dmFyIG49ZS5sb2NhdGlvbiYmZS5sb2NhdGlvbi5oYXNoO3JldHVybiBuJiZuLnNsaWNlKDEpPT09dC5pZH0scm9vdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PWZ9LGZvY3VzOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09cC5hY3RpdmVFbGVtZW50JiYoIXAuaGFzRm9jdXN8fHAuaGFzRm9jdXMoKSkmJiEhKGUudHlwZXx8ZS5ocmVmfHx+ZS50YWJJbmRleCl9LGVuYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMX0sZGlzYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsZS5zZWxlY3RlZD09PSEwfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlTmFtZT4iQCJ8fDM9PT1lLm5vZGVUeXBlfHw0PT09ZS5ub2RlVHlwZSlyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiFpLnBzZXVkb3MuZW1wdHkoZSl9LGhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZXQudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFoudGVzdChlLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmImJ1dHRvbiI9PT1lLnR5cGV8fCJidXR0b24iPT09dH0sdGV4dDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4iaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1lLnR5cGUmJihudWxsPT0odD1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8dC50b0xvd2VyQ2FzZSgpPT09ZS50eXBlKX0sZmlyc3Q6aHQoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0Omh0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuW3QtMV19KSxlcTpodChmdW5jdGlvbihlLHQsbil7cmV0dXJuWzA+bj9uK3Q6bl19KSxldmVuOmh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49MDtmb3IoO3Q+bjtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDpodChmdW5jdGlvbihlLHQpe3ZhciBuPTE7Zm9yKDt0Pm47bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxsdDpodChmdW5jdGlvbihlLHQsbil7dmFyIHI9MD5uP24rdDpuO2Zvcig7LS1yPj0wOyllLnB1c2gocik7cmV0dXJuIGV9KSxndDpodChmdW5jdGlvbihlLHQsbil7dmFyIHI9MD5uP24rdDpuO2Zvcig7dD4rK3I7KWUucHVzaChyKTtyZXR1cm4gZX0pfX0saS5wc2V1ZG9zLm50aD1pLnBzZXVkb3MuZXE7Zm9yKHQgaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0paS5wc2V1ZG9zW3RdPXB0KHQpO2Zvcih0IGlue3N1Ym1pdDohMCxyZXNldDohMH0paS5wc2V1ZG9zW3RdPWZ0KHQpO2Z1bmN0aW9uIGR0KCl7fWR0LnByb3RvdHlwZT1pLmZpbHRlcnM9aS5wc2V1ZG9zLGkuc2V0RmlsdGVycz1uZXcgZHQ7ZnVuY3Rpb24gZ3QoZSx0KXt2YXIgbixyLG8scyxhLHUsbCxjPWtbZSsiICJdO2lmKGMpcmV0dXJuIHQ/MDpjLnNsaWNlKDApO2E9ZSx1PVtdLGw9aS5wcmVGaWx0ZXI7d2hpbGUoYSl7KCFufHwocj1fLmV4ZWMoYSkpKSYmKHImJihhPWEuc2xpY2UoclswXS5sZW5ndGgpfHxhKSx1LnB1c2gobz1bXSkpLG49ITEsKHI9WC5leGVjKGEpKSYmKG49ci5zaGlmdCgpLG8ucHVzaCh7dmFsdWU6bix0eXBlOnJbMF0ucmVwbGFjZSh6LCIgIil9KSxhPWEuc2xpY2Uobi5sZW5ndGgpKTtmb3IocyBpbiBpLmZpbHRlcikhKHI9SltzXS5leGVjKGEpKXx8bFtzXSYmIShyPWxbc10ocikpfHwobj1yLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpuLHR5cGU6cyxtYXRjaGVzOnJ9KSxhPWEuc2xpY2Uobi5sZW5ndGgpKTtpZighbilicmVha31yZXR1cm4gdD9hLmxlbmd0aDphP290LmVycm9yKGUpOmsoZSx1KS5zbGljZSgwKX1mdW5jdGlvbiBtdChlKXt2YXIgdD0wLG49ZS5sZW5ndGgscj0iIjtmb3IoO24+dDt0Kyspcis9ZVt0XS52YWx1ZTtyZXR1cm4gcn1mdW5jdGlvbiB5dChlLHQsbil7dmFyIGk9dC5kaXIsbz1uJiYicGFyZW50Tm9kZSI9PT1pLHM9VCsrO3JldHVybiB0LmZpcnN0P2Z1bmN0aW9uKHQsbixyKXt3aGlsZSh0PXRbaV0paWYoMT09PXQubm9kZVR5cGV8fG8pcmV0dXJuIGUodCxuLHIpfTpmdW5jdGlvbih0LG4sYSl7dmFyIHUsbCxjLHA9dysiICIrcztpZihhKXt3aGlsZSh0PXRbaV0paWYoKDE9PT10Lm5vZGVUeXBlfHxvKSYmZSh0LG4sYSkpcmV0dXJuITB9ZWxzZSB3aGlsZSh0PXRbaV0paWYoMT09PXQubm9kZVR5cGV8fG8paWYoYz10W3ZdfHwodFt2XT17fSksKGw9Y1tpXSkmJmxbMF09PT1wKXtpZigodT1sWzFdKT09PSEwfHx1PT09cilyZXR1cm4gdT09PSEwfWVsc2UgaWYobD1jW2ldPVtwXSxsWzFdPWUodCxuLGEpfHxyLGxbMV09PT0hMClyZXR1cm4hMH19ZnVuY3Rpb24gdnQoZSl7cmV0dXJuIGUubGVuZ3RoPjE/ZnVuY3Rpb24odCxuLHIpe3ZhciBpPWUubGVuZ3RoO3doaWxlKGktLSlpZighZVtpXSh0LG4scikpcmV0dXJuITE7cmV0dXJuITB9OmVbMF19ZnVuY3Rpb24geHQoZSx0LG4scixpKXt2YXIgbyxzPVtdLGE9MCx1PWUubGVuZ3RoLGw9bnVsbCE9dDtmb3IoO3U+YTthKyspKG89ZVthXSkmJighbnx8bihvLHIsaSkpJiYocy5wdXNoKG8pLGwmJnQucHVzaChhKSk7cmV0dXJuIHN9ZnVuY3Rpb24gYnQoZSx0LG4scixpLG8pe3JldHVybiByJiYhclt2XSYmKHI9YnQocikpLGkmJiFpW3ZdJiYoaT1idChpLG8pKSxhdChmdW5jdGlvbihvLHMsYSx1KXt2YXIgbCxjLHAsZj1bXSxoPVtdLGQ9cy5sZW5ndGgsZz1vfHxDdCh0fHwiKiIsYS5ub2RlVHlwZT9bYV06YSxbXSksbT0hZXx8IW8mJnQ/Zzp4dChnLGYsZSxhLHUpLHk9bj9pfHwobz9lOmR8fHIpP1tdOnM6bTtpZihuJiZuKG0seSxhLHUpLHIpe2w9eHQoeSxoKSxyKGwsW10sYSx1KSxjPWwubGVuZ3RoO3doaWxlKGMtLSkocD1sW2NdKSYmKHlbaFtjXV09IShtW2hbY11dPXApKX1pZihvKXtpZihpfHxlKXtpZihpKXtsPVtdLGM9eS5sZW5ndGg7d2hpbGUoYy0tKShwPXlbY10pJiZsLnB1c2gobVtjXT1wKTtpKG51bGwseT1bXSxsLHUpfWM9eS5sZW5ndGg7d2hpbGUoYy0tKShwPXlbY10pJiYobD1pP1AuY2FsbChvLHApOmZbY10pPi0xJiYob1tsXT0hKHNbbF09cCkpfX1lbHNlIHk9eHQoeT09PXM/eS5zcGxpY2UoZCx5Lmxlbmd0aCk6eSksaT9pKG51bGwscyx5LHUpOk8uYXBwbHkocyx5KX0pfWZ1bmN0aW9uIHd0KGUpe3ZhciB0LG4scixvPWUubGVuZ3RoLHM9aS5yZWxhdGl2ZVtlWzBdLnR5cGVdLGE9c3x8aS5yZWxhdGl2ZVsiICJdLGw9cz8xOjAsYz15dChmdW5jdGlvbihlKXtyZXR1cm4gZT09PXR9LGEsITApLHA9eXQoZnVuY3Rpb24oZSl7cmV0dXJuIFAuY2FsbCh0LGUpPi0xfSxhLCEwKSxmPVtmdW5jdGlvbihlLG4scil7cmV0dXJuIXMmJihyfHxuIT09dSl8fCgodD1uKS5ub2RlVHlwZT9jKGUsbixyKTpwKGUsbixyKSl9XTtmb3IoO28+bDtsKyspaWYobj1pLnJlbGF0aXZlW2VbbF0udHlwZV0pZj1beXQodnQoZiksbildO2Vsc2V7aWYobj1pLmZpbHRlcltlW2xdLnR5cGVdLmFwcGx5KG51bGwsZVtsXS5tYXRjaGVzKSxuW3ZdKXtmb3Iocj0rK2w7bz5yO3IrKylpZihpLnJlbGF0aXZlW2Vbcl0udHlwZV0pYnJlYWs7cmV0dXJuIGJ0KGw+MSYmdnQoZiksbD4xJiZtdChlLnNsaWNlKDAsbC0xKS5jb25jYXQoe3ZhbHVlOiIgIj09PWVbbC0yXS50eXBlPyIqIjoiIn0pKS5yZXBsYWNlKHosIiQxIiksbixyPmwmJnd0KGUuc2xpY2UobCxyKSksbz5yJiZ3dChlPWUuc2xpY2UocikpLG8+ciYmbXQoZSkpfWYucHVzaChuKX1yZXR1cm4gdnQoZil9ZnVuY3Rpb24gVHQoZSx0KXt2YXIgbj0wLG89dC5sZW5ndGg+MCxzPWUubGVuZ3RoPjAsYT1mdW5jdGlvbihhLGwsYyxmLGgpe3ZhciBkLGcsbSx5PVtdLHY9MCx4PSIwIixiPWEmJltdLFQ9bnVsbCE9aCxDPXUsaz1hfHxzJiZpLmZpbmQuVEFHKCIqIixoJiZsLnBhcmVudE5vZGV8fGwpLE49dys9bnVsbD09Qz8xOk1hdGgucmFuZG9tKCl8fC4xO2ZvcihUJiYodT1sIT09cCYmbCxyPW4pO251bGwhPShkPWtbeF0pO3grKyl7aWYocyYmZCl7Zz0wO3doaWxlKG09ZVtnKytdKWlmKG0oZCxsLGMpKXtmLnB1c2goZCk7YnJlYWt9VCYmKHc9TixyPSsrbil9byYmKChkPSFtJiZkKSYmdi0tLGEmJmIucHVzaChkKSl9aWYodis9eCxvJiZ4IT09dil7Zz0wO3doaWxlKG09dFtnKytdKW0oYix5LGwsYyk7aWYoYSl7aWYodj4wKXdoaWxlKHgtLSliW3hdfHx5W3hdfHwoeVt4XT1xLmNhbGwoZikpO3k9eHQoeSl9Ty5hcHBseShmLHkpLFQmJiFhJiZ5Lmxlbmd0aD4wJiZ2K3QubGVuZ3RoPjEmJm90LnVuaXF1ZVNvcnQoZil9cmV0dXJuIFQmJih3PU4sdT1DKSxifTtyZXR1cm4gbz9hdChhKTphfWE9b3QuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1bXSxvPU5bZSsiICJdO2lmKCFvKXt0fHwodD1ndChlKSksbj10Lmxlbmd0aDt3aGlsZShuLS0pbz13dCh0W25dKSxvW3ZdP3IucHVzaChvKTppLnB1c2gobyk7bz1OKGUsVHQoaSxyKSl9cmV0dXJuIG99O2Z1bmN0aW9uIEN0KGUsdCxuKXt2YXIgcj0wLGk9dC5sZW5ndGg7Zm9yKDtpPnI7cisrKW90KGUsdFtyXSxuKTtyZXR1cm4gbn1mdW5jdGlvbiBrdChlLHQscixvKXt2YXIgcyx1LGwsYyxwLGY9Z3QoZSk7aWYoIW8mJjE9PT1mLmxlbmd0aCl7aWYodT1mWzBdPWZbMF0uc2xpY2UoMCksdS5sZW5ndGg+MiYmIklEIj09PShsPXVbMF0pLnR5cGUmJm4uZ2V0QnlJZCYmOT09PXQubm9kZVR5cGUmJmgmJmkucmVsYXRpdmVbdVsxXS50eXBlXSl7aWYodD0oaS5maW5kLklEKGwubWF0Y2hlc1swXS5yZXBsYWNlKG50LHJ0KSx0KXx8W10pWzBdLCF0KXJldHVybiByO2U9ZS5zbGljZSh1LnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1zPUoubmVlZHNDb250ZXh0LnRlc3QoZSk/MDp1Lmxlbmd0aDt3aGlsZShzLS0pe2lmKGw9dVtzXSxpLnJlbGF0aXZlW2M9bC50eXBlXSlicmVhaztpZigocD1pLmZpbmRbY10pJiYobz1wKGwubWF0Y2hlc1swXS5yZXBsYWNlKG50LHJ0KSxVLnRlc3QodVswXS50eXBlKSYmdC5wYXJlbnROb2RlfHx0KSkpe2lmKHUuc3BsaWNlKHMsMSksZT1vLmxlbmd0aCYmbXQodSksIWUpcmV0dXJuIE8uYXBwbHkocixvKSxyO2JyZWFrfX19cmV0dXJuIGEoZSxmKShvLHQsIWgscixVLnRlc3QoZSkpLHJ9bi5zb3J0U3RhYmxlPXYuc3BsaXQoIiIpLnNvcnQoUykuam9pbigiIik9PT12LG4uZGV0ZWN0RHVwbGljYXRlcz1FLGMoKSxuLnNvcnREZXRhY2hlZD11dChmdW5jdGlvbihlKXtyZXR1cm4gMSZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHAuY3JlYXRlRWxlbWVudCgiZGl2IikpfSksdXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+IiwiIyI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIil9KXx8bHQoInR5cGV8aHJlZnxoZWlnaHR8d2lkdGgiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj91bmRlZmluZWQ6ZS5nZXRBdHRyaWJ1dGUodCwidHlwZSI9PT10LnRvTG93ZXJDYXNlKCk/MToyKX0pLG4uYXR0cmlidXRlcyYmdXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8aW5wdXQvPiIsZS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSwiIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoInZhbHVlIil9KXx8bHQoInZhbHVlIixmdW5jdGlvbihlLHQsbil7cmV0dXJuIG58fCJpbnB1dCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/dW5kZWZpbmVkOmUuZGVmYXVsdFZhbHVlfSksdXQoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpfSl8fGx0KFIsZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiBuP3VuZGVmaW5lZDoocj1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZyLnNwZWNpZmllZD9yLnZhbHVlOmVbdF09PT0hMD90LnRvTG93ZXJDYXNlKCk6bnVsbH0pLHguZmluZD1vdCx4LmV4cHI9b3Quc2VsZWN0b3JzLHguZXhwclsiOiJdPXguZXhwci5wc2V1ZG9zLHgudW5pcXVlPW90LnVuaXF1ZVNvcnQseC50ZXh0PW90LmdldFRleHQseC5pc1hNTERvYz1vdC5pc1hNTCx4LmNvbnRhaW5zPW90LmNvbnRhaW5zfShlKTt2YXIgRD17fTtmdW5jdGlvbiBBKGUpe3ZhciB0PURbZV09e307cmV0dXJuIHguZWFjaChlLm1hdGNoKHcpfHxbXSxmdW5jdGlvbihlLG4pe3Rbbl09ITB9KSx0fXguQ2FsbGJhY2tzPWZ1bmN0aW9uKGUpe2U9InN0cmluZyI9PXR5cGVvZiBlP0RbZV18fEEoZSk6eC5leHRlbmQoe30sZSk7dmFyIHQsbixyLGksbyxzLGE9W10sdT0hZS5vbmNlJiZbXSxsPWZ1bmN0aW9uKHApe2Zvcih0PWUubWVtb3J5JiZwLG49ITAscz1pfHwwLGk9MCxvPWEubGVuZ3RoLHI9ITA7YSYmbz5zO3MrKylpZihhW3NdLmFwcGx5KHBbMF0scFsxXSk9PT0hMSYmZS5zdG9wT25GYWxzZSl7dD0hMTticmVha31yPSExLGEmJih1P3UubGVuZ3RoJiZsKHUuc2hpZnQoKSk6dD9hPVtdOmMuZGlzYWJsZSgpKX0sYz17YWRkOmZ1bmN0aW9uKCl7aWYoYSl7dmFyIG49YS5sZW5ndGg7KGZ1bmN0aW9uIHModCl7eC5lYWNoKHQsZnVuY3Rpb24odCxuKXt2YXIgcj14LnR5cGUobik7ImZ1bmN0aW9uIj09PXI/ZS51bmlxdWUmJmMuaGFzKG4pfHxhLnB1c2gobik6biYmbi5sZW5ndGgmJiJzdHJpbmciIT09ciYmcyhuKX0pfSkoYXJndW1lbnRzKSxyP289YS5sZW5ndGg6dCYmKGk9bixsKHQpKX1yZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIGEmJnguZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oZSx0KXt2YXIgbjt3aGlsZSgobj14LmluQXJyYXkodCxhLG4pKT4tMSlhLnNwbGljZShuLDEpLHImJihvPj1uJiZvLS0scz49biYmcy0tKX0pLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZT94LmluQXJyYXkoZSxhKT4tMTohKCFhfHwhYS5sZW5ndGgpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBhPVtdLG89MCx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9dT10PXVuZGVmaW5lZCx0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFhfSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIHU9dW5kZWZpbmVkLHR8fGMuZGlzYWJsZSgpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiF1fSxmaXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiFhfHxuJiYhdXx8KHQ9dHx8W10sdD1bZSx0LnNsaWNlP3Quc2xpY2UoKTp0XSxyP3UucHVzaCh0KTpsKHQpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGMuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFufX07cmV0dXJuIGN9LHguZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihlKXt2YXIgdD1bWyJyZXNvbHZlIiwiZG9uZSIseC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIix4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVqZWN0ZWQiXSxbIm5vdGlmeSIsInByb2dyZXNzIix4LkNhbGxiYWNrcygibWVtb3J5IildXSxuPSJwZW5kaW5nIixyPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBufSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LHRoZW46ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7cmV0dXJuIHguRGVmZXJyZWQoZnVuY3Rpb24obil7eC5lYWNoKHQsZnVuY3Rpb24odCxvKXt2YXIgcz1vWzBdLGE9eC5pc0Z1bmN0aW9uKGVbdF0pJiZlW3RdO2lbb1sxXV0oZnVuY3Rpb24oKXt2YXIgZT1hJiZhLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlJiZ4LmlzRnVuY3Rpb24oZS5wcm9taXNlKT9lLnByb21pc2UoKS5kb25lKG4ucmVzb2x2ZSkuZmFpbChuLnJlamVjdCkucHJvZ3Jlc3Mobi5ub3RpZnkpOm5bcysiV2l0aCJdKHRoaXM9PT1yP24ucHJvbWlzZSgpOnRoaXMsYT9bZV06YXJndW1lbnRzKX0pfSksZT1udWxsfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lP3guZXh0ZW5kKGUscik6cn19LGk9e307cmV0dXJuIHIucGlwZT1yLnRoZW4seC5lYWNoKHQsZnVuY3Rpb24oZSxvKXt2YXIgcz1vWzJdLGE9b1szXTtyW29bMV1dPXMuYWRkLGEmJnMuYWRkKGZ1bmN0aW9uKCl7bj1hfSx0WzFeZV1bMl0uZGlzYWJsZSx0WzJdWzJdLmxvY2spLGlbb1swXV09ZnVuY3Rpb24oKXtyZXR1cm4gaVtvWzBdKyJXaXRoIl0odGhpcz09PWk/cjp0aGlzLGFyZ3VtZW50cyksdGhpc30saVtvWzBdKyJXaXRoIl09cy5maXJlV2l0aH0pLHIucHJvbWlzZShpKSxlJiZlLmNhbGwoaSxpKSxpfSx3aGVuOmZ1bmN0aW9uKGUpe3ZhciB0PTAsbj1kLmNhbGwoYXJndW1lbnRzKSxyPW4ubGVuZ3RoLGk9MSE9PXJ8fGUmJnguaXNGdW5jdGlvbihlLnByb21pc2UpP3I6MCxvPTE9PT1pP2U6eC5EZWZlcnJlZCgpLHM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt0W2VdPXRoaXMsbltlXT1hcmd1bWVudHMubGVuZ3RoPjE/ZC5jYWxsKGFyZ3VtZW50cyk6cixuPT09YT9vLm5vdGlmeVdpdGgodCxuKTotLWl8fG8ucmVzb2x2ZVdpdGgodCxuKX19LGEsdSxsO2lmKHI+MSlmb3IoYT1BcnJheShyKSx1PUFycmF5KHIpLGw9QXJyYXkocik7cj50O3QrKyluW3RdJiZ4LmlzRnVuY3Rpb24oblt0XS5wcm9taXNlKT9uW3RdLnByb21pc2UoKS5kb25lKHModCxsLG4pKS5mYWlsKG8ucmVqZWN0KS5wcm9ncmVzcyhzKHQsdSxhKSk6LS1pO3JldHVybiBpfHxvLnJlc29sdmVXaXRoKGwsbiksby5wcm9taXNlKCl9fSkseC5zdXBwb3J0PWZ1bmN0aW9uKHQpe3ZhciBuPW8uY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxyPW8uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGk9by5jcmVhdGVFbGVtZW50KCJkaXYiKSxzPW8uY3JlYXRlRWxlbWVudCgic2VsZWN0IiksYT1zLmFwcGVuZENoaWxkKG8uY3JlYXRlRWxlbWVudCgib3B0aW9uIikpO3JldHVybiBuLnR5cGU/KG4udHlwZT0iY2hlY2tib3giLHQuY2hlY2tPbj0iIiE9PW4udmFsdWUsdC5vcHRTZWxlY3RlZD1hLnNlbGVjdGVkLHQucmVsaWFibGVNYXJnaW5SaWdodD0hMCx0LmJveFNpemluZ1JlbGlhYmxlPSEwLHQucGl4ZWxQb3NpdGlvbj0hMSxuLmNoZWNrZWQ9ITAsdC5ub0Nsb25lQ2hlY2tlZD1uLmNsb25lTm9kZSghMCkuY2hlY2tlZCxzLmRpc2FibGVkPSEwLHQub3B0RGlzYWJsZWQ9IWEuZGlzYWJsZWQsbj1vLmNyZWF0ZUVsZW1lbnQoImlucHV0Iiksbi52YWx1ZT0idCIsbi50eXBlPSJyYWRpbyIsdC5yYWRpb1ZhbHVlPSJ0Ij09PW4udmFsdWUsbi5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJ0Iiksbi5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0Iiksci5hcHBlbmRDaGlsZChuKSx0LmNoZWNrQ2xvbmU9ci5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsdC5mb2N1c2luQnViYmxlcz0ib25mb2N1c2luImluIGUsaS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iY29udGVudC1ib3giLGkuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIix0LmNsZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09aS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCx4KGZ1bmN0aW9uKCl7dmFyIG4scixzPSJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpibG9jazstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3giLGE9by5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO2EmJihuPW8uY3JlYXRlRWxlbWVudCgiZGl2Iiksbi5zdHlsZS5jc3NUZXh0PSJib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6LTk5OTlweDttYXJnaW4tdG9wOjFweCIsYS5hcHBlbmRDaGlsZChuKS5hcHBlbmRDaGlsZChpKSxpLmlubmVySFRNTD0iIixpLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjFweDtib3JkZXI6MXB4O2Rpc3BsYXk6YmxvY2s7d2lkdGg6NHB4O21hcmdpbi10b3A6MSU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjElIix4LnN3YXAoYSxudWxsIT1hLnN0eWxlLnpvb20/e3pvb206MX06e30sZnVuY3Rpb24oKXt0LmJveFNpemluZz00PT09aS5vZmZzZXRXaWR0aH0pLGUuZ2V0Q29tcHV0ZWRTdHlsZSYmKHQucGl4ZWxQb3NpdGlvbj0iMSUiIT09KGUuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpfHx7fSkudG9wLHQuYm94U2l6aW5nUmVsaWFibGU9IjRweCI9PT0oZS5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCl8fHt3aWR0aDoiNHB4In0pLndpZHRoLHI9aS5hcHBlbmRDaGlsZChvLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxyLnN0eWxlLmNzc1RleHQ9aS5zdHlsZS5jc3NUZXh0PXMsci5zdHlsZS5tYXJnaW5SaWdodD1yLnN0eWxlLndpZHRoPSIwIixpLnN0eWxlLndpZHRoPSIxcHgiLHQucmVsaWFibGVNYXJnaW5SaWdodD0hcGFyc2VGbG9hdCgoZS5nZXRDb21wdXRlZFN0eWxlKHIsbnVsbCl8fHt9KS5tYXJnaW5SaWdodCkpLGEucmVtb3ZlQ2hpbGQobikpfSksdCk6dH0oe30pO3ZhciBMLHEsSD0vKD86XHtbXHNcU10qXH18XFtbXHNcU10qXF0pJC8sTz0vKFtBLVpdKS9nO2Z1bmN0aW9uIEYoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5jYWNoZT17fSwwLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19KSx0aGlzLmV4cGFuZG89eC5leHBhbmRvK01hdGgucmFuZG9tKCl9Ri51aWQ9MSxGLmFjY2VwdHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZVR5cGU/MT09PWUubm9kZVR5cGV8fDk9PT1lLm5vZGVUeXBlOiEwfSxGLnByb3RvdHlwZT17a2V5OmZ1bmN0aW9uKGUpe2lmKCFGLmFjY2VwdHMoZSkpcmV0dXJuIDA7dmFyIHQ9e30sbj1lW3RoaXMuZXhwYW5kb107aWYoIW4pe249Ri51aWQrKzt0cnl7dFt0aGlzLmV4cGFuZG9dPXt2YWx1ZTpufSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHQpfWNhdGNoKHIpe3RbdGhpcy5leHBhbmRvXT1uLHguZXh0ZW5kKGUsdCl9fXJldHVybiB0aGlzLmNhY2hlW25dfHwodGhpcy5jYWNoZVtuXT17fSksbn0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMua2V5KGUpLG89dGhpcy5jYWNoZVtpXTtpZigic3RyaW5nIj09dHlwZW9mIHQpb1t0XT1uO2Vsc2UgaWYoeC5pc0VtcHR5T2JqZWN0KG8pKXguZXh0ZW5kKHRoaXMuY2FjaGVbaV0sdCk7ZWxzZSBmb3IociBpbiB0KW9bcl09dFtyXTtyZXR1cm4gb30sZ2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jYWNoZVt0aGlzLmtleShlKV07cmV0dXJuIHQ9PT11bmRlZmluZWQ/bjpuW3RdfSxhY2Nlc3M6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiB0PT09dW5kZWZpbmVkfHx0JiYic3RyaW5nIj09dHlwZW9mIHQmJm49PT11bmRlZmluZWQ/KHI9dGhpcy5nZXQoZSx0KSxyIT09dW5kZWZpbmVkP3I6dGhpcy5nZXQoZSx4LmNhbWVsQ2FzZSh0KSkpOih0aGlzLnNldChlLHQsbiksbiE9PXVuZGVmaW5lZD9uOnQpfSxyZW1vdmU6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbz10aGlzLmtleShlKSxzPXRoaXMuY2FjaGVbb107aWYodD09PXVuZGVmaW5lZCl0aGlzLmNhY2hlW29dPXt9O2Vsc2V7eC5pc0FycmF5KHQpP3I9dC5jb25jYXQodC5tYXAoeC5jYW1lbENhc2UpKTooaT14LmNhbWVsQ2FzZSh0KSx0IGluIHM/cj1bdCxpXToocj1pLHI9ciBpbiBzP1tyXTpyLm1hdGNoKHcpfHxbXSkpLG49ci5sZW5ndGg7d2hpbGUobi0tKWRlbGV0ZSBzW3Jbbl1dfX0saGFzRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4heC5pc0VtcHR5T2JqZWN0KHRoaXMuY2FjaGVbZVt0aGlzLmV4cGFuZG9dXXx8e30pfSxkaXNjYXJkOmZ1bmN0aW9uKGUpe2VbdGhpcy5leHBhbmRvXSYmZGVsZXRlIHRoaXMuY2FjaGVbZVt0aGlzLmV4cGFuZG9dXX19LEw9bmV3IEYscT1uZXcgRix4LmV4dGVuZCh7YWNjZXB0RGF0YTpGLmFjY2VwdHMsaGFzRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gTC5oYXNEYXRhKGUpfHxxLmhhc0RhdGEoZSl9LGRhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBMLmFjY2VzcyhlLHQsbil9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSx0KXtMLnJlbW92ZShlLHQpfSxfZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHEuYWNjZXNzKGUsdCxuKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oZSx0KXtxLnJlbW92ZShlLHQpfX0pLHguZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPXRoaXNbMF0sbz0wLHM9bnVsbDtpZihlPT09dW5kZWZpbmVkKXtpZih0aGlzLmxlbmd0aCYmKHM9TC5nZXQoaSksMT09PWkubm9kZVR5cGUmJiFxLmdldChpLCJoYXNEYXRhQXR0cnMiKSkpe2ZvcihuPWkuYXR0cmlidXRlcztuLmxlbmd0aD5vO28rKylyPW5bb10ubmFtZSwwPT09ci5pbmRleE9mKCJkYXRhLSIpJiYocj14LmNhbWVsQ2FzZShyLnNsaWNlKDUpKSxQKGkscixzW3JdKSk7cS5zZXQoaSwiaGFzRGF0YUF0dHJzIiwhMCl9cmV0dXJuIHN9cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP3RoaXMuZWFjaChmdW5jdGlvbigpe0wuc2V0KHRoaXMsZSl9KTp4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKHQpe3ZhciBuLHI9eC5jYW1lbENhc2UoZSk7aWYoaSYmdD09PXVuZGVmaW5lZCl7aWYobj1MLmdldChpLGUpLG4hPT11bmRlZmluZWQpcmV0dXJuIG47aWYobj1MLmdldChpLHIpLG4hPT11bmRlZmluZWQpcmV0dXJuIG47aWYobj1QKGkscix1bmRlZmluZWQpLG4hPT11bmRlZmluZWQpcmV0dXJuIG59ZWxzZSB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj1MLmdldCh0aGlzLHIpO0wuc2V0KHRoaXMscix0KSwtMSE9PWUuaW5kZXhPZigiLSIpJiZuIT09dW5kZWZpbmVkJiZMLnNldCh0aGlzLGUsdCl9KX0sbnVsbCx0LGFyZ3VtZW50cy5sZW5ndGg+MSxudWxsLCEwKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7TC5yZW1vdmUodGhpcyxlKX0pfX0pO2Z1bmN0aW9uIFAoZSx0LG4pe3ZhciByO2lmKG49PT11bmRlZmluZWQmJjE9PT1lLm5vZGVUeXBlKWlmKHI9ImRhdGEtIit0LnJlcGxhY2UoTywiLSQxIikudG9Mb3dlckNhc2UoKSxuPWUuZ2V0QXR0cmlidXRlKHIpLCJzdHJpbmciPT10eXBlb2Ygbil7dHJ5e249InRydWUiPT09bj8hMDoiZmFsc2UiPT09bj8hMToibnVsbCI9PT1uP251bGw6K24rIiI9PT1uPytuOkgudGVzdChuKT9KU09OLnBhcnNlKG4pOm59Y2F0Y2goaSl7fUwuc2V0KGUsdCxuKX1lbHNlIG49dW5kZWZpbmVkO3JldHVybiBufXguZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIGU/KHQ9KHR8fCJmeCIpKyJxdWV1ZSIscj1xLmdldChlLHQpLG4mJighcnx8eC5pc0FycmF5KG4pP3I9cS5hY2Nlc3MoZSx0LHgubWFrZUFycmF5KG4pKTpyLnB1c2gobikpLHJ8fFtdKTp1bmRlZmluZWR9LGRlcXVldWU6ZnVuY3Rpb24oZSx0KXt0PXR8fCJmeCI7dmFyIG49eC5xdWV1ZShlLHQpLHI9bi5sZW5ndGgsaT1uLnNoaWZ0KCksbz14Ll9xdWV1ZUhvb2tzKGUsdCkscz1mdW5jdGlvbigpe3guZGVxdWV1ZShlLHQpCit9OyJpbnByb2dyZXNzIj09PWkmJihpPW4uc2hpZnQoKSxyLS0pLGkmJigiZngiPT09dCYmbi51bnNoaWZ0KCJpbnByb2dyZXNzIiksZGVsZXRlIG8uc3RvcCxpLmNhbGwoZSxzLG8pKSwhciYmbyYmby5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dCsicXVldWVIb29rcyI7cmV0dXJuIHEuZ2V0KGUsbil8fHEuYWNjZXNzKGUsbix7ZW1wdHk6eC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7cS5yZW1vdmUoZSxbdCsicXVldWUiLG5dKX0pfSl9fSkseC5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49MjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0iZngiLG4tLSksbj5hcmd1bWVudHMubGVuZ3RoP3gucXVldWUodGhpc1swXSxlKTp0PT09dW5kZWZpbmVkP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49eC5xdWV1ZSh0aGlzLGUsdCk7eC5fcXVldWVIb29rcyh0aGlzLGUpLCJmeCI9PT1lJiYiaW5wcm9ncmVzcyIhPT1uWzBdJiZ4LmRlcXVldWUodGhpcyxlKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt4LmRlcXVldWUodGhpcyxlKX0pfSxkZWxheTpmdW5jdGlvbihlLHQpe3JldHVybiBlPXguZng/eC5meC5zcGVlZHNbZV18fGU6ZSx0PXR8fCJmeCIsdGhpcy5xdWV1ZSh0LGZ1bmN0aW9uKHQsbil7dmFyIHI9c2V0VGltZW91dCh0LGUpO24uc3RvcD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChyKX19KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5xdWV1ZShlfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MSxpPXguRGVmZXJyZWQoKSxvPXRoaXMscz10aGlzLmxlbmd0aCxhPWZ1bmN0aW9uKCl7LS1yfHxpLnJlc29sdmVXaXRoKG8sW29dKX07InN0cmluZyIhPXR5cGVvZiBlJiYodD1lLGU9dW5kZWZpbmVkKSxlPWV8fCJmeCI7d2hpbGUocy0tKW49cS5nZXQob1tzXSxlKyJxdWV1ZUhvb2tzIiksbiYmbi5lbXB0eSYmKHIrKyxuLmVtcHR5LmFkZChhKSk7cmV0dXJuIGEoKSxpLnByb21pc2UodCl9fSk7dmFyIFIsTSxXPS9bXHRcclxuXGZdL2csJD0vXHIvZyxCPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2k7eC5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5hY2Nlc3ModGhpcyx4LmF0dHIsZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3gucmVtb3ZlQXR0cih0aGlzLGUpfSl9LHByb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5hY2Nlc3ModGhpcyx4LnByb3AsZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3gucHJvcEZpeFtlXXx8ZV19KX0sYWRkQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzPTAsYT10aGlzLmxlbmd0aCx1PSJzdHJpbmciPT10eXBlb2YgZSYmZTtpZih4LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLmFkZENsYXNzKGUuY2FsbCh0aGlzLHQsdGhpcy5jbGFzc05hbWUpKX0pO2lmKHUpZm9yKHQ9KGV8fCIiKS5tYXRjaCh3KXx8W107YT5zO3MrKylpZihuPXRoaXNbc10scj0xPT09bi5ub2RlVHlwZSYmKG4uY2xhc3NOYW1lPygiICIrbi5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKFcsIiAiKToiICIpKXtvPTA7d2hpbGUoaT10W28rK10pMD5yLmluZGV4T2YoIiAiK2krIiAiKSYmKHIrPWkrIiAiKTtuLmNsYXNzTmFtZT14LnRyaW0ocil9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8scz0wLGE9dGhpcy5sZW5ndGgsdT0wPT09YXJndW1lbnRzLmxlbmd0aHx8InN0cmluZyI9PXR5cGVvZiBlJiZlO2lmKHguaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3godGhpcykucmVtb3ZlQ2xhc3MoZS5jYWxsKHRoaXMsdCx0aGlzLmNsYXNzTmFtZSkpfSk7aWYodSlmb3IodD0oZXx8IiIpLm1hdGNoKHcpfHxbXTthPnM7cysrKWlmKG49dGhpc1tzXSxyPTE9PT1uLm5vZGVUeXBlJiYobi5jbGFzc05hbWU/KCIgIituLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoVywiICIpOiIiKSl7bz0wO3doaWxlKGk9dFtvKytdKXdoaWxlKHIuaW5kZXhPZigiICIraSsiICIpPj0wKXI9ci5yZXBsYWNlKCIgIitpKyIgIiwiICIpO24uY2xhc3NOYW1lPWU/eC50cmltKHIpOiIifXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihlLHQpe3ZhciBuPXR5cGVvZiBlO3JldHVybiJib29sZWFuIj09dHlwZW9mIHQmJiJzdHJpbmciPT09bj90P3RoaXMuYWRkQ2xhc3MoZSk6dGhpcy5yZW1vdmVDbGFzcyhlKTp4LmlzRnVuY3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3godGhpcykudG9nZ2xlQ2xhc3MoZS5jYWxsKHRoaXMsbix0aGlzLmNsYXNzTmFtZSx0KSx0KX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe2lmKCJzdHJpbmciPT09bil7dmFyIHQsaT0wLG89eCh0aGlzKSxzPWUubWF0Y2godyl8fFtdO3doaWxlKHQ9c1tpKytdKW8uaGFzQ2xhc3ModCk/by5yZW1vdmVDbGFzcyh0KTpvLmFkZENsYXNzKHQpfWVsc2Uobj09PXJ8fCJib29sZWFuIj09PW4pJiYodGhpcy5jbGFzc05hbWUmJnEuc2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8ZT09PSExPyIiOnEuZ2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0PSIgIitlKyIgIixuPTAscj10aGlzLmxlbmd0aDtmb3IoO3I+bjtuKyspaWYoMT09PXRoaXNbbl0ubm9kZVR5cGUmJigiICIrdGhpc1tuXS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKFcsIiAiKS5pbmRleE9mKHQpPj0wKXJldHVybiEwO3JldHVybiExfSx2YWw6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9dGhpc1swXTt7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcj14LmlzRnVuY3Rpb24oZSksdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3ZhciBpOzE9PT10aGlzLm5vZGVUeXBlJiYoaT1yP2UuY2FsbCh0aGlzLG4seCh0aGlzKS52YWwoKSk6ZSxudWxsPT1pP2k9IiI6Im51bWJlciI9PXR5cGVvZiBpP2krPSIiOnguaXNBcnJheShpKSYmKGk9eC5tYXAoaSxmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjplKyIifSkpLHQ9eC52YWxIb29rc1t0aGlzLnR5cGVdfHx4LnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sdCYmInNldCJpbiB0JiZ0LnNldCh0aGlzLGksInZhbHVlIikhPT11bmRlZmluZWR8fCh0aGlzLnZhbHVlPWkpKX0pO2lmKGkpcmV0dXJuIHQ9eC52YWxIb29rc1tpLnR5cGVdfHx4LnZhbEhvb2tzW2kubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sdCYmImdldCJpbiB0JiYobj10LmdldChpLCJ2YWx1ZSIpKSE9PXVuZGVmaW5lZD9uOihuPWkudmFsdWUsInN0cmluZyI9PXR5cGVvZiBuP24ucmVwbGFjZSgkLCIiKTpudWxsPT1uPyIiOm4pfX19KSx4LmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUuYXR0cmlidXRlcy52YWx1ZTtyZXR1cm4hdHx8dC5zcGVjaWZpZWQ/ZS52YWx1ZTplLnRleHR9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihlKXt2YXIgdCxuLHI9ZS5vcHRpb25zLGk9ZS5zZWxlY3RlZEluZGV4LG89InNlbGVjdC1vbmUiPT09ZS50eXBlfHwwPmkscz1vP251bGw6W10sYT1vP2krMTpyLmxlbmd0aCx1PTA+aT9hOm8/aTowO2Zvcig7YT51O3UrKylpZihuPXJbdV0sISghbi5zZWxlY3RlZCYmdSE9PWl8fCh4LnN1cHBvcnQub3B0RGlzYWJsZWQ/bi5kaXNhYmxlZDpudWxsIT09bi5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikpfHxuLnBhcmVudE5vZGUuZGlzYWJsZWQmJngubm9kZU5hbWUobi5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYodD14KG4pLnZhbCgpLG8pcmV0dXJuIHQ7cy5wdXNoKHQpfXJldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9ZS5vcHRpb25zLG89eC5tYWtlQXJyYXkodCkscz1pLmxlbmd0aDt3aGlsZShzLS0pcj1pW3NdLChyLnNlbGVjdGVkPXguaW5BcnJheSh4KHIpLnZhbCgpLG8pPj0wKSYmKG49ITApO3JldHVybiBufHwoZS5zZWxlY3RlZEluZGV4PS0xKSxvfX19LGF0dHI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLG8scz1lLm5vZGVUeXBlO2lmKGUmJjMhPT1zJiY4IT09cyYmMiE9PXMpcmV0dXJuIHR5cGVvZiBlLmdldEF0dHJpYnV0ZT09PXI/eC5wcm9wKGUsdCxuKTooMT09PXMmJnguaXNYTUxEb2MoZSl8fCh0PXQudG9Mb3dlckNhc2UoKSxpPXguYXR0ckhvb2tzW3RdfHwoeC5leHByLm1hdGNoLmJvb2wudGVzdCh0KT9NOlIpKSxuPT09dW5kZWZpbmVkP2kmJiJnZXQiaW4gaSYmbnVsbCE9PShvPWkuZ2V0KGUsdCkpP286KG89eC5maW5kLmF0dHIoZSx0KSxudWxsPT1vP3VuZGVmaW5lZDpvKTpudWxsIT09bj9pJiYic2V0ImluIGkmJihvPWkuc2V0KGUsbix0KSkhPT11bmRlZmluZWQ/bzooZS5zZXRBdHRyaWJ1dGUodCxuKyIiKSxuKTooeC5yZW1vdmVBdHRyKGUsdCksdW5kZWZpbmVkKSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9MCxvPXQmJnQubWF0Y2godyk7aWYobyYmMT09PWUubm9kZVR5cGUpd2hpbGUobj1vW2krK10pcj14LnByb3BGaXhbbl18fG4seC5leHByLm1hdGNoLmJvb2wudGVzdChuKSYmKGVbcl09ITEpLGUucmVtb3ZlQXR0cmlidXRlKG4pfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihlLHQpe2lmKCF4LnN1cHBvcnQucmFkaW9WYWx1ZSYmInJhZGlvIj09PXQmJngubm9kZU5hbWUoZSwiaW5wdXQiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4mJihlLnZhbHVlPW4pLHR9fX19LHByb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUifSxwcm9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8scz1lLm5vZGVUeXBlO2lmKGUmJjMhPT1zJiY4IT09cyYmMiE9PXMpcmV0dXJuIG89MSE9PXN8fCF4LmlzWE1MRG9jKGUpLG8mJih0PXgucHJvcEZpeFt0XXx8dCxpPXgucHJvcEhvb2tzW3RdKSxuIT09dW5kZWZpbmVkP2kmJiJzZXQiaW4gaSYmKHI9aS5zZXQoZSxuLHQpKSE9PXVuZGVmaW5lZD9yOmVbdF09bjppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOmVbdF19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fEIudGVzdChlLm5vZGVOYW1lKXx8ZS5ocmVmP2UudGFiSW5kZXg6LTF9fX19KSxNPXtzZXQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PT09ITE/eC5yZW1vdmVBdHRyKGUsbik6ZS5zZXRBdHRyaWJ1dGUobixuKSxufX0seC5lYWNoKHguZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGUsdCl7dmFyIG49eC5leHByLmF0dHJIYW5kbGVbdF18fHguZmluZC5hdHRyO3guZXhwci5hdHRySGFuZGxlW3RdPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT14LmV4cHIuYXR0ckhhbmRsZVt0XSxvPXI/dW5kZWZpbmVkOih4LmV4cHIuYXR0ckhhbmRsZVt0XT11bmRlZmluZWQpIT1uKGUsdCxyKT90LnRvTG93ZXJDYXNlKCk6bnVsbDtyZXR1cm4geC5leHByLmF0dHJIYW5kbGVbdF09aSxvfX0pLHguc3VwcG9ydC5vcHRTZWxlY3RlZHx8KHgucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9fSkseC5lYWNoKFsidGFiSW5kZXgiLCJyZWFkT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJyb3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVudEVkaXRhYmxlIl0sZnVuY3Rpb24oKXt4LnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSkseC5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7eC52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHguaXNBcnJheSh0KT9lLmNoZWNrZWQ9eC5pbkFycmF5KHgoZSkudmFsKCksdCk+PTA6dW5kZWZpbmVkfX0seC5zdXBwb3J0LmNoZWNrT258fCh4LnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWUuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPyJvbiI6ZS52YWx1ZX0pfSk7dmFyIEk9L15rZXkvLHo9L14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLF89L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLFg9L14oW14uXSopKD86XC4oLispfCkkLztmdW5jdGlvbiBVKCl7cmV0dXJuITB9ZnVuY3Rpb24gWSgpe3JldHVybiExfWZ1bmN0aW9uIFYoKXt0cnl7cmV0dXJuIG8uYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fXguZXZlbnQ9e2dsb2JhbDp7fSxhZGQ6ZnVuY3Rpb24oZSx0LG4saSxvKXt2YXIgcyxhLHUsbCxjLHAsZixoLGQsZyxtLHk9cS5nZXQoZSk7aWYoeSl7bi5oYW5kbGVyJiYocz1uLG49cy5oYW5kbGVyLG89cy5zZWxlY3Rvciksbi5ndWlkfHwobi5ndWlkPXguZ3VpZCsrKSwobD15LmV2ZW50cyl8fChsPXkuZXZlbnRzPXt9KSwoYT15LmhhbmRsZSl8fChhPXkuaGFuZGxlPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgeD09PXJ8fGUmJnguZXZlbnQudHJpZ2dlcmVkPT09ZS50eXBlP3VuZGVmaW5lZDp4LmV2ZW50LmRpc3BhdGNoLmFwcGx5KGEuZWxlbSxhcmd1bWVudHMpfSxhLmVsZW09ZSksdD0odHx8IiIpLm1hdGNoKHcpfHxbIiJdLGM9dC5sZW5ndGg7d2hpbGUoYy0tKXU9WC5leGVjKHRbY10pfHxbXSxkPW09dVsxXSxnPSh1WzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksZCYmKGY9eC5ldmVudC5zcGVjaWFsW2RdfHx7fSxkPShvP2YuZGVsZWdhdGVUeXBlOmYuYmluZFR5cGUpfHxkLGY9eC5ldmVudC5zcGVjaWFsW2RdfHx7fSxwPXguZXh0ZW5kKHt0eXBlOmQsb3JpZ1R5cGU6bSxkYXRhOmksaGFuZGxlcjpuLGd1aWQ6bi5ndWlkLHNlbGVjdG9yOm8sbmVlZHNDb250ZXh0Om8mJnguZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChvKSxuYW1lc3BhY2U6Zy5qb2luKCIuIil9LHMpLChoPWxbZF0pfHwoaD1sW2RdPVtdLGguZGVsZWdhdGVDb3VudD0wLGYuc2V0dXAmJmYuc2V0dXAuY2FsbChlLGksZyxhKSE9PSExfHxlLmFkZEV2ZW50TGlzdGVuZXImJmUuYWRkRXZlbnRMaXN0ZW5lcihkLGEsITEpKSxmLmFkZCYmKGYuYWRkLmNhbGwoZSxwKSxwLmhhbmRsZXIuZ3VpZHx8KHAuaGFuZGxlci5ndWlkPW4uZ3VpZCkpLG8/aC5zcGxpY2UoaC5kZWxlZ2F0ZUNvdW50KyssMCxwKTpoLnB1c2gocCkseC5ldmVudC5nbG9iYWxbZF09ITApO2U9bnVsbH19LHJlbW92ZTpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLHMsYSx1LGwsYyxwLGYsaCxkLGcsbT1xLmhhc0RhdGEoZSkmJnEuZ2V0KGUpO2lmKG0mJih1PW0uZXZlbnRzKSl7dD0odHx8IiIpLm1hdGNoKHcpfHxbIiJdLGw9dC5sZW5ndGg7d2hpbGUobC0tKWlmKGE9WC5leGVjKHRbbF0pfHxbXSxoPWc9YVsxXSxkPShhWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksaCl7cD14LmV2ZW50LnNwZWNpYWxbaF18fHt9LGg9KHI/cC5kZWxlZ2F0ZVR5cGU6cC5iaW5kVHlwZSl8fGgsZj11W2hdfHxbXSxhPWFbMl0mJlJlZ0V4cCgiKF58XFwuKSIrZC5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKSxzPW89Zi5sZW5ndGg7d2hpbGUoby0tKWM9ZltvXSwhaSYmZyE9PWMub3JpZ1R5cGV8fG4mJm4uZ3VpZCE9PWMuZ3VpZHx8YSYmIWEudGVzdChjLm5hbWVzcGFjZSl8fHImJnIhPT1jLnNlbGVjdG9yJiYoIioqIiE9PXJ8fCFjLnNlbGVjdG9yKXx8KGYuc3BsaWNlKG8sMSksYy5zZWxlY3RvciYmZi5kZWxlZ2F0ZUNvdW50LS0scC5yZW1vdmUmJnAucmVtb3ZlLmNhbGwoZSxjKSk7cyYmIWYubGVuZ3RoJiYocC50ZWFyZG93biYmcC50ZWFyZG93bi5jYWxsKGUsZCxtLmhhbmRsZSkhPT0hMXx8eC5yZW1vdmVFdmVudChlLGgsbS5oYW5kbGUpLGRlbGV0ZSB1W2hdKX1lbHNlIGZvcihoIGluIHUpeC5ldmVudC5yZW1vdmUoZSxoK3RbbF0sbixyLCEwKTt4LmlzRW1wdHlPYmplY3QodSkmJihkZWxldGUgbS5oYW5kbGUscS5yZW1vdmUoZSwiZXZlbnRzIikpfX0sdHJpZ2dlcjpmdW5jdGlvbih0LG4scixpKXt2YXIgcyxhLHUsbCxjLHAsZixoPVtyfHxvXSxkPXkuY2FsbCh0LCJ0eXBlIik/dC50eXBlOnQsZz15LmNhbGwodCwibmFtZXNwYWNlIik/dC5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihhPXU9cj1yfHxvLDMhPT1yLm5vZGVUeXBlJiY4IT09ci5ub2RlVHlwZSYmIV8udGVzdChkK3guZXZlbnQudHJpZ2dlcmVkKSYmKGQuaW5kZXhPZigiLiIpPj0wJiYoZz1kLnNwbGl0KCIuIiksZD1nLnNoaWZ0KCksZy5zb3J0KCkpLGM9MD5kLmluZGV4T2YoIjoiKSYmIm9uIitkLHQ9dFt4LmV4cGFuZG9dP3Q6bmV3IHguRXZlbnQoZCwib2JqZWN0Ij09dHlwZW9mIHQmJnQpLHQuaXNUcmlnZ2VyPWk/MjozLHQubmFtZXNwYWNlPWcuam9pbigiLiIpLHQubmFtZXNwYWNlX3JlPXQubmFtZXNwYWNlP1JlZ0V4cCgiKF58XFwuKSIrZy5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsLHQucmVzdWx0PXVuZGVmaW5lZCx0LnRhcmdldHx8KHQudGFyZ2V0PXIpLG49bnVsbD09bj9bdF06eC5tYWtlQXJyYXkobixbdF0pLGY9eC5ldmVudC5zcGVjaWFsW2RdfHx7fSxpfHwhZi50cmlnZ2VyfHxmLnRyaWdnZXIuYXBwbHkocixuKSE9PSExKSl7aWYoIWkmJiFmLm5vQnViYmxlJiYheC5pc1dpbmRvdyhyKSl7Zm9yKGw9Zi5kZWxlZ2F0ZVR5cGV8fGQsXy50ZXN0KGwrZCl8fChhPWEucGFyZW50Tm9kZSk7YTthPWEucGFyZW50Tm9kZSloLnB1c2goYSksdT1hO3U9PT0oci5vd25lckRvY3VtZW50fHxvKSYmaC5wdXNoKHUuZGVmYXVsdFZpZXd8fHUucGFyZW50V2luZG93fHxlKX1zPTA7d2hpbGUoKGE9aFtzKytdKSYmIXQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl0LnR5cGU9cz4xP2w6Zi5iaW5kVHlwZXx8ZCxwPShxLmdldChhLCJldmVudHMiKXx8e30pW3QudHlwZV0mJnEuZ2V0KGEsImhhbmRsZSIpLHAmJnAuYXBwbHkoYSxuKSxwPWMmJmFbY10scCYmeC5hY2NlcHREYXRhKGEpJiZwLmFwcGx5JiZwLmFwcGx5KGEsbik9PT0hMSYmdC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiB0LnR5cGU9ZCxpfHx0LmlzRGVmYXVsdFByZXZlbnRlZCgpfHxmLl9kZWZhdWx0JiZmLl9kZWZhdWx0LmFwcGx5KGgucG9wKCksbikhPT0hMXx8IXguYWNjZXB0RGF0YShyKXx8YyYmeC5pc0Z1bmN0aW9uKHJbZF0pJiYheC5pc1dpbmRvdyhyKSYmKHU9cltjXSx1JiYocltjXT1udWxsKSx4LmV2ZW50LnRyaWdnZXJlZD1kLHJbZF0oKSx4LmV2ZW50LnRyaWdnZXJlZD11bmRlZmluZWQsdSYmKHJbY109dSkpLHQucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oZSl7ZT14LmV2ZW50LmZpeChlKTt2YXIgdCxuLHIsaSxvLHM9W10sYT1kLmNhbGwoYXJndW1lbnRzKSx1PShxLmdldCh0aGlzLCJldmVudHMiKXx8e30pW2UudHlwZV18fFtdLGw9eC5ldmVudC5zcGVjaWFsW2UudHlwZV18fHt9O2lmKGFbMF09ZSxlLmRlbGVnYXRlVGFyZ2V0PXRoaXMsIWwucHJlRGlzcGF0Y2h8fGwucHJlRGlzcGF0Y2guY2FsbCh0aGlzLGUpIT09ITEpe3M9eC5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsZSx1KSx0PTA7d2hpbGUoKGk9c1t0KytdKSYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7ZS5jdXJyZW50VGFyZ2V0PWkuZWxlbSxuPTA7d2hpbGUoKG89aS5oYW5kbGVyc1tuKytdKSYmIWUuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkoIWUubmFtZXNwYWNlX3JlfHxlLm5hbWVzcGFjZV9yZS50ZXN0KG8ubmFtZXNwYWNlKSkmJihlLmhhbmRsZU9iaj1vLGUuZGF0YT1vLmRhdGEscj0oKHguZXZlbnQuc3BlY2lhbFtvLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8by5oYW5kbGVyKS5hcHBseShpLmVsZW0sYSksciE9PXVuZGVmaW5lZCYmKGUucmVzdWx0PXIpPT09ITEmJihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBsLnBvc3REaXNwYXRjaCYmbC5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLGUpLGUucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxzPVtdLGE9dC5kZWxlZ2F0ZUNvdW50LHU9ZS50YXJnZXQ7aWYoYSYmdS5ub2RlVHlwZSYmKCFlLmJ1dHRvbnx8ImNsaWNrIiE9PWUudHlwZSkpZm9yKDt1IT09dGhpczt1PXUucGFyZW50Tm9kZXx8dGhpcylpZih1LmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1lLnR5cGUpe2ZvcihyPVtdLG49MDthPm47bisrKW89dFtuXSxpPW8uc2VsZWN0b3IrIiAiLHJbaV09PT11bmRlZmluZWQmJihyW2ldPW8ubmVlZHNDb250ZXh0P3goaSx0aGlzKS5pbmRleCh1KT49MDp4LmZpbmQoaSx0aGlzLG51bGwsW3VdKS5sZW5ndGgpLHJbaV0mJnIucHVzaChvKTtyLmxlbmd0aCYmcy5wdXNoKHtlbGVtOnUsaGFuZGxlcnM6cn0pfXJldHVybiB0Lmxlbmd0aD5hJiZzLnB1c2goe2VsZW06dGhpcyxoYW5kbGVyczp0LnNsaWNlKGEpfSksc30scHJvcHM6ImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWUud2hpY2gmJihlLndoaWNoPW51bGwhPXQuY2hhckNvZGU/dC5jaGFyQ29kZTp0LmtleUNvZGUpLGV9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxzPXQuYnV0dG9uO3JldHVybiBudWxsPT1lLnBhZ2VYJiZudWxsIT10LmNsaWVudFgmJihuPWUudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fG8scj1uLmRvY3VtZW50RWxlbWVudCxpPW4uYm9keSxlLnBhZ2VYPXQuY2xpZW50WCsociYmci5zY3JvbGxMZWZ0fHxpJiZpLnNjcm9sbExlZnR8fDApLShyJiZyLmNsaWVudExlZnR8fGkmJmkuY2xpZW50TGVmdHx8MCksZS5wYWdlWT10LmNsaWVudFkrKHImJnIuc2Nyb2xsVG9wfHxpJiZpLnNjcm9sbFRvcHx8MCktKHImJnIuY2xpZW50VG9wfHxpJiZpLmNsaWVudFRvcHx8MCkpLGUud2hpY2h8fHM9PT11bmRlZmluZWR8fChlLndoaWNoPTEmcz8xOjImcz8zOjQmcz8yOjApLGV9fSxmaXg6ZnVuY3Rpb24oZSl7aWYoZVt4LmV4cGFuZG9dKXJldHVybiBlO3ZhciB0LG4scixpPWUudHlwZSxzPWUsYT10aGlzLmZpeEhvb2tzW2ldO2F8fCh0aGlzLmZpeEhvb2tzW2ldPWE9ei50ZXN0KGkpP3RoaXMubW91c2VIb29rczpJLnRlc3QoaSk/dGhpcy5rZXlIb29rczp7fSkscj1hLnByb3BzP3RoaXMucHJvcHMuY29uY2F0KGEucHJvcHMpOnRoaXMucHJvcHMsZT1uZXcgeC5FdmVudChzKSx0PXIubGVuZ3RoO3doaWxlKHQtLSluPXJbdF0sZVtuXT1zW25dO3JldHVybiBlLnRhcmdldHx8KGUudGFyZ2V0PW8pLDM9PT1lLnRhcmdldC5ub2RlVHlwZSYmKGUudGFyZ2V0PWUudGFyZ2V0LnBhcmVudE5vZGUpLGEuZmlsdGVyP2EuZmlsdGVyKGUscyk6ZX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMhPT1WKCkmJnRoaXMuZm9jdXM/KHRoaXMuZm9jdXMoKSwhMSk6dW5kZWZpbmVkfSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1WKCkmJnRoaXMuYmx1cj8odGhpcy5ibHVyKCksITEpOnVuZGVmaW5lZH0sZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuImNoZWNrYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmeC5ub2RlTmFtZSh0aGlzLCJpbnB1dCIpPyh0aGlzLmNsaWNrKCksITEpOnVuZGVmaW5lZH0sX2RlZmF1bHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHgubm9kZU5hbWUoZS50YXJnZXQsImEiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGUpe2UucmVzdWx0IT09dW5kZWZpbmVkJiYoZS5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlPWUucmVzdWx0KX19fSxzaW11bGF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT14LmV4dGVuZChuZXcgeC5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITAsb3JpZ2luYWxFdmVudDp7fX0pO3I/eC5ldmVudC50cmlnZ2VyKGksbnVsbCx0KTp4LmV2ZW50LmRpc3BhdGNoLmNhbGwodCxpKSxpLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZuLnByZXZlbnREZWZhdWx0KCl9fSx4LnJlbW92ZUV2ZW50PWZ1bmN0aW9uKGUsdCxuKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXImJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4sITEpfSx4LkV2ZW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB4LkV2ZW50PyhlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHxlLmdldFByZXZlbnREZWZhdWx0JiZlLmdldFByZXZlbnREZWZhdWx0KCk/VTpZKTp0aGlzLnR5cGU9ZSx0JiZ4LmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHx4Lm5vdygpLHRoaXNbeC5leHBhbmRvXT0hMCx1bmRlZmluZWQpOm5ldyB4LkV2ZW50KGUsdCl9LHguRXZlbnQucHJvdG90eXBlPXtpc0RlZmF1bHRQcmV2ZW50ZWQ6WSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpZLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOlkscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9VSxlJiZlLnByZXZlbnREZWZhdWx0JiZlLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPVUsZSYmZS5zdG9wUHJvcGFnYXRpb24mJmUuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9VSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0seC5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0sZnVuY3Rpb24oZSx0KXt4LmV2ZW50LnNwZWNpYWxbZV09e2RlbGVnYXRlVHlwZTp0LGJpbmRUeXBlOnQsaGFuZGxlOmZ1bmN0aW9uKGUpe3ZhciBuLHI9dGhpcyxpPWUucmVsYXRlZFRhcmdldCxvPWUuaGFuZGxlT2JqO3JldHVybighaXx8aSE9PXImJiF4LmNvbnRhaW5zKHIsaSkpJiYoZS50eXBlPW8ub3JpZ1R5cGUsbj1vLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT10KSxufX19KSx4LnN1cHBvcnQuZm9jdXNpbkJ1YmJsZXN8fHguZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oZSx0KXt2YXIgbj0wLHI9ZnVuY3Rpb24oZSl7eC5ldmVudC5zaW11bGF0ZSh0LGUudGFyZ2V0LHguZXZlbnQuZml4KGUpLCEwKX07eC5ldmVudC5zcGVjaWFsW3RdPXtzZXR1cDpmdW5jdGlvbigpezA9PT1uKysmJm8uYWRkRXZlbnRMaXN0ZW5lcihlLHIsITApfSx0ZWFyZG93bjpmdW5jdGlvbigpezA9PT0tLW4mJm8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHIsITApfX19KSx4LmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxzO2lmKCJvYmplY3QiPT10eXBlb2YgZSl7InN0cmluZyIhPXR5cGVvZiB0JiYobj1ufHx0LHQ9dW5kZWZpbmVkKTtmb3IocyBpbiBlKXRoaXMub24ocyx0LG4sZVtzXSxpKTtyZXR1cm4gdGhpc31pZihudWxsPT1uJiZudWxsPT1yPyhyPXQsbj10PXVuZGVmaW5lZCk6bnVsbD09ciYmKCJzdHJpbmciPT10eXBlb2YgdD8ocj1uLG49dW5kZWZpbmVkKToocj1uLG49dCx0PXVuZGVmaW5lZCkpLHI9PT0hMSlyPVk7ZWxzZSBpZighcilyZXR1cm4gdGhpcztyZXR1cm4gMT09PWkmJihvPXIscj1mdW5jdGlvbihlKXtyZXR1cm4geCgpLm9mZihlKSxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sci5ndWlkPW8uZ3VpZHx8KG8uZ3VpZD14Lmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe3guZXZlbnQuYWRkKHRoaXMsZSxyLG4sdCl9KX0sb25lOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKGUsdCxuLHIsMSl9LG9mZjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZihlJiZlLnByZXZlbnREZWZhdWx0JiZlLmhhbmRsZU9iailyZXR1cm4gcj1lLmhhbmRsZU9iaix4KGUuZGVsZWdhdGVUYXJnZXQpLm9mZihyLm5hbWVzcGFjZT9yLm9yaWdUeXBlKyIuIityLm5hbWVzcGFjZTpyLm9yaWdUeXBlLHIuc2VsZWN0b3Isci5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgZSl7Zm9yKGkgaW4gZSl0aGlzLm9mZihpLHQsZVtpXSk7cmV0dXJuIHRoaXN9cmV0dXJuKHQ9PT0hMXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpJiYobj10LHQ9dW5kZWZpbmVkKSxuPT09ITEmJihuPVkpLHRoaXMuZWFjaChmdW5jdGlvbigpe3guZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9LHRyaWdnZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVudC50cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXNbMF07cmV0dXJuIG4/eC5ldmVudC50cmlnZ2VyKGUsdCxuLCEwKTp1bmRlZmluZWR9fSk7dmFyIEc9L14uW146I1xbXC4sXSokLyxKPS9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFE9eC5leHByLm1hdGNoLm5lZWRzQ29udGV4dCxLPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O3guZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGUpe3ZhciB0LG49W10scj10aGlzLGk9ci5sZW5ndGg7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiB0aGlzLnB1c2hTdGFjayh4KGUpLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7aT50O3QrKylpZih4LmNvbnRhaW5zKHJbdF0sdGhpcykpcmV0dXJuITB9KSk7Zm9yKHQ9MDtpPnQ7dCsrKXguZmluZChlLHJbdF0sbik7cmV0dXJuIG49dGhpcy5wdXNoU3RhY2soaT4xP3gudW5pcXVlKG4pOm4pLG4uc2VsZWN0b3I9dGhpcy5zZWxlY3Rvcj90aGlzLnNlbGVjdG9yKyIgIitlOmUsbn0saGFzOmZ1bmN0aW9uKGUpe3ZhciB0PXgoZSx0aGlzKSxuPXQubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKDtuPmU7ZSsrKWlmKHguY29udGFpbnModGhpcyx0W2VdKSlyZXR1cm4hMH0pfSxub3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGV0KHRoaXMsZXx8W10sITApKX0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhldCh0aGlzLGV8fFtdLCExKSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhZXQodGhpcywic3RyaW5nIj09dHlwZW9mIGUmJlEudGVzdChlKT94KGUpOmV8fFtdLCExKS5sZW5ndGh9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLHM9US50ZXN0KGUpfHwic3RyaW5nIiE9dHlwZW9mIGU/eChlLHR8fHRoaXMuY29udGV4dCk6MDtmb3IoO2k+cjtyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09dDtuPW4ucGFyZW50Tm9kZSlpZigxMT5uLm5vZGVUeXBlJiYocz9zLmluZGV4KG4pPi0xOjE9PT1uLm5vZGVUeXBlJiZ4LmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtuPW8ucHVzaChuKTticmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2soby5sZW5ndGg+MT94LnVuaXF1ZShvKTpvKX0saW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/InN0cmluZyI9PXR5cGVvZiBlP2cuY2FsbCh4KGUpLHRoaXNbMF0pOmcuY2FsbCh0aGlzLGUuanF1ZXJ5P2VbMF06ZSk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj0ic3RyaW5nIj09dHlwZW9mIGU/eChlLHQpOngubWFrZUFycmF5KGUmJmUubm9kZVR5cGU/W2VdOmUpLHI9eC5tZXJnZSh0aGlzLmdldCgpLG4pO3JldHVybiB0aGlzLnB1c2hTdGFjayh4LnVuaXF1ZShyKSl9LGFkZEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWU/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfX0pO2Z1bmN0aW9uIFooZSx0KXt3aGlsZSgoZT1lW3RdKSYmMSE9PWUubm9kZVR5cGUpO3JldHVybiBlfXguZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmMTEhPT10Lm5vZGVUeXBlP3Q6bnVsbH0scGFyZW50czpmdW5jdGlvbihlKXtyZXR1cm4geC5kaXIoZSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmRpcihlLCJwYXJlbnROb2RlIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gWihlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBaKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiB4LmRpcihlLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGUpe3JldHVybiB4LmRpcihlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4geC5kaXIoZSwibmV4dFNpYmxpbmciLG4pfSxwcmV2VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmRpcihlLCJwcmV2aW91c1NpYmxpbmciLG4pfSxzaWJsaW5nczpmdW5jdGlvbihlKXtyZXR1cm4geC5zaWJsaW5nKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4geC5zaWJsaW5nKGUuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbnRlbnREb2N1bWVudHx8eC5tZXJnZShbXSxlLmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oZSx0KXt4LmZuW2VdPWZ1bmN0aW9uKG4scil7dmFyIGk9eC5tYXAodGhpcyx0LG4pO3JldHVybiJVbnRpbCIhPT1lLnNsaWNlKC01KSYmKHI9biksciYmInN0cmluZyI9PXR5cGVvZiByJiYoaT14LmZpbHRlcihyLGkpKSx0aGlzLmxlbmd0aD4xJiYoS1tlXXx8eC51bmlxdWUoaSksSi50ZXN0KGUpJiZpLnJldmVyc2UoKSksdGhpcy5wdXNoU3RhY2soaSl9fSkseC5leHRlbmQoe2ZpbHRlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dFswXTtyZXR1cm4gbiYmKGU9Ijpub3QoIitlKyIpIiksMT09PXQubGVuZ3RoJiYxPT09ci5ub2RlVHlwZT94LmZpbmQubWF0Y2hlc1NlbGVjdG9yKHIsZSk/W3JdOltdOnguZmluZC5tYXRjaGVzKGUseC5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfSkpfSxkaXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtdLGk9biE9PXVuZGVmaW5lZDt3aGlsZSgoZT1lW3RdKSYmOSE9PWUubm9kZVR5cGUpaWYoMT09PWUubm9kZVR5cGUpe2lmKGkmJngoZSkuaXMobikpYnJlYWs7ci5wdXNoKGUpfXJldHVybiByfSxzaWJsaW5nOmZ1bmN0aW9uKGUsdCl7dmFyIG49W107Zm9yKDtlO2U9ZS5uZXh0U2libGluZykxPT09ZS5ub2RlVHlwZSYmZSE9PXQmJm4ucHVzaChlKTtyZXR1cm4gbn19KTtmdW5jdGlvbiBldChlLHQsbil7aWYoeC5pc0Z1bmN0aW9uKHQpKXJldHVybiB4LmdyZXAoZSxmdW5jdGlvbihlLHIpe3JldHVybiEhdC5jYWxsKGUscixlKSE9PW59KTtpZih0Lm5vZGVUeXBlKXJldHVybiB4LmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQhPT1ufSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZihHLnRlc3QodCkpcmV0dXJuIHguZmlsdGVyKHQsZSxuKTt0PXguZmlsdGVyKHQsZSl9cmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBnLmNhbGwodCxlKT49MCE9PW59KX12YXIgdHQ9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9naSxudD0vPChbXHc6XSspLyxydD0vPHwmIz9cdys7LyxpdD0vPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLG90PS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLHN0PS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGF0PS9eJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSx1dD0vXnRydWVcLyguKikvLGx0PS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZyxjdD17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDpbMCwiIiwiIl19O2N0Lm9wdGdyb3VwPWN0Lm9wdGlvbixjdC50Ym9keT1jdC50Zm9vdD1jdC5jb2xncm91cD1jdC5jYXB0aW9uPWN0LnRoZWFkLGN0LnRoPWN0LnRkLHguZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dW5kZWZpbmVkP3gudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fG8pLmNyZWF0ZVRleHROb2RlKGUpKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oZSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciB0PXB0KHRoaXMsZSk7dC5hcHBlbmRDaGlsZChlKX19KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9cHQodGhpcyxlKTt0Lmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKX0pfSxyZW1vdmU6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWU/eC5maWx0ZXIoZSx0aGlzKTp0aGlzLGk9MDtmb3IoO251bGwhPShuPXJbaV0pO2krKyl0fHwxIT09bi5ub2RlVHlwZXx8eC5jbGVhbkRhdGEobXQobikpLG4ucGFyZW50Tm9kZSYmKHQmJnguY29udGFpbnMobi5vd25lckRvY3VtZW50LG4pJiZkdChtdChuLCJzY3JpcHQiKSksbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXt2YXIgZSx0PTA7Zm9yKDtudWxsIT0oZT10aGlzW3RdKTt0KyspMT09PWUubm9kZVR5cGUmJih4LmNsZWFuRGF0YShtdChlLCExKSksZS50ZXh0Q29udGVudD0iIik7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bnVsbD09ZT8hMTplLHQ9bnVsbD09dD9lOnQsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4geC5jbG9uZSh0aGlzLGUsdCl9KX0saHRtbDpmdW5jdGlvbihlKXtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlvbihlKXt2YXIgdD10aGlzWzBdfHx7fSxuPTAscj10aGlzLmxlbmd0aDtpZihlPT09dW5kZWZpbmVkJiYxPT09dC5ub2RlVHlwZSlyZXR1cm4gdC5pbm5lckhUTUw7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYhaXQudGVzdChlKSYmIWN0WyhudC5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7ZT1lLnJlcGxhY2UodHQsIjwkMT48LyQyPiIpO3RyeXtmb3IoO3I+bjtuKyspdD10aGlzW25dfHx7fSwxPT09dC5ub2RlVHlwZSYmKHguY2xlYW5EYXRhKG10KHQsITEpKSx0LmlubmVySFRNTD1lKTt0PTB9Y2F0Y2goaSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGU9eC5tYXAodGhpcyxmdW5jdGlvbihlKXtyZXR1cm5bZS5uZXh0U2libGluZyxlLnBhcmVudE5vZGVdfSksdD0wO3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihuKXt2YXIgcj1lW3QrK10saT1lW3QrK107aSYmKHImJnIucGFyZW50Tm9kZSE9PWkmJihyPXRoaXMubmV4dFNpYmxpbmcpLHgodGhpcykucmVtb3ZlKCksaS5pbnNlcnRCZWZvcmUobixyKSl9LCEwKSx0P3RoaXM6dGhpcy5yZW1vdmUoKX0sZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlbW92ZShlLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oZSx0LG4pe2U9Zi5hcHBseShbXSxlKTt2YXIgcixpLG8scyxhLHUsbD0wLGM9dGhpcy5sZW5ndGgscD10aGlzLGg9Yy0xLGQ9ZVswXSxnPXguaXNGdW5jdGlvbihkKTtpZihnfHwhKDE+PWN8fCJzdHJpbmciIT10eXBlb2YgZHx8eC5zdXBwb3J0LmNoZWNrQ2xvbmUpJiZzdC50ZXN0KGQpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24ocil7dmFyIGk9cC5lcShyKTtnJiYoZVswXT1kLmNhbGwodGhpcyxyLGkuaHRtbCgpKSksaS5kb21NYW5pcChlLHQsbil9KTtpZihjJiYocj14LmJ1aWxkRnJhZ21lbnQoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQsITEsIW4mJnRoaXMpLGk9ci5maXJzdENoaWxkLDE9PT1yLmNoaWxkTm9kZXMubGVuZ3RoJiYocj1pKSxpKSl7Zm9yKG89eC5tYXAobXQociwic2NyaXB0IiksZnQpLHM9by5sZW5ndGg7Yz5sO2wrKylhPXIsbCE9PWgmJihhPXguY2xvbmUoYSwhMCwhMCkscyYmeC5tZXJnZShvLG10KGEsInNjcmlwdCIpKSksdC5jYWxsKHRoaXNbbF0sYSxsKTtpZihzKWZvcih1PW9bby5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCx4Lm1hcChvLGh0KSxsPTA7cz5sO2wrKylhPW9bbF0sYXQudGVzdChhLnR5cGV8fCIiKSYmIXEuYWNjZXNzKGEsImdsb2JhbEV2YWwiKSYmeC5jb250YWlucyh1LGEpJiYoYS5zcmM/eC5fZXZhbFVybChhLnNyYyk6eC5nbG9iYWxFdmFsKGEudGV4dENvbnRlbnQucmVwbGFjZShsdCwiIikpKX1yZXR1cm4gdGhpc319KSx4LmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihlLHQpe3guZm5bZV09ZnVuY3Rpb24oZSl7dmFyIG4scj1bXSxpPXgoZSksbz1pLmxlbmd0aC0xLHM9MDtmb3IoO28+PXM7cysrKW49cz09PW8/dGhpczp0aGlzLmNsb25lKCEwKSx4KGlbc10pW3RdKG4pLGguYXBwbHkocixuLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2socil9fSkseC5leHRlbmQoe2Nsb25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8scyxhPWUuY2xvbmVOb2RlKCEwKSx1PXguY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpO2lmKCEoeC5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHx4LmlzWE1MRG9jKGUpKSlmb3Iocz1tdChhKSxvPW10KGUpLHI9MCxpPW8ubGVuZ3RoO2k+cjtyKyspeXQob1tyXSxzW3JdKTtpZih0KWlmKG4pZm9yKG89b3x8bXQoZSkscz1zfHxtdChhKSxyPTAsaT1vLmxlbmd0aDtpPnI7cisrKWd0KG9bcl0sc1tyXSk7ZWxzZSBndChlLGEpO3JldHVybiBzPW10KGEsInNjcmlwdCIpLHMubGVuZ3RoPjAmJmR0KHMsIXUmJm10KGUsInNjcmlwdCIpKSxhfSxidWlsZEZyYWdtZW50OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8scyxhLHUsbCxjPTAscD1lLmxlbmd0aCxmPXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9W107Zm9yKDtwPmM7YysrKWlmKGk9ZVtjXSxpfHwwPT09aSlpZigib2JqZWN0Ij09PXgudHlwZShpKSl4Lm1lcmdlKGgsaS5ub2RlVHlwZT9baV06aSk7ZWxzZSBpZihydC50ZXN0KGkpKXtvPW98fGYuYXBwZW5kQ2hpbGQodC5jcmVhdGVFbGVtZW50KCJkaXYiKSkscz0obnQuZXhlYyhpKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxhPWN0W3NdfHxjdC5fZGVmYXVsdCxvLmlubmVySFRNTD1hWzFdK2kucmVwbGFjZSh0dCwiPCQxPjwvJDI+IikrYVsyXSxsPWFbMF07d2hpbGUobC0tKW89by5sYXN0Q2hpbGQ7eC5tZXJnZShoLG8uY2hpbGROb2Rlcyksbz1mLmZpcnN0Q2hpbGQsby50ZXh0Q29udGVudD0iIn1lbHNlIGgucHVzaCh0LmNyZWF0ZVRleHROb2RlKGkpKTtmLnRleHRDb250ZW50PSIiLGM9MDt3aGlsZShpPWhbYysrXSlpZigoIXJ8fC0xPT09eC5pbkFycmF5KGkscikpJiYodT14LmNvbnRhaW5zKGkub3duZXJEb2N1bWVudCxpKSxvPW10KGYuYXBwZW5kQ2hpbGQoaSksInNjcmlwdCIpLHUmJmR0KG8pLG4pKXtsPTA7d2hpbGUoaT1vW2wrK10pYXQudGVzdChpLnR5cGV8fCIiKSYmbi5wdXNoKGkpfXJldHVybiBmfSxjbGVhbkRhdGE6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzLGE9eC5ldmVudC5zcGVjaWFsLHU9MDtmb3IoOyhuPWVbdV0pIT09dW5kZWZpbmVkO3UrKyl7aWYoRi5hY2NlcHRzKG4pJiYobz1uW3EuZXhwYW5kb10sbyYmKHQ9cS5jYWNoZVtvXSkpKXtpZihyPU9iamVjdC5rZXlzKHQuZXZlbnRzfHx7fSksci5sZW5ndGgpZm9yKHM9MDsoaT1yW3NdKSE9PXVuZGVmaW5lZDtzKyspYVtpXT94LmV2ZW50LnJlbW92ZShuLGkpOngucmVtb3ZlRXZlbnQobixpLHQuaGFuZGxlKTtxLmNhY2hlW29dJiZkZWxldGUgcS5jYWNoZVtvXX1kZWxldGUgTC5jYWNoZVtuW0wuZXhwYW5kb11dfX0sX2V2YWxVcmw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguYWpheCh7dXJsOmUsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX19KTtmdW5jdGlvbiBwdChlLHQpe3JldHVybiB4Lm5vZGVOYW1lKGUsInRhYmxlIikmJngubm9kZU5hbWUoMT09PXQubm9kZVR5cGU/dDp0LmZpcnN0Q2hpbGQsInRyIik/ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8ZS5hcHBlbmRDaGlsZChlLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6ZX1mdW5jdGlvbiBmdChlKXtyZXR1cm4gZS50eXBlPShudWxsIT09ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkrIi8iK2UudHlwZSxlfWZ1bmN0aW9uIGh0KGUpe3ZhciB0PXV0LmV4ZWMoZS50eXBlKTtyZXR1cm4gdD9lLnR5cGU9dFsxXTplLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpLGV9ZnVuY3Rpb24gZHQoZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7Zm9yKDtuPnI7cisrKXEuc2V0KGVbcl0sImdsb2JhbEV2YWwiLCF0fHxxLmdldCh0W3JdLCJnbG9iYWxFdmFsIikpfWZ1bmN0aW9uIGd0KGUsdCl7dmFyIG4scixpLG8scyxhLHUsbDtpZigxPT09dC5ub2RlVHlwZSl7aWYocS5oYXNEYXRhKGUpJiYobz1xLmFjY2VzcyhlKSxzPXEuc2V0KHQsbyksbD1vLmV2ZW50cykpe2RlbGV0ZSBzLmhhbmRsZSxzLmV2ZW50cz17fTtmb3IoaSBpbiBsKWZvcihuPTAscj1sW2ldLmxlbmd0aDtyPm47bisrKXguZXZlbnQuYWRkKHQsaSxsW2ldW25dKX1MLmhhc0RhdGEoZSkmJihhPUwuYWNjZXNzKGUpLHU9eC5leHRlbmQoe30sYSksTC5zZXQodCx1KSl9fWZ1bmN0aW9uIG10KGUsdCl7dmFyIG49ZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKHR8fCIqIik6ZS5xdWVyeVNlbGVjdG9yQWxsP2UucXVlcnlTZWxlY3RvckFsbCh0fHwiKiIpOltdO3JldHVybiB0PT09dW5kZWZpbmVkfHx0JiZ4Lm5vZGVOYW1lKGUsdCk/eC5tZXJnZShbZV0sbik6bn1mdW5jdGlvbiB5dChlLHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsiaW5wdXQiPT09biYmb3QudGVzdChlLnR5cGUpP3QuY2hlY2tlZD1lLmNoZWNrZWQ6KCJpbnB1dCI9PT1ufHwidGV4dGFyZWEiPT09bikmJih0LmRlZmF1bHRWYWx1ZT1lLmRlZmF1bHRWYWx1ZSl9eC5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHguaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24odCl7eCh0aGlzKS53cmFwQWxsKGUuY2FsbCh0aGlzLHQpKX0pOih0aGlzWzBdJiYodD14KGUsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCksdGhpc1swXS5wYXJlbnROb2RlJiZ0Lmluc2VydEJlZm9yZSh0aGlzWzBdKSx0Lm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXM7d2hpbGUoZS5maXJzdEVsZW1lbnRDaGlsZCllPWUuZmlyc3RFbGVtZW50Q2hpbGQ7cmV0dXJuIGV9KS5hcHBlbmQodGhpcykpLHRoaXMpfSx3cmFwSW5uZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHguaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24odCl7eCh0aGlzKS53cmFwSW5uZXIoZS5jYWxsKHRoaXMsdCkpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9eCh0aGlzKSxuPXQuY29udGVudHMoKTtuLmxlbmd0aD9uLndyYXBBbGwoZSk6dC5hcHBlbmQoZSl9KX0sd3JhcDpmdW5jdGlvbihlKXt2YXIgdD14LmlzRnVuY3Rpb24oZSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihuKXt4KHRoaXMpLndyYXBBbGwodD9lLmNhbGwodGhpcyxuKTplKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7eC5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fHgodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfX0pO3ZhciB2dCx4dCxidD0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sd3Q9L15tYXJnaW4vLFR0PVJlZ0V4cCgiXigiK2IrIikoLiopJCIsImkiKSxDdD1SZWdFeHAoIl4oIitiKyIpKD8hcHgpW2EteiVdKyQiLCJpIiksa3Q9UmVnRXhwKCJeKFsrLV0pPSgiK2IrIikiLCJpIiksTnQ9e0JPRFk6ImJsb2NrIn0sRXQ9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LFN0PXtsZXR0ZXJTcGFjaW5nOjAsZm9udFdlaWdodDo0MDB9LGp0PVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sRHQ9WyJXZWJraXQiLCJPIiwiTW96IiwibXMiXTtmdW5jdGlvbiBBdChlLHQpe2lmKHQgaW4gZSlyZXR1cm4gdDt2YXIgbj10LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSkscj10LGk9RHQubGVuZ3RoO3doaWxlKGktLSlpZih0PUR0W2ldK24sdCBpbiBlKXJldHVybiB0O3JldHVybiByfWZ1bmN0aW9uIEx0KGUsdCl7cmV0dXJuIGU9dHx8ZSwibm9uZSI9PT14LmNzcyhlLCJkaXNwbGF5Iil8fCF4LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKX1mdW5jdGlvbiBxdCh0KXtyZXR1cm4gZS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCl9ZnVuY3Rpb24gSHQoZSx0KXt2YXIgbixyLGksbz1bXSxzPTAsYT1lLmxlbmd0aDtmb3IoO2E+cztzKyspcj1lW3NdLHIuc3R5bGUmJihvW3NdPXEuZ2V0KHIsIm9sZGRpc3BsYXkiKSxuPXIuc3R5bGUuZGlzcGxheSx0PyhvW3NdfHwibm9uZSIhPT1ufHwoci5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmTHQocikmJihvW3NdPXEuYWNjZXNzKHIsIm9sZGRpc3BsYXkiLFJ0KHIubm9kZU5hbWUpKSkpOm9bc118fChpPUx0KHIpLChuJiYibm9uZSIhPT1ufHwhaSkmJnEuc2V0KHIsIm9sZGRpc3BsYXkiLGk/bjp4LmNzcyhyLCJkaXNwbGF5IikpKSk7Zm9yKHM9MDthPnM7cysrKXI9ZVtzXSxyLnN0eWxlJiYodCYmIm5vbmUiIT09ci5zdHlsZS5kaXNwbGF5JiYiIiE9PXIuc3R5bGUuZGlzcGxheXx8KHIuc3R5bGUuZGlzcGxheT10P29bc118fCIiOiJub25lIikpO3JldHVybiBlfXguZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXt9LHM9MDtpZih4LmlzQXJyYXkodCkpe2ZvcihyPXF0KGUpLGk9dC5sZW5ndGg7aT5zO3MrKylvW3Rbc11dPXguY3NzKGUsdFtzXSwhMSxyKTtyZXR1cm4gb31yZXR1cm4gbiE9PXVuZGVmaW5lZD94LnN0eWxlKGUsdCxuKTp4LmNzcyhlLHQpfSxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBIdCh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBIdCh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGU/ZT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtMdCh0aGlzKT94KHRoaXMpLnNob3coKTp4KHRoaXMpLmhpZGUoKX0pfX0pLHguZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49dnQoZSwib3BhY2l0eSIpO3JldHVybiIiPT09bj8iMSI6bn19fX0sY3NzTnVtYmVyOntjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6ImNzc0Zsb2F0In0sc3R5bGU6ZnVuY3Rpb24oZSx0LG4scil7aWYoZSYmMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiZlLnN0eWxlKXt2YXIgaSxvLHMsYT14LmNhbWVsQ2FzZSh0KSx1PWUuc3R5bGU7cmV0dXJuIHQ9eC5jc3NQcm9wc1thXXx8KHguY3NzUHJvcHNbYV09QXQodSxhKSkscz14LmNzc0hvb2tzW3RdfHx4LmNzc0hvb2tzW2FdLG49PT11bmRlZmluZWQ/cyYmImdldCJpbiBzJiYoaT1zLmdldChlLCExLHIpKSE9PXVuZGVmaW5lZD9pOnVbdF06KG89dHlwZW9mIG4sInN0cmluZyI9PT1vJiYoaT1rdC5leGVjKG4pKSYmKG49KGlbMV0rMSkqaVsyXStwYXJzZUZsb2F0KHguY3NzKGUsdCkpLG89Im51bWJlciIpLG51bGw9PW58fCJudW1iZXIiPT09byYmaXNOYU4obil8fCgibnVtYmVyIiE9PW98fHguY3NzTnVtYmVyW2FdfHwobis9InB4IikseC5zdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1ufHwwIT09dC5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fCh1W3RdPSJpbmhlcml0IikscyYmInNldCJpbiBzJiYobj1zLnNldChlLG4scikpPT09dW5kZWZpbmVkfHwodVt0XT1uKSksdW5kZWZpbmVkKX19LGNzczpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLHMsYT14LmNhbWVsQ2FzZSh0KTtyZXR1cm4gdD14LmNzc1Byb3BzW2FdfHwoeC5jc3NQcm9wc1thXT1BdChlLnN0eWxlLGEpKSxzPXguY3NzSG9va3NbdF18fHguY3NzSG9va3NbYV0scyYmImdldCJpbiBzJiYoaT1zLmdldChlLCEwLG4pKSxpPT09dW5kZWZpbmVkJiYoaT12dChlLHQscikpLCJub3JtYWwiPT09aSYmdCBpbiBTdCYmKGk9U3RbdF0pLCIiPT09bnx8bj8obz1wYXJzZUZsb2F0KGkpLG49PT0hMHx8eC5pc051bWVyaWMobyk/b3x8MDppKTppfX0pLHZ0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8scz1ufHxxdChlKSxhPXM/cy5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxzW3RdOnVuZGVmaW5lZCx1PWUuc3R5bGU7cmV0dXJuIHMmJigiIiE9PWF8fHguY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfHwoYT14LnN0eWxlKGUsdCkpLEN0LnRlc3QoYSkmJnd0LnRlc3QodCkmJihyPXUud2lkdGgsaT11Lm1pbldpZHRoLG89dS5tYXhXaWR0aCx1Lm1pbldpZHRoPXUubWF4V2lkdGg9dS53aWR0aD1hLGE9cy53aWR0aCx1LndpZHRoPXIsdS5taW5XaWR0aD1pLHUubWF4V2lkdGg9bykpLGF9O2Z1bmN0aW9uIE90KGUsdCxuKXt2YXIgcj1UdC5leGVjKHQpO3JldHVybiByP01hdGgubWF4KDAsclsxXS0obnx8MCkpKyhyWzJdfHwicHgiKTp0fWZ1bmN0aW9uIEZ0KGUsdCxuLHIsaSl7dmFyIG89bj09PShyPyJib3JkZXIiOiJjb250ZW50Iik/NDoid2lkdGgiPT09dD8xOjAscz0wO2Zvcig7ND5vO28rPTIpIm1hcmdpbiI9PT1uJiYocys9eC5jc3MoZSxuK2p0W29dLCEwLGkpKSxyPygiY29udGVudCI9PT1uJiYocy09eC5jc3MoZSwicGFkZGluZyIranRbb10sITAsaSkpLCJtYXJnaW4iIT09biYmKHMtPXguY3NzKGUsImJvcmRlciIranRbb10rIldpZHRoIiwhMCxpKSkpOihzKz14LmNzcyhlLCJwYWRkaW5nIitqdFtvXSwhMCxpKSwicGFkZGluZyIhPT1uJiYocys9eC5jc3MoZSwiYm9yZGVyIitqdFtvXSsiV2lkdGgiLCEwLGkpKSk7cmV0dXJuIHN9ZnVuY3Rpb24gUHQoZSx0LG4pe3ZhciByPSEwLGk9IndpZHRoIj09PXQ/ZS5vZmZzZXRXaWR0aDplLm9mZnNldEhlaWdodCxvPXF0KGUpLHM9eC5zdXBwb3J0LmJveFNpemluZyYmImJvcmRlci1ib3giPT09eC5jc3MoZSwiYm94U2l6aW5nIiwhMSxvKTtpZigwPj1pfHxudWxsPT1pKXtpZihpPXZ0KGUsdCxvKSwoMD5pfHxudWxsPT1pKSYmKGk9ZS5zdHlsZVt0XSksQ3QudGVzdChpKSlyZXR1cm4gaTtyPXMmJih4LnN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGV8fGk9PT1lLnN0eWxlW3RdKSxpPXBhcnNlRmxvYXQoaSl8fDB9cmV0dXJuIGkrRnQoZSx0LG58fChzPyJib3JkZXIiOiJjb250ZW50IikscixvKSsicHgifWZ1bmN0aW9uIFJ0KGUpe3ZhciB0PW8sbj1OdFtlXTtyZXR1cm4gbnx8KG49TXQoZSx0KSwibm9uZSIhPT1uJiZufHwoeHQ9KHh0fHx4KCI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+IikuY3NzKCJjc3NUZXh0IiwiZGlzcGxheTpibG9jayAhaW1wb3J0YW50IikpLmFwcGVuZFRvKHQuZG9jdW1lbnRFbGVtZW50KSx0PSh4dFswXS5jb250ZW50V2luZG93fHx4dFswXS5jb250ZW50RG9jdW1lbnQpLmRvY3VtZW50LHQud3JpdGUoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxib2R5PiIpLHQuY2xvc2UoKSxuPU10KGUsdCkseHQuZGV0YWNoKCkpLE50W2VdPW4pLG59ZnVuY3Rpb24gTXQoZSx0KXt2YXIgbj14KHQuY3JlYXRlRWxlbWVudChlKSkuYXBwZW5kVG8odC5ib2R5KSxyPXguY3NzKG5bMF0sImRpc3BsYXkiKTtyZXR1cm4gbi5yZW1vdmUoKSxyfXguZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oZSx0KXt4LmNzc0hvb2tzW3RdPXtnZXQ6ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBuPzA9PT1lLm9mZnNldFdpZHRoJiZidC50ZXN0KHguY3NzKGUsImRpc3BsYXkiKSk/eC5zd2FwKGUsRXQsZnVuY3Rpb24oKXtyZXR1cm4gUHQoZSx0LHIpfSk6UHQoZSx0LHIpOnVuZGVmaW5lZH0sc2V0OmZ1bmN0aW9uKGUsbixyKXt2YXIgaT1yJiZxdChlKTtyZXR1cm4gT3QoZSxuLHI/RnQoZSx0LHIseC5zdXBwb3J0LmJveFNpemluZyYmImJvcmRlci1ib3giPT09eC5jc3MoZSwiYm94U2l6aW5nIiwhMSxpKSxpKTowKX19fSkseChmdW5jdGlvbigpe3guc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0fHwoeC5jc3NIb29rcy5tYXJnaW5SaWdodD17Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/eC5zd2FwKGUse2Rpc3BsYXk6ImlubGluZS1ibG9jayJ9LHZ0LFtlLCJtYXJnaW5SaWdodCJdKTp1bmRlZmluZWR9fSksIXguc3VwcG9ydC5waXhlbFBvc2l0aW9uJiZ4LmZuLnBvc2l0aW9uJiZ4LmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSx0KXt4LmNzc0hvb2tzW3RdPXtnZXQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj8obj12dChlLHQpLEN0LnRlc3Qobik/eChlKS5wb3NpdGlvbigpW3RdKyJweCI6bik6dW5kZWZpbmVkfX19KX0pLHguZXhwciYmeC5leHByLmZpbHRlcnMmJih4LmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oZSl7cmV0dXJuIDA+PWUub2Zmc2V0V2lkdGgmJjA+PWUub2Zmc2V0SGVpZ2h0fSx4LmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGUpe3JldHVybiF4LmV4cHIuZmlsdGVycy5oaWRkZW4oZSl9KSx4LmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihlLHQpe3guY3NzSG9va3NbZSt0XT17ZXhwYW5kOmZ1bmN0aW9uKG4pe3ZhciByPTAsaT17fSxvPSJzdHJpbmciPT10eXBlb2Ygbj9uLnNwbGl0KCIgIik6W25dO2Zvcig7ND5yO3IrKylpW2UranRbcl0rdF09b1tyXXx8b1tyLTJdfHxvWzBdO3JldHVybiBpfX0sd3QudGVzdChlKXx8KHguY3NzSG9va3NbZSt0XS5zZXQ9T3QpfSk7dmFyIFd0PS8lMjAvZywkdD0vXFtcXSQvLEJ0PS9ccj9cbi9nLEl0PS9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSx6dD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7eC5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiB4LnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9eC5wcm9wKHRoaXMsImVsZW1lbnRzIik7cmV0dXJuIGU/eC5tYWtlQXJyYXkoZSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYheCh0aGlzKS5pcygiOmRpc2FibGVkIikmJnp0LnRlc3QodGhpcy5ub2RlTmFtZSkmJiFJdC50ZXN0KGUpJiYodGhpcy5jaGVja2VkfHwhb3QudGVzdChlKSl9KS5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgbj14KHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1uP251bGw6eC5pc0FycmF5KG4pP3gubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShCdCwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2UoQnQsIlxyXG4iKX19KS5nZXQoKX19KSx4LnBhcmFtPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPWZ1bmN0aW9uKGUsdCl7dD14LmlzRnVuY3Rpb24odCk/dCgpOm51bGw9PXQ/IiI6dCxyW3IubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KX07aWYodD09PXVuZGVmaW5lZCYmKHQ9eC5hamF4U2V0dGluZ3MmJnguYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSx4LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYheC5pc1BsYWluT2JqZWN0KGUpKXguZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihuIGluIGUpX3QobixlW25dLHQsaSk7cmV0dXJuIHIuam9pbigiJiIpLnJlcGxhY2UoV3QsIisiKX07ZnVuY3Rpb24gX3QoZSx0LG4scil7dmFyIGk7aWYoeC5pc0FycmF5KHQpKXguZWFjaCh0LGZ1bmN0aW9uKHQsaSl7bnx8JHQudGVzdChlKT9yKGUsaSk6X3QoZSsiWyIrKCJvYmplY3QiPT10eXBlb2YgaT90OiIiKSsiXSIsaSxuLHIpfSk7ZWxzZSBpZihufHwib2JqZWN0IiE9PXgudHlwZSh0KSlyKGUsdCk7ZWxzZSBmb3IoaSBpbiB0KV90KGUrIlsiK2krIl0iLHRbaV0sbixyKX14LmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXt4LmZuW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKHQsbnVsbCxlLG4pOnRoaXMudHJpZ2dlcih0KX19KSx4LmZuLmV4dGVuZCh7aG92ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGUpLm1vdXNlbGVhdmUodHx8ZSl9LGJpbmQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm9uKGUsbnVsbCx0LG4pfSx1bmJpbmQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vZmYoZSxudWxsLHQpCit9LGRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKHQsZSxuLHIpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYoZSwiKioiKTp0aGlzLm9mZih0LGV8fCIqKiIsbil9fSk7dmFyIFh0LFV0LFl0PXgubm93KCksVnQ9L1w/LyxHdD0vIy4qJC8sSnQ9LyhbPyZdKV89W14mXSovLFF0PS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKSQvZ20sS3Q9L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sWnQ9L14oPzpHRVR8SEVBRCkkLyxlbj0vXlwvXC8vLHRuPS9eKFtcdy4rLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKyl8KXwpLyxubj14LmZuLmxvYWQscm49e30sb249e30sc249IiovIi5jb25jYXQoIioiKTt0cnl7VXQ9aS5ocmVmfWNhdGNoKGFuKXtVdD1vLmNyZWF0ZUVsZW1lbnQoImEiKSxVdC5ocmVmPSIiLFV0PVV0LmhyZWZ9WHQ9dG4uZXhlYyhVdC50b0xvd2VyQ2FzZSgpKXx8W107ZnVuY3Rpb24gdW4oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7InN0cmluZyIhPXR5cGVvZiB0JiYobj10LHQ9IioiKTt2YXIgcixpPTAsbz10LnRvTG93ZXJDYXNlKCkubWF0Y2godyl8fFtdO2lmKHguaXNGdW5jdGlvbihuKSl3aGlsZShyPW9baSsrXSkiKyI9PT1yWzBdPyhyPXIuc2xpY2UoMSl8fCIqIiwoZVtyXT1lW3JdfHxbXSkudW5zaGlmdChuKSk6KGVbcl09ZVtyXXx8W10pLnB1c2gobil9fWZ1bmN0aW9uIGxuKGUsdCxuLHIpe3ZhciBpPXt9LG89ZT09PW9uO2Z1bmN0aW9uIHMoYSl7dmFyIHU7cmV0dXJuIGlbYV09ITAseC5lYWNoKGVbYV18fFtdLGZ1bmN0aW9uKGUsYSl7dmFyIGw9YSh0LG4scik7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBsfHxvfHxpW2xdP28/ISh1PWwpOnVuZGVmaW5lZDoodC5kYXRhVHlwZXMudW5zaGlmdChsKSxzKGwpLCExKX0pLHV9cmV0dXJuIHModC5kYXRhVHlwZXNbMF0pfHwhaVsiKiJdJiZzKCIqIil9ZnVuY3Rpb24gY24oZSx0KXt2YXIgbixyLGk9eC5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihuIGluIHQpdFtuXSE9PXVuZGVmaW5lZCYmKChpW25dP2U6cnx8KHI9e30pKVtuXT10W25dKTtyZXR1cm4gciYmeC5leHRlbmQoITAsZSxyKSxlfXguZm4ubG9hZD1mdW5jdGlvbihlLHQsbil7aWYoInN0cmluZyIhPXR5cGVvZiBlJiZubilyZXR1cm4gbm4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciByLGksbyxzPXRoaXMsYT1lLmluZGV4T2YoIiAiKTtyZXR1cm4gYT49MCYmKHI9ZS5zbGljZShhKSxlPWUuc2xpY2UoMCxhKSkseC5pc0Z1bmN0aW9uKHQpPyhuPXQsdD11bmRlZmluZWQpOnQmJiJvYmplY3QiPT10eXBlb2YgdCYmKGk9IlBPU1QiKSxzLmxlbmd0aD4wJiZ4LmFqYXgoe3VybDplLHR5cGU6aSxkYXRhVHlwZToiaHRtbCIsZGF0YTp0fSkuZG9uZShmdW5jdGlvbihlKXtvPWFyZ3VtZW50cyxzLmh0bWwocj94KCI8ZGl2PiIpLmFwcGVuZCh4LnBhcnNlSFRNTChlKSkuZmluZChyKTplKX0pLmNvbXBsZXRlKG4mJmZ1bmN0aW9uKGUsdCl7cy5lYWNoKG4sb3x8W2UucmVzcG9uc2VUZXh0LHQsZV0pfSksdGhpc30seC5lYWNoKFsiYWpheFN0YXJ0IiwiYWpheFN0b3AiLCJhamF4Q29tcGxldGUiLCJhamF4RXJyb3IiLCJhamF4U3VjY2VzcyIsImFqYXhTZW5kIl0sZnVuY3Rpb24oZSx0KXt4LmZuW3RdPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9uKHQsZSl9fSkseC5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOlV0LHR5cGU6IkdFVCIsaXNMb2NhbDpLdC50ZXN0KFh0WzFdKSxnbG9iYWw6ITAscHJvY2Vzc0RhdGE6ITAsYXN5bmM6ITAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIsYWNjZXB0czp7IioiOnNuLHRleHQ6InRleHQvcGxhaW4iLGh0bWw6InRleHQvaHRtbCIseG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQifSxjb250ZW50czp7eG1sOi94bWwvLGh0bWw6L2h0bWwvLGpzb246L2pzb24vfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25zZUpTT04ifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6eC5wYXJzZUpTT04sInRleHQgeG1sIjp4LnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9jbihjbihlLHguYWpheFNldHRpbmdzKSx0KTpjbih4LmFqYXhTZXR0aW5ncyxlKX0sYWpheFByZWZpbHRlcjp1bihybiksYWpheFRyYW5zcG9ydDp1bihvbiksYWpheDpmdW5jdGlvbihlLHQpeyJvYmplY3QiPT10eXBlb2YgZSYmKHQ9ZSxlPXVuZGVmaW5lZCksdD10fHx7fTt2YXIgbixyLGksbyxzLGEsdSxsLGM9eC5hamF4U2V0dXAoe30sdCkscD1jLmNvbnRleHR8fGMsZj1jLmNvbnRleHQmJihwLm5vZGVUeXBlfHxwLmpxdWVyeSk/eChwKTp4LmV2ZW50LGg9eC5EZWZlcnJlZCgpLGQ9eC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksZz1jLnN0YXR1c0NvZGV8fHt9LG09e30seT17fSx2PTAsYj0iY2FuY2VsZWQiLFQ9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihlKXt2YXIgdDtpZigyPT09dil7aWYoIW8pe289e307d2hpbGUodD1RdC5leGVjKGkpKW9bdFsxXS50b0xvd2VyQ2FzZSgpXT10WzJdfXQ9b1tlLnRvTG93ZXJDYXNlKCldfXJldHVybiBudWxsPT10P251bGw6dH0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIDI9PT12P2k6bnVsbH0sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihlLHQpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gdnx8KGU9eVtuXT15W25dfHxlLG1bZV09dCksdGhpc30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gdnx8KGMubWltZVR5cGU9ZSksdGhpc30sc3RhdHVzQ29kZTpmdW5jdGlvbihlKXt2YXIgdDtpZihlKWlmKDI+dilmb3IodCBpbiBlKWdbdF09W2dbdF0sZVt0XV07ZWxzZSBULmFsd2F5cyhlW1Quc3RhdHVzXSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWV8fGI7cmV0dXJuIG4mJm4uYWJvcnQodCksaygwLHQpLHRoaXN9fTtpZihoLnByb21pc2UoVCkuY29tcGxldGU9ZC5hZGQsVC5zdWNjZXNzPVQuZG9uZSxULmVycm9yPVQuZmFpbCxjLnVybD0oKGV8fGMudXJsfHxVdCkrIiIpLnJlcGxhY2UoR3QsIiIpLnJlcGxhY2UoZW4sWHRbMV0rIi8vIiksYy50eXBlPXQubWV0aG9kfHx0LnR5cGV8fGMubWV0aG9kfHxjLnR5cGUsYy5kYXRhVHlwZXM9eC50cmltKGMuZGF0YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5tYXRjaCh3KXx8WyIiXSxudWxsPT1jLmNyb3NzRG9tYWluJiYoYT10bi5leGVjKGMudXJsLnRvTG93ZXJDYXNlKCkpLGMuY3Jvc3NEb21haW49ISghYXx8YVsxXT09PVh0WzFdJiZhWzJdPT09WHRbMl0mJihhWzNdfHwoImh0dHA6Ij09PWFbMV0/IjgwIjoiNDQzIikpPT09KFh0WzNdfHwoImh0dHA6Ij09PVh0WzFdPyI4MCI6IjQ0MyIpKSkpLGMuZGF0YSYmYy5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiBjLmRhdGEmJihjLmRhdGE9eC5wYXJhbShjLmRhdGEsYy50cmFkaXRpb25hbCkpLGxuKHJuLGMsdCxUKSwyPT09dilyZXR1cm4gVDt1PWMuZ2xvYmFsLHUmJjA9PT14LmFjdGl2ZSsrJiZ4LmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLGMudHlwZT1jLnR5cGUudG9VcHBlckNhc2UoKSxjLmhhc0NvbnRlbnQ9IVp0LnRlc3QoYy50eXBlKSxyPWMudXJsLGMuaGFzQ29udGVudHx8KGMuZGF0YSYmKHI9Yy51cmwrPShWdC50ZXN0KHIpPyImIjoiPyIpK2MuZGF0YSxkZWxldGUgYy5kYXRhKSxjLmNhY2hlPT09ITEmJihjLnVybD1KdC50ZXN0KHIpP3IucmVwbGFjZShKdCwiJDFfPSIrWXQrKyk6cisoVnQudGVzdChyKT8iJiI6Ij8iKSsiXz0iK1l0KyspKSxjLmlmTW9kaWZpZWQmJih4Lmxhc3RNb2RpZmllZFtyXSYmVC5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIseC5sYXN0TW9kaWZpZWRbcl0pLHguZXRhZ1tyXSYmVC5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIix4LmV0YWdbcl0pKSwoYy5kYXRhJiZjLmhhc0NvbnRlbnQmJmMuY29udGVudFR5cGUhPT0hMXx8dC5jb250ZW50VHlwZSkmJlQuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixjLmNvbnRlbnRUeXBlKSxULnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsYy5kYXRhVHlwZXNbMF0mJmMuYWNjZXB0c1tjLmRhdGFUeXBlc1swXV0/Yy5hY2NlcHRzW2MuZGF0YVR5cGVzWzBdXSsoIioiIT09Yy5kYXRhVHlwZXNbMF0/IiwgIitzbisiOyBxPTAuMDEiOiIiKTpjLmFjY2VwdHNbIioiXSk7Zm9yKGwgaW4gYy5oZWFkZXJzKVQuc2V0UmVxdWVzdEhlYWRlcihsLGMuaGVhZGVyc1tsXSk7aWYoYy5iZWZvcmVTZW5kJiYoYy5iZWZvcmVTZW5kLmNhbGwocCxULGMpPT09ITF8fDI9PT12KSlyZXR1cm4gVC5hYm9ydCgpO2I9ImFib3J0Ijtmb3IobCBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSlUW2xdKGNbbF0pO2lmKG49bG4ob24sYyx0LFQpKXtULnJlYWR5U3RhdGU9MSx1JiZmLnRyaWdnZXIoImFqYXhTZW5kIixbVCxjXSksYy5hc3luYyYmYy50aW1lb3V0PjAmJihzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtULmFib3J0KCJ0aW1lb3V0Iil9LGMudGltZW91dCkpO3RyeXt2PTEsbi5zZW5kKG0sayl9Y2F0Y2goQyl7aWYoISgyPnYpKXRocm93IEM7aygtMSxDKX19ZWxzZSBrKC0xLCJObyBUcmFuc3BvcnQiKTtmdW5jdGlvbiBrKGUsdCxvLGEpe3ZhciBsLG0seSxiLHcsQz10OzIhPT12JiYodj0yLHMmJmNsZWFyVGltZW91dChzKSxuPXVuZGVmaW5lZCxpPWF8fCIiLFQucmVhZHlTdGF0ZT1lPjA/NDowLGw9ZT49MjAwJiYzMDA+ZXx8MzA0PT09ZSxvJiYoYj1wbihjLFQsbykpLGI9Zm4oYyxiLFQsbCksbD8oYy5pZk1vZGlmaWVkJiYodz1ULmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIiksdyYmKHgubGFzdE1vZGlmaWVkW3JdPXcpLHc9VC5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpLHcmJih4LmV0YWdbcl09dykpLDIwND09PWV8fCJIRUFEIj09PWMudHlwZT9DPSJub2NvbnRlbnQiOjMwND09PWU/Qz0ibm90bW9kaWZpZWQiOihDPWIuc3RhdGUsbT1iLmRhdGEseT1iLmVycm9yLGw9IXkpKTooeT1DLChlfHwhQykmJihDPSJlcnJvciIsMD5lJiYoZT0wKSkpLFQuc3RhdHVzPWUsVC5zdGF0dXNUZXh0PSh0fHxDKSsiIixsP2gucmVzb2x2ZVdpdGgocCxbbSxDLFRdKTpoLnJlamVjdFdpdGgocCxbVCxDLHldKSxULnN0YXR1c0NvZGUoZyksZz11bmRlZmluZWQsdSYmZi50cmlnZ2VyKGw/ImFqYXhTdWNjZXNzIjoiYWpheEVycm9yIixbVCxjLGw/bTp5XSksZC5maXJlV2l0aChwLFtULENdKSx1JiYoZi50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtULGNdKSwtLXguYWN0aXZlfHx4LmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gVH0sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZ2V0KGUsdCxuLCJqc29uIil9LGdldFNjcmlwdDpmdW5jdGlvbihlLHQpe3JldHVybiB4LmdldChlLHVuZGVmaW5lZCx0LCJzY3JpcHQiKX19KSx4LmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oZSx0KXt4W3RdPWZ1bmN0aW9uKGUsbixyLGkpe3JldHVybiB4LmlzRnVuY3Rpb24obikmJihpPWl8fHIscj1uLG49dW5kZWZpbmVkKSx4LmFqYXgoe3VybDplLHR5cGU6dCxkYXRhVHlwZTppLGRhdGE6bixzdWNjZXNzOnJ9KX19KTtmdW5jdGlvbiBwbihlLHQsbil7dmFyIHIsaSxvLHMsYT1lLmNvbnRlbnRzLHU9ZS5kYXRhVHlwZXM7d2hpbGUoIioiPT09dVswXSl1LnNoaWZ0KCkscj09PXVuZGVmaW5lZCYmKHI9ZS5taW1lVHlwZXx8dC5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpO2lmKHIpZm9yKGkgaW4gYSlpZihhW2ldJiZhW2ldLnRlc3Qocikpe3UudW5zaGlmdChpKTticmVha31pZih1WzBdaW4gbilvPXVbMF07ZWxzZXtmb3IoaSBpbiBuKXtpZighdVswXXx8ZS5jb252ZXJ0ZXJzW2krIiAiK3VbMF1dKXtvPWk7YnJlYWt9c3x8KHM9aSl9bz1vfHxzfXJldHVybiBvPyhvIT09dVswXSYmdS51bnNoaWZ0KG8pLG5bb10pOnVuZGVmaW5lZH1mdW5jdGlvbiBmbihlLHQsbixyKXt2YXIgaSxvLHMsYSx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKHMgaW4gZS5jb252ZXJ0ZXJzKWxbcy50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbc107bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8pbz11O2Vsc2UgaWYoIioiIT09dSYmdSE9PW8pe2lmKHM9bFt1KyIgIitvXXx8bFsiKiAiK29dLCFzKWZvcihpIGluIGwpaWYoYT1pLnNwbGl0KCIgIiksYVsxXT09PW8mJihzPWxbdSsiICIrYVswXV18fGxbIiogIithWzBdXSkpe3M9PT0hMD9zPWxbaV06bFtpXSE9PSEwJiYobz1hWzBdLGMudW5zaGlmdChhWzFdKSk7YnJlYWt9aWYocyE9PSEwKWlmKHMmJmVbInRocm93cyJdKXQ9cyh0KTtlbHNlIHRyeXt0PXModCl9Y2F0Y2gocCl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6cz9wOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fXguYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovKD86amF2YXxlY21hKXNjcmlwdC99LGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZ2xvYmFsRXZhbChlKSxlfX19KSx4LmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsZnVuY3Rpb24oZSl7ZS5jYWNoZT09PXVuZGVmaW5lZCYmKGUuY2FjaGU9ITEpLGUuY3Jvc3NEb21haW4mJihlLnR5cGU9IkdFVCIpfSkseC5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGUpe2lmKGUuY3Jvc3NEb21haW4pe3ZhciB0LG47cmV0dXJue3NlbmQ6ZnVuY3Rpb24ocixpKXt0PXgoIjxzY3JpcHQ+IikucHJvcCh7YXN5bmM6ITAsY2hhcnNldDplLnNjcmlwdENoYXJzZXQsc3JjOmUudXJsfSkub24oImxvYWQgZXJyb3IiLG49ZnVuY3Rpb24oZSl7dC5yZW1vdmUoKSxuPW51bGwsZSYmaSgiZXJyb3IiPT09ZS50eXBlPzQwNDoyMDAsZS50eXBlKX0pLG8uaGVhZC5hcHBlbmRDaGlsZCh0WzBdKX0sYWJvcnQ6ZnVuY3Rpb24oKXtuJiZuKCl9fX19KTt2YXIgaG49W10sZG49Lyg9KVw/KD89JnwkKXxcP1w/Lzt4LmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9aG4ucG9wKCl8fHguZXhwYW5kbysiXyIrWXQrKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLHguYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24odCxuLHIpe3ZhciBpLG8scyxhPXQuanNvbnAhPT0hMSYmKGRuLnRlc3QodC51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgdC5kYXRhJiYhKHQuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmZG4udGVzdCh0LmRhdGEpJiYiZGF0YSIpO3JldHVybiBhfHwianNvbnAiPT09dC5kYXRhVHlwZXNbMF0/KGk9dC5qc29ucENhbGxiYWNrPXguaXNGdW5jdGlvbih0Lmpzb25wQ2FsbGJhY2spP3QuanNvbnBDYWxsYmFjaygpOnQuanNvbnBDYWxsYmFjayxhP3RbYV09dFthXS5yZXBsYWNlKGRuLCIkMSIraSk6dC5qc29ucCE9PSExJiYodC51cmwrPShWdC50ZXN0KHQudXJsKT8iJiI6Ij8iKSt0Lmpzb25wKyI9IitpKSx0LmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gc3x8eC5lcnJvcihpKyIgd2FzIG5vdCBjYWxsZWQiKSxzWzBdfSx0LmRhdGFUeXBlc1swXT0ianNvbiIsbz1lW2ldLGVbaV09ZnVuY3Rpb24oKXtzPWFyZ3VtZW50c30sci5hbHdheXMoZnVuY3Rpb24oKXtlW2ldPW8sdFtpXSYmKHQuanNvbnBDYWxsYmFjaz1uLmpzb25wQ2FsbGJhY2ssaG4ucHVzaChpKSkscyYmeC5pc0Z1bmN0aW9uKG8pJiZvKHNbMF0pLHM9bz11bmRlZmluZWR9KSwic2NyaXB0Iik6dW5kZWZpbmVkfSkseC5hamF4U2V0dGluZ3MueGhyPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9Y2F0Y2goZSl7fX07dmFyIGduPXguYWpheFNldHRpbmdzLnhocigpLG1uPXswOjIwMCwxMjIzOjIwNH0seW49MCx2bj17fTtlLkFjdGl2ZVhPYmplY3QmJngoZSkub24oInVubG9hZCIsZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdm4pdm5bZV0oKTt2bj11bmRlZmluZWR9KSx4LnN1cHBvcnQuY29ycz0hIWduJiYid2l0aENyZWRlbnRpYWxzImluIGduLHguc3VwcG9ydC5hamF4PWduPSEhZ24seC5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB4LnN1cHBvcnQuY29yc3x8Z24mJiFlLmNyb3NzRG9tYWluP3tzZW5kOmZ1bmN0aW9uKG4scil7dmFyIGksbyxzPWUueGhyKCk7aWYocy5vcGVuKGUudHlwZSxlLnVybCxlLmFzeW5jLGUudXNlcm5hbWUsZS5wYXNzd29yZCksZS54aHJGaWVsZHMpZm9yKGkgaW4gZS54aHJGaWVsZHMpc1tpXT1lLnhockZpZWxkc1tpXTtlLm1pbWVUeXBlJiZzLm92ZXJyaWRlTWltZVR5cGUmJnMub3ZlcnJpZGVNaW1lVHlwZShlLm1pbWVUeXBlKSxlLmNyb3NzRG9tYWlufHxuWyJYLVJlcXVlc3RlZC1XaXRoIl18fChuWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7Zm9yKGkgaW4gbilzLnNldFJlcXVlc3RIZWFkZXIoaSxuW2ldKTt0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3QmJihkZWxldGUgdm5bb10sdD1zLm9ubG9hZD1zLm9uZXJyb3I9bnVsbCwiYWJvcnQiPT09ZT9zLmFib3J0KCk6ImVycm9yIj09PWU/cihzLnN0YXR1c3x8NDA0LHMuc3RhdHVzVGV4dCk6cihtbltzLnN0YXR1c118fHMuc3RhdHVzLHMuc3RhdHVzVGV4dCwic3RyaW5nIj09dHlwZW9mIHMucmVzcG9uc2VUZXh0P3t0ZXh0OnMucmVzcG9uc2VUZXh0fTp1bmRlZmluZWQscy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0scy5vbmxvYWQ9dCgpLHMub25lcnJvcj10KCJlcnJvciIpLHQ9dm5bbz15bisrXT10KCJhYm9ydCIpLHMuc2VuZChlLmhhc0NvbnRlbnQmJmUuZGF0YXx8bnVsbCl9LGFib3J0OmZ1bmN0aW9uKCl7dCYmdCgpfX06dW5kZWZpbmVkfSk7dmFyIHhuLGJuLHduPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxUbj1SZWdFeHAoIl4oPzooWystXSk9fCkoIitiKyIpKFthLXolXSopJCIsImkiKSxDbj0vcXVldWVIb29rcyQvLGtuPVtBbl0sTm49eyIqIjpbZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCkscj1uLmN1cigpLGk9VG4uZXhlYyh0KSxvPWkmJmlbM118fCh4LmNzc051bWJlcltlXT8iIjoicHgiKSxzPSh4LmNzc051bWJlcltlXXx8InB4IiE9PW8mJityKSYmVG4uZXhlYyh4LmNzcyhuLmVsZW0sZSkpLGE9MSx1PTIwO2lmKHMmJnNbM10hPT1vKXtvPW98fHNbM10saT1pfHxbXSxzPStyfHwxO2RvIGE9YXx8Ii41IixzLz1hLHguc3R5bGUobi5lbGVtLGUscytvKTt3aGlsZShhIT09KGE9bi5jdXIoKS9yKSYmMSE9PWEmJi0tdSl9cmV0dXJuIGkmJihzPW4uc3RhcnQ9K3N8fCtyfHwwLG4udW5pdD1vLG4uZW5kPWlbMV0/cysoaVsxXSsxKSppWzJdOitpWzJdKSxufV19O2Z1bmN0aW9uIEVuKCl7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXt4bj11bmRlZmluZWR9KSx4bj14Lm5vdygpfWZ1bmN0aW9uIFNuKGUsdCxuKXt2YXIgcixpPShOblt0XXx8W10pLmNvbmNhdChOblsiKiJdKSxvPTAscz1pLmxlbmd0aDtmb3IoO3M+bztvKyspaWYocj1pW29dLmNhbGwobix0LGUpKXJldHVybiByfWZ1bmN0aW9uIGpuKGUsdCxuKXt2YXIgcixpLG89MCxzPWtuLmxlbmd0aCxhPXguRGVmZXJyZWQoKS5hbHdheXMoZnVuY3Rpb24oKXtkZWxldGUgdS5lbGVtfSksdT1mdW5jdGlvbigpe2lmKGkpcmV0dXJuITE7dmFyIHQ9eG58fEVuKCksbj1NYXRoLm1heCgwLGwuc3RhcnRUaW1lK2wuZHVyYXRpb24tdCkscj1uL2wuZHVyYXRpb258fDAsbz0xLXIscz0wLHU9bC50d2VlbnMubGVuZ3RoO2Zvcig7dT5zO3MrKylsLnR3ZWVuc1tzXS5ydW4obyk7cmV0dXJuIGEubm90aWZ5V2l0aChlLFtsLG8sbl0pLDE+byYmdT9uOihhLnJlc29sdmVXaXRoKGUsW2xdKSwhMSl9LGw9YS5wcm9taXNlKHtlbGVtOmUscHJvcHM6eC5leHRlbmQoe30sdCksb3B0czp4LmV4dGVuZCghMCx7c3BlY2lhbEVhc2luZzp7fX0sbiksb3JpZ2luYWxQcm9wZXJ0aWVzOnQsb3JpZ2luYWxPcHRpb25zOm4sc3RhcnRUaW1lOnhufHxFbigpLGR1cmF0aW9uOm4uZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKHQsbil7dmFyIHI9eC5Ud2VlbihlLGwub3B0cyx0LG4sbC5vcHRzLnNwZWNpYWxFYXNpbmdbdF18fGwub3B0cy5lYXNpbmcpO3JldHVybiBsLnR3ZWVucy5wdXNoKHIpLHJ9LHN0b3A6ZnVuY3Rpb24odCl7dmFyIG49MCxyPXQ/bC50d2VlbnMubGVuZ3RoOjA7aWYoaSlyZXR1cm4gdGhpcztmb3IoaT0hMDtyPm47bisrKWwudHdlZW5zW25dLnJ1bigxKTtyZXR1cm4gdD9hLnJlc29sdmVXaXRoKGUsW2wsdF0pOmEucmVqZWN0V2l0aChlLFtsLHRdKSx0aGlzfX0pLGM9bC5wcm9wcztmb3IoRG4oYyxsLm9wdHMuc3BlY2lhbEVhc2luZyk7cz5vO28rKylpZihyPWtuW29dLmNhbGwobCxlLGMsbC5vcHRzKSlyZXR1cm4gcjtyZXR1cm4geC5tYXAoYyxTbixsKSx4LmlzRnVuY3Rpb24obC5vcHRzLnN0YXJ0KSYmbC5vcHRzLnN0YXJ0LmNhbGwoZSxsKSx4LmZ4LnRpbWVyKHguZXh0ZW5kKHUse2VsZW06ZSxhbmltOmwscXVldWU6bC5vcHRzLnF1ZXVlfSkpLGwucHJvZ3Jlc3MobC5vcHRzLnByb2dyZXNzKS5kb25lKGwub3B0cy5kb25lLGwub3B0cy5jb21wbGV0ZSkuZmFpbChsLm9wdHMuZmFpbCkuYWx3YXlzKGwub3B0cy5hbHdheXMpfWZ1bmN0aW9uIERuKGUsdCl7dmFyIG4scixpLG8scztmb3IobiBpbiBlKWlmKHI9eC5jYW1lbENhc2UobiksaT10W3JdLG89ZVtuXSx4LmlzQXJyYXkobykmJihpPW9bMV0sbz1lW25dPW9bMF0pLG4hPT1yJiYoZVtyXT1vLGRlbGV0ZSBlW25dKSxzPXguY3NzSG9va3Nbcl0scyYmImV4cGFuZCJpbiBzKXtvPXMuZXhwYW5kKG8pLGRlbGV0ZSBlW3JdO2ZvcihuIGluIG8pbiBpbiBlfHwoZVtuXT1vW25dLHRbbl09aSl9ZWxzZSB0W3JdPWl9eC5BbmltYXRpb249eC5leHRlbmQoam4se3R3ZWVuZXI6ZnVuY3Rpb24oZSx0KXt4LmlzRnVuY3Rpb24oZSk/KHQ9ZSxlPVsiKiJdKTplPWUuc3BsaXQoIiAiKTt2YXIgbixyPTAsaT1lLmxlbmd0aDtmb3IoO2k+cjtyKyspbj1lW3JdLE5uW25dPU5uW25dfHxbXSxObltuXS51bnNoaWZ0KHQpfSxwcmVmaWx0ZXI6ZnVuY3Rpb24oZSx0KXt0P2tuLnVuc2hpZnQoZSk6a24ucHVzaChlKX19KTtmdW5jdGlvbiBBbihlLHQsbil7dmFyIHIsaSxvLHMsYSx1LGw9dGhpcyxjPXt9LHA9ZS5zdHlsZSxmPWUubm9kZVR5cGUmJkx0KGUpLGg9cS5nZXQoZSwiZnhzaG93Iik7bi5xdWV1ZXx8KGE9eC5fcXVldWVIb29rcyhlLCJmeCIpLG51bGw9PWEudW5xdWV1ZWQmJihhLnVucXVldWVkPTAsdT1hLmVtcHR5LmZpcmUsYS5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7YS51bnF1ZXVlZHx8dSgpfSksYS51bnF1ZXVlZCsrLGwuYWx3YXlzKGZ1bmN0aW9uKCl7bC5hbHdheXMoZnVuY3Rpb24oKXthLnVucXVldWVkLS0seC5xdWV1ZShlLCJmeCIpLmxlbmd0aHx8YS5lbXB0eS5maXJlKCl9KX0pKSwxPT09ZS5ub2RlVHlwZSYmKCJoZWlnaHQiaW4gdHx8IndpZHRoImluIHQpJiYobi5vdmVyZmxvdz1bcC5vdmVyZmxvdyxwLm92ZXJmbG93WCxwLm92ZXJmbG93WV0sImlubGluZSI9PT14LmNzcyhlLCJkaXNwbGF5IikmJiJub25lIj09PXguY3NzKGUsImZsb2F0IikmJihwLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxuLm92ZXJmbG93JiYocC5vdmVyZmxvdz0iaGlkZGVuIixsLmFsd2F5cyhmdW5jdGlvbigpe3Aub3ZlcmZsb3c9bi5vdmVyZmxvd1swXSxwLm92ZXJmbG93WD1uLm92ZXJmbG93WzFdLHAub3ZlcmZsb3dZPW4ub3ZlcmZsb3dbMl19KSk7Zm9yKHIgaW4gdClpZihpPXRbcl0sd24uZXhlYyhpKSl7aWYoZGVsZXRlIHRbcl0sbz1vfHwidG9nZ2xlIj09PWksaT09PShmPyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1pfHwhaHx8aFtyXT09PXVuZGVmaW5lZCljb250aW51ZTtmPSEwfWNbcl09aCYmaFtyXXx8eC5zdHlsZShlLHIpfWlmKCF4LmlzRW1wdHlPYmplY3QoYykpe2g/ImhpZGRlbiJpbiBoJiYoZj1oLmhpZGRlbik6aD1xLmFjY2VzcyhlLCJmeHNob3ciLHt9KSxvJiYoaC5oaWRkZW49IWYpLGY/eChlKS5zaG93KCk6bC5kb25lKGZ1bmN0aW9uKCl7eChlKS5oaWRlKCl9KSxsLmRvbmUoZnVuY3Rpb24oKXt2YXIgdDtxLnJlbW92ZShlLCJmeHNob3ciKTtmb3IodCBpbiBjKXguc3R5bGUoZSx0LGNbdF0pfSk7Zm9yKHIgaW4gYylzPVNuKGY/aFtyXTowLHIsbCksciBpbiBofHwoaFtyXT1zLnN0YXJ0LGYmJihzLmVuZD1zLnN0YXJ0LHMuc3RhcnQ9IndpZHRoIj09PXJ8fCJoZWlnaHQiPT09cj8xOjApKX19ZnVuY3Rpb24gTG4oZSx0LG4scixpKXtyZXR1cm4gbmV3IExuLnByb3RvdHlwZS5pbml0KGUsdCxuLHIsaSl9eC5Ud2Vlbj1MbixMbi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkxuLGluaXQ6ZnVuY3Rpb24oZSx0LG4scixpLG8pe3RoaXMuZWxlbT1lLHRoaXMucHJvcD1uLHRoaXMuZWFzaW5nPWl8fCJzd2luZyIsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PW98fCh4LmNzc051bWJlcltuXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGU9TG4ucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGUmJmUuZ2V0P2UuZ2V0KHRoaXMpOkxuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPUxuLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLnBvcz10PXRoaXMub3B0aW9ucy5kdXJhdGlvbj94LmVhc2luZ1t0aGlzLmVhc2luZ10oZSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qZSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTplLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0K3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLG4mJm4uc2V0P24uc2V0KHRoaXMpOkxuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LExuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1Mbi5wcm90b3R5cGUsTG4ucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBudWxsPT1lLmVsZW1bZS5wcm9wXXx8ZS5lbGVtLnN0eWxlJiZudWxsIT1lLmVsZW0uc3R5bGVbZS5wcm9wXT8odD14LmNzcyhlLmVsZW0sZS5wcm9wLCIiKSx0JiYiYXV0byIhPT10P3Q6MCk6ZS5lbGVtW2UucHJvcF19LHNldDpmdW5jdGlvbihlKXt4LmZ4LnN0ZXBbZS5wcm9wXT94LmZ4LnN0ZXBbZS5wcm9wXShlKTplLmVsZW0uc3R5bGUmJihudWxsIT1lLmVsZW0uc3R5bGVbeC5jc3NQcm9wc1tlLnByb3BdXXx8eC5jc3NIb29rc1tlLnByb3BdKT94LnN0eWxlKGUuZWxlbSxlLnByb3AsZS5ub3crZS51bml0KTplLmVsZW1bZS5wcm9wXT1lLm5vd319fSxMbi5wcm9wSG9va3Muc2Nyb2xsVG9wPUxuLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oZSl7ZS5lbGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtlLnByb3BdPWUubm93KX19LHguZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24oZSx0KXt2YXIgbj14LmZuW3RdO3guZm5bdF09ZnVuY3Rpb24oZSxyLGkpe3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PXR5cGVvZiBlP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZShxbih0LCEwKSxlLHIsaSl9fSkseC5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5maWx0ZXIoTHQpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6dH0sZSxuLHIpfSxhbmltYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXguaXNFbXB0eU9iamVjdChlKSxvPXguc3BlZWQodCxuLHIpLHM9ZnVuY3Rpb24oKXt2YXIgdD1qbih0aGlzLHguZXh0ZW5kKHt9LGUpLG8pOyhpfHxxLmdldCh0aGlzLCJmaW5pc2giKSkmJnQuc3RvcCghMCl9O3JldHVybiBzLmZpbmlzaD1zLGl8fG8ucXVldWU9PT0hMT90aGlzLmVhY2gocyk6dGhpcy5xdWV1ZShvLnF1ZXVlLHMpfSxzdG9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdD1lLnN0b3A7ZGVsZXRlIGUuc3RvcCx0KG4pfTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGUmJihuPXQsdD1lLGU9dW5kZWZpbmVkKSx0JiZlIT09ITEmJnRoaXMucXVldWUoZXx8ImZ4IixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ITAsaT1udWxsIT1lJiZlKyJxdWV1ZUhvb2tzIixvPXgudGltZXJzLHM9cS5nZXQodGhpcyk7aWYoaSlzW2ldJiZzW2ldLnN0b3AmJnIoc1tpXSk7ZWxzZSBmb3IoaSBpbiBzKXNbaV0mJnNbaV0uc3RvcCYmQ24udGVzdChpKSYmcihzW2ldKTtmb3IoaT1vLmxlbmd0aDtpLS07KW9baV0uZWxlbSE9PXRoaXN8fG51bGwhPWUmJm9baV0ucXVldWUhPT1lfHwob1tpXS5hbmltLnN0b3AobiksdD0hMSxvLnNwbGljZShpLDEpKTsodHx8IW4pJiZ4LmRlcXVldWUodGhpcyxlKX0pfSxmaW5pc2g6ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT0hMSYmKGU9ZXx8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQsbj1xLmdldCh0aGlzKSxyPW5bZSsicXVldWUiXSxpPW5bZSsicXVldWVIb29rcyJdLG89eC50aW1lcnMscz1yP3IubGVuZ3RoOjA7Zm9yKG4uZmluaXNoPSEwLHgucXVldWUodGhpcyxlLFtdKSxpJiZpLnN0b3AmJmkuc3RvcC5jYWxsKHRoaXMsITApLHQ9by5sZW5ndGg7dC0tOylvW3RdLmVsZW09PT10aGlzJiZvW3RdLnF1ZXVlPT09ZSYmKG9bdF0uYW5pbS5zdG9wKCEwKSxvLnNwbGljZSh0LDEpKTtmb3IodD0wO3M+dDt0Kyspclt0XSYmclt0XS5maW5pc2gmJnJbdF0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIG4uZmluaXNofSl9fSk7ZnVuY3Rpb24gcW4oZSx0KXt2YXIgbixyPXtoZWlnaHQ6ZX0saT0wO2Zvcih0PXQ/MTowOzQ+aTtpKz0yLXQpbj1qdFtpXSxyWyJtYXJnaW4iK25dPXJbInBhZGRpbmciK25dPWU7cmV0dXJuIHQmJihyLm9wYWNpdHk9ci53aWR0aD1lKSxyfXguZWFjaCh7c2xpZGVEb3duOnFuKCJzaG93Iiksc2xpZGVVcDpxbigiaGlkZSIpLHNsaWRlVG9nZ2xlOnFuKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGUsdCl7eC5mbltlXT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh0LGUsbixyKX19KSx4LnNwZWVkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lJiYib2JqZWN0Ij09dHlwZW9mIGU/eC5leHRlbmQoe30sZSk6e2NvbXBsZXRlOm58fCFuJiZ0fHx4LmlzRnVuY3Rpb24oZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIXguaXNGdW5jdGlvbih0KSYmdH07cmV0dXJuIHIuZHVyYXRpb249eC5meC5vZmY/MDoibnVtYmVyIj09dHlwZW9mIHIuZHVyYXRpb24/ci5kdXJhdGlvbjpyLmR1cmF0aW9uIGluIHguZnguc3BlZWRzP3guZnguc3BlZWRzW3IuZHVyYXRpb25dOnguZnguc3BlZWRzLl9kZWZhdWx0LChudWxsPT1yLnF1ZXVlfHxyLnF1ZXVlPT09ITApJiYoci5xdWV1ZT0iZngiKSxyLm9sZD1yLmNvbXBsZXRlLHIuY29tcGxldGU9ZnVuY3Rpb24oKXt4LmlzRnVuY3Rpb24oci5vbGQpJiZyLm9sZC5jYWxsKHRoaXMpLHIucXVldWUmJnguZGVxdWV1ZSh0aGlzLHIucXVldWUpfSxyfSx4LmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxzd2luZzpmdW5jdGlvbihlKXtyZXR1cm4uNS1NYXRoLmNvcyhlKk1hdGguUEkpLzJ9fSx4LnRpbWVycz1bXSx4LmZ4PUxuLnByb3RvdHlwZS5pbml0LHguZngudGljaz1mdW5jdGlvbigpe3ZhciBlLHQ9eC50aW1lcnMsbj0wO2Zvcih4bj14Lm5vdygpO3QubGVuZ3RoPm47bisrKWU9dFtuXSxlKCl8fHRbbl0hPT1lfHx0LnNwbGljZShuLS0sMSk7dC5sZW5ndGh8fHguZnguc3RvcCgpLHhuPXVuZGVmaW5lZH0seC5meC50aW1lcj1mdW5jdGlvbihlKXtlKCkmJngudGltZXJzLnB1c2goZSkmJnguZnguc3RhcnQoKX0seC5meC5pbnRlcnZhbD0xMyx4LmZ4LnN0YXJ0PWZ1bmN0aW9uKCl7Ym58fChibj1zZXRJbnRlcnZhbCh4LmZ4LnRpY2sseC5meC5pbnRlcnZhbCkpfSx4LmZ4LnN0b3A9ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKGJuKSxibj1udWxsfSx4LmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSx4LmZ4LnN0ZXA9e30seC5leHByJiZ4LmV4cHIuZmlsdGVycyYmKHguZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGUpe3JldHVybiB4LmdyZXAoeC50aW1lcnMsZnVuY3Rpb24odCl7cmV0dXJuIGU9PT10LmVsZW19KS5sZW5ndGh9KSx4LmZuLm9mZnNldD1mdW5jdGlvbihlKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlPT09dW5kZWZpbmVkP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3gub2Zmc2V0LnNldE9mZnNldCh0aGlzLGUsdCl9KTt2YXIgdCxuLGk9dGhpc1swXSxvPXt0b3A6MCxsZWZ0OjB9LHM9aSYmaS5vd25lckRvY3VtZW50O2lmKHMpcmV0dXJuIHQ9cy5kb2N1bWVudEVsZW1lbnQseC5jb250YWlucyh0LGkpPyh0eXBlb2YgaS5nZXRCb3VuZGluZ0NsaWVudFJlY3QhPT1yJiYobz1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxuPUhuKHMpLHt0b3A6by50b3Arbi5wYWdlWU9mZnNldC10LmNsaWVudFRvcCxsZWZ0Om8ubGVmdCtuLnBhZ2VYT2Zmc2V0LXQuY2xpZW50TGVmdH0pOm99LHgub2Zmc2V0PXtzZXRPZmZzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzLGEsdSxsLGM9eC5jc3MoZSwicG9zaXRpb24iKSxwPXgoZSksZj17fTsic3RhdGljIj09PWMmJihlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLGE9cC5vZmZzZXQoKSxvPXguY3NzKGUsInRvcCIpLHU9eC5jc3MoZSwibGVmdCIpLGw9KCJhYnNvbHV0ZSI9PT1jfHwiZml4ZWQiPT09YykmJihvK3UpLmluZGV4T2YoImF1dG8iKT4tMSxsPyhyPXAucG9zaXRpb24oKSxzPXIudG9wLGk9ci5sZWZ0KToocz1wYXJzZUZsb2F0KG8pfHwwLGk9cGFyc2VGbG9hdCh1KXx8MCkseC5pc0Z1bmN0aW9uKHQpJiYodD10LmNhbGwoZSxuLGEpKSxudWxsIT10LnRvcCYmKGYudG9wPXQudG9wLWEudG9wK3MpLG51bGwhPXQubGVmdCYmKGYubGVmdD10LmxlZnQtYS5sZWZ0K2kpLCJ1c2luZyJpbiB0P3QudXNpbmcuY2FsbChlLGYpOnAuY3NzKGYpfX0seC5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGUsdCxuPXRoaXNbMF0scj17dG9wOjAsbGVmdDowfTtyZXR1cm4iZml4ZWQiPT09eC5jc3MobiwicG9zaXRpb24iKT90PW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6KGU9dGhpcy5vZmZzZXRQYXJlbnQoKSx0PXRoaXMub2Zmc2V0KCkseC5ub2RlTmFtZShlWzBdLCJodG1sIil8fChyPWUub2Zmc2V0KCkpLHIudG9wKz14LmNzcyhlWzBdLCJib3JkZXJUb3BXaWR0aCIsITApLHIubGVmdCs9eC5jc3MoZVswXSwiYm9yZGVyTGVmdFdpZHRoIiwhMCkpLHt0b3A6dC50b3Atci50b3AteC5jc3MobiwibWFyZ2luVG9wIiwhMCksbGVmdDp0LmxlZnQtci5sZWZ0LXguY3NzKG4sIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9mZnNldFBhcmVudHx8czt3aGlsZShlJiYheC5ub2RlTmFtZShlLCJodG1sIikmJiJzdGF0aWMiPT09eC5jc3MoZSwicG9zaXRpb24iKSllPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxzfSl9fSkseC5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKHQsbil7dmFyIHI9InBhZ2VZT2Zmc2V0Ij09PW47eC5mblt0XT1mdW5jdGlvbihpKXtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlvbih0LGksbyl7dmFyIHM9SG4odCk7cmV0dXJuIG89PT11bmRlZmluZWQ/cz9zW25dOnRbaV06KHM/cy5zY3JvbGxUbyhyP2UucGFnZVhPZmZzZXQ6byxyP286ZS5wYWdlWU9mZnNldCk6dFtpXT1vLHVuZGVmaW5lZCl9LHQsaSxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pO2Z1bmN0aW9uIEhuKGUpe3JldHVybiB4LmlzV2luZG93KGUpP2U6OT09PWUubm9kZVR5cGUmJmUuZGVmYXVsdFZpZXd9eC5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oZSx0KXt4LmVhY2goe3BhZGRpbmc6ImlubmVyIitlLGNvbnRlbnQ6dCwiIjoib3V0ZXIiK2V9LGZ1bmN0aW9uKG4scil7eC5mbltyXT1mdW5jdGlvbihyLGkpe3ZhciBvPWFyZ3VtZW50cy5sZW5ndGgmJihufHwiYm9vbGVhbiIhPXR5cGVvZiByKSxzPW58fChyPT09ITB8fGk9PT0hMD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24odCxuLHIpe3ZhciBpO3JldHVybiB4LmlzV2luZG93KHQpP3QuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2VdOjk9PT10Lm5vZGVUeXBlPyhpPXQuZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KHQuYm9keVsic2Nyb2xsIitlXSxpWyJzY3JvbGwiK2VdLHQuYm9keVsib2Zmc2V0IitlXSxpWyJvZmZzZXQiK2VdLGlbImNsaWVudCIrZV0pKTpyPT09dW5kZWZpbmVkP3guY3NzKHQsbixzKTp4LnN0eWxlKHQsbixyLHMpfSx0LG8/cjp1bmRlZmluZWQsbyxudWxsKX19KX0pLHguZm4uc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0seC5mbi5hbmRTZWxmPXguZm4uYWRkQmFjaywib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPXg6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSwib2JqZWN0Ij09dHlwZW9mIGUmJiJvYmplY3QiPT10eXBlb2YgZS5kb2N1bWVudCYmKGUualF1ZXJ5PWUuJD14KX0pKHdpbmRvdyk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanF1ZXJ5LTIuMC4zLm1pbi5tYXAgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanF1ZXJ5LTIuMC4zLm1pbi5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVkZWNkMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnktMi4wLjMubWluLm1hcApAQCAtMCwwICsxIEBACit7InZlcnNpb24iOjMsImZpbGUiOiJqcXVlcnktMi4wLjMubWluLmpzIiwic291cmNlcyI6WyJqcXVlcnktMi4wLjMuanMiXSwibmFtZXMiOlsid2luZG93IiwidW5kZWZpbmVkIiwicm9vdGpRdWVyeSIsInJlYWR5TGlzdCIsImNvcmVfc3RydW5kZWZpbmVkIiwibG9jYXRpb24iLCJkb2N1bWVudCIsImRvY0VsZW0iLCJkb2N1bWVudEVsZW1lbnQiLCJfalF1ZXJ5IiwialF1ZXJ5IiwiXyQiLCIkIiwiY2xhc3MydHlwZSIsImNvcmVfZGVsZXRlZElkcyIsImNvcmVfdmVyc2lvbiIsImNvcmVfY29uY2F0IiwiY29uY2F0IiwiY29yZV9wdXNoIiwicHVzaCIsImNvcmVfc2xpY2UiLCJzbGljZSIsImNvcmVfaW5kZXhPZiIsImluZGV4T2YiLCJjb3JlX3RvU3RyaW5nIiwidG9TdHJpbmciLCJjb3JlX2hhc093biIsImhhc093blByb3BlcnR5IiwiY29yZV90cmltIiwidHJpbSIsInNlbGVjdG9yIiwiY29udGV4dCIsImZuIiwiaW5pdCIsImNvcmVfcG51bSIsInNvdXJjZSIsImNvcmVfcm5vdHdoaXRlIiwicnF1aWNrRXhwciIsInJzaW5nbGVUYWciLCJybXNQcmVmaXgiLCJyZGFzaEFscGhhIiwiZmNhbWVsQ2FzZSIsImFsbCIsImxldHRlciIsInRvVXBwZXJDYXNlIiwiY29tcGxldGVkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlYWR5IiwicHJvdG90eXBlIiwianF1ZXJ5IiwiY29uc3RydWN0b3IiLCJtYXRjaCIsImVsZW0iLCJ0aGlzIiwiY2hhckF0IiwibGVuZ3RoIiwiZXhlYyIsImZpbmQiLCJtZXJnZSIsInBhcnNlSFRNTCIsIm5vZGVUeXBlIiwib3duZXJEb2N1bWVudCIsInRlc3QiLCJpc1BsYWluT2JqZWN0IiwiaXNGdW5jdGlvbiIsImF0dHIiLCJnZXRFbGVtZW50QnlJZCIsInBhcmVudE5vZGUiLCJtYWtlQXJyYXkiLCJ0b0FycmF5IiwiY2FsbCIsImdldCIsIm51bSIsInB1c2hTdGFjayIsImVsZW1zIiwicmV0IiwicHJldk9iamVjdCIsImVhY2giLCJjYWxsYmFjayIsImFyZ3MiLCJwcm9taXNlIiwiZG9uZSIsImFwcGx5IiwiYXJndW1lbnRzIiwiZmlyc3QiLCJlcSIsImxhc3QiLCJpIiwibGVuIiwiaiIsIm1hcCIsImVuZCIsInNvcnQiLCJzcGxpY2UiLCJleHRlbmQiLCJvcHRpb25zIiwibmFtZSIsInNyYyIsImNvcHkiLCJjb3B5SXNBcnJheSIsImNsb25lIiwidGFyZ2V0IiwiZGVlcCIsImlzQXJyYXkiLCJleHBhbmRvIiwiTWF0aCIsInJhbmRvbSIsInJlcGxhY2UiLCJub0NvbmZsaWN0IiwiaXNSZWFkeSIsInJlYWR5V2FpdCIsImhvbGRSZWFkeSIsImhvbGQiLCJ3YWl0IiwicmVzb2x2ZVdpdGgiLCJ0cmlnZ2VyIiwib2ZmIiwib2JqIiwidHlwZSIsIkFycmF5IiwiaXNXaW5kb3ciLCJpc051bWVyaWMiLCJpc05hTiIsInBhcnNlRmxvYXQiLCJpc0Zpbml0ZSIsIlN0cmluZyIsImUiLCJpc0VtcHR5T2JqZWN0IiwiZXJyb3IiLCJtc2ciLCJFcnJvciIsImRhdGEiLCJrZWVwU2NyaXB0cyIsInBhcnNlZCIsInNjcmlwdHMiLCJjcmVhdGVFbGVtZW50IiwiYnVpbGRGcmFnbWVudCIsInJlbW92ZSIsImNoaWxkTm9kZXMiLCJwYXJzZUpTT04iLCJKU09OIiwicGFyc2UiLCJwYXJzZVhNTCIsInhtbCIsInRtcCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwibm9vcCIsImdsb2JhbEV2YWwiLCJjb2RlIiwic2NyaXB0IiwiaW5kaXJlY3QiLCJldmFsIiwidGV4dCIsImhlYWQiLCJhcHBlbmRDaGlsZCIsInJlbW92ZUNoaWxkIiwiY2FtZWxDYXNlIiwic3RyaW5nIiwibm9kZU5hbWUiLCJ0b0xvd2VyQ2FzZSIsInZhbHVlIiwiaXNBcnJheWxpa2UiLCJhcnIiLCJyZXN1bHRzIiwiT2JqZWN0IiwiaW5BcnJheSIsInNlY29uZCIsImwiLCJncmVwIiwiaW52IiwicmV0VmFsIiwiYXJnIiwiZ3VpZCIsInByb3h5IiwiYWNjZXNzIiwia2V5IiwiY2hhaW5hYmxlIiwiZW1wdHlHZXQiLCJyYXciLCJidWxrIiwibm93IiwiRGF0ZSIsInN3YXAiLCJvbGQiLCJzdHlsZSIsIkRlZmVycmVkIiwicmVhZHlTdGF0ZSIsInNldFRpbWVvdXQiLCJhZGRFdmVudExpc3RlbmVyIiwic3BsaXQiLCJzdXBwb3J0IiwiY2FjaGVkcnVucyIsIkV4cHIiLCJnZXRUZXh0IiwiaXNYTUwiLCJjb21waWxlIiwib3V0ZXJtb3N0Q29udGV4dCIsInNvcnRJbnB1dCIsInNldERvY3VtZW50IiwiZG9jdW1lbnRJc0hUTUwiLCJyYnVnZ3lRU0EiLCJyYnVnZ3lNYXRjaGVzIiwibWF0Y2hlcyIsImNvbnRhaW5zIiwicHJlZmVycmVkRG9jIiwiZGlycnVucyIsImNsYXNzQ2FjaGUiLCJjcmVhdGVDYWNoZSIsInRva2VuQ2FjaGUiLCJjb21waWxlckNhY2hlIiwiaGFzRHVwbGljYXRlIiwic29ydE9yZGVyIiwiYSIsImIiLCJzdHJ1bmRlZmluZWQiLCJNQVhfTkVHQVRJVkUiLCJoYXNPd24iLCJwb3AiLCJwdXNoX25hdGl2ZSIsImJvb2xlYW5zIiwid2hpdGVzcGFjZSIsImNoYXJhY3RlckVuY29kaW5nIiwiaWRlbnRpZmllciIsImF0dHJpYnV0ZXMiLCJwc2V1ZG9zIiwicnRyaW0iLCJSZWdFeHAiLCJyY29tbWEiLCJyY29tYmluYXRvcnMiLCJyc2libGluZyIsInJhdHRyaWJ1dGVRdW90ZXMiLCJycHNldWRvIiwicmlkZW50aWZpZXIiLCJtYXRjaEV4cHIiLCJJRCIsIkNMQVNTIiwiVEFHIiwiQVRUUiIsIlBTRVVETyIsIkNISUxEIiwiYm9vbCIsIm5lZWRzQ29udGV4dCIsInJuYXRpdmUiLCJyaW5wdXRzIiwicmhlYWRlciIsInJlc2NhcGUiLCJydW5lc2NhcGUiLCJmdW5lc2NhcGUiLCJfIiwiZXNjYXBlZCIsImVzY2FwZWRXaGl0ZXNwYWNlIiwiaGlnaCIsImZyb21DaGFyQ29kZSIsImVscyIsIlNpenpsZSIsInNlZWQiLCJtIiwiZ3JvdXBzIiwibmlkIiwibmV3Q29udGV4dCIsIm5ld1NlbGVjdG9yIiwiaWQiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwicXNhIiwidG9rZW5pemUiLCJnZXRBdHRyaWJ1dGUiLCJzZXRBdHRyaWJ1dGUiLCJ0b1NlbGVjdG9yIiwiam9pbiIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJxc2FFcnJvciIsInJlbW92ZUF0dHJpYnV0ZSIsInNlbGVjdCIsImtleXMiLCJjYWNoZSIsImNhY2hlTGVuZ3RoIiwic2hpZnQiLCJtYXJrRnVuY3Rpb24iLCJhc3NlcnQiLCJkaXYiLCJhZGRIYW5kbGUiLCJhdHRycyIsImhhbmRsZXIiLCJhdHRySGFuZGxlIiwic2libGluZ0NoZWNrIiwiY3VyIiwiZGlmZiIsInNvdXJjZUluZGV4IiwibmV4dFNpYmxpbmciLCJjcmVhdGVJbnB1dFBzZXVkbyIsImNyZWF0ZUJ1dHRvblBzZXVkbyIsImNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8iLCJhcmd1bWVudCIsIm1hdGNoSW5kZXhlcyIsIm5vZGUiLCJkb2MiLCJwYXJlbnQiLCJkZWZhdWx0VmlldyIsImF0dGFjaEV2ZW50IiwidG9wIiwiY2xhc3NOYW1lIiwiY3JlYXRlQ29tbWVudCIsImlubmVySFRNTCIsImZpcnN0Q2hpbGQiLCJnZXRCeUlkIiwiZ2V0RWxlbWVudHNCeU5hbWUiLCJmaWx0ZXIiLCJhdHRySWQiLCJnZXRBdHRyaWJ1dGVOb2RlIiwidGFnIiwiaW5wdXQiLCJtYXRjaGVzU2VsZWN0b3IiLCJ3ZWJraXRNYXRjaGVzU2VsZWN0b3IiLCJtb3pNYXRjaGVzU2VsZWN0b3IiLCJvTWF0Y2hlc1NlbGVjdG9yIiwibXNNYXRjaGVzU2VsZWN0b3IiLCJkaXNjb25uZWN0ZWRNYXRjaCIsImNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIiwiYWRvd24iLCJidXAiLCJjb21wYXJlIiwic29ydERldGFjaGVkIiwiYXVwIiwiYXAiLCJicCIsInVuc2hpZnQiLCJleHByIiwiZWxlbWVudHMiLCJ2YWwiLCJzcGVjaWZpZWQiLCJ1bmlxdWVTb3J0IiwiZHVwbGljYXRlcyIsImRldGVjdER1cGxpY2F0ZXMiLCJzb3J0U3RhYmxlIiwidGV4dENvbnRlbnQiLCJub2RlVmFsdWUiLCJzZWxlY3RvcnMiLCJjcmVhdGVQc2V1ZG8iLCJyZWxhdGl2ZSIsIj4iLCJkaXIiLCIgIiwiKyIsIn4iLCJwcmVGaWx0ZXIiLCJleGNlc3MiLCJ1bnF1b3RlZCIsIm5vZGVOYW1lU2VsZWN0b3IiLCJwYXR0ZXJuIiwib3BlcmF0b3IiLCJjaGVjayIsInJlc3VsdCIsIndoYXQiLCJzaW1wbGUiLCJmb3J3YXJkIiwib2ZUeXBlIiwib3V0ZXJDYWNoZSIsIm5vZGVJbmRleCIsInN0YXJ0IiwidXNlQ2FjaGUiLCJsYXN0Q2hpbGQiLCJwc2V1ZG8iLCJzZXRGaWx0ZXJzIiwiaWR4IiwibWF0Y2hlZCIsIm5vdCIsIm1hdGNoZXIiLCJ1bm1hdGNoZWQiLCJoYXMiLCJpbm5lclRleHQiLCJsYW5nIiwiZWxlbUxhbmciLCJoYXNoIiwicm9vdCIsImZvY3VzIiwiYWN0aXZlRWxlbWVudCIsImhhc0ZvY3VzIiwiaHJlZiIsInRhYkluZGV4IiwiZW5hYmxlZCIsImRpc2FibGVkIiwiY2hlY2tlZCIsInNlbGVjdGVkIiwic2VsZWN0ZWRJbmRleCIsImVtcHR5IiwiaGVhZGVyIiwiYnV0dG9uIiwiZXZlbiIsIm9kZCIsImx0IiwiZ3QiLCJyYWRpbyIsImNoZWNrYm94IiwiZmlsZSIsInBhc3N3b3JkIiwiaW1hZ2UiLCJzdWJtaXQiLCJyZXNldCIsImZpbHRlcnMiLCJwYXJzZU9ubHkiLCJ0b2tlbnMiLCJzb0ZhciIsInByZUZpbHRlcnMiLCJjYWNoZWQiLCJhZGRDb21iaW5hdG9yIiwiY29tYmluYXRvciIsImJhc2UiLCJjaGVja05vbkVsZW1lbnRzIiwiZG9uZU5hbWUiLCJkaXJrZXkiLCJlbGVtZW50TWF0Y2hlciIsIm1hdGNoZXJzIiwiY29uZGVuc2UiLCJuZXdVbm1hdGNoZWQiLCJtYXBwZWQiLCJzZXRNYXRjaGVyIiwicG9zdEZpbHRlciIsInBvc3RGaW5kZXIiLCJwb3N0U2VsZWN0b3IiLCJ0ZW1wIiwicHJlTWFwIiwicG9zdE1hcCIsInByZWV4aXN0aW5nIiwibXVsdGlwbGVDb250ZXh0cyIsIm1hdGNoZXJJbiIsIm1hdGNoZXJPdXQiLCJtYXRjaGVyRnJvbVRva2VucyIsImNoZWNrQ29udGV4dCIsImxlYWRpbmdSZWxhdGl2ZSIsImltcGxpY2l0UmVsYXRpdmUiLCJtYXRjaENvbnRleHQiLCJtYXRjaEFueUNvbnRleHQiLCJtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMiLCJlbGVtZW50TWF0Y2hlcnMiLCJzZXRNYXRjaGVycyIsIm1hdGNoZXJDYWNoZWRSdW5zIiwiYnlTZXQiLCJieUVsZW1lbnQiLCJzdXBlck1hdGNoZXIiLCJleHBhbmRDb250ZXh0Iiwic2V0TWF0Y2hlZCIsIm1hdGNoZWRDb3VudCIsIm91dGVybW9zdCIsImNvbnRleHRCYWNrdXAiLCJkaXJydW5zVW5pcXVlIiwiZ3JvdXAiLCJjb250ZXh0cyIsInRva2VuIiwiZGl2MSIsImRlZmF1bHRWYWx1ZSIsInVuaXF1ZSIsImlzWE1MRG9jIiwib3B0aW9uc0NhY2hlIiwiY3JlYXRlT3B0aW9ucyIsIm9iamVjdCIsImZsYWciLCJDYWxsYmFja3MiLCJtZW1vcnkiLCJmaXJlZCIsImZpcmluZyIsImZpcmluZ1N0YXJ0IiwiZmlyaW5nTGVuZ3RoIiwiZmlyaW5nSW5kZXgiLCJsaXN0Iiwic3RhY2siLCJvbmNlIiwiZmlyZSIsInN0b3BPbkZhbHNlIiwic2VsZiIsImRpc2FibGUiLCJhZGQiLCJpbmRleCIsImxvY2siLCJsb2NrZWQiLCJmaXJlV2l0aCIsImZ1bmMiLCJ0dXBsZXMiLCJzdGF0ZSIsImFsd2F5cyIsImRlZmVycmVkIiwiZmFpbCIsInRoZW4iLCJmbnMiLCJuZXdEZWZlciIsInR1cGxlIiwiYWN0aW9uIiwicmV0dXJuZWQiLCJyZXNvbHZlIiwicmVqZWN0IiwicHJvZ3Jlc3MiLCJub3RpZnkiLCJwaXBlIiwic3RhdGVTdHJpbmciLCJ3aGVuIiwic3Vib3JkaW5hdGUiLCJyZXNvbHZlVmFsdWVzIiwicmVtYWluaW5nIiwidXBkYXRlRnVuYyIsInZhbHVlcyIsInByb2dyZXNzVmFsdWVzIiwibm90aWZ5V2l0aCIsInByb2dyZXNzQ29udGV4dHMiLCJyZXNvbHZlQ29udGV4dHMiLCJmcmFnbWVudCIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJvcHQiLCJjaGVja09uIiwib3B0U2VsZWN0ZWQiLCJyZWxpYWJsZU1hcmdpblJpZ2h0IiwiYm94U2l6aW5nUmVsaWFibGUiLCJwaXhlbFBvc2l0aW9uIiwibm9DbG9uZUNoZWNrZWQiLCJjbG9uZU5vZGUiLCJvcHREaXNhYmxlZCIsInJhZGlvVmFsdWUiLCJjaGVja0Nsb25lIiwiZm9jdXNpbkJ1YmJsZXMiLCJiYWNrZ3JvdW5kQ2xpcCIsImNsZWFyQ2xvbmVTdHlsZSIsImNvbnRhaW5lciIsIm1hcmdpbkRpdiIsImRpdlJlc2V0IiwiYm9keSIsImNzc1RleHQiLCJ6b29tIiwiYm94U2l6aW5nIiwib2Zmc2V0V2lkdGgiLCJnZXRDb21wdXRlZFN0eWxlIiwid2lkdGgiLCJtYXJnaW5SaWdodCIsImRhdGFfdXNlciIsImRhdGFfcHJpdiIsInJicmFjZSIsInJtdWx0aURhc2giLCJEYXRhIiwiZGVmaW5lUHJvcGVydHkiLCJ1aWQiLCJhY2NlcHRzIiwib3duZXIiLCJkZXNjcmlwdG9yIiwidW5sb2NrIiwiZGVmaW5lUHJvcGVydGllcyIsInNldCIsInByb3AiLCJzdG9yZWQiLCJjYW1lbCIsImhhc0RhdGEiLCJkaXNjYXJkIiwiYWNjZXB0RGF0YSIsInJlbW92ZURhdGEiLCJfZGF0YSIsIl9yZW1vdmVEYXRhIiwiZGF0YUF0dHIiLCJjYW1lbEtleSIsInF1ZXVlIiwiZGVxdWV1ZSIsInN0YXJ0TGVuZ3RoIiwiaG9va3MiLCJfcXVldWVIb29rcyIsIm5leHQiLCJzdG9wIiwic2V0dGVyIiwiZGVsYXkiLCJ0aW1lIiwiZngiLCJzcGVlZHMiLCJ0aW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiY2xlYXJRdWV1ZSIsImNvdW50IiwiZGVmZXIiLCJub2RlSG9vayIsImJvb2xIb29rIiwicmNsYXNzIiwicnJldHVybiIsInJmb2N1c2FibGUiLCJyZW1vdmVBdHRyIiwicmVtb3ZlUHJvcCIsInByb3BGaXgiLCJhZGRDbGFzcyIsImNsYXNzZXMiLCJjbGF6eiIsInByb2NlZWQiLCJyZW1vdmVDbGFzcyIsInRvZ2dsZUNsYXNzIiwic3RhdGVWYWwiLCJjbGFzc05hbWVzIiwiaGFzQ2xhc3MiLCJ2YWxIb29rcyIsIm9wdGlvbiIsIm9uZSIsIm1heCIsIm9wdGlvblNldCIsIm5UeXBlIiwiYXR0ckhvb2tzIiwicHJvcE5hbWUiLCJhdHRyTmFtZXMiLCJmb3IiLCJjbGFzcyIsIm5vdHhtbCIsInByb3BIb29rcyIsImhhc0F0dHJpYnV0ZSIsImdldHRlciIsInJrZXlFdmVudCIsInJtb3VzZUV2ZW50IiwicmZvY3VzTW9ycGgiLCJydHlwZW5hbWVzcGFjZSIsInJldHVyblRydWUiLCJyZXR1cm5GYWxzZSIsInNhZmVBY3RpdmVFbGVtZW50IiwiZXJyIiwiZXZlbnQiLCJnbG9iYWwiLCJ0eXBlcyIsImhhbmRsZU9iakluIiwiZXZlbnRIYW5kbGUiLCJldmVudHMiLCJ0IiwiaGFuZGxlT2JqIiwic3BlY2lhbCIsImhhbmRsZXJzIiwibmFtZXNwYWNlcyIsIm9yaWdUeXBlIiwiZWxlbURhdGEiLCJoYW5kbGUiLCJ0cmlnZ2VyZWQiLCJkaXNwYXRjaCIsImRlbGVnYXRlVHlwZSIsImJpbmRUeXBlIiwibmFtZXNwYWNlIiwiZGVsZWdhdGVDb3VudCIsInNldHVwIiwibWFwcGVkVHlwZXMiLCJvcmlnQ291bnQiLCJ0ZWFyZG93biIsInJlbW92ZUV2ZW50Iiwib25seUhhbmRsZXJzIiwiYnViYmxlVHlwZSIsIm9udHlwZSIsImV2ZW50UGF0aCIsIkV2ZW50IiwiaXNUcmlnZ2VyIiwibmFtZXNwYWNlX3JlIiwibm9CdWJibGUiLCJwYXJlbnRXaW5kb3ciLCJpc1Byb3BhZ2F0aW9uU3RvcHBlZCIsInByZXZlbnREZWZhdWx0IiwiaXNEZWZhdWx0UHJldmVudGVkIiwiX2RlZmF1bHQiLCJmaXgiLCJoYW5kbGVyUXVldWUiLCJkZWxlZ2F0ZVRhcmdldCIsInByZURpc3BhdGNoIiwiY3VycmVudFRhcmdldCIsImlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkIiwic3RvcFByb3BhZ2F0aW9uIiwicG9zdERpc3BhdGNoIiwic2VsIiwicHJvcHMiLCJmaXhIb29rcyIsImtleUhvb2tzIiwib3JpZ2luYWwiLCJ3aGljaCIsImNoYXJDb2RlIiwia2V5Q29kZSIsIm1vdXNlSG9va3MiLCJldmVudERvYyIsInBhZ2VYIiwiY2xpZW50WCIsInNjcm9sbExlZnQiLCJjbGllbnRMZWZ0IiwicGFnZVkiLCJjbGllbnRZIiwic2Nyb2xsVG9wIiwiY2xpZW50VG9wIiwib3JpZ2luYWxFdmVudCIsImZpeEhvb2siLCJsb2FkIiwiYmx1ciIsImNsaWNrIiwiYmVmb3JldW5sb2FkIiwicmV0dXJuVmFsdWUiLCJzaW11bGF0ZSIsImJ1YmJsZSIsImlzU2ltdWxhdGVkIiwiZGVmYXVsdFByZXZlbnRlZCIsImdldFByZXZlbnREZWZhdWx0IiwidGltZVN0YW1wIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJvcmlnIiwicmVsYXRlZCIsInJlbGF0ZWRUYXJnZXQiLCJhdHRhY2hlcyIsIm9uIiwib3JpZ0ZuIiwidHJpZ2dlckhhbmRsZXIiLCJpc1NpbXBsZSIsInJwYXJlbnRzcHJldiIsInJuZWVkc0NvbnRleHQiLCJndWFyYW50ZWVkVW5pcXVlIiwiY2hpbGRyZW4iLCJjb250ZW50cyIsInByZXYiLCJ0YXJnZXRzIiwid2lubm93IiwiaXMiLCJjbG9zZXN0IiwicG9zIiwicHJldkFsbCIsImFkZEJhY2siLCJzaWJsaW5nIiwicGFyZW50cyIsInBhcmVudHNVbnRpbCIsInVudGlsIiwibmV4dEFsbCIsIm5leHRVbnRpbCIsInByZXZVbnRpbCIsInNpYmxpbmdzIiwiY29udGVudERvY3VtZW50IiwicmV2ZXJzZSIsInRydW5jYXRlIiwibiIsInF1YWxpZmllciIsInJ4aHRtbFRhZyIsInJ0YWdOYW1lIiwicmh0bWwiLCJybm9Jbm5lcmh0bWwiLCJtYW5pcHVsYXRpb25fcmNoZWNrYWJsZVR5cGUiLCJyY2hlY2tlZCIsInJzY3JpcHRUeXBlIiwicnNjcmlwdFR5cGVNYXNrZWQiLCJyY2xlYW5TY3JpcHQiLCJ3cmFwTWFwIiwidGhlYWQiLCJjb2wiLCJ0ciIsInRkIiwib3B0Z3JvdXAiLCJ0Ym9keSIsInRmb290IiwiY29sZ3JvdXAiLCJjYXB0aW9uIiwidGgiLCJhcHBlbmQiLCJjcmVhdGVUZXh0Tm9kZSIsImRvbU1hbmlwIiwibWFuaXB1bGF0aW9uVGFyZ2V0IiwicHJlcGVuZCIsImluc2VydEJlZm9yZSIsImJlZm9yZSIsImFmdGVyIiwia2VlcERhdGEiLCJjbGVhbkRhdGEiLCJnZXRBbGwiLCJzZXRHbG9iYWxFdmFsIiwiZGF0YUFuZEV2ZW50cyIsImRlZXBEYXRhQW5kRXZlbnRzIiwiaHRtbCIsInJlcGxhY2VXaXRoIiwiZGV0YWNoIiwiYWxsb3dJbnRlcnNlY3Rpb24iLCJoYXNTY3JpcHRzIiwiaU5vQ2xvbmUiLCJkaXNhYmxlU2NyaXB0IiwicmVzdG9yZVNjcmlwdCIsIl9ldmFsVXJsIiwiYXBwZW5kVG8iLCJwcmVwZW5kVG8iLCJpbnNlcnRBZnRlciIsInJlcGxhY2VBbGwiLCJpbnNlcnQiLCJzcmNFbGVtZW50cyIsImRlc3RFbGVtZW50cyIsImluUGFnZSIsImZpeElucHV0IiwiY2xvbmVDb3B5RXZlbnQiLCJzZWxlY3Rpb24iLCJ3cmFwIiwibm9kZXMiLCJ1cmwiLCJhamF4IiwiZGF0YVR5cGUiLCJhc3luYyIsInRocm93cyIsImNvbnRlbnQiLCJyZWZFbGVtZW50cyIsImRlc3QiLCJwZGF0YU9sZCIsInBkYXRhQ3VyIiwidWRhdGFPbGQiLCJ1ZGF0YUN1ciIsIndyYXBBbGwiLCJmaXJzdEVsZW1lbnRDaGlsZCIsIndyYXBJbm5lciIsInVud3JhcCIsImN1ckNTUyIsImlmcmFtZSIsInJkaXNwbGF5c3dhcCIsInJtYXJnaW4iLCJybnVtc3BsaXQiLCJybnVtbm9ucHgiLCJycmVsTnVtIiwiZWxlbWRpc3BsYXkiLCJCT0RZIiwiY3NzU2hvdyIsInBvc2l0aW9uIiwidmlzaWJpbGl0eSIsImRpc3BsYXkiLCJjc3NOb3JtYWxUcmFuc2Zvcm0iLCJsZXR0ZXJTcGFjaW5nIiwiZm9udFdlaWdodCIsImNzc0V4cGFuZCIsImNzc1ByZWZpeGVzIiwidmVuZG9yUHJvcE5hbWUiLCJjYXBOYW1lIiwib3JpZ05hbWUiLCJpc0hpZGRlbiIsImVsIiwiY3NzIiwiZ2V0U3R5bGVzIiwic2hvd0hpZGUiLCJzaG93IiwiaGlkZGVuIiwiY3NzX2RlZmF1bHREaXNwbGF5Iiwic3R5bGVzIiwiaGlkZSIsInRvZ2dsZSIsImNzc0hvb2tzIiwib3BhY2l0eSIsImNvbXB1dGVkIiwiY3NzTnVtYmVyIiwiY29sdW1uQ291bnQiLCJmaWxsT3BhY2l0eSIsImxpbmVIZWlnaHQiLCJvcmRlciIsIm9ycGhhbnMiLCJ3aWRvd3MiLCJ6SW5kZXgiLCJjc3NQcm9wcyIsImZsb2F0IiwiZXh0cmEiLCJfY29tcHV0ZWQiLCJtaW5XaWR0aCIsIm1heFdpZHRoIiwiZ2V0UHJvcGVydHlWYWx1ZSIsInNldFBvc2l0aXZlTnVtYmVyIiwic3VidHJhY3QiLCJhdWdtZW50V2lkdGhPckhlaWdodCIsImlzQm9yZGVyQm94IiwiZ2V0V2lkdGhPckhlaWdodCIsInZhbHVlSXNCb3JkZXJCb3giLCJvZmZzZXRIZWlnaHQiLCJhY3R1YWxEaXNwbGF5IiwiY29udGVudFdpbmRvdyIsIndyaXRlIiwiY2xvc2UiLCJ2aXNpYmxlIiwibWFyZ2luIiwicGFkZGluZyIsImJvcmRlciIsInByZWZpeCIsInN1ZmZpeCIsImV4cGFuZCIsImV4cGFuZGVkIiwicGFydHMiLCJyMjAiLCJyYnJhY2tldCIsInJDUkxGIiwicnN1Ym1pdHRlclR5cGVzIiwicnN1Ym1pdHRhYmxlIiwic2VyaWFsaXplIiwicGFyYW0iLCJzZXJpYWxpemVBcnJheSIsInRyYWRpdGlvbmFsIiwicyIsImVuY29kZVVSSUNvbXBvbmVudCIsImFqYXhTZXR0aW5ncyIsImJ1aWxkUGFyYW1zIiwidiIsImhvdmVyIiwiZm5PdmVyIiwiZm5PdXQiLCJiaW5kIiwidW5iaW5kIiwiZGVsZWdhdGUiLCJ1bmRlbGVnYXRlIiwiYWpheExvY1BhcnRzIiwiYWpheExvY2F0aW9uIiwiYWpheF9ub25jZSIsImFqYXhfcnF1ZXJ5Iiwicmhhc2giLCJydHMiLCJyaGVhZGVycyIsInJsb2NhbFByb3RvY29sIiwicm5vQ29udGVudCIsInJwcm90b2NvbCIsInJ1cmwiLCJfbG9hZCIsInByZWZpbHRlcnMiLCJ0cmFuc3BvcnRzIiwiYWxsVHlwZXMiLCJhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMiLCJzdHJ1Y3R1cmUiLCJkYXRhVHlwZUV4cHJlc3Npb24iLCJkYXRhVHlwZXMiLCJpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyIsIm9yaWdpbmFsT3B0aW9ucyIsImpxWEhSIiwiaW5zcGVjdGVkIiwic2Vla2luZ1RyYW5zcG9ydCIsImluc3BlY3QiLCJwcmVmaWx0ZXJPckZhY3RvcnkiLCJkYXRhVHlwZU9yVHJhbnNwb3J0IiwiYWpheEV4dGVuZCIsImZsYXRPcHRpb25zIiwicGFyYW1zIiwicmVzcG9uc2UiLCJyZXNwb25zZVRleHQiLCJjb21wbGV0ZSIsInN0YXR1cyIsImFjdGl2ZSIsImxhc3RNb2RpZmllZCIsImV0YWciLCJpc0xvY2FsIiwicHJvY2Vzc0RhdGEiLCJjb250ZW50VHlwZSIsIioiLCJqc29uIiwicmVzcG9uc2VGaWVsZHMiLCJjb252ZXJ0ZXJzIiwiKiB0ZXh0IiwidGV4dCBodG1sIiwidGV4dCBqc29uIiwidGV4dCB4bWwiLCJhamF4U2V0dXAiLCJzZXR0aW5ncyIsImFqYXhQcmVmaWx0ZXIiLCJhamF4VHJhbnNwb3J0IiwidHJhbnNwb3J0IiwiY2FjaGVVUkwiLCJyZXNwb25zZUhlYWRlcnNTdHJpbmciLCJyZXNwb25zZUhlYWRlcnMiLCJ0aW1lb3V0VGltZXIiLCJmaXJlR2xvYmFscyIsImNhbGxiYWNrQ29udGV4dCIsImdsb2JhbEV2ZW50Q29udGV4dCIsImNvbXBsZXRlRGVmZXJyZWQiLCJzdGF0dXNDb2RlIiwicmVxdWVzdEhlYWRlcnMiLCJyZXF1ZXN0SGVhZGVyc05hbWVzIiwic3RyQWJvcnQiLCJnZXRSZXNwb25zZUhlYWRlciIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInNldFJlcXVlc3RIZWFkZXIiLCJsbmFtZSIsIm92ZXJyaWRlTWltZVR5cGUiLCJtaW1lVHlwZSIsImFib3J0Iiwic3RhdHVzVGV4dCIsImZpbmFsVGV4dCIsInN1Y2Nlc3MiLCJtZXRob2QiLCJjcm9zc0RvbWFpbiIsImhhc0NvbnRlbnQiLCJpZk1vZGlmaWVkIiwiaGVhZGVycyIsImJlZm9yZVNlbmQiLCJzZW5kIiwibmF0aXZlU3RhdHVzVGV4dCIsInJlc3BvbnNlcyIsImlzU3VjY2VzcyIsIm1vZGlmaWVkIiwiYWpheEhhbmRsZVJlc3BvbnNlcyIsImFqYXhDb252ZXJ0IiwicmVqZWN0V2l0aCIsImdldEpTT04iLCJnZXRTY3JpcHQiLCJjdCIsImZpbmFsRGF0YVR5cGUiLCJmaXJzdERhdGFUeXBlIiwiY29udjIiLCJjdXJyZW50IiwiY29udiIsImRhdGFGaWx0ZXIiLCJ0ZXh0IHNjcmlwdCIsImNoYXJzZXQiLCJzY3JpcHRDaGFyc2V0IiwiZXZ0Iiwib2xkQ2FsbGJhY2tzIiwicmpzb25wIiwianNvbnAiLCJqc29ucENhbGxiYWNrIiwib3JpZ2luYWxTZXR0aW5ncyIsImNhbGxiYWNrTmFtZSIsIm92ZXJ3cml0dGVuIiwicmVzcG9uc2VDb250YWluZXIiLCJqc29uUHJvcCIsInhociIsIlhNTEh0dHBSZXF1ZXN0IiwieGhyU3VwcG9ydGVkIiwieGhyU3VjY2Vzc1N0YXR1cyIsMTIyMywieGhySWQiLCJ4aHJDYWxsYmFja3MiLCJBY3RpdmVYT2JqZWN0IiwiY29ycyIsIm9wZW4iLCJ1c2VybmFtZSIsInhockZpZWxkcyIsIm9ubG9hZCIsIm9uZXJyb3IiLCJmeE5vdyIsInRpbWVySWQiLCJyZnh0eXBlcyIsInJmeG51bSIsInJydW4iLCJhbmltYXRpb25QcmVmaWx0ZXJzIiwiZGVmYXVsdFByZWZpbHRlciIsInR3ZWVuZXJzIiwidHdlZW4iLCJjcmVhdGVUd2VlbiIsInVuaXQiLCJzY2FsZSIsIm1heEl0ZXJhdGlvbnMiLCJjcmVhdGVGeE5vdyIsImFuaW1hdGlvbiIsImNvbGxlY3Rpb24iLCJBbmltYXRpb24iLCJwcm9wZXJ0aWVzIiwic3RvcHBlZCIsInRpY2siLCJjdXJyZW50VGltZSIsInN0YXJ0VGltZSIsImR1cmF0aW9uIiwicGVyY2VudCIsInR3ZWVucyIsInJ1biIsIm9wdHMiLCJzcGVjaWFsRWFzaW5nIiwib3JpZ2luYWxQcm9wZXJ0aWVzIiwiVHdlZW4iLCJlYXNpbmciLCJnb3RvRW5kIiwicHJvcEZpbHRlciIsInRpbWVyIiwiYW5pbSIsInR3ZWVuZXIiLCJwcmVmaWx0ZXIiLCJvbGRmaXJlIiwiZGF0YVNob3ciLCJ1bnF1ZXVlZCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwiZWFzZWQiLCJzdGVwIiwiY3NzRm4iLCJzcGVlZCIsImFuaW1hdGUiLCJnZW5GeCIsImZhZGVUbyIsInRvIiwib3B0YWxsIiwiZG9BbmltYXRpb24iLCJmaW5pc2giLCJzdG9wUXVldWUiLCJ0aW1lcnMiLCJpbmNsdWRlV2lkdGgiLCJoZWlnaHQiLCJzbGlkZURvd24iLCJzbGlkZVVwIiwic2xpZGVUb2dnbGUiLCJmYWRlSW4iLCJmYWRlT3V0IiwiZmFkZVRvZ2dsZSIsImxpbmVhciIsInAiLCJzd2luZyIsImNvcyIsIlBJIiwiaW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJzbG93IiwiZmFzdCIsImFuaW1hdGVkIiwib2Zmc2V0Iiwic2V0T2Zmc2V0Iiwid2luIiwiYm94IiwibGVmdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImdldFdpbmRvdyIsInBhZ2VZT2Zmc2V0IiwicGFnZVhPZmZzZXQiLCJjdXJQb3NpdGlvbiIsImN1ckxlZnQiLCJjdXJDU1NUb3AiLCJjdXJUb3AiLCJjdXJPZmZzZXQiLCJjdXJDU1NMZWZ0IiwiY2FsY3VsYXRlUG9zaXRpb24iLCJjdXJFbGVtIiwidXNpbmciLCJvZmZzZXRQYXJlbnQiLCJwYXJlbnRPZmZzZXQiLCJzY3JvbGxUbyIsIkhlaWdodCIsIldpZHRoIiwiZGVmYXVsdEV4dHJhIiwiZnVuY05hbWUiLCJzaXplIiwiYW5kU2VsZiIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZpbmUiLCJhbWQiXSwibWFwcGluZ3MiOiI7OztDQWFBLFNBQVdBLEVBQVFDLFdBT25CLEdBRUNDLEdBR0FDLEVBSUFDLFFBQTJCSCxXQUczQkksRUFBV0wsRUFBT0ssU0FDbEJDLEVBQVdOLEVBQU9NLFNBQ2xCQyxFQUFVRCxFQUFTRSxnQkFHbkJDLEVBQVVULEVBQU9VLE9BR2pCQyxFQUFLWCxFQUFPWSxFQUdaQyxLQUdBQyxLQUVBQyxFQUFlLFFBR2ZDLEVBQWNGLEVBQWdCRyxPQUM5QkMsRUFBWUosRUFBZ0JLLEtBQzVCQyxFQUFhTixFQUFnQk8sTUFDN0JDLEVBQWVSLEVBQWdCUyxRQUMvQkMsRUFBZ0JYLEVBQVdZLFNBQzNCQyxFQUFjYixFQUFXYyxlQUN6QkMsRUFBWWIsRUFBYWMsS0FHekJuQixFQUFTLFNBQVVvQixFQUFVQyxHQUU1QixNQUFPLElBQUlyQixHQUFPc0IsR0FBR0MsS0FBTUgsRUFBVUMsRUFBUzdCLElBSS9DZ0MsRUFBWSxzQ0FBc0NDLE9BR2xEQyxFQUFpQixPQUtqQkMsRUFBYSxzQ0FHYkMsRUFBYSw2QkFHYkMsRUFBWSxRQUNaQyxFQUFhLGVBR2JDLEVBQWEsU0FBVUMsRUFBS0MsR0FDM0IsTUFBT0EsR0FBT0MsZUFJZkMsRUFBWSxXQUNYdkMsRUFBU3dDLG9CQUFxQixtQkFBb0JELEdBQVcsR0FDN0Q3QyxFQUFPOEMsb0JBQXFCLE9BQVFELEdBQVcsR0FDL0NuQyxFQUFPcUMsUUFHVHJDLEdBQU9zQixHQUFLdEIsRUFBT3NDLFdBRWxCQyxPQUFRbEMsRUFFUm1DLFlBQWF4QyxFQUNidUIsS0FBTSxTQUFVSCxFQUFVQyxFQUFTN0IsR0FDbEMsR0FBSWlELEdBQU9DLENBR1gsS0FBTXRCLEVBQ0wsTUFBT3VCLEtBSVIsSUFBeUIsZ0JBQWJ2QixHQUF3QixDQVVuQyxHQVBDcUIsRUFGMkIsTUFBdkJyQixFQUFTd0IsT0FBTyxJQUF5RCxNQUEzQ3hCLEVBQVN3QixPQUFReEIsRUFBU3lCLE9BQVMsSUFBZXpCLEVBQVN5QixRQUFVLEdBRTdGLEtBQU16QixFQUFVLE1BR2xCTyxFQUFXbUIsS0FBTTFCLElBSXJCcUIsSUFBVUEsRUFBTSxJQUFPcEIsRUErQ3JCLE9BQU1BLEdBQVdBLEVBQVFrQixRQUN0QmxCLEdBQVc3QixHQUFhdUQsS0FBTTNCLEdBS2hDdUIsS0FBS0gsWUFBYW5CLEdBQVUwQixLQUFNM0IsRUFsRHpDLElBQUtxQixFQUFNLEdBQUssQ0FXZixHQVZBcEIsRUFBVUEsWUFBbUJyQixHQUFTcUIsRUFBUSxHQUFLQSxFQUduRHJCLEVBQU9nRCxNQUFPTCxLQUFNM0MsRUFBT2lELFVBQzFCUixFQUFNLEdBQ05wQixHQUFXQSxFQUFRNkIsU0FBVzdCLEVBQVE4QixlQUFpQjlCLEVBQVV6QixHQUNqRSxJQUlJZ0MsRUFBV3dCLEtBQU1YLEVBQU0sS0FBUXpDLEVBQU9xRCxjQUFlaEMsR0FDekQsSUFBTW9CLElBQVNwQixHQUVUckIsRUFBT3NELFdBQVlYLEtBQU1GLElBQzdCRSxLQUFNRixHQUFTcEIsRUFBU29CLElBSXhCRSxLQUFLWSxLQUFNZCxFQUFPcEIsRUFBU29CLEdBSzlCLE9BQU9FLE1BZ0JQLE1BWkFELEdBQU85QyxFQUFTNEQsZUFBZ0JmLEVBQU0sSUFJakNDLEdBQVFBLEVBQUtlLGFBRWpCZCxLQUFLRSxPQUFTLEVBQ2RGLEtBQUssR0FBS0QsR0FHWEMsS0FBS3RCLFFBQVV6QixFQUNmK0MsS0FBS3ZCLFNBQVdBLEVBQ1R1QixLQWNILE1BQUt2QixHQUFTOEIsVUFDcEJQLEtBQUt0QixRQUFVc0IsS0FBSyxHQUFLdkIsRUFDekJ1QixLQUFLRSxPQUFTLEVBQ1BGLE1BSUkzQyxFQUFPc0QsV0FBWWxDLEdBQ3ZCNUIsRUFBVzZDLE1BQU9qQixJQUdyQkEsRUFBU0EsV0FBYTdCLFlBQzFCb0QsS0FBS3ZCLFNBQVdBLEVBQVNBLFNBQ3pCdUIsS0FBS3RCLFFBQVVELEVBQVNDLFNBR2xCckIsRUFBTzBELFVBQVd0QyxFQUFVdUIsUUFJcEN2QixTQUFVLEdBR1Z5QixPQUFRLEVBRVJjLFFBQVMsV0FDUixNQUFPakQsR0FBV2tELEtBQU1qQixPQUt6QmtCLElBQUssU0FBVUMsR0FDZCxNQUFjLE9BQVBBLEVBR05uQixLQUFLZ0IsVUFHRyxFQUFORyxFQUFVbkIsS0FBTUEsS0FBS0UsT0FBU2lCLEdBQVFuQixLQUFNbUIsSUFLaERDLFVBQVcsU0FBVUMsR0FHcEIsR0FBSUMsR0FBTWpFLEVBQU9nRCxNQUFPTCxLQUFLSCxjQUFld0IsRUFPNUMsT0FKQUMsR0FBSUMsV0FBYXZCLEtBQ2pCc0IsRUFBSTVDLFFBQVVzQixLQUFLdEIsUUFHWjRDLEdBTVJFLEtBQU0sU0FBVUMsRUFBVUMsR0FDekIsTUFBT3JFLEdBQU9tRSxLQUFNeEIsS0FBTXlCLEVBQVVDLElBR3JDaEMsTUFBTyxTQUFVZixHQUloQixNQUZBdEIsR0FBT3FDLE1BQU1pQyxVQUFVQyxLQUFNakQsR0FFdEJxQixNQUdSaEMsTUFBTyxXQUNOLE1BQU9nQyxNQUFLb0IsVUFBV3JELEVBQVc4RCxNQUFPN0IsS0FBTThCLGFBR2hEQyxNQUFPLFdBQ04sTUFBTy9CLE1BQUtnQyxHQUFJLElBR2pCQyxLQUFNLFdBQ0wsTUFBT2pDLE1BQUtnQyxHQUFJLEtBR2pCQSxHQUFJLFNBQVVFLEdBQ2IsR0FBSUMsR0FBTW5DLEtBQUtFLE9BQ2RrQyxHQUFLRixHQUFVLEVBQUpBLEVBQVFDLEVBQU0sRUFDMUIsT0FBT25DLE1BQUtvQixVQUFXZ0IsR0FBSyxHQUFTRCxFQUFKQyxHQUFZcEMsS0FBS29DLFNBR25EQyxJQUFLLFNBQVVaLEdBQ2QsTUFBT3pCLE1BQUtvQixVQUFXL0QsRUFBT2dGLElBQUlyQyxLQUFNLFNBQVVELEVBQU1tQyxHQUN2RCxNQUFPVCxHQUFTUixLQUFNbEIsRUFBTW1DLEVBQUduQyxPQUlqQ3VDLElBQUssV0FDSixNQUFPdEMsTUFBS3VCLFlBQWN2QixLQUFLSCxZQUFZLE9BSzVDL0IsS0FBTUQsRUFDTjBFLFFBQVNBLEtBQ1RDLFVBQVdBLFFBSVpuRixFQUFPc0IsR0FBR0MsS0FBS2UsVUFBWXRDLEVBQU9zQixHQUVsQ3RCLEVBQU9vRixPQUFTcEYsRUFBT3NCLEdBQUc4RCxPQUFTLFdBQ2xDLEdBQUlDLEdBQVNDLEVBQU1DLEVBQUtDLEVBQU1DLEVBQWFDLEVBQzFDQyxFQUFTbEIsVUFBVSxPQUNuQkksRUFBSSxFQUNKaEMsRUFBUzRCLFVBQVU1QixPQUNuQitDLEdBQU8sQ0FxQlIsS0FsQnVCLGlCQUFYRCxLQUNYQyxFQUFPRCxFQUNQQSxFQUFTbEIsVUFBVSxPQUVuQkksRUFBSSxHQUlrQixnQkFBWGMsSUFBd0IzRixFQUFPc0QsV0FBV3FDLEtBQ3JEQSxNQUlJOUMsSUFBV2dDLElBQ2ZjLEVBQVNoRCxPQUNQa0MsR0FHU2hDLEVBQUpnQyxFQUFZQSxJQUVuQixHQUFtQyxPQUE3QlEsRUFBVVosVUFBV0ksSUFFMUIsSUFBTVMsSUFBUUQsR0FDYkUsRUFBTUksRUFBUUwsR0FDZEUsRUFBT0gsRUFBU0MsR0FHWEssSUFBV0gsSUFLWEksR0FBUUosSUFBVXhGLEVBQU9xRCxjQUFjbUMsS0FBVUMsRUFBY3pGLEVBQU82RixRQUFRTCxNQUM3RUMsR0FDSkEsR0FBYyxFQUNkQyxFQUFRSCxHQUFPdkYsRUFBTzZGLFFBQVFOLEdBQU9BLE1BR3JDRyxFQUFRSCxHQUFPdkYsRUFBT3FELGNBQWNrQyxHQUFPQSxLQUk1Q0ksRUFBUUwsR0FBU3RGLEVBQU9vRixPQUFRUSxFQUFNRixFQUFPRixJQUdsQ0EsSUFBU2pHLFlBQ3BCb0csRUFBUUwsR0FBU0UsR0FPckIsT0FBT0csSUFHUjNGLEVBQU9vRixRQUVOVSxRQUFTLFVBQWF6RixFQUFlMEYsS0FBS0MsVUFBV0MsUUFBUyxNQUFPLElBRXJFQyxXQUFZLFNBQVVOLEdBU3JCLE1BUkt0RyxHQUFPWSxJQUFNRixJQUNqQlYsRUFBT1ksRUFBSUQsR0FHUDJGLEdBQVF0RyxFQUFPVSxTQUFXQSxJQUM5QlYsRUFBT1UsT0FBU0QsR0FHVkMsR0FJUm1HLFNBQVMsRUFJVEMsVUFBVyxFQUdYQyxVQUFXLFNBQVVDLEdBQ2ZBLEVBQ0p0RyxFQUFPb0csWUFFUHBHLEVBQU9xQyxPQUFPLElBS2hCQSxNQUFPLFNBQVVrRSxJQUdYQSxLQUFTLElBQVN2RyxFQUFPb0csVUFBWXBHLEVBQU9tRyxXQUtqRG5HLEVBQU9tRyxTQUFVLEVBR1pJLEtBQVMsS0FBVXZHLEVBQU9vRyxVQUFZLElBSzNDM0csRUFBVStHLFlBQWE1RyxHQUFZSSxJQUc5QkEsRUFBT3NCLEdBQUdtRixTQUNkekcsRUFBUUosR0FBVzZHLFFBQVEsU0FBU0MsSUFBSSxZQU8xQ3BELFdBQVksU0FBVXFELEdBQ3JCLE1BQTRCLGFBQXJCM0csRUFBTzRHLEtBQUtELElBR3BCZCxRQUFTZ0IsTUFBTWhCLFFBRWZpQixTQUFVLFNBQVVILEdBQ25CLE1BQWMsT0FBUEEsR0FBZUEsSUFBUUEsRUFBSXJILFFBR25DeUgsVUFBVyxTQUFVSixHQUNwQixPQUFRSyxNQUFPQyxXQUFXTixLQUFVTyxTQUFVUCxJQUcvQ0MsS0FBTSxTQUFVRCxHQUNmLE1BQVksT0FBUEEsRUFDV0EsRUFBUlEsR0FHYyxnQkFBUlIsSUFBbUMsa0JBQVJBLEdBQ3hDeEcsRUFBWVcsRUFBYzhDLEtBQUsrQyxLQUFVLGVBQ2xDQSxJQUdUdEQsY0FBZSxTQUFVc0QsR0FLeEIsR0FBNEIsV0FBdkIzRyxFQUFPNEcsS0FBTUQsSUFBc0JBLEVBQUl6RCxVQUFZbEQsRUFBTzhHLFNBQVVILEdBQ3hFLE9BQU8sQ0FPUixLQUNDLEdBQUtBLEVBQUluRSxjQUNOeEIsRUFBWTRDLEtBQU0rQyxFQUFJbkUsWUFBWUYsVUFBVyxpQkFDL0MsT0FBTyxFQUVQLE1BQVE4RSxHQUNULE9BQU8sRUFLUixPQUFPLEdBR1JDLGNBQWUsU0FBVVYsR0FDeEIsR0FBSXJCLEVBQ0osS0FBTUEsSUFBUXFCLEdBQ2IsT0FBTyxDQUVSLFFBQU8sR0FHUlcsTUFBTyxTQUFVQyxHQUNoQixLQUFVQyxPQUFPRCxJQU1sQnRFLFVBQVcsU0FBVXdFLEVBQU1wRyxFQUFTcUcsR0FDbkMsSUFBTUQsR0FBd0IsZ0JBQVRBLEdBQ3BCLE1BQU8sS0FFZ0Isa0JBQVpwRyxLQUNYcUcsRUFBY3JHLEVBQ2RBLEdBQVUsR0FFWEEsRUFBVUEsR0FBV3pCLENBRXJCLElBQUkrSCxHQUFTL0YsRUFBV2tCLEtBQU0yRSxHQUM3QkcsR0FBV0YsS0FHWixPQUFLQyxJQUNLdEcsRUFBUXdHLGNBQWVGLEVBQU8sTUFHeENBLEVBQVMzSCxFQUFPOEgsZUFBaUJMLEdBQVFwRyxFQUFTdUcsR0FFN0NBLEdBQ0o1SCxFQUFRNEgsR0FBVUcsU0FHWi9ILEVBQU9nRCxTQUFXMkUsRUFBT0ssY0FHakNDLFVBQVdDLEtBQUtDLE1BR2hCQyxTQUFVLFNBQVVYLEdBQ25CLEdBQUlZLEdBQUtDLENBQ1QsS0FBTWIsR0FBd0IsZ0JBQVRBLEdBQ3BCLE1BQU8sS0FJUixLQUNDYSxFQUFNLEdBQUlDLFdBQ1ZGLEVBQU1DLEVBQUlFLGdCQUFpQmYsRUFBTyxZQUNqQyxNQUFRTCxHQUNUaUIsRUFBTTlJLFVBTVAsUUFITThJLEdBQU9BLEVBQUlJLHFCQUFzQixlQUFnQjVGLFNBQ3REN0MsRUFBT3NILE1BQU8sZ0JBQWtCRyxHQUUxQlksR0FHUkssS0FBTSxhQUdOQyxXQUFZLFNBQVVDLEdBQ3JCLEdBQUlDLEdBQ0ZDLEVBQVdDLElBRWJILEdBQU81SSxFQUFPbUIsS0FBTXlILEdBRWZBLElBSWdDLElBQS9CQSxFQUFLL0gsUUFBUSxlQUNqQmdJLEVBQVNqSixFQUFTaUksY0FBYyxVQUNoQ2dCLEVBQU9HLEtBQU9KLEVBQ2RoSixFQUFTcUosS0FBS0MsWUFBYUwsR0FBU3BGLFdBQVcwRixZQUFhTixJQUk1REMsRUFBVUYsS0FPYlEsVUFBVyxTQUFVQyxHQUNwQixNQUFPQSxHQUFPcEQsUUFBU3BFLEVBQVcsT0FBUW9FLFFBQVNuRSxFQUFZQyxJQUdoRXVILFNBQVUsU0FBVTVHLEVBQU00QyxHQUN6QixNQUFPNUMsR0FBSzRHLFVBQVk1RyxFQUFLNEcsU0FBU0MsZ0JBQWtCakUsRUFBS2lFLGVBSTlEcEYsS0FBTSxTQUFVd0MsRUFBS3ZDLEVBQVVDLEdBQzlCLEdBQUltRixHQUNIM0UsRUFBSSxFQUNKaEMsRUFBUzhELEVBQUk5RCxPQUNiZ0QsRUFBVTRELEVBQWE5QyxFQUV4QixJQUFLdEMsR0FDSixHQUFLd0IsR0FDSixLQUFZaEQsRUFBSmdDLEVBQVlBLElBR25CLEdBRkEyRSxFQUFRcEYsRUFBU0ksTUFBT21DLEVBQUs5QixHQUFLUixHQUU3Qm1GLEtBQVUsRUFDZCxVQUlGLEtBQU0zRSxJQUFLOEIsR0FHVixHQUZBNkMsRUFBUXBGLEVBQVNJLE1BQU9tQyxFQUFLOUIsR0FBS1IsR0FFN0JtRixLQUFVLEVBQ2QsVUFPSCxJQUFLM0QsR0FDSixLQUFZaEQsRUFBSmdDLEVBQVlBLElBR25CLEdBRkEyRSxFQUFRcEYsRUFBU1IsS0FBTStDLEVBQUs5QixHQUFLQSxFQUFHOEIsRUFBSzlCLElBRXBDMkUsS0FBVSxFQUNkLFVBSUYsS0FBTTNFLElBQUs4QixHQUdWLEdBRkE2QyxFQUFRcEYsRUFBU1IsS0FBTStDLEVBQUs5QixHQUFLQSxFQUFHOEIsRUFBSzlCLElBRXBDMkUsS0FBVSxFQUNkLEtBTUosT0FBTzdDLElBR1J4RixLQUFNLFNBQVU2SCxHQUNmLE1BQWUsT0FBUkEsRUFBZSxHQUFLOUgsRUFBVTBDLEtBQU1vRixJQUk1Q3RGLFVBQVcsU0FBVWdHLEVBQUtDLEdBQ3pCLEdBQUkxRixHQUFNMEYsS0FhVixPQVhZLE9BQVBELElBQ0NELEVBQWFHLE9BQU9GLElBQ3hCMUosRUFBT2dELE1BQU9pQixFQUNFLGdCQUFSeUYsSUFDTEEsR0FBUUEsR0FHWGxKLEVBQVVvRCxLQUFNSyxFQUFLeUYsSUFJaEJ6RixHQUdSNEYsUUFBUyxTQUFVbkgsRUFBTWdILEVBQUs3RSxHQUM3QixNQUFjLE9BQVA2RSxFQUFjLEdBQUs5SSxFQUFhZ0QsS0FBTThGLEVBQUtoSCxFQUFNbUMsSUFHekQ3QixNQUFPLFNBQVUwQixFQUFPb0YsR0FDdkIsR0FBSUMsR0FBSUQsRUFBT2pILE9BQ2RnQyxFQUFJSCxFQUFNN0IsT0FDVmtDLEVBQUksQ0FFTCxJQUFrQixnQkFBTmdGLEdBQ1gsS0FBWUEsRUFBSmhGLEVBQU9BLElBQ2RMLEVBQU9HLEtBQVFpRixFQUFRL0UsT0FHeEIsT0FBUStFLEVBQU8vRSxLQUFPeEYsVUFDckJtRixFQUFPRyxLQUFRaUYsRUFBUS9FLElBTXpCLE9BRkFMLEdBQU03QixPQUFTZ0MsRUFFUkgsR0FHUnNGLEtBQU0sU0FBVWhHLEVBQU9JLEVBQVU2RixHQUNoQyxHQUFJQyxHQUNIakcsS0FDQVksRUFBSSxFQUNKaEMsRUFBU21CLEVBQU1uQixNQUtoQixLQUpBb0gsSUFBUUEsRUFJSXBILEVBQUpnQyxFQUFZQSxJQUNuQnFGLElBQVc5RixFQUFVSixFQUFPYSxHQUFLQSxHQUM1Qm9GLElBQVFDLEdBQ1pqRyxFQUFJeEQsS0FBTXVELEVBQU9hLEdBSW5CLE9BQU9aLElBSVJlLElBQUssU0FBVWhCLEVBQU9JLEVBQVUrRixHQUMvQixHQUFJWCxHQUNIM0UsRUFBSSxFQUNKaEMsRUFBU21CLEVBQU1uQixPQUNmZ0QsRUFBVTRELEVBQWF6RixHQUN2QkMsSUFHRCxJQUFLNEIsRUFDSixLQUFZaEQsRUFBSmdDLEVBQVlBLElBQ25CMkUsRUFBUXBGLEVBQVVKLEVBQU9hLEdBQUtBLEVBQUdzRixHQUVuQixNQUFUWCxJQUNKdkYsRUFBS0EsRUFBSXBCLFFBQVcyRyxPQU10QixLQUFNM0UsSUFBS2IsR0FDVndGLEVBQVFwRixFQUFVSixFQUFPYSxHQUFLQSxFQUFHc0YsR0FFbkIsTUFBVFgsSUFDSnZGLEVBQUtBLEVBQUlwQixRQUFXMkcsRUFNdkIsT0FBT2xKLEdBQVlrRSxTQUFXUCxJQUkvQm1HLEtBQU0sRUFJTkMsTUFBTyxTQUFVL0ksRUFBSUQsR0FDcEIsR0FBSWlILEdBQUtqRSxFQUFNZ0csQ0FVZixPQVJ3QixnQkFBWmhKLEtBQ1hpSCxFQUFNaEgsRUFBSUQsR0FDVkEsRUFBVUMsRUFDVkEsRUFBS2dILEdBS0F0SSxFQUFPc0QsV0FBWWhDLElBS3pCK0MsRUFBTzNELEVBQVdrRCxLQUFNYSxVQUFXLEdBQ25DNEYsRUFBUSxXQUNQLE1BQU8vSSxHQUFHa0QsTUFBT25ELEdBQVdzQixLQUFNMEIsRUFBSzlELE9BQVFHLEVBQVdrRCxLQUFNYSxjQUlqRTRGLEVBQU1ELEtBQU85SSxFQUFHOEksS0FBTzlJLEVBQUc4SSxNQUFRcEssRUFBT29LLE9BRWxDQyxHQVpDOUssV0FpQlQrSyxPQUFRLFNBQVV0RyxFQUFPMUMsRUFBSWlKLEVBQUtmLEVBQU9nQixFQUFXQyxFQUFVQyxHQUM3RCxHQUFJN0YsR0FBSSxFQUNQaEMsRUFBU21CLEVBQU1uQixPQUNmOEgsRUFBYyxNQUFQSixDQUdSLElBQTRCLFdBQXZCdkssRUFBTzRHLEtBQU0yRCxHQUFxQixDQUN0Q0MsR0FBWSxDQUNaLEtBQU0zRixJQUFLMEYsR0FDVnZLLEVBQU9zSyxPQUFRdEcsRUFBTzFDLEVBQUl1RCxFQUFHMEYsRUFBSTFGLElBQUksRUFBTTRGLEVBQVVDLE9BSWhELElBQUtsQixJQUFVakssWUFDckJpTCxHQUFZLEVBRU54SyxFQUFPc0QsV0FBWWtHLEtBQ3hCa0IsR0FBTSxHQUdGQyxJQUVDRCxHQUNKcEosRUFBR3NDLEtBQU1JLEVBQU93RixHQUNoQmxJLEVBQUssT0FJTHFKLEVBQU9ySixFQUNQQSxFQUFLLFNBQVVvQixFQUFNNkgsRUFBS2YsR0FDekIsTUFBT21CLEdBQUsvRyxLQUFNNUQsRUFBUTBDLEdBQVE4RyxNQUtoQ2xJLEdBQ0osS0FBWXVCLEVBQUpnQyxFQUFZQSxJQUNuQnZELEVBQUkwQyxFQUFNYSxHQUFJMEYsRUFBS0csRUFBTWxCLEVBQVFBLEVBQU01RixLQUFNSSxFQUFNYSxHQUFJQSxFQUFHdkQsRUFBSTBDLEVBQU1hLEdBQUkwRixJQUszRSxPQUFPQyxHQUNOeEcsRUFHQTJHLEVBQ0NySixFQUFHc0MsS0FBTUksR0FDVG5CLEVBQVN2QixFQUFJMEMsRUFBTSxHQUFJdUcsR0FBUUUsR0FHbENHLElBQUtDLEtBQUtELElBS1ZFLEtBQU0sU0FBVXBJLEVBQU0yQyxFQUFTakIsRUFBVUMsR0FDeEMsR0FBSUosR0FBS3FCLEVBQ1J5RixJQUdELEtBQU16RixJQUFRRCxHQUNiMEYsRUFBS3pGLEdBQVM1QyxFQUFLc0ksTUFBTzFGLEdBQzFCNUMsRUFBS3NJLE1BQU8xRixHQUFTRCxFQUFTQyxFQUcvQnJCLEdBQU1HLEVBQVNJLE1BQU85QixFQUFNMkIsTUFHNUIsS0FBTWlCLElBQVFELEdBQ2IzQyxFQUFLc0ksTUFBTzFGLEdBQVN5RixFQUFLekYsRUFHM0IsT0FBT3JCLE1BSVRqRSxFQUFPcUMsTUFBTWlDLFFBQVUsU0FBVXFDLEdBcUJoQyxNQXBCTWxILEtBRUxBLEVBQVlPLEVBQU9pTCxXQUtVLGFBQXhCckwsRUFBU3NMLFdBRWJDLFdBQVluTCxFQUFPcUMsUUFLbkJ6QyxFQUFTd0wsaUJBQWtCLG1CQUFvQmpKLEdBQVcsR0FHMUQ3QyxFQUFPOEwsaUJBQWtCLE9BQVFqSixHQUFXLEtBR3ZDMUMsRUFBVTZFLFFBQVNxQyxJQUkzQjNHLEVBQU9tRSxLQUFLLGdFQUFnRWtILE1BQU0sS0FBTSxTQUFTeEcsRUFBR1MsR0FDbkduRixFQUFZLFdBQWFtRixFQUFPLEtBQVFBLEVBQUtpRSxlQUc5QyxTQUFTRSxHQUFhOUMsR0FDckIsR0FBSTlELEdBQVM4RCxFQUFJOUQsT0FDaEIrRCxFQUFPNUcsRUFBTzRHLEtBQU1ELEVBRXJCLE9BQUszRyxHQUFPOEcsU0FBVUgsSUFDZCxFQUdjLElBQWpCQSxFQUFJekQsVUFBa0JMLEdBQ25CLEVBR1EsVUFBVCtELEdBQTZCLGFBQVRBLElBQ2IsSUFBWC9ELEdBQ2dCLGdCQUFYQSxJQUF1QkEsRUFBUyxHQUFPQSxFQUFTLElBQU84RCxJQUloRW5ILEVBQWFRLEVBQU9KLEdBV3BCLFNBQVdOLEVBQVFDLFdBRW5CLEdBQUlzRixHQUNIeUcsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFHQUMsRUFDQWxNLEVBQ0FDLEVBQ0FrTSxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUdBckcsRUFBVSxVQUFZLEdBQUsrRSxNQUMzQnVCLEVBQWU5TSxFQUFPTSxTQUN0QnlNLEVBQVUsRUFDVjlILEVBQU8sRUFDUCtILEVBQWFDLEtBQ2JDLEVBQWFELEtBQ2JFLEVBQWdCRixLQUNoQkcsR0FBZSxFQUNmQyxFQUFZLFNBQVVDLEVBQUdDLEdBQ3hCLE1BQUtELEtBQU1DLEdBQ1ZILEdBQWUsRUFDUixHQUVELEdBSVJJLFFBQXNCdk4sV0FDdEJ3TixFQUFlLEdBQUssR0FHcEJDLEtBQWMvTCxlQUNkeUksS0FDQXVELEVBQU12RCxFQUFJdUQsSUFDVkMsRUFBY3hELEVBQUlqSixLQUNsQkEsRUFBT2lKLEVBQUlqSixLQUNYRSxFQUFRK0ksRUFBSS9JLE1BRVpFLEVBQVU2SSxFQUFJN0ksU0FBVyxTQUFVNkIsR0FDbEMsR0FBSW1DLEdBQUksRUFDUEMsRUFBTW5DLEtBQUtFLE1BQ1osTUFBWWlDLEVBQUpELEVBQVNBLElBQ2hCLEdBQUtsQyxLQUFLa0MsS0FBT25DLEVBQ2hCLE1BQU9tQyxFQUdULE9BQU8sSUFHUnNJLEVBQVcsNkhBS1hDLEVBQWEsc0JBRWJDLEVBQW9CLG1DQUtwQkMsRUFBYUQsRUFBa0JwSCxRQUFTLElBQUssTUFHN0NzSCxFQUFhLE1BQVFILEVBQWEsS0FBT0MsRUFBb0IsSUFBTUQsRUFDbEUsbUJBQXFCQSxFQUFhLHdDQUEwQ0UsRUFBYSxRQUFVRixFQUFhLE9BUWpISSxFQUFVLEtBQU9ILEVBQW9CLG1FQUFxRUUsRUFBV3RILFFBQVMsRUFBRyxHQUFNLGVBR3ZJd0gsRUFBWUMsT0FBUSxJQUFNTixFQUFhLDhCQUFnQ0EsRUFBYSxLQUFNLEtBRTFGTyxFQUFhRCxPQUFRLElBQU1OLEVBQWEsS0FBT0EsRUFBYSxLQUM1RFEsRUFBbUJGLE9BQVEsSUFBTU4sRUFBYSxXQUFhQSxFQUFhLElBQU1BLEVBQWEsS0FFM0ZTLEVBQWVILE9BQVFOLEVBQWEsU0FDcENVLEVBQXVCSixPQUFRLElBQU1OLEVBQWEsZ0JBQWtCQSxFQUFhLE9BQVEsS0FFekZXLEVBQWNMLE9BQVFGLEdBQ3RCUSxFQUFrQk4sT0FBUSxJQUFNSixFQUFhLEtBRTdDVyxHQUNDQyxHQUFVUixPQUFRLE1BQVFMLEVBQW9CLEtBQzlDYyxNQUFhVCxPQUFRLFFBQVVMLEVBQW9CLEtBQ25EZSxJQUFXVixPQUFRLEtBQU9MLEVBQWtCcEgsUUFBUyxJQUFLLE1BQVMsS0FDbkVvSSxLQUFZWCxPQUFRLElBQU1ILEdBQzFCZSxPQUFjWixPQUFRLElBQU1GLEdBQzVCZSxNQUFhYixPQUFRLHlEQUEyRE4sRUFDL0UsK0JBQWlDQSxFQUFhLGNBQWdCQSxFQUM5RCxhQUFlQSxFQUFhLFNBQVUsS0FDdkNvQixLQUFZZCxPQUFRLE9BQVNQLEVBQVcsS0FBTSxLQUc5Q3NCLGFBQW9CZixPQUFRLElBQU1OLEVBQWEsbURBQzlDQSxFQUFhLG1CQUFxQkEsRUFBYSxtQkFBb0IsTUFHckVzQixFQUFVLHlCQUdWL00sRUFBYSxtQ0FFYmdOLEVBQVUsc0NBQ1ZDLEdBQVUsU0FFVkMsR0FBVSxRQUdWQyxHQUFnQnBCLE9BQVEscUJBQXVCTixFQUFhLE1BQVFBLEVBQWEsT0FBUSxNQUN6RjJCLEdBQVksU0FBVUMsRUFBR0MsRUFBU0MsR0FDakMsR0FBSUMsR0FBTyxLQUFPRixFQUFVLEtBSTVCLE9BQU9FLEtBQVNBLEdBQVFELEVBQ3ZCRCxFQUVPLEVBQVBFLEVBQ0NoSSxPQUFPaUksYUFBY0QsRUFBTyxPQUU1QmhJLE9BQU9pSSxhQUEyQixNQUFiRCxHQUFRLEdBQTRCLE1BQVIsS0FBUEEsR0FJOUMsS0FDQzFPLEVBQUsrRCxNQUNIa0YsRUFBTS9JLEVBQU1pRCxLQUFNd0ksRUFBYXBFLFlBQ2hDb0UsRUFBYXBFLFlBSWQwQixFQUFLMEMsRUFBYXBFLFdBQVduRixRQUFTSyxTQUNyQyxNQUFRa0UsSUFDVDNHLEdBQVMrRCxNQUFPa0YsRUFBSTdHLE9BR25CLFNBQVU4QyxFQUFRMEosR0FDakJuQyxFQUFZMUksTUFBT21CLEVBQVFoRixFQUFNaUQsS0FBS3lMLEtBS3ZDLFNBQVUxSixFQUFRMEosR0FDakIsR0FBSXRLLEdBQUlZLEVBQU85QyxPQUNkZ0MsRUFBSSxDQUVMLE9BQVNjLEVBQU9aLEtBQU9zSyxFQUFJeEssTUFDM0JjLEVBQU85QyxPQUFTa0MsRUFBSSxJQUt2QixRQUFTdUssSUFBUWxPLEVBQVVDLEVBQVNzSSxFQUFTNEYsR0FDNUMsR0FBSTlNLEdBQU9DLEVBQU04TSxFQUFHdE0sRUFFbkIyQixFQUFHNEssRUFBUTFFLEVBQUsyRSxFQUFLQyxFQUFZQyxDQVNsQyxLQVBPdk8sRUFBVUEsRUFBUThCLGVBQWlCOUIsRUFBVStLLEtBQW1CeE0sR0FDdEVrTSxFQUFhekssR0FHZEEsRUFBVUEsR0FBV3pCLEVBQ3JCK0osRUFBVUEsT0FFSnZJLEdBQWdDLGdCQUFiQSxHQUN4QixNQUFPdUksRUFHUixJQUF1QyxLQUFqQ3pHLEVBQVc3QixFQUFRNkIsV0FBZ0MsSUFBYkEsRUFDM0MsUUFHRCxJQUFLNkksSUFBbUJ3RCxFQUFPLENBRzlCLEdBQU05TSxFQUFRZCxFQUFXbUIsS0FBTTFCLEdBRTlCLEdBQU1vTyxFQUFJL00sRUFBTSxJQUNmLEdBQWtCLElBQWJTLEVBQWlCLENBSXJCLEdBSEFSLEVBQU9yQixFQUFRbUMsZUFBZ0JnTSxJQUcxQjlNLElBQVFBLEVBQUtlLFdBUWpCLE1BQU9rRyxFQUxQLElBQUtqSCxFQUFLbU4sS0FBT0wsRUFFaEIsTUFEQTdGLEdBQVFsSixLQUFNaUMsR0FDUGlILE1BT1QsSUFBS3RJLEVBQVE4QixnQkFBa0JULEVBQU9yQixFQUFROEIsY0FBY0ssZUFBZ0JnTSxLQUMzRXJELEVBQVU5SyxFQUFTcUIsSUFBVUEsRUFBS21OLEtBQU9MLEVBRXpDLE1BREE3RixHQUFRbEosS0FBTWlDLEdBQ1BpSCxNQUtILENBQUEsR0FBS2xILEVBQU0sR0FFakIsTUFEQWhDLEdBQUsrRCxNQUFPbUYsRUFBU3RJLEVBQVFvSCxxQkFBc0JySCxJQUM1Q3VJLENBR0QsS0FBTTZGLEVBQUkvTSxFQUFNLEtBQU82SSxFQUFRd0Usd0JBQTBCek8sRUFBUXlPLHVCQUV2RSxNQURBclAsR0FBSytELE1BQU9tRixFQUFTdEksRUFBUXlPLHVCQUF3Qk4sSUFDOUM3RixFQUtULEdBQUsyQixFQUFReUUsT0FBUy9ELElBQWNBLEVBQVU1SSxLQUFNaEMsSUFBYyxDQVNqRSxHQVJBc08sRUFBTTNFLEVBQU1qRixFQUNaNkosRUFBYXRPLEVBQ2J1TyxFQUEyQixJQUFiMU0sR0FBa0I5QixFQU1kLElBQWI4QixHQUFxRCxXQUFuQzdCLEVBQVFpSSxTQUFTQyxjQUE2QixDQUNwRWtHLEVBQVNPLEdBQVU1TyxJQUViMkosRUFBTTFKLEVBQVE0TyxhQUFhLE9BQ2hDUCxFQUFNM0UsRUFBSTlFLFFBQVM0SSxHQUFTLFFBRTVCeE4sRUFBUTZPLGFBQWMsS0FBTVIsR0FFN0JBLEVBQU0sUUFBVUEsRUFBTSxNQUV0QjdLLEVBQUk0SyxFQUFPNU0sTUFDWCxPQUFRZ0MsSUFDUDRLLEVBQU81SyxHQUFLNkssRUFBTVMsR0FBWVYsRUFBTzVLLEdBRXRDOEssR0FBYTlCLEVBQVN6SyxLQUFNaEMsSUFBY0MsRUFBUW9DLFlBQWNwQyxFQUNoRXVPLEVBQWNILEVBQU9XLEtBQUssS0FHM0IsR0FBS1IsRUFDSixJQUlDLE1BSEFuUCxHQUFLK0QsTUFBT21GLEVBQ1hnRyxFQUFXVSxpQkFBa0JULElBRXZCakcsRUFDTixNQUFNMkcsSUFDTixRQUNLdkYsR0FDTDFKLEVBQVFrUCxnQkFBZ0IsUUFRN0IsTUFBT0MsSUFBUXBQLEVBQVM2RSxRQUFTd0gsRUFBTyxNQUFRcE0sRUFBU3NJLEVBQVM0RixHQVNuRSxRQUFTaEQsTUFDUixHQUFJa0UsS0FFSixTQUFTQyxHQUFPbkcsRUFBS2YsR0FNcEIsTUFKS2lILEdBQUtoUSxLQUFNOEosR0FBTyxLQUFRaUIsRUFBS21GLG1CQUU1QkQsR0FBT0QsRUFBS0csU0FFWkYsRUFBT25HLEdBQVFmLEVBRXhCLE1BQU9rSCxHQU9SLFFBQVNHLElBQWN2UCxHQUV0QixNQURBQSxHQUFJd0UsSUFBWSxFQUNUeEUsRUFPUixRQUFTd1AsSUFBUXhQLEdBQ2hCLEdBQUl5UCxHQUFNblIsRUFBU2lJLGNBQWMsTUFFakMsS0FDQyxRQUFTdkcsRUFBSXlQLEdBQ1osTUFBTzNKLEdBQ1IsT0FBTyxFQUNOLFFBRUkySixFQUFJdE4sWUFDUnNOLEVBQUl0TixXQUFXMEYsWUFBYTRILEdBRzdCQSxFQUFNLE1BU1IsUUFBU0MsSUFBV0MsRUFBT0MsR0FDMUIsR0FBSXhILEdBQU11SCxFQUFNNUYsTUFBTSxLQUNyQnhHLEVBQUlvTSxFQUFNcE8sTUFFWCxPQUFRZ0MsSUFDUDJHLEVBQUsyRixXQUFZekgsRUFBSTdFLElBQU9xTSxFQVU5QixRQUFTRSxJQUFjeEUsRUFBR0MsR0FDekIsR0FBSXdFLEdBQU14RSxHQUFLRCxFQUNkMEUsRUFBT0QsR0FBc0IsSUFBZnpFLEVBQUUxSixVQUFpQyxJQUFmMkosRUFBRTNKLFlBQ2hDMkosRUFBRTBFLGFBQWV4RSxLQUNqQkgsRUFBRTJFLGFBQWV4RSxFQUd0QixJQUFLdUUsRUFDSixNQUFPQSxFQUlSLElBQUtELEVBQ0osTUFBU0EsRUFBTUEsRUFBSUcsWUFDbEIsR0FBS0gsSUFBUXhFLEVBQ1osTUFBTyxFQUtWLE9BQU9ELEdBQUksRUFBSSxHQU9oQixRQUFTNkUsSUFBbUI3SyxHQUMzQixNQUFPLFVBQVVsRSxHQUNoQixHQUFJNEMsR0FBTzVDLEVBQUs0RyxTQUFTQyxhQUN6QixPQUFnQixVQUFUakUsR0FBb0I1QyxFQUFLa0UsT0FBU0EsR0FRM0MsUUFBUzhLLElBQW9COUssR0FDNUIsTUFBTyxVQUFVbEUsR0FDaEIsR0FBSTRDLEdBQU81QyxFQUFLNEcsU0FBU0MsYUFDekIsUUFBaUIsVUFBVGpFLEdBQTZCLFdBQVRBLElBQXNCNUMsRUFBS2tFLE9BQVNBLEdBUWxFLFFBQVMrSyxJQUF3QnJRLEdBQ2hDLE1BQU91UCxJQUFhLFNBQVVlLEdBRTdCLE1BREFBLElBQVlBLEVBQ0xmLEdBQWEsU0FBVXRCLEVBQU1yRCxHQUNuQyxHQUFJbkgsR0FDSDhNLEVBQWV2USxLQUFRaU8sRUFBSzFNLE9BQVErTyxHQUNwQy9NLEVBQUlnTixFQUFhaFAsTUFHbEIsT0FBUWdDLElBQ0YwSyxFQUFPeEssRUFBSThNLEVBQWFoTixNQUM1QjBLLEVBQUt4SyxLQUFPbUgsRUFBUW5ILEdBQUt3SyxFQUFLeEssU0FXbkMyRyxFQUFRNEQsR0FBTzVELE1BQVEsU0FBVWhKLEdBR2hDLEdBQUk1QyxHQUFrQjRDLElBQVNBLEVBQUtTLGVBQWlCVCxHQUFNNUMsZUFDM0QsT0FBT0EsR0FBK0MsU0FBN0JBLEVBQWdCd0osVUFBc0IsR0FJaEVnQyxFQUFVZ0UsR0FBT2hFLFdBT2pCUSxFQUFjd0QsR0FBT3hELFlBQWMsU0FBVWdHLEdBQzVDLEdBQUlDLEdBQU1ELEVBQU9BLEVBQUszTyxlQUFpQjJPLEVBQU8xRixFQUM3QzRGLEVBQVNELEVBQUlFLFdBR2QsT0FBS0YsS0FBUW5TLEdBQTZCLElBQWpCbVMsRUFBSTdPLFVBQW1CNk8sRUFBSWpTLGlCQUtwREYsRUFBV21TLEVBQ1hsUyxFQUFVa1MsRUFBSWpTLGdCQUdkaU0sR0FBa0JMLEVBQU9xRyxHQU1wQkMsR0FBVUEsRUFBT0UsYUFBZUYsSUFBV0EsRUFBT0csS0FDdERILEVBQU9FLFlBQWEsaUJBQWtCLFdBQ3JDcEcsTUFTRlIsRUFBUWlDLFdBQWF1RCxHQUFPLFNBQVVDLEdBRXJDLE1BREFBLEdBQUlxQixVQUFZLEtBQ1JyQixFQUFJZCxhQUFhLGVBTzFCM0UsRUFBUTdDLHFCQUF1QnFJLEdBQU8sU0FBVUMsR0FFL0MsTUFEQUEsR0FBSTdILFlBQWE2SSxFQUFJTSxjQUFjLE1BQzNCdEIsRUFBSXRJLHFCQUFxQixLQUFLNUYsU0FJdkN5SSxFQUFRd0UsdUJBQXlCZ0IsR0FBTyxTQUFVQyxHQVFqRCxNQVBBQSxHQUFJdUIsVUFBWSwrQ0FJaEJ2QixFQUFJd0IsV0FBV0gsVUFBWSxJQUd1QixJQUEzQ3JCLEVBQUlqQix1QkFBdUIsS0FBS2pOLFNBT3hDeUksRUFBUWtILFFBQVUxQixHQUFPLFNBQVVDLEdBRWxDLE1BREFsUixHQUFRcUosWUFBYTZILEdBQU1sQixHQUFLL0osR0FDeEJpTSxFQUFJVSxvQkFBc0JWLEVBQUlVLGtCQUFtQjNNLEdBQVVqRCxTQUkvRHlJLEVBQVFrSCxTQUNaaEgsRUFBS3pJLEtBQVMsR0FBSSxTQUFVOE0sRUFBSXhPLEdBQy9CLFNBQVlBLEdBQVFtQyxpQkFBbUJzSixHQUFnQmYsRUFBaUIsQ0FDdkUsR0FBSXlELEdBQUluTyxFQUFRbUMsZUFBZ0JxTSxFQUdoQyxPQUFPTCxJQUFLQSxFQUFFL0wsWUFBYytMLFFBRzlCaEUsRUFBS2tILE9BQVcsR0FBSSxTQUFVN0MsR0FDN0IsR0FBSThDLEdBQVM5QyxFQUFHNUosUUFBUzZJLEdBQVdDLEdBQ3BDLE9BQU8sVUFBVXJNLEdBQ2hCLE1BQU9BLEdBQUt1TixhQUFhLFFBQVUwQyxZQU05Qm5ILEdBQUt6SSxLQUFTLEdBRXJCeUksRUFBS2tILE9BQVcsR0FBSyxTQUFVN0MsR0FDOUIsR0FBSThDLEdBQVM5QyxFQUFHNUosUUFBUzZJLEdBQVdDLEdBQ3BDLE9BQU8sVUFBVXJNLEdBQ2hCLEdBQUlvUCxTQUFjcFAsR0FBS2tRLG1CQUFxQjlGLEdBQWdCcEssRUFBS2tRLGlCQUFpQixLQUNsRixPQUFPZCxJQUFRQSxFQUFLdEksUUFBVW1KLEtBTWpDbkgsRUFBS3pJLEtBQVUsSUFBSXVJLEVBQVE3QyxxQkFDMUIsU0FBVW9LLEVBQUt4UixHQUNkLGFBQVlBLEdBQVFvSCx1QkFBeUJxRSxFQUNyQ3pMLEVBQVFvSCxxQkFBc0JvSyxHQUR0QyxXQUlELFNBQVVBLEVBQUt4UixHQUNkLEdBQUlxQixHQUNINEYsS0FDQXpELEVBQUksRUFDSjhFLEVBQVV0SSxFQUFRb0gscUJBQXNCb0ssRUFHekMsSUFBYSxNQUFSQSxFQUFjLENBQ2xCLE1BQVNuUSxFQUFPaUgsRUFBUTlFLEtBQ0EsSUFBbEJuQyxFQUFLUSxVQUNUb0YsRUFBSTdILEtBQU1pQyxFQUlaLE9BQU80RixHQUVSLE1BQU9xQixJQUlUNkIsRUFBS3pJLEtBQVksTUFBSXVJLEVBQVF3RSx3QkFBMEIsU0FBVXNDLEVBQVcvUSxHQUMzRSxhQUFZQSxHQUFReU8seUJBQTJCaEQsR0FBZ0JmLEVBQ3ZEMUssRUFBUXlPLHVCQUF3QnNDLEdBRHhDLFdBV0RuRyxLQU9BRCxNQUVNVixFQUFReUUsSUFBTXJCLEVBQVF0TCxLQUFNMk8sRUFBSTFCLHFCQUdyQ1MsR0FBTyxTQUFVQyxHQU1oQkEsRUFBSXVCLFVBQVksaURBSVZ2QixFQUFJVixpQkFBaUIsY0FBY3hOLFFBQ3hDbUosRUFBVXZMLEtBQU0sTUFBUTJNLEVBQWEsYUFBZUQsRUFBVyxLQU0xRDRELEVBQUlWLGlCQUFpQixZQUFZeE4sUUFDdENtSixFQUFVdkwsS0FBSyxjQUlqQnFRLEdBQU8sU0FBVUMsR0FPaEIsR0FBSStCLEdBQVFmLEVBQUlsSyxjQUFjLFFBQzlCaUwsR0FBTTVDLGFBQWMsT0FBUSxVQUM1QmEsRUFBSTdILFlBQWE0SixHQUFRNUMsYUFBYyxJQUFLLElBRXZDYSxFQUFJVixpQkFBaUIsV0FBV3hOLFFBQ3BDbUosRUFBVXZMLEtBQU0sU0FBVzJNLEVBQWEsZ0JBS25DMkQsRUFBSVYsaUJBQWlCLFlBQVl4TixRQUN0Q21KLEVBQVV2TCxLQUFNLFdBQVksYUFJN0JzUSxFQUFJVixpQkFBaUIsUUFDckJyRSxFQUFVdkwsS0FBSyxZQUlYNkssRUFBUXlILGdCQUFrQnJFLEVBQVF0TCxLQUFPOEksRUFBVXJNLEVBQVFtVCx1QkFDaEVuVCxFQUFRb1Qsb0JBQ1JwVCxFQUFRcVQsa0JBQ1JyVCxFQUFRc1QscUJBRVJyQyxHQUFPLFNBQVVDLEdBR2hCekYsRUFBUThILGtCQUFvQmxILEVBQVF0SSxLQUFNbU4sRUFBSyxPQUkvQzdFLEVBQVF0SSxLQUFNbU4sRUFBSyxhQUNuQjlFLEVBQWN4TCxLQUFNLEtBQU0rTSxLQUk1QnhCLEVBQVlBLEVBQVVuSixRQUFjNkssT0FBUTFCLEVBQVVvRSxLQUFLLE1BQzNEbkUsRUFBZ0JBLEVBQWNwSixRQUFjNkssT0FBUXpCLEVBQWNtRSxLQUFLLE1BUXZFakUsRUFBV3VDLEVBQVF0TCxLQUFNdkQsRUFBUXNNLFdBQWN0TSxFQUFRd1Qsd0JBQ3RELFNBQVV6RyxFQUFHQyxHQUNaLEdBQUl5RyxHQUF1QixJQUFmMUcsRUFBRTFKLFNBQWlCMEosRUFBRTlNLGdCQUFrQjhNLEVBQ2xEMkcsRUFBTTFHLEdBQUtBLEVBQUVwSixVQUNkLE9BQU9tSixLQUFNMkcsTUFBV0EsR0FBd0IsSUFBakJBLEVBQUlyUSxZQUNsQ29RLEVBQU1uSCxTQUNMbUgsRUFBTW5ILFNBQVVvSCxHQUNoQjNHLEVBQUV5Ryx5QkFBOEQsR0FBbkN6RyxFQUFFeUcsd0JBQXlCRSxNQUczRCxTQUFVM0csRUFBR0MsR0FDWixHQUFLQSxFQUNKLE1BQVNBLEVBQUlBLEVBQUVwSixXQUNkLEdBQUtvSixJQUFNRCxFQUNWLE9BQU8sQ0FJVixRQUFPLEdBT1RELEVBQVk5TSxFQUFRd1Qsd0JBQ3BCLFNBQVV6RyxFQUFHQyxHQUdaLEdBQUtELElBQU1DLEVBRVYsTUFEQUgsSUFBZSxFQUNSLENBR1IsSUFBSThHLEdBQVUzRyxFQUFFd0cseUJBQTJCekcsRUFBRXlHLHlCQUEyQnpHLEVBQUV5Ryx3QkFBeUJ4RyxFQUVuRyxPQUFLMkcsR0FFVyxFQUFWQSxJQUNGbEksRUFBUW1JLGNBQWdCNUcsRUFBRXdHLHdCQUF5QnpHLEtBQVE0RyxFQUd4RDVHLElBQU1tRixHQUFPNUYsRUFBU0MsRUFBY1EsR0FDakMsR0FFSEMsSUFBTWtGLEdBQU81RixFQUFTQyxFQUFjUyxHQUNqQyxFQUlEaEIsRUFDSmhMLEVBQVErQyxLQUFNaUksRUFBV2UsR0FBTS9MLEVBQVErQyxLQUFNaUksRUFBV2dCLEdBQzFELEVBR2UsRUFBVjJHLEVBQWMsR0FBSyxFQUlwQjVHLEVBQUV5Ryx3QkFBMEIsR0FBSyxHQUV6QyxTQUFVekcsRUFBR0MsR0FDWixHQUFJd0UsR0FDSHhNLEVBQUksRUFDSjZPLEVBQU05RyxFQUFFbkosV0FDUjhQLEVBQU0xRyxFQUFFcEosV0FDUmtRLEdBQU8vRyxHQUNQZ0gsR0FBTy9HLEVBR1IsSUFBS0QsSUFBTUMsRUFFVixNQURBSCxJQUFlLEVBQ1IsQ0FHRCxLQUFNZ0gsSUFBUUgsRUFDcEIsTUFBTzNHLEtBQU1tRixFQUFNLEdBQ2xCbEYsSUFBTWtGLEVBQU0sRUFDWjJCLEVBQU0sR0FDTkgsRUFBTSxFQUNOMUgsRUFDRWhMLEVBQVErQyxLQUFNaUksRUFBV2UsR0FBTS9MLEVBQVErQyxLQUFNaUksRUFBV2dCLEdBQzFELENBR0ssSUFBSzZHLElBQVFILEVBQ25CLE1BQU9uQyxJQUFjeEUsRUFBR0MsRUFJekJ3RSxHQUFNekUsQ0FDTixPQUFTeUUsRUFBTUEsRUFBSTVOLFdBQ2xCa1EsRUFBR0UsUUFBU3hDLEVBRWJBLEdBQU14RSxDQUNOLE9BQVN3RSxFQUFNQSxFQUFJNU4sV0FDbEJtUSxFQUFHQyxRQUFTeEMsRUFJYixPQUFRc0MsRUFBRzlPLEtBQU8rTyxFQUFHL08sR0FDcEJBLEdBR0QsT0FBT0EsR0FFTnVNLEdBQWN1QyxFQUFHOU8sR0FBSStPLEVBQUcvTyxJQUd4QjhPLEVBQUc5TyxLQUFPdUgsRUFBZSxHQUN6QndILEVBQUcvTyxLQUFPdUgsRUFBZSxFQUN6QixHQUdLMkYsR0ExVUNuUyxHQTZVVDBQLEdBQU9wRCxRQUFVLFNBQVU0SCxFQUFNQyxHQUNoQyxNQUFPekUsSUFBUXdFLEVBQU0sS0FBTSxLQUFNQyxJQUdsQ3pFLEdBQU95RCxnQkFBa0IsU0FBVXJRLEVBQU1vUixHQVN4QyxJQVBPcFIsRUFBS1MsZUFBaUJULEtBQVc5QyxHQUN2Q2tNLEVBQWFwSixHQUlkb1IsRUFBT0EsRUFBSzdOLFFBQVM2SCxFQUFrQixhQUVsQ3hDLEVBQVF5SCxrQkFBbUJoSCxHQUM1QkUsR0FBa0JBLEVBQWM3SSxLQUFNMFEsSUFDdEM5SCxHQUFrQkEsRUFBVTVJLEtBQU0wUSxJQUVyQyxJQUNDLEdBQUk3UCxHQUFNaUksRUFBUXRJLEtBQU1sQixFQUFNb1IsRUFHOUIsSUFBSzdQLEdBQU9xSCxFQUFROEgsbUJBR2xCMVEsRUFBSzlDLFVBQXVDLEtBQTNCOEMsRUFBSzlDLFNBQVNzRCxTQUNoQyxNQUFPZSxHQUVQLE1BQU1tRCxJQUdULE1BQU9rSSxJQUFRd0UsRUFBTWxVLEVBQVUsTUFBTzhDLElBQVFHLE9BQVMsR0FHeER5TSxHQUFPbkQsU0FBVyxTQUFVOUssRUFBU3FCLEdBS3BDLE9BSE9yQixFQUFROEIsZUFBaUI5QixLQUFjekIsR0FDN0NrTSxFQUFhekssR0FFUDhLLEVBQVU5SyxFQUFTcUIsSUFHM0I0TSxHQUFPL0wsS0FBTyxTQUFVYixFQUFNNEMsSUFFdEI1QyxFQUFLUyxlQUFpQlQsS0FBVzlDLEdBQ3ZDa00sRUFBYXBKLEVBR2QsSUFBSXBCLEdBQUtrSyxFQUFLMkYsV0FBWTdMLEVBQUtpRSxlQUU5QnlLLEVBQU0xUyxHQUFNMEwsRUFBT3BKLEtBQU00SCxFQUFLMkYsV0FBWTdMLEVBQUtpRSxlQUM5Q2pJLEVBQUlvQixFQUFNNEMsR0FBT3lHLEdBQ2pCeE0sU0FFRixPQUFPeVUsS0FBUXpVLFVBQ2QrTCxFQUFRaUMsYUFBZXhCLEVBQ3RCckosRUFBS3VOLGFBQWMzSyxJQUNsQjBPLEVBQU10UixFQUFLa1EsaUJBQWlCdE4sS0FBVTBPLEVBQUlDLFVBQzFDRCxFQUFJeEssTUFDSixLQUNGd0ssR0FHRjFFLEdBQU9oSSxNQUFRLFNBQVVDLEdBQ3hCLEtBQVVDLE9BQU8sMENBQTRDRCxJQU85RCtILEdBQU80RSxXQUFhLFNBQVV2SyxHQUM3QixHQUFJakgsR0FDSHlSLEtBQ0FwUCxFQUFJLEVBQ0pGLEVBQUksQ0FPTCxJQUpBNkgsR0FBZ0JwQixFQUFROEksaUJBQ3hCdkksR0FBYVAsRUFBUStJLFlBQWMxSyxFQUFRaEosTUFBTyxHQUNsRGdKLEVBQVF6RSxLQUFNeUgsR0FFVEQsRUFBZSxDQUNuQixNQUFTaEssRUFBT2lILEVBQVE5RSxLQUNsQm5DLElBQVNpSCxFQUFTOUUsS0FDdEJFLEVBQUlvUCxFQUFXMVQsS0FBTW9FLEdBR3ZCLE9BQVFFLElBQ1A0RSxFQUFReEUsT0FBUWdQLEVBQVlwUCxHQUFLLEdBSW5DLE1BQU80RSxJQU9SOEIsRUFBVTZELEdBQU83RCxRQUFVLFNBQVUvSSxHQUNwQyxHQUFJb1AsR0FDSDdOLEVBQU0sR0FDTlksRUFBSSxFQUNKM0IsRUFBV1IsRUFBS1EsUUFFakIsSUFBTUEsR0FNQyxHQUFrQixJQUFiQSxHQUErQixJQUFiQSxHQUErQixLQUFiQSxFQUFrQixDQUdqRSxHQUFpQyxnQkFBckJSLEdBQUs0UixZQUNoQixNQUFPNVIsR0FBSzRSLFdBR1osS0FBTTVSLEVBQU9BLEVBQUs2UCxXQUFZN1AsRUFBTUEsRUFBT0EsRUFBSzhPLFlBQy9Ddk4sR0FBT3dILEVBQVMvSSxPQUdaLElBQWtCLElBQWJRLEdBQStCLElBQWJBLEVBQzdCLE1BQU9SLEdBQUs2UixjQWhCWixNQUFTekMsRUFBT3BQLEVBQUttQyxHQUFLQSxJQUV6QlosR0FBT3dILEVBQVNxRyxFQWtCbEIsT0FBTzdOLElBR1J1SCxFQUFPOEQsR0FBT2tGLFdBR2I3RCxZQUFhLEdBRWI4RCxhQUFjNUQsR0FFZHBPLE1BQU93TCxFQUVQa0QsY0FFQXBPLFFBRUEyUixVQUNDQyxLQUFPQyxJQUFLLGFBQWNsUSxPQUFPLEdBQ2pDbVEsS0FBT0QsSUFBSyxjQUNaRSxLQUFPRixJQUFLLGtCQUFtQmxRLE9BQU8sR0FDdENxUSxLQUFPSCxJQUFLLG9CQUdiSSxXQUNDM0csS0FBUSxTQUFVNUwsR0FVakIsTUFUQUEsR0FBTSxHQUFLQSxFQUFNLEdBQUd3RCxRQUFTNkksR0FBV0MsSUFHeEN0TSxFQUFNLElBQU9BLEVBQU0sSUFBTUEsRUFBTSxJQUFNLElBQUt3RCxRQUFTNkksR0FBV0MsSUFFNUMsT0FBYnRNLEVBQU0sS0FDVkEsRUFBTSxHQUFLLElBQU1BLEVBQU0sR0FBSyxLQUd0QkEsRUFBTTlCLE1BQU8sRUFBRyxJQUd4QjROLE1BQVMsU0FBVTlMLEdBNkJsQixNQWxCQUEsR0FBTSxHQUFLQSxFQUFNLEdBQUc4RyxjQUVZLFFBQTNCOUcsRUFBTSxHQUFHOUIsTUFBTyxFQUFHLElBRWpCOEIsRUFBTSxJQUNYNk0sR0FBT2hJLE1BQU83RSxFQUFNLElBS3JCQSxFQUFNLEtBQVFBLEVBQU0sR0FBS0EsRUFBTSxJQUFNQSxFQUFNLElBQU0sR0FBSyxHQUFtQixTQUFiQSxFQUFNLElBQThCLFFBQWJBLEVBQU0sS0FDekZBLEVBQU0sS0FBVUEsRUFBTSxHQUFLQSxFQUFNLElBQXFCLFFBQWJBLEVBQU0sS0FHcENBLEVBQU0sSUFDakI2TSxHQUFPaEksTUFBTzdFLEVBQU0sSUFHZEEsR0FHUjZMLE9BQVUsU0FBVTdMLEdBQ25CLEdBQUl3UyxHQUNIQyxHQUFZelMsRUFBTSxJQUFNQSxFQUFNLEVBRS9CLE9BQUt3TCxHQUFpQixNQUFFN0ssS0FBTVgsRUFBTSxJQUM1QixNQUlIQSxFQUFNLElBQU1BLEVBQU0sS0FBT2xELFVBQzdCa0QsRUFBTSxHQUFLQSxFQUFNLEdBR055UyxHQUFZbkgsRUFBUTNLLEtBQU04UixLQUVwQ0QsRUFBU2pGLEdBQVVrRixHQUFVLE1BRTdCRCxFQUFTQyxFQUFTclUsUUFBUyxJQUFLcVUsRUFBU3JTLE9BQVNvUyxHQUFXQyxFQUFTclMsVUFHdkVKLEVBQU0sR0FBS0EsRUFBTSxHQUFHOUIsTUFBTyxFQUFHc1UsR0FDOUJ4UyxFQUFNLEdBQUt5UyxFQUFTdlUsTUFBTyxFQUFHc1UsSUFJeEJ4UyxFQUFNOUIsTUFBTyxFQUFHLE1BSXpCK1IsUUFFQ3RFLElBQU8sU0FBVStHLEdBQ2hCLEdBQUk3TCxHQUFXNkwsRUFBaUJsUCxRQUFTNkksR0FBV0MsSUFBWXhGLGFBQ2hFLE9BQTRCLE1BQXJCNEwsRUFDTixXQUFhLE9BQU8sR0FDcEIsU0FBVXpTLEdBQ1QsTUFBT0EsR0FBSzRHLFVBQVk1RyxFQUFLNEcsU0FBU0MsZ0JBQWtCRCxJQUkzRDZFLE1BQVMsU0FBVWlFLEdBQ2xCLEdBQUlnRCxHQUFVOUksRUFBWThGLEVBQVksSUFFdEMsT0FBT2dELEtBQ0xBLEVBQWMxSCxPQUFRLE1BQVFOLEVBQWEsSUFBTWdGLEVBQVksSUFBTWhGLEVBQWEsU0FDakZkLEVBQVk4RixFQUFXLFNBQVUxUCxHQUNoQyxNQUFPMFMsR0FBUWhTLEtBQWdDLGdCQUFuQlYsR0FBSzBQLFdBQTBCMVAsRUFBSzBQLGlCQUFvQjFQLEdBQUt1TixlQUFpQm5ELEdBQWdCcEssRUFBS3VOLGFBQWEsVUFBWSxPQUkzSjVCLEtBQVEsU0FBVS9JLEVBQU0rUCxFQUFVQyxHQUNqQyxNQUFPLFVBQVU1UyxHQUNoQixHQUFJNlMsR0FBU2pHLEdBQU8vTCxLQUFNYixFQUFNNEMsRUFFaEMsT0FBZSxPQUFWaVEsRUFDZ0IsT0FBYkYsRUFFRkEsR0FJTkUsR0FBVSxHQUVVLE1BQWJGLEVBQW1CRSxJQUFXRCxFQUN2QixPQUFiRCxFQUFvQkUsSUFBV0QsRUFDbEIsT0FBYkQsRUFBb0JDLEdBQXFDLElBQTVCQyxFQUFPMVUsUUFBU3lVLEdBQ2hDLE9BQWJELEVBQW9CQyxHQUFTQyxFQUFPMVUsUUFBU3lVLEdBQVUsR0FDMUMsT0FBYkQsRUFBb0JDLEdBQVNDLEVBQU81VSxPQUFRMlUsRUFBTXpTLFVBQWF5UyxFQUNsRCxPQUFiRCxHQUFzQixJQUFNRSxFQUFTLEtBQU0xVSxRQUFTeVUsR0FBVSxHQUNqRCxPQUFiRCxFQUFvQkUsSUFBV0QsR0FBU0MsRUFBTzVVLE1BQU8sRUFBRzJVLEVBQU16UyxPQUFTLEtBQVF5UyxFQUFRLEtBQ3hGLElBWk8sSUFnQlYvRyxNQUFTLFNBQVUzSCxFQUFNNE8sRUFBTTVELEVBQVVsTixFQUFPRSxHQUMvQyxHQUFJNlEsR0FBZ0MsUUFBdkI3TyxFQUFLakcsTUFBTyxFQUFHLEdBQzNCK1UsRUFBK0IsU0FBckI5TyxFQUFLakcsTUFBTyxJQUN0QmdWLEVBQWtCLFlBQVRILENBRVYsT0FBaUIsS0FBVjlRLEdBQXdCLElBQVRFLEVBR3JCLFNBQVVsQyxHQUNULFFBQVNBLEVBQUtlLFlBR2YsU0FBVWYsRUFBTXJCLEVBQVNnSCxHQUN4QixHQUFJcUksR0FBT2tGLEVBQVk5RCxFQUFNUixFQUFNdUUsRUFBV0MsRUFDN0NsQixFQUFNYSxJQUFXQyxFQUFVLGNBQWdCLGtCQUMzQzFELEVBQVN0UCxFQUFLZSxXQUNkNkIsRUFBT3FRLEdBQVVqVCxFQUFLNEcsU0FBU0MsY0FDL0J3TSxHQUFZMU4sSUFBUXNOLENBRXJCLElBQUszRCxFQUFTLENBR2IsR0FBS3lELEVBQVMsQ0FDYixNQUFRYixFQUFNLENBQ2I5QyxFQUFPcFAsQ0FDUCxPQUFTb1AsRUFBT0EsRUFBTThDLEdBQ3JCLEdBQUtlLEVBQVM3RCxFQUFLeEksU0FBU0MsZ0JBQWtCakUsRUFBeUIsSUFBbEJ3TSxFQUFLNU8sU0FDekQsT0FBTyxDQUlUNFMsR0FBUWxCLEVBQWUsU0FBVGhPLElBQW9Ca1AsR0FBUyxjQUU1QyxPQUFPLEVBTVIsR0FIQUEsR0FBVUosRUFBVTFELEVBQU9PLFdBQWFQLEVBQU9nRSxXQUcxQ04sR0FBV0ssRUFBVyxDQUUxQkgsRUFBYTVELEVBQVFsTSxLQUFja00sRUFBUWxNLE9BQzNDNEssRUFBUWtGLEVBQVloUCxPQUNwQmlQLEVBQVluRixFQUFNLEtBQU9yRSxHQUFXcUUsRUFBTSxHQUMxQ1ksRUFBT1osRUFBTSxLQUFPckUsR0FBV3FFLEVBQU0sR0FDckNvQixFQUFPK0QsR0FBYTdELEVBQU9oSyxXQUFZNk4sRUFFdkMsT0FBUy9ELElBQVMrRCxHQUFhL0QsR0FBUUEsRUFBTThDLEtBRzNDdEQsRUFBT3VFLEVBQVksSUFBTUMsRUFBTTdJLE1BR2hDLEdBQXVCLElBQWxCNkUsRUFBSzVPLFlBQW9Cb08sR0FBUVEsSUFBU3BQLEVBQU8sQ0FDckRrVCxFQUFZaFAsSUFBV3lGLEVBQVN3SixFQUFXdkUsRUFDM0MsWUFLSSxJQUFLeUUsSUFBYXJGLEdBQVNoTyxFQUFNb0QsS0FBY3BELEVBQU1vRCxRQUFrQmMsS0FBVzhKLEVBQU0sS0FBT3JFLEVBQ3JHaUYsRUFBT1osRUFBTSxPQUtiLE9BQVNvQixJQUFTK0QsR0FBYS9ELEdBQVFBLEVBQU04QyxLQUMzQ3RELEVBQU91RSxFQUFZLElBQU1DLEVBQU03SSxNQUVoQyxJQUFPMEksRUFBUzdELEVBQUt4SSxTQUFTQyxnQkFBa0JqRSxFQUF5QixJQUFsQndNLEVBQUs1TyxhQUFzQm9PLElBRTVFeUUsS0FDSGpFLEVBQU1oTSxLQUFjZ00sRUFBTWhNLFFBQWtCYyxJQUFXeUYsRUFBU2lGLElBRzdEUSxJQUFTcFAsR0FDYixLQVFKLE9BREE0TyxJQUFRMU0sRUFDRDBNLElBQVM1TSxHQUE0QixJQUFqQjRNLEVBQU81TSxHQUFlNE0sRUFBTzVNLEdBQVMsS0FLckU0SixPQUFVLFNBQVUySCxFQUFRckUsR0FLM0IsR0FBSXZOLEdBQ0gvQyxFQUFLa0ssRUFBS2dDLFFBQVN5SSxJQUFZekssRUFBSzBLLFdBQVlELEVBQU8xTSxnQkFDdEQrRixHQUFPaEksTUFBTyx1QkFBeUIyTyxFQUt6QyxPQUFLM1UsR0FBSXdFLEdBQ0R4RSxFQUFJc1EsR0FJUHRRLEVBQUd1QixPQUFTLEdBQ2hCd0IsR0FBUzRSLEVBQVFBLEVBQVEsR0FBSXJFLEdBQ3RCcEcsRUFBSzBLLFdBQVdqVixlQUFnQmdWLEVBQU8xTSxlQUM3Q3NILEdBQWEsU0FBVXRCLEVBQU1yRCxHQUM1QixHQUFJaUssR0FDSEMsRUFBVTlVLEVBQUlpTyxFQUFNcUMsR0FDcEIvTSxFQUFJdVIsRUFBUXZULE1BQ2IsT0FBUWdDLElBQ1BzUixFQUFNdFYsRUFBUStDLEtBQU0yTCxFQUFNNkcsRUFBUXZSLElBQ2xDMEssRUFBTTRHLEtBQVdqSyxFQUFTaUssR0FBUUMsRUFBUXZSLE1BRzVDLFNBQVVuQyxHQUNULE1BQU9wQixHQUFJb0IsRUFBTSxFQUFHMkIsS0FJaEIvQyxJQUlUa00sU0FFQzZJLElBQU94RixHQUFhLFNBQVV6UCxHQUk3QixHQUFJMFIsTUFDSG5KLEtBQ0EyTSxFQUFVM0ssRUFBU3ZLLEVBQVM2RSxRQUFTd0gsRUFBTyxNQUU3QyxPQUFPNkksR0FBU3hRLEdBQ2YrSyxHQUFhLFNBQVV0QixFQUFNckQsRUFBUzdLLEVBQVNnSCxHQUM5QyxHQUFJM0YsR0FDSDZULEVBQVlELEVBQVMvRyxFQUFNLEtBQU1sSCxNQUNqQ3hELEVBQUkwSyxFQUFLMU0sTUFHVixPQUFRZ0MsS0FDRG5DLEVBQU82VCxFQUFVMVIsTUFDdEIwSyxFQUFLMUssS0FBT3FILEVBQVFySCxHQUFLbkMsTUFJNUIsU0FBVUEsRUFBTXJCLEVBQVNnSCxHQUd4QixNQUZBeUssR0FBTSxHQUFLcFEsRUFDWDRULEVBQVN4RCxFQUFPLEtBQU16SyxFQUFLc0IsSUFDbkJBLEVBQVFzRCxTQUluQnVKLElBQU8zRixHQUFhLFNBQVV6UCxHQUM3QixNQUFPLFVBQVVzQixHQUNoQixNQUFPNE0sSUFBUWxPLEVBQVVzQixHQUFPRyxPQUFTLEtBSTNDc0osU0FBWTBFLEdBQWEsU0FBVTdILEdBQ2xDLE1BQU8sVUFBVXRHLEdBQ2hCLE9BQVNBLEVBQUs0UixhQUFlNVIsRUFBSytULFdBQWFoTCxFQUFTL0ksSUFBUzdCLFFBQVNtSSxHQUFTLE1BV3JGME4sS0FBUTdGLEdBQWMsU0FBVTZGLEdBTS9CLE1BSk0xSSxHQUFZNUssS0FBS3NULEdBQVEsS0FDOUJwSCxHQUFPaEksTUFBTyxxQkFBdUJvUCxHQUV0Q0EsRUFBT0EsRUFBS3pRLFFBQVM2SSxHQUFXQyxJQUFZeEYsY0FDckMsU0FBVTdHLEdBQ2hCLEdBQUlpVSxFQUNKLEdBQ0MsSUFBTUEsRUFBVzVLLEVBQ2hCckosRUFBS2dVLEtBQ0xoVSxFQUFLdU4sYUFBYSxhQUFldk4sRUFBS3VOLGFBQWEsUUFHbkQsTUFEQTBHLEdBQVdBLEVBQVNwTixjQUNib04sSUFBYUQsR0FBMkMsSUFBbkNDLEVBQVM5VixRQUFTNlYsRUFBTyxZQUU1Q2hVLEVBQU9BLEVBQUtlLGFBQWlDLElBQWxCZixFQUFLUSxTQUMzQyxRQUFPLEtBS1R5QyxPQUFVLFNBQVVqRCxHQUNuQixHQUFJa1UsR0FBT3RYLEVBQU9LLFVBQVlMLEVBQU9LLFNBQVNpWCxJQUM5QyxPQUFPQSxJQUFRQSxFQUFLalcsTUFBTyxLQUFRK0IsRUFBS21OLElBR3pDZ0gsS0FBUSxTQUFVblUsR0FDakIsTUFBT0EsS0FBUzdDLEdBR2pCaVgsTUFBUyxTQUFVcFUsR0FDbEIsTUFBT0EsS0FBUzlDLEVBQVNtWCxpQkFBbUJuWCxFQUFTb1gsVUFBWXBYLEVBQVNvWCxnQkFBa0J0VSxFQUFLa0UsTUFBUWxFLEVBQUt1VSxPQUFTdlUsRUFBS3dVLFdBSTdIQyxRQUFXLFNBQVV6VSxHQUNwQixNQUFPQSxHQUFLMFUsWUFBYSxHQUcxQkEsU0FBWSxTQUFVMVUsR0FDckIsTUFBT0EsR0FBSzBVLFlBQWEsR0FHMUJDLFFBQVcsU0FBVTNVLEdBR3BCLEdBQUk0RyxHQUFXNUcsRUFBSzRHLFNBQVNDLGFBQzdCLE9BQXFCLFVBQWJELEtBQTBCNUcsRUFBSzJVLFNBQTBCLFdBQWIvTixLQUEyQjVHLEVBQUs0VSxVQUdyRkEsU0FBWSxTQUFVNVUsR0FPckIsTUFKS0EsR0FBS2UsWUFDVGYsRUFBS2UsV0FBVzhULGNBR1Y3VSxFQUFLNFUsWUFBYSxHQUkxQkUsTUFBUyxTQUFVOVUsR0FNbEIsSUFBTUEsRUFBT0EsRUFBSzZQLFdBQVk3UCxFQUFNQSxFQUFPQSxFQUFLOE8sWUFDL0MsR0FBSzlPLEVBQUs0RyxTQUFXLEtBQXlCLElBQWxCNUcsRUFBS1EsVUFBb0MsSUFBbEJSLEVBQUtRLFNBQ3ZELE9BQU8sQ0FHVCxRQUFPLEdBR1I4TyxPQUFVLFNBQVV0UCxHQUNuQixPQUFROEksRUFBS2dDLFFBQWUsTUFBRzlLLElBSWhDK1UsT0FBVSxTQUFVL1UsR0FDbkIsTUFBT2tNLElBQVF4TCxLQUFNVixFQUFLNEcsV0FHM0J3SixNQUFTLFNBQVVwUSxHQUNsQixNQUFPaU0sR0FBUXZMLEtBQU1WLEVBQUs0RyxXQUczQm9PLE9BQVUsU0FBVWhWLEdBQ25CLEdBQUk0QyxHQUFPNUMsRUFBSzRHLFNBQVNDLGFBQ3pCLE9BQWdCLFVBQVRqRSxHQUFrQyxXQUFkNUMsRUFBS2tFLE1BQThCLFdBQVR0QixHQUd0RDBELEtBQVEsU0FBVXRHLEdBQ2pCLEdBQUlhLEVBR0osT0FBdUMsVUFBaENiLEVBQUs0RyxTQUFTQyxlQUNOLFNBQWQ3RyxFQUFLa0UsT0FDbUMsT0FBckNyRCxFQUFPYixFQUFLdU4sYUFBYSxVQUFvQjFNLEVBQUtnRyxnQkFBa0I3RyxFQUFLa0UsT0FJOUVsQyxNQUFTaU4sR0FBdUIsV0FDL0IsT0FBUyxLQUdWL00sS0FBUStNLEdBQXVCLFNBQVVFLEVBQWNoUCxHQUN0RCxPQUFTQSxFQUFTLEtBR25COEIsR0FBTWdOLEdBQXVCLFNBQVVFLEVBQWNoUCxFQUFRK08sR0FDNUQsT0FBb0IsRUFBWEEsRUFBZUEsRUFBVy9PLEVBQVMrTyxLQUc3QytGLEtBQVFoRyxHQUF1QixTQUFVRSxFQUFjaFAsR0FDdEQsR0FBSWdDLEdBQUksQ0FDUixNQUFZaEMsRUFBSmdDLEVBQVlBLEdBQUssRUFDeEJnTixFQUFhcFIsS0FBTW9FLEVBRXBCLE9BQU9nTixLQUdSK0YsSUFBT2pHLEdBQXVCLFNBQVVFLEVBQWNoUCxHQUNyRCxHQUFJZ0MsR0FBSSxDQUNSLE1BQVloQyxFQUFKZ0MsRUFBWUEsR0FBSyxFQUN4QmdOLEVBQWFwUixLQUFNb0UsRUFFcEIsT0FBT2dOLEtBR1JnRyxHQUFNbEcsR0FBdUIsU0FBVUUsRUFBY2hQLEVBQVErTyxHQUM1RCxHQUFJL00sR0FBZSxFQUFYK00sRUFBZUEsRUFBVy9PLEVBQVMrTyxDQUMzQyxRQUFVL00sR0FBSyxHQUNkZ04sRUFBYXBSLEtBQU1vRSxFQUVwQixPQUFPZ04sS0FHUmlHLEdBQU1uRyxHQUF1QixTQUFVRSxFQUFjaFAsRUFBUStPLEdBQzVELEdBQUkvTSxHQUFlLEVBQVgrTSxFQUFlQSxFQUFXL08sRUFBUytPLENBQzNDLE1BQWMvTyxJQUFKZ0MsR0FDVGdOLEVBQWFwUixLQUFNb0UsRUFFcEIsT0FBT2dOLE9BS1ZyRyxFQUFLZ0MsUUFBYSxJQUFJaEMsRUFBS2dDLFFBQVksRUFHdkMsS0FBTTNJLEtBQU9rVCxPQUFPLEVBQU1DLFVBQVUsRUFBTUMsTUFBTSxFQUFNQyxVQUFVLEVBQU1DLE9BQU8sR0FDNUUzTSxFQUFLZ0MsUUFBUzNJLEdBQU00TSxHQUFtQjVNLEVBRXhDLEtBQU1BLEtBQU91VCxRQUFRLEVBQU1DLE9BQU8sR0FDakM3TSxFQUFLZ0MsUUFBUzNJLEdBQU02TSxHQUFvQjdNLEVBSXpDLFNBQVNxUixPQUNUQSxHQUFXNVQsVUFBWWtKLEVBQUs4TSxRQUFVOU0sRUFBS2dDLFFBQzNDaEMsRUFBSzBLLFdBQWEsR0FBSUEsR0FFdEIsU0FBU2xHLElBQVU1TyxFQUFVbVgsR0FDNUIsR0FBSW5DLEdBQVMzVCxFQUFPK1YsRUFBUTVSLEVBQzNCNlIsRUFBT2hKLEVBQVFpSixFQUNmQyxFQUFTbk0sRUFBWXBMLEVBQVcsSUFFakMsSUFBS3VYLEVBQ0osTUFBT0osR0FBWSxFQUFJSSxFQUFPaFksTUFBTyxFQUd0QzhYLEdBQVFyWCxFQUNScU8sS0FDQWlKLEVBQWFsTixFQUFLd0osU0FFbEIsT0FBUXlELEVBQVEsR0FHVHJDLElBQVkzVCxFQUFRa0wsRUFBTzdLLEtBQU0yVixPQUNqQ2hXLElBRUpnVyxFQUFRQSxFQUFNOVgsTUFBTzhCLEVBQU0sR0FBR0ksU0FBWTRWLEdBRTNDaEosRUFBT2hQLEtBQU0rWCxPQUdkcEMsR0FBVSxHQUdKM1QsRUFBUW1MLEVBQWE5SyxLQUFNMlYsTUFDaENyQyxFQUFVM1QsRUFBTW1PLFFBQ2hCNEgsRUFBTy9YLE1BQ04rSSxNQUFPNE0sRUFFUHhQLEtBQU1uRSxFQUFNLEdBQUd3RCxRQUFTd0gsRUFBTyxPQUVoQ2dMLEVBQVFBLEVBQU05WCxNQUFPeVYsRUFBUXZULFFBSTlCLEtBQU0rRCxJQUFRNEUsR0FBS2tILFNBQ1pqUSxFQUFRd0wsRUFBV3JILEdBQU85RCxLQUFNMlYsS0FBY0MsRUFBWTlSLE1BQzlEbkUsRUFBUWlXLEVBQVk5UixHQUFRbkUsTUFDN0IyVCxFQUFVM1QsRUFBTW1PLFFBQ2hCNEgsRUFBTy9YLE1BQ04rSSxNQUFPNE0sRUFDUHhQLEtBQU1BLEVBQ05zRixRQUFTekosSUFFVmdXLEVBQVFBLEVBQU05WCxNQUFPeVYsRUFBUXZULFFBSS9CLEtBQU11VCxFQUNMLE1BT0YsTUFBT21DLEdBQ05FLEVBQU01VixPQUNONFYsRUFDQ25KLEdBQU9oSSxNQUFPbEcsR0FFZG9MLEVBQVlwTCxFQUFVcU8sR0FBUzlPLE1BQU8sR0FHekMsUUFBU3dQLElBQVlxSSxHQUNwQixHQUFJM1QsR0FBSSxFQUNQQyxFQUFNMFQsRUFBTzNWLE9BQ2J6QixFQUFXLEVBQ1osTUFBWTBELEVBQUpELEVBQVNBLElBQ2hCekQsR0FBWW9YLEVBQU8zVCxHQUFHMkUsS0FFdkIsT0FBT3BJLEdBR1IsUUFBU3dYLElBQWV0QyxFQUFTdUMsRUFBWUMsR0FDNUMsR0FBSWxFLEdBQU1pRSxFQUFXakUsSUFDcEJtRSxFQUFtQkQsR0FBZ0IsZUFBUmxFLEVBQzNCb0UsRUFBV3pVLEdBRVosT0FBT3NVLEdBQVduVSxNQUVqQixTQUFVaEMsRUFBTXJCLEVBQVNnSCxHQUN4QixNQUFTM0YsRUFBT0EsRUFBTWtTLEdBQ3JCLEdBQXVCLElBQWxCbFMsRUFBS1EsVUFBa0I2VixFQUMzQixNQUFPekMsR0FBUzVULEVBQU1yQixFQUFTZ0gsSUFNbEMsU0FBVTNGLEVBQU1yQixFQUFTZ0gsR0FDeEIsR0FBSVosR0FBTWlKLEVBQU9rRixFQUNoQnFELEVBQVM1TSxFQUFVLElBQU0yTSxDQUcxQixJQUFLM1EsR0FDSixNQUFTM0YsRUFBT0EsRUFBTWtTLEdBQ3JCLElBQXVCLElBQWxCbFMsRUFBS1EsVUFBa0I2VixJQUN0QnpDLEVBQVM1VCxFQUFNckIsRUFBU2dILEdBQzVCLE9BQU8sTUFLVixPQUFTM0YsRUFBT0EsRUFBTWtTLEdBQ3JCLEdBQXVCLElBQWxCbFMsRUFBS1EsVUFBa0I2VixFQUUzQixHQURBbkQsRUFBYWxULEVBQU1vRCxLQUFjcEQsRUFBTW9ELFFBQ2pDNEssRUFBUWtGLEVBQVloQixLQUFVbEUsRUFBTSxLQUFPdUksR0FDaEQsSUFBTXhSLEVBQU9pSixFQUFNLE9BQVEsR0FBUWpKLElBQVM4RCxFQUMzQyxNQUFPOUQsTUFBUyxNQUtqQixJQUZBaUosRUFBUWtGLEVBQVloQixJQUFVcUUsR0FDOUJ2SSxFQUFNLEdBQUs0RixFQUFTNVQsRUFBTXJCLEVBQVNnSCxJQUFTa0QsRUFDdkNtRixFQUFNLE1BQU8sRUFDakIsT0FBTyxHQVNmLFFBQVN3SSxJQUFnQkMsR0FDeEIsTUFBT0EsR0FBU3RXLE9BQVMsRUFDeEIsU0FBVUgsRUFBTXJCLEVBQVNnSCxHQUN4QixHQUFJeEQsR0FBSXNVLEVBQVN0VyxNQUNqQixPQUFRZ0MsSUFDUCxJQUFNc1UsRUFBU3RVLEdBQUluQyxFQUFNckIsRUFBU2dILEdBQ2pDLE9BQU8sQ0FHVCxRQUFPLEdBRVI4USxFQUFTLEdBR1gsUUFBU0MsSUFBVTdDLEVBQVd2UixFQUFLME4sRUFBUXJSLEVBQVNnSCxHQUNuRCxHQUFJM0YsR0FDSDJXLEtBQ0F4VSxFQUFJLEVBQ0pDLEVBQU15UixFQUFVMVQsT0FDaEJ5VyxFQUFnQixNQUFQdFUsQ0FFVixNQUFZRixFQUFKRCxFQUFTQSxLQUNWbkMsRUFBTzZULEVBQVUxUixPQUNoQjZOLEdBQVVBLEVBQVFoUSxFQUFNckIsRUFBU2dILE1BQ3RDZ1IsRUFBYTVZLEtBQU1pQyxHQUNkNFcsR0FDSnRVLEVBQUl2RSxLQUFNb0UsR0FNZCxPQUFPd1UsR0FHUixRQUFTRSxJQUFZdkUsRUFBVzVULEVBQVVrVixFQUFTa0QsRUFBWUMsRUFBWUMsR0FPMUUsTUFOS0YsS0FBZUEsRUFBWTFULEtBQy9CMFQsRUFBYUQsR0FBWUMsSUFFckJDLElBQWVBLEVBQVkzVCxLQUMvQjJULEVBQWFGLEdBQVlFLEVBQVlDLElBRS9CN0ksR0FBYSxTQUFVdEIsRUFBTTVGLEVBQVN0SSxFQUFTZ0gsR0FDckQsR0FBSXNSLEdBQU05VSxFQUFHbkMsRUFDWmtYLEtBQ0FDLEtBQ0FDLEVBQWNuUSxFQUFROUcsT0FHdEJtQixFQUFRdUwsR0FBUXdLLEdBQWtCM1ksR0FBWSxJQUFLQyxFQUFRNkIsVUFBYTdCLEdBQVlBLE1BR3BGMlksR0FBWWhGLElBQWV6RixHQUFTbk8sRUFFbkM0QyxFQURBb1YsR0FBVXBWLEVBQU80VixFQUFRNUUsRUFBVzNULEVBQVNnSCxHQUc5QzRSLEVBQWEzRCxFQUVabUQsSUFBZ0JsSyxFQUFPeUYsRUFBWThFLEdBQWVOLE1BTWpEN1AsRUFDRHFRLENBUUYsSUFMSzFELEdBQ0pBLEVBQVMwRCxFQUFXQyxFQUFZNVksRUFBU2dILEdBSXJDbVIsRUFBYSxDQUNqQkcsRUFBT1AsR0FBVWEsRUFBWUosR0FDN0JMLEVBQVlHLEtBQVV0WSxFQUFTZ0gsR0FHL0J4RCxFQUFJOFUsRUFBSzlXLE1BQ1QsT0FBUWdDLEtBQ0RuQyxFQUFPaVgsRUFBSzlVLE1BQ2pCb1YsRUFBWUosRUFBUWhWLE1BQVNtVixFQUFXSCxFQUFRaFYsSUFBT25DLElBSzFELEdBQUs2TSxHQUNKLEdBQUtrSyxHQUFjekUsRUFBWSxDQUM5QixHQUFLeUUsRUFBYSxDQUVqQkUsS0FDQTlVLEVBQUlvVixFQUFXcFgsTUFDZixPQUFRZ0MsS0FDRG5DLEVBQU91WCxFQUFXcFYsS0FFdkI4VSxFQUFLbFosS0FBT3VaLEVBQVVuVixHQUFLbkMsRUFHN0IrVyxHQUFZLEtBQU9RLEtBQWtCTixFQUFNdFIsR0FJNUN4RCxFQUFJb1YsRUFBV3BYLE1BQ2YsT0FBUWdDLEtBQ0RuQyxFQUFPdVgsRUFBV3BWLE1BQ3RCOFUsRUFBT0YsRUFBYTVZLEVBQVErQyxLQUFNMkwsRUFBTTdNLEdBQVNrWCxFQUFPL1UsSUFBTSxLQUUvRDBLLEVBQUtvSyxLQUFVaFEsRUFBUWdRLEdBQVFqWCxTQU9sQ3VYLEdBQWFiLEdBQ1phLElBQWV0USxFQUNkc1EsRUFBVzlVLE9BQVEyVSxFQUFhRyxFQUFXcFgsUUFDM0NvWCxHQUVHUixFQUNKQSxFQUFZLEtBQU05UCxFQUFTc1EsRUFBWTVSLEdBRXZDNUgsRUFBSytELE1BQU9tRixFQUFTc1EsS0FNekIsUUFBU0MsSUFBbUIxQixHQUMzQixHQUFJMkIsR0FBYzdELEVBQVN2UixFQUMxQkQsRUFBTTBULEVBQU8zVixPQUNidVgsRUFBa0I1TyxFQUFLa0osU0FBVThELEVBQU8sR0FBRzVSLE1BQzNDeVQsRUFBbUJELEdBQW1CNU8sRUFBS2tKLFNBQVMsS0FDcEQ3UCxFQUFJdVYsRUFBa0IsRUFBSSxFQUcxQkUsRUFBZTFCLEdBQWUsU0FBVWxXLEdBQ3ZDLE1BQU9BLEtBQVN5WCxHQUNkRSxHQUFrQixHQUNyQkUsRUFBa0IzQixHQUFlLFNBQVVsVyxHQUMxQyxNQUFPN0IsR0FBUStDLEtBQU11VyxFQUFjelgsR0FBUyxJQUMxQzJYLEdBQWtCLEdBQ3JCbEIsR0FBYSxTQUFVelcsRUFBTXJCLEVBQVNnSCxHQUNyQyxPQUFVK1IsSUFBcUIvUixHQUFPaEgsSUFBWXVLLE1BQ2hEdU8sRUFBZTlZLEdBQVM2QixTQUN4Qm9YLEVBQWM1WCxFQUFNckIsRUFBU2dILEdBQzdCa1MsRUFBaUI3WCxFQUFNckIsRUFBU2dILEtBR3BDLE1BQVl2RCxFQUFKRCxFQUFTQSxJQUNoQixHQUFNeVIsRUFBVTlLLEVBQUtrSixTQUFVOEQsRUFBTzNULEdBQUcrQixNQUN4Q3VTLEdBQWFQLEdBQWNNLEdBQWdCQyxHQUFZN0MsUUFDakQsQ0FJTixHQUhBQSxFQUFVOUssRUFBS2tILE9BQVE4RixFQUFPM1QsR0FBRytCLE1BQU9wQyxNQUFPLEtBQU1nVSxFQUFPM1QsR0FBR3FILFNBRzFEb0ssRUFBU3hRLEdBQVksQ0FHekIsSUFEQWYsSUFBTUYsRUFDTUMsRUFBSkMsRUFBU0EsSUFDaEIsR0FBS3lHLEVBQUtrSixTQUFVOEQsRUFBT3pULEdBQUc2QixNQUM3QixLQUdGLE9BQU8yUyxJQUNOMVUsRUFBSSxHQUFLcVUsR0FBZ0JDLEdBQ3pCdFUsRUFBSSxHQUFLc0wsR0FFUnFJLEVBQU83WCxNQUFPLEVBQUdrRSxFQUFJLEdBQUl0RSxRQUFTaUosTUFBZ0MsTUFBekJnUCxFQUFRM1QsRUFBSSxHQUFJK0IsS0FBZSxJQUFNLE1BQzdFWCxRQUFTd0gsRUFBTyxNQUNsQjZJLEVBQ0l2UixFQUFKRixHQUFTcVYsR0FBbUIxQixFQUFPN1gsTUFBT2tFLEVBQUdFLElBQ3pDRCxFQUFKQyxHQUFXbVYsR0FBb0IxQixFQUFTQSxFQUFPN1gsTUFBT29FLElBQ2xERCxFQUFKQyxHQUFXb0wsR0FBWXFJLElBR3pCVyxFQUFTMVksS0FBTTZWLEdBSWpCLE1BQU80QyxJQUFnQkMsR0FHeEIsUUFBU3FCLElBQTBCQyxFQUFpQkMsR0FFbkQsR0FBSUMsR0FBb0IsRUFDdkJDLEVBQVFGLEVBQVk3WCxPQUFTLEVBQzdCZ1ksRUFBWUosRUFBZ0I1WCxPQUFTLEVBQ3JDaVksRUFBZSxTQUFVdkwsRUFBTWxPLEVBQVNnSCxFQUFLc0IsRUFBU29SLEdBQ3JELEdBQUlyWSxHQUFNcUMsRUFBR3VSLEVBQ1owRSxLQUNBQyxFQUFlLEVBQ2ZwVyxFQUFJLElBQ0owUixFQUFZaEgsTUFDWjJMLEVBQTZCLE1BQWpCSCxFQUNaSSxFQUFnQnZQLEVBRWhCNUgsRUFBUXVMLEdBQVFzTCxHQUFhclAsRUFBS3pJLEtBQVUsSUFBRyxJQUFLZ1ksR0FBaUIxWixFQUFRb0MsWUFBY3BDLEdBRTNGK1osRUFBaUIvTyxHQUE0QixNQUFqQjhPLEVBQXdCLEVBQUlwVixLQUFLQyxVQUFZLEVBUzFFLEtBUEtrVixJQUNKdFAsRUFBbUJ2SyxJQUFZekIsR0FBWXlCLEVBQzNDa0ssRUFBYW9QLEdBS2UsT0FBcEJqWSxFQUFPc0IsRUFBTWEsSUFBYUEsSUFBTSxDQUN4QyxHQUFLZ1csR0FBYW5ZLEVBQU8sQ0FDeEJxQyxFQUFJLENBQ0osT0FBU3VSLEVBQVVtRSxFQUFnQjFWLEtBQ2xDLEdBQUt1UixFQUFTNVQsRUFBTXJCLEVBQVNnSCxHQUFRLENBQ3BDc0IsRUFBUWxKLEtBQU1pQyxFQUNkLE9BR0d3WSxJQUNKN08sRUFBVStPLEVBQ1Y3UCxJQUFlb1AsR0FLWkMsS0FFRWxZLEdBQVE0VCxHQUFXNVQsSUFDeEJ1WSxJQUlJMUwsR0FDSmdILEVBQVU5VixLQUFNaUMsSUFPbkIsR0FEQXVZLEdBQWdCcFcsRUFDWCtWLEdBQVMvVixJQUFNb1csRUFBZSxDQUNsQ2xXLEVBQUksQ0FDSixPQUFTdVIsRUFBVW9FLEVBQVkzVixLQUM5QnVSLEVBQVNDLEVBQVd5RSxFQUFZM1osRUFBU2dILEVBRzFDLElBQUtrSCxFQUFPLENBRVgsR0FBSzBMLEVBQWUsRUFDbkIsTUFBUXBXLElBQ0EwUixFQUFVMVIsSUFBTW1XLEVBQVduVyxLQUNqQ21XLEVBQVduVyxHQUFLb0ksRUFBSXJKLEtBQU0rRixHQU03QnFSLEdBQWE1QixHQUFVNEIsR0FJeEJ2YSxFQUFLK0QsTUFBT21GLEVBQVNxUixHQUdoQkUsSUFBYzNMLEdBQVF5TCxFQUFXblksT0FBUyxHQUM1Q29ZLEVBQWVQLEVBQVk3WCxPQUFXLEdBRXhDeU0sR0FBTzRFLFdBQVl2SyxHQVVyQixNQUxLdVIsS0FDSjdPLEVBQVUrTyxFQUNWeFAsRUFBbUJ1UCxHQUdiNUUsRUFHVCxPQUFPcUUsR0FDTi9KLEdBQWNpSyxHQUNkQSxFQUdGblAsRUFBVTJELEdBQU8zRCxRQUFVLFNBQVV2SyxFQUFVaWEsR0FDOUMsR0FBSXhXLEdBQ0g2VixLQUNBRCxLQUNBOUIsRUFBU2xNLEVBQWVyTCxFQUFXLElBRXBDLEtBQU11WCxFQUFTLENBRVIwQyxJQUNMQSxFQUFRckwsR0FBVTVPLElBRW5CeUQsRUFBSXdXLEVBQU14WSxNQUNWLE9BQVFnQyxJQUNQOFQsRUFBU3VCLEdBQW1CbUIsRUFBTXhXLElBQzdCOFQsRUFBUTdTLEdBQ1o0VSxFQUFZamEsS0FBTWtZLEdBRWxCOEIsRUFBZ0JoYSxLQUFNa1ksRUFLeEJBLEdBQVNsTSxFQUFlckwsRUFBVW9aLEdBQTBCQyxFQUFpQkMsSUFFOUUsTUFBTy9CLEdBR1IsU0FBU29CLElBQWtCM1ksRUFBVWthLEVBQVUzUixHQUM5QyxHQUFJOUUsR0FBSSxFQUNQQyxFQUFNd1csRUFBU3pZLE1BQ2hCLE1BQVlpQyxFQUFKRCxFQUFTQSxJQUNoQnlLLEdBQVFsTyxFQUFVa2EsRUFBU3pXLEdBQUk4RSxFQUVoQyxPQUFPQSxHQUdSLFFBQVM2RyxJQUFRcFAsRUFBVUMsRUFBU3NJLEVBQVM0RixHQUM1QyxHQUFJMUssR0FBRzJULEVBQVErQyxFQUFPM1UsRUFBTTdELEVBQzNCTixFQUFRdU4sR0FBVTVPLEVBRW5CLEtBQU1tTyxHQUVpQixJQUFqQjlNLEVBQU1JLE9BQWUsQ0FJekIsR0FEQTJWLEVBQVMvVixFQUFNLEdBQUtBLEVBQU0sR0FBRzlCLE1BQU8sR0FDL0I2WCxFQUFPM1YsT0FBUyxHQUFrQyxRQUE1QjBZLEVBQVEvQyxFQUFPLElBQUk1UixNQUM1QzBFLEVBQVFrSCxTQUFnQyxJQUFyQm5SLEVBQVE2QixVQUFrQjZJLEdBQzdDUCxFQUFLa0osU0FBVThELEVBQU8sR0FBRzVSLE1BQVMsQ0FHbkMsR0FEQXZGLEdBQVltSyxFQUFLekksS0FBUyxHQUFHd1ksRUFBTXJQLFFBQVEsR0FBR2pHLFFBQVE2SSxHQUFXQyxJQUFZMU4sUUFBa0IsSUFDekZBLEVBQ0wsTUFBT3NJLEVBRVJ2SSxHQUFXQSxFQUFTVCxNQUFPNlgsRUFBTzVILFFBQVFwSCxNQUFNM0csUUFJakRnQyxFQUFJb0osRUFBd0IsYUFBRTdLLEtBQU1oQyxHQUFhLEVBQUlvWCxFQUFPM1YsTUFDNUQsT0FBUWdDLElBQU0sQ0FJYixHQUhBMFcsRUFBUS9DLEVBQU8zVCxHQUdWMkcsRUFBS2tKLFNBQVc5TixFQUFPMlUsRUFBTTNVLE1BQ2pDLEtBRUQsS0FBTTdELEVBQU95SSxFQUFLekksS0FBTTZELE1BRWpCMkksRUFBT3hNLEVBQ1p3WSxFQUFNclAsUUFBUSxHQUFHakcsUUFBUzZJLEdBQVdDLElBQ3JDbEIsRUFBU3pLLEtBQU1vVixFQUFPLEdBQUc1UixPQUFVdkYsRUFBUW9DLFlBQWNwQyxJQUNyRCxDQUtKLEdBRkFtWCxFQUFPclQsT0FBUU4sRUFBRyxHQUNsQnpELEVBQVdtTyxFQUFLMU0sUUFBVXNOLEdBQVlxSSxJQUNoQ3BYLEVBRUwsTUFEQVgsR0FBSytELE1BQU9tRixFQUFTNEYsR0FDZDVGLENBR1IsU0FnQkwsTUFQQWdDLEdBQVN2SyxFQUFVcUIsR0FDbEI4TSxFQUNBbE8sR0FDQzBLLEVBQ0RwQyxFQUNBa0UsRUFBU3pLLEtBQU1oQyxJQUVUdUksRUFNUjJCLEVBQVErSSxXQUFhdk8sRUFBUXVGLE1BQU0sSUFBSW5HLEtBQU15SCxHQUFZeUQsS0FBSyxNQUFRdEssRUFJdEV3RixFQUFROEksaUJBQW1CMUgsRUFHM0JaLElBSUFSLEVBQVFtSSxhQUFlM0MsR0FBTyxTQUFVMEssR0FFdkMsTUFBdUUsR0FBaEVBLEVBQUtuSSx3QkFBeUJ6VCxFQUFTaUksY0FBYyxVQU12RGlKLEdBQU8sU0FBVUMsR0FFdEIsTUFEQUEsR0FBSXVCLFVBQVksbUJBQytCLE1BQXhDdkIsRUFBSXdCLFdBQVd0QyxhQUFhLFdBRW5DZSxHQUFXLHlCQUEwQixTQUFVdE8sRUFBTTRDLEVBQU1vRyxHQUMxRCxNQUFNQSxHQUFOLFVBQ1FoSixFQUFLdU4sYUFBYzNLLEVBQTZCLFNBQXZCQSxFQUFLaUUsY0FBMkIsRUFBSSxLQU9qRStCLEVBQVFpQyxZQUFldUQsR0FBTyxTQUFVQyxHQUc3QyxNQUZBQSxHQUFJdUIsVUFBWSxXQUNoQnZCLEVBQUl3QixXQUFXckMsYUFBYyxRQUFTLElBQ1ksS0FBM0NhLEVBQUl3QixXQUFXdEMsYUFBYyxZQUVwQ2UsR0FBVyxRQUFTLFNBQVV0TyxFQUFNNEMsRUFBTW9HLEdBQ3pDLE1BQU1BLElBQXlDLFVBQWhDaEosRUFBSzRHLFNBQVNDLGNBQTdCLFVBQ1E3RyxFQUFLK1ksZUFPVDNLLEdBQU8sU0FBVUMsR0FDdEIsTUFBdUMsT0FBaENBLEVBQUlkLGFBQWEsZUFFeEJlLEdBQVc3RCxFQUFVLFNBQVV6SyxFQUFNNEMsRUFBTW9HLEdBQzFDLEdBQUlzSSxFQUNKLE9BQU10SSxHQUFOLFdBQ1NzSSxFQUFNdFIsRUFBS2tRLGlCQUFrQnROLEtBQVcwTyxFQUFJQyxVQUNuREQsRUFBSXhLLE1BQ0o5RyxFQUFNNEMsTUFBVyxFQUFPQSxFQUFLaUUsY0FBZ0IsT0FLakR2SixFQUFPK0MsS0FBT3VNLEdBQ2R0UCxFQUFPOFQsS0FBT3hFLEdBQU9rRixVQUNyQnhVLEVBQU84VCxLQUFLLEtBQU85VCxFQUFPOFQsS0FBS3RHLFFBQy9CeE4sRUFBTzBiLE9BQVNwTSxHQUFPNEUsV0FDdkJsVSxFQUFPZ0osS0FBT3NHLEdBQU83RCxRQUNyQnpMLEVBQU8yYixTQUFXck0sR0FBTzVELE1BQ3pCMUwsRUFBT21NLFNBQVdtRCxHQUFPbkQsVUFHckI3TSxFQUVKLElBQUlzYyxLQUdKLFNBQVNDLEdBQWV4VyxHQUN2QixHQUFJeVcsR0FBU0YsRUFBY3ZXLEtBSTNCLE9BSEFyRixHQUFPbUUsS0FBTWtCLEVBQVE1QyxNQUFPZixPQUF3QixTQUFVc04sRUFBRytNLEdBQ2hFRCxFQUFRQyxJQUFTLElBRVhELEVBeUJSOWIsRUFBT2djLFVBQVksU0FBVTNXLEdBSTVCQSxFQUE2QixnQkFBWkEsR0FDZHVXLEVBQWN2VyxJQUFhd1csRUFBZXhXLEdBQzVDckYsRUFBT29GLFVBQVlDLEVBRXBCLElBQ0M0VyxHQUVBQyxFQUVBQyxFQUVBQyxFQUVBQyxFQUVBQyxFQUVBQyxLQUVBQyxHQUFTblgsRUFBUW9YLFNBRWpCQyxFQUFPLFNBQVVqVixHQU9oQixJQU5Bd1UsRUFBUzVXLEVBQVE0VyxRQUFVeFUsRUFDM0J5VSxHQUFRLEVBQ1JJLEVBQWNGLEdBQWUsRUFDN0JBLEVBQWMsRUFDZEMsRUFBZUUsRUFBSzFaLE9BQ3BCc1osR0FBUyxFQUNESSxHQUFzQkYsRUFBZEMsRUFBNEJBLElBQzNDLEdBQUtDLEVBQU1ELEdBQWM5WCxNQUFPaUQsRUFBTSxHQUFLQSxFQUFNLE9BQVUsR0FBU3BDLEVBQVFzWCxZQUFjLENBQ3pGVixHQUFTLENBQ1QsT0FHRkUsR0FBUyxFQUNKSSxJQUNDQyxFQUNDQSxFQUFNM1osUUFDVjZaLEVBQU1GLEVBQU01TCxTQUVGcUwsRUFDWE0sS0FFQUssRUFBS0MsWUFLUkQsR0FFQ0UsSUFBSyxXQUNKLEdBQUtQLEVBQU8sQ0FFWCxHQUFJekcsR0FBUXlHLEVBQUsxWixRQUNqQixRQUFVaWEsR0FBS3pZLEdBQ2RyRSxFQUFPbUUsS0FBTUUsRUFBTSxTQUFVMkssRUFBRzdFLEdBQy9CLEdBQUl2RCxHQUFPNUcsRUFBTzRHLEtBQU11RCxFQUNWLGNBQVR2RCxFQUNFdkIsRUFBUXFXLFFBQVdrQixFQUFLcEcsSUFBS3JNLElBQ2xDb1MsRUFBSzliLEtBQU0wSixHQUVEQSxHQUFPQSxFQUFJdEgsUUFBbUIsV0FBVCtELEdBRWhDa1csRUFBSzNTLE9BR0oxRixXQUdDMFgsRUFDSkUsRUFBZUUsRUFBSzFaLE9BR1RvWixJQUNYRyxFQUFjdEcsRUFDZDRHLEVBQU1ULElBR1IsTUFBT3RaLE9BR1JvRixPQUFRLFdBa0JQLE1BakJLd1UsSUFDSnZjLEVBQU9tRSxLQUFNTSxVQUFXLFNBQVV1SyxFQUFHN0UsR0FDcEMsR0FBSTRTLEVBQ0osUUFBU0EsRUFBUS9jLEVBQU82SixRQUFTTSxFQUFLb1MsRUFBTVEsSUFBWSxHQUN2RFIsRUFBS3BYLE9BQVE0WCxFQUFPLEdBRWZaLElBQ1VFLEdBQVRVLEdBQ0pWLElBRWFDLEdBQVRTLEdBQ0pULE9BTUUzWixNQUlSNlQsSUFBSyxTQUFVbFYsR0FDZCxNQUFPQSxHQUFLdEIsRUFBTzZKLFFBQVN2SSxFQUFJaWIsR0FBUyxNQUFTQSxJQUFRQSxFQUFLMVosU0FHaEUyVSxNQUFPLFdBR04sTUFGQStFLE1BQ0FGLEVBQWUsRUFDUjFaLE1BR1JrYSxRQUFTLFdBRVIsTUFEQU4sR0FBT0MsRUFBUVAsRUFBUzFjLFVBQ2pCb0QsTUFHUnlVLFNBQVUsV0FDVCxPQUFRbUYsR0FHVFMsS0FBTSxXQUtMLE1BSkFSLEdBQVFqZCxVQUNGMGMsR0FDTFcsRUFBS0MsVUFFQ2xhLE1BR1JzYSxPQUFRLFdBQ1AsT0FBUVQsR0FHVFUsU0FBVSxTQUFVN2IsRUFBU2dELEdBVTVCLE9BVEtrWSxHQUFXTCxJQUFTTSxJQUN4Qm5ZLEVBQU9BLE1BQ1BBLEdBQVNoRCxFQUFTZ0QsRUFBSzFELE1BQVEwRCxFQUFLMUQsUUFBVTBELEdBQ3pDOFgsRUFDSkssRUFBTS9iLEtBQU00RCxHQUVacVksRUFBTXJZLElBR0QxQixNQUdSK1osS0FBTSxXQUVMLE1BREFFLEdBQUtNLFNBQVV2YSxLQUFNOEIsV0FDZDlCLE1BR1J1WixNQUFPLFdBQ04sUUFBU0EsR0FJWixPQUFPVSxJQUVSNWMsRUFBT29GLFFBRU42RixTQUFVLFNBQVVrUyxHQUNuQixHQUFJQyxLQUVBLFVBQVcsT0FBUXBkLEVBQU9nYyxVQUFVLGVBQWdCLGFBQ3BELFNBQVUsT0FBUWhjLEVBQU9nYyxVQUFVLGVBQWdCLGFBQ25ELFNBQVUsV0FBWWhjLEVBQU9nYyxVQUFVLFlBRTFDcUIsRUFBUSxVQUNSL1ksR0FDQytZLE1BQU8sV0FDTixNQUFPQSxJQUVSQyxPQUFRLFdBRVAsTUFEQUMsR0FBU2haLEtBQU1FLFdBQVkrWSxLQUFNL1ksV0FDMUI5QixNQUVSOGEsS0FBTSxXQUNMLEdBQUlDLEdBQU1qWixTQUNWLE9BQU96RSxHQUFPaUwsU0FBUyxTQUFVMFMsR0FDaEMzZCxFQUFPbUUsS0FBTWlaLEVBQVEsU0FBVXZZLEVBQUcrWSxHQUNqQyxHQUFJQyxHQUFTRCxFQUFPLEdBQ25CdGMsRUFBS3RCLEVBQU9zRCxXQUFZb2EsRUFBSzdZLEtBQVM2WSxFQUFLN1ksRUFFNUMwWSxHQUFVSyxFQUFNLElBQUssV0FDcEIsR0FBSUUsR0FBV3hjLEdBQU1BLEVBQUdrRCxNQUFPN0IsS0FBTThCLFVBQ2hDcVosSUFBWTlkLEVBQU9zRCxXQUFZd2EsRUFBU3haLFNBQzVDd1osRUFBU3haLFVBQ1BDLEtBQU1vWixFQUFTSSxTQUNmUCxLQUFNRyxFQUFTSyxRQUNmQyxTQUFVTixFQUFTTyxRQUVyQlAsRUFBVUUsRUFBUyxRQUFVbGIsT0FBUzJCLEVBQVVxWixFQUFTclosVUFBWTNCLEtBQU1yQixHQUFPd2MsR0FBYXJaLGVBSWxHaVosRUFBTSxPQUNKcFosV0FJSkEsUUFBUyxTQUFVcUMsR0FDbEIsTUFBYyxPQUFQQSxFQUFjM0csRUFBT29GLE9BQVF1QixFQUFLckMsR0FBWUEsSUFHdkRpWixJQXdDRCxPQXJDQWpaLEdBQVE2WixLQUFPN1osRUFBUW1aLEtBR3ZCemQsRUFBT21FLEtBQU1pWixFQUFRLFNBQVV2WSxFQUFHK1ksR0FDakMsR0FBSXJCLEdBQU9xQixFQUFPLEdBQ2pCUSxFQUFjUixFQUFPLEVBR3RCdFosR0FBU3NaLEVBQU0sSUFBT3JCLEVBQUtPLElBR3RCc0IsR0FDSjdCLEVBQUtPLElBQUksV0FFUk8sRUFBUWUsR0FHTmhCLEVBQVksRUFBSnZZLEdBQVMsR0FBSWdZLFFBQVNPLEVBQVEsR0FBSyxHQUFJSixNQUluRE8sRUFBVUssRUFBTSxJQUFPLFdBRXRCLE1BREFMLEdBQVVLLEVBQU0sR0FBSyxRQUFVamIsT0FBUzRhLEVBQVdqWixFQUFVM0IsS0FBTThCLFdBQzVEOUIsTUFFUjRhLEVBQVVLLEVBQU0sR0FBSyxRQUFXckIsRUFBS1csV0FJdEM1WSxFQUFRQSxRQUFTaVosR0FHWkosR0FDSkEsRUFBS3ZaLEtBQU0yWixFQUFVQSxHQUlmQSxHQUlSYyxLQUFNLFNBQVVDLEdBQ2YsR0FBSXpaLEdBQUksRUFDUDBaLEVBQWdCN2QsRUFBV2tELEtBQU1hLFdBQ2pDNUIsRUFBUzBiLEVBQWMxYixPQUd2QjJiLEVBQXVCLElBQVgzYixHQUFrQnliLEdBQWV0ZSxFQUFPc0QsV0FBWWdiLEVBQVloYSxTQUFjekIsRUFBUyxFQUduRzBhLEVBQXlCLElBQWRpQixFQUFrQkYsRUFBY3RlLEVBQU9pTCxXQUdsRHdULEVBQWEsU0FBVTVaLEVBQUd5VyxFQUFVb0QsR0FDbkMsTUFBTyxVQUFVbFYsR0FDaEI4UixFQUFVelcsR0FBTWxDLEtBQ2hCK2IsRUFBUTdaLEdBQU1KLFVBQVU1QixPQUFTLEVBQUluQyxFQUFXa0QsS0FBTWEsV0FBYytFLEVBQ2hFa1YsSUFBV0MsRUFDZHBCLEVBQVNxQixXQUFZdEQsRUFBVW9ELEtBQ2ZGLEdBQ2hCakIsRUFBUy9XLFlBQWE4VSxFQUFVb0QsS0FLbkNDLEVBQWdCRSxFQUFrQkMsQ0FHbkMsSUFBS2pjLEVBQVMsRUFJYixJQUhBOGIsRUFBcUI5WCxNQUFPaEUsR0FDNUJnYyxFQUF1QmhZLE1BQU9oRSxHQUM5QmljLEVBQXNCalksTUFBT2hFLEdBQ2pCQSxFQUFKZ0MsRUFBWUEsSUFDZDBaLEVBQWUxWixJQUFPN0UsRUFBT3NELFdBQVlpYixFQUFlMVosR0FBSVAsU0FDaEVpYSxFQUFlMVosR0FBSVAsVUFDakJDLEtBQU1rYSxFQUFZNVosRUFBR2lhLEVBQWlCUCxJQUN0Q2YsS0FBTUQsRUFBU1MsUUFDZkMsU0FBVVEsRUFBWTVaLEVBQUdnYSxFQUFrQkYsTUFFM0NILENBVUwsT0FKTUEsSUFDTGpCLEVBQVMvVyxZQUFhc1ksRUFBaUJQLEdBR2pDaEIsRUFBU2paLGFBR2xCdEUsRUFBT3NMLFFBQVUsU0FBV0EsR0FDM0IsR0FBSXdILEdBQVFsVCxFQUFTaUksY0FBYyxTQUNsQ2tYLEVBQVduZixFQUFTb2YseUJBQ3BCak8sRUFBTW5SLEVBQVNpSSxjQUFjLE9BQzdCMkksRUFBUzVRLEVBQVNpSSxjQUFjLFVBQ2hDb1gsRUFBTXpPLEVBQU90SCxZQUFhdEosRUFBU2lJLGNBQWMsVUFHbEQsT0FBTWlMLEdBQU1sTSxNQUlaa00sRUFBTWxNLEtBQU8sV0FJYjBFLEVBQVE0VCxRQUEwQixLQUFoQnBNLEVBQU10SixNQUl4QjhCLEVBQVE2VCxZQUFjRixFQUFJM0gsU0FHMUJoTSxFQUFROFQscUJBQXNCLEVBQzlCOVQsRUFBUStULG1CQUFvQixFQUM1Qi9ULEVBQVFnVSxlQUFnQixFQUl4QnhNLEVBQU11RSxTQUFVLEVBQ2hCL0wsRUFBUWlVLGVBQWlCek0sRUFBTTBNLFdBQVcsR0FBT25JLFFBSWpEN0csRUFBTzRHLFVBQVcsRUFDbEI5TCxFQUFRbVUsYUFBZVIsRUFBSTdILFNBSTNCdEUsRUFBUWxULEVBQVNpSSxjQUFjLFNBQy9CaUwsRUFBTXRKLE1BQVEsSUFDZHNKLEVBQU1sTSxLQUFPLFFBQ2IwRSxFQUFRb1UsV0FBNkIsTUFBaEI1TSxFQUFNdEosTUFHM0JzSixFQUFNNUMsYUFBYyxVQUFXLEtBQy9CNEMsRUFBTTVDLGFBQWMsT0FBUSxLQUU1QjZPLEVBQVM3VixZQUFhNEosR0FJdEJ4SCxFQUFRcVUsV0FBYVosRUFBU1MsV0FBVyxHQUFPQSxXQUFXLEdBQU94SixVQUFVcUIsUUFJNUUvTCxFQUFRc1UsZUFBaUIsYUFBZXRnQixHQUV4Q3lSLEVBQUkvRixNQUFNNlUsZUFBaUIsY0FDM0I5TyxFQUFJeU8sV0FBVyxHQUFPeFUsTUFBTTZVLGVBQWlCLEdBQzdDdlUsRUFBUXdVLGdCQUErQyxnQkFBN0IvTyxFQUFJL0YsTUFBTTZVLGVBR3BDN2YsRUFBTyxXQUNOLEdBQUkrZixHQUFXQyxFQUVkQyxFQUFXLDhIQUNYQyxFQUFPdGdCLEVBQVM2SSxxQkFBcUIsUUFBUyxFQUV6Q3lYLEtBS05ILEVBQVluZ0IsRUFBU2lJLGNBQWMsT0FDbkNrWSxFQUFVL1UsTUFBTW1WLFFBQVUsZ0ZBRzFCRCxFQUFLaFgsWUFBYTZXLEdBQVk3VyxZQUFhNkgsR0FDM0NBLEVBQUl1QixVQUFZLEdBRWhCdkIsRUFBSS9GLE1BQU1tVixRQUFVLHVLQUlwQm5nQixFQUFPOEssS0FBTW9WLEVBQXlCLE1BQW5CQSxFQUFLbFYsTUFBTW9WLE1BQWlCQSxLQUFNLE1BQVUsV0FDOUQ5VSxFQUFRK1UsVUFBZ0MsSUFBcEJ0UCxFQUFJdVAsY0FJcEJoaEIsRUFBT2loQixtQkFDWGpWLEVBQVFnVSxjQUF1RSxRQUFyRGhnQixFQUFPaWhCLGlCQUFrQnhQLEVBQUssV0FBZW9CLElBQ3ZFN0csRUFBUStULGtCQUEyRixTQUFyRS9mLEVBQU9paEIsaUJBQWtCeFAsRUFBSyxRQUFZeVAsTUFBTyxRQUFVQSxNQU16RlIsRUFBWWpQLEVBQUk3SCxZQUFhdEosRUFBU2lJLGNBQWMsUUFDcERtWSxFQUFVaFYsTUFBTW1WLFFBQVVwUCxFQUFJL0YsTUFBTW1WLFFBQVVGLEVBQzlDRCxFQUFVaFYsTUFBTXlWLFlBQWNULEVBQVVoVixNQUFNd1YsTUFBUSxJQUN0RHpQLEVBQUkvRixNQUFNd1YsTUFBUSxNQUVsQmxWLEVBQVE4VCxxQkFDTm5ZLFlBQWMzSCxFQUFPaWhCLGlCQUFrQlAsRUFBVyxXQUFlUyxjQUdwRVAsRUFBSy9XLFlBQWE0VyxNQUdaelUsR0FyR0NBLE1BbUhULElBQUlvVixHQUFXQyxFQUNkQyxFQUFTLCtCQUNUQyxFQUFhLFVBRWQsU0FBU0MsS0FJUmxYLE9BQU9tWCxlQUFnQnBlLEtBQUsrTixTQUFZLEdBQ3ZDN00sSUFBSyxXQUNKLFlBSUZsQixLQUFLbUQsUUFBVTlGLEVBQU84RixRQUFVQyxLQUFLQyxTQUd0QzhhLEVBQUtFLElBQU0sRUFFWEYsRUFBS0csUUFBVSxTQUFVQyxHQU94QixNQUFPQSxHQUFNaGUsU0FDTyxJQUFuQmdlLEVBQU1oZSxVQUFxQyxJQUFuQmdlLEVBQU1oZSxVQUFpQixHQUdqRDRkLEVBQUt4ZSxXQUNKaUksSUFBSyxTQUFVMlcsR0FJZCxJQUFNSixFQUFLRyxRQUFTQyxHQUNuQixNQUFPLEVBR1IsSUFBSUMsTUFFSEMsRUFBU0YsRUFBT3ZlLEtBQUttRCxRQUd0QixLQUFNc2IsRUFBUyxDQUNkQSxFQUFTTixFQUFLRSxLQUdkLEtBQ0NHLEVBQVl4ZSxLQUFLbUQsVUFBYzBELE1BQU80WCxHQUN0Q3hYLE9BQU95WCxpQkFBa0JILEVBQU9DLEdBSS9CLE1BQVEvWixHQUNUK1osRUFBWXhlLEtBQUttRCxTQUFZc2IsRUFDN0JwaEIsRUFBT29GLE9BQVE4YixFQUFPQyxJQVN4QixNQUpNeGUsTUFBSytOLE1BQU8wUSxLQUNqQnplLEtBQUsrTixNQUFPMFEsT0FHTkEsR0FFUkUsSUFBSyxTQUFVSixFQUFPelosRUFBTStCLEdBQzNCLEdBQUkrWCxHQUlISCxFQUFTemUsS0FBSzRILElBQUsyVyxHQUNuQnhRLEVBQVEvTixLQUFLK04sTUFBTzBRLEVBR3JCLElBQXFCLGdCQUFUM1osR0FDWGlKLEVBQU9qSixHQUFTK0IsTUFLaEIsSUFBS3hKLEVBQU9xSCxjQUFlcUosR0FDMUIxUSxFQUFPb0YsT0FBUXpDLEtBQUsrTixNQUFPMFEsR0FBVTNaLE9BR3JDLEtBQU04WixJQUFROVosR0FDYmlKLEVBQU82USxHQUFTOVosRUFBTThaLEVBSXpCLE9BQU83USxJQUVSN00sSUFBSyxTQUFVcWQsRUFBTzNXLEdBS3JCLEdBQUltRyxHQUFRL04sS0FBSytOLE1BQU8vTixLQUFLNEgsSUFBSzJXLEdBRWxDLE9BQU8zVyxLQUFRaEwsVUFDZG1SLEVBQVFBLEVBQU9uRyxJQUVqQkQsT0FBUSxTQUFVNFcsRUFBTzNXLEVBQUtmLEdBQzdCLEdBQUlnWSxFQVlKLE9BQUtqWCxLQUFRaEwsV0FDVGdMLEdBQXNCLGdCQUFSQSxJQUFxQmYsSUFBVWpLLFdBRWhEaWlCLEVBQVM3ZSxLQUFLa0IsSUFBS3FkLEVBQU8zVyxHQUVuQmlYLElBQVdqaUIsVUFDakJpaUIsRUFBUzdlLEtBQUtrQixJQUFLcWQsRUFBT2xoQixFQUFPb0osVUFBVW1CLE1BUzdDNUgsS0FBSzJlLElBQUtKLEVBQU8zVyxFQUFLZixHQUlmQSxJQUFVakssVUFBWWlLLEVBQVFlLElBRXRDeEMsT0FBUSxTQUFVbVosRUFBTzNXLEdBQ3hCLEdBQUkxRixHQUFHUyxFQUFNbWMsRUFDWkwsRUFBU3plLEtBQUs0SCxJQUFLMlcsR0FDbkJ4USxFQUFRL04sS0FBSytOLE1BQU8wUSxFQUVyQixJQUFLN1csSUFBUWhMLFVBQ1pvRCxLQUFLK04sTUFBTzBRLFVBRU4sQ0FFRHBoQixFQUFPNkYsUUFBUzBFLEdBT3BCakYsRUFBT2lGLEVBQUloSyxPQUFRZ0ssRUFBSXZGLElBQUtoRixFQUFPb0osYUFFbkNxWSxFQUFRemhCLEVBQU9vSixVQUFXbUIsR0FFckJBLElBQU9tRyxHQUNYcEwsR0FBU2lGLEVBQUtrWCxJQUlkbmMsRUFBT21jLEVBQ1BuYyxFQUFPQSxJQUFRb0wsSUFDWnBMLEdBQVdBLEVBQUs3QyxNQUFPZixTQUk1Qm1ELEVBQUlTLEVBQUt6QyxNQUNULE9BQVFnQyxVQUNBNkwsR0FBT3BMLEVBQU1ULE1BSXZCNmMsUUFBUyxTQUFVUixHQUNsQixPQUFRbGhCLEVBQU9xSCxjQUNkMUUsS0FBSytOLE1BQU93USxFQUFPdmUsS0FBS21ELGdCQUcxQjZiLFFBQVMsU0FBVVQsR0FDYkEsRUFBT3ZlLEtBQUttRCxnQkFDVG5ELE1BQUsrTixNQUFPd1EsRUFBT3ZlLEtBQUttRCxZQU1sQzRhLEVBQVksR0FBSUksR0FDaEJILEVBQVksR0FBSUcsR0FHaEI5Z0IsRUFBT29GLFFBQ053YyxXQUFZZCxFQUFLRyxRQUVqQlMsUUFBUyxTQUFVaGYsR0FDbEIsTUFBT2dlLEdBQVVnQixRQUFTaGYsSUFBVWllLEVBQVVlLFFBQVNoZixJQUd4RCtFLEtBQU0sU0FBVS9FLEVBQU00QyxFQUFNbUMsR0FDM0IsTUFBT2laLEdBQVVwVyxPQUFRNUgsRUFBTTRDLEVBQU1tQyxJQUd0Q29hLFdBQVksU0FBVW5mLEVBQU00QyxHQUMzQm9iLEVBQVUzWSxPQUFRckYsRUFBTTRDLElBS3pCd2MsTUFBTyxTQUFVcGYsRUFBTTRDLEVBQU1tQyxHQUM1QixNQUFPa1osR0FBVXJXLE9BQVE1SCxFQUFNNEMsRUFBTW1DLElBR3RDc2EsWUFBYSxTQUFVcmYsRUFBTTRDLEdBQzVCcWIsRUFBVTVZLE9BQVFyRixFQUFNNEMsTUFJMUJ0RixFQUFPc0IsR0FBRzhELFFBQ1RxQyxLQUFNLFNBQVU4QyxFQUFLZixHQUNwQixHQUFJeUgsR0FBTzNMLEVBQ1Y1QyxFQUFPQyxLQUFNLEdBQ2JrQyxFQUFJLEVBQ0o0QyxFQUFPLElBR1IsSUFBSzhDLElBQVFoTCxVQUFZLENBQ3hCLEdBQUtvRCxLQUFLRSxTQUNUNEUsRUFBT2laLEVBQVU3YyxJQUFLbkIsR0FFQyxJQUFsQkEsRUFBS1EsV0FBbUJ5ZCxFQUFVOWMsSUFBS25CLEVBQU0saUJBQW1CLENBRXBFLElBREF1TyxFQUFRdk8sRUFBSzZLLFdBQ0QwRCxFQUFNcE8sT0FBVmdDLEVBQWtCQSxJQUN6QlMsRUFBTzJMLEVBQU9wTSxHQUFJUyxLQUVlLElBQTVCQSxFQUFLekUsUUFBUyxXQUNsQnlFLEVBQU90RixFQUFPb0osVUFBVzlELEVBQUszRSxNQUFNLElBQ3BDcWhCLEVBQVV0ZixFQUFNNEMsRUFBTW1DLEVBQU1uQyxJQUc5QnFiLEdBQVVXLElBQUs1ZSxFQUFNLGdCQUFnQixHQUl2QyxNQUFPK0UsR0FJUixNQUFvQixnQkFBUjhDLEdBQ0o1SCxLQUFLd0IsS0FBSyxXQUNoQnVjLEVBQVVZLElBQUszZSxLQUFNNEgsS0FJaEJ2SyxFQUFPc0ssT0FBUTNILEtBQU0sU0FBVTZHLEdBQ3JDLEdBQUkvQixHQUNId2EsRUFBV2ppQixFQUFPb0osVUFBV21CLEVBTzlCLElBQUs3SCxHQUFROEcsSUFBVWpLLFVBQXZCLENBSUMsR0FEQWtJLEVBQU9pWixFQUFVN2MsSUFBS25CLEVBQU02SCxHQUN2QjlDLElBQVNsSSxVQUNiLE1BQU9rSSxFQU1SLElBREFBLEVBQU9pWixFQUFVN2MsSUFBS25CLEVBQU11ZixHQUN2QnhhLElBQVNsSSxVQUNiLE1BQU9rSSxFQU1SLElBREFBLEVBQU91YSxFQUFVdGYsRUFBTXVmLEVBQVUxaUIsV0FDNUJrSSxJQUFTbEksVUFDYixNQUFPa0ksT0FRVDlFLE1BQUt3QixLQUFLLFdBR1QsR0FBSXNELEdBQU9pWixFQUFVN2MsSUFBS2xCLEtBQU1zZixFQUtoQ3ZCLEdBQVVZLElBQUszZSxLQUFNc2YsRUFBVXpZLEdBS0wsS0FBckJlLEVBQUkxSixRQUFRLE1BQWU0RyxJQUFTbEksV0FDeENtaEIsRUFBVVksSUFBSzNlLEtBQU00SCxFQUFLZixNQUcxQixLQUFNQSxFQUFPL0UsVUFBVTVCLE9BQVMsRUFBRyxNQUFNLElBRzdDZ2YsV0FBWSxTQUFVdFgsR0FDckIsTUFBTzVILE1BQUt3QixLQUFLLFdBQ2hCdWMsRUFBVTNZLE9BQVFwRixLQUFNNEgsT0FLM0IsU0FBU3lYLEdBQVV0ZixFQUFNNkgsRUFBSzlDLEdBQzdCLEdBQUluQyxFQUlKLElBQUttQyxJQUFTbEksV0FBK0IsSUFBbEJtRCxFQUFLUSxTQUkvQixHQUhBb0MsRUFBTyxRQUFVaUYsRUFBSXRFLFFBQVM0YSxFQUFZLE9BQVF0WCxjQUNsRDlCLEVBQU8vRSxFQUFLdU4sYUFBYzNLLEdBRUwsZ0JBQVRtQyxHQUFvQixDQUMvQixJQUNDQSxFQUFnQixTQUFUQSxHQUFrQixFQUNmLFVBQVRBLEdBQW1CLEVBQ1YsU0FBVEEsRUFBa0IsTUFFakJBLEVBQU8sS0FBT0EsR0FBUUEsRUFDdkJtWixFQUFPeGQsS0FBTXFFLEdBQVNTLEtBQUtDLE1BQU9WLEdBQ2xDQSxFQUNBLE1BQU9MLElBR1RzWixFQUFVWSxJQUFLNWUsRUFBTTZILEVBQUs5QyxPQUUxQkEsR0FBT2xJLFNBR1QsT0FBT2tJLEdBRVJ6SCxFQUFPb0YsUUFDTjhjLE1BQU8sU0FBVXhmLEVBQU1rRSxFQUFNYSxHQUM1QixHQUFJeWEsRUFFSixPQUFLeGYsSUFDSmtFLEdBQVNBLEdBQVEsTUFBUyxRQUMxQnNiLEVBQVF2QixFQUFVOWMsSUFBS25CLEVBQU1rRSxHQUd4QmEsS0FDRXlhLEdBQVNsaUIsRUFBTzZGLFFBQVM0QixHQUM5QnlhLEVBQVF2QixFQUFVclcsT0FBUTVILEVBQU1rRSxFQUFNNUcsRUFBTzBELFVBQVUrRCxJQUV2RHlhLEVBQU16aEIsS0FBTWdILElBR1B5YSxPQVpSLFdBZ0JEQyxRQUFTLFNBQVV6ZixFQUFNa0UsR0FDeEJBLEVBQU9BLEdBQVEsSUFFZixJQUFJc2IsR0FBUWxpQixFQUFPa2lCLE1BQU94ZixFQUFNa0UsR0FDL0J3YixFQUFjRixFQUFNcmYsT0FDcEJ2QixFQUFLNGdCLEVBQU10UixRQUNYeVIsRUFBUXJpQixFQUFPc2lCLFlBQWE1ZixFQUFNa0UsR0FDbEMyYixFQUFPLFdBQ052aUIsRUFBT21pQixRQUFTemYsRUFBTWtFO0NBSVosZ0JBQVB0RixJQUNKQSxFQUFLNGdCLEVBQU10UixRQUNYd1IsS0FHSTlnQixJQUlVLE9BQVRzRixHQUNKc2IsRUFBTXJPLFFBQVMsb0JBSVR3TyxHQUFNRyxLQUNibGhCLEVBQUdzQyxLQUFNbEIsRUFBTTZmLEVBQU1GLEtBR2hCRCxHQUFlQyxHQUNwQkEsRUFBTTdLLE1BQU1rRixRQUtkNEYsWUFBYSxTQUFVNWYsRUFBTWtFLEdBQzVCLEdBQUkyRCxHQUFNM0QsRUFBTyxZQUNqQixPQUFPK1osR0FBVTljLElBQUtuQixFQUFNNkgsSUFBU29XLEVBQVVyVyxPQUFRNUgsRUFBTTZILEdBQzVEaU4sTUFBT3hYLEVBQU9nYyxVQUFVLGVBQWVjLElBQUksV0FDMUM2RCxFQUFVNVksT0FBUXJGLEdBQVFrRSxFQUFPLFFBQVMyRCxXQU05Q3ZLLEVBQU9zQixHQUFHOEQsUUFDVDhjLE1BQU8sU0FBVXRiLEVBQU1hLEdBQ3RCLEdBQUlnYixHQUFTLENBUWIsT0FOcUIsZ0JBQVQ3YixLQUNYYSxFQUFPYixFQUNQQSxFQUFPLEtBQ1A2YixLQUd1QkEsRUFBbkJoZSxVQUFVNUIsT0FDUDdDLEVBQU9raUIsTUFBT3ZmLEtBQUssR0FBSWlFLEdBR3hCYSxJQUFTbEksVUFDZm9ELEtBQ0FBLEtBQUt3QixLQUFLLFdBQ1QsR0FBSStkLEdBQVFsaUIsRUFBT2tpQixNQUFPdmYsS0FBTWlFLEVBQU1hLEVBR3RDekgsR0FBT3NpQixZQUFhM2YsS0FBTWlFLEdBRVosT0FBVEEsR0FBOEIsZUFBYnNiLEVBQU0sSUFDM0JsaUIsRUFBT21pQixRQUFTeGYsS0FBTWlFLE1BSTFCdWIsUUFBUyxTQUFVdmIsR0FDbEIsTUFBT2pFLE1BQUt3QixLQUFLLFdBQ2hCbkUsRUFBT21pQixRQUFTeGYsS0FBTWlFLE1BS3hCOGIsTUFBTyxTQUFVQyxFQUFNL2IsR0FJdEIsTUFIQStiLEdBQU8zaUIsRUFBTzRpQixHQUFLNWlCLEVBQU80aUIsR0FBR0MsT0FBUUYsSUFBVUEsRUFBT0EsRUFDdEQvYixFQUFPQSxHQUFRLEtBRVJqRSxLQUFLdWYsTUFBT3RiLEVBQU0sU0FBVTJiLEVBQU1GLEdBQ3hDLEdBQUlTLEdBQVUzWCxXQUFZb1gsRUFBTUksRUFDaENOLEdBQU1HLEtBQU8sV0FDWk8sYUFBY0QsT0FJakJFLFdBQVksU0FBVXBjLEdBQ3JCLE1BQU9qRSxNQUFLdWYsTUFBT3RiLEdBQVEsVUFJNUJ0QyxRQUFTLFNBQVVzQyxFQUFNRCxHQUN4QixHQUFJMkIsR0FDSDJhLEVBQVEsRUFDUkMsRUFBUWxqQixFQUFPaUwsV0FDZjhJLEVBQVdwUixLQUNYa0MsRUFBSWxDLEtBQUtFLE9BQ1RrYixFQUFVLGFBQ0NrRixHQUNUQyxFQUFNMWMsWUFBYXVOLEdBQVlBLElBSWIsaUJBQVRuTixLQUNYRCxFQUFNQyxFQUNOQSxFQUFPckgsV0FFUnFILEVBQU9BLEdBQVEsSUFFZixPQUFPL0IsSUFDTnlELEVBQU1xWSxFQUFVOWMsSUFBS2tRLEVBQVVsUCxHQUFLK0IsRUFBTyxjQUN0QzBCLEdBQU9BLEVBQUlrUCxRQUNmeUwsSUFDQTNhLEVBQUlrUCxNQUFNc0YsSUFBS2lCLEdBSWpCLE9BREFBLEtBQ09tRixFQUFNNWUsUUFBU3FDLEtBR3hCLElBQUl3YyxHQUFVQyxFQUNiQyxFQUFTLGNBQ1RDLEVBQVUsTUFDVkMsRUFBYSxxQ0FFZHZqQixHQUFPc0IsR0FBRzhELFFBQ1Q3QixLQUFNLFNBQVUrQixFQUFNa0UsR0FDckIsTUFBT3hKLEdBQU9zSyxPQUFRM0gsS0FBTTNDLEVBQU91RCxLQUFNK0IsRUFBTWtFLEVBQU8vRSxVQUFVNUIsT0FBUyxJQUcxRTJnQixXQUFZLFNBQVVsZSxHQUNyQixNQUFPM0MsTUFBS3dCLEtBQUssV0FDaEJuRSxFQUFPd2pCLFdBQVk3Z0IsS0FBTTJDLE1BSTNCaWMsS0FBTSxTQUFVamMsRUFBTWtFLEdBQ3JCLE1BQU94SixHQUFPc0ssT0FBUTNILEtBQU0zQyxFQUFPdWhCLEtBQU1qYyxFQUFNa0UsRUFBTy9FLFVBQVU1QixPQUFTLElBRzFFNGdCLFdBQVksU0FBVW5lLEdBQ3JCLE1BQU8zQyxNQUFLd0IsS0FBSyxpQkFDVHhCLE1BQU0zQyxFQUFPMGpCLFFBQVNwZSxJQUFVQSxNQUl6Q3FlLFNBQVUsU0FBVW5hLEdBQ25CLEdBQUlvYSxHQUFTbGhCLEVBQU0yTyxFQUFLd1MsRUFBTzllLEVBQzlCRixFQUFJLEVBQ0pDLEVBQU1uQyxLQUFLRSxPQUNYaWhCLEVBQTJCLGdCQUFWdGEsSUFBc0JBLENBRXhDLElBQUt4SixFQUFPc0QsV0FBWWtHLEdBQ3ZCLE1BQU83RyxNQUFLd0IsS0FBSyxTQUFVWSxHQUMxQi9FLEVBQVEyQyxNQUFPZ2hCLFNBQVVuYSxFQUFNNUYsS0FBTWpCLEtBQU1vQyxFQUFHcEMsS0FBS3lQLGFBSXJELElBQUswUixFQUlKLElBRkFGLEdBQVlwYSxHQUFTLElBQUsvRyxNQUFPZixPQUVyQm9ELEVBQUpELEVBQVNBLElBT2hCLEdBTkFuQyxFQUFPQyxLQUFNa0MsR0FDYndNLEVBQXdCLElBQWxCM08sRUFBS1EsV0FBb0JSLEVBQUswUCxXQUNqQyxJQUFNMVAsRUFBSzBQLFVBQVksS0FBTW5NLFFBQVNvZCxFQUFRLEtBQ2hELEtBR1UsQ0FDVnRlLEVBQUksQ0FDSixPQUFTOGUsRUFBUUQsRUFBUTdlLEtBQ2dCLEVBQW5Dc00sRUFBSXhRLFFBQVMsSUFBTWdqQixFQUFRLE9BQy9CeFMsR0FBT3dTLEVBQVEsSUFHakJuaEIsR0FBSzBQLFVBQVlwUyxFQUFPbUIsS0FBTWtRLEdBTWpDLE1BQU8xTyxPQUdSb2hCLFlBQWEsU0FBVXZhLEdBQ3RCLEdBQUlvYSxHQUFTbGhCLEVBQU0yTyxFQUFLd1MsRUFBTzllLEVBQzlCRixFQUFJLEVBQ0pDLEVBQU1uQyxLQUFLRSxPQUNYaWhCLEVBQStCLElBQXJCcmYsVUFBVTVCLFFBQWlDLGdCQUFWMkcsSUFBc0JBLENBRWxFLElBQUt4SixFQUFPc0QsV0FBWWtHLEdBQ3ZCLE1BQU83RyxNQUFLd0IsS0FBSyxTQUFVWSxHQUMxQi9FLEVBQVEyQyxNQUFPb2hCLFlBQWF2YSxFQUFNNUYsS0FBTWpCLEtBQU1vQyxFQUFHcEMsS0FBS3lQLGFBR3hELElBQUswUixFQUdKLElBRkFGLEdBQVlwYSxHQUFTLElBQUsvRyxNQUFPZixPQUVyQm9ELEVBQUpELEVBQVNBLElBUWhCLEdBUEFuQyxFQUFPQyxLQUFNa0MsR0FFYndNLEVBQXdCLElBQWxCM08sRUFBS1EsV0FBb0JSLEVBQUswUCxXQUNqQyxJQUFNMVAsRUFBSzBQLFVBQVksS0FBTW5NLFFBQVNvZCxFQUFRLEtBQ2hELElBR1UsQ0FDVnRlLEVBQUksQ0FDSixPQUFTOGUsRUFBUUQsRUFBUTdlLEtBRXhCLE1BQVFzTSxFQUFJeFEsUUFBUyxJQUFNZ2pCLEVBQVEsTUFBUyxFQUMzQ3hTLEVBQU1BLEVBQUlwTCxRQUFTLElBQU00ZCxFQUFRLElBQUssSUFHeENuaEIsR0FBSzBQLFVBQVk1SSxFQUFReEosRUFBT21CLEtBQU1rUSxHQUFRLEdBS2pELE1BQU8xTyxPQUdScWhCLFlBQWEsU0FBVXhhLEVBQU95YSxHQUM3QixHQUFJcmQsU0FBYzRDLEVBRWxCLE9BQXlCLGlCQUFieWEsSUFBbUMsV0FBVHJkLEVBQzlCcWQsRUFBV3RoQixLQUFLZ2hCLFNBQVVuYSxHQUFVN0csS0FBS29oQixZQUFhdmEsR0FHekR4SixFQUFPc0QsV0FBWWtHLEdBQ2hCN0csS0FBS3dCLEtBQUssU0FBVVUsR0FDMUI3RSxFQUFRMkMsTUFBT3FoQixZQUFheGEsRUFBTTVGLEtBQUtqQixLQUFNa0MsRUFBR2xDLEtBQUt5UCxVQUFXNlIsR0FBV0EsS0FJdEV0aEIsS0FBS3dCLEtBQUssV0FDaEIsR0FBYyxXQUFUeUMsRUFBb0IsQ0FFeEIsR0FBSXdMLEdBQ0h2TixFQUFJLEVBQ0orWCxFQUFPNWMsRUFBUTJDLE1BQ2Z1aEIsRUFBYTFhLEVBQU0vRyxNQUFPZixNQUUzQixPQUFTMFEsRUFBWThSLEVBQVlyZixLQUUzQitYLEVBQUt1SCxTQUFVL1IsR0FDbkJ3SyxFQUFLbUgsWUFBYTNSLEdBRWxCd0ssRUFBSytHLFNBQVV2UixRQUtOeEwsSUFBU2xILEdBQThCLFlBQVRrSCxLQUNwQ2pFLEtBQUt5UCxXQUVUdU8sRUFBVVcsSUFBSzNlLEtBQU0sZ0JBQWlCQSxLQUFLeVAsV0FPNUN6UCxLQUFLeVAsVUFBWXpQLEtBQUt5UCxXQUFhNUksS0FBVSxFQUFRLEdBQUttWCxFQUFVOWMsSUFBS2xCLEtBQU0sa0JBQXFCLE9BS3ZHd2hCLFNBQVUsU0FBVS9pQixHQUNuQixHQUFJZ1IsR0FBWSxJQUFNaFIsRUFBVyxJQUNoQ3lELEVBQUksRUFDSmtGLEVBQUlwSCxLQUFLRSxNQUNWLE1BQVlrSCxFQUFKbEYsRUFBT0EsSUFDZCxHQUEwQixJQUFyQmxDLEtBQUtrQyxHQUFHM0IsV0FBbUIsSUFBTVAsS0FBS2tDLEdBQUd1TixVQUFZLEtBQUtuTSxRQUFRb2QsRUFBUSxLQUFLeGlCLFFBQVN1UixJQUFlLEVBQzNHLE9BQU8sQ0FJVCxRQUFPLEdBR1I0QixJQUFLLFNBQVV4SyxHQUNkLEdBQUk2WSxHQUFPcGUsRUFBS1gsRUFDZlosRUFBT0MsS0FBSyxFQUViLEVBQUEsR0FBTThCLFVBQVU1QixPQXNCaEIsTUFGQVMsR0FBYXRELEVBQU9zRCxXQUFZa0csR0FFekI3RyxLQUFLd0IsS0FBSyxTQUFVVSxHQUMxQixHQUFJbVAsRUFFbUIsS0FBbEJyUixLQUFLTyxXQUtUOFEsRUFESTFRLEVBQ0VrRyxFQUFNNUYsS0FBTWpCLEtBQU1rQyxFQUFHN0UsRUFBUTJDLE1BQU9xUixPQUVwQ3hLLEVBSUssTUFBUHdLLEVBQ0pBLEVBQU0sR0FDb0IsZ0JBQVJBLEdBQ2xCQSxHQUFPLEdBQ0loVSxFQUFPNkYsUUFBU21PLEtBQzNCQSxFQUFNaFUsRUFBT2dGLElBQUlnUCxFQUFLLFNBQVd4SyxHQUNoQyxNQUFnQixPQUFUQSxFQUFnQixHQUFLQSxFQUFRLE1BSXRDNlksRUFBUXJpQixFQUFPb2tCLFNBQVV6aEIsS0FBS2lFLE9BQVU1RyxFQUFPb2tCLFNBQVV6aEIsS0FBSzJHLFNBQVNDLGVBR2pFOFksR0FBVyxPQUFTQSxJQUFVQSxFQUFNZixJQUFLM2UsS0FBTXFSLEVBQUssV0FBY3pVLFlBQ3ZFb0QsS0FBSzZHLE1BQVF3SyxLQWpEZCxJQUFLdFIsRUFHSixNQUZBMmYsR0FBUXJpQixFQUFPb2tCLFNBQVUxaEIsRUFBS2tFLE9BQVU1RyxFQUFPb2tCLFNBQVUxaEIsRUFBSzRHLFNBQVNDLGVBRWxFOFksR0FBUyxPQUFTQSxLQUFVcGUsRUFBTW9lLEVBQU14ZSxJQUFLbkIsRUFBTSxZQUFlbkQsVUFDL0QwRSxHQUdSQSxFQUFNdkIsRUFBSzhHLE1BRVcsZ0JBQVJ2RixHQUViQSxFQUFJZ0MsUUFBUXFkLEVBQVMsSUFFZCxNQUFQcmYsRUFBYyxHQUFLQSxPQTBDeEJqRSxFQUFPb0YsUUFDTmdmLFVBQ0NDLFFBQ0N4Z0IsSUFBSyxTQUFVbkIsR0FHZCxHQUFJc1IsR0FBTXRSLEVBQUs2SyxXQUFXL0QsS0FDMUIsUUFBUXdLLEdBQU9BLEVBQUlDLFVBQVl2UixFQUFLOEcsTUFBUTlHLEVBQUtzRyxPQUduRHdILFFBQ0MzTSxJQUFLLFNBQVVuQixHQUNkLEdBQUk4RyxHQUFPNmEsRUFDVmhmLEVBQVUzQyxFQUFLMkMsUUFDZjBYLEVBQVFyYSxFQUFLNlUsY0FDYitNLEVBQW9CLGVBQWQ1aEIsRUFBS2tFLE1BQWlDLEVBQVJtVyxFQUNwQzJCLEVBQVM0RixFQUFNLFFBQ2ZDLEVBQU1ELEVBQU12SCxFQUFRLEVBQUkxWCxFQUFReEMsT0FDaENnQyxFQUFZLEVBQVJrWSxFQUNId0gsRUFDQUQsRUFBTXZILEVBQVEsQ0FHaEIsTUFBWXdILEVBQUoxZixFQUFTQSxJQUloQixHQUhBd2YsRUFBU2hmLEVBQVNSLE1BR1h3ZixFQUFPL00sVUFBWXpTLElBQU1rWSxJQUU1Qi9jLEVBQU9zTCxRQUFRbVUsWUFBZTRFLEVBQU9qTixTQUErQyxPQUFwQ2lOLEVBQU9wVSxhQUFhLGNBQ25Fb1UsRUFBTzVnQixXQUFXMlQsVUFBYXBYLEVBQU9zSixTQUFVK2EsRUFBTzVnQixXQUFZLGFBQWlCLENBTXhGLEdBSEErRixFQUFReEosRUFBUXFrQixHQUFTclEsTUFHcEJzUSxFQUNKLE1BQU85YSxFQUlSa1YsR0FBT2plLEtBQU0rSSxHQUlmLE1BQU9rVixJQUdSNEMsSUFBSyxTQUFVNWUsRUFBTThHLEdBQ3BCLEdBQUlnYixHQUFXSCxFQUNkaGYsRUFBVTNDLEVBQUsyQyxRQUNmcVosRUFBUzFlLEVBQU8wRCxVQUFXOEYsR0FDM0IzRSxFQUFJUSxFQUFReEMsTUFFYixPQUFRZ0MsSUFDUHdmLEVBQVNoZixFQUFTUixJQUNad2YsRUFBTy9NLFNBQVd0WCxFQUFPNkosUUFBUzdKLEVBQU9xa0IsR0FBUXJRLE1BQU8wSyxJQUFZLEtBQ3pFOEYsR0FBWSxFQVFkLE9BSE1BLEtBQ0w5aEIsRUFBSzZVLGNBQWdCLElBRWZtSCxLQUtWbmIsS0FBTSxTQUFVYixFQUFNNEMsRUFBTWtFLEdBQzNCLEdBQUk2WSxHQUFPcGUsRUFDVndnQixFQUFRL2hCLEVBQUtRLFFBR2QsSUFBTVIsR0FBa0IsSUFBVitoQixHQUF5QixJQUFWQSxHQUF5QixJQUFWQSxFQUs1QyxhQUFZL2hCLEdBQUt1TixlQUFpQnZRLEVBQzFCTSxFQUFPdWhCLEtBQU03ZSxFQUFNNEMsRUFBTWtFLElBS2xCLElBQVZpYixHQUFnQnprQixFQUFPMmIsU0FBVWpaLEtBQ3JDNEMsRUFBT0EsRUFBS2lFLGNBQ1o4WSxFQUFRcmlCLEVBQU8wa0IsVUFBV3BmLEtBQ3ZCdEYsRUFBTzhULEtBQUtyUixNQUFNK0wsS0FBS3BMLEtBQU1rQyxHQUFTOGQsRUFBV0QsSUFHaEQzWixJQUFVakssVUFhSDhpQixHQUFTLE9BQVNBLElBQTZDLFFBQW5DcGUsRUFBTW9lLEVBQU14ZSxJQUFLbkIsRUFBTTRDLElBQ3ZEckIsR0FHUEEsRUFBTWpFLEVBQU8rQyxLQUFLUSxLQUFNYixFQUFNNEMsR0FHaEIsTUFBUHJCLEVBQ04xRSxVQUNBMEUsR0FwQmMsT0FBVnVGLEVBR082WSxHQUFTLE9BQVNBLEtBQVVwZSxFQUFNb2UsRUFBTWYsSUFBSzVlLEVBQU04RyxFQUFPbEUsTUFBWS9GLFVBQzFFMEUsR0FHUHZCLEVBQUt3TixhQUFjNUssRUFBTWtFLEVBQVEsSUFDMUJBLElBUFB4SixFQUFPd2pCLFdBQVk5Z0IsRUFBTTRDLEdBQXpCdEYsYUF1Qkh3akIsV0FBWSxTQUFVOWdCLEVBQU04RyxHQUMzQixHQUFJbEUsR0FBTXFmLEVBQ1Q5ZixFQUFJLEVBQ0orZixFQUFZcGIsR0FBU0EsRUFBTS9HLE1BQU9mLEVBRW5DLElBQUtrakIsR0FBK0IsSUFBbEJsaUIsRUFBS1EsU0FDdEIsTUFBU29DLEVBQU9zZixFQUFVL2YsS0FDekI4ZixFQUFXM2tCLEVBQU8wakIsUUFBU3BlLElBQVVBLEVBR2hDdEYsRUFBTzhULEtBQUtyUixNQUFNK0wsS0FBS3BMLEtBQU1rQyxLQUVqQzVDLEVBQU1paUIsSUFBYSxHQUdwQmppQixFQUFLNk4sZ0JBQWlCakwsSUFLekJvZixXQUNDOWQsTUFDQzBhLElBQUssU0FBVTVlLEVBQU04RyxHQUNwQixJQUFNeEosRUFBT3NMLFFBQVFvVSxZQUF3QixVQUFWbFcsR0FBcUJ4SixFQUFPc0osU0FBUzVHLEVBQU0sU0FBVyxDQUd4RixHQUFJc1IsR0FBTXRSLEVBQUs4RyxLQUtmLE9BSkE5RyxHQUFLd04sYUFBYyxPQUFRMUcsR0FDdEJ3SyxJQUNKdFIsRUFBSzhHLE1BQVF3SyxHQUVQeEssTUFNWGthLFNBQ0NtQixNQUFPLFVBQ1BDLFFBQVMsYUFHVnZELEtBQU0sU0FBVTdlLEVBQU00QyxFQUFNa0UsR0FDM0IsR0FBSXZGLEdBQUtvZSxFQUFPMEMsRUFDZk4sRUFBUS9oQixFQUFLUSxRQUdkLElBQU1SLEdBQWtCLElBQVYraEIsR0FBeUIsSUFBVkEsR0FBeUIsSUFBVkEsRUFZNUMsTUFSQU0sR0FBbUIsSUFBVk4sSUFBZ0J6a0IsRUFBTzJiLFNBQVVqWixHQUVyQ3FpQixJQUVKemYsRUFBT3RGLEVBQU8wakIsUUFBU3BlLElBQVVBLEVBQ2pDK2MsRUFBUXJpQixFQUFPZ2xCLFVBQVcxZixJQUd0QmtFLElBQVVqSyxVQUNQOGlCLEdBQVMsT0FBU0EsS0FBVXBlLEVBQU1vZSxFQUFNZixJQUFLNWUsRUFBTThHLEVBQU9sRSxNQUFZL0YsVUFDNUUwRSxFQUNFdkIsRUFBTTRDLEdBQVNrRSxFQUdYNlksR0FBUyxPQUFTQSxJQUE2QyxRQUFuQ3BlLEVBQU1vZSxFQUFNeGUsSUFBS25CLEVBQU00QyxJQUN6RHJCLEVBQ0F2QixFQUFNNEMsSUFJVDBmLFdBQ0M5TixVQUNDclQsSUFBSyxTQUFVbkIsR0FDZCxNQUFPQSxHQUFLdWlCLGFBQWMsYUFBZ0IxQixFQUFXbmdCLEtBQU1WLEVBQUs0RyxXQUFjNUcsRUFBS3VVLEtBQ2xGdlUsRUFBS3dVLFNBQ0wsUUFPTGtNLEdBQ0M5QixJQUFLLFNBQVU1ZSxFQUFNOEcsRUFBT2xFLEdBTzNCLE1BTktrRSxNQUFVLEVBRWR4SixFQUFPd2pCLFdBQVk5Z0IsRUFBTTRDLEdBRXpCNUMsRUFBS3dOLGFBQWM1SyxFQUFNQSxHQUVuQkEsSUFHVHRGLEVBQU9tRSxLQUFNbkUsRUFBTzhULEtBQUtyUixNQUFNK0wsS0FBSy9NLE9BQU9nQixNQUFPLFFBQVUsU0FBVW9DLEVBQUdTLEdBQ3hFLEdBQUk0ZixHQUFTbGxCLEVBQU84VCxLQUFLM0MsV0FBWTdMLElBQVV0RixFQUFPK0MsS0FBS1EsSUFFM0R2RCxHQUFPOFQsS0FBSzNDLFdBQVk3TCxHQUFTLFNBQVU1QyxFQUFNNEMsRUFBTW9HLEdBQ3RELEdBQUlwSyxHQUFLdEIsRUFBTzhULEtBQUszQyxXQUFZN0wsR0FDaENyQixFQUFNeUgsRUFDTG5NLFdBR0NTLEVBQU84VCxLQUFLM0MsV0FBWTdMLEdBQVMvRixZQUNqQzJsQixFQUFReGlCLEVBQU00QyxFQUFNb0csR0FFcEJwRyxFQUFLaUUsY0FDTCxJQUtILE9BRkF2SixHQUFPOFQsS0FBSzNDLFdBQVk3TCxHQUFTaEUsRUFFMUIyQyxLQU1IakUsRUFBT3NMLFFBQVE2VCxjQUNwQm5mLEVBQU9nbEIsVUFBVTFOLFVBQ2hCelQsSUFBSyxTQUFVbkIsR0FDZCxHQUFJc1AsR0FBU3RQLEVBQUtlLFVBSWxCLE9BSEt1TyxJQUFVQSxFQUFPdk8sWUFDckJ1TyxFQUFPdk8sV0FBVzhULGNBRVosUUFLVnZYLEVBQU9tRSxNQUNOLFdBQ0EsV0FDQSxZQUNBLGNBQ0EsY0FDQSxVQUNBLFVBQ0EsU0FDQSxjQUNBLG1CQUNFLFdBQ0ZuRSxFQUFPMGpCLFFBQVMvZ0IsS0FBSzRHLGVBQWtCNUcsT0FJeEMzQyxFQUFPbUUsTUFBTyxRQUFTLFlBQWMsV0FDcENuRSxFQUFPb2tCLFNBQVV6aEIsT0FDaEIyZSxJQUFLLFNBQVU1ZSxFQUFNOEcsR0FDcEIsTUFBS3hKLEdBQU82RixRQUFTMkQsR0FDWDlHLEVBQUsyVSxRQUFVclgsRUFBTzZKLFFBQVM3SixFQUFPMEMsR0FBTXNSLE1BQU94SyxJQUFXLEVBRHhFLFlBS0l4SixFQUFPc0wsUUFBUTRULFVBQ3BCbGYsRUFBT29rQixTQUFVemhCLE1BQU9rQixJQUFNLFNBQVVuQixHQUd2QyxNQUFzQyxRQUEvQkEsRUFBS3VOLGFBQWEsU0FBb0IsS0FBT3ZOLEVBQUs4RyxTQUk1RCxJQUFJMmIsR0FBWSxPQUNmQyxFQUFjLCtCQUNkQyxFQUFjLGtDQUNkQyxFQUFpQixzQkFFbEIsU0FBU0MsS0FDUixPQUFPLEVBR1IsUUFBU0MsS0FDUixPQUFPLEVBR1IsUUFBU0MsS0FDUixJQUNDLE1BQU83bEIsR0FBU21YLGNBQ2YsTUFBUTJPLEtBT1gxbEIsRUFBTzJsQixPQUVOQyxVQUVBOUksSUFBSyxTQUFVcGEsRUFBTW1qQixFQUFPM1UsRUFBU3pKLEVBQU1yRyxHQUUxQyxHQUFJMGtCLEdBQWFDLEVBQWF6ZCxFQUM3QjBkLEVBQVFDLEVBQUdDLEVBQ1hDLEVBQVNDLEVBQVV4ZixFQUFNeWYsRUFBWUMsRUFDckNDLEVBQVc1RixFQUFVOWMsSUFBS25CLEVBRzNCLElBQU02akIsRUFBTixDQUtLclYsRUFBUUEsVUFDWjRVLEVBQWM1VSxFQUNkQSxFQUFVNFUsRUFBWTVVLFFBQ3RCOVAsRUFBVzBrQixFQUFZMWtCLFVBSWxCOFAsRUFBUTlHLE9BQ2I4RyxFQUFROUcsS0FBT3BLLEVBQU9vSyxTQUloQjRiLEVBQVNPLEVBQVNQLFVBQ3hCQSxFQUFTTyxFQUFTUCxZQUVaRCxFQUFjUSxFQUFTQyxVQUM3QlQsRUFBY1EsRUFBU0MsT0FBUyxTQUFVcGYsR0FHekMsYUFBY3BILEtBQVdOLEdBQXVCMEgsR0FBS3BILEVBQU8ybEIsTUFBTWMsWUFBY3JmLEVBQUVSLEtBRWpGckgsVUFEQVMsRUFBTzJsQixNQUFNZSxTQUFTbGlCLE1BQU91aEIsRUFBWXJqQixLQUFNK0IsWUFJakRzaEIsRUFBWXJqQixLQUFPQSxHQUlwQm1qQixHQUFVQSxHQUFTLElBQUtwakIsTUFBT2YsS0FBcUIsSUFDcER1a0IsRUFBSUosRUFBTWhqQixNQUNWLE9BQVFvakIsSUFDUDNkLEVBQU1nZCxFQUFleGlCLEtBQU0raUIsRUFBTUksUUFDakNyZixFQUFPMGYsRUFBV2hlLEVBQUksR0FDdEIrZCxHQUFlL2QsRUFBSSxJQUFNLElBQUsrQyxNQUFPLEtBQU1uRyxPQUdyQzBCLElBS051ZixFQUFVbm1CLEVBQU8ybEIsTUFBTVEsUUFBU3ZmLE9BR2hDQSxHQUFTeEYsRUFBVytrQixFQUFRUSxhQUFlUixFQUFRUyxXQUFjaGdCLEVBR2pFdWYsRUFBVW5tQixFQUFPMmxCLE1BQU1RLFFBQVN2ZixPQUdoQ3NmLEVBQVlsbUIsRUFBT29GLFFBQ2xCd0IsS0FBTUEsRUFDTjBmLFNBQVVBLEVBQ1Y3ZSxLQUFNQSxFQUNOeUosUUFBU0EsRUFDVDlHLEtBQU04RyxFQUFROUcsS0FDZGhKLFNBQVVBLEVBQ1ZxTixhQUFjck4sR0FBWXBCLEVBQU84VCxLQUFLclIsTUFBTWdNLGFBQWFyTCxLQUFNaEMsR0FDL0R5bEIsVUFBV1IsRUFBV2pXLEtBQUssTUFDekIwVixJQUdJTSxFQUFXSixFQUFRcGYsTUFDekJ3ZixFQUFXSixFQUFRcGYsTUFDbkJ3ZixFQUFTVSxjQUFnQixFQUduQlgsRUFBUVksT0FBU1osRUFBUVksTUFBTW5qQixLQUFNbEIsRUFBTStFLEVBQU00ZSxFQUFZTixNQUFrQixHQUMvRXJqQixFQUFLMEksa0JBQ1QxSSxFQUFLMEksaUJBQWtCeEUsRUFBTW1mLEdBQWEsSUFLeENJLEVBQVFySixNQUNacUosRUFBUXJKLElBQUlsWixLQUFNbEIsRUFBTXdqQixHQUVsQkEsRUFBVWhWLFFBQVE5RyxPQUN2QjhiLEVBQVVoVixRQUFROUcsS0FBTzhHLEVBQVE5RyxPQUs5QmhKLEVBQ0pnbEIsRUFBU2poQixPQUFRaWhCLEVBQVNVLGdCQUFpQixFQUFHWixHQUU5Q0UsRUFBUzNsQixLQUFNeWxCLEdBSWhCbG1CLEVBQU8ybEIsTUFBTUMsT0FBUWhmLElBQVMsRUFJL0JsRSxHQUFPLE9BSVJxRixPQUFRLFNBQVVyRixFQUFNbWpCLEVBQU8zVSxFQUFTOVAsRUFBVTRsQixHQUVqRCxHQUFJamlCLEdBQUdraUIsRUFBVzNlLEVBQ2pCMGQsRUFBUUMsRUFBR0MsRUFDWEMsRUFBU0MsRUFBVXhmLEVBQU15ZixFQUFZQyxFQUNyQ0MsRUFBVzVGLEVBQVVlLFFBQVNoZixJQUFVaWUsRUFBVTljLElBQUtuQixFQUV4RCxJQUFNNmpCLElBQWNQLEVBQVNPLEVBQVNQLFFBQXRDLENBS0FILEdBQVVBLEdBQVMsSUFBS3BqQixNQUFPZixLQUFxQixJQUNwRHVrQixFQUFJSixFQUFNaGpCLE1BQ1YsT0FBUW9qQixJQU1QLEdBTEEzZCxFQUFNZ2QsRUFBZXhpQixLQUFNK2lCLEVBQU1JLFFBQ2pDcmYsRUFBTzBmLEVBQVdoZSxFQUFJLEdBQ3RCK2QsR0FBZS9kLEVBQUksSUFBTSxJQUFLK0MsTUFBTyxLQUFNbkcsT0FHckMwQixFQUFOLENBT0F1ZixFQUFVbm1CLEVBQU8ybEIsTUFBTVEsUUFBU3ZmLE9BQ2hDQSxHQUFTeEYsRUFBVytrQixFQUFRUSxhQUFlUixFQUFRUyxXQUFjaGdCLEVBQ2pFd2YsRUFBV0osRUFBUXBmLE9BQ25CMEIsRUFBTUEsRUFBSSxJQUFVb0YsT0FBUSxVQUFZMlksRUFBV2pXLEtBQUssaUJBQW1CLFdBRzNFNlcsRUFBWWxpQixFQUFJcWhCLEVBQVN2akIsTUFDekIsT0FBUWtDLElBQ1BtaEIsRUFBWUUsRUFBVXJoQixJQUVmaWlCLEdBQWVWLElBQWFKLEVBQVVJLFVBQ3pDcFYsR0FBV0EsRUFBUTlHLE9BQVM4YixFQUFVOWIsTUFDdEM5QixJQUFPQSxFQUFJbEYsS0FBTThpQixFQUFVVyxZQUMzQnpsQixHQUFZQSxJQUFhOGtCLEVBQVU5a0IsV0FBeUIsT0FBYkEsSUFBcUI4a0IsRUFBVTlrQixZQUNqRmdsQixFQUFTamhCLE9BQVFKLEVBQUcsR0FFZm1oQixFQUFVOWtCLFVBQ2RnbEIsRUFBU1UsZ0JBRUxYLEVBQVFwZSxRQUNab2UsRUFBUXBlLE9BQU9uRSxLQUFNbEIsRUFBTXdqQixHQU96QmUsS0FBY2IsRUFBU3ZqQixTQUNyQnNqQixFQUFRZSxVQUFZZixFQUFRZSxTQUFTdGpCLEtBQU1sQixFQUFNMmpCLEVBQVlFLEVBQVNDLFdBQWEsR0FDeEZ4bUIsRUFBT21uQixZQUFhemtCLEVBQU1rRSxFQUFNMmYsRUFBU0MsY0FHbkNSLEdBQVFwZixRQXRDZixLQUFNQSxJQUFRb2YsR0FDYmhtQixFQUFPMmxCLE1BQU01ZCxPQUFRckYsRUFBTWtFLEVBQU9pZixFQUFPSSxHQUFLL1UsRUFBUzlQLEdBQVUsRUEwQy9EcEIsR0FBT3FILGNBQWUyZSxXQUNuQk8sR0FBU0MsT0FDaEI3RixFQUFVNVksT0FBUXJGLEVBQU0sYUFJMUIrRCxRQUFTLFNBQVVrZixFQUFPbGUsRUFBTS9FLEVBQU0wa0IsR0FFckMsR0FBSXZpQixHQUFHd00sRUFBSy9JLEVBQUsrZSxFQUFZQyxFQUFRZCxFQUFRTCxFQUM1Q29CLEdBQWM3a0IsR0FBUTlDLEdBQ3RCZ0gsRUFBTzVGLEVBQVk0QyxLQUFNK2hCLEVBQU8sUUFBV0EsRUFBTS9lLEtBQU8rZSxFQUN4RFUsRUFBYXJsQixFQUFZNEMsS0FBTStoQixFQUFPLGFBQWdCQSxFQUFNa0IsVUFBVXhiLE1BQU0sT0FLN0UsSUFIQWdHLEVBQU0vSSxFQUFNNUYsRUFBT0EsR0FBUTlDLEVBR0osSUFBbEI4QyxFQUFLUSxVQUFvQyxJQUFsQlIsRUFBS1EsV0FLNUJtaUIsRUFBWWppQixLQUFNd0QsRUFBTzVHLEVBQU8ybEIsTUFBTWMsYUFJdEM3ZixFQUFLL0YsUUFBUSxNQUFRLElBRXpCd2xCLEVBQWF6ZixFQUFLeUUsTUFBTSxLQUN4QnpFLEVBQU95ZixFQUFXelYsUUFDbEJ5VixFQUFXbmhCLFFBRVpvaUIsRUFBNkIsRUFBcEIxZ0IsRUFBSy9GLFFBQVEsTUFBWSxLQUFPK0YsRUFHekMrZSxFQUFRQSxFQUFPM2xCLEVBQU84RixTQUNyQjZmLEVBQ0EsR0FBSTNsQixHQUFPd25CLE1BQU81Z0IsRUFBdUIsZ0JBQVYrZSxJQUFzQkEsR0FHdERBLEVBQU04QixVQUFZTCxFQUFlLEVBQUksRUFDckN6QixFQUFNa0IsVUFBWVIsRUFBV2pXLEtBQUssS0FDbEN1VixFQUFNK0IsYUFBZS9CLEVBQU1rQixVQUN0Qm5aLE9BQVEsVUFBWTJZLEVBQVdqVyxLQUFLLGlCQUFtQixXQUMzRCxLQUdEdVYsRUFBTXBRLE9BQVNoVyxVQUNUb21CLEVBQU1oZ0IsU0FDWGdnQixFQUFNaGdCLE9BQVNqRCxHQUloQitFLEVBQWUsTUFBUkEsR0FDSmtlLEdBQ0YzbEIsRUFBTzBELFVBQVcrRCxHQUFRa2UsSUFHM0JRLEVBQVVubUIsRUFBTzJsQixNQUFNUSxRQUFTdmYsT0FDMUJ3Z0IsSUFBZ0JqQixFQUFRMWYsU0FBVzBmLEVBQVExZixRQUFRakMsTUFBTzlCLEVBQU0rRSxNQUFXLEdBQWpGLENBTUEsSUFBTTJmLElBQWlCakIsRUFBUXdCLFdBQWEzbkIsRUFBTzhHLFNBQVVwRSxHQUFTLENBTXJFLElBSkEya0IsRUFBYWxCLEVBQVFRLGNBQWdCL2YsRUFDL0J5ZSxFQUFZamlCLEtBQU1pa0IsRUFBYXpnQixLQUNwQ3lLLEVBQU1BLEVBQUk1TixZQUVINE4sRUFBS0EsRUFBTUEsRUFBSTVOLFdBQ3RCOGpCLEVBQVU5bUIsS0FBTTRRLEdBQ2hCL0ksRUFBTStJLENBSUYvSSxNQUFTNUYsRUFBS1MsZUFBaUJ2RCxJQUNuQzJuQixFQUFVOW1CLEtBQU02SCxFQUFJMkosYUFBZTNKLEVBQUlzZixjQUFnQnRvQixHQUt6RHVGLEVBQUksQ0FDSixRQUFTd00sRUFBTWtXLEVBQVUxaUIsUUFBVThnQixFQUFNa0MsdUJBRXhDbEMsRUFBTS9lLEtBQU8vQixFQUFJLEVBQ2hCd2lCLEVBQ0FsQixFQUFRUyxVQUFZaGdCLEVBR3JCNGYsR0FBVzdGLEVBQVU5YyxJQUFLd04sRUFBSyxlQUFvQnNVLEVBQU0vZSxPQUFVK1osRUFBVTljLElBQUt3TixFQUFLLFVBQ2xGbVYsR0FDSkEsRUFBT2hpQixNQUFPNk0sRUFBSzVKLEdBSXBCK2UsRUFBU2MsR0FBVWpXLEVBQUtpVyxHQUNuQmQsR0FBVXhtQixFQUFPNGhCLFdBQVl2USxJQUFTbVYsRUFBT2hpQixPQUFTZ2lCLEVBQU9oaUIsTUFBTzZNLEVBQUs1SixNQUFXLEdBQ3hGa2UsRUFBTW1DLGdCQWtDUixPQS9CQW5DLEdBQU0vZSxLQUFPQSxFQUdQd2dCLEdBQWlCekIsRUFBTW9DLHNCQUVyQjVCLEVBQVE2QixVQUFZN0IsRUFBUTZCLFNBQVN4akIsTUFBTytpQixFQUFVdGEsTUFBT3hGLE1BQVcsSUFDOUV6SCxFQUFPNGhCLFdBQVlsZixJQUlkNGtCLEdBQVV0bkIsRUFBT3NELFdBQVlaLEVBQU1rRSxNQUFhNUcsRUFBTzhHLFNBQVVwRSxLQUdyRTRGLEVBQU01RixFQUFNNGtCLEdBRVBoZixJQUNKNUYsRUFBTTRrQixHQUFXLE1BSWxCdG5CLEVBQU8ybEIsTUFBTWMsVUFBWTdmLEVBQ3pCbEUsRUFBTWtFLEtBQ041RyxFQUFPMmxCLE1BQU1jLFVBQVlsbkIsVUFFcEIrSSxJQUNKNUYsRUFBTTRrQixHQUFXaGYsSUFNZHFkLEVBQU1wUSxTQUdkbVIsU0FBVSxTQUFVZixHQUduQkEsRUFBUTNsQixFQUFPMmxCLE1BQU1zQyxJQUFLdEMsRUFFMUIsSUFBSTlnQixHQUFHRSxFQUFHZCxFQUFLbVMsRUFBUzhQLEVBQ3ZCZ0MsS0FDQTdqQixFQUFPM0QsRUFBV2tELEtBQU1hLFdBQ3hCMmhCLEdBQWF6RixFQUFVOWMsSUFBS2xCLEtBQU0sZUFBb0JnakIsRUFBTS9lLFVBQzVEdWYsRUFBVW5tQixFQUFPMmxCLE1BQU1RLFFBQVNSLEVBQU0vZSxTQU92QyxJQUpBdkMsRUFBSyxHQUFLc2hCLEVBQ1ZBLEVBQU13QyxlQUFpQnhsQixNQUdsQndqQixFQUFRaUMsYUFBZWpDLEVBQVFpQyxZQUFZeGtCLEtBQU1qQixLQUFNZ2pCLE1BQVksRUFBeEUsQ0FLQXVDLEVBQWVsb0IsRUFBTzJsQixNQUFNUyxTQUFTeGlCLEtBQU1qQixLQUFNZ2pCLEVBQU9TLEdBR3hEdmhCLEVBQUksQ0FDSixRQUFTdVIsRUFBVThSLEVBQWNyakIsUUFBVzhnQixFQUFNa0MsdUJBQXlCLENBQzFFbEMsRUFBTTBDLGNBQWdCalMsRUFBUTFULEtBRTlCcUMsRUFBSSxDQUNKLFFBQVNtaEIsRUFBWTlQLEVBQVFnUSxTQUFVcmhCLFFBQVc0Z0IsRUFBTTJDLGtDQUlqRDNDLEVBQU0rQixjQUFnQi9CLEVBQU0rQixhQUFhdGtCLEtBQU04aUIsRUFBVVcsY0FFOURsQixFQUFNTyxVQUFZQSxFQUNsQlAsRUFBTWxlLEtBQU95ZSxFQUFVemUsS0FFdkJ4RCxJQUFTakUsRUFBTzJsQixNQUFNUSxRQUFTRCxFQUFVSSxlQUFrQkUsUUFBVU4sRUFBVWhWLFNBQzVFMU0sTUFBTzRSLEVBQVExVCxLQUFNMkIsR0FFbkJKLElBQVExRSxZQUNOb21CLEVBQU1wUSxPQUFTdFIsTUFBUyxJQUM3QjBoQixFQUFNbUMsaUJBQ05uQyxFQUFNNEMsb0JBWVgsTUFKS3BDLEdBQVFxQyxjQUNackMsRUFBUXFDLGFBQWE1a0IsS0FBTWpCLEtBQU1nakIsR0FHM0JBLEVBQU1wUSxTQUdkNlEsU0FBVSxTQUFVVCxFQUFPUyxHQUMxQixHQUFJdmhCLEdBQUdxSCxFQUFTdWMsRUFBS3ZDLEVBQ3BCZ0MsS0FDQXBCLEVBQWdCVixFQUFTVSxjQUN6QnpWLEVBQU1zVSxFQUFNaGdCLE1BS2IsSUFBS21oQixHQUFpQnpWLEVBQUluTyxZQUFjeWlCLEVBQU1qTyxRQUF5QixVQUFmaU8sRUFBTS9lLE1BRTdELEtBQVF5SyxJQUFRMU8sS0FBTTBPLEVBQU1BLEVBQUk1TixZQUFjZCxLQUc3QyxHQUFLME8sRUFBSStGLFlBQWEsR0FBdUIsVUFBZnVPLEVBQU0vZSxLQUFtQixDQUV0RCxJQURBc0YsS0FDTXJILEVBQUksRUFBT2lpQixFQUFKamlCLEVBQW1CQSxJQUMvQnFoQixFQUFZRSxFQUFVdmhCLEdBR3RCNGpCLEVBQU12QyxFQUFVOWtCLFNBQVcsSUFFdEI4SyxFQUFTdWMsS0FBVWxwQixZQUN2QjJNLEVBQVN1YyxHQUFRdkMsRUFBVXpYLGFBQzFCek8sRUFBUXlvQixFQUFLOWxCLE1BQU9vYSxNQUFPMUwsSUFBUyxFQUNwQ3JSLEVBQU8rQyxLQUFNMGxCLEVBQUs5bEIsS0FBTSxNQUFRME8sSUFBUXhPLFFBRXJDcUosRUFBU3VjLElBQ2J2YyxFQUFRekwsS0FBTXlsQixFQUdYaGEsR0FBUXJKLFFBQ1pxbEIsRUFBYXpuQixNQUFPaUMsS0FBTTJPLEVBQUsrVSxTQUFVbGEsSUFXN0MsTUFKcUJrYSxHQUFTdmpCLE9BQXpCaWtCLEdBQ0pvQixFQUFhem5CLE1BQU9pQyxLQUFNQyxLQUFNeWpCLFNBQVVBLEVBQVN6bEIsTUFBT21tQixLQUdwRG9CLEdBSVJRLE1BQU8sd0hBQXdIcmQsTUFBTSxLQUVySXNkLFlBRUFDLFVBQ0NGLE1BQU8sNEJBQTRCcmQsTUFBTSxLQUN6Q3FILE9BQVEsU0FBVWlULEVBQU9rRCxHQU94QixNQUpvQixPQUFmbEQsRUFBTW1ELFFBQ1ZuRCxFQUFNbUQsTUFBNkIsTUFBckJELEVBQVNFLFNBQW1CRixFQUFTRSxTQUFXRixFQUFTRyxTQUdqRXJELElBSVRzRCxZQUNDUCxNQUFPLHVGQUF1RnJkLE1BQU0sS0FDcEdxSCxPQUFRLFNBQVVpVCxFQUFPa0QsR0FDeEIsR0FBSUssR0FBVW5YLEVBQUttTyxFQUNsQnhJLEVBQVNtUixFQUFTblIsTUFrQm5CLE9BZm9CLE9BQWZpTyxFQUFNd0QsT0FBcUMsTUFBcEJOLEVBQVNPLFVBQ3BDRixFQUFXdkQsRUFBTWhnQixPQUFPeEMsZUFBaUJ2RCxFQUN6Q21TLEVBQU1tWCxFQUFTcHBCLGdCQUNmb2dCLEVBQU9nSixFQUFTaEosS0FFaEJ5RixFQUFNd0QsTUFBUU4sRUFBU08sU0FBWXJYLEdBQU9BLEVBQUlzWCxZQUFjbkosR0FBUUEsRUFBS21KLFlBQWMsSUFBUXRYLEdBQU9BLEVBQUl1WCxZQUFjcEosR0FBUUEsRUFBS29KLFlBQWMsR0FDbkozRCxFQUFNNEQsTUFBUVYsRUFBU1csU0FBWXpYLEdBQU9BLEVBQUkwWCxXQUFjdkosR0FBUUEsRUFBS3VKLFdBQWMsSUFBUTFYLEdBQU9BLEVBQUkyWCxXQUFjeEosR0FBUUEsRUFBS3dKLFdBQWMsSUFLOUkvRCxFQUFNbUQsT0FBU3BSLElBQVduWSxZQUMvQm9tQixFQUFNbUQsTUFBbUIsRUFBVHBSLEVBQWEsRUFBZSxFQUFUQSxFQUFhLEVBQWUsRUFBVEEsRUFBYSxFQUFJLEdBR2pFaU8sSUFJVHNDLElBQUssU0FBVXRDLEdBQ2QsR0FBS0EsRUFBTzNsQixFQUFPOEYsU0FDbEIsTUFBTzZmLEVBSVIsSUFBSTlnQixHQUFHMGMsRUFBTS9iLEVBQ1pvQixFQUFPK2UsRUFBTS9lLEtBQ2IraUIsRUFBZ0JoRSxFQUNoQmlFLEVBQVVqbkIsS0FBS2dtQixTQUFVL2hCLEVBRXBCZ2pCLEtBQ0xqbkIsS0FBS2dtQixTQUFVL2hCLEdBQVNnakIsRUFDdkJ4RSxFQUFZaGlCLEtBQU13RCxHQUFTakUsS0FBS3NtQixXQUNoQzlELEVBQVUvaEIsS0FBTXdELEdBQVNqRSxLQUFLaW1CLGFBR2hDcGpCLEVBQU9va0IsRUFBUWxCLE1BQVEvbEIsS0FBSytsQixNQUFNbm9CLE9BQVFxcEIsRUFBUWxCLE9BQVUvbEIsS0FBSytsQixNQUVqRS9DLEVBQVEsR0FBSTNsQixHQUFPd25CLE1BQU9tQyxHQUUxQjlrQixFQUFJVyxFQUFLM0MsTUFDVCxPQUFRZ0MsSUFDUDBjLEVBQU8vYixFQUFNWCxHQUNiOGdCLEVBQU9wRSxHQUFTb0ksRUFBZXBJLEVBZWhDLE9BVk1vRSxHQUFNaGdCLFNBQ1hnZ0IsRUFBTWhnQixPQUFTL0YsR0FLZSxJQUExQitsQixFQUFNaGdCLE9BQU96QyxXQUNqQnlpQixFQUFNaGdCLE9BQVNnZ0IsRUFBTWhnQixPQUFPbEMsWUFHdEJtbUIsRUFBUWxYLE9BQVFrWCxFQUFRbFgsT0FBUWlULEVBQU9nRSxHQUFrQmhFLEdBR2pFUSxTQUNDMEQsTUFFQ2xDLFVBQVUsR0FFWDdRLE9BRUNyUSxRQUFTLFdBQ1IsTUFBSzlELFFBQVM4aUIsS0FBdUI5aUIsS0FBS21VLE9BQ3pDblUsS0FBS21VLFNBQ0UsR0FGUixXQUtENlAsYUFBYyxXQUVmbUQsTUFDQ3JqQixRQUFTLFdBQ1IsTUFBSzlELFFBQVM4aUIsS0FBdUI5aUIsS0FBS21uQixNQUN6Q25uQixLQUFLbW5CLFFBQ0UsR0FGUixXQUtEbkQsYUFBYyxZQUVmb0QsT0FFQ3RqQixRQUFTLFdBQ1IsTUFBbUIsYUFBZDlELEtBQUtpRSxNQUF1QmpFLEtBQUtvbkIsT0FBUy9wQixFQUFPc0osU0FBVTNHLEtBQU0sVUFDckVBLEtBQUtvbkIsU0FDRSxHQUZSLFdBT0QvQixTQUFVLFNBQVVyQyxHQUNuQixNQUFPM2xCLEdBQU9zSixTQUFVcWMsRUFBTWhnQixPQUFRLE9BSXhDcWtCLGNBQ0N4QixhQUFjLFNBQVU3QyxHQUlsQkEsRUFBTXBRLFNBQVdoVyxZQUNyQm9tQixFQUFNZ0UsY0FBY00sWUFBY3RFLEVBQU1wUSxXQU01QzJVLFNBQVUsU0FBVXRqQixFQUFNbEUsRUFBTWlqQixFQUFPd0UsR0FJdEMsR0FBSS9pQixHQUFJcEgsRUFBT29GLE9BQ2QsR0FBSXBGLEdBQU93bkIsTUFDWDdCLEdBRUMvZSxLQUFNQSxFQUNOd2pCLGFBQWEsRUFDYlQsa0JBR0dRLEdBQ0pucUIsRUFBTzJsQixNQUFNbGYsUUFBU1csRUFBRyxLQUFNMUUsR0FFL0IxQyxFQUFPMmxCLE1BQU1lLFNBQVM5aUIsS0FBTWxCLEVBQU0wRSxHQUU5QkEsRUFBRTJnQixzQkFDTnBDLEVBQU1tQyxtQkFLVDluQixFQUFPbW5CLFlBQWMsU0FBVXprQixFQUFNa0UsRUFBTTRmLEdBQ3JDOWpCLEVBQUtOLHFCQUNUTSxFQUFLTixvQkFBcUJ3RSxFQUFNNGYsR0FBUSxJQUkxQ3htQixFQUFPd25CLE1BQVEsU0FBVWppQixFQUFLbWpCLEdBRTdCLE1BQU8vbEIsZ0JBQWdCM0MsR0FBT3duQixPQUt6QmppQixHQUFPQSxFQUFJcUIsTUFDZmpFLEtBQUtnbkIsY0FBZ0Jwa0IsRUFDckI1QyxLQUFLaUUsS0FBT3JCLEVBQUlxQixLQUloQmpFLEtBQUtvbEIsbUJBQXVCeGlCLEVBQUk4a0Isa0JBQy9COWtCLEVBQUkra0IsbUJBQXFCL2tCLEVBQUkra0Isb0JBQXdCL0UsRUFBYUMsR0FJbkU3aUIsS0FBS2lFLEtBQU9yQixFQUlSbWpCLEdBQ0oxb0IsRUFBT29GLE9BQVF6QyxLQUFNK2xCLEdBSXRCL2xCLEtBQUs0bkIsVUFBWWhsQixHQUFPQSxFQUFJZ2xCLFdBQWF2cUIsRUFBTzRLLE1BR2hEakksS0FBTTNDLEVBQU84RixVQUFZLEVBdkJ6QixXQUpRLEdBQUk5RixHQUFPd25CLE1BQU9qaUIsRUFBS21qQixJQWdDaEMxb0IsRUFBT3duQixNQUFNbGxCLFdBQ1p5bEIsbUJBQW9CdkMsRUFDcEJxQyxxQkFBc0JyQyxFQUN0QjhDLDhCQUErQjlDLEVBRS9Cc0MsZUFBZ0IsV0FDZixHQUFJMWdCLEdBQUl6RSxLQUFLZ25CLGFBRWJobkIsTUFBS29sQixtQkFBcUJ4QyxFQUVyQm5lLEdBQUtBLEVBQUUwZ0IsZ0JBQ1gxZ0IsRUFBRTBnQixrQkFHSlMsZ0JBQWlCLFdBQ2hCLEdBQUluaEIsR0FBSXpFLEtBQUtnbkIsYUFFYmhuQixNQUFLa2xCLHFCQUF1QnRDLEVBRXZCbmUsR0FBS0EsRUFBRW1oQixpQkFDWG5oQixFQUFFbWhCLG1CQUdKaUMseUJBQTBCLFdBQ3pCN25CLEtBQUsybEIsOEJBQWdDL0MsRUFDckM1aUIsS0FBSzRsQixvQkFNUHZvQixFQUFPbUUsTUFDTnNtQixXQUFZLFlBQ1pDLFdBQVksWUFDVixTQUFVQyxFQUFNMUMsR0FDbEJqb0IsRUFBTzJsQixNQUFNUSxRQUFTd0UsSUFDckJoRSxhQUFjc0IsRUFDZHJCLFNBQVVxQixFQUVWekIsT0FBUSxTQUFVYixHQUNqQixHQUFJMWhCLEdBQ0gwQixFQUFTaEQsS0FDVGlvQixFQUFVakYsRUFBTWtGLGNBQ2hCM0UsRUFBWVAsRUFBTU8sU0FTbkIsU0FMTTBFLEdBQVlBLElBQVlqbEIsSUFBVzNGLEVBQU9tTSxTQUFVeEcsRUFBUWlsQixNQUNqRWpGLEVBQU0vZSxLQUFPc2YsRUFBVUksU0FDdkJyaUIsRUFBTWlpQixFQUFVaFYsUUFBUTFNLE1BQU83QixLQUFNOEIsV0FDckNraEIsRUFBTS9lLEtBQU9xaEIsR0FFUGhrQixNQU9KakUsRUFBT3NMLFFBQVFzVSxnQkFDcEI1ZixFQUFPbUUsTUFBTzJTLE1BQU8sVUFBV2dULEtBQU0sWUFBYyxTQUFVYSxFQUFNMUMsR0FHbkUsR0FBSTZDLEdBQVcsRUFDZDVaLEVBQVUsU0FBVXlVLEdBQ25CM2xCLEVBQU8ybEIsTUFBTXVFLFNBQVVqQyxFQUFLdEMsRUFBTWhnQixPQUFRM0YsRUFBTzJsQixNQUFNc0MsSUFBS3RDLElBQVMsR0FHdkUzbEIsR0FBTzJsQixNQUFNUSxRQUFTOEIsSUFDckJsQixNQUFPLFdBQ2MsSUFBZitELEtBQ0psckIsRUFBU3dMLGlCQUFrQnVmLEVBQU16WixHQUFTLElBRzVDZ1csU0FBVSxXQUNXLE1BQWI0RCxHQUNObHJCLEVBQVN3QyxvQkFBcUJ1b0IsRUFBTXpaLEdBQVMsT0FPbERsUixFQUFPc0IsR0FBRzhELFFBRVQybEIsR0FBSSxTQUFVbEYsRUFBT3prQixFQUFVcUcsRUFBTW5HLEVBQWlCZ2pCLEdBQ3JELEdBQUkwRyxHQUFRcGtCLENBR1osSUFBc0IsZ0JBQVZpZixHQUFxQixDQUVQLGdCQUFiemtCLEtBRVhxRyxFQUFPQSxHQUFRckcsRUFDZkEsRUFBVzdCLFVBRVosS0FBTXFILElBQVFpZixHQUNibGpCLEtBQUtvb0IsR0FBSW5rQixFQUFNeEYsRUFBVXFHLEVBQU1vZSxFQUFPamYsR0FBUTBkLEVBRS9DLE9BQU8zaEIsTUFtQlIsR0FoQmEsTUFBUjhFLEdBQXNCLE1BQU5uRyxHQUVwQkEsRUFBS0YsRUFDTHFHLEVBQU9yRyxFQUFXN0IsV0FDRCxNQUFOK0IsSUFDYyxnQkFBYkYsSUFFWEUsRUFBS21HLEVBQ0xBLEVBQU9sSSxZQUdQK0IsRUFBS21HLEVBQ0xBLEVBQU9yRyxFQUNQQSxFQUFXN0IsWUFHUitCLEtBQU8sRUFDWEEsRUFBS2trQixNQUNDLEtBQU1sa0IsRUFDWixNQUFPcUIsS0FhUixPQVZhLEtBQVIyaEIsSUFDSjBHLEVBQVMxcEIsRUFDVEEsRUFBSyxTQUFVcWtCLEdBR2QsTUFEQTNsQixLQUFTMEcsSUFBS2lmLEdBQ1BxRixFQUFPeG1CLE1BQU83QixLQUFNOEIsWUFHNUJuRCxFQUFHOEksS0FBTzRnQixFQUFPNWdCLE9BQVU0Z0IsRUFBTzVnQixLQUFPcEssRUFBT29LLFNBRTFDekgsS0FBS3dCLEtBQU0sV0FDakJuRSxFQUFPMmxCLE1BQU03SSxJQUFLbmEsS0FBTWtqQixFQUFPdmtCLEVBQUltRyxFQUFNckcsTUFHM0NrakIsSUFBSyxTQUFVdUIsRUFBT3prQixFQUFVcUcsRUFBTW5HLEdBQ3JDLE1BQU9xQixNQUFLb29CLEdBQUlsRixFQUFPemtCLEVBQVVxRyxFQUFNbkcsRUFBSSxJQUU1Q29GLElBQUssU0FBVW1mLEVBQU96a0IsRUFBVUUsR0FDL0IsR0FBSTRrQixHQUFXdGYsQ0FDZixJQUFLaWYsR0FBU0EsRUFBTWlDLGdCQUFrQmpDLEVBQU1LLFVBUTNDLE1BTkFBLEdBQVlMLEVBQU1LLFVBQ2xCbG1CLEVBQVE2bEIsRUFBTXNDLGdCQUFpQnpoQixJQUM5QndmLEVBQVVXLFVBQVlYLEVBQVVJLFNBQVcsSUFBTUosRUFBVVcsVUFBWVgsRUFBVUksU0FDakZKLEVBQVU5a0IsU0FDVjhrQixFQUFVaFYsU0FFSnZPLElBRVIsSUFBc0IsZ0JBQVZrakIsR0FBcUIsQ0FFaEMsSUFBTWpmLElBQVFpZixHQUNibGpCLEtBQUsrRCxJQUFLRSxFQUFNeEYsRUFBVXlrQixFQUFPamYsR0FFbEMsT0FBT2pFLE1BVVIsT0FSS3ZCLEtBQWEsR0FBNkIsa0JBQWJBLE1BRWpDRSxFQUFLRixFQUNMQSxFQUFXN0IsV0FFUCtCLEtBQU8sSUFDWEEsRUFBS2trQixHQUVDN2lCLEtBQUt3QixLQUFLLFdBQ2hCbkUsRUFBTzJsQixNQUFNNWQsT0FBUXBGLEtBQU1rakIsRUFBT3ZrQixFQUFJRixNQUl4Q3FGLFFBQVMsU0FBVUcsRUFBTWEsR0FDeEIsTUFBTzlFLE1BQUt3QixLQUFLLFdBQ2hCbkUsRUFBTzJsQixNQUFNbGYsUUFBU0csRUFBTWEsRUFBTTlFLFNBR3BDc29CLGVBQWdCLFNBQVVya0IsRUFBTWEsR0FDL0IsR0FBSS9FLEdBQU9DLEtBQUssRUFDaEIsT0FBS0QsR0FDRzFDLEVBQU8ybEIsTUFBTWxmLFFBQVNHLEVBQU1hLEVBQU0vRSxHQUFNLEdBRGhELFlBS0YsSUFBSXdvQixHQUFXLGlCQUNkQyxFQUFlLGlDQUNmQyxFQUFnQnByQixFQUFPOFQsS0FBS3JSLE1BQU1nTSxhQUVsQzRjLEdBQ0NDLFVBQVUsRUFDVkMsVUFBVSxFQUNWaEosTUFBTSxFQUNOaUosTUFBTSxFQUdSeHJCLEdBQU9zQixHQUFHOEQsUUFDVHJDLEtBQU0sU0FBVTNCLEdBQ2YsR0FBSXlELEdBQ0haLEtBQ0EyWSxFQUFPamEsS0FDUG1DLEVBQU04WCxFQUFLL1osTUFFWixJQUF5QixnQkFBYnpCLEdBQ1gsTUFBT3VCLE1BQUtvQixVQUFXL0QsRUFBUW9CLEdBQVdzUixPQUFPLFdBQ2hELElBQU03TixFQUFJLEVBQU9DLEVBQUpELEVBQVNBLElBQ3JCLEdBQUs3RSxFQUFPbU0sU0FBVXlRLEVBQU0vWCxHQUFLbEMsTUFDaEMsT0FBTyxJQU1YLEtBQU1rQyxFQUFJLEVBQU9DLEVBQUpELEVBQVNBLElBQ3JCN0UsRUFBTytDLEtBQU0zQixFQUFVd2IsRUFBTS9YLEdBQUtaLEVBTW5DLE9BRkFBLEdBQU10QixLQUFLb0IsVUFBV2UsRUFBTSxFQUFJOUUsRUFBTzBiLE9BQVF6WCxHQUFRQSxHQUN2REEsRUFBSTdDLFNBQVd1QixLQUFLdkIsU0FBV3VCLEtBQUt2QixTQUFXLElBQU1BLEVBQVdBLEVBQ3pENkMsR0FHUnVTLElBQUssU0FBVTdRLEdBQ2QsR0FBSThsQixHQUFVenJCLEVBQVEyRixFQUFRaEQsTUFDN0JvSCxFQUFJMGhCLEVBQVE1b0IsTUFFYixPQUFPRixNQUFLK1AsT0FBTyxXQUNsQixHQUFJN04sR0FBSSxDQUNSLE1BQVlrRixFQUFKbEYsRUFBT0EsSUFDZCxHQUFLN0UsRUFBT21NLFNBQVV4SixLQUFNOG9CLEVBQVE1bUIsSUFDbkMsT0FBTyxLQU1Yd1IsSUFBSyxTQUFValYsR0FDZCxNQUFPdUIsTUFBS29CLFVBQVcybkIsR0FBTy9vQixLQUFNdkIsT0FBZ0IsS0FHckRzUixPQUFRLFNBQVV0UixHQUNqQixNQUFPdUIsTUFBS29CLFVBQVcybkIsR0FBTy9vQixLQUFNdkIsT0FBZ0IsS0FHckR1cUIsR0FBSSxTQUFVdnFCLEdBQ2IsUUFBU3NxQixHQUNSL29CLEtBSW9CLGdCQUFidkIsSUFBeUJncUIsRUFBY2hvQixLQUFNaEMsR0FDbkRwQixFQUFRb0IsR0FDUkEsT0FDRCxHQUNDeUIsUUFHSCtvQixRQUFTLFNBQVVwWCxFQUFXblQsR0FDN0IsR0FBSWdRLEdBQ0h4TSxFQUFJLEVBQ0prRixFQUFJcEgsS0FBS0UsT0FDVHVULEtBQ0F5VixFQUFRVCxFQUFjaG9CLEtBQU1vUixJQUFvQyxnQkFBZEEsR0FDakR4VSxFQUFRd1UsRUFBV25ULEdBQVdzQixLQUFLdEIsU0FDbkMsQ0FFRixNQUFZMEksRUFBSmxGLEVBQU9BLElBQ2QsSUFBTXdNLEVBQU0xTyxLQUFLa0MsR0FBSXdNLEdBQU9BLElBQVFoUSxFQUFTZ1EsRUFBTUEsRUFBSTVOLFdBRXRELEdBQW9CLEdBQWY0TixFQUFJbk8sV0FBa0Iyb0IsRUFDMUJBLEVBQUk5TyxNQUFNMUwsR0FBTyxHQUdBLElBQWpCQSxFQUFJbk8sVUFDSGxELEVBQU8rQyxLQUFLZ1EsZ0JBQWdCMUIsRUFBS21ELElBQWMsQ0FFaERuRCxFQUFNK0UsRUFBUTNWLEtBQU00USxFQUNwQixPQUtILE1BQU8xTyxNQUFLb0IsVUFBV3FTLEVBQVF2VCxPQUFTLEVBQUk3QyxFQUFPMGIsT0FBUXRGLEdBQVlBLElBS3hFMkcsTUFBTyxTQUFVcmEsR0FHaEIsTUFBTUEsR0FLZSxnQkFBVEEsR0FDSjlCLEVBQWFnRCxLQUFNNUQsRUFBUTBDLEdBQVFDLEtBQU0sSUFJMUMvQixFQUFhZ0QsS0FBTWpCLEtBR3pCRCxFQUFLSCxPQUFTRyxFQUFNLEdBQU1BLEdBWmpCQyxLQUFNLElBQU9BLEtBQU0sR0FBSWMsV0FBZWQsS0FBSytCLFFBQVFvbkIsVUFBVWpwQixPQUFTLElBZ0JqRmlhLElBQUssU0FBVTFiLEVBQVVDLEdBQ3hCLEdBQUlpZ0IsR0FBMEIsZ0JBQWJsZ0IsR0FDZnBCLEVBQVFvQixFQUFVQyxHQUNsQnJCLEVBQU8wRCxVQUFXdEMsR0FBWUEsRUFBUzhCLFVBQWE5QixHQUFhQSxHQUNsRVksRUFBTWhDLEVBQU9nRCxNQUFPTCxLQUFLa0IsTUFBT3lkLEVBRWpDLE9BQU8zZSxNQUFLb0IsVUFBVy9ELEVBQU8wYixPQUFPMVosS0FHdEMrcEIsUUFBUyxTQUFVM3FCLEdBQ2xCLE1BQU91QixNQUFLbWEsSUFBaUIsTUFBWjFiLEVBQ2hCdUIsS0FBS3VCLFdBQWF2QixLQUFLdUIsV0FBV3dPLE9BQU90UixNQUs1QyxTQUFTNHFCLEdBQVMzYSxFQUFLdUQsR0FDdEIsT0FBU3ZELEVBQU1BLEVBQUl1RCxLQUEwQixJQUFqQnZELEVBQUluTyxVQUVoQyxNQUFPbU8sR0FHUnJSLEVBQU9tRSxNQUNONk4sT0FBUSxTQUFVdFAsR0FDakIsR0FBSXNQLEdBQVN0UCxFQUFLZSxVQUNsQixPQUFPdU8sSUFBOEIsS0FBcEJBLEVBQU85TyxTQUFrQjhPLEVBQVMsTUFFcERpYSxRQUFTLFNBQVV2cEIsR0FDbEIsTUFBTzFDLEdBQU80VSxJQUFLbFMsRUFBTSxlQUUxQndwQixhQUFjLFNBQVV4cEIsRUFBTW1DLEVBQUdzbkIsR0FDaEMsTUFBT25zQixHQUFPNFUsSUFBS2xTLEVBQU0sYUFBY3lwQixJQUV4QzVKLEtBQU0sU0FBVTdmLEdBQ2YsTUFBT3NwQixHQUFTdHBCLEVBQU0sZ0JBRXZCOG9CLEtBQU0sU0FBVTlvQixHQUNmLE1BQU9zcEIsR0FBU3RwQixFQUFNLG9CQUV2QjBwQixRQUFTLFNBQVUxcEIsR0FDbEIsTUFBTzFDLEdBQU80VSxJQUFLbFMsRUFBTSxnQkFFMUJvcEIsUUFBUyxTQUFVcHBCLEdBQ2xCLE1BQU8xQyxHQUFPNFUsSUFBS2xTLEVBQU0sb0JBRTFCMnBCLFVBQVcsU0FBVTNwQixFQUFNbUMsRUFBR3NuQixHQUM3QixNQUFPbnNCLEdBQU80VSxJQUFLbFMsRUFBTSxjQUFleXBCLElBRXpDRyxVQUFXLFNBQVU1cEIsRUFBTW1DLEVBQUdzbkIsR0FDN0IsTUFBT25zQixHQUFPNFUsSUFBS2xTLEVBQU0sa0JBQW1CeXBCLElBRTdDSSxTQUFVLFNBQVU3cEIsR0FDbkIsTUFBTzFDLEdBQU9nc0IsU0FBV3RwQixFQUFLZSxnQkFBbUI4TyxXQUFZN1AsSUFFOUQ0b0IsU0FBVSxTQUFVNW9CLEdBQ25CLE1BQU8xQyxHQUFPZ3NCLFFBQVN0cEIsRUFBSzZQLGFBRTdCZ1osU0FBVSxTQUFVN29CLEdBQ25CLE1BQU9BLEdBQUs4cEIsaUJBQW1CeHNCLEVBQU9nRCxTQUFXTixFQUFLc0YsY0FFckQsU0FBVTFDLEVBQU1oRSxHQUNsQnRCLEVBQU9zQixHQUFJZ0UsR0FBUyxTQUFVNm1CLEVBQU8vcUIsR0FDcEMsR0FBSWdWLEdBQVVwVyxFQUFPZ0YsSUFBS3JDLEtBQU1yQixFQUFJNnFCLEVBc0JwQyxPQXBCMEIsVUFBckI3bUIsRUFBSzNFLE1BQU8sTUFDaEJTLEVBQVcrcUIsR0FHUC9xQixHQUFnQyxnQkFBYkEsS0FDdkJnVixFQUFVcFcsRUFBTzBTLE9BQVF0UixFQUFVZ1YsSUFHL0J6VCxLQUFLRSxPQUFTLElBRVp3b0IsRUFBa0IvbEIsSUFDdkJ0RixFQUFPMGIsT0FBUXRGLEdBSVgrVSxFQUFhL25CLEtBQU1rQyxJQUN2QjhRLEVBQVFxVyxXQUlIOXBCLEtBQUtvQixVQUFXcVMsTUFJekJwVyxFQUFPb0YsUUFDTnNOLE9BQVEsU0FBVW9CLEVBQU05UCxFQUFPcVMsR0FDOUIsR0FBSTNULEdBQU9zQixFQUFPLEVBTWxCLE9BSktxUyxLQUNKdkMsRUFBTyxRQUFVQSxFQUFPLEtBR0QsSUFBakI5UCxFQUFNbkIsUUFBa0MsSUFBbEJILEVBQUtRLFNBQ2pDbEQsRUFBTytDLEtBQUtnUSxnQkFBaUJyUSxFQUFNb1IsSUFBV3BSLE1BQzlDMUMsRUFBTytDLEtBQUttSixRQUFTNEgsRUFBTTlULEVBQU9nSyxLQUFNaEcsRUFBTyxTQUFVdEIsR0FDeEQsTUFBeUIsS0FBbEJBLEVBQUtRLGFBSWYwUixJQUFLLFNBQVVsUyxFQUFNa1MsRUFBS3VYLEdBQ3pCLEdBQUkvVixNQUNIc1csRUFBV1AsSUFBVTVzQixTQUV0QixRQUFTbUQsRUFBT0EsRUFBTWtTLEtBQTRCLElBQWxCbFMsRUFBS1EsU0FDcEMsR0FBdUIsSUFBbEJSLEVBQUtRLFNBQWlCLENBQzFCLEdBQUt3cEIsR0FBWTFzQixFQUFRMEMsR0FBT2lwQixHQUFJUSxHQUNuQyxLQUVEL1YsR0FBUTNWLEtBQU1pQyxHQUdoQixNQUFPMFQsSUFHUjRWLFFBQVMsU0FBVVcsRUFBR2pxQixHQUNyQixHQUFJMFQsS0FFSixNQUFRdVcsRUFBR0EsRUFBSUEsRUFBRW5iLFlBQ0ksSUFBZm1iLEVBQUV6cEIsVUFBa0J5cEIsSUFBTWpxQixHQUM5QjBULEVBQVEzVixLQUFNa3NCLEVBSWhCLE9BQU92VyxLQUtULFNBQVNzVixJQUFRM1gsRUFBVTZZLEVBQVd2VyxHQUNyQyxHQUFLclcsRUFBT3NELFdBQVlzcEIsR0FDdkIsTUFBTzVzQixHQUFPZ0ssS0FBTStKLEVBQVUsU0FBVXJSLEVBQU1tQyxHQUU3QyxRQUFTK25CLEVBQVVocEIsS0FBTWxCLEVBQU1tQyxFQUFHbkMsS0FBVzJULEdBSy9DLElBQUt1VyxFQUFVMXBCLFNBQ2QsTUFBT2xELEdBQU9nSyxLQUFNK0osRUFBVSxTQUFVclIsR0FDdkMsTUFBU0EsS0FBU2txQixJQUFnQnZXLEdBS3BDLElBQTBCLGdCQUFkdVcsR0FBeUIsQ0FDcEMsR0FBSzFCLEVBQVM5bkIsS0FBTXdwQixHQUNuQixNQUFPNXNCLEdBQU8wUyxPQUFRa2EsRUFBVzdZLEVBQVVzQyxFQUc1Q3VXLEdBQVk1c0IsRUFBTzBTLE9BQVFrYSxFQUFXN1ksR0FHdkMsTUFBTy9ULEdBQU9nSyxLQUFNK0osRUFBVSxTQUFVclIsR0FDdkMsTUFBUzlCLEdBQWFnRCxLQUFNZ3BCLEVBQVdscUIsSUFBVSxJQUFRMlQsSUFHM0QsR0FBSXdXLElBQVksMEVBQ2ZDLEdBQVcsWUFDWEMsR0FBUSxZQUNSQyxHQUFlLDBCQUNmQyxHQUE4Qix3QkFFOUJDLEdBQVcsb0NBQ1hDLEdBQWMsNEJBQ2RDLEdBQW9CLGNBQ3BCQyxHQUFlLDJDQUdmQyxJQUdDakosUUFBVSxFQUFHLCtCQUFnQyxhQUU3Q2tKLE9BQVMsRUFBRyxVQUFXLFlBQ3ZCQyxLQUFPLEVBQUcsb0JBQXFCLHVCQUMvQkMsSUFBTSxFQUFHLGlCQUFrQixvQkFDM0JDLElBQU0sRUFBRyxxQkFBc0IseUJBRS9CMUYsVUFBWSxFQUFHLEdBQUksSUFJckJzRixJQUFRSyxTQUFXTCxHQUFRakosT0FFM0JpSixHQUFRTSxNQUFRTixHQUFRTyxNQUFRUCxHQUFRUSxTQUFXUixHQUFRUyxRQUFVVCxHQUFRQyxNQUM3RUQsR0FBUVUsR0FBS1YsR0FBUUksR0FFckIxdEIsRUFBT3NCLEdBQUc4RCxRQUNUNEQsS0FBTSxTQUFVUSxHQUNmLE1BQU94SixHQUFPc0ssT0FBUTNILEtBQU0sU0FBVTZHLEdBQ3JDLE1BQU9BLEtBQVVqSyxVQUNoQlMsRUFBT2dKLEtBQU1yRyxNQUNiQSxLQUFLNlUsUUFBUXlXLFFBQVV0ckIsS0FBTSxJQUFPQSxLQUFNLEdBQUlRLGVBQWlCdkQsR0FBV3N1QixlQUFnQjFrQixLQUN6RixLQUFNQSxFQUFPL0UsVUFBVTVCLFNBRzNCb3JCLE9BQVEsV0FDUCxNQUFPdHJCLE1BQUt3ckIsU0FBVTFwQixVQUFXLFNBQVUvQixHQUMxQyxHQUF1QixJQUFsQkMsS0FBS08sVUFBb0MsS0FBbEJQLEtBQUtPLFVBQXFDLElBQWxCUCxLQUFLTyxTQUFpQixDQUN6RSxHQUFJeUMsR0FBU3lvQixHQUFvQnpyQixLQUFNRCxFQUN2Q2lELEdBQU91RCxZQUFheEcsT0FLdkIyckIsUUFBUyxXQUNSLE1BQU8xckIsTUFBS3dyQixTQUFVMXBCLFVBQVcsU0FBVS9CLEdBQzFDLEdBQXVCLElBQWxCQyxLQUFLTyxVQUFvQyxLQUFsQlAsS0FBS08sVUFBcUMsSUFBbEJQLEtBQUtPLFNBQWlCLENBQ3pFLEdBQUl5QyxHQUFTeW9CLEdBQW9CenJCLEtBQU1ELEVBQ3ZDaUQsR0FBTzJvQixhQUFjNXJCLEVBQU1pRCxFQUFPNE0sZ0JBS3JDZ2MsT0FBUSxXQUNQLE1BQU81ckIsTUFBS3dyQixTQUFVMXBCLFVBQVcsU0FBVS9CLEdBQ3JDQyxLQUFLYyxZQUNUZCxLQUFLYyxXQUFXNnFCLGFBQWM1ckIsRUFBTUMsU0FLdkM2ckIsTUFBTyxXQUNOLE1BQU83ckIsTUFBS3dyQixTQUFVMXBCLFVBQVcsU0FBVS9CLEdBQ3JDQyxLQUFLYyxZQUNUZCxLQUFLYyxXQUFXNnFCLGFBQWM1ckIsRUFBTUMsS0FBSzZPLGdCQU01Q3pKLE9BQVEsU0FBVTNHLEVBQVVxdEIsR0FDM0IsR0FBSS9yQixHQUNIc0IsRUFBUTVDLEVBQVdwQixFQUFPMFMsT0FBUXRSLEVBQVV1QixNQUFTQSxLQUNyRGtDLEVBQUksQ0FFTCxNQUE2QixPQUFwQm5DLEVBQU9zQixFQUFNYSxJQUFhQSxJQUM1QjRwQixHQUE4QixJQUFsQi9yQixFQUFLUSxVQUN0QmxELEVBQU8wdUIsVUFBV0MsR0FBUWpzQixJQUd0QkEsRUFBS2UsYUFDSmdyQixHQUFZenVCLEVBQU9tTSxTQUFVekosRUFBS1MsY0FBZVQsSUFDckRrc0IsR0FBZUQsR0FBUWpzQixFQUFNLFdBRTlCQSxFQUFLZSxXQUFXMEYsWUFBYXpHLEdBSS9CLE9BQU9DLE9BR1I2VSxNQUFPLFdBQ04sR0FBSTlVLEdBQ0htQyxFQUFJLENBRUwsTUFBNEIsT0FBbkJuQyxFQUFPQyxLQUFLa0MsSUFBYUEsSUFDVixJQUFsQm5DLEVBQUtRLFdBR1RsRCxFQUFPMHVCLFVBQVdDLEdBQVFqc0IsR0FBTSxJQUdoQ0EsRUFBSzRSLFlBQWMsR0FJckIsT0FBTzNSLE9BR1IrQyxNQUFPLFNBQVVtcEIsRUFBZUMsR0FJL0IsTUFIQUQsR0FBaUMsTUFBakJBLEdBQXdCLEVBQVFBLEVBQ2hEQyxFQUF5QyxNQUFyQkEsRUFBNEJELEVBQWdCQyxFQUV6RG5zQixLQUFLcUMsSUFBSyxXQUNoQixNQUFPaEYsR0FBTzBGLE1BQU8vQyxLQUFNa3NCLEVBQWVDLE1BSTVDQyxLQUFNLFNBQVV2bEIsR0FDZixNQUFPeEosR0FBT3NLLE9BQVEzSCxLQUFNLFNBQVU2RyxHQUNyQyxHQUFJOUcsR0FBT0MsS0FBTSxPQUNoQmtDLEVBQUksRUFDSmtGLEVBQUlwSCxLQUFLRSxNQUVWLElBQUsyRyxJQUFVakssV0FBK0IsSUFBbEJtRCxFQUFLUSxTQUNoQyxNQUFPUixHQUFLNFAsU0FJYixJQUFzQixnQkFBVjlJLEtBQXVCd2pCLEdBQWE1cEIsS0FBTW9HLEtBQ3BEOGpCLElBQVdSLEdBQVNocUIsS0FBTTBHLEtBQWEsR0FBSSxLQUFRLEdBQUlELGVBQWtCLENBRTFFQyxFQUFRQSxFQUFNdkQsUUFBUzRtQixHQUFXLFlBRWxDLEtBQ0MsS0FBWTlpQixFQUFKbEYsRUFBT0EsSUFDZG5DLEVBQU9DLEtBQU1rQyxPQUdVLElBQWxCbkMsRUFBS1EsV0FDVGxELEVBQU8wdUIsVUFBV0MsR0FBUWpzQixHQUFNLElBQ2hDQSxFQUFLNFAsVUFBWTlJLEVBSW5COUcsR0FBTyxFQUdOLE1BQU8wRSxLQUdMMUUsR0FDSkMsS0FBSzZVLFFBQVF5VyxPQUFRemtCLElBRXBCLEtBQU1BLEVBQU8vRSxVQUFVNUIsU0FHM0Jtc0IsWUFBYSxXQUNaLEdBRUMzcUIsR0FBT3JFLEVBQU9nRixJQUFLckMsS0FBTSxTQUFVRCxHQUNsQyxPQUFTQSxFQUFLOE8sWUFBYTlPLEVBQUtlLGNBRWpDb0IsRUFBSSxDQW1CTCxPQWhCQWxDLE1BQUt3ckIsU0FBVTFwQixVQUFXLFNBQVUvQixHQUNuQyxHQUFJNmYsR0FBT2xlLEVBQU1RLEtBQ2hCbU4sRUFBUzNOLEVBQU1RLElBRVhtTixLQUVDdVEsR0FBUUEsRUFBSzllLGFBQWV1TyxJQUNoQ3VRLEVBQU81ZixLQUFLNk8sYUFFYnhSLEVBQVEyQyxNQUFPb0YsU0FDZmlLLEVBQU9zYyxhQUFjNXJCLEVBQU02ZixNQUcxQixHQUdJMWQsRUFBSWxDLEtBQU9BLEtBQUtvRixVQUd4QmtuQixPQUFRLFNBQVU3dEIsR0FDakIsTUFBT3VCLE1BQUtvRixPQUFRM0csR0FBVSxJQUcvQitzQixTQUFVLFNBQVU5cEIsRUFBTUQsRUFBVThxQixHQUduQzdxQixFQUFPL0QsRUFBWWtFLFNBQVdILEVBRTlCLElBQUkwYSxHQUFVcmEsRUFBT2tELEVBQVN1bkIsRUFBWXJkLEVBQU1DLEVBQy9DbE4sRUFBSSxFQUNKa0YsRUFBSXBILEtBQUtFLE9BQ1R5ZSxFQUFNM2UsS0FDTnlzQixFQUFXcmxCLEVBQUksRUFDZlAsRUFBUW5GLEVBQU0sR0FDZGYsRUFBYXRELEVBQU9zRCxXQUFZa0csRUFHakMsSUFBS2xHLEtBQXNCLEdBQUx5RyxHQUEyQixnQkFBVlAsSUFBc0J4SixFQUFPc0wsUUFBUXFVLGFBQWV1TixHQUFTOXBCLEtBQU1vRyxHQUN6RyxNQUFPN0csTUFBS3dCLEtBQUssU0FBVTRZLEdBQzFCLEdBQUlILEdBQU8wRSxFQUFJM2MsR0FBSW9ZLEVBQ2R6WixLQUNKZSxFQUFNLEdBQU1tRixFQUFNNUYsS0FBTWpCLEtBQU1vYSxFQUFPSCxFQUFLbVMsU0FFM0NuUyxFQUFLdVIsU0FBVTlwQixFQUFNRCxFQUFVOHFCLElBSWpDLElBQUtubEIsSUFDSmdWLEVBQVcvZSxFQUFPOEgsY0FBZXpELEVBQU0xQixLQUFNLEdBQUlRLGVBQWUsR0FBUStyQixHQUFxQnZzQixNQUM3RitCLEVBQVFxYSxFQUFTeE0sV0FFbUIsSUFBL0J3TSxFQUFTL1csV0FBV25GLFNBQ3hCa2MsRUFBV3JhLEdBR1BBLEdBQVEsQ0FNWixJQUxBa0QsRUFBVTVILEVBQU9nRixJQUFLMnBCLEdBQVE1UCxFQUFVLFVBQVlzUSxJQUNwREYsRUFBYXZuQixFQUFRL0UsT0FJVGtILEVBQUpsRixFQUFPQSxJQUNkaU4sRUFBT2lOLEVBRUZsYSxJQUFNdXFCLElBQ1Z0ZCxFQUFPOVIsRUFBTzBGLE1BQU9vTSxHQUFNLEdBQU0sR0FHNUJxZCxHQUdKbnZCLEVBQU9nRCxNQUFPNEUsRUFBUyttQixHQUFRN2MsRUFBTSxZQUl2QzFOLEVBQVNSLEtBQU1qQixLQUFNa0MsR0FBS2lOLEVBQU1qTixFQUdqQyxJQUFLc3FCLEVBT0osSUFOQXBkLEVBQU1uSyxFQUFTQSxFQUFRL0UsT0FBUyxHQUFJTSxjQUdwQ25ELEVBQU9nRixJQUFLNEMsRUFBUzBuQixJQUdmenFCLEVBQUksRUFBT3NxQixFQUFKdHFCLEVBQWdCQSxJQUM1QmlOLEVBQU9sSyxFQUFTL0MsR0FDWHNvQixHQUFZL3BCLEtBQU0wTyxFQUFLbEwsTUFBUSxNQUNsQytaLEVBQVVyVyxPQUFRd0gsRUFBTSxlQUFrQjlSLEVBQU9tTSxTQUFVNEYsRUFBS0QsS0FFNURBLEVBQUt2TSxJQUVUdkYsRUFBT3V2QixTQUFVemQsRUFBS3ZNLEtBRXRCdkYsRUFBTzJJLFdBQVltSixFQUFLd0MsWUFBWXJPLFFBQVNvbkIsR0FBYyxNQVFqRSxNQUFPMXFCLFNBSVQzQyxFQUFPbUUsTUFDTnFyQixTQUFVLFNBQ1ZDLFVBQVcsVUFDWG5CLGFBQWMsU0FDZG9CLFlBQWEsUUFDYkMsV0FBWSxlQUNWLFNBQVVycUIsRUFBTXVqQixHQUNsQjdvQixFQUFPc0IsR0FBSWdFLEdBQVMsU0FBVWxFLEdBQzdCLEdBQUk0QyxHQUNIQyxLQUNBMnJCLEVBQVM1dkIsRUFBUW9CLEdBQ2pCd0QsRUFBT2dyQixFQUFPL3NCLE9BQVMsRUFDdkJnQyxFQUFJLENBRUwsTUFBYUQsR0FBTEMsRUFBV0EsSUFDbEJiLEVBQVFhLElBQU1ELEVBQU9qQyxLQUFPQSxLQUFLK0MsT0FBTyxHQUN4QzFGLEVBQVE0dkIsRUFBUS9xQixJQUFPZ2tCLEdBQVk3a0IsR0FJbkN4RCxFQUFVZ0UsTUFBT1AsRUFBS0QsRUFBTUgsTUFHN0IsT0FBT2xCLE1BQUtvQixVQUFXRSxNQUl6QmpFLEVBQU9vRixRQUNOTSxNQUFPLFNBQVVoRCxFQUFNbXNCLEVBQWVDLEdBQ3JDLEdBQUlqcUIsR0FBR2tGLEVBQUc4bEIsRUFBYUMsRUFDdEJwcUIsRUFBUWhELEVBQUs4YyxXQUFXLEdBQ3hCdVEsRUFBUy92QixFQUFPbU0sU0FBVXpKLEVBQUtTLGNBQWVULEVBSS9DLE1BQU0xQyxFQUFPc0wsUUFBUWlVLGdCQUFzQyxJQUFsQjdjLEVBQUtRLFVBQW9DLEtBQWxCUixFQUFLUSxVQUFzQmxELEVBQU8yYixTQUFValosSUFNM0csSUFIQW90QixFQUFlbkIsR0FBUWpwQixHQUN2Qm1xQixFQUFjbEIsR0FBUWpzQixHQUVoQm1DLEVBQUksRUFBR2tGLEVBQUk4bEIsRUFBWWh0QixPQUFZa0gsRUFBSmxGLEVBQU9BLElBQzNDbXJCLEdBQVVILEVBQWFockIsR0FBS2lyQixFQUFjanJCLEdBSzVDLElBQUtncUIsRUFDSixHQUFLQyxFQUlKLElBSEFlLEVBQWNBLEdBQWVsQixHQUFRanNCLEdBQ3JDb3RCLEVBQWVBLEdBQWdCbkIsR0FBUWpwQixHQUVqQ2IsRUFBSSxFQUFHa0YsRUFBSThsQixFQUFZaHRCLE9BQVlrSCxFQUFKbEYsRUFBT0EsSUFDM0NvckIsR0FBZ0JKLEVBQWFockIsR0FBS2lyQixFQUFjanJCLFFBR2pEb3JCLElBQWdCdnRCLEVBQU1nRCxFQVd4QixPQU5Bb3FCLEdBQWVuQixHQUFRanBCLEVBQU8sVUFDekJvcUIsRUFBYWp0QixPQUFTLEdBQzFCK3JCLEdBQWVrQixHQUFlQyxHQUFVcEIsR0FBUWpzQixFQUFNLFdBSWhEZ0QsR0FHUm9DLGNBQWUsU0FBVTlELEVBQU8zQyxFQUFTdUcsRUFBU3NvQixHQUNqRCxHQUFJeHRCLEdBQU00RixFQUFLdUssRUFBS3NkLEVBQU1oa0IsRUFBVXBILEVBQ25DRixFQUFJLEVBQ0prRixFQUFJL0YsRUFBTW5CLE9BQ1ZrYyxFQUFXMWQsRUFBUTJkLHlCQUNuQm9SLElBRUQsTUFBWXJtQixFQUFKbEYsRUFBT0EsSUFHZCxHQUZBbkMsRUFBT3NCLEVBQU9hLEdBRVRuQyxHQUFpQixJQUFUQSxFQUdaLEdBQTZCLFdBQXhCMUMsRUFBTzRHLEtBQU1sRSxHQUdqQjFDLEVBQU9nRCxNQUFPb3RCLEVBQU8xdEIsRUFBS1EsVUFBYVIsR0FBU0EsT0FHMUMsSUFBTXFxQixHQUFNM3BCLEtBQU1WLEdBSWxCLENBQ040RixFQUFNQSxHQUFPeVcsRUFBUzdWLFlBQWE3SCxFQUFRd0csY0FBYyxRQUd6RGdMLEdBQVFpYSxHQUFTaHFCLEtBQU1KLEtBQVcsR0FBSSxLQUFPLEdBQUk2RyxjQUNqRDRtQixFQUFPN0MsR0FBU3phLElBQVN5YSxHQUFRdEYsU0FDakMxZixFQUFJZ0ssVUFBWTZkLEVBQU0sR0FBTXp0QixFQUFLdUQsUUFBUzRtQixHQUFXLGFBQWdCc0QsRUFBTSxHQUczRXByQixFQUFJb3JCLEVBQU0sRUFDVixPQUFRcHJCLElBQ1B1RCxFQUFNQSxFQUFJME4sU0FLWGhXLEdBQU9nRCxNQUFPb3RCLEVBQU85bkIsRUFBSU4sWUFHekJNLEVBQU15VyxFQUFTeE0sV0FJZmpLLEVBQUlnTSxZQUFjLE9BMUJsQjhiLEdBQU0zdkIsS0FBTVksRUFBUTZzQixlQUFnQnhyQixHQWdDdkNxYyxHQUFTekssWUFBYyxHQUV2QnpQLEVBQUksQ0FDSixPQUFTbkMsRUFBTzB0QixFQUFPdnJCLEtBSXRCLEtBQUtxckIsR0FBbUQsS0FBdENsd0IsRUFBTzZKLFFBQVNuSCxFQUFNd3RCLE1BSXhDL2pCLEVBQVduTSxFQUFPbU0sU0FBVXpKLEVBQUtTLGNBQWVULEdBR2hENEYsRUFBTXFtQixHQUFRNVAsRUFBUzdWLFlBQWF4RyxHQUFRLFVBR3ZDeUosR0FDSnlpQixHQUFldG1CLEdBSVhWLEdBQVUsQ0FDZDdDLEVBQUksQ0FDSixPQUFTckMsRUFBTzRGLEVBQUt2RCxLQUNmb29CLEdBQVkvcEIsS0FBTVYsRUFBS2tFLE1BQVEsS0FDbkNnQixFQUFRbkgsS0FBTWlDLEdBTWxCLE1BQU9xYyxJQUdSMlAsVUFBVyxTQUFVMXFCLEdBQ3BCLEdBQUl5RCxHQUFNL0UsRUFBTXNqQixFQUFRcGYsRUFBTTJELEVBQUt4RixFQUNsQ29oQixFQUFVbm1CLEVBQU8ybEIsTUFBTVEsUUFDdkJ0aEIsRUFBSSxDQUVMLE9BQVNuQyxFQUFPc0IsRUFBT2EsTUFBU3RGLFVBQVdzRixJQUFNLENBQ2hELEdBQUtpYyxFQUFLRyxRQUFTdmUsS0FDbEI2SCxFQUFNN0gsRUFBTWllLEVBQVU3YSxTQUVqQnlFLElBQVE5QyxFQUFPa1osRUFBVWpRLE1BQU9uRyxLQUFTLENBRTdDLEdBREF5YixFQUFTcGMsT0FBTzZHLEtBQU1oSixFQUFLdWUsWUFDdEJBLEVBQU9uakIsT0FDWCxJQUFNa0MsRUFBSSxHQUFJNkIsRUFBT29mLEVBQU9qaEIsTUFBUXhGLFVBQVd3RixJQUN6Q29oQixFQUFTdmYsR0FDYjVHLEVBQU8ybEIsTUFBTTVkLE9BQVFyRixFQUFNa0UsR0FJM0I1RyxFQUFPbW5CLFlBQWF6a0IsRUFBTWtFLEVBQU1hLEVBQUsrZSxPQUluQzdGLEdBQVVqUSxNQUFPbkcsVUFFZG9XLEdBQVVqUSxNQUFPbkcsU0FLcEJtVyxHQUFVaFEsTUFBT2hPLEVBQU1nZSxFQUFVNWEsWUFJMUN5cEIsU0FBVSxTQUFVYyxHQUNuQixNQUFPcndCLEdBQU9zd0IsTUFDYkQsSUFBS0EsRUFDTHpwQixLQUFNLE1BQ04ycEIsU0FBVSxTQUNWQyxPQUFPLEVBQ1A1SyxRQUFRLEVBQ1I2SyxVQUFVLE1BT2IsU0FBU3JDLElBQW9CMXJCLEVBQU1ndUIsR0FDbEMsTUFBTzF3QixHQUFPc0osU0FBVTVHLEVBQU0sVUFDN0IxQyxFQUFPc0osU0FBK0IsSUFBckJvbkIsRUFBUXh0QixTQUFpQnd0QixFQUFVQSxFQUFRbmUsV0FBWSxNQUV4RTdQLEVBQUsrRixxQkFBcUIsU0FBUyxJQUNsQy9GLEVBQUt3RyxZQUFheEcsRUFBS1MsY0FBYzBFLGNBQWMsVUFDcERuRixFQUlGLFFBQVMyc0IsSUFBZTNzQixHQUV2QixNQURBQSxHQUFLa0UsTUFBc0MsT0FBOUJsRSxFQUFLdU4sYUFBYSxTQUFvQixJQUFNdk4sRUFBS2tFLEtBQ3ZEbEUsRUFFUixRQUFTNHNCLElBQWU1c0IsR0FDdkIsR0FBSUQsR0FBUTJxQixHQUFrQnRxQixLQUFNSixFQUFLa0UsS0FRekMsT0FOS25FLEdBQ0pDLEVBQUtrRSxLQUFPbkUsRUFBTyxHQUVuQkMsRUFBSzZOLGdCQUFnQixRQUdmN04sRUFJUixRQUFTa3NCLElBQWU1cUIsRUFBTzJzQixHQUM5QixHQUFJNW1CLEdBQUkvRixFQUFNbkIsT0FDYmdDLEVBQUksQ0FFTCxNQUFZa0YsRUFBSmxGLEVBQU9BLElBQ2Q4YixFQUFVVyxJQUNUdGQsRUFBT2EsR0FBSyxjQUFlOHJCLEdBQWVoUSxFQUFVOWMsSUFBSzhzQixFQUFhOXJCLEdBQUssZUFLOUUsUUFBU29yQixJQUFnQjFxQixFQUFLcXJCLEdBQzdCLEdBQUkvckIsR0FBR2tGLEVBQUduRCxFQUFNaXFCLEVBQVVDLEVBQVVDLEVBQVVDLEVBQVVoTCxDQUV4RCxJQUF1QixJQUFsQjRLLEVBQUsxdEIsU0FBVixDQUtBLEdBQUt5ZCxFQUFVZSxRQUFTbmMsS0FDdkJzckIsRUFBV2xRLEVBQVVyVyxPQUFRL0UsR0FDN0J1ckIsRUFBV25RLEVBQVVXLElBQUtzUCxFQUFNQyxHQUNoQzdLLEVBQVM2SyxFQUFTN0ssUUFFSixPQUNOOEssR0FBU3RLLE9BQ2hCc0ssRUFBUzlLLFNBRVQsS0FBTXBmLElBQVFvZixHQUNiLElBQU1uaEIsRUFBSSxFQUFHa0YsRUFBSWljLEVBQVFwZixHQUFPL0QsT0FBWWtILEVBQUpsRixFQUFPQSxJQUM5QzdFLEVBQU8ybEIsTUFBTTdJLElBQUs4VCxFQUFNaHFCLEVBQU1vZixFQUFRcGYsR0FBUS9CLElBTzdDNmIsRUFBVWdCLFFBQVNuYyxLQUN2QndyQixFQUFXclEsRUFBVXBXLE9BQVEvRSxHQUM3QnlyQixFQUFXaHhCLEVBQU9vRixVQUFZMnJCLEdBRTlCclEsRUFBVVksSUFBS3NQLEVBQU1JLEtBS3ZCLFFBQVNyQyxJQUFRdHRCLEVBQVN3UixHQUN6QixHQUFJNU8sR0FBTTVDLEVBQVFvSCxxQkFBdUJwSCxFQUFRb0gscUJBQXNCb0ssR0FBTyxLQUM1RXhSLEVBQVFnUCxpQkFBbUJoUCxFQUFRZ1AsaUJBQWtCd0MsR0FBTyxPQUc5RCxPQUFPQSxLQUFRdFQsV0FBYXNULEdBQU83UyxFQUFPc0osU0FBVWpJLEVBQVN3UixHQUM1RDdTLEVBQU9nRCxPQUFTM0IsR0FBVzRDLEdBQzNCQSxFQUlGLFFBQVMrckIsSUFBVXpxQixFQUFLcXJCLEdBQ3ZCLEdBQUl0bkIsR0FBV3NuQixFQUFLdG5CLFNBQVNDLGFBR1gsV0FBYkQsR0FBd0IyakIsR0FBNEI3cEIsS0FBTW1DLEVBQUlxQixNQUNsRWdxQixFQUFLdlosUUFBVTlSLEVBQUk4UixTQUdLLFVBQWIvTixHQUFxQyxhQUFiQSxLQUNuQ3NuQixFQUFLblYsYUFBZWxXLEVBQUlrVyxjQUcxQnpiLEVBQU9zQixHQUFHOEQsUUFDVDZyQixRQUFTLFNBQVVsQyxHQUNsQixHQUFJb0IsRUFFSixPQUFLbndCLEdBQU9zRCxXQUFZeXJCLEdBQ2hCcHNCLEtBQUt3QixLQUFLLFNBQVVVLEdBQzFCN0UsRUFBUTJDLE1BQU9zdUIsUUFBU2xDLEVBQUtuckIsS0FBS2pCLEtBQU1rQyxPQUlyQ2xDLEtBQU0sS0FHVnd0QixFQUFPbndCLEVBQVErdUIsRUFBTXBzQixLQUFNLEdBQUlRLGVBQWdCd0IsR0FBSSxHQUFJZSxPQUFPLEdBRXpEL0MsS0FBTSxHQUFJYyxZQUNkMHNCLEVBQUs3QixhQUFjM3JCLEtBQU0sSUFHMUJ3dEIsRUFBS25yQixJQUFJLFdBQ1IsR0FBSXRDLEdBQU9DLElBRVgsT0FBUUQsRUFBS3d1QixrQkFDWnh1QixFQUFPQSxFQUFLd3VCLGlCQUdiLE9BQU94dUIsS0FDTHVyQixPQUFRdHJCLE9BR0xBLE9BR1J3dUIsVUFBVyxTQUFVcEMsR0FDcEIsTUFBSy91QixHQUFPc0QsV0FBWXlyQixHQUNoQnBzQixLQUFLd0IsS0FBSyxTQUFVVSxHQUMxQjdFLEVBQVEyQyxNQUFPd3VCLFVBQVdwQyxFQUFLbnJCLEtBQUtqQixLQUFNa0MsTUFJckNsQyxLQUFLd0IsS0FBSyxXQUNoQixHQUFJeVksR0FBTzVjLEVBQVEyQyxNQUNsQjRvQixFQUFXM08sRUFBSzJPLFVBRVpBLEdBQVMxb0IsT0FDYjBvQixFQUFTMEYsUUFBU2xDLEdBR2xCblMsRUFBS3FSLE9BQVFjLE1BS2hCb0IsS0FBTSxTQUFVcEIsR0FDZixHQUFJenJCLEdBQWF0RCxFQUFPc0QsV0FBWXlyQixFQUVwQyxPQUFPcHNCLE1BQUt3QixLQUFLLFNBQVVVLEdBQzFCN0UsRUFBUTJDLE1BQU9zdUIsUUFBUzN0QixFQUFheXJCLEVBQUtuckIsS0FBS2pCLEtBQU1rQyxHQUFLa3FCLE1BSTVEcUMsT0FBUSxXQUNQLE1BQU96dUIsTUFBS3FQLFNBQVM3TixLQUFLLFdBQ25CbkUsRUFBT3NKLFNBQVUzRyxLQUFNLFNBQzVCM0MsRUFBUTJDLE1BQU9xc0IsWUFBYXJzQixLQUFLcUYsY0FFaEMvQyxRQUdMLElBQUlvc0IsSUFBUUMsR0FHWEMsR0FBZSw0QkFDZkMsR0FBVSxVQUNWQyxHQUFnQi9qQixPQUFRLEtBQU9sTSxFQUFZLFNBQVUsS0FDckRrd0IsR0FBZ0Joa0IsT0FBUSxLQUFPbE0sRUFBWSxrQkFBbUIsS0FDOURtd0IsR0FBY2prQixPQUFRLFlBQWNsTSxFQUFZLElBQUssS0FDckRvd0IsSUFBZ0JDLEtBQU0sU0FFdEJDLElBQVlDLFNBQVUsV0FBWUMsV0FBWSxTQUFVQyxRQUFTLFNBQ2pFQyxJQUNDQyxjQUFlLEVBQ2ZDLFdBQVksS0FHYkMsSUFBYyxNQUFPLFFBQVMsU0FBVSxRQUN4Q0MsSUFBZ0IsU0FBVSxJQUFLLE1BQU8sS0FHdkMsU0FBU0MsSUFBZ0J2bkIsRUFBTzFGLEdBRy9CLEdBQUtBLElBQVEwRixHQUNaLE1BQU8xRixFQUlSLElBQUlrdEIsR0FBVWx0QixFQUFLMUMsT0FBTyxHQUFHVixjQUFnQm9ELEVBQUszRSxNQUFNLEdBQ3ZEOHhCLEVBQVdudEIsRUFDWFQsRUFBSXl0QixHQUFZenZCLE1BRWpCLE9BQVFnQyxJQUVQLEdBREFTLEVBQU9ndEIsR0FBYXp0QixHQUFNMnRCLEVBQ3JCbHRCLElBQVEwRixHQUNaLE1BQU8xRixFQUlULE9BQU9tdEIsR0FHUixRQUFTQyxJQUFVaHdCLEVBQU1pd0IsR0FJeEIsTUFEQWp3QixHQUFPaXdCLEdBQU1qd0IsRUFDNEIsU0FBbEMxQyxFQUFPNHlCLElBQUtsd0IsRUFBTSxhQUEyQjFDLEVBQU9tTSxTQUFVekosRUFBS1MsY0FBZVQsR0FLMUYsUUFBU213QixJQUFXbndCLEdBQ25CLE1BQU9wRCxHQUFPaWhCLGlCQUFrQjdkLEVBQU0sTUFHdkMsUUFBU293QixJQUFVL2UsRUFBVWdmLEdBQzVCLEdBQUlkLEdBQVN2dkIsRUFBTXN3QixFQUNsQnRVLEtBQ0EzQixFQUFRLEVBQ1JsYSxFQUFTa1IsRUFBU2xSLE1BRW5CLE1BQWdCQSxFQUFSa2EsRUFBZ0JBLElBQ3ZCcmEsRUFBT3FSLEVBQVVnSixHQUNYcmEsRUFBS3NJLFFBSVgwVCxFQUFRM0IsR0FBVTRELEVBQVU5YyxJQUFLbkIsRUFBTSxjQUN2Q3V2QixFQUFVdnZCLEVBQUtzSSxNQUFNaW5CLFFBQ2hCYyxHQUdFclUsRUFBUTNCLElBQXVCLFNBQVprVixJQUN4QnZ2QixFQUFLc0ksTUFBTWluQixRQUFVLElBTU0sS0FBdkJ2dkIsRUFBS3NJLE1BQU1pbkIsU0FBa0JTLEdBQVVod0IsS0FDM0NnYyxFQUFRM0IsR0FBVTRELEVBQVVyVyxPQUFRNUgsRUFBTSxhQUFjdXdCLEdBQW1CdndCLEVBQUs0RyxhQUkzRW9WLEVBQVEzQixLQUNiaVcsRUFBU04sR0FBVWh3QixJQUVkdXZCLEdBQXVCLFNBQVpBLElBQXVCZSxJQUN0Q3JTLEVBQVVXLElBQUs1ZSxFQUFNLGFBQWNzd0IsRUFBU2YsRUFBVWp5QixFQUFPNHlCLElBQUlsd0IsRUFBTSxhQVEzRSxLQUFNcWEsRUFBUSxFQUFXbGEsRUFBUmthLEVBQWdCQSxJQUNoQ3JhLEVBQU9xUixFQUFVZ0osR0FDWHJhLEVBQUtzSSxRQUdMK25CLEdBQStCLFNBQXZCcndCLEVBQUtzSSxNQUFNaW5CLFNBQTZDLEtBQXZCdnZCLEVBQUtzSSxNQUFNaW5CLFVBQ3pEdnZCLEVBQUtzSSxNQUFNaW5CLFFBQVVjLEVBQU9yVSxFQUFRM0IsSUFBVyxHQUFLLFFBSXRELE9BQU9oSixHQUdSL1QsRUFBT3NCLEdBQUc4RCxRQUNUd3RCLElBQUssU0FBVXR0QixFQUFNa0UsR0FDcEIsTUFBT3hKLEdBQU9zSyxPQUFRM0gsS0FBTSxTQUFVRCxFQUFNNEMsRUFBTWtFLEdBQ2pELEdBQUkwcEIsR0FBUXB1QixFQUNYRSxLQUNBSCxFQUFJLENBRUwsSUFBSzdFLEVBQU82RixRQUFTUCxHQUFTLENBSTdCLElBSEE0dEIsRUFBU0wsR0FBV253QixHQUNwQm9DLEVBQU1RLEVBQUt6QyxPQUVDaUMsRUFBSkQsRUFBU0EsSUFDaEJHLEVBQUtNLEVBQU1ULElBQVE3RSxFQUFPNHlCLElBQUtsd0IsRUFBTTRDLEVBQU1ULElBQUssRUFBT3F1QixFQUd4RCxPQUFPbHVCLEdBR1IsTUFBT3dFLEtBQVVqSyxVQUNoQlMsRUFBT2dMLE1BQU90SSxFQUFNNEMsRUFBTWtFLEdBQzFCeEosRUFBTzR5QixJQUFLbHdCLEVBQU00QyxJQUNqQkEsRUFBTWtFLEVBQU8vRSxVQUFVNUIsT0FBUyxJQUVwQ2t3QixLQUFNLFdBQ0wsTUFBT0QsSUFBVW53QixNQUFNLElBRXhCd3dCLEtBQU0sV0FDTCxNQUFPTCxJQUFVbndCLE9BRWxCeXdCLE9BQVEsU0FBVS9WLEdBQ2pCLE1BQXNCLGlCQUFWQSxHQUNKQSxFQUFRMWEsS0FBS293QixPQUFTcHdCLEtBQUt3d0IsT0FHNUJ4d0IsS0FBS3dCLEtBQUssV0FDWHV1QixHQUFVL3ZCLE1BQ2QzQyxFQUFRMkMsTUFBT293QixPQUVmL3lCLEVBQVEyQyxNQUFPd3dCLFlBTW5CbnpCLEVBQU9vRixRQUdOaXVCLFVBQ0NDLFNBQ0N6dkIsSUFBSyxTQUFVbkIsRUFBTTZ3QixHQUNwQixHQUFLQSxFQUFXLENBRWYsR0FBSXR2QixHQUFNb3RCLEdBQVEzdUIsRUFBTSxVQUN4QixPQUFlLEtBQVJ1QixFQUFhLElBQU1BLE1BTzlCdXZCLFdBQ0NDLGFBQWUsRUFDZkMsYUFBZSxFQUNmdEIsWUFBYyxFQUNkdUIsWUFBYyxFQUNkTCxTQUFXLEVBQ1hNLE9BQVMsRUFDVEMsU0FBVyxFQUNYQyxRQUFVLEVBQ1ZDLFFBQVUsRUFDVjNULE1BQVEsR0FLVDRULFVBRUNDLFFBQVMsWUFJVmpwQixNQUFPLFNBQVV0SSxFQUFNNEMsRUFBTWtFLEVBQU8wcUIsR0FFbkMsR0FBTXh4QixHQUEwQixJQUFsQkEsRUFBS1EsVUFBb0MsSUFBbEJSLEVBQUtRLFVBQW1CUixFQUFLc0ksTUFBbEUsQ0FLQSxHQUFJL0csR0FBSzJDLEVBQU15YixFQUNkb1EsRUFBV3p5QixFQUFPb0osVUFBVzlELEdBQzdCMEYsRUFBUXRJLEVBQUtzSSxLQVNkLE9BUEExRixHQUFPdEYsRUFBT2cwQixTQUFVdkIsS0FBZ0J6eUIsRUFBT2cwQixTQUFVdkIsR0FBYUYsR0FBZ0J2bkIsRUFBT3luQixJQUk3RnBRLEVBQVFyaUIsRUFBT3F6QixTQUFVL3RCLElBQVV0RixFQUFPcXpCLFNBQVVaLEdBRy9DanBCLElBQVVqSyxVQWlDVDhpQixHQUFTLE9BQVNBLEtBQVVwZSxFQUFNb2UsRUFBTXhlLElBQUtuQixHQUFNLEVBQU93eEIsTUFBYTMwQixVQUNwRTBFLEVBSUQrRyxFQUFPMUYsSUFyQ2RzQixRQUFjNEMsR0FHQSxXQUFUNUMsSUFBc0IzQyxFQUFNMHRCLEdBQVE3dUIsS0FBTTBHLE1BQzlDQSxHQUFVdkYsRUFBSSxHQUFLLEdBQU1BLEVBQUksR0FBS2dELFdBQVlqSCxFQUFPNHlCLElBQUtsd0IsRUFBTTRDLElBRWhFc0IsRUFBTyxVQUlNLE1BQVQ0QyxHQUEwQixXQUFUNUMsR0FBcUJJLE1BQU93QyxLQUtwQyxXQUFUNUMsR0FBc0I1RyxFQUFPd3pCLFVBQVdmLEtBQzVDanBCLEdBQVMsTUFLSnhKLEVBQU9zTCxRQUFRd1UsaUJBQTZCLEtBQVZ0VyxHQUErQyxJQUEvQmxFLEVBQUt6RSxRQUFRLGdCQUNwRW1LLEVBQU8xRixHQUFTLFdBSVgrYyxHQUFXLE9BQVNBLEtBQVc3WSxFQUFRNlksRUFBTWYsSUFBSzVlLEVBQU04RyxFQUFPMHFCLE1BQWEzMEIsWUFDakZ5TCxFQUFPMUYsR0FBU2tFLElBakJqQixhQStCRm9wQixJQUFLLFNBQVVsd0IsRUFBTTRDLEVBQU00dUIsRUFBT2hCLEdBQ2pDLEdBQUlsZixHQUFLbFEsRUFBS3VlLEVBQ2JvUSxFQUFXenlCLEVBQU9vSixVQUFXOUQsRUF5QjlCLE9BdEJBQSxHQUFPdEYsRUFBT2cwQixTQUFVdkIsS0FBZ0J6eUIsRUFBT2cwQixTQUFVdkIsR0FBYUYsR0FBZ0I3dkIsRUFBS3NJLE1BQU95bkIsSUFJbEdwUSxFQUFRcmlCLEVBQU9xekIsU0FBVS90QixJQUFVdEYsRUFBT3F6QixTQUFVWixHQUcvQ3BRLEdBQVMsT0FBU0EsS0FDdEJyTyxFQUFNcU8sRUFBTXhlLElBQUtuQixHQUFNLEVBQU13eEIsSUFJekJsZ0IsSUFBUXpVLFlBQ1p5VSxFQUFNcWQsR0FBUTN1QixFQUFNNEMsRUFBTTR0QixJQUlkLFdBQVJsZixHQUFvQjFPLElBQVE0c0IsTUFDaENsZSxFQUFNa2UsR0FBb0I1c0IsSUFJWixLQUFWNHVCLEdBQWdCQSxHQUNwQnB3QixFQUFNbUQsV0FBWStNLEdBQ1hrZ0IsS0FBVSxHQUFRbDBCLEVBQU8rRyxVQUFXakQsR0FBUUEsR0FBTyxFQUFJa1EsR0FFeERBLEtBSVRxZCxHQUFTLFNBQVUzdUIsRUFBTTRDLEVBQU02dUIsR0FDOUIsR0FBSTNULEdBQU80VCxFQUFVQyxFQUNwQmQsRUFBV1ksR0FBYXRCLEdBQVdud0IsR0FJbkN1QixFQUFNc3ZCLEVBQVdBLEVBQVNlLGlCQUFrQmh2QixJQUFVaXVCLEVBQVVqdUIsR0FBUy9GLFVBQ3pFeUwsRUFBUXRJLEVBQUtzSSxLQThCZCxPQTVCS3VvQixLQUVTLEtBQVJ0dkIsR0FBZWpFLEVBQU9tTSxTQUFVekosRUFBS1MsY0FBZVQsS0FDeER1QixFQUFNakUsRUFBT2dMLE1BQU90SSxFQUFNNEMsSUFPdEJvc0IsR0FBVXR1QixLQUFNYSxJQUFTdXRCLEdBQVFwdUIsS0FBTWtDLEtBRzNDa2IsRUFBUXhWLEVBQU13VixNQUNkNFQsRUFBV3BwQixFQUFNb3BCLFNBQ2pCQyxFQUFXcnBCLEVBQU1xcEIsU0FHakJycEIsRUFBTW9wQixTQUFXcHBCLEVBQU1xcEIsU0FBV3JwQixFQUFNd1YsTUFBUXZjLEVBQ2hEQSxFQUFNc3ZCLEVBQVMvUyxNQUdmeFYsRUFBTXdWLE1BQVFBLEVBQ2R4VixFQUFNb3BCLFNBQVdBLEVBQ2pCcHBCLEVBQU1xcEIsU0FBV0EsSUFJWnB3QixFQUlSLFNBQVNzd0IsSUFBbUI3eEIsRUFBTThHLEVBQU9nckIsR0FDeEMsR0FBSXRvQixHQUFVdWxCLEdBQVUzdUIsS0FBTTBHLEVBQzlCLE9BQU8wQyxHQUVObkcsS0FBS3dlLElBQUssRUFBR3JZLEVBQVMsSUFBUXNvQixHQUFZLEtBQVV0b0IsRUFBUyxJQUFPLE1BQ3BFMUMsRUFHRixRQUFTaXJCLElBQXNCL3hCLEVBQU00QyxFQUFNNHVCLEVBQU9RLEVBQWF4QixHQUM5RCxHQUFJcnVCLEdBQUlxdkIsS0FBWVEsRUFBYyxTQUFXLFdBRTVDLEVBRVMsVUFBVHB2QixFQUFtQixFQUFJLEVBRXZCME8sRUFBTSxDQUVQLE1BQVksRUFBSm5QLEVBQU9BLEdBQUssRUFFSixXQUFWcXZCLElBQ0psZ0IsR0FBT2hVLEVBQU80eUIsSUFBS2x3QixFQUFNd3hCLEVBQVE3QixHQUFXeHRCLElBQUssRUFBTXF1QixJQUduRHdCLEdBRVcsWUFBVlIsSUFDSmxnQixHQUFPaFUsRUFBTzR5QixJQUFLbHdCLEVBQU0sVUFBWTJ2QixHQUFXeHRCLElBQUssRUFBTXF1QixJQUk3QyxXQUFWZ0IsSUFDSmxnQixHQUFPaFUsRUFBTzR5QixJQUFLbHdCLEVBQU0sU0FBVzJ2QixHQUFXeHRCLEdBQU0sU0FBUyxFQUFNcXVCLE1BSXJFbGYsR0FBT2hVLEVBQU80eUIsSUFBS2x3QixFQUFNLFVBQVkydkIsR0FBV3h0QixJQUFLLEVBQU1xdUIsR0FHNUMsWUFBVmdCLElBQ0psZ0IsR0FBT2hVLEVBQU80eUIsSUFBS2x3QixFQUFNLFNBQVcydkIsR0FBV3h0QixHQUFNLFNBQVMsRUFBTXF1QixJQUt2RSxPQUFPbGYsR0FHUixRQUFTMmdCLElBQWtCanlCLEVBQU00QyxFQUFNNHVCLEdBR3RDLEdBQUlVLElBQW1CLEVBQ3RCNWdCLEVBQWUsVUFBVDFPLEVBQW1CNUMsRUFBSzRkLFlBQWM1ZCxFQUFLbXlCLGFBQ2pEM0IsRUFBU0wsR0FBV253QixHQUNwQmd5QixFQUFjMTBCLEVBQU9zTCxRQUFRK1UsV0FBZ0UsZUFBbkRyZ0IsRUFBTzR5QixJQUFLbHdCLEVBQU0sYUFBYSxFQUFPd3dCLEVBS2pGLElBQVksR0FBUGxmLEdBQW1CLE1BQVBBLEVBQWMsQ0FROUIsR0FOQUEsRUFBTXFkLEdBQVEzdUIsRUFBTTRDLEVBQU00dEIsSUFDZixFQUFObGYsR0FBa0IsTUFBUEEsS0FDZkEsRUFBTXRSLEVBQUtzSSxNQUFPMUYsSUFJZG9zQixHQUFVdHVCLEtBQUs0USxHQUNuQixNQUFPQSxFQUtSNGdCLEdBQW1CRixJQUFpQjEwQixFQUFPc0wsUUFBUStULG1CQUFxQnJMLElBQVF0UixFQUFLc0ksTUFBTzFGLElBRzVGME8sRUFBTS9NLFdBQVkrTSxJQUFTLEVBSTVCLE1BQVNBLEdBQ1J5Z0IsR0FDQy94QixFQUNBNEMsRUFDQTR1QixJQUFXUSxFQUFjLFNBQVcsV0FDcENFLEVBQ0ExQixHQUVFLEtBSUwsUUFBU0QsSUFBb0IzcEIsR0FDNUIsR0FBSXlJLEdBQU1uUyxFQUNUcXlCLEVBQVVMLEdBQWF0b0IsRUEwQnhCLE9BeEJNMm9CLEtBQ0xBLEVBQVU2QyxHQUFleHJCLEVBQVV5SSxHQUdsQixTQUFaa2dCLEdBQXVCQSxJQUUzQlgsSUFBV0EsSUFDVnR4QixFQUFPLGtEQUNONHlCLElBQUssVUFBVyw2QkFDaEJwRCxTQUFVemQsRUFBSWpTLGlCQUdoQmlTLEdBQVF1ZixHQUFPLEdBQUd5RCxlQUFpQnpELEdBQU8sR0FBRzlFLGlCQUFrQjVzQixTQUMvRG1TLEVBQUlpakIsTUFBTSwrQkFDVmpqQixFQUFJa2pCLFFBRUpoRCxFQUFVNkMsR0FBZXhyQixFQUFVeUksR0FDbkN1ZixHQUFPckMsVUFJUjJDLEdBQWF0b0IsR0FBYTJvQixHQUdwQkEsRUFJUixRQUFTNkMsSUFBZXh2QixFQUFNeU0sR0FDN0IsR0FBSXJQLEdBQU8xQyxFQUFRK1IsRUFBSWxLLGNBQWV2QyxJQUFTa3FCLFNBQVV6ZCxFQUFJbU8sTUFDNUQrUixFQUFVanlCLEVBQU80eUIsSUFBS2x3QixFQUFLLEdBQUksVUFFaEMsT0FEQUEsR0FBS3FGLFNBQ0VrcUIsRUFHUmp5QixFQUFPbUUsTUFBTyxTQUFVLFNBQVcsU0FBVVUsRUFBR1MsR0FDL0N0RixFQUFPcXpCLFNBQVUvdEIsSUFDaEJ6QixJQUFLLFNBQVVuQixFQUFNNndCLEVBQVVXLEdBQzlCLE1BQUtYLEdBR3dCLElBQXJCN3dCLEVBQUs0ZCxhQUFxQmlSLEdBQWFudUIsS0FBTXBELEVBQU80eUIsSUFBS2x3QixFQUFNLFlBQ3JFMUMsRUFBTzhLLEtBQU1wSSxFQUFNb3ZCLEdBQVMsV0FDM0IsTUFBTzZDLElBQWtCanlCLEVBQU00QyxFQUFNNHVCLEtBRXRDUyxHQUFrQmp5QixFQUFNNEMsRUFBTTR1QixHQVBoQyxXQVdENVMsSUFBSyxTQUFVNWUsRUFBTThHLEVBQU8wcUIsR0FDM0IsR0FBSWhCLEdBQVNnQixHQUFTckIsR0FBV253QixFQUNqQyxPQUFPNnhCLElBQW1CN3hCLEVBQU04RyxFQUFPMHFCLEVBQ3RDTyxHQUNDL3hCLEVBQ0E0QyxFQUNBNHVCLEVBQ0FsMEIsRUFBT3NMLFFBQVErVSxXQUFnRSxlQUFuRHJnQixFQUFPNHlCLElBQUtsd0IsRUFBTSxhQUFhLEVBQU93d0IsR0FDbEVBLEdBQ0csT0FRUmx6QixFQUFPLFdBRUFBLEVBQU9zTCxRQUFROFQsc0JBQ3BCcGYsRUFBT3F6QixTQUFTNVMsYUFDZjVjLElBQUssU0FBVW5CLEVBQU02d0IsR0FDcEIsTUFBS0EsR0FJR3Z6QixFQUFPOEssS0FBTXBJLEdBQVF1dkIsUUFBVyxnQkFDdENaLElBQVUzdUIsRUFBTSxnQkFMbEIsY0FjRzFDLEVBQU9zTCxRQUFRZ1UsZUFBaUJ0ZixFQUFPc0IsR0FBR3l3QixVQUMvQy94QixFQUFPbUUsTUFBUSxNQUFPLFFBQVUsU0FBVVUsRUFBRzBjLEdBQzVDdmhCLEVBQU9xekIsU0FBVTlSLElBQ2hCMWQsSUFBSyxTQUFVbkIsRUFBTTZ3QixHQUNwQixNQUFLQSxJQUNKQSxFQUFXbEMsR0FBUTN1QixFQUFNNmUsR0FFbEJtUSxHQUFVdHVCLEtBQU1td0IsR0FDdEJ2ekIsRUFBUTBDLEdBQU9xdkIsV0FBWXhRLEdBQVMsS0FDcENnUyxHQUxGLGdCQWNBdnpCLEVBQU84VCxNQUFROVQsRUFBTzhULEtBQUt3RSxVQUMvQnRZLEVBQU84VCxLQUFLd0UsUUFBUTBhLE9BQVMsU0FBVXR3QixHQUd0QyxNQUEyQixJQUFwQkEsRUFBSzRkLGFBQXlDLEdBQXJCNWQsRUFBS215QixjQUd0QzcwQixFQUFPOFQsS0FBS3dFLFFBQVE0YyxRQUFVLFNBQVV4eUIsR0FDdkMsT0FBUTFDLEVBQU84VCxLQUFLd0UsUUFBUTBhLE9BQVF0d0IsS0FLdEMxQyxFQUFPbUUsTUFDTmd4QixPQUFRLEdBQ1JDLFFBQVMsR0FDVEMsT0FBUSxTQUNOLFNBQVVDLEVBQVFDLEdBQ3BCdjFCLEVBQU9xekIsU0FBVWlDLEVBQVNDLElBQ3pCQyxPQUFRLFNBQVVoc0IsR0FDakIsR0FBSTNFLEdBQUksRUFDUDR3QixLQUdBQyxFQUF5QixnQkFBVmxzQixHQUFxQkEsRUFBTTZCLE1BQU0sTUFBUzdCLEVBRTFELE1BQVksRUFBSjNFLEVBQU9BLElBQ2Q0d0IsRUFBVUgsRUFBU2pELEdBQVd4dEIsR0FBTTB3QixHQUNuQ0csRUFBTzd3QixJQUFPNndCLEVBQU83d0IsRUFBSSxJQUFPNndCLEVBQU8sRUFHekMsT0FBT0QsS0FJSGpFLEdBQVFwdUIsS0FBTWt5QixLQUNuQnQxQixFQUFPcXpCLFNBQVVpQyxFQUFTQyxHQUFTalUsSUFBTWlULEtBRzNDLElBQUlvQixJQUFNLE9BQ1RDLEdBQVcsUUFDWEMsR0FBUSxTQUNSQyxHQUFrQix3Q0FDbEJDLEdBQWUsb0NBRWhCLzFCLEdBQU9zQixHQUFHOEQsUUFDVDR3QixVQUFXLFdBQ1YsTUFBT2gyQixHQUFPaTJCLE1BQU90ekIsS0FBS3V6QixtQkFFM0JBLGVBQWdCLFdBQ2YsTUFBT3Z6QixNQUFLcUMsSUFBSSxXQUVmLEdBQUkrTyxHQUFXL1QsRUFBT3VoQixLQUFNNWUsS0FBTSxXQUNsQyxPQUFPb1IsR0FBVy9ULEVBQU8wRCxVQUFXcVEsR0FBYXBSLE9BRWpEK1AsT0FBTyxXQUNQLEdBQUk5TCxHQUFPakUsS0FBS2lFLElBRWhCLE9BQU9qRSxNQUFLMkMsT0FBU3RGLEVBQVEyQyxNQUFPZ3BCLEdBQUksY0FDdkNvSyxHQUFhM3lCLEtBQU1ULEtBQUsyRyxZQUFld3NCLEdBQWdCMXlCLEtBQU13RCxLQUMzRGpFLEtBQUswVSxVQUFZNFYsR0FBNEI3cEIsS0FBTXdELE1BRXRENUIsSUFBSSxTQUFVSCxFQUFHbkMsR0FDakIsR0FBSXNSLEdBQU1oVSxFQUFRMkMsTUFBT3FSLEtBRXpCLE9BQWMsT0FBUEEsRUFDTixLQUNBaFUsRUFBTzZGLFFBQVNtTyxHQUNmaFUsRUFBT2dGLElBQUtnUCxFQUFLLFNBQVVBLEdBQzFCLE9BQVMxTyxLQUFNNUMsRUFBSzRDLEtBQU1rRSxNQUFPd0ssRUFBSS9OLFFBQVM0dkIsR0FBTyxZQUVwRHZ3QixLQUFNNUMsRUFBSzRDLEtBQU1rRSxNQUFPd0ssRUFBSS9OLFFBQVM0dkIsR0FBTyxXQUM5Q2h5QixTQU1MN0QsRUFBT2kyQixNQUFRLFNBQVVycEIsRUFBR3VwQixHQUMzQixHQUFJYixHQUNIYyxLQUNBdFosRUFBTSxTQUFVdlMsRUFBS2YsR0FFcEJBLEVBQVF4SixFQUFPc0QsV0FBWWtHLEdBQVVBLElBQXFCLE1BQVRBLEVBQWdCLEdBQUtBLEVBQ3RFNHNCLEVBQUdBLEVBQUV2ekIsUUFBV3d6QixtQkFBb0I5ckIsR0FBUSxJQUFNOHJCLG1CQUFvQjdzQixHQVN4RSxJQUxLMnNCLElBQWdCNTJCLFlBQ3BCNDJCLEVBQWNuMkIsRUFBT3MyQixjQUFnQnQyQixFQUFPczJCLGFBQWFILGFBSXJEbjJCLEVBQU82RixRQUFTK0csSUFBU0EsRUFBRXJLLFNBQVd2QyxFQUFPcUQsY0FBZXVKLEdBRWhFNU0sRUFBT21FLEtBQU15SSxFQUFHLFdBQ2ZrUSxFQUFLbmEsS0FBSzJDLEtBQU0zQyxLQUFLNkcsYUFNdEIsS0FBTThyQixJQUFVMW9CLEdBQ2YycEIsR0FBYWpCLEVBQVExb0IsRUFBRzBvQixHQUFVYSxFQUFhclosRUFLakQsT0FBT3NaLEdBQUVobUIsS0FBTSxLQUFNbkssUUFBUzB2QixHQUFLLEtBR3BDLFNBQVNZLElBQWFqQixFQUFRM3VCLEVBQUt3dkIsRUFBYXJaLEdBQy9DLEdBQUl4WCxFQUVKLElBQUt0RixFQUFPNkYsUUFBU2MsR0FFcEIzRyxFQUFPbUUsS0FBTXdDLEVBQUssU0FBVTlCLEVBQUcyeEIsR0FDekJMLEdBQWVQLEdBQVN4eUIsS0FBTWt5QixHQUVsQ3hZLEVBQUt3WSxFQUFRa0IsR0FJYkQsR0FBYWpCLEVBQVMsS0FBcUIsZ0JBQU5rQixHQUFpQjN4QixFQUFJLElBQU8sSUFBSzJ4QixFQUFHTCxFQUFhclosU0FJbEYsSUFBTXFaLEdBQXNDLFdBQXZCbjJCLEVBQU80RyxLQUFNRCxHQVF4Q21XLEVBQUt3WSxFQUFRM3VCLE9BTmIsS0FBTXJCLElBQVFxQixHQUNiNHZCLEdBQWFqQixFQUFTLElBQU1od0IsRUFBTyxJQUFLcUIsRUFBS3JCLEdBQVE2d0IsRUFBYXJaLEdBUXJFOWMsRUFBT21FLEtBQU0sME1BRXFEa0gsTUFBTSxLQUFNLFNBQVV4RyxFQUFHUyxHQUcxRnRGLEVBQU9zQixHQUFJZ0UsR0FBUyxTQUFVbUMsRUFBTW5HLEdBQ25DLE1BQU9tRCxXQUFVNUIsT0FBUyxFQUN6QkYsS0FBS29vQixHQUFJemxCLEVBQU0sS0FBTW1DLEVBQU1uRyxHQUMzQnFCLEtBQUs4RCxRQUFTbkIsTUFJakJ0RixFQUFPc0IsR0FBRzhELFFBQ1RxeEIsTUFBTyxTQUFVQyxFQUFRQyxHQUN4QixNQUFPaDBCLE1BQUs4bkIsV0FBWWlNLEdBQVNoTSxXQUFZaU0sR0FBU0QsSUFHdkRFLEtBQU0sU0FBVS9RLEVBQU9wZSxFQUFNbkcsR0FDNUIsTUFBT3FCLE1BQUtvb0IsR0FBSWxGLEVBQU8sS0FBTXBlLEVBQU1uRyxJQUVwQ3UxQixPQUFRLFNBQVVoUixFQUFPdmtCLEdBQ3hCLE1BQU9xQixNQUFLK0QsSUFBS21mLEVBQU8sS0FBTXZrQjtFQUcvQncxQixTQUFVLFNBQVUxMUIsRUFBVXlrQixFQUFPcGUsRUFBTW5HLEdBQzFDLE1BQU9xQixNQUFLb29CLEdBQUlsRixFQUFPemtCLEVBQVVxRyxFQUFNbkcsSUFFeEN5MUIsV0FBWSxTQUFVMzFCLEVBQVV5a0IsRUFBT3ZrQixHQUV0QyxNQUE0QixLQUFyQm1ELFVBQVU1QixPQUFlRixLQUFLK0QsSUFBS3RGLEVBQVUsTUFBU3VCLEtBQUsrRCxJQUFLbWYsRUFBT3prQixHQUFZLEtBQU1FLEtBR2xHLElBRUMwMUIsSUFDQUMsR0FFQUMsR0FBYWwzQixFQUFPNEssTUFFcEJ1c0IsR0FBYyxLQUNkQyxHQUFRLE9BQ1JDLEdBQU0sZ0JBQ05DLEdBQVcsNkJBRVhDLEdBQWlCLDREQUNqQkMsR0FBYSxpQkFDYkMsR0FBWSxRQUNaQyxHQUFPLDhDQUdQQyxHQUFRMzNCLEVBQU9zQixHQUFHdW9CLEtBV2xCK04sTUFPQUMsTUFHQUMsR0FBVyxLQUFLdjNCLE9BQU8sSUFJeEIsS0FDQzAyQixHQUFldDNCLEVBQVNzWCxLQUN2QixNQUFPN1AsSUFHUjZ2QixHQUFlcjNCLEVBQVNpSSxjQUFlLEtBQ3ZDb3ZCLEdBQWFoZ0IsS0FBTyxHQUNwQmdnQixHQUFlQSxHQUFhaGdCLEtBSTdCK2YsR0FBZVUsR0FBSzUwQixLQUFNbTBCLEdBQWExdEIsa0JBR3ZDLFNBQVN3dUIsSUFBNkJDLEdBR3JDLE1BQU8sVUFBVUMsRUFBb0I5YSxHQUVELGdCQUF2QjhhLEtBQ1g5YSxFQUFPOGEsRUFDUEEsRUFBcUIsSUFHdEIsSUFBSTFILEdBQ0gxckIsRUFBSSxFQUNKcXpCLEVBQVlELEVBQW1CMXVCLGNBQWM5RyxNQUFPZixNQUVyRCxJQUFLMUIsRUFBT3NELFdBQVk2WixHQUV2QixNQUFTb1QsRUFBVzJILEVBQVVyekIsS0FFUixNQUFoQjByQixFQUFTLElBQ2JBLEVBQVdBLEVBQVM1dkIsTUFBTyxJQUFPLEtBQ2pDcTNCLEVBQVd6SCxHQUFheUgsRUFBV3pILFFBQWtCMWMsUUFBU3NKLEtBSTlENmEsRUFBV3pILEdBQWF5SCxFQUFXekgsUUFBa0I5dkIsS0FBTTBjLElBUWpFLFFBQVNnYixJQUErQkgsRUFBVzN5QixFQUFTK3lCLEVBQWlCQyxHQUU1RSxHQUFJQyxNQUNIQyxFQUFxQlAsSUFBY0gsRUFFcEMsU0FBU1csR0FBU2pJLEdBQ2pCLEdBQUlqWixFQVlKLE9BWEFnaEIsR0FBVy9ILElBQWEsRUFDeEJ2d0IsRUFBT21FLEtBQU02ekIsRUFBV3pILE9BQWtCLFNBQVV2aEIsRUFBR3lwQixHQUN0RCxHQUFJQyxHQUFzQkQsRUFBb0JwekIsRUFBUyt5QixFQUFpQkMsRUFDeEUsT0FBbUMsZ0JBQXhCSyxJQUFxQ0gsR0FBcUJELEVBQVdJLEdBSXBFSCxJQUNEamhCLEVBQVdvaEIsR0FEZixXQUhOcnpCLEVBQVE2eUIsVUFBVXJrQixRQUFTNmtCLEdBQzNCRixFQUFTRSxJQUNGLEtBS0ZwaEIsRUFHUixNQUFPa2hCLEdBQVNuekIsRUFBUTZ5QixVQUFXLE1BQVVJLEVBQVcsTUFBU0UsRUFBUyxLQU0zRSxRQUFTRyxJQUFZaHpCLEVBQVFKLEdBQzVCLEdBQUlnRixHQUFLM0UsRUFDUmd6QixFQUFjNTRCLEVBQU9zMkIsYUFBYXNDLGVBRW5DLEtBQU1ydUIsSUFBT2hGLEdBQ1BBLEVBQUtnRixLQUFVaEwsYUFDakJxNUIsRUFBYXJ1QixHQUFRNUUsRUFBV0MsSUFBU0EsT0FBZ0IyRSxHQUFRaEYsRUFBS2dGLEdBTzFFLE9BSkszRSxJQUNKNUYsRUFBT29GLFFBQVEsRUFBTU8sRUFBUUMsR0FHdkJELEVBR1IzRixFQUFPc0IsR0FBR3VvQixLQUFPLFNBQVV3RyxFQUFLd0ksRUFBUXowQixHQUN2QyxHQUFvQixnQkFBUmlzQixJQUFvQnNILEdBQy9CLE1BQU9BLElBQU1uekIsTUFBTzdCLEtBQU04QixVQUczQixJQUFJckQsR0FBVXdGLEVBQU1reUIsRUFDbkJsYyxFQUFPamEsS0FDUCtELEVBQU0ycEIsRUFBSXh2QixRQUFRLElBK0NuQixPQTdDSzZGLElBQU8sSUFDWHRGLEVBQVdpdkIsRUFBSTF2QixNQUFPK0YsR0FDdEIycEIsRUFBTUEsRUFBSTF2QixNQUFPLEVBQUcrRixJQUloQjFHLEVBQU9zRCxXQUFZdTFCLElBR3ZCejBCLEVBQVd5MEIsRUFDWEEsRUFBU3Q1QixXQUdFczVCLEdBQTRCLGdCQUFYQSxLQUM1Qmp5QixFQUFPLFFBSUhnVyxFQUFLL1osT0FBUyxHQUNsQjdDLEVBQU9zd0IsTUFDTkQsSUFBS0EsRUFHTHpwQixLQUFNQSxFQUNOMnBCLFNBQVUsT0FDVjlvQixLQUFNb3hCLElBQ0p0MEIsS0FBSyxTQUFVdzBCLEdBR2pCRCxFQUFXcjBCLFVBRVhtWSxFQUFLbVMsS0FBTTN0QixFQUlWcEIsRUFBTyxTQUFTaXVCLE9BQVFqdUIsRUFBT2lELFVBQVc4MUIsSUFBaUJoMkIsS0FBTTNCLEdBR2pFMjNCLEtBRUNDLFNBQVU1MEIsR0FBWSxTQUFVaTBCLEVBQU9ZLEdBQ3pDcmMsRUFBS3pZLEtBQU1DLEVBQVUwMEIsSUFBY1QsRUFBTVUsYUFBY0UsRUFBUVosTUFJMUQxMUIsTUFJUjNDLEVBQU9tRSxNQUFRLFlBQWEsV0FBWSxlQUFnQixZQUFhLGNBQWUsWUFBYyxTQUFVVSxFQUFHK0IsR0FDOUc1RyxFQUFPc0IsR0FBSXNGLEdBQVMsU0FBVXRGLEdBQzdCLE1BQU9xQixNQUFLb29CLEdBQUlua0IsRUFBTXRGLE1BSXhCdEIsRUFBT29GLFFBR044ekIsT0FBUSxFQUdSQyxnQkFDQUMsUUFFQTlDLGNBQ0NqRyxJQUFLNEcsR0FDTHJ3QixLQUFNLE1BQ055eUIsUUFBUzlCLEdBQWVuMEIsS0FBTTR6QixHQUFjLElBQzVDcFIsUUFBUSxFQUNSMFQsYUFBYSxFQUNiOUksT0FBTyxFQUNQK0ksWUFBYSxtREFhYnRZLFNBQ0N1WSxJQUFLMUIsR0FDTDl1QixLQUFNLGFBQ04rbEIsS0FBTSxZQUNOMW1CLElBQUssNEJBQ0xveEIsS0FBTSxxQ0FHUGxPLFVBQ0NsakIsSUFBSyxNQUNMMG1CLEtBQU0sT0FDTjBLLEtBQU0sUUFHUEMsZ0JBQ0NyeEIsSUFBSyxjQUNMVyxLQUFNLGVBQ055d0IsS0FBTSxnQkFLUEUsWUFHQ0MsU0FBVXp5QixPQUdWMHlCLGFBQWEsRUFHYkMsWUFBYTk1QixFQUFPaUksVUFHcEI4eEIsV0FBWS81QixFQUFPb0ksVUFPcEJ3d0IsYUFDQ3ZJLEtBQUssRUFDTGh2QixTQUFTLElBT1gyNEIsVUFBVyxTQUFVcjBCLEVBQVFzMEIsR0FDNUIsTUFBT0EsR0FHTnRCLEdBQVlBLEdBQVloekIsRUFBUTNGLEVBQU9zMkIsY0FBZ0IyRCxHQUd2RHRCLEdBQVkzNEIsRUFBT3MyQixhQUFjM3dCLElBR25DdTBCLGNBQWVuQyxHQUE2QkgsSUFDNUN1QyxjQUFlcEMsR0FBNkJGLElBRzVDdkgsS0FBTSxTQUFVRCxFQUFLaHJCLEdBR0EsZ0JBQVJnckIsS0FDWGhyQixFQUFVZ3JCLEVBQ1ZBLEVBQU05d0IsV0FJUDhGLEVBQVVBLEtBRVYsSUFBSSswQixHQUVIQyxFQUVBQyxFQUNBQyxFQUVBQyxFQUVBOUUsRUFFQStFLEVBRUE1MUIsRUFFQXV4QixFQUFJcDJCLEVBQU9nNkIsYUFBZTMwQixHQUUxQnExQixFQUFrQnRFLEVBQUUvMEIsU0FBVyswQixFQUUvQnVFLEVBQXFCdkUsRUFBRS8wQixVQUFhcTVCLEVBQWdCeDNCLFVBQVl3M0IsRUFBZ0JuNEIsUUFDL0V2QyxFQUFRMDZCLEdBQ1IxNkIsRUFBTzJsQixNQUVScEksRUFBV3ZkLEVBQU9pTCxXQUNsQjJ2QixFQUFtQjU2QixFQUFPZ2MsVUFBVSxlQUVwQzZlLEVBQWF6RSxFQUFFeUUsZUFFZkMsS0FDQUMsS0FFQTFkLEVBQVEsRUFFUjJkLEVBQVcsV0FFWDNDLEdBQ0NudEIsV0FBWSxFQUdaK3ZCLGtCQUFtQixTQUFVMXdCLEdBQzVCLEdBQUk5SCxFQUNKLElBQWUsSUFBVjRhLEVBQWMsQ0FDbEIsSUFBTWtkLEVBQWtCLENBQ3ZCQSxJQUNBLE9BQVM5M0IsRUFBUTYwQixHQUFTeDBCLEtBQU13M0IsR0FDL0JDLEVBQWlCOTNCLEVBQU0sR0FBRzhHLGVBQWtCOUcsRUFBTyxHQUdyREEsRUFBUTgzQixFQUFpQmh3QixFQUFJaEIsZUFFOUIsTUFBZ0IsT0FBVDlHLEVBQWdCLEtBQU9BLEdBSS9CeTRCLHNCQUF1QixXQUN0QixNQUFpQixLQUFWN2QsRUFBY2lkLEVBQXdCLE1BSTlDYSxpQkFBa0IsU0FBVTcxQixFQUFNa0UsR0FDakMsR0FBSTR4QixHQUFROTFCLEVBQUtpRSxhQUtqQixPQUpNOFQsS0FDTC9YLEVBQU95MUIsRUFBcUJLLEdBQVVMLEVBQXFCSyxJQUFXOTFCLEVBQ3RFdzFCLEVBQWdCeDFCLEdBQVNrRSxHQUVuQjdHLE1BSVIwNEIsaUJBQWtCLFNBQVV6MEIsR0FJM0IsTUFITXlXLEtBQ0wrWSxFQUFFa0YsU0FBVzEwQixHQUVQakUsTUFJUms0QixXQUFZLFNBQVU3MUIsR0FDckIsR0FBSTRELEVBQ0osSUFBSzVELEVBQ0osR0FBYSxFQUFScVksRUFDSixJQUFNelUsSUFBUTVELEdBRWI2MUIsRUFBWWp5QixJQUFXaXlCLEVBQVlqeUIsR0FBUTVELEVBQUs0RCxRQUlqRHl2QixHQUFNL2EsT0FBUXRZLEVBQUtxekIsRUFBTVksUUFHM0IsT0FBT3QyQixPQUlSNDRCLE1BQU8sU0FBVUMsR0FDaEIsR0FBSUMsR0FBWUQsR0FBY1IsQ0FLOUIsT0FKS1osSUFDSkEsRUFBVW1CLE1BQU9FLEdBRWxCbDNCLEVBQU0sRUFBR2szQixHQUNGOTRCLE1BeUNWLElBcENBNGEsRUFBU2paLFFBQVMrekIsR0FBUVcsU0FBVzRCLEVBQWlCOWQsSUFDdER1YixFQUFNcUQsUUFBVXJELEVBQU05ekIsS0FDdEI4ekIsRUFBTS93QixNQUFRK3dCLEVBQU03YSxLQU1wQjRZLEVBQUUvRixNQUFVQSxHQUFPK0YsRUFBRS9GLEtBQU80RyxJQUFpQixJQUFLaHhCLFFBQVNteEIsR0FBTyxJQUNoRW54QixRQUFTd3hCLEdBQVdULEdBQWMsR0FBTSxNQUcxQ1osRUFBRXh2QixLQUFPdkIsRUFBUXMyQixRQUFVdDJCLEVBQVF1QixNQUFRd3ZCLEVBQUV1RixRQUFVdkYsRUFBRXh2QixLQUd6RHd2QixFQUFFOEIsVUFBWWw0QixFQUFPbUIsS0FBTWkxQixFQUFFN0YsVUFBWSxLQUFNaG5CLGNBQWM5RyxNQUFPZixLQUFxQixJQUduRSxNQUFqQjAwQixFQUFFd0YsY0FDTmxHLEVBQVFnQyxHQUFLNTBCLEtBQU1zekIsRUFBRS9GLElBQUk5bUIsZUFDekI2c0IsRUFBRXdGLGVBQWtCbEcsR0FDakJBLEVBQU8sS0FBUXNCLEdBQWMsSUFBT3RCLEVBQU8sS0FBUXNCLEdBQWMsS0FDaEV0QixFQUFPLEtBQXdCLFVBQWZBLEVBQU8sR0FBa0IsS0FBTyxXQUMvQ3NCLEdBQWMsS0FBK0IsVUFBdEJBLEdBQWMsR0FBa0IsS0FBTyxVQUsvRFosRUFBRTN1QixNQUFRMnVCLEVBQUVrRCxhQUFpQyxnQkFBWGxELEdBQUUzdUIsT0FDeEMydUIsRUFBRTN1QixLQUFPekgsRUFBT2kyQixNQUFPRyxFQUFFM3VCLEtBQU0ydUIsRUFBRUQsY0FJbENnQyxHQUErQlAsR0FBWXhCLEVBQUcvd0IsRUFBU2d6QixHQUd4QyxJQUFWaGIsRUFDSixNQUFPZ2IsRUFJUm9DLEdBQWNyRSxFQUFFeFEsT0FHWDZVLEdBQW1DLElBQXBCejZCLEVBQU9rNUIsVUFDMUJsNUIsRUFBTzJsQixNQUFNbGYsUUFBUSxhQUl0QjJ2QixFQUFFeHZCLEtBQU93dkIsRUFBRXh2QixLQUFLMUUsY0FHaEJrMEIsRUFBRXlGLFlBQWNyRSxHQUFXcDBCLEtBQU1nekIsRUFBRXh2QixNQUluQ3l6QixFQUFXakUsRUFBRS9GLElBR1ArRixFQUFFeUYsYUFHRnpGLEVBQUUzdUIsT0FDTjR5QixFQUFhakUsRUFBRS9GLE1BQVM4RyxHQUFZL3pCLEtBQU1pM0IsR0FBYSxJQUFNLEtBQVFqRSxFQUFFM3VCLFdBRWhFMnVCLEdBQUUzdUIsTUFJTDJ1QixFQUFFMWxCLFNBQVUsSUFDaEIwbEIsRUFBRS9GLElBQU1nSCxHQUFJajBCLEtBQU1pM0IsR0FHakJBLEVBQVNwMEIsUUFBU294QixHQUFLLE9BQVNILE1BR2hDbUQsR0FBYWxELEdBQVkvekIsS0FBTWkzQixHQUFhLElBQU0sS0FBUSxLQUFPbkQsT0FLL0RkLEVBQUUwRixhQUNEOTdCLEVBQU9tNUIsYUFBY2tCLElBQ3pCaEMsRUFBTThDLGlCQUFrQixvQkFBcUJuN0IsRUFBT201QixhQUFja0IsSUFFOURyNkIsRUFBT281QixLQUFNaUIsSUFDakJoQyxFQUFNOEMsaUJBQWtCLGdCQUFpQm43QixFQUFPbzVCLEtBQU1pQixNQUtuRGpFLEVBQUUzdUIsTUFBUTJ1QixFQUFFeUYsWUFBY3pGLEVBQUVtRCxlQUFnQixHQUFTbDBCLEVBQVFrMEIsY0FDakVsQixFQUFNOEMsaUJBQWtCLGVBQWdCL0UsRUFBRW1ELGFBSTNDbEIsRUFBTThDLGlCQUNMLFNBQ0EvRSxFQUFFOEIsVUFBVyxJQUFPOUIsRUFBRW5WLFFBQVNtVixFQUFFOEIsVUFBVSxJQUMxQzlCLEVBQUVuVixRQUFTbVYsRUFBRThCLFVBQVUsS0FBOEIsTUFBckI5QixFQUFFOEIsVUFBVyxHQUFjLEtBQU9KLEdBQVcsV0FBYSxJQUMxRjFCLEVBQUVuVixRQUFTLEtBSWIsS0FBTXBjLElBQUt1eEIsR0FBRTJGLFFBQ1oxRCxFQUFNOEMsaUJBQWtCdDJCLEVBQUd1eEIsRUFBRTJGLFFBQVNsM0IsR0FJdkMsSUFBS3V4QixFQUFFNEYsYUFBZ0I1RixFQUFFNEYsV0FBV3A0QixLQUFNODJCLEVBQWlCckMsRUFBT2pDLE1BQVEsR0FBbUIsSUFBVi9ZLEdBRWxGLE1BQU9nYixHQUFNa0QsT0FJZFAsR0FBVyxPQUdYLEtBQU1uMkIsS0FBTzYyQixRQUFTLEVBQUdwMEIsTUFBTyxFQUFHMHhCLFNBQVUsR0FDNUNYLEVBQU94ekIsR0FBS3V4QixFQUFHdnhCLEdBT2hCLElBSEF1MUIsRUFBWWpDLEdBQStCTixHQUFZekIsRUFBRy93QixFQUFTZ3pCLEdBSzVELENBQ05BLEVBQU1udEIsV0FBYSxFQUdkdXZCLEdBQ0pFLEVBQW1CbDBCLFFBQVMsWUFBYzR4QixFQUFPakMsSUFHN0NBLEVBQUU1RixPQUFTNEYsRUFBRXRULFFBQVUsSUFDM0IwWCxFQUFlcnZCLFdBQVcsV0FDekJrdEIsRUFBTWtELE1BQU0sWUFDVm5GLEVBQUV0VCxTQUdOLEtBQ0N6RixFQUFRLEVBQ1IrYyxFQUFVNkIsS0FBTW5CLEVBQWdCdjJCLEdBQy9CLE1BQVE2QyxHQUVULEtBQWEsRUFBUmlXLEdBSUosS0FBTWpXLEVBSE43QyxHQUFNLEdBQUk2QyxRQXJCWjdDLEdBQU0sR0FBSSxlQThCWCxTQUFTQSxHQUFNMDBCLEVBQVFpRCxFQUFrQkMsRUFBV0osR0FDbkQsR0FBSUssR0FBV1YsRUFBU3AwQixFQUFPd3hCLEVBQVV1RCxFQUN4Q2IsRUFBYVUsQ0FHQyxLQUFWN2UsSUFLTEEsRUFBUSxFQUdIbWQsR0FDSnpYLGFBQWN5WCxHQUtmSixFQUFZNzZCLFVBR1orNkIsRUFBd0J5QixHQUFXLEdBR25DMUQsRUFBTW50QixXQUFhK3RCLEVBQVMsRUFBSSxFQUFJLEVBR3BDbUQsRUFBWW5ELEdBQVUsS0FBZ0IsSUFBVEEsR0FBMkIsTUFBWEEsRUFHeENrRCxJQUNKckQsRUFBV3dELEdBQXFCbEcsRUFBR2lDLEVBQU84RCxJQUkzQ3JELEVBQVd5RCxHQUFhbkcsRUFBRzBDLEVBQVVULEVBQU8rRCxHQUd2Q0EsR0FHQ2hHLEVBQUUwRixhQUNOTyxFQUFXaEUsRUFBTTRDLGtCQUFrQixpQkFDOUJvQixJQUNKcjhCLEVBQU9tNUIsYUFBY2tCLEdBQWFnQyxHQUVuQ0EsRUFBV2hFLEVBQU00QyxrQkFBa0IsUUFDOUJvQixJQUNKcjhCLEVBQU9vNUIsS0FBTWlCLEdBQWFnQyxJQUtaLE1BQVhwRCxHQUE2QixTQUFYN0MsRUFBRXh2QixLQUN4QjQwQixFQUFhLFlBR1MsTUFBWHZDLEVBQ1h1QyxFQUFhLGVBSWJBLEVBQWExQyxFQUFTemIsTUFDdEJxZSxFQUFVNUMsRUFBU3J4QixLQUNuQkgsRUFBUXd4QixFQUFTeHhCLE1BQ2pCODBCLEdBQWE5MEIsS0FLZEEsRUFBUWswQixHQUNIdkMsSUFBV3VDLEtBQ2ZBLEVBQWEsUUFDQyxFQUFUdkMsSUFDSkEsRUFBUyxLQU1aWixFQUFNWSxPQUFTQSxFQUNmWixFQUFNbUQsWUFBZVUsR0FBb0JWLEdBQWUsR0FHbkRZLEVBQ0o3ZSxFQUFTL1csWUFBYWswQixHQUFtQmdCLEVBQVNGLEVBQVluRCxJQUU5RDlhLEVBQVNpZixXQUFZOUIsR0FBbUJyQyxFQUFPbUQsRUFBWWwwQixJQUk1RCt3QixFQUFNd0MsV0FBWUEsR0FDbEJBLEVBQWF0N0IsVUFFUms3QixHQUNKRSxFQUFtQmwwQixRQUFTMjFCLEVBQVksY0FBZ0IsYUFDckQvRCxFQUFPakMsRUFBR2dHLEVBQVlWLEVBQVVwMEIsSUFJcENzekIsRUFBaUIxZCxTQUFVd2QsR0FBbUJyQyxFQUFPbUQsSUFFaERmLElBQ0pFLEVBQW1CbDBCLFFBQVMsZ0JBQWtCNHhCLEVBQU9qQyxNQUUzQ3AyQixFQUFPazVCLFFBQ2hCbDVCLEVBQU8ybEIsTUFBTWxmLFFBQVEsY0FLeEIsTUFBTzR4QixJQUdSb0UsUUFBUyxTQUFVcE0sRUFBSzVvQixFQUFNckQsR0FDN0IsTUFBT3BFLEdBQU82RCxJQUFLd3NCLEVBQUs1b0IsRUFBTXJELEVBQVUsU0FHekNzNEIsVUFBVyxTQUFVck0sRUFBS2pzQixHQUN6QixNQUFPcEUsR0FBTzZELElBQUt3c0IsRUFBSzl3QixVQUFXNkUsRUFBVSxhQUkvQ3BFLEVBQU9tRSxNQUFRLE1BQU8sUUFBVSxTQUFVVSxFQUFHODJCLEdBQzVDMzdCLEVBQVEyN0IsR0FBVyxTQUFVdEwsRUFBSzVvQixFQUFNckQsRUFBVXdDLEdBUWpELE1BTks1RyxHQUFPc0QsV0FBWW1FLEtBQ3ZCYixFQUFPQSxHQUFReEMsRUFDZkEsRUFBV3FELEVBQ1hBLEVBQU9sSSxXQUdEUyxFQUFPc3dCLE1BQ2JELElBQUtBLEVBQ0x6cEIsS0FBTSswQixFQUNOcEwsU0FBVTNwQixFQUNWYSxLQUFNQSxFQUNOaTBCLFFBQVN0M0IsTUFTWixTQUFTazRCLElBQXFCbEcsRUFBR2lDLEVBQU84RCxHQUV2QyxHQUFJUSxHQUFJLzFCLEVBQU1nMkIsRUFBZUMsRUFDNUJ0UixFQUFXNkssRUFBRTdLLFNBQ2IyTSxFQUFZOUIsRUFBRThCLFNBR2YsT0FBMEIsTUFBbkJBLEVBQVcsR0FDakJBLEVBQVV0bkIsUUFDTCtyQixJQUFPcDlCLFlBQ1hvOUIsRUFBS3ZHLEVBQUVrRixVQUFZakQsRUFBTTRDLGtCQUFrQixnQkFLN0MsSUFBSzBCLEVBQ0osSUFBTS8xQixJQUFRMmtCLEdBQ2IsR0FBS0EsRUFBVTNrQixJQUFVMmtCLEVBQVUza0IsR0FBT3hELEtBQU11NUIsR0FBTyxDQUN0RHpFLEVBQVVya0IsUUFBU2pOLEVBQ25CLE9BTUgsR0FBS3N4QixFQUFXLElBQU9pRSxHQUN0QlMsRUFBZ0IxRSxFQUFXLE9BQ3JCLENBRU4sSUFBTXR4QixJQUFRdTFCLEdBQVksQ0FDekIsSUFBTWpFLEVBQVcsSUFBTzlCLEVBQUV1RCxXQUFZL3lCLEVBQU8sSUFBTXN4QixFQUFVLElBQU8sQ0FDbkUwRSxFQUFnQmgyQixDQUNoQixPQUVLaTJCLElBQ0xBLEVBQWdCajJCLEdBSWxCZzJCLEVBQWdCQSxHQUFpQkMsRUFNbEMsTUFBS0QsSUFDQ0EsSUFBa0IxRSxFQUFXLElBQ2pDQSxFQUFVcmtCLFFBQVMrb0IsR0FFYlQsRUFBV1MsSUFKbkIsVUFXRCxRQUFTTCxJQUFhbkcsRUFBRzBDLEVBQVVULEVBQU8rRCxHQUN6QyxHQUFJVSxHQUFPQyxFQUFTQyxFQUFNMTBCLEVBQUtrakIsRUFDOUJtTyxLQUVBekIsRUFBWTlCLEVBQUU4QixVQUFVdjNCLE9BR3pCLElBQUt1M0IsRUFBVyxHQUNmLElBQU04RSxJQUFRNUcsR0FBRXVELFdBQ2ZBLEVBQVlxRCxFQUFLenpCLGVBQWtCNnNCLEVBQUV1RCxXQUFZcUQsRUFJbkRELEdBQVU3RSxFQUFVdG5CLE9BR3BCLE9BQVFtc0IsRUFjUCxHQVpLM0csRUFBRXNELGVBQWdCcUQsS0FDdEIxRSxFQUFPakMsRUFBRXNELGVBQWdCcUQsSUFBY2pFLElBSWxDdE4sR0FBUTRRLEdBQWFoRyxFQUFFNkcsYUFDNUJuRSxFQUFXMUMsRUFBRTZHLFdBQVluRSxFQUFVMUMsRUFBRTdGLFdBR3RDL0UsRUFBT3VSLEVBQ1BBLEVBQVU3RSxFQUFVdG5CLFFBS25CLEdBQWlCLE1BQVptc0IsRUFFSkEsRUFBVXZSLE1BR0osSUFBYyxNQUFUQSxHQUFnQkEsSUFBU3VSLEVBQVUsQ0FNOUMsR0FIQUMsRUFBT3JELEVBQVluTyxFQUFPLElBQU11UixJQUFhcEQsRUFBWSxLQUFPb0QsSUFHMURDLEVBQ0wsSUFBTUYsSUFBU25ELEdBSWQsR0FEQXJ4QixFQUFNdzBCLEVBQU16eEIsTUFBTyxLQUNkL0MsRUFBSyxLQUFReTBCLElBR2pCQyxFQUFPckQsRUFBWW5PLEVBQU8sSUFBTWxqQixFQUFLLEtBQ3BDcXhCLEVBQVksS0FBT3J4QixFQUFLLEtBQ2IsQ0FFTjAwQixLQUFTLEVBQ2JBLEVBQU9yRCxFQUFZbUQsR0FHUm5ELEVBQVltRCxNQUFZLElBQ25DQyxFQUFVejBCLEVBQUssR0FDZjR2QixFQUFVcmtCLFFBQVN2TCxFQUFLLElBRXpCLE9BT0osR0FBSzAwQixLQUFTLEVBR2IsR0FBS0EsR0FBUTVHLEVBQUcsVUFDZjBDLEVBQVdrRSxFQUFNbEUsT0FFakIsS0FDQ0EsRUFBV2tFLEVBQU1sRSxHQUNoQixNQUFRMXhCLEdBQ1QsT0FBU2lXLE1BQU8sY0FBZS9WLE1BQU8wMUIsRUFBTzUxQixFQUFJLHNCQUF3Qm9rQixFQUFPLE9BQVN1UixJQVEvRixPQUFTMWYsTUFBTyxVQUFXNVYsS0FBTXF4QixHQUdsQzk0QixFQUFPZzZCLFdBQ04vWSxTQUNDcFksT0FBUSw2RkFFVDBpQixVQUNDMWlCLE9BQVEsdUJBRVQ4d0IsWUFDQ3VELGNBQWUsU0FBVWwwQixHQUV4QixNQURBaEosR0FBTzJJLFdBQVlLLEdBQ1pBLE1BTVZoSixFQUFPazZCLGNBQWUsU0FBVSxTQUFVOUQsR0FDcENBLEVBQUUxbEIsUUFBVW5SLFlBQ2hCNjJCLEVBQUUxbEIsT0FBUSxHQUVOMGxCLEVBQUV3RixjQUNOeEYsRUFBRXh2QixLQUFPLFNBS1g1RyxFQUFPbTZCLGNBQWUsU0FBVSxTQUFVL0QsR0FFekMsR0FBS0EsRUFBRXdGLFlBQWMsQ0FDcEIsR0FBSS95QixHQUFRekUsQ0FDWixRQUNDNjNCLEtBQU0sU0FBVWp0QixFQUFHZ3FCLEdBQ2xCbndCLEVBQVM3SSxFQUFPLFlBQVl1aEIsTUFDM0JpUCxPQUFPLEVBQ1AyTSxRQUFTL0csRUFBRWdILGNBQ1g3M0IsSUFBSzZ3QixFQUFFL0YsTUFDTHRGLEdBQ0YsYUFDQTNtQixFQUFXLFNBQVVpNUIsR0FDcEJ4MEIsRUFBT2QsU0FDUDNELEVBQVcsS0FDTmk1QixHQUNKckUsRUFBdUIsVUFBYnFFLEVBQUl6MkIsS0FBbUIsSUFBTSxJQUFLeTJCLEVBQUl6MkIsUUFJbkRoSCxFQUFTcUosS0FBS0MsWUFBYUwsRUFBUSxLQUVwQzB5QixNQUFPLFdBQ0RuM0IsR0FDSkEsUUFNTCxJQUFJazVCLE9BQ0hDLEdBQVMsbUJBR1Z2OUIsR0FBT2c2QixXQUNOd0QsTUFBTyxXQUNQQyxjQUFlLFdBQ2QsR0FBSXI1QixHQUFXazVCLEdBQWFyd0IsT0FBV2pOLEVBQU84RixRQUFVLElBQVFveEIsSUFFaEUsT0FEQXYwQixNQUFNeUIsSUFBYSxFQUNaQSxLQUtUcEUsRUFBT2s2QixjQUFlLGFBQWMsU0FBVTlELEVBQUdzSCxFQUFrQnJGLEdBRWxFLEdBQUlzRixHQUFjQyxFQUFhQyxFQUM5QkMsRUFBVzFILEVBQUVvSCxTQUFVLElBQVdELEdBQU9uNkIsS0FBTWd6QixFQUFFL0YsS0FDaEQsTUFDa0IsZ0JBQVgrRixHQUFFM3VCLFFBQXdCMnVCLEVBQUVtRCxhQUFlLElBQUsxNEIsUUFBUSxzQ0FBd0MwOEIsR0FBT242QixLQUFNZ3pCLEVBQUUzdUIsT0FBVSxPQUlsSSxPQUFLcTJCLElBQWlDLFVBQXJCMUgsRUFBRThCLFVBQVcsSUFHN0J5RixFQUFldkgsRUFBRXFILGNBQWdCejlCLEVBQU9zRCxXQUFZOHlCLEVBQUVxSCxlQUNyRHJILEVBQUVxSCxnQkFDRnJILEVBQUVxSCxjQUdFSyxFQUNKMUgsRUFBRzBILEdBQWExSCxFQUFHMEgsR0FBVzczQixRQUFTczNCLEdBQVEsS0FBT0ksR0FDM0N2SCxFQUFFb0gsU0FBVSxJQUN2QnBILEVBQUUvRixNQUFTOEcsR0FBWS96QixLQUFNZ3pCLEVBQUUvRixLQUFRLElBQU0sS0FBUStGLEVBQUVvSCxNQUFRLElBQU1HLEdBSXRFdkgsRUFBRXVELFdBQVcsZUFBaUIsV0FJN0IsTUFITWtFLElBQ0w3OUIsRUFBT3NILE1BQU9xMkIsRUFBZSxtQkFFdkJFLEVBQW1CLElBSTNCekgsRUFBRThCLFVBQVcsR0FBTSxPQUduQjBGLEVBQWN0K0IsRUFBUXErQixHQUN0QnIrQixFQUFRcStCLEdBQWlCLFdBQ3hCRSxFQUFvQnA1QixXQUlyQjR6QixFQUFNL2EsT0FBTyxXQUVaaGUsRUFBUXErQixHQUFpQkMsRUFHcEJ4SCxFQUFHdUgsS0FFUHZILEVBQUVxSCxjQUFnQkMsRUFBaUJELGNBR25DSCxHQUFhNzhCLEtBQU1rOUIsSUFJZkUsR0FBcUI3OUIsRUFBT3NELFdBQVlzNkIsSUFDNUNBLEVBQWFDLEVBQW1CLElBR2pDQSxFQUFvQkQsRUFBY3IrQixZQUk1QixVQXREUixZQXlERFMsRUFBT3MyQixhQUFheUgsSUFBTSxXQUN6QixJQUNDLE1BQU8sSUFBSUMsZ0JBQ1YsTUFBTzUyQixLQUdWLElBQUk2MkIsSUFBZWorQixFQUFPczJCLGFBQWF5SCxNQUN0Q0csSUFFQyxFQUFHLElBR0hDLEtBQU0sS0FLUEMsR0FBUSxFQUNSQyxLQUVJLytCLEdBQU9nL0IsZUFDWHQrQixFQUFRVixHQUFTeXJCLEdBQUksU0FBVSxXQUM5QixJQUFLLEdBQUl4Z0IsS0FBTzh6QixJQUNmQSxHQUFjOXpCLElBRWY4ekIsSUFBZTkrQixZQUlqQlMsRUFBT3NMLFFBQVFpekIsT0FBU04sSUFBa0IsbUJBQXFCQSxJQUMvRGorQixFQUFPc0wsUUFBUWdsQixLQUFPMk4sS0FBaUJBLEdBRXZDaitCLEVBQU9tNkIsY0FBYyxTQUFVOTBCLEdBQzlCLEdBQUlqQixFQUVKLE9BQUtwRSxHQUFPc0wsUUFBUWl6QixNQUFRTixLQUFpQjU0QixFQUFRdTJCLGFBRW5ESyxLQUFNLFNBQVVGLEVBQVMvQyxHQUN4QixHQUFJbjBCLEdBQUdnTCxFQUNOa3VCLEVBQU0xNEIsRUFBUTA0QixLQUdmLElBRkFBLEVBQUlTLEtBQU1uNUIsRUFBUXVCLEtBQU12QixFQUFRZ3JCLElBQUtockIsRUFBUW1yQixNQUFPbnJCLEVBQVFvNUIsU0FBVXA1QixFQUFRNlMsVUFFekU3UyxFQUFRcTVCLFVBQ1osSUFBTTc1QixJQUFLUSxHQUFRcTVCLFVBQ2xCWCxFQUFLbDVCLEdBQU1RLEVBQVFxNUIsVUFBVzc1QixFQUkzQlEsR0FBUWkyQixVQUFZeUMsRUFBSTFDLGtCQUM1QjBDLEVBQUkxQyxpQkFBa0JoMkIsRUFBUWkyQixVQU96QmoyQixFQUFRdTJCLGFBQWdCRyxFQUFRLHNCQUNyQ0EsRUFBUSxvQkFBc0IsaUJBRy9CLEtBQU1sM0IsSUFBS2szQixHQUNWZ0MsRUFBSTVDLGlCQUFrQnQyQixFQUFHazNCLEVBQVNsM0IsR0FHbkNULEdBQVcsU0FBVXdDLEdBQ3BCLE1BQU8sWUFDRHhDLFVBQ0dpNkIsSUFBY3h1QixHQUNyQnpMLEVBQVcyNUIsRUFBSVksT0FBU1osRUFBSWEsUUFBVSxLQUN4QixVQUFUaDRCLEVBQ0ptM0IsRUFBSXhDLFFBQ2dCLFVBQVQzMEIsRUFDWG95QixFQUVDK0UsRUFBSTlFLFFBQVUsSUFDZDhFLEVBQUl2QyxZQUdMeEMsRUFDQ2tGLEdBQWtCSCxFQUFJOUUsU0FBWThFLEVBQUk5RSxPQUN0QzhFLEVBQUl2QyxXQUl3QixnQkFBckJ1QyxHQUFJaEYsY0FDVi92QixLQUFNKzBCLEVBQUloRixjQUNQeDVCLFVBQ0p3K0IsRUFBSTdDLDRCQU9UNkMsRUFBSVksT0FBU3Y2QixJQUNiMjVCLEVBQUlhLFFBQVV4NkIsRUFBUyxTQUV2QkEsRUFBV2k2QixHQUFleHVCLEVBQUt1dUIsTUFBYWg2QixFQUFTLFNBSXJEMjVCLEVBQUk5QixLQUFNNTJCLEVBQVF3MkIsWUFBY3gyQixFQUFRb0MsTUFBUSxPQUVqRDh6QixNQUFPLFdBQ0RuM0IsR0FDSkEsTUF0RUosV0E0RUQsSUFBSXk2QixJQUFPQyxHQUNWQyxHQUFXLHlCQUNYQyxHQUFhdHhCLE9BQVEsaUJBQW1CbE0sRUFBWSxjQUFlLEtBQ25FeTlCLEdBQU8sY0FDUEMsSUFBd0JDLElBQ3hCQyxJQUNDNUYsS0FBTSxTQUFValksRUFBTS9YLEdBQ3JCLEdBQUk2MUIsR0FBUTE4QixLQUFLMjhCLFlBQWEvZCxFQUFNL1gsR0FDbkM3RCxFQUFTMDVCLEVBQU1odUIsTUFDZnFrQixFQUFRc0osR0FBT2w4QixLQUFNMEcsR0FDckIrMUIsRUFBTzdKLEdBQVNBLEVBQU8sS0FBUzExQixFQUFPd3pCLFVBQVdqUyxHQUFTLEdBQUssTUFHaEV6TCxHQUFVOVYsRUFBT3d6QixVQUFXalMsSUFBbUIsT0FBVGdlLElBQWtCNTVCLElBQ3ZEcTVCLEdBQU9sOEIsS0FBTTlDLEVBQU80eUIsSUFBS3lNLEVBQU0zOEIsS0FBTTZlLElBQ3RDaWUsRUFBUSxFQUNSQyxFQUFnQixFQUVqQixJQUFLM3BCLEdBQVNBLEVBQU8sS0FBUXlwQixFQUFPLENBRW5DQSxFQUFPQSxHQUFRenBCLEVBQU8sR0FHdEI0ZixFQUFRQSxNQUdSNWYsR0FBU25RLEdBQVUsQ0FFbkIsR0FHQzY1QixHQUFRQSxHQUFTLEtBR2pCMXBCLEdBQWdCMHBCLEVBQ2hCeC9CLEVBQU9nTCxNQUFPcTBCLEVBQU0zOEIsS0FBTTZlLEVBQU16TCxFQUFReXBCLFNBSS9CQyxLQUFXQSxFQUFRSCxFQUFNaHVCLE1BQVExTCxJQUFxQixJQUFWNjVCLEtBQWlCQyxHQWF4RSxNQVRLL0osS0FDSjVmLEVBQVF1cEIsRUFBTXZwQixPQUFTQSxJQUFVblEsR0FBVSxFQUMzQzA1QixFQUFNRSxLQUFPQSxFQUViRixFQUFNcDZCLElBQU15d0IsRUFBTyxHQUNsQjVmLEdBQVU0ZixFQUFPLEdBQU0sR0FBTUEsRUFBTyxJQUNuQ0EsRUFBTyxJQUdIMkosSUFLVixTQUFTSyxNQUlSLE1BSEF2MEIsWUFBVyxXQUNWMHpCLEdBQVF0L0IsWUFFQXMvQixHQUFRNytCLEVBQU80SyxNQUd6QixRQUFTMDBCLElBQWE5MUIsRUFBTytYLEVBQU1vZSxHQUNsQyxHQUFJTixHQUNITyxHQUFlUixHQUFVN2QsUUFBZWhoQixPQUFRNitCLEdBQVUsTUFDMURyaUIsRUFBUSxFQUNSbGEsRUFBUys4QixFQUFXLzhCLE1BQ3JCLE1BQWdCQSxFQUFSa2EsRUFBZ0JBLElBQ3ZCLEdBQU1zaUIsRUFBUU8sRUFBWTdpQixHQUFRblosS0FBTSs3QixFQUFXcGUsRUFBTS9YLEdBR3hELE1BQU82MUIsR0FLVixRQUFTUSxJQUFXbjlCLEVBQU1vOUIsRUFBWXo2QixHQUNyQyxHQUFJa1EsR0FDSHdxQixFQUNBaGpCLEVBQVEsRUFDUmxhLEVBQVNxOEIsR0FBb0JyOEIsT0FDN0IwYSxFQUFXdmQsRUFBT2lMLFdBQVdxUyxPQUFRLGlCQUU3QjBpQixHQUFLdDlCLE9BRWJzOUIsRUFBTyxXQUNOLEdBQUtELEVBQ0osT0FBTyxDQUVSLElBQUlFLEdBQWNwQixJQUFTYSxLQUMxQmxoQixFQUFZelksS0FBS3dlLElBQUssRUFBR29iLEVBQVVPLFVBQVlQLEVBQVVRLFNBQVdGLEdBRXBFdG1CLEVBQU82RSxFQUFZbWhCLEVBQVVRLFVBQVksRUFDekNDLEVBQVUsRUFBSXptQixFQUNkb0QsRUFBUSxFQUNSbGEsRUFBUzg4QixFQUFVVSxPQUFPeDlCLE1BRTNCLE1BQWdCQSxFQUFSa2EsRUFBaUJBLElBQ3hCNGlCLEVBQVVVLE9BQVF0akIsR0FBUXVqQixJQUFLRixFQUtoQyxPQUZBN2lCLEdBQVNxQixXQUFZbGMsR0FBUWk5QixFQUFXUyxFQUFTNWhCLElBRWxDLEVBQVY0aEIsR0FBZXY5QixFQUNaMmIsR0FFUGpCLEVBQVMvVyxZQUFhOUQsR0FBUWk5QixLQUN2QixJQUdUQSxFQUFZcGlCLEVBQVNqWixTQUNwQjVCLEtBQU1BLEVBQ05nbUIsTUFBTzFvQixFQUFPb0YsVUFBWTA2QixHQUMxQlMsS0FBTXZnQyxFQUFPb0YsUUFBUSxHQUFRbzdCLGtCQUFxQm43QixHQUNsRG83QixtQkFBb0JYLEVBQ3BCMUgsZ0JBQWlCL3lCLEVBQ2pCNjZCLFVBQVdyQixJQUFTYSxLQUNwQlMsU0FBVTk2QixFQUFRODZCLFNBQ2xCRSxVQUNBZixZQUFhLFNBQVUvZCxFQUFNdGMsR0FDNUIsR0FBSW82QixHQUFRci9CLEVBQU8wZ0MsTUFBT2grQixFQUFNaTlCLEVBQVVZLEtBQU1oZixFQUFNdGMsRUFDcEQwNkIsRUFBVVksS0FBS0MsY0FBZWpmLElBQVVvZSxFQUFVWSxLQUFLSSxPQUV6RCxPQURBaEIsR0FBVVUsT0FBTzUvQixLQUFNNCtCLEdBQ2hCQSxHQUVSN2MsS0FBTSxTQUFVb2UsR0FDZixHQUFJN2pCLEdBQVEsRUFHWGxhLEVBQVMrOUIsRUFBVWpCLEVBQVVVLE9BQU94OUIsT0FBUyxDQUM5QyxJQUFLazlCLEVBQ0osTUFBT3A5QixLQUdSLEtBREFvOUIsR0FBVSxFQUNNbDlCLEVBQVJrYSxFQUFpQkEsSUFDeEI0aUIsRUFBVVUsT0FBUXRqQixHQUFRdWpCLElBQUssRUFVaEMsT0FMS00sR0FDSnJqQixFQUFTL1csWUFBYTlELEdBQVFpOUIsRUFBV2lCLElBRXpDcmpCLEVBQVNpZixXQUFZOTVCLEdBQVFpOUIsRUFBV2lCLElBRWxDaitCLFFBR1QrbEIsRUFBUWlYLEVBQVVqWCxLQUluQixLQUZBbVksR0FBWW5ZLEVBQU9pWCxFQUFVWSxLQUFLQyxlQUVsQjM5QixFQUFSa2EsRUFBaUJBLElBRXhCLEdBREF4SCxFQUFTMnBCLEdBQXFCbmlCLEdBQVFuWixLQUFNKzdCLEVBQVdqOUIsRUFBTWdtQixFQUFPaVgsRUFBVVksTUFFN0UsTUFBT2hyQixFQW1CVCxPQWZBdlYsR0FBT2dGLElBQUswakIsRUFBTzRXLEdBQWFLLEdBRTNCMy9CLEVBQU9zRCxXQUFZcThCLEVBQVVZLEtBQUt6cUIsUUFDdEM2cEIsRUFBVVksS0FBS3pxQixNQUFNbFMsS0FBTWxCLEVBQU1pOUIsR0FHbEMzL0IsRUFBTzRpQixHQUFHa2UsTUFDVDlnQyxFQUFPb0YsT0FBUTQ2QixHQUNkdDlCLEtBQU1BLEVBQ05xK0IsS0FBTXBCLEVBQ056ZCxNQUFPeWQsRUFBVVksS0FBS3JlLFNBS2pCeWQsRUFBVTFoQixTQUFVMGhCLEVBQVVZLEtBQUt0aUIsVUFDeEMxWixLQUFNbzdCLEVBQVVZLEtBQUtoOEIsS0FBTW83QixFQUFVWSxLQUFLdkgsVUFDMUN4YixLQUFNbWlCLEVBQVVZLEtBQUsvaUIsTUFDckJGLE9BQVFxaUIsRUFBVVksS0FBS2pqQixRQUcxQixRQUFTdWpCLElBQVluWSxFQUFPOFgsR0FDM0IsR0FBSXpqQixHQUFPelgsRUFBTXE3QixFQUFRbjNCLEVBQU82WSxDQUdoQyxLQUFNdEYsSUFBUzJMLEdBZWQsR0FkQXBqQixFQUFPdEYsRUFBT29KLFVBQVcyVCxHQUN6QjRqQixFQUFTSCxFQUFlbDdCLEdBQ3hCa0UsRUFBUWtmLEVBQU8zTCxHQUNWL2MsRUFBTzZGLFFBQVMyRCxLQUNwQm0zQixFQUFTbjNCLEVBQU8sR0FDaEJBLEVBQVFrZixFQUFPM0wsR0FBVXZULEVBQU8sSUFHNUJ1VCxJQUFVelgsSUFDZG9qQixFQUFPcGpCLEdBQVNrRSxRQUNUa2YsR0FBTzNMLElBR2ZzRixFQUFRcmlCLEVBQU9xekIsU0FBVS90QixHQUNwQitjLEdBQVMsVUFBWUEsR0FBUSxDQUNqQzdZLEVBQVE2WSxFQUFNbVQsT0FBUWhzQixTQUNma2YsR0FBT3BqQixFQUlkLEtBQU15WCxJQUFTdlQsR0FDTnVULElBQVMyTCxLQUNoQkEsRUFBTzNMLEdBQVV2VCxFQUFPdVQsR0FDeEJ5akIsRUFBZXpqQixHQUFVNGpCLE9BSTNCSCxHQUFlbDdCLEdBQVNxN0IsRUFLM0IzZ0MsRUFBTzYvQixVQUFZNy9CLEVBQU9vRixPQUFReTZCLElBRWpDbUIsUUFBUyxTQUFVdFksRUFBT3RrQixHQUNwQnBFLEVBQU9zRCxXQUFZb2xCLElBQ3ZCdGtCLEVBQVdza0IsRUFDWEEsR0FBVSxNQUVWQSxFQUFRQSxFQUFNcmQsTUFBTSxJQUdyQixJQUFJa1csR0FDSHhFLEVBQVEsRUFDUmxhLEVBQVM2bEIsRUFBTTdsQixNQUVoQixNQUFnQkEsRUFBUmthLEVBQWlCQSxJQUN4QndFLEVBQU9tSCxFQUFPM0wsR0FDZHFpQixHQUFVN2QsR0FBUzZkLEdBQVU3ZCxPQUM3QjZkLEdBQVU3ZCxHQUFPMU4sUUFBU3pQLElBSTVCNjhCLFVBQVcsU0FBVTc4QixFQUFVaXFCLEdBQ3pCQSxFQUNKNlEsR0FBb0JyckIsUUFBU3pQLEdBRTdCODZCLEdBQW9CeitCLEtBQU0yRCxLQUs3QixTQUFTKzZCLElBQWtCejhCLEVBQU1nbUIsRUFBTzZYLEdBRXZDLEdBQUloZixHQUFNL1gsRUFBTzRwQixFQUFRaU0sRUFBT2hkLEVBQU82ZSxFQUN0Q0gsRUFBT3ArQixLQUNQZ29CLEtBQ0EzZixFQUFRdEksRUFBS3NJLE1BQ2Jnb0IsRUFBU3R3QixFQUFLUSxVQUFZd3ZCLEdBQVVod0IsR0FDcEN5K0IsRUFBV3hnQixFQUFVOWMsSUFBS25CLEVBQU0sU0FHM0I2OUIsR0FBS3JlLFFBQ1ZHLEVBQVFyaUIsRUFBT3NpQixZQUFhNWYsRUFBTSxNQUNYLE1BQWxCMmYsRUFBTStlLFdBQ1YvZSxFQUFNK2UsU0FBVyxFQUNqQkYsRUFBVTdlLEVBQU03SyxNQUFNa0YsS0FDdEIyRixFQUFNN0ssTUFBTWtGLEtBQU8sV0FDWjJGLEVBQU0rZSxVQUNYRixNQUlIN2UsRUFBTStlLFdBRU5MLEVBQUt6akIsT0FBTyxXQUdYeWpCLEVBQUt6akIsT0FBTyxXQUNYK0UsRUFBTStlLFdBQ0FwaEMsRUFBT2tpQixNQUFPeGYsRUFBTSxNQUFPRyxRQUNoQ3dmLEVBQU03SyxNQUFNa0YsWUFPTyxJQUFsQmhhLEVBQUtRLFdBQW9CLFVBQVl3bEIsSUFBUyxTQUFXQSxNQUs3RDZYLEVBQUtjLFVBQWFyMkIsRUFBTXEyQixTQUFVcjJCLEVBQU1zMkIsVUFBV3QyQixFQUFNdTJCLFdBSWxCLFdBQWxDdmhDLEVBQU80eUIsSUFBS2x3QixFQUFNLFlBQ1csU0FBaEMxQyxFQUFPNHlCLElBQUtsd0IsRUFBTSxXQUVuQnNJLEVBQU1pbkIsUUFBVSxpQkFJYnNPLEVBQUtjLFdBQ1RyMkIsRUFBTXEyQixTQUFXLFNBQ2pCTixFQUFLempCLE9BQU8sV0FDWHRTLEVBQU1xMkIsU0FBV2QsRUFBS2MsU0FBVSxHQUNoQ3IyQixFQUFNczJCLFVBQVlmLEVBQUtjLFNBQVUsR0FDakNyMkIsRUFBTXUyQixVQUFZaEIsRUFBS2MsU0FBVSxLQU1uQyxLQUFNOWYsSUFBUW1ILEdBRWIsR0FEQWxmLEVBQVFrZixFQUFPbkgsR0FDVndkLEdBQVNqOEIsS0FBTTBHLEdBQVUsQ0FHN0IsU0FGT2tmLEdBQU9uSCxHQUNkNlIsRUFBU0EsR0FBb0IsV0FBVjVwQixFQUNkQSxLQUFZd3BCLEVBQVMsT0FBUyxRQUFXLENBRzdDLEdBQWUsU0FBVnhwQixJQUFvQjIzQixHQUFZQSxFQUFVNWYsS0FBV2hpQixVQUd6RCxRQUZBeXpCLElBQVMsRUFLWHJJLEVBQU1wSixHQUFTNGYsR0FBWUEsRUFBVTVmLElBQVV2aEIsRUFBT2dMLE1BQU90SSxFQUFNNmUsR0FJckUsSUFBTXZoQixFQUFPcUgsY0FBZXNqQixHQUFTLENBQy9Cd1csRUFDQyxVQUFZQSxLQUNoQm5PLEVBQVNtTyxFQUFTbk8sUUFHbkJtTyxFQUFXeGdCLEVBQVVyVyxPQUFRNUgsRUFBTSxhQUkvQjB3QixJQUNKK04sRUFBU25PLFFBQVVBLEdBRWZBLEVBQ0poekIsRUFBUTBDLEdBQU9xd0IsT0FFZmdPLEVBQUt4OEIsS0FBSyxXQUNUdkUsRUFBUTBDLEdBQU95d0IsU0FHakI0TixFQUFLeDhCLEtBQUssV0FDVCxHQUFJZ2QsRUFFSlosR0FBVTVZLE9BQVFyRixFQUFNLFNBQ3hCLEtBQU02ZSxJQUFRb0osR0FDYjNxQixFQUFPZ0wsTUFBT3RJLEVBQU02ZSxFQUFNb0osRUFBTXBKLEtBR2xDLEtBQU1BLElBQVFvSixHQUNiMFUsRUFBUUMsR0FBYXRNLEVBQVNtTyxFQUFVNWYsR0FBUyxFQUFHQSxFQUFNd2YsR0FFbER4ZixJQUFRNGYsS0FDZkEsRUFBVTVmLEdBQVM4ZCxFQUFNdnBCLE1BQ3BCa2QsSUFDSnFNLEVBQU1wNkIsSUFBTW82QixFQUFNdnBCLE1BQ2xCdXBCLEVBQU12cEIsTUFBaUIsVUFBVHlMLEdBQTZCLFdBQVRBLEVBQW9CLEVBQUksS0FPL0QsUUFBU21mLElBQU9oK0IsRUFBTTJDLEVBQVNrYyxFQUFNdGMsRUFBSzA3QixHQUN6QyxNQUFPLElBQUlELElBQU1wK0IsVUFBVWYsS0FBTW1CLEVBQU0yQyxFQUFTa2MsRUFBTXRjLEVBQUswN0IsR0FFNUQzZ0MsRUFBTzBnQyxNQUFRQSxHQUVmQSxHQUFNcCtCLFdBQ0xFLFlBQWFrK0IsR0FDYm4vQixLQUFNLFNBQVVtQixFQUFNMkMsRUFBU2tjLEVBQU10YyxFQUFLMDdCLEVBQVFwQixHQUNqRDU4QixLQUFLRCxLQUFPQSxFQUNaQyxLQUFLNGUsS0FBT0EsRUFDWjVlLEtBQUtnK0IsT0FBU0EsR0FBVSxRQUN4QmgrQixLQUFLMEMsUUFBVUEsRUFDZjFDLEtBQUttVCxNQUFRblQsS0FBS2lJLElBQU1qSSxLQUFLME8sTUFDN0IxTyxLQUFLc0MsSUFBTUEsRUFDWHRDLEtBQUs0OEIsS0FBT0EsSUFBVXYvQixFQUFPd3pCLFVBQVdqUyxHQUFTLEdBQUssT0FFdkRsUSxJQUFLLFdBQ0osR0FBSWdSLEdBQVFxZSxHQUFNMWIsVUFBV3JpQixLQUFLNGUsS0FFbEMsT0FBT2MsSUFBU0EsRUFBTXhlLElBQ3JCd2UsRUFBTXhlLElBQUtsQixNQUNYKzlCLEdBQU0xYixVQUFVZ0QsU0FBU25rQixJQUFLbEIsT0FFaEMyOUIsSUFBSyxTQUFVRixHQUNkLEdBQUlvQixHQUNIbmYsRUFBUXFlLEdBQU0xYixVQUFXcmlCLEtBQUs0ZSxLQW9CL0IsT0FqQkM1ZSxNQUFLa3BCLElBQU0yVixFQURQNytCLEtBQUswQyxRQUFRODZCLFNBQ0VuZ0MsRUFBTzJnQyxPQUFRaCtCLEtBQUtnK0IsUUFDdENQLEVBQVN6OUIsS0FBSzBDLFFBQVE4NkIsU0FBV0MsRUFBUyxFQUFHLEVBQUd6OUIsS0FBSzBDLFFBQVE4NkIsVUFHM0NDLEVBRXBCejlCLEtBQUtpSSxLQUFRakksS0FBS3NDLElBQU10QyxLQUFLbVQsT0FBVTByQixFQUFRNytCLEtBQUttVCxNQUUvQ25ULEtBQUswQyxRQUFRbzhCLE1BQ2pCOStCLEtBQUswQyxRQUFRbzhCLEtBQUs3OUIsS0FBTWpCLEtBQUtELEtBQU1DLEtBQUtpSSxJQUFLakksTUFHekMwZixHQUFTQSxFQUFNZixJQUNuQmUsRUFBTWYsSUFBSzNlLE1BRVgrOUIsR0FBTTFiLFVBQVVnRCxTQUFTMUcsSUFBSzNlLE1BRXhCQSxPQUlUKzlCLEdBQU1wK0IsVUFBVWYsS0FBS2UsVUFBWW8rQixHQUFNcCtCLFVBRXZDbytCLEdBQU0xYixXQUNMZ0QsVUFDQ25rQixJQUFLLFNBQVV3N0IsR0FDZCxHQUFJOXBCLEVBRUosT0FBaUMsT0FBNUI4cEIsRUFBTTM4QixLQUFNMjhCLEVBQU05ZCxPQUNwQjhkLEVBQU0zOEIsS0FBS3NJLE9BQTJDLE1BQWxDcTBCLEVBQU0zOEIsS0FBS3NJLE1BQU9xMEIsRUFBTTlkLE9BUS9DaE0sRUFBU3ZWLEVBQU80eUIsSUFBS3lNLEVBQU0zOEIsS0FBTTI4QixFQUFNOWQsS0FBTSxJQUVyQ2hNLEdBQXFCLFNBQVhBLEVBQXdCQSxFQUFKLEdBVDlCOHBCLEVBQU0zOEIsS0FBTTI4QixFQUFNOWQsT0FXM0JELElBQUssU0FBVStkLEdBR1RyL0IsRUFBTzRpQixHQUFHNmUsS0FBTXBDLEVBQU05ZCxNQUMxQnZoQixFQUFPNGlCLEdBQUc2ZSxLQUFNcEMsRUFBTTlkLE1BQVE4ZCxHQUNuQkEsRUFBTTM4QixLQUFLc0ksUUFBZ0UsTUFBckRxMEIsRUFBTTM4QixLQUFLc0ksTUFBT2hMLEVBQU9nMEIsU0FBVXFMLEVBQU05ZCxRQUFvQnZoQixFQUFPcXpCLFNBQVVnTSxFQUFNOWQsT0FDckh2aEIsRUFBT2dMLE1BQU9xMEIsRUFBTTM4QixLQUFNMjhCLEVBQU05ZCxLQUFNOGQsRUFBTXowQixJQUFNeTBCLEVBQU1FLE1BRXhERixFQUFNMzhCLEtBQU0yOEIsRUFBTTlkLE1BQVM4ZCxFQUFNejBCLE9BU3JDODFCLEdBQU0xYixVQUFVeUUsVUFBWWlYLEdBQU0xYixVQUFVcUUsWUFDM0MvSCxJQUFLLFNBQVUrZCxHQUNUQSxFQUFNMzhCLEtBQUtRLFVBQVltOEIsRUFBTTM4QixLQUFLZSxhQUN0QzQ3QixFQUFNMzhCLEtBQU0yOEIsRUFBTTlkLE1BQVM4ZCxFQUFNejBCLE9BS3BDNUssRUFBT21FLE1BQU8sU0FBVSxPQUFRLFFBQVUsU0FBVVUsRUFBR1MsR0FDdEQsR0FBSW84QixHQUFRMWhDLEVBQU9zQixHQUFJZ0UsRUFDdkJ0RixHQUFPc0IsR0FBSWdFLEdBQVMsU0FBVXE4QixFQUFPaEIsRUFBUXY4QixHQUM1QyxNQUFnQixPQUFUdTlCLEdBQWtDLGlCQUFWQSxHQUM5QkQsRUFBTWw5QixNQUFPN0IsS0FBTThCLFdBQ25COUIsS0FBS2kvQixRQUFTQyxHQUFPdjhCLEdBQU0sR0FBUXE4QixFQUFPaEIsRUFBUXY4QixNQUlyRHBFLEVBQU9zQixHQUFHOEQsUUFDVDA4QixPQUFRLFNBQVVILEVBQU9JLEVBQUlwQixFQUFRdjhCLEdBR3BDLE1BQU96QixNQUFLK1AsT0FBUWdnQixJQUFXRSxJQUFLLFVBQVcsR0FBSUcsT0FHakQ5dEIsTUFBTTI4QixTQUFVdE8sUUFBU3lPLEdBQU1KLEVBQU9oQixFQUFRdjhCLElBRWpEdzlCLFFBQVMsU0FBVXJnQixFQUFNb2dCLEVBQU9oQixFQUFRdjhCLEdBQ3ZDLEdBQUlvVCxHQUFReFgsRUFBT3FILGNBQWVrYSxHQUNqQ3lnQixFQUFTaGlDLEVBQU8yaEMsTUFBT0EsRUFBT2hCLEVBQVF2OEIsR0FDdEM2OUIsRUFBYyxXQUViLEdBQUlsQixHQUFPbEIsR0FBV2w5QixLQUFNM0MsRUFBT29GLFVBQVltYyxHQUFReWdCLElBR2xEeHFCLEdBQVNtSixFQUFVOWMsSUFBS2xCLEtBQU0sWUFDbENvK0IsRUFBS3ZlLE1BQU0sR0FLZCxPQUZDeWYsR0FBWUMsT0FBU0QsRUFFZnpxQixHQUFTd3FCLEVBQU85ZixTQUFVLEVBQ2hDdmYsS0FBS3dCLEtBQU04OUIsR0FDWHQvQixLQUFLdWYsTUFBTzhmLEVBQU85ZixNQUFPK2YsSUFFNUJ6ZixLQUFNLFNBQVU1YixFQUFNb2MsRUFBWTRkLEdBQ2pDLEdBQUl1QixHQUFZLFNBQVU5ZixHQUN6QixHQUFJRyxHQUFPSCxFQUFNRyxXQUNWSCxHQUFNRyxLQUNiQSxFQUFNb2UsR0FZUCxPQVRxQixnQkFBVGg2QixLQUNYZzZCLEVBQVU1ZCxFQUNWQSxFQUFhcGMsRUFDYkEsRUFBT3JILFdBRUh5akIsR0FBY3BjLEtBQVMsR0FDM0JqRSxLQUFLdWYsTUFBT3RiLEdBQVEsU0FHZGpFLEtBQUt3QixLQUFLLFdBQ2hCLEdBQUlnZSxJQUFVLEVBQ2JwRixFQUFnQixNQUFSblcsR0FBZ0JBLEVBQU8sYUFDL0J3N0IsRUFBU3BpQyxFQUFPb2lDLE9BQ2hCMzZCLEVBQU9rWixFQUFVOWMsSUFBS2xCLEtBRXZCLElBQUtvYSxFQUNDdFYsRUFBTXNWLElBQVd0VixFQUFNc1YsR0FBUXlGLE1BQ25DMmYsRUFBVzE2QixFQUFNc1YsUUFHbEIsS0FBTUEsSUFBU3RWLEdBQ1RBLEVBQU1zVixJQUFXdFYsRUFBTXNWLEdBQVF5RixNQUFReWMsR0FBSzc3QixLQUFNMlosSUFDdERvbEIsRUFBVzE2QixFQUFNc1YsR0FLcEIsS0FBTUEsRUFBUXFsQixFQUFPdi9CLE9BQVFrYSxLQUN2QnFsQixFQUFRcmxCLEdBQVFyYSxPQUFTQyxNQUFpQixNQUFSaUUsR0FBZ0J3N0IsRUFBUXJsQixHQUFRbUYsUUFBVXRiLElBQ2hGdzdCLEVBQVFybEIsR0FBUWdrQixLQUFLdmUsS0FBTW9lLEdBQzNCemUsR0FBVSxFQUNWaWdCLEVBQU9qOUIsT0FBUTRYLEVBQU8sS0FPbkJvRixJQUFZeWUsSUFDaEI1Z0MsRUFBT21pQixRQUFTeGYsS0FBTWlFLE1BSXpCczdCLE9BQVEsU0FBVXQ3QixHQUlqQixNQUhLQSxNQUFTLElBQ2JBLEVBQU9BLEdBQVEsTUFFVGpFLEtBQUt3QixLQUFLLFdBQ2hCLEdBQUk0WSxHQUNIdFYsRUFBT2taLEVBQVU5YyxJQUFLbEIsTUFDdEJ1ZixFQUFRemEsRUFBTWIsRUFBTyxTQUNyQnliLEVBQVE1YSxFQUFNYixFQUFPLGNBQ3JCdzdCLEVBQVNwaUMsRUFBT29pQyxPQUNoQnYvQixFQUFTcWYsRUFBUUEsRUFBTXJmLE9BQVMsQ0FhakMsS0FWQTRFLEVBQUt5NkIsUUFBUyxFQUdkbGlDLEVBQU9raUIsTUFBT3ZmLEtBQU1pRSxNQUVmeWIsR0FBU0EsRUFBTUcsTUFDbkJILEVBQU1HLEtBQUs1ZSxLQUFNakIsTUFBTSxHQUlsQm9hLEVBQVFxbEIsRUFBT3YvQixPQUFRa2EsS0FDdkJxbEIsRUFBUXJsQixHQUFRcmEsT0FBU0MsTUFBUXkvQixFQUFRcmxCLEdBQVFtRixRQUFVdGIsSUFDL0R3N0IsRUFBUXJsQixHQUFRZ2tCLEtBQUt2ZSxNQUFNLEdBQzNCNGYsRUFBT2o5QixPQUFRNFgsRUFBTyxHQUt4QixLQUFNQSxFQUFRLEVBQVdsYSxFQUFSa2EsRUFBZ0JBLElBQzNCbUYsRUFBT25GLElBQVdtRixFQUFPbkYsR0FBUW1sQixRQUNyQ2hnQixFQUFPbkYsR0FBUW1sQixPQUFPdCtCLEtBQU1qQixZQUt2QjhFLEdBQUt5NkIsV0FNZixTQUFTTCxJQUFPajdCLEVBQU15N0IsR0FDckIsR0FBSXZaLEdBQ0g3WCxHQUFVcXhCLE9BQVExN0IsR0FDbEIvQixFQUFJLENBS0wsS0FEQXc5QixFQUFlQSxFQUFjLEVBQUksRUFDdEIsRUFBSng5QixFQUFRQSxHQUFLLEVBQUl3OUIsRUFDdkJ2WixFQUFRdUosR0FBV3h0QixHQUNuQm9NLEVBQU8sU0FBVzZYLEdBQVU3WCxFQUFPLFVBQVk2WCxHQUFVbGlCLENBTzFELE9BSkt5N0IsS0FDSnB4QixFQUFNcWlCLFFBQVVyaUIsRUFBTXVQLE1BQVE1WixHQUd4QnFLLEVBSVJqUixFQUFPbUUsTUFDTm8rQixVQUFXVixHQUFNLFFBQ2pCVyxRQUFTWCxHQUFNLFFBQ2ZZLFlBQWFaLEdBQU0sVUFDbkJhLFFBQVVwUCxRQUFTLFFBQ25CcVAsU0FBV3JQLFFBQVMsUUFDcEJzUCxZQUFjdFAsUUFBUyxXQUNyQixTQUFVaHVCLEVBQU1vakIsR0FDbEIxb0IsRUFBT3NCLEdBQUlnRSxHQUFTLFNBQVVxOEIsRUFBT2hCLEVBQVF2OEIsR0FDNUMsTUFBT3pCLE1BQUtpL0IsUUFBU2xaLEVBQU9pWixFQUFPaEIsRUFBUXY4QixNQUk3Q3BFLEVBQU8yaEMsTUFBUSxTQUFVQSxFQUFPaEIsRUFBUXIvQixHQUN2QyxHQUFJMmQsR0FBTTBpQixHQUEwQixnQkFBVkEsR0FBcUIzaEMsRUFBT29GLFVBQVl1OEIsSUFDakUzSSxTQUFVMTNCLElBQU9BLEdBQU1xL0IsR0FDdEIzZ0MsRUFBT3NELFdBQVlxK0IsSUFBV0EsRUFDL0J4QixTQUFVd0IsRUFDVmhCLE9BQVFyL0IsR0FBTXEvQixHQUFVQSxJQUFXM2dDLEVBQU9zRCxXQUFZcTlCLElBQVlBLEVBd0JuRSxPQXJCQTFoQixHQUFJa2hCLFNBQVduZ0MsRUFBTzRpQixHQUFHbGMsSUFBTSxFQUE0QixnQkFBakJ1WSxHQUFJa2hCLFNBQXdCbGhCLEVBQUlraEIsU0FDekVsaEIsRUFBSWtoQixXQUFZbmdDLEdBQU80aUIsR0FBR0MsT0FBUzdpQixFQUFPNGlCLEdBQUdDLE9BQVE1RCxFQUFJa2hCLFVBQWFuZ0MsRUFBTzRpQixHQUFHQyxPQUFPbUYsVUFHdEUsTUFBYi9JLEVBQUlpRCxPQUFpQmpELEVBQUlpRCxTQUFVLEtBQ3ZDakQsRUFBSWlELE1BQVEsTUFJYmpELEVBQUlsVSxJQUFNa1UsRUFBSStaLFNBRWQvWixFQUFJK1osU0FBVyxXQUNUaDVCLEVBQU9zRCxXQUFZMmIsRUFBSWxVLE1BQzNCa1UsRUFBSWxVLElBQUluSCxLQUFNakIsTUFHVnNjLEVBQUlpRCxPQUNSbGlCLEVBQU9taUIsUUFBU3hmLEtBQU1zYyxFQUFJaUQsUUFJckJqRCxHQUdSamYsRUFBTzJnQyxRQUNOa0MsT0FBUSxTQUFVQyxHQUNqQixNQUFPQSxJQUVSQyxNQUFPLFNBQVVELEdBQ2hCLE1BQU8sR0FBTS84QixLQUFLaTlCLElBQUtGLEVBQUUvOEIsS0FBS2s5QixJQUFPLElBSXZDampDLEVBQU9vaUMsVUFDUHBpQyxFQUFPNGlCLEdBQUs4ZCxHQUFNcCtCLFVBQVVmLEtBQzVCdkIsRUFBTzRpQixHQUFHb2QsS0FBTyxXQUNoQixHQUFJYyxHQUNIc0IsRUFBU3BpQyxFQUFPb2lDLE9BQ2hCdjlCLEVBQUksQ0FJTCxLQUZBZzZCLEdBQVE3K0IsRUFBTzRLLE1BRUh3M0IsRUFBT3YvQixPQUFYZ0MsRUFBbUJBLElBQzFCaThCLEVBQVFzQixFQUFRdjlCLEdBRVZpOEIsS0FBV3NCLEVBQVF2OUIsS0FBUWk4QixHQUNoQ3NCLEVBQU9qOUIsT0FBUU4sSUFBSyxFQUloQnU5QixHQUFPdi9CLFFBQ1o3QyxFQUFPNGlCLEdBQUdKLE9BRVhxYyxHQUFRdC9CLFdBR1RTLEVBQU80aUIsR0FBR2tlLE1BQVEsU0FBVUEsR0FDdEJBLEtBQVc5Z0MsRUFBT29pQyxPQUFPM2hDLEtBQU1xZ0MsSUFDbkM5Z0MsRUFBTzRpQixHQUFHOU0sU0FJWjlWLEVBQU80aUIsR0FBR3NnQixTQUFXLEdBRXJCbGpDLEVBQU80aUIsR0FBRzlNLE1BQVEsV0FDWGdwQixLQUNMQSxHQUFVcUUsWUFBYW5qQyxFQUFPNGlCLEdBQUdvZCxLQUFNaGdDLEVBQU80aUIsR0FBR3NnQixZQUluRGxqQyxFQUFPNGlCLEdBQUdKLEtBQU8sV0FDaEI0Z0IsY0FBZXRFLElBQ2ZBLEdBQVUsTUFHWDkrQixFQUFPNGlCLEdBQUdDLFFBQ1R3Z0IsS0FBTSxJQUNOQyxLQUFNLElBRU50YixTQUFVLEtBSVhob0IsRUFBTzRpQixHQUFHNmUsUUFFTHpoQyxFQUFPOFQsTUFBUTlULEVBQU84VCxLQUFLd0UsVUFDL0J0WSxFQUFPOFQsS0FBS3dFLFFBQVFpckIsU0FBVyxTQUFVN2dDLEdBQ3hDLE1BQU8xQyxHQUFPZ0ssS0FBS2hLLEVBQU9vaUMsT0FBUSxTQUFVOWdDLEdBQzNDLE1BQU9vQixLQUFTcEIsRUFBR29CLE9BQ2pCRyxTQUdMN0MsRUFBT3NCLEdBQUdraUMsT0FBUyxTQUFVbitCLEdBQzVCLEdBQUtaLFVBQVU1QixPQUNkLE1BQU93QyxLQUFZOUYsVUFDbEJvRCxLQUNBQSxLQUFLd0IsS0FBSyxTQUFVVSxHQUNuQjdFLEVBQU93akMsT0FBT0MsVUFBVzlnQyxLQUFNMEMsRUFBU1IsSUFJM0MsSUFBSWhGLEdBQVM2akMsRUFDWmhoQyxFQUFPQyxLQUFNLEdBQ2JnaEMsR0FBUXh4QixJQUFLLEVBQUd5eEIsS0FBTSxHQUN0Qjd4QixFQUFNclAsR0FBUUEsRUFBS1MsYUFFcEIsSUFBTTRPLEVBT04sTUFIQWxTLEdBQVVrUyxFQUFJalMsZ0JBR1JFLEVBQU9tTSxTQUFVdE0sRUFBUzZDLFVBTXBCQSxHQUFLbWhDLHdCQUEwQm5rQyxJQUMxQ2lrQyxFQUFNamhDLEVBQUttaEMseUJBRVpILEVBQU1JLEdBQVcveEIsSUFFaEJJLElBQUt3eEIsRUFBSXh4QixJQUFNdXhCLEVBQUlLLFlBQWNsa0MsRUFBUTZwQixVQUN6Q2thLEtBQU1ELEVBQUlDLEtBQU9GLEVBQUlNLFlBQWNua0MsRUFBUXlwQixhQVhwQ3FhLEdBZVQzakMsRUFBT3dqQyxRQUVOQyxVQUFXLFNBQVUvZ0MsRUFBTTJDLEVBQVNSLEdBQ25DLEdBQUlvL0IsR0FBYUMsRUFBU0MsRUFBV0MsRUFBUUMsRUFBV0MsRUFBWUMsRUFDbkV4UyxFQUFXL3hCLEVBQU80eUIsSUFBS2x3QixFQUFNLFlBQzdCOGhDLEVBQVV4a0MsRUFBUTBDLEdBQ2xCZ21CLElBR2lCLFlBQWJxSixJQUNKcnZCLEVBQUtzSSxNQUFNK21CLFNBQVcsWUFHdkJzUyxFQUFZRyxFQUFRaEIsU0FDcEJXLEVBQVlua0MsRUFBTzR5QixJQUFLbHdCLEVBQU0sT0FDOUI0aEMsRUFBYXRrQyxFQUFPNHlCLElBQUtsd0IsRUFBTSxRQUMvQjZoQyxHQUFtQyxhQUFieFMsR0FBd0MsVUFBYkEsS0FBNEJvUyxFQUFZRyxHQUFhempDLFFBQVEsUUFBVSxHQUduSDBqQyxHQUNKTixFQUFjTyxFQUFRelMsV0FDdEJxUyxFQUFTSCxFQUFZOXhCLElBQ3JCK3hCLEVBQVVELEVBQVlMLE9BR3RCUSxFQUFTbjlCLFdBQVlrOUIsSUFBZSxFQUNwQ0QsRUFBVWo5QixXQUFZcTlCLElBQWdCLEdBR2xDdGtDLEVBQU9zRCxXQUFZK0IsS0FDdkJBLEVBQVVBLEVBQVF6QixLQUFNbEIsRUFBTW1DLEVBQUd3L0IsSUFHZCxNQUFmaC9CLEVBQVE4TSxNQUNadVcsRUFBTXZXLElBQVE5TSxFQUFROE0sSUFBTWt5QixFQUFVbHlCLElBQVFpeUIsR0FFMUIsTUFBaEIvK0IsRUFBUXUrQixPQUNabGIsRUFBTWtiLEtBQVN2K0IsRUFBUXUrQixLQUFPUyxFQUFVVCxLQUFTTSxHQUc3QyxTQUFXNytCLEdBQ2ZBLEVBQVFvL0IsTUFBTTdnQyxLQUFNbEIsRUFBTWdtQixHQUcxQjhiLEVBQVE1UixJQUFLbEssS0FNaEIxb0IsRUFBT3NCLEdBQUc4RCxRQUVUMnNCLFNBQVUsV0FDVCxHQUFNcHZCLEtBQU0sR0FBWixDQUlBLEdBQUkraEMsR0FBY2xCLEVBQ2pCOWdDLEVBQU9DLEtBQU0sR0FDYmdpQyxHQUFpQnh5QixJQUFLLEVBQUd5eEIsS0FBTSxFQXVCaEMsT0FwQndDLFVBQW5DNWpDLEVBQU80eUIsSUFBS2x3QixFQUFNLFlBRXRCOGdDLEVBQVM5Z0MsRUFBS21oQyx5QkFJZGEsRUFBZS9oQyxLQUFLK2hDLGVBR3BCbEIsRUFBUzdnQyxLQUFLNmdDLFNBQ1J4akMsRUFBT3NKLFNBQVVvN0IsRUFBYyxHQUFLLFVBQ3pDQyxFQUFlRCxFQUFhbEIsVUFJN0JtQixFQUFheHlCLEtBQU9uUyxFQUFPNHlCLElBQUs4UixFQUFjLEdBQUssa0JBQWtCLEdBQ3JFQyxFQUFhZixNQUFRNWpDLEVBQU80eUIsSUFBSzhSLEVBQWMsR0FBSyxtQkFBbUIsS0FLdkV2eUIsSUFBS3F4QixFQUFPcnhCLElBQU13eUIsRUFBYXh5QixJQUFNblMsRUFBTzR5QixJQUFLbHdCLEVBQU0sYUFBYSxHQUNwRWtoQyxLQUFNSixFQUFPSSxLQUFPZSxFQUFhZixLQUFPNWpDLEVBQU80eUIsSUFBS2x3QixFQUFNLGNBQWMsTUFJMUVnaUMsYUFBYyxXQUNiLE1BQU8vaEMsTUFBS3FDLElBQUksV0FDZixHQUFJMC9CLEdBQWUvaEMsS0FBSytoQyxjQUFnQjdrQyxDQUV4QyxPQUFRNmtDLElBQW1CMWtDLEVBQU9zSixTQUFVbzdCLEVBQWMsU0FBc0QsV0FBMUMxa0MsRUFBTzR5QixJQUFLOFIsRUFBYyxZQUMvRkEsRUFBZUEsRUFBYUEsWUFHN0IsT0FBT0EsSUFBZ0I3a0MsT0FPMUJHLEVBQU9tRSxNQUFPa2xCLFdBQVksY0FBZUksVUFBVyxlQUFnQixTQUFVa1MsRUFBUXBhLEdBQ3JGLEdBQUlwUCxHQUFNLGdCQUFrQm9QLENBRTVCdmhCLEdBQU9zQixHQUFJcTZCLEdBQVcsU0FBVTNuQixHQUMvQixNQUFPaFUsR0FBT3NLLE9BQVEzSCxLQUFNLFNBQVVELEVBQU1pNUIsRUFBUTNuQixHQUNuRCxHQUFJMHZCLEdBQU1JLEdBQVdwaEMsRUFFckIsT0FBS3NSLEtBQVF6VSxVQUNMbWtDLEVBQU1BLEVBQUtuaUIsR0FBUzdlLEVBQU1pNUIsSUFHN0IrSCxFQUNKQSxFQUFJa0IsU0FDRnp5QixFQUFZN1MsRUFBTzBrQyxZQUFiaHdCLEVBQ1A3QixFQUFNNkIsRUFBTTFVLEVBQU95a0MsYUFJcEJyaEMsRUFBTWk1QixHQUFXM25CLEVBUGxCLFlBU0UybkIsRUFBUTNuQixFQUFLdlAsVUFBVTVCLE9BQVEsUUFJcEMsU0FBU2loQyxJQUFXcGhDLEdBQ25CLE1BQU8xQyxHQUFPOEcsU0FBVXBFLEdBQVNBLEVBQXlCLElBQWxCQSxFQUFLUSxVQUFrQlIsRUFBS3VQLFlBR3JFalMsRUFBT21FLE1BQVEwZ0MsT0FBUSxTQUFVQyxNQUFPLFNBQVcsU0FBVXgvQixFQUFNc0IsR0FDbEU1RyxFQUFPbUUsTUFBUWl4QixRQUFTLFFBQVU5dkIsRUFBTW9yQixRQUFTOXBCLEVBQU0sR0FBSSxRQUFVdEIsR0FBUSxTQUFVeS9CLEVBQWNDLEdBRXBHaGxDLEVBQU9zQixHQUFJMGpDLEdBQWEsU0FBVTdQLEVBQVEzckIsR0FDekMsR0FBSWdCLEdBQVkvRixVQUFVNUIsU0FBWWtpQyxHQUFrQyxpQkFBWDVQLElBQzVEakIsRUFBUTZRLElBQWtCNVAsS0FBVyxHQUFRM3JCLEtBQVUsRUFBTyxTQUFXLFNBRTFFLE9BQU94SixHQUFPc0ssT0FBUTNILEtBQU0sU0FBVUQsRUFBTWtFLEVBQU00QyxHQUNqRCxHQUFJdUksRUFFSixPQUFLL1IsR0FBTzhHLFNBQVVwRSxHQUlkQSxFQUFLOUMsU0FBU0UsZ0JBQWlCLFNBQVd3RixHQUkzQixJQUFsQjVDLEVBQUtRLFVBQ1Q2TyxFQUFNclAsRUFBSzVDLGdCQUlKaUcsS0FBS3dlLElBQ1g3aEIsRUFBS3dkLEtBQU0sU0FBVzVhLEdBQVF5TSxFQUFLLFNBQVd6TSxHQUM5QzVDLEVBQUt3ZCxLQUFNLFNBQVc1YSxHQUFReU0sRUFBSyxTQUFXek0sR0FDOUN5TSxFQUFLLFNBQVd6TSxLQUlYa0UsSUFBVWpLLFVBRWhCUyxFQUFPNHlCLElBQUtsd0IsRUFBTWtFLEVBQU1zdEIsR0FHeEJsMEIsRUFBT2dMLE1BQU90SSxFQUFNa0UsRUFBTTRDLEVBQU8wcUIsSUFDaEN0dEIsRUFBTTRELEVBQVkycUIsRUFBUzUxQixVQUFXaUwsRUFBVyxXQVF2RHhLLEVBQU9zQixHQUFHMmpDLEtBQU8sV0FDaEIsTUFBT3RpQyxNQUFLRSxRQUdiN0MsRUFBT3NCLEdBQUc0akMsUUFBVWxsQyxFQUFPc0IsR0FBR3lxQixRQUdQLGdCQUFYb1osU0FBdUJBLFFBQW9DLGdCQUFuQkEsUUFBT0MsUUFLMURELE9BQU9DLFFBQVVwbEMsRUFTTSxrQkFBWHFsQyxTQUF5QkEsT0FBT0MsS0FDM0NELE9BQVEsWUFBYyxXQUFjLE1BQU9ybEMsS0FNdEIsZ0JBQVhWLElBQWtELGdCQUFwQkEsR0FBT00sV0FDaEROLEVBQU9VLE9BQVNWLEVBQU9ZLEVBQUlGLEtBR3hCViJ9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanF1ZXJ5LXVpLm1pbi5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnktdWkubWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRlNjM5NmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanF1ZXJ5LXVpLm1pbi5qcwpAQCAtMCwwICsxLDcgQEAKKy8qISBqUXVlcnkgVUkgLSB2MS4xMS40IC0gMjAxNS0wMy0xNQorKiBodHRwOi8vanF1ZXJ5dWkuY29tCisqIEluY2x1ZGVzOiBjb3JlLmpzLCBkYXRlcGlja2VyLmpzCisqIENvcHlyaWdodCAyMDE1IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqLworCisoZnVuY3Rpb24oZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJqcXVlcnkiXSxlKTplKGpRdWVyeSl9KShmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQscyl7dmFyIGEsbixyLG89dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJhcmVhIj09PW8/KGE9dC5wYXJlbnROb2RlLG49YS5uYW1lLHQuaHJlZiYmbiYmIm1hcCI9PT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/KHI9ZSgiaW1nW3VzZW1hcD0nIyIrbisiJ10iKVswXSwhIXImJmkocikpOiExKTooL14oaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QpJC8udGVzdChvKT8hdC5kaXNhYmxlZDoiYSI9PT1vP3QuaHJlZnx8czpzKSYmaSh0KX1mdW5jdGlvbiBpKHQpe3JldHVybiBlLmV4cHIuZmlsdGVycy52aXNpYmxlKHQpJiYhZSh0KS5wYXJlbnRzKCkuYWRkQmFjaygpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiJoaWRkZW4iPT09ZS5jc3ModGhpcywidmlzaWJpbGl0eSIpfSkubGVuZ3RofWZ1bmN0aW9uIHMoZSl7Zm9yKHZhciB0LGk7ZS5sZW5ndGgmJmVbMF0hPT1kb2N1bWVudDspe2lmKHQ9ZS5jc3MoInBvc2l0aW9uIiksKCJhYnNvbHV0ZSI9PT10fHwicmVsYXRpdmUiPT09dHx8ImZpeGVkIj09PXQpJiYoaT1wYXJzZUludChlLmNzcygiekluZGV4IiksMTApLCFpc05hTihpKSYmMCE9PWkpKXJldHVybiBpO2U9ZS5wYXJlbnQoKX1yZXR1cm4gMH1mdW5jdGlvbiBhKCl7dGhpcy5fY3VySW5zdD1udWxsLHRoaXMuX2tleUV2ZW50PSExLHRoaXMuX2Rpc2FibGVkSW5wdXRzPVtdLHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nPSExLHRoaXMuX2luRGlhbG9nPSExLHRoaXMuX21haW5EaXZJZD0idWktZGF0ZXBpY2tlci1kaXYiLHRoaXMuX2lubGluZUNsYXNzPSJ1aS1kYXRlcGlja2VyLWlubGluZSIsdGhpcy5fYXBwZW5kQ2xhc3M9InVpLWRhdGVwaWNrZXItYXBwZW5kIix0aGlzLl90cmlnZ2VyQ2xhc3M9InVpLWRhdGVwaWNrZXItdHJpZ2dlciIsdGhpcy5fZGlhbG9nQ2xhc3M9InVpLWRhdGVwaWNrZXItZGlhbG9nIix0aGlzLl9kaXNhYmxlQ2xhc3M9InVpLWRhdGVwaWNrZXItZGlzYWJsZWQiLHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzPSJ1aS1kYXRlcGlja2VyLXVuc2VsZWN0YWJsZSIsdGhpcy5fY3VycmVudENsYXNzPSJ1aS1kYXRlcGlja2VyLWN1cnJlbnQtZGF5Iix0aGlzLl9kYXlPdmVyQ2xhc3M9InVpLWRhdGVwaWNrZXItZGF5cy1jZWxsLW92ZXIiLHRoaXMucmVnaW9uYWw9W10sdGhpcy5yZWdpb25hbFsiIl09e2Nsb3NlVGV4dDoiRG9uZSIscHJldlRleHQ6IlByZXYiLG5leHRUZXh0OiJOZXh0IixjdXJyZW50VGV4dDoiVG9kYXkiLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLHdlZWtIZWFkZXI6IldrIixkYXRlRm9ybWF0OiJtbS9kZC95eSIsZmlyc3REYXk6MCxpc1JUTDohMSxzaG93TW9udGhBZnRlclllYXI6ITEseWVhclN1ZmZpeDoiIn0sdGhpcy5fZGVmYXVsdHM9e3Nob3dPbjoiZm9jdXMiLHNob3dBbmltOiJmYWRlSW4iLHNob3dPcHRpb25zOnt9LGRlZmF1bHREYXRlOm51bGwsYXBwZW5kVGV4dDoiIixidXR0b25UZXh0OiIuLi4iLGJ1dHRvbkltYWdlOiIiLGJ1dHRvbkltYWdlT25seTohMSxoaWRlSWZOb1ByZXZOZXh0OiExLG5hdmlnYXRpb25Bc0RhdGVGb3JtYXQ6ITEsZ290b0N1cnJlbnQ6ITEsY2hhbmdlTW9udGg6ITEsY2hhbmdlWWVhcjohMSx5ZWFyUmFuZ2U6ImMtMTA6YysxMCIsc2hvd090aGVyTW9udGhzOiExLHNlbGVjdE90aGVyTW9udGhzOiExLHNob3dXZWVrOiExLGNhbGN1bGF0ZVdlZWs6dGhpcy5pc284NjAxV2VlayxzaG9ydFllYXJDdXRvZmY6IisxMCIsbWluRGF0ZTpudWxsLG1heERhdGU6bnVsbCxkdXJhdGlvbjoiZmFzdCIsYmVmb3JlU2hvd0RheTpudWxsLGJlZm9yZVNob3c6bnVsbCxvblNlbGVjdDpudWxsLG9uQ2hhbmdlTW9udGhZZWFyOm51bGwsb25DbG9zZTpudWxsLG51bWJlck9mTW9udGhzOjEsc2hvd0N1cnJlbnRBdFBvczowLHN0ZXBNb250aHM6MSxzdGVwQmlnTW9udGhzOjEyLGFsdEZpZWxkOiIiLGFsdEZvcm1hdDoiIixjb25zdHJhaW5JbnB1dDohMCxzaG93QnV0dG9uUGFuZWw6ITEsYXV0b1NpemU6ITEsZGlzYWJsZWQ6ITF9LGUuZXh0ZW5kKHRoaXMuX2RlZmF1bHRzLHRoaXMucmVnaW9uYWxbIiJdKSx0aGlzLnJlZ2lvbmFsLmVuPWUuZXh0ZW5kKCEwLHt9LHRoaXMucmVnaW9uYWxbIiJdKSx0aGlzLnJlZ2lvbmFsWyJlbi1VUyJdPWUuZXh0ZW5kKCEwLHt9LHRoaXMucmVnaW9uYWwuZW4pLHRoaXMuZHBEaXY9bihlKCI8ZGl2IGlkPSciK3RoaXMuX21haW5EaXZJZCsiJyBjbGFzcz0ndWktZGF0ZXBpY2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwnPjwvZGl2PiIpKX1mdW5jdGlvbiBuKHQpe3ZhciBpPSJidXR0b24sIC51aS1kYXRlcGlja2VyLXByZXYsIC51aS1kYXRlcGlja2VyLW5leHQsIC51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRkIGEiO3JldHVybiB0LmRlbGVnYXRlKGksIm1vdXNlb3V0IixmdW5jdGlvbigpe2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJ1aS1kYXRlcGlja2VyLXByZXYiKSYmZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJ1aS1kYXRlcGlja2VyLW5leHQiKSYmZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIil9KS5kZWxlZ2F0ZShpLCJtb3VzZW92ZXIiLHIpfWZ1bmN0aW9uIHIoKXtlLmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKGguaW5saW5lP2guZHBEaXYucGFyZW50KClbMF06aC5pbnB1dFswXSl8fChlKHRoaXMpLnBhcmVudHMoIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyIikuZmluZCgiYSIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLGUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWhvdmVyIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJ1aS1kYXRlcGlja2VyLXByZXYiKSYmZSh0aGlzKS5hZGRDbGFzcygidWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJ1aS1kYXRlcGlja2VyLW5leHQiKSYmZSh0aGlzKS5hZGRDbGFzcygidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIikpfWZ1bmN0aW9uIG8odCxpKXtlLmV4dGVuZCh0LGkpO2Zvcih2YXIgcyBpbiBpKW51bGw9PWlbc10mJih0W3NdPWlbc10pO3JldHVybiB0fWUudWk9ZS51aXx8e30sZS5leHRlbmQoZS51aSx7dmVyc2lvbjoiMS4xMS40IixrZXlDb2RlOntCQUNLU1BBQ0U6OCxDT01NQToxODgsREVMRVRFOjQ2LERPV046NDAsRU5EOjM1LEVOVEVSOjEzLEVTQ0FQRToyNyxIT01FOjM2LExFRlQ6MzcsUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEVSSU9EOjE5MCxSSUdIVDozOSxTUEFDRTozMixUQUI6OSxVUDozOH19KSxlLmZuLmV4dGVuZCh7c2Nyb2xsUGFyZW50OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuY3NzKCJwb3NpdGlvbiIpLHM9ImFic29sdXRlIj09PWksYT10Py8oYXV0b3xzY3JvbGx8aGlkZGVuKS86LyhhdXRvfHNjcm9sbCkvLG49dGhpcy5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm4gcyYmInN0YXRpYyI9PT10LmNzcygicG9zaXRpb24iKT8hMTphLnRlc3QodC5jc3MoIm92ZXJmbG93IikrdC5jc3MoIm92ZXJmbG93LXkiKSt0LmNzcygib3ZlcmZsb3cteCIpKX0pLmVxKDApO3JldHVybiJmaXhlZCIhPT1pJiZuLmxlbmd0aD9uOmUodGhpc1swXS5vd25lckRvY3VtZW50fHxkb2N1bWVudCl9LHVuaXF1ZUlkOmZ1bmN0aW9uKCl7dmFyIGU9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5pZHx8KHRoaXMuaWQ9InVpLWlkLSIrICsrZSl9KX19KCkscmVtb3ZlVW5pcXVlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7L151aS1pZC1cZCskLy50ZXN0KHRoaXMuaWQpJiZlKHRoaXMpLnJlbW92ZUF0dHIoImlkIil9KX19KSxlLmV4dGVuZChlLmV4cHJbIjoiXSx7ZGF0YTplLmV4cHIuY3JlYXRlUHNldWRvP2UuZXhwci5jcmVhdGVQc2V1ZG8oZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiEhZS5kYXRhKGksdCl9fSk6ZnVuY3Rpb24odCxpLHMpe3JldHVybiEhZS5kYXRhKHQsc1szXSl9LGZvY3VzYWJsZTpmdW5jdGlvbihpKXtyZXR1cm4gdChpLCFpc05hTihlLmF0dHIoaSwidGFiaW5kZXgiKSkpfSx0YWJiYWJsZTpmdW5jdGlvbihpKXt2YXIgcz1lLmF0dHIoaSwidGFiaW5kZXgiKSxhPWlzTmFOKHMpO3JldHVybihhfHxzPj0wKSYmdChpLCFhKX19KSxlKCI8YT4iKS5vdXRlcldpZHRoKDEpLmpxdWVyeXx8ZS5lYWNoKFsiV2lkdGgiLCJIZWlnaHQiXSxmdW5jdGlvbih0LGkpe2Z1bmN0aW9uIHModCxpLHMsbil7cmV0dXJuIGUuZWFjaChhLGZ1bmN0aW9uKCl7aS09cGFyc2VGbG9hdChlLmNzcyh0LCJwYWRkaW5nIit0aGlzKSl8fDAscyYmKGktPXBhcnNlRmxvYXQoZS5jc3ModCwiYm9yZGVyIit0aGlzKyJXaWR0aCIpKXx8MCksbiYmKGktPXBhcnNlRmxvYXQoZS5jc3ModCwibWFyZ2luIit0aGlzKSl8fDApfSksaX12YXIgYT0iV2lkdGgiPT09aT9bIkxlZnQiLCJSaWdodCJdOlsiVG9wIiwiQm90dG9tIl0sbj1pLnRvTG93ZXJDYXNlKCkscj17aW5uZXJXaWR0aDplLmZuLmlubmVyV2lkdGgsaW5uZXJIZWlnaHQ6ZS5mbi5pbm5lckhlaWdodCxvdXRlcldpZHRoOmUuZm4ub3V0ZXJXaWR0aCxvdXRlckhlaWdodDplLmZuLm91dGVySGVpZ2h0fTtlLmZuWyJpbm5lciIraV09ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/clsiaW5uZXIiK2ldLmNhbGwodGhpcyk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5jc3MobixzKHRoaXMsdCkrInB4Iil9KX0sZS5mblsib3V0ZXIiK2ldPWZ1bmN0aW9uKHQsYSl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0P3JbIm91dGVyIitpXS5jYWxsKHRoaXMsdCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5jc3MobixzKHRoaXMsdCwhMCxhKSsicHgiKX0pfX0pLGUuZm4uYWRkQmFja3x8KGUuZm4uYWRkQmFjaz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9KSxlKCI8YT4iKS5kYXRhKCJhLWIiLCJhIikucmVtb3ZlRGF0YSgiYS1iIikuZGF0YSgiYS1iIikmJihlLmZuLnJlbW92ZURhdGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QuY2FsbCh0aGlzLGUuY2FtZWxDYXNlKGkpKTp0LmNhbGwodGhpcyl9fShlLmZuLnJlbW92ZURhdGEpKSxlLnVpLmllPSEhL21zaWUgW1x3Ll0rLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSksZS5mbi5leHRlbmQoe2ZvY3VzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpLHMpe3JldHVybiJudW1iZXIiPT10eXBlb2YgaT90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtlKHQpLmZvY3VzKCkscyYmcy5jYWxsKHQpfSxpKX0pOnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oZS5mbi5mb2N1cyksZGlzYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3ZhciBlPSJvbnNlbGVjdHN0YXJ0ImluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpPyJzZWxlY3RzdGFydCI6Im1vdXNlZG93biI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmluZChlKyIudWktZGlzYWJsZVNlbGVjdGlvbiIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSl9fSgpLGVuYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuYmluZCgiLnVpLWRpc2FibGVTZWxlY3Rpb24iKX0sekluZGV4OmZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQpcmV0dXJuIHRoaXMuY3NzKCJ6SW5kZXgiLHQpO2lmKHRoaXMubGVuZ3RoKWZvcih2YXIgaSxzLGE9ZSh0aGlzWzBdKTthLmxlbmd0aCYmYVswXSE9PWRvY3VtZW50Oyl7aWYoaT1hLmNzcygicG9zaXRpb24iKSwoImFic29sdXRlIj09PWl8fCJyZWxhdGl2ZSI9PT1pfHwiZml4ZWQiPT09aSkmJihzPXBhcnNlSW50KGEuY3NzKCJ6SW5kZXgiKSwxMCksIWlzTmFOKHMpJiYwIT09cykpcmV0dXJuIHM7YT1hLnBhcmVudCgpfXJldHVybiAwfX0pLGUudWkucGx1Z2luPXthZGQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBhLG49ZS51aVt0XS5wcm90b3R5cGU7Zm9yKGEgaW4gcyluLnBsdWdpbnNbYV09bi5wbHVnaW5zW2FdfHxbXSxuLnBsdWdpbnNbYV0ucHVzaChbaSxzW2FdXSl9LGNhbGw6ZnVuY3Rpb24oZSx0LGkscyl7dmFyIGEsbj1lLnBsdWdpbnNbdF07aWYobiYmKHN8fGUuZWxlbWVudFswXS5wYXJlbnROb2RlJiYxMSE9PWUuZWxlbWVudFswXS5wYXJlbnROb2RlLm5vZGVUeXBlKSlmb3IoYT0wO24ubGVuZ3RoPmE7YSsrKWUub3B0aW9uc1tuW2FdWzBdXSYmblthXVsxXS5hcHBseShlLmVsZW1lbnQsaSl9fSxlLmV4dGVuZChlLnVpLHtkYXRlcGlja2VyOnt2ZXJzaW9uOiIxLjExLjQifX0pO3ZhciBoO2UuZXh0ZW5kKGEucHJvdG90eXBlLHttYXJrZXJDbGFzc05hbWU6Imhhc0RhdGVwaWNrZXIiLG1heFJvd3M6NCxfd2lkZ2V0RGF0ZXBpY2tlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRwRGl2fSxzZXREZWZhdWx0czpmdW5jdGlvbihlKXtyZXR1cm4gbyh0aGlzLl9kZWZhdWx0cyxlfHx7fSksdGhpc30sX2F0dGFjaERhdGVwaWNrZXI6ZnVuY3Rpb24odCxpKXt2YXIgcyxhLG47cz10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksYT0iZGl2Ij09PXN8fCJzcGFuIj09PXMsdC5pZHx8KHRoaXMudXVpZCs9MSx0LmlkPSJkcCIrdGhpcy51dWlkKSxuPXRoaXMuX25ld0luc3QoZSh0KSxhKSxuLnNldHRpbmdzPWUuZXh0ZW5kKHt9LGl8fHt9KSwiaW5wdXQiPT09cz90aGlzLl9jb25uZWN0RGF0ZXBpY2tlcih0LG4pOmEmJnRoaXMuX2lubGluZURhdGVwaWNrZXIodCxuKX0sX25ld0luc3Q6ZnVuY3Rpb24odCxpKXt2YXIgcz10WzBdLmlkLnJlcGxhY2UoLyhbXkEtWmEtejAtOV9cLV0pL2csIlxcXFwkMSIpO3JldHVybntpZDpzLGlucHV0OnQsc2VsZWN0ZWREYXk6MCxzZWxlY3RlZE1vbnRoOjAsc2VsZWN0ZWRZZWFyOjAsZHJhd01vbnRoOjAsZHJhd1llYXI6MCxpbmxpbmU6aSxkcERpdjppP24oZSgiPGRpdiBjbGFzcz0nIit0aGlzLl9pbmxpbmVDbGFzcysiIHVpLWRhdGVwaWNrZXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsJz48L2Rpdj4iKSk6dGhpcy5kcERpdn19LF9jb25uZWN0RGF0ZXBpY2tlcjpmdW5jdGlvbih0LGkpe3ZhciBzPWUodCk7aS5hcHBlbmQ9ZShbXSksaS50cmlnZ2VyPWUoW10pLHMuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpfHwodGhpcy5fYXR0YWNobWVudHMocyxpKSxzLmFkZENsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5rZXlkb3duKHRoaXMuX2RvS2V5RG93bikua2V5cHJlc3ModGhpcy5fZG9LZXlQcmVzcykua2V5dXAodGhpcy5fZG9LZXlVcCksdGhpcy5fYXV0b1NpemUoaSksZS5kYXRhKHQsImRhdGVwaWNrZXIiLGkpLGkuc2V0dGluZ3MuZGlzYWJsZWQmJnRoaXMuX2Rpc2FibGVEYXRlcGlja2VyKHQpKX0sX2F0dGFjaG1lbnRzOmZ1bmN0aW9uKHQsaSl7dmFyIHMsYSxuLHI9dGhpcy5fZ2V0KGksImFwcGVuZFRleHQiKSxvPXRoaXMuX2dldChpLCJpc1JUTCIpO2kuYXBwZW5kJiZpLmFwcGVuZC5yZW1vdmUoKSxyJiYoaS5hcHBlbmQ9ZSgiPHNwYW4gY2xhc3M9JyIrdGhpcy5fYXBwZW5kQ2xhc3MrIic+IityKyI8L3NwYW4+IiksdFtvPyJiZWZvcmUiOiJhZnRlciJdKGkuYXBwZW5kKSksdC51bmJpbmQoImZvY3VzIix0aGlzLl9zaG93RGF0ZXBpY2tlciksaS50cmlnZ2VyJiZpLnRyaWdnZXIucmVtb3ZlKCkscz10aGlzLl9nZXQoaSwic2hvd09uIiksKCJmb2N1cyI9PT1zfHwiYm90aCI9PT1zKSYmdC5mb2N1cyh0aGlzLl9zaG93RGF0ZXBpY2tlciksKCJidXR0b24iPT09c3x8ImJvdGgiPT09cykmJihhPXRoaXMuX2dldChpLCJidXR0b25UZXh0Iiksbj10aGlzLl9nZXQoaSwiYnV0dG9uSW1hZ2UiKSxpLnRyaWdnZXI9ZSh0aGlzLl9nZXQoaSwiYnV0dG9uSW1hZ2VPbmx5Iik/ZSgiPGltZy8+IikuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS5hdHRyKHtzcmM6bixhbHQ6YSx0aXRsZTphfSk6ZSgiPGJ1dHRvbiB0eXBlPSdidXR0b24nPjwvYnV0dG9uPiIpLmFkZENsYXNzKHRoaXMuX3RyaWdnZXJDbGFzcykuaHRtbChuP2UoIjxpbWcvPiIpLmF0dHIoe3NyYzpuLGFsdDphLHRpdGxlOmF9KTphKSksdFtvPyJiZWZvcmUiOiJhZnRlciJdKGkudHJpZ2dlciksaS50cmlnZ2VyLmNsaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJmUuZGF0ZXBpY2tlci5fbGFzdElucHV0PT09dFswXT9lLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk6ZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmZS5kYXRlcGlja2VyLl9sYXN0SW5wdXQhPT10WzBdPyhlLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksZS5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcih0WzBdKSk6ZS5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcih0WzBdKSwhMX0pKX0sX2F1dG9TaXplOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX2dldChlLCJhdXRvU2l6ZSIpJiYhZS5pbmxpbmUpe3ZhciB0LGkscyxhLG49bmV3IERhdGUoMjAwOSwxMSwyMCkscj10aGlzLl9nZXQoZSwiZGF0ZUZvcm1hdCIpO3IubWF0Y2goL1tETV0vKSYmKHQ9ZnVuY3Rpb24oZSl7Zm9yKGk9MCxzPTAsYT0wO2UubGVuZ3RoPmE7YSsrKWVbYV0ubGVuZ3RoPmkmJihpPWVbYV0ubGVuZ3RoLHM9YSk7cmV0dXJuIHN9LG4uc2V0TW9udGgodCh0aGlzLl9nZXQoZSxyLm1hdGNoKC9NTS8pPyJtb250aE5hbWVzIjoibW9udGhOYW1lc1Nob3J0IikpKSxuLnNldERhdGUodCh0aGlzLl9nZXQoZSxyLm1hdGNoKC9ERC8pPyJkYXlOYW1lcyI6ImRheU5hbWVzU2hvcnQiKSkrMjAtbi5nZXREYXkoKSkpLGUuaW5wdXQuYXR0cigic2l6ZSIsdGhpcy5fZm9ybWF0RGF0ZShlLG4pLmxlbmd0aCl9fSxfaW5saW5lRGF0ZXBpY2tlcjpmdW5jdGlvbih0LGkpe3ZhciBzPWUodCk7cy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSl8fChzLmFkZENsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5hcHBlbmQoaS5kcERpdiksZS5kYXRhKHQsImRhdGVwaWNrZXIiLGkpLHRoaXMuX3NldERhdGUoaSx0aGlzLl9nZXREZWZhdWx0RGF0ZShpKSwhMCksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihpKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUoaSksaS5zZXR0aW5ncy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIodCksaS5kcERpdi5jc3MoImRpc3BsYXkiLCJibG9jayIpKX0sX2RpYWxvZ0RhdGVwaWNrZXI6ZnVuY3Rpb24odCxpLHMsYSxuKXt2YXIgcixoLGwsdSxkLGM9dGhpcy5fZGlhbG9nSW5zdDtyZXR1cm4gY3x8KHRoaXMudXVpZCs9MSxyPSJkcCIrdGhpcy51dWlkLHRoaXMuX2RpYWxvZ0lucHV0PWUoIjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nIityKyInIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTEwMHB4OyB3aWR0aDogMHB4OycvPiIpLHRoaXMuX2RpYWxvZ0lucHV0LmtleWRvd24odGhpcy5fZG9LZXlEb3duKSxlKCJib2R5IikuYXBwZW5kKHRoaXMuX2RpYWxvZ0lucHV0KSxjPXRoaXMuX2RpYWxvZ0luc3Q9dGhpcy5fbmV3SW5zdCh0aGlzLl9kaWFsb2dJbnB1dCwhMSksYy5zZXR0aW5ncz17fSxlLmRhdGEodGhpcy5fZGlhbG9nSW5wdXRbMF0sImRhdGVwaWNrZXIiLGMpKSxvKGMuc2V0dGluZ3MsYXx8e30pLGk9aSYmaS5jb25zdHJ1Y3Rvcj09PURhdGU/dGhpcy5fZm9ybWF0RGF0ZShjLGkpOmksdGhpcy5fZGlhbG9nSW5wdXQudmFsKGkpLHRoaXMuX3Bvcz1uP24ubGVuZ3RoP246W24ucGFnZVgsbi5wYWdlWV06bnVsbCx0aGlzLl9wb3N8fChoPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxsPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsdT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0LGQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AsdGhpcy5fcG9zPVtoLzItMTAwK3UsbC8yLTE1MCtkXSksdGhpcy5fZGlhbG9nSW5wdXQuY3NzKCJsZWZ0Iix0aGlzLl9wb3NbMF0rMjArInB4IikuY3NzKCJ0b3AiLHRoaXMuX3Bvc1sxXSsicHgiKSxjLnNldHRpbmdzLm9uU2VsZWN0PXMsdGhpcy5faW5EaWFsb2c9ITAsdGhpcy5kcERpdi5hZGRDbGFzcyh0aGlzLl9kaWFsb2dDbGFzcyksdGhpcy5fc2hvd0RhdGVwaWNrZXIodGhpcy5fZGlhbG9nSW5wdXRbMF0pLGUuYmxvY2tVSSYmZS5ibG9ja1VJKHRoaXMuZHBEaXYpLGUuZGF0YSh0aGlzLl9kaWFsb2dJbnB1dFswXSwiZGF0ZXBpY2tlciIsYyksdGhpc30sX2Rlc3Ryb3lEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe3ZhciBpLHM9ZSh0KSxhPWUuZGF0YSh0LCJkYXRlcGlja2VyIik7cy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkmJihpPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxlLnJlbW92ZURhdGEodCwiZGF0ZXBpY2tlciIpLCJpbnB1dCI9PT1pPyhhLmFwcGVuZC5yZW1vdmUoKSxhLnRyaWdnZXIucmVtb3ZlKCkscy5yZW1vdmVDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkudW5iaW5kKCJmb2N1cyIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLnVuYmluZCgia2V5ZG93biIsdGhpcy5fZG9LZXlEb3duKS51bmJpbmQoImtleXByZXNzIix0aGlzLl9kb0tleVByZXNzKS51bmJpbmQoImtleXVwIix0aGlzLl9kb0tleVVwKSk6KCJkaXYiPT09aXx8InNwYW4iPT09aSkmJnMucmVtb3ZlQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmVtcHR5KCksaD09PWEmJihoPW51bGwpKX0sX2VuYWJsZURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dmFyIGkscyxhPWUodCksbj1lLmRhdGEodCwiZGF0ZXBpY2tlciIpO2EuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpJiYoaT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksImlucHV0Ij09PWk/KHQuZGlzYWJsZWQ9ITEsbi50cmlnZ2VyLmZpbHRlcigiYnV0dG9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9ITF9KS5lbmQoKS5maWx0ZXIoImltZyIpLmNzcyh7b3BhY2l0eToiMS4wIixjdXJzb3I6IiJ9KSk6KCJkaXYiPT09aXx8InNwYW4iPT09aSkmJihzPWEuY2hpbGRyZW4oIi4iK3RoaXMuX2lubGluZUNsYXNzKSxzLmNoaWxkcmVuKCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikscy5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciIpLnByb3AoImRpc2FibGVkIiwhMSkpLHRoaXMuX2Rpc2FibGVkSW5wdXRzPWUubWFwKHRoaXMuX2Rpc2FibGVkSW5wdXRzLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dD9udWxsOmV9KSl9LF9kaXNhYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbih0KXt2YXIgaSxzLGE9ZSh0KSxuPWUuZGF0YSh0LCJkYXRlcGlja2VyIik7YS5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkmJihpPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwiaW5wdXQiPT09aT8odC5kaXNhYmxlZD0hMCxuLnRyaWdnZXIuZmlsdGVyKCJidXR0b24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hMH0pLmVuZCgpLmZpbHRlcigiaW1nIikuY3NzKHtvcGFjaXR5OiIwLjUiLGN1cnNvcjoiZGVmYXVsdCJ9KSk6KCJkaXYiPT09aXx8InNwYW4iPT09aSkmJihzPWEuY2hpbGRyZW4oIi4iK3RoaXMuX2lubGluZUNsYXNzKSxzLmNoaWxkcmVuKCkuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikscy5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciIpLnByb3AoImRpc2FibGVkIiwhMCkpLHRoaXMuX2Rpc2FibGVkSW5wdXRzPWUubWFwKHRoaXMuX2Rpc2FibGVkSW5wdXRzLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dD9udWxsOmV9KSx0aGlzLl9kaXNhYmxlZElucHV0c1t0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGhdPXQpfSxfaXNEaXNhYmxlZERhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuITE7Zm9yKHZhciB0PTA7dGhpcy5fZGlzYWJsZWRJbnB1dHMubGVuZ3RoPnQ7dCsrKWlmKHRoaXMuX2Rpc2FibGVkSW5wdXRzW3RdPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sX2dldEluc3Q6ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBlLmRhdGEodCwiZGF0ZXBpY2tlciIpfWNhdGNoKGkpe3Rocm93Ik1pc3NpbmcgaW5zdGFuY2UgZGF0YSBmb3IgdGhpcyBkYXRlcGlja2VyIn19LF9vcHRpb25EYXRlcGlja2VyOmZ1bmN0aW9uKHQsaSxzKXt2YXIgYSxuLHIsaCxsPXRoaXMuX2dldEluc3QodCk7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIGk/ImRlZmF1bHRzIj09PWk/ZS5leHRlbmQoe30sZS5kYXRlcGlja2VyLl9kZWZhdWx0cyk6bD8iYWxsIj09PWk/ZS5leHRlbmQoe30sbC5zZXR0aW5ncyk6dGhpcy5fZ2V0KGwsaSk6bnVsbDooYT1pfHx7fSwic3RyaW5nIj09dHlwZW9mIGkmJihhPXt9LGFbaV09cyksbCYmKHRoaXMuX2N1ckluc3Q9PT1sJiZ0aGlzLl9oaWRlRGF0ZXBpY2tlcigpLG49dGhpcy5fZ2V0RGF0ZURhdGVwaWNrZXIodCwhMCkscj10aGlzLl9nZXRNaW5NYXhEYXRlKGwsIm1pbiIpLGg9dGhpcy5fZ2V0TWluTWF4RGF0ZShsLCJtYXgiKSxvKGwuc2V0dGluZ3MsYSksbnVsbCE9PXImJnZvaWQgMCE9PWEuZGF0ZUZvcm1hdCYmdm9pZCAwPT09YS5taW5EYXRlJiYobC5zZXR0aW5ncy5taW5EYXRlPXRoaXMuX2Zvcm1hdERhdGUobCxyKSksbnVsbCE9PWgmJnZvaWQgMCE9PWEuZGF0ZUZvcm1hdCYmdm9pZCAwPT09YS5tYXhEYXRlJiYobC5zZXR0aW5ncy5tYXhEYXRlPXRoaXMuX2Zvcm1hdERhdGUobCxoKSksImRpc2FibGVkImluIGEmJihhLmRpc2FibGVkP3RoaXMuX2Rpc2FibGVEYXRlcGlja2VyKHQpOnRoaXMuX2VuYWJsZURhdGVwaWNrZXIodCkpLHRoaXMuX2F0dGFjaG1lbnRzKGUodCksbCksdGhpcy5fYXV0b1NpemUobCksdGhpcy5fc2V0RGF0ZShsLG4pLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShsKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGwpKSx2b2lkIDApfSxfY2hhbmdlRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQsaSl7dGhpcy5fb3B0aW9uRGF0ZXBpY2tlcihlLHQsaSl9LF9yZWZyZXNoRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXRJbnN0KGUpO3QmJnRoaXMuX3VwZGF0ZURhdGVwaWNrZXIodCl9LF9zZXREYXRlRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuX2dldEluc3QoZSk7aSYmKHRoaXMuX3NldERhdGUoaSx0KSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGkpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShpKSl9LF9nZXREYXRlRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuX2dldEluc3QoZSk7cmV0dXJuIGkmJiFpLmlubGluZSYmdGhpcy5fc2V0RGF0ZUZyb21GaWVsZChpLHQpLGk/dGhpcy5fZ2V0RGF0ZShpKTpudWxsfSxfZG9LZXlEb3duOmZ1bmN0aW9uKHQpe3ZhciBpLHMsYSxuPWUuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0LnRhcmdldCkscj0hMCxvPW4uZHBEaXYuaXMoIi51aS1kYXRlcGlja2VyLXJ0bCIpO2lmKG4uX2tleUV2ZW50PSEwLGUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcpc3dpdGNoKHQua2V5Q29kZSl7Y2FzZSA5OmUuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSxyPSExO2JyZWFrO2Nhc2UgMTM6cmV0dXJuIGE9ZSgidGQuIitlLmRhdGVwaWNrZXIuX2RheU92ZXJDbGFzcysiOm5vdCguIitlLmRhdGVwaWNrZXIuX2N1cnJlbnRDbGFzcysiKSIsbi5kcERpdiksYVswXSYmZS5kYXRlcGlja2VyLl9zZWxlY3REYXkodC50YXJnZXQsbi5zZWxlY3RlZE1vbnRoLG4uc2VsZWN0ZWRZZWFyLGFbMF0pLGk9ZS5kYXRlcGlja2VyLl9nZXQobiwib25TZWxlY3QiKSxpPyhzPWUuZGF0ZXBpY2tlci5fZm9ybWF0RGF0ZShuKSxpLmFwcGx5KG4uaW5wdXQ/bi5pbnB1dFswXTpudWxsLFtzLG5dKSk6ZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLCExO2Nhc2UgMjc6ZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpO2JyZWFrO2Nhc2UgMzM6ZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LHQuY3RybEtleT8tZS5kYXRlcGlja2VyLl9nZXQobiwic3RlcEJpZ01vbnRocyIpOi1lLmRhdGVwaWNrZXIuX2dldChuLCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDM0OmUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCx0LmN0cmxLZXk/K2UuZGF0ZXBpY2tlci5fZ2V0KG4sInN0ZXBCaWdNb250aHMiKTorZS5kYXRlcGlja2VyLl9nZXQobiwic3RlcE1vbnRocyIpLCJNIik7YnJlYWs7Y2FzZSAzNToodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiZlLmRhdGVwaWNrZXIuX2NsZWFyRGF0ZSh0LnRhcmdldCkscj10LmN0cmxLZXl8fHQubWV0YUtleTticmVhaztjYXNlIDM2Oih0LmN0cmxLZXl8fHQubWV0YUtleSkmJmUuZGF0ZXBpY2tlci5fZ290b1RvZGF5KHQudGFyZ2V0KSxyPXQuY3RybEtleXx8dC5tZXRhS2V5O2JyZWFrO2Nhc2UgMzc6KHQuY3RybEtleXx8dC5tZXRhS2V5KSYmZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LG8/MTotMSwiRCIpLHI9dC5jdHJsS2V5fHx0Lm1ldGFLZXksdC5vcmlnaW5hbEV2ZW50LmFsdEtleSYmZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LHQuY3RybEtleT8tZS5kYXRlcGlja2VyLl9nZXQobiwic3RlcEJpZ01vbnRocyIpOi1lLmRhdGVwaWNrZXIuX2dldChuLCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDM4Oih0LmN0cmxLZXl8fHQubWV0YUtleSkmJmUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCwtNywiRCIpLHI9dC5jdHJsS2V5fHx0Lm1ldGFLZXk7YnJlYWs7Y2FzZSAzOToodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsbz8tMToxLCJEIikscj10LmN0cmxLZXl8fHQubWV0YUtleSx0Lm9yaWdpbmFsRXZlbnQuYWx0S2V5JiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsdC5jdHJsS2V5PytlLmRhdGVwaWNrZXIuX2dldChuLCJzdGVwQmlnTW9udGhzIik6K2UuZGF0ZXBpY2tlci5fZ2V0KG4sInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgNDA6KHQuY3RybEtleXx8dC5tZXRhS2V5KSYmZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LDcsIkQiKSxyPXQuY3RybEtleXx8dC5tZXRhS2V5O2JyZWFrO2RlZmF1bHQ6cj0hMX1lbHNlIDM2PT09dC5rZXlDb2RlJiZ0LmN0cmxLZXk/ZS5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcih0aGlzKTpyPSExO3ImJih0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSl9LF9kb0tleVByZXNzOmZ1bmN0aW9uKHQpe3ZhciBpLHMsYT1lLmRhdGVwaWNrZXIuX2dldEluc3QodC50YXJnZXQpO3JldHVybiBlLmRhdGVwaWNrZXIuX2dldChhLCJjb25zdHJhaW5JbnB1dCIpPyhpPWUuZGF0ZXBpY2tlci5fcG9zc2libGVDaGFycyhlLmRhdGVwaWNrZXIuX2dldChhLCJkYXRlRm9ybWF0IikpLHM9U3RyaW5nLmZyb21DaGFyQ29kZShudWxsPT10LmNoYXJDb2RlP3Qua2V5Q29kZTp0LmNoYXJDb2RlKSx0LmN0cmxLZXl8fHQubWV0YUtleXx8IiAiPnN8fCFpfHxpLmluZGV4T2Yocyk+LTEpOnZvaWQgMH0sX2RvS2V5VXA6ZnVuY3Rpb24odCl7dmFyIGkscz1lLmRhdGVwaWNrZXIuX2dldEluc3QodC50YXJnZXQpO2lmKHMuaW5wdXQudmFsKCkhPT1zLmxhc3RWYWwpdHJ5e2k9ZS5kYXRlcGlja2VyLnBhcnNlRGF0ZShlLmRhdGVwaWNrZXIuX2dldChzLCJkYXRlRm9ybWF0Iikscy5pbnB1dD9zLmlucHV0LnZhbCgpOm51bGwsZS5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcocykpLGkmJihlLmRhdGVwaWNrZXIuX3NldERhdGVGcm9tRmllbGQocyksZS5kYXRlcGlja2VyLl91cGRhdGVBbHRlcm5hdGUocyksZS5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKHMpKX1jYXRjaChhKXt9cmV0dXJuITB9LF9zaG93RGF0ZXBpY2tlcjpmdW5jdGlvbih0KXtpZih0PXQudGFyZ2V0fHx0LCJpbnB1dCIhPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJih0PWUoImlucHV0Iix0LnBhcmVudE5vZGUpWzBdKSwhZS5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcih0KSYmZS5kYXRlcGlja2VyLl9sYXN0SW5wdXQhPT10KXt2YXIgaSxhLG4scixoLGwsdTtpPWUuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0KSxlLmRhdGVwaWNrZXIuX2N1ckluc3QmJmUuZGF0ZXBpY2tlci5fY3VySW5zdCE9PWkmJihlLmRhdGVwaWNrZXIuX2N1ckluc3QuZHBEaXYuc3RvcCghMCwhMCksaSYmZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcihlLmRhdGVwaWNrZXIuX2N1ckluc3QuaW5wdXRbMF0pKSxhPWUuZGF0ZXBpY2tlci5fZ2V0KGksImJlZm9yZVNob3ciKSxuPWE/YS5hcHBseSh0LFt0LGldKTp7fSxuIT09ITEmJihvKGkuc2V0dGluZ3MsbiksaS5sYXN0VmFsPW51bGwsZS5kYXRlcGlja2VyLl9sYXN0SW5wdXQ9dCxlLmRhdGVwaWNrZXIuX3NldERhdGVGcm9tRmllbGQoaSksZS5kYXRlcGlja2VyLl9pbkRpYWxvZyYmKHQudmFsdWU9IiIpLGUuZGF0ZXBpY2tlci5fcG9zfHwoZS5kYXRlcGlja2VyLl9wb3M9ZS5kYXRlcGlja2VyLl9maW5kUG9zKHQpLGUuZGF0ZXBpY2tlci5fcG9zWzFdKz10Lm9mZnNldEhlaWdodCkscj0hMSxlKHQpLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIHJ8PSJmaXhlZCI9PT1lKHRoaXMpLmNzcygicG9zaXRpb24iKSwhcn0pLGg9e2xlZnQ6ZS5kYXRlcGlja2VyLl9wb3NbMF0sdG9wOmUuZGF0ZXBpY2tlci5fcG9zWzFdfSxlLmRhdGVwaWNrZXIuX3Bvcz1udWxsLGkuZHBEaXYuZW1wdHkoKSxpLmRwRGl2LmNzcyh7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJibG9jayIsdG9wOiItMTAwMHB4In0pLGUuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcihpKSxoPWUuZGF0ZXBpY2tlci5fY2hlY2tPZmZzZXQoaSxoLHIpLGkuZHBEaXYuY3NzKHtwb3NpdGlvbjplLmRhdGVwaWNrZXIuX2luRGlhbG9nJiZlLmJsb2NrVUk/InN0YXRpYyI6cj8iZml4ZWQiOiJhYnNvbHV0ZSIsZGlzcGxheToibm9uZSIsbGVmdDpoLmxlZnQrInB4Iix0b3A6aC50b3ArInB4In0pLGkuaW5saW5lfHwobD1lLmRhdGVwaWNrZXIuX2dldChpLCJzaG93QW5pbSIpLHU9ZS5kYXRlcGlja2VyLl9nZXQoaSwiZHVyYXRpb24iKSxpLmRwRGl2LmNzcygiei1pbmRleCIscyhlKHQpKSsxKSxlLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nPSEwLGUuZWZmZWN0cyYmZS5lZmZlY3RzLmVmZmVjdFtsXT9pLmRwRGl2LnNob3cobCxlLmRhdGVwaWNrZXIuX2dldChpLCJzaG93T3B0aW9ucyIpLHUpOmkuZHBEaXZbbHx8InNob3ciXShsP3U6bnVsbCksZS5kYXRlcGlja2VyLl9zaG91bGRGb2N1c0lucHV0KGkpJiZpLmlucHV0LmZvY3VzKCksZS5kYXRlcGlja2VyLl9jdXJJbnN0PWkpKX19LF91cGRhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe3RoaXMubWF4Um93cz00LGg9dCx0LmRwRGl2LmVtcHR5KCkuYXBwZW5kKHRoaXMuX2dlbmVyYXRlSFRNTCh0KSksdGhpcy5fYXR0YWNoSGFuZGxlcnModCk7dmFyIGkscz10aGlzLl9nZXROdW1iZXJPZk1vbnRocyh0KSxhPXNbMV0sbj0xNyxvPXQuZHBEaXYuZmluZCgiLiIrdGhpcy5fZGF5T3ZlckNsYXNzKyIgYSIpO28ubGVuZ3RoPjAmJnIuYXBwbHkoby5nZXQoMCkpLHQuZHBEaXYucmVtb3ZlQ2xhc3MoInVpLWRhdGVwaWNrZXItbXVsdGktMiB1aS1kYXRlcGlja2VyLW11bHRpLTMgdWktZGF0ZXBpY2tlci1tdWx0aS00Iikud2lkdGgoIiIpLGE+MSYmdC5kcERpdi5hZGRDbGFzcygidWktZGF0ZXBpY2tlci1tdWx0aS0iK2EpLmNzcygid2lkdGgiLG4qYSsiZW0iKSx0LmRwRGl2WygxIT09c1swXXx8MSE9PXNbMV0/ImFkZCI6InJlbW92ZSIpKyJDbGFzcyJdKCJ1aS1kYXRlcGlja2VyLW11bHRpIiksdC5kcERpdlsodGhpcy5fZ2V0KHQsImlzUlRMIik/ImFkZCI6InJlbW92ZSIpKyJDbGFzcyJdKCJ1aS1kYXRlcGlja2VyLXJ0bCIpLHQ9PT1lLmRhdGVwaWNrZXIuX2N1ckluc3QmJmUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJmUuZGF0ZXBpY2tlci5fc2hvdWxkRm9jdXNJbnB1dCh0KSYmdC5pbnB1dC5mb2N1cygpLHQueWVhcnNodG1sJiYoaT10LnllYXJzaHRtbCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aT09PXQueWVhcnNodG1sJiZ0LnllYXJzaHRtbCYmdC5kcERpdi5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyOmZpcnN0IikucmVwbGFjZVdpdGgodC55ZWFyc2h0bWwpLGk9dC55ZWFyc2h0bWw9bnVsbH0sMCkpfSxfc2hvdWxkRm9jdXNJbnB1dDpmdW5jdGlvbihlKXtyZXR1cm4gZS5pbnB1dCYmZS5pbnB1dC5pcygiOnZpc2libGUiKSYmIWUuaW5wdXQuaXMoIjpkaXNhYmxlZCIpJiYhZS5pbnB1dC5pcygiOmZvY3VzIil9LF9jaGVja09mZnNldDpmdW5jdGlvbih0LGkscyl7dmFyIGE9dC5kcERpdi5vdXRlcldpZHRoKCksbj10LmRwRGl2Lm91dGVySGVpZ2h0KCkscj10LmlucHV0P3QuaW5wdXQub3V0ZXJXaWR0aCgpOjAsbz10LmlucHV0P3QuaW5wdXQub3V0ZXJIZWlnaHQoKTowLGg9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKyhzPzA6ZShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKSxsPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQrKHM/MDplKGRvY3VtZW50KS5zY3JvbGxUb3AoKSk7cmV0dXJuIGkubGVmdC09dGhpcy5fZ2V0KHQsImlzUlRMIik/YS1yOjAsaS5sZWZ0LT1zJiZpLmxlZnQ9PT10LmlucHV0Lm9mZnNldCgpLmxlZnQ/ZShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpOjAsaS50b3AtPXMmJmkudG9wPT09dC5pbnB1dC5vZmZzZXQoKS50b3Arbz9lKGRvY3VtZW50KS5zY3JvbGxUb3AoKTowLGkubGVmdC09TWF0aC5taW4oaS5sZWZ0LGkubGVmdCthPmgmJmg+YT9NYXRoLmFicyhpLmxlZnQrYS1oKTowKSxpLnRvcC09TWF0aC5taW4oaS50b3AsaS50b3Arbj5sJiZsPm4/TWF0aC5hYnMobitvKTowKSxpfSxfZmluZFBvczpmdW5jdGlvbih0KXtmb3IodmFyIGkscz10aGlzLl9nZXRJbnN0KHQpLGE9dGhpcy5fZ2V0KHMsImlzUlRMIik7dCYmKCJoaWRkZW4iPT09dC50eXBlfHwxIT09dC5ub2RlVHlwZXx8ZS5leHByLmZpbHRlcnMuaGlkZGVuKHQpKTspdD10W2E/InByZXZpb3VzU2libGluZyI6Im5leHRTaWJsaW5nIl07cmV0dXJuIGk9ZSh0KS5vZmZzZXQoKSxbaS5sZWZ0LGkudG9wXX0sX2hpZGVEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe3ZhciBpLHMsYSxuLHI9dGhpcy5fY3VySW5zdDshcnx8dCYmciE9PWUuZGF0YSh0LCJkYXRlcGlja2VyIil8fHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nJiYoaT10aGlzLl9nZXQociwic2hvd0FuaW0iKSxzPXRoaXMuX2dldChyLCJkdXJhdGlvbiIpLGE9ZnVuY3Rpb24oKXtlLmRhdGVwaWNrZXIuX3RpZHlEaWFsb2cocil9LGUuZWZmZWN0cyYmKGUuZWZmZWN0cy5lZmZlY3RbaV18fGUuZWZmZWN0c1tpXSk/ci5kcERpdi5oaWRlKGksZS5kYXRlcGlja2VyLl9nZXQociwic2hvd09wdGlvbnMiKSxzLGEpOnIuZHBEaXZbInNsaWRlRG93biI9PT1pPyJzbGlkZVVwIjoiZmFkZUluIj09PWk/ImZhZGVPdXQiOiJoaWRlIl0oaT9zOm51bGwsYSksaXx8YSgpLHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nPSExLG49dGhpcy5fZ2V0KHIsIm9uQ2xvc2UiKSxuJiZuLmFwcGx5KHIuaW5wdXQ/ci5pbnB1dFswXTpudWxsLFtyLmlucHV0P3IuaW5wdXQudmFsKCk6IiIscl0pLHRoaXMuX2xhc3RJbnB1dD1udWxsLHRoaXMuX2luRGlhbG9nJiYodGhpcy5fZGlhbG9nSW5wdXQuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6IjAiLHRvcDoiLTEwMHB4In0pLGUuYmxvY2tVSSYmKGUudW5ibG9ja1VJKCksZSgiYm9keSIpLmFwcGVuZCh0aGlzLmRwRGl2KSkpLHRoaXMuX2luRGlhbG9nPSExKX0sX3RpZHlEaWFsb2c6ZnVuY3Rpb24oZSl7ZS5kcERpdi5yZW1vdmVDbGFzcyh0aGlzLl9kaWFsb2dDbGFzcykudW5iaW5kKCIudWktZGF0ZXBpY2tlci1jYWxlbmRhciIpfSxfY2hlY2tFeHRlcm5hbENsaWNrOmZ1bmN0aW9uKHQpe2lmKGUuZGF0ZXBpY2tlci5fY3VySW5zdCl7dmFyIGk9ZSh0LnRhcmdldCkscz1lLmRhdGVwaWNrZXIuX2dldEluc3QoaVswXSk7KGlbMF0uaWQhPT1lLmRhdGVwaWNrZXIuX21haW5EaXZJZCYmMD09PWkucGFyZW50cygiIyIrZS5kYXRlcGlja2VyLl9tYWluRGl2SWQpLmxlbmd0aCYmIWkuaGFzQ2xhc3MoZS5kYXRlcGlja2VyLm1hcmtlckNsYXNzTmFtZSkmJiFpLmNsb3Nlc3QoIi4iK2UuZGF0ZXBpY2tlci5fdHJpZ2dlckNsYXNzKS5sZW5ndGgmJmUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJighZS5kYXRlcGlja2VyLl9pbkRpYWxvZ3x8IWUuYmxvY2tVSSl8fGkuaGFzQ2xhc3MoZS5kYXRlcGlja2VyLm1hcmtlckNsYXNzTmFtZSkmJmUuZGF0ZXBpY2tlci5fY3VySW5zdCE9PXMpJiZlLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCl9fSxfYWRqdXN0RGF0ZTpmdW5jdGlvbih0LGkscyl7dmFyIGE9ZSh0KSxuPXRoaXMuX2dldEluc3QoYVswXSk7dGhpcy5faXNEaXNhYmxlZERhdGVwaWNrZXIoYVswXSl8fCh0aGlzLl9hZGp1c3RJbnN0RGF0ZShuLGkrKCJNIj09PXM/dGhpcy5fZ2V0KG4sInNob3dDdXJyZW50QXRQb3MiKTowKSxzKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKG4pKX0sX2dvdG9Ub2RheTpmdW5jdGlvbih0KXt2YXIgaSxzPWUodCksYT10aGlzLl9nZXRJbnN0KHNbMF0pO3RoaXMuX2dldChhLCJnb3RvQ3VycmVudCIpJiZhLmN1cnJlbnREYXk/KGEuc2VsZWN0ZWREYXk9YS5jdXJyZW50RGF5LGEuZHJhd01vbnRoPWEuc2VsZWN0ZWRNb250aD1hLmN1cnJlbnRNb250aCxhLmRyYXdZZWFyPWEuc2VsZWN0ZWRZZWFyPWEuY3VycmVudFllYXIpOihpPW5ldyBEYXRlLGEuc2VsZWN0ZWREYXk9aS5nZXREYXRlKCksYS5kcmF3TW9udGg9YS5zZWxlY3RlZE1vbnRoPWkuZ2V0TW9udGgoKSxhLmRyYXdZZWFyPWEuc2VsZWN0ZWRZZWFyPWkuZ2V0RnVsbFllYXIoKSksdGhpcy5fbm90aWZ5Q2hhbmdlKGEpLHRoaXMuX2FkanVzdERhdGUocyl9LF9zZWxlY3RNb250aFllYXI6ZnVuY3Rpb24odCxpLHMpe3ZhciBhPWUodCksbj10aGlzLl9nZXRJbnN0KGFbMF0pO25bInNlbGVjdGVkIisoIk0iPT09cz8iTW9udGgiOiJZZWFyIildPW5bImRyYXciKygiTSI9PT1zPyJNb250aCI6IlllYXIiKV09cGFyc2VJbnQoaS5vcHRpb25zW2kuc2VsZWN0ZWRJbmRleF0udmFsdWUsMTApLHRoaXMuX25vdGlmeUNoYW5nZShuKSx0aGlzLl9hZGp1c3REYXRlKGEpfSxfc2VsZWN0RGF5OmZ1bmN0aW9uKHQsaSxzLGEpe3ZhciBuLHI9ZSh0KTtlKGEpLmhhc0NsYXNzKHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzKXx8dGhpcy5faXNEaXNhYmxlZERhdGVwaWNrZXIoclswXSl8fChuPXRoaXMuX2dldEluc3QoclswXSksbi5zZWxlY3RlZERheT1uLmN1cnJlbnREYXk9ZSgiYSIsYSkuaHRtbCgpLG4uc2VsZWN0ZWRNb250aD1uLmN1cnJlbnRNb250aD1pLG4uc2VsZWN0ZWRZZWFyPW4uY3VycmVudFllYXI9cyx0aGlzLl9zZWxlY3REYXRlKHQsdGhpcy5fZm9ybWF0RGF0ZShuLG4uY3VycmVudERheSxuLmN1cnJlbnRNb250aCxuLmN1cnJlbnRZZWFyKSkpfSxfY2xlYXJEYXRlOmZ1bmN0aW9uKHQpe3ZhciBpPWUodCk7dGhpcy5fc2VsZWN0RGF0ZShpLCIiKX0sX3NlbGVjdERhdGU6ZnVuY3Rpb24odCxpKXt2YXIgcyxhPWUodCksbj10aGlzLl9nZXRJbnN0KGFbMF0pO2k9bnVsbCE9aT9pOnRoaXMuX2Zvcm1hdERhdGUobiksbi5pbnB1dCYmbi5pbnB1dC52YWwoaSksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKG4pLHM9dGhpcy5fZ2V0KG4sIm9uU2VsZWN0Iikscz9zLmFwcGx5KG4uaW5wdXQ/bi5pbnB1dFswXTpudWxsLFtpLG5dKTpuLmlucHV0JiZuLmlucHV0LnRyaWdnZXIoImNoYW5nZSIpLG4uaW5saW5lP3RoaXMuX3VwZGF0ZURhdGVwaWNrZXIobik6KHRoaXMuX2hpZGVEYXRlcGlja2VyKCksdGhpcy5fbGFzdElucHV0PW4uaW5wdXRbMF0sIm9iamVjdCIhPXR5cGVvZiBuLmlucHV0WzBdJiZuLmlucHV0LmZvY3VzKCksdGhpcy5fbGFzdElucHV0PW51bGwpfSxfdXBkYXRlQWx0ZXJuYXRlOmZ1bmN0aW9uKHQpe3ZhciBpLHMsYSxuPXRoaXMuX2dldCh0LCJhbHRGaWVsZCIpO24mJihpPXRoaXMuX2dldCh0LCJhbHRGb3JtYXQiKXx8dGhpcy5fZ2V0KHQsImRhdGVGb3JtYXQiKSxzPXRoaXMuX2dldERhdGUodCksYT10aGlzLmZvcm1hdERhdGUoaSxzLHRoaXMuX2dldEZvcm1hdENvbmZpZyh0KSksZShuKS5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS52YWwoYSl9KSl9LG5vV2Vla2VuZHM6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXREYXkoKTtyZXR1cm5bdD4wJiY2PnQsIiJdfSxpc284NjAxV2VlazpmdW5jdGlvbihlKXt2YXIgdCxpPW5ldyBEYXRlKGUuZ2V0VGltZSgpKTtyZXR1cm4gaS5zZXREYXRlKGkuZ2V0RGF0ZSgpKzQtKGkuZ2V0RGF5KCl8fDcpKSx0PWkuZ2V0VGltZSgpLGkuc2V0TW9udGgoMCksaS5zZXREYXRlKDEpLE1hdGguZmxvb3IoTWF0aC5yb3VuZCgodC1pKS84NjRlNSkvNykrMX0scGFyc2VEYXRlOmZ1bmN0aW9uKHQsaSxzKXtpZihudWxsPT10fHxudWxsPT1pKXRocm93IkludmFsaWQgYXJndW1lbnRzIjtpZihpPSJvYmplY3QiPT10eXBlb2YgaT8iIitpOmkrIiIsIiI9PT1pKXJldHVybiBudWxsO3ZhciBhLG4scixvLGg9MCxsPShzP3Muc2hvcnRZZWFyQ3V0b2ZmOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5zaG9ydFllYXJDdXRvZmYsdT0ic3RyaW5nIiE9dHlwZW9mIGw/bDoobmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwK3BhcnNlSW50KGwsMTApLGQ9KHM/cy5kYXlOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lc1Nob3J0LGM9KHM/cy5kYXlOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXMscD0ocz9zLm1vbnRoTmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lc1Nob3J0LGY9KHM/cy5tb250aE5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzLG09LTEsZz0tMSx2PS0xLHk9LTEsYj0hMSxfPWZ1bmN0aW9uKGUpe3ZhciBpPXQubGVuZ3RoPmErMSYmdC5jaGFyQXQoYSsxKT09PWU7cmV0dXJuIGkmJmErKyxpfSx4PWZ1bmN0aW9uKGUpe3ZhciB0PV8oZSkscz0iQCI9PT1lPzE0OiIhIj09PWU/MjA6InkiPT09ZSYmdD80OiJvIj09PWU/MzoyLGE9InkiPT09ZT9zOjEsbj1SZWdFeHAoIl5cXGR7IithKyIsIitzKyJ9Iikscj1pLnN1YnN0cmluZyhoKS5tYXRjaChuKTtpZighcil0aHJvdyJNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiAiK2g7cmV0dXJuIGgrPXJbMF0ubGVuZ3RoLHBhcnNlSW50KHJbMF0sMTApfSxrPWZ1bmN0aW9uKHQscyxhKXt2YXIgbj0tMSxyPWUubWFwKF8odCk/YTpzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuW1t0LGVdXX0pLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4tKGVbMV0ubGVuZ3RoLXRbMV0ubGVuZ3RoKX0pO2lmKGUuZWFjaChyLGZ1bmN0aW9uKGUsdCl7dmFyIHM9dFsxXTtyZXR1cm4gaS5zdWJzdHIoaCxzLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PXMudG9Mb3dlckNhc2UoKT8obj10WzBdLGgrPXMubGVuZ3RoLCExKTp2b2lkIDB9KSwtMSE9PW4pcmV0dXJuIG4rMTt0aHJvdyJVbmtub3duIG5hbWUgYXQgcG9zaXRpb24gIitofSx3PWZ1bmN0aW9uKCl7aWYoaS5jaGFyQXQoaCkhPT10LmNoYXJBdChhKSl0aHJvdyJVbmV4cGVjdGVkIGxpdGVyYWwgYXQgcG9zaXRpb24gIitoO2grK307Zm9yKGE9MDt0Lmxlbmd0aD5hO2ErKylpZihiKSInIiE9PXQuY2hhckF0KGEpfHxfKCInIik/dygpOmI9ITE7ZWxzZSBzd2l0Y2godC5jaGFyQXQoYSkpe2Nhc2UiZCI6dj14KCJkIik7YnJlYWs7Y2FzZSJEIjprKCJEIixkLGMpO2JyZWFrO2Nhc2UibyI6eT14KCJvIik7YnJlYWs7Y2FzZSJtIjpnPXgoIm0iKTticmVhaztjYXNlIk0iOmc9aygiTSIscCxmKTticmVhaztjYXNlInkiOm09eCgieSIpO2JyZWFrO2Nhc2UiQCI6bz1uZXcgRGF0ZSh4KCJAIikpLG09by5nZXRGdWxsWWVhcigpLGc9by5nZXRNb250aCgpKzEsdj1vLmdldERhdGUoKTticmVhaztjYXNlIiEiOm89bmV3IERhdGUoKHgoIiEiKS10aGlzLl90aWNrc1RvMTk3MCkvMWU0KSxtPW8uZ2V0RnVsbFllYXIoKSxnPW8uZ2V0TW9udGgoKSsxLHY9by5nZXREYXRlKCk7YnJlYWs7Y2FzZSInIjpfKCInIik/dygpOmI9ITA7YnJlYWs7ZGVmYXVsdDp3KCl9aWYoaS5sZW5ndGg+aCYmKHI9aS5zdWJzdHIoaCksIS9eXHMrLy50ZXN0KHIpKSl0aHJvdyJFeHRyYS91bnBhcnNlZCBjaGFyYWN0ZXJzIGZvdW5kIGluIGRhdGU6ICIrcjtpZigtMT09PW0/bT0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCk6MTAwPm0mJihtKz0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCktKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCsodT49bT8wOi0xMDApKSx5Pi0xKWZvcihnPTEsdj15Ozspe2lmKG49dGhpcy5fZ2V0RGF5c0luTW9udGgobSxnLTEpLG4+PXYpYnJlYWs7ZysrLHYtPW59aWYobz10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShtLGctMSx2KSksby5nZXRGdWxsWWVhcigpIT09bXx8by5nZXRNb250aCgpKzEhPT1nfHxvLmdldERhdGUoKSE9PXYpdGhyb3ciSW52YWxpZCBkYXRlIjtyZXR1cm4gb30sQVRPTToieXktbW0tZGQiLENPT0tJRToiRCwgZGQgTSB5eSIsSVNPXzg2MDE6Inl5LW1tLWRkIixSRkNfODIyOiJELCBkIE0geSIsUkZDXzg1MDoiREQsIGRkLU0teSIsUkZDXzEwMzY6IkQsIGQgTSB5IixSRkNfMTEyMzoiRCwgZCBNIHl5IixSRkNfMjgyMjoiRCwgZCBNIHl5IixSU1M6IkQsIGQgTSB5IixUSUNLUzoiISIsVElNRVNUQU1QOiJAIixXM0M6Inl5LW1tLWRkIixfdGlja3NUbzE5NzA6MWU3KjYwKjYwKjI0Kig3MTg2ODUrTWF0aC5mbG9vcig0OTIuNSktTWF0aC5mbG9vcigxOS43KStNYXRoLmZsb29yKDQuOTI1KSksZm9ybWF0RGF0ZTpmdW5jdGlvbihlLHQsaSl7aWYoIXQpcmV0dXJuIiI7dmFyIHMsYT0oaT9pLmRheU5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQsbj0oaT9pLmRheU5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcyxyPShpP2kubW9udGhOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzU2hvcnQsbz0oaT9pLm1vbnRoTmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsaD1mdW5jdGlvbih0KXt2YXIgaT1lLmxlbmd0aD5zKzEmJmUuY2hhckF0KHMrMSk9PT10O3JldHVybiBpJiZzKyssaX0sbD1mdW5jdGlvbihlLHQsaSl7dmFyIHM9IiIrdDtpZihoKGUpKWZvcig7aT5zLmxlbmd0aDspcz0iMCIrcztyZXR1cm4gc30sdT1mdW5jdGlvbihlLHQsaSxzKXtyZXR1cm4gaChlKT9zW3RdOmlbdF19LGQ9IiIsYz0hMTtpZih0KWZvcihzPTA7ZS5sZW5ndGg+cztzKyspaWYoYykiJyIhPT1lLmNoYXJBdChzKXx8aCgiJyIpP2QrPWUuY2hhckF0KHMpOmM9ITE7ZWxzZSBzd2l0Y2goZS5jaGFyQXQocykpe2Nhc2UiZCI6ZCs9bCgiZCIsdC5nZXREYXRlKCksMik7YnJlYWs7Y2FzZSJEIjpkKz11KCJEIix0LmdldERheSgpLGEsbik7YnJlYWs7Y2FzZSJvIjpkKz1sKCJvIixNYXRoLnJvdW5kKChuZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLHQuZ2V0RGF0ZSgpKS5nZXRUaW1lKCktbmV3IERhdGUodC5nZXRGdWxsWWVhcigpLDAsMCkuZ2V0VGltZSgpKS84NjRlNSksMyk7YnJlYWs7Y2FzZSJtIjpkKz1sKCJtIix0LmdldE1vbnRoKCkrMSwyKTticmVhaztjYXNlIk0iOmQrPXUoIk0iLHQuZ2V0TW9udGgoKSxyLG8pO2JyZWFrO2Nhc2UieSI6ZCs9aCgieSIpP3QuZ2V0RnVsbFllYXIoKTooMTA+dC5nZXRZZWFyKCklMTAwPyIwIjoiIikrdC5nZXRZZWFyKCklMTAwO2JyZWFrO2Nhc2UiQCI6ZCs9dC5nZXRUaW1lKCk7YnJlYWs7Y2FzZSIhIjpkKz0xZTQqdC5nZXRUaW1lKCkrdGhpcy5fdGlja3NUbzE5NzA7YnJlYWs7Y2FzZSInIjpoKCInIik/ZCs9IiciOmM9ITA7YnJlYWs7ZGVmYXVsdDpkKz1lLmNoYXJBdChzKX1yZXR1cm4gZH0sX3Bvc3NpYmxlQ2hhcnM6ZnVuY3Rpb24oZSl7dmFyIHQsaT0iIixzPSExLGE9ZnVuY3Rpb24oaSl7dmFyIHM9ZS5sZW5ndGg+dCsxJiZlLmNoYXJBdCh0KzEpPT09aTtyZXR1cm4gcyYmdCsrLHN9O2Zvcih0PTA7ZS5sZW5ndGg+dDt0KyspaWYocykiJyIhPT1lLmNoYXJBdCh0KXx8YSgiJyIpP2krPWUuY2hhckF0KHQpOnM9ITE7ZWxzZSBzd2l0Y2goZS5jaGFyQXQodCkpe2Nhc2UiZCI6Y2FzZSJtIjpjYXNlInkiOmNhc2UiQCI6aSs9IjAxMjM0NTY3ODkiO2JyZWFrO2Nhc2UiRCI6Y2FzZSJNIjpyZXR1cm4gbnVsbDtjYXNlIiciOmEoIiciKT9pKz0iJyI6cz0hMDticmVhaztkZWZhdWx0OmkrPWUuY2hhckF0KHQpfXJldHVybiBpfSxfZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMCE9PWUuc2V0dGluZ3NbdF0/ZS5zZXR0aW5nc1t0XTp0aGlzLl9kZWZhdWx0c1t0XX0sX3NldERhdGVGcm9tRmllbGQ6ZnVuY3Rpb24oZSx0KXtpZihlLmlucHV0LnZhbCgpIT09ZS5sYXN0VmFsKXt2YXIgaT10aGlzLl9nZXQoZSwiZGF0ZUZvcm1hdCIpLHM9ZS5sYXN0VmFsPWUuaW5wdXQ/ZS5pbnB1dC52YWwoKTpudWxsLGE9dGhpcy5fZ2V0RGVmYXVsdERhdGUoZSksbj1hLHI9dGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpO3RyeXtuPXRoaXMucGFyc2VEYXRlKGkscyxyKXx8YX1jYXRjaChvKXtzPXQ/IiI6c31lLnNlbGVjdGVkRGF5PW4uZ2V0RGF0ZSgpLGUuZHJhd01vbnRoPWUuc2VsZWN0ZWRNb250aD1uLmdldE1vbnRoKCksZS5kcmF3WWVhcj1lLnNlbGVjdGVkWWVhcj1uLmdldEZ1bGxZZWFyKCksZS5jdXJyZW50RGF5PXM/bi5nZXREYXRlKCk6MCxlLmN1cnJlbnRNb250aD1zP24uZ2V0TW9udGgoKTowLGUuY3VycmVudFllYXI9cz9uLmdldEZ1bGxZZWFyKCk6MCx0aGlzLl9hZGp1c3RJbnN0RGF0ZShlKX19LF9nZXREZWZhdWx0RGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcmVzdHJpY3RNaW5NYXgoZSx0aGlzLl9kZXRlcm1pbmVEYXRlKGUsdGhpcy5fZ2V0KGUsImRlZmF1bHREYXRlIiksbmV3IERhdGUpKX0sX2RldGVybWluZURhdGU6ZnVuY3Rpb24odCxpLHMpe3ZhciBhPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRlO3JldHVybiB0LnNldERhdGUodC5nZXREYXRlKCkrZSksdH0sbj1mdW5jdGlvbihpKXt0cnl7cmV0dXJuIGUuZGF0ZXBpY2tlci5wYXJzZURhdGUoZS5kYXRlcGlja2VyLl9nZXQodCwiZGF0ZUZvcm1hdCIpLGksZS5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcodCkpfWNhdGNoKHMpe31mb3IodmFyIGE9KGkudG9Mb3dlckNhc2UoKS5tYXRjaCgvXmMvKT9lLmRhdGVwaWNrZXIuX2dldERhdGUodCk6bnVsbCl8fG5ldyBEYXRlLG49YS5nZXRGdWxsWWVhcigpLHI9YS5nZXRNb250aCgpLG89YS5nZXREYXRlKCksaD0vKFsrXC1dP1swLTldKylccyooZHxEfHd8V3xtfE18eXxZKT8vZyxsPWguZXhlYyhpKTtsOyl7c3dpdGNoKGxbMl18fCJkIil7Y2FzZSJkIjpjYXNlIkQiOm8rPXBhcnNlSW50KGxbMV0sMTApO2JyZWFrO2Nhc2UidyI6Y2FzZSJXIjpvKz03KnBhcnNlSW50KGxbMV0sMTApO2JyZWFrO2Nhc2UibSI6Y2FzZSJNIjpyKz1wYXJzZUludChsWzFdLDEwKSxvPU1hdGgubWluKG8sZS5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChuLHIpKTticmVhaztjYXNlInkiOmNhc2UiWSI6bis9cGFyc2VJbnQobFsxXSwxMCksbz1NYXRoLm1pbihvLGUuZGF0ZXBpY2tlci5fZ2V0RGF5c0luTW9udGgobixyKSl9bD1oLmV4ZWMoaSl9cmV0dXJuIG5ldyBEYXRlKG4scixvKX0scj1udWxsPT1pfHwiIj09PWk/czoic3RyaW5nIj09dHlwZW9mIGk/bihpKToibnVtYmVyIj09dHlwZW9mIGk/aXNOYU4oaSk/czphKGkpOm5ldyBEYXRlKGkuZ2V0VGltZSgpKTtyZXR1cm4gcj1yJiYiSW52YWxpZCBEYXRlIj09IiIrcj9zOnIsciYmKHIuc2V0SG91cnMoMCksci5zZXRNaW51dGVzKDApLHIuc2V0U2Vjb25kcygwKSxyLnNldE1pbGxpc2Vjb25kcygwKSksdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3Qocil9LF9kYXlsaWdodFNhdmluZ0FkanVzdDpmdW5jdGlvbihlKXtyZXR1cm4gZT8oZS5zZXRIb3VycyhlLmdldEhvdXJzKCk+MTI/ZS5nZXRIb3VycygpKzI6MCksZSk6bnVsbH0sX3NldERhdGU6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzPSF0LGE9ZS5zZWxlY3RlZE1vbnRoLG49ZS5zZWxlY3RlZFllYXIscj10aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RldGVybWluZURhdGUoZSx0LG5ldyBEYXRlKSk7ZS5zZWxlY3RlZERheT1lLmN1cnJlbnREYXk9ci5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPWUuY3VycmVudE1vbnRoPXIuZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPWUuY3VycmVudFllYXI9ci5nZXRGdWxsWWVhcigpLGE9PT1lLnNlbGVjdGVkTW9udGgmJm49PT1lLnNlbGVjdGVkWWVhcnx8aXx8dGhpcy5fbm90aWZ5Q2hhbmdlKGUpLHRoaXMuX2FkanVzdEluc3REYXRlKGUpLGUuaW5wdXQmJmUuaW5wdXQudmFsKHM/IiI6dGhpcy5fZm9ybWF0RGF0ZShlKSl9LF9nZXREYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PSFlLmN1cnJlbnRZZWFyfHxlLmlucHV0JiYiIj09PWUuaW5wdXQudmFsKCk/bnVsbDp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShlLmN1cnJlbnRZZWFyLGUuY3VycmVudE1vbnRoLGUuY3VycmVudERheSkpO3JldHVybiB0fSxfYXR0YWNoSGFuZGxlcnM6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fZ2V0KHQsInN0ZXBNb250aHMiKSxzPSIjIit0LmlkLnJlcGxhY2UoL1xcXFwvZywiXFwiKTt0LmRwRGl2LmZpbmQoIltkYXRhLWhhbmRsZXJdIikubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9e3ByZXY6ZnVuY3Rpb24oKXtlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUocywtaSwiTSIpfSxuZXh0OmZ1bmN0aW9uKCl7ZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHMsK2ksIk0iKX0saGlkZTpmdW5jdGlvbigpe2UuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKX0sdG9kYXk6ZnVuY3Rpb24oKXtlLmRhdGVwaWNrZXIuX2dvdG9Ub2RheShzKX0sc2VsZWN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIGUuZGF0ZXBpY2tlci5fc2VsZWN0RGF5KHMsK3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLW1vbnRoIiksK3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLXllYXIiKSx0aGlzKSwhMX0sc2VsZWN0TW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gZS5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIocyx0aGlzLCJNIiksITF9LHNlbGVjdFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gZS5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIocyx0aGlzLCJZIiksITF9fTtlKHRoaXMpLmJpbmQodGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtZXZlbnQiKSx0W3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLWhhbmRsZXIiKV0pfSl9LF9nZW5lcmF0ZUhUTUw6ZnVuY3Rpb24oZSl7dmFyIHQsaSxzLGEsbixyLG8saCxsLHUsZCxjLHAsZixtLGcsdix5LGIsXyx4LGssdyxULFMsRCxOLE0sQyxBLFAsSSxILEYsaix6LEUsTyxMLFc9bmV3IERhdGUsUj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShXLmdldEZ1bGxZZWFyKCksVy5nZXRNb250aCgpLFcuZ2V0RGF0ZSgpKSksWT10aGlzLl9nZXQoZSwiaXNSVEwiKSxKPXRoaXMuX2dldChlLCJzaG93QnV0dG9uUGFuZWwiKSxCPXRoaXMuX2dldChlLCJoaWRlSWZOb1ByZXZOZXh0IiksSz10aGlzLl9nZXQoZSwibmF2aWdhdGlvbkFzRGF0ZUZvcm1hdCIpLFY9dGhpcy5fZ2V0TnVtYmVyT2ZNb250aHMoZSkscT10aGlzLl9nZXQoZSwic2hvd0N1cnJlbnRBdFBvcyIpLFE9dGhpcy5fZ2V0KGUsInN0ZXBNb250aHMiKSxVPTEhPT1WWzBdfHwxIT09VlsxXSxHPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KGUuY3VycmVudERheT9uZXcgRGF0ZShlLmN1cnJlbnRZZWFyLGUuY3VycmVudE1vbnRoLGUuY3VycmVudERheSk6bmV3IERhdGUoOTk5OSw5LDkpKSxYPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWluIiksJD10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1heCIpLFo9ZS5kcmF3TW9udGgtcSxldD1lLmRyYXdZZWFyO2lmKDA+WiYmKForPTEyLGV0LS0pLCQpZm9yKHQ9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoJC5nZXRGdWxsWWVhcigpLCQuZ2V0TW9udGgoKS1WWzBdKlZbMV0rMSwkLmdldERhdGUoKSkpLHQ9WCYmWD50P1g6dDt0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShldCxaLDEpKT50OylaLS0sMD5aJiYoWj0xMSxldC0tKTtmb3IoZS5kcmF3TW9udGg9WixlLmRyYXdZZWFyPWV0LGk9dGhpcy5fZ2V0KGUsInByZXZUZXh0IiksaT1LP3RoaXMuZm9ybWF0RGF0ZShpLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGV0LFotUSwxKSksdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKTppLHM9dGhpcy5fY2FuQWRqdXN0TW9udGgoZSwtMSxldCxaKT8iPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J3ByZXYnIGRhdGEtZXZlbnQ9J2NsaWNrJyB0aXRsZT0nIitpKyInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIrKFk/ImUiOiJ3IikrIic+IitpKyI8L3NwYW4+PC9hPiI6Qj8iIjoiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkJyB0aXRsZT0nIitpKyInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIrKFk/ImUiOiJ3IikrIic+IitpKyI8L3NwYW4+PC9hPiIsYT10aGlzLl9nZXQoZSwibmV4dFRleHQiKSxhPUs/dGhpcy5mb3JtYXREYXRlKGEsdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZXQsWitRLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOmEsbj10aGlzLl9jYW5BZGp1c3RNb250aChlLDEsZXQsWik/IjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSduZXh0JyBkYXRhLWV2ZW50PSdjbGljaycgdGl0bGU9JyIrYSsiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0iKyhZPyJ3IjoiZSIpKyInPiIrYSsiPC9zcGFuPjwvYT4iOkI/IiI6IjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1kaXNhYmxlZCcgdGl0bGU9JyIrYSsiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0iKyhZPyJ3IjoiZSIpKyInPiIrYSsiPC9zcGFuPjwvYT4iLHI9dGhpcy5fZ2V0KGUsImN1cnJlbnRUZXh0Iiksbz10aGlzLl9nZXQoZSwiZ290b0N1cnJlbnQiKSYmZS5jdXJyZW50RGF5P0c6UixyPUs/dGhpcy5mb3JtYXREYXRlKHIsbyx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOnIsaD1lLmlubGluZT8iIjoiPGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzPSd1aS1kYXRlcGlja2VyLWNsb3NlIHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktcHJpbWFyeSB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J2hpZGUnIGRhdGEtZXZlbnQ9J2NsaWNrJz4iK3RoaXMuX2dldChlLCJjbG9zZVRleHQiKSsiPC9idXR0b24+IixsPUo/IjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSB1aS13aWRnZXQtY29udGVudCc+IisoWT9oOiIiKSsodGhpcy5faXNJblJhbmdlKGUsbyk/IjxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0ndWktZGF0ZXBpY2tlci1jdXJyZW50IHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktc2Vjb25kYXJ5IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0ndG9kYXknIGRhdGEtZXZlbnQ9J2NsaWNrJz4iK3IrIjwvYnV0dG9uPiI6IiIpKyhZPyIiOmgpKyI8L2Rpdj4iOiIiLHU9cGFyc2VJbnQodGhpcy5fZ2V0KGUsImZpcnN0RGF5IiksMTApLHU9aXNOYU4odSk/MDp1LGQ9dGhpcy5fZ2V0KGUsInNob3dXZWVrIiksYz10aGlzLl9nZXQoZSwiZGF5TmFtZXMiKSxwPXRoaXMuX2dldChlLCJkYXlOYW1lc01pbiIpLGY9dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXMiKSxtPXRoaXMuX2dldChlLCJtb250aE5hbWVzU2hvcnQiKSxnPXRoaXMuX2dldChlLCJiZWZvcmVTaG93RGF5Iiksdj10aGlzLl9nZXQoZSwic2hvd090aGVyTW9udGhzIikseT10aGlzLl9nZXQoZSwic2VsZWN0T3RoZXJNb250aHMiKSxiPXRoaXMuX2dldERlZmF1bHREYXRlKGUpLF89IiIsaz0wO1ZbMF0+aztrKyspe2Zvcih3PSIiLHRoaXMubWF4Um93cz00LFQ9MDtWWzFdPlQ7VCsrKXtpZihTPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGV0LFosZS5zZWxlY3RlZERheSkpLEQ9IiB1aS1jb3JuZXItYWxsIixOPSIiLFUpe2lmKE4rPSI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWdyb3VwIixWWzFdPjEpc3dpdGNoKFQpe2Nhc2UgMDpOKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtZmlyc3QiLEQ9IiB1aS1jb3JuZXItIisoWT8icmlnaHQiOiJsZWZ0Iik7CiticmVhaztjYXNlIFZbMV0tMTpOKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCIsRD0iIHVpLWNvcm5lci0iKyhZPyJsZWZ0IjoicmlnaHQiKTticmVhaztkZWZhdWx0Ok4rPSIgdWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUiLEQ9IiJ9Tis9Iic+In1mb3IoTis9IjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4IitEKyInPiIrKC9hbGx8bGVmdC8udGVzdChEKSYmMD09PWs/WT9uOnM6IiIpKygvYWxsfHJpZ2h0Ly50ZXN0KEQpJiYwPT09az9ZP3M6bjoiIikrdGhpcy5fZ2VuZXJhdGVNb250aFllYXJIZWFkZXIoZSxaLGV0LFgsJCxrPjB8fFQ+MCxmLG0pKyI8L2Rpdj48dGFibGUgY2xhc3M9J3VpLWRhdGVwaWNrZXItY2FsZW5kYXInPjx0aGVhZD4iKyI8dHI+IixNPWQ/Ijx0aCBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWNvbCc+Iit0aGlzLl9nZXQoZSwid2Vla0hlYWRlciIpKyI8L3RoPiI6IiIseD0wOzc+eDt4KyspQz0oeCt1KSU3LE0rPSI8dGggc2NvcGU9J2NvbCciKygoeCt1KzYpJTc+PTU/IiBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWVuZCciOiIiKSsiPiIrIjxzcGFuIHRpdGxlPSciK2NbQ10rIic+IitwW0NdKyI8L3NwYW4+PC90aD4iO2ZvcihOKz1NKyI8L3RyPjwvdGhlYWQ+PHRib2R5PiIsQT10aGlzLl9nZXREYXlzSW5Nb250aChldCxaKSxldD09PWUuc2VsZWN0ZWRZZWFyJiZaPT09ZS5zZWxlY3RlZE1vbnRoJiYoZS5zZWxlY3RlZERheT1NYXRoLm1pbihlLnNlbGVjdGVkRGF5LEEpKSxQPSh0aGlzLl9nZXRGaXJzdERheU9mTW9udGgoZXQsWiktdSs3KSU3LEk9TWF0aC5jZWlsKChQK0EpLzcpLEg9VT90aGlzLm1heFJvd3M+ST90aGlzLm1heFJvd3M6STpJLHRoaXMubWF4Um93cz1ILEY9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZXQsWiwxLVApKSxqPTA7SD5qO2orKyl7Zm9yKE4rPSI8dHI+Iix6PWQ/Ijx0ZCBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWNvbCc+Iit0aGlzLl9nZXQoZSwiY2FsY3VsYXRlV2VlayIpKEYpKyI8L3RkPiI6IiIseD0wOzc+eDt4KyspRT1nP2cuYXBwbHkoZS5pbnB1dD9lLmlucHV0WzBdOm51bGwsW0ZdKTpbITAsIiJdLE89Ri5nZXRNb250aCgpIT09WixMPU8mJiF5fHwhRVswXXx8WCYmWD5GfHwkJiZGPiQseis9Ijx0ZCBjbGFzcz0nIisoKHgrdSs2KSU3Pj01PyIgdWktZGF0ZXBpY2tlci13ZWVrLWVuZCI6IiIpKyhPPyIgdWktZGF0ZXBpY2tlci1vdGhlci1tb250aCI6IiIpKyhGLmdldFRpbWUoKT09PVMuZ2V0VGltZSgpJiZaPT09ZS5zZWxlY3RlZE1vbnRoJiZlLl9rZXlFdmVudHx8Yi5nZXRUaW1lKCk9PT1GLmdldFRpbWUoKSYmYi5nZXRUaW1lKCk9PT1TLmdldFRpbWUoKT8iICIrdGhpcy5fZGF5T3ZlckNsYXNzOiIiKSsoTD8iICIrdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MrIiB1aS1zdGF0ZS1kaXNhYmxlZCI6IiIpKyhPJiYhdj8iIjoiICIrRVsxXSsoRi5nZXRUaW1lKCk9PT1HLmdldFRpbWUoKT8iICIrdGhpcy5fY3VycmVudENsYXNzOiIiKSsoRi5nZXRUaW1lKCk9PT1SLmdldFRpbWUoKT8iIHVpLWRhdGVwaWNrZXItdG9kYXkiOiIiKSkrIiciKyhPJiYhdnx8IUVbMl0/IiI6IiB0aXRsZT0nIitFWzJdLnJlcGxhY2UoLycvZywiJiMzOTsiKSsiJyIpKyhMPyIiOiIgZGF0YS1oYW5kbGVyPSdzZWxlY3REYXknIGRhdGEtZXZlbnQ9J2NsaWNrJyBkYXRhLW1vbnRoPSciK0YuZ2V0TW9udGgoKSsiJyBkYXRhLXllYXI9JyIrRi5nZXRGdWxsWWVhcigpKyInIikrIj4iKyhPJiYhdj8iJiN4YTA7IjpMPyI8c3BhbiBjbGFzcz0ndWktc3RhdGUtZGVmYXVsdCc+IitGLmdldERhdGUoKSsiPC9zcGFuPiI6IjxhIGNsYXNzPSd1aS1zdGF0ZS1kZWZhdWx0IisoRi5nZXRUaW1lKCk9PT1SLmdldFRpbWUoKT8iIHVpLXN0YXRlLWhpZ2hsaWdodCI6IiIpKyhGLmdldFRpbWUoKT09PUcuZ2V0VGltZSgpPyIgdWktc3RhdGUtYWN0aXZlIjoiIikrKE8/IiB1aS1wcmlvcml0eS1zZWNvbmRhcnkiOiIiKSsiJyBocmVmPScjJz4iK0YuZ2V0RGF0ZSgpKyI8L2E+IikrIjwvdGQ+IixGLnNldERhdGUoRi5nZXREYXRlKCkrMSksRj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChGKTtOKz16KyI8L3RyPiJ9WisrLFo+MTEmJihaPTAsZXQrKyksTis9IjwvdGJvZHk+PC90YWJsZT4iKyhVPyI8L2Rpdj4iKyhWWzBdPjAmJlQ9PT1WWzFdLTE/IjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItcm93LWJyZWFrJz48L2Rpdj4iOiIiKToiIiksdys9Tn1fKz13fXJldHVybiBfKz1sLGUuX2tleUV2ZW50PSExLF99LF9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcjpmdW5jdGlvbihlLHQsaSxzLGEsbixyLG8pe3ZhciBoLGwsdSxkLGMscCxmLG0sZz10aGlzLl9nZXQoZSwiY2hhbmdlTW9udGgiKSx2PXRoaXMuX2dldChlLCJjaGFuZ2VZZWFyIikseT10aGlzLl9nZXQoZSwic2hvd01vbnRoQWZ0ZXJZZWFyIiksYj0iPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci10aXRsZSc+IixfPSIiO2lmKG58fCFnKV8rPSI8c3BhbiBjbGFzcz0ndWktZGF0ZXBpY2tlci1tb250aCc+IityW3RdKyI8L3NwYW4+IjtlbHNle2ZvcihoPXMmJnMuZ2V0RnVsbFllYXIoKT09PWksbD1hJiZhLmdldEZ1bGxZZWFyKCk9PT1pLF8rPSI8c2VsZWN0IGNsYXNzPSd1aS1kYXRlcGlja2VyLW1vbnRoJyBkYXRhLWhhbmRsZXI9J3NlbGVjdE1vbnRoJyBkYXRhLWV2ZW50PSdjaGFuZ2UnPiIsdT0wOzEyPnU7dSsrKSghaHx8dT49cy5nZXRNb250aCgpKSYmKCFsfHxhLmdldE1vbnRoKCk+PXUpJiYoXys9IjxvcHRpb24gdmFsdWU9JyIrdSsiJyIrKHU9PT10PyIgc2VsZWN0ZWQ9J3NlbGVjdGVkJyI6IiIpKyI+IitvW3VdKyI8L29wdGlvbj4iKTtfKz0iPC9zZWxlY3Q+In1pZih5fHwoYis9XysoIW4mJmcmJnY/IiI6IiYjeGEwOyIpKSwhZS55ZWFyc2h0bWwpaWYoZS55ZWFyc2h0bWw9IiIsbnx8IXYpYis9IjxzcGFuIGNsYXNzPSd1aS1kYXRlcGlja2VyLXllYXInPiIraSsiPC9zcGFuPiI7ZWxzZXtmb3IoZD10aGlzLl9nZXQoZSwieWVhclJhbmdlIikuc3BsaXQoIjoiKSxjPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxwPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goL2NbK1wtXS4qLyk/aStwYXJzZUludChlLnN1YnN0cmluZygxKSwxMCk6ZS5tYXRjaCgvWytcLV0uKi8pP2MrcGFyc2VJbnQoZSwxMCk6cGFyc2VJbnQoZSwxMCk7cmV0dXJuIGlzTmFOKHQpP2M6dH0sZj1wKGRbMF0pLG09TWF0aC5tYXgoZixwKGRbMV18fCIiKSksZj1zP01hdGgubWF4KGYscy5nZXRGdWxsWWVhcigpKTpmLG09YT9NYXRoLm1pbihtLGEuZ2V0RnVsbFllYXIoKSk6bSxlLnllYXJzaHRtbCs9IjxzZWxlY3QgY2xhc3M9J3VpLWRhdGVwaWNrZXIteWVhcicgZGF0YS1oYW5kbGVyPSdzZWxlY3RZZWFyJyBkYXRhLWV2ZW50PSdjaGFuZ2UnPiI7bT49ZjtmKyspZS55ZWFyc2h0bWwrPSI8b3B0aW9uIHZhbHVlPSciK2YrIiciKyhmPT09aT8iIHNlbGVjdGVkPSdzZWxlY3RlZCciOiIiKSsiPiIrZisiPC9vcHRpb24+IjtlLnllYXJzaHRtbCs9Ijwvc2VsZWN0PiIsYis9ZS55ZWFyc2h0bWwsZS55ZWFyc2h0bWw9bnVsbH1yZXR1cm4gYis9dGhpcy5fZ2V0KGUsInllYXJTdWZmaXgiKSx5JiYoYis9KCFuJiZnJiZ2PyIiOiImI3hhMDsiKStfKSxiKz0iPC9kaXY+In0sX2FkanVzdEluc3REYXRlOmZ1bmN0aW9uKGUsdCxpKXt2YXIgcz1lLmRyYXdZZWFyKygiWSI9PT1pP3Q6MCksYT1lLmRyYXdNb250aCsoIk0iPT09aT90OjApLG49TWF0aC5taW4oZS5zZWxlY3RlZERheSx0aGlzLl9nZXREYXlzSW5Nb250aChzLGEpKSsoIkQiPT09aT90OjApLHI9dGhpcy5fcmVzdHJpY3RNaW5NYXgoZSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShzLGEsbikpKTtlLnNlbGVjdGVkRGF5PXIuZ2V0RGF0ZSgpLGUuZHJhd01vbnRoPWUuc2VsZWN0ZWRNb250aD1yLmdldE1vbnRoKCksZS5kcmF3WWVhcj1lLnNlbGVjdGVkWWVhcj1yLmdldEZ1bGxZZWFyKCksKCJNIj09PWl8fCJZIj09PWkpJiZ0aGlzLl9ub3RpZnlDaGFuZ2UoZSl9LF9yZXN0cmljdE1pbk1heDpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWluIikscz10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1heCIpLGE9aSYmaT50P2k6dDtyZXR1cm4gcyYmYT5zP3M6YX0sX25vdGlmeUNoYW5nZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXQoZSwib25DaGFuZ2VNb250aFllYXIiKTt0JiZ0LmFwcGx5KGUuaW5wdXQ/ZS5pbnB1dFswXTpudWxsLFtlLnNlbGVjdGVkWWVhcixlLnNlbGVjdGVkTW9udGgrMSxlXSl9LF9nZXROdW1iZXJPZk1vbnRoczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXQoZSwibnVtYmVyT2ZNb250aHMiKTtyZXR1cm4gbnVsbD09dD9bMSwxXToibnVtYmVyIj09dHlwZW9mIHQ/WzEsdF06dH0sX2dldE1pbk1heERhdGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZGV0ZXJtaW5lRGF0ZShlLHRoaXMuX2dldChlLHQrIkRhdGUiKSxudWxsKX0sX2dldERheXNJbk1vbnRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDMyLXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUsdCwzMikpLmdldERhdGUoKX0sX2dldEZpcnN0RGF5T2ZNb250aDpmdW5jdGlvbihlLHQpe3JldHVybiBuZXcgRGF0ZShlLHQsMSkuZ2V0RGF5KCl9LF9jYW5BZGp1c3RNb250aDpmdW5jdGlvbihlLHQsaSxzKXt2YXIgYT10aGlzLl9nZXROdW1iZXJPZk1vbnRocyhlKSxuPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGkscysoMD50P3Q6YVswXSphWzFdKSwxKSk7cmV0dXJuIDA+dCYmbi5zZXREYXRlKHRoaXMuX2dldERheXNJbk1vbnRoKG4uZ2V0RnVsbFllYXIoKSxuLmdldE1vbnRoKCkpKSx0aGlzLl9pc0luUmFuZ2UoZSxuKX0sX2lzSW5SYW5nZTpmdW5jdGlvbihlLHQpe3ZhciBpLHMsYT10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1pbiIpLG49dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtYXgiKSxyPW51bGwsbz1udWxsLGg9dGhpcy5fZ2V0KGUsInllYXJSYW5nZSIpO3JldHVybiBoJiYoaT1oLnNwbGl0KCI6Iikscz0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCkscj1wYXJzZUludChpWzBdLDEwKSxvPXBhcnNlSW50KGlbMV0sMTApLGlbMF0ubWF0Y2goL1srXC1dLiovKSYmKHIrPXMpLGlbMV0ubWF0Y2goL1srXC1dLiovKSYmKG8rPXMpKSwoIWF8fHQuZ2V0VGltZSgpPj1hLmdldFRpbWUoKSkmJighbnx8dC5nZXRUaW1lKCk8PW4uZ2V0VGltZSgpKSYmKCFyfHx0LmdldEZ1bGxZZWFyKCk+PXIpJiYoIW98fG8+PXQuZ2V0RnVsbFllYXIoKSl9LF9nZXRGb3JtYXRDb25maWc6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0KGUsInNob3J0WWVhckN1dG9mZiIpO3JldHVybiB0PSJzdHJpbmciIT10eXBlb2YgdD90OihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSUxMDArcGFyc2VJbnQodCwxMCkse3Nob3J0WWVhckN1dG9mZjp0LGRheU5hbWVzU2hvcnQ6dGhpcy5fZ2V0KGUsImRheU5hbWVzU2hvcnQiKSxkYXlOYW1lczp0aGlzLl9nZXQoZSwiZGF5TmFtZXMiKSxtb250aE5hbWVzU2hvcnQ6dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXNTaG9ydCIpLG1vbnRoTmFtZXM6dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXMiKX19LF9mb3JtYXREYXRlOmZ1bmN0aW9uKGUsdCxpLHMpe3R8fChlLmN1cnJlbnREYXk9ZS5zZWxlY3RlZERheSxlLmN1cnJlbnRNb250aD1lLnNlbGVjdGVkTW9udGgsZS5jdXJyZW50WWVhcj1lLnNlbGVjdGVkWWVhcik7dmFyIGE9dD8ib2JqZWN0Ij09dHlwZW9mIHQ/dDp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShzLGksdCkpOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KSk7cmV0dXJuIHRoaXMuZm9ybWF0RGF0ZSh0aGlzLl9nZXQoZSwiZGF0ZUZvcm1hdCIpLGEsdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKX19KSxlLmZuLmRhdGVwaWNrZXI9ZnVuY3Rpb24odCl7aWYoIXRoaXMubGVuZ3RoKXJldHVybiB0aGlzO2UuZGF0ZXBpY2tlci5pbml0aWFsaXplZHx8KGUoZG9jdW1lbnQpLm1vdXNlZG93bihlLmRhdGVwaWNrZXIuX2NoZWNrRXh0ZXJuYWxDbGljayksZS5kYXRlcGlja2VyLmluaXRpYWxpemVkPSEwKSwwPT09ZSgiIyIrZS5kYXRlcGlja2VyLl9tYWluRGl2SWQpLmxlbmd0aCYmZSgiYm9keSIpLmFwcGVuZChlLmRhdGVwaWNrZXIuZHBEaXYpO3ZhciBpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHR8fCJpc0Rpc2FibGVkIiE9PXQmJiJnZXREYXRlIiE9PXQmJiJ3aWRnZXQiIT09dD8ib3B0aW9uIj09PXQmJjI9PT1hcmd1bWVudHMubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIGFyZ3VtZW50c1sxXT9lLmRhdGVwaWNrZXJbIl8iK3QrIkRhdGVwaWNrZXIiXS5hcHBseShlLmRhdGVwaWNrZXIsW3RoaXNbMF1dLmNvbmNhdChpKSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7InN0cmluZyI9PXR5cGVvZiB0P2UuZGF0ZXBpY2tlclsiXyIrdCsiRGF0ZXBpY2tlciJdLmFwcGx5KGUuZGF0ZXBpY2tlcixbdGhpc10uY29uY2F0KGkpKTplLmRhdGVwaWNrZXIuX2F0dGFjaERhdGVwaWNrZXIodGhpcyx0KX0pOmUuZGF0ZXBpY2tlclsiXyIrdCsiRGF0ZXBpY2tlciJdLmFwcGx5KGUuZGF0ZXBpY2tlcixbdGhpc1swXV0uY29uY2F0KGkpKX0sZS5kYXRlcGlja2VyPW5ldyBhLGUuZGF0ZXBpY2tlci5pbml0aWFsaXplZD0hMSxlLmRhdGVwaWNrZXIudXVpZD0obmV3IERhdGUpLmdldFRpbWUoKSxlLmRhdGVwaWNrZXIudmVyc2lvbj0iMS4xMS40IixlLmRhdGVwaWNrZXJ9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanF1ZXJ5LmNvb2tpZS5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnkuY29va2llLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNzE5MDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanF1ZXJ5LmNvb2tpZS5qcwpAQCAtMCwwICsxLDExNyBAQAorLyohCisgKiBqUXVlcnkgQ29va2llIFBsdWdpbiB2MS40LjAKKyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYXJoYXJ0bC9qcXVlcnktY29va2llCisgKgorICogQ29weXJpZ2h0IDIwMTMgS2xhdXMgSGFydGwKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQorICovCisoZnVuY3Rpb24gKGZhY3RvcnkpIHsKKwlpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7CisJCS8vIEFNRC4gUmVnaXN0ZXIgYXMgYW5vbnltb3VzIG1vZHVsZS4KKwkJZGVmaW5lKFsnanF1ZXJ5J10sIGZhY3RvcnkpOworCX0gZWxzZSB7CisJCS8vIEJyb3dzZXIgZ2xvYmFscy4KKwkJZmFjdG9yeShqUXVlcnkpOworCX0KK30oZnVuY3Rpb24gKCQpIHsKKworCXZhciBwbHVzZXMgPSAvXCsvZzsKKworCWZ1bmN0aW9uIGVuY29kZShzKSB7CisJCXJldHVybiBjb25maWcucmF3ID8gcyA6IGVuY29kZVVSSUNvbXBvbmVudChzKTsKKwl9CisKKwlmdW5jdGlvbiBkZWNvZGUocykgeworCQlyZXR1cm4gY29uZmlnLnJhdyA/IHMgOiBkZWNvZGVVUklDb21wb25lbnQocyk7CisJfQorCisJZnVuY3Rpb24gc3RyaW5naWZ5Q29va2llVmFsdWUodmFsdWUpIHsKKwkJcmV0dXJuIGVuY29kZShjb25maWcuanNvbiA/IEpTT04uc3RyaW5naWZ5KHZhbHVlKSA6IFN0cmluZyh2YWx1ZSkpOworCX0KKworCWZ1bmN0aW9uIHBhcnNlQ29va2llVmFsdWUocykgeworCQlpZiAocy5pbmRleE9mKCciJykgPT09IDApIHsKKwkJCS8vIFRoaXMgaXMgYSBxdW90ZWQgY29va2llIGFzIGFjY29yZGluZyB0byBSRkMyMDY4LCB1bmVzY2FwZS4uLgorCQkJcyA9IHMuc2xpY2UoMSwgLTEpLnJlcGxhY2UoL1xcIi9nLCAnIicpLnJlcGxhY2UoL1xcXFwvZywgJ1xcJyk7CisJCX0KKworCQl0cnkgeworCQkJLy8gUmVwbGFjZSBzZXJ2ZXItc2lkZSB3cml0dGVuIHBsdXNlcyB3aXRoIHNwYWNlcy4KKwkJCS8vIElmIHdlIGNhbid0IGRlY29kZSB0aGUgY29va2llLCBpZ25vcmUgaXQsIGl0J3MgdW51c2FibGUuCisJCQlzID0gZGVjb2RlVVJJQ29tcG9uZW50KHMucmVwbGFjZShwbHVzZXMsICcgJykpOworCQl9IGNhdGNoKGUpIHsKKwkJCXJldHVybjsKKwkJfQorCisJCXRyeSB7CisJCQkvLyBJZiB3ZSBjYW4ndCBwYXJzZSB0aGUgY29va2llLCBpZ25vcmUgaXQsIGl0J3MgdW51c2FibGUuCisJCQlyZXR1cm4gY29uZmlnLmpzb24gPyBKU09OLnBhcnNlKHMpIDogczsKKwkJfSBjYXRjaChlKSB7fQorCX0KKworCWZ1bmN0aW9uIHJlYWQocywgY29udmVydGVyKSB7CisJCXZhciB2YWx1ZSA9IGNvbmZpZy5yYXcgPyBzIDogcGFyc2VDb29raWVWYWx1ZShzKTsKKwkJcmV0dXJuICQuaXNGdW5jdGlvbihjb252ZXJ0ZXIpID8gY29udmVydGVyKHZhbHVlKSA6IHZhbHVlOworCX0KKworCXZhciBjb25maWcgPSAkLmNvb2tpZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBvcHRpb25zKSB7CisKKwkJLy8gV3JpdGUKKwkJaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgISQuaXNGdW5jdGlvbih2YWx1ZSkpIHsKKwkJCW9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgY29uZmlnLmRlZmF1bHRzLCBvcHRpb25zKTsKKworCQkJaWYgKHR5cGVvZiBvcHRpb25zLmV4cGlyZXMgPT09ICdudW1iZXInKSB7CisJCQkJdmFyIGRheXMgPSBvcHRpb25zLmV4cGlyZXMsIHQgPSBvcHRpb25zLmV4cGlyZXMgPSBuZXcgRGF0ZSgpOworCQkJCXQuc2V0RGF0ZSh0LmdldERhdGUoKSArIGRheXMpOworCQkJfQorCisJCQlyZXR1cm4gKGRvY3VtZW50LmNvb2tpZSA9IFsKKwkJCQllbmNvZGUoa2V5KSwgJz0nLCBzdHJpbmdpZnlDb29raWVWYWx1ZSh2YWx1ZSksCisJCQkJb3B0aW9ucy5leHBpcmVzID8gJzsgZXhwaXJlcz0nICsgb3B0aW9ucy5leHBpcmVzLnRvVVRDU3RyaW5nKCkgOiAnJywgLy8gdXNlIGV4cGlyZXMgYXR0cmlidXRlLCBtYXgtYWdlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgSUUKKwkJCQlvcHRpb25zLnBhdGggICAgPyAnOyBwYXRoPScgKyBvcHRpb25zLnBhdGggOiAnJywKKwkJCQlvcHRpb25zLmRvbWFpbiAgPyAnOyBkb21haW49JyArIG9wdGlvbnMuZG9tYWluIDogJycsCisJCQkJb3B0aW9ucy5zZWN1cmUgID8gJzsgc2VjdXJlJyA6ICcnCisJCQldLmpvaW4oJycpKTsKKwkJfQorCisJCS8vIFJlYWQKKworCQl2YXIgcmVzdWx0ID0ga2V5ID8gdW5kZWZpbmVkIDoge307CisKKwkJLy8gVG8gcHJldmVudCB0aGUgZm9yIGxvb3AgaW4gdGhlIGZpcnN0IHBsYWNlIGFzc2lnbiBhbiBlbXB0eSBhcnJheQorCQkvLyBpbiBjYXNlIHRoZXJlIGFyZSBubyBjb29raWVzIGF0IGFsbC4gQWxzbyBwcmV2ZW50cyBvZGQgcmVzdWx0IHdoZW4KKwkJLy8gY2FsbGluZyAkLmNvb2tpZSgpLgorCQl2YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZSA/IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOyAnKSA6IFtdOworCisJCWZvciAodmFyIGkgPSAwLCBsID0gY29va2llcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKwkJCXZhciBwYXJ0cyA9IGNvb2tpZXNbaV0uc3BsaXQoJz0nKTsKKwkJCXZhciBuYW1lID0gZGVjb2RlKHBhcnRzLnNoaWZ0KCkpOworCQkJdmFyIGNvb2tpZSA9IHBhcnRzLmpvaW4oJz0nKTsKKworCQkJaWYgKGtleSAmJiBrZXkgPT09IG5hbWUpIHsKKwkJCQkvLyBJZiBzZWNvbmQgYXJndW1lbnQgKHZhbHVlKSBpcyBhIGZ1bmN0aW9uIGl0J3MgYSBjb252ZXJ0ZXIuLi4KKwkJCQlyZXN1bHQgPSByZWFkKGNvb2tpZSwgdmFsdWUpOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvLyBQcmV2ZW50IHN0b3JpbmcgYSBjb29raWUgdGhhdCB3ZSBjb3VsZG4ndCBkZWNvZGUuCisJCQlpZiAoIWtleSAmJiAoY29va2llID0gcmVhZChjb29raWUpKSAhPT0gdW5kZWZpbmVkKSB7CisJCQkJcmVzdWx0W25hbWVdID0gY29va2llOworCQkJfQorCQl9CisKKwkJcmV0dXJuIHJlc3VsdDsKKwl9OworCisJY29uZmlnLmRlZmF1bHRzID0ge307CisKKwkkLnJlbW92ZUNvb2tpZSA9IGZ1bmN0aW9uIChrZXksIG9wdGlvbnMpIHsKKwkJaWYgKCQuY29va2llKGtleSkgIT09IHVuZGVmaW5lZCkgeworCQkJLy8gTXVzdCBub3QgYWx0ZXIgb3B0aW9ucywgdGh1cyBleHRlbmRpbmcgYSBmcmVzaCBvYmplY3QuLi4KKwkJCSQuY29va2llKGtleSwgJycsICQuZXh0ZW5kKHt9LCBvcHRpb25zLCB7IGV4cGlyZXM6IC0xIH0pKTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9OworCit9KSk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanF1ZXJ5LnRyZWV0YWJsZS5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnkudHJlZXRhYmxlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZTc0MjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanF1ZXJ5LnRyZWV0YWJsZS5qcwpAQCAtMCwwICsxLDYyMCBAQAorLyoKKyAqIGpRdWVyeSB0cmVldGFibGUgUGx1Z2luIDMuMS4wCisgKiBodHRwOi8vbHVkby5jdWJpY3BodXNlLm5sL2pxdWVyeS10cmVldGFibGUKKyAqCisgKiBDb3B5cmlnaHQgMjAxMywgTHVkbyB2YW4gZGVuIEJvb20KKyAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLgorICovCisoZnVuY3Rpb24oKSB7CisgIHZhciAkLCBOb2RlLCBUcmVlLCBtZXRob2RzOworCisgICQgPSBqUXVlcnk7CisKKyAgTm9kZSA9IChmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBOb2RlKHJvdywgdHJlZSwgc2V0dGluZ3MpIHsKKyAgICAgIHZhciBwYXJlbnRJZDsKKworICAgICAgdGhpcy5yb3cgPSByb3c7CisgICAgICB0aGlzLnRyZWUgPSB0cmVlOworICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzOworCisgICAgICAvLyBUT0RPIEVuc3VyZSBpZC9wYXJlbnRJZCBpcyBhbHdheXMgYSBzdHJpbmcgKG5vdCBpbnQpCisgICAgICB0aGlzLmlkID0gdGhpcy5yb3cuZGF0YSh0aGlzLnNldHRpbmdzLm5vZGVJZEF0dHIpOworCisgICAgICAvLyBUT0RPIE1vdmUgdGhpcyB0byBhIHNldFBhcmVudElkIGZ1bmN0aW9uPworICAgICAgcGFyZW50SWQgPSB0aGlzLnJvdy5kYXRhKHRoaXMuc2V0dGluZ3MucGFyZW50SWRBdHRyKTsKKyAgICAgIGlmIChwYXJlbnRJZCAhPSBudWxsICYmIHBhcmVudElkICE9PSAiIikgeworICAgICAgICB0aGlzLnBhcmVudElkID0gcGFyZW50SWQ7CisgICAgICB9CisKKyAgICAgIHRoaXMudHJlZUNlbGwgPSAkKHRoaXMucm93LmNoaWxkcmVuKHRoaXMuc2V0dGluZ3MuY29sdW1uRWxUeXBlKVt0aGlzLnNldHRpbmdzLmNvbHVtbl0pOworICAgICAgdGhpcy5leHBhbmRlciA9ICQodGhpcy5zZXR0aW5ncy5leHBhbmRlclRlbXBsYXRlKTsKKyAgICAgIHRoaXMuaW5kZW50ZXIgPSAkKHRoaXMuc2V0dGluZ3MuaW5kZW50ZXJUZW1wbGF0ZSk7CisgICAgICB0aGlzLmNoaWxkcmVuID0gW107CisgICAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7CisgICAgICB0aGlzLnRyZWVDZWxsLnByZXBlbmQodGhpcy5pbmRlbnRlcik7CisgICAgfQorCisgICAgTm9kZS5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihjaGlsZCkgeworICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLmFuY2VzdG9ycyA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGFuY2VzdG9ycywgbm9kZTsKKyAgICAgIG5vZGUgPSB0aGlzOworICAgICAgYW5jZXN0b3JzID0gW107CisgICAgICB3aGlsZSAobm9kZSA9IG5vZGUucGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGFuY2VzdG9ycy5wdXNoKG5vZGUpOworICAgICAgfQorICAgICAgcmV0dXJuIGFuY2VzdG9yczsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUuY29sbGFwc2UgPSBmdW5jdGlvbigpIHsKKyAgICAgIGlmICh0aGlzLmNvbGxhcHNlZCgpKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgICAgfQorCisgICAgICB0aGlzLnJvdy5yZW1vdmVDbGFzcygiZXhwYW5kZWQiKS5hZGRDbGFzcygiY29sbGFwc2VkIik7CisKKyAgICAgIHRoaXMuX2hpZGVDaGlsZHJlbigpOworICAgICAgdGhpcy5leHBhbmRlci5hdHRyKCJ0aXRsZSIsIHRoaXMuc2V0dGluZ3Muc3RyaW5nRXhwYW5kKTsKKworICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQgJiYgdGhpcy5zZXR0aW5ncy5vbk5vZGVDb2xsYXBzZSAhPSBudWxsKSB7CisgICAgICAgIHRoaXMuc2V0dGluZ3Mub25Ob2RlQ29sbGFwc2UuYXBwbHkodGhpcyk7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0aGlzOworICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS5jb2xsYXBzZWQgPSBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiB0aGlzLnJvdy5oYXNDbGFzcygiY29sbGFwc2VkIik7CisgICAgfTsKKworICAgIC8vIFRPRE8gZGVzdHJveTogcmVtb3ZlIGV2ZW50IGhhbmRsZXJzLCBleHBhbmRlciwgaW5kZW50ZXIsIGV0Yy4KKworICAgIE5vZGUucHJvdG90eXBlLmV4cGFuZCA9IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMuZXhwYW5kZWQoKSkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgIH0KKworICAgICAgdGhpcy5yb3cucmVtb3ZlQ2xhc3MoImNvbGxhcHNlZCIpLmFkZENsYXNzKCJleHBhbmRlZCIpOworCisgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCAmJiB0aGlzLnNldHRpbmdzLm9uTm9kZUV4cGFuZCAhPSBudWxsKSB7CisgICAgICAgIHRoaXMuc2V0dGluZ3Mub25Ob2RlRXhwYW5kLmFwcGx5KHRoaXMpOworICAgICAgfQorCisgICAgICBpZiAoJCh0aGlzLnJvdykuaXMoIjp2aXNpYmxlIikpIHsKKyAgICAgICAgdGhpcy5fc2hvd0NoaWxkcmVuKCk7CisgICAgICB9CisKKyAgICAgIHRoaXMuZXhwYW5kZXIuYXR0cigidGl0bGUiLCB0aGlzLnNldHRpbmdzLnN0cmluZ0NvbGxhcHNlKTsKKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLmV4cGFuZGVkID0gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5yb3cuaGFzQ2xhc3MoImV4cGFuZGVkIik7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbigpIHsKKyAgICAgIHRoaXMuX2hpZGVDaGlsZHJlbigpOworICAgICAgdGhpcy5yb3cuaGlkZSgpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLmlzQnJhbmNoTm9kZSA9IGZ1bmN0aW9uKCkgeworICAgICAgaWYodGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwIHx8IHRoaXMucm93LmRhdGEodGhpcy5zZXR0aW5ncy5icmFuY2hBdHRyKSA9PT0gdHJ1ZSkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUudXBkYXRlQnJhbmNoTGVhZkNsYXNzID0gZnVuY3Rpb24oKXsKKyAgICAgIHRoaXMucm93LnJlbW92ZUNsYXNzKCdicmFuY2gnKTsKKyAgICAgIHRoaXMucm93LnJlbW92ZUNsYXNzKCdsZWFmJyk7CisgICAgICB0aGlzLnJvdy5hZGRDbGFzcyh0aGlzLmlzQnJhbmNoTm9kZSgpID8gJ2JyYW5jaCcgOiAnbGVhZicpOworICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS5sZXZlbCA9IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIHRoaXMuYW5jZXN0b3JzKCkubGVuZ3RoOworICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS5wYXJlbnROb2RlID0gZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy5wYXJlbnRJZCAhPSBudWxsKSB7CisgICAgICAgIHJldHVybiB0aGlzLnRyZWVbdGhpcy5wYXJlbnRJZF07CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbihjaGlsZCkgeworICAgICAgdmFyIGkgPSAkLmluQXJyYXkoY2hpbGQsIHRoaXMuY2hpbGRyZW4pOworICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGksIDEpCisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGhhbmRsZXIsCisgICAgICAgICAgc2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLAorICAgICAgICAgIHRhcmdldDsKKworICAgICAgaWYgKHNldHRpbmdzLmV4cGFuZGFibGUgPT09IHRydWUgJiYgdGhpcy5pc0JyYW5jaE5vZGUoKSkgeworICAgICAgICBoYW5kbGVyID0gZnVuY3Rpb24oZSkgeworICAgICAgICAgICQodGhpcykucGFyZW50cygidGFibGUiKS50cmVldGFibGUoIm5vZGUiLCAkKHRoaXMpLnBhcmVudHMoInRyIikuZGF0YShzZXR0aW5ncy5ub2RlSWRBdHRyKSkudG9nZ2xlKCk7CisgICAgICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmluZGVudGVyLmh0bWwodGhpcy5leHBhbmRlcik7CisgICAgICAgIHRhcmdldCA9IHNldHRpbmdzLmNsaWNrYWJsZU5vZGVOYW1lcyA9PT0gdHJ1ZSA/IHRoaXMudHJlZUNlbGwgOiB0aGlzLmV4cGFuZGVyOworCisgICAgICAgIHRhcmdldC5vZmYoImNsaWNrLnRyZWV0YWJsZSIpLm9uKCJjbGljay50cmVldGFibGUiLCBoYW5kbGVyKTsKKyAgICAgICAgdGFyZ2V0Lm9mZigia2V5ZG93bi50cmVldGFibGUiKS5vbigia2V5ZG93bi50cmVldGFibGUiLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMykgeworICAgICAgICAgICAgaGFuZGxlci5hcHBseSh0aGlzLCBbZV0pOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9CisKKyAgICAgIHRoaXMuaW5kZW50ZXJbMF0uc3R5bGUucGFkZGluZ0xlZnQgPSAiIiArICh0aGlzLmxldmVsKCkgKiBzZXR0aW5ncy5pbmRlbnQpICsgInB4IjsKKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLnJldmVhbCA9IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMucGFyZW50SWQgIT0gbnVsbCkgeworICAgICAgICB0aGlzLnBhcmVudE5vZGUoKS5yZXZlYWwoKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzLmV4cGFuZCgpOworICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbihub2RlKSB7CisgICAgICBpZiAodGhpcy5wYXJlbnRJZCAhPSBudWxsKSB7CisgICAgICAgIHRoaXMudHJlZVt0aGlzLnBhcmVudElkXS5yZW1vdmVDaGlsZCh0aGlzKTsKKyAgICAgIH0KKyAgICAgIHRoaXMucGFyZW50SWQgPSBub2RlLmlkOworICAgICAgdGhpcy5yb3cuZGF0YSh0aGlzLnNldHRpbmdzLnBhcmVudElkQXR0ciwgbm9kZS5pZCk7CisgICAgICByZXR1cm4gbm9kZS5hZGRDaGlsZCh0aGlzKTsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7CisgICAgICAgIHRoaXMuX2luaXRpYWxpemUoKTsKKyAgICAgIH0KKyAgICAgIHRoaXMucm93LnNob3coKTsKKyAgICAgIGlmICh0aGlzLmV4cGFuZGVkKCkpIHsKKyAgICAgICAgdGhpcy5fc2hvd0NoaWxkcmVuKCk7CisgICAgICB9CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy5leHBhbmRlZCgpKSB7CisgICAgICAgIHRoaXMuY29sbGFwc2UoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMuZXhwYW5kKCk7CisgICAgICB9CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUuX2hpZGVDaGlsZHJlbiA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGNoaWxkLCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7CisgICAgICBfcmVmID0gdGhpcy5jaGlsZHJlbjsKKyAgICAgIF9yZXN1bHRzID0gW107CisgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgY2hpbGQgPSBfcmVmW19pXTsKKyAgICAgICAgX3Jlc3VsdHMucHVzaChjaGlsZC5oaWRlKCkpOworICAgICAgfQorICAgICAgcmV0dXJuIF9yZXN1bHRzOworICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS5faW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIHNldHRpbmdzID0gdGhpcy5zZXR0aW5nczsKKworICAgICAgdGhpcy5yZW5kZXIoKTsKKworICAgICAgaWYgKHNldHRpbmdzLmV4cGFuZGFibGUgPT09IHRydWUgJiYgc2V0dGluZ3MuaW5pdGlhbFN0YXRlID09PSAiY29sbGFwc2VkIikgeworICAgICAgICB0aGlzLmNvbGxhcHNlKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLmV4cGFuZCgpOworICAgICAgfQorCisgICAgICBpZiAoc2V0dGluZ3Mub25Ob2RlSW5pdGlhbGl6ZWQgIT0gbnVsbCkgeworICAgICAgICBzZXR0aW5ncy5vbk5vZGVJbml0aWFsaXplZC5hcHBseSh0aGlzKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS5fc2hvd0NoaWxkcmVuID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgY2hpbGQsIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0czsKKyAgICAgIF9yZWYgPSB0aGlzLmNoaWxkcmVuOworICAgICAgX3Jlc3VsdHMgPSBbXTsKKyAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICBjaGlsZCA9IF9yZWZbX2ldOworICAgICAgICBfcmVzdWx0cy5wdXNoKGNoaWxkLnNob3coKSk7CisgICAgICB9CisgICAgICByZXR1cm4gX3Jlc3VsdHM7CisgICAgfTsKKworICAgIHJldHVybiBOb2RlOworICB9KSgpOworCisgIFRyZWUgPSAoZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gVHJlZSh0YWJsZSwgc2V0dGluZ3MpIHsKKyAgICAgIHRoaXMudGFibGUgPSB0YWJsZTsKKyAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5nczsKKyAgICAgIHRoaXMudHJlZSA9IHt9OworCisgICAgICAvLyBDYWNoZSB0aGUgbm9kZXMgYW5kIHJvb3RzIGluIHNpbXBsZSBhcnJheXMgZm9yIHF1aWNrIGFjY2Vzcy9pdGVyYXRpb24KKyAgICAgIHRoaXMubm9kZXMgPSBbXTsKKyAgICAgIHRoaXMucm9vdHMgPSBbXTsKKyAgICB9CisKKyAgICBUcmVlLnByb3RvdHlwZS5jb2xsYXBzZUFsbCA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIG5vZGUsIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0czsKKyAgICAgIF9yZWYgPSB0aGlzLm5vZGVzOworICAgICAgX3Jlc3VsdHMgPSBbXTsKKyAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICBub2RlID0gX3JlZltfaV07CisgICAgICAgIF9yZXN1bHRzLnB1c2gobm9kZS5jb2xsYXBzZSgpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBfcmVzdWx0czsKKyAgICB9OworCisgICAgVHJlZS5wcm90b3R5cGUuZXhwYW5kQWxsID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgbm9kZSwgX2ksIF9sZW4sIF9yZWYsIF9yZXN1bHRzOworICAgICAgX3JlZiA9IHRoaXMubm9kZXM7CisgICAgICBfcmVzdWx0cyA9IFtdOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIG5vZGUgPSBfcmVmW19pXTsKKyAgICAgICAgX3Jlc3VsdHMucHVzaChub2RlLmV4cGFuZCgpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBfcmVzdWx0czsKKyAgICB9OworCisgICAgVHJlZS5wcm90b3R5cGUuZmluZExhc3ROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgIGlmIChub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZmluZExhc3ROb2RlKG5vZGUuY2hpbGRyZW5bbm9kZS5jaGlsZHJlbi5sZW5ndGggLSAxXSk7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgIH0KKyAgICB9OworCisgICAgVHJlZS5wcm90b3R5cGUubG9hZFJvd3MgPSBmdW5jdGlvbihyb3dzKSB7CisgICAgICB2YXIgbm9kZSwgcm93LCBpOworCisgICAgICBpZiAocm93cyAhPSBudWxsKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgcm93ID0gJChyb3dzW2ldKTsKKworICAgICAgICAgIGlmIChyb3cuZGF0YSh0aGlzLnNldHRpbmdzLm5vZGVJZEF0dHIpICE9IG51bGwpIHsKKyAgICAgICAgICAgIG5vZGUgPSBuZXcgTm9kZShyb3csIHRoaXMudHJlZSwgdGhpcy5zZXR0aW5ncyk7CisgICAgICAgICAgICB0aGlzLm5vZGVzLnB1c2gobm9kZSk7CisgICAgICAgICAgICB0aGlzLnRyZWVbbm9kZS5pZF0gPSBub2RlOworCisgICAgICAgICAgICBpZiAobm9kZS5wYXJlbnRJZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgIHRoaXMudHJlZVtub2RlLnBhcmVudElkXS5hZGRDaGlsZChub2RlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHRoaXMucm9vdHMucHVzaChub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbm9kZSA9IHRoaXMubm9kZXNbaV0udXBkYXRlQnJhbmNoTGVhZkNsYXNzKCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0aGlzOworICAgIH07CisKKyAgICBUcmVlLnByb3RvdHlwZS5tb3ZlID0gZnVuY3Rpb24obm9kZSwgZGVzdGluYXRpb24pIHsKKyAgICAgIC8vIENvbmRpdGlvbnM6CisgICAgICAvLyAxOiArbm9kZSsgc2hvdWxkIG5vdCBiZSBpbnNlcnRlZCBhcyBhIGNoaWxkIG9mICtub2RlKyBpdHNlbGYuCisgICAgICAvLyAyOiArZGVzdGluYXRpb24rIHNob3VsZCBub3QgYmUgdGhlIHNhbWUgYXMgK25vZGUrJ3MgY3VycmVudCBwYXJlbnQgKHRoaXMKKyAgICAgIC8vICAgIHByZXZlbnRzICtub2RlKyBmcm9tIGJlaW5nIG1vdmVkIHRvIHRoZSBzYW1lIGxvY2F0aW9uIHdoZXJlIGl0IGFscmVhZHkKKyAgICAgIC8vICAgIGlzKS4KKyAgICAgIC8vIDM6ICtub2RlKyBzaG91bGQgbm90IGJlIGluc2VydGVkIGluIGEgbG9jYXRpb24gaW4gYSBicmFuY2ggaWYgdGhpcyB3b3VsZAorICAgICAgLy8gICAgcmVzdWx0IGluICtub2RlKyBiZWluZyBhbiBhbmNlc3RvciBvZiBpdHNlbGYuCisgICAgICB2YXIgbm9kZVBhcmVudCA9IG5vZGUucGFyZW50Tm9kZSgpOworICAgICAgaWYgKG5vZGUgIT09IGRlc3RpbmF0aW9uICYmIGRlc3RpbmF0aW9uLmlkICE9PSBub2RlLnBhcmVudElkICYmICQuaW5BcnJheShub2RlLCBkZXN0aW5hdGlvbi5hbmNlc3RvcnMoKSkgPT09IC0xKSB7CisgICAgICAgIG5vZGUuc2V0UGFyZW50KGRlc3RpbmF0aW9uKTsKKyAgICAgICAgdGhpcy5fbW92ZVJvd3Mobm9kZSwgZGVzdGluYXRpb24pOworCisgICAgICAgIC8vIFJlLXJlbmRlciBwYXJlbnROb2RlIGlmIHRoaXMgaXMgaXRzIGZpcnN0IGNoaWxkIG5vZGUsIGFuZCB0aGVyZWZvcmUKKyAgICAgICAgLy8gZG9lc24ndCBoYXZlIHRoZSBleHBhbmRlciB5ZXQuCisgICAgICAgIGlmIChub2RlLnBhcmVudE5vZGUoKS5jaGlsZHJlbi5sZW5ndGggPT09IDEpIHsKKyAgICAgICAgICBub2RlLnBhcmVudE5vZGUoKS5yZW5kZXIoKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZihub2RlUGFyZW50KXsKKyAgICAgICAgbm9kZVBhcmVudC51cGRhdGVCcmFuY2hMZWFmQ2xhc3MoKTsKKyAgICAgIH0KKyAgICAgIGlmKG5vZGUucGFyZW50Tm9kZSgpKXsKKyAgICAgICAgbm9kZS5wYXJlbnROb2RlKCkudXBkYXRlQnJhbmNoTGVhZkNsYXNzKCk7CisgICAgICB9CisgICAgICBub2RlLnVwZGF0ZUJyYW5jaExlYWZDbGFzcygpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKworICAgIFRyZWUucHJvdG90eXBlLnJlbW92ZU5vZGUgPSBmdW5jdGlvbihub2RlKSB7CisgICAgICAvLyBSZWN1cnNpdmVseSByZW1vdmUgYWxsIGRlc2NlbmRhbnRzIG9mICtub2RlKworICAgICAgdGhpcy51bmxvYWRCcmFuY2gobm9kZSk7CisKKyAgICAgIC8vIFJlbW92ZSBub2RlIGZyb20gRE9NICg8dHI+KQorICAgICAgbm9kZS5yb3cucmVtb3ZlKCk7CisKKyAgICAgIC8vIENsZWFuIHVwIFRyZWUgb2JqZWN0IChzbyBOb2RlIG9iamVjdHMgYXJlIEdDLWVkKQorICAgICAgZGVsZXRlIHRoaXMudHJlZVtub2RlLmlkXTsKKyAgICAgIHRoaXMubm9kZXMuc3BsaWNlKCQuaW5BcnJheShub2RlLCB0aGlzLm5vZGVzKSwgMSk7CisgICAgfQorCisgICAgVHJlZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgcm9vdCwgX2ksIF9sZW4sIF9yZWY7CisgICAgICBfcmVmID0gdGhpcy5yb290czsKKyAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICByb290ID0gX3JlZltfaV07CisKKyAgICAgICAgLy8gTmFtaW5nIGlzIGNvbmZ1c2luZyAoc2hvdy9yZW5kZXIpLiBJIGRvIG5vdCBjYWxsIHJlbmRlciBvbiBub2RlIGZyb20KKyAgICAgICAgLy8gaGVyZS4KKyAgICAgICAgcm9vdC5zaG93KCk7CisgICAgICB9CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgVHJlZS5wcm90b3R5cGUuc29ydEJyYW5jaCA9IGZ1bmN0aW9uKG5vZGUsIHNvcnRGdW4pIHsKKyAgICAgIC8vIEZpcnN0IHNvcnQgaW50ZXJuYWwgYXJyYXkgb2YgY2hpbGRyZW4KKyAgICAgIG5vZGUuY2hpbGRyZW4uc29ydChzb3J0RnVuKTsKKworICAgICAgLy8gTmV4dCByZW5kZXIgcm93cyBpbiBjb3JyZWN0IG9yZGVyIG9uIHBhZ2UKKyAgICAgIHRoaXMuX3NvcnRDaGlsZFJvd3Mobm9kZSk7CisKKyAgICAgIHJldHVybiB0aGlzOworICAgIH07CisKKyAgICBUcmVlLnByb3RvdHlwZS51bmxvYWRCcmFuY2ggPSBmdW5jdGlvbihub2RlKSB7CisgICAgICB2YXIgY2hpbGRyZW4sIGk7CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHRoaXMucmVtb3ZlTm9kZShub2RlLmNoaWxkcmVuW2ldKTsKKyAgICAgIH0KKworICAgICAgLy8gUmVzZXQgbm9kZSdzIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4KKyAgICAgIG5vZGUuY2hpbGRyZW4gPSBbXTsKKworICAgICAgbm9kZS51cGRhdGVCcmFuY2hMZWFmQ2xhc3MoKTsKKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKworICAgIFRyZWUucHJvdG90eXBlLl9tb3ZlUm93cyA9IGZ1bmN0aW9uKG5vZGUsIGRlc3RpbmF0aW9uKSB7CisgICAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLCBpOworCisgICAgICBub2RlLnJvdy5pbnNlcnRBZnRlcihkZXN0aW5hdGlvbi5yb3cpOworICAgICAgbm9kZS5yZW5kZXIoKTsKKworICAgICAgLy8gTG9vcCBiYWNrd2FyZHMgdGhyb3VnaCBjaGlsZHJlbiB0byBoYXZlIHRoZW0gZW5kIHVwIG9uIFVJIGluIGNvcnJlY3QKKyAgICAgIC8vIG9yZGVyIChzZWUgIzExMikKKyAgICAgIGZvciAoaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIHRoaXMuX21vdmVSb3dzKGNoaWxkcmVuW2ldLCBub2RlKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgLy8gU3BlY2lhbCBfbW92ZVJvd3MgY2FzZSwgbW92ZSBjaGlsZHJlbiB0byBpdHNlbGYgdG8gZm9yY2Ugc29ydGluZworICAgIFRyZWUucHJvdG90eXBlLl9zb3J0Q2hpbGRSb3dzID0gZnVuY3Rpb24ocGFyZW50Tm9kZSkgeworICAgICAgcmV0dXJuIHRoaXMuX21vdmVSb3dzKHBhcmVudE5vZGUsIHBhcmVudE5vZGUpOworICAgIH07CisKKyAgICByZXR1cm4gVHJlZTsKKyAgfSkoKTsKKworICAvLyBqUXVlcnkgUGx1Z2luCisgIG1ldGhvZHMgPSB7CisgICAgaW5pdDogZnVuY3Rpb24ob3B0aW9ucywgZm9yY2UpIHsKKyAgICAgIHZhciBzZXR0aW5nczsKKworICAgICAgc2V0dGluZ3MgPSAkLmV4dGVuZCh7CisgICAgICAgIGJyYW5jaEF0dHI6ICJ0dEJyYW5jaCIsCisgICAgICAgIGNsaWNrYWJsZU5vZGVOYW1lczogZmFsc2UsCisgICAgICAgIGNvbHVtbjogMCwKKyAgICAgICAgY29sdW1uRWxUeXBlOiAidGQiLCAvLyBpLmUuICd0ZCcsICd0aCcgb3IgJ3RkLHRoJworICAgICAgICBleHBhbmRhYmxlOiBmYWxzZSwKKyAgICAgICAgZXhwYW5kZXJUZW1wbGF0ZTogIjxhIGhyZWY9JyMnPiZuYnNwOzwvYT4iLAorICAgICAgICBpbmRlbnQ6IDE5LAorICAgICAgICBpbmRlbnRlclRlbXBsYXRlOiAiPHNwYW4gY2xhc3M9J2luZGVudGVyJz48L3NwYW4+IiwKKyAgICAgICAgaW5pdGlhbFN0YXRlOiAiY29sbGFwc2VkIiwKKyAgICAgICAgbm9kZUlkQXR0cjogInR0SWQiLCAvLyBtYXBzIHRvIGRhdGEtdHQtaWQKKyAgICAgICAgcGFyZW50SWRBdHRyOiAidHRQYXJlbnRJZCIsIC8vIG1hcHMgdG8gZGF0YS10dC1wYXJlbnQtaWQKKyAgICAgICAgc3RyaW5nRXhwYW5kOiAiRXhwYW5kIiwKKyAgICAgICAgc3RyaW5nQ29sbGFwc2U6ICJDb2xsYXBzZSIsCisKKyAgICAgICAgLy8gRXZlbnRzCisgICAgICAgIG9uSW5pdGlhbGl6ZWQ6IG51bGwsCisgICAgICAgIG9uTm9kZUNvbGxhcHNlOiBudWxsLAorICAgICAgICBvbk5vZGVFeHBhbmQ6IG51bGwsCisgICAgICAgIG9uTm9kZUluaXRpYWxpemVkOiBudWxsCisgICAgICB9LCBvcHRpb25zKTsKKworICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGVsID0gJCh0aGlzKSwgdHJlZTsKKworICAgICAgICBpZiAoZm9yY2UgfHwgZWwuZGF0YSgidHJlZXRhYmxlIikgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgIHRyZWUgPSBuZXcgVHJlZSh0aGlzLCBzZXR0aW5ncyk7CisgICAgICAgICAgdHJlZS5sb2FkUm93cyh0aGlzLnJvd3MpLnJlbmRlcigpOworCisgICAgICAgICAgZWwuYWRkQ2xhc3MoInRyZWV0YWJsZSIpLmRhdGEoInRyZWV0YWJsZSIsIHRyZWUpOworCisgICAgICAgICAgaWYgKHNldHRpbmdzLm9uSW5pdGlhbGl6ZWQgIT0gbnVsbCkgeworICAgICAgICAgICAgc2V0dGluZ3Mub25Jbml0aWFsaXplZC5hcHBseSh0cmVlKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZWw7CisgICAgICB9KTsKKyAgICB9LAorCisgICAgZGVzdHJveTogZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gJCh0aGlzKS5yZW1vdmVEYXRhKCJ0cmVldGFibGUiKS5yZW1vdmVDbGFzcygidHJlZXRhYmxlIik7CisgICAgICB9KTsKKyAgICB9LAorCisgICAgY29sbGFwc2VBbGw6IGZ1bmN0aW9uKCkgeworICAgICAgdGhpcy5kYXRhKCJ0cmVldGFibGUiKS5jb2xsYXBzZUFsbCgpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIGNvbGxhcHNlTm9kZTogZnVuY3Rpb24oaWQpIHsKKyAgICAgIHZhciBub2RlID0gdGhpcy5kYXRhKCJ0cmVldGFibGUiKS50cmVlW2lkXTsKKworICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgbm9kZS5jb2xsYXBzZSgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG5vZGUgJyIgKyBpZCArICInIik7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICBleHBhbmRBbGw6IGZ1bmN0aW9uKCkgeworICAgICAgdGhpcy5kYXRhKCJ0cmVldGFibGUiKS5leHBhbmRBbGwoKTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICBleHBhbmROb2RlOiBmdW5jdGlvbihpZCkgeworICAgICAgdmFyIG5vZGUgPSB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnRyZWVbaWRdOworCisgICAgICBpZiAobm9kZSkgeworICAgICAgICBpZiAoIW5vZGUuaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgICBub2RlLl9pbml0aWFsaXplKCk7CisgICAgICAgIH0KKworICAgICAgICBub2RlLmV4cGFuZCgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG5vZGUgJyIgKyBpZCArICInIik7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICBsb2FkQnJhbmNoOiBmdW5jdGlvbihub2RlLCByb3dzKSB7CisgICAgICB2YXIgc2V0dGluZ3MgPSB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnNldHRpbmdzLAorICAgICAgICAgIHRyZWUgPSB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnRyZWU7CisKKyAgICAgIC8vIFRPRE8gU3dpdGNoIHRvICQucGFyc2VIVE1MCisgICAgICByb3dzID0gJChyb3dzKTsKKworICAgICAgaWYgKG5vZGUgPT0gbnVsbCkgeyAvLyBJbnNlcnRpbmcgbmV3IHJvb3Qgbm9kZXMKKyAgICAgICAgdGhpcy5hcHBlbmQocm93cyk7CisgICAgICB9IGVsc2UgeworICAgICAgICB2YXIgbGFzdE5vZGUgPSB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLmZpbmRMYXN0Tm9kZShub2RlKTsKKyAgICAgICAgcm93cy5pbnNlcnRBZnRlcihsYXN0Tm9kZS5yb3cpOworICAgICAgfQorCisgICAgICB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLmxvYWRSb3dzKHJvd3MpOworCisgICAgICAvLyBNYWtlIHN1cmUgbm9kZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkCisgICAgICByb3dzLmZpbHRlcigidHIiKS5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICB0cmVlWyQodGhpcykuZGF0YShzZXR0aW5ncy5ub2RlSWRBdHRyKV0uc2hvdygpOworICAgICAgfSk7CisKKyAgICAgIGlmIChub2RlICE9IG51bGwpIHsKKyAgICAgICAgLy8gUmUtcmVuZGVyIHBhcmVudCB0byBlbnN1cmUgZXhwYW5kZXIgaWNvbiBpcyBzaG93biAoIzc5KQorICAgICAgICBub2RlLnJlbmRlcigpLmV4cGFuZCgpOworICAgICAgfQorCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgbW92ZTogZnVuY3Rpb24obm9kZUlkLCBkZXN0aW5hdGlvbklkKSB7CisgICAgICB2YXIgZGVzdGluYXRpb24sIG5vZGU7CisKKyAgICAgIG5vZGUgPSB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnRyZWVbbm9kZUlkXTsKKyAgICAgIGRlc3RpbmF0aW9uID0gdGhpcy5kYXRhKCJ0cmVldGFibGUiKS50cmVlW2Rlc3RpbmF0aW9uSWRdOworICAgICAgdGhpcy5kYXRhKCJ0cmVldGFibGUiKS5tb3ZlKG5vZGUsIGRlc3RpbmF0aW9uKTsKKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIG5vZGU6IGZ1bmN0aW9uKGlkKSB7CisgICAgICByZXR1cm4gdGhpcy5kYXRhKCJ0cmVldGFibGUiKS50cmVlW2lkXTsKKyAgICB9LAorCisgICAgcmVtb3ZlTm9kZTogZnVuY3Rpb24oaWQpIHsKKyAgICAgIHZhciBub2RlID0gdGhpcy5kYXRhKCJ0cmVldGFibGUiKS50cmVlW2lkXTsKKworICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgdGhpcy5kYXRhKCJ0cmVldGFibGUiKS5yZW1vdmVOb2RlKG5vZGUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG5vZGUgJyIgKyBpZCArICInIik7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICByZXZlYWw6IGZ1bmN0aW9uKGlkKSB7CisgICAgICB2YXIgbm9kZSA9IHRoaXMuZGF0YSgidHJlZXRhYmxlIikudHJlZVtpZF07CisKKyAgICAgIGlmIChub2RlKSB7CisgICAgICAgIG5vZGUucmV2ZWFsKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbm9kZSAnIiArIGlkICsgIiciKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIHNvcnRCcmFuY2g6IGZ1bmN0aW9uKG5vZGUsIGNvbHVtbk9yRnVuY3Rpb24pIHsKKyAgICAgIHZhciBzZXR0aW5ncyA9IHRoaXMuZGF0YSgidHJlZXRhYmxlIikuc2V0dGluZ3MsCisgICAgICAgICAgcHJlcFZhbHVlLAorICAgICAgICAgIHNvcnRGdW47CisKKyAgICAgIGNvbHVtbk9yRnVuY3Rpb24gPSBjb2x1bW5PckZ1bmN0aW9uIHx8IHNldHRpbmdzLmNvbHVtbjsKKyAgICAgIHNvcnRGdW4gPSBjb2x1bW5PckZ1bmN0aW9uOworCisgICAgICBpZiAoJC5pc051bWVyaWMoY29sdW1uT3JGdW5jdGlvbikpIHsKKyAgICAgICAgc29ydEZ1biA9IGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAgICB2YXIgZXh0cmFjdFZhbHVlLCB2YWxBLCB2YWxCOworCisgICAgICAgICAgZXh0cmFjdFZhbHVlID0gZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIHZhbCA9IG5vZGUucm93LmZpbmQoInRkOmVxKCIgKyBjb2x1bW5PckZ1bmN0aW9uICsgIikiKS50ZXh0KCk7CisgICAgICAgICAgICAvLyBJZ25vcmUgdHJhaWxpbmcvbGVhZGluZyB3aGl0ZXNwYWNlIGFuZCB1c2UgdXBwZXJjYXNlIHZhbHVlcyBmb3IKKyAgICAgICAgICAgIC8vIGNhc2UgaW5zZW5zaXRpdmUgb3JkZXJpbmcKKyAgICAgICAgICAgIHJldHVybiAkLnRyaW0odmFsKS50b1VwcGVyQ2FzZSgpOworICAgICAgICAgIH0KKworICAgICAgICAgIHZhbEEgPSBleHRyYWN0VmFsdWUoYSk7CisgICAgICAgICAgdmFsQiA9IGV4dHJhY3RWYWx1ZShiKTsKKworICAgICAgICAgIGlmICh2YWxBIDwgdmFsQikgcmV0dXJuIC0xOworICAgICAgICAgIGlmICh2YWxBID4gdmFsQikgcmV0dXJuIDE7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH07CisgICAgICB9CisKKyAgICAgIHRoaXMuZGF0YSgidHJlZXRhYmxlIikuc29ydEJyYW5jaChub2RlLCBzb3J0RnVuKTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICB1bmxvYWRCcmFuY2g6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgIHRoaXMuZGF0YSgidHJlZXRhYmxlIikudW5sb2FkQnJhbmNoKG5vZGUpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorICB9OworCisgICQuZm4udHJlZXRhYmxlID0gZnVuY3Rpb24obWV0aG9kKSB7CisgICAgaWYgKG1ldGhvZHNbbWV0aG9kXSkgeworICAgICAgcmV0dXJuIG1ldGhvZHNbbWV0aG9kXS5hcHBseSh0aGlzLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiBtZXRob2QgPT09ICdvYmplY3QnIHx8ICFtZXRob2QpIHsKKyAgICAgIHJldHVybiBtZXRob2RzLmluaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuICQuZXJyb3IoIk1ldGhvZCAiICsgbWV0aG9kICsgIiBkb2VzIG5vdCBleGlzdCBvbiBqUXVlcnkudHJlZXRhYmxlIik7CisgICAgfQorICB9OworCisgIC8vIEV4cG9zZSBjbGFzc2VzIHRvIHdvcmxkCisgIHRoaXMuVHJlZVRhYmxlIHx8ICh0aGlzLlRyZWVUYWJsZSA9IHt9KTsKKyAgdGhpcy5UcmVlVGFibGUuTm9kZSA9IE5vZGU7CisgIHRoaXMuVHJlZVRhYmxlLlRyZWUgPSBUcmVlOworfSkuY2FsbCh0aGlzKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9sYXllckJ0bi5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9sYXllckJ0bi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDUwOWY5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9sYXllckJ0bi5qcwpAQCAtMCwwICsxLDc3IEBACisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIGxheWVyQnRuc0luaXQoY3R4KSB7CisKKyAgLyogUmVtb3ZlIGFueSBjdXJyZW50IGJpbmRpbmdzIHRvIGF2b2lkIGR1cGxpY2F0ZWQgYmluZHMgKi8KKyAgJCgiLmxheWVyYnRuIikudW5iaW5kKCdjbGljaycpOworCisgICQoIi5sYXllcmJ0biIpLmNsaWNrKGZ1bmN0aW9uICgpeworICAgIHZhciBsYXllck9iaiA9ICQodGhpcykuZGF0YSgibGF5ZXIiKTsKKyAgICB2YXIgYWRkID0gKCQodGhpcykuZGF0YSgnZGlyZWN0aXZlJykgPT09ICJhZGQiKTsKKyAgICB2YXIgdGhpc0J0biA9ICQodGhpcyk7CisKKyAgICBsaWJ0b2FzdGVyLmFkZFJtTGF5ZXIobGF5ZXJPYmosIGFkZCwgZnVuY3Rpb24gKGxheWVyRGVwc0xpc3QpeworICAgICAgbGlidG9hc3Rlci5zaG93Q2hhbmdlTm90aWZpY2F0aW9uKGxpYnRvYXN0ZXIubWFrZUxheWVyQWRkUm1BbGVydE1zZyhsYXllck9iaiwgbGF5ZXJEZXBzTGlzdCwgYWRkKSk7CisKKyAgICAgIC8qIEluLWNlbGwgbm90aWZpY2F0aW9uICovCisgICAgICB2YXIgbm90aWZpY2F0aW9uID0gJCgnPGRpdiBpZD0idGVtcC1pbmxpbmUtbm90aWZ5IiBzdHlsZT0iZGlzcGxheTogbm9uZTsgZm9udC1zaXplOiAxMXB4OyBsaW5lLWhlaWdodDogMS4zOyIgY2xhc3M9InRvb2x0aXAtaW5uZXIiPjwvZGl2PicpOworICAgICAgdGhpc0J0bi5wYXJlbnQoKS5hcHBlbmQobm90aWZpY2F0aW9uKTsKKworICAgICAgaWYgKGFkZCl7CisgICAgICAgIGlmIChsYXllckRlcHNMaXN0Lmxlbmd0aCA+IDApCisgICAgICAgICAgbm90aWZpY2F0aW9uLnRleHQoU3RyaW5nKGxheWVyRGVwc0xpc3QubGVuZ3RoICsgMSkgKyAiIGxheWVycyBhZGRlZCIpOworICAgICAgICBlbHNlCisgICAgICAgICAgbm90aWZpY2F0aW9uLnRleHQoIjEgbGF5ZXIgYWRkZWQiKTsKKworICAgICAgICB2YXIgbGF5ZXJCdG5zRmFkZU91dCA9ICQoKTsKKyAgICAgICAgdmFyIGxheWVyRXhpc3RzQnRuRmFkZUluID0gJCgpOworCisgICAgICAgIGxheWVyQnRuc0ZhZGVPdXQgPSBsYXllckJ0bnNGYWRlT3V0LmFkZCgiLmxheWVyLWFkZC0iICsgbGF5ZXJPYmouaWQpOworICAgICAgICBsYXllckV4aXN0c0J0bkZhZGVJbiA9IGxheWVyRXhpc3RzQnRuRmFkZUluLmFkZCgiLmxheWVyLWV4aXN0cy0iICsgbGF5ZXJPYmouaWQpOworCisgICAgICAgIGZvciAodmFyIGkgaW4gbGF5ZXJEZXBzTGlzdCl7CisgICAgICAgICAgbGF5ZXJCdG5zRmFkZU91dCA9IGxheWVyQnRuc0ZhZGVPdXQuYWRkKCIubGF5ZXItYWRkLSIgKyBsYXllckRlcHNMaXN0W2ldLmlkKTsKKyAgICAgICAgICBsYXllckV4aXN0c0J0bkZhZGVJbiA9IGxheWVyRXhpc3RzQnRuRmFkZUluLmFkZCgiLmxheWVyLWV4aXN0cy0iICsgbGF5ZXJEZXBzTGlzdFtpXS5pZCk7CisgICAgICAgIH0KKworICAgICAgICBsYXllckJ0bnNGYWRlT3V0LmZhZGVPdXQoKS5wcm9taXNlKCkuZG9uZShmdW5jdGlvbigpeworICAgICAgICAgIG5vdGlmaWNhdGlvbi5mYWRlSW4oKS5kZWxheSg1MDApLmZhZGVPdXQoZnVuY3Rpb24oKXsKKyAgICAgICAgICAgIC8qIEZhZGUgaW4gdGhlIGJ1dHRvbnMgKi8KKyAgICAgICAgICAgIGxheWVyRXhpc3RzQnRuRmFkZUluLmZhZGVJbigpOworICAgICAgICAgICAgbm90aWZpY2F0aW9uLnJlbW92ZSgpOworICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG5vdGlmaWNhdGlvbi50ZXh0KCIxIGxheWVyIGRlbGV0ZWQiKTsKKyAgICAgICAgLyogRGVsZXRpbmcgYSBsYXllciB3ZSBvbmx5IGhhbmxkZSB0aGUgb25lIGJ1dHRvbiAqLworICAgICAgICB0aGlzQnRuLmZhZGVPdXQoZnVuY3Rpb24oKXsKKyAgICAgICAgICBub3RpZmljYXRpb24uZmFkZUluKCkuZGVsYXkoNTAwKS5mYWRlT3V0KGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAkKCIubGF5ZXItYWRkLSIgKyBsYXllck9iai5pZCkuZmFkZUluKCk7CisgICAgICAgICAgICBub3RpZmljYXRpb24ucmVtb3ZlKCk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgfQorCisgICAgfSk7CisgIH0pOworCisgICQoIi5idWlsZC1yZWNpcGUtYnRuIikudW5iaW5kKCdjbGljaycpOworICAkKCIuYnVpbGQtcmVjaXBlLWJ0biIpLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICB2YXIgcmVjaXBlID0gJCh0aGlzKS5kYXRhKCdyZWNpcGUtbmFtZScpOworCisgICAgbGlidG9hc3Rlci5zdGFydEFCdWlsZChsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0QnVpbGRzVXJsLAorICAgICAgbGlidG9hc3Rlci5jdHgucHJvamVjdElkLCByZWNpcGUsCisgICAgICBmdW5jdGlvbigpeworICAgICAgICAvKiBTdWNjZXNzICovCisgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RCdWlsZHNVcmwpOworICAgICAgfSk7CisgIH0pOworCisgIC8qIFNldHVwIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBidXR0b25zICovCisKKyAgZm9yICh2YXIgaSBpbiBjdHgucHJvamVjdExheWVycyl7CisgICAgICAkKCIubGF5ZXItZXhpc3RzLSIgKyBjdHgucHJvamVjdExheWVyc1tpXSkuc2hvdygpOworICAgICAgJCgiLmxheWVyLWFkZC0iICsgY3R4LnByb2plY3RMYXllcnNbaV0pLmhpZGUoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xheWVyRGVwc01vZGFsLmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xheWVyRGVwc01vZGFsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNWY5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGF5ZXJEZXBzTW9kYWwuanMKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIGxheWVyOiBPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwYXJlbnQgbGF5ZXIgeyBpZDogLi4gbmFtZTogLi4uIHVybCB9CisgKiBkZXBlbmRlbmNpZXM6IGFycmF5IG9mIGRlcGVuZGVuY3kgbGF5ZXIgb2JqZWN0cyB7IGlkOiAuLiBuYW1lOiAuLn0KKyAqIHRpdGxlOiBvcHRpb25hbCBvdmVycmlkZSBmb3IgdGl0bGUKKyAqIGJvZHk6IG9wdGlvbmFsIG92ZXJyaWRlIGZvciBib2R5CisgKiBhZGRUb1Byb2plY3Q6IFdoZXRoZXIgdG8gYWRkIGxheWVycyB0byBwcm9qZWN0IG9uIGFjY2VwdAorICogc3VjY2Vzc0FkZDogZnVuY3Rpb24gdG8gcnVuIG9uIHN1Y2Nlc3MKKyAqLworZnVuY3Rpb24gc2hvd0xheWVyRGVwc01vZGFsKGxheWVyLCBkZXBlbmRlbmNpZXMsIHRpdGxlLCBib2R5LCBhZGRUb1Byb2plY3QsIHN1Y2Nlc3NBZGQpIHsKKworICBpZiAoJCgiI2RlcGVuZGVuY2llcy1tb2RhbCIpLmxlbmd0aCA9PT0gMCkgeworICAgICQuZ2V0KGxpYnRvYXN0ZXIuY3R4Lmh0bWxVcmwgKyAiL2xheWVyX2RlcHNfbW9kYWwuaHRtbCIsIGZ1bmN0aW9uKGh0bWwpeworICAgICAgJCgiYm9keSIpLmFwcGVuZChodG1sKTsKKyAgICAgIHNldHVwTW9kYWwoKTsKKyAgICB9KTsKKyAgfSBlbHNlIHsKKyAgICBzZXR1cE1vZGFsKCk7CisgIH0KKworICBmdW5jdGlvbiBzZXR1cE1vZGFsKCl7CisKKyAgICBpZiAodGl0bGUpIHsKKyAgICAgICQoJyNkZXBlbmRlbmNpZXMtbW9kYWwgI3RpdGxlJykudGV4dCh0aXRsZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICQoJyNkZXBlbmRlbmNpZXMtbW9kYWwgI3RpdGxlJykudGV4dChsYXllci5uYW1lKTsKKyAgICB9CisKKyAgICBpZiAoYm9keSkgeworICAgICAgJCgiI2RlcGVuZGVuY2llcy1tb2RhbCAjYm9keS10ZXh0IikuaHRtbChib2R5KTsKKyAgICB9IGVsc2UgeworICAgICAgJCgiI2RlcGVuZGVuY2llcy1tb2RhbCAjbGF5ZXItbmFtZSIpLnRleHQobGF5ZXIubmFtZSk7CisgICAgfQorCisgICAgdmFyIGRlcGxpc3RIdG1sID0gIiI7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgIGRlcGxpc3RIdG1sICs9ICI8bGk+PGxhYmVsIGNsYXNzPVwiY2hlY2tib3hcIj48aW5wdXQgbmFtZT1cImRlcGVuZGVuY2llc1wiIHZhbHVlPVwiIjsKKyAgICAgIGRlcGxpc3RIdG1sICs9IGRlcGVuZGVuY2llc1tpXS5pZDsKKyAgICAgIGRlcGxpc3RIdG1sICs9IlwiIHR5cGU9XCJjaGVja2JveFwiIGNoZWNrZWQ9XCJjaGVja2VkXCIvPiI7CisgICAgICBkZXBsaXN0SHRtbCArPSBkZXBlbmRlbmNpZXNbaV0ubmFtZTsKKyAgICAgIGRlcGxpc3RIdG1sICs9ICI8L2xhYmVsPjwvbGk+IjsKKyAgICB9CisgICAgJCgnI2RlcGVuZGVuY2llcy1saXN0JykuaHRtbChkZXBsaXN0SHRtbCk7CisKKyAgICAkKCIjZGVwZW5kZW5jaWVzLW1vZGFsIikuZGF0YSgiZGVwcyIsIGRlcGVuZGVuY2llcyk7CisKKyAgICAkKCcjZGVwZW5kZW5jaWVzLW1vZGFsJykubW9kYWwoJ3Nob3cnKTsKKworICAgIC8qIERpc2NhcmQgdGhlIG9sZCBzdWJtaXNzaW9uIGZ1bmN0aW9uICovCisgICAgJCgiI2RlcGVuZGVuY2llcy1tb2RhbC1mb3JtIikudW5iaW5kKCdzdWJtaXQnKTsKKworICAgICQoIiNkZXBlbmRlbmNpZXMtbW9kYWwtZm9ybSIpLnN1Ym1pdChmdW5jdGlvbiAoZSkgeworICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgdmFyIHNlbGVjdGVkTGF5ZXJJZHMgPSBbXTsKKyAgICAgIHZhciBzZWxlY3RlZExheWVycyA9IFtdOworCisgICAgICAkKCJpbnB1dFtuYW1lPSdkZXBlbmRlbmNpZXMnXTpjaGVja2VkIikuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgIHNlbGVjdGVkTGF5ZXJJZHMucHVzaChwYXJzZUludCgkKHRoaXMpLnZhbCgpKSk7CisgICAgICB9KTsKKworICAgICAgLyogLTEgaXMgYSBzcGVjaWFsIGR1bW15IElkIHdoaWNoIHdlIHVzZSB3aGVuIHRoZSBsYXllciBpc24ndCB5ZXQgaW4gdGhlCisgICAgICAgKiBzeXN0ZW0sIG5vcm1hbGx5IHdlIHdvdWxkIGFkZCB0aGUgY3VycmVudCBsYXllciB0byB0aGUgc2VsZWN0aW9uLgorICAgICAgICovCisgICAgICBpZiAobGF5ZXIuaWQgIT0gLTEpCisgICAgICAgIHNlbGVjdGVkTGF5ZXJJZHMucHVzaChsYXllci5pZCk7CisKKyAgICAgIC8qIEZpbmQgdGhlIHNlbGVjdGVkIGxheWVyIG9iamVjdHMgZnJvbSBvdXIgb3JpZ2luYWwgbGlzdCAqLworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RlZExheWVySWRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGVwZW5kZW5jaWVzLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgaWYgKGRlcGVuZGVuY2llc1tqXS5pZCA9PSBzZWxlY3RlZExheWVySWRzW2ldKSB7CisgICAgICAgICAgICBzZWxlY3RlZExheWVycy5wdXNoKGRlcGVuZGVuY2llc1tqXSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChhZGRUb1Byb2plY3QpIHsKKyAgICAgICAgbGlidG9hc3Rlci5lZGl0Q3VycmVudFByb2plY3QoeyAnbGF5ZXJBZGQnOiBzZWxlY3RlZExheWVySWRzLmpvaW4oIiwiKSB9LCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgaWYgKHN1Y2Nlc3NBZGQpIHsKKyAgICAgICAgICAgIHN1Y2Nlc3NBZGQoc2VsZWN0ZWRMYXllcnMpOworICAgICAgICAgIH0KKyAgICAgICAgfSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgIGNvbnNvbGUud2FybigiQWRkaW5nIGxheWVycyB0byBwcm9qZWN0IGZhaWxlZCIpOworICAgICAgICB9KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHN1Y2Nlc3NBZGQoc2VsZWN0ZWRMYXllcnMpOworICAgICAgfQorCisgICAgICAkKCcjZGVwZW5kZW5jaWVzLW1vZGFsJykubW9kYWwoJ2hpZGUnKTsKKyAgICB9KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xheWVyZGV0YWlscy5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9sYXllcmRldGFpbHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwZTgwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9sYXllcmRldGFpbHMuanMKQEAgLTAsMCArMSwzOTIgQEAKKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gbGF5ZXJEZXRhaWxzUGFnZUluaXQgKGN0eCkgeworCisgIHZhciBsYXllckRlcElucHV0ID0gJCgiI2xheWVyLWRlcC1pbnB1dCIpOworICB2YXIgbGF5ZXJEZXBCdG4gPSAkKCIjYWRkLWxheWVyLWRlcGVuZGVuY3ktYnRuIik7CisgIHZhciBsYXllckRlcHNMaXN0ID0gJCgiI2xheWVyLWRlcHMtbGlzdCIpOworICB2YXIgY3VycmVudExheWVyRGVwU2VsZWN0aW9uOworICB2YXIgYWRkUm1MYXllckJ0biA9ICQoIiNhZGQtcmVtb3ZlLWxheWVyLWJ0biIpOworCisgIC8qIHNldHVwIHRoZSBkZXBlbmRlbmNpZXMgdHlwZWFoZWFkICovCisgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChsYXllckRlcElucHV0LCBsaWJ0b2FzdGVyLmN0eC5sYXllcnNUeXBlQWhlYWRVcmwsIHsgaW5jbHVkZV9hZGRlZDogInRydWUiIH0sIGZ1bmN0aW9uKGl0ZW0peworICAgIGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbiA9IGl0ZW07CisKKyAgICBsYXllckRlcEJ0bi5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICB9KTsKKworICAkKCIuYnJlYWRjcnVtYiBsaTpmaXJzdCBhIikuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgIC8qIEJ5IGRlZmF1bHQgdGhpcyBsaW5rIGdvZXMgdG8gdGhlIHByb2plY3QgY29uZmlndXJhdGlvbiBwYWdlLiBIb3dldmVyCisgICAgICogaWYgd2UgaGF2ZSBzb21lIGJ1aWxkcyB3ZSBnbyB0aGVyZSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGhyZWYKKyAgICAgKi8KKyAgICBsaWJ0b2FzdGVyLmdldFByb2plY3RJbmZvKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RQYWdlVXJsLCBmdW5jdGlvbihwcmpJbmZvKXsKKyAgICAgIGlmIChwcmpJbmZvLmJ1aWxkcyAmJiBwcmpJbmZvLmJ1aWxkcy5sZW5ndGggPiAwKSB7CisgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RCdWlsZHNVcmwpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UobGlidG9hc3Rlci5jdHgucHJvamVjdFBhZ2VVcmwpOworICAgICAgfQorICAgIH0pOworICB9KTsKKworICBmdW5jdGlvbiBhZGRSZW1vdmVEZXAoZGVwTGF5ZXJJZCwgYWRkLCBkb25lQ2IpIHsKKyAgICB2YXIgZGF0YSA9IHsgbGF5ZXJfdmVyc2lvbl9pZCA6IGN0eC5sYXllclZlcnNpb24uaWQgfTsKKyAgICBpZiAoYWRkKQorICAgICAgZGF0YS5hZGRfZGVwID0gZGVwTGF5ZXJJZDsKKyAgICBlbHNlCisgICAgICBkYXRhLnJtX2RlcCA9IGRlcExheWVySWQ7CisKKyAgICAkLmFqYXgoeworICAgICAgICB0eXBlOiAiUE9TVCIsCisgICAgICAgIHVybDogY3R4LnhoclVwZGF0ZUxheWVyVXJsLAorICAgICAgICBkYXRhOiBkYXRhLAorICAgICAgICBoZWFkZXJzOiB7ICdYLUNTUkZUb2tlbicgOiAkLmNvb2tpZSgnY3NyZnRva2VuJyl9LAorICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgIGlmIChkYXRhLmVycm9yICE9ICJvayIpIHsKKyAgICAgICAgICAgIGNvbnNvbGUud2FybihkYXRhLmVycm9yKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZG9uZUNiKCk7CisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICBjb25zb2xlLndhcm4oIkNhbGwgZmFpbGVkIik7CisgICAgICAgICAgY29uc29sZS53YXJuKGRhdGEpOworICAgICAgICB9CisgICAgfSk7CisgIH0KKworICBmdW5jdGlvbiBsYXllckRlcFJlbW92ZUNsaWNrKCkgeworICAgIHZhciB0b1JlbW92ZSA9ICQodGhpcykucGFyZW50KCkuZGF0YSgnbGF5ZXItaWQnKTsKKyAgICB2YXIgbGF5ZXJEZXBJdGVtID0gJCh0aGlzKTsKKworICAgIGFkZFJlbW92ZURlcCh0b1JlbW92ZSwgZmFsc2UsIGZ1bmN0aW9uKCl7CisgICAgICBsYXllckRlcEl0ZW0ucGFyZW50KCkuZmFkZU91dChmdW5jdGlvbiAoKXsKKyAgICAgICAgbGF5ZXJEZXBJdGVtLnJlbW92ZSgpOworICAgICAgfSk7CisgICAgfSk7CisgIH0KKworICAvKiBBZGQgZGVwZW5kZW5jeSBsYXllciBidXR0b24gY2xpY2sgaGFuZGxlciAqLworICBsYXllckRlcEJ0bi5jbGljayhmdW5jdGlvbigpeworICAgIGlmIChjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24gPT09IHVuZGVmaW5lZCkKKyAgICAgIHJldHVybjsKKworICAgIGFkZFJlbW92ZURlcChjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24uaWQsIHRydWUsIGZ1bmN0aW9uKCl7CisgICAgICAvKiBNYWtlIGEgbGlzdCBpdGVtIGZvciB0aGUgbmV3IGxheWVyIGRlcGVuZGVuY3kgKi8KKyAgICAgIHZhciBuZXdMYXllckRlcCA9ICQoIjxsaT48YT48L2E+PHNwYW4gY2xhc3M9XCJpY29uLXRyYXNoXCIgZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgdGl0bGU9XCJEZWxldGVcIj48L3NwYW4+PC9saT4iKTsKKworICAgICAgbmV3TGF5ZXJEZXAuZGF0YSgnbGF5ZXItaWQnLCBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24uaWQpOworICAgICAgbmV3TGF5ZXJEZXAuY2hpbGRyZW4oInNwYW4iKS50b29sdGlwKCk7CisKKyAgICAgIHZhciBsaW5rID0gbmV3TGF5ZXJEZXAuY2hpbGRyZW4oImEiKTsKKyAgICAgIGxpbmsuYXR0cigiaHJlZiIsIGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbi5sYXllcmRldGFpbHVybCk7CisgICAgICBsaW5rLnRleHQoY3VycmVudExheWVyRGVwU2VsZWN0aW9uLm5hbWUpOworICAgICAgbGluay50b29sdGlwKHt0aXRsZTogY3VycmVudExheWVyRGVwU2VsZWN0aW9uLnRvb2x0aXAsIHBsYWNlbWVudDogInJpZ2h0In0pOworCisgICAgICAvKiBDb25uZWN0IHVwIHRoZSB0YXNoIGljb24gKi8KKyAgICAgIHZhciB0cmFzaEl0ZW0gPSBuZXdMYXllckRlcC5jaGlsZHJlbigic3BhbiIpOworICAgICAgdHJhc2hJdGVtLmNsaWNrKGxheWVyRGVwUmVtb3ZlQ2xpY2spOworCisgICAgICBsYXllckRlcHNMaXN0LmFwcGVuZChuZXdMYXllckRlcCk7CisgICAgICAvKiBDbGVhciB0aGUgY3VycmVudCBzZWxlY3Rpb24gKi8KKyAgICAgIGxheWVyRGVwSW5wdXQudmFsKCIiKTsKKyAgICAgIGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbiA9IHVuZGVmaW5lZDsKKyAgICAgIGxheWVyRGVwQnRuLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgJCgiLmljb24tcGVuY2lsIikuY2xpY2soZnVuY3Rpb24gKCl7CisgICAgdmFyIG1QYXJlbnQgPSAkKHRoaXMpLnBhcmVudCgiZGQiKTsKKyAgICBtUGFyZW50LnByZXYoKS5jc3MoIm1hcmdpbi10b3AiLCAiMTBweCIpOworICAgIG1QYXJlbnQuY2hpbGRyZW4oImZvcm0iKS5zbGlkZURvd24oKTsKKyAgICB2YXIgY3VycmVudFZhbCA9IG1QYXJlbnQuY2hpbGRyZW4oIi5jdXJyZW50LXZhbHVlIik7CisgICAgY3VycmVudFZhbC5oaWRlKCk7CisgICAgLyogU2V0IHRoZSBjdXJyZW50IHZhbHVlIHRvIHRoZSBpbnB1dCBmaWVsZCAqLworICAgIG1QYXJlbnQuZmluZCgidGV4dGFyZWEsaW5wdXQiKS52YWwoY3VycmVudFZhbC50ZXh0KCkpOworICAgIC8qIEhpZGVzIHRoZSAiTm90IHNldCIgdGV4dCAqLworICAgIG1QYXJlbnQuY2hpbGRyZW4oIi5tdXRlZCIpLmhpZGUoKTsKKyAgICAvKiBXZSdyZSBlZGl0aW5nIHNvIGhpZGUgdGhlIGRlbGV0ZSBpY29uICovCisgICAgbVBhcmVudC5jaGlsZHJlbigiLmRlbGV0ZS1jdXJyZW50LXZhbHVlIikuaGlkZSgpOworICAgIG1QYXJlbnQuZmluZCgiLmNhbmNlbCIpLnNob3coKTsKKyAgICAkKHRoaXMpLmhpZGUoKTsKKyAgfSk7CisKKyAgJCgiLmRlbGV0ZS1jdXJyZW50LXZhbHVlIikuY2xpY2soZnVuY3Rpb24oKXsKKyAgICB2YXIgbVBhcmVudCA9ICQodGhpcykucGFyZW50KCJkZCIpOworICAgIG1QYXJlbnQuZmluZCgiaW5wdXQiKS52YWwoIiIpOworICAgIG1QYXJlbnQuZmluZCgidGV4dGFyZWEiKS52YWwoIiIpOworICAgIG1QYXJlbnQuZmluZCgiLmNoYW5nZS1idG4iKS5jbGljaygpOworICB9KTsKKworICAkKCIuY2FuY2VsIikuY2xpY2soZnVuY3Rpb24oKXsKKyAgICB2YXIgbVBhcmVudCA9ICQodGhpcykucGFyZW50cygiZGQiKTsKKyAgICAkKHRoaXMpLmhpZGUoKTsKKyAgICBtUGFyZW50LmNoaWxkcmVuKCJmb3JtIikuc2xpZGVVcChmdW5jdGlvbigpeworICAgICAgbVBhcmVudC5jaGlsZHJlbigiLmN1cnJlbnQtdmFsdWUiKS5zaG93KCk7CisgICAgICAvKiBTaG93IHRoZSAiTm90IHNldCIgdGV4dCBpZiB3ZSBlbmRlZCB1cCB3aXRoIG5vIHZhbHVlICovCisgICAgICBpZiAoIW1QYXJlbnQuY2hpbGRyZW4oIi5jdXJyZW50LXZhbHVlIikuaHRtbCgpKXsKKyAgICAgICAgbVBhcmVudC5jaGlsZHJlbigiLm11dGVkIikuZmFkZUluKCk7CisgICAgICAgIG1QYXJlbnQuY2hpbGRyZW4oIi5kZWxldGUtY3VycmVudC12YWx1ZSIpLmhpZGUoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG1QYXJlbnQuY2hpbGRyZW4oIi5kZWxldGUtY3VycmVudC12YWx1ZSIpLnNob3coKTsKKyAgICAgIH0KKworICAgICAgbVBhcmVudC5jaGlsZHJlbigiLmljb24tcGVuY2lsIikuc2hvdygpOworICAgICAgbVBhcmVudC5wcmV2KCkuY3NzKCJtYXJnaW4tdG9wIiwgIjBweCIpOworICAgIH0pOworICB9KTsKKworICBmdW5jdGlvbiBkZWZhdWx0QWRkQnRuVGV4dCgpeworICAgICAgdmFyIHRleHQgPSAiIEFkZCB0aGUgIitjdHgubGF5ZXJWZXJzaW9uLm5hbWUrIiBsYXllciB0byB5b3VyIHByb2plY3QiOworICAgICAgYWRkUm1MYXllckJ0bi50ZXh0KHRleHQpOworICAgICAgYWRkUm1MYXllckJ0bi5wcmVwZW5kKCI8c3BhbiBjbGFzcz1cImljb24tcGx1c1wiPjwvc3Bhbj4iKTsKKyAgICAgIGFkZFJtTGF5ZXJCdG4ucmVtb3ZlQ2xhc3MoImJ0bi1kYW5nZXIiKTsKKyAgfQorCisgICQoIiNkZXRhaWxzLXRhYiIpLm9uKCdzaG93JywgZnVuY3Rpb24oKXsKKyAgICBpZiAoIWN0eC5sYXllclZlcnNpb24uaW5DdXJyZW50UHJqKQorICAgICAgZGVmYXVsdEFkZEJ0blRleHQoKTsKKworICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gImRldGFpbHMiOworICB9KTsKKworICBmdW5jdGlvbiB0YXJnZXRzVGFiU2hvdygpeworICAgIGlmICghY3R4LmxheWVyVmVyc2lvbi5pbkN1cnJlbnRQcmopeworICAgICAgaWYgKGN0eC5udW1UYXJnZXRzID4gMCkgeworICAgICAgICB2YXIgdGV4dCA9ICIgQWRkIHRoZSAiK2N0eC5sYXllclZlcnNpb24ubmFtZSsiIGxheWVyIHRvIHlvdXIgcHJvamVjdCAiKworICAgICAgICAgICJ0byBlbmFibGUgdGhlc2UgcmVjaXBlcyI7CisgICAgICAgIGFkZFJtTGF5ZXJCdG4udGV4dCh0ZXh0KTsKKyAgICAgICAgYWRkUm1MYXllckJ0bi5wcmVwZW5kKCI8c3BhbiBjbGFzcz1cImljb24tcGx1c1wiPjwvc3Bhbj4iKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGRlZmF1bHRBZGRCdG5UZXh0KCk7CisgICAgICB9CisgICAgfQorCisgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAicmVjaXBlcyI7CisgIH0KKworICAkKCIjcmVjaXBlc3RhYmxlIikub24oJ3RhYmxlLWRvbmUnLCBmdW5jdGlvbihlLCB0b3RhbCwgdGFibGVQYXJhbXMpeworICAgIGN0eC5udW1UYXJnZXRzID0gdG90YWw7CisKKyAgICBpZiAodG90YWwgPT09IDAgJiYgIXRhYmxlUGFyYW1zLnNlYXJjaCkgeworICAgICAgJCgiI25vLXJlY2lwZXMteWV0Iikuc2hvdygpOworICAgIH0gZWxzZSB7CisgICAgICAkKCIjbm8tcmVjaXBlcy15ZXQiKS5oaWRlKCk7CisgICAgfQorCisgICAgJCgiI3RhcmdldHMtdGFiIikucmVtb3ZlQ2xhc3MoIm11dGVkIik7CisgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5oYXNoID09PSAiI3JlY2lwZXMiKXsKKyAgICAgIC8qIHJlIHJ1biB0aGUgbWFjaGluZXNUYWJTaG93IHRvIHVwZGF0ZSB0aGUgdGV4dCAqLworICAgICAgdGFyZ2V0c1RhYlNob3coKTsKKyAgICB9CisgIH0pOworCisgICQoIiNtYWNoaW5lc3RhYmxlIikub24oJ3RhYmxlLWRvbmUnLCBmdW5jdGlvbihlLCB0b3RhbCwgdGFibGVQYXJhbXMpeworICAgIGN0eC5udW1NYWNoaW5lcyA9IHRvdGFsOworCisgICAgaWYgKHRvdGFsID09PSAwICYmICF0YWJsZVBhcmFtcy5zZWFyY2gpCisgICAgICAkKCIjbm8tbWFjaGluZXMteWV0Iikuc2hvdygpOworICAgIGVsc2UKKyAgICAgICQoIiNuby1tYWNoaW5lcy15ZXQiKS5oaWRlKCk7CisKKyAgICAkKCIjbWFjaGluZXMtdGFiIikucmVtb3ZlQ2xhc3MoIm11dGVkIik7CisgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5oYXNoID09PSAiI21hY2hpbmVzIil7CisgICAgICAvKiByZSBydW4gdGhlIG1hY2hpbmVzVGFiU2hvdyB0byB1cGRhdGUgdGhlIHRleHQgKi8KKyAgICAgIG1hY2hpbmVzVGFiU2hvdygpOworICAgIH0KKworICAgICQoIi5zZWxlY3QtbWFjaGluZS1idG4iKS5jbGljayhmdW5jdGlvbihlKXsKKyAgICAgIGlmICgkKHRoaXMpLmF0dHIoImRpc2FibGVkIikgPT09ICJkaXNhYmxlZCIpCisgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICB9KTsKKworICB9KTsKKworICAkKCIjdGFyZ2V0cy10YWIiKS5vbignc2hvdycsIHRhcmdldHNUYWJTaG93KTsKKworICBmdW5jdGlvbiBtYWNoaW5lc1RhYlNob3coKXsKKyAgICBpZiAoIWN0eC5sYXllclZlcnNpb24uaW5DdXJyZW50UHJqKSB7CisgICAgICBpZiAoY3R4Lm51bU1hY2hpbmVzID4gMCl7CisgICAgICAgIHZhciB0ZXh0ID0gIiBBZGQgdGhlICIrY3R4LmxheWVyVmVyc2lvbi5uYW1lKyIgbGF5ZXIgdG8geW91ciBwcm9qZWN0ICIgKworICAgICAgICAgICJ0byBlbmFibGUgdGhlc2UgbWFjaGluZXMiOworICAgICAgICBhZGRSbUxheWVyQnRuLnRleHQodGV4dCk7CisgICAgICAgIGFkZFJtTGF5ZXJCdG4ucHJlcGVuZCgiPHNwYW4gY2xhc3M9XCJpY29uLXBsdXNcIj48L3NwYW4+Iik7CisgICAgICB9IGVsc2UgeworICAgICAgICBkZWZhdWx0QWRkQnRuVGV4dCgpOworICAgICAgfQorICAgIH0KKworICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gIm1hY2hpbmVzIjsKKyAgfQorCisgICQoIiNtYWNoaW5lcy10YWIiKS5vbignc2hvdycsIG1hY2hpbmVzVGFiU2hvdyk7CisKKyAgJCgiLnBhZ2VzaXplIikuY2hhbmdlKGZ1bmN0aW9uKCl7CisgICAgdmFyIHNlYXJjaCA9IGxpYnRvYXN0ZXIucGFyc2VVcmxQYXJhbXMoKTsKKyAgICBzZWFyY2gubGltaXQgPSB0aGlzLnZhbHVlOworCisgICAgd2luZG93LmxvY2F0aW9uLnNlYXJjaCA9IGxpYnRvYXN0ZXIuZHVtcHNVcmxQYXJhbXMoc2VhcmNoKTsKKyAgfSk7CisKKyAgLyogRW5hYmxlcyB0aGUgQnVpbGQgdGFyZ2V0IGFuZCBTZWxlY3QgTWFjaGluZSBidXR0b25zIGFuZCBzd2l0Y2hlcyB0aGUKKyAgICogYWRkL3JlbW92ZSBidXR0b24KKyAgICovCisgIGZ1bmN0aW9uIHNldExheWVySW5DdXJyZW50UHJqKGFkZGVkKSB7CisgICAgY3R4LmxheWVyVmVyc2lvbi5pbkN1cnJlbnRQcmogPSBhZGRlZDsKKworICAgIGlmIChhZGRlZCl7CisgICAgICAvKiBlbmFibGUgYW5kIHN3aXRjaCBhbGwgdGhlIGJ1dHRvbiBzdGF0ZXMgKi8KKyAgICAgICQoIi5idWlsZC10YXJnZXQtYnRuIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgICAgICQoIi5zZWxlY3QtbWFjaGluZS1idG4iKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgYWRkUm1MYXllckJ0bi5hZGRDbGFzcygiYnRuLWRhbmdlciIpOworICAgICAgYWRkUm1MYXllckJ0bi5kYXRhKCdkaXJlY3RpdmUnLCAicmVtb3ZlIik7CisgICAgICBhZGRSbUxheWVyQnRuLnRleHQoIiBEZWxldGUgdGhlICIrY3R4LmxheWVyVmVyc2lvbi5uYW1lKyIgbGF5ZXIgZnJvbSB5b3VyIHByb2plY3QiKTsKKyAgICAgIGFkZFJtTGF5ZXJCdG4ucHJlcGVuZCgiPHNwYW4gY2xhc3M9XCJpY29uLXRyYXNoXCI+PC9zcGFuPiIpOworCisgICAgfSBlbHNlIHsKKyAgICAgIC8qIGRpc2FibGUgYW5kIHN3aXRjaCBhbGwgdGhlIGJ1dHRvbiBzdGF0ZXMgKi8KKyAgICAgICQoIi5idWlsZC10YXJnZXQtYnRuIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgICAgJCgiLnNlbGVjdC1tYWNoaW5lLWJ0biIpLmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CisgICAgICBhZGRSbUxheWVyQnRuLnJlbW92ZUNsYXNzKCJidG4tZGFuZ2VyIik7CisgICAgICBhZGRSbUxheWVyQnRuLmRhdGEoJ2RpcmVjdGl2ZScsICJhZGQiKTsKKworICAgICAgLyogInNwZWNpYWwiIGhhbmRsZXIgc28gdGhhdCB3ZSBnZXQgdGhlIGNvcnJlY3QgYnV0dG9uIHRleHQgd2hpY2ggZGVwZW5kcworICAgICAgICogb24gd2hpY2ggdGFiIGlzIGN1cnJlbnRseSB2aXNpYmxlLiBVbmZvcnR1bmF0ZWx5IHdlIGNhbid0IGp1c3QgY2FsbAorICAgICAgICogdGFiKCdzaG93JykgYXMgaWYgaXQncyBhbHJlYWR5IHZpc2libGUgaXQgZG9lc24ndCBydW4gdGhlIGV2ZW50LgorICAgICAgICovCisgICAgICBzd2l0Y2ggKCQoIi5uYXYtcGlsbHMgLmFjdGl2ZSBhIikucHJvcCgnaWQnKSl7CisgICAgICAgIGNhc2UgJ21hY2hpbmVzLXRhYic6CisgICAgICAgICAgbWFjaGluZXNUYWJTaG93KCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3RhcmdldHMtdGFiJzoKKyAgICAgICAgICB0YXJnZXRzVGFiU2hvdygpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGRlZmF1bHRBZGRCdG5UZXh0KCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICB9CisKKyAgJCgiI2Rpc21pc3MtYWxlcnQiKS5jbGljayhmdW5jdGlvbigpeworICAgICQodGhpcykucGFyZW50KCkuZmFkZU91dCgpOworICB9KTsKKworICAvKiBBZGQgb3IgcmVtb3ZlIHRoaXMgbGF5ZXIgZnJvbSB0aGUgcHJvamVjdCAqLworICBhZGRSbUxheWVyQnRuLmNsaWNrKGZ1bmN0aW9uKCkgeworCisgICAgdmFyIGFkZCA9ICgkKHRoaXMpLmRhdGEoJ2RpcmVjdGl2ZScpID09PSAiYWRkIik7CisKKyAgICBsaWJ0b2FzdGVyLmFkZFJtTGF5ZXIoY3R4LmxheWVyVmVyc2lvbiwgYWRkLCBmdW5jdGlvbiAobGF5ZXJzTGlzdCl7CisgICAgICB2YXIgYWxlcnRNc2cgPSAkKCIjYWxlcnQtbXNnIik7CisgICAgICBhbGVydE1zZy5odG1sKGxpYnRvYXN0ZXIubWFrZUxheWVyQWRkUm1BbGVydE1zZyhjdHgubGF5ZXJWZXJzaW9uLCBsYXllcnNMaXN0LCBhZGQpKTsKKworICAgICAgc2V0TGF5ZXJJbkN1cnJlbnRQcmooYWRkKTsKKworICAgICAgJCgiI2FsZXJ0LWFyZWEiKS5zaG93KCk7CisgICAgfSk7CisgIH0pOworCisgIC8qIEhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgQ2hhbmdlIGJ1dHRvbnMgKi8KKyAgJCgiLmNoYW5nZS1idG4iKS5jbGljayhmdW5jdGlvbigpeworICAgIHZhciBtUGFyZW50ID0gJCh0aGlzKS5wYXJlbnQoKTsKKyAgICB2YXIgcHJvcCA9ICQodGhpcykuZGF0YSgnbGF5ZXItcHJvcCcpOworCisgICAgLyogV2UgaGF2ZSBpbnB1dHMsIHNlbGVjdCBhbmQgdGV4dGFyZWFzIHRvIHBvdGVudGlhbGx5IGdyYWIgdGhlIHZhbHVlCisgICAgICogZnJvbS4KKyAgICAgKi8KKyAgICB2YXIgZW50cnlFbGVtZW50ID0gbVBhcmVudC5maW5kKCJpbnB1dCIpOworICAgIGlmIChlbnRyeUVsZW1lbnQubGVuZ3RoID09PSAwKQorICAgICAgZW50cnlFbGVtZW50ID0gbVBhcmVudC5maW5kKCJ0ZXh0YXJlYSIpOworICAgIGlmIChlbnRyeUVsZW1lbnQubGVuZ3RoID09PSAwKSB7CisgICAgICBjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIGVsZW1lbnQgdG8gZ2V0IGRhdGEgZnJvbSBmb3IgdGhpcyBjaGFuZ2UiKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgZGF0YSA9IHsgbGF5ZXJfdmVyc2lvbl9pZDogY3R4LmxheWVyVmVyc2lvbi5pZCB9OworICAgIGRhdGFbcHJvcF0gPSBlbnRyeUVsZW1lbnQudmFsKCk7CisKKyAgICAkLmFqYXgoeworICAgICAgICB0eXBlOiAiUE9TVCIsCisgICAgICAgIHVybDogY3R4LnhoclVwZGF0ZUxheWVyVXJsLAorICAgICAgICBkYXRhOiBkYXRhLAorICAgICAgICBoZWFkZXJzOiB7ICdYLUNTUkZUb2tlbicgOiAkLmNvb2tpZSgnY3NyZnRva2VuJyl9LAorICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgIGlmIChkYXRhLmVycm9yICE9ICJvayIpIHsKKyAgICAgICAgICAgIGNvbnNvbGUud2FybihkYXRhLmVycm9yKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogc3VjY2VzcyBsYXllciBwcm9wZXJ0eSBjaGFuZ2VkICovCisgICAgICAgICAgICB2YXIgaW5wdXRBcmVhID0gbVBhcmVudC5wYXJlbnRzKCJkZCIpOworICAgICAgICAgICAgdmFyIHRleHQ7CisKKyAgICAgICAgICAgIHRleHQgPSBlbnRyeUVsZW1lbnQudmFsKCk7CisKKyAgICAgICAgICAgIC8qIEhpZGUgdGhlICJOb3Qgc2V0IiB0ZXh0IGlmIGl0J3MgdmlzaWJsZSAqLworICAgICAgICAgICAgaW5wdXRBcmVhLmZpbmQoIi5tdXRlZCIpLmhpZGUoKTsKKyAgICAgICAgICAgIGlucHV0QXJlYS5maW5kKCIuY3VycmVudC12YWx1ZSIpLnRleHQodGV4dCk7CisgICAgICAgICAgICAvKiBTYW1lIGJlaGF2aW91ciBhcyBjYW5jZWwgaW4gdGhhdCB3ZSBoaWRlIHRoZSBmb3JtL3Nob3cgY3VycmVudAorICAgICAgICAgICAgICogdmFsdWUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlucHV0QXJlYS5maW5kKCIuY2FuY2VsIikuY2xpY2soKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgIGNvbnNvbGUud2FybigiQ2FsbCBmYWlsZWQiKTsKKyAgICAgICAgICBjb25zb2xlLndhcm4oZGF0YSk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgfSk7CisKKyAgLyogRGlzYWJsZSB0aGUgY2hhbmdlIGJ1dHRvbiB3aGVuIHdlIGhhdmUgbm8gZGF0YSBpbiB0aGUgaW5wdXQgKi8KKyAgJCgiZGwgaW5wdXQsIGRsIHRleHRhcmVhIikub24oImlucHV0IixmdW5jdGlvbigpIHsKKyAgICBpZiAoJCh0aGlzKS52YWwoKS5sZW5ndGggPT09IDApCisgICAgICAkKHRoaXMpLnBhcmVudCgpLmNoaWxkcmVuKCIuY2hhbmdlLWJ0biIpLmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CisgICAgZWxzZQorICAgICAgJCh0aGlzKS5wYXJlbnQoKS5jaGlsZHJlbigiLmNoYW5nZS1idG4iKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICB9KTsKKworICAvKiBUaGlzIGNoZWNrcyB0byBzZWUgaWYgdGhlIGR0J3MgZGQgaGFzIGRhdGEgaW4gaXQgb3IgaWYgdGhlIGNoYW5nZSBkYXRhCisgICAqIGZvcm0gaXMgdmlzaWJsZSwgb3RoZXJ3aXNlIGhpZGUgaXQKKyAgICovCisgICQoImRsIikuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uICgpeworICAgIGlmICgkKHRoaXMpLmlzKCJkdCIpKSB7CisgICAgICB2YXIgZGQgPSAkKHRoaXMpLm5leHQoImRkIik7CisgICAgICBpZiAoIWRkLmNoaWxkcmVuKCJmb3JtOnZpc2libGUiKXx8ICFkZC5maW5kKCIuY3VycmVudC12YWx1ZSIpLmh0bWwoKSl7CisgICAgICAgIGlmIChjdHgubGF5ZXJWZXJzaW9uLnNvdXJjZUlkID09IDMpeworICAgICAgICAvKiBUaGVyZSdzIG5vIGN1cnJlbnQgdmFsdWUgYW5kIHRoZSBsYXllciBpcyBlZGl0YWJsZQorICAgICAgICAgKiBzbyBzaG93IHRoZSAiTm90IHNldCIgYW5kIGhpZGUgdGhlIGRlbGV0ZSBpY29uCisgICAgICAgICAqLworICAgICAgICBkZC5maW5kKCIubXV0ZWQiKS5zaG93KCk7CisgICAgICAgIGRkLmZpbmQoIi5kZWxldGUtY3VycmVudC12YWx1ZSIpLmhpZGUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAvKiBXZSdyZSBub3Qgdmlld2luZyBhbiBlZGl0YWJsZSBsYXllciBzbyBoaWRlIHRoZSBlbXB0eSBkZC9kbCBwYWlyICovCisgICAgICAgICAgJCh0aGlzKS5oaWRlKCk7CisgICAgICAgICAgZGQuaGlkZSgpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9KTsKKworICAvKiBIaWRlIHRoZSByaWdodCBjb2x1bW4gaWYgaXQgY29udGFpbnMgbm8gaW5mb3JtYXRpb24gKi8KKyAgaWYgKCQoImRsLml0ZW0taW5mbyIpLmNoaWxkcmVuKCc6dmlzaWJsZScpLmxlbmd0aCA9PT0gMCkgeworICAgICQoImRsLml0ZW0taW5mbyIpLnBhcmVudCgpLmhpZGUoKTsKKyAgfQorCisgIC8qIENsZWFyIHRoZSBjdXJyZW50IHNlYXJjaCBzZWxlY3Rpb24gYW5kIHJlbG9hZCB0aGUgcmVzdWx0cyAqLworICAkKCIudGFyZ2V0LXNlYXJjaC1jbGVhciIpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgJCgiI3RhcmdldC1zZWFyY2giKS52YWwoIiIpOworICAgICQodGhpcykucGFyZW50cygiZm9ybSIpLnN1Ym1pdCgpOworICB9KTsKKworICAkKCIubWFjaGluZS1zZWFyY2gtY2xlYXIiKS5jbGljayhmdW5jdGlvbigpeworICAgICQoIiNtYWNoaW5lLXNlYXJjaCIpLnZhbCgiIik7CisgICAgJCh0aGlzKS5wYXJlbnRzKCJmb3JtIikuc3VibWl0KCk7CisgIH0pOworCisKKyAgbGF5ZXJEZXBzTGlzdC5maW5kKCIuaWNvbi10cmFzaCIpLmNsaWNrKGxheWVyRGVwUmVtb3ZlQ2xpY2spOworICBsYXllckRlcHNMaXN0LmZpbmQoImEiKS50b29sdGlwKCk7CisgICQoIi5pY29uLXRyYXNoIikudG9vbHRpcCgpOworICAkKCIuY29tbWl0IikudG9vbHRpcCgpOworCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGlidG9hc3Rlci5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9saWJ0b2FzdGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNGY3YWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGlidG9hc3Rlci5qcwpAQCAtMCwwICsxLDU3NCBAQAorInVzZSBzdHJpY3QiOworLyogQWxsIHNoYXJlZCBmdW5jdGlvbmFsaXR5IHRvIGdvIGluIGxpYnRvYXN0ZXIgb2JqZWN0LgorICogVGhpcyBvYmplY3QgcmVhbGx5IGp1c3QgaGVscHMgcmVhZGFiaWxpdHkgc2luY2Ugd2UgY2FuIHRoZW4gaGF2ZQorICogYSB0cmFjZWFibGUgbmFtZXNwYWNlLgorICovCit2YXIgbGlidG9hc3RlciA9IChmdW5jdGlvbiAoKXsKKworICAvKiBtYWtlVHlwZWFoZWFkIHBhcmFtZXRlcnMKKyAgICogZWxlbWVudFNlbGVjdG9yOiBKUXVlcnkgZWxlbWVudFNlbGVjdG9yIHN0cmluZworICAgKiB4aHJVcmw6IHRoZSB1cmwgdG8gZ2V0IHRoZSBKU09OIGZyb20gZXhwZWN0cyBKU09OIGluIHRoZSBmb3JtOgorICAgKiAgeyAibGlzdCI6IFsgeyAibmFtZSI6ICJ0ZXN0IiwgImRldGFpbCIgOiAiYSB0ZXN0IHRoaW5nIiAgfSwgLi4uLiBdIH0KKyAgICogeGhyUGFyYW1zOiB0aGUgZGF0YS9wYXJhbWV0ZXJzIHRvIHBhc3MgdG8gdGhlIGdldEpTT04gdXJsIGUuZy4KKyAgICogIHsgJ3R5cGUnIDogJ3Byb2plY3RzJyB9IHRoZSB0ZXh0IHR5cGVkIHdpbGwgYmUgcGFzc2VkIGFzICdzZWFyY2gnLgorICAgKiAgc2VsZWN0ZWRDQjogZnVuY3Rpb24gdG8gY2FsbCBvbmNlIGFuIGl0ZW0gaGFzIGJlZW4gc2VsZWN0ZWQgb25lCisgICAqICBhcmcgb2YgdGhlIGl0ZW0uCisgICAqLworICBmdW5jdGlvbiBfbWFrZVR5cGVhaGVhZCAoalFFbGVtZW50LCB4aHJVcmwsIHhoclBhcmFtcywgc2VsZWN0ZWRDQikgeworICAgIGlmICgheGhyVXJsIHx8IHhoclVybC5sZW5ndGggPT09IDApCisgICAgICB0aHJvdygiTm8gdXJsIHRvIHR5cGVhaGVhZCBzdXBwbGllZCIpOworCisgICAgdmFyIHhoclJlcTsKKworICAgIGpRRWxlbWVudC50eXBlYWhlYWQoeworICAgICAgICBzb3VyY2U6IGZ1bmN0aW9uKHF1ZXJ5LCBwcm9jZXNzKXsKKyAgICAgICAgICB4aHJQYXJhbXMuc2VhcmNoID0gcXVlcnk7CisKKyAgICAgICAgICAvKiBJZiB3ZSBoYXZlIGEgcmVxdWVzdCBpbiBwcm9ncmVzcyBkb24ndCBmaXJlIG9mZiBhbm90aGVyIG9uZSovCisgICAgICAgICAgaWYgKHhoclJlcSkKKyAgICAgICAgICAgIHhoclJlcS5hYm9ydCgpOworCisgICAgICAgICAgeGhyUmVxID0gJC5nZXRKU09OKHhoclVybCwgdGhpcy5vcHRpb25zLnhoclBhcmFtcywgZnVuY3Rpb24oZGF0YSl7CisgICAgICAgICAgICBpZiAoZGF0YS5lcnJvciAhPT0gIm9rIikgeworICAgICAgICAgICAgICBjb25zb2xlLmxvZygiRXJyb3IgZ2V0dGluZyBkYXRhIGZyb20gc2VydmVyICIrZGF0YS5lcnJvcik7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeGhyUmVxID0gbnVsbDsKKworICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3MoZGF0YS5yZXN1bHRzKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKyAgICAgICAgdXBkYXRlcjogZnVuY3Rpb24oaXRlbSkgeworICAgICAgICAgIHZhciBpdGVtT2JqID0gdGhpcy4kbWVudS5maW5kKCcuYWN0aXZlJykuZGF0YSgnaXRlbU9iamVjdCcpOworICAgICAgICAgIHNlbGVjdGVkQ0IoaXRlbU9iaik7CisgICAgICAgICAgcmV0dXJuIGl0ZW07CisgICAgICAgIH0sCisgICAgICAgIG1hdGNoZXI6IGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICAgICAgICBpZiAoIWl0ZW0uaGFzT3duUHJvcGVydHkoJ25hbWUnKSkgeworICAgICAgICAgICAgY29uc29sZS5sb2coIk5hbWUgcHJvcGVydHkgbWlzc2luZyBpbiBkYXRhIik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAodGhpcy4kZWxlbWVudC52YWwoKS5sZW5ndGggPT09IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9LAorICAgICAgICBoaWdobGlnaHRlcjogZnVuY3Rpb24gKGl0ZW0pIHsKKyAgICAgICAgICAvKiBVc2UganF1ZXJ5IHRvIGVzY2FwZSB0aGUgaXRlbSBuYW1lIGFuZCBkZXRhaWwgKi8KKyAgICAgICAgICB2YXIgY3VycmVudCA9ICQoIjxzcGFuPjwvc3Bhbj4iKS50ZXh0KGl0ZW0ubmFtZSArICcgJytpdGVtLmRldGFpbCk7CisgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuaHRtbCgpOworCisgICAgICAgICAgdmFyIHF1ZXJ5ID0gdGhpcy5xdWVyeS5yZXBsYWNlKC9bXC1cW1xde30oKSorPy4sXFxcXiR8I1xzXS9nLCAnXFwkJicpCisgICAgICAgICAgcmV0dXJuIGN1cnJlbnQucmVwbGFjZShuZXcgUmVnRXhwKCcoJyArIHF1ZXJ5ICsgJyknLCAnaWcnKSwgZnVuY3Rpb24gKCQxLCBtYXRjaCkgeworICAgICAgICAgICAgcmV0dXJuICc8c3Ryb25nPicgKyBtYXRjaCArICc8L3N0cm9uZz4nCisgICAgICAgICAgfSkKKyAgICAgICAgfSwKKyAgICAgICAgc29ydGVyOiBmdW5jdGlvbiAoaXRlbXMpIHsgcmV0dXJuIGl0ZW1zOyB9LAorICAgICAgICB4aHJVcmw6IHhoclVybCwKKyAgICAgICAgeGhyUGFyYW1zOiB4aHJQYXJhbXMsCisgICAgICAgIHhoclJlcTogeGhyUmVxLAorICAgIH0pOworCisKKyAgICAvKiBDb3B5IG9mIGJvb3RzdHJhcCdzIHJlbmRlciBmdW5jIGJ1dCBzZXRzIHNlbGVjdGVkT2JqZWN0IHZhbHVlICovCisgICAgZnVuY3Rpb24gY3VzdG9tUmVuZGVyRnVuYyAoaXRlbXMpIHsKKyAgICAgIHZhciB0aGF0ID0gdGhpczsKKworICAgICAgaXRlbXMgPSAkKGl0ZW1zKS5tYXAoZnVuY3Rpb24gKGksIGl0ZW0pIHsKKyAgICAgICAgaSA9ICQodGhhdC5vcHRpb25zLml0ZW0pLmF0dHIoJ2RhdGEtdmFsdWUnLCBpdGVtLm5hbWUpLmRhdGEoJ2l0ZW1PYmplY3QnLCBpdGVtKTsKKyAgICAgICAgaS5maW5kKCdhJykuaHRtbCh0aGF0LmhpZ2hsaWdodGVyKGl0ZW0pKTsKKyAgICAgICAgcmV0dXJuIGlbMF07CisgICAgICB9KTsKKworICAgICAgaXRlbXMuZmlyc3QoKS5hZGRDbGFzcygnYWN0aXZlJyk7CisgICAgICB0aGlzLiRtZW51Lmh0bWwoaXRlbXMpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgalFFbGVtZW50LmRhdGEoJ3R5cGVhaGVhZCcpLnJlbmRlciA9IGN1c3RvbVJlbmRlckZ1bmM7CisgIH0KKworICAvKgorICAgKiB1cmwgLSB0aGUgdXJsIG9mIHRoZSB4aHIgYnVpbGQgKi8KKyAgZnVuY3Rpb24gX3N0YXJ0QUJ1aWxkICh1cmwsIHByb2plY3RfaWQsIHRhcmdldHMsIG9uc3VjY2Vzcywgb25mYWlsKSB7CisKKyAgICB2YXIgZGF0YSA9IHsKKyAgICAgIHByb2plY3RfaWQgOiBwcm9qZWN0X2lkLAorICAgICAgdGFyZ2V0cyA6IHRhcmdldHMsCisgICAgfQorCisgICAgJC5hamF4KCB7CisgICAgICAgIHR5cGU6ICJQT1NUIiwKKyAgICAgICAgdXJsOiB1cmwsCisgICAgICAgIGRhdGE6IGRhdGEsCisgICAgICAgIGhlYWRlcnM6IHsgJ1gtQ1NSRlRva2VuJyA6ICQuY29va2llKCdjc3JmdG9rZW4nKX0sCisgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChfZGF0YSkgeworICAgICAgICAgIC8qIE5vIHByb3BlciByZXBvbnNlIFlPQ1RPICM3OTk1CisgICAgICAgICAgaWYgKF9kYXRhLmVycm9yICE9PSAib2siKSB7CisgICAgICAgICAgICBjb25zb2xlLndhcm4oX2RhdGEuZXJyb3IpOworICAgICAgICAgIH0gZWxzZSB7ICovCisgICAgICAgICAgICBpZiAob25zdWNjZXNzICE9PSB1bmRlZmluZWQpIG9uc3VjY2VzcyhfZGF0YSk7CisgICAgICAgIC8vICB9CisgICAgICAgIH0sCisgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoX2RhdGEpIHsKKyAgICAgICAgICBjb25zb2xlLndhcm4oIkNhbGwgZmFpbGVkIik7CisgICAgICAgICAgY29uc29sZS53YXJuKF9kYXRhKTsKKyAgICAgICAgICBpZiAob25mYWlsKSBvbmZhaWwoZGF0YSk7CisgICAgfSB9KTsKKyAgfQorCisgIC8qIGNhbmNlbEFCdWlsZDoKKyAgICogdXJsOiBwcm9qZWN0YnVpbGRzCisgICAqIGJ1aWxkc19pZHM6IHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGJ1aWxkIHJlcXVlc3QgaWRzCisgICAqIG9uc3VjY2VzczogY2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uCisgICAqIG9uZmFpbDogY2FsbGJhY2sgZm9yIGZhaWxlZCBleGVjdXRpb24KKyAgICovCisgIGZ1bmN0aW9uIF9jYW5jZWxBQnVpbGQodXJsLCBidWlsZF9pZHMsIG9uc3VjY2Vzcywgb25mYWlsKXsKKyAgICAkLmFqYXgoIHsKKyAgICAgICAgdHlwZTogIlBPU1QiLAorICAgICAgICB1cmw6IHVybCwKKyAgICAgICAgZGF0YTogeyAnYnVpbGRDYW5jZWwnOiBidWlsZF9pZHMgfSwKKyAgICAgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nIDogJC5jb29raWUoJ2NzcmZ0b2tlbicpfSwKKyAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKF9kYXRhKSB7CisgICAgICAgICAgaWYgKF9kYXRhLmVycm9yICE9PSAib2siKSB7CisgICAgICAgICAgICBjb25zb2xlLndhcm4oX2RhdGEuZXJyb3IpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAob25zdWNjZXNzICE9PSB1bmRlZmluZWQpIG9uc3VjY2VzcyhfZGF0YSk7CisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlcnJvcjogZnVuY3Rpb24gKF9kYXRhKSB7CisgICAgICAgICAgY29uc29sZS53YXJuKCJDYWxsIGZhaWxlZCIpOworICAgICAgICAgIGNvbnNvbGUud2FybihfZGF0YSk7CisgICAgICAgICAgaWYgKG9uZmFpbCkgb25mYWlsKF9kYXRhKTsKKyAgICAgICAgfQorICAgIH0pOworICB9CisKKyAgLyogR2V0IGEgcHJvamVjdCdzIGNvbmZpZ3VyYXRpb24gaW5mbyAqLworICBmdW5jdGlvbiBfZ2V0UHJvamVjdEluZm8odXJsLCBvbnN1Y2Nlc3MsIG9uZmFpbCl7CisgICAgJC5hamF4KHsKKyAgICAgICAgdHlwZTogIkdFVCIsCisgICAgICAgIGRhdGEgOiB7IGZvcm1hdDogImpzb24iIH0sCisgICAgICAgIHVybDogdXJsLAorICAgICAgICBoZWFkZXJzOiB7ICdYLUNTUkZUb2tlbicgOiAkLmNvb2tpZSgnY3NyZnRva2VuJyl9LAorICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoX2RhdGEpIHsKKyAgICAgICAgICBpZiAoX2RhdGEuZXJyb3IgIT09ICJvayIpIHsKKyAgICAgICAgICAgIGNvbnNvbGUud2FybihfZGF0YS5lcnJvcik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChvbnN1Y2Nlc3MgIT09IHVuZGVmaW5lZCkgb25zdWNjZXNzKF9kYXRhKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoX2RhdGEpIHsKKyAgICAgICAgICBjb25zb2xlLndhcm4oX2RhdGEpOworICAgICAgICAgIGlmIChvbmZhaWwpIG9uZmFpbChfZGF0YSk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIC8qIFByb3BlcnRpZXMgZm9yIGRhdGEgY2FuIGJlOgorICAgKiBsYXllckRlbCAoY3N2KQorICAgKiBsYXllckFkZCAoY3N2KQorICAgKiBwcm9qZWN0TmFtZQorICAgKiBwcm9qZWN0VmVyc2lvbgorICAgKiBtYWNoaW5lTmFtZQorICAgKi8KKyAgZnVuY3Rpb24gX2VkaXRDdXJyZW50UHJvamVjdChkYXRhLCBvblN1Y2Nlc3MsIG9uRmFpbCl7CisgICAgJC5hamF4KHsKKyAgICAgICAgdHlwZTogIlBPU1QiLAorICAgICAgICB1cmw6IGxpYnRvYXN0ZXIuY3R4LnByb2plY3RQYWdlVXJsICsgIj9mb3JtYXQ9anNvbiIsCisgICAgICAgIGRhdGE6IGRhdGEsCisgICAgICAgIGhlYWRlcnM6IHsgJ1gtQ1NSRlRva2VuJyA6ICQuY29va2llKCdjc3JmdG9rZW4nKX0sCisgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgaWYgKGRhdGEuZXJyb3IgIT0gIm9rIikgeworICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5lcnJvcik7CisgICAgICAgICAgICBpZiAob25GYWlsICE9PSB1bmRlZmluZWQpCisgICAgICAgICAgICAgIG9uRmFpbChkYXRhKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyAhPT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgICBvblN1Y2Nlc3MoZGF0YSk7CisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICBjb25zb2xlLmxvZygiQ2FsbCBmYWlsZWQiKTsKKyAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTsKKyAgICAgICAgfQorICAgIH0pOworICB9CisKKyAgZnVuY3Rpb24gX2dldExheWVyRGVwc0ZvclByb2plY3QodXJsLCBvblN1Y2Nlc3MsIG9uRmFpbCl7CisgICAgLyogQ2hlY2sgZm9yIGRlcGVuZGVuY2llcyBub3QgaW4gdGhlIGN1cnJlbnQgcHJvamVjdCAqLworICAgICQuZ2V0SlNPTih1cmwsCisgICAgICB7IGZvcm1hdDogJ2pzb24nIH0sCisgICAgICBmdW5jdGlvbihkYXRhKSB7CisgICAgICAgIGlmIChkYXRhLmVycm9yICE9ICJvayIpIHsKKyAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhLmVycm9yKTsKKyAgICAgICAgICBpZiAob25GYWlsICE9PSB1bmRlZmluZWQpCisgICAgICAgICAgICBvbkZhaWwoZGF0YSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdmFyIGRlcHMgPSB7fTsKKyAgICAgICAgICAvKiBGaWx0ZXIgb3V0IGxheWVyIGRlcCBpZHMgd2hpY2ggYXJlIGluIHRoZQorICAgICAgICAgICAqIHByb2plY3QgYWxyZWFkeS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBkZXBzLmxpc3QgPSBkYXRhLmxheWVyZGVwcy5saXN0LmZpbHRlcihmdW5jdGlvbihsYXllck9iail7CisgICAgICAgICAgICByZXR1cm4gKGRhdGEucHJvamVjdGxheWVycy5sYXN0SW5kZXhPZihsYXllck9iai5pZCkgPCAwKTsKKyAgICAgICAgICB9KTsKKworICAgICAgICAgIG9uU3VjY2VzcyhkZXBzKTsKKyAgICAgICAgfQorICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGNvbnNvbGUubG9nKCJFOiBGYWlsZWQgdG8gbWFrZSByZXF1ZXN0Iik7CisgICAgfSk7CisgIH0KKworICAvKiBwYXJzZXMgdGhlIHF1ZXJ5IHN0cmluZyBvZiB0aGUgY3VycmVudCB3aW5kb3cubG9jYXRpb24gdG8gYW4gb2JqZWN0ICovCisgIGZ1bmN0aW9uIF9wYXJzZVVybFBhcmFtcygpIHsKKyAgICB2YXIgc3RyaW5nID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDsKKyAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKDEpOworICAgIHZhciBzdHJpbmdBcnJheSA9IHN0cmluZy5zcGxpdCAoIiYiKTsKKyAgICB2YXIgb2JqID0ge307CisKKyAgICBmb3IgKHZhciBpIGluIHN0cmluZ0FycmF5KSB7CisgICAgICB2YXIga2V5VmFsID0gc3RyaW5nQXJyYXlbaV0uc3BsaXQgKCI9Iik7CisgICAgICBvYmpba2V5VmFsWzBdXSA9IGtleVZhbFsxXTsKKyAgICB9CisKKyAgICByZXR1cm4gb2JqOworICB9CisKKyAgLyogdGFrZXMgYSBmbGF0IG9iamVjdCBhbmQgb3V0cHV0cyBpdCBhcyBhIHF1ZXJ5IHN0cmluZworICAgKiBlLmcuIHRoZSBvdXRwdXQgb2YgZHVtcHNVcmxQYXJhbXMKKyAgICovCisgIGZ1bmN0aW9uIF9kdW1wc1VybFBhcmFtcyhvYmopIHsKKyAgICB2YXIgc3RyID0gIj8iOworCisgICAgZm9yICh2YXIga2V5IGluIG9iail7CisgICAgICBpZiAoIW9ialtrZXldKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgc3RyICs9IGtleSsgIj0iK29ialtrZXldLnRvU3RyaW5nKCk7CisgICAgICBzdHIgKz0gIiYiOworICAgIH0KKworICAgIC8qIE1haW50YWluIHRoZSBjdXJyZW50IGhhc2ggKi8KKyAgICBzdHIgKz0gd2luZG93LmxvY2F0aW9uLmhhc2g7CisKKyAgICByZXR1cm4gc3RyOworICB9CisKKyAgZnVuY3Rpb24gX2FkZFJtTGF5ZXIobGF5ZXJPYmosIGFkZCwgZG9uZUNiKXsKKyAgICBpZiAoYWRkID09PSB0cnVlKSB7CisgICAgICAvKiBJZiBhZGRpbmcgZ2V0IHRoZSBkZXBzIGZvciB0aGlzIGxheWVyICovCisgICAgICBsaWJ0b2FzdGVyLmdldExheWVyRGVwc0ZvclByb2plY3QobGF5ZXJPYmoubGF5ZXJkZXRhaWx1cmwsCisgICAgICAgIGZ1bmN0aW9uIChsYXllcnMpIHsKKworICAgICAgICAvKiBnb3QgcmVzdWx0IGZvciBkZXBlbmRlbmNpZXMgKi8KKyAgICAgICAgaWYgKGxheWVycy5saXN0Lmxlbmd0aCA9PT0gMCl7CisgICAgICAgICAgdmFyIGVkaXREYXRhID0geyBsYXllckFkZCA6IGxheWVyT2JqLmlkIH07CisgICAgICAgICAgbGlidG9hc3Rlci5lZGl0Q3VycmVudFByb2plY3QoZWRpdERhdGEsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZG9uZUNiKFtdKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNob3dMYXllckRlcHNNb2RhbChsYXllck9iaiwgbGF5ZXJzLmxpc3QsIG51bGwsIG51bGwsICB0cnVlLCBkb25lQ2IpOworICAgICAgICAgIH0gIGNhdGNoIChlKSB7CisgICAgICAgICAgICAkLmdldFNjcmlwdChsaWJ0b2FzdGVyLmN0eC5qc1VybCArICJsYXllckRlcHNNb2RhbC5qcyIsIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgIHNob3dMYXllckRlcHNNb2RhbChsYXllck9iaiwgbGF5ZXJzLmxpc3QsIG51bGwsIG51bGwsICB0cnVlLCBkb25lQ2IpOworICAgICAgICAgICAgfSwgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgY29uc29sZS53YXJuKCJGYWlsZWQgdG8gbG9hZCBsYXllckRlcHNNb2RhbCIpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9LCBudWxsKTsKKyAgICB9IGVsc2UgaWYgKGFkZCA9PT0gZmFsc2UpIHsKKyAgICAgIHZhciBlZGl0RGF0YSA9IHsgbGF5ZXJEZWwgOiBsYXllck9iai5pZCB9OworCisgICAgICBsaWJ0b2FzdGVyLmVkaXRDdXJyZW50UHJvamVjdChlZGl0RGF0YSwgZnVuY3Rpb24gKCkgeworICAgICAgICBkb25lQ2IoW10pOworICAgICAgfSwgZnVuY3Rpb24gKCkgeworICAgICAgICBjb25zb2xlLndhcm4gKCJSZW1vdmluZyBsYXllciBmcm9tIHByb2plY3QgZmFpbGVkIik7CisgICAgICAgIGRvbmVDYihudWxsKTsKKyAgICAgIH0pOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIF9tYWtlTGF5ZXJBZGRSbUFsZXJ0TXNnKGxheWVyLCBsYXllckRlcHNMaXN0LCBhZGQpIHsKKyAgICB2YXIgYWxlcnRNc2c7CisKKyAgICBpZiAobGF5ZXJEZXBzTGlzdC5sZW5ndGggPiAwICYmIGFkZCA9PT0gdHJ1ZSkgeworICAgICAgYWxlcnRNc2cgPSAkKCI8c3Bhbj5Zb3UgaGF2ZSBhZGRlZCA8c3Ryb25nPiIrKGxheWVyRGVwc0xpc3QubGVuZ3RoKzEpKyI8L3N0cm9uZz4gbGF5ZXJzIHRvIHlvdXIgcHJvamVjdDogPGEgaWQ9XCJsYXllci1hZmZlY3RlZC1uYW1lXCI+PC9hPiBhbmQgaXRzIGRlcGVuZGVuY2llcyA8L3NwYW4+Iik7CisKKyAgICAgIC8qIEJ1aWxkIHRoZSBsYXllciBkZXBzIGxpc3QgKi8KKyAgICAgIGxheWVyRGVwc0xpc3QubWFwKGZ1bmN0aW9uKGxheWVyLCBpKXsKKyAgICAgICAgdmFyIGxpbmsgPSAkKCI8YT48L2E+Iik7CisKKyAgICAgICAgbGluay5hdHRyKCJocmVmIiwgbGF5ZXIubGF5ZXJkZXRhaWx1cmwpOworICAgICAgICBsaW5rLnRleHQobGF5ZXIubmFtZSk7CisgICAgICAgIGxpbmsudG9vbHRpcCh7dGl0bGU6IGxheWVyLnRvb2x0aXB9KTsKKworICAgICAgICBpZiAoaSAhPT0gMCkKKyAgICAgICAgICBhbGVydE1zZy5hcHBlbmQoIiwgIik7CisKKyAgICAgICAgYWxlcnRNc2cuYXBwZW5kKGxpbmspOworICAgICAgfSk7CisgICAgfSBlbHNlIGlmIChsYXllckRlcHNMaXN0Lmxlbmd0aCA9PT0gMCAmJiBhZGQgPT09IHRydWUpIHsKKyAgICAgIGFsZXJ0TXNnID0gJCgiPHNwYW4+WW91IGhhdmUgYWRkZWQgPHN0cm9uZz4xPC9zdHJvbmc+IGxheWVyIHRvIHlvdXIgcHJvamVjdDogPGEgaWQ9XCJsYXllci1hZmZlY3RlZC1uYW1lXCI+PC9hPjwvc3Bhbj48L3NwYW4+Iik7CisgICAgfSBlbHNlIGlmIChhZGQgPT09IGZhbHNlKSB7CisgICAgICBhbGVydE1zZyA9ICQoIjxzcGFuPllvdSBoYXZlIGRlbGV0ZWQgPHN0cm9uZz4xPC9zdHJvbmc+IGxheWVyIGZyb20geW91ciBwcm9qZWN0OiA8YSBpZD1cImxheWVyLWFmZmVjdGVkLW5hbWVcIj48L2E+PC9zcGFuPiIpOworICAgIH0KKworICAgIGFsZXJ0TXNnLmNoaWxkcmVuKCIjbGF5ZXItYWZmZWN0ZWQtbmFtZSIpLnRleHQobGF5ZXIubmFtZSk7CisgICAgYWxlcnRNc2cuY2hpbGRyZW4oIiNsYXllci1hZmZlY3RlZC1uYW1lIikuYXR0cigiaHJlZiIsIGxheWVyLmxheWVyZGV0YWlsdXJsKTsKKworICAgIHJldHVybiBhbGVydE1zZy5odG1sKCk7CisgIH0KKworICBmdW5jdGlvbiBfc2hvd0NoYW5nZU5vdGlmaWNhdGlvbihtZXNzYWdlKXsKKyAgICB2YXIgYWxlcnRNc2cgPSAkKCIjY2hhbmdlLW5vdGlmaWNhdGlvbi1tc2ciKTsKKworICAgIGFsZXJ0TXNnLmh0bWwobWVzc2FnZSk7CisgICAgJCgiI2NoYW5nZS1ub3RpZmljYXRpb24sICNjaGFuZ2Utbm90aWZpY2F0aW9uICoiKS5mYWRlSW4oKTsKKyAgfQorCisKKyAgcmV0dXJuIHsKKyAgICByZWxvYWRfcGFyYW1zIDogcmVsb2FkX3BhcmFtcywKKyAgICBzdGFydEFCdWlsZCA6IF9zdGFydEFCdWlsZCwKKyAgICBjYW5jZWxBQnVpbGQgOiBfY2FuY2VsQUJ1aWxkLAorICAgIG1ha2VUeXBlYWhlYWQgOiBfbWFrZVR5cGVhaGVhZCwKKyAgICBnZXRQcm9qZWN0SW5mbzogX2dldFByb2plY3RJbmZvLAorICAgIGdldExheWVyRGVwc0ZvclByb2plY3QgOiBfZ2V0TGF5ZXJEZXBzRm9yUHJvamVjdCwKKyAgICBlZGl0Q3VycmVudFByb2plY3QgOiBfZWRpdEN1cnJlbnRQcm9qZWN0LAorICAgIGRlYnVnOiBmYWxzZSwKKyAgICBwYXJzZVVybFBhcmFtcyA6IF9wYXJzZVVybFBhcmFtcywKKyAgICBkdW1wc1VybFBhcmFtcyA6IF9kdW1wc1VybFBhcmFtcywKKyAgICBhZGRSbUxheWVyIDogX2FkZFJtTGF5ZXIsCisgICAgbWFrZUxheWVyQWRkUm1BbGVydE1zZyA6IF9tYWtlTGF5ZXJBZGRSbUFsZXJ0TXNnLAorICAgIHNob3dDaGFuZ2VOb3RpZmljYXRpb24gOiBfc2hvd0NoYW5nZU5vdGlmaWNhdGlvbiwKKyAgfTsKK30pKCk7CisKKy8qIGtlZXAgdGhpcyBpbiB0aGUgZ2xvYmFsIHNjb3BlIGZvciBjb21wYXRhYmlsaXR5ICovCitmdW5jdGlvbiByZWxvYWRfcGFyYW1zKHBhcmFtcykgeworICAgIHZhciB1cmkgPSB3aW5kb3cubG9jYXRpb24uaHJlZjsKKyAgICB2YXIgc3BsaXRsaXN0ID0gdXJpLnNwbGl0KCI/Iik7CisgICAgdmFyIHVybCA9IHNwbGl0bGlzdFswXTsKKyAgICB2YXIgcGFyYW1ldGVycyA9IHNwbGl0bGlzdFsxXTsKKyAgICAvLyBkZXNlcmlhbGl6ZSB0aGUgY2FsbCBwYXJhbWV0ZXJzCisgICAgdmFyIGNwYXJhbXMgPSBbXTsKKyAgICBpZihwYXJhbWV0ZXJzKQorICAgICAgY3BhcmFtcyA9IHBhcmFtZXRlcnMuc3BsaXQoIiYiKTsKKworICAgIHZhciBucGFyYW1zID0ge307CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjcGFyYW1zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciB0ZW1wID0gY3BhcmFtc1tpXS5zcGxpdCgiPSIpOworICAgICAgICBucGFyYW1zW3RlbXBbMF1dID0gdGVtcFsxXTsKKyAgICB9CisgICAgLy8gdXBkYXRlIHBhcmFtZXRlciB2YWx1ZXMKKyAgICBmb3IgKGkgaW4gcGFyYW1zKSB7CisgICAgICAgIG5wYXJhbXNbZW5jb2RlVVJJQ29tcG9uZW50KGkpXSA9IGVuY29kZVVSSUNvbXBvbmVudChwYXJhbXNbaV0pOworICAgIH0KKyAgICAvLyBzZXJpYWxpemUgdGhlIHN0cnVjdHVyZQorICAgIHZhciBjYWxscGFyYW1zID0gW107CisgICAgZm9yIChpIGluIG5wYXJhbXMpIHsKKyAgICAgICAgY2FsbHBhcmFtcy5wdXNoKGkrIj0iK25wYXJhbXNbaV0pOworICAgIH0KKyAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybCsiPyIrY2FsbHBhcmFtcy5qb2luKCcmJyk7Cit9CisKKworLyogVGhpbmdzIHRoYXQgaGFwcGVuIGZvciBhbGwgcGFnZXMgKi8KKyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworCisgIHZhciBhamF4TG9hZGluZ1RpbWVyOworCisgIC8qIElmIHdlIGRvbid0IGhhdmUgYSBjb25zb2xlIG9iamVjdCB3aGljaCBtaWdodCBiZSB0aGUgY2FzZSBpbiBzb21lCisgICAgICogYnJvd3NlcnMsIG5vLW9wIGl0IHRvIGF2b2lkIHVuZGVmaW5lZCBlcnJvcnMuCisgICAgICovCisgICAgaWYgKCF3aW5kb3cuY29uc29sZSkgeworICAgICAgd2luZG93LmNvbnNvbGUgPSB7fTsKKyAgICAgIHdpbmRvdy5jb25zb2xlLndhcm4gPSBmdW5jdGlvbigpIHt9OworICAgICAgd2luZG93LmNvbnNvbGUuZXJyb3IgPSBmdW5jdGlvbigpIHt9OworICAgIH0KKworICAgIC8qCisgICAgICogUHJldHR5UHJpbnQgcGx1Z2luLgorICAgICAqCisgICAgICovCisgICAgLy8gSW5pdAorICAgIHByZXR0eVByaW50KCk7CisKKyAgICAvLyBQcmV2ZW50IGludmFsaWQgbGlua3MgZnJvbSBqdW1waW5nIHBhZ2Ugc2Nyb2xsCisgICAgJCgnYVtocmVmPSNdJykuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9KTsKKworCisgICAgLyogU1RBUlQgVE9ETyBEZWxldGUgdGhpcyBzZWN0aW9uIG5vdyByZWR1bmRhbnQgKi8KKyAgICAvKiBCZWxlbidzIGFkZGl0aW9ucyAqLworCisgICAgLy8gdHVybiBFZGl0IGNvbHVtbnMgZHJvcGRvd24gaW50byBhIG11bHRpc2VsZWN0IG1lbnUKKyAgICAkKCcuZHJvcGRvd24tbWVudSBpbnB1dCwgLmRyb3Bkb3duLW1lbnUgbGFiZWwnKS5jbGljayhmdW5jdGlvbihlKSB7CisgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgfSk7CisKKyAgICAvLyBlbmFibGUgcG9wb3ZlcnMgaW4gYW55IHRhYmxlIGNlbGxzIHRoYXQgY29udGFpbiBhbiBhbmNob3Igd2l0aCB0aGUKKyAgICAvLyAuYnRuIGNsYXNzIGFwcGxpZWQsIGFuZCBtYWtlIHN1cmUgcG9wb3ZlcnMgd29yayBvbiBjbGljaywgYXJlIG11dHVhbGx5CisgICAgLy8gZXhjbHVzaXZlIGFuZCB0aGV5IGNsb3NlIHdoZW4geW91ciBjbGljayBvdXRzaWRlIHRoZWlyIGFyZWEKKworICAgICQoJ2h0bWwnKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAkKCd0ZCA+IGEuYnRuJykucG9wb3ZlcignaGlkZScpOworICAgIH0pOworCisgICAgJCgndGQgPiBhLmJ0bicpLnBvcG92ZXIoeworICAgICAgICBodG1sOnRydWUsCisgICAgICAgIHBsYWNlbWVudDonbGVmdCcsCisgICAgICAgIGNvbnRhaW5lcjonYm9keScsCisgICAgICAgIHRyaWdnZXI6J21hbnVhbCcKKyAgICB9KS5jbGljayhmdW5jdGlvbihlKXsKKyAgICAgICAgJCgndGQgPiBhLmJ0bicpLm5vdCh0aGlzKS5wb3BvdmVyKCdoaWRlJyk7CisgICAgICAgIC8vIGlkZWFsbHkgd2Ugd291bGQgdXNlICd0b2dnbGUnIGhlcmUKKyAgICAgICAgLy8gYnV0IGl0IHNlZW1zIGJ1Z2d5IGluIG91ciBCb290c3RyYXAgdmVyc2lvbgorICAgICAgICAkKHRoaXMpLnBvcG92ZXIoJ3Nob3cnKTsKKyAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICB9KTsKKworICAgIC8vIGVuYWJsZSB0b29sdGlwcyBmb3IgYXBwbGllZCBmaWx0ZXJzCisgICAgJCgndGggYS5idG4tcHJpbWFyeScpLnRvb2x0aXAoe2NvbnRhaW5lcjonYm9keScsIGh0bWw6dHJ1ZSwgcGxhY2VtZW50Oidib3R0b20nLCBkZWxheTp7aGlkZToxNTAwfX0pOworCisgICAgLy8gaGlkZSBhcHBsaWVkIGZpbHRlciB0b29sdGlwIHdoZW4geW91IGNsaWNrIG9uIHRoZSBmaWx0ZXIgYnV0dG9uCisgICAgJCgndGggYS5idG4tcHJpbWFyeScpLmNsaWNrKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgJCgnLnRvb2x0aXAnKS5oaWRlKCk7CisgICAgfSk7CisKKyAgICAvLyBlbmFibGUgaGVscCBpbmZvcm1hdGlvbiB0b29sdGlwCisgICAgJCgiLmdldC1oZWxwIikudG9vbHRpcCh7Y29udGFpbmVyOidib2R5JywgaHRtbDp0cnVlLCBkZWxheTp7c2hvdzozMDB9fSk7CisKKyAgICAvLyBzaG93IGhlbHAgYnViYmxlIG9ubHkgb24gaG92ZXIgaW5zaWRlIHRhYmxlcworICAgICQoIi5ob3Zlci1oZWxwIikuY3NzKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIik7CisgICAgJCgidGgsIHRkIikuaG92ZXIoZnVuY3Rpb24gKCkgeworICAgICAgICAkKHRoaXMpLmZpbmQoIi5ob3Zlci1oZWxwIikuY3NzKCJ2aXNpYmlsaXR5IiwidmlzaWJsZSIpOworICAgIH0pOworICAgICQoInRoLCB0ZCIpLm1vdXNlbGVhdmUoZnVuY3Rpb24gKCkgeworICAgICAgICAkKHRoaXMpLmZpbmQoIi5ob3Zlci1oZWxwIikuY3NzKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIik7CisgICAgfSk7CisKKyAgICAvKiBFTkQgVE9ETyBEZWxldGUgdGhpcyBzZWN0aW9uIG5vdyByZWR1bmRhbnQgKi8KKworICAgIC8vIHNob3cgdGFzayB0eXBlIGFuZCBvdXRjb21lIGluIHRhc2sgZGV0YWlscyBwYWdlcworICAgICQoIi50YXNrLWluZm8iKS50b29sdGlwKHsgY29udGFpbmVyOiAnYm9keScsIGh0bWw6IHRydWUsIGRlbGF5OiB7c2hvdzogMjAwfSwgcGxhY2VtZW50OiAncmlnaHQnIH0pOworCisgICAgLy8gaW5pdGlhbGlzZSB0aGUgdG9vbHRpcHMgZm9yIHRoZSBpY29uLXBlbmNpbCBpY29ucworICAgICQoIi5pY29uLXBlbmNpbCIpLnRvb2x0aXAoeyBjb250YWluZXI6ICdib2R5JywgaHRtbDogdHJ1ZSwgZGVsYXk6IHtzaG93OiA0MDB9LCB0aXRsZTogIkNoYW5nZSIgfSk7CisKKyAgICAvLyBpbml0aWFsaXNlIHRoZSB0b29sdGlwcyBmb3IgdGhlIGRvd25sb2FkIGljb25zCisgICAgJCgiLmljb24tZG93bmxvYWQtYWx0IikudG9vbHRpcCh7IGNvbnRhaW5lcjogJ2JvZHknLCBodG1sOiB0cnVlLCBkZWxheTogeyBzaG93OiAyMDAgfSB9KTsKKworICAgIC8vIGluaXRpYWxpc2UgcG9wb3ZlciBmb3IgZGVidWcgaW5mb3JtYXRpb24KKyAgICAkKCIuaWNvbi1pbmZvLXNpZ24iKS5wb3BvdmVyKCB7IHBsYWNlbWVudDogJ2JvdHRvbScsIGh0bWw6IHRydWUsIGNvbnRhaW5lcjogJ2JvZHknIH0pOworCisgICAgLy8gbGlua2luZyBkaXJlY3RseSB0byB0YWJzCisgICAgJChmdW5jdGlvbigpeworICAgICAgICAgIHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7CisgICAgICAgICAgJCgndWwubmF2IGFbaHJlZj0iJyArIGhhc2ggKyAnIl0nKS50YWIoJ3Nob3cnKTsKKworICAgICAgICAgICQoJy5uYXYtdGFicyBhJykuY2xpY2soZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgJCh0aGlzKS50YWIoJ3Nob3cnKTsKKyAgICAgICAgICAgICQoJ2JvZHknKS5zY3JvbGxUb3AoKTsKKyAgICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIC8vIHRvZ2dsZSBmb3IgbG9uZyBjb250ZW50ICh2YXJpYWJsZXMsIHB5dGhvbiBzdGFjayB0cmFjZSwgZXRjKQorICAgICQoJy5mdWxsLCAuZnVsbC1oaWRlJykuaGlkZSgpOworICAgICQoJy5mdWxsLXNob3cnKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAkKCcuZnVsbCcpLnNsaWRlRG93bihmdW5jdGlvbigpeworICAgICAgICAgICAgJCgnLmZ1bGwtaGlkZScpLnNob3coKTsKKyAgICAgICAgfSk7CisgICAgICAgICQodGhpcykuaGlkZSgpOworICAgIH0pOworICAgICQoJy5mdWxsLWhpZGUnKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAkKHRoaXMpLmhpZGUoKTsKKyAgICAgICAgJCgnLmZ1bGwnKS5zbGlkZVVwKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAkKCcuZnVsbC1zaG93Jykuc2hvdygpOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIC8vdG9nZ2xlIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIHNlY3Rpb25zCisgICAgJCgnLnNob3ctZXJyb3JzJykuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgICQoJyNjb2xsYXBzZS1lcnJvcnMnKS5hZGRDbGFzcygnaW4nKTsKKyAgICB9KTsKKyAgICAkKCcudG9nZ2xlLWVycm9ycycpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAkKCcjY29sbGFwc2UtZXJyb3JzJykudG9nZ2xlQ2xhc3MoJ2luJyk7CisgICAgfSk7CisgICAgJCgnLnNob3ctd2FybmluZ3MnKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgJCgnI2NvbGxhcHNlLXdhcm5pbmdzJykuYWRkQ2xhc3MoJ2luJyk7CisgICAgfSk7CisgICAgJCgnLnRvZ2dsZS13YXJuaW5ncycpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAkKCcjY29sbGFwc2Utd2FybmluZ3MnKS50b2dnbGVDbGFzcygnaW4nKTsKKyAgICB9KTsKKyAgICAkKCcuc2hvdy1leGNlcHRpb25zJykuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgICQoJyNjb2xsYXBzZS1leGNlcHRpb25zJykuYWRkQ2xhc3MoJ2luJyk7CisgICAgfSk7CisgICAgJCgnLnRvZ2dsZS1leGNlcHRpb25zJykuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgICQoJyNjb2xsYXBzZS1leGNlcHRpb25zJykudG9nZ2xlQ2xhc3MoJ2luJyk7CisgICAgfSk7CisKKworICAgICQoIiNoaWRlLWFsZXJ0IikuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICQodGhpcykucGFyZW50KCkuZmFkZU91dCgpOworICAgIH0pOworCisgICAgLy9zaG93IHdhcm5pbmdzIHNlY3Rpb24gd2hlbiByZXF1ZXN0ZWQgZnJvbSB0aGUgcHJldmlvdXMgcGFnZQorICAgIGlmIChsb2NhdGlvbi5ocmVmLnNlYXJjaCgnI3dhcm5pbmdzJykgPiAtMSkgeworICAgICAgICAkKCcjY29sbGFwc2Utd2FybmluZ3MnKS5hZGRDbGFzcygnaW4nKTsKKyAgICB9CisKKyAgICAvKiBTaG93IHRoZSBsb2FkaW5nIG5vdGlmaWNhdGlvbiBpZiBub3RoaW5nIGhhcyBoYXBwZW5kIGFmdGVyIDEuNQorICAgICAqIHNlY29uZHMKKyAgICAgKi8KKyAgICAkKGRvY3VtZW50KS5iaW5kKCJhamF4U3RhcnQiLCBmdW5jdGlvbigpeworICAgICAgaWYgKGFqYXhMb2FkaW5nVGltZXIpCisgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoYWpheExvYWRpbmdUaW1lcik7CisKKyAgICAgIGFqYXhMb2FkaW5nVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgJCgiI2xvYWRpbmctbm90aWZpY2F0aW9uIikuZmFkZUluKCk7CisgICAgICB9LCAxMjAwKTsKKyAgICB9KTsKKworICAgICQoZG9jdW1lbnQpLmJpbmQoImFqYXhTdG9wIiwgZnVuY3Rpb24oKXsKKyAgICAgIGlmIChhamF4TG9hZGluZ1RpbWVyKQorICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KGFqYXhMb2FkaW5nVGltZXIpOworCisgICAgICAkKCIjbG9hZGluZy1ub3RpZmljYXRpb24iKS5mYWRlT3V0KCk7CisgICAgfSk7CisKKyAgICAkKGRvY3VtZW50KS5hamF4RXJyb3IoZnVuY3Rpb24oZXZlbnQsIGpxeGhyLCBzZXR0aW5ncywgZXJyTXNnKXsKKyAgICAgIGlmIChlcnJNc2cgPT09ICdhYm9ydCcpCisgICAgICAgIHJldHVybjsKKworICAgICAgY29uc29sZS53YXJuKCJQcm9ibGVtIHdpdGggeGhyIGNhbGwiKTsKKyAgICAgIGNvbnNvbGUud2FybihlcnJNc2cpOworICAgICAgY29uc29sZS53YXJuKGpxeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgfSk7CisKKyAgICBmdW5jdGlvbiBjaGVja19mb3JfZHVwbGljYXRlX2lkcyAoKSB7CisgICAgICAvKiB3YXJuIGFib3V0IGR1cGxpY2F0ZSBlbGVtZW50IGlkcyAqLworICAgICAgdmFyIGlkcyA9IHt9OworICAgICAgJCgiW2lkXSIpLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlzLmlkICYmIGlkc1t0aGlzLmlkXSkgeworICAgICAgICAgIGNvbnNvbGUud2FybignRHVwbGljYXRlIGVsZW1lbnQgaWQgIycrdGhpcy5pZCk7CisgICAgICAgIH0KKyAgICAgICAgaWRzW3RoaXMuaWRdID0gdHJ1ZTsKKyAgICAgIH0pOworICAgIH0KKworICAgIGlmIChsaWJ0b2FzdGVyLmRlYnVnKSB7CisgICAgICBjaGVja19mb3JfZHVwbGljYXRlX2lkcygpOworICAgIH0gZWxzZSB7CisgICAgICAvKiBEZWJ1ZyBpcyBmYWxzZSBzbyBzdXByZXNzIHdhcm5pbmdzIGJ5IG92ZXJyaWRpbmcgdGhlIGZ1bmN0aW9ucyAqLworICAgICAgd2luZG93LmNvbnNvbGUud2FybiA9IGZ1bmN0aW9uICgpIHt9OworICAgICAgd2luZG93LmNvbnNvbGUuZXJyb3IgPSBmdW5jdGlvbiAoKSB7fTsKKyAgIH0KK30pOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3ByZXR0aWZ5LmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3ByZXR0aWZ5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVlZjVhZDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvcHJldHRpZnkuanMKQEAgLTAsMCArMSwyOCBAQAordmFyIHE9bnVsbDt3aW5kb3cuUFJfU0hPVUxEX1VTRV9DT05USU5VQVRJT049ITA7CisoZnVuY3Rpb24oKXtmdW5jdGlvbiBMKGEpe2Z1bmN0aW9uIG0oYSl7dmFyIGY9YS5jaGFyQ29kZUF0KDApO2lmKGYhPT05MilyZXR1cm4gZjt2YXIgYj1hLmNoYXJBdCgxKTtyZXR1cm4oZj1yW2JdKT9mOiIwIjw9YiYmYjw9IjciP3BhcnNlSW50KGEuc3Vic3RyaW5nKDEpLDgpOmI9PT0idSJ8fGI9PT0ieCI/cGFyc2VJbnQoYS5zdWJzdHJpbmcoMiksMTYpOmEuY2hhckNvZGVBdCgxKX1mdW5jdGlvbiBlKGEpe2lmKGE8MzIpcmV0dXJuKGE8MTY/IlxceDAiOiJcXHgiKSthLnRvU3RyaW5nKDE2KTthPVN0cmluZy5mcm9tQ2hhckNvZGUoYSk7aWYoYT09PSJcXCJ8fGE9PT0iLSJ8fGE9PT0iWyJ8fGE9PT0iXSIpYT0iXFwiK2E7cmV0dXJuIGF9ZnVuY3Rpb24gaChhKXtmb3IodmFyIGY9YS5zdWJzdHJpbmcoMSxhLmxlbmd0aC0xKS5tYXRjaCgvXFx1W1xkQS1GYS1mXXs0fXxcXHhbXGRBLUZhLWZdezJ9fFxcWzAtM11bMC03XXswLDJ9fFxcWzAtN117MSwyfXxcXFtcU1xzXXxbXlxcXS9nKSxhPQorW10sYj1bXSxvPWZbMF09PT0iXiIsYz1vPzE6MCxpPWYubGVuZ3RoO2M8aTsrK2Mpe3ZhciBqPWZbY107aWYoL1xcW2Jkc3ddL2kudGVzdChqKSlhLnB1c2goaik7ZWxzZXt2YXIgaj1tKGopLGQ7YysyPGkmJiItIj09PWZbYysxXT8oZD1tKGZbYysyXSksYys9Mik6ZD1qO2IucHVzaChbaixkXSk7ZDw2NXx8aj4xMjJ8fChkPDY1fHxqPjkwfHxiLnB1c2goW01hdGgubWF4KDY1LGopfDMyLE1hdGgubWluKGQsOTApfDMyXSksZDw5N3x8aj4xMjJ8fGIucHVzaChbTWF0aC5tYXgoOTcsaikmLTMzLE1hdGgubWluKGQsMTIyKSYtMzNdKSl9fWIuc29ydChmdW5jdGlvbihhLGYpe3JldHVybiBhWzBdLWZbMF18fGZbMV0tYVsxXX0pO2Y9W107aj1bTmFOLE5hTl07Zm9yKGM9MDtjPGIubGVuZ3RoOysrYylpPWJbY10saVswXTw9alsxXSsxP2pbMV09TWF0aC5tYXgoalsxXSxpWzFdKTpmLnB1c2goaj1pKTtiPVsiWyJdO28mJmIucHVzaCgiXiIpO2IucHVzaC5hcHBseShiLGEpO2ZvcihjPTA7YzwKK2YubGVuZ3RoOysrYylpPWZbY10sYi5wdXNoKGUoaVswXSkpLGlbMV0+aVswXSYmKGlbMV0rMT5pWzBdJiZiLnB1c2goIi0iKSxiLnB1c2goZShpWzFdKSkpO2IucHVzaCgiXSIpO3JldHVybiBiLmpvaW4oIiIpfWZ1bmN0aW9uIHkoYSl7Zm9yKHZhciBmPWEuc291cmNlLm1hdGNoKC9cWyg/OlteXFxcXV18XFxbXFNcc10pKl18XFx1W1xkQS1GYS1mXXs0fXxcXHhbXGRBLUZhLWZdezJ9fFxcXGQrfFxcW15cZHV4XXxcKFw/WyE6PV18WygpXl18W14oKVtcXF5dKy9nKSxiPWYubGVuZ3RoLGQ9W10sYz0wLGk9MDtjPGI7KytjKXt2YXIgaj1mW2NdO2o9PT0iKCI/KytpOiJcXCI9PT1qLmNoYXJBdCgwKSYmKGo9K2ouc3Vic3RyaW5nKDEpKSYmajw9aSYmKGRbal09LTEpfWZvcihjPTE7YzxkLmxlbmd0aDsrK2MpLTE9PT1kW2NdJiYoZFtjXT0rK3QpO2ZvcihpPWM9MDtjPGI7KytjKWo9ZltjXSxqPT09IigiPygrK2ksZFtpXT09PXZvaWQgMCYmKGZbY109Iig/OiIpKToiXFwiPT09ai5jaGFyQXQoMCkmJgorKGo9K2ouc3Vic3RyaW5nKDEpKSYmajw9aSYmKGZbY109IlxcIitkW2ldKTtmb3IoaT1jPTA7YzxiOysrYykiXiI9PT1mW2NdJiYiXiIhPT1mW2MrMV0mJihmW2NdPSIiKTtpZihhLmlnbm9yZUNhc2UmJnMpZm9yKGM9MDtjPGI7KytjKWo9ZltjXSxhPWouY2hhckF0KDApLGoubGVuZ3RoPj0yJiZhPT09IlsiP2ZbY109aChqKTphIT09IlxcIiYmKGZbY109ai5yZXBsYWNlKC9bQS1aYS16XS9nLGZ1bmN0aW9uKGEpe2E9YS5jaGFyQ29kZUF0KDApO3JldHVybiJbIitTdHJpbmcuZnJvbUNoYXJDb2RlKGEmLTMzLGF8MzIpKyJdIn0pKTtyZXR1cm4gZi5qb2luKCIiKX1mb3IodmFyIHQ9MCxzPSExLGw9ITEscD0wLGQ9YS5sZW5ndGg7cDxkOysrcCl7dmFyIGc9YVtwXTtpZihnLmlnbm9yZUNhc2UpbD0hMDtlbHNlIGlmKC9bYS16XS9pLnRlc3QoZy5zb3VyY2UucmVwbGFjZSgvXFx1W1xkYS1mXXs0fXxcXHhbXGRhLWZdezJ9fFxcW15VWHV4XS9naSwiIikpKXtzPSEwO2w9ITE7YnJlYWt9fWZvcih2YXIgcj0KK3tiOjgsdDo5LG46MTAsdjoxMSxmOjEyLHI6MTN9LG49W10scD0wLGQ9YS5sZW5ndGg7cDxkOysrcCl7Zz1hW3BdO2lmKGcuZ2xvYmFsfHxnLm11bHRpbGluZSl0aHJvdyBFcnJvcigiIitnKTtuLnB1c2goIig/OiIreShnKSsiKSIpfXJldHVybiBSZWdFeHAobi5qb2luKCJ8IiksbD8iZ2kiOiJnIil9ZnVuY3Rpb24gTShhKXtmdW5jdGlvbiBtKGEpe3N3aXRjaChhLm5vZGVUeXBlKXtjYXNlIDE6aWYoZS50ZXN0KGEuY2xhc3NOYW1lKSlicmVhaztmb3IodmFyIGc9YS5maXJzdENoaWxkO2c7Zz1nLm5leHRTaWJsaW5nKW0oZyk7Zz1hLm5vZGVOYW1lO2lmKCJCUiI9PT1nfHwiTEkiPT09ZyloW3NdPSJcbiIsdFtzPDwxXT15KyssdFtzKys8PDF8MV09YTticmVhaztjYXNlIDM6Y2FzZSA0Omc9YS5ub2RlVmFsdWUsZy5sZW5ndGgmJihnPXA/Zy5yZXBsYWNlKC9cclxuPy9nLCJcbiIpOmcucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIiksaFtzXT1nLHRbczw8MV09eSx5Kz1nLmxlbmd0aCwKK3RbcysrPDwxfDFdPWEpfX12YXIgZT0vKD86Xnxccylub2NvZGUoPzpcc3wkKS8saD1bXSx5PTAsdD1bXSxzPTAsbDthLmN1cnJlbnRTdHlsZT9sPWEuY3VycmVudFN0eWxlLndoaXRlU3BhY2U6d2luZG93LmdldENvbXB1dGVkU3R5bGUmJihsPWRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYSxxKS5nZXRQcm9wZXJ0eVZhbHVlKCJ3aGl0ZS1zcGFjZSIpKTt2YXIgcD1sJiYicHJlIj09PWwuc3Vic3RyaW5nKDAsMyk7bShhKTtyZXR1cm57YTpoLmpvaW4oIiIpLnJlcGxhY2UoL1xuJC8sIiIpLGM6dH19ZnVuY3Rpb24gQihhLG0sZSxoKXttJiYoYT17YTptLGQ6YX0sZShhKSxoLnB1c2guYXBwbHkoaCxhLmUpKX1mdW5jdGlvbiB4KGEsbSl7ZnVuY3Rpb24gZShhKXtmb3IodmFyIGw9YS5kLHA9W2wsInBsbiJdLGQ9MCxnPWEuYS5tYXRjaCh5KXx8W10scj17fSxuPTAsej1nLmxlbmd0aDtuPHo7KytuKXt2YXIgZj1nW25dLGI9cltmXSxvPXZvaWQgMCxjO2lmKHR5cGVvZiBiPT09Cisic3RyaW5nIiljPSExO2Vsc2V7dmFyIGk9aFtmLmNoYXJBdCgwKV07aWYoaSlvPWYubWF0Y2goaVsxXSksYj1pWzBdO2Vsc2V7Zm9yKGM9MDtjPHQ7KytjKWlmKGk9bVtjXSxvPWYubWF0Y2goaVsxXSkpe2I9aVswXTticmVha31vfHwoYj0icGxuIil9aWYoKGM9Yi5sZW5ndGg+PTUmJiJsYW5nLSI9PT1iLnN1YnN0cmluZygwLDUpKSYmIShvJiZ0eXBlb2Ygb1sxXT09PSJzdHJpbmciKSljPSExLGI9InNyYyI7Y3x8KHJbZl09Yil9aT1kO2QrPWYubGVuZ3RoO2lmKGMpe2M9b1sxXTt2YXIgaj1mLmluZGV4T2YoYyksaz1qK2MubGVuZ3RoO29bMl0mJihrPWYubGVuZ3RoLW9bMl0ubGVuZ3RoLGo9ay1jLmxlbmd0aCk7Yj1iLnN1YnN0cmluZyg1KTtCKGwraSxmLnN1YnN0cmluZygwLGopLGUscCk7QihsK2kraixjLEMoYixjKSxwKTtCKGwraStrLGYuc3Vic3RyaW5nKGspLGUscCl9ZWxzZSBwLnB1c2gobCtpLGIpfWEuZT1wfXZhciBoPXt9LHk7KGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWEuY29uY2F0KG0pLAorbD1bXSxwPXt9LGQ9MCxnPWUubGVuZ3RoO2Q8ZzsrK2Qpe3ZhciByPWVbZF0sbj1yWzNdO2lmKG4pZm9yKHZhciBrPW4ubGVuZ3RoOy0taz49MDspaFtuLmNoYXJBdChrKV09cjtyPXJbMV07bj0iIityO3AuaGFzT3duUHJvcGVydHkobil8fChsLnB1c2gocikscFtuXT1xKX1sLnB1c2goL1tcU1xzXS8pO3k9TChsKX0pKCk7dmFyIHQ9bS5sZW5ndGg7cmV0dXJuIGV9ZnVuY3Rpb24gdShhKXt2YXIgbT1bXSxlPVtdO2EudHJpcGxlUXVvdGVkU3RyaW5ncz9tLnB1c2goWyJzdHIiLC9eKD86JycnKD86W14nXFxdfFxcW1xTXHNdfCcnPyg/PVteJ10pKSooPzonJyd8JCl8IiIiKD86W14iXFxdfFxcW1xTXHNdfCIiPyg/PVteIl0pKSooPzoiIiJ8JCl8Jyg/OlteJ1xcXXxcXFtcU1xzXSkqKD86J3wkKXwiKD86W14iXFxdfFxcW1xTXHNdKSooPzoifCQpKS8scSwiJ1wiIl0pOmEubXVsdGlMaW5lU3RyaW5ncz9tLnB1c2goWyJzdHIiLC9eKD86Jyg/OlteJ1xcXXxcXFtcU1xzXSkqKD86J3wkKXwiKD86W14iXFxdfFxcW1xTXHNdKSooPzoifCQpfGAoPzpbXlxcYF18XFxbXFNcc10pKig/OmB8JCkpLywKK3EsIidcImAiXSk6bS5wdXNoKFsic3RyIiwvXig/OicoPzpbXlxuXHInXFxdfFxcLikqKD86J3wkKXwiKD86W15cblxyIlxcXXxcXC4pKig/OiJ8JCkpLyxxLCJcIiciXSk7YS52ZXJiYXRpbVN0cmluZ3MmJmUucHVzaChbInN0ciIsL15AIig/OlteIl18IiIpKig/OiJ8JCkvLHFdKTt2YXIgaD1hLmhhc2hDb21tZW50cztoJiYoYS5jU3R5bGVDb21tZW50cz8oaD4xP20ucHVzaChbImNvbSIsL14jKD86IyMoPzpbXiNdfCMoPyEjIykpKig/OiMjI3wkKXwuKikvLHEsIiMiXSk6bS5wdXNoKFsiY29tIiwvXiMoPzooPzpkZWZpbmV8ZWxpZnxlbHNlfGVuZGlmfGVycm9yfGlmZGVmfGluY2x1ZGV8aWZuZGVmfGxpbmV8cHJhZ21hfHVuZGVmfHdhcm5pbmcpXGJ8W15cblxyXSopLyxxLCIjIl0pLGUucHVzaChbInN0ciIsL148KD86KD86KD86XC5cLlwvKSp8XC8/KSg/Oltcdy1dKyg/OlwvW1x3LV0rKSspP1tcdy1dK1wuaHxbYS16XVx3Kik+LyxxXSkpOm0ucHVzaChbImNvbSIsL14jW15cblxyXSovLAorcSwiIyJdKSk7YS5jU3R5bGVDb21tZW50cyYmKGUucHVzaChbImNvbSIsL15cL1wvW15cblxyXSovLHFdKSxlLnB1c2goWyJjb20iLC9eXC9cKltcU1xzXSo/KD86XCpcL3wkKS8scV0pKTthLnJlZ2V4TGl0ZXJhbHMmJmUucHVzaChbImxhbmctcmVnZXgiLC9eKD86Xl5cLj98WyErLV18IT18IT09fCN8JXwlPXwmfCYmfCYmPXwmPXxcKHxcKnxcKj18XCs9fCx8LT18LT58XC98XC89fDp8Ojp8O3w8fDw8fDw8PXw8PXw9fD09fD09PXw+fD49fD4+fD4+PXw+Pj58Pj4+PXxbP0BbXl18XF49fFxeXF58XF5cXj18e3xcfHxcfD18XHxcfHxcfFx8PXx+fGJyZWFrfGNhc2V8Y29udGludWV8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxpbnN0YW5jZW9mfHJldHVybnx0aHJvd3x0cnl8dHlwZW9mKVxzKihcLyg/PVteKi9dKSg/OlteL1tcXF18XFxbXFNcc118XFsoPzpbXlxcXF1dfFxcW1xTXHNdKSooPzpdfCQpKStcLykvXSk7KGg9YS50eXBlcykmJmUucHVzaChbInR5cCIsaF0pO2E9KCIiK2Eua2V5d29yZHMpLnJlcGxhY2UoL14gfCAkL2csCisiIik7YS5sZW5ndGgmJmUucHVzaChbImt3ZCIsUmVnRXhwKCJeKD86IithLnJlcGxhY2UoL1tccyxdKy9nLCJ8IikrIilcXGIiKSxxXSk7bS5wdXNoKFsicGxuIiwvXlxzKy8scSwiIFxyXG5cdFx4YTAiXSk7ZS5wdXNoKFsibGl0IiwvXkBbJF9hLXpdW1x3JEBdKi9pLHFdLFsidHlwIiwvXig/OltAX10/W0EtWl0rW2Etel1bXHckQF0qfFx3K190XGIpLyxxXSxbInBsbiIsL15bJF9hLXpdW1x3JEBdKi9pLHFdLFsibGl0IiwvXig/OjB4W1xkYS1mXSt8KD86XGQoPzpfXGQrKSpcZCooPzpcLlxkKik/fFwuXGRcKykoPzplWystXT9cZCspPylbYS16XSovaSxxLCIwMTIzNDU2Nzg5Il0sWyJwbG4iLC9eXFxbXFNcc10/LyxxXSxbInB1biIsL14uW15cc1x3Ii0kJy4vQFxcYF0qLyxxXSk7cmV0dXJuIHgobSxlKX1mdW5jdGlvbiBEKGEsbSl7ZnVuY3Rpb24gZShhKXtzd2l0Y2goYS5ub2RlVHlwZSl7Y2FzZSAxOmlmKGsudGVzdChhLmNsYXNzTmFtZSkpYnJlYWs7aWYoIkJSIj09PWEubm9kZU5hbWUpaChhKSwKK2EucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpO2Vsc2UgZm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWUoYSk7YnJlYWs7Y2FzZSAzOmNhc2UgNDppZihwKXt2YXIgYj1hLm5vZGVWYWx1ZSxkPWIubWF0Y2godCk7aWYoZCl7dmFyIGM9Yi5zdWJzdHJpbmcoMCxkLmluZGV4KTthLm5vZGVWYWx1ZT1jOyhiPWIuc3Vic3RyaW5nKGQuaW5kZXgrZFswXS5sZW5ndGgpKSYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzLmNyZWF0ZVRleHROb2RlKGIpLGEubmV4dFNpYmxpbmcpO2goYSk7Y3x8YS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpfX19fWZ1bmN0aW9uIGgoYSl7ZnVuY3Rpb24gYihhLGQpe3ZhciBlPWQ/YS5jbG9uZU5vZGUoITEpOmEsZj1hLnBhcmVudE5vZGU7aWYoZil7dmFyIGY9YihmLDEpLGc9YS5uZXh0U2libGluZztmLmFwcGVuZENoaWxkKGUpO2Zvcih2YXIgaD1nO2g7aD1nKWc9aC5uZXh0U2libGluZyxmLmFwcGVuZENoaWxkKGgpfXJldHVybiBlfQorZm9yKDshYS5uZXh0U2libGluZzspaWYoYT1hLnBhcmVudE5vZGUsIWEpcmV0dXJuO2Zvcih2YXIgYT1iKGEubmV4dFNpYmxpbmcsMCksZTsoZT1hLnBhcmVudE5vZGUpJiZlLm5vZGVUeXBlPT09MTspYT1lO2QucHVzaChhKX12YXIgaz0vKD86Xnxccylub2NvZGUoPzpcc3wkKS8sdD0vXHJcbj98XG4vLHM9YS5vd25lckRvY3VtZW50LGw7YS5jdXJyZW50U3R5bGU/bD1hLmN1cnJlbnRTdHlsZS53aGl0ZVNwYWNlOndpbmRvdy5nZXRDb21wdXRlZFN0eWxlJiYobD1zLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYSxxKS5nZXRQcm9wZXJ0eVZhbHVlKCJ3aGl0ZS1zcGFjZSIpKTt2YXIgcD1sJiYicHJlIj09PWwuc3Vic3RyaW5nKDAsMyk7Zm9yKGw9cy5jcmVhdGVFbGVtZW50KCJMSSIpO2EuZmlyc3RDaGlsZDspbC5hcHBlbmRDaGlsZChhLmZpcnN0Q2hpbGQpO2Zvcih2YXIgZD1bbF0sZz0wO2c8ZC5sZW5ndGg7KytnKWUoZFtnXSk7bT09PShtfDApJiZkWzBdLnNldEF0dHJpYnV0ZSgidmFsdWUiLAorbSk7dmFyIHI9cy5jcmVhdGVFbGVtZW50KCJPTCIpO3IuY2xhc3NOYW1lPSJsaW5lbnVtcyI7Zm9yKHZhciBuPU1hdGgubWF4KDAsbS0xfDApfHwwLGc9MCx6PWQubGVuZ3RoO2c8ejsrK2cpbD1kW2ddLGwuY2xhc3NOYW1lPSJMIisoZytuKSUxMCxsLmZpcnN0Q2hpbGR8fGwuYXBwZW5kQ2hpbGQocy5jcmVhdGVUZXh0Tm9kZSgiXHhhMCIpKSxyLmFwcGVuZENoaWxkKGwpO2EuYXBwZW5kQ2hpbGQocil9ZnVuY3Rpb24gayhhLG0pe2Zvcih2YXIgZT1tLmxlbmd0aDstLWU+PTA7KXt2YXIgaD1tW2VdO0EuaGFzT3duUHJvcGVydHkoaCk/d2luZG93LmNvbnNvbGUmJmNvbnNvbGUud2FybigiY2Fubm90IG92ZXJyaWRlIGxhbmd1YWdlIGhhbmRsZXIgJXMiLGgpOkFbaF09YX19ZnVuY3Rpb24gQyhhLG0pe2lmKCFhfHwhQS5oYXNPd25Qcm9wZXJ0eShhKSlhPS9eXHMqPC8udGVzdChtKT8iZGVmYXVsdC1tYXJrdXAiOiJkZWZhdWx0LWNvZGUiO3JldHVybiBBW2FdfWZ1bmN0aW9uIEUoYSl7dmFyIG09CithLmc7dHJ5e3ZhciBlPU0oYS5oKSxoPWUuYTthLmE9aDthLmM9ZS5jO2EuZD0wO0MobSxoKShhKTt2YXIgaz0vXGJNU0lFXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksbT0vXG4vZyx0PWEuYSxzPXQubGVuZ3RoLGU9MCxsPWEuYyxwPWwubGVuZ3RoLGg9MCxkPWEuZSxnPWQubGVuZ3RoLGE9MDtkW2ddPXM7dmFyIHIsbjtmb3Iobj1yPTA7bjxnOylkW25dIT09ZFtuKzJdPyhkW3IrK109ZFtuKytdLGRbcisrXT1kW24rK10pOm4rPTI7Zz1yO2ZvcihuPXI9MDtuPGc7KXtmb3IodmFyIHo9ZFtuXSxmPWRbbisxXSxiPW4rMjtiKzI8PWcmJmRbYisxXT09PWY7KWIrPTI7ZFtyKytdPXo7ZFtyKytdPWY7bj1ifWZvcihkLmxlbmd0aD1yO2g8cDspe3ZhciBvPWxbaCsyXXx8cyxjPWRbYSsyXXx8cyxiPU1hdGgubWluKG8sYyksaT1sW2grMV0sajtpZihpLm5vZGVUeXBlIT09MSYmKGo9dC5zdWJzdHJpbmcoZSxiKSkpe2smJihqPWoucmVwbGFjZShtLCJcciIpKTtpLm5vZGVWYWx1ZT0KK2o7dmFyIHU9aS5vd25lckRvY3VtZW50LHY9dS5jcmVhdGVFbGVtZW50KCJTUEFOIik7di5jbGFzc05hbWU9ZFthKzFdO3ZhciB4PWkucGFyZW50Tm9kZTt4LnJlcGxhY2VDaGlsZCh2LGkpO3YuYXBwZW5kQ2hpbGQoaSk7ZTxvJiYobFtoKzFdPWk9dS5jcmVhdGVUZXh0Tm9kZSh0LnN1YnN0cmluZyhiLG8pKSx4Lmluc2VydEJlZm9yZShpLHYubmV4dFNpYmxpbmcpKX1lPWI7ZT49byYmKGgrPTIpO2U+PWMmJihhKz0yKX19Y2F0Y2godyl7ImNvbnNvbGUiaW4gd2luZG93JiZjb25zb2xlLmxvZyh3JiZ3LnN0YWNrP3cuc3RhY2s6dyl9fXZhciB2PVsiYnJlYWssY29udGludWUsZG8sZWxzZSxmb3IsaWYscmV0dXJuLHdoaWxlIl0sdz1bW3YsImF1dG8sY2FzZSxjaGFyLGNvbnN0LGRlZmF1bHQsZG91YmxlLGVudW0sZXh0ZXJuLGZsb2F0LGdvdG8saW50LGxvbmcscmVnaXN0ZXIsc2hvcnQsc2lnbmVkLHNpemVvZixzdGF0aWMsc3RydWN0LHN3aXRjaCx0eXBlZGVmLHVuaW9uLHVuc2lnbmVkLHZvaWQsdm9sYXRpbGUiXSwKKyJjYXRjaCxjbGFzcyxkZWxldGUsZmFsc2UsaW1wb3J0LG5ldyxvcGVyYXRvcixwcml2YXRlLHByb3RlY3RlZCxwdWJsaWMsdGhpcyx0aHJvdyx0cnVlLHRyeSx0eXBlb2YiXSxGPVt3LCJhbGlnbm9mLGFsaWduX3VuaW9uLGFzbSxheGlvbSxib29sLGNvbmNlcHQsY29uY2VwdF9tYXAsY29uc3RfY2FzdCxjb25zdGV4cHIsZGVjbHR5cGUsZHluYW1pY19jYXN0LGV4cGxpY2l0LGV4cG9ydCxmcmllbmQsaW5saW5lLGxhdGVfY2hlY2ssbXV0YWJsZSxuYW1lc3BhY2UsbnVsbHB0cixyZWludGVycHJldF9jYXN0LHN0YXRpY19hc3NlcnQsc3RhdGljX2Nhc3QsdGVtcGxhdGUsdHlwZWlkLHR5cGVuYW1lLHVzaW5nLHZpcnR1YWwsd2hlcmUiXSxHPVt3LCJhYnN0cmFjdCxib29sZWFuLGJ5dGUsZXh0ZW5kcyxmaW5hbCxmaW5hbGx5LGltcGxlbWVudHMsaW1wb3J0LGluc3RhbmNlb2YsbnVsbCxuYXRpdmUscGFja2FnZSxzdHJpY3RmcCxzdXBlcixzeW5jaHJvbml6ZWQsdGhyb3dzLHRyYW5zaWVudCJdLAorSD1bRywiYXMsYmFzZSxieSxjaGVja2VkLGRlY2ltYWwsZGVsZWdhdGUsZGVzY2VuZGluZyxkeW5hbWljLGV2ZW50LGZpeGVkLGZvcmVhY2gsZnJvbSxncm91cCxpbXBsaWNpdCxpbixpbnRlcmZhY2UsaW50ZXJuYWwsaW50byxpcyxsb2NrLG9iamVjdCxvdXQsb3ZlcnJpZGUsb3JkZXJieSxwYXJhbXMscGFydGlhbCxyZWFkb25seSxyZWYsc2J5dGUsc2VhbGVkLHN0YWNrYWxsb2Msc3RyaW5nLHNlbGVjdCx1aW50LHVsb25nLHVuY2hlY2tlZCx1bnNhZmUsdXNob3J0LHZhciJdLHc9W3csImRlYnVnZ2VyLGV2YWwsZXhwb3J0LGZ1bmN0aW9uLGdldCxudWxsLHNldCx1bmRlZmluZWQsdmFyLHdpdGgsSW5maW5pdHksTmFOIl0sST1bdiwiYW5kLGFzLGFzc2VydCxjbGFzcyxkZWYsZGVsLGVsaWYsZXhjZXB0LGV4ZWMsZmluYWxseSxmcm9tLGdsb2JhbCxpbXBvcnQsaW4saXMsbGFtYmRhLG5vbmxvY2FsLG5vdCxvcixwYXNzLHByaW50LHJhaXNlLHRyeSx3aXRoLHlpZWxkLEZhbHNlLFRydWUsTm9uZSJdLAorSj1bdiwiYWxpYXMsYW5kLGJlZ2luLGNhc2UsY2xhc3MsZGVmLGRlZmluZWQsZWxzaWYsZW5kLGVuc3VyZSxmYWxzZSxpbixtb2R1bGUsbmV4dCxuaWwsbm90LG9yLHJlZG8scmVzY3VlLHJldHJ5LHNlbGYsc3VwZXIsdGhlbix0cnVlLHVuZGVmLHVubGVzcyx1bnRpbCx3aGVuLHlpZWxkLEJFR0lOLEVORCJdLHY9W3YsImNhc2UsZG9uZSxlbGlmLGVzYWMsZXZhbCxmaSxmdW5jdGlvbixpbixsb2NhbCxzZXQsdGhlbix1bnRpbCJdLEs9L14oRElSfEZJTEV8dmVjdG9yfChkZXxwcmlvcml0eV8pP3F1ZXVlfGxpc3R8c3RhY2t8KGNvbnN0Xyk/aXRlcmF0b3J8KG11bHRpKT8oc2V0fG1hcCl8Yml0c2V0fHU/KGludHxmbG9hdClcZCopLyxOPS9cUy8sTz11KHtrZXl3b3JkczpbRixILHcsImNhbGxlcixkZWxldGUsZGllLGRvLGR1bXAsZWxzaWYsZXZhbCxleGl0LGZvcmVhY2gsZm9yLGdvdG8saWYsaW1wb3J0LGxhc3QsbG9jYWwsbXksbmV4dCxubyxvdXIscHJpbnQscGFja2FnZSxyZWRvLHJlcXVpcmUsc3ViLHVuZGVmLHVubGVzcyx1bnRpbCx1c2Usd2FudGFycmF5LHdoaWxlLEJFR0lOLEVORCIrCitJLEosdl0saGFzaENvbW1lbnRzOiEwLGNTdHlsZUNvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITAscmVnZXhMaXRlcmFsczohMH0pLEE9e307ayhPLFsiZGVmYXVsdC1jb2RlIl0pO2soeChbXSxbWyJwbG4iLC9eW148P10rL10sWyJkZWMiLC9ePCFcd1tePl0qKD86PnwkKS9dLFsiY29tIiwvXjxcIS0tW1xTXHNdKj8oPzotLVw+fCQpL10sWyJsYW5nLSIsL148XD8oW1xTXHNdKz8pKD86XD8+fCQpL10sWyJsYW5nLSIsL148JShbXFNcc10rPykoPzolPnwkKS9dLFsicHVuIiwvXig/OjxbJT9dfFslP10+KS9dLFsibGFuZy0iLC9ePHhtcFxiW14+XSo+KFtcU1xzXSs/KTxcL3htcFxiW14+XSo+L2ldLFsibGFuZy1qcyIsL148c2NyaXB0XGJbXj5dKj4oW1xTXHNdKj8pKDxcL3NjcmlwdFxiW14+XSo+KS9pXSxbImxhbmctY3NzIiwvXjxzdHlsZVxiW14+XSo+KFtcU1xzXSo/KSg8XC9zdHlsZVxiW14+XSo+KS9pXSxbImxhbmctaW4udGFnIiwvXig8XC8/W2Etel1bXjw+XSo+KS9pXV0pLAorWyJkZWZhdWx0LW1hcmt1cCIsImh0bSIsImh0bWwiLCJteG1sIiwieGh0bWwiLCJ4bWwiLCJ4c2wiXSk7ayh4KFtbInBsbiIsL15ccysvLHEsIiBcdFxyXG4iXSxbImF0diIsL14oPzoiW14iXSoiP3wnW14nXSonPykvLHEsIlwiJyJdXSxbWyJ0YWciLC9eXjxcLz9bYS16XSg/Oltcdy0uOl0qXHcpP3xcLz8+JC9pXSxbImF0biIsL14oPyFzdHlsZVtccz1dfG9uKVthLXpdKD86W1x3Oi1dKlx3KT8vaV0sWyJsYW5nLXVxLnZhbCIsL149XHMqKFteXHMiJz5dKig/OlteXHMiJy8+XXxcLyg/PVxzKSkpL10sWyJwdW4iLC9eWy88LT5dKy9dLFsibGFuZy1qcyIsL15vblx3K1xzKj1ccyoiKFteIl0rKSIvaV0sWyJsYW5nLWpzIiwvXm9uXHcrXHMqPVxzKicoW14nXSspJy9pXSxbImxhbmctanMiLC9eb25cdytccyo9XHMqKFteXHMiJz5dKykvaV0sWyJsYW5nLWNzcyIsL15zdHlsZVxzKj1ccyoiKFteIl0rKSIvaV0sWyJsYW5nLWNzcyIsL15zdHlsZVxzKj1ccyonKFteJ10rKScvaV0sWyJsYW5nLWNzcyIsCisvXnN0eWxlXHMqPVxzKihbXlxzIic+XSspL2ldXSksWyJpbi50YWciXSk7ayh4KFtdLFtbImF0diIsL15bXFNcc10rL11dKSxbInVxLnZhbCJdKTtrKHUoe2tleXdvcmRzOkYsaGFzaENvbW1lbnRzOiEwLGNTdHlsZUNvbW1lbnRzOiEwLHR5cGVzOkt9KSxbImMiLCJjYyIsImNwcCIsImN4eCIsImN5YyIsIm0iXSk7ayh1KHtrZXl3b3JkczoibnVsbCx0cnVlLGZhbHNlIn0pLFsianNvbiJdKTtrKHUoe2tleXdvcmRzOkgsaGFzaENvbW1lbnRzOiEwLGNTdHlsZUNvbW1lbnRzOiEwLHZlcmJhdGltU3RyaW5nczohMCx0eXBlczpLfSksWyJjcyJdKTtrKHUoe2tleXdvcmRzOkcsY1N0eWxlQ29tbWVudHM6ITB9KSxbImphdmEiXSk7ayh1KHtrZXl3b3Jkczp2LGhhc2hDb21tZW50czohMCxtdWx0aUxpbmVTdHJpbmdzOiEwfSksWyJic2giLCJjc2giLCJzaCJdKTtrKHUoe2tleXdvcmRzOkksaGFzaENvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITAsdHJpcGxlUXVvdGVkU3RyaW5nczohMH0pLAorWyJjdiIsInB5Il0pO2sodSh7a2V5d29yZHM6ImNhbGxlcixkZWxldGUsZGllLGRvLGR1bXAsZWxzaWYsZXZhbCxleGl0LGZvcmVhY2gsZm9yLGdvdG8saWYsaW1wb3J0LGxhc3QsbG9jYWwsbXksbmV4dCxubyxvdXIscHJpbnQscGFja2FnZSxyZWRvLHJlcXVpcmUsc3ViLHVuZGVmLHVubGVzcyx1bnRpbCx1c2Usd2FudGFycmF5LHdoaWxlLEJFR0lOLEVORCIsaGFzaENvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITAscmVnZXhMaXRlcmFsczohMH0pLFsicGVybCIsInBsIiwicG0iXSk7ayh1KHtrZXl3b3JkczpKLGhhc2hDb21tZW50czohMCxtdWx0aUxpbmVTdHJpbmdzOiEwLHJlZ2V4TGl0ZXJhbHM6ITB9KSxbInJiIl0pO2sodSh7a2V5d29yZHM6dyxjU3R5bGVDb21tZW50czohMCxyZWdleExpdGVyYWxzOiEwfSksWyJqcyJdKTtrKHUoe2tleXdvcmRzOiJhbGwsYW5kLGJ5LGNhdGNoLGNsYXNzLGVsc2UsZXh0ZW5kcyxmYWxzZSxmaW5hbGx5LGZvcixpZixpbixpcyxpc250LGxvb3AsbmV3LG5vLG5vdCxudWxsLG9mLG9mZixvbixvcixyZXR1cm4sc3VwZXIsdGhlbix0cnVlLHRyeSx1bmxlc3MsdW50aWwsd2hlbix3aGlsZSx5ZXMiLAoraGFzaENvbW1lbnRzOjMsY1N0eWxlQ29tbWVudHM6ITAsbXVsdGlsaW5lU3RyaW5nczohMCx0cmlwbGVRdW90ZWRTdHJpbmdzOiEwLHJlZ2V4TGl0ZXJhbHM6ITB9KSxbImNvZmZlZSJdKTtrKHgoW10sW1sic3RyIiwvXltcU1xzXSsvXV0pLFsicmVnZXgiXSk7d2luZG93LnByZXR0eVByaW50T25lPWZ1bmN0aW9uKGEsbSxlKXt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQUkUiKTtoLmlubmVySFRNTD1hO2UmJkQoaCxlKTtFKHtnOm0saTplLGg6aH0pO3JldHVybiBoLmlubmVySFRNTH07d2luZG93LnByZXR0eVByaW50PWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIG0oKXtmb3IodmFyIGU9d2luZG93LlBSX1NIT1VMRF9VU0VfQ09OVElOVUFUSU9OP2wubm93KCkrMjUwOkluZmluaXR5O3A8aC5sZW5ndGgmJmwubm93KCk8ZTtwKyspe3ZhciBuPWhbcF0saz1uLmNsYXNzTmFtZTtpZihrLmluZGV4T2YoInByZXR0eXByaW50Iik+PTApe3ZhciBrPWsubWF0Y2goZyksZixiO2lmKGI9Cishayl7Yj1uO2Zvcih2YXIgbz12b2lkIDAsYz1iLmZpcnN0Q2hpbGQ7YztjPWMubmV4dFNpYmxpbmcpdmFyIGk9Yy5ub2RlVHlwZSxvPWk9PT0xP28/YjpjOmk9PT0zP04udGVzdChjLm5vZGVWYWx1ZSk/YjpvOm87Yj0oZj1vPT09Yj92b2lkIDA6bykmJiJDT0RFIj09PWYudGFnTmFtZX1iJiYoaz1mLmNsYXNzTmFtZS5tYXRjaChnKSk7ayYmKGs9a1sxXSk7Yj0hMTtmb3Iobz1uLnBhcmVudE5vZGU7bztvPW8ucGFyZW50Tm9kZSlpZigoby50YWdOYW1lPT09InByZSJ8fG8udGFnTmFtZT09PSJjb2RlInx8by50YWdOYW1lPT09InhtcCIpJiZvLmNsYXNzTmFtZSYmby5jbGFzc05hbWUuaW5kZXhPZigicHJldHR5cHJpbnQiKT49MCl7Yj0hMDticmVha31ifHwoKGI9KGI9bi5jbGFzc05hbWUubWF0Y2goL1xibGluZW51bXNcYig/OjooXGQrKSk/LykpP2JbMV0mJmJbMV0ubGVuZ3RoPytiWzFdOiEwOiExKSYmRChuLGIpLGQ9e2c6ayxoOm4saTpifSxFKGQpKX19cDxoLmxlbmd0aD9zZXRUaW1lb3V0KG0sCisyNTApOmEmJmEoKX1mb3IodmFyIGU9W2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwcmUiKSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY29kZSIpLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ4bXAiKV0saD1bXSxrPTA7azxlLmxlbmd0aDsrK2spZm9yKHZhciB0PTAscz1lW2tdLmxlbmd0aDt0PHM7Kyt0KWgucHVzaChlW2tdW3RdKTt2YXIgZT1xLGw9RGF0ZTtsLm5vd3x8KGw9e25vdzpmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX19KTt2YXIgcD0wLGQsZz0vXGJsYW5nKD86dWFnZSk/LShbXHcuXSspKD8hXFMpLzttKCl9O3dpbmRvdy5QUj17Y3JlYXRlU2ltcGxlTGV4ZXI6eCxyZWdpc3RlckxhbmdIYW5kbGVyOmssc291cmNlRGVjb3JhdG9yOnUsUFJfQVRUUklCX05BTUU6ImF0biIsUFJfQVRUUklCX1ZBTFVFOiJhdHYiLFBSX0NPTU1FTlQ6ImNvbSIsUFJfREVDTEFSQVRJT046ImRlYyIsUFJfS0VZV09SRDoia3dkIixQUl9MSVRFUkFMOiJsaXQiLAorUFJfTk9DT0RFOiJub2NvZGUiLFBSX1BMQUlOOiJwbG4iLFBSX1BVTkNUVUFUSU9OOiJwdW4iLFBSX1NPVVJDRToic3JjIixQUl9TVFJJTkc6InN0ciIsUFJfVEFHOiJ0YWciLFBSX1RZUEU6InR5cCJ9fSkoKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9wcm9qZWN0cGFnZS5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9wcm9qZWN0cGFnZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzY3MDQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3Byb2plY3RwYWdlLmpzCkBAIC0wLDAgKzEsNDI4IEBACisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIHByb2plY3RQYWdlSW5pdChjdHgpIHsKKworICB2YXIgbGF5ZXJBZGRJbnB1dCA9ICQoIiNsYXllci1hZGQtaW5wdXQiKTsKKyAgdmFyIGxheWVyc0luUHJqTGlzdCA9ICQoIiNsYXllcnMtaW4tcHJvamVjdC1saXN0Iik7CisgIHZhciBsYXllckFkZEJ0biA9ICQoIiNhZGQtbGF5ZXItYnRuIik7CisKKyAgdmFyIG1hY2hpbmVDaGFuZ2VJbnB1dCA9ICQoIiNtYWNoaW5lLWNoYW5nZS1pbnB1dCIpOworICB2YXIgbWFjaGluZUNoYW5nZUJ0biA9ICQoIiNtYWNoaW5lLWNoYW5nZS1idG4iKTsKKyAgdmFyIG1hY2hpbmVGb3JtID0gJCgiI3NlbGVjdC1tYWNoaW5lLWZvcm0iKTsKKyAgdmFyIG1hY2hpbmVDaGFuZ2VGb3JtVG9nZ2xlID0gJCgiI2NoYW5nZS1tYWNoaW5lLXRvZ2dsZSIpOworICB2YXIgbWFjaGluZU5hbWVUaXRsZSA9ICQoIiNwcm9qZWN0LW1hY2hpbmUtbmFtZSIpOworICB2YXIgbWFjaGluZUNoYW5nZUNhbmNlbCA9ICQoIiNjYW5jZWwtbWFjaGluZS1jaGFuZ2UiKTsKKworICB2YXIgZnJlcUJ1aWxkQnRuID0gICQoIiNmcmVxLWJ1aWxkLWJ0biIpOworICB2YXIgZnJlcUJ1aWxkTGlzdCA9ICQoIiNmcmVxLWJ1aWxkLWxpc3QiKTsKKworICB2YXIgcmVsZWFzZUNoYW5nZUZvcm1Ub2dnbGUgPSAkKCIjcmVsZWFzZS1jaGFuZ2UtdG9nZ2xlIik7CisgIHZhciByZWxlYXNlVGl0bGUgPSAkKCIjcHJvamVjdC1yZWxlYXNlLXRpdGxlIik7CisgIHZhciByZWxlYXNlRm9ybSA9ICQoIiNjaGFuZ2UtcmVsZWFzZS1mb3JtIik7CisgIHZhciByZWxlYXNlTW9kYWwgPSAkKCIjY2hhbmdlLXJlbGVhc2UtbW9kYWwiKTsKKyAgdmFyIGNhbmNlbFJlbGVhc2VDaGFuZ2UgPSAkKCIjY2FuY2VsLXJlbGVhc2UtY2hhbmdlIik7CisKKyAgdmFyIGN1cnJlbnRMYXllckFkZFNlbGVjdGlvbjsKKyAgdmFyIGN1cnJlbnRNYWNoaW5lQWRkU2VsZWN0aW9uID0ge307CisKKyAgdmFyIHVybFBhcmFtcyA9IGxpYnRvYXN0ZXIucGFyc2VVcmxQYXJhbXMoKTsKKworICBsaWJ0b2FzdGVyLmdldFByb2plY3RJbmZvKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RQYWdlVXJsLCBmdW5jdGlvbihwcmpJbmZvKXsKKyAgICB1cGRhdGVQcm9qZWN0TGF5ZXJzKHByakluZm8ubGF5ZXJzKTsKKyAgICB1cGRhdGVGcmVxQnVpbGRSZWNpcGVzKHByakluZm8uZnJlcXRhcmdldHMpOworICAgIHVwZGF0ZVByb2plY3RSZWxlYXNlKHByakluZm8ucmVsZWFzZSk7CisgICAgdXBkYXRlUHJvamVjdFJlbGVhc2VzKHByakluZm8ucmVsZWFzZXMsIHByakluZm8ucmVsZWFzZSk7CisKKyAgICAvKiBJZiB3ZSdyZSByZWNlaXZpbmcgYSBtYWNoaW5lIHNldCBmcm9tIHRoZSB1cmwgYW5kIGl0J3MgZGlmZmVyZW50IGZyb20KKyAgICAgKiBvdXIgY3VycmVudCBtYWNoaW5lIHRoZW4gYWN0aXZhdGUgc2V0IG1hY2hpbmUgc2VxdWVuY2UuCisgICAgICovCisgICAgaWYgKHVybFBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgnc2V0TWFjaGluZScpICYmCisgICAgICAgIHVybFBhcmFtcy5zZXRNYWNoaW5lICE9PSBwcmpJbmZvLm1hY2hpbmUubmFtZSl7CisgICAgICAgIGN1cnJlbnRNYWNoaW5lQWRkU2VsZWN0aW9uLm5hbWUgPSB1cmxQYXJhbXMuc2V0TWFjaGluZTsKKyAgICAgICAgbWFjaGluZUNoYW5nZUJ0bi5jbGljaygpOworICAgIH0gZWxzZSB7CisgICAgICB1cGRhdGVNYWNoaW5lTmFtZShwcmpJbmZvLm1hY2hpbmUubmFtZSk7CisgICAgfQorCisgICAvKiBOb3cgd2UncmUgcmVhbGx5IHJlYWR5IHNob3cgdGhlIHBhZ2UgKi8KKyAgICAkKCIjcHJvamVjdC1wYWdlIikuc2hvdygpOworICB9KTsKKworICAoZnVuY3Rpb24gbm90aWZpY2F0aW9uUmVxdWVzdCgpeworCisgICAgaWYgKHVybFBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgnbm90aWZ5JykpeworICAgICAgc3dpdGNoICh1cmxQYXJhbXMubm90aWZ5KXsKKyAgICAgICAgY2FzZSAnbmV3LXByb2plY3QnOgorICAgICAgICAgICQoIiNwcm9qZWN0LWNyZWF0ZWQtbm90aWZpY2F0aW9uIikuc2hvdygpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdsYXllci1pbXBvcnRlZCc6CisgICAgICAgICAgbGF5ZXJJbXBvcnRlZE5vdGlmaWNhdGlvbigpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfSkoKTsKKworICAvKiBMYXllciBpbXBvcnRlZCBub3RpZmljYXRpb24gKi8KKyAgZnVuY3Rpb24gbGF5ZXJJbXBvcnRlZE5vdGlmaWNhdGlvbigpeworICAgIHZhciBpbXBvcnRlZCA9ICQuY29va2llKCJsYXllci1pbXBvcnRlZC1hbGVydCIpOworICAgIHZhciBtZXNzYWdlID0gIkxheWVyIGltcG9ydGVkIjsKKworICAgIGlmICghaW1wb3J0ZWQpCisgICAgICByZXR1cm47CisgICAgZWxzZQorICAgICAgaW1wb3J0ZWQgPSBKU09OLnBhcnNlKGltcG9ydGVkKTsKKworICAgIGlmIChpbXBvcnRlZC5kZXBzX2FkZGVkLmxlbmd0aCA9PT0gMCkgeworICAgICAgbWVzc2FnZSA9ICJZb3UgaGF2ZSBpbXBvcnRlZCA8c3Ryb25nPjxhIGhyZWY9XCIiK2ltcG9ydGVkLmltcG9ydGVkX2xheWVyLmxheWVyZGV0YWlsdXJsKyJcIj4iK2ltcG9ydGVkLmltcG9ydGVkX2xheWVyLm5hbWUrIjwvYT48L3N0cm9uZz4gYW5kIGFkZGVkIGl0IHRvIHlvdXIgcHJvamVjdC4iOworICAgIH0gZWxzZSB7CisKKyAgICAgIHZhciBsaW5rcyA9ICI8YSBocmVmPVwiIitpbXBvcnRlZC5pbXBvcnRlZF9sYXllci5sYXllcmRldGFpbHVybCsiXCI+IitpbXBvcnRlZC5pbXBvcnRlZF9sYXllci5uYW1lKyI8L2E+LCAiOworCisgICAgICBpbXBvcnRlZC5kZXBzX2FkZGVkLm1hcCAoZnVuY3Rpb24oaXRlbSwgaW5kZXgpeworICAgICAgICBsaW5rcyArPSc8YSBocmVmPSInK2l0ZW0ubGF5ZXJkZXRhaWx1cmwrJyI+JytpdGVtLm5hbWUrJzwvYT4nOworICAgICAgICAvKklmIHdlJ3JlIGF0IHRoZSBsYXN0IGVsZW1lbnQgd2UgZG9uJ3Qgd2FudCB0aGUgdHJhaWxpbmcgY29tbWEgKi8KKyAgICAgICAgaWYgKGltcG9ydGVkLmRlcHNfYWRkZWRbaW5kZXgrMV0gIT09IHVuZGVmaW5lZCkKKyAgICAgICAgICBsaW5rcyArPSAnLCAnOworICAgICAgfSk7CisKKyAgICAgIC8qIExlbmd0aCArIDEgaGVyZSB0byBkbyBkZXBzICsgdGhlIGltcG9ydGVkIGxheWVyICovCisgICAgICBtZXNzYWdlID0gJ1lvdSBoYXZlIGltcG9ydGVkIDxzdHJvbmc+PGEgaHJlZj0iJytpbXBvcnRlZC5pbXBvcnRlZF9sYXllci5sYXllcmRldGFpbHVybCsnIj4nK2ltcG9ydGVkLmltcG9ydGVkX2xheWVyLm5hbWUrJzwvYT48L3N0cm9uZz4gYW5kIGFkZGVkIDxzdHJvbmc+JysoaW1wb3J0ZWQuZGVwc19hZGRlZC5sZW5ndGgrMSkrJzwvc3Ryb25nPiBsYXllcnMgdG8geW91ciBwcm9qZWN0OiA8c3Ryb25nPicrbGlua3MrJzwvc3Ryb25nPic7CisgICAgfQorCisgICAgbGlidG9hc3Rlci5zaG93Q2hhbmdlTm90aWZpY2F0aW9uKG1lc3NhZ2UpOworCisgICAgJC5yZW1vdmVDb29raWUoImxheWVyLWltcG9ydGVkLWFsZXJ0IiwgeyBwYXRoOiAiLyJ9KTsKKyAgfQorCisgIC8qIEFkZC9SbSBsYXllciBmdW5jdGlvbmFsaXR5ICovCisKKyAgbGlidG9hc3Rlci5tYWtlVHlwZWFoZWFkKGxheWVyQWRkSW5wdXQsIGxpYnRvYXN0ZXIuY3R4LmxheWVyc1R5cGVBaGVhZFVybCwgeyBpbmNsdWRlX2FkZGVkOiAiZmFsc2UiIH0sIGZ1bmN0aW9uKGl0ZW0peworICAgIGN1cnJlbnRMYXllckFkZFNlbGVjdGlvbiA9IGl0ZW07CisgICAgbGF5ZXJBZGRCdG4ucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgfSk7CisKKyAgbGF5ZXJBZGRCdG4uY2xpY2soZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgIHZhciBsYXllck9iaiA9IGN1cnJlbnRMYXllckFkZFNlbGVjdGlvbjsKKworICAgIGFkZFJtTGF5ZXIobGF5ZXJPYmosIHRydWUpOworICAgIC8qIFJlc2V0IHRoZSB0ZXh0IGlucHV0ICovCisgICAgbGF5ZXJBZGRJbnB1dC52YWwoIiIpOworICB9KTsKKworICBmdW5jdGlvbiBhZGRSbUxheWVyKGxheWVyT2JqLCBhZGQpeworCisgICAgbGlidG9hc3Rlci5hZGRSbUxheWVyKGxheWVyT2JqLCBhZGQsIGZ1bmN0aW9uKGxheWVyRGVwc0xpc3QpeworICAgICAgaWYgKGFkZCl7CisgICAgICAgIHVwZGF0ZVByb2plY3RMYXllcnMoW2xheWVyT2JqXSk7CisgICAgICAgIHVwZGF0ZVByb2plY3RMYXllcnMobGF5ZXJEZXBzTGlzdCk7CisgICAgICB9CisKKyAgICAgIC8qIFNob3cgdGhlIGFsZXJ0IG1lc3NhZ2UgKi8KKyAgICAgIHZhciBtZXNzYWdlID0gbGlidG9hc3Rlci5tYWtlTGF5ZXJBZGRSbUFsZXJ0TXNnKGxheWVyT2JqLCBsYXllckRlcHNMaXN0LCBhZGQpOworICAgICAgbGlidG9hc3Rlci5zaG93Q2hhbmdlTm90aWZpY2F0aW9uKG1lc3NhZ2UpOworICAgIH0pOworICB9CisKKyAgZnVuY3Rpb24gdXBkYXRlUHJvamVjdExheWVycyhsYXllcnMpeworCisgICAgLyogTm8gbGF5ZXJzIHRvIGFkZCAqLworICAgIGlmIChsYXllcnMubGVuZ3RoID09PSAwKXsKKyAgICAgIHVwZGF0ZUxheWVyc0NvdW50KCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yICh2YXIgaSBpbiBsYXllcnMpeworICAgICAgdmFyIGxheWVyT2JqID0gbGF5ZXJzW2ldOworCisgICAgICB2YXIgcHJvamVjdExheWVyID0gJCgiPGxpPjxhPjwvYT48c3BhbiBjbGFzcz1cImljb24tdHJhc2hcIiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiB0aXRsZT1cIkRlbGV0ZVwiPjwvc3Bhbj48L2xpPiIpOworCisgICAgICBwcm9qZWN0TGF5ZXIuZGF0YSgnbGF5ZXInLCBsYXllck9iaik7CisgICAgICBwcm9qZWN0TGF5ZXIuY2hpbGRyZW4oInNwYW4iKS50b29sdGlwKCk7CisKKyAgICAgIHZhciBsaW5rID0gcHJvamVjdExheWVyLmNoaWxkcmVuKCJhIik7CisKKyAgICAgIGxpbmsuYXR0cigiaHJlZiIsIGxheWVyT2JqLmxheWVyZGV0YWlsdXJsKTsKKyAgICAgIGxpbmsudGV4dChsYXllck9iai5uYW1lKTsKKyAgICAgIC8qIFlPQ1RPICM4MDI0CisgICAgICAgIGxpbmsudG9vbHRpcCh7dGl0bGU6IGxheWVyT2JqLmdpdHVybCArICIgfCAiKyBsYXllck9iai5icmFuY2gubmFtZSwgcGxhY2VtZW50OiAicmlnaHQifSk7CisgICAgICAgIGJyYW5jaCBuYW1lIG5vdCBhY2Nlc3NpYmxlIHNvbWV0aW1lcyBpdCBpcyByZXZpc2lvbiBpbnN0ZWFkCisgICAgICAqLworCisgICAgICB2YXIgdHJhc2hJdGVtID0gcHJvamVjdExheWVyLmNoaWxkcmVuKCJzcGFuIik7CisgICAgICB0cmFzaEl0ZW0uY2xpY2soZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB2YXIgbGF5ZXJPYmpUb1JtID0gJCh0aGlzKS5wYXJlbnQoKS5kYXRhKCdsYXllcicpOworCisgICAgICAgIGFkZFJtTGF5ZXIobGF5ZXJPYmpUb1JtLCBmYWxzZSk7CisKKyAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5mYWRlT3V0KGZ1bmN0aW9uICgpeworICAgICAgICAgICQodGhpcykucmVtb3ZlKCk7CisgICAgICAgICAgdXBkYXRlTGF5ZXJzQ291bnQoKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKworICAgICAgbGF5ZXJzSW5QcmpMaXN0LmFwcGVuZChwcm9qZWN0TGF5ZXIpOworCisgICAgICB1cGRhdGVMYXllcnNDb3VudCgpOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIHVwZGF0ZUxheWVyc0NvdW50KCl7CisgICAgdmFyIGNvdW50ID0gJCgiI2xheWVycy1pbi1wcm9qZWN0LWxpc3QiKS5jaGlsZHJlbigpLmxlbmd0aDsKKworICAgIGlmIChjb3VudCA9PT0gMCkKKyAgICAgICQoIiNuby1sYXllcnMtaW4tcHJvamVjdCIpLmZhZGVJbigpOworICAgIGVsc2UKKyAgICAgICQoIiNuby1sYXllcnMtaW4tcHJvamVjdCIpLmhpZGUoKTsKKworICAgICQoIiNwcm9qZWN0LWxheWVycy1jb3VudCIpLnRleHQoY291bnQpOworCisgICAgcmV0dXJuIGNvdW50OworICB9CisKKyAgLyogRnJlcXVlbnQgYnVpbGRzIGZ1bmN0aW9uYWxpdHkgKi8KKyAgZnVuY3Rpb24gdXBkYXRlRnJlcUJ1aWxkUmVjaXBlcyhyZWNpcGVzKSB7CisgICAgdmFyIG5vTW9zdEJ1aWx0ID0gJCgiI25vLW1vc3QtYnVpbHQiKTsKKworICAgIGlmIChyZWNpcGVzLmxlbmd0aCA9PT0gMCl7CisgICAgICBub01vc3RCdWlsdC5zaG93KCk7CisgICAgICBmcmVxQnVpbGRCdG4uaGlkZSgpOworICAgIH0gZWxzZSB7CisgICAgICBub01vc3RCdWlsdC5oaWRlKCk7CisgICAgICBmcmVxQnVpbGRCdG4uc2hvdygpOworICAgIH0KKworICAgIGZvciAodmFyIGkgaW4gcmVjaXBlcyl7CisgICAgICB2YXIgZnJlcVRhcmdldENoZWNrID0gJCgnPGxpPjxsYWJlbCBjbGFzcz0iY2hlY2tib3giPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgLz48c3BhbiBjbGFzcz0iZnJlcS10YXJnZXQtbmFtZSI+PC9zcGFuPjwvbGFiZWw+PC9saT4nKTsKKyAgICAgIGZyZXFUYXJnZXRDaGVjay5maW5kKCIuZnJlcS10YXJnZXQtbmFtZSIpLnRleHQocmVjaXBlc1tpXSk7CisgICAgICBmcmVxVGFyZ2V0Q2hlY2suZmluZCgiaW5wdXQiKS52YWwocmVjaXBlc1tpXSk7CisgICAgICBmcmVxVGFyZ2V0Q2hlY2suY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgaWYgKGZyZXFCdWlsZExpc3QuZmluZCgiOmNoZWNrZWQiKS5sZW5ndGggPiAwKQorICAgICAgICAgIGZyZXFCdWlsZEJ0bi5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgICBlbHNlCisgICAgICAgICAgZnJlcUJ1aWxkQnRuLmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CisgICAgICB9KTsKKworICAgICAgZnJlcUJ1aWxkTGlzdC5hcHBlbmQoZnJlcVRhcmdldENoZWNrKTsKKyAgICB9CisgIH0KKworICBmcmVxQnVpbGRCdG4uY2xpY2soZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworCisgICAgdmFyIHRvQnVpbGQgPSAiIjsKKyAgICBmcmVxQnVpbGRMaXN0LmZpbmQoIjpjaGVja2VkIikuZWFjaChmdW5jdGlvbigpeworICAgICAgdG9CdWlsZCArPSAkKHRoaXMpLnZhbCgpOworICAgIH0pOworCisgICAgbGlidG9hc3Rlci5zdGFydEFCdWlsZChsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0QnVpbGRzVXJsLCBsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0SWQsIHRvQnVpbGQsIGZ1bmN0aW9uKCl7CisgICAgICAvKiBCdWlsZCBzdGFydGVkICovCisgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0QnVpbGRzVXJsKTsKKyAgICB9LAorICAgIGZ1bmN0aW9uKCl7CisgICAgICAvKiBCdWlsZCBzdGFydCBmYWlsZWQgKi8KKyAgICAgIC8qIFtZT0NUTyAjNzk5NV0gKi8KKyAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RCdWlsZHNVcmwpOworICAgIH0pOworICB9KTsKKworCisgIC8qIENoYW5nZSBtYWNoaW5lIGZ1bmN0aW9uYWxpdHkgKi8KKworICBtYWNoaW5lQ2hhbmdlRm9ybVRvZ2dsZS5jbGljayhmdW5jdGlvbigpeworICAgIG1hY2hpbmVGb3JtLnNsaWRlRG93bigpOworICAgIG1hY2hpbmVOYW1lVGl0bGUuaGlkZSgpOworICAgICQodGhpcykuaGlkZSgpOworICB9KTsKKworICBtYWNoaW5lQ2hhbmdlQ2FuY2VsLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgbWFjaGluZUZvcm0uc2xpZGVVcChmdW5jdGlvbigpeworICAgICAgbWFjaGluZU5hbWVUaXRsZS5zaG93KCk7CisgICAgICBtYWNoaW5lQ2hhbmdlRm9ybVRvZ2dsZS5zaG93KCk7CisgICAgfSk7CisgIH0pOworCisgIGZ1bmN0aW9uIHVwZGF0ZU1hY2hpbmVOYW1lKG1hY2hpbmVOYW1lKXsKKyAgICBtYWNoaW5lQ2hhbmdlSW5wdXQudmFsKG1hY2hpbmVOYW1lKTsKKyAgICBtYWNoaW5lTmFtZVRpdGxlLnRleHQobWFjaGluZU5hbWUpOworICB9CisKKyAgbGlidG9hc3Rlci5tYWtlVHlwZWFoZWFkKG1hY2hpbmVDaGFuZ2VJbnB1dCwgbGlidG9hc3Rlci5jdHgubWFjaGluZXNUeXBlQWhlYWRVcmwsIHsgfSwgZnVuY3Rpb24oaXRlbSl7CisgICAgY3VycmVudE1hY2hpbmVBZGRTZWxlY3Rpb24gPSBpdGVtOworICAgIG1hY2hpbmVDaGFuZ2VCdG4ucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgfSk7CisKKyAgbWFjaGluZUNoYW5nZUJ0bi5jbGljayhmdW5jdGlvbihlKXsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgaWYgKGN1cnJlbnRNYWNoaW5lQWRkU2VsZWN0aW9uLm5hbWUgPT09IHVuZGVmaW5lZCkKKyAgICAgIHJldHVybjsKKworICAgIGxpYnRvYXN0ZXIuZWRpdEN1cnJlbnRQcm9qZWN0KHsgbWFjaGluZU5hbWUgOiBjdXJyZW50TWFjaGluZUFkZFNlbGVjdGlvbi5uYW1lIH0sCisgICAgICBmdW5jdGlvbigpeworICAgICAgICAvKiBTdWNjZXNzIG1hY2hpbmUgY2hhbmdlZCAqLworICAgICAgICB1cGRhdGVNYWNoaW5lTmFtZShjdXJyZW50TWFjaGluZUFkZFNlbGVjdGlvbi5uYW1lKTsKKyAgICAgICAgbWFjaGluZUNoYW5nZUNhbmNlbC5jbGljaygpOworCisgICAgICAgIC8qIFNob3cgdGhlIGFsZXJ0IG1lc3NhZ2UgKi8KKyAgICAgICAgdmFyIG1lc3NhZ2UgPSAkKCc8c3BhbiBjbGFzcz0ibGVhZCI+WW91IGhhdmUgY2hhbmdlZCB0aGUgbWFjaGluZSB0bzogPHN0cm9uZz48c3BhbiBpZD0ibm90aWZ5LW1hY2hpbmUtbmFtZSI+PC9zcGFuPjwvc3Ryb25nPjwvc3Bhbj4nKTsKKyAgICAgICAgbWVzc2FnZS5maW5kKCIjbm90aWZ5LW1hY2hpbmUtbmFtZSIpLnRleHQoY3VycmVudE1hY2hpbmVBZGRTZWxlY3Rpb24ubmFtZSk7CisgICAgICAgIGxpYnRvYXN0ZXIuc2hvd0NoYW5nZU5vdGlmaWNhdGlvbihtZXNzYWdlKTsKKyAgICB9LAorICAgICAgZnVuY3Rpb24oKXsKKyAgICAgICAgLyogRmFpbGVkIG1hY2hpbmUgY2hhbmdlZCAqLworICAgICAgICBjb25zb2xlLmxvZygiZmFpbGVkIHRvIGNoYW5nZSBtYWNoaW5lIik7CisgICAgfSk7CisgIH0pOworCisKKyAgLyogQ2hhbmdlIHJlbGVhc2UgZnVuY3Rpb25hbGl0eSAqLworICBmdW5jdGlvbiB1cGRhdGVQcm9qZWN0UmVsZWFzZShyZWxlYXNlKXsKKyAgICByZWxlYXNlVGl0bGUudGV4dChyZWxlYXNlLmRlc2NyaXB0aW9uKTsKKyAgfQorCisgIGZ1bmN0aW9uIHVwZGF0ZVByb2plY3RSZWxlYXNlcyhyZWxlYXNlcywgY3VycmVudCl7CisgICAgZm9yICh2YXIgaSBpbiByZWxlYXNlcyl7CisgICAgICB2YXIgcmVsZWFzZU9wdGlvbiA9ICQoIjxvcHRpb24+PC9vcHRpb24+Iik7CisKKyAgICAgIHJlbGVhc2VPcHRpb24udmFsKHJlbGVhc2VzW2ldLmlkKTsKKyAgICAgIHJlbGVhc2VPcHRpb24udGV4dChyZWxlYXNlc1tpXS5kZXNjcmlwdGlvbik7CisgICAgICByZWxlYXNlT3B0aW9uLmRhdGEoJ3JlbGVhc2UnLCByZWxlYXNlc1tpXSk7CisKKyAgICAgIGlmIChyZWxlYXNlc1tpXS5pZCA9PSBjdXJyZW50LmlkKQorICAgICAgICByZWxlYXNlT3B0aW9uLmF0dHIoInNlbGVjdGVkIiwgInNlbGVjdGVkIik7CisKKyAgICAgIHJlbGVhc2VGb3JtLmNoaWxkcmVuKCJzZWxlY3QiKS5hcHBlbmQocmVsZWFzZU9wdGlvbik7CisgICAgfQorICB9CisKKyAgcmVsZWFzZUNoYW5nZUZvcm1Ub2dnbGUuY2xpY2soZnVuY3Rpb24oKXsKKyAgICByZWxlYXNlRm9ybS5zbGlkZURvd24oKTsKKyAgICByZWxlYXNlVGl0bGUuaGlkZSgpOworICAgICQodGhpcykuaGlkZSgpOworICB9KTsKKworICBjYW5jZWxSZWxlYXNlQ2hhbmdlLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICByZWxlYXNlRm9ybS5zbGlkZVVwKGZ1bmN0aW9uKCl7CisgICAgICByZWxlYXNlVGl0bGUuc2hvdygpOworICAgICAgcmVsZWFzZUNoYW5nZUZvcm1Ub2dnbGUuc2hvdygpOworICAgIH0pOworICB9KTsKKworICBmdW5jdGlvbiBjaGFuZ2VQcm9qZWN0UmVsZWFzZShyZWxlYXNlLCBsYXllcnNUb1JtKXsKKyAgICBsaWJ0b2FzdGVyLmVkaXRDdXJyZW50UHJvamVjdCh7IHByb2plY3RWZXJzaW9uIDogcmVsZWFzZS5pZCB9LAorICAgICAgZnVuY3Rpb24oKXsKKyAgICAgICAgLyogU3VjY2VzcyAqLworICAgICAgICAvKiBVcGRhdGUgbGF5ZXJzIGxpc3Qgd2l0aCBuZXcgbGF5ZXJzICovCisgICAgICAgIGxheWVyc0luUHJqTGlzdC5hZGRDbGFzcygnbXV0ZWQnKTsKKyAgICAgICAgbGlidG9hc3Rlci5nZXRQcm9qZWN0SW5mbyhsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0UGFnZVVybCwKKyAgICAgICAgICAgIGZ1bmN0aW9uKHByakluZm8peworICAgICAgICAgICAgICBsYXllcnNJblByakxpc3QuY2hpbGRyZW4oKS5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgdXBkYXRlUHJvamVjdExheWVycyhwcmpJbmZvLmxheWVycyk7CisgICAgICAgICAgICAgIGxheWVyc0luUHJqTGlzdC5yZW1vdmVDbGFzcygnbXV0ZWQnKTsKKyAgICAgICAgICAgICAgcmVsZWFzZUNoYW5nZWROb3RpZmljYXRpb24ocmVsZWFzZSwgcHJqSW5mby5sYXllcnMsIGxheWVyc1RvUm0pOworICAgICAgICB9KTsKKyAgICAgICAgdXBkYXRlUHJvamVjdFJlbGVhc2UocmVsZWFzZSk7CisgICAgICAgIGNhbmNlbFJlbGVhc2VDaGFuZ2UuY2xpY2soKTsKKyAgICB9KTsKKyAgfQorCisgIC8qIENyZWF0ZSBhIG5vdGlmaWNhdGlvbiB0byBzaG93IHRoZSBjaGFuZ2VzIHRvIHRoZSBsYXllciBjb25maWd1cmF0aW9uCisgICAqIGNhdXNlZCBieSBjaGFuZ2luZyBhIHJlbGVhc2UuCisgICAqLworCisgIGZ1bmN0aW9uIHJlbGVhc2VDaGFuZ2VkTm90aWZpY2F0aW9uKHJlbGVhc2UsIGxheWVycywgbGF5ZXJzVG9SbSl7CisKKyAgICB2YXIgbWVzc2FnZTsKKworICAgIGlmIChsYXllcnMubGVuZ3RoID09PSAwICYmIGxheWVyc1RvUm0ubGVuZ3RoID09PSAwKXsKKyAgICAgIG1lc3NhZ2UgPSAkKCc8c3Bhbj48c3BhbiBjbGFzcz0ibGVhZCI+WW91IGhhdmUgY2hhbmdlZCB0aGUgcHJvamVjdCByZWxlYXNlIHRvOiA8c3Ryb25nPjxzcGFuIGlkPSJub3RpZnktcmVsZWFzZS1uYW1lIj48L3NwYW4+PC9zdHJvbmc+LicpOworICAgICAgbWVzc2FnZS5maW5kKCIjbm90aWZ5LXJlbGVhc2UtbmFtZSIpLnRleHQocmVsZWFzZS5kZXNjcmlwdGlvbik7CisgICAgICBsaWJ0b2FzdGVyLnNob3dDaGFuZ2VOb3RpZmljYXRpb24obWVzc2FnZSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogQ3JlYXRlIHRoZSB3aGl0ZXNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGxheWVycyByZW1vdmVkICovCisgICAgdmFyIGxheWVyc0RlbExpc3QgPSAiIjsKKworICAgIGxheWVyc1RvUm0ubWFwKGZ1bmN0aW9uKGxheWVyLCBpKXsKKyAgICAgIGxheWVyc0RlbExpc3QgKz0gbGF5ZXIubmFtZTsKKyAgICAgIGlmIChsYXllcnNUb1JtW2krMV0gIT09IHVuZGVmaW5lZCkKKyAgICAgICAgbGF5ZXJzRGVsTGlzdCArPSAnLCAnOworICAgIH0pOworCisgICAgbWVzc2FnZSA9ICQoJzxzcGFuPjxzcGFuIGNsYXNzPSJsZWFkIj5Zb3UgaGF2ZSBjaGFuZ2VkIHRoZSBwcm9qZWN0IHJlbGVhc2UgdG86IDxzdHJvbmc+PHNwYW4gaWQ9Im5vdGlmeS1yZWxlYXNlLW5hbWUiPjwvc3Bhbj48L3N0cm9uZz4uIFRoaXMgaGFzIGNhdXNlZCB0aGUgZm9sbG93aW5nIGNoYW5nZXMgaW4geW91ciBwcm9qZWN0IGxheWVyczo8L3NwYW4+PHVsIGlkPSJub3RpZnktbGF5ZXJzLWNoYW5nZWQtbGlzdCI+PC91bD48L3NwYW4+Jyk7CisKKyAgICB2YXIgY2hhbmdlZExpc3QgPSBtZXNzYWdlLmZpbmQoIiNub3RpZnktbGF5ZXJzLWNoYW5nZWQtbGlzdCIpOworCisgICAgbWVzc2FnZS5maW5kKCIjbm90aWZ5LXJlbGVhc2UtbmFtZSIpLnRleHQocmVsZWFzZS5kZXNjcmlwdGlvbik7CisKKyAgICAvKiBNYW51YWxseSBjb25zdHJ1Y3QgdGhlIGxpc3QgaXRlbSBmb3IgY2hhbmdlZCBsYXllcnMgKi8KKyAgICB2YXIgbGkgPSAnPGxpPjxzdHJvbmc+JytsYXllcnMubGVuZ3RoKyc8L3N0cm9uZz4gbGF5ZXJzIGNoYW5nZWQgdG8gdGhlIDxzdHJvbmc+JytyZWxlYXNlLm5hbWUrJzwvc3Ryb25nPiByZWxlYXNlOiAnOworICAgIGZvciAodmFyIGkgaW4gbGF5ZXJzKXsKKyAgICAgIGxpICs9ICc8YSBocmVmPScrbGF5ZXJzW2ldLmxheWVyZGV0YWlsdXJsKyc+JytsYXllcnNbaV0ubmFtZSsnPC9hPic7CisgICAgICBpZiAoaSAhPT0gMCkKKyAgICAgICAgbGkgKz0gJywgJzsKKyAgICB9CisKKyAgICBjaGFuZ2VkTGlzdC5hcHBlbmQoJChsaSkpOworCisgICAgLyogTGF5ZXJzIHJlbW92ZWQgKi8KKyAgICBpZiAobGF5ZXJzVG9SbSAmJiBsYXllcnNUb1JtLmxlbmd0aCA+IDApeworICAgICAgaWYgKGxheWVyc1RvUm0ubGVuZ3RoID09IDEpCisgICAgICAgIGxpID0gJzxsaT48c3Ryb25nPjE8L3N0cm9uZz4gbGF5ZXIgZGVsZXRlZDogJytsYXllcnNUb1JtWzBdLm5hbWUrJzwvbGk+JzsKKyAgICAgIGVsc2UKKyAgICAgICAgbGkgPSAnPGxpPjxzdHJvbmc+JytsYXllcnNUb1JtLmxlbmd0aCsnPC9zdHJvbmc+IGxheWVycyBkZWxldGVkOiAnK2xheWVyc0RlbExpc3QrJzwvbGk+JzsKKworICAgICAgY2hhbmdlZExpc3QuYXBwZW5kKCQobGkpKTsKKyAgICB9CisKKyAgICBsaWJ0b2FzdGVyLnNob3dDaGFuZ2VOb3RpZmljYXRpb24obWVzc2FnZSk7CisgIH0KKworICAvKiBTaG93IHRoZSBtb2RhbCBkaWFsb2cgd2hpY2ggZ2l2ZXMgdGhlIG9wdGlvbiB0byByZW1vdmUgbGF5ZXJzIHdoaWNoCisgICAqIGFyZW4ndCBjb21wYXRpYmxlIHdpdGggdGhlIHByb3Bvc2VkIHJlbGVhc2UKKyAgICovCisgIGZ1bmN0aW9uIHNob3dSZWxlYXNlTGF5ZXJDaGFuZ2VNb2RhbChyZWxlYXNlLCBsYXllcnMpeworICAgIHZhciBsYXllcnNUb1JtTGlzdCA9IHJlbGVhc2VNb2RhbC5maW5kKCIjbGF5ZXJzLXRvLXJlbW92ZS1saXN0Iik7CisgICAgbGF5ZXJzVG9SbUxpc3QudGV4dCgiIik7CisKKyAgICByZWxlYXNlTW9kYWwuZmluZCgiLnByb3Bvc2VkLXJlbGVhc2UtY2hhbmdlLW5hbWUiKS50ZXh0KHJlbGVhc2UuZGVzY3JpcHRpb24pOworICAgIHJlbGVhc2VNb2RhbC5kYXRhKCJsYXllcnMiLCBsYXllcnMpOworICAgIHJlbGVhc2VNb2RhbC5kYXRhKCJyZWxlYXNlIiwgcmVsZWFzZSk7CisKKyAgICBmb3IgKHZhciBpIGluIGxheWVycyl7CisgICAgICBsYXllcnNUb1JtTGlzdC5hcHBlbmQoJCgiPGxpPjwvbGk+IikudGV4dChsYXllcnNbaV0ubmFtZSkpOworICAgIH0KKyAgICByZWxlYXNlTW9kYWwubW9kYWwoJ3Nob3cnKTsKKyAgfQorCisgICQoIiNjaGFuZ2UtcmVsZWFzZS1idG4iKS5jbGljayhmdW5jdGlvbihlKXsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisKKyAgICB2YXIgbmV3UmVsZWFzZSA9IHJlbGVhc2VGb3JtLmZpbmQoIm9wdGlvbjpzZWxlY3RlZCIpLmRhdGEoJ3JlbGVhc2UnKTsKKworICAgICQuZ2V0SlNPTihjdHgudGVzdFJlbGVhc2VDaGFuZ2VVcmwsCisgICAgICB7IG5ld19yZWxlYXNlX2lkOiBuZXdSZWxlYXNlLmlkIH0sCisgICAgICBmdW5jdGlvbihsYXllcnMpIHsKKyAgICAgICAgaWYgKGxheWVycy5yb3dzLmxlbmd0aCA9PT0gMCl7CisgICAgICAgICAgLyogTm8gbGF5ZXJzIHRvIGNoYW5nZSBmb3IgdGhpcyByZWxlYXNlICovCisgICAgICAgICAgY2hhbmdlUHJvamVjdFJlbGVhc2UobmV3UmVsZWFzZSwgW10pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHNob3dSZWxlYXNlTGF5ZXJDaGFuZ2VNb2RhbChuZXdSZWxlYXNlLCBsYXllcnMucm93cyk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgfSk7CisKKyAgLyogUmVsZWFzZSBjaGFuZ2UgbW9kYWwgYWNjZXB0ICovCisgICQoIiNjaGFuZ2UtcmVsZWFzZS1hbmQtcm0tbGF5ZXJzIikuY2xpY2soZnVuY3Rpb24oKXsKKyAgICB2YXIgbGF5ZXJzID0gcmVsZWFzZU1vZGFsLmRhdGEoImxheWVycyIpOworICAgIHZhciByZWxlYXNlID0gIHJlbGVhc2VNb2RhbC5kYXRhKCJyZWxlYXNlIik7CisKKyAgICBjaGFuZ2VQcm9qZWN0UmVsZWFzZShyZWxlYXNlLCBsYXllcnMpOworICB9KTsKKworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3RhYmxlLmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3RhYmxlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxODAzNGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdGFibGUuanMKQEAgLTAsMCArMSw1NTQgQEAKKyd1c2Ugc3RyaWN0JzsKKworZnVuY3Rpb24gdGFibGVJbml0KGN0eCl7CisKKyAgaWYgKGN0eC51cmwubGVuZ3RoID09PSAwKSB7CisgICAgdGhyb3cgIk5vIHVybCBzdXBwbGllZCBmb3IgcmV0cmVpdmluZyBkYXRhIjsKKyAgfQorCisgIHZhciB0YWJsZUNocm9tZURvbmUgPSBmYWxzZTsKKyAgdmFyIHRhYmxlVG90YWwgPSAwOworCisgIHZhciB0YWJsZVBhcmFtcyA9IHsKKyAgICBsaW1pdCA6IDI1LAorICAgIHBhZ2UgOiAxLAorICAgIG9yZGVyYnkgOiBudWxsLAorICAgIGZpbHRlciA6IG51bGwsCisgICAgc2VhcmNoIDogbnVsbCwKKyAgfTsKKworICB2YXIgZGVmYXVsdEhpZGRlbkNvbHMgPSBbXTsKKworICB2YXIgdGFibGUgPSAgJCgiIyIgKyBjdHgudGFibGVOYW1lKTsKKworICAvKiBpZiB3ZSdyZSBsb2FkaW5nIGNsZWFuIGZyb20gYSB1cmwgdXNlIGl0J3MgcGFyYW1ldGVycyBhcyB0aGUgZGVmYXVsdCAqLworICB2YXIgdXJsUGFyYW1zID0gbGlidG9hc3Rlci5wYXJzZVVybFBhcmFtcygpOworCisgIC8qIE1lcmdlIHRoZSB0YWJsZVBhcmFtcyBhbmQgdXJsUGFyYW1zIG9iamVjdCBwcm9wZXJ0aWVzICAqLworICB0YWJsZVBhcmFtcyA9ICQuZXh0ZW5kKHRhYmxlUGFyYW1zLCB1cmxQYXJhbXMpOworCisgIC8qIE5vdyBmaXggdGhlIHR5cGVzIHRoYXQgLmV4dGVuZCBjaGFuZ2VkIGZvciB1cyAqLworICB0YWJsZVBhcmFtcy5saW1pdCA9IE51bWJlcih0YWJsZVBhcmFtcy5saW1pdCk7CisgIHRhYmxlUGFyYW1zLnBhZ2UgPSBOdW1iZXIodGFibGVQYXJhbXMucGFnZSk7CisKKyAgbG9hZERhdGEodGFibGVQYXJhbXMpOworCisgIHdpbmRvdy5vbnBvcHN0YXRlID0gZnVuY3Rpb24oZXZlbnQpeworICAgIGlmIChldmVudC5zdGF0ZSl7CisgICAgICB0YWJsZVBhcmFtcyA9IGV2ZW50LnN0YXRlLnRhYmxlUGFyYW1zOworICAgICAgLyogV2Ugc2tpcCBsb2FkRGF0YSBhbmQganVzdCB1cGRhdGUgdGhlIHRhYmxlICovCisgICAgICB1cGRhdGVUYWJsZShldmVudC5zdGF0ZS50YWJsZURhdGEpOworICAgIH0KKyAgfTsKKworICBmdW5jdGlvbiBsb2FkRGF0YSh0YWJsZVBhcmFtcyl7CisgICAgJC5hamF4KHsKKyAgICAgICAgdHlwZTogIkdFVCIsCisgICAgICAgIHVybDogY3R4LnVybCwKKyAgICAgICAgZGF0YTogdGFibGVQYXJhbXMsCisgICAgICAgIGhlYWRlcnM6IHsgJ1gtQ1NSRlRva2VuJyA6ICQuY29va2llKCdjc3JmdG9rZW4nKX0sCisgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHRhYmxlRGF0YSkgeworICAgICAgICAgIHVwZGF0ZVRhYmxlKHRhYmxlRGF0YSk7CisgICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHsKKyAgICAgICAgICAgICAgdGFibGVEYXRhOiB0YWJsZURhdGEsCisgICAgICAgICAgICAgIHRhYmxlUGFyYW1zOiB0YWJsZVBhcmFtcworICAgICAgICAgIH0sIG51bGwsIGxpYnRvYXN0ZXIuZHVtcHNVcmxQYXJhbXModGFibGVQYXJhbXMpKTsKKyAgICAgICAgfQorICAgIH0pOworICB9CisKKyAgZnVuY3Rpb24gdXBkYXRlVGFibGUodGFibGVEYXRhKSB7CisgICAgdmFyIHRhYmxlQm9keSA9IHRhYmxlLmNoaWxkcmVuKCJ0Ym9keSIpOworICAgIHZhciBwYWdpbmF0aW9uID0gJCgnI3BhZ2luYXRpb24tJytjdHgudGFibGVOYW1lKTsKKyAgICB2YXIgcGFnaW5hdGlvbkJ0bnMgPSBwYWdpbmF0aW9uLmNoaWxkcmVuKCd1bCcpOworICAgIHZhciB0YWJsZUNvbnRhaW5lciA9ICQoIiN0YWJsZS1jb250YWluZXItIitjdHgudGFibGVOYW1lKTsKKworICAgIHRhYmxlQ29udGFpbmVyLmNzcygidmlzaWJpbGl0eSIsICJoaWRkZW4iKTsKKyAgICAvKiBUbyBhdm9pZCBwYWdlIHJlLWxheW91dCBmbGlja2VyIHdoZW4gcGFnaW5nIHNldCBmaXhlZCBoZWlnaHQgKi8KKyAgICB0YWJsZS5jc3MoInBhZGRpbmctYm90dG9tIiwgdGFibGUuaGVpZ2h0KCkpOworCisgICAgLyogUmVzZXQgdGFibGUgY29tcG9uZW50cyAqLworICAgIHRhYmxlQm9keS5odG1sKCIiKTsKKyAgICBwYWdpbmF0aW9uQnRucy5odG1sKCIiKTsKKworICAgIGlmICh0YWJsZVBhcmFtcy5zZWFyY2gpCisgICAgICAkKCcucmVtb3ZlLXNlYXJjaC1idG4tJytjdHgudGFibGVOYW1lKS5zaG93KCk7CisgICAgZWxzZQorICAgICAgJCgnLnJlbW92ZS1zZWFyY2gtYnRuLScrY3R4LnRhYmxlTmFtZSkuaGlkZSgpOworCisgICAgJCgnLnRhYmxlLWNvdW50LScgKyBjdHgudGFibGVOYW1lKS50ZXh0KHRhYmxlRGF0YS50b3RhbCk7CisgICAgdGFibGVUb3RhbCA9IHRhYmxlRGF0YS50b3RhbDsKKworICAgIGlmICh0YWJsZURhdGEudG90YWwgPT09IDApeworICAgICAgdGFibGVDb250YWluZXIuaGlkZSgpOworICAgICAgLyogSWYgd2Ugd2VyZSBzZWFyY2hpbmcgc2hvdyB0aGUgbmV3IHNlYXJjaCBiYXIgYW5kIHJldHVybiAqLworICAgICAgaWYgKHRhYmxlUGFyYW1zLnNlYXJjaCl7CisgICAgICAgICQoIiNuZXctc2VhcmNoLWlucHV0LSIrY3R4LnRhYmxlTmFtZSkudmFsKHRhYmxlUGFyYW1zLnNlYXJjaCk7CisgICAgICAgICQoIiNuby1yZXN1bHRzLSIrY3R4LnRhYmxlTmFtZSkuc2hvdygpOworICAgICAgfQorICAgICAgdGFibGUudHJpZ2dlcigidGFibGUtZG9uZSIsIFt0YWJsZURhdGEudG90YWwsIHRhYmxlUGFyYW1zXSk7CisKKyAgICAgIHJldHVybjsKKworICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gY2x1dHRlciB0aGUgcGxhY2Ugd2l0aCB0aGUgdGFibGUgY2hyb21lIGlmIHRoZXJlCisgICAgICogYXJlIG9ubHkgYSBmZXcgcmVzdWx0cyAqLworICAgIH0gZWxzZSBpZiAodGFibGVEYXRhLnRvdGFsIDw9IDEwICYmCisgICAgICAgICAgICAgICAhdGFibGVQYXJhbXMuZmlsdGVyICYmCisgICAgICAgICAgICAgICAhdGFibGVQYXJhbXMuc2VhcmNoKXsKKyAgICAgICQoIiN0YWJsZS1jaHJvbWUtIitjdHgudGFibGVOYW1lKS5oaWRlKCk7CisgICAgICBwYWdpbmF0aW9uLmhpZGUoKTsKKyAgICB9IGVsc2UgeworICAgICAgdGFibGVDb250YWluZXIuc2hvdygpOworICAgICAgJCgiI25vLXJlc3VsdHMtIitjdHgudGFibGVOYW1lKS5oaWRlKCk7CisgICAgfQorCisgICAgc2V0dXBUYWJsZUNocm9tZSh0YWJsZURhdGEpOworCisgICAgLyogQWRkIHRhYmxlIGRhdGEgcm93cyAqLworICAgIHZhciBjb2x1bW5faW5kZXg7CisgICAgZm9yICh2YXIgaSBpbiB0YWJsZURhdGEucm93cyl7CisgICAgICAvKiBvbmx5IGRpc3BsYXkgaWYgdGhlIGNvbHVtbiBpcyBkaXNwbGF5LWFibGUgKi8KKyAgICAgIHZhciByb3cgPSAkKCI8dHI+PC90cj4iKTsKKyAgICAgIGNvbHVtbl9pbmRleCA9IC0xOworICAgICAgZm9yICh2YXIga2V5X2ogaW4gdGFibGVEYXRhLnJvd3NbaV0peworCisgICAgICAgIC8qIGlmIHdlIGhhdmUgYSBzdGF0aWM6IHZlcnNpb24gb2YgYSBrZXksIHByZWZlciB0aGUgc3RhdGljOiB2ZXJzaW9uIGZvciByZW5kZXJpbmcgKi8KKyAgICAgICAgdmFyIG9yaWdfa2V5X2ogPSBrZXlfajsKKworICAgICAgICBpZiAoa2V5X2ouaW5kZXhPZigic3RhdGljOiIpID09PSAwKSB7CisgICAgICAgICAgaWYgKGtleV9qLnN1YnN0cigic3RhdGljOiIubGVuZ3RoKSBpbiB0YWJsZURhdGEucm93c1tpXSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICAgIG9yaWdfa2V5X2ogPSBrZXlfai5zdWJzdHIoInN0YXRpYzoiLmxlbmd0aCkKKyAgICAgICAgfSBlbHNlIGlmICgoInN0YXRpYzoiICsga2V5X2opIGluIHRhYmxlRGF0YS5yb3dzW2ldKSB7CisgICAgICAgICAga2V5X2ogPSAic3RhdGljOiIgKyBrZXlfajsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHdlIHNraXAgb3ZlciB1bi1kaXNwbGF5YWJsZSBjb2x1bW4gZW50cmllcyAqLworICAgICAgICBjb2x1bW5faW5kZXggKz0gMTsKKyAgICAgICAgaWYgKCEgdGFibGVEYXRhLmNvbHVtbnNbY29sdW1uX2luZGV4XS5kaXNwbGF5YWJsZSkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRkID0gJCgiPHRkPjwvdGQ+Iik7CisgICAgICAgIHRkLnByb3AoImNsYXNzIiwgb3JpZ19rZXlfaik7CisgICAgICAgIGlmICh0YWJsZURhdGEucm93c1tpXVtrZXlfal0peworICAgICAgICAgIHRkLmh0bWwodGFibGVEYXRhLnJvd3NbaV1ba2V5X2pdKTsKKyAgICAgICAgfQorICAgICAgICByb3cuYXBwZW5kKHRkKTsKKyAgICAgIH0KKyAgICAgIHRhYmxlQm9keS5hcHBlbmQocm93KTsKKworICAgICAgLyogSWYgd2UgaGF2ZSBsYXllcmJ0bnMgdGhlbiBpbml0aWFsaXNlIHRoZW0gKi8KKyAgICAgIGxheWVyQnRuc0luaXQoY3R4KTsKKworICAgICAgLyogSWYgd2UgaGF2ZSBwb3BvdmVycyBpbml0aWFsaXNlIHRoZW0gbm93ICovCisgICAgICAkKCd0ZCA+IGEuYnRuJykucG9wb3Zlcih7CisgICAgICAgIGh0bWw6dHJ1ZSwKKyAgICAgICAgcGxhY2VtZW50OidsZWZ0JywKKyAgICAgICAgY29udGFpbmVyOidib2R5JywKKyAgICAgICAgdHJpZ2dlcjonbWFudWFsJworICAgICAgfSkuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgICAgICQoJ3RkID4gYS5idG4nKS5ub3QodGhpcykucG9wb3ZlcignaGlkZScpOworICAgICAgICAvKiBpZGVhbGx5IHdlIHdvdWxkIHVzZSAndG9nZ2xlJyBoZXJlCisgICAgICAgICAqIGJ1dCBpdCBzZWVtcyBidWdneSBpbiBvdXIgQm9vdHN0cmFwIHZlcnNpb24KKyAgICAgICAgICovCisgICAgICAgICQodGhpcykucG9wb3Zlcignc2hvdycpOworICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgfSk7CisKKyAgICAgIC8qIGVuYWJsZSBoZWxwIGluZm9ybWF0aW9uIHRvb2x0aXAgKi8KKyAgICAgICQoIi5nZXQtaGVscCIpLnRvb2x0aXAoe2NvbnRhaW5lcjonYm9keScsIGh0bWw6dHJ1ZSwgZGVsYXk6e3Nob3c6MzAwfX0pOworICAgIH0KKworICAgIC8qIFNldHVwIHRoZSBwYWdpbmF0aW9uIGNvbnRyb2xzICovCisKKyAgICB2YXIgc3RhcnQgPSB0YWJsZVBhcmFtcy5wYWdlIC0gMjsKKyAgICB2YXIgZW5kID0gdGFibGVQYXJhbXMucGFnZSArIDI7CisgICAgdmFyIG51bVBhZ2VzID0gTWF0aC5jZWlsKHRhYmxlRGF0YS50b3RhbC90YWJsZVBhcmFtcy5saW1pdCk7CisKKyAgICBpZiAobnVtUGFnZXMgPiAgMSl7CisgICAgICBpZiAodGFibGVQYXJhbXMucGFnZSA8IDMpCisgICAgICAgIGVuZCA9IDU7CisKKyAgICAgIGZvciAodmFyIHBhZ2VfaT0xOyBwYWdlX2kgPD0gbnVtUGFnZXM7ICBwYWdlX2krKyl7CisgICAgICAgIGlmIChwYWdlX2kgPj0gc3RhcnQgJiYgcGFnZV9pIDw9IGVuZCl7CisgICAgICAgICAgdmFyIGJ0biA9ICQoJzxsaT48YSBocmVmPSIjIiBjbGFzcz0icGFnZSI+JytwYWdlX2krJzwvYT48L2xpPicpOworCisgICAgICAgICAgaWYgKHBhZ2VfaSA9PT0gdGFibGVQYXJhbXMucGFnZSl7CisgICAgICAgICAgICBidG4uYWRkQ2xhc3MoImFjdGl2ZSIpOworICAgICAgICAgIH0KKworICAgICAgICAgIC8qIEFkZCB0aGUgY2xpY2sgaGFuZGxlciAqLworICAgICAgICAgIGJ0bi5jbGljayhwYWdlQnV0dG9uQ2xpY2tlZCk7CisgICAgICAgICAgcGFnaW5hdGlvbkJ0bnMuYXBwZW5kKGJ0bik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBsb2FkQ29sdW1uc1ByZWZlcmVuY2UoKTsKKworICAgIHRhYmxlLmNzcygicGFkZGluZy1ib3R0b20iLCAwKTsKKyAgICB0YWJsZUNvbnRhaW5lci5jc3MoInZpc2liaWxpdHkiLCAidmlzaWJsZSIpOworCisgICAgdGFibGUudHJpZ2dlcigidGFibGUtZG9uZSIsIFt0YWJsZURhdGEudG90YWwsIHRhYmxlUGFyYW1zXSk7CisgIH0KKworICBmdW5jdGlvbiBzZXR1cFRhYmxlQ2hyb21lKHRhYmxlRGF0YSl7CisgICAgaWYgKHRhYmxlQ2hyb21lRG9uZSA9PT0gdHJ1ZSkKKyAgICAgIHJldHVybjsKKworICAgIHZhciB0YWJsZUhlYWRSb3cgPSB0YWJsZS5maW5kKCJ0aGVhZCIpOworICAgIHZhciBlZGl0Q29sTWVudSA9ICQoIiN0YWJsZS1jaHJvbWUtIitjdHgudGFibGVOYW1lKS5maW5kKCIuZWRpdGNvbCIpOworCisgICAgdGFibGVIZWFkUm93Lmh0bWwoIiIpOworICAgIGVkaXRDb2xNZW51Lmh0bWwoIiIpOworCisgICAgaWYgKCF0YWJsZVBhcmFtcy5vcmRlcmJ5ICYmIHRhYmxlRGF0YS5kZWZhdWx0X29yZGVyYnkpeworICAgICAgdGFibGVQYXJhbXMub3JkZXJieSA9IHRhYmxlRGF0YS5kZWZhdWx0X29yZGVyYnk7CisgICAgfQorCisgICAgLyogQWRkIHRhYmxlIGhlYWRlciBhbmQgY29sdW1uIHRvZ2dsZSBtZW51ICovCisgICAgZm9yICh2YXIgaSBpbiB0YWJsZURhdGEuY29sdW1ucyl7CisgICAgICB2YXIgY29sID0gdGFibGVEYXRhLmNvbHVtbnNbaV07CisgICAgICBpZiAoY29sLmRpc3BsYXlhYmxlID09PSBmYWxzZSkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIHZhciBoZWFkZXIgPSAkKCI8dGg+PC90aD4iKTsKKyAgICAgIGhlYWRlci5wcm9wKCJjbGFzcyIsIGNvbC5maWVsZF9uYW1lKTsKKworICAgICAgLyogU2V0dXAgdGhlIGhlbHAgdGV4dCAqLworICAgICAgaWYgKGNvbC5oZWxwX3RleHQubGVuZ3RoID4gMCkgeworICAgICAgICB2YXIgaGVscF90ZXh0ID0gJCgnPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCI+IDwvaT4nKTsKKyAgICAgICAgaGVscF90ZXh0LnRvb2x0aXAoe3RpdGxlOiBjb2wuaGVscF90ZXh0fSk7CisgICAgICAgIGhlYWRlci5hcHBlbmQoaGVscF90ZXh0KTsKKyAgICAgIH0KKworICAgICAgLyogU2V0dXAgdGhlIG9yZGVyYWJsZSB0aXRsZSAqLworICAgICAgaWYgKGNvbC5vcmRlcmFibGUpIHsKKyAgICAgICAgdmFyIHRpdGxlID0gJCgnPGEgaHJlZj1cIiNcIiA+PC9hPicpOworCisgICAgICAgIHRpdGxlLmRhdGEoJ2ZpZWxkLW5hbWUnLCBjb2wuZmllbGRfbmFtZSk7CisgICAgICAgIHRpdGxlLnRleHQoY29sLnRpdGxlKTsKKyAgICAgICAgdGl0bGUuY2xpY2soc29ydENvbHVtbkNsaWNrZWQpOworCisgICAgICAgIGhlYWRlci5hcHBlbmQodGl0bGUpOworCisgICAgICAgIGhlYWRlci5hcHBlbmQoJyA8aSBjbGFzcz0iaWNvbi1jYXJldC1kb3duIiBzdHlsZT0iZGlzcGxheTpub25lIj48L2k+Jyk7CisgICAgICAgIGhlYWRlci5hcHBlbmQoJyA8aSBjbGFzcz0iaWNvbi1jYXJldC11cCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC9pPicpOworCisgICAgICAgIC8qIElmIHdlJ3JlIGN1cnJlbnRseSBvcmRlcmVkIHNldHVwIHRoZSB2aXN1YWwgaW5kaWNhdG9yICovCisgICAgICAgIGlmIChjb2wuZmllbGRfbmFtZSA9PT0gdGFibGVQYXJhbXMub3JkZXJieSB8fAorICAgICAgICAgICctJyArIGNvbC5maWVsZF9uYW1lID09PSB0YWJsZVBhcmFtcy5vcmRlcmJ5KXsKKyAgICAgICAgICBoZWFkZXIuY2hpbGRyZW4oImEiKS5hZGRDbGFzcygic29ydGVkIik7CisKKyAgICAgICAgICBpZiAodGFibGVQYXJhbXMub3JkZXJieS5pbmRleE9mKCItIikgPT09IC0xKXsKKyAgICAgICAgICAgIGhlYWRlci5maW5kKCcuaWNvbi1jYXJldC1kb3duJykuc2hvdygpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBoZWFkZXIuZmluZCgnLmljb24tY2FyZXQtdXAnKS5zaG93KCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qIE5vdCBvcmRlcmFibGUgKi8KKyAgICAgICAgaGVhZGVyLmFkZENsYXNzKCJtdXRlZCIpOworICAgICAgICBoZWFkZXIuY3NzKCJmb250LXdlaWdodCIsICJub3JtYWwiKTsKKyAgICAgICAgaGVhZGVyLmFwcGVuZChjb2wudGl0bGUrJyAnKTsKKyAgICAgIH0KKworICAgICAgLyogU2V0dXAgdGhlIGZpbHRlciBidXR0b24gKi8KKyAgICAgIGlmIChjb2wuZmlsdGVyX25hbWUpeworICAgICAgICB2YXIgZmlsdGVyQnRuID0gJCgnPGEgaHJlZj0iIyIgcm9sZT0iYnV0dG9uIiBjbGFzcz0icHVsbC1yaWdodCBidG4gYnRuLW1pbmkiIGRhdGEtdG9nZ2xlPSJtb2RhbCI+PGkgY2xhc3M9Imljb24tZmlsdGVyIGZpbHRlcmVkIj48L2k+PC9hPicpOworCisgICAgICAgIGZpbHRlckJ0bi5kYXRhKCdmaWx0ZXItbmFtZScsIGNvbC5maWx0ZXJfbmFtZSk7CisgICAgICAgIGZpbHRlckJ0bi5wcm9wKCdpZCcsIGNvbC5maWx0ZXJfbmFtZSk7CisgICAgICAgIGZpbHRlckJ0bi5jbGljayhmaWx0ZXJPcGVuQ2xpY2tlZCk7CisKKyAgICAgICAgLyogSWYgd2UncmUgY3VycmVudGx5IGJlaW5nIGZpbHRlcmVkIHNldHVwIHRoZSB2aXNpYWwgaW5kaWNhdG9yICovCisgICAgICAgIGlmICh0YWJsZVBhcmFtcy5maWx0ZXIgJiYKKyAgICAgICAgICAgIHRhYmxlUGFyYW1zLmZpbHRlci5tYXRjaCgnXicrY29sLmZpbHRlcl9uYW1lKSkgeworCisgICAgICAgICAgICBmaWx0ZXJCdG5BY3RpdmUoZmlsdGVyQnRuLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBoZWFkZXIuYXBwZW5kKGZpbHRlckJ0bik7CisgICAgICB9CisKKyAgICAgIC8qIERvbmUgbWFraW5nIHRoZSBoZWFkZXIgbm93IGFkZCBpdCAqLworICAgICAgdGFibGVIZWFkUm93LmFwcGVuZChoZWFkZXIpOworCisgICAgICAvKiBOb3cgc2V0dXAgdGhlIGNoZWNrYm94IHN0YXRlIGFuZCBjbGljayBoYW5kbGVyICovCisgICAgICB2YXIgdG9nZ2xlciA9ICQoJzxsaT48bGFiZWwgY2xhc3M9ImNoZWNrYm94Ij4nK2NvbC50aXRsZSsnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY2hlY2tib3gtJysgY29sLmZpZWxkX25hbWUgKyciIGNsYXNzPSJjb2wtdG9nZ2xlIiB2YWx1ZT0iJytjb2wuZmllbGRfbmFtZSsnIiAvPjwvbGFiZWw+PC9saT4nKTsKKworICAgICAgdmFyIHRvZ2dsZXJJbnB1dCA9IHRvZ2dsZXIuZmluZCgiaW5wdXQiKTsKKworICAgICAgdG9nZ2xlcklucHV0LmF0dHIoImNoZWNrZWQiLCJjaGVja2VkIik7CisKKyAgICAgIC8qIElmIHdlIGNhbiBoaWRlIHRoZSBjb2x1bW4gZW5hYmxlIHRoZSBjaGVja2JveCBhY3Rpb24gKi8KKyAgICAgIGlmIChjb2wuaGlkZWFibGUpeworICAgICAgICB0b2dnbGVySW5wdXQuY2xpY2soY29sVG9nZ2xlQ2xpY2tlZCk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0b2dnbGVyLmZpbmQoImxhYmVsIikuYWRkQ2xhc3MoIm11dGVkIik7CisgICAgICAgIHRvZ2dsZXJJbnB1dC5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOworICAgICAgfQorCisgICAgICBpZiAoY29sLmhpZGRlbikgeworICAgICAgICBkZWZhdWx0SGlkZGVuQ29scy5wdXNoKGNvbC5maWVsZF9uYW1lKTsKKyAgICAgIH0KKworICAgICAgZWRpdENvbE1lbnUuYXBwZW5kKHRvZ2dsZXIpOworICAgIH0gLyogRW5kIGZvciBlYWNoIGNvbHVtbiAqLworCisgICAgdGFibGVDaHJvbWVEb25lID0gdHJ1ZTsKKyAgfQorCisgIC8qIFRvZ2dsZXMgdGhlIGFjdGl2ZSBzdGF0ZSBvZiB0aGUgZmlsdGVyIGJ1dHRvbiAqLworICBmdW5jdGlvbiBmaWx0ZXJCdG5BY3RpdmUoZmlsdGVyQnRuLCBhY3RpdmUpeworICAgIGlmIChhY3RpdmUpIHsKKyAgICAgIGZpbHRlckJ0bi5hZGRDbGFzcygiYnRuLXByaW1hcnkiKTsKKworICAgICAgZmlsdGVyQnRuLnRvb2x0aXAoeworICAgICAgICAgIGh0bWw6IHRydWUsCisgICAgICAgICAgdGl0bGU6ICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXNtYWxsIGJ0bi1wcmltYXJ5IiBvbkNsaWNrPVwnJCgiI2NsZWFyLWZpbHRlci1idG4tJysgY3R4LnRhYmxlTmFtZSArJyIpLmNsaWNrKCk7XCc+Q2xlYXIgZmlsdGVyPC9idXR0b24+JywKKyAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLAorICAgICAgICAgIGRlbGF5OiB7CisgICAgICAgICAgICBoaWRlOiAxNTAwLAorICAgICAgICAgICAgc2hvdzogNDAwLAorICAgICAgICAgIH0sCisgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgZmlsdGVyQnRuLnJlbW92ZUNsYXNzKCJidG4tcHJpbWFyeSIpOworICAgICAgZmlsdGVyQnRuLnRvb2x0aXAoJ2Rlc3Ryb3knKTsKKyAgICB9CisgIH0KKworICAvKiBEaXNwbGF5IG9yIGhpZGUgdGFibGUgY29sdW1ucyBiYXNlZCBvbiB0aGUgY29va2llIHByZWZlcmVuY2Ugb3IgZGVmYXVsdHMgKi8KKyAgZnVuY3Rpb24gbG9hZENvbHVtbnNQcmVmZXJlbmNlKCl7CisgICAgdmFyIGNvb2tpZV9kYXRhID0gJC5jb29raWUoImNvbHMiKTsKKworICAgIGlmIChjb29raWVfZGF0YSkgeworICAgICAgdmFyIGNvbHNfaGlkZGVuID0gSlNPTi5wYXJzZSgkLmNvb2tpZSgiY29scyIpKTsKKworICAgICAgLyogRm9yIGVhY2ggb2YgdGhlIGNvbHVtbnMgY2hlY2sgaWYgd2Ugc2hvdWxkIGhpZGUgdGhlbQorICAgICAgICogYWxzbyB1cGRhdGUgdGhlIGNoZWNrZWQgc3RhdHVzIGluIHRoZSBFZGl0IGNvbHVtbnMgbWVudQorICAgICAgICovCisgICAgICAkKCIjIitjdHgudGFibGVOYW1lKyIgdGgiKS5lYWNoKGZ1bmN0aW9uKCl7CisgICAgICAgIGZvciAodmFyIGkgaW4gY29sc19oaWRkZW4peworICAgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKGNvbHNfaGlkZGVuW2ldKSl7CisgICAgICAgICAgICAkKCIuIitjb2xzX2hpZGRlbltpXSkuaGlkZSgpOworICAgICAgICAgICAgJCgiI2NoZWNrYm94LSIrY29sc19oaWRkZW5baV0pLnJlbW92ZUF0dHIoImNoZWNrZWQiKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLyogRGlzYWJsZSB0aGVzZSBjb2x1bW5zIGJ5IGRlZmF1bHQgd2hlbiB3ZSBoYXZlIG5vIGNvbHVtbnMKKyAgICAgICAgICogdXNlciBzZXR0aW5nLgorICAgICAgICAgKi8KKyAgICAgICAgZm9yICh2YXIgaSBpbiBkZWZhdWx0SGlkZGVuQ29scykgeworICAgICAgICAgICQoIi4iK2RlZmF1bHRIaWRkZW5Db2xzW2ldKS5oaWRlKCk7CisgICAgICAgICAgJCgiI2NoZWNrYm94LSIrZGVmYXVsdEhpZGRlbkNvbHNbaV0pLnJlbW92ZUF0dHIoImNoZWNrZWQiKTsKKyAgICAgICAgfQorICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIHNvcnRDb2x1bW5DbGlja2VkKCl7CisKKyAgICAvKiBXZSBvbmx5IGhhdmUgb25lIHNvcnQgYXQgYSB0aW1lIHNvIHJlbW92ZSBhbnkgZXhpc3Rpbmcgc29ydCBpbmRpY2F0b3JzICovCisgICAgJCgiIyIrY3R4LnRhYmxlTmFtZSsiIHRoIC5pY29uLWNhcmV0LWRvd24iKS5oaWRlKCk7CisgICAgJCgiIyIrY3R4LnRhYmxlTmFtZSsiIHRoIC5pY29uLWNhcmV0LXVwIikuaGlkZSgpOworICAgICQoIiMiK2N0eC50YWJsZU5hbWUrIiB0aCBhIikucmVtb3ZlQ2xhc3MoInNvcnRlZCIpOworCisgICAgdmFyIGZpZWxkTmFtZSA9ICQodGhpcykuZGF0YSgnZmllbGQtbmFtZScpOworCisgICAgLyogaWYgd2UncmUgYWxyZWFkeSBzb3J0ZWQgc29ydCB0aGUgb3RoZXIgd2F5ICovCisgICAgaWYgKHRhYmxlUGFyYW1zLm9yZGVyYnkgPT09IGZpZWxkTmFtZSAmJgorICAgICAgICB0YWJsZVBhcmFtcy5vcmRlcmJ5LmluZGV4T2YoJy0nKSA9PT0gLTEpIHsKKyAgICAgIHRhYmxlUGFyYW1zLm9yZGVyYnkgPSAnLScgKyAkKHRoaXMpLmRhdGEoJ2ZpZWxkLW5hbWUnKTsKKyAgICAgICQodGhpcykucGFyZW50KCkuY2hpbGRyZW4oJy5pY29uLWNhcmV0LXVwJykuc2hvdygpOworICAgIH0gZWxzZSB7CisgICAgICB0YWJsZVBhcmFtcy5vcmRlcmJ5ID0gJCh0aGlzKS5kYXRhKCdmaWVsZC1uYW1lJyk7CisgICAgICAkKHRoaXMpLnBhcmVudCgpLmNoaWxkcmVuKCcuaWNvbi1jYXJldC1kb3duJykuc2hvdygpOworICAgIH0KKworICAgICQodGhpcykuYWRkQ2xhc3MoInNvcnRlZCIpOworCisgICAgbG9hZERhdGEodGFibGVQYXJhbXMpOworICB9CisKKyAgZnVuY3Rpb24gcGFnZUJ1dHRvbkNsaWNrZWQoZSkgeworICAgIHRhYmxlUGFyYW1zLnBhZ2UgPSBOdW1iZXIoJCh0aGlzKS50ZXh0KCkpOworICAgIGxvYWREYXRhKHRhYmxlUGFyYW1zKTsKKyAgICAvKiBTdG9wIHBhZ2UganVtcHMgd2hlbiBjbGlja2luZyBvbiAjIGxpbmtzICovCisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICB9CisKKyAgLyogVG9nZ2xlIGEgdGFibGUgY29sdW1uICovCisgIGZ1bmN0aW9uIGNvbFRvZ2dsZUNsaWNrZWQgKCl7CisgICAgdmFyIGNvbCA9ICQodGhpcykudmFsKCk7CisgICAgdmFyIGRpc2FibGVkX2NvbHMgPSBbXTsKKworICAgIGlmICgkKHRoaXMpLnByb3AoImNoZWNrZWQiKSkgeworICAgICAgJCgiLiIrY29sKS5zaG93KCk7CisgICAgfSAgZWxzZSB7CisgICAgICAkKCIuIitjb2wpLmhpZGUoKTsKKyAgICAgIC8qIElmIHdlJ3JlIG9yZGVyZWQgYnkgdGhlIGNvbHVtbiB3ZSdyZSBoaWRpbmcgcmVtb3ZlIHRoZSBvcmRlciBieSAqLworICAgICAgaWYgKGNvbCA9PT0gdGFibGVQYXJhbXMub3JkZXJieSB8fAorICAgICAgICAgICctJyArIGNvbCA9PT0gdGFibGVQYXJhbXMub3JkZXJieSl7CisgICAgICAgIHRhYmxlUGFyYW1zLm9yZGVyYnkgPSBudWxsOworICAgICAgICBsb2FkRGF0YSh0YWJsZVBhcmFtcyk7CisgICAgICB9CisgICAgfQorCisgICAgLyogVXBkYXRlIHRoZSBjb29raWUgd2l0aCB0aGUgdW5jaGVja2VkIGNvbHVtbnMgKi8KKyAgICAkKCIuY29sLXRvZ2dsZSIpLm5vdCgiOmNoZWNrZWQiKS5tYXAoZnVuY3Rpb24oKXsKKyAgICAgIGRpc2FibGVkX2NvbHMucHVzaCgkKHRoaXMpLnZhbCgpKTsKKyAgICB9KTsKKworICAgICQuY29va2llKCJjb2xzIiwgSlNPTi5zdHJpbmdpZnkoZGlzYWJsZWRfY29scykpOworICB9CisKKyAgZnVuY3Rpb24gZmlsdGVyT3BlbkNsaWNrZWQoKXsKKyAgICB2YXIgZmlsdGVyTmFtZSA9ICQodGhpcykuZGF0YSgnZmlsdGVyLW5hbWUnKTsKKworICAgIC8qIFdlIG5lZWQgdG8gcGFzcyBpbiB0aGUgY3VycmVuIHNlYXJjaCBzbyB0aGF0IHRoZSBmaWx0ZXIgY291bnRzIHRha2UKKyAgICAgKiBpbnRvIGFjY291bnQgdGhlIGN1cnJlbnQgc2VhcmNoIGZpbHRlcgorICAgICAqLworICAgIHZhciBwYXJhbXMgPSB7CisgICAgICAnbmFtZScgOiBmaWx0ZXJOYW1lLAorICAgICAgJ3NlYXJjaCc6IHRhYmxlUGFyYW1zLnNlYXJjaCwKKyAgICAgICdjbWQnOiAnZmlsdGVyaW5mbycsCisgICAgfTsKKworICAgICQuYWpheCh7CisgICAgICAgIHR5cGU6ICJHRVQiLAorICAgICAgICB1cmw6IGN0eC51cmwsCisgICAgICAgIGRhdGE6IHBhcmFtcywKKyAgICAgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nIDogJC5jb29raWUoJ2NzcmZ0b2tlbicpfSwKKyAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGZpbHRlckRhdGEpIHsKKyAgICAgICAgICB2YXIgZmlsdGVyQWN0aW9uUmFkaW9zID0gJCgnI2ZpbHRlci1hY3Rpb25zLScrY3R4LnRhYmxlTmFtZSk7CisKKyAgICAgICAgICAkKCcjZmlsdGVyLW1vZGFsLXRpdGxlLScrY3R4LnRhYmxlTmFtZSkudGV4dChmaWx0ZXJEYXRhLnRpdGxlKTsKKworICAgICAgICAgIGZpbHRlckFjdGlvblJhZGlvcy50ZXh0KCIiKTsKKworICAgICAgICAgIGZvciAodmFyIGkgaW4gZmlsdGVyRGF0YS5maWx0ZXJfYWN0aW9ucyl7CisgICAgICAgICAgICB2YXIgZmlsdGVyQWN0aW9uID0gZmlsdGVyRGF0YS5maWx0ZXJfYWN0aW9uc1tpXTsKKworICAgICAgICAgICAgdmFyIGFjdGlvbiA9ICQoJzxsYWJlbCBjbGFzcz0icmFkaW8iPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZmlsdGVyIiB2YWx1ZT0iIj48c3BhbiBjbGFzcz0iZmlsdGVyLXRpdGxlIj48L3NwYW4+PC9sYWJlbD4nKTsKKyAgICAgICAgICAgIHZhciBhY3Rpb25UaXRsZSA9IGZpbHRlckFjdGlvbi50aXRsZSArICcgKCcgKyBmaWx0ZXJBY3Rpb24uY291bnQgKyAnKSc7CisKKyAgICAgICAgICAgIHZhciByYWRpb0lucHV0ID0gYWN0aW9uLmNoaWxkcmVuKCJpbnB1dCIpOworCisgICAgICAgICAgICBpZiAoTnVtYmVyKGZpbHRlckFjdGlvbi5jb3VudCkgPT0gMCl7CisgICAgICAgICAgICAgIHJhZGlvSW5wdXQuYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYWN0aW9uLmNoaWxkcmVuKCIuZmlsdGVyLXRpdGxlIikudGV4dChhY3Rpb25UaXRsZSk7CisKKyAgICAgICAgICAgIHJhZGlvSW5wdXQudmFsKGZpbHRlck5hbWUgKyAnOicgKyBmaWx0ZXJBY3Rpb24ubmFtZSk7CisKKyAgICAgICAgICAgIC8qIFNldHVwIHRoZSBjdXJyZW50IHNlbGVjdGVkIGZpbHRlciwgZGVmYXVsdCB0byAnYWxsJyBpZgorICAgICAgICAgICAgICogbm8gY3VycmVudCBmaWx0ZXIgc2VsZWN0ZWQuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICgodGFibGVQYXJhbXMuZmlsdGVyICYmCisgICAgICAgICAgICAgICAgdGFibGVQYXJhbXMuZmlsdGVyID09PSByYWRpb0lucHV0LnZhbCgpKSB8fAorICAgICAgICAgICAgICAgIGZpbHRlckFjdGlvbi5uYW1lID09ICdhbGwnKSB7CisgICAgICAgICAgICAgICAgcmFkaW9JbnB1dC5hdHRyKCJjaGVja2VkIiwgImNoZWNrZWQiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmlsdGVyQWN0aW9uUmFkaW9zLmFwcGVuZChhY3Rpb24pOworICAgICAgICAgIH0KKworICAgICAgICAgICQoJyNmaWx0ZXItbW9kYWwtJytjdHgudGFibGVOYW1lKS5tb2RhbCgnc2hvdycpOworICAgICAgICB9CisgICAgfSk7CisgIH0KKworCisgICQoIi5nZXQtaGVscCIpLnRvb2x0aXAoe2NvbnRhaW5lcjonYm9keScsIGh0bWw6dHJ1ZSwgZGVsYXk6e3Nob3c6MzAwfX0pOworCisgIC8qIEtlZXAgdGhlIEVkaXQgY29sdW1ucyBtZW51IG9wZW4gYWZ0ZXIgY2xpY2sgYnkgZWF0aW5nIHRoZSBldmVudCAqLworICAkKCcuZHJvcGRvd24tbWVudScpLmNsaWNrKGZ1bmN0aW9uKGUpIHsKKyAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICB9KTsKKworICAkKCIucGFnZXNpemUtIitjdHgudGFibGVOYW1lKS52YWwodGFibGVQYXJhbXMubGltaXQpOworCisgIC8qIHBhZ2Ugc2l6ZSBzZWxlY3RvciAgKi8KKyAgJCgiLnBhZ2VzaXplLSIrY3R4LnRhYmxlTmFtZSkuY2hhbmdlKGZ1bmN0aW9uKGUpeworICAgIHRhYmxlUGFyYW1zLmxpbWl0ID0gTnVtYmVyKHRoaXMudmFsdWUpOworICAgIGlmICgodGFibGVQYXJhbXMucGFnZSAqIHRhYmxlUGFyYW1zLmxpbWl0KSA+IHRhYmxlVG90YWwpCisgICAgICB0YWJsZVBhcmFtcy5wYWdlID0gMTsKKworICAgIGxvYWREYXRhKHRhYmxlUGFyYW1zKTsKKyAgICAvKiBzeW5jIHRoZSBvdGhlciBzZWxlY3RvcnMgb24gdGhlIHBhZ2UgKi8KKyAgICAkKCIucGFnZXNpemUtIitjdHgudGFibGVOYW1lKS52YWwodGhpcy52YWx1ZSk7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICB9KTsKKworICAkKCIjc2VhcmNoLXN1Ym1pdC0iK2N0eC50YWJsZU5hbWUpLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgIHZhciBzZWFyY2hUZXJtID0gJCgiI3NlYXJjaC1pbnB1dC0iK2N0eC50YWJsZU5hbWUpLnZhbCgpOworCisgICAgdGFibGVQYXJhbXMucGFnZSA9IDE7CisgICAgdGFibGVQYXJhbXMuc2VhcmNoID0gc2VhcmNoVGVybTsKKworICAgIC8qIElmIGEgZmlsdGVyIHdhcyBhY3RpdmUgd2UgcmVtb3ZlIGl0ICovCisgICAgaWYgKHRhYmxlUGFyYW1zLmZpbHRlcikgeworICAgICAgdmFyIGZpbHRlckJ0biA9ICQoIiMiICsgdGFibGVQYXJhbXMuZmlsdGVyLnNwbGl0KCI6IilbMF0pOworICAgICAgZmlsdGVyQnRuQWN0aXZlKGZpbHRlckJ0biwgZmFsc2UpOworICAgICAgdGFibGVQYXJhbXMuZmlsdGVyID0gbnVsbDsKKyAgICB9CisKKyAgICBsb2FkRGF0YSh0YWJsZVBhcmFtcyk7CisKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgIH0pOworCisgICQoJy5yZW1vdmUtc2VhcmNoLWJ0bi0nK2N0eC50YWJsZU5hbWUpLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgIGUucHJldmVudERlZmF1bHQoKTsKKworICAgIHRhYmxlUGFyYW1zLnBhZ2UgPSAxOworICAgIHRhYmxlUGFyYW1zLnNlYXJjaCA9IG51bGw7CisgICAgbG9hZERhdGEodGFibGVQYXJhbXMpOworCisgICAgJCgiI3NlYXJjaC1pbnB1dC0iK2N0eC50YWJsZU5hbWUpLnZhbCgiIik7CisgICAgJCh0aGlzKS5oaWRlKCk7CisgIH0pOworCisgICQoIiNzZWFyY2gtaW5wdXQtIitjdHgudGFibGVOYW1lKS5rZXl1cChmdW5jdGlvbihlKXsKKyAgICBpZiAoZS53aGljaCA9PT0gMTMpCisgICAgICAkKCcjc2VhcmNoLXN1Ym1pdC0nK2N0eC50YWJsZU5hbWUpLmNsaWNrKCk7CisgIH0pOworCisgIC8qIFN0b3AgcGFnZSBqdW1wcyB3aGVuIGNsaWNraW5nIG9uICMgbGlua3MgKi8KKyAgJCgnYVtocmVmPSIjIl0nKS5jbGljayhmdW5jdGlvbihlKXsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgIH0pOworCisgICQoIiNjbGVhci1maWx0ZXItYnRuLSIrY3R4LnRhYmxlTmFtZSkuY2xpY2soZnVuY3Rpb24oKXsKKyAgICB2YXIgZmlsdGVyQnRuID0gJCgiIyIgKyB0YWJsZVBhcmFtcy5maWx0ZXIuc3BsaXQoIjoiKVswXSk7CisgICAgZmlsdGVyQnRuQWN0aXZlKGZpbHRlckJ0biwgZmFsc2UpOworCisgICAgdGFibGVQYXJhbXMuZmlsdGVyID0gbnVsbDsKKyAgICBsb2FkRGF0YSh0YWJsZVBhcmFtcyk7CisgIH0pOworCisgICQoIiNmaWx0ZXItbW9kYWwtZm9ybS0iK2N0eC50YWJsZU5hbWUpLnN1Ym1pdChmdW5jdGlvbihlKXsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisKKyAgICB0YWJsZVBhcmFtcy5maWx0ZXIgPSAkKHRoaXMpLmZpbmQoImlucHV0W3R5cGU9J3JhZGlvJ106Y2hlY2tlZCIpLnZhbCgpOworCisgICAgdmFyIGZpbHRlckJ0biA9ICQoIiMiICsgdGFibGVQYXJhbXMuZmlsdGVyLnNwbGl0KCI6IilbMF0pOworCisgICAgLyogQWxsID09PSByZW1vdmUgZmlsdGVyICovCisgICAgaWYgKHRhYmxlUGFyYW1zLmZpbHRlci5tYXRjaCgiOmFsbCQiKSkgeworICAgICAgdGFibGVQYXJhbXMuZmlsdGVyID0gbnVsbDsKKyAgICAgIGZpbHRlckJ0bkFjdGl2ZShmaWx0ZXJCdG4sIGZhbHNlKTsKKyAgICB9IGVsc2UgeworICAgICAgZmlsdGVyQnRuQWN0aXZlKGZpbHRlckJ0biwgdHJ1ZSk7CisgICAgfQorCisgICAgbG9hZERhdGEodGFibGVQYXJhbXMpOworCisgICAgJCh0aGlzKS5wYXJlbnQoKS5tb2RhbCgnaGlkZScpOworICB9KTsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy90ZXN0cy90ZXN0LmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3Rlc3RzL3Rlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYxMDExMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy90ZXN0cy90ZXN0LmpzCkBAIC0wLDAgKzEsMTc1IEBACisidXNlIHN0cmljdCI7CisvKiBVbml0IHRlc3RzIGZvciBUb2FzdGVyJ3MgSlMgKi8KKworLyogbGlidG9hc3RlciB0ZXN0cyAqLworCitRVW5pdC50ZXN0KCJMYXllciBhbGVydCBub3RpZmljYXRpb24iLCBmdW5jdGlvbihhc3NlcnQpIHsKKyAgdmFyIGxheWVyID0geworICAgICJsYXllcmRldGFpbHVybCI6Ii90b2FzdGVyZ3VpL3Byb2plY3QvMS9sYXllci8yMiIsCisgICAgInZjc191cmwiOiJnaXQ6Ly9leGFtcGxlLmNvbS9leGFtcGxlLmdpdCIsCisgICAgImRldGFpbCI6IlsgZ2l0Oi8vZXhhbXBsZS5jb20vZXhhbXBsZS5naXQgfCBtYXN0ZXIgXSIsCisgICAgInZjc19yZWZlcmVuY2UiOiJtYXN0ZXIiLAorICAgICJpZCI6IDIyLAorICAgICJuYW1lIjoibWV0YS1leGFtcGxlIgorICB9OworCisgIHZhciBjb3JyZWN0UmVzcG9uc2UgPSAiWW91IGhhdmUgYWRkZWQgPHN0cm9uZz4zPC9zdHJvbmc+IGxheWVycyB0byB5b3VyIHByb2plY3Q6IDxhIGlkPVwibGF5ZXItYWZmZWN0ZWQtbmFtZVwiIGhyZWY9XCIvdG9hc3Rlcmd1aS9wcm9qZWN0LzEvbGF5ZXIvMjJcIj5tZXRhLWV4YW1wbGU8L2E+IGFuZCBpdHMgZGVwZW5kZW5jaWVzIDxhIGhyZWY9XCIvdG9hc3Rlcmd1aS9wcm9qZWN0LzEvbGF5ZXIvOVwiIGRhdGEtb3JpZ2luYWwtdGl0bGU9XCJcIiB0aXRsZT1cIlwiPm1ldGEtZXhhbXBsZS10d288L2E+LCA8YSBocmVmPVwiL3RvYXN0ZXJndWkvcHJvamVjdC8xL2xheWVyLzlcIiBkYXRhLW9yaWdpbmFsLXRpdGxlPVwiXCIgdGl0bGU9XCJcIj5tZXRhLWV4YW1wbGUtdGhyZWU8L2E+IjsKKworICB2YXIgbGF5ZXJEZXBzTGlzdCA9IFsKKyAgICB7CisgICAgImxheWVyZGV0YWlsdXJsIjoiL3RvYXN0ZXJndWkvcHJvamVjdC8xL2xheWVyLzkiLAorICAgICJ2Y3NfdXJsIjoiZ2l0Oi8vZXhhbXBsZS5jb20vZXhhbXBsZS5naXQiLAorICAgICJkZXRhaWwiOiJbIGdpdDovL2V4YW1wbGUuY29tL2V4YW1wbGUuZ2l0IHwgbWFzdGVyIF0iLAorICAgICJ2Y3NfcmVmZXJlbmNlIjoibWFzdGVyIiwKKyAgICAiaWQiOiA5LAorICAgICJuYW1lIjoibWV0YS1leGFtcGxlLXR3byIKKyAgICB9LAorICAgIHsKKyAgICAibGF5ZXJkZXRhaWx1cmwiOiIvdG9hc3Rlcmd1aS9wcm9qZWN0LzEvbGF5ZXIvOSIsCisgICAgInZjc191cmwiOiJnaXQ6Ly9leGFtcGxlLmNvbS9leGFtcGxlLmdpdCIsCisgICAgImRldGFpbCI6IlsgZ2l0Oi8vZXhhbXBsZS5jb20vZXhhbXBsZS5naXQgfCBtYXN0ZXIgXSIsCisgICAgInZjc19yZWZlcmVuY2UiOiJtYXN0ZXIiLAorICAgICJpZCI6IDEwLAorICAgICJuYW1lIjoibWV0YS1leGFtcGxlLXRocmVlIgorICAgIH0sCisgIF07CisKKyAgdmFyIG1zZyA9IGxpYnRvYXN0ZXIubWFrZUxheWVyQWRkUm1BbGVydE1zZyhsYXllciwgbGF5ZXJEZXBzTGlzdCwgdHJ1ZSk7CisgIHZhciB0ZXN0ID0gJCgiPGRpdj48L2Rpdj4iKTsKKworICB0ZXN0Lmh0bWwobXNnKTsKKworICBhc3NlcnQuZXF1YWwodGVzdC5jaGlsZHJlbigic3Ryb25nIikudGV4dCgpLCAiMyIpOworICBhc3NlcnQuZXF1YWwodGVzdC5jaGlsZHJlbigiYSIpLmxlbmd0aCwgMyk7Cit9KTsKKworUVVuaXQudGVzdCgiUHJvamVjdCBpbmZvIiwgZnVuY3Rpb24oYXNzZXJ0KXsKKyAgdmFyIGRvbmUgPSBhc3NlcnQuYXN5bmMoKTsKKyAgbGlidG9hc3Rlci5nZXRQcm9qZWN0SW5mbyhsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0UGFnZVVybCwgZnVuY3Rpb24ocHJqSW5mbyl7CisgICAgYXNzZXJ0Lm9rKHByakluZm8ubWFjaGluZS5uYW1lKTsKKyAgICBhc3NlcnQub2socHJqSW5mby5yZWxlYXNlcy5sZW5ndGggPiAwKTsKKyAgICBhc3NlcnQub2socHJqSW5mby5sYXllcnMubGVuZ3RoID4gMCk7CisgICAgYXNzZXJ0Lm9rKHByakluZm8uZnJlcXRhcmdldHMpOworICAgIGFzc2VydC5vayhwcmpJbmZvLnJlbGVhc2UpOworICAgIGRvbmUoKTsKKyAgfSk7Cit9KTsKKworUVVuaXQudGVzdCgiU2hvdyBub3RpZmljYXRpb24iLCBmdW5jdGlvbihhc3NlcnQpeworICB2YXIgbXNnID0gIlRlc3RpbmciOworICB2YXIgZWxlbWVudCA9ICQoIiNjaGFuZ2Utbm90aWZpY2F0aW9uLW1zZyIpOworCisgIGxpYnRvYXN0ZXIuc2hvd0NoYW5nZU5vdGlmaWNhdGlvbihtc2cpOworCisgIGFzc2VydC5lcXVhbChlbGVtZW50LnRleHQoKSwgbXNnKTsKKyAgYXNzZXJ0Lm9rKGVsZW1lbnQuaXMoIjp2aXNpYmxlIikpOworCisgICQoIiNjaGFuZ2Utbm90aWZpY2F0aW9uIikuaGlkZSgpOworfSk7CisKK3ZhciBsYXllciA9IHsKKyAgImlkIjogOTEsCisgICJuYW1lIjogICJtZXRhLWNyeXN0YWxmb3Jlc3QiLAorICAibGF5ZXJkZXRhaWx1cmwiOiAiL3RvYXN0ZXJndWkvcHJvamVjdC80L2xheWVyLzkxIgorfTsKKworUVVuaXQudGVzdCgiQWRkIGxheWVyIiwgZnVuY3Rpb24oYXNzZXJ0KXsKKyAgdmFyIGRvbmUgPSBhc3NlcnQuYXN5bmMoKTsKKworICAvKiBXYWl0IGZvciB0aGUgbW9kYWwgdG8gYmUgYWRkZWQgdG8gdGhlIGRvbSAqLworICB2YXIgY2hlY2tNb2RhbCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCl7CisgICAgaWYgKCQoIiNkZXBlbmRlbmNpZXMtbW9kYWwiKS5sZW5ndGggPiAwKSB7CisgICAgICAkKCIjZGVwZW5kZW5jaWVzLW1vZGFsIC5idG4tcHJpbWFyeSIpLmNsaWNrKCk7CisgICAgICBjbGVhckludGVydmFsKGNoZWNrTW9kYWwpOworICAgIH0KKyAgfSwgMjAwKTsKKworICBsaWJ0b2FzdGVyLmFkZFJtTGF5ZXIobGF5ZXIsIHRydWUsIGZ1bmN0aW9uKGRlcHMpeworICAgIGFzc2VydC5lcXVhbChkZXBzLmxlbmd0aCwgMSk7CisgICAgZG9uZSgpOworICB9KTsKKworfSk7CisKK1FVbml0LnRlc3QoIlJtIGxheWVyIiwgZnVuY3Rpb24oYXNzZXJ0KXsKKyAgdmFyIGRvbmUgPSBhc3NlcnQuYXN5bmMoKTsKKworICBsaWJ0b2FzdGVyLmFkZFJtTGF5ZXIobGF5ZXIsIGZhbHNlLCBmdW5jdGlvbihkZXBzKXsKKyAgICBhc3NlcnQuZXF1YWwoZGVwcy5sZW5ndGgsIDApOworICAgIGRvbmUoKTsKKyAgfSk7CisKK30pOworCitRVW5pdC50ZXN0KCJQYXJzZSB1cmwgcGFyYW1zIiwgZnVuY3Rpb24oYXNzZXJ0KXsKKyAgdmFyIHBhcmFtcyA9IGxpYnRvYXN0ZXIucGFyc2VVcmxQYXJhbXMoKTsKKyAgYXNzZXJ0Lm9rKHBhcmFtcyk7Cit9KTsKKworUVVuaXQudGVzdCgiRHVtcCB1cmwgcGFyYW1zIiwgZnVuY3Rpb24oYXNzZXJ0KXsKKyAgdmFyIHBhcmFtcyA9IGxpYnRvYXN0ZXIuZHVtcHNVcmxQYXJhbXMoKTsKKyAgYXNzZXJ0Lm9rKHBhcmFtcyk7Cit9KTsKKworUVVuaXQudGVzdCgiTWFrZSB0eXBlYWhlYWRzIiwgZnVuY3Rpb24oYXNzZXJ0KXsKKyAgdmFyIGxheWVyc1QgPSAkKCIjbGF5ZXJzIik7CisgIHZhciBtYWNoaW5lc1QgPSAkKCIjbWFjaGluZXMiKTsKKyAgdmFyIHByb2plY3RzVCA9ICQoIiNwcm9qZWN0cyIpOworICB2YXIgcmVjaXBlc1QgPSAkKCIjcmVjaXBlcyIpOworCisgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChsYXllcnNULAorICAgIGxpYnRvYXN0ZXIuY3R4LmxheWVyc1R5cGVBaGVhZFVybCwge30sIGZ1bmN0aW9uKCl7fSk7CisKKyAgbGlidG9hc3Rlci5tYWtlVHlwZWFoZWFkKG1hY2hpbmVzVCwKKyAgICBsaWJ0b2FzdGVyLmN0eC5tYWNoaW5lc1R5cGVBaGVhZFVybCwge30sIGZ1bmN0aW9uKCl7fSk7CisKKyAgbGlidG9hc3Rlci5tYWtlVHlwZWFoZWFkKHByb2plY3RzVCwKKyAgICBsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0c1R5cGVBaGVhZFVybCwge30sIGZ1bmN0aW9uKCl7fSk7CisKKyAgbGlidG9hc3Rlci5tYWtlVHlwZWFoZWFkKHJlY2lwZXNULAorICAgIGxpYnRvYXN0ZXIuY3R4LnJlY2lwZXNUeXBlQWhlYWRVcmwsIHt9LCBmdW5jdGlvbigpe30pOworCisgIGFzc2VydC5vayhyZWNpcGVzVC5kYXRhKCd0eXBlYWhlYWQnKSk7CisgIGFzc2VydC5vayhsYXllcnNULmRhdGEoJ3R5cGVhaGVhZCcpKTsKKyAgYXNzZXJ0Lm9rKHByb2plY3RzVC5kYXRhKCd0eXBlYWhlYWQnKSk7CisgIGFzc2VydC5vayhyZWNpcGVzVC5kYXRhKCd0eXBlYWhlYWQnKSk7Cit9KTsKKworCisKKy8qIFBhZ2UgaW5pdCBmdW5jdGlvbnMgKi8KKworUVVuaXQudGVzdCgiSW1wb3J0IGxheWVyIHBhZ2UgaW5pdCIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIGFzc2VydC50aHJvd3MoaW1wb3J0TGF5ZXJQYWdlSW5pdCgpKTsKK30pOworCitRVW5pdC50ZXN0KCJQcm9qZWN0IHBhZ2UgaW5pdCIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIGFzc2VydC50aHJvd3MocHJvamVjdFBhZ2VJbml0KCkpOworfSk7CisKK1FVbml0LnRlc3QoIkxheWVyIGRldGFpbHMgcGFnZSBpbml0IiwgZnVuY3Rpb24oYXNzZXJ0KXsKKyAgYXNzZXJ0LnRocm93cyhsYXllckRldGFpbHNQYWdlSW5pdCgpKTsKK30pOworCitRVW5pdC50ZXN0KCJMYXllciBidG5zIGluaXQiLCBmdW5jdGlvbihhc3NlcnQpeworICBhc3NlcnQudGhyb3dzKGxheWVyQnRuc0luaXQoeyBwcm9qZWN0TGF5ZXJzIDogW10gfSkpOworfSk7CisKK1FVbml0LnRlc3QoIlRhYmxlIGluaXQiLCBmdW5jdGlvbihhc3NlcnQpeworICBhc3NlcnQudGhyb3dzKHRhYmxlSW5pdCh7IHVybCA6IHRhYmxlVXJsIH0pKTsKK30pOworCiskKGRvY3VtZW50KS5hamF4RXJyb3IoZnVuY3Rpb24oZXZlbnQsIGpxeGhyLCBzZXR0aW5ncywgZXJyTXNnKXsKKyAgaWYgKGVyck1zZyA9PT0gJ2Fib3J0JykKKyAgICByZXR1cm47CisKKyAgUVVuaXQudGVzdCgiQWpheCBlcnJvciIsIGZ1bmN0aW9uKGFzc2VydCl7CisgICAgYXNzZXJ0Lm5vdE9rKGpxeGhyLnJlc3BvbnNlVGV4dCk7CisgIH0pOworfSk7CisKKworCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdWktYm9vdHN0cmFwLXRwbHMtMC4xMS4wLmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3VpLWJvb3RzdHJhcC10cGxzLTAuMTEuMC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTZhODYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3VpLWJvb3RzdHJhcC10cGxzLTAuMTEuMC5qcwpAQCAtMCwwICsxLDEwIEBACisvKgorICogYW5ndWxhci11aS1ib290c3RyYXAKKyAqIGh0dHA6Ly9hbmd1bGFyLXVpLmdpdGh1Yi5pby9ib290c3RyYXAvCisKKyAqIFZlcnNpb246IDAuMTEuMCAtIDIwMTQtMDUtMDEKKyAqIExpY2Vuc2U6IE1JVAorICovCithbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwIixbInVpLmJvb3RzdHJhcC50cGxzIiwidWkuYm9vdHN0cmFwLnRyYW5zaXRpb24iLCJ1aS5ib290c3RyYXAuY29sbGFwc2UiLCJ1aS5ib290c3RyYXAuYWNjb3JkaW9uIiwidWkuYm9vdHN0cmFwLmFsZXJ0IiwidWkuYm9vdHN0cmFwLmJpbmRIdG1sIiwidWkuYm9vdHN0cmFwLmJ1dHRvbnMiLCJ1aS5ib290c3RyYXAuY2Fyb3VzZWwiLCJ1aS5ib290c3RyYXAuZGF0ZXBhcnNlciIsInVpLmJvb3RzdHJhcC5wb3NpdGlvbiIsInVpLmJvb3RzdHJhcC5kYXRlcGlja2VyIiwidWkuYm9vdHN0cmFwLmRyb3Bkb3duIiwidWkuYm9vdHN0cmFwLm1vZGFsIiwidWkuYm9vdHN0cmFwLnBhZ2luYXRpb24iLCJ1aS5ib290c3RyYXAudG9vbHRpcCIsInVpLmJvb3RzdHJhcC5wb3BvdmVyIiwidWkuYm9vdHN0cmFwLnByb2dyZXNzYmFyIiwidWkuYm9vdHN0cmFwLnJhdGluZyIsInVpLmJvb3RzdHJhcC50YWJzIiwidWkuYm9vdHN0cmFwLnRpbWVwaWNrZXIiLCJ1aS5ib290c3RyYXAudHlwZWFoZWFkIl0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAudHBscyIsWyJ0ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLWdyb3VwLmh0bWwiLCJ0ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLmh0bWwiLCJ0ZW1wbGF0ZS9hbGVydC9hbGVydC5odG1sIiwidGVtcGxhdGUvY2Fyb3VzZWwvY2Fyb3VzZWwuaHRtbCIsInRlbXBsYXRlL2Nhcm91c2VsL3NsaWRlLmh0bWwiLCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RhdGVwaWNrZXIuaHRtbCIsInRlbXBsYXRlL2RhdGVwaWNrZXIvZGF5Lmh0bWwiLCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL21vbnRoLmh0bWwiLCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL3BvcHVwLmh0bWwiLCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL3llYXIuaHRtbCIsInRlbXBsYXRlL21vZGFsL2JhY2tkcm9wLmh0bWwiLCJ0ZW1wbGF0ZS9tb2RhbC93aW5kb3cuaHRtbCIsInRlbXBsYXRlL3BhZ2luYXRpb24vcGFnZXIuaHRtbCIsInRlbXBsYXRlL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5odG1sIiwidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLWh0bWwtdW5zYWZlLXBvcHVwLmh0bWwiLCJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtcG9wdXAuaHRtbCIsInRlbXBsYXRlL3BvcG92ZXIvcG9wb3Zlci5odG1sIiwidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvYmFyLmh0bWwiLCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzcy5odG1sIiwidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIuaHRtbCIsInRlbXBsYXRlL3JhdGluZy9yYXRpbmcuaHRtbCIsInRlbXBsYXRlL3RhYnMvdGFiLmh0bWwiLCJ0ZW1wbGF0ZS90YWJzL3RhYnNldC5odG1sIiwidGVtcGxhdGUvdGltZXBpY2tlci90aW1lcGlja2VyLmh0bWwiLCJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLW1hdGNoLmh0bWwiLCJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLXBvcHVwLmh0bWwiXSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC50cmFuc2l0aW9uIixbXSkuZmFjdG9yeSgiJHRyYW5zaXRpb24iLFsiJHEiLCIkdGltZW91dCIsIiRyb290U2NvcGUiLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2Zvcih2YXIgYiBpbiBhKWlmKHZvaWQgMCE9PWYuc3R5bGVbYl0pcmV0dXJuIGFbYl19dmFyIGU9ZnVuY3Rpb24oZCxmLGcpe2c9Z3x8e307dmFyIGg9YS5kZWZlcigpLGk9ZVtnLmFuaW1hdGlvbj8iYW5pbWF0aW9uRW5kRXZlbnROYW1lIjoidHJhbnNpdGlvbkVuZEV2ZW50TmFtZSJdLGo9ZnVuY3Rpb24oKXtjLiRhcHBseShmdW5jdGlvbigpe2QudW5iaW5kKGksaiksaC5yZXNvbHZlKGQpfSl9O3JldHVybiBpJiZkLmJpbmQoaSxqKSxiKGZ1bmN0aW9uKCl7YW5ndWxhci5pc1N0cmluZyhmKT9kLmFkZENsYXNzKGYpOmFuZ3VsYXIuaXNGdW5jdGlvbihmKT9mKGQpOmFuZ3VsYXIuaXNPYmplY3QoZikmJmQuY3NzKGYpLGl8fGgucmVzb2x2ZShkKX0pLGgucHJvbWlzZS5jYW5jZWw9ZnVuY3Rpb24oKXtpJiZkLnVuYmluZChpLGopLGgucmVqZWN0KCJUcmFuc2l0aW9uIGNhbmNlbGxlZCIpfSxoLnByb21pc2V9LGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHJhbnMiKSxnPXtXZWJraXRUcmFuc2l0aW9uOiJ3ZWJraXRUcmFuc2l0aW9uRW5kIixNb3pUcmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIixPVHJhbnNpdGlvbjoib1RyYW5zaXRpb25FbmQiLHRyYW5zaXRpb246InRyYW5zaXRpb25lbmQifSxoPXtXZWJraXRUcmFuc2l0aW9uOiJ3ZWJraXRBbmltYXRpb25FbmQiLE1velRyYW5zaXRpb246ImFuaW1hdGlvbmVuZCIsT1RyYW5zaXRpb246Im9BbmltYXRpb25FbmQiLHRyYW5zaXRpb246ImFuaW1hdGlvbmVuZCJ9O3JldHVybiBlLnRyYW5zaXRpb25FbmRFdmVudE5hbWU9ZChnKSxlLmFuaW1hdGlvbkVuZEV2ZW50TmFtZT1kKGgpLGV9XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5jb2xsYXBzZSIsWyJ1aS5ib290c3RyYXAudHJhbnNpdGlvbiJdKS5kaXJlY3RpdmUoImNvbGxhcHNlIixbIiR0cmFuc2l0aW9uIixmdW5jdGlvbihhKXtyZXR1cm57bGluazpmdW5jdGlvbihiLGMsZCl7ZnVuY3Rpb24gZShiKXtmdW5jdGlvbiBkKCl7aj09PWUmJihqPXZvaWQgMCl9dmFyIGU9YShjLGIpO3JldHVybiBqJiZqLmNhbmNlbCgpLGo9ZSxlLnRoZW4oZCxkKSxlfWZ1bmN0aW9uIGYoKXtrPyhrPSExLGcoKSk6KGMucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIikuYWRkQ2xhc3MoImNvbGxhcHNpbmciKSxlKHtoZWlnaHQ6Y1swXS5zY3JvbGxIZWlnaHQrInB4In0pLnRoZW4oZykpfWZ1bmN0aW9uIGcoKXtjLnJlbW92ZUNsYXNzKCJjb2xsYXBzaW5nIiksYy5hZGRDbGFzcygiY29sbGFwc2UgaW4iKSxjLmNzcyh7aGVpZ2h0OiJhdXRvIn0pfWZ1bmN0aW9uIGgoKXtpZihrKWs9ITEsaSgpLGMuY3NzKHtoZWlnaHQ6MH0pO2Vsc2V7Yy5jc3Moe2hlaWdodDpjWzBdLnNjcm9sbEhlaWdodCsicHgifSk7e2NbMF0ub2Zmc2V0V2lkdGh9Yy5yZW1vdmVDbGFzcygiY29sbGFwc2UgaW4iKS5hZGRDbGFzcygiY29sbGFwc2luZyIpLGUoe2hlaWdodDowfSkudGhlbihpKX19ZnVuY3Rpb24gaSgpe2MucmVtb3ZlQ2xhc3MoImNvbGxhcHNpbmciKSxjLmFkZENsYXNzKCJjb2xsYXBzZSIpfXZhciBqLGs9ITA7Yi4kd2F0Y2goZC5jb2xsYXBzZSxmdW5jdGlvbihhKXthP2goKTpmKCl9KX19fV0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuYWNjb3JkaW9uIixbInVpLmJvb3RzdHJhcC5jb2xsYXBzZSJdKS5jb25zdGFudCgiYWNjb3JkaW9uQ29uZmlnIix7Y2xvc2VPdGhlcnM6ITB9KS5jb250cm9sbGVyKCJBY2NvcmRpb25Db250cm9sbGVyIixbIiRzY29wZSIsIiRhdHRycyIsImFjY29yZGlvbkNvbmZpZyIsZnVuY3Rpb24oYSxiLGMpe3RoaXMuZ3JvdXBzPVtdLHRoaXMuY2xvc2VPdGhlcnM9ZnVuY3Rpb24oZCl7dmFyIGU9YW5ndWxhci5pc0RlZmluZWQoYi5jbG9zZU90aGVycyk/YS4kZXZhbChiLmNsb3NlT3RoZXJzKTpjLmNsb3NlT3RoZXJzO2UmJmFuZ3VsYXIuZm9yRWFjaCh0aGlzLmdyb3VwcyxmdW5jdGlvbihhKXthIT09ZCYmKGEuaXNPcGVuPSExKX0pfSx0aGlzLmFkZEdyb3VwPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7dGhpcy5ncm91cHMucHVzaChhKSxhLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7Yi5yZW1vdmVHcm91cChhKX0pfSx0aGlzLnJlbW92ZUdyb3VwPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ3JvdXBzLmluZGV4T2YoYSk7LTEhPT1iJiZ0aGlzLmdyb3Vwcy5zcGxpY2UoYiwxKX19XSkuZGlyZWN0aXZlKCJhY2NvcmRpb24iLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsY29udHJvbGxlcjoiQWNjb3JkaW9uQ29udHJvbGxlciIsdHJhbnNjbHVkZTohMCxyZXBsYWNlOiExLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLmh0bWwifX0pLmRpcmVjdGl2ZSgiYWNjb3JkaW9uR3JvdXAiLGZ1bmN0aW9uKCl7cmV0dXJue3JlcXVpcmU6Il5hY2NvcmRpb24iLHJlc3RyaWN0OiJFQSIsdHJhbnNjbHVkZTohMCxyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLWdyb3VwLmh0bWwiLHNjb3BlOntoZWFkaW5nOiJAIixpc09wZW46Ij0/Iixpc0Rpc2FibGVkOiI9PyJ9LGNvbnRyb2xsZXI6ZnVuY3Rpb24oKXt0aGlzLnNldEhlYWRpbmc9ZnVuY3Rpb24oYSl7dGhpcy5oZWFkaW5nPWF9fSxsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2QuYWRkR3JvdXAoYSksYS4kd2F0Y2goImlzT3BlbiIsZnVuY3Rpb24oYil7YiYmZC5jbG9zZU90aGVycyhhKX0pLGEudG9nZ2xlT3Blbj1mdW5jdGlvbigpe2EuaXNEaXNhYmxlZHx8KGEuaXNPcGVuPSFhLmlzT3Blbil9fX19KS5kaXJlY3RpdmUoImFjY29yZGlvbkhlYWRpbmciLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsdHJhbnNjbHVkZTohMCx0ZW1wbGF0ZToiIixyZXBsYWNlOiEwLHJlcXVpcmU6Il5hY2NvcmRpb25Hcm91cCIsbGluazpmdW5jdGlvbihhLGIsYyxkLGUpe2Quc2V0SGVhZGluZyhlKGEsZnVuY3Rpb24oKXt9KSl9fX0pLmRpcmVjdGl2ZSgiYWNjb3JkaW9uVHJhbnNjbHVkZSIsZnVuY3Rpb24oKXtyZXR1cm57cmVxdWlyZToiXmFjY29yZGlvbkdyb3VwIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2EuJHdhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuIGRbYy5hY2NvcmRpb25UcmFuc2NsdWRlXX0sZnVuY3Rpb24oYSl7YSYmKGIuaHRtbCgiIiksYi5hcHBlbmQoYSkpfSl9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuYWxlcnQiLFtdKS5jb250cm9sbGVyKCJBbGVydENvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIixmdW5jdGlvbihhLGIpe2EuY2xvc2VhYmxlPSJjbG9zZSJpbiBifV0pLmRpcmVjdGl2ZSgiYWxlcnQiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsY29udHJvbGxlcjoiQWxlcnRDb250cm9sbGVyIix0ZW1wbGF0ZVVybDoidGVtcGxhdGUvYWxlcnQvYWxlcnQuaHRtbCIsdHJhbnNjbHVkZTohMCxyZXBsYWNlOiEwLHNjb3BlOnt0eXBlOiJAIixjbG9zZToiJiJ9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuYmluZEh0bWwiLFtdKS5kaXJlY3RpdmUoImJpbmRIdG1sVW5zYWZlIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihhLGIsYyl7Yi5hZGRDbGFzcygibmctYmluZGluZyIpLmRhdGEoIiRiaW5kaW5nIixjLmJpbmRIdG1sVW5zYWZlKSxhLiR3YXRjaChjLmJpbmRIdG1sVW5zYWZlLGZ1bmN0aW9uKGEpe2IuaHRtbChhfHwiIil9KX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmJ1dHRvbnMiLFtdKS5jb25zdGFudCgiYnV0dG9uQ29uZmlnIix7YWN0aXZlQ2xhc3M6ImFjdGl2ZSIsdG9nZ2xlRXZlbnQ6ImNsaWNrIn0pLmNvbnRyb2xsZXIoIkJ1dHRvbnNDb250cm9sbGVyIixbImJ1dHRvbkNvbmZpZyIsZnVuY3Rpb24oYSl7dGhpcy5hY3RpdmVDbGFzcz1hLmFjdGl2ZUNsYXNzfHwiYWN0aXZlIix0aGlzLnRvZ2dsZUV2ZW50PWEudG9nZ2xlRXZlbnR8fCJjbGljayJ9XSkuZGlyZWN0aXZlKCJidG5SYWRpbyIsZnVuY3Rpb24oKXtyZXR1cm57cmVxdWlyZTpbImJ0blJhZGlvIiwibmdNb2RlbCJdLGNvbnRyb2xsZXI6IkJ1dHRvbnNDb250cm9sbGVyIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWRbMF0sZj1kWzFdO2YuJHJlbmRlcj1mdW5jdGlvbigpe2IudG9nZ2xlQ2xhc3MoZS5hY3RpdmVDbGFzcyxhbmd1bGFyLmVxdWFscyhmLiRtb2RlbFZhbHVlLGEuJGV2YWwoYy5idG5SYWRpbykpKX0sYi5iaW5kKGUudG9nZ2xlRXZlbnQsZnVuY3Rpb24oKXt2YXIgZD1iLmhhc0NsYXNzKGUuYWN0aXZlQ2xhc3MpOyghZHx8YW5ndWxhci5pc0RlZmluZWQoYy51bmNoZWNrYWJsZSkpJiZhLiRhcHBseShmdW5jdGlvbigpe2YuJHNldFZpZXdWYWx1ZShkP251bGw6YS4kZXZhbChjLmJ0blJhZGlvKSksZi4kcmVuZGVyKCl9KX0pfX19KS5kaXJlY3RpdmUoImJ0bkNoZWNrYm94IixmdW5jdGlvbigpe3JldHVybntyZXF1aXJlOlsiYnRuQ2hlY2tib3giLCJuZ01vZGVsIl0sY29udHJvbGxlcjoiQnV0dG9uc0NvbnRyb2xsZXIiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7ZnVuY3Rpb24gZSgpe3JldHVybiBnKGMuYnRuQ2hlY2tib3hUcnVlLCEwKX1mdW5jdGlvbiBmKCl7cmV0dXJuIGcoYy5idG5DaGVja2JveEZhbHNlLCExKX1mdW5jdGlvbiBnKGIsYyl7dmFyIGQ9YS4kZXZhbChiKTtyZXR1cm4gYW5ndWxhci5pc0RlZmluZWQoZCk/ZDpjfXZhciBoPWRbMF0saT1kWzFdO2kuJHJlbmRlcj1mdW5jdGlvbigpe2IudG9nZ2xlQ2xhc3MoaC5hY3RpdmVDbGFzcyxhbmd1bGFyLmVxdWFscyhpLiRtb2RlbFZhbHVlLGUoKSkpfSxiLmJpbmQoaC50b2dnbGVFdmVudCxmdW5jdGlvbigpe2EuJGFwcGx5KGZ1bmN0aW9uKCl7aS4kc2V0Vmlld1ZhbHVlKGIuaGFzQ2xhc3MoaC5hY3RpdmVDbGFzcyk/ZigpOmUoKSksaS4kcmVuZGVyKCl9KX0pfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmNhcm91c2VsIixbInVpLmJvb3RzdHJhcC50cmFuc2l0aW9uIl0pLmNvbnRyb2xsZXIoIkNhcm91c2VsQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkdGltZW91dCIsIiR0cmFuc2l0aW9uIixmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZCgpe2UoKTt2YXIgYz0rYS5pbnRlcnZhbDshaXNOYU4oYykmJmM+PTAmJihnPWIoZixjKSl9ZnVuY3Rpb24gZSgpe2cmJihiLmNhbmNlbChnKSxnPW51bGwpfWZ1bmN0aW9uIGYoKXtoPyhhLm5leHQoKSxkKCkpOmEucGF1c2UoKX12YXIgZyxoLGk9dGhpcyxqPWkuc2xpZGVzPWEuc2xpZGVzPVtdLGs9LTE7aS5jdXJyZW50U2xpZGU9bnVsbDt2YXIgbD0hMTtpLnNlbGVjdD1hLnNlbGVjdD1mdW5jdGlvbihlLGYpe2Z1bmN0aW9uIGcoKXtpZighbCl7aWYoaS5jdXJyZW50U2xpZGUmJmFuZ3VsYXIuaXNTdHJpbmcoZikmJiFhLm5vVHJhbnNpdGlvbiYmZS4kZWxlbWVudCl7ZS4kZWxlbWVudC5hZGRDbGFzcyhmKTt7ZS4kZWxlbWVudFswXS5vZmZzZXRXaWR0aH1hbmd1bGFyLmZvckVhY2goaixmdW5jdGlvbihhKXthbmd1bGFyLmV4dGVuZChhLHtkaXJlY3Rpb246IiIsZW50ZXJpbmc6ITEsbGVhdmluZzohMSxhY3RpdmU6ITF9KX0pLGFuZ3VsYXIuZXh0ZW5kKGUse2RpcmVjdGlvbjpmLGFjdGl2ZTohMCxlbnRlcmluZzohMH0pLGFuZ3VsYXIuZXh0ZW5kKGkuY3VycmVudFNsaWRlfHx7fSx7ZGlyZWN0aW9uOmYsbGVhdmluZzohMH0pLGEuJGN1cnJlbnRUcmFuc2l0aW9uPWMoZS4kZWxlbWVudCx7fSksZnVuY3Rpb24oYixjKXthLiRjdXJyZW50VHJhbnNpdGlvbi50aGVuKGZ1bmN0aW9uKCl7aChiLGMpfSxmdW5jdGlvbigpe2goYixjKX0pfShlLGkuY3VycmVudFNsaWRlKX1lbHNlIGgoZSxpLmN1cnJlbnRTbGlkZSk7aS5jdXJyZW50U2xpZGU9ZSxrPW0sZCgpfX1mdW5jdGlvbiBoKGIsYyl7YW5ndWxhci5leHRlbmQoYix7ZGlyZWN0aW9uOiIiLGFjdGl2ZTohMCxsZWF2aW5nOiExLGVudGVyaW5nOiExfSksYW5ndWxhci5leHRlbmQoY3x8e30se2RpcmVjdGlvbjoiIixhY3RpdmU6ITEsbGVhdmluZzohMSxlbnRlcmluZzohMX0pLGEuJGN1cnJlbnRUcmFuc2l0aW9uPW51bGx9dmFyIG09ai5pbmRleE9mKGUpO3ZvaWQgMD09PWYmJihmPW0+az8ibmV4dCI6InByZXYiKSxlJiZlIT09aS5jdXJyZW50U2xpZGUmJihhLiRjdXJyZW50VHJhbnNpdGlvbj8oYS4kY3VycmVudFRyYW5zaXRpb24uY2FuY2VsKCksYihnKSk6ZygpKX0sYS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2w9ITB9KSxpLmluZGV4T2ZTbGlkZT1mdW5jdGlvbihhKXtyZXR1cm4gai5pbmRleE9mKGEpfSxhLm5leHQ9ZnVuY3Rpb24oKXt2YXIgYj0oaysxKSVqLmxlbmd0aDtyZXR1cm4gYS4kY3VycmVudFRyYW5zaXRpb24/dm9pZCAwOmkuc2VsZWN0KGpbYl0sIm5leHQiKX0sYS5wcmV2PWZ1bmN0aW9uKCl7dmFyIGI9MD5rLTE/ai5sZW5ndGgtMTprLTE7cmV0dXJuIGEuJGN1cnJlbnRUcmFuc2l0aW9uP3ZvaWQgMDppLnNlbGVjdChqW2JdLCJwcmV2Iil9LGEuaXNBY3RpdmU9ZnVuY3Rpb24oYSl7cmV0dXJuIGkuY3VycmVudFNsaWRlPT09YX0sYS4kd2F0Y2goImludGVydmFsIixkKSxhLiRvbigiJGRlc3Ryb3kiLGUpLGEucGxheT1mdW5jdGlvbigpe2h8fChoPSEwLGQoKSl9LGEucGF1c2U9ZnVuY3Rpb24oKXthLm5vUGF1c2V8fChoPSExLGUoKSl9LGkuYWRkU2xpZGU9ZnVuY3Rpb24oYixjKXtiLiRlbGVtZW50PWMsai5wdXNoKGIpLDE9PT1qLmxlbmd0aHx8Yi5hY3RpdmU/KGkuc2VsZWN0KGpbai5sZW5ndGgtMV0pLDE9PWoubGVuZ3RoJiZhLnBsYXkoKSk6Yi5hY3RpdmU9ITF9LGkucmVtb3ZlU2xpZGU9ZnVuY3Rpb24oYSl7dmFyIGI9ai5pbmRleE9mKGEpO2ouc3BsaWNlKGIsMSksai5sZW5ndGg+MCYmYS5hY3RpdmU/aS5zZWxlY3QoYj49ai5sZW5ndGg/altiLTFdOmpbYl0pOms+YiYmay0tfX1dKS5kaXJlY3RpdmUoImNhcm91c2VsIixbZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIix0cmFuc2NsdWRlOiEwLHJlcGxhY2U6ITAsY29udHJvbGxlcjoiQ2Fyb3VzZWxDb250cm9sbGVyIixyZXF1aXJlOiJjYXJvdXNlbCIsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2Nhcm91c2VsL2Nhcm91c2VsLmh0bWwiLHNjb3BlOntpbnRlcnZhbDoiPSIsbm9UcmFuc2l0aW9uOiI9Iixub1BhdXNlOiI9In19fV0pLmRpcmVjdGl2ZSgic2xpZGUiLGZ1bmN0aW9uKCl7cmV0dXJue3JlcXVpcmU6Il5jYXJvdXNlbCIscmVzdHJpY3Q6IkVBIix0cmFuc2NsdWRlOiEwLHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2Nhcm91c2VsL3NsaWRlLmh0bWwiLHNjb3BlOnthY3RpdmU6Ij0/In0sbGluazpmdW5jdGlvbihhLGIsYyxkKXtkLmFkZFNsaWRlKGEsYiksYS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2QucmVtb3ZlU2xpZGUoYSl9KSxhLiR3YXRjaCgiYWN0aXZlIixmdW5jdGlvbihiKXtiJiZkLnNlbGVjdChhKX0pfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmRhdGVwYXJzZXIiLFtdKS5zZXJ2aWNlKCJkYXRlUGFyc2VyIixbIiRsb2NhbGUiLCJvcmRlckJ5RmlsdGVyIixmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGMpe3JldHVybiAxPT09YiYmYz4yOD8yOT09PWMmJihhJTQ9PT0wJiZhJTEwMCE9PTB8fGElNDAwPT09MCk6Mz09PWJ8fDU9PT1ifHw4PT09Ynx8MTA9PT1iPzMxPmM6ITB9dGhpcy5wYXJzZXJzPXt9O3ZhciBkPXt5eXl5OntyZWdleDoiXFxkezR9IixhcHBseTpmdW5jdGlvbihhKXt0aGlzLnllYXI9K2F9fSx5eTp7cmVnZXg6IlxcZHsyfSIsYXBwbHk6ZnVuY3Rpb24oYSl7dGhpcy55ZWFyPSthKzJlM319LHk6e3JlZ2V4OiJcXGR7MSw0fSIsYXBwbHk6ZnVuY3Rpb24oYSl7dGhpcy55ZWFyPSthfX0sTU1NTTp7cmVnZXg6YS5EQVRFVElNRV9GT1JNQVRTLk1PTlRILmpvaW4oInwiKSxhcHBseTpmdW5jdGlvbihiKXt0aGlzLm1vbnRoPWEuREFURVRJTUVfRk9STUFUUy5NT05USC5pbmRleE9mKGIpfX0sTU1NOntyZWdleDphLkRBVEVUSU1FX0ZPUk1BVFMuU0hPUlRNT05USC5qb2luKCJ8IiksYXBwbHk6ZnVuY3Rpb24oYil7dGhpcy5tb250aD1hLkRBVEVUSU1FX0ZPUk1BVFMuU0hPUlRNT05USC5pbmRleE9mKGIpfX0sTU06e3JlZ2V4OiIwWzEtOV18MVswLTJdIixhcHBseTpmdW5jdGlvbihhKXt0aGlzLm1vbnRoPWEtMX19LE06e3JlZ2V4OiJbMS05XXwxWzAtMl0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMubW9udGg9YS0xfX0sZGQ6e3JlZ2V4OiJbMC0yXVswLTldezF9fDNbMC0xXXsxfSIsYXBwbHk6ZnVuY3Rpb24oYSl7dGhpcy5kYXRlPSthfX0sZDp7cmVnZXg6IlsxLTJdP1swLTldezF9fDNbMC0xXXsxfSIsYXBwbHk6ZnVuY3Rpb24oYSl7dGhpcy5kYXRlPSthfX0sRUVFRTp7cmVnZXg6YS5EQVRFVElNRV9GT1JNQVRTLkRBWS5qb2luKCJ8Iil9LEVFRTp7cmVnZXg6YS5EQVRFVElNRV9GT1JNQVRTLlNIT1JUREFZLmpvaW4oInwiKX19O3RoaXMuY3JlYXRlUGFyc2VyPWZ1bmN0aW9uKGEpe3ZhciBjPVtdLGU9YS5zcGxpdCgiIik7cmV0dXJuIGFuZ3VsYXIuZm9yRWFjaChkLGZ1bmN0aW9uKGIsZCl7dmFyIGY9YS5pbmRleE9mKGQpO2lmKGY+LTEpe2E9YS5zcGxpdCgiIiksZVtmXT0iKCIrYi5yZWdleCsiKSIsYVtmXT0iJCI7Zm9yKHZhciBnPWYrMSxoPWYrZC5sZW5ndGg7aD5nO2crKyllW2ddPSIiLGFbZ109IiQiO2E9YS5qb2luKCIiKSxjLnB1c2goe2luZGV4OmYsYXBwbHk6Yi5hcHBseX0pfX0pLHtyZWdleDpuZXcgUmVnRXhwKCJeIitlLmpvaW4oIiIpKyIkIiksbWFwOmIoYywiaW5kZXgiKX19LHRoaXMucGFyc2U9ZnVuY3Rpb24oYixkKXtpZighYW5ndWxhci5pc1N0cmluZyhiKSlyZXR1cm4gYjtkPWEuREFURVRJTUVfRk9STUFUU1tkXXx8ZCx0aGlzLnBhcnNlcnNbZF18fCh0aGlzLnBhcnNlcnNbZF09dGhpcy5jcmVhdGVQYXJzZXIoZCkpO3ZhciBlPXRoaXMucGFyc2Vyc1tkXSxmPWUucmVnZXgsZz1lLm1hcCxoPWIubWF0Y2goZik7aWYoaCYmaC5sZW5ndGgpe2Zvcih2YXIgaSxqPXt5ZWFyOjE5MDAsbW9udGg6MCxkYXRlOjEsaG91cnM6MH0saz0xLGw9aC5sZW5ndGg7bD5rO2srKyl7dmFyIG09Z1trLTFdO20uYXBwbHkmJm0uYXBwbHkuY2FsbChqLGhba10pfXJldHVybiBjKGoueWVhcixqLm1vbnRoLGouZGF0ZSkmJihpPW5ldyBEYXRlKGoueWVhcixqLm1vbnRoLGouZGF0ZSxqLmhvdXJzKSksaX19fV0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAucG9zaXRpb24iLFtdKS5mYWN0b3J5KCIkcG9zaXRpb24iLFsiJGRvY3VtZW50IiwiJHdpbmRvdyIsZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYyl7cmV0dXJuIGEuY3VycmVudFN0eWxlP2EuY3VycmVudFN0eWxlW2NdOmIuZ2V0Q29tcHV0ZWRTdHlsZT9iLmdldENvbXB1dGVkU3R5bGUoYSlbY106YS5zdHlsZVtjXX1mdW5jdGlvbiBkKGEpe3JldHVybiJzdGF0aWMiPT09KGMoYSwicG9zaXRpb24iKXx8InN0YXRpYyIpfXZhciBlPWZ1bmN0aW9uKGIpe2Zvcih2YXIgYz1hWzBdLGU9Yi5vZmZzZXRQYXJlbnR8fGM7ZSYmZSE9PWMmJmQoZSk7KWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fGN9O3JldHVybntwb3NpdGlvbjpmdW5jdGlvbihiKXt2YXIgYz10aGlzLm9mZnNldChiKSxkPXt0b3A6MCxsZWZ0OjB9LGY9ZShiWzBdKTtmIT1hWzBdJiYoZD10aGlzLm9mZnNldChhbmd1bGFyLmVsZW1lbnQoZikpLGQudG9wKz1mLmNsaWVudFRvcC1mLnNjcm9sbFRvcCxkLmxlZnQrPWYuY2xpZW50TGVmdC1mLnNjcm9sbExlZnQpO3ZhciBnPWJbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3dpZHRoOmcud2lkdGh8fGIucHJvcCgib2Zmc2V0V2lkdGgiKSxoZWlnaHQ6Zy5oZWlnaHR8fGIucHJvcCgib2Zmc2V0SGVpZ2h0IiksdG9wOmMudG9wLWQudG9wLGxlZnQ6Yy5sZWZ0LWQubGVmdH19LG9mZnNldDpmdW5jdGlvbihjKXt2YXIgZD1jWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt3aWR0aDpkLndpZHRofHxjLnByb3AoIm9mZnNldFdpZHRoIiksaGVpZ2h0OmQuaGVpZ2h0fHxjLnByb3AoIm9mZnNldEhlaWdodCIpLHRvcDpkLnRvcCsoYi5wYWdlWU9mZnNldHx8YVswXS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKSxsZWZ0OmQubGVmdCsoYi5wYWdlWE9mZnNldHx8YVswXS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCl9fSxwb3NpdGlvbkVsZW1lbnRzOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoLGk9Yy5zcGxpdCgiLSIpLGo9aVswXSxrPWlbMV18fCJjZW50ZXIiO2U9ZD90aGlzLm9mZnNldChhKTp0aGlzLnBvc2l0aW9uKGEpLGY9Yi5wcm9wKCJvZmZzZXRXaWR0aCIpLGc9Yi5wcm9wKCJvZmZzZXRIZWlnaHQiKTt2YXIgbD17Y2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIGUubGVmdCtlLndpZHRoLzItZi8yfSxsZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIGUubGVmdH0scmlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5sZWZ0K2Uud2lkdGh9fSxtPXtjZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gZS50b3ArZS5oZWlnaHQvMi1nLzJ9LHRvcDpmdW5jdGlvbigpe3JldHVybiBlLnRvcH0sYm90dG9tOmZ1bmN0aW9uKCl7cmV0dXJuIGUudG9wK2UuaGVpZ2h0fX07c3dpdGNoKGope2Nhc2UicmlnaHQiOmg9e3RvcDptW2tdKCksbGVmdDpsW2pdKCl9O2JyZWFrO2Nhc2UibGVmdCI6aD17dG9wOm1ba10oKSxsZWZ0OmUubGVmdC1mfTticmVhaztjYXNlImJvdHRvbSI6aD17dG9wOm1bal0oKSxsZWZ0Omxba10oKX07YnJlYWs7ZGVmYXVsdDpoPXt0b3A6ZS50b3AtZyxsZWZ0Omxba10oKX19cmV0dXJuIGh9fX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmRhdGVwaWNrZXIiLFsidWkuYm9vdHN0cmFwLmRhdGVwYXJzZXIiLCJ1aS5ib290c3RyYXAucG9zaXRpb24iXSkuY29uc3RhbnQoImRhdGVwaWNrZXJDb25maWciLHtmb3JtYXREYXk6ImRkIixmb3JtYXRNb250aDoiTU1NTSIsZm9ybWF0WWVhcjoieXl5eSIsZm9ybWF0RGF5SGVhZGVyOiJFRUUiLGZvcm1hdERheVRpdGxlOiJNTU1NIHl5eXkiLGZvcm1hdE1vbnRoVGl0bGU6Inl5eXkiLGRhdGVwaWNrZXJNb2RlOiJkYXkiLG1pbk1vZGU6ImRheSIsbWF4TW9kZToieWVhciIsc2hvd1dlZWtzOiEwLHN0YXJ0aW5nRGF5OjAseWVhclJhbmdlOjIwLG1pbkRhdGU6bnVsbCxtYXhEYXRlOm51bGx9KS5jb250cm9sbGVyKCJEYXRlcGlja2VyQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCIkcGFyc2UiLCIkaW50ZXJwb2xhdGUiLCIkdGltZW91dCIsIiRsb2ciLCJkYXRlRmlsdGVyIiwiZGF0ZXBpY2tlckNvbmZpZyIsZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXt2YXIgaT10aGlzLGo9eyRzZXRWaWV3VmFsdWU6YW5ndWxhci5ub29wfTt0aGlzLm1vZGVzPVsiZGF5IiwibW9udGgiLCJ5ZWFyIl0sYW5ndWxhci5mb3JFYWNoKFsiZm9ybWF0RGF5IiwiZm9ybWF0TW9udGgiLCJmb3JtYXRZZWFyIiwiZm9ybWF0RGF5SGVhZGVyIiwiZm9ybWF0RGF5VGl0bGUiLCJmb3JtYXRNb250aFRpdGxlIiwibWluTW9kZSIsIm1heE1vZGUiLCJzaG93V2Vla3MiLCJzdGFydGluZ0RheSIsInllYXJSYW5nZSJdLGZ1bmN0aW9uKGMsZSl7aVtjXT1hbmd1bGFyLmlzRGVmaW5lZChiW2NdKT84PmU/ZChiW2NdKShhLiRwYXJlbnQpOmEuJHBhcmVudC4kZXZhbChiW2NdKTpoW2NdfSksYW5ndWxhci5mb3JFYWNoKFsibWluRGF0ZSIsIm1heERhdGUiXSxmdW5jdGlvbihkKXtiW2RdP2EuJHBhcmVudC4kd2F0Y2goYyhiW2RdKSxmdW5jdGlvbihhKXtpW2RdPWE/bmV3IERhdGUoYSk6bnVsbCxpLnJlZnJlc2hWaWV3KCl9KTppW2RdPWhbZF0/bmV3IERhdGUoaFtkXSk6bnVsbH0pLGEuZGF0ZXBpY2tlck1vZGU9YS5kYXRlcGlja2VyTW9kZXx8aC5kYXRlcGlja2VyTW9kZSxhLnVuaXF1ZUlkPSJkYXRlcGlja2VyLSIrYS4kaWQrIi0iK01hdGguZmxvb3IoMWU0Kk1hdGgucmFuZG9tKCkpLHRoaXMuYWN0aXZlRGF0ZT1hbmd1bGFyLmlzRGVmaW5lZChiLmluaXREYXRlKT9hLiRwYXJlbnQuJGV2YWwoYi5pbml0RGF0ZSk6bmV3IERhdGUsYS5pc0FjdGl2ZT1mdW5jdGlvbihiKXtyZXR1cm4gMD09PWkuY29tcGFyZShiLmRhdGUsaS5hY3RpdmVEYXRlKT8oYS5hY3RpdmVEYXRlSWQ9Yi51aWQsITApOiExfSx0aGlzLmluaXQ9ZnVuY3Rpb24oYSl7aj1hLGouJHJlbmRlcj1mdW5jdGlvbigpe2kucmVuZGVyKCl9fSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe2lmKGouJG1vZGVsVmFsdWUpe3ZhciBhPW5ldyBEYXRlKGouJG1vZGVsVmFsdWUpLGI9IWlzTmFOKGEpO2I/dGhpcy5hY3RpdmVEYXRlPWE6Zi5lcnJvcignRGF0ZXBpY2tlciBkaXJlY3RpdmU6ICJuZy1tb2RlbCIgdmFsdWUgbXVzdCBiZSBhIERhdGUgb2JqZWN0LCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgMDEuMDEuMTk3MCBvciBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4gUkZDMjgyMiBvciBJU08gODYwMSBkYXRlLicpLGouJHNldFZhbGlkaXR5KCJkYXRlIixiKX10aGlzLnJlZnJlc2hWaWV3KCl9LHRoaXMucmVmcmVzaFZpZXc9ZnVuY3Rpb24oKXtpZih0aGlzLmVsZW1lbnQpe3RoaXMuX3JlZnJlc2hWaWV3KCk7dmFyIGE9ai4kbW9kZWxWYWx1ZT9uZXcgRGF0ZShqLiRtb2RlbFZhbHVlKTpudWxsO2ouJHNldFZhbGlkaXR5KCJkYXRlLWRpc2FibGVkIiwhYXx8dGhpcy5lbGVtZW50JiYhdGhpcy5pc0Rpc2FibGVkKGEpKX19LHRoaXMuY3JlYXRlRGF0ZU9iamVjdD1mdW5jdGlvbihhLGIpe3ZhciBjPWouJG1vZGVsVmFsdWU/bmV3IERhdGUoai4kbW9kZWxWYWx1ZSk6bnVsbDtyZXR1cm57ZGF0ZTphLGxhYmVsOmcoYSxiKSxzZWxlY3RlZDpjJiYwPT09dGhpcy5jb21wYXJlKGEsYyksZGlzYWJsZWQ6dGhpcy5pc0Rpc2FibGVkKGEpLGN1cnJlbnQ6MD09PXRoaXMuY29tcGFyZShhLG5ldyBEYXRlKX19LHRoaXMuaXNEaXNhYmxlZD1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5taW5EYXRlJiZ0aGlzLmNvbXBhcmUoYyx0aGlzLm1pbkRhdGUpPDB8fHRoaXMubWF4RGF0ZSYmdGhpcy5jb21wYXJlKGMsdGhpcy5tYXhEYXRlKT4wfHxiLmRhdGVEaXNhYmxlZCYmYS5kYXRlRGlzYWJsZWQoe2RhdGU6Yyxtb2RlOmEuZGF0ZXBpY2tlck1vZGV9KX0sdGhpcy5zcGxpdD1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXTthLmxlbmd0aD4wOyljLnB1c2goYS5zcGxpY2UoMCxiKSk7cmV0dXJuIGN9LGEuc2VsZWN0PWZ1bmN0aW9uKGIpe2lmKGEuZGF0ZXBpY2tlck1vZGU9PT1pLm1pbk1vZGUpe3ZhciBjPWouJG1vZGVsVmFsdWU/bmV3IERhdGUoai4kbW9kZWxWYWx1ZSk6bmV3IERhdGUoMCwwLDAsMCwwLDAsMCk7Yy5zZXRGdWxsWWVhcihiLmdldEZ1bGxZZWFyKCksYi5nZXRNb250aCgpLGIuZ2V0RGF0ZSgpKSxqLiRzZXRWaWV3VmFsdWUoYyksai4kcmVuZGVyKCl9ZWxzZSBpLmFjdGl2ZURhdGU9YixhLmRhdGVwaWNrZXJNb2RlPWkubW9kZXNbaS5tb2Rlcy5pbmRleE9mKGEuZGF0ZXBpY2tlck1vZGUpLTFdfSxhLm1vdmU9ZnVuY3Rpb24oYSl7dmFyIGI9aS5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkrYSooaS5zdGVwLnllYXJzfHwwKSxjPWkuYWN0aXZlRGF0ZS5nZXRNb250aCgpK2EqKGkuc3RlcC5tb250aHN8fDApO2kuYWN0aXZlRGF0ZS5zZXRGdWxsWWVhcihiLGMsMSksaS5yZWZyZXNoVmlldygpfSxhLnRvZ2dsZU1vZGU9ZnVuY3Rpb24oYil7Yj1ifHwxLGEuZGF0ZXBpY2tlck1vZGU9PT1pLm1heE1vZGUmJjE9PT1ifHxhLmRhdGVwaWNrZXJNb2RlPT09aS5taW5Nb2RlJiYtMT09PWJ8fChhLmRhdGVwaWNrZXJNb2RlPWkubW9kZXNbaS5tb2Rlcy5pbmRleE9mKGEuZGF0ZXBpY2tlck1vZGUpK2JdKX0sYS5rZXlzPXsxMzoiZW50ZXIiLDMyOiJzcGFjZSIsMzM6InBhZ2V1cCIsMzQ6InBhZ2Vkb3duIiwzNToiZW5kIiwzNjoiaG9tZSIsMzc6ImxlZnQiLDM4OiJ1cCIsMzk6InJpZ2h0Iiw0MDoiZG93biJ9O3ZhciBrPWZ1bmN0aW9uKCl7ZShmdW5jdGlvbigpe2kuZWxlbWVudFswXS5mb2N1cygpfSwwLCExKX07YS4kb24oImRhdGVwaWNrZXIuZm9jdXMiLGspLGEua2V5ZG93bj1mdW5jdGlvbihiKXt2YXIgYz1hLmtleXNbYi53aGljaF07aWYoYyYmIWIuc2hpZnRLZXkmJiFiLmFsdEtleSlpZihiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKSwiZW50ZXIiPT09Y3x8InNwYWNlIj09PWMpe2lmKGkuaXNEaXNhYmxlZChpLmFjdGl2ZURhdGUpKXJldHVybjthLnNlbGVjdChpLmFjdGl2ZURhdGUpLGsoKX1lbHNlIWIuY3RybEtleXx8InVwIiE9PWMmJiJkb3duIiE9PWM/KGkuaGFuZGxlS2V5RG93bihjLGIpLGkucmVmcmVzaFZpZXcoKSk6KGEudG9nZ2xlTW9kZSgidXAiPT09Yz8xOi0xKSxrKCkpfX1dKS5kaXJlY3RpdmUoImRhdGVwaWNrZXIiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmh0bWwiLHNjb3BlOntkYXRlcGlja2VyTW9kZToiPT8iLGRhdGVEaXNhYmxlZDoiJiJ9LHJlcXVpcmU6WyJkYXRlcGlja2VyIiwiP15uZ01vZGVsIl0sY29udHJvbGxlcjoiRGF0ZXBpY2tlckNvbnRyb2xsZXIiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ZFswXSxmPWRbMV07ZiYmZS5pbml0KGYpfX19KS5kaXJlY3RpdmUoImRheXBpY2tlciIsWyJkYXRlRmlsdGVyIixmdW5jdGlvbihhKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RheS5odG1sIixyZXF1aXJlOiJeZGF0ZXBpY2tlciIsbGluazpmdW5jdGlvbihiLGMsZCxlKXtmdW5jdGlvbiBmKGEsYil7cmV0dXJuIDEhPT1ifHxhJTQhPT0wfHxhJTEwMD09PTAmJmElNDAwIT09MD9pW2JdOjI5fWZ1bmN0aW9uIGcoYSxiKXt2YXIgYz1uZXcgQXJyYXkoYiksZD1uZXcgRGF0ZShhKSxlPTA7Zm9yKGQuc2V0SG91cnMoMTIpO2I+ZTspY1tlKytdPW5ldyBEYXRlKGQpLGQuc2V0RGF0ZShkLmdldERhdGUoKSsxKTtyZXR1cm4gY31mdW5jdGlvbiBoKGEpe3ZhciBiPW5ldyBEYXRlKGEpO2Iuc2V0RGF0ZShiLmdldERhdGUoKSs0LShiLmdldERheSgpfHw3KSk7dmFyIGM9Yi5nZXRUaW1lKCk7cmV0dXJuIGIuc2V0TW9udGgoMCksYi5zZXREYXRlKDEpLE1hdGguZmxvb3IoTWF0aC5yb3VuZCgoYy1iKS84NjRlNSkvNykrMX1iLnNob3dXZWVrcz1lLnNob3dXZWVrcyxlLnN0ZXA9e21vbnRoczoxfSxlLmVsZW1lbnQ9Yzt2YXIgaT1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdO2UuX3JlZnJlc2hWaWV3PWZ1bmN0aW9uKCl7dmFyIGM9ZS5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksZD1lLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSxmPW5ldyBEYXRlKGMsZCwxKSxpPWUuc3RhcnRpbmdEYXktZi5nZXREYXkoKSxqPWk+MD83LWk6LWksaz1uZXcgRGF0ZShmKTtqPjAmJmsuc2V0RGF0ZSgtaisxKTtmb3IodmFyIGw9ZyhrLDQyKSxtPTA7NDI+bTttKyspbFttXT1hbmd1bGFyLmV4dGVuZChlLmNyZWF0ZURhdGVPYmplY3QobFttXSxlLmZvcm1hdERheSkse3NlY29uZGFyeTpsW21dLmdldE1vbnRoKCkhPT1kLHVpZDpiLnVuaXF1ZUlkKyItIittfSk7Yi5sYWJlbHM9bmV3IEFycmF5KDcpO2Zvcih2YXIgbj0wOzc+bjtuKyspYi5sYWJlbHNbbl09e2FiYnI6YShsW25dLmRhdGUsZS5mb3JtYXREYXlIZWFkZXIpLGZ1bGw6YShsW25dLmRhdGUsIkVFRUUiKX07aWYoYi50aXRsZT1hKGUuYWN0aXZlRGF0ZSxlLmZvcm1hdERheVRpdGxlKSxiLnJvd3M9ZS5zcGxpdChsLDcpLGIuc2hvd1dlZWtzKXtiLndlZWtOdW1iZXJzPVtdO2Zvcih2YXIgbz1oKGIucm93c1swXVswXS5kYXRlKSxwPWIucm93cy5sZW5ndGg7Yi53ZWVrTnVtYmVycy5wdXNoKG8rKyk8cDspO319LGUuY29tcGFyZT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksYS5nZXRNb250aCgpLGEuZ2V0RGF0ZSgpKS1uZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksYi5nZXRNb250aCgpLGIuZ2V0RGF0ZSgpKX0sZS5oYW5kbGVLZXlEb3duPWZ1bmN0aW9uKGEpe3ZhciBiPWUuYWN0aXZlRGF0ZS5nZXREYXRlKCk7aWYoImxlZnQiPT09YSliLT0xO2Vsc2UgaWYoInVwIj09PWEpYi09NztlbHNlIGlmKCJyaWdodCI9PT1hKWIrPTE7ZWxzZSBpZigiZG93biI9PT1hKWIrPTc7ZWxzZSBpZigicGFnZXVwIj09PWF8fCJwYWdlZG93biI9PT1hKXt2YXIgYz1lLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSsoInBhZ2V1cCI9PT1hPy0xOjEpO2UuYWN0aXZlRGF0ZS5zZXRNb250aChjLDEpLGI9TWF0aC5taW4oZihlLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSxlLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSksYil9ZWxzZSJob21lIj09PWE/Yj0xOiJlbmQiPT09YSYmKGI9ZihlLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSxlLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSkpO2UuYWN0aXZlRGF0ZS5zZXREYXRlKGIpfSxlLnJlZnJlc2hWaWV3KCl9fX1dKS5kaXJlY3RpdmUoIm1vbnRocGlja2VyIixbImRhdGVGaWx0ZXIiLGZ1bmN0aW9uKGEpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2RhdGVwaWNrZXIvbW9udGguaHRtbCIscmVxdWlyZToiXmRhdGVwaWNrZXIiLGxpbms6ZnVuY3Rpb24oYixjLGQsZSl7ZS5zdGVwPXt5ZWFyczoxfSxlLmVsZW1lbnQ9YyxlLl9yZWZyZXNoVmlldz1mdW5jdGlvbigpe2Zvcih2YXIgYz1uZXcgQXJyYXkoMTIpLGQ9ZS5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksZj0wOzEyPmY7ZisrKWNbZl09YW5ndWxhci5leHRlbmQoZS5jcmVhdGVEYXRlT2JqZWN0KG5ldyBEYXRlKGQsZiwxKSxlLmZvcm1hdE1vbnRoKSx7dWlkOmIudW5pcXVlSWQrIi0iK2Z9KTtiLnRpdGxlPWEoZS5hY3RpdmVEYXRlLGUuZm9ybWF0TW9udGhUaXRsZSksYi5yb3dzPWUuc3BsaXQoYywzKX0sZS5jb21wYXJlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBEYXRlKGEuZ2V0RnVsbFllYXIoKSxhLmdldE1vbnRoKCkpLW5ldyBEYXRlKGIuZ2V0RnVsbFllYXIoKSxiLmdldE1vbnRoKCkpfSxlLmhhbmRsZUtleURvd249ZnVuY3Rpb24oYSl7dmFyIGI9ZS5hY3RpdmVEYXRlLmdldE1vbnRoKCk7aWYoImxlZnQiPT09YSliLT0xO2Vsc2UgaWYoInVwIj09PWEpYi09MztlbHNlIGlmKCJyaWdodCI9PT1hKWIrPTE7ZWxzZSBpZigiZG93biI9PT1hKWIrPTM7ZWxzZSBpZigicGFnZXVwIj09PWF8fCJwYWdlZG93biI9PT1hKXt2YXIgYz1lLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSsoInBhZ2V1cCI9PT1hPy0xOjEpO2UuYWN0aXZlRGF0ZS5zZXRGdWxsWWVhcihjKX1lbHNlImhvbWUiPT09YT9iPTA6ImVuZCI9PT1hJiYoYj0xMSk7ZS5hY3RpdmVEYXRlLnNldE1vbnRoKGIpfSxlLnJlZnJlc2hWaWV3KCl9fX1dKS5kaXJlY3RpdmUoInllYXJwaWNrZXIiLFsiZGF0ZUZpbHRlciIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9kYXRlcGlja2VyL3llYXIuaHRtbCIscmVxdWlyZToiXmRhdGVwaWNrZXIiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7ZnVuY3Rpb24gZShhKXtyZXR1cm4gcGFyc2VJbnQoKGEtMSkvZiwxMCkqZisxfXZhciBmPWQueWVhclJhbmdlO2Quc3RlcD17eWVhcnM6Zn0sZC5lbGVtZW50PWIsZC5fcmVmcmVzaFZpZXc9ZnVuY3Rpb24oKXtmb3IodmFyIGI9bmV3IEFycmF5KGYpLGM9MCxnPWUoZC5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkpO2Y+YztjKyspYltjXT1hbmd1bGFyLmV4dGVuZChkLmNyZWF0ZURhdGVPYmplY3QobmV3IERhdGUoZytjLDAsMSksZC5mb3JtYXRZZWFyKSx7dWlkOmEudW5pcXVlSWQrIi0iK2N9KTthLnRpdGxlPVtiWzBdLmxhYmVsLGJbZi0xXS5sYWJlbF0uam9pbigiIC0gIiksYS5yb3dzPWQuc3BsaXQoYiw1KX0sZC5jb21wYXJlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZ2V0RnVsbFllYXIoKS1iLmdldEZ1bGxZZWFyKCl9LGQuaGFuZGxlS2V5RG93bj1mdW5jdGlvbihhKXt2YXIgYj1kLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKTsibGVmdCI9PT1hP2ItPTE6InVwIj09PWE/Yi09NToicmlnaHQiPT09YT9iKz0xOiJkb3duIj09PWE/Yis9NToicGFnZXVwIj09PWF8fCJwYWdlZG93biI9PT1hP2IrPSgicGFnZXVwIj09PWE/LTE6MSkqZC5zdGVwLnllYXJzOiJob21lIj09PWE/Yj1lKGQuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKToiZW5kIj09PWEmJihiPWUoZC5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkpK2YtMSksZC5hY3RpdmVEYXRlLnNldEZ1bGxZZWFyKGIpfSxkLnJlZnJlc2hWaWV3KCl9fX1dKS5jb25zdGFudCgiZGF0ZXBpY2tlclBvcHVwQ29uZmlnIix7ZGF0ZXBpY2tlclBvcHVwOiJ5eXl5LU1NLWRkIixjdXJyZW50VGV4dDoiVG9kYXkiLGNsZWFyVGV4dDoiQ2xlYXIiLGNsb3NlVGV4dDoiRG9uZSIsY2xvc2VPbkRhdGVTZWxlY3Rpb246ITAsYXBwZW5kVG9Cb2R5OiExLHNob3dCdXR0b25CYXI6ITB9KS5kaXJlY3RpdmUoImRhdGVwaWNrZXJQb3B1cCIsWyIkY29tcGlsZSIsIiRwYXJzZSIsIiRkb2N1bWVudCIsIiRwb3NpdGlvbiIsImRhdGVGaWx0ZXIiLCJkYXRlUGFyc2VyIiwiZGF0ZXBpY2tlclBvcHVwQ29uZmlnIixmdW5jdGlvbihhLGIsYyxkLGUsZixnKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXF1aXJlOiJuZ01vZGVsIixzY29wZTp7aXNPcGVuOiI9PyIsY3VycmVudFRleHQ6IkAiLGNsZWFyVGV4dDoiQCIsY2xvc2VUZXh0OiJAIixkYXRlRGlzYWJsZWQ6IiYifSxsaW5rOmZ1bmN0aW9uKGgsaSxqLGspe2Z1bmN0aW9uIGwoYSl7cmV0dXJuIGEucmVwbGFjZSgvKFtBLVpdKS9nLGZ1bmN0aW9uKGEpe3JldHVybiItIithLnRvTG93ZXJDYXNlKCl9KX1mdW5jdGlvbiBtKGEpe2lmKGEpe2lmKGFuZ3VsYXIuaXNEYXRlKGEpJiYhaXNOYU4oYSkpcmV0dXJuIGsuJHNldFZhbGlkaXR5KCJkYXRlIiwhMCksYTtpZihhbmd1bGFyLmlzU3RyaW5nKGEpKXt2YXIgYj1mLnBhcnNlKGEsbil8fG5ldyBEYXRlKGEpO3JldHVybiBpc05hTihiKT92b2lkIGsuJHNldFZhbGlkaXR5KCJkYXRlIiwhMSk6KGsuJHNldFZhbGlkaXR5KCJkYXRlIiwhMCksYil9cmV0dXJuIHZvaWQgay4kc2V0VmFsaWRpdHkoImRhdGUiLCExKX1yZXR1cm4gay4kc2V0VmFsaWRpdHkoImRhdGUiLCEwKSxudWxsfXZhciBuLG89YW5ndWxhci5pc0RlZmluZWQoai5jbG9zZU9uRGF0ZVNlbGVjdGlvbik/aC4kcGFyZW50LiRldmFsKGouY2xvc2VPbkRhdGVTZWxlY3Rpb24pOmcuY2xvc2VPbkRhdGVTZWxlY3Rpb24scD1hbmd1bGFyLmlzRGVmaW5lZChqLmRhdGVwaWNrZXJBcHBlbmRUb0JvZHkpP2guJHBhcmVudC4kZXZhbChqLmRhdGVwaWNrZXJBcHBlbmRUb0JvZHkpOmcuYXBwZW5kVG9Cb2R5O2guc2hvd0J1dHRvbkJhcj1hbmd1bGFyLmlzRGVmaW5lZChqLnNob3dCdXR0b25CYXIpP2guJHBhcmVudC4kZXZhbChqLnNob3dCdXR0b25CYXIpOmcuc2hvd0J1dHRvbkJhcixoLmdldFRleHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGhbYSsiVGV4dCJdfHxnW2ErIlRleHQiXX0sai4kb2JzZXJ2ZSgiZGF0ZXBpY2tlclBvcHVwIixmdW5jdGlvbihhKXtuPWF8fGcuZGF0ZXBpY2tlclBvcHVwLGsuJHJlbmRlcigpfSk7dmFyIHE9YW5ndWxhci5lbGVtZW50KCI8ZGl2IGRhdGVwaWNrZXItcG9wdXAtd3JhcD48ZGl2IGRhdGVwaWNrZXI+PC9kaXY+PC9kaXY+Iik7cS5hdHRyKHsibmctbW9kZWwiOiJkYXRlIiwibmctY2hhbmdlIjoiZGF0ZVNlbGVjdGlvbigpIn0pO3ZhciByPWFuZ3VsYXIuZWxlbWVudChxLmNoaWxkcmVuKClbMF0pO2ouZGF0ZXBpY2tlck9wdGlvbnMmJmFuZ3VsYXIuZm9yRWFjaChoLiRwYXJlbnQuJGV2YWwoai5kYXRlcGlja2VyT3B0aW9ucyksZnVuY3Rpb24oYSxiKXtyLmF0dHIobChiKSxhKX0pLGFuZ3VsYXIuZm9yRWFjaChbIm1pbkRhdGUiLCJtYXhEYXRlIl0sZnVuY3Rpb24oYSl7althXSYmKGguJHBhcmVudC4kd2F0Y2goYihqW2FdKSxmdW5jdGlvbihiKXtoW2FdPWJ9KSxyLmF0dHIobChhKSxhKSl9KSxqLmRhdGVEaXNhYmxlZCYmci5hdHRyKCJkYXRlLWRpc2FibGVkIiwiZGF0ZURpc2FibGVkKHsgZGF0ZTogZGF0ZSwgbW9kZTogbW9kZSB9KSIpLGsuJHBhcnNlcnMudW5zaGlmdChtKSxoLmRhdGVTZWxlY3Rpb249ZnVuY3Rpb24oYSl7YW5ndWxhci5pc0RlZmluZWQoYSkmJihoLmRhdGU9YSksay4kc2V0Vmlld1ZhbHVlKGguZGF0ZSksay4kcmVuZGVyKCksbyYmKGguaXNPcGVuPSExLGlbMF0uZm9jdXMoKSl9LGkuYmluZCgiaW5wdXQgY2hhbmdlIGtleXVwIixmdW5jdGlvbigpe2guJGFwcGx5KGZ1bmN0aW9uKCl7aC5kYXRlPWsuJG1vZGVsVmFsdWV9KX0pLGsuJHJlbmRlcj1mdW5jdGlvbigpe3ZhciBhPWsuJHZpZXdWYWx1ZT9lKGsuJHZpZXdWYWx1ZSxuKToiIjtpLnZhbChhKSxoLmRhdGU9bShrLiRtb2RlbFZhbHVlKX07dmFyIHM9ZnVuY3Rpb24oYSl7aC5pc09wZW4mJmEudGFyZ2V0IT09aVswXSYmaC4kYXBwbHkoZnVuY3Rpb24oKXtoLmlzT3Blbj0hMX0pfSx0PWZ1bmN0aW9uKGEpe2gua2V5ZG93bihhKX07aS5iaW5kKCJrZXlkb3duIix0KSxoLmtleWRvd249ZnVuY3Rpb24oYSl7Mjc9PT1hLndoaWNoPyhhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSxoLmNsb3NlKCkpOjQwIT09YS53aGljaHx8aC5pc09wZW58fChoLmlzT3Blbj0hMCl9LGguJHdhdGNoKCJpc09wZW4iLGZ1bmN0aW9uKGEpe2E/KGguJGJyb2FkY2FzdCgiZGF0ZXBpY2tlci5mb2N1cyIpLGgucG9zaXRpb249cD9kLm9mZnNldChpKTpkLnBvc2l0aW9uKGkpLGgucG9zaXRpb24udG9wPWgucG9zaXRpb24udG9wK2kucHJvcCgib2Zmc2V0SGVpZ2h0IiksYy5iaW5kKCJjbGljayIscykpOmMudW5iaW5kKCJjbGljayIscyl9KSxoLnNlbGVjdD1mdW5jdGlvbihhKXtpZigidG9kYXkiPT09YSl7dmFyIGI9bmV3IERhdGU7YW5ndWxhci5pc0RhdGUoay4kbW9kZWxWYWx1ZSk/KGE9bmV3IERhdGUoay4kbW9kZWxWYWx1ZSksYS5zZXRGdWxsWWVhcihiLmdldEZ1bGxZZWFyKCksYi5nZXRNb250aCgpLGIuZ2V0RGF0ZSgpKSk6YT1uZXcgRGF0ZShiLnNldEhvdXJzKDAsMCwwLDApKX1oLmRhdGVTZWxlY3Rpb24oYSl9LGguY2xvc2U9ZnVuY3Rpb24oKXtoLmlzT3Blbj0hMSxpWzBdLmZvY3VzKCl9O3ZhciB1PWEocSkoaCk7cD9jLmZpbmQoImJvZHkiKS5hcHBlbmQodSk6aS5hZnRlcih1KSxoLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7dS5yZW1vdmUoKSxpLnVuYmluZCgia2V5ZG93biIsdCksYy51bmJpbmQoImNsaWNrIixzKX0pfX19XSkuZGlyZWN0aXZlKCJkYXRlcGlja2VyUG9wdXBXcmFwIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdHJhbnNjbHVkZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvZGF0ZXBpY2tlci9wb3B1cC5odG1sIixsaW5rOmZ1bmN0aW9uKGEsYil7Yi5iaW5kKCJjbGljayIsZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCl9KX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5kcm9wZG93biIsW10pLmNvbnN0YW50KCJkcm9wZG93bkNvbmZpZyIse29wZW5DbGFzczoib3BlbiJ9KS5zZXJ2aWNlKCJkcm9wZG93blNlcnZpY2UiLFsiJGRvY3VtZW50IixmdW5jdGlvbihhKXt2YXIgYj1udWxsO3RoaXMub3Blbj1mdW5jdGlvbihlKXtifHwoYS5iaW5kKCJjbGljayIsYyksYS5iaW5kKCJrZXlkb3duIixkKSksYiYmYiE9PWUmJihiLmlzT3Blbj0hMSksYj1lfSx0aGlzLmNsb3NlPWZ1bmN0aW9uKGUpe2I9PT1lJiYoYj1udWxsLGEudW5iaW5kKCJjbGljayIsYyksYS51bmJpbmQoImtleWRvd24iLGQpKX07dmFyIGM9ZnVuY3Rpb24oYSl7YSYmYS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8Yi4kYXBwbHkoZnVuY3Rpb24oKXtiLmlzT3Blbj0hMX0pfSxkPWZ1bmN0aW9uKGEpezI3PT09YS53aGljaCYmKGIuZm9jdXNUb2dnbGVFbGVtZW50KCksYygpKX19XSkuY29udHJvbGxlcigiRHJvcGRvd25Db250cm9sbGVyIixbIiRzY29wZSIsIiRhdHRycyIsIiRwYXJzZSIsImRyb3Bkb3duQ29uZmlnIiwiZHJvcGRvd25TZXJ2aWNlIiwiJGFuaW1hdGUiLGZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZyxoPXRoaXMsaT1hLiRuZXcoKSxqPWQub3BlbkNsYXNzLGs9YW5ndWxhci5ub29wLGw9Yi5vblRvZ2dsZT9jKGIub25Ub2dnbGUpOmFuZ3VsYXIubm9vcDt0aGlzLmluaXQ9ZnVuY3Rpb24oZCl7aC4kZWxlbWVudD1kLGIuaXNPcGVuJiYoZz1jKGIuaXNPcGVuKSxrPWcuYXNzaWduLGEuJHdhdGNoKGcsZnVuY3Rpb24oYSl7aS5pc09wZW49ISFhfSkpfSx0aGlzLnRvZ2dsZT1mdW5jdGlvbihhKXtyZXR1cm4gaS5pc09wZW49YXJndW1lbnRzLmxlbmd0aD8hIWE6IWkuaXNPcGVufSx0aGlzLmlzT3Blbj1mdW5jdGlvbigpe3JldHVybiBpLmlzT3Blbn0saS5mb2N1c1RvZ2dsZUVsZW1lbnQ9ZnVuY3Rpb24oKXtoLnRvZ2dsZUVsZW1lbnQmJmgudG9nZ2xlRWxlbWVudFswXS5mb2N1cygpfSxpLiR3YXRjaCgiaXNPcGVuIixmdW5jdGlvbihiLGMpe2ZbYj8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKGguJGVsZW1lbnQsaiksYj8oaS5mb2N1c1RvZ2dsZUVsZW1lbnQoKSxlLm9wZW4oaSkpOmUuY2xvc2UoaSksayhhLGIpLGFuZ3VsYXIuaXNEZWZpbmVkKGIpJiZiIT09YyYmbChhLHtvcGVuOiEhYn0pfSksYS4kb24oIiRsb2NhdGlvbkNoYW5nZVN1Y2Nlc3MiLGZ1bmN0aW9uKCl7aS5pc09wZW49ITF9KSxhLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7aS4kZGVzdHJveSgpfSl9XSkuZGlyZWN0aXZlKCJkcm9wZG93biIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkNBIixjb250cm9sbGVyOiJEcm9wZG93bkNvbnRyb2xsZXIiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7ZC5pbml0KGIpfX19KS5kaXJlY3RpdmUoImRyb3Bkb3duVG9nZ2xlIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiQ0EiLHJlcXVpcmU6Ij9eZHJvcGRvd24iLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoZCl7ZC50b2dnbGVFbGVtZW50PWI7dmFyIGU9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGIuaGFzQ2xhc3MoImRpc2FibGVkIil8fGMuZGlzYWJsZWR8fGEuJGFwcGx5KGZ1bmN0aW9uKCl7ZC50b2dnbGUoKX0pfTtiLmJpbmQoImNsaWNrIixlKSxiLmF0dHIoeyJhcmlhLWhhc3BvcHVwIjohMCwiYXJpYS1leHBhbmRlZCI6ITF9KSxhLiR3YXRjaChkLmlzT3BlbixmdW5jdGlvbihhKXtiLmF0dHIoImFyaWEtZXhwYW5kZWQiLCEhYSl9KSxhLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7Yi51bmJpbmQoImNsaWNrIixlKX0pfX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5tb2RhbCIsWyJ1aS5ib290c3RyYXAudHJhbnNpdGlvbiJdKS5mYWN0b3J5KCIkJHN0YWNrZWRNYXAiLGZ1bmN0aW9uKCl7cmV0dXJue2NyZWF0ZU5ldzpmdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybnthZGQ6ZnVuY3Rpb24oYixjKXthLnB1c2goe2tleTpiLHZhbHVlOmN9KX0sZ2V0OmZ1bmN0aW9uKGIpe2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWlmKGI9PWFbY10ua2V5KXJldHVybiBhW2NdfSxrZXlzOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyliLnB1c2goYVtjXS5rZXkpO3JldHVybiBifSx0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gYVthLmxlbmd0aC0xXX0scmVtb3ZlOmZ1bmN0aW9uKGIpe2Zvcih2YXIgYz0tMSxkPTA7ZDxhLmxlbmd0aDtkKyspaWYoYj09YVtkXS5rZXkpe2M9ZDticmVha31yZXR1cm4gYS5zcGxpY2UoYywxKVswXX0scmVtb3ZlVG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGEuc3BsaWNlKGEubGVuZ3RoLTEsMSlbMF19LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiBhLmxlbmd0aH19fX19KS5kaXJlY3RpdmUoIm1vZGFsQmFja2Ryb3AiLFsiJHRpbWVvdXQiLGZ1bmN0aW9uKGEpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL21vZGFsL2JhY2tkcm9wLmh0bWwiLGxpbms6ZnVuY3Rpb24oYil7Yi5hbmltYXRlPSExLGEoZnVuY3Rpb24oKXtiLmFuaW1hdGU9ITB9KX19fV0pLmRpcmVjdGl2ZSgibW9kYWxXaW5kb3ciLFsiJG1vZGFsU3RhY2siLCIkdGltZW91dCIsZnVuY3Rpb24oYSxiKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixzY29wZTp7aW5kZXg6IkAiLGFuaW1hdGU6Ij0ifSxyZXBsYWNlOiEwLHRyYW5zY2x1ZGU6ITAsdGVtcGxhdGVVcmw6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi50ZW1wbGF0ZVVybHx8InRlbXBsYXRlL21vZGFsL3dpbmRvdy5odG1sIn0sbGluazpmdW5jdGlvbihjLGQsZSl7ZC5hZGRDbGFzcyhlLndpbmRvd0NsYXNzfHwiIiksYy5zaXplPWUuc2l6ZSxiKGZ1bmN0aW9uKCl7Yy5hbmltYXRlPSEwLGRbMF0uZm9jdXMoKX0pLGMuY2xvc2U9ZnVuY3Rpb24oYil7dmFyIGM9YS5nZXRUb3AoKTtjJiZjLnZhbHVlLmJhY2tkcm9wJiYic3RhdGljIiE9Yy52YWx1ZS5iYWNrZHJvcCYmYi50YXJnZXQ9PT1iLmN1cnJlbnRUYXJnZXQmJihiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKSxhLmRpc21pc3MoYy5rZXksImJhY2tkcm9wIGNsaWNrIikpfX19fV0pLmZhY3RvcnkoIiRtb2RhbFN0YWNrIixbIiR0cmFuc2l0aW9uIiwiJHRpbWVvdXQiLCIkZG9jdW1lbnQiLCIkY29tcGlsZSIsIiRyb290U2NvcGUiLCIkJHN0YWNrZWRNYXAiLGZ1bmN0aW9uKGEsYixjLGQsZSxmKXtmdW5jdGlvbiBnKCl7Zm9yKHZhciBhPS0xLGI9bi5rZXlzKCksYz0wO2M8Yi5sZW5ndGg7YysrKW4uZ2V0KGJbY10pLnZhbHVlLmJhY2tkcm9wJiYoYT1jKTtyZXR1cm4gYX1mdW5jdGlvbiBoKGEpe3ZhciBiPWMuZmluZCgiYm9keSIpLmVxKDApLGQ9bi5nZXQoYSkudmFsdWU7bi5yZW1vdmUoYSksaihkLm1vZGFsRG9tRWwsZC5tb2RhbFNjb3BlLDMwMCxmdW5jdGlvbigpe2QubW9kYWxTY29wZS4kZGVzdHJveSgpLGIudG9nZ2xlQ2xhc3MobSxuLmxlbmd0aCgpPjApLGkoKX0pfWZ1bmN0aW9uIGkoKXtpZihrJiYtMT09ZygpKXt2YXIgYT1sO2ooayxsLDE1MCxmdW5jdGlvbigpe2EuJGRlc3Ryb3koKSxhPW51bGx9KSxrPXZvaWQgMCxsPXZvaWQgMH19ZnVuY3Rpb24gaihjLGQsZSxmKXtmdW5jdGlvbiBnKCl7Zy5kb25lfHwoZy5kb25lPSEwLGMucmVtb3ZlKCksZiYmZigpKX1kLmFuaW1hdGU9ITE7dmFyIGg9YS50cmFuc2l0aW9uRW5kRXZlbnROYW1lO2lmKGgpe3ZhciBpPWIoZyxlKTtjLmJpbmQoaCxmdW5jdGlvbigpe2IuY2FuY2VsKGkpLGcoKSxkLiRhcHBseSgpfSl9ZWxzZSBiKGcsMCl9dmFyIGssbCxtPSJtb2RhbC1vcGVuIixuPWYuY3JlYXRlTmV3KCksbz17fTtyZXR1cm4gZS4kd2F0Y2goZyxmdW5jdGlvbihhKXtsJiYobC5pbmRleD1hKX0pLGMuYmluZCgia2V5ZG93biIsZnVuY3Rpb24oYSl7dmFyIGI7Mjc9PT1hLndoaWNoJiYoYj1uLnRvcCgpLGImJmIudmFsdWUua2V5Ym9hcmQmJihhLnByZXZlbnREZWZhdWx0KCksZS4kYXBwbHkoZnVuY3Rpb24oKXtvLmRpc21pc3MoYi5rZXksImVzY2FwZSBrZXkgcHJlc3MiKX0pKSl9KSxvLm9wZW49ZnVuY3Rpb24oYSxiKXtuLmFkZChhLHtkZWZlcnJlZDpiLmRlZmVycmVkLG1vZGFsU2NvcGU6Yi5zY29wZSxiYWNrZHJvcDpiLmJhY2tkcm9wLGtleWJvYXJkOmIua2V5Ym9hcmR9KTt2YXIgZj1jLmZpbmQoImJvZHkiKS5lcSgwKSxoPWcoKTtoPj0wJiYhayYmKGw9ZS4kbmV3KCEwKSxsLmluZGV4PWgsaz1kKCI8ZGl2IG1vZGFsLWJhY2tkcm9wPjwvZGl2PiIpKGwpLGYuYXBwZW5kKGspKTt2YXIgaT1hbmd1bGFyLmVsZW1lbnQoIjxkaXYgbW9kYWwtd2luZG93PjwvZGl2PiIpO2kuYXR0cih7InRlbXBsYXRlLXVybCI6Yi53aW5kb3dUZW1wbGF0ZVVybCwid2luZG93LWNsYXNzIjpiLndpbmRvd0NsYXNzLHNpemU6Yi5zaXplLGluZGV4Om4ubGVuZ3RoKCktMSxhbmltYXRlOiJhbmltYXRlIn0pLmh0bWwoYi5jb250ZW50KTt2YXIgaj1kKGkpKGIuc2NvcGUpO24udG9wKCkudmFsdWUubW9kYWxEb21FbD1qLGYuYXBwZW5kKGopLGYuYWRkQ2xhc3MobSl9LG8uY2xvc2U9ZnVuY3Rpb24oYSxiKXt2YXIgYz1uLmdldChhKS52YWx1ZTtjJiYoYy5kZWZlcnJlZC5yZXNvbHZlKGIpLGgoYSkpfSxvLmRpc21pc3M9ZnVuY3Rpb24oYSxiKXt2YXIgYz1uLmdldChhKS52YWx1ZTtjJiYoYy5kZWZlcnJlZC5yZWplY3QoYiksaChhKSl9LG8uZGlzbWlzc0FsbD1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5nZXRUb3AoKTtiOyl0aGlzLmRpc21pc3MoYi5rZXksYSksYj10aGlzLmdldFRvcCgpfSxvLmdldFRvcD1mdW5jdGlvbigpe3JldHVybiBuLnRvcCgpfSxvfV0pLnByb3ZpZGVyKCIkbW9kYWwiLGZ1bmN0aW9uKCl7dmFyIGE9e29wdGlvbnM6e2JhY2tkcm9wOiEwLGtleWJvYXJkOiEwfSwkZ2V0OlsiJGluamVjdG9yIiwiJHJvb3RTY29wZSIsIiRxIiwiJGh0dHAiLCIkdGVtcGxhdGVDYWNoZSIsIiRjb250cm9sbGVyIiwiJG1vZGFsU3RhY2siLGZ1bmN0aW9uKGIsYyxkLGUsZixnLGgpe2Z1bmN0aW9uIGkoYSl7cmV0dXJuIGEudGVtcGxhdGU/ZC53aGVuKGEudGVtcGxhdGUpOmUuZ2V0KGEudGVtcGxhdGVVcmwse2NhY2hlOmZ9KS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBhLmRhdGF9KX1mdW5jdGlvbiBqKGEpe3ZhciBjPVtdO3JldHVybiBhbmd1bGFyLmZvckVhY2goYSxmdW5jdGlvbihhKXsoYW5ndWxhci5pc0Z1bmN0aW9uKGEpfHxhbmd1bGFyLmlzQXJyYXkoYSkpJiZjLnB1c2goZC53aGVuKGIuaW52b2tlKGEpKSl9KSxjfXZhciBrPXt9O3JldHVybiBrLm9wZW49ZnVuY3Rpb24oYil7dmFyIGU9ZC5kZWZlcigpLGY9ZC5kZWZlcigpLGs9e3Jlc3VsdDplLnByb21pc2Usb3BlbmVkOmYucHJvbWlzZSxjbG9zZTpmdW5jdGlvbihhKXtoLmNsb3NlKGssYSl9LGRpc21pc3M6ZnVuY3Rpb24oYSl7aC5kaXNtaXNzKGssYSl9fTtpZihiPWFuZ3VsYXIuZXh0ZW5kKHt9LGEub3B0aW9ucyxiKSxiLnJlc29sdmU9Yi5yZXNvbHZlfHx7fSwhYi50ZW1wbGF0ZSYmIWIudGVtcGxhdGVVcmwpdGhyb3cgbmV3IEVycm9yKCJPbmUgb2YgdGVtcGxhdGUgb3IgdGVtcGxhdGVVcmwgb3B0aW9ucyBpcyByZXF1aXJlZC4iKTt2YXIgbD1kLmFsbChbaShiKV0uY29uY2F0KGooYi5yZXNvbHZlKSkpO3JldHVybiBsLnRoZW4oZnVuY3Rpb24oYSl7dmFyIGQ9KGIuc2NvcGV8fGMpLiRuZXcoKTtkLiRjbG9zZT1rLmNsb3NlLGQuJGRpc21pc3M9ay5kaXNtaXNzO3ZhciBmLGk9e30saj0xO2IuY29udHJvbGxlciYmKGkuJHNjb3BlPWQsaS4kbW9kYWxJbnN0YW5jZT1rLGFuZ3VsYXIuZm9yRWFjaChiLnJlc29sdmUsZnVuY3Rpb24oYixjKXtpW2NdPWFbaisrXX0pLGY9ZyhiLmNvbnRyb2xsZXIsaSkpLGgub3BlbihrLHtzY29wZTpkLGRlZmVycmVkOmUsY29udGVudDphWzBdLGJhY2tkcm9wOmIuYmFja2Ryb3Asa2V5Ym9hcmQ6Yi5rZXlib2FyZCx3aW5kb3dDbGFzczpiLndpbmRvd0NsYXNzLHdpbmRvd1RlbXBsYXRlVXJsOmIud2luZG93VGVtcGxhdGVVcmwsc2l6ZTpiLnNpemV9KX0sZnVuY3Rpb24oYSl7ZS5yZWplY3QoYSl9KSxsLnRoZW4oZnVuY3Rpb24oKXtmLnJlc29sdmUoITApfSxmdW5jdGlvbigpe2YucmVqZWN0KCExKX0pLGt9LGt9XX07cmV0dXJuIGF9KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnBhZ2luYXRpb24iLFtdKS5jb250cm9sbGVyKCJQYWdpbmF0aW9uQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCIkcGFyc2UiLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLGU9eyRzZXRWaWV3VmFsdWU6YW5ndWxhci5ub29wfSxmPWIubnVtUGFnZXM/YyhiLm51bVBhZ2VzKS5hc3NpZ246YW5ndWxhci5ub29wO3RoaXMuaW5pdD1mdW5jdGlvbihmLGcpe2U9Zix0aGlzLmNvbmZpZz1nLGUuJHJlbmRlcj1mdW5jdGlvbigpe2QucmVuZGVyKCl9LGIuaXRlbXNQZXJQYWdlP2EuJHBhcmVudC4kd2F0Y2goYyhiLml0ZW1zUGVyUGFnZSksZnVuY3Rpb24oYil7ZC5pdGVtc1BlclBhZ2U9cGFyc2VJbnQoYiwxMCksYS50b3RhbFBhZ2VzPWQuY2FsY3VsYXRlVG90YWxQYWdlcygpfSk6dGhpcy5pdGVtc1BlclBhZ2U9Zy5pdGVtc1BlclBhZ2V9LHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlcz1mdW5jdGlvbigpe3ZhciBiPXRoaXMuaXRlbXNQZXJQYWdlPDE/MTpNYXRoLmNlaWwoYS50b3RhbEl0ZW1zL3RoaXMuaXRlbXNQZXJQYWdlKTtyZXR1cm4gTWF0aC5tYXgoYnx8MCwxKX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXthLnBhZ2U9cGFyc2VJbnQoZS4kdmlld1ZhbHVlLDEwKXx8MX0sYS5zZWxlY3RQYWdlPWZ1bmN0aW9uKGIpe2EucGFnZSE9PWImJmI+MCYmYjw9YS50b3RhbFBhZ2VzJiYoZS4kc2V0Vmlld1ZhbHVlKGIpLGUuJHJlbmRlcigpKX0sYS5nZXRUZXh0PWZ1bmN0aW9uKGIpe3JldHVybiBhW2IrIlRleHQiXXx8ZC5jb25maWdbYisiVGV4dCJdfSxhLm5vUHJldmlvdXM9ZnVuY3Rpb24oKXtyZXR1cm4gMT09PWEucGFnZX0sYS5ub05leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gYS5wYWdlPT09YS50b3RhbFBhZ2VzfSxhLiR3YXRjaCgidG90YWxJdGVtcyIsZnVuY3Rpb24oKXthLnRvdGFsUGFnZXM9ZC5jYWxjdWxhdGVUb3RhbFBhZ2VzKCl9KSxhLiR3YXRjaCgidG90YWxQYWdlcyIsZnVuY3Rpb24oYil7ZihhLiRwYXJlbnQsYiksYS5wYWdlPmI/YS5zZWxlY3RQYWdlKGIpOmUuJHJlbmRlcigpfSl9XSkuY29uc3RhbnQoInBhZ2luYXRpb25Db25maWciLHtpdGVtc1BlclBhZ2U6MTAsYm91bmRhcnlMaW5rczohMSxkaXJlY3Rpb25MaW5rczohMCxmaXJzdFRleHQ6IkZpcnN0IixwcmV2aW91c1RleHQ6IlByZXZpb3VzIixuZXh0VGV4dDoiTmV4dCIsbGFzdFRleHQ6Ikxhc3QiLHJvdGF0ZTohMH0pLmRpcmVjdGl2ZSgicGFnaW5hdGlvbiIsWyIkcGFyc2UiLCJwYWdpbmF0aW9uQ29uZmlnIixmdW5jdGlvbihhLGIpe3JldHVybntyZXN0cmljdDoiRUEiLHNjb3BlOnt0b3RhbEl0ZW1zOiI9IixmaXJzdFRleHQ6IkAiLHByZXZpb3VzVGV4dDoiQCIsbmV4dFRleHQ6IkAiLGxhc3RUZXh0OiJAIn0scmVxdWlyZTpbInBhZ2luYXRpb24iLCI/bmdNb2RlbCJdLGNvbnRyb2xsZXI6IlBhZ2luYXRpb25Db250cm9sbGVyIix0ZW1wbGF0ZVVybDoidGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmh0bWwiLHJlcGxhY2U6ITAsbGluazpmdW5jdGlvbihjLGQsZSxmKXtmdW5jdGlvbiBnKGEsYixjKXtyZXR1cm57bnVtYmVyOmEsdGV4dDpiLGFjdGl2ZTpjfX1mdW5jdGlvbiBoKGEsYil7dmFyIGM9W10sZD0xLGU9YixmPWFuZ3VsYXIuaXNEZWZpbmVkKGspJiZiPms7ZiYmKGw/KGQ9TWF0aC5tYXgoYS1NYXRoLmZsb29yKGsvMiksMSksZT1kK2stMSxlPmImJihlPWIsZD1lLWsrMSkpOihkPShNYXRoLmNlaWwoYS9rKS0xKSprKzEsZT1NYXRoLm1pbihkK2stMSxiKSkpO2Zvcih2YXIgaD1kO2U+PWg7aCsrKXt2YXIgaT1nKGgsaCxoPT09YSk7Yy5wdXNoKGkpfWlmKGYmJiFsKXtpZihkPjEpe3ZhciBqPWcoZC0xLCIuLi4iLCExKTtjLnVuc2hpZnQoail9aWYoYj5lKXt2YXIgbT1nKGUrMSwiLi4uIiwhMSk7Yy5wdXNoKG0pfX1yZXR1cm4gY312YXIgaT1mWzBdLGo9ZlsxXTtpZihqKXt2YXIgaz1hbmd1bGFyLmlzRGVmaW5lZChlLm1heFNpemUpP2MuJHBhcmVudC4kZXZhbChlLm1heFNpemUpOmIubWF4U2l6ZSxsPWFuZ3VsYXIuaXNEZWZpbmVkKGUucm90YXRlKT9jLiRwYXJlbnQuJGV2YWwoZS5yb3RhdGUpOmIucm90YXRlO2MuYm91bmRhcnlMaW5rcz1hbmd1bGFyLmlzRGVmaW5lZChlLmJvdW5kYXJ5TGlua3MpP2MuJHBhcmVudC4kZXZhbChlLmJvdW5kYXJ5TGlua3MpOmIuYm91bmRhcnlMaW5rcyxjLmRpcmVjdGlvbkxpbmtzPWFuZ3VsYXIuaXNEZWZpbmVkKGUuZGlyZWN0aW9uTGlua3MpP2MuJHBhcmVudC4kZXZhbChlLmRpcmVjdGlvbkxpbmtzKTpiLmRpcmVjdGlvbkxpbmtzLGkuaW5pdChqLGIpLGUubWF4U2l6ZSYmYy4kcGFyZW50LiR3YXRjaChhKGUubWF4U2l6ZSksZnVuY3Rpb24oYSl7az1wYXJzZUludChhLDEwKSxpLnJlbmRlcigpfSk7dmFyIG09aS5yZW5kZXI7aS5yZW5kZXI9ZnVuY3Rpb24oKXttKCksYy5wYWdlPjAmJmMucGFnZTw9Yy50b3RhbFBhZ2VzJiYoYy5wYWdlcz1oKGMucGFnZSxjLnRvdGFsUGFnZXMpKX19fX19XSkuY29uc3RhbnQoInBhZ2VyQ29uZmlnIix7aXRlbXNQZXJQYWdlOjEwLHByZXZpb3VzVGV4dDoiwqsgUHJldmlvdXMiLG5leHRUZXh0OiJOZXh0IMK7IixhbGlnbjohMH0pLmRpcmVjdGl2ZSgicGFnZXIiLFsicGFnZXJDb25maWciLGZ1bmN0aW9uKGEpe3JldHVybntyZXN0cmljdDoiRUEiLHNjb3BlOnt0b3RhbEl0ZW1zOiI9IixwcmV2aW91c1RleHQ6IkAiLG5leHRUZXh0OiJAIn0scmVxdWlyZTpbInBhZ2VyIiwiP25nTW9kZWwiXSxjb250cm9sbGVyOiJQYWdpbmF0aW9uQ29udHJvbGxlciIsdGVtcGxhdGVVcmw6InRlbXBsYXRlL3BhZ2luYXRpb24vcGFnZXIuaHRtbCIscmVwbGFjZTohMCxsaW5rOmZ1bmN0aW9uKGIsYyxkLGUpe3ZhciBmPWVbMF0sZz1lWzFdO2cmJihiLmFsaWduPWFuZ3VsYXIuaXNEZWZpbmVkKGQuYWxpZ24pP2IuJHBhcmVudC4kZXZhbChkLmFsaWduKTphLmFsaWduLGYuaW5pdChnLGEpKX19fV0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAudG9vbHRpcCIsWyJ1aS5ib290c3RyYXAucG9zaXRpb24iLCJ1aS5ib290c3RyYXAuYmluZEh0bWwiXSkucHJvdmlkZXIoIiR0b29sdGlwIixmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7dmFyIGI9L1tBLVpdL2csYz0iLSI7CityZXR1cm4gYS5yZXBsYWNlKGIsZnVuY3Rpb24oYSxiKXtyZXR1cm4oYj9jOiIiKSthLnRvTG93ZXJDYXNlKCl9KX12YXIgYj17cGxhY2VtZW50OiJ0b3AiLGFuaW1hdGlvbjohMCxwb3B1cERlbGF5OjB9LGM9e21vdXNlZW50ZXI6Im1vdXNlbGVhdmUiLGNsaWNrOiJjbGljayIsZm9jdXM6ImJsdXIifSxkPXt9O3RoaXMub3B0aW9ucz1mdW5jdGlvbihhKXthbmd1bGFyLmV4dGVuZChkLGEpfSx0aGlzLnNldFRyaWdnZXJzPWZ1bmN0aW9uKGEpe2FuZ3VsYXIuZXh0ZW5kKGMsYSl9LHRoaXMuJGdldD1bIiR3aW5kb3ciLCIkY29tcGlsZSIsIiR0aW1lb3V0IiwiJHBhcnNlIiwiJGRvY3VtZW50IiwiJHBvc2l0aW9uIiwiJGludGVycG9sYXRlIixmdW5jdGlvbihlLGYsZyxoLGksaixrKXtyZXR1cm4gZnVuY3Rpb24oZSxsLG0pe2Z1bmN0aW9uIG4oYSl7dmFyIGI9YXx8by50cmlnZ2VyfHxtLGQ9Y1tiXXx8YjtyZXR1cm57c2hvdzpiLGhpZGU6ZH19dmFyIG89YW5ndWxhci5leHRlbmQoe30sYixkKSxwPWEoZSkscT1rLnN0YXJ0U3ltYm9sKCkscj1rLmVuZFN5bWJvbCgpLHM9IjxkaXYgIitwKyctcG9wdXAgdGl0bGU9IicrcSsidHRfdGl0bGUiK3IrJyIgY29udGVudD0iJytxKyJ0dF9jb250ZW50IityKyciIHBsYWNlbWVudD0iJytxKyJ0dF9wbGFjZW1lbnQiK3IrJyIgYW5pbWF0aW9uPSJ0dF9hbmltYXRpb24iIGlzLW9wZW49InR0X2lzT3BlbiI+PC9kaXY+JztyZXR1cm57cmVzdHJpY3Q6IkVBIixzY29wZTohMCxjb21waWxlOmZ1bmN0aW9uKCl7dmFyIGE9ZihzKTtyZXR1cm4gZnVuY3Rpb24oYixjLGQpe2Z1bmN0aW9uIGYoKXtiLnR0X2lzT3Blbj9tKCk6aygpfWZ1bmN0aW9uIGsoKXsoIXl8fGIuJGV2YWwoZFtsKyJFbmFibGUiXSkpJiYoYi50dF9wb3B1cERlbGF5P3Z8fCh2PWcocCxiLnR0X3BvcHVwRGVsYXksITEpLHYudGhlbihmdW5jdGlvbihhKXthKCl9KSk6cCgpKCkpfWZ1bmN0aW9uIG0oKXtiLiRhcHBseShmdW5jdGlvbigpe3EoKX0pfWZ1bmN0aW9uIHAoKXtyZXR1cm4gdj1udWxsLHUmJihnLmNhbmNlbCh1KSx1PW51bGwpLGIudHRfY29udGVudD8ocigpLHQuY3NzKHt0b3A6MCxsZWZ0OjAsZGlzcGxheToiYmxvY2sifSksdz9pLmZpbmQoImJvZHkiKS5hcHBlbmQodCk6Yy5hZnRlcih0KSx6KCksYi50dF9pc09wZW49ITAsYi4kZGlnZXN0KCkseik6YW5ndWxhci5ub29wfWZ1bmN0aW9uIHEoKXtiLnR0X2lzT3Blbj0hMSxnLmNhbmNlbCh2KSx2PW51bGwsYi50dF9hbmltYXRpb24/dXx8KHU9ZyhzLDUwMCkpOnMoKX1mdW5jdGlvbiByKCl7dCYmcygpLHQ9YShiLGZ1bmN0aW9uKCl7fSksYi4kZGlnZXN0KCl9ZnVuY3Rpb24gcygpe3U9bnVsbCx0JiYodC5yZW1vdmUoKSx0PW51bGwpfXZhciB0LHUsdix3PWFuZ3VsYXIuaXNEZWZpbmVkKG8uYXBwZW5kVG9Cb2R5KT9vLmFwcGVuZFRvQm9keTohMSx4PW4odm9pZCAwKSx5PWFuZ3VsYXIuaXNEZWZpbmVkKGRbbCsiRW5hYmxlIl0pLHo9ZnVuY3Rpb24oKXt2YXIgYT1qLnBvc2l0aW9uRWxlbWVudHMoYyx0LGIudHRfcGxhY2VtZW50LHcpO2EudG9wKz0icHgiLGEubGVmdCs9InB4Iix0LmNzcyhhKX07Yi50dF9pc09wZW49ITEsZC4kb2JzZXJ2ZShlLGZ1bmN0aW9uKGEpe2IudHRfY29udGVudD1hLCFhJiZiLnR0X2lzT3BlbiYmcSgpfSksZC4kb2JzZXJ2ZShsKyJUaXRsZSIsZnVuY3Rpb24oYSl7Yi50dF90aXRsZT1hfSksZC4kb2JzZXJ2ZShsKyJQbGFjZW1lbnQiLGZ1bmN0aW9uKGEpe2IudHRfcGxhY2VtZW50PWFuZ3VsYXIuaXNEZWZpbmVkKGEpP2E6by5wbGFjZW1lbnR9KSxkLiRvYnNlcnZlKGwrIlBvcHVwRGVsYXkiLGZ1bmN0aW9uKGEpe3ZhciBjPXBhcnNlSW50KGEsMTApO2IudHRfcG9wdXBEZWxheT1pc05hTihjKT9vLnBvcHVwRGVsYXk6Y30pO3ZhciBBPWZ1bmN0aW9uKCl7Yy51bmJpbmQoeC5zaG93LGspLGMudW5iaW5kKHguaGlkZSxtKX07ZC4kb2JzZXJ2ZShsKyJUcmlnZ2VyIixmdW5jdGlvbihhKXtBKCkseD1uKGEpLHguc2hvdz09PXguaGlkZT9jLmJpbmQoeC5zaG93LGYpOihjLmJpbmQoeC5zaG93LGspLGMuYmluZCh4LmhpZGUsbSkpfSk7dmFyIEI9Yi4kZXZhbChkW2wrIkFuaW1hdGlvbiJdKTtiLnR0X2FuaW1hdGlvbj1hbmd1bGFyLmlzRGVmaW5lZChCKT8hIUI6by5hbmltYXRpb24sZC4kb2JzZXJ2ZShsKyJBcHBlbmRUb0JvZHkiLGZ1bmN0aW9uKGEpe3c9YW5ndWxhci5pc0RlZmluZWQoYSk/aChhKShiKTp3fSksdyYmYi4kb24oIiRsb2NhdGlvbkNoYW5nZVN1Y2Nlc3MiLGZ1bmN0aW9uKCl7Yi50dF9pc09wZW4mJnEoKX0pLGIuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtnLmNhbmNlbCh1KSxnLmNhbmNlbCh2KSxBKCkscygpfSl9fX19fV19KS5kaXJlY3RpdmUoInRvb2x0aXBQb3B1cCIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHNjb3BlOntjb250ZW50OiJAIixwbGFjZW1lbnQ6IkAiLGFuaW1hdGlvbjoiJiIsaXNPcGVuOiImIn0sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1wb3B1cC5odG1sIn19KS5kaXJlY3RpdmUoInRvb2x0aXAiLFsiJHRvb2x0aXAiLGZ1bmN0aW9uKGEpe3JldHVybiBhKCJ0b29sdGlwIiwidG9vbHRpcCIsIm1vdXNlZW50ZXIiKX1dKS5kaXJlY3RpdmUoInRvb2x0aXBIdG1sVW5zYWZlUG9wdXAiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCxzY29wZTp7Y29udGVudDoiQCIscGxhY2VtZW50OiJAIixhbmltYXRpb246IiYiLGlzT3BlbjoiJiJ9LHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtaHRtbC11bnNhZmUtcG9wdXAuaHRtbCJ9fSkuZGlyZWN0aXZlKCJ0b29sdGlwSHRtbFVuc2FmZSIsWyIkdG9vbHRpcCIsZnVuY3Rpb24oYSl7cmV0dXJuIGEoInRvb2x0aXBIdG1sVW5zYWZlIiwidG9vbHRpcCIsIm1vdXNlZW50ZXIiKX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnBvcG92ZXIiLFsidWkuYm9vdHN0cmFwLnRvb2x0aXAiXSkuZGlyZWN0aXZlKCJwb3BvdmVyUG9wdXAiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCxzY29wZTp7dGl0bGU6IkAiLGNvbnRlbnQ6IkAiLHBsYWNlbWVudDoiQCIsYW5pbWF0aW9uOiImIixpc09wZW46IiYifSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvcG9wb3Zlci9wb3BvdmVyLmh0bWwifX0pLmRpcmVjdGl2ZSgicG9wb3ZlciIsWyIkdG9vbHRpcCIsZnVuY3Rpb24oYSl7cmV0dXJuIGEoInBvcG92ZXIiLCJwb3BvdmVyIiwiY2xpY2siKX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnByb2dyZXNzYmFyIixbXSkuY29uc3RhbnQoInByb2dyZXNzQ29uZmlnIix7YW5pbWF0ZTohMCxtYXg6MTAwfSkuY29udHJvbGxlcigiUHJvZ3Jlc3NDb250cm9sbGVyIixbIiRzY29wZSIsIiRhdHRycyIsInByb2dyZXNzQ29uZmlnIixmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcyxlPWFuZ3VsYXIuaXNEZWZpbmVkKGIuYW5pbWF0ZSk/YS4kcGFyZW50LiRldmFsKGIuYW5pbWF0ZSk6Yy5hbmltYXRlO3RoaXMuYmFycz1bXSxhLm1heD1hbmd1bGFyLmlzRGVmaW5lZChiLm1heCk/YS4kcGFyZW50LiRldmFsKGIubWF4KTpjLm1heCx0aGlzLmFkZEJhcj1mdW5jdGlvbihiLGMpe2V8fGMuY3NzKHt0cmFuc2l0aW9uOiJub25lIn0pLHRoaXMuYmFycy5wdXNoKGIpLGIuJHdhdGNoKCJ2YWx1ZSIsZnVuY3Rpb24oYyl7Yi5wZXJjZW50PSsoMTAwKmMvYS5tYXgpLnRvRml4ZWQoMil9KSxiLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7Yz1udWxsLGQucmVtb3ZlQmFyKGIpfSl9LHRoaXMucmVtb3ZlQmFyPWZ1bmN0aW9uKGEpe3RoaXMuYmFycy5zcGxpY2UodGhpcy5iYXJzLmluZGV4T2YoYSksMSl9fV0pLmRpcmVjdGl2ZSgicHJvZ3Jlc3MiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0cmFuc2NsdWRlOiEwLGNvbnRyb2xsZXI6IlByb2dyZXNzQ29udHJvbGxlciIscmVxdWlyZToicHJvZ3Jlc3MiLHNjb3BlOnt9LHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzcy5odG1sIn19KS5kaXJlY3RpdmUoImJhciIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRyYW5zY2x1ZGU6ITAscmVxdWlyZToiXnByb2dyZXNzIixzY29wZTp7dmFsdWU6Ij0iLHR5cGU6IkAifSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvYmFyLmh0bWwiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7ZC5hZGRCYXIoYSxiKX19fSkuZGlyZWN0aXZlKCJwcm9ncmVzc2JhciIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRyYW5zY2x1ZGU6ITAsY29udHJvbGxlcjoiUHJvZ3Jlc3NDb250cm9sbGVyIixzY29wZTp7dmFsdWU6Ij0iLHR5cGU6IkAifSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIuaHRtbCIsbGluazpmdW5jdGlvbihhLGIsYyxkKXtkLmFkZEJhcihhLGFuZ3VsYXIuZWxlbWVudChiLmNoaWxkcmVuKClbMF0pKX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5yYXRpbmciLFtdKS5jb25zdGFudCgicmF0aW5nQ29uZmlnIix7bWF4OjUsc3RhdGVPbjpudWxsLHN0YXRlT2ZmOm51bGx9KS5jb250cm9sbGVyKCJSYXRpbmdDb250cm9sbGVyIixbIiRzY29wZSIsIiRhdHRycyIsInJhdGluZ0NvbmZpZyIsZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXskc2V0Vmlld1ZhbHVlOmFuZ3VsYXIubm9vcH07dGhpcy5pbml0PWZ1bmN0aW9uKGUpe2Q9ZSxkLiRyZW5kZXI9dGhpcy5yZW5kZXIsdGhpcy5zdGF0ZU9uPWFuZ3VsYXIuaXNEZWZpbmVkKGIuc3RhdGVPbik/YS4kcGFyZW50LiRldmFsKGIuc3RhdGVPbik6Yy5zdGF0ZU9uLHRoaXMuc3RhdGVPZmY9YW5ndWxhci5pc0RlZmluZWQoYi5zdGF0ZU9mZik/YS4kcGFyZW50LiRldmFsKGIuc3RhdGVPZmYpOmMuc3RhdGVPZmY7dmFyIGY9YW5ndWxhci5pc0RlZmluZWQoYi5yYXRpbmdTdGF0ZXMpP2EuJHBhcmVudC4kZXZhbChiLnJhdGluZ1N0YXRlcyk6bmV3IEFycmF5KGFuZ3VsYXIuaXNEZWZpbmVkKGIubWF4KT9hLiRwYXJlbnQuJGV2YWwoYi5tYXgpOmMubWF4KTthLnJhbmdlPXRoaXMuYnVpbGRUZW1wbGF0ZU9iamVjdHMoZil9LHRoaXMuYnVpbGRUZW1wbGF0ZU9iamVjdHM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aDtjPmI7YisrKWFbYl09YW5ndWxhci5leHRlbmQoe2luZGV4OmJ9LHtzdGF0ZU9uOnRoaXMuc3RhdGVPbixzdGF0ZU9mZjp0aGlzLnN0YXRlT2ZmfSxhW2JdKTtyZXR1cm4gYX0sYS5yYXRlPWZ1bmN0aW9uKGIpeyFhLnJlYWRvbmx5JiZiPj0wJiZiPD1hLnJhbmdlLmxlbmd0aCYmKGQuJHNldFZpZXdWYWx1ZShiKSxkLiRyZW5kZXIoKSl9LGEuZW50ZXI9ZnVuY3Rpb24oYil7YS5yZWFkb25seXx8KGEudmFsdWU9YiksYS5vbkhvdmVyKHt2YWx1ZTpifSl9LGEucmVzZXQ9ZnVuY3Rpb24oKXthLnZhbHVlPWQuJHZpZXdWYWx1ZSxhLm9uTGVhdmUoKX0sYS5vbktleWRvd249ZnVuY3Rpb24oYil7LygzN3wzOHwzOXw0MCkvLnRlc3QoYi53aGljaCkmJihiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKSxhLnJhdGUoYS52YWx1ZSsoMzg9PT1iLndoaWNofHwzOT09PWIud2hpY2g/MTotMSkpKX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXthLnZhbHVlPWQuJHZpZXdWYWx1ZX19XSkuZGlyZWN0aXZlKCJyYXRpbmciLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVxdWlyZTpbInJhdGluZyIsIm5nTW9kZWwiXSxzY29wZTp7cmVhZG9ubHk6Ij0/IixvbkhvdmVyOiImIixvbkxlYXZlOiImIn0sY29udHJvbGxlcjoiUmF0aW5nQ29udHJvbGxlciIsdGVtcGxhdGVVcmw6InRlbXBsYXRlL3JhdGluZy9yYXRpbmcuaHRtbCIscmVwbGFjZTohMCxsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWRbMF0sZj1kWzFdO2YmJmUuaW5pdChmKX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC50YWJzIixbXSkuY29udHJvbGxlcigiVGFic2V0Q29udHJvbGxlciIsWyIkc2NvcGUiLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLnRhYnM9YS50YWJzPVtdO2Iuc2VsZWN0PWZ1bmN0aW9uKGEpe2FuZ3VsYXIuZm9yRWFjaChjLGZ1bmN0aW9uKGIpe2IuYWN0aXZlJiZiIT09YSYmKGIuYWN0aXZlPSExLGIub25EZXNlbGVjdCgpKX0pLGEuYWN0aXZlPSEwLGEub25TZWxlY3QoKX0sYi5hZGRUYWI9ZnVuY3Rpb24oYSl7Yy5wdXNoKGEpLDE9PT1jLmxlbmd0aD9hLmFjdGl2ZT0hMDphLmFjdGl2ZSYmYi5zZWxlY3QoYSl9LGIucmVtb3ZlVGFiPWZ1bmN0aW9uKGEpe3ZhciBkPWMuaW5kZXhPZihhKTtpZihhLmFjdGl2ZSYmYy5sZW5ndGg+MSl7dmFyIGU9ZD09Yy5sZW5ndGgtMT9kLTE6ZCsxO2Iuc2VsZWN0KGNbZV0pfWMuc3BsaWNlKGQsMSl9fV0pLmRpcmVjdGl2ZSgidGFic2V0IixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHRyYW5zY2x1ZGU6ITAscmVwbGFjZTohMCxzY29wZTp7dHlwZToiQCJ9LGNvbnRyb2xsZXI6IlRhYnNldENvbnRyb2xsZXIiLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS90YWJzL3RhYnNldC5odG1sIixsaW5rOmZ1bmN0aW9uKGEsYixjKXthLnZlcnRpY2FsPWFuZ3VsYXIuaXNEZWZpbmVkKGMudmVydGljYWwpP2EuJHBhcmVudC4kZXZhbChjLnZlcnRpY2FsKTohMSxhLmp1c3RpZmllZD1hbmd1bGFyLmlzRGVmaW5lZChjLmp1c3RpZmllZCk/YS4kcGFyZW50LiRldmFsKGMuanVzdGlmaWVkKTohMX19fSkuZGlyZWN0aXZlKCJ0YWIiLFsiJHBhcnNlIixmdW5jdGlvbihhKXtyZXR1cm57cmVxdWlyZToiXnRhYnNldCIscmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS90YWJzL3RhYi5odG1sIix0cmFuc2NsdWRlOiEwLHNjb3BlOnthY3RpdmU6Ij0/IixoZWFkaW5nOiJAIixvblNlbGVjdDoiJnNlbGVjdCIsb25EZXNlbGVjdDoiJmRlc2VsZWN0In0sY29udHJvbGxlcjpmdW5jdGlvbigpe30sY29tcGlsZTpmdW5jdGlvbihiLGMsZCl7cmV0dXJuIGZ1bmN0aW9uKGIsYyxlLGYpe2IuJHdhdGNoKCJhY3RpdmUiLGZ1bmN0aW9uKGEpe2EmJmYuc2VsZWN0KGIpfSksYi5kaXNhYmxlZD0hMSxlLmRpc2FibGVkJiZiLiRwYXJlbnQuJHdhdGNoKGEoZS5kaXNhYmxlZCksZnVuY3Rpb24oYSl7Yi5kaXNhYmxlZD0hIWF9KSxiLnNlbGVjdD1mdW5jdGlvbigpe2IuZGlzYWJsZWR8fChiLmFjdGl2ZT0hMCl9LGYuYWRkVGFiKGIpLGIuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtmLnJlbW92ZVRhYihiKX0pLGIuJHRyYW5zY2x1ZGVGbj1kfX19fV0pLmRpcmVjdGl2ZSgidGFiSGVhZGluZ1RyYW5zY2x1ZGUiLFtmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiQSIscmVxdWlyZToiXnRhYiIsbGluazpmdW5jdGlvbihhLGIpe2EuJHdhdGNoKCJoZWFkaW5nRWxlbWVudCIsZnVuY3Rpb24oYSl7YSYmKGIuaHRtbCgiIiksYi5hcHBlbmQoYSkpfSl9fX1dKS5kaXJlY3RpdmUoInRhYkNvbnRlbnRUcmFuc2NsdWRlIixmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7cmV0dXJuIGEudGFnTmFtZSYmKGEuaGFzQXR0cmlidXRlKCJ0YWItaGVhZGluZyIpfHxhLmhhc0F0dHJpYnV0ZSgiZGF0YS10YWItaGVhZGluZyIpfHwidGFiLWhlYWRpbmciPT09YS50YWdOYW1lLnRvTG93ZXJDYXNlKCl8fCJkYXRhLXRhYi1oZWFkaW5nIj09PWEudGFnTmFtZS50b0xvd2VyQ2FzZSgpKX1yZXR1cm57cmVzdHJpY3Q6IkEiLHJlcXVpcmU6Il50YWJzZXQiLGxpbms6ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWIuJGV2YWwoZC50YWJDb250ZW50VHJhbnNjbHVkZSk7ZS4kdHJhbnNjbHVkZUZuKGUuJHBhcmVudCxmdW5jdGlvbihiKXthbmd1bGFyLmZvckVhY2goYixmdW5jdGlvbihiKXthKGIpP2UuaGVhZGluZ0VsZW1lbnQ9YjpjLmFwcGVuZChiKX0pfSl9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAudGltZXBpY2tlciIsW10pLmNvbnN0YW50KCJ0aW1lcGlja2VyQ29uZmlnIix7aG91clN0ZXA6MSxtaW51dGVTdGVwOjEsc2hvd01lcmlkaWFuOiEwLG1lcmlkaWFuczpudWxsLHJlYWRvbmx5SW5wdXQ6ITEsbW91c2V3aGVlbDohMH0pLmNvbnRyb2xsZXIoIlRpbWVwaWNrZXJDb250cm9sbGVyIixbIiRzY29wZSIsIiRhdHRycyIsIiRwYXJzZSIsIiRsb2ciLCIkbG9jYWxlIiwidGltZXBpY2tlckNvbmZpZyIsZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2Z1bmN0aW9uIGcoKXt2YXIgYj1wYXJzZUludChhLmhvdXJzLDEwKSxjPWEuc2hvd01lcmlkaWFuP2I+MCYmMTM+YjpiPj0wJiYyND5iO3JldHVybiBjPyhhLnNob3dNZXJpZGlhbiYmKDEyPT09YiYmKGI9MCksYS5tZXJpZGlhbj09PXBbMV0mJihiKz0xMikpLGIpOnZvaWQgMH1mdW5jdGlvbiBoKCl7dmFyIGI9cGFyc2VJbnQoYS5taW51dGVzLDEwKTtyZXR1cm4gYj49MCYmNjA+Yj9iOnZvaWQgMH1mdW5jdGlvbiBpKGEpe3JldHVybiBhbmd1bGFyLmlzRGVmaW5lZChhKSYmYS50b1N0cmluZygpLmxlbmd0aDwyPyIwIithOmF9ZnVuY3Rpb24gaihhKXtrKCksby4kc2V0Vmlld1ZhbHVlKG5ldyBEYXRlKG4pKSxsKGEpfWZ1bmN0aW9uIGsoKXtvLiRzZXRWYWxpZGl0eSgidGltZSIsITApLGEuaW52YWxpZEhvdXJzPSExLGEuaW52YWxpZE1pbnV0ZXM9ITF9ZnVuY3Rpb24gbChiKXt2YXIgYz1uLmdldEhvdXJzKCksZD1uLmdldE1pbnV0ZXMoKTthLnNob3dNZXJpZGlhbiYmKGM9MD09PWN8fDEyPT09Yz8xMjpjJTEyKSxhLmhvdXJzPSJoIj09PWI/YzppKGMpLGEubWludXRlcz0ibSI9PT1iP2Q6aShkKSxhLm1lcmlkaWFuPW4uZ2V0SG91cnMoKTwxMj9wWzBdOnBbMV19ZnVuY3Rpb24gbShhKXt2YXIgYj1uZXcgRGF0ZShuLmdldFRpbWUoKSs2ZTQqYSk7bi5zZXRIb3VycyhiLmdldEhvdXJzKCksYi5nZXRNaW51dGVzKCkpLGooKX12YXIgbj1uZXcgRGF0ZSxvPXskc2V0Vmlld1ZhbHVlOmFuZ3VsYXIubm9vcH0scD1hbmd1bGFyLmlzRGVmaW5lZChiLm1lcmlkaWFucyk/YS4kcGFyZW50LiRldmFsKGIubWVyaWRpYW5zKTpmLm1lcmlkaWFuc3x8ZS5EQVRFVElNRV9GT1JNQVRTLkFNUE1TO3RoaXMuaW5pdD1mdW5jdGlvbihjLGQpe289YyxvLiRyZW5kZXI9dGhpcy5yZW5kZXI7dmFyIGU9ZC5lcSgwKSxnPWQuZXEoMSksaD1hbmd1bGFyLmlzRGVmaW5lZChiLm1vdXNld2hlZWwpP2EuJHBhcmVudC4kZXZhbChiLm1vdXNld2hlZWwpOmYubW91c2V3aGVlbDtoJiZ0aGlzLnNldHVwTW91c2V3aGVlbEV2ZW50cyhlLGcpLGEucmVhZG9ubHlJbnB1dD1hbmd1bGFyLmlzRGVmaW5lZChiLnJlYWRvbmx5SW5wdXQpP2EuJHBhcmVudC4kZXZhbChiLnJlYWRvbmx5SW5wdXQpOmYucmVhZG9ubHlJbnB1dCx0aGlzLnNldHVwSW5wdXRFdmVudHMoZSxnKX07dmFyIHE9Zi5ob3VyU3RlcDtiLmhvdXJTdGVwJiZhLiRwYXJlbnQuJHdhdGNoKGMoYi5ob3VyU3RlcCksZnVuY3Rpb24oYSl7cT1wYXJzZUludChhLDEwKX0pO3ZhciByPWYubWludXRlU3RlcDtiLm1pbnV0ZVN0ZXAmJmEuJHBhcmVudC4kd2F0Y2goYyhiLm1pbnV0ZVN0ZXApLGZ1bmN0aW9uKGEpe3I9cGFyc2VJbnQoYSwxMCl9KSxhLnNob3dNZXJpZGlhbj1mLnNob3dNZXJpZGlhbixiLnNob3dNZXJpZGlhbiYmYS4kcGFyZW50LiR3YXRjaChjKGIuc2hvd01lcmlkaWFuKSxmdW5jdGlvbihiKXtpZihhLnNob3dNZXJpZGlhbj0hIWIsby4kZXJyb3IudGltZSl7dmFyIGM9ZygpLGQ9aCgpO2FuZ3VsYXIuaXNEZWZpbmVkKGMpJiZhbmd1bGFyLmlzRGVmaW5lZChkKSYmKG4uc2V0SG91cnMoYyksaigpKX1lbHNlIGwoKX0pLHRoaXMuc2V0dXBNb3VzZXdoZWVsRXZlbnRzPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9ZnVuY3Rpb24oYSl7YS5vcmlnaW5hbEV2ZW50JiYoYT1hLm9yaWdpbmFsRXZlbnQpO3ZhciBiPWEud2hlZWxEZWx0YT9hLndoZWVsRGVsdGE6LWEuZGVsdGFZO3JldHVybiBhLmRldGFpbHx8Yj4wfTtiLmJpbmQoIm1vdXNld2hlZWwgd2hlZWwiLGZ1bmN0aW9uKGIpe2EuJGFwcGx5KGQoYik/YS5pbmNyZW1lbnRIb3VycygpOmEuZGVjcmVtZW50SG91cnMoKSksYi5wcmV2ZW50RGVmYXVsdCgpfSksYy5iaW5kKCJtb3VzZXdoZWVsIHdoZWVsIixmdW5jdGlvbihiKXthLiRhcHBseShkKGIpP2EuaW5jcmVtZW50TWludXRlcygpOmEuZGVjcmVtZW50TWludXRlcygpKSxiLnByZXZlbnREZWZhdWx0KCl9KX0sdGhpcy5zZXR1cElucHV0RXZlbnRzPWZ1bmN0aW9uKGIsYyl7aWYoYS5yZWFkb25seUlucHV0KXJldHVybiBhLnVwZGF0ZUhvdXJzPWFuZ3VsYXIubm9vcCx2b2lkKGEudXBkYXRlTWludXRlcz1hbmd1bGFyLm5vb3ApO3ZhciBkPWZ1bmN0aW9uKGIsYyl7by4kc2V0Vmlld1ZhbHVlKG51bGwpLG8uJHNldFZhbGlkaXR5KCJ0aW1lIiwhMSksYW5ndWxhci5pc0RlZmluZWQoYikmJihhLmludmFsaWRIb3Vycz1iKSxhbmd1bGFyLmlzRGVmaW5lZChjKSYmKGEuaW52YWxpZE1pbnV0ZXM9Yyl9O2EudXBkYXRlSG91cnM9ZnVuY3Rpb24oKXt2YXIgYT1nKCk7YW5ndWxhci5pc0RlZmluZWQoYSk/KG4uc2V0SG91cnMoYSksaigiaCIpKTpkKCEwKX0sYi5iaW5kKCJibHVyIixmdW5jdGlvbigpeyFhLmludmFsaWRIb3VycyYmYS5ob3VyczwxMCYmYS4kYXBwbHkoZnVuY3Rpb24oKXthLmhvdXJzPWkoYS5ob3Vycyl9KX0pLGEudXBkYXRlTWludXRlcz1mdW5jdGlvbigpe3ZhciBhPWgoKTthbmd1bGFyLmlzRGVmaW5lZChhKT8obi5zZXRNaW51dGVzKGEpLGooIm0iKSk6ZCh2b2lkIDAsITApfSxjLmJpbmQoImJsdXIiLGZ1bmN0aW9uKCl7IWEuaW52YWxpZE1pbnV0ZXMmJmEubWludXRlczwxMCYmYS4kYXBwbHkoZnVuY3Rpb24oKXthLm1pbnV0ZXM9aShhLm1pbnV0ZXMpfSl9KX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgYT1vLiRtb2RlbFZhbHVlP25ldyBEYXRlKG8uJG1vZGVsVmFsdWUpOm51bGw7aXNOYU4oYSk/KG8uJHNldFZhbGlkaXR5KCJ0aW1lIiwhMSksZC5lcnJvcignVGltZXBpY2tlciBkaXJlY3RpdmU6ICJuZy1tb2RlbCIgdmFsdWUgbXVzdCBiZSBhIERhdGUgb2JqZWN0LCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgMDEuMDEuMTk3MCBvciBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4gUkZDMjgyMiBvciBJU08gODYwMSBkYXRlLicpKTooYSYmKG49YSksaygpLGwoKSl9LGEuaW5jcmVtZW50SG91cnM9ZnVuY3Rpb24oKXttKDYwKnEpfSxhLmRlY3JlbWVudEhvdXJzPWZ1bmN0aW9uKCl7bSg2MCotcSl9LGEuaW5jcmVtZW50TWludXRlcz1mdW5jdGlvbigpe20ocil9LGEuZGVjcmVtZW50TWludXRlcz1mdW5jdGlvbigpe20oLXIpfSxhLnRvZ2dsZU1lcmlkaWFuPWZ1bmN0aW9uKCl7bSg3MjAqKG4uZ2V0SG91cnMoKTwxMj8xOi0xKSl9fV0pLmRpcmVjdGl2ZSgidGltZXBpY2tlciIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXF1aXJlOlsidGltZXBpY2tlciIsIj9ebmdNb2RlbCJdLGNvbnRyb2xsZXI6IlRpbWVwaWNrZXJDb250cm9sbGVyIixyZXBsYWNlOiEwLHNjb3BlOnt9LHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS90aW1lcGlja2VyL3RpbWVwaWNrZXIuaHRtbCIsbGluazpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1kWzBdLGY9ZFsxXTtmJiZlLmluaXQoZixiLmZpbmQoImlucHV0IikpfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnR5cGVhaGVhZCIsWyJ1aS5ib290c3RyYXAucG9zaXRpb24iLCJ1aS5ib290c3RyYXAuYmluZEh0bWwiXSkuZmFjdG9yeSgidHlwZWFoZWFkUGFyc2VyIixbIiRwYXJzZSIsZnVuY3Rpb24oYSl7dmFyIGI9L15ccyooLio/KSg/OlxzK2FzXHMrKC4qPykpP1xzK2ZvclxzKyg/OihbXCRcd11bXCRcd1xkXSopKVxzK2luXHMrKC4qKSQvO3JldHVybntwYXJzZTpmdW5jdGlvbihjKXt2YXIgZD1jLm1hdGNoKGIpO2lmKCFkKXRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdHlwZWFoZWFkIHNwZWNpZmljYXRpb24gaW4gZm9ybSBvZiAiX21vZGVsVmFsdWVfIChhcyBfbGFiZWxfKT8gZm9yIF9pdGVtXyBpbiBfY29sbGVjdGlvbl8iIGJ1dCBnb3QgIicrYysnIi4nKTtyZXR1cm57aXRlbU5hbWU6ZFszXSxzb3VyY2U6YShkWzRdKSx2aWV3TWFwcGVyOmEoZFsyXXx8ZFsxXSksbW9kZWxNYXBwZXI6YShkWzFdKX19fX1dKS5kaXJlY3RpdmUoInR5cGVhaGVhZCIsWyIkY29tcGlsZSIsIiRwYXJzZSIsIiRxIiwiJHRpbWVvdXQiLCIkZG9jdW1lbnQiLCIkcG9zaXRpb24iLCJ0eXBlYWhlYWRQYXJzZXIiLGZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe3ZhciBoPVs5LDEzLDI3LDM4LDQwXTtyZXR1cm57cmVxdWlyZToibmdNb2RlbCIsbGluazpmdW5jdGlvbihpLGosayxsKXt2YXIgbSxuPWkuJGV2YWwoay50eXBlYWhlYWRNaW5MZW5ndGgpfHwxLG89aS4kZXZhbChrLnR5cGVhaGVhZFdhaXRNcyl8fDAscD1pLiRldmFsKGsudHlwZWFoZWFkRWRpdGFibGUpIT09ITEscT1iKGsudHlwZWFoZWFkTG9hZGluZykuYXNzaWdufHxhbmd1bGFyLm5vb3Ascj1iKGsudHlwZWFoZWFkT25TZWxlY3QpLHM9ay50eXBlYWhlYWRJbnB1dEZvcm1hdHRlcj9iKGsudHlwZWFoZWFkSW5wdXRGb3JtYXR0ZXIpOnZvaWQgMCx0PWsudHlwZWFoZWFkQXBwZW5kVG9Cb2R5P2kuJGV2YWwoay50eXBlYWhlYWRBcHBlbmRUb0JvZHkpOiExLHU9YihrLm5nTW9kZWwpLmFzc2lnbix2PWcucGFyc2Uoay50eXBlYWhlYWQpLHc9aS4kbmV3KCk7aS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe3cuJGRlc3Ryb3koKX0pO3ZhciB4PSJ0eXBlYWhlYWQtIit3LiRpZCsiLSIrTWF0aC5mbG9vcigxZTQqTWF0aC5yYW5kb20oKSk7ai5hdHRyKHsiYXJpYS1hdXRvY29tcGxldGUiOiJsaXN0IiwiYXJpYS1leHBhbmRlZCI6ITEsImFyaWEtb3ducyI6eH0pO3ZhciB5PWFuZ3VsYXIuZWxlbWVudCgiPGRpdiB0eXBlYWhlYWQtcG9wdXA+PC9kaXY+Iik7eS5hdHRyKHtpZDp4LG1hdGNoZXM6Im1hdGNoZXMiLGFjdGl2ZToiYWN0aXZlSWR4IixzZWxlY3Q6InNlbGVjdChhY3RpdmVJZHgpIixxdWVyeToicXVlcnkiLHBvc2l0aW9uOiJwb3NpdGlvbiJ9KSxhbmd1bGFyLmlzRGVmaW5lZChrLnR5cGVhaGVhZFRlbXBsYXRlVXJsKSYmeS5hdHRyKCJ0ZW1wbGF0ZS11cmwiLGsudHlwZWFoZWFkVGVtcGxhdGVVcmwpO3ZhciB6PWZ1bmN0aW9uKCl7dy5tYXRjaGVzPVtdLHcuYWN0aXZlSWR4PS0xLGouYXR0cigiYXJpYS1leHBhbmRlZCIsITEpfSxBPWZ1bmN0aW9uKGEpe3JldHVybiB4KyItb3B0aW9uLSIrYX07dy4kd2F0Y2goImFjdGl2ZUlkeCIsZnVuY3Rpb24oYSl7MD5hP2oucmVtb3ZlQXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50Iik6ai5hdHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLEEoYSkpfSk7dmFyIEI9ZnVuY3Rpb24oYSl7dmFyIGI9eyR2aWV3VmFsdWU6YX07cShpLCEwKSxjLndoZW4odi5zb3VyY2UoaSxiKSkudGhlbihmdW5jdGlvbihjKXt2YXIgZD1hPT09bC4kdmlld1ZhbHVlO2lmKGQmJm0paWYoYy5sZW5ndGg+MCl7dy5hY3RpdmVJZHg9MCx3Lm1hdGNoZXMubGVuZ3RoPTA7Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspYlt2Lml0ZW1OYW1lXT1jW2VdLHcubWF0Y2hlcy5wdXNoKHtpZDpBKGUpLGxhYmVsOnYudmlld01hcHBlcih3LGIpLG1vZGVsOmNbZV19KTt3LnF1ZXJ5PWEsdy5wb3NpdGlvbj10P2Yub2Zmc2V0KGopOmYucG9zaXRpb24oaiksdy5wb3NpdGlvbi50b3A9dy5wb3NpdGlvbi50b3Arai5wcm9wKCJvZmZzZXRIZWlnaHQiKSxqLmF0dHIoImFyaWEtZXhwYW5kZWQiLCEwKX1lbHNlIHooKTtkJiZxKGksITEpfSxmdW5jdGlvbigpe3ooKSxxKGksITEpfSl9O3ooKSx3LnF1ZXJ5PXZvaWQgMDt2YXIgQztsLiRwYXJzZXJzLnVuc2hpZnQoZnVuY3Rpb24oYSl7cmV0dXJuIG09ITAsYSYmYS5sZW5ndGg+PW4/bz4wPyhDJiZkLmNhbmNlbChDKSxDPWQoZnVuY3Rpb24oKXtCKGEpfSxvKSk6QihhKToocShpLCExKSx6KCkpLHA/YTphP3ZvaWQgbC4kc2V0VmFsaWRpdHkoImVkaXRhYmxlIiwhMSk6KGwuJHNldFZhbGlkaXR5KCJlZGl0YWJsZSIsITApLGEpfSksbC4kZm9ybWF0dGVycy5wdXNoKGZ1bmN0aW9uKGEpe3ZhciBiLGMsZD17fTtyZXR1cm4gcz8oZC4kbW9kZWw9YSxzKGksZCkpOihkW3YuaXRlbU5hbWVdPWEsYj12LnZpZXdNYXBwZXIoaSxkKSxkW3YuaXRlbU5hbWVdPXZvaWQgMCxjPXYudmlld01hcHBlcihpLGQpLGIhPT1jP2I6YSl9KSx3LnNlbGVjdD1mdW5jdGlvbihhKXt2YXIgYixjLGU9e307ZVt2Lml0ZW1OYW1lXT1jPXcubWF0Y2hlc1thXS5tb2RlbCxiPXYubW9kZWxNYXBwZXIoaSxlKSx1KGksYiksbC4kc2V0VmFsaWRpdHkoImVkaXRhYmxlIiwhMCkscihpLHskaXRlbTpjLCRtb2RlbDpiLCRsYWJlbDp2LnZpZXdNYXBwZXIoaSxlKX0pLHooKSxkKGZ1bmN0aW9uKCl7alswXS5mb2N1cygpfSwwLCExKX0sai5iaW5kKCJrZXlkb3duIixmdW5jdGlvbihhKXswIT09dy5tYXRjaGVzLmxlbmd0aCYmLTEhPT1oLmluZGV4T2YoYS53aGljaCkmJihhLnByZXZlbnREZWZhdWx0KCksNDA9PT1hLndoaWNoPyh3LmFjdGl2ZUlkeD0ody5hY3RpdmVJZHgrMSkldy5tYXRjaGVzLmxlbmd0aCx3LiRkaWdlc3QoKSk6Mzg9PT1hLndoaWNoPyh3LmFjdGl2ZUlkeD0ody5hY3RpdmVJZHg/dy5hY3RpdmVJZHg6dy5tYXRjaGVzLmxlbmd0aCktMSx3LiRkaWdlc3QoKSk6MTM9PT1hLndoaWNofHw5PT09YS53aGljaD93LiRhcHBseShmdW5jdGlvbigpe3cuc2VsZWN0KHcuYWN0aXZlSWR4KX0pOjI3PT09YS53aGljaCYmKGEuc3RvcFByb3BhZ2F0aW9uKCkseigpLHcuJGRpZ2VzdCgpKSl9KSxqLmJpbmQoImJsdXIiLGZ1bmN0aW9uKCl7bT0hMX0pO3ZhciBEPWZ1bmN0aW9uKGEpe2pbMF0hPT1hLnRhcmdldCYmKHooKSx3LiRkaWdlc3QoKSl9O2UuYmluZCgiY2xpY2siLEQpLGkuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtlLnVuYmluZCgiY2xpY2siLEQpfSk7dmFyIEU9YSh5KSh3KTt0P2UuZmluZCgiYm9keSIpLmFwcGVuZChFKTpqLmFmdGVyKEUpfX19XSkuZGlyZWN0aXZlKCJ0eXBlYWhlYWRQb3B1cCIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixzY29wZTp7bWF0Y2hlczoiPSIscXVlcnk6Ij0iLGFjdGl2ZToiPSIscG9zaXRpb246Ij0iLHNlbGVjdDoiJiJ9LHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtcG9wdXAuaHRtbCIsbGluazpmdW5jdGlvbihhLGIsYyl7YS50ZW1wbGF0ZVVybD1jLnRlbXBsYXRlVXJsLGEuaXNPcGVuPWZ1bmN0aW9uKCl7cmV0dXJuIGEubWF0Y2hlcy5sZW5ndGg+MH0sYS5pc0FjdGl2ZT1mdW5jdGlvbihiKXtyZXR1cm4gYS5hY3RpdmU9PWJ9LGEuc2VsZWN0QWN0aXZlPWZ1bmN0aW9uKGIpe2EuYWN0aXZlPWJ9LGEuc2VsZWN0TWF0Y2g9ZnVuY3Rpb24oYil7YS5zZWxlY3Qoe2FjdGl2ZUlkeDpifSl9fX19KS5kaXJlY3RpdmUoInR5cGVhaGVhZE1hdGNoIixbIiRodHRwIiwiJHRlbXBsYXRlQ2FjaGUiLCIkY29tcGlsZSIsIiRwYXJzZSIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsc2NvcGU6e2luZGV4OiI9IixtYXRjaDoiPSIscXVlcnk6Ij0ifSxsaW5rOmZ1bmN0aW9uKGUsZixnKXt2YXIgaD1kKGcudGVtcGxhdGVVcmwpKGUuJHBhcmVudCl8fCJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLW1hdGNoLmh0bWwiO2EuZ2V0KGgse2NhY2hlOmJ9KS5zdWNjZXNzKGZ1bmN0aW9uKGEpe2YucmVwbGFjZVdpdGgoYyhhLnRyaW0oKSkoZSkpfSl9fX1dKS5maWx0ZXIoInR5cGVhaGVhZEhpZ2hsaWdodCIsZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3JldHVybiBhLnJlcGxhY2UoLyhbLj8qK14kW1xdXFwoKXt9fC1dKS9nLCJcXCQxIil9cmV0dXJuIGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGM/KCIiK2IpLnJlcGxhY2UobmV3IFJlZ0V4cChhKGMpLCJnaSIpLCI8c3Ryb25nPiQmPC9zdHJvbmc+Iik6Yn19KSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi1ncm91cC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLWdyb3VwLmh0bWwiLCc8ZGl2IGNsYXNzPSJwYW5lbCBwYW5lbC1kZWZhdWx0Ij5cbiAgPGRpdiBjbGFzcz0icGFuZWwtaGVhZGluZyI+XG4gICAgPGg0IGNsYXNzPSJwYW5lbC10aXRsZSI+XG4gICAgICA8YSBjbGFzcz0iYWNjb3JkaW9uLXRvZ2dsZSIgbmctY2xpY2s9InRvZ2dsZU9wZW4oKSIgYWNjb3JkaW9uLXRyYW5zY2x1ZGU9ImhlYWRpbmciPjxzcGFuIG5nLWNsYXNzPSJ7XCd0ZXh0LW11dGVkXCc6IGlzRGlzYWJsZWR9Ij57e2hlYWRpbmd9fTwvc3Bhbj48L2E+XG4gICAgPC9oND5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InBhbmVsLWNvbGxhcHNlIiBjb2xsYXBzZT0iIWlzT3BlbiI+XG4JICA8ZGl2IGNsYXNzPSJwYW5lbC1ib2R5IiBuZy10cmFuc2NsdWRlPjwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24uaHRtbCIsJzxkaXYgY2xhc3M9InBhbmVsLWdyb3VwIiBuZy10cmFuc2NsdWRlPjwvZGl2PicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9hbGVydC9hbGVydC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9hbGVydC9hbGVydC5odG1sIiwnPGRpdiBjbGFzcz0iYWxlcnQiIG5nLWNsYXNzPSJ7XCdhbGVydC17e3R5cGUgfHwgXCd3YXJuaW5nXCd9fVwnOiB0cnVlLCBcJ2FsZXJ0LWRpc21pc3NhYmxlXCc6IGNsb3NlYWJsZX0iIHJvbGU9ImFsZXJ0Ij5cbiAgICA8YnV0dG9uIG5nLXNob3c9ImNsb3NlYWJsZSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIG5nLWNsaWNrPSJjbG9zZSgpIj5cbiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49InRydWUiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPSJzci1vbmx5Ij5DbG9zZTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IG5nLXRyYW5zY2x1ZGU+PC9kaXY+XG48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9jYXJvdXNlbC9jYXJvdXNlbC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9jYXJvdXNlbC9jYXJvdXNlbC5odG1sIiwnPGRpdiBuZy1tb3VzZWVudGVyPSJwYXVzZSgpIiBuZy1tb3VzZWxlYXZlPSJwbGF5KCkiIGNsYXNzPSJjYXJvdXNlbCIgbmctc3dpcGUtcmlnaHQ9InByZXYoKSIgbmctc3dpcGUtbGVmdD0ibmV4dCgpIj5cbiAgICA8b2wgY2xhc3M9ImNhcm91c2VsLWluZGljYXRvcnMiIG5nLXNob3c9InNsaWRlcy5sZW5ndGggPiAxIj5cbiAgICAgICAgPGxpIG5nLXJlcGVhdD0ic2xpZGUgaW4gc2xpZGVzIHRyYWNrIGJ5ICRpbmRleCIgbmctY2xhc3M9InthY3RpdmU6IGlzQWN0aXZlKHNsaWRlKX0iIG5nLWNsaWNrPSJzZWxlY3Qoc2xpZGUpIj48L2xpPlxuICAgIDwvb2w+XG4gICAgPGRpdiBjbGFzcz0iY2Fyb3VzZWwtaW5uZXIiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+XG4gICAgPGEgY2xhc3M9ImxlZnQgY2Fyb3VzZWwtY29udHJvbCIgbmctY2xpY2s9InByZXYoKSIgbmctc2hvdz0ic2xpZGVzLmxlbmd0aCA+IDEiPjxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tbGVmdCI+PC9zcGFuPjwvYT5cbiAgICA8YSBjbGFzcz0icmlnaHQgY2Fyb3VzZWwtY29udHJvbCIgbmctY2xpY2s9Im5leHQoKSIgbmctc2hvdz0ic2xpZGVzLmxlbmd0aCA+IDEiPjxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQiPjwvc3Bhbj48L2E+XG48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9jYXJvdXNlbC9zbGlkZS5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9jYXJvdXNlbC9zbGlkZS5odG1sIiwiPGRpdiBuZy1jbGFzcz1cIntcbiAgICAnYWN0aXZlJzogbGVhdmluZyB8fCAoYWN0aXZlICYmICFlbnRlcmluZyksXG4gICAgJ3ByZXYnOiAobmV4dCB8fCBhY3RpdmUpICYmIGRpcmVjdGlvbj09J3ByZXYnLFxuICAgICduZXh0JzogKG5leHQgfHwgYWN0aXZlKSAmJiBkaXJlY3Rpb249PSduZXh0JyxcbiAgICAncmlnaHQnOiBkaXJlY3Rpb249PSdwcmV2JyxcbiAgICAnbGVmdCc6IGRpcmVjdGlvbj09J25leHQnXG4gIH1cIiBjbGFzcz1cIml0ZW0gdGV4dC1jZW50ZXJcIiBuZy10cmFuc2NsdWRlPjwvZGl2PlxuIil9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RhdGVwaWNrZXIuaHRtbCIsJzxkaXYgbmctc3dpdGNoPSJkYXRlcGlja2VyTW9kZSIgcm9sZT0iYXBwbGljYXRpb24iIG5nLWtleWRvd249ImtleWRvd24oJGV2ZW50KSI+XG4gIDxkYXlwaWNrZXIgbmctc3dpdGNoLXdoZW49ImRheSIgdGFiaW5kZXg9IjAiPjwvZGF5cGlja2VyPlxuICA8bW9udGhwaWNrZXIgbmctc3dpdGNoLXdoZW49Im1vbnRoIiB0YWJpbmRleD0iMCI+PC9tb250aHBpY2tlcj5cbiAgPHllYXJwaWNrZXIgbmctc3dpdGNoLXdoZW49InllYXIiIHRhYmluZGV4PSIwIj48L3llYXJwaWNrZXI+XG48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXkuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXkuaHRtbCIsJzx0YWJsZSByb2xlPSJncmlkIiBhcmlhLWxhYmVsbGVkYnk9Int7dW5pcXVlSWR9fS10aXRsZSIgYXJpYS1hY3RpdmVkZXNjZW5kYW50PSJ7e2FjdGl2ZURhdGVJZH19Ij5cbiAgPHRoZWFkPlxuICAgIDx0cj5cbiAgICAgIDx0aD48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20gcHVsbC1sZWZ0IiBuZy1jbGljaz0ibW92ZSgtMSkiIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1sZWZ0Ij48L2k+PC9idXR0b24+PC90aD5cbiAgICAgIDx0aCBjb2xzcGFuPSJ7ezUgKyBzaG93V2Vla3N9fSI+PGJ1dHRvbiBpZD0ie3t1bmlxdWVJZH19LXRpdGxlIiByb2xlPSJoZWFkaW5nIiBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgYXJpYS1hdG9taWM9InRydWUiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20iIG5nLWNsaWNrPSJ0b2dnbGVNb2RlKCkiIHRhYmluZGV4PSItMSIgc3R5bGU9IndpZHRoOjEwMCU7Ij48c3Ryb25nPnt7dGl0bGV9fTwvc3Ryb25nPjwvYnV0dG9uPjwvdGg+XG4gICAgICA8dGg+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtcmlnaHQiIG5nLWNsaWNrPSJtb3ZlKDEpIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQiPjwvaT48L2J1dHRvbj48L3RoPlxuICAgIDwvdHI+XG4gICAgPHRyPlxuICAgICAgPHRoIG5nLXNob3c9InNob3dXZWVrcyIgY2xhc3M9InRleHQtY2VudGVyIj48L3RoPlxuICAgICAgPHRoIG5nLXJlcGVhdD0ibGFiZWwgaW4gbGFiZWxzIHRyYWNrIGJ5ICRpbmRleCIgY2xhc3M9InRleHQtY2VudGVyIj48c21hbGwgYXJpYS1sYWJlbD0ie3tsYWJlbC5mdWxsfX0iPnt7bGFiZWwuYWJicn19PC9zbWFsbD48L3RoPlxuICAgIDwvdHI+XG4gIDwvdGhlYWQ+XG4gIDx0Ym9keT5cbiAgICA8dHIgbmctcmVwZWF0PSJyb3cgaW4gcm93cyB0cmFjayBieSAkaW5kZXgiPlxuICAgICAgPHRkIG5nLXNob3c9InNob3dXZWVrcyIgY2xhc3M9InRleHQtY2VudGVyIGg2Ij48ZW0+e3sgd2Vla051bWJlcnNbJGluZGV4XSB9fTwvZW0+PC90ZD5cbiAgICAgIDx0ZCBuZy1yZXBlYXQ9ImR0IGluIHJvdyB0cmFjayBieSBkdC5kYXRlIiBjbGFzcz0idGV4dC1jZW50ZXIiIHJvbGU9ImdyaWRjZWxsIiBpZD0ie3tkdC51aWR9fSIgYXJpYS1kaXNhYmxlZD0ie3shIWR0LmRpc2FibGVkfX0iPlxuICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgc3R5bGU9IndpZHRoOjEwMCU7IiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSIgbmctY2xhc3M9IntcJ2J0bi1pbmZvXCc6IGR0LnNlbGVjdGVkLCBhY3RpdmU6IGlzQWN0aXZlKGR0KX0iIG5nLWNsaWNrPSJzZWxlY3QoZHQuZGF0ZSkiIG5nLWRpc2FibGVkPSJkdC5kaXNhYmxlZCIgdGFiaW5kZXg9Ii0xIj48c3BhbiBuZy1jbGFzcz0ie1wndGV4dC1tdXRlZFwnOiBkdC5zZWNvbmRhcnksIFwndGV4dC1pbmZvXCc6IGR0LmN1cnJlbnR9Ij57e2R0LmxhYmVsfX08L3NwYW4+PC9idXR0b24+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGJvZHk+XG48L3RhYmxlPlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2RhdGVwaWNrZXIvbW9udGguaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvZGF0ZXBpY2tlci9tb250aC5odG1sIiwnPHRhYmxlIHJvbGU9ImdyaWQiIGFyaWEtbGFiZWxsZWRieT0ie3t1bmlxdWVJZH19LXRpdGxlIiBhcmlhLWFjdGl2ZWRlc2NlbmRhbnQ9Int7YWN0aXZlRGF0ZUlkfX0iPlxuICA8dGhlYWQ+XG4gICAgPHRyPlxuICAgICAgPHRoPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBwdWxsLWxlZnQiIG5nLWNsaWNrPSJtb3ZlKC0xKSIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLWxlZnQiPjwvaT48L2J1dHRvbj48L3RoPlxuICAgICAgPHRoPjxidXR0b24gaWQ9Int7dW5pcXVlSWR9fS10aXRsZSIgcm9sZT0iaGVhZGluZyIgYXJpYS1saXZlPSJhc3NlcnRpdmUiIGFyaWEtYXRvbWljPSJ0cnVlIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIiBuZy1jbGljaz0idG9nZ2xlTW9kZSgpIiB0YWJpbmRleD0iLTEiIHN0eWxlPSJ3aWR0aDoxMDAlOyI+PHN0cm9uZz57e3RpdGxlfX08L3N0cm9uZz48L2J1dHRvbj48L3RoPlxuICAgICAgPHRoPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBwdWxsLXJpZ2h0IiBuZy1jbGljaz0ibW92ZSgxKSIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0Ij48L2k+PC9idXR0b24+PC90aD5cbiAgICA8L3RyPlxuICA8L3RoZWFkPlxuICA8dGJvZHk+XG4gICAgPHRyIG5nLXJlcGVhdD0icm93IGluIHJvd3MgdHJhY2sgYnkgJGluZGV4Ij5cbiAgICAgIDx0ZCBuZy1yZXBlYXQ9ImR0IGluIHJvdyB0cmFjayBieSBkdC5kYXRlIiBjbGFzcz0idGV4dC1jZW50ZXIiIHJvbGU9ImdyaWRjZWxsIiBpZD0ie3tkdC51aWR9fSIgYXJpYS1kaXNhYmxlZD0ie3shIWR0LmRpc2FibGVkfX0iPlxuICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgc3R5bGU9IndpZHRoOjEwMCU7IiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiBuZy1jbGFzcz0ie1wnYnRuLWluZm9cJzogZHQuc2VsZWN0ZWQsIGFjdGl2ZTogaXNBY3RpdmUoZHQpfSIgbmctY2xpY2s9InNlbGVjdChkdC5kYXRlKSIgbmctZGlzYWJsZWQ9ImR0LmRpc2FibGVkIiB0YWJpbmRleD0iLTEiPjxzcGFuIG5nLWNsYXNzPSJ7XCd0ZXh0LWluZm9cJzogZHQuY3VycmVudH0iPnt7ZHQubGFiZWx9fTwvc3Bhbj48L2J1dHRvbj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvdGFibGU+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvZGF0ZXBpY2tlci9wb3B1cC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL3BvcHVwLmh0bWwiLCc8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiIG5nLXN0eWxlPSJ7ZGlzcGxheTogKGlzT3BlbiAmJiBcJ2Jsb2NrXCcpIHx8IFwnbm9uZVwnLCB0b3A6IHBvc2l0aW9uLnRvcCtcJ3B4XCcsIGxlZnQ6IHBvc2l0aW9uLmxlZnQrXCdweFwnfSIgbmcta2V5ZG93bj0ia2V5ZG93bigkZXZlbnQpIj5cbgk8bGkgbmctdHJhbnNjbHVkZT48L2xpPlxuCTxsaSBuZy1pZj0ic2hvd0J1dHRvbkJhciIgc3R5bGU9InBhZGRpbmc6MTBweCA5cHggMnB4Ij5cbgkJPHNwYW4gY2xhc3M9ImJ0bi1ncm91cCI+XG4JCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc20gYnRuLWluZm8iIG5nLWNsaWNrPSJzZWxlY3QoXCd0b2RheVwnKSI+e3sgZ2V0VGV4dChcJ2N1cnJlbnRcJykgfX08L2J1dHRvbj5cbgkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zbSBidG4tZGFuZ2VyIiBuZy1jbGljaz0ic2VsZWN0KG51bGwpIj57eyBnZXRUZXh0KFwnY2xlYXJcJykgfX08L2J1dHRvbj5cbgkJPC9zcGFuPlxuCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc20gYnRuLXN1Y2Nlc3MgcHVsbC1yaWdodCIgbmctY2xpY2s9ImNsb3NlKCkiPnt7IGdldFRleHQoXCdjbG9zZVwnKSB9fTwvYnV0dG9uPlxuCTwvbGk+XG48L3VsPlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2RhdGVwaWNrZXIveWVhci5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL3llYXIuaHRtbCIsJzx0YWJsZSByb2xlPSJncmlkIiBhcmlhLWxhYmVsbGVkYnk9Int7dW5pcXVlSWR9fS10aXRsZSIgYXJpYS1hY3RpdmVkZXNjZW5kYW50PSJ7e2FjdGl2ZURhdGVJZH19Ij5cbiAgPHRoZWFkPlxuICAgIDx0cj5cbiAgICAgIDx0aD48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20gcHVsbC1sZWZ0IiBuZy1jbGljaz0ibW92ZSgtMSkiIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1sZWZ0Ij48L2k+PC9idXR0b24+PC90aD5cbiAgICAgIDx0aCBjb2xzcGFuPSIzIj48YnV0dG9uIGlkPSJ7e3VuaXF1ZUlkfX0tdGl0bGUiIHJvbGU9ImhlYWRpbmciIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBhcmlhLWF0b21pYz0idHJ1ZSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSIgbmctY2xpY2s9InRvZ2dsZU1vZGUoKSIgdGFiaW5kZXg9Ii0xIiBzdHlsZT0id2lkdGg6MTAwJTsiPjxzdHJvbmc+e3t0aXRsZX19PC9zdHJvbmc+PC9idXR0b24+PC90aD5cbiAgICAgIDx0aD48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20gcHVsbC1yaWdodCIgbmctY2xpY2s9Im1vdmUoMSkiIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1yaWdodCI+PC9pPjwvYnV0dG9uPjwvdGg+XG4gICAgPC90cj5cbiAgPC90aGVhZD5cbiAgPHRib2R5PlxuICAgIDx0ciBuZy1yZXBlYXQ9InJvdyBpbiByb3dzIHRyYWNrIGJ5ICRpbmRleCI+XG4gICAgICA8dGQgbmctcmVwZWF0PSJkdCBpbiByb3cgdHJhY2sgYnkgZHQuZGF0ZSIgY2xhc3M9InRleHQtY2VudGVyIiByb2xlPSJncmlkY2VsbCIgaWQ9Int7ZHQudWlkfX0iIGFyaWEtZGlzYWJsZWQ9Int7ISFkdC5kaXNhYmxlZH19Ij5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIHN0eWxlPSJ3aWR0aDoxMDAlOyIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgbmctY2xhc3M9IntcJ2J0bi1pbmZvXCc6IGR0LnNlbGVjdGVkLCBhY3RpdmU6IGlzQWN0aXZlKGR0KX0iIG5nLWNsaWNrPSJzZWxlY3QoZHQuZGF0ZSkiIG5nLWRpc2FibGVkPSJkdC5kaXNhYmxlZCIgdGFiaW5kZXg9Ii0xIj48c3BhbiBuZy1jbGFzcz0ie1wndGV4dC1pbmZvXCc6IGR0LmN1cnJlbnR9Ij57e2R0LmxhYmVsfX08L3NwYW4+PC9idXR0b24+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGJvZHk+XG48L3RhYmxlPlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL21vZGFsL2JhY2tkcm9wLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL21vZGFsL2JhY2tkcm9wLmh0bWwiLCc8ZGl2IGNsYXNzPSJtb2RhbC1iYWNrZHJvcCBmYWRlIlxuICAgICBuZy1jbGFzcz0ie2luOiBhbmltYXRlfSJcbiAgICAgbmctc3R5bGU9IntcJ3otaW5kZXhcJzogMTA0MCArIChpbmRleCAmJiAxIHx8IDApICsgaW5kZXgqMTB9IlxuPjwvZGl2PlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL21vZGFsL3dpbmRvdy5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9tb2RhbC93aW5kb3cuaHRtbCIsJzxkaXYgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGNsYXNzPSJtb2RhbCBmYWRlIiBuZy1jbGFzcz0ie2luOiBhbmltYXRlfSIgbmctc3R5bGU9IntcJ3otaW5kZXhcJzogMTA1MCArIGluZGV4KjEwLCBkaXNwbGF5OiBcJ2Jsb2NrXCd9IiBuZy1jbGljaz0iY2xvc2UoJGV2ZW50KSI+XG4gICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIiBuZy1jbGFzcz0ie1wnbW9kYWwtc21cJzogc2l6ZSA9PSBcJ3NtXCcsIFwnbW9kYWwtbGdcJzogc2l6ZSA9PSBcJ2xnXCd9Ij48ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50IiBuZy10cmFuc2NsdWRlPjwvZGl2PjwvZGl2PlxuPC9kaXY+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3BhZ2luYXRpb24vcGFnZXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdlci5odG1sIiwnPHVsIGNsYXNzPSJwYWdlciI+XG4gIDxsaSBuZy1jbGFzcz0ie2Rpc2FibGVkOiBub1ByZXZpb3VzKCksIHByZXZpb3VzOiBhbGlnbn0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UocGFnZSAtIDEpIj57e2dldFRleHQoXCdwcmV2aW91c1wnKX19PC9hPjwvbGk+XG4gIDxsaSBuZy1jbGFzcz0ie2Rpc2FibGVkOiBub05leHQoKSwgbmV4dDogYWxpZ259Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKHBhZ2UgKyAxKSI+e3tnZXRUZXh0KFwnbmV4dFwnKX19PC9hPjwvbGk+XG48L3VsPicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2luYXRpb24uaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmh0bWwiLCc8dWwgY2xhc3M9InBhZ2luYXRpb24iPlxuICA8bGkgbmctaWY9ImJvdW5kYXJ5TGlua3MiIG5nLWNsYXNzPSJ7ZGlzYWJsZWQ6IG5vUHJldmlvdXMoKX0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UoMSkiPnt7Z2V0VGV4dChcJ2ZpcnN0XCcpfX08L2E+PC9saT5cbiAgPGxpIG5nLWlmPSJkaXJlY3Rpb25MaW5rcyIgbmctY2xhc3M9IntkaXNhYmxlZDogbm9QcmV2aW91cygpfSI+PGEgaHJlZiBuZy1jbGljaz0ic2VsZWN0UGFnZShwYWdlIC0gMSkiPnt7Z2V0VGV4dChcJ3ByZXZpb3VzXCcpfX08L2E+PC9saT5cbiAgPGxpIG5nLXJlcGVhdD0icGFnZSBpbiBwYWdlcyB0cmFjayBieSAkaW5kZXgiIG5nLWNsYXNzPSJ7YWN0aXZlOiBwYWdlLmFjdGl2ZX0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UocGFnZS5udW1iZXIpIj57e3BhZ2UudGV4dH19PC9hPjwvbGk+XG4gIDxsaSBuZy1pZj0iZGlyZWN0aW9uTGlua3MiIG5nLWNsYXNzPSJ7ZGlzYWJsZWQ6IG5vTmV4dCgpfSI+PGEgaHJlZiBuZy1jbGljaz0ic2VsZWN0UGFnZShwYWdlICsgMSkiPnt7Z2V0VGV4dChcJ25leHRcJyl9fTwvYT48L2xpPlxuICA8bGkgbmctaWY9ImJvdW5kYXJ5TGlua3MiIG5nLWNsYXNzPSJ7ZGlzYWJsZWQ6IG5vTmV4dCgpfSI+PGEgaHJlZiBuZy1jbGljaz0ic2VsZWN0UGFnZSh0b3RhbFBhZ2VzKSI+e3tnZXRUZXh0KFwnbGFzdFwnKX19PC9hPjwvbGk+XG48L3VsPicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtaHRtbC11bnNhZmUtcG9wdXAuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLWh0bWwtdW5zYWZlLXBvcHVwLmh0bWwiLCc8ZGl2IGNsYXNzPSJ0b29sdGlwIHt7cGxhY2VtZW50fX0iIG5nLWNsYXNzPSJ7IGluOiBpc09wZW4oKSwgZmFkZTogYW5pbWF0aW9uKCkgfSI+XG4gIDxkaXYgY2xhc3M9InRvb2x0aXAtYXJyb3ciPjwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0b29sdGlwLWlubmVyIiBiaW5kLWh0bWwtdW5zYWZlPSJjb250ZW50Ij48L2Rpdj5cbjwvZGl2PlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1wb3B1cC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtcG9wdXAuaHRtbCIsJzxkaXYgY2xhc3M9InRvb2x0aXAge3twbGFjZW1lbnR9fSIgbmctY2xhc3M9InsgaW46IGlzT3BlbigpLCBmYWRlOiBhbmltYXRpb24oKSB9Ij5cbiAgPGRpdiBjbGFzcz0idG9vbHRpcC1hcnJvdyI+PC9kaXY+XG4gIDxkaXYgY2xhc3M9InRvb2x0aXAtaW5uZXIiIG5nLWJpbmQ9ImNvbnRlbnQiPjwvZGl2PlxuPC9kaXY+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvcG9wb3Zlci9wb3BvdmVyLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3BvcG92ZXIvcG9wb3Zlci5odG1sIiwnPGRpdiBjbGFzcz0icG9wb3ZlciB7e3BsYWNlbWVudH19IiBuZy1jbGFzcz0ieyBpbjogaXNPcGVuKCksIGZhZGU6IGFuaW1hdGlvbigpIH0iPlxuICA8ZGl2IGNsYXNzPSJhcnJvdyI+PC9kaXY+XG5cbiAgPGRpdiBjbGFzcz0icG9wb3Zlci1pbm5lciI+XG4gICAgICA8aDMgY2xhc3M9InBvcG92ZXItdGl0bGUiIG5nLWJpbmQ9InRpdGxlIiBuZy1zaG93PSJ0aXRsZSI+PC9oMz5cbiAgICAgIDxkaXYgY2xhc3M9InBvcG92ZXItY29udGVudCIgbmctYmluZD0iY29udGVudCI+PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvYmFyLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3Byb2dyZXNzYmFyL2Jhci5odG1sIiwnPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIiBuZy1jbGFzcz0idHlwZSAmJiBcJ3Byb2dyZXNzLWJhci1cJyArIHR5cGUiIHJvbGU9InByb2dyZXNzYmFyIiBhcmlhLXZhbHVlbm93PSJ7e3ZhbHVlfX0iIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9Int7bWF4fX0iIG5nLXN0eWxlPSJ7d2lkdGg6IHBlcmNlbnQgKyBcJyVcJ30iIGFyaWEtdmFsdWV0ZXh0PSJ7e3BlcmNlbnQgfCBudW1iZXI6MH19JSIgbmctdHJhbnNjbHVkZT48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3MuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3MuaHRtbCIsJzxkaXYgY2xhc3M9InByb2dyZXNzIiBuZy10cmFuc2NsdWRlPjwvZGl2PicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzc2Jhci5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzc2Jhci5odG1sIiwnPGRpdiBjbGFzcz0icHJvZ3Jlc3MiPlxuICA8ZGl2IGNsYXNzPSJwcm9ncmVzcy1iYXIiIG5nLWNsYXNzPSJ0eXBlICYmIFwncHJvZ3Jlc3MtYmFyLVwnICsgdHlwZSIgcm9sZT0icHJvZ3Jlc3NiYXIiIGFyaWEtdmFsdWVub3c9Int7dmFsdWV9fSIgYXJpYS12YWx1ZW1pbj0iMCIgYXJpYS12YWx1ZW1heD0ie3ttYXh9fSIgbmctc3R5bGU9Int3aWR0aDogcGVyY2VudCArIFwnJVwnfSIgYXJpYS12YWx1ZXRleHQ9Int7cGVyY2VudCB8IG51bWJlcjowfX0lIiBuZy10cmFuc2NsdWRlPjwvZGl2PlxuPC9kaXY+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3JhdGluZy9yYXRpbmcuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvcmF0aW5nL3JhdGluZy5odG1sIiwnPHNwYW4gbmctbW91c2VsZWF2ZT0icmVzZXQoKSIgbmcta2V5ZG93bj0ib25LZXlkb3duKCRldmVudCkiIHRhYmluZGV4PSIwIiByb2xlPSJzbGlkZXIiIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9Int7cmFuZ2UubGVuZ3RofX0iIGFyaWEtdmFsdWVub3c9Int7dmFsdWV9fSI+XG4gICAgPGkgbmctcmVwZWF0PSJyIGluIHJhbmdlIHRyYWNrIGJ5ICRpbmRleCIgbmctbW91c2VlbnRlcj0iZW50ZXIoJGluZGV4ICsgMSkiIG5nLWNsaWNrPSJyYXRlKCRpbmRleCArIDEpIiBjbGFzcz0iZ2x5cGhpY29uIiBuZy1jbGFzcz0iJGluZGV4IDwgdmFsdWUgJiYgKHIuc3RhdGVPbiB8fCBcJ2dseXBoaWNvbi1zdGFyXCcpIHx8IChyLnN0YXRlT2ZmIHx8IFwnZ2x5cGhpY29uLXN0YXItZW1wdHlcJykiPlxuICAgICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+KHt7ICRpbmRleCA8IHZhbHVlID8gXCcqXCcgOiBcJyBcJyB9fSk8L3NwYW4+XG4gICAgPC9pPlxuPC9zcGFuPicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90YWJzL3RhYi5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS90YWJzL3RhYi5odG1sIiwnPGxpIG5nLWNsYXNzPSJ7YWN0aXZlOiBhY3RpdmUsIGRpc2FibGVkOiBkaXNhYmxlZH0iPlxuICA8YSBuZy1jbGljaz0ic2VsZWN0KCkiIHRhYi1oZWFkaW5nLXRyYW5zY2x1ZGU+e3toZWFkaW5nfX08L2E+XG48L2xpPlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3RhYnMvdGFic2V0LXRpdGxlcy5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS90YWJzL3RhYnNldC10aXRsZXMuaHRtbCIsIjx1bCBjbGFzcz1cIm5hdiB7e3R5cGUgJiYgJ25hdi0nICsgdHlwZX19XCIgbmctY2xhc3M9XCJ7J25hdi1zdGFja2VkJzogdmVydGljYWx9XCI+XG48L3VsPlxuIil9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3RhYnMvdGFic2V0Lmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3RhYnMvdGFic2V0Lmh0bWwiLCdcbjxkaXY+XG4gIDx1bCBjbGFzcz0ibmF2IG5hdi17e3R5cGUgfHwgXCd0YWJzXCd9fSIgbmctY2xhc3M9IntcJ25hdi1zdGFja2VkXCc6IHZlcnRpY2FsLCBcJ25hdi1qdXN0aWZpZWRcJzoganVzdGlmaWVkfSIgbmctdHJhbnNjbHVkZT48L3VsPlxuICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+XG4gICAgPGRpdiBjbGFzcz0idGFiLXBhbmUiIFxuICAgICAgICAgbmctcmVwZWF0PSJ0YWIgaW4gdGFicyIgXG4gICAgICAgICBuZy1jbGFzcz0ie2FjdGl2ZTogdGFiLmFjdGl2ZX0iXG4gICAgICAgICB0YWItY29udGVudC10cmFuc2NsdWRlPSJ0YWIiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3RpbWVwaWNrZXIvdGltZXBpY2tlci5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS90aW1lcGlja2VyL3RpbWVwaWNrZXIuaHRtbCIsJzx0YWJsZT5cbgk8dGJvZHk+XG4JCTx0ciBjbGFzcz0idGV4dC1jZW50ZXIiPlxuCQkJPHRkPjxhIG5nLWNsaWNrPSJpbmNyZW1lbnRIb3VycygpIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXVwIj48L3NwYW4+PC9hPjwvdGQ+XG4JCQk8dGQ+Jm5ic3A7PC90ZD5cbgkJCTx0ZD48YSBuZy1jbGljaz0iaW5jcmVtZW50TWludXRlcygpIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXVwIj48L3NwYW4+PC9hPjwvdGQ+XG4JCQk8dGQgbmctc2hvdz0ic2hvd01lcmlkaWFuIj48L3RkPlxuCQk8L3RyPlxuCQk8dHI+XG4JCQk8dGQgc3R5bGU9IndpZHRoOjUwcHg7IiBjbGFzcz0iZm9ybS1ncm91cCIgbmctY2xhc3M9IntcJ2hhcy1lcnJvclwnOiBpbnZhbGlkSG91cnN9Ij5cbgkJCQk8aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9ImhvdXJzIiBuZy1jaGFuZ2U9InVwZGF0ZUhvdXJzKCkiIGNsYXNzPSJmb3JtLWNvbnRyb2wgdGV4dC1jZW50ZXIiIG5nLW1vdXNld2hlZWw9ImluY3JlbWVudEhvdXJzKCkiIG5nLXJlYWRvbmx5PSJyZWFkb25seUlucHV0IiBtYXhsZW5ndGg9IjIiPlxuCQkJPC90ZD5cbgkJCTx0ZD46PC90ZD5cbgkJCTx0ZCBzdHlsZT0id2lkdGg6NTBweDsiIGNsYXNzPSJmb3JtLWdyb3VwIiBuZy1jbGFzcz0ie1wnaGFzLWVycm9yXCc6IGludmFsaWRNaW51dGVzfSI+XG4JCQkJPGlucHV0IHR5cGU9InRleHQiIG5nLW1vZGVsPSJtaW51dGVzIiBuZy1jaGFuZ2U9InVwZGF0ZU1pbnV0ZXMoKSIgY2xhc3M9ImZvcm0tY29udHJvbCB0ZXh0LWNlbnRlciIgbmctcmVhZG9ubHk9InJlYWRvbmx5SW5wdXQiIG1heGxlbmd0aD0iMiI+XG4JCQk8L3RkPlxuCQkJPHRkIG5nLXNob3c9InNob3dNZXJpZGlhbiI+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgdGV4dC1jZW50ZXIiIG5nLWNsaWNrPSJ0b2dnbGVNZXJpZGlhbigpIj57e21lcmlkaWFufX08L2J1dHRvbj48L3RkPlxuCQk8L3RyPlxuCQk8dHIgY2xhc3M9InRleHQtY2VudGVyIj5cbgkJCTx0ZD48YSBuZy1jbGljaz0iZGVjcmVtZW50SG91cnMoKSIgY2xhc3M9ImJ0biBidG4tbGluayI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1kb3duIj48L3NwYW4+PC9hPjwvdGQ+XG4JCQk8dGQ+Jm5ic3A7PC90ZD5cbgkJCTx0ZD48YSBuZy1jbGljaz0iZGVjcmVtZW50TWludXRlcygpIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLWRvd24iPjwvc3Bhbj48L2E+PC90ZD5cbgkJCTx0ZCBuZy1zaG93PSJzaG93TWVyaWRpYW4iPjwvdGQ+XG4JCTwvdHI+XG4JPC90Ym9keT5cbjwvdGFibGU+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1tYXRjaC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLW1hdGNoLmh0bWwiLCc8YSB0YWJpbmRleD0iLTEiIGJpbmQtaHRtbC11bnNhZmU9Im1hdGNoLmxhYmVsIHwgdHlwZWFoZWFkSGlnaGxpZ2h0OnF1ZXJ5Ij48L2E+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtcG9wdXAuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1wb3B1cC5odG1sIiwnPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51IiBuZy1pZj0iaXNPcGVuKCkiIG5nLXN0eWxlPSJ7dG9wOiBwb3NpdGlvbi50b3ArXCdweFwnLCBsZWZ0OiBwb3NpdGlvbi5sZWZ0K1wncHhcJ30iIHN0eWxlPSJkaXNwbGF5OiBibG9jazsiIHJvbGU9Imxpc3Rib3giIGFyaWEtaGlkZGVuPSJ7eyFpc09wZW4oKX19Ij5cbiAgICA8bGkgbmctcmVwZWF0PSJtYXRjaCBpbiBtYXRjaGVzIHRyYWNrIGJ5ICRpbmRleCIgbmctY2xhc3M9InthY3RpdmU6IGlzQWN0aXZlKCRpbmRleCkgfSIgbmctbW91c2VlbnRlcj0ic2VsZWN0QWN0aXZlKCRpbmRleCkiIG5nLWNsaWNrPSJzZWxlY3RNYXRjaCgkaW5kZXgpIiByb2xlPSJvcHRpb24iIGlkPSJ7e21hdGNoLmlkfX0iPlxuICAgICAgICA8ZGl2IHR5cGVhaGVhZC1tYXRjaCBpbmRleD0iJGluZGV4IiBtYXRjaD0ibWF0Y2giIHF1ZXJ5PSJxdWVyeSIgdGVtcGxhdGUtdXJsPSJ0ZW1wbGF0ZVVybCI+PC9kaXY+XG4gICAgPC9saT5cbjwvdWw+JykKK31dKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdWktYm9vdHN0cmFwLXRwbHMtMC4xMS4wLm1pbi5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy91aS1ib290c3RyYXAtdHBscy0wLjExLjAubWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNmE4NjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdWktYm9vdHN0cmFwLXRwbHMtMC4xMS4wLm1pbi5qcwpAQCAtMCwwICsxLDEwIEBACisvKgorICogYW5ndWxhci11aS1ib290c3RyYXAKKyAqIGh0dHA6Ly9hbmd1bGFyLXVpLmdpdGh1Yi5pby9ib290c3RyYXAvCisKKyAqIFZlcnNpb246IDAuMTEuMCAtIDIwMTQtMDUtMDEKKyAqIExpY2Vuc2U6IE1JVAorICovCithbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwIixbInVpLmJvb3RzdHJhcC50cGxzIiwidWkuYm9vdHN0cmFwLnRyYW5zaXRpb24iLCJ1aS5ib290c3RyYXAuY29sbGFwc2UiLCJ1aS5ib290c3RyYXAuYWNjb3JkaW9uIiwidWkuYm9vdHN0cmFwLmFsZXJ0IiwidWkuYm9vdHN0cmFwLmJpbmRIdG1sIiwidWkuYm9vdHN0cmFwLmJ1dHRvbnMiLCJ1aS5ib290c3RyYXAuY2Fyb3VzZWwiLCJ1aS5ib290c3RyYXAuZGF0ZXBhcnNlciIsInVpLmJvb3RzdHJhcC5wb3NpdGlvbiIsInVpLmJvb3RzdHJhcC5kYXRlcGlja2VyIiwidWkuYm9vdHN0cmFwLmRyb3Bkb3duIiwidWkuYm9vdHN0cmFwLm1vZGFsIiwidWkuYm9vdHN0cmFwLnBhZ2luYXRpb24iLCJ1aS5ib290c3RyYXAudG9vbHRpcCIsInVpLmJvb3RzdHJhcC5wb3BvdmVyIiwidWkuYm9vdHN0cmFwLnByb2dyZXNzYmFyIiwidWkuYm9vdHN0cmFwLnJhdGluZyIsInVpLmJvb3RzdHJhcC50YWJzIiwidWkuYm9vdHN0cmFwLnRpbWVwaWNrZXIiLCJ1aS5ib290c3RyYXAudHlwZWFoZWFkIl0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAudHBscyIsWyJ0ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLWdyb3VwLmh0bWwiLCJ0ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLmh0bWwiLCJ0ZW1wbGF0ZS9hbGVydC9hbGVydC5odG1sIiwidGVtcGxhdGUvY2Fyb3VzZWwvY2Fyb3VzZWwuaHRtbCIsInRlbXBsYXRlL2Nhcm91c2VsL3NsaWRlLmh0bWwiLCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RhdGVwaWNrZXIuaHRtbCIsInRlbXBsYXRlL2RhdGVwaWNrZXIvZGF5Lmh0bWwiLCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL21vbnRoLmh0bWwiLCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL3BvcHVwLmh0bWwiLCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL3llYXIuaHRtbCIsInRlbXBsYXRlL21vZGFsL2JhY2tkcm9wLmh0bWwiLCJ0ZW1wbGF0ZS9tb2RhbC93aW5kb3cuaHRtbCIsInRlbXBsYXRlL3BhZ2luYXRpb24vcGFnZXIuaHRtbCIsInRlbXBsYXRlL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5odG1sIiwidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLWh0bWwtdW5zYWZlLXBvcHVwLmh0bWwiLCJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtcG9wdXAuaHRtbCIsInRlbXBsYXRlL3BvcG92ZXIvcG9wb3Zlci5odG1sIiwidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvYmFyLmh0bWwiLCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzcy5odG1sIiwidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIuaHRtbCIsInRlbXBsYXRlL3JhdGluZy9yYXRpbmcuaHRtbCIsInRlbXBsYXRlL3RhYnMvdGFiLmh0bWwiLCJ0ZW1wbGF0ZS90YWJzL3RhYnNldC5odG1sIiwidGVtcGxhdGUvdGltZXBpY2tlci90aW1lcGlja2VyLmh0bWwiLCJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLW1hdGNoLmh0bWwiLCJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLXBvcHVwLmh0bWwiXSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC50cmFuc2l0aW9uIixbXSkuZmFjdG9yeSgiJHRyYW5zaXRpb24iLFsiJHEiLCIkdGltZW91dCIsIiRyb290U2NvcGUiLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2Zvcih2YXIgYiBpbiBhKWlmKHZvaWQgMCE9PWYuc3R5bGVbYl0pcmV0dXJuIGFbYl19dmFyIGU9ZnVuY3Rpb24oZCxmLGcpe2c9Z3x8e307dmFyIGg9YS5kZWZlcigpLGk9ZVtnLmFuaW1hdGlvbj8iYW5pbWF0aW9uRW5kRXZlbnROYW1lIjoidHJhbnNpdGlvbkVuZEV2ZW50TmFtZSJdLGo9ZnVuY3Rpb24oKXtjLiRhcHBseShmdW5jdGlvbigpe2QudW5iaW5kKGksaiksaC5yZXNvbHZlKGQpfSl9O3JldHVybiBpJiZkLmJpbmQoaSxqKSxiKGZ1bmN0aW9uKCl7YW5ndWxhci5pc1N0cmluZyhmKT9kLmFkZENsYXNzKGYpOmFuZ3VsYXIuaXNGdW5jdGlvbihmKT9mKGQpOmFuZ3VsYXIuaXNPYmplY3QoZikmJmQuY3NzKGYpLGl8fGgucmVzb2x2ZShkKX0pLGgucHJvbWlzZS5jYW5jZWw9ZnVuY3Rpb24oKXtpJiZkLnVuYmluZChpLGopLGgucmVqZWN0KCJUcmFuc2l0aW9uIGNhbmNlbGxlZCIpfSxoLnByb21pc2V9LGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHJhbnMiKSxnPXtXZWJraXRUcmFuc2l0aW9uOiJ3ZWJraXRUcmFuc2l0aW9uRW5kIixNb3pUcmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIixPVHJhbnNpdGlvbjoib1RyYW5zaXRpb25FbmQiLHRyYW5zaXRpb246InRyYW5zaXRpb25lbmQifSxoPXtXZWJraXRUcmFuc2l0aW9uOiJ3ZWJraXRBbmltYXRpb25FbmQiLE1velRyYW5zaXRpb246ImFuaW1hdGlvbmVuZCIsT1RyYW5zaXRpb246Im9BbmltYXRpb25FbmQiLHRyYW5zaXRpb246ImFuaW1hdGlvbmVuZCJ9O3JldHVybiBlLnRyYW5zaXRpb25FbmRFdmVudE5hbWU9ZChnKSxlLmFuaW1hdGlvbkVuZEV2ZW50TmFtZT1kKGgpLGV9XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5jb2xsYXBzZSIsWyJ1aS5ib290c3RyYXAudHJhbnNpdGlvbiJdKS5kaXJlY3RpdmUoImNvbGxhcHNlIixbIiR0cmFuc2l0aW9uIixmdW5jdGlvbihhKXtyZXR1cm57bGluazpmdW5jdGlvbihiLGMsZCl7ZnVuY3Rpb24gZShiKXtmdW5jdGlvbiBkKCl7aj09PWUmJihqPXZvaWQgMCl9dmFyIGU9YShjLGIpO3JldHVybiBqJiZqLmNhbmNlbCgpLGo9ZSxlLnRoZW4oZCxkKSxlfWZ1bmN0aW9uIGYoKXtrPyhrPSExLGcoKSk6KGMucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIikuYWRkQ2xhc3MoImNvbGxhcHNpbmciKSxlKHtoZWlnaHQ6Y1swXS5zY3JvbGxIZWlnaHQrInB4In0pLnRoZW4oZykpfWZ1bmN0aW9uIGcoKXtjLnJlbW92ZUNsYXNzKCJjb2xsYXBzaW5nIiksYy5hZGRDbGFzcygiY29sbGFwc2UgaW4iKSxjLmNzcyh7aGVpZ2h0OiJhdXRvIn0pfWZ1bmN0aW9uIGgoKXtpZihrKWs9ITEsaSgpLGMuY3NzKHtoZWlnaHQ6MH0pO2Vsc2V7Yy5jc3Moe2hlaWdodDpjWzBdLnNjcm9sbEhlaWdodCsicHgifSk7e2NbMF0ub2Zmc2V0V2lkdGh9Yy5yZW1vdmVDbGFzcygiY29sbGFwc2UgaW4iKS5hZGRDbGFzcygiY29sbGFwc2luZyIpLGUoe2hlaWdodDowfSkudGhlbihpKX19ZnVuY3Rpb24gaSgpe2MucmVtb3ZlQ2xhc3MoImNvbGxhcHNpbmciKSxjLmFkZENsYXNzKCJjb2xsYXBzZSIpfXZhciBqLGs9ITA7Yi4kd2F0Y2goZC5jb2xsYXBzZSxmdW5jdGlvbihhKXthP2goKTpmKCl9KX19fV0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuYWNjb3JkaW9uIixbInVpLmJvb3RzdHJhcC5jb2xsYXBzZSJdKS5jb25zdGFudCgiYWNjb3JkaW9uQ29uZmlnIix7Y2xvc2VPdGhlcnM6ITB9KS5jb250cm9sbGVyKCJBY2NvcmRpb25Db250cm9sbGVyIixbIiRzY29wZSIsIiRhdHRycyIsImFjY29yZGlvbkNvbmZpZyIsZnVuY3Rpb24oYSxiLGMpe3RoaXMuZ3JvdXBzPVtdLHRoaXMuY2xvc2VPdGhlcnM9ZnVuY3Rpb24oZCl7dmFyIGU9YW5ndWxhci5pc0RlZmluZWQoYi5jbG9zZU90aGVycyk/YS4kZXZhbChiLmNsb3NlT3RoZXJzKTpjLmNsb3NlT3RoZXJzO2UmJmFuZ3VsYXIuZm9yRWFjaCh0aGlzLmdyb3VwcyxmdW5jdGlvbihhKXthIT09ZCYmKGEuaXNPcGVuPSExKX0pfSx0aGlzLmFkZEdyb3VwPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7dGhpcy5ncm91cHMucHVzaChhKSxhLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7Yi5yZW1vdmVHcm91cChhKX0pfSx0aGlzLnJlbW92ZUdyb3VwPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ3JvdXBzLmluZGV4T2YoYSk7LTEhPT1iJiZ0aGlzLmdyb3Vwcy5zcGxpY2UoYiwxKX19XSkuZGlyZWN0aXZlKCJhY2NvcmRpb24iLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsY29udHJvbGxlcjoiQWNjb3JkaW9uQ29udHJvbGxlciIsdHJhbnNjbHVkZTohMCxyZXBsYWNlOiExLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLmh0bWwifX0pLmRpcmVjdGl2ZSgiYWNjb3JkaW9uR3JvdXAiLGZ1bmN0aW9uKCl7cmV0dXJue3JlcXVpcmU6Il5hY2NvcmRpb24iLHJlc3RyaWN0OiJFQSIsdHJhbnNjbHVkZTohMCxyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLWdyb3VwLmh0bWwiLHNjb3BlOntoZWFkaW5nOiJAIixpc09wZW46Ij0/Iixpc0Rpc2FibGVkOiI9PyJ9LGNvbnRyb2xsZXI6ZnVuY3Rpb24oKXt0aGlzLnNldEhlYWRpbmc9ZnVuY3Rpb24oYSl7dGhpcy5oZWFkaW5nPWF9fSxsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2QuYWRkR3JvdXAoYSksYS4kd2F0Y2goImlzT3BlbiIsZnVuY3Rpb24oYil7YiYmZC5jbG9zZU90aGVycyhhKX0pLGEudG9nZ2xlT3Blbj1mdW5jdGlvbigpe2EuaXNEaXNhYmxlZHx8KGEuaXNPcGVuPSFhLmlzT3Blbil9fX19KS5kaXJlY3RpdmUoImFjY29yZGlvbkhlYWRpbmciLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsdHJhbnNjbHVkZTohMCx0ZW1wbGF0ZToiIixyZXBsYWNlOiEwLHJlcXVpcmU6Il5hY2NvcmRpb25Hcm91cCIsbGluazpmdW5jdGlvbihhLGIsYyxkLGUpe2Quc2V0SGVhZGluZyhlKGEsZnVuY3Rpb24oKXt9KSl9fX0pLmRpcmVjdGl2ZSgiYWNjb3JkaW9uVHJhbnNjbHVkZSIsZnVuY3Rpb24oKXtyZXR1cm57cmVxdWlyZToiXmFjY29yZGlvbkdyb3VwIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2EuJHdhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuIGRbYy5hY2NvcmRpb25UcmFuc2NsdWRlXX0sZnVuY3Rpb24oYSl7YSYmKGIuaHRtbCgiIiksYi5hcHBlbmQoYSkpfSl9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuYWxlcnQiLFtdKS5jb250cm9sbGVyKCJBbGVydENvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIixmdW5jdGlvbihhLGIpe2EuY2xvc2VhYmxlPSJjbG9zZSJpbiBifV0pLmRpcmVjdGl2ZSgiYWxlcnQiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsY29udHJvbGxlcjoiQWxlcnRDb250cm9sbGVyIix0ZW1wbGF0ZVVybDoidGVtcGxhdGUvYWxlcnQvYWxlcnQuaHRtbCIsdHJhbnNjbHVkZTohMCxyZXBsYWNlOiEwLHNjb3BlOnt0eXBlOiJAIixjbG9zZToiJiJ9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuYmluZEh0bWwiLFtdKS5kaXJlY3RpdmUoImJpbmRIdG1sVW5zYWZlIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihhLGIsYyl7Yi5hZGRDbGFzcygibmctYmluZGluZyIpLmRhdGEoIiRiaW5kaW5nIixjLmJpbmRIdG1sVW5zYWZlKSxhLiR3YXRjaChjLmJpbmRIdG1sVW5zYWZlLGZ1bmN0aW9uKGEpe2IuaHRtbChhfHwiIil9KX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmJ1dHRvbnMiLFtdKS5jb25zdGFudCgiYnV0dG9uQ29uZmlnIix7YWN0aXZlQ2xhc3M6ImFjdGl2ZSIsdG9nZ2xlRXZlbnQ6ImNsaWNrIn0pLmNvbnRyb2xsZXIoIkJ1dHRvbnNDb250cm9sbGVyIixbImJ1dHRvbkNvbmZpZyIsZnVuY3Rpb24oYSl7dGhpcy5hY3RpdmVDbGFzcz1hLmFjdGl2ZUNsYXNzfHwiYWN0aXZlIix0aGlzLnRvZ2dsZUV2ZW50PWEudG9nZ2xlRXZlbnR8fCJjbGljayJ9XSkuZGlyZWN0aXZlKCJidG5SYWRpbyIsZnVuY3Rpb24oKXtyZXR1cm57cmVxdWlyZTpbImJ0blJhZGlvIiwibmdNb2RlbCJdLGNvbnRyb2xsZXI6IkJ1dHRvbnNDb250cm9sbGVyIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWRbMF0sZj1kWzFdO2YuJHJlbmRlcj1mdW5jdGlvbigpe2IudG9nZ2xlQ2xhc3MoZS5hY3RpdmVDbGFzcyxhbmd1bGFyLmVxdWFscyhmLiRtb2RlbFZhbHVlLGEuJGV2YWwoYy5idG5SYWRpbykpKX0sYi5iaW5kKGUudG9nZ2xlRXZlbnQsZnVuY3Rpb24oKXt2YXIgZD1iLmhhc0NsYXNzKGUuYWN0aXZlQ2xhc3MpOyghZHx8YW5ndWxhci5pc0RlZmluZWQoYy51bmNoZWNrYWJsZSkpJiZhLiRhcHBseShmdW5jdGlvbigpe2YuJHNldFZpZXdWYWx1ZShkP251bGw6YS4kZXZhbChjLmJ0blJhZGlvKSksZi4kcmVuZGVyKCl9KX0pfX19KS5kaXJlY3RpdmUoImJ0bkNoZWNrYm94IixmdW5jdGlvbigpe3JldHVybntyZXF1aXJlOlsiYnRuQ2hlY2tib3giLCJuZ01vZGVsIl0sY29udHJvbGxlcjoiQnV0dG9uc0NvbnRyb2xsZXIiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7ZnVuY3Rpb24gZSgpe3JldHVybiBnKGMuYnRuQ2hlY2tib3hUcnVlLCEwKX1mdW5jdGlvbiBmKCl7cmV0dXJuIGcoYy5idG5DaGVja2JveEZhbHNlLCExKX1mdW5jdGlvbiBnKGIsYyl7dmFyIGQ9YS4kZXZhbChiKTtyZXR1cm4gYW5ndWxhci5pc0RlZmluZWQoZCk/ZDpjfXZhciBoPWRbMF0saT1kWzFdO2kuJHJlbmRlcj1mdW5jdGlvbigpe2IudG9nZ2xlQ2xhc3MoaC5hY3RpdmVDbGFzcyxhbmd1bGFyLmVxdWFscyhpLiRtb2RlbFZhbHVlLGUoKSkpfSxiLmJpbmQoaC50b2dnbGVFdmVudCxmdW5jdGlvbigpe2EuJGFwcGx5KGZ1bmN0aW9uKCl7aS4kc2V0Vmlld1ZhbHVlKGIuaGFzQ2xhc3MoaC5hY3RpdmVDbGFzcyk/ZigpOmUoKSksaS4kcmVuZGVyKCl9KX0pfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmNhcm91c2VsIixbInVpLmJvb3RzdHJhcC50cmFuc2l0aW9uIl0pLmNvbnRyb2xsZXIoIkNhcm91c2VsQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkdGltZW91dCIsIiR0cmFuc2l0aW9uIixmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZCgpe2UoKTt2YXIgYz0rYS5pbnRlcnZhbDshaXNOYU4oYykmJmM+PTAmJihnPWIoZixjKSl9ZnVuY3Rpb24gZSgpe2cmJihiLmNhbmNlbChnKSxnPW51bGwpfWZ1bmN0aW9uIGYoKXtoPyhhLm5leHQoKSxkKCkpOmEucGF1c2UoKX12YXIgZyxoLGk9dGhpcyxqPWkuc2xpZGVzPWEuc2xpZGVzPVtdLGs9LTE7aS5jdXJyZW50U2xpZGU9bnVsbDt2YXIgbD0hMTtpLnNlbGVjdD1hLnNlbGVjdD1mdW5jdGlvbihlLGYpe2Z1bmN0aW9uIGcoKXtpZighbCl7aWYoaS5jdXJyZW50U2xpZGUmJmFuZ3VsYXIuaXNTdHJpbmcoZikmJiFhLm5vVHJhbnNpdGlvbiYmZS4kZWxlbWVudCl7ZS4kZWxlbWVudC5hZGRDbGFzcyhmKTt7ZS4kZWxlbWVudFswXS5vZmZzZXRXaWR0aH1hbmd1bGFyLmZvckVhY2goaixmdW5jdGlvbihhKXthbmd1bGFyLmV4dGVuZChhLHtkaXJlY3Rpb246IiIsZW50ZXJpbmc6ITEsbGVhdmluZzohMSxhY3RpdmU6ITF9KX0pLGFuZ3VsYXIuZXh0ZW5kKGUse2RpcmVjdGlvbjpmLGFjdGl2ZTohMCxlbnRlcmluZzohMH0pLGFuZ3VsYXIuZXh0ZW5kKGkuY3VycmVudFNsaWRlfHx7fSx7ZGlyZWN0aW9uOmYsbGVhdmluZzohMH0pLGEuJGN1cnJlbnRUcmFuc2l0aW9uPWMoZS4kZWxlbWVudCx7fSksZnVuY3Rpb24oYixjKXthLiRjdXJyZW50VHJhbnNpdGlvbi50aGVuKGZ1bmN0aW9uKCl7aChiLGMpfSxmdW5jdGlvbigpe2goYixjKX0pfShlLGkuY3VycmVudFNsaWRlKX1lbHNlIGgoZSxpLmN1cnJlbnRTbGlkZSk7aS5jdXJyZW50U2xpZGU9ZSxrPW0sZCgpfX1mdW5jdGlvbiBoKGIsYyl7YW5ndWxhci5leHRlbmQoYix7ZGlyZWN0aW9uOiIiLGFjdGl2ZTohMCxsZWF2aW5nOiExLGVudGVyaW5nOiExfSksYW5ndWxhci5leHRlbmQoY3x8e30se2RpcmVjdGlvbjoiIixhY3RpdmU6ITEsbGVhdmluZzohMSxlbnRlcmluZzohMX0pLGEuJGN1cnJlbnRUcmFuc2l0aW9uPW51bGx9dmFyIG09ai5pbmRleE9mKGUpO3ZvaWQgMD09PWYmJihmPW0+az8ibmV4dCI6InByZXYiKSxlJiZlIT09aS5jdXJyZW50U2xpZGUmJihhLiRjdXJyZW50VHJhbnNpdGlvbj8oYS4kY3VycmVudFRyYW5zaXRpb24uY2FuY2VsKCksYihnKSk6ZygpKX0sYS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2w9ITB9KSxpLmluZGV4T2ZTbGlkZT1mdW5jdGlvbihhKXtyZXR1cm4gai5pbmRleE9mKGEpfSxhLm5leHQ9ZnVuY3Rpb24oKXt2YXIgYj0oaysxKSVqLmxlbmd0aDtyZXR1cm4gYS4kY3VycmVudFRyYW5zaXRpb24/dm9pZCAwOmkuc2VsZWN0KGpbYl0sIm5leHQiKX0sYS5wcmV2PWZ1bmN0aW9uKCl7dmFyIGI9MD5rLTE/ai5sZW5ndGgtMTprLTE7cmV0dXJuIGEuJGN1cnJlbnRUcmFuc2l0aW9uP3ZvaWQgMDppLnNlbGVjdChqW2JdLCJwcmV2Iil9LGEuaXNBY3RpdmU9ZnVuY3Rpb24oYSl7cmV0dXJuIGkuY3VycmVudFNsaWRlPT09YX0sYS4kd2F0Y2goImludGVydmFsIixkKSxhLiRvbigiJGRlc3Ryb3kiLGUpLGEucGxheT1mdW5jdGlvbigpe2h8fChoPSEwLGQoKSl9LGEucGF1c2U9ZnVuY3Rpb24oKXthLm5vUGF1c2V8fChoPSExLGUoKSl9LGkuYWRkU2xpZGU9ZnVuY3Rpb24oYixjKXtiLiRlbGVtZW50PWMsai5wdXNoKGIpLDE9PT1qLmxlbmd0aHx8Yi5hY3RpdmU/KGkuc2VsZWN0KGpbai5sZW5ndGgtMV0pLDE9PWoubGVuZ3RoJiZhLnBsYXkoKSk6Yi5hY3RpdmU9ITF9LGkucmVtb3ZlU2xpZGU9ZnVuY3Rpb24oYSl7dmFyIGI9ai5pbmRleE9mKGEpO2ouc3BsaWNlKGIsMSksai5sZW5ndGg+MCYmYS5hY3RpdmU/aS5zZWxlY3QoYj49ai5sZW5ndGg/altiLTFdOmpbYl0pOms+YiYmay0tfX1dKS5kaXJlY3RpdmUoImNhcm91c2VsIixbZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIix0cmFuc2NsdWRlOiEwLHJlcGxhY2U6ITAsY29udHJvbGxlcjoiQ2Fyb3VzZWxDb250cm9sbGVyIixyZXF1aXJlOiJjYXJvdXNlbCIsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2Nhcm91c2VsL2Nhcm91c2VsLmh0bWwiLHNjb3BlOntpbnRlcnZhbDoiPSIsbm9UcmFuc2l0aW9uOiI9Iixub1BhdXNlOiI9In19fV0pLmRpcmVjdGl2ZSgic2xpZGUiLGZ1bmN0aW9uKCl7cmV0dXJue3JlcXVpcmU6Il5jYXJvdXNlbCIscmVzdHJpY3Q6IkVBIix0cmFuc2NsdWRlOiEwLHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2Nhcm91c2VsL3NsaWRlLmh0bWwiLHNjb3BlOnthY3RpdmU6Ij0/In0sbGluazpmdW5jdGlvbihhLGIsYyxkKXtkLmFkZFNsaWRlKGEsYiksYS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2QucmVtb3ZlU2xpZGUoYSl9KSxhLiR3YXRjaCgiYWN0aXZlIixmdW5jdGlvbihiKXtiJiZkLnNlbGVjdChhKX0pfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmRhdGVwYXJzZXIiLFtdKS5zZXJ2aWNlKCJkYXRlUGFyc2VyIixbIiRsb2NhbGUiLCJvcmRlckJ5RmlsdGVyIixmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGMpe3JldHVybiAxPT09YiYmYz4yOD8yOT09PWMmJihhJTQ9PT0wJiZhJTEwMCE9PTB8fGElNDAwPT09MCk6Mz09PWJ8fDU9PT1ifHw4PT09Ynx8MTA9PT1iPzMxPmM6ITB9dGhpcy5wYXJzZXJzPXt9O3ZhciBkPXt5eXl5OntyZWdleDoiXFxkezR9IixhcHBseTpmdW5jdGlvbihhKXt0aGlzLnllYXI9K2F9fSx5eTp7cmVnZXg6IlxcZHsyfSIsYXBwbHk6ZnVuY3Rpb24oYSl7dGhpcy55ZWFyPSthKzJlM319LHk6e3JlZ2V4OiJcXGR7MSw0fSIsYXBwbHk6ZnVuY3Rpb24oYSl7dGhpcy55ZWFyPSthfX0sTU1NTTp7cmVnZXg6YS5EQVRFVElNRV9GT1JNQVRTLk1PTlRILmpvaW4oInwiKSxhcHBseTpmdW5jdGlvbihiKXt0aGlzLm1vbnRoPWEuREFURVRJTUVfRk9STUFUUy5NT05USC5pbmRleE9mKGIpfX0sTU1NOntyZWdleDphLkRBVEVUSU1FX0ZPUk1BVFMuU0hPUlRNT05USC5qb2luKCJ8IiksYXBwbHk6ZnVuY3Rpb24oYil7dGhpcy5tb250aD1hLkRBVEVUSU1FX0ZPUk1BVFMuU0hPUlRNT05USC5pbmRleE9mKGIpfX0sTU06e3JlZ2V4OiIwWzEtOV18MVswLTJdIixhcHBseTpmdW5jdGlvbihhKXt0aGlzLm1vbnRoPWEtMX19LE06e3JlZ2V4OiJbMS05XXwxWzAtMl0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMubW9udGg9YS0xfX0sZGQ6e3JlZ2V4OiJbMC0yXVswLTldezF9fDNbMC0xXXsxfSIsYXBwbHk6ZnVuY3Rpb24oYSl7dGhpcy5kYXRlPSthfX0sZDp7cmVnZXg6IlsxLTJdP1swLTldezF9fDNbMC0xXXsxfSIsYXBwbHk6ZnVuY3Rpb24oYSl7dGhpcy5kYXRlPSthfX0sRUVFRTp7cmVnZXg6YS5EQVRFVElNRV9GT1JNQVRTLkRBWS5qb2luKCJ8Iil9LEVFRTp7cmVnZXg6YS5EQVRFVElNRV9GT1JNQVRTLlNIT1JUREFZLmpvaW4oInwiKX19O3RoaXMuY3JlYXRlUGFyc2VyPWZ1bmN0aW9uKGEpe3ZhciBjPVtdLGU9YS5zcGxpdCgiIik7cmV0dXJuIGFuZ3VsYXIuZm9yRWFjaChkLGZ1bmN0aW9uKGIsZCl7dmFyIGY9YS5pbmRleE9mKGQpO2lmKGY+LTEpe2E9YS5zcGxpdCgiIiksZVtmXT0iKCIrYi5yZWdleCsiKSIsYVtmXT0iJCI7Zm9yKHZhciBnPWYrMSxoPWYrZC5sZW5ndGg7aD5nO2crKyllW2ddPSIiLGFbZ109IiQiO2E9YS5qb2luKCIiKSxjLnB1c2goe2luZGV4OmYsYXBwbHk6Yi5hcHBseX0pfX0pLHtyZWdleDpuZXcgUmVnRXhwKCJeIitlLmpvaW4oIiIpKyIkIiksbWFwOmIoYywiaW5kZXgiKX19LHRoaXMucGFyc2U9ZnVuY3Rpb24oYixkKXtpZighYW5ndWxhci5pc1N0cmluZyhiKSlyZXR1cm4gYjtkPWEuREFURVRJTUVfRk9STUFUU1tkXXx8ZCx0aGlzLnBhcnNlcnNbZF18fCh0aGlzLnBhcnNlcnNbZF09dGhpcy5jcmVhdGVQYXJzZXIoZCkpO3ZhciBlPXRoaXMucGFyc2Vyc1tkXSxmPWUucmVnZXgsZz1lLm1hcCxoPWIubWF0Y2goZik7aWYoaCYmaC5sZW5ndGgpe2Zvcih2YXIgaSxqPXt5ZWFyOjE5MDAsbW9udGg6MCxkYXRlOjEsaG91cnM6MH0saz0xLGw9aC5sZW5ndGg7bD5rO2srKyl7dmFyIG09Z1trLTFdO20uYXBwbHkmJm0uYXBwbHkuY2FsbChqLGhba10pfXJldHVybiBjKGoueWVhcixqLm1vbnRoLGouZGF0ZSkmJihpPW5ldyBEYXRlKGoueWVhcixqLm1vbnRoLGouZGF0ZSxqLmhvdXJzKSksaX19fV0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAucG9zaXRpb24iLFtdKS5mYWN0b3J5KCIkcG9zaXRpb24iLFsiJGRvY3VtZW50IiwiJHdpbmRvdyIsZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYyl7cmV0dXJuIGEuY3VycmVudFN0eWxlP2EuY3VycmVudFN0eWxlW2NdOmIuZ2V0Q29tcHV0ZWRTdHlsZT9iLmdldENvbXB1dGVkU3R5bGUoYSlbY106YS5zdHlsZVtjXX1mdW5jdGlvbiBkKGEpe3JldHVybiJzdGF0aWMiPT09KGMoYSwicG9zaXRpb24iKXx8InN0YXRpYyIpfXZhciBlPWZ1bmN0aW9uKGIpe2Zvcih2YXIgYz1hWzBdLGU9Yi5vZmZzZXRQYXJlbnR8fGM7ZSYmZSE9PWMmJmQoZSk7KWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fGN9O3JldHVybntwb3NpdGlvbjpmdW5jdGlvbihiKXt2YXIgYz10aGlzLm9mZnNldChiKSxkPXt0b3A6MCxsZWZ0OjB9LGY9ZShiWzBdKTtmIT1hWzBdJiYoZD10aGlzLm9mZnNldChhbmd1bGFyLmVsZW1lbnQoZikpLGQudG9wKz1mLmNsaWVudFRvcC1mLnNjcm9sbFRvcCxkLmxlZnQrPWYuY2xpZW50TGVmdC1mLnNjcm9sbExlZnQpO3ZhciBnPWJbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3dpZHRoOmcud2lkdGh8fGIucHJvcCgib2Zmc2V0V2lkdGgiKSxoZWlnaHQ6Zy5oZWlnaHR8fGIucHJvcCgib2Zmc2V0SGVpZ2h0IiksdG9wOmMudG9wLWQudG9wLGxlZnQ6Yy5sZWZ0LWQubGVmdH19LG9mZnNldDpmdW5jdGlvbihjKXt2YXIgZD1jWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt3aWR0aDpkLndpZHRofHxjLnByb3AoIm9mZnNldFdpZHRoIiksaGVpZ2h0OmQuaGVpZ2h0fHxjLnByb3AoIm9mZnNldEhlaWdodCIpLHRvcDpkLnRvcCsoYi5wYWdlWU9mZnNldHx8YVswXS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKSxsZWZ0OmQubGVmdCsoYi5wYWdlWE9mZnNldHx8YVswXS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCl9fSxwb3NpdGlvbkVsZW1lbnRzOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoLGk9Yy5zcGxpdCgiLSIpLGo9aVswXSxrPWlbMV18fCJjZW50ZXIiO2U9ZD90aGlzLm9mZnNldChhKTp0aGlzLnBvc2l0aW9uKGEpLGY9Yi5wcm9wKCJvZmZzZXRXaWR0aCIpLGc9Yi5wcm9wKCJvZmZzZXRIZWlnaHQiKTt2YXIgbD17Y2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIGUubGVmdCtlLndpZHRoLzItZi8yfSxsZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIGUubGVmdH0scmlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5sZWZ0K2Uud2lkdGh9fSxtPXtjZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gZS50b3ArZS5oZWlnaHQvMi1nLzJ9LHRvcDpmdW5jdGlvbigpe3JldHVybiBlLnRvcH0sYm90dG9tOmZ1bmN0aW9uKCl7cmV0dXJuIGUudG9wK2UuaGVpZ2h0fX07c3dpdGNoKGope2Nhc2UicmlnaHQiOmg9e3RvcDptW2tdKCksbGVmdDpsW2pdKCl9O2JyZWFrO2Nhc2UibGVmdCI6aD17dG9wOm1ba10oKSxsZWZ0OmUubGVmdC1mfTticmVhaztjYXNlImJvdHRvbSI6aD17dG9wOm1bal0oKSxsZWZ0Omxba10oKX07YnJlYWs7ZGVmYXVsdDpoPXt0b3A6ZS50b3AtZyxsZWZ0Omxba10oKX19cmV0dXJuIGh9fX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmRhdGVwaWNrZXIiLFsidWkuYm9vdHN0cmFwLmRhdGVwYXJzZXIiLCJ1aS5ib290c3RyYXAucG9zaXRpb24iXSkuY29uc3RhbnQoImRhdGVwaWNrZXJDb25maWciLHtmb3JtYXREYXk6ImRkIixmb3JtYXRNb250aDoiTU1NTSIsZm9ybWF0WWVhcjoieXl5eSIsZm9ybWF0RGF5SGVhZGVyOiJFRUUiLGZvcm1hdERheVRpdGxlOiJNTU1NIHl5eXkiLGZvcm1hdE1vbnRoVGl0bGU6Inl5eXkiLGRhdGVwaWNrZXJNb2RlOiJkYXkiLG1pbk1vZGU6ImRheSIsbWF4TW9kZToieWVhciIsc2hvd1dlZWtzOiEwLHN0YXJ0aW5nRGF5OjAseWVhclJhbmdlOjIwLG1pbkRhdGU6bnVsbCxtYXhEYXRlOm51bGx9KS5jb250cm9sbGVyKCJEYXRlcGlja2VyQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCIkcGFyc2UiLCIkaW50ZXJwb2xhdGUiLCIkdGltZW91dCIsIiRsb2ciLCJkYXRlRmlsdGVyIiwiZGF0ZXBpY2tlckNvbmZpZyIsZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXt2YXIgaT10aGlzLGo9eyRzZXRWaWV3VmFsdWU6YW5ndWxhci5ub29wfTt0aGlzLm1vZGVzPVsiZGF5IiwibW9udGgiLCJ5ZWFyIl0sYW5ndWxhci5mb3JFYWNoKFsiZm9ybWF0RGF5IiwiZm9ybWF0TW9udGgiLCJmb3JtYXRZZWFyIiwiZm9ybWF0RGF5SGVhZGVyIiwiZm9ybWF0RGF5VGl0bGUiLCJmb3JtYXRNb250aFRpdGxlIiwibWluTW9kZSIsIm1heE1vZGUiLCJzaG93V2Vla3MiLCJzdGFydGluZ0RheSIsInllYXJSYW5nZSJdLGZ1bmN0aW9uKGMsZSl7aVtjXT1hbmd1bGFyLmlzRGVmaW5lZChiW2NdKT84PmU/ZChiW2NdKShhLiRwYXJlbnQpOmEuJHBhcmVudC4kZXZhbChiW2NdKTpoW2NdfSksYW5ndWxhci5mb3JFYWNoKFsibWluRGF0ZSIsIm1heERhdGUiXSxmdW5jdGlvbihkKXtiW2RdP2EuJHBhcmVudC4kd2F0Y2goYyhiW2RdKSxmdW5jdGlvbihhKXtpW2RdPWE/bmV3IERhdGUoYSk6bnVsbCxpLnJlZnJlc2hWaWV3KCl9KTppW2RdPWhbZF0/bmV3IERhdGUoaFtkXSk6bnVsbH0pLGEuZGF0ZXBpY2tlck1vZGU9YS5kYXRlcGlja2VyTW9kZXx8aC5kYXRlcGlja2VyTW9kZSxhLnVuaXF1ZUlkPSJkYXRlcGlja2VyLSIrYS4kaWQrIi0iK01hdGguZmxvb3IoMWU0Kk1hdGgucmFuZG9tKCkpLHRoaXMuYWN0aXZlRGF0ZT1hbmd1bGFyLmlzRGVmaW5lZChiLmluaXREYXRlKT9hLiRwYXJlbnQuJGV2YWwoYi5pbml0RGF0ZSk6bmV3IERhdGUsYS5pc0FjdGl2ZT1mdW5jdGlvbihiKXtyZXR1cm4gMD09PWkuY29tcGFyZShiLmRhdGUsaS5hY3RpdmVEYXRlKT8oYS5hY3RpdmVEYXRlSWQ9Yi51aWQsITApOiExfSx0aGlzLmluaXQ9ZnVuY3Rpb24oYSl7aj1hLGouJHJlbmRlcj1mdW5jdGlvbigpe2kucmVuZGVyKCl9fSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe2lmKGouJG1vZGVsVmFsdWUpe3ZhciBhPW5ldyBEYXRlKGouJG1vZGVsVmFsdWUpLGI9IWlzTmFOKGEpO2I/dGhpcy5hY3RpdmVEYXRlPWE6Zi5lcnJvcignRGF0ZXBpY2tlciBkaXJlY3RpdmU6ICJuZy1tb2RlbCIgdmFsdWUgbXVzdCBiZSBhIERhdGUgb2JqZWN0LCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgMDEuMDEuMTk3MCBvciBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4gUkZDMjgyMiBvciBJU08gODYwMSBkYXRlLicpLGouJHNldFZhbGlkaXR5KCJkYXRlIixiKX10aGlzLnJlZnJlc2hWaWV3KCl9LHRoaXMucmVmcmVzaFZpZXc9ZnVuY3Rpb24oKXtpZih0aGlzLmVsZW1lbnQpe3RoaXMuX3JlZnJlc2hWaWV3KCk7dmFyIGE9ai4kbW9kZWxWYWx1ZT9uZXcgRGF0ZShqLiRtb2RlbFZhbHVlKTpudWxsO2ouJHNldFZhbGlkaXR5KCJkYXRlLWRpc2FibGVkIiwhYXx8dGhpcy5lbGVtZW50JiYhdGhpcy5pc0Rpc2FibGVkKGEpKX19LHRoaXMuY3JlYXRlRGF0ZU9iamVjdD1mdW5jdGlvbihhLGIpe3ZhciBjPWouJG1vZGVsVmFsdWU/bmV3IERhdGUoai4kbW9kZWxWYWx1ZSk6bnVsbDtyZXR1cm57ZGF0ZTphLGxhYmVsOmcoYSxiKSxzZWxlY3RlZDpjJiYwPT09dGhpcy5jb21wYXJlKGEsYyksZGlzYWJsZWQ6dGhpcy5pc0Rpc2FibGVkKGEpLGN1cnJlbnQ6MD09PXRoaXMuY29tcGFyZShhLG5ldyBEYXRlKX19LHRoaXMuaXNEaXNhYmxlZD1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5taW5EYXRlJiZ0aGlzLmNvbXBhcmUoYyx0aGlzLm1pbkRhdGUpPDB8fHRoaXMubWF4RGF0ZSYmdGhpcy5jb21wYXJlKGMsdGhpcy5tYXhEYXRlKT4wfHxiLmRhdGVEaXNhYmxlZCYmYS5kYXRlRGlzYWJsZWQoe2RhdGU6Yyxtb2RlOmEuZGF0ZXBpY2tlck1vZGV9KX0sdGhpcy5zcGxpdD1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXTthLmxlbmd0aD4wOyljLnB1c2goYS5zcGxpY2UoMCxiKSk7cmV0dXJuIGN9LGEuc2VsZWN0PWZ1bmN0aW9uKGIpe2lmKGEuZGF0ZXBpY2tlck1vZGU9PT1pLm1pbk1vZGUpe3ZhciBjPWouJG1vZGVsVmFsdWU/bmV3IERhdGUoai4kbW9kZWxWYWx1ZSk6bmV3IERhdGUoMCwwLDAsMCwwLDAsMCk7Yy5zZXRGdWxsWWVhcihiLmdldEZ1bGxZZWFyKCksYi5nZXRNb250aCgpLGIuZ2V0RGF0ZSgpKSxqLiRzZXRWaWV3VmFsdWUoYyksai4kcmVuZGVyKCl9ZWxzZSBpLmFjdGl2ZURhdGU9YixhLmRhdGVwaWNrZXJNb2RlPWkubW9kZXNbaS5tb2Rlcy5pbmRleE9mKGEuZGF0ZXBpY2tlck1vZGUpLTFdfSxhLm1vdmU9ZnVuY3Rpb24oYSl7dmFyIGI9aS5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkrYSooaS5zdGVwLnllYXJzfHwwKSxjPWkuYWN0aXZlRGF0ZS5nZXRNb250aCgpK2EqKGkuc3RlcC5tb250aHN8fDApO2kuYWN0aXZlRGF0ZS5zZXRGdWxsWWVhcihiLGMsMSksaS5yZWZyZXNoVmlldygpfSxhLnRvZ2dsZU1vZGU9ZnVuY3Rpb24oYil7Yj1ifHwxLGEuZGF0ZXBpY2tlck1vZGU9PT1pLm1heE1vZGUmJjE9PT1ifHxhLmRhdGVwaWNrZXJNb2RlPT09aS5taW5Nb2RlJiYtMT09PWJ8fChhLmRhdGVwaWNrZXJNb2RlPWkubW9kZXNbaS5tb2Rlcy5pbmRleE9mKGEuZGF0ZXBpY2tlck1vZGUpK2JdKX0sYS5rZXlzPXsxMzoiZW50ZXIiLDMyOiJzcGFjZSIsMzM6InBhZ2V1cCIsMzQ6InBhZ2Vkb3duIiwzNToiZW5kIiwzNjoiaG9tZSIsMzc6ImxlZnQiLDM4OiJ1cCIsMzk6InJpZ2h0Iiw0MDoiZG93biJ9O3ZhciBrPWZ1bmN0aW9uKCl7ZShmdW5jdGlvbigpe2kuZWxlbWVudFswXS5mb2N1cygpfSwwLCExKX07YS4kb24oImRhdGVwaWNrZXIuZm9jdXMiLGspLGEua2V5ZG93bj1mdW5jdGlvbihiKXt2YXIgYz1hLmtleXNbYi53aGljaF07aWYoYyYmIWIuc2hpZnRLZXkmJiFiLmFsdEtleSlpZihiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKSwiZW50ZXIiPT09Y3x8InNwYWNlIj09PWMpe2lmKGkuaXNEaXNhYmxlZChpLmFjdGl2ZURhdGUpKXJldHVybjthLnNlbGVjdChpLmFjdGl2ZURhdGUpLGsoKX1lbHNlIWIuY3RybEtleXx8InVwIiE9PWMmJiJkb3duIiE9PWM/KGkuaGFuZGxlS2V5RG93bihjLGIpLGkucmVmcmVzaFZpZXcoKSk6KGEudG9nZ2xlTW9kZSgidXAiPT09Yz8xOi0xKSxrKCkpfX1dKS5kaXJlY3RpdmUoImRhdGVwaWNrZXIiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmh0bWwiLHNjb3BlOntkYXRlcGlja2VyTW9kZToiPT8iLGRhdGVEaXNhYmxlZDoiJiJ9LHJlcXVpcmU6WyJkYXRlcGlja2VyIiwiP15uZ01vZGVsIl0sY29udHJvbGxlcjoiRGF0ZXBpY2tlckNvbnRyb2xsZXIiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ZFswXSxmPWRbMV07ZiYmZS5pbml0KGYpfX19KS5kaXJlY3RpdmUoImRheXBpY2tlciIsWyJkYXRlRmlsdGVyIixmdW5jdGlvbihhKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RheS5odG1sIixyZXF1aXJlOiJeZGF0ZXBpY2tlciIsbGluazpmdW5jdGlvbihiLGMsZCxlKXtmdW5jdGlvbiBmKGEsYil7cmV0dXJuIDEhPT1ifHxhJTQhPT0wfHxhJTEwMD09PTAmJmElNDAwIT09MD9pW2JdOjI5fWZ1bmN0aW9uIGcoYSxiKXt2YXIgYz1uZXcgQXJyYXkoYiksZD1uZXcgRGF0ZShhKSxlPTA7Zm9yKGQuc2V0SG91cnMoMTIpO2I+ZTspY1tlKytdPW5ldyBEYXRlKGQpLGQuc2V0RGF0ZShkLmdldERhdGUoKSsxKTtyZXR1cm4gY31mdW5jdGlvbiBoKGEpe3ZhciBiPW5ldyBEYXRlKGEpO2Iuc2V0RGF0ZShiLmdldERhdGUoKSs0LShiLmdldERheSgpfHw3KSk7dmFyIGM9Yi5nZXRUaW1lKCk7cmV0dXJuIGIuc2V0TW9udGgoMCksYi5zZXREYXRlKDEpLE1hdGguZmxvb3IoTWF0aC5yb3VuZCgoYy1iKS84NjRlNSkvNykrMX1iLnNob3dXZWVrcz1lLnNob3dXZWVrcyxlLnN0ZXA9e21vbnRoczoxfSxlLmVsZW1lbnQ9Yzt2YXIgaT1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdO2UuX3JlZnJlc2hWaWV3PWZ1bmN0aW9uKCl7dmFyIGM9ZS5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksZD1lLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSxmPW5ldyBEYXRlKGMsZCwxKSxpPWUuc3RhcnRpbmdEYXktZi5nZXREYXkoKSxqPWk+MD83LWk6LWksaz1uZXcgRGF0ZShmKTtqPjAmJmsuc2V0RGF0ZSgtaisxKTtmb3IodmFyIGw9ZyhrLDQyKSxtPTA7NDI+bTttKyspbFttXT1hbmd1bGFyLmV4dGVuZChlLmNyZWF0ZURhdGVPYmplY3QobFttXSxlLmZvcm1hdERheSkse3NlY29uZGFyeTpsW21dLmdldE1vbnRoKCkhPT1kLHVpZDpiLnVuaXF1ZUlkKyItIittfSk7Yi5sYWJlbHM9bmV3IEFycmF5KDcpO2Zvcih2YXIgbj0wOzc+bjtuKyspYi5sYWJlbHNbbl09e2FiYnI6YShsW25dLmRhdGUsZS5mb3JtYXREYXlIZWFkZXIpLGZ1bGw6YShsW25dLmRhdGUsIkVFRUUiKX07aWYoYi50aXRsZT1hKGUuYWN0aXZlRGF0ZSxlLmZvcm1hdERheVRpdGxlKSxiLnJvd3M9ZS5zcGxpdChsLDcpLGIuc2hvd1dlZWtzKXtiLndlZWtOdW1iZXJzPVtdO2Zvcih2YXIgbz1oKGIucm93c1swXVswXS5kYXRlKSxwPWIucm93cy5sZW5ndGg7Yi53ZWVrTnVtYmVycy5wdXNoKG8rKyk8cDspO319LGUuY29tcGFyZT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksYS5nZXRNb250aCgpLGEuZ2V0RGF0ZSgpKS1uZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksYi5nZXRNb250aCgpLGIuZ2V0RGF0ZSgpKX0sZS5oYW5kbGVLZXlEb3duPWZ1bmN0aW9uKGEpe3ZhciBiPWUuYWN0aXZlRGF0ZS5nZXREYXRlKCk7aWYoImxlZnQiPT09YSliLT0xO2Vsc2UgaWYoInVwIj09PWEpYi09NztlbHNlIGlmKCJyaWdodCI9PT1hKWIrPTE7ZWxzZSBpZigiZG93biI9PT1hKWIrPTc7ZWxzZSBpZigicGFnZXVwIj09PWF8fCJwYWdlZG93biI9PT1hKXt2YXIgYz1lLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSsoInBhZ2V1cCI9PT1hPy0xOjEpO2UuYWN0aXZlRGF0ZS5zZXRNb250aChjLDEpLGI9TWF0aC5taW4oZihlLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSxlLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSksYil9ZWxzZSJob21lIj09PWE/Yj0xOiJlbmQiPT09YSYmKGI9ZihlLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSxlLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSkpO2UuYWN0aXZlRGF0ZS5zZXREYXRlKGIpfSxlLnJlZnJlc2hWaWV3KCl9fX1dKS5kaXJlY3RpdmUoIm1vbnRocGlja2VyIixbImRhdGVGaWx0ZXIiLGZ1bmN0aW9uKGEpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2RhdGVwaWNrZXIvbW9udGguaHRtbCIscmVxdWlyZToiXmRhdGVwaWNrZXIiLGxpbms6ZnVuY3Rpb24oYixjLGQsZSl7ZS5zdGVwPXt5ZWFyczoxfSxlLmVsZW1lbnQ9YyxlLl9yZWZyZXNoVmlldz1mdW5jdGlvbigpe2Zvcih2YXIgYz1uZXcgQXJyYXkoMTIpLGQ9ZS5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksZj0wOzEyPmY7ZisrKWNbZl09YW5ndWxhci5leHRlbmQoZS5jcmVhdGVEYXRlT2JqZWN0KG5ldyBEYXRlKGQsZiwxKSxlLmZvcm1hdE1vbnRoKSx7dWlkOmIudW5pcXVlSWQrIi0iK2Z9KTtiLnRpdGxlPWEoZS5hY3RpdmVEYXRlLGUuZm9ybWF0TW9udGhUaXRsZSksYi5yb3dzPWUuc3BsaXQoYywzKX0sZS5jb21wYXJlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBEYXRlKGEuZ2V0RnVsbFllYXIoKSxhLmdldE1vbnRoKCkpLW5ldyBEYXRlKGIuZ2V0RnVsbFllYXIoKSxiLmdldE1vbnRoKCkpfSxlLmhhbmRsZUtleURvd249ZnVuY3Rpb24oYSl7dmFyIGI9ZS5hY3RpdmVEYXRlLmdldE1vbnRoKCk7aWYoImxlZnQiPT09YSliLT0xO2Vsc2UgaWYoInVwIj09PWEpYi09MztlbHNlIGlmKCJyaWdodCI9PT1hKWIrPTE7ZWxzZSBpZigiZG93biI9PT1hKWIrPTM7ZWxzZSBpZigicGFnZXVwIj09PWF8fCJwYWdlZG93biI9PT1hKXt2YXIgYz1lLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSsoInBhZ2V1cCI9PT1hPy0xOjEpO2UuYWN0aXZlRGF0ZS5zZXRGdWxsWWVhcihjKX1lbHNlImhvbWUiPT09YT9iPTA6ImVuZCI9PT1hJiYoYj0xMSk7ZS5hY3RpdmVEYXRlLnNldE1vbnRoKGIpfSxlLnJlZnJlc2hWaWV3KCl9fX1dKS5kaXJlY3RpdmUoInllYXJwaWNrZXIiLFsiZGF0ZUZpbHRlciIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9kYXRlcGlja2VyL3llYXIuaHRtbCIscmVxdWlyZToiXmRhdGVwaWNrZXIiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7ZnVuY3Rpb24gZShhKXtyZXR1cm4gcGFyc2VJbnQoKGEtMSkvZiwxMCkqZisxfXZhciBmPWQueWVhclJhbmdlO2Quc3RlcD17eWVhcnM6Zn0sZC5lbGVtZW50PWIsZC5fcmVmcmVzaFZpZXc9ZnVuY3Rpb24oKXtmb3IodmFyIGI9bmV3IEFycmF5KGYpLGM9MCxnPWUoZC5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkpO2Y+YztjKyspYltjXT1hbmd1bGFyLmV4dGVuZChkLmNyZWF0ZURhdGVPYmplY3QobmV3IERhdGUoZytjLDAsMSksZC5mb3JtYXRZZWFyKSx7dWlkOmEudW5pcXVlSWQrIi0iK2N9KTthLnRpdGxlPVtiWzBdLmxhYmVsLGJbZi0xXS5sYWJlbF0uam9pbigiIC0gIiksYS5yb3dzPWQuc3BsaXQoYiw1KX0sZC5jb21wYXJlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZ2V0RnVsbFllYXIoKS1iLmdldEZ1bGxZZWFyKCl9LGQuaGFuZGxlS2V5RG93bj1mdW5jdGlvbihhKXt2YXIgYj1kLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKTsibGVmdCI9PT1hP2ItPTE6InVwIj09PWE/Yi09NToicmlnaHQiPT09YT9iKz0xOiJkb3duIj09PWE/Yis9NToicGFnZXVwIj09PWF8fCJwYWdlZG93biI9PT1hP2IrPSgicGFnZXVwIj09PWE/LTE6MSkqZC5zdGVwLnllYXJzOiJob21lIj09PWE/Yj1lKGQuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKToiZW5kIj09PWEmJihiPWUoZC5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkpK2YtMSksZC5hY3RpdmVEYXRlLnNldEZ1bGxZZWFyKGIpfSxkLnJlZnJlc2hWaWV3KCl9fX1dKS5jb25zdGFudCgiZGF0ZXBpY2tlclBvcHVwQ29uZmlnIix7ZGF0ZXBpY2tlclBvcHVwOiJ5eXl5LU1NLWRkIixjdXJyZW50VGV4dDoiVG9kYXkiLGNsZWFyVGV4dDoiQ2xlYXIiLGNsb3NlVGV4dDoiRG9uZSIsY2xvc2VPbkRhdGVTZWxlY3Rpb246ITAsYXBwZW5kVG9Cb2R5OiExLHNob3dCdXR0b25CYXI6ITB9KS5kaXJlY3RpdmUoImRhdGVwaWNrZXJQb3B1cCIsWyIkY29tcGlsZSIsIiRwYXJzZSIsIiRkb2N1bWVudCIsIiRwb3NpdGlvbiIsImRhdGVGaWx0ZXIiLCJkYXRlUGFyc2VyIiwiZGF0ZXBpY2tlclBvcHVwQ29uZmlnIixmdW5jdGlvbihhLGIsYyxkLGUsZixnKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXF1aXJlOiJuZ01vZGVsIixzY29wZTp7aXNPcGVuOiI9PyIsY3VycmVudFRleHQ6IkAiLGNsZWFyVGV4dDoiQCIsY2xvc2VUZXh0OiJAIixkYXRlRGlzYWJsZWQ6IiYifSxsaW5rOmZ1bmN0aW9uKGgsaSxqLGspe2Z1bmN0aW9uIGwoYSl7cmV0dXJuIGEucmVwbGFjZSgvKFtBLVpdKS9nLGZ1bmN0aW9uKGEpe3JldHVybiItIithLnRvTG93ZXJDYXNlKCl9KX1mdW5jdGlvbiBtKGEpe2lmKGEpe2lmKGFuZ3VsYXIuaXNEYXRlKGEpJiYhaXNOYU4oYSkpcmV0dXJuIGsuJHNldFZhbGlkaXR5KCJkYXRlIiwhMCksYTtpZihhbmd1bGFyLmlzU3RyaW5nKGEpKXt2YXIgYj1mLnBhcnNlKGEsbil8fG5ldyBEYXRlKGEpO3JldHVybiBpc05hTihiKT92b2lkIGsuJHNldFZhbGlkaXR5KCJkYXRlIiwhMSk6KGsuJHNldFZhbGlkaXR5KCJkYXRlIiwhMCksYil9cmV0dXJuIHZvaWQgay4kc2V0VmFsaWRpdHkoImRhdGUiLCExKX1yZXR1cm4gay4kc2V0VmFsaWRpdHkoImRhdGUiLCEwKSxudWxsfXZhciBuLG89YW5ndWxhci5pc0RlZmluZWQoai5jbG9zZU9uRGF0ZVNlbGVjdGlvbik/aC4kcGFyZW50LiRldmFsKGouY2xvc2VPbkRhdGVTZWxlY3Rpb24pOmcuY2xvc2VPbkRhdGVTZWxlY3Rpb24scD1hbmd1bGFyLmlzRGVmaW5lZChqLmRhdGVwaWNrZXJBcHBlbmRUb0JvZHkpP2guJHBhcmVudC4kZXZhbChqLmRhdGVwaWNrZXJBcHBlbmRUb0JvZHkpOmcuYXBwZW5kVG9Cb2R5O2guc2hvd0J1dHRvbkJhcj1hbmd1bGFyLmlzRGVmaW5lZChqLnNob3dCdXR0b25CYXIpP2guJHBhcmVudC4kZXZhbChqLnNob3dCdXR0b25CYXIpOmcuc2hvd0J1dHRvbkJhcixoLmdldFRleHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGhbYSsiVGV4dCJdfHxnW2ErIlRleHQiXX0sai4kb2JzZXJ2ZSgiZGF0ZXBpY2tlclBvcHVwIixmdW5jdGlvbihhKXtuPWF8fGcuZGF0ZXBpY2tlclBvcHVwLGsuJHJlbmRlcigpfSk7dmFyIHE9YW5ndWxhci5lbGVtZW50KCI8ZGl2IGRhdGVwaWNrZXItcG9wdXAtd3JhcD48ZGl2IGRhdGVwaWNrZXI+PC9kaXY+PC9kaXY+Iik7cS5hdHRyKHsibmctbW9kZWwiOiJkYXRlIiwibmctY2hhbmdlIjoiZGF0ZVNlbGVjdGlvbigpIn0pO3ZhciByPWFuZ3VsYXIuZWxlbWVudChxLmNoaWxkcmVuKClbMF0pO2ouZGF0ZXBpY2tlck9wdGlvbnMmJmFuZ3VsYXIuZm9yRWFjaChoLiRwYXJlbnQuJGV2YWwoai5kYXRlcGlja2VyT3B0aW9ucyksZnVuY3Rpb24oYSxiKXtyLmF0dHIobChiKSxhKX0pLGFuZ3VsYXIuZm9yRWFjaChbIm1pbkRhdGUiLCJtYXhEYXRlIl0sZnVuY3Rpb24oYSl7althXSYmKGguJHBhcmVudC4kd2F0Y2goYihqW2FdKSxmdW5jdGlvbihiKXtoW2FdPWJ9KSxyLmF0dHIobChhKSxhKSl9KSxqLmRhdGVEaXNhYmxlZCYmci5hdHRyKCJkYXRlLWRpc2FibGVkIiwiZGF0ZURpc2FibGVkKHsgZGF0ZTogZGF0ZSwgbW9kZTogbW9kZSB9KSIpLGsuJHBhcnNlcnMudW5zaGlmdChtKSxoLmRhdGVTZWxlY3Rpb249ZnVuY3Rpb24oYSl7YW5ndWxhci5pc0RlZmluZWQoYSkmJihoLmRhdGU9YSksay4kc2V0Vmlld1ZhbHVlKGguZGF0ZSksay4kcmVuZGVyKCksbyYmKGguaXNPcGVuPSExLGlbMF0uZm9jdXMoKSl9LGkuYmluZCgiaW5wdXQgY2hhbmdlIGtleXVwIixmdW5jdGlvbigpe2guJGFwcGx5KGZ1bmN0aW9uKCl7aC5kYXRlPWsuJG1vZGVsVmFsdWV9KX0pLGsuJHJlbmRlcj1mdW5jdGlvbigpe3ZhciBhPWsuJHZpZXdWYWx1ZT9lKGsuJHZpZXdWYWx1ZSxuKToiIjtpLnZhbChhKSxoLmRhdGU9bShrLiRtb2RlbFZhbHVlKX07dmFyIHM9ZnVuY3Rpb24oYSl7aC5pc09wZW4mJmEudGFyZ2V0IT09aVswXSYmaC4kYXBwbHkoZnVuY3Rpb24oKXtoLmlzT3Blbj0hMX0pfSx0PWZ1bmN0aW9uKGEpe2gua2V5ZG93bihhKX07aS5iaW5kKCJrZXlkb3duIix0KSxoLmtleWRvd249ZnVuY3Rpb24oYSl7Mjc9PT1hLndoaWNoPyhhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSxoLmNsb3NlKCkpOjQwIT09YS53aGljaHx8aC5pc09wZW58fChoLmlzT3Blbj0hMCl9LGguJHdhdGNoKCJpc09wZW4iLGZ1bmN0aW9uKGEpe2E/KGguJGJyb2FkY2FzdCgiZGF0ZXBpY2tlci5mb2N1cyIpLGgucG9zaXRpb249cD9kLm9mZnNldChpKTpkLnBvc2l0aW9uKGkpLGgucG9zaXRpb24udG9wPWgucG9zaXRpb24udG9wK2kucHJvcCgib2Zmc2V0SGVpZ2h0IiksYy5iaW5kKCJjbGljayIscykpOmMudW5iaW5kKCJjbGljayIscyl9KSxoLnNlbGVjdD1mdW5jdGlvbihhKXtpZigidG9kYXkiPT09YSl7dmFyIGI9bmV3IERhdGU7YW5ndWxhci5pc0RhdGUoay4kbW9kZWxWYWx1ZSk/KGE9bmV3IERhdGUoay4kbW9kZWxWYWx1ZSksYS5zZXRGdWxsWWVhcihiLmdldEZ1bGxZZWFyKCksYi5nZXRNb250aCgpLGIuZ2V0RGF0ZSgpKSk6YT1uZXcgRGF0ZShiLnNldEhvdXJzKDAsMCwwLDApKX1oLmRhdGVTZWxlY3Rpb24oYSl9LGguY2xvc2U9ZnVuY3Rpb24oKXtoLmlzT3Blbj0hMSxpWzBdLmZvY3VzKCl9O3ZhciB1PWEocSkoaCk7cD9jLmZpbmQoImJvZHkiKS5hcHBlbmQodSk6aS5hZnRlcih1KSxoLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7dS5yZW1vdmUoKSxpLnVuYmluZCgia2V5ZG93biIsdCksYy51bmJpbmQoImNsaWNrIixzKX0pfX19XSkuZGlyZWN0aXZlKCJkYXRlcGlja2VyUG9wdXBXcmFwIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdHJhbnNjbHVkZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvZGF0ZXBpY2tlci9wb3B1cC5odG1sIixsaW5rOmZ1bmN0aW9uKGEsYil7Yi5iaW5kKCJjbGljayIsZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCl9KX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5kcm9wZG93biIsW10pLmNvbnN0YW50KCJkcm9wZG93bkNvbmZpZyIse29wZW5DbGFzczoib3BlbiJ9KS5zZXJ2aWNlKCJkcm9wZG93blNlcnZpY2UiLFsiJGRvY3VtZW50IixmdW5jdGlvbihhKXt2YXIgYj1udWxsO3RoaXMub3Blbj1mdW5jdGlvbihlKXtifHwoYS5iaW5kKCJjbGljayIsYyksYS5iaW5kKCJrZXlkb3duIixkKSksYiYmYiE9PWUmJihiLmlzT3Blbj0hMSksYj1lfSx0aGlzLmNsb3NlPWZ1bmN0aW9uKGUpe2I9PT1lJiYoYj1udWxsLGEudW5iaW5kKCJjbGljayIsYyksYS51bmJpbmQoImtleWRvd24iLGQpKX07dmFyIGM9ZnVuY3Rpb24oYSl7YSYmYS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8Yi4kYXBwbHkoZnVuY3Rpb24oKXtiLmlzT3Blbj0hMX0pfSxkPWZ1bmN0aW9uKGEpezI3PT09YS53aGljaCYmKGIuZm9jdXNUb2dnbGVFbGVtZW50KCksYygpKX19XSkuY29udHJvbGxlcigiRHJvcGRvd25Db250cm9sbGVyIixbIiRzY29wZSIsIiRhdHRycyIsIiRwYXJzZSIsImRyb3Bkb3duQ29uZmlnIiwiZHJvcGRvd25TZXJ2aWNlIiwiJGFuaW1hdGUiLGZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZyxoPXRoaXMsaT1hLiRuZXcoKSxqPWQub3BlbkNsYXNzLGs9YW5ndWxhci5ub29wLGw9Yi5vblRvZ2dsZT9jKGIub25Ub2dnbGUpOmFuZ3VsYXIubm9vcDt0aGlzLmluaXQ9ZnVuY3Rpb24oZCl7aC4kZWxlbWVudD1kLGIuaXNPcGVuJiYoZz1jKGIuaXNPcGVuKSxrPWcuYXNzaWduLGEuJHdhdGNoKGcsZnVuY3Rpb24oYSl7aS5pc09wZW49ISFhfSkpfSx0aGlzLnRvZ2dsZT1mdW5jdGlvbihhKXtyZXR1cm4gaS5pc09wZW49YXJndW1lbnRzLmxlbmd0aD8hIWE6IWkuaXNPcGVufSx0aGlzLmlzT3Blbj1mdW5jdGlvbigpe3JldHVybiBpLmlzT3Blbn0saS5mb2N1c1RvZ2dsZUVsZW1lbnQ9ZnVuY3Rpb24oKXtoLnRvZ2dsZUVsZW1lbnQmJmgudG9nZ2xlRWxlbWVudFswXS5mb2N1cygpfSxpLiR3YXRjaCgiaXNPcGVuIixmdW5jdGlvbihiLGMpe2ZbYj8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKGguJGVsZW1lbnQsaiksYj8oaS5mb2N1c1RvZ2dsZUVsZW1lbnQoKSxlLm9wZW4oaSkpOmUuY2xvc2UoaSksayhhLGIpLGFuZ3VsYXIuaXNEZWZpbmVkKGIpJiZiIT09YyYmbChhLHtvcGVuOiEhYn0pfSksYS4kb24oIiRsb2NhdGlvbkNoYW5nZVN1Y2Nlc3MiLGZ1bmN0aW9uKCl7aS5pc09wZW49ITF9KSxhLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7aS4kZGVzdHJveSgpfSl9XSkuZGlyZWN0aXZlKCJkcm9wZG93biIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkNBIixjb250cm9sbGVyOiJEcm9wZG93bkNvbnRyb2xsZXIiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7ZC5pbml0KGIpfX19KS5kaXJlY3RpdmUoImRyb3Bkb3duVG9nZ2xlIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiQ0EiLHJlcXVpcmU6Ij9eZHJvcGRvd24iLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoZCl7ZC50b2dnbGVFbGVtZW50PWI7dmFyIGU9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGIuaGFzQ2xhc3MoImRpc2FibGVkIil8fGMuZGlzYWJsZWR8fGEuJGFwcGx5KGZ1bmN0aW9uKCl7ZC50b2dnbGUoKX0pfTtiLmJpbmQoImNsaWNrIixlKSxiLmF0dHIoeyJhcmlhLWhhc3BvcHVwIjohMCwiYXJpYS1leHBhbmRlZCI6ITF9KSxhLiR3YXRjaChkLmlzT3BlbixmdW5jdGlvbihhKXtiLmF0dHIoImFyaWEtZXhwYW5kZWQiLCEhYSl9KSxhLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7Yi51bmJpbmQoImNsaWNrIixlKX0pfX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5tb2RhbCIsWyJ1aS5ib290c3RyYXAudHJhbnNpdGlvbiJdKS5mYWN0b3J5KCIkJHN0YWNrZWRNYXAiLGZ1bmN0aW9uKCl7cmV0dXJue2NyZWF0ZU5ldzpmdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybnthZGQ6ZnVuY3Rpb24oYixjKXthLnB1c2goe2tleTpiLHZhbHVlOmN9KX0sZ2V0OmZ1bmN0aW9uKGIpe2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWlmKGI9PWFbY10ua2V5KXJldHVybiBhW2NdfSxrZXlzOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyliLnB1c2goYVtjXS5rZXkpO3JldHVybiBifSx0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gYVthLmxlbmd0aC0xXX0scmVtb3ZlOmZ1bmN0aW9uKGIpe2Zvcih2YXIgYz0tMSxkPTA7ZDxhLmxlbmd0aDtkKyspaWYoYj09YVtkXS5rZXkpe2M9ZDticmVha31yZXR1cm4gYS5zcGxpY2UoYywxKVswXX0scmVtb3ZlVG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGEuc3BsaWNlKGEubGVuZ3RoLTEsMSlbMF19LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiBhLmxlbmd0aH19fX19KS5kaXJlY3RpdmUoIm1vZGFsQmFja2Ryb3AiLFsiJHRpbWVvdXQiLGZ1bmN0aW9uKGEpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL21vZGFsL2JhY2tkcm9wLmh0bWwiLGxpbms6ZnVuY3Rpb24oYil7Yi5hbmltYXRlPSExLGEoZnVuY3Rpb24oKXtiLmFuaW1hdGU9ITB9KX19fV0pLmRpcmVjdGl2ZSgibW9kYWxXaW5kb3ciLFsiJG1vZGFsU3RhY2siLCIkdGltZW91dCIsZnVuY3Rpb24oYSxiKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixzY29wZTp7aW5kZXg6IkAiLGFuaW1hdGU6Ij0ifSxyZXBsYWNlOiEwLHRyYW5zY2x1ZGU6ITAsdGVtcGxhdGVVcmw6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi50ZW1wbGF0ZVVybHx8InRlbXBsYXRlL21vZGFsL3dpbmRvdy5odG1sIn0sbGluazpmdW5jdGlvbihjLGQsZSl7ZC5hZGRDbGFzcyhlLndpbmRvd0NsYXNzfHwiIiksYy5zaXplPWUuc2l6ZSxiKGZ1bmN0aW9uKCl7Yy5hbmltYXRlPSEwLGRbMF0uZm9jdXMoKX0pLGMuY2xvc2U9ZnVuY3Rpb24oYil7dmFyIGM9YS5nZXRUb3AoKTtjJiZjLnZhbHVlLmJhY2tkcm9wJiYic3RhdGljIiE9Yy52YWx1ZS5iYWNrZHJvcCYmYi50YXJnZXQ9PT1iLmN1cnJlbnRUYXJnZXQmJihiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKSxhLmRpc21pc3MoYy5rZXksImJhY2tkcm9wIGNsaWNrIikpfX19fV0pLmZhY3RvcnkoIiRtb2RhbFN0YWNrIixbIiR0cmFuc2l0aW9uIiwiJHRpbWVvdXQiLCIkZG9jdW1lbnQiLCIkY29tcGlsZSIsIiRyb290U2NvcGUiLCIkJHN0YWNrZWRNYXAiLGZ1bmN0aW9uKGEsYixjLGQsZSxmKXtmdW5jdGlvbiBnKCl7Zm9yKHZhciBhPS0xLGI9bi5rZXlzKCksYz0wO2M8Yi5sZW5ndGg7YysrKW4uZ2V0KGJbY10pLnZhbHVlLmJhY2tkcm9wJiYoYT1jKTtyZXR1cm4gYX1mdW5jdGlvbiBoKGEpe3ZhciBiPWMuZmluZCgiYm9keSIpLmVxKDApLGQ9bi5nZXQoYSkudmFsdWU7bi5yZW1vdmUoYSksaihkLm1vZGFsRG9tRWwsZC5tb2RhbFNjb3BlLDMwMCxmdW5jdGlvbigpe2QubW9kYWxTY29wZS4kZGVzdHJveSgpLGIudG9nZ2xlQ2xhc3MobSxuLmxlbmd0aCgpPjApLGkoKX0pfWZ1bmN0aW9uIGkoKXtpZihrJiYtMT09ZygpKXt2YXIgYT1sO2ooayxsLDE1MCxmdW5jdGlvbigpe2EuJGRlc3Ryb3koKSxhPW51bGx9KSxrPXZvaWQgMCxsPXZvaWQgMH19ZnVuY3Rpb24gaihjLGQsZSxmKXtmdW5jdGlvbiBnKCl7Zy5kb25lfHwoZy5kb25lPSEwLGMucmVtb3ZlKCksZiYmZigpKX1kLmFuaW1hdGU9ITE7dmFyIGg9YS50cmFuc2l0aW9uRW5kRXZlbnROYW1lO2lmKGgpe3ZhciBpPWIoZyxlKTtjLmJpbmQoaCxmdW5jdGlvbigpe2IuY2FuY2VsKGkpLGcoKSxkLiRhcHBseSgpfSl9ZWxzZSBiKGcsMCl9dmFyIGssbCxtPSJtb2RhbC1vcGVuIixuPWYuY3JlYXRlTmV3KCksbz17fTtyZXR1cm4gZS4kd2F0Y2goZyxmdW5jdGlvbihhKXtsJiYobC5pbmRleD1hKX0pLGMuYmluZCgia2V5ZG93biIsZnVuY3Rpb24oYSl7dmFyIGI7Mjc9PT1hLndoaWNoJiYoYj1uLnRvcCgpLGImJmIudmFsdWUua2V5Ym9hcmQmJihhLnByZXZlbnREZWZhdWx0KCksZS4kYXBwbHkoZnVuY3Rpb24oKXtvLmRpc21pc3MoYi5rZXksImVzY2FwZSBrZXkgcHJlc3MiKX0pKSl9KSxvLm9wZW49ZnVuY3Rpb24oYSxiKXtuLmFkZChhLHtkZWZlcnJlZDpiLmRlZmVycmVkLG1vZGFsU2NvcGU6Yi5zY29wZSxiYWNrZHJvcDpiLmJhY2tkcm9wLGtleWJvYXJkOmIua2V5Ym9hcmR9KTt2YXIgZj1jLmZpbmQoImJvZHkiKS5lcSgwKSxoPWcoKTtoPj0wJiYhayYmKGw9ZS4kbmV3KCEwKSxsLmluZGV4PWgsaz1kKCI8ZGl2IG1vZGFsLWJhY2tkcm9wPjwvZGl2PiIpKGwpLGYuYXBwZW5kKGspKTt2YXIgaT1hbmd1bGFyLmVsZW1lbnQoIjxkaXYgbW9kYWwtd2luZG93PjwvZGl2PiIpO2kuYXR0cih7InRlbXBsYXRlLXVybCI6Yi53aW5kb3dUZW1wbGF0ZVVybCwid2luZG93LWNsYXNzIjpiLndpbmRvd0NsYXNzLHNpemU6Yi5zaXplLGluZGV4Om4ubGVuZ3RoKCktMSxhbmltYXRlOiJhbmltYXRlIn0pLmh0bWwoYi5jb250ZW50KTt2YXIgaj1kKGkpKGIuc2NvcGUpO24udG9wKCkudmFsdWUubW9kYWxEb21FbD1qLGYuYXBwZW5kKGopLGYuYWRkQ2xhc3MobSl9LG8uY2xvc2U9ZnVuY3Rpb24oYSxiKXt2YXIgYz1uLmdldChhKS52YWx1ZTtjJiYoYy5kZWZlcnJlZC5yZXNvbHZlKGIpLGgoYSkpfSxvLmRpc21pc3M9ZnVuY3Rpb24oYSxiKXt2YXIgYz1uLmdldChhKS52YWx1ZTtjJiYoYy5kZWZlcnJlZC5yZWplY3QoYiksaChhKSl9LG8uZGlzbWlzc0FsbD1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5nZXRUb3AoKTtiOyl0aGlzLmRpc21pc3MoYi5rZXksYSksYj10aGlzLmdldFRvcCgpfSxvLmdldFRvcD1mdW5jdGlvbigpe3JldHVybiBuLnRvcCgpfSxvfV0pLnByb3ZpZGVyKCIkbW9kYWwiLGZ1bmN0aW9uKCl7dmFyIGE9e29wdGlvbnM6e2JhY2tkcm9wOiEwLGtleWJvYXJkOiEwfSwkZ2V0OlsiJGluamVjdG9yIiwiJHJvb3RTY29wZSIsIiRxIiwiJGh0dHAiLCIkdGVtcGxhdGVDYWNoZSIsIiRjb250cm9sbGVyIiwiJG1vZGFsU3RhY2siLGZ1bmN0aW9uKGIsYyxkLGUsZixnLGgpe2Z1bmN0aW9uIGkoYSl7cmV0dXJuIGEudGVtcGxhdGU/ZC53aGVuKGEudGVtcGxhdGUpOmUuZ2V0KGEudGVtcGxhdGVVcmwse2NhY2hlOmZ9KS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBhLmRhdGF9KX1mdW5jdGlvbiBqKGEpe3ZhciBjPVtdO3JldHVybiBhbmd1bGFyLmZvckVhY2goYSxmdW5jdGlvbihhKXsoYW5ndWxhci5pc0Z1bmN0aW9uKGEpfHxhbmd1bGFyLmlzQXJyYXkoYSkpJiZjLnB1c2goZC53aGVuKGIuaW52b2tlKGEpKSl9KSxjfXZhciBrPXt9O3JldHVybiBrLm9wZW49ZnVuY3Rpb24oYil7dmFyIGU9ZC5kZWZlcigpLGY9ZC5kZWZlcigpLGs9e3Jlc3VsdDplLnByb21pc2Usb3BlbmVkOmYucHJvbWlzZSxjbG9zZTpmdW5jdGlvbihhKXtoLmNsb3NlKGssYSl9LGRpc21pc3M6ZnVuY3Rpb24oYSl7aC5kaXNtaXNzKGssYSl9fTtpZihiPWFuZ3VsYXIuZXh0ZW5kKHt9LGEub3B0aW9ucyxiKSxiLnJlc29sdmU9Yi5yZXNvbHZlfHx7fSwhYi50ZW1wbGF0ZSYmIWIudGVtcGxhdGVVcmwpdGhyb3cgbmV3IEVycm9yKCJPbmUgb2YgdGVtcGxhdGUgb3IgdGVtcGxhdGVVcmwgb3B0aW9ucyBpcyByZXF1aXJlZC4iKTt2YXIgbD1kLmFsbChbaShiKV0uY29uY2F0KGooYi5yZXNvbHZlKSkpO3JldHVybiBsLnRoZW4oZnVuY3Rpb24oYSl7dmFyIGQ9KGIuc2NvcGV8fGMpLiRuZXcoKTtkLiRjbG9zZT1rLmNsb3NlLGQuJGRpc21pc3M9ay5kaXNtaXNzO3ZhciBmLGk9e30saj0xO2IuY29udHJvbGxlciYmKGkuJHNjb3BlPWQsaS4kbW9kYWxJbnN0YW5jZT1rLGFuZ3VsYXIuZm9yRWFjaChiLnJlc29sdmUsZnVuY3Rpb24oYixjKXtpW2NdPWFbaisrXX0pLGY9ZyhiLmNvbnRyb2xsZXIsaSkpLGgub3BlbihrLHtzY29wZTpkLGRlZmVycmVkOmUsY29udGVudDphWzBdLGJhY2tkcm9wOmIuYmFja2Ryb3Asa2V5Ym9hcmQ6Yi5rZXlib2FyZCx3aW5kb3dDbGFzczpiLndpbmRvd0NsYXNzLHdpbmRvd1RlbXBsYXRlVXJsOmIud2luZG93VGVtcGxhdGVVcmwsc2l6ZTpiLnNpemV9KX0sZnVuY3Rpb24oYSl7ZS5yZWplY3QoYSl9KSxsLnRoZW4oZnVuY3Rpb24oKXtmLnJlc29sdmUoITApfSxmdW5jdGlvbigpe2YucmVqZWN0KCExKX0pLGt9LGt9XX07cmV0dXJuIGF9KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnBhZ2luYXRpb24iLFtdKS5jb250cm9sbGVyKCJQYWdpbmF0aW9uQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCIkcGFyc2UiLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLGU9eyRzZXRWaWV3VmFsdWU6YW5ndWxhci5ub29wfSxmPWIubnVtUGFnZXM/YyhiLm51bVBhZ2VzKS5hc3NpZ246YW5ndWxhci5ub29wO3RoaXMuaW5pdD1mdW5jdGlvbihmLGcpe2U9Zix0aGlzLmNvbmZpZz1nLGUuJHJlbmRlcj1mdW5jdGlvbigpe2QucmVuZGVyKCl9LGIuaXRlbXNQZXJQYWdlP2EuJHBhcmVudC4kd2F0Y2goYyhiLml0ZW1zUGVyUGFnZSksZnVuY3Rpb24oYil7ZC5pdGVtc1BlclBhZ2U9cGFyc2VJbnQoYiwxMCksYS50b3RhbFBhZ2VzPWQuY2FsY3VsYXRlVG90YWxQYWdlcygpfSk6dGhpcy5pdGVtc1BlclBhZ2U9Zy5pdGVtc1BlclBhZ2V9LHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlcz1mdW5jdGlvbigpe3ZhciBiPXRoaXMuaXRlbXNQZXJQYWdlPDE/MTpNYXRoLmNlaWwoYS50b3RhbEl0ZW1zL3RoaXMuaXRlbXNQZXJQYWdlKTtyZXR1cm4gTWF0aC5tYXgoYnx8MCwxKX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXthLnBhZ2U9cGFyc2VJbnQoZS4kdmlld1ZhbHVlLDEwKXx8MX0sYS5zZWxlY3RQYWdlPWZ1bmN0aW9uKGIpe2EucGFnZSE9PWImJmI+MCYmYjw9YS50b3RhbFBhZ2VzJiYoZS4kc2V0Vmlld1ZhbHVlKGIpLGUuJHJlbmRlcigpKX0sYS5nZXRUZXh0PWZ1bmN0aW9uKGIpe3JldHVybiBhW2IrIlRleHQiXXx8ZC5jb25maWdbYisiVGV4dCJdfSxhLm5vUHJldmlvdXM9ZnVuY3Rpb24oKXtyZXR1cm4gMT09PWEucGFnZX0sYS5ub05leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gYS5wYWdlPT09YS50b3RhbFBhZ2VzfSxhLiR3YXRjaCgidG90YWxJdGVtcyIsZnVuY3Rpb24oKXthLnRvdGFsUGFnZXM9ZC5jYWxjdWxhdGVUb3RhbFBhZ2VzKCl9KSxhLiR3YXRjaCgidG90YWxQYWdlcyIsZnVuY3Rpb24oYil7ZihhLiRwYXJlbnQsYiksYS5wYWdlPmI/YS5zZWxlY3RQYWdlKGIpOmUuJHJlbmRlcigpfSl9XSkuY29uc3RhbnQoInBhZ2luYXRpb25Db25maWciLHtpdGVtc1BlclBhZ2U6MTAsYm91bmRhcnlMaW5rczohMSxkaXJlY3Rpb25MaW5rczohMCxmaXJzdFRleHQ6IkZpcnN0IixwcmV2aW91c1RleHQ6IlByZXZpb3VzIixuZXh0VGV4dDoiTmV4dCIsbGFzdFRleHQ6Ikxhc3QiLHJvdGF0ZTohMH0pLmRpcmVjdGl2ZSgicGFnaW5hdGlvbiIsWyIkcGFyc2UiLCJwYWdpbmF0aW9uQ29uZmlnIixmdW5jdGlvbihhLGIpe3JldHVybntyZXN0cmljdDoiRUEiLHNjb3BlOnt0b3RhbEl0ZW1zOiI9IixmaXJzdFRleHQ6IkAiLHByZXZpb3VzVGV4dDoiQCIsbmV4dFRleHQ6IkAiLGxhc3RUZXh0OiJAIn0scmVxdWlyZTpbInBhZ2luYXRpb24iLCI/bmdNb2RlbCJdLGNvbnRyb2xsZXI6IlBhZ2luYXRpb25Db250cm9sbGVyIix0ZW1wbGF0ZVVybDoidGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmh0bWwiLHJlcGxhY2U6ITAsbGluazpmdW5jdGlvbihjLGQsZSxmKXtmdW5jdGlvbiBnKGEsYixjKXtyZXR1cm57bnVtYmVyOmEsdGV4dDpiLGFjdGl2ZTpjfX1mdW5jdGlvbiBoKGEsYil7dmFyIGM9W10sZD0xLGU9YixmPWFuZ3VsYXIuaXNEZWZpbmVkKGspJiZiPms7ZiYmKGw/KGQ9TWF0aC5tYXgoYS1NYXRoLmZsb29yKGsvMiksMSksZT1kK2stMSxlPmImJihlPWIsZD1lLWsrMSkpOihkPShNYXRoLmNlaWwoYS9rKS0xKSprKzEsZT1NYXRoLm1pbihkK2stMSxiKSkpO2Zvcih2YXIgaD1kO2U+PWg7aCsrKXt2YXIgaT1nKGgsaCxoPT09YSk7Yy5wdXNoKGkpfWlmKGYmJiFsKXtpZihkPjEpe3ZhciBqPWcoZC0xLCIuLi4iLCExKTtjLnVuc2hpZnQoail9aWYoYj5lKXt2YXIgbT1nKGUrMSwiLi4uIiwhMSk7Yy5wdXNoKG0pfX1yZXR1cm4gY312YXIgaT1mWzBdLGo9ZlsxXTtpZihqKXt2YXIgaz1hbmd1bGFyLmlzRGVmaW5lZChlLm1heFNpemUpP2MuJHBhcmVudC4kZXZhbChlLm1heFNpemUpOmIubWF4U2l6ZSxsPWFuZ3VsYXIuaXNEZWZpbmVkKGUucm90YXRlKT9jLiRwYXJlbnQuJGV2YWwoZS5yb3RhdGUpOmIucm90YXRlO2MuYm91bmRhcnlMaW5rcz1hbmd1bGFyLmlzRGVmaW5lZChlLmJvdW5kYXJ5TGlua3MpP2MuJHBhcmVudC4kZXZhbChlLmJvdW5kYXJ5TGlua3MpOmIuYm91bmRhcnlMaW5rcyxjLmRpcmVjdGlvbkxpbmtzPWFuZ3VsYXIuaXNEZWZpbmVkKGUuZGlyZWN0aW9uTGlua3MpP2MuJHBhcmVudC4kZXZhbChlLmRpcmVjdGlvbkxpbmtzKTpiLmRpcmVjdGlvbkxpbmtzLGkuaW5pdChqLGIpLGUubWF4U2l6ZSYmYy4kcGFyZW50LiR3YXRjaChhKGUubWF4U2l6ZSksZnVuY3Rpb24oYSl7az1wYXJzZUludChhLDEwKSxpLnJlbmRlcigpfSk7dmFyIG09aS5yZW5kZXI7aS5yZW5kZXI9ZnVuY3Rpb24oKXttKCksYy5wYWdlPjAmJmMucGFnZTw9Yy50b3RhbFBhZ2VzJiYoYy5wYWdlcz1oKGMucGFnZSxjLnRvdGFsUGFnZXMpKX19fX19XSkuY29uc3RhbnQoInBhZ2VyQ29uZmlnIix7aXRlbXNQZXJQYWdlOjEwLHByZXZpb3VzVGV4dDoiwqsgUHJldmlvdXMiLG5leHRUZXh0OiJOZXh0IMK7IixhbGlnbjohMH0pLmRpcmVjdGl2ZSgicGFnZXIiLFsicGFnZXJDb25maWciLGZ1bmN0aW9uKGEpe3JldHVybntyZXN0cmljdDoiRUEiLHNjb3BlOnt0b3RhbEl0ZW1zOiI9IixwcmV2aW91c1RleHQ6IkAiLG5leHRUZXh0OiJAIn0scmVxdWlyZTpbInBhZ2VyIiwiP25nTW9kZWwiXSxjb250cm9sbGVyOiJQYWdpbmF0aW9uQ29udHJvbGxlciIsdGVtcGxhdGVVcmw6InRlbXBsYXRlL3BhZ2luYXRpb24vcGFnZXIuaHRtbCIscmVwbGFjZTohMCxsaW5rOmZ1bmN0aW9uKGIsYyxkLGUpe3ZhciBmPWVbMF0sZz1lWzFdO2cmJihiLmFsaWduPWFuZ3VsYXIuaXNEZWZpbmVkKGQuYWxpZ24pP2IuJHBhcmVudC4kZXZhbChkLmFsaWduKTphLmFsaWduLGYuaW5pdChnLGEpKX19fV0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAudG9vbHRpcCIsWyJ1aS5ib290c3RyYXAucG9zaXRpb24iLCJ1aS5ib290c3RyYXAuYmluZEh0bWwiXSkucHJvdmlkZXIoIiR0b29sdGlwIixmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7dmFyIGI9L1tBLVpdL2csYz0iLSI7CityZXR1cm4gYS5yZXBsYWNlKGIsZnVuY3Rpb24oYSxiKXtyZXR1cm4oYj9jOiIiKSthLnRvTG93ZXJDYXNlKCl9KX12YXIgYj17cGxhY2VtZW50OiJ0b3AiLGFuaW1hdGlvbjohMCxwb3B1cERlbGF5OjB9LGM9e21vdXNlZW50ZXI6Im1vdXNlbGVhdmUiLGNsaWNrOiJjbGljayIsZm9jdXM6ImJsdXIifSxkPXt9O3RoaXMub3B0aW9ucz1mdW5jdGlvbihhKXthbmd1bGFyLmV4dGVuZChkLGEpfSx0aGlzLnNldFRyaWdnZXJzPWZ1bmN0aW9uKGEpe2FuZ3VsYXIuZXh0ZW5kKGMsYSl9LHRoaXMuJGdldD1bIiR3aW5kb3ciLCIkY29tcGlsZSIsIiR0aW1lb3V0IiwiJHBhcnNlIiwiJGRvY3VtZW50IiwiJHBvc2l0aW9uIiwiJGludGVycG9sYXRlIixmdW5jdGlvbihlLGYsZyxoLGksaixrKXtyZXR1cm4gZnVuY3Rpb24oZSxsLG0pe2Z1bmN0aW9uIG4oYSl7dmFyIGI9YXx8by50cmlnZ2VyfHxtLGQ9Y1tiXXx8YjtyZXR1cm57c2hvdzpiLGhpZGU6ZH19dmFyIG89YW5ndWxhci5leHRlbmQoe30sYixkKSxwPWEoZSkscT1rLnN0YXJ0U3ltYm9sKCkscj1rLmVuZFN5bWJvbCgpLHM9IjxkaXYgIitwKyctcG9wdXAgdGl0bGU9IicrcSsidHRfdGl0bGUiK3IrJyIgY29udGVudD0iJytxKyJ0dF9jb250ZW50IityKyciIHBsYWNlbWVudD0iJytxKyJ0dF9wbGFjZW1lbnQiK3IrJyIgYW5pbWF0aW9uPSJ0dF9hbmltYXRpb24iIGlzLW9wZW49InR0X2lzT3BlbiI+PC9kaXY+JztyZXR1cm57cmVzdHJpY3Q6IkVBIixzY29wZTohMCxjb21waWxlOmZ1bmN0aW9uKCl7dmFyIGE9ZihzKTtyZXR1cm4gZnVuY3Rpb24oYixjLGQpe2Z1bmN0aW9uIGYoKXtiLnR0X2lzT3Blbj9tKCk6aygpfWZ1bmN0aW9uIGsoKXsoIXl8fGIuJGV2YWwoZFtsKyJFbmFibGUiXSkpJiYoYi50dF9wb3B1cERlbGF5P3Z8fCh2PWcocCxiLnR0X3BvcHVwRGVsYXksITEpLHYudGhlbihmdW5jdGlvbihhKXthKCl9KSk6cCgpKCkpfWZ1bmN0aW9uIG0oKXtiLiRhcHBseShmdW5jdGlvbigpe3EoKX0pfWZ1bmN0aW9uIHAoKXtyZXR1cm4gdj1udWxsLHUmJihnLmNhbmNlbCh1KSx1PW51bGwpLGIudHRfY29udGVudD8ocigpLHQuY3NzKHt0b3A6MCxsZWZ0OjAsZGlzcGxheToiYmxvY2sifSksdz9pLmZpbmQoImJvZHkiKS5hcHBlbmQodCk6Yy5hZnRlcih0KSx6KCksYi50dF9pc09wZW49ITAsYi4kZGlnZXN0KCkseik6YW5ndWxhci5ub29wfWZ1bmN0aW9uIHEoKXtiLnR0X2lzT3Blbj0hMSxnLmNhbmNlbCh2KSx2PW51bGwsYi50dF9hbmltYXRpb24/dXx8KHU9ZyhzLDUwMCkpOnMoKX1mdW5jdGlvbiByKCl7dCYmcygpLHQ9YShiLGZ1bmN0aW9uKCl7fSksYi4kZGlnZXN0KCl9ZnVuY3Rpb24gcygpe3U9bnVsbCx0JiYodC5yZW1vdmUoKSx0PW51bGwpfXZhciB0LHUsdix3PWFuZ3VsYXIuaXNEZWZpbmVkKG8uYXBwZW5kVG9Cb2R5KT9vLmFwcGVuZFRvQm9keTohMSx4PW4odm9pZCAwKSx5PWFuZ3VsYXIuaXNEZWZpbmVkKGRbbCsiRW5hYmxlIl0pLHo9ZnVuY3Rpb24oKXt2YXIgYT1qLnBvc2l0aW9uRWxlbWVudHMoYyx0LGIudHRfcGxhY2VtZW50LHcpO2EudG9wKz0icHgiLGEubGVmdCs9InB4Iix0LmNzcyhhKX07Yi50dF9pc09wZW49ITEsZC4kb2JzZXJ2ZShlLGZ1bmN0aW9uKGEpe2IudHRfY29udGVudD1hLCFhJiZiLnR0X2lzT3BlbiYmcSgpfSksZC4kb2JzZXJ2ZShsKyJUaXRsZSIsZnVuY3Rpb24oYSl7Yi50dF90aXRsZT1hfSksZC4kb2JzZXJ2ZShsKyJQbGFjZW1lbnQiLGZ1bmN0aW9uKGEpe2IudHRfcGxhY2VtZW50PWFuZ3VsYXIuaXNEZWZpbmVkKGEpP2E6by5wbGFjZW1lbnR9KSxkLiRvYnNlcnZlKGwrIlBvcHVwRGVsYXkiLGZ1bmN0aW9uKGEpe3ZhciBjPXBhcnNlSW50KGEsMTApO2IudHRfcG9wdXBEZWxheT1pc05hTihjKT9vLnBvcHVwRGVsYXk6Y30pO3ZhciBBPWZ1bmN0aW9uKCl7Yy51bmJpbmQoeC5zaG93LGspLGMudW5iaW5kKHguaGlkZSxtKX07ZC4kb2JzZXJ2ZShsKyJUcmlnZ2VyIixmdW5jdGlvbihhKXtBKCkseD1uKGEpLHguc2hvdz09PXguaGlkZT9jLmJpbmQoeC5zaG93LGYpOihjLmJpbmQoeC5zaG93LGspLGMuYmluZCh4LmhpZGUsbSkpfSk7dmFyIEI9Yi4kZXZhbChkW2wrIkFuaW1hdGlvbiJdKTtiLnR0X2FuaW1hdGlvbj1hbmd1bGFyLmlzRGVmaW5lZChCKT8hIUI6by5hbmltYXRpb24sZC4kb2JzZXJ2ZShsKyJBcHBlbmRUb0JvZHkiLGZ1bmN0aW9uKGEpe3c9YW5ndWxhci5pc0RlZmluZWQoYSk/aChhKShiKTp3fSksdyYmYi4kb24oIiRsb2NhdGlvbkNoYW5nZVN1Y2Nlc3MiLGZ1bmN0aW9uKCl7Yi50dF9pc09wZW4mJnEoKX0pLGIuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtnLmNhbmNlbCh1KSxnLmNhbmNlbCh2KSxBKCkscygpfSl9fX19fV19KS5kaXJlY3RpdmUoInRvb2x0aXBQb3B1cCIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHNjb3BlOntjb250ZW50OiJAIixwbGFjZW1lbnQ6IkAiLGFuaW1hdGlvbjoiJiIsaXNPcGVuOiImIn0sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1wb3B1cC5odG1sIn19KS5kaXJlY3RpdmUoInRvb2x0aXAiLFsiJHRvb2x0aXAiLGZ1bmN0aW9uKGEpe3JldHVybiBhKCJ0b29sdGlwIiwidG9vbHRpcCIsIm1vdXNlZW50ZXIiKX1dKS5kaXJlY3RpdmUoInRvb2x0aXBIdG1sVW5zYWZlUG9wdXAiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCxzY29wZTp7Y29udGVudDoiQCIscGxhY2VtZW50OiJAIixhbmltYXRpb246IiYiLGlzT3BlbjoiJiJ9LHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtaHRtbC11bnNhZmUtcG9wdXAuaHRtbCJ9fSkuZGlyZWN0aXZlKCJ0b29sdGlwSHRtbFVuc2FmZSIsWyIkdG9vbHRpcCIsZnVuY3Rpb24oYSl7cmV0dXJuIGEoInRvb2x0aXBIdG1sVW5zYWZlIiwidG9vbHRpcCIsIm1vdXNlZW50ZXIiKX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnBvcG92ZXIiLFsidWkuYm9vdHN0cmFwLnRvb2x0aXAiXSkuZGlyZWN0aXZlKCJwb3BvdmVyUG9wdXAiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCxzY29wZTp7dGl0bGU6IkAiLGNvbnRlbnQ6IkAiLHBsYWNlbWVudDoiQCIsYW5pbWF0aW9uOiImIixpc09wZW46IiYifSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvcG9wb3Zlci9wb3BvdmVyLmh0bWwifX0pLmRpcmVjdGl2ZSgicG9wb3ZlciIsWyIkdG9vbHRpcCIsZnVuY3Rpb24oYSl7cmV0dXJuIGEoInBvcG92ZXIiLCJwb3BvdmVyIiwiY2xpY2siKX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnByb2dyZXNzYmFyIixbXSkuY29uc3RhbnQoInByb2dyZXNzQ29uZmlnIix7YW5pbWF0ZTohMCxtYXg6MTAwfSkuY29udHJvbGxlcigiUHJvZ3Jlc3NDb250cm9sbGVyIixbIiRzY29wZSIsIiRhdHRycyIsInByb2dyZXNzQ29uZmlnIixmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcyxlPWFuZ3VsYXIuaXNEZWZpbmVkKGIuYW5pbWF0ZSk/YS4kcGFyZW50LiRldmFsKGIuYW5pbWF0ZSk6Yy5hbmltYXRlO3RoaXMuYmFycz1bXSxhLm1heD1hbmd1bGFyLmlzRGVmaW5lZChiLm1heCk/YS4kcGFyZW50LiRldmFsKGIubWF4KTpjLm1heCx0aGlzLmFkZEJhcj1mdW5jdGlvbihiLGMpe2V8fGMuY3NzKHt0cmFuc2l0aW9uOiJub25lIn0pLHRoaXMuYmFycy5wdXNoKGIpLGIuJHdhdGNoKCJ2YWx1ZSIsZnVuY3Rpb24oYyl7Yi5wZXJjZW50PSsoMTAwKmMvYS5tYXgpLnRvRml4ZWQoMil9KSxiLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7Yz1udWxsLGQucmVtb3ZlQmFyKGIpfSl9LHRoaXMucmVtb3ZlQmFyPWZ1bmN0aW9uKGEpe3RoaXMuYmFycy5zcGxpY2UodGhpcy5iYXJzLmluZGV4T2YoYSksMSl9fV0pLmRpcmVjdGl2ZSgicHJvZ3Jlc3MiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0cmFuc2NsdWRlOiEwLGNvbnRyb2xsZXI6IlByb2dyZXNzQ29udHJvbGxlciIscmVxdWlyZToicHJvZ3Jlc3MiLHNjb3BlOnt9LHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzcy5odG1sIn19KS5kaXJlY3RpdmUoImJhciIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRyYW5zY2x1ZGU6ITAscmVxdWlyZToiXnByb2dyZXNzIixzY29wZTp7dmFsdWU6Ij0iLHR5cGU6IkAifSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvYmFyLmh0bWwiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7ZC5hZGRCYXIoYSxiKX19fSkuZGlyZWN0aXZlKCJwcm9ncmVzc2JhciIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRyYW5zY2x1ZGU6ITAsY29udHJvbGxlcjoiUHJvZ3Jlc3NDb250cm9sbGVyIixzY29wZTp7dmFsdWU6Ij0iLHR5cGU6IkAifSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIuaHRtbCIsbGluazpmdW5jdGlvbihhLGIsYyxkKXtkLmFkZEJhcihhLGFuZ3VsYXIuZWxlbWVudChiLmNoaWxkcmVuKClbMF0pKX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5yYXRpbmciLFtdKS5jb25zdGFudCgicmF0aW5nQ29uZmlnIix7bWF4OjUsc3RhdGVPbjpudWxsLHN0YXRlT2ZmOm51bGx9KS5jb250cm9sbGVyKCJSYXRpbmdDb250cm9sbGVyIixbIiRzY29wZSIsIiRhdHRycyIsInJhdGluZ0NvbmZpZyIsZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXskc2V0Vmlld1ZhbHVlOmFuZ3VsYXIubm9vcH07dGhpcy5pbml0PWZ1bmN0aW9uKGUpe2Q9ZSxkLiRyZW5kZXI9dGhpcy5yZW5kZXIsdGhpcy5zdGF0ZU9uPWFuZ3VsYXIuaXNEZWZpbmVkKGIuc3RhdGVPbik/YS4kcGFyZW50LiRldmFsKGIuc3RhdGVPbik6Yy5zdGF0ZU9uLHRoaXMuc3RhdGVPZmY9YW5ndWxhci5pc0RlZmluZWQoYi5zdGF0ZU9mZik/YS4kcGFyZW50LiRldmFsKGIuc3RhdGVPZmYpOmMuc3RhdGVPZmY7dmFyIGY9YW5ndWxhci5pc0RlZmluZWQoYi5yYXRpbmdTdGF0ZXMpP2EuJHBhcmVudC4kZXZhbChiLnJhdGluZ1N0YXRlcyk6bmV3IEFycmF5KGFuZ3VsYXIuaXNEZWZpbmVkKGIubWF4KT9hLiRwYXJlbnQuJGV2YWwoYi5tYXgpOmMubWF4KTthLnJhbmdlPXRoaXMuYnVpbGRUZW1wbGF0ZU9iamVjdHMoZil9LHRoaXMuYnVpbGRUZW1wbGF0ZU9iamVjdHM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aDtjPmI7YisrKWFbYl09YW5ndWxhci5leHRlbmQoe2luZGV4OmJ9LHtzdGF0ZU9uOnRoaXMuc3RhdGVPbixzdGF0ZU9mZjp0aGlzLnN0YXRlT2ZmfSxhW2JdKTtyZXR1cm4gYX0sYS5yYXRlPWZ1bmN0aW9uKGIpeyFhLnJlYWRvbmx5JiZiPj0wJiZiPD1hLnJhbmdlLmxlbmd0aCYmKGQuJHNldFZpZXdWYWx1ZShiKSxkLiRyZW5kZXIoKSl9LGEuZW50ZXI9ZnVuY3Rpb24oYil7YS5yZWFkb25seXx8KGEudmFsdWU9YiksYS5vbkhvdmVyKHt2YWx1ZTpifSl9LGEucmVzZXQ9ZnVuY3Rpb24oKXthLnZhbHVlPWQuJHZpZXdWYWx1ZSxhLm9uTGVhdmUoKX0sYS5vbktleWRvd249ZnVuY3Rpb24oYil7LygzN3wzOHwzOXw0MCkvLnRlc3QoYi53aGljaCkmJihiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKSxhLnJhdGUoYS52YWx1ZSsoMzg9PT1iLndoaWNofHwzOT09PWIud2hpY2g/MTotMSkpKX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXthLnZhbHVlPWQuJHZpZXdWYWx1ZX19XSkuZGlyZWN0aXZlKCJyYXRpbmciLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVxdWlyZTpbInJhdGluZyIsIm5nTW9kZWwiXSxzY29wZTp7cmVhZG9ubHk6Ij0/IixvbkhvdmVyOiImIixvbkxlYXZlOiImIn0sY29udHJvbGxlcjoiUmF0aW5nQ29udHJvbGxlciIsdGVtcGxhdGVVcmw6InRlbXBsYXRlL3JhdGluZy9yYXRpbmcuaHRtbCIscmVwbGFjZTohMCxsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWRbMF0sZj1kWzFdO2YmJmUuaW5pdChmKX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC50YWJzIixbXSkuY29udHJvbGxlcigiVGFic2V0Q29udHJvbGxlciIsWyIkc2NvcGUiLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLnRhYnM9YS50YWJzPVtdO2Iuc2VsZWN0PWZ1bmN0aW9uKGEpe2FuZ3VsYXIuZm9yRWFjaChjLGZ1bmN0aW9uKGIpe2IuYWN0aXZlJiZiIT09YSYmKGIuYWN0aXZlPSExLGIub25EZXNlbGVjdCgpKX0pLGEuYWN0aXZlPSEwLGEub25TZWxlY3QoKX0sYi5hZGRUYWI9ZnVuY3Rpb24oYSl7Yy5wdXNoKGEpLDE9PT1jLmxlbmd0aD9hLmFjdGl2ZT0hMDphLmFjdGl2ZSYmYi5zZWxlY3QoYSl9LGIucmVtb3ZlVGFiPWZ1bmN0aW9uKGEpe3ZhciBkPWMuaW5kZXhPZihhKTtpZihhLmFjdGl2ZSYmYy5sZW5ndGg+MSl7dmFyIGU9ZD09Yy5sZW5ndGgtMT9kLTE6ZCsxO2Iuc2VsZWN0KGNbZV0pfWMuc3BsaWNlKGQsMSl9fV0pLmRpcmVjdGl2ZSgidGFic2V0IixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHRyYW5zY2x1ZGU6ITAscmVwbGFjZTohMCxzY29wZTp7dHlwZToiQCJ9LGNvbnRyb2xsZXI6IlRhYnNldENvbnRyb2xsZXIiLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS90YWJzL3RhYnNldC5odG1sIixsaW5rOmZ1bmN0aW9uKGEsYixjKXthLnZlcnRpY2FsPWFuZ3VsYXIuaXNEZWZpbmVkKGMudmVydGljYWwpP2EuJHBhcmVudC4kZXZhbChjLnZlcnRpY2FsKTohMSxhLmp1c3RpZmllZD1hbmd1bGFyLmlzRGVmaW5lZChjLmp1c3RpZmllZCk/YS4kcGFyZW50LiRldmFsKGMuanVzdGlmaWVkKTohMX19fSkuZGlyZWN0aXZlKCJ0YWIiLFsiJHBhcnNlIixmdW5jdGlvbihhKXtyZXR1cm57cmVxdWlyZToiXnRhYnNldCIscmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS90YWJzL3RhYi5odG1sIix0cmFuc2NsdWRlOiEwLHNjb3BlOnthY3RpdmU6Ij0/IixoZWFkaW5nOiJAIixvblNlbGVjdDoiJnNlbGVjdCIsb25EZXNlbGVjdDoiJmRlc2VsZWN0In0sY29udHJvbGxlcjpmdW5jdGlvbigpe30sY29tcGlsZTpmdW5jdGlvbihiLGMsZCl7cmV0dXJuIGZ1bmN0aW9uKGIsYyxlLGYpe2IuJHdhdGNoKCJhY3RpdmUiLGZ1bmN0aW9uKGEpe2EmJmYuc2VsZWN0KGIpfSksYi5kaXNhYmxlZD0hMSxlLmRpc2FibGVkJiZiLiRwYXJlbnQuJHdhdGNoKGEoZS5kaXNhYmxlZCksZnVuY3Rpb24oYSl7Yi5kaXNhYmxlZD0hIWF9KSxiLnNlbGVjdD1mdW5jdGlvbigpe2IuZGlzYWJsZWR8fChiLmFjdGl2ZT0hMCl9LGYuYWRkVGFiKGIpLGIuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtmLnJlbW92ZVRhYihiKX0pLGIuJHRyYW5zY2x1ZGVGbj1kfX19fV0pLmRpcmVjdGl2ZSgidGFiSGVhZGluZ1RyYW5zY2x1ZGUiLFtmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiQSIscmVxdWlyZToiXnRhYiIsbGluazpmdW5jdGlvbihhLGIpe2EuJHdhdGNoKCJoZWFkaW5nRWxlbWVudCIsZnVuY3Rpb24oYSl7YSYmKGIuaHRtbCgiIiksYi5hcHBlbmQoYSkpfSl9fX1dKS5kaXJlY3RpdmUoInRhYkNvbnRlbnRUcmFuc2NsdWRlIixmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7cmV0dXJuIGEudGFnTmFtZSYmKGEuaGFzQXR0cmlidXRlKCJ0YWItaGVhZGluZyIpfHxhLmhhc0F0dHJpYnV0ZSgiZGF0YS10YWItaGVhZGluZyIpfHwidGFiLWhlYWRpbmciPT09YS50YWdOYW1lLnRvTG93ZXJDYXNlKCl8fCJkYXRhLXRhYi1oZWFkaW5nIj09PWEudGFnTmFtZS50b0xvd2VyQ2FzZSgpKX1yZXR1cm57cmVzdHJpY3Q6IkEiLHJlcXVpcmU6Il50YWJzZXQiLGxpbms6ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWIuJGV2YWwoZC50YWJDb250ZW50VHJhbnNjbHVkZSk7ZS4kdHJhbnNjbHVkZUZuKGUuJHBhcmVudCxmdW5jdGlvbihiKXthbmd1bGFyLmZvckVhY2goYixmdW5jdGlvbihiKXthKGIpP2UuaGVhZGluZ0VsZW1lbnQ9YjpjLmFwcGVuZChiKX0pfSl9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAudGltZXBpY2tlciIsW10pLmNvbnN0YW50KCJ0aW1lcGlja2VyQ29uZmlnIix7aG91clN0ZXA6MSxtaW51dGVTdGVwOjEsc2hvd01lcmlkaWFuOiEwLG1lcmlkaWFuczpudWxsLHJlYWRvbmx5SW5wdXQ6ITEsbW91c2V3aGVlbDohMH0pLmNvbnRyb2xsZXIoIlRpbWVwaWNrZXJDb250cm9sbGVyIixbIiRzY29wZSIsIiRhdHRycyIsIiRwYXJzZSIsIiRsb2ciLCIkbG9jYWxlIiwidGltZXBpY2tlckNvbmZpZyIsZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2Z1bmN0aW9uIGcoKXt2YXIgYj1wYXJzZUludChhLmhvdXJzLDEwKSxjPWEuc2hvd01lcmlkaWFuP2I+MCYmMTM+YjpiPj0wJiYyND5iO3JldHVybiBjPyhhLnNob3dNZXJpZGlhbiYmKDEyPT09YiYmKGI9MCksYS5tZXJpZGlhbj09PXBbMV0mJihiKz0xMikpLGIpOnZvaWQgMH1mdW5jdGlvbiBoKCl7dmFyIGI9cGFyc2VJbnQoYS5taW51dGVzLDEwKTtyZXR1cm4gYj49MCYmNjA+Yj9iOnZvaWQgMH1mdW5jdGlvbiBpKGEpe3JldHVybiBhbmd1bGFyLmlzRGVmaW5lZChhKSYmYS50b1N0cmluZygpLmxlbmd0aDwyPyIwIithOmF9ZnVuY3Rpb24gaihhKXtrKCksby4kc2V0Vmlld1ZhbHVlKG5ldyBEYXRlKG4pKSxsKGEpfWZ1bmN0aW9uIGsoKXtvLiRzZXRWYWxpZGl0eSgidGltZSIsITApLGEuaW52YWxpZEhvdXJzPSExLGEuaW52YWxpZE1pbnV0ZXM9ITF9ZnVuY3Rpb24gbChiKXt2YXIgYz1uLmdldEhvdXJzKCksZD1uLmdldE1pbnV0ZXMoKTthLnNob3dNZXJpZGlhbiYmKGM9MD09PWN8fDEyPT09Yz8xMjpjJTEyKSxhLmhvdXJzPSJoIj09PWI/YzppKGMpLGEubWludXRlcz0ibSI9PT1iP2Q6aShkKSxhLm1lcmlkaWFuPW4uZ2V0SG91cnMoKTwxMj9wWzBdOnBbMV19ZnVuY3Rpb24gbShhKXt2YXIgYj1uZXcgRGF0ZShuLmdldFRpbWUoKSs2ZTQqYSk7bi5zZXRIb3VycyhiLmdldEhvdXJzKCksYi5nZXRNaW51dGVzKCkpLGooKX12YXIgbj1uZXcgRGF0ZSxvPXskc2V0Vmlld1ZhbHVlOmFuZ3VsYXIubm9vcH0scD1hbmd1bGFyLmlzRGVmaW5lZChiLm1lcmlkaWFucyk/YS4kcGFyZW50LiRldmFsKGIubWVyaWRpYW5zKTpmLm1lcmlkaWFuc3x8ZS5EQVRFVElNRV9GT1JNQVRTLkFNUE1TO3RoaXMuaW5pdD1mdW5jdGlvbihjLGQpe289YyxvLiRyZW5kZXI9dGhpcy5yZW5kZXI7dmFyIGU9ZC5lcSgwKSxnPWQuZXEoMSksaD1hbmd1bGFyLmlzRGVmaW5lZChiLm1vdXNld2hlZWwpP2EuJHBhcmVudC4kZXZhbChiLm1vdXNld2hlZWwpOmYubW91c2V3aGVlbDtoJiZ0aGlzLnNldHVwTW91c2V3aGVlbEV2ZW50cyhlLGcpLGEucmVhZG9ubHlJbnB1dD1hbmd1bGFyLmlzRGVmaW5lZChiLnJlYWRvbmx5SW5wdXQpP2EuJHBhcmVudC4kZXZhbChiLnJlYWRvbmx5SW5wdXQpOmYucmVhZG9ubHlJbnB1dCx0aGlzLnNldHVwSW5wdXRFdmVudHMoZSxnKX07dmFyIHE9Zi5ob3VyU3RlcDtiLmhvdXJTdGVwJiZhLiRwYXJlbnQuJHdhdGNoKGMoYi5ob3VyU3RlcCksZnVuY3Rpb24oYSl7cT1wYXJzZUludChhLDEwKX0pO3ZhciByPWYubWludXRlU3RlcDtiLm1pbnV0ZVN0ZXAmJmEuJHBhcmVudC4kd2F0Y2goYyhiLm1pbnV0ZVN0ZXApLGZ1bmN0aW9uKGEpe3I9cGFyc2VJbnQoYSwxMCl9KSxhLnNob3dNZXJpZGlhbj1mLnNob3dNZXJpZGlhbixiLnNob3dNZXJpZGlhbiYmYS4kcGFyZW50LiR3YXRjaChjKGIuc2hvd01lcmlkaWFuKSxmdW5jdGlvbihiKXtpZihhLnNob3dNZXJpZGlhbj0hIWIsby4kZXJyb3IudGltZSl7dmFyIGM9ZygpLGQ9aCgpO2FuZ3VsYXIuaXNEZWZpbmVkKGMpJiZhbmd1bGFyLmlzRGVmaW5lZChkKSYmKG4uc2V0SG91cnMoYyksaigpKX1lbHNlIGwoKX0pLHRoaXMuc2V0dXBNb3VzZXdoZWVsRXZlbnRzPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9ZnVuY3Rpb24oYSl7YS5vcmlnaW5hbEV2ZW50JiYoYT1hLm9yaWdpbmFsRXZlbnQpO3ZhciBiPWEud2hlZWxEZWx0YT9hLndoZWVsRGVsdGE6LWEuZGVsdGFZO3JldHVybiBhLmRldGFpbHx8Yj4wfTtiLmJpbmQoIm1vdXNld2hlZWwgd2hlZWwiLGZ1bmN0aW9uKGIpe2EuJGFwcGx5KGQoYik/YS5pbmNyZW1lbnRIb3VycygpOmEuZGVjcmVtZW50SG91cnMoKSksYi5wcmV2ZW50RGVmYXVsdCgpfSksYy5iaW5kKCJtb3VzZXdoZWVsIHdoZWVsIixmdW5jdGlvbihiKXthLiRhcHBseShkKGIpP2EuaW5jcmVtZW50TWludXRlcygpOmEuZGVjcmVtZW50TWludXRlcygpKSxiLnByZXZlbnREZWZhdWx0KCl9KX0sdGhpcy5zZXR1cElucHV0RXZlbnRzPWZ1bmN0aW9uKGIsYyl7aWYoYS5yZWFkb25seUlucHV0KXJldHVybiBhLnVwZGF0ZUhvdXJzPWFuZ3VsYXIubm9vcCx2b2lkKGEudXBkYXRlTWludXRlcz1hbmd1bGFyLm5vb3ApO3ZhciBkPWZ1bmN0aW9uKGIsYyl7by4kc2V0Vmlld1ZhbHVlKG51bGwpLG8uJHNldFZhbGlkaXR5KCJ0aW1lIiwhMSksYW5ndWxhci5pc0RlZmluZWQoYikmJihhLmludmFsaWRIb3Vycz1iKSxhbmd1bGFyLmlzRGVmaW5lZChjKSYmKGEuaW52YWxpZE1pbnV0ZXM9Yyl9O2EudXBkYXRlSG91cnM9ZnVuY3Rpb24oKXt2YXIgYT1nKCk7YW5ndWxhci5pc0RlZmluZWQoYSk/KG4uc2V0SG91cnMoYSksaigiaCIpKTpkKCEwKX0sYi5iaW5kKCJibHVyIixmdW5jdGlvbigpeyFhLmludmFsaWRIb3VycyYmYS5ob3VyczwxMCYmYS4kYXBwbHkoZnVuY3Rpb24oKXthLmhvdXJzPWkoYS5ob3Vycyl9KX0pLGEudXBkYXRlTWludXRlcz1mdW5jdGlvbigpe3ZhciBhPWgoKTthbmd1bGFyLmlzRGVmaW5lZChhKT8obi5zZXRNaW51dGVzKGEpLGooIm0iKSk6ZCh2b2lkIDAsITApfSxjLmJpbmQoImJsdXIiLGZ1bmN0aW9uKCl7IWEuaW52YWxpZE1pbnV0ZXMmJmEubWludXRlczwxMCYmYS4kYXBwbHkoZnVuY3Rpb24oKXthLm1pbnV0ZXM9aShhLm1pbnV0ZXMpfSl9KX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgYT1vLiRtb2RlbFZhbHVlP25ldyBEYXRlKG8uJG1vZGVsVmFsdWUpOm51bGw7aXNOYU4oYSk/KG8uJHNldFZhbGlkaXR5KCJ0aW1lIiwhMSksZC5lcnJvcignVGltZXBpY2tlciBkaXJlY3RpdmU6ICJuZy1tb2RlbCIgdmFsdWUgbXVzdCBiZSBhIERhdGUgb2JqZWN0LCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgMDEuMDEuMTk3MCBvciBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4gUkZDMjgyMiBvciBJU08gODYwMSBkYXRlLicpKTooYSYmKG49YSksaygpLGwoKSl9LGEuaW5jcmVtZW50SG91cnM9ZnVuY3Rpb24oKXttKDYwKnEpfSxhLmRlY3JlbWVudEhvdXJzPWZ1bmN0aW9uKCl7bSg2MCotcSl9LGEuaW5jcmVtZW50TWludXRlcz1mdW5jdGlvbigpe20ocil9LGEuZGVjcmVtZW50TWludXRlcz1mdW5jdGlvbigpe20oLXIpfSxhLnRvZ2dsZU1lcmlkaWFuPWZ1bmN0aW9uKCl7bSg3MjAqKG4uZ2V0SG91cnMoKTwxMj8xOi0xKSl9fV0pLmRpcmVjdGl2ZSgidGltZXBpY2tlciIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXF1aXJlOlsidGltZXBpY2tlciIsIj9ebmdNb2RlbCJdLGNvbnRyb2xsZXI6IlRpbWVwaWNrZXJDb250cm9sbGVyIixyZXBsYWNlOiEwLHNjb3BlOnt9LHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS90aW1lcGlja2VyL3RpbWVwaWNrZXIuaHRtbCIsbGluazpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1kWzBdLGY9ZFsxXTtmJiZlLmluaXQoZixiLmZpbmQoImlucHV0IikpfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnR5cGVhaGVhZCIsWyJ1aS5ib290c3RyYXAucG9zaXRpb24iLCJ1aS5ib290c3RyYXAuYmluZEh0bWwiXSkuZmFjdG9yeSgidHlwZWFoZWFkUGFyc2VyIixbIiRwYXJzZSIsZnVuY3Rpb24oYSl7dmFyIGI9L15ccyooLio/KSg/OlxzK2FzXHMrKC4qPykpP1xzK2ZvclxzKyg/OihbXCRcd11bXCRcd1xkXSopKVxzK2luXHMrKC4qKSQvO3JldHVybntwYXJzZTpmdW5jdGlvbihjKXt2YXIgZD1jLm1hdGNoKGIpO2lmKCFkKXRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdHlwZWFoZWFkIHNwZWNpZmljYXRpb24gaW4gZm9ybSBvZiAiX21vZGVsVmFsdWVfIChhcyBfbGFiZWxfKT8gZm9yIF9pdGVtXyBpbiBfY29sbGVjdGlvbl8iIGJ1dCBnb3QgIicrYysnIi4nKTtyZXR1cm57aXRlbU5hbWU6ZFszXSxzb3VyY2U6YShkWzRdKSx2aWV3TWFwcGVyOmEoZFsyXXx8ZFsxXSksbW9kZWxNYXBwZXI6YShkWzFdKX19fX1dKS5kaXJlY3RpdmUoInR5cGVhaGVhZCIsWyIkY29tcGlsZSIsIiRwYXJzZSIsIiRxIiwiJHRpbWVvdXQiLCIkZG9jdW1lbnQiLCIkcG9zaXRpb24iLCJ0eXBlYWhlYWRQYXJzZXIiLGZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe3ZhciBoPVs5LDEzLDI3LDM4LDQwXTtyZXR1cm57cmVxdWlyZToibmdNb2RlbCIsbGluazpmdW5jdGlvbihpLGosayxsKXt2YXIgbSxuPWkuJGV2YWwoay50eXBlYWhlYWRNaW5MZW5ndGgpfHwxLG89aS4kZXZhbChrLnR5cGVhaGVhZFdhaXRNcyl8fDAscD1pLiRldmFsKGsudHlwZWFoZWFkRWRpdGFibGUpIT09ITEscT1iKGsudHlwZWFoZWFkTG9hZGluZykuYXNzaWdufHxhbmd1bGFyLm5vb3Ascj1iKGsudHlwZWFoZWFkT25TZWxlY3QpLHM9ay50eXBlYWhlYWRJbnB1dEZvcm1hdHRlcj9iKGsudHlwZWFoZWFkSW5wdXRGb3JtYXR0ZXIpOnZvaWQgMCx0PWsudHlwZWFoZWFkQXBwZW5kVG9Cb2R5P2kuJGV2YWwoay50eXBlYWhlYWRBcHBlbmRUb0JvZHkpOiExLHU9YihrLm5nTW9kZWwpLmFzc2lnbix2PWcucGFyc2Uoay50eXBlYWhlYWQpLHc9aS4kbmV3KCk7aS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe3cuJGRlc3Ryb3koKX0pO3ZhciB4PSJ0eXBlYWhlYWQtIit3LiRpZCsiLSIrTWF0aC5mbG9vcigxZTQqTWF0aC5yYW5kb20oKSk7ai5hdHRyKHsiYXJpYS1hdXRvY29tcGxldGUiOiJsaXN0IiwiYXJpYS1leHBhbmRlZCI6ITEsImFyaWEtb3ducyI6eH0pO3ZhciB5PWFuZ3VsYXIuZWxlbWVudCgiPGRpdiB0eXBlYWhlYWQtcG9wdXA+PC9kaXY+Iik7eS5hdHRyKHtpZDp4LG1hdGNoZXM6Im1hdGNoZXMiLGFjdGl2ZToiYWN0aXZlSWR4IixzZWxlY3Q6InNlbGVjdChhY3RpdmVJZHgpIixxdWVyeToicXVlcnkiLHBvc2l0aW9uOiJwb3NpdGlvbiJ9KSxhbmd1bGFyLmlzRGVmaW5lZChrLnR5cGVhaGVhZFRlbXBsYXRlVXJsKSYmeS5hdHRyKCJ0ZW1wbGF0ZS11cmwiLGsudHlwZWFoZWFkVGVtcGxhdGVVcmwpO3ZhciB6PWZ1bmN0aW9uKCl7dy5tYXRjaGVzPVtdLHcuYWN0aXZlSWR4PS0xLGouYXR0cigiYXJpYS1leHBhbmRlZCIsITEpfSxBPWZ1bmN0aW9uKGEpe3JldHVybiB4KyItb3B0aW9uLSIrYX07dy4kd2F0Y2goImFjdGl2ZUlkeCIsZnVuY3Rpb24oYSl7MD5hP2oucmVtb3ZlQXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50Iik6ai5hdHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLEEoYSkpfSk7dmFyIEI9ZnVuY3Rpb24oYSl7dmFyIGI9eyR2aWV3VmFsdWU6YX07cShpLCEwKSxjLndoZW4odi5zb3VyY2UoaSxiKSkudGhlbihmdW5jdGlvbihjKXt2YXIgZD1hPT09bC4kdmlld1ZhbHVlO2lmKGQmJm0paWYoYy5sZW5ndGg+MCl7dy5hY3RpdmVJZHg9MCx3Lm1hdGNoZXMubGVuZ3RoPTA7Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspYlt2Lml0ZW1OYW1lXT1jW2VdLHcubWF0Y2hlcy5wdXNoKHtpZDpBKGUpLGxhYmVsOnYudmlld01hcHBlcih3LGIpLG1vZGVsOmNbZV19KTt3LnF1ZXJ5PWEsdy5wb3NpdGlvbj10P2Yub2Zmc2V0KGopOmYucG9zaXRpb24oaiksdy5wb3NpdGlvbi50b3A9dy5wb3NpdGlvbi50b3Arai5wcm9wKCJvZmZzZXRIZWlnaHQiKSxqLmF0dHIoImFyaWEtZXhwYW5kZWQiLCEwKX1lbHNlIHooKTtkJiZxKGksITEpfSxmdW5jdGlvbigpe3ooKSxxKGksITEpfSl9O3ooKSx3LnF1ZXJ5PXZvaWQgMDt2YXIgQztsLiRwYXJzZXJzLnVuc2hpZnQoZnVuY3Rpb24oYSl7cmV0dXJuIG09ITAsYSYmYS5sZW5ndGg+PW4/bz4wPyhDJiZkLmNhbmNlbChDKSxDPWQoZnVuY3Rpb24oKXtCKGEpfSxvKSk6QihhKToocShpLCExKSx6KCkpLHA/YTphP3ZvaWQgbC4kc2V0VmFsaWRpdHkoImVkaXRhYmxlIiwhMSk6KGwuJHNldFZhbGlkaXR5KCJlZGl0YWJsZSIsITApLGEpfSksbC4kZm9ybWF0dGVycy5wdXNoKGZ1bmN0aW9uKGEpe3ZhciBiLGMsZD17fTtyZXR1cm4gcz8oZC4kbW9kZWw9YSxzKGksZCkpOihkW3YuaXRlbU5hbWVdPWEsYj12LnZpZXdNYXBwZXIoaSxkKSxkW3YuaXRlbU5hbWVdPXZvaWQgMCxjPXYudmlld01hcHBlcihpLGQpLGIhPT1jP2I6YSl9KSx3LnNlbGVjdD1mdW5jdGlvbihhKXt2YXIgYixjLGU9e307ZVt2Lml0ZW1OYW1lXT1jPXcubWF0Y2hlc1thXS5tb2RlbCxiPXYubW9kZWxNYXBwZXIoaSxlKSx1KGksYiksbC4kc2V0VmFsaWRpdHkoImVkaXRhYmxlIiwhMCkscihpLHskaXRlbTpjLCRtb2RlbDpiLCRsYWJlbDp2LnZpZXdNYXBwZXIoaSxlKX0pLHooKSxkKGZ1bmN0aW9uKCl7alswXS5mb2N1cygpfSwwLCExKX0sai5iaW5kKCJrZXlkb3duIixmdW5jdGlvbihhKXswIT09dy5tYXRjaGVzLmxlbmd0aCYmLTEhPT1oLmluZGV4T2YoYS53aGljaCkmJihhLnByZXZlbnREZWZhdWx0KCksNDA9PT1hLndoaWNoPyh3LmFjdGl2ZUlkeD0ody5hY3RpdmVJZHgrMSkldy5tYXRjaGVzLmxlbmd0aCx3LiRkaWdlc3QoKSk6Mzg9PT1hLndoaWNoPyh3LmFjdGl2ZUlkeD0ody5hY3RpdmVJZHg/dy5hY3RpdmVJZHg6dy5tYXRjaGVzLmxlbmd0aCktMSx3LiRkaWdlc3QoKSk6MTM9PT1hLndoaWNofHw5PT09YS53aGljaD93LiRhcHBseShmdW5jdGlvbigpe3cuc2VsZWN0KHcuYWN0aXZlSWR4KX0pOjI3PT09YS53aGljaCYmKGEuc3RvcFByb3BhZ2F0aW9uKCkseigpLHcuJGRpZ2VzdCgpKSl9KSxqLmJpbmQoImJsdXIiLGZ1bmN0aW9uKCl7bT0hMX0pO3ZhciBEPWZ1bmN0aW9uKGEpe2pbMF0hPT1hLnRhcmdldCYmKHooKSx3LiRkaWdlc3QoKSl9O2UuYmluZCgiY2xpY2siLEQpLGkuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtlLnVuYmluZCgiY2xpY2siLEQpfSk7dmFyIEU9YSh5KSh3KTt0P2UuZmluZCgiYm9keSIpLmFwcGVuZChFKTpqLmFmdGVyKEUpfX19XSkuZGlyZWN0aXZlKCJ0eXBlYWhlYWRQb3B1cCIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixzY29wZTp7bWF0Y2hlczoiPSIscXVlcnk6Ij0iLGFjdGl2ZToiPSIscG9zaXRpb246Ij0iLHNlbGVjdDoiJiJ9LHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtcG9wdXAuaHRtbCIsbGluazpmdW5jdGlvbihhLGIsYyl7YS50ZW1wbGF0ZVVybD1jLnRlbXBsYXRlVXJsLGEuaXNPcGVuPWZ1bmN0aW9uKCl7cmV0dXJuIGEubWF0Y2hlcy5sZW5ndGg+MH0sYS5pc0FjdGl2ZT1mdW5jdGlvbihiKXtyZXR1cm4gYS5hY3RpdmU9PWJ9LGEuc2VsZWN0QWN0aXZlPWZ1bmN0aW9uKGIpe2EuYWN0aXZlPWJ9LGEuc2VsZWN0TWF0Y2g9ZnVuY3Rpb24oYil7YS5zZWxlY3Qoe2FjdGl2ZUlkeDpifSl9fX19KS5kaXJlY3RpdmUoInR5cGVhaGVhZE1hdGNoIixbIiRodHRwIiwiJHRlbXBsYXRlQ2FjaGUiLCIkY29tcGlsZSIsIiRwYXJzZSIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsc2NvcGU6e2luZGV4OiI9IixtYXRjaDoiPSIscXVlcnk6Ij0ifSxsaW5rOmZ1bmN0aW9uKGUsZixnKXt2YXIgaD1kKGcudGVtcGxhdGVVcmwpKGUuJHBhcmVudCl8fCJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLW1hdGNoLmh0bWwiO2EuZ2V0KGgse2NhY2hlOmJ9KS5zdWNjZXNzKGZ1bmN0aW9uKGEpe2YucmVwbGFjZVdpdGgoYyhhLnRyaW0oKSkoZSkpfSl9fX1dKS5maWx0ZXIoInR5cGVhaGVhZEhpZ2hsaWdodCIsZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3JldHVybiBhLnJlcGxhY2UoLyhbLj8qK14kW1xdXFwoKXt9fC1dKS9nLCJcXCQxIil9cmV0dXJuIGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGM/KCIiK2IpLnJlcGxhY2UobmV3IFJlZ0V4cChhKGMpLCJnaSIpLCI8c3Ryb25nPiQmPC9zdHJvbmc+Iik6Yn19KSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi1ncm91cC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLWdyb3VwLmh0bWwiLCc8ZGl2IGNsYXNzPSJwYW5lbCBwYW5lbC1kZWZhdWx0Ij5cbiAgPGRpdiBjbGFzcz0icGFuZWwtaGVhZGluZyI+XG4gICAgPGg0IGNsYXNzPSJwYW5lbC10aXRsZSI+XG4gICAgICA8YSBjbGFzcz0iYWNjb3JkaW9uLXRvZ2dsZSIgbmctY2xpY2s9InRvZ2dsZU9wZW4oKSIgYWNjb3JkaW9uLXRyYW5zY2x1ZGU9ImhlYWRpbmciPjxzcGFuIG5nLWNsYXNzPSJ7XCd0ZXh0LW11dGVkXCc6IGlzRGlzYWJsZWR9Ij57e2hlYWRpbmd9fTwvc3Bhbj48L2E+XG4gICAgPC9oND5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InBhbmVsLWNvbGxhcHNlIiBjb2xsYXBzZT0iIWlzT3BlbiI+XG4JICA8ZGl2IGNsYXNzPSJwYW5lbC1ib2R5IiBuZy10cmFuc2NsdWRlPjwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24uaHRtbCIsJzxkaXYgY2xhc3M9InBhbmVsLWdyb3VwIiBuZy10cmFuc2NsdWRlPjwvZGl2PicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9hbGVydC9hbGVydC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9hbGVydC9hbGVydC5odG1sIiwnPGRpdiBjbGFzcz0iYWxlcnQiIG5nLWNsYXNzPSJ7XCdhbGVydC17e3R5cGUgfHwgXCd3YXJuaW5nXCd9fVwnOiB0cnVlLCBcJ2FsZXJ0LWRpc21pc3NhYmxlXCc6IGNsb3NlYWJsZX0iIHJvbGU9ImFsZXJ0Ij5cbiAgICA8YnV0dG9uIG5nLXNob3c9ImNsb3NlYWJsZSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIG5nLWNsaWNrPSJjbG9zZSgpIj5cbiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49InRydWUiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPSJzci1vbmx5Ij5DbG9zZTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IG5nLXRyYW5zY2x1ZGU+PC9kaXY+XG48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9jYXJvdXNlbC9jYXJvdXNlbC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9jYXJvdXNlbC9jYXJvdXNlbC5odG1sIiwnPGRpdiBuZy1tb3VzZWVudGVyPSJwYXVzZSgpIiBuZy1tb3VzZWxlYXZlPSJwbGF5KCkiIGNsYXNzPSJjYXJvdXNlbCIgbmctc3dpcGUtcmlnaHQ9InByZXYoKSIgbmctc3dpcGUtbGVmdD0ibmV4dCgpIj5cbiAgICA8b2wgY2xhc3M9ImNhcm91c2VsLWluZGljYXRvcnMiIG5nLXNob3c9InNsaWRlcy5sZW5ndGggPiAxIj5cbiAgICAgICAgPGxpIG5nLXJlcGVhdD0ic2xpZGUgaW4gc2xpZGVzIHRyYWNrIGJ5ICRpbmRleCIgbmctY2xhc3M9InthY3RpdmU6IGlzQWN0aXZlKHNsaWRlKX0iIG5nLWNsaWNrPSJzZWxlY3Qoc2xpZGUpIj48L2xpPlxuICAgIDwvb2w+XG4gICAgPGRpdiBjbGFzcz0iY2Fyb3VzZWwtaW5uZXIiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+XG4gICAgPGEgY2xhc3M9ImxlZnQgY2Fyb3VzZWwtY29udHJvbCIgbmctY2xpY2s9InByZXYoKSIgbmctc2hvdz0ic2xpZGVzLmxlbmd0aCA+IDEiPjxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tbGVmdCI+PC9zcGFuPjwvYT5cbiAgICA8YSBjbGFzcz0icmlnaHQgY2Fyb3VzZWwtY29udHJvbCIgbmctY2xpY2s9Im5leHQoKSIgbmctc2hvdz0ic2xpZGVzLmxlbmd0aCA+IDEiPjxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQiPjwvc3Bhbj48L2E+XG48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9jYXJvdXNlbC9zbGlkZS5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9jYXJvdXNlbC9zbGlkZS5odG1sIiwiPGRpdiBuZy1jbGFzcz1cIntcbiAgICAnYWN0aXZlJzogbGVhdmluZyB8fCAoYWN0aXZlICYmICFlbnRlcmluZyksXG4gICAgJ3ByZXYnOiAobmV4dCB8fCBhY3RpdmUpICYmIGRpcmVjdGlvbj09J3ByZXYnLFxuICAgICduZXh0JzogKG5leHQgfHwgYWN0aXZlKSAmJiBkaXJlY3Rpb249PSduZXh0JyxcbiAgICAncmlnaHQnOiBkaXJlY3Rpb249PSdwcmV2JyxcbiAgICAnbGVmdCc6IGRpcmVjdGlvbj09J25leHQnXG4gIH1cIiBjbGFzcz1cIml0ZW0gdGV4dC1jZW50ZXJcIiBuZy10cmFuc2NsdWRlPjwvZGl2PlxuIil9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RhdGVwaWNrZXIuaHRtbCIsJzxkaXYgbmctc3dpdGNoPSJkYXRlcGlja2VyTW9kZSIgcm9sZT0iYXBwbGljYXRpb24iIG5nLWtleWRvd249ImtleWRvd24oJGV2ZW50KSI+XG4gIDxkYXlwaWNrZXIgbmctc3dpdGNoLXdoZW49ImRheSIgdGFiaW5kZXg9IjAiPjwvZGF5cGlja2VyPlxuICA8bW9udGhwaWNrZXIgbmctc3dpdGNoLXdoZW49Im1vbnRoIiB0YWJpbmRleD0iMCI+PC9tb250aHBpY2tlcj5cbiAgPHllYXJwaWNrZXIgbmctc3dpdGNoLXdoZW49InllYXIiIHRhYmluZGV4PSIwIj48L3llYXJwaWNrZXI+XG48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXkuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXkuaHRtbCIsJzx0YWJsZSByb2xlPSJncmlkIiBhcmlhLWxhYmVsbGVkYnk9Int7dW5pcXVlSWR9fS10aXRsZSIgYXJpYS1hY3RpdmVkZXNjZW5kYW50PSJ7e2FjdGl2ZURhdGVJZH19Ij5cbiAgPHRoZWFkPlxuICAgIDx0cj5cbiAgICAgIDx0aD48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20gcHVsbC1sZWZ0IiBuZy1jbGljaz0ibW92ZSgtMSkiIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1sZWZ0Ij48L2k+PC9idXR0b24+PC90aD5cbiAgICAgIDx0aCBjb2xzcGFuPSJ7ezUgKyBzaG93V2Vla3N9fSI+PGJ1dHRvbiBpZD0ie3t1bmlxdWVJZH19LXRpdGxlIiByb2xlPSJoZWFkaW5nIiBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgYXJpYS1hdG9taWM9InRydWUiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20iIG5nLWNsaWNrPSJ0b2dnbGVNb2RlKCkiIHRhYmluZGV4PSItMSIgc3R5bGU9IndpZHRoOjEwMCU7Ij48c3Ryb25nPnt7dGl0bGV9fTwvc3Ryb25nPjwvYnV0dG9uPjwvdGg+XG4gICAgICA8dGg+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtcmlnaHQiIG5nLWNsaWNrPSJtb3ZlKDEpIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQiPjwvaT48L2J1dHRvbj48L3RoPlxuICAgIDwvdHI+XG4gICAgPHRyPlxuICAgICAgPHRoIG5nLXNob3c9InNob3dXZWVrcyIgY2xhc3M9InRleHQtY2VudGVyIj48L3RoPlxuICAgICAgPHRoIG5nLXJlcGVhdD0ibGFiZWwgaW4gbGFiZWxzIHRyYWNrIGJ5ICRpbmRleCIgY2xhc3M9InRleHQtY2VudGVyIj48c21hbGwgYXJpYS1sYWJlbD0ie3tsYWJlbC5mdWxsfX0iPnt7bGFiZWwuYWJicn19PC9zbWFsbD48L3RoPlxuICAgIDwvdHI+XG4gIDwvdGhlYWQ+XG4gIDx0Ym9keT5cbiAgICA8dHIgbmctcmVwZWF0PSJyb3cgaW4gcm93cyB0cmFjayBieSAkaW5kZXgiPlxuICAgICAgPHRkIG5nLXNob3c9InNob3dXZWVrcyIgY2xhc3M9InRleHQtY2VudGVyIGg2Ij48ZW0+e3sgd2Vla051bWJlcnNbJGluZGV4XSB9fTwvZW0+PC90ZD5cbiAgICAgIDx0ZCBuZy1yZXBlYXQ9ImR0IGluIHJvdyB0cmFjayBieSBkdC5kYXRlIiBjbGFzcz0idGV4dC1jZW50ZXIiIHJvbGU9ImdyaWRjZWxsIiBpZD0ie3tkdC51aWR9fSIgYXJpYS1kaXNhYmxlZD0ie3shIWR0LmRpc2FibGVkfX0iPlxuICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgc3R5bGU9IndpZHRoOjEwMCU7IiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSIgbmctY2xhc3M9IntcJ2J0bi1pbmZvXCc6IGR0LnNlbGVjdGVkLCBhY3RpdmU6IGlzQWN0aXZlKGR0KX0iIG5nLWNsaWNrPSJzZWxlY3QoZHQuZGF0ZSkiIG5nLWRpc2FibGVkPSJkdC5kaXNhYmxlZCIgdGFiaW5kZXg9Ii0xIj48c3BhbiBuZy1jbGFzcz0ie1wndGV4dC1tdXRlZFwnOiBkdC5zZWNvbmRhcnksIFwndGV4dC1pbmZvXCc6IGR0LmN1cnJlbnR9Ij57e2R0LmxhYmVsfX08L3NwYW4+PC9idXR0b24+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGJvZHk+XG48L3RhYmxlPlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2RhdGVwaWNrZXIvbW9udGguaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvZGF0ZXBpY2tlci9tb250aC5odG1sIiwnPHRhYmxlIHJvbGU9ImdyaWQiIGFyaWEtbGFiZWxsZWRieT0ie3t1bmlxdWVJZH19LXRpdGxlIiBhcmlhLWFjdGl2ZWRlc2NlbmRhbnQ9Int7YWN0aXZlRGF0ZUlkfX0iPlxuICA8dGhlYWQ+XG4gICAgPHRyPlxuICAgICAgPHRoPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBwdWxsLWxlZnQiIG5nLWNsaWNrPSJtb3ZlKC0xKSIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLWxlZnQiPjwvaT48L2J1dHRvbj48L3RoPlxuICAgICAgPHRoPjxidXR0b24gaWQ9Int7dW5pcXVlSWR9fS10aXRsZSIgcm9sZT0iaGVhZGluZyIgYXJpYS1saXZlPSJhc3NlcnRpdmUiIGFyaWEtYXRvbWljPSJ0cnVlIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIiBuZy1jbGljaz0idG9nZ2xlTW9kZSgpIiB0YWJpbmRleD0iLTEiIHN0eWxlPSJ3aWR0aDoxMDAlOyI+PHN0cm9uZz57e3RpdGxlfX08L3N0cm9uZz48L2J1dHRvbj48L3RoPlxuICAgICAgPHRoPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBwdWxsLXJpZ2h0IiBuZy1jbGljaz0ibW92ZSgxKSIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0Ij48L2k+PC9idXR0b24+PC90aD5cbiAgICA8L3RyPlxuICA8L3RoZWFkPlxuICA8dGJvZHk+XG4gICAgPHRyIG5nLXJlcGVhdD0icm93IGluIHJvd3MgdHJhY2sgYnkgJGluZGV4Ij5cbiAgICAgIDx0ZCBuZy1yZXBlYXQ9ImR0IGluIHJvdyB0cmFjayBieSBkdC5kYXRlIiBjbGFzcz0idGV4dC1jZW50ZXIiIHJvbGU9ImdyaWRjZWxsIiBpZD0ie3tkdC51aWR9fSIgYXJpYS1kaXNhYmxlZD0ie3shIWR0LmRpc2FibGVkfX0iPlxuICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgc3R5bGU9IndpZHRoOjEwMCU7IiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiBuZy1jbGFzcz0ie1wnYnRuLWluZm9cJzogZHQuc2VsZWN0ZWQsIGFjdGl2ZTogaXNBY3RpdmUoZHQpfSIgbmctY2xpY2s9InNlbGVjdChkdC5kYXRlKSIgbmctZGlzYWJsZWQ9ImR0LmRpc2FibGVkIiB0YWJpbmRleD0iLTEiPjxzcGFuIG5nLWNsYXNzPSJ7XCd0ZXh0LWluZm9cJzogZHQuY3VycmVudH0iPnt7ZHQubGFiZWx9fTwvc3Bhbj48L2J1dHRvbj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvdGFibGU+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvZGF0ZXBpY2tlci9wb3B1cC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL3BvcHVwLmh0bWwiLCc8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiIG5nLXN0eWxlPSJ7ZGlzcGxheTogKGlzT3BlbiAmJiBcJ2Jsb2NrXCcpIHx8IFwnbm9uZVwnLCB0b3A6IHBvc2l0aW9uLnRvcCtcJ3B4XCcsIGxlZnQ6IHBvc2l0aW9uLmxlZnQrXCdweFwnfSIgbmcta2V5ZG93bj0ia2V5ZG93bigkZXZlbnQpIj5cbgk8bGkgbmctdHJhbnNjbHVkZT48L2xpPlxuCTxsaSBuZy1pZj0ic2hvd0J1dHRvbkJhciIgc3R5bGU9InBhZGRpbmc6MTBweCA5cHggMnB4Ij5cbgkJPHNwYW4gY2xhc3M9ImJ0bi1ncm91cCI+XG4JCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc20gYnRuLWluZm8iIG5nLWNsaWNrPSJzZWxlY3QoXCd0b2RheVwnKSI+e3sgZ2V0VGV4dChcJ2N1cnJlbnRcJykgfX08L2J1dHRvbj5cbgkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zbSBidG4tZGFuZ2VyIiBuZy1jbGljaz0ic2VsZWN0KG51bGwpIj57eyBnZXRUZXh0KFwnY2xlYXJcJykgfX08L2J1dHRvbj5cbgkJPC9zcGFuPlxuCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc20gYnRuLXN1Y2Nlc3MgcHVsbC1yaWdodCIgbmctY2xpY2s9ImNsb3NlKCkiPnt7IGdldFRleHQoXCdjbG9zZVwnKSB9fTwvYnV0dG9uPlxuCTwvbGk+XG48L3VsPlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2RhdGVwaWNrZXIveWVhci5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL3llYXIuaHRtbCIsJzx0YWJsZSByb2xlPSJncmlkIiBhcmlhLWxhYmVsbGVkYnk9Int7dW5pcXVlSWR9fS10aXRsZSIgYXJpYS1hY3RpdmVkZXNjZW5kYW50PSJ7e2FjdGl2ZURhdGVJZH19Ij5cbiAgPHRoZWFkPlxuICAgIDx0cj5cbiAgICAgIDx0aD48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20gcHVsbC1sZWZ0IiBuZy1jbGljaz0ibW92ZSgtMSkiIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1sZWZ0Ij48L2k+PC9idXR0b24+PC90aD5cbiAgICAgIDx0aCBjb2xzcGFuPSIzIj48YnV0dG9uIGlkPSJ7e3VuaXF1ZUlkfX0tdGl0bGUiIHJvbGU9ImhlYWRpbmciIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBhcmlhLWF0b21pYz0idHJ1ZSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSIgbmctY2xpY2s9InRvZ2dsZU1vZGUoKSIgdGFiaW5kZXg9Ii0xIiBzdHlsZT0id2lkdGg6MTAwJTsiPjxzdHJvbmc+e3t0aXRsZX19PC9zdHJvbmc+PC9idXR0b24+PC90aD5cbiAgICAgIDx0aD48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20gcHVsbC1yaWdodCIgbmctY2xpY2s9Im1vdmUoMSkiIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1yaWdodCI+PC9pPjwvYnV0dG9uPjwvdGg+XG4gICAgPC90cj5cbiAgPC90aGVhZD5cbiAgPHRib2R5PlxuICAgIDx0ciBuZy1yZXBlYXQ9InJvdyBpbiByb3dzIHRyYWNrIGJ5ICRpbmRleCI+XG4gICAgICA8dGQgbmctcmVwZWF0PSJkdCBpbiByb3cgdHJhY2sgYnkgZHQuZGF0ZSIgY2xhc3M9InRleHQtY2VudGVyIiByb2xlPSJncmlkY2VsbCIgaWQ9Int7ZHQudWlkfX0iIGFyaWEtZGlzYWJsZWQ9Int7ISFkdC5kaXNhYmxlZH19Ij5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIHN0eWxlPSJ3aWR0aDoxMDAlOyIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgbmctY2xhc3M9IntcJ2J0bi1pbmZvXCc6IGR0LnNlbGVjdGVkLCBhY3RpdmU6IGlzQWN0aXZlKGR0KX0iIG5nLWNsaWNrPSJzZWxlY3QoZHQuZGF0ZSkiIG5nLWRpc2FibGVkPSJkdC5kaXNhYmxlZCIgdGFiaW5kZXg9Ii0xIj48c3BhbiBuZy1jbGFzcz0ie1wndGV4dC1pbmZvXCc6IGR0LmN1cnJlbnR9Ij57e2R0LmxhYmVsfX08L3NwYW4+PC9idXR0b24+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGJvZHk+XG48L3RhYmxlPlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL21vZGFsL2JhY2tkcm9wLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL21vZGFsL2JhY2tkcm9wLmh0bWwiLCc8ZGl2IGNsYXNzPSJtb2RhbC1iYWNrZHJvcCBmYWRlIlxuICAgICBuZy1jbGFzcz0ie2luOiBhbmltYXRlfSJcbiAgICAgbmctc3R5bGU9IntcJ3otaW5kZXhcJzogMTA0MCArIChpbmRleCAmJiAxIHx8IDApICsgaW5kZXgqMTB9IlxuPjwvZGl2PlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL21vZGFsL3dpbmRvdy5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9tb2RhbC93aW5kb3cuaHRtbCIsJzxkaXYgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGNsYXNzPSJtb2RhbCBmYWRlIiBuZy1jbGFzcz0ie2luOiBhbmltYXRlfSIgbmctc3R5bGU9IntcJ3otaW5kZXhcJzogMTA1MCArIGluZGV4KjEwLCBkaXNwbGF5OiBcJ2Jsb2NrXCd9IiBuZy1jbGljaz0iY2xvc2UoJGV2ZW50KSI+XG4gICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIiBuZy1jbGFzcz0ie1wnbW9kYWwtc21cJzogc2l6ZSA9PSBcJ3NtXCcsIFwnbW9kYWwtbGdcJzogc2l6ZSA9PSBcJ2xnXCd9Ij48ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50IiBuZy10cmFuc2NsdWRlPjwvZGl2PjwvZGl2PlxuPC9kaXY+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3BhZ2luYXRpb24vcGFnZXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdlci5odG1sIiwnPHVsIGNsYXNzPSJwYWdlciI+XG4gIDxsaSBuZy1jbGFzcz0ie2Rpc2FibGVkOiBub1ByZXZpb3VzKCksIHByZXZpb3VzOiBhbGlnbn0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UocGFnZSAtIDEpIj57e2dldFRleHQoXCdwcmV2aW91c1wnKX19PC9hPjwvbGk+XG4gIDxsaSBuZy1jbGFzcz0ie2Rpc2FibGVkOiBub05leHQoKSwgbmV4dDogYWxpZ259Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKHBhZ2UgKyAxKSI+e3tnZXRUZXh0KFwnbmV4dFwnKX19PC9hPjwvbGk+XG48L3VsPicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2luYXRpb24uaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmh0bWwiLCc8dWwgY2xhc3M9InBhZ2luYXRpb24iPlxuICA8bGkgbmctaWY9ImJvdW5kYXJ5TGlua3MiIG5nLWNsYXNzPSJ7ZGlzYWJsZWQ6IG5vUHJldmlvdXMoKX0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UoMSkiPnt7Z2V0VGV4dChcJ2ZpcnN0XCcpfX08L2E+PC9saT5cbiAgPGxpIG5nLWlmPSJkaXJlY3Rpb25MaW5rcyIgbmctY2xhc3M9IntkaXNhYmxlZDogbm9QcmV2aW91cygpfSI+PGEgaHJlZiBuZy1jbGljaz0ic2VsZWN0UGFnZShwYWdlIC0gMSkiPnt7Z2V0VGV4dChcJ3ByZXZpb3VzXCcpfX08L2E+PC9saT5cbiAgPGxpIG5nLXJlcGVhdD0icGFnZSBpbiBwYWdlcyB0cmFjayBieSAkaW5kZXgiIG5nLWNsYXNzPSJ7YWN0aXZlOiBwYWdlLmFjdGl2ZX0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UocGFnZS5udW1iZXIpIj57e3BhZ2UudGV4dH19PC9hPjwvbGk+XG4gIDxsaSBuZy1pZj0iZGlyZWN0aW9uTGlua3MiIG5nLWNsYXNzPSJ7ZGlzYWJsZWQ6IG5vTmV4dCgpfSI+PGEgaHJlZiBuZy1jbGljaz0ic2VsZWN0UGFnZShwYWdlICsgMSkiPnt7Z2V0VGV4dChcJ25leHRcJyl9fTwvYT48L2xpPlxuICA8bGkgbmctaWY9ImJvdW5kYXJ5TGlua3MiIG5nLWNsYXNzPSJ7ZGlzYWJsZWQ6IG5vTmV4dCgpfSI+PGEgaHJlZiBuZy1jbGljaz0ic2VsZWN0UGFnZSh0b3RhbFBhZ2VzKSI+e3tnZXRUZXh0KFwnbGFzdFwnKX19PC9hPjwvbGk+XG48L3VsPicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtaHRtbC11bnNhZmUtcG9wdXAuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLWh0bWwtdW5zYWZlLXBvcHVwLmh0bWwiLCc8ZGl2IGNsYXNzPSJ0b29sdGlwIHt7cGxhY2VtZW50fX0iIG5nLWNsYXNzPSJ7IGluOiBpc09wZW4oKSwgZmFkZTogYW5pbWF0aW9uKCkgfSI+XG4gIDxkaXYgY2xhc3M9InRvb2x0aXAtYXJyb3ciPjwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0b29sdGlwLWlubmVyIiBiaW5kLWh0bWwtdW5zYWZlPSJjb250ZW50Ij48L2Rpdj5cbjwvZGl2PlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1wb3B1cC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtcG9wdXAuaHRtbCIsJzxkaXYgY2xhc3M9InRvb2x0aXAge3twbGFjZW1lbnR9fSIgbmctY2xhc3M9InsgaW46IGlzT3BlbigpLCBmYWRlOiBhbmltYXRpb24oKSB9Ij5cbiAgPGRpdiBjbGFzcz0idG9vbHRpcC1hcnJvdyI+PC9kaXY+XG4gIDxkaXYgY2xhc3M9InRvb2x0aXAtaW5uZXIiIG5nLWJpbmQ9ImNvbnRlbnQiPjwvZGl2PlxuPC9kaXY+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvcG9wb3Zlci9wb3BvdmVyLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3BvcG92ZXIvcG9wb3Zlci5odG1sIiwnPGRpdiBjbGFzcz0icG9wb3ZlciB7e3BsYWNlbWVudH19IiBuZy1jbGFzcz0ieyBpbjogaXNPcGVuKCksIGZhZGU6IGFuaW1hdGlvbigpIH0iPlxuICA8ZGl2IGNsYXNzPSJhcnJvdyI+PC9kaXY+XG5cbiAgPGRpdiBjbGFzcz0icG9wb3Zlci1pbm5lciI+XG4gICAgICA8aDMgY2xhc3M9InBvcG92ZXItdGl0bGUiIG5nLWJpbmQ9InRpdGxlIiBuZy1zaG93PSJ0aXRsZSI+PC9oMz5cbiAgICAgIDxkaXYgY2xhc3M9InBvcG92ZXItY29udGVudCIgbmctYmluZD0iY29udGVudCI+PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvYmFyLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3Byb2dyZXNzYmFyL2Jhci5odG1sIiwnPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIiBuZy1jbGFzcz0idHlwZSAmJiBcJ3Byb2dyZXNzLWJhci1cJyArIHR5cGUiIHJvbGU9InByb2dyZXNzYmFyIiBhcmlhLXZhbHVlbm93PSJ7e3ZhbHVlfX0iIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9Int7bWF4fX0iIG5nLXN0eWxlPSJ7d2lkdGg6IHBlcmNlbnQgKyBcJyVcJ30iIGFyaWEtdmFsdWV0ZXh0PSJ7e3BlcmNlbnQgfCBudW1iZXI6MH19JSIgbmctdHJhbnNjbHVkZT48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3MuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3MuaHRtbCIsJzxkaXYgY2xhc3M9InByb2dyZXNzIiBuZy10cmFuc2NsdWRlPjwvZGl2PicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzc2Jhci5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzc2Jhci5odG1sIiwnPGRpdiBjbGFzcz0icHJvZ3Jlc3MiPlxuICA8ZGl2IGNsYXNzPSJwcm9ncmVzcy1iYXIiIG5nLWNsYXNzPSJ0eXBlICYmIFwncHJvZ3Jlc3MtYmFyLVwnICsgdHlwZSIgcm9sZT0icHJvZ3Jlc3NiYXIiIGFyaWEtdmFsdWVub3c9Int7dmFsdWV9fSIgYXJpYS12YWx1ZW1pbj0iMCIgYXJpYS12YWx1ZW1heD0ie3ttYXh9fSIgbmctc3R5bGU9Int3aWR0aDogcGVyY2VudCArIFwnJVwnfSIgYXJpYS12YWx1ZXRleHQ9Int7cGVyY2VudCB8IG51bWJlcjowfX0lIiBuZy10cmFuc2NsdWRlPjwvZGl2PlxuPC9kaXY+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3JhdGluZy9yYXRpbmcuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvcmF0aW5nL3JhdGluZy5odG1sIiwnPHNwYW4gbmctbW91c2VsZWF2ZT0icmVzZXQoKSIgbmcta2V5ZG93bj0ib25LZXlkb3duKCRldmVudCkiIHRhYmluZGV4PSIwIiByb2xlPSJzbGlkZXIiIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9Int7cmFuZ2UubGVuZ3RofX0iIGFyaWEtdmFsdWVub3c9Int7dmFsdWV9fSI+XG4gICAgPGkgbmctcmVwZWF0PSJyIGluIHJhbmdlIHRyYWNrIGJ5ICRpbmRleCIgbmctbW91c2VlbnRlcj0iZW50ZXIoJGluZGV4ICsgMSkiIG5nLWNsaWNrPSJyYXRlKCRpbmRleCArIDEpIiBjbGFzcz0iZ2x5cGhpY29uIiBuZy1jbGFzcz0iJGluZGV4IDwgdmFsdWUgJiYgKHIuc3RhdGVPbiB8fCBcJ2dseXBoaWNvbi1zdGFyXCcpIHx8IChyLnN0YXRlT2ZmIHx8IFwnZ2x5cGhpY29uLXN0YXItZW1wdHlcJykiPlxuICAgICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+KHt7ICRpbmRleCA8IHZhbHVlID8gXCcqXCcgOiBcJyBcJyB9fSk8L3NwYW4+XG4gICAgPC9pPlxuPC9zcGFuPicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90YWJzL3RhYi5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS90YWJzL3RhYi5odG1sIiwnPGxpIG5nLWNsYXNzPSJ7YWN0aXZlOiBhY3RpdmUsIGRpc2FibGVkOiBkaXNhYmxlZH0iPlxuICA8YSBuZy1jbGljaz0ic2VsZWN0KCkiIHRhYi1oZWFkaW5nLXRyYW5zY2x1ZGU+e3toZWFkaW5nfX08L2E+XG48L2xpPlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3RhYnMvdGFic2V0LXRpdGxlcy5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS90YWJzL3RhYnNldC10aXRsZXMuaHRtbCIsIjx1bCBjbGFzcz1cIm5hdiB7e3R5cGUgJiYgJ25hdi0nICsgdHlwZX19XCIgbmctY2xhc3M9XCJ7J25hdi1zdGFja2VkJzogdmVydGljYWx9XCI+XG48L3VsPlxuIil9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3RhYnMvdGFic2V0Lmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3RhYnMvdGFic2V0Lmh0bWwiLCdcbjxkaXY+XG4gIDx1bCBjbGFzcz0ibmF2IG5hdi17e3R5cGUgfHwgXCd0YWJzXCd9fSIgbmctY2xhc3M9IntcJ25hdi1zdGFja2VkXCc6IHZlcnRpY2FsLCBcJ25hdi1qdXN0aWZpZWRcJzoganVzdGlmaWVkfSIgbmctdHJhbnNjbHVkZT48L3VsPlxuICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+XG4gICAgPGRpdiBjbGFzcz0idGFiLXBhbmUiIFxuICAgICAgICAgbmctcmVwZWF0PSJ0YWIgaW4gdGFicyIgXG4gICAgICAgICBuZy1jbGFzcz0ie2FjdGl2ZTogdGFiLmFjdGl2ZX0iXG4gICAgICAgICB0YWItY29udGVudC10cmFuc2NsdWRlPSJ0YWIiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3RpbWVwaWNrZXIvdGltZXBpY2tlci5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS90aW1lcGlja2VyL3RpbWVwaWNrZXIuaHRtbCIsJzx0YWJsZT5cbgk8dGJvZHk+XG4JCTx0ciBjbGFzcz0idGV4dC1jZW50ZXIiPlxuCQkJPHRkPjxhIG5nLWNsaWNrPSJpbmNyZW1lbnRIb3VycygpIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXVwIj48L3NwYW4+PC9hPjwvdGQ+XG4JCQk8dGQ+Jm5ic3A7PC90ZD5cbgkJCTx0ZD48YSBuZy1jbGljaz0iaW5jcmVtZW50TWludXRlcygpIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXVwIj48L3NwYW4+PC9hPjwvdGQ+XG4JCQk8dGQgbmctc2hvdz0ic2hvd01lcmlkaWFuIj48L3RkPlxuCQk8L3RyPlxuCQk8dHI+XG4JCQk8dGQgc3R5bGU9IndpZHRoOjUwcHg7IiBjbGFzcz0iZm9ybS1ncm91cCIgbmctY2xhc3M9IntcJ2hhcy1lcnJvclwnOiBpbnZhbGlkSG91cnN9Ij5cbgkJCQk8aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9ImhvdXJzIiBuZy1jaGFuZ2U9InVwZGF0ZUhvdXJzKCkiIGNsYXNzPSJmb3JtLWNvbnRyb2wgdGV4dC1jZW50ZXIiIG5nLW1vdXNld2hlZWw9ImluY3JlbWVudEhvdXJzKCkiIG5nLXJlYWRvbmx5PSJyZWFkb25seUlucHV0IiBtYXhsZW5ndGg9IjIiPlxuCQkJPC90ZD5cbgkJCTx0ZD46PC90ZD5cbgkJCTx0ZCBzdHlsZT0id2lkdGg6NTBweDsiIGNsYXNzPSJmb3JtLWdyb3VwIiBuZy1jbGFzcz0ie1wnaGFzLWVycm9yXCc6IGludmFsaWRNaW51dGVzfSI+XG4JCQkJPGlucHV0IHR5cGU9InRleHQiIG5nLW1vZGVsPSJtaW51dGVzIiBuZy1jaGFuZ2U9InVwZGF0ZU1pbnV0ZXMoKSIgY2xhc3M9ImZvcm0tY29udHJvbCB0ZXh0LWNlbnRlciIgbmctcmVhZG9ubHk9InJlYWRvbmx5SW5wdXQiIG1heGxlbmd0aD0iMiI+XG4JCQk8L3RkPlxuCQkJPHRkIG5nLXNob3c9InNob3dNZXJpZGlhbiI+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgdGV4dC1jZW50ZXIiIG5nLWNsaWNrPSJ0b2dnbGVNZXJpZGlhbigpIj57e21lcmlkaWFufX08L2J1dHRvbj48L3RkPlxuCQk8L3RyPlxuCQk8dHIgY2xhc3M9InRleHQtY2VudGVyIj5cbgkJCTx0ZD48YSBuZy1jbGljaz0iZGVjcmVtZW50SG91cnMoKSIgY2xhc3M9ImJ0biBidG4tbGluayI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1kb3duIj48L3NwYW4+PC9hPjwvdGQ+XG4JCQk8dGQ+Jm5ic3A7PC90ZD5cbgkJCTx0ZD48YSBuZy1jbGljaz0iZGVjcmVtZW50TWludXRlcygpIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLWRvd24iPjwvc3Bhbj48L2E+PC90ZD5cbgkJCTx0ZCBuZy1zaG93PSJzaG93TWVyaWRpYW4iPjwvdGQ+XG4JCTwvdHI+XG4JPC90Ym9keT5cbjwvdGFibGU+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1tYXRjaC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLW1hdGNoLmh0bWwiLCc8YSB0YWJpbmRleD0iLTEiIGJpbmQtaHRtbC11bnNhZmU9Im1hdGNoLmxhYmVsIHwgdHlwZWFoZWFkSGlnaGxpZ2h0OnF1ZXJ5Ij48L2E+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtcG9wdXAuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1wb3B1cC5odG1sIiwnPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51IiBuZy1pZj0iaXNPcGVuKCkiIG5nLXN0eWxlPSJ7dG9wOiBwb3NpdGlvbi50b3ArXCdweFwnLCBsZWZ0OiBwb3NpdGlvbi5sZWZ0K1wncHhcJ30iIHN0eWxlPSJkaXNwbGF5OiBibG9jazsiIHJvbGU9Imxpc3Rib3giIGFyaWEtaGlkZGVuPSJ7eyFpc09wZW4oKX19Ij5cbiAgICA8bGkgbmctcmVwZWF0PSJtYXRjaCBpbiBtYXRjaGVzIHRyYWNrIGJ5ICRpbmRleCIgbmctY2xhc3M9InthY3RpdmU6IGlzQWN0aXZlKCRpbmRleCkgfSIgbmctbW91c2VlbnRlcj0ic2VsZWN0QWN0aXZlKCRpbmRleCkiIG5nLWNsaWNrPSJzZWxlY3RNYXRjaCgkaW5kZXgpIiByb2xlPSJvcHRpb24iIGlkPSJ7e21hdGNoLmlkfX0iPlxuICAgICAgICA8ZGl2IHR5cGVhaGVhZC1tYXRjaCBpbmRleD0iJGluZGV4IiBtYXRjaD0ibWF0Y2giIHF1ZXJ5PSJxdWVyeSIgdGVtcGxhdGUtdXJsPSJ0ZW1wbGF0ZVVybCI+PC9kaXY+XG4gICAgPC9saT5cbjwvdWw+JykKK31dKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90YWJsZXMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90YWJsZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJlM2I1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RhYmxlcy5weQpAQCAtMCwwICsxLDQ1MyBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNSAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gdG9hc3Rlcmd1aS53aWRnZXRzIGltcG9ydCBUb2FzdGVyVGFibGUKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUmVjaXBlLCBQcm9qZWN0TGF5ZXIsIExheWVyX1ZlcnNpb24sIE1hY2hpbmUsIFByb2plY3QKK2Zyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUSwgTWF4Citmcm9tIGRqYW5nby5jb25mLnVybHMgaW1wb3J0IHVybAorZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UKK2Zyb20gZGphbmdvLnZpZXdzLmdlbmVyaWMgaW1wb3J0IFRlbXBsYXRlVmlldworCisKK2NsYXNzIFByb2plY3RGaWx0ZXJzTWl4aW4ob2JqZWN0KToKKyAgICAiIiJDb21tb24gbWl4aW4gZm9yIHJlY2lwZSwgbWFjaGluZSBpbiBwcm9qZWN0IGZpbHRlcnMiIiIKKworICAgIGRlZiBmaWx0ZXJfaW5fcHJvamVjdChzZWxmLCBjb3VudF9vbmx5PUZhbHNlKToKKyAgICAgICAgcXVlcnkgPSBzZWxmLnF1ZXJ5c2V0LmZpbHRlcihsYXllcl92ZXJzaW9uX19pbj1zZWxmLnByb2plY3RfbGF5ZXJzKQorICAgICAgICBpZiBjb3VudF9vbmx5OgorICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5LmNvdW50KCkKKworICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gcXVlcnkKKworICAgIGRlZiBmaWx0ZXJfbm90X2luX3Byb2plY3Qoc2VsZiwgY291bnRfb25seT1GYWxzZSk6CisgICAgICAgIHF1ZXJ5ID0gc2VsZi5xdWVyeXNldC5leGNsdWRlKGxheWVyX3ZlcnNpb25fX2luPXNlbGYucHJvamVjdF9sYXllcnMpCisgICAgICAgIGlmIGNvdW50X29ubHk6CisgICAgICAgICAgICByZXR1cm4gcXVlcnkuY291bnQoKQorCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBxdWVyeQorCitjbGFzcyBMYXllcnNUYWJsZShUb2FzdGVyVGFibGUpOgorICAgICIiIlRhYmxlIG9mIGxheWVycyBpbiBUb2FzdGVyIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoTGF5ZXJzVGFibGUsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5kZWZhdWx0X29yZGVyYnkgPSAibGF5ZXJfX25hbWUiCisKKyAgICBkZWYgZ2V0X2NvbnRleHRfZGF0YShzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIGNvbnRleHQgPSBzdXBlcihMYXllcnNUYWJsZSwgc2VsZikuZ2V0X2NvbnRleHRfZGF0YSgqKmt3YXJncykKKworICAgICAgICBwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ3BpZCddKQorCisgICAgICAgIGNvbnRleHRbJ3Byb2plY3QnXSA9IHByb2plY3QKKyAgICAgICAgY29udGV4dFsncHJvamVjdGxheWVycyddID0gbWFwKGxhbWJkYSBwcmpsYXllcjogcHJqbGF5ZXIubGF5ZXJjb21taXQuaWQsIFByb2plY3RMYXllci5vYmplY3RzLmZpbHRlcihwcm9qZWN0PXByb2plY3QpKQorCisgICAgICAgIHJldHVybiBjb250ZXh0CisKKworICAgIGRlZiBzZXR1cF9maWx0ZXJzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPWt3YXJnc1sncGlkJ10pCisgICAgICAgIHNlbGYucHJvamVjdF9sYXllcnMgPSBQcm9qZWN0TGF5ZXIub2JqZWN0cy5maWx0ZXIocHJvamVjdD1wcm9qZWN0KQorCisKKyAgICAgICAgc2VsZi5hZGRfZmlsdGVyKHRpdGxlPSJGaWx0ZXIgYnkgcHJvamVjdCBsYXllcnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iaW5fY3VycmVudF9wcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9hY3Rpb25zPVsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1ha2VfZmlsdGVyX2FjdGlvbigiaW5fcHJvamVjdCIsICJMYXllcnMgYWRkZWQgdG8gdGhpcyBwcm9qZWN0Iiwgc2VsZi5maWx0ZXJfaW5fcHJvamVjdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWtlX2ZpbHRlcl9hY3Rpb24oIm5vdF9pbl9wcm9qZWN0IiwgIkxheWVycyBub3QgYWRkZWQgdG8gdGhpcyBwcm9qZWN0Iiwgc2VsZi5maWx0ZXJfbm90X2luX3Byb2plY3QpCisgICAgICAgICAgICAgICAgICAgICAgICBdKQorCisgICAgZGVmIGZpbHRlcl9pbl9wcm9qZWN0KHNlbGYsIGNvdW50X29ubHk9RmFsc2UpOgorICAgICAgICBxdWVyeSA9IHNlbGYucXVlcnlzZXQuZmlsdGVyKHByb2plY3RsYXllcl9faW49c2VsZi5wcm9qZWN0X2xheWVycykKKyAgICAgICAgaWYgY291bnRfb25seToKKyAgICAgICAgICAgIHJldHVybiBxdWVyeS5jb3VudCgpCisKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IHF1ZXJ5CisKKyAgICBkZWYgZmlsdGVyX25vdF9pbl9wcm9qZWN0KHNlbGYsIGNvdW50X29ubHk9RmFsc2UpOgorICAgICAgICBxdWVyeSA9IHNlbGYucXVlcnlzZXQuZXhjbHVkZShwcm9qZWN0bGF5ZXJfX2luPXNlbGYucHJvamVjdF9sYXllcnMpCisgICAgICAgIGlmIGNvdW50X29ubHk6CisgICAgICAgICAgICByZXR1cm4gcXVlcnkuY291bnQoKQorCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBxdWVyeQorCisKKyAgICBkZWYgc2V0dXBfcXVlcnlzZXQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChwayA9IGt3YXJnc1sncGlkJ10pCisgICAgICAgIGNvbXBhdGlibGVfbGF5ZXJzID0gcHJqLmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucygpCisKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IGNvbXBhdGlibGVfbGF5ZXJzLm9yZGVyX2J5KHNlbGYuZGVmYXVsdF9vcmRlcmJ5KQorCisgICAgZGVmIHNldHVwX2NvbHVtbnMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKworICAgICAgICBsYXllcl9saW5rX3RlbXBsYXRlID0gJycnCisgICAgICAgIDxhIGhyZWY9InslIHVybCAnbGF5ZXJkZXRhaWxzJyBleHRyYS5waWQgZGF0YS5pZCAlfSI+CisgICAgICAgICAge3tkYXRhLmxheWVyLm5hbWV9fQorICAgICAgICA8L2E+CisgICAgICAgICcnJworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iTGF5ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZWFibGU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImxheWVyX19uYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPWxheWVyX2xpbmtfdGVtcGxhdGUpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJTdW1tYXJ5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9ImxheWVyX19zdW1tYXJ5IikKKworICAgICAgICBnaXRfdXJsX3RlbXBsYXRlID0gJycnCisgICAgICAgIDxhIGhyZWY9InslIHVybCAnbGF5ZXJkZXRhaWxzJyBleHRyYS5waWQgZGF0YS5pZCAlfSI+CisgICAgICAgICAgPGNvZGU+e3tkYXRhLmxheWVyLnZjc191cmx9fTwvY29kZT4KKyAgICAgICAgPC9hPgorICAgICAgICB7JSBpZiBkYXRhLmdldF92Y3NfbGlua191cmwgJX0KKyAgICAgICAgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Int7IGRhdGEuZ2V0X3Zjc19saW5rX3VybCB9fSI+CisgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXNoYXJlIGdldC1pbmZvIj48L2k+CisgICAgICAgIDwvYT4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgJycnCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJHaXQgcmVwb3NpdG9yeSBVUkwiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJUaGUgR2l0IHJlcG9zaXRvcnkgZm9yIHRoZSBsYXllciBzb3VyY2UgY29kZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImxheWVyX192Y3NfdXJsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPWdpdF91cmxfdGVtcGxhdGUpCisKKyAgICAgICAgZ2l0X2Rpcl90ZW1wbGF0ZSA9ICcnJworICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEuaWQgJX0iPgorICAgICAgICAgPGNvZGU+e3tkYXRhLmRpcnBhdGh9fTwvY29kZT4KKyAgICAgICAgPC9hPgorICAgICAgICB7JSBpZiBkYXRhLmRpcnBhdGggYW5kIGRhdGEuZ2V0X3Zjc19kaXJwYXRoX2xpbmtfdXJsICV9CisgICAgICAgIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJ7eyBkYXRhLmdldF92Y3NfZGlycGF0aF9saW5rX3VybCB9fSI+CisgICAgICAgICAgPGkgY2xhc3M9Imljb24tc2hhcmUgZ2V0LWluZm8iPjwvaT4KKyAgICAgICAgPC9hPgorICAgICAgICB7JSBlbmRpZiAlfScnJworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iU3ViZGlyZWN0b3J5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iVGhlIGxheWVyIGRpcmVjdG9yeSB3aXRoaW4gdGhlIEdpdCByZXBvc2l0b3J5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0iZ2l0X3N1YmRpciIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1naXRfZGlyX3RlbXBsYXRlKQorCisgICAgICAgIHJldmlzaW9uX3RlbXBsYXRlID0gICcnJworICAgICAgICB7JSBsb2FkIHByb2plY3R0YWdzICAlfQorICAgICAgICB7JSB3aXRoIHZjc19yZWY9ZGF0YS5nZXRfdmNzX3JlZmVyZW5jZSAlfQorICAgICAgICB7JSBpZiB2Y3NfcmVmfGlzX3NoYWlkICV9CisgICAgICAgIDxhIGNsYXNzPSJidG4iIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSd1bnN0eWxlZCc+IDxsaT57e3Zjc19yZWZ9fTwvbGk+IDwvdWw+Ij4KKyAgICAgICAge3t2Y3NfcmVmfHRydW5jYXRlY2hhcnM6MTB9fQorICAgICAgICA8L2E+CisgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAge3t2Y3NfcmVmfX0KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICAnJycKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlJldmlzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iVGhlIEdpdCBicmFuY2gsIHRhZyBvciBjb21taXQuIEZvciB0aGUgbGF5ZXJzIGZyb20gdGhlIE9wZW5FbWJlZGRlZCBsYXllciBzb3VyY2UsIHRoZSByZXZpc2lvbiBpcyBhbHdheXMgdGhlIGJyYW5jaCBjb21wYXRpYmxlIHdpdGggdGhlIFlvY3RvIFByb2plY3QgdmVyc2lvbiB5b3Ugc2VsZWN0ZWQgZm9yIHRoaXMgcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJyZXZpc2lvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1yZXZpc2lvbl90ZW1wbGF0ZSkKKworICAgICAgICBkZXBzX3RlbXBsYXRlID0gJycnCisgICAgICAgIHslIHdpdGggb2RzPWRhdGEuZGVwZW5kZW5jaWVzLmFsbCV9CisgICAgICAgIHslIGlmIG9kcy5jb3VudCAlfQorICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biIgdGl0bGU9IjxhIGhyZWY9J3slIHVybCAibGF5ZXJkZXRhaWxzIiBleHRyYS5waWQgZGF0YS5pZCAlfSc+e3tkYXRhLmxheWVyLm5hbWV9fTwvYT4gZGVwZW5kZW5jaWVzIgorICAgICAgICBkYXRhLWNvbnRlbnQ9Ijx1bCBjbGFzcz0ndW5zdHlsZWQnPgorICAgICAgICB7JSBmb3IgaSBpbiBvZHMlfQorICAgICAgICA8bGk+PGEgaHJlZj0neyUgdXJsICJsYXllcmRldGFpbHMiIGV4dHJhLnBpZCBpLmRlcGVuZHNfb24ucGsgJX0nPnt7aS5kZXBlbmRzX29uLmxheWVyLm5hbWV9fTwvYT48L2xpPgorICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgPC91bD4iPgorICAgICAgICB7e29kcy5jb3VudH19CisgICAgICAgIDwvYT4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICAnJycKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkRlcGVuZGVuY2llcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9Ik90aGVyIGxheWVycyBhIGxheWVyIGRlcGVuZHMgdXBvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJkZXBlbmRlbmNpZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9ZGVwc190ZW1wbGF0ZSkKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkFkZCB8IERlbGV0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IkFkZCBvciBkZWxldGUgbGF5ZXJzIHRvIC8gZnJvbSB5b3VyIHByb2plY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZWFibGU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfbmFtZT0iaW5fY3VycmVudF9wcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImFkZC1kZWwtbGF5ZXJzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPSd7JSBpbmNsdWRlICJsYXllcl9idG4uaHRtbCIgJX0nKQorCisgICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPWt3YXJnc1sncGlkJ10pCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iTGF5ZXJEZXRhaWxzVXJsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlhYmxlID0gRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJsYXllcmRldGFpbHVybCIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRhdGlvbiA9IGxhbWJkYSB4OiByZXZlcnNlKCdsYXllcmRldGFpbHMnLCBhcmdzPShwcm9qZWN0LmlkLCB4LmlkKSkpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlhYmxlID0gRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGF0aW9uID0gbGFtYmRhIHg6IHgubGF5ZXIubmFtZSkKKworCitjbGFzcyBNYWNoaW5lc1RhYmxlKFRvYXN0ZXJUYWJsZSwgUHJvamVjdEZpbHRlcnNNaXhpbik6CisgICAgIiIiVGFibGUgb2YgTWFjaGluZXMgaW4gVG9hc3RlciIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKE1hY2hpbmVzVGFibGUsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5lbXB0eV9zdGF0ZSA9ICJObyBtYWNoaW5lcyBtYXliZSB5b3UgbmVlZCB0byBkbyBhIGJ1aWxkPyIKKyAgICAgICAgc2VsZi5kZWZhdWx0X29yZGVyYnkgPSAibmFtZSIKKworICAgIGRlZiBnZXRfY29udGV4dF9kYXRhKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgY29udGV4dCA9IHN1cGVyKE1hY2hpbmVzVGFibGUsIHNlbGYpLmdldF9jb250ZXh0X2RhdGEoKiprd2FyZ3MpCisgICAgICAgIGNvbnRleHRbJ3Byb2plY3QnXSA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9a3dhcmdzWydwaWQnXSkKKyAgICAgICAgY29udGV4dFsncHJvamVjdGxheWVycyddID0gbWFwKGxhbWJkYSBwcmpsYXllcjogcHJqbGF5ZXIubGF5ZXJjb21taXQuaWQsIFByb2plY3RMYXllci5vYmplY3RzLmZpbHRlcihwcm9qZWN0PWNvbnRleHRbJ3Byb2plY3QnXSkpCisgICAgICAgIHJldHVybiBjb250ZXh0CisKKyAgICBkZWYgc2V0dXBfZmlsdGVycyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ3BpZCddKQorICAgICAgICBzZWxmLnByb2plY3RfbGF5ZXJzID0gcHJvamVjdC5wcm9qZWN0bGF5ZXJfZXF1aXZhbGVudF9zZXQoKQorCisgICAgICAgIHNlbGYuYWRkX2ZpbHRlcih0aXRsZT0iRmlsdGVyIGJ5IHByb2plY3QgbWFjaGluZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iaW5fY3VycmVudF9wcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9hY3Rpb25zPVsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1ha2VfZmlsdGVyX2FjdGlvbigiaW5fcHJvamVjdCIsICJNYWNoaW5lcyBwcm92aWRlZCBieSBsYXllcnMgYWRkZWQgdG8gdGhpcyBwcm9qZWN0Iiwgc2VsZi5maWx0ZXJfaW5fcHJvamVjdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWtlX2ZpbHRlcl9hY3Rpb24oIm5vdF9pbl9wcm9qZWN0IiwgIk1hY2hpbmVzIHByb3ZpZGVkIGJ5IGxheWVycyBub3QgYWRkZWQgdG8gdGhpcyBwcm9qZWN0Iiwgc2VsZi5maWx0ZXJfbm90X2luX3Byb2plY3QpCisgICAgICAgICAgICAgICAgICAgICAgICBdKQorCisgICAgZGVmIHNldHVwX3F1ZXJ5c2V0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHByaiA9IFByb2plY3Qub2JqZWN0cy5nZXQocGsgPSBrd2FyZ3NbJ3BpZCddKQorICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gcHJqLmdldF9hbGxfY29tcGF0aWJsZV9tYWNoaW5lcygpCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBzZWxmLnF1ZXJ5c2V0Lm9yZGVyX2J5KHNlbGYuZGVmYXVsdF9vcmRlcmJ5KQorCisgICAgZGVmIHNldHVwX2NvbHVtbnMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9Ik1hY2hpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZWFibGU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9Im5hbWUiKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iRGVzY3JpcHRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0iZGVzY3JpcHRpb24iKQorCisgICAgICAgIGxheWVyX2xpbmtfdGVtcGxhdGUgPSAnJycKKyAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdsYXllcmRldGFpbHMnIGV4dHJhLnBpZCBkYXRhLmxheWVyX3ZlcnNpb24uaWQgJX0iPgorICAgICAgICB7e2RhdGEubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX08L2E+CisgICAgICAgICcnJworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iTGF5ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0ibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9bGF5ZXJfbGlua190ZW1wbGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iUmV2aXNpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJUaGUgR2l0IGJyYW5jaCwgdGFnIG9yIGNvbW1pdC4gRm9yIHRoZSBsYXllcnMgZnJvbSB0aGUgT3BlbkVtYmVkZGVkIGxheWVyIHNvdXJjZSwgdGhlIHJldmlzaW9uIGlzIGFsd2F5cyB0aGUgYnJhbmNoIGNvbXBhdGlibGUgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCB2ZXJzaW9uIHlvdSBzZWxlY3RlZCBmb3IgdGhpcyBwcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ibGF5ZXJfdmVyc2lvbl9fZ2V0X3Zjc19yZWZlcmVuY2UiKQorCisgICAgICAgIG1hY2hpbmVfZmlsZV90ZW1wbGF0ZSA9ICcnJzxjb2RlPmNvbmYvbWFjaGluZS97e2RhdGEubmFtZX19LmNvbmY8L2NvZGU+CisgICAgICAgIDxhIGhyZWY9Int7ZGF0YS5nZXRfdmNzX21hY2hpbmVfZmlsZV9saW5rX3VybH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9Imljb24tc2hhcmUgZ2V0LWluZm8iPjwvaT48L2E+JycnCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJNYWNoaW5lIGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJtYWNoaW5lZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1tYWNoaW5lX2ZpbGVfdGVtcGxhdGUpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJTZWxlY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJTZXRzIHRoZSBzZWxlY3RlZCBtYWNoaW5lIGFzIHRoZSBwcm9qZWN0IG1hY2hpbmUuIFlvdSBjYW4gb25seSBoYXZlIG9uZSBtYWNoaW5lIHBlciBwcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVhYmxlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX25hbWU9ImluX2N1cnJlbnRfcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJhZGQtZGVsLWxheWVycyIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT0neyUgaW5jbHVkZSAibWFjaGluZV9idG4uaHRtbCIgJX0nKQorCisKK2NsYXNzIExheWVyTWFjaGluZXNUYWJsZShNYWNoaW5lc1RhYmxlKToKKyAgICAiIiIgU21hbGxlciB2ZXJzaW9uIG9mIHRoZSBNYWNoaW5lcyB0YWJsZSBmb3IgdXNlIGluIGxheWVyIGRldGFpbHMgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoTGF5ZXJNYWNoaW5lc1RhYmxlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgZ2V0X2NvbnRleHRfZGF0YShzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIGNvbnRleHQgPSBzdXBlcihMYXllck1hY2hpbmVzVGFibGUsIHNlbGYpLmdldF9jb250ZXh0X2RhdGEoKiprd2FyZ3MpCisgICAgICAgIGNvbnRleHRbJ2xheWVydmVyc2lvbiddID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ2xheWVyaWQnXSkKKyAgICAgICAgcmV0dXJuIGNvbnRleHQKKworCisgICAgZGVmIHNldHVwX3F1ZXJ5c2V0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIE1hY2hpbmVzVGFibGUuc2V0dXBfcXVlcnlzZXQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBzZWxmLnF1ZXJ5c2V0LmZpbHRlcihsYXllcl92ZXJzaW9uX19waz1pbnQoa3dhcmdzWydsYXllcmlkJ10pKQorICAgICAgICBzZWxmLnN0YXRpY19jb250ZXh0X2V4dHJhWydpbl9wcmonXSA9IFByb2plY3RMYXllci5vYmplY3RzLmZpbHRlcihRKHByb2plY3Q9a3dhcmdzWydwaWQnXSkgJiBRKGxheWVyY29tbWl0PWt3YXJnc1snbGF5ZXJpZCddKSkuY291bnQoKQorCisgICAgZGVmIHNldHVwX2NvbHVtbnMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJNYWNoaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVhYmxlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJuYW1lIikKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkRlc2NyaXB0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9ImRlc2NyaXB0aW9uIikKKworICAgICAgICBzZWxlY3RfYnRuX3RlbXBsYXRlID0gJzxhIGhyZWY9InslIHVybCAicHJvamVjdCIgZXh0cmEucGlkICV9P3NldE1hY2hpbmU9e3tkYXRhLm5hbWV9fSIgY2xhc3M9ImJ0biBidG4tYmxvY2sgc2VsZWN0LW1hY2hpbmUtYnRuIiB7JSBpZiBleHRyYS5pbl9wcmogPT0gMCV9ZGlzYWJsZWQ9ImRpc2FibGVkInslZW5kaWYlfT5TZWxlY3QgbWFjaGluZTwvYT4nCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJTZWxlY3QgbWFjaGluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJhZGQtZGVsLWxheWVycyIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1zZWxlY3RfYnRuX3RlbXBsYXRlKQorCisKK2NsYXNzIFJlY2lwZXNUYWJsZShUb2FzdGVyVGFibGUsIFByb2plY3RGaWx0ZXJzTWl4aW4pOgorICAgICIiIlRhYmxlIG9mIFJlY2lwZXMgaW4gVG9hc3RlciIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKFJlY2lwZXNUYWJsZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmVtcHR5X3N0YXRlID0gIlRvYXN0ZXIgaGFzIG5vIHJlY2lwZSBpbmZvcm1hdGlvbi4gVG8gZ2VuZXJhdGUgcmVjaXBlIGluZm9ybWF0aW9uIHlvdSBjYW4gY29uZmlndXJlIGEgbGF5ZXIgc291cmNlIHRoZW4gcnVuIGEgYnVpbGQuIgorICAgICAgICBzZWxmLmRlZmF1bHRfb3JkZXJieSA9ICJuYW1lIgorCisgICAgZGVmIGdldF9jb250ZXh0X2RhdGEoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ3BpZCddKQorICAgICAgICBjb250ZXh0ID0gc3VwZXIoUmVjaXBlc1RhYmxlLCBzZWxmKS5nZXRfY29udGV4dF9kYXRhKCoqa3dhcmdzKQorCisgICAgICAgIGNvbnRleHRbJ3Byb2plY3QnXSA9IHByb2plY3QKKworICAgICAgICBjb250ZXh0Wydwcm9qZWN0bGF5ZXJzJ10gPSBtYXAobGFtYmRhIHByamxheWVyOiBwcmpsYXllci5sYXllcmNvbW1pdC5pZCwgUHJvamVjdExheWVyLm9iamVjdHMuZmlsdGVyKHByb2plY3Q9Y29udGV4dFsncHJvamVjdCddKSkKKworICAgICAgICByZXR1cm4gY29udGV4dAorCisgICAgZGVmIHNldHVwX2ZpbHRlcnMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9a3dhcmdzWydwaWQnXSkKKyAgICAgICAgc2VsZi5wcm9qZWN0X2xheWVycyA9IHByb2plY3QucHJvamVjdGxheWVyX2VxdWl2YWxlbnRfc2V0KCkKKworICAgICAgICBzZWxmLmFkZF9maWx0ZXIodGl0bGU9IkZpbHRlciBieSBwcm9qZWN0IHJlY2lwZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iaW5fY3VycmVudF9wcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9hY3Rpb25zPVsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1ha2VfZmlsdGVyX2FjdGlvbigiaW5fcHJvamVjdCIsICJSZWNpcGVzIHByb3ZpZGVkIGJ5IGxheWVycyBhZGRlZCB0byB0aGlzIHByb2plY3QiLCBzZWxmLmZpbHRlcl9pbl9wcm9qZWN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1ha2VfZmlsdGVyX2FjdGlvbigibm90X2luX3Byb2plY3QiLCAiUmVjaXBlcyBwcm92aWRlZCBieSBsYXllcnMgbm90IGFkZGVkIHRvIHRoaXMgcHJvamVjdCIsIHNlbGYuZmlsdGVyX25vdF9pbl9wcm9qZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgXSkKKworCisgICAgZGVmIHNldHVwX3F1ZXJ5c2V0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHByaiA9IFByb2plY3Qub2JqZWN0cy5nZXQocGsgPSBrd2FyZ3NbJ3BpZCddKQorCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBwcmouZ2V0X2FsbF9jb21wYXRpYmxlX3JlY2lwZXMoKQorICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gc2VsZi5xdWVyeXNldC5vcmRlcl9ieShzZWxmLmRlZmF1bHRfb3JkZXJieSkKKworCisgICAgZGVmIHNldHVwX2NvbHVtbnMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlJlY2lwZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IkluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIHBpZWNlIG9mIHNvZnR3YXJlLCBpbmNsdWRpbmcgd2hlcmUgdG8gZG93bmxvYWQgdGhlIHNvdXJjZSwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBob3cgdG8gY29tcGlsZSB0aGUgc291cmNlIGZpbGVzIGFuZCBob3cgdG8gcGFja2FnZSB0aGUgY29tcGlsZWQgb3V0cHV0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVhYmxlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJuYW1lIikKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlJlY2lwZSBWZXJzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0idmVyc2lvbiIpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJEZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJnZXRfZGVzY3JpcHRpb25fb3Jfc3VtbWFyeSIpCisKKyAgICAgICAgcmVjaXBlX2ZpbGVfdGVtcGxhdGUgPSAnJycKKyAgICAgICAgPGNvZGU+e3tkYXRhLmZpbGVfcGF0aH19PC9jb2RlPgorICAgICAgICA8YSBocmVmPSJ7e2RhdGEuZ2V0X3Zjc19yZWNpcGVfZmlsZV9saW5rX3VybH19IiB0YXJnZXQ9Il9ibGFuayI+CisgICAgICAgICAgPGkgY2xhc3M9Imljb24tc2hhcmUgZ2V0LWluZm8iPjwvaT4KKyAgICAgICAgPC9hPgorICAgICAgICAgJycnCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJSZWNpcGUgZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IlBhdGggdG8gdGhlIHJlY2lwZSAuYmIgZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9InJlY2lwZS1maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPXJlY2lwZV9maWxlX3RlbXBsYXRlKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iU2VjdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IlRoZSBzZWN0aW9uIGluIHdoaWNoIHJlY2lwZXMgc2hvdWxkIGJlIGNhdGVnb3JpemVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ic2VjdGlvbiIpCisKKyAgICAgICAgbGF5ZXJfbGlua190ZW1wbGF0ZSA9ICcnJworICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEubGF5ZXJfdmVyc2lvbi5pZCAlfSI+CisgICAgICAgIHt7ZGF0YS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fTwvYT4KKyAgICAgICAgJycnCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJMYXllciIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IlRoZSBuYW1lIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImxheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPWxheWVyX2xpbmtfdGVtcGxhdGUpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJMaWNlbnNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iVGhlIGxpc3Qgb2Ygc291cmNlIGxpY2Vuc2VzIGZvciB0aGUgcmVjaXBlLiBNdWx0aXBsZSBsaWNlbnNlIG5hbWVzIHNlcGFyYXRlZCBieSB0aGUgcGlwZSBjaGFyYWN0ZXIgaW5kaWNhdGVzIGEgY2hvaWNlIGJldHdlZW4gbGljZW5zZXMuIE11bHRpcGxlIGxpY2Vuc2UgbmFtZXMgc2VwYXJhdGVkIGJ5IHRoZSBhbXBlcnNhbmQgY2hhcmFjdGVyIGluZGljYXRlcyBtdWx0aXBsZSBsaWNlbnNlcyBleGlzdCB0aGF0IGNvdmVyIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc291cmNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ibGljZW5zZSIpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJSZXZpc2lvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJsYXllcl92ZXJzaW9uX19nZXRfdmNzX3JlZmVyZW5jZSIpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJCdWlsZCIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IkFkZCBvciBkZWxldGUgcmVjaXBlcyB0byBhbmQgZnJvbSB5b3VyIHByb2plY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZWFibGU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfbmFtZT0iaW5fY3VycmVudF9wcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImFkZC1kZWwtbGF5ZXJzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPSd7JSBpbmNsdWRlICJyZWNpcGVfYnRuLmh0bWwiICV9JykKKworICAgICAgICBwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ3BpZCddKQorICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlByb2plY3QgY29tcGF0aWJsZSBMYXllciBJRCIsCisgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5YWJsZSA9IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9ICJwcm9qZWN0Y29tcGF0aWJsZV9sYXllciIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRhdGlvbiA9IGxhbWJkYSB4OiAoeC5sYXllcl92ZXJzaW9uLmdldF9lcXVpdmFsZW50c193cHJpb3JpdHkocHJvamVjdClbMF0pKQorCitjbGFzcyBMYXllclJlY2lwZXNUYWJsZShSZWNpcGVzVGFibGUpOgorICAgICIiIiBTbWFsbGVyIHZlcnNpb24gb2YgdGhlIFJlY2lwZXMgdGFibGUgZm9yIHVzZSBpbiBsYXllciBkZXRhaWxzICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKExheWVyUmVjaXBlc1RhYmxlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgZ2V0X2NvbnRleHRfZGF0YShzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIGNvbnRleHQgPSBzdXBlcihMYXllclJlY2lwZXNUYWJsZSwgc2VsZikuZ2V0X2NvbnRleHRfZGF0YSgqKmt3YXJncykKKyAgICAgICAgY29udGV4dFsnbGF5ZXJ2ZXJzaW9uJ10gPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0KHBrPWt3YXJnc1snbGF5ZXJpZCddKQorICAgICAgICByZXR1cm4gY29udGV4dAorCisKKyAgICBkZWYgc2V0dXBfcXVlcnlzZXQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgUmVjaXBlc1RhYmxlLnNldHVwX3F1ZXJ5c2V0KHNlbGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IHNlbGYucXVlcnlzZXQuZmlsdGVyKGxheWVyX3ZlcnNpb25fX3BrPWludChrd2FyZ3NbJ2xheWVyaWQnXSkpCisKKyAgICAgICAgc2VsZi5zdGF0aWNfY29udGV4dF9leHRyYVsnaW5fcHJqJ10gPSBQcm9qZWN0TGF5ZXIub2JqZWN0cy5maWx0ZXIoUShwcm9qZWN0PWt3YXJnc1sncGlkJ10pICYgUShsYXllcmNvbW1pdD1rd2FyZ3NbJ2xheWVyaWQnXSkpLmNvdW50KCkKKworICAgIGRlZiBzZXR1cF9jb2x1bW5zKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iUmVjaXBlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iSW5mb3JtYXRpb24gYWJvdXQgYSBzaW5nbGUgcGllY2Ugb2Ygc29mdHdhcmUsIGluY2x1ZGluZyB3aGVyZSB0byBkb3dubG9hZCB0aGUgc291cmNlLCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGhvdyB0byBjb21waWxlIHRoZSBzb3VyY2UgZmlsZXMgYW5kIGhvdyB0byBwYWNrYWdlIHRoZSBjb21waWxlZCBvdXRwdXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZWFibGU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9Im5hbWUiKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iRGVzY3JpcHRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0iZ2V0X2Rlc2NyaXB0aW9uX29yX3N1bW1hcnkiKQorCisKKyAgICAgICAgYnVpbGRfcmVjaXBlX3RlbXBsYXRlID0nPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibG9jayBidWlsZC1yZWNpcGUtYnRuIiBkYXRhLXJlY2lwZS1uYW1lPSJ7e2RhdGEubmFtZX19IiB7JWlmIGV4dHJhLmluX3ByaiA9PSAwICV9ZGlzYWJsZWQ9ImRpc2FibGVkInslZW5kaWYlfT5CdWlsZCByZWNpcGU8L2J1dHRvbj4nCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJCdWlsZCByZWNpcGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0iYWRkLWRlbC1sYXllcnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9YnVpbGRfcmVjaXBlX3RlbXBsYXRlKQorCitjbGFzcyBQcm9qZWN0TGF5ZXJzUmVjaXBlc1RhYmxlKFJlY2lwZXNUYWJsZSk6CisgICAgIiIiIFRhYmxlIHRoYXQgbGlzdHMgb25seSByZWNpcGVzIGF2YWlsYWJsZSBmb3IgbGF5ZXJzIGFkZGVkIHRvIHRoZSBwcm9qZWN0ICIiIgorCisgICAgZGVmIHNldHVwX3F1ZXJ5c2V0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKFByb2plY3RMYXllcnNSZWNpcGVzVGFibGUsIHNlbGYpLnNldHVwX3F1ZXJ5c2V0KCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChwayA9IGt3YXJnc1sncGlkJ10pCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBzZWxmLnF1ZXJ5c2V0LmZpbHRlcihsYXllcl92ZXJzaW9uX19pbiA9IHByai5wcm9qZWN0bGF5ZXJfZXF1aXZhbGVudF9zZXQoKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MGJjNDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZS5odG1sCkBAIC0wLDAgKzEsMTgyIEBACis8IURPQ1RZUEUgaHRtbD4KK3slIGxvYWQgc3RhdGljICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cis8aHRtbCBsYW5nPSJlbiI+CisgICAgPGhlYWQ+CisgICAgICAgIDx0aXRsZT57JSBpZiBvYmplY3RuYW1lICV9IHt7b2JqZWN0bmFtZXx0aXRsZX19IC0geyUgZW5kaWYgJX1Ub2FzdGVyPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ieyUgc3RhdGljICdjc3MvYm9vdHN0cmFwLm1pbi5jc3MnICV9IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7JSBzdGF0aWMgJ2Nzcy9ib290c3RyYXAtcmVzcG9uc2l2ZS5taW4uY3NzJyAlfSIgdHlwZT0ndGV4dC9jc3MnLz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ieyUgc3RhdGljICdjc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MnICV9IiB0eXBlPSd0ZXh0L2NzcycvPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7JSBzdGF0aWMgJ2Nzcy9wcmV0dGlmeS5jc3MnICV9IiB0eXBlPSd0ZXh0L2NzcycvPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7JSBzdGF0aWMgJ2Nzcy9kZWZhdWx0LmNzcycgJX0iIHR5cGU9J3RleHQvY3NzJy8+CisKKyAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCIgLz4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDtjaGFyc2V0PVVURi04IiAvPgorICAgIDxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2pxdWVyeS0yLjAuMy5taW4uanMnICV9Ij4KKyAgICA8L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9qcXVlcnkuY29va2llLmpzJyAlfSI+CisgICAgPC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvYm9vdHN0cmFwLm1pbi5qcycgJX0iPgorICAgIDwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL3ByZXR0aWZ5LmpzJyAlfSI+CisgICAgPC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvbGlidG9hc3Rlci5qcycgJX0iPgorICAgIDwvc2NyaXB0PgorICAgIHslIGlmIERFQlVHICV9CisgICAgPHNjcmlwdD4KKyAgICAgIGxpYnRvYXN0ZXIuZGVidWcgPSB0cnVlOworICAgIDwvc2NyaXB0PgorICAgIHslIGVuZGlmICV9CisgICAgPHNjcmlwdD4KKyAgICAgIGxpYnRvYXN0ZXIuY3R4ID0geworICAgICAgICBqc1VybCA6ICJ7JSBzdGF0aWMgJ2pzLycgJX0iLAorICAgICAgICBodG1sVXJsIDogInslIHN0YXRpYyAnaHRtbC8nICV9IiwKKyAgICAgICAgcHJvamVjdHNVcmwgOiAieyUgdXJsICdhbGwtcHJvamVjdHMnICV9IiwKKyAgICAgICAgcHJvamVjdHNUeXBlQWhlYWRVcmw6IHslIHVybCAneGhyX3Byb2plY3RzdHlwZWFoZWFkJyBhcyBwcmp1cmwlfXt7cHJqdXJsfGpzb259fSwKKyAgICAgICAgeyUgaWYgcHJvamVjdC5pZCAlfQorICAgICAgICBwcm9qZWN0SWQgOiB7e3Byb2plY3QuaWR9fSwKKyAgICAgICAgcHJvamVjdFBhZ2VVcmwgOiB7JSB1cmwgJ3Byb2plY3QnIHByb2plY3QuaWQgYXMgcHVybCV9e3twdXJsfGpzb259fSwKKyAgICAgICAgcHJvamVjdE5hbWUgOiB7e3Byb2plY3QubmFtZXxqc29ufX0sCisgICAgICAgIHJlY2lwZXNUeXBlQWhlYWRVcmw6IHslIHVybCAneGhyX3JlY2lwZXN0eXBlYWhlYWQnIHByb2plY3QuaWQgYXMgcGF0dXJsJX17e3BhdHVybHxqc29ufX0sCisgICAgICAgIGxheWVyc1R5cGVBaGVhZFVybDogeyUgdXJsICd4aHJfbGF5ZXJzdHlwZWFoZWFkJyBwcm9qZWN0LmlkIGFzIHBhdHVybCV9e3twYXR1cmx8anNvbn19LAorICAgICAgICBtYWNoaW5lc1R5cGVBaGVhZFVybDogeyUgdXJsICd4aHJfbWFjaGluZXN0eXBlYWhlYWQnIHByb2plY3QuaWQgYXMgcGF0dXJsJX17e3BhdHVybHxqc29ufX0sCisKKyAgICAgICAgcHJvamVjdEJ1aWxkc1VybDogeyUgdXJsICdwcm9qZWN0YnVpbGRzJyBwcm9qZWN0LmlkIGFzIHBidXJsICV9e3twYnVybHxqc29ufX0sCisgICAgICAgIHByb2plY3RJZCA6IHt7cHJvamVjdC5pZH19LAorICAgICAgICB7JSBlbHNlICV9CisgICAgICAgIHByb2plY3RJZCA6IHVuZGVmaW5lZCwKKyAgICAgICAgcHJvamVjdFBhZ2VVcmwgOiB1bmRlZmluZWQsCisgICAgICAgIHByb2plY3ROYW1lIDogdW5kZWZpbmVkLAorICAgICAgICBwcm9qZWN0SWQgOiB1bmRlZmluZWQsCisgICAgICAgIHslIGVuZGlmICV9CisgICAgICB9OworICAgIDwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2Jhc2UuanMnICV9Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgeworICAgICAgICAvKiBWYXJzIG5lZWRlZCBmb3IgYmFzZS5qcyAqLworICAgICAgICB2YXIgY3R4ID0ge307CisgICAgICAgIGN0eC5udW1Qcm9qZWN0cyA9IHt7cHJvamVjdHN8bGVuZ3RofX07CisgICAgICAgIGN0eC5jdXJyZW50VXJsID0gInt7cmVxdWVzdC5wYXRofGVzY2FwZWpzfX0iOworCisgICAgICAgIGJhc2VQYWdlSW5pdChjdHgpOworICAgICAgfSk7CisgICAgPC9zY3JpcHQ+CisKK3slIGJsb2NrIGV4dHJhaGVhZGNvbnRlbnQgJX0KK3slIGVuZGJsb2NrICV9CisgICAgPC9oZWFkPgorCis8Ym9keSBzdHlsZT0iaGVpZ2h0OiAxMDAlIj4KKworICB7JSBjc3JmX3Rva2VuICV9CisgIDxkaXYgaWQ9ImxvYWRpbmctbm90aWZpY2F0aW9uIiBjbGFzcz0iYWxlcnQgbGVhZCB0ZXh0LWNlbnRlciIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgTG9hZGluZyA8aSBjbGFzcz0iZmEtcHVsc2UgaWNvbi1zcGlubmVyIj48L2k+CisgIDwvZGl2PgorCisgIDxkaXYgaWQ9ImNoYW5nZS1ub3RpZmljYXRpb24iIGNsYXNzPSJhbGVydCBsZWFkIGFsZXJ0LWluZm8iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGlkPSJoaWRlLWFsZXJ0Ij4mdGltZXM7PC9idXR0b24+CisgICAgPHNwYW4gaWQ9ImNoYW5nZS1ub3RpZmljYXRpb24tbXNnIj48L3NwYW4+CisgIDwvZGl2PgorCisgICAgPGRpdiBjbGFzcz0ibmF2YmFyIG5hdmJhci1maXhlZC10b3AiPgorICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWlubmVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KKyAgICAgICAgICA8YSBjbGFzcz0iYnJhbmQgbG9nbyIgaHJlZj0iIyI+PGltZyBzcmM9InslIHN0YXRpYyAnaW1nL2xvZ28ucG5nJyAlfSIgY2xhc3M9IiIgYWx0PSJZb2N0byBsb2dvIHByb2plY3QiLz48L2E+CisgICAgICAgICAgPHNwYW4gY2xhc3M9ImJyYW5kIj4KKyAgICAgICAgICAgIDxhIGhyZWY9Ii8iPlRvYXN0ZXI8L2E+CisgICAgICAgICAgICB7JSBpZiBERUJVRyAlfQorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24taW5mby1zaWduIiB0aXRsZT0iPHN0cm9uZz5Ub2FzdGVyIHZlcnNpb24gaW5mb3JtYXRpb248L3N0cm9uZz4iIGRhdGEtY29udGVudD0iPGRsPjxkdD5CcmFuY2g8L2R0PjxkZD57e1RPQVNURVJfQlJBTkNIfX08L2RkPjxkdD5SZXZpc2lvbjwvZHQ+PGRkPnt7VE9BU1RFUl9SRVZJU0lPTn19PC9kZD48L2RsPiI+PC9pPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgeyUgaWYgcmVxdWVzdC5yZXNvbHZlcl9tYXRjaC51cmxfbmFtZSAhPSAnbGFuZGluZycgYW5kIHJlcXVlc3QucmVzb2x2ZXJfbWF0Y2gudXJsX25hbWUgIT0gJ25ld3Byb2plY3QnICV9CisgICAgICAgICAgPHVsIGNsYXNzPSJuYXYiPgorICAgICAgICAgICAgPGxpICB7JSBpZiByZXF1ZXN0LnJlc29sdmVyX21hdGNoLnVybF9uYW1lID09ICdhbGwtYnVpbGRzJyAlfQorICAgICAgICAgICAgICAgIGNsYXNzPSJhY3RpdmUiCisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0+CisgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYWxsLWJ1aWxkcycgJX0iPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXRhc2tzIj48L2k+CisgICAgICAgICAgICAgICAgQWxsIGJ1aWxkcworICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPGxpIHslIGlmIHJlcXVlc3QucmVzb2x2ZXJfbWF0Y2gudXJsX25hbWUgPT0gJ2FsbC1wcm9qZWN0cycgICV9CisgICAgICAgICAgICAgICAgY2xhc3M9ImFjdGl2ZSIKKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfT4KKyAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdhbGwtcHJvamVjdHMnICV9Ij4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1mb2xkZXItb3BlbiI+PC9pPgorICAgICAgICAgICAgICAgIEFsbCBwcm9qZWN0cworICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgIDwvdWw+CisgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICA8dWwgY2xhc3M9Im5hdiBwdWxsLXJpZ2h0Ij4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2xhdGVzdC90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC5odG1sIj4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1ib29rIj48L2k+CisgICAgICAgICAgICAgICAgTWFudWFsCisgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0icHVsbC1yaWdodCBkaXZpZGVyLXZlcnRpY2FsIj48L3NwYW4+CisgICAgICAgICAgPGRpdiBjbGFzcz0iYnRuLWdyb3VwIHB1bGwtcmlnaHQiPgorICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biIgaWQ9Im5ldy1wcm9qZWN0LWJ1dHRvbiIgaHJlZj0ieyUgdXJsICduZXdwcm9qZWN0JyAlfSI+TmV3IHByb2plY3Q8L2E+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPCEtLSBOZXcgYnVpbGQgcG9wb3ZlciAtLT4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAgcHVsbC1yaWdodCIgaWQ9Im5ldy1idWlsZC1idXR0b24iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj4KKyAgICAgICAgICAgICAgTmV3IGJ1aWxkCisgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLWNhcmV0LWRvd24iPjwvaT4KKyAgICAgICAgICAgIDwvYnV0dG9uPgorICAgICAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51IG5ldy1idWlsZCBtdWx0aS1zZWxlY3QiPgorICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgPGgzPk5ldyBidWlsZDwvaDM+CisgICAgICAgICAgICAgICAgPGg2PlByb2plY3Q6PC9oNj4KKyAgICAgICAgICAgICAgICA8c3BhbiBpZD0icHJvamVjdCI+CisgICAgICAgICAgICAgICAgICB7JSBpZiBwcm9qZWN0LmlkICV9CisgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGVhZCIgaHJlZj0ieyUgdXJsICdwcm9qZWN0JyBwcm9qZWN0LmlkICV9Ij57e3Byb2plY3QubmFtZX19PC9hPgorICAgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxlYWQiIGhyZWY9IiMiPjwvYT4KKyAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwiPjwvaT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPGZvcm0gaWQ9ImNoYW5nZS1wcm9qZWN0LWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXQtbWVkaXVtIiBpZD0icHJvamVjdC1uYW1lLWlucHV0IiBwbGFjZWhvbGRlcj0iVHlwZSBhIHByb2plY3QgbmFtZSIgYXV0b2NvbXBsZXRlPSJvZmYiIGRhdGEtbWluTGVuZ3RoPSIxIiBkYXRhLWF1dG9jb21wbGV0ZT0ib2ZmIiBkYXRhLXByb3ZpZGU9InR5cGVhaGVhZCIvPgorICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJzYXZlLXByb2plY3QtYnV0dG9uIiBjbGFzcz0iYnRuIiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgaWQ9ImNhbmNlbC1jaGFuZ2UtcHJvamVjdCIgY2xhc3M9ImJ0biBidG4tbGluayIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPkNhbmNlbDwvYT4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgPHA+PGEgaWQ9InZpZXctYWxsLXByb2plY3RzIiBocmVmPSJ7JSB1cmwgJ2FsbC1wcm9qZWN0cycgJX0iPlZpZXcgYWxsIHByb2plY3RzPC9hPjwvcD4KKyAgICAgICAgICAgICAgICA8L2Zvcm0+CisgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgICAgICAgICAgICAgPHA+VGhpcyBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gaXMgaW5jb21wbGV0ZSwgc28geW91IGNhbm5vdCBydW4gYnVpbGRzLjwvcD4KKyAgICAgICAgICAgICAgICAgIDxwPjxhIGhyZWY9InslIGlmIHByb2plY3QuaWQgJX17JSB1cmwgJ3Byb2plY3QnIHByb2plY3QuaWQgJX17JSBlbmRpZiAlfSI+VmlldyBwcm9qZWN0IGNvbmZpZ3VyYXRpb248L2E+PC9wPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICA8bGkgaWQ9InRhcmdldHMtZm9ybSI+CisgICAgICAgICAgICAgICAgPGg2PlJlY2lwZShzKTo8L2g2PgorICAgICAgICAgICAgICAgIDxmb3JtPgorICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJpbnB1dC14bGFyZ2UgYnVpbGQtdGFyZ2V0LWlucHV0IiBwbGFjZWhvbGRlcj0iVHlwZSBhIHJlY2lwZSBuYW1lIiBhdXRvY29tcGxldGU9Im9mZiIgZGF0YS1taW5MZW5ndGg9IjEiIGRhdGEtYXV0b2NvbXBsZXRlPSJvZmYiIGRhdGEtcHJvdmlkZT0idHlwZWFoZWFkIiBkaXNhYmxlZC8+CisgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnVpbGQtYnV0dG9uIiBkaXNhYmxlZD5CdWlsZDwvYnV0dG9uPgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICA8L2Rpdj4KKworCisgICAgPC9kaXY+CisgPC9kaXY+Cis8L2Rpdj4KKworPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIHRvcC1wYWRkZWQiPgorPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9Cit7JSBlbmRibG9jayAlfQorPC9kaXY+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2VidWlsZGRldGFpbHBhZ2UuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlYnVpbGRkZXRhaWxwYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJjYTUwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlYnVpbGRkZXRhaWxwYWdlLmh0bWwKQEAgLTAsMCArMSwyOSBAQAoreyUgZXh0ZW5kcyAiYmFzZS5odG1sIiAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQoreyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KKworPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKzwhLS0gQnJlYWRjcnVtYnMgLS0+CisgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CisgICAgICAgIDx1bCBjbGFzcz0iYnJlYWRjcnVtYiIgaWQ9ImJyZWFkY3J1bWIiPgorICAgICAgICAgICAgPGxpIGNsYXNzPSJtdXRlZCI+e3tidWlsZC5wcm9qZWN0Lm5hbWV9fTo8L2xpPgorICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncHJvamVjdGJ1aWxkcycgYnVpbGQucHJvamVjdC5pZCAlfSI+QnVpbGRzPC9hPjwvbGk+CisgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyV1cmwgJ2J1aWxkZGFzaGJvYXJkJyBidWlsZC5wayV9Ij57e2J1aWxkLnRhcmdldF9zZXQuYWxsLjAudGFyZ2V0fX0geyVpZiBidWlsZC50YXJnZXRfc2V0LmFsbC5jb3VudCA+IDElfSgrIHt7YnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnR8YWRkOiItMSJ9fSl7JWVuZGlmJX0gKHt7YnVpbGQuY29tcGxldGVkX29ufGRhdGU6ImQvbS95IEg6aSJ9fSk8L2E+PC9saT4KKyAgICAgICAgICAgIHslIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfXslIGVuZGJsb2NrICV9CisgICAgICAgIDwvdWw+CisgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICQoIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICQoJyNicmVhZGNydW1iID4gbGknKS5hcHBlbmQoJzxzcGFuIGNsYXNzPSJkaXZpZGVyIj4mcmFycjs8L3NwYW4+Jyk7CisgICAgICAgICAgICAkKCcjYnJlYWRjcnVtYiA+IGxpOmxhc3QnKS5hZGRDbGFzcygiYWN0aXZlIik7CisgICAgICAgICAgICAkKCcjYnJlYWRjcnVtYiA+IGxpOmxhc3QgPiBzcGFuLCAjYnJlYWRjcnVtYiA+IGxpOmZpcnN0ID4gc3BhbicpLnJlbW92ZSgpOworICAgICAgICB9KTsKKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9kaXY+IDwhLS1zZWN0aW9uLS0+CisKKyAgICAgICAgPCEtLSBCZWdpbiBjb250YWluZXIgLS0+CisgICAgICAgIHslIGJsb2NrIHBhZ2VkZXRhaWxpbmZvbWFpbiAlfXslIGVuZGJsb2NrICV9CisgICAgICAgIDwhLS0gRW5kIGNvbnRhaW5lciAtLT4KKworPC9kaXY+CisKK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZWJ1aWxkcGFnZS5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2VidWlsZHBhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQxZGY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2VidWlsZHBhZ2UuaHRtbApAQCAtMCwwICsxLDg4IEBACit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9Cit7JSBibG9jayBwYWdlY29udGVudCAlfQorCisKKyA8ZGl2IGNsYXNzPSIiPgorPCEtLSBCcmVhZGNydW1icyAtLT4KKyAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKyAgICAgICAgPHVsIGNsYXNzPSJicmVhZGNydW1iIiBpZD0iYnJlYWRjcnVtYiI+CisgICAgICAgICAgICA8bGkgY2xhc3M9Im11dGVkIj57e2J1aWxkLnByb2plY3QubmFtZX19OjwvbGk+CisgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0YnVpbGRzJyBidWlsZC5wcm9qZWN0LmlkICV9Ij5CdWlsZHM8L2E+PC9saT4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgIHslIGJsb2NrIHBhcmVudGJyZWFkY3J1bWIgJX0KKyAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICdidWlsZGRhc2hib2FyZCcgYnVpbGQucGslfSI+CisgICAgICAgICAgICAgICAge3tidWlsZC5nZXRfc29ydGVkX3RhcmdldF9saXN0LjAudGFyZ2V0fX0geyVpZiBidWlsZC50YXJnZXRfc2V0LmFsbC5jb3VudCA+IDElfSgrIHt7YnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnR8YWRkOiItMSJ9fSl7JWVuZGlmJX0gKHt7YnVpbGQuY29tcGxldGVkX29ufGRhdGU6ImQvbS95IEg6aSJ9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIHslIGVuZGJsb2NrICV9CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgeyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9eyUgZW5kYmxvY2sgJX0KKyAgICAgICAgPC91bD4KKyAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgJCggZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgJCgnI2JyZWFkY3J1bWIgPiBsaScpLmFwcGVuZCgnPHNwYW4gY2xhc3M9ImRpdmlkZXIiPiZyYXJyOzwvc3Bhbj4nKTsKKyAgICAgICAgICAgICQoJyNicmVhZGNydW1iID4gbGk6bGFzdCcpLmFkZENsYXNzKCJhY3RpdmUiKTsKKyAgICAgICAgICAgICQoJyNicmVhZGNydW1iID4gbGk6bGFzdCA+IHNwYW4sICNicmVhZGNydW1iID4gbGk6Zmlyc3QgPiBzcGFuJykucmVtb3ZlKCk7CisJICAgIGNvbnNvbGUubG9nKCJkb25lIik7CisgICAgICAgIH0pOworICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2Rpdj4KKworICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisKKyAgICAgICAgPCEtLSBiZWdpbiBsZWZ0IHNpZGViYXIgY29udGFpbmVyIC0tPgorICAgICAgICA8ZGl2IGlkPSJuYXYiIGNsYXNzPSJzcGFuMiI+CisgICAgICAgICAgICA8dWwgY2xhc3M9Im5hdiBuYXYtbGlzdCB3ZWxsIj4KKyAgICAgICAgICAgICAgPGxpCisgICAgICAgICAgICAgICAgeyUgaWYgcmVxdWVzdC5yZXNvbHZlcl9tYXRjaC51cmxfbmFtZSA9PSAnYnVpbGRkYXNoYm9hcmQnICAlfQorICAgICAgICAgICAgICAgICAgY2xhc3M9ImFjdGl2ZSIKKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfSA+CisgICAgICAgICAgICAgICAgPGEgY2xhc3M9Im5hdi1wYXJlbnQiIGhyZWY9InslIHVybCAnYnVpbGRkYXNoYm9hcmQnIGJ1aWxkLnBrICV9Ij5CdWlsZCBzdW1tYXJ5PC9hPgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICB7JSBpZiBidWlsZC50YXJnZXRfc2V0LmFsbC4wLmlzX2ltYWdlIGFuZCBidWlsZC5vdXRjb21lID09IDAgJX0KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Im5hdi1oZWFkZXIiPkltYWdlczwvbGk+CisgICAgICAgICAgICAgICAgeyUgYmxvY2sgbmF2LXRhcmdldCAlfQorICAgICAgICAgICAgICAgICAgeyUgZm9yIHQgaW4gYnVpbGQuZ2V0X3NvcnRlZF90YXJnZXRfbGlzdCAlfQorICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICd0YXJnZXQnIGJ1aWxkLnBrIHQucGsgJX0iPnt7dC50YXJnZXR9fTwvYT48bGk+CisgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICB7JSBlbmRibG9jayAlfQorICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICA8bGkgY2xhc3M9Im5hdi1oZWFkZXIiPkJ1aWxkPC9saT4KKyAgICAgICAgICAgICAgeyUgYmxvY2sgbmF2LWNvbmZpZ3VyYXRpb24gJX0KKyAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ2NvbmZpZ3VyYXRpb24nIGJ1aWxkLnBrICV9Ij5Db25maWd1cmF0aW9uPC9hPjwvbGk+CisgICAgICAgICAgICAgIHslIGVuZGJsb2NrICV9CisgICAgICAgICAgICAgIHslIGJsb2NrIG5hdi10YXNrcyAlfQorICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAndGFza3MnIGJ1aWxkLnBrICV9Ij5UYXNrczwvYT48L2xpPgorICAgICAgICAgICAgICB7JSBlbmRibG9jayAlfQorICAgICAgICAgICAgICB7JSBibG9jayBuYXYtcmVjaXBlcyAlfQorICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncmVjaXBlcycgYnVpbGQucGsgJX0iPlJlY2lwZXM8L2E+PC9saT4KKyAgICAgICAgICAgICAgeyUgZW5kYmxvY2sgJX0KKyAgICAgICAgICAgICAgeyUgYmxvY2sgbmF2LXBhY2thZ2VzICV9CisgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlcycgYnVpbGQucGsgJX0iPlBhY2thZ2VzPC9hPjwvbGk+CisgICAgICAgICAgICAgIHslIGVuZGJsb2NrICV9CisgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Im5hdi1oZWFkZXIiPlBlcmZvcm1hbmNlPC9saT4KKyAgICAgICAgICAgICAgeyUgYmxvY2sgbmF2LWJ1aWxkdGltZSAlfQorICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAnYnVpbGR0aW1lJyBidWlsZC5wayAlfSI+VGltZTwvYT48L2xpPgorICAgICAgICAgICAgICB7JSBlbmRibG9jayAlfQorICAgICAgICAgICAgICB7JSBibG9jayBuYXYtY3B1dXNhZ2UgJX0KKyAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ2NwdXVzYWdlJyBidWlsZC5wayAlfSI+Q1BVIHVzYWdlPC9hPjwvbGk+CisgICAgICAgICAgICAgIHslIGVuZGJsb2NrICV9CisgICAgICAgICAgICAgIHslIGJsb2NrIG5hdi1kaXNraW8gJX0KKyAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ2Rpc2tpbycgYnVpbGQucGsgJX0iPkRpc2sgSS9PPC9hPjwvbGk+CisgICAgICAgICAgICAgIHslIGVuZGJsb2NrICV9CisgICAgICAgICAgICA8L3VsPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPCEtLSBlbmQgbGVmdCBzaWRlYmFyIGNvbnRhaW5lciAtLT4KKworICAgICAgICA8IS0tIEJlZ2luIHJpZ2h0IGNvbnRhaW5lciAtLT4KKyAgICAgICAgeyUgYmxvY2sgYnVpbGRpbmZvbWFpbiAlfXslIGVuZGJsb2NrICV9CisgICAgICAgIDwhLS0gRW5kIHJpZ2h0IGNvbnRhaW5lciAtLT4KKworCisgICAgPC9kaXY+CisgIDwvZGl2PgorCisKK3slIGVuZGJsb2NrICV9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlcHJvamVjdGJ1aWxkc3BhZ2UuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlcHJvamVjdGJ1aWxkc3BhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjljZDE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2Vwcm9qZWN0YnVpbGRzcGFnZS5odG1sCkBAIC0wLDAgKzEsMTUgQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKK3slIGluY2x1ZGUgInByb2plY3R0b3BiYXIuaHRtbCIgJX0KKworPCEtLSBCZWdpbiBtYWluIHBhZ2UgY29udGFpbmVyIC0tPgorPGRpdj4KKyAgICB7JSBibG9jayBwcm9qZWN0aW5mb21haW4gJX17JSBlbmRibG9jayAlfQorPC9kaXY+Cis8IS0tIEVuZCBtYWluIGNvbnRhaW5lciAtLT4KKworeyUgZW5kYmxvY2sgJX0KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2Vwcm9qZWN0cGFnZS5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2Vwcm9qZWN0cGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2OGUwYmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXByb2plY3RwYWdlLmh0bWwKQEAgLTAsMCArMSw0MCBAQAoreyUgZXh0ZW5kcyAiYmFzZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQoreyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KKworeyUgaW5jbHVkZSAicHJvamVjdHRvcGJhci5odG1sIiAlfQorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpeworICAgICAkKCIjY29uZmlnLW5hdiAubmF2IGxpIGEiKS5lYWNoKGZ1bmN0aW9uKCl7CisgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSA9PT0gJCh0aGlzKS5hdHRyKCdocmVmJykpCisgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLmFkZENsYXNzKCdhY3RpdmUnKTsKKyAgICAgICBlbHNlCisgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTsKKyAgICAgfSk7CisKKyAgICAgJCgiI3RvcGJhci1jb25maWd1cmF0aW9uLXRhYiIpLmFkZENsYXNzKCJhY3RpdmUiKQorICB9KTsKKzwvc2NyaXB0PgorCis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICA8IS0tIG9ubHkgb24gY29uZmlnIHBhZ2VzIC0tPgorICA8ZGl2IGlkPSJjb25maWctbmF2IiBjbGFzcz0ic3BhbjIiPgorICAgIDx1bCBjbGFzcz0ibmF2IG5hdi1saXN0IHdlbGwiPgorICAgICAgPGxpPjxhIGNsYXNzPSJuYXYtcGFyZW50IiBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIHByb2plY3QuaWQgJX0iPkNvbmZpZ3VyYXRpb248L2E+PC9saT4KKyAgICAgIDxsaSBjbGFzcz0ibmF2LWhlYWRlciI+Q29tcGF0aWJsZSBtZXRhZGF0YTwvbGk+Cis8IS0tICA8bGk+PGEgaHJlZj0iYWxsLWltYWdlLXJlY2lwZXMuaHRtbCI+SW1hZ2UgcmVjaXBlczwvYT48L2xpPiAtLT4KKyAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3R0YXJnZXRzJyBwcm9qZWN0LmlkICV9Ij5SZWNpcGVzPC9hPjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0bWFjaGluZXMnIHByb2plY3QuaWQgJX0iPk1hY2hpbmVzPC9hPjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0bGF5ZXJzJyBwcm9qZWN0LmlkICV9Ij5MYXllcnM8L2E+PC9saT4KKyAgICAgIDxsaSBjbGFzcz0ibmF2LWhlYWRlciI+RXh0cmEgY29uZmlndXJhdGlvbjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0Y29uZicgcHJvamVjdC5pZCAlfSI+Qml0QmFrZSB2YXJpYWJsZXM8L2E+PC9saT4KKyAgICA8L3VsPgorICA8L2Rpdj4KKyAgPGRpdiBjbGFzcz0ic3BhbjEwIj4KKyAgICB7JSBibG9jayBwcm9qZWN0aW5mb21haW4gJX17JSBlbmRibG9jayAlfQorICA8L2Rpdj4KKzwvZGl2PgorCit7JSBlbmRibG9jayAlfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXRhYmxlX2JvdHRvbS5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2V0YWJsZV9ib3R0b20uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTAyM2Y1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2V0YWJsZV9ib3R0b20uaHRtbApAQCAtMCwwICsxLDk0IEBACisgICAgPC90Ym9keT4KKyAgICA8L3RhYmxlPgorCis8IS0tIFNob3cgcGFnaW5hdGlvbiBjb250cm9scyAtLT4KKzxkaXYgY2xhc3M9InBhZ2luYXRpb24gcGFnaW5hdGlvbi1jZW50ZXJlZCI+CisgICA8ZGl2IGNsYXNzPSJwdWxsLWxlZnQiPgorICAgU2hvd2luZyB7e29iamVjdHMuc3RhcnRfaW5kZXh9fSB0byB7e29iamVjdHMuZW5kX2luZGV4fX0gb3V0IG9mIHt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR9fSBlbnRyaWVzLgorICAgPC9kaXY+CisKKyAgIDx1bCBjbGFzcz0icGFnaW5hdGlvbiIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrLWlubGluZSI+Cit7JWlmIG9iamVjdHMuaGFzX3ByZXZpb3VzICV9CisgIDxsaT48YSBocmVmPSJqYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydwYWdlJzp7e29iamVjdHMucHJldmlvdXNfcGFnZV9udW1iZXJ9fX0pIj4mbGFxdW87PC9hPjwvbGk+Cit7JWVsc2UlfQorICA8bGkgY2xhc3M9ImRpc2FibGVkIj48YSBocmVmPSIjIj4mbGFxdW87PC9hPjwvbGk+Cit7JWVuZGlmJX0KK3slIGZvciBpIGluIG9iamVjdHMucGFnZV9yYW5nZSAlfQorICA8bGl7JWlmIGkgPT0gb2JqZWN0cy5udW1iZXIgJX0gY2xhc3M9ImFjdGl2ZSIgeyVlbmRpZiV9PjxhIGhyZWY9ImphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J3BhZ2UnOnt7aX19fSkiPnt7aX19PC9hPjwvbGk+Cit7JSBlbmRmb3IgJX0KK3slaWYgb2JqZWN0cy5oYXNfbmV4dCV9CisgIDxsaT48YSBocmVmPSJqYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydwYWdlJzp7e29iamVjdHMubmV4dF9wYWdlX251bWJlcn19fSkiPiZyYXF1bzs8L2E+PC9saT4KK3slZWxzZSV9CisgIDxsaSBjbGFzcz0iZGlzYWJsZWQiPjxhIGhyZWY9IiMiPiZyYXF1bzs8L2E+PC9saT4KK3slZW5kaWYlfQorICA8L3VsPgorICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKyAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJwYWRkaW5nLXRvcDo1cHg7Ij5TaG93IHJvd3M6PC9zcGFuPgorICAgIDxzZWxlY3Qgc3R5bGU9Im1hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MHB4OyIgY2xhc3M9InBhZ2VzaXplIj4KKyAgICAgIHslIHdpdGggIjEwIDI1IDUwIDEwMCAxNTAiIGFzIGxpc3QlfQorICAgICAgICB7JSBmb3IgaSBpbiBsaXN0LnNwbGl0ICV9CisgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSI+e3tpfX08L29wdGlvbj4KKyAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICB7JSBlbmR3aXRoICV9CisgICAgPC9zZWxlY3Q+CisgICA8L2Rpdj4KKzwvZGl2PgorCis8IS0tIFVwZGF0ZSBwYWdlIGRpc3BsYXkgc2V0dGluZ3MgLS0+CisKKzxzY3JpcHQ+CisgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CisKKyAgICAvLyB3ZSBsb2FkIGNvb2tpZXMgZm9yIHRoZSBjb2x1bW4gZGlzcGxheQorICAgIHNhdmUgPSAkLmNvb2tpZSgnX2Rpc3BsYXljb2xzX3t7b2JqZWN0bmFtZX19Jyk7CisgICAgaWYgKHNhdmUgIT0gdW5kZWZpbmVkKSB7CisgICAgICAgIHNldHRpbmcgPSBzYXZlLnNwbGl0KCc7Jyk7CisgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgc2V0dGluZy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKHNldHRpbmdbaV0ubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIHNwbGl0bGlzdCA9IHNldHRpbmdbaV0uc3BsaXQoJzonKTsKKyAgICAgICAgICAgICAgICBpZCA9IHNwbGl0bGlzdFswXSwgdiA9IHNwbGl0bGlzdFsxXTsKKyAgICAgICAgICAgICAgICBpZiAodiA9PSAndHJ1ZScpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnLmNoYnh0b2dnbGUjJytpZCkucHJvcCgnY2hlY2tlZCcsIHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnLmNoYnh0b2dnbGUjJytpZCkucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBsb2FkIGRhdGEgZm9yIG51bWJlciBvZiBlbnRyaWVzIHRvIGJlIGRpc3BsYXllZCBvbiBwYWdlCisgICAgaWYgKHt7cmVxdWVzdC5HRVQuY291bnR9fSAhPSAiIikgeworICAgICAgcGFnZXNpemUgPSB7e3JlcXVlc3QuR0VULmNvdW50fX07CisgICAgfQorCisgICAgJCgnLnBhZ2VzaXplIG9wdGlvbicpLnByb3AoJ3NlbGVjdGVkJywgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcignW3ZhbHVlPSInICsgcGFnZXNpemUgKyAnIl0nKQorICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdzZWxlY3RlZCcsIHRydWUpOworCisgICAgJCgnLmNoYnh0b2dnbGUnKS5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgc2hvd2hpZGVUYWJsZUNvbHVtbigkKHRoaXMpLmF0dHIoJ2lkJyksICQodGhpcykuaXMoJzpjaGVja2VkJykpCisgICAgfSk7CisKKyAgICAvL3R1cm4gZWRpdCBjb2x1bW5zIGRyb3Bkb3duIGludG8gYSBtdWx0aS1zZWxlY3QgbWVudQorICAgICAkKCcuZHJvcGRvd24tbWVudSBpbnB1dCwgLmRyb3Bkb3duLW1lbnUgbGFiZWwnKS5jbGljayhmdW5jdGlvbihlKSB7CisgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgfSk7CisKKyAgICAvL3Nob3cgdG9vbHRpcCB3aXRoIGFwcGxpZWQgZmlsdGVyCisgICAgJCgnI2ZpbHRlcmVkJykudG9vbHRpcCh7Y29udGFpbmVyOid0YWJsZScsIHBsYWNlbWVudDonYm90dG9tJywgZGVsYXk6e2hpZGU6MTUwMH0sIGh0bWw6dHJ1ZX0pOworCisgICAgLy9wcm9ncmVzcyBiYXIgdG9vbHRpcAorICAgICQoJy5wcm9ncmVzcywgLmxlYWQgc3BhbicpLnRvb2x0aXAoe2NvbnRhaW5lcjondGFibGUnLCBwbGFjZW1lbnQ6J3RvcCd9KTsKKworICAgICQoIi5wYWdlc2l6ZSIpLmNoYW5nZShmdW5jdGlvbiAoKSB7CisgICAgICAgIHJlbG9hZF9wYXJhbXMoeyJjb3VudCI6JCh0aGlzKS52YWwoKX0pOworICAgIH0pOworfSk7Cis8L3NjcmlwdD4KKworPCEtLSBtb2RhbCBmaWx0ZXIgYm94ZXMgLS0+CisgICB7JSBmb3IgdGMgaW4gdGFibGVjb2xzICV9eyUgaWYgdGMuZmlsdGVyICV9eyUgd2l0aCBvYmplY3RuYW1lPW9iamVjdG5hbWUgZj10Yy5maWx0ZXIgJX0KKyAgICAgICAgeyUgaW5jbHVkZSAiZmlsdGVyc25pcHBldC5odG1sIiAlfQorICAgeyUgZW5kd2l0aCAlfXslIGVuZGlmICV9IHslIGVuZGZvciAlfQorPCEtLSBlbmQgbW9kYWxzIC0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2V0YWJsZV90b3AuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNldGFibGVfdG9wLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNlZGU2NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNldGFibGVfdG9wLmh0bWwKQEAgLTAsMCArMSwyMzkgQEAKK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKzwhLS0gY29tcG9uZW50IHRvIGRpc3BsYXkgYSBnZW5lcmljIHRhYmxlIC0tPgorICAgIDxzY3JpcHQ+CisKKyAgICAvLworICAgIC8vIG1vc3Qgb2YgdGhlIGZvbGxvd2luZyBqYXZhc2NyaXB0IGlzIGZvciBtYW5hZ2luZyB0aGUgJ0VkaXQgQ29sdW1ucycKKyAgICAvLyBwb3AtdXAgZGlhbG9nIGFuZCBhY3Rpb25zLiB0aGUgaWRlYSBpcyB0aGF0IHRoZXJlIGFyZSAyIHR5cGVzCisgICAgLy8gb2YgYWN0aW9uczogaW1tZWRpYXRlIC0gcGVyZm9ybWVkIHdoaWxlIHRoZSBkaWFsb2cgaXMgc3RpbGwKKyAgICAvLyB2aXNpYmxlIC0gaGlkZS9zaG93IGNvbHVtbnMsIGFuZCBkZWxheWVkIC0gcGVyZm9ybWVkIHdoZW4gdGhlCisgICAgLy8gZGlhbG9nIGJlY29tZXMgaW52aXNpYmxlIC0gYW55IHJlc29ydGluZyBpZiBuZWNlc3NhcnkuCisgICAgLy8KKyAgICAvLyBXaGVuIHRoZSBkaWFsb2cgaXMgb3BlbiwgYW4gaW50ZXJ2YWwgdGltZXIgaXMgc2V0IHVwIHRvCisgICAgLy8gZGV0ZXJtaW5lIGlmIHRoZSBkaWFsb2cgaXMgc3RpbGwgdmlzaWJsZS4gd2hlbiB0aGUgZGlhbG9nCisgICAgLy8gY2xvc2VzIC0gZ29lcyBpbnZpc2libGUsIHRoZSBkZWxheWVkIGFjdGlvbnMgYXJlIHBlcmZvcm1lZC4KKyAgICAvLworICAgIC8vIHRoZSBpbnRlcnZhbCB0aW1lciBhbmQgaW50ZXJydXB0IGhhbmRsZXIgaXMgYSB3YXkgb2Ygc2ltdWxhdGluZworICAgIC8vIGFuIG9uY2xvc2UgZXZlbnQuIHRoZXJlIGlzIHByb2JhYmx5IGEgc2ltcGxlciB3YXkgdG8gZG8gdGhpcworICAgIC8vIGhvd2V2ZXIgdGhlIHBvcC11cCB3aW5kb3cgaWQgd2FzIGVsdXNpdmUuCisgICAgLy8KKworICAgIHZhciBlZGl0Q29sVGltZXI7CisgICAgdmFyIGVkaXRDb2xBY3Rpb247CisKKyAgICAvLworICAgIC8vIHRoaXMgaXMgdGhlIHRhcmdldCBmdW5jdGlvbiBvZiB0aGUgaW50ZXJ2YWwgdGltZW91dC4KKyAgICAvLyBjaGVjayB0byBzZWUgaWYgdGhlIGRpYWxvZyBpcyB2aXNpYmxlLiBpZiB0aGUgZGlhbG9nCisgICAgLy8gaGFzIGdvbmUgaW52aXNpYmxlIHNpbmNlIHRoZSBsYXN0IGNoZWNrLCB0YWtlIGFueSBkZWxheWVkCisgICAgLy8gYWN0aW9ucyBpbmRpY2F0ZWQgaW4gdGhlIGFjdGlvbiBsaXN0IGFuZCBjbGVhciB0aGUgdGltZXIuCisgICAgLy8KKworICAgIGZ1bmN0aW9uIGNoZWNrVmlzaWJsZSggKSB7CisgICAgICAgIGVkaXRjb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ2VkaXRjb2wnICk7CisgICAgICAgIGlmICggZWRpdGNvbC5vZmZzZXRXaWR0aCA8PSAwICkgeworICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCggZWRpdENvbFRpbWVyICk7CisgICAgICAgICAgICBlZGl0Q29sVGltZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGhpZGVzaG93Q29sdW1ucyggKTsKKyAgICAgICAgICAgIGVkaXRDb2xBY3Rpb24gPSBbIF07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaWx0ZXJUYWJsZVJvd3ModGVzdCkgeworICAgICAgICBpZiAodGVzdC5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICB2YXIgciA9IHRlc3Quc3BsaXQoL1sgLF0rLykubWFwKGZ1bmN0aW9uIChlKSB7IHJldHVybiBuZXcgUmVnRXhwKGUsICdpJykgfSk7CisgICAgICAgICAgICAkKCd0ci5kYXRhJykubWFwKCBmdW5jdGlvbiAoaSwgZWwpIHsKKyAgICAgICAgICAgICAgICAoISByLm1hcChmdW5jdGlvbiAoaikgeyByZXR1cm4gai50ZXN0KCQoZWwpLmh0bWwoKSl9KS5yZWR1Y2UoZnVuY3Rpb24gKGMsIHApIHsgcmV0dXJuIGMgJiYgcDt9ICkpID8gJChlbCkuaGlkZSgpIDogJChlbCkuc2hvdygpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAkKCd0ci5kYXRhJykuc2hvdygpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8KKyAgICAvLyBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIHRoZSBpbmRpY2F0ZWQgdXJsIGFyZy4KKyAgICAvLyB0aGlzIGlzIG5lZWRlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIHJlc29ydAorICAgIC8vIGlzIG5lY2Vzc2FyeS4gaXQgbG9va3MgbGlrZSBhIGxvdCBvZiBnb3JwIHN0dWZmCisgICAgLy8gYnV0IGl0cyBhY3R1YWxseSBwcmV0dHkgc2ltcGxlLgorICAgIC8vCisKKyAgICBmdW5jdGlvbiBnZXRVUkxQYXJhbWV0ZXIoIG5hbWUgKSB7CisgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoKG5ldyBSZWdFeHAoJ1s/fCZdJyArIG5hbWUgKyAnPScgKworICAgICAgICAgICcoW14mO10rPykoJnwjfDt8JCknKS5leGVjKGxvY2F0aW9uLnNlYXJjaCl8fFssIiJdKVsxXS5yZXBsYWNlKC9cKy9nLAorICAgICAgICAgICclMjAnKSl8fG51bGwKKyAgICB9CisKKyAgICAvLworICAgIC8vIHdoZW4gdGhlIGRpYWxvZyBib3ggZ29lcyBpbnZpc2libGUKKyAgICAvLyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBpbnRlcnByZXQKKyAgICAvLyB0aGUgYWN0aW9uIGxpc3QgYW5kIHRha2UgYW55IGRlbGF5ZWQgYWN0aW9ucyBuZWNlc3NhcnkuCisgICAgLy8gdGhlIGVkaXRDb2xBY3Rpb24gbGlzdCBpcyBhIGhhc2ggdGFibGUgd2l0aAorICAgIC8vIHRoZSBjb2x1bW4gbmFtZSBhcyB0aGUgaGFzaCBrZXksIHRoZSBoYXNoIHZhbHVlCisgICAgLy8gaXMgYSAyIGVsZW1lbnQgbGlzdC4gdGhlIGZpcnN0IGVsZW1lbnQgaXMgYSBmbGFnCisgICAgLy8gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjb2x1bW4gaXMgb24gb3Igb2ZmLiB0aGUKKyAgICAvLyAybmQgZWxlbWVudCBpcyB0aGUgc29ydCBvcmRlciBpbmRpY2F0b3IgZm9yIHRoZSBjb2x1bW4uCisgICAgLy8KKworICAgIGZ1bmN0aW9uIGhpZGVzaG93Q29sdW1ucyggKSB7CisgICAgICAgIGZvciggdmFyIGsgaW4gZWRpdENvbEFjdGlvbiApIHsKKyAgICAgICAgICAgIHNob3doaWRlRGVsYXllZFRhYmxlQWN0aW9uKCBrLCBlZGl0Q29sQWN0aW9uWyBrIF1bIDAgXSwgZWRpdENvbEFjdGlvblsgayBdWyAxIF0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8KKyAgICAvLyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IHBlcmZvcm1zIHRoZSBkZWxheWVkIHRhYmxlIGFjdGlvbnMKKyAgICAvLyBuYW1lbHkgYW55IHJlc29ydGluZyBpZiBuZWNlc3NhcnkKKyAgICAvLworCisgICAgZnVuY3Rpb24gc2hvd2hpZGVEZWxheWVkVGFibGVBY3Rpb24oIGNsbmFtZSwgc2gsIG9yZGVya2V5ICkgeworICAgICAgICBpZiAoICFzaCApIHsKKyAgICAgICAgICAgIHAgPSBnZXRVUkxQYXJhbWV0ZXIoICJvcmRlcmJ5IiApLnNwbGl0KCAiOiIgKVsgMCBdOworICAgICAgICAgICAgaWYgKCBwID09IG9yZGVya2V5ICkgeworICAgICAgICAgICAgICAgIHJlbG9hZF9wYXJhbXMoeyAnb3JkZXJieScgOiAne3tkZWZhdWx0X29yZGVyYnl9fSd9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vCisgICAgLy8gdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBwZXJmb3JtcyB0aGUgaW1tZWRpYXRlIHRhYmxlIGFjdGlvbnMKKyAgICAvLyBuYW1lbHkgYW55IGNvbHVtcyB0aGF0IG5lZWQgdG8gYmUgaGlkZGVuL3Nob3duCisgICAgLy8KKworICAgIGZ1bmN0aW9uIHNob3doaWRlSW1tZWRpYXRlVGFibGVBY3Rpb24oIGNsbmFtZSwgc2gsIG9yZGVya2V5ICkgeworICAgICAgICBpZiAoIHNoICkgeworICAgICAgICAgICAgJCggJy4nICsgY2xuYW1lICkuc2hvdyggMTAwICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAkKCAnLicgKyBjbG5hbWUgKS5oaWRlKCAxMDAgKTsKKyAgICAgICAgfQorCisJLy8gc2F2ZSBjb29raWUgZm9yIGFsbCBjaGVja2JveGVzCisJc2F2ZSA9ICcnOworCSQoICcuY2hieHRvZ2dsZScgKS5lYWNoKGZ1bmN0aW9uKCApIHsKKyAgICAgICAgICAgIGlmICggJCggdGhpcyApLmF0dHIoICdpZCcgKSAhPSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgc2F2ZSArPSAnOycgKyAkKCB0aGlzICkuYXR0ciggJ2lkJyApICsnOicrICQoIHRoaXMgKS5pcyggJzpjaGVja2VkJyApCisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCSQuY29va2llKCAnX2Rpc3BsYXljb2xzX3t7b2JqZWN0bmFtZX19Jywgc2F2ZSApOworCXNhdmUgPSAnJzsKKyAgICB9CisKKyAgICAvLworICAgIC8vIHRoaXMgaXMgdGhlIG9uY2xpY2sgaGFuZGxlciBmb3IgYWxsIG9mIHRoZSBjaGVjayBib3gKKyAgICAvLyBpdGVtcyBpbiBlZGl0IGNvbHVtbnMgZGlhbG9nCisgICAgLy8KKworICAgIGZ1bmN0aW9uIHNob3doaWRlVGFibGVDb2x1bW4oIGNsbmFtZSwgc2gsIG9yZGVya2V5ICkgeworICAgICAgICBlZGl0Y29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdlZGl0Y29sJyApOworICAgICAgICBpZiAoIGVkaXRjb2wub2Zmc2V0V2lkdGggPD0gMCApIHsKKworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIHRoaXMgcGF0aCBpcyB0YWtlbiB3aGVuIHRoZSBwYWdlIGlzIGZpcnN0CisgICAgICAgICAgICAvLyBnZXR0aW5nIGluaXRpYWxpemVkIC0gbm8gZGlhbG9nIHZpc2libGUsCisgICAgICAgICAgICAvLyBwZXJmb3JtIGJvdGggdGhlIGltbWVkaWF0ZSBhbmQgZGVsYXllZCBhY3Rpb25zCisgICAgICAgICAgICAvLworCisgICAgICAgICAgICBzaG93aGlkZUltbWVkaWF0ZVRhYmxlQWN0aW9uKCBjbG5hbWUsIHNoLCBvcmRlcmtleSApOworICAgICAgICAgICAgc2hvd2hpZGVEZWxheWVkVGFibGVBY3Rpb24oIGNsbmFtZSwgc2gsIG9yZGVya2V5ICk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCAhZWRpdENvbFRpbWVyICkgeworCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSBhIHRpbWVyIGFjdGl2ZSBzbyBzZXQgb25lIHVwCisgICAgICAgICAgICAvLyBhbmQgY2xlYXIgdGhlIGFjdGlvbiBsaXN0CisgICAgICAgICAgICAvLworCisgICAgICAgICAgICBlZGl0Q29sVGltZXIgPSBzZXRJbnRlcnZhbCggY2hlY2tWaXNpYmxlLCAyNTAgKTsKKyAgICAgICAgICAgIGVkaXRDb2xBY3Rpb24gPSBbIF07CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBzYXZlIHRoZSBhY3Rpb24gdG8gYmUgdGFrZW4gd2hlbiB0aGUgZGlhbG9nIGNsb3NlcworICAgICAgICAvLworCisgICAgICAgIGVkaXRDb2xBY3Rpb25bIGNsbmFtZSBdID0gWyBzaCwgb3JkZXJrZXkgXTsKKyAgICAgICAgc2hvd2hpZGVJbW1lZGlhdGVUYWJsZUFjdGlvbiggY2xuYW1lLCBzaCwgb3JkZXJrZXkgKTsKKyAgICB9CisKKyAgICA8L3NjcmlwdD4KKworPCEtLSBjb250cm9sIGhlYWRlciAtLT4KKzxkaXYgY2xhc3M9Im5hdmJhciI+CisgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWlubmVyIj4KKyAgICAgICAgPGZvcm0gY2xhc3M9Im5hdmJhci1zZWFyY2ggaW5wdXQtYXBwZW5kIHB1bGwtbGVmdCIgaWQ9InNlYXJjaGZvcm0iPgorICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJpbnB1dC14eGxhcmdlIiBpZD0ic2VhcmNoIiBuYW1lPSJzZWFyY2giIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJTZWFyY2ggeyVpZiBvYmplY3Rfc2VhcmNoX2Rpc3BsYXkgJX17e29iamVjdF9zZWFyY2hfZGlzcGxheX19eyVlbHNlJX17e29iamVjdG5hbWV9fXslZW5kaWYlfSIgdmFsdWU9InslaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslIGVuZGlmICV9Ii8+eyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9PGEgaHJlZj0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIiBjbGFzcz0iYWRkLW9uIGJ0biIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT48L2E+eyVlbmRpZiV9CisgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJvcmRlcmJ5IiB2YWx1ZT0ie3tyZXF1ZXN0LkdFVC5vcmRlcmJ5fX0iPgorICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icGFnZSIgdmFsdWU9IjEiPgorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBpZD0ic2VhcmNoLWJ1dHRvbiIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIj5TZWFyY2g8L2J1dHRvbj4KKyAgICAgICAgPC9mb3JtPgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4KK3slIGlmIHRhYmxlY29scyAlfQorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYnRuLWdyb3VwIj4KKyAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJlZGl0LWNvbHVtbnMtYnV0dG9uIiBjbGFzcz0iYnRuIGRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5FZGl0IGNvbHVtbnMKKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNhcmV0Ij48L3NwYW4+CisgICAgICAgICAgICAgICAgPC9idXR0b24+Cis8IS0tCisJe3t0YWJsZWNvbHN8c29ydGNvbHN9fQorLS0+CisgICAgICAgICAgICAgICAgPHVsIGlkPSdlZGl0Y29sJyBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgICAgICAgICAgICB7JSBmb3IgaSBpbiB0YWJsZWNvbHN8c29ydGNvbHMgJX0KKyAgICAgICAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHslIGlmIG5vdCBpLmNsY2xhc3MgJX0gY2xhc3M9ImNoZWNrYm94IG11dGVkIiB7JWVsc2UlfSBjbGFzcz0iY2hlY2tib3giIHslZW5kaWYlfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGNsYXNzPSJjaGJ4dG9nZ2xlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiBpLmNsY2xhc3MgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJ7e2kuY2xjbGFzc319IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImN0e3tpLm5hbWV9fSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIG5vdCBpLmhpZGRlbiAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9ImNoZWNrZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JWVuZGlmJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9InNob3doaWRlVGFibGVDb2x1bW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdpZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuaXMoJzpjaGVja2VkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgaS5vcmRlcmljb24gJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne3tpLm9yZGVya2V5fX0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JWVsc2UlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCBkaXNhYmxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfS8+ICAge3tpLm5hbWV9fQorICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2Rpdj4KK3slIGVuZGlmICV9CisgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmlubGluZSI+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpdmlkZXItdmVydGljYWwiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJwYWRkaW5nLXRvcDo1cHg7Ij5TaG93IHJvd3M6PC9zcGFuPgorICAgICAgICAgICAgICAgIDxzZWxlY3Qgc3R5bGU9Im1hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MHB4OyIgY2xhc3M9InBhZ2VzaXplIj4KKyAgICAgICAgICAgICAgICAgIHslIHdpdGggIjEwIDI1IDUwIDEwMCAxNTAiIGFzIGxpc3QlfQorICAgICAgICAgICAgICAgICAgICB7JSBmb3IgaSBpbiBsaXN0LnNwbGl0ICV9CisgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSI+e3tpfX08L29wdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CisgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4gPCEtLSBuYXZiYXItaW5uZXIgLS0+Cis8L2Rpdj4KKworPCEtLSB0aGUgYWN0dWFsIHJvd3Mgb2YgdGhlIHRhYmxlIC0tPgorICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGVzb3J0ZXIiIGlkPSJvdGFibGUiPgorICAgIDx0aGVhZD4KKyAgICAgICAgPCEtLSBUYWJsZSBoZWFkZXIgcm93OyBnZW5lcmF0ZWQgZnJvbSAidGFibGVjb2xzIiBlbnRyeSBpbiB0aGUgY29udGV4dCBkaWN0IC0tPgorICAgICAgICA8dHI+CisgICAgICAgICAgICB7JSBmb3IgdGMgaW4gdGFibGVjb2xzICV9PHRoIGNsYXNzPSJ7JWlmIHRjLmRjbGFzcyV9e3t0Yy5kY2xhc3N9fXslZW5kaWYlfSB7JSBpZiB0Yy5jbGNsYXNzICV9e3t0Yy5jbGNsYXNzfX17JSBlbmRpZiAlfSI+CisgICAgICAgICAgICAgICAgeyVpZiB0Yy5xaGVscCV9PGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9Int7dGMucWhlbHB9fSI+PC9pPnslZW5kaWYlfQorICAgICAgICAgICAgICAgIHslaWYgdGMub3JkZXJmaWVsZCV9PGEgeyVpZiB0Yy5vcmRlcmljb24lfSBjbGFzcz0ic29ydGVkIiB7JWVuZGlmJX1ocmVmPSJqYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydwYWdlJzogMSwgJ29yZGVyYnknIDogJ3t7dGMub3JkZXJmaWVsZH19JyB9KSI+e3t0Yy5uYW1lfX08L2E+eyVlbHNlJX08c3BhbiBjbGFzcz0ibXV0ZWQiPnt7dGMubmFtZX19PC9zcGFuPnslZW5kaWYlfQorICAgICAgICAgICAgICAgIHslaWYgdGMub3JkZXJpY29uJX0gPGkgY2xhc3M9Imljb24tY2FyZXQte3t0Yy5vcmRlcmljb259fSI+PC9pPnslZW5kaWYlfQorICAgICAgICAgICAgICAgIHslaWYgdGMuZmlsdGVyJX08ZGl2IGNsYXNzPSJidG4tZ3JvdXAgcHVsbC1yaWdodCI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNmaWx0ZXJfe3t0Yy5maWx0ZXIuY2xhc3N9fSIgcm9sZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1taW5pIHslaWYgcmVxdWVzdC5HRVQuZmlsdGVyJX17e3RjLmZpbHRlci5vcHRpb25zfGZpbHRlcmVkX2ljb246cmVxdWVzdC5HRVQuZmlsdGVyfX0geyVlbmRpZiV9IiB7JWlmIHJlcXVlc3QuR0VULmZpbHRlciBhbmQgdGMuZmlsdGVyLm9wdGlvbnN8ZmlsdGVyZWRfdG9vbHRpcDpyZXF1ZXN0LkdFVC5maWx0ZXIgJX0gdGl0bGU9IjxwPnt7dGMuZmlsdGVyLm9wdGlvbnN8ZmlsdGVyZWRfdG9vbHRpcDpyZXF1ZXN0LkdFVC5maWx0ZXJ9fTwvcD48cD48YSBjbGFzcz0nYnRuIGJ0bi1zbWFsbCBidG4tcHJpbWFyeScgaHJlZj1qYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydmaWx0ZXInOicnfSk+U2hvdyBhbGwgeyUgaWYgZmlsdGVyX3NlYXJjaF9kaXNwbGF5ICV9e3tmaWx0ZXJfc2VhcmNoX2Rpc3BsYXl9fXslIGVsc2UgJX17e29iamVjdG5hbWV9fXslIGVuZGlmICV9PC9hPjwvcD4iIHslZW5kaWYlfSBkYXRhLXRvZ2dsZT0ibW9kYWwiPiA8aSBjbGFzcz0iaWNvbi1maWx0ZXIgZmlsdGVyZWQiPjwvaT4gPC9hPgorICAgICAgICAgICAgICAgIDwvZGl2PnslZW5kaWYlfQorICAgICAgICAgICAgPC90aD57JSBlbmRmb3IgJX0KKyAgICAgICAgPC90cj4KKyAgICA8L3RoZWFkPgorICAgIDx0Ym9keT4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2V0YWJsZV90b3BfbGF5ZXJzLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXRhYmxlX3RvcF9sYXllcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjIwOTFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2V0YWJsZV90b3BfbGF5ZXJzLmh0bWwKQEAgLTAsMCArMSw1IEBACit7JSBleHRlbmRzICJiYXNldGFibGVfdG9wLmh0bWwiICV9CisKK3slYmxvY2sgY3VzdG9tYnV0dG9ucyAlfQorICAgIDxhIGNsYXNzPSJidG4iIGhyZWY9InslIHVybCAnaW1wb3J0bGF5ZXInIHByb2plY3QuaWQgJX0iIHN0eWxlPSJtYXJnaW4tcmlnaHQ6NXB4OyI+SW1wb3J0IGxheWVyPC9hPgoreyVlbmRibG9jayV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmZpbGUuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iZmlsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZjU5NDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmZpbGUuaHRtbApAQCAtMCwwICsxLDI0IEBACit7JSBleHRlbmRzICJiYXNlYnVpbGRwYWdlLmh0bWwiICV9CisKK3slIGJsb2NrIHBhZ2V0aXRsZSAlfUZpbGVzIGZvciBwYWNrYWdlIHt7b2JqZWN0cy4wLmJwYWNrYWdlLm5hbWV9fSB7JSBlbmRibG9jayAlfQoreyUgYmxvY2sgcGFnZXRhYmxlICV9CisgICAgeyUgaWYgbm90IG9iamVjdHMgJX0KKyAgICAgICAgPHA+Tm8gZmlsZXMgd2VyZSByZWNvcmRlZCBmb3IgdGhpcyBwYWNrYWdlITwvcD4KKyAgICB7JSBlbHNlICV9CisKKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0aD5OYW1lPC90aD4KKyAgICAgICAgICAgIDx0aD5TaXplIChCeXRlcyk8L3RoPgorICAgICAgICAgICAgPC90cj4KKworICAgICAgICAgICAgeyUgZm9yIGZpbGUgaW4gb2JqZWN0cyAlfQorCisgICAgICAgICAgICA8dHIgY2xhc3M9ImRhdGEiPgorICAgICAgICAgICAgPHRkPnt7ZmlsZS5wYXRofX08L3RkPgorICAgICAgICAgICAgPHRkPnt7ZmlsZS5zaXplfX08L3RkPgorCisgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKworICAgIHslIGVuZGlmICV9CisKK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnBhY2thZ2UuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9icGFja2FnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NzVmZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnBhY2thZ2UuaHRtbApAQCAtMCwwICsxLDEwNyBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQorCit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorPGxpPlBhY2thZ2VzPC9saT4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIG5hdi1wYWNrYWdlcyAlfQorICA8bGkgY2xhc3M9ImFjdGl2ZSI+PGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlcycgYnVpbGQucGsgJX0iPlBhY2thZ2VzPC9hPjwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBidWlsZGluZm9tYWluICV9Cis8ZGl2IGNsYXNzPSJzcGFuMTAiPgorCit7JSBpZiBub3QgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCBub3QgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBub3Qgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgJX0KKworPCEtLSBFbXB0eSAtIG5vIGRhdGEgaW4gZGF0YWJhc2UgLS0+Cis8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgICAgPGgxPgorICAgICAgICBQYWNrYWdlcworICAgIDwvaDE+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gbGVhZCI+CisgICAgPHN0cm9uZz5ObyBwYWNrYWdlcyB3ZXJlIGJ1aWx0Ljwvc3Ryb25nPiBIb3cgZGlkIHRoaXMgaGFwcGVuPyBXZWxsLCBCaXRCYWtlIHJldXNlcyBhcyBtdWNoIHN0dWZmIGFzIHBvc3NpYmxlLgorICAgIElmIGFsbCBvZiB0aGUgcGFja2FnZXMgbmVlZGVkIHdlcmUgYWxyZWFkeSBidWlsdCBhbmQgYXZhaWxhYmxlIGluIHlvdXIgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUsIEJpdEJha2UKKyAgICB3aWxsIG5vdCByZWJ1aWxkIGFueSBvZiB0aGVtLiBUaGlzIG1pZ2h0IGJlIHNsaWdodGx5IGNvbmZ1c2luZywgYnV0IGl0IGRvZXMgbWFrZSBldmVyeXRoaW5nIGZhc3Rlci4KKzwvZGl2PgorCit7JSBlbHNlICV9CisKKzxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgPGgxPgorICB7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID4gMCAgJX0KKyAgICAgIHt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR9fSBwYWNrYWdle3tvYmplY3RzLnBhZ2luYXRvci5jb3VudHxwbHVyYWxpemV9fSBmb3VuZAorICB7JWVsaWYgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwJX0KKyAgICAgIE5vIHBhY2thZ2VzIGZvdW5kCisgIHslZWxzZSV9CisgICAgICBQYWNrYWdlcworICB7JWVuZGlmJX0KKyAgPC9oMT4KKzwvZGl2PgorCisgIHslIGlmIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KKyAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KKyAgICAgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIiBpZD0ic2VhcmNoZm9ybSI+CisgICAgICAgICAgICA8aW5wdXQgaWQ9InNlYXJjaCIgbmFtZT0ic2VhcmNoIiBjbGFzcz0iaW5wdXQteHhsYXJnZSIgdHlwZT0idGV4dCIgdmFsdWU9Int7cmVxdWVzdC5HRVQuc2VhcmNofX0iLz57JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX08YSBocmVmPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiIGNsYXNzPSJhZGQtb24gYnRuIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPjwvYT57JSBlbmRpZiAlfQorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2giPlNlYXJjaDwvYnV0dG9uPgorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiPlNob3cgYWxsIHBhY2thZ2VzPC9idXR0b24+CisgICAgICAgIDwvZm9ybT4KKyAgICAgIDwvZGl2PgorICA8L2Rpdj4KKworICB7JSBlbHNlICV9CisgIHslIGluY2x1ZGUgImJhc2V0YWJsZV90b3AuaHRtbCIgJX0KKworICAgIHslIGZvciBwYWNrYWdlIGluIG9iamVjdHMgJX0KKworICAgIDx0ciBjbGFzcz0iZGF0YSI+CisKKyAgICAgICAgPCEtLSBQYWNrYWdlIC0tPgorICAgICAgICA8dGQgY2xhc3M9InBhY2thZ2VfbmFtZSI+PGEgaHJlZj0ieyUgdXJsICJwYWNrYWdlX2J1aWx0X2RldGFpbCIgYnVpbGQucGsgcGFja2FnZS5wayAlfSI+e3twYWNrYWdlLm5hbWV9fTwvYT48L3RkPgorICAgICAgICA8IS0tIFBhY2thZ2UgVmVyc2lvbiAtLT4KKyAgICAgICAgPHRkIGNsYXNzPSJwYWNrYWdlX3ZlcnNpb24iPnslaWYgcGFja2FnZS52ZXJzaW9uJX08YSBocmVmPSJ7JSB1cmwgInBhY2thZ2VfYnVpbHRfZGV0YWlsIiBidWlsZC5wayBwYWNrYWdlLnBrICV9Ij57e3BhY2thZ2UudmVyc2lvbn19LXt7cGFja2FnZS5yZXZpc2lvbn19PC9hPnslZW5kaWYlfTwvdGQ+CisgICAgICAgIDwhLS0gUGFja2FnZSBTaXplIC0tPgorICAgICAgICA8dGQgY2xhc3M9InNpemUgc2l6ZWNvbCI+e3twYWNrYWdlLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvdGQ+CisgICAgICAgIDwhLS0gTGljZW5zZSAtLT4KKyAgICAgICAgPHRkIGNsYXNzPSJsaWNlbnNlIj57e3BhY2thZ2UubGljZW5zZX19PC90ZD4KKworICAgICAgICB7JWlmIHBhY2thZ2UucmVjaXBlJX0KKyAgICAgICAgICAgIDwhLS0gUmVjaXBlIC0tPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfX25hbWUiPjxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayBwYWNrYWdlLnJlY2lwZS5wayAlfSI+e3twYWNrYWdlLnJlY2lwZS5uYW1lfX08L2E+PC90ZD4KKyAgICAgICAgICAgIDwhLS0gUmVjaXBlIFZlcnNpb24gLS0+CisgICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fdmVyc2lvbiI+PGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHBhY2thZ2UucmVjaXBlLnBrICV9Ij57e3BhY2thZ2UucmVjaXBlLnZlcnNpb259fTwvYT48L3RkPgorCisgICAgICAgICAgICA8IS0tIExheWVyIC0tPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIj57e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19PC90ZD4KKyAgICAgICAgICAgIDwhLS0gTGF5ZXIgYnJhbmNoIC0tPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2JyYW5jaCI+e3twYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmJyYW5jaH19PC90ZD4KKyAgICAgICAgICAgIDwhLS0gTGF5ZXIgY29tbWl0IC0tPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19jb21taXQiPgorICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iCisgICAgICAgICAgICAgICAgICAgIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSd1bnN0eWxlZCc+CisgICAgICAgICAgICAgICAgICAgICAgPGxpPnt7cGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5jb21taXR9fTwvbGk+CisgICAgICAgICAgICAgICAgICAgIDwvdWw+Ij4KKyAgICAgICAgICAgICAgICAgICAge3twYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmNvbW1pdHx0cnVuY2F0ZWNoYXJzOjEzfX0KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPCEtLSBMYXllciBkaXJlY3RvcnkgLS0+CisgICAgICAgIHslZWxzZSV9CisgICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbmFtZSI+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX192ZXJzaW9uIj48L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIj48L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2JyYW5jaCI+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0Ij48L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xvY2FsX3BhdGgiPjwvdGQ+CisgICAgICAgIHslZW5kaWYlfQorCisgICAgPC90cj4KKyAgICB7JSBlbmRmb3IgJX0KKworICB7JSBpbmNsdWRlICJiYXNldGFibGVfYm90dG9tLmh0bWwiICV9CisgIHslIGVuZGlmICV9IHsjIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ICN9Cit7JSBlbmRpZiAlfSB7IyBFbXB0eSAjfQorPC9kaXY+Cit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2JydGFyZ2V0cy5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2JydGFyZ2V0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYmQwNTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnJ0YXJnZXRzLmh0bWwKQEAgLTAsMCArMSwyMCBAQAorPHNwYW4gZGF0YS10b2dnbGU9InRvb2x0aXAiCisgICAgeyUgaWYgYnVpbGRyZXF1ZXN0LmJydGFyZ2V0X3NldC5hbGwuY291bnQgPiAxICV9CisgICAgICAgIHRpdGxlPSJUYXJnZXRzOgorICAgICAgICB7JSBmb3IgdGFyZ2V0IGluIGJ1aWxkcmVxdWVzdC5icnRhcmdldF9zZXQuYWxsICV9CisgICAgICAgICAgICB7JSBpZiB0YXJnZXQudGFzayAlfQorICAgICAgICAgICAgICAgIHt7dGFyZ2V0LnRhcmdldH19Ont7dGFyZ2V0LnRhc2t9fQorICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgIHt7dGFyZ2V0LnRhcmdldH19CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JWVuZGZvciV9IgorICAgIHslZW5kaWYlfT4KKyAgICB7JSBpZiBidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbC4wLnRhc2sgJX0KKyAgICAgICAge3tidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbC4wLnRhcmdldH19Ont7YnVpbGRyZXF1ZXN0LmJydGFyZ2V0X3NldC5hbGwuMC50YXNrfX0KKyAgICB7JSBlbHNlICV9CisgICAgICAgICB7e2J1aWxkcmVxdWVzdC5icnRhcmdldF9zZXQuYWxsLjAudGFyZ2V0fX0KKyAgICB7JSBlbmRpZiAlfQorICAgIHslIGlmIGJ1aWxkcmVxdWVzdC5icnRhcmdldF9zZXQuYWxsLmNvdW50ID4gMSAlfQorICAgICAgICAoKyB7e2J1aWxkcmVxdWVzdC5icnRhcmdldF9zZXQuYWxsLmNvdW50fGFkZDoiLTEifX0pCisgICAgeyUgZW5kaWYgJX0KKzwvc3Bhbj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZGRhc2hib2FyZC5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkZGFzaGJvYXJkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFiOGUzOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZGRhc2hib2FyZC5odG1sCkBAIC0wLDAgKzEsMzA3IEBACit7JSBleHRlbmRzICJiYXNlYnVpbGRwYWdlLmh0bWwiICV9Cit7JSBsb2FkIGh1bWFuaXplICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKK3slIGJsb2NrIHBhcmVudGJyZWFkY3J1bWIgJX0KK3t7YnVpbGQuZ2V0X3NvcnRlZF90YXJnZXRfbGlzdC4wLnRhcmdldH19IHslaWYgYnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnQgPiAxJX0oKyB7e2J1aWxkLnRhcmdldF9zZXQuYWxsLmNvdW50fGFkZDoiLTEifX0peyVlbmRpZiV9IHt7YnVpbGQubWFjaGluZX19ICh7e2J1aWxkLmNvbXBsZXRlZF9vbnxkYXRlOiJkL20veSBIOmkifX0pCit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBidWlsZGluZm9tYWluICV9Cis8IS0tIHBhZ2UgdGl0bGUgLS0+Cis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjEwIj4KKyA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgICAgIDxoMT57e2J1aWxkLnRhcmdldF9zZXQuYWxsfGRpY3Rzb3J0OiJ0YXJnZXQifGpvaW46IiwgIn19IHt7YnVpbGQubWFjaGluZX19PC9oMT4KKyA8L2Rpdj4KKzwvZGl2PgorCis8IS0tIGJ1aWxkIHJlc3VsdCBiYXIgLS0+Cis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjEwIHB1bGwtcmlnaHQiPgorICA8ZGl2IGNsYXNzPSJhbGVydCB7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEJX1hbGVydC1zdWNjZXNzeyVlbGlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuRkFJTEVEJX1hbGVydC1lcnJvcnslZWxzZSV9YWxlcnQtaW5mb3slZW5kaWYlfSI+CisgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIGxlYWQiPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9InB1bGwtbGVmdCI+PHN0cm9uZz4KKyAgICAgICAgICAgICAgICB7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEJX1Db21wbGV0ZWR7JWVsaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQlfUZhaWxlZHslZWxzZSV9eyVlbmRpZiV9CisgICAgICAgICAgICAgIDwvc3Ryb25nPiBvbgorICAgICAgICAgICAge3tidWlsZC5jb21wbGV0ZWRfb258ZGF0ZToiZC9tL3kgSDppIn19Cis8L3NwYW4+Cit7JSBpZiAgYnVpbGQud2FybmluZ3MuY291bnQgb3IgYnVpbGQuZXJyb3JzLmNvdW50ICV9CismbmJzcDt3aXRoCit7JSBlbmRpZiAlfQoreyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCBvciBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCAlfQoreyUgaWYgIGJ1aWxkLmVycm9ycy5jb3VudCAlfQorICAgICA8c3BhbiA+IDxpIGNsYXNzPSJpY29uLW1pbnVzLXNpZ24gcmVkIj48L2k+PHN0cm9uZz48YSBocmVmPSIjZXJyb3JzIiBjbGFzcz0iZXJyb3Igc2hvdy1lcnJvcnMiPiB7e2J1aWxkLmVycm9ycy5jb3VudH19IGVycm9ye3tidWlsZC5lcnJvcnMuY291bnR8cGx1cmFsaXplfX08L2E+PC9zdHJvbmc+PC9zcGFuPgoreyUgZW5kaWYgJX0KK3slIGlmICBidWlsZC53YXJuaW5ncy5jb3VudCAlfQoreyUgaWYgIGJ1aWxkLmVycm9ycy5jb3VudCAlfQorICAgIGFuZAoreyUgZW5kaWYgJX0KKyAgICA8c3BhbiA+IDxpIGNsYXNzPSJpY29uLXdhcm5pbmctc2lnbiB5ZWxsb3ciPjwvaT48c3Ryb25nPjxhIGhyZWY9IiN3YXJuaW5ncyIgY2xhc3M9Indhcm5pbmcgc2hvdy13YXJuaW5ncyI+IHt7YnVpbGQud2FybmluZ3MuY291bnR9fSB3YXJuaW5ne3tidWlsZC53YXJuaW5ncy5jb3VudHxwbHVyYWxpemV9fTwvYT48L3N0cm9uZz48L3NwYW4+Cit7JSBlbmRpZiAlfQorICAgICAgICAgICAgPHNwYW4gY2xhc3M9InB1bGwtcmlnaHQiPkJ1aWxkIHRpbWU6IDxhIGhyZWY9InslIHVybCAnYnVpbGR0aW1lJyBidWlsZC5wayAlfSI+e3sgYnVpbGQudGltZXNwZW50X3NlY29uZHN8c2VjdG9obXMgfX08L2E+CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIHslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQlfWJ0bi1zdWNjZXNzeyVlbHNlJX1idG4tZGFuZ2VyeyVlbmRpZiV9IHB1bGwtcmlnaHQgbG9nIiBocmVmPSJ7JSB1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5pZCAiY29va2VybG9nIiBidWlsZC5pZCAlfSI+RG93bmxvYWQgYnVpbGQgbG9nPC9hPgorICAgICAgICAgICAgPC9zcGFuPgorCit7JWVuZGlmJX0KKyAgICA8L2Rpdj4KKyAgICB7JSBpZiBidWlsZC50b2FzdGVyX2V4Y2VwdGlvbnMuY291bnQgPiAwICV9CisgICAgPGRpdiBjbGFzcz0icm93Ij4KKyAgICAgICAgPHNtYWxsIGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKyAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBnZXQtaGVscC1ibHVlIiB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJUb2FzdGVyIGV4Y2VwdGlvbnMgZG8gbm90IGFmZmVjdCB5b3VyIGJ1aWxkOiBvbmx5IHRoZSBvcGVyYXRpb24gb2YgVG9hc3RlciI+PC9pPgorICAgICAgICA8YSBjbGFzcz0ic2hvdy1leGNlcHRpb25zIiBocmVmPSIjZXhjZXB0aW9ucyI+VG9hc3RlciB0aHJldyB7e2J1aWxkLnRvYXN0ZXJfZXhjZXB0aW9ucy5jb3VudH19IGV4Y2VwdGlvbnt7YnVpbGQudG9hc3Rlcl9leGNlcHRpb25zLmNvdW50fHBsdXJhbGl6ZX19PC9hPgorICAgIDwvc21hbGw+CisgICAgPC9kaXY+CisgICAgeyUgZW5kaWYgJX0KKyAgPC9kaXY+Cis8L2Rpdj4KKworeyUgaWYgYnVpbGQuZXJyb3JzLmNvdW50ICV9Cis8ZGl2IGNsYXNzPSJhY2NvcmRpb24gc3BhbjEwIHB1bGwtcmlnaHQiIGlkPSJlcnJvcnMiPgorICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tZ3JvdXAiPgorICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1oZWFkaW5nIj4KKyAgICAgICAgICAgIDxhIGNsYXNzPSJhY2NvcmRpb24tdG9nZ2xlIGVycm9yIHRvZ2dsZS1lcnJvcnMiPgorICAgICAgICAgPGgyIGlkPSJlcnJvci10b2dnbGUiPgorICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1taW51cy1zaWduIj48L2k+CisgICAgICAgICAgIHt7YnVpbGQuZXJyb3JzLmNvdW50fX0gZXJyb3J7e2J1aWxkLmVycm9ycy5jb3VudHxwbHVyYWxpemV9fQorICAgICAgICAgPC9oMj4KKyAgICAgIDwvYT4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tYm9keSBjb2xsYXBzZSBpbiIgaWQ9ImNvbGxhcHNlLWVycm9ycyI+CisgICAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24taW5uZXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuMTAiPgorICAgICAgICAgIHslIGZvciBlcnJvciBpbiBsb2dtZXNzYWdlcyAlfXslIGlmIGVycm9yLmxldmVsID09IDIgJX0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWVycm9yIj4KKyAgICAgICAgICAgICAgPHByZT57e2Vycm9yLm1lc3NhZ2V9fTwvcHJlPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+Cis8L2Rpdj4KK3slIGVuZGlmICV9CisKK3slaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQlfQorPCEtLSBidWlsdCBpbWFnZXMgLS0+Cit7JSBpZiBoYXNJbWFnZXMgJX0KKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuMTAgcHVsbC1yaWdodCI+CisgICAgPGgyPkltYWdlczwvaDI+CisgICAgeyUgZm9yIHRhcmdldCBpbiB0YXJnZXRzICV9CisgICAgICAgIHslIGlmIHRhcmdldC50YXJnZXQuaXNfaW1hZ2UgJX0KKyAgICA8ZGl2IGNsYXNzPSJ3ZWxsIGRhc2hib2FyZC1zZWN0aW9uIj4KKyAgICAgICAgPGgzPjxhIGhyZWY9InslIHVybCAndGFyZ2V0JyBidWlsZC5wayB0YXJnZXQudGFyZ2V0LnBrICV9Ij57e3RhcmdldC50YXJnZXR9fTwvYT4KKyAgICAgICAgICAgICAgICA8L2gzPgorICAgICAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgorICAgICAgICAgICAgPGR0PlBhY2thZ2VzIGluY2x1ZGVkPC9kdD4KKyAgICAgICAgICAgIDxkZD48YSBocmVmPSJ7JSB1cmwgJ3RhcmdldCcgYnVpbGQucGsgdGFyZ2V0LnRhcmdldC5wayAlfSI+e3t0YXJnZXQubnBrZ319PC9hPjwvZGQ+CisgICAgICAgICAgICA8ZHQ+VG90YWwgcGFja2FnZSBzaXplPC9kdD4KKyAgICAgICAgICAgIDxkZD57e3RhcmdldC5wa2dzenxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19PC9kZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIHRhcmdldC50YXJnZXRIYXNOb0ltYWdlcyAlfQorICAgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyBzcGFuNyI+CisgICAgICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+VGhpcyBidWlsZCBkaWQgbm90IGNyZWF0ZSBhbnkgaW1hZ2UgZmlsZXM8L2I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBwcm9iYWJseSBiZWNhdXNlIHZhbGlkIGltYWdlIGFuZCBsaWNlbnNlIG1hbmlmZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyBmcm9tIGEgcHJldmlvdXMgYnVpbGQgYWxyZWFkeSBleGlzdCBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4uLi4vcG9reS9idWlsZC90bXAvZGVwbG95PC9jb2RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LiBZb3UgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHNvIDxhIGhyZWY9InslIHVybCAndGFyZ2V0cGtnJyBidWlsZC5wayB0YXJnZXQudGFyZ2V0LnBrICV9Ij52aWV3IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWNlbnNlIG1hbmlmZXN0IGluZm9ybWF0aW9uPC9hPiBpbiBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBsb2NhdGlvbiBpbiBkaXNrIG9mIHRoZSBsaWNlbnNlIG1hbmlmZXN0LCBhIGRvY3VtZW50IGxpc3RpbmcgYWxsIHBhY2thZ2VzIGluc3RhbGxlZCBpbiB5b3VyIGltYWdlIGFuZCB0aGVpciBsaWNlbnNlcyI+PC9pPgorCisgICAgICAgICAgICAgICAgTGljZW5zZSBtYW5pZmVzdAorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3RhcmdldHBrZycgYnVpbGQucGsgdGFyZ2V0LnRhcmdldC5wayAlfSI+VmlldyBpbiBUb2FzdGVyPC9hPiB8CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQucGsgJ2xpY2Vuc2VtYW5pZmVzdCcgdGFyZ2V0LnRhcmdldC5wayAlfSI+RG93bmxvYWQ8L2E+PC9kZD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iSW1hZ2UgZmlsZXMgYXJlIHN0b3JlZCBpbiA8Y29kZT4vYnVpbGQvdG1wL2RlcGxveS9pbWFnZXMvPC9jb2RlPiI+PC9pPgorICAgICAgICAgICAgICAgIEltYWdlIGZpbGVzCisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDx1bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBmb3IgaSBpbiB0YXJnZXQuaW1hZ2VGaWxlcyAlfQorICAgICAgICAgICAgeyUgaWYgYnVpbGQucHJvamVjdCAlfQorICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQucGsgJ2ltYWdlZmlsZScgaS5pZCAlfSI+e3tpLnBhdGh9fTwvYT4KKyAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgICAgPGxpPnt7aS5wYXRofX0KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgICAgICh7e2kuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19KTwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgIDwvZGw+CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgIDwvZGl2PgorICAgICAgICB7JSBlbmRpZiAlfQorICAgIHslIGVuZGZvciAlfQorPC9kaXY+Cit7JSBlbmRpZiAlfQorCit7JWVsc2UlfQorPCEtLSBlcnJvciBkdW1wIC0tPgoreyVlbmRpZiV9CisKKzwhLS0gb3RoZXIgYXJ0aWZhY3RzIC0tPgoreyUgaWYgYnVpbGQuYnVpbGRhcnRpZmFjdF9zZXQuYWxsLmNvdW50ID4gMCAlfQorPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMCBwdWxsLXJpZ2h0Ij4KKzxoMj5PdGhlciBhcnRpZmFjdHM8L2gyPgorCisgICAgPGRpdiBjbGFzcz0id2VsbCBkYXNoYm9hcmQtc2VjdGlvbiI+CisgICAgICAgIDxkbCBjbGFzcz0iZGwtaG9yaXpvbnRhbCI+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkJ1aWxkIGFydGlmYWN0cyBkaXNjb3ZlcmVkIGluIDxpPnRtcC9kZXBsb3kvaW1hZ2VzPC9pPi4gVXN1YWxseSBrZXJuZWwgaW1hZ2VzIGFuZCBrZXJuZWwgbW9kdWxlcy4iPjwvaT4KKyAgICAgICAgICAgICAgICBPdGhlciBhcnRpZmFjdHM8L2R0PgorICAgICAgICAgICAgPGRkPjxkaXY+CisgICAgICAgICAgICAgIHslIGZvciBiYSBpbiBidWlsZC5idWlsZGFydGlmYWN0X3NldC5hbGx8ZGljdHNvcnQ6ImZpbGVfbmFtZSIgJX0KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLmlkICdidWlsZGFydGlmYWN0JyBiYS5pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgIHt7YmEuZ2V0X2xvY2FsX2ZpbGVfbmFtZX19CisgICAgICAgICAgICAgICAgPC9hPgorCisgICAgICAgICAgICAgICAgKHt7YmEuZmlsZV9zaXplfGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX0pIDxici8+CisgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kZD4KKwk8L2RsPgorICAgIDwvZGl2PgorCis8L2Rpdj4KK3slIGVuZGlmICV9Cis8IS0tIGJ1aWxkIHN1bW1hcnkgLS0+Cis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjEwIHB1bGwtcmlnaHQiPgorPGgyPkJ1aWxkIHN1bW1hcnk8L2gyPgorICAgIDxkaXYgY2xhc3M9IndlbGwgc3BhbjQgZGFzaGJvYXJkLXNlY3Rpb24iIHN0eWxlPSJtYXJnaW4tbGVmdDowcHg7Ij4KKyAgICAgICAgPGg0PjxhIGhyZWY9InsldXJsICdjb25maWd1cmF0aW9uJyBidWlsZC5wayV9Ij5Db25maWd1cmF0aW9uPC9hPjwvaDQ+CisgICAgICAgICAgICA8ZGw+CisgICAgICAgIDxkdD5NYWNoaW5lPC9kdD48ZGQ+e3tidWlsZC5tYWNoaW5lfX08L2RkPgorICAgICAgICA8ZHQ+RGlzdHJvPC9kdD48ZGQ+e3tidWlsZC5kaXN0cm99fTwvZGQ+CisgICAgICAgIDxkdD5MYXllcnM8L2R0PnslIGZvciBpIGluIGJ1aWxkLmxheWVyX3ZlcnNpb25fYnVpbGQuYWxsfGRpY3Rzb3J0OiJsYXllci5uYW1lIiAlfTxkZD57e2kubGF5ZXIubmFtZX19PC9kZD57JWVuZGZvciV9CisgICAgICAgICAgICA8L2RsPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9IndlbGwgc3BhbjQgZGFzaGJvYXJkLXNlY3Rpb24iPgorICAgICAgICA8aDQ+PGEgaHJlZj0ieyV1cmwgJ3Rhc2tzJyBidWlsZC5wayV9Ij5UYXNrczwvYT48L2g0PgorICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgeyUgcXVlcnkgYnVpbGQudGFza19idWlsZCBvdXRjb21lPTQgb3JkZXJfX2d0PTAgYXMgZXhlY3Rhc2slfQorICAgICAgICAgICAgeyUgaWYgZXhlY3Rhc2suY291bnQgPiAwICV9CisgICAgICAgICAgICAgICAgPGR0PkZhaWxlZCB0YXNrczwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIHslIGlmIGV4ZWN0YXNrLmNvdW50ID09IDEgJX0KKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImVycm9yIiBocmVmPSJ7JSB1cmwgInRhc2siIGJ1aWxkLmlkIGV4ZWN0YXNrLjAuaWQgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAge3tleGVjdGFzay4wLnJlY2lwZS5uYW1lfX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YXNrLW5hbWUiPnt7ZXhlY3Rhc2suMC50YXNrX25hbWV9fTwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPC9hPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5pZCAidGFza2xvZ2ZpbGUiIGV4ZWN0YXNrLjAuaWQgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLWRvd25sb2FkLWFsdCIgdGl0bGU9IiIgZGF0YS1vcmlnaW5hbC10aXRsZT0iRG93bmxvYWQgdGFzayBsb2cgZmlsZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorCisgICAgICAgICAgICAgICAgeyUgZWxpZiBleGVjdGFzay5jb3VudCA+IDElfQorICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iZXJyb3IiIGhyZWY9InslIHVybCAidGFza3MiIGJ1aWxkLmlkICV9P2ZpbHRlcj1vdXRjb21lJTNBNCI+e3tleGVjdGFzay5jb3VudH19PC9hPgorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDxkdD5Ub3RhbCBudW1iZXIgb2YgdGFza3M8L2R0PjxkZD48YSBocmVmPSJ7JSB1cmwgJ3Rhc2tzJyBidWlsZC5wayAlfSI+eyUgcXVlcnkgYnVpbGQudGFza19idWlsZCBvcmRlcl9fZ3Q9MCBhcyBhbGx0YXNrcyAlfXt7YWxsdGFza3MuY291bnR9fTwvYT48L2RkPgorICAgICAgICA8ZHQ+CisgICAgICAgICAgICBUYXNrcyBleGVjdXRlZAorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IidFeGVjdXRlZCcgdGFza3MgYXJlIHRob3NlIHRoYXQgbmVlZCB0byBiZSBydW4gaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIHRhc2sgb3V0cHV0Ij48L2k+CisgICAgICAgIDwvZHQ+CisgICAgICAgIDxkZD48YSBocmVmPSJ7JSB1cmwgJ3Rhc2tzJyBidWlsZC5wayAlfT9maWx0ZXI9dGFza19leGVjdXRlZCUzQTEmYW1wO2NvdW50PTI1JmFtcDtzZWFyY2g9JmFtcDtwYWdlPTEmYW1wO29yZGVyYnk9b3JkZXIlM0ElMkIiPnslIHF1ZXJ5IGJ1aWxkLnRhc2tfYnVpbGQgdGFza19leGVjdXRlZD0xIG9yZGVyX19ndD0wIGFzIGV4ZWN0YXNrJX17e2V4ZWN0YXNrLmNvdW50fX08L2E+PC9kZD4KKyAgICAgICAgPGR0PgorICAgICAgICAgICAgVGFza3Mgbm90IGV4ZWN1dGVkCisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iJ05vdCBleGVjdXRlZCcgdGFza3MgZG9uJ3QgbmVlZCB0byBydW4gYmVjYXVzZSB0aGVpciBvdXRjb21lIGlzIHByb3ZpZGVkIGJ5IGFub3RoZXIgdGFzayI+PC9pPgorICAgICAgICA8L2R0PgorICAgICAgICA8ZGQ+PGEgaHJlZj0ieyUgdXJsICd0YXNrcycgYnVpbGQucGsgJX0/ZmlsdGVyPXRhc2tfZXhlY3V0ZWQlM0EwJmFtcDtjb3VudD0yNSZhbXA7c2VhcmNoPSZhbXA7cGFnZT0xJmFtcDtvcmRlcmJ5PW9yZGVyJTNBJTJCIj57JSBxdWVyeSBidWlsZC50YXNrX2J1aWxkIHRhc2tfZXhlY3V0ZWQ9MCBvcmRlcl9fZ3Q9MCBhcyBub2V4ZWN0YXNrJX17e25vZXhlY3Rhc2suY291bnR9fTwvYT48L2RkPgorICAgICAgICA8ZHQ+CisgICAgICAgICAgICBSZXVzZQorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBwZXJjZW50YWdlIG9mICdub3QgZXhlY3V0ZWQnIHRhc2tzIG92ZXIgdGhlIHRvdGFsIG51bWJlciBvZiB0YXNrcywgd2hpY2ggaXMgYSBtZWFzdXJlIG9mIHRoZSBlZmZpY2llbmN5IG9mIHlvdXIgYnVpbGQiPjwvaT4KKyAgICAgICAgPC9kdD4KKyAgICAgICAgPGRkPgoreyUgcXVlcnkgYnVpbGQudGFza19idWlsZCBvcmRlcl9fZ3Q9MCBhcyB0ZXhlYyAlfQoreyUgaWYgbm9leGVjdGFzay5jb3VudHxtdWx0aXBseToxMDB8ZGl2aWRlOnRleGVjLmNvdW50IDwgMCAlfQorMAoreyUgZWxzZSAlfQore3tub2V4ZWN0YXNrLmNvdW50fG11bHRpcGx5OjEwMHxkaXZpZGU6dGV4ZWMuY291bnR9fQoreyUgZW5kaWYgJX0KKyUKKyAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIDwvZGw+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0id2VsbCBzcGFuNCBkYXNoYm9hcmQtc2VjdGlvbiI+CisgICAgICAgIDxoND48YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZXMnIGJ1aWxkLnBrICV9Ij5SZWNpcGVzPC9hPiAmIDxhIGhyZWY9InslIHVybCAncGFja2FnZXMnIGJ1aWxkLnBrICV9Ij5QYWNrYWdlczwvYT48L2g0PgorICAgICAgICAgICAgPGRsPgorICAgICAgICA8ZHQ+UmVjaXBlcyBidWlsdDwvZHQ+PGRkPjxhIGhyZWY9InslIHVybCAncmVjaXBlcycgYnVpbGQucGsgJX0iPnt7cmVjaXBlY291bnR9fTwvYT48L2RkPgorICAgICAgICA8ZHQ+UGFja2FnZXMgYnVpbHQ8L2R0PjxkZD48YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VzJyBidWlsZC5wayAlfSI+e3twYWNrYWdlY291bnR9fTwvYT48L2RkPgorICAgICAgICAgICAgPC9kbD4KKyAgICA8L2Rpdj4KKzwvZGl2PgorCit7JSBpZiBidWlsZC53YXJuaW5ncy5jb3VudCAlfQorPGRpdiBjbGFzcz0iYWNjb3JkaW9uIHNwYW4xMCBwdWxsLXJpZ2h0IiBpZD0id2FybmluZ3MiPgorICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tZ3JvdXAiPgorICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1oZWFkaW5nIj4KKyAgICAgIDxhIGNsYXNzPSJhY2NvcmRpb24tdG9nZ2xlIHdhcm5pbmcgdG9nZ2xlLXdhcm5pbmdzIj4KKyAgICAgICAgPGgyIGlkPSJ3YXJuaW5nLXRvZ2dsZSI+CisgICAgICAgICAgPGkgY2xhc3M9Imljb24td2FybmluZy1zaWduIj48L2k+CisgICAgICAgICAge3tidWlsZC53YXJuaW5ncy5jb3VudH19IHdhcm5pbmd7e2J1aWxkLndhcm5pbmdzLmNvdW50fHBsdXJhbGl6ZX19CisgICAgICAgIDwvaDI+CisgICAgICA8L2E+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWJvZHkgY29sbGFwc2UiIGlkPSJjb2xsYXBzZS13YXJuaW5ncyI+CisgICAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24taW5uZXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuMTAiPgorICAgICAgICAgIHslIGZvciB3YXJuaW5nIGluIGxvZ21lc3NhZ2VzICV9eyUgaWYgd2FybmluZy5sZXZlbCA9PSAxICV9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC13YXJuaW5nIj4KKyAgICAgICAgICAgICAgPHByZT57e3dhcm5pbmcubWVzc2FnZX19PC9wcmU+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICB7JSBlbmRpZiAlfXslIGVuZGZvciAlfQorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICA8L2Rpdj4KKzwvZGl2PgoreyUgZW5kaWYgJX0KKworCit7JSBpZiBidWlsZC50b2FzdGVyX2V4Y2VwdGlvbnMuY291bnQgPiAwICV9Cis8ZGl2IGNsYXNzPSJhY2NvcmRpb24gc3BhbjEwIHB1bGwtcmlnaHQiIGlkPSJleGNlcHRpb25zIj4KKyAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWdyb3VwIj4KKyAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24taGVhZGluZyI+CisgICAgICA8YSBjbGFzcz0iYWNjb3JkaW9uLXRvZ2dsZSBleGNlcHRpb24gdG9nZ2xlLWV4Y2VwdGlvbnMiPgorICAgICAgICA8aDIgaWQ9ImV4Y2VwdGlvbi10b2dnbGUiPgorICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXdhcm5pbmctc2lnbiI+PC9pPgorICAgICAgICAgIHt7YnVpbGQudG9hc3Rlcl9leGNlcHRpb25zLmNvdW50fX0gVG9hc3RlciBleGNlcHRpb257e2J1aWxkLnRvYXN0ZXJfZXhjZXB0aW9ucy5jb3VudHxwbHVyYWxpemV9fQorICAgICAgICA8L2gyPgorICAgICAgPC9hPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1ib2R5IGNvbGxhcHNlIiBpZD0iY29sbGFwc2UtZXhjZXB0aW9ucyI+CisgICAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24taW5uZXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuMTAiPgorICAgICAgICAgIHslIGZvciBleGNlcHRpb24gaW4gYnVpbGQudG9hc3Rlcl9leGNlcHRpb25zICV9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1leGNlcHRpb24iPgorICAgICAgICAgICAgICA8cHJlPnt7ZXhjZXB0aW9uLm1lc3NhZ2V9fTwvcHJlPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgIDwvZGl2PgorPC9kaXY+Cit7JSBlbmRpZiAlfQorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CisgICAgICAgIC8vc2hvdyB3YXJuaW5ncyBzZWN0aW9uIHdoZW4gcmVxdWVzdGVkIGZyb20gdGhlIHByZXZpb3VzIHBhZ2UKKyAgICAgICAgaWYgKGxvY2F0aW9uLmhyZWYuc2VhcmNoKCcjd2FybmluZ3MnKSA+IC0xKSB7CisgICAgICAgICAgICAkKCcjY29sbGFwc2Utd2FybmluZ3MnKS5hZGRDbGFzcygnaW4nKTsKKyAgICAgICAgfQorICAgIH0pOworPC9zY3JpcHQ+CisKK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGRyZXF1ZXN0ZGV0YWlscy5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkcmVxdWVzdGRldGFpbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGZhMWZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkcmVxdWVzdGRldGFpbHMuaHRtbApAQCAtMCwwICsxLDY0IEBACit7JSBleHRlbmRzICJiYXNlcHJvamVjdHBhZ2UuaHRtbCIgJX0KKworeyUgbG9hZCBzdGF0aWMgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KKworCit7JSBibG9jayBwcm9qZWN0aW5mb21haW4gJX0KKyAgICAgIDwhLS0gYmVnaW4gY29udGVudCAtLT4KKworICAgICAgICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisKKyAgICAgICAgICAgIDwhLS0gZW5kIGxlZnQgc2lkZWJhciBjb250YWluZXIgLS0+CisgICAgICAgICAgICA8IS0tIEJlZ2luIHJpZ2h0IGNvbnRhaW5lciAtLT4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYW4xMCI+CisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgICAgICAgICAgICA8aDE+CisgPHNwYW4gZGF0YS10b2dnbGU9InRvb2x0aXAiIHslaWYgYnVpbGRyZXF1ZXN0LmJydGFyZ2V0X3NldC5hbGwuY291bnQgPiAxJX10aXRsZT0iVGFyZ2V0czogeyVmb3IgdGFyZ2V0IGluIGJ1aWxkcmVxdWVzdC5icnRhcmdldF9zZXQuYWxsJX17e3RhcmdldC50YXJnZXR9fSB7JWVuZGZvciV9InslZW5kaWYlfT57e2J1aWxkcmVxdWVzdC5icnRhcmdldF9zZXQuYWxsLjAudGFyZ2V0fX0geyVpZiBidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbC5jb3VudCA+IDElfSgrIHt7YnVpbGRyZXF1ZXN0LmJydGFyZ2V0X3NldC5hbGwuY291bnR8YWRkOiItMSJ9fSl7JWVuZGlmJX0ge3tidWlsZHJlcXVlc3QuZ2V0X21hY2hpbmV9fSA8L3NwYW4+CisKKyAgICAgICAgPC9oMT4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWVycm9yIj4KKyAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibGVhZCI+CisgICAgICAgICAgICAgICAgICA8c3Ryb25nPkZhaWxlZDwvc3Ryb25nPgorICAgICAgICAgICAgICAgICAgICBvbiB7eyBidWlsZHJlcXVlc3QudXBkYXRlZHxkYXRlOidkL20veSBIOmknIH19CisgICAgICAgICAgICB3aXRoCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLW1pbnVzLXNpZ24gZXJyb3IiIHN0eWxlPSJtYXJnaW4tbGVmdDo2cHg7Ij48L2k+CisgICAgICAgICAgICAgICAgICA8c3Ryb25nPjxhIGNsYXNzPSJlcnJvciBhY2NvcmRpb24tdG9nZ2xlIHRvZ2dsZS1lcnJvcnMiIGhyZWY9IiNlcnJvcnMiPgorICAgICAgICAgICAgICAgICAgICAgICAge3tidWlsZHJlcXVlc3QuYnJlcnJvcl9zZXQuYWxsLmNvdW50fX0gZXJyb3J7e2J1aWxkcmVxdWVzdC5icmVycm9yX3NldC5hbGwuY291bnR8cGx1cmFsaXplfX0KKyAgICAgICAgICAgICAgPC9hPjwvc3Ryb25nPgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InB1bGwtcmlnaHQiPkJ1aWxkIHRpbWU6IHt7YnVpbGRyZXF1ZXN0LmdldF9kdXJhdGlvbnxzZWN0b2htc319PC9zcGFuPgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uIiBpZD0iZXJyb3JzIj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tZ3JvdXAiPgorICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWhlYWRpbmciPgorICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYWNjb3JkaW9uLXRvZ2dsZSBlcnJvciB0b2dnbGUtZXJyb3JzIj4KKyAgICAgICAgICAgICAgICAgICAgICA8aDI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1taW51cy1zaWduIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICB7e2J1aWxkcmVxdWVzdC5icmVycm9yX3NldC5hbGwuY291bnR9fSBlcnJvcnt7YnVpbGRyZXF1ZXN0LmJyZXJyb3Jfc2V0LmFsbC5jb3VudHxwbHVyYWxpemV9fQorICAgICAgICAgICAgICAgICAgICAgIDwvaDI+CisgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWJvZHkgY29sbGFwc2UgaW4iIGlkPSJjb2xsYXBzZS1lcnJvcnMiPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24taW5uZXIiPgorICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYW4xMCI+CisgICAgICAgICAgICAgICB7JSBmb3IgZXJyb3IgaW4gYnVpbGRyZXF1ZXN0LmJyZXJyb3Jfc2V0LmFsbCAlfQorICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZXJyb3IiPgorICAgICAgICAgICAgICAgICAgICAgICAgICBFUlJPUjogPGRpdiBjbGFzcz0iYWlyIHdlbGwiPjxwcmU+e3tlcnJvci5lcnJtc2d9fTwvcHJlPjwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4gPCEtLSBlbmQgb2Ygcm93LWZsdWlkIC0tPgorCisKK3slZW5kYmxvY2slfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkcy5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZDBjNjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGRzLmh0bWwKQEAgLTAsMCArMSwxMDkgQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KKworeyUgbG9hZCBzdGF0aWMgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KKworeyUgYmxvY2sgZXh0cmFoZWFkY29udGVudCAlfQorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9qcXVlcnktdWkubWluLmNzcyIgdHlwZT0ndGV4dC9jc3MnPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9qcXVlcnktdWkuc3RydWN0dXJlLm1pbi5jc3MiIHR5cGU9J3RleHQvY3NzJz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLnRoZW1lLm1pbi5jc3MiIHR5cGU9J3RleHQvY3NzJz4KKzxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL2pxdWVyeS11aS5taW4uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvZmlsdGVyc25pcHBldC5qcyI+PC9zY3JpcHQ+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBwYWdlY29udGVudCAlfQorCit7JSBpZiBsYXN0X2RhdGVfZnJvbSBhbmQgbGFzdF9kYXRlX3RvICV9Cis8c2NyaXB0PgorICAgIC8vIGluaXRpYWxpemUgdGhlIGRhdGUgcmFuZ2UgY29udHJvbHMKKyAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CisgICAgICAgIGRhdGVfaW5pdCgnc3RhcnRlZF9vbicsJ3t7bGFzdF9kYXRlX2Zyb219fScsJ3t7bGFzdF9kYXRlX3RvfX0nLCd7e2RhdGVNaW5fc3RhcnRlZF9vbn19Jywne3tkYXRlTWF4X3N0YXJ0ZWRfb259fScsJ3t7ZGF0ZXJhbmdlX3NlbGVjdGVkfX0nKTsKKyAgICAgICAgZGF0ZV9pbml0KCdjb21wbGV0ZWRfb24nLCd7e2xhc3RfZGF0ZV9mcm9tfX0nLCd7e2xhc3RfZGF0ZV90b319Jywne3tkYXRlTWluX2NvbXBsZXRlZF9vbn19Jywne3tkYXRlTWF4X2NvbXBsZXRlZF9vbn19Jywne3tkYXRlcmFuZ2Vfc2VsZWN0ZWR9fScpOworICAgIH0pOworPC9zY3JpcHQ+Cit7JWVuZGlmJX0geyMgbGFzdF9kYXRlX2Zyb20gYW5kIGxhc3RfZGF0ZV90byAjfQorCis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorCisgIHslIGluY2x1ZGUgIm1yYl9zZWN0aW9uLmh0bWwiICV9CisKKworICB7JSBpZiAxICV9CisgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIHRvcC1haXIiPgorICAgICA8aDE+CisgICAgICB7JSBpZiByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID4gMCBvciByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID4gMCAlfQorICAgICAgICAgIHt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR9fSBidWlsZHt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR8cGx1cmFsaXplfX0gZm91bmQKKyAgICAgIHslZWxpZiByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgICAgICAgICAgTm8gYnVpbGRzIGZvdW5kCisgICAgICB7JWVsc2UlfQorICAgICAgICAgIEFsbCBidWlsZHMKKyAgICAgIHslZW5kaWYlfQorICAgICA8L2gxPgorICA8L2Rpdj4KKworICB7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KKyAgICAgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIiBpZD0ic2VhcmNoZm9ybSI+CisgICAgICAgICAgICA8aW5wdXQgaWQ9InNlYXJjaCIgbmFtZT0ic2VhcmNoIiBjbGFzcz0iaW5wdXQteHhsYXJnZSIgdHlwZT0idGV4dCIgdmFsdWU9IgorICAgICAgICAgICAgeyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9CisgICAgICAgICAgICAgICAge3tyZXF1ZXN0LkdFVC5zZWFyY2h9fQorICAgICAgICB7JSBlbmRpZiAlfSIvPgorICAgICAgICAgICAgeyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9PGEgaHJlZj0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIiBjbGFzcz0iYWRkLW9uIGJ0biIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT48L2E+eyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIj5TZWFyY2g8L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayIgb25jbGljaz0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIj5TaG93IGFsbCBidWlsZHM8L2J1dHRvbj4KKyAgICAgICAgPC9mb3JtPgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisKKworICB7JSBlbHNlICV9CisgIHslIGluY2x1ZGUgImJhc2V0YWJsZV90b3AuaHRtbCIgJX0KKyAgICAgICAgPCEtLSBUYWJsZSBkYXRhIHJvd3M7IHRoZSBvcmRlciBuZWVkcyB0byBtYXRjaCB0aGUgb3JkZXIgb2YgInRhYmxlY29scyIgZGVmaW5pdGlvbnM7IGFuZCB0aGUgPHRkIGNsYXNzIHZhbHVlIG5lZWRzIHRvIG1hdGNoIHRoZSB0YWJsZWNvbHMgY2xjbGFzcyB2YWx1ZSBmb3Igc2hvdy9oaWRlIGJ1dHRvbnMgdG8gd29yayAtLT4KKyAgICAgICAgeyUgZm9yIGJ1aWxkIGluIG9iamVjdHMgJX0KKyAgICAgICAgPHRyIGNsYXNzPSJkYXRhIj4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0ib3V0Y29tZSI+CisgICAgICAgIDxhIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkICV9Ij57JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEJX08aSBjbGFzcz0iaWNvbi1vay1zaWduIHN1Y2Nlc3MiPjwvaT57JWVsaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQlfTxpIGNsYXNzPSJpY29uLW1pbnVzLXNpZ24gZXJyb3IiPjwvaT57JWVsc2UlfXslZW5kaWYlfTwvYT4gJm5ic3A7CisgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9InRhcmdldCI+eyUgZm9yIHQgaW4gYnVpbGQudGFyZ2V0X3NldC5hbGwgJX0gPGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0iPiB7e3QudGFyZ2V0fX0gPC9hPiA8YnIgLz57JSBlbmRmb3IgJX08L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJtYWNoaW5lIj48YSBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSI+e3tidWlsZC5tYWNoaW5lfX08L2E+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0ic3RhcnRlZF9vbiI+PGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0iPnt7YnVpbGQuc3RhcnRlZF9vbnxkYXRlOiJkL20veSBIOmkifX08L2E+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29tcGxldGVkX29uIj48YSBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSI+e3tidWlsZC5jb21wbGV0ZWRfb258ZGF0ZToiZC9tL3kgSDppIn19PC9hPjwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9ImZhaWxlZF90YXNrcyBlcnJvciI+CisgICAgICAgICAgICAgICAgeyUgcXVlcnkgYnVpbGQudGFza19idWlsZCBvdXRjb21lPTQgb3JkZXJfX2d0PTAgYXMgZXhlY3Rhc2slfQorICAgICAgICAgICAgICAgICAgICB7JSBpZiBleGVjdGFzay5jb3VudCA9PSAxICV9CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgInRhc2siIGJ1aWxkLmlkIGV4ZWN0YXNrLjAuaWQgJX0iPnt7ZXhlY3Rhc2suMC5yZWNpcGUubmFtZX19Lnt7ZXhlY3Rhc2suMC50YXNrX25hbWV9fTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLmlkICJ0YXNrbG9nZmlsZSIgZXhlY3Rhc2suMC5pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tZG93bmxvYWQtYWx0IiB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJEb3dubG9hZCB0YXNrIGxvZyBmaWxlIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgIHslIGVsaWYgZXhlY3Rhc2suY291bnQgPiAxJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAidGFza3MiIGJ1aWxkLmlkICV9P2ZpbHRlcj1vdXRjb21lJTNBNCI+e3tleGVjdGFzay5jb3VudH19IHRhc2t7e2V4ZWN0YXNrLmNvdW50fHBsdXJhbGl6ZX19PC9hPgorICAgICAgICAgICAgICAgICAgICB7JWVuZGlmJX0KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9ImVycm9ycy5jb3VudCBlcnJvcnNfbm8iPgorICAgICAgICAgICAgICAgIHslIGlmICBidWlsZC5lcnJvcnMuY291bnQgJX0KKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImVycm9ycy5jb3VudCBlcnJvciIgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0jZXJyb3JzIj57e2J1aWxkLmVycm9ycy5jb3VudH19IGVycm9ye3tidWlsZC5lcnJvcnMuY291bnR8cGx1cmFsaXplfX08L2E+CisgICAgICAgICAgICAgICAgeyVlbmRpZiV9CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJ3YXJuaW5ncy5jb3VudCB3YXJuaW5nc19ubyI+eyUgaWYgIGJ1aWxkLndhcm5pbmdzLmNvdW50ICV9PGEgY2xhc3M9Indhcm5pbmdzLmNvdW50IHdhcm5pbmciIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkICV9I3dhcm5pbmdzIj57e2J1aWxkLndhcm5pbmdzLmNvdW50fX0gd2FybmluZ3t7YnVpbGQud2FybmluZ3MuY291bnR8cGx1cmFsaXplfX08L2E+eyVlbmRpZiV9PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0idGltZSI+PGEgaHJlZj0ieyUgdXJsICJidWlsZHRpbWUiIGJ1aWxkLmlkICV9Ij57e2J1aWxkLnRpbWVzcGVudF9zZWNvbmRzfHNlY3RvaG1zfX08L2E+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0ib3V0cHV0Ij4KKyAgICAgICAgICAgICAgeyUgaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQgJX0KKyAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCV9I2ltYWdlcyI+e3tmc3R5cGVzfGdldF9kaWN0X3ZhbHVlOmJ1aWxkLmlkfX08L2E+CisgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L3RkPgorICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0JyBidWlsZC5wcm9qZWN0LmlkICV9Ij57e2J1aWxkLnByb2plY3QubmFtZX19PC9hPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgPC90cj4KKworICAgICAgICB7JSBlbmRmb3IgJX0KKworCisgIHslIGluY2x1ZGUgImJhc2V0YWJsZV9ib3R0b20uaHRtbCIgJX0KKyAgeyUgZW5kaWYgJX0geyMgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgI30KK3slIGVuZGlmICV9IHsjIGVtcHR5ICN9Cis8L2Rpdj48IS0tIGVuZCByb3ctZmx1aWQtLT4KKworeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZHRpbWUuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZHRpbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTg0YWU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkdGltZS5odG1sCkBAIC0wLDAgKzEsNCBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQoreyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Cis8bGk+QnVpbGQgVGltZTwvbGk+Cit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2NvbmZpZ3VyYXRpb24uaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9jb25maWd1cmF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U0ODk5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9jb25maWd1cmF0aW9uLmh0bWwKQEAgLTAsMCArMSw3MSBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKzxsaT5Db25maWd1cmF0aW9uPC9saT4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIG5hdi1jb25maWd1cmF0aW9uICV9CisgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSJ7JSB1cmwgJ2NvbmZpZ3VyYXRpb24nIGJ1aWxkLnBrICV9Ij5Db25maWd1cmF0aW9uPC9hPjwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBidWlsZGluZm9tYWluICV9Cis8IS0tIHBhZ2UgdGl0bGUgLS0+Cis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjEwIj4KKyA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgICAgIDxoMT5Db25maWd1cmF0aW9uPC9oMT4KKyA8L2Rpdj4KKzwvZGl2PgorCis8IS0tIGNvbmZpZ3VyYXRpb24gdGFibGUgLS0+Cis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgcHVsbC1yaWdodCBzcGFuMTAiIGlkPSJuYXZUYWIiPgorPHVsIGNsYXNzPSJuYXYgbmF2LXBpbGxzIj4KKyAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+PGEgaHJlZj0iIyI+U3VtbWFyeTwvYT48L2xpPgorICAgIDxsaSBjbGFzcz0iIj48YSBocmVmPSJ7JSB1cmwgJ2NvbmZpZ3ZhcnMnIGJ1aWxkLmlkICV9Ij5CaXRCYWtlIHZhcmlhYmxlczwvYT48L2xpPgorPC91bD4KKworICA8IS0tIHN1bW1hcnkgLS0+CisgIDxkaXYgaWQ9InN1bW1hcnkiIGNsYXNzPSJ0YWItcGFuZSBhY3RpdmUiPgorICAgIDxoMz5CdWlsZCBjb25maWd1cmF0aW9uPC9oMz4KKyAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgorICAgICAgeyVpZiBCQl9WRVJTSU9OICV9PGR0PkJpdEJha2UgdmVyc2lvbjwvZHQ+PGRkPnt7QkJfVkVSU0lPTn19PC9kZD4geyUgZW5kaWYgJX0KKyAgICAgIHslaWYgQlVJTERfU1lTICV9PGR0PkJ1aWxkIHN5c3RlbTwvZHQ+PGRkPnt7QlVJTERfU1lTfX08L2RkPiB7JSBlbmRpZiAlfQorICAgICAgeyVpZiBOQVRJVkVMU0JTVFJJTkcgJX08ZHQ+SG9zdCBkaXN0cmlidXRpb248L2R0PjxkZD57e05BVElWRUxTQlNUUklOR319PC9kZD4geyUgZW5kaWYgJX0KKyAgICAgIHslaWYgVEFSR0VUX1NZUyAlfTxkdD5UYXJnZXQgc3lzdGVtPC9kdD48ZGQ+e3tUQVJHRVRfU1lTfX08L2RkPiB7JSBlbmRpZiAlfQorICAgICAgeyVpZiBNQUNISU5FICV9PGR0Pk1hY2hpbmU8L2R0PjxkZD57e01BQ0hJTkV9fTwvZGQ+IHslIGVuZGlmICV9CisgICAgICB7JWlmIERJU1RSTyAlfTxkdD5EaXN0cm88L2R0PjxkZD57e0RJU1RST319PC9kZD4geyUgZW5kaWYgJX0KKyAgICAgIHslaWYgRElTVFJPX1ZFUlNJT04gJX08ZHQ+RGlzdHJvIHZlcnNpb248L2R0PjxkZD57e0RJU1RST19WRVJTSU9OfX08L2RkPiB7JSBlbmRpZiAlfQorICAgICAgeyVpZiBUVU5FX0ZFQVRVUkVTICV9PGR0PlR1bmUgZmVhdHVyZXM8L2R0PjxkZD57e1RVTkVfRkVBVFVSRVN9fTwvZGQ+IHslIGVuZGlmICV9CisgICAgICB7JWlmIFRBUkdFVF9GUFUgJX08ZHQ+VGFyZ2V0IEZQVTwvZHQ+PGRkPnt7VEFSR0VUX0ZQVX19PC9kZD4geyUgZW5kaWYgJX0KKyAgICAgIHslaWYgdGFyZ2V0cy5hbGwgJX08ZHQ+VGFyZ2V0KHMpPC9kdD4KKyAgICAgICAgICA8ZGQ+IDx1bD4geyUgZm9yIHRhcmdldCBpbiB0YXJnZXRzLmFsbCAlfQorICAgICAgICAgICAgICAgPGxpPnt7dGFyZ2V0LnRhcmdldH19eyVpZiBmb3Jsb29wLmNvdW50ZXIgPiAxICV9PGJyPnslIGVuZGlmICV9PC9saT4KKyAgICAgICAgICB7JSBlbmRmb3IgJX0gPC91bD4gPC9kZD4geyUgZW5kaWYgJX0KKyAgICA8L2RsPgorICAgIDxoMz5MYXllcnM8L2gzPgorICAgIDxkaXYgY2xhc3M9InNwYW45IiBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4OyI+CisgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciI+CisgICAgICA8dGhlYWQ+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGg+TGF5ZXI8L3RoPgorICAgICAgICAgIDx0aD5MYXllciBicmFuY2g8L3RoPgorICAgICAgICAgIDx0aD5MYXllciBjb21taXQ8L3RoPgorICAgICAgICA8L3RyPgorICAgICAgPC90aGVhZD4KKyAgICAgIDx0Ym9keT57JSBmb3IgbHYgaW4gYnVpbGQubGF5ZXJfdmVyc2lvbl9idWlsZC5hbGx8ZGljdHNvcnQ6ImxheWVyLm5hbWUiICV9CisgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0ZD57e2x2LmxheWVyLm5hbWV9fTwvdGQ+CisgICAgICAgICAgICA8dGQ+e3tsdi5icmFuY2h9fTwvdGQ+CisgICAgICAgICAgICA8dGQ+IDxhIGNsYXNzPSJidG4iIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSd1bnN0eWxlZCc+CisgICAgICAgICAgICAgICAgPGxpPnt7bHYuY29tbWl0fX08L2xpPiA8L3VsPiI+CisgICAgICAgICAgICAgICAgICAgIHt7bHYuY29tbWl0fHRydW5jYXRlY2hhcnM6MTN9fQorICAgICAgICAgICAgICAgIDwvYT48L3RkPgorICAgICAgICA8L3RyPnslIGVuZGZvciAlfQorICAgICAgPC90Ym9keT4KKyAgICA8L3RhYmxlPgorICAgIDwvZGl2PgorICA8L2Rpdj4KKworCis8L2Rpdj4KK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvY29uZmlndmFycy5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2NvbmZpZ3ZhcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTU3MmFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2NvbmZpZ3ZhcnMuaHRtbApAQCAtMCwwICsxLDEzMiBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKzxsaT5Db25maWd1cmF0aW9uPC9saT4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIG5hdi1jb25maWd1cmF0aW9uICV9CisgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSJ7JSB1cmwgJ2NvbmZpZ3VyYXRpb24nIGJ1aWxkLnBrICV9Ij5Db25maWd1cmF0aW9uPC9hPjwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBidWlsZGluZm9tYWluICV9Cis8IS0tIHBhZ2UgdGl0bGUgLS0+Cis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjEwIj4KKyA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgPGgxPgorICB7JSBpZiByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID4gMCBvciByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID4gMCAlfQorICAgICAge3tvYmplY3RzLnBhZ2luYXRvci5jb3VudH19IHZhcmlhYmxle3tvYmplY3RzLnBhZ2luYXRvci5jb3VudHxwbHVyYWxpemV9fSBmb3VuZAorICB7JWVsaWYgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICAgICAgTm8gdmFyaWFibGVzIGZvdW5kCisgIHslZWxzZSV9CisgICAgICBDb25maWd1cmF0aW9uCisgIHslZW5kaWYlfQorIDwvaDE+CisgPC9kaXY+Cis8L2Rpdj4KKworPCEtLSBjb25maWd1cmF0aW9uIHRhYmxlIC0tPgorPGRpdiBjbGFzcz0icm93LWZsdWlkIHB1bGwtcmlnaHQgc3BhbjEwIiBpZD0ibmF2VGFiIj4KKyAgPHVsIGNsYXNzPSJuYXYgbmF2LXBpbGxzIj4KKyAgICA8bGkgY2xhc3M9IiI+PGEgaHJlZj0ieyUgdXJsICdjb25maWd1cmF0aW9uJyBidWlsZC5pZCAlfSI+U3VtbWFyeTwvYT48L2xpPgorICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIjIiA+Qml0QmFrZSB2YXJpYWJsZXM8L2E+PC9saT4KKyAgPC91bD4KKworICA8IS0tIHZhcmlhYmxlcyAtLT4KKyAgPGRpdiBpZD0idmFyaWFibGVzIiBjbGFzcz0idGFiLXBhbmUiPgorCisgIHslIGlmIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KKyAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KKyAgICAgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIiBpZD0ic2VhcmNoZm9ybSI+CisgICAgICAgICAgICA8aW5wdXQgaWQ9InNlYXJjaCIgbmFtZT0ic2VhcmNoIiBjbGFzcz0iaW5wdXQteHhsYXJnZSIgdHlwZT0idGV4dCIgdmFsdWU9InslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JSBlbmRpZiAlfSIvPnslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfTxhIGhyZWY9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSIgY2xhc3M9ImFkZC1vbiBidG4iIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9Imljb24tcmVtb3ZlIj48L2k+PC9hPnslIGVuZGlmICV9CisgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlYXJjaCI+U2VhcmNoPC9idXR0b24+CisgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWxpbmsiIG9uY2xpY2s9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSI+U2hvdyBhbGwgdmFyaWFibGVzPC9idXR0b24+CisgICAgICAgIDwvZm9ybT4KKyAgICAgIDwvZGl2PgorICA8L2Rpdj4KKworICB7JSBlbHNlICV9CisgIHslIGluY2x1ZGUgImJhc2V0YWJsZV90b3AuaHRtbCIgJX0KKworICB7JSBmb3IgdmFyaWFibGUgaW4gb2JqZWN0cyAlfQorICAgIDx0ciBjbGFzcz0iZGF0YSI+CisgICAgICAgIDx0ZCBjbGFzcz0idmFyaWFibGVfbmFtZSI+PGEgZGF0YS10b2dnbGU9Im1vZGFsIiBocmVmPSIjdmFyaWFibGUte3t2YXJpYWJsZS5wa319Ij57e3ZhcmlhYmxlLnZhcmlhYmxlX25hbWV9fTwvYT48L3RkPgorICAgICAgICA8dGQgY2xhc3M9InZhcmlhYmxlX3ZhbHVlIj48YSBkYXRhLXRvZ2dsZT0ibW9kYWwiIGhyZWY9IiN2YXJpYWJsZS17e3ZhcmlhYmxlLnBrfX0iPnt7dmFyaWFibGUudmFyaWFibGVfdmFsdWV8dHJ1bmNhdGVjaGFyczoxNTN9fTwvYT48L3RkPgorICAgICAgICA8dGQgY2xhc3M9ImZpbGUiPjxhIGRhdGEtdG9nZ2xlPSJtb2RhbCIgaHJlZj0iI3ZhcmlhYmxlLXt7dmFyaWFibGUucGt9fSI+CisgICAgICAgICAgICB7JSBpZiB2YXJpYWJsZS52aGlzdG9yeS5hbGwgJX0KKyAgICAgICAgICAgICAgICB7JSBmb3IgcGF0aCBpbiB2YXJpYWJsZS52aGlzdG9yeS5hbGx8ZmlsdGVyX3NldGluX2ZpbGVzOmZpbGVfZmlsdGVyICV9CisgICAgICAgICAgICAgICAgICAgIHt7cGF0aH19PGJyLz4KKyAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvYT48L3RkPgorICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj4KKyAgICAgICAgICAgIHslIGlmIHZhcmlhYmxlLmRlc2NyaXB0aW9uICV9CisgICAgICAgICAgICAgICAge3t2YXJpYWJsZS5kZXNjcmlwdGlvbn19CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvY3VycmVudC9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXIte3t2YXJpYWJsZS52YXJpYWJsZV9uYW1lfHZhcmlhYmxlX3BhcmVudF9uYW1lfX0iIHRhcmdldD0iX2JsYW5rIj4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1zaGFyZSBnZXQtaW5mbyI+PC9pPjwvYT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvdGQ+CisgICAgPC90cj4KK3slIGVuZGZvciAlfQorCit7JSBpbmNsdWRlICJiYXNldGFibGVfYm90dG9tLmh0bWwiICV9Cit7JSBlbmRpZiAlfQorPC9kaXY+IDwhLS0gZW5kdmFyaWFibGVzIC0tPgorCis8IS0tIGZpbGUgbGlzdCBwb3B1cHMgLS0+Cit7JSBmb3IgdmFyaWFibGUgaW4gb2JqZWN0cyAlfQorICAgIHslIGlmIHZhcmlhYmxlLnZoaXN0b3J5LmNvdW50ICV9CisgICAgPGRpdiBpZD0idmFyaWFibGUte3t2YXJpYWJsZS5wa319IiBjbGFzcz0ibW9kYWwgaGlkZSBmYWRlIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyI+CisgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+eDwvYnV0dG9uPgorICAgICAgICAgICAgPGgzPkhpc3Rvcnkgb2Yge3t2YXJpYWJsZS52YXJpYWJsZV9uYW1lfX08L2gzPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisgICAgICAgICAgICB7JSBpZiB2YXJpYWJsZS52YXJpYWJsZV92YWx1ZSAlfQorICAgICAgICAgICAgICB7JSBpZiB2YXJpYWJsZS52YXJpYWJsZV92YWx1ZXxsZW5ndGggPCA1NzAgJX0KKyAgICAgICAgICAgICAgICA8aDQ+e3t2YXJpYWJsZS52YXJpYWJsZV9uYW1lfX0gdmFsdWUgaXM6PC9oND4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgICAge3t2YXJpYWJsZS52YXJpYWJsZV92YWx1ZX19CisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgPGg0Pnt7dmFyaWFibGUudmFyaWFibGVfbmFtZX19IHZhbHVlIGlzOjwvaDQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7dmFyaWFibGUudmFyaWFibGVfdmFsdWV8c3RyaW5nX3NsaWNlOic6NTcwJ319CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZnVsbCI+IHt7dmFyaWFibGUudmFyaWFibGVfdmFsdWV8c3RyaW5nX3NsaWNlOic1NzA6J319CisgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1taW5pIGZ1bGwtc2hvdyI+Li4uPC9hPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLW1pbmkgZnVsbC1oaWRlIj5Db2xsYXBzZSB2YXJpYWJsZSB2YWx1ZSA8aSBjbGFzcz0iaWNvbi1jYXJldC11cCI+PC9pPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj5UaGUgdmFsdWUgb2YgPHN0cm9uZz57e3ZhcmlhYmxlLnZhcmlhYmxlX25hbWV9fTwvc3Ryb25nPiBpcyBhbiBlbXB0eSBzdHJpbmc8L2Rpdj4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8aDQ+VGhlIHZhbHVlIHdhcyBzZXQgaW4gdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIGZpbGVzOjwvaDQ+CisgICAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIj4KKyAgICAgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5PcmRlcjwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGg+Q29uZmlndXJhdGlvbiBmaWxlPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5PcGVyYXRpb248L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkxpbmUgbnVtYmVyPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICA8L3RoZWFkPgorICAgICAgICAgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgICAgICAgICAgeyUgZm9yIHZoIGluIHZhcmlhYmxlLnZoaXN0b3J5LmFsbCAlfQorICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tmb3Jsb29wLmNvdW50ZXJ9fTwvdGQ+PHRkPnt7dmguZmlsZV9uYW1lfX08L3RkPjx0ZD57e3ZoLm9wZXJhdGlvbn19PC90ZD48dGQ+e3t2aC5saW5lX251bWJlcn19PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgeyVlbmRmb3IlfQorICAgICAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICB7JSBlbmRpZiAlfQoreyUgZW5kZm9yICV9CisKKzwvZGl2PiA8IS0tIGJ1aWxkaW5mb21haW4gLS0+CisKK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvY3B1dXNhZ2UuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9jcHV1c2FnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZjA3YjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvY3B1dXNhZ2UuaHRtbApAQCAtMCwwICsxLDQgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorPGxpPkNwdSBVc2FnZTwvbGk+Cit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RldGFpbF9wYWdpbmF0aW9uX2JvdHRvbS5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RldGFpbF9wYWdpbmF0aW9uX2JvdHRvbS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MGMyMWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGV0YWlsX3BhZ2luYXRpb25fYm90dG9tLmh0bWwKQEAgLTAsMCArMSw1NSBAQAoreyUgY29tbWVudCAlfQorICAgIFNob3cgcGFnaW5hdGlvbiBjb250cm9scyBhcyBwZXIgc2VhcmNoL3BhZ2luYXRpb24gdGFibGUgZGV0YWlsIHNwZWMuCisgICAgSW5wdXQ6IG9iamVjdHMsIHNldHVwIGZvciBwYWdpbmF0aW9uIHVzaW5nIHRoZSBzdGFuZGFyZCBtZXRob2QgaW4gdmlld3MuCisgICAgICAgICAgIG9iamVjdF9jb3VudCwgY291bnQgZm9yIGNvbXBsZXRlIGxpc3Qgb2Ygb2JqZWN0cywgKGFsbCBwYWdlcywgbm8gcGF0dGVybikKK3slIGVuZGNvbW1lbnQgJX0KKworeyMgb25seSBwYWdpbmF0ZSBpZiAxMCBvciBtb3JlIHJvd3MgdW5maWx0ZXJlZCwgYWxsIHBhZ2VzICN9Cit7JSBpZiBvYmplY3RfY291bnQgPj0gMTAgJX0KKzxkaXYgY2xhc3M9InBhZ2luYXRpb24iPgorICA8dWw+Cit7JWlmIG9iamVjdHMuaGFzX3ByZXZpb3VzICV9CisgICAgPGxpPjxhIGhyZWY9ImphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J3BhZ2UnOnt7b2JqZWN0cy5wcmV2aW91c19wYWdlX251bWJlcn19fSkiPiZsYXF1bzs8L2E+PC9saT4KK3slZWxzZSV9CisgICAgPGxpIGNsYXNzPSJkaXNhYmxlZCI+PGEgaHJlZj0iIyI+JmxhcXVvOzwvYT48L2xpPgoreyVlbmRpZiV9Cit7JSBmb3IgaSBpbiBvYmplY3RzLnBhZ2VfcmFuZ2UgJX0KKyAgICA8bGl7JWlmIGkgPT0gb2JqZWN0cy5udW1iZXIgJX0gY2xhc3M9ImFjdGl2ZSIgeyVlbmRpZiV9PjxhIGhyZWY9ImphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J3BhZ2UnOnt7aX19fSkiPnt7aX19PC9hPjwvbGk+Cit7JSBlbmRmb3IgJX0KK3slaWYgb2JqZWN0cy5oYXNfbmV4dCV9CisgICAgPGxpPjxhIGhyZWY9ImphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J3BhZ2UnOnt7b2JqZWN0cy5uZXh0X3BhZ2VfbnVtYmVyfX19KSI+JnJhcXVvOzwvYT48L2xpPgoreyVlbHNlJX0KKyAgICA8bGkgY2xhc3M9ImRpc2FibGVkIj48YSBocmVmPSIjIj4mcmFxdW87PC9hPjwvbGk+Cit7JWVuZGlmJX0KKyAgPC91bD4KKworICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKyAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJwYWRkaW5nLWJvdHRvbToxMHB4OyI+U2hvdyByb3dzOjwvc3Bhbj4KKyAgICA8c2VsZWN0IGNsYXNzPSJwYWdlc2l6ZSI+CisgICAgICB7JSB3aXRoICIxMCAyNSA1MCAxMDAgMTUwIiBhcyBsaXN0JX0KKyAgICAgICAgeyUgZm9yIGkgaW4gbGlzdC5zcGxpdCAlfQorICAgICAgICAgIDxvcHRpb24gdmFsdWU9Int7aX19Ij57e2l9fTwvb3B0aW9uPgorICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgIHslIGVuZHdpdGggJX0KKyAgICA8L3NlbGVjdD4KKyAgPC9kaXY+Cis8L2Rpdj4KKworPCEtLSBVcGRhdGUgcGFnZSBkaXNwbGF5IHNldHRpbmdzIC0tPgorPHNjcmlwdD4KKyAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICAvLyBsb2FkIGRhdGEgZm9yIG51bWJlciBvZiBlbnRyaWVzIHRvIGJlIGRpc3BsYXllZCBvbiBwYWdlCisgICAgaWYgKHt7cmVxdWVzdC5HRVQuY291bnR9fSAhPSAiIikgeworICAgICAgcGFnZXNpemUgPSB7e3JlcXVlc3QuR0VULmNvdW50fX07CisgICAgfQorICAgICQoJy5wYWdlc2l6ZSBvcHRpb24nKS5wcm9wKCdzZWxlY3RlZCcsIGZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoJ1t2YWx1ZT0iJyArIHBhZ2VzaXplICsgJyJdJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignc2VsZWN0ZWQnLCB0cnVlKTsKKworICAgICQoIi5wYWdlc2l6ZSIpLmNoYW5nZShmdW5jdGlvbiAoKSB7CisgICAgICAgIHJlbG9hZF9wYXJhbXMoeyJjb3VudCI6JCh0aGlzKS52YWwoKX0pOworICAgIH0pOworfSk7Cis8L3NjcmlwdD4KK3slIGVuZGlmICV9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kZXRhaWxfc2VhcmNoX2hlYWRlci5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RldGFpbF9zZWFyY2hfaGVhZGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlYTNmNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kZXRhaWxfc2VhcmNoX2hlYWRlci5odG1sCkBAIC0wLDAgKzEsNjggQEAKK3slIGNvbW1lbnQgJX0KKyAgU2hvdyBhIGRldGFpbCB0YWJsZSBTZWFyY2ggZmllbGQgYW5kIFJvd3MgcGVyIHBhZ2UuCisgIElucHV0OgorICAgIG9iamVjdHMsIG91ciBib2lsZXJwbGF0ZWQgcGFnaW5hdGVkIHdpdGggc2VhcmNoIGZpZWxkcyBzZXQuCisgICAgb2JqZWN0X2NvdW50LCBjb3VudCBvZiBmdWxsLCB1bmZpbHRlcmVkLCBvYmplY3RzIGxpc3QKKyAgICBzZWFyY2hfd2hhdCwgZmlsbHMgaW4gIlNlYXJjaCBfX18iCisgIE9ubHkgc2hvdyB0aGUgc2VhcmNoIGZvcm0gaWYgd2UgaGF2ZSBtb3JlIHRoYW4gMTAgcmVzdWx0cywKKyAgb3IgaWYgcmV0dXJuIGZyb20gYSBwcmV2aW91cyBzZWFyY2guCit7JSBlbmRjb21tZW50ICV9CisKKworPHNjcmlwdD4KKyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAvKiBDbGVhciB0aGUgY3VycmVudCBzZWFyY2ggc2VsZWN0aW9uIGFuZCByZWxvYWQgdGhlIHJlc3VsdHMgKi8KKyAgJCgiLnNlYXJjaC1jbGVhciIpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgJCgiI3NlYXJjaCIpLnZhbCgiIik7CisgICAgJCh0aGlzKS5wYXJlbnRzKCJmb3JtIikuc3VibWl0KCk7CisgIH0pOworfSk7Cis8L3NjcmlwdD4KKzxkaXYgY2xhc3M9InJvdy1mbHVpZCI+Cit7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDEwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCAlfQorICB7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KKyAgICA8aDM+Tm8ge3tzZWFyY2hfd2hhdH19IGZvdW5kPC9oMz4KKyAgICA8Zm9ybSBpZD0ic2VhcmNoZm9ybSIgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgIHslIGVsc2UgJX0KKyAgICA8Zm9ybSBpZD0ic2VhcmNoZm9ybSIgY2xhc3M9Im5hdmJhci1zZWFyY2ggaW5wdXQtYXBwZW5kIHB1bGwtbGVmdCI+CisgIHslIGVuZGlmICV9CisKKyAgICAgIDxpbnB1dCBpZD0ic2VhcmNoIiBjbGFzcz0iaW5wdXQteGxhcmdlIiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iU2VhcmNoIHt7c2VhcmNoX3doYXR9fSIgbmFtZT0ic2VhcmNoIiB2YWx1ZT0ieyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslIGVuZGlmICV9Ij4KKyAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSJuYW1lOisiIG5hbWU9Im9yZGVyYnkiPgorICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9ImwiIG5hbWU9InBhZ2UiPgorICB7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX0KKyAgICAgIDxhIGNsYXNzPSJhZGQtb24gYnRuIHNlYXJjaC1jbGVhciI+CisgICAgICAgIDxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPgorICAgICAgPC9hPgorICB7JSBlbmRpZiAlfQorICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4iPlNlYXJjaDwvYnV0dG9uPgorICB7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tbGluayBzZWFyY2gtY2xlYXIiPgorICAgICAgICBTaG93IGFsbCB7e3NlYXJjaF93aGF0fX0KKyAgICAgIDwvYnV0dG9uPgorICB7JSBlbmRpZiAlfQorICAgIDwvZm9ybT4KK3slIGVuZGlmICV9CisKK3slIGlmIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KKyAgPC9kaXY+IHsjIGVuZCBhbGVydCAjfQoreyUgZWxzZSAlfQorICB7JSBpZiBvYmplY3RfY291bnQgPiAxMCAlfQorICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKyAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJwYWRkaW5nLXRvcDo1cHg7Ij5TaG93IHJvd3M6PC9zcGFuPgorICAgIDxzZWxlY3Qgc3R5bGU9Im1hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MHB4OyIgY2xhc3M9InBhZ2VzaXplIj4KKyAgICB7JSB3aXRoICIxMCAyNSA1MCAxMDAgMTUwIiBhcyBsaXN0JX0KKyAgICAgIHslIGZvciBpIGluIGxpc3Quc3BsaXQgJX0KKyAgICAgICAgeyUgaWYgcmVxdWVzdC5zZXNzaW9uLmxpbWl0ID09IGkgJX0KKyAgICAgIDxvcHRpb24gdmFsdWU9Int7aX19IiBzZWxlY3RlZD57e2l9fTwvb3B0aW9uPgorICAgICAgICB7JSBlbHNlICV9CisgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSI+e3tpfX08L29wdGlvbj4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgIHslIGVuZGZvciAlfQorICAgIHslIGVuZHdpdGggJX0KKyAgICA8L3NlbGVjdD4KKyAgPC9kaXY+CisgIHslIGVuZGlmICV9Cit7JSBlbmRpZiAlfQorPC9kaXY+IHsjIHJvdy1mbHVpZCAjfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RldGFpbF9zb3J0ZWRfaGVhZGVyLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGV0YWlsX3NvcnRlZF9oZWFkZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2UyOTJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RldGFpbF9zb3J0ZWRfaGVhZGVyLmh0bWwKQEAgLTAsMCArMSwyNSBAQAoreyUgY29tbWVudCAlfQorICAgIEFkZHMgc29ydGVkIGNvbHVtbnMgdG8gYSBkZXRhaWwgdGFibGUuCisgICAgTXVzdCBiZSBwcmVjZWRlZCBieSA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlc29ydGVyIiBpZD0ib3RhYmxlIj4KKyAgICBNdXN0IGJlIGZvbGxvd2VkIGJ5IDx0Ym9keT4uLi48L3Rib2R5PjwvdGFibGU+LgorICAgIFJlcXVpcmVzIHRhYmxlY29scyBzZXR1cCBjb2x1bW4gZmllbGRzIGRjbGFzcywgY2xjbGFzcywgcWhlbHAsIG9yZGVyZmllbGQuCit7JSBlbmRjb21tZW50ICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7IyAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlc29ydGVyIiBpZD0ib3RhYmxlIj4gI30KKyAgICA8dGhlYWQ+CisgICAgICAgIDwhLS0gVGFibGUgaGVhZGVyIHJvdzsgZ2VuZXJhdGVkIGZyb20gInRhYmxlY29scyIgZW50cnkgaW4gdGhlIGNvbnRleHQgZGljdCAtLT4KKyAgICAgICAgPHRyPgorICAgICAgICAgICAgeyUgZm9yIHRjIGluIHRhYmxlY29scyAlfTx0aCBjbGFzcz0ieyVpZiB0Yy5kY2xhc3MlfXt7dGMuZGNsYXNzfX17JSBlbmRpZiAlfSB7JWlmIHRjLmNsYXNzICV9e3t0Yy5jbGNsYXNzfX17JSBlbmRpZiAlfSI+CisgICAgICAgICAgICAgICAgeyVpZiB0Yy5xaGVscCV9PGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9Int7dGMucWhlbHB9fSI+PC9pPnslZW5kaWYlfQorICAgICAgICAgICAgICAgIHslaWYgdGMub3JkZXJmaWVsZCV9PGEgeyVpZiB0Yy5vcmRlcmljb24lfSBjbGFzcz0ic29ydGVkIiB7JWVuZGlmJX1ocmVmPSJqYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydwYWdlJzogMSwgJ29yZGVyYnknIDogJ3t7dGMub3JkZXJmaWVsZH19JyB9KSI+e3t0Yy5uYW1lfX08L2E+eyVlbHNlJX08c3BhbiBjbGFzcz0ibXV0ZWQiPnt7dGMubmFtZX19PC9zcGFuPnslZW5kaWYlfQorICAgICAgICAgICAgICAgIHslaWYgdGMub3JkZXJpY29uJX0gPGkgY2xhc3M9Imljb24tY2FyZXQte3t0Yy5vcmRlcmljb259fSI+PC9pPnslZW5kaWYlfQorICAgICAgICAgICAgICAgIHslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgZm9ybG9vcC5maXJzdCAlfQorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYmFkZ2UgYmFkZ2UtaW5mbyI+e3tvYmplY3RzLnBhZ2luYXRvci5jb3VudH19PC9zcGFuPgorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgeyVpZiB0Yy5maWx0ZXIlfTxkaXYgY2xhc3M9ImJ0bi1ncm91cCBwdWxsLXJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2ZpbHRlcl97e3RjLmZpbHRlci5jbGFzc319IiByb2xlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLW1pbmkgeyVpZiByZXF1ZXN0LkdFVC5maWx0ZXIlfXt7dGMuZmlsdGVyLm9wdGlvbnN8ZmlsdGVyZWRfaWNvbjpyZXF1ZXN0LkdFVC5maWx0ZXJ9fSB7JWVuZGlmJX0iIHslaWYgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCB0Yy5maWx0ZXIub3B0aW9uc3xmaWx0ZXJlZF90b29sdGlwOnJlcXVlc3QuR0VULmZpbHRlciAlfSB0aXRsZT0iPHA+e3t0Yy5maWx0ZXIub3B0aW9uc3xmaWx0ZXJlZF90b29sdGlwOnJlcXVlc3QuR0VULmZpbHRlcn19PC9wPjxwPjxhIGNsYXNzPSdidG4gYnRuLXNtYWxsIGJ0bi1wcmltYXJ5JyBocmVmPWphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J2ZpbHRlcic6Jyd9KT5TaG93IGFsbCB7JSBpZiBmaWx0ZXJfc2VhcmNoX2Rpc3BsYXkgJX17e2ZpbHRlcl9zZWFyY2hfZGlzcGxheX19eyUgZWxzZSAlfXt7b2JqZWN0bmFtZX19eyUgZW5kaWYgJX08L2E+PC9wPiIgeyVlbmRpZiV9IGRhdGEtdG9nZ2xlPSJtb2RhbCI+IDxpIGNsYXNzPSJpY29uLWZpbHRlciBmaWx0ZXJlZCI+PC9pPiA8L2E+CisgICAgICAgICAgICAgICAgPC9kaXY+eyVlbmRpZiV9CisgICAgICAgICAgICA8L3RoPnslIGVuZGZvciAlfQorICAgICAgICA8L3RyPgorICAgIDwvdGhlYWQ+CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kaXJpbmZvLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGlyaW5mby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YmM0ODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGlyaW5mby5odG1sCkBAIC0wLDAgKzEsMjM2IEBACit7JSBleHRlbmRzICJiYXNlYnVpbGRwYWdlLmh0bWwiICV9Cit7JSBibG9jayBleHRyYWhlYWRjb250ZW50ICV9Cit7JSBsb2FkIHN0YXRpYyAlfQorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7JSBzdGF0aWMgJ2Nzcy9qcXVlcnkudHJlZXRhYmxlLmNzcycgJX0iIHR5cGU9InRleHQvY3NzIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ieyUgc3RhdGljICdjc3MvanF1ZXJ5LnRyZWV0YWJsZS50aGVtZS50b2FzdGVyLmNzcycgJX0iIHR5cGU9InRleHQvY3NzIj4KK3slIGVuZGJsb2NrIGV4dHJhaGVhZGNvbnRlbnQgJX0KKworeyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Cis8bGk+e3t0YXJnZXQudGFyZ2V0fX08L2xpPgoreyUgZW5kYmxvY2sgbG9jYWxicmVhZGNydW1iJX0KKworeyUgYmxvY2sgYnVpbGRpbmZvbWFpbiAlfQorCit7JSBsb2FkIHN0YXRpYyAlfQorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvanF1ZXJ5LnRyZWV0YWJsZS5qcycgJX0iPgorPC9zY3JpcHQ+Cit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKKzxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4KKyAgICBmdW5jdGlvbiBzZXR1cFRyZWV0YWJsZSgpIHsKKyAgICAgICAgJCgiI2RpcnRhYmxlIikudHJlZXRhYmxlKHsKKyAgICAgICAgICAgIGV4cGFuZGFibGU6IHRydWUsCisgICAgICAgICAgICBicmFuY2hBdHRyOiAidHRCcmFuY2giLAorICAgICAgICAgICAgY2xpY2thYmxlTm9kZU5hbWVzOiB0cnVlLAorICAgICAgICAgICAgb25Ob2RlQ29sbGFwc2U6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIC8qIERvIG5vdGhpbmcsIGtlZXAgY2FjaGVkICovCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgb25Ob2RlRXhwYW5kOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmlkOworICAgICAgICAgICAgICAgIHZhciBuID0gJCgiI2RpcnRhYmxlIikudHJlZXRhYmxlKCJub2RlIiwgc3RhcnQpOworICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLyogYWxyZWFkeSB3YXMgZXhwYW5kZWQgb25jZSAqLworICAgICAgICAgICAgICAgICAgICAkKCIjZGlydGFibGUiKS50cmVldGFibGUoInJldmVhbCIsIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSAieyUgdXJsICJkaXJpbmZvX2FqYXgiIGJ1aWxkLmlkIHRhcmdldC5pZCAgJX0iOworICAgICAgICAgICAgICAgICAgICAkLmFqYXgoeworICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAgICA6ICJHRVQiLAorICAgICAgICAgICAgICAgICAgICAgICAgdXJsICAgICA6IHVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgICAgOiAic3RhcnQ9IiArIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUm93cyhuLCByZXNwb25zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciAgIDogZnVuY3Rpb24oanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duICkge2FsZXJ0KHRleHRTdGF0dXMgKyAiOiIgKyBlcnJvclRocm93bil9LAorICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0sCisgICAgICAgfSk7CisgICAgfQorICAgIGZ1bmN0aW9uIHRkKGRhdGEpIHsKKyAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgICAgICAgICAgZGF0YSA9ICcnOworICAgICAgICB9CisgICAgICAgIHJldHVybiAnPHRkPicgKyBkYXRhICsgJzwvdGQ+JworICAgIH0KKworICAgIGZ1bmN0aW9uIGZvcm1hdFJvdyhvKSB7CisgICAgICAgIC8qIHNldHVwIHRyLXdpZGUgZm9ybWF0dGluZyAqLworICAgICAgICB2YXIgdHIgPSAnPHRyIGNsYXNzPSInOworICAgICAgICBpZiAoby5saW5rX3RvICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyICs9ICdtdXRlZCAnOworICAgICAgICB9CisgICAgICAgIGlmIChvLmlzZGlyICYmIG8uY2hpbGRjb3VudCkgeworICAgICAgICAgICAgdHIgKz0gJ2JyYW5jaCIgZGF0YS10dC1icmFuY2g9InRydWUiICc7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0ciArPSAnbGVhZiIgZGF0YS10dC1icmFuY2g9ImZhbHNlIiAnOworICAgICAgICB9CisgICAgICAgIHRyICs9ICAgICcgZGF0YS10dC1pZD0iJyArIG8uZnVsbHBhdGggKyciICc7CisgICAgICAgIGlmIChvLnBhcmVudCAhPSAiLyIpIHsKKyAgICAgICAgICAgIHRyICs9ICAgICcgZGF0YS10dC1wYXJlbnQtaWQ9IicgKyBvLnBhcmVudCArJyIgJzsKKyAgICAgICAgfQorICAgICAgICB0ciArPSAnPic7CisKKyAgICAgICAgLyogc2V0dXAgdGQgc3BlY2lmaWMgZm9ybWF0dGluZyAqLworICAgICAgICB2YXIgbGlua190byA9IHRkKG8ubGlua190byk7CisgICAgICAgIHZhciBzaXplID0gJzx0ZCBjbGFzcyA9ICJzaXplY29sIj4nICsgby5zaXplICsgJzwvdGQ+JworICAgICAgICB2YXIgcGVybWlzc2lvbiA9IHRkKG8ucGVybWlzc2lvbik7CisgICAgICAgIHZhciBvd25lciA9IHRkKG8ub3duZXIpOworICAgICAgICB2YXIgZ3JvdXAgPSB0ZChvLmdyb3VwKTsKKworICAgICAgICAvKiBoYW5kbGUgdGhlIG5hbWUgY29sdW1uICovCisgICAgICAgIHZhciBuYW1lID0gbnVsbDs7CisgICAgICAgIHZhciBuYW1lc3Bhbj0xOworICAgICAgICBpZiAoby5pc2RpcikgeworICAgICAgICAgICAgaWYgKG8ubGlua190byA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbmFtZXNwYW4gPSAyOworICAgICAgICAgICAgICAgIGlmIChvLnBhY2thZ2UgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBuYW1lc3BhbiA9IDM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGNvbHNwYW4gPSAnY29sc3Bhbj0iJyArIG5hbWVzcGFuICsgJyInOworICAgICAgICAgICAgbmFtZSA9ICc8dGQgY2xhc3M9ImNvbnRlbnQtZGlyZWN0b3J5IicgKyBjb2xzcGFuICsgJz4nOworICAgICAgICAgICAgaWYgKG8uY2hpbGRjb3VudCkgeworICAgICAgICAgICAgICAgIG5hbWUgKz0gJzxhIGhyZWY9IiI+JzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5hbWUgKz0gJzxpIGNsYXNzPSJpY29uLWZvbGRlci1jbG9zZSI+PC9pPic7CisgICAgICAgICAgICBuYW1lICs9ICcmbmJzcDsnICsgby5uYW1lOworICAgICAgICAgICAgaWYgKG8uY2hpbGRjb3VudCkgeworICAgICAgICAgICAgICAgIG5hbWUgKz0gJzwvYT4nOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmFtZSArPSAnPC90ZD4nOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbmFtZSA9ICc8dGQ+JzsKKyAgICAgICAgICAgIGlmIChvLmxpbmtfdG8gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG5hbWUgKz0gJzxpIGNsYXNzPSJpY29uLWZpbGUiPjwvaT4nOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbmFtZSArPSAnPGkgY2xhc3M9Imljb24taGFuZC1yaWdodCI+PC9pPic7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBuYW1lICs9ICcmbmJzcDsnICsgby5uYW1lOworICAgICAgICAgICAgbmFtZSArPSAnPC90ZD4nOworICAgICAgICB9CisKKyAgICAgICAgLyogaGFuZGxlIHRoZSBwYWNrYWdlIGNvbHVtbiAqLworICAgICAgICB2YXIgcGFja2FnZSA9IG51bGw7CisgICAgICAgIGlmIChvLnBhY2thZ2UgIT0gbnVsbCkgeworICAgICAgICAgICAgLyogYWRkIGxpbmsgdG8gaW5jbHVkZWQgcGFja2FnZSBwYWdlICovCisgICAgICAgICAgICBidWlsZF9pZCA9IHt7IGJ1aWxkLmlkIH19OworICAgICAgICAgICAgdGFyZ2V0X2lkID0ge3sgdGFyZ2V0LmlkIH19OworICAgICAgICAgICAgLyogQ3JlYXRlIGEgdXJsIGZvciBhIGR1bW15IHBhY2thZ2UgaWQgb2YgMCAqLworICAgICAgICAgICAgZHVtbXkgPSAieyUgdXJsICdwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCcgYnVpbGQuaWQgdGFyZ2V0LmlkIDAgJX0iCisgICAgICAgICAgICAvKiBmaWxsIGluIHRoZSBwYWNrYWdlIGlkICovCisgICAgICAgICAgICB1cmwgPSBkdW1teS5zdWJzdHIoMCwgZHVtbXkubGVuZ3RoLTEpICsgby5wYWNrYWdlX2lkOworICAgICAgICAgICAgcGFja2FnZSA9ICc8YSBocmVmPScgKyB1cmwgKyAnPicgOworICAgICAgICAgICAgcGFja2FnZSArPSBvLnBhY2thZ2U7CisgICAgICAgICAgICBwYWNrYWdlICs9ICc8L2E+JzsKKyAgICAgICAgICAgIGlmIChvLmluc3RhbGxlZF9wYWNrYWdlICE9IG8ucGFja2FnZSkgeworICAgICAgICAgICAgICAgIC8qIG1ha2UgY2xhc3MgbXV0ZWQgYW5kIGFkZCBob3ZlciBoZWxwICovCisgICAgICAgICAgICAgICAgcGFja2FnZSArPSAnPHNwYW4gY2xhc3M9Im11dGVkIj4gYXMgJyArIG8uaW5zdGFsbGVkX3BhY2thZ2UgKyAnIDwvc3Bhbj4nOworICAgICAgICAgICAgICAgIHBhY2thZ2UgKz0gJzxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIgJzsKKyAgICAgICAgICAgICAgICBwYWNrYWdlICs9ICd0aXRsZT0iJyArIG8ucGFja2FnZSArICcgd2FzIHJlbmFtZWQgYXQgcGFja2FnaW5nIHRpbWUgYW5kIHdhcyBpbnN0YWxsZWQgaW4geW91ciBpbWFnZSBhcyAnICsgby5pbnN0YWxsZWRfcGFja2FnZSArICciPic7CisgICAgICAgICAgICAgICAgcGFja2FnZSArPSAnPC9pPic7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcGFja2FnZSA9IHRkKHBhY2thZ2UpOworCisgICAgICAgIHZhciBjb2xzMXRvMzsKKyAgICAgICAgc3dpdGNoIChuYW1lc3BhbikgeworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIGNvbHMxdG8zID0gbmFtZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIDI6CisgICAgICAgICAgICAgICAgY29sczF0bzMgPSBuYW1lICsgcGFja2FnZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgY29sczF0bzMgPSBuYW1lICsgbGlua190byArIHBhY2thZ2U7CisgICAgICAgIH0KKyAgICAgICAgciA9IHRyICsgY29sczF0bzMgKyBzaXplICsgcGVybWlzc2lvbiArIG93bmVyICsgZ3JvdXAgKyAiPC90cj4iCisgICAgICAgIHJldHVybiByOworICAgIH0KKworICAgIGZ1bmN0aW9uIGFkZFJvd3Mobiwgb2JqcykgeworICAgICAgICByb3dzID0gIiI7CisgICAgICAgIGZvciAoaT0wOyBpPG9ianMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHJvd3MgKz0gZm9ybWF0Um93KG9ianNbaV0pOworICAgICAgICB9CisgICAgICAgICQoIiNkaXJ0YWJsZSIpLnRyZWV0YWJsZSgibG9hZEJyYW5jaCIsIG4sIHJvd3MpOworICAgIH0KKworICAgICQuZm4uaXNPZmZTY3JlZW4gPSBmdW5jdGlvbigpeworICAgICAgICB2YXIgd2luID0gJCh3aW5kb3cpOworICAgICAgICB2aWV3cG9ydEJvdHRvbSA9IHdpbi5zY3JvbGxUb3AoKSArIHdpbi5oZWlnaHQoKTsKKyAgICAgICAgCisgICAgICAgIHZhciBib3VuZHMgPSB0aGlzLm9mZnNldCgpOworICAgICAgICBib3VuZHMuYm90dG9tID0gYm91bmRzLnRvcCArIHRoaXMub3V0ZXJIZWlnaHQoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiAoYm91bmRzLmJvdHRvbSA+IHZpZXdwb3J0Qm90dG9tKTsKKyAgICB9OworCisgICAgZnVuY3Rpb24gc2VsZWN0Um93KHBhdGgpIHsKKyAgICAgICAgdmFyIHJvdyAgPSAkKCd0cltkYXRhLXR0LWlkPSInICsgcGF0aCArICciXScpOworICAgICAgICByb3cuYWRkQ2xhc3MoIiBoaWdobGlnaHQiKTsKKyAgICAgICAgaWYgKHJvdy5pc09mZlNjcmVlbigpKSB7CisgICAgICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7IHNjcm9sbFRvcDogcm93Lm9mZnNldCgpLnRvcCAtIDE1MH0sIDIwMDApOworICAgICAgICB9CisgICAgfQorPC9zY3JpcHQ+CisKKzxkaXYgY2xhc3M9InNwYW4xMCI+CisKKyAgICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgICAgICAgIDxoMT4ge3t0YXJnZXQudGFyZ2V0fX0gPC9oMT4KKyAgICA8L2Rpdj4KKworICAgIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAndGFyZ2V0JyBidWlsZC5pZCB0YXJnZXQuaWQgJX0iPgorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9Ik9mIGFsbCB0aGUgcGFja2FnZXMgYnVpbHQsIHRoZSBzdWJzZXQgaW5zdGFsbGVkIGluIHRoZSByb290IGZpbGUgc3lzdGVtIG9mIHRoaXMgaW1hZ2UiPjwvaT4KKyAgICAgICAgICAgICAgICBQYWNrYWdlcyBpbmNsdWRlZCAoe3t0YXJnZXQucGFja2FnZV9jb3VudH19IC0ge3twYWNrYWdlc19zdW18ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpIGNsYXNzPSJhY3RpdmUiPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdkaXJpbmZvJyBidWlsZC5pZCB0YXJnZXQuaWQgJX0iPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGluIHRoZSByb290IGZpbGUgc3lzdGVtIG9mIHRoaXMgaW1hZ2UiPjwvaT4KKyAgICAgICAgICAgICAgICBEaXJlY3Rvcnkgc3RydWN0dXJlCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgPC91bD4KKworICAgIDxkaXYgaWQ9ImRpcmVjdG9yeS1zdHJ1Y3R1cmUiIGNsYXNzPSJ0YWItcGFuZSBhY3RpdmUiPgorICAgICAgICA8dGFibGUgaWQ9ImRpcnRhYmxlIiBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdHJlZXRhYmxlIj4KKyAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0aD5EaXJlY3RvcnkgLyBGaWxlPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPlN5bWJvbGljIGxpbmsgdG88L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+U291cmNlIHBhY2thZ2U8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+U2l6ZTwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD5QZXJtaXNzaW9uczwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD5Pd25lcjwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD5Hcm91cDwvdGg+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICA8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+CisgICAgICAgICAgICAgICAgc2V0dXBUcmVldGFibGUoKTsKKyAgICAgICAgICAgICAgICBhZGRSb3dzKG51bGwsIHt7IG9iamVjdHN8c2FmZSB9fSApOworICAgICAgICAgICAgICAgIHslIGlmIGZpbGVfcGF0aCAlfQorICAgICAgICAgICAgICAgICAgICB7JSBjb21tZW50ICV9CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rIGZyb20gcGFja2FnZV9pbmNsdWRlZF9kZXRhaWwgc3BlY2lmaWVzIGZpbGUgcGF0aAorICAgICAgICAgICAgICAgICAgICB7JSBlbmRjb21tZW50ICV9CisgICAgICAgICAgICAgICAgICAgIHslIGZvciBkaXJfZWxlbSBpbiBkaXJfbGlzdCAlfQorICAgICAgICAgICAgICAgICAgICAgICAgJCgiI2RpcnRhYmxlIikudHJlZXRhYmxlKCJleHBhbmROb2RlIiwgInt7ZGlyX2VsZW19fSIpOworICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0Um93KCJ7e2ZpbGVfcGF0aH19Iik7CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDwvc2NyaXB0PgorICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgPC90YWJsZT4KKyAgICA8L2Rpdj4gPCEtLSBkaXJlY3Rvcnktc3RydWN0dXJlIC0tPgorPC9kaXY+IDwhLS0gc3BhbjEwIC0tPgorCit7JSBlbmRibG9jayBidWlsZGluZm9tYWluICV9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kaXNraW8uaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kaXNraW8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWNlZjZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Rpc2tpby5odG1sCkBAIC0wLDAgKzEsNCBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQoreyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Cis8bGk+RGlzayBJL088L2xpPgoreyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9maWx0ZXJzbmlwcGV0Lmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZmlsdGVyc25pcHBldC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMDFhYTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZmlsdGVyc25pcHBldC5odG1sCkBAIC0wLDAgKzEsNTcgQEAKK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKzwhLS0gJ3t7Zi5jbGFzc319JyBmaWx0ZXIgLS0+Cit7JSB3aXRoIGYuY2xhc3MgYXMgIGtleSAlfQorPGZvcm0gaWQ9ImZpbHRlcl97e2YuY2xhc3N9fSIgY2xhc3M9Im1vZGFsIGhpZGUgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtaGlkZGVuPSJ0cnVlIj4KKyAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VhcmNoIiB2YWx1ZT0ieyVpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX17e3JlcXVlc3QuR0VULnNlYXJjaH19eyVlbmRpZiV9Ii8+CisgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+eDwvYnV0dG9uPgorICAgICAgICAgICAgeyUgaWYgc2VhcmNoX3Rlcm0gJX0KKyAgICAgICAgICAgICAgICAgPGgzPkZpbHRlciB7e3RvdGFsX2NvdW50fX0geyVpZiBmaWx0ZXJfc2VhcmNoX2Rpc3BsYXklfXt7ZmlsdGVyX3NlYXJjaF9kaXNwbGF5fHRpdGxlfX17JWVsc2UlfXt7b2JqZWN0bmFtZXx0aXRsZX19eyVlbmRpZiV9IG1hdGNoaW5nICd7e3NlYXJjaF90ZXJtfX0nIGJ5ICd7e3RjLm5hbWV9fSc8L2gzPgorICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgIDxoMz5GaWx0ZXIgeyVpZiBmaWx0ZXJfc2VhcmNoX2Rpc3BsYXklfXt7ZmlsdGVyX3NlYXJjaF9kaXNwbGF5fHRpdGxlfX17JWVsc2UlfXt7b2JqZWN0bmFtZXx0aXRsZX19eyVlbmRpZiV9IGJ5ICd7e3RjLm5hbWV9fSc8L2gzPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgICAgICAgPHA+e3tmLmxhYmVsfX08L3A+CisgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InJhZGlvIj4KKyAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9ImZpbHRlciIgeyVpZiByZXF1ZXN0LkdFVC5maWx0ZXIlfXt7Zi5vcHRpb25zfGNoZWNrX2ZpbHRlcl9zdGF0dXM6cmVxdWVzdC5HRVQuZmlsdGVyfX0geyVlbHNlJX0gY2hlY2tlZCB7JWVuZGlmJX0gdmFsdWU9IiIgZGF0YS1rZXk9Int7a2V5fX0iPiAgQWxsIHslaWYgZmlsdGVyX3NlYXJjaF9kaXNwbGF5JX17e2ZpbHRlcl9zZWFyY2hfZGlzcGxheXx0aXRsZX19eyVlbHNlJX17e29iamVjdG5hbWV8dGl0bGV9fXslZW5kaWYlfQorICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgIHslIGZvciBvcHRpb24gaW4gZi5vcHRpb25zICV9CisgICAgICAgICAgICAgICAgeyUgaWYgb3B0aW9uLjEgPT0gJ2RhdGVyYW5nZScgJX0KKyAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0taW5saW5lIj4KKyAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InJhZGlvIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJmaWx0ZXIiIGlkPSJmaWx0ZXJfdmFsdWVfe3trZXl9fSIgeyVpZiBrZXkgPT0gZGF0ZXJhbmdlX3NlbGVjdGVkICV9Y2hlY2tlZHslZW5kaWYlfSB2YWx1ZT0ie3tvcHRpb24uMX19IiBkYXRhLWtleT0ie3trZXl9fSI+IHt7b3B0aW9uLjB9fQorICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgIHslIGlmIDEgJX0KKyAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InJhZGlvIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJmaWx0ZXIiIHslaWYgcmVxdWVzdC5HRVQuZmlsdGVyID09IG9wdGlvbi4xICV9Y2hlY2tlZHslZW5kaWYlfSAgdmFsdWU9Int7b3B0aW9uLjF9fSIgZGF0YS1rZXk9Int7a2V5fX0iPiB7e29wdGlvbi4wfX0KKyAgICAgICAgICAgICAgICAgIHslIGNvbW1lbnQgImRvIG5vdCBkaXNhYmxlIHJhZGlvIHNlbGVjdGlvbnMgYnkgY291bnQgZm9yIG5vdyIgJX17JSBlbHNlICV9CisgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJyYWRpbyBtdXRlZCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZmlsdGVyIiBkaXNhYmxlZCB7JWlmIHJlcXVlc3QuR0VULmZpbHRlciA9PSBvcHRpb24uMSAlfWNoZWNrZWR7JWVuZGlmJX0gIHZhbHVlPSJ7e29wdGlvbi4xfX0iIGRhdGEta2V5PSJ7e2tleX19Ij4ge3tvcHRpb24uMH19CisgICAgICAgICAgICAgICAgICB7JSBlbmRjb21tZW50ICV9eyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgIHslIGlmIG9wdGlvbi4zICV9PGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgZGF0YS1wbGFjZW1lbnQ9InJpZ2h0IiB0aXRsZT0ie3tvcHRpb24uM319Ij48L2k+eyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgeyUgaWYgb3B0aW9uLjEgPT0gJ2RhdGVyYW5nZScgJX0KKyAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZGF0ZV9mcm9tX3t7a2V5fX0iIG5hbWU9ImRhdGVfZnJvbV97e2tleX19IiBkaXNhYmxlZCBjbGFzcz0iaW5wdXQtc21hbGwiIC8+PGxhYmVsIGNsYXNzPSJoZWxwLWlubGluZSI+dG88L2xhYmVsPgorICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJkYXRlX3RvX3t7a2V5fX0iIG5hbWU9ImRhdGVfdG9fe3trZXl9fSIgZGlzYWJsZWQgY2xhc3M9ImlucHV0LXNtYWxsIiAgLz4KKyAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iaGVscC1pbmxpbmUgZ2V0LWhlbHAiID4oZGQvbW0veXl5eSk8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICA8IS0tIGRhdGVyYW5nZSBwZXJzaXN0ZW5jZSAtLT4KKyAgICAgICAgeyUgaWYgbGFzdF9kYXRlX2Zyb20gYW5kIGxhc3RfZGF0ZV90byAlfQorICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0ibGFzdF9kYXRlX2Zyb21fe3trZXl9fSIgbmFtZT0ibGFzdF9kYXRlX2Zyb20iIHZhbHVlPSJ7e2xhc3RfZGF0ZV9mcm9tfX0iLz4KKyAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9Imxhc3RfZGF0ZV90b197e2tleX19IiBuYW1lPSJsYXN0X2RhdGVfdG8iICAgdmFsdWU9Int7bGFzdF9kYXRlX3RvfX0iLz4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CisgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgZGF0YS1rZXk9Int7a2V5fX0iPkFwcGx5PC9idXR0b24+CisgICAgICAgICAgICB7JSBpZiByZXF1ZXN0LkdFVC5maWx0ZXIgJX0KKyAgICAgICAgICAgICAgICB7JSBpZiByZXF1ZXN0LkdFVC5maWx0ZXJ8c3RyaW5nX3JlbW92ZV9yZWdleDonOi4qJyAhPSBmLm9wdGlvbnMuMC4xfHN0cmluZ19yZW1vdmVfcmVnZXg6JzouKicgJX0KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUgcHVsbC1sZWZ0Ij5Zb3UgY2FuIG9ubHkgYXBwbHkgb25lIGZpbHRlciB0byB0aGUgdGFibGUuIFRoaXMgZmlsdGVyIHdpbGwgb3ZlcnJpZGUgdGhlIGN1cnJlbnQgZmlsdGVyLjwvc3Bhbj4KKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC9kaXY+Cis8L2Zvcm0+Cit7JSBlbmR3aXRoICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZ2VuZXJpYy10b2FzdGVydGFibGUtcGFnZS5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2dlbmVyaWMtdG9hc3RlcnRhYmxlLXBhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2FhOGNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2dlbmVyaWMtdG9hc3RlcnRhYmxlLXBhZ2UuaHRtbApAQCAtMCwwICsxLDE3IEBACit7JSBleHRlbmRzICJiYXNlcHJvamVjdHBhZ2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGxvYWQgc3RhdGljICV9CisKK3slIGJsb2NrIHByb2plY3RpbmZvbWFpbiAlfQorCis8aDI+e3t0aXRsZX19ICg8c3BhbiBjbGFzcz0idGFibGUtY291bnQte3t0YWJsZV9uYW1lfX0iPjwvc3Bhbj4pCisgIHslIGlmIHByb2plY3QucmVsZWFzZSAlfQorICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhlYWRpbmctaGVscCIgdGl0bGU9IlRoaXMgcGFnZSBsaXN0cyB7e3RpdGxlfX0gY29tcGF0aWJsZSB3aXRoIHRoZSByZWxlYXNlIHNlbGVjdGVkIGZvciB0aGlzIHByb2plY3QsIHdoaWNoIGlzIHt7cHJvamVjdC5yZWxlYXNlLmRlc2NyaXB0aW9ufX0iPjwvaT4KKyAgeyUgZW5kaWYgJX0KKzwvaDI+CisKK3slIHVybCB0YWJsZV9uYW1lIHByb2plY3QuaWQgYXMgeGhyX3RhYmxlX3VybCAlfQoreyUgaW5jbHVkZSAidG9hc3RlcnRhYmxlLmh0bWwiICV9CisKK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvaW1wb3J0bGF5ZXIuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9pbXBvcnRsYXllci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlM2Q3MjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvaW1wb3J0bGF5ZXIuaHRtbApAQCAtMCwwICsxLDEzOCBAQAoreyUgZXh0ZW5kcyAiYmFzZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQoreyUgbG9hZCBzdGF0aWMgJX0KK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKK3slIGluY2x1ZGUgInByb2plY3R0b3BiYXIuaHRtbCIgJX0KKworCisgICAgICAgIHslIGlmIHByb2plY3QgYW5kIHByb2plY3QucmVsZWFzZSAlfQorICAgICAgICAgICAgICAgICAgPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvbGF5ZXJEZXBzTW9kYWwuanMnICV9Ij48L3NjcmlwdD4KKyAgICAgICAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2ltcG9ydGxheWVyLmpzJyAlfSI+PC9zY3JpcHQ+CisgICAgICAgICAgICAgICAgICA8c2NyaXB0PgorICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKXsKKyAgICAgICAgICAgICAgICAgICAgICB2YXIgY3R4ID0geworICAgICAgICAgICAgICAgICAgICAgICAgeGhySW1wb3J0TGF5ZXJVcmwgOiAieyUgdXJsICd4aHJfaW1wb3J0bGF5ZXInICV9IiwKKyAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydExheWVyUGFnZUluaXQoY3R4KTsKKyAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC53cml0ZSgiU29ycnksIEFuIGVycm9yIGhhcyBvY2N1cnJlZCBsb2FkaW5nIHRoaXMgcGFnZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGUpOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICA8L3NjcmlwdD4KKworICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPSJzcGFuMTEiPgorICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldD4KKyAgICAgICAgICAgICAgICAgICAgICA8bGVnZW5kPkxheWVyIHJlcG9zaXRvcnkgaW5mb3JtYXRpb248L2xlZ2VuZD4KKyAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayI+VGhlIGxheWVyIHlvdSBhcmUgaW1wb3J0aW5nIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIDxzdHJvbmc+e3twcm9qZWN0LnJlbGVhc2UuZGVzY3JpcHRpb259fTwvc3Ryb25nPiwgd2hpY2ggaXMgdGhlIHJlbGVhc2UgeW91IGFyZSB1c2luZyBpbiB0aGlzIHByb2plY3QuPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWVycm9yIiBpZD0iaW1wb3J0LWVycm9yIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0iYWxlcnQiPiZ0aW1lczs8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4mbmJzcDs8L2gzPgorICAgICAgICAgICAgICAgICAgICAgICAgPHA+PC9wPgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsPjwvdWw+CisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIiBpZD0ibGF5ZXItbmFtZS1jdHJsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iY29udHJvbC1sYWJlbCBhaXIiIGZvcj0iaW1wb3J0LWxheWVyLW5hbWUiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheWVyIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iU29tZXRoaW5nIGxpa2UgJ21ldGEtbXlsYXllcicuIFlvdXIgbGF5ZXIgbmFtZSBtdXN0IGJlIHVuaXF1ZSBhbmQgY2FuIG9ubHkgaW5jbHVkZSBsZXR0ZXJzLCBudW1iZXJzIGFuZCBkYXNoZXMiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iaW1wb3J0LWxheWVyLW5hbWUiIHR5cGU9InRleHQiIHJlcXVpcmVkIGF1dG9mb2N1cyBkYXRhLWF1dG9jb21wbGV0ZT0ib2ZmIiBkYXRhLXByb3ZpZGU9InR5cGVhaGVhZCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IiBpZD0iaW52YWxpZC1sYXllci1uYW1lLWhpbnQiPkEgdmFsaWQgbGF5ZXIgbmFtZSBjYW4gb25seSBpbmNsdWRlIGxldHRlcnMsIG51bWJlcnMgYW5kIGRhc2hlczwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiIGlkPSJkdXBsaWNhdGVkLWxheWVyLW5hbWUtaGludCI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJkdXBsaWNhdGUtbGF5ZXItaW5mbyIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCB3YXJuaW5nIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkEgbGF5ZXIgY2FsbGVkIDxhIGhyZWY9IiIgY2xhc3M9ImR1cC1sYXllci1saW5rIj48c3BhbiBjbGFzcz0iZHVwLWxheWVyLW5hbWUiPjwvc3Bhbj48L2E+IGFscmVhZHkgZXhpc3RzPC9oMz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+TGF5ZXIgbmFtZXMgbXVzdCBiZSB1bnFpdWUuIFBsZWFzZSB1c2UgYSBkaWZmZXJlbnQgbGF5ZXIgbmFtZS48L3A+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8c3BhbiBjbGFzcz0iZHVwLWxheWVyLW5hbWUiPjwvc3Bhbj4gcmVwb3NpdG9yeSB1cmwgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJkdXAtbGF5ZXItdmNzLXVybCI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RkPgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPHNwYW4gY2xhc3M9ImR1cC1sYXllci1uYW1lIj48L3NwYW4+IHJldmlzaW9uIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iZHVwLWxheWVyLXJldmlzaW9uIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2RsPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cD48YSBocmVmPSIiIGNsYXNzPSJkdXAtbGF5ZXItbGluayI+VmlldyB0aGUgPHNwYW4gY2xhc3M9ImR1cC1sYXllci1uYW1lIj48L3NwYW4+IGxheWVyIGluZm9ybWF0aW9uPC9hPjwvcD4KKworICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmllbGRzLWFwYXJ0LWZyb20tbGF5ZXItbmFtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJsYXllci1naXQtcmVwby11cmwiIGNsYXNzPSJwcm9qZWN0LWZvcm0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5IFVSTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJGZXRjaC9jbG9uZSBVUkwgb2YgdGhlIHJlcG9zaXRvcnkuIEN1cnJlbnRseSwgVG9hc3RlciBvbmx5IHN1cHBvcnRzIEdpdCByZXBvc2l0b3JpZXMuIiA+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKworICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJsYXllci1naXQtcmVwby11cmwiIGNsYXNzPSJpbnB1dC14eGxhcmdlIiByZXF1aXJlZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0icHJvamVjdC1mb3JtIiBmb3I9ImxheWVyLXN1YmRpciI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3NpdG9yeSBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibXV0ZWQiPihvcHRpb25hbCk8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlN1YmRpcmVjdG9yeSB3aXRoaW4gdGhlIHJlcG9zaXRvcnkgd2hlcmUgdGhlIGxheWVyIGlzIGxvY2F0ZWQsIGlmIG5vdCBpbiB0aGUgcm9vdCAodXN1YWxseSBvbmx5IHVzZWQgaWYgdGhlIHJlcG9zaXRvcnkgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBsYXllcikiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgIGlkPSJsYXllci1zdWJkaXIiPgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiIGlkPSJsYXllci1yZXZpc2lvbi1jdHJsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImNvbnRyb2wtbGFiZWwgcHJvamVjdC1mb3JtIiBmb3I9ImxheWVyLWdpdC1yZWYiPlJldmlzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iWW91IGNhbiBwcm92aWRlIGEgR2l0IGJyYW5jaCwgYSB0YWcgb3IgYSBjb21taXQgU0hBIGFzIHRoZSByZXZpc2lvbiI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJzcGFuMyIgaWQ9ImxheWVyLWdpdC1yZWYiIHJlcXVpcmVkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJkaWFwbHk6bm9uZTsiIGlkPSJpbnZhbGlkLWxheWVyLXJldmlzaW9uLWhpbnQiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CisKKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmllbGRzLWFwYXJ0LWZyb20tbGF5ZXItbmFtZSI+CisgICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iYWlyIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsZWdlbmQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5ZXIgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im11dGVkIj4ob3B0aW9uYWwpPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaGVhZGluZy1oZWxwIiB0aXRsZT0iT3RoZXIgbGF5ZXJzIHRoaXMgbGF5ZXIgZGVwZW5kcyB1cG9uIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xlZ2VuZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0idW5zdHlsZWQgY29uZmlndXJhdGlvbi1saXN0IiBpZD0ibGF5ZXItZGVwcy1saXN0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgZGF0YS1taW5MZW5ndGg9IjEiIGRhdGEtYXV0b2NvbXBsZXRlPSJvZmYiIGRhdGEtcHJvdmlkZT0idHlwZWFoZWFkIiBwbGFjZWhvbGRlcj0iVHlwZSBhIGxheWVyIG5hbWUiIGlkPSJsYXllci1kZXBlbmRlbmN5IiBjbGFzcz0iaW5wdXQteGxhcmdlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIiBpZD0iYWRkLWxheWVyLWRlcGVuZGVuY3ktYnRuIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIGxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiPllvdSBjYW4gb25seSBhZGQgbGF5ZXJzIFRvYXN0ZXIga25vd3MgYWJvdXQ8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFpciIgaWQ9ImZvcm0tYWN0aW9ucyI+CisgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sYXJnZSIgZGF0YS10b2dnbGU9Im1vZGFsIiBpZD0iaW1wb3J0LWFuZC1hZGQtYnRuIiBkYXRhLXRhcmdldD0iI2RlcGVuZGVuY2llcy1tZXNzYWdlIiBkaXNhYmxlZD5JbXBvcnQgYW5kIGFkZCB0byBwcm9qZWN0PC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIGlkPSJpbXBvcnQtYW5kLWFkZC1oaW50IiBzdHlsZT0idmVydGljYWwtYWxpZ246IG1pZGRsZTsiPlRvIGltcG9ydCBhIGxheWVyIHlvdSBuZWVkIHRvIGVudGVyIGEgbGF5ZXIgbmFtZSwgYSBHaXQgcmVwb3NpdG9yeSBVUkwgYW5kIGEgcmV2aXNpb24gKGJyYW5jaCwgdGFnIG9yIGNvbW1pdCk8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICA8L2Zvcm0+CisKKyAgICAgICAgICB7JSBlbHNlICV9IHsjcHJvamVjdCBhbmQgcHJvamVjdCByZWxlYXNlI30KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgICAgICAgICAgICAgICAgICAgIDxoMT5JbXBvcnQgbGF5ZXI8L2gxPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iIGlkPSJpbXBvcnQtZXJyb3IiID4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5VbnN1cHBvcnRlZCBwcm9qZWN0IHR5cGU8L2gzPgorICAgICAgICAgICAgICAgICAgICAgICAgPHA+VGhpcyBwcm9qZWN0IGRvZXMgbm90IHN1cHBvcnQgaW1wb3J0aW5nIGxheWVycy48L3A+CisgICAgICAgICAgICAgICAgICAgICAgICA8dWw+PC91bD4KKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgIHslIGVuZGlmICV9Cit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2pzLXVuaXQtdGVzdHMuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9qcy11bml0LXRlc3RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI4ZmQ4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9qcy11bml0LXRlc3RzLmh0bWwKQEAgLTAsMCArMSwzOSBAQAoreyUgZXh0ZW5kcyAiYmFzZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQoreyUgbG9hZCBzdGF0aWMgJX0KK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vcXVuaXQvcXVuaXQtMS4xOC4wLmNzcyIgLz4KKworPHNjcmlwdCBzcmM9Ii8vY29kZS5qcXVlcnkuY29tL3F1bml0L3F1bml0LTEuMTguMC5qcyI+PC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2xheWVyRGVwc01vZGFsLmpzJyAlfSI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9wcm9qZWN0cGFnZS5qcycgJX0iPjwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9ib290c3RyYXAubWluLmpzJyAlfSI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9maWx0ZXJzbmlwcGV0LmpzJyAlfSI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9pbXBvcnRsYXllci5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvcHJldHRpZnkuanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2xheWVyQnRuLmpzJyAlfSI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9sYXllckRlcHNNb2RhbC5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvcHJvamVjdHBhZ2UuanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2xheWVyZGV0YWlscy5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvdGFibGUuanMnICV9Ij48L3NjcmlwdD4KKworPHNjcmlwdD4KKyAgdmFyIHRhYmxlVXJsID0gJ3slIHVybCAncHJvamVjdGxheWVycycgcHJvamVjdC5wayAlfSc7Cis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvdGVzdHMvdGVzdC5qcycgJX0iPjwvc2NyaXB0PgorCis8ZGl2IGlkPSJxdW5pdCI+PC9kaXY+CisKKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ibGF5ZXJzIiBwbGFjZWhvbGRlcj0ibGF5ZXJzIiA+PC9pbnB1dD4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icmVjaXBlcyIgcGxhY2Vob2xkZXI9InJlY2lwZXMiPjwvaW5wdXQ+Cis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InByb2plY3RzIiBwbGFjZWhvbGRlcj0icHJvamVjdHMiPjwvaW5wdXQ+Cis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Im1hY2hpbmVzIiBwbGFjZWhvbGRlcj0ibWFjaGluZXMiPjwvaW5wdXQ+CisKK3slIGVuZGJsb2NrICV9CisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xhbmRpbmcuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYW5kaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVlOTUzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYW5kaW5nLmh0bWwKQEAgLTAsMCArMSw1OCBAQAoreyUgZXh0ZW5kcyAiYmFzZS5odG1sIiAlfQorCit7JSBsb2FkIHN0YXRpYyAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQorCit7JSBibG9jayBwYWdlY29udGVudCAlfQorCisgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CisgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICAgIDwhLS0gRW1wdHkgLSBubyBkYXRhIGluIGRhdGFiYXNlIC0tPgorICAgIDxkaXYgY2xhc3M9Imhlcm8tdW5pdCBzcGFuMTIgd2VsbC10cmFuc3BhcmVudCI+CisgICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICA8ZGl2IGNsYXNzPSJzcGFuNiI+CisgICAgICAgPGgxPgorICAgICAgICBUaGlzIGlzIFRvYXN0ZXIKKyAgICAgICA8L2gxPgorICAgICAgIDxwPkEgd2ViIGludGVyZmFjZSB0byA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5lbWJlZGRlZC5vcmciPk9wZW5FbWJlZGRlZDwvYT4gYW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvYml0YmFrZSI+Qml0QmFrZTwvYT4sIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmciPllvY3RvIFByb2plY3Q8L2E+IGJ1aWxkIHN5c3RlbS48L3A+CisKKworCQl7JSBpZiBsdnNfbm9zICV9CisJCSAgICA8cCBjbGFzcz0iaGVyby1hY3Rpb25zIj4KKwkJCSAgICA8YSBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sYXJnZSIgaHJlZj0ieyUgdXJsICduZXdwcm9qZWN0JyAlfSI+CisJCQkJICAgIFRvIHN0YXJ0IGJ1aWxkaW5nLCBjcmVhdGUgeW91ciBmaXJzdCBUb2FzdGVyIHByb2plY3QKKwkJCSAgICA8L2E+CisJCSAgICA8L3A+CisJCXslIGVsc2UgJX0KKwkJICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gbGVhZCBhaXIiPgorCQkJICAgIFRvYXN0ZXIgaGFzIG5vIGxheWVyIGluZm9ybWF0aW9uLiBXaXRob3V0IGxheWVyIGluZm9ybWF0aW9uLCB5b3UgY2Fubm90IHJ1biBidWlsZHMuIFRvIGdlbmVyYXRlIGxheWVyIGluZm9ybWF0aW9uIHlvdSBjYW46CisJCQkgICAgPHVsPgorCQkJICAgICAgICA8bGk+CisJCQkgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9sYXRlc3QvdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwuaHRtbCNsYXllci1zb3VyY2UiPkNvbmZpZ3VyZSBhIGxheWVyIHNvdXJjZTwvYT4KKwkJCSAgICAgICAgPC9saT4KKwkJCSAgICAgICAgPGxpPgorCQkJICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICduZXdwcm9qZWN0JyAlfSI+Q3JlYXRlIGEgcHJvamVjdDwvYT4sIHRoZW4gaW1wb3J0IGxheWVycworCQkJICAgICAgICA8L2xpPgorCQkJICAgIDwvdWw+CisJCSAgICA8L2Rpdj4KKwkgICAgICAgIHslIGVuZGlmICV9CisKKyAgICAgICAgPHVsIGNsYXNzPSJ1bnN0eWxlZCI+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvbGF0ZXN0L3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLmh0bWwiPlJlYWQgdGhlIFRvYXN0ZXIgbWFudWFsPC9hPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL0NvbnRyaWJ1dGVfdG9fVG9hc3RlciI+Q29udHJpYnV0ZSB0byBUb2FzdGVyPC9hPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgPC91bD4KKworICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJzcGFuNiI+CisgICAgICAgICAgPGltZyBhbHQ9IllvY3RvIFByb2plY3QiIGNsYXNzPSJ0aHVtYm5haWwiIHNyYz0ieyUgc3RhdGljICdpbWcvdG9hc3Rlcl9idy5wbmcnICV9Ii8+CisgICAgICA8L2Rpdj4KKyAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgICA8L2Rpdj4KKworeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYW5kaW5nX25vdF9tYW5hZ2VkLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGFuZGluZ19ub3RfbWFuYWdlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYzQzNWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGFuZGluZ19ub3RfbWFuYWdlZC5odG1sCkBAIC0wLDAgKzEsMzIgQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KKworeyUgbG9hZCBzdGF0aWMgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KKworeyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KKworICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPgorICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICA8IS0tIEVtcHR5IC0gbm8gYnVpbGQgbW9kdWxlIC0tPgorICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIHRvcC1haXIiPgorICAgICA8aDE+CisgICAgICAgVGhpcyBwYWdlIG9ubHkgd29ya3Mgd2l0aCBUb2FzdGVyIGluICdCdWlsZCcgbW9kZQorICAgICA8L2gxPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gbGVhZCI+CisgICAgIDxwIj4KKyAgICAgVGhlICdCdWlsZCcgbW9kZSBhbGxvd3MgeW91IHRvIGNvbmZpZ3VyZSBhbmQgcnVuIHlvdXIgWW9jdG8gUHJvamVjdCBidWlsZHMgZnJvbSBUb2FzdGVyLgorICAgICA8dWw+CisgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2xhdGVzdC90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC5odG1sI2ludHJvLW1vZGVzIj4KKyAgICAgICBSZWFkIGFib3V0IHRoZSAnQnVpbGQnIG1vZGUKKyAgICAgICA8L2E+PC9saT4KKyAgICAgICA8bGk+PGEgaHJlZj0iLyI+CisgICAgICAgVmlldyB5b3VyIGJ1aWxkcworICAgICAgIDwvYT48L2xpPgorICAgICA8L3VsPgorICAgICA8L3A+CisgICAgPC9kaXY+CisgICA8L2Rpdj4KKworeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYXllcl9idG4uaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYXllcl9idG4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmU5MzkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xheWVyX2J0bi5odG1sCkBAIC0wLDAgKzEsOSBAQAorPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kYW5nZXIgYnRuLWJsb2NrIGxheWVyLWV4aXN0cy17e2RhdGEucGt9fSBsYXllcmJ0biIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiIGRhdGEtbGF5ZXI9J3sgImlkIjoge3tkYXRhLnBrfX0sICJuYW1lIjogICJ7e2RhdGEubGF5ZXIubmFtZX19IiwgImxheWVyZGV0YWlsdXJsIjogInsldXJsICdsYXllcmRldGFpbHMnIGV4dHJhLnBpZCBkYXRhLnBrJX0ifScgZGF0YS1kaXJlY3RpdmU9InJlbW92ZSIgPgorICA8aSBjbGFzcz0iaWNvbi10cmFzaCI+PC9pPgorICBEZWxldGUgbGF5ZXIKKzwvYnV0dG9uPgorPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibG9jayBsYXllci1hZGQte3tkYXRhLnBrfX0gbGF5ZXJidG4iIGRhdGEtbGF5ZXI9J3sgImlkIjoge3tkYXRhLnBrfX0sICJuYW1lIjogICJ7e2RhdGEubGF5ZXIubmFtZX19IiwgImxheWVyZGV0YWlsdXJsIjogInsldXJsICdsYXllcmRldGFpbHMnIGV4dHJhLnBpZCBkYXRhLnBrJX0ifScgZGF0YS1kaXJlY3RpdmU9ImFkZCI+CisgIDxpIGNsYXNzPSJpY29uLXBsdXMiPjwvaT4KKyAgQWRkIGxheWVyCis8L2J1dHRvbj4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xheWVyZGV0YWlscy5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xheWVyZGV0YWlscy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZDNkYjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGF5ZXJkZXRhaWxzLmh0bWwKQEAgLTAsMCArMSwyNzYgQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGxvYWQgc3RhdGljICV9CisKK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiPgorICAgIDxsaSBjbGFzcz0ibXV0ZWQiPnt7cHJvamVjdC5uYW1lfX06PC9saT4KKyAgICA8bGk+CisgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIHByb2plY3QuaWQgJX0iPkNvbmZpZ3VyYXRpb248L2E+CisgICAgICA8c3BhbiBjbGFzcz0iZGl2aWRlciI+JnJhcnI7PC9zcGFuPgorICAgIDwvbGk+CisgICAgPGxpPjxhIGhyZWY9InslIHVybCAncHJvamVjdGxheWVycycgcHJvamVjdC5pZCAlfSI+Q29tcGF0aWJsZSBsYXllcnM8L2E+CisgICAgICA8c3BhbiBjbGFzcz0iZGl2aWRlciI+JnJhcnI7PC9zcGFuPgorICAgIDwvbGk+CisgICAgPGxpIGNsYXNzPSJhY3RpdmUiPgorICAgICAge3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19ICh7e2xheWVydmVyc2lvbi5nZXRfdmNzX3JlZmVyZW5jZXx0cnVuY2F0ZWNoYXJzOjEzfX0pCisgICAgPC9saT4KKyAgPC91bD4KKzwvZGl2PgorCit7IyBJZiB0aGlzIGlzIG5vdCBhbiBpbXBvcnRlZCBsYXllciB0aGVuIGhpZGUgdGhlIGVkaXQgdWkgI30KK3slIGlmIG5vdCBsYXllcnZlcnNpb24ubGF5ZXJfc291cmNlX2lkIG9yIGxheWVydmVyc2lvbi5sYXllcl9zb3VyY2Uuc291cmNldHlwZSAhPSBsYXllcnZlcnNpb24ubGF5ZXJfc291cmNlLlRZUEVfSU1QT1JURUQgJX0KKzxzdHlsZSBzY29wZWQ+CisgLmljb24tcGVuY2lsIHsKKyAgIGRpc3BsYXk6bm9uZTsKKyB9CisuZGVsZXRlLWN1cnJlbnQtdmFsdWV7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisgbGkgLmljb24tdHJhc2ggeworICAgZGlzcGxheTpub25lOworIH0KKyAuYWRkLWRlcHMgeworICAgZGlzcGxheTpub25lOworIH0KKzwvc3R5bGU+Cit7JSBlbmRpZiAlfQorCisKKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2xheWVyZGV0YWlscy5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdD4KKworICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKXsKKyAgICB2YXIgY3R4ID0geworICAgICAgcHJvamVjdEJ1aWxkc1VybCA6ICJ7JSB1cmwgJ3Byb2plY3RidWlsZHMnIHByb2plY3QuaWQgJX0iLAorICAgICAgeGhyVXBkYXRlTGF5ZXJVcmwgOiAieyUgdXJsICd4aHJfdXBkYXRlbGF5ZXInICV9IiwKKyAgICAgIGxheWVyVmVyc2lvbiA6IHsKKyAgICAgICAgbmFtZSA6ICJ7e2xheWVydmVyc2lvbi5sYXllci5uYW1lfX0iLAorICAgICAgICBpZCA6IHt7bGF5ZXJ2ZXJzaW9uLmlkfX0sCisgICAgICAgIGNvbW1pdDogInt7bGF5ZXJ2ZXJzaW9uLmdldF92Y3NfcmVmZXJlbmNlfX0iLAorICAgICAgeyVpZiBsYXllcnZlcnNpb24uaWQgaW4gcHJvamVjdGxheWVycyAlfQorICAgICAgICBpbkN1cnJlbnRQcmogOiB0cnVlLAorICAgICAgeyUgZWxzZSAlfQorICAgICAgICBpbkN1cnJlbnRQcmogOiBmYWxzZSwKKyAgICAgIHslIGVuZGlmICV9CisgICAgICAgIGxheWVyZGV0YWlsdXJsIDogInslIHVybCAnbGF5ZXJkZXRhaWxzJyBwcm9qZWN0LmlkIGxheWVydmVyc2lvbi5pZCAgJX0iLAorICAgICAgICBzb3VyY2VJZDoge3tsYXllcnZlcnNpb24ubGF5ZXJfc291cmNlX2lkfGpzb259fSwKKyAgICAgIH0KKyAgICB9OworCisgICAgdHJ5IHsKKyAgICAgIGxheWVyRGV0YWlsc1BhZ2VJbml0KGN0eCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgZG9jdW1lbnQud3JpdGUoIlNvcnJ5LCBBbiBlcnJvciBoYXMgb2NjdXJyZWQgbG9hZGluZyB0aGlzIHBhZ2UiKTsKKyAgICAgIGNvbnNvbGUud2FybihlKTsKKyAgICB9CisgIH0pOworPC9zY3JpcHQ+CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuMTEiPgorICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgICAgPGgxPnt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSA8c21hbGwgY2xhc3M9ImNvbW1pdCIKKyAgICAgICAgICB7JSBpZiBsYXllcnZlcnNpb24uZ2V0X3Zjc19yZWZlcmVuY2V8bGVuZ3RoID4gMTMgJX0KKyAgICAgICAgZGF0YS10b2dnbGU9InRvb2x0aXAiIHRpdGxlPSJ7e2xheWVydmVyc2lvbi5nZXRfdmNzX3JlZmVyZW5jZX19IgorICAgICAgICB7JSBlbmRpZiAlfT4KKyAgICAgICAgKHt7bGF5ZXJ2ZXJzaW9uLmdldF92Y3NfcmVmZXJlbmNlfHRydW5jYXRlY2hhcnM6MTN9fSk8L3NtYWxsPjwvaDE+CisgIDwvZGl2PgorPC9kaXY+CisKKzwhLS0gY29udGFpbmVyIGZvciB0YWJzIC0tPgorPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW43IHRhYmJhYmxlIj4KKyAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyBsZWFkIiBpZD0iYWxlcnQtYXJlYSIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgaWQ9ImRpc21pc3MtYWxlcnQiPiZ0aW1lczs8L2J1dHRvbj4KKyAgICA8c3BhbiBpZD0iYWxlcnQtbXNnIj48L3NwYW4+CisgIDwvZGl2PgorICA8dWwgY2xhc3M9Im5hdiBuYXYtcGlsbHMiPgorICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4KKyAgICAgIDxhIGRhdGEtdG9nZ2xlPSJ0YWIiIGhyZWY9IiNpbmZvcm1hdGlvbiIgaWQ9ImRldGFpbHMtdGFiIj5MYXllciBkZXRhaWxzPC9hPgorICAgIDwvbGk+CisgICAgPGxpPgorICAgICAgPGEgZGF0YS10b2dnbGU9InRhYiIgaHJlZj0iI3JlY2lwZXMiIGNsYXNzPSJtdXRlZCIgaWQ9InRhcmdldHMtdGFiIj5SZWNpcGVzICg8c3BhbiBjbGFzcz0idGFibGUtY291bnQtcmVjaXBlc3RhYmxlIj48L3NwYW4+KTwvYT4KKyAgICA8L2xpPgorICAgIDxsaT4KKyAgICAgIDxhIGRhdGEtdG9nZ2xlPSJ0YWIiIGhyZWY9IiNtYWNoaW5lcyIgY2xhc3M9Im11dGVkIiBpZD0ibWFjaGluZXMtdGFiIj5NYWNoaW5lcyAoPHNwYW4gY2xhc3M9InRhYmxlLWNvdW50LW1hY2hpbmVzdGFibGUiPjwvc3Bhbj4pPC9hPgorICAgIDwvbGk+CisgIDwvdWw+CisgIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij4KKyAgICA8c3BhbiBjbGFzcz0iYnV0dG9uLXBsYWNlIj4KKyAgICAgIHslIGlmIGxheWVydmVyc2lvbi5pZCBub3QgaW4gcHJvamVjdGxheWVycyAlfQorICAgICAgPGJ1dHRvbiBpZD0iYWRkLXJlbW92ZS1sYXllci1idG4iIGRhdGEtZGlyZWN0aXZlPSJhZGQiIGNsYXNzPSJidG4gYnRuLWxhcmdlIGJ0bi1ibG9jayI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLXBsdXMiPjwvc3Bhbj4KKyAgICAgICAgQWRkIHRoZSB7e2xheWVydmVyc2lvbi5sYXllci5uYW1lfX0gbGF5ZXIgdG8geW91ciBwcm9qZWN0CisgICAgICA8L2J1dHRvbj4KKyAgICAgIHslIGVsc2UgJX0KKyAgICAgIDxidXR0b24gaWQ9ImFkZC1yZW1vdmUtbGF5ZXItYnRuIiBkYXRhLWRpcmVjdGl2ZT0icmVtb3ZlIiBjbGFzcz0iYnRuIGJ0bi1ibG9jayBidG4tbGFyZ2UgYnRuLWRhbmdlciI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLXRyYXNoIj48L3NwYW4+CisgICAgICAgIERlbGV0ZSB0aGUge3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19IGxheWVyIGZyb20geW91ciBwcm9qZWN0CisgICAgICA8L2J1dHRvbj4KKyAgICAgIHslIGVuZGlmICV9CisgICAgPC9zcGFuPgorCisgICAgPCEtLSBsYXllciBkZXRhaWxzIHBhbmUgLS0+CisgICAgPGRpdiBpZD0iaW5mb3JtYXRpb24iIGNsYXNzPSJ0YWItcGFuZSBhY3RpdmUiPgorICAgICAgPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KKyAgICAgICAgPGR0IGNsYXNzPSIiPgorICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJGZXRjaC9jbG9uZSBVUkwgb2YgdGhlIHJlcG9zaXRvcnkiPjwvaT4KKyAgICAgICAgICBSZXBvc2l0b3J5IFVSTAorICAgICAgICA8L2R0PgorICAgICAgICA8ZGQ+CisgICAgICAgICAgPHNwYW4gY2xhc3M9ImN1cnJlbnQtdmFsdWUiPnt7bGF5ZXJ2ZXJzaW9uLmxheWVyLnZjc191cmx9fTwvc3Bhbj4KKyAgICAgICAgICB7JSBpZiBsYXllcnZlcnNpb24uZ2V0X3Zjc19saW5rX3VybCAlfQorICAgICAgICAgIDxhIGhyZWY9Int7bGF5ZXJ2ZXJzaW9uLmdldF92Y3NfbGlua191cmx9fS8iIGNsYXNzPSJpY29uLXNoYXJlIGdldC1pbmZvIiB0YXJnZXQ9Il9ibGFuayI+PC9hPgorICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgPGZvcm0gaWQ9ImNoYW5nZS1yZXBvLWZvcm0iIGNsYXNzPSJjb250cm9sLWdyb3VwIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXQteGxhcmdlIiB2YWx1ZT0ie3tsYXllcnZlcnNpb24ubGF5ZXIudmNzX3VybH19Ij4KKyAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtbGF5ZXItcHJvcD0idmNzX3VybCIgY2xhc3M9ImJ0biBjaGFuZ2UtYnRuIiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBzdHlsZT0iZGlzcGxheTpub25lIiBjbGFzcz0iYnRuIGJ0bi1saW5rIGNhbmNlbCI+Q2FuY2VsPC9hPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXBlbmNpbCIgPjwvaT4KKyAgICAgICAgICA8L2RkPgorICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJTdWJkaXJlY3Rvcnkgd2l0aGluIHRoZSByZXBvc2l0b3J5IHdoZXJlIHRoZSBsYXllciBpcyBsb2NhdGVkLCBpZiBub3QgaW4gdGhlIHJvb3QgKHVzdWFsbHkgb25seSB1c2VkIGlmIHRoZSByZXBvc2l0b3J5IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgbGF5ZXIpIj48L2k+CisgICAgICAgICAgICBSZXBvc2l0b3J5IHN1YmRpcmVjdG9yeQorICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgPGRkPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im11dGVkIiBzdHlsZT0iZGlzcGxheTpub25lIj5Ob3Qgc2V0PC9zcGFuPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImN1cnJlbnQtdmFsdWUiPnt7bGF5ZXJ2ZXJzaW9uLmRpcnBhdGh9fTwvc3Bhbj4KKyAgICAgICAgICAgIHslIGlmIGxheWVydmVyc2lvbi5nZXRfdmNzX2RpcnBhdGhfbGlua191cmwgJX0KKyAgICAgICAgICAgIDxhIGhyZWY9Int7bGF5ZXJ2ZXJzaW9uLmdldF92Y3NfZGlycGF0aF9saW5rX3VybH19IiBjbGFzcz0iaWNvbi1zaGFyZSBnZXQtaW5mbyIgdGFyZ2V0PSJfYmxhbmsiPjwvYT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8Zm9ybSBpZD0iY2hhbmdlLXN1YmRpci1mb3JtIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHZhbHVlPSJ7e2xheWVydmVyc2lvbi5kaXJwYXRofX0iPgorICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLWxheWVyLXByb3A9ImRpcnBhdGgiIGNsYXNzPSJidG4gY2hhbmdlLWJ0biIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBzdHlsZT0iZGlzcGxheTpub25lIiBjbGFzcz0iYnRuIGJ0bi1saW5rIGNhbmNlbCI+Q2FuY2VsPC9hPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Zvcm0+CisgICAgICAgICAgICAgIDxpIGlkPSJjaGFuZ2Utc3ViZGlyIiBjbGFzcz0iaWNvbi1wZW5jaWwiPjwvaT4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tdHJhc2ggZGVsZXRlLWN1cnJlbnQtdmFsdWUiIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0iRGVsZXRlIj48L3NwYW4+CisgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIEdpdCBicmFuY2gsIHRhZyBvciBjb21taXQiPjwvaT4KKyAgICAgICAgICAgICAgUmV2aXNpb24KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjdXJyZW50LXZhbHVlIj57e2xheWVydmVyc2lvbi5nZXRfdmNzX3JlZmVyZW5jZX19PC9zcGFuPgorICAgICAgICAgICAgICA8Zm9ybSBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4KKyAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0ie3tsYXllcnZlcnNpb24uZ2V0X3Zjc19yZWZlcmVuY2V9fSI+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gIGRhdGEtbGF5ZXItcHJvcD0iY29tbWl0IiBjbGFzcz0iYnRuIGNoYW5nZS1idG4iIHR5cGU9ImJ1dHRvbiI+U2F2ZTwvYnV0dG9uPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBzdHlsZT0iZGlzcGxheTpub25lIiBjbGFzcz0iYnRuIGJ0bi1saW5rIGNhbmNlbCI+Q2FuY2VsPC9hPgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXBlbmNpbCI+PC9pPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9Ik90aGVyIGxheWVycyB0aGlzIGxheWVyIGRlcGVuZHMgdXBvbiI+PC9pPgorICAgICAgICAgICAgICAgIExheWVyIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJ1bnN0eWxlZCBjdXJyZW50LXZhbHVlIiBpZD0ibGF5ZXItZGVwcy1saXN0Ij4KKyAgICAgICAgICAgICAgICAgIHslIGZvciBsZCBpbiBsYXllcnZlcnNpb24uZGVwZW5kZW5jaWVzLmFsbCAlfQorICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtbGF5ZXItaWQ9Int7bGQuZGVwZW5kc19vbi5pZH19Ij4KKyAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS10b2dnbGU9InRvb2x0aXAiIHRpdGxlPSJ7e2xkLmRlcGVuZHNfb24ubGF5ZXIudmNzX3VybH19IHwge3tsZC5kZXBlbmRzX29uLmdldF92Y3NfcmVmZXJlbmNlfX0iIGhyZWY9InslIHVybCAnbGF5ZXJkZXRhaWxzJyBwcm9qZWN0LmlkIGxkLmRlcGVuZHNfb24uaWQgJX0iPnt7bGQuZGVwZW5kc19vbi5sYXllci5uYW1lfX08L2E+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLXRyYXNoICIgZGF0YS10b2dnbGU9InRvb2x0aXAiIHRpdGxlPSJEZWxldGUiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCBhZGQtZGVwcyI+CisgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIGRhdGEtbWluTGVuZ3RoPSIxIiBkYXRhLWF1dG9jb21wbGV0ZT0ib2ZmIiAgcGxhY2Vob2xkZXI9IlR5cGUgYSBsYXllciBuYW1lIiBpZD0ibGF5ZXItZGVwLWlucHV0Ij4KKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biIgaWQ9ImFkZC1sYXllci1kZXBlbmRlbmN5LWJ0biIgPgorICAgICAgICAgICAgICAgICAgICAgIEFkZCBsYXllcgorICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWJsb2NrIGFkZC1kZXBzIj5Zb3UgY2FuIG9ubHkgYWRkIGxheWVycyBUb2FzdGVyIGtub3dzIGFib3V0PC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwhLS0gZW5kIGxheWVyZGV0YWlscyB0YWIgLS0+CisgICAgICAgICAgICA8IS0tIHRhcmdldHMgdGFiIC0tPgorICAgICAgICAgICAgPGRpdiBpZD0icmVjaXBlcyIgY2xhc3M9InRhYi1wYW5lIj4KKyAgICAgICAgICAgICAgPCEtLSBSZWNpcGUgdGFibGUgLS0+CisgICAgICAgICAgICAgIDxkaXYgaWQ9Im5vLXJlY2lwZXMteWV0IiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgICAgICAgICAgICAgPHA+VG9hc3RlciBkb2VzIG5vdCBoYXZlIHJlY2lwZSBpbmZvcm1hdGlvbiBmb3IgdGhlIDxzdHJvbmc+IHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSA8L3N0cm9uZz4gbGF5ZXIuPC9wPgorICAgICAgICAgICAgICAgIDxwPlRvYXN0ZXIgbGVhcm5zIGFib3V0IGxheWVycyB3aGVuIHlvdSBidWlsZCB0aGVtLiBJZiB0aGlzIGxheWVyIHByb3ZpZGVzIGFueSByZWNpcGVzLCB0aGV5IHdpbGwgYmUgbGlzdGVkIGhlcmUgYWZ0ZXIgeW91IGJ1aWxkIHRoZSA8c3Ryb25nPiB7e2xheWVydmVyc2lvbi5sYXllci5uYW1lfX0gPC9zdHJvbmc+IGxheWVyLjwvcD4KKyAgICAgICAgICAgICAgPC9kaXY+CisKKworCisgICAgICAgICAgICAgIHslIHVybCAnbGF5ZXJyZWNpcGVzdGFibGUnIHByb2plY3QuaWQgbGF5ZXJ2ZXJzaW9uLmlkICBhcyB4aHJfdGFibGVfdXJsICV9CisgICAgICAgICAgICAgIHslIHdpdGggInJlY2lwZXN0YWJsZSIgYXMgdGFibGVfbmFtZSAlfQorICAgICAgICAgICAgICB7JSB3aXRoICJSZWNpcGVzIiBhcyB0aXRsZSAlfQorICAgICAgICAgICAgICB7JSBpbmNsdWRlICd0b2FzdGVydGFibGUtc2ltcGxlLmh0bWwnICV9CisgICAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgIDxkaXYgaWQ9Im1hY2hpbmVzIiBjbGFzcz0idGFiLXBhbmUiPgorCisgICAgICAgICAgICAgIDxkaXYgaWQ9Im5vLW1hY2hpbmVzLXlldCIgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgICAgICAgICAgICAgIDxwPlRvYXN0ZXIgZG9lcyBub3QgaGF2ZSBtYWNoaW5lIGluZm9ybWF0aW9uIGZvciB0aGUgPHN0cm9uZz4ge3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19IDwvc3Ryb25nPiBsYXllci48L3A+CisgICAgICAgICAgICAgICAgPHA+VG9hc3RlciBsZWFybnMgYWJvdXQgbGF5ZXJzIHdoZW4geW91IGJ1aWxkIHRoZW0uIElmIHRoaXMgbGF5ZXIgcHJvdmlkZXMgYW55IG1hY2hpbmVzLCB0aGV5IHdpbGwgYmUgbGlzdGVkIGhlcmUgYWZ0ZXIgeW91IGJ1aWxkIHRoZSA8c3Ryb25nPiB7e2xheWVydmVyc2lvbi5sYXllci5uYW1lfX0gPC9zdHJvbmc+IGxheWVyLjwvcD4KKyAgICAgICAgICAgICAgPC9kaXY+CisKKworICAgICAgICAgICAgICA8IS0tIE1hY2hpbmVzIHRhYmxlIC0tPgorICAgICAgICAgICAgICB7JSB1cmwgJ2xheWVybWFjaGluZXN0YWJsZScgcHJvamVjdC5pZCBsYXllcnZlcnNpb24uaWQgIGFzIHhocl90YWJsZV91cmwgJX0KKyAgICAgICAgICAgICAgeyUgd2l0aCAibWFjaGluZXN0YWJsZSIgYXMgdGFibGVfbmFtZSAgJX0KKyAgICAgICAgICAgICAgeyUgd2l0aCAiTWFjaGluZXMiIGFzIHRpdGxlICAlfQorICAgICAgICAgICAgICB7JSBpbmNsdWRlICd0b2FzdGVydGFibGUtc2ltcGxlLmh0bWwnICV9CisgICAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+IDwhLS0gZW5kIHRhYiBjb250ZW50IC0tPgorICAgICAgICA8L2Rpdj4gPCEtLSBlbmQgdGFiYWJsZSAtLT4KKworICAgICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjQgd2VsbCI+IDwhLS0gaW5mbyBzaWRlIHBhbmVsIC0tPgorICAgICAgICAgIDxoMj5BYm91dCB7e2xheWVydmVyc2lvbi5sYXllci5uYW1lfX08L2gyPgorICAgICAgICAgIDxkbCBjbGFzcz0iaXRlbS1pbmZvIj4KKworICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICBTdW1tYXJ5CisgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJPbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgbGF5ZXIiPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdXRlZCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+Tm90IHNldDwvc3Bhbj4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImN1cnJlbnQtdmFsdWUiPnt7bGF5ZXJ2ZXJzaW9uLmxheWVyLnN1bW1hcnl8ZGVmYXVsdF9pZl9ub25lOicnfX08L3NwYW4+CisgICAgICAgICAgICAgIDxmb3JtIHN0eWxlPSJkaXNwbGF5Om5vbmU7IG1hcmdpbi1ib3R0b206MjBweCI+CisgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJzcGFuMTIiIHJvd3M9IjIiPnslIGlmIGxheWVydmVyc2lvbi5sYXllci5zdW1tYXJ5ICV9e3tsYXllcnZlcnNpb24ubGF5ZXIuc3VtbWFyeX19eyUgZW5kaWYgJX08L3RleHRhcmVhPgorICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBjaGFuZ2UtYnRuIiBkYXRhLWxheWVyLXByb3A9InN1bW1hcnkiIHR5cGU9ImJ1dHRvbiI+U2F2ZTwvYnV0dG9uPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJidG4gYnRuLWxpbmsgY2FuY2VsIj5DYW5jZWw8L2E+CisgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLXRyYXNoIGRlbGV0ZS1jdXJyZW50LXZhbHVlIiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IkRlbGV0ZSI+PC9zcGFuPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgRGVzY3JpcHRpb24KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdXRlZCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+Tm90IHNldDwvc3Bhbj4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImN1cnJlbnQtdmFsdWUiPnt7bGF5ZXJ2ZXJzaW9uLmxheWVyLmRlc2NyaXB0aW9ufGRlZmF1bHRfaWZfbm9uZTonJ319PC9zcGFuPgorICAgICAgICAgICAgICA8Zm9ybSBzdHlsZT0iZGlzcGxheTpub25lOyBtYXJnaW4tYm90dG9tOjIwcHgiPgorICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0ic3BhbjEyIiByb3dzPSI2Ij57JSBpZiBsYXllcnZlcnNpb24ubGF5ZXIuZGVzY3JpcHRpb24gJX17e2xheWVydmVyc2lvbi5sYXllci5kZXNjcmlwdGlvbn19eyUgZW5kaWYgJX08L3RleHRhcmVhPgorICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBjaGFuZ2UtYnRuIiBkYXRhLWxheWVyLXByb3A9ImRlc2NyaXB0aW9uIiB0eXBlPSJidXR0b24iID5TYXZlPC9idXR0b24+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImJ0biBidG4tbGluayBjYW5jZWwiPkNhbmNlbDwvYT4KKyAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwiPjwvaT4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tdHJhc2ggZGVsZXRlLWN1cnJlbnQtdmFsdWUiIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0iRGVsZXRlIj48L3NwYW4+CisgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgeyUgaWYgbGF5ZXJ2ZXJzaW9uLmxheWVyLnVwX2lkICV9CisgICAgICAgICAgICA8ZHQ+TGF5ZXIgaW5kZXg8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9icmFuY2gve3tsYXllcnZlcnNpb24udXBfYnJhbmNoLm5hbWV9fS9sYXllci97e2xheWVydmVyc2lvbi5sYXllci5uYW1lfX0iPmxheWVyIGluZGV4IGxpbms8L2E+CisKKyAgICAgICAgICA8L2RkPgorICAgICAgICAgIHslIGVuZGlmICV9CisKKyAgICAgICAgPC9kbD4KKyAgICAgIDwvZGl2PgorCisgICAgICB7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL21hY2hpbmVfYnRuLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbWFjaGluZV9idG4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmNiNTViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL21hY2hpbmVfYnRuLmh0bWwKQEAgLTAsMCArMSw4IEBACis8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIGV4dHJhLnBpZCAlfT9zZXRNYWNoaW5lPXt7ZGF0YS5uYW1lfX0iIGNsYXNzPSJidG4gYnRuLWJsb2NrIGxheWVyLWV4aXN0cy17e2RhdGEubGF5ZXJfdmVyc2lvbi5pZH19IiBzdHlsZT0ibWFyZ2luLXRvcDogNXB4OyBkaXNwbGF5Om5vbmUiPgorICBTZWxlY3QgbWFjaGluZTwvYT4KKzxidXR0b24gY2xhc3M9ImJ0biBidG4tYmxvY2sgbGF5ZXJidG4gbGF5ZXItYWRkLXt7ZGF0YS5sYXllcl92ZXJzaW9uLmlkfX0iIGRhdGEtbGF5ZXI9J3sgImlkIjoge3tkYXRhLmxheWVyX3ZlcnNpb24uaWR9fSwgIm5hbWUiOiAgInt7ZGF0YS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fSIsICJsYXllcmRldGFpbHVybCI6ICJ7JXVybCAnbGF5ZXJkZXRhaWxzJyBleHRyYS5waWQgZGF0YS5sYXllcl92ZXJzaW9uLmlkICV9In0nIGRhdGEtZGlyZWN0aXZlPSJhZGQiPgorICA8aSBjbGFzcz0iaWNvbi1wbHVzIj48L2k+CisgIEFkZCBsYXllcgorICA8aSB0aXRsZT0iIiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJUbyBlbmFibGUgdGhpcyBtYWNoaW5lLCB5b3UgbXVzdCBmaXJzdCBhZGQgdGhlIHt7ZGF0YS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fSBsYXllciB0byB5b3VyIHByb2plY3QiPjwvaT4KKzwvYnV0dG9uPgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbXJiX3NlY3Rpb24uaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9tcmJfc2VjdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NmZiOGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbXJiX3NlY3Rpb24uaHRtbApAQCAtMCwwICsxLDEyMSBAQAoreyUgbG9hZCBzdGF0aWMgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KKworCit7JWlmIG1ydS5jb3VudCA+IDAlfQorCisgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgIDxoMT4KKyAgICAgICAgICBMYXRlc3QgYnVpbGRzCisgICAgICAgPC9oMT4KKyAgPC9kaXY+CisgIDxkaXYgaWQ9ImxhdGVzdC1idWlsZHMiPgorICB7JSBmb3IgYnVpbGQgaW4gbXJ1ICV9CisgICAgPGRpdiBjbGFzcz0iYWxlcnQgeyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCV9YWxlcnQtc3VjY2Vzc3slZWxpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCV9YWxlcnQtZXJyb3J7JWVsc2UlfWFsZXJ0LWluZm97JWVuZGlmJX0gcHJvamVjdC1uYW1lICI+CisgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIHslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQlfWxhYmVsLXN1Y2Nlc3N7JWVsaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQlfWxhYmVsLWltcG9ydGFudHslZWxzZSV9bGFiZWwtaW5mb3slZW5kaWYlfSI+CisgICAgICAgICA8YSBocmVmPXslIHVybCAncHJvamVjdCcgYnVpbGQucHJvamVjdC5wayAlfT4KKyAgICAgICAgICAge3tidWlsZC5wcm9qZWN0Lm5hbWV9fQorICAgICAgICAgPC9hPgorICAgICAgIDwvc3Bhbj4KKworICAgICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjMgbGVhZCI+CisgICAgeyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCBvciBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCAlfQorICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICdidWlsZGRhc2hib2FyZCcgYnVpbGQucGslfSIgY2xhc3M9InslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQgJX1zdWNjZXNzeyVlbHNlJX1lcnJvcnslZW5kaWYlfSI+CisgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGlmIGJ1aWxkLnRhcmdldF9zZXQuYWxsLmNvdW50ID4gMCAlfQorICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIgorICAgICAgICAgICAgICAgICAgeyVpZiBidWlsZC50YXJnZXRfc2V0LmFsbC5jb3VudCA+IDElfQorICAgICAgICAgICAgICAgICAgICB0aXRsZT0iVGFyZ2V0czogeyVmb3IgdGFyZ2V0IGluIGJ1aWxkLnRhcmdldF9zZXQuYWxsJX17e3RhcmdldC50YXJnZXR9fSB7JWVuZGZvciV9IgorICAgICAgICAgICAgICAgICAgeyVlbmRpZiV9CisgICAgICAgICAgICAgICAgPgorCisgICAgICAgICAgICAgICAgICB7e2J1aWxkLnRhcmdldF9zZXQuYWxsLjAudGFyZ2V0fX0geyVpZiBidWlsZC50YXJnZXRfc2V0LmFsbC5jb3VudCA+IDElfSgrIHt7YnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnR8YWRkOiItMSJ9fSl7JWVuZGlmJX0KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICB7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEIG9yIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuRkFJTEVEICV9CisgICAgICAgICAgICAgICAgPC9hPgorICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYW4yIGxlYWQiPgorICAgICAgICAgICAgICAgIHslIGlmIGJ1aWxkLmNvbXBsZXRlZF9vbnxmb3JtYXRfYnVpbGRfZGF0ZSAgJX0KKyAgICAgICAgICAgICAgICAgICAge3sgYnVpbGQuY29tcGxldGVkX29ufGRhdGU6J2QvbS95IEg6aScgfX0KKyAgICAgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgICAgIHt7IGJ1aWxkLmNvbXBsZXRlZF9vbnxkYXRlOidIOmknIH19CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDwvZGl2PgorICAgIHslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQgb3IgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQgJX0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYW4yIGxlYWQiPgorICAgICAgeyUgaWYgIGJ1aWxkLmVycm9ycy5jb3VudCAlfQorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLW1pbnVzLXNpZ24gcmVkIj48L2k+IDxhIGhyZWY9InsldXJsICdidWlsZGRhc2hib2FyZCcgYnVpbGQucGslfSNlcnJvcnMiIGNsYXNzPSJlcnJvciI+e3tidWlsZC5lcnJvcnMuY291bnR9fSBlcnJvcnt7YnVpbGQuZXJyb3JzLmNvdW50fHBsdXJhbGl6ZX19PC9hPgorICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjIgbGVhZCI+CisgICAgICB7JSBpZiAgYnVpbGQud2FybmluZ3MuY291bnQgJX0KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi13YXJuaW5nLXNpZ24geWVsbG93Ij48L2k+IDxhIGhyZWY9InsldXJsICdidWlsZGRhc2hib2FyZCcgYnVpbGQucGslfSN3YXJuaW5ncyIgY2xhc3M9Indhcm5pbmciPnt7YnVpbGQud2FybmluZ3MuY291bnR9fSB3YXJuaW5ne3tidWlsZC53YXJuaW5ncy5jb3VudHxwbHVyYWxpemV9fTwvYT4KKyAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlYWQgIj4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxlYWQiPgorICAgICAgICAgICAgICAgIEJ1aWxkIHRpbWU6IDxhIGhyZWY9InslIHVybCAnYnVpbGR0aW1lJyBidWlsZC5wayAlfSI+e3sgYnVpbGQudGltZXNwZW50X3NlY29uZHN8c2VjdG9obXMgfX08L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuCisgICAgICAgICAgICAgICAgICB7JSBpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCAlfQorICAgICAgICAgICAgICAgICAgICAgIGJ0bi1zdWNjZXNzCisgICAgICAgICAgICAgICAgICB7JSBlbGlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuRkFJTEVEICV9CisgICAgICAgICAgICAgICAgICAgICAgYnRuLWRhbmdlcgorICAgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICAgIGJ0bi1pbmZvCisgICAgICAgICAgICAgICAgICB7JWVuZGlmJX0KKyAgICAgICAgICAgICAgICAgIHB1bGwtcmlnaHQiCisgICAgICAgICAgICAgICAgICBvbmNsaWNrPSdzY2hlZHVsZUJ1aWxkKHslIHVybCAncHJvamVjdGJ1aWxkcycgYnVpbGQucHJvamVjdC5pZCBhcyBicGkgJX17e2JwaXxqc29ufX0sCisgICAgICAgICAgICAgICAgICAgIHt7YnVpbGQucHJvamVjdC5uYW1lfGpzb259fSwKKyAgICAgICAgICAgICAgICAgICAgeyUgdXJsICdwcm9qZWN0JyBidWlsZC5wcm9qZWN0LmlkIGFzIGJwdXJsICV9e3ticHVybHxqc29ufX0sCisgICAgICAgICAgICAgICAgICAgIHt7YnVpbGQudGFyZ2V0X3NldC5hbGx8Z2V0X3Rhc2tzfGpzb259fSknPgorCisgICAgICAgICAgICAgICAgICAgIFJ1biBhZ2FpbgorICAgICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgIHslZW5kaWYlfQorICAgIHslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5JTl9QUk9HUkVTUyAlfQorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzIiBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7IiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9Int7YnVpbGQuY29tcGxldGVwZXJ9fSUgb2YgdGFza3MgY29tcGxldGUiPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDoge3tidWlsZC5jb21wbGV0ZXBlcn19JTsiIGNsYXNzPSJiYXIiPjwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWFkIHB1bGwtcmlnaHQiPnt7YnVpbGQuY29tcGxldGVwZXJ9fSUgb2YgdGFza3MgY29tcGxldGU8L2Rpdj4KKyAgICB7JWVuZGlmJX0KKyAgICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisKKyAgeyUgZW5kZm9yICV9CisgIDwvZGl2PgorCis8c2NyaXB0PgorCitmdW5jdGlvbiBzY2hlZHVsZUJ1aWxkKHVybCwgcHJvamVjdE5hbWUsIHByb2plY3RVcmwsIGJ1aWxkbGlzdCkgeworICBjb25zb2xlLmxvZygic2NoZWR1bGVCdWlsZCIpOworICBsaWJ0b2FzdGVyLnN0YXJ0QUJ1aWxkKHVybCwgbnVsbCwgYnVpbGRsaXN0LmpvaW4oIiAiKSwgZnVuY3Rpb24oKXsKKyAgICBjb25zb2xlLmxvZygicmVsb2FkaW5nIHBhZ2UiKTsKKyAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7CisgIH0sIG51bGwpOworfQorCiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpeworCisgICQoIi5jYW5jZWwtYnVpbGQtYnRuIikuY2xpY2soZnVuY3Rpb24gKCl7CisgICAgdmFyIHVybCA9ICQodGhpcykuZGF0YSgncmVxdWVzdC11cmwnKTsKKyAgICB2YXIgYnVpbGRJZHMgPSAkKHRoaXMpLmRhdGEoJ2J1aWxkLWlkJyk7CisgICAgdmFyIGJ0biA9ICQodGhpcyk7CisKKyAgICBsaWJ0b2FzdGVyLmNhbmNlbEFCdWlsZCh1cmwsIGJ1aWxkSWRzLCBmdW5jdGlvbigpeworICAgICAgYnRuLnBhcmVudHMoIi5hbGVydCIpLmZhZGVPdXQoKTsKKyAgICB9LCBudWxsKTsKKyAgfSk7Cit9KTsKKworPC9zY3JpcHQ+CisKK3slZW5kaWYlfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbmV3cHJvamVjdC5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL25ld3Byb2plY3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTczOTBiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL25ld3Byb2plY3QuaHRtbApAQCAtMCwwICsxLDEzMCBAQAoreyUgZXh0ZW5kcyAiYmFzZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQoreyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KKzxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgICAgICAgIDxoMT5DcmVhdGUgYSBuZXcgcHJvamVjdDwvaDE+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPgorICAgIHslIGlmIGFsZXJ0ICV9CisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1lcnJvciByb3ctZmx1aWQiIHJvbGU9ImFsZXJ0Ij57e2FsZXJ0fX08L2Rpdj4KKyAgICB7JSBlbmRpZiAlfQorICAgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjYiPgorICAgICAgICA8Zm9ybSBtZXRob2Q9IlBPU1QiPnslIGNzcmZfdG9rZW4gJX0KKworICAgICAgICAgICAgPGZpZWxkc2V0PgorICAgICAgICAgICAgICA8bGFiZWw+UHJvamVjdCBuYW1lIDxzcGFuIGNsYXNzPSJtdXRlZCI+KHJlcXVpcmVkKTwvc3Bhbj48L2xhYmVsPgorICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LXhsYXJnZSIgcmVxdWlyZWQgaWQ9Im5ldy1wcm9qZWN0LW5hbWUiIG5hbWU9InByb2plY3RuYW1lIj4KKyAgICAgICAgICAgIDwvZmllbGRzZXQ+Cis8IS0tCisgICAgICAgICAgICA8ZmllbGRzZXQ+CisgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJwcm9qZWN0LWZvcm0iPlByb2plY3QgdHlwZTwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0icHJvamVjdC1mb3JtIHJhZGlvIj48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InB0eXBlIiB2YWx1ZT0iYW5hbHlzaXMiIGNoZWNrZWQvPiBBbmFseXNpcyBQcm9qZWN0PC9sYWJlbD4KKworICAgICAgICAgICAgICAgIHslIGlmIHJlbGVhc2VzLmNvdW50ID4gMCAlfQorICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InByb2plY3QtZm9ybSByYWRpbyI+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJwdHlwZSIgdmFsdWU9ImJ1aWxkIiBjaGVja2VkIC8+IEJ1aWxkIFByb2plY3Q8L2xhYmVsPgorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgIDwvZmllbGRzZXQ+IC0tPgorICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwdHlwZSIgdmFsdWU9ImJ1aWxkIiAvPgorCisgICAgICAgIHslIGlmIHJlbGVhc2VzLmNvdW50ID4gMCAlfQorICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJyZWxlYXNlIj4KKyAgICAgICAgICAgIHslIGlmIHJlbGVhc2VzLmNvdW50ID4gMSAlfQorICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InByb2plY3QtZm9ybSI+CisgICAgICAgICAgICAgICAgUmVsZWFzZQorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgdmVyc2lvbiBvZiB0aGUgYnVpbGQgc3lzdGVtIHlvdSB3YW50IHRvIHVzZSI+PC9pPgorICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InByb2plY3R2ZXJzaW9uIiBpZD0icHJvamVjdHZlcnNpb24iPgorICAgICAgICAgICAgICAgIHslIGZvciByZWxlYXNlIGluIHJlbGVhc2VzICV9CisgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Int7cmVsZWFzZS5pZH19IgorICAgICAgICAgICAgICAgICAgICAgICAgeyVpZiBkZWZhdWx0YnJhbmNoID09IHJlbGVhc2UubmFtZSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICB7JWVuZGlmJX0KKyAgICAgICAgICAgICAgICAgICAgID57e3JlbGVhc2UuZGVzY3JpcHRpb259fTwvb3B0aW9uPgorICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgICAgICAgICB7JSBmb3IgcmVsZWFzZSBpbiByZWxlYXNlcyAlfQorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgaGVscHRleHQiIGlkPSJkZXNjcmlwdGlvbi17e3JlbGVhc2UuaWR9fSIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWJsb2NrIHNwYW41Ij57e3JlbGVhc2UuaGVscHRleHR8c2FmZX19PC9zcGFuPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icHJvamVjdHZlcnNpb24iIHZhbHVlPSJ7e3JlbGVhc2VzLjAuaWR9fSIvPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDwvZmllbGRzZXQ+CisgICAgICAgIHslIGVuZGlmICV9CisKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tYWN0aW9ucyI+CisgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIGlkPSJjcmVhdGUtcHJvamVjdC1idXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRuLWxhcmdlIiB2YWx1ZT0iQ3JlYXRlIHByb2plY3QiLz4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0idmVydGljYWwtYWxpZ246bWlkZGxlOyI+VG8gY3JlYXRlIGEgcHJvamVjdCwgeW91IG5lZWQgdG8gZW50ZXIgYSBwcm9qZWN0IG5hbWU8L3NwYW4+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9mb3JtPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPCEtLQorICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuNSB3ZWxsIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayI+CisgICAgICAgICAgICAgICAgIDxoND5Ub2FzdGVyIHByb2plY3QgdHlwZXM8L2g0PgorICAgICAgICAgICAgICAgICA8cD5XaXRoIGEgPHN0cm9uZz5idWlsZCBwcm9qZWN0PC9zdHJvbmc+IHlvdSBjb25maWd1cmUgYW5kIHJ1biB5b3VyIGJ1aWxkcyBmcm9tIFRvYXN0ZXIuPC9wPgorICAgICAgICAgICAgICAgICA8cD5XaXRoIGFuIDxzdHJvbmc+YW5hbHlzaXMgcHJvamVjdDwvc3Ryb25nPiwgdGhlIGJ1aWxkcyBhcmUgY29uZmlndXJlZCBhbmQgcnVuIGJ5IGFub3RoZXIgdG9vbAorICAgICAgICAgICAgICAgICAoc29tZXRoaW5nIGxpa2UgQnVpbGRib3Qgb3IgSmVua2lucyksIGFuZCB0aGUgcHJvamVjdCBvbmx5IGNvbGxlY3RzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgICAgICAgICAgICAgICAgYnVpbGRzIChwYWNrYWdlcywgcmVjaXBlcywgZGVwZW5kZW5jaWVzLCBsb2dzLCBldGMpLiA8L3A+CisgICAgICAgICAgICAgICAgIDxwPllvdSBjYW4gcmVhZCBtb3JlIG9uIDxhIGhyZWY9IiMiPmhvdyB0byBzZXQgdXAgYW4gYW5hbHlzaXMgcHJvamVjdDwvYT4KKyAgICAgICAgICAgICAgICAgaW4gdGhlIFRvYXN0ZXIgbWFudWFsLjwvcD4KKyAgICAgICAgICAgICAgICAgPGg0PlJlbGVhc2U8L2g0PgorICAgICAgICAgICAgICAgICA8cD5JZiB5b3UgY3JlYXRlIGEgPHN0cm9uZz5idWlsZCBwcm9qZWN0PC9zdHJvbmc+LCB5b3Ugd2lsbCBuZWVkIHRvIHNlbGVjdCBhIDxzdHJvbmc+cmVsZWFzZTwvc3Ryb25nPiwKKyAgICAgICAgICAgICAgICAgd2hpY2ggaXMgdGhlIHZlcnNpb24gb2YgdGhlIGJ1aWxkIHN5c3RlbSB5b3Ugd2FudCB0byB1c2UgdG8gcnVuIHlvdXIgYnVpbGRzLjwvcD4KKyAgICAgICAgICAgICA8L2Rpdj4gLS0+CisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAvLyBoaWRlIHRoZSBuZXcgcHJvamVjdCBidXR0b24KKyAgICAgICAgICAgICQoIiNuZXctcHJvamVjdC1idXR0b24iKS5oaWRlKCk7CisgICAgICAgICAgICAkKCcuYnRuLXByaW1hcnknKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOworCisgICAgICAgICAgICAvLyBlbmFibGUgc3VibWl0IGJ1dHRvbiB3aGVuIGFsbCByZXF1aXJlZCBmaWVsZHMgYXJlIHBvcHVsYXRlZAorICAgICAgICAgICAgJCgiaW5wdXQjbmV3LXByb2plY3QtbmFtZSIpLm9uKCdpbnB1dCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICgkKCJpbnB1dCNuZXctcHJvamVjdC1uYW1lIikudmFsKCkubGVuZ3RoID4gMCApeworICAgICAgICAgICAgICAgICAgICAkKCcuYnRuLXByaW1hcnknKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOworICAgICAgICAgICAgICAgICAgICAkKCIuaGVscC1pbmxpbmUiKS5jc3MoJ3Zpc2liaWxpdHknLCdoaWRkZW4nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICQoJy5idG4tcHJpbWFyeScpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisgICAgICAgICAgICAgICAgICAgICQoIi5oZWxwLWlubGluZSIpLmNzcygndmlzaWJpbGl0eScsJ3Zpc2libGUnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLy8gc2hvdyByZWxldmFudCBoZWxwIHRleHQgZm9yIHRoZSBzZWxlY3RlZCByZWxlYXNlCisgICAgICAgICAgICB2YXIgc2VsZWN0ZWRfcmVsZWFzZSA9ICQoJ3NlbGVjdCcpLnZhbCgpOworICAgICAgICAgICAgJCgiI2Rlc2NyaXB0aW9uLSIgKyBzZWxlY3RlZF9yZWxlYXNlKS5zaG93KCk7CisKKworICAgICAgICAgICAgJCgnc2VsZWN0JykuY2hhbmdlKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgdmFyIG5ld19yZWxlYXNlID0gJCgnc2VsZWN0JykudmFsKCk7CisgICAgICAgICAgICAgICAgJCgiLmhlbHB0ZXh0IikuaGlkZSgpOworICAgICAgICAgICAgICAgICQoJyNkZXNjcmlwdGlvbi0nICsgbmV3X3JlbGVhc2UpLmZhZGVJbigpOworICAgICAgICAgICAgfSk7CisKKy8qCQkJLy8gSGlkZSB0aGUgcHJvamVjdCByZWxlYXNlIHdoZW4geW91IHNlbGVjdCBhbiBhbmFseXNpcyBwcm9qZWN0CisJCQlmdW5jdGlvbiBwcm9qZWN0VHlwZSgpIHsKKwkJCQlpZiAoJCgiaW5wdXRbdHlwZT0ncmFkaW8nXTpjaGVja2VkIikudmFsKCkgPT0gJ2J1aWxkJykgeworCQkJCQkkKCcucmVsZWFzZScpLmZhZGVJbigpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJJCgnLnJlbGVhc2UnKS5mYWRlT3V0KCk7CisJCQkJfQorCQkJfQorCQkJcHJvamVjdFR5cGUoKTsKKworCQkJJCgnaW5wdXQ6cmFkaW8nKS5jaGFuZ2UoZnVuY3Rpb24oKXsKKwkJCQlwcm9qZWN0VHlwZSgpOworCQkJfSk7ICovCisgICAgICAgIH0pOworICAgIDwvc2NyaXB0PgorCit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmYyMGMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzLmh0bWwKQEAgLTAsMCArMSw5OSBAQAoreyUgZXh0ZW5kcyAicGFja2FnZV9kZXRhaWxfYmFzZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayB0YWJjb250ZW50ICV9CisgICAgICAgIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2J1aWx0X2RldGFpbCcgYnVpbGQuaWQgcGFja2FnZS5pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJTaG93cyB0aGUgZmlsZXMgcHJvZHVjZWQgYnkgdGhpcyBwYWNrYWdlLiI+PC9pPgorICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZWQgZmlsZXMgKHt7cGFja2FnZS5idWlsZGZpbGVsaXN0X3BhY2thZ2UuY291bnR9fSkKKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPGxpIGNsYXNzPSJhY3RpdmUiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMnIGJ1aWxkLmlkIHBhY2thZ2UuaWQgJX0iPgorICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iU2hvd3MgdGhlIHJ1bnRpbWUgcGFja2FnZXMgcmVxdWlyZWQgYnkgdGhpcyBwYWNrYWdlLiI+PC9pPgorICAgICAgICAgICAgICAgICAgICBSdW50aW1lIGRlcGVuZGVuY2llcyAoe3tkZXBlbmRlbmN5X2NvdW50fX0pCisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgPC91bD4KKyAgICAgICAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFiLXBhbmUgYWN0aXZlIiBpZD0iZGVwZW5kZW5jaWVzIj4KKyAgICAgICAgICAgIHslIGlmZXF1YWwgcnVudGltZV9kZXBzfGxlbmd0aCAwICV9CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+CisgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9zdHJvbmc+IGhhcyBubyBydW50aW1lIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX08L3N0cm9uZz4gaXMgPHN0cm9uZz5ub3QgaW5jbHVkZWQ8L3N0cm9uZz4gaW4gYW55IGltYWdlLiBUaGlzIHBhZ2Ugc2hvd3MgeW91IHRoZSBwcm9qZWN0ZWQgcnVudGltZSBkZXBlbmRlbmNpZXMgaWYgeW91IGluY2x1ZGUgPHN0cm9uZz57e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX08L3N0cm9uZz4gaW4gZnV0dXJlIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIj4KKyAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5QYWNrYWdlPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+VmVyc2lvbjwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaXplY29sIHNwYW4yIj5TaXplPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KKwkJCQkJCXslIGZvciBydW50aW1lX2RlcCBpbiBydW50aW1lX2RlcHMgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ciB7e3J1bnRpbWVfZGVwLnNpemV8Zm9ybWF0X3ZwYWNrYWdlX3Jvd2NsYXNzfX0gPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIHJ1bnRpbWVfZGVwLnNpemUgIT0gLTEgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9idWlsdF9kZXRhaWwnIGJ1aWxkLmlkIHJ1bnRpbWVfZGVwLmRlcGVuZHNfb25faWQgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tydW50aW1lX2RlcC5uYW1lfX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tydW50aW1lX2RlcC5uYW1lfGZvcm1hdF92cGFja2FnZV9uYW1laGVscH19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3J1bnRpbWVfZGVwLnZlcnNpb259fTwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJzaXplY29sIj57e3J1bnRpbWVfZGVwLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorCQkJCQkJeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIHslIGVuZGlmZXF1YWwgJX0KKyAgICAgICAgICAgIHslIGlmbm90ZXF1YWwgb3RoZXJfZGVwc3xsZW5ndGggMCAlfQorICAgICAgICAgICAgICAgIDxoMz5PdGhlciBydW50aW1lIHJlbGF0aW9uc2hpcHM8L2gzPgorICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiPgorICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBhY2thZ2U8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5WZXJzaW9uPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpemVjb2wgc3BhbjIiPlNpemU8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkZpdmUgcmVsYXRpb25zaGlwIHR5cGVzIGV4aXN0OiByZWNvbW1lbmRzLCBzdWdnZXN0cywgcHJvdmlkZXMsIHJlcGxhY2VzIGFuZCBjb25mbGljdHMiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsYXRpb25zaGlwIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgPHRib2R5PgorCQkJCQkJeyUgZm9yIG90aGVyX2RlcCBpbiBvdGhlcl9kZXBzICV9CisgICAgICAgICAgICAgICAgICAgICAgICA8dHIge3tvdGhlcl9kZXAuc2l6ZXxmb3JtYXRfdnBhY2thZ2Vfcm93Y2xhc3N9fSA+CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiBvdGhlcl9kZXAuc2l6ZSAhPSAtMSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2J1aWx0X2RldGFpbCcgYnVpbGQuaWQgb3RoZXJfZGVwLmRlcGVuZHNfb25faWQgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvdGhlcl9kZXAubmFtZX19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvdGhlcl9kZXAubmFtZXxmb3JtYXRfdnBhY2thZ2VfbmFtZWhlbHB9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e290aGVyX2RlcC52ZXJzaW9ufX08L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ic2l6ZWNvbCI+e3tvdGhlcl9kZXAuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3RoZXJfZGVwLmRlcF90eXBlX2Rpc3BsYXl9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSJ7e290aGVyX2RlcC5kZXBfdHlwZV9oZWxwfX0iID48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgIAl7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgICAgIHslIGVuZGlmbm90ZXF1YWwgJX0KKyAgICAgICAgICAgIDwvZGl2PiA8IS0tIHRhYi1wYW5lIC0tPgorICAgICAgICA8L2Rpdj4gPCEtLSB0YWItY29udGVudCAtLT4KK3slIGVuZGJsb2NrIHRhYmNvbnRlbnQgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2J1aWx0X2RldGFpbC5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfYnVpbHRfZGV0YWlsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlOGNjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2J1aWx0X2RldGFpbC5odG1sCkBAIC0wLDAgKzEsNjUgQEAKK3slIGV4dGVuZHMgInBhY2thZ2VfZGV0YWlsX2Jhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKworeyUgYmxvY2sgdGFiY29udGVudCAlfQorICAgIHslIHdpdGggcGFja2FnZUZpbGVDb3VudD1wYWNrYWdlLmJ1aWxkZmlsZWxpc3RfcGFja2FnZS5jb3VudCAlfQorICAgICAgICA8IS0tIEdlbmVyYXRlZCBGaWxlcyAtLT4KKyAgICAgICAgeyUgaWYgcGFja2FnZS5idWlsZHRhcmdldGxpc3RfcGFja2FnZS5jb3VudCA9PSAwICV9CisgICAgICAgICAgICB7IyBOb3QgaW5jbHVkZWQgY2FzZSAjfQorICAgICAgICAgICAgPHVsIGNsYXNzPSJuYXYgbmF2LXBpbGxzIj4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+IDxhIGhyZWY9IiMiPgorICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iRmlsZXMgYWRkZWQgdG8gYSByb290IGZpbGUgc3lzdGVtIHdoZW4geW91IGluY2x1ZGUge3twYWNrYWdlLm5hbWV9fSBpbiBhbiBpbWFnZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZWQgZmlsZXMgKHt7cGFja2FnZUZpbGVDb3VudH19KQorICAgICAgICAgICAgICAgIDwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iIj48YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzJyBidWlsZC5pZCBwYWNrYWdlLmlkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlByb2plY3RlZCBydW50aW1lIGRlcGVuZGVuY2llcyB3aGVuIHlvdSBpbmNsdWRlIHt7cGFja2FnZS5uYW1lfX0gaW4gYW4gaW1hZ2UiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgUnVudGltZSBkZXBlbmRlbmNpZXMgKHt7ZGVwZW5kZW5jeV9jb3VudH19KQorICAgICAgICAgICAgICAgIDwvYT48L2xpPgorICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSIgaWQ9ImZpbGVzIj4KKyAgICAgICAgICAgIDwhLS0gUGFja2FnZSBmaWxlIGxpc3Qgb3IgaWYgZW1wdHksIGFsZXJ0IHBhbmUgLS0+CisgICAgICAgICAgICB7JSBpZiBwYWNrYWdlRmlsZUNvdW50ID4gMCAlfQorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fTwvc3Ryb25nPiBpcyA8c3Ryb25nPm5vdCBpbmNsdWRlZDwvc3Ryb25nPiBpbiBhbnkgaW1hZ2UuIFRoaXMgcGFnZSBzaG93cyB5b3UgdGhlIGZpbGVzIGFkZGVkIHRvIGFuIGltYWdlIHJvb3QgZmlsZSBzeXN0ZW0gaWYgeW91IGluY2x1ZGUgPHN0cm9uZz57e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX08L3N0cm9uZz4gaW4gZnV0dXJlIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICB7JSBpbmNsdWRlICJ0YWJsZXNvcnQuaHRtbCIgJX0KKyAgICAgICAgICAgICAgICAgICAgPHRib2R5PgorCQkJCQkJeyUgZm9yIGZpbGUgaW4gb2JqZWN0cyAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJwYXRoIj57e2ZpbGUucGF0aH19PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJmaWxlc2l6ZSBzaXplY29sIj57e2ZpbGUuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorCQkJCQkJeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgICAgICAgPC90YWJsZT4KKworICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fTwvc3Ryb25nPiBkb2VzIG5vdCBnZW5lcmF0ZSBhbnkgZmlsZXMuCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgICAgICA8L2Rpdj4gPCEtLSB0YWItcGFuZSBhY3RpdmUgLS0+CisgICAgICAgICAgICA8L2Rpdj4gPCEtLSB0YWItY29udGVudCAtLT4KKyAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgeyMgSW5jbHVkZWQgY2FzZSAjfQorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFiLXBhbmUgYWN0aXZlIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlYWQgd2VsbCI+CisgICAgICAgICAgICAgICAgICAgIFBhY2thZ2UgaW5jbHVkZWQgaW46CisgICAgICAgICAgICAgICAgICAgIHslIGZvciBpdGFyZ2V0IGluIHBhY2thZ2UuYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UuYWxsfGRpY3Rzb3J0OiJ0YXJnZXQudGFyZ2V0IiAlfQorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCcgYnVpbGQuaWQgaXRhcmdldC50YXJnZXQuaWQgcGFja2FnZS5pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiBmb3Jsb29wLmNvdW50ZXIwID4gMCAgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICwmbmJzcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgICAgICAgICB7e2l0YXJnZXQudGFyZ2V0LnRhcmdldH19CisgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4gPCEtLSB0YWItcGFuZSBhY3RpdmUgLS0+CisgICAgICAgICAgICA8L2Rpdj4gPCEtLSB0YWItY29udGVudCAtLT4KKyAgICAgICAgeyUgZW5kaWYgJX0KKworICAgIHslIGVuZHdpdGggJX0KK3slIGVuZGJsb2NrIHRhYmNvbnRlbnQgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2RldGFpbF9iYXNlLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9kZXRhaWxfYmFzZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNGJjOGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9kZXRhaWxfYmFzZS5odG1sCkBAIC0wLDAgKzEsMTQyIEBACit7JSBleHRlbmRzICJiYXNlYnVpbGRkZXRhaWxwYWdlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKK3slIGJsb2NrIGV4dHJhaGVhZGNvbnRlbnQgJX0KKyAgICA8IS0tIGZ1bmN0aW9ucyB0byBmb3JtYXQgcGFja2FnZSAnaW5zdGFsbGVkX3BhY2thZ2UnIGFsaWFzIC0tPgorICAgIDxzY3JpcHQ+CisgICAgZnVuY3Rpb24gZm10QWxpYXNIZWxwKHBhY2thZ2VfbmFtZSwgYWxpYXMsIGhvdmVyKSB7CisgICAgICAgIHZhciByID0gbnVsbDsKKyAgICAgICAgaWYgKGFsaWFzICE9IG51bGwgJiYgYWxpYXMgIT0gJycpIHsKKyAgICAgICAgICAgIHIgPSAnPHNwYW4gY2xhc3M9Im11dGVkIj4gYXMgJyArIGFsaWFzICsgJyZuYnNwJzsKKyAgICAgICAgICAgIHIgKz0gJzxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAnOworICAgICAgICAgICAgaWYgKGhvdmVyKSB7CisgICAgICAgICAgICAgICAgcis9ICcgaG92ZXItaGVscCc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByKz0gJyBoZWFkaW5nLWhlbHAnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgciArPSAnIic7CisgICAgICAgICAgICB0aXRsZSA9IHBhY2thZ2VfbmFtZSArICcgd2FzIHJlbmFtZWQgYXQgcGFja2FnaW5nIHRpbWUgYW5kIHdhcyBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0gYXMgJyArIGFsaWFzOworICAgICAgICAgICAgciArPSAnIHRpdGxlPSInICsgdGl0bGUgKyAnIj4nOworICAgICAgICAgICAgciArPSAnPC9pPic7CisgICAgICAgICAgICByICs9ICc8L3NwYW4+JzsKKyAgICAgICAgICAgIGRvY3VtZW50LndyaXRlKHIpOworICAgICAgICB9CisgICAgfQorICAgIDwvc2NyaXB0PgoreyUgZW5kYmxvY2sgZXh0cmFoZWFkY29udGVudCAlfQoreyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9CisgICAgeyUgaWYgdGFyZ2V0ICV9CisgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgInRhcmdldCIgYnVpbGQuaWQgdGFyZ2V0LmlkICV9Ij57e3RhcmdldC50YXJnZXR9fTwvYT48L2xpPgorICAgICAgICA8bGk+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319IHslIGlmIHBhY2thZ2UuYWxpYXMgJX0gYXMge3twYWNrYWdlLmFsaWFzfX17JSBlbmRpZiAlfTwvbGk+CisgICAgeyUgZWxzZSAlfQorICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICJwYWNrYWdlcyIgYnVpbGQuaWQgJX0iPiBQYWNrYWdlcyA8L2E+PC9saT4KKyAgICAgICAgPGxpPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fTwvbGk+CisgICAgeyUgZW5kaWYgJX0KK3slIGVuZGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorCit7JSBibG9jayBwYWdlZGV0YWlsaW5mb21haW4gJX0KKyAgICA8ZGl2IGNsYXNzPSJyb3cgc3BhbjExIj4KKyAgICAgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgICAgICAgICAgeyUgYmxvY2sgdGl0bGUgJX0KKyAgICAgICAgICAgIDxoMT57e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX08L2gxPgorICAgICAgICAgICAgeyUgZW5kYmxvY2sgdGl0bGUgJX0KKyAgICAgICAgPC9kaXY+IDwhLS0gcGFnZS1oZWFkZXIgLS0+CisgICAgPC9kaXY+IDwhLS0gcm93IHNwYW4xMSBwYWdlLWhlYWRlciAtLT4KKworICAgIHslIGJsb2NrIHR3b2NvbHVtbnMgJX0KKyAgICA8ZGl2IGNsYXNzPSJyb3cgc3BhbjcgdGFiYmFibGUiPgorICAgICAgICB7JSBibG9jayB0YWJjb250ZW50ICV9CisgICAgICAgIHslIGVuZGJsb2NrIHRhYmNvbnRlbnQgJX0KKyAgICA8L2Rpdj4gPCEtLSByb3cgc3BhbjcgLS0+CisKKyAgICA8ZGl2IGNsYXNzPSJyb3cgc3BhbjQgd2VsbCI+CisgICAgICAgIDxoMj5QYWNrYWdlIGluZm9ybWF0aW9uPC9oMj4KKworICAgICAgICA8IS0tIGluZm8gcHJlc2VudGVkIGFzIGRlZmluaXRpb24gbGlzdCAtLT4KKyAgICAgICAgPGRsIGNsYXNzPSJpdGVtLWluZm8iPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIFNpemUKKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHNpemUgb2YgdGhlIHBhY2thZ2UiPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgeyUgY29tbWVudCAlfQorICAgICAgICAgICAgICAgICAgICBpZiByZWNpcGUgaXMgYWJzZW50LCBmaWxlc2l6ZSBpcyBub3QgMAorICAgICAgICAgICAgICAgIHslIGVuZGNvbW1lbnQgJX0KKyAgICAgICAgICAgICAgICB7JSBpZiBwYWNrYWdlLnJlY2lwZV9pZCA+IDAgJX0KKyAgICAgICAgICAgICAgICAgICAge3twYWNrYWdlLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fQorICAgICAgICAgICAgICAgICAgICB7JSBpZiB0YXJnZXQuZmlsZV9zaXplICV9CisgICAgICAgICAgICAgICAgICAgICAgICAoe3twYWNrYWdlLnNpemV8bXVsdGlwbHk6MTAwfGRpdmlkZTp0YXJnZXQuZmlsZV9zaXplfX0lIG9mIGluY2x1ZGVkIHBhY2thZ2Ugc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKworICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L2RkPgorCisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgTGljZW5zZQorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbGljZW5zZSB1bmRlciB3aGljaCB0aGlzIHBhY2thZ2UgaXMgZGlzdHJpYnV0ZWQiPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3twYWNrYWdlLmxpY2Vuc2V9fTwvZGQ+CisKKyAgICAgICAgICAgIHslIGNvbW1lbnQgJX0KKyAgICAgICAgICAgICMgUmVtb3ZlZCBwZXIgcmV2aWV3IG9uIDEvMTgvMjAxNCB1bnRpbCBsaWNlbnNlIGRhdGEgcG9wdWxhdGlvbgorICAgICAgICAgICAgIyBwcm9ibGVtc2UgYXJlIHJlc29sdmVkLgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIExpY2Vuc2UgZmlsZXMKKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iUGF0aCB0byB0aGUgbGljZW5zZSBmaWxlcyB0aGF0IGFwcGx5IHRvIHRoZSBwYWNrYWdlIj48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPjwvZGQ+CisgICAgICAgICAgICB7JSBlbmRjb21tZW50ICV9CisKKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICBSZWNpcGUKKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIG5hbWUgb2YgdGhlIHJlY2lwZSBidWlsZGluZyB0aGlzIHBhY2thZ2UiPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgeyUgaWYgcGFja2FnZS5yZWNpcGVfaWQgPiAwICV9CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5pZCBwYWNrYWdlLnJlY2lwZV9pZCAlfSI+IHt7cGFja2FnZS5yZWNpcGUubmFtZX19IDwvYT4KKyAgICAgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgICAgIHt7cGFja2FnZS5yZWNpcGUubmFtZX19CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDwvZGQ+CisKKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICBSZWNpcGUgdmVyc2lvbgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgdmVyc2lvbiBvZiB0aGUgcmVjaXBlIGJ1aWxkaW5nIHRoaXMgcGFja2FnZSI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD57e3BhY2thZ2UucmVjaXBlLnZlcnNpb259fTwvZGQ+CisKKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICBMYXllcgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhpcyBwYWNrYWdlIj48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIHt7cGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0KKyAgICAgICAgICAgICAgICB7JSBpZiBwYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV8Zm9ybWF0X25vbmVfYW5kX3plcm8gIT0gIiIgJX0KKyAgICAgICAgICAgICAgICAgICAgeyUgY29tbWVudCAlfQorICAgICAgICAgICAgICAgICAgICAjIFJlbW92ZWQgcGVyIHRlYW0gbWVldGluZyBvZiAxLzI5LzIwMTQgdW50aWwKKyAgICAgICAgICAgICAgICAgICAgIyBkZWNpc2lvbiBvbiBpbmRleCBzZWFyY2ggYWxnb3JpdGhtCisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZyIgIHRhcmdldD0iX2JsYW5rIj4KKyAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tc2hhcmUgZ2V0LWluZm8iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICB7JSBlbmRjb21tZW50ICV9CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICB7JSBpZiBwYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmJyYW5jaCAlfQorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIExheWVyIGJyYW5jaAorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgR2l0IGJyYW5jaCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhpcyBwYWNrYWdlIj48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPnt7cGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5icmFuY2h9fTwvZGQ+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIExheWVyIGNvbW1pdAorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgR2l0IGNvbW1pdCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhpcyBwYWNrYWdlIj48L2k+CisgICAgICAgICAgICA8L2R0PgorCisgICAgICAgICAgICA8ZGQgY2xhc3M9ImlzY29tbWl0Ij57e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uY29tbWl0fX08L2RkPgorCisgICAgICAgIDwvZGw+CisgICAgPC9kaXY+IDwhLS0gcm93NCB3ZWxsIC0tPgorICAgIHslIGVuZGJsb2NrIHR3b2NvbHVtbnMgJX0KK3slIGVuZGJsb2NrIHBhZ2VkZXRhaWxpbmZvbWFpbiAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDJjYTY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzLmh0bWwKQEAgLTAsMCArMSwxMTAgQEAKK3slIGV4dGVuZHMgInBhY2thZ2VfZGV0YWlsX2Jhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKworeyUgYmxvY2sgdGl0bGUgJX0KKyAgICA8aDE+CisgICAgICAgIHt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fQorICAgICAgICA8c2NyaXB0PiBmbXRBbGlhc0hlbHAoInt7cGFja2FnZS5uYW1lfX0iLCAie3twYWNrYWdlLmFsaWFzfX0iLCBmYWxzZSkgPC9zY3JpcHQ+CisgICAgICAgIDxzbWFsbD4oe3t0YXJnZXQudGFyZ2V0fX0pPC9zbWFsbD4KKyAgICA8L2gxPgoreyUgZW5kYmxvY2sgdGl0bGUgJX0KKworeyUgYmxvY2sgdGFiY29udGVudCAlfQorICAgIHslIHdpdGggcGFja2FnZUZpbGVDb3VudD1wYWNrYWdlLmJ1aWxkZmlsZWxpc3RfcGFja2FnZS5jb3VudCAlfQorICAgIHslIGluY2x1ZGUgInBhY2thZ2VfaW5jbHVkZWRfdGFicy5odG1sIiB3aXRoIGFjdGl2ZV90YWI9ImRlcGVuZGVuY2llcyIgJX0KKyAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CisgICAgICAgPGRpdiBjbGFzcz0idGFiLXBhbmUgYWN0aXZlIiBpZD0iZGVwZW5kZW5jaWVzIj4KKyAgICAgICB7JSBpZm5vdGVxdWFsIHJ1bnRpbWVfZGVwc3xsZW5ndGggMCAlfQorICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciI+CisgICAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGg+UGFja2FnZTwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGg+VmVyc2lvbjwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9J3NpemVjb2wgc3BhbjInPlNpemU8L3RoPgorICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgICAgPHRib2R5PgorCQkJCQl7JSBmb3IgcnVudGltZV9kZXAgaW4gcnVudGltZV9kZXBzICV9CisgICAgICAgICAgICAgICAgICAgICAgICA8dHIge3tydW50aW1lX2RlcC5zaXplfGZvcm1hdF92cGFja2FnZV9yb3djbGFzc319ID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiBydW50aW1lX2RlcC5zaXplICE9IC0xICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnIGJ1aWxkLmlkIHRhcmdldC5pZCBydW50aW1lX2RlcC5kZXBlbmRzX29uX2lkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cnVudGltZV9kZXAubmFtZX19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNjcmlwdD5mbXRBbGlhc0hlbHAoInt7cnVudGltZV9kZXAubmFtZX19IiwgInt7cnVudGltZV9kZXAuYWxpYXN9fSIsIHRydWUpPC9zY3JpcHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3J1bnRpbWVfZGVwLm5hbWV8Zm9ybWF0X3ZwYWNrYWdlX25hbWVoZWxwfX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cnVudGltZV9kZXAudmVyc2lvbn19Jm5ic3A7PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9J3NpemVjb2wnPnt7cnVudGltZV9kZXAuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19Jm5ic3A7PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CisJCQkJCXslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+CisgICAgICAgICAgICAgICAgPHN0cm9uZz57e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX08L3N0cm9uZz4gaGFzIG5vIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIHslIGVuZGlmbm90ZXF1YWwgJX0KKworICAgICAgICB7JSBpZm5vdGVxdWFsIG90aGVyX2RlcHN8bGVuZ3RoIDAgJX0KKyAgICAgICAgICAgIDxoMz5PdGhlciBydW50aW1lIHJlbGF0aW9uc2hpcHM8L2gzPgorICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciI+CisgICAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGg+UGFja2FnZTwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGg+VmVyc2lvbjwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9J3NpemVjb2wgc3BhbjInPlNpemU8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJGaXZlIHJlbGF0aW9uc2hpcCB0eXBlcyBleGlzdDogcmVjb21tZW5kcywgc3VnZ2VzdHMsIHByb3ZpZGVzLCByZXBsYWNlcyBhbmQgY29uZmxpY3RzIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsYXRpb25zaGlwIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgICA8dGJvZHk+CisJCQkJCXslIGZvciBvdGhlcl9kZXAgaW4gb3RoZXJfZGVwcyAlfQorICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgb3RoZXJfZGVwLmluc3RhbGxlZCAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciB7e290aGVyX2RlcC5zaXplfGZvcm1hdF92cGFja2FnZV9yb3djbGFzc319PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiBvdGhlcl9kZXAuc2l6ZSAhPSAtMSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsJyBidWlsZC5pZCB0YXJnZXQuaWQgb3RoZXJfZGVwLmRlcGVuZHNfb25faWQgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3RoZXJfZGVwLm5hbWV9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm10QWxpYXNIZWxwKCJ7e290aGVyX2RlcC5uYW1lfX0iLCJ7e290aGVyX2RlcC5hbGlhc319IiwgdHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3RoZXJfZGVwLm5hbWV8Zm9ybWF0X3ZwYWNrYWdlX25hbWVoZWxwfX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e290aGVyX2RlcC52ZXJzaW9ufX0mbmJzcDs8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9J3NpemVjb2wnPnt7b3RoZXJfZGVwLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fSZuYnNwOzwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3RoZXJfZGVwLmRlcF90eXBlX2Rpc3BsYXl9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0ie3tvdGhlcl9kZXAuZGVwX3R5cGVfaGVscH19IiA+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJtdXRlZCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e290aGVyX2RlcC5uYW1lfX08L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvdGhlcl9kZXAudmVyc2lvbn19PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3RoZXJfZGVwLmRlcF90eXBlX2Rpc3BsYXl9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0ie3tvdGhlcl9kZXAuZGVwX3R5cGVfaGVscH19IiA+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorCQkJCQl7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgeyUgZW5kaWZub3RlcXVhbCAlfQorICAgICAgICA8L2Rpdj4gPCEtLSBlbmQgdGFiLXBhbmUgLS0+CisgICAgPC9kaXY+IDwhLS0gZW5kIHRhYiBjb250ZW50IC0tPgorICAgIHslIGVuZHdpdGggJX0KK3slIGVuZGJsb2NrIHRhYmNvbnRlbnQgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2luY2x1ZGVkX2RldGFpbC5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhYTI2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2luY2x1ZGVkX2RldGFpbC5odG1sCkBAIC0wLDAgKzEsNDQgQEAKK3slIGV4dGVuZHMgInBhY2thZ2VfZGV0YWlsX2Jhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKworeyUgYmxvY2sgdGl0bGUgJX0KKyAgICAgICAgPGgxPgorICAgICAgICAgICAge3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319CisgICAgICAgICAgICA8c2NyaXB0PgorICAgICAgICAgICAgICAgIGZtdEFsaWFzSGVscCgie3twYWNrYWdlLm5hbWV9fSIsICJ7e3BhY2thZ2UuYWxpYXN9fSIsIGZhbHNlKQorICAgICAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgICAgICA8c21hbGw+KHt7dGFyZ2V0LnRhcmdldH19KTwvc21hbGw+CisgICAgICAgIDwvaDE+Cit7JSBlbmRibG9jayB0aXRsZSAlfQorCit7JSBibG9jayB0YWJjb250ZW50ICV9Cit7JSB3aXRoIHBhY2thZ2VGaWxlQ291bnQ9cGFja2FnZS5idWlsZGZpbGVsaXN0X3BhY2thZ2UuY291bnQgJX0KKyAgICB7JSBpbmNsdWRlICJwYWNrYWdlX2luY2x1ZGVkX3RhYnMuaHRtbCIgd2l0aCBhY3RpdmVfdGFiPSJkZXRhaWwiICV9CisgICAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPgorICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSBhY3RpdmUiIGlkPSJmaWxlcyI+CisgICAgICAgICAgICB7JSBpZiBwYWNrYWdlRmlsZUNvdW50ID4gMCAlfQorICAgICAgICAgICAgeyUgaW5jbHVkZSAidGFibGVzb3J0Lmh0bWwiICV9CisgICAgICAgICAgICAgICAgPHRib2R5PgorCQkJCQl7JSBmb3IgZmlsZSBpbiBvYmplY3RzICV9CisgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJwYXRoIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdkaXJpbmZvX2ZpbGVwYXRoJyBidWlsZC5pZCB0YXJnZXQuaWQgZmlsZS5wYXRoICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmlsZS5wYXRofX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmlsZXNpemUgc2l6ZWNvbCIgPnt7ZmlsZS5zaXplfGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX08L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKwkJCQkJeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGFibGU+CisKKyAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgICAgICAgIDxzdHJvbmc+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9zdHJvbmc+IGRvZXMgbm90IGdlbmVyYXRlIGFueSBmaWxlcy4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC9kaXY+IDwhLS0gZW5kIHRhYi1wYW5lIC0tPgorICAgIDwvZGl2PiA8IS0tIGVuZCB0YWIgY29udGVudCAtLT4KKworeyUgZW5kd2l0aCAlfQoreyUgZW5kYmxvY2sgdGFiY29udGVudCAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2luY2x1ZGVkX3JldmVyc2VfZGVwZW5kZW5jaWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNjOGI0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2luY2x1ZGVkX3JldmVyc2VfZGVwZW5kZW5jaWVzLmh0bWwKQEAgLTAsMCArMSw1MCBAQAoreyUgZXh0ZW5kcyAicGFja2FnZV9kZXRhaWxfYmFzZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayB0aXRsZSAlfQorICAgICAgICA8aDE+CisgICAgICAgICAgICB7e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX0KKyAgICAgICAgICAgIDxzY3JpcHQ+IGZtdEFsaWFzSGVscCgie3twYWNrYWdlLm5hbWV9fSIsICJ7e3BhY2thZ2UuYWxpYXN9fSIsIGZhbHNlKSA8L3NjcmlwdD4KKyAgICAgICAgICAgIDxzbWFsbD4oe3t0YXJnZXQudGFyZ2V0fX0pPC9zbWFsbD4KKyAgICAgICAgPC9oMT4KK3slIGVuZGJsb2NrIHRpdGxlICV9CisKK3slIGJsb2NrIHRhYmNvbnRlbnQgJX0KKyAgICB7JSB3aXRoIHBhY2thZ2VGaWxlQ291bnQ9cGFja2FnZS5idWlsZGZpbGVsaXN0X3BhY2thZ2UuY291bnQgJX0KKyAgICB7JSBpbmNsdWRlICJwYWNrYWdlX2luY2x1ZGVkX3RhYnMuaHRtbCIgd2l0aCBhY3RpdmVfdGFiPSJyZXZlcnNlIiAlfQorICAgIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0idGFiLXBhbmUgYWN0aXZlIiBpZD0iYnJvdWdodC1pbi1ieSI+CisKKyAgICAgICAgeyUgaWZlcXVhbCByZXZlcnNlX2NvdW50IDAgJX0KKyAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+CisgICAgICAgICAgICAgICAgPHN0cm9uZz57e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX08L3N0cm9uZz4gaGFzIG5vIHJldmVyc2UgcnVudGltZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgeyUgaW5jbHVkZSAidGFibGVzb3J0Lmh0bWwiICV9CisgICAgICAgICAgICAgICAgPHRib2R5PgorCQkJCQl7JSBmb3IgcmV2ZXJzZV9kZXAgaW4gb2JqZWN0cyAlfQorICAgICAgICAgICAgICAgICAgICAgICAgPHRyIHslIGlmIHJldmVyc2VfZGVwLnNpemUgJX17e3JldmVyc2VfZGVwLnNpemV8Zm9ybWF0X3ZwYWNrYWdlX3Jvd2NsYXNzfX17JWVuZGlmJX0gPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgcmV2ZXJzZV9kZXAuc2l6ZSAhPSAtMSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCcgYnVpbGQuaWQgdGFyZ2V0LmlkIHJldmVyc2VfZGVwLnBhY2thZ2VfaWQgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyZXZlcnNlX2RlcC5wYWNrYWdlLm5hbWV9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzY3JpcHQ+Zm10QWxpYXNIZWxwKCJ7e3JldmVyc2VfZGVwLnBhY2thZ2UubmFtZX19IiwgInt7cmV2ZXJzZV9kZXAuYWxpYXN9fSIsIHRydWUpPC9zY3JpcHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3JldmVyc2VfZGVwLm5hbWV8Zm9ybWF0X3ZwYWNrYWdlX25hbWVoZWxwfX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tyZXZlcnNlX2RlcC5wYWNrYWdlLnZlcnNpb259fSZuYnNwOzwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSdzaXplY29sJz57e3JldmVyc2VfZGVwLnBhY2thZ2Uuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19Jm5ic3A7PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CisJCQkJCXslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICB7JSBlbmRpZmVxdWFsICV9CisgICAgICAgIDwvZGl2PiA8IS0tIGVuZCB0YWItcGFuZSAtLT4KKyAgICA8L2Rpdj4gPCEtLSBlbmQgdGFiIGNvbnRlbnQgLS0+CisgICAgeyUgZW5kd2l0aCAlfQoreyUgZW5kYmxvY2sgdGFiY29udGVudCAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfaW5jbHVkZWRfdGFicy5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfaW5jbHVkZWRfdGFicy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OGFhODgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF90YWJzLmh0bWwKQEAgLTAsMCArMSwzMyBAQAorCisgICAgPHVsIGNsYXNzPSJuYXYgbmF2LXBpbGxzIj4KKyAgICB7JSBpZiBhY3RpdmVfdGFiID09ICJkZXRhaWwiICV9CisgICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4KKyAgICB7JSBlbHNlICV9CisgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCcgYnVpbGQuaWQgdGFyZ2V0LmlkIHBhY2thZ2UuaWQgJX0iPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgZmlsZXMgdGhpcyBwYWNrYWdlIGFkZHMgdG8gdGhlIGltYWdlIHJvb3QgZmlsZSBzeXN0ZW0iPjwvaT4KKyAgICAgICAgICAgICAgICBGaWxlcyBpbiByb290IGZpbGUgc3lzdGVtICh7e3BhY2thZ2VGaWxlQ291bnR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICB7JSBpZiBhY3RpdmVfdGFiID09ICJkZXBlbmRlbmNpZXMiICV9CisgICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4KKyAgICB7JSBlbHNlICV9CisgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2luY2x1ZGVkX2RlcGVuZGVuY2llcycgYnVpbGQuaWQgdGFyZ2V0LmlkIHBhY2thZ2UuaWQgJX0iPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJQYWNrYWdlIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIj48L2k+CisgICAgICAgICAgICAgICAgUnVudGltZSBkZXBlbmRlbmNpZXMgKHt7ZGVwZW5kZW5jeV9jb3VudH19KQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgIHslIGlmIGFjdGl2ZV90YWIgPT0gInJldmVyc2UiICV9CisgICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4KKyAgICB7JSBlbHNlICV9CisgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2luY2x1ZGVkX3JldmVyc2VfZGVwZW5kZW5jaWVzJyBidWlsZC5pZCB0YXJnZXQuaWQgcGFja2FnZS5pZCAlfSI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBwYWNrYWdlIHJ1bnRpbWUgcmV2ZXJzZSBkZXBlbmRlbmNpZXMgKGkuZS4gdGhlIHBhY2thZ2VzIGluIHRoaXMgaW1hZ2UgdGhhdCBkZXBlbmQgb24gdGhpcyBwYWNrYWdlKS4gUmV2ZXJzZSBkZXBlbmRlbmNpZXMgcmVmbGVjdCBvbmx5IHRoZSAnZGVwZW5kcycgZGVwZW5kZW5jeSB0eXBlIj48L2k+CisgICAgICAgICAgICAgICAgUmV2ZXJzZSBydW50aW1lIGRlcGVuZGVuY2llcyAoe3tyZXZlcnNlX2NvdW50fX0pCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgPC91bD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0Lmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MzU0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdC5odG1sCkBAIC0wLDAgKzEsMTMwIEBACit7JSBleHRlbmRzICJiYXNlcHJvamVjdHBhZ2UuaHRtbCIgJX0KKworeyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQoreyUgbG9hZCBzdGF0aWMgJX0KKworeyUgYmxvY2sgcHJvamVjdGluZm9tYWluICV9CisKKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2xheWVyRGVwc01vZGFsLmpzJyAlfSI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9wcm9qZWN0cGFnZS5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdD4KKyAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCl7CisgICAgdmFyIGN0eCA9IHsKKyAgICAgIHRlc3RSZWxlYXNlQ2hhbmdlVXJsOiAieyUgdXJsICd4aHJfdGVzdHJlbGVhc2VjaGFuZ2UnIHByb2plY3QuaWQgJX0iLAorICAgIH07CisKKyAgICB0cnkgeworICAgICAgcHJvamVjdFBhZ2VJbml0KGN0eCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgZG9jdW1lbnQud3JpdGUoIlNvcnJ5LCBBbiBlcnJvciBoYXMgb2NjdXJyZWQgbG9hZGluZyB0aGlzIHBhZ2UiKTsKKyAgICAgIGNvbnNvbGUud2FybihlKTsKKyAgICB9CisgIH0pOworPC9zY3JpcHQ+CisKKzxkaXYgaWQ9ImNoYW5nZS1yZWxlYXNlLW1vZGFsIiBjbGFzcz0ibW9kYWwgaGlkZSBmYWRlIGluIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJjaGFuZ2UtcmVsZWFzZS1tb2RhbCIgYXJpYS1oaWRkZW49ImZhbHNlIj4KKyAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+eDwvYnV0dG9uPgorICAgIDxoMz5DaGFuZ2luZyBZb2N0byBQcm9qZWN0IHJlbGVhc2UgdG8gPHNwYW4gY2xhc3M9InByb3Bvc2VkLXJlbGVhc2UtY2hhbmdlLW5hbWUiPjwvc3Bhbj48L2gzPgorICA8L2Rpdj4KKyAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisgICAgPHA+VGhlIGZvbGxvd2luZyBhZGRlZCBsYXllcnMgZG8gbm90IGV4aXN0IGZvciA8c3BhbiBjbGFzcz0icHJvcG9zZWQtcmVsZWFzZS1jaGFuZ2UtbmFtZSI+PC9zcGFuPjogPC9wPgorICAgIDx1bCBpZD0ibGF5ZXJzLXRvLXJlbW92ZS1saXN0Ij4KKyAgICA8L3VsPgorICAgIDxwPklmIHlvdSBjaGFuZ2UgdGhlIFlvY3RvIFByb2plY3QgcmVsZWFzZSB0byA8c3BhbiBjbGFzcz0icHJvcG9zZWQtcmVsZWFzZS1jaGFuZ2UtbmFtZSI+PC9zcGFuPiwgdGhlIGFib3ZlIGxheWVycyB3aWxsIGJlIGRlbGV0ZWQgZnJvbSB5b3VyIGFkZGVkIGxheWVycy48L3A+CisgIDwvZGl2PgorICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgorICAgIDxidXR0b24gaWQ9ImNoYW5nZS1yZWxlYXNlLWFuZC1ybS1sYXllcnMiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSI+Q2hhbmdlIHJlbGVhc2UgYW5kIGRlbGV0ZSBsYXllcnM8L2J1dHRvbj4KKyAgICA8YnV0dG9uIGNsYXNzPSJidG4iIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj5DYW5jZWw8L2J1dHRvbj4KKyAgPC9kaXY+Cis8L2Rpdj4KKworCis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiIGlkPSJwcm9qZWN0LXBhZ2UiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICA8ZGl2IGNsYXNzPSJzcGFuNiI+CisgICAgPGRpdiBjbGFzcz0id2VsbCB3ZWxsLXRyYW5zcGFyZW50IiBpZD0ibWFjaGluZS1zZWN0aW9uIj4KKyAgICAgIDxoMz5NYWNoaW5lPC9oMz4KKworICAgICAgPHAgY2xhc3M9ImxlYWQiPjxzcGFuIGlkPSJwcm9qZWN0LW1hY2hpbmUtbmFtZSI+PC9zcGFuPiA8aSB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSIiIGlkPSJjaGFuZ2UtbWFjaGluZS10b2dnbGUiIGNsYXNzPSJpY29uLXBlbmNpbCI+PC9pPjwvcD4KKworICAgICAgPGZvcm0gaWQ9InNlbGVjdC1tYWNoaW5lLWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+CisgICAgICAgICAgPHN0cm9uZz5NYWNoaW5lIGNoYW5nZXMgaGF2ZSBhIGJpZyBpbXBhY3Qgb24gYnVpbGQgb3V0Y29tZS48L3N0cm9uZz4gWW91IGNhbm5vdCByZWFsbHkgY29tcGFyZSB0aGUgYnVpbGRzIGZvciB0aGUgbmV3IG1hY2hpbmUgd2l0aCB0aGUgcHJldmlvdXMgb25lcy4KKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4KKyAgICAgICAgICA8aW5wdXQgaWQ9Im1hY2hpbmUtY2hhbmdlLWlucHV0IiBhdXRvY29tcGxldGU9Im9mZiIgdmFsdWU9IiIgZGF0YS1wcm92aWRlPSJ0eXBlYWhlYWQiIGRhdGEtbWlubGVuZ3RoPSIxIiBkYXRhLWF1dG9jb21wbGV0ZT0ib2ZmIiB0eXBlPSJ0ZXh0Ij4KKyAgICAgICAgICAgIDxidXR0b24gaWQ9Im1hY2hpbmUtY2hhbmdlLWJ0biIgY2xhc3M9ImJ0biIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+IDxhIGhyZWY9IiMiIGlkPSJjYW5jZWwtbWFjaGluZS1jaGFuZ2UiIGNsYXNzPSJidG4gYnRuLWxpbmsiPkNhbmNlbDwvYT4KKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPHA+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0bWFjaGluZXMnIHByb2plY3QuaWQgJX0iIGNsYXNzPSJsaW5rIj5WaWV3IGNvbXBhdGlibGUgbWFjaGluZXM8L2E+PC9wPgorICAgICAgPC9mb3JtPgorICAgIDwvZGl2PgorCisgICAgPGRpdiBjbGFzcz0id2VsbCB3ZWxsLXRyYW5zcGFyZW50Ij4KKyAgICAgIDxoMz5Nb3N0IGJ1aWx0IHJlY2lwZXM8L2gzPgorCisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIiBzdHlsZT0iZGlzcGxheTpub25lIiBpZD0ibm8tbW9zdC1idWlsdCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJsZWFkIj5Zb3UgaGF2ZW4ndCBidWlsdCBhbnkgcmVjaXBlcyB5ZXQ8L3NwYW4+CisgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0dGFyZ2V0cycgcHJvamVjdC5pZCAlfSI+Q2hvb3NlIGEgcmVjaXBlIHRvIGJ1aWxkPC9hPjwvcD4KKyAgICAgIDwvZGl2PgorCisgICAgICA8dWwgY2xhc3M9InVuc3R5bGVkIGNvbmZpZ3VyYXRpb24tbGlzdCIgaWQ9ImZyZXEtYnVpbGQtbGlzdCI+CisgICAgICA8L3VsPgorICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBpZD0iZnJlcS1idWlsZC1idG4iIGRpc2FibGVkPSJkaXNhYmxlZCI+QnVpbGQgc2VsZWN0ZWQgcmVjaXBlczwvYnV0dG9uPgorICAgIDwvZGl2PgorCisgICAgPGRpdiBjbGFzcz0id2VsbCB3ZWxsLXRyYW5zcGFyZW50Ij4KKyAgICAgIDxoMz5Qcm9qZWN0IHJlbGVhc2U8L2gzPgorCisgICAgICA8cCBjbGFzcz0ibGVhZCI+PHNwYW4gaWQ9InByb2plY3QtcmVsZWFzZS10aXRsZSI+PC9zcGFuPiA8aSB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSIiIGlkPSJyZWxlYXNlLWNoYW5nZS10b2dnbGUiIGNsYXNzPSJpY29uLXBlbmNpbCI+PC9pPjwvcD4KKworICAgICAgPGZvcm0gY2xhc3M9ImZvcm0taW5saW5lIiBpZD0iY2hhbmdlLXJlbGVhc2UtZm9ybSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgICA8c2VsZWN0Pjwvc2VsZWN0PgorICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHN0eWxlPSJtYXJnaW4tbGVmdDo1cHg7IiBpZD0iY2hhbmdlLXJlbGVhc2UtYnRuIj5DaGFuZ2U8L2J1dHRvbj4gPGEgaHJlZj0iIyIgaWQ9ImNhbmNlbC1yZWxlYXNlLWNoYW5nZSIgY2xhc3M9ImJ0biBidG4tbGluayI+Q2FuY2VsPC9hPgorICAgICAgPC9mb3JtPgorICAgIDwvZGl2PgorICA8L2Rpdj4KKworICA8ZGl2IGNsYXNzPSJzcGFuNiI+CisgICAgPGRpdiBjbGFzcz0id2VsbCB3ZWxsLXRyYW5zcGFyZW50IiBpZD0ibGF5ZXItY29udGFpbmVyIj4KKyAgICAgIDxoMz5MYXllcnMgPHNwYW4gY2xhc3M9Im11dGVkIGNvdW50ZXIiPig8c3BhbiBpZD0icHJvamVjdC1sYXllcnMtY291bnQiPjwvc3Bhbj4pPC9zcGFuPgorICAgICAgICA8aSBkYXRhLW9yaWdpbmFsLXRpdGxlPSJPcGVuRW1iZWRkZWQgb3JnYW5pc2VzIG1ldGFkYXRhIGludG8gbW9kdWxlcyBjYWxsZWQgJ2xheWVycycuIExheWVycyBhbGxvdyB5b3UgdG8gaXNvbGF0ZSBkaWZmZXJlbnQgdHlwZXMgb2YgY3VzdG9taXphdGlvbnMgZnJvbSBlYWNoIG90aGVyLiA8YSBocmVmPSdodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9jdXJyZW50L2Rldi1tYW51YWwvZGV2LW1hbnVhbC5odG1sI3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycycgdGFyZ2V0PSdfYmxhbmsnPk1vcmUgb24gbGF5ZXJzPC9hPiIgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIHRpdGxlPSIiPjwvaT4KKyAgICAgIDwvaDM+CisKKyAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGxlYWQiIGlkPSJuby1sYXllcnMtaW4tcHJvamVjdCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgICAgIFlvdSBuZWVkIHRvIGFkZCBzb21lIGxheWVycy4gRm9yIHRoYXQgeW91IGNhbjoKKyAgICAgICAgPHVsPgorICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RsYXllcnMnIHByb2plY3QuaWQgJX0iPlZpZXcgYWxsIGxheWVycyBjb21wYXRpYmxlIHdpdGggdGhpcyBwcm9qZWN0PC9hPjwvbGk+CisgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAnaW1wb3J0bGF5ZXInIHByb2plY3QuaWQgJX0iPkltcG9ydCBhIGxheWVyPC9hPjwvbGk+CisgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2N1cnJlbnQvZGV2LW1hbnVhbC9kZXYtbWFudWFsLmh0bWwjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzIiB0YXJnZXQ9Il9ibGFuayI+UmVhZCBhYm91dCBsYXllcnMgaW4gdGhlIGRvY3VtZW50YXRpb248L2E+PC9saT4KKyAgICAgICAgPC91bD4KKyAgICAgICAgPHA+T3IgdHlwZSBhIGxheWVyIG5hbWUgYmVsb3cuPC9wPgorICAgICAgPC9kaXY+CisKKyAgICAgIDxmb3JtIHN0eWxlPSJtYXJnaW4tdG9wOjIwcHgiPgorICAgICAgICA8IS0tZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIGVycm9yIi0tPgorCisgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgICAgICAgICAgPGlucHV0IGlkPSJsYXllci1hZGQtaW5wdXQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iVHlwZSBhIGxheWVyIG5hbWUiIGRhdGEtbWlubGVuZ3RoPSIxIiBkYXRhLWF1dG9jb21wbGV0ZT0ib2ZmIiBkYXRhLXByb3ZpZGU9InR5cGVhaGVhZCIgZGF0YS1zb3VyY2U9IiIgdHlwZT0idGV4dCI+CisgICAgICAgICAgICA8YnV0dG9uIGlkPSJhZGQtbGF5ZXItYnRuIiBjbGFzcz0iYnRuIiBkaXNhYmxlZD5BZGQ8L2J1dHRvbj4KKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0iaW1wb3J0LWFsZXJ0IiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgICAgIFRvYXN0ZXIgZG9lcyBub3Qga25vdyBhYm91dCB0aGlzIGxheWVyLiBQbGVhc2UgPGEgaHJlZj0iIyI+aW1wb3J0IGl0PC9hPgorICAgICAgICA8L2Rpdj4KKworICAgICAgICA8cD4KKyAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RsYXllcnMnIHByb2plY3QuaWQgJX0iIGlkPSJ2aWV3LWNvbXBhdGlibGUtbGF5ZXJzIj5WaWV3IGNvbXBhdGlibGUgbGF5ZXJzPC9hPgorICAgICAgICAgIDxpIGRhdGEtb3JpZ2luYWwtdGl0bGU9IlZpZXcgYWxsIHRoZSBsYXllcnMgeW91IGNhbiBidWlsZCB3aXRoIHRoZSByZWxlYXNlIHNlbGVjdGVkIGZvciB0aGlzIHByb2plY3QsIHdoaWNoIGlzIFlvY3RvIFByb2plY3QgbWFzdGVyIiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iIj48L2k+CisgICAgICAgICAgfCA8YSBocmVmPSJ7JSB1cmwgJ2ltcG9ydGxheWVyJyBwcm9qZWN0LmlkICV9Ij5JbXBvcnQgbGF5ZXI8L2E+CisgICAgICAgIDwvcD4KKyAgICAgIDwvZm9ybT4KKworICAgICAgPHVsIGNsYXNzPSJ1bnN0eWxlZCBjb25maWd1cmF0aW9uLWxpc3QiIGlkPSJsYXllcnMtaW4tcHJvamVjdC1saXN0Ij4KKyAgICAgIDwvdWw+CisgICAgPC9kaXY+CisgIDwvZGl2PgorPC9kaXY+Cit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3RidWlsZHMuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0YnVpbGRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4MDlkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0YnVpbGRzLmh0bWwKQEAgLTAsMCArMSwxMDMgQEAKK3slIGV4dGVuZHMgImJhc2Vwcm9qZWN0YnVpbGRzcGFnZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQorCisKK3slIGJsb2NrIGV4dHJhaGVhZGNvbnRlbnQgJX0KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLm1pbi5jc3MiIHR5cGU9J3RleHQvY3NzJz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLnN0cnVjdHVyZS5taW4uY3NzIiB0eXBlPSd0ZXh0L2Nzcyc+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2pxdWVyeS11aS50aGVtZS5taW4uY3NzIiB0eXBlPSd0ZXh0L2Nzcyc+Cis8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9qcXVlcnktdWkubWluLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL2ZpbHRlcnNuaXBwZXQuanMiPjwvc2NyaXB0PgoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgcHJvamVjdGluZm9tYWluICV9CisKKzxzY3JpcHQ+CisgICAgLy8gaW5pdGlhbGl6ZSB0aGUgZGF0ZSByYW5nZSBjb250cm9scworICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZGF0ZV9pbml0KCdjcmVhdGVkJywne3tsYXN0X2RhdGVfZnJvbX19Jywne3tsYXN0X2RhdGVfdG99fScsJ3t7ZGF0ZU1pbl9zdGFydGVkX29ufX0nLCd7e2RhdGVNYXhfc3RhcnRlZF9vbn19Jywne3tkYXRlcmFuZ2Vfc2VsZWN0ZWR9fScpOworICAgICAgICBkYXRlX2luaXQoJ3VwZGF0ZWQnLCd7e2xhc3RfZGF0ZV9mcm9tfX0nLCd7e2xhc3RfZGF0ZV90b319Jywne3tkYXRlTWluX2NvbXBsZXRlZF9vbn19Jywne3tkYXRlTWF4X2NvbXBsZXRlZF9vbn19Jywne3tkYXRlcmFuZ2Vfc2VsZWN0ZWR9fScpOworICAgIH0pOworPC9zY3JpcHQ+CisKKyAgICAgIDxoMj4KKyAgICAgICAgeyUgaWYgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgJX0KKyAgICAgICAgICAgIHt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR9fSBidWlsZHt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR8cGx1cmFsaXplfX0gZm91bmQKKyAgICAgICAgeyVlbGlmIHJlcXVlc3QuR0VULmZpbHRlciBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCBvciByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KKyAgICAgICAgICAgIE5vIGJ1aWxkcyBmb3VuZAorICAgICAgICB7JWVsc2UlfQorICAgICAgICAgICAgUHJvamVjdCBidWlsZHMKKyAgICAgICAgeyVlbmRpZiV9CisgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaGVhZGluZy1oZWxwIiB0aXRsZT0iVGhpcyBwYWdlIGxpc3RzIGFsbCB0aGUgYnVpbGRzIGZvciB0aGUgY3VycmVudCBwcm9qZWN0Ij48L2k+CisgICAgICA8L2gyPgorCisKKyB7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgIHslIGlmIHJlcXVlc3QuR0VULmZpbHRlciBvciByZXF1ZXN0LkdFVC5zZWFyY2ggJX0KKyAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICAgICAgPGRpdiBjbGFzcz0iYWxlcnQiPgorICAgICAgICA8Zm9ybSBjbGFzcz0ibm8tcmVzdWx0cyBpbnB1dC1hcHBlbmQiIGlkPSJzZWFyY2hmb3JtIj4KKyAgICAgICAgICAgIDxpbnB1dCBpZD0ic2VhcmNoIiBuYW1lPSJzZWFyY2giIGNsYXNzPSJpbnB1dC14eGxhcmdlIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ie3tyZXF1ZXN0LkdFVC5zZWFyY2h9fSIvPnslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfTxhIGhyZWY9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSIgY2xhc3M9ImFkZC1vbiBidG4iIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9Imljb24tcmVtb3ZlIj48L2k+PC9hPnslIGVuZGlmICV9CisgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlYXJjaCI+U2VhcmNoPC9idXR0b24+CisgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWxpbmsiIG9uY2xpY2s9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSI+U2hvdyBhbGwgYnVpbGRzPC9idXR0b24+CisgICAgICAgIDwvZm9ybT4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICB7JSBlbHNlICV9CisgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+CisgICAgICA8cCBjbGFzcz0ibGVhZCI+CisgICAgICAgIFRoaXMgcHJvamVjdCBoYXMgbm8gYnVpbGRzLgorICAgICAgPC9wPgorICAgIDwvZGl2PgorICB7JSBlbmRpZiAlfQorCisgeyUgZWxzZSAlfQorCisgIHslIGluY2x1ZGUgImJhc2V0YWJsZV90b3AuaHRtbCIgJX0KKyAgICAgICAgPCEtLSBUYWJsZSBkYXRhIHJvd3M7IHRoZSBvcmRlciBuZWVkcyB0byBtYXRjaCB0aGUgb3JkZXIgb2YgInRhYmxlY29scyIgZGVmaW5pdGlvbnM7IGFuZCB0aGUgPHRkIGNsYXNzIHZhbHVlIG5lZWRzIHRvIG1hdGNoIHRoZSB0YWJsZWNvbHMgY2xjbGFzcyB2YWx1ZSBmb3Igc2hvdy9oaWRlIGJ1dHRvbnMgdG8gd29yayAtLT4KKyAgICAgICAgeyUgZm9yIGJ1aWxkIGluIG9iamVjdHMgJX0geyMgaWYgd2UgaGF2ZSBhIGJ1aWxkLCBqdXN0IGRpc3BsYXkgaXQgI30KKyAgICAgICAgPHRyIGNsYXNzPSJkYXRhIj4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0ib3V0Y29tZSI+PGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0iPnslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQlfTxpIGNsYXNzPSJpY29uLW9rLXNpZ24gc3VjY2VzcyI+PC9pPnslZWxpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCV9PGkgY2xhc3M9Imljb24tbWludXMtc2lnbiBlcnJvciI+PC9pPnslZWxzZSV9eyVlbmRpZiV9PC9hPgorICAgICAgICAgICAgICAgICAgIHslIGlmIGJ1aWxkLnByb2plY3QgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyA8YSBocmVmPSJ7JSB1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5pZCAiY29va2VybG9nIiBidWlsZC5pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tZG93bmxvYWQtYWx0IiB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJEb3dubG9hZCBidWlsZCBsb2ciPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDwvdGQ+CisKKyAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFyZ2V0Ij57JSBmb3IgdCBpbiBidWlsZC50YXJnZXRfc2V0LmFsbCAlfSA8YSBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSI+IHt7dC50YXJnZXR9fSA8L2E+IDxiciAvPnslIGVuZGZvciAlfTwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9Im1hY2hpbmUiPjxhIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkICV9Ij57e2J1aWxkLm1hY2hpbmV9fTwvYT48L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJzdGFydGVkX29uIj48YSBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSI+e3tidWlsZC5zdGFydGVkX29ufGRhdGU6ImQvbS95IEg6aSJ9fTwvYT48L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJjb21wbGV0ZWRfb24iPjxhIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkICV9Ij57e2J1aWxkLmNvbXBsZXRlZF9vbnxkYXRlOiJkL20veSBIOmkifX08L2E+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmFpbGVkX3Rhc2tzIGVycm9yIj4KKyAgICAgICAgICAgICAgICB7JSBxdWVyeSBidWlsZC50YXNrX2J1aWxkIG91dGNvbWU9NCBvcmRlcl9fZ3Q9MCBhcyBleGVjdGFzayV9CisgICAgICAgICAgICAgICAgICAgIHslIGlmIGV4ZWN0YXNrLmNvdW50ID09IDEgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAidGFzayIgYnVpbGQuaWQgZXhlY3Rhc2suMC5pZCAlfSI+e3tleGVjdGFzay4wLnJlY2lwZS5uYW1lfX0ue3tleGVjdGFzay4wLnRhc2tfbmFtZX19PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgInRhc2tsb2dmaWxlIiBleGVjdGFzay4wLmlkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1kb3dubG9hZC1hbHQiIHRpdGxlPSIiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IkRvd25sb2FkIHRhc2sgbG9nIGZpbGUiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgeyUgZWxpZiBleGVjdGFzay5jb3VudCA+IDElfQorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJ0YXNrcyIgYnVpbGQuaWQgJX0/ZmlsdGVyPW91dGNvbWUlM0E0Ij57e2V4ZWN0YXNrLmNvdW50fX0gdGFza3t7ZXhlY3Rhc2suY291bnR8cGx1cmFsaXplfX08L2E+CisgICAgICAgICAgICAgICAgICAgIHslZW5kaWYlfQorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0iZXJyb3JzLmNvdW50Ij4KKyAgICAgICAgICAgICAgICB7JSBpZiAgYnVpbGQuZXJyb3JzLmNvdW50ICV9CisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJlcnJvcnMuY291bnQgZXJyb3IiIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkICV9I2Vycm9ycyI+e3tidWlsZC5lcnJvcnMuY291bnR9fSBlcnJvcnt7YnVpbGQuZXJyb3JzLmNvdW50fHBsdXJhbGl6ZX19PC9hPgorICAgICAgICAgICAgICAgIHslZW5kaWYlfQorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0id2FybmluZ3MuY291bnQiPnslIGlmICBidWlsZC53YXJuaW5ncy5jb3VudCAlfTxhIGNsYXNzPSJ3YXJuaW5ncy5jb3VudCB3YXJuaW5nIiBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSN3YXJuaW5ncyI+e3tidWlsZC53YXJuaW5ncy5jb3VudH19IHdhcm5pbmd7e2J1aWxkLndhcm5pbmdzLmNvdW50fHBsdXJhbGl6ZX19PC9hPnslZW5kaWYlfTwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9InRpbWUiPjxhIGhyZWY9InslIHVybCAiYnVpbGR0aW1lIiBidWlsZC5pZCAlfSI+e3tidWlsZC50aW1lc3BlbnRfc2Vjb25kc3xzZWN0b2htc319PC9hPjwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9Im91dHB1dCI+CisgICAgICAgICAgICAgIHslIGlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEICV9CisgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQlfSNpbWFnZXMiPnt7ZnN0eXBlc3xnZXRfZGljdF92YWx1ZTpidWlsZC5pZH19PC9hPgorICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgeyUgZW5kZm9yICV9CisKKworICB7JSBpbmNsdWRlICJiYXNldGFibGVfYm90dG9tLmh0bWwiICV9Cit7JSBlbmRpZiAlfQorCit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3Rjb25mLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdGNvbmYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzVhMTg4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3Rjb25mLmh0bWwKQEAgLTAsMCArMSw4NDkgQEAKK3slIGV4dGVuZHMgImJhc2Vwcm9qZWN0cGFnZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQorCisKK3slIGJsb2NrIHByb2plY3RpbmZvbWFpbiAlfQorCis8aDI+Qml0YmFrZSB2YXJpYWJsZXM8L2gyPgorCisgICAgPGRpdiBzdHlsZT0icGFkZGluZy1sZWZ0OjE5cHg7Ij4KKworICAgICAgICA8ZGwgY2xhc3M9ImRsLXZlcnRpY2FsIj4KKyAgICAgICAgICAgIHslIGlmIGRpc3Ryb19kZWZpbmVkICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImpzLWNvbmZpZy12YXItbmFtZSBqcy1jb25maWctdmFyLW1hbmFnZWQtbmFtZSI+RElTVFJPPC9zcGFuPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgc2hvcnQgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiBJZiB0aGUgdmFyaWFibGUgaXMgYmxhbmssIG1ldGEvY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmYgd2lsbCBiZSB1c2VkLiA8YnIgLz48YSBocmVmPSdodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjYuMS9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXItRElTVFJPJyB0YXJnZXQ9J19ibGFuayc+UmVhZCBtb3JlIGluIHRoZSBtYW51YWw8L2E+Ij48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkIGNsYXNzPSJsZWFkIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBpZD0iZGlzdHJvIj57e2Rpc3Ryb319PC9zcGFuPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXBlbmNpbCIgaWQ9ImNoYW5nZS1kaXN0cm8taWNvbiI+PC9pPgorICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJjaGFuZ2UtZGlzdHJvLWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICBpZD0iZWRpdC1kaXN0cm8tbmFtZS1kaXYiIGNsYXNzPSJjb250cm9sLWdyb3VwIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Im5ldy1kaXN0cm8iIHZhbHVlPSJ7e2Rpc3Ryb319Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJhcHBseS1jaGFuZ2UtZGlzdHJvIiBjbGFzcz0iYnRuIiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJjYW5jZWwtY2hhbmdlLWRpc3RybyIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWJsb2NrIGVycm9yIiBpZD0iZGlzdHJvLWVycm9yLW1lc3NhZ2UiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKyAgICAgICAgICAgIHslIGlmIGZzdHlwZXNfZGVmaW5lZCAlfQorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJqcy1jb25maWctdmFyLW5hbWUganMtY29uZmlnLXZhci1tYW5hZ2VkLW5hbWUiPklNQUdFX0ZTVFlQRVM8L3NwYW4+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkZvcm1hdHMgb2Ygcm9vdCBmaWxlIHN5c3RlbSBpbWFnZXMgdGhhdCB5b3Ugd2FudCB0byBoYXZlIGNyZWF0ZWQgPGJyIC8+PGEgaHJlZj0naHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLUlNQUdFX0ZTVFlQRVMnIHRhcmdldD0nX2JsYW5rJz5SZWFkIG1vcmUgaW4gdGhlIG1hbnVhbDwvYT4iPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQgY2xhc3M9ImxlYWQiPgorICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJpbWFnZV9mc3R5cGVzIj57e2ZzdHlwZXN9fTwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwiIGlkPSJjaGFuZ2UtaW1hZ2VfZnN0eXBlcy1pY29uIj48L2k+CisgICAgICAgICAgICAgICAgPGZvcm0gaWQ9ImNoYW5nZS1pbWFnZV9mc3R5cGVzLWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJmaWx0ZXItaW1hZ2VfZnN0eXBlcyIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCBpbWFnZSB0eXBlcyIgY2xhc3M9InNwYW40Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iYWxsLWltYWdlX2ZzdHlwZXMiIGNsYXNzPSJzY3JvbGxpbmciPgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYXBwbHktY2hhbmdlLWltYWdlX2ZzdHlwZXMiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biI+U2F2ZTwvYnV0dG9uPgorICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJjYW5jZWwtY2hhbmdlLWltYWdlX2ZzdHlwZXMiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbGluayI+Q2FuY2VsPC9idXR0b24+CisgICAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKyAgICAgICAgICAgIHslIGlmIGltYWdlX2luc3RhbGxfYXBwZW5kX2RlZmluZWQgJX0KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ianMtY29uZmlnLXZhci1uYW1lIGpzLWNvbmZpZy12YXItbWFuYWdlZC1uYW1lIj5JTUFHRV9JTlNUQUxMX2FwcGVuZDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iU3BlY2lmaWVzIGFkZGl0aW9uYWwgcGFja2FnZXMgdG8gaW5zdGFsbCBpbnRvIGFuIGltYWdlLiBJZiB5b3VyIGJ1aWxkIGNyZWF0ZXMgbW9yZSB0aGFuIG9uZSBpbWFnZSwgdGhlIHBhY2thZ2VzIHdpbGwgYmUgaW5zdGFsbGVkIGluIDxzdHJvbmc+YWxsIG9mIHRoZW08L3N0cm9uZz4gPGJyIC8+PGEgaHJlZj0naHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLUlNQUdFX0lOU1RBTEwnIHRhcmdldD0nX2JsYW5rJz5SZWFkIG1vcmUgaW4gdGhlIG1hbnVhbDwvYT4iPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQgY2xhc3M9ImxlYWQiPgorICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJpbWFnZV9pbnN0YWxsInslIGlmIGltYWdlX2luc3RhbGxfYXBwZW5kICV9eyVlbHNlJX0gY2xhc3M9Im11dGVkInslZW5kaWYlfT57JSBpZiBpbWFnZV9pbnN0YWxsX2FwcGVuZCAlfXt7aW1hZ2VfaW5zdGFsbF9hcHBlbmR9fXslZWxzZSV9Tm90IHNldHslZW5kaWYlfTwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwiIGlkPSJjaGFuZ2UtaW1hZ2VfaW5zdGFsbC1pY29uIj48L2k+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tdHJhc2giIGlkPSJkZWxldGUtaW1hZ2VfaW5zdGFsbC1pY29uIiB7JSBpZiBpbWFnZV9pbnN0YWxsX2FwcGVuZCAlfXslZWxzZSV9c3R5bGU9ImRpc3BsYXk6bm9uZTsieyVlbmRpZiV9PjwvaT4KKyAgICAgICAgICAgICAgICA8Zm9ybSBpZD0iY2hhbmdlLWltYWdlX2luc3RhbGwtZm9ybSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtYmxvY2sgc3BhbjQiPlRvIHNldCBJTUFHRV9JTlNUQUxMX2FwcGVuZCB0byBtb3JlIHRoYW4gb25lIHBhY2thZ2UsIHR5cGUgdGhlIHBhY2thZ2UgbmFtZXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXQteGxhcmdlIiBpZD0ibmV3LWltYWdlX2luc3RhbGwiIHBsYWNlaG9sZGVyPSJUeXBlIG9uZSBvciBtb3JlIHBhY2thZ2UgbmFtZXMiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYXBwbHktY2hhbmdlLWltYWdlX2luc3RhbGwiIGNsYXNzPSJidG4iIHR5cGU9ImJ1dHRvbiI+U2F2ZTwvYnV0dG9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iY2FuY2VsLWNoYW5nZS1pbWFnZV9pbnN0YWxsIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWxpbmsiPkNhbmNlbDwvYnV0dG9uPgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Zvcm0+CisgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKworICAgICAgICAgICAgeyUgaWYgcGFja2FnZV9jbGFzc2VzX2RlZmluZWQgJX0KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ianMtY29uZmlnLXZhci1uYW1lIGpzLWNvbmZpZy12YXItbWFuYWdlZC1uYW1lIj5QQUNLQUdFX0NMQVNTRVM8L3NwYW4+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlNwZWNpZmllcyB0aGUgcGFja2FnZSBtYW5hZ2VyIHRvIHVzZSB3aGVuIHBhY2thZ2luZyBkYXRhIDxiciAvPjxhIGhyZWY9J2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1QQUNLQUdFX0NMQVNTRVMnIHRhcmdldD0nX2JsYW5rJz5SZWFkIG1vcmUgaW4gdGhlIG1hbnVhbDwvYT4iPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQgY2xhc3M9ImxlYWQiPgorICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJwYWNrYWdlX2NsYXNzZXMiPnt7cGFja2FnZV9jbGFzc2VzfX08L3NwYW4+CisgICAgICAgICAgICAgICAgPGkgaWQ9ImNoYW5nZS1wYWNrYWdlX2NsYXNzZXMtaWNvbiIgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+CisgICAgICAgICAgICAgICAgPGZvcm0gaWQ9ImNoYW5nZS1wYWNrYWdlX2NsYXNzZXMtZm9ybSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgICAgICAgICAgICAgICA8bGFiZWw+CisgICAgICAgICAgICAgICAgICAgICAgICBSb290IGZpbGUgc3lzdGVtIHBhY2thZ2UgZm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHBhY2thZ2UgZm9ybWF0IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHJvb3QgZmlsZSBzeXN0ZW0uIE9wdGlvbnMgYXJlIDxjb2RlPmRldjwvY29kZT4sIDxjb2RlPmlwazwvY29kZT4gYW5kIDxjb2RlPnJwbTwvY29kZT4iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0icGFja2FnZV9jbGFzc2VzLXNlbGVjdCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPnBhY2thZ2VfZGViPC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPnBhY2thZ2VfaXBrPC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPnBhY2thZ2VfcnBtPC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgorICAgICAgICAgICAgICAgICAgICA8bGFiZWw+CisgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIHBhY2thZ2UgZm9ybWF0cworICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkV4dHJhIHBhY2thZ2UgZm9ybWF0cyB0byBidWlsZCI+PC9pPgorICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18xIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMV9pbnB1dCI+IHBhY2thZ2VfZGViCisgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iY2hlY2tib3giIGlkPSJwYWNrYWdlX2NsYXNzXzIiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18yX2lucHV0Ij4gcGFja2FnZV9pcGsKKyAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZy10b3A6MTBweDsiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYXBwbHktY2hhbmdlLXBhY2thZ2VfY2xhc3NlcyIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIj5TYXZlPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJjYW5jZWwtY2hhbmdlLXBhY2thZ2VfY2xhc3NlcyIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKyAgICAgICAgICAgIHslIGlmIHNka19tYWNoaW5lX2RlZmluZWQgJX0KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ianMtY29uZmlnLXZhci1uYW1lIGpzLWNvbmZpZy12YXItbWFuYWdlZC1uYW1lIj5TREtNQUNISU5FPC9zcGFuPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJTcGVjaWZpZXMgdGhlIGFyY2hpdGVjdHVyZSAoaS5lLiBpNjg2IG9yIHg4Nl82NCkgZm9yIHdoaWNoIHRvIGJ1aWxkIFNESyBhbmQgQURUIGl0ZW1zIDxiciAvPjxhIGhyZWY9J2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1TREtNQUNISU5FJyB0YXJnZXQ9J19ibGFuayc+UmVhZCBtb3JlIGluIHRoZSBtYW51YWw8L2E+Ij48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkIGNsYXNzPSJsZWFkIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBpZD0ic2RrbWFjaGluZSI+e3tzZGtfbWFjaGluZX19PC9zcGFuPgorICAgICAgICAgICAgICAgIDxpIGlkPSJjaGFuZ2Utc2RrbWFjaGluZS1pY29uIiBjbGFzcz0iaWNvbi1wZW5jaWwiPjwvaT4KKyAgICAgICAgICAgICAgICA8Zm9ybSBpZD0iY2hhbmdlLXNka21hY2hpbmUtZm9ybSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InJhZGlvIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0ic2RrbWFjaGluZSIgdmFsdWU9Imk2ODYiPgorICAgICAgICAgICAgICAgICAgICAgICAgaTY4NgorICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InJhZGlvIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0ic2RrbWFjaGluZSIgdmFsdWU9Ing4Nl82NCI+CisgICAgICAgICAgICAgICAgICAgICAgICB4ODZfNjQKKyAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZy10b3A6MTBweDsiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYXBwbHktY2hhbmdlLXNka21hY2hpbmUiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biI+U2F2ZTwvYnV0dG9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iY2FuY2VsLWNoYW5nZS1zZGttYWNoaW5lIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWxpbmsiPkNhbmNlbDwvYnV0dG9uPgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Zvcm0+CisgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKworICAgICAgICA8L2RsPgorCisgICAgICAgIDwhLS0gPHVsIGNsYXNzPSJ1bnN0eWxlZCBjb25maWd1cmF0aW9uLWxpc3QiIGlkPSJjb25maWd2YXItbGlzdCI+IC0tPgorICAgICAgICA8ZGwgaWQ9ImNvbmZpZ3Zhci1saXN0Ij4KKyAgICAgICAgICAgIDwhLS0gdGhlIGFkZGVkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFyZSBpbnNlcnRlZCBoZXJlIC0tPgorICAgICAgICA8L2RsPgorCisgICAgICAgIDwhLS0gcGFzcyB0aGUgZnN0eXBlcyBsaXN0LCBibGFjayBsaXN0LCBhbmQgZXh0ZXJuYWxseSBtYW5hZ2VkIHZhcmlhYmxlcyBoZXJlIC0tPgorICAgICAgICB7JSBmb3IgZnN0eXBlIGluIHZhcnNfZnN0eXBlcyAlfQorICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9ImpzLWNoZWNrYm94LWZzdHlwZXMtbGlzdCIgdmFsdWU9Int7ZnN0eXBlfX0iPgorICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgeyUgZm9yIGIgaW4gdmFyc19ibGFja2xpc3QgJX0KKyAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJqcy1jb25maWctYmxhY2tsaXN0LW5hbWUiIHZhbHVlPSJ7e2J9fSI+CisgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICB7JSBmb3IgYiBpbiB2YXJzX21hbmFnZWQgJX0KKyAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJqcy1jb25maWctbWFuYWdlZC1uYW1lIiB2YWx1ZT0ie3tifX0iPgorICAgICAgICB7JSBlbmRmb3IgJX0KKworICAgICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICAgICAgICAgIDxmb3JtIGlkPSJ2YXJpYWJsZS1mb3JtIj4KKyAgICAgICAgICAgIDxmaWVsZHNldCBzdHlsZT0icGFkZGluZy1sZWZ0OjBweDsiPgorICAgICAgICAgICAgICAgIDxsZWdlbmQ+QWRkIHZhcmlhYmxlPC9sZWdlbmQ+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjMiIHN0eWxlPSJtYXJnaW4tbGVmdDowcHg7Ij4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gIGlkPSJhZGQtY29uZmlndmFyLW5hbWUtZGl2IiBjbGFzcz0iY29udHJvbC1ncm91cCI+CisgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPgorICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIHRpdGxlPSIiIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW9yaWdpbmFsLXRpdGxlPSJWYXJpYWJsZSBuYW1lcyBhcmUgY2FzZSBzZW5zaXRpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5ub3QgaGF2ZSBzcGFjZXMsIGFuZCBjYW4gb25seSBpbmNsdWRlIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZGFzaGVzIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlR5cGUgdmFyaWFibGUgbmFtZSIgaWQ9InZhcmlhYmxlIj4KKyAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayBlcnJvciIgaWQ9Im5ldy12YXJpYWJsZS1lcnJvci1tZXNzYWdlIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlZhbHVlPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJ2YWx1ZSIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlR5cGUgdmFyaWFibGUgdmFsdWUiPjxwPgorICAgICAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYWRkLWNvbmZpZ3Zhci1idXR0b24iIGNsYXNzPSJidG4gc2F2ZSIgdHlwZT0iYnV0dG9uIiBkaXNhYmxlZD5BZGQgdmFyaWFibGU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjUgaGVscC1ibG9jayI+CisgICAgICAgICAgICAgICAgICAgIDxoNT5Tb21lIHZhcmlhYmxlcyBhcmUgcmVzZXJ2ZWQgZnJvbSBUb2FzdGVyPC9oNT4KKyAgICAgICAgICAgICAgICAgICAgPHA+VG9hc3RlciBjYW5ub3Qgc2V0IGFueSB2YXJpYWJsZXMgdGhhdCBpbXBhY3QgMSkgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGJ1aWxkIHNlcnZlcnMsCisgICAgICAgICAgICAgICAgICAgIG9yIDIpIHdoZXJlIGFydGlmYWN0cyBwcm9kdWNlZCBieSB0aGUgYnVpbGQgYXJlIHN0b3JlZC4gU3VjaCB2YXJpYWJsZXMgaW5jbHVkZTogPC9wPgorICAgICAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLUJCX0RJU0tNT05fRElSUyIgdGFyZ2V0PSJfYmxhbmsiPkJCX0RJU0tNT05fRElSUzwvYT48L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1CQl9OVU1CRVJfVEhSRUFEUyIgdGFyZ2V0PSJfYmxhbmsiPkJCX05VTUJFUl9USFJFQURTPC9hPjwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+Q1ZTX1BST1hZX0hPU1Q8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPkNWU19QUk9YWV9QT1JUPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjYuMS9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXItRExfRElSIiB0YXJnZXQ9Il9ibGFuayI+RExfRElSPC9hPjwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLVBBUkFMTEVMX01BS0UiIHRhcmdldD0iX2JsYW5rIj5QQVJBTExFTF9NQUtFPC9hPjwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLVNTVEFURV9ESVIiIHRhcmdldD0iX2JsYW5rIj5TU1RBVEVfRElSPC9hPjwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLVNTVEFURV9NSVJST1JTIiB0YXJnZXQ9Il9ibGFuayI+U1NUQVRFX01JUlJPUlM8L2E+PC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjYuMS9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXItVE1QRElSIiB0YXJnZXQ9Il9ibGFuayI+VE1QRElSPC9hPjwvY29kZT48L3A+CisgICAgICAgICAgICAgICAgICAgIDxwPlBsdXMgdGhlIGZvbGxvd2luZyBzdGFuZGFyZCBzaGVsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6PC9wPgorICAgICAgICAgICAgICAgICAgICA8cD48Y29kZT5odHRwX3Byb3h5PC9jb2RlPiA8Y29kZT5mdHBfcHJveHk8L2NvZGU+IDxjb2RlPmh0dHBzX3Byb3h5PC9jb2RlPiA8Y29kZT5hbGxfcHJveHk8L2NvZGU+PC9wPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9maWVsZHNldD4KKyAgICAgICAgICA8L2Zvcm0+CisgICAgICAgIDwvZGl2PgorCisgICAgPC9kaXY+CisKKyAgICA8c2NyaXB0PgorCisgICAgICAgIC8vIGdsb2JhbCB2YXJpYWJsZXMKKyAgICAgICAgdmFyIGRvX3JlbG9hZD1mYWxzZTsKKworICAgICAgICAvLyB2YWxpZGF0ZSBuZXcgdmFyaWFibGUgbmFtZQorICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZV9uZXdfdmFyaWFibGUoKSB7CisgICAgICAgICAgICB2YXIgdmFyaWFibGUgPSAkKCJpbnB1dCN2YXJpYWJsZSIpLnZhbCgpOworICAgICAgICAgICAgdmFyIHZhbHVlICAgID0gJCgiaW5wdXQjdmFsdWUiKS52YWwoKTsKKworICAgICAgICAgICAgLy8gcHJlc3VtZWQgaW5ub2NlbmNlCisgICAgICAgICAgICAkKCcjbmV3LXZhcmlhYmxlLWVycm9yLW1lc3NhZ2UnKS50ZXh0KCIiKTsKKyAgICAgICAgICAgIHZhciBlcnJvcl9tc2cgPSAiIjsKKworICAgICAgICAgICAgdmFyIGV4aXN0aW5nX2NvbmZpZ3ZhcnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdqcy1jb25maWctdmFyLW5hbWUnKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBleGlzdGluZ19jb25maWd2YXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nX2NvbmZpZ3ZhcnNbaV0uaW5uZXJIVE1MLnRvVXBwZXJDYXNlKCkgPT0gdmFyaWFibGUudG9VcHBlckNhc2UoKSkgeworICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiVGhpcyB2YXJpYWJsZSBpcyBhbHJlYWR5IHNldCBpbiB0aGlzIHBhZ2UsIGVkaXQgaXRzIHZhbHVlIGluc3RlYWQiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGJsYWNrbGlzdF9jb25maWd2YXJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnanMtY29uZmlnLWJsYWNrbGlzdC1uYW1lJyk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gYmxhY2tsaXN0X2NvbmZpZ3ZhcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoYmxhY2tsaXN0X2NvbmZpZ3ZhcnNbaV0udmFsdWUudG9VcHBlckNhc2UoKSA9PSB2YXJpYWJsZS50b1VwcGVyQ2FzZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICJZb3UgY2Fubm90IGVkaXQgdGhpcyB2YXJpYWJsZSBpbiBUb2FzdGVyIGJlY2F1c2UgaXQgaXMgc2V0IGJ5IHRoZSBidWlsZCBzZXJ2ZXJzIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBtYW5hZ2VkX2NvbmZpZ3ZhcnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdqcy1jb25maWctbWFuYWdlZC1uYW1lJyk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbWFuYWdlZF9jb25maWd2YXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKG1hbmFnZWRfY29uZmlndmFyc1tpXS52YWx1ZS50b1VwcGVyQ2FzZSgpID09IHZhcmlhYmxlLnRvVXBwZXJDYXNlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIllvdSBjYW5ub3Qgc2V0IHRoaXMgdmFyaWFibGUgaGVyZS4gUGxlYXNlIHNldCBpdCBpbiB0aGUgPGEgaHJlZj1cInslIHVybCAncHJvamVjdCcgcHJvamVjdC5pZCAlfVwiPnByb2plY3QgbWFpbiBwYWdlPC9hPiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgYmFkX2NoYXJzICA9IC9bXmEtekEtWjAtOVwtX10vLnRlc3QodmFyaWFibGUpOworICAgICAgICAgICAgdmFyIGhhc19zcGFjZXMgPSAoMCA8PSB2YXJpYWJsZS5pbmRleE9mKCIgIikpOworICAgICAgICAgICAgdmFyIG9ubHlfc3BhY2VzID0gKDAgPCB2YXJpYWJsZS5sZW5ndGgpICYmICgwID09IHZhcmlhYmxlLnRyaW0oKS5sZW5ndGgpOworCisgICAgICAgICAgICBpZiAob25seV9zcGFjZXMpIHsKKyAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiQSB2YWxpZCB2YXJpYWJsZSBuYW1lIGNhbm5vdCBpbmNsdWRlIHNwYWNlcyI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJhZF9jaGFycyAmJiBoYXNfc3BhY2VzKSB7CisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIkEgdmFsaWQgdmFyaWFibGUgbmFtZSBjYW4gb25seSBpbmNsdWRlIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzLCBkYXNoZXMsIGFuZCBjYW5ub3QgaW5jbHVkZSBzcGFjZXMiOworICAgICAgICAgICAgfSBlbHNlIGlmIChiYWRfY2hhcnMpIHsKKyAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiQSB2YWxpZCB2YXJpYWJsZSBuYW1lIGNhbiBvbmx5IGluY2x1ZGUgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZXMsIGFuZCBkYXNoZXMiOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIiIgIT0gZXJyb3JfbXNnKSB7CisgICAgICAgICAgICAgICAgJCgnI25ldy12YXJpYWJsZS1lcnJvci1tZXNzYWdlJykuaHRtbChlcnJvcl9tc2cpOworICAgICAgICAgICAgICAgICQoIi5zYXZlIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworCisgICAgICAgICAgICAgICAgLy8gYWRkIG9uZSAoYW5kIG9ubHkgb25lKSBlcnJvciBjbGFzcyBhcHBlbmQKKyAgICAgICAgICAgICAgICB2YXIgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhZGQtY29uZmlndmFyLW5hbWUtZGl2Iik7CisgICAgICAgICAgICAgICAgZC5jbGFzc05hbWUgPSBkLmNsYXNzTmFtZS5yZXBsYWNlKCIgZXJyb3IiLCIiKTsKKyAgICAgICAgICAgICAgICBkLmNsYXNzTmFtZSA9IGQuY2xhc3NOYW1lICsgIiBlcnJvciI7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gdmFyaWFibGUubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgJCgiLnNhdmUiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhZGQtY29uZmlndmFyLW5hbWUtZGl2Iik7CisgICAgICAgICAgICBkLmNsYXNzTmFtZSA9IGQuY2xhc3NOYW1lLnJlcGxhY2UoIiBlcnJvciIsIiIpOworCisgICAgICAgICAgICAvLyBub3cgc2V0IHRoZSAiU2F2ZSIgZW5hYmxlbWVudCBpZiAndmFsdWUnIGFsc28gcGFzc2VzCisgICAgICAgICAgICBpZiAodmFsdWUudHJpbSgpLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICAkKCIuc2F2ZSIpLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICQoIi5zYXZlIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHZhbGlkYXRlIGRpc3RybyBuYW1lCisgICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlX2Rpc3Ryb19uYW1lKCkgeworICAgICAgICAgICAgIHZhciB2YWx1ZSAgICA9ICQoImlucHV0I25ldy1kaXN0cm8iKS52YWwoKTsKKworICAgICAgICAgICAgLy8gcHJlc3VtZWQgaW5ub2NlbmNlCisgICAgICAgICAgICAkKCcjZGlzdHJvLWVycm9yLW1lc3NhZ2UnKS50ZXh0KCIiKTsKKyAgICAgICAgICAgIHZhciBlcnJvcl9tc2cgPSAiIjsKKworICAgICAgICAgICAgdmFyIGhhc19zcGFjZXMgPSAoMCA8PSB2YWx1ZS5pbmRleE9mKCIgIikpOworCisgICAgICAgICAgICBpZiAoaGFzX3NwYWNlcykgeworICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICJBIHZhbGlkIGRpc3RybyBuYW1lIGNhbm5vdCBpbmNsdWRlIHNwYWNlcyI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gdmFsdWUubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiAiOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIiIgIT0gZXJyb3JfbXNnKSB7CisgICAgICAgICAgICAgICAgJCgnI2Rpc3Ryby1lcnJvci1tZXNzYWdlJykudGV4dChlcnJvcl9tc2cpOworICAgICAgICAgICAgICAgICQoIiNhcHBseS1jaGFuZ2UtZGlzdHJvIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworCisgICAgICAgICAgICAgICAgLy8gYWRkIG9uZSAoYW5kIG9ubHkgb25lKSBlcnJvciBjbGFzcyBhcHBlbmQKKyAgICAgICAgICAgICAgICB2YXIgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlZGl0LWRpc3Ryby1uYW1lLWRpdiIpOworICAgICAgICAgICAgICAgIGQuY2xhc3NOYW1lID0gZC5jbGFzc05hbWUucmVwbGFjZSgiIGVycm9yIiwiIik7CisgICAgICAgICAgICAgICAgZC5jbGFzc05hbWUgPSBkLmNsYXNzTmFtZSArICIgZXJyb3IiOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlZGl0LWRpc3Ryby1uYW1lLWRpdiIpOworICAgICAgICAgICAgZC5jbGFzc05hbWUgPSBkLmNsYXNzTmFtZS5yZXBsYWNlKCIgZXJyb3IiLCIiKTsKKyAgICAgICAgICAgICQoIiNhcHBseS1jaGFuZ2UtZGlzdHJvIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGVzdCB0byBpbnN1cmUgYXQgbGVhc3Qgb25lIEZTIFR5cGUgaXMgY2hlY2tlZAorICAgICAgICBmdW5jdGlvbiBlbmFibGVGc1R5cGVzU2F2ZSgpIHsKKyAgICAgICAgICAgIHZhciBhbnlfY2hlY2tlZCA9IDA7CisgICAgICAgICAgICAkKCIuZnMtY2hlY2tib3gtZnN0eXBlczpjaGVja2VkIikuZWFjaChmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIGFueV9jaGVja2VkID0gMTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKCAwID09IGFueV9jaGVja2VkICkgeworICAgICAgICAgICAgICAgICQoIiNhcHBseS1jaGFuZ2UtaW1hZ2VfZnN0eXBlcyIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICQoIiNhcHBseS1jaGFuZ2UtaW1hZ2VfZnN0eXBlcyIpLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBQcmVzZXQgb3IgcmVzZXQgdGhlIFBhY2thZ2UgQ2xhc3MgY2hlY2tib3ggbGFiZWxzCisgICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVBhY2thZ2VDbGFzc0NoZWNrYm94ZXMoKSB7CisgICAgICAgICAgICAkKCcjcGFja2FnZV9jbGFzc18xLCAjcGFja2FnZV9jbGFzc18yJykuaGlkZSgpOworICAgICAgICAgICAgaWYgKCQoJ3NlbGVjdCcpLnZhbCgpID09ICdwYWNrYWdlX2RlYicpIHsKKyAgICAgICAgICAgICAgICAkKCcjcGFja2FnZV9jbGFzc18xJykuaHRtbCgnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18xX2lucHV0Ij4gcGFja2FnZV9pcGsnKTsKKyAgICAgICAgICAgICAgICAkKCcjcGFja2FnZV9jbGFzc18yJykuaHRtbCgnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18yX2lucHV0Ij4gcGFja2FnZV9ycG0nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgkKCdzZWxlY3QnKS52YWwoKSA9PSAncGFja2FnZV9pcGsnKSB7CisgICAgICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NfMScpLmh0bWwoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMV9pbnB1dCI+IHBhY2thZ2VfZGViJyk7CisgICAgICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NfMicpLmh0bWwoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMl9pbnB1dCI+IHBhY2thZ2VfcnBtJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoJCgnc2VsZWN0JykudmFsKCkgPT0gJ3BhY2thZ2VfcnBtJykgeworICAgICAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzXzEnKS5odG1sKCc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJwYWNrYWdlX2NsYXNzXzFfaW5wdXQiPiBwYWNrYWdlX2RlYicpOworICAgICAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzXzInKS5odG1sKCc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJwYWNrYWdlX2NsYXNzXzJfaW5wdXQiPiBwYWNrYWdlX2lwaycpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NfMSwgI3BhY2thZ2VfY2xhc3NfMicpLmZhZGVJbigxNTAwKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlLWFzc2VydCBoYW5kbGVycyB3aGVuIHRoZSBwYWdlIGlzIHNlcnZlZCBhbmQvb3IgcmVmcmVzaGVkIHZpYSBBamF4CisgICAgICAgIGZ1bmN0aW9uIHNldEV2ZW50SGFuZGxlcnNGb3JEeW5hbWljRWxlbWVudHMoKSB7CisKKyAgICAgICAgICAgIC8vIGNoYW5nZSB2YXJpYWJsZSB2YWx1ZQorICAgICAgICAgICAgJCgnLmpzLWljb24tcGVuY2lsLWNvbmZpZ192YXInKS5jbGljayhmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgICAgICAgICAgdmFyIHBrID0gZXZ0LnRhcmdldC5hdHRyaWJ1dGVzWyJ4LWRhdGEiXS52YWx1ZTsKKyAgICAgICAgICAgICAgICB2YXIgY3VycmVudF92YWwgPSAkKCJzcGFuI2NvbmZpZ192YXJfdmFsdWVfIitwaykudGV4dCgpOworICAgICAgICAgICAgICAgICQoJy5qcy1pY29uLXBlbmNpbC1jb25maWdfdmFyLCAuanMtaWNvbi10cmFzaC1jb25maWdfdmFyLCAjY29uZmlnX3Zhcl92YWx1ZV8nK3BrKS5oaWRlKCk7CisgICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1jb25maWdfdmFyLWZvcm1fIitwaykuc2xpZGVEb3duKCk7CisgICAgICAgICAgICAgICAgJCgiaW5wdXQjbmV3LWNvbmZpZ192YXJfIitwaykudmFsKGN1cnJlbnRfdmFsKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAkKCcuanMtY2FuY2VsLWNoYW5nZS1jb25maWdfdmFyJykuY2xpY2soZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAgICAgICAgIHZhciBwayA9IGV2dC50YXJnZXQuYXR0cmlidXRlc1sieC1kYXRhIl0udmFsdWU7CisgICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1jb25maWdfdmFyLWZvcm1fIitwaykuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnLmpzLWljb24tcGVuY2lsLWNvbmZpZ192YXIsIC5qcy1pY29uLXRyYXNoLWNvbmZpZ192YXIsICNjb25maWdfdmFyX3ZhbHVlXycrcGspLnNob3coKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAkKCIuanMtbmV3LWNvbmZpZ192YXIiKS5vbignaW5wdXQnLCBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLnZhbCgpLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICQoIi5qcy1hcHBseS1jaGFuZ2UtY29uZmlnX3ZhciIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICQoIi5qcy1hcHBseS1jaGFuZ2UtY29uZmlnX3ZhciIpLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICQoJy5qcy1hcHBseS1jaGFuZ2UtY29uZmlnX3ZhcicpLmNsaWNrKGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgeGRhdGEgICAgPSBldnQudGFyZ2V0LmF0dHJpYnV0ZXNbIngtZGF0YSJdLnZhbHVlLnNwbGl0KCI6Iik7CisgICAgICAgICAgICAgICAgdmFyIHBrICAgICAgID0geGRhdGFbMF07CisgICAgICAgICAgICAgICAgdmFyIHZhcmlhYmxlID0geGRhdGFbMV07CisgICAgICAgICAgICAgICAgdmFyIHZhbCAgICAgID0gJCgnI25ldy1jb25maWdfdmFyXycrcGspLnZhbCgpOworICAgICAgICAgICAgICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJDaGFuZ2UiIDogdmFyaWFibGUrJzonK3ZhbH0pOworICAgICAgICAgICAgICAgICQoJyNjb25maWdfdmFyX3ZhbHVlXycrcGspLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdtdXRlZCcpOworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtY29uZmlnX3Zhci1mb3JtXyIrcGspLnNsaWRlVXAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICQoJy5qcy1pY29uLXBlbmNpbC1jb25maWdfdmFyLCAuanMtaWNvbi10cmFzaC1jb25maWdfdmFyLCAjY29uZmlnX3Zhcl92YWx1ZV8nK3BrKS5zaG93KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLy8gZGVsZXRlIHZhcmlhYmxlCisgICAgICAgICAgICAkKCIuanMtaWNvbi10cmFzaC1jb25maWdfdmFyIikuY2xpY2soZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAgICAgICAgIHZhciB4ZGF0YSAgICA9IGV2dC50YXJnZXQuYXR0cmlidXRlc1sieC1kYXRhIl0udmFsdWUuc3BsaXQoIjoiKTsKKyAgICAgICAgICAgICAgICB2YXIgcGsgICAgICAgPSB4ZGF0YVswXTsKKworICAgICAgICAgICAgICAgIC8vIGhpZGUgdGhlIGRhbmdsaW5nIHRyYXNoIHRvb2x0aXAKKyAgICAgICAgICAgICAgICAkKCcjY29uZmlnX3Zhcl90cmFzaF8nK3BrKS5oaWRlKCk7CisKKyAgICAgICAgICAgICAgICAvLyBmYWRlIG91dCB0aGUgdmFyaWFibGUrdmFsdWUgZGl2LCB0aGVuIHJlZnJlc2ggdGhlIHZhcmlhYmxlIGxpc3QKKyAgICAgICAgICAgICAgICAkKCcjY29uZmlnX3Zhcl9lbnRyeV8nK3BrKS5wYXJlbnQoKS5wYXJlbnQoKS5mYWRlT3V0KDEwMDAsIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICBwb3N0RWRpdEFqYXhSZXF1ZXN0KHsiY29uZmlndmFyRGVsIjogZXZ0LnRhcmdldC5hdHRyaWJ1dGVzWyJ4LWRhdGEiXS52YWx1ZX0pOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICB9KTsKKworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gb25FZGl0UGFnZVVwZGF0ZShkYXRhKSB7CisgICAgICAgICAgICAvLyB1cGRhdGUgdGFyZ2V0cworICAgICAgICAgICAgdmFyIGk7IHZhciBvcmlnaHRtbCA9ICIiOworCisgICAgICAgICAgICB2YXIgY29uZmlndmFyc19zb3J0ZWQgPSBkYXRhLmNvbmZpZ3ZhcnMuc29ydChmdW5jdGlvbihhLCBiKXtyZXR1cm4gYVswXSA+IGJbMF19KTsKKworICAgICAgICAgICAgdmFyIG1hbmFnZWRfY29uZmlndmFycyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2pzLWNvbmZpZy12YXItbWFuYWdlZC1uYW1lJyk7CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb25maWd2YXJzX3NvcnRlZC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIC8vIHNraXAgaWYgdGhlIHZhcmlhYmxlIG5hbWUgaGFzIGEgc3BlY2lhbCBjb250ZXh0IChub3QgdXNlciBkZWZpbmVkKQorICAgICAgICAgICAgICAgIHZhciB2YXJfY29udGV4dD11bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGxlbmd0aCA9IG1hbmFnZWRfY29uZmlndmFycy5sZW5ndGg7IGogPCBsZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoKG1hbmFnZWRfY29uZmlndmFyc1tqXS5pbm5lckhUTUwgPT0gY29uZmlndmFyc19zb3J0ZWRbaV1bMF0pIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAobWFuYWdlZF9jb25maWd2YXJzW2pdLnZhbHVlICAgICA9PSBjb25maWd2YXJzX3NvcnRlZFtpXVswXSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJfY29udGV4dD0nbSc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHZhcl9jb250ZXh0ID09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAgICBvcmlnaHRtbCArPSAnPGRpdj4gPGR0PjxzcGFuIGlkPSJjb25maWdfdmFyX2VudHJ5XycrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0rJyIgY2xhc3M9ImpzLWNvbmZpZy12YXItbmFtZSI+PC9zcGFuPjxpIGNsYXNzPSJpY29uLXRyYXNoIGpzLWljb24tdHJhc2gtY29uZmlnX3ZhciIgaWQ9ImNvbmZpZ192YXJfdHJhc2hfJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSsnIiB4LWRhdGE9IicrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0rJyI+PC9pPiA8L2R0PicKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJzxkZCBjbGFzcz0ibGVhZCI+JworICAgICAgICAgICAgICAgICAgICBvcmlnaHRtbCArPSAnICAgIDxzcGFuIGlkPSJjb25maWdfdmFyX3ZhbHVlXycrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0rJyI+PC9zcGFuPicKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwganMtaWNvbi1wZW5jaWwtY29uZmlnX3ZhciIgeC1kYXRhPSInK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciPjwvaT4nCisgICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICcgICAgPGZvcm0gaWQ9ImNoYW5nZS1jb25maWdfdmFyLWZvcm1fJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSsnIiBzdHlsZT0iZGlzcGxheTpub25lOyI+JworICAgICAgICAgICAgICAgICAgICBvcmlnaHRtbCArPSAnICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiPicKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXQteGxhcmdlIGpzLW5ldy1jb25maWdfdmFyIiBpZD0ibmV3LWNvbmZpZ192YXJfJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSsnIiB2YWx1ZT0iIj4nCisgICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICcgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4ganMtYXBwbHktY2hhbmdlLWNvbmZpZ192YXIiIHR5cGU9ImJ1dHRvbiIgeC1kYXRhPSInK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyc6Jytjb25maWd2YXJzX3NvcnRlZFtpXVswXSsnIiBkaXNhYmxlZD5TYXZlPC9idXR0b24+JworICAgICAgICAgICAgICAgICAgICBvcmlnaHRtbCArPSAnICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWxpbmsganMtY2FuY2VsLWNoYW5nZS1jb25maWdfdmFyIiB4LWRhdGE9IicrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0rJyI+Q2FuY2VsPC9idXR0b24+JworICAgICAgICAgICAgICAgICAgICBvcmlnaHRtbCArPSAnICAgICAgICA8L2Rpdj4nCisgICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICcgICAgPC9mb3JtPicKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJzwvZGQ+IDwvZGl2PicKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHVwZGF0ZSBjb25maWd2YXJzIGxpc3QgSFRNTCBmcmFtZXdvcmsKKyAgICAgICAgICAgICQoImRsI2NvbmZpZ3Zhci1saXN0IikuaHRtbChvcmlnaHRtbCk7CisKKyAgICAgICAgICAgIC8vIGluc2VydCB0aGUgbmFtZS92YWx1ZSBwYWlycyBzYWZlbHkgYXMgbm9uLUhUTUwKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb25maWd2YXJzX3NvcnRlZC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICQoJyNjb25maWdfdmFyX2VudHJ5XycrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0pLnRleHQoY29uZmlndmFyc19zb3J0ZWRbaV1bMF0pOworICAgICAgICAgICAgICAgICQoJyNjb25maWdfdmFyX3ZhbHVlXycrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0pLnRleHQoY29uZmlndmFyc19zb3J0ZWRbaV1bMV0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBBZGQgdGhlIHRvb2x0aXBzCisgICAgICAgICAgICAkKCIuanMtaWNvbi10cmFzaC1jb25maWdfdmFyIikuZWFjaCggZnVuY3Rpb24oKXsgc2V0RGVsZXRlVG9vbHRpcCgkKHRoaXMpKTsgfSk7CisgICAgICAgICAgICAkKCIuanMtaWNvbi1wZW5jaWwtY29uZmlnX3ZhciIpLmVhY2goZnVuY3Rpb24oKXsgc2V0Q2hhbmdlVG9vbHRpcCgkKHRoaXMpKTsgfSk7CisKKyAgICAgICAgICAgIC8vIHJlLWFzc2VydCB0aGVzZSBldmVudCBoYW5kbGVycworICAgICAgICAgICAgc2V0RXZlbnRIYW5kbGVyc0ZvckR5bmFtaWNFbGVtZW50cygpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gb25FZGl0QWpheFN1Y2Nlc3MoZGF0YSwgdGV4dHN0YXR1cykgeworICAgICAgICAgICAgLy8gY29uc29sZS5sb2coIlhIUiByZXR1cm5lZDoiLCBkYXRhLCAiKCIgKyB0ZXh0c3RhdHVzICsgIikiKTsKKyAgICAgICAgICAgIGlmIChkYXRhLmVycm9yICE9ICJvayIpIHsKKyAgICAgICAgICAgICAgICBhbGVydCgiZXJyb3Igb24gcmVxdWVzdDpcbiIgKyBkYXRhLmVycm9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGRlbGF5ZWQgcGFnZSByZWxvYWQ/CisgICAgICAgICAgICBpZiAoZG9fcmVsb2FkKSB7CisgICAgICAgICAgICAgICAgZG9fcmVsb2FkPWZhbHNlOworICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCh0cnVlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgb25FZGl0UGFnZVVwZGF0ZShkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG9uRWRpdEFqYXhFcnJvcihqcVhIUiwgdGV4dHN0YXR1cywgZXJyb3IpIHsKKyAgICAgICAgICAgIGFsZXJ0KCJYSFIgZXJyb3JlZDpcbiIgKyBlcnJvciArICJcbigiICsgdGV4dHN0YXR1cyArICIpIik7CisgICAgICAgICAgICAvLyByZS1hc3NlcnQgdGhlIGV2ZW50IGhhbmRsZXJzCisgICAgICAgIH0KKworICAgICAgICAvKiBlbnN1cmUgY29va2llIGV4aXN0cyB7JSBjc3JmX3Rva2VuICV9ICovCisgICAgICAgIGZ1bmN0aW9uIHBvc3RFZGl0QWpheFJlcXVlc3QocmVxZGF0YSkgeworICAgICAgICAgICAgdmFyIGFqYXggPSAkLmFqYXgoeworICAgICAgICAgICAgICAgICAgICB0eXBlOiJQT1NUIiwKKyAgICAgICAgICAgICAgICAgICAgZGF0YTogJC5wYXJhbShyZXFkYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgdXJsOiJ7JSB1cmwgJ3hocl9jb25maWd2YXJlZGl0JyBwcm9qZWN0LmlkJX0iLAorICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7ICdYLUNTUkZUb2tlbic6ICQuY29va2llKCJjc3JmdG9rZW4iKX0sCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IG9uRWRpdEFqYXhTdWNjZXNzLAorICAgICAgICAgICAgICAgICAgICBlcnJvcjogb25FZGl0QWpheEVycm9yLAorICAgICAgICAgICAgfSkKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNldERlbGV0ZVRvb2x0aXAob2JqZWN0KSB7CisgICAgICAgICAgICBvYmplY3QudG9vbHRpcCh7IGNvbnRhaW5lcjogJ2JvZHknLCBodG1sOiB0cnVlLCBkZWxheToge3Nob3c6IDQwMH0sIHRpdGxlOiAiRGVsZXRlIiB9KTsKKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBzZXRDaGFuZ2VUb29sdGlwKG9iamVjdCkgeworICAgICAgICAgICAgb2JqZWN0LnRvb2x0aXAoeyBjb250YWluZXI6ICdib2R5JywgaHRtbDogdHJ1ZSwgZGVsYXk6IHtzaG93OiA0MDB9LCB0aXRsZTogIkNoYW5nZSIgfSk7CisgICAgICAgIH0KKworICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFJlZ2lzdGVyIGhhbmRsZXJzIGZvciBzdGF0aWMgZWxlbWVudHMKKyAgICAgICAgICAgIC8vCisKKyAgICAgICAgICAgIHslIGlmIGRpc3Ryb19kZWZpbmVkICV9CisgICAgICAgICAgICAvLyBjaGFuZ2UgZGlzdHJvIHZhcmlhYmxlCisgICAgICAgICAgICAkKCcjY2hhbmdlLWRpc3Ryby1pY29uJykuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgJCgnI2NoYW5nZS1kaXN0cm8taWNvbiwgI2Rpc3RybycpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWRpc3Ryby1mb3JtIikuc2xpZGVEb3duKCk7CisgICAgICAgICAgICAgICAgJCgiI25ldy1kaXN0cm8iKS52YWwoICQoJyNkaXN0cm8nKS50ZXh0KCkgKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAkKCcjY2FuY2VsLWNoYW5nZS1kaXN0cm8nKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtZGlzdHJvLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAkKCcjZGlzdHJvLCAjY2hhbmdlLWRpc3Ryby1pY29uJykuc2hvdygpOworCisgICAgICAgICAgICAgICAgICAgIC8vIHJlc2V0IGFueSBkYW5nbGluZyBlcnJvciBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAkKCcjZGlzdHJvLWVycm9yLW1lc3NhZ2UnKS50ZXh0KCIiKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZWRpdC1kaXN0cm8tbmFtZS1kaXYiKTsKKyAgICAgICAgICAgICAgICAgICAgZC5jbGFzc05hbWUgPSBkLmNsYXNzTmFtZS5yZXBsYWNlKCIgZXJyb3IiLCIiKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyB2YWxpZGF0ZSBuZXcgZGlzdHJvIG5hbWUKKyAgICAgICAgICAgICQoImlucHV0I25ldy1kaXN0cm8iKS5vbignaW5wdXQnLCBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVfZGlzdHJvX25hbWUoKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAkKCcjYXBwbHktY2hhbmdlLWRpc3RybycpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgLy8kKCcjcmVwbycpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdoaWdobGlnaHQtZ28nKTsKKyAgICAgICAgICAgICAgICB2YXIgbmFtZSA9ICQoJyNuZXctZGlzdHJvJykudmFsKCk7CisgICAgICAgICAgICAgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckNoYW5nZSIgOiAnRElTVFJPOicrbmFtZX0pOworICAgICAgICAgICAgICAgICQoJyNkaXN0cm8nKS50ZXh0KG5hbWUpOworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtZGlzdHJvLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI2Rpc3RybywgI2NoYW5nZS1kaXN0cm8taWNvbicpLnNob3coKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgeyUgZW5kaWYgJX0KKworCisgICAgICAgICAgICB7JSBpZiBmc3R5cGVzX2RlZmluZWQgJX0KKyAgICAgICAgICAgIC8vIGNoYW5nZSBJTUFHRV9GU1RZUEVTIHZhcmlhYmxlCisKKyAgICAgICAgICAgICQoJyNjaGFuZ2UtaW1hZ2VfZnN0eXBlcy1pY29uJykuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgJCgnI2NoYW5nZS1pbWFnZV9mc3R5cGVzLWljb24sICNpbWFnZV9mc3R5cGVzJykuaGlkZSgpOworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtaW1hZ2VfZnN0eXBlcy1mb3JtIikuc2xpZGVEb3duKCk7CisgICAgICAgICAgICAgICAgLy8gYXZvaWQgZmFsc2Ugc3Vic3RyaW5nIG1hdGNoZXMgYnkgaW5jbHVkaW5nIHNwYWNlIHNlcGFyYXRvcnMKKyAgICAgICAgICAgICAgICB2YXIgaHRtbCAgICAgICAgID0gIiI7CisgICAgICAgICAgICAgICAgdmFyIGZzdHlwZXMgICAgICA9ICIgIiArIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbWFnZV9mc3R5cGVzIikuaW5uZXJIVE1MICsgIiAiOworICAgICAgICAgICAgICAgIHZhciBmc3R5cGVzX2xpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdqcy1jaGVja2JveC1mc3R5cGVzLWxpc3QnKTsKKyAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGNoZWNrZWQgYm94ZXMgZmlyc3QKKyAgICAgICAgICAgICAgICBpZiAoIiAgIiAhPSBmc3R5cGVzKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBmc3R5cGVzX2xpc3QubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwIDw9IGZzdHlwZXMuaW5kZXhPZigiICIrZnN0eXBlc19saXN0W2ldLnZhbHVlKyIgIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPGxhYmVsIGNsYXNzPSJjaGVja2JveCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBjbGFzcz0iZnMtY2hlY2tib3gtZnN0eXBlcyIgdmFsdWU9IicrZnN0eXBlc19saXN0W2ldLnZhbHVlKyciIGNoZWNrZWQ9ImNoZWNrZWQiPicrZnN0eXBlc19saXN0W2ldLnZhbHVlKyc8L2xhYmVsPlxuJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIHVuLWNoZWNrZWQgYm94ZXMgc2Vjb25kCisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGZzdHlwZXNfbGlzdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoMCAgPiBmc3R5cGVzLmluZGV4T2YoIiAiK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsiICIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPGxhYmVsIGNsYXNzPSJjaGVja2JveCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBjbGFzcz0iZnMtY2hlY2tib3gtZnN0eXBlcyIgdmFsdWU9IicrZnN0eXBlc19saXN0W2ldLnZhbHVlKyciPicrZnN0eXBlc19saXN0W2ldLnZhbHVlKyc8L2xhYmVsPlxuJzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWxsLWltYWdlX2ZzdHlwZXMiKS5pbm5lckhUTUwgPSBodG1sOworCisgICAgICAgICAgICAgICAgLy8gV2F0Y2ggZWxlbWVudHMgdG8gZGlzYWJsZSBTYXZlIHdoZW4gbm9uZSBhcmUgY2hlY2tlZAorICAgICAgICAgICAgICAgICQoIi5mcy1jaGVja2JveC1mc3R5cGVzIikuZWFjaChmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlRnNUeXBlc1NhdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAvLyBjbGVhciB0aGUgcHJldmlvdXMgZmlsdGVyIHZhbHVlcworICAgICAgICAgICAgICAgICQoImlucHV0I2ZpbHRlci1pbWFnZV9mc3R5cGVzIikudmFsKCIiKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAkKCcjY2FuY2VsLWNoYW5nZS1pbWFnZV9mc3R5cGVzJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWltYWdlX2ZzdHlwZXMtZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICQoJyNpbWFnZV9mc3R5cGVzLCAjY2hhbmdlLWltYWdlX2ZzdHlwZXMtaWNvbicpLnNob3coKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAkKCcjZmlsdGVyLWltYWdlX2ZzdHlwZXMnKS5vbignaW5wdXQnLCBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgIHZhciB2YWxUaGlzID0gJCh0aGlzKS52YWwoKS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgICAgICQoJyNhbGwtaW1hZ2VfZnN0eXBlcyBsYWJlbCcpLmVhY2goZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRleHQgPSAkKHRoaXMpLnRleHQoKS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSB0ZXh0LmluZGV4T2YodmFsVGhpcyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnNob3coKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuaGlkZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2FwcGx5LWNoYW5nZS1pbWFnZV9mc3R5cGVzJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAvLyBleHRyYWN0IHRoZSBzZWxlY3RlZCBmc3R5cGVzIGFuZCBzb3J0IHRoZW0KKyAgICAgICAgICAgICAgICB2YXIgZnN0eXBlc19hcnJheSA9IFtdOworICAgICAgICAgICAgICAgIHZhciBjaGVja2JveGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZnMtY2hlY2tib3gtZnN0eXBlcycpOworICAgICAgICAgICAgICAgICQoIi5mcy1jaGVja2JveC1mc3R5cGVzOmNoZWNrZWQiKS5lYWNoKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICAgIGZzdHlwZXNfYXJyYXkucHVzaCgkKHRoaXMpLnZhbCgpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBmc3R5cGVzX2FycmF5LnNvcnQoKTsKKworICAgICAgICAgICAgICAgIC8vIG5vdyBtYWtlIGEgc3RyaW5nIG9mIHRoZW0KKyAgICAgICAgICAgICAgICB2YXIgZnN0eXBlcyA9ICcnOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBmc3R5cGVzX2FycmF5Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZzdHlwZXMgKz0gZnN0eXBlc19hcnJheVtpXSArICcgJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZnN0eXBlcyA9IGZzdHlwZXMudHJpbSgpOworCisgICAgICAgICAgICAgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckNoYW5nZSIgOiAnSU1BR0VfRlNUWVBFUzonK2ZzdHlwZXN9KTsKKyAgICAgICAgICAgICAgICAkKCcjaW1hZ2VfZnN0eXBlcycpLnRleHQoZnN0eXBlcyk7CisgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2ZzdHlwZXMnKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnbXV0ZWQnKTsKKworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtaW1hZ2VfZnN0eXBlcy1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2ZzdHlwZXMsICNjaGFuZ2UtaW1hZ2VfZnN0eXBlcy1pY29uJykuc2hvdygpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisKKyAgICAgICAgICAgIHslIGlmIGltYWdlX2luc3RhbGxfYXBwZW5kX2RlZmluZWQgJX0KKworICAgICAgICAgICAgLy8gaW5pdCBJTUFHRV9JTlNUQUxMX2FwcGVuZCB0cmFzaCBpY29uCisgICAgICAgICAgICBzZXREZWxldGVUb29sdGlwKCQoJyNkZWxldGUtaW1hZ2VfaW5zdGFsbC1pY29uJykpOworCisgICAgICAgICAgICAvLyBjaGFuZ2UgSU1BR0VfSU5TVEFMTF9hcHBlbmQgdmFyaWFibGUKKyAgICAgICAgICAgICQoJyNjaGFuZ2UtaW1hZ2VfaW5zdGFsbC1pY29uJykuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgLy8gcHJlc2V0IHRoZSBlZGl0IHZhbHVlCisgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRfdmFsID0gJCgic3BhbiNpbWFnZV9pbnN0YWxsIikudGV4dCgpLnRyaW0oKTsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudF92YWwgPT0gIk5vdCBzZXQiKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdmFsPSIiOworICAgICAgICAgICAgICAgICAgICAkKCIjYXBwbHktY2hhbmdlLWltYWdlX2luc3RhbGwiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gaW5zdXJlIHRoZXNlIG5vbi1lbXB0eSB2YWx1ZXMgaGF2ZSBzaW5nbGUgc3BhY2UgcHJlZml4CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdmFsPSIgIiArIGN1cnJlbnRfdmFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAkKCJpbnB1dCNuZXctaW1hZ2VfaW5zdGFsbCIpLnZhbChjdXJyZW50X3ZhbCk7CisKKyAgICAgICAgICAgICAgICAkKCcjY2hhbmdlLWltYWdlX2luc3RhbGwtaWNvbiwgI2RlbGV0ZS1pbWFnZV9pbnN0YWxsLWljb24sICNpbWFnZV9pbnN0YWxsJykuaGlkZSgpOworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtaW1hZ2VfaW5zdGFsbC1mb3JtIikuc2xpZGVEb3duKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2NhbmNlbC1jaGFuZ2UtaW1hZ2VfaW5zdGFsbCcpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1pbWFnZV9pbnN0YWxsLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAkKCcjaW1hZ2VfaW5zdGFsbCwgI2NoYW5nZS1pbWFnZV9pbnN0YWxsLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgkKCJzcGFuI2ltYWdlX2luc3RhbGwiKS50ZXh0KCkgIT0gIk5vdCBzZXQiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZGVsZXRlLWltYWdlX2luc3RhbGwtaWNvbicpLnNob3coKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERlbGV0ZVRvb2x0aXAoJCgnI2RlbGV0ZS1pbWFnZV9pbnN0YWxsLWljb24nKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAkKCIjbmV3LWltYWdlX2luc3RhbGwiKS5vbignaW5wdXQnLCBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLnZhbCgpLnRyaW0oKS5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAkKCIjYXBwbHktY2hhbmdlLWltYWdlX2luc3RhbGwiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAkKCIjYXBwbHktY2hhbmdlLWltYWdlX2luc3RhbGwiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAkKCcjYXBwbHktY2hhbmdlLWltYWdlX2luc3RhbGwnKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIC8vIGluc3VyZSB0aGVzZSBub24tZW1wdHkgdmFsdWVzIGhhdmUgc2luZ2xlIHNwYWNlIHByZWZpeAorICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9ICIgIiArICQoJyNuZXctaW1hZ2VfaW5zdGFsbCcpLnZhbCgpLnRyaW0oKTsKKyAgICAgICAgICAgICAgICBwb3N0RWRpdEFqYXhSZXF1ZXN0KHsiY29uZmlndmFyQ2hhbmdlIiA6ICdJTUFHRV9JTlNUQUxMX2FwcGVuZDonK3ZhbHVlfSk7CisgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2luc3RhbGwnKS50ZXh0KHZhbHVlKTsKKyAgICAgICAgICAgICAgICAkKCcjaW1hZ2VfaW5zdGFsbCcpLnJlbW92ZUNsYXNzKCdtdXRlZCcpOworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtaW1hZ2VfaW5zdGFsbC1mb3JtIikuc2xpZGVVcChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgICQoJyNpbWFnZV9pbnN0YWxsLCAjY2hhbmdlLWltYWdlX2luc3RhbGwtaWNvbicpLnNob3coKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZGVsZXRlLWltYWdlX2luc3RhbGwtaWNvbicpLnNob3coKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERlbGV0ZVRvb2x0aXAoJCgnI2RlbGV0ZS1pbWFnZV9pbnN0YWxsLWljb24nKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIGRlbGV0ZSBJTUFHRV9JTlNUQUxMX2FwcGVuZCB2YXJpYWJsZSB2YWx1ZQorICAgICAgICAgICAgJCgnI2RlbGV0ZS1pbWFnZV9pbnN0YWxsLWljb24nKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICQodGhpcykudG9vbHRpcCgnaGlkZScpOworICAgICAgICAgICAgICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJDaGFuZ2UiIDogJ0lNQUdFX0lOU1RBTExfYXBwZW5kOicrJyd9KTsKKyAgICAgICAgICAgICAgICAkKCcjaW1hZ2VfaW5zdGFsbCcpLnBhcmVudCgpLmZhZGVPdXQoMTAwMCwgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2luc3RhbGwnKS5hZGRDbGFzcygnbXV0ZWQnKTsKKyAgICAgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2luc3RhbGwnKS50ZXh0KCdOb3Qgc2V0Jyk7CisgICAgICAgICAgICAgICAgICAgICQoJyNkZWxldGUtaW1hZ2VfaW5zdGFsbC1pY29uJykuaGlkZSgpOworICAgICAgICAgICAgICAgICAgICAkKCcjaW1hZ2VfaW5zdGFsbCcpLnBhcmVudCgpLmZhZGVJbigxMDAwKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgeyUgZW5kaWYgJX0KKworCisgICAgICAgICAgICB7JSBpZiBwYWNrYWdlX2NsYXNzZXNfZGVmaW5lZCAlfQorICAgICAgICAgICAgLy8gY2hhbmdlIFBBQ0tBR0VfQ0xBU1NFUyB2YXJpYWJsZQorICAgICAgICAgICAgJCgnI2NoYW5nZS1wYWNrYWdlX2NsYXNzZXMtaWNvbicpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICQoJyNjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWljb24sICNwYWNrYWdlX2NsYXNzZXMnKS5oaWRlKCk7CisgICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1wYWNrYWdlX2NsYXNzZXMtZm9ybSIpLnNsaWRlRG93bigpOworCisgICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgcHVsbGRvd24gYW5kIGNoZWNrYm94ZXMKKyAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSAkKCIjcGFja2FnZV9jbGFzc2VzIikudGV4dCgpOworICAgICAgICAgICAgICAgIGlmICggdmFsdWUuaW5kZXhPZigicGFja2FnZV9kZWIiKSA9PSAwICkgeworICAgICAgICAgICAgICAgICAgICAkKCIjcGFja2FnZV9jbGFzc2VzLXNlbGVjdCIpLnByb3AoJ3NlbGVjdGVkSW5kZXgnLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlUGFja2FnZUNsYXNzQ2hlY2tib3hlcygpOworICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoIl9pcGsiKSA+IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcGFja2FnZV9jbGFzc18xX2lucHV0IikuYXR0cigiY2hlY2tlZCIsdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCJfcnBtIikgPiAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3BhY2thZ2VfY2xhc3NfMl9pbnB1dCIpLmF0dHIoImNoZWNrZWQiLHRydWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCJwYWNrYWdlX2lwayIpID09IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICQoIiNwYWNrYWdlX2NsYXNzZXMtc2VsZWN0IikucHJvcCgnc2VsZWN0ZWRJbmRleCcsIDEpOworICAgICAgICAgICAgICAgICAgICB1cGRhdGVQYWNrYWdlQ2xhc3NDaGVja2JveGVzKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUuaW5kZXhPZigiX2RlYiIpID4gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICQoIiNwYWNrYWdlX2NsYXNzXzFfaW5wdXQiKS5hdHRyKCJjaGVja2VkIix0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoIl9ycG0iKSA+IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcGFja2FnZV9jbGFzc18yX2lucHV0IikuYXR0cigiY2hlY2tlZCIsdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoInBhY2thZ2VfcnBtIikgPT0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgJCgiI3BhY2thZ2VfY2xhc3Nlcy1zZWxlY3QiKS5wcm9wKCdzZWxlY3RlZEluZGV4JywgMik7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVBhY2thZ2VDbGFzc0NoZWNrYm94ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCJfZGViIikgPiAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3BhY2thZ2VfY2xhc3NfMV9pbnB1dCIpLmF0dHIoImNoZWNrZWQiLHRydWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUuaW5kZXhPZigiX2lwayIpID4gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICQoIiNwYWNrYWdlX2NsYXNzXzJfaW5wdXQiKS5hdHRyKCJjaGVja2VkIix0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAkKCcjY2FuY2VsLWNoYW5nZS1wYWNrYWdlX2NsYXNzZXMnKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAkKCcjcGFja2FnZV9jbGFzc2VzLCAjY2hhbmdlLXBhY2thZ2VfY2xhc3Nlcy1pY29uJykuc2hvdygpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICQoJ3NlbGVjdCcpLmNoYW5nZShmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB1cGRhdGVQYWNrYWdlQ2xhc3NDaGVja2JveGVzKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2FwcGx5LWNoYW5nZS1wYWNrYWdlX2NsYXNzZXMnKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIHZhciBlICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFja2FnZV9jbGFzc2VzLXNlbGVjdCIpOworICAgICAgICAgICAgICAgIHZhciB2YWwgPSBlLm9wdGlvbnNbZS5zZWxlY3RlZEluZGV4XS50ZXh0OworCisgICAgICAgICAgICAgICAgcGMxX2NoZWNrZWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFja2FnZV9jbGFzc18xX2lucHV0IikuY2hlY2tlZDsKKyAgICAgICAgICAgICAgICBwYzJfY2hlY2tlZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYWNrYWdlX2NsYXNzXzJfaW5wdXQiKS5jaGVja2VkOworICAgICAgICAgICAgICAgIGlmICh2YWwgPT0gInBhY2thZ2VfZGViIikgeworICAgICAgICAgICAgICAgICAgICBpZiAocGMxX2NoZWNrZWQpIHZhbCA9IHZhbCArICIgcGFja2FnZV9pcGsiOworICAgICAgICAgICAgICAgICAgICBpZiAocGMyX2NoZWNrZWQpIHZhbCA9IHZhbCArICIgcGFja2FnZV9ycG0iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodmFsID09ICJwYWNrYWdlX2lwayIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBjMV9jaGVja2VkKSB2YWwgPSB2YWwgKyAiIHBhY2thZ2VfZGViIjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBjMl9jaGVja2VkKSB2YWwgPSB2YWwgKyAiIHBhY2thZ2VfcnBtIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAicGFja2FnZV9ycG0iKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYzFfY2hlY2tlZCkgdmFsID0gdmFsICsgIiBwYWNrYWdlX2RlYiI7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYzJfY2hlY2tlZCkgdmFsID0gdmFsICsgIiBwYWNrYWdlX2lwayI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NlcycpLnRleHQodmFsKTsKKyAgICAgICAgICAgICAgICAvLyQoJyNwYWNrYWdlX2NsYXNzZXMnKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnbXV0ZWQnKTsKKyAgICAgICAgICAgICAgICBwb3N0RWRpdEFqYXhSZXF1ZXN0KHsiY29uZmlndmFyQ2hhbmdlIiA6ICdQQUNLQUdFX0NMQVNTRVM6Jyt2YWx9KTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLXBhY2thZ2VfY2xhc3Nlcy1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NlcywgI2NoYW5nZS1wYWNrYWdlX2NsYXNzZXMtaWNvbicpLnNob3coKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgeyUgZW5kaWYgJX0KKworCisgICAgICAgICAgICB7JSBpZiBzZGtfbWFjaGluZV9kZWZpbmVkICV9CisgICAgICAgICAgICAvLyBjaGFuZ2UgU0RLTUFDSElORSB2YXJpYWJsZQorICAgICAgICAgICAgJCgnI2NoYW5nZS1zZGttYWNoaW5lLWljb24nKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgY3VycmVudF92YWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZGttYWNoaW5lIikuaW5uZXJIVE1MOworICAgICAgICAgICAgICAgIHZhciByYWRpb3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgnc2RrbWFjaGluZScpOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByYWRpb3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcmFkaW9zW2ldLmNoZWNrZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJhZGlvc1tpXS52YWx1ZSA9PSBjdXJyZW50X3ZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByYWRpb3NbaV0uY2hlY2tlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgJCgnI2NoYW5nZS1zZGttYWNoaW5lLWljb24sICNzZGttYWNoaW5lJykuaGlkZSgpOworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2Utc2RrbWFjaGluZS1mb3JtIikuc2xpZGVEb3duKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2NhbmNlbC1jaGFuZ2Utc2RrbWFjaGluZScpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1zZGttYWNoaW5lLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAkKCcjc2RrbWFjaGluZSwgI2NoYW5nZS1zZGttYWNoaW5lLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2FwcGx5LWNoYW5nZS1zZGttYWNoaW5lJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICB2YXIgdmFsdWU9IiI7CisgICAgICAgICAgICAgICAgdmFyIHJhZGlvcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCdzZGttYWNoaW5lJyk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHJhZGlvcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAocmFkaW9zW2ldLmNoZWNrZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvIHdoYXRldmVyIHlvdSB3YW50IHdpdGggdGhlIGNoZWNrZWQgcmFkaW8KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXJhZGlvc1tpXS52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJDaGFuZ2UiIDogJ1NES01BQ0hJTkU6Jyt2YWx1ZX0pOworICAgICAgICAgICAgICAgICQoJyNzZGttYWNoaW5lJykudGV4dCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1zZGttYWNoaW5lLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAkKCcjc2RrbWFjaGluZSwgI2NoYW5nZS1zZGttYWNoaW5lLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgeyUgZW5kaWYgJX0KKworCisgICAgICAgICAgICAvLyBhZGQgbmV3IHZhcmlhYmxlCisgICAgICAgICAgICAkKCJidXR0b24jYWRkLWNvbmZpZ3Zhci1idXR0b24iKS5jbGljayggZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAgICAgICAgIHZhciB2YXJpYWJsZSA9ICQoImlucHV0I3ZhcmlhYmxlIikudmFsKCk7CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlICAgID0gJCgiaW5wdXQjdmFsdWUiKS52YWwoKTsKKworICAgICAgICAgICAgICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJBZGQiIDogdmFyaWFibGUrJzonK3ZhbHVlfSk7CisKKyAgICAgICAgICAgICAgICAvLyBjbGVhciB0aGUgcHJldmlvdXMgdmFsdWVzCisgICAgICAgICAgICAgICAgJCgiaW5wdXQjdmFyaWFibGUiKS52YWwoIiIpOworICAgICAgICAgICAgICAgICQoImlucHV0I3ZhbHVlIikudmFsKCIiKTsKKyAgICAgICAgICAgICAgICAvLyBEaXNhYmxlIGFkZCBidXR0b24KKyAgICAgICAgICAgICAgICAkKCIuc2F2ZSIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbG9hZCBwYWdlIGlmIGFkbWluLXJlbW92ZWQgY29yZSBtYW5hZ2VkIHZhbHVlIGlzIG1hbnVhbGx5IGFkZGVkIGJhY2sgaW4KKyAgICAgICAgICAgICAgICBpZiAoMCA8PSAiIERJU1RSTyBJTUFHRV9GU1RZUEVTIElNQUdFX0lOU1RBTExfYXBwZW5kIFBBQ0tBR0VfQ0xBU1NFUyBTREtNQUNISU5FICIuaW5kZXhPZiggIiAiK3ZhcmlhYmxlKyIgIiApKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGRlbGF5ZWQgcmVsb2FkIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uIHdpdGggcG9zdEVkaXRBamF4UmVxdWVzdAorICAgICAgICAgICAgICAgICAgICBkb19yZWxvYWQ9dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLy8gdmFsaWRhdGUgbmV3IHZhcmlhYmxlIG5hbWUgYW5kIHZhbHVlCisgICAgICAgICAgICAkKCIjdmFyaWFibGUsICN2YWx1ZSIpLm9uKCdpbnB1dCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhbGlkYXRlX25ld192YXJpYWJsZSgpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBkcmF3IGFuZCByZWdpc3RlciB0aGUgZHluYW1pYyBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhbmQgaGFuZGxlcnMKKyAgICAgICAgICAgIC8vCisKKyAgICAgICAgICAgIHZhciBkYXRhID0geworICAgICAgICAgICAgICAgIGNvbmZpZ3ZhcnMgOiBbXQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHslIGZvciBjIGluIGNvbmZpZ3ZhcnMgJX0KKyAgICAgICAgICAgICAgICBkYXRhLmNvbmZpZ3ZhcnMucHVzaChbICJ7e2MubmFtZX19Iiwie3tjLnZhbHVlfX0iLCJ7e2MucGt9fSIgXSk7CisgICAgICAgICAgICAgICAgeyUgaWYgJycgIT0gdmFyc19jb250ZXh0fGdldF9kaWN0X3ZhbHVlOmMubmFtZSAlfQorICAgICAgICAgICAgICAgICAgICBkYXRhLnZhcnNfY29udGV4dFsgInt7Yy5uYW1lfX0iIF0gPSAie3t2YXJzX2NvbnRleHR8Z2V0X2RpY3RfdmFsdWU6Yy5uYW1lIH19IjsKKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgeyUgZW5kZm9yICV9CisKKyAgICAgICAgICAgIC8vIGRyYXcgdGhlc2UgZWxlbWVudHMgYW5kIGFzc2VydCB0aGVpciBldmVudCBoYW5kbGVycworICAgICAgICAgICAgb25FZGl0UGFnZVVwZGF0ZShkYXRhKTsKKyAgICAgICAgfSk7CisKKyAgICA8L3NjcmlwdD4KKworeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0cy5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkNzdiNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0cy5odG1sCkBAIC0wLDAgKzEsNzcgQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KKworeyUgbG9hZCBzdGF0aWMgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KKworeyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KKworCisgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIHRvcC1haXIiPgorICAgICAgPGgxPgorICAgICAgeyUgaWYgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgJX0KKyAgICAgICAgICB7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fX0gcHJvamVjdHt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR8cGx1cmFsaXplfX0gZm91bmQKKyAgICAgIHslZWxpZiByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgICAgICAgICAgTm8gcHJvamVjdHMgZm91bmQKKyAgICAgIHslZWxzZSV9CisgICAgICAgICAgQWxsIHByb2plY3RzCisgICAgICB7JWVuZGlmJX0KKyAgICAgICA8L2gxPgorICA8L2Rpdj4KKworICB7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KKyAgICAgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIiBpZD0ic2VhcmNoZm9ybSI+CisgICAgICAgICAgICA8aW5wdXQgaWQ9InNlYXJjaCIgbmFtZT0ic2VhcmNoIiBjbGFzcz0iaW5wdXQteHhsYXJnZSIgdHlwZT0idGV4dCIgdmFsdWU9IgorICAgICAgICAgICAgICAgIHslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfQorICAgICAgICAgICAgICAgICAgICB7e3JlcXVlc3QuR0VULnNlYXJjaH19CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0iLz57JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX08YSBocmVmPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiIGNsYXNzPSJhZGQtb24gYnRuIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPjwvYT57JSBlbmRpZiAlfQorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2giPlNlYXJjaDwvYnV0dG9uPgorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiPlNob3cgYWxsIHByb2plY3RzPC9idXR0b24+CisgICAgICAgIDwvZm9ybT4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisgIHslIGVsc2UgJX0geyMgV2UgaGF2ZSBidWlsZHMgdG8gZGlzcGxheSAjfQorICB7JSBpbmNsdWRlICJiYXNldGFibGVfdG9wLmh0bWwiICV9CisgIHslIGZvciBvIGluIG9iamVjdHMgJX0KKyAgICA8dHIgY2xhc3M9ImRhdGEiPgorICAgICAgPHRkPjxhIGhyZWY9InslIHVybCAncHJvamVjdCcgby5pZCAlfSI+e3tvLm5hbWV9fTwvYT48L3RkPgorICAgICAgPHRkIGNsYXNzPSJ1cGRhdGVkIj48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIG8uaWQgJX0iPnt7by51cGRhdGVkfGRhdGU6ImQvbS95IEg6aSJ9fTwvYT48L3RkPgorICAgICAgPHRkPgorICAgICAgICB7JSBpZiBvLnJlbGVhc2UgJX0KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncHJvamVjdCcgby5pZCAlfSNwcm9qZWN0LWRldGFpbHMiPnt7by5yZWxlYXNlLm5hbWV9fTwvYT4KKyAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgTm8gcmVsZWFzZSBhdmFpbGFibGUKKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgIDwvdGQ+CisgICAgICA8dGQ+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0JyBvLmlkICV9I21hY2hpbmUtZGlzdHJvIj57e28uZ2V0X2N1cnJlbnRfbWFjaGluZV9uYW1lfX08L2E+PC90ZD4KKyAgICAgIHslIGlmIG8uZ2V0X251bWJlcl9vZl9idWlsZHMgPT0gMCAlfQorICAgICAgPHRkIGNsYXNzPSJtdXRlZCI+e3tvLmdldF9udW1iZXJfb2ZfYnVpbGRzfX08L3RkPgorICAgICAgPHRkIGNsYXNzPSJsb3V0Y29tZSI+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibHRhcmdldCI+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVycm9ycyI+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibHdhcm5pbmdzIj48L3RkPgorICAgICAgPHRkIGNsYXNzPSJsaW1hZ2VmaWxlcyI+PC90ZD4KKyAgICAgIHslIGVsc2UgJX0KKyAgICAgIDx0ZD48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RidWlsZHMnIG8uaWQgJX0iPnt7by5nZXRfbnVtYmVyX29mX2J1aWxkc319PC9hPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxvdXRjb21lIj48YSBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBvLmdldF9sYXN0X2J1aWxkX2lkICV9Ij57JWlmIG8uZ2V0X2xhc3Rfb3V0Y29tZSA9PSBidWlsZF9TVUNDRUVERUQlfTxpIGNsYXNzPSJpY29uLW9rLXNpZ24gc3VjY2VzcyI+PC9pPnslZWxpZiBvLmdldF9sYXN0X291dGNvbWUgPT0gYnVpbGRfRkFJTEVEJX08aSBjbGFzcz0iaWNvbi1taW51cy1zaWduIGVycm9yIj48L2k+eyVlbHNlJX17JWVuZGlmJX08L2E+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibHRhcmdldCI+PGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgby5nZXRfbGFzdF9idWlsZF9pZCAlfSI+e3tvLmdldF9sYXN0X3RhcmdldH19IDwvYT48L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZXJyb3JzIj57JSBpZiBvLmdldF9sYXN0X2Vycm9ycyAlfTxhIGNsYXNzPSJlcnJvcnMuY291bnQgZXJyb3IiIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIG8uZ2V0X2xhc3RfYnVpbGRfaWQgJX0jZXJyb3JzIj57e28uZ2V0X2xhc3RfZXJyb3JzfX0gZXJyb3J7e28uZ2V0X2xhc3RfZXJyb3JzfHBsdXJhbGl6ZX19PC9hPnslZW5kaWYlfTwvdGQ+CisgICAgICA8dGQgY2xhc3M9Imx3YXJuaW5ncyI+eyUgaWYgby5nZXRfbGFzdF93YXJuaW5ncyAlfTxhIGNsYXNzPSJ3YXJuaW5ncy5jb3VudCB3YXJuaW5nIiBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBvLmdldF9sYXN0X2J1aWxkX2lkICV9I3dhcm5pbmdzIj57e28uZ2V0X2xhc3Rfd2FybmluZ3N9fSB3YXJuaW5ne3tvLmdldF9sYXN0X3dhcm5pbmdzfHBsdXJhbGl6ZX19PC9hPnslZW5kaWYlfTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxpbWFnZWZpbGVzIj4KKyAgICAgICAgeyUgaWYgby5nZXRfbGFzdF9vdXRjb21lID09IGJ1aWxkX1NVQ0NFRURFRCAlfQorICAgICAgICA8YSBocmVmPSJ7JXVybCAiYnVpbGRkYXNoYm9hcmQiIG8uZ2V0X2xhc3RfYnVpbGRfaWQgJX0jaW1hZ2VzIj57e2ZzdHlwZXN8Z2V0X2RpY3RfdmFsdWU6by5pZH19PC9hPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgPC90ZD4KKworICAgICAgeyUgZW5kaWYgJX0KKyAgICA8L3RyPgorICB7JSBlbmRmb3IgJX0KKyAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX2JvdHRvbS5odG1sIiAlfQorICB7JSBlbmRpZiAlfSB7IyBlbXB0eSAjfQorCit7JSBlbmRibG9jayAlfQorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0dG9wYmFyLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdHRvcGJhci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMjc0MWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdHRvcGJhci5odG1sCkBAIC0wLDAgKzEsNDcgQEAKKzxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXN1Y2Nlc3MgbGVhZCIgaWQ9InByb2plY3QtY3JlYXRlZC1ub3RpZmljYXRpb24iIHN0eWxlPSJtYXJnaW4tdG9wOjE1cHg7IGRpc3BsYXk6bm9uZSI+CisgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0iYWxlcnQiPsOXPC9idXR0b24+CisgIFlvdXIgcHJvamVjdCA8c3Ryb25nPnt7cHJvamVjdC5uYW1lfX08L3N0cm9uZz4gaGFzIGJlZW4gY3JlYXRlZC4gWW91IGNhbiBub3cgPGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0bWFjaGluZXMnIHByb2plY3QuaWQgJX0iPnNlbGVjdCB5b3VyIHRhcmdldCBtYWNoaW5lPC9hPiBhbmQgPGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0dGFyZ2V0cycgcHJvamVjdC5pZCAlfSI+Y2hvb3NlIGltYWdlIHJlY2lwZXM8L2E+IHRvIGJ1aWxkLgorPC9kaXY+CisKKzwhLS0gcHJvamVjdCBuYW1lIC0tPgorPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICA8aDE+PHNwYW4gaWQ9InByb2plY3QtbmFtZSI+e3twcm9qZWN0Lm5hbWV9fTwvc3Bhbj4KKyAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IiIgaWQ9InByb2plY3QtY2hhbmdlLWZvcm0tdG9nZ2xlIiB0aXRsZT0iIj48L2k+CisgIDwvaDE+CisgIDxmb3JtIGlkPSJwcm9qZWN0LW5hbWUtY2hhbmdlLWZvcm0iIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwcHg7IGRpc3BsYXk6IG5vbmU7Ij4KKyAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiPgorICAgICAgPGlucHV0IGNsYXNzPSJodWdlIGlucHV0LXh4bGFyZ2UiIHR5cGU9InRleHQiIGlkPSJwcm9qZWN0LW5hbWUtY2hhbmdlLWlucHV0IiBhdXRvY29tcGxldGU9Im9mZiIgdmFsdWU9Int7cHJvamVjdC5uYW1lfX0iPgorICAgICAgICA8YnV0dG9uIGlkPSJwcm9qZWN0LW5hbWUtY2hhbmdlLWJ0biIgY2xhc3M9ImJ0biBidG4tbGFyZ2UiIHR5cGU9ImJ1dHRvbiI+U2F2ZTwvYnV0dG9uPgorICAgICAgICA8YSBocmVmPSIjIiBpZD0icHJvamVjdC1uYW1lLWNoYW5nZS1jYW5jZWwiIGNsYXNzPSJidG4gYnRuLWxhcmdlIGJ0bi1saW5rIj5DYW5jZWw8L2E+CisgICAgPC9kaXY+CisgIDwvZm9ybT4KKzwvZGl2PgorCis8ZGl2IGlkPSJwcm9qZWN0LXRvcGJhciI+CisgIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgPGxpPgorICAgICAgPGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0YnVpbGRzJyBwcm9qZWN0LmlkICV9Ij4KKyAgICAgICAgQnVpbGRzICg8c3BhbiBjbGFzcz0idG90YWwtYnVpbGRzIj4wPC9zcGFuPikKKyAgICAgIDwvYT4KKyAgICA8L2xpPgorICAgIDxsaSBpZD0idG9wYmFyLWNvbmZpZ3VyYXRpb24tdGFiIj4KKyAgICAgIDxhIGhyZWY9InslIHVybCAncHJvamVjdCcgcHJvamVjdC5pZCAlfSI+CisgICAgICAgIENvbmZpZ3VyYXRpb24KKyAgICAgIDwvYT4KKyAgICA8L2xpPgorICAgIDxsaT4KKyAgICAgIDxhIGhyZWY9InslIHVybCAnaW1wb3J0bGF5ZXInIHByb2plY3QuaWQgJX0iPgorICAgICAgICBJbXBvcnQgbGF5ZXIKKyAgICAgIDwvYT4KKyAgICA8L2xpPgorICAgIDxsaSBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgICA8Zm9ybSBjbGFzcz0iZm9ybS1pbmxpbmUiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjBweDsiPgorICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhlYWRpbmctaGVscCIgZGF0YS1wbGFjZW1lbnQ9ImxlZnQiIHRpdGxlPSIiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IlR5cGUgdGhlIG5hbWUgb2Ygb25lIG9yIG1vcmUgcmVjaXBlcyB5b3Ugd2FudCB0byBidWlsZCwgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgdGFzayBieSBhcHBlbmRpbmcgYSBzZW1pY29sb24gYW5kIGEgdGFzayBuYW1lIHRvIHRoZSByZWNpcGUgbmFtZSwgbGlrZSBzbzogPGNvZGU+YnVzeWJveDpjbGVhbjwvY29kZT4iPjwvaT4KKyAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4KKyAgICAgICAgICA8aW5wdXQgaWQ9ImJ1aWxkLWlucHV0IiB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXQteGxhcmdlIGlucHV0LWxnIGJ1aWxkLXRhcmdldC1pbnB1dCIgcGxhY2Vob2xkZXI9IlR5cGUgdGhlIHJlY2lwZSB5b3Ugd2FudCB0byBidWlsZCIgYXV0b2NvbXBsZXRlPSJvZmYiIGRpc2FibGVkPgorICAgICAgICAgIDxidXR0b24gaWQ9ImJ1aWxkLWJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidG4tbGFyZ2UgYnVpbGQtYnV0dG9uIiBkYXRhLXByb2plY3QtaWQ9Int7cHJvamVjdC5pZH19IiBkaXNhYmxlZD5CdWlsZDwvYnV0dG9uPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZm9ybT4KKyAgICA8L2xpPgorICA8L3VsPgorPC9kaXY+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVlNDE5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGUuaHRtbApAQCAtMCwwICsxLDI0MiBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkZGV0YWlscGFnZS5odG1sIiAlfQorCit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorPGxpPjxhIGhyZWY9InslIHVybCAncmVjaXBlcycgYnVpbGQucGsgJX0iPlJlY2lwZXM8L2E+PC9saT4KKzxsaT57e29iamVjdC5uYW1lfX1fe3tvYmplY3QudmVyc2lvbn19IDwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBwYWdlZGV0YWlsaW5mb21haW4gJX0KKworPCEtLSBCZWdpbiBjb250YWluZXIgLS0+CisKKzxkaXYgY2xhc3M9InJvdyBzcGFuMTEiPgorICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgICAgPGgxPnt7b2JqZWN0Lm5hbWV9fV97e29iamVjdC52ZXJzaW9ufX08L2gxPgorICAgIDwvZGl2PgorPC9kaXY+CisKKzxkaXYgY2xhc3M9InJvdyBzcGFuNyB0YWJiYWJsZSI+CisgICAgPHVsIGNsYXNzPSJuYXYgbmF2LXBpbGxzIj4KKyAgICAgICAgPGxpIGNsYXNzPSJ7e3RhYl9zdGF0ZXMuMX19Ij4KKyAgICAgICAgICAgIDxhIGhyZWY9IiNpbmZvcm1hdGlvbiIgZGF0YS10b2dnbGU9InRhYiI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkJ1aWxkLXJlbGF0ZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlY2lwZSI+PC9pPgorICAgICAgICAgICAgICAgIFJlY2lwZSBkZXRhaWxzCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgICAgIDxsaT4KKyAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgInJlY2lwZV9wYWNrYWdlcyIgYnVpbGQucGsgb2JqZWN0LmlkICV9Ij4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHBhY2thZ2VkIG91dHB1dCByZXN1bHRpbmcgZnJvbSBidWlsZGluZyB0aGUgcmVjaXBlIj48L2k+CisgICAgICAgICAgICAgICAgUGFja2FnZXMgKHt7cGFja2FnZV9jb3VudH19KQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGkgY2xhc3M9Int7dGFiX3N0YXRlcy4zfX0iPgorICAgICAgICAgICAgPGEgaHJlZj0iI2RlcGVuZGVuY2llcyIgZGF0YS10b2dnbGU9InRhYiI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSByZWNpcGUgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgKGkuZS4gb3RoZXIgcmVjaXBlcykiPjwvaT4KKyAgICAgICAgICAgICAgICBCdWlsZCBkZXBlbmRlbmNpZXMgKHt7b2JqZWN0LnJfZGVwZW5kZW5jaWVzX3JlY2lwZS5hbGwuY291bnR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpIGNsYXNzPSJ7e3RhYl9zdGF0ZXMuNH19Ij4KKyAgICAgICAgICAgIDxhIGhyZWY9IiNicm91Z2h0LWluLWJ5IiBkYXRhLXRvZ2dsZT0idGFiIj4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHJlY2lwZSBidWlsZC10aW1lIHJldmVyc2UgZGVwZW5kZW5jaWVzIChpLmUuIHRoZSByZWNpcGVzIHRoYXQgZGVwZW5kIG9uIHRoaXMgcmVjaXBlKSI+PC9pPgorICAgICAgICAgICAgICAgIFJldmVyc2UgYnVpbGQgZGVwZW5kZW5jaWVzICh7e29iamVjdC5yX2RlcGVuZGVuY2llc19kZXBlbmRzLmFsbC5jb3VudH19KQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgIDwvdWw+CisgICAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPgorICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSB7e3RhYl9zdGF0ZXMuMX19IiBpZD0iaW5mb3JtYXRpb24iPgorICAgICAgICAgICAgPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgTGF5ZXIKKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD57e2xheWVyLm5hbWV9fTwvZGQ+CisKKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJQYXRoIHRvIHRoZSByZWNpcGUgLmJiIGZpbGUiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgUmVjaXBlIGZpbGUKKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD48Y29kZT57e29iamVjdC5maWxlX3BhdGh9fSB7JSBpZiBvYmplY3QucGF0aGZsYWdzICV9PGk+KHt7b2JqZWN0LnBhdGhmbGFnc319KTwvaT57JSBlbmRpZiAlfTwvY29kZT48L2RkPgorICAgICAgICAgICAgICAgIHslIGlmIGxheWVyX3ZlcnNpb24uYnJhbmNoICV9CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIEdpdCBicmFuY2ggb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIj48L2k+CisgICAgICAgICAgICAgICAgICAgIExheWVyIGJyYW5jaAorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPnt7bGF5ZXJfdmVyc2lvbi5icmFuY2h9fTwvZGQ+CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgR2l0IGNvbW1pdCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgTGF5ZXIgY29tbWl0CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQgY2xhc3M9ImlzY29tbWl0Ij57e2xheWVyX3ZlcnNpb24uY29tbWl0fX08L2RkPgorICAgICAgICAgICAgPC9kbD4KKworICAgICAgICAgICAgPGgyIGNsYXNzPSJkZXRhaWxzIj5UYXNrczwvaDI+CisgICAgICAgICAgICB7JSBpZiBub3QgdGFza3MgJX0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgICAgICAgIDxzdHJvbmc+e3tvYmplY3QubmFtZX19X3t7b2JqZWN0LnZlcnNpb259fTwvc3Ryb25nPiBkb2VzIG5vdCBoYXZlIGFueSB0YXNrcyBpbiB0aGlzIGJ1aWxkLgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIj4KKyAgICAgICAgICAgICAgICA8dGhlYWQ+CisJCSAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHJ1bm5pbmcgc2VxdWVuY2Ugb2YgZWFjaCB0YXNrIGluIHRoZSBidWlsZCI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIKKyAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBuYW1lIG9mIHRoZSB0YXNrIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICBUYXNrCisgICAgICAgICAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGlzIHZhbHVlIHRlbGxzIHlvdSBpZiBhIHRhc2sgaGFkIHRvIHJ1biAoZXhlY3V0ZWQpIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSB0YXNrIG91dHB1dCwgb3IgaWYgdGhlIG91dHB1dCB3YXMgcHJvdmlkZWQgYnkgYW5vdGhlciB0YXNrIGFuZCB0aGVyZWZvcmUgdGhlIHRhc2sgZGlkbid0IG5lZWQgdG8gcnVuIChub3QgZXhlY3V0ZWQpIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICBFeGVjdXRlZAorICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhpcyBjb2x1bW4gdGVsbHMgeW91IGlmICdleGVjdXRlZCcgdGFza3Mgc3VjY2VlZGVkIG9yIGZhaWxlZC4gVGhlIGNvbHVtbiBhbHNvIHRlbGxzIHlvdSB3aHkgJ25vdCBleGVjdXRlZCcgdGFza3MgZGlkIG5vdCBuZWVkIHRvIHJ1biI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgT3V0Y29tZQorICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhpcyBjb2x1bW4gdGVsbHMgeW91IGlmIGEgdGFzayB0cmllZCB0byByZXN0b3JlIG91dHB1dCBmcm9tIHRoZSA8Y29kZT5zc3RhdGUtY2FjaGU8L2NvZGU+IGRpcmVjdG9yeSBvciBtaXJyb3JzLCBhbmQgcmVwb3J0cyB0aGUgcmVzdWx0OiBTdWNjZWVkZWQsIEZhaWxlZCBvciBGaWxlIG5vdCBpbiBjYWNoZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgQ2FjaGUgYXR0ZW1wdAorICAgICAgICAgICAgICAgICAgICA8L3RoPgorCQkgIDwvdHI+CisgICAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgICA8dGJvZHk+CisKKyAgICAgICAgICAgICAgICAgICAgeyUgZm9yIHRhc2sgaW4gdGFza3MgJX0KKworICAgICAgICAgICAgICAgICAgICA8dHIge3sgdGFza3x0YXNrX2NvbG9yIH19ID4KKworICAgICAgICAgICAgICAgICAgICA8dGQ+PGEge3sgdGFza3x0YXNrX2NvbG9yIH19IGhyZWY9InslIHVybCAidGFzayIgYnVpbGQucGsgdGFzay5wayAlfSI+e3t0YXNrLm9yZGVyfX08L2E+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGEge3sgdGFza3x0YXNrX2NvbG9yIH19IGhyZWY9InslIHVybCAidGFzayIgYnVpbGQucGsgdGFzay5wayAlfSI+e3t0YXNrLnRhc2tfbmFtZX19PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgdGFzay5nZXRfZGVzY3JpcHRpb24gJX08aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSIiIGRhdGEtb3JpZ2luYWwtdGl0bGU9Int7dGFzay5nZXRfZGVzY3JpcHRpb259fSI+PC9pPiB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgICAgICA8L3RkPgorCisgICAgICAgICAgICAgICAgICAgIDx0ZD48YSB7eyB0YXNrfHRhc2tfY29sb3IgfX0gaHJlZj0ieyUgdXJsICJ0YXNrIiBidWlsZC5wayB0YXNrLnBrICV9Ij57e3Rhc2suZ2V0X2V4ZWN1dGVkX2Rpc3BsYXl9fTwvYT48L3RkPgorCisgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIHt7IHRhc2t8dGFza19jb2xvciB9fSBocmVmPSJ7JSB1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGsgJX0iPnt7dGFzay5nZXRfb3V0Y29tZV9kaXNwbGF5fX0gPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgdGFzay5vdXRjb21lID0gdGFzay5PVVRDT01FX0ZBSUxFRCAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLnBrICJ0YXNrbG9nZmlsZSIgdGFzay5wayAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLWRvd25sb2FkLWFsdCIgdGl0bGU9IkRvd25sb2FkIHRhc2sgbG9nIGZpbGUiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0ie3t0YXNrLmdldF9vdXRjb21lX2hlbHB9fSI+PC9pPgorICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZm5vdGVxdWFsIHRhc2suc3N0YXRlX3Jlc3VsdCB0YXNrLlNTVEFURV9OQSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgPGEge3sgdGFza3x0YXNrX2NvbG9yIH19IGhyZWY9InslIHVybCAidGFzayIgYnVpbGQucGsgdGFzay5wayAlfSI+e3t0YXNrLmdldF9zc3RhdGVfcmVzdWx0X2Rpc3BsYXl9fTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmbm90ZXF1YWwgJX0KKyAgICAgICAgICAgICAgICAgICAgPC90ZD4KKworICAgICAgICAgICAgICAgICAgICA8L3RyPgorCisgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIHt7dGFiX3N0YXRlcy4zfX0iIGlkPSJkZXBlbmRlbmNpZXMiPgorCisgICAgICAgICAgICB7JSBpZiBub3Qgb2JqZWN0LnJfZGVwZW5kZW5jaWVzX3JlY2lwZS5hbGwgJX0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgICAgICAgIDxzdHJvbmc+e3tvYmplY3QubmFtZX19X3t7b2JqZWN0LnZlcnNpb259fTwvc3Ryb25nPiBoYXMgbm8gYnVpbGQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIj4KKyAgICAgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICA8L3RoZWFkPgorICAgICAgICAgICAgICAgIDx0Ym9keT4KKworICAgICAgICAgICAgICAgICAgICB7JSBmb3IgcnIgaW4gb2JqZWN0LnJfZGVwZW5kZW5jaWVzX3JlY2lwZS5hbGx8ZGljdHNvcnQ6ImRlcGVuZHNfb24ubmFtZSIgJX0KKyAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayByci5kZXBlbmRzX29uLnBrICV9Ij57e3JyLmRlcGVuZHNfb24ubmFtZX19PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJyLmRlcGVuZHNfb24ucGsgJX0iPnt7cnIuZGVwZW5kc19vbi52ZXJzaW9ufX08L2E+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisKKyAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIHt7dGFiX3N0YXRlcy40fX0iIGlkPSJicm91Z2h0LWluLWJ5Ij4KKworICAgICAgICAgICAgeyUgaWYgbm90IG9iamVjdC5yX2RlcGVuZGVuY2llc19kZXBlbmRzLmFsbCAlfQorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+CisgICAgICAgICAgICAgICAgPHN0cm9uZz57e29iamVjdC5uYW1lfX1fe3tvYmplY3QudmVyc2lvbn19PC9zdHJvbmc+IGhhcyBubyByZXZlcnNlIGJ1aWxkIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciI+CisgICAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgICA8dGJvZHk+CisKKyAgICAgICAgICAgICAgICAgICAgeyUgZm9yIHJyIGluIG9iamVjdC5yX2RlcGVuZGVuY2llc19kZXBlbmRzLmFsbHxkaWN0c29ydDoicmVjaXBlLm5hbWUiICV9CisgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcnIucmVjaXBlLnBrICV9Ij57e3JyLnJlY2lwZS5uYW1lfX08L2E+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcnIucmVjaXBlLnBrICV9Ij57e3JyLnJlY2lwZS52ZXJzaW9ufX08L2E+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisKKyAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKyAgICAgICAgPC9kaXY+CisgICAgPC9kaXY+Cis8L2Rpdj4KKworPGRpdiBjbGFzcz0icm93IHNwYW40IHdlbGwiPgorICAgIDxoMj5BYm91dCB7e29iamVjdC5uYW1lfX08L2gyPgorICAgIDxkbCBjbGFzcz0iaXRlbS1pbmZvIj4KKyAgICAgICAgeyUgaWYgb2JqZWN0LnN1bW1hcnkgJX0KKyAgICAgICAgICAgIDxkdD5TdW1tYXJ5PC9kdD4KKyAgICAgICAgICAgIDxkZD57e29iamVjdC5zdW1tYXJ5fX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiBvYmplY3QuZGVzY3JpcHRpb24gJX0KKyAgICAgICAgICAgIDxkdD5EZXNjcmlwdGlvbjwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3tvYmplY3QuZGVzY3JpcHRpb259fTwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGlmIG9iamVjdC5ob21lcGFnZSAlfQorICAgICAgICAgICAgPGR0PkhvbWVwYWdlPC9kdD4KKyAgICAgICAgICAgIDxkZD48YSBocmVmPSJ7e29iamVjdC5ob21lcGFnZX19Ij57e29iamVjdC5ob21lcGFnZX19PC9hPjwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGlmIG9iamVjdC5idWd0cmFja2VyICV9CisgICAgICAgICAgICA8ZHQ+QnVndHJhY2tlcjwvZHQ+CisgICAgICAgICAgICA8ZGQ+PGEgaHJlZj0ie3tvYmplY3QuYnVndHJhY2tlcn19Ij57e29iamVjdC5idWd0cmFja2VyfX08L2E+PC9kZD4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgaWYgb2JqZWN0LnNlY3Rpb24gJX0KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgIFNlY3Rpb24KKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgc2VjdGlvbiBpbiB3aGljaCByZWNpcGVzIHNob3VsZCBiZSBjYXRlZ29yaXplZCI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD57e29iamVjdC5zZWN0aW9ufX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiBvYmplY3QubGljZW5zZSAlfQorICAgICAgICAgICAgPGR0PkxpY2Vuc2U8L2R0PgorICAgICAgICAgICAgPGRkPnt7b2JqZWN0LmxpY2Vuc2V9fTwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgPC9kbD4KKzwvZGl2PgorCit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZV9idG4uaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVfYnRuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdjMWIyMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVfYnRuLmh0bWwKQEAgLTAsMCArMSw4IEBACis8YnV0dG9uIGRhdGEtcmVjaXBlLW5hbWU9Int7ZGF0YS5uYW1lfX0iIGNsYXNzPSJidG4gYnRuLWJsb2NrIGxheWVyLWV4aXN0cy17e2RhdGEubGF5ZXJfdmVyc2lvbi5wa319IGJ1aWxkLXJlY2lwZS1idG4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7IG1hcmdpbi10b3A6IDVweDsiID4KKyAgQnVpbGQgcmVjaXBlCis8L2J1dHRvbj4KKzxidXR0b24gY2xhc3M9ImJ0biBidG4tYmxvY2sgbGF5ZXJidG4gbGF5ZXItYWRkLXt7ZGF0YS5sYXllcl92ZXJzaW9uLnBrfX0iIGRhdGEtbGF5ZXI9J3sgImlkIjoge3tkYXRhLmxheWVyX3ZlcnNpb24ucGt9fSwgIm5hbWUiOiAgInt7ZGF0YS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fSIsICJsYXllcmRldGFpbHVybCI6ICJ7JXVybCAnbGF5ZXJkZXRhaWxzJyBleHRyYS5waWQgZGF0YS5sYXllcl92ZXJzaW9uLnBrJX0ifScgZGF0YS1kaXJlY3RpdmU9ImFkZCI+CisgIDxpIGNsYXNzPSJpY29uLXBsdXMiPjwvaT4KKyAgQWRkIGxheWVyCisgIDxpIHRpdGxlPSIiIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IlRvIGJ1aWxkIHRoaXMgdGFyZ2V0LCB5b3UgbXVzdCBmaXJzdCBhZGQgdGhlIHt7ZGF0YS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fSBsYXllciB0byB5b3VyIHByb2plY3QiPjwvaT4KKzwvYnV0dG9uPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZV9wYWNrYWdlcy5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZV9wYWNrYWdlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNTg0N2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlX3BhY2thZ2VzLmh0bWwKQEAgLTAsMCArMSwxMjMgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZGRldGFpbHBhZ2UuaHRtbCIgJX0KKworeyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQoreyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Cis8bGk+PGEgaHJlZj0ieyUgdXJsICdyZWNpcGVzJyBidWlsZC5wayAlfSI+UmVjaXBlczwvYT48L2xpPgorPGxpPnt7cmVjaXBlLm5hbWV9fV97e3JlY2lwZS52ZXJzaW9ufX0gPC9saT4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIHBhZ2VkZXRhaWxpbmZvbWFpbiAlfQorCis8IS0tIEJlZ2luIGNvbnRhaW5lciAtLT4KKworPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMSI+CisgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgICAgICA8aDE+e3tyZWNpcGUubmFtZX19X3t7cmVjaXBlLnZlcnNpb259fTwvaDE+CisgICAgPC9kaXY+Cis8L2Rpdj4KKworPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW43IHRhYmJhYmxlIj4KKyAgICA8dWwgY2xhc3M9Im5hdiBuYXYtcGlsbHMiPgorICAgICAgICA8bGk+CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcmVjaXBlLmlkICIxIiAlfSI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkJ1aWxkLXJlbGF0ZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlY2lwZSI+PC9pPgorICAgICAgICAgICAgICAgIFJlY2lwZSBkZXRhaWxzCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4KKwkJCTxhIGhyZWY9IiNwYWNrYWdlcy1idWlsdCIgZGF0YS10b2dnbGU9InRhYiI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBwYWNrYWdlZCBvdXRwdXQgcmVzdWx0aW5nIGZyb20gYnVpbGRpbmcgdGhlIHJlY2lwZSI+PC9pPgorICAgICAgICAgICAgICAgIFBhY2thZ2VzICh7e29iamVjdF9jb3VudH19KQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGk+CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcmVjaXBlLmlkICIzIiAlfSI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSByZWNpcGUgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgKGkuZS4gb3RoZXIgcmVjaXBlcykiPjwvaT4KKyAgICAgICAgICAgICAgICBCdWlsZCBkZXBlbmRlbmNpZXMgKHt7cmVjaXBlLnJfZGVwZW5kZW5jaWVzX3JlY2lwZS5hbGwuY291bnR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJlY2lwZS5pZCAiNCIgJX0iPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcmVjaXBlIGJ1aWxkLXRpbWUgcmV2ZXJzZSBkZXBlbmRlbmNpZXMgKGkuZS4gdGhlIHJlY2lwZXMgdGhhdCBkZXBlbmQgb24gdGhpcyByZWNpcGUpIj48L2k+CisgICAgICAgICAgICAgICAgUmV2ZXJzZSBidWlsZCBkZXBlbmRlbmNpZXMgKHt7cmVjaXBlLnJfZGVwZW5kZW5jaWVzX2RlcGVuZHMuYWxsLmNvdW50fX0pCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgPC91bD4KKyAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+Cit7IyAgICAgICAgPGRpdiBjbGFzcz0idGFiLXBhbmUgYWN0aXZlIiBpZD0icGFja2FnZXMtYnVpbHQiIG5hbWU9InBhY2thZ2VzLWJ1aWx0Ij4jfQorICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSIgaWQ9InBhY2thZ2VzLWJ1aWx0Ij4KKyAgICAgICAgICAgIHslIGlmIG5vdCBvYmplY3RzIGFuZCBub3QgcmVxdWVzdC5HRVQuc2VhcmNoICV9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgICAgICA8c3Ryb25nPnt7cmVjaXBlLm5hbWV9fV97e3JlY2lwZS52ZXJzaW9ufX08L3N0cm9uZz4gZG9lcyBub3QgYnVpbGQgYW55IHBhY2thZ2VzLgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgIHslIGVsaWYgbm90IG9iamVjdHMgJX0KKyAgICAgICAgICAgICAgICB7IyBoYXZlIGVtcHR5IHNlYXJjaCByZXN1bHRzLCBubyB0YWJsZSBub3IgcGFnaW5hdGlvbiAjfQorICAgICAgICAgICAgICAgIHslIHdpdGggInBhY2thZ2VzIiBhcyBzZWFyY2hfd2hhdCAlfQorICAgICAgICAgICAgICAgIHslIGluY2x1ZGUgImRldGFpbF9zZWFyY2hfaGVhZGVyLmh0bWwiICV9CisgICAgICAgICAgICAgICAgeyUgZW5kd2l0aCAlfQorCisgICAgICAgICAgICB7JSBlbHNlICV9CisKKworICAgICAgICAgICAgICAgIHslIHdpdGggInBhY2thZ2VzIiBhcyBzZWFyY2hfd2hhdCAlfQorICAgICAgICAgICAgICAgIHslIGluY2x1ZGUgImRldGFpbF9zZWFyY2hfaGVhZGVyLmh0bWwiICV9CisgICAgICAgICAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciB0YWJsZXNvcnRlciIgaWQ9Im90YWJsZSI+CisgICAgICAgICAgICAgICAgeyUgaW5jbHVkZSAiZGV0YWlsX3NvcnRlZF9oZWFkZXIuaHRtbCIgJX0KKworICAgICAgICAgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgICAgICAgICAgeyUgZm9yIHBhY2thZ2UgaW4gb2JqZWN0cyAlfQorCisgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSJ7JSB1cmwgInBhY2thZ2VfYnVpbHRfZGV0YWlsIiBidWlsZC5wayBwYWNrYWdlLnBrICV9Ij57e3BhY2thZ2UubmFtZX19PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0ieyUgdXJsICJwYWNrYWdlX2J1aWx0X2RldGFpbCIgYnVpbGQucGsgcGFja2FnZS5wayAlfSI+e3twYWNrYWdlLnZlcnNpb259fV97e3BhY2thZ2UucmV2aXNpb259fTwvYT48L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJzaXplY29sIj48YSBocmVmPSJ7JSB1cmwgInBhY2thZ2VfYnVpbHRfZGV0YWlsIiBidWlsZC5wayBwYWNrYWdlLnBrICV9Ij57e3BhY2thZ2Uuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorCisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgeyUgaWYgb2JqZWN0cyAlfQorICAgICAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgICAgIHslIGluY2x1ZGUgImRldGFpbF9wYWdpbmF0aW9uX2JvdHRvbS5odG1sIiAlfQorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC9kaXY+IHsjIHRhYi1wYW5lICN9CisgICAgPC9kaXY+IHsjIHRhYi1jb250ZW50ICN9Cis8L2Rpdj4geyMgc3BhbjcgI30KKworPGRpdiBjbGFzcz0icm93IHNwYW40IHdlbGwiPgorICAgIDxoMj5BYm91dCB7e3JlY2lwZS5uYW1lfX08L2gyPgorICAgIDxkbCBjbGFzcz0iaXRlbS1pbmZvIj4KKyAgICAgICAgeyUgaWYgcmVjaXBlLnN1bW1hcnkgJX0KKyAgICAgICAgICAgIDxkdD5TdW1tYXJ5PC9kdD4KKyAgICAgICAgICAgIDxkZD57e3JlY2lwZS5zdW1tYXJ5fX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiByZWNpcGUuZGVzY3JpcHRpb24gJX0KKyAgICAgICAgICAgIDxkdD5EZXNjcmlwdGlvbjwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3tyZWNpcGUuZGVzY3JpcHRpb259fTwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGlmIHJlY2lwZS5ob21lcGFnZSAlfQorICAgICAgICAgICAgPGR0PkhvbWVwYWdlPC9kdD4KKyAgICAgICAgICAgIDxkZD48YSBocmVmPSJ7e3JlY2lwZS5ob21lcGFnZX19Ij57e3JlY2lwZS5ob21lcGFnZX19PC9hPjwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGlmIHJlY2lwZS5idWd0cmFja2VyICV9CisgICAgICAgICAgICA8ZHQ+QnVndHJhY2tlcjwvZHQ+CisgICAgICAgICAgICA8ZGQ+PGEgaHJlZj0ie3tyZWNpcGUuYnVndHJhY2tlcn19Ij57e3JlY2lwZS5idWd0cmFja2VyfX08L2E+PC9kZD4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgaWYgcmVjaXBlLnNlY3Rpb24gJX0KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgIFNlY3Rpb24KKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgc2VjdGlvbiBpbiB3aGljaCByZWNpcGVzIHNob3VsZCBiZSBjYXRlZ29yaXplZCI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD57e3JlY2lwZS5zZWN0aW9ufX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiByZWNpcGUubGljZW5zZSAlfQorICAgICAgICAgICAgPGR0PkxpY2Vuc2U8L2R0PgorICAgICAgICAgICAgPGRkPnt7cmVjaXBlLmxpY2Vuc2V9fTwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgPC9kbD4KKzwvZGl2PgoreyUgZW5kYmxvY2sgcGFnZWRldGFpbGluZm9tYWluICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlcy5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2RhYzQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZXMuaHRtbApAQCAtMCwwICsxLDExMiBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQorCit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorPGxpPlJlY2lwZXM8L2xpPgoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgbmF2LXJlY2lwZXMgJX0KKyAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9InslIHVybCAncmVjaXBlcycgYnVpbGQucGsgJX0iPlJlY2lwZXM8L2E+PC9saT4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIGJ1aWxkaW5mb21haW4gJX0KKzxkaXYgY2xhc3M9InNwYW4xMCI+Cis8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+Cis8aDE+CisgIHslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwICAlfQorICAgICAge3tvYmplY3RzLnBhZ2luYXRvci5jb3VudH19IHJlY2lwZXt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR8cGx1cmFsaXplfX0gZm91bmQKKyAgeyVlbGlmIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCV9CisgICAgICBObyByZWNpcGVzIGZvdW5kCisgIHslZWxzZSV9CisgICAgICBSZWNpcGVzCisgIHslZW5kaWYlfQorIDwvaDE+Cis8L2Rpdj4KKworeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICAgICAgPGRpdiBjbGFzcz0iYWxlcnQiPgorICAgICAgICA8Zm9ybSBjbGFzcz0ibm8tcmVzdWx0cyBpbnB1dC1hcHBlbmQiIGlkPSJzZWFyY2hmb3JtIj4KKyAgICAgICAgICAgIDxpbnB1dCBpZD0ic2VhcmNoIiBuYW1lPSJzZWFyY2giIGNsYXNzPSJpbnB1dC14eGxhcmdlIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ieyVpZiByZXF1ZXN0LkdFVC5zZWFyY2glfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JWVuZGlmJX0iLz57JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX08YSBocmVmPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiIGNsYXNzPSJhZGQtb24gYnRuIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPjwvYT57JSBlbmRpZiAlfQorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2giPlNlYXJjaDwvYnV0dG9uPgorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiPlNob3cgYWxsIHJlY2lwZXM8L2J1dHRvbj4KKyAgICAgICAgPC9mb3JtPgorICAgICAgPC9kaXY+CisgIDwvZGl2PgorCit7JSBlbHNlICV9Cit7JSBpbmNsdWRlICJiYXNldGFibGVfdG9wLmh0bWwiICV9CisKKyAgICB7JSBmb3IgcmVjaXBlIGluIG9iamVjdHMgJX0KKworICAgIDx0ciBjbGFzcz0iZGF0YSI+CisgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19uYW1lIj4KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayByZWNpcGUucGsgJX0iPnt7cmVjaXBlLm5hbWV9fTwvYT4KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfX3ZlcnNpb24iPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJlY2lwZS5wayAlfSI+e3tyZWNpcGUudmVyc2lvbn19PC9hPgorICAgICAgICA8L3RkPgorICAgICAgICA8IS0tIERlcGVuZHMgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0iZGVwZW5kc19vbiI+CisgICAgICAgICAgICB7JSB3aXRoIGRlcHM9cmVjaXBlX2RlcHN8Z2V0X2RpY3RfdmFsdWU6cmVjaXBlLnBrICV9CisgICAgICAgICAgICB7JSB3aXRoIGNvdW50PWRlcHN8bGVuZ3RoICV9CisgICAgICAgICAgICB7JSBpZiBjb3VudCAlfQorICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biIKKyAgICAgICAgICAgICAgICB0aXRsZT0iPGEgaHJlZj0neyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJlY2lwZS5wayAlfSNkZXBlbmRlbmNpZXMnPnt7cmVjaXBlLm5hbWV9fTwvYT4gZGVwZW5kZW5jaWVzIgorICAgICAgICAgICAgICAgIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSd1bnN0eWxlZCc+CisgICAgICAgICAgICAgICAgICB7JSBmb3IgaSBpbiBkZXBzfGRpY3Rzb3J0OiJkZXBlbmRzX29uLm5hbWUiJX0KKyAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9J3slIHVybCAicmVjaXBlIiBidWlsZC5wayBpLmRlcGVuZHNfb24ucGsgJX0nPnt7aS5kZXBlbmRzX29uLm5hbWV9fTwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPC91bD4iPgorICAgICAgICAgICAgICAgIHt7Y291bnR9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPCEtLSAgQnJvdWdodCBpbiBieSAtLT4KKyAgICAgICAgPHRkIGNsYXNzPSJkZXBlbmRzX2J5Ij4KKyAgICAgICAgICAgIHslIHdpdGggcmV2cz1yZWNpcGVfcmV2c3xnZXRfZGljdF92YWx1ZTpyZWNpcGUucGsgJX0KKyAgICAgICAgICAgIHslIHdpdGggY291bnQ9cmV2c3xsZW5ndGggJX0KKyAgICAgICAgICAgIHslIGlmIGNvdW50ICV9CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIgorICAgICAgICAgICAgICAgIHRpdGxlPSI8YSBocmVmPSd7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcmVjaXBlLnBrICV9I2Jyb3VnaHQtaW4tYnknPnt7cmVjaXBlLm5hbWV9fTwvYT4gcmV2ZXJzZSBkZXBlbmRlbmNpZXMiCisgICAgICAgICAgICAgICAgZGF0YS1jb250ZW50PSI8dWwgY2xhc3M9J3Vuc3R5bGVkJz4KKyAgICAgICAgICAgICAgICAgIHslIGZvciBpIGluIHJldnN8ZGljdHNvcnQ6InJlY2lwZS5uYW1lIiAlfQorICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0neyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIGkucmVjaXBlLnBrICV9Jz57e2kucmVjaXBlLm5hbWV9fTwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPC91bD4iPgorICAgICAgICAgICAgICAgIHt7Y291bnR9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPCEtLSBSZWNpcGUgZmlsZSAtLT4KKyAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfZmlsZSI+e3tyZWNpcGUuZmlsZV9wYXRofX0geyUgaWYgcmVjaXBlLnBhdGhmbGFncyAlfTxpPih7e3JlY2lwZS5wYXRoZmxhZ3N9fSk8L2k+eyUgZW5kaWYgJX08L3RkPgorICAgICAgICA8IS0tIFNlY3Rpb24gLS0+CisgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX3NlY3Rpb24iPnt7cmVjaXBlLnNlY3Rpb259fTwvdGQ+CisgICAgICAgIDwhLS0gTGljZW5zZSAtLT4KKyAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfbGljZW5zZSI+e3tyZWNpcGUubGljZW5zZX19PC90ZD4KKyAgICAgICAgPCEtLSBMYXllciAtLT4KKyAgICAgICAgPHRkIGNsYXNzPSJsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSI+e3tyZWNpcGUubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX08L3RkPgorICAgICAgICA8IS0tIExheWVyIGJyYW5jaCAtLT4KKyAgICAgICAgPHRkIGNsYXNzPSJsYXllcl92ZXJzaW9uX19icmFuY2giPnt7cmVjaXBlLmxheWVyX3ZlcnNpb24uYnJhbmNofX08L3RkPgorICAgICAgICA8IS0tIExheWVyIGNvbW1pdCAtLT4KKyAgICAgICAgPHRkIGNsYXNzPSJsYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0Ij4KKyAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iCisgICAgICAgICAgICAgICAgZGF0YS1jb250ZW50PSI8dWwgY2xhc3M9J3Vuc3R5bGVkJz4KKyAgICAgICAgICAgICAgICAgIDxsaT57e3JlY2lwZS5sYXllcl92ZXJzaW9uLmNvbW1pdH19PC9saT4KKyAgICAgICAgICAgICAgICA8L3VsPiI+CisgICAgICAgICAgICAgICAge3tyZWNpcGUubGF5ZXJfdmVyc2lvbi5jb21taXR8dHJ1bmNhdGVjaGFyczoxM319CisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvdGQ+CisgICAgPC90cj4KKworICAgIHslIGVuZGZvciAlfQorCit7JSBpbmNsdWRlICJiYXNldGFibGVfYm90dG9tLmh0bWwiICV9Cit7JSBlbmRpZiAlfQorPC9kaXY+Cit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RhYmxlc29ydC5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RhYmxlc29ydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MjQ3NDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdGFibGVzb3J0Lmh0bWwKQEAgLTAsMCArMSwzOCBAQAoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorPCEtLSBjb21wb25lbnQgdG8gZGlzcGxheSBhIGdlbmVyaWMgdGFibGUgLS0+CisgICAgeyUgaWYgZGlzYWJsZV9zb3J0ICV9CisgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciIgaWQ9ImRldGFpbF90YWJsZSI+CisgICAgPHRoZWFkPgorICAgICAgICA8dHI+CisgICAgICAgICAgICB7JSBmb3IgdGMgaW4gdGFibGVjb2xzICV9CisgICAgICAgICAgICA8dGggY2xhc3M9InslaWYgdGMuZGNsYXNzJX17e3RjLmRjbGFzc319eyVlbmRpZiV9IHslaWYgdGMuY2xjbGFzcyV9e3t0Yy5jbGNsYXNzfX17JWVuZGlmJX0iPgorICAgICAgICAgICAgICAgIHslaWYgdGMucWhlbHAlfTxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJ7e3RjLnFoZWxwfX0iPjwvaT57JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7e3RjLm5hbWV9fQorICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICA8L3RyPgorICAgIDwvdGhlYWQ+CisgICAgeyUgZWxzZSAlfQorICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGVzb3J0ZXIiIGlkPSJvdGFibGUiPgorICAgIDx0aGVhZD4KKyAgICAgICAgPCEtLSBUYWJsZSBoZWFkZXIgcm93OyBnZW5lcmF0ZWQgZnJvbSAidGFibGVjb2xzIiBlbnRyeSBpbiB0aGUgY29udGV4dCBkaWN0IC0tPgorICAgICAgICA8dHI+CisgICAgICAgICAgICB7JSBmb3IgdGMgaW4gdGFibGVjb2xzICV9CisgICAgICAgICAgICA8dGggY2xhc3M9InslaWYgdGMuZGNsYXNzJX17e3RjLmRjbGFzc319eyVlbmRpZiV9IHslaWYgdGMuY2xjbGFzcyV9e3t0Yy5jbGNsYXNzfX17JWVuZGlmJX0iPgorICAgICAgICAgICAgICAgIHslaWYgdGMucWhlbHAlfTxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJ7e3RjLnFoZWxwfX0iPjwvaT57JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7JWlmIHRjLm9yZGVyZmllbGQlfQorICAgICAgICAgICAgICAgICAgICA8YSB7JWlmIHRjLm9yZGVyaWNvbiV9IGNsYXNzPSJzb3J0ZWQiIHslZW5kaWYlfQorICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iamF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsncGFnZSc6IDEsICdvcmRlcmJ5JyA6ICd7e3RjLm9yZGVyZmllbGR9fScgfSkiID4KKyAgICAgICAgICAgICAgICAgICAgICAgIHt7dGMubmFtZX19CisgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICB7JWVsc2UlfQorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibXV0ZWQiPgorICAgICAgICAgICAgICAgICAgICAgICAge3t0Yy5uYW1lfX0KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIHslZW5kaWYlfQorICAgICAgICAgICAgICAgIHslaWYgdGMub3JkZXJpY29uJX0gPGkgY2xhc3M9Imljb24tY2FyZXQte3t0Yy5vcmRlcmljb259fSI+PC9pPnslZW5kaWYlfQorICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICA8L3RyPgorICAgIDwvdGhlYWQ+CisgICAgeyUgZW5kaWYgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90YXJnZXQuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90YXJnZXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWU2YzRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RhcmdldC5odG1sCkBAIC0wLDAgKzEsMTYyIEBACit7JSBleHRlbmRzICJiYXNlYnVpbGRwYWdlLmh0bWwiICV9Cit7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKzxsaT57e3RhcmdldC50YXJnZXR9fTwvbGk+Cit7JSBlbmRibG9jayBsb2NhbGJyZWFkY3J1bWIlfQorCit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKK3slIGJsb2NrIG5hdi10YXJnZXQgJX0KKyAgeyUgZm9yIHQgaW4gYnVpbGQuZ2V0X3NvcnRlZF90YXJnZXRfbGlzdCAlfQorICAgIHslIGlmZXF1YWwgdGFyZ2V0LnBrIHQucGsgJX0KKyAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSJ7JSB1cmwgJ3RhcmdldCcgYnVpbGQucGsgdC5wayAlfSI+e3t0LnRhcmdldH19PC9hPjxsaT4KKyAgICB7JSBlbHNlICV9CisgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICd0YXJnZXQnIGJ1aWxkLnBrIHQucGsgJX0iPnt7dC50YXJnZXR9fTwvYT48bGk+CisgICAgeyUgZW5kaWZlcXVhbCAlfQorICB7JSBlbmRmb3IgJX0KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIGJ1aWxkaW5mb21haW4gJX0KKworPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMCI+CisgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgICAgICA8aDE+CisgICAgICAgICAgICB7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID4gMCAlfQorICAgICAgICAgICAgICAgIHt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR9fSBwYWNrYWdle3tvYmplY3RzLnBhZ2luYXRvci5jb3VudHxwbHVyYWxpemV9fSBmb3VuZAorICAgICAgICAgICAgeyUgZWxpZiByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KKyAgICAgICAgICAgICAgICBObyBwYWNrYWdlcyBmb3VuZAorICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgIHt7dGFyZ2V0LnRhcmdldH19CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICA8L2gxPgorICAgIDwvZGl2PgorPC9kaXY+CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBwdWxsLXJpZ2h0IHNwYW4xMCIgaWQ9Im5hdlRhYiI+CisgICAgPHVsIGNsYXNzPSJuYXYgbmF2LXBpbGxzIj4KKyAgICAgICAgPGxpIGNsYXNzPSJhY3RpdmUiPgorICAgICAgICAgICAgPGEgaHJlZj0iI3RhcmdldCI+CisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iT2YgYWxsIHRoZSBwYWNrYWdlcyBidWlsdCwgdGhlIHN1YnNldCBpbnN0YWxsZWQgaW4gdGhlIHJvb3QgZmlsZSBzeXN0ZW0gb2YgdGhpcyBpbWFnZSI+PC9pPgorICAgICAgICAgICAgICAgIFBhY2thZ2VzIGluY2x1ZGVkICh7e3RhcmdldC5wYWNrYWdlX2NvdW50fX0gLSB7e3BhY2thZ2VzX3N1bXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19KQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGk+CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2RpcmluZm8nIGJ1aWxkLmlkIHRhcmdldC5pZCAlfSI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBkaXJlY3RvcmllcyBhbmQgZmlsZXMgaW4gdGhlIHJvb3QgZmlsZSBzeXN0ZW0gb2YgdGhpcyBpbWFnZSI+PC9pPgorICAgICAgICAgICAgICAgIERpcmVjdG9yeSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICA8L3VsPgorCisgICAgPGRpdiBpZD0iaW1hZ2UtcGFja2FnZXMiIGNsYXNzPSJ0YWItcGFuZSI+CisKKyAgICB7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQiPgorICAgICAgICAgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIiBpZD0ic2VhcmNoZm9ybSI+CisgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJzZWFyY2giIG5hbWU9InNlYXJjaCIgY2xhc3M9ImlucHV0LXh4bGFyZ2UiIHR5cGU9InRleHQiIHZhbHVlPSJ7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX17e3JlcXVlc3QuR0VULnNlYXJjaH19eyUgZW5kaWYgJX0iLz57JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX08YSBocmVmPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiIGNsYXNzPSJhZGQtb24gYnRuIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPjwvYT57JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIj5TZWFyY2g8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWxpbmsiIG9uY2xpY2s9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSI+U2hvdyBhbGwgcGFja2FnZXM8L2J1dHRvbj4KKyAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisKKworICAgIHslIGVsc2UgJX0KKyAgICB7JSBpbmNsdWRlICJiYXNldGFibGVfdG9wLmh0bWwiICV9CisgICAgeyUgZm9yIHBhY2thZ2UgaW4gb2JqZWN0cyAlfQorICAgIDx0cj4KKyAgICAgIHsjIG9yZGVyIG9mIHRoZSB0YWJsZSBkYXRhIG11c3QgbWF0Y2ggdGhlIGNvbHVtbnMgZGVmaW5lZCBpbiB0ZW1wbGF0ZSdzIGNvbnRleHQgdGFibGVjb2xzICAjfQorICAgICAgICA8dGQgY2xhc3M9InBhY2thZ2VfbmFtZSI+CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsJyBidWlsZC5pZCB0YXJnZXQuaWQgcGFja2FnZS5pZCAlfSI+CisgICAgICAgICAgICB7e3BhY2thZ2UubmFtZX19CisgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICB7JSBpZiBwYWNrYWdlLmluc3RhbGxlZF9uYW1lIGFuZCBwYWNrYWdlLm5hbWUgIT0gcGFja2FnZS5pbnN0YWxsZWRfbmFtZSAlfQorICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im11dGVkIj4gYXMge3twYWNrYWdlLmluc3RhbGxlZF9uYW1lfX08L3NwYW4+CisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSd7e3BhY2thZ2UubmFtZXxhZGQ6IiB3YXMgcmVuYW1lZCBhdCBwYWNrYWdpbmcgdGltZSBhbmQgd2FzIGluc3RhbGxlZCBpbiB5b3VyIGltYWdlIGFzICJ8YWRkOnBhY2thZ2UuaW5zdGFsbGVkX25hbWV9fSc+PC9pPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJwYWNrYWdlX3ZlcnNpb24iPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCcgYnVpbGQuaWQgdGFyZ2V0LmlkIHBhY2thZ2UuaWQgJX0iPgorICAgICAgICAgICAge3twYWNrYWdlLnZlcnNpb258ZmlsdGVyZWRfcGFja2FnZXZlcnNpb246cGFja2FnZS5yZXZpc2lvbn19CisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvdGQ+CisgICAgICAgIDx0ZCBjbGFzcz0ibGljZW5zZSI+CisgICAgICAgICAgICB7e3BhY2thZ2UubGljZW5zZX19CisgICAgICAgIDwvdGQ+CisgICAgICAgIDx0ZCBjbGFzcz0ic2l6ZSBzaXplY29sIj4KKyAgICAgICAgICAgIHt7cGFja2FnZS5zaXplfGZpbHRlcmVkX2luc3RhbGxlZHNpemU6cGFja2FnZS5pbnN0YWxsZWRfc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19CisgICAgICAgIDwvdGQ+CisKKyAgICAgICAgPHRkIGNsYXNzPSJzaXplX292ZXJfdG90YWwgc2l6ZWNvbCI+CisgICAgICAgICAgICB7e3BhY2thZ2V8ZmlsdGVyX3NpemVvdmVydG90YWw6cGFja2FnZXNfc3VtfX0KKyAgICAgICAgPC90ZD4KKyAgICAgICA8dGQgY2xhc3M9ImRlcGVuZHMiPgorICAgICAgICAgICAgeyUgd2l0aCBkZXBzPXBhY2thZ2UucnVudGltZV9kZXBlbmRlbmNpZXMgJX0KKyAgICAgICAgICAgIHslIHdpdGggZGVwc19jb3VudD1kZXBzfGxlbmd0aCAlfQorICAgICAgICAgICAgeyUgaWYgZGVwc19jb3VudCA+IDAgJX0KKyAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iCisgICAgICAgICAgICAgICAgdGl0bGU9IjxhIGhyZWY9J3slIHVybCAicGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMiIGJ1aWxkLmlkIHRhcmdldC5pZCBwYWNrYWdlLmlkICV9Jz57e3BhY2thZ2UubmFtZX19PC9hPiBkZXBlbmRlbmNpZXMiCisgICAgICAgICAgICAgICAgZGF0YS1jb250ZW50PSI8dWwgY2xhc3M9J3Vuc3R5bGVkJz4KKyAgICAgICAgICAgICAgICAgIHslIGZvciBpIGluIGRlcHN8ZGljdHNvcnQ6J2RlcGVuZHNfb24ubmFtZScgJX0KKyAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9J3slIHVybCAicGFja2FnZV9pbmNsdWRlZF9kZXRhaWwiIGJ1aWxkLnBrIHRhcmdldC5pZCBpLmRlcGVuZHNfb24ucGsgJX0nPnt7aS5kZXBlbmRzX29uLm5hbWV9fTwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPC91bD4iPgorICAgICAgICAgICAgICAgIHt7ZGVwc19jb3VudH19CisgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICA8L3RkPgorICAgICAgICA8dGQgY2xhc3M9ImJyb3VnaHRfaW5fYnkiPgorICAgICAgICAgICAgeyUgd2l0aCByZGVwcz1wYWNrYWdlLnJldmVyc2VfcnVudGltZV9kZXBlbmRlbmNpZXMgJX0KKyAgICAgICAgICAgIHslIHdpdGggcmRlcHNfY291bnQ9cmRlcHN8bGVuZ3RoICV9CisgICAgICAgICAgICB7JSBpZiByZGVwc19jb3VudCA+IDAgJX0KKyAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iCisgICAgICAgICAgICAgICAgdGl0bGU9IjxhIGhyZWY9J3slIHVybCAicGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcyIgYnVpbGQuaWQgdGFyZ2V0LmlkIHBhY2thZ2UuaWQgJX0nPnt7cGFja2FnZS5uYW1lfX08L2E+IHJldmVyc2UgZGVwZW5kZW5jaWVzIgorICAgICAgICAgICAgICAgIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSd1bnN0eWxlZCc+CisgICAgICAgICAgICAgICAgICB7JSBmb3IgaSBpbiByZGVwc3xkaWN0c29ydDoncGFja2FnZS5uYW1lJyAlfQorICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0neyUgdXJsICJwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCIgYnVpbGQuaWQgdGFyZ2V0LmlkIGkucGFja2FnZS5pZCAlfSc+e3tpLnBhY2thZ2UubmFtZX19PC9hPjwvbGk+CisgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICA8L3VsPiI+CisgICAgICAgICAgICAgICAge3tyZGVwc19jb3VudH19CisgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICA8L3RkPgorICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9uYW1lIj4KKyAgICAgICAgICAgIHslIGlmIHBhY2thZ2UucmVjaXBlLnZlcnNpb24gJX0KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncmVjaXBlJyBidWlsZC5pZCBwYWNrYWdlLnJlY2lwZV9pZCAlfSI+CisgICAgICAgICAgICB7eyBwYWNrYWdlLnJlY2lwZS5uYW1lIH19CisgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICA8L3RkPgorICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV92ZXJzaW9uIj4KKyAgICAgICAgICAgIHslIGlmIHBhY2thZ2UucmVjaXBlLnZlcnNpb24gJX0KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncmVjaXBlJyBidWlsZC5pZCBwYWNrYWdlLnJlY2lwZV9pZCAlfSI+CisgICAgICAgICAgICB7eyBwYWNrYWdlLnJlY2lwZS52ZXJzaW9uIH19CisgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICA8L3RkPgorICAgICAgICA8dGQgY2xhc3M9ImxheWVyX25hbWUiPgorICAgICAgICAgICAge3sgcGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lIH19CisgICAgICAgIDwvdGQ+CisgICAgICAgIDx0ZCBjbGFzcz0ibGF5ZXJfYnJhbmNoIj4KKyAgICAgICAgICAgIHt7IHBhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uYnJhbmNofX0KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJsYXllcl9jb21taXQiPgorICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biIKKyAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQ9Ijx1bCBjbGFzcz0ndW5zdHlsZWQnPgorICAgICAgICAgICAgICAgICAgPGxpPnt7cGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5jb21taXR9fTwvbGk+CisgICAgICAgICAgICAgICAgPC91bD4iPgorICAgICAgICAgICAgICAgIHt7cGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5jb21taXR8dHJ1bmNhdGVjaGFyczoxM319CisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICB7JSBlbmRmb3IgJX0KKworICAgIHslIGluY2x1ZGUgImJhc2V0YWJsZV9ib3R0b20uaHRtbCIgJX0KKyAgICB7JSBlbmRpZiAlfQorICAgIDwvZGl2PiA8IS0tIHRhYnBhbmUgLS0+Cis8L2Rpdj4gPCEtLXNwYW4gMTAtLT4KK3slIGVuZGJsb2NrIGJ1aWxkaW5mb21haW4gJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90YXNrLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdGFzay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNTA5OGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdGFzay5odG1sCkBAIC0wLDAgKzEsMjY5IEBACit7JSBleHRlbmRzICJiYXNlYnVpbGRkZXRhaWxwYWdlLmh0bWwiICV9CisKK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KKworeyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Cis8bGk+PGEgaHJlZj0ieyUgdXJsICd0YXNrcycgYnVpbGQucGsgJX0iPlRhc2tzPC9hPjwvbGk+Cis8bGk+e3t0YXNrLnJlY2lwZS5uYW1lfX1fe3t0YXNrLnJlY2lwZS52ZXJzaW9ufX0ge3t0YXNrLnRhc2tfbmFtZX19PC9saT4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIHBhZ2VkZXRhaWxpbmZvbWFpbiAlfQorCis8ZGl2IGNsYXNzPSJyb3cgc3BhbjExIj4KKyAgICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgICAgICAgIDxoMT48YSBocmVmPSJ7JXVybCAncmVjaXBlJyBidWlsZC5wayB0YXNrLnJlY2lwZS5wayAlfSI+e3t0YXNrLnJlY2lwZS5uYW1lfX1fe3t0YXNrLnJlY2lwZS52ZXJzaW9ufX08L2E+IHt7dGFzay50YXNrX25hbWV9fTwvaDE+CisgICAgPC9kaXY+CisKK3sjIE91dGNvbWUgc2VjdGlvbiAjfQorPGgyIHt7IHRhc2t8dGFza19jb2xvcjpUcnVlIH19PgorICAgIHt7dGFzay5nZXRfb3V0Y29tZV9kaXNwbGF5fX0KKyAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhlYWRpbmctaGVscCIgdGl0bGU9Int7dGFzay5nZXRfb3V0Y29tZV9oZWxwfX0iPjwvaT4KKzwvaDI+Cit7JWlmIHRhc2sudGFza19leGVjdXRlZCAlfQorICAgIHsjIGV4ZWN1dGVkIHRhc2tzIG91dGNvbWUgI30KKyAgICB7JSBpZiB0YXNrLmxvZ2ZpbGUgJX0KKyAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLWxhcmdlIiBocmVmPSJ7JSB1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5pZCAidGFza2xvZ2ZpbGUiIHRhc2sucGsgJX0iIHN0eWxlPSJtYXJnaW46MTVweDsiPkRvd25sb2FkIHRhc2sgbG9nPC9hPgorICAgIHslIGVuZGlmICV9CisgICAgICAgIHsjIHNob3cgc3RhY2sgdHJhY2UgZm9yIGZhaWxlZCB0YXNrICN9CisgICAgICAgIHslIGlmIHRhc2sub3V0Y29tZSA9PSB0YXNrLk9VVENPTUVfRkFJTEVEIGFuZCBsb2dfaGVhZCAlfQorICAgICAgICAgICAgPGgzPlB5dGhvbiBzdGFjayB0cmFjZTwvaDM+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9Im1pbi1oZWlnaHQ6MTYwcHg7Ij4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+e3tsb2dfaGVhZH19PC9jb2RlPjxhIGlkPSJmdWxsLXRyYWNlLXNob3ciIGRhdGEtdGFyZ2V0PSIjZnVsbHRyYWNlIiBkYXRhLXRvZ2dsZT0iY29sbGFwc2UiIGNsYXNzPSJidG4gYnRuLW1pbmkiPi4uLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iZnVsbHRyYWNlIiBjbGFzcz0iY29sbGFwc2UiIHN0eWxlPSJtYXJnaW4tdG9wOiAtMjBweDsgaGVpZ2h0OiAwcHg7Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPnt7bG9nX2JvZHl9fTwvY29kZT48YnI+PGEgaWQ9ImZ1bGwtdHJhY2UtaGlkZSIgY2xhc3M9ImJ0biBidG4tbWluaSBjb2xsYXBzZWQiIHN0eWxlPSJmb250LWZhbWlseTpIZWx2ZXRpY2EgTmV1ZSIgZGF0YS10YXJnZXQ9IiNmdWxsdHJhY2UiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSI+Q29sbGFwc2Ugc3RhY2sgdHJhY2U8aSBjbGFzcz0iaWNvbi1jYXJldC11cCI+PC9pPjwvYT48L2Rpdj48L3ByZT4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICB7JSBlbmRpZiAlfQoreyUgZWxzZSAlfQoreyMgbm90IGV4ZWN1dGVkIHRhc2tzIG91dGNvbWUgI30KKyAgICB7JSBpZiB0YXNrLm91dGNvbWUgPT0gdGFzay5PVVRDT01FX1BSRUJVSUxUICV9CisgICAgICAgIHslIGlmIG5vdCBzaG93aW5nX21hdGNoZXMgJX0KKyAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iIGhyZWY9ImphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J3Nob3dfbWF0Y2hlcycgOiAndHJ1ZScgfSkiPk1hdGNoIHRvIHRhc2tzIGluIHByZXZpb3VzIGJ1aWxkcyA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiBzdHlsZT0ibWFyZ2luLXRvcDoyMHB4OyIgdGl0bGU9IlRoaXMgc2hvd3MgeW91IGEgbGlzdCBvZiB0YXNrcyBmcm9tIHByZXZpb3VzIGJ1aWxkcyB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgc2FtZSBpbnB1dHMgYXMgdXNlZCBpbiB0aGUgcHJlYnVpbHQgdGFzay4gQW55IG9mIHRoZW0gY291bGQgYmUgdGhlIHRhc2sgdGhhdCBnZW5lcmF0ZWQgdGhlIG91dHB1dCB0aGlzIHByZWJ1aWx0IHRhc2sgaXMgcmV1c2luZyI+PC9pPjwvYT4KKyAgICAgICAgeyUgZWxpZiBtYXRjaGluZ190YXNrcyAlfQorICAgICAgICAgICAgPGgzIGNsYXNzPSJkZXRhaWxzIj5QcmVidWlsdCB0YXNrIGNvdWxkIGJlIGJhc2VkIG9uCisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIHRpdGxlPSJUaGlzIHRhYmxlIHNob3dzIGEgbGlzdCBvZiB0YXNrcyBmcm9tIHByZXZpb3VzIGJ1aWxkcyB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgc2FtZSBpbnB1dHMgYXMgdXNlZCBpbiB0aGUgcHJlYnVpbHQgdGFzay4gQW55IG9mIHRoZW0gY291bGQgYmUgdGhlIHRhc2sgdGhhdCBnZW5lcmF0ZWQgdGhlIG91dHB1dCB0aGlzIHByZWJ1aWx0IHRhc2sgaXMgcmV1c2luZyI+PC9pPgorICAgICAgICAgICAgPC9oMz4KKyAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiPgorICAgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBuYW1lIG9mIHRoZSByZWNpcGUgdG8gd2hpY2ggZWFjaCB0YXNrIGFwcGxpZXMiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlY2lwZQorICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIG5hbWUgb2YgdGhlIHRhc2siPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRhc2sKKyAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoaXMgdmFsdWUgdGVsbHMgeW91IGlmIGEgdGFzayBoYWQgdG8gcnVuIChleGVjdXRlZCkgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIHRhc2sgb3V0cHV0LCBvciBpZiB0aGUgb3V0cHV0IHdhcyBwcm92aWRlZCBieSBhbm90aGVyIHRhc2sgYW5kIHRoZXJlZm9yZSB0aGUgdGFzayBkaWRuJ3QgbmVlZCB0byBydW4gKG5vdCBleGVjdXRlZCkiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGVkCisgICAgICAgICAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGlzIGNvbHVtbiB0ZWxscyB5b3UgaWYgJ2V4ZWN1dGVkJyB0YXNrcyBzdWNjZWVkZWQgb3IgZmFpbGVkLiBUaGUgY29sdW1uIGFsc28gdGVsbHMgeW91IHdoeSAnbm90IGV4ZWN1dGVkJyB0YXNrcyBkaWQgbm90IG5lZWQgdG8gcnVuIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICBPdXRjb21lCisgICAgICAgICAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgZGF0ZSBhbmQgdGltZSB0aGUgYnVpbGQgZmluaXNoZWQiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIGNvbXBsZXRlZCBvbgorICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgICAgICAgICB7JSBmb3IgbWF0Y2ggaW4gbWF0Y2hpbmdfdGFza3MgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ciB7eyBtYXRjaHx0YXNrX2NvbG9yIH19PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIG1hdGNoLmJ1aWxkLnBrIG1hdGNoLnBrJX0iPnt7bWF0Y2gucmVjaXBlLm5hbWV9fTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIG1hdGNoLmJ1aWxkLnBrIG1hdGNoLnBrJX0iPnt7bWF0Y2gudGFza19uYW1lfX08L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIHRhc2suZ2V0X2Rlc2NyaXB0aW9uICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSJ7e3Rhc2suZ2V0X2Rlc2NyaXB0aW9ufX0iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIG1hdGNoLmJ1aWxkLnBrIG1hdGNoLnBrJX0iPnt7bWF0Y2guZ2V0X2V4ZWN1dGVkX2Rpc3BsYXl9fTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIG1hdGNoLmJ1aWxkLnBrIG1hdGNoLnBrJX0iPnt7bWF0Y2guZ2V0X291dGNvbWVfZGlzcGxheX19IDwvYT48aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSJ7e21hdGNoLmdldF9vdXRjb21lX2hlbHB9fSI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAidGFzayIgbWF0Y2guYnVpbGQucGsgbWF0Y2gucGslfSI+e3ttYXRjaC5idWlsZC5jb21wbGV0ZWRfb258ZGF0ZToiZC9tL3kgSDppIn19PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgPHAgY2xhc3M9ImFsZXJ0Ij4KKyAgICAgICAgICAgICAgICA8c3Ryb25nPiBXZSBoYXZlIGZvdW5kIG5vIHRhc2tzIG1hdGNoaW5nIHRoaXMgcHJlYnVpbHQgdGFzazwvc3Ryb25nPjxici8+CisgICAgICAgICAgICAgICAgVGhlIHRhc2sgeW91IGFyZSBsb29raW5nIGZvciBjb3VsZCBiZWxvbmcgdG8gYSBidWlsZCBmb3Igd2hpY2ggVG9hc3RlciBoYXMgbm8gZGF0YS4KKyAgICAgICAgICAgIDwvcD4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICB7JSBlbGlmIHRhc2sub3V0Y29tZSA9PSB0YXNrLk9VVENPTUVfQ09WRVJFRCAlfQorICAgICAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgdGFzayhzKSBwcm92aWRpbmcgdGhlIG91dGNvbWUgb2YgdGhpcyB0YXNrIj48L2k+IFRhc2sgY292ZXJlZCBieQorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgICB7JSBmb3IgdCBpbiBjb3ZlcmVkX2J5ICV9CisgICAgICAgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAndGFzaycgdC5idWlsZC5wayB0LnBrJX0iCisgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRhc2staW5mbyIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSJ7e3QuZ2V0X2V4ZWN1dGVkX2Rpc3BsYXl9fSB8IHt7dC5nZXRfb3V0Y29tZV9kaXNwbGF5fX0iPgorICAgICAgICAgICAgICAgICAgICAgICAge3t0LnJlY2lwZS5uYW1lfX1fe3t0LnJlY2lwZS52ZXJzaW9ufX0KKyAgICAgICAgICAgICAgICAgICAgICAgIHt7dC50YXNrX25hbWV9fQorICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2RkPgorICAgICAgICA8L2RsPgorICAgIHslZWxpZiB0YXNrLm91dGNvbWUgPT0gdGFzay5PVVRDT01FX0NBQ0hFRCV9CisgICAgICAgICAgICB7JSBmb3IgdCBpbiB0YXNrLmdldF9yZWxhdGVkX3NldHNjZW5lICV9CisgICAgICAgICAgICAgICAgeyUgaWYgZm9ybG9vcC5sYXN0ICV9CisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLWxhcmdlIiBocmVmPSJ7JSB1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5pZCAidGFza2xvZ2ZpbGUiIHQucGsgJX0iIHN0eWxlPSJtYXJnaW46MTVweDsiPkRvd25sb2FkIHRhc2sgbG9nPC9hPgorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKworICAgIHslZWxpZiB0YXNrLm91dGNvbWUgPT0gdGFzay5PVVRDT01FX0VNUFRZJX0KKyAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyBkZXRhaWxzIj4KKyAgICAgICAgICAgIFRoaXMgdGFzayBpcyBlbXB0eSBiZWNhdXNlIGl0IGhhcyB0aGUgPGNvZGU+bm9leGVjPC9jb2RlPiBmbGFnIHNldCB0byA8Y29kZT4xPC9jb2RlPiwgb3IgdGhlIHRhc2sgZnVuY3Rpb24gaXMgZW1wdHkKKyAgICAgICAgPC9kaXY+CisgICAgeyUgZW5kaWYgJX0KK3slIGVuZGlmICV9CisKK3sjIEV4ZWN1dGlvbiBzZWN0aW9uICN9CisgICAgeyUgaWYgdGFzay50YXNrX2V4ZWN1dGVkICV9CisgICAgPGgyPgorICAgICAgICBFeGVjdXRlZAorICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhlYWRpbmctaGVscCIgdGl0bGU9IidFeGVjdXRlZCcgdGFza3MgYXJlIHRob3NlIHRoYXQgbmVlZCB0byBydW4gaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIHRhc2sgb3V0cHV0Ij48L2k+CisgICAgeyUgZWxzZSAlfQorICAgIDxoMiBjbGFzcz0ibXV0ZWQiPgorICAgICAgICBOb3QgRXhlY3V0ZWQKKyAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIHRpdGxlPSInTm90IGV4ZWN1dGVkJyB0YXNrcyBkb24ndCBuZWVkIHRvIHJ1biBiZWNhdXNlIHRoZWlyIG91dGNvbWUgaXMgcHJvdmlkZWQgYnkgYW5vdGhlciB0YXNrIj48L2k+CisgICAgeyUgZW5kaWYgJX0KKyAgICA8L2gyPgorCis8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgorICAgIDxkdD4KKyAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRvIG1ha2UgYnVpbGRzIG1vcmUgZWZmaWNpZW50LCB0aGUgYnVpbGQgc3lzdGVtIGRldGVjdHMgY2hhbmdlcyBpbiB0aGUgJ2lucHV0cycgdG8gYSBnaXZlbiB0YXNrIGJ5IGNyZWF0aW5nIGEgJ3Rhc2sgc2lnbmF0dXJlJy4gSWYgdGhlIHNpZ25hdHVyZSBjaGFuZ2VzLCB0aGUgYnVpbGQgc3lzdGVtIGFzc3VtZXMgdGhlIGlucHV0cyBoYXZlIGNoYW5nZWQgYW5kIHRoZSB0YXNrIG5lZWRzIHRvIGJlIHJlcnVuIj48L2k+CisgICAgICAgIFRhc2sgaW5wdXRzIHNpZ25hdHVyZQorICAgIDwvZHQ+CisgICAgPGRkPgorICAgICAgICB7e3Rhc2suc3N0YXRlX2NoZWNrc3VtfX0KKyAgICA8L2RkPgorPC9kbD4KKyAgICB7JSBpZiB0YXNrLnNzdGF0ZV9yZXN1bHQgIT0gdGFzay5TU1RBVEVfTkEgJX0KKyAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+QXR0ZW1wdGluZyB0byByZXN0b3JlIG91dHB1dCBmcm9tIHNzdGF0ZSBjYWNoZQorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBnZXQtaGVscC1ibHVlIiB0aXRsZT0iVGhlIGJ1aWxkIHN5c3RlbSBpcyBzZWFyY2hpbmcgZm9yIHRoZSB0YXNrIG91dHB1dCBpbiB5b3VyIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IGFuZCBtaXJyb3JzLiBJZiB0aGUgYnVpbGQgc3lzdGVtIGZpbmRzIHRoZSB0YXNrIG91dHB1dCwgaXQgd2lsbCByZXVzZSBpdCBpbnN0ZWFkIG9mIGJ1aWxkaW5nIGl0IGZyb20gc2NyYXRjaCBieSBydW5uaW5nIHRoZSByZWFsIHRhc2suIFJldXNpbmcgdGhlIHRhc2sgb3V0cHV0IG1ha2VzIHRoZSBidWlsZCBmYXN0ZXIiPjwvaT4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkbCBjbGFzcz0iZGwtaG9yaXpvbnRhbCI+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBuYW1lIG9mIHRoZSBmaWxlIHNlYXJjaGVkIGZvciBpbiB5b3VyIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IGFuZCBtaXJyb3JzIj48L2k+CisgICAgICAgICAgICAgICAgRmlsZSBzZWFyY2hlZCBmb3IKKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+PGNvZGU+e3t0YXNrLnBhdGhfdG9fc3N0YXRlX29ian19PC9jb2RlPjwvZGQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBsb2NhdGlvbnMgc2VhcmNoZWQgZm9yIHRoZSBhYm92ZSBmaWxlIChpLmUuIHlvdXIgPGNvZGU+c3N0YXRlLWNhY2hlPC9jb2RlPiBkaXJlY3RvcnkgYW5kIGFueSBtaXJyb3JzIHlvdSBoYXZlIHNldCB1cCkiPjwvaT4KKyAgICAgICAgICAgICAgICBVUkkocykgc2VhcmNoZWQKKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+PHVsPnslIGZvciB1cmkgaW4gdXJpX2xpc3QgJX08bGk+PGNvZGU+e3t1cml9fTwvY29kZT48L2xpPnslIGVuZGZvciAlfTwvdWw+PC9kZD4KKyAgICAgICAgPC9kbD4KKyAgICB7JSBlbmRpZiAlfQorICAgIHslIGlmIHRhc2suc3N0YXRlX3Jlc3VsdCA9PSB0YXNrLlNTVEFURV9NSVNTICV9CisgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgICAgPHN0cm9uZz5GaWxlIG5vdCBpbiBzc3RhdGUgY2FjaGUuPC9zdHJvbmc+IFJ1bm5pbmcgdGhlIHJlYWwgdGFzayBpbnN0ZWFkLgorICAgICAgICA8L2Rpdj4KKyAgICB7JSBlbGlmIHRhc2suc3N0YXRlX3Jlc3VsdCA9PSB0YXNrLlNTVEFURV9GQUlMRUQlfQorICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgICAgICAgICA8c3Ryb25nPkZhaWxlZDwvc3Ryb25nPiB0byByZXN0b3JlIG91dHB1dCBmcm9tIHNzdGF0ZSBjYWNoZS4gVGhlIGZpbGUgd2FzIGZvdW5kIGJ1dCBjb3VsZCBub3QgYmUgdW5wYWNrZWQuCisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgInRhc2tsb2dmaWxlIiB0YXNrLnBrICV9IiBzdHlsZT0ibWFyZ2luOjE1cHg7Ij5Eb3dubG9hZCBsb2c8L2E+CisgICAgICAgIDwvZGw+CisgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgICAgUnVubmluZyB0aGUgcmVhbCB0YXNrIGluc3RlYWQuCisgICAgICAgIDwvZGl2PgorICAgIHslIGVsaWYgdGFzay5zc3RhdGVfcmVzdWx0ID09IHRhc2suU1NUQVRFX1JFU1RPUkVEICV9CisgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgICAgT3V0cHV0IDxzdHJvbmc+c3VjY2Vzc2Z1bGx5IHJlc3RvcmVkPC9zdHJvbmc+IGZyb20gc3N0YXRlIGNhY2hlLgorICAgICAgICA8L2Rpdj4KKyAgICB7JSBlbmRpZiAlfQorICAgIDxkbCBjbGFzcz0iZGwtaG9yaXpvbnRhbCI+CisgICAgPGR0PgorICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHJ1bm5pbmcgc2VxdWVuY2Ugb2YgZWFjaCB0YXNrIGluIHRoZSBidWlsZCI+PC9pPgorICAgICAgICBUYXNrIG9yZGVyCisgICAgPC9kdD4KKyAgICA8ZGQ+PGEgaHJlZj0ieyV1cmwgInRhc2tzX3Rhc2siIGJ1aWxkLnBrIHRhc2sub3JkZXIgJX0je3t0YXNrLm9yZGVyfX0iPnt7dGFzay5vcmRlcn19PC9hPjwvZGQ+CisgICAgeyUgaWYgdGFzay50YXNrX2V4ZWN1dGVkICV9CisgICAgICAgIDxkdD4KKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJJbmRpY2F0ZXMgaWYgdGhpcyB0YXNrIGV4ZWN1dGVzIGEgUHl0aG9uIG9yIFNoZWxsIGZ1bmN0aW9uKHMpIj48L2k+CisgICAgICAgICAgICBUYXNrIHNjcmlwdCB0eXBlCisgICAgICAgIDwvZHQ+CisgICAgICAgIDxkZD57e3Rhc2suZ2V0X3NjcmlwdF90eXBlX2Rpc3BsYXl9fTwvZGQ+CisgICAgeyUgZW5kaWYgJX0KKzwhLS0KKyAgICA8ZHQ+CisgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgY29kZSBleGVjdXRlZCBieSB0aGUgdGFzayI+PC9pPgorICAgICAgICBUYXNrIGV4ZWN1dGFibGUgb3V0cHV0CisgICAgPC9kdD4KKyAgICA8ZGQ+PGNvZGU+e3t0YXNrLnNvdXJjZV91cmx9fTwvY29kZT48L2RkPgorLS0+CisgICAgPGR0PgorICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGFzayBkZXBlbmRlbmN5IGNoYWluIChpLmUuIG90aGVyIHRhc2tzKSI+PC9pPgorICAgICAgICBEZXBlbmRlbmNpZXMKKyAgICA8L2R0PgorICAgIDxkZD4KKyAgICAgICAgPHVsPgorICAgICAgICAgICAgeyUgZm9yIGRlcCBpbiBkZXBzICV9CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InsldXJsICd0YXNrJyBkZXAuYnVpbGQucGsgZGVwLnBrJX0iIGNsYXNzPSJ0YXNrLWluZm8iIHRpdGxlPSJ7e2RlcC5nZXRfZXhlY3V0ZWRfZGlzcGxheX19IHwge3tkZXAuZ2V0X291dGNvbWVfZGlzcGxheX19Ij57e2RlcC5yZWNpcGUubmFtZX19X3t7ZGVwLnJlY2lwZS52ZXJzaW9ufX0gPHNwYW4gY2xhc3M9InRhc2stbmFtZSI+e3tkZXAudGFza19uYW1lfX08L3NwYW4+PC9hPjwvbGk+CisgICAgICAgICAgICB7JSBlbXB0eSAlfQorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibXV0ZWQiPlRoaXMgdGFzayBoYXMgbm8gZGVwZW5kZW5jaWVzPC9saT4KKyAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICA8L3VsPgorICAgIDwvZGQ+CisgICAgPGR0PgorICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGFza3MgdGhhdCBkZXBlbmQgb24gdGhpcyB0YXNrIj48L2k+CisgICAgICAgIFJldmVyc2UgZGVwZW5kZW5jaWVzCisgICAgPC9kdD4KKyAgICA8ZGQ+CisgICAgICAgIDx1bD4KKyAgICAgICAgICAgIHslIGZvciBkZXAgaW4gcmRlcHMgJX0KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyV1cmwgJ3Rhc2snIGRlcC5idWlsZC5wayBkZXAucGslfSIgY2xhc3M9InRhc2staW5mbyIgdGl0bGU9Int7ZGVwLmdldF9leGVjdXRlZF9kaXNwbGF5fX0gfCB7e2RlcC5nZXRfb3V0Y29tZV9kaXNwbGF5fX0iPnt7ZGVwLnJlY2lwZS5uYW1lfX1fe3tkZXAucmVjaXBlLnZlcnNpb259fSA8c3BhbiBjbGFzcz0idGFzay1uYW1lIj57e2RlcC50YXNrX25hbWV9fTwvc3Bhbj48L2E+PC9saT4KKyAgICAgICAgICAgIHslIGVtcHR5ICV9CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJtdXRlZCI+VGhpcyB0YXNrIGhhcyBubyByZXZlcnNlIGRlcGVuZGVuY2llczwvbGk+CisgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgPC91bD4KKzwvZGw+CisKK3sjIFBlcmZvcm1hbmNlIHNlY3Rpb24gLSBzaG93biBvbmx5IGZvciBleGVjdXRlZCB0YXNrcyAjfQoreyVpZiB0YXNrLmVsYXBzZWRfdGltZSBvciB0YXNrLmNwdV91c2FnZSBvciB0YXNrLmRpc2tfaW8gJX0KKyAgICA8aDIgY2xhc3M9ImRldGFpbHMiPlBlcmZvcm1hbmNlPC9oMj4KK3slIGVuZGlmICV9CisgICAgPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KKyAgICAgICAgeyUgaWYgdGFzay5lbGFwc2VkX3RpbWUgJX0KKyAgICAgICAgPGR0PgorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkhvdyBsb25nIGl0IHRvb2sgdGhlIHRhc2sgdG8gZmluaXNoIGluIHNlY29uZHMiPjwvaT4KKyAgICAgICAgICAgIFRpbWUgKHNlY3MpCisgICAgICAgIDwvZHQ+CisgICAgICAgIDxkZD57e3Rhc2suZWxhcHNlZF90aW1lfGZvcm1hdF9ub25lX2FuZF96ZXJvfGZsb2F0Zm9ybWF0OjJ9fTwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGlmIHRhc2suY3B1X3VzYWdlID4gMCAlfQorICAgICAgICA8ZHQ+CisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHBlcmNlbnRhZ2Ugb2YgdGFzayBDUFUgdXRpbGl6YXRpb24iPjwvaT4KKyAgICAgICAgICAgIENQVSB1c2FnZQorICAgICAgICA8L2R0PgorICAgICAgICA8ZGQ+e3t0YXNrLmNwdV91c2FnZXxmb3JtYXRfbm9uZV9hbmRfemVyb3xmbG9hdGZvcm1hdDoyfX0lPC9kZD4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgaWYgdGFzay5kaXNrX2lvID4gMCAlfQorICAgICAgICA8ZHQ+CisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iTnVtYmVyIG9mIG1pbGlzZWNvbmRzIHRoZSB0YXNrIHNwZW50IGRvaW5nIGRpc2sgaW5wdXQgYW5kIG91dHB1dCI+PC9pPgorICAgICAgICAgICAgRGlzayBJL08gKG1zKQorICAgICAgICA8L2R0PgorICAgICAgICA8ZGQ+e3t0YXNrLmRpc2tfaW98Zm9ybWF0X25vbmVfYW5kX3plcm99fTwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgPC9kbD4KKworPC9kaXY+Cit7JSBlbmRibG9jayAlfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdGFza3MuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90YXNrcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOGI1YzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdGFza3MuaHRtbApAQCAtMCwwICsxLDEzNiBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKzxsaT57e3RpdGxlfX08L2xpPgoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgbmF2LXRhc2tzICV9CisgIHslIGlmICdUYXNrcycgPT0gdGl0bGUgJX0KKyAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+PGEgaHJlZj0ieyUgdXJsICd0YXNrcycgYnVpbGQucGsgJX0iPlRhc2tzPC9hPjwvbGk+CisgIHslIGVsc2UgJX0KKyAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICd0YXNrcycgYnVpbGQucGsgJX0iPlRhc2tzPC9hPjwvbGk+CisgIHslIGVuZGlmICV9Cit7JSBlbmRibG9jayAlfQoreyUgYmxvY2sgbmF2LWJ1aWxkdGltZSAlfQorICB7JSBpZiAnVGltZScgPT0gdGl0bGUgJX0KKyAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+PGEgaHJlZj0ieyUgdXJsICdidWlsZHRpbWUnIGJ1aWxkLnBrICV9Ij5UaW1lPC9hPjwvbGk+CisgIHslIGVsc2UgJX0KKyAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdidWlsZHRpbWUnIGJ1aWxkLnBrICV9Ij5UaW1lPC9hPjwvbGk+CisgIHslIGVuZGlmICV9Cit7JSBlbmRibG9jayAlfQoreyUgYmxvY2sgbmF2LWNwdXVzYWdlICV9CisgIHslIGlmICdDUFUgdXNhZ2UnID09IHRpdGxlICV9CisgICAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9InslIHVybCAnY3B1dXNhZ2UnIGJ1aWxkLnBrICV9Ij5DUFUgdXNhZ2U8L2E+PC9saT4KKyAgeyUgZWxzZSAlfQorICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ2NwdXVzYWdlJyBidWlsZC5wayAlfSI+Q1BVIHVzYWdlPC9hPjwvbGk+CisgIHslIGVuZGlmICV9Cit7JSBlbmRibG9jayAlfQoreyUgYmxvY2sgbmF2LWRpc2tpbyAlfQorICB7JSBpZiAnRGlzayBJL08nID09IHRpdGxlICV9CisgICAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9InslIHVybCAnZGlza2lvJyBidWlsZC5wayAlfSI+RGlzayBJL088L2E+PC9saT4KKyAgeyUgZWxzZSAlfQorICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ2Rpc2tpbycgYnVpbGQucGsgJX0iPkRpc2sgSS9PPC9hPjwvbGk+CisgIHslIGVuZGlmICV9Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBidWlsZGluZm9tYWluICV9Cis8ZGl2IGNsYXNzPSJzcGFuMTAiPgoreyUgaWYgbm90IHJlcXVlc3QuR0VULmZpbHRlciBhbmQgbm90IHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgbm90IG9iamVjdHMucGFnaW5hdG9yLmNvdW50ICV9CisgIDwhLS0gRW1wdHkgLSBubyBkYXRhIGluIGRhdGFiYXNlIC0tPgorICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgIDxoMT57e3RpdGxlfX08L2gxPgorICA8L2Rpdj4KKyAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyBsZWFkIj4KKyAgTm8gZGF0YSB3YXMgcmVjb3JkZWQgZm9yIHRoaXMgYnVpbGQuCisgIDwvZGl2PgorCit7JSBlbHNlICV9CisKKyAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICA8aDE+CisgIHslIGlmICByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID4gIDAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+ICAwICV9CisgICAgICB7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fX0gdGFza3t7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR8cGx1cmFsaXplfX0gZm91bmQKKyAgeyVlbGlmIHJlcXVlc3QuR0VULmZpbHRlciBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCBvciByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KKyAgICAgIE5vIHRhc2tzIGZvdW5kCisgIHslZWxzZSV9CisgICAgICB7e3RpdGxlfX0KKyAgeyVlbmRpZiV9CisgIDwvaDE+CisgIDwvZGl2PgorCisgIHslIGlmIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KKyAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KKyAgICAgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIiBpZD0ic2VhcmNoZm9ybSI+CisgICAgICAgICAgICA8aW5wdXQgaWQ9InNlYXJjaCIgbmFtZT0ic2VhcmNoIiBjbGFzcz0iaW5wdXQteHhsYXJnZSIgdHlwZT0idGV4dCIgdmFsdWU9Int7cmVxdWVzdC5HRVQuc2VhcmNofX0iLz57JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX08YSBocmVmPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiIGNsYXNzPSJhZGQtb24gYnRuIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPjwvYT57JSBlbmRpZiAlfQorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2giPlNlYXJjaDwvYnV0dG9uPgorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiPlNob3cgYWxsIHRhc2tzPC9idXR0b24+CisgICAgICAgIDwvZm9ybT4KKyAgICAgIDwvZGl2PgorICA8L2Rpdj4KKworCisgIHslIGVsc2UgJX0KKyAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX3RvcC5odG1sIiAlfQorCisgICAgeyUgZm9yIHRhc2sgaW4gb2JqZWN0cyAlfQorICAgICAgICA8dHIge3sgdGFza3x0YXNrX2NvbG9yIH19IGlkPSJ7e3Rhc2sub3JkZXJ9fSI+CisgICAgICAgICAgICA8dGQgY2xhc3M9Im9yZGVyIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAidGFzayIgYnVpbGQucGsgdGFzay5wayV9Ij57e3Rhc2sub3JkZXJ9fTwvYT4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9uYW1lIiA+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHRhc2sucmVjaXBlLnBrICV9Ij57e3Rhc2sucmVjaXBlLm5hbWV9fTwvYT4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV92ZXJzaW9uIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgdGFzay5yZWNpcGUucGsgJX0iPnt7dGFzay5yZWNpcGUudmVyc2lvbn19PC9hPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFza19uYW1lIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAidGFzayIgYnVpbGQucGsgdGFzay5wayV9Ij57e3Rhc2sudGFza19uYW1lfX08L2E+IHslIGlmIHRhc2suZ2V0X2Rlc2NyaXB0aW9uICV9PGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0ie3t0YXNrLmdldF9kZXNjcmlwdGlvbn19Ij48L2k+IHslIGVuZGlmICV9CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJleGVjdXRlZCI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGslfSI+e3t0YXNrLmdldF9leGVjdXRlZF9kaXNwbGF5fX08L2E+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJvdXRjb21lIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAidGFzayIgYnVpbGQucGsgdGFzay5wayV9Ij57e3Rhc2suZ2V0X291dGNvbWVfZGlzcGxheX19IDwvYT4KKyAgICAgICAgICAgICAgICB7JSBpZiB0YXNrLm91dGNvbWUgPSB0YXNrLk9VVENPTUVfRkFJTEVEICV9CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLnBrICJ0YXNrbG9nZmlsZSIgdGFzay5wayAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1kb3dubG9hZC1hbHQiIHRpdGxlPSJEb3dubG9hZCB0YXNrIGxvZyBmaWxlIj48L2k+CisgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIgdGl0bGU9Int7dGFzay5nZXRfb3V0Y29tZV9oZWxwfX0iPjwvaT4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9ImNhY2hlX2F0dGVtcHQiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJ0YXNrIiBidWlsZC5wayB0YXNrLnBrJX0iPnt7dGFzay5nZXRfc3N0YXRlX3Jlc3VsdF9kaXNwbGF5fGZvcm1hdF9ub25lX2FuZF96ZXJvfX08L2E+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aW1lX3Rha2VuIj4KKyAgICAgICAgICAgICAgICB7e3Rhc2suZWxhcHNlZF90aW1lfGZvcm1hdF9ub25lX2FuZF96ZXJvfGZsb2F0Zm9ybWF0OjJ9fQorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0iY3B1X3VzZWQiPgorICAgICAgICAgICAgICAgIHt7dGFzay5jcHVfdXNhZ2V8Zm9ybWF0X25vbmVfYW5kX3plcm98ZmxvYXRmb3JtYXQ6Mn19eyUgaWYgdGFzay5jcHVfdXNhZ2UgJX0leyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9ImRpc2tfaW8iPgorICAgICAgICAgICAgICAgIHt7dGFzay5kaXNrX2lvfGZvcm1hdF9ub25lX2FuZF96ZXJvfX0KKyAgICAgICAgICAgIDwvdGQ+CisKKyAgICAgICAgPC90cj4KKyAgICB7JSBlbmRmb3IgJX0KKworICB7JSBpbmNsdWRlICJiYXNldGFibGVfYm90dG9tLmh0bWwiICV9CisgIHslIGVuZGlmICV9IHsjIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ICN9Cit7JSBlbmRpZiAlfSB7IyBlbXB0eSAjfQorPC9kaXY+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKworICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgICAgICAvLyBlbmFibGUgYmx1ZSBoaWdodGxpZ2h0IGFuaW1hdGlvbiBmb3IgdGhlIG9yZGVyIGxpbmsKKyAgICAgICAgaWYgKGxvY2F0aW9uLmhyZWYuc2VhcmNoKCcjJykgPiAtMSkgeworICAgICAgICAgICAgdmFyIHRhc2tfb3JkZXIgPSBsb2NhdGlvbi5ocmVmLnNwbGl0KCcjJylbMV07CisgICAgICAgICAgICAkKCIjIiArIHRhc2tfb3JkZXIpLmFkZENsYXNzKCJoaWdobGlnaHQiKTsKKyAgICAgICAgfQorICAgIH0pOworCis8L3NjcmlwdD4KKworeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90b2FzdGVydGFibGUtZmlsdGVyLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdG9hc3RlcnRhYmxlLWZpbHRlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjOGRjNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdG9hc3RlcnRhYmxlLWZpbHRlci5odG1sCkBAIC0wLDAgKzEsMTggQEAKKzwhLS0gZmlsdGVyIG1vZGFsIC0tPgorPGRpdiBpZD0iZmlsdGVyLW1vZGFsLXt7dGFibGVfbmFtZX19IiBjbGFzcz0ibW9kYWwgaGlkZSBmYWRlIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1oaWRkZW49ImZhbHNlIj4KKyAgPGZvcm0gaWQ9ImZpbHRlci1tb2RhbC1mb3JtLXt7dGFibGVfbmFtZX19IiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMHB4Ij4KKyAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgorICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiPng8L2J1dHRvbj4KKyAgICAgIDxoMyBpZD0iZmlsdGVyLW1vZGFsLXRpdGxlLXt7dGFibGVfbmFtZX19Ij4mbmJzcDs8L2gzPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgPHA+U2hvdzo8L3A+CisgICAgICA8c3BhbiBpZD0iZmlsdGVyLWFjdGlvbnMte3t0YWJsZV9uYW1lfX0iPjwvc3Bhbj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgorICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiB0eXBlPSJzdWJtaXQiPkFwcGx5PC9idXR0b24+CisgICAgPC9kaXY+CisgIDwvZm9ybT4KKzwvZGl2PgorPGJ1dHRvbiBpZD0iY2xlYXItZmlsdGVyLWJ0bi17e3RhYmxlX25hbWV9fSIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC9idXR0b24+Cis8IS0tIGVuZCBmaWx0ZXIgbW9kYWwgLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdG9hc3RlcnRhYmxlLXNpbXBsZS5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RvYXN0ZXJ0YWJsZS1zaW1wbGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTIzMThiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RvYXN0ZXJ0YWJsZS1zaW1wbGUuaHRtbApAQCAtMCwwICsxLDk0IEBACisKK3slIGxvYWQgc3RhdGljICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL3RhYmxlLmpzJyAlfSI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9sYXllckJ0bi5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdD4KKyAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CisgICAgKGZ1bmN0aW9uKCl7CisKKyAgICB2YXIgY3R4ID0geworICAgICAgdGFibGVOYW1lIDogInt7dGFibGVfbmFtZX19IiwKKyAgICAgIHVybCA6ICJ7eyB4aHJfdGFibGVfdXJsIH19P2Zvcm1hdD1qc29uIiwKKyAgICAgIHRpdGxlIDogInt7dGl0bGV9fSIsCisgICAgICBwcm9qZWN0TGF5ZXJzIDoge3twcm9qZWN0bGF5ZXJzfGpzb259fSwKKyAgICB9OworCisgICAgdHJ5IHsKKyAgICAgIHRhYmxlSW5pdChjdHgpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGRvY3VtZW50LndyaXRlKCJQcm9ibGVtIGxvYWRpbmcgdGFibGUgd2lkZ2V0OiAiICsgZSk7CisgICAgfQorICAgIH0pKCk7CisgIH0pOworPC9zY3JpcHQ+CisKK3slIGluY2x1ZGUgJ3RvYXN0ZXJ0YWJsZS1maWx0ZXIuaHRtbCcgJX0KKworPGRpdiBjbGFzcz0icm93LWZsdWlkIiBpZD0ibm8tcmVzdWx0cy17e3RhYmxlX25hbWV9fSIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KKyAgICA8Zm9ybSBjbGFzcz0ibm8tcmVzdWx0cyBpbnB1dC1hcHBlbmQiPgorICAgICAgPGlucHV0IGNsYXNzPSJpbnB1dC14bGFyZ2UiIGlkPSJuZXctc2VhcmNoLWlucHV0LXt7dGFibGVfbmFtZX19IiBuYW1lPSJzZWFyY2giIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJTZWFyY2gge3t0aXRsZXxsb3dlcn19IiB2YWx1ZT0ieyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslIGVuZGlmICV9Ii8+CisgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iYWRkLW9uIGJ0biByZW1vdmUtc2VhcmNoLWJ0bi17e3RhYmxlX25hbWV9fSIgdGFiaW5kZXg9Ii0xIj4KKyAgICAgICAgPGkgY2xhc3M9Imljb24tcmVtb3ZlIj48L2k+CisgICAgICA8L2E+CisgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gc2VhcmNoLXN1Ym1pdC17e3RhYmxlX25hbWV9fSIgPlNlYXJjaDwvYnV0dG9uPgorICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIHJlbW92ZS1zZWFyY2gtYnRuLXt7dGFibGVfbmFtZX19Ij5TaG93IHt7dGl0bGV8bG93ZXJ9fQorICAgICAgPC9idXR0b24+CisgICAgPC9mb3JtPgorICA8L2Rpdj4KKzwvZGl2PgorPGRpdiBpZD0idGFibGUtY29udGFpbmVyLXt7dGFibGVfbmFtZX19IiBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVuIj4KKyAgPCEtLSBjb250cm9sIGhlYWRlciAtLT4KKyAgPGRpdiBjbGFzcz0icm93LWZsdWlkIiBpZD0idGFibGUtY2hyb21lLXt7dGFibGVfbmFtZX19Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hdmJhci1zZWFyY2ggaW5wdXQtYXBwZW5kIHB1bGwtbGVmdCI+CisKKyAgICAgICAgPGlucHV0IGNsYXNzPSJpbnB1dC14bGFyZ2UiIGlkPSJzZWFyY2gtaW5wdXQte3t0YWJsZV9uYW1lfX0iIG5hbWU9InNlYXJjaCIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCB7e3RpdGxlfGxvd2VyfX0iIHZhbHVlPSJ7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX17e3JlcXVlc3QuR0VULnNlYXJjaH19eyUgZW5kaWYgJX0iLz4KKyAgICAgICAgPGEgaHJlZj0iIyIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgY2xhc3M9ImFkZC1vbiBidG4gcmVtb3ZlLXNlYXJjaC1idG4te3t0YWJsZV9uYW1lfX0iIHRhYmluZGV4PSItMSI+CisgICAgICAgICAgPGkgY2xhc3M9Imljb24tcmVtb3ZlIj48L2k+CisgICAgICAgIDwvYT4KKyAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBpZD0ic2VhcmNoLXN1Ym1pdC17e3RhYmxlX25hbWV9fSIgPlNlYXJjaDwvYnV0dG9uPgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPgorCisgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0iZGl2aWRlci12ZXJ0aWNhbCI+PC9zcGFuPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9InBhZGRpbmctdG9wOjVweDsiPlNob3cgcm93czo8L3NwYW4+CisgICAgICAgICAgPHNlbGVjdCBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7bWFyZ2luLWJvdHRvbTowcHg7IiBjbGFzcz0icGFnZXNpemUte3t0YWJsZV9uYW1lfX0iPgorICAgICAgICAgICAgeyUgd2l0aCAiMTAgMjUgNTAgMTAwIDE1MCIgYXMgbGlzdCV9CisgICAgICAgICAgICB7JSBmb3IgaSBpbiBsaXN0LnNwbGl0ICV9CisgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSI+e3tpfX08L29wdGlvbj4KKyAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICAgIDwvc2VsZWN0PgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICA8L2Rpdj4KKworICA8IS0tIFRoZSBhY3R1YWwgdGFibGUgLS0+CisgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGVzb3J0ZXIiIGlkPSJ7e3RhYmxlX25hbWV9fSI+CisgICAgPHRoZWFkPgorICAgICAgPHRyPjx0aD48L3RoPjwvdHI+CisgICAgPC90aGVhZD4KKyAgICA8dGJvZHk+PC90Ym9keT4KKyAgPC90YWJsZT4KKworICA8IS0tIFBhZ2luYXRpb24gY29udHJvbHMgLS0+CisgIDxkaXYgY2xhc3M9InBhZ2luYXRpb24gcGFnaW5hdGlvbi1jZW50ZXJlZCIgaWQ9InBhZ2luYXRpb24te3t0YWJsZV9uYW1lfX0iPgorICAgIDx1bCBjbGFzcz0icGFnaW5hdGlvbiIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrLWlubGluZSI+CisgICAgPC91bD4KKworICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0icGFkZGluZy10b3A6NXB4OyI+U2hvdyByb3dzOjwvc3Bhbj4KKyAgICAgIDxzZWxlY3Qgc3R5bGU9Im1hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MHB4OyIgY2xhc3M9InBhZ2VzaXplLXt7dGFibGVfbmFtZX19Ij4KKyAgICAgICAgeyUgd2l0aCAiMTAgMjUgNTAgMTAwIDE1MCIgYXMgbGlzdCV9CisgICAgICAgIHslIGZvciBpIGluIGxpc3Quc3BsaXQgJX0KKyAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CisgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICA8L3NlbGVjdD4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+Cis8L2Rpdj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90b2FzdGVydGFibGUuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90b2FzdGVydGFibGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWY0YzZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RvYXN0ZXJ0YWJsZS5odG1sCkBAIC0wLDAgKzEsMTAzIEBACisKK3slIGxvYWQgc3RhdGljICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL3RhYmxlLmpzJyAlfSI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9sYXllckJ0bi5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdD4KKyAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CisgICAgKGZ1bmN0aW9uKCl7CisKKyAgICB2YXIgY3R4ID0geworICAgICAgdGFibGVOYW1lIDogInt7dGFibGVfbmFtZX19IiwKKyAgICAgIHVybCA6ICJ7eyB4aHJfdGFibGVfdXJsIH19P2Zvcm1hdD1qc29uIiwKKyAgICAgIHRpdGxlIDogInt7dGl0bGV9fSIsCisgICAgICBwcm9qZWN0TGF5ZXJzIDoge3twcm9qZWN0bGF5ZXJzfGpzb259fSwKKyAgICB9OworCisgICAgdHJ5IHsKKyAgICAgIHRhYmxlSW5pdChjdHgpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGRvY3VtZW50LndyaXRlKCJQcm9ibGVtIGxvYWRpbmcgdGFibGUgd2lkZ2V0OiAiICsgZSk7CisgICAgfQorICAgIH0pKCk7CisgIH0pOworPC9zY3JpcHQ+CisKK3slIGluY2x1ZGUgJ3RvYXN0ZXJ0YWJsZS1maWx0ZXIuaHRtbCcgJX0KKworPGRpdiBjbGFzcz0icm93LWZsdWlkIiBpZD0ibm8tcmVzdWx0cy17e3RhYmxlX25hbWV9fSIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KKyAgICA8Zm9ybSBjbGFzcz0ibm8tcmVzdWx0cyBpbnB1dC1hcHBlbmQiPgorICAgICAgPGlucHV0IGNsYXNzPSJpbnB1dC14eGxhcmdlIiBpZD0ibmV3LXNlYXJjaC1pbnB1dC17e3RhYmxlX25hbWV9fSIgbmFtZT0ic2VhcmNoIiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iU2VhcmNoIHt7dGl0bGV8bG93ZXJ9fSIgdmFsdWU9InslaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslZW5kaWYlfSIvPgorICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImFkZC1vbiBidG4gcmVtb3ZlLXNlYXJjaC1idG4te3t0YWJsZV9uYW1lfX0iIHRhYmluZGV4PSItMSI+CisgICAgICAgIDxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPgorICAgICAgPC9hPgorICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIHNlYXJjaC1zdWJtaXQte3t0YWJsZV9uYW1lfX0iID5TZWFyY2g8L2J1dHRvbj4KKyAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayByZW1vdmUtc2VhcmNoLWJ0bi17e3RhYmxlX25hbWV9fSI+U2hvdyB7e3RpdGxlfGxvd2VyfX0KKyAgICAgIDwvYnV0dG9uPgorICAgIDwvZm9ybT4KKyAgPC9kaXY+Cis8L2Rpdj4KKworPGRpdiBpZD0idGFibGUtY29udGFpbmVyLXt7dGFibGVfbmFtZX19IiBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVuIj4KKyAgPCEtLSBjb250cm9sIGhlYWRlciAtLT4KKyAgPGRpdiBjbGFzcz0ibmF2YmFyIiBpZD0idGFibGUtY2hyb21lLXt7dGFibGVfbmFtZX19Ij4KKyAgICA8ZGl2IGNsYXNzPSJuYXZiYXItaW5uZXIiPgorICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyLXNlYXJjaCBpbnB1dC1hcHBlbmQgcHVsbC1sZWZ0Ij4KKworICAgICAgICA8aW5wdXQgY2xhc3M9ImlucHV0LXh4bGFyZ2UiIGlkPSJzZWFyY2gtaW5wdXQte3t0YWJsZV9uYW1lfX0iIG5hbWU9InNlYXJjaCIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCB7e3RpdGxlfGxvd2VyfX0iIHZhbHVlPSJ7JWlmIHJlcXVlc3QuR0VULnNlYXJjaCV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslZW5kaWYlfSIvPgorICAgICAgICA8YSBocmVmPSIjIiBzdHlsZT0iZGlzcGxheTpub25lIiBjbGFzcz0iYWRkLW9uIGJ0biByZW1vdmUtc2VhcmNoLWJ0bi17e3RhYmxlX25hbWV9fSIgdGFiaW5kZXg9Ii0xIj4KKyAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT4KKyAgICAgICAgPC9hPgorICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIGlkPSJzZWFyY2gtc3VibWl0LXt7dGFibGVfbmFtZX19IiA+U2VhcmNoPC9idXR0b24+CisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImJ0bi1ncm91cCI+CisgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5FZGl0IGNvbHVtbnMKKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXJldCI+PC9zcGFuPgorICAgICAgICAgIDwvYnV0dG9uPgorICAgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSBlZGl0Y29sIj4KKyAgICAgICAgICA8L3VsPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXZpZGVyLXZlcnRpY2FsIj48L3NwYW4+CisgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0icGFkZGluZy10b3A6NXB4OyI+U2hvdyByb3dzOjwvc3Bhbj4KKyAgICAgICAgICA8c2VsZWN0IHN0eWxlPSJtYXJnaW4tdG9wOjVweDttYXJnaW4tYm90dG9tOjBweDsiIGNsYXNzPSJwYWdlc2l6ZS17e3RhYmxlX25hbWV9fSI+CisgICAgICAgICAgICB7JSB3aXRoICIxMCAyNSA1MCAxMDAgMTUwIiBhcyBsaXN0JX0KKyAgICAgICAgICAgIHslIGZvciBpIGluIGxpc3Quc3BsaXQgJX0KKyAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Int7aX19Ij57e2l9fTwvb3B0aW9uPgorICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICAgPC9zZWxlY3Q+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgIDwvZGl2PgorCisgIDwhLS0gVGhlIGFjdHVhbCB0YWJsZSAtLT4KKyAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciB0YWJsZXNvcnRlciIgaWQ9Int7dGFibGVfbmFtZX19Ij4KKyAgICA8dGhlYWQ+CisgICAgICA8dHI+PHRoPjwvdGg+PC90cj4KKyAgICA8L3RoZWFkPgorICAgIDx0Ym9keT48L3Rib2R5PgorICA8L3RhYmxlPgorCisgIDwhLS0gUGFnaW5hdGlvbiBjb250cm9scyAtLT4KKyAgPGRpdiBjbGFzcz0icGFnaW5hdGlvbiBwYWdpbmF0aW9uLWNlbnRlcmVkIiBpZD0icGFnaW5hdGlvbi17e3RhYmxlX25hbWV9fSI+CisgICAgPHVsIGNsYXNzPSJwYWdpbmF0aW9uIiBzdHlsZT0iZGlzcGxheTogYmxvY2staW5saW5lIj4KKyAgICA8L3VsPgorCisgICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJwYWRkaW5nLXRvcDo1cHg7Ij5TaG93IHJvd3M6PC9zcGFuPgorICAgICAgPHNlbGVjdCBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7bWFyZ2luLWJvdHRvbTowcHg7IiBjbGFzcz0icGFnZXNpemUte3t0YWJsZV9uYW1lfX0iPgorICAgICAgICB7JSB3aXRoICIxMCAyNSA1MCAxMDAgMTUwIiBhcyBsaXN0JX0KKyAgICAgICAgeyUgZm9yIGkgaW4gbGlzdC5zcGxpdCAlfQorICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSI+e3tpfX08L29wdGlvbj4KKyAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgIDwvc2VsZWN0PgorICAgIDwvZGl2PgorICA8L2Rpdj4KKzwvZGl2PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3VuYXZhaWxhYmxlX2FydGlmYWN0Lmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdW5hdmFpbGFibGVfYXJ0aWZhY3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWY4ZmVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3VuYXZhaWxhYmxlX2FydGlmYWN0Lmh0bWwKQEAgLTAsMCArMSwxNSBAQAoreyUgZXh0ZW5kcyAiYmFzZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQoreyUgbG9hZCBzdGF0aWMgJX0KKworeyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KKworPGRpdiBjbGFzcz0icm93LWZsdWlkIGFpciI+CisgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyBzcGFuOCBsZWFkIj4KKyAgICAgICAgPHAiPiBUaGUgYnVpbGQgYXJ0aWZhY3QgeW91IGFyZSB0cnlpbmcgdG8gZG93bmxvYWQgbm8gbG9uZ2VyIGV4aXN0cy48L3A+CisgICAgICAgIDxwPjxhIGhyZWY9ImphdmFzY3JpcHQ6d2luZG93Lmhpc3RvcnkuYmFjaygpIj5CYWNrIHRvIHByZXZpb3VzIHBhZ2U8L2E+PC9wPgorICAgIDwvZGl2PgorPC9kaXY+Cit7JSBlbmRibG9jayAlfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXRhZ3MvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXRhZ3MvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRldGFncy9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGV0YWdzL3Byb2plY3R0YWdzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGV0YWdzL3Byb2plY3R0YWdzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZjIyNjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXRhZ3MvcHJvamVjdHRhZ3MucHkKQEAgLTAsMCArMSwyOTkgQEAKKyMKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZWRlbHRhCitmcm9tIG9zLnBhdGggaW1wb3J0IHJlbHBhdGgKK2ltcG9ydCByZQorZnJvbSBkamFuZ28gaW1wb3J0IHRlbXBsYXRlCitmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKK2Zyb20gZGphbmdvLnRlbXBsYXRlLmRlZmF1bHRmaWx0ZXJzIGltcG9ydCBmaWxlc2l6ZWZvcm1hdAoraW1wb3J0IGpzb24gYXMgSnNvbkxpYgorZnJvbSBkamFuZ28udXRpbHMuc2FmZXN0cmluZyBpbXBvcnQgbWFya19zYWZlCisKK3JlZ2lzdGVyID0gdGVtcGxhdGUuTGlicmFyeSgpCisKK0ByZWdpc3Rlci5zaW1wbGVfdGFnCitkZWYgdGltZV9kaWZmZXJlbmNlKHN0YXJ0X3RpbWUsIGVuZF90aW1lKToKKyAgICByZXR1cm4gZW5kX3RpbWUgLSBzdGFydF90aW1lCisKK0ByZWdpc3Rlci5maWx0ZXIobmFtZSA9ICdzZWN0b2htcycpCitkZWYgc2VjdG9obXModGltZSk6CisgICAgdHJ5OgorICAgICAgICB0ZHNlYyA9IGludCh0aW1lKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICB0ZHNlYyA9IDAKKyAgICBob3VycyA9IGludCh0ZHNlYyAvIDM2MDApCisgICAgcmV0dXJuICIlMDJkOiUwMmQ6JTAyZCIgJSAoaG91cnMsIGludCgodGRzZWMgLSAoaG91cnMgKiAzNjAwKSkvIDYwKSwgaW50KHRkc2VjKSAlIDYwKQorCisKK0ByZWdpc3Rlci5maWx0ZXIobmFtZSA9ICdnZXRfdGFza3MnKQorZGVmIGdldF90YXNrcyhxdWVyeXNldCk6CisgICAgcmV0dXJuIGxpc3QodGFyZ2V0ICsgJzonICsgdGFzayBpZiB0YXNrIGVsc2UgdGFyZ2V0IFwKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRhcmdldCwgdGFzayBpbiBxdWVyeXNldC52YWx1ZXNfbGlzdCgndGFyZ2V0JywgJ3Rhc2snKSkKKworCitAcmVnaXN0ZXIuZmlsdGVyKG5hbWUgPSAianNvbiIpCitkZWYganNvbih2YWx1ZSwgZGVmYXVsdCA9IE5vbmUpOgorICAgICMgSlNPTiBzcGVjIHNheXMgdGhhdCAiXC8iIGlzIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gIi8iIHRvIGFsbG93IGZvciBIVE1MLXRhZyBlbWJlZGRpbmcgaW4gSlNPTiBzdHJpbmdzCisgICAgIyB1bmZvcnR1bmF0ZWx5LCBJIGNhbid0IGZpbmQgYW55IG9wdGlvbiBpbiB0aGUganNvbiBtb2R1bGUgdG8gdHVybiBvbiBmb3J3YXJkLXNsYXNoIGVzY2FwaW5nLCBzbyB3ZSBkbworICAgICMgaXQgbWFudWFsbHkgaGVyZQorICAgIHJldHVybiBtYXJrX3NhZmUoSnNvbkxpYi5kdW1wcyh2YWx1ZSwgaW5kZW50PTIsIGRlZmF1bHQgPSBkZWZhdWx0LCBlbnN1cmVfYXNjaWk9RmFsc2UpLnJlcGxhY2UoJzwvJywgJzxcXC8nKSkKKworQHJlZ2lzdGVyLmFzc2lnbm1lbnRfdGFnCitkZWYgcXVlcnkocXMsICoqa3dhcmdzKToKKyAgICAiIiIgdGVtcGxhdGUgdGFnIHdoaWNoIGFsbG93cyBxdWVyeXNldCBmaWx0ZXJpbmcuIFVzYWdlOgorICAgICAgICAgIHslIHF1ZXJ5IGJvb2tzIGF1dGhvcj1hdXRob3IgYXMgbXlib29rcyAlfQorICAgICAgICAgIHslIGZvciBib29rIGluIG15Ym9va3MgJX0KKyAgICAgICAgICAgIC4uLgorICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICIiIgorICAgIHJldHVybiBxcy5maWx0ZXIoKiprd2FyZ3MpCisKKworQHJlZ2lzdGVyLmZpbHRlcigid2hpdGVzcGFjZV9zbGljZSIpCitkZWYgd2hpdGVzcGFjZV9zcGFjZV9maWx0ZXIodmFsdWUsIGFyZyk6CisgICAgdHJ5OgorICAgICAgICBiaXRzID0gW10KKyAgICAgICAgZm9yIHggaW4gYXJnLnNwbGl0KCI6Iik6CisgICAgICAgICAgICBpZiBsZW4oeCkgPT0gMDoKKyAgICAgICAgICAgICAgICBiaXRzLmFwcGVuZChOb25lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGNvbnZlcnQgbnVtZXJpYyB2YWx1ZSB0byB0aGUgZmlyc3Qgd2hpdGVzcGFjZSBhZnRlcgorICAgICAgICAgICAgICAgIGZpcnN0X3doaXRlc3BhY2UgPSB2YWx1ZS5maW5kKCIgIiwgaW50KHgpKQorICAgICAgICAgICAgICAgIGlmIGZpcnN0X3doaXRlc3BhY2UgPT0gLTE6CisgICAgICAgICAgICAgICAgICAgIGJpdHMuYXBwZW5kKGludCh4KSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBiaXRzLmFwcGVuZChmaXJzdF93aGl0ZXNwYWNlKQorICAgICAgICByZXR1cm4gdmFsdWVbc2xpY2UoKmJpdHMpXQorICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgcmFpc2UKKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIGRpdmlkZSh2YWx1ZSwgYXJnKToKKyAgICBpZiBpbnQoYXJnKSA9PSAwOgorICAgICAgICByZXR1cm4gLTEKKyAgICByZXR1cm4gaW50KHZhbHVlKSAvIGludChhcmcpCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBtdWx0aXBseSh2YWx1ZSwgYXJnKToKKyAgICByZXR1cm4gaW50KHZhbHVlKSAqIGludChhcmcpCisKK0ByZWdpc3Rlci5hc3NpZ25tZW50X3RhZworZGVmIGRhdGVjb21wdXRlKGRlbHRhLCBzdGFydCA9IHRpbWV6b25lLm5vdygpKToKKyAgICByZXR1cm4gc3RhcnQgKyB0aW1lZGVsdGEoZGVsdGEpCisKKworQHJlZ2lzdGVyLmZpbHRlcihuYW1lID0gJ3NvcnRjb2xzJykKK2RlZiBzb3J0Y29scyh0YWJsZWNvbHMpOgorICAgIHJldHVybiBzb3J0ZWQodGFibGVjb2xzLCBrZXkgPSBsYW1iZGEgdDogdFsnbmFtZSddKQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgdGFza19jb2xvcih0YXNrX29iamVjdCwgc2hvd19ncmVlbj1GYWxzZSk6CisgICAgIiIiIFJldHVybiBjc3MgY2xhc3MgZGVwZW5kaW5nIG9uIFRhc2sgZXhlY3V0aW9uIHN0YXR1cyBhbmQgZXhlY3V0aW9uIG91dGNvbWUuCisgICAgICAgIEJ5IGRlZmF1bHQsIGdyZWVuIGlzIG5vdCByZXR1cm5lZCBmb3IgZXhlY3V0ZWQgYW5kIHN1Y2Nlc3NmdWwgdGFza3M7CisgICAgICAgIHNob3dfZ3JlZW4gYXJndW1lbnQgc2hvdWxkIGJlIFRydWUgdG8gZ2V0IGdyZWVuIGNvbG9yLgorICAgICIiIgorICAgIGlmIG5vdCB0YXNrX29iamVjdC50YXNrX2V4ZWN1dGVkOgorICAgICAgICByZXR1cm4gJ2NsYXNzPW11dGVkJworICAgIGVsaWYgdGFza19vYmplY3Qub3V0Y29tZSA9PSB0YXNrX29iamVjdC5PVVRDT01FX0ZBSUxFRDoKKyAgICAgICAgcmV0dXJuICdjbGFzcz1lcnJvcicKKyAgICBlbGlmIHRhc2tfb2JqZWN0Lm91dGNvbWUgPT0gdGFza19vYmplY3QuT1VUQ09NRV9TVUNDRVNTIGFuZCBzaG93X2dyZWVuOgorICAgICAgICByZXR1cm4gJ2NsYXNzPWdyZWVuJworICAgIGVsc2U6CisgICAgICAgIHJldHVybiAnJworCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZmlsdGVyZWRfaWNvbihvcHRpb25zLCBmaWx0ZXIpOgorICAgICIiIlJldHVybnMgYnRuLXByaW1hcnkgaWYgdGhlIGZpbHRlciBtYXRjaGVzIG9uZSBvZiB0aGUgZmlsdGVyIG9wdGlvbnMKKyAgICAiIiIKKyAgICBmb3Igb3B0aW9uIGluIG9wdGlvbnM6CisgICAgICAgIGlmIGZpbHRlciA9PSBvcHRpb25bMV06CisgICAgICAgICAgICByZXR1cm4gImJ0bi1wcmltYXJ5IgorICAgICAgICBpZiAoJ2RhdGVyYW5nZScgPT0gb3B0aW9uWzFdKSBhbmQgZmlsdGVyLnN0YXJ0c3dpdGgob3B0aW9uWzRdKToKKyAgICAgICAgICAgIHJldHVybiAiYnRuLXByaW1hcnkiCisgICAgcmV0dXJuICIiCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBmaWx0ZXJlZF90b29sdGlwKG9wdGlvbnMsIGZpbHRlcik6CisgICAgIiIiUmV0dXJucyB0b29sdGlwIGZvciB0aGUgZmlsdGVyIGljb24gaWYgdGhlIGZpbHRlciBtYXRjaGVzIG9uZSBvZiB0aGUgZmlsdGVyIG9wdGlvbnMKKyAgICAiIiIKKyAgICBmb3Igb3B0aW9uIGluIG9wdGlvbnM6CisgICAgICAgIGlmIGZpbHRlciA9PSBvcHRpb25bMV06CisgICAgICAgICAgICByZXR1cm4gIlNob3dpbmcgb25seSAlcyIlb3B0aW9uWzBdCisgICAgICAgIGlmICgnZGF0ZXJhbmdlJyA9PSBvcHRpb25bMV0pIGFuZCBmaWx0ZXIuc3RhcnRzd2l0aChvcHRpb25bNF0pOgorICAgICAgICAgICAgcmV0dXJuICJTaG93aW5nIG9ubHkgJXMiJW9wdGlvblswXQorICAgIHJldHVybiAiIgorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZm9ybWF0X25vbmVfYW5kX3plcm8odmFsdWUpOgorICAgICIiIlJldHVybiBlbXB0eSBzdHJpbmcgaWYgdGhlIHZhbHVlIGlzIE5vbmUsIHplcm8gb3IgTm90IEFwcGxpY2FibGUKKyAgICAiIiIKKyAgICByZXR1cm4gIiIgaWYgKG5vdCB2YWx1ZSkgb3IgKHZhbHVlID09IDApIG9yICh2YWx1ZSA9PSAiMCIpIG9yICh2YWx1ZSA9PSAnTm90IEFwcGxpY2FibGUnKSBlbHNlIHZhbHVlCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdCh2YWx1ZSk6CisgICAgIiIiCisgICAgSWYgdGhlIHZhbHVlIGlzIC0xIHJldHVybiBhbiBlbXB0eSBzdHJpbmcuIE90aGVyd2lzZSwKKyAgICBjaGFuZ2Ugb3V0cHV0IGZyb20gZmlsZWZvcm1hdHNpemUgdG8gc3VwcHJlc3MgdHJhaWxpbmcgJy4wJworICAgIGFuZCBjaGFuZ2UgJ2J5dGVzJyB0byAnQicuCisgICAgIiIiCisgICAgaWYgdmFsdWUgPT0gLTE6CisgICAgICAgIHJldHVybiAnJworCisgICAgcmV0dXJuIGZpbGVzaXplZm9ybWF0KHZhbHVlKS5yZXBsYWNlKCJieXRlcyIsICJCIikKKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIGZpbHRlcmVkX3BhY2thZ2VzcGVjKHZhbHVlKToKKyAgICAiIiJTdHJpcCBvZmYgZW1wdHkgdmVyc2lvbiBhbmQgcmV2aXNpb24iIiIKKyAgICByZXR1cm4gcmUuc3ViKHInKC0tJCknLCAnJywgdmFsdWUpCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBjaGVja19maWx0ZXJfc3RhdHVzKG9wdGlvbnMsIGZpbHRlcik6CisgICAgIiIiQ2hlY2sgaWYgdGhlIGFjdGl2ZSBmaWx0ZXIgaXMgYW1vbmcgdGhlIGF2YWlsYWJsZSBvcHRpb25zLCBhbmQgcmV0dXJuICdjaGVja2VkJworICAgICAgIGlmIGZpbHRlciBpcyBub3QgYWN0aXZlLgorICAgICAgIFVzZWQgaW4gRmlsdGVyRGlhbG9nIHRvIHNlbGVjdCB0aGUgZmlyc3QgcmFkaW8gYnV0dG9uIGlmIHRoZSBmaWx0ZXIgaXMgbm90IGFjdGl2ZS4KKyAgICAiIiIKKyAgICBmb3Igb3B0aW9uIGluIG9wdGlvbnM6CisgICAgICAgIGlmIGZpbHRlciA9PSBvcHRpb25bMV06CisgICAgICAgICAgICByZXR1cm4gIiIKKyAgICByZXR1cm4gImNoZWNrZWQiCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiB2YXJpYWJsZV9wYXJlbnRfbmFtZSh2YWx1ZSk6CisgICAgIiIiIGZpbHRlciBleHRlbmRlZCB2YXJpYWJsZSBuYW1lcyB0byB0aGUgcGFyZW50IG5hbWUKKyAgICAiIiIKKyAgICB2YWx1ZT1yZS5zdWIoJ19cJC4qJywgJycsIHZhbHVlKQorICAgIHJldHVybiByZS5zdWIoJ19bYS16XS4qJywgJycsIHZhbHVlKQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZmlsdGVyX3NldGluX2ZpbGVzKGZpbGVfbGlzdCwgbWF0Y2hzdHIpOgorICAgICIiIkZpbHRlci9zZWFyY2ggdGhlICdzZXQgaW4nIGZpbGUgbGlzdHMuIiIiCisgICAgcmVzdWx0ID0gW10KKyAgICBzZWFyY2gsIGZpbHRlciA9IG1hdGNoc3RyLnNwbGl0KCc6JykKKyAgICBmb3IgcGF0dGVybiBpbiAoc2VhcmNoLCBmaWx0ZXIpOgorICAgICAgICBpZiBwYXR0ZXJuOgorICAgICAgICAgICAgZm9yIGZvYmogaW4gZmlsZV9saXN0OgorICAgICAgICAgICAgICAgIGZuYW1lID0gZm9iai5maWxlX25hbWUKKyAgICAgICAgICAgICAgICBpZiBmbmFtZSBub3QgaW4gcmVzdWx0IGFuZCByZS5zZWFyY2gocGF0dGVybiwgZm5hbWUpOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGZuYW1lKQorCisgICAgIyBubyBmaWx0ZXIsIHNob3cgbGFzdCBmaWxlIChpZiBhbnkpCisgICAgbGFzdCA9IGxpc3QoZmlsZV9saXN0KVstMV0uZmlsZV9uYW1lCisgICAgaWYgbm90IGZpbHRlciBhbmQgbGFzdCBub3QgaW4gcmVzdWx0OgorICAgICAgICByZXN1bHQuYXBwZW5kKGxhc3QpCisKKyAgICByZXR1cm4gcmVzdWx0CisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBzdHJpbmdfc2xpY2Uoc3RydmFyLHNsaWNldmFyKToKKyAgICAiIiIgc2xpY2UgYSBzdHJpbmcgd2l0aCB8c3RyaW5nX3NsaWNlOidbZmlyc3RdOltsYXN0XScKKyAgICAiIiIKKyAgICBmaXJzdCxsYXN0PSBzbGljZXZhci5wYXJ0aXRpb24oJzonKVs6OjJdCisgICAgaWYgZmlyc3Q9PScnOgorICAgICAgICByZXR1cm4gc3RydmFyWzppbnQobGFzdCldCisgICAgZWxpZiBsYXN0PT0nJzoKKyAgICAgICAgcmV0dXJuIHN0cnZhcltpbnQoZmlyc3QpOl0KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gc3RydmFyW2ludChmaXJzdCk6aW50KGxhc3QpXQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgc3RyaW5nX3JlbW92ZV9yZWdleCh2YWx1ZSxleCk6CisgICAgIiIiIHJlbW92ZSBzdWItc3RyaW5nIG9mIHN0cmluZyB0aGF0IG1hdGNoZXMgcmVnZXgKKyAgICAiIiIKKyAgICByZXR1cm4gcmUuc3ViKGV4LCAnJywgdmFsdWUpCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBmaWx0ZXJlZF9pbnN0YWxsZWRzaXplKHNpemUsIGluc3RhbGxlZF9zaXplKToKKyAgICAiIiJJZiBwYWNrYWdlLmluc3RhbGxlZF9zaXplIG5vdCBudWxsIGFuZCBub3QgZW1wdHkgcmV0dXJuIGl0LAorICAgICAgIGVsc2UgcmV0dXJuIHBhY2thZ2Uuc2l6ZQorICAgICIiIgorICAgIHJldHVybiBzaXplIGlmIChpbnN0YWxsZWRfc2l6ZSA9PSAwKSBvciAoaW5zdGFsbGVkX3NpemUgPT0gIiIpIG9yIChpbnN0YWxsZWRfc2l6ZSA9PSBOb25lKSBlbHNlIGluc3RhbGxlZF9zaXplCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBmaWx0ZXJlZF9wYWNrYWdldmVyc2lvbih2ZXJzaW9uLCByZXZpc2lvbik6CisgICAgIiIiIEVtaXQgInZlcnNpb24tcmV2aXNpb24iIGlmIHZlcnNpb24gYW5kIHJldmlzaW9uIGFyZSBub3QgbnVsbAorICAgICAgICBlbHNlICJ2ZXJzaW9uIiBpZiB2ZXJzaW9uIGlzIG5vdCBudWxsCisgICAgICAgIGVsc2UgIiIKKyAgICAiIiIKKyAgICByZXR1cm4gIiIgaWYgKG5vdCB2ZXJzaW9uIG9yIHZlcnNpb24gPT0gIiIpIGVsc2UgdmVyc2lvbiBpZiAobm90IHJldmlzaW9uIG9yIHJldmlzaW9uID09ICIiKSBlbHNlIHZlcnNpb24gKyAiLSIgKyByZXZpc2lvbgorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZmlsdGVyX3NpemVvdmVydG90YWwocGFja2FnZV9vYmplY3QsIHRvdGFsX3NpemUpOgorICAgICIiIiBSZXR1cm4gdGhlICUgc2l6ZSBvZiB0aGUgcGFja2FnZSBvdmVyIHRoZSB0b3RhbCBzaXplIGFyZ3VtZW50CisgICAgICAgIGZvcm1hdHRlZCBuaWNlbHkuCisgICAgIiIiCisgICAgc2l6ZSA9IHBhY2thZ2Vfb2JqZWN0Lmluc3RhbGxlZF9zaXplCisgICAgaWYgc2l6ZSA9PSBOb25lIG9yIHNpemUgPT0gJyc6CisgICAgICAgIHNpemUgPSBwYWNrYWdlX29iamVjdC5zaXplCisKKyAgICByZXR1cm4gJ3s6LjElfScuZm9ybWF0KGZsb2F0KHNpemUpL2Zsb2F0KHRvdGFsX3NpemUpKQorCitmcm9tIGRqYW5nby51dGlscy5zYWZlc3RyaW5nIGltcG9ydCBtYXJrX3NhZmUKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBmb3JtYXRfdnBhY2thZ2Vfcm93Y2xhc3Moc2l6ZSk6CisgICAgaWYgc2l6ZSA9PSAtMToKKyAgICAgICAgcmV0dXJuIG1hcmtfc2FmZSgnY2xhc3M9Im11dGVkIicpCisgICAgcmV0dXJuICcnCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBmb3JtYXRfdnBhY2thZ2VfbmFtZWhlbHAobmFtZSk6CisgICAgciA9ICBuYW1lICsgJyZuYnNwOycKKyAgICByICs9ICc8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiJworICAgIHIgKz0gJyB0aXRsZSA9ICInICsgbmFtZSArICcgaGFzIG5vdCBiZWVuIGJ1aWx0Ij4nCisgICAgciArPSAnPC9pPicKKyAgICByZXR1cm4gbWFya19zYWZlKHIpCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBnZXRfZGljdF92YWx1ZShkaWN0aW9uYXJ5LCBrZXkpOgorICAgICIiIiByZXR1cm4gdGhlIHZhbHVlIG9mIGEgZGljdGlvbmFyeSBrZXkKKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5W2tleV0KKyAgICBleGNlcHQgKEtleUVycm9yLCBJbmRleEVycm9yKToKKyAgICAgICAgcmV0dXJuICcnCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBmb3JtYXRfYnVpbGRfZGF0ZShjb21wbGV0ZWRfb24pOgorICAgIG5vdyA9IHRpbWV6b25lLm5vdygpCisgICAgZGVsdGEgPSBub3cgLSBjb21wbGV0ZWRfb24KKworICAgIGlmIGRlbHRhLmRheXMgPj0gMToKKyAgICAgICAgcmV0dXJuIFRydWUKKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIGlzX3NoYWlkKHRleHQpOgorICAgICIiIiByZXR1cm4gVHJ1ZSBpZiB0ZXh0IGxlbmd0aCBpcyA0MCBjaGFyYWN0ZXJzIGFuZCBhbGwgaGV4LWRpZ2l0cworICAgICIiIgorICAgIHRyeToKKyAgICAgICAgaW50KHRleHQsIDE2KQorICAgICAgICBpZiBsZW4odGV4dCkgPT0gNDA6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBjdXRfcGF0aF9wcmVmaXgoZnVsbHBhdGgsIHByZWZpeGVzKToKKyAgICAiIiJDdXQgcGF0aCBwcmVmaXggZnJvbSBmdWxscGF0aC4iIiIKKyAgICBmb3IgcHJlZml4IGluIHByZWZpeGVzOgorICAgICAgICBpZiBmdWxscGF0aC5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgICAgICByZXR1cm4gcmVscGF0aChmdWxscGF0aCwgcHJlZml4KQorICAgIHJldHVybiBmdWxscGF0aApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVzdHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYThiNDc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVzdHMucHkKQEAgLTAsMCArMSwyOTQgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIiIiVGVzdCBjYXNlcyBmb3IgVG9hc3RlciBHVUkgYW5kIFJlU1QuIiIiCisKK2Zyb20gZGphbmdvLnRlc3QgaW1wb3J0IFRlc3RDYXNlCitmcm9tIGRqYW5nby5jb3JlLnVybHJlc29sdmVycyBpbXBvcnQgcmV2ZXJzZQorZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFByb2plY3QsIFJlbGVhc2UsIEJpdGJha2VWZXJzaW9uLCBCdWlsZAorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eSwgTGF5ZXJTb3VyY2UsIExheWVyCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IExheWVyX1ZlcnNpb24sIFJlY2lwZSwgTWFjaGluZSwgUHJvamVjdExheWVyCitpbXBvcnQganNvbgorCitQUk9KRUNUX05BTUUgPSAidGVzdCBwcm9qZWN0IgorCitjbGFzcyBWaWV3VGVzdHMoVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRvIHZlcmlmeSB2aWV3IEFQSXMuIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGJidiA9IEJpdGJha2VWZXJzaW9uLm9iamVjdHMuY3JlYXRlKG5hbWU9InRlc3QgYmJ2IiwgZ2l0dXJsPSIvdG1wLyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaD0ibWFzdGVyIiwgZGlycGF0aD0iIikKKyAgICAgICAgcmVsZWFzZSA9IFJlbGVhc2Uub2JqZWN0cy5jcmVhdGUobmFtZT0idGVzdCByZWxlYXNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0YmFrZV92ZXJzaW9uPWJidikKKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmNyZWF0ZV9wcm9qZWN0KG5hbWU9UFJPSkVDVF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZT1yZWxlYXNlKQorCisgICAgICAgIGxheWVyc3JjID0gTGF5ZXJTb3VyY2Uub2JqZWN0cy5jcmVhdGUoc291cmNldHlwZT1MYXllclNvdXJjZS5UWVBFX0lNUE9SVEVEKQorICAgICAgICBzZWxmLnByaW9yaXR5ID0gUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHkub2JqZWN0cy5jcmVhdGUocmVsZWFzZT1yZWxlYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfc291cmNlPWxheWVyc3JjKQorICAgICAgICBsYXllciA9IExheWVyLm9iamVjdHMuY3JlYXRlKG5hbWU9ImJhc2UtbGF5ZXIiLCBsYXllcl9zb3VyY2U9bGF5ZXJzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmNzX3VybD0iL3RtcC8iKQorCisgICAgICAgIGx2ZXIgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuY3JlYXRlKGxheWVyPWxheWVyLCBwcm9qZWN0PXNlbGYucHJvamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfc291cmNlPWxheWVyc3JjLCBjb21taXQ9Im1hc3RlciIpCisKKyAgICAgICAgUmVjaXBlLm9iamVjdHMuY3JlYXRlKGxheWVyX3NvdXJjZT1sYXllcnNyYywgbmFtZT0iYmFzZS1yZWNpcGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj0iMS4yIiwgc3VtbWFyeT0ib25lIHJlY2lwZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0icmVjaXBlIiwgbGF5ZXJfdmVyc2lvbj1sdmVyKQorCisgICAgICAgIE1hY2hpbmUub2JqZWN0cy5jcmVhdGUobGF5ZXJfdmVyc2lvbj1sdmVyLCBuYW1lPSJ3aXNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0id2lza2luZyBtYWNoaW5lIikKKworICAgICAgICBQcm9qZWN0TGF5ZXIub2JqZWN0cy5jcmVhdGUocHJvamVjdD1zZWxmLnByb2plY3QsIGxheWVyY29tbWl0PWx2ZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGx2ZXIgaW4gc2VsZi5wcm9qZWN0LmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucygpKQorCisgICAgZGVmIHRlc3RfZ2V0X2Jhc2VfY2FsbF9yZXR1cm5zX2h0bWwoc2VsZik6CisgICAgICAgICIiIkJhc2ljIHRlc3QgZm9yIGFsbC1wcm9qZWN0cyB2aWV3IiIiCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0KHJldmVyc2UoJ2FsbC1wcm9qZWN0cycpLCBmb2xsb3c9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcG9uc2VbJ0NvbnRlbnQtVHlwZSddLnN0YXJ0c3dpdGgoJ3RleHQvaHRtbCcpKQorICAgICAgICBzZWxmLmFzc2VydFRlbXBsYXRlVXNlZChyZXNwb25zZSwgInByb2plY3RzLmh0bWwiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUFJPSkVDVF9OQU1FIGluIHJlc3BvbnNlLmNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9nZXRfanNvbl9jYWxsX3JldHVybnNfanNvbihzZWxmKToKKyAgICAgICAgIiIiVGVzdCBmb3IgYWxsIHByb2plY3RzIG91dHB1dCBpbiBqc29uIGZvcm1hdCIiIgorICAgICAgICB1cmwgPSByZXZlcnNlKCdhbGwtcHJvamVjdHMnKQorICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldCh1cmwsIHsiZm9ybWF0IjogImpzb24ifSwgZm9sbG93PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3BvbnNlWydDb250ZW50LVR5cGUnXS5zdGFydHN3aXRoKCdhcHBsaWNhdGlvbi9qc29uJykpCisKKyAgICAgICAgZGF0YSA9IGpzb24ubG9hZHMocmVzcG9uc2UuY29udGVudCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoImVycm9yIiBpbiBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGFbImVycm9yIl0sICJvayIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgicm93cyIgaW4gZGF0YSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoUFJPSkVDVF9OQU1FIGluIFt4WyJuYW1lIl0gZm9yIHggaW4gZGF0YVsicm93cyJdXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJpZCIgaW4gZGF0YVsicm93cyJdWzBdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGRhdGFbInJvd3MiXVswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydiaXRiYWtlX3ZlcnNpb25faWQnLCAnY3JlYXRlZCcsICdpZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19kZWZhdWx0JywgJ2xheWVyc1R5cGVBaGVhZFVybCcsICduYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ251bV9idWlsZHMnLCAncHJvamVjdEJ1aWxkc1VybCcsICdwcm9qZWN0UGFnZVVybCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWNpcGVzVHlwZUFoZWFkVXJsJywgJ3JlbGVhc2VfaWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nLCAndXBkYXRlZCcsICd1c2VyX2lkJ10pCisKKyAgICBkZWYgdGVzdF90eXBlYWhlYWRzKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHR5cGVhaGVhZCBSZVNUIEFQSSIiIgorICAgICAgICBsYXllcnNfdXJsID0gcmV2ZXJzZSgneGhyX2xheWVyc3R5cGVhaGVhZCcsIGFyZ3M9KHNlbGYucHJvamVjdC5pZCwpKQorICAgICAgICBwcmpfdXJsID0gcmV2ZXJzZSgneGhyX3Byb2plY3RzdHlwZWFoZWFkJykKKworICAgICAgICB1cmxzID0gW2xheWVyc191cmwsCisgICAgICAgICAgICAgICAgcHJqX3VybCwKKyAgICAgICAgICAgICAgICByZXZlcnNlKCd4aHJfcmVjaXBlc3R5cGVhaGVhZCcsIGFyZ3M9KHNlbGYucHJvamVjdC5pZCwpKSwKKyAgICAgICAgICAgICAgICByZXZlcnNlKCd4aHJfbWFjaGluZXN0eXBlYWhlYWQnLCBhcmdzPShzZWxmLnByb2plY3QuaWQsKSksCisgICAgICAgICAgICAgICBdCisKKyAgICAgICAgZGVmIGJhc2ljX3JlcG9uc2VfY2hlY2socmVzcG9uc2UsIHVybCk6CisgICAgICAgICAgICAiIiJDaGVjayBkYXRhIHN0cnVjdHVyZSBvZiBodHRwIHJlc3BvbnNlLiIiIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3BvbnNlWydDb250ZW50LVR5cGUnXS5zdGFydHN3aXRoKCdhcHBsaWNhdGlvbi9qc29uJykpCisKKyAgICAgICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiZXJyb3IiIGluIGRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGFbImVycm9yIl0sICJvayIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoInJlc3VsdHMiIGluIGRhdGEpCisKKyAgICAgICAgICAgICMgV2UgZ290IGEgcmVzdWx0IHNvIG5vdyBjaGVjayB0aGUgZmllbGRzCisgICAgICAgICAgICBpZiBsZW4oZGF0YVsncmVzdWx0cyddKSA+IDA6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGF0YVsncmVzdWx0cyddWzBdCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHJlc3VsdFsnbmFtZSddKSA+IDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJkZXRhaWwiIGluIHJlc3VsdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0WydpZCddID4gMCkKKworICAgICAgICAgICAgICAgICMgU3BlY2lhbCBjaGVjayBmb3IgdGhlIGxheWVycyB0eXBlYWhlYWQncyBleHRyYSBmaWVsZHMKKyAgICAgICAgICAgICAgICBpZiB1cmwgPT0gbGF5ZXJzX3VybDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihyZXN1bHRbJ2xheWVyZGV0YWlsdXJsJ10pID4gMCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihyZXN1bHRbJ3Zjc191cmwnXSkgPiAwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHJlc3VsdFsndmNzX3JlZmVyZW5jZSddKSA+IDApCisgICAgICAgICAgICAgICAgIyBTcGVjaWFsIGNoZWNrIGZvciBwcm9qZWN0IHR5cGVhaGVhZCBleHRyYSBmaWVsZHMKKyAgICAgICAgICAgICAgICBlbGlmIHVybCA9PSBwcmpfdXJsOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHJlc3VsdFsncHJvamVjdFBhZ2VVcmwnXSkgPiAwKQorCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaW1wb3J0IHN0cmluZworCisgICAgICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgICAgIHJlc3VsdHMgPSBGYWxzZQorCisgICAgICAgICAgICBmb3IgdHlwZWluZyBpbiBsaXN0KHN0cmluZy5hc2NpaV9sZXR0ZXJzKToKKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldCh1cmwsIHsnc2VhcmNoJzogdHlwZWluZ30pCisgICAgICAgICAgICAgICAgcmVzdWx0cyA9IGJhc2ljX3JlcG9uc2VfY2hlY2socmVzcG9uc2UsIHVybCkKKyAgICAgICAgICAgICAgICBpZiByZXN1bHRzOgorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAjIEFmdGVyICJ0eXBlaW5nIiB0aGUgYWxwYWJldCB3ZSBzaG91bGQgaGF2ZSByZXN1bHQgdHJ1ZQorICAgICAgICAgICAgIyBmcm9tIGVhY2ggb2YgdGhlIHVybHMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHRzKQorCisgICAgZGVmIHRlc3RfeGhyX2ltcG9ydF9sYXllcihzZWxmKToKKyAgICAgICAgIiIiVGVzdCB4aHJfaW1wb3J0bGF5ZXIgQVBJIiIiCisgICAgICAgICNUZXN0IGZvciBpbXBvcnRpbmcgYW4gYWxyZWFkeSBleGlzdGluZyBsYXllcgorICAgICAgICBhcmdzID0geyd2Y3NfdXJsJyA6ICJnaXQ6Ly9naXQuZXhhbXBsZS5jb20vdGVzdCIsCisgICAgICAgICAgICAgICAgJ25hbWUnIDogImJhc2UtbGF5ZXIiLAorICAgICAgICAgICAgICAgICdnaXRfcmVmJzogImMxMmI5NTk2YWZkMjM2MTE2YjI1Y2UyNmRiZTBkNzkzZGU5ZGM3Y2UiLAorICAgICAgICAgICAgICAgICdwcm9qZWN0X2lkJzogMSwgJ2Rpcl9wYXRoJyA6ICIvcGF0aC9pbi9yZXBvc2l0b3J5In0KKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5wb3N0KHJldmVyc2UoJ3hocl9pbXBvcnRsYXllcicpLCBhcmdzKQorICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZGF0YVsiZXJyb3IiXSwgIm9rIikKKworICAgICAgICAjVGVzdCB0byB2ZXJpZnkgaW1wb3J0IG9mIGEgbGF5ZXIgc3VjY2Vzc2Z1bAorICAgICAgICBhcmdzWyduYW1lJ10gPSAibWV0YS1vZSIKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5wb3N0KHJldmVyc2UoJ3hocl9pbXBvcnRsYXllcicpLCBhcmdzKQorICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YVsiZXJyb3IiXSwgIm9rIikKKworICAgICAgICAjVGVzdCBmb3IgaHRtbCB0YWcgaW4gdGhlIGRhdGEKKyAgICAgICAgYXJnc1snPCddID0gInRlc3RpbmcgaHRtbCB0YWciCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQucG9zdChyZXZlcnNlKCd4aHJfaW1wb3J0bGF5ZXInKSwgYXJncykKKyAgICAgICAgZGF0YSA9IGpzb24ubG9hZHMocmVzcG9uc2UuY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYXRhWyJlcnJvciJdLCAib2siKQorCisgICAgICAgICNFbXB0eSBkYXRhIHBhc3NlZAorICAgICAgICBhcmdzID0ge30KKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5wb3N0KHJldmVyc2UoJ3hocl9pbXBvcnRsYXllcicpLCBhcmdzKQorICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGRhdGFbImVycm9yIl0sICJvayIpCisKK2NsYXNzIExhbmRpbmdQYWdlVGVzdHMoVGVzdENhc2UpOgorICAgICIiIiBUZXN0cyBmb3IgcmVkaXJlY3RzIG9uIHRoZSBsYW5kaW5nIHBhZ2UgIiIiCisgICAgIyBkaXNhYmxlIGJvZ3VzIHB5bGludCBtZXNzYWdlIGVycm9yOgorICAgICMgIkluc3RhbmNlIG9mICdXU0dJUmVxdWVzdCcgaGFzIG5vICd1cmwnIG1lbWJlciAobm8tbWVtYmVyKSIKKyAgICAjIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2xhbmRzY2FwZWlvL3B5bGludC1kamFuZ28vaXNzdWVzLzQyKQorICAgICMgcHlsaW50OiBkaXNhYmxlPUUxMTAzCisKKyAgICBMQU5ESU5HX1BBR0VfVElUTEUgPSAnVGhpcyBpcyBUb2FzdGVyJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiIiIgQWRkIGRlZmF1bHQgcHJvamVjdCBtYW51YWxseSAiIiIKKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmNyZWF0ZV9wcm9qZWN0KCdmb28nLCBOb25lKQorICAgICAgICBzZWxmLnByb2plY3QuaXNfZGVmYXVsdCA9IFRydWUKKyAgICAgICAgc2VsZi5wcm9qZWN0LnNhdmUoKQorCisgICAgZGVmIHRlc3Rfb25seV9kZWZhdWx0X3Byb2plY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBObyBwcm9qZWN0cyBleGNlcHQgZGVmYXVsdAorICAgICAgICA9PiBnZXQgdGhlIGxhbmRpbmcgcGFnZQorICAgICAgICAiIiIKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXQocmV2ZXJzZSgnbGFuZGluZycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5MQU5ESU5HX1BBR0VfVElUTEUgaW4gcmVzcG9uc2UuY29udGVudCkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfcHJvamVjdF9oYXNfYnVpbGQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBEZWZhdWx0IHByb2plY3QgaGFzIGEgYnVpbGQsIG5vIG90aGVyIHByb2plY3RzCisgICAgICAgID0+IGdldCB0aGUgYnVpbGRzIHBhZ2UKKyAgICAgICAgIiIiCisgICAgICAgIG5vdyA9IHRpbWV6b25lLm5vdygpCisgICAgICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5jcmVhdGUocHJvamVjdD1zZWxmLnByb2plY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbj1ub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uPW5vdykKKyAgICAgICAgYnVpbGQuc2F2ZSgpCisKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXQocmV2ZXJzZSgnbGFuZGluZycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAzMDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3BvbnNlIHNob3VsZCBiZSBhIHJlZGlyZWN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcvYnVpbGRzJyBpbiByZXNwb25zZS51cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2hvdWxkIHJlZGlyZWN0IHRvIGJ1aWxkcycpCisKKyAgICBkZWYgdGVzdF91c2VyX3Byb2plY3RfZXhpc3RzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVXNlciBoYXMgYWRkZWQgYSBwcm9qZWN0ICh3aXRob3V0IGJ1aWxkcykKKyAgICAgICAgPT4gZ2V0IHRoZSBwcm9qZWN0cyBwYWdlCisgICAgICAgICIiIgorICAgICAgICB1c2VyX3Byb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuY3JlYXRlX3Byb2plY3QoJ2ZvbycsIE5vbmUpCisgICAgICAgIHVzZXJfcHJvamVjdC5zYXZlKCkKKworICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldChyZXZlcnNlKCdsYW5kaW5nJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDMwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAncmVzcG9uc2Ugc2hvdWxkIGJlIGEgcmVkaXJlY3QnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJy9wcm9qZWN0cycgaW4gcmVzcG9uc2UudXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3VsZCByZWRpcmVjdCB0byBwcm9qZWN0cycpCisKKyAgICBkZWYgdGVzdF91c2VyX3Byb2plY3RfaGFzX2J1aWxkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVXNlciBoYXMgYWRkZWQgYSBwcm9qZWN0ICh3aXRoIGJ1aWxkcykKKyAgICAgICAgPT4gZ2V0IHRoZSBidWlsZHMgcGFnZQorICAgICAgICAiIiIKKyAgICAgICAgdXNlcl9wcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmNyZWF0ZV9wcm9qZWN0KCdmb28nLCBOb25lKQorICAgICAgICB1c2VyX3Byb2plY3Quc2F2ZSgpCisKKyAgICAgICAgbm93ID0gdGltZXpvbmUubm93KCkKKyAgICAgICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZShwcm9qZWN0PXVzZXJfcHJvamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVkX29uPW5vdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRfb249bm93KQorICAgICAgICBidWlsZC5zYXZlKCkKKworICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldChyZXZlcnNlKCdsYW5kaW5nJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDMwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAncmVzcG9uc2Ugc2hvdWxkIGJlIGEgcmVkaXJlY3QnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJy9idWlsZHMnIGluIHJlc3BvbnNlLnVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICdzaG91bGQgcmVkaXJlY3QgdG8gYnVpbGRzJykKKworY2xhc3MgUHJvamVjdHNQYWdlVGVzdHMoVGVzdENhc2UpOgorICAgICIiIiBUZXN0cyBmb3IgcHJvamVjdHMgcGFnZSAiIiIKKworICAgIFBST0pFQ1RfTkFNRSA9ICdjbGkgYnVpbGRzJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiIiIgQWRkIGRlZmF1bHQgcHJvamVjdCBtYW51YWxseSAiIiIKKyAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5jcmVhdGVfcHJvamVjdChzZWxmLlBST0pFQ1RfTkFNRSwgTm9uZSkKKyAgICAgICAgc2VsZi5kZWZhdWx0X3Byb2plY3QgPSBwcm9qZWN0CisgICAgICAgIHNlbGYuZGVmYXVsdF9wcm9qZWN0LmlzX2RlZmF1bHQgPSBUcnVlCisgICAgICAgIHNlbGYuZGVmYXVsdF9wcm9qZWN0LnNhdmUoKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9wcm9qZWN0X2hpZGRlbihzZWxmKToKKyAgICAgICAgIiIiIFRoZSBkZWZhdWx0IHByb2plY3Qgc2hvdWxkIGJlIGhpZGRlbiBpZiBpdCBoYXMgbm8gYnVpbGRzICIiIgorICAgICAgICBwYXJhbXMgPSB7ImNvdW50IjogMTAsICJvcmRlcmJ5IjogInVwZGF0ZWQ6LSIsICJwYWdlIjogMX0KKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXQocmV2ZXJzZSgnYWxsLXByb2plY3RzJyksIHBhcmFtcykKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobm90KCd0ciBjbGFzcz0iZGF0YSInIGluIHJlc3BvbnNlLmNvbnRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3VsZCBiZSBubyBwcm9qZWN0IHJvd3MgaW4gdGhlIHBhZ2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90KHNlbGYuUFJPSkVDVF9OQU1FIGluIHJlc3BvbnNlLmNvbnRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmF1bHQgcHJvamVjdCAiY2xpIGJ1aWxkcyIgc2hvdWxkIG5vdCBiZSBpbiBwYWdlJykKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfcHJvamVjdF9oYXNfYnVpbGQoc2VsZik6CisgICAgICAgICIiIiBUaGUgZGVmYXVsdCBwcm9qZWN0IHNob3VsZCBiZSBzaG93biBpZiBpdCBoYXMgYnVpbGRzICIiIgorICAgICAgICBub3cgPSB0aW1lem9uZS5ub3coKQorICAgICAgICBidWlsZCA9IEJ1aWxkLm9iamVjdHMuY3JlYXRlKHByb2plY3Q9c2VsZi5kZWZhdWx0X3Byb2plY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbj1ub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uPW5vdykKKyAgICAgICAgYnVpbGQuc2F2ZSgpCisKKyAgICAgICAgcGFyYW1zID0geyJjb3VudCI6IDEwLCAib3JkZXJieSI6ICJ1cGRhdGVkOi0iLCAicGFnZSI6IDF9CisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0KHJldmVyc2UoJ2FsbC1wcm9qZWN0cycpLCBwYXJhbXMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd0ciBjbGFzcz0iZGF0YSInIGluIHJlc3BvbnNlLmNvbnRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2hvdWxkIGJlIGEgcHJvamVjdCByb3cgaW4gdGhlIHBhZ2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5QUk9KRUNUX05BTUUgaW4gcmVzcG9uc2UuY29udGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICdkZWZhdWx0IHByb2plY3QgImNsaSBidWlsZHMiIHNob3VsZCBiZSBpbiBwYWdlJykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3R5cGVhaGVhZHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90eXBlYWhlYWRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YmVjNTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90eXBlYWhlYWRzLnB5CkBAIC0wLDAgKzEsMTQ1IEBACisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIHRvYXN0ZXJndWkud2lkZ2V0cyBpbXBvcnQgVG9hc3RlclR5cGVBaGVhZAorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBQcm9qZWN0Citmcm9tIGRqYW5nby5jb3JlLnVybHJlc29sdmVycyBpbXBvcnQgcmV2ZXJzZQorCitjbGFzcyBMYXllcnNUeXBlQWhlYWQoVG9hc3RlclR5cGVBaGVhZCk6CisgICAgIiIiIFR5cGVhaGVhZCBmb3IgbGF5ZXJzIGF2YWlsYWJsZSBhbmQgbm90IGFkZGVkIGluIHRoZSBjdXJyZW50IHByb2plY3QncworICAgIGNvbmZpZ3VyYXRpb24gIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgc3VwZXIoTGF5ZXJzVHlwZUFoZWFkLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICBkZWYgYXBwbHlfc2VhcmNoKHNlbGYsIHNlYXJjaF90ZXJtLCBwcmosIHJlcXVlc3QpOgorICAgICAgICBsYXllcnMgPSBwcmouY29tcGF0aWJsZV9sYXllcnZlcnNpb25zKCkKKyAgICAgICAgbGF5ZXJzID0gbGF5ZXJzLm9yZGVyX2J5KCdsYXllcl9fbmFtZScpCisKKyAgICAgICAgIyBVbmxpa2UgdGhlIG90aGVyIHR5cGVhaGVhZHMgd2UgYWxzbyBkb24ndCB3YW50IHRvIHNob3cgc3VnZ2VzdGlvbnMKKyAgICAgICAgIyBmb3IgbGF5ZXJzIGFscmVhZHkgaW4gdGhlIHByb2plY3QgdW5sZXNzIHJlcXVpcmVkIHN1Y2ggYXMgd2hlbiBhZGRpbmcKKyAgICAgICAgIyBsYXllcmRlcHMgdG8gYSBuZXcgbGF5ZXIuCisgICAgICAgIGlmICgiaW5jbHVkZV9hZGRlZCIgaW4gcmVxdWVzdC5HRVQgYW5kCisgICAgICAgICAgICAgICAgcmVxdWVzdC5HRVRbJ2luY2x1ZGVfYWRkZWQnXSAhPSAidHJ1ZSIpOgorICAgICAgICAgICAgbGF5ZXJzID0gbGF5ZXJzLmV4Y2x1ZGUocGtfX2luPXByai5wcm9qZWN0bGF5ZXJfZXF1aXZhbGVudF9zZXQpCisKKyAgICAgICAgcHJpbWFyeV9yZXN1bHRzID0gbGF5ZXJzLmZpbHRlcihsYXllcl9fbmFtZV9faXN0YXJ0c3dpdGg9c2VhcmNoX3Rlcm0pCisgICAgICAgIHNlY29uZGFyeV9yZXN1bHRzID0gbGF5ZXJzLmZpbHRlcihsYXllcl9fbmFtZV9faWNvbnRhaW5zPXNlYXJjaF90ZXJtKS5leGNsdWRlKHBrX19pbj1wcmltYXJ5X3Jlc3VsdHMpCisKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZm9yIGxheWVyX3ZlcnNpb24gaW4gbGlzdChwcmltYXJ5X3Jlc3VsdHMpICsgbGlzdChzZWNvbmRhcnlfcmVzdWx0cyk6CisgICAgICAgICAgICB2Y3NfcmVmZXJlbmNlID0gbGF5ZXJfdmVyc2lvbi5nZXRfdmNzX3JlZmVyZW5jZSgpCisKKyAgICAgICAgICAgIGRldGFpbCA9ICJbICVzIHwgJXMgXSIgJSAobGF5ZXJfdmVyc2lvbi5sYXllci52Y3NfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y3NfcmVmZXJlbmNlKQorICAgICAgICAgICAgbmVlZGVkX2ZpZWxkcyA9IHsKKyAgICAgICAgICAgICAgICAnaWQnIDogbGF5ZXJfdmVyc2lvbi5waywKKyAgICAgICAgICAgICAgICAnbmFtZScgOiBsYXllcl92ZXJzaW9uLmxheWVyLm5hbWUsCisgICAgICAgICAgICAgICAgJ2xheWVyZGV0YWlsdXJsJyA6IGxheWVyX3ZlcnNpb24uZ2V0X2RldGFpbHNwYWdlX3VybChwcmoucGspLAorICAgICAgICAgICAgICAgICd2Y3NfdXJsJyA6IGxheWVyX3ZlcnNpb24ubGF5ZXIudmNzX3VybCwKKyAgICAgICAgICAgICAgICAndmNzX3JlZmVyZW5jZScgOiB2Y3NfcmVmZXJlbmNlLAorICAgICAgICAgICAgICAgICdkZXRhaWwnIDogZGV0YWlsLAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChuZWVkZWRfZmllbGRzKQorCisgICAgICAgIHJldHVybiByZXN1bHRzCisKK2NsYXNzIE1hY2hpbmVzVHlwZUFoZWFkKFRvYXN0ZXJUeXBlQWhlYWQpOgorICAgICIiIiBUeXBlYWhlYWQgZm9yIGFsbCB0aGUgbWFjaGluZXMgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IHByb2plY3QncworICAgIGNvbmZpZ3VyYXRpb24gIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcihNYWNoaW5lc1R5cGVBaGVhZCwgc2VsZikuX19pbml0X18oKQorCisgICAgZGVmIGFwcGx5X3NlYXJjaChzZWxmLCBzZWFyY2hfdGVybSwgcHJqLCByZXF1ZXN0KToKKyAgICAgICAgbWFjaGluZXMgPSBwcmouZ2V0X2F2YWlsYWJsZV9tYWNoaW5lcygpCisgICAgICAgIG1hY2hpbmVzID0gbWFjaGluZXMub3JkZXJfYnkoIm5hbWUiKQorCisgICAgICAgIHByaW1hcnlfcmVzdWx0cyA9IG1hY2hpbmVzLmZpbHRlcihuYW1lX19pc3RhcnRzd2l0aD1zZWFyY2hfdGVybSkKKyAgICAgICAgc2Vjb25kYXJ5X3Jlc3VsdHMgPSBtYWNoaW5lcy5maWx0ZXIobmFtZV9faWNvbnRhaW5zPXNlYXJjaF90ZXJtKS5leGNsdWRlKHBrX19pbj1wcmltYXJ5X3Jlc3VsdHMpCisgICAgICAgIHRlcnRpYXJ5X3Jlc3VsdHMgPSBtYWNoaW5lcy5maWx0ZXIobGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWVfX2ljb250YWlucz1zZWFyY2hfdGVybSkuZXhjbHVkZShwa19faW49cHJpbWFyeV9yZXN1bHRzKS5leGNsdWRlKHBrX19pbj1zZWNvbmRhcnlfcmVzdWx0cykKKworICAgICAgICByZXN1bHRzID0gW10KKworICAgICAgICBmb3IgbWFjaGluZSBpbiBsaXN0KHByaW1hcnlfcmVzdWx0cykgKyBsaXN0KHNlY29uZGFyeV9yZXN1bHRzKSArIGxpc3QodGVydGlhcnlfcmVzdWx0cyk6CisKKyAgICAgICAgICAgIGRldGFpbCA9ICJbICVzIF0iICUgKG1hY2hpbmUubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lKQorICAgICAgICAgICAgbmVlZGVkX2ZpZWxkcyA9IHsKKyAgICAgICAgICAgICAgICAnaWQnIDogbWFjaGluZS5waywKKyAgICAgICAgICAgICAgICAnbmFtZScgOiBtYWNoaW5lLm5hbWUsCisgICAgICAgICAgICAgICAgJ2RldGFpbCcgOiBkZXRhaWwsCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG5lZWRlZF9maWVsZHMpCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworY2xhc3MgUmVjaXBlc1R5cGVBaGVhZChUb2FzdGVyVHlwZUFoZWFkKToKKyAgICAiIiIgVHlwZWFoZWFkIGZvciBhbGwgdGhlIHJlY2lwZXMgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IHByb2plY3QncworICAgIGNvbmZpZ3VyYXRpb24gIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcihSZWNpcGVzVHlwZUFoZWFkLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICBkZWYgYXBwbHlfc2VhcmNoKHNlbGYsIHNlYXJjaF90ZXJtLCBwcmosIHJlcXVlc3QpOgorICAgICAgICByZWNpcGVzID0gcHJqLmdldF9hdmFpbGFibGVfcmVjaXBlcygpCisgICAgICAgIHJlY2lwZXMgPSByZWNpcGVzLm9yZGVyX2J5KCJuYW1lIikKKworCisgICAgICAgIHByaW1hcnlfcmVzdWx0cyA9IHJlY2lwZXMuZmlsdGVyKG5hbWVfX2lzdGFydHN3aXRoPXNlYXJjaF90ZXJtKQorICAgICAgICBzZWNvbmRhcnlfcmVzdWx0cyA9IHJlY2lwZXMuZmlsdGVyKG5hbWVfX2ljb250YWlucz1zZWFyY2hfdGVybSkuZXhjbHVkZShwa19faW49cHJpbWFyeV9yZXN1bHRzKQorICAgICAgICB0ZXJ0aWFyeV9yZXN1bHRzID0gcmVjaXBlcy5maWx0ZXIobGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWVfX2ljb250YWlucz1zZWFyY2hfdGVybSkuZXhjbHVkZShwa19faW49cHJpbWFyeV9yZXN1bHRzKS5leGNsdWRlKHBrX19pbj1zZWNvbmRhcnlfcmVzdWx0cykKKworICAgICAgICByZXN1bHRzID0gW10KKworICAgICAgICBmb3IgcmVjaXBlIGluIGxpc3QocHJpbWFyeV9yZXN1bHRzKSArIGxpc3Qoc2Vjb25kYXJ5X3Jlc3VsdHMpICsgbGlzdCh0ZXJ0aWFyeV9yZXN1bHRzKToKKworICAgICAgICAgICAgZGV0YWlsID0gIlsgJXMgXSIgJSAocmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZSkKKyAgICAgICAgICAgIG5lZWRlZF9maWVsZHMgPSB7CisgICAgICAgICAgICAgICAgJ2lkJyA6IHJlY2lwZS5waywKKyAgICAgICAgICAgICAgICAnbmFtZScgOiByZWNpcGUubmFtZSwKKyAgICAgICAgICAgICAgICAnZGV0YWlsJyA6IGRldGFpbCwKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobmVlZGVkX2ZpZWxkcykKKworICAgICAgICByZXR1cm4gcmVzdWx0cworCitjbGFzcyBQcm9qZWN0c1R5cGVBaGVhZChUb2FzdGVyVHlwZUFoZWFkKToKKyAgICAiIiIgVHlwZWFoZWFkIGZvciBhbGwgdGhlIHByb2plY3RzICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoUHJvamVjdHNUeXBlQWhlYWQsIHNlbGYpLl9faW5pdF9fKCkKKworICAgIGRlZiBhcHBseV9zZWFyY2goc2VsZiwgc2VhcmNoX3Rlcm0sIHByaiwgcmVxdWVzdCk6CisgICAgICAgIHByb2plY3RzID0gUHJvamVjdC5vYmplY3RzLmFsbCgpLm9yZGVyX2J5KCJuYW1lIikKKworICAgICAgICBwcmltYXJ5X3Jlc3VsdHMgPSBwcm9qZWN0cy5maWx0ZXIobmFtZV9faXN0YXJ0c3dpdGg9c2VhcmNoX3Rlcm0pCisgICAgICAgIHNlY29uZGFyeV9yZXN1bHRzID0gcHJvamVjdHMuZmlsdGVyKG5hbWVfX2ljb250YWlucz1zZWFyY2hfdGVybSkuZXhjbHVkZShwa19faW49cHJpbWFyeV9yZXN1bHRzKQorCisgICAgICAgIHJlc3VsdHMgPSBbXQorCisgICAgICAgIGZvciBwcm9qZWN0IGluIGxpc3QocHJpbWFyeV9yZXN1bHRzKSArIGxpc3Qoc2Vjb25kYXJ5X3Jlc3VsdHMpOgorICAgICAgICAgICAgbmVlZGVkX2ZpZWxkcyA9IHsKKyAgICAgICAgICAgICAgICAnaWQnIDogcHJvamVjdC5waywKKyAgICAgICAgICAgICAgICAnbmFtZScgOiBwcm9qZWN0Lm5hbWUsCisgICAgICAgICAgICAgICAgJ2RldGFpbCcgOiAiIiwKKyAgICAgICAgICAgICAgICAncHJvamVjdFBhZ2VVcmwnIDogcmV2ZXJzZSgncHJvamVjdCcsIGFyZ3M9KHByb2plY3QucGssKSkKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobmVlZGVkX2ZpZWxkcykKKworICAgICAgICByZXR1cm4gcmVzdWx0cwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdXJscy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3VybHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZlNTc2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3VybHMucHkKQEAgLTAsMCArMSwxNTMgQEAKKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gZGphbmdvLmNvbmYudXJscyBpbXBvcnQgcGF0dGVybnMsIGluY2x1ZGUsIHVybAorZnJvbSBkamFuZ28udmlld3MuZ2VuZXJpYyBpbXBvcnQgUmVkaXJlY3RWaWV3LCBUZW1wbGF0ZVZpZXcKKworZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlc3BvbnNlQmFkUmVxdWVzdAorZnJvbSB0b2FzdGVyZ3VpIGltcG9ydCB0YWJsZXMKK2Zyb20gdG9hc3Rlcmd1aSBpbXBvcnQgdHlwZWFoZWFkcworCit1cmxwYXR0ZXJucyA9IHBhdHRlcm5zKCd0b2FzdGVyZ3VpLnZpZXdzJywKKyAgICAgICAgIyBsYW5kaW5nIHBhZ2UKKyAgICAgICAgdXJsKHInXmxhbmRpbmcvJCcsICdsYW5kaW5nJywgbmFtZT0nbGFuZGluZycpLAorCisgICAgICAgIHVybChyJ15idWlsZHMvJCcsICdidWlsZHMnLCBuYW1lPSdhbGwtYnVpbGRzJyksCisgICAgICAgICMgYnVpbGQgaW5mbyBuYXZpZ2F0aW9uCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKSQnLCAnYnVpbGRkYXNoYm9hcmQnLCBuYW1lPSJidWlsZGRhc2hib2FyZCIpLAorCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXNrcy8kJywgJ3Rhc2tzJywgbmFtZT0ndGFza3MnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3Rhc2tzLyg/UDx0YXNrX2lkPlxkKykvJCcsICd0YXNrc190YXNrJywgbmFtZT0ndGFza3NfdGFzaycpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvdGFzay8oP1A8dGFza19pZD5cZCspJCcsICd0YXNrJywgbmFtZT0ndGFzaycpLAorCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9yZWNpcGVzLyQnLCAncmVjaXBlcycsIG5hbWU9J3JlY2lwZXMnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3JlY2lwZS8oP1A8cmVjaXBlX2lkPlxkKykvYWN0aXZlX3RhYi8oP1A8YWN0aXZlX3RhYj5cZHsxfSkkJywgJ3JlY2lwZScsIG5hbWU9J3JlY2lwZScpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcmVjaXBlLyg/UDxyZWNpcGVfaWQ+XGQrKSQnLCAncmVjaXBlJywgbmFtZT0ncmVjaXBlJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9yZWNpcGVfcGFja2FnZXMvKD9QPHJlY2lwZV9pZD5cZCspJCcsICdyZWNpcGVfcGFja2FnZXMnLCBuYW1lPSdyZWNpcGVfcGFja2FnZXMnKSwKKworICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcGFja2FnZXMvJCcsICdicGFja2FnZScsIG5hbWU9J3BhY2thZ2VzJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9wYWNrYWdlLyg/UDxwYWNrYWdlX2lkPlxkKykkJywgJ3BhY2thZ2VfYnVpbHRfZGV0YWlsJywKKyAgICAgICAgICAgICAgICBuYW1lPSdwYWNrYWdlX2J1aWx0X2RldGFpbCcpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMvKD9QPHBhY2thZ2VfaWQ+XGQrKSQnLAorICAgICAgICAgICAgJ3BhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzJywgbmFtZT0ncGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsLyg/UDx0YXJnZXRfaWQ+XGQrKS8oP1A8cGFja2FnZV9pZD5cZCspJCcsCisgICAgICAgICAgICAncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnLCBuYW1lPSdwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCcpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMvKD9QPHRhcmdldF9pZD5cZCspLyg/UDxwYWNrYWdlX2lkPlxkKykkJywKKyAgICAgICAgICAgICdwYWNrYWdlX2luY2x1ZGVkX2RlcGVuZGVuY2llcycsIG5hbWU9J3BhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9wYWNrYWdlX2luY2x1ZGVkX3JldmVyc2VfZGVwZW5kZW5jaWVzLyg/UDx0YXJnZXRfaWQ+XGQrKS8oP1A8cGFja2FnZV9pZD5cZCspJCcsCisgICAgICAgICAgICAncGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcycsIG5hbWU9J3BhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMnKSwKKworICAgICAgICAjIGltYWdlcyBhcmUga25vd24gYXMgdGFyZ2V0cyBpbiB0aGUgaW50ZXJuYWwgbW9kZWwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3RhcmdldC8oP1A8dGFyZ2V0X2lkPlxkKykkJywgJ3RhcmdldCcsIG5hbWU9J3RhcmdldCcpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvdGFyZ2V0Lyg/UDx0YXJnZXRfaWQ+XGQrKS90YXJnZXRwa2ckJywgJ3RhcmdldHBrZycsIG5hbWU9J3RhcmdldHBrZycpLAorICAgICAgICB1cmwocideZGVudHJpZXMvYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvdGFyZ2V0Lyg/UDx0YXJnZXRfaWQ+XGQrKSQnLCAneGhyX2RpcmluZm8nLCBuYW1lPSdkaXJpbmZvX2FqYXgnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3RhcmdldC8oP1A8dGFyZ2V0X2lkPlxkKykvZGlyaW5mbyQnLCAnZGlyaW5mbycsIG5hbWU9J2RpcmluZm8nKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3RhcmdldC8oP1A8dGFyZ2V0X2lkPlxkKykvZGlyaW5mb19maWxlcGF0aC9fKD9QPGZpbGVfcGF0aD4oPzovW14vXG5dKykqKSQnLCAnZGlyaW5mbycsIG5hbWU9J2RpcmluZm9fZmlsZXBhdGgnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL2NvbmZpZ3VyYXRpb24kJywgJ2NvbmZpZ3VyYXRpb24nLCBuYW1lPSdjb25maWd1cmF0aW9uJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9jb25maWd2YXJzJCcsICdjb25maWd2YXJzJywgbmFtZT0nY29uZmlndmFycycpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvYnVpbGR0aW1lJCcsICdidWlsZHRpbWUnLCBuYW1lPSdidWlsZHRpbWUnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL2NwdXVzYWdlJCcsICdjcHV1c2FnZScsIG5hbWU9J2NwdXVzYWdlJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9kaXNraW8kJywgJ2Rpc2tpbycsIG5hbWU9J2Rpc2tpbycpLAorCisgICAgICAgICMgaW1hZ2UgaW5mb3JtYXRpb24gZGlyCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXJnZXQvKD9QPHRhcmdldF9pZD5cZCspL3BhY2thZ2VmaWxlLyg/UDxwYWNrYWdlZmlsZV9pZD5cZCspJCcsCisgICAgICAgICAgICAgJ2ltYWdlX2luZm9ybWF0aW9uX2RpcicsIG5hbWU9J2ltYWdlX2luZm9ybWF0aW9uX2RpcicpLAorCisgICAgICAgICMgYnVpbGQgZG93bmxvYWQgYXJ0aWZhY3QKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL2FydGlmYWN0Lyg/UDxhcnRpZmFjdF90eXBlPlx3KykvaWQvKD9QPGFydGlmYWN0X2lkPlx3KyknLCAnYnVpbGRfYXJ0aWZhY3QnLCBuYW1lPSJidWlsZF9hcnRpZmFjdCIpLAorCisgICAgICAgICMgcHJvamVjdCBVUkxzCisgICAgICAgIHVybChyJ15uZXdwcm9qZWN0LyQnLCAnbmV3cHJvamVjdCcsIG5hbWU9J25ld3Byb2plY3QnKSwKKworCisgICAgICAgIHVybChyJ15wcm9qZWN0cy8kJywgJ3Byb2plY3RzJywgbmFtZT0nYWxsLXByb2plY3RzJyksCisKKyAgICAgICAgdXJsKHInXnByb2plY3QvKD9QPHBpZD5cZCspLyQnLCAncHJvamVjdCcsIG5hbWU9J3Byb2plY3QnKSwKKyAgICAgICAgdXJsKHInXnByb2plY3QvKD9QPHBpZD5cZCspL2NvbmZpZ3VyYXRpb24kJywgJ3Byb2plY3Rjb25mJywgbmFtZT0ncHJvamVjdGNvbmYnKSwKKyAgICAgICAgdXJsKHInXnByb2plY3QvKD9QPHBpZD5cZCspL2J1aWxkcy8kJywgJ3Byb2plY3RidWlsZHMnLCBuYW1lPSdwcm9qZWN0YnVpbGRzJyksCisKKyAgICAgICAgIyB0aGUgaW1wb3J0IGxheWVyIGlzIGEgcHJvamVjdC1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5OworICAgICAgICB1cmwocidecHJvamVjdC8oP1A8cGlkPlxkKykvaW1wb3J0bGF5ZXIkJywgJ2ltcG9ydGxheWVyJywgbmFtZT0naW1wb3J0bGF5ZXInKSwKKworICAgICAgICAjIHRoZSB0YWJsZSBwYWdlcyB0aGF0IGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gVG9hc3RlclRhYmxlIHdpZGdldAorICAgICAgICB1cmwocidecHJvamVjdC8oP1A8cGlkPlxkKykvbWFjaGluZXMvJCcsCisgICAgICAgICAgICB0YWJsZXMuTWFjaGluZXNUYWJsZS5hc192aWV3KHRlbXBsYXRlX25hbWU9ImdlbmVyaWMtdG9hc3RlcnRhYmxlLXBhZ2UuaHRtbCIpLAorICAgICAgICAgICAgeyAndGFibGVfbmFtZSc6IHRhYmxlcy5NYWNoaW5lc1RhYmxlLl9fbmFtZV9fLmxvd2VyKCksCisgICAgICAgICAgICAgICd0aXRsZScgOiAnQ29tcGF0aWJsZSBtYWNoaW5lcycgfSwKKyAgICAgICAgICAgIG5hbWU9InByb2plY3RtYWNoaW5lcyIpLAorCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9yZWNpcGVzLyQnLAorICAgICAgICAgICAgdGFibGVzLlJlY2lwZXNUYWJsZS5hc192aWV3KHRlbXBsYXRlX25hbWU9ImdlbmVyaWMtdG9hc3RlcnRhYmxlLXBhZ2UuaHRtbCIpLAorICAgICAgICAgICAgeyAndGFibGVfbmFtZSc6IHRhYmxlcy5SZWNpcGVzVGFibGUuX19uYW1lX18ubG93ZXIoKSwKKyAgICAgICAgICAgICAgJ3RpdGxlJyA6ICdDb21wYXRpYmxlIHJlY2lwZXMnIH0sCisgICAgICAgICAgICBuYW1lPSJwcm9qZWN0dGFyZ2V0cyIpLAorCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9hdmFpbGFibGVyZWNpcGVzLyQnLAorICAgICAgICAgICAgdGFibGVzLlByb2plY3RMYXllcnNSZWNpcGVzVGFibGUuYXNfdmlldyh0ZW1wbGF0ZV9uYW1lPSJnZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwiKSwKKyAgICAgICAgICAgIHsgJ3RhYmxlX25hbWUnOiB0YWJsZXMuUHJvamVjdExheWVyc1JlY2lwZXNUYWJsZS5fX25hbWVfXy5sb3dlcigpLAorICAgICAgICAgICAgICAndGl0bGUnIDogJ1JlY2lwZXMgYXZhaWxhYmxlIGZvciBsYXllcnMgaW4gdGhlIGN1cnJlbnQgcHJvamVjdCcgfSwKKyAgICAgICAgICAgIG5hbWU9InByb2plY3RhdmFpbGFibGV0YXJnZXRzIiksCisKKyAgICAgICAgdXJsKHInXnByb2plY3QvKD9QPHBpZD5cZCspL2xheWVycy8kJywKKyAgICAgICAgICAgIHRhYmxlcy5MYXllcnNUYWJsZS5hc192aWV3KHRlbXBsYXRlX25hbWU9ImdlbmVyaWMtdG9hc3RlcnRhYmxlLXBhZ2UuaHRtbCIpLAorICAgICAgICAgICAgeyAndGFibGVfbmFtZSc6IHRhYmxlcy5MYXllcnNUYWJsZS5fX25hbWVfXy5sb3dlcigpLAorICAgICAgICAgICAgICAndGl0bGUnIDogJ0NvbXBhdGlibGUgbGF5ZXJzJyB9LAorICAgICAgICAgICAgbmFtZT0icHJvamVjdGxheWVycyIpLAorCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9sYXllci8oP1A8bGF5ZXJpZD5cZCspJCcsCisgICAgICAgICAgICAnbGF5ZXJkZXRhaWxzJywgbmFtZT0nbGF5ZXJkZXRhaWxzJyksCisKKyAgICAgICAgdXJsKHInXnByb2plY3QvKD9QPHBpZD5cZCspL2xheWVyLyg/UDxsYXllcmlkPlxkKykvcmVjaXBlcy8kJywKKyAgICAgICAgICAgIHRhYmxlcy5MYXllclJlY2lwZXNUYWJsZS5hc192aWV3KHRlbXBsYXRlX25hbWU9ImdlbmVyaWMtdG9hc3RlcnRhYmxlLXBhZ2UuaHRtbCIpLAorICAgICAgICAgICAgeyAndGFibGVfbmFtZSc6IHRhYmxlcy5MYXllclJlY2lwZXNUYWJsZS5fX25hbWVfXy5sb3dlcigpLAorICAgICAgICAgICAgICAndGl0bGUnIDogJ0FsbCByZWNpcGVzIGluIGxheWVyJyB9LAorICAgICAgICAgICAgIG5hbWU9dGFibGVzLkxheWVyUmVjaXBlc1RhYmxlLl9fbmFtZV9fLmxvd2VyKCkpLAorCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9sYXllci8oP1A8bGF5ZXJpZD5cZCspL21hY2hpbmVzLyQnLAorICAgICAgICAgICAgdGFibGVzLkxheWVyTWFjaGluZXNUYWJsZS5hc192aWV3KHRlbXBsYXRlX25hbWU9ImdlbmVyaWMtdG9hc3RlcnRhYmxlLXBhZ2UuaHRtbCIpLAorICAgICAgICAgICAgeyAndGFibGVfbmFtZSc6IHRhYmxlcy5MYXllck1hY2hpbmVzVGFibGUuX19uYW1lX18ubG93ZXIoKSwKKyAgICAgICAgICAgICAgJ3RpdGxlJyA6ICdBbGwgbWFjaGluZXMgaW4gbGF5ZXInIH0sCisgICAgICAgICAgICBuYW1lPXRhYmxlcy5MYXllck1hY2hpbmVzVGFibGUuX19uYW1lX18ubG93ZXIoKSksCisKKworICAgICAgICAjIHR5cGVhaGVhZCBhcGkgZW5kIHBvaW50cworICAgICAgICB1cmwocideeGhyX3R5cGVhaGVhZC8oP1A8cGlkPlxkKykvbGF5ZXJzJCcsCisgICAgICAgICAgICB0eXBlYWhlYWRzLkxheWVyc1R5cGVBaGVhZC5hc192aWV3KCksIG5hbWU9J3hocl9sYXllcnN0eXBlYWhlYWQnKSwKKyAgICAgICAgdXJsKHInXnhocl90eXBlYWhlYWQvKD9QPHBpZD5cZCspL21hY2hpbmVzJCcsCisgICAgICAgICAgICB0eXBlYWhlYWRzLk1hY2hpbmVzVHlwZUFoZWFkLmFzX3ZpZXcoKSwgbmFtZT0neGhyX21hY2hpbmVzdHlwZWFoZWFkJyksCisgICAgICAgIHVybChyJ154aHJfdHlwZWFoZWFkLyg/UDxwaWQ+XGQrKS9yZWNpcGVzJCcsCisgICAgICAgICAgICB0eXBlYWhlYWRzLlJlY2lwZXNUeXBlQWhlYWQuYXNfdmlldygpLCBuYW1lPSd4aHJfcmVjaXBlc3R5cGVhaGVhZCcpLAorICAgICAgICB1cmwocideeGhyX3R5cGVhaGVhZC9wcm9qZWN0cyQnLAorICAgICAgICAgICAgdHlwZWFoZWFkcy5Qcm9qZWN0c1R5cGVBaGVhZC5hc192aWV3KCksIG5hbWU9J3hocl9wcm9qZWN0c3R5cGVhaGVhZCcpLAorCisKKworICAgICAgICB1cmwocideeGhyX3Rlc3RyZWxlYXNlY2hhbmdlLyg/UDxwaWQ+XGQrKSQnLCAneGhyX3Rlc3RyZWxlYXNlY2hhbmdlJywKKyAgICAgICAgICAgIG5hbWU9J3hocl90ZXN0cmVsZWFzZWNoYW5nZScpLAorICAgICAgICB1cmwocideeGhyX2NvbmZpZ3ZhcmVkaXQvKD9QPHBpZD5cZCspJCcsICd4aHJfY29uZmlndmFyZWRpdCcsCisgICAgICAgICAgICBuYW1lPSd4aHJfY29uZmlndmFyZWRpdCcpLAorCisgICAgICAgIHVybChyJ154aHJfaW1wb3J0bGF5ZXIvJCcsICd4aHJfaW1wb3J0bGF5ZXInLCBuYW1lPSd4aHJfaW1wb3J0bGF5ZXInKSwKKyAgICAgICAgdXJsKHInXnhocl91cGRhdGVsYXllci8kJywgJ3hocl91cGRhdGVsYXllcicsIG5hbWU9J3hocl91cGRhdGVsYXllcicpLAorCisgICAgICAgICMgSlMgVW5pdCB0ZXN0cworICAgICAgICB1cmwocideanMtdW5pdC10ZXN0cy8kJywgJ2pzdW5pdHRlc3RzJywgbmFtZT0nanMtdW5pdC10ZXN0cycpLAorCisgICAgICAgICMgZGVmYXVsdCByZWRpcmVjdGlvbgorICAgICAgICB1cmwocideJCcsIFJlZGlyZWN0Vmlldy5hc192aWV3KCB1cmw9ICdsYW5kaW5nJykpLAorKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdmlld3MucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS92aWV3cy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZThmNjllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdmlld3MucHkKQEAgLTAsMCArMSwyOTEyIEBACisjCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIyBweWxpbnQ6IGRpc2FibGU9bWV0aG9kLWhpZGRlbgorIyBHaXZlcyBFOjg0OCwgNDogQW4gYXR0cmlidXRlIGRlZmluZWQgaW4ganNvbi5lbmNvZGVyIGxpbmUgMTYyIGhpZGVzIHRoaXMgbWV0aG9kIChtZXRob2QtaGlkZGVuKQorIyB3aGljaCBpcyBhbiBpbnZhbGlkIHdhcm5pbmcKKworaW1wb3J0IG9wZXJhdG9yLHJlCisKK2Zyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgRiwgUSwgU3VtLCBDb3VudCwgTWF4Citmcm9tIGRqYW5nby5kYiBpbXBvcnQgSW50ZWdyaXR5RXJyb3IKK2Zyb20gZGphbmdvLnNob3J0Y3V0cyBpbXBvcnQgcmVuZGVyLCByZWRpcmVjdAorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBCdWlsZCwgVGFyZ2V0LCBUYXNrLCBMYXllciwgTGF5ZXJfVmVyc2lvbiwgUmVjaXBlLCBMb2dNZXNzYWdlLCBWYXJpYWJsZQorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBUYXNrX0RlcGVuZGVuY3ksIFJlY2lwZV9EZXBlbmRlbmN5LCBQYWNrYWdlLCBQYWNrYWdlX0ZpbGUsIFBhY2thZ2VfRGVwZW5kZW5jeQorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UsIFRhcmdldF9GaWxlLCBUYXJnZXRfSW1hZ2VfRmlsZSwgQnVpbGRBcnRpZmFjdAorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBCaXRiYWtlVmVyc2lvbgorZnJvbSBibGRjb250cm9sIGltcG9ydCBiYmNvbnRyb2xsZXIKK2Zyb20gZGphbmdvLnZpZXdzLmRlY29yYXRvcnMuY2FjaGUgaW1wb3J0IGNhY2hlX2NvbnRyb2wKK2Zyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlLCByZXNvbHZlCitmcm9tIGRqYW5nby5jb3JlLmV4Y2VwdGlvbnMgaW1wb3J0IE11bHRpcGxlT2JqZWN0c1JldHVybmVkCitmcm9tIGRqYW5nby5jb3JlLnBhZ2luYXRvciBpbXBvcnQgUGFnaW5hdG9yLCBFbXB0eVBhZ2UsIFBhZ2VOb3RBbkludGVnZXIKK2Zyb20gZGphbmdvLmh0dHAgaW1wb3J0IEh0dHBSZXNwb25zZUJhZFJlcXVlc3QsIEh0dHBSZXNwb25zZU5vdEZvdW5kCitmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKK2Zyb20gZGphbmdvLnV0aWxzLmh0bWwgaW1wb3J0IGVzY2FwZQorZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZWRlbHRhLCBkYXRldGltZSwgZGF0ZQorZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IGZvcm1hdHMKK2Zyb20gdG9hc3Rlcmd1aS50ZW1wbGF0ZXRhZ3MucHJvamVjdHRhZ3MgaW1wb3J0IGpzb24gYXMganNvbmZpbHRlcgoraW1wb3J0IGpzb24KK2Zyb20gb3MucGF0aCBpbXBvcnQgZGlybmFtZQoraW1wb3J0IGl0ZXJ0b29scworCitpbXBvcnQgbG9nZ2luZworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigidG9hc3RlciIpCisKKyMgYWxsIG5ldyBzZXNzaW9ucyBzaG91bGQgY29tZSB0aHJvdWdoIHRoZSBsYW5kaW5nIHBhZ2U7CisjIGRldGVybWluZSBpbiB3aGljaCBtb2RlIHdlIGFyZSBydW5uaW5nIGluLCBhbmQgcmVkaXJlY3QgYXBwcm9wcmlhdGVseQorZGVmIGxhbmRpbmcocmVxdWVzdCk6CisgICAgIyB3ZSBvbmx5IHJlZGlyZWN0IHRvIHByb2plY3RzIHBhZ2UgaWYgdGhlcmUgaXMgYSB1c2VyLWdlbmVyYXRlZCBwcm9qZWN0CisgICAgdXNlcl9wcm9qZWN0cyA9IFByb2plY3Qub2JqZWN0cy5maWx0ZXIoaXNfZGVmYXVsdCA9IEZhbHNlKQorICAgIGhhc191c2VyX3Byb2plY3QgPSB1c2VyX3Byb2plY3RzLmNvdW50KCkgPiAwCisKKyAgICBpZiBCdWlsZC5vYmplY3RzLmNvdW50KCkgPT0gMCBhbmQgaGFzX3VzZXJfcHJvamVjdDoKKyAgICAgICAgcmV0dXJuIHJlZGlyZWN0KHJldmVyc2UoJ2FsbC1wcm9qZWN0cycpLCBwZXJtYW5lbnQgPSBGYWxzZSkKKworICAgIGlmIEJ1aWxkLm9iamVjdHMuYWxsKCkuY291bnQoKSA+IDA6CisgICAgICAgIHJldHVybiByZWRpcmVjdChyZXZlcnNlKCdhbGwtYnVpbGRzJyksIHBlcm1hbmVudCA9IEZhbHNlKQorCisgICAgY29udGV4dCA9IHsnbHZzX25vcycgOiBMYXllcl9WZXJzaW9uLm9iamVjdHMuYWxsKCkuY291bnQoKX0KKworICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgJ2xhbmRpbmcuaHRtbCcsIGNvbnRleHQpCisKKworCisjIHJldHVybnMgYSBsaXN0IGZvciBtb3N0IHJlY2VudCBidWlsZHM7CitkZWYgX2dldF9sYXRlc3RfYnVpbGRzKHByaj1Ob25lKToKKyAgICBxdWVyeXNldCA9IEJ1aWxkLm9iamVjdHMuYWxsKCkKKworICAgIGlmIHByaiBpcyBub3QgTm9uZToKKyAgICAgICAgcXVlcnlzZXQgPSBxdWVyeXNldC5maWx0ZXIocHJvamVjdCA9IHByaikKKworICAgIHJldHVybiBsaXN0KGl0ZXJ0b29scy5jaGFpbigKKyAgICAgICAgcXVlcnlzZXQuZmlsdGVyKG91dGNvbWU9QnVpbGQuSU5fUFJPR1JFU1MpLm9yZGVyX2J5KCItcGsiKSwKKyAgICAgICAgcXVlcnlzZXQuZmlsdGVyKG91dGNvbWVfX2x0PUJ1aWxkLklOX1BST0dSRVNTKS5vcmRlcl9ieSgiLXBrIilbOjNdICkpCisKKworIyBhIEpTT04tYWJsZSBkaWN0IG9mIHJlY2VudCBidWlsZHM7IGZvciB1c2UgaW4gdGhlIFByb2plY3QgcGFnZSwgeGhyXyB1cGRhdGVzLCAgYW5kIG90aGVyIHBsYWNlcywgYXMgbmVlZGVkCitkZWYgX3Byb2plY3RfcmVjZW50X2J1aWxkX2xpc3QocHJqKToKKyAgICBkYXRhID0gW10KKyAgICAjIHRha2UgdGhlIG1vc3QgcmVjZW50IDMgY29tcGxldGVkIGJ1aWxkcywgcGx1cyBhbnkgYnVpbGRzIGluIHByb2dyZXNzCisgICAgZm9yIHggaW4gX2dldF9sYXRlc3RfYnVpbGRzKHByaik6CisgICAgICAgIGQgPSB7CisgICAgICAgICAgICAiaWQiOiAgeC5waywKKyAgICAgICAgICAgICJ0YXJnZXRzIiA6IG1hcChsYW1iZGEgeTogeyJ0YXJnZXQiOiB5LnRhcmdldCwgInRhc2siOiB5LnRhc2sgfSwgeC50YXJnZXRfc2V0LmFsbCgpKSwgIyBUT0RPOiBjcmVhdGUgdGhlIHRhc2sgZW50cnkgaW4gdGhlIFRhcmdldCB0YWJsZQorICAgICAgICAgICAgInN0YXR1cyI6IHguZ2V0X2N1cnJlbnRfc3RhdHVzKCksCisgICAgICAgICAgICAiZXJyb3JzIjogbWFwKGxhbWJkYSB5OiB7InR5cGUiOiB5LmxpbmVubywgIm1zZyI6IHkubWVzc2FnZSwgInRiIjogeS5wYXRobmFtZX0sICh4LmxvZ21lc3NhZ2Vfc2V0LmZpbHRlcihsZXZlbF9fZ3RlPUxvZ01lc3NhZ2UuV0FSTklORyl8eC5sb2dtZXNzYWdlX3NldC5maWx0ZXIobGV2ZWw9TG9nTWVzc2FnZS5FWENFUFRJT04pKSksCisgICAgICAgICAgICAidXBkYXRlZCI6IHguY29tcGxldGVkX29uLnN0cmZ0aW1lKCclcycpKyIwMDAiLAorICAgICAgICAgICAgImNvbW1hbmRfdGltZSI6ICh4LmNvbXBsZXRlZF9vbiAtIHguc3RhcnRlZF9vbikudG90YWxfc2Vjb25kcygpLAorICAgICAgICAgICAgImJyX3BhZ2VfdXJsIjogcmV2ZXJzZSgnYnVpbGRkYXNoYm9hcmQnLCBhcmdzPSh4LnBrLCkgKSwKKyAgICAgICAgICAgICJidWlsZCIgOiBtYXAoIGxhbWJkYSB5OiB7ImlkIjogeS5waywKKyAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiOiB5LmdldF9vdXRjb21lX2Rpc3BsYXkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21wbGV0ZWRfb24iIDogeS5jb21wbGV0ZWRfb24uc3RyZnRpbWUoJyVzJykrIjAwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiYnVpbGRfdGltZSIgOiAoeS5jb21wbGV0ZWRfb24gLSB5LnN0YXJ0ZWRfb24pLnRvdGFsX3NlY29uZHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJidWlsZF9wYWdlX3VybCIgOiByZXZlcnNlKCdidWlsZGRhc2hib2FyZCcsIGFyZ3M9KHkucGssKSksCisgICAgICAgICAgICAgICAgICAgICAgICAnYnVpbGRfdGltZV9wYWdlX3VybCc6IHJldmVyc2UoJ2J1aWxkdGltZScsIGFyZ3M9KHkucGssKSksCisgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3JzIjogeS5lcnJvcnMuY291bnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ3YXJuaW5ncyI6IHkud2FybmluZ3MuY291bnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21wbGV0ZXBlciI6IHkuY29tcGxldGVwZXIoKSBpZiB5Lm91dGNvbWUgPT0gQnVpbGQuSU5fUFJPR1JFU1MgZWxzZSAiMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXRhIjogeS5ldGEoKS5zdHJmdGltZSgnJXMnKSsiMDAwIiBpZiB5Lm91dGNvbWUgPT0gQnVpbGQuSU5fUFJPR1JFU1MgZWxzZSAiMCIsCisgICAgICAgICAgICAgICAgICAgICAgICB9LCBbeF0pLAorICAgICAgICAgICAgfQorICAgICAgICBkYXRhLmFwcGVuZChkKQorCisgICAgcmV0dXJuIGRhdGEKKworCisKK2RlZiBvYmp0b2pzb24ob2JqKToKKyAgICBmcm9tIGRqYW5nby5kYi5tb2RlbHMucXVlcnkgaW1wb3J0IFF1ZXJ5U2V0CisgICAgZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBNb2RlbAorCisgICAgaWYgaXNpbnN0YW5jZShvYmosIGRhdGV0aW1lKToKKyAgICAgICAgcmV0dXJuIG9iai5pc29mb3JtYXQoKQorICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIHRpbWVkZWx0YSk6CisgICAgICAgIHJldHVybiBvYmoudG90YWxfc2Vjb25kcygpCisgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgUXVlcnlTZXQpIG9yIGlzaW5zdGFuY2Uob2JqLCBzZXQpOgorICAgICAgICByZXR1cm4gbGlzdChvYmopCisgICAgZWxpZiB0eXBlKG9iaikuX19uYW1lX18gPT0gIlJlbGF0ZWRNYW5hZ2VyIjoKKyAgICAgICAgcmV0dXJuIFt4LnBrIGZvciB4IGluIG9iai5hbGwoKV0KKyAgICBlbGlmIGhhc2F0dHIoIG9iaiwgJ19fZGljdF9fJykgYW5kIGlzaW5zdGFuY2Uob2JqLCBNb2RlbCk6CisgICAgICAgIGQgPSBvYmouX19kaWN0X18KKyAgICAgICAgbmQgPSBkaWN0KGQpCisgICAgICAgIGZvciBkaSBpbiBkLmtleXMoKToKKyAgICAgICAgICAgIGlmIGRpLnN0YXJ0c3dpdGgoIl8iKToKKyAgICAgICAgICAgICAgICBkZWwgbmRbZGldCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZFtkaV0sIE1vZGVsKToKKyAgICAgICAgICAgICAgICBuZFtkaV0gPSBkW2RpXS5waworICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRbZGldLCBpbnQpIGFuZCBoYXNhdHRyKG9iaiwgImdldF8lc19kaXNwbGF5IiAlIGRpKToKKyAgICAgICAgICAgICAgICBuZFtkaV0gPSBnZXRhdHRyKG9iaiwgImdldF8lc19kaXNwbGF5IiAlIGRpKSgpCisgICAgICAgIHJldHVybiBuZAorICAgIGVsaWYgaXNpbnN0YW5jZSggb2JqLCB0eXBlKGxhbWJkYSB4OngpKToKKyAgICAgICAgaW1wb3J0IGluc3BlY3QKKyAgICAgICAgcmV0dXJuIGluc3BlY3QuZ2V0c291cmNlbGluZXMob2JqKVswXQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgb2JqZWN0ICVzICglcykgb2YgdHlwZSAlcyIgJSAoIG9iaiwgZGlyKG9iaiksIHR5cGUob2JqKSkpCisKKworZGVmIF90ZW1wbGF0ZV9yZW5kZXJlcih0ZW1wbGF0ZSk6CisgICAgZGVmIGZ1bmNfd3JhcHBlcih2aWV3KToKKyAgICAgICAgZGVmIHJldHVybmVkX3dyYXBwZXIocmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gdmlldyhyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgICBleGNlcHQgUmVkaXJlY3RFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICByZXR1cm4gZS5nZXRfcmVkaXJlY3RfcmVzcG9uc2UoKQorCisgICAgICAgICAgICBpZiByZXF1ZXN0LkdFVC5nZXQoJ2Zvcm1hdCcsIE5vbmUpID09ICdqc29uJzoKKyAgICAgICAgICAgICAgICAjIG9iamVjdHMgaXMgYSBzcGVjaWFsIGtleXdvcmQgLSBpdCdzIGEgUGFnZSwgYnV0IHdlIG5lZWQgdGhlIGFjdHVhbCBvYmplY3RzIGhlcmUKKyAgICAgICAgICAgICAgICAjIGluIFhIUiwgdGhlIG9iamVjdHMgY29tZSBpbiB0aGUgInJvd3MiIHByb3BlcnR5CisgICAgICAgICAgICAgICAgaWYgIm9iamVjdHMiIGluIGNvbnRleHQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbInJvd3MiXSA9IGNvbnRleHRbIm9iamVjdHMiXS5vYmplY3RfbGlzdAorICAgICAgICAgICAgICAgICAgICBkZWwgY29udGV4dFsib2JqZWN0cyJdCisKKyAgICAgICAgICAgICAgICAjIHdlJ3JlIGFib3V0IHRvIHJldHVybjsgdG8ga2VlcCB1cCB3aXRoIHRoZSBYSFIgQVBJLCB3ZSBzZXQgdGhlIGVycm9yIHRvIE9LCisgICAgICAgICAgICAgICAgY29udGV4dFsiZXJyb3IiXSA9ICJvayIKKworICAgICAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcihjb250ZXh0LCBkZWZhdWx0PW9ianRvanNvbiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04IikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKyAgICAgICAgcmV0dXJuIHJldHVybmVkX3dyYXBwZXIKKyAgICByZXR1cm4gZnVuY193cmFwcGVyCisKKworZGVmIF9sdl90b19kaWN0KHByaiwgeCA9IE5vbmUpOgorICAgIGlmIHggaXMgTm9uZToKKyAgICAgICAgZGVmIHdyYXBwZXIoeCk6CisgICAgICAgICAgICByZXR1cm4gX2x2X3RvX2RpY3QocHJqLCB4KQorICAgICAgICByZXR1cm4gd3JhcHBlcgorCisgICAgcmV0dXJuIHsiaWQiOiB4LnBrLAorICAgICAgICAgICAgIm5hbWUiOiB4LmxheWVyLm5hbWUsCisgICAgICAgICAgICAidG9vbHRpcCI6ICIlcyB8ICVzIiAlICh4LmxheWVyLnZjc191cmwseC5nZXRfdmNzX3JlZmVyZW5jZSgpKSwKKyAgICAgICAgICAgICJkZXRhaWwiOiAiKCVzIiAlIHgubGF5ZXIudmNzX3VybCArICgiKSIgaWYgeC51cF9icmFuY2ggPT0gTm9uZSBlbHNlICIgfCAiK3guZ2V0X3Zjc19yZWZlcmVuY2UoKSsiKSIpLAorICAgICAgICAgICAgImdpdHVybCI6IHgubGF5ZXIudmNzX3VybCwKKyAgICAgICAgICAgICJsYXllcmRldGFpbHVybCIgOiByZXZlcnNlKCdsYXllcmRldGFpbHMnLCBhcmdzPShwcmouaWQseC5waykpLAorICAgICAgICAgICAgInJldmlzaW9uIiA6IHguZ2V0X3Zjc19yZWZlcmVuY2UoKSwKKyAgICAgICAgICAgfQorCisKK2RlZiBfYnVpbGRfcGFnZV9yYW5nZShwYWdpbmF0b3IsIGluZGV4ID0gMSk6CisgICAgdHJ5OgorICAgICAgICBwYWdlID0gcGFnaW5hdG9yLnBhZ2UoaW5kZXgpCisgICAgZXhjZXB0IFBhZ2VOb3RBbkludGVnZXI6CisgICAgICAgIHBhZ2UgPSBwYWdpbmF0b3IucGFnZSgxKQorICAgIGV4Y2VwdCAgRW1wdHlQYWdlOgorICAgICAgICBwYWdlID0gcGFnaW5hdG9yLnBhZ2UocGFnaW5hdG9yLm51bV9wYWdlcykKKworCisgICAgcGFnZS5wYWdlX3JhbmdlID0gW3BhZ2UubnVtYmVyXQorICAgIGNydF9yYW5nZSA9IDAKKyAgICBmb3IgaSBpbiByYW5nZSgxLDUpOgorICAgICAgICBpZiAocGFnZS5udW1iZXIgKyBpKSA8PSBwYWdpbmF0b3IubnVtX3BhZ2VzOgorICAgICAgICAgICAgcGFnZS5wYWdlX3JhbmdlID0gcGFnZS5wYWdlX3JhbmdlICsgWyBwYWdlLm51bWJlciArIGldCisgICAgICAgICAgICBjcnRfcmFuZ2UgKz0xCisgICAgICAgIGlmIChwYWdlLm51bWJlciAtIGkpID4gMDoKKyAgICAgICAgICAgIHBhZ2UucGFnZV9yYW5nZSA9ICBbcGFnZS5udW1iZXIgLWldICsgcGFnZS5wYWdlX3JhbmdlCisgICAgICAgICAgICBjcnRfcmFuZ2UgKz0xCisgICAgICAgIGlmIGNydF9yYW5nZSA9PSA0OgorICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gcGFnZQorCisKK2RlZiBfdmVyaWZ5X3BhcmFtZXRlcnMoZywgbWFuZGF0b3J5X3BhcmFtZXRlcnMpOgorICAgIG1pc3MgPSBbXQorICAgIGZvciBtcCBpbiBtYW5kYXRvcnlfcGFyYW1ldGVyczoKKyAgICAgICAgaWYgbm90IG1wIGluIGc6CisgICAgICAgICAgICBtaXNzLmFwcGVuZChtcCkKKyAgICBpZiBsZW4obWlzcyk6CisgICAgICAgIHJldHVybiBtaXNzCisgICAgcmV0dXJuIE5vbmUKKworZGVmIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKHZpZXcsIGcsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCAqYXJncywgKiprd2FyZ3MpOgorICAgIGltcG9ydCB1cmxsaWIKKyAgICB1cmwgPSByZXZlcnNlKHZpZXcsIGt3YXJncz1rd2FyZ3MpCisgICAgcGFyYW1zID0ge30KKyAgICBmb3IgaSBpbiBnOgorICAgICAgICBwYXJhbXNbaV0gPSBnW2ldCisgICAgZm9yIGkgaW4gbWFuZGF0b3J5X3BhcmFtZXRlcnM6CisgICAgICAgIGlmIG5vdCBpIGluIHBhcmFtczoKKyAgICAgICAgICAgIHBhcmFtc1tpXSA9IHVybGxpYi51bnF1b3RlKHN0cihtYW5kYXRvcnlfcGFyYW1ldGVyc1tpXSkpCisKKyAgICByZXR1cm4gcmVkaXJlY3QodXJsICsgIj8lcyIgJSB1cmxsaWIudXJsZW5jb2RlKHBhcmFtcyksIHBlcm1hbmVudCA9IEZhbHNlLCAqKmt3YXJncykKKworY2xhc3MgUmVkaXJlY3RFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmlldywgZywgbWFuZGF0b3J5X3BhcmFtZXRlcnMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKFJlZGlyZWN0RXhjZXB0aW9uLCBzZWxmKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYudmlldyA9IHZpZXcKKyAgICAgICAgc2VsZi5nID0gZworICAgICAgICBzZWxmLm1hbmRhdG9yeV9wYXJhbWV0ZXJzID0gbWFuZGF0b3J5X3BhcmFtZXRlcnMKKyAgICAgICAgc2VsZi5vYXJncyAgPSBhcmdzCisgICAgICAgIHNlbGYub2t3YXJncyA9IGt3YXJncworCisgICAgZGVmIGdldF9yZWRpcmVjdF9yZXNwb25zZShzZWxmKToKKyAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKHNlbGYudmlldywgc2VsZi5nLCBzZWxmLm1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBzZWxmLm9hcmdzLCAqKnNlbGYub2t3YXJncykKKworRklFTERfU0VQQVJBVE9SID0gIjoiCitBTkRfVkFMVUVfU0VQQVJBVE9SID0gIiEiCitPUl9WQUxVRV9TRVBBUkFUT1IgPSAifCIKK0RFU0NFTkRJTkcgPSAiLSIKKworZGVmIF9fZ2V0X3FfZm9yX3ZhbChuYW1lLCB2YWx1ZSk6CisgICAgaWYgIk9SIiBpbiB2YWx1ZToKKyAgICAgICAgcmV0dXJuIHJlZHVjZShvcGVyYXRvci5vcl8sIG1hcChsYW1iZGEgeDogX19nZXRfcV9mb3JfdmFsKG5hbWUsIHgpLCBbIHggZm9yIHggaW4gdmFsdWUuc3BsaXQoIk9SIikgXSkpCisgICAgaWYgIkFORCIgaW4gdmFsdWU6CisgICAgICAgIHJldHVybiByZWR1Y2Uob3BlcmF0b3IuYW5kXywgbWFwKGxhbWJkYSB4OiBfX2dldF9xX2Zvcl92YWwobmFtZSwgeCksIFsgeCBmb3IgeCBpbiB2YWx1ZS5zcGxpdCgiQU5EIikgXSkpCisgICAgaWYgdmFsdWUuc3RhcnRzd2l0aCgiTk9UIik6CisgICAgICAgIHZhbHVlID0gdmFsdWVbMzpdCisgICAgICAgIGlmIHZhbHVlID09ICdOb25lJzoKKyAgICAgICAgICAgIHZhbHVlID0gTm9uZQorICAgICAgICBrd2FyZ3MgPSB7IG5hbWUgOiB2YWx1ZSB9CisgICAgICAgIHJldHVybiB+USgqKmt3YXJncykKKyAgICBlbHNlOgorICAgICAgICBpZiB2YWx1ZSA9PSAnTm9uZSc6CisgICAgICAgICAgICB2YWx1ZSA9IE5vbmUKKyAgICAgICAga3dhcmdzID0geyBuYW1lIDogdmFsdWUgfQorICAgICAgICByZXR1cm4gUSgqKmt3YXJncykKKworZGVmIF9nZXRfZmlsdGVyaW5nX3F1ZXJ5KGZpbHRlcl9zdHJpbmcpOgorCisgICAgc2VhcmNoX3Rlcm1zID0gZmlsdGVyX3N0cmluZy5zcGxpdChGSUVMRF9TRVBBUkFUT1IpCisgICAgYW5kX2tleXMgPSBzZWFyY2hfdGVybXNbMF0uc3BsaXQoQU5EX1ZBTFVFX1NFUEFSQVRPUikKKyAgICBhbmRfdmFsdWVzID0gc2VhcmNoX3Rlcm1zWzFdLnNwbGl0KEFORF9WQUxVRV9TRVBBUkFUT1IpCisKKyAgICBhbmRfcXVlcnkgPSBbXQorICAgIGZvciBrdiBpbiB6aXAoYW5kX2tleXMsIGFuZF92YWx1ZXMpOgorICAgICAgICBvcl9rZXlzID0ga3ZbMF0uc3BsaXQoT1JfVkFMVUVfU0VQQVJBVE9SKQorICAgICAgICBvcl92YWx1ZXMgPSBrdlsxXS5zcGxpdChPUl9WQUxVRV9TRVBBUkFUT1IpCisgICAgICAgIHF1ZXJ5ZGljdCA9IGRpY3QoemlwKG9yX2tleXMsIG9yX3ZhbHVlcykpCisgICAgICAgIGFuZF9xdWVyeS5hcHBlbmQocmVkdWNlKG9wZXJhdG9yLm9yXywgbWFwKGxhbWJkYSB4OiBfX2dldF9xX2Zvcl92YWwoeCwgcXVlcnlkaWN0W3hdKSwgW2sgZm9yIGsgaW4gcXVlcnlkaWN0XSkpKQorCisgICAgcmV0dXJuIHJlZHVjZShvcGVyYXRvci5hbmRfLCBbayBmb3IgayBpbiBhbmRfcXVlcnldKQorCitkZWYgX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgb3JkZXJrZXksIHRvZ2dsZV9yZXZlcnNlID0gRmFsc2UpOgorICAgIGlmIHRvZ2dsZV9yZXZlcnNlOgorICAgICAgICByZXR1cm4gIiVzOisiICUgb3JkZXJrZXkgaWYgcmVxdWVzdC5HRVQuZ2V0KCdvcmRlcmJ5JywgIiIpID09ICIlczotIiAlIG9yZGVya2V5IGVsc2UgIiVzOi0iICUgb3JkZXJrZXkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gIiVzOi0iICUgb3JkZXJrZXkgaWYgcmVxdWVzdC5HRVQuZ2V0KCdvcmRlcmJ5JywgIiIpID09ICIlczorIiAlIG9yZGVya2V5IGVsc2UgIiVzOisiICUgb3JkZXJrZXkKKworZGVmIF9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgb3JkZXJrZXkpOgorICAgIGlmIHJlcXVlc3QuR0VULmdldCgnb3JkZXJieScsICIiKSA9PSAiJXM6KyIlb3JkZXJrZXk6CisgICAgICAgIHJldHVybiAiZG93biIKKyAgICBlbGlmIHJlcXVlc3QuR0VULmdldCgnb3JkZXJieScsICIiKSA9PSAiJXM6LSIlb3JkZXJrZXk6CisgICAgICAgIHJldHVybiAidXAiCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworIyB3ZSBjaGVjayB0aGF0IHRoZSBpbnB1dCBjb21lcyBpbiBhIHZhbGlkIGZvcm0gdGhhdCB3ZSBjYW4gcmVjb2duaXplCitkZWYgX3ZhbGlkYXRlX2lucHV0KGZpZWxkX2lucHV0LCBtb2RlbCk6CisKKyAgICBpbnZhbGlkID0gTm9uZQorCisgICAgaWYgZmllbGRfaW5wdXQ6CisgICAgICAgIGZpZWxkX2lucHV0X2xpc3QgPSBmaWVsZF9pbnB1dC5zcGxpdChGSUVMRF9TRVBBUkFUT1IpCisKKyAgICAgICAgIyBDaGVjayB3ZSBoYXZlIG9ubHkgb25lIGNvbG9uCisgICAgICAgIGlmIGxlbihmaWVsZF9pbnB1dF9saXN0KSAhPSAyOgorICAgICAgICAgICAgaW52YWxpZCA9ICJXZSBoYXZlIGFuIGludmFsaWQgbnVtYmVyIG9mIHNlcGFyYXRvcnM6ICIgKyBmaWVsZF9pbnB1dCArICIgLT4gIiArIHN0cihmaWVsZF9pbnB1dF9saXN0KQorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIGludmFsaWQKKworICAgICAgICAjIENoZWNrIHdlIGhhdmUgYW4gZXF1YWwgbnVtYmVyIG9mIHRlcm1zIGJvdGggc2lkZXMgb2YgdGhlIGNvbG9uCisgICAgICAgIGlmIGxlbihmaWVsZF9pbnB1dF9saXN0WzBdLnNwbGl0KEFORF9WQUxVRV9TRVBBUkFUT1IpKSAhPSBsZW4oZmllbGRfaW5wdXRfbGlzdFsxXS5zcGxpdChBTkRfVkFMVUVfU0VQQVJBVE9SKSk6CisgICAgICAgICAgICBpbnZhbGlkID0gIk5vdCBhbGwgYXJnIG5hbWVzIGdvdCB2YWx1ZXMiCisgICAgICAgICAgICByZXR1cm4gTm9uZSwgaW52YWxpZCArIHN0cihmaWVsZF9pbnB1dF9saXN0KQorCisgICAgICAgICMgQ2hlY2sgd2UgYXJlIGxvb2tpbmcgZm9yIGEgdmFsaWQgZmllbGQKKyAgICAgICAgdmFsaWRfZmllbGRzID0gbW9kZWwuX21ldGEuZ2V0X2FsbF9maWVsZF9uYW1lcygpCisgICAgICAgIGZvciBmaWVsZCBpbiBmaWVsZF9pbnB1dF9saXN0WzBdLnNwbGl0KEFORF9WQUxVRV9TRVBBUkFUT1IpOgorICAgICAgICAgICAgaWYgbm90IHJlZHVjZShsYW1iZGEgeCwgeTogeCBvciB5LCBbIGZpZWxkLnN0YXJ0c3dpdGgoeCkgZm9yIHggaW4gdmFsaWRfZmllbGRzIF0pOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCAoZmllbGQsIFsgeCBmb3IgeCBpbiB2YWxpZF9maWVsZHMgXSkKKworICAgIHJldHVybiBmaWVsZF9pbnB1dCwgaW52YWxpZAorCisjIHVzZXMgc2VhcmNoX2FsbG93ZWRfZmllbGRzIGluIG9ybS9tb2RlbHMucHkgdG8gY3JlYXRlIGEgc2VhcmNoIHF1ZXJ5CisjIGZvciB0aGVzZSBmaWVsZHMgd2l0aCB0aGUgc3VwcGxpZWQgaW5wdXQgdGV4dAorZGVmIF9nZXRfc2VhcmNoX3Jlc3VsdHMoc2VhcmNoX3Rlcm0sIHF1ZXJ5c2V0LCBtb2RlbCk6CisgICAgc2VhcmNoX29iamVjdHMgPSBbXQorICAgIGZvciBzdCBpbiBzZWFyY2hfdGVybS5zcGxpdCgiICIpOgorICAgICAgICBxX21hcCA9IG1hcChsYW1iZGEgeDogUSgqKnt4KydfX2ljb250YWlucyc6IHN0fSksCisgICAgICAgICAgICAgICAgbW9kZWwuc2VhcmNoX2FsbG93ZWRfZmllbGRzKQorCisgICAgICAgIHNlYXJjaF9vYmplY3RzLmFwcGVuZChyZWR1Y2Uob3BlcmF0b3Iub3JfLCBxX21hcCkpCisgICAgc2VhcmNoX29iamVjdCA9IHJlZHVjZShvcGVyYXRvci5hbmRfLCBzZWFyY2hfb2JqZWN0cykKKyAgICBxdWVyeXNldCA9IHF1ZXJ5c2V0LmZpbHRlcihzZWFyY2hfb2JqZWN0KQorCisgICAgcmV0dXJuIHF1ZXJ5c2V0CisKKworIyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBzZWFyY2gvZmlsdGVyL29yZGVyaW5nIHBhcmFtZXRlcnMgZnJvbSB0aGUgcmVxdWVzdAorIyBpdCB1c2VzIHRoZSByZXF1ZXN0IGFuZCB0aGUgbW9kZWwgdG8gdmFsaWRhdGUgaW5wdXQgZm9yIHRoZSBmaWx0ZXIgYW5kIG9yZGVyYnkgdmFsdWVzCitkZWYgX3NlYXJjaF90dXBsZShyZXF1ZXN0LCBtb2RlbCk6CisgICAgb3JkZXJpbmdfc3RyaW5nLCBpbnZhbGlkID0gX3ZhbGlkYXRlX2lucHV0KHJlcXVlc3QuR0VULmdldCgnb3JkZXJieScsICcnKSwgbW9kZWwpCisgICAgaWYgaW52YWxpZDoKKyAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbigiSW52YWxpZCBvcmRlcmluZyBtb2RlbDoiICsgc3RyKG1vZGVsKSArIHN0cihpbnZhbGlkKSkKKworICAgIGZpbHRlcl9zdHJpbmcsIGludmFsaWQgPSBfdmFsaWRhdGVfaW5wdXQocmVxdWVzdC5HRVQuZ2V0KCdmaWx0ZXInLCAnJyksIG1vZGVsKQorICAgIGlmIGludmFsaWQ6CisgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oIkludmFsaWQgZmlsdGVyICIgKyBzdHIoaW52YWxpZCkpCisKKyAgICBzZWFyY2hfdGVybSA9IHJlcXVlc3QuR0VULmdldCgnc2VhcmNoJywgJycpCisgICAgcmV0dXJuIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKQorCisKKyMgcmV0dXJucyBhIGxhenktZXZhbHVhdGVkIHF1ZXJ5c2V0IGZvciBhIGZpbHRlci9zZWFyY2gvb3JkZXIgY29tYmluYXRpb24KK2RlZiBfZ2V0X3F1ZXJ5c2V0KG1vZGVsLCBxdWVyeXNldCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgb3JkZXJpbmdfc2Vjb25kYXJ5PScnKToKKyAgICBpZiBmaWx0ZXJfc3RyaW5nOgorICAgICAgICBmaWx0ZXJfcXVlcnkgPSBfZ2V0X2ZpbHRlcmluZ19xdWVyeShmaWx0ZXJfc3RyaW5nKQorICAgICAgICBxdWVyeXNldCA9IHF1ZXJ5c2V0LmZpbHRlcihmaWx0ZXJfcXVlcnkpCisgICAgZWxzZToKKyAgICAgICAgcXVlcnlzZXQgPSBxdWVyeXNldC5hbGwoKQorCisgICAgaWYgc2VhcmNoX3Rlcm06CisgICAgICAgIHF1ZXJ5c2V0ID0gX2dldF9zZWFyY2hfcmVzdWx0cyhzZWFyY2hfdGVybSwgcXVlcnlzZXQsIG1vZGVsKQorCisgICAgaWYgb3JkZXJpbmdfc3RyaW5nOgorICAgICAgICBjb2x1bW4sIG9yZGVyID0gb3JkZXJpbmdfc3RyaW5nLnNwbGl0KCc6JykKKyAgICAgICAgaWYgY29sdW1uID09IHJlLnN1YignLScsJycsb3JkZXJpbmdfc2Vjb25kYXJ5KToKKyAgICAgICAgICAgIG9yZGVyaW5nX3NlY29uZGFyeT0nJworICAgICAgICBpZiBvcmRlci5sb3dlcigpID09IERFU0NFTkRJTkc6CisgICAgICAgICAgICBjb2x1bW4gPSAnLScgKyBjb2x1bW4KKyAgICAgICAgaWYgb3JkZXJpbmdfc2Vjb25kYXJ5OgorICAgICAgICAgICAgcXVlcnlzZXQgPSBxdWVyeXNldC5vcmRlcl9ieShjb2x1bW4sIG9yZGVyaW5nX3NlY29uZGFyeSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQub3JkZXJfYnkoY29sdW1uKQorCisgICAgIyBpbnN1cmUgb25seSBkaXN0aW5jdCByZWNvcmRzIChlLmcuIGZyb20gbXVsdGlwbGUgc2VhcmNoIGhpdHMpIGFyZSByZXR1cm5lZAorICAgIHJldHVybiBxdWVyeXNldC5kaXN0aW5jdCgpCisKKyMgcmV0dXJucyB0aGUgdmFsdWUgb2YgZW50cmllcyBwZXIgcGFnZSBhbmQgdGhlIG5hbWUgb2YgdGhlIGFwcGxpZWQgc29ydGluZyBmaWVsZC4KKyMgaWYgdGhlIHZhbHVlIGlzIGdpdmVuIGV4cGxpY2l0bHkgYXMgYSBHRVQgcGFyYW1ldGVyIGl0IHdpbGwgYmUgdGhlIGZpcnN0IHNlbGVjdGVkLAorIyBvdGhlcndpc2UgdGhlIGNvb2tpZSB2YWx1ZSB3aWxsIGJlIHVzZWQuCitkZWYgX2dldF9wYXJhbWV0ZXJzX3ZhbHVlcyhyZXF1ZXN0LCBkZWZhdWx0X2NvdW50LCBkZWZhdWx0X29yZGVyKToKKyAgICBjdXJyZW50X3VybCA9IHJlc29sdmUocmVxdWVzdC5wYXRoX2luZm8pLnVybF9uYW1lCisgICAgcGFnZXNpemUgPSByZXF1ZXN0LkdFVC5nZXQoJ2NvdW50JywgcmVxdWVzdC5zZXNzaW9uLmdldCgnJXNfY291bnQnICUgY3VycmVudF91cmwsIGRlZmF1bHRfY291bnQpKQorICAgIG9yZGVyYnkgPSByZXF1ZXN0LkdFVC5nZXQoJ29yZGVyYnknLCByZXF1ZXN0LnNlc3Npb24uZ2V0KCclc19vcmRlcmJ5JyAlIGN1cnJlbnRfdXJsLCBkZWZhdWx0X29yZGVyKSkKKyAgICByZXR1cm4gKHBhZ2VzaXplLCBvcmRlcmJ5KQorCisKKyMgc2V0IGNvb2tpZXMgZm9yIHBhcmFtZXRlcnMuIHRoaXMgaXMgdXNlZnVsbCBpbiBjYXNlIHBhcmFtZXRlcnMgYXJlIHNldAorIyBtYW51YWxseSBmcm9tIHRoZSBHRVQgdmFsdWVzIG9mIHRoZSBsaW5rCitkZWYgX3NldF9wYXJhbWV0ZXJzX3ZhbHVlcyhwYWdlc2l6ZSwgb3JkZXJieSwgcmVxdWVzdCk6CisgICAgZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJlc29sdmUKKyAgICBjdXJyZW50X3VybCA9IHJlc29sdmUocmVxdWVzdC5wYXRoX2luZm8pLnVybF9uYW1lCisgICAgcmVxdWVzdC5zZXNzaW9uWyclc19jb3VudCcgJSBjdXJyZW50X3VybF0gPSBwYWdlc2l6ZQorICAgIHJlcXVlc3Quc2Vzc2lvblsnJXNfb3JkZXJieScgJSBjdXJyZW50X3VybF0gPW9yZGVyYnkKKworIyBkYXRlIHJhbmdlOiBub3JtYWxpemUgR1VJJ3MgZGQvbW0veXl5eSB0byBkYXRlIG9iamVjdAorZGVmIF9ub3JtYWxpemVfaW5wdXRfZGF0ZShkYXRlX3N0cixkZWZhdWx0KToKKyAgICBkYXRlX3N0cj1yZS5zdWIoJy8nLCAnLScsIGRhdGVfc3RyKQorICAgICMgYWNjZXB0IGRkL21tL3l5eXkgdG8gZC9tL3l5CisgICAgdHJ5OgorICAgICAgICBkYXRlX2luID0gZGF0ZXRpbWUuc3RycHRpbWUoZGF0ZV9zdHIsICIlZC0lbS0lWSIpCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICMgY291cnRlc3kgdHJ5IHdpdGggdHdvIGRpZ2l0IHllYXIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0ZV9pbiA9IGRhdGV0aW1lLnN0cnB0aW1lKGRhdGVfc3RyLCAiJWQtJW0tJXkiKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgZGF0ZV9pbiA9IGRhdGVfaW4ucmVwbGFjZSh0emluZm89ZGVmYXVsdC50emluZm8pCisgICAgcmV0dXJuIGRhdGVfaW4KKworIyBjb252ZXJ0IGFuZCBub3JtYWxpemUgYW55IHJlY2VpdmVkIGRhdGUgcmFuZ2UgZmlsdGVyLCBmb3IgZXhhbXBsZToKKyMgImNvbXBsZXRlZF9vbl9fZ3RlIWNvbXBsZXRlZF9vbl9fbHQ6MDEvMDMvMjAxNSEwMi8wMy8yMDE1X2RhdGVyYW5nZSIgdG8KKyMgImNvbXBsZXRlZF9vbl9fZ3RlIWNvbXBsZXRlZF9vbl9fbHQ6MjAxNS0wMy0wMSEyMDE1LTAzLTAyIgorZGVmIF9tb2RpZnlfZGF0ZV9yYW5nZV9maWx0ZXIoZmlsdGVyX3N0cmluZyk6CisgICAgIyB3YXMgdGhlIGRhdGUgcmFuZ2UgcmFkaW8gYnV0dG9uIHNlbGVjdGVkPworICAgIGlmIDAgPiAgZmlsdGVyX3N0cmluZy5maW5kKCdfZGF0ZXJhbmdlJyk6CisgICAgICAgIHJldHVybiBmaWx0ZXJfc3RyaW5nLCcnCisgICAgIyBub3JtYWxpemUgR1VJIGRhdGVzIHRvIGRhdGFiYXNlIGZvcm1hdAorICAgIGZpbHRlcl9zdHJpbmcgPSBmaWx0ZXJfc3RyaW5nLnJlcGxhY2UoJ19kYXRlcmFuZ2UnLCcnKS5yZXBsYWNlKCc6JywnIScpOworICAgIGZpbHRlcl9saXN0ID0gZmlsdGVyX3N0cmluZy5zcGxpdCgnIScpOworICAgIGlmIDQgIT0gbGVuKGZpbHRlcl9saXN0KToKKyAgICAgICAgcmV0dXJuIGZpbHRlcl9zdHJpbmcKKyAgICB0b2RheSA9IHRpbWV6b25lLmxvY2FsdGltZSh0aW1lem9uZS5ub3coKSkKKyAgICBkYXRlX2lkID0gZmlsdGVyX2xpc3RbMV0KKyAgICBkYXRlX2Zyb20gPSBfbm9ybWFsaXplX2lucHV0X2RhdGUoZmlsdGVyX2xpc3RbMl0sdG9kYXkpCisgICAgZGF0ZV90byA9IF9ub3JtYWxpemVfaW5wdXRfZGF0ZShmaWx0ZXJfbGlzdFszXSx0b2RheSkKKyAgICAjIHN3YXAgZGF0ZXMgaWYgbWFudWFsbHkgc2V0IGRhdGVzIGFyZSBvdXQgb2Ygb3JkZXIKKyAgICBpZiAgZGF0ZV90byA8IGRhdGVfZnJvbToKKyAgICAgICAgZGF0ZV90byxkYXRlX2Zyb20gPSBkYXRlX2Zyb20sZGF0ZV90bworICAgICMgY29udmVydCB0byBzdHJpbmdzLCBtYWtlICdkYXRlX3RvJyBpbmNsdXNpdmUgYnkgbW92aW5nIHRvIGJlZ2luaW5nIG9mIG5leHQgZGF5CisgICAgZGF0ZV9mcm9tX3N0ciA9IGRhdGVfZnJvbS5zdHJmdGltZSgiJVktJW0tJWQiKQorICAgIGRhdGVfdG9fc3RyID0gKGRhdGVfdG8rdGltZWRlbHRhKGRheXM9MSkpLnN0cmZ0aW1lKCIlWS0lbS0lZCIpCisgICAgZmlsdGVyX3N0cmluZz1maWx0ZXJfbGlzdFswXSsnIScrZmlsdGVyX2xpc3RbMV0rJzonK2RhdGVfZnJvbV9zdHIrJyEnK2RhdGVfdG9fc3RyCisgICAgZGF0ZXJhbmdlX3NlbGVjdGVkID0gcmUuc3ViKCdfXy4qJywnJywgZGF0ZV9pZCkKKyAgICByZXR1cm4gZmlsdGVyX3N0cmluZyxkYXRlcmFuZ2Vfc2VsZWN0ZWQKKworZGVmIF9hZGRfZGF0ZXJhbmdlX2NvbnRleHQocXVlcnlzZXRfYWxsLCByZXF1ZXN0LCBkYXRlcmFuZ2VfbGlzdCk6CisgICAgIyBjYWxjdWxhdGUgdGhlIGV4YWN0IGJlZ2luaW5nIG9mIGxvY2FsIHRvZGF5IGFuZCB5ZXN0ZXJkYXkKKyAgICB0b2RheV9iZWdpbiA9IHRpbWV6b25lLmxvY2FsdGltZSh0aW1lem9uZS5ub3coKSkKKyAgICB0b2RheV9iZWdpbiA9IGRhdGUodG9kYXlfYmVnaW4ueWVhcix0b2RheV9iZWdpbi5tb250aCx0b2RheV9iZWdpbi5kYXkpCisgICAgeWVzdGVyZGF5X2JlZ2luID0gdG9kYXlfYmVnaW4tdGltZWRlbHRhKGRheXM9MSkKKyAgICAjIGFkZCBkYXRlcmFuZ2UgcGVyc2lzdGVudAorICAgIGNvbnRleHRfZGF0ZSA9IHt9CisgICAgY29udGV4dF9kYXRlWydsYXN0X2RhdGVfZnJvbSddID0gcmVxdWVzdC5HRVQuZ2V0KCdsYXN0X2RhdGVfZnJvbScsdGltZXpvbmUubG9jYWx0aW1lKHRpbWV6b25lLm5vdygpKS5zdHJmdGltZSgiJWQvJW0vJVkiKSkKKyAgICBjb250ZXh0X2RhdGVbJ2xhc3RfZGF0ZV90bycgIF0gPSByZXF1ZXN0LkdFVC5nZXQoJ2xhc3RfZGF0ZV90bycgICxjb250ZXh0X2RhdGVbJ2xhc3RfZGF0ZV9mcm9tJ10pCisgICAgIyBjYWxjdWxhdGUgdGhlIGRhdGUgcmFuZ2VzLCBhdm9pZCBzZWNvbmQgc29ydCBmb3IgJ2NyZWF0ZWQnCisgICAgIyBmZXRjaCB0aGUgcmVzcGVjdGl2ZSBtYXggcmFuZ2UgZnJvbSB0aGUgZGF0YWJhc2UKKyAgICBjb250ZXh0X2RhdGVbJ2RhdGVyYW5nZV9maWx0ZXInXT0nJworICAgIGZvciBrZXkgaW4gZGF0ZXJhbmdlX2xpc3Q6CisgICAgICAgIHF1ZXJ5c2V0X2tleSA9IHF1ZXJ5c2V0X2FsbC5vcmRlcl9ieShrZXkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHRfZGF0ZVsnZGF0ZU1pbl8nK2tleV09dGltZXpvbmUubG9jYWx0aW1lKGdldGF0dHIocXVlcnlzZXRfa2V5LmZpcnN0KCksa2V5KSkuc3RyZnRpbWUoIiVkLyVtLyVZIikKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgY29udGV4dF9kYXRlWydkYXRlTWluXycra2V5XT10aW1lem9uZS5sb2NhbHRpbWUodGltZXpvbmUubm93KCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHRfZGF0ZVsnZGF0ZU1heF8nK2tleV09dGltZXpvbmUubG9jYWx0aW1lKGdldGF0dHIocXVlcnlzZXRfa2V5Lmxhc3QoKSxrZXkpKS5zdHJmdGltZSgiJWQvJW0vJVkiKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBjb250ZXh0X2RhdGVbJ2RhdGVNYXhfJytrZXldPXRpbWV6b25lLmxvY2FsdGltZSh0aW1lem9uZS5ub3coKSkKKyAgICByZXR1cm4gY29udGV4dF9kYXRlLHRvZGF5X2JlZ2luLHllc3RlcmRheV9iZWdpbgorCisKKyMjCisjIGJ1aWxkIGRhc2hib2FyZCBmb3IgYSBzaW5nbGUgYnVpbGQsIGNvbWluZyBpbiBhcyBhcmd1bWVudAorIyBFYWNoIGJ1aWxkIG1heSBjb250YWluIG11bHRpcGxlIHRhcmdldHMgYW5kIGVhY2ggdGFyZ2V0CisjIG1heSBnZW5lcmF0ZSBtdWx0aXBsZSBpbWFnZSBmaWxlcy4gZGlzcGxheSB0aGVtIGFsbC4KKyMKK2RlZiBidWlsZGRhc2hib2FyZCggcmVxdWVzdCwgYnVpbGRfaWQgKToKKyAgICB0ZW1wbGF0ZSA9ICJidWlsZGRhc2hib2FyZC5odG1sIgorICAgIGlmIEJ1aWxkLm9iamVjdHMuZmlsdGVyKCBwaz1idWlsZF9pZCApLmNvdW50KCApID09IDAgOgorICAgICAgICByZXR1cm4gcmVkaXJlY3QoIGJ1aWxkcyApCisgICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmdldCggcGsgPSBidWlsZF9pZCApOworICAgIGxheWVyVmVyc2lvbklkID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmZpbHRlciggYnVpbGQgPSBidWlsZF9pZCApOworICAgIHJlY2lwZUNvdW50ID0gUmVjaXBlLm9iamVjdHMuZmlsdGVyKCBsYXllcl92ZXJzaW9uX19pZF9faW4gPSBsYXllclZlcnNpb25JZCApLmNvdW50KCApOworICAgIHRndHMgPSBUYXJnZXQub2JqZWN0cy5maWx0ZXIoIGJ1aWxkX2lkID0gYnVpbGRfaWQgKS5vcmRlcl9ieSggJ3RhcmdldCcgKTsKKworICAgICMjCisgICAgIyBzZXQgdXAgY3VzdG9tIHRhcmdldCBsaXN0IHdpdGggY29tcHV0ZWQgcGFja2FnZSBhbmQgaW1hZ2UgZGF0YQorICAgICMKKworICAgIHRhcmdldHMgPSBbIF0KKyAgICBudGFyZ2V0cyA9IDAKKyAgICBoYXNJbWFnZXMgPSBGYWxzZQorICAgIHRhcmdldEhhc05vSW1hZ2VzID0gRmFsc2UKKyAgICBmb3IgdCBpbiB0Z3RzOgorICAgICAgICBlbGVtID0geyB9CisgICAgICAgIGVsZW1bICd0YXJnZXQnIF0gPSB0CisgICAgICAgIGlmICggdC5pc19pbWFnZSApOgorICAgICAgICAgICAgaGFzSW1hZ2VzID0gVHJ1ZQorICAgICAgICBucGtnID0gMAorICAgICAgICBwa2dzeiA9IDAKKyAgICAgICAgcGFja2FnZSA9IE5vbmUKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gUGFja2FnZS5vYmplY3RzLmZpbHRlcihpZF9faW4gPSBbeC5wYWNrYWdlX2lkIGZvciB4IGluIHQudGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlX3NldC5hbGwoKV0pOgorICAgICAgICAgICAgcGtnc3ogPSBwa2dzeiArIHBhY2thZ2Uuc2l6ZQorICAgICAgICAgICAgaWYgKCBwYWNrYWdlLmluc3RhbGxlZF9uYW1lICk6CisgICAgICAgICAgICAgICAgbnBrZyA9IG5wa2cgKyAxCisgICAgICAgIGVsZW1bICducGtnJyBdID0gbnBrZworICAgICAgICBlbGVtWyAncGtnc3onIF0gPSBwa2dzegorICAgICAgICB0aSA9IFRhcmdldF9JbWFnZV9GaWxlLm9iamVjdHMuZmlsdGVyKCB0YXJnZXRfaWQgPSB0LmlkICkKKyAgICAgICAgaW1hZ2VGaWxlcyA9IFsgXQorICAgICAgICBmb3IgaSBpbiB0aToKKyAgICAgICAgICAgIG5keCA9IGkuZmlsZV9uYW1lLnJmaW5kKCAnLycgKQorICAgICAgICAgICAgaWYgKCBuZHggPCAwICk6CisgICAgICAgICAgICAgICAgbmR4ID0gMDsKKyAgICAgICAgICAgIGYgPSBpLmZpbGVfbmFtZVsgbmR4ICsgMTogXQorICAgICAgICAgICAgaW1hZ2VGaWxlcy5hcHBlbmQoeyAnaWQnOiBpLmlkLCAncGF0aCc6IGYsICdzaXplJyA6IGkuZmlsZV9zaXplIH0pCisgICAgICAgIGlmICggdC5pc19pbWFnZSBhbmQKKyAgICAgICAgICAgICAoKCBsZW4oIGltYWdlRmlsZXMgKSA8PSAwICkgb3IgKCBsZW4oIHQubGljZW5zZV9tYW5pZmVzdF9wYXRoICkgPD0gMCApKSk6CisgICAgICAgICAgICB0YXJnZXRIYXNOb0ltYWdlcyA9IFRydWUKKyAgICAgICAgZWxlbVsgJ2ltYWdlRmlsZXMnIF0gPSBpbWFnZUZpbGVzCisgICAgICAgIGVsZW1bICd0YXJnZXRIYXNOb0ltYWdlcycgXSA9IHRhcmdldEhhc05vSW1hZ2VzCisgICAgICAgIHRhcmdldHMuYXBwZW5kKCBlbGVtICkKKworICAgICMjCisgICAgIyBob3cgbWFueSBwYWNrYWdlcyBpbiB0aGlzIGJ1aWxkIC0gaWdub3JlIGFub255bW91cyBvbmVzCisgICAgIworCisgICAgcGFja2FnZUNvdW50ID0gMAorICAgIHBhY2thZ2VzID0gUGFja2FnZS5vYmplY3RzLmZpbHRlciggYnVpbGRfaWQgPSBidWlsZF9pZCApCisgICAgZm9yIHAgaW4gcGFja2FnZXM6CisgICAgICAgIGlmICggcC5pbnN0YWxsZWRfbmFtZSApOgorICAgICAgICAgICAgcGFja2FnZUNvdW50ID0gcGFja2FnZUNvdW50ICsgMQorCisgICAgbG9nbWVzc2FnZXMgPSBsaXN0KExvZ01lc3NhZ2Uub2JqZWN0cy5maWx0ZXIoIGJ1aWxkID0gYnVpbGRfaWQgKSkKKworICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAnYnVpbGQnICAgICAgICAgICA6IGJ1aWxkLAorICAgICAgICAgICAgJ2hhc0ltYWdlcycgICAgICAgOiBoYXNJbWFnZXMsCisgICAgICAgICAgICAnbnRhcmdldHMnICAgICAgICA6IG50YXJnZXRzLAorICAgICAgICAgICAgJ3RhcmdldHMnICAgICAgICAgOiB0YXJnZXRzLAorICAgICAgICAgICAgJ3JlY2lwZWNvdW50JyAgICAgOiByZWNpcGVDb3VudCwKKyAgICAgICAgICAgICdwYWNrYWdlY291bnQnICAgIDogcGFja2FnZUNvdW50LAorICAgICAgICAgICAgJ2xvZ21lc3NhZ2VzJyAgICAgOiBsb2dtZXNzYWdlcywKKyAgICB9CisgICAgcmV0dXJuIHJlbmRlciggcmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQgKQorCisKKworZGVmIGdlbmVyYXRlQ292ZXJlZExpc3QyKCByZXZsaXN0ID0gTm9uZSApOgorICAgIGlmIG5vdCByZXZsaXN0OgorICAgICAgICByZXZsaXN0ID0gW10KKyAgICBjb3ZlcmVkX2xpc3QgPSAgWyB4IGZvciB4IGluIHJldmxpc3QgaWYgeC5vdXRjb21lID09IFRhc2suT1VUQ09NRV9DT1ZFUkVEIF0KKyAgICB3aGlsZSBsZW4oY292ZXJlZF9saXN0KToKKyAgICAgICAgcmV2bGlzdCA9ICBbIHggZm9yIHggaW4gcmV2bGlzdCBpZiB4Lm91dGNvbWUgIT0gVGFzay5PVVRDT01FX0NPVkVSRUQgXQorICAgICAgICBpZiBsZW4ocmV2bGlzdCkgPiAwOgorICAgICAgICAgICAgcmV0dXJuIHJldmxpc3QKKworICAgICAgICBuZXdsaXN0ID0gX2ZpbmRfdGFza19yZXZkZXBfbGlzdChjb3ZlcmVkX2xpc3QpCisKKyAgICAgICAgcmV2bGlzdCA9IGxpc3Qoc2V0KHJldmxpc3QgKyBuZXdsaXN0KSkKKyAgICAgICAgY292ZXJlZF9saXN0ID0gIFsgeCBmb3IgeCBpbiByZXZsaXN0IGlmIHgub3V0Y29tZSA9PSBUYXNrLk9VVENPTUVfQ09WRVJFRCBdCisgICAgcmV0dXJuIHJldmxpc3QKKworZGVmIHRhc2soIHJlcXVlc3QsIGJ1aWxkX2lkLCB0YXNrX2lkICk6CisgICAgdGVtcGxhdGUgPSAidGFzay5odG1sIgorICAgIHRhc2tzX2xpc3QgPSBUYXNrLm9iamVjdHMuZmlsdGVyKCBwaz10YXNrX2lkICkKKyAgICBpZiB0YXNrc19saXN0LmNvdW50KCApID09IDA6CisgICAgICAgIHJldHVybiByZWRpcmVjdCggYnVpbGRzICkKKyAgICB0YXNrX29iamVjdCA9IHRhc2tzX2xpc3RbIDAgXTsKKyAgICBkZXBlbmRlbmNpZXMgPSBzb3J0ZWQoCisgICAgICAgIF9maW5kX3Rhc2tfZGVwKCB0YXNrX29iamVjdCApLAorICAgICAgICBrZXk9bGFtYmRhIHQ6JyVzXyVzICVzJyUodC5yZWNpcGUubmFtZSwgdC5yZWNpcGUudmVyc2lvbiwgdC50YXNrX25hbWUpKQorICAgIHJldmVyc2VfZGVwZW5kZW5jaWVzID0gc29ydGVkKAorICAgICAgICBfZmluZF90YXNrX3JldmRlcCggdGFza19vYmplY3QgKSwKKyAgICAgICAga2V5PWxhbWJkYSB0Oiclc18lcyAlcyclKCB0LnJlY2lwZS5uYW1lLCB0LnJlY2lwZS52ZXJzaW9uLCB0LnRhc2tfbmFtZSApKQorICAgIGNvdmVyZWRCeSA9ICcnOworICAgIGlmICggdGFza19vYmplY3Qub3V0Y29tZSA9PSBUYXNrLk9VVENPTUVfQ09WRVJFRCApOgorIyAgICAgICAgX2xpc3QgPSBnZW5lcmF0ZUNvdmVyZWRMaXN0KCB0YXNrICkKKyAgICAgICAgY292ZXJlZEJ5ID0gc29ydGVkKGdlbmVyYXRlQ292ZXJlZExpc3QyKCBfZmluZF90YXNrX3JldmRlcCggdGFza19vYmplY3QgKSApLCBrZXkgPSBsYW1iZGEgeDogeC5yZWNpcGUubmFtZSkKKyAgICBsb2dfaGVhZCA9ICcnCisgICAgbG9nX2JvZHkgPSAnJworICAgIGlmIHRhc2tfb2JqZWN0Lm91dGNvbWUgPT0gdGFza19vYmplY3QuT1VUQ09NRV9GQUlMRUQ6CisgICAgICAgIHBhc3MKKworICAgIHVyaV9saXN0PSBbIF0KKyAgICB2YXJpYWJsZXMgPSBWYXJpYWJsZS5vYmplY3RzLmZpbHRlcihidWlsZD1idWlsZF9pZCkKKyAgICB2PXZhcmlhYmxlcy5maWx0ZXIodmFyaWFibGVfbmFtZT0nU1NUQVRFX0RJUicpCisgICAgaWYgdi5jb3VudCgpID4gMDoKKyAgICAgICAgdXJpX2xpc3QuYXBwZW5kKHZbMF0udmFyaWFibGVfdmFsdWUpCisgICAgdj12YXJpYWJsZXMuZmlsdGVyKHZhcmlhYmxlX25hbWU9J1NTVEFURV9NSVJST1JTJykKKyAgICBpZiAodi5jb3VudCgpID4gMCk6CisgICAgICAgIGZvciBtaXJyb3IgaW4gdlswXS52YXJpYWJsZV92YWx1ZS5zcGxpdCgnXFxuJyk6CisgICAgICAgICAgICBzPXJlLnN1YignLiogJywnJyxtaXJyb3Iuc3RyaXAoJyBcdFxuXHInKSkKKyAgICAgICAgICAgIGlmIGxlbihzKToKKyAgICAgICAgICAgICAgICB1cmlfbGlzdC5hcHBlbmQocykKKworICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAnYnVpbGQnICAgICAgICAgICA6IEJ1aWxkLm9iamVjdHMuZmlsdGVyKCBwayA9IGJ1aWxkX2lkIClbIDAgXSwKKyAgICAgICAgICAgICdvYmplY3QnICAgICAgICAgIDogdGFza19vYmplY3QsCisgICAgICAgICAgICAndGFzaycgICAgICAgICAgICA6IHRhc2tfb2JqZWN0LAorICAgICAgICAgICAgJ2NvdmVyZWRfYnknICAgICAgOiBjb3ZlcmVkQnksCisgICAgICAgICAgICAnZGVwcycgICAgICAgICAgICA6IGRlcGVuZGVuY2llcywKKyAgICAgICAgICAgICdyZGVwcycgICAgICAgICAgIDogcmV2ZXJzZV9kZXBlbmRlbmNpZXMsCisgICAgICAgICAgICAnbG9nX2hlYWQnICAgICAgICA6IGxvZ19oZWFkLAorICAgICAgICAgICAgJ2xvZ19ib2R5JyAgICAgICAgOiBsb2dfYm9keSwKKyAgICAgICAgICAgICdzaG93aW5nX21hdGNoZXMnIDogRmFsc2UsCisgICAgICAgICAgICAndXJpX2xpc3QnICAgICAgICA6IHVyaV9saXN0LAorICAgIH0KKyAgICBpZiByZXF1ZXN0LkdFVC5nZXQoICdzaG93X21hdGNoZXMnLCAiIiApOgorICAgICAgICBjb250ZXh0WyAnc2hvd2luZ19tYXRjaGVzJyBdID0gVHJ1ZQorICAgICAgICBjb250ZXh0WyAnbWF0Y2hpbmdfdGFza3MnIF0gPSBUYXNrLm9iamVjdHMuZmlsdGVyKAorICAgICAgICAgICAgc3N0YXRlX2NoZWNrc3VtPXRhc2tfb2JqZWN0LnNzdGF0ZV9jaGVja3N1bSApLmZpbHRlcigKKyAgICAgICAgICAgIGJ1aWxkX19jb21wbGV0ZWRfb25fX2x0PXRhc2tfb2JqZWN0LmJ1aWxkLmNvbXBsZXRlZF9vbikuZXhjbHVkZSgKKyAgICAgICAgICAgIG9yZGVyX19pc251bGw9VHJ1ZSkuZXhjbHVkZShvdXRjb21lPVRhc2suT1VUQ09NRV9OQSkub3JkZXJfYnkoJy1idWlsZF9fY29tcGxldGVkX29uJykKKworICAgIHJldHVybiByZW5kZXIoIHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0ICkKKworZGVmIHJlY2lwZShyZXF1ZXN0LCBidWlsZF9pZCwgcmVjaXBlX2lkLCBhY3RpdmVfdGFiPSIxIik6CisgICAgdGVtcGxhdGUgPSAicmVjaXBlLmh0bWwiCisgICAgaWYgUmVjaXBlLm9iamVjdHMuZmlsdGVyKHBrPXJlY2lwZV9pZCkuY291bnQoKSA9PSAwIDoKKyAgICAgICAgcmV0dXJuIHJlZGlyZWN0KGJ1aWxkcykKKworICAgIHJlY2lwZV9vYmplY3QgPSBSZWNpcGUub2JqZWN0cy5nZXQocGs9cmVjaXBlX2lkKQorICAgIGxheWVyX3ZlcnNpb24gPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0KHBrPXJlY2lwZV9vYmplY3QubGF5ZXJfdmVyc2lvbl9pZCkKKyAgICBsYXllciAgPSBMYXllci5vYmplY3RzLmdldChwaz1sYXllcl92ZXJzaW9uLmxheWVyX2lkKQorICAgIHRhc2tzX2xpc3QgID0gVGFzay5vYmplY3RzLmZpbHRlcihyZWNpcGVfaWQgPSByZWNpcGVfaWQsIGJ1aWxkX2lkID0gYnVpbGRfaWQpLmV4Y2x1ZGUob3JkZXJfX2lzbnVsbD1UcnVlKS5leGNsdWRlKHRhc2tfbmFtZV9fZW5kc3dpdGg9J19zZXRzY2VuZScpLmV4Y2x1ZGUob3V0Y29tZT1UYXNrLk9VVENPTUVfTkEpCisgICAgcGFja2FnZV9jb3VudCA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIocmVjaXBlX2lkID0gcmVjaXBlX2lkKS5maWx0ZXIoYnVpbGRfaWQgPSBidWlsZF9pZCkuZmlsdGVyKHNpemVfX2d0ZT0wKS5jb3VudCgpCisKKyAgICBpZiBhY3RpdmVfdGFiICE9ICcxJyBhbmQgYWN0aXZlX3RhYiAhPSAnMycgYW5kIGFjdGl2ZV90YWIgIT0gJzQnIDoKKyAgICAgICAgYWN0aXZlX3RhYiA9ICcxJworICAgIHRhYl9zdGF0ZXMgPSB7JzEnOiAnJywgJzMnOiAnJywgJzQnOiAnJ30KKyAgICB0YWJfc3RhdGVzW2FjdGl2ZV90YWJdID0gJ2FjdGl2ZScKKworICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAnYnVpbGQnICAgOiBCdWlsZC5vYmplY3RzLmdldChwaz1idWlsZF9pZCksCisgICAgICAgICAgICAnb2JqZWN0JyAgOiByZWNpcGVfb2JqZWN0LAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nIDogbGF5ZXJfdmVyc2lvbiwKKyAgICAgICAgICAgICdsYXllcicgICA6IGxheWVyLAorICAgICAgICAgICAgJ3Rhc2tzJyAgIDogdGFza3NfbGlzdCwKKyAgICAgICAgICAgICdwYWNrYWdlX2NvdW50JyA6IHBhY2thZ2VfY291bnQsCisgICAgICAgICAgICAndGFiX3N0YXRlcycgOiB0YWJfc3RhdGVzLAorICAgIH0KKyAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorCitkZWYgcmVjaXBlX3BhY2thZ2VzKHJlcXVlc3QsIGJ1aWxkX2lkLCByZWNpcGVfaWQpOgorICAgIHRlbXBsYXRlID0gInJlY2lwZV9wYWNrYWdlcy5odG1sIgorICAgIGlmIFJlY2lwZS5vYmplY3RzLmZpbHRlcihwaz1yZWNpcGVfaWQpLmNvdW50KCkgPT0gMCA6CisgICAgICAgIHJldHVybiByZWRpcmVjdChidWlsZHMpCisKKyAgICAocGFnZXNpemUsIG9yZGVyYnkpID0gX2dldF9wYXJhbWV0ZXJzX3ZhbHVlcyhyZXF1ZXN0LCAxMCwgJ25hbWU6KycpCisgICAgbWFuZGF0b3J5X3BhcmFtZXRlcnMgPSB7ICdjb3VudCc6IHBhZ2VzaXplLCAgJ3BhZ2UnIDogMSwgJ29yZGVyYnknOiBvcmRlcmJ5IH0KKyAgICByZXR2YWwgPSBfdmVyaWZ5X3BhcmFtZXRlcnMoIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycyApCisgICAgaWYgcmV0dmFsOgorICAgICAgICByZXR1cm4gX3JlZGlyZWN0X3BhcmFtZXRlcnMoICdyZWNpcGVfcGFja2FnZXMnLCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMsIGJ1aWxkX2lkID0gYnVpbGRfaWQsIHJlY2lwZV9pZCA9IHJlY2lwZV9pZCkKKyAgICAoZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZykgPSBfc2VhcmNoX3R1cGxlKHJlcXVlc3QsIFBhY2thZ2UpCisKKyAgICByZWNpcGVfb2JqZWN0ID0gUmVjaXBlLm9iamVjdHMuZ2V0KHBrPXJlY2lwZV9pZCkKKyAgICBxdWVyeXNldCA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIocmVjaXBlX2lkID0gcmVjaXBlX2lkKS5maWx0ZXIoYnVpbGRfaWQgPSBidWlsZF9pZCkuZmlsdGVyKHNpemVfX2d0ZT0wKQorICAgIHBhY2thZ2VfY291bnQgPSBxdWVyeXNldC5jb3VudCgpCisgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KFBhY2thZ2UsIHF1ZXJ5c2V0LCBmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAnbmFtZScpCisKKyAgICBwYWNrYWdlcyA9IF9idWlsZF9wYWdlX3JhbmdlKFBhZ2luYXRvcihxdWVyeXNldCwgcGFnZXNpemUpLHJlcXVlc3QuR0VULmdldCgncGFnZScsIDEpKQorCisgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICdidWlsZCcgICA6IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKSwKKyAgICAgICAgICAgICdyZWNpcGUnICA6IHJlY2lwZV9vYmplY3QsCisgICAgICAgICAgICAnb2JqZWN0cycgIDogcGFja2FnZXMsCisgICAgICAgICAgICAnb2JqZWN0X2NvdW50JyA6IHBhY2thZ2VfY291bnQsCisgICAgICAgICAgICAndGFibGVjb2xzJzpbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAnbmFtZSc6J1BhY2thZ2UnLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsIm5hbWUiKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwibmFtZSIpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJrZXknOiAibmFtZSIsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICduYW1lJzonVmVyc2lvbicsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICduYW1lJzonU2l6ZScsCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwic2l6ZSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzogX2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCJzaXplIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmtleSc6ICdzaXplJywKKyAgICAgICAgICAgICAgICAgICAgJ2RjbGFzcyc6ICdzaXplY29sIHNwYW4yJywKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICBdCisgICAgICAgfQorICAgIHJlc3BvbnNlID0gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpCisgICAgcmV0dXJuIHJlc3BvbnNlCisKK2RlZiB0YXJnZXRfY29tbW9uKCByZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkLCB2YXJpYW50ICk6CisgICAgdGVtcGxhdGUgPSAidGFyZ2V0Lmh0bWwiCisgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMjUsICduYW1lOisnKQorICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzID0geyAnY291bnQnOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5Jzogb3JkZXJieSB9CisgICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKAorICAgICAgICAgICAgICAgICAgICB2YXJpYW50LCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkX2lkID0gYnVpbGRfaWQsIHRhcmdldF9pZCA9IHRhcmdldF9pZCApCisgICAgKCBmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nICkgPSBfc2VhcmNoX3R1cGxlKCByZXF1ZXN0LCBQYWNrYWdlICkKKworICAgICMgRlVUVVJFOiAgZ2V0IHJpZCBvZiBuZXN0ZWQgc3ViLXF1ZXJpZXMgcmVwbGFjaW5nIHdpdGggTWFueVRvTWFueSBmaWVsZAorICAgIHF1ZXJ5c2V0ID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV9fZ3RlID0gMCwKKyAgICAgICAgICAgICAgICAgICAgaWRfX2luID0gVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlLm9iamVjdHMuZmlsdGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2lkPXRhcmdldF9pZCApLnZhbHVlcyggJ3BhY2thZ2VfaWQnICkpCisgICAgcGFja2FnZXNfc3VtID0gIHF1ZXJ5c2V0LmFnZ3JlZ2F0ZSggU3VtKCAnaW5zdGFsbGVkX3NpemUnICkpCisgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KAorICAgICAgICAgICAgUGFja2FnZSwgcXVlcnlzZXQsIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcsICduYW1lJyApCisgICAgcXVlcnlzZXQgPSBxdWVyeXNldC5zZWxlY3RfcmVsYXRlZCgicmVjaXBlIiwgInJlY2lwZV9fbGF5ZXJfdmVyc2lvbiIsICJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyIikKKyAgICBwYWNrYWdlcyA9IF9idWlsZF9wYWdlX3JhbmdlKCBQYWdpbmF0b3IocXVlcnlzZXQsIHBhZ2VzaXplKSwgcmVxdWVzdC5HRVQuZ2V0KCAncGFnZScsIDEgKSkKKworCisKKyAgICBidWlsZCA9IEJ1aWxkLm9iamVjdHMuZ2V0KCBwayA9IGJ1aWxkX2lkICkKKworICAgICMgYnJpbmcgaW4gcGFja2FnZSBkZXBlbmRlbmNpZXMKKyAgICBmb3IgcCBpbiBwYWNrYWdlcy5vYmplY3RfbGlzdDoKKyAgICAgICAgcC5ydW50aW1lX2RlcGVuZGVuY2llcyA9IHAucGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlLmZpbHRlcigKKyAgICAgICAgICAgIHRhcmdldF9pZCA9IHRhcmdldF9pZCwgZGVwX3R5cGU9UGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfVFJERVBFTkRTICkuc2VsZWN0X3JlbGF0ZWQoImRlcGVuZHNfb24iKQorICAgICAgICBwLnJldmVyc2VfcnVudGltZV9kZXBlbmRlbmNpZXMgPSBwLnBhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldC5maWx0ZXIoCisgICAgICAgICAgICB0YXJnZXRfaWQgPSB0YXJnZXRfaWQsIGRlcF90eXBlPVBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1RSREVQRU5EUyApLnNlbGVjdF9yZWxhdGVkKCJwYWNrYWdlIikKKyAgICB0Y19wYWNrYWdlID0geworICAgICAgICAnbmFtZScgICAgICAgOiAnUGFja2FnZScsCisgICAgICAgICdxaGVscCcgICAgICA6ICdQYWNrYWdlZCBvdXRwdXQgcmVzdWx0aW5nIGZyb20gYnVpbGRpbmcgYSByZWNpcGUgaW5jbHVkZWQgaW4gdGhpcyBpbWFnZScsCisgICAgICAgICdvcmRlcmZpZWxkJyA6IF9nZXRfdG9nZ2xlX29yZGVyKCByZXF1ZXN0LCAibmFtZSIgKSwKKyAgICAgICAgJ29yZGVyaWNvbicgIDogX2dldF90b2dnbGVfb3JkZXJfaWNvbiggcmVxdWVzdCwgIm5hbWUiICksCisgICAgICAgIH0KKyAgICB0Y19wYWNrYWdlVmVyc2lvbiA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ1BhY2thZ2UgdmVyc2lvbicsCisgICAgICAgICdxaGVscCcgICAgICA6ICdUaGUgcGFja2FnZSB2ZXJzaW9uIGFuZCByZXZpc2lvbicsCisgICAgICAgIH0KKyAgICB0Y19zaXplID0geworICAgICAgICAnbmFtZScgICAgICAgOiAnU2l6ZScsCisgICAgICAgICdxaGVscCcgICAgICA6ICdUaGUgc2l6ZSBvZiB0aGUgcGFja2FnZScsCisgICAgICAgICdvcmRlcmZpZWxkJyA6IF9nZXRfdG9nZ2xlX29yZGVyKCByZXF1ZXN0LCAic2l6ZSIsIFRydWUgKSwKKyAgICAgICAgJ29yZGVyaWNvbicgIDogX2dldF90b2dnbGVfb3JkZXJfaWNvbiggcmVxdWVzdCwgInNpemUiICksCisgICAgICAgICdvcmRlcmtleScgICA6ICdzaXplJywKKyAgICAgICAgJ2NsY2xhc3MnICAgIDogJ3NpemUnLAorICAgICAgICAnZGNsYXNzJyAgICAgOiAnc3BhbjInLAorICAgICAgICB9CisgICAgaWYgKCB2YXJpYW50ID09ICd0YXJnZXQnICk6CisgICAgICAgIHRjX3NpemVbICJoaWRkZW4iIF0gPSAwCisgICAgZWxzZToKKyAgICAgICAgdGNfc2l6ZVsgImhpZGRlbiIgXSA9IDEKKyAgICB0Y19zaXplUGVyY2VudGFnZSA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ1NpemUgb3ZlciB0b3RhbCAoJSknLAorICAgICAgICAncWhlbHAnICAgICAgOiAnUHJvcG9ydGlvbiBvZiB0aGUgb3ZlcmFsbCBzaXplIHJlcHJlc2VudGVkIGJ5IHRoaXMgcGFja2FnZScsCisgICAgICAgICdjbGNsYXNzJyAgICA6ICdzaXplX292ZXJfdG90YWwnLAorICAgICAgICAnaGlkZGVuJyAgICAgOiAxLAorICAgICAgICB9CisgICAgdGNfbGljZW5zZSA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ0xpY2Vuc2UnLAorICAgICAgICAncWhlbHAnICAgICAgOiAnVGhlIGxpY2Vuc2UgdW5kZXIgd2hpY2ggdGhlIHBhY2thZ2UgaXMgZGlzdHJpYnV0ZWQuIFNlcGFyYXRlIGxpY2Vuc2UgbmFtZXMgdVwKK3NpbmcgfCAocGlwZSkgbWVhbnMgdGhlcmUgaXMgYSBjaG9pY2UgYmV0d2VlbiBsaWNlbnNlcy4gU2VwYXJhdGUgbGljZW5zZSBuYW1lcyB1c2luZyAmIChhbXBlcnNhbmQpIG1cCitlYW5zIG11bHRpcGxlIGxpY2Vuc2VzIGV4aXN0IHRoYXQgY292ZXIgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzb3VyY2UnLAorICAgICAgICAnb3JkZXJmaWVsZCcgOiBfZ2V0X3RvZ2dsZV9vcmRlciggcmVxdWVzdCwgImxpY2Vuc2UiICksCisgICAgICAgICdvcmRlcmljb24nICA6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24oIHJlcXVlc3QsICJsaWNlbnNlIiApLAorICAgICAgICAnb3JkZXJrZXknICAgOiAnbGljZW5zZScsCisgICAgICAgICdjbGNsYXNzJyAgICA6ICdsaWNlbnNlJywKKyAgICAgICAgfQorICAgIGlmICggdmFyaWFudCA9PSAndGFyZ2V0JyApOgorICAgICAgICB0Y19saWNlbnNlWyAiaGlkZGVuIiBdID0gMQorICAgIGVsc2U6CisgICAgICAgIHRjX2xpY2Vuc2VbICJoaWRkZW4iIF0gPSAwCisgICAgdGNfZGVwZW5kZW5jaWVzID0geworICAgICAgICAnbmFtZScgICAgICAgOiAnRGVwZW5kZW5jaWVzJywKKyAgICAgICAgJ3FoZWxwJyAgICAgIDogIlBhY2thZ2UgcnVudGltZSBkZXBlbmRlbmNpZXMgKG90aGVyIHBhY2thZ2VzKSIsCisgICAgICAgICdjbGNsYXNzJyAgICA6ICdkZXBlbmRzJywKKyAgICAgICAgfQorICAgIGlmICggdmFyaWFudCA9PSAndGFyZ2V0JyApOgorICAgICAgICB0Y19kZXBlbmRlbmNpZXNbICJoaWRkZW4iIF0gPSAwCisgICAgZWxzZToKKyAgICAgICAgdGNfZGVwZW5kZW5jaWVzWyAiaGlkZGVuIiBdID0gMQorICAgIHRjX3JkZXBlbmRlbmNpZXMgPSB7CisgICAgICAgICduYW1lJyAgICAgICA6ICdSZXZlcnNlIGRlcGVuZGVuY2llcycsCisgICAgICAgICdxaGVscCcgICAgICA6ICdQYWNrYWdlIHJ1bi10aW1lIHJldmVyc2UgZGVwZW5kZW5jaWVzIChpLmUuIHdoaWNoIG90aGVyIHBhY2thZ2VzIGRlcGVuZCBvbiB0aGlzIHBhY2thZ2UnLAorICAgICAgICAnY2xjbGFzcycgICAgOiAnYnJvdWdodF9pbl9ieScsCisgICAgICAgIH0KKyAgICBpZiAoIHZhcmlhbnQgPT0gJ3RhcmdldCcgKToKKyAgICAgICAgdGNfcmRlcGVuZGVuY2llc1sgImhpZGRlbiIgXSA9IDAKKyAgICBlbHNlOgorICAgICAgICB0Y19yZGVwZW5kZW5jaWVzWyAiaGlkZGVuIiBdID0gMQorICAgIHRjX3JlY2lwZSA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ1JlY2lwZScsCisgICAgICAgICdxaGVscCcgICAgICA6ICdUaGUgbmFtZSBvZiB0aGUgcmVjaXBlIGJ1aWxkaW5nIHRoZSBwYWNrYWdlJywKKyAgICAgICAgJ29yZGVyZmllbGQnIDogX2dldF90b2dnbGVfb3JkZXIoIHJlcXVlc3QsICJyZWNpcGVfX25hbWUiICksCisgICAgICAgICdvcmRlcmljb24nICA6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24oIHJlcXVlc3QsICJyZWNpcGVfX25hbWUiICksCisgICAgICAgICdvcmRlcmtleScgICA6ICJyZWNpcGVfX25hbWUiLAorICAgICAgICAnY2xjbGFzcycgICAgOiAncmVjaXBlX25hbWUnLAorICAgICAgICAnaGlkZGVuJyAgICAgOiAwLAorICAgICAgICB9CisgICAgdGNfcmVjaXBlVmVyc2lvbiA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ1JlY2lwZSB2ZXJzaW9uJywKKyAgICAgICAgJ3FoZWxwJyAgICAgIDogJ1ZlcnNpb24gYW5kIHJldmlzaW9uIG9mIHRoZSByZWNpcGUgYnVpbGRpbmcgdGhlIHBhY2thZ2UnLAorICAgICAgICAnY2xjbGFzcycgICAgOiAncmVjaXBlX3ZlcnNpb24nLAorICAgICAgICAnaGlkZGVuJyAgICAgOiAxLAorICAgICAgICB9CisgICAgdGNfbGF5ZXIgPSB7CisgICAgICAgICduYW1lJyAgICAgICA6ICdMYXllcicsCisgICAgICAgICdxaGVscCcgICAgICA6ICdUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhlIHBhY2thZ2UnLAorICAgICAgICAnb3JkZXJmaWVsZCcgOiBfZ2V0X3RvZ2dsZV9vcmRlciggcmVxdWVzdCwgInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiICksCisgICAgICAgICdvcmRlcmljb24nICA6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24oIHJlcXVlc3QsICJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIiApLAorICAgICAgICAnb3JkZXJrZXknICAgOiAicmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSIsCisgICAgICAgICdjbGNsYXNzJyAgICA6ICdsYXllcl9uYW1lJywKKyAgICAgICAgJ2hpZGRlbicgICAgIDogMSwKKyAgICAgICAgfQorICAgIHRjX2xheWVyQnJhbmNoID0geworICAgICAgICAnbmFtZScgICAgICAgOiAnTGF5ZXIgYnJhbmNoJywKKyAgICAgICAgJ3FoZWxwJyAgICAgIDogJ1RoZSBHaXQgYnJhbmNoIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSB0aGF0IGJ1aWxkcyB0aGUgcGFja2FnZScsCisgICAgICAgICdvcmRlcmZpZWxkJyA6IF9nZXRfdG9nZ2xlX29yZGVyKCByZXF1ZXN0LCAicmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2giICksCisgICAgICAgICdvcmRlcmljb24nICA6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24oIHJlcXVlc3QsICJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2JyYW5jaCIgKSwKKyAgICAgICAgJ29yZGVya2V5JyAgIDogInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoIiwKKyAgICAgICAgJ2NsY2xhc3MnICAgIDogJ2xheWVyX2JyYW5jaCcsCisgICAgICAgICdoaWRkZW4nICAgICA6IDEsCisgICAgICAgIH0KKyAgICB0Y19sYXllckNvbW1pdCA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ0xheWVyIGNvbW1pdCcsCisgICAgICAgICdxaGVscCcgICAgICA6ICdUaGUgR2l0IGNvbW1pdCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhlIHBhY2thZ2UnLAorICAgICAgICAnY2xjbGFzcycgICAgOiAnbGF5ZXJfY29tbWl0JywKKyAgICAgICAgJ2hpZGRlbicgICAgIDogMSwKKyAgICAgICAgfQorCisgICAgY29udGV4dCA9IHsKKyAgICAgICAgJ29iamVjdG5hbWUnOiB2YXJpYW50LAorICAgICAgICAnYnVpbGQnICAgICAgICAgICAgICAgIDogYnVpbGQsCisgICAgICAgICd0YXJnZXQnICAgICAgICAgICAgICAgOiBUYXJnZXQub2JqZWN0cy5maWx0ZXIoIHBrID0gdGFyZ2V0X2lkIClbIDAgXSwKKyAgICAgICAgJ29iamVjdHMnICAgICAgICAgICAgICA6IHBhY2thZ2VzLAorICAgICAgICAncGFja2FnZXNfc3VtJyAgICAgICAgIDogcGFja2FnZXNfc3VtWyAnaW5zdGFsbGVkX3NpemVfX3N1bScgXSwKKyAgICAgICAgJ29iamVjdF9zZWFyY2hfZGlzcGxheSc6ICJwYWNrYWdlcyBpbmNsdWRlZCIsCisgICAgICAgICdkZWZhdWx0X29yZGVyYnknICAgICAgOiBvcmRlcmJ5LAorICAgICAgICAndGFibGVjb2xzJyAgICAgICAgICAgIDogWworICAgICAgICAgICAgICAgICAgICB0Y19wYWNrYWdlLAorICAgICAgICAgICAgICAgICAgICB0Y19wYWNrYWdlVmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgdGNfbGljZW5zZSwKKyAgICAgICAgICAgICAgICAgICAgdGNfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgdGNfc2l6ZVBlcmNlbnRhZ2UsCisgICAgICAgICAgICAgICAgICAgIHRjX2RlcGVuZGVuY2llcywKKyAgICAgICAgICAgICAgICAgICAgdGNfcmRlcGVuZGVuY2llcywKKyAgICAgICAgICAgICAgICAgICAgdGNfcmVjaXBlLAorICAgICAgICAgICAgICAgICAgICB0Y19yZWNpcGVWZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICB0Y19sYXllciwKKyAgICAgICAgICAgICAgICAgICAgdGNfbGF5ZXJCcmFuY2gsCisgICAgICAgICAgICAgICAgICAgIHRjX2xheWVyQ29tbWl0LAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgfQorCisKKyAgICByZXNwb25zZSA9IHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKyAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQorICAgIHJldHVybiByZXNwb25zZQorCitkZWYgdGFyZ2V0KCByZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkICk6CisgICAgcmV0dXJuKCB0YXJnZXRfY29tbW9uKCByZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkLCAidGFyZ2V0IiApKQorCitkZWYgdGFyZ2V0cGtnKCByZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkICk6CisgICAgcmV0dXJuKCB0YXJnZXRfY29tbW9uKCByZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkLCAidGFyZ2V0cGtnIiApKQorCitmcm9tIGRqYW5nby5jb3JlLnNlcmlhbGl6ZXJzLmpzb24gaW1wb3J0IERqYW5nb0pTT05FbmNvZGVyCitmcm9tIGRqYW5nby5odHRwIGltcG9ydCBIdHRwUmVzcG9uc2UKK2RlZiB4aHJfZGlyaW5mbyhyZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkKToKKyAgICB0b3AgPSByZXF1ZXN0LkdFVC5nZXQoJ3N0YXJ0JywgJy8nKQorICAgIHJldHVybiBIdHRwUmVzcG9uc2UoX2dldF9kaXJfZW50cmllcyhidWlsZF9pZCwgdGFyZ2V0X2lkLCB0b3ApLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCisKK2Zyb20gZGphbmdvLnV0aWxzLmZ1bmN0aW9uYWwgaW1wb3J0IFByb21pc2UKK2Zyb20gZGphbmdvLnV0aWxzLmVuY29kaW5nIGltcG9ydCBmb3JjZV90ZXh0CitjbGFzcyBMYXp5RW5jb2Rlcihqc29uLkpTT05FbmNvZGVyKToKKyAgICBkZWYgZGVmYXVsdChzZWxmLCBvYmopOgorICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgUHJvbWlzZSk6CisgICAgICAgICAgICByZXR1cm4gZm9yY2VfdGV4dChvYmopCisgICAgICAgIHJldHVybiBzdXBlcihMYXp5RW5jb2Rlciwgc2VsZikuZGVmYXVsdChvYmopCisKK2Zyb20gdG9hc3Rlcmd1aS50ZW1wbGF0ZXRhZ3MucHJvamVjdHRhZ3MgaW1wb3J0IGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0CitpbXBvcnQgb3MKK2RlZiBfZ2V0X2Rpcl9lbnRyaWVzKGJ1aWxkX2lkLCB0YXJnZXRfaWQsIHN0YXJ0KToKKyAgICBub2RlX3N0ciA9IHsKKyAgICAgICAgVGFyZ2V0X0ZpbGUuSVRZUEVfUkVHVUxBUiAgIDogJy0nLAorICAgICAgICBUYXJnZXRfRmlsZS5JVFlQRV9ESVJFQ1RPUlkgOiAnZCcsCisgICAgICAgIFRhcmdldF9GaWxlLklUWVBFX1NZTUxJTksgICA6ICdsJywKKyAgICAgICAgVGFyZ2V0X0ZpbGUuSVRZUEVfU09DS0VUICAgIDogJ3MnLAorICAgICAgICBUYXJnZXRfRmlsZS5JVFlQRV9GSUZPICAgICAgOiAncCcsCisgICAgICAgIFRhcmdldF9GaWxlLklUWVBFX0NIQVJBQ1RFUiA6ICdjJywKKyAgICAgICAgVGFyZ2V0X0ZpbGUuSVRZUEVfQkxPQ0sgICAgIDogJ2InLAorICAgIH0KKyAgICByZXNwb25zZSA9IFtdCisgICAgb2JqZWN0cyAgPSBUYXJnZXRfRmlsZS5vYmplY3RzLmZpbHRlcih0YXJnZXRfX2V4YWN0PXRhcmdldF9pZCwgZGlyZWN0b3J5X19wYXRoPXN0YXJ0KQorICAgIHRhcmdldF9wYWNrYWdlcyA9IFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZS5vYmplY3RzLmZpbHRlcih0YXJnZXRfX2V4YWN0PXRhcmdldF9pZCkudmFsdWVzX2xpc3QoJ3BhY2thZ2VfaWQnLCBmbGF0PVRydWUpCisgICAgZm9yIG8gaW4gb2JqZWN0czoKKyAgICAgICAgIyBleGNsdWRlIHJvb3QgaW5vZGUgJy8nCisgICAgICAgIGlmIG8ucGF0aCA9PSAnLyc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBlbnRyeSA9IHt9CisgICAgICAgICAgICBlbnRyeVsncGFyZW50J10gPSBzdGFydAorICAgICAgICAgICAgZW50cnlbJ25hbWUnXSA9IG9zLnBhdGguYmFzZW5hbWUoby5wYXRoKQorICAgICAgICAgICAgZW50cnlbJ2Z1bGxwYXRoJ10gPSBvLnBhdGgKKworICAgICAgICAgICAgIyBzZXQgZGVmYXVsdHMsIG5vdCBhbGwgZGVudHJpZXMgaGF2ZSBwYWNrYWdlcworICAgICAgICAgICAgZW50cnlbJ2luc3RhbGxlZF9wYWNrYWdlJ10gPSBOb25lCisgICAgICAgICAgICBlbnRyeVsncGFja2FnZV9pZCddID0gTm9uZQorICAgICAgICAgICAgZW50cnlbJ3BhY2thZ2UnXSA9IE5vbmUKKyAgICAgICAgICAgIGVudHJ5WydsaW5rX3RvJ10gPSBOb25lCisgICAgICAgICAgICBpZiBvLmlub2RldHlwZSA9PSBUYXJnZXRfRmlsZS5JVFlQRV9ESVJFQ1RPUlk6CisgICAgICAgICAgICAgICAgZW50cnlbJ2lzZGlyJ10gPSAxCisgICAgICAgICAgICAgICAgIyBpcyB0aGVyZSBjb250ZW50IGluIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIGVudHJ5WydjaGlsZGNvdW50J10gPSBUYXJnZXRfRmlsZS5vYmplY3RzLmZpbHRlcih0YXJnZXRfX2V4YWN0PXRhcmdldF9pZCwgZGlyZWN0b3J5X19wYXRoPW8ucGF0aCkuYWxsKCkuY291bnQoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlbnRyeVsnaXNkaXInXSA9IDAKKworICAgICAgICAgICAgICAgICMgcmVzb2x2ZSB0aGUgZmlsZSB0byBnZXQgdGhlIHBhY2thZ2UgZnJvbSB0aGUgcmVzb2x2ZWQgZmlsZQorICAgICAgICAgICAgICAgIHJlc29sdmVkX2lkID0gby5zeW1fdGFyZ2V0X2lkCisgICAgICAgICAgICAgICAgcmVzb2x2ZWRfcGF0aCA9IG8ucGF0aAorICAgICAgICAgICAgICAgIGlmIHRhcmdldF9wYWNrYWdlcy5jb3VudCgpOgorICAgICAgICAgICAgICAgICAgICB3aGlsZSByZXNvbHZlZF9pZCAhPSAiIiBhbmQgcmVzb2x2ZWRfaWQgIT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRmID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5nZXQocGs9cmVzb2x2ZWRfaWQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZF9wYXRoID0gdGYucGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRfaWQgPSB0Zi5zeW1fdGFyZ2V0X2lkCisKKyAgICAgICAgICAgICAgICAgICAgdGhpc2ZpbGU9UGFja2FnZV9GaWxlLm9iamVjdHMuYWxsKCkuZmlsdGVyKHBhdGhfX2V4YWN0PXJlc29sdmVkX3BhdGgsIHBhY2thZ2VfaWRfX2luPXRhcmdldF9wYWNrYWdlcykKKyAgICAgICAgICAgICAgICAgICAgaWYgdGhpc2ZpbGUuY291bnQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBQYWNrYWdlLm9iamVjdHMuZ2V0KHBrPXRoaXNmaWxlWzBdLnBhY2thZ2VfaWQpCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeVsnaW5zdGFsbGVkX3BhY2thZ2UnXSA9IHAuaW5zdGFsbGVkX25hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5WydwYWNrYWdlX2lkJ10gPSBzdHIocC5pZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5WydwYWNrYWdlJ10gPSBwLm5hbWUKKyAgICAgICAgICAgICAgICAjIGRvbid0IHVzZSByZXNvbHZlZCBwYXRoIGZyb20gYWJvdmUsIHNob3cgaW1tZWRpYXRlIGxpbmstdG8KKyAgICAgICAgICAgICAgICBpZiBvLnN5bV90YXJnZXRfaWQgIT0gIiIgYW5kIG8uc3ltX3RhcmdldF9pZCAhPSBOb25lOgorICAgICAgICAgICAgICAgICAgICBlbnRyeVsnbGlua190byddID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5nZXQocGs9by5zeW1fdGFyZ2V0X2lkKS5wYXRoCisgICAgICAgICAgICBlbnRyeVsnc2l6ZSddID0gZmlsdGVyZWRfZmlsZXNpemVmb3JtYXQoby5zaXplKQorICAgICAgICAgICAgaWYgZW50cnlbJ2xpbmtfdG8nXSAhPSBOb25lOgorICAgICAgICAgICAgICAgIGVudHJ5WydwZXJtaXNzaW9uJ10gPSBub2RlX3N0cltvLmlub2RldHlwZV0gKyBvLnBlcm1pc3Npb24KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZW50cnlbJ3Blcm1pc3Npb24nXSA9IG5vZGVfc3RyW28uaW5vZGV0eXBlXSArIG8ucGVybWlzc2lvbgorICAgICAgICAgICAgZW50cnlbJ293bmVyJ10gPSBvLm93bmVyCisgICAgICAgICAgICBlbnRyeVsnZ3JvdXAnXSA9IG8uZ3JvdXAKKyAgICAgICAgICAgIHJlc3BvbnNlLmFwcGVuZChlbnRyeSkKKworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBwcmludCAiRXhjZXB0aW9uICIsIGUKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZSkKKworICAgICMgc29ydCBieSBkaXJlY3RvcmllcyBmaXJzdCwgdGhlbiBieSBuYW1lCisgICAgcnNvcnRlZCA9IHNvcnRlZChyZXNwb25zZSwga2V5PWxhbWJkYSBlbnRyeSA6ICBlbnRyeVsnbmFtZSddKQorICAgIHJzb3J0ZWQgPSBzb3J0ZWQocnNvcnRlZCwga2V5PWxhbWJkYSBlbnRyeSA6ICBlbnRyeVsnaXNkaXInXSwgcmV2ZXJzZT1UcnVlKQorICAgIHJldHVybiBqc29uLmR1bXBzKHJzb3J0ZWQsIGNscz1MYXp5RW5jb2RlcikucmVwbGFjZSgnPC8nLCAnPFxcLycpCisKK2RlZiBkaXJpbmZvKHJlcXVlc3QsIGJ1aWxkX2lkLCB0YXJnZXRfaWQsIGZpbGVfcGF0aD1Ob25lKToKKyAgICB0ZW1wbGF0ZSA9ICJkaXJpbmZvLmh0bWwiCisgICAgb2JqZWN0cyA9IF9nZXRfZGlyX2VudHJpZXMoYnVpbGRfaWQsIHRhcmdldF9pZCwgJy8nKQorICAgIHBhY2thZ2VzX3N1bSA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoaWRfX2luPVRhcmdldF9JbnN0YWxsZWRfUGFja2FnZS5vYmplY3RzLmZpbHRlcih0YXJnZXRfaWQ9dGFyZ2V0X2lkKS52YWx1ZXMoJ3BhY2thZ2VfaWQnKSkuYWdncmVnYXRlKFN1bSgnaW5zdGFsbGVkX3NpemUnKSkKKyAgICBkaXJfbGlzdCA9IE5vbmUKKyAgICBpZiBmaWxlX3BhdGggIT0gTm9uZToKKyAgICAgICAgIiIiCisgICAgICAgIExpbmsgZnJvbSB0aGUgaW5jbHVkZWQgcGFja2FnZSBkZXRhaWwgZmlsZSBsaXN0IHBhZ2UgYW5kIGlzCisgICAgICAgIHJlcXVlc3Rpbmcgb3BlbmluZyB0aGUgZGlyIGluZm8gdG8gYSBzcGVjaWZpYyBmaWxlIHBhdGguCisgICAgICAgIFByb3ZpZGUgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gZXhwYW5kIGFuZCB0aGUgZnVsbCBwYXRoIHRvCisgICAgICAgIGhpZ2hsaWdodCBpbiB0aGUgcGFnZS4KKyAgICAgICAgIiIiCisgICAgICAgICMgQWFzc3VtZSB0YXJnZXQncyBwYXRoIHNlcGFyYXRvciBtYXRjaGVzIGhvc3QncywgdGhhdCBpcywgb3Muc2VwCisgICAgICAgIHNlcCA9IG9zLnNlcAorICAgICAgICBkaXJfbGlzdCA9IFtdCisgICAgICAgIGhlYWQgPSBmaWxlX3BhdGgKKyAgICAgICAgd2hpbGUgaGVhZCAhPSBzZXA6CisgICAgICAgICAgICAoaGVhZCwgdGFpbCkgPSBvcy5wYXRoLnNwbGl0KGhlYWQpCisgICAgICAgICAgICBpZiBoZWFkICE9IHNlcDoKKyAgICAgICAgICAgICAgICBkaXJfbGlzdC5pbnNlcnQoMCwgaGVhZCkKKworICAgIGNvbnRleHQgPSB7ICdidWlsZCc6IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKSwKKyAgICAgICAgICAgICAgICAndGFyZ2V0JzogVGFyZ2V0Lm9iamVjdHMuZ2V0KHBrPXRhcmdldF9pZCksCisgICAgICAgICAgICAgICAgJ3BhY2thZ2VzX3N1bSc6IHBhY2thZ2VzX3N1bVsnaW5zdGFsbGVkX3NpemVfX3N1bSddLAorICAgICAgICAgICAgICAgICdvYmplY3RzJzogb2JqZWN0cywKKyAgICAgICAgICAgICAgICAnZGlyX2xpc3QnOiBkaXJfbGlzdCwKKyAgICAgICAgICAgICAgICAnZmlsZV9wYXRoJzogZmlsZV9wYXRoLAorICAgICAgICAgICAgICB9CisgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKworZGVmIF9maW5kX3Rhc2tfZGVwKHRhc2tfb2JqZWN0KToKKyAgICByZXR1cm4gbWFwKGxhbWJkYSB4OiB4LmRlcGVuZHNfb24sIFRhc2tfRGVwZW5kZW5jeS5vYmplY3RzLmZpbHRlcih0YXNrPXRhc2tfb2JqZWN0KS5maWx0ZXIoZGVwZW5kc19vbl9fb3JkZXJfX2d0ID0gMCkuZXhjbHVkZShkZXBlbmRzX29uX19vdXRjb21lID0gVGFzay5PVVRDT01FX05BKS5zZWxlY3RfcmVsYXRlZCgiZGVwZW5kc19vbiIpKQorCisKK2RlZiBfZmluZF90YXNrX3JldmRlcCh0YXNrX29iamVjdCk6CisgICAgdHAgPSBbXQorICAgIHRwID0gbWFwKGxhbWJkYSB0OiB0LnRhc2ssIFRhc2tfRGVwZW5kZW5jeS5vYmplY3RzLmZpbHRlcihkZXBlbmRzX29uPXRhc2tfb2JqZWN0KS5maWx0ZXIodGFza19fb3JkZXJfX2d0PTApLmV4Y2x1ZGUodGFza19fb3V0Y29tZSA9IFRhc2suT1VUQ09NRV9OQSkuc2VsZWN0X3JlbGF0ZWQoInRhc2siLCAidGFza19fcmVjaXBlIiwgInRhc2tfX2J1aWxkIikpCisgICAgcmV0dXJuIHRwCisKK2RlZiBfZmluZF90YXNrX3JldmRlcF9saXN0KHRhc2tsaXN0KToKKyAgICB0cCA9IFtdCisgICAgdHAgPSBtYXAobGFtYmRhIHQ6IHQudGFzaywgVGFza19EZXBlbmRlbmN5Lm9iamVjdHMuZmlsdGVyKGRlcGVuZHNfb25fX2luPXRhc2tsaXN0KS5maWx0ZXIodGFza19fb3JkZXJfX2d0PTApLmV4Y2x1ZGUodGFza19fb3V0Y29tZSA9IFRhc2suT1VUQ09NRV9OQSkuc2VsZWN0X3JlbGF0ZWQoInRhc2siLCAidGFza19fcmVjaXBlIiwgInRhc2tfX2J1aWxkIikpCisgICAgcmV0dXJuIHRwCisKK2RlZiBfZmluZF90YXNrX3Byb3ZpZGVyKHRhc2tfb2JqZWN0KToKKyAgICB0YXNrX3JldmRlcHMgPSBfZmluZF90YXNrX3JldmRlcCh0YXNrX29iamVjdCkKKyAgICBmb3IgdHIgaW4gdGFza19yZXZkZXBzOgorICAgICAgICBpZiB0ci5vdXRjb21lICE9IFRhc2suT1VUQ09NRV9DT1ZFUkVEOgorICAgICAgICAgICAgcmV0dXJuIHRyCisgICAgZm9yIHRyIGluIHRhc2tfcmV2ZGVwczoKKyAgICAgICAgdHJjID0gX2ZpbmRfdGFza19wcm92aWRlcih0cikKKyAgICAgICAgaWYgdHJjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHRyYworICAgIHJldHVybiBOb25lCisKK2RlZiB0YXNrc19jb21tb24ocmVxdWVzdCwgYnVpbGRfaWQsIHZhcmlhbnQsIHRhc2tfYW5jaG9yKToKKyMgVGhpcyBjbGFzcyBpcyBzaGFyZWQgYmV0d2VlbiB0aGVzZSBwYWdlcworIworIyBDb2x1bW4gICAgdGFza3MgIGJ1aWxkdGltZSAgZGlza2lvICBjcHV1c2FnZQorIyAtLS0tLS0tLS0gLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0KKyMgQ2FjaGUgICAgICBkZWYKKyMgQ1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4gLQorIyBEaXNrICAgICAgICAgICAgICAgICAgICAgICAgIG1pbiAtCisjIEV4ZWN1dGVkICAgZGVmICAgICBkZWYgICAgICAgZGVmICAgICAgZGVmCisjIExvZworIyBPcmRlciAgICAgIGRlZiArCisjIE91dGNvbWUgICAgZGVmICAgICBkZWYgICAgICAgZGVmICAgICAgZGVmCisjIFJlY2lwZSAgICAgbWluICAgICBtaW4gICAgICAgbWluICAgICAgbWluCisjIFZlcnNpb24KKyMgVGFzayAgICAgICBtaW4gICAgIG1pbiAgICAgICBtaW4gICAgICBtaW4KKyMgVGltZSAgICAgICAgICAgICAgIG1pbiAtCisjCisjICdtaW4nOm9uIGFsd2F5cywgJ2RlZic6b24gYnkgZGVmYXVsdCwgZWxzZSBoaWRkZW4KKyMgJysnIGRlZmF1bHQgY29sdW1uIHNvcnQgdXAsICctJyBkZWZhdWx0IGNvbHVtbiBzb3J0IGRvd24KKworICAgIGFuY2hvciA9IHJlcXVlc3QuR0VULmdldCgnYW5jaG9yJywgJycpCisgICAgaWYgbm90IGFuY2hvcjoKKyAgICAgICAgYW5jaG9yPXRhc2tfYW5jaG9yCisKKyAgICAjIGRlZmF1bHQgb3JkZXJpbmcgZGVwZW5kcyBvbiB2YXJpYW50CisgICAgaWYgICAnYnVpbGR0aW1lJyA9PSB2YXJpYW50OgorICAgICAgICB0aXRsZV92YXJpYW50PSdUaW1lJworICAgICAgICBvYmplY3Rfc2VhcmNoX2Rpc3BsYXk9InRpbWUgZGF0YSIKKyAgICAgICAgZmlsdGVyX3NlYXJjaF9kaXNwbGF5PSJ0YXNrcyIKKyAgICAgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMjUsICdlbGFwc2VkX3RpbWU6LScpCisgICAgZWxpZiAnZGlza2lvJyAgICA9PSB2YXJpYW50OgorICAgICAgICB0aXRsZV92YXJpYW50PSdEaXNrIEkvTycKKyAgICAgICAgb2JqZWN0X3NlYXJjaF9kaXNwbGF5PSJkaXNrIEkvTyBkYXRhIgorICAgICAgICBmaWx0ZXJfc2VhcmNoX2Rpc3BsYXk9InRhc2tzIgorICAgICAgICAocGFnZXNpemUsIG9yZGVyYnkpID0gX2dldF9wYXJhbWV0ZXJzX3ZhbHVlcyhyZXF1ZXN0LCAyNSwgJ2Rpc2tfaW86LScpCisgICAgZWxpZiAnY3B1dXNhZ2UnICA9PSB2YXJpYW50OgorICAgICAgICB0aXRsZV92YXJpYW50PSdDUFUgdXNhZ2UnCisgICAgICAgIG9iamVjdF9zZWFyY2hfZGlzcGxheT0iQ1BVIHVzYWdlIGRhdGEiCisgICAgICAgIGZpbHRlcl9zZWFyY2hfZGlzcGxheT0idGFza3MiCisgICAgICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDI1LCAnY3B1X3VzYWdlOi0nKQorICAgIGVsc2UgOgorICAgICAgICB0aXRsZV92YXJpYW50PSdUYXNrcycKKyAgICAgICAgb2JqZWN0X3NlYXJjaF9kaXNwbGF5PSJ0YXNrcyIKKyAgICAgICAgZmlsdGVyX3NlYXJjaF9kaXNwbGF5PSJ0YXNrcyIKKyAgICAgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMjUsICdvcmRlcjorJykKKworCisgICAgbWFuZGF0b3J5X3BhcmFtZXRlcnMgPSB7ICdjb3VudCc6IHBhZ2VzaXplLCAgJ3BhZ2UnIDogMSwgJ29yZGVyYnknOiBvcmRlcmJ5IH0KKworICAgIHRlbXBsYXRlID0gJ3Rhc2tzLmh0bWwnCisgICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgaWYgdGFza19hbmNob3I6CisgICAgICAgICAgICBtYW5kYXRvcnlfcGFyYW1ldGVyc1snYW5jaG9yJ109dGFza19hbmNob3IKKyAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKCB2YXJpYW50LCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMsIGJ1aWxkX2lkID0gYnVpbGRfaWQpCisgICAgKGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcpID0gX3NlYXJjaF90dXBsZShyZXF1ZXN0LCBUYXNrKQorICAgIHF1ZXJ5c2V0X2FsbCA9IFRhc2sub2JqZWN0cy5maWx0ZXIoYnVpbGQ9YnVpbGRfaWQpLmV4Y2x1ZGUob3JkZXJfX2lzbnVsbD1UcnVlKS5leGNsdWRlKG91dGNvbWU9VGFzay5PVVRDT01FX05BKQorICAgIHF1ZXJ5c2V0X2FsbCA9IHF1ZXJ5c2V0X2FsbC5zZWxlY3RfcmVsYXRlZCgicmVjaXBlIiwgImJ1aWxkIikKKworICAgIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoID0gX2dldF9xdWVyeXNldChUYXNrLCBxdWVyeXNldF9hbGwsIE5vbmUgLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAnb3JkZXInKQorCisgICAgaWYgb3JkZXJpbmdfc3RyaW5nLnN0YXJ0c3dpdGgoJ291dGNvbWUnKToKKyAgICAgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KFRhc2ssIHF1ZXJ5c2V0X2FsbCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sICdvcmRlcjorJywgJ29yZGVyJykKKyAgICAgICAgcXVlcnlzZXQgPSBzb3J0ZWQocXVlcnlzZXQsIGtleT1sYW1iZGEgdXI6ICh1ci5vdXRjb21lX3RleHQpLCByZXZlcnNlPW9yZGVyaW5nX3N0cmluZy5lbmRzd2l0aCgnLScpKQorICAgIGVsaWYgb3JkZXJpbmdfc3RyaW5nLnN0YXJ0c3dpdGgoJ3NzdGF0ZV9yZXN1bHQnKToKKyAgICAgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KFRhc2ssIHF1ZXJ5c2V0X2FsbCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sICdvcmRlcjorJywgJ29yZGVyJykKKyAgICAgICAgcXVlcnlzZXQgPSBzb3J0ZWQocXVlcnlzZXQsIGtleT1sYW1iZGEgdXI6ICh1ci5zc3RhdGVfdGV4dCksIHJldmVyc2U9b3JkZXJpbmdfc3RyaW5nLmVuZHN3aXRoKCctJykpCisgICAgZWxzZToKKyAgICAgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KFRhc2ssIHF1ZXJ5c2V0X2FsbCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ29yZGVyJykKKworCisgICAgIyBjb21wdXRlIHRoZSBhbmNob3IncyBwYWdlCisgICAgaWYgYW5jaG9yOgorICAgICAgICByZXF1ZXN0LkdFVCA9IHJlcXVlc3QuR0VULmNvcHkoKQorICAgICAgICBkZWwgcmVxdWVzdC5HRVRbJ2FuY2hvciddCisgICAgICAgIGk9MAorICAgICAgICBhPWludChhbmNob3IpCisgICAgICAgIGNvdW50X3Blcl9wYWdlPWludChwYWdlc2l6ZSkKKyAgICAgICAgZm9yIHRhc2tfb2JqZWN0IGluIHF1ZXJ5c2V0Lml0ZXJhdG9yKCk6CisgICAgICAgICAgICBpZiBhID09IHRhc2tfb2JqZWN0Lm9yZGVyOgorICAgICAgICAgICAgICAgIG5ld19wYWdlPSAoaSAvIGNvdW50X3Blcl9wYWdlICkgKyAxCisgICAgICAgICAgICAgICAgcmVxdWVzdC5HRVQuX19zZXRpdGVtX18oJ3BhZ2UnLCBuZXdfcGFnZSkKKyAgICAgICAgICAgICAgICBtYW5kYXRvcnlfcGFyYW1ldGVyc1sncGFnZSddPW5ld19wYWdlCisgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKCB2YXJpYW50LCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMsIGJ1aWxkX2lkID0gYnVpbGRfaWQpCisgICAgICAgICAgICBpICs9IDEKKworICAgIHRhc2tfb2JqZWN0cyA9IF9idWlsZF9wYWdlX3JhbmdlKFBhZ2luYXRvcihxdWVyeXNldCwgcGFnZXNpemUpLHJlcXVlc3QuR0VULmdldCgncGFnZScsIDEpKQorCisgICAgIyBkZWZpbmUgKGFuZCBtb2RpZnkgYnkgdmFyaWFudHMpIHRoZSAndGFibGVjb2xzJyBtZW1iZXJzCisgICAgdGNfb3JkZXI9eworICAgICAgICAnbmFtZSc6J09yZGVyJywKKyAgICAgICAgJ3FoZWxwJzonVGhlIHJ1bm5pbmcgc2VxdWVuY2Ugb2YgZWFjaCB0YXNrIGluIHRoZSBidWlsZCcsCisgICAgICAgICdjbGNsYXNzJzogJ29yZGVyJywgJ2hpZGRlbicgOiAxLAorICAgICAgICAnb3JkZXJrZXknIDogJ29yZGVyJywKKyAgICAgICAgJ29yZGVyZmllbGQnOl9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJvcmRlciIpLAorICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJvcmRlciIpfQorICAgIGlmICd0YXNrcycgPT0gdmFyaWFudDoKKyAgICAgICAgdGNfb3JkZXJbJ2hpZGRlbiddPScwJworICAgICAgICBkZWwgdGNfb3JkZXJbJ2NsY2xhc3MnXQorCisgICAgdGNfcmVjaXBlPXsKKyAgICAgICAgJ25hbWUnOidSZWNpcGUnLAorICAgICAgICAncWhlbHAnOidUaGUgbmFtZSBvZiB0aGUgcmVjaXBlIHRvIHdoaWNoIGVhY2ggdGFzayBhcHBsaWVzJywKKyAgICAgICAgJ29yZGVya2V5JyA6ICdyZWNpcGVfX25hbWUnLAorICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJyZWNpcGVfX25hbWUiKSwKKyAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAicmVjaXBlX19uYW1lIiksCisgICAgfQorICAgIHRjX3JlY2lwZV92ZXJzaW9uPXsKKyAgICAgICAgJ25hbWUnOidSZWNpcGUgdmVyc2lvbicsCisgICAgICAgICdxaGVscCc6J1RoZSB2ZXJzaW9uIG9mIHRoZSByZWNpcGUgdG8gd2hpY2ggZWFjaCB0YXNrIGFwcGxpZXMnLAorICAgICAgICAnY2xjbGFzcyc6ICdyZWNpcGVfdmVyc2lvbicsICdoaWRkZW4nIDogMSwKKyAgICB9CisgICAgdGNfdGFzaz17CisgICAgICAgICduYW1lJzonVGFzaycsCisgICAgICAgICdxaGVscCc6J1RoZSBuYW1lIG9mIHRoZSB0YXNrJywKKyAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAidGFza19uYW1lIiksCisgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInRhc2tfbmFtZSIpLAorICAgICAgICAnb3JkZXJrZXknIDogJ3Rhc2tfbmFtZScsCisgICAgfQorICAgIHRjX2V4ZWN1dGVkPXsKKyAgICAgICAgJ25hbWUnOidFeGVjdXRlZCcsCisgICAgICAgICdxaGVscCc6IlRoaXMgdmFsdWUgdGVsbHMgeW91IGlmIGEgdGFzayBoYWQgdG8gcnVuIChleGVjdXRlZCkgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIHRhc2sgb3V0cHV0LCBvciBpZiB0aGUgb3V0cHV0IHdhcyBwcm92aWRlZCBieSBhbm90aGVyIHRhc2sgYW5kIHRoZXJlZm9yZSB0aGUgdGFzayBkaWRuJ3QgbmVlZCB0byBydW4gKG5vdCBleGVjdXRlZCkiLAorICAgICAgICAnY2xjbGFzcyc6ICdleGVjdXRlZCcsICdoaWRkZW4nIDogMCwKKyAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAidGFza19leGVjdXRlZCIpLAorICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJ0YXNrX2V4ZWN1dGVkIiksCisgICAgICAgICdvcmRlcmtleScgOiAndGFza19leGVjdXRlZCcsCisgICAgICAgICdmaWx0ZXInIDogeworICAgICAgICAgICAgICAgICAgICdjbGFzcycgOiAnZXhlY3V0ZWQnLAorICAgICAgICAgICAgICAgICAgICdsYWJlbCc6ICdTaG93OicsCisgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnRXhlY3V0ZWQgVGFza3MnLCAndGFza19leGVjdXRlZDoxJywgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHRhc2tfZXhlY3V0ZWQ9MSkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdOb3QgRXhlY3V0ZWQgVGFza3MnLCAndGFza19leGVjdXRlZDowJywgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHRhc2tfZXhlY3V0ZWQ9MCkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgIH0KKworICAgIH0KKyAgICB0Y19vdXRjb21lPXsKKyAgICAgICAgJ25hbWUnOidPdXRjb21lJywKKyAgICAgICAgJ3FoZWxwJzoiVGhpcyBjb2x1bW4gdGVsbHMgeW91IGlmICdleGVjdXRlZCcgdGFza3Mgc3VjY2VlZGVkIG9yIGZhaWxlZC4gVGhlIGNvbHVtbiBhbHNvIHRlbGxzIHlvdSB3aHkgJ25vdCBleGVjdXRlZCcgdGFza3MgZGlkIG5vdCBuZWVkIHRvIHJ1biIsCisgICAgICAgICdjbGNsYXNzJzogJ291dGNvbWUnLCAnaGlkZGVuJyA6IDAsCisgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgIm91dGNvbWUiKSwKKyAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAib3V0Y29tZSIpLAorICAgICAgICAnb3JkZXJrZXknIDogJ291dGNvbWUnLAorICAgICAgICAnZmlsdGVyJyA6IHsKKyAgICAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ291dGNvbWUnLAorICAgICAgICAgICAgICAgICAgICdsYWJlbCc6ICdTaG93OicsCisgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnU3VjY2VlZGVkIFRhc2tzJywgJ291dGNvbWU6JWQnJVRhc2suT1VUQ09NRV9TVUNDRVNTLCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIob3V0Y29tZT1UYXNrLk9VVENPTUVfU1VDQ0VTUykuY291bnQoKSwgIidTdWNjZWVkZWQnIHRhc2tzIGFyZSB0aG9zZSB0aGF0IHJhbiBhbmQgY29tcGxldGVkIGR1cmluZyB0aGUgYnVpbGQiICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdGYWlsZWQgVGFza3MnLCAnb3V0Y29tZTolZCclVGFzay5PVVRDT01FX0ZBSUxFRCwgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKG91dGNvbWU9VGFzay5PVVRDT01FX0ZBSUxFRCkuY291bnQoKSwgIidGYWlsZWQnIHRhc2tzIGFyZSB0aG9zZSB0aGF0IHJhbiBidXQgZGlkIG5vdCBjb21wbGV0ZSBkdXJpbmcgdGhlIGJ1aWxkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdDYWNoZWQgVGFza3MnLCAnb3V0Y29tZTolZCclVGFzay5PVVRDT01FX0NBQ0hFRCwgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKG91dGNvbWU9VGFzay5PVVRDT01FX0NBQ0hFRCkuY291bnQoKSwgJ0NhY2hlZCB0YXNrcyByZXN0b3JlIG91dHB1dCBmcm9tIHRoZSA8Y29kZT5zc3RhdGUtY2FjaGU8L2NvZGU+IGRpcmVjdG9yeSBvciBtaXJyb3JzJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdQcmVidWlsdCBUYXNrcycsICdvdXRjb21lOiVkJyVUYXNrLk9VVENPTUVfUFJFQlVJTFQsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihvdXRjb21lPVRhc2suT1VUQ09NRV9QUkVCVUlMVCkuY291bnQoKSwnUHJlYnVpbHQgdGFza3MgZGlkblwndCBuZWVkIHRvIHJ1biBiZWNhdXNlIHRoZWlyIG91dHB1dCB3YXMgcmV1c2VkIGZyb20gYSBwcmV2aW91cyBidWlsZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnQ292ZXJlZCBUYXNrcycsICdvdXRjb21lOiVkJyVUYXNrLk9VVENPTUVfQ09WRVJFRCwgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKG91dGNvbWU9VGFzay5PVVRDT01FX0NPVkVSRUQpLmNvdW50KCksICdDb3ZlcmVkIHRhc2tzIGRpZG5cJ3QgbmVlZCB0byBydW4gYmVjYXVzZSB0aGVpciBvdXRwdXQgaXMgcHJvdmlkZWQgYnkgYW5vdGhlciB0YXNrIGluIHRoaXMgYnVpbGQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0VtcHR5IFRhc2tzJywgJ291dGNvbWU6JWQnJVRhc2suT1VUQ09NRV9FTVBUWSwgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKG91dGNvbWU9VGFzay5PVVRDT01FX0VNUFRZKS5jb3VudCgpLCAnRW1wdHkgdGFza3MgaGF2ZSBubyBleGVjdXRhYmxlIGNvbnRlbnQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgfQorCisgICAgfQorCisgICAgdGNfY2FjaGU9eworICAgICAgICAnbmFtZSc6J0NhY2hlIGF0dGVtcHQnLAorICAgICAgICAncWhlbHAnOidUaGlzIGNvbHVtbiB0ZWxscyB5b3UgaWYgYSB0YXNrIHRyaWVkIHRvIHJlc3RvcmUgb3V0cHV0IGZyb20gdGhlIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IG9yIG1pcnJvcnMsIGFuZCByZXBvcnRzIHRoZSByZXN1bHQ6IFN1Y2NlZWRlZCwgRmFpbGVkIG9yIEZpbGUgbm90IGluIGNhY2hlJywKKyAgICAgICAgJ2NsY2xhc3MnOiAnY2FjaGVfYXR0ZW1wdCcsICdoaWRkZW4nIDogMCwKKyAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAic3N0YXRlX3Jlc3VsdCIpLAorICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJzc3RhdGVfcmVzdWx0IiksCisgICAgICAgICdvcmRlcmtleScgOiAnc3N0YXRlX3Jlc3VsdCcsCisgICAgICAgICdmaWx0ZXInIDogeworICAgICAgICAgICAgICAgICAgICdjbGFzcycgOiAnY2FjaGVfYXR0ZW1wdCcsCisgICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogJ1Nob3c6JywKKyAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdUYXNrcyB3aXRoIGNhY2hlIGF0dGVtcHRzJywgJ3NzdGF0ZV9yZXN1bHRfX2d0OiVkJyVUYXNrLlNTVEFURV9OQSwgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHNzdGF0ZV9yZXN1bHRfX2d0PVRhc2suU1NUQVRFX05BKS5jb3VudCgpLCAnU2hvdyBhbGwgdGFza3MgdGhhdCB0cmllZCB0byByZXN0b3JlIG91cHV0IGZyb20gdGhlIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IG9yIG1pcnJvcnMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIlRhc2tzIHdpdGggJ0ZpbGUgbm90IGluIGNhY2hlJyBhdHRlbXB0cyIsICdzc3RhdGVfcmVzdWx0OiVkJyVUYXNrLlNTVEFURV9NSVNTLCAgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHNzdGF0ZV9yZXN1bHQ9VGFzay5TU1RBVEVfTUlTUykuY291bnQoKSwgJ1Nob3cgdGFza3MgdGhhdCB0cmllZCB0byByZXN0b3JlIG91dHB1dCwgYnV0IGRpZCBub3QgZmluZCBpdCBpbiB0aGUgPGNvZGU+c3N0YXRlLWNhY2hlPC9jb2RlPiBkaXJlY3Rvcnkgb3IgbWlycm9ycycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiVGFza3Mgd2l0aCAnRmFpbGVkJyBjYWNoZSBhdHRlbXB0cyIsICdzc3RhdGVfcmVzdWx0OiVkJyVUYXNrLlNTVEFURV9GQUlMRUQsICBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIoc3N0YXRlX3Jlc3VsdD1UYXNrLlNTVEFURV9GQUlMRUQpLmNvdW50KCksICdTaG93IHRhc2tzIHRoYXQgZm91bmQgdGhlIHJlcXVpcmVkIG91dHB1dCBpbiB0aGUgPGNvZGU+c3N0YXRlLWNhY2hlPC9jb2RlPiBkaXJlY3Rvcnkgb3IgbWlycm9ycywgYnV0IGNvdWxkIG5vdCByZXN0b3JlIGl0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJUYXNrcyB3aXRoICdTdWNjZWVkZWQnIGNhY2hlIGF0dGVtcHRzIiwgJ3NzdGF0ZV9yZXN1bHQ6JWQnJVRhc2suU1NUQVRFX1JFU1RPUkVELCAgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHNzdGF0ZV9yZXN1bHQ9VGFzay5TU1RBVEVfUkVTVE9SRUQpLmNvdW50KCksICdTaG93IHRhc2tzIHRoYXQgc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIHRoZSByZXF1aXJlZCBvdXRwdXQgZnJvbSB0aGUgPGNvZGU+c3N0YXRlLWNhY2hlPC9jb2RlPiBkaXJlY3Rvcnkgb3IgbWlycm9ycycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICB9CisKKyAgICB9CisgICAgI2lmICAgJ3Rhc2tzJyA9PSB2YXJpYW50OiB0Y19jYWNoZVsnaGlkZGVuJ109JzAnOworICAgIHRjX3RpbWU9eworICAgICAgICAnbmFtZSc6J1RpbWUgKHNlY3MpJywKKyAgICAgICAgJ3FoZWxwJzonSG93IGxvbmcgaXQgdG9vayB0aGUgdGFzayB0byBmaW5pc2ggaW4gc2Vjb25kcycsCisgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImVsYXBzZWRfdGltZSIsIFRydWUpLAorICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJlbGFwc2VkX3RpbWUiKSwKKyAgICAgICAgJ29yZGVya2V5JyA6ICdlbGFwc2VkX3RpbWUnLAorICAgICAgICAnY2xjbGFzcyc6ICd0aW1lX3Rha2VuJywgJ2hpZGRlbicgOiAxLAorICAgIH0KKyAgICBpZiAnYnVpbGR0aW1lJyA9PSB2YXJpYW50OgorICAgICAgICB0Y190aW1lWydoaWRkZW4nXT0nMCcKKyAgICAgICAgZGVsIHRjX3RpbWVbJ2NsY2xhc3MnXQorICAgICAgICB0Y19jYWNoZVsnaGlkZGVuJ109JzEnCisKKyAgICB0Y19jcHU9eworICAgICAgICAnbmFtZSc6J0NQVSB1c2FnZScsCisgICAgICAgICdxaGVscCc6J1RoZSBwZXJjZW50YWdlIG9mIHRhc2sgQ1BVIHV0aWxpemF0aW9uJywKKyAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAiY3B1X3VzYWdlIiwgVHJ1ZSksCisgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgImNwdV91c2FnZSIpLAorICAgICAgICAnb3JkZXJrZXknIDogJ2NwdV91c2FnZScsCisgICAgICAgICdjbGNsYXNzJzogJ2NwdV91c2VkJywgJ2hpZGRlbicgOiAxLAorICAgIH0KKworICAgIGlmICAnY3B1dXNhZ2UnID09IHZhcmlhbnQ6CisgICAgICAgIHRjX2NwdVsnaGlkZGVuJ109JzAnCisgICAgICAgIGRlbCB0Y19jcHVbJ2NsY2xhc3MnXQorICAgICAgICB0Y19jYWNoZVsnaGlkZGVuJ109JzEnCisKKyAgICB0Y19kaXNraW89eworICAgICAgICAnbmFtZSc6J0Rpc2sgSS9PIChtcyknLAorICAgICAgICAncWhlbHAnOidOdW1iZXIgb2YgbWlsaXNlY29uZHMgdGhlIHRhc2sgc3BlbnQgZG9pbmcgZGlzayBpbnB1dCBhbmQgb3V0cHV0JywKKyAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAiZGlza19pbyIsIFRydWUpLAorICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJkaXNrX2lvIiksCisgICAgICAgICdvcmRlcmtleScgOiAnZGlza19pbycsCisgICAgICAgICdjbGNsYXNzJzogJ2Rpc2tfaW8nLCAnaGlkZGVuJyA6IDEsCisgICAgfQorICAgIGlmICdkaXNraW8nID09IHZhcmlhbnQ6CisgICAgICAgIHRjX2Rpc2tpb1snaGlkZGVuJ109JzAnCisgICAgICAgIGRlbCB0Y19kaXNraW9bJ2NsY2xhc3MnXQorICAgICAgICB0Y19jYWNoZVsnaGlkZGVuJ109JzEnCisKKyAgICBidWlsZCA9IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKQorCisgICAgY29udGV4dCA9IHsgJ29iamVjdG5hbWUnOiB2YXJpYW50LAorICAgICAgICAgICAgICAgICdvYmplY3Rfc2VhcmNoX2Rpc3BsYXknOiBvYmplY3Rfc2VhcmNoX2Rpc3BsYXksCisgICAgICAgICAgICAgICAgJ2ZpbHRlcl9zZWFyY2hfZGlzcGxheSc6IGZpbHRlcl9zZWFyY2hfZGlzcGxheSwKKyAgICAgICAgICAgICAgICAndGl0bGUnOiB0aXRsZV92YXJpYW50LAorICAgICAgICAgICAgICAgICdidWlsZCc6IGJ1aWxkLAorICAgICAgICAgICAgICAgICdvYmplY3RzJzogdGFza19vYmplY3RzLAorICAgICAgICAgICAgICAgICdkZWZhdWx0X29yZGVyYnknIDogb3JkZXJieSwKKyAgICAgICAgICAgICAgICAnc2VhcmNoX3Rlcm0nOiBzZWFyY2hfdGVybSwKKyAgICAgICAgICAgICAgICAndG90YWxfY291bnQnOiBxdWVyeXNldF93aXRoX3NlYXJjaC5jb3VudCgpLAorICAgICAgICAgICAgICAgICd0YWJsZWNvbHMnOlsKKyAgICAgICAgICAgICAgICAgICAgdGNfb3JkZXIsCisgICAgICAgICAgICAgICAgICAgIHRjX3JlY2lwZSwKKyAgICAgICAgICAgICAgICAgICAgdGNfcmVjaXBlX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgIHRjX3Rhc2ssCisgICAgICAgICAgICAgICAgICAgIHRjX2V4ZWN1dGVkLAorICAgICAgICAgICAgICAgICAgICB0Y19vdXRjb21lLAorICAgICAgICAgICAgICAgICAgICB0Y19jYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgdGNfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgdGNfY3B1LAorICAgICAgICAgICAgICAgICAgICB0Y19kaXNraW8sCisgICAgICAgICAgICAgICAgXX0KKworCisgICAgcmVzcG9uc2UgPSByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgX3NldF9wYXJhbWV0ZXJzX3ZhbHVlcyhwYWdlc2l6ZSwgb3JkZXJieSwgcmVxdWVzdCkKKyAgICByZXR1cm4gcmVzcG9uc2UKKworZGVmIHRhc2tzKHJlcXVlc3QsIGJ1aWxkX2lkKToKKyAgICByZXR1cm4gdGFza3NfY29tbW9uKHJlcXVlc3QsIGJ1aWxkX2lkLCAndGFza3MnLCAnJykKKworZGVmIHRhc2tzX3Rhc2socmVxdWVzdCwgYnVpbGRfaWQsIHRhc2tfaWQpOgorICAgIHJldHVybiB0YXNrc19jb21tb24ocmVxdWVzdCwgYnVpbGRfaWQsICd0YXNrcycsIHRhc2tfaWQpCisKK2RlZiBidWlsZHRpbWUocmVxdWVzdCwgYnVpbGRfaWQpOgorICAgIHJldHVybiB0YXNrc19jb21tb24ocmVxdWVzdCwgYnVpbGRfaWQsICdidWlsZHRpbWUnLCAnJykKKworZGVmIGRpc2tpbyhyZXF1ZXN0LCBidWlsZF9pZCk6CisgICAgcmV0dXJuIHRhc2tzX2NvbW1vbihyZXF1ZXN0LCBidWlsZF9pZCwgJ2Rpc2tpbycsICcnKQorCitkZWYgY3B1dXNhZ2UocmVxdWVzdCwgYnVpbGRfaWQpOgorICAgIHJldHVybiB0YXNrc19jb21tb24ocmVxdWVzdCwgYnVpbGRfaWQsICdjcHV1c2FnZScsICcnKQorCisKK2RlZiByZWNpcGVzKHJlcXVlc3QsIGJ1aWxkX2lkKToKKyAgICB0ZW1wbGF0ZSA9ICdyZWNpcGVzLmh0bWwnCisgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMTAwLCAnbmFtZTorJykKKyAgICBtYW5kYXRvcnlfcGFyYW1ldGVycyA9IHsgJ2NvdW50JzogcGFnZXNpemUsICAncGFnZScgOiAxLCAnb3JkZXJieScgOiBvcmRlcmJ5IH0KKyAgICByZXR2YWwgPSBfdmVyaWZ5X3BhcmFtZXRlcnMoIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycyApCisgICAgaWYgcmV0dmFsOgorICAgICAgICByZXR1cm4gX3JlZGlyZWN0X3BhcmFtZXRlcnMoICdyZWNpcGVzJywgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBidWlsZF9pZCA9IGJ1aWxkX2lkKQorICAgIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKSA9IF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgUmVjaXBlKQorICAgIHF1ZXJ5c2V0ID0gUmVjaXBlLm9iamVjdHMuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2lkX19pbj1MYXllcl9WZXJzaW9uLm9iamVjdHMuZmlsdGVyKGJ1aWxkPWJ1aWxkX2lkKSkuc2VsZWN0X3JlbGF0ZWQoImxheWVyX3ZlcnNpb24iLCAibGF5ZXJfdmVyc2lvbl9fbGF5ZXIiKQorICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldChSZWNpcGUsIHF1ZXJ5c2V0LCBmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAnbmFtZScpCisKKyAgICByZWNpcGVzID0gX2J1aWxkX3BhZ2VfcmFuZ2UoUGFnaW5hdG9yKHF1ZXJ5c2V0LCBwYWdlc2l6ZSkscmVxdWVzdC5HRVQuZ2V0KCdwYWdlJywgMSkpCisKKyAgICAjIHByZWZldGNoIHRoZSBmb3J3YXJkIGFuZCByZXZlcnNlIHJlY2lwZSBkZXBlbmRlbmNpZXMKKyAgICBkZXBzID0geyB9CisgICAgcmV2cyA9IHsgfQorICAgIHF1ZXJ5c2V0X2RlcGVuZGVuY3k9UmVjaXBlX0RlcGVuZGVuY3kub2JqZWN0cy5maWx0ZXIocmVjaXBlX19sYXllcl92ZXJzaW9uX19idWlsZF9pZCA9IGJ1aWxkX2lkKS5zZWxlY3RfcmVsYXRlZCgiZGVwZW5kc19vbiIsICJyZWNpcGUiKQorICAgIGZvciByZWNpcGUgaW4gcmVjaXBlczoKKyAgICAgICAgZGVwbGlzdCA9IFsgXQorICAgICAgICBmb3IgcmVjaXBlX2RlcCBpbiBbeCBmb3IgeCBpbiBxdWVyeXNldF9kZXBlbmRlbmN5IGlmIHgucmVjaXBlX2lkID09IHJlY2lwZS5pZF06CisgICAgICAgICAgICBkZXBsaXN0LmFwcGVuZChyZWNpcGVfZGVwKQorICAgICAgICBkZXBzW3JlY2lwZS5pZF0gPSBkZXBsaXN0CisgICAgICAgIHJldmxpc3QgPSBbIF0KKyAgICAgICAgZm9yIHJlY2lwZV9kZXAgaW4gW3ggZm9yIHggaW4gcXVlcnlzZXRfZGVwZW5kZW5jeSBpZiB4LmRlcGVuZHNfb25faWQgPT0gcmVjaXBlLmlkXToKKyAgICAgICAgICAgIHJldmxpc3QuYXBwZW5kKHJlY2lwZV9kZXApCisgICAgICAgIHJldnNbcmVjaXBlLmlkXSA9IHJldmxpc3QKKworICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpCisKKyAgICBjb250ZXh0ID0geworICAgICAgICAnb2JqZWN0bmFtZSc6ICdyZWNpcGVzJywKKyAgICAgICAgJ2J1aWxkJzogYnVpbGQsCisgICAgICAgICdvYmplY3RzJzogcmVjaXBlcywKKyAgICAgICAgJ2RlZmF1bHRfb3JkZXJieScgOiAnbmFtZTorJywKKyAgICAgICAgJ3JlY2lwZV9kZXBzJyA6IGRlcHMsCisgICAgICAgICdyZWNpcGVfcmV2cycgOiByZXZzLAorICAgICAgICAndGFibGVjb2xzJzpbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidSZWNpcGUnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J0luZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIHBpZWNlIG9mIHNvZnR3YXJlLCBpbmNsdWRpbmcgd2hlcmUgdG8gZG93bmxvYWQgdGhlIHNvdXJjZSwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBob3cgdG8gY29tcGlsZSB0aGUgc291cmNlIGZpbGVzIGFuZCBob3cgdG8gcGFja2FnZSB0aGUgY29tcGlsZWQgb3V0cHV0JywKKyAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJuYW1lIiksCisgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAibmFtZSIpLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6J1JlY2lwZSB2ZXJzaW9uJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgcmVjaXBlIHZlcnNpb24gYW5kIHJldmlzaW9uJywKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidEZXBlbmRlbmNpZXMnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1JlY2lwZSBidWlsZC10aW1lIGRlcGVuZGVuY2llcyAoaS5lLiBvdGhlciByZWNpcGVzKScsCisgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAnZGVwZW5kc19vbicsICdoaWRkZW4nOiAxLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6J1JldmVyc2UgZGVwZW5kZW5jaWVzJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidSZWNpcGUgYnVpbGQtdGltZSByZXZlcnNlIGRlcGVuZGVuY2llcyAoaS5lLiB0aGUgcmVjaXBlcyB0aGF0IGRlcGVuZCBvbiB0aGlzIHJlY2lwZSknLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ2RlcGVuZHNfYnknLCAnaGlkZGVuJzogMSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidSZWNpcGUgZmlsZScsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonUGF0aCB0byB0aGUgcmVjaXBlIC5iYiBmaWxlJywKKyAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJmaWxlX3BhdGgiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJmaWxlX3BhdGgiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ2ZpbGVfcGF0aCcsCisgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAncmVjaXBlX2ZpbGUnLCAnaGlkZGVuJzogMCwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidTZWN0aW9uJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgc2VjdGlvbiBpbiB3aGljaCByZWNpcGVzIHNob3VsZCBiZSBjYXRlZ29yaXplZCcsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAic2VjdGlvbiIpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInNlY3Rpb24iKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ3NlY3Rpb24nLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ3JlY2lwZV9zZWN0aW9uJywgJ2hpZGRlbic6IDAsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonTGljZW5zZScsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIGxpc3Qgb2Ygc291cmNlIGxpY2Vuc2VzIGZvciB0aGUgcmVjaXBlLiBNdWx0aXBsZSBsaWNlbnNlIG5hbWVzIHNlcGFyYXRlZCBieSB0aGUgcGlwZSBjaGFyYWN0ZXIgaW5kaWNhdGVzIGEgY2hvaWNlIGJldHdlZW4gbGljZW5zZXMuIE11bHRpcGxlIGxpY2Vuc2UgbmFtZXMgc2VwYXJhdGVkIGJ5IHRoZSBhbXBlcnNhbmQgY2hhcmFjdGVyIGluZGljYXRlcyBtdWx0aXBsZSBsaWNlbnNlcyBleGlzdCB0aGF0IGNvdmVyIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc291cmNlJywKKyAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJsaWNlbnNlIiksCisgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAibGljZW5zZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAnbGljZW5zZScsCisgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAncmVjaXBlX2xpY2Vuc2UnLCAnaGlkZGVuJzogMCwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidMYXllcicsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIG5hbWUgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlJywKKyAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgImxheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIiksCisgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZScsCisgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAnbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUnLCAnaGlkZGVuJzogMCwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidMYXllciBicmFuY2gnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBHaXQgYnJhbmNoIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZScsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAibGF5ZXJfdmVyc2lvbl9fYnJhbmNoIiksCisgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAibGF5ZXJfdmVyc2lvbl9fYnJhbmNoIiksCisgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdsYXllcl92ZXJzaW9uX19icmFuY2gnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ2xheWVyX3ZlcnNpb25fX2JyYW5jaCcsICdoaWRkZW4nOiAxLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6J0xheWVyIGNvbW1pdCcsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIEdpdCBjb21taXQgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlJywKKyAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdsYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0JywgJ2hpZGRlbic6IDEsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgXQorICAgICAgICB9CisKKyAgICByZXNwb25zZSA9IHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKyAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQorICAgIHJldHVybiByZXNwb25zZQorCitkZWYgY29uZmlndXJhdGlvbihyZXF1ZXN0LCBidWlsZF9pZCk6CisgICAgdGVtcGxhdGUgPSAnY29uZmlndXJhdGlvbi5odG1sJworCisgICAgdmFyX25hbWVzID0gKCdCQl9WRVJTSU9OJywgJ0JVSUxEX1NZUycsICdOQVRJVkVMU0JTVFJJTkcnLCAnVEFSR0VUX1NZUycsCisgICAgICAgICAgICAgICAgICdNQUNISU5FJywgJ0RJU1RSTycsICdESVNUUk9fVkVSU0lPTicsICdUVU5FX0ZFQVRVUkVTJywgJ1RBUkdFVF9GUFUnKQorICAgIGNvbnRleHQgPSBkaWN0KFZhcmlhYmxlLm9iamVjdHMuZmlsdGVyKGJ1aWxkPWJ1aWxkX2lkLCB2YXJpYWJsZV9uYW1lX19pbj12YXJfbmFtZXMpXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZXNfbGlzdCgndmFyaWFibGVfbmFtZScsICd2YXJpYWJsZV92YWx1ZScpKQorICAgIGNvbnRleHQudXBkYXRlKHsnb2JqZWN0bmFtZSc6ICdjb25maWd1cmF0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgJ29iamVjdF9zZWFyY2hfZGlzcGxheSc6J3ZhcmlhYmxlcycsCisgICAgICAgICAgICAgICAgICAgICdmaWx0ZXJfc2VhcmNoX2Rpc3BsYXknOid2YXJpYWJsZXMnLAorICAgICAgICAgICAgICAgICAgICAnYnVpbGQnOiBCdWlsZC5vYmplY3RzLmdldChwaz1idWlsZF9pZCksCisgICAgICAgICAgICAgICAgICAgICd0YXJnZXRzJzogVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKGJ1aWxkPWJ1aWxkX2lkKX0pCisgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKworCitkZWYgY29uZmlndmFycyhyZXF1ZXN0LCBidWlsZF9pZCk6CisgICAgdGVtcGxhdGUgPSAnY29uZmlndmFycy5odG1sJworICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDEwMCwgJ3ZhcmlhYmxlX25hbWU6KycpCisgICAgbWFuZGF0b3J5X3BhcmFtZXRlcnMgPSB7ICdjb3VudCc6IHBhZ2VzaXplLCAgJ3BhZ2UnIDogMSwgJ29yZGVyYnknIDogb3JkZXJieSwgJ2ZpbHRlcicgOiAnZGVzY3JpcHRpb25fX3JlZ2V4Oi4rJyB9CisgICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQorICAgIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKSA9IF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgVmFyaWFibGUpCisgICAgaWYgcmV0dmFsOgorICAgICAgICAjIGlmIG5ldyBzZWFyY2gsIGNsZWFyIHRoZSBkZWZhdWx0IGZpbHRlcgorICAgICAgICBpZiBzZWFyY2hfdGVybSBhbmQgbGVuKHNlYXJjaF90ZXJtKToKKyAgICAgICAgICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzWydmaWx0ZXInXT0nJworICAgICAgICByZXR1cm4gX3JlZGlyZWN0X3BhcmFtZXRlcnMoICdjb25maWd2YXJzJywgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBidWlsZF9pZCA9IGJ1aWxkX2lkKQorCisgICAgcXVlcnlzZXQgPSBWYXJpYWJsZS5vYmplY3RzLmZpbHRlcihidWlsZD1idWlsZF9pZCkuZXhjbHVkZSh2YXJpYWJsZV9uYW1lX19pc3RhcnRzd2l0aD0nQl8nKS5leGNsdWRlKHZhcmlhYmxlX25hbWVfX2lzdGFydHN3aXRoPSdkb18nKQorICAgIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoID0gIF9nZXRfcXVlcnlzZXQoVmFyaWFibGUsIHF1ZXJ5c2V0LCBOb25lLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAndmFyaWFibGVfbmFtZScpLmV4Y2x1ZGUodmFyaWFibGVfdmFsdWU9Jycsdmhpc3RvcnlfX2ZpbGVfbmFtZV9faXNudWxsPVRydWUpCisgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KFZhcmlhYmxlLCBxdWVyeXNldCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ3ZhcmlhYmxlX25hbWUnKQorICAgICMgcmVtb3ZlIHJlY29yZHMgd2hlcmUgdGhlIHZhbHVlIGlzIGVtcHR5IEFORCB0aGVyZSBhcmUgbm8gaGlzdG9yeSBmaWxlcworICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQuZXhjbHVkZSh2YXJpYWJsZV92YWx1ZT0nJyx2aGlzdG9yeV9fZmlsZV9uYW1lX19pc251bGw9VHJ1ZSkKKworICAgIHZhcmlhYmxlcyA9IF9idWlsZF9wYWdlX3JhbmdlKFBhZ2luYXRvcihxdWVyeXNldCwgcGFnZXNpemUpLCByZXF1ZXN0LkdFVC5nZXQoJ3BhZ2UnLCAxKSkKKworICAgICMgc2hvdyBhbGwgbWF0Y2hpbmcgZmlsZXMgKG5vdCBqdXN0IHRoZSBsYXN0IG9uZSkKKyAgICBmaWxlX2ZpbHRlcj0gc2VhcmNoX3Rlcm0gKyAiOiIKKyAgICBpZiBmaWx0ZXJfc3RyaW5nLmZpbmQoJy9jb25mLycpID4gMDoKKyAgICAgICAgZmlsZV9maWx0ZXIgKz0gJ2NvbmYvKGxvY2FsfGJibGF5ZXJzKS5jb25mJworICAgIGlmIGZpbHRlcl9zdHJpbmcuZmluZCgnY29uZi9tYWNoaW5lLycpID4gMDoKKyAgICAgICAgZmlsZV9maWx0ZXIgKz0gJ2NvbmYvbWFjaGluZS8nCisgICAgaWYgZmlsdGVyX3N0cmluZy5maW5kKCdjb25mL2Rpc3Ryby8nKSA+IDA6CisgICAgICAgIGZpbGVfZmlsdGVyICs9ICdjb25mL2Rpc3Ryby8nCisgICAgaWYgZmlsdGVyX3N0cmluZy5maW5kKCcvYml0YmFrZS5jb25mJykgPiAwOgorICAgICAgICBmaWxlX2ZpbHRlciArPSAnL2JpdGJha2UuY29uZicKKyAgICBidWlsZF9kaXI9cmUuc3ViKCIvdG1wL2xvZy8uKiIsIiIsQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpLmNvb2tlcl9sb2dfcGF0aCkKKworICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAgICAgJ29iamVjdG5hbWUnOiAnY29uZmlndmFycycsCisgICAgICAgICAgICAgICAgJ29iamVjdF9zZWFyY2hfZGlzcGxheSc6J0JpdEJha2UgdmFyaWFibGVzJywKKyAgICAgICAgICAgICAgICAnZmlsdGVyX3NlYXJjaF9kaXNwbGF5JzondmFyaWFibGVzJywKKyAgICAgICAgICAgICAgICAnZmlsZV9maWx0ZXInOiBmaWxlX2ZpbHRlciwKKyAgICAgICAgICAgICAgICAnYnVpbGQnOiBCdWlsZC5vYmplY3RzLmdldChwaz1idWlsZF9pZCksCisgICAgICAgICAgICAgICAgJ29iamVjdHMnIDogdmFyaWFibGVzLAorICAgICAgICAgICAgICAgICd0b3RhbF9jb3VudCc6cXVlcnlzZXRfd2l0aF9zZWFyY2guY291bnQoKSwKKyAgICAgICAgICAgICAgICAnZGVmYXVsdF9vcmRlcmJ5JyA6ICd2YXJpYWJsZV9uYW1lOisnLAorICAgICAgICAgICAgICAgICdzZWFyY2hfdGVybSc6c2VhcmNoX3Rlcm0sCisgICAgICAgICAgICAjIFNwZWNpZmllcyB0aGUgZGlzcGxheSBvZiBjb2x1bW5zIGZvciB0aGUgdGFibGUsIGFwcGVhcmFuY2UgaW4gIkVkaXQgY29sdW1ucyIgYm94LCB0b2dnbGluZyBkZWZhdWx0IHNob3cvaGlkZSwgYW5kIHNwZWNpZnlpbmcgZmlsdGVycyBmb3IgY29sdW1ucworICAgICAgICAgICAgICAgICd0YWJsZWNvbHMnIDogWworICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdWYXJpYWJsZScsCisgICAgICAgICAgICAgICAgICdxaGVscCc6ICJCaXRCYWtlIGlzIGEgZ2VuZXJpYyB0YXNrIGV4ZWN1dG9yIHRoYXQgY29uc2lkZXJzIGEgbGlzdCBvZiB0YXNrcyB3aXRoIGRlcGVuZGVuY2llcyBhbmQgaGFuZGxlcyBtZXRhZGF0YSB0aGF0IGNvbnNpc3RzIG9mIHZhcmlhYmxlcyBpbiBhIGNlcnRhaW4gZm9ybWF0IHRoYXQgZ2V0IHBhc3NlZCB0byB0aGUgdGFza3MiLAorICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJ2YXJpYWJsZV9uYW1lIiksCisgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInZhcmlhYmxlX25hbWUiKSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdWYWx1ZScsCisgICAgICAgICAgICAgICAgICdxaGVscCc6ICJUaGUgdmFsdWUgYXNzaWduZWQgdG8gdGhlIHZhcmlhYmxlIiwKKyAgICAgICAgICAgICAgICAgJ2RjbGFzcyc6ICJzcGFuNCIsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7J25hbWUnOiAnU2V0IGluIGZpbGUnLAorICAgICAgICAgICAgICAgICAncWhlbHAnOiAiVGhlIGxhc3QgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgdG91Y2hlZCB0aGUgdmFyaWFibGUgdmFsdWUiLAorICAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdmaWxlJywgJ2hpZGRlbicgOiAwLAorICAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ3ZoaXN0b3J5X19maWxlX25hbWUnLAorICAgICAgICAgICAgICAgICAnZmlsdGVyJyA6IHsKKyAgICAgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICd2aGlzdG9yeV9fZmlsZV9uYW1lJywKKyAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogJ1Nob3c6JywKKyAgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnTG9jYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMnLCAndmhpc3RvcnlfX2ZpbGVfbmFtZV9fY29udGFpbnM6JytidWlsZF9kaXIrJy9jb25mLycscXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHZoaXN0b3J5X19maWxlX25hbWVfX2NvbnRhaW5zPWJ1aWxkX2RpcisnL2NvbmYvJykuY291bnQoKSwgJ1NlbGVjdCB0aGlzIGZpbHRlciB0byBzZWUgdmFyaWFibGVzIHNldCBieSB0aGUgPGNvZGU+bG9jYWwuY29uZjwvY29kZT4gYW5kIDxjb2RlPmJibGF5ZXJzLmNvbmY8L2NvZGU+IGNvbmZpZ3VyYXRpb24gZmlsZXMgaW5zaWRlIHRoZSA8Y29kZT4vYnVpbGQvY29uZi88L2NvZGU+IGRpcmVjdG9yeScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnTWFjaGluZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcycsICd2aGlzdG9yeV9fZmlsZV9uYW1lX19jb250YWluczpjb25mL21hY2hpbmUvJyxxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIodmhpc3RvcnlfX2ZpbGVfbmFtZV9fY29udGFpbnM9J2NvbmYvbWFjaGluZScpLmNvdW50KCksICdTZWxlY3QgdGhpcyBmaWx0ZXIgdG8gc2VlIHZhcmlhYmxlcyBzZXQgYnkgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZShzKSBpbnNpZGUgeW91ciBsYXllcnMgPGNvZGU+L2NvbmYvbWFjaGluZS88L2NvZGU+IGRpcmVjdG9yeScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnRGlzdHJvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzJywgJ3ZoaXN0b3J5X19maWxlX25hbWVfX2NvbnRhaW5zOmNvbmYvZGlzdHJvLycscXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHZoaXN0b3J5X19maWxlX25hbWVfX2NvbnRhaW5zPSdjb25mL2Rpc3RybycpLmNvdW50KCksICdTZWxlY3QgdGhpcyBmaWx0ZXIgdG8gc2VlIHZhcmlhYmxlcyBzZXQgYnkgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZShzKSBpbnNpZGUgeW91ciBsYXllcnMgPGNvZGU+L2NvbmYvZGlzdHJvLzwvY29kZT4gZGlyZWN0b3J5JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdMYXllciBjb25maWd1cmF0aW9uIHZhcmlhYmxlcycsICd2aGlzdG9yeV9fZmlsZV9uYW1lX19jb250YWluczpjb25mL2xheWVyLmNvbmYnLHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcih2aGlzdG9yeV9fZmlsZV9uYW1lX19jb250YWlucz0nY29uZi9sYXllci5jb25mJykuY291bnQoKSwgJ1NlbGVjdCB0aGlzIGZpbHRlciB0byBzZWUgdmFyaWFibGVzIHNldCBieSB0aGUgPGNvZGU+bGF5ZXIuY29uZjwvY29kZT4gY29uZmlndXJhdGlvbiBmaWxlIGluc2lkZSB5b3VyIGxheWVycycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYml0YmFrZS5jb25mIHZhcmlhYmxlcycsICd2aGlzdG9yeV9fZmlsZV9uYW1lX19jb250YWluczovYml0YmFrZS5jb25mJyxxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIodmhpc3RvcnlfX2ZpbGVfbmFtZV9fY29udGFpbnM9Jy9iaXRiYWtlLmNvbmYnKS5jb3VudCgpLCAnU2VsZWN0IHRoaXMgZmlsdGVyIHRvIHNlZSB2YXJpYWJsZXMgc2V0IGJ5IHRoZSA8Y29kZT5iaXRiYWtlLmNvbmY8L2NvZGU+IGNvbmZpZ3VyYXRpb24gZmlsZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdEZXNjcmlwdGlvbicsCisgICAgICAgICAgICAgICAgICdxaGVscCc6ICJBIGJyaWVmIGV4cGxhbmF0aW9uIG9mIHRoZSB2YXJpYWJsZSIsCisgICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ2Rlc2NyaXB0aW9uJywgJ2hpZGRlbicgOiAwLAorICAgICAgICAgICAgICAgICAnZGNsYXNzJzogInNwYW40IiwKKyAgICAgICAgICAgICAgICAgJ2ZpbHRlcicgOiB7CisgICAgICAgICAgICAgICAgICAgICdjbGFzcycgOiAnZGVzY3JpcHRpb24nLAorICAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiAnU2hvdzonLAorICAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdWYXJpYWJsZXMgd2l0aCBkZXNjcmlwdGlvbicsICdkZXNjcmlwdGlvbl9fcmVnZXg6LisnLCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIoZGVzY3JpcHRpb25fX3JlZ2V4PScuKycpLmNvdW50KCksICdXZSBwcm92aWRlIGRlc2NyaXB0aW9ucyBmb3IgdGhlIG1vc3QgY29tbW9uIEJpdEJha2UgdmFyaWFibGVzLiBUaGUgbGlzdCBvZiBkZXNjcmlwdGlvbnMgbGl2ZXMgaW4gPGNvZGU+bWV0YS9jb25mL2RvY3VtZW50YXRpb24uY29uZjwvY29kZT4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICB9CisKKyAgICByZXNwb25zZSA9IHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKyAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQorICAgIHJldHVybiByZXNwb25zZQorCitkZWYgYnBhY2thZ2UocmVxdWVzdCwgYnVpbGRfaWQpOgorICAgIHRlbXBsYXRlID0gJ2JwYWNrYWdlLmh0bWwnCisgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMTAwLCAnbmFtZTorJykKKyAgICBtYW5kYXRvcnlfcGFyYW1ldGVycyA9IHsgJ2NvdW50JyA6IHBhZ2VzaXplLCAgJ3BhZ2UnIDogMSwgJ29yZGVyYnknIDogb3JkZXJieSB9CisgICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKCAncGFja2FnZXMnLCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMsIGJ1aWxkX2lkID0gYnVpbGRfaWQpCisgICAgKGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcpID0gX3NlYXJjaF90dXBsZShyZXF1ZXN0LCBQYWNrYWdlKQorICAgIHF1ZXJ5c2V0ID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcihidWlsZCA9IGJ1aWxkX2lkKS5maWx0ZXIoc2l6ZV9fZ3RlPTApCisgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KFBhY2thZ2UsIHF1ZXJ5c2V0LCBmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAnbmFtZScpCisKKyAgICBwYWNrYWdlcyA9IF9idWlsZF9wYWdlX3JhbmdlKFBhZ2luYXRvcihxdWVyeXNldCwgcGFnZXNpemUpLHJlcXVlc3QuR0VULmdldCgncGFnZScsIDEpKQorCisgICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmdldCggcGsgPSBidWlsZF9pZCApCisKKyAgICBjb250ZXh0ID0geworICAgICAgICAnb2JqZWN0bmFtZSc6ICdwYWNrYWdlcyBidWlsdCcsCisgICAgICAgICdidWlsZCc6IGJ1aWxkLAorICAgICAgICAnb2JqZWN0cycgOiBwYWNrYWdlcywKKyAgICAgICAgJ2RlZmF1bHRfb3JkZXJieScgOiAnbmFtZTorJywKKyAgICAgICAgJ3RhYmxlY29scyc6WworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonUGFja2FnZScsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonUGFja2FnZWQgb3V0cHV0IHJlc3VsdGluZyBmcm9tIGJ1aWxkaW5nIGEgcmVjaXBlJywKKyAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJuYW1lIiksCisgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAibmFtZSIpLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6J1BhY2thZ2UgdmVyc2lvbicsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIHBhY2thZ2UgdmVyc2lvbiBhbmQgcmV2aXNpb24nLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6J1NpemUnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBzaXplIG9mIHRoZSBwYWNrYWdlJywKKyAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJzaXplIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAic2l6ZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAnc2l6ZScsCisgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAnc2l6ZScsICdoaWRkZW4nOiAwLAorICAgICAgICAgICAgICAgICdkY2xhc3MnIDogJ3NwYW4yJywKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidMaWNlbnNlJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgbGljZW5zZSB1bmRlciB3aGljaCB0aGUgcGFja2FnZSBpcyBkaXN0cmlidXRlZC4gTXVsdGlwbGUgbGljZW5zZSBuYW1lcyBzZXBhcmF0ZWQgYnkgdGhlIHBpcGUgY2hhcmFjdGVyIGluZGljYXRlcyBhIGNob2ljZSBiZXR3ZWVuIGxpY2Vuc2VzLiBNdWx0aXBsZSBsaWNlbnNlIG5hbWVzIHNlcGFyYXRlZCBieSB0aGUgYW1wZXJzYW5kIGNoYXJhY3RlciBpbmRpY2F0ZXMgbXVsdGlwbGUgbGljZW5zZXMgZXhpc3QgdGhhdCBjb3ZlciBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHNvdXJjZScsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAibGljZW5zZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgImxpY2Vuc2UiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ2xpY2Vuc2UnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ2xpY2Vuc2UnLCAnaGlkZGVuJzogMSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidSZWNpcGUnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBuYW1lIG9mIHRoZSByZWNpcGUgYnVpbGRpbmcgdGhlIHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInJlY2lwZV9fbmFtZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInJlY2lwZV9fbmFtZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAncmVjaXBlX19uYW1lJywKKyAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdyZWNpcGVfX25hbWUnLCAnaGlkZGVuJzogMCwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidSZWNpcGUgdmVyc2lvbicsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonVmVyc2lvbiBhbmQgcmV2aXNpb24gb2YgdGhlIHJlY2lwZSBidWlsZGluZyB0aGUgcGFja2FnZScsCisgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAncmVjaXBlX192ZXJzaW9uJywgJ2hpZGRlbic6IDEsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonTGF5ZXInLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBuYW1lIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSB0aGF0IGJ1aWxkcyB0aGUgcGFja2FnZScsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAicmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUnLCAnaGlkZGVuJzogMSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidMYXllciBicmFuY2gnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBHaXQgYnJhbmNoIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSB0aGF0IGJ1aWxkcyB0aGUgcGFja2FnZScsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAicmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2giKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2JyYW5jaCIpLAorICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAncmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2gnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoJywgJ2hpZGRlbic6IDEsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonTGF5ZXIgY29tbWl0JywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgR2l0IGNvbW1pdCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhlIHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX2NvbW1pdCcsICdoaWRkZW4nOiAxLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorCisgICAgcmVzcG9uc2UgPSByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgX3NldF9wYXJhbWV0ZXJzX3ZhbHVlcyhwYWdlc2l6ZSwgb3JkZXJieSwgcmVxdWVzdCkKKyAgICByZXR1cm4gcmVzcG9uc2UKKworZGVmIGJmaWxlKHJlcXVlc3QsIGJ1aWxkX2lkLCBwYWNrYWdlX2lkKToKKyAgICB0ZW1wbGF0ZSA9ICdiZmlsZS5odG1sJworICAgIGZpbGVzID0gUGFja2FnZV9GaWxlLm9iamVjdHMuZmlsdGVyKHBhY2thZ2UgPSBwYWNrYWdlX2lkKQorICAgIGNvbnRleHQgPSB7J2J1aWxkJzogQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpLCAnb2JqZWN0cycgOiBmaWxlc30KKyAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorCisKKyMgQSBzZXQgb2YgZGVwZW5kZW5jeSB0eXBlcyB2YWxpZCBmb3IgYm90aCBpbmNsdWRlZCBhbmQgYnVpbHQgcGFja2FnZSB2aWV3cworT1RIRVJfREVQRU5EU19CQVNFID0gWworICAgIFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1JTVUdHRVNUUywKKyAgICBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SUFJPVklERVMsCisgICAgUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUlJFUExBQ0VTLAorICAgIFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1JDT05GTElDVFMsCisgICAgXQorCisjIHZhbHVlIGZvciBpbnZhbGlkIHJvdyBpZAorSU5WQUxJRF9LRVkgPSAtMQorCisiIiIKK0dpdmVuIGEgcGFja2FnZSBpZCwgdGFyZ2V0X2lkIHJldHJpZXZlcyB0d28gc2V0cyBvZiB0aGlzIGltYWdlIGFuZCBwYWNrYWdlJ3MKK2RlcGVuZGVuY2llcy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBkaWN0aW9uYXJ5IGNvbnNpc3Rpbmcgb2YgdHdvIG90aGVyCitsaXN0czogYSBsaXN0IG9mICdydW50aW1lJyBkZXBlbmRlbmNpZXMsIHRoYXQgaXMsIGhhdmluZyBSREVQRU5EUwordmFsdWVzIGluIHNvdXJjZSBwYWNrYWdlJ3MgcmVjaXBlLCBhbmQgYSBsaXN0IG9mIG90aGVyIGRlcGVuZGVuY2llcywgdGhhdCBpcwordGhlIGxpc3Qgb2YgcG9zc2libGUgcmVjaXBlIHZhcmlhYmxlcyBhcyBmb3VuZCBpbiBPVEhFUl9ERVBFTkRTX0JBU0UgcGx1cwordGhlIFJSRUNPTU1FTkRTIG9yIFRSRUNPTU1FTkRTIHZhbHVlLgorVGhlIGxpc3RzIGFyZSBidWlsdCBpbiB0aGUgc29ydCBvcmRlciBzcGVjaWZpZWQgZm9yIHRoZSBwYWNrYWdlIHJ1bnRpbWUKK2RlcGVuZGVuY3kgdmlld3MuCisiIiIKK2RlZiBfZ2V0X3BhY2thZ2VfZGVwZW5kZW5jaWVzKHBhY2thZ2VfaWQsIHRhcmdldF9pZCA9IElOVkFMSURfS0VZKToKKyAgICBydW50aW1lX2RlcHMgPSBbXQorICAgIG90aGVyX2RlcHMgPSBbXQorICAgIG90aGVyX2RlcGVuZHNfdHlwZXMgPSBPVEhFUl9ERVBFTkRTX0JBU0UKKworICAgIGlmIHRhcmdldF9pZCAhPSBJTlZBTElEX0tFWSA6CisgICAgICAgIHJkZXBlbmRzX3R5cGUgPSBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9UUkRFUEVORFMKKyAgICAgICAgb3RoZXJfZGVwZW5kc190eXBlcyArPSAgW1BhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1RSRUNPTU1FTkRTXQorICAgIGVsc2UgOgorICAgICAgICByZGVwZW5kc190eXBlID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUkRFUEVORFMKKyAgICAgICAgb3RoZXJfZGVwZW5kc190eXBlcyArPSBbUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUlJFQ09NTUVORFNdCisKKyAgICBwYWNrYWdlID0gUGFja2FnZS5vYmplY3RzLmdldChwaz1wYWNrYWdlX2lkKQorICAgIGlmIHRhcmdldF9pZCAhPSBJTlZBTElEX0tFWSA6CisgICAgICAgIGFsbGRlcHMgPSBwYWNrYWdlLnBhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZS5maWx0ZXIodGFyZ2V0X2lkX19leGFjdCA9IHRhcmdldF9pZCkKKyAgICBlbHNlIDoKKyAgICAgICAgYWxsZGVwcyA9IHBhY2thZ2UucGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlLmFsbCgpCisgICAgZm9yIGlkZXAgaW4gYWxsZGVwczoKKyAgICAgICAgZGVwX3BhY2thZ2UgPSBQYWNrYWdlLm9iamVjdHMuZ2V0KHBrPWlkZXAuZGVwZW5kc19vbl9pZCkKKyAgICAgICAgZGVwX2VudHJ5ID0gUGFja2FnZV9EZXBlbmRlbmN5LkRFUEVORFNfRElDVFtpZGVwLmRlcF90eXBlXQorICAgICAgICBpZiBkZXBfcGFja2FnZS52ZXJzaW9uID09ICcnIDoKKyAgICAgICAgICAgIHZlcnNpb24gPSAnJworICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgIHZlcnNpb24gPSBkZXBfcGFja2FnZS52ZXJzaW9uICsgIi0iICsgZGVwX3BhY2thZ2UucmV2aXNpb24KKyAgICAgICAgaW5zdGFsbGVkID0gRmFsc2UKKyAgICAgICAgaWYgdGFyZ2V0X2lkICE9IElOVkFMSURfS0VZIDoKKyAgICAgICAgICAgIGlmIFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZS5vYmplY3RzLmZpbHRlcih0YXJnZXRfaWRfX2V4YWN0ID0gdGFyZ2V0X2lkLCBwYWNrYWdlX2lkX19leGFjdCA9IGRlcF9wYWNrYWdlLmlkKS5jb3VudCgpID4gMDoKKyAgICAgICAgICAgICAgICBpbnN0YWxsZWQgPSBUcnVlCisgICAgICAgIGRlcCA9ICAgeworICAgICAgICAgICAgICAgICduYW1lJyA6IGRlcF9wYWNrYWdlLm5hbWUsCisgICAgICAgICAgICAgICAgJ3ZlcnNpb24nIDogdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAnc2l6ZScgOiBkZXBfcGFja2FnZS5zaXplLAorICAgICAgICAgICAgICAgICdkZXBfdHlwZScgOiBpZGVwLmRlcF90eXBlLAorICAgICAgICAgICAgICAgICdkZXBfdHlwZV9kaXNwbGF5JyA6IGRlcF9lbnRyeVswXS5jYXBpdGFsaXplKCksCisgICAgICAgICAgICAgICAgJ2RlcF90eXBlX2hlbHAnIDogZGVwX2VudHJ5WzFdICUgKGRlcF9wYWNrYWdlLm5hbWUsIHBhY2thZ2UubmFtZSksCisgICAgICAgICAgICAgICAgJ2RlcGVuZHNfb25faWQnIDogZGVwX3BhY2thZ2UuaWQsCisgICAgICAgICAgICAgICAgJ2luc3RhbGxlZCcgOiBpbnN0YWxsZWQsCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgIGlmIHRhcmdldF9pZCAhPSBJTlZBTElEX0tFWToKKyAgICAgICAgICAgICAgICBkZXBbJ2FsaWFzJ10gPSBfZ2V0X3BhY2thZ2VfYWxpYXMoZGVwX3BhY2thZ2UpCisKKyAgICAgICAgaWYgaWRlcC5kZXBfdHlwZSA9PSByZGVwZW5kc190eXBlIDoKKyAgICAgICAgICAgIHJ1bnRpbWVfZGVwcy5hcHBlbmQoZGVwKQorICAgICAgICBlbGlmIGlkZXAuZGVwX3R5cGUgaW4gb3RoZXJfZGVwZW5kc190eXBlcyA6CisgICAgICAgICAgICBvdGhlcl9kZXBzLmFwcGVuZChkZXApCisKKyAgICByZGVwX3NvcnRlZCA9IHNvcnRlZChydW50aW1lX2RlcHMsIGtleT1sYW1iZGEgazoga1snbmFtZSddKQorICAgIG9kZXBfc29ydGVkID0gc29ydGVkKAorICAgICAgICAgICAgc29ydGVkKG90aGVyX2RlcHMsIGtleT1sYW1iZGEgazoga1snbmFtZSddKSwKKyAgICAgICAgICAgIGtleT1sYW1iZGEgazoga1snZGVwX3R5cGUnXSkKKyAgICByZXR2YWx1ZXMgPSB7J3J1bnRpbWVfZGVwcycgOiByZGVwX3NvcnRlZCwgJ290aGVyX2RlcHMnIDogb2RlcF9zb3J0ZWR9CisgICAgcmV0dXJuIHJldHZhbHVlcworCisjIFJldHVybiB0aGUgY291bnQgb2YgcGFja2FnZXMgZGVwZW5kZW50IG9uIHBhY2thZ2UgZm9yIHRoaXMgdGFyZ2V0X2lkIGltYWdlCitkZWYgX2dldF9wYWNrYWdlX3JldmVyc2VfZGVwX2NvdW50KHBhY2thZ2UsIHRhcmdldF9pZCk6CisgICAgcmV0dXJuIHBhY2thZ2UucGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0LmZpbHRlcih0YXJnZXRfaWRfX2V4YWN0PXRhcmdldF9pZCwgZGVwX3R5cGVfX2V4YWN0ID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfVFJERVBFTkRTKS5jb3VudCgpCisKKyMgUmV0dXJuIHRoZSBjb3VudCBvZiB0aGUgcGFja2FnZXMgdGhhdCB0aGlzIHBhY2thZ2VfaWQgaXMgZGVwZW5kZW50IG9uLgorIyBVc2Ugb25lIG9mIHRoZSB0d28gUkRFUEVORFMgdHlwZXMsIGVpdGhlciBUUkRFUEVORFMgaWYgdGhlIHBhY2thZ2Ugd2FzCisjIGluc3RhbGxlZCwgb3IgZWxzZSBSREVQRU5EUyBpZiBvbmx5IGJ1aWx0LgorZGVmIF9nZXRfcGFja2FnZV9kZXBlbmRlbmN5X2NvdW50KHBhY2thZ2UsIHRhcmdldF9pZCwgaXNfaW5zdGFsbGVkKToKKyAgICBpZiBpc19pbnN0YWxsZWQgOgorICAgICAgICByZXR1cm4gcGFja2FnZS5wYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UuZmlsdGVyKHRhcmdldF9pZF9fZXhhY3QgPSB0YXJnZXRfaWQsCisgICAgICAgICAgICBkZXBfdHlwZV9fZXhhY3QgPSBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9UUkRFUEVORFMpLmNvdW50KCkKKyAgICBlbHNlIDoKKyAgICAgICAgcmV0dXJuIHBhY2thZ2UucGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlLmZpbHRlcihkZXBfdHlwZV9fZXhhY3QgPSBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SREVQRU5EUykuY291bnQoKQorCitkZWYgX2dldF9wYWNrYWdlX2FsaWFzKHBhY2thZ2UpOgorICAgIGFsaWFzID0gcGFja2FnZS5pbnN0YWxsZWRfbmFtZQorICAgIGlmIGFsaWFzICE9IE5vbmUgYW5kIGFsaWFzICE9ICcnIGFuZCBhbGlhcyAhPSBwYWNrYWdlLm5hbWU6CisgICAgICAgIHJldHVybiBhbGlhcworICAgIGVsc2U6CisgICAgICAgIHJldHVybiAnJworCitkZWYgX2dldF9mdWxscGFja2FnZXNwZWMocGFja2FnZSk6CisgICAgciA9IHBhY2thZ2UubmFtZQorICAgIHZlcnNpb25fZ29vZCA9IHBhY2thZ2UudmVyc2lvbiAhPSBOb25lIGFuZCAgcGFja2FnZS52ZXJzaW9uICE9ICcnCisgICAgcmV2aXNpb25fZ29vZCA9IHBhY2thZ2UucmV2aXNpb24gIT0gTm9uZSBhbmQgcGFja2FnZS5yZXZpc2lvbiAhPSAnJworICAgIGlmIHZlcnNpb25fZ29vZCBvciByZXZpc2lvbl9nb29kOgorICAgICAgICByICs9ICdfJworICAgICAgICBpZiB2ZXJzaW9uX2dvb2Q6CisgICAgICAgICAgICByICs9IHBhY2thZ2UudmVyc2lvbgorICAgICAgICAgICAgaWYgcmV2aXNpb25fZ29vZDoKKyAgICAgICAgICAgICAgICByICs9ICctJworICAgICAgICBpZiByZXZpc2lvbl9nb29kOgorICAgICAgICAgICAgciArPSBwYWNrYWdlLnJldmlzaW9uCisgICAgcmV0dXJuIHIKKworZGVmIHBhY2thZ2VfYnVpbHRfZGV0YWlsKHJlcXVlc3QsIGJ1aWxkX2lkLCBwYWNrYWdlX2lkKToKKyAgICB0ZW1wbGF0ZSA9ICJwYWNrYWdlX2J1aWx0X2RldGFpbC5odG1sIgorICAgIGlmIEJ1aWxkLm9iamVjdHMuZmlsdGVyKHBrPWJ1aWxkX2lkKS5jb3VudCgpID09IDAgOgorICAgICAgICByZXR1cm4gcmVkaXJlY3QoYnVpbGRzKQorCisgICAgIyBmb2xsb3cgY29udmVudGlvbiBmb3IgcGFnaW5hdGlvbiB3LyBzZWFyY2ggYWx0aG91Z2ggbm90IHVzZWQgZm9yIHRoaXMgdmlldworICAgIHF1ZXJ5c2V0ID0gUGFja2FnZV9GaWxlLm9iamVjdHMuZmlsdGVyKHBhY2thZ2VfaWRfX2V4YWN0PXBhY2thZ2VfaWQpCisgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMjUsICdwYXRoOisnKQorICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzID0geyAnY291bnQnOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5JyA6IG9yZGVyYnkgfQorICAgIHJldHZhbCA9IF92ZXJpZnlfcGFyYW1ldGVycyggcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzICkKKyAgICBpZiByZXR2YWw6CisgICAgICAgIHJldHVybiBfcmVkaXJlY3RfcGFyYW1ldGVycyggJ3BhY2thZ2VfYnVpbHRfZGV0YWlsJywgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBidWlsZF9pZCA9IGJ1aWxkX2lkLCBwYWNrYWdlX2lkID0gcGFja2FnZV9pZCkKKworICAgIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKSA9IF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgUGFja2FnZV9GaWxlKQorICAgIHBhdGhzID0gX2dldF9xdWVyeXNldChQYWNrYWdlX0ZpbGUsIHF1ZXJ5c2V0LCBmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAncGF0aCcpCisKKyAgICBwYWNrYWdlID0gUGFja2FnZS5vYmplY3RzLmdldChwaz1wYWNrYWdlX2lkKQorICAgIHBhY2thZ2UuZnVsbHBhY2thZ2VzcGVjID0gX2dldF9mdWxscGFja2FnZXNwZWMocGFja2FnZSkKKyAgICBjb250ZXh0ID0geworICAgICAgICAgICAgJ2J1aWxkJyA6IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKSwKKyAgICAgICAgICAgICdwYWNrYWdlJyA6IHBhY2thZ2UsCisgICAgICAgICAgICAnZGVwZW5kZW5jeV9jb3VudCcgOiBfZ2V0X3BhY2thZ2VfZGVwZW5kZW5jeV9jb3VudChwYWNrYWdlLCAtMSwgRmFsc2UpLAorICAgICAgICAgICAgJ29iamVjdHMnIDogcGF0aHMsCisgICAgICAgICAgICAndGFibGVjb2xzJzpbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAnbmFtZSc6J0ZpbGUnLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJwYXRoIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInBhdGgiKSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJ25hbWUnOidTaXplJywKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAic2l6ZSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJzaXplIiksCisgICAgICAgICAgICAgICAgICAgICdkY2xhc3MnOiAnc2l6ZWNvbCBzcGFuMicsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF0KKyAgICB9CisgICAgaWYgcGF0aHMuYWxsKCkuY291bnQoKSA8IDI6CisgICAgICAgIGNvbnRleHRbJ2Rpc2FibGVfc29ydCddID0gVHJ1ZTsKKworICAgIHJlc3BvbnNlID0gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpCisgICAgcmV0dXJuIHJlc3BvbnNlCisKK2RlZiBwYWNrYWdlX2J1aWx0X2RlcGVuZGVuY2llcyhyZXF1ZXN0LCBidWlsZF9pZCwgcGFja2FnZV9pZCk6CisgICAgdGVtcGxhdGUgPSAicGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMuaHRtbCIKKyAgICBpZiBCdWlsZC5vYmplY3RzLmZpbHRlcihwaz1idWlsZF9pZCkuY291bnQoKSA9PSAwIDoKKyAgICAgICAgIHJldHVybiByZWRpcmVjdChidWlsZHMpCisKKyAgICBwYWNrYWdlID0gUGFja2FnZS5vYmplY3RzLmdldChwaz1wYWNrYWdlX2lkKQorICAgIHBhY2thZ2UuZnVsbHBhY2thZ2VzcGVjID0gX2dldF9mdWxscGFja2FnZXNwZWMocGFja2FnZSkKKyAgICBkZXBlbmRlbmNpZXMgPSBfZ2V0X3BhY2thZ2VfZGVwZW5kZW5jaWVzKHBhY2thZ2VfaWQpCisgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICdidWlsZCcgOiBCdWlsZC5vYmplY3RzLmdldChwaz1idWlsZF9pZCksCisgICAgICAgICAgICAncGFja2FnZScgOiBwYWNrYWdlLAorICAgICAgICAgICAgJ3J1bnRpbWVfZGVwcycgOiBkZXBlbmRlbmNpZXNbJ3J1bnRpbWVfZGVwcyddLAorICAgICAgICAgICAgJ290aGVyX2RlcHMnIDogICBkZXBlbmRlbmNpZXNbJ290aGVyX2RlcHMnXSwKKyAgICAgICAgICAgICdkZXBlbmRlbmN5X2NvdW50JyA6IF9nZXRfcGFja2FnZV9kZXBlbmRlbmN5X2NvdW50KHBhY2thZ2UsIC0xLCAgRmFsc2UpCisgICAgfQorICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisKKworZGVmIHBhY2thZ2VfaW5jbHVkZWRfZGV0YWlsKHJlcXVlc3QsIGJ1aWxkX2lkLCB0YXJnZXRfaWQsIHBhY2thZ2VfaWQpOgorICAgIHRlbXBsYXRlID0gInBhY2thZ2VfaW5jbHVkZWRfZGV0YWlsLmh0bWwiCisgICAgaWYgQnVpbGQub2JqZWN0cy5maWx0ZXIocGs9YnVpbGRfaWQpLmNvdW50KCkgPT0gMCA6CisgICAgICAgIHJldHVybiByZWRpcmVjdChidWlsZHMpCisKKyAgICAjIGZvbGxvdyBjb252ZW50aW9uIGZvciBwYWdpbmF0aW9uIHcvIHNlYXJjaCBhbHRob3VnaCBub3QgdXNlZCBmb3IgdGhpcyB2aWV3CisgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMjUsICdwYXRoOisnKQorICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzID0geyAnY291bnQnOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5JyA6IG9yZGVyYnkgfQorICAgIHJldHZhbCA9IF92ZXJpZnlfcGFyYW1ldGVycyggcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzICkKKyAgICBpZiByZXR2YWw6CisgICAgICAgIHJldHVybiBfcmVkaXJlY3RfcGFyYW1ldGVycyggJ3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsJywgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBidWlsZF9pZCA9IGJ1aWxkX2lkLCB0YXJnZXRfaWQgPSB0YXJnZXRfaWQsIHBhY2thZ2VfaWQgPSBwYWNrYWdlX2lkKQorICAgIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKSA9IF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgUGFja2FnZV9GaWxlKQorCisgICAgcXVlcnlzZXQgPSBQYWNrYWdlX0ZpbGUub2JqZWN0cy5maWx0ZXIocGFja2FnZV9pZF9fZXhhY3Q9cGFja2FnZV9pZCkKKyAgICBwYXRocyA9IF9nZXRfcXVlcnlzZXQoUGFja2FnZV9GaWxlLCBxdWVyeXNldCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ3BhdGgnKQorCisgICAgcGFja2FnZSA9IFBhY2thZ2Uub2JqZWN0cy5nZXQocGs9cGFja2FnZV9pZCkKKyAgICBwYWNrYWdlLmZ1bGxwYWNrYWdlc3BlYyA9IF9nZXRfZnVsbHBhY2thZ2VzcGVjKHBhY2thZ2UpCisgICAgcGFja2FnZS5hbGlhcyA9IF9nZXRfcGFja2FnZV9hbGlhcyhwYWNrYWdlKQorICAgIHRhcmdldCA9IFRhcmdldC5vYmplY3RzLmdldChwaz10YXJnZXRfaWQpCisgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICdidWlsZCcgOiBCdWlsZC5vYmplY3RzLmdldChwaz1idWlsZF9pZCksCisgICAgICAgICAgICAndGFyZ2V0JyAgOiB0YXJnZXQsCisgICAgICAgICAgICAncGFja2FnZScgOiBwYWNrYWdlLAorICAgICAgICAgICAgJ3JldmVyc2VfY291bnQnIDogX2dldF9wYWNrYWdlX3JldmVyc2VfZGVwX2NvdW50KHBhY2thZ2UsIHRhcmdldF9pZCksCisgICAgICAgICAgICAnZGVwZW5kZW5jeV9jb3VudCcgOiBfZ2V0X3BhY2thZ2VfZGVwZW5kZW5jeV9jb3VudChwYWNrYWdlLCB0YXJnZXRfaWQsIFRydWUpLAorICAgICAgICAgICAgJ29iamVjdHMnOiBwYXRocywKKyAgICAgICAgICAgICd0YWJsZWNvbHMnOlsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICduYW1lJzonRmlsZScsCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInBhdGgiKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAicGF0aCIpLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAnbmFtZSc6J1NpemUnLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJzaXplIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInNpemUiKSwKKyAgICAgICAgICAgICAgICAgICAgJ2RjbGFzcyc6ICdzaXplY29sIHNwYW4yJywKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgXQorICAgIH0KKyAgICBpZiBwYXRocy5hbGwoKS5jb3VudCgpIDwgMjoKKyAgICAgICAgY29udGV4dFsnZGlzYWJsZV9zb3J0J10gPSBUcnVlCisgICAgcmVzcG9uc2UgPSByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgX3NldF9wYXJhbWV0ZXJzX3ZhbHVlcyhwYWdlc2l6ZSwgb3JkZXJieSwgcmVxdWVzdCkKKyAgICByZXR1cm4gcmVzcG9uc2UKKworZGVmIHBhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzKHJlcXVlc3QsIGJ1aWxkX2lkLCB0YXJnZXRfaWQsIHBhY2thZ2VfaWQpOgorICAgIHRlbXBsYXRlID0gInBhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzLmh0bWwiCisgICAgaWYgQnVpbGQub2JqZWN0cy5maWx0ZXIocGs9YnVpbGRfaWQpLmNvdW50KCkgPT0gMCA6CisgICAgICAgIHJldHVybiByZWRpcmVjdChidWlsZHMpCisKKyAgICBwYWNrYWdlID0gUGFja2FnZS5vYmplY3RzLmdldChwaz1wYWNrYWdlX2lkKQorICAgIHBhY2thZ2UuZnVsbHBhY2thZ2VzcGVjID0gX2dldF9mdWxscGFja2FnZXNwZWMocGFja2FnZSkKKyAgICBwYWNrYWdlLmFsaWFzID0gX2dldF9wYWNrYWdlX2FsaWFzKHBhY2thZ2UpCisgICAgdGFyZ2V0ID0gVGFyZ2V0Lm9iamVjdHMuZ2V0KHBrPXRhcmdldF9pZCkKKworICAgIGRlcGVuZGVuY2llcyA9IF9nZXRfcGFja2FnZV9kZXBlbmRlbmNpZXMocGFja2FnZV9pZCwgdGFyZ2V0X2lkKQorICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAnYnVpbGQnIDogQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpLAorICAgICAgICAgICAgJ3BhY2thZ2UnIDogcGFja2FnZSwKKyAgICAgICAgICAgICd0YXJnZXQnIDogdGFyZ2V0LAorICAgICAgICAgICAgJ3J1bnRpbWVfZGVwcycgOiBkZXBlbmRlbmNpZXNbJ3J1bnRpbWVfZGVwcyddLAorICAgICAgICAgICAgJ290aGVyX2RlcHMnIDogICBkZXBlbmRlbmNpZXNbJ290aGVyX2RlcHMnXSwKKyAgICAgICAgICAgICdyZXZlcnNlX2NvdW50JyA6IF9nZXRfcGFja2FnZV9yZXZlcnNlX2RlcF9jb3VudChwYWNrYWdlLCB0YXJnZXRfaWQpLAorICAgICAgICAgICAgJ2RlcGVuZGVuY3lfY291bnQnIDogX2dldF9wYWNrYWdlX2RlcGVuZGVuY3lfY291bnQocGFja2FnZSwgdGFyZ2V0X2lkLCBUcnVlKQorICAgIH0KKyAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorCitkZWYgcGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcyhyZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkLCBwYWNrYWdlX2lkKToKKyAgICB0ZW1wbGF0ZSA9ICJwYWNrYWdlX2luY2x1ZGVkX3JldmVyc2VfZGVwZW5kZW5jaWVzLmh0bWwiCisgICAgaWYgQnVpbGQub2JqZWN0cy5maWx0ZXIocGs9YnVpbGRfaWQpLmNvdW50KCkgPT0gMCA6CisgICAgICAgIHJldHVybiByZWRpcmVjdChidWlsZHMpCisKKyAgICAocGFnZXNpemUsIG9yZGVyYnkpID0gX2dldF9wYXJhbWV0ZXJzX3ZhbHVlcyhyZXF1ZXN0LCAyNSwgJ3BhY2thZ2VfX25hbWU6KycpCisgICAgbWFuZGF0b3J5X3BhcmFtZXRlcnMgPSB7ICdjb3VudCc6IHBhZ2VzaXplLCAgJ3BhZ2UnIDogMSwgJ29yZGVyYnknOiBvcmRlcmJ5IH0KKyAgICByZXR2YWwgPSBfdmVyaWZ5X3BhcmFtZXRlcnMoIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycyApCisgICAgaWYgcmV0dmFsOgorICAgICAgICByZXR1cm4gX3JlZGlyZWN0X3BhcmFtZXRlcnMoICdwYWNrYWdlX2luY2x1ZGVkX3JldmVyc2VfZGVwZW5kZW5jaWVzJywgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBidWlsZF9pZCA9IGJ1aWxkX2lkLCB0YXJnZXRfaWQgPSB0YXJnZXRfaWQsIHBhY2thZ2VfaWQgPSBwYWNrYWdlX2lkKQorICAgIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKSA9IF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgUGFja2FnZV9GaWxlKQorCisgICAgcXVlcnlzZXQgPSBQYWNrYWdlX0RlcGVuZGVuY3kub2JqZWN0cy5zZWxlY3RfcmVsYXRlZCgnZGVwZW5kc19vbl9fbmFtZScsICdkZXBlbmRzX29uX19zaXplJykuZmlsdGVyKGRlcGVuZHNfb249cGFja2FnZV9pZCwgdGFyZ2V0X2lkPXRhcmdldF9pZCwgZGVwX3R5cGU9UGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfVFJERVBFTkRTKQorICAgIG9iamVjdHMgPSBfZ2V0X3F1ZXJ5c2V0KFBhY2thZ2VfRGVwZW5kZW5jeSwgcXVlcnlzZXQsIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcsICdwYWNrYWdlX19uYW1lJykKKworICAgIHBhY2thZ2UgPSBQYWNrYWdlLm9iamVjdHMuZ2V0KHBrPXBhY2thZ2VfaWQpCisgICAgcGFja2FnZS5mdWxscGFja2FnZXNwZWMgPSBfZ2V0X2Z1bGxwYWNrYWdlc3BlYyhwYWNrYWdlKQorICAgIHBhY2thZ2UuYWxpYXMgPSBfZ2V0X3BhY2thZ2VfYWxpYXMocGFja2FnZSkKKyAgICB0YXJnZXQgPSBUYXJnZXQub2JqZWN0cy5nZXQocGs9dGFyZ2V0X2lkKQorICAgIGZvciBvIGluIG9iamVjdHM6CisgICAgICAgIGlmIG8ucGFja2FnZS52ZXJzaW9uICE9ICcnOgorICAgICAgICAgICAgby5wYWNrYWdlLnZlcnNpb24gKz0gJy0nICsgby5wYWNrYWdlLnJldmlzaW9uCisgICAgICAgIG8uYWxpYXMgPSBfZ2V0X3BhY2thZ2VfYWxpYXMoby5wYWNrYWdlKQorICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAnYnVpbGQnIDogQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpLAorICAgICAgICAgICAgJ3BhY2thZ2UnIDogcGFja2FnZSwKKyAgICAgICAgICAgICd0YXJnZXQnIDogdGFyZ2V0LAorICAgICAgICAgICAgJ29iamVjdHMnIDogb2JqZWN0cywKKyAgICAgICAgICAgICdyZXZlcnNlX2NvdW50JyA6IF9nZXRfcGFja2FnZV9yZXZlcnNlX2RlcF9jb3VudChwYWNrYWdlLCB0YXJnZXRfaWQpLAorICAgICAgICAgICAgJ2RlcGVuZGVuY3lfY291bnQnIDogX2dldF9wYWNrYWdlX2RlcGVuZGVuY3lfY291bnQocGFja2FnZSwgdGFyZ2V0X2lkLCBUcnVlKSwKKyAgICAgICAgICAgICd0YWJsZWNvbHMnOlsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICduYW1lJzonUGFja2FnZScsCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInBhY2thZ2VfX25hbWUiKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInBhY2thZ2VfX25hbWUiKSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJ25hbWUnOidWZXJzaW9uJywKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJ25hbWUnOidTaXplJywKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAicGFja2FnZV9fc2l6ZSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzogX2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAicGFja2FnZV9fc2l6ZSIpLAorICAgICAgICAgICAgICAgICAgICAnZGNsYXNzJzogJ3NpemVjb2wgc3BhbjInLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICBdCisgICAgfQorICAgIGlmIG9iamVjdHMuYWxsKCkuY291bnQoKSA8IDI6CisgICAgICAgIGNvbnRleHRbJ2Rpc2FibGVfc29ydCddID0gVHJ1ZQorICAgIHJlc3BvbnNlID0gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpCisgICAgcmV0dXJuIHJlc3BvbnNlCisKK2RlZiBpbWFnZV9pbmZvcm1hdGlvbl9kaXIocmVxdWVzdCwgYnVpbGRfaWQsIHRhcmdldF9pZCwgcGFja2FnZWZpbGVfaWQpOgorICAgICMgc3R1YmJlZCBmb3Igbm93CisgICAgcmV0dXJuIHJlZGlyZWN0KGJ1aWxkcykKKyAgICAjIHRoZSBjb250ZXh0IHByb2Nlc3NvciB0aGF0IHN1cHBsaWVzIGRhdGEgdXNlZCBhY3Jvc3MgYWxsIHRoZSBwYWdlcworCisKK2RlZiBtYW5hZ2VkY29udGV4dHByb2Nlc3NvcihyZXF1ZXN0KToKKyAgICByZXQgPSB7CisgICAgICAgICJwcm9qZWN0cyI6IFByb2plY3Qub2JqZWN0cy5hbGwoKSwKKyAgICAgICAgIkRFQlVHIiA6IHRvYXN0ZXJtYWluLnNldHRpbmdzLkRFQlVHLAorICAgICAgICAiVE9BU1RFUl9CUkFOQ0giOiB0b2FzdGVybWFpbi5zZXR0aW5ncy5UT0FTVEVSX0JSQU5DSCwKKyAgICAgICAgIlRPQVNURVJfUkVWSVNJT04iIDogdG9hc3Rlcm1haW4uc2V0dGluZ3MuVE9BU1RFUl9SRVZJU0lPTiwKKyAgICB9CisgICAgcmV0dXJuIHJldAorCisKKworaW1wb3J0IHRvYXN0ZXJtYWluLnNldHRpbmdzCisKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdCwgUHJvamVjdExheWVyLCBQcm9qZWN0VGFyZ2V0LCBQcm9qZWN0VmFyaWFibGUKKworIyB3ZSBoYXZlIGEgc2V0IG9mIGZ1bmN0aW9ucyBpZiB3ZSdyZSBpbiBtYW5hZ2VkIG1vZGUsIG9yCisjIGEgZGVmYXVsdCAicGFnZSBub3QgYXZhaWxhYmxlIiBzaW1wbGUgZnVuY3Rpb25zIGZvciBpbnRlcmFjdGl2ZSBtb2RlCisKK2lmIFRydWU6CisgICAgZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLm1vZGVscyBpbXBvcnQgVXNlcgorICAgIGZyb20gZGphbmdvLmNvbnRyaWIuYXV0aCBpbXBvcnQgYXV0aGVudGljYXRlLCBsb2dpbgorICAgIGZyb20gZGphbmdvLmNvbnRyaWIuYXV0aC5kZWNvcmF0b3JzIGltcG9ydCBsb2dpbl9yZXF1aXJlZAorCisgICAgZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBCcmFuY2gsIExheWVyU291cmNlLCBUb2FzdGVyU2V0dGluZywgUmVsZWFzZSwgTWFjaGluZSwgTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeQorICAgIGZyb20gYmxkY29udHJvbC5tb2RlbHMgaW1wb3J0IEJ1aWxkUmVxdWVzdAorCisgICAgaW1wb3J0IHRyYWNlYmFjaworCisgICAgY2xhc3MgQmFkUGFyYW1ldGVyRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgICAgICcnJyBUaGUgZXhjZXB0aW9uIHJhaXNlZCBvbiBpbnZhbGlkIFBPU1QgcmVxdWVzdHMgJycnCisgICAgICAgIHBhc3MKKworICAgICMgc2hvd3MgdGhlICJhbGwgYnVpbGRzIiBwYWdlIGZvciBtYW5hZ2VkIG1vZGU7IGl0IGRpc3BsYXlzIGJ1aWxkIHJlcXVlc3RzIChhdCBsZWFzdCBzdGFydGVkISkgaW5zdGVhZCBvZiBhY3R1YWwgYnVpbGRzCisgICAgQF90ZW1wbGF0ZV9yZW5kZXJlcigiYnVpbGRzLmh0bWwiKQorICAgIGRlZiBidWlsZHMocmVxdWVzdCk6CisgICAgICAgICMgZGVmaW5lIGhlcmUgd2hhdCBwYXJhbWV0ZXJzIHRoZSB2aWV3IG5lZWRzIGluIHRoZSBHRVQgcG9ydGlvbiBpbiBvcmRlciB0bworICAgICAgICAjIGJlIGFibGUgdG8gZGlzcGxheSBzb21ldGhpbmcuICAnY291bnQnIGFuZCAncGFnZScgYXJlIG1hbmRhdG9yeSBmb3IgYWxsIHZpZXdzCisgICAgICAgICMgdGhhdCB1c2UgcGFnaW5hdG9ycy4KKworICAgICAgICBxdWVyeXNldCA9IEJ1aWxkLm9iamVjdHMuZXhjbHVkZShvdXRjb21lID0gQnVpbGQuSU5fUFJPR1JFU1MpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udGV4dCwgcGFnZXNpemUsIG9yZGVyYnkgPSBfYnVpbGRfbGlzdF9oZWxwZXIocmVxdWVzdCwgcXVlcnlzZXQpCisgICAgICAgICAgICAjIGFsbCBidWlsZHMgcGFnZSBhcyBhIFByb2plY3QgY29sdW1uCisgICAgICAgICAgICBjb250ZXh0Wyd0YWJsZWNvbHMnXS5hcHBlbmQoeyduYW1lJzogJ1Byb2plY3QnLCAnY2xjYWxzcyc6ICdwcm9qZWN0X2NvbHVtbicsIH0pCisgICAgICAgIGV4Y2VwdCBSZWRpcmVjdEV4Y2VwdGlvbiBhcyByZToKKyAgICAgICAgICAgICMgcmV3cml0ZSB0aGUgUmVkaXJlY3RFeGNlcHRpb24KKyAgICAgICAgICAgIHJlLnZpZXcgPSByZXNvbHZlKHJlcXVlc3QucGF0aF9pbmZvKS51cmxfbmFtZQorICAgICAgICAgICAgcmFpc2UgcmUKKworICAgICAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQorICAgICAgICByZXR1cm4gY29udGV4dAorCisKKyAgICAjIGhlbHBlciBmdW5jdGlvbiwgdG8gYmUgdXNlZCBvbiAiYWxsIGJ1aWxkcyIgYW5kICJwcm9qZWN0IGJ1aWxkcyIgcGFnZXMKKyAgICBkZWYgX2J1aWxkX2xpc3RfaGVscGVyKHJlcXVlc3QsIHF1ZXJ5c2V0X2FsbCk6CisKKyAgICAgICAgZGVmYXVsdF9vcmRlcmJ5ID0gJ2NvbXBsZXRlZF9vbjotJworICAgICAgICAocGFnZXNpemUsIG9yZGVyYnkpID0gX2dldF9wYXJhbWV0ZXJzX3ZhbHVlcyhyZXF1ZXN0LCAxMCwgZGVmYXVsdF9vcmRlcmJ5KQorICAgICAgICBtYW5kYXRvcnlfcGFyYW1ldGVycyA9IHsgJ2NvdW50JzogcGFnZXNpemUsICAncGFnZScgOiAxLCAnb3JkZXJieScgOiBvcmRlcmJ5IH0KKyAgICAgICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQorICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICByYWlzZSBSZWRpcmVjdEV4Y2VwdGlvbiggTm9uZSwgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzKQorCisgICAgICAgICMgYm9pbGVycGxhdGUgY29kZSB0aGF0IHRha2VzIGEgcmVxdWVzdCBmb3IgYW4gb2JqZWN0IHR5cGUgYW5kIHJldHVybnMgYSBxdWVyeXNldAorICAgICAgICAjIGZvciB0aGF0IG9iamVjdCB0eXBlLiBjb3B5cGFzdGEgZm9yIGFsbCBuZWVkZWQgdGFibGUgc2VhcmNoZXMKKyAgICAgICAgKGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcpID0gX3NlYXJjaF90dXBsZShyZXF1ZXN0LCBCdWlsZCkKKyAgICAgICAgIyBwb3N0LXByb2Nlc3MgYW55IGRhdGUgcmFuZ2UgZmlsdGVycworICAgICAgICBmaWx0ZXJfc3RyaW5nLGRhdGVyYW5nZV9zZWxlY3RlZCA9IF9tb2RpZnlfZGF0ZV9yYW5nZV9maWx0ZXIoZmlsdGVyX3N0cmluZykKKyAgICAgICAgcXVlcnlzZXRfYWxsID0gcXVlcnlzZXRfYWxsLnNlbGVjdF9yZWxhdGVkKCJwcm9qZWN0IikuYW5ub3RhdGUoZXJyb3JzX25vID0gQ291bnQoJ2xvZ21lc3NhZ2UnLCBvbmx5PVEobG9nbWVzc2FnZV9fbGV2ZWw9TG9nTWVzc2FnZS5FUlJPUil8UShsb2dtZXNzYWdlX19sZXZlbD1Mb2dNZXNzYWdlLkVYQ0VQVElPTikpKS5hbm5vdGF0ZSh3YXJuaW5nc19ubyA9IENvdW50KCdsb2dtZXNzYWdlJywgb25seT1RKGxvZ21lc3NhZ2VfX2xldmVsPUxvZ01lc3NhZ2UuV0FSTklORykpKS5leHRyYShzZWxlY3Q9eyd0aW1lc3BlbnQnOidjb21wbGV0ZWRfb24gLSBzdGFydGVkX29uJ30pCisgICAgICAgIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoID0gX2dldF9xdWVyeXNldChCdWlsZCwgcXVlcnlzZXRfYWxsLCBOb25lLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAnLWNvbXBsZXRlZF9vbicpCisgICAgICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldChCdWlsZCwgcXVlcnlzZXRfYWxsLCBmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAnLWNvbXBsZXRlZF9vbicpCisKKyAgICAgICAgIyByZXRyaWV2ZSB0aGUgb2JqZWN0cyB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZTsgYnVpbGRzIGEgcGFnaW5hdG9yIGFuZCBnZXRzIGEgcGFnZSByYW5nZSB0byBkaXNwbGF5CisgICAgICAgIGJ1aWxkX2luZm8gPSBfYnVpbGRfcGFnZV9yYW5nZShQYWdpbmF0b3IocXVlcnlzZXQsIHBhZ2VzaXplKSwgcmVxdWVzdC5HRVQuZ2V0KCdwYWdlJywgMSkpCisKKyAgICAgICAgIyBidWlsZCB2aWV3LXNwZWNpZmljIGluZm9ybWF0aW9uOyB0aGlzIGlzIHJlbmRlcmVkIHNwZWNpZmljYWxseSBpbiB0aGUgYnVpbGRzIHBhZ2UsIGF0IHRoZSB0b3Agb2YgdGhlIHBhZ2UgKGkuZS4gUmVjZW50IGJ1aWxkcykKKyAgICAgICAgYnVpbGRfbXJ1ID0gQnVpbGQub2JqZWN0cy5vcmRlcl9ieSgiLXN0YXJ0ZWRfb24iKVs6M10KKworICAgICAgICAjIGNhbGN1bGF0ZSB0aGUgZXhhY3QgYmVnaW5pbmcgb2YgbG9jYWwgdG9kYXkgYW5kIHllc3RlcmRheSwgYXBwZW5kIGNvbnRleHQKKyAgICAgICAgY29udGV4dF9kYXRlLHRvZGF5X2JlZ2luLHllc3RlcmRheV9iZWdpbiA9IF9hZGRfZGF0ZXJhbmdlX2NvbnRleHQocXVlcnlzZXRfYWxsLCByZXF1ZXN0LCB7J3N0YXJ0ZWRfb24nLCdjb21wbGV0ZWRfb24nfSkKKworICAgICAgICAjIHNldCB1cCBsaXN0IG9mIGZzdHlwZXMgZm9yIGVhY2ggYnVpbGQKKyAgICAgICAgZnN0eXBlc19tYXAgPSB7fTsKKyAgICAgICAgZm9yIGJ1aWxkIGluIGJ1aWxkX2luZm86CisgICAgICAgICAgICB0YXJnZXRzID0gVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKCBidWlsZF9pZCA9IGJ1aWxkLmlkICkKKyAgICAgICAgICAgIGNvbW1hID0gIiI7CisgICAgICAgICAgICBleHRlbnNpb25zID0gIiI7CisgICAgICAgICAgICBmb3IgdCBpbiB0YXJnZXRzOgorICAgICAgICAgICAgICAgIGlmICggbm90IHQuaXNfaW1hZ2UgKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB0aWYgPSBUYXJnZXRfSW1hZ2VfRmlsZS5vYmplY3RzLmZpbHRlciggdGFyZ2V0X2lkID0gdC5pZCApCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gdGlmOgorICAgICAgICAgICAgICAgICAgICBzPXJlLnN1YignLip0YXIuYnoyJywgJ3Rhci5iejInLCBpLmZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcyA9PSBpLmZpbGVfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHM9cmUuc3ViKCcuKlwuJywgJycsIGkuZmlsZV9uYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiBOb25lID09IHJlLnNlYXJjaChzLGV4dGVuc2lvbnMpOgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucyArPSBjb21tYSArIHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hID0gIiwgIgorICAgICAgICAgICAgZnN0eXBlc19tYXBbYnVpbGQuaWRdPWV4dGVuc2lvbnMKKworICAgICAgICAjIHNlbmQgdGhlIGRhdGEgdG8gdGhlIHRlbXBsYXRlCisgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAgICAgIyBzcGVjaWZpYyBpbmZvIGZvcgorICAgICAgICAgICAgICAgICAgICAnbXJ1JyA6IGJ1aWxkX21ydSwKKyAgICAgICAgICAgICAgICAjIFRPRE86IGNvbW1vbiBvYmplY3RzIGZvciBhbGwgdGFibGUgdmlld3MsIGFkYXB0IGFzIG5lZWRlZAorICAgICAgICAgICAgICAgICAgICAnb2JqZWN0cycgOiBidWlsZF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAnb2JqZWN0bmFtZScgOiAiYnVpbGRzIiwKKyAgICAgICAgICAgICAgICAgICAgJ2RlZmF1bHRfb3JkZXJieScgOiBkZWZhdWx0X29yZGVyYnksCisgICAgICAgICAgICAgICAgICAgICdmc3R5cGVzJyA6IGZzdHlwZXNfbWFwLAorICAgICAgICAgICAgICAgICAgICAnc2VhcmNoX3Rlcm0nIDogc2VhcmNoX3Rlcm0sCisgICAgICAgICAgICAgICAgICAgICd0b3RhbF9jb3VudCcgOiBxdWVyeXNldF93aXRoX3NlYXJjaC5jb3VudCgpLAorICAgICAgICAgICAgICAgICAgICAnZGF0ZXJhbmdlX3NlbGVjdGVkJyA6IGRhdGVyYW5nZV9zZWxlY3RlZCwKKyAgICAgICAgICAgICAgICAjIFNwZWNpZmllcyB0aGUgZGlzcGxheSBvZiBjb2x1bW5zIGZvciB0aGUgdGFibGUsIGFwcGVhcmFuY2UgaW4gIkVkaXQgY29sdW1ucyIgYm94LCB0b2dnbGluZyBkZWZhdWx0IHNob3cvaGlkZSwgYW5kIHNwZWNpZnlpbmcgZmlsdGVycyBmb3IgY29sdW1ucworICAgICAgICAgICAgICAgICAgICAndGFibGVjb2xzJyA6IFsKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ091dGNvbWUnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY29sdW1uIHdpdGggYSBzaW5nbGUgZmlsdGVyCisgICAgICAgICAgICAgICAgICAgICAncWhlbHAnIDogIlRoZSBvdXRjb21lIHRlbGxzIHlvdSBpZiBhIGJ1aWxkIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgb3IgZmFpbGVkIiwgICAgICMgdGhlIGhlbHAgYnV0dG9uIGNvbnRlbnQKKyAgICAgICAgICAgICAgICAgICAgICdkY2xhc3MnIDogInNwYW4yIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluZGljYXRpb24gYWJvdXQgY29sdW1uIHdpZHRoOyBjb21lcyBmcm9tIHRoZSBkZXNpZ24KKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgIm91dGNvbWUiKSwgICAgICAgICAgICAgICAjIGFkZHMgb3JkZXJpbmcgYnkgdGhlIGZpZWxkIHZhbHVlOyBkZWZhdWx0IGFzY2VuZGluZyB1bmxlc3MgY2xpY2tlZCBmcm9tIGFzY2VuZGluZyBpbnRvIGRlc2NlbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgIm91dGNvbWUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAjIGZpbHRlciBmaWVsZCB3aWxsIHNldCBhIGZpbHRlciBvbiB0aGF0IGNvbHVtbiB3aXRoIHRoZSBzcGVjcyBpbiB0aGUgZmlsdGVyIGRlc2NyaXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgY2xhc3MgZmllbGQgaW4gdGhlIGZpbHRlciBoYXMgbm8gcmVsYXRpb24gd2l0aCBjbGNsYXNzOyB0aGUgY29udHJvbCBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0aGUgVUkKKyAgICAgICAgICAgICAgICAgICAgICAjIHN0aWxsLCBpdCBpcyByZWNvbW1lbmRlZCBmb3IgdGhlIHZhbHVlcyB0byBiZSBpZGVudGljYWwgZm9yIGVhc3kgdHJhY2tpbmcgaW4gdGhlIGdlbmVyYXRlZCBIVE1MCisgICAgICAgICAgICAgICAgICAgICAnZmlsdGVyJyA6IHsnY2xhc3MnIDogJ291dGNvbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogJ1Nob3c6JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyA6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnU3VjY2Vzc2Z1bCBidWlsZHMnLCAnb3V0Y29tZTonICsgc3RyKEJ1aWxkLlNVQ0NFRURFRCksIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihvdXRjb21lPXN0cihCdWlsZC5TVUNDRUVERUQpKS5jb3VudCgpKSwgICMgdGhpcyBpcyB0aGUgZmllbGQgc2VhcmNoIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnRmFpbGVkIGJ1aWxkcycsICdvdXRjb21lOicrIHN0cihCdWlsZC5GQUlMRUQpLCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIob3V0Y29tZT1zdHIoQnVpbGQuRkFJTEVEKSkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ1JlY2lwZScsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVmYXVsdCBjb2x1bW4sIGRpc2FibGVkIGJveCwgd2l0aCBqdXN0IHRoZSBuYW1lIGluIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiV2hhdCB5b3UgYnVpbHQgKGkuZS4gb25lIG9yIG1vcmUgcmVjaXBlcyBvciBpbWFnZSByZWNpcGVzKSIsCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJ0YXJnZXRfX3RhcmdldCIpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAidGFyZ2V0X190YXJnZXQiKSwKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ01hY2hpbmUnLAorICAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIlRoZSBtYWNoaW5lIGlzIHRoZSBoYXJkd2FyZSBmb3Igd2hpY2ggeW91IGFyZSBidWlsZGluZyBhIHJlY2lwZSBvciBpbWFnZSByZWNpcGUiLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAibWFjaGluZSIpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAibWFjaGluZSIpLAorICAgICAgICAgICAgICAgICAgICAgJ2RjbGFzcyc6ICdzcGFuMycKKyAgICAgICAgICAgICAgICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGEgc2xpZ2h0bHkgd2lkZXIgY29sdW1uCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdTdGFydGVkIG9uJywgJ2NsY2xhc3MnOiAnc3RhcnRlZF9vbicsICdoaWRkZW4nIDogMSwgICAgICAjIHRoaXMgaXMgYW4gdW5jaGVja2VkIGJveCwgd2hpY2ggaGlkZXMgdGhlIGNvbHVtbgorICAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIlRoZSBkYXRlIGFuZCB0aW1lIHlvdSBzdGFydGVkIHRoZSBidWlsZCIsCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJzdGFydGVkX29uIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJzdGFydGVkX29uIiksCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogInN0YXJ0ZWRfb24iLAorICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlcicgOiB7J2NsYXNzJyA6ICdzdGFydGVkX29uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYWJlbCc6ICdTaG93OicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIlRvZGF5J3MgYnVpbGRzIiAsICdzdGFydGVkX29uX19ndGU6Jyt0b2RheV9iZWdpbi5zdHJmdGltZSgiJVktJW0tJWQiKSwgcXVlcnlzZXRfYWxsLmZpbHRlcihzdGFydGVkX29uX19ndGU9dG9kYXlfYmVnaW4pLmNvdW50KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJZZXN0ZXJkYXkncyBidWlsZHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGFydGVkX29uX19ndGUhc3RhcnRlZF9vbl9fbHQ6JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAreWVzdGVyZGF5X2JlZ2luLnN0cmZ0aW1lKCIlWS0lbS0lZCIpKychJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArdG9kYXlfYmVnaW4uc3RyZnRpbWUoIiVZLSVtLSVkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlzZXRfYWxsLmZpbHRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbl9fZ3RlPXllc3RlcmRheV9iZWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbl9fbHQ9dG9kYXlfYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5jb3VudCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiQnVpbGQgZGF0ZSByYW5nZSIsICdkYXRlcmFuZ2UnLCAxLCAnJywgJ3N0YXJ0ZWRfb24nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ0NvbXBsZXRlZCBvbicsCisgICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiVGhlIGRhdGUgYW5kIHRpbWUgdGhlIGJ1aWxkIGZpbmlzaGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImNvbXBsZXRlZF9vbiIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAiY29tcGxldGVkX29uIiksCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ2NvbXBsZXRlZF9vbicsCisgICAgICAgICAgICAgICAgICAgICAnZmlsdGVyJyA6IHsnY2xhc3MnIDogJ2NvbXBsZXRlZF9vbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiAnU2hvdzonLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJUb2RheSdzIGJ1aWxkcyIgLCAnY29tcGxldGVkX29uX19ndGU6Jyt0b2RheV9iZWdpbi5zdHJmdGltZSgiJVktJW0tJWQiKSwgcXVlcnlzZXRfYWxsLmZpbHRlcihjb21wbGV0ZWRfb25fX2d0ZT10b2RheV9iZWdpbikuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIlllc3RlcmRheSdzIGJ1aWxkcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbl9fZ3RlIWNvbXBsZXRlZF9vbl9fbHQ6JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAreWVzdGVyZGF5X2JlZ2luLnN0cmZ0aW1lKCIlWS0lbS0lZCIpKychJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArdG9kYXlfYmVnaW4uc3RyZnRpbWUoIiVZLSVtLSVkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlzZXRfYWxsLmZpbHRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uX19ndGU9eWVzdGVyZGF5X2JlZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRfb25fX2x0PXRvZGF5X2JlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkJ1aWxkIGRhdGUgcmFuZ2UiLCAnZGF0ZXJhbmdlJywgMSwgJycsICdjb21wbGV0ZWRfb24nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnRmFpbGVkIHRhc2tzJywgJ2NsY2xhc3MnOiAnZmFpbGVkX3Rhc2tzJywgICAgICAgICAgICAgICAgIyBzcGVjaWZpbmcgYSBjbGNsYXNzIHdpbGwgZW5hYmxlIHRoZSBjaGVja2JveAorICAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIkhvdyBtYW55IHRhc2tzIGZhaWxlZCBkdXJpbmcgdGhlIGJ1aWxkIiwKKyAgICAgICAgICAgICAgICAgICAgICdmaWx0ZXInIDogeydjbGFzcycgOiAnZmFpbGVkX3Rhc2tzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYWJlbCc6ICdTaG93OicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0J1aWxkcyB3aXRoIGZhaWxlZCB0YXNrcycsICd0YXNrX2J1aWxkX19vdXRjb21lOjQnLCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIodGFza19idWlsZF9fb3V0Y29tZT00KS5jb3VudCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnQnVpbGRzIHdpdGhvdXQgZmFpbGVkIHRhc2tzJywgJ3Rhc2tfYnVpbGRfX291dGNvbWU6Tk9UNCcsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcih+USh0YXNrX2J1aWxkX19vdXRjb21lPTQpKS5jb3VudCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnRXJyb3JzJywgJ2NsY2xhc3MnOiAnZXJyb3JzX25vJywKKyAgICAgICAgICAgICAgICAgICAgICdxaGVscCc6ICJIb3cgbWFueSBlcnJvcnMgd2VyZSBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIGJ1aWxkIChpZiBhbnkpIiwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImVycm9yc19ubyIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAiZXJyb3JzX25vIiksCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ2Vycm9yc19ubycsCisgICAgICAgICAgICAgICAgICAgICAnZmlsdGVyJyA6IHsnY2xhc3MnIDogJ2Vycm9yc19ubycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiAnU2hvdzonLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdCdWlsZHMgd2l0aCBlcnJvcnMnLCAnZXJyb3JzX25vX19ndGU6MScsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihlcnJvcnNfbm9fX2d0ZT0xKS5jb3VudCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnQnVpbGRzIHdpdGhvdXQgZXJyb3JzJywgJ2Vycm9yc19ubzowJywgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKGVycm9yc19ubz0wKS5jb3VudCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnV2FybmluZ3MnLCAnY2xjbGFzcyc6ICd3YXJuaW5nc19ubycsCisgICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiSG93IG1hbnkgd2FybmluZ3Mgd2VyZSBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIGJ1aWxkIChpZiBhbnkpIiwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgIndhcm5pbmdzX25vIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJ3YXJuaW5nc19ubyIpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICd3YXJuaW5nc19ubycsCisgICAgICAgICAgICAgICAgICAgICAnZmlsdGVyJyA6IHsnY2xhc3MnIDogJ3dhcm5pbmdzX25vJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYWJlbCc6ICdTaG93OicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0J1aWxkcyB3aXRoIHdhcm5pbmdzJywnd2FybmluZ3Nfbm9fX2d0ZToxJywgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHdhcm5pbmdzX25vX19ndGU9MSkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0J1aWxkcyB3aXRob3V0IHdhcm5pbmdzJywnd2FybmluZ3Nfbm86MCcsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcih3YXJuaW5nc19ubz0wKS5jb3VudCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnVGltZScsICdjbGNsYXNzJzogJ3RpbWUnLCAnaGlkZGVuJyA6IDEsCisgICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiSG93IGxvbmcgaXQgdG9vayB0aGUgYnVpbGQgdG8gZmluaXNoIiwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInRpbWVzcGVudCIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAidGltZXNwZW50IiksCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ3RpbWVzcGVudCcsCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdJbWFnZSBmaWxlcycsICdjbGNsYXNzJzogJ291dHB1dCcsCisgICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiVGhlIHJvb3QgZmlsZSBzeXN0ZW0gdHlwZXMgcHJvZHVjZWQgYnkgdGhlIGJ1aWxkLiBZb3UgY2FuIGZpbmQgdGhlbSBpbiB5b3VyIDxjb2RlPi9idWlsZC90bXAvZGVwbG95L2ltYWdlcy88L2NvZGU+IGRpcmVjdG9yeSIsCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRPRE86IGNvbXB1dGUgaW1hZ2UgZnN0eXBlcyBmcm9tIFRhcmdldF9JbWFnZV9GaWxlCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAjIG1lcmdlIGRhdGVyYW5nZSB2YWx1ZXMKKyAgICAgICAgY29udGV4dC51cGRhdGUoY29udGV4dF9kYXRlKQorICAgICAgICByZXR1cm4gY29udGV4dCwgcGFnZXNpemUsIG9yZGVyYnkKKworCisKKyAgICAjIG5ldyBwcm9qZWN0CisgICAgZGVmIG5ld3Byb2plY3QocmVxdWVzdCk6CisgICAgICAgIHRlbXBsYXRlID0gIm5ld3Byb2plY3QuaHRtbCIKKyAgICAgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICdlbWFpbCc6IHJlcXVlc3QudXNlci5lbWFpbCBpZiByZXF1ZXN0LnVzZXIuaXNfYXV0aGVudGljYXRlZCgpIGVsc2UgJycsCisgICAgICAgICAgICAndXNlcm5hbWUnOiByZXF1ZXN0LnVzZXIudXNlcm5hbWUgaWYgcmVxdWVzdC51c2VyLmlzX2F1dGhlbnRpY2F0ZWQoKSBlbHNlICcnLAorICAgICAgICAgICAgJ3JlbGVhc2VzJzogUmVsZWFzZS5vYmplY3RzLm9yZGVyX2J5KCJkZXNjcmlwdGlvbiIpLAorICAgICAgICB9CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udGV4dFsnZGVmYXVsdGJyYW5jaCddID0gVG9hc3RlclNldHRpbmcub2JqZWN0cy5nZXQobmFtZSA9ICJERUZBVUxUX1JFTEVBU0UiKS52YWx1ZQorICAgICAgICBleGNlcHQgVG9hc3RlclNldHRpbmcuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICJHRVQiOgorICAgICAgICAgICAgIyByZW5kZXIgbmV3IHByb2plY3QgcGFnZQorICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKyAgICAgICAgZWxpZiByZXF1ZXN0Lm1ldGhvZCA9PSAiUE9TVCI6CisgICAgICAgICAgICBtYW5kYXRvcnlfZmllbGRzID0gWydwcm9qZWN0bmFtZScsICdwdHlwZSddCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcHR5cGUgPSByZXF1ZXN0LlBPU1QuZ2V0KCdwdHlwZScpCisgICAgICAgICAgICAgICAgaWYgcHR5cGUgPT0gImJ1aWxkIjoKKyAgICAgICAgICAgICAgICAgICAgbWFuZGF0b3J5X2ZpZWxkcy5hcHBlbmQoJ3Byb2plY3R2ZXJzaW9uJykKKyAgICAgICAgICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBoYXZlIHZhbHVlcyBmb3IgYWxsIG1hbmRhdG9yeV9maWVsZHMKKyAgICAgICAgICAgICAgICBpZiByZWR1Y2UoIGxhbWJkYSB4LCB5OiB4IG9yIHksIG1hcChsYW1iZGEgeDogbGVuKHJlcXVlc3QuUE9TVC5nZXQoeCwgJycpKSA9PSAwLCBtYW5kYXRvcnlfZmllbGRzKSk6CisgICAgICAgICAgICAgICAgIyBzZXQgYWxlcnQgZm9yIG1pc3NpbmcgZmllbGRzCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEJhZFBhcmFtZXRlckV4Y2VwdGlvbigiRmllbGRzIG1pc3Npbmc6ICIgKworICAgICAgICAgICAgIiwgIi5qb2luKFt4IGZvciB4IGluIG1hbmRhdG9yeV9maWVsZHMgaWYgbGVuKHJlcXVlc3QuUE9TVC5nZXQoeCwgJycpKSA9PSAwIF0pKQorCisgICAgICAgICAgICAgICAgaWYgbm90IHJlcXVlc3QudXNlci5pc19hdXRoZW50aWNhdGVkKCk6CisgICAgICAgICAgICAgICAgICAgIHVzZXIgPSBhdXRoZW50aWNhdGUodXNlcm5hbWUgPSByZXF1ZXN0LlBPU1QuZ2V0KCd1c2VybmFtZScsICdfYW5vbnVzZXInKSwgcGFzc3dvcmQgPSAnbm9wYXNzJykKKyAgICAgICAgICAgICAgICAgICAgaWYgdXNlciBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgdXNlciA9IFVzZXIub2JqZWN0cy5jcmVhdGVfdXNlcih1c2VybmFtZSA9IHJlcXVlc3QuUE9TVC5nZXQoJ3VzZXJuYW1lJywgJ19hbm9udXNlcicpLCBlbWFpbCA9IHJlcXVlc3QuUE9TVC5nZXQoJ2VtYWlsJywgJycpLCBwYXNzd29yZCA9ICJub3Bhc3MiKQorCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VyID0gYXV0aGVudGljYXRlKHVzZXJuYW1lID0gdXNlci51c2VybmFtZSwgcGFzc3dvcmQgPSAnbm9wYXNzJykKKyAgICAgICAgICAgICAgICAgICAgbG9naW4ocmVxdWVzdCwgdXNlcikKKworICAgICAgICAgICAgICAgICMgIHNhdmUgdGhlIHByb2plY3QKKyAgICAgICAgICAgICAgICBpZiBwdHlwZSA9PSAiYW5hbHlzaXMiOgorICAgICAgICAgICAgICAgICAgICByZWxlYXNlID0gTm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgPSBSZWxlYXNlLm9iamVjdHMuZ2V0KHBrID0gcmVxdWVzdC5QT1NULmdldCgncHJvamVjdHZlcnNpb24nLCBOb25lICkpCisKKyAgICAgICAgICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuY3JlYXRlX3Byb2plY3QobmFtZSA9IHJlcXVlc3QuUE9TVFsncHJvamVjdG5hbWUnXSwgcmVsZWFzZSA9IHJlbGVhc2UpCisgICAgICAgICAgICAgICAgcHJqLnVzZXJfaWQgPSByZXF1ZXN0LnVzZXIucGsKKyAgICAgICAgICAgICAgICBwcmouc2F2ZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlZGlyZWN0KHJldmVyc2UocHJvamVjdCwgYXJncz0ocHJqLnBrLCkpICsgIj9ub3RpZnk9bmV3LXByb2plY3QiKQorCisgICAgICAgICAgICBleGNlcHQgKEludGVncml0eUVycm9yLCBCYWRQYXJhbWV0ZXJFeGNlcHRpb24pIGFzIGU6CisgICAgICAgICAgICAgICAgIyBmaWxsIGluIHBhZ2Ugd2l0aCBwcmV2aW91c2x5IHN1Ym1pdHRlZCB2YWx1ZXMKKyAgICAgICAgICAgICAgICBtYXAobGFtYmRhIHg6IGNvbnRleHQuX19zZXRpdGVtX18oeCwgcmVxdWVzdC5QT1NULmdldCh4LCAiLS0gbWlzc2luZyIpKSwgbWFuZGF0b3J5X2ZpZWxkcykKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGUsIEludGVncml0eUVycm9yKSBhbmQgInVzZXJuYW1lIiBpbiBzdHIoZSk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbJ2FsZXJ0J10gPSAiWW91ciBjaG9zZW4gdXNlcm5hbWUgaXMgYWxyZWFkeSB1c2VkIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbJ2FsZXJ0J10gPSBzdHIoZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSW52YWxpZCBIVFRQIG1ldGhvZCBmb3IgdGhpcyBwYWdlIikKKworCisKKyAgICAjIFNob3dzIHRoZSBlZGl0IHByb2plY3QgcGFnZQorICAgIEBfdGVtcGxhdGVfcmVuZGVyZXIoJ3Byb2plY3QuaHRtbCcpCisgICAgZGVmIHByb2plY3QocmVxdWVzdCwgcGlkKToKKyAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChpZCA9IHBpZCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwdXNlciA9IFVzZXIub2JqZWN0cy5nZXQoaWQgPSBwcmoudXNlcl9pZCkKKyAgICAgICAgZXhjZXB0IFVzZXIuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgcHVzZXIgPSBOb25lCisKKyAgICAgICAgIyBleGVjdXRlIFBPU1QgcmVxdWVzdHMKKyAgICAgICAgaWYgcmVxdWVzdC5tZXRob2QgPT0gIlBPU1QiOgorICAgICAgICAgICAgIyBhZGQgbGF5ZXJzCisgICAgICAgICAgICBpZiAnbGF5ZXJBZGQnIGluIHJlcXVlc3QuUE9TVCBhbmQgbGVuKHJlcXVlc3QuUE9TVFsnbGF5ZXJBZGQnXSkgPiAwOgorICAgICAgICAgICAgICAgIGZvciBsYyBpbiBMYXllcl9WZXJzaW9uLm9iamVjdHMuZmlsdGVyKHBrX19pbj1baSBmb3IgaSBpbiByZXF1ZXN0LlBPU1RbJ2xheWVyQWRkJ10uc3BsaXQoIiwiKSBpZiBsZW4oaSkgPiAwXSk6CisgICAgICAgICAgICAgICAgICAgIFByb2plY3RMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUocHJvamVjdCA9IHByaiwgbGF5ZXJjb21taXQgPSBsYykKKworICAgICAgICAgICAgIyByZW1vdmUgbGF5ZXJzCisgICAgICAgICAgICBpZiAnbGF5ZXJEZWwnIGluIHJlcXVlc3QuUE9TVCBhbmQgbGVuKHJlcXVlc3QuUE9TVFsnbGF5ZXJEZWwnXSkgPiAwOgorICAgICAgICAgICAgICAgIGZvciB0IGluIHJlcXVlc3QuUE9TVFsnbGF5ZXJEZWwnXS5zdHJpcCgpLnNwbGl0KCIgIik6CisgICAgICAgICAgICAgICAgICAgIHB0ID0gUHJvamVjdExheWVyLm9iamVjdHMuZmlsdGVyKHByb2plY3QgPSBwcmosIGxheWVyY29tbWl0X2lkID0gaW50KHQpKS5kZWxldGUoKQorCisgICAgICAgICAgICBpZiAncHJvamVjdE5hbWUnIGluIHJlcXVlc3QuUE9TVDoKKyAgICAgICAgICAgICAgICBwcmoubmFtZSA9IHJlcXVlc3QuUE9TVFsncHJvamVjdE5hbWUnXQorICAgICAgICAgICAgICAgIHByai5zYXZlKCk7CisKKyAgICAgICAgICAgIGlmICdwcm9qZWN0VmVyc2lvbicgaW4gcmVxdWVzdC5QT1NUOgorICAgICAgICAgICAgICAgICMgSWYgdGhlIHJlbGVhc2UgaXMgdGhlIGN1cnJlbnQgcHJvamVjdCB0aGVuIHJldHVybiBub3cKKyAgICAgICAgICAgICAgICBpZiBwcmoucmVsZWFzZS5wayA9PSBpbnQocmVxdWVzdC5QT1NULmdldCgncHJvamVjdFZlcnNpb24nLC0xKSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fQorCisgICAgICAgICAgICAgICAgcHJqLnJlbGVhc2UgPSBSZWxlYXNlLm9iamVjdHMuZ2V0KHBrID0gcmVxdWVzdC5QT1NUWydwcm9qZWN0VmVyc2lvbiddKQorICAgICAgICAgICAgICAgICMgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIGJpdGJha2UgdmVyc2lvbgorICAgICAgICAgICAgICAgIHByai5iaXRiYWtlX3ZlcnNpb24gPSBwcmoucmVsZWFzZS5iaXRiYWtlX3ZlcnNpb24KKyAgICAgICAgICAgICAgICBwcmouc2F2ZSgpCisgICAgICAgICAgICAgICAgIyB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgbGF5ZXJzCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcHJqLnByb2plY3RsYXllcl9zZXQuYWxsKCk6CisgICAgICAgICAgICAgICAgICAgICMgZmluZCBhbmQgYWRkIGEgc2ltaWxhcmx5LW5hbWVkIGxheWVyIG9uIHRoZSBuZXcgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGx2ID0gcHJqLmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucyhsYXllcl9uYW1lID0gaS5sYXllcmNvbW1pdC5sYXllci5uYW1lKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdExheWVyLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShwcm9qZWN0ID0gcHJqLCBsYXllcmNvbW1pdCA9IGx2KQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZ2V0IHJpZCBvZiB0aGUgb2xkIGVudHJ5CisgICAgICAgICAgICAgICAgICAgICAgICBpLmRlbGV0ZSgpCisKKyAgICAgICAgICAgIGlmICdtYWNoaW5lTmFtZScgaW4gcmVxdWVzdC5QT1NUOgorICAgICAgICAgICAgICAgIG1hY2hpbmV2YXIgPSBwcmoucHJvamVjdHZhcmlhYmxlX3NldC5nZXQobmFtZT0iTUFDSElORSIpCisgICAgICAgICAgICAgICAgbWFjaGluZXZhci52YWx1ZT1yZXF1ZXN0LlBPU1RbJ21hY2hpbmVOYW1lJ10KKyAgICAgICAgICAgICAgICBtYWNoaW5ldmFyLnNhdmUoKQorCisKKyAgICAgICAgIyB3ZSB1c2UgaW1wbGljaXQga25vd2xlZGdlIG9mIHRoZSBjdXJyZW50IHVzZXIncyBwcm9qZWN0IHRvIGZpbHRlciBsYXllciBpbmZvcm1hdGlvbiwgZS5nLgorICAgICAgICBwaWQgPSBwcmouaWQKKworICAgICAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyCisgICAgICAgIGZyZXF0YXJnZXRzID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJlcXRhcmdldHMgKz0gbWFwKGxhbWJkYSB4OiB4LnRhcmdldCwgcmVkdWNlKGxhbWJkYSB4LCB5OiB4ICsgeSwgICBtYXAobGFtYmRhIHg6IGxpc3QoeC50YXJnZXRfc2V0LmFsbCgpKSwgQnVpbGQub2JqZWN0cy5maWx0ZXIocHJvamVjdCA9IHByaiwgb3V0Y29tZV9fbHQgPSBCdWlsZC5JTl9QUk9HUkVTUykpKSkKKyAgICAgICAgICAgIGZyZXF0YXJnZXRzICs9IG1hcChsYW1iZGEgeDogeC50YXJnZXQsIHJlZHVjZShsYW1iZGEgeCwgeTogeCArIHksICAgbWFwKGxhbWJkYSB4OiBsaXN0KHguYnJ0YXJnZXRfc2V0LmFsbCgpKSwgQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZmlsdGVyKHByb2plY3QgPSBwcmosIHN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9GQUlMRUQpKSkpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZyZXF0YXJnZXRzID0gQ291bnRlcihmcmVxdGFyZ2V0cykKKyAgICAgICAgZnJlcXRhcmdldHMgPSBzb3J0ZWQoZnJlcXRhcmdldHMsIGtleSA9IGxhbWJkYSB4OiBmcmVxdGFyZ2V0c1t4XSwgcmV2ZXJzZT1UcnVlKQorCisgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAicHJvamVjdCIgOiBwcmosCisgICAgICAgICAgICAibHZzX25vcyIgOiBMYXllcl9WZXJzaW9uLm9iamVjdHMuYWxsKCkuY291bnQoKSwKKyAgICAgICAgICAgICJjb21wbGV0ZWRidWlsZHMiOiBCdWlsZC5vYmplY3RzLmZpbHRlcihwcm9qZWN0X2lkID0gcGlkKS5maWx0ZXIob3V0Y29tZV9fbHRlID0gQnVpbGQuSU5fUFJPR1JFU1MpLAorICAgICAgICAgICAgInByaiIgOiB7Im5hbWUiOiBwcmoubmFtZSwgfSwKKyAgICAgICAgICAgICJidWlsZHJlcXVlc3RzIiA6IHByai5idWlsZF9zZXQuZmlsdGVyKG91dGNvbWU9QnVpbGQuSU5fUFJPR1JFU1MpLAorICAgICAgICAgICAgImJ1aWxkcyIgOiBfcHJvamVjdF9yZWNlbnRfYnVpbGRfbGlzdChwcmopLAorICAgICAgICAgICAgImxheWVycyIgOiAgbWFwKGxhbWJkYSB4OiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiaWQiOiB4LmxheWVyY29tbWl0LnBrLAorICAgICAgICAgICAgICAgICAgICAgICAgIm9yZGVyaWQiOiB4LnBrLAorICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogeC5sYXllcmNvbW1pdC5sYXllci5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiB4LmxheWVyY29tbWl0LmxheWVyLnZjc191cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAidmNzX3JlZmVyZW5jZSIgOiB4LmxheWVyY29tbWl0LmdldF92Y3NfcmVmZXJlbmNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAidXJsIjogeC5sYXllcmNvbW1pdC5sYXllci5sYXllcl9pbmRleF91cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAibGF5ZXJkZXRhaWx1cmwiOiB4LmxheWVyY29tbWl0LmdldF9kZXRhaWxzcGFnZV91cmwocHJqLnBrKSwKKyAgICAgICAgICAgICAgICAjIFRoaXMgYnJhbmNoIG5hbWUgaXMgYWN0dWFsbHkgdGhlIHJlbGVhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICJicmFuY2giIDogeyAibmFtZSIgOiB4LmxheWVyY29tbWl0LmdldF92Y3NfcmVmZXJlbmNlKCksICJsYXllcnNvdXJjZSIgOiB4LmxheWVyY29tbWl0LnVwX2JyYW5jaC5sYXllcl9zb3VyY2UubmFtZSBpZiB4LmxheWVyY29tbWl0LnVwX2JyYW5jaCAhPSBOb25lIGVsc2UgTm9uZX19LAorICAgICAgICAgICAgICAgICAgICBwcmoucHJvamVjdGxheWVyX3NldC5hbGwoKS5vcmRlcl9ieSgiaWQiKSksCisgICAgICAgICAgICAidGFyZ2V0cyIgOiBtYXAobGFtYmRhIHg6IHsidGFyZ2V0IiA6IHgudGFyZ2V0LCAidGFzayIgOiB4LnRhc2ssICJwayI6IHgucGt9LCBwcmoucHJvamVjdHRhcmdldF9zZXQuYWxsKCkpLAorICAgICAgICAgICAgInZhcmlhYmxlcyI6IG1hcChsYW1iZGEgeDogKHgubmFtZSwgeC52YWx1ZSksIHByai5wcm9qZWN0dmFyaWFibGVfc2V0LmFsbCgpKSwKKyAgICAgICAgICAgICJmcmVxdGFyZ2V0cyI6IGZyZXF0YXJnZXRzWzo1XSwKKyAgICAgICAgICAgICJyZWxlYXNlcyI6IG1hcChsYW1iZGEgeDogeyJpZCI6IHgucGssICJuYW1lIjogeC5uYW1lLCAiZGVzY3JpcHRpb24iOnguZGVzY3JpcHRpb259LCBSZWxlYXNlLm9iamVjdHMuYWxsKCkpLAorICAgICAgICAgICAgInByb2plY3RfaHRtbCI6IDEsCisgICAgICAgICAgICAicmVjaXBlc1R5cGVBaGVhZFVybCI6IHJldmVyc2UoJ3hocl9yZWNpcGVzdHlwZWFoZWFkJywgYXJncz0ocHJqLnBrLCkpLAorICAgICAgICAgICAgInByb2plY3RCdWlsZHNVcmwiOiByZXZlcnNlKCdwcm9qZWN0YnVpbGRzJywgYXJncz0ocHJqLnBrLCkpLAorICAgICAgICB9CisKKyAgICAgICAgaWYgcHJqLnJlbGVhc2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjb250ZXh0WydyZWxlYXNlJ10gPSB7ICJpZCI6IHByai5yZWxlYXNlLnBrLCAibmFtZSI6IHByai5yZWxlYXNlLm5hbWUsICJkZXNjcmlwdGlvbiI6IHByai5yZWxlYXNlLmRlc2NyaXB0aW9ufQorCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udGV4dFsibWFjaGluZSJdID0geyJuYW1lIjogcHJqLnByb2plY3R2YXJpYWJsZV9zZXQuZ2V0KG5hbWU9Ik1BQ0hJTkUiKS52YWx1ZX0KKyAgICAgICAgZXhjZXB0IFByb2plY3RWYXJpYWJsZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICBjb250ZXh0WyJtYWNoaW5lIl0gPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHRbImRpc3RybyJdID0gcHJqLnByb2plY3R2YXJpYWJsZV9zZXQuZ2V0KG5hbWU9IkRJU1RSTyIpLnZhbHVlCisgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgY29udGV4dFsiZGlzdHJvIl0gPSAiLS0gbm90IHNldCB5ZXQiCisKKyAgICAgICAgcmV0dXJuIGNvbnRleHQKKworICAgIGRlZiBqc3VuaXR0ZXN0cyhyZXF1ZXN0KToKKyAgICAgICIiIiBQcm92aWRlcyBhIHBhZ2UgZm9yIHRoZSBqcyB1bml0IHRlc3RzICIiIgorICAgICAgYmJ2ID0gQml0YmFrZVZlcnNpb24ub2JqZWN0cy5maWx0ZXIoYnJhbmNoPSJtYXN0ZXIiKS5maXJzdCgpCisgICAgICByZWxlYXNlID0gUmVsZWFzZS5vYmplY3RzLmZpbHRlcihiaXRiYWtlX3ZlcnNpb249YmJ2KS5maXJzdCgpCisKKyAgICAgIG5hbWUgPSAiX2pzX3VuaXRfdGVzdF9wcmpfIgorCisgICAgICAjIElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIHByb2plY3QgYnkgdGhpcyBuYW1lIGRlbGV0ZSBpdC4gV2UgZG9uJ3Qgd2FudAorICAgICAgIyBMb3RzIG9mIGR1cGxpY2F0ZXMgY2x1dHRlcmluZyB1cCB0aGUgcHJvamVjdHMuCisgICAgICBQcm9qZWN0Lm9iamVjdHMuZmlsdGVyKG5hbWU9bmFtZSkuZGVsZXRlKCkKKworICAgICAgbmV3X3Byb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuY3JlYXRlX3Byb2plY3QobmFtZT1uYW1lLCByZWxlYXNlPXJlbGVhc2UpCisKKyAgICAgIGNvbnRleHQgPSB7ICdwcm9qZWN0JyA6IG5ld19wcm9qZWN0IH0KKyAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgImpzLXVuaXQtdGVzdHMuaHRtbCIsIGNvbnRleHQpCisKKyAgICBmcm9tIGRqYW5nby52aWV3cy5kZWNvcmF0b3JzLmNzcmYgaW1wb3J0IGNzcmZfZXhlbXB0CisgICAgQGNzcmZfZXhlbXB0CisgICAgZGVmIHhocl90ZXN0cmVsZWFzZWNoYW5nZShyZXF1ZXN0LCBwaWQpOgorICAgICAgICBkZWYgcmVzcG9uc2UoZGF0YSk6CisgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZT0iYXBwbGljYXRpb24vanNvbiIpCisKKyAgICAgICAgIiIiIHJldHVybnMgbGF5ZXIgdmVyc2lvbnMgdGhhdCB3b3VsZCBiZSBkZWxldGVkIG9uIHRoZSBuZXcKKyAgICAgICAgcmVsZWFzZV9fcGsgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaiA9IFByb2plY3Qub2JqZWN0cy5nZXQocGsgPSBwaWQpCisgICAgICAgICAgICBuZXdfcmVsZWFzZV9pZCA9IHJlcXVlc3QuR0VUWyduZXdfcmVsZWFzZV9pZCddCisKKyAgICAgICAgICAgICMgSWYgd2UncmUgYWxyZWFkeSBvbiB0aGlzIHByb2plY3QgZG8gbm90aGluZworICAgICAgICAgICAgaWYgcHJqLnJlbGVhc2UucGsgPT0gaW50KG5ld19yZWxlYXNlX2lkKToKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVwb25zZSh7ImVycm9yIjogIm9rIiwgInJvd3MiOiBbXX0pCisKKyAgICAgICAgICAgIHJldHZhbCA9IFtdCisKKyAgICAgICAgICAgIGZvciBpIGluIHByai5wcm9qZWN0bGF5ZXJfc2V0LmFsbCgpOgorICAgICAgICAgICAgICAgIGx2ID0gcHJqLmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucyhyZWxlYXNlID0gUmVsZWFzZS5vYmplY3RzLmdldChwaz1uZXdfcmVsZWFzZV9pZCkpLmZpbHRlcihsYXllcl9fbmFtZSA9IGkubGF5ZXJjb21taXQubGF5ZXIubmFtZSkKKyAgICAgICAgICAgICAgICAjIHRoZXJlIGlzIG5vIGxheWVyX3ZlcnNpb24gd2l0aCB0aGUgbmV3IHJlbGVhc2UgaWQsCisgICAgICAgICAgICAgICAgIyBhbmQgdGhlIHNhbWUgbmFtZQorICAgICAgICAgICAgICAgIGlmIGx2LmNvdW50KCkgPCAxOgorICAgICAgICAgICAgICAgICAgICByZXR2YWwuYXBwZW5kKGkpCisKKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZSh7ImVycm9yIjoib2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicm93cyIgOiBtYXAoIF9sdl90b19kaWN0KHByaiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAobGFtYmRhIHg6IHgubGF5ZXJjb21taXQsIHJldHZhbCApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCisKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlKHsiZXJyb3IiOiBzdHIoZSkgfSkKKworICAgIGRlZiB4aHJfY29uZmlndmFyZWRpdChyZXF1ZXN0LCBwaWQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KGlkID0gcGlkKQorICAgICAgICAgICAgIyBhZGQgY29uZiB2YXJpYWJsZXMKKyAgICAgICAgICAgIGlmICdjb25maWd2YXJBZGQnIGluIHJlcXVlc3QuUE9TVDoKKyAgICAgICAgICAgICAgICB0PXJlcXVlc3QuUE9TVFsnY29uZmlndmFyQWRkJ10uc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmICI6IiBpbiB0OgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgdmFsdWUgPSB0LnNwbGl0KCI6IikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSA9IHQKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAiIgorCisgICAgICAgICAgICAgICAgcHQsIGNyZWF0ZWQgPSBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5nZXRfb3JfY3JlYXRlKHByb2plY3QgPSBwcmosIG5hbWUgPSB2YXJpYWJsZSwgdmFsdWUgPSB2YWx1ZSkKKyAgICAgICAgICAgICMgY2hhbmdlIGNvbmYgdmFyaWFibGVzCisgICAgICAgICAgICBpZiAnY29uZmlndmFyQ2hhbmdlJyBpbiByZXF1ZXN0LlBPU1Q6CisgICAgICAgICAgICAgICAgdD1yZXF1ZXN0LlBPU1RbJ2NvbmZpZ3ZhckNoYW5nZSddLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiAiOiIgaW4gdDoKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHZhbHVlID0gdC5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgPSB0CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gIiIKKworICAgICAgICAgICAgICAgIHB0LCBjcmVhdGVkID0gUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShwcm9qZWN0ID0gcHJqLCBuYW1lID0gdmFyaWFibGUpCisgICAgICAgICAgICAgICAgcHQudmFsdWU9dmFsdWUKKyAgICAgICAgICAgICAgICBwdC5zYXZlKCkKKyAgICAgICAgICAgICMgcmVtb3ZlIGNvbmYgdmFyaWFibGVzCisgICAgICAgICAgICBpZiAnY29uZmlndmFyRGVsJyBpbiByZXF1ZXN0LlBPU1Q6CisgICAgICAgICAgICAgICAgdD1yZXF1ZXN0LlBPU1RbJ2NvbmZpZ3ZhckRlbCddLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBwdCA9IFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldChwayA9IGludCh0KSkuZGVsZXRlKCkKKworICAgICAgICAgICAgIyByZXR1cm4gYWxsIHByb2plY3Qgc2V0dGluZ3MsIGZpbHRlciBvdXQgYmxhY2tsaXN0IGFuZCBlbHNld2hlcmUtbWFuYWdlZCB2YXJpYWJsZXMKKyAgICAgICAgICAgIHZhcnNfbWFuYWdlZCx2YXJzX2ZzdHlwZXMsdmFyc19ibGFja2xpc3QgPSBnZXRfcHJvamVjdF9jb25maWd2YXJzX2NvbnRleHQoKQorICAgICAgICAgICAgY29uZmlndmFyc19xdWVyeSA9IFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmZpbHRlcihwcm9qZWN0X2lkID0gcGlkKS5hbGwoKQorICAgICAgICAgICAgZm9yIHZhciBpbiB2YXJzX21hbmFnZWQ6CisgICAgICAgICAgICAgICAgY29uZmlndmFyc19xdWVyeSA9IGNvbmZpZ3ZhcnNfcXVlcnkuZXhjbHVkZShuYW1lID0gdmFyKQorICAgICAgICAgICAgZm9yIHZhciBpbiB2YXJzX2JsYWNrbGlzdDoKKyAgICAgICAgICAgICAgICBjb25maWd2YXJzX3F1ZXJ5ID0gY29uZmlndmFyc19xdWVyeS5leGNsdWRlKG5hbWUgPSB2YXIpCisKKyAgICAgICAgICAgIHJldHVybl9kYXRhID0geworICAgICAgICAgICAgICAgICJlcnJvciI6ICJvayIsCisgICAgICAgICAgICAgICAgJ2NvbmZpZ3ZhcnMnICAgOiBtYXAobGFtYmRhIHg6ICh4Lm5hbWUsIHgudmFsdWUsIHgucGspLCBjb25maWd2YXJzX3F1ZXJ5KSwKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm5fZGF0YVsnZGlzdHJvJ10gPSBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5nZXQocHJvamVjdCA9IHByaiwgbmFtZSA9ICJESVNUUk8iKS52YWx1ZSwKKyAgICAgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm5fZGF0YVsnZnN0eXBlcyddID0gUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0KHByb2plY3QgPSBwcmosIG5hbWUgPSAiSU1BR0VfRlNUWVBFUyIpLnZhbHVlLAorICAgICAgICAgICAgZXhjZXB0IFByb2plY3RWYXJpYWJsZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybl9kYXRhWydpbWFnZV9pbnN0YWxsX2FwcGVuZCddID0gUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0KHByb2plY3QgPSBwcmosIG5hbWUgPSAiSU1BR0VfSU5TVEFMTF9hcHBlbmQiKS52YWx1ZSwKKyAgICAgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm5fZGF0YVsncGFja2FnZV9jbGFzc2VzJ10gPSBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5nZXQocHJvamVjdCA9IHByaiwgbmFtZSA9ICJQQUNLQUdFX0NMQVNTRVMiKS52YWx1ZSwKKyAgICAgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm5fZGF0YVsnc2RrX21hY2hpbmUnXSA9IFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldChwcm9qZWN0ID0gcHJqLCBuYW1lID0gIlNES01BQ0hJTkUiKS52YWx1ZSwKKyAgICAgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uLmR1bXBzKCByZXR1cm5fZGF0YSApLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCisKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uLmR1bXBzKHsiZXJyb3IiOnN0cihlKSArICJcbiIgKyB0cmFjZWJhY2suZm9ybWF0X2V4YygpfSksIGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIikKKworCisgICAgZGVmIHhocl9pbXBvcnRsYXllcihyZXF1ZXN0KToKKyAgICAgICAgaWYgKG5vdCByZXF1ZXN0LlBPU1QuaGFzX2tleSgndmNzX3VybCcpIG9yCisgICAgICAgICAgICBub3QgcmVxdWVzdC5QT1NULmhhc19rZXkoJ25hbWUnKSBvcgorICAgICAgICAgICAgbm90IHJlcXVlc3QuUE9TVC5oYXNfa2V5KCdnaXRfcmVmJykgb3IKKyAgICAgICAgICAgIG5vdCByZXF1ZXN0LlBPU1QuaGFzX2tleSgncHJvamVjdF9pZCcpKToKKyAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoeyJlcnJvciI6ICJNaXNzaW5nIHBhcmFtZXRlcnM7IHJlcXVpcmVzIHZjc191cmwsIG5hbWUsIGdpdF9yZWYgYW5kIHByb2plY3RfaWQifSksIGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIikKKworICAgICAgICBsYXllcnNfYWRkZWQgPSBbXTsKKworICAgICAgICAjIFJ1ZGltZW50YXJ5IGNoZWNrIGZvciBhbnkgcG9zc2libGUgaHRtbCB0YWdzCisgICAgICAgIGlmICI8IiBpbiByZXF1ZXN0LlBPU1Q6CisgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uZmlsdGVyKHsiZXJyb3IiOiAiSW52YWxpZCBjaGFyYWN0ZXIgPCJ9KSwgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQorCisgICAgICAgIHByaiA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9cmVxdWVzdC5QT1NUWydwcm9qZWN0X2lkJ10pCisKKyAgICAgICAgIyBTdHJpcCB0cmFpbGluZy9sZWFkaW5nIHdoaXRlc3BhY2UgZnJvbSBhbGwgdmFsdWVzCisgICAgICAgICMgcHV0IGludG8gYSBuZXcgZGljdCBiZWNhdXNlIFBPU1Qgb25lIGlzIGltbXV0YWJsZQorICAgICAgICBwb3N0X2RhdGEgPSBkaWN0KCkKKyAgICAgICAgZm9yIGtleSx2YWwgaW4gcmVxdWVzdC5QT1NULml0ZXJpdGVtcygpOgorICAgICAgICAgIHBvc3RfZGF0YVtrZXldID0gdmFsLnN0cmlwKCkKKworCisgICAgICAgICMgV2UgbmVlZCB0byBrbm93IHdoYXQgcmVsZWFzZSB0aGUgY3VycmVudCBwcm9qZWN0IGlzIHNvIHRoYXQgd2UKKyAgICAgICAgIyBjYW4gc2V0IHRoZSBpbXBvcnRlZCBsYXllcidzIHVwX2JyYW5jaF9pZAorICAgICAgICBwcmpfYnJhbmNoX25hbWUgPSBSZWxlYXNlLm9iamVjdHMuZ2V0KHBrPXByai5yZWxlYXNlX2lkKS5icmFuY2hfbmFtZQorICAgICAgICB1cF9icmFuY2gsIGJyYW5jaF9jcmVhdGVkID0gQnJhbmNoLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShuYW1lPXByal9icmFuY2hfbmFtZSwgbGF5ZXJfc291cmNlX2lkPUxheWVyU291cmNlLlRZUEVfSU1QT1JURUQpCisKKyAgICAgICAgbGF5ZXJfc291cmNlID0gTGF5ZXJTb3VyY2Uub2JqZWN0cy5nZXQoc291cmNldHlwZT1MYXllclNvdXJjZS5UWVBFX0lNUE9SVEVEKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsYXllciwgbGF5ZXJfY3JlYXRlZCA9IExheWVyLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShuYW1lPXBvc3RfZGF0YVsnbmFtZSddKQorICAgICAgICBleGNlcHQgTXVsdGlwbGVPYmplY3RzUmV0dXJuZWQ6CisgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoeyJlcnJvciI6ICJoaW50LWxheWVyLWV4aXN0cyJ9KSwgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQorCisgICAgICAgIGlmIGxheWVyOgorICAgICAgICAgICAgaWYgbGF5ZXJfY3JlYXRlZDoKKyAgICAgICAgICAgICAgICBsYXllci5sYXllcl9zb3VyY2UgPSBsYXllcl9zb3VyY2UKKyAgICAgICAgICAgICAgICBsYXllci52Y3NfdXJsID0gcG9zdF9kYXRhWyd2Y3NfdXJsJ10KKyAgICAgICAgICAgICAgICBsYXllci51cF9kYXRlID0gdGltZXpvbmUubm93KCkKKyAgICAgICAgICAgICAgICBsYXllci5zYXZlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBXZSBoYXZlIGFuIGV4aXN0aW5nIGxheWVyIGJ5IHRoaXMgbmFtZSwgbGV0J3Mgc2VlIGlmIHRoZSBnaXQKKyAgICAgICAgICAgICAgICAjIHVybCBpcyB0aGUgc2FtZSwgaWYgaXQgaXMgdGhlbiB3ZSBjYW4ganVzdCBjcmVhdGUgYSBuZXcgbGF5ZXIKKyAgICAgICAgICAgICAgICAjIHZlcnNpb24gZm9yIHRoaXMgbGF5ZXIuIE90aGVyd2lzZSB3ZSBuZWVkIHRvIGJhaWwgb3V0LgorICAgICAgICAgICAgICAgIGlmIGxheWVyLnZjc191cmwgIT0gcG9zdF9kYXRhWyd2Y3NfdXJsJ106CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcih7ImVycm9yIjogImhpbnQtbGF5ZXItZXhpc3RzLXdpdGgtZGlmZmVyZW50LXVybCIgLCAiY3VycmVudF91cmwiIDogbGF5ZXIudmNzX3VybCwgImN1cnJlbnRfaWQiOiBsYXllci5pZCB9KSwgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQorCisKKyAgICAgICAgICAgIGxheWVyX3ZlcnNpb24sIHZlcnNpb25fY3JlYXRlZCA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyX3NvdXJjZT1sYXllcl9zb3VyY2UsIGxheWVyPWxheWVyLCBwcm9qZWN0PXByaiwgdXBfYnJhbmNoX2lkPXVwX2JyYW5jaC5pZCxicmFuY2g9cG9zdF9kYXRhWydnaXRfcmVmJ10sICBjb21taXQ9cG9zdF9kYXRhWydnaXRfcmVmJ10sIGRpcnBhdGg9cG9zdF9kYXRhWydkaXJfcGF0aCddKQorCisgICAgICAgICAgICBpZiBsYXllcl92ZXJzaW9uOgorICAgICAgICAgICAgICAgIGlmIG5vdCB2ZXJzaW9uX2NyZWF0ZWQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcih7ImVycm9yIjogImhpbnQtbGF5ZXItdmVyc2lvbi1leGlzdHMiLCAiZXhpc3RpbmdfbGF5ZXJfdmVyc2lvbiI6IGxheWVyX3ZlcnNpb24uaWQgfSksIGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIikKKworICAgICAgICAgICAgICAgIGxheWVyX3ZlcnNpb24udXBfZGF0ZSA9IHRpbWV6b25lLm5vdygpCisgICAgICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5zYXZlKCkKKworICAgICAgICAgICAgICAgICMgQWRkIHRoZSBkZXBlbmRlbmNpZXMgc3BlY2lmaWVkIGZvciB0aGlzIG5ldyBsYXllcgorICAgICAgICAgICAgICAgIGlmIChwb3N0X2RhdGEuaGFzX2tleSgibGF5ZXJfZGVwcyIpIGFuZAorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uX2NyZWF0ZWQgYW5kCisgICAgICAgICAgICAgICAgICAgIGxlbihwb3N0X2RhdGFbImxheWVyX2RlcHMiXSkgPiAwKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxheWVyX2RlcF9pZCBpbiBwb3N0X2RhdGFbImxheWVyX2RlcHMiXS5zcGxpdCgiLCIpOgorCisgICAgICAgICAgICAgICAgICAgICAgICBsYXllcl9kZXBfb2JqID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldChwaz1sYXllcl9kZXBfaWQpCisgICAgICAgICAgICAgICAgICAgICAgICBMYXllclZlcnNpb25EZXBlbmRlbmN5Lm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl92ZXJzaW9uPWxheWVyX3ZlcnNpb24sIGRlcGVuZHNfb249bGF5ZXJfZGVwX29iaikKKyAgICAgICAgICAgICAgICAgICAgICAgICMgTm93IGFkZCB0aGVtIHRvIHRoZSBwcm9qZWN0LCB3ZSBjb3VsZCBnZXQgYW4gZXhlY3B0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIHRoZSBwcm9qZWN0IG5vdyBjb250YWlucyB0aGUgZXhhY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZGVwZW5kZW5jeSBhbHJlYWR5IChsaWtlIG1vZGlmaWVkIG9uIGFub3RoZXIgcGFnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmpfbGF5ZXIsIHByal9sYXllcl9jcmVhdGVkID0gUHJvamVjdExheWVyLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcmNvbW1pdD1sYXllcl9kZXBfb2JqLCBwcm9qZWN0PXByaikKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbnRlZ3JpdHlFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJJbnRlZ3JpdHkgZXJyb3Igd2hpbGUgc2F2aW5nIFByb2plY3QgTGF5ZXJzOiAlcyAob3JpZ2luYWwgJXMpIiAlIChlLCBlLl9fY2F1c2VfXykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJqX2xheWVyX2NyZWF0ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJkZXBkZXRhaWx1cmwgPSByZXZlcnNlKCdsYXllcmRldGFpbHMnLCBhcmdzPShwcmouaWQsIGxheWVyX2RlcF9vYmoucGspKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyc19hZGRlZC5hcHBlbmQoeydpZCc6IGxheWVyX2RlcF9vYmouaWQsICduYW1lJzogTGF5ZXIub2JqZWN0cy5nZXQoaWQ9bGF5ZXJfZGVwX29iai5sYXllcl9pZCkubmFtZSwgJ2xheWVyZGV0YWlsdXJsJzogbGF5ZXJkZXBkZXRhaWx1cmwgfSkKKworCisgICAgICAgICAgICAgICAgIyBJZiBhbiBvbGQgbGF5ZXIgdmVyc2lvbiBleGlzdHMgaW4gb3VyIHByb2plY3QgdGhlbiByZW1vdmUgaXQKKyAgICAgICAgICAgICAgICBmb3IgcHJqX2xheWVycyBpbiBQcm9qZWN0TGF5ZXIub2JqZWN0cy5maWx0ZXIocHJvamVjdD1wcmopOgorICAgICAgICAgICAgICAgICAgICBkdXBfbGF5ZXJfdiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5maWx0ZXIoaWQ9cHJqX2xheWVycy5sYXllcmNvbW1pdF9pZCwgbGF5ZXJfaWQ9bGF5ZXIuaWQpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihkdXBfbGF5ZXJfdikgPjAgOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJqX2xheWVycy5kZWxldGUoKQorCisgICAgICAgICAgICAgICAgIyBmaW5hbGx5IGFkZCB0aGUgaW1wb3J0ZWQgbGF5ZXIgKHZlcnNpb24gaWQpIHRvIHRoZSBwcm9qZWN0CisgICAgICAgICAgICAgICAgUHJvamVjdExheWVyLm9iamVjdHMuY3JlYXRlKGxheWVyY29tbWl0PWxheWVyX3ZlcnNpb24sIHByb2plY3Q9cHJqLG9wdGlvbmFsPTEpCisKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBXZSBkaWRuJ3QgY3JlYXRlIGEgbGF5ZXIgdmVyc2lvbiBzbyBiYWNrIG91dCBub3cgYW5kIGNsZWFuIHVwLgorICAgICAgICAgICAgICAgIGlmIGxheWVyX2NyZWF0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGxheWVyLmRlbGV0ZSgpCisKKyAgICAgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoeyJlcnJvciI6ICJVbmNhdWdodCBlcnJvcjogQ291bGQgbm90IGNyZWF0ZSBsYXllciB2ZXJzaW9uIn0pLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCisKKyAgICAgICAgbGF5ZXJkZXRhaWx1cmwgPSByZXZlcnNlKCdsYXllcmRldGFpbHMnLCBhcmdzPShwcmouaWQsIGxheWVyX3ZlcnNpb24ucGspKQorCisgICAgICAgIGpzb25fcmVzcG9uc2UgPSB7ImVycm9yIjogIm9rIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0ZWRfbGF5ZXIiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiIDogbGF5ZXIubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZCI6IGxheWVyX3ZlcnNpb24uaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibGF5ZXJkZXRhaWx1cmwiOiBsYXllcmRldGFpbHVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICJkZXBzX2FkZGVkIjogbGF5ZXJzX2FkZGVkIH0KKworICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoanNvbl9yZXNwb25zZSksIGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIikKKworICAgIGRlZiB4aHJfdXBkYXRlbGF5ZXIocmVxdWVzdCk6CisKKyAgICAgICAgZGVmIGVycm9yX3Jlc3BvbnNlKGVycm9yKToKKyAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcih7ImVycm9yIjogZXJyb3J9KSwgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQorCisgICAgICAgIGlmIG5vdCByZXF1ZXN0LlBPU1QuaGFzX2tleSgibGF5ZXJfdmVyc2lvbl9pZCIpOgorICAgICAgICAgICAgcmV0dXJuIGVycm9yX3Jlc3BvbnNlKCJQbGVhc2Ugc3BlY2lmeSBhIGxheWVyIHZlcnNpb24gaWQiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsYXllcl92ZXJzaW9uX2lkID0gcmVxdWVzdC5QT1NUWyJsYXllcl92ZXJzaW9uX2lkIl0KKyAgICAgICAgICAgIGxheWVyX3ZlcnNpb24gPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0KGlkPWxheWVyX3ZlcnNpb25faWQpCisgICAgICAgIGV4Y2VwdCBMYXllcl9WZXJzaW9uLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9yZXNwb25zZSgiQ2Fubm90IGZpbmQgbGF5ZXIgdG8gdXBkYXRlIikKKworCisgICAgICAgIGlmIHJlcXVlc3QuUE9TVC5oYXNfa2V5KCJ2Y3NfdXJsIik6CisgICAgICAgICAgICBsYXllcl92ZXJzaW9uLmxheWVyLnZjc191cmwgPSByZXF1ZXN0LlBPU1RbInZjc191cmwiXQorICAgICAgICBpZiByZXF1ZXN0LlBPU1QuaGFzX2tleSgiZGlycGF0aCIpOgorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5kaXJwYXRoID0gcmVxdWVzdC5QT1NUWyJkaXJwYXRoIl0KKyAgICAgICAgaWYgcmVxdWVzdC5QT1NULmhhc19rZXkoImNvbW1pdCIpOgorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5jb21taXQgPSByZXF1ZXN0LlBPU1RbImNvbW1pdCJdCisgICAgICAgIGlmIHJlcXVlc3QuUE9TVC5oYXNfa2V5KCJ1cF9icmFuY2giKToKKyAgICAgICAgICAgIGxheWVyX3ZlcnNpb24udXBfYnJhbmNoX2lkID0gaW50KHJlcXVlc3QuUE9TVFsidXBfYnJhbmNoIl0pCisKKyAgICAgICAgaWYgcmVxdWVzdC5QT1NULmhhc19rZXkoImFkZF9kZXAiKToKKyAgICAgICAgICAgIGx2ZCA9IExheWVyVmVyc2lvbkRlcGVuZGVuY3kobGF5ZXJfdmVyc2lvbj1sYXllcl92ZXJzaW9uLCBkZXBlbmRzX29uX2lkPXJlcXVlc3QuUE9TVFsiYWRkX2RlcCJdKQorICAgICAgICAgICAgbHZkLnNhdmUoKQorCisgICAgICAgIGlmIHJlcXVlc3QuUE9TVC5oYXNfa2V5KCJybV9kZXAiKToKKyAgICAgICAgICAgIHJtX2RlcCA9IExheWVyVmVyc2lvbkRlcGVuZGVuY3kub2JqZWN0cy5nZXQobGF5ZXJfdmVyc2lvbj1sYXllcl92ZXJzaW9uLCBkZXBlbmRzX29uX2lkPXJlcXVlc3QuUE9TVFsicm1fZGVwIl0pCisgICAgICAgICAgICBybV9kZXAuZGVsZXRlKCkKKworICAgICAgICBpZiByZXF1ZXN0LlBPU1QuaGFzX2tleSgic3VtbWFyeSIpOgorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5sYXllci5zdW1tYXJ5ID0gcmVxdWVzdC5QT1NUWyJzdW1tYXJ5Il0KKyAgICAgICAgaWYgcmVxdWVzdC5QT1NULmhhc19rZXkoImRlc2NyaXB0aW9uIik6CisgICAgICAgICAgICBsYXllcl92ZXJzaW9uLmxheWVyLmRlc2NyaXB0aW9uID0gcmVxdWVzdC5QT1NUWyJkZXNjcmlwdGlvbiJdCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5sYXllci5zYXZlKCkKKyAgICAgICAgICAgIGxheWVyX3ZlcnNpb24uc2F2ZSgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9yZXNwb25zZSgiQ291bGQgbm90IHVwZGF0ZSBsYXllciB2ZXJzaW9uIGVudHJ5OiAlcyIgJSBlKQorCisgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcih7ImVycm9yIjogIm9rIix9KSwgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQorCisKKworICAgIGRlZiBpbXBvcnRsYXllcihyZXF1ZXN0LCBwaWQpOgorICAgICAgICB0ZW1wbGF0ZSA9ICJpbXBvcnRsYXllci5odG1sIgorICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgJ3Byb2plY3QnOiBQcm9qZWN0Lm9iamVjdHMuZ2V0KGlkPXBpZCksCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKworICAgIEBfdGVtcGxhdGVfcmVuZGVyZXIoJ2xheWVyZGV0YWlscy5odG1sJykKKyAgICBkZWYgbGF5ZXJkZXRhaWxzKHJlcXVlc3QsIHBpZCwgbGF5ZXJpZCk6CisgICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPXBpZCkKKyAgICAgICAgbGF5ZXJfdmVyc2lvbiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQocGs9bGF5ZXJpZCkKKworICAgICAgICBjb250ZXh0ID0geyAncHJvamVjdCcgOiBwcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICdsYXllcnZlcnNpb24nIDogbGF5ZXJfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAnbGF5ZXJkZXBzJyA6IHsgImxpc3QiOiBbCisgICAgICAgICAgICAgICAgICAgICBbeyJpZCI6IHkuaWQsICJuYW1lIjogeS5sYXllci5uYW1lfSBmb3IgeSBpbiB4LmRlcGVuZHNfb24uZ2V0X2VxdWl2YWxlbnRzX3dwcmlvcml0eShwcm9qZWN0KV1bMF0gZm9yIHggaW4gbGF5ZXJfdmVyc2lvbi5kZXBlbmRlbmNpZXMuYWxsKCldfSwKKyAgICAgICAgICAgICAgICAgICAncHJvamVjdGxheWVycyc6IG1hcChsYW1iZGEgcHJqbGF5ZXI6IHByamxheWVyLmxheWVyY29tbWl0LmlkLCBQcm9qZWN0TGF5ZXIub2JqZWN0cy5maWx0ZXIocHJvamVjdD1wcm9qZWN0KSkKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY29udGV4dAorCisKKyAgICBkZWYgZ2V0X3Byb2plY3RfY29uZmlndmFyc19jb250ZXh0KCk6CisgICAgICAgICMgVmFycyBtYW5hZ2VkIG91dHNpZGUgb2YgdGhpcyB2aWV3CisgICAgICAgIHZhcnNfbWFuYWdlZCA9IHsKKyAgICAgICAgICAgICdNQUNISU5FJywgJ0JCTEFZRVJTJworICAgICAgICB9CisKKyAgICAgICAgdmFyc19ibGFja2xpc3QgID0geworICAgICAgICAgICAgJ0RMX0RSJywnUEFSQUxMRUxfTUFLRScsJ0JCX05VTUJFUl9USFJFQURTJywnU1NUQVRFX0RJUicsCisgICAgICAgICAgICAnQkJfRElTS01PTl9ESVJTJywnQkJfTlVNQkVSX1RIUkVBRFMnLCdDVlNfUFJPWFlfSE9TVCcsJ0NWU19QUk9YWV9QT1JUJywKKyAgICAgICAgICAgICdETF9ESVInLCdQQVJBTExFTF9NQUtFJywnU1NUQVRFX0RJUicsJ1NTVEFURV9ESVInLCdTU1RBVEVfTUlSUk9SUycsJ1RNUERJUicsCisgICAgICAgICAgICAnYWxsX3Byb3h5JywnZnRwX3Byb3h5JywnaHR0cF9wcm94eSAnLCdodHRwc19wcm94eScKKyAgICAgICAgICAgIH0KKworICAgICAgICB2YXJzX2ZzdHlwZXMgID0geworICAgICAgICAgICAgJ2J0cmZzJywnY3BpbycsJ2NwaW8uZ3onLCdjcGlvLmx6NCcsJ2NwaW8ubHptYScsJ2NwaW8ueHonLCdjcmFtZnMnLAorICAgICAgICAgICAgJ2VsZicsJ2V4dDInLCdleHQyLmJ6MicsJ2V4dDIuZ3onLCdleHQyLmx6bWEnLCAnZXh0NCcsICdleHQ0Lmd6JywgJ2V4dDMnLCdleHQzLmd6JywnaGRkaW1nJywKKyAgICAgICAgICAgICdpc28nLCdqZmZzMicsJ2pmZnMyLnN1bScsJ3NxdWFzaGZzJywnc3F1YXNoZnMtbHpvJywnc3F1YXNoZnMteHonLCd0YXIuYnoyJywKKyAgICAgICAgICAgICd0YXIubHo0JywndGFyLnh6JywndGFydGFyLmd6JywndWJpJywndWJpZnMnLCd2bWRrJworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuKHZhcnNfbWFuYWdlZCxzb3J0ZWQodmFyc19mc3R5cGVzKSx2YXJzX2JsYWNrbGlzdCkKKworICAgIEBfdGVtcGxhdGVfcmVuZGVyZXIoInByb2plY3Rjb25mLmh0bWwiKQorICAgIGRlZiBwcm9qZWN0Y29uZihyZXF1ZXN0LCBwaWQpOgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaiA9IFByb2plY3Qub2JqZWN0cy5nZXQoaWQgPSBwaWQpCisgICAgICAgIGV4Y2VwdCBQcm9qZWN0LkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2VOb3RGb3VuZCgiPGgxPlByb2plY3QgaWQgIiArIHBpZCArICIgaXMgdW5hdmFpbGFibGU8L2gxPiIpCisKKyAgICAgICAgIyByZW1vdmUgYmxhY2tsaXN0IGFuZCBleHRlcm5hbGx5IG1hbmFnZWQgdmFyYWlibGVzIGZyb20gdGhpcyBsaXN0CisgICAgICAgIHZhcnNfbWFuYWdlZCx2YXJzX2ZzdHlwZXMsdmFyc19ibGFja2xpc3QgPSBnZXRfcHJvamVjdF9jb25maWd2YXJzX2NvbnRleHQoKQorICAgICAgICBjb25maWd2YXJzID0gUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZmlsdGVyKHByb2plY3RfaWQgPSBwaWQpLmFsbCgpCisgICAgICAgIGZvciB2YXIgaW4gdmFyc19tYW5hZ2VkOgorICAgICAgICAgICAgY29uZmlndmFycyA9IGNvbmZpZ3ZhcnMuZXhjbHVkZShuYW1lID0gdmFyKQorICAgICAgICBmb3IgdmFyIGluIHZhcnNfYmxhY2tsaXN0OgorICAgICAgICAgICAgY29uZmlndmFycyA9IGNvbmZpZ3ZhcnMuZXhjbHVkZShuYW1lID0gdmFyKQorCisgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAncHJvamVjdCc6ICAgICAgICAgIHByaiwKKyAgICAgICAgICAgICdjb25maWd2YXJzJzogICAgICAgY29uZmlndmFycywKKyAgICAgICAgICAgICd2YXJzX21hbmFnZWQnOiAgICAgdmFyc19tYW5hZ2VkLAorICAgICAgICAgICAgJ3ZhcnNfZnN0eXBlcyc6ICAgICB2YXJzX2ZzdHlwZXMsCisgICAgICAgICAgICAndmFyc19ibGFja2xpc3QnOiAgIHZhcnNfYmxhY2tsaXN0LAorICAgICAgICB9CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udGV4dFsnZGlzdHJvJ10gPSAgUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0KHByb2plY3QgPSBwcmosIG5hbWUgPSAiRElTVFJPIikudmFsdWUKKyAgICAgICAgICAgIGNvbnRleHRbJ2Rpc3Ryb19kZWZpbmVkJ10gPSAiMSIKKyAgICAgICAgZXhjZXB0IFByb2plY3RWYXJpYWJsZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHRbJ2ZzdHlwZXMnXSA9ICBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5nZXQocHJvamVjdCA9IHByaiwgbmFtZSA9ICJJTUFHRV9GU1RZUEVTIikudmFsdWUKKyAgICAgICAgICAgIGNvbnRleHRbJ2ZzdHlwZXNfZGVmaW5lZCddID0gIjEiCisgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZXh0WydpbWFnZV9pbnN0YWxsX2FwcGVuZCddID0gIFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldChwcm9qZWN0ID0gcHJqLCBuYW1lID0gIklNQUdFX0lOU1RBTExfYXBwZW5kIikudmFsdWUKKyAgICAgICAgICAgIGNvbnRleHRbJ2ltYWdlX2luc3RhbGxfYXBwZW5kX2RlZmluZWQnXSA9ICIxIgorICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udGV4dFsncGFja2FnZV9jbGFzc2VzJ10gPSAgUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0KHByb2plY3QgPSBwcmosIG5hbWUgPSAiUEFDS0FHRV9DTEFTU0VTIikudmFsdWUKKyAgICAgICAgICAgIGNvbnRleHRbJ3BhY2thZ2VfY2xhc3Nlc19kZWZpbmVkJ10gPSAiMSIKKyAgICAgICAgZXhjZXB0IFByb2plY3RWYXJpYWJsZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHRbJ3Nka19tYWNoaW5lJ10gPSAgUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0KHByb2plY3QgPSBwcmosIG5hbWUgPSAiU0RLTUFDSElORSIpLnZhbHVlCisgICAgICAgICAgICBjb250ZXh0WydzZGtfbWFjaGluZV9kZWZpbmVkJ10gPSAiMSIKKyAgICAgICAgZXhjZXB0IFByb2plY3RWYXJpYWJsZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmV0dXJuIGNvbnRleHQKKworICAgIEBfdGVtcGxhdGVfcmVuZGVyZXIoJ3Byb2plY3RidWlsZHMuaHRtbCcpCisgICAgZGVmIHByb2plY3RidWlsZHMocmVxdWVzdCwgcGlkKToKKyAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChpZCA9IHBpZCkKKworICAgICAgICBpZiByZXF1ZXN0Lm1ldGhvZCA9PSAiUE9TVCI6CisgICAgICAgICAgICAjIHByb2Nlc3MgYW55IGJ1aWxkIHJlcXVlc3QKKworICAgICAgICAgICAgaWYgJ2J1aWxkQ2FuY2VsJyBpbiByZXF1ZXN0LlBPU1Q6CisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmVxdWVzdC5QT1NUWydidWlsZENhbmNlbCddLnN0cmlwKCkuc3BsaXQoIiAiKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgYnIgPSBCdWlsZFJlcXVlc3Qub2JqZWN0cy5zZWxlY3RfZm9yX3VwZGF0ZSgpLmdldChwcm9qZWN0ID0gcHJqLCBwayA9IGksIHN0YXRlX19sdGUgPSBCdWlsZFJlcXVlc3QuUkVRX1FVRVVFRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyLnN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9ERUxFVEVECisgICAgICAgICAgICAgICAgICAgICAgICBici5zYXZlKCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEJ1aWxkUmVxdWVzdC5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIGlmICdidWlsZERlbGV0ZScgaW4gcmVxdWVzdC5QT1NUOgorICAgICAgICAgICAgICAgIGZvciBpIGluIHJlcXVlc3QuUE9TVFsnYnVpbGREZWxldGUnXS5zdHJpcCgpLnNwbGl0KCIgIik6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyID0gQnVpbGRSZXF1ZXN0Lm9iamVjdHMuc2VsZWN0X2Zvcl91cGRhdGUoKS5nZXQocHJvamVjdCA9IHByaiwgcGsgPSBpLCBzdGF0ZV9fbHRlID0gQnVpbGRSZXF1ZXN0LlJFUV9ERUxFVEVEKS5kZWxldGUoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgQnVpbGRSZXF1ZXN0LkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgaWYgJ3RhcmdldHMnIGluIHJlcXVlc3QuUE9TVDoKKyAgICAgICAgICAgICAgICBQcm9qZWN0VGFyZ2V0Lm9iamVjdHMuZmlsdGVyKHByb2plY3QgPSBwcmopLmRlbGV0ZSgpCisgICAgICAgICAgICAgICAgcyA9IHN0cihyZXF1ZXN0LlBPU1RbJ3RhcmdldHMnXSkKKyAgICAgICAgICAgICAgICBmb3IgdCBpbiBzLnRyYW5zbGF0ZShOb25lLCAiOyV8XCIiKS5zcGxpdCgiICIpOgorICAgICAgICAgICAgICAgICAgICBpZiAiOiIgaW4gdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCwgdGFzayA9IHQuc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdAorICAgICAgICAgICAgICAgICAgICAgICAgdGFzayA9ICIiCisgICAgICAgICAgICAgICAgICAgIFByb2plY3RUYXJnZXQub2JqZWN0cy5jcmVhdGUocHJvamVjdCA9IHByaiwgdGFyZ2V0ID0gdGFyZ2V0LCB0YXNrID0gdGFzaykKKworICAgICAgICAgICAgICAgIGJyID0gcHJqLnNjaGVkdWxlX2J1aWxkKCkKKworCisgICAgICAgIHF1ZXJ5c2V0ID0gQnVpbGQub2JqZWN0cy5maWx0ZXIob3V0Y29tZV9fbHRlID0gQnVpbGQuSU5fUFJPR1JFU1MpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udGV4dCwgcGFnZXNpemUsIG9yZGVyYnkgPSBfYnVpbGRfbGlzdF9oZWxwZXIocmVxdWVzdCwgcXVlcnlzZXQpCisgICAgICAgIGV4Y2VwdCBSZWRpcmVjdEV4Y2VwdGlvbiBhcyByZToKKyAgICAgICAgICAgICMgcmV3cml0ZSB0aGUgUmVkaXJlY3RFeGNlcHRpb24gd2l0aCBvdXIgY3VycmVudCB1cmwgaW5mb3JtYXRpb24KKyAgICAgICAgICAgIHJlLnZpZXcgPSByZXNvbHZlKHJlcXVlc3QucGF0aF9pbmZvKS51cmxfbmFtZQorICAgICAgICAgICAgcmUub2t3YXJncyA9IHsicGlkIiA6IHBpZH0KKyAgICAgICAgICAgIHJhaXNlIHJlCisKKyAgICAgICAgY29udGV4dFsncHJvamVjdCddID0gcHJqCisgICAgICAgIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpCisKKyAgICAgICAgcmV0dXJuIGNvbnRleHQKKworCisgICAgZGVmIF9maWxlX25hbWVfZm9yX2FydGlmYWN0KGIsIGFydGlmYWN0X3R5cGUsIGFydGlmYWN0X2lkKToKKyAgICAgICAgZmlsZV9uYW1lID0gTm9uZQorICAgICAgICAjIFRhcmdldF9JbWFnZV9GaWxlIGZpbGVfbmFtZQorICAgICAgICBpZiBhcnRpZmFjdF90eXBlID09ICJpbWFnZWZpbGUiOgorICAgICAgICAgICAgZmlsZV9uYW1lID0gVGFyZ2V0X0ltYWdlX0ZpbGUub2JqZWN0cy5nZXQodGFyZ2V0X19idWlsZCA9IGIsIHBrID0gYXJ0aWZhY3RfaWQpLmZpbGVfbmFtZQorCisgICAgICAgIGVsaWYgYXJ0aWZhY3RfdHlwZSA9PSAiYnVpbGRhcnRpZmFjdCI6CisgICAgICAgICAgICBmaWxlX25hbWUgPSBCdWlsZEFydGlmYWN0Lm9iamVjdHMuZ2V0KGJ1aWxkID0gYiwgcGsgPSBhcnRpZmFjdF9pZCkuZmlsZV9uYW1lCisKKyAgICAgICAgZWxpZiBhcnRpZmFjdF90eXBlID09ICAibGljZW5zZW1hbmlmZXN0IjoKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IFRhcmdldC5vYmplY3RzLmdldChidWlsZCA9IGIsIHBrID0gYXJ0aWZhY3RfaWQpLmxpY2Vuc2VfbWFuaWZlc3RfcGF0aAorCisgICAgICAgIGVsaWYgYXJ0aWZhY3RfdHlwZSA9PSAidGFza2xvZ2ZpbGUiOgorICAgICAgICAgICAgZmlsZV9uYW1lID0gVGFzay5vYmplY3RzLmdldChidWlsZCA9IGIsIHBrID0gYXJ0aWZhY3RfaWQpLmxvZ2ZpbGUKKworICAgICAgICBlbGlmIGFydGlmYWN0X3R5cGUgPT0gImxvZ21lc3NhZ2VmaWxlIjoKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IExvZ01lc3NhZ2Uub2JqZWN0cy5nZXQoYnVpbGQgPSBiLCBwayA9IGFydGlmYWN0X2lkKS5wYXRobmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGSVhNRTogYXJ0aWZhY3QgdHlwZSAlcyBub3QgaW1wbGVtZW50ZWQiICUgKGFydGlmYWN0X3R5cGUpKQorCisgICAgICAgIHJldHVybiBmaWxlX25hbWUKKworCisgICAgZGVmIGJ1aWxkX2FydGlmYWN0KHJlcXVlc3QsIGJ1aWxkX2lkLCBhcnRpZmFjdF90eXBlLCBhcnRpZmFjdF9pZCk6CisgICAgICAgIGlmIGFydGlmYWN0X3R5cGUgaW4gWyJjb29rZXJsb2ciXToKKyAgICAgICAgICAgICMgdGhlc2UgYXJ0aWZhY3RzIGFyZSBzYXZlZCBhZnRlciBidWlsZGluZywgc28gdGhleSBhcmUgb24gdGhlIHNlcnZlciBpdHNlbGYKKyAgICAgICAgICAgIGRlZiBfbWltZXR5cGVfZm9yX2FydGlmYWN0KHBhdGgpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0IG1hZ2ljCisKKyAgICAgICAgICAgICAgICAgICAgIyBmYWlyIHdhcm5pbmc6IHRoaXMgaXMgYSBtZXNzOyB0aGVyZSBhcmUgbXVsdGlwbGUgY29tcGV0aW5nIGFuZCBpbmNvbXBhdGlibGUKKyAgICAgICAgICAgICAgICAgICAgIyBtYWdpYyBtb2R1bGVzIGZsb2F0aW5nIGFyb3VuZCwgc28gd2UgdHJ5IHNvbWUgb2YgdGhlIG1vc3QgY29tbW9uIGNvbWJpbmF0aW9ucworCisgICAgICAgICAgICAgICAgICAgIHRyeTogICAgIyB3ZSB0cnkgdWJ1bnR1J3MgcHl0aG9uLW1hZ2ljIDUuNAorICAgICAgICAgICAgICAgICAgICAgICAgbSA9IG1hZ2ljLm9wZW4obWFnaWMuTUFHSUNfTUlNRV9UWVBFKQorICAgICAgICAgICAgICAgICAgICAgICAgbS5sb2FkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtLmZpbGUocGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgICAgIHRyeTogICAgIyB3ZSB0cnkgcHl0aG9uLW1hZ2ljIDAuNC42CisgICAgICAgICAgICAgICAgICAgICAgICBtID0gbWFnaWMuTWFnaWMobWFnaWMuTUFHSUNfTUlNRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtLmZyb21fZmlsZShwYXRoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgdHJ5OiAgICAjIHdlIHRyeSBwaXAgZmlsZW1hZ2ljIDEuNgorICAgICAgICAgICAgICAgICAgICAgICAgbSA9IG1hZ2ljLk1hZ2ljKGZsYWdzPW1hZ2ljLk1BR0lDX01JTUVfVFlQRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtLmlkX2ZpbGVuYW1lKHBhdGgpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gImJpbmFyeS9vY3RldC1zdHJlYW0iCisgICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gImJpbmFyeS9vY3RldC1zdHJlYW0iCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBtYXRjaCBjb2RlIHdpdGggcnVuYnVpbGRzLkNvbW1hbmQuYXJjaGl2ZSgpCisgICAgICAgICAgICAgICAgYnVpbGRfYXJ0aWZhY3Rfc3RvcmFnZV9kaXIgPSBvcy5wYXRoLmpvaW4oVG9hc3RlclNldHRpbmcub2JqZWN0cy5nZXQobmFtZT0iQVJUSUZBQ1RTX1NUT1JBR0VfRElSIikudmFsdWUsICIlZCIgJSBpbnQoYnVpbGRfaWQpKQorICAgICAgICAgICAgICAgIGZpbGVfbmFtZSA9IG9zLnBhdGguam9pbihidWlsZF9hcnRpZmFjdF9zdG9yYWdlX2RpciwgImNvb2tlcl9sb2cudHh0IikKKworICAgICAgICAgICAgICAgIGZzb2NrID0gb3BlbihmaWxlX25hbWUsICJyIikKKyAgICAgICAgICAgICAgICBjb250ZW50X3R5cGU9X21pbWV0eXBlX2Zvcl9hcnRpZmFjdChmaWxlX25hbWUpCisKKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IEh0dHBSZXNwb25zZShmc29jaywgY29udGVudF90eXBlID0gY29udGVudF90eXBlKQorCisgICAgICAgICAgICAgICAgcmVzcG9uc2VbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSA9ICdhdHRhY2htZW50OyBmaWxlbmFtZT0nICsgb3MucGF0aC5iYXNlbmFtZShmaWxlX25hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgICAgICAgICAnYnVpbGQnIDogQnVpbGQub2JqZWN0cy5nZXQocGsgPSBidWlsZF9pZCksCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgInVuYXZhaWxhYmxlX2FydGlmYWN0Lmh0bWwiLCBjb250ZXh0KQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHJldHJpZXZlIHRoZSBhcnRpZmFjdCBkaXJlY3RseSBmcm9tIHRoZSBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgcmV0dXJuIF9nZXRfYmVfYXJ0aWZhY3QocmVxdWVzdCwgYnVpbGRfaWQsIGFydGlmYWN0X3R5cGUsIGFydGlmYWN0X2lkKQorCisKKyAgICBkZWYgX2dldF9iZV9hcnRpZmFjdChyZXF1ZXN0LCBidWlsZF9pZCwgYXJ0aWZhY3RfdHlwZSwgYXJ0aWZhY3RfaWQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBiID0gQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpCisgICAgICAgICAgICBpZiBiLmJ1aWxkcmVxdWVzdCBpcyBOb25lIG9yIGIuYnVpbGRyZXF1ZXN0LmVudmlyb25tZW50IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJBcnRpZmFjdCBub3QgYXZhaWxhYmxlIGZvciBkb3dubG9hZCAobWlzc2luZyBidWlsZCByZXF1ZXN0IG9yIGJ1aWxkIGVudmlyb25tZW50KSIpCisKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IF9maWxlX25hbWVfZm9yX2FydGlmYWN0KGIsIGFydGlmYWN0X3R5cGUsIGFydGlmYWN0X2lkKQorICAgICAgICAgICAgZnNvY2sgPSBOb25lCisgICAgICAgICAgICBjb250ZW50X3R5cGU9J2FwcGxpY2F0aW9uL2ZvcmNlLWRvd25sb2FkJworCisgICAgICAgICAgICBpZiBmaWxlX25hbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNvdWxkIG5vdCBoYW5kbGUgYXJ0aWZhY3QgJXMgaWQgJXMiICUgKGFydGlmYWN0X3R5cGUsIGFydGlmYWN0X2lkKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29udGVudF90eXBlID0gYi5idWlsZHJlcXVlc3QuZW52aXJvbm1lbnQuZ2V0X2FydGlmYWN0X3R5cGUoZmlsZV9uYW1lKQorICAgICAgICAgICAgICAgIGZzb2NrID0gYi5idWlsZHJlcXVlc3QuZW52aXJvbm1lbnQuZ2V0X2FydGlmYWN0KGZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICBmaWxlX25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGVfbmFtZSkgIyB3ZSBhc3N1bWUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc3lzdGVtIGhhcyB0aGUgc2FtZSBwYXRoIGNvbnZlbnRpb25zIGFzIGhvc3QKKworICAgICAgICAgICAgcmVzcG9uc2UgPSBIdHRwUmVzcG9uc2UoZnNvY2ssIGNvbnRlbnRfdHlwZSA9IGNvbnRlbnRfdHlwZSkKKworICAgICAgICAgICAgIyByZXR1cm5zIGEgZmlsZSBmcm9tIHRoZSBlbnZpcm9ubWVudAorICAgICAgICAgICAgcmVzcG9uc2VbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSA9ICdhdHRhY2htZW50OyBmaWxlbmFtZT0nICsgZmlsZV9uYW1lCisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgICAgICdidWlsZCcgOiBCdWlsZC5vYmplY3RzLmdldChwayA9IGJ1aWxkX2lkKSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgInVuYXZhaWxhYmxlX2FydGlmYWN0Lmh0bWwiLCBjb250ZXh0KQorCisKKworCisgICAgQF90ZW1wbGF0ZV9yZW5kZXJlcigicHJvamVjdHMuaHRtbCIpCisgICAgZGVmIHByb2plY3RzKHJlcXVlc3QpOgorICAgICAgICAocGFnZXNpemUsIG9yZGVyYnkpID0gX2dldF9wYXJhbWV0ZXJzX3ZhbHVlcyhyZXF1ZXN0LCAxMCwgJ3VwZGF0ZWQ6LScpCisgICAgICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzID0geyAnY291bnQnOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5JyA6IG9yZGVyYnkgfQorICAgICAgICByZXR2YWwgPSBfdmVyaWZ5X3BhcmFtZXRlcnMoIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycyApCisgICAgICAgIGlmIHJldHZhbDoKKyAgICAgICAgICAgIHJhaXNlIFJlZGlyZWN0RXhjZXB0aW9uKCAnYWxsLXByb2plY3RzJywgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzICkKKworICAgICAgICBxdWVyeXNldF9hbGwgPSBQcm9qZWN0Lm9iamVjdHMuYWxsKCkKKworICAgICAgICAjIGFubm90YXRlIGVhY2ggcHJvamVjdCB3aXRoIGl0cyBudW1iZXIgb2YgYnVpbGRzCisgICAgICAgIHF1ZXJ5c2V0X2FsbCA9IHF1ZXJ5c2V0X2FsbC5hbm5vdGF0ZShudW1fYnVpbGRzPUNvdW50KCdidWlsZCcpKQorCisgICAgICAgICMgZXhjbHVkZSB0aGUgY29tbWFuZCBsaW5lIGJ1aWxkcyBwcm9qZWN0IGlmIGl0IGhhcyBubyBidWlsZHMKKyAgICAgICAgcV9kZWZhdWx0X3dpdGhfYnVpbGRzID0gUShpc19kZWZhdWx0PVRydWUpICYgUShudW1fYnVpbGRzX19ndD0wKQorICAgICAgICBxdWVyeXNldF9hbGwgPSBxdWVyeXNldF9hbGwuZmlsdGVyKFEoaXNfZGVmYXVsdD1GYWxzZSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfZGVmYXVsdF93aXRoX2J1aWxkcykKKworICAgICAgICAjIGJvaWxlcnBsYXRlIGNvZGUgdGhhdCB0YWtlcyBhIHJlcXVlc3QgZm9yIGFuIG9iamVjdCB0eXBlIGFuZCByZXR1cm5zIGEgcXVlcnlzZXQKKyAgICAgICAgIyBmb3IgdGhhdCBvYmplY3QgdHlwZS4gY29weXBhc3RhIGZvciBhbGwgbmVlZGVkIHRhYmxlIHNlYXJjaGVzCisgICAgICAgIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKSA9IF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgUHJvamVjdCkKKyAgICAgICAgcXVlcnlzZXRfd2l0aF9zZWFyY2ggPSBfZ2V0X3F1ZXJ5c2V0KFByb2plY3QsIHF1ZXJ5c2V0X2FsbCwgTm9uZSwgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJy11cGRhdGVkJykKKyAgICAgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KFByb2plY3QsIHF1ZXJ5c2V0X2FsbCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJy11cGRhdGVkJykKKworICAgICAgICAjIHJldHJpZXZlIHRoZSBvYmplY3RzIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlOyBwcm9qZWN0cyBhIHBhZ2luYXRvciBhbmQgZ2V0cyBhIHBhZ2UgcmFuZ2UgdG8gZGlzcGxheQorICAgICAgICBwcm9qZWN0X2luZm8gPSBfYnVpbGRfcGFnZV9yYW5nZShQYWdpbmF0b3IocXVlcnlzZXQsIHBhZ2VzaXplKSwgcmVxdWVzdC5HRVQuZ2V0KCdwYWdlJywgMSkpCisKKyAgICAgICAgIyBhZGQgZmllbGRzIG5lZWRlZCBpbiBKU09OIGR1bXBzIGZvciBBUEkgY2FsbCBzdXBwb3J0CisgICAgICAgIGZvciBwIGluIHByb2plY3RfaW5mby5vYmplY3RfbGlzdDoKKyAgICAgICAgICAgIHAuaWQgPSBwLnBrCisgICAgICAgICAgICBwLnByb2plY3RQYWdlVXJsID0gcmV2ZXJzZSgncHJvamVjdCcsIGFyZ3M9KHAuaWQsKSkKKyAgICAgICAgICAgIHAubGF5ZXJzVHlwZUFoZWFkVXJsID0gcmV2ZXJzZSgneGhyX2xheWVyc3R5cGVhaGVhZCcsIGFyZ3M9KHAuaWQsKSkKKyAgICAgICAgICAgIHAucmVjaXBlc1R5cGVBaGVhZFVybCA9IHJldmVyc2UoJ3hocl9yZWNpcGVzdHlwZWFoZWFkJywgYXJncz0ocC5pZCwpKQorICAgICAgICAgICAgcC5wcm9qZWN0QnVpbGRzVXJsID0gcmV2ZXJzZSgncHJvamVjdGJ1aWxkcycsIGFyZ3M9KHAuaWQsKSkKKworICAgICAgICAjIGJ1aWxkIHZpZXctc3BlY2lmaWMgaW5mb3JtYXRpb247IHRoaXMgaXMgcmVuZGVyZWQgc3BlY2lmaWNhbGx5IGluIHRoZSBidWlsZHMgcGFnZSwgYXQgdGhlIHRvcCBvZiB0aGUgcGFnZSAoaS5lLiBSZWNlbnQgYnVpbGRzKQorICAgICAgICBidWlsZF9tcnUgPSBfZ2V0X2xhdGVzdF9idWlsZHMoKQorCisgICAgICAgICMgdHJhbnNsYXRlIHRoZSBwcm9qZWN0J3MgYnVpbGQgdGFyZ2V0IHN0cmluZ3MKKyAgICAgICAgZnN0eXBlc19tYXAgPSB7fTsKKyAgICAgICAgZm9yIHByb2plY3QgaW4gcHJvamVjdF9pbmZvOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRhcmdldHMgPSBUYXJnZXQub2JqZWN0cy5maWx0ZXIoIGJ1aWxkX2lkID0gcHJvamVjdC5nZXRfbGFzdF9idWlsZF9pZCgpICkKKyAgICAgICAgICAgICAgICBjb21tYSA9ICIiOworICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMgPSAiIjsKKyAgICAgICAgICAgICAgICBmb3IgdCBpbiB0YXJnZXRzOgorICAgICAgICAgICAgICAgICAgICBpZiAoIG5vdCB0LmlzX2ltYWdlICk6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICB0aWYgPSBUYXJnZXRfSW1hZ2VfRmlsZS5vYmplY3RzLmZpbHRlciggdGFyZ2V0X2lkID0gdC5pZCApCisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHRpZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHM9cmUuc3ViKCcuKnRhci5iejInLCAndGFyLmJ6MicsIGkuZmlsZV9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcyA9PSBpLmZpbGVfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzPXJlLnN1YignLipcLicsICcnLCBpLmZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIE5vbmUgPT0gcmUuc2VhcmNoKHMsZXh0ZW5zaW9ucyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucyArPSBjb21tYSArIHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYSA9ICIsICIKKyAgICAgICAgICAgICAgICBmc3R5cGVzX21hcFtwcm9qZWN0LmlkXT1leHRlbnNpb25zCisgICAgICAgICAgICBleGNlcHQgKFRhcmdldC5Eb2VzTm90RXhpc3QsSW5kZXhFcnJvcik6CisgICAgICAgICAgICAgICAgZnN0eXBlc19tYXBbcHJvamVjdC5pZF09cHJvamVjdC5nZXRfbGFzdF9pbWdmaWxlcworCisgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAgICAgJ21ydScgOiBidWlsZF9tcnUsCisKKyAgICAgICAgICAgICAgICAnb2JqZWN0cycgOiBwcm9qZWN0X2luZm8sCisgICAgICAgICAgICAgICAgJ29iamVjdG5hbWUnIDogInByb2plY3RzIiwKKyAgICAgICAgICAgICAgICAnZGVmYXVsdF9vcmRlcmJ5JyA6ICdpZDotJywKKyAgICAgICAgICAgICAgICAnc2VhcmNoX3Rlcm0nIDogc2VhcmNoX3Rlcm0sCisgICAgICAgICAgICAgICAgJ3RvdGFsX2NvdW50JyA6IHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmNvdW50KCksCisgICAgICAgICAgICAgICAgJ2ZzdHlwZXMnIDogZnN0eXBlc19tYXAsCisgICAgICAgICAgICAgICAgJ2J1aWxkX0ZBSUxFRCcgOiBCdWlsZC5GQUlMRUQsCisgICAgICAgICAgICAgICAgJ2J1aWxkX1NVQ0NFRURFRCcgOiBCdWlsZC5TVUNDRUVERUQsCisgICAgICAgICAgICAgICAgJ3RhYmxlY29scyc6IFsKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ1Byb2plY3QnLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJuYW1lIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgIm5hbWUiKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICduYW1lJywKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ0xhc3QgYWN0aXZpdHkgb24nLAorICAgICAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICd1cGRhdGVkJywKKyAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIlNob3dzIHRoZSBzdGFydGluZyBkYXRlIGFuZCB0aW1lIG9mIHRoZSBsYXN0IHByb2plY3QgYnVpbGQuIElmIHRoZSBwcm9qZWN0IGhhcyBubyBidWlsZHMsIGl0IHNob3dzIHRoZSBkYXRlIHRoZSBwcm9qZWN0IHdhcyBjcmVhdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAidXBkYXRlZCIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJ1cGRhdGVkIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAndXBkYXRlZCcsCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdSZWxlYXNlJywKKyAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJyA6ICJUaGUgdmVyc2lvbiBvZiB0aGUgYnVpbGQgc3lzdGVtIHVzZWQgYnkgdGhlIHByb2plY3QiLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJyZWxlYXNlX19uYW1lIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInJlbGVhc2VfX25hbWUiKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdyZWxlYXNlX19uYW1lJywKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ01hY2hpbmUnLAorICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiVGhlIGhhcmR3YXJlIGN1cnJlbnRseSBzZWxlY3RlZCBmb3IgdGhlIHByb2plY3QiLAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnTnVtYmVyIG9mIGJ1aWxkcycsCisgICAgICAgICAgICAgICAgICAgICdxaGVscCc6ICJIb3cgbWFueSBidWlsZHMgaGF2ZSBiZWVuIHJ1biBmb3IgdGhlIHByb2plY3QiLAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnTGFzdCBidWlsZCBvdXRjb21lJywgJ2NsY2xhc3MnOiAnbG91dGNvbWUnLAorICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiVGVsbHMgeW91IGlmIHRoZSBsYXN0IHByb2plY3QgYnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBvciBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnUmVjaXBlJywgJ2NsY2xhc3MnOiAnbHRhcmdldCcsCisgICAgICAgICAgICAgICAgICAgICdxaGVscCc6ICJUaGUgbGFzdCByZWNpcGUgdGhhdCB3YXMgYnVpbHQgaW4gdGhpcyBwcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ0Vycm9ycycsICdjbGNsYXNzJzogJ2xlcnJvcnMnLAorICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiSG93IG1hbnkgZXJyb3JzIHdlcmUgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBsYXN0IHByb2plY3QgYnVpbGQgKGlmIGFueSkiLAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnV2FybmluZ3MnLCAnY2xjbGFzcyc6ICdsd2FybmluZ3MnLAorICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiSG93IG1hbnkgd2FybmlnbnMgd2VyZSBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIGxhc3QgcHJvamVjdCBidWlsZCAoaWYgYW55KSIsCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdJbWFnZSBmaWxlcycsICdjbGNsYXNzJzogJ2xpbWFnZWZpbGVzJywgJ2hpZGRlbic6IDEsCisgICAgICAgICAgICAgICAgICAgICdxaGVscCc6ICJUaGUgcm9vdCBmaWxlIHN5c3RlbSB0eXBlcyBwcm9kdWNlZCBieSB0aGUgbGFzdCBwcm9qZWN0IGJ1aWxkIiwKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfQorCisgICAgICAgIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpCisgICAgICAgIHJldHVybiBjb250ZXh0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS93aWRnZXRzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvd2lkZ2V0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjI5MTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvd2lkZ2V0cy5weQpAQCAtMCwwICsxLDQxMSBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNSAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gZGphbmdvLnZpZXdzLmdlbmVyaWMgaW1wb3J0IFZpZXcsIFRlbXBsYXRlVmlldworZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCBIdHRwUmVzcG9uc2UKK2Zyb20gZGphbmdvLmh0dHAgaW1wb3J0IEh0dHBSZXNwb25zZUJhZFJlcXVlc3QKK2Zyb20gZGphbmdvLmNvcmUgaW1wb3J0IHNlcmlhbGl6ZXJzCitmcm9tIGRqYW5nby5jb3JlLmNhY2hlIGltcG9ydCBjYWNoZQorZnJvbSBkamFuZ28uY29yZS5wYWdpbmF0b3IgaW1wb3J0IFBhZ2luYXRvciwgRW1wdHlQYWdlCitmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IFEKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdCwgUHJvamVjdExheWVyLCBMYXllcl9WZXJzaW9uCitmcm9tIGRqYW5nby50ZW1wbGF0ZSBpbXBvcnQgQ29udGV4dCwgVGVtcGxhdGUKK2Zyb20gZGphbmdvLmNvcmUuc2VyaWFsaXplcnMuanNvbiBpbXBvcnQgRGphbmdvSlNPTkVuY29kZXIKK2Zyb20gZGphbmdvLmNvcmUuZXhjZXB0aW9ucyBpbXBvcnQgRmllbGRFcnJvcgorZnJvbSBkamFuZ28uY29uZi51cmxzIGltcG9ydCB1cmwsIHBhdHRlcm5zCisKK2ltcG9ydCB0eXBlcworaW1wb3J0IGpzb24KK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IG9wZXJhdG9yCitpbXBvcnQgcmUKKworZnJvbSB0b2FzdGVyZ3VpLnZpZXdzIGltcG9ydCBvYmp0b2pzb24KKworY2xhc3MgVG9hc3RlclRhYmxlKFRlbXBsYXRlVmlldyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKFRvYXN0ZXJUYWJsZSwgc2VsZikuX19pbml0X18oKQorICAgICAgICBpZiAndGVtcGxhdGVfbmFtZScgaW4ga3dhcmdzOgorICAgICAgICAgICAgc2VsZi50ZW1wbGF0ZV9uYW1lID0ga3dhcmdzWyd0ZW1wbGF0ZV9uYW1lJ10KKyAgICAgICAgc2VsZi50aXRsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IE5vbmUKKyAgICAgICAgc2VsZi5jb2x1bW5zID0gW10KKyAgICAgICAgc2VsZi5maWx0ZXJzID0ge30KKyAgICAgICAgc2VsZi50b3RhbF9jb3VudCA9IDAKKyAgICAgICAgc2VsZi5zdGF0aWNfY29udGV4dF9leHRyYSA9IHt9CisgICAgICAgIHNlbGYuZmlsdGVyX2FjdGlvbnMgPSB7fQorICAgICAgICBzZWxmLmVtcHR5X3N0YXRlID0gIlNvcnJ5IC0gbm8gZGF0YSBmb3VuZCIKKyAgICAgICAgc2VsZi5kZWZhdWx0X29yZGVyYnkgPSAiIgorCisgICAgICAgICMgYWRkIHRoZSAiaWQiIGNvbHVtbiwgdW5kaXNwbGF5YWJsZSwgYnkgZGVmYXVsdAorICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IklkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlhYmxlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJpZCIpCisKKworICAgIGRlZiBnZXQoc2VsZiwgcmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgcmVxdWVzdC5HRVQuZ2V0KCdmb3JtYXQnLCBOb25lKSA9PSAnanNvbic6CisKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfcXVlcnlzZXQoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgIyBQdXQgdGhlIHByb2plY3QgaWQgaW50byB0aGUgY29udGV4dCBmb3IgdGhlIHN0YXRpY19kYXRhX3RlbXBsYXRlCisgICAgICAgICAgICBpZiAncGlkJyBpbiBrd2FyZ3M6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0aWNfY29udGV4dF9leHRyYVsncGlkJ10gPSBrd2FyZ3NbJ3BpZCddCisKKyAgICAgICAgICAgIGNtZCA9IHJlcXVlc3QuR0VULmdldCgnY21kJywgTm9uZSkKKyAgICAgICAgICAgIGlmIGNtZCBhbmQgJ2ZpbHRlcmluZm8nIGluIGNtZDoKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5nZXRfZmlsdGVyX2luZm8ocmVxdWVzdCwgKiprd2FyZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgSWYgbm8gY21kIGlzIHNwZWNpZmllZCB3ZSBnaXZlIHlvdSB0aGUgdGFibGUgZGF0YQorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLmdldF9kYXRhKHJlcXVlc3QsICoqa3dhcmdzKQorCisgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGRhdGEsIGNvbnRlbnRfdHlwZT0iYXBwbGljYXRpb24vanNvbiIpCisKKyAgICAgICAgcmV0dXJuIHN1cGVyKFRvYXN0ZXJUYWJsZSwgc2VsZikuZ2V0KHJlcXVlc3QsICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBnZXRfZmlsdGVyX2luZm8oc2VsZiwgcmVxdWVzdCwgKiprd2FyZ3MpOgorICAgICAgICBkYXRhID0gTm9uZQorCisgICAgICAgIHNlbGYuc2V0dXBfZmlsdGVycygqKmt3YXJncykKKworICAgICAgICBzZWFyY2ggPSByZXF1ZXN0LkdFVC5nZXQoInNlYXJjaCIsIE5vbmUpCisgICAgICAgIGlmIHNlYXJjaDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfc2VhcmNoKHNlYXJjaCkKKworICAgICAgICBuYW1lID0gcmVxdWVzdC5HRVQuZ2V0KCJuYW1lIiwgTm9uZSkKKyAgICAgICAgaWYgbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgZGF0YSA9IGpzb24uZHVtcHMoc2VsZi5maWx0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50PTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM9RGphbmdvSlNPTkVuY29kZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgYWN0aW9ucyBpbiBzZWxmLmZpbHRlcnNbbmFtZV1bJ2ZpbHRlcl9hY3Rpb25zJ106CisgICAgICAgICAgICAgICAgYWN0aW9uc1snY291bnQnXSA9IHNlbGYuZmlsdGVyX2FjdGlvbnNbYWN0aW9uc1snbmFtZSddXShjb3VudF9vbmx5PVRydWUpCisKKyAgICAgICAgICAgICMgQWRkIHRoZSAiQWxsIiBpdGVtcyBmaWx0ZXIgYWN0aW9uCisgICAgICAgICAgICBzZWxmLmZpbHRlcnNbbmFtZV1bJ2ZpbHRlcl9hY3Rpb25zJ10uaW5zZXJ0KDAsIHsKKyAgICAgICAgICAgICAgICAnbmFtZScgOiAnYWxsJywKKyAgICAgICAgICAgICAgICAndGl0bGUnIDogJ0FsbCcsCisgICAgICAgICAgICAgICAgJ2NvdW50JyA6IHNlbGYucXVlcnlzZXQuY291bnQoKSwKKyAgICAgICAgICAgIH0pCisKKyAgICAgICAgICAgIGRhdGEgPSBqc29uLmR1bXBzKHNlbGYuZmlsdGVyc1tuYW1lXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudD0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzPURqYW5nb0pTT05FbmNvZGVyKQorCisgICAgICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIHNldHVwX2NvbHVtbnMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBpbiB0aGUgc3ViY2xhc3Mgd2hpY2ggc2V0cyB1cCB0aGUgY29sdW1ucyAiIiIKKyAgICAgICAgcGFzcworICAgIGRlZiBzZXR1cF9maWx0ZXJzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIiBmdW5jdGlvbiB0byBpbXBsZW1lbnQgaW4gdGhlIHN1YmNsYXNzIHdoaWNoIHNldHMgdXAgdGhlIGZpbHRlcnMgIiIiCisgICAgICAgIHBhc3MKKyAgICBkZWYgc2V0dXBfcXVlcnlzZXQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBpbiB0aGUgc3ViY2xhc3Mgd2hpY2ggc2V0cyB1cCB0aGUgcXVlcnlzZXQiIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIGFkZF9maWx0ZXIoc2VsZiwgbmFtZSwgdGl0bGUsIGZpbHRlcl9hY3Rpb25zKToKKyAgICAgICAgIiIiQWRkIGEgZmlsdGVyIHRvIHRoZSB0YWJsZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgbmFtZSAoc3RyKTogVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGZpbHRlci4KKyAgICAgICAgICAgIHRpdGxlIChzdHIpOiBUaXRsZSBvZiB0aGUgZmlsdGVyLgorICAgICAgICAgICAgZmlsdGVyX2FjdGlvbnM6IEFjdGlvbnMgZm9yIGFsbCB0aGUgZmlsdGVycy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZmlsdGVyc1tuYW1lXSA9IHsKKyAgICAgICAgICAndGl0bGUnIDogdGl0bGUsCisgICAgICAgICAgJ2ZpbHRlcl9hY3Rpb25zJyA6IGZpbHRlcl9hY3Rpb25zLAorICAgICAgICB9CisKKyAgICBkZWYgbWFrZV9maWx0ZXJfYWN0aW9uKHNlbGYsIG5hbWUsIHRpdGxlLCBhY3Rpb25fZnVuY3Rpb24pOgorICAgICAgICAiIiIgVXRpbGl0eSB0byBtYWtlIGEgZmlsdGVyX2FjdGlvbiAiIiIKKworICAgICAgICBhY3Rpb24gPSB7CisgICAgICAgICAgJ3RpdGxlJyA6IHRpdGxlLAorICAgICAgICAgICduYW1lJyA6IG5hbWUsCisgICAgICAgIH0KKworICAgICAgICBzZWxmLmZpbHRlcl9hY3Rpb25zW25hbWVdID0gYWN0aW9uX2Z1bmN0aW9uCisKKyAgICAgICAgcmV0dXJuIGFjdGlvbgorCisgICAgZGVmIGFkZF9jb2x1bW4oc2VsZiwgdGl0bGU9IiIsIGhlbHBfdGV4dD0iIiwKKyAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9RmFsc2UsIGhpZGVhYmxlPVRydWUsIGhpZGRlbj1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSIiLCBmaWx0ZXJfbmFtZT1Ob25lLCBzdGF0aWNfZGF0YV9uYW1lPU5vbmUsCisgICAgICAgICAgICAgICAgICAgZGlzcGxheWFibGU9VHJ1ZSwgY29tcHV0YXRpb249Tm9uZSwKKyAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1Ob25lKToKKyAgICAgICAgIiIiQWRkIGEgY29sdW1uIHRvIHRoZSB0YWJsZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgdGl0bGUgKHN0cik6IFRpdGxlIGZvciB0aGUgdGFibGUgaGVhZGVyCisgICAgICAgICAgICBoZWxwX3RleHQgKHN0cik6IE9wdGlvbmFsIGhlbHAgdGV4dCB0byBkZXNjcmliZSB0aGUgY29sdW1uCisgICAgICAgICAgICBvcmRlcmFibGUgKGJvb2wpOiBXaGV0aGVyIHRoZSBjb2x1bW4gY2FuIGJlIG9yZGVyZWQuCisgICAgICAgICAgICAgICAgV2Ugb3JkZXIgb24gdGhlIGZpZWxkX25hbWUuCisgICAgICAgICAgICBoaWRlYWJsZSAoYm9vbCk6IFdoZXRoZXIgdGhlIHVzZXIgY2FuIGhpZGUgdGhlIGNvbHVtbgorICAgICAgICAgICAgaGlkZGVuIChib29sKTogV2hldGhlciB0aGUgY29sdW1uIGlzIGRlZmF1bHQgaGlkZGVuCisgICAgICAgICAgICBmaWVsZF9uYW1lIChzdHIgb3IgbGlzdCk6IGZpZWxkKHMpIHJlcXVpcmVkIGZvciB0aGlzIGNvbHVtbidzIGRhdGEKKyAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWUgKHN0ciwgb3B0aW9uYWwpOiBUaGUgY29sdW1uJ3MgbWFpbiBpZGVudGlmaWVyCisgICAgICAgICAgICAgICAgd2hpY2ggd2lsbCByZXBsYWNlIHRoZSBmaWVsZF9uYW1lLgorICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGUoc3RyLCBvcHRpb25hbCk6IFRoZSB0ZW1wbGF0ZSB0byBiZSByZW5kZXJlZAorICAgICAgICAgICAgICAgIGFzIGRhdGEKKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5jb2x1bW5zLmFwcGVuZCh7J3RpdGxlJyA6IHRpdGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVscF90ZXh0JyA6IGhlbHBfdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGVyYWJsZScgOiBvcmRlcmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoaWRlYWJsZScgOiBoaWRlYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hpZGRlbicgOiBoaWRkZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWVsZF9uYW1lJyA6IGZpZWxkX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWx0ZXJfbmFtZScgOiBmaWx0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXRpY19kYXRhX25hbWUnOiBzdGF0aWNfZGF0YV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhdGljX2RhdGFfdGVtcGxhdGUnOiBzdGF0aWNfZGF0YV90ZW1wbGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc3BsYXlhYmxlJzogZGlzcGxheWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wdXRhdGlvbic6IGNvbXB1dGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCisKKyAgICBkZWYgcmVuZGVyX3N0YXRpY19kYXRhKHNlbGYsIHRlbXBsYXRlLCByb3cpOgorICAgICAgICAiIiJVdGlsaXR5IGZ1bmN0aW9uIHRvIHJlbmRlciB0aGUgc3RhdGljIGRhdGEgdGVtcGxhdGUiIiIKKworICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICdleHRyYScgOiBzZWxmLnN0YXRpY19jb250ZXh0X2V4dHJhLAorICAgICAgICAgICdkYXRhJyA6IHJvdywKKyAgICAgICAgfQorCisgICAgICAgIGNvbnRleHQgPSBDb250ZXh0KGNvbnRleHQpCisgICAgICAgIHRlbXBsYXRlID0gVGVtcGxhdGUodGVtcGxhdGUpCisKKyAgICAgICAgcmV0dXJuIHRlbXBsYXRlLnJlbmRlcihjb250ZXh0KQorCisgICAgZGVmIGFwcGx5X2ZpbHRlcihzZWxmLCBmaWx0ZXJzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuc2V0dXBfZmlsdGVycygqKmt3YXJncykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmaWx0ZXJfbmFtZSwgZmlsdGVyX2FjdGlvbiA9IGZpbHRlcnMuc3BsaXQoJzonKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmICJhbGwiIGluIGZpbHRlcl9hY3Rpb246CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmZpbHRlcl9hY3Rpb25zW2ZpbHRlcl9hY3Rpb25dKCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgIyBwYXNzIGl0IHRvIHRoZSB1c2VyIC0gcHJvZ3JhbW1pbmcgZXJyb3IgaGVyZQorICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBhcHBseV9vcmRlcmJ5KHNlbGYsIG9yZGVyYnkpOgorICAgICAgICAjIE5vdGUgdGhhdCBkamFuZ28gd2lsbCBleGVjdXRlIHRoaXMgd2hlbiB3ZSB0cnkgdG8gcmV0cmlldmUgdGhlIGRhdGEKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IHNlbGYucXVlcnlzZXQub3JkZXJfYnkob3JkZXJieSkKKworICAgIGRlZiBhcHBseV9zZWFyY2goc2VsZiwgc2VhcmNoX3Rlcm0pOgorICAgICAgICAiIiJDcmVhdGVzIGEgcXVlcnkgYmFzZWQgb24gdGhlIG1vZGVsJ3Mgc2VhcmNoX2FsbG93ZWRfZmllbGRzIiIiCisKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZi5xdWVyeXNldC5tb2RlbCwgJ3NlYXJjaF9hbGxvd2VkX2ZpZWxkcycpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFcnIgU2VhcmNoIGZpZWxkcyBhcmVuJ3QgZGVmaW5lZCBpbiB0aGUgbW9kZWwiKQorCisgICAgICAgIHNlYXJjaF9xdWVyaWVzID0gW10KKyAgICAgICAgZm9yIHN0IGluIHNlYXJjaF90ZXJtLnNwbGl0KCIgIik6CisgICAgICAgICAgICBxX21hcCA9IFtRKCoqe2ZpZWxkICsgJ19faWNvbnRhaW5zJzogc3R9KQorICAgICAgICAgICAgICAgICAgICAgZm9yIGZpZWxkIGluIHNlbGYucXVlcnlzZXQubW9kZWwuc2VhcmNoX2FsbG93ZWRfZmllbGRzXQorCisgICAgICAgICAgICBzZWFyY2hfcXVlcmllcy5hcHBlbmQocmVkdWNlKG9wZXJhdG9yLm9yXywgcV9tYXApKQorCisgICAgICAgIHNlYXJjaF9xdWVyaWVzID0gcmVkdWNlKG9wZXJhdG9yLmFuZF8sIHNlYXJjaF9xdWVyaWVzKQorCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBzZWxmLnF1ZXJ5c2V0LmZpbHRlcihzZWFyY2hfcXVlcmllcykKKworCisgICAgZGVmIGdldF9kYXRhKHNlbGYsIHJlcXVlc3QsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZGF0YSBmb3IgdGhlIHBhZ2UgcmVxdWVzdGVkIHdpdGggdGhlIHNwZWNpZmllZAorICAgICAgICBwYXJhbWV0ZXJzIGFwcGxpZWQiIiIKKworICAgICAgICBwYWdlX251bSA9IHJlcXVlc3QuR0VULmdldCgicGFnZSIsIDEpCisgICAgICAgIGxpbWl0ID0gcmVxdWVzdC5HRVQuZ2V0KCJsaW1pdCIsIDEwKQorICAgICAgICBzZWFyY2ggPSByZXF1ZXN0LkdFVC5nZXQoInNlYXJjaCIsIE5vbmUpCisgICAgICAgIGZpbHRlcnMgPSByZXF1ZXN0LkdFVC5nZXQoImZpbHRlciIsIE5vbmUpCisgICAgICAgIG9yZGVyYnkgPSByZXF1ZXN0LkdFVC5nZXQoIm9yZGVyYnkiLCBOb25lKQorCisgICAgICAgICMgTWFrZSBhIHVuaXF1ZSBjYWNoZSBuYW1lCisgICAgICAgIGNhY2hlX25hbWUgPSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgICAgIGZvciBrZXksIHZhbCBpbiByZXF1ZXN0LkdFVC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGNhY2hlX25hbWUgPSBjYWNoZV9uYW1lICsgc3RyKGtleSkgKyBzdHIodmFsKQorCisgICAgICAgIGZvciBrZXksIHZhbCBpbiBrd2FyZ3MuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBjYWNoZV9uYW1lID0gY2FjaGVfbmFtZSArIHN0cihrZXkpICsgc3RyKHZhbCkKKworICAgICAgICAjIE5vIHNwZWNpYWwgY2hhcnMgYWxsb3dlZCBpbiB0aGUgY2FjaGUgbmFtZSBhcGFydCBmcm9tIGRhc2gKKyAgICAgICAgY2FjaGVfbmFtZSA9IHJlLnN1YihyJ1teQS1aYS16MC05LV0nLCAiIiwgY2FjaGVfbmFtZSkKKyAgICAgICAgZGF0YSA9IGNhY2hlLmdldChjYWNoZV9uYW1lKQorCisgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICByZXR1cm4gZGF0YQorCisgICAgICAgIHNlbGYuc2V0dXBfY29sdW1ucygqKmt3YXJncykKKworICAgICAgICBpZiBzZWFyY2g6CisgICAgICAgICAgICBzZWxmLmFwcGx5X3NlYXJjaChzZWFyY2gpCisgICAgICAgIGlmIGZpbHRlcnM6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2ZpbHRlcihmaWx0ZXJzLCAqKmt3YXJncykKKyAgICAgICAgaWYgb3JkZXJieToKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfb3JkZXJieShvcmRlcmJ5KQorCisgICAgICAgIHBhZ2luYXRvciA9IFBhZ2luYXRvcihzZWxmLnF1ZXJ5c2V0LCBsaW1pdCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwYWdlID0gcGFnaW5hdG9yLnBhZ2UocGFnZV9udW0pCisgICAgICAgIGV4Y2VwdCBFbXB0eVBhZ2U6CisgICAgICAgICAgICBwYWdlID0gcGFnaW5hdG9yLnBhZ2UoMSkKKworICAgICAgICBkYXRhID0geworICAgICAgICAgICAgJ3RvdGFsJyA6IHNlbGYucXVlcnlzZXQuY291bnQoKSwKKyAgICAgICAgICAgICdkZWZhdWx0X29yZGVyYnknIDogc2VsZi5kZWZhdWx0X29yZGVyYnksCisgICAgICAgICAgICAnY29sdW1ucycgOiBzZWxmLmNvbHVtbnMsCisgICAgICAgICAgICAncm93cycgOiBbXSwKKyAgICAgICAgICAgICdlcnJvcicgOiAib2siLAorICAgICAgICB9CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIHJvdyBpbiBwYWdlLm9iamVjdF9saXN0OgorICAgICAgICAgICAgICAgICNVc2UgY29sbGVjdGlvbiB0byBtYWludGFpbiB0aGUgb3JkZXIKKyAgICAgICAgICAgICAgICByZXF1aXJlZF9kYXRhID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorCisgICAgICAgICAgICAgICAgZm9yIGNvbCBpbiBzZWxmLmNvbHVtbnM6CisgICAgICAgICAgICAgICAgICAgIGZpZWxkID0gY29sWydmaWVsZF9uYW1lJ10KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZpZWxkOgorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgPSBjb2xbJ3N0YXRpY19kYXRhX25hbWUnXQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZmllbGQ6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk11c3Qgc3VwcGx5IGEgZmllbGRfbmFtZSBvciBzdGF0aWNfZGF0YV9uYW1lIGZvciBjb2x1bW4gJXMuJXMiICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLGNvbCkpCisgICAgICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgd2UgbmVlZCB0byBwcm9jZXNzIHNvbWUgc3RhdGljIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgaWYgInN0YXRpY19kYXRhX25hbWUiIGluIGNvbCBhbmQgY29sWydzdGF0aWNfZGF0YV9uYW1lJ106CisgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZF9kYXRhWyJzdGF0aWM6JXMiICUgY29sWydzdGF0aWNfZGF0YV9uYW1lJ11dID0gc2VsZi5yZW5kZXJfc3RhdGljX2RhdGEoY29sWydzdGF0aWNfZGF0YV90ZW1wbGF0ZSddLCByb3cpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgT3ZlcndyaXRlIHRoZSBmaWVsZF9uYW1lIHdpdGggc3RhdGljX2RhdGFfbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBzbyB0aGF0IHRoaXMgY2FuIGJlIHVzZWQgYXMgdGhlIGh0bWwgY2xhc3MgbmFtZQorCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xbJ2ZpZWxkX25hbWUnXSA9IGNvbFsnc3RhdGljX2RhdGFfbmFtZSddCisKKyAgICAgICAgICAgICAgICAgICAgIyBjb21wdXRlIHRoZSBjb21wdXRhdGlvbiBvbiB0aGUgcmF3IGRhdGEgaWYgbmVlZGVkCisgICAgICAgICAgICAgICAgICAgIG1vZGVsX2RhdGEgPSByb3cKKyAgICAgICAgICAgICAgICAgICAgaWYgY29sWydjb21wdXRhdGlvbiddOgorICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfZGF0YSA9IGNvbFsnY29tcHV0YXRpb24nXShyb3cpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFRyYXZlcnNlIHRvIGFueSBmb3JpZWduIGtleSBpbiB0aGUgb2JqZWN0IGhpZXJhY2h5CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Igc3ViZmllbGQgaW4gZmllbGQuc3BsaXQoIl9fIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihtb2RlbF9kYXRhLCBzdWJmaWVsZCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX2RhdGEgPSBnZXRhdHRyKG1vZGVsX2RhdGEsIHN1YmZpZWxkKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgZmllbGQgY291bGQgYmUgYSBmdW5jdGlvbiBvbiB0aGUgbW9kZWwgc28gY2hlY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgaXQgaXMgdGhlbiBjYWxsIGl0CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1vZGVsX2RhdGEsIHR5cGVzLk1ldGhvZFR5cGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9kYXRhID0gbW9kZWxfZGF0YSgpCisKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRfZGF0YVtjb2xbJ2ZpZWxkX25hbWUnXV0gPSBtb2RlbF9kYXRhCisKKyAgICAgICAgICAgICAgICBkYXRhWydyb3dzJ10uYXBwZW5kKHJlcXVpcmVkX2RhdGEpCisKKyAgICAgICAgZXhjZXB0IEZpZWxkRXJyb3I6CisgICAgICAgICAgICAjIHBhc3MgIGl0IHRvIHRoZSB1c2VyIC0gcHJvZ3JhbW1pbmctZXJyb3IgaGVyZQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZGF0YSA9IGpzb24uZHVtcHMoZGF0YSwgaW5kZW50PTIsIGRlZmF1bHQ9b2JqdG9qc29uKQorICAgICAgICBjYWNoZS5zZXQoY2FjaGVfbmFtZSwgZGF0YSwgNjAqMzApCisKKyAgICAgICAgcmV0dXJuIGRhdGEKKworCitjbGFzcyBUb2FzdGVyVGVtcGxhdGVWaWV3KFRlbXBsYXRlVmlldyk6CisgICAgIyByZW5kZXJzIGEgaW5zdGFuY2UgaW4gYSB0ZW1wbGF0ZSwgb3IgcmV0dXJucyB0aGUgY29udGV4dCBhcyBqc29uCisgICAgIyB0aGUgY2xhc3MtZXF1aXZhbGVudCBvZiB0aGUgX3RlbXBsYXRlX3JlbmRlcmVyIGRlY29yYXRvciBmb3Igdmlld3MKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihUb2FzdGVyVGVtcGxhdGVWaWV3LCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuY29udGV4dF9lbnRyaWVzID0gW10KKworICAgIGRlZiBnZXQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgc2VsZi5yZXF1ZXN0LkdFVC5nZXQoJ2Zvcm1hdCcsIE5vbmUpID09ICdqc29uJzoKKyAgICAgICAgICAgIGZyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlCisgICAgICAgICAgICBmcm9tIGRqYW5nby5zaG9ydGN1dHMgaW1wb3J0IEh0dHBSZXNwb25zZQorICAgICAgICAgICAgZnJvbSB2aWV3cyBpbXBvcnQgb2JqdG9qc29uCisgICAgICAgICAgICBmcm9tIHRvYXN0ZXJndWkudGVtcGxhdGV0YWdzLnByb2plY3R0YWdzIGltcG9ydCBqc29uIGFzIGpzb25maWx0ZXIKKworICAgICAgICAgICAgY29udGV4dCA9IHNlbGYuZ2V0X2NvbnRleHRfZGF0YSgqKmt3YXJncykKKworICAgICAgICAgICAgZm9yIHggaW4gY29udGV4dC5rZXlzKCk6CisgICAgICAgICAgICAgICAgaWYgeCBub3QgaW4gc2VsZi5jb250ZXh0X2VudHJpZXM6CisgICAgICAgICAgICAgICAgICAgIGRlbCBjb250ZXh0W3hdCisKKyAgICAgICAgICAgIGNvbnRleHRbImVycm9yIl0gPSAib2siCisKKyAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcihjb250ZXh0LCAgZGVmYXVsdD1vYmp0b2pzb24gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIpCisKKyAgICAgICAgcmV0dXJuIHN1cGVyKFRvYXN0ZXJUZW1wbGF0ZVZpZXcsIHNlbGYpLmdldCgqYXJncywgKiprd2FyZ3MpCisKK2NsYXNzIFRvYXN0ZXJUeXBlQWhlYWQoVmlldyk6CisgICAgIiIiIEEgdHlwZWFoZWFkIG1lY2hhbmlzbSB0byBzdXBwb3J0IHRoZSBmcm9udCBlbmQgdHlwZWFoZWFkIHdpZGdldHMgIiIiCisgICAgTUFYX1JFU1VMVFMgPSA2CisKKyAgICBjbGFzcyBNaXNzaW5nRmllbGRzRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihUb2FzdGVyVHlwZUFoZWFkLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICBkZWYgZ2V0KHNlbGYsIHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGRlZiByZXNwb25zZShkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbi5kdW1wcyhkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudD0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscz1EamFuZ29KU09ORW5jb2RlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZT0iYXBwbGljYXRpb24vanNvbiIpCisKKyAgICAgICAgZXJyb3IgPSAib2siCisKKyAgICAgICAgc2VhcmNoX3Rlcm0gPSByZXF1ZXN0LkdFVC5nZXQoInNlYXJjaCIsIE5vbmUpCisgICAgICAgIGlmIHNlYXJjaF90ZXJtID09IE5vbmU6CisgICAgICAgICAgICAjIFdlIGdvdCBubyBzZWFyY2ggdmFsdWUgc28gcmV0dXJuIGVtcHR5IHJlcG9uc2UKKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZSh7J2Vycm9yJyA6IGVycm9yICwgJ3Jlc3VsdHMnOiBbXX0pCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ3BpZCddKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwcmogPSBOb25lCisKKyAgICAgICAgcmVzdWx0cyA9IHNlbGYuYXBwbHlfc2VhcmNoKHNlYXJjaF90ZXJtLCBwcmosIHJlcXVlc3QpWzpUb2FzdGVyVHlwZUFoZWFkLk1BWF9SRVNVTFRTXQorCisgICAgICAgIGlmIGxlbihyZXN1bHRzKSA+IDA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi52YWxpZGF0ZV9maWVsZHMocmVzdWx0c1swXSkKKyAgICAgICAgICAgIGV4Y2VwdCBNaXNzaW5nRmllbGRzRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgZXJyb3IgPSBlCisKKyAgICAgICAgZGF0YSA9IHsgJ3Jlc3VsdHMnIDogcmVzdWx0cywKKyAgICAgICAgICAgICAgICAnZXJyb3InIDogZXJyb3IsCisgICAgICAgICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlKGRhdGEpCisKKyAgICBkZWYgdmFsaWRhdGVfZmllbGRzKHNlbGYsIHJlc3VsdCk6CisgICAgICAgIGlmICduYW1lJyBpbiByZXN1bHQgPT0gRmFsc2Ugb3IgJ2RldGFpbCcgaW4gcmVzdWx0ID09IEZhbHNlOgorICAgICAgICAgICAgcmFpc2UgTWlzc2luZ0ZpZWxkc0V4Y2VwdGlvbigibmFtZSBhbmQgZGV0YWlsIGFyZSByZXF1aXJlZCBmaWVsZHMiKQorCisgICAgZGVmIGFwcGx5X3NlYXJjaChzZWxmLCBzZWFyY2hfdGVybSwgcHJqKToKKyAgICAgICAgIiIiIE92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gdG8gaW1wbGVtZW50IHNlYXJjaC4gUmV0dXJuIGFuIGFycmF5IG9mCisgICAgICAgIGRpY3Rpb25hcmllcyB3aXRoIGEgbWluaXVtIG9mIGEgbmFtZSBhbmQgZGV0YWlsIGZpZWxkIiIiCisgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL2J1aWxkZGVsZXRlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvYnVpbGRkZWxldGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQzZDMxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL2J1aWxkZGVsZXRlLnB5CkBAIC0wLDAgKzEsNDkgQEAKK2Zyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudC5iYXNlIGltcG9ydCBCYXNlQ29tbWFuZCwgQ29tbWFuZEVycm9yCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEJ1aWxkCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgT3BlcmF0aW9uYWxFcnJvcgoraW1wb3J0IG9zCisKKworCitjbGFzcyBDb21tYW5kKEJhc2VDb21tYW5kKToKKyAgICBhcmdzICAgID0gImJ1aWxkSWQiCisgICAgaGVscCAgICA9ICJEZWxldGVzIHNlbGVjdGVkIGJ1aWxkKHMpIgorCisgICAgZGVmIGhhbmRsZShzZWxmLCBidWlsZElkLCAqYXJncywgKipvcHRpb25zKToKKyAgICAgICAgZm9yIGJpZCBpbiBidWlsZElkLnNwbGl0KCIsIik6CisgICAgICAgICAgICBiID0gQnVpbGQub2JqZWN0cy5nZXQocGsgPSBiaWQpCisgICAgICAgICAgICAjIHRoZW9yZXRpY2FsbHksIGp1c3QgYi5kZWxldGUoKSB3b3VsZCBzdWZmaWNlCisgICAgICAgICAgICAjIGhvd2V2ZXIgU1FMaXRlIHJ1bnMgaW50byBwcm9ibGVtcyB3aGVuIHlvdSB0cnkgdG8KKyAgICAgICAgICAgICMgZGVsZXRlIHRvbyBtYW55IHJvd3MgYXQgb25jZSwgc28gd2UgZGVsZXRlIHNvbWUgZGlyZWN0CisgICAgICAgICAgICAjIHJlbGF0aW9uc2hpcHMgZnJvbSBCdWlsZCBtYW51YWxseS4KKyAgICAgICAgICAgIGZvciB0IGluIGIudGFyZ2V0X3NldC5hbGwoKToKKyAgICAgICAgICAgICAgICB0LmRlbGV0ZSgpCisgICAgICAgICAgICBmb3IgdCBpbiBiLnRhc2tfYnVpbGQuYWxsKCk6CisgICAgICAgICAgICAgICAgdC5kZWxldGUoKQorICAgICAgICAgICAgZm9yIHAgaW4gYi5wYWNrYWdlX3NldC5hbGwoKToKKyAgICAgICAgICAgICAgICBwLmRlbGV0ZSgpCisgICAgICAgICAgICBmb3IgbHYgaW4gYi5sYXllcl92ZXJzaW9uX2J1aWxkLmFsbCgpOgorICAgICAgICAgICAgICAgIGx2LmRlbGV0ZSgpCisgICAgICAgICAgICBmb3IgdiBpbiBiLnZhcmlhYmxlX2J1aWxkLmFsbCgpOgorICAgICAgICAgICAgICAgIHYuZGVsZXRlKCkKKyAgICAgICAgICAgIGZvciBsIGluIGIubG9nbWVzc2FnZV9zZXQuYWxsKCk6CisgICAgICAgICAgICAgICAgbC5kZWxldGUoKQorCisgICAgICAgICAgICAjIGRlbGV0ZSB0aGUgYnVpbGQ7IHNvbWUgZGF0YWJhc2VzIG1pZ2h0IGhhdmUgaGFkIHByb2JsZW0gd2l0aCBtaWdyYXRpb24gb2YgdGhlIGJsZGNvbnRyb2wgYXBwCisgICAgICAgICAgICByZXRyeV9jb3VudCA9IDAKKyAgICAgICAgICAgIG5lZWRfYmxkY29udHJvbF9taWdyYXRpb24gPSBGYWxzZQorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBpZiByZXRyeV9jb3VudCA+PSA1OgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHJldHJ5X2NvdW50ICs9IDEKKyAgICAgICAgICAgICAgICBpZiBuZWVkX2JsZGNvbnRyb2xfbWlncmF0aW9uOgorICAgICAgICAgICAgICAgICAgICBmcm9tIGRqYW5nby5jb3JlIGltcG9ydCBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQuY2FsbF9jb21tYW5kKCdtaWdyYXRlJywgJ2JsZGNvbnRyb2wnLCBpbnRlcmFjdGl2ZT1GYWxzZSkKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgYi5kZWxldGUoKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4Y2VwdCBPcGVyYXRpb25hbEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICMgZXhlY3V0ZSBtaWdyYXRpb25zCisgICAgICAgICAgICAgICAgICAgIG5lZWRfYmxkY29udHJvbF9taWdyYXRpb24gPSBUcnVlCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL2J1aWxkc2xpc3QucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9idWlsZHNsaXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZDk4N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9idWlsZHNsaXN0LnB5CkBAIC0wLDAgKzEsMTMgQEAKK2Zyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudC5iYXNlIGltcG9ydCBOb0FyZ3NDb21tYW5kLCBDb21tYW5kRXJyb3IKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgQnVpbGQKK2ltcG9ydCBvcworCisKKworY2xhc3MgQ29tbWFuZChOb0FyZ3NDb21tYW5kKToKKyAgICBhcmdzICAgID0gIiIKKyAgICBoZWxwICAgID0gIkxpc3RzIGN1cnJlbnQgYnVpbGRzIgorCisgICAgZGVmIGhhbmRsZV9ub2FyZ3Moc2VsZiwqKm9wdGlvbnMpOgorICAgICAgICBmb3IgYiBpbiBCdWlsZC5vYmplY3RzLmFsbCgpOgorICAgICAgICAgICAgcHJpbnQgIiVkOiAlcyAlcyAlcyIgJSAoYi5waywgYi5tYWNoaW5lLCBiLmRpc3RybywgIiwiLmpvaW4oW3gudGFyZ2V0IGZvciB4IGluIGIudGFyZ2V0X3NldC5hbGwoKV0pKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvcGVyZi5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL3BlcmYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFhNDhlOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL3BlcmYucHkKQEAgLTAsMCArMSw1OCBAQAorZnJvbSBkamFuZ28uY29yZS5tYW5hZ2VtZW50LmJhc2UgaW1wb3J0IEJhc2VDb21tYW5kCitmcm9tIGRqYW5nby50ZXN0LmNsaWVudCBpbXBvcnQgQ2xpZW50CitpbXBvcnQgb3MsIHN5cywgcmUKK2ltcG9ydCByZXF1ZXN0cworZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKKworIyBweWxpbnQ6IGRpc2FibGU9RTExMDMKKyMgSW5zdGFuY2Ugb2YgJ1dTR0lSZXF1ZXN0JyBoYXMgbm8gJ3N0YXR1c19jb2RlJyBtZW1iZXIKKyMgKGJ1dCBzb21lIHR5cGVzIGNvdWxkIG5vdCBiZSBpbmZlcnJlZCkgKG1heWJlLW5vLW1lbWJlcikKKworCitjbGFzcyBDb21tYW5kKEJhc2VDb21tYW5kKToKKyAgICBoZWxwICAgID0gIlRlc3QgdGhlIHJlc3BvbnNlIHRpbWUgZm9yIGFsbCB0b2FzdGVyIHVybHMiCisKKyAgICBkZWYgaGFuZGxlKHNlbGYsICphcmdzLCAqKm9wdGlvbnMpOgorCXJvb3RfdXJsY29uZiA9IF9faW1wb3J0X18oc2V0dGluZ3MuUk9PVF9VUkxDT05GKQorCXBhdHRlcm5zID0gcm9vdF91cmxjb25mLnVybHMudXJscGF0dGVybnMKKwlnbG9iYWwgZnVsbF91cmwKKwlmb3IgcGF0IGluIHBhdHRlcm5zOgorCSAgICBpZiBwYXQuX19jbGFzc19fLl9fbmFtZV9fID09ICdSZWdleFVSTFJlc29sdmVyJzoKKwkJdXJsX3Jvb3RfcmVzID0gc3RyKHBhdCkuc3BsaXQoJ14nKVsxXS5yZXBsYWNlKCc+JywgJycpCisJCWlmICdndWknIGluIHVybF9yb290X3JlczoKKwkJICAgIGZvciB1cmxfcGF0dCBpbiBwYXQudXJsX3BhdHRlcm5zOgorCQkJZnVsbF91cmwgPSBzZWxmLmdldF9mdWxsX3VybCh1cmxfcGF0dCwgdXJsX3Jvb3RfcmVzKQorCQkJaW5mbyA9IHNlbGYudXJsX2luZm8oZnVsbF91cmwpCisJCQlzdGF0dXNfY29kZSA9IGluZm9bMF0KKwkJCWxvYWRfdGltZSA9IGluZm9bMV0KKwkJCXByaW50ICdUcnlpbmcgXCcnICsgZnVsbF91cmwgKyAnXCcsICcgKyBzdHIoc3RhdHVzX2NvZGUpICsgJywgJyArIHN0cihsb2FkX3RpbWUpCisKKyAgICBkZWYgZ2V0X2Z1bGxfdXJsKHNlbGYsIHVybF9wYXR0LCB1cmxfcm9vdF9yZXMpOgorCWZ1bGxfdXJsID0gc3RyKHVybF9wYXR0KS5zcGxpdCgnXicpWzFdLnJlcGxhY2UoJyQ+JywgJycpLnJlcGxhY2UoJyg/UDxmaWxlX3BhdGg+KD86L1snLCAnL2Jpbi9idXN5Ym94JykucmVwbGFjZSgnLionLCAnJykKKwlmdWxsX3VybCA9IHN0cih1cmxfcm9vdF9yZXMgKyBmdWxsX3VybCkKKwlmdWxsX3VybCA9IHJlLnN1YignXChcP1A8Lio/PlxcXGRcK1wpJywgJzEnLCBmdWxsX3VybCkKKwlmdWxsX3VybCA9ICdodHRwOi8vbG9jYWxob3N0OjgwMDAvJyArIGZ1bGxfdXJsCisJcmV0dXJuIGZ1bGxfdXJsCisKKyAgICBkZWYgdXJsX2luZm8oc2VsZiwgZnVsbF91cmwpOgorCWNsaWVudCA9IENsaWVudCgpCisJaW5mbyA9IFtdCisJdHJ5OgorCSAgICByZXNwID0gY2xpZW50LmdldChmdWxsX3VybCwgZm9sbG93ID0gVHJ1ZSkKKwlleGNlcHQgRXhjZXB0aW9uIGFzIGVfc3RhdHVzX2NvZGU6CisgICAgICAgICAgICBzZWxmLmVycm9yKCdVcmw6ICVzLCBlcnJvcjogJXMnICUgKGZ1bGxfdXJsLCBlX3N0YXR1c19jb2RlKSkKKyAgICAgICAgICAgIHJlc3AgPSB0eXBlKCdvYmplY3QnLCAoKSwgeydzdGF0dXNfY29kZSc6MCwgJ2NvbnRlbnQnOiBzdHIoZV9zdGF0dXNfY29kZSl9KQorCXN0YXR1c19jb2RlID0gcmVzcC5zdGF0dXNfY29kZQorCWluZm8uYXBwZW5kKHN0YXR1c19jb2RlKQorCXRyeToKKwkgICAgcmVxID0gcmVxdWVzdHMuZ2V0KGZ1bGxfdXJsKQorCWV4Y2VwdCBFeGNlcHRpb24gYXMgZV9sb2FkX3RpbWU6CisgICAgICAgICAgICBzZWxmLmVycm9yKCdVcmw6ICVzLCBlcnJvcjogJXMnICUgKGZ1bGxfdXJsLCBlX2xvYWRfdGltZSkpCisJbG9hZF90aW1lID0gcmVxLmVsYXBzZWQKKwlpbmZvLmFwcGVuZChsb2FkX3RpbWUpCisJcmV0dXJuIGluZm8KKworICAgIGRlZiBlcnJvcihzZWxmLCAqYXJncyk6CisJZm9yIGFyZyBpbiBhcmdzOgorCSAgICBwcmludCA+PnN5cy5zdGRlcnIsIGFyZywKKwlwcmludCA+PnN5cy5zdGRlcnIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9zZXR0aW5ncy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9zZXR0aW5ncy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTQ5YTVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzLnB5CkBAIC0wLDAgKzEsNDEwIEBACisjCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIyBEamFuZ28gc2V0dGluZ3MgZm9yIFRvYXN0ZXIgcHJvamVjdC4KKworaW1wb3J0IG9zLCByZQorCitERUJVRyA9IFRydWUKK1RFTVBMQVRFX0RFQlVHID0gREVCVUcKKworIyBTZXQgdG8gVHJ1ZSB0byBzZWUgdGhlIFNRTCBxdWVyaWVzIGluIGNvbnNvbGUKK1NRTF9ERUJVRyA9IEZhbHNlCitpZiBvcy5lbnZpcm9uLmdldCgiVE9BU1RFUl9TUUxERUJVRyIsIE5vbmUpIGlzIG5vdCBOb25lOgorICAgIFNRTF9ERUJVRyA9IFRydWUKKworCitBRE1JTlMgPSAoCisgICAgIyAoJ1lvdXIgTmFtZScsICd5b3VyX2VtYWlsQGV4YW1wbGUuY29tJyksCispCisKK01BTkFHRVJTID0gQURNSU5TCisKK0RBVEFCQVNFUyA9IHsKKyAgICAnZGVmYXVsdCc6IHsKKyAgICAgICAgJ0VOR0lORSc6ICdkamFuZ28uZGIuYmFja2VuZHMuc3FsaXRlMycsICMgQWRkICdwb3N0Z3Jlc3FsX3BzeWNvcGcyJywgJ215c3FsJywgJ3NxbGl0ZTMnIG9yICdvcmFjbGUnLgorICAgICAgICAnTkFNRSc6ICd0b2FzdGVyLnNxbGl0ZScsICAgICAgICAgICAgICAgICAgICAgICMgT3IgcGF0aCB0byBkYXRhYmFzZSBmaWxlIGlmIHVzaW5nIHNxbGl0ZTMuCisgICAgICAgICdVU0VSJzogJycsCisgICAgICAgICdQQVNTV09SRCc6ICcnLAorICAgICAgICAnSE9TVCc6ICcxMjcuMC4wLjEnLCAgICAgICAgICAgICAgICAgICAgICAjIEVtcHR5IGZvciBsb2NhbGhvc3QgdGhyb3VnaCBkb21haW4gc29ja2V0cyBvciAnMTI3LjAuMC4xJyBmb3IgbG9jYWxob3N0IHRocm91Z2ggVENQLgorICAgICAgICAnUE9SVCc6ICczMzA2JywgICAgICAgICAgICAgICAgICAgICAgIyBTZXQgdG8gZW1wdHkgc3RyaW5nIGZvciBkZWZhdWx0LgorICAgIH0KK30KKworIyBOZWVkZWQgd2hlbiBVc2luZyBzcWxpdGUgZXNwZWNpYWxseSB0byBhZGQgYSBsb25nZXIgdGltZW91dCBmb3Igd2FpdGluZworIyBmb3IgdGhlIGRhdGFiYXNlIGxvY2sgdG8gYmUgIHJlbGVhc2VkCisjIGh0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8xLjYvcmVmL2RhdGFiYXNlcy8jZGF0YWJhc2UtaXMtbG9ja2VkLWVycm9ycworaWYgJ3NxbGl0ZScgaW4gREFUQUJBU0VTWydkZWZhdWx0J11bJ0VOR0lORSddOgorICAgIERBVEFCQVNFU1snZGVmYXVsdCddWydPUFRJT05TJ10gPSB7ICd0aW1lb3V0JzogMjAgfQorCisjIFJlaW50ZXJwcmV0IGRhdGFiYXNlIHNldHRpbmdzIGlmIHdlIGhhdmUgREFUQUJBU0VfVVJMIGVudmlyb25tZW50IHZhcmlhYmxlIGRlZmluZWQKKworaWYgJ0RBVEFCQVNFX1VSTCcgaW4gb3MuZW52aXJvbjoKKyAgICBkYnVybCA9IG9zLmVudmlyb25bJ0RBVEFCQVNFX1VSTCddCisgICAgaWYgZGJ1cmwuc3RhcnRzd2l0aCgnc3FsaXRlMzovLycpOgorICAgICAgICByZXN1bHQgPSByZS5tYXRjaCgnc3FsaXRlMzovLyguKiknLCBkYnVybCkKKyAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkVSUk9SOiBDb3VsZCBub3QgcmVhZCBzcWxpdGUgZGF0YWJhc2UgdXJsOiAlcyIgJSBkYnVybCkKKyAgICAgICAgREFUQUJBU0VTWydkZWZhdWx0J10gPSB7CisgICAgICAgICAgICAnRU5HSU5FJzogJ2RqYW5nby5kYi5iYWNrZW5kcy5zcWxpdGUzJywKKyAgICAgICAgICAgICdOQU1FJzogcmVzdWx0Lmdyb3VwKDEpLAorICAgICAgICAgICAgJ1VTRVInOiAnJywKKyAgICAgICAgICAgICdQQVNTV09SRCc6ICcnLAorICAgICAgICAgICAgJ0hPU1QnOiAnJywKKyAgICAgICAgICAgICdQT1JUJzogJycsCisgICAgICAgIH0KKyAgICBlbGlmIGRidXJsLnN0YXJ0c3dpdGgoJ215c3FsOi8vJyk6CisgICAgICAgICMgVVJMIG11c3QgYmUgaW4gdGhpcyBmb3JtOiBteXNxbDovL3VzZXI6cGFzc0Bob3N0OnBvcnQvbmFtZQorICAgICAgICByZXN1bHQgPSByZS5tYXRjaChyIm15c3FsOi8vKFteOl0qKTooW15AXSopQChbXjpdKik6KFxkKykvKFteL10qKSIsIGRidXJsKQorICAgICAgICBpZiByZXN1bHQgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRVJST1I6IENvdWxkIG5vdCByZWFkIG15c3FsIGRhdGFiYXNlIHVybDogJXMiICUgZGJ1cmwpCisgICAgICAgIERBVEFCQVNFU1snZGVmYXVsdCddID0geworICAgICAgICAgICAgJ0VOR0lORSc6ICdkamFuZ28uZGIuYmFja2VuZHMubXlzcWwnLAorICAgICAgICAgICAgJ05BTUUnOiByZXN1bHQuZ3JvdXAoNSksCisgICAgICAgICAgICAnVVNFUic6IHJlc3VsdC5ncm91cCgxKSwKKyAgICAgICAgICAgICdQQVNTV09SRCc6IHJlc3VsdC5ncm91cCgyKSwKKyAgICAgICAgICAgICdIT1NUJzogcmVzdWx0Lmdyb3VwKDMpLAorICAgICAgICAgICAgJ1BPUlQnOiByZXN1bHQuZ3JvdXAoNCksCisgICAgICAgIH0KKyAgICBlbHNlOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBQbGVhc2UgaW1wbGVtZW50IG1pc3NpbmcgZGF0YWJhc2UgdXJsIHNjaGVtYSBmb3IgdXJsOiAlcyIgJSBkYnVybCkKKworCitpZiAnVE9BU1RFUl9NQU5BR0VEJyBpbiBvcy5lbnZpcm9uIGFuZCBvcy5lbnZpcm9uWydUT0FTVEVSX01BTkFHRUQnXSA9PSAiMSI6CisgICAgTUFOQUdFRCA9IFRydWUKK2Vsc2U6CisgICAgTUFOQUdFRCA9IEZhbHNlCisKKyMgQWxsb3dzIGN1cnJlbnQgZGF0YWJhc2Ugc2V0dGluZ3MgdG8gYmUgZXhwb3J0ZWQgYXMgYSBEQVRBQkFTRV9VUkwgZW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWUKKworZGVmIGdldERBVEFCQVNFX1VSTCgpOgorICAgIGQgPSBEQVRBQkFTRVNbJ2RlZmF1bHQnXQorICAgIGlmIGRbJ0VOR0lORSddID09ICdkamFuZ28uZGIuYmFja2VuZHMuc3FsaXRlMyc6CisgICAgICAgIGlmIGRbJ05BTUUnXSA9PSAnOm1lbW9yeTonOgorICAgICAgICAgICAgcmV0dXJuICdzcWxpdGUzOi8vOm1lbW9yeTonCisgICAgICAgIGVsaWYgZFsnTkFNRSddLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgIHJldHVybiAnc3FsaXRlMzovLycgKyBkWydOQU1FJ10KKyAgICAgICAgcmV0dXJuICJzcWxpdGUzOi8vIiArIG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgZFsnTkFNRSddKQorCisgICAgZWxpZiBkWydFTkdJTkUnXSA9PSAnZGphbmdvLmRiLmJhY2tlbmRzLm15c3FsJzoKKyAgICAgICAgcmV0dXJuICJteXNxbDovLyIgKyBkWydVU0VSJ10gKyAiOiIgKyBkWydQQVNTV09SRCddICsgIkAiICsgZFsnSE9TVCddICsgIjoiICsgZFsnUE9SVCddICsgIi8iICsgZFsnTkFNRSddCisKKyAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBQbGVhc2UgaW1wbGVtZW50IG1pc3NpbmcgZGF0YWJhc2UgdXJsIHNjaGVtYSBmb3IgZW5naW5lOiAlcyIgJSBkWydFTkdJTkUnXSkKKworCisKKyMgSG9zdHMvZG9tYWluIG5hbWVzIHRoYXQgYXJlIHZhbGlkIGZvciB0aGlzIHNpdGU7IHJlcXVpcmVkIGlmIERFQlVHIGlzIEZhbHNlCisjIFNlZSBodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMS41L3JlZi9zZXR0aW5ncy8jYWxsb3dlZC1ob3N0cworQUxMT1dFRF9IT1NUUyA9IFtdCisKKyMgTG9jYWwgdGltZSB6b25lIGZvciB0aGlzIGluc3RhbGxhdGlvbi4gQ2hvaWNlcyBjYW4gYmUgZm91bmQgaGVyZToKKyMgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX3R6X3pvbmVzX2J5X25hbWUKKyMgYWx0aG91Z2ggbm90IGFsbCBjaG9pY2VzIG1heSBiZSBhdmFpbGFibGUgb24gYWxsIG9wZXJhdGluZyBzeXN0ZW1zLgorIyBJbiBhIFdpbmRvd3MgZW52aXJvbm1lbnQgdGhpcyBtdXN0IGJlIHNldCB0byB5b3VyIHN5c3RlbSB0aW1lIHpvbmUuCisKKyMgQWx3YXlzIHVzZSBsb2NhbCBjb21wdXRlcidzIHRpbWUgem9uZSwgZmluZAoraW1wb3J0IGhhc2hsaWIKK2lmICdUWicgaW4gb3MuZW52aXJvbjoKKyAgICBUSU1FX1pPTkUgPSBvcy5lbnZpcm9uWydUWiddCitlbHNlOgorICAgICMgbmVlZCB0byByZWFkIHRoZSAvZXRjL2xvY2FsdGltZSBmaWxlIHdoaWNoIGlzIHRoZSBsaWJjIHN0YW5kYXJkCisgICAgIyBhbmQgZG8gYSByZXZlcnNlLW1hcHBpbmcgdG8gL3Vzci9zaGFyZS96b25laW5mby87CisgICAgIyBzaW5jZSB0aGUgdGltZXpvbmUgbWF5IG1hdGNoIGFueSBudW1iZXIgb2YgaWRlbnRpY2FsIHRpbWV6b25lIGRlZmluaXRpb25zLAorCisgICAgem9uZWZpbGVsaXN0ID0ge30KKyAgICBaT05FSU5GT1BBVEggPSAnL3Vzci9zaGFyZS96b25laW5mby8nCisgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhaT05FSU5GT1BBVEgpOgorICAgICAgICBmb3IgZm4gaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4oZGlycGF0aCwgZm4pCisgICAgICAgICAgICB6b25lbmFtZSA9IGZpbGVwYXRoLmxzdHJpcChaT05FSU5GT1BBVEgpLnN0cmlwKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgcHl0egorICAgICAgICAgICAgICAgIGZyb20gcHl0ei5leGNlcHRpb25zIGltcG9ydCBVbmtub3duVGltZVpvbmVFcnJvcgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGlmIHB5dHoudGltZXpvbmUoem9uZW5hbWUpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgem9uZWZpbGVsaXN0W2hhc2hsaWIubWQ1KG9wZW4oZmlsZXBhdGgpLnJlYWQoKSkuaGV4ZGlnZXN0KCldID0gem9uZW5hbWUKKyAgICAgICAgICAgICAgICBleGNlcHQgVW5rbm93blRpbWVab25lRXJyb3IsIFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgd2UgZXhwZWN0IHRpbWV6b25lIGZhaWx1cmVzIGhlcmUsIGp1c3QgbW92ZSBvdmVyCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICB6b25lZmlsZWxpc3RbaGFzaGxpYi5tZDUob3BlbihmaWxlcGF0aCkucmVhZCgpKS5oZXhkaWdlc3QoKV0gPSB6b25lbmFtZQorCisgICAgVElNRV9aT05FID0gem9uZWZpbGVsaXN0W2hhc2hsaWIubWQ1KG9wZW4oJy9ldGMvbG9jYWx0aW1lJykucmVhZCgpKS5oZXhkaWdlc3QoKV0KKworIyBMYW5ndWFnZSBjb2RlIGZvciB0aGlzIGluc3RhbGxhdGlvbi4gQWxsIGNob2ljZXMgY2FuIGJlIGZvdW5kIGhlcmU6CisjIGh0dHA6Ly93d3cuaTE4bmd1eS5jb20vdW5pY29kZS9sYW5ndWFnZS1pZGVudGlmaWVycy5odG1sCitMQU5HVUFHRV9DT0RFID0gJ2VuLXVzJworCitTSVRFX0lEID0gMQorCisjIElmIHlvdSBzZXQgdGhpcyB0byBGYWxzZSwgRGphbmdvIHdpbGwgbWFrZSBzb21lIG9wdGltaXphdGlvbnMgc28gYXMgbm90CisjIHRvIGxvYWQgdGhlIGludGVybmF0aW9uYWxpemF0aW9uIG1hY2hpbmVyeS4KK1VTRV9JMThOID0gVHJ1ZQorCisjIElmIHlvdSBzZXQgdGhpcyB0byBGYWxzZSwgRGphbmdvIHdpbGwgbm90IGZvcm1hdCBkYXRlcywgbnVtYmVycyBhbmQKKyMgY2FsZW5kYXJzIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBsb2NhbGUuCitVU0VfTDEwTiA9IFRydWUKKworIyBJZiB5b3Ugc2V0IHRoaXMgdG8gRmFsc2UsIERqYW5nbyB3aWxsIG5vdCB1c2UgdGltZXpvbmUtYXdhcmUgZGF0ZXRpbWVzLgorVVNFX1RaID0gVHJ1ZQorCisjIEFic29sdXRlIGZpbGVzeXN0ZW0gcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRoYXQgd2lsbCBob2xkIHVzZXItdXBsb2FkZWQgZmlsZXMuCisjIEV4YW1wbGU6ICIvdmFyL3d3dy9leGFtcGxlLmNvbS9tZWRpYS8iCitNRURJQV9ST09UID0gJycKKworIyBVUkwgdGhhdCBoYW5kbGVzIHRoZSBtZWRpYSBzZXJ2ZWQgZnJvbSBNRURJQV9ST09ULiBNYWtlIHN1cmUgdG8gdXNlIGEKKyMgdHJhaWxpbmcgc2xhc2guCisjIEV4YW1wbGVzOiAiaHR0cDovL2V4YW1wbGUuY29tL21lZGlhLyIsICJodHRwOi8vbWVkaWEuZXhhbXBsZS5jb20vIgorTUVESUFfVVJMID0gJycKKworIyBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJlY3Rvcnkgc3RhdGljIGZpbGVzIHNob3VsZCBiZSBjb2xsZWN0ZWQgdG8uCisjIERvbid0IHB1dCBhbnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeSB5b3Vyc2VsZjsgc3RvcmUgeW91ciBzdGF0aWMgZmlsZXMKKyMgaW4gYXBwcycgInN0YXRpYy8iIHN1YmRpcmVjdG9yaWVzIGFuZCBpbiBTVEFUSUNGSUxFU19ESVJTLgorIyBFeGFtcGxlOiAiL3Zhci93d3cvZXhhbXBsZS5jb20vc3RhdGljLyIKK1NUQVRJQ19ST09UID0gJycKKworIyBVUkwgcHJlZml4IGZvciBzdGF0aWMgZmlsZXMuCisjIEV4YW1wbGU6ICJodHRwOi8vZXhhbXBsZS5jb20vc3RhdGljLyIsICJodHRwOi8vc3RhdGljLmV4YW1wbGUuY29tLyIKK1NUQVRJQ19VUkwgPSAnL3N0YXRpYy8nCisKKyMgQWRkaXRpb25hbCBsb2NhdGlvbnMgb2Ygc3RhdGljIGZpbGVzCitTVEFUSUNGSUxFU19ESVJTID0gKAorICAgICMgUHV0IHN0cmluZ3MgaGVyZSwgbGlrZSAiL2hvbWUvaHRtbC9zdGF0aWMiIG9yICJDOi93d3cvZGphbmdvL3N0YXRpYyIuCisgICAgIyBBbHdheXMgdXNlIGZvcndhcmQgc2xhc2hlcywgZXZlbiBvbiBXaW5kb3dzLgorICAgICMgRG9uJ3QgZm9yZ2V0IHRvIHVzZSBhYnNvbHV0ZSBwYXRocywgbm90IHJlbGF0aXZlIHBhdGhzLgorKQorCisjIExpc3Qgb2YgZmluZGVyIGNsYXNzZXMgdGhhdCBrbm93IGhvdyB0byBmaW5kIHN0YXRpYyBmaWxlcyBpbgorIyB2YXJpb3VzIGxvY2F0aW9ucy4KK1NUQVRJQ0ZJTEVTX0ZJTkRFUlMgPSAoCisgICAgJ2RqYW5nby5jb250cmliLnN0YXRpY2ZpbGVzLmZpbmRlcnMuRmlsZVN5c3RlbUZpbmRlcicsCisgICAgJ2RqYW5nby5jb250cmliLnN0YXRpY2ZpbGVzLmZpbmRlcnMuQXBwRGlyZWN0b3JpZXNGaW5kZXInLAorIyAgICAnZGphbmdvLmNvbnRyaWIuc3RhdGljZmlsZXMuZmluZGVycy5EZWZhdWx0U3RvcmFnZUZpbmRlcicsCispCisKKyMgTWFrZSB0aGlzIHVuaXF1ZSwgYW5kIGRvbid0IHNoYXJlIGl0IHdpdGggYW55Ym9keS4KK1NFQ1JFVF9LRVkgPSAnTk9UX1NVSVRBQkxFX0ZPUl9IT1NURURfREVQTE9ZTUVOVCcKKworIyBMaXN0IG9mIGNhbGxhYmxlcyB0aGF0IGtub3cgaG93IHRvIGltcG9ydCB0ZW1wbGF0ZXMgZnJvbSB2YXJpb3VzIHNvdXJjZXMuCitURU1QTEFURV9MT0FERVJTID0gKAorICAgICdkamFuZ28udGVtcGxhdGUubG9hZGVycy5maWxlc3lzdGVtLkxvYWRlcicsCisgICAgJ2RqYW5nby50ZW1wbGF0ZS5sb2FkZXJzLmFwcF9kaXJlY3Rvcmllcy5Mb2FkZXInLAorIyAgICAgJ2RqYW5nby50ZW1wbGF0ZS5sb2FkZXJzLmVnZ3MuTG9hZGVyJywKKykKKworTUlERExFV0FSRV9DTEFTU0VTID0gKAorICAgICdkamFuZ28ubWlkZGxld2FyZS5jb21tb24uQ29tbW9uTWlkZGxld2FyZScsCisgICAgJ2RqYW5nby5jb250cmliLnNlc3Npb25zLm1pZGRsZXdhcmUuU2Vzc2lvbk1pZGRsZXdhcmUnLAorICAgICdkamFuZ28ubWlkZGxld2FyZS5jc3JmLkNzcmZWaWV3TWlkZGxld2FyZScsCisgICAgJ2RqYW5nby5jb250cmliLmF1dGgubWlkZGxld2FyZS5BdXRoZW50aWNhdGlvbk1pZGRsZXdhcmUnLAorICAgICdkamFuZ28uY29udHJpYi5tZXNzYWdlcy5taWRkbGV3YXJlLk1lc3NhZ2VNaWRkbGV3YXJlJywKKyAgICAjIFVuY29tbWVudCB0aGUgbmV4dCBsaW5lIGZvciBzaW1wbGUgY2xpY2tqYWNraW5nIHByb3RlY3Rpb246CisgICAgIyAnZGphbmdvLm1pZGRsZXdhcmUuY2xpY2tqYWNraW5nLlhGcmFtZU9wdGlvbnNNaWRkbGV3YXJlJywKKykKKworQ0FDSEVTID0geworICAgICMgICAgICAgICdkZWZhdWx0JzogeworICAgICMgICAgICAgICAgICAnQkFDS0VORCc6ICdkamFuZ28uY29yZS5jYWNoZS5iYWNrZW5kcy5tZW1jYWNoZWQuTWVtY2FjaGVkQ2FjaGUnLAorICAgICMgICAgICAgICAgICAnTE9DQVRJT04nOiAnMTI3LjAuMC4xOjExMjExJywKKyAgICAjICAgICAgICB9LAorICAgICAgICAgICAnZGVmYXVsdCc6IHsKKyAgICAgICAgICAgICAgICdCQUNLRU5EJzogJ2RqYW5nby5jb3JlLmNhY2hlLmJhY2tlbmRzLmZpbGViYXNlZC5GaWxlQmFzZWRDYWNoZScsCisgICAgICAgICAgICAgICAnTE9DQVRJT04nOiAnL3RtcC9kamFuZ28tZGVmYXVsdC1jYWNoZScsCisgICAgICAgICAgICAgICAnVElNRU9VVCc6IDEsCisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisKK2Zyb20gb3MucGF0aCBpbXBvcnQgZGlybmFtZSBhcyBETgorU0lURV9ST09UPUROKEROKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKQorCitpbXBvcnQgc3VicHJvY2VzcworVE9BU1RFUl9CUkFOQ0ggPSBzdWJwcm9jZXNzLlBvcGVuKCdnaXQgYnJhbmNoIHwgZ3JlcCAiXiogIiB8IHRyIC1kICIqICInLCBjd2QgPSBTSVRFX1JPT1QsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KK1RPQVNURVJfUkVWSVNJT04gPSBzdWJwcm9jZXNzLlBvcGVuKCdnaXQgcmV2LXBhcnNlIEhFQUQgJywgY3dkID0gU0lURV9ST09ULCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisKK1JPT1RfVVJMQ09ORiA9ICd0b2FzdGVybWFpbi51cmxzJworCisjIFB5dGhvbiBkb3R0ZWQgcGF0aCB0byB0aGUgV1NHSSBhcHBsaWNhdGlvbiB1c2VkIGJ5IERqYW5nbydzIHJ1bnNlcnZlci4KK1dTR0lfQVBQTElDQVRJT04gPSAndG9hc3Rlcm1haW4ud3NnaS5hcHBsaWNhdGlvbicKKworVEVNUExBVEVfRElSUyA9ICgKKyAgICAjIFB1dCBzdHJpbmdzIGhlcmUsIGxpa2UgIi9ob21lL2h0bWwvZGphbmdvX3RlbXBsYXRlcyIgb3IgIkM6L3d3dy9kamFuZ28vdGVtcGxhdGVzIi4KKyAgICAjIEFsd2F5cyB1c2UgZm9yd2FyZCBzbGFzaGVzLCBldmVuIG9uIFdpbmRvd3MuCisgICAgIyBEb24ndCBmb3JnZXQgdG8gdXNlIGFic29sdXRlIHBhdGhzLCBub3QgcmVsYXRpdmUgcGF0aHMuCispCisKK1RFTVBMQVRFX0NPTlRFWFRfUFJPQ0VTU09SUyA9ICgnZGphbmdvLmNvbnRyaWIuYXV0aC5jb250ZXh0X3Byb2Nlc3NvcnMuYXV0aCcsCisgJ2RqYW5nby5jb3JlLmNvbnRleHRfcHJvY2Vzc29ycy5kZWJ1ZycsCisgJ2RqYW5nby5jb3JlLmNvbnRleHRfcHJvY2Vzc29ycy5pMThuJywKKyAnZGphbmdvLmNvcmUuY29udGV4dF9wcm9jZXNzb3JzLm1lZGlhJywKKyAnZGphbmdvLmNvcmUuY29udGV4dF9wcm9jZXNzb3JzLnN0YXRpYycsCisgJ2RqYW5nby5jb3JlLmNvbnRleHRfcHJvY2Vzc29ycy50eicsCisgJ2RqYW5nby5jb250cmliLm1lc3NhZ2VzLmNvbnRleHRfcHJvY2Vzc29ycy5tZXNzYWdlcycsCisgImRqYW5nby5jb3JlLmNvbnRleHRfcHJvY2Vzc29ycy5yZXF1ZXN0IiwKKyAndG9hc3Rlcmd1aS52aWV3cy5tYW5hZ2VkY29udGV4dHByb2Nlc3NvcicsCisgKQorCitJTlNUQUxMRURfQVBQUyA9ICgKKyAgICAnZGphbmdvLmNvbnRyaWIuYXV0aCcsCisgICAgJ2RqYW5nby5jb250cmliLmNvbnRlbnR0eXBlcycsCisgICAgJ2RqYW5nby5jb250cmliLm1lc3NhZ2VzJywKKyAgICAnZGphbmdvLmNvbnRyaWIuc2Vzc2lvbnMnLAorICAgICdkamFuZ28uY29udHJpYi5hZG1pbicsCisgICAgJ2RqYW5nby5jb250cmliLnN0YXRpY2ZpbGVzJywKKworICAgICMgVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gZW5hYmxlIGFkbWluIGRvY3VtZW50YXRpb246CisgICAgIyAnZGphbmdvLmNvbnRyaWIuYWRtaW5kb2NzJywKKyAgICAnZGphbmdvLmNvbnRyaWIuaHVtYW5pemUnLAorICAgICdibGRjb2xsZWN0b3InLAorICAgICd0b2FzdGVybWFpbicsCisgICAgJ3NvdXRoJywKKykKKworCitJTlRFUk5BTF9JUFMgPSBbJzEyNy4wLjAuMScsICcxOTIuMTY4LjIuMjgnXQorCisjIExvYWQgZGphbmdvLWZyZXNoIGlzIFRPQVNURVJfREVWRUwgaXMgc2V0LCBhbmQgdGhlIG1vZHVsZSBpcyBhdmFpbGFibGUKK0ZSRVNIX0VOQUJMRUQgPSBGYWxzZQoraWYgb3MuZW52aXJvbi5nZXQoJ1RPQVNURVJfREVWRUwnLCBOb25lKSBpcyBub3QgTm9uZToKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBmcmVzaAorICAgICAgICBNSURETEVXQVJFX0NMQVNTRVMgPSAoImZyZXNoLm1pZGRsZXdhcmUuRnJlc2hNaWRkbGV3YXJlIiwpICsgTUlERExFV0FSRV9DTEFTU0VTCisgICAgICAgIElOU1RBTExFRF9BUFBTID0gSU5TVEFMTEVEX0FQUFMgKyAoJ2ZyZXNoJywpCisgICAgICAgIEZSRVNIX0VOQUJMRUQgPSBUcnVlCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisKK0RFQlVHX1BBTkVMX0VOQUJMRUQgPSBGYWxzZQoraWYgb3MuZW52aXJvbi5nZXQoJ1RPQVNURVJfREVWRUwnLCBOb25lKSBpcyBub3QgTm9uZToKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBkZWJ1Z190b29sYmFyLCBkZWJ1Z19wYW5lbAorICAgICAgICBNSURETEVXQVJFX0NMQVNTRVMgPSAoJ2RlYnVnX3BhbmVsLm1pZGRsZXdhcmUuRGVidWdQYW5lbE1pZGRsZXdhcmUnLCkgKyBNSURETEVXQVJFX0NMQVNTRVMKKyAgICAgICAgI01JRERMRVdBUkVfQ0xBU1NFUyA9IE1JRERMRVdBUkVfQ0xBU1NFUyArICgnZGVidWdfdG9vbGJhci5taWRkbGV3YXJlLkRlYnVnVG9vbGJhck1pZGRsZXdhcmUnLCkKKyAgICAgICAgSU5TVEFMTEVEX0FQUFMgPSBJTlNUQUxMRURfQVBQUyArICgnZGVidWdfdG9vbGJhcicsJ2RlYnVnX3BhbmVsJywpCisgICAgICAgIERFQlVHX1BBTkVMX0VOQUJMRUQgPSBUcnVlCisKKyAgICAgICAgIyB0aGlzIGNhY2hlIGJhY2tlbmQgd2lsbCBiZSB1c2VkIGJ5IGRqYW5nby1kZWJ1Zy1wYW5lbAorICAgICAgICBDQUNIRVNbJ2RlYnVnLXBhbmVsJ10gPSB7CisgICAgICAgICAgICAgICAgJ0JBQ0tFTkQnOiAnZGphbmdvLmNvcmUuY2FjaGUuYmFja2VuZHMuZmlsZWJhc2VkLkZpbGVCYXNlZENhY2hlJywKKyAgICAgICAgICAgICAgICAnTE9DQVRJT04nOiAnL3Zhci90bXAvZGVidWctcGFuZWwtY2FjaGUnLAorICAgICAgICAgICAgICAgICdUSU1FT1VUJzogMzAwLAorICAgICAgICAgICAgICAgICdPUFRJT05TJzogeworICAgICAgICAgICAgICAgICAgICAnTUFYX0VOVFJJRVMnOiAyMDAKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworCisKK1NPVVRIX1RFU1RTX01JR1JBVEUgPSBGYWxzZQorCisKKyMgV2UgYXV0b21hdGljYWxseSBkZXRlY3QgYW5kIGluc3RhbGwgYXBwbGljYXRpb25zIGhlcmUgaWYKKyMgdGhleSBoYXZlIGEgJ21vZGVscy5weScgb3IgJ3ZpZXdzLnB5JyBmaWxlCitpbXBvcnQgb3MKK2N1cnJlbnRkaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCitmb3IgdCBpbiBvcy53YWxrKG9zLnBhdGguZGlybmFtZShjdXJyZW50ZGlyKSk6CisgICAgbW9kdWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodFswXSkKKyAgICAjaWYgd2UgaGF2ZSBhIHZpcnR1YWxlbnYgc2tpcCBpdCB0byBhdm9pZCBpbmNvcnJlY3QgaW1wb3J0cworICAgIGlmIG9zLmVudmlyb24uaGFzX2tleSgnVklSVFVBTF9FTlYnKSBhbmQgb3MuZW52aXJvblsnVklSVFVBTF9FTlYnXSBpbiB0WzBdOgorICAgICAgICBjb250aW51ZQorCisgICAgaWYgKCJ2aWV3cy5weSIgaW4gdFsyXSBvciAibW9kZWxzLnB5IiBpbiB0WzJdKSBhbmQgbm90IG1vZHVsZW5hbWUgaW4gSU5TVEFMTEVEX0FQUFM6CisgICAgICAgIElOU1RBTExFRF9BUFBTID0gSU5TVEFMTEVEX0FQUFMgKyAobW9kdWxlbmFtZSwpCisKKyMgQSBzYW1wbGUgbG9nZ2luZyBjb25maWd1cmF0aW9uLiBUaGUgb25seSB0YW5naWJsZSBsb2dnaW5nCisjIHBlcmZvcm1lZCBieSB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgdG8gc2VuZCBhbiBlbWFpbCB0bworIyB0aGUgc2l0ZSBhZG1pbnMgb24gZXZlcnkgSFRUUCA1MDAgZXJyb3Igd2hlbiBERUJVRz1GYWxzZS4KKyMgU2VlIGh0dHA6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuL2Rldi90b3BpY3MvbG9nZ2luZyBmb3IKKyMgbW9yZSBkZXRhaWxzIG9uIGhvdyB0byBjdXN0b21pemUgeW91ciBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uCitMT0dHSU5HID0geworICAgICd2ZXJzaW9uJzogMSwKKyAgICAnZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzJzogRmFsc2UsCisgICAgJ2ZpbHRlcnMnOiB7CisgICAgICAgICdyZXF1aXJlX2RlYnVnX2ZhbHNlJzogeworICAgICAgICAgICAgJygpJzogJ2RqYW5nby51dGlscy5sb2cuUmVxdWlyZURlYnVnRmFsc2UnCisgICAgICAgIH0KKyAgICB9LAorICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAnZGF0ZXRpbWUnOiB7CisgICAgICAgICAgICAnZm9ybWF0JzogJyUoYXNjdGltZSlzICUobGV2ZWxuYW1lKXMgJShtZXNzYWdlKXMnCisgICAgICAgIH0KKyAgICB9LAorICAgICdoYW5kbGVycyc6IHsKKyAgICAgICAgJ21haWxfYWRtaW5zJzogeworICAgICAgICAgICAgJ2xldmVsJzogJ0VSUk9SJywKKyAgICAgICAgICAgICdmaWx0ZXJzJzogWydyZXF1aXJlX2RlYnVnX2ZhbHNlJ10sCisgICAgICAgICAgICAnY2xhc3MnOiAnZGphbmdvLnV0aWxzLmxvZy5BZG1pbkVtYWlsSGFuZGxlcicKKyAgICAgICAgfSwKKyAgICAgICAgJ2NvbnNvbGUnOiB7CisgICAgICAgICAgICAnbGV2ZWwnOiAnREVCVUcnLAorICAgICAgICAgICAgJ2NsYXNzJzogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAnZm9ybWF0dGVyJzogJ2RhdGV0aW1lJywKKyAgICAgICAgfQorICAgIH0sCisgICAgJ2xvZ2dlcnMnOiB7CisgICAgICAgICd0b2FzdGVyJyA6IHsKKyAgICAgICAgICAgICdoYW5kbGVycyc6IFsnY29uc29sZSddLAorICAgICAgICAgICAgJ2xldmVsJzogJ0RFQlVHJywKKyAgICAgICAgfSwKKyAgICAgICAgJ2RqYW5nby5yZXF1ZXN0JzogeworICAgICAgICAgICAgJ2hhbmRsZXJzJzogWydjb25zb2xlJ10sCisgICAgICAgICAgICAnbGV2ZWwnOiAnV0FSTicsCisgICAgICAgICAgICAncHJvcGFnYXRlJzogVHJ1ZSwKKyAgICAgICAgfSwKKyAgICB9Cit9CisKK2lmIERFQlVHIGFuZCBTUUxfREVCVUc6CisgICAgTE9HR0lOR1snbG9nZ2VycyddWydkamFuZ28uZGIuYmFja2VuZHMnXSA9IHsKKyAgICAgICAgICAgICdsZXZlbCc6ICdERUJVRycsCisgICAgICAgICAgICAnaGFuZGxlcnMnOiBbJ2NvbnNvbGUnXSwKKyAgICAgICAgfQorCisKKyMgSWYgd2UncmUgdXNpbmcgc3FsaXRlLCB3ZSBuZWVkIHRvIHR3ZWFrIHRoZSBwZXJmb3JtYW5jZSBhIGJpdAorZnJvbSBkamFuZ28uZGIuYmFja2VuZHMuc2lnbmFscyBpbXBvcnQgY29ubmVjdGlvbl9jcmVhdGVkCitkZWYgYWN0aXZhdGVfc3luY2hyb25vdXNfb2ZmKHNlbmRlciwgY29ubmVjdGlvbiwgKiprd2FyZ3MpOgorICAgIGlmIGNvbm5lY3Rpb24udmVuZG9yID09ICdzcWxpdGUnOgorICAgICAgICBjdXJzb3IgPSBjb25uZWN0aW9uLmN1cnNvcigpCisgICAgICAgIGN1cnNvci5leGVjdXRlKCdQUkFHTUEgc3luY2hyb25vdXMgPSAwOycpCitjb25uZWN0aW9uX2NyZWF0ZWQuY29ubmVjdChhY3RpdmF0ZV9zeW5jaHJvbm91c19vZmYpCisjCisKKworY2xhc3MgSW52YWxpZFN0cmluZyhzdHIpOgorICAgIGRlZiBfX21vZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgZnJvbSBkamFuZ28udGVtcGxhdGUuYmFzZSBpbXBvcnQgVGVtcGxhdGVTeW50YXhFcnJvcgorICAgICAgICByYWlzZSBUZW1wbGF0ZVN5bnRheEVycm9yKAorICAgICAgICAgICAgIlVuZGVmaW5lZCB2YXJpYWJsZSBvciB1bmtub3duIHZhbHVlIGZvcjogXCIlc1wiIiAlIG90aGVyKQorCitURU1QTEFURV9TVFJJTkdfSUZfSU5WQUxJRCA9IEludmFsaWRTdHJpbmcoIiVzIikKKworaW1wb3J0IHN5cworc3lzLnBhdGguYXBwZW5kKAorICAgIG9zLnBhdGguam9pbigKKyAgICBvcy5wYXRoLmpvaW4oCisgICAgICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpLAorICAgICAgICAgICAgImNvbnRyaWIiKSwKKyAgICAgICAgICAgICJkamFuZ28tYWdncmVnYXRlLWlmLW1hc3RlciIpCisgICAgKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3VybHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vdXJscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjE1ODhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3VybHMucHkKQEAgLTAsMCArMSw5MSBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gZGphbmdvLmNvbmYudXJscyBpbXBvcnQgcGF0dGVybnMsIGluY2x1ZGUsIHVybAorZnJvbSBkamFuZ28udmlld3MuZ2VuZXJpYyBpbXBvcnQgUmVkaXJlY3RWaWV3Citmcm9tIGRqYW5nby52aWV3cy5kZWNvcmF0b3JzLmNhY2hlIGltcG9ydCBuZXZlcl9jYWNoZQorCitpbXBvcnQgbG9nZ2luZworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigidG9hc3RlciIpCisKKyMgVW5jb21tZW50IHRoZSBuZXh0IHR3byBsaW5lcyB0byBlbmFibGUgdGhlIGFkbWluOgorZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KK2FkbWluLmF1dG9kaXNjb3ZlcigpCisKK3VybHBhdHRlcm5zID0gcGF0dGVybnMoJycsCisKKyAgICAjIEV4YW1wbGVzOgorICAgICMgdXJsKHInXnRvYXN0ZXIvJywgaW5jbHVkZSgndG9hc3Rlci5mb28udXJscycpKSwKKworICAgICMgVW5jb21tZW50IHRoZSBhZG1pbi9kb2MgbGluZSBiZWxvdyB0byBlbmFibGUgYWRtaW4gZG9jdW1lbnRhdGlvbjoKKyAgICAjIHVybChyJ15hZG1pbi9kb2MvJywgaW5jbHVkZSgnZGphbmdvLmNvbnRyaWIuYWRtaW5kb2NzLnVybHMnKSksCisKKworICAgICMgVGhpcyBpcyBoZXJlIHRvIG1haW50YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIHdpbGwgYmUgZGVwcmVjYXRlZAorICAgICMgaW4gdGhlIGZ1dHVyZS4KKyAgICB1cmwocideb3JtL2V2ZW50ZmlsZSQnLCAnYmxkY29sbGVjdG9yLnZpZXdzLmV2ZW50ZmlsZScpLAorCisgICAgIyBpZiBubyBhcHBsaWNhdGlvbiBpcyBzZWxlY3RlZCwgd2UgaGF2ZSB0aGUgbWFnaWMgdG9hc3Rlcmd1aSBhcHAgaGVyZQorICAgIHVybChyJ14kJywgbmV2ZXJfY2FjaGUoUmVkaXJlY3RWaWV3LmFzX3ZpZXcodXJsPScvdG9hc3Rlcmd1aS8nKSkpLAorKQorCitpbXBvcnQgdG9hc3Rlcm1haW4uc2V0dGluZ3MKKworaWYgdG9hc3Rlcm1haW4uc2V0dGluZ3MuRlJFU0hfRU5BQkxFRDoKKyAgICB1cmxwYXR0ZXJucy5pbnNlcnQoMSwgdXJsKHInJywgaW5jbHVkZSgnZnJlc2gudXJscycpKSkKKyAgICAjbG9nZ2VyLmluZm8oIkVuYWJsZWQgZGphbmdvLWZyZXNoIGV4dGVuc2lvbiIpCisKK2lmIHRvYXN0ZXJtYWluLnNldHRpbmdzLkRFQlVHX1BBTkVMX0VOQUJMRUQ6CisgICAgaW1wb3J0IGRlYnVnX3Rvb2xiYXIKKyAgICB1cmxwYXR0ZXJucy5pbnNlcnQoMSwgdXJsKHInJywgaW5jbHVkZShkZWJ1Z190b29sYmFyLnVybHMpKSkKKyAgICAjbG9nZ2VyLmluZm8oIkVuYWJsZWQgZGphbmdvX3Rvb2xiYXIgZXh0ZW5zaW9uIikKKworCitpZiB0b2FzdGVybWFpbi5zZXR0aW5ncy5NQU5BR0VEOgorICAgIHVybHBhdHRlcm5zID0gWworICAgICAgICAjIFVuY29tbWVudCB0aGUgbmV4dCBsaW5lIHRvIGVuYWJsZSB0aGUgYWRtaW46CisgICAgICAgIHVybChyJ15hZG1pbi8nLCBpbmNsdWRlKGFkbWluLnNpdGUudXJscykpLAorICAgIF0gKyB1cmxwYXR0ZXJucworIyBBdXRvbWF0aWNhbGx5IGRpc2NvdmVyIHVybHMucHkgaW4gdmFyaW91cyBhcHBzLCBiZXNpZGUgb3VyIG93bgorIyBhbmQgbWFwIG1vZHVsZSBkaXJlY3RvcmllcyB0byB0aGUgcGF0dGVybnMKKworaW1wb3J0IG9zCitjdXJyZW50ZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorZm9yIHQgaW4gb3Mud2Fsayhvcy5wYXRoLmRpcm5hbWUoY3VycmVudGRpcikpOgorICAgICNpZiB3ZSBoYXZlIGEgdmlydHVhbGVudiBza2lwIGl0IHRvIGF2b2lkIGluY29ycmVjdCBpbXBvcnRzCisgICAgaWYgb3MuZW52aXJvbi5oYXNfa2V5KCdWSVJUVUFMX0VOVicpIGFuZCBvcy5lbnZpcm9uWydWSVJUVUFMX0VOViddIGluIHRbMF06CisgICAgICAgIGNvbnRpbnVlCisKKyAgICBpZiAidXJscy5weSIgaW4gdFsyXSBhbmQgdFswXSAhPSBjdXJyZW50ZGlyOgorICAgICAgICBtb2R1bGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZSh0WzBdKQorICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIHRoaXMgbW9kdWxlIG5hbWUgaW4KKyAgICAgICAgY29uZmxpY3QgPSBGYWxzZQorICAgICAgICBmb3IgcCBpbiB1cmxwYXR0ZXJuczoKKyAgICAgICAgICAgIGlmIHAucmVnZXgucGF0dGVybiA9PSAnXicgKyBtb2R1bGVuYW1lICsgJy8nOgorICAgICAgICAgICAgICAgIGNvbmZsaWN0ID0gVHJ1ZQorICAgICAgICBpZiBub3QgY29uZmxpY3Q6CisgICAgICAgICAgICB1cmxwYXR0ZXJucy5pbnNlcnQoMCwgdXJsKHInXicgKyBtb2R1bGVuYW1lICsgJy8nLCBpbmNsdWRlICggbW9kdWxlbmFtZSArICcudXJscycpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCJNb2R1bGUgXCclc1wnIGhhcyBhIHJlZ2V4cCBjb25mbGljdCwgd2FzIG5vdCBhZGRlZCB0byB0aGUgdXJscGF0dGVybnMiICUgbW9kdWxlbmFtZSkKKworZnJvbSBwcHJpbnQgaW1wb3J0IHBmb3JtYXQKKyNsb2dnZXIuZGVidWcoInVybHBhdHRlcm5zIGxpc3QgJXMiLCBwZm9ybWF0KHVybHBhdHRlcm5zKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi93c2dpLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3dzZ2kucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxYjMxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi93c2dpLnB5CkBAIC0wLDAgKzEsMzUgQEAKKyIiIgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKK1dTR0kgY29uZmlnIGZvciBUb2FzdGVyIHByb2plY3QuCisKK1RoaXMgbW9kdWxlIGNvbnRhaW5zIHRoZSBXU0dJIGFwcGxpY2F0aW9uIHVzZWQgYnkgRGphbmdvJ3MgZGV2ZWxvcG1lbnQgc2VydmVyCithbmQgYW55IHByb2R1Y3Rpb24gV1NHSSBkZXBsb3ltZW50cy4gSXQgc2hvdWxkIGV4cG9zZSBhIG1vZHVsZS1sZXZlbCB2YXJpYWJsZQorbmFtZWQgYGBhcHBsaWNhdGlvbmBgLiBEamFuZ28ncyBgYHJ1bnNlcnZlcmBgIGFuZCBgYHJ1bmZjZ2lgYCBjb21tYW5kcyBkaXNjb3ZlcgordGhpcyBhcHBsaWNhdGlvbiB2aWEgdGhlIGBgV1NHSV9BUFBMSUNBVElPTmBgIHNldHRpbmcuCisKK1VzdWFsbHkgeW91IHdpbGwgaGF2ZSB0aGUgc3RhbmRhcmQgRGphbmdvIFdTR0kgYXBwbGljYXRpb24gaGVyZSwgYnV0IGl0IGFsc28KK21pZ2h0IG1ha2Ugc2Vuc2UgdG8gcmVwbGFjZSB0aGUgd2hvbGUgRGphbmdvIFdTR0kgYXBwbGljYXRpb24gd2l0aCBhIGN1c3RvbSBvbmUKK3RoYXQgbGF0ZXIgZGVsZWdhdGVzIHRvIHRoZSBEamFuZ28gb25lLiBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGludHJvZHVjZSBXU0dJCittaWRkbGV3YXJlIGhlcmUsIG9yIGNvbWJpbmUgYSBEamFuZ28gYXBwbGljYXRpb24gd2l0aCBhbiBhcHBsaWNhdGlvbiBvZiBhbm90aGVyCitmcmFtZXdvcmsuCisKKyIiIgoraW1wb3J0IG9zCisKKyMgV2UgZGVmZXIgdG8gYSBESkFOR09fU0VUVElOR1NfTU9EVUxFIGFscmVhZHkgaW4gdGhlIGVudmlyb25tZW50LiBUaGlzIGJyZWFrcworIyBpZiBydW5uaW5nIG11bHRpcGxlIHNpdGVzIGluIHRoZSBzYW1lIG1vZF93c2dpIHByb2Nlc3MuIFRvIGZpeCB0aGlzLCB1c2UKKyMgbW9kX3dzZ2kgZGFlbW9uIG1vZGUgd2l0aCBlYWNoIHNpdGUgaW4gaXRzIG93biBkYWVtb24gcHJvY2Vzcywgb3IgdXNlCisjIG9zLmVudmlyb25bIkRKQU5HT19TRVRUSU5HU19NT0RVTEUiXSA9ICJUb2FzdGVyLnNldHRpbmdzIgorb3MuZW52aXJvbi5zZXRkZWZhdWx0KCJESkFOR09fU0VUVElOR1NfTU9EVUxFIiwgInRvYXN0ZXJtYWluLnNldHRpbmdzIikKKworIyBUaGlzIGFwcGxpY2F0aW9uIG9iamVjdCBpcyB1c2VkIGJ5IGFueSBXU0dJIHNlcnZlciBjb25maWd1cmVkIHRvIHVzZSB0aGlzCisjIGZpbGUuIFRoaXMgaW5jbHVkZXMgRGphbmdvJ3MgZGV2ZWxvcG1lbnQgc2VydmVyLCBpZiB0aGUgV1NHSV9BUFBMSUNBVElPTgorIyBzZXR0aW5nIHBvaW50cyBoZXJlLgorZnJvbSBkamFuZ28uY29yZS53c2dpIGltcG9ydCBnZXRfd3NnaV9hcHBsaWNhdGlvbgorYXBwbGljYXRpb24gPSBnZXRfd3NnaV9hcHBsaWNhdGlvbigpCisKKyMgQXBwbHkgV1NHSSBtaWRkbGV3YXJlIGhlcmUuCisjIGZyb20gaGVsbG93b3JsZC53c2dpIGltcG9ydCBIZWxsb1dvcmxkQXBwbGljYXRpb24KKyMgYXBwbGljYXRpb24gPSBIZWxsb1dvcmxkQXBwbGljYXRpb24oYXBwbGljYXRpb24pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvdG9hc3Rlci1yZXF1aXJlbWVudHMudHh0IGIveW9jdG8tcG9reS9iaXRiYWtlL3RvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWI1MjkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL3RvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dApAQCAtMCwwICsxLDQgQEAKK0RqYW5nbz09MS42CitTb3V0aD09MC44LjQKK2FyZ3BhcnNlPT0xLjIuMQord3NnaXJlZj09MC4xLjIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9NYWtlZmlsZSBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTk3YTQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL01ha2VmaWxlCkBAIC0wLDAgKzEsNDU4IEBACisjIFRoaXMgaXMgYSBzaW5nbGUgTWFrZWZpbGUgdG8gaGFuZGxlIGFsbCBnZW5lcmF0ZWQgWW9jdG8gUHJvamVjdCBkb2N1bWVudHMsCisjIHdoaWNoIGluY2x1ZGVzIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsIGFuZCB0aGUgVG9hc3RlciBVc2VyIE1hbnVhbC4KKyMgVGhlIE1ha2VmaWxlIG5lZWRzIHRvIGxpdmUgaW4gdGhlIGRvY3VtZW50cyBkaXJlY3RvcnkgYW5kIGFsbCBmaWd1cmVzIHVzZWQKKyMgaW4gYW55IG1hbnVhbHMgbXVzdCBiZSAuUE5HIGZpbGVzIGFuZCBsaXZlIGluIHRoZSBpbmRpdmlkdWFsIGJvb2sncyBmaWd1cmVzCisjIGRpcmVjdG9yeSBhcyB3ZWxsIGFzIGluIHRoZSBmaWd1cmVzIGRpcmVjdG9yeSBmb3IgdGhlIG1lZ2EtbWFudWFsLgorIworIyBTb21lIG1hbnVhbHMgYXJlIGF2YWlsYWJsZSBhcyBsaW5rZWQgaGVscCB0aHJvdWdoIHRoZSBFY2xpcHNlIGRldmVsb3BtZW50CisjIHN5c3RlbS4gIFRoZXNlIG1hbnVhbHMgYWxzbyBpbmNsdWRlIGFuICJlY2xpcHNlIiBzdWItZGlyZWN0b3J5IGFzIHBhcnQgb2YKKyMgdGhlIG1ha2UgcHJvY2Vzcy4KKyMKKyMgTm90ZSB0aGF0IHRoZSBmaWd1cmVzIGZvciB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwKKyMgZGlmZmVyIGRlcGVuZGluZyBvbiB0aGUgQlJBTkNIIGJlaW5nIGJ1aWx0LgorIworIyBUaGUgTWFrZWZpbGUgaGFzIHRoZXNlIHRhcmdldHM6CisjICAgIGFsbDogICAgICAgSWYgeW91IGxlYXZlIG9mZiB0aGUgdGFyZ2V0IHRoZW4gImFsbCIgaXMgaW1wbGllZC4KKyMgICAgICAgICAgICAgICBZb3Ugd2lsbCBnZW5lcmF0ZSBIVE1MLCBlY2xpcHNlIGhlbHAgKGlmIGFwcGxpY2FibGUpLAorIyAgICAgICAgICAgICAgIGFuZCBhIHRhcmJhbGwgb2YgZmlsZXMuCisjCisjICAgIHBkZjoJZ2VuZXJhdGVzIGEgUERGIHZlcnNpb24gb2YgYSBtYW51YWwuICBOb3QgdmFsaWQgZm9yIHRoZQorIwkJUXVpY2sgU3RhcnQgb3IgdGhlIG1lZ2EtbWFudWFsIChzaW5nbGUsIGxhcmdlIEhUTUwgZmlsZQorIwkJY29tcHJpc2VkIG9mIGFsbCBZb2N0byBQcm9qZWN0IG1hbnVhbHMpLgorIyAgICBodG1sOglnZW5lcmF0ZXMgYW4gSFRNTCB2ZXJzaW9uIG9mIGEgbWFudWFsLgorIyAgICBlY2xpcHNlOglnZW5lcmF0ZXMgYW4gSFRNTCB2ZXJzaW9uIG9mIGEgbWFudWFsIHRoYXQgY2FuIGJlIHVzZWQgYXMKKyMJCWVjbGlwc2UgaGVscCAoaW5jbHVkaW5nIG5lY2Vzc2FyeSBtZXRhZGF0YSBmaWxlcykuCisjICAgIHRhcmJhbGw6CWNyZWF0ZXMgYSB0YXJiYWxsIGZvciB0aGUgZG9jIGZpbGVzLgorIyAgICB2YWxpZGF0ZToJdmFsaWRhdGVzCisjICAgIHB1Ymxpc2g6CXB1c2hlcyBnZW5lcmF0ZWQgZmlsZXMgdG8gdGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZQorIyAgICBjbGVhbjoJcmVtb3ZlcyBmaWxlcworIworIyBUaGUgTWFrZWZpbGUgY2FuIGdlbmVyYXRlIGFuIEhUTUwgYW5kIFBERiB2ZXJzaW9uIG9mIGV2ZXJ5IGRvY3VtZW50IGV4Y2VwdCB0aGUKKyMgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBhbmQgdGhlIHNpbmdsZSwgSFRNTCBtZWdhLW1hbnVhbCwgd2hpY2ggaXMgY29tcHJpc2VkCisjIG9mIGFsbCB0aGUgaW5kaXZpZHVhbCBZb2N0byBQcm9qZWN0IG1hbnVhbHMuICBZb3UgY2FuIGdlbmVyYXRlIHRoZXNlIHR3byBtYW51YWxzCisjIGluIEhUTUwgZm9ybSBvbmx5LiAgVGhlIHZhcmlhYmxlIERPQyBpbmRpY2F0ZXMgdGhlIGZvbGRlciBuYW1lIGZvciBhIGdpdmVuIG1hbnVhbC4KKyMgVGhlIHZhcmlhYmxlIFZFUiByZXByZXNlbnRzIHRoZSBkaXN0cm8gdmVyc2lvbiBvZiB0aGUgWW9jdG8gUmVsZWFzZSBmb3Igd2hpY2ggdGhlCisjIG1hbnVhbHMgYXJlIGJlaW5nIGdlbmVyYXRlZC4gIFRoZSB2YXJpYWJsZSBCUkFOQ0ggaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUKKyMgYnJhbmNoIChlZGlzb24gb3IgZGVuemlsKSBhbmQgaXMgdXNlZCBvbmx5IHdoZW4gRE9DPWRldi1tYW51YWwgb3IKKyMgRE9DPW1lZ2EtbWFudWFsLiAgSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgQlJBTkNILCB0aGUgZGVmYXVsdCBicmFuY2ggdXNlZAorIyB3aWxsIGJlIGZvciB0aGUgbGF0ZXN0IFlvY3RvIFByb2plY3QgcmVsZWFzZS4gIElmIHlvdSBidWlsZCBmb3IgZWl0aGVyCisjIGVkaXNvbiBvciBkZW56aWwsIHlvdSBtdXN0IHVzZSBCUkFOQ0guIFlvdSBkbyBub3QgbmVlZCB0byB1c2UgQlJBTkNIIGZvcgorIyBhbnkgcmVsZWFzZSBiZXlvbmQgZGVuemlsLgorIworIyBUbyBidWlsZCBhIG1hbnVhbCwgeW91IG11c3QgaW52b2tlIE1ha2VmaWxlIHdpdGggdGhlIERPQyBhcmd1bWVudC4gIElmIHlvdQorIyBhcmUgZ29pbmcgdG8gcHVibGlzaCB0aGUgbWFudWFsLCB0aGVuIHlvdSBtdXN0IGludm9rZSBNYWtlZmlsZSB3aXRoIGJvdGggdGhlCisjIERPQyBhbmQgdGhlIFZFUiBhcmd1bWVudC4gIEZ1cnRoZXJtb3JlLCBpZiB5b3UgYXJlIGJ1aWxkaW5nIG9yIHB1Ymxpc2hpbmcKKyMgdGhlIGVkaXNvbiBvciBkZW56aWwgdmVyc2lvbnMgb2YgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIG9yCisjIHRoZSBtZWdhLW1hbnVhbCwgeW91IG11c3QgYWxzbyB1c2UgdGhlIEJSQU5DSCBhcmd1bWVudC4KKyMKKyMgRXhhbXBsZXM6CisjCisjICAgICBtYWtlIERPQz1ic3AtZ3VpZGUKKyMgICAgIG1ha2UgaHRtbCBET0M9eW9jdG8tcHJvamVjdC1xcworIyAgICAgbWFrZSBwZGYgRE9DPXJlZi1tYW51YWwKKyMgICAgIG1ha2UgRE9DPWRldi1tYW51YWwgQlJBTkNIPWVkaXNvbgorIyAgICAgbWFrZSBET0M9bWVnYS1tYW51YWwgQlJBTkNIPWRlbnppbAorIworIyBUaGUgZmlyc3QgZXhhbXBsZSBnZW5lcmF0ZXMgdGhlIEhUTUwgYW5kIEVjbGlwc2UgaGVscCB2ZXJzaW9ucyBvZiB0aGUgQlNQIEd1aWRlLgorIyBUaGUgc2Vjb25kIGV4YW1wbGUgZ2VuZXJhdGVzIHRoZSBIVE1MIHZlcnNpb24gb25seSBvZiB0aGUgUXVpY2sgU3RhcnQuICBOb3RlCisjIHRoYXQgdGhlIFF1aWNrIFN0YXJ0IG9ubHkgaGFzIGFuIEhUTUwgdmVyc2lvbiBhdmFpbGFibGUuICBTbywgdGhlCisjICdtYWtlIERPQz15b2N0by1wcm9qZWN0LXFzJyBjb21tYW5kIHdvdWxkIGJlIGVxdWl2YWxlbnQuIFRoZSB0aGlyZCBleGFtcGxlCisjIGdlbmVyYXRlcyBqdXN0IHRoZSBQREYgdmVyc2lvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorIyBUaGUgZm91cnRoIGV4YW1wbGUgZ2VuZXJhdGVzIHRoZSBIVE1MICdlZGlzb24nIHZlcnNpb24gYW5kIChpZiBhdmFpbGFibGUpCisjIHRoZSBFY2xpcHNlIGhlbHAgdmVyc2lvbiBvZiB0aGUgWVAgRGV2ZWxvcG1lbnQgTWFudWFsLiAgVGhlIGxhc3QgZXhhbXBsZQorIyBnZW5lcmF0ZXMgdGhlIEhUTUwgdmVyc2lvbiBvZiB0aGUgbWVnYS1tYW51YWwgYW5kIHVzZXMgdGhlICdkZW56aWwnCisjIGJyYW5jaCB3aGVuIGNob29zaW5nIGZpZ3VyZXMgZm9yIHRoZSB0YXJiYWxsIG9mIGZpZ3VyZXMuICBBbnkgZXhhbXBsZSB0aGF0IGRvZXMKKyMgbm90IHVzZSB0aGUgQlJBTkNIIGFyZ3VtZW50IGJ1aWxkcyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBtYW51YWwgc2V0LgorIworIyBUaGUgcHVibGlzaCB0YXJnZXQgcHVzaGVzIHRoZSBnZW5lcmF0ZWQgbWFudWFscyB0byB0aGUgWW9jdG8gUHJvamVjdAorIyB3ZWJzaXRlLiAgVW5sZXNzIHlvdSBhcmUgYSBkZXZlbG9wZXIgb24gdGhlIFlQIHRlYW0sIHlvdSB3aWxsIG5vdCBzdWNjZWVkIGluCisjIHB1c2hpbmcgbWFudWFscyB0byB0aGlzIHNlcnZlci4gIEFsbCBmaWxlcyBuZWVkZWQgZm9yIHRoZSBtYW51YWwncyBIVE1MIGZvcm0gYXJlCisjIHB1c2hlZCBhcyB3ZWxsIGFzIGFwcGxpY2FibGUgRWNsaXBzZSB2ZXJzaW9ucy4KKyMKKyMgRXhhbXBsZXM6CisjCisjICAgIG1ha2UgcHVibGlzaCBET0M9YnNwLWd1aWRlIFZFUj0xLjcKKyMgICAgbWFrZSBwdWJsaXNoIERPQz1hZHQtbWFudWFsIFZFUj0xLjYKKyMgICAgbWFrZSBwdWJsaXNoIERPQz1kZXYtbWFudWFsIFZFUj0xLjEuMSBCUkFOQ0g9ZWRpc29uCisjICAgIG1ha2UgcHVibGlzaCBET0M9ZGV2LW1hbnVhbCBWRVI9MS4yIEJSQU5DSD1kZW56aWwKKyMKKyMgVGhlIGZpcnN0IGV4YW1wbGUgcHVibGlzaGVzIHRoZSAxLjcgdmVyc2lvbiBvZiBib3RoIHRoZSBQREYgYW5kIEhUTUwgdmVyc2lvbnMgb2YKKyMgdGhlIEJTUCBHdWlkZS4gIFRoZSBzZWNvbmQgZXhhbXBsZSBwdWJsaXNoZXMgdGhlIDEuNiB2ZXJzaW9uIG9mIGJvdGggdGhlIFBERiBhbmQKKyMgSFRNTCB2ZXJzaW9ucyBvZiB0aGUgQURUIE1hbnVhbC4gVGhlIHRoaXJkIGV4YW1wbGUgcHVibGlzaGVzIHRoZSAxLjEuMSB2ZXJzaW9uIG9mCisjIHRoZSBQREYgYW5kIEhUTUwgWVAgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciB0aGUgJ2VkaXNvbicgYnJhbmNoLiAgVGhlIGZvdXJ0aCBleGFtcGxlCisjIHB1Ymxpc2hlcyB0aGUgMS4yIHZlcnNpb24gb2YgdGhlIFBERiBhbmQgSFRNTCBZUCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIHRoZQorIyAnZGVuemlsJyBicmFuY2guCisjCisKK2lmZXEgKCQoRE9DKSxic3AtZ3VpZGUpCitYU0xUT1BUUyA9IC0teGluY2x1ZGUKK0FMTFBSRVEgPSBodG1sIGVjbGlwc2UgdGFyYmFsbAorVEFSRklMRVMgPSBic3Atc3R5bGUuY3NzIGJzcC1ndWlkZS5odG1sIGZpZ3VyZXMvYnNwLXRpdGxlLnBuZyBcCisgICAgICAgICAgIGVjbGlwc2UKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwgJChET0MpL2VjbGlwc2UKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCisKK2VuZGlmCisKK2lmZXEgKCQoRE9DKSxkZXYtbWFudWFsKQorWFNMVE9QVFMgPSAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCBlY2xpcHNlIHRhcmJhbGwKKyMKKyMgTm90ZSB0aGF0IHRoZSB0YXJmaWxlIG1pZ2h0IHByb2R1Y2UgdGhlICJDYW5ub3Qgc3RhdDogTm8gc3VjaCBmaWxlIG9yCisjIGRpcmVjdG9yeSIgZXJyb3IgbWVzc2FnZSBmb3IgLlBORyBmaWxlcyB0aGF0IGFyZSBub3QgcHJlc2VudCB3aGVuIGJ1aWxkaW5nCisjIGEgcGFydGljdWxhciBicmFuY2guICBUaGUgbGlzdCBvZiBmaWxlcyBpcyBhbGwtaW5jbHVzaXZlIGZvciBhbGwgYnJhbmNoZXMuCisjIE5vdGUsIGlmIHlvdSBkb24ndCBwcm92aWRlIGEgQlJBTkNIIG9wdGlvbiwgaXQgZGVmYXVsdHMgdG8gdGhlIGxhdGVzdCBzdHVmZi4KKyMgVGhpcyB3b3VsZCBiZSBhcHByb3ByaWF0ZSBmb3IgIm1hc3RlciIgYnJhbmNoLgorIworCisJaWZlcSAoJChCUkFOQ0gpLGVkaXNvbikKK1RBUkZJTEVTID0gZGV2LXN0eWxlLmNzcyBkZXYtbWFudWFsLmh0bWwgXAorICAgICAgICAgICBmaWd1cmVzL2FwcC1kZXYtZmxvdy5wbmcgZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9kZXYtdGl0bGUucG5nIGZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZyBmaWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2tlcm5lbC1leGFtcGxlLXJlcG9zLWVkaXNvbi5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0xLnBuZyBmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTMtZWRpc29uLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyBmaWd1cmVzL3lwLWRvd25sb2FkLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvd2lwLnBuZworCWVsc2UgaWZlcSAoJChCUkFOQ0gpLGRlbnppbCkKK1RBUkZJTEVTID0gZGV2LXN0eWxlLmNzcyBkZXYtbWFudWFsLmh0bWwgXAorICAgICAgICAgICBmaWd1cmVzL2FwcC1kZXYtZmxvdy5wbmcgZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9kZXYtdGl0bGUucG5nIGZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZyBmaWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2tlcm5lbC1leGFtcGxlLXJlcG9zLWRlbnppbC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0xLnBuZyBmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTMtZGVuemlsLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyBmaWd1cmVzL3lwLWRvd25sb2FkLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvd2lwLnBuZworICAgICAgICBlbHNlCitUQVJGSUxFUyA9IGRldi1zdHlsZS5jc3MgZGV2LW1hbnVhbC5odG1sIFwKKyAgICAgICAgICAgZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nIGZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvZGV2LXRpdGxlLnBuZyBmaWd1cmVzL2dpdC13b3JrZmxvdy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmcgZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi1nZW5lcmljLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyBmaWd1cmVzL3lwLWRvd25sb2FkLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcmVjaXBlLXdvcmtmbG93LnBuZyBmaWd1cmVzL2J1aWxkLXdvcmtzcGFjZS1kaXJlY3RvcnkucG5nIFwKKyAgICAgICAgICAgZWNsaXBzZQorCWVuZGlmCisKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwgJChET0MpL2VjbGlwc2UKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCisKK2VuZGlmCisKK2lmZXEgKCQoRE9DKSx5b2N0by1wcm9qZWN0LXFzKQorWFNMVE9QVFMgPSAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCBlY2xpcHNlIHRhcmJhbGwKK1RBUkZJTEVTID0geW9jdG8tcHJvamVjdC1xcy5odG1sIHFzLXN0eWxlLmNzcyBmaWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMveW9jdG8tcHJvamVjdC10cmFuc3AucG5nIFwKKyAgICAgICAgICAgZWNsaXBzZQorTUFOVUFMUyA9ICQoRE9DKS8kKERPQykuaHRtbCAkKERPQykvZWNsaXBzZQorRklHVVJFUyA9IGZpZ3VyZXMKK1NUWUxFU0hFRVQgPSAkKERPQykvKi5jc3MKK2VuZGlmCisKK2lmZXEgKCQoRE9DKSxtZWdhLW1hbnVhbCkKK1hTTFRPUFRTID0gLS1zdHJpbmdwYXJhbSBodG1sLnN0eWxlc2hlZXQgbWVnYS1zdHlsZS5jc3MgXAorICAgICAgICAgICAtLXN0cmluZ3BhcmFtICBjaGFwdGVyLmF1dG9sYWJlbCAxIFwKKyAgICAgICAgICAgLS1zdHJpbmdwYXJhbSAgc2VjdGlvbi5hdXRvbGFiZWwgMSBcCisgICAgICAgICAgIC0tc3RyaW5ncGFyYW0gIHNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIDEgXAorICAgICAgICAgICAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCB0YXJiYWxsCisKKwlpZmVxICgkKEJSQU5DSCksZWRpc29uKQorVEFSRklMRVMgPSBtZWdhLW1hbnVhbC5odG1sIG1lZ2Etc3R5bGUuY3NzIGZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQucG5nIFwKKyAgICAgICAgZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcgIFwKKwlmaWd1cmVzL3VzaW5nLWEtcHJlLWJ1aWx0LWltYWdlLnBuZyBcCisJZmlndXJlcy9wb2t5LXRpdGxlLnBuZyBcCisJZmlndXJlcy9hZHQtdGl0bGUucG5nIGZpZ3VyZXMvYnNwLXRpdGxlLnBuZyBcCisJZmlndXJlcy9rZXJuZWwtdGl0bGUucG5nIGZpZ3VyZXMva2VybmVsLWFyY2hpdGVjdHVyZS1vdmVydmlldy5wbmcgXAorCWZpZ3VyZXMvYXBwLWRldi1mbG93LnBuZyBmaWd1cmVzL2JzcC1kZXYtZmxvdy5wbmcgXAorICAgICAgICBmaWd1cmVzL2Rldi10aXRsZS5wbmcgZmlndXJlcy9naXQtd29ya2Zsb3cucG5nIFwKKyAgICAgICAgZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nIGZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZyBcCisJZmlndXJlcy9rZXJuZWwtZXhhbXBsZS1yZXBvcy1lZGlzb24ucG5nIFwKKwlmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0xLnBuZyBmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLnBuZyBcCisJZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMy1lZGlzb24ucG5nIFwKKwlmaWd1cmVzL3NvdXJjZS1yZXBvcy5wbmcgZmlndXJlcy95cC1kb3dubG9hZC5wbmcgXAorCWZpZ3VyZXMvd2lwLnBuZworCWVsc2UgaWZlcSAoJChCUkFOQ0gpLGRlbnppbCkKK1RBUkZJTEVTID0gbWVnYS1tYW51YWwuaHRtbCBtZWdhLXN0eWxlLmNzcyBmaWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZyBcCisgICAgICAgIGZpZ3VyZXMvYnVpbGRpbmctYW4taW1hZ2UucG5nICBcCisJZmlndXJlcy91c2luZy1hLXByZS1idWlsdC1pbWFnZS5wbmcgXAorCWZpZ3VyZXMvcG9reS10aXRsZS5wbmcgXAorCWZpZ3VyZXMvYWR0LXRpdGxlLnBuZyBmaWd1cmVzL2JzcC10aXRsZS5wbmcgXAorCWZpZ3VyZXMva2VybmVsLXRpdGxlLnBuZyBmaWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nIFwKKwlmaWd1cmVzL2FwcC1kZXYtZmxvdy5wbmcgZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nIFwKKyAgICAgICAgZmlndXJlcy9kZXYtdGl0bGUucG5nIGZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZyBcCisgICAgICAgIGZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZyBmaWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcgXAorCWZpZ3VyZXMva2VybmVsLWV4YW1wbGUtcmVwb3MtZGVuemlsLnBuZyBcCisJZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi5wbmcgXAorCWZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTMtZGVuemlsLnBuZyBcCisJZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nIGZpZ3VyZXMveXAtZG93bmxvYWQucG5nIFwKKwlmaWd1cmVzL3dpcC5wbmcKKyAgICAgICAgZWxzZQorVEFSRklMRVMgPSBtZWdhLW1hbnVhbC5odG1sIG1lZ2Etc3R5bGUuY3NzIGZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQucG5nIFwKKyAgICAgICAgZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcgIFwKKwlmaWd1cmVzL3VzaW5nLWEtcHJlLWJ1aWx0LWltYWdlLnBuZyBcCisJZmlndXJlcy9wb2t5LXRpdGxlLnBuZyBmaWd1cmVzL2J1aWxkaGlzdG9yeS5wbmcgXAorICAgICAgICBmaWd1cmVzL2J1aWxkaGlzdG9yeS13ZWIucG5nIFwKKwlmaWd1cmVzL2FkdC10aXRsZS5wbmcgZmlndXJlcy9ic3AtdGl0bGUucG5nIFwKKwlmaWd1cmVzL2tlcm5lbC1kZXYtdGl0bGUucG5nIGZpZ3VyZXMva2VybmVsLWFyY2hpdGVjdHVyZS1vdmVydmlldy5wbmcgXAorCWZpZ3VyZXMvYXBwLWRldi1mbG93LnBuZyBmaWd1cmVzL2JzcC1kZXYtZmxvdy5wbmcgXAorICAgICAgICBmaWd1cmVzL2Rldi10aXRsZS5wbmcgXAorCWZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZyBmaWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmcgXAorICAgICAgICBmaWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcgXAorCWZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nIGZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmcgXAorCWZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyBmaWd1cmVzL3lwLWRvd25sb2FkLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcHJvZmlsZS10aXRsZS5wbmcgZmlndXJlcy9rZXJuZWxzaGFyay1hbGwucG5nIFwKKyAgICAgICAgZmlndXJlcy9rZXJuZWxzaGFyay1jaG9vc2UtZXZlbnRzLnBuZyBcCisgICAgICAgIGZpZ3VyZXMva2VybmVsc2hhcmstaTkxNS1kaXNwbGF5LnBuZyBcCisgICAgICAgIGZpZ3VyZXMva2VybmVsc2hhcmstb3V0cHV0LWRpc3BsYXkucG5nIGZpZ3VyZXMvbHR0bmdtYWluMC5wbmcgXAorICAgICAgICBmaWd1cmVzL29wcm9maWxldWktYnVzeWJveC5wbmcgZmlndXJlcy9vcHJvZmlsZXVpLWNvcHktdG8tdXNlci5wbmcgXAorICAgICAgICBmaWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nIGZpZ3VyZXMvb3Byb2ZpbGV1aS1wcm9jZXNzZXMucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXByb2JlLWRvX2ZvcmstcHJvZmlsZS5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLnBuZyBmaWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtYW5ub3RhdGUtbWVudS5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLXVkaGNwYy5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRlYnVnaW5mby5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20tbWVudS5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWZsYXQtc3RyaXBwZWQucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LWZyb20tdXNlci1leHBhbmRlZC1zdHJpcHBlZC5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQtdW5yZXNvbHZlZC1oaWRkZW4ucG5nIFwKKyAgICAgICAgZmlndXJlcy9weWJvb3RjaGFydGd1aS1saW51eC15b2N0by5wbmcgXAorICAgICAgICBmaWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0tbm9zdHJpcC5wbmcgXAorICAgICAgICBmaWd1cmVzL3NjaGVkLXdha2V1cC1wcm9maWxlLnBuZyBmaWd1cmVzL3N5c3Byb2YtY2FsbGVycy5wbmcgXAorICAgICAgICBmaWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nIGZpZ3VyZXMvc3lzcHJvZi1jb3B5LXRvLXVzZXIucG5nIFwKKyAgICAgICAgZmlndXJlcy9jcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW5zLnBuZyBcCisJZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC1yZWYucG5nIGZpZ3VyZXMvdXNlci1jb25maWd1cmF0aW9uLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvc291cmNlLWlucHV0LnBuZyBmaWd1cmVzL3BhY2thZ2UtZmVlZHMucG5nIFwKKyAgICAgICAgZmlndXJlcy9sYXllci1pbnB1dC5wbmcgZmlndXJlcy9pbWFnZXMucG5nIGZpZ3VyZXMvc2RrLnBuZyBcCisJZmlndXJlcy9zb3VyY2UtZmV0Y2hpbmcucG5nIGZpZ3VyZXMvcGF0Y2hpbmcucG5nIFwKKyAgICAgICAgZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmcgXAorCWZpZ3VyZXMvYW5hbHlzaXMtZm9yLXBhY2thZ2Utc3BsaXR0aW5nLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvaW1hZ2UtZ2VuZXJhdGlvbi5wbmcgXAorCWZpZ3VyZXMvc2RrLWdlbmVyYXRpb24ucG5nIGZpZ3VyZXMvcmVjaXBlLXdvcmtmbG93LnBuZyBcCisJZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZyBmaWd1cmVzL21lZ2EtdGl0bGUucG5nIFwKKwlmaWd1cmVzL3RvYXN0ZXItdGl0bGUucG5nIGZpZ3VyZXMvaG9zdGVkLXNlcnZpY2UucG5nIFwKKwlmaWd1cmVzL3NpbXBsZS1jb25maWd1cmF0aW9uLnBuZworCWVuZGlmCisKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCisKK2VuZGlmCisKK2lmZXEgKCQoRE9DKSxyZWYtbWFudWFsKQorWFNMVE9QVFMgPSAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCBlY2xpcHNlIHRhcmJhbGwKK1RBUkZJTEVTID0gcmVmLW1hbnVhbC5odG1sIHJlZi1zdHlsZS5jc3MgZmlndXJlcy9wb2t5LXRpdGxlLnBuZyBcCisJZmlndXJlcy9idWlsZGhpc3RvcnkucG5nIGZpZ3VyZXMvYnVpbGRoaXN0b3J5LXdlYi5wbmcgZWNsaXBzZSBcCisgICAgICAgIGZpZ3VyZXMvY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy5wbmcgZmlndXJlcy9sYXllci1pbnB1dC5wbmcgXAorCWZpZ3VyZXMvcGFja2FnZS1mZWVkcy5wbmcgZmlndXJlcy9zb3VyY2UtaW5wdXQucG5nIFwKKwlmaWd1cmVzL3VzZXItY29uZmlndXJhdGlvbi5wbmcgZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC1yZWYucG5nIFwKKwlmaWd1cmVzL2ltYWdlcy5wbmcgZmlndXJlcy9zZGsucG5nIGZpZ3VyZXMvc291cmNlLWZldGNoaW5nLnBuZyBcCisJZmlndXJlcy9wYXRjaGluZy5wbmcgZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmcgXAorCWZpZ3VyZXMvYW5hbHlzaXMtZm9yLXBhY2thZ2Utc3BsaXR0aW5nLnBuZyBmaWd1cmVzL2ltYWdlLWdlbmVyYXRpb24ucG5nIFwKKwlmaWd1cmVzL3Nkay1nZW5lcmF0aW9uLnBuZyBmaWd1cmVzL2J1aWxkaW5nLWFuLWltYWdlLnBuZworTUFOVUFMUyA9ICQoRE9DKS8kKERPQykuaHRtbCAkKERPQykvZWNsaXBzZQorRklHVVJFUyA9IGZpZ3VyZXMKK1NUWUxFU0hFRVQgPSAkKERPQykvKi5jc3MKK2VuZGlmCisKKworaWZlcSAoJChET0MpLGFkdC1tYW51YWwpCitYU0xUT1BUUyA9IC0teGluY2x1ZGUKK0FMTFBSRVEgPSBodG1sIGVjbGlwc2UgdGFyYmFsbAorVEFSRklMRVMgPSBhZHQtbWFudWFsLmh0bWwgYWR0LXN0eWxlLmNzcyBmaWd1cmVzL2FkdC10aXRsZS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3VzaW5nLWEtcHJlLWJ1aWx0LWltYWdlLnBuZyBcCisgICAgICAgICAgIGVjbGlwc2UKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwgJChET0MpL2VjbGlwc2UKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCitlbmRpZgorCitpZmVxICgkKERPQykscHJvZmlsZS1tYW51YWwpCitYU0xUT1BUUyA9IC0teGluY2x1ZGUKK0FMTFBSRVEgPSBodG1sIGVjbGlwc2UgdGFyYmFsbAorVEFSRklMRVMgPSBwcm9maWxlLW1hbnVhbC5odG1sIHByb2ZpbGUtbWFudWFsLXN0eWxlLmNzcyBcCisgICAgICAgICAgIGZpZ3VyZXMvcHJvZmlsZS10aXRsZS5wbmcgZmlndXJlcy9rZXJuZWxzaGFyay1hbGwucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9rZXJuZWxzaGFyay1jaG9vc2UtZXZlbnRzLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMva2VybmVsc2hhcmstaTkxNS1kaXNwbGF5LnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMva2VybmVsc2hhcmstb3V0cHV0LWRpc3BsYXkucG5nIGZpZ3VyZXMvbHR0bmdtYWluMC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL29wcm9maWxldWktYnVzeWJveC5wbmcgZmlndXJlcy9vcHJvZmlsZXVpLWNvcHktdG8tdXNlci5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nIGZpZ3VyZXMvb3Byb2ZpbGV1aS1wcm9jZXNzZXMucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXByb2JlLWRvX2ZvcmstcHJvZmlsZS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLnBuZyBmaWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtYW5ub3RhdGUtbWVudS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLXVkaGNwYy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRlYnVnaW5mby5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20tbWVudS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWZsYXQtc3RyaXBwZWQucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LWZyb20tdXNlci1leHBhbmRlZC1zdHJpcHBlZC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQtdW5yZXNvbHZlZC1oaWRkZW4ucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9weWJvb3RjaGFydGd1aS1saW51eC15b2N0by5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0tbm9zdHJpcC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3NjaGVkLXdha2V1cC1wcm9maWxlLnBuZyBmaWd1cmVzL3N5c3Byb2YtY2FsbGVycy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nIGZpZ3VyZXMvc3lzcHJvZi1jb3B5LXRvLXVzZXIucG5nIFwKKyAgICAgICAgICAgZWNsaXBzZQorTUFOVUFMUyA9ICQoRE9DKS8kKERPQykuaHRtbCAkKERPQykvZWNsaXBzZQorRklHVVJFUyA9IGZpZ3VyZXMKK1NUWUxFU0hFRVQgPSAkKERPQykvKi5jc3MKK2VuZGlmCisKK2lmZXEgKCQoRE9DKSxrZXJuZWwtZGV2KQorWFNMVE9QVFMgPSAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCBlY2xpcHNlIHRhcmJhbGwKK1RBUkZJTEVTID0ga2VybmVsLWRldi5odG1sIGtlcm5lbC1kZXYtc3R5bGUuY3NzIFwKKyAgICAgICAgICAgZmlndXJlcy9rZXJuZWwtZGV2LXRpdGxlLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMva2VybmVsLWFyY2hpdGVjdHVyZS1vdmVydmlldy5wbmcgXAorICAgICAgICAgICBlY2xpcHNlCitNQU5VQUxTID0gJChET0MpLyQoRE9DKS5odG1sICQoRE9DKS9lY2xpcHNlCitGSUdVUkVTID0gZmlndXJlcworU1RZTEVTSEVFVCA9ICQoRE9DKS8qLmNzcworZW5kaWYKKworaWZlcSAoJChET0MpLHRvYXN0ZXItbWFudWFsKQorWFNMVE9QVFMgPSAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCB0YXJiYWxsCitUQVJGSUxFUyA9IHRvYXN0ZXItbWFudWFsLmh0bWwgdG9hc3Rlci1tYW51YWwtc3R5bGUuY3NzIFwKKwkgICBmaWd1cmVzL3RvYXN0ZXItdGl0bGUucG5nIGZpZ3VyZXMvc2ltcGxlLWNvbmZpZ3VyYXRpb24ucG5nIFwKKwkgICBmaWd1cmVzL2hvc3RlZC1zZXJ2aWNlLnBuZworTUFOVUFMUyA9ICQoRE9DKS8kKERPQykuaHRtbCAkKERPQykvJChET0MpLnBkZgorRklHVVJFUyA9IGZpZ3VyZXMKK1NUWUxFU0hFRVQgPSAkKERPQykvKi5jc3MKK2VuZGlmCisKKworIyMKKyMgVGhlc2UgVVJJIHNob3VsZCBiZSByZXdyaXR0ZW4gYnkgeW91ciBkaXN0cmlidXRpb24ncyB4bWwgY2F0YWxvZyB0bworIyBtYXRjaCB5b3VyIGxvY2FsbHkgaW5zdGFsbGVkIFhTTCBzdHlsZXNoZWV0cy4KK1hTTF9CQVNFX1VSSSAgPSBodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvMS43Ni4xCitYU0xfWEhUTUxfVVJJID0gJChYU0xfQkFTRV9VUkkpL3hodG1sL2RvY2Jvb2sueHNsCisKK2FsbDogJChBTExQUkVRKQorCitwZGY6CitpZmVxICgkKERPQykseW9jdG8tcHJvamVjdC1xcykKKwlAZWNobyAiICIKKwlAZWNobyAiRVJST1I6IFlvdSBjYW5ub3QgZ2VuZXJhdGUgYSB5b2N0by1wcm9qZWN0LXFzIFBERiBmaWxlLiIKKwlAZWNobyAiICIKKworZWxzZSBpZmVxICgkKERPQyksbWVnYS1tYW51YWwpCisJQGVjaG8gIiAiCisJQGVjaG8gIkVSUk9SOiBZb3UgY2Fubm90IGdlbmVyYXRlIGEgbWVnYS1tYW51YWwgUERGIGZpbGUuIgorCUBlY2hvICIgIgorCitlbHNlCisKKwljZCAkKERPQyk7IC4uL3Rvb2xzL3Bva3ktZG9jYm9vay10by1wZGYgJChET0MpLnhtbCAuLi90ZW1wbGF0ZTsgY2QgLi4KK2VuZGlmCisKK2h0bWw6CitpZmVxICgkKERPQyksbWVnYS1tYW51YWwpCisjICAgICAgIFNlZSBodHRwOi8vd3d3LnNhZ2VoaWxsLm5ldC9kb2Nib29reHNsL0h0bWxPdXRwdXQuaHRtbAorCUBlY2hvICIgIgorCUBlY2hvICIqKioqKioqKiBCdWlsZGluZyAiJChET0MpCisJQGVjaG8gIiAiCisJY2QgJChET0MpOyB4c2x0cHJvYyAkKFhTTFRPUFRTKSAtbyAkKERPQykuaHRtbCAkKERPQyktY3VzdG9taXphdGlvbi54c2wgJChET0MpLnhtbDsgY2QgLi4KKwlAZWNobyAiICIKKwlAZWNobyAiKioqKioqKiogVXNpbmcgbWVnYS1tYW51YWwuc2VkIHRvIHByb2Nlc3MgZXh0ZXJuYWwgbGlua3MiCisJQGVjaG8gIiAiCisJY2QgJChET0MpOyBzZWQgLWYgLi4vdG9vbHMvbWVnYS1tYW51YWwuc2VkIDwgbWVnYS1tYW51YWwuaHRtbCA+IG1lZ2Etb3V0cHV0Lmh0bWw7IGNkIC4uCisJQGVjaG8gIiAiCisJQGVjaG8gIioqKioqKioqIENsZWFuaW5nIHVwIHRyYW5zaWVudCBmaWxlIG1lZ2Etb3V0cHV0Lmh0bWwiCisJQGVjaG8gIiAiCisJY2QgJChET0MpOyBybSBtZWdhLW1hbnVhbC5odG1sOyBtdiBtZWdhLW91dHB1dC5odG1sIG1lZ2EtbWFudWFsLmh0bWw7IGNkIC4uCitlbHNlCisjICAgICAgIFNlZSBodHRwOi8vd3d3LnNhZ2VoaWxsLm5ldC9kb2Nib29reHNsL0h0bWxPdXRwdXQuaHRtbAorCUBlY2hvICIgIgorCUBlY2hvICIqKioqKioqKiBCdWlsZGluZyAiJChET0MpCisJQGVjaG8gIiAiCisJY2QgJChET0MpOyB4c2x0cHJvYyAkKFhTTFRPUFRTKSAtbyAkKERPQykuaHRtbCAkKERPQyktY3VzdG9taXphdGlvbi54c2wgJChET0MpLnhtbDsgY2QgLi4KK2VuZGlmCisKKworZWNsaXBzZTogQkFTRV9ESVIgPSBodG1sLyQoRE9DKS8KKworZWNsaXBzZTogZWNsaXBzZS1nZW5lcmF0ZSBlY2xpcHNlLXJlc29sdmUtbGlua3MKKworLlBIT05ZIDogZWNsaXBzZS1nZW5lcmF0ZSBlY2xpcHNlLXJlc29sdmUtbGlua3MKKworZWNsaXBzZS1nZW5lcmF0ZToKK2lmZXEgKCQoZmlsdGVyICQoRE9DKSwgYWR0LW1hbnVhbCBic3AtZ3VpZGUgZGV2LW1hbnVhbCBrZXJuZWwtZGV2IHByb2ZpbGUtbWFudWFsIHJlZi1tYW51YWwgeW9jdG8tcHJvamVjdC1xcyksKQorCUBlY2hvICIgIgorCUBlY2hvICJFUlJPUjogWW91IGNhbiBvbmx5IGNyZWF0ZSBlY2xpcHNlIGRvY3VtZW50YXRpb24iCisJQGVjaG8gIiAgICAgICBvZiB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb24gcGFydHM6IgorCUBlY2hvICIgICAgICAgLSBhZHQtbWFudWFsIgorCUBlY2hvICIgICAgICAgLSBic3AtZ3VpZGUiCisJQGVjaG8gIiAgICAgICAtIGRldi1tYW51YWwiCisJQGVjaG8gIiAgICAgICAtIGtlcm5lbC1kZXYiCisJQGVjaG8gIiAgICAgICAtIHByb2ZpbGUtbWFudWFsIgorCUBlY2hvICIgICAgICAgLSByZWYtbWFudWFsIgorCUBlY2hvICIgICAgICAgLSB5b2N0by1wcm9qZWN0LXFzIgorCUBlY2hvICIgIgorZWxzZQorCUBlY2hvICIgIgorCUBlY2hvICIqKioqKioqKiBCdWlsZGluZyBlY2xpcHNlIGhlbHAgb2YgIiQoRE9DKQorCUBlY2hvICIgIgorCWNkICQoRE9DKSAmJiBcCisJCXhzbHRwcm9jICQoWFNMVE9QVFMpIFwKKwkJCQktLXN0cmluZ3BhcmFtIGJhc2UuZGlyICckKEJBU0VfRElSKScgXAorCQkJCS1vIGVjbGlwc2UvJChET0MpLmh0bWwgXAorCQkJCSQoRE9DKS1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsICQoRE9DKS54bWwgJiYgXAorCQltdiBlY2xpcHNlL3RvYy54bWwgZWNsaXBzZS8kKERPQyktdG9jLnhtbCAmJiBcCisJCWNwIC1yZiAkKEZJR1VSRVMpIGVjbGlwc2UvJChCQVNFX0RJUikgJiYgXAorCQljZCAuLjsKKworCSQoY2FsbCBtb2RpZnktZWNsaXBzZSkKK2VuZGlmCisKK2VjbGlwc2UtcmVzb2x2ZS1saW5rczoKKwlAZWNobyAiICIKKwlAZWNobyAiKioqKioqKiogVXNpbmcgZWNsaXBzZS1oZWxwLnNlZCB0byBwcm9jZXNzIGV4dGVybmFsIGxpbmtzIgorCUBlY2hvICIgIgorCSQoZm9yZWFjaCBGSUxFLCBcCisJCSQod2lsZGNhcmQgJChET0MpL2VjbGlwc2UvaHRtbC8kKERPQykvKi5odG1sKSwgXAorCQkkKHNoZWxsIHNlZCAtaSAtZiB0b29scy9lY2xpcHNlLWhlbHAuc2VkICQoRklMRSkpKQorCit0YXJiYWxsOiBodG1sCisJQGVjaG8gIiAiCisJQGVjaG8gIioqKioqKioqIENyZWF0aW5nIFRhcmJhbGwgb2YgZG9jdW1lbnQgZmlsZXMiCisJQGVjaG8gIiAiCisJY2QgJChET0MpOyB0YXIgLWN2emYgJChET0MpLnRneiAkKFRBUkZJTEVTKTsgY2QgLi4KKwordmFsaWRhdGU6CisJY2QgJChET0MpOyB4bWxsaW50IC0tcG9zdHZhbGlkIC0teGluY2x1ZGUgLS1ub291dCAkKERPQykueG1sOyBjZCAuLgorCisKK3B1Ymxpc2g6CisJQGlmIHRlc3QgLWYgJChET0MpLyQoRE9DKS5odG1sOyBcCisJICB0aGVuIFwKKyAgICAgICAgICAgIGVjaG8gIiAiOyBcCisgICAgICAgICAgICBlY2hvICIqKioqKioqKiBQdWJsaXNoaW5nICIkKERPQykiLmh0bWwiOyBcCisgICAgICAgICAgICBlY2hvICIgIjsgXAorICAgICAgICAgICAgc2NwIC1yICQoTUFOVUFMUykgJChTVFlMRVNIRUVUKSBkb2NzLnlwOi92YXIvd3d3L3d3dy55b2N0b3Byb2plY3Qub3JnLWRvY3MvJChWRVIpLyQoRE9DKTsgXAorICAgICAgICAgICAgY2QgJChET0MpOyBzY3AgLXIgJChGSUdVUkVTKSBkb2NzLnlwOi92YXIvd3d3L3d3dy55b2N0b3Byb2plY3Qub3JnLWRvY3MvJChWRVIpLyQoRE9DKTsgXAorCWVsc2UgXAorICAgICAgICAgIGVjaG8gIiAiOyBcCisgICAgICAgICAgZWNobyAkKERPQykiLmh0bWwgbWlzc2luZy4gIEdlbmVyYXRlIHRoZSBmaWxlIGZpcnN0IHRoZW4gdHJ5IGFnYWluLiI7IFwKKyAgICAgICAgICBlY2hvICIgIjsgXAorCWZpCisKK2NsZWFuOgorCXJtIC1yZiAkKE1BTlVBTFMpOyBybSAkKERPQykvJChET0MpLnRnejsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9SRUFETUUgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTY3OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vUkVBRE1FCkBAIC0wLDAgKzEsOTEgQEAKK2RvY3VtZW50YXRpb24KKz09PT09PT09PT09PT0KKworVGhpcyBpcyB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbi4gIFRoZSBZb2N0bworUHJvamVjdCBzb3VyY2UgcmVwb3NpdG9yaWVzIGF0IGh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0LmNnaSBoYXZlIHR3bworaW5zdGFuY2VzIG9mIHRoZSAiZG9jdW1lbnRhdGlvbiIgZGlyZWN0b3J5LiAgWW91IHNob3VsZCB1bmRlcnN0YW5kIGVhY2ggb2YKK3RoZXNlIGluc3RhbmNlcy4KKworICBwb2t5L2RvY3VtZW50YXRpb24gLSBUaGUgZGlyZWN0b3J5IHdpdGhpbiB0aGUgcG9reSBHaXQgcmVwb3NpdG9yeSBjb250YWluaW5nCisgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzZXQgb2YgWW9jdG8gUHJvamVjdCBtYW51YWxzLiAgV2hlbiB5b3UgY2xvbmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIHBva3kgR2l0IHJlcG9zaXRvcnksIHRoZSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyB0aGUgbWFudWFscy4gIFRoZSBzdGF0ZSBvZiB0aGUgbWFudWFscyBpbiB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpcyBndWFyYW50ZWVkIHRvIHJlZmxlY3QgdGhlIGxhdGVzdCBZb2N0bworICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0IHJlbGVhc2UuICBUaGUgbWFudWFscyBhdCB0aGUgdGlwIG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHdpbGwgYWxzbyBsaWtlbHkgY29udGFpbiBtb3N0IG1hbnVhbAorICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBjaGFuZ2VzLgorCisgIHlvY3RvLWRvY3MvZG9jdW1lbnRhdGlvbiAtIFRoZSBHaXQgcmVwb3NpdG9yeSBmb3IgdGhlIFlvY3RvIFByb2plY3QgbWFudWFscy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyByZXBvc2l0b3J5IGlzIHdoZXJlIG1hbnVhbCBkZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY2N1cnMuICBJZiB5b3UgcGxhbiBvbiBjb250cmlidXRpbmcgYmFjayB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uLCB5b3Ugc2hvdWxkIHNldCB1cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGxvY2FsIEdpdCByZXBvc2l0b3J5IGJhc2VkIG9uIHRoaXMgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBhcyBmb2xsb3dzOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWRvY3MKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VzIGFuZCBwYXRjaGVzIGFyZSBmaXJzdCBwdXNoZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvY3RvLWRvY3MgR2l0IHJlcG9zaXRvcnkuICBMYXRlciwgdGhleSBtYWtlIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIHBva3kgR2l0IHJlcG9zaXRvcnkgZm91bmQgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reS4KKworTWFudWFsIE9yZ2FuaXphdGlvbgorPT09PT09PT09PT09PT09PT09PQorCitGb2xkZXJzIGV4aXN0IGZvciBpbmRpdmlkdWFsIG1hbnVhbHMgYXMgZm9sbG93czoKKworKiBhZHQtbWFudWFsICAgICAgIC0gVGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisqIGJzcC1ndWlkZSAgICAgICAgLSBUaGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGUKKyogZGV2LW1hbnVhbCAgICAgICAtIFRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAorKiBrZXJuZWwtZGV2ICAgICAgIC0gVGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbAorKiByZWYtbWFudWFsICAgICAgIC0gVGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbAorKiB5b2N0by1wcm9qZWN0LXFzIC0gVGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQKKyogbWVnYS1tYW51YWwgICAgICAtIEFuIGFnZ3JlZ2F0ZWQgbWFudWFsIGNvbXByaXNlZCBvZiBhbGwgWVAgbWFudWFscyBhbmQgZ3VpZGVzCisqIHByb2ZpbGUtbWFudWFsICAgLSBUaGUgWW9jdG8gUHJvamVjdCBQcm9maWxlIGFuZCBUcmFjaW5nIE1hbnVhbAorCitFYWNoIGZvbGRlciBpcyBzZWxmLWNvbnRhaW5lZCByZWdhcmRpbmcgY29udGVudCBhbmQgZmlndXJlcy4gIE5vdGUgdGhhdCB0aGVyZQoraXMgYSBzZWQgZmlsZSBuZWVkZWQgdG8gcHJvY2VzcyB0aGUgbGlua3Mgb2YgdGhlIG1lZ2EtbWFudWFsLiAgVGhlIHNlZCBmaWxlCitpcyBsb2NhdGVkIGluIHRoZSB0b29scyBkaXJlY3RvcnkuICBBbHNvIG5vdGUgdGhhdCB0aGUgZmlndXJlcyBmb2xkZXIgaW4gdGhlCittZWdhLW1hbnVhbCBkaXJlY3RvcnkgY29udGFpbnMgZHVwbGljYXRlcyBvZiBhbGwgdGhlIGZpZ3VyZXMgaW4gdGhlIFlQIGZvbGRlcnMKK2RpcmVjdG9yaWVzIGZvciBhbGwgWVAgbWFudWFscyBhbmQgZ3VpZGVzLgorCitJZiB5b3Ugd2FudCB0byBmaW5kIEhUTUwgdmVyc2lvbnMgb2YgdGhlIFlvY3RvIFByb2plY3QgbWFudWFscyBvbiB0aGUgd2ViLAorZ28gdG8gaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnIGFuZCBjbGljayBvbiB0aGUgIkRvY3VtZW50YXRpb24iIHRhYi4gIEZyb20KK3RoZXJlIHlvdSBoYXZlIGFjY2VzcyB0byBhcmNoaXZlZCBkb2N1bWVudGF0aW9uIGZyb20gcHJldmlvdXMgcmVsZWFzZXMsIGN1cnJlbnQKK2RvY3VtZW50YXRpb24gZm9yIHRoZSBsYXRlc3QgcmVsZWFzZSwgYW5kICJEb2NzIGluIFByb2dyZXNzIiBmb3IgdGhlIHJlbGVhc2UKK2N1cnJlbnRseSBiZWluZyBkZXZlbG9wZWQuCisKK0luIGdlbmVyYWwsIHRoZSBZb2N0byBQcm9qZWN0IHNpdGUgKGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZykgaXMgYSBncmVhdAorcmVmZXJlbmNlIGZvciBib3RoIGluZm9ybWF0aW9uIGFuZCBkb3dubG9hZHMuCisKK01ha2VmaWxlCis9PT09PT09PQorCitUaGUgTWFrZWZpbGUgcHJvY2Vzc2VzIG1hbnVhbCBkaXJlY3RvcmllcyB0byBjcmVhdGUgSFRNTCwgUERGLAordGFyYmFsbHMsIGV0Yy4gIERldGFpbHMgb24gaG93IHRoZSBNYWtlZmlsZSB3b3JrIGFyZSBkb2N1bWVudGVkCitpbnNpZGUgdGhlIE1ha2VmaWxlLiAgU2VlIHRoYXQgZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVG8gYnVpbGQgYSBtYW51YWwsIHlvdSBydW4gdGhlIG1ha2UgY29tbWFuZCBhbmQgcGFzcyBpdCB0aGUgbmFtZQorb2YgdGhlIGZvbGRlciBjb250YWluaW5nIHRoZSBtYW51YWwncyBjb250ZW50cy4KK0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgcnVuIGZyb20gdGhlIGRvY3VtZW50YXRpb24gZGlyZWN0b3J5CitjcmVhdGVzIGFuIEhUTUwgYW5kIGEgUERGIHZlcnNpb24gb2YgdGhlIEFEVCBtYW51YWwuCitUaGUgRE9DIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgbWFudWFsIHlvdSBhcmUgbWFraW5nOgorCisgICAgICQgbWFrZSBET0M9YWR0LW1hbnVhbAorCitwb2t5LmVudAorPT09PT09PT0KKworVGhpcyBmaWxlIGRlZmluZXMgdmFyaWFibGVzIHVzZWQgZm9yIGRvY3VtZW50YXRpb24gcHJvZHVjdGlvbi4gIFRoZSB2YXJpYWJsZXMKK2FyZSB1c2VkIHRvIGRlZmluZSByZWxlYXNlIHBhdGhuYW1lcywgVVJMcyBmb3IgdGhlIHB1Ymxpc2hlZCBtYW51YWxzLCBldGMuCisKK3RlbXBsYXRlCis9PT09PT09PQorQ29udGFpbnMgdmFyaW91cyB0ZW1wbGF0ZXMsIGZvbnRzLCBhbmQgc29tZSBvbGQgUE5HIGZpbGVzLgorCit0b29scworPT09PT0KK0NvbnRhaW5zIGEgdG9vbCB0byBjb252ZXJ0IHRoZSBEb2NCb29rIGZpbGVzIHRvIFBERiBmb3JtYXQuICBUaGlzIGZvbGRlciBhbHNvCitjb250YWlucyB0aGUgbWVnYS1tYW51YWwuc2VkIGZpbGUsIHdoaWNoIGlzIHVzZWQgYnkgTWFrZWZpbGUgdG8gcHJvY2VzcworY3Jvc3MtcmVmZXJlbmNlcyBmcm9tIHdpdGhpbiB0aGUgbWFudWFsIHRoYXQgbm9ybWFsbHkgZ28gdG8gYW4gZXh0ZXJuYWwKK21hbnVhbC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1jb21tYW5kLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1jb21tYW5kLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzhkMThhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LWNvbW1hbmQueG1sCkBAIC0wLDAgKzEsMjY1IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ndXNpbmctdGhlLWNvbW1hbmQtbGluZSc+Cis8dGl0bGU+VXNpbmcgdGhlIENvbW1hbmQgTGluZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgUmVjYWxsIHRoYXQgZWFybGllciB0aGUgbWFudWFsIGRpc2N1c3NlZCBob3cgdG8gdXNlIGFuIGV4aXN0aW5nIHRvb2xjaGFpbgorICAgICAgICB0YXJiYWxsIHRoYXQgaGFkIGJlZW4gaW5zdGFsbGVkIGludG8gdGhlIGRlZmF1bHQgaW5zdGFsbGF0aW9uCisgICAgICAgIGRpcmVjdG9yeSwgPGZpbGVuYW1lPi9vcHQvcG9reS8mRElTVFJPOzwvZmlsZW5hbWU+LCB3aGljaCBpcyBvdXRzaWRlIG9mIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgIChzZWUgdGhlIHNlY3Rpb24gIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWFuLWV4aXN0aW5nLXRvb2xjaGFpbi10YXJiYWxsJz5Vc2luZyBhIENyb3NzLVRvb2xjaGFpbiBUYXJiYWxsKTwvbGluaz4iLgorICAgICAgICBBbmQsIHRoYXQgc291cmNpbmcgeW91ciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0CisgICAgICAgIGluaXRpYWxpemVzIGEgc3VpdGFibGUgY3Jvc3MtdG9vbGNoYWluIGRldmVsb3BtZW50IGVudmlyb25tZW50LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBEdXJpbmcgdGhpcyBzZXR1cCwgbG9jYXRpb25zIGZvciB0aGUgY29tcGlsZXIsIFFFTVUgc2NyaXB0cywgUUVNVSBiaW5hcnksCisgICAgICAgIGEgc3BlY2lhbCB2ZXJzaW9uIG9mIDxmaWxlbmFtZT5wa2djb25maWc8L2ZpbGVuYW1lPiBhbmQgb3RoZXIgdXNlZnVsCisgICAgICAgIHV0aWxpdGllcyBhcmUgYWRkZWQgdG8gdGhlIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgIEFsc28sIHZhcmlhYmxlcyB0byBhc3Npc3QKKyAgICAgICAgPGZpbGVuYW1lPnBrZ2NvbmZpZzwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT4KKyAgICAgICAgYXJlIGFsc28gZGVmaW5lZCBzbyB0aGF0LCBmb3IgZXhhbXBsZSwgPGZpbGVuYW1lPmNvbmZpZ3VyZS5zaDwvZmlsZW5hbWU+CisgICAgICAgIGNhbiBmaW5kIHByZS1nZW5lcmF0ZWQgdGVzdCByZXN1bHRzIGZvciB0ZXN0cyB0aGF0IG5lZWQgdGFyZ2V0IGhhcmR3YXJlCisgICAgICAgIG9uIHdoaWNoIHRvIHJ1bi4KKyAgICAgICAgWW91IGNhbiBzZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdzZXR0aW5nLXVwLXRoZS1jcm9zcy1kZXZlbG9wbWVudC1lbnZpcm9ubWVudCc+U2V0dGluZyBVcCB0aGUgQ3Jvc3MtRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L2xpbms+IgorICAgICAgICBzZWN0aW9uIGZvciB0aGUgbGlzdCBvZiBjcm9zcy10b29sY2hhaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICAgIGVzdGFibGlzaGVkIGJ5IHRoZSBzY3JpcHQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIENvbGxlY3RpdmVseSwgdGhlc2UgY29uZGl0aW9ucyBhbGxvdyB5b3UgdG8gZWFzaWx5IHVzZSB0aGUgdG9vbGNoYWluCisgICAgICAgIG91dHNpZGUgb2YgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBlbnZpcm9ubWVudCBvbiBib3RoIEF1dG90b29scy1iYXNlZAorICAgICAgICBwcm9qZWN0cyBhbmQgTWFrZWZpbGUtYmFzZWQgcHJvamVjdHMuCisgICAgICAgIFRoaXMgY2hhcHRlciBwcm92aWRlcyBpbmZvcm1hdGlvbiBmb3IgYm90aCB0aGVzZSB0eXBlcyBvZiBwcm9qZWN0cy4KKyAgICA8L3BhcmE+CisKKworPHNlY3Rpb24gaWQ9J2F1dG90b29scy1iYXNlZC1wcm9qZWN0cyc+Cis8dGl0bGU+QXV0b3Rvb2xzLUJhc2VkIFByb2plY3RzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBPbmNlIHlvdSBoYXZlIGEgc3VpdGFibGUgY3Jvc3MtdG9vbGNoYWluIGluc3RhbGxlZCwgaXQgaXMgdmVyeSBlYXN5IHRvCisgICAgICAgIGRldmVsb3AgYSBwcm9qZWN0IG91dHNpZGUgb2YgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBhIHNpbXBsZSAiSGVsbG93b3JsZCIgZXhhbXBsZSB0aGF0IHNob3dzIGhvdworICAgICAgICB0byBzZXQgdXAsIGNvbXBpbGUsIGFuZCBydW4gdGhlIHByb2plY3QuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLWFuZC1ydW5uaW5nLWEtcHJvamVjdC1iYXNlZC1vbi1nbnUtYXV0b3Rvb2xzJz4KKyAgICAgICAgPHRpdGxlPkNyZWF0aW5nIGFuZCBSdW5uaW5nIGEgUHJvamVjdCBCYXNlZCBvbiBHTlUgQXV0b3Rvb2xzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBjcmVhdGUgYSBzaW1wbGUgQXV0b3Rvb2xzLWJhc2VkIHByb2plY3Q6CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgeW91ciBkaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIGEgY2xlYW4gZGlyZWN0b3J5IGZvciB5b3VyIHByb2plY3QgYW5kIHRoZW4gbWFrZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGRpcmVjdG9yeSB5b3VyIHdvcmtpbmcgbG9jYXRpb246CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBta2RpciAkSE9NRS9oZWxsb3dvcmxkCisgICAgICQgY2QgJEhPTUUvaGVsbG93b3JsZAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Qb3B1bGF0ZSB0aGUgZGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZSA8ZmlsZW5hbWU+aGVsbG8uYzwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+TWFrZWZpbGUuYW08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5jb25maWd1cmUuaW48L2ZpbGVuYW1lPiBmaWxlcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciA8ZmlsZW5hbWU+aGVsbG8uYzwvZmlsZW5hbWU+LCBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlc2UgbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKworICAgICBtYWluKCkKKyAgICAgICAgeworICAgICAgICAgICBwcmludGYoIkhlbGxvIFdvcmxkIVxuIik7CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIDxmaWxlbmFtZT5NYWtlZmlsZS5hbTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgdGhlc2UgbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBiaW5fUFJPR1JBTVMgPSBoZWxsbworICAgICBoZWxsb19TT1VSQ0VTID0gaGVsbG8uYworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgPGZpbGVuYW1lPmNvbmZpZ3VyZS5pbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgdGhlc2UgbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBQ19JTklUKGhlbGxvLmMpCisgICAgIEFNX0lOSVRfQVVUT01BS0UoaGVsbG8sMC4xKQorICAgICBBQ19QUk9HX0NDCisgICAgIEFDX1BST0dfSU5TVEFMTAorICAgICBBQ19PVVRQVVQoTWFrZWZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNvdXJjZSB0aGUgY3Jvc3MtdG9vbGNoYWluCisgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHNldHVwIGZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbGF0aW9uIG9mIHRoZSBjcm9zcy10b29sY2hhaW4gY3JlYXRlcyBhIGNyb3NzLXRvb2xjaGFpbgorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgaW4gdGhlIGRpcmVjdG9yeSB0aGF0IHRoZSBBRFQKKyAgICAgICAgICAgICAgICAgICAgd2FzIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgQmVmb3JlIHlvdSBjYW4gdXNlIHRoZSB0b29scyB0byBkZXZlbG9wIHlvdXIgcHJvamVjdCwgeW91IG11c3QKKyAgICAgICAgICAgICAgICAgICAgc291cmNlIHRoaXMgc2V0dXAgc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICBUaGUgc2NyaXB0IGJlZ2lucyB3aXRoIHRoZSBzdHJpbmcgImVudmlyb25tZW50LXNldHVwIiBhbmQgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgdGhlIG1hY2hpbmUgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyBmb2xsb3dlZCBieSB0aGUgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICJwb2t5LWxpbnV4Ii4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgc291cmNlcyBhIHNjcmlwdCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IEFEVCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IHRoYXQgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgMzItYml0IEludGVsIHg4NiBBcmNoaXRlY3R1cmUgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAmRElTVFJPX05BTUU7IFlvY3RvIFByb2plY3QgcmVsZWFzZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSAvb3B0L3Bva3kvJkRJU1RSTzsvZW52aXJvbm1lbnQtc2V0dXAtaTU4Ni1wb2t5LWxpbnV4CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdlbmVyYXRlIHRoZSBsb2NhbCBhY2xvY2FsLm00CisgICAgICAgICAgICAgICAgICAgIGZpbGVzIGFuZCBjcmVhdGUgdGhlIGNvbmZpZ3VyZSBzY3JpcHQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBHTlUgQXV0b3Rvb2xzIGdlbmVyYXRlIHRoZSBsb2NhbAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWNsb2NhbC5tNDwvZmlsZW5hbWU+IGZpbGVzIGFuZCBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBzY3JpcHQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBhY2xvY2FsCisgICAgICQgYXV0b2NvbmYKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2VuZXJhdGUgZmlsZXMgbmVlZGVkIGJ5IEdOVQorICAgICAgICAgICAgICAgICAgICBjb2Rpbmcgc3RhbmRhcmRzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEdOVSBjb2Rpbmcgc3RhbmRhcmRzIHJlcXVpcmUgY2VydGFpbiBmaWxlcyBpbiBvcmRlciBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHByb2plY3QgdG8gYmUgY29tcGxpYW50LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgY3JlYXRlcyB0aG9zZSBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHRvdWNoIE5FV1MgUkVBRE1FIEFVVEhPUlMgQ2hhbmdlTG9nCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdlbmVyYXRlIHRoZSBjb25maWd1cmUKKyAgICAgICAgICAgICAgICAgICAgZmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgZ2VuZXJhdGVzIHRoZSA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBhdXRvbWFrZSAtYQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Dcm9zcy1jb21waWxlIHRoZSBwcm9qZWN0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBjb21waWxlcyB0aGUgcHJvamVjdCB1c2luZyB0aGUgY3Jvc3MtY29tcGlsZXIuCisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ09ORklHVVJFX0ZMQUdTJz48ZmlsZW5hbWU+Q09ORklHVVJFX0ZMQUdTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBwcm92aWRlcyB0aGUgbWluaW1hbCBhcmd1bWVudHMgZm9yCisgICAgICAgICAgICAgICAgICAgIEdOVSBjb25maWd1cmU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCAuL2NvbmZpZ3VyZSAke0NPTkZJR1VSRV9GTEFHU30KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFrZSBhbmQgaW5zdGFsbCB0aGUgcHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGVzZSB0d28gY29tbWFuZHMgZ2VuZXJhdGUgYW5kIGluc3RhbGwgdGhlIHByb2plY3QgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbWFrZQorICAgICAkIG1ha2UgaW5zdGFsbCBERVNURElSPS4vdG1wCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlZlcmlmeSB0aGUgaW5zdGFsbGF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBpcyBhIHNpbXBsZSB3YXkgdG8gdmVyaWZ5IHRoZSBpbnN0YWxsYXRpb24KKyAgICAgICAgICAgICAgICAgICAgb2YgeW91ciBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICBSdW5uaW5nIHRoZSBjb21tYW5kIHByaW50cyB0aGUgYXJjaGl0ZWN0dXJlIG9uIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIHRoZSBiaW5hcnkgZmlsZSBjYW4gcnVuLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGFyY2hpdGVjdHVyZSBzaG91bGQgYmUgdGhlIHNhbWUgYXJjaGl0ZWN0dXJlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgdGhlIGluc3RhbGxlZCBjcm9zcy10b29sY2hhaW4gc3VwcG9ydHMuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBmaWxlIC4vdG1wL3Vzci9sb2NhbC9iaW4vaGVsbG8KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXhlY3V0ZSB5b3VyIHByb2plY3Q6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVG8gZXhlY3V0ZSB0aGUgcHJvamVjdCBpbiB0aGUgc2hlbGwsIHNpbXBseSBlbnRlciB0aGUgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNvdWxkIGFsc28gY29weSB0aGUgYmluYXJ5IHRvIHRoZSBhY3R1YWwgdGFyZ2V0IGhhcmR3YXJlCisgICAgICAgICAgICAgICAgICAgIGFuZCBydW4gdGhlIHByb2plY3QgdGhlcmUgYXMgd2VsbDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIC4vaGVsbG8KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBBcyBleHBlY3RlZCwgdGhlIHByb2plY3QgZGlzcGxheXMgdGhlICJIZWxsbyBXb3JsZCEiIG1lc3NhZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdwYXNzaW5nLWhvc3Qtb3B0aW9ucyc+CisgICAgICAgIDx0aXRsZT5QYXNzaW5nIEhvc3QgT3B0aW9uczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgYW4gQXV0b3Rvb2xzLWJhc2VkIHByb2plY3QsIHlvdSBjYW4gdXNlIHRoZSBjcm9zcy10b29sY2hhaW4gYnkganVzdAorICAgICAgICAgICAgcGFzc2luZyB0aGUgYXBwcm9wcmlhdGUgaG9zdCBvcHRpb24gdG8gPGZpbGVuYW1lPmNvbmZpZ3VyZS5zaDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIGhvc3Qgb3B0aW9uIHlvdSB1c2UgaXMgZGVyaXZlZCBmcm9tIHRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCBzZXR1cAorICAgICAgICAgICAgc2NyaXB0IGZvdW5kIGluIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggeW91IGluc3RhbGxlZCB0aGUgY3Jvc3MtdG9vbGNoYWluLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBob3N0IG9wdGlvbiBmb3IgYW4gQVJNLWJhc2VkIHRhcmdldCB0aGF0IHVzZXMgdGhlIEdOVSBFQUJJCisgICAgICAgICAgICBpcyA8ZmlsZW5hbWU+YXJtdjV0ZS1wb2t5LWxpbnV4LWdudWVhYmk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFlvdSB3aWxsIG5vdGljZSB0aGF0IHRoZSBuYW1lIG9mIHRoZSBzY3JpcHQgaXMKKyAgICAgICAgICAgIDxmaWxlbmFtZT5lbnZpcm9ubWVudC1zZXR1cC1hcm12NXRlLXBva3ktbGludXgtZ251ZWFiaTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGh1cywgdGhlIGZvbGxvd2luZyBjb21tYW5kIHdvcmtzIHRvIHVwZGF0ZSB5b3VyIHByb2plY3QgYW5kCisgICAgICAgICAgICByZWJ1aWxkIGl0IHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBjcm9zcy10b29sY2hhaW4gdG9vbHM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgLi9jb25maWd1cmUgLS1ob3N0PWFybXY1dGUtcG9reS1saW51eC1nbnVlYWJpIFwKKyAgICAgICAgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD08cmVwbGFjZWFibGU+c3lzcm9vdF9kaXI8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgSWYgdGhlIDxmaWxlbmFtZT5jb25maWd1cmU8L2ZpbGVuYW1lPiBzY3JpcHQgcmVzdWx0cyBpbiBwcm9ibGVtcyByZWNvZ25pemluZyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS13aXRoLWxpYnRvb2wtc3lzcm9vdD08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5zeXNyb290LWRpcjwvcmVwbGFjZWFibGU+IG9wdGlvbiwKKyAgICAgICAgICAgICAgICByZWdlbmVyYXRlIHRoZSBzY3JpcHQgdG8gZW5hYmxlIHRoZSBzdXBwb3J0IGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmcgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICBydW4gdGhlIHNjcmlwdCBhZ2FpbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbGlidG9vbGl6ZSAtLWF1dG9tYWtlCisgICAgICQgYWNsb2NhbCAtSSAke09FQ09SRV9OQVRJVkVfU1lTUk9PVH0vdXNyL3NoYXJlL2FjbG9jYWwgXAorICAgICAgICBbLUkgPHJlcGxhY2VhYmxlPmRpcl9jb250YWluaW5nX3lvdXJfcHJvamVjdC1zcGVjaWZpY19tNF9tYWNyb3M8L3JlcGxhY2VhYmxlPl0KKyAgICAgJCBhdXRvY29uZgorICAgICAkIGF1dG9oZWFkZXIKKyAgICAgJCBhdXRvbWFrZSAtYQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J21ha2VmaWxlLWJhc2VkLXByb2plY3RzJz4KKzx0aXRsZT5NYWtlZmlsZS1CYXNlZCBQcm9qZWN0czwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIE1ha2VmaWxlLWJhc2VkIHByb2plY3RzLCB0aGUgY3Jvc3MtdG9vbGNoYWluIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICAgICBlc3RhYmxpc2hlZCBieSBydW5uaW5nIHRoZSBjcm9zcy10b29sY2hhaW4gZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0CisgICAgICAgIGFyZSBzdWJqZWN0IHRvIGdlbmVyYWwgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBydWxlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVG8gaWxsdXN0cmF0ZSB0aGlzLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGZvdXIgY3Jvc3MtdG9vbGNoYWluCisgICAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ0MnPkNDPC91bGluaz49aTU4Ni1wb2t5LWxpbnV4LWdjYyAtbTMyIC1tYXJjaD1pNTg2IC0tc3lzcm9vdD0vb3B0L3Bva3kvMS44L3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eAorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTEQnPkxEPC91bGluaz49aTU4Ni1wb2t5LWxpbnV4LWxkIC0tc3lzcm9vdD0vb3B0L3Bva3kvMS44L3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eAorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ0ZMQUdTJz5DRkxBR1M8L3VsaW5rPj0tTzIgLXBpcGUgLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DWFhGTEFHUyc+Q1hYRkxBR1M8L3VsaW5rPj0tTzIgLXBpcGUgLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgTm93LCBjb25zaWRlciB0aGUgZm9sbG93aW5nIHRocmVlIGNhc2VzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DYXNlIDEgLSBObyBWYXJpYWJsZXMgU2V0IGluIHRoZSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlc2UgdmFyaWFibGVzIGFyZSBub3Qgc3BlY2lmaWNhbGx5IHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiwgdGhlIHZhcmlhYmxlcyByZXRhaW4gdGhlaXIKKyAgICAgICAgICAgICAgICB2YWx1ZXMgYmFzZWQgb24gdGhlIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DYXNlIDIgLSBWYXJpYWJsZXMgU2V0IGluIHRoZSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFNwZWNpZmljYWxseSBzZXR0aW5nIHZhcmlhYmxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiBkdXJpbmcgdGhlIGJ1aWxkIHJlc3VsdHMgaW4gdGhlCisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgc2V0dGluZ3Mgb2YgdGhlIHZhcmlhYmxlcyBiZWluZyBvdmVyd3JpdHRlbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2FzZSAzIC0gVmFyaWFibGVzIFNldCB3aGVuIHRoZSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiBpcyBFeGVjdXRlZCBmcm9tIHRoZSBDb21tYW5kIExpbmU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBFeGVjdXRpbmcgdGhlIDxmaWxlbmFtZT5NYWtlZmlsZTwvZmlsZW5hbWU+IGZyb20gdGhlIGNvbW1hbmQKKyAgICAgICAgICAgICAgICBsaW5lIHJlc3VsdHMgaW4gdGhlIHZhcmlhYmxlcyBiZWluZyBvdmVyd3JpdHRlbiB3aXRoCisgICAgICAgICAgICAgICAgY29tbWFuZC1saW5lIGNvbnRlbnQgcmVnYXJkbGVzcyBvZiB3aGF0IGlzIGJlaW5nIHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IGNvbnNpZGVyZWQgdW5sZXNzCisgICAgICAgICAgICAgICAgeW91IHVzZSB0aGUgIi1lIiBmbGFnIGR1cmluZyB0aGUgYnVpbGQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIG1ha2UgLWUgPHJlcGxhY2VhYmxlPmZpbGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIHRoaXMgZmxhZywgdGhlbiB0aGUgZW52aXJvbm1lbnQgdmFsdWVzIG9mIHRoZQorICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBvdmVycmlkZSBhbnkgdmFyaWFibGVzIHNwZWNpZmljYWxseSBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEZvciB0aGUgbGlzdCBvZiB2YXJpYWJsZXMgc2V0IHVwIGJ5IHRoZSBjcm9zcy10b29sY2hhaW4gZW52aXJvbm1lbnQKKyAgICAgICAgICAgIHNldHVwIHNjcmlwdCwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3NldHRpbmctdXAtdGhlLWNyb3NzLWRldmVsb3BtZW50LWVudmlyb25tZW50Jz5TZXR0aW5nIFVwIHRoZSBDcm9zcy1EZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtaW50cm8ueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LWludHJvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTdjNzEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LWludHJvLnhtbApAQCAtMCwwICsxLDE4MCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2FkdC1pbnRybyc+CisgICAgPHRpdGxlPlRoZSBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBUb29sa2l0IChBRFQpPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBQYXJ0IG9mIHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50IHNvbHV0aW9uIGlzIGFuIEFwcGxpY2F0aW9uIERldmVsb3BtZW50CisgICAgICAgIFRvb2xraXQgKEFEVCkuCisgICAgICAgIFRoZSBBRFQgcHJvdmlkZXMgeW91IHdpdGggYSBjdXN0b20tYnVpbHQsIGNyb3NzLWRldmVsb3BtZW50CisgICAgICAgIHBsYXRmb3JtIHN1aXRlZCBmb3IgZGV2ZWxvcGluZyBhIHVzZXItdGFyZ2V0ZWQgcHJvZHVjdCBhcHBsaWNhdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRnVuZGFtZW50YWxseSwgdGhlIEFEVCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjcm9zcy10b29sY2hhaW4gYW5kIG1hdGNoaW5nCisgICAgICAgICAgICAgICAgc3lzcm9vdCBib3RoIGJ1aWx0IGJ5IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLXN5c3RlbS10ZXJtJz5PcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtPC91bGluaz4uCisgICAgICAgICAgICAgICAgVGhlIHRvb2xjaGFpbiBhbmQgc3lzcm9vdCBhcmUgYmFzZWQgb24gYQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBhbmQgZXh0ZW5zaW9ucywKKyAgICAgICAgICAgICAgICB3aGljaCBhbGxvd3MgeW91IHRvIGNyb3NzLWRldmVsb3Agb24gdGhlIGhvc3QgbWFjaGluZSBmb3IgdGhlIHRhcmdldCBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgRWNsaXBzZSBJREUgWW9jdG8gUGx1Zy1pbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpLCB3aGljaCBsZXRzIHlvdSBzaW11bGF0ZSB0YXJnZXQgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VmFyaW91cyB1c2VyLXNwYWNlIHRvb2xzIHRoYXQgZ3JlYXRseSBlbmhhbmNlIHlvdXIgYXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBleHBlcmllbmNlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ndGhlLWNyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbic+CisgICAgICAgIDx0aXRsZT5UaGUgQ3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW48L3VsaW5rPgorICAgICAgICAgICAgY29uc2lzdHMgb2YgYSBjcm9zcy1jb21waWxlciwgY3Jvc3MtbGlua2VyLCBhbmQgY3Jvc3MtZGVidWdnZXIKKyAgICAgICAgICAgIHRoYXQgYXJlIHVzZWQgdG8gZGV2ZWxvcCB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucyBmb3IgdGFyZ2V0ZWQKKyAgICAgICAgICAgIGhhcmR3YXJlLgorICAgICAgICAgICAgVGhpcyB0b29sY2hhaW4gaXMgY3JlYXRlZCBlaXRoZXIgYnkgcnVubmluZyB0aGUgQURUIEluc3RhbGxlcgorICAgICAgICAgICAgc2NyaXB0LCBhIHRvb2xjaGFpbiBpbnN0YWxsZXIgc2NyaXB0LCBvciB0aHJvdWdoIGEKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIHRoYXQgaXMgYmFzZWQgb24geW91ciBNZXRhZGF0YSBjb25maWd1cmF0aW9uIG9yIGV4dGVuc2lvbiBmb3IKKyAgICAgICAgICAgIHlvdXIgdGFyZ2V0ZWQgZGV2aWNlLgorICAgICAgICAgICAgVGhlIGNyb3NzLXRvb2xjaGFpbiB3b3JrcyB3aXRoIGEgbWF0Y2hpbmcgdGFyZ2V0IHN5c3Jvb3QuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3lzcm9vdCc+CisgICAgICAgIDx0aXRsZT5TeXNyb290PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBtYXRjaGluZyB0YXJnZXQgc3lzcm9vdCBjb250YWlucyBuZWVkZWQgaGVhZGVycyBhbmQgbGlicmFyaWVzIGZvciBnZW5lcmF0aW5nCisgICAgICAgICAgICBiaW5hcmllcyB0aGF0IHJ1biBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgIFRoZSBzeXNyb290IGlzIGJhc2VkIG9uIHRoZSB0YXJnZXQgcm9vdCBmaWxlc3lzdGVtIGltYWdlIHRoYXQgaXMgYnVpbHQgYnkKKyAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFuZCB1c2VzIHRoZSBzYW1lIE1ldGFkYXRhIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIHVzZWQgdG8gYnVpbGQgdGhlIGNyb3NzLXRvb2xjaGFpbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdlY2xpcHNlLW92ZXJ2aWV3Jz4KKyAgICAgICAgPHRpdGxlPkVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgRWNsaXBzZSBJREUgaXMgYSBwb3B1bGFyIGRldmVsb3BtZW50IGVudmlyb25tZW50IGFuZCBpdCBmdWxseSBzdXBwb3J0cworICAgICAgICAgICAgZGV2ZWxvcG1lbnQgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICBXaGVuIHlvdSBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIEVjbGlwc2UgWW9jdG8gUHJvamVjdCBQbHVnLWluIGludG8KKyAgICAgICAgICAgIHRoZSBFY2xpcHNlIElERSwgeW91IG1heGltaXplIHlvdXIgWW9jdG8gUHJvamVjdCBleHBlcmllbmNlLgorICAgICAgICAgICAgSW5zdGFsbGluZyBhbmQgY29uZmlndXJpbmcgdGhlIFBsdWctaW4gcmVzdWx0cyBpbiBhbiBlbnZpcm9ubWVudCB0aGF0CisgICAgICAgICAgICBoYXMgZXh0ZW5zaW9ucyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gbGV0IHlvdSBtb3JlIGVhc2lseSBkZXZlbG9wIHNvZnR3YXJlLgorICAgICAgICAgICAgVGhlc2UgZXh0ZW5zaW9ucyBhbGxvdyBmb3IgY3Jvc3MtY29tcGlsYXRpb24sIGRlcGxveW1lbnQsIGFuZCBleGVjdXRpb24gb2YKKyAgICAgICAgICAgIHlvdXIgb3V0cHV0IGludG8gYSBRRU1VIGVtdWxhdGlvbiBzZXNzaW9uLgorICAgICAgICAgICAgWW91IGNhbiBhbHNvIHBlcmZvcm0gY3Jvc3MtZGVidWdnaW5nIGFuZCBwcm9maWxpbmcuCisgICAgICAgICAgICBUaGUgZW52aXJvbm1lbnQgYWxzbyBzdXBwb3J0cyBhIHN1aXRlIG9mIHRvb2xzIHRoYXQgYWxsb3dzIHlvdSB0byBwZXJmb3JtCisgICAgICAgICAgICByZW1vdGUgcHJvZmlsaW5nLCB0cmFjaW5nLCBjb2xsZWN0aW9uIG9mIHBvd2VyIGRhdGEsIGNvbGxlY3Rpb24gb2YKKyAgICAgICAgICAgIGxhdGVuY3kgZGF0YSwgYW5kIGNvbGxlY3Rpb24gb2YgcGVyZm9ybWFuY2UgZGF0YS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCB3b3JrZmxvdyB0aGF0IHVzZXMgdGhlIEVjbGlwc2UKKyAgICAgICAgICAgIElERSBhbmQgZm9yIGEgZGV0YWlsZWQgZXhhbXBsZSBvZiBob3cgdG8gaW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSBFY2xpcHNlCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IFBsdWctaW4sIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNhZHQtZWNsaXBzZSc+V29ya2luZyBXaXRoaW4gRWNsaXBzZTwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICBvZiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndGhlLXFlbXUtZW11bGF0b3InPgorICAgICAgICA8dGl0bGU+VGhlIFFFTVUgRW11bGF0b3I8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFFFTVUgZW11bGF0b3IgYWxsb3dzIHlvdSB0byBzaW11bGF0ZSB5b3VyIGhhcmR3YXJlIHdoaWxlIHJ1bm5pbmcgeW91cgorICAgICAgICAgICAgYXBwbGljYXRpb24gb3IgaW1hZ2UuCisgICAgICAgICAgICBRRU1VIGlzIG1hZGUgYXZhaWxhYmxlIGEgbnVtYmVyIG9mIHdheXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHVzZSB0aGUgQURUIEluc3RhbGxlciBzY3JpcHQgdG8gaW5zdGFsbCBBRFQsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB3aGV0aGVyIG9yIG5vdCB0byBpbnN0YWxsIFFFTVUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgY2xvbmVkIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IEdpdAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgeW91IGhhdmUgc291cmNlZCB0aGUgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LCBRRU1VIGlzCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBhbmQgYXV0b21hdGljYWxseSBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgZG93bmxvYWRlZCBhIFlvY3RvIFByb2plY3QgcmVsZWFzZSBhbmQgdW5wYWNrZWQKKyAgICAgICAgICAgICAgICAgICAgaXQgdG8gY3JlYXRlIGEKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCB5b3UgaGF2ZSBzb3VyY2VkIHRoZSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQsIFFFTVUgaXMKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGFuZCBhdXRvbWF0aWNhbGx5IGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIGNyb3NzLXRvb2xjaGFpbiB0YXJiYWxsIGFuZCB5b3UKKyAgICAgICAgICAgICAgICAgICAgaGF2ZSBzb3VyY2VkIHRoZSB0b29sY2hhaW4ncyBzZXR1cCBlbnZpcm9ubWVudCBzY3JpcHQsIFFFTVUKKyAgICAgICAgICAgICAgICAgICAgaXMgYWxzbyBpbnN0YWxsZWQgYW5kIGF1dG9tYXRpY2FsbHkgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzZXItc3BhY2UtdG9vbHMnPgorICAgICAgICA8dGl0bGU+VXNlci1TcGFjZSBUb29sczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBVc2VyLXNwYWNlIHRvb2xzIGFyZSBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgWW91IHdpbGwgZmluZCB0aGVzZSB0b29scyBoZWxwZnVsIGR1cmluZyBkZXZlbG9wbWVudC4KKyAgICAgICAgICAgIFRoZSB0b29scyBpbmNsdWRlIExhdGVuY3lUT1AsIFBvd2VyVE9QLCBPUHJvZmlsZSwgUGVyZiwgU3lzdGVtVGFwLCBhbmQgTHR0bmctdXN0LgorICAgICAgICAgICAgVGhlc2UgdG9vbHMgYXJlIGNvbW1vbiBkZXZlbG9wbWVudCB0b29scyBmb3IgdGhlIExpbnV4IHBsYXRmb3JtLgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxhdGVuY3lUT1A6PC9lbXBoYXNpcz4gTGF0ZW5jeVRPUCBmb2N1c2VzIG9uIGxhdGVuY3kKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBjYXVzZXMgc2tpcHMgaW4gYXVkaW8sCisgICAgICAgICAgICAgICAgICAgIHN0dXR0ZXJzIGluIHlvdXIgZGVza3RvcCBleHBlcmllbmNlLCBvciBzaXR1YXRpb25zIHRoYXQgb3ZlcmxvYWQgeW91ciBzZXJ2ZXIKKyAgICAgICAgICAgICAgICAgICAgZXZlbiB3aGVuIHlvdSBoYXZlIHBsZW50eSBvZiBDUFUgcG93ZXIgbGVmdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Qb3dlclRPUDo8L2VtcGhhc2lzPiBIZWxwcyB5b3UgZGV0ZXJtaW5lIHdoYXQKKyAgICAgICAgICAgICAgICAgICAgc29mdHdhcmUgaXMgdXNpbmcgdGhlIG1vc3QgcG93ZXIuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBvdXQgbW9yZSBhYm91dCBQb3dlclRPUCBhdAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovLzAxLm9yZy9wb3dlcnRvcC8nPjwvdWxpbms+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T1Byb2ZpbGU6PC9lbXBoYXNpcz4gQSBzeXN0ZW0td2lkZSBwcm9maWxlciBmb3IgTGludXgKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtcyB0aGF0IGlzIGNhcGFibGUgb2YgcHJvZmlsaW5nIGFsbCBydW5uaW5nIGNvZGUgYXQgbG93IG92ZXJoZWFkLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgb3V0IG1vcmUgYWJvdXQgT1Byb2ZpbGUgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL29wcm9maWxlLnNvdXJjZWZvcmdlLm5ldC9hYm91dC8nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZXMgb24gaG93IHRvIHNldHVwIGFuZCB1c2UgdGhpcyB0b29sLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19QUk9GX1VSTDsjcHJvZmlsZS1tYW51YWwtb3Byb2ZpbGUnPk9Qcm9maWxlPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QZXJmOjwvZW1waGFzaXM+IFBlcmZvcm1hbmNlIGNvdW50ZXJzIGZvciBMaW51eCB1c2VkCisgICAgICAgICAgICAgICAgICAgIHRvIGtlZXAgdHJhY2sgb2YgY2VydGFpbiB0eXBlcyBvZiBoYXJkd2FyZSBhbmQgc29mdHdhcmUgZXZlbnRzLgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZSB0eXBlcyBvZiBjb3VudGVycyBzZWUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9wZXJmLndpa2kua2VybmVsLm9yZy8nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZXMgb24gaG93IHRvIHNldHVwIGFuZCB1c2UgdGhpcyB0b29sLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19QUk9GX1VSTDsjcHJvZmlsZS1tYW51YWwtcGVyZic+cGVyZjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3lzdGVtVGFwOjwvZW1waGFzaXM+IEEgZnJlZSBzb2Z0d2FyZSBpbmZyYXN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICB0aGF0IHNpbXBsaWZpZXMgaW5mb3JtYXRpb24gZ2F0aGVyaW5nIGFib3V0IGEgcnVubmluZyBMaW51eCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgaW5mb3JtYXRpb24gaGVscHMgeW91IGRpYWdub3NlIHBlcmZvcm1hbmNlIG9yIGZ1bmN0aW9uYWwgcHJvYmxlbXMuCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbVRhcCBpcyBub3QgYXZhaWxhYmxlIGFzIGEgdXNlci1zcGFjZSB0b29sIHRocm91Z2ggdGhlIEVjbGlwc2UgSURFIFlvY3RvIFBsdWctaW4uCisgICAgICAgICAgICAgICAgICAgIFNlZSA8dWxpbmsgdXJsPSdodHRwOi8vc291cmNld2FyZS5vcmcvc3lzdGVtdGFwJz48L3VsaW5rPiBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICBvbiBTeXN0ZW1UYXAuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlcyBvbiBob3cgdG8gc2V0dXAgYW5kIHVzZSB0aGlzIHRvb2wsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyNwcm9maWxlLW1hbnVhbC1zeXN0ZW10YXAnPlN5c3RlbVRhcDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MdHRuZy11c3Q6PC9lbXBoYXNpcz4gQSBVc2VyLXNwYWNlIFRyYWNlciBkZXNpZ25lZCB0bworICAgICAgICAgICAgICAgICAgICBwcm92aWRlIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHVzZXItc3BhY2UgYWN0aXZpdHkuCisgICAgICAgICAgICAgICAgICAgIFNlZSA8dWxpbmsgdXJsPSdodHRwOi8vbHR0bmcub3JnL3VzdCc+PC91bGluaz4gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gTHR0bmctdXN0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1tYW51YWwtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NmJlNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMjcgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3Blcm1hbGlua3MueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9mb3JtYWwub2JqZWN0LmhlYWRpbmcueHNsIi8+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJ2FkdC1zdHlsZS5jc3MnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIiBzZWxlY3Q9IkEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmlkLmF0dHJpYnV0ZXMiIHNlbGVjdD0iMSIgLz4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1tYW51YWwtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1tYW51YWwtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2JhNWY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0CisJeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisJeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKwl2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworICA8eHNsOmltcG9ydAorCSAgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVua2VyLm91dHB1dC5pbmRlbnQiIHNlbGVjdD0iJ3llcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5xdWlldGx5IiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5maXJzdC5zZWN0aW9ucyIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuc2VjdGlvbi5kZXB0aCIgc2VsZWN0PSIxMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVzZS5pZC5hcy5maWxlbmFtZSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0idWxpbmsudGFyZ2V0IiBzZWxlY3Q9Iidfc2VsZiciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYmFzZS5kaXIiIHNlbGVjdD0iJ2h0bWwvYWR0LW1hbnVhbC8nIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9IicuLi9ib29rLmNzcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJlY2xpcHNlLm1hbmlmZXN0IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjcmVhdGUucGx1Z2luLnhtbCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic3VwcHJlc3MubmF2aWdhdGlvbiIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUuaW5kZXgiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1tYW51YWwtaW50cm8ueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LW1hbnVhbC1pbnRyby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0ZmRmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1tYW51YWwtaW50cm8ueG1sCkBAIC0wLDAgKzEsMzMgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdhZHQtbWFudWFsLWludHJvJz4KKzx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFdlbGNvbWUgdG8gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgIFRoaXMgbWFudWFsIHByb3ZpZGVzIGluZm9ybWF0aW9uIHRoYXQgbGV0cyB5b3UgYmVnaW4gZGV2ZWxvcGluZyBhcHBsaWNhdGlvbnMKKyAgICAgICAgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGFuIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IGVudmlyb25tZW50IGJhc2VkIG9uCisgICAgICAgIGFuIEFwcGxpY2F0aW9uIERldmVsb3BtZW50IFRvb2xraXQgKEFEVCkgYW5kIHRoZSBhdmFpbGFiaWxpdHkgb2Ygc3RhbmQtYWxvbmUKKyAgICAgICAgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucyBhbmQgb3RoZXIgdG9vbHMuCisgICAgICAgIFRoaXMgbWFudWFsIGRlc2NyaWJlcyB0aGUgQURUIGFuZCBob3cgeW91IGNhbiBjb25maWd1cmUgYW5kIGluc3RhbGwgaXQsCisgICAgICAgIGhvdyB0byBhY2Nlc3MgYW5kIHVzZSB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucywgaG93IHRvCisgICAgICAgIGN1c3RvbWl6ZSB0aGUgZGV2ZWxvcG1lbnQgcGFja2FnZXMgaW5zdGFsbGF0aW9uLAorICAgICAgICBob3cgdG8gdXNlIGNvbW1hbmQtbGluZSBkZXZlbG9wbWVudCBmb3IgYm90aCBBdXRvdG9vbHMtYmFzZWQgYW5kCisgICAgICAgIE1ha2VmaWxlLWJhc2VkIHByb2plY3RzLCBhbmQgYW4gaW50cm9kdWN0aW9uIHRvIHRoZQorICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSd0cmFkZSc+RWNsaXBzZTwvdHJhZGVtYXJrPiBJREUgWW9jdG8gUGx1Zy1pbi4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGUgQURUIGlzIGRpc3RyaWJ1dGlvbi1uZXV0cmFsIGFuZCBkb2VzIG5vdCByZXF1aXJlIHRoZSBZb2N0bworICAgICAgICAgICAgUHJvamVjdCByZWZlcmVuY2UgZGlzdHJpYnV0aW9uLCB3aGljaCBpcyBjYWxsZWQgUG9reS4KKyAgICAgICAgICAgIFRoaXMgbWFudWFsLCBob3dldmVyLCB1c2VzIGV4YW1wbGVzIHRoYXQgdXNlIHRoZSBQb2t5IGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LW1hbnVhbC54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtbWFudWFsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2U2MmM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LW1hbnVhbC54bWwKQEAgLTAsMCArMSwxMzUgQEAKKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxib29rIGlkPSdhZHQtbWFudWFsJyBsYW5nPSdlbicKKyAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIgorICAgICAgeG1sbnM9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICAgICAgPgorICAgIDxib29raW5mbz4KKworICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSdmaWd1cmVzL2FkdC10aXRsZS5wbmcnCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0nU1ZHJworICAgICAgICAgICAgICAgICAgICBhbGlnbj0nbGVmdCcgc2NhbGVmaXQ9JzEnIHdpZHRoPScxMDAlJy8+CisgICAgICAgICAgICA8L2ltYWdlb2JqZWN0PgorICAgICAgICA8L21lZGlhb2JqZWN0PgorCisgICAgICAgIDx0aXRsZT4KKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUKKyAgICAgICAgPC90aXRsZT4KKworICAgICAgICA8YXV0aG9yZ3JvdXA+CisgICAgICAgICAgICA8YXV0aG9yPgorICAgICAgICAgICAgICAgIDxmaXJzdG5hbWU+SmVzc2ljYTwvZmlyc3RuYW1lPiA8c3VybmFtZT5aaGFuZzwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkludGVsIENvcnBvcmF0aW9uPC9vcmduYW1lPgorICAgICAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgPGVtYWlsPmplc3NpY2EuemhhbmdAaW50ZWwuY29tPC9lbWFpbD4KKyAgICAgICAgICAgIDwvYXV0aG9yPgorICAgICAgICA8L2F1dGhvcmdyb3VwPgorCisgICAgICAgIDxyZXZoaXN0b3J5PgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4wPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+NiBBcHJpbCAyMDExPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjAgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjAuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjIzIE1heSAyMDExPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjAuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjYgT2N0b2JlciAyMDExPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjI8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDEyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjIgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjM8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTI8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuMyBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTM8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxMzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS41IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS41LjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5KYW51YXJ5IDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNS4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS42PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS42IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS43PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjcgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjg8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjggUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjk8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICA8L3Jldmhpc3Rvcnk+CisKKyAgICA8Y29weXJpZ2h0PgorICAgICAgPHllYXI+JkNPUFlSSUdIVF9ZRUFSOzwveWVhcj4KKyAgICAgIDxob2xkZXI+TGludXggRm91bmRhdGlvbjwvaG9sZGVyPgorICAgIDwvY29weXJpZ2h0PgorCisgICAgPGxlZ2Fsbm90aWNlPgorICAgICAgPHBhcmE+CisgICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudCB1bmRlcgorICAgICAgICB0aGUgdGVybXMgb2YgdGhlIDx1bGluayB0eXBlPSJodHRwIiB1cmw9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzIuMC91ay8iPkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMi4wIFVLOiBFbmdsYW5kICZhbXA7IFdhbGVzPC91bGluaz4gYXMgcHVibGlzaGVkIGJ5IENyZWF0aXZlIENvbW1vbnMuCisgICAgICA8L3BhcmE+CisgICAgICA8bm90ZT4KKyAgICAgICAgICBGb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbWFudWFsIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlLCBzZWUgdGhlCisgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsnPllvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPgorICAgICAgICAgIGZyb20gdGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZS4KKyAgICAgIDwvbm90ZT4KKworICAgIDwvbGVnYWxub3RpY2U+CisKKyAgICA8L2Jvb2tpbmZvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYWR0LW1hbnVhbC1pbnRyby54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImFkdC1pbnRyby54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImFkdC1wcmVwYXJlLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYWR0LXBhY2thZ2UueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJhZHQtY29tbWFuZC54bWwiLz4KKworPCEtLSAgICA8aW5kZXggaWQ9J2luZGV4Jz4KKyAgICAgIDx0aXRsZT5JbmRleDwvdGl0bGU+CisgICAgPC9pbmRleD4KKy0tPgorCis8L2Jvb2s+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1wYWNrYWdlLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1wYWNrYWdlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2ZmYTA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LXBhY2thZ2UueG1sCkBAIC0wLDAgKzEsMTAyIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nYWR0LXBhY2thZ2UnPgorPHRpdGxlPk9wdGlvbmFsbHkgQ3VzdG9taXppbmcgdGhlIERldmVsb3BtZW50IFBhY2thZ2VzIEluc3RhbGxhdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQmVjYXVzZSB0aGUgWW9jdG8gUHJvamVjdCBpcyBzdWl0ZWQgZm9yIGVtYmVkZGVkIExpbnV4IGRldmVsb3BtZW50LCBpdCBpcworICAgICAgICBsaWtlbHkgdGhhdCB5b3Ugd2lsbCBuZWVkIHRvIGN1c3RvbWl6ZSB5b3VyIGRldmVsb3BtZW50IHBhY2thZ2VzIGluc3RhbGxhdGlvbi4KKyAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgZGV2ZWxvcGluZyBhIG1pbmltYWwgaW1hZ2UsIHRoZW4geW91IG1pZ2h0IG5vdCBuZWVkCisgICAgICAgIGNlcnRhaW4gcGFja2FnZXMgKGUuZy4gZ3JhcGhpY3Mgc3VwcG9ydCBwYWNrYWdlcykuCisgICAgICAgIFRodXMsIHlvdSB3b3VsZCBsaWtlIHRvIGJlIGFibGUgdG8gcmVtb3ZlIHRob3NlIHBhY2thZ2VzIGZyb20geW91ciB0YXJnZXQgc3lzcm9vdC4KKyAgICA8L3BhcmE+CisKKzxzZWN0aW9uIGlkPSdwYWNrYWdlLW1hbmFnZW1lbnQtc3lzdGVtcyc+CisgICAgPHRpdGxlPlBhY2thZ2UgTWFuYWdlbWVudCBTeXN0ZW1zPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzdXBwb3J0cyB0aGUgZ2VuZXJhdGlvbiBvZiBzeXNyb290IGZpbGVzIHVzaW5nCisgICAgICAgIHRocmVlIGRpZmZlcmVudCBQYWNrYWdlIE1hbmFnZW1lbnQgU3lzdGVtcyAoUE1TKToKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T1BLRzo8L2VtcGhhc2lzPiBBIGxlc3Mgd2VsbCBrbm93biBQTVMgd2hvc2UgdXNlCisgICAgICAgICAgICAgICAgb3JpZ2luYXRlZCBpbiB0aGUgT3BlbkVtYmVkZGVkIGFuZCBPcGVuV3J0IGVtYmVkZGVkIExpbnV4IHByb2plY3RzLgorICAgICAgICAgICAgICAgIFRoaXMgUE1TIHdvcmtzIHdpdGggZmlsZXMgcGFja2FnZWQgaW4gYW4gPGZpbGVuYW1lPi5pcGs8L2ZpbGVuYW1lPiBmb3JtYXQuCisgICAgICAgICAgICAgICAgU2VlIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvT3BrZyc+PC91bGluaz4gZm9yIG1vcmUKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCBPUEtHLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SUE06PC9lbXBoYXNpcz4gQSBtb3JlIHdpZGVseSBrbm93biBQTVMgaW50ZW5kZWQgZm9yIEdOVS9MaW51eAorICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbnMuCisgICAgICAgICAgICAgICAgVGhpcyBQTVMgd29ya3Mgd2l0aCBmaWxlcyBwYWNrYWdlZCBpbiBhbiA8ZmlsZW5hbWU+LnJtczwvZmlsZW5hbWU+IGZvcm1hdC4KKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGN1cnJlbnRseSBpbnN0YWxscyB0aHJvdWdoIHRoaXMgUE1TIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgU2VlIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUlBNX1BhY2thZ2VfTWFuYWdlcic+PC91bGluaz4KKyAgICAgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBSUE0uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRlYmlhbjo8L2VtcGhhc2lzPiBUaGUgUE1TIGZvciBEZWJpYW4tYmFzZWQgc3lzdGVtcworICAgICAgICAgICAgICAgIGlzIGJ1aWx0IG9uIG1hbnkgUE1TIHRvb2xzLgorICAgICAgICAgICAgICAgIFRoZSBsb3dlci1sZXZlbCBQTVMgdG9vbCA8ZmlsZW5hbWU+ZHBrZzwvZmlsZW5hbWU+IGZvcm1zIHRoZSBiYXNlIG9mIHRoZSBEZWJpYW4gUE1TLgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBkcGtnIHNlZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRHBrZyc+PC91bGluaz4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLXRoZS1wbXMnPgorICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgUE1TPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGljaGV2ZXIgUE1TIHlvdSBhcmUgdXNpbmcsIHlvdSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICBmaWxlIGlzIHNldCB0byByZWZsZWN0IHRoYXQgc3lzdGVtLgorICAgICAgICBUaGUgZmlyc3QgdmFsdWUgeW91IGNob29zZSBmb3IgdGhlIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgcGFja2FnZSBmaWxlIGZvcm1hdCBmb3IgdGhlIHJvb3QKKyAgICAgICAgZmlsZXN5c3RlbSBhdCBzeXNyb290LgorICAgICAgICBBZGRpdGlvbmFsIHZhbHVlcyBzcGVjaWZ5IGFkZGl0aW9uYWwgZm9ybWF0cyBmb3IgY29udmVuaWVuY2Ugb3IgdGVzdGluZy4KKyAgICAgICAgU2VlIHRoZSA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlIGZvcgorICAgICAgICBkZXRhaWxzLgorICAgIDwvcGFyYT4KKworICAgIDxub3RlPgorICAgICAgICBGb3IgYnVpbGQgcGVyZm9ybWFuY2UgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgUE1TLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZS5iYmNsYXNzPC9maWxlbmFtZT48L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgIDwvbm90ZT4KKworICAgIDxwYXJhPgorICAgICAgICBBcyBhbiBleGFtcGxlLCBjb25zaWRlciBhIHNjZW5hcmlvIHdoZXJlIHlvdSBhcmUgdXNpbmcgT1BLRyBhbmQgeW91IHdhbnQgdG8gYWRkCisgICAgICAgIHRoZSA8ZmlsZW5hbWU+bGliZ2xhZGU8L2ZpbGVuYW1lPiBwYWNrYWdlIHRvIHRoZSB0YXJnZXQgc3lzcm9vdC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRmlyc3QsIHlvdSBzaG91bGQgZ2VuZXJhdGUgdGhlIElQSyBmaWxlIGZvciB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmxpYmdsYWRlPC9maWxlbmFtZT4gcGFja2FnZSBhbmQgYWRkIGl0CisgICAgICAgIGludG8gYSB3b3JraW5nIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4gcmVwb3NpdG9yeS4KKyAgICAgICAgVXNlIHRoZXNlIGNvbW1hbmRzOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaWJnbGFkZQorICAgICAkIGJpdGJha2UgcGFja2FnZS1pbmRleAorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIE5leHQsIHNvdXJjZSB0aGUgY3Jvc3MtdG9vbGNoYWluIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBmb3VuZCBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICBGb2xsb3cgdGhhdCBieSBzZXR0aW5nIHVwIHRoZSBpbnN0YWxsYXRpb24gZGVzdGluYXRpb24gdG8gcG9pbnQgdG8geW91cgorICAgICAgICBzeXNyb290IGFzIDxyZXBsYWNlYWJsZT5zeXNyb290X2RpcjwvcmVwbGFjZWFibGU+LgorICAgICAgICBGaW5hbGx5LCBoYXZlIGFuIE9QS0cgY29uZmlndXJhdGlvbiBmaWxlIDxyZXBsYWNlYWJsZT5jb25mX2ZpbGU8L3JlcGxhY2VhYmxlPgorICAgICAgICB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgeW91IGhhdmUganVzdCBjcmVhdGVkLgorICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgZm9ybXMgc2hvdWxkIG5vdyB3b3JrOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgb3BrZy1jbCDigJNmIDxyZXBsYWNlYWJsZT5jb25mX2ZpbGU8L3JlcGxhY2VhYmxlPiAtbyA8cmVwbGFjZWFibGU+c3lzcm9vdF9kaXI8L3JlcGxhY2VhYmxlPiB1cGRhdGUKKyAgICAgJCBvcGtnLWNsIOKAk2YgPHJlcGxhY2VhYmxlPmNjb25mX2ZpbGU8L3JlcGxhY2VhYmxlPiAtbyA8cmVwbGFjZWFibGU+c3lzcm9vdF9kaXI8L3JlcGxhY2VhYmxlPiBcCisgICAgICAgIC0tZm9yY2Utb3ZlcndyaXRlIGluc3RhbGwgbGliZ2xhZGUKKyAgICAgJCBvcGtnLWNsIOKAk2YgPHJlcGxhY2VhYmxlPmNjb25mX2ZpbGU8L3JlcGxhY2VhYmxlPiAtbyA8cmVwbGFjZWFibGU+c3lzcm9vdF9kaXI8L3JlcGxhY2VhYmxlPiBcCisgICAgICAgIC0tZm9yY2Utb3ZlcndyaXRlIGluc3RhbGwgbGliZ2xhZGUtZGJnCisgICAgICQgb3BrZy1jbCDigJNmIDxyZXBsYWNlYWJsZT5jb25mX2ZpbGUmZ3Q7IC1vIDwvcmVwbGFjZWFibGU+c3lzcm9vdF9kaXImZ3Q7IFwKKyAgICAgICAgLS1mb3JjZS1vdmVyd3JpdGUgaW5zdGFsbCBsaWJnbGFkZS1kZXYKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LXByZXBhcmUueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LXByZXBhcmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZjU2OWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtcHJlcGFyZS54bWwKQEAgLTAsMCArMSw5ODQgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdhZHQtcHJlcGFyZSc+CisKKzx0aXRsZT5QcmVwYXJpbmcgZm9yIEFwcGxpY2F0aW9uIERldmVsb3BtZW50PC90aXRsZT4KKworPHBhcmE+CisgICAgSW4gb3JkZXIgdG8gZGV2ZWxvcCBhcHBsaWNhdGlvbnMsIHlvdSBuZWVkIHNldCB1cCB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtLgorICAgIFNldmVyYWwgd2F5cyBleGlzdCB0aGF0IGFsbG93IHlvdSB0byBpbnN0YWxsIGNyb3NzLWRldmVsb3BtZW50IHRvb2xzLCBRRU1VLCB0aGUKKyAgICBFY2xpcHNlIFlvY3RvIFBsdWctaW4sIGFuZCBvdGhlciB0b29scy4KKyAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIGhvdyB0byBwcmVwYXJlIGZvciBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudC4KKzwvcGFyYT4KKworPHNlY3Rpb24gaWQ9J2luc3RhbGxpbmctdGhlLWFkdCc+CisgICAgPHRpdGxlPkluc3RhbGxpbmcgdGhlIEFEVCBhbmQgVG9vbGNoYWluczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyBpbnN0YWxsYXRpb24gbWV0aG9kcyB0aGF0IHNldCB1cCB2YXJ5aW5nCisgICAgICAgIGRlZ3JlZXMgb2YgdG9vbCBhdmFpbGFiaWxpdHkgb24geW91ciBzeXN0ZW0uCisgICAgICAgIFJlZ2FyZGxlc3Mgb2YgdGhlIGluc3RhbGxhdGlvbiBtZXRob2QgeW91IGNob29zZSwKKyAgICAgICAgeW91IG11c3QgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+IHRoZSBjcm9zcy10b29sY2hhaW4KKyAgICAgICAgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LCB3aGljaCBlc3RhYmxpc2hlcyBzZXZlcmFsIGtleQorICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGJlZm9yZSB5b3UgdXNlIGEgdG9vbGNoYWluLgorICAgICAgICBTZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdzZXR0aW5nLXVwLXRoZS1jcm9zcy1kZXZlbG9wbWVudC1lbnZpcm9ubWVudCc+U2V0dGluZyBVcCB0aGUgQ3Jvc3MtRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L2xpbms+IgorICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxub3RlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEF2b2lkIG1peGluZyBpbnN0YWxsYXRpb24gbWV0aG9kcyB3aGVuIGluc3RhbGxpbmcgdG9vbGNoYWlucyBmb3IKKyAgICAgICAgICAgIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGF2b2lkIHVzaW5nIHRoZSBBRFQgSW5zdGFsbGVyIHRvIGluc3RhbGwgc29tZQorICAgICAgICAgICAgdG9vbGNoYWlucyBhbmQgdGhlbiBoYW5kLWluc3RhbGxpbmcgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucworICAgICAgICAgICAgYnkgcnVubmluZyB0aGUgdG9vbGNoYWluIGluc3RhbGxlciBmb3IgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICBNaXhpbmcgaW5zdGFsbGF0aW9uIG1ldGhvZHMgY2FuIHJlc3VsdCBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZQorICAgICAgICAgICAgQURUIEluc3RhbGxlciBiZWNvbWVzIHVucmVsaWFibGUgYW5kIG1pZ2h0IG5vdCBpbnN0YWxsIHRoZQorICAgICAgICAgICAgdG9vbGNoYWluLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgbXVzdCBtaXggaW5zdGFsbGF0aW9uIG1ldGhvZHMsIHlvdSBtaWdodCBhdm9pZCBwcm9ibGVtcyBieQorICAgICAgICAgICAgZGVsZXRpbmcgPGZpbGVuYW1lPi92YXIvbGliL29wa2c8L2ZpbGVuYW1lPiwgdGh1cyBwdXJnaW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm9wa2c8L2ZpbGVuYW1lPiBwYWNrYWdlIG1ldGFkYXRhLgorICAgICAgICA8L3BhcmE+CisgICAgPC9ub3RlPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzZSB0aGUgQURUIGluc3RhbGxlciBzY3JpcHQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIGluc3RhbGwgdGhlIEFEVCBiZWNhdXNlIGl0CisgICAgICAgICAgICAgICAgYXV0b21hdGVzIG11Y2ggb2YgdGhlIHByb2Nlc3MgZm9yIHlvdS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNhbiBjb25maWd1cmUgdGhlIGluc3RhbGxhdGlvbiB0byBpbnN0YWxsIHRoZSBRRU1VIGVtdWxhdG9yCisgICAgICAgICAgICAgICAgYW5kIHRoZSB1c2VyLXNwYWNlIE5GUywgc3BlY2lmeSB3aGljaCByb290IGZpbGVzeXN0ZW0gcHJvZmlsZXMgdG8gZG93bmxvYWQsCisgICAgICAgICAgICAgICAgYW5kIGRlZmluZSB0aGUgdGFyZ2V0IHN5c3Jvb3QgbG9jYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzZSBhbiBleGlzdGluZyB0b29sY2hhaW46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBVc2luZyB0aGlzIG1ldGhvZCwgeW91IHNlbGVjdCBhbmQgZG93bmxvYWQgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljCisgICAgICAgICAgICAgICAgdG9vbGNoYWluIGluc3RhbGxlciBhbmQgdGhlbiBydW4gdGhlIHNjcmlwdCB0byBoYW5kLWluc3RhbGwgdGhlIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIHRoaXMgbWV0aG9kLCB5b3UganVzdCBnZXQgdGhlIGNyb3NzLXRvb2xjaGFpbiBhbmQgUUVNVSAtIHlvdSBkbyBub3QKKyAgICAgICAgICAgICAgICBnZXQgYW55IG9mIHRoZSBvdGhlciBtZW50aW9uZWQgYmVuZWZpdHMgaGFkIHlvdSBydW4gdGhlIEFEVCBJbnN0YWxsZXIgc2NyaXB0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2UgdGhlIHRvb2xjaGFpbiBmcm9tIHdpdGhpbiB0aGUgQnVpbGQgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgSWYgeW91IGFscmVhZHkgaGF2ZSBhCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICB5b3UgY2FuIGJ1aWxkIHRoZSBjcm9zcy10b29sY2hhaW4gd2l0aGluIHRoZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgbGlrZSB0aGUgcHJldmlvdXMgbWV0aG9kIG1lbnRpb25lZCwgeW91IG9ubHkgZ2V0IHRoZSBjcm9zcy10b29sY2hhaW4gYW5kIFFFTVUgLSB5b3UKKyAgICAgICAgICAgICAgICBkbyBub3QgZ2V0IGFueSBvZiB0aGUgb3RoZXIgYmVuZWZpdHMgd2l0aG91dCB0YWtpbmcgc2VwYXJhdGUgc3RlcHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZy10aGUtYWR0LWluc3RhbGxlcic+CisgICAgICAgIDx0aXRsZT5Vc2luZyB0aGUgQURUIEluc3RhbGxlcjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBydW4gdGhlIEFEVCBJbnN0YWxsZXIsIHlvdSBuZWVkIHRvIGdldCB0aGUgQURUIEluc3RhbGxlciB0YXJiYWxsLCBiZSBzdXJlCisgICAgICAgICAgICB5b3UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGhvc3QgZGV2ZWxvcG1lbnQgcGFja2FnZXMgdGhhdCBzdXBwb3J0IHRoZSBBRFQgSW5zdGFsbGVyLAorICAgICAgICAgICAgYW5kIHRoZW4gcnVuIHRoZSBBRFQgSW5zdGFsbGVyIFNjcmlwdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiB0aGUgaG9zdCBwYWNrYWdlcyBuZWVkZWQgdG8gc3VwcG9ydCBBRFQgaW5zdGFsbGF0aW9uIGFuZCB1c2UsIHNlZSB0aGUKKyAgICAgICAgICAgICJBRFQgSW5zdGFsbGVyIEV4dHJhcyIgbGlzdHMgaW4gdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVxdWlyZWQtcGFja2FnZXMtZm9yLXRoZS1ob3N0LWRldmVsb3BtZW50LXN5c3RlbSc+UmVxdWlyZWQgUGFja2FnZXMgZm9yIHRoZSBIb3N0IERldmVsb3BtZW50IFN5c3RlbTwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICBvZiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2dldHRpbmctdGhlLWFkdC1pbnN0YWxsZXItdGFyYmFsbCc+CisgICAgICAgICAgICA8dGl0bGU+R2V0dGluZyB0aGUgQURUIEluc3RhbGxlciBUYXJiYWxsPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIEFEVCBJbnN0YWxsZXIgaXMgY29udGFpbmVkIGluIHRoZSBBRFQgSW5zdGFsbGVyIHRhcmJhbGwuCisgICAgICAgICAgICAgICAgWW91IGNhbiBnZXQgdGhlIHRhcmJhbGwgdXNpbmcgZWl0aGVyIG9mIHRoZXNlIG1ldGhvZHM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Eb3dubG9hZCB0aGUgVGFyYmFsbDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkb3dubG9hZCB0aGUgdGFyYmFsbCBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fQURUSU5TVEFMTEVSX0RMX1VSTDsnPjwvdWxpbms+IGludG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGFueSBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgdGhlIFRhcmJhbGw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdG8gZ2VuZXJhdGUgdGhlIHRhcmJhbGwgaW5zaWRlIGFuIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IHVzZSBCaXRCYWtlIHRvIGdlbmVyYXRlIHRoZSBBRFQgSW5zdGFsbGVyCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJiYWxsLCB5b3UgbXVzdCA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgICg8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPikKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgaW4gdGhlIFNvdXJjZSBEaXJlY3RvcnkgYmVmb3JlIHJ1bm5pbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgdGhhdCBjcmVhdGVzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgdGFyYmFsbC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGV4YW1wbGUgY29tbWFuZHMgZXN0YWJsaXNoCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrIG91dCB0aGUgY3VycmVudCByZWxlYXNlIGJyYW5jaCwgc2V0IHVwIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgZW52aXJvbm1lbnQgd2hpbGUgYWxzbyBjcmVhdGluZyB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5LCBhbmQgcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIHRoYXQgcmVzdWx0cyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmJhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5L2J1aWxkL3RtcC9kZXBsb3kvc2RrL2FkdF9pbnN0YWxsZXIudGFyLmJ6MjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmVmb3JlIHVzaW5nIEJpdEJha2UgdG8gYnVpbGQgdGhlIEFEVCB0YXJiYWxsLCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cmUgdG8gbWFrZSBzdXJlIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaXMgcHJvcGVybHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdXNlci1jb25maWd1cmF0aW9uJz5Vc2VyIENvbmZpZ3VyYXRpb248L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reQorICAgICAkIGNkIHBva3kKKyAgICAgJCBnaXQgY2hlY2tvdXQgLWIgJkRJU1RST19OQU1FOyBvcmlnaW4vJkRJU1RST19OQU1FOworICAgICAkIHNvdXJjZSAmT0VfSU5JVF9GSUxFOworICAgICAkIGJpdGJha2UgYWR0LWluc3RhbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLWFuZC1ydW5uaW5nLXRoZS1hZHQtaW5zdGFsbGVyLXNjcmlwdCc+CisgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgYW5kIFJ1bm5pbmcgdGhlIEFEVCBJbnN0YWxsZXIgU2NyaXB0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVmb3JlIHJ1bm5pbmcgdGhlIEFEVCBJbnN0YWxsZXIgc2NyaXB0LCB5b3UgbmVlZCB0byB1bnBhY2sgdGhlIHRhcmJhbGwuCisgICAgICAgICAgICAgICAgWW91IGNhbiB1bnBhY2sgdGhlIHRhcmJhbGwgaW4gYW55IGRpcmVjdG9yeSB5b3Ugd2lzaC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyBjb21tYW5kIGNvcGllcyB0aGUgQURUIEluc3RhbGxlciB0YXJiYWxsIGZyb20gd2hlcmUKKyAgICAgICAgICAgICAgICBpdCB3YXMgYnVpbHQgaW50byB0aGUgaG9tZSBkaXJlY3RvcnkgYW5kIHRoZW4gdW5wYWNrcyB0aGUgdGFyYmFsbCBpbnRvCisgICAgICAgICAgICAgICAgYSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG5hbWVkIDxmaWxlbmFtZT5hZHQtaW5zdGFsbGVyPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4KKyAgICAgJCBjcCBwb2t5L2J1aWxkL3RtcC9kZXBsb3kvc2RrL2FkdF9pbnN0YWxsZXIudGFyLmJ6MiAkSE9NRQorICAgICAkIHRhciAteGpmIGFkdF9pbnN0YWxsZXIudGFyLmJ6MgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBVbnBhY2tpbmcgaXQgY3JlYXRlcyB0aGUgZGlyZWN0b3J5IDxmaWxlbmFtZT5hZHQtaW5zdGFsbGVyPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgd2hpY2ggY29udGFpbnMgdGhlIEFEVCBJbnN0YWxsZXIgc2NyaXB0ICg8ZmlsZW5hbWU+YWR0X2luc3RhbGxlcjwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgIGFuZCBpdHMgY29uZmlndXJhdGlvbiBmaWxlICg8ZmlsZW5hbWU+YWR0X2luc3RhbGxlci5jb25mPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWZvcmUgeW91IHJ1biB0aGUgc2NyaXB0LCBob3dldmVyLCB5b3Ugc2hvdWxkIGV4YW1pbmUgdGhlIEFEVCBJbnN0YWxsZXIgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgYW5kIGJlIHN1cmUgeW91IGFyZSBnb2luZyB0byBnZXQgd2hhdCB5b3Ugd2FudC4KKyAgICAgICAgICAgICAgICBZb3VyIGNvbmZpZ3VyYXRpb25zIGRldGVybWluZSB3aGljaCBrZXJuZWwgYW5kIGZpbGVzeXN0ZW0gaW1hZ2UgYXJlIGRvd25sb2FkZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXNjcmliZXMgdGhlIGNvbmZpZ3VyYXRpb25zIHlvdSBjYW4gZGVmaW5lIGZvciB0aGUgQURUIEluc3RhbGxlci4KKyAgICAgICAgICAgICAgICBGb3IgY29uZmlndXJhdGlvbiB2YWx1ZXMgYW5kIHJlc3RyaWN0aW9ucywgc2VlIHRoZSBjb21tZW50cyBpbgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+YWR0LWluc3RhbGxlci5jb25mPC9maWxlbmFtZT4gZmlsZToKKworICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+WU9DVE9BRFRfUkVQTzwvZmlsZW5hbWU+OiBUaGlzIGFyZWEKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIHRoZSBJUEtHLWJhc2VkIHBhY2thZ2VzIGFuZCB0aGUgcm9vdCBmaWxlc3lzdGVtIHVwb24gd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnN0YWxsYXRpb24gaXMgYmFzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBzZXQgdXAgeW91ciBvd24gSVBLRyByZXBvc2l0b3J5IHBvaW50ZWQgdG8gYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ZT0NUT0FEVF9SRVBPPC9maWxlbmFtZT4sIHlvdSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9sbG93cyB0aGUgc2FtZSBsYXlvdXQgYXMgdGhlIHJlZmVyZW5jZSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCB1cCBhdCA8dWxpbmsgdXJsPSdodHRwOi8vYWR0cmVwby55b2N0b3Byb2plY3Qub3JnJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFsc28sIHlvdXIgcmVwb3NpdG9yeSBuZWVkcyB0byBiZSBhY2Nlc3NpYmxlIHRocm91Z2ggSFRUUC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5ZT0NUT0FEVF9UQVJHRVRTPC9maWxlbmFtZT46IFRoZSBtYWNoaW5lCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgYXJjaGl0ZWN0dXJlcyBmb3Igd2hpY2ggeW91IHdhbnQgdG8gc2V0IHVwIGNyb3NzLWRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+WU9DVE9BRFRfUUVNVTwvZmlsZW5hbWU+OiBJbmRpY2F0ZXMgd2hldGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgb3Igbm90IHRvIGluc3RhbGwgdGhlIGVtdWxhdG9yIFFFTVUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+WU9DVE9BRFRfTkZTX1VUSUw8L2ZpbGVuYW1lPjogSW5kaWNhdGVzIHdoZXRoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIG5vdCB0byBpbnN0YWxsIHVzZXItbW9kZSBORlMuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIEVjbGlwc2UgSURFIFlvY3RvIHBsdWctaW4gYWdhaW5zdCBRRU1VLAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IHNob3VsZCBpbnN0YWxsIE5GUy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPlRvIGJvb3QgUUVNVSBpbWFnZXMgdXNpbmcgb3VyIHVzZXJzcGFjZSBORlMgc2VydmVyLCB5b3UgbmVlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHJ1bm5pbmcgPGZpbGVuYW1lPnBvcnRtYXA8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+cnBjYmluZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgcnVubmluZyA8ZmlsZW5hbWU+cnBjYmluZDwvZmlsZW5hbWU+LCB5b3Ugd2lsbCBhbHNvIG5lZWQgdG8gYWRkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4taTwvZmlsZW5hbWU+IG9wdGlvbiB3aGVuIDxmaWxlbmFtZT5ycGNiaW5kPC9maWxlbmFtZT4gc3RhcnRzIHVwLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBtYWtlIHN1cmUgeW91IHVuZGVyc3RhbmQgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZiBkb2luZyB0aGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtaWdodCBhbHNvIGhhdmUgdG8gbW9kaWZ5IHlvdXIgZmlyZXdhbGwgc2V0dGluZ3MgdG8gYWxsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBORlMgYm9vdGluZyB0byB3b3JrLjwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5ZT0NUT0FEVF9ST09URlNfPC9maWxlbmFtZT48cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+OiBUaGUgcm9vdAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSBpbWFnZXMgeW91IHdhbnQgdG8gZG93bmxvYWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ZT0NUT0FEVF9JUEtHX1JFUE88L2ZpbGVuYW1lPiByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPllPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPjogVGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIHJvb3QgZmlsZXN5c3RlbSB1c2VkIHRvIGV4dHJhY3QgYW5kIGNyZWF0ZSB0aGUgdGFyZ2V0IHN5c3Jvb3QuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBtdXN0IGhhdmUgYmVlbiBzcGVjaWZpZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllPQ1RPQURUX1JPT1RGU188L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGRvd25sb2FkZWQgYm90aCA8ZmlsZW5hbWU+bWluaW1hbDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNhdG8tc2RrPC9maWxlbmFtZT4gaW1hZ2VzIGJ5IHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ZT0NUT0FEVF9ST09URlNfPC9maWxlbmFtZT48cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICB0byAibWluaW1hbCBzYXRvLXNkayIsIHRoZW4gPGZpbGVuYW1lPllPQ1RPQURUX1JPT1RGU188L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgc2V0IHRvIGVpdGhlciAibWluaW1hbCIgb3IgInNhdG8tc2RrIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPllPQ1RPQURUX1RBUkdFVF9TWVNST09UX0xPQ188L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT46IFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gb24gdGhlIGRldmVsb3BtZW50IGhvc3Qgd2hlcmUgdGhlIHRhcmdldCBzeXNyb290IGlzIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWZ0ZXIgeW91IGhhdmUgY29uZmlndXJlZCB0aGUgPGZpbGVuYW1lPmFkdF9pbnN0YWxsZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICAgICAgcnVuIHRoZSBpbnN0YWxsZXIgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCBhZHQtaW5zdGFsbGVyCisgICAgICQgLi9hZHRfaW5zdGFsbGVyCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE9uY2UgdGhlIGluc3RhbGxlciBiZWdpbnMgdG8gcnVuLCB5b3UgYXJlIGFza2VkIHRvIGVudGVyIHRoZQorICAgICAgICAgICAgICAgIGxvY2F0aW9uIGZvciBjcm9zcy10b29sY2hhaW4gaW5zdGFsbGF0aW9uLgorICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGxvY2F0aW9uIGlzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9vcHQvcG9reS88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5yZWxlYXNlPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgQWZ0ZXIgZWl0aGVyIGFjY2VwdGluZyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvciBzZWxlY3RpbmcgeW91cgorICAgICAgICAgICAgICAgIG93biBsb2NhdGlvbiwgeW91IGFyZSBwcm9tcHRlZCB0byBydW4gdGhlIGluc3RhbGxhdGlvbiBzY3JpcHQKKyAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZWx5IG9yIGluIHNpbGVudCBtb2RlLgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGNsb3NlbHkgbW9uaXRvciB0aGUgaW5zdGFsbGF0aW9uLAorICAgICAgICAgICAgICAgIGNob29zZSDigJxJ4oCdIGZvciBpbnRlcmFjdGl2ZSBtb2RlIHJhdGhlciB0aGFuIOKAnFPigJ0gZm9yIHNpbGVudCBtb2RlLgorICAgICAgICAgICAgICAgIEZvbGxvdyB0aGUgcHJvbXB0cyBmcm9tIHRoZSBzY3JpcHQgdG8gY29tcGxldGUgdGhlIGluc3RhbGxhdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSB0aGUgaW5zdGFsbGF0aW9uIGNvbXBsZXRlcywgdGhlIEFEVCwgd2hpY2ggaW5jbHVkZXMgdGhlCisgICAgICAgICAgICAgICAgY3Jvc3MtdG9vbGNoYWluLCBpcyBpbnN0YWxsZWQgaW4gdGhlIHNlbGVjdGVkIGluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBZb3Ugd2lsbCBub3RpY2UgZW52aXJvbm1lbnQgc2V0dXAgZmlsZXMgZm9yIHRoZSBjcm9zcy10b29sY2hhaW4KKyAgICAgICAgICAgICAgICBpbiB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSwgYW5kIGltYWdlIHRhcmJhbGxzIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hZHQtaW5zdGFsbGVyPC9maWxlbmFtZT4gZGlyZWN0b3J5IGFjY29yZGluZyB0byB5b3VyCisgICAgICAgICAgICAgICAgaW5zdGFsbGVyIGNvbmZpZ3VyYXRpb25zLCBhbmQgdGhlIHRhcmdldCBzeXNyb290IGxvY2F0ZWQKKyAgICAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllPQ1RPQURUX1RBUkdFVF9TWVNST09UX0xPQ188L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbHNvIGluIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZy1hbi1leGlzdGluZy10b29sY2hhaW4tdGFyYmFsbCc+CisgICAgICAgIDx0aXRsZT5Vc2luZyBhIENyb3NzLVRvb2xjaGFpbiBUYXJiYWxsPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHNpbXBseSBpbnN0YWxsIGEgY3Jvc3MtdG9vbGNoYWluIGJ5IGhhbmQsIHlvdSBjYW4KKyAgICAgICAgICAgIGRvIHNvIGJ5IHJ1bm5pbmcgdGhlIHRvb2xjaGFpbiBpbnN0YWxsZXIuCisgICAgICAgICAgICBUaGUgaW5zdGFsbGVyIGluY2x1ZGVzIHRoZSBwcmUtYnVpbHQgY3Jvc3MtdG9vbGNoYWluLCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gc2NyaXB0LCBhbmQgc3VwcG9ydCBmaWxlcy4KKyAgICAgICAgICAgIElmIHlvdSB1c2UgdGhpcyBtZXRob2QgdG8gaW5zdGFsbCB0aGUgY3Jvc3MtdG9vbGNoYWluLCB5b3UKKyAgICAgICAgICAgIG1pZ2h0IHN0aWxsIG5lZWQgdG8gaW5zdGFsbCB0aGUgdGFyZ2V0IHN5c3Jvb3QgYnkgaW5zdGFsbGluZyBhbmQKKyAgICAgICAgICAgIGV4dHJhY3RpbmcgaXQgc2VwYXJhdGVseS4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaW5zdGFsbCB0aGUgc3lzcm9vdCwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2V4dHJhY3RpbmctdGhlLXJvb3QtZmlsZXN5c3RlbSc+RXh0cmFjdGluZyB0aGUgUm9vdCBGaWxlc3lzdGVtPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzOgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2V0IHlvdXIgdG9vbGNoYWluIGluc3RhbGxlciB1c2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R28gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fVE9PTENIQUlOX0RMX1VSTDsnPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGZpbmQgdGhlIGZvbGRlciB0aGF0IG1hdGNoZXMgeW91ciBob3N0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgc3lzdGVtIChpLmUuIDxmaWxlbmFtZT5pNjg2PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgMzItYml0IG1hY2hpbmVzIG9yIDxmaWxlbmFtZT54ODZfNjQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciA2NC1iaXQgbWFjaGluZXMpLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5HbyBpbnRvIHRoYXQgZm9sZGVyIGFuZCBkb3dubG9hZCB0aGUgdG9vbGNoYWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVyIHdob3NlIG5hbWUgaW5jbHVkZXMgdGhlIGFwcHJvcHJpYXRlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdG9vbGNoYWlucyBwcm92aWRlZCBieSB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBiYXNlZCBvZmYgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+IGltYWdlIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW4gbGlicmFyaWVzIGFwcHJvcHJpYXRlIGZvciBkZXZlbG9waW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdhaW5zdCB0aGF0IGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NC1iaXQgeDg2IHN5c3RlbSBhbmQgeW91IGFyZSBnb2luZyB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIGNyb3NzLXRvb2xjaGFpbiBmb3IgYSAzMi1iaXQgeDg2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBnbyBpbnRvIHRoZSA8ZmlsZW5hbWU+eDg2XzY0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkZXIgYW5kIGRvd25sb2FkIHRoZSBmb2xsb3dpbmcgaW5zdGFsbGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcG9reS1nbGliYy14ODZfNjQtY29yZS1pbWFnZS1zYXRvLWk1ODYtdG9vbGNoYWluLSZESVNUUk87LnNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJ1aWxkIHlvdXIgb3duIHRvb2xjaGFpbiBpbnN0YWxsZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGNhc2VzIHdoZXJlIHlvdSBjYW5ub3QgdXNlIGFuIGluc3RhbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGRvd25sb2FkIGFyZWEsIHlvdSBjYW4gYnVpbGQgeW91ciBvd24gYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J29wdGlvbmFsbHktYnVpbGRpbmctYS10b29sY2hhaW4taW5zdGFsbGVyJz5PcHRpb25hbGx5IEJ1aWxkaW5nIGEgVG9vbGNoYWluIEluc3RhbGxlcjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5PbmNlIHlvdSBoYXZlIHRoZSBpbnN0YWxsZXIsIHJ1biBpdCB0byBpbnN0YWxsIHRoZSB0b29sY2hhaW46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBjaGFuZ2UgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSB0b29sY2hhaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlciBzY3JpcHQgc28gdGhhdCBpdCBpcyBleGVjdXRhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGNvbW1hbmQgc2hvd3MgaG93IHRvIHJ1biB0aGUgaW5zdGFsbGVyCisgICAgICAgICAgICAgICAgICAgIGdpdmVuIGEgdG9vbGNoYWluIHRhcmJhbGwgZm9yIGEgNjQtYml0IHg4NiBkZXZlbG9wbWVudCBob3N0CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBhbmQgYSAzMi1iaXQgeDg2IHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBleGFtcGxlIGFzc3VtZXMgdGhlIHRvb2xjaGFpbiBpbnN0YWxsZXIgaXMgbG9jYXRlZAorICAgICAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+fi9Eb3dubG9hZHMvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB+L0Rvd25sb2Fkcy9wb2t5LWdsaWJjLXg4Nl82NC1jb3JlLWltYWdlLXNhdG8taTU4Ni10b29sY2hhaW4tJkRJU1RSTzsuc2gKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgdGhpbmcgdGhlIGluc3RhbGxlciBwcm9tcHRzIHlvdSBmb3IgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpbnRvIHdoaWNoIHlvdSB3YW50IHRvIGluc3RhbGwgdGhlIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgZGlyZWN0b3J5IHVzZWQgaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9vcHQvcG9reS8mRElTVFJPOzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGhhdmUgd3JpdGUgcGVybWlzc2lvbnMgZm9yIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgaW50byB3aGljaCB5b3UgYXJlIGluc3RhbGxpbmcgdGhlIHRvb2xjaGFpbiwgdGhlCisgICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbiBpbnN0YWxsZXIgbm90aWZpZXMgeW91IGFuZCBleGl0cy4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3UgaGF2ZSB3cml0ZSBwZXJtaXNzaW9ucyBpbiB0aGUgZGlyZWN0b3J5IGFuZAorICAgICAgICAgICAgICAgICAgICBydW4gdGhlIGluc3RhbGxlciBhZ2Fpbi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPldoZW4gdGhlIHNjcmlwdCBmaW5pc2hlcywgdGhlIGNyb3NzLXRvb2xjaGFpbiBpcworICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgIFlvdSB3aWxsIG5vdGljZSBlbnZpcm9ubWVudCBzZXR1cCBmaWxlcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIGNyb3NzLXRvb2xjaGFpbiBpbiB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXRoZS10b29sY2hhaW4tZnJvbS13aXRoaW4tdGhlLWJ1aWxkLXRyZWUnPgorICAgICAgICA8dGl0bGU+VXNpbmcgQml0QmFrZSBhbmQgdGhlIEJ1aWxkIERpcmVjdG9yeTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIGZpbmFsIHdheSBvZiBtYWtpbmcgdGhlIGNyb3NzLXRvb2xjaGFpbiBhdmFpbGFibGUgaXMgdG8gdXNlIEJpdEJha2UKKyAgICAgICAgICAgIHRvIGdlbmVyYXRlIHRoZSB0b29sY2hhaW4gd2l0aGluIGFuIGV4aXN0aW5nCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgVGhpcyBtZXRob2QgZG9lcyBub3QgaW5zdGFsbCB0aGUgdG9vbGNoYWluIGludG8gdGhlIGRlZmF1bHQKKyAgICAgICAgICAgIDxmaWxlbmFtZT4vb3B0PC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgQXMgd2l0aCB0aGUgcHJldmlvdXMgbWV0aG9kLCBpZiB5b3UgbmVlZCB0byBpbnN0YWxsIHRoZSB0YXJnZXQgc3lzcm9vdCwgeW91IG11c3QKKyAgICAgICAgICAgIGRvIHRoYXQgc2VwYXJhdGVseSBhcyB3ZWxsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gZ2VuZXJhdGUgdGhlIHRvb2xjaGFpbiBpbnRvIHRoZSBCdWlsZCBEaXJlY3Rvcnk6CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZXQgdXAgdGhlIEJ1aWxkIEVudmlyb25tZW50OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNvdXJjZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIGVudmlyb25tZW50IHNldHVwCisgICAgICAgICAgICAgICAgICAgIHNjcmlwdCAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pCisgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DaGVjayB5b3VyIExvY2FsIENvbmZpZ3VyYXRpb24gRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB5b3Ugc2hvdWxkIGJlIHN1cmUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZiB0aGUgQnVpbGQgRGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgIENvbW1lbnRzIHdpdGhpbiB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgIGxpc3QgdGhlIHZhbHVlcyB5b3UgY2FuIHVzZSBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBwb3B1bGF0ZSB0aGUgQnVpbGQgRGlyZWN0b3J5IHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcy10b29sY2hhaW5zIGZvciBtb3JlIHRoYW4gYSBzaW5nbGUgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGp1c3QgbmVlZCB0byBlZGl0IHRoZSA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgcmUtcnVuIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdlbmVyYXRlIHRoZSBDcm9zcy1Ub29sY2hhaW46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUnVuIDxmaWxlbmFtZT5iaXRiYWtlIG1ldGEtaWRlLXN1cHBvcnQ8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSB0aGUgY3Jvc3MtdG9vbGNoYWluIGdlbmVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCBmaW5pc2hlcywKKyAgICAgICAgICAgICAgICAgICAgdGhlIGNyb3NzLXRvb2xjaGFpbiBpcworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgYW5kIHBvcHVsYXRlZCB3aXRoaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHdpbGwgbm90aWNlIGVudmlyb25tZW50IHNldHVwIGZpbGVzIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgY3Jvc3MtdG9vbGNoYWluIHRoYXQgY29udGFpbiB0aGUgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICI8ZmlsZW5hbWU+ZW52aXJvbm1lbnQtc2V0dXA8L2ZpbGVuYW1lPiIgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yeSdzIDxmaWxlbmFtZT50bXA8L2ZpbGVuYW1lPiBmb2xkZXIuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5CZSBhd2FyZSB0aGF0IHdoZW4geW91IHVzZSB0aGlzIG1ldGhvZCB0byBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4sIHlvdSBzdGlsbCBuZWVkIHRvIHNlcGFyYXRlbHkgZXh0cmFjdCBhbmQgaW5zdGFsbAorICAgICAgICAgICAgICAgICAgICB0aGUgc3lzcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGRvIHRoaXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2V4dHJhY3RpbmctdGhlLXJvb3QtZmlsZXN5c3RlbSc+RXh0cmFjdGluZyB0aGUgUm9vdCBGaWxlc3lzdGVtPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nc2V0dGluZy11cC10aGUtY3Jvc3MtZGV2ZWxvcG1lbnQtZW52aXJvbm1lbnQnPgorICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRoZSBDcm9zcy1EZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQmVmb3JlIHlvdSBjYW4gZGV2ZWxvcCB1c2luZyB0aGUgY3Jvc3MtdG9vbGNoYWluLCB5b3UgbmVlZCB0byBzZXQgdXAgdGhlCisgICAgICAgIGNyb3NzLWRldmVsb3BtZW50IGVudmlyb25tZW50IGJ5IHNvdXJjaW5nIHRoZSB0b29sY2hhaW4ncyBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuCisgICAgICAgIElmIHlvdSB1c2VkIHRoZSBBRFQgSW5zdGFsbGVyIG9yIGhhbmQtaW5zdGFsbGVkIGNyb3NzLXRvb2xjaGFpbiwKKyAgICAgICAgdGhlbiB5b3UgY2FuIGZpbmQgdGhpcyBzY3JpcHQgaW4gdGhlIGRpcmVjdG9yeSB5b3UgY2hvc2UgZm9yIGluc3RhbGxhdGlvbi4KKyAgICAgICAgRm9yIHRoaXMgcmVsZWFzZSwgdGhlIGRlZmF1bHQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBpcworICAgICAgICA8ZmlsZW5hbWU+JllPQ1RPX0FEVFBBVEhfRElSOzwvZmlsZW5hbWU+LgorICAgICAgICBJZiB5b3UgaW5zdGFsbGVkIHRoZSB0b29sY2hhaW4gaW4gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgIHlvdSBjYW4gZmluZCB0aGUgZW52aXJvbm1lbnQgc2V0dXAKKyAgICAgICAgc2NyaXB0IGZvciB0aGUgdG9vbGNoYWluIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkncyA8ZmlsZW5hbWU+dG1wPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCZSBzdXJlIHRvIHJ1biB0aGUgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IHRoYXQgbWF0Y2hlcyB0aGUKKyAgICAgICAgYXJjaGl0ZWN0dXJlIGZvciB3aGljaCB5b3UgYXJlIGRldmVsb3BpbmcuCisgICAgICAgIEVudmlyb25tZW50IHNldHVwIHNjcmlwdHMgYmVnaW4gd2l0aCB0aGUgc3RyaW5nCisgICAgICAgICI8ZmlsZW5hbWU+ZW52aXJvbm1lbnQtc2V0dXA8L2ZpbGVuYW1lPiIgYW5kIGluY2x1ZGUgYXMgcGFydCBvZiB0aGVpcgorICAgICAgICBuYW1lIHRoZSBhcmNoaXRlY3R1cmUuCisgICAgICAgIEZvciBleGFtcGxlLCB0aGUgdG9vbGNoYWluIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBmb3IgYSA2NC1iaXQKKyAgICAgICAgSUEtYmFzZWQgYXJjaGl0ZWN0dXJlIGluc3RhbGxlZCBpbiB0aGUgZGVmYXVsdCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5CisgICAgICAgIHdvdWxkIGJlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJllPQ1RPX0FEVFBBVEhfRElSOy9lbnZpcm9ubWVudC1zZXR1cC14ODZfNjQtcG9reS1saW51eAorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIFdoZW4geW91IHJ1biB0aGUgc2V0dXAgc2NyaXB0LCBtYW55IGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUKKyAgICAgICAgZGVmaW5lZDoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU0RLVEFSR0VUU1lTUk9PVCc+PGZpbGVuYW1lPlNES1RBUkdFVFNZU1JPT1Q8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIHBhdGggdG8gdGhlIHN5c3Jvb3QgdXNlZCBmb3IgY3Jvc3MtY29tcGlsYXRpb24KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBLR19DT05GSUdfUEFUSCc+PGZpbGVuYW1lPlBLR19DT05GSUdfUEFUSDwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgcGF0aCB0byB0aGUgdGFyZ2V0IHBrZy1jb25maWcgZmlsZXMKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNPTkZJR19TSVRFJz48ZmlsZW5hbWU+Q09ORklHX1NJVEU8L2ZpbGVuYW1lPjwvdWxpbms+IC0gQSBHTlUgYXV0b2NvbmYgc2l0ZSBmaWxlIHByZWNvbmZpZ3VyZWQgZm9yIHRoZSB0YXJnZXQKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNDJz48ZmlsZW5hbWU+Q0M8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgQyBjb21waWxlcgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ1hYJz48ZmlsZW5hbWU+Q1hYPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gdGhlIEMrKyBjb21waWxlcgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ1BQJz48ZmlsZW5hbWU+Q1BQPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1BUyc+PGZpbGVuYW1lPkFTPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gdGhlIGFzc2VtYmxlcgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTEQnPjxmaWxlbmFtZT5MRDwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBsaW5rZXIKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUdEQic+PGZpbGVuYW1lPkdEQjwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBHTlUgRGVidWdnZXIKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNUUklQJz48ZmlsZW5hbWU+U1RSSVA8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biAnc3RyaXAnLCB3aGljaCBzdHJpcHMgc3ltYm9scworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUkFOTElCJz48ZmlsZW5hbWU+UkFOTElCPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ3JhbmxpYicKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU9CSkNPUFknPjxmaWxlbmFtZT5PQkpDT1BZPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ29iamNvcHknCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1PQkpEVU1QJz48ZmlsZW5hbWU+T0JKRFVNUDwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdvYmpkdW1wJworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQVInPjxmaWxlbmFtZT5BUjwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdhcicKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU5NJz48ZmlsZW5hbWU+Tk08L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biAnbm0nCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UQVJHRVRfUFJFRklYJz48ZmlsZW5hbWU+VEFSR0VUX1BSRUZJWDwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgdG9vbGNoYWluIGJpbmFyeSBwcmVmaXggZm9yIHRoZSB0YXJnZXQgdG9vbHMKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNST1NTX0NPTVBJTEUnPjxmaWxlbmFtZT5DUk9TU19DT01QSUxFPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSB0b29sY2hhaW4gYmluYXJ5IHByZWZpeCBmb3IgdGhlIHRhcmdldCB0b29scworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ09ORklHVVJFX0ZMQUdTJz48ZmlsZW5hbWU+Q09ORklHVVJFX0ZMQUdTPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGFyZ3VtZW50cyBmb3IgR05VIGNvbmZpZ3VyZQorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ0ZMQUdTJz48ZmlsZW5hbWU+Q0ZMQUdTPC9maWxlbmFtZT48L3VsaW5rPiAtIFN1Z2dlc3RlZCBDIGZsYWdzCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DWFhGTEFHUyc+PGZpbGVuYW1lPkNYWEZMQUdTPC9maWxlbmFtZT48L3VsaW5rPiAtIFN1Z2dlc3RlZCBDKysgZmxhZ3MKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxERkxBR1MnPjxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT48L3VsaW5rPiAtIFN1Z2dlc3RlZCBsaW5rZXIgZmxhZ3Mgd2hlbiB5b3UgdXNlIENDIHRvIGxpbmsKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNQUEZMQUdTJz48ZmlsZW5hbWU+Q1BQRkxBR1M8L2ZpbGVuYW1lPjwvdWxpbms+IC0gU3VnZ2VzdGVkIHByZXByb2Nlc3NvciBmbGFncworICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nc2VjdXJpbmcta2VybmVsLWFuZC1maWxlc3lzdGVtLWltYWdlcyc+CisgICAgPHRpdGxlPlNlY3VyaW5nIEtlcm5lbCBhbmQgRmlsZXN5c3RlbSBJbWFnZXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSB3aWxsIG5lZWQgdG8gaGF2ZSBhIGtlcm5lbCBhbmQgZmlsZXN5c3RlbSBpbWFnZSB0byBib290IHVzaW5nIHlvdXIKKyAgICAgICAgaGFyZHdhcmUgb3IgdGhlIFFFTVUgZW11bGF0b3IuCisgICAgICAgIEZ1cnRoZXJtb3JlLCBpZiB5b3UgcGxhbiBvbiBib290aW5nIHlvdXIgaW1hZ2UgdXNpbmcgTkZTIG9yIHlvdSB3YW50IHRvIHVzZSB0aGUgcm9vdCBmaWxlc3lzdGVtCisgICAgICAgIGFzIHRoZSB0YXJnZXQgc3lzcm9vdCwgeW91IG5lZWQgdG8gZXh0cmFjdCB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdnZXR0aW5nLXRoZS1pbWFnZXMnPgorICAgICAgICA8dGl0bGU+R2V0dGluZyB0aGUgSW1hZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGdldCB0aGUga2VybmVsIGFuZCBmaWxlc3lzdGVtIGltYWdlcywgeW91IGVpdGhlciBoYXZlIHRvIGJ1aWxkIHRoZW0gb3IgZG93bmxvYWQKKyAgICAgICAgICAgIHByZS1idWlsdCB2ZXJzaW9ucy4KKyAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9mIGhvdyB0byBidWlsZCB0aGVzZSBpbWFnZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3FzLWJ1aWRpbmctaW1hZ2VzJz5CdWlkaW5nIEltYWdlczwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC4KKyAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9mIGRvd25sb2FkaW5nIHByZS1idWlsZCB2ZXJzaW9ucywgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLXByZS1idWlsdCc+RXhhbXBsZSBVc2luZyBQcmUtQnVpbHQgQmluYXJpZXMgYW5kIFFFTVU8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3Qgc2hpcHMgYmFzaWMga2VybmVsIGFuZCBmaWxlc3lzdGVtIGltYWdlcyBmb3Igc2V2ZXJhbAorICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcyAoPGZpbGVuYW1lPng4NjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+eDg2LTY0PC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWlwczwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+cG93ZXJwYzwvZmlsZW5hbWU+LCBhbmQgPGZpbGVuYW1lPmFybTwvZmlsZW5hbWU+KQorICAgICAgICAgICAgdGhhdCB5b3UgY2FuIHVzZSB1bmFsdGVyZWQgaW4gdGhlIFFFTVUgZW11bGF0b3IuCisgICAgICAgICAgICBUaGVzZSBrZXJuZWwgaW1hZ2VzIHJlc2lkZSBpbiB0aGUgcmVsZWFzZQorICAgICAgICAgICAgYXJlYSAtIDx1bGluayB1cmw9JyZZT0NUT19NQUNISU5FU19ETF9VUkw7Jz48L3VsaW5rPgorICAgICAgICAgICAgYW5kIGFyZSBpZGVhbCBmb3IgZXhwZXJpbWVudGF0aW9uIHVzaW5nIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIGltYWdlIHR5cGVzIHlvdSBjYW4gYnVpbGQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0sCisgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWltYWdlcyc+SW1hZ2VzPC91bGluaz4iCisgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBhcmUgcGxhbm5pbmcgb24gZGV2ZWxvcGluZyBhZ2FpbnN0IHlvdXIgaW1hZ2UgYW5kIHlvdSBhcmUgbm90CisgICAgICAgICAgICBidWlsZGluZyBvciB1c2luZyBvbmUgb2YgdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgaW1hZ2VzCisgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+Y29yZS1pbWFnZS0qLWRldjwvZmlsZW5hbWU+KSwgeW91IG11c3QgYmUgc3VyZSB0bworICAgICAgICAgICAgaW5jbHVkZSB0aGUgZGV2ZWxvcG1lbnQgcGFja2FnZXMgYXMgcGFydCBvZiB5b3VyIGltYWdlIHJlY2lwZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IHBsYW4gb24gcmVtb3RlbHkgZGVwbG95aW5nIGFuZCBkZWJ1Z2dpbmcgeW91cgorICAgICAgICAgICAgYXBwbGljYXRpb24gZnJvbSB3aXRoaW4gdGhlIEVjbGlwc2UgSURFLCB5b3UgbXVzdCBoYXZlIGFuIGltYWdlCisgICAgICAgICAgICB0aGF0IGNvbnRhaW5zIHRoZSBZb2N0byBUYXJnZXQgQ29tbXVuaWNhdGlvbiBGcmFtZXdvcmsgKFRDRikgYWdlbnQKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+dGNmLWFnZW50PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgWW91IGNhbiBkbyB0aGlzIGJ5IGluY2x1ZGluZyB0aGUgPGZpbGVuYW1lPmVjbGlwc2UtZGVidWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgaW1hZ2UgZmVhdHVyZS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWZlYXR1cmVzLWltYWdlJz5JbWFnZSBGZWF0dXJlczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBmb3IgaW5mb3JtYXRpb24gb24KKyAgICAgICAgICAgICAgICBpbWFnZSBmZWF0dXJlcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIFRvIGluY2x1ZGUgdGhlIDxmaWxlbmFtZT5lY2xpcHNlLWRlYnVnPC9maWxlbmFtZT4gaW1hZ2UgZmVhdHVyZSwKKyAgICAgICAgICAgIG1vZGlmeSB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIHNvIHRoYXQgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhUUkFfSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIGluY2x1ZGVzIHRoZSAiZWNsaXBzZS1kZWJ1ZyIgZmVhdHVyZS4KKyAgICAgICAgICAgIEFmdGVyIG1vZGlmeWluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCB5b3UgY2FuIHJlYnVpbGQgdGhlIGltYWdlLgorICAgICAgICAgICAgT25jZSB0aGUgaW1hZ2UgaXMgcmVidWlsdCwgdGhlIDxmaWxlbmFtZT50Y2YtYWdlbnQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgaW1hZ2UgYW5kIGlzIGxhdW5jaGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIKKyAgICAgICAgICAgIHRoZSBib290LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2V4dHJhY3RpbmctdGhlLXJvb3QtZmlsZXN5c3RlbSc+CisgICAgICAgIDx0aXRsZT5FeHRyYWN0aW5nIHRoZSBSb290IEZpbGVzeXN0ZW08L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGluc3RhbGwgeW91ciB0b29sY2hhaW4gYnkgaGFuZCBvciBidWlsZCBpdCB1c2luZyBCaXRCYWtlIGFuZAorICAgICAgICAgICAgeW91IG5lZWQgYSByb290IGZpbGVzeXN0ZW0sIHlvdSBuZWVkIHRvIGV4dHJhY3QgaXQgc2VwYXJhdGVseS4KKyAgICAgICAgICAgIElmIHlvdSB1c2UgdGhlIEFEVCBJbnN0YWxsZXIgdG8gaW5zdGFsbCB0aGUgQURULCB0aGUgcm9vdAorICAgICAgICAgICAgZmlsZXN5c3RlbSBpcyBhdXRvbWF0aWNhbGx5IGV4dHJhY3RlZCBhbmQgaW5zdGFsbGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlIHlvdSBuZWVkIHRvIGV4dHJhY3QgdGhlIHJvb3QgZmlsZXN5c3RlbToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSB3YW50IHRvIGJvb3QgdGhlIGltYWdlIHVzaW5nIE5GUy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSB3YW50IHRvIHVzZSB0aGUgcm9vdCBmaWxlc3lzdGVtIGFzIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgc3lzcm9vdC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBFY2xpcHNlIElERSBlbnZpcm9ubWVudCB3aXRoIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFBsdWctaW4gaW5zdGFsbGVkIGFsbG93cyB5b3UgdG8gdXNlIFFFTVUgdG8gYm9vdAorICAgICAgICAgICAgICAgICAgICB1bmRlciBORlMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSB3YW50IHRvIGRldmVsb3AgeW91ciB0YXJnZXQgYXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIHJvb3QgZmlsZXN5c3RlbSBhcyB0aGUgdGFyZ2V0IHN5c3Jvb3QuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGV4dHJhY3QgdGhlIHJvb3QgZmlsZXN5c3RlbSwgZmlyc3QgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+CisgICAgICAgICAgICB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IHRvIGVzdGFibGlzaAorICAgICAgICAgICAgbmVjZXNzYXJ5IGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyAgICAgICAgICAgIElmIHlvdSBidWlsdCB0aGUgdG9vbGNoYWluIGluIHRoZSBCdWlsZCBEaXJlY3RvcnksIHlvdSB3aWxsIGZpbmQKKyAgICAgICAgICAgIHRoZSB0b29sY2hhaW4gZW52aXJvbm1lbnQgc2NyaXB0IGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIElmIHlvdSBpbnN0YWxsZWQgdGhlIHRvb2xjaGFpbiBieSBoYW5kLCB0aGUgZW52aXJvbm1lbnQgc2V0dXAKKyAgICAgICAgICAgIHNjcmlwdCBpcyBsb2NhdGVkIGluIDxmaWxlbmFtZT4vb3B0L3Bva3kvJkRJU1RSTzs8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWZ0ZXIgc291cmNpbmcgdGhlIGVudmlyb25tZW50IHNjcmlwdCwgdXNlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXUtZXh0cmFjdC1zZGs8L2ZpbGVuYW1lPiBjb21tYW5kIGFuZCBwcm92aWRlIHRoZQorICAgICAgICAgICAgZmlsZXN5c3RlbSBpbWFnZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCisgICAgICAgICAgICBUaGUgc2Vjb25kIGNvbW1hbmQgc2V0cyB1cCB0aGUgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBzZXR1cCBzY3JpcHQgaXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT4vb3B0L3Bva3kvJkRJU1RSTzs8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICBUaGUgdGhpcmQgY29tbWFuZCBleHRyYWN0cyB0aGUgcm9vdCBmaWxlc3lzdGVtIGZyb20gYSBwcmV2aW91c2x5CisgICAgICAgICAgICBidWlsdCBmaWxlc3lzdGVtIHRoYXQgaXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5+L0Rvd25sb2FkczwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGlzIGNvbW1hbmQgZXh0cmFjdHMgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbnRvIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODYtc2F0bzwvZmlsZW5hbWU+IGRpcmVjdG9yeToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+CisgICAgICQgc291cmNlIC9vcHQvcG9reS8mRElTVFJPOy9lbnZpcm9ubWVudC1zZXR1cC1pNTg2LXBva3ktbGludXgKKyAgICAgJCBydW5xZW11LWV4dHJhY3Qtc2RrIFwKKyAgICAgICAgfi9Eb3dubG9hZHMvY29yZS1pbWFnZS1zYXRvLXNkay1xZW11eDg2LTIwMTEwOTE0MTE4MzEucm9vdGZzLnRhci5iejIgXAorICAgICAgICAkSE9NRS9xZW11eDg2LXNhdG8KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFlvdSBjb3VsZCBub3cgcG9pbnQgdG8gdGhlIHRhcmdldCBzeXNyb290IGF0CisgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdXg4Ni1zYXRvPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdvcHRpb25hbGx5LWJ1aWxkaW5nLWEtdG9vbGNoYWluLWluc3RhbGxlcic+CisgICAgPHRpdGxlPk9wdGlvbmFsbHkgQnVpbGRpbmcgYSBUb29sY2hhaW4gSW5zdGFsbGVyPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBBcyBhbiBhbHRlcm5hdGl2ZSB0byBsb2NhdGluZyBhbmQgZG93bmxvYWRpbmcgYSB0b29sY2hhaW4gaW5zdGFsbGVyLAorICAgICAgICB5b3UgY2FuIGJ1aWxkIHRoZSB0b29sY2hhaW4gaW5zdGFsbGVyIGlmIHlvdSBoYXZlIGEKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBBbHRob3VnaCBub3QgdGhlIHByZWZlcnJlZCBtZXRob2QsIGl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSBtZXRhLXRvb2xjaGFpbjwvZmlsZW5hbWU+IHRvIGJ1aWxkIHRoZSB0b29sY2hhaW4KKyAgICAgICAgICAgIGluc3RhbGxlci4KKyAgICAgICAgICAgIElmIHlvdSBkbyB1c2UgdGhpcyBtZXRob2QsIHlvdSBtdXN0IHNlcGFyYXRlbHkgaW5zdGFsbCBhbmQgZXh0cmFjdAorICAgICAgICAgICAgdGhlIHRhcmdldCBzeXNyb290LgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpbnN0YWxsIHRoZSBzeXNyb290LCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZXh0cmFjdGluZy10aGUtcm9vdC1maWxlc3lzdGVtJz5FeHRyYWN0aW5nIHRoZSBSb290IEZpbGVzeXN0ZW08L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUbyBidWlsZCB0aGUgdG9vbGNoYWluIGluc3RhbGxlciBhbmQgcG9wdWxhdGUgdGhlIFNESyBpbWFnZSwgdXNlIHRoZQorICAgICAgICBmb2xsb3dpbmcgY29tbWFuZDoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgPHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT4gLWMgcG9wdWxhdGVfc2RrCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgVGhlIGNvbW1hbmQgcmVzdWx0cyBpbiBhIHRvb2xjaGFpbiBpbnN0YWxsZXIgdGhhdCBjb250YWlucyB0aGUgc3lzcm9vdAorICAgICAgICB0aGF0IG1hdGNoZXMgeW91ciB0YXJnZXQgcm9vdCBmaWxlc3lzdGVtLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBBbm90aGVyIHBvd2VyZnVsIGZlYXR1cmUgaXMgdGhhdCB0aGUgdG9vbGNoYWluIGlzIGNvbXBsZXRlbHkKKyAgICAgICAgc2VsZi1jb250YWluZWQuCisgICAgICAgIFRoZSBiaW5hcmllcyBhcmUgbGlua2VkIGFnYWluc3QgdGhlaXIgb3duIGNvcHkgb2YKKyAgICAgICAgPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPiwgd2hpY2ggcmVzdWx0cyBpbiBubyBkZXBlbmRlbmNpZXMKKyAgICAgICAgb24gdGhlIHRhcmdldCBzeXN0ZW0uCisgICAgICAgIFRvIGFjaGlldmUgdGhpcywgdGhlIHBvaW50ZXIgdG8gdGhlIGR5bmFtaWMgbG9hZGVyIGlzCisgICAgICAgIGNvbmZpZ3VyZWQgYXQgaW5zdGFsbCB0aW1lIHNpbmNlIHRoYXQgcGF0aCBjYW5ub3QgYmUgZHluYW1pY2FsbHkKKyAgICAgICAgYWx0ZXJlZC4KKyAgICAgICAgVGhpcyBpcyB0aGUgcmVhc29uIGZvciBhIHdyYXBwZXIgYXJvdW5kIHRoZQorICAgICAgICA8ZmlsZW5hbWU+cG9wdWxhdGVfc2RrPC9maWxlbmFtZT4gYXJjaGl2ZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQW5vdGhlciBmZWF0dXJlIGlzIHRoYXQgb25seSBvbmUgc2V0IG9mIGNyb3NzLWNhbmFkaWFuIHRvb2xjaGFpbgorICAgICAgICBiaW5hcmllcyBhcmUgcHJvZHVjZWQgcGVyIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgVGhpcyBmZWF0dXJlIHRha2VzIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHRoZSB0YXJnZXQgaGFyZHdhcmUgY2FuCisgICAgICAgIGJlIHBhc3NlZCB0byA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4gYXMgYSBzZXQgb2YgY29tcGlsZXIgb3B0aW9ucy4KKyAgICAgICAgVGhvc2Ugb3B0aW9ucyBhcmUgc2V0IHVwIGJ5IHRoZSBlbnZpcm9ubWVudCBzY3JpcHQgYW5kIGNvbnRhaW5lZCBpbgorICAgICAgICB2YXJpYWJsZXMgc3VjaCBhcworICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ0MnPjxmaWxlbmFtZT5DQzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgYW5kCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MRCc+PGZpbGVuYW1lPkxEPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgVGhpcyByZWR1Y2VzIHRoZSBzcGFjZSBuZWVkZWQgZm9yIHRoZSB0b29scy4KKyAgICAgICAgVW5kZXJzdGFuZCwgaG93ZXZlciwgdGhhdCBhIHN5c3Jvb3QgaXMgc3RpbGwgbmVlZGVkIGZvciBldmVyeSB0YXJnZXQKKyAgICAgICAgc2luY2UgdGhvc2UgYmluYXJpZXMgYXJlIHRhcmdldC1zcGVjaWZpYy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgIFJlbWVtYmVyLCBiZWZvcmUgdXNpbmcgYW55IEJpdEJha2UgY29tbWFuZCwgeW91CisgICAgICAgICBtdXN0IHNvdXJjZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0CisgICAgICAgICAoaS5lLgorICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICBvcgorICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pCisgICAgICAgICBsb2NhdGVkIGluIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGFuZCB5b3UgbXVzdCBtYWtlIHN1cmUgeW91cgorICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IHZhcmlhYmxlcyBhcmUgY29ycmVjdC4KKyAgICAgICAgIEluIHBhcnRpY3VsYXIsIHlvdSBuZWVkIHRvIGJlIHN1cmUgdGhlCisgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICB2YXJpYWJsZSBtYXRjaGVzIHRoZSBhcmNoaXRlY3R1cmUgZm9yIHdoaWNoIHlvdSBhcmUgYnVpbGRpbmcgYW5kIHRoYXQKKyAgICAgICAgIHRoZQorICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNES01BQ0hJTkUnPjxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgdmFyaWFibGUgaXMgY29ycmVjdGx5IHNldCBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEgdG9vbGNoYWluIGRlc2lnbmVkIHRvCisgICAgICAgICBydW4gb24gYW4gYXJjaGl0ZWN0dXJlIHRoYXQgZGlmZmVycyBmcm9tIHlvdXIgY3VycmVudCBkZXZlbG9wbWVudCBob3N0CisgICAgICAgICBtYWNoaW5lIChpLmUuIHRoZSBidWlsZCBtYWNoaW5lKS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGNvbXBsZXRlcywgdGhlIHRvb2xjaGFpbgorICAgICAgICBpbnN0YWxsZXIgd2lsbCBiZSBpbgorICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveS9zZGs8L2ZpbGVuYW1lPiBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgdG9vbGNoYWluIGRvZXMgbm90IGJ1aWxkIHN0YXRpYyBiaW5hcmllcy4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgdG9vbGNoYWluIHRvIGJ1aWxkIHRoZXNlIHR5cGVzIG9mIGxpYnJhcmllcywKKyAgICAgICAgICAgIHlvdSBuZWVkIHRvIGJlIHN1cmUgeW91ciBpbWFnZSBoYXMgdGhlIGFwcHJvcHJpYXRlIHN0YXRpYworICAgICAgICAgICAgZGV2ZWxvcG1lbnQgbGlicmFyaWVzLgorICAgICAgICAgICAgVXNlIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0lOU1RBTEwnPjxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGUgaW5zaWRlIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRvCisgICAgICAgICAgICBpbnN0YWxsIHRoZSBhcHByb3ByaWF0ZSBsaWJyYXJ5IHBhY2thZ2VzLgorICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgdXNpbmcgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4gc3RhdGljCisgICAgICAgICAgICBkZXZlbG9wbWVudCBsaWJyYXJpZXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0lOU1RBTExfYXBwZW5kID0gIiBnbGliYy1zdGF0aWNkZXYiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdvcHRpb25hbGx5LXVzaW5nLWFuLWV4dGVybmFsLXRvb2xjaGFpbic+CisgICAgPHRpdGxlPk9wdGlvbmFsbHkgVXNpbmcgYW4gRXh0ZXJuYWwgVG9vbGNoYWluPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBZb3UgbWlnaHQgd2FudCB0byB1c2UgYW4gZXh0ZXJuYWwgdG9vbGNoYWluIGFzIHBhcnQgb2YgeW91cgorICAgICAgICBkZXZlbG9wbWVudC4KKyAgICAgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhlIGZ1bmRhbWVudGFsIHN0ZXBzIHlvdSBuZWVkIHRvIGFjY29tcGxpc2gKKyAgICAgICAgYXJlIGFzIGZvbGxvd3M6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgVW5kZXJzdGFuZCB3aGVyZSB0aGUgaW5zdGFsbGVkIHRvb2xjaGFpbiByZXNpZGVzLgorICAgICAgICAgICAgICAgIEZvciBjYXNlcyB3aGVyZSB5b3UgbmVlZCB0byBidWlsZCB0aGUgZXh0ZXJuYWwgdG9vbGNoYWluLCB5b3UKKyAgICAgICAgICAgICAgICB3b3VsZCBuZWVkIHRvIHRha2Ugc2VwYXJhdGUgc3RlcHMgdG8gYnVpbGQgYW5kIGluc3RhbGwgdGhlCisgICAgICAgICAgICAgICAgdG9vbGNoYWluLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIE1ha2Ugc3VyZSB5b3UgYWRkIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSB0b29sY2hhaW4gdG8KKyAgICAgICAgICAgICAgICB5b3VyIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkxBWUVSUyc+PGZpbGVuYW1lPkJCTEFZRVJTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFNldCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhURVJOQUxfVE9PTENIQUlOJz48ZmlsZW5hbWU+RVhURVJOQUxfVE9PTENIQUlOPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgdG8gdGhlIGxvY2F0aW9uIGluIHdoaWNoIHlvdSBpbnN0YWxsZWQgdGhlIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIEEgZ29vZCBleGFtcGxlIG9mIGFuIGV4dGVybmFsIHRvb2xjaGFpbiB1c2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgaXMgPHRyYWRlbWFyayBjbGFzcz0ncmVnaXN0ZXJlZCc+TWVudG9yIEdyYXBoaWNzPC90cmFkZW1hcms+CisgICAgICAgIFNvdXJjZXJ5IEcrKyBUb29sY2hhaW4uCisgICAgICAgIFlvdSBjYW4gc2VlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhhdCBwYXJ0aWN1bGFyIGxheWVyIGluIHRoZQorICAgICAgICA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBhdAorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0aHViLmNvbS9NZW50b3JFbWJlZGRlZC9tZXRhLXNvdXJjZXJ5Lyc+PC91bGluaz4uCisgICAgICAgIFlvdSBjYW4gZmluZCBmdXJ0aGVyIGluZm9ybWF0aW9uIGJ5IHJlYWRpbmcgYWJvdXQgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UQ01PREUnPjxmaWxlbmFtZT5UQ01PREU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgIHZhcmlhYmxlIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwncyB2YXJpYWJsZSBnbG9zc2FyeS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmctcHJlLWJ1aWx0Jz4KKyAgICAgICAgPHRpdGxlPkV4YW1wbGUgVXNpbmcgUHJlLUJ1aWx0IEJpbmFyaWVzIGFuZCBRRU1VPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIGhhcmR3YXJlLCBsaWJyYXJpZXMgYW5kIHNlcnZpY2VzIGFyZSBzdGFibGUsIHlvdSBjYW4gZ2V0IHN0YXJ0ZWQgYnkgdXNpbmcgYSBwcmUtYnVpbHQgYmluYXJ5CisgICAgICAgICAgICBvZiB0aGUgZmlsZXN5c3RlbSBpbWFnZSwga2VybmVsLCBhbmQgdG9vbGNoYWluIGFuZCBydW4gaXQgdXNpbmcgdGhlIFFFTVUgZW11bGF0b3IuCisgICAgICAgICAgICBUaGlzIHNjZW5hcmlvIGlzIHVzZWZ1bCBmb3IgZGV2ZWxvcGluZyBhcHBsaWNhdGlvbiBzb2Z0d2FyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy91c2luZy1hLXByZS1idWlsdC1pbWFnZS5wbmciIGZvcm1hdD0iUE5HIiBhbGlnbj0nY2VudGVyJyBzY2FsZWZpdD0nMScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgICAgIDxjYXB0aW9uPgorICAgICAgICAgICAgICAgIDxwYXJhPlVzaW5nIGEgUHJlLUJ1aWx0IEltYWdlPC9wYXJhPgorICAgICAgICAgICAgPC9jYXB0aW9uPgorICAgICAgICA8L21lZGlhb2JqZWN0PgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIHRoaXMgc2NlbmFyaW8sIHlvdSBuZWVkIHRvIGRvIHNldmVyYWwgdGhpbmdzOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbnN0YWxsIHRoZSBhcHByb3ByaWF0ZSBzdGFuZC1hbG9uZSB0b29sY2hhaW4gdGFyYmFsbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Eb3dubG9hZCB0aGUgcHJlLWJ1aWx0IGltYWdlIHRoYXQgd2lsbCBib290IHdpdGggUUVNVS4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBiZSBzdXJlIHRvIGdldCB0aGUgUUVNVSBpbWFnZSB0aGF0IG1hdGNoZXMgeW91ciB0YXJnZXQgbWFjaGluZeKAmXMKKyAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgKGUuZy4geDg2LCBBUk0sIGV0Yy4pLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvd25sb2FkIHRoZSBmaWxlc3lzdGVtIGltYWdlIGZvciB5b3VyIHRhcmdldCBtYWNoaW5lJ3MgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNldCB1cCB0aGUgZW52aXJvbm1lbnQgdG8gZW11bGF0ZSB0aGUgaGFyZHdhcmUgYW5kIHRoZW4gc3RhcnQgdGhlIFFFTVUgZW11bGF0b3IuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbnN0YWxsaW5nLXRoZS10b29sY2hhaW4nPgorICAgICAgICAgICAgPHRpdGxlPkluc3RhbGxpbmcgdGhlIFRvb2xjaGFpbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZG93bmxvYWQgYSB0YXJiYWxsIGluc3RhbGxlciwgd2hpY2ggaW5jbHVkZXMgdGhlCisgICAgICAgICAgICAgICAgcHJlLWJ1aWx0IHRvb2xjaGFpbiwgdGhlIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBzY3JpcHQsIGFuZCBzdXBwb3J0IGZpbGVzIGZyb20gdGhlIGFwcHJvcHJpYXRlIGRpcmVjdG9yeSB1bmRlcgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19UT09MQ0hBSU5fRExfVVJMOyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgVG9vbGNoYWlucyBhcmUgYXZhaWxhYmxlIGZvciAzMi1iaXQgYW5kIDY0LWJpdCB4ODYgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBzeXN0ZW1zIGZyb20gdGhlIDxmaWxlbmFtZT5pNjg2PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPng4Nl82NDwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzLCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICAgICAgVGhlIHRvb2xjaGFpbnMgdGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgYXJlIGJhc2VkIG9mZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4gaW1hZ2UgYW5kIGNvbnRhaW4KKyAgICAgICAgICAgICAgICBsaWJyYXJpZXMgYXBwcm9wcmlhdGUgZm9yIGRldmVsb3BpbmcgYWdhaW5zdCB0aGF0IGltYWdlLgorICAgICAgICAgICAgICAgIEVhY2ggdHlwZSBvZiBkZXZlbG9wbWVudCBzeXN0ZW0gc3VwcG9ydHMgZml2ZSBvciBtb3JlIHRhcmdldAorICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBuYW1lcyBvZiB0aGUgdGFyYmFsbCBpbnN0YWxsZXIgc2NyaXB0cyBhcmUgc3VjaCB0aGF0IGEKKyAgICAgICAgICAgICAgICBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBob3N0IHN5c3RlbSBhcHBlYXJzIGZpcnN0IGluIHRoZQorICAgICAgICAgICAgICAgIGZpbGVuYW1lIGFuZCB0aGVuIGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgc3RyaW5nCisgICAgICAgICAgICAgICAgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBva3ktZ2xpYmMtPHJlcGxhY2VhYmxlPmhvc3Rfc3lzdGVtPC9yZXBsYWNlYWJsZT4tPHJlcGxhY2VhYmxlPmltYWdlX3R5cGU8L3JlcGxhY2VhYmxlPi08cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+LXRvb2xjaGFpbi08cmVwbGFjZWFibGU+cmVsZWFzZV92ZXJzaW9uPC9yZXBsYWNlYWJsZT4uc2gKKworICAgICBXaGVyZToKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5ob3N0X3N5c3RlbTwvcmVwbGFjZWFibGU+IGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB5b3VyIGRldmVsb3BtZW50IHN5c3RlbToKKworICAgICAgICAgICAgICAgICAgICBpNjg2IG9yIHg4Nl82NC4KKworICAgICAgICAgPHJlcGxhY2VhYmxlPmltYWdlX3R5cGU8L3JlcGxhY2VhYmxlPiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGltYWdlIHlvdSB3aXNoIHRvCisgICAgICAgICAgICAgICAgZGV2ZWxvcCBhIFNvZnR3YXJlIERldmVsb3BtZW50IFRvb2xraXQgKFNESykgZm9yIHVzZSBhZ2FpbnN0LgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGJ1aWxkcyB0b29sY2hhaW4gaW5zdGFsbGVycyB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgQml0QmFrZSBjb21tYW5kOgorCisgICAgICAgICAgICAgICAgICAgIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIC1jIHBvcHVsYXRlX3NkaworCisgICAgICAgICA8cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+IGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdHVuZWQgdGFyZ2V0IGFyY2hpdGVjdHVyZToKKworICAgICAgICAgICAgICAgICAgICBpNTg2LCB4ODZfNjQsIHBvd2VycGMsIG1pcHMsIGFybXY3YSBvciBhcm12NXRlCisKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5yZWxlYXNlX3ZlcnNpb248L3JlcGxhY2VhYmxlPiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHJlbGVhc2UgbnVtYmVyIG9mIHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3Q6CisKKyAgICAgICAgICAgICAgICAgICAgJkRJU1RSTzssICZESVNUUk87K3NuYXBzaG90CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHRvb2xjaGFpbiBpbnN0YWxsZXIgaXMgZm9yIGEgNjQtYml0CisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgaG9zdCBzeXN0ZW0gYW5kIGEgaTU4Ni10dW5lZCB0YXJnZXQgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgYmFzZWQgb2ZmIHRoZSBTREsgZm9yIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBva3ktZ2xpYmMteDg2XzY0LWNvcmUtaW1hZ2Utc2F0by1pNTg2LXRvb2xjaGFpbi0mRElTVFJPOy5zaAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG9vbGNoYWlucyBhcmUgc2VsZi1jb250YWluZWQgYW5kIGJ5IGRlZmF1bHQgYXJlIGluc3RhbGxlZCBpbnRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9vcHQvcG9reTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHdoZW4geW91IHJ1biB0aGUgdG9vbGNoYWluIGluc3RhbGxlciwgeW91IGNhbiBjaG9vc2UgYW4KKyAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgc2hvd3MgaG93IHRvIHJ1biB0aGUgaW5zdGFsbGVyIGdpdmVuIGEgdG9vbGNoYWluIHRhcmJhbGwKKyAgICAgICAgICAgICAgICBmb3IgYSA2NC1iaXQgeDg2IGRldmVsb3BtZW50IGhvc3Qgc3lzdGVtIGFuZCBhIDMyLWJpdCB4ODYgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICBZb3UgbXVzdCBjaGFuZ2UgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSB0b29sY2hhaW4KKyAgICAgICAgICAgICAgICBpbnN0YWxsZXIgc2NyaXB0IHNvIHRoYXQgaXQgaXMgZXhlY3V0YWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGUgYXNzdW1lcyB0aGUgdG9vbGNoYWluIGluc3RhbGxlciBpcyBsb2NhdGVkIGluIDxmaWxlbmFtZT5+L0Rvd25sb2Fkcy88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBoYXZlIHdyaXRlIHBlcm1pc3Npb25zIGZvciB0aGUgZGlyZWN0b3J5IGludG8gd2hpY2ggeW91IGFyZSBpbnN0YWxsaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSB0b29sY2hhaW4sIHRoZSB0b29sY2hhaW4gaW5zdGFsbGVyIG5vdGlmaWVzIHlvdSBhbmQgZXhpdHMuCisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91IGhhdmUgd3JpdGUgcGVybWlzc2lvbnMgaW4gdGhlIGRpcmVjdG9yeSBhbmQgcnVuIHRoZSBpbnN0YWxsZXIgYWdhaW4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgfi9Eb3dubG9hZHMvcG9reS1nbGliYy14ODZfNjQtY29yZS1pbWFnZS1zYXRvLWk1ODYtdG9vbGNoYWluLSZESVNUUk87LnNoCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaW5zdGFsbCB0YXJiYWxscywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2luZy1hbi1leGlzdGluZy10b29sY2hhaW4tdGFyYmFsbCc+VXNpbmcgYSBDcm9zcy1Ub29sY2hhaW4gVGFyYmFsbDwvdWxpbms+IiBhbmQKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdXNpbmctdGhlLXRvb2xjaGFpbi1mcm9tLXdpdGhpbi10aGUtYnVpbGQtdHJlZSc+VXNpbmcgQml0QmFrZSBhbmQgdGhlIEJ1aWxkIERpcmVjdG9yeTwvdWxpbms+IiBzZWN0aW9ucyBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkb3dubG9hZGluZy10aGUtcHJlLWJ1aWx0LWxpbnV4LWtlcm5lbCc+CisgICAgICAgICAgICA8dGl0bGU+RG93bmxvYWRpbmcgdGhlIFByZS1CdWlsdCBMaW51eCBLZXJuZWw8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGRvd25sb2FkIHRoZSBwcmUtYnVpbHQgTGludXgga2VybmVsIHN1aXRhYmxlIGZvciBydW5uaW5nIGluIHRoZSBRRU1VIGVtdWxhdG9yIGZyb20KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fUUVNVV9ETF9VUkw7Jz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHVzZSB0aGUga2VybmVsIHRoYXQgbWF0Y2hlcyB0aGUgYXJjaGl0ZWN0dXJlIHlvdSB3YW50IHRvIHNpbXVsYXRlLgorICAgICAgICAgICAgICAgIERvd25sb2FkIGFyZWFzIGV4aXN0IGZvciB0aGUgZml2ZSBzdXBwb3J0ZWQgbWFjaGluZSBhcmNoaXRlY3R1cmVzOgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11YXJtPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5xZW11bWlwczwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+cWVtdXBwYzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4sIGFuZCA8ZmlsZW5hbWU+cWVtdXg4Ni02NDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBNb3N0IGtlcm5lbCBmaWxlcyBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgKnpJbWFnZS1xZW11PHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPi5iaW4KKyAgICAgdm1saW51eC1xZW11PHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPi5iaW4KKworICAgICBXaGVyZToKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4gaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlOgorICAgICAgICAgICAgICAgIHg4NiwgeDg2LTY0LCBwcGMsIG1pcHMsIG9yIGFybS4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBkb3dubG9hZGluZyBhIFlvY3RvIFByb2plY3Qga2VybmVsIGluIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNsb2NhbC1rZXJuZWwtZmlsZXMnPllvY3RvIFByb2plY3QgS2VybmVsPC91bGluaz4iCisgICAgICAgICAgICAgICAgYnVsbGV0ZWQgaXRlbSBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZG93bmxvYWRpbmctdGhlLWZpbGVzeXN0ZW0nPgorICAgICAgICAgICAgPHRpdGxlPkRvd25sb2FkaW5nIHRoZSBGaWxlc3lzdGVtPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGRvd25sb2FkIHRoZSBmaWxlc3lzdGVtIGltYWdlIHN1aXRhYmxlIGZvciB5b3VyIHRhcmdldCBhcmNoaXRlY3R1cmUgZnJvbQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19RRU1VX0RMX1VSTDsnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIEFnYWluLCBiZSBzdXJlIHRvIHVzZSB0aGUgZmlsZXN5c3RlbSB0aGF0IG1hdGNoZXMgdGhlIGFyY2hpdGVjdHVyZSB5b3Ugd2FudAorICAgICAgICAgICAgICAgIHRvIHNpbXVsYXRlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZmlsZXN5c3RlbSBpbWFnZSBoYXMgdHdvIHRhcmJhbGwgZm9ybXM6IDxmaWxlbmFtZT5leHQzPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRhcjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFlvdSBtdXN0IHVzZSB0aGUgPGZpbGVuYW1lPmV4dDM8L2ZpbGVuYW1lPiBmb3JtIHdoZW4gYm9vdGluZyBhbiBpbWFnZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICBRRU1VIGVtdWxhdG9yLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+dGFyPC9maWxlbmFtZT4gZm9ybSBjYW4gYmUgZmxhdHRlbmVkIG91dCBpbiB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtCisgICAgICAgICAgICAgICAgYW5kIHVzZWQgZm9yIGJ1aWxkIHB1cnBvc2VzIHdpdGggdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBjb3JlLWltYWdlLTxyZXBsYWNlYWJsZT5wcm9maWxlPC9yZXBsYWNlYWJsZT4tcWVtdTxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4uZXh0MworICAgICBjb3JlLWltYWdlLTxyZXBsYWNlYWJsZT5wcm9maWxlPC9yZXBsYWNlYWJsZT4tcWVtdTxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4udGFyLmJ6MgorCisgICAgIFdoZXJlOgorICAgICAgICAgPHJlcGxhY2VhYmxlPnByb2ZpbGU8L3JlcGxhY2VhYmxlPiBpcyB0aGUgZmlsZXN5c3RlbSBpbWFnZSdzIHByb2ZpbGU6CisgICAgICAgICAgICAgICAgICAgbHNiLCBsc2ItZGV2LCBsc2Itc2RrLCBsc2ItcXQzLCBtaW5pbWFsLCBtaW5pbWFsLWRldiwgc2F0bywKKyAgICAgICAgICAgICAgICAgICBzYXRvLWRldiwgb3Igc2F0by1zZGsuIEZvciBpbmZvcm1hdGlvbiBvbiB0aGVzZSB0eXBlcyBvZiBpbWFnZQorICAgICAgICAgICAgICAgICAgIHByb2ZpbGVzLCBzZWUgdGhlICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtaW1hZ2VzJz5JbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4gaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlOgorICAgICAgICAgICAgICAgIHg4NiwgeDg2LTY0LCBwcGMsIG1pcHMsIG9yIGFybS4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy11cC10aGUtZW52aXJvbm1lbnQtYW5kLXN0YXJ0aW5nLXRoZS1xZW11LWVtdWxhdG9yJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRoZSBFbnZpcm9ubWVudCBhbmQgU3RhcnRpbmcgdGhlIFFFTVUgRW11bGF0b3I8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWZvcmUgeW91IHN0YXJ0IHRoZSBRRU1VIGVtdWxhdG9yLCB5b3UgbmVlZCB0byBzZXQgdXAgdGhlIGVtdWxhdGlvbiBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgZm9ybSBzZXRzIHVwIHRoZSBlbXVsYXRpb24gZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSAmWU9DVE9fQURUUEFUSF9ESVI7L2Vudmlyb25tZW50LXNldHVwLTxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4tcG9reS1saW51eC08cmVwbGFjZWFibGU+aWY8L3JlcGxhY2VhYmxlPgorCisgICAgIFdoZXJlOgorICAgICAgICAgPHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmU6CisgICAgICAgICAgICAgICAgaTU4NiwgeDg2XzY0LCBwcGM2MDNlLCBtaXBzLCBvciBhcm12NXRlLgorCisgICAgICAgICA8cmVwbGFjZWFibGU+aWY8L3JlcGxhY2VhYmxlPiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4gZW1iZWRkZWQgYXBwbGljYXRpb24gYmluYXJ5IGludGVyZmFjZS4KKyAgICAgICAgICAgICAgTm90IGFsbCBzZXR1cCBzY3JpcHRzIGluY2x1ZGUgdGhpcyBzdHJpbmcuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGaW5hbGx5LCB0aGlzIGNvbW1hbmQgZm9ybSBpbnZva2VzIHRoZSBRRU1VIGVtdWxhdG9yCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgPHJlcGxhY2VhYmxlPnFlbXVhcmNoPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmtlcm5lbC1pbWFnZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5maWxlc3lzdGVtLWltYWdlPC9yZXBsYWNlYWJsZT4KKworICAgICBXaGVyZToKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5xZW11YXJjaDwvcmVwbGFjZWFibGU+IGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZTogcWVtdXg4NiwgcWVtdXg4Ni02NCwKKyAgICAgICAgICAgICAgICAgICAgcWVtdXBwYywgcWVtdW1pcHMsIG9yIHFlbXVhcm0uCisKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5rZXJuZWwtaW1hZ2U8L3JlcGxhY2VhYmxlPiBpcyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGtlcm5lbCBpbWFnZS4KKworICAgICAgICAgPHJlcGxhY2VhYmxlPmZpbGVzeXN0ZW0taW1hZ2U8L3JlcGxhY2VhYmxlPiBpcyB0aGUgLmV4dDMgZmlsZXN5c3RlbSBpbWFnZS4KKworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQ29udGludWluZyB3aXRoIHRoZSBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHR3byBjb21tYW5kcyBzZXR1cCB0aGUgZW11bGF0aW9uCisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgYW5kIGxhdW5jaCBRRU1VLgorICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBhc3N1bWVzIHRoZSByb290IGZpbGVzeXN0ZW0gKDxmaWxlbmFtZT4uZXh0MzwvZmlsZW5hbWU+IGZpbGUpIGFuZAorICAgICAgICAgICAgICAgIHRoZSBwcmUtYnVpbHQga2VybmVsIGltYWdlIGZpbGUgYm90aCByZXNpZGUgaW4geW91ciBob21lIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUaGUga2VybmVsIGFuZCBmaWxlc3lzdGVtIGFyZSBmb3IgYSAzMi1iaXQgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgJEhPTUUKKyAgICAgJCBzb3VyY2UgJllPQ1RPX0FEVFBBVEhfRElSOy9lbnZpcm9ubWVudC1zZXR1cC1pNTg2LXBva3ktbGludXgKKyAgICAgJCBydW5xZW11IHFlbXV4ODYgYnpJbWFnZS1xZW11eDg2LmJpbiBcCisgICAgIGNvcmUtaW1hZ2Utc2F0by1xZW11eDg2LmV4dDMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCBRRU1VIGxhdW5jaGVzIHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIGZpbGVzeXN0ZW0gaW1hZ2UgYW5kIG9uIHRoZQorICAgICAgICAgICAgICAgIHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBzb3VyY2UgdGhlIGVudmlyb25tZW50IGZvciB0aGUgQVJNIHRhcmdldAorICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZSBhbmQgdGhlbiBib290IHRoZSBtaW5pbWFsIFFFTVUgaW1hZ2UsIHRoZSBlbXVsYXRvciBjb21lcyB1cCBpbiBhIG5ldworICAgICAgICAgICAgICAgIHNoZWxsIGluIGNvbW1hbmQtbGluZSBtb2RlLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBib290IHRoZSBTREsgaW1hZ2UsIFFFTVUgY29tZXMgdXAgd2l0aCBhIEdVSS4KKyAgICAgICAgICAgICAgICA8bm90ZT5Cb290aW5nIHRoZSBQUEMgaW1hZ2UgcmVzdWx0cyBpbiBRRU1VIGxhdW5jaGluZyBpbiB0aGUgc2FtZSBzaGVsbCBpbgorICAgICAgICAgICAgICAgIGNvbW1hbmQtbGluZSBtb2RlLjwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1zdHlsZS5jc3MgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MjJhZDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtc3R5bGUuY3NzCkBAIC0wLDAgKzEsOTg0IEBACisvKgorICAgR2VuZXJpYyBYSFRNTCAvIERvY0Jvb2sgWEhUTUwgQ1NTIFN0eWxlc2hlZXQuCisKKyAgIEJyb3dzZXIgd3JhbmdsaW5nIGFuZCB0eXBvZ3JhcGhpYyBkZXNpZ24gYnkKKyAgICAgIE95dmluZCBLb2xhcyAvIHBpcHBpbkBnaW1wLm9yZworCisgICBDdXN0b21pc2VkIGZvciBQb2t5IGJ5CisgICAgICBNYXR0aGV3IEFsbHVtIC8gbWFsbHVtQG8taGFuZC5jb20KKworICAgVGhhbmtzIHRvOgorICAgICBMaWFtIFIuIEUuIFF1aW4KKyAgICAgV2lsbGlhbSBTa2FnZ3MKKyAgICAgSmFrdWIgU3RlaW5lcgorCisgICBTdHJ1Y3R1cmUKKyAgIC0tLS0tLS0tLQorCisgICBUaGUgc3R5bGVzaGVldCBpcyBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKKworICAgICAgIFBvc2l0aW9uaW5nCisgICAgICAgICAgTWFyZ2lucywgcGFkZGluZ3MsIHdpZHRoLCBmb250LXNpemUsIGNsZWFyaW5nLgorICAgICAgIERlY29yYXRpb25zCisgICAgICAgICAgQm9yZGVycywgc3R5bGUKKyAgICAgICBDb2xvcnMKKyAgICAgICAgICBDb2xvcnMKKyAgICAgICBHcmFwaGljcworICAgICAgICAgIEdyYXBoaWNhbCBiYWNrZ3JvdW5kcworICAgICAgIE5hc3R5IElFIHR3ZWFrcworICAgICAgICAgIFdvcmthcm91bmRzIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgaW4gaW50ZXJuZXQgZXhwbG9yZXIsCisgICAgICAgICAgY3VycmVudGx5IG1ha2VzIHRoZSBzdHlsZXNoZWV0IG5vbiB2YWxpZGF0aW5nLCBidXQgdXAgdW50aWwKKyAgICAgICAgICB0aGlzIHBvaW50IGl0IGlzIHZhbGlkYXRpbmcuCisgICAgICAgTW96aWxsYSBleHRlbnNpb25zCisgICAgICAgICAgVHJhbnNwYXJlbmN5IGZvciBmb290ZXIKKwkgIFJvdW5kZWQgY29ybmVycyBvbiBib3hlcworCisqLworCisKKyAgLyoqKioqKioqKioqKioqKiAvCisgLyAgUG9zaXRpb25pbmcgICAvCisvICoqKioqKioqKioqKioqKi8KKworYm9keSB7CisgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBTYW5zLCBzYW5zLXNlcmlmOworCisgIG1pbi13aWR0aDogNjQwcHg7CisgIHdpZHRoOiA4MCU7CisgIG1hcmdpbjogIDBlbSBhdXRvOworICBwYWRkaW5nOiAyZW0gNWVtIDVlbSA1ZW07CisgIGNvbG9yOiAjMzMzOworfQorCitoMSxoMixoMyxoNCxoNSxoNixoNyB7CisgIGZvbnQtZmFtaWx5OiBBcmlhbCwgU2FuczsKKyAgY29sb3I6ICMwMDU1N0Q7CisgIGNsZWFyOiBib3RoOworfQorCitoMSB7CisgIGZvbnQtc2l6ZTogMmVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMmVtIDBlbSAwZW0gMGVtOworfQorCitoMi5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMC4xMGVtIDBlbSAzLjBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjhlbTsKKyAgcGFkZGluZy1sZWZ0OiAyMCU7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworaDIgeworICBtYXJnaW46IDJlbSAwZW0gMC42NmVtIDBlbTsKKyAgcGFkZGluZzogMC41ZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS41ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMy5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQyLjE0JTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK2gzIHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0MCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNCB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDUgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g2IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLmF1dGhvcmdyb3VwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIHBhZGRpbmctdG9wOiAyNTZweDsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL2FkdC10aXRsZS5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7CisgIG1hcmdpbi10b3A6IC0yNTZweDsKKyAgcGFkZGluZy1yaWdodDogNTBweDsKKyAgbWFyZ2luLWxlZnQ6IDBweDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7CisgIHdpZHRoOiA3NDBweDsKK30KKworaDMuYXV0aG9yIHsKKyAgbWFyZ2luOiAwZW0gMG1lIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zaXplOiAxMDAlOworICBjb2xvcjogIzMzMzsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5hdXRob3IgdHQuZW1haWwgeworICBmb250LXNpemU6IDY2JTsKK30KKworLnRpdGxlcGFnZSBociB7CisgIHdpZHRoOiAwZW07CisgIGNsZWFyOiBib3RoOworfQorCisucmV2aGlzdG9yeSB7CisgIHBhZGRpbmctdG9wOiAyZW07CisgIGNsZWFyOiBib3RoOworfQorCisudG9jLAorLmxpc3Qtb2YtdGFibGVzLAorLmxpc3Qtb2YtZXhhbXBsZXMsCisubGlzdC1vZi1maWd1cmVzIHsKKyAgcGFkZGluZzogMS4zM2VtIDBlbSAyLjVlbSAwZW07CisgIGNvbG9yOiAjMDA1NTdEOworfQorCisudG9jIHAsCisubGlzdC1vZi10YWJsZXMgcCwKKy5saXN0LW9mLWZpZ3VyZXMgcCwKKy5saXN0LW9mLWV4YW1wbGVzIHAgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMC4zZW07CisgIG1hcmdpbjogMS41ZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgcCBiLAorLmxpc3Qtb2YtdGFibGVzIHAgYiwKKy5saXN0LW9mLWZpZ3VyZXMgcCBiLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCBieworICBmb250LXNpemU6IDEwMC4wJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy50b2MgZGwsCisubGlzdC1vZi10YWJsZXMgZGwsCisubGlzdC1vZi1maWd1cmVzIGRsLAorLmxpc3Qtb2YtZXhhbXBsZXMgZGwgeworICBtYXJnaW46IDBlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZHQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGRkIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAyLjZlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuZ2xvc3NhcnkgZGwsCitkaXYudmFyaWFibGVsaXN0IGRsIHsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgd2lkdGg6IDIwZW07CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCisudmFyaWFibGVsaXN0IGRsIGR0IHsKKyAgbWFyZ2luLXRvcDogMC41ZW07Cit9CisKKy5nbG9zc2FyeSBkbCBkZCwKKy52YXJpYWJsZWxpc3QgZGwgZGQgeworICBtYXJnaW4tdG9wOiAtMWVtOworICBtYXJnaW4tbGVmdDogMjUuNWVtOworfQorCisuZ2xvc3NhcnkgZGQgcCwKKy52YXJpYWJsZWxpc3QgZGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKK2RpdiBwLmNvcHlyaWdodCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK2Rpdi5sZWdhbG5vdGljZSBwLmxlZ2Fsbm90aWNlLXRpdGxlIHsKKyAgbWFyZ2luLWJvdHRvbTogMGVtOworfQorCitwIHsKKyAgbGluZS1oZWlnaHQ6IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisKK30KKworZGwgeworICBwYWRkaW5nLXRvcDogMGVtOworfQorCitociB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCisKKy5tZWRpYW9iamVjdCwKKy5tZWRpYW9iamVjdGNvIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitpbWcgeworICBib3JkZXI6IG5vbmU7Cit9CisKK3VsIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMS41ZW07Cit9CisKK3VsIGxpIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCit1bCBsaSBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKwordGFibGUgeworICB3aWR0aCA6MTAwJTsKK30KKwordGggeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCitwIGFbaWRdIHsKKyAgbWFyZ2luOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKKyAgZGlzcGxheTogaW5saW5lOworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorCithIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGNvbG9yOiAjNDQ0OworfQorCitwcmUgeworICAgIG92ZXJmbG93OiBhdXRvOworfQorCithOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIC8qZm9udC13ZWlnaHQ6IGJvbGQ7Ki8KK30KKworLyogVGhpcyBzdHlsZSBkZWZpbmVzIGhvdyB0aGUgcGVybWFsaW5rIGNoYXJhY3RlcgorICAgYXBwZWFycyBieSBpdHNlbGYgYW5kIHdoZW4gaG92ZXJlZCBvdmVyIHdpdGgKKyAgIHRoZSBtb3VzZS4gKi8KKworW2FsdD0nUGVybWFsaW5rJ10geyBjb2xvcjogI2VlZTsgfQorW2FsdD0nUGVybWFsaW5rJ106aG92ZXIgeyBjb2xvcjogYmxhY2s7IH0KKworCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUgeworICBtYXJnaW46IDFlbSAwZW07CisgIHBhZGRpbmc6IDFlbTsKKyAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOworfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWxleGFtcGxlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbHRhYmxlIHAudGl0bGUgYiwKK2Rpdi5maWd1cmUgcC50aXRsZSBiLAorZGl2LmV4YW1wbGUgcC50aXRsZSBiLAorZGl2LnRhYmxlIHAudGl0bGUgYnsKKyAgICBwYWRkaW5nLXRvcDogMGVtOworICAgIG1hcmdpbi10b3A6IDBlbTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLm1lZGlhb2JqZWN0IC5jYXB0aW9uLAorLm1lZGlhb2JqZWN0IC5jYXB0aW9uIHAgIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZy10b3A6IDAuNWVtOworICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Cit9CisKKy5lcGlncmFwaCB7CisgIHBhZGRpbmctbGVmdDogNTUlOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKy5lcGlncmFwaCBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmVwaWdyYXBoIC5xdW90ZSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKy5lcGlncmFwaCAuYXR0cmlidXRpb24geworICBmb250LXN0eWxlOiBub3JtYWw7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitzcGFuLmFwcGxpY2F0aW9uIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisucHJvZ3JhbWxpc3RpbmcgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlOworICBmb250LXNpemU6IDgwJTsKKyAgd2hpdGUtc3BhY2U6IHByZTsKKyAgbWFyZ2luOiAxLjMzZW0gMGVtOworICBwYWRkaW5nOiAxLjMzZW07Cit9CisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBtYXJnaW4tdG9wOiAxZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKKworfQorCisvKiBmb3JjZSBmdWxsIHdpZHRoIG9mIHRhYmxlIHdpdGhpbiBkaXYgKi8KKy50aXAgdGFibGUsCisud2FybmluZyB0YWJsZSwKKy5jYXV0aW9uIHRhYmxlLAorLm5vdGUgdGFibGUgeworICBib3JkZXI6IG5vbmU7CisgIHdpZHRoOiAxMDAlOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBwYWRkaW5nOiAwLjhlbSAwLjBlbSAwLjBlbSAwLjBlbTsKKyAgbWFyZ2luIDogMGVtIDBlbSAwZW0gMGVtOworfQorCisudGlwIHAsCisud2FybmluZyBwLAorLmNhdXRpb24gcCwKKy5ub3RlIHAgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMC41ZW07CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmFjcm9ueW0geworICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICBwYWRkaW5nOiAwLjA5ZW0gMC4zZW07CisgIG1hcmdpbjogMGVtOworfQorCisuaXRlbWl6ZWRsaXN0IGxpIHsKKyAgY2xlYXI6IG5vbmU7Cit9CisKKy5maWxlbmFtZSB7CisgIGZvbnQtc2l6ZTogbWVkaXVtOworICBmb250LWZhbWlseTogQ291cmllciwgbW9ub3NwYWNlOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDBlbTsKKyAgdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RmOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgbGVmdDogMGVtOworICBib3R0b206IDBlbTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworZGl2Lm5hdmhlYWRlciB0ZCwKK2Rpdi5uYXZmb290ZXIgdGQgeworICBmb250LXNpemU6IDY2JTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0aCB7CisgIC8qZm9udC1mYW1pbHk6IEdlb3JnaWEsIFRpbWVzLCBzZXJpZjsqLworICAvKmZvbnQtc2l6ZTogeC1sYXJnZTsqLworICBmb250LXNpemU6IDgwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci1ib3R0b206IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYSwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYSB7CisgIGNvbG9yOiAjNzc3OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKy8qIG5vcm1hbCB0ZXh0IGluIHRoZSBmb290ZXIgKi8KK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgeworICBjb2xvcjogYmxhY2s7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTp2aXNpdGVkLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOnZpc2l0ZWQgeworICBjb2xvcjogIzQ0NDsKK30KKworCisvKiBsaW5rcyBpbiBoZWFkZXIgYW5kIGZvb3RlciAqLworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOmhvdmVyLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBjb2xvcjogIzMzYTsKK30KKworZGl2Lm5hdmhlYWRlciBociwKK2Rpdi5uYXZmb290ZXIgaHIgeworICBkaXNwbGF5OiBub25lOworfQorCisKKy5xYW5kYXNldCB0ci5xdWVzdGlvbiB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnFhbmRhc2V0IHRyLmFuc3dlciB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKy5hbnN3ZXIgdGQgeworICBwYWRkaW5nLWJvdHRvbTogMS41ZW07Cit9CisKKy5lbXBoYXNpcyB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisKKyAgLyoqKioqKioqKioqKiogLworIC8gZGVjb3JhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKi8KKworLnRpdGxlcGFnZSB7Cit9CisKKy5wYXJ0IC50aXRsZSB7Cit9CisKKy5zdWJ0aXRsZSB7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKgoraDEgeworICBib3JkZXI6IG5vbmU7Cit9CisKK2gyIHsKKyAgYm9yZGVyLXRvcDogc29saWQgMC4yZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDMgeworICBib3JkZXItdG9wOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDQgeworICBib3JkZXI6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNSB7CisgIGJvcmRlcjogMGVtOworfQorKi8KKworLnByb2dyYW1saXN0aW5nIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisucXVlc3Rpb24gdGQgeworICBib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7Cit9CisKKy5hbnN3ZXIgeworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZDsKK30KKworICAvKioqKioqKioqIC8KKyAvICBjb2xvcnMgIC8KKy8gKioqKioqKioqLworCitib2R5IHsKKyAgY29sb3I6ICMzMzM7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorCithIHsKKyAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cit9CisKK2E6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVkZWRlOworfQorCisKK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3LAoraDggeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKworaHIgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKKworLnRpcCwgLndhcm5pbmcsIC5jYXV0aW9uLCAubm90ZSB7CisgIGJvcmRlci1jb2xvcjogI2ZmZjsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKK30KKworCisud2FybmluZyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLnRpcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5ub3RlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgY29sb3I6ICMwNDQ7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworcHJlLnByb2dyYW1saXN0aW5nIHsKKyAgY29sb3I6IGJsYWNrOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXItY29sb3I6ICNhYWE7CisgIGJvcmRlci13aWR0aDogMnB4OworfQorCisuZ3VpbWVudSwKKy5ndWlsYWJlbCwKKy5ndWltZW51aXRlbSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgYm9yZGVyLWNvbG9yOiAjOTk5OworfQorCisKK2Rpdi5uYXZoZWFkZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKK2Rpdi5uYXZmb290ZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKKyAgLyoqKioqKioqKioqIC8KKyAvICBncmFwaGljcyAgLworLyAqKioqKioqKioqKi8KKworLyoKK2JvZHkgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ib2R5X2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisubmF2aGVhZGVyLAorLm5vdGUsCisudGlwIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvbm90ZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLndhcm5pbmcsCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL3dhcm5pbmdfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5maWd1cmUsCisuaW5mb3JtYWxmaWd1cmUsCisuZXhhbXBsZSwKKy5pbmZvcm1hbGV4YW1wbGUsCisudGFibGUsCisuaW5mb3JtYWx0YWJsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2ZpZ3VyZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworKi8KK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3eworfQorCisvKgorRXhhbXBsZSBvZiBob3cgdG8gc3RpY2sgYW4gaW1hZ2UgYXMgcGFydCBvZiB0aGUgdGl0bGUuCisKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy93aGl0ZS1vbi1ibGFjay5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Cit9CisqLworCitkaXYucHJlZmFjZSAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5jb2xvcGhvbiAudGl0bGUsCitkaXYuY2hhcHRlciAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7Cit9CisKK2Rpdi5zZWN0aW9uIGRpdi5zZWN0aW9uIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LnNlY3QyIC50aXRsZXBhZ2UgLnRpdGxlIHsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworfQorCisKK2gxLnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIGhlaWdodDogMjU2cHg7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47CisgIHdpZHRoOiAwcHg7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyAgcGlwcGluLmdpbXAub3JnIHNwZWNpZmljIGFsdGVyYXRpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgY29sb3I6ICM3Nzc7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nOiAwOworICBtYXJnaW46IDA7CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwcHg7CisgIGxlZnQ6IDBweDsKKyAgd2lkdGg6IDEwMCU7CisgIGhlaWdodDogNTBweDsKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2hlYWRpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKKyAgYm9yZGVyOiBub25lOworfQorCitkaXYuaGVhZGluZyBhIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyOiBub25lOworICBjb2xvcjogI2RkZDsKKyAgZm9udC1zaXplOiA4MCU7CisgIHRleHQtYWxpZ246cmlnaHQ7CisKKyAgd2lkdGg6IDEwMCU7CisgIHBhZGRpbmctdG9wOiAxMHB4OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMHB4OworICBsZWZ0OiAwcHg7CisKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2Zvb3RpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7Cit9CisqLworCisKKworICAvKioqKioqKioqKioqKioqKioqIC8KKyAvICBuYXN0eSBpZSB0d2Vha3MgIC8KKy8gKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKKyAgbWFyZ2luLWxlZnQ6ZXhwcmVzc2lvbigiLTVlbSIpOworfQorYm9keSB7CisgIHBhZGRpbmc6ZXhwcmVzc2lvbigiNGVtIDVlbSAwZW0gNWVtIik7Cit9CisqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvIG1vemlsbGEgdmVuZG9yIHNwZWNpZmljIGNzcyBleHRlbnNpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIC1tb3otb3BhY2l0eTogMC44ZW07Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSwKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuNWVtOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuM2VtOworfQorKi8KKwordGFibGUgdHIgdGQgdGFibGUgdHIgdGQgeworICBkaXNwbGF5OiBub25lOworfQorCisKK2hyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKwordGFibGUgeworICBib3JkZXI6IDBlbTsKK30KKworIC5waG90byB7CisgIGZsb2F0OiByaWdodDsKKyAgbWFyZ2luLWxlZnQ6ICAgMS41ZW07CisgIG1hcmdpbi1ib3R0b206IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisgIG1heC13aWR0aDogICAgICAxN2VtOworICBib3JkZXI6ICAgICAxcHggc29saWQgZ3JheTsKKyAgcGFkZGluZzogICAgM3B4OworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKyAuc2VwZXJhdG9yIHsKKyAgIHBhZGRpbmctdG9wOiAyZW07CisgICBjbGVhcjogYm90aDsKKyAgfQorCisgICN2YWxpZGF0b3JzIHsKKyAgICAgIG1hcmdpbi10b3A6IDVlbTsKKyAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgY29sb3I6ICM3Nzc7CisgIH0KKyAgQG1lZGlhIHByaW50IHsKKyAgICAgIGJvZHkgeworICAgICAgICAgIGZvbnQtc2l6ZTogOHB0OworICAgICAgfQorICAgICAgLm5vcHJpbnQgeworICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CisgICAgICB9CisgIH0KKworCisudGlwLAorLm5vdGUgeworICAgYmFja2dyb3VuZDogI2YwZjBmMjsKKyAgIGNvbG9yOiAjMzMzOworICAgcGFkZGluZzogMjBweDsKKyAgIG1hcmdpbjogMjBweDsKK30KKworLnRpcCBoMywKKy5ub3RlIGgzIHsKKyAgIHBhZGRpbmc6IDBlbTsKKyAgIG1hcmdpbjogMGVtOworICAgZm9udC1zaXplOiAyZW07CisgICBmb250LXdlaWdodDogYm9sZDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisudGlwIGEsCisubm90ZSBhIHsKKyAgIGNvbG9yOiAjMzMzOworICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5mb290bm90ZSB7CisgICBmb250LXNpemU6IHNtYWxsOworICAgY29sb3I6ICMzMzM7Cit9CisKKy8qIENoYW5nZXMgdGhlIGFubm91bmNlbWVudCB0ZXh0ICovCisudGlwIGgzLAorLndhcm5pbmcgaDMsCisuY2F1dGlvbiBoMywKKy5ub3RlIGgzIHsKKyAgIGZvbnQtc2l6ZTpsYXJnZTsKKyAgIGNvbG9yOiAjMDA1NTdEOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvZmlndXJlcy9hZHQtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvZmlndXJlcy9hZHQtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNzFlNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9maWd1cmVzL2FkdC10aXRsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvZmlndXJlcy91c2luZy1hLXByZS1idWlsdC1pbWFnZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9maWd1cmVzL3VzaW5nLWEtcHJlLWJ1aWx0LWltYWdlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDMxMzBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvZmlndXJlcy91c2luZy1hLXByZS1idWlsdC1pbWFnZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AtZ3VpZGUtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTY3NGEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AtZ3VpZGUtY3VzdG9taXphdGlvbi54c2wKQEAgLTAsMCArMSwyNyBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IiB2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCistLT4KKworICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvcGVybWFsaW5rcy54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9kaXZpc2lvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wiLz4KKworICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInYnNwLXN0eWxlLmNzcyciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiIHNlbGVjdD0iQSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUuaWQuYXR0cmlidXRlcyIgc2VsZWN0PSIxIiAvPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AtZ3VpZGUtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvYnNwLWd1aWRlLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUzNDZlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvYnNwLWd1aWRlLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8eHNsOnN0eWxlc2hlZXQKKwl4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKwl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKKwl4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IgorCXZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0CisJICBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCistLT4KKworICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rZXIub3V0cHV0LmluZGVudCIgc2VsZWN0PSIneWVzJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rLnF1aWV0bHkiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rLmZpcnN0LnNlY3Rpb25zIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5zZWN0aW9uLmRlcHRoIiBzZWxlY3Q9IjEwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0idXNlLmlkLmFzLmZpbGVuYW1lIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ1bGluay50YXJnZXQiIHNlbGVjdD0iJ19zZWxmJyIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJiYXNlLmRpciIgc2VsZWN0PSInaHRtbC9ic3AtZ3VpZGUvJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInLi4vYm9vay5jc3MnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZWNsaXBzZS5tYW5pZmVzdCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY3JlYXRlLnBsdWdpbi54bWwiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InN1cHByZXNzLm5hdmlnYXRpb24iIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmluZGV4IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ3N2NhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvYnNwLWd1aWRlLnhtbApAQCAtMCwwICsxLDEzOCBAQAorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGJvb2sgaWQ9J2JzcC1ndWlkZScgbGFuZz0nZW4nCisgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIKKyAgICAgIHhtbG5zPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgICAgID4KKyAgICA8Ym9va2luZm8+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0nZmlndXJlcy9ic3AtdGl0bGUucG5nJworICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J1NWRycKKyAgICAgICAgICAgICAgICAgICAgYWxpZ249J2NlbnRlcicgc2NhbGVmaXQ9JzEnIHdpZHRoPScxMDAlJy8+CisgICAgICAgICAgICA8L2ltYWdlb2JqZWN0PgorICAgICAgICA8L21lZGlhb2JqZWN0PgorCisgICAgICAgIDx0aXRsZT4KKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIERldmVsb3BlcidzIEd1aWRlCisgICAgICAgIDwvdGl0bGU+CisKKyAgICAgICAgPGF1dGhvcmdyb3VwPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlRvbTwvZmlyc3RuYW1lPiA8c3VybmFtZT5aYW51c3NpPC9zdXJuYW1lPgorICAgICAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG9yZ25hbWU+SW50ZWwgQ29ycG9yYXRpb248L29yZ25hbWU+CisgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICA8ZW1haWw+dG9tLnphbnVzc2lAaW50ZWwuY29tPC9lbWFpbD4KKyAgICAgICAgICAgIDwvYXV0aG9yPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlJpY2hhcmQ8L2ZpcnN0bmFtZT4gPHN1cm5hbWU+UHVyZGllPC9zdXJuYW1lPgorICAgICAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG9yZ25hbWU+TGludXggRm91bmRhdGlvbjwvb3JnbmFtZT4KKyAgICAgICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgIDxlbWFpbD5yaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPC9lbWFpbD4KKyAgICAgICAgICAgIDwvYXV0aG9yPgorICAgICAgICA8L2F1dGhvcmdyb3VwPgorCisgICAgICAgIDxyZXZoaXN0b3J5PgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MC45PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+MjQgTm92ZW1iZXIgMjAxMDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlRoZSBpbml0aWFsIGRvY3VtZW50IGRyYWZ0IHJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMC45IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4wPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+NiBBcHJpbCAyMDExPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjAgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjAuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjIzIE1heSAyMDExPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjAuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjYgT2N0b2JlciAyMDExPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjI8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDEyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjIgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjM8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTI8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuMyBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTM8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxMzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS41IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS41LjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5KYW51YXJ5IDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNS4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS42PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS42IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS43PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjcgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjg8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjggUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjk8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgPC9yZXZoaXN0b3J5PgorCisgICAgPGNvcHlyaWdodD4KKyAgICAgIDx5ZWFyPiZDT1BZUklHSFRfWUVBUjs8L3llYXI+CisgICAgICA8aG9sZGVyPkxpbnV4IEZvdW5kYXRpb248L2hvbGRlcj4KKyAgICA8L2NvcHlyaWdodD4KKworICAgIDxsZWdhbG5vdGljZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uYy1zYS8yLjAvdWsvIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbi1Db21tZXJjaWFsLVNoYXJlIEFsaWtlIDIuMCBVSzogRW5nbGFuZCAmYW1wOyBXYWxlczwvdWxpbms+IGFzIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zLgorICAgICAgPC9wYXJhPgorICAgICAgPG5vdGU+CisgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+CisgICAgICAgICAgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCB3ZWJzaXRlLgorICAgICAgPC9ub3RlPgorICAgIDwvbGVnYWxub3RpY2U+CisKKyAgICA8L2Jvb2tpbmZvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYnNwLnhtbCIvPgorCis8IS0tICAgIDxpbmRleCBpZD0naW5kZXgnPgorICAgICAgPHRpdGxlPkluZGV4PC90aXRsZT4KKyAgICA8L2luZGV4PgorLS0+CisKKzwvYm9vaz4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3Atc3R5bGUuY3NzIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3Atc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MDdjYTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1zdHlsZS5jc3MKQEAgLTAsMCArMSw5ODQgQEAKKy8qCisgICBHZW5lcmljIFhIVE1MIC8gRG9jQm9vayBYSFRNTCBDU1MgU3R5bGVzaGVldC4KKworICAgQnJvd3NlciB3cmFuZ2xpbmcgYW5kIHR5cG9ncmFwaGljIGRlc2lnbiBieQorICAgICAgT3l2aW5kIEtvbGFzIC8gcGlwcGluQGdpbXAub3JnCisKKyAgIEN1c3RvbWlzZWQgZm9yIFBva3kgYnkKKyAgICAgIE1hdHRoZXcgQWxsdW0gLyBtYWxsdW1Aby1oYW5kLmNvbQorCisgICBUaGFua3MgdG86CisgICAgIExpYW0gUi4gRS4gUXVpbgorICAgICBXaWxsaWFtIFNrYWdncworICAgICBKYWt1YiBTdGVpbmVyCisKKyAgIFN0cnVjdHVyZQorICAgLS0tLS0tLS0tCisKKyAgIFRoZSBzdHlsZXNoZWV0IGlzIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgorCisgICAgICAgUG9zaXRpb25pbmcKKyAgICAgICAgICBNYXJnaW5zLCBwYWRkaW5ncywgd2lkdGgsIGZvbnQtc2l6ZSwgY2xlYXJpbmcuCisgICAgICAgRGVjb3JhdGlvbnMKKyAgICAgICAgICBCb3JkZXJzLCBzdHlsZQorICAgICAgIENvbG9ycworICAgICAgICAgIENvbG9ycworICAgICAgIEdyYXBoaWNzCisgICAgICAgICAgR3JhcGhpY2FsIGJhY2tncm91bmRzCisgICAgICAgTmFzdHkgSUUgdHdlYWtzCisgICAgICAgICAgV29ya2Fyb3VuZHMgbmVlZGVkIHRvIG1ha2UgaXQgd29yayBpbiBpbnRlcm5ldCBleHBsb3JlciwKKyAgICAgICAgICBjdXJyZW50bHkgbWFrZXMgdGhlIHN0eWxlc2hlZXQgbm9uIHZhbGlkYXRpbmcsIGJ1dCB1cCB1bnRpbAorICAgICAgICAgIHRoaXMgcG9pbnQgaXQgaXMgdmFsaWRhdGluZy4KKyAgICAgICBNb3ppbGxhIGV4dGVuc2lvbnMKKyAgICAgICAgICBUcmFuc3BhcmVuY3kgZm9yIGZvb3RlcgorCSAgUm91bmRlZCBjb3JuZXJzIG9uIGJveGVzCisKKyovCisKKworICAvKioqKioqKioqKioqKioqIC8KKyAvICBQb3NpdGlvbmluZyAgIC8KKy8gKioqKioqKioqKioqKioqLworCitib2R5IHsKKyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIFNhbnMsIHNhbnMtc2VyaWY7CisKKyAgbWluLXdpZHRoOiA2NDBweDsKKyAgd2lkdGg6IDgwJTsKKyAgbWFyZ2luOiAgMGVtIGF1dG87CisgIHBhZGRpbmc6IDJlbSA1ZW0gNWVtIDVlbTsKKyAgY29sb3I6ICMzMzM7Cit9CisKK2gxLGgyLGgzLGg0LGg1LGg2LGg3IHsKKyAgZm9udC1mYW1pbHk6IEFyaWFsLCBTYW5zOworICBjb2xvcjogIzAwNTU3RDsKKyAgY2xlYXI6IGJvdGg7Cit9CisKK2gxIHsKKyAgZm9udC1zaXplOiAyZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAyZW0gMGVtIDBlbSAwZW07Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwLjEwZW0gMGVtIDMuMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuOGVtOworICBwYWRkaW5nLWxlZnQ6IDIwJTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCitoMiB7CisgIG1hcmdpbjogMmVtIDBlbSAwLjY2ZW0gMGVtOworICBwYWRkaW5nOiAwLjVlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjVlbTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gzLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDIuMTQlOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworaDMgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g0IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEyMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNSB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDYgeworICBtYXJnaW46IDFlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisuYXV0aG9yZ3JvdXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgcGFkZGluZy10b3A6IDI1NnB4OworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvYnNwLXRpdGxlLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IHRvcDsKKyAgbWFyZ2luLXRvcDogLTI1NnB4OworICBwYWRkaW5nLXJpZ2h0OiA1MHB4OworICBtYXJnaW4tbGVmdDogMHB4OworICB0ZXh0LWFsaWduOiByaWdodDsKKyAgd2lkdGg6IDc0MHB4OworfQorCitoMy5hdXRob3IgeworICBtYXJnaW46IDBlbSAwbWUgMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXNpemU6IDEwMCU7CisgIGNvbG9yOiAjMzMzOworICBjbGVhcjogYm90aDsKK30KKworLmF1dGhvciB0dC5lbWFpbCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCisudGl0bGVwYWdlIGhyIHsKKyAgd2lkdGg6IDBlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5yZXZoaXN0b3J5IHsKKyAgcGFkZGluZy10b3A6IDJlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy50b2MsCisubGlzdC1vZi10YWJsZXMsCisubGlzdC1vZi1leGFtcGxlcywKKy5saXN0LW9mLWZpZ3VyZXMgeworICBwYWRkaW5nOiAxLjMzZW0gMGVtIDIuNWVtIDBlbTsKKyAgY29sb3I6ICMwMDU1N0Q7Cit9CisKKy50b2MgcCwKKy5saXN0LW9mLXRhYmxlcyBwLAorLmxpc3Qtb2YtZmlndXJlcyBwLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwLjNlbTsKKyAgbWFyZ2luOiAxLjVlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBwIGIsCisubGlzdC1vZi10YWJsZXMgcCBiLAorLmxpc3Qtb2YtZmlndXJlcyBwIGIsCisubGlzdC1vZi1leGFtcGxlcyBwIGJ7CisgIGZvbnQtc2l6ZTogMTAwLjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLnRvYyBkbCwKKy5saXN0LW9mLXRhYmxlcyBkbCwKKy5saXN0LW9mLWZpZ3VyZXMgZGwsCisubGlzdC1vZi1leGFtcGxlcyBkbCB7CisgIG1hcmdpbjogMGVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkdCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZGQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDIuNmVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5nbG9zc2FyeSBkbCwKK2Rpdi52YXJpYWJsZWxpc3QgZGwgeworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBmb250LXdlaWdodDogbm9ybWFsOworICB3aWR0aDogMjBlbTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy52YXJpYWJsZWxpc3QgZGwgZHQgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKK30KKworLmdsb3NzYXJ5IGRsIGRkLAorLnZhcmlhYmxlbGlzdCBkbCBkZCB7CisgIG1hcmdpbi10b3A6IC0xZW07CisgIG1hcmdpbi1sZWZ0OiAyNS41ZW07Cit9CisKKy5nbG9zc2FyeSBkZCBwLAorLnZhcmlhYmxlbGlzdCBkZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworZGl2IHAuY29weXJpZ2h0IHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworZGl2LmxlZ2Fsbm90aWNlIHAubGVnYWxub3RpY2UtdGl0bGUgeworICBtYXJnaW4tYm90dG9tOiAwZW07Cit9CisKK3AgeworICBsaW5lLWhlaWdodDogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKworfQorCitkbCB7CisgIHBhZGRpbmctdG9wOiAwZW07Cit9CisKK2hyIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKKworLm1lZGlhb2JqZWN0LAorLm1lZGlhb2JqZWN0Y28geworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKK2ltZyB7CisgIGJvcmRlcjogbm9uZTsKK30KKwordWwgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAxLjVlbTsKK30KKwordWwgbGkgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK3VsIGxpIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCit0YWJsZSB7CisgIHdpZHRoIDoxMDAlOworfQorCit0aCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKwordGQgeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3AgYVtpZF0geworICBtYXJnaW46IDBweDsKKyAgcGFkZGluZzogMHB4OworICBkaXNwbGF5OiBpbmxpbmU7CisgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Cit9CisKK2EgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK3ByZSB7CisgICAgb3ZlcmZsb3c6IGF1dG87Cit9CisKK2E6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgLypmb250LXdlaWdodDogYm9sZDsqLworfQorCisvKiBUaGlzIHN0eWxlIGRlZmluZXMgaG93IHRoZSBwZXJtYWxpbmsgY2hhcmFjdGVyCisgICBhcHBlYXJzIGJ5IGl0c2VsZiBhbmQgd2hlbiBob3ZlcmVkIG92ZXIgd2l0aAorICAgdGhlIG1vdXNlLiAqLworCitbYWx0PSdQZXJtYWxpbmsnXSB7IGNvbG9yOiAjZWVlOyB9CitbYWx0PSdQZXJtYWxpbmsnXTpob3ZlciB7IGNvbG9yOiBibGFjazsgfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSB7CisgIG1hcmdpbjogMWVtIDBlbTsKKyAgcGFkZGluZzogMWVtOworICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7Cit9CisKKworZGl2LmluZm9ybWFsZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsdGFibGUgcC50aXRsZSBiLAorZGl2LmZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYudGFibGUgcC50aXRsZSBieworICAgIHBhZGRpbmctdG9wOiAwZW07CisgICAgbWFyZ2luLXRvcDogMGVtOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisubWVkaWFvYmplY3QgLmNhcHRpb24sCisubWVkaWFvYmplY3QgLmNhcHRpb24gcCAgeworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nLXRvcDogMC41ZW07CisgIHBhZGRpbmctYm90dG9tOiAwLjVlbTsKK30KKworLmVwaWdyYXBoIHsKKyAgcGFkZGluZy1sZWZ0OiA1NSU7CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworLmVwaWdyYXBoIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuZXBpZ3JhcGggLnF1b3RlIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorLmVwaWdyYXBoIC5hdHRyaWJ1dGlvbiB7CisgIGZvbnQtc3R5bGU6IG5vcm1hbDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK3NwYW4uYXBwbGljYXRpb24geworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogODAlOworICB3aGl0ZS1zcGFjZTogcHJlOworICBtYXJnaW46IDEuMzNlbSAwZW07CisgIHBhZGRpbmc6IDEuMzNlbTsKK30KKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIG1hcmdpbi10b3A6IDFlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworCit9CisKKy8qIGZvcmNlIGZ1bGwgd2lkdGggb2YgdGFibGUgd2l0aGluIGRpdiAqLworLnRpcCB0YWJsZSwKKy53YXJuaW5nIHRhYmxlLAorLmNhdXRpb24gdGFibGUsCisubm90ZSB0YWJsZSB7CisgIGJvcmRlcjogbm9uZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIHBhZGRpbmc6IDAuOGVtIDAuMGVtIDAuMGVtIDAuMGVtOworICBtYXJnaW4gOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50aXAgcCwKKy53YXJuaW5nIHAsCisuY2F1dGlvbiBwLAorLm5vdGUgcCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKKyAgcGFkZGluZy1yaWdodDogMWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuYWNyb255bSB7CisgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIHBhZGRpbmc6IDAuMDllbSAwLjNlbTsKKyAgbWFyZ2luOiAwZW07Cit9CisKKy5pdGVtaXplZGxpc3QgbGkgeworICBjbGVhcjogbm9uZTsKK30KKworLmZpbGVuYW1lIHsKKyAgZm9udC1zaXplOiBtZWRpdW07CisgIGZvbnQtZmFtaWx5OiBDb3VyaWVyLCBtb25vc3BhY2U7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgbGVmdDogMGVtOworICB0b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7CisgIGJhY2tncm91bmQtY29sb3I6ICNjZGY7CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgcG9zaXRpb246IGZpeGVkOworICBsZWZ0OiAwZW07CisgIGJvdHRvbTogMGVtOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICB3aWR0aDogMTAwJTsKK30KKworCitkaXYubmF2aGVhZGVyIHRkLAorZGl2Lm5hdmZvb3RlciB0ZCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRoIHsKKyAgLypmb250LWZhbWlseTogR2VvcmdpYSwgVGltZXMsIHNlcmlmOyovCisgIC8qZm9udC1zaXplOiB4LWxhcmdlOyovCisgIGZvbnQtc2l6ZTogODAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci10b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhIHsKKyAgY29sb3I6ICM3Nzc7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworLyogbm9ybWFsIHRleHQgaW4gdGhlIGZvb3RlciAqLworZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCB7CisgIGNvbG9yOiBibGFjazsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOnZpc2l0ZWQsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6dmlzaXRlZCB7CisgIGNvbG9yOiAjNDQ0OworfQorCisKKy8qIGxpbmtzIGluIGhlYWRlciBhbmQgZm9vdGVyICovCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6aG92ZXIsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGNvbG9yOiAjMzNhOworfQorCitkaXYubmF2aGVhZGVyIGhyLAorZGl2Lm5hdmZvb3RlciBociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworLnFhbmRhc2V0IHRyLnF1ZXN0aW9uIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisucWFuZGFzZXQgdHIuYW5zd2VyIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorLmFuc3dlciB0ZCB7CisgIHBhZGRpbmctYm90dG9tOiAxLjVlbTsKK30KKworLmVtcGhhc2lzIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKworICAvKioqKioqKioqKioqKiAvCisgLyBkZWNvcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqLworCisudGl0bGVwYWdlIHsKK30KKworLnBhcnQgLnRpdGxlIHsKK30KKworLnN1YnRpdGxlIHsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKy8qCitoMSB7CisgIGJvcmRlcjogbm9uZTsKK30KKworaDIgeworICBib3JkZXItdG9wOiBzb2xpZCAwLjJlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoMyB7CisgIGJvcmRlci10b3A6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNCB7CisgIGJvcmRlcjogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g1IHsKKyAgYm9yZGVyOiAwZW07Cit9CisqLworCisucHJvZ3JhbWxpc3RpbmcgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKy5xdWVzdGlvbiB0ZCB7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsKK30KKworLmFuc3dlciB7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkOworfQorCisgIC8qKioqKioqKiogLworIC8gIGNvbG9ycyAgLworLyAqKioqKioqKiovCisKK2JvZHkgeworICBjb2xvcjogIzMzMzsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisKK2EgeworICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKK30KKworYTpob3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6ICNkZWRlZGU7Cit9CisKKworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDcsCitoOCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworfQorCitociB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworCisudGlwLCAud2FybmluZywgLmNhdXRpb24sIC5ub3RlIHsKKyAgYm9yZGVyLWNvbG9yOiAjZmZmOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmOworfQorCisKKy53YXJuaW5nIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisudGlwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLm5vdGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBjb2xvcjogIzA0NDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCitwcmUucHJvZ3JhbWxpc3RpbmcgeworICBjb2xvcjogYmxhY2s7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKKyAgYm9yZGVyLXdpZHRoOiAycHg7Cit9CisKKy5ndWltZW51LAorLmd1aWxhYmVsLAorLmd1aW1lbnVpdGVtIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICBib3JkZXItY29sb3I6ICM5OTk7Cit9CisKKworZGl2Lm5hdmhlYWRlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworICAvKioqKioqKioqKiogLworIC8gIGdyYXBoaWNzICAvCisvICoqKioqKioqKioqLworCisvKgorYm9keSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2JvZHlfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5uYXZoZWFkZXIsCisubm90ZSwKKy50aXAgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ub3RlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisud2FybmluZywKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvd2FybmluZ19iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLmZpZ3VyZSwKKy5pbmZvcm1hbGZpZ3VyZSwKKy5leGFtcGxlLAorLmluZm9ybWFsZXhhbXBsZSwKKy50YWJsZSwKKy5pbmZvcm1hbHRhYmxlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvZmlndXJlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisqLworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDd7Cit9CisKKy8qCitFeGFtcGxlIG9mIGhvdyB0byBzdGljayBhbiBpbWFnZSBhcyBwYXJ0IG9mIHRoZSB0aXRsZS4KKworZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL3doaXRlLW9uLWJsYWNrLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKK30KKyovCisKK2Rpdi5wcmVmYWNlIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmNvbG9waG9uIC50aXRsZSwKK2Rpdi5jaGFwdGVyIC50aXRsZXBhZ2UgLnRpdGxlIHsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogYm90dG9tOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Cit9CisKK2Rpdi5zZWN0aW9uIGRpdi5zZWN0aW9uIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LnNlY3QyIC50aXRsZXBhZ2UgLnRpdGxlIHsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworfQorCisKK2gxLnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIGhlaWdodDogMjU2cHg7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47CisgIHdpZHRoOiAwcHg7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyAgcGlwcGluLmdpbXAub3JnIHNwZWNpZmljIGFsdGVyYXRpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgY29sb3I6ICM3Nzc7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nOiAwOworICBtYXJnaW46IDA7CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwcHg7CisgIGxlZnQ6IDBweDsKKyAgd2lkdGg6IDEwMCU7CisgIGhlaWdodDogNTBweDsKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2hlYWRpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKKyAgYm9yZGVyOiBub25lOworfQorCitkaXYuaGVhZGluZyBhIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyOiBub25lOworICBjb2xvcjogI2RkZDsKKyAgZm9udC1zaXplOiA4MCU7CisgIHRleHQtYWxpZ246cmlnaHQ7CisKKyAgd2lkdGg6IDEwMCU7CisgIHBhZGRpbmctdG9wOiAxMHB4OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMHB4OworICBsZWZ0OiAwcHg7CisKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2Zvb3RpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7Cit9CisqLworCisKKworICAvKioqKioqKioqKioqKioqKioqIC8KKyAvICBuYXN0eSBpZSB0d2Vha3MgIC8KKy8gKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKKyAgbWFyZ2luLWxlZnQ6ZXhwcmVzc2lvbigiLTVlbSIpOworfQorYm9keSB7CisgIHBhZGRpbmc6ZXhwcmVzc2lvbigiNGVtIDVlbSAwZW0gNWVtIik7Cit9CisqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvIG1vemlsbGEgdmVuZG9yIHNwZWNpZmljIGNzcyBleHRlbnNpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIC1tb3otb3BhY2l0eTogMC44ZW07Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSwKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuNWVtOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuM2VtOworfQorKi8KKwordGFibGUgdHIgdGQgdGFibGUgdHIgdGQgeworICBkaXNwbGF5OiBub25lOworfQorCisKK2hyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKwordGFibGUgeworICBib3JkZXI6IDBlbTsKK30KKworIC5waG90byB7CisgIGZsb2F0OiByaWdodDsKKyAgbWFyZ2luLWxlZnQ6ICAgMS41ZW07CisgIG1hcmdpbi1ib3R0b206IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisgIG1heC13aWR0aDogICAgICAxN2VtOworICBib3JkZXI6ICAgICAxcHggc29saWQgZ3JheTsKKyAgcGFkZGluZzogICAgM3B4OworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKyAuc2VwZXJhdG9yIHsKKyAgIHBhZGRpbmctdG9wOiAyZW07CisgICBjbGVhcjogYm90aDsKKyAgfQorCisgICN2YWxpZGF0b3JzIHsKKyAgICAgIG1hcmdpbi10b3A6IDVlbTsKKyAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgY29sb3I6ICM3Nzc7CisgIH0KKyAgQG1lZGlhIHByaW50IHsKKyAgICAgIGJvZHkgeworICAgICAgICAgIGZvbnQtc2l6ZTogOHB0OworICAgICAgfQorICAgICAgLm5vcHJpbnQgeworICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CisgICAgICB9CisgIH0KKworCisudGlwLAorLm5vdGUgeworICAgYmFja2dyb3VuZDogI2YwZjBmMjsKKyAgIGNvbG9yOiAjMzMzOworICAgcGFkZGluZzogMjBweDsKKyAgIG1hcmdpbjogMjBweDsKK30KKworLnRpcCBoMywKKy5ub3RlIGgzIHsKKyAgIHBhZGRpbmc6IDBlbTsKKyAgIG1hcmdpbjogMGVtOworICAgZm9udC1zaXplOiAyZW07CisgICBmb250LXdlaWdodDogYm9sZDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisudGlwIGEsCisubm90ZSBhIHsKKyAgIGNvbG9yOiAjMzMzOworICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5mb290bm90ZSB7CisgICBmb250LXNpemU6IHNtYWxsOworICAgY29sb3I6ICMzMzM7Cit9CisKKy8qIENoYW5nZXMgdGhlIGFubm91bmNlbWVudCB0ZXh0ICovCisudGlwIGgzLAorLndhcm5pbmcgaDMsCisuY2F1dGlvbiBoMywKKy5ub3RlIGgzIHsKKyAgIGZvbnQtc2l6ZTpsYXJnZTsKKyAgIGNvbG9yOiAjMDA1NTdEOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMzllYzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC54bWwKQEAgLTAsMCArMSwxNTU4IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nYnNwJz4KKworICAgICAgICA8dGl0bGU+Qm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQKSAtIERldmVsb3BlcidzIEd1aWRlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIGlzIGEgY29sbGVjdGlvbiBvZiBpbmZvcm1hdGlvbiB0aGF0CisgICAgICAgICAgICBkZWZpbmVzIGhvdyB0byBzdXBwb3J0IGEgcGFydGljdWxhciBoYXJkd2FyZSBkZXZpY2UsIHNldCBvZiBkZXZpY2VzLCBvcgorICAgICAgICAgICAgaGFyZHdhcmUgcGxhdGZvcm0uCisgICAgICAgICAgICBUaGUgQlNQIGluY2x1ZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBoYXJkd2FyZSBmZWF0dXJlcworICAgICAgICAgICAgcHJlc2VudCBvbiB0aGUgZGV2aWNlIGFuZCBrZXJuZWwgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbG9uZyB3aXRoIGFueQorICAgICAgICAgICAgYWRkaXRpb25hbCBoYXJkd2FyZSBkcml2ZXJzIHJlcXVpcmVkLgorICAgICAgICAgICAgVGhlIEJTUCBhbHNvIGxpc3RzIGFueSBhZGRpdGlvbmFsIHNvZnR3YXJlCisgICAgICAgICAgICBjb21wb25lbnRzIHJlcXVpcmVkIGluIGFkZGl0aW9uIHRvIGEgZ2VuZXJpYyBMaW51eCBzb2Z0d2FyZSBzdGFjayBmb3IgYm90aAorICAgICAgICAgICAgZXNzZW50aWFsIGFuZCBvcHRpb25hbCBwbGF0Zm9ybSBmZWF0dXJlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBndWlkZSBwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBCU1AgTGF5ZXJzLCBkZWZpbmVzIGEgc3RydWN0dXJlIGZvciBjb21wb25lbnRzCisgICAgICAgICAgICBzbyB0aGF0IEJTUHMgZm9sbG93IGEgY29tbW9ubHkgdW5kZXJzdG9vZCBsYXlvdXQsIGRpc2N1c3NlcyBob3cgdG8gY3VzdG9taXplCisgICAgICAgICAgICBhIHJlY2lwZSBmb3IgYSBCU1AsIGFkZHJlc3NlcyBCU1AgbGljZW5zaW5nLCBhbmQgcHJvdmlkZXMgaW5mb3JtYXRpb24gdGhhdAorICAgICAgICAgICAgc2hvd3MgeW91IGhvdyB0byBjcmVhdGUgYW5kIG1hbmFnZSBhCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdic3AtbGF5ZXJzJz5CU1AgTGF5ZXI8L2xpbms+IHVzaW5nIHR3byBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd1c2luZy10aGUteW9jdG8tcHJvamVjdHMtYnNwLXRvb2xzJz5CU1AgVG9vbHM8L2xpbms+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2JzcC1sYXllcnMnPgorICAgICAgICAgICAgPHRpdGxlPkJTUCBMYXllcnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIEJTUCBjb25zaXN0cyBvZiBhIGZpbGUgc3RydWN0dXJlIGluc2lkZSBhIGJhc2UgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIENvbGxlY3RpdmVseSwgeW91IGNhbiB0aGluayBvZiB0aGUgYmFzZSBkaXJlY3RvcnksIGl0cyBmaWxlIHN0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICBhbmQgdGhlIGNvbnRlbnRzIGFzIGEgQlNQIExheWVyLgorICAgICAgICAgICAgICAgIEFsdGhvdWdoIG5vdCBhIHN0cmljdCByZXF1aXJlbWVudCwgbGF5ZXJzIGluIHRoZSBZb2N0byBQcm9qZWN0IHVzZSB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgd2VsbC1lc3RhYmxpc2hlZCBuYW1pbmcgY29udmVudGlvbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHN0cmluZyAibWV0YS0iIGlzIHByZXBlbmRlZCB0byB0aGUgbWFjaGluZSBvciBwbGF0Zm9ybSBuYW1lLCB3aGljaCBpcworICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+IGluIHRoZSBhYm92ZSBmb3JtLgorICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5UaXA8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBCU1AgbGF5ZXIgbmFtaW5nIGNvbnZlbnRpb24gaXMgd2VsbC1lc3RhYmxpc2hlZCwKKyAgICAgICAgICAgICAgICAgICAgaXQgaXMgYWR2aXNhYmxlIHRvIGZvbGxvdyBpdCB3aGVuIGNyZWF0aW5nIGxheWVycy4KKyAgICAgICAgICAgICAgICAgICAgVGVjaG5pY2FsbHkgc3BlYWtpbmcsIGEgQlNQIGxheWVyIG5hbWUgZG9lcyBub3QgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICBzdGFydCB3aXRoIDxmaWxlbmFtZT5tZXRhLTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgbWlnaHQgcnVuIGludG8gc2l0dWF0aW9ucyB3aGVyZSBvYnNjdXJlCisgICAgICAgICAgICAgICAgICAgIHNjcmlwdHMgYXNzdW1lIHRoaXMgY29udmVudGlvbi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGhlbHAgdW5kZXJzdGFuZCB0aGUgQlNQIGxheWVyIGNvbmNlcHQsIGNvbnNpZGVyIHRoZSBCU1BzIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBzdXBwb3J0cyBhbmQgcHJvdmlkZXMgd2l0aCBlYWNoIHJlbGVhc2UuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIGxheWVycyBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN5b2N0by1wcm9qZWN0LXJlcG9zaXRvcmllcyc+WW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KKyAgICAgICAgICAgICAgICB0aHJvdWdoIGEgd2ViIGludGVyZmFjZSBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZ28gdG8gdGhhdCBpbnRlcmZhY2UsIHlvdSB3aWxsIGZpbmQgbmVhciB0aGUgYm90dG9tIG9mIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgdW5kZXIgIllvY3RvIE1ldGFkYXRhIExheWVycyIgc2V2ZXJhbCBCU1AgbGF5ZXJzIGFsbCBvZiB3aGljaCBhcmUKKyAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgKGUuZy4gPGZpbGVuYW1lPm1ldGEtbWlubm93PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtcmFzcGJlcnJ5cGk8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgRWFjaCBvZiB0aGVzZSBsYXllcnMgaXMgYSByZXBvc2l0b3J5IHVudG8gaXRzZWxmIGFuZCBjbGlja2luZyBvbiBhCisgICAgICAgICAgICAgICAgbGF5ZXIgcmV2ZWFscyBpbmZvcm1hdGlvbiB0aGF0IGluY2x1ZGVzIHR3byBsaW5rcyBmcm9tIHdoaWNoIHlvdSBjYW4gY2hvb3NlCisgICAgICAgICAgICAgICAgdG8gc2V0IHVwIGEgY2xvbmUgb2YgdGhlIGxheWVyJ3MgcmVwb3NpdG9yeSBvbiB5b3VyIGxvY2FsIGhvc3Qgc3lzdGVtLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNsb25lcyB0aGUgTWlubm93Qm9hcmQgQlNQIGxheWVyOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbWV0YS1taW5ub3cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBCU1AgZGV2ZWxvcG1lbnQgd29ya2Zsb3csIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2ZWxvcGluZy1hLWJvYXJkLXN1cHBvcnQtcGFja2FnZS1ic3AnPkRldmVsb3BpbmcgYSBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc2V0IHVwIGEgbG9jYWwgY29weSBvZiBzb3VyY2UgZmlsZXMKKyAgICAgICAgICAgICAgICBmcm9tIGEgR2l0IHJlcG9zaXRvcnksIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2V0dGluZy1zZXR1cCc+R2V0dGluZyBTZXQgVXA8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGFsc28gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgbGF5ZXIncyBiYXNlIGRpcmVjdG9yeSAoPGZpbGVuYW1lPm1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPikgaXMgdGhlIHJvb3QKKyAgICAgICAgICAgICAgICBvZiB0aGUgQlNQIExheWVyLgorICAgICAgICAgICAgICAgIFRoaXMgcm9vdCBpcyB3aGF0IHlvdSBhZGQgdG8gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJCTEFZRVJTJz48ZmlsZW5hbWU+QkJMQVlFUlM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgd2hpY2ggaXMgZXN0YWJsaXNoZWQgYWZ0ZXIgeW91IHJ1biBvbmUgb2YgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgIHNldHVwIHNjcmlwdHMgKGkuZS4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPikuCisgICAgICAgICAgICAgICAgQWRkaW5nIHRoZSByb290IGFsbG93cyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byByZWNvZ25pemUgdGhlIEJTUAorICAgICAgICAgICAgICAgIGRlZmluaXRpb24gYW5kIGZyb20gaXQgYnVpbGQgYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPz0gIiBcCisgICAgICAgL3Vzci9sb2NhbC9zcmMveW9jdG8vbWV0YSBcCisgICAgICAgL3Vzci9sb2NhbC9zcmMveW9jdG8vbWV0YS15b2N0byBcCisgICAgICAgL3Vzci9sb2NhbC9zcmMveW9jdG8vbWV0YS15b2N0by1ic3AgXAorICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEtbXlsYXllciBcCisgICAgICAgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU29tZSBCU1BzIHJlcXVpcmUgYWRkaXRpb25hbCBsYXllcnMgb24KKyAgICAgICAgICAgICAgICB0b3Agb2YgdGhlIEJTUCdzIHJvb3QgbGF5ZXIgaW4gb3JkZXIgdG8gYmUgZnVuY3Rpb25hbC4KKyAgICAgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMsIHlvdSBhbHNvIG5lZWQgdG8gYWRkIHRob3NlIGxheWVycyB0byB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJMQVlFUlM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbiBvcmRlciB0byBidWlsZCB0aGUgQlNQLgorICAgICAgICAgICAgICAgIFlvdSBtdXN0IGFsc28gc3BlY2lmeSBpbiB0aGUgIkRlcGVuZGVuY2llcyIgc2VjdGlvbiBvZiB0aGUgQlNQJ3MKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBhbnkgcmVxdWlyZW1lbnRzIGZvciBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgbGF5ZXJzIGFuZCwgcHJlZmVyYWJseSwgYW55CisgICAgICAgICAgICAgICAgYnVpbGQgaW5zdHJ1Y3Rpb25zIHRoYXQgbWlnaHQgYmUgY29udGFpbmVkIGVsc2V3aGVyZQorICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU29tZSBsYXllcnMgZnVuY3Rpb24gYXMgYSBsYXllciB0byBob2xkIG90aGVyIEJTUCBsYXllcnMuCisgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSBvZiB0aGlzIHR5cGUgb2YgbGF5ZXIgaXMgdGhlIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gbGF5ZXIsCisgICAgICAgICAgICAgICAgd2hpY2ggY29udGFpbnMgYSBudW1iZXIgb2YgaW5kaXZpZHVhbCBCU1Agc3ViLWxheWVycywgYXMgd2VsbCBhcyBhIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5jb21tb24vPC9maWxlbmFtZT4gZnVsbCBvZiBjb21tb24gY29udGVudCBhY3Jvc3MgdGhvc2UgbGF5ZXJzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBsYXllcnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nIGFuZCBDcmVhdGluZyBMYXllcnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisKKyAgICAgICAgPHNlY3Rpb24gaWQ9ImJzcC1maWxlbGF5b3V0Ij4KKyAgICAgICAgICAgIDx0aXRsZT5FeGFtcGxlIEZpbGVzeXN0ZW0gTGF5b3V0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRGVmaW5pbmcgYSBjb21tb24gQlNQIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgYWxsb3dzIGVuZC11c2VycyB0byB1bmRlcnN0YW5kIGFuZAorICAgICAgICAgICAgICAgIGJlY29tZSBmYW1pbGlhciB3aXRoIHRoYXQgc3RydWN0dXJlLgorICAgICAgICAgICAgICAgIEEgY29tbW9uIGZvcm1hdCBhbHNvIGVuY291cmFnZXMgc3RhbmRhcmRpemF0aW9uIG9mIHNvZnR3YXJlIHN1cHBvcnQgb2YgaGFyZHdhcmUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBwcm9wb3NlZCBmb3JtIGRvZXMgaGF2ZSBlbGVtZW50cyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIEl0IGlzIGludGVuZGVkIHRoYXQgdGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUKKyAgICAgICAgICAgICAgICB1c2VkIGJ5IG90aGVyIGJ1aWxkIHN5c3RlbXMgYmVzaWRlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIGFuZCB0aGF0IGl0IHdpbGwgYmUgc2ltcGxlCisgICAgICAgICAgICAgICAgdG8gZXh0cmFjdCBpbmZvcm1hdGlvbiBhbmQgY29udmVydCBpdCB0byBvdGhlciBmb3JtYXRzIGlmIHJlcXVpcmVkLgorICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLCB0aHJvdWdoIGl0cyBzdGFuZGFyZCBsYXllcnMgbWVjaGFuaXNtLCBjYW4gZGlyZWN0bHkKKyAgICAgICAgICAgICAgICBhY2NlcHQgdGhlIGZvcm1hdCBkZXNjcmliZWQgYXMgYSBsYXllci4KKyAgICAgICAgICAgICAgICBUaGUgQlNQIGNhcHR1cmVzIGFsbAorICAgICAgICAgICAgICAgIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBkZXRhaWxzIGluIG9uZSBwbGFjZSBpbiBhIHN0YW5kYXJkIGZvcm1hdCwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICB1c2VmdWwgZm9yIGFueSBwZXJzb24gd2lzaGluZyB0byB1c2UgdGhlIGhhcmR3YXJlIHBsYXRmb3JtIHJlZ2FyZGxlc3Mgb2YKKyAgICAgICAgICAgICAgICB0aGUgYnVpbGQgc3lzdGVtIHRoZXkgYXJlIHVzaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgQlNQIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaW5jbHVkZSBhIGJ1aWxkIHN5c3RlbSBvciBvdGhlciB0b29scyAtCisgICAgICAgICAgICAgICAgaXQgaXMgY29uY2VybmVkIHdpdGggdGhlIGhhcmR3YXJlLXNwZWNpZmljIGNvbXBvbmVudHMgb25seS4KKyAgICAgICAgICAgICAgICBBdCB0aGUgZW5kLWRpc3RyaWJ1dGlvbiBwb2ludCwgeW91IGNhbiBzaGlwIHRoZSBCU1AgY29tYmluZWQgd2l0aCBhIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIGFuZCBvdGhlciB0b29scy4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpdCBpcyBpbXBvcnRhbnQgdG8gbWFpbnRhaW4gdGhlIGRpc3RpbmN0aW9uIHRoYXQgdGhlc2UKKyAgICAgICAgICAgICAgICBhcmUgc2VwYXJhdGUgY29tcG9uZW50cyB0aGF0IGhhcHBlbiB0byBiZSBjb21iaW5lZCBpbiBjZXJ0YWluIGVuZCBwcm9kdWN0cy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVmb3JlIGxvb2tpbmcgYXQgdGhlIGNvbW1vbiBmb3JtIGZvciB0aGUgZmlsZSBzdHJ1Y3R1cmUgaW5zaWRlIGEgQlNQIExheWVyLAorICAgICAgICAgICAgICAgIHlvdSBzaG91bGQgYmUgYXdhcmUgdGhhdCBzb21lIHJlcXVpcmVtZW50cyBkbyBleGlzdCBpbiBvcmRlciBmb3IgYSBCU1AgdG8KKyAgICAgICAgICAgICAgICBiZSBjb25zaWRlcmVkIGNvbXBsaWFudCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIEZvciB0aGF0IGxpc3Qgb2YgcmVxdWlyZW1lbnRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlbGVhc2VkLWJzcC1yZXF1aXJlbWVudHMnPlJlbGVhc2VkIEJTUCBSZXF1aXJlbWVudHM8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlbG93IGlzIHRoZSBjb21tb24gZm9ybSBmb3IgdGhlIGZpbGUgc3RydWN0dXJlIGluc2lkZSBhIEJTUCBMYXllci4KKyAgICAgICAgICAgICAgICBXaGlsZSB5b3UgY2FuIHVzZSB0aGlzIGJhc2ljIGZvcm0gZm9yIHRoZSBzdGFuZGFyZCwgcmVhbGl6ZSB0aGF0IHRoZSBhY3R1YWwgc3RydWN0dXJlcworICAgICAgICAgICAgICAgIGZvciBzcGVjaWZpYyBCU1BzIGNvdWxkIGRpZmZlci4KKworICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi8KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+YnNwX2xpY2Vuc2VfZmlsZTwvcmVwbGFjZWFibGU+CisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vUkVBRE1FCisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vUkVBRE1FLnNvdXJjZXMKKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9iaW5hcnkvPHJlcGxhY2VhYmxlPmJvb3RhYmxlX2ltYWdlczwvcmVwbGFjZWFibGU+CisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vY29uZi9sYXllci5jb25mCisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vY29uZi9tYWNoaW5lLyouY29uZgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L3JlY2lwZXMtYnNwLyoKKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWNvcmUvKgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L3JlY2lwZXMtZ3JhcGhpY3MvKgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzxyZXBsYWNlYWJsZT5rZXJuZWxfcmV2PC9yZXBsYWNlYWJsZT4uYmJhcHBlbmQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlbG93IGlzIGFuIGV4YW1wbGUgb2YgdGhlIGVNZW5sb3cgQlNQOgorCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLWVtZW5sb3cvQ09QWUlORy5NSVQKKyAgICAgbWV0YS1lbWVubG93L1JFQURNRQorICAgICBtZXRhLWVtZW5sb3cvUkVBRE1FLnNvdXJjZXMKKyAgICAgbWV0YS1lbWVubG93L2JpbmFyeS8KKyAgICAgbWV0YS1lbWVubG93L2NvbmYvCisgICAgIG1ldGEtZW1lbmxvdy9jb25mL2xheWVyLmNvbmYKKyAgICAgbWV0YS1lbWVubG93L2NvbmYvbWFjaGluZS8KKyAgICAgbWV0YS1lbWVubG93L2NvbmYvbWFjaGluZS9lbWVubG93LW5vZW1nZC5jb25mCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWJzcC8KKyAgICAgbWV0YS1lbWVubG93L3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiYXBwZW5kCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvZW1lbmxvdy1ub2VtZ2QvCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvZW1lbmxvdy1ub2VtZ2QvbWFjaGNvbmZpZworICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ncmFwaGljcy8KKyAgICAgbWV0YS1lbWVubG93L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZAorICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9lbWVubG93LW5vZW1nZAorICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9lbWVubG93LW5vZW1nZC94b3JnLmNvbmZpZworICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1rZXJuZWwvCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWtlcm5lbC9saW51eC8KKyAgICAgbWV0YS1lbWVubG93L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZAorICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSBlYWNoIHBhcnQgb2YgdGhlIHByb3Bvc2VkIEJTUCBmb3JtYXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJic3AtZmlsZWxheW91dC1saWNlbnNlIj4KKyAgICAgICAgICAgIDx0aXRsZT5MaWNlbnNlIEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZXNlIGZpbGVzIGluIHRoZSBCU1AgTGF5ZXIgYXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+LzxyZXBsYWNlYWJsZT5ic3BfbGljZW5zZV9maWxlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXNlIG9wdGlvbmFsIGZpbGVzIHNhdGlzZnkgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBmb3IgdGhlIEJTUC4KKyAgICAgICAgICAgICAgICBUaGUgdHlwZSBvciB0eXBlcyBvZiBmaWxlcyBoZXJlIGNhbiB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaW4gdGhlIGVNZW5sb3cgQlNQIGFsbCBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIGFyZSBoYW5kbGVkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNPUFlJTkcuTUlUPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTGljZW5zaW5nIGZpbGVzIGNhbiBiZSBNSVQsIEJTRCwgR1BMdiosIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICBUaGVzZSBmaWxlcyBhcmUgcmVjb21tZW5kZWQgZm9yIHRoZSBCU1AgYnV0IGFyZSBvcHRpb25hbCBhbmQgdG90YWxseSB1cCB0byB0aGUgQlNQIGRldmVsb3Blci4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9ImJzcC1maWxlbGF5b3V0LXJlYWRtZSI+CisgICAgICAgICAgICA8dGl0bGU+UkVBRE1FIEZpbGU8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoaXMgZmlsZSBpbiB0aGUgQlNQIExheWVyIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9SRUFETUUKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiBob3cgdG8gYm9vdCB0aGUgbGl2ZSBpbWFnZXMgdGhhdCBhcmUgb3B0aW9uYWxseQorICAgICAgICAgICAgICAgIGluY2x1ZGVkIGluIHRoZSA8ZmlsZW5hbWU+YmluYXJ5LzwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUgYWxzbyBwcm92aWRlcyBzcGVjaWFsIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IKKyAgICAgICAgICAgICAgICBidWlsZGluZyB0aGUgaW1hZ2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEF0IGEgbWluaW11bSwgdGhlIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlIG11c3QKKyAgICAgICAgICAgICAgICBjb250YWluIGEgbGlzdCBvZiBkZXBlbmRlbmNpZXMsIHN1Y2ggYXMgdGhlIG5hbWVzIG9mCisgICAgICAgICAgICAgICAgYW55IG90aGVyIGxheWVycyBvbiB3aGljaCB0aGUgQlNQIGRlcGVuZHMgYW5kIHRoZSBuYW1lIG9mCisgICAgICAgICAgICAgICAgdGhlIEJTUCBtYWludGFpbmVyIHdpdGggaGlzIG9yIGhlciBjb250YWN0IGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0iYnNwLWZpbGVsYXlvdXQtcmVhZG1lLXNvdXJjZXMiPgorICAgICAgICAgICAgPHRpdGxlPlJFQURNRS5zb3VyY2VzIEZpbGU8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoaXMgZmlsZSBpbiB0aGUgQlNQIExheWVyIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9SRUFETUUuc291cmNlcworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmaWxlIHByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIHdoZXJlIHRvIGxvY2F0ZSB0aGUgQlNQCisgICAgICAgICAgICAgICAgc291cmNlIGZpbGVzIHVzZWQgdG8gYnVpbGQgdGhlIGltYWdlcyAoaWYgYW55KSB0aGF0IHJlc2lkZSBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L2JpbmFyeTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEltYWdlcyBpbiB0aGUgPGZpbGVuYW1lPmJpbmFyeTwvZmlsZW5hbWU+IHdvdWxkIGJlIGltYWdlcworICAgICAgICAgICAgICAgIHJlbGVhc2VkIHdpdGggdGhlIEJTUC4KKyAgICAgICAgICAgICAgICBUaGUgaW5mb3JtYXRpb24gaW4gdGhlIDxmaWxlbmFtZT5SRUFETUUuc291cmNlczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBhbHNvIGhlbHBzIHlvdSBmaW5kIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICAgICAgdXNlZCB0byBnZW5lcmF0ZSB0aGUgaW1hZ2VzIHRoYXQgc2hpcCB3aXRoIHRoZSBCU1AuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBCU1AncyA8ZmlsZW5hbWU+YmluYXJ5PC9maWxlbmFtZT4gZGlyZWN0b3J5IGlzCisgICAgICAgICAgICAgICAgICAgIG1pc3Npbmcgb3IgdGhlIGRpcmVjdG9yeSBoYXMgbm8gaW1hZ2VzLCBhbiBleGlzdGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkVBRE1FLnNvdXJjZXM8L2ZpbGVuYW1lPiBmaWxlIGlzCisgICAgICAgICAgICAgICAgICAgIG1lYW5pbmdsZXNzLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9ImJzcC1maWxlbGF5b3V0LWJpbmFyeSI+CisgICAgICAgICAgICA8dGl0bGU+UHJlLWJ1aWx0IFVzZXIgQmluYXJpZXM8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZXNlIGZpbGVzIGluIHRoZSBCU1AgTGF5ZXIgYXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L2JpbmFyeS88cmVwbGFjZWFibGU+Ym9vdGFibGVfaW1hZ2VzPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uYWwgYXJlYSBjb250YWlucyB1c2VmdWwgcHJlLWJ1aWx0IGtlcm5lbHMgYW5kCisgICAgICAgICAgICAgICAgdXNlci1zcGFjZSBmaWxlc3lzdGVtIGltYWdlcyByZWxlYXNlZCB3aXRoIHRoZSBCU1AgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZSB0byB0aGUgdGFyZ2V0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSB0eXBpY2FsbHkgY29udGFpbnMgZ3JhcGhpY2FsIChlLmcuIFNhdG8pIGFuZAorICAgICAgICAgICAgICAgIG1pbmltYWwgbGl2ZSBpbWFnZXMgd2hlbiB0aGUgQlNQIHRhcmJhbGwgaGFzIGJlZW4gY3JlYXRlZCBhbmQKKyAgICAgICAgICAgICAgICBtYWRlIGF2YWlsYWJsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7Jz5Zb2N0byBQcm9qZWN0PC91bGluaz4gd2Vic2l0ZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGVzZSBrZXJuZWxzIGFuZCBpbWFnZXMgdG8gZ2V0IGEgc3lzdGVtIHJ1bm5pbmcKKyAgICAgICAgICAgICAgICBhbmQgcXVpY2tseSBnZXQgc3RhcnRlZCBvbiBkZXZlbG9wbWVudCB0YXNrcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGV4YWN0IHR5cGVzIG9mIGJpbmFyaWVzIHByZXNlbnQgYXJlIGhpZ2hseQorICAgICAgICAgICAgICAgIGhhcmR3YXJlLWRlcGVuZGVudC4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUgc2hvdWxkIGJlIHByZXNlbnQgaW4gdGhlCisgICAgICAgICAgICAgICAgQlNQIExheWVyIGFuZCBpdCB3aWxsIGV4cGxhaW4gaG93IHRvIHVzZSB0aGUgaW1hZ2VzIHdpdGggdGhlCisgICAgICAgICAgICAgICAgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIDxmaWxlbmFtZT5SRUFETUUuc291cmNlczwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICBzaG91bGQgYmUgcHJlc2VudCB0byBsb2NhdGUgdGhlIHNvdXJjZXMgdXNlZCB0byBidWlsZCB0aGUKKyAgICAgICAgICAgICAgICBpbWFnZXMgYW5kIHByb3ZpZGUgaW5mb3JtYXRpb24gb24gdGhlIE1ldGFkYXRhLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nYnNwLWZpbGVsYXlvdXQtbGF5ZXInPgorICAgICAgICAgICAgPHRpdGxlPkxheWVyIENvbmZpZ3VyYXRpb24gRmlsZTwvdGl0bGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhpcyBmaWxlIGluIHRoZSBCU1AgTGF5ZXIgYXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L2NvbmYvbGF5ZXIuY29uZgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGlkZW50aWZpZXMgdGhlIGZpbGUgc3RydWN0dXJlIGFzIGEKKyAgICAgICAgICAgICAgICBsYXllciwgaWRlbnRpZmllcyB0aGUKKyAgICAgICAgICAgICAgICBjb250ZW50cyBvZiB0aGUgbGF5ZXIsIGFuZCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgc3lzdGVtIHNob3VsZCB1c2UgaXQuCisgICAgICAgICAgICAgICAgR2VuZXJhbGx5LCBhIHN0YW5kYXJkIGJvaWxlcnBsYXRlIGZpbGUgc3VjaCBhcyB0aGUgZm9sbG93aW5nIHdvcmtzLgorICAgICAgICAgICAgICAgIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgeW91IHdvdWxkIHJlcGxhY2UgIjxyZXBsYWNlYWJsZT5ic3A8L3JlcGxhY2VhYmxlPiIgYW5kCisgICAgICAgICAgICAgICAgIjxyZXBsYWNlYWJsZT5fYnNwPC9yZXBsYWNlYWJsZT4iIHdpdGggdGhlIGFjdHVhbCBuYW1lCisgICAgICAgICAgICAgICAgb2YgdGhlIEJTUCAoaS5lLiA8cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPiBmcm9tIHRoZSBleGFtcGxlIHRlbXBsYXRlKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgV2UgaGF2ZSBhIGNvbmYgYW5kIGNsYXNzZXMgZGlyZWN0b3J5LCBhZGQgdG8gQkJQQVRICisgICAgIEJCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisgICAgICMgV2UgaGF2ZSBhIHJlY2lwZXMgZGlyZWN0b3J5LCBhZGQgdG8gQkJGSUxFUworICAgICBCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiIFwKKyAgICAgICAgICAgICAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCisgICAgIEJCRklMRV9DT0xMRUNUSU9OUyArPSAiPHJlcGxhY2VhYmxlPmJzcDwvcmVwbGFjZWFibGU+IgorICAgICBCQkZJTEVfUEFUVEVSTl88cmVwbGFjZWFibGU+YnNwPC9yZXBsYWNlYWJsZT4gPSAiXiR7TEFZRVJESVJ9LyIKKyAgICAgQkJGSUxFX1BSSU9SSVRZXzxyZXBsYWNlYWJsZT5ic3A8L3JlcGxhY2VhYmxlPiA9ICI2IgorCisgICAgIExBWUVSREVQRU5EU188cmVwbGFjZWFibGU+YnNwPC9yZXBsYWNlYWJsZT4gPSAiaW50ZWwiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBpbGx1c3RyYXRlIHRoZSBzdHJpbmcgc3Vic3RpdHV0aW9ucywgaGVyZSBhcmUgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGVtZW50cworICAgICAgICAgICAgICAgIGZyb20gdGhlIGVFbWVubG93IDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorICAgICBCQlBBVEggLj0gIjoke0xBWUVSRElSfSIKKworICAgICAjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworICAgICBCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiIFwKKwkgICAgICR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmJhcHBlbmQiCisKKyAgICAgQkJGSUxFX0NPTExFQ1RJT05TICs9ICJlbWVubG93IgorICAgICBCQkZJTEVfUEFUVEVSTl9lbWVubG93IDo9ICJeJHtMQVlFUkRJUn0vIgorICAgICBCQkZJTEVfUFJJT1JJVFlfZW1lbmxvdyA9ICI2IgorCisgICAgIExBWUVSREVQRU5EU19lbWVubG93ID0gImludGVsIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmaWxlIHNpbXBseSBtYWtlcworICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+CisgICAgICAgICAgICAgICAgYXdhcmUgb2YgdGhlIHJlY2lwZXMgYW5kIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgVGhlIGZpbGUgbXVzdCBleGlzdCBzbyB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNhbiByZWNvZ25pemUgdGhlIEJTUC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9ImJzcC1maWxlbGF5b3V0LW1hY2hpbmUiPgorICAgICAgICAgICAgPHRpdGxlPkhhcmR3YXJlIENvbmZpZ3VyYXRpb24gT3B0aW9uczwvdGl0bGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlc2UgZmlsZXMgaW4gdGhlIEJTUCBMYXllciBhdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vY29uZi9tYWNoaW5lLyouY29uZgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIG1hY2hpbmUgZmlsZXMgYmluZCB0b2dldGhlciBhbGwgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBlbHNld2hlcmUKKyAgICAgICAgICAgICAgICBpbiB0aGUgQlNQIGludG8gYSBmb3JtYXQgdGhhdCB0aGUgYnVpbGQgc3lzdGVtIGNhbiB1bmRlcnN0YW5kLgorICAgICAgICAgICAgICAgIElmIHRoZSBCU1Agc3VwcG9ydHMgbXVsdGlwbGUgbWFjaGluZXMsIG11bHRpcGxlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcworICAgICAgICAgICAgICAgIGNhbiBiZSBwcmVzZW50LgorICAgICAgICAgICAgICAgIFRoZXNlIGZpbGVuYW1lcyBjb3JyZXNwb25kIHRvIHRoZSB2YWx1ZXMgdG8gd2hpY2ggdXNlcnMgaGF2ZSBzZXQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPiB2YXJpYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlc2UgZmlsZXMgZGVmaW5lIHRoaW5ncyBzdWNoIGFzIHRoZSBrZXJuZWwgcGFja2FnZSB0byB1c2UKKyAgICAgICAgICAgICAgICAoPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSRUZFUlJFRF9QUk9WSURFUic+PGZpbGVuYW1lPlBSRUZFUlJFRF9QUk9WSURFUjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBvZiB2aXJ0dWFsL2tlcm5lbCksIHRoZSBoYXJkd2FyZSBkcml2ZXJzIHRvCisgICAgICAgICAgICAgICAgaW5jbHVkZSBpbiBkaWZmZXJlbnQgdHlwZXMgb2YgaW1hZ2VzLCBhbnkgc3BlY2lhbCBzb2Z0d2FyZSBjb21wb25lbnRzCisgICAgICAgICAgICAgICAgdGhhdCBhcmUgbmVlZGVkLCBhbnkgYm9vdGxvYWRlciBpbmZvcm1hdGlvbiwgYW5kIGFsc28gYW55IHNwZWNpYWwgaW1hZ2UKKyAgICAgICAgICAgICAgICBmb3JtYXQgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBFYWNoIEJTUCBMYXllciByZXF1aXJlcyBhdCBsZWFzdCBvbmUgbWFjaGluZSBmaWxlLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gc3VwcGx5IG1vcmUgdGhhbiBvbmUgZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgY291bGQgYWxzbyBpbmNsdWRlIGEgaGFyZHdhcmUgInR1bmluZyIKKyAgICAgICAgICAgICAgICBmaWxlIHRoYXQgaXMgY29tbW9ubHkgdXNlZCB0byBkZWZpbmUgdGhlIHBhY2thZ2UgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgYW5kIHNwZWNpZnkgb3B0aW1pemF0aW9uIGZsYWdzLCB3aGljaCBhcmUgY2FyZWZ1bGx5IGNob3NlbgorICAgICAgICAgICAgICAgIHRvIGdpdmUgYmVzdCBwZXJmb3JtYW5jZSBvbiBhIGdpdmVuIHByb2Nlc3Nvci4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVHVuaW5nIGZpbGVzIGFyZSBmb3VuZCBpbiB0aGUgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPmlhMzItYmFzZS5pbmM8L2ZpbGVuYW1lPiBmaWxlIHJlc2lkZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGU8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVzZSBhbiBpbmNsdWRlIGZpbGUsIHlvdSBzaW1wbHkgaW5jbHVkZSB0aGVtIGluIHRoZQorICAgICAgICAgICAgICAgIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZUVtZW5sb3cgQlNQCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmVtZW5sb3ctbm9lbWdkLmNvbmY8L2ZpbGVuYW1lPiBjb250YWlucyB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgc3RhdGVtZW50czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvaW50ZWwtY29yZTItMzItY29tbW9uLmluYworICAgICByZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2ludGVsLWNvbW1vbi1wa2dhcmNoLmluYworICAgICByZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL21ldGEtaW50ZWwuaW5jCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nYnNwLWZpbGVsYXlvdXQtbWlzYy1yZWNpcGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5NaXNjZWxsYW5lb3VzIEJTUC1TcGVjaWZpYyBSZWNpcGUgRmlsZXM8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZXNlIGZpbGVzIGluIHRoZSBCU1AgTGF5ZXIgYXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L3JlY2lwZXMtYnNwLyoKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uYWwgZGlyZWN0b3J5IGNvbnRhaW5zIG1pc2NlbGxhbmVvdXMgcmVjaXBlIGZpbGVzIGZvcgorICAgICAgICAgICAgICAgIHRoZSBCU1AuCisgICAgICAgICAgICAgICAgTW9zdCBub3RhYmx5IHdvdWxkIGJlIHRoZSBmb3JtZmFjdG9yIGZpbGVzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpbiB0aGUgZU1lbmxvdyBCU1AgdGhlcmUgaXMgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvcm1mYWN0b3JfMC4wLmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgYW4KKyAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZSB1c2VkIHRvIGF1Z21lbnQgdGhlIHJlY2lwZSB0aGF0IHN0YXJ0cyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHRoZXJlIGFyZSBtYWNoaW5lLXNwZWNpZmljIHNldHRpbmdzIHVzZWQgZHVyaW5nCisgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHRoYXQgYXJlIGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hY2hjb25maWc8L2ZpbGVuYW1lPiBmaWxlIGZ1cnRoZXIgZG93biBpbiB0aGUKKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgSW4gdGhlIGVNZW5sb3cgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5tYWNoY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlIHN1cHBvcnRzIHRoZSBWaWRlbyBFbGVjdHJvbmljcyBTdGFuZGFyZHMgQXNzb2NpYXRpb24KKyAgICAgICAgICAgICAgICAoVkVTQSkgZ3JhcGhpY3MgZHJpdmVyOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBBc3N1bWUgYSBVU0IgbW91c2UgYW5kIGtleWJvYXJkIGFyZSBjb25uZWN0ZWQKKyAgICAgSEFWRV9UT1VDSFNDUkVFTj0wCisgICAgIEhBVkVfS0VZQk9BUkQ9MQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+PHBhcmE+CisgICAgICAgICAgICAgICAgSWYgYSBCU1AgZG9lcyBub3QgaGF2ZSBhIGZvcm1mYWN0b3IgZW50cnksIGRlZmF1bHRzIGFyZSBlc3RhYmxpc2hlZCBhY2NvcmRpbmcgdG8KKyAgICAgICAgICAgICAgICB0aGUgZm9ybWZhY3RvciBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCBpcyBpbnN0YWxsZWQgYnkgdGhlIG1haW4KKyAgICAgICAgICAgICAgICBmb3JtZmFjdG9yIHJlY2lwZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvcl8wLjAuYmI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICB3aGljaCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICA8L3BhcmE+PC9ub3RlPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nYnNwLWZpbGVsYXlvdXQtcmVjaXBlcy1ncmFwaGljcyc+CisgICAgICAgICAgICA8dGl0bGU+RGlzcGxheSBTdXBwb3J0IEZpbGVzPC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGVzZSBmaWxlcyBpbiB0aGUgQlNQIExheWVyIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWdyYXBoaWNzLyoKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uYWwgZGlyZWN0b3J5IGNvbnRhaW5zIHJlY2lwZXMgZm9yIHRoZSBCU1AgaWYgaXQgaGFzCisgICAgICAgICAgICAgICAgc3BlY2lhbCByZXF1aXJlbWVudHMgZm9yIGdyYXBoaWNzIHN1cHBvcnQuCisgICAgICAgICAgICAgICAgQWxsIGZpbGVzIHRoYXQgYXJlIG5lZWRlZCBmb3IgdGhlIEJTUCB0byBzdXBwb3J0IGEgZGlzcGxheSBhcmUKKyAgICAgICAgICAgICAgICBrZXB0IGhlcmUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+bWV0YS1lbWVubG93PC9maWxlbmFtZT4gbGF5ZXIsCisgICAgICAgICAgICAgICAgd2hpY2ggc3VwcG9ydHMgdGhlIGVNZW5sb3cgcGxhdGZvcm0gY29uc2lzdGluZyBvZiB0aGUKKyAgICAgICAgICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5JbnRlbDwvdHJhZGVtYXJrPgorICAgICAgICAgICAgICAgIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5BdG9tPC90cmFkZW1hcms+CisgICAgICAgICAgICAgICAgWjV4eCBwcm9jZXNzb3Igd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5JbnRlbDwvdHJhZGVtYXJrPgorICAgICAgICAgICAgICAgIFN5c3RlbSBDb250cm9sbGVyIEh1YiBVUzE1VywgdXNlcyB0aGVzZSBmaWxlcyBmb3Igc3VwcG9ydGluZworICAgICAgICAgICAgICAgIHRoZSBWaWRlbyBFbGVjdHJvbmljcyBTdGFuZGFyZHMgQXNzb2NpYXRpb24gKFZFU0EpIGdyYXBoaWNzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS1lbWVubG93L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL2VtZW5sb3ctbm9lbWdkL3hvcmcuY29uZgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2JzcC1maWxlbGF5b3V0LWtlcm5lbCc+CisgICAgICAgICAgICA8dGl0bGU+TGludXggS2VybmVsIENvbmZpZ3VyYXRpb248L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZXNlIGZpbGVzIGluIHRoZSBCU1AgTGF5ZXIgYXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvKi5iYmFwcGVuZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlc2UgZmlsZXMgYXBwZW5kIHlvdXIgc3BlY2lmaWMgY2hhbmdlcyB0byB0aGUgbWFpbiBrZXJuZWwgcmVjaXBlIHlvdSBhcmUgdXNpbmcuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgeW91ciBCU1AsIHlvdSB0eXBpY2FsbHkgd2FudCB0byB1c2UgYW4gZXhpc3RpbmcgWW9jdG8gUHJvamVjdCBrZXJuZWwgcmVjaXBlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgIGF0IDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgWW91IGNhbiBhcHBlbmQgeW91ciBzcGVjaWZpYyBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgcmVjaXBlIGJ5IHVzaW5nIGEKKyAgICAgICAgICAgICAgICBzaW1pbGFybHkgbmFtZWQgYXBwZW5kIGZpbGUsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gdGhlIEJTUCBMYXllciAoZS5nLgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWtlcm5lbC9saW51eDwvZmlsZW5hbWU+IGRpcmVjdG9yeSkuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTdXBwb3NlIHlvdSBhcmUgdXNpbmcgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0b18zLjE0LmJiPC9maWxlbmFtZT4gcmVjaXBlIHRvIGJ1aWxkCisgICAgICAgICAgICAgICAgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgeW91IGhhdmUgc2VsZWN0ZWQgdGhlIGtlcm5lbCBpbiB5b3VyCisgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGJ5IGFkZGluZyB0aGVzZSB0eXBlcworICAgICAgICAgICAgICAgIG9mIHN0YXRlbWVudHM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gImxpbnV4LXlvY3RvIgorICAgICBQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA/PSAiMy4xNCUiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBwcmVmZXJyZWQgcHJvdmlkZXIgaXMgYXNzdW1lZCBieSBkZWZhdWx0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSRUZFUlJFRF9QUk9WSURFUjwvZmlsZW5hbWU+IHN0YXRlbWVudCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgWW91IHdvdWxkIHVzZSB0aGUgPGZpbGVuYW1lPmxpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIHRvIGFwcGVuZAorICAgICAgICAgICAgICAgIHNwZWNpZmljIEJTUCBzZXR0aW5ncyB0byB0aGUga2VybmVsLCB0aHVzIGNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwgZm9yIHlvdXIgcGFydGljdWxhciBCU1AuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBsb29rIGF0IHRoZSBleGlzdGluZyBlTWVubG93IEJTUC4KKyAgICAgICAgICAgICAgICBUaGUgYXBwZW5kIGZpbGUgdXNlZCBpczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdGluZyBzaG93cyB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICBCZSBhd2FyZSB0aGF0IHRoZSBhY3R1YWwgY29tbWl0IElEIHN0cmluZ3MgaW4gdGhpcyBleGFtcGxlIGxpc3RpbmcgbWlnaHQgYmUgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgdGhhbiB0aGUgYWN0dWFsIHN0cmluZ3MgaW4gdGhlIGZpbGUgZnJvbSB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIEdpdCBzb3VyY2UgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKKworICAgICBDT01QQVRJQkxFX01BQ0hJTkVfZW1lbmxvdy1ub2VtZ2QgPSAiZW1lbmxvdy1ub2VtZ2QiCisgICAgIEtNQUNISU5FX2VtZW5sb3ctbm9lbWdkID0gImVtZW5sb3ciCisgICAgIEtCUkFOQ0hfZW1lbmxvdy1ub2VtZ2QgPSAic3RhbmRhcmQvYmFzZSIKKyAgICAgS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9lbWVubG93LW5vZW1nZCA9ICIgZmVhdHVyZXMvZHJtLWdtYTUwMC9kcm0tZ21hNTAwLnNjYyIKKworICAgICBMSU5VWF9WRVJTSU9OX2VtZW5sb3ctbm9lbWdkID0gIjMuMTQuMTkiCisgICAgIFNSQ1JFVl9tYWNoaW5lX2VtZW5sb3ctbm9lbWdkID0gIjkwMmYzNGQzNjEwMmE0YjIwMDhiNzc2ZWNhZTY4NmY4MGQzMDdlMTIiCisgICAgIFNSQ1JFVl9tZXRhX2VtZW5sb3ctbm9lbWdkID0gIjI4ZTM5NzQxYjhiMzAxODMzNDAyMWQ5ODEzNjlkM2ZkNjFmMThmNWIiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgYXBwZW5kIGZpbGUgY29udGFpbnMgc3RhdGVtZW50cyB1c2VkIHRvIHN1cHBvcnQgdGhlCisgICAgICAgICAgICAgICAgZU1lbmxvdyBCU1AuCisgICAgICAgICAgICAgICAgVGhlIGZpbGUgZGVmaW5lcyBtYWNoaW5lcyB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ09NUEFUSUJMRV9NQUNISU5FJz48ZmlsZW5hbWU+Q09NUEFUSUJMRV9NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB1c2VzIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LTUFDSElORSc+PGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGVuc3VyZSB0aGUgbWFjaGluZSBuYW1lIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBtYXBzIHRvIHRoZSBtYWNoaW5lIG5hbWUgdXNlZCBieSB0aGUgTGludXggWW9jdG8KKyAgICAgICAgICAgICAgICBrZXJuZWwuCisgICAgICAgICAgICAgICAgVGhlIGZpbGUgYWxzbyB1c2VzIHRoZSBvcHRpb25hbAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LQlJBTkNIJz48ZmlsZW5hbWU+S0JSQU5DSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBlbnN1cmUgdGhlIGJ1aWxkIHByb2Nlc3MgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RhbmRhcmQvZW1lbmxvdzwvZmlsZW5hbWU+IGtlcm5lbCBicmFuY2guCisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtFUk5FTF9GRUFUVVJFUyc+PGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBlbmFibGVzIGZlYXR1cmVzIHNwZWNpZmljIHRvIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICAoZS5nLiBJbnRlbCBHTUEtNTAwIERSTSBEcml2ZXIgaW4gdGhpcyBjYXNlKS4KKyAgICAgICAgICAgICAgICBUaGUgYXBwZW5kIGZpbGUgcG9pbnRzIHRvIHNwZWNpZmljIGNvbW1pdHMgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkgYW5kIHRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgYnJhbmNoZXMgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IGtlcm5lbCBuZWVkZWQgdG8gYnVpbGQgdGhlCisgICAgICAgICAgICAgICAgZU1lbmxvdyBCU1AuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uZSB0aGluZyBtaXNzaW5nIGluIHRoaXMgcGFydGljdWxhciBCU1AsIHdoaWNoIHlvdSB3aWxsIHR5cGljYWxseSBuZWVkIHdoZW4KKyAgICAgICAgICAgICAgICBkZXZlbG9waW5nIGEgQlNQLCBpcyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSAoPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPikgZm9yIHlvdXIgQlNQLgorICAgICAgICAgICAgICAgIFdoZW4gZGV2ZWxvcGluZyBhIEJTUCwgeW91IHByb2JhYmx5IGhhdmUgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIG9yIGEgc2V0IG9mIGtlcm5lbAorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCwgd2hlbiB0YWtlbiB0b2dldGhlciwgZGVmaW5lIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmb3IgeW91ciBCU1AuCisgICAgICAgICAgICAgICAgWW91IGNhbiBhY2NvbXBsaXNoIHRoaXMgZGVmaW5pdGlvbiBieSBwdXR0aW5nIHRoZSBjb25maWd1cmF0aW9ucyBpbiBhIGZpbGUgb3IgYSBzZXQgb2YgZmlsZXMKKyAgICAgICAgICAgICAgICBpbnNpZGUgYSBkaXJlY3RvcnkgbG9jYXRlZCBhdCB0aGUgc2FtZSBsZXZlbCBhcyB5b3VyIGtlcm5lbCdzIGFwcGVuZCBmaWxlIGFuZCBoYXZpbmcgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICBuYW1lIGFzIHRoZSBrZXJuZWwncyBtYWluIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgICAgIFdpdGggYWxsIHRoZXNlIGNvbmRpdGlvbnMgbWV0LCBzaW1wbHkgcmVmZXJlbmNlIHRob3NlIGZpbGVzIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgaW4gdGhlIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGFkIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIGEgZmlsZSBjYWxsZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmV0d29ya19jb25maWdzLmNmZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gcGxhY2UgdGhhdCBmaWxlIGluc2lkZSBhIGRpcmVjdG9yeSBuYW1lZCA8ZmlsZW5hbWU+bGludXgteW9jdG88L2ZpbGVuYW1lPiBhbmQgdGhlbiBhZGQKKyAgICAgICAgICAgICAgICBhIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3RhdGVtZW50IHN1Y2ggYXMgdGhlIGZvbGxvd2luZyB0byB0aGUgYXBwZW5kIGZpbGUuCisgICAgICAgICAgICAgICAgV2hlbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBidWlsZHMgdGhlIGtlcm5lbCwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUKKyAgICAgICAgICAgICAgICBwaWNrZWQgdXAgYW5kIGFwcGxpZWQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJICs9ICJmaWxlOi8vbmV0d29ya19jb25maWdzLmNmZyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGdyb3VwIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgaW50byBtdWx0aXBsZSBmaWxlcywgeW91IHBlcmZvcm0gYSBzaW1pbGFyIHByb2NlZHVyZS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBncm91cHMgc2VwYXJhdGUgY29uZmlndXJhdGlvbnMgc3BlY2lmaWNhbGx5IGZvciBFdGhlcm5ldCBhbmQgZ3JhcGhpY3MKKyAgICAgICAgICAgICAgICBpbnRvIHRoZWlyIG93biBmaWxlcyBhbmQgYWRkcyB0aGUgY29uZmlndXJhdGlvbnMKKyAgICAgICAgICAgICAgICBieSB1c2luZyBhIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3RhdGVtZW50IGxpa2UgdGhlIGZvbGxvd2luZyBpbiB5b3VyIGFwcGVuZCBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSArPSAiZmlsZTovL215Y29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8vZXRoLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8vZ2Z4LmNmZyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIGluIGJvaWxlcnBsYXRlIGZvcm0gaW4gdGhlCisgICAgICAgICAgICAgICAgcHJldmlvdXMgZXhhbXBsZSBpbiBvcmRlciB0byBtYWtlIGl0IGVhc3kgdG8gZG8gdGhhdC4KKyAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIG11c3QgYmUgaW4geW91ciBsYXllciBvciBCaXRCYWtlIHdpbGwgbm90IGZpbmQgdGhlIHBhdGNoZXMgb3IKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBldmVuIGlmIHlvdSBoYXZlIHRoZW0gaW4geW91ciA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT4gdmFyaWFibGUgZW5hYmxlcyB0aGUgYnVpbGQgcHJvY2VzcyB0bworICAgICAgICAgICAgICAgIGZpbmQgdGhvc2UgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIE90aGVyIG1ldGhvZHMgZXhpc3QgdG8gYWNjb21wbGlzaCBncm91cGluZyBhbmQgZGVmaW5pbmcgY29uZmlndXJhdGlvbiBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB3b3JraW5nIHdpdGggYSBsb2NhbCBjbG9uZSBvZiB0aGUga2VybmVsIHJlcG9zaXRvcnksCisgICAgICAgICAgICAgICAgICAgIHlvdSBjb3VsZCBjaGVja291dCB0aGUga2VybmVsJ3MgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2gsIG1ha2UgeW91ciBjaGFuZ2VzLAorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBwdXNoIHRoZSBjaGFuZ2VzIHRvIHRoZSBsb2NhbCBiYXJlIGNsb25lIG9mIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHQgaXMgdGhhdCB5b3UgZGlyZWN0bHkgYWRkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2ggZm9yIHlvdXIgQlNQLgorICAgICAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgbGlrZWx5IGVuZCB1cCBpbiB0aGF0IGxvY2F0aW9uIGFueXdheSBpZiB0aGUgQlNQIGdldHMKKyAgICAgICAgICAgICAgICAgICAgYWRkZWQgdG8gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIGdlbmVyYWwsIGhvd2V2ZXIsIHRoZSBZb2N0byBQcm9qZWN0IG1haW50YWluZXJzIHRha2UgY2FyZSBvZiBtb3ZpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4tc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB0aGUga2VybmVsJ3MgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2guCisgICAgICAgICAgICAgICAgICAgIE5vdCBvbmx5IGlzIGl0IGVhc2llciBmb3IgQlNQIGRldmVsb3BlcnMgdG8gbm90IGhhdmUgdG8gd29ycnkgYWJvdXQgcHV0dGluZyB0aG9zZQorICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIGluIHRoZSBicmFuY2gsIGJ1dCBoYXZpbmcgdGhlIG1haW50YWluZXJzIGRvIGl0IGFsbG93cyB0aGVtIHRvIGFwcGx5CisgICAgICAgICAgICAgICAgICAgICdnbG9iYWwnIGtub3dsZWRnZSBhYm91dCB0aGUga2luZHMgb2YgY29tbW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtdWx0aXBsZSBCU1BzIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSB0cmVlIGFyZSB0eXBpY2FsbHkgdXNpbmcuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgYWxsb3dzIGZvciBwcm9tb3Rpb24gb2YgY29tbW9uIGNvbmZpZ3VyYXRpb25zIGludG8gY29tbW9uIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZXF1aXJlbWVudHMtYW5kLXJlY29tbWVuZGF0aW9ucy1mb3ItcmVsZWFzZWQtYnNwcyc+CisgICAgICAgICAgICA8dGl0bGU+UmVxdWlyZW1lbnRzIGFuZCBSZWNvbW1lbmRhdGlvbnMgZm9yIFJlbGVhc2VkIEJTUHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDZXJ0YWluIHJlcXVpcmVtZW50cyBleGlzdCBmb3IgYSByZWxlYXNlZCBCU1AgdG8gYmUgY29uc2lkZXJlZAorICAgICAgICAgICAgICAgIGNvbXBsaWFudCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgcmVjb21tZW5kYXRpb25zIGFsc28gZXhpc3QuCisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgcmVxdWlyZW1lbnRzIGFuZCByZWNvbW1lbmRhdGlvbnMgZm9yCisgICAgICAgICAgICAgICAgcmVsZWFzZWQgQlNQcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3JlbGVhc2VkLWJzcC1yZXF1aXJlbWVudHMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5SZWxlYXNlZCBCU1AgUmVxdWlyZW1lbnRzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWZvcmUgbG9va2luZyBhdCBCU1AgcmVxdWlyZW1lbnRzLCB5b3Ugc2hvdWxkIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHJlcXVpcmVtZW50cyBoZXJlIGFzc3VtZSB0aGUgQlNQIGxheWVyIGlzIGEgd2VsbC1mb3JtZWQsICJsZWdhbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllciB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZ3VpZGVsaW5lcyBvbiBjcmVhdGluZyBhIGxheWVyIHRoYXQgbWVldHMgdGhlc2UgYmFzZSByZXF1aXJlbWVudHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYnNwLWxheWVycyc+QlNQIExheWVyczwvbGluaz4iIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIENyZWF0aW5nIExheWVycyI8L3VsaW5rPiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHJlcXVpcmVtZW50cyBpbiB0aGlzIHNlY3Rpb24gYXBwbHkgcmVnYXJkbGVzcyBvZiBob3cgeW91CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWx0aW1hdGVseSBwYWNrYWdlIGEgQlNQLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgY29uc3VsdCB0aGUgcGFja2FnaW5nIGFuZCBkaXN0cmlidXRpb24gZ3VpZGVsaW5lcyBmb3IgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIHJlbGVhc2UgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBvZiBwYWNrYWdpbmcgYW5kIGRpc3RyaWJ1dGlvbiByZXF1aXJlbWVudHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9UaGlyZF9QYXJ0eV9CU1BfUmVsZWFzZV9Qcm9jZXNzJz5UaGlyZCBQYXJ0eSBCU1AgUmVsZWFzZSBQcm9jZXNzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lraSBwYWdlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSByZXF1aXJlbWVudHMgZm9yIHRoZSBCU1AgYXMgaXQgaXMgbWFkZSBhdmFpbGFibGUgdG8gYSBkZXZlbG9wZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgY29tcGxldGVseSBpbmRlcGVuZGVudCBvZiB0aGUgcmVsZWFzZWQgZm9ybSBvZiB0aGUgQlNQLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgQlNQIE1ldGFkYXRhIGNhbiBiZSBjb250YWluZWQgd2l0aGluIGEgR2l0IHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgY291bGQgaGF2ZSBhIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgY29tcGxldGVseSBkaWZmZXJlbnQgZnJvbSB3aGF0IGFwcGVhcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgb2ZmaWNpYWxseSByZWxlYXNlZCBCU1AgbGF5ZXIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SXQgaXMgbm90IHJlcXVpcmVkIHRoYXQgc3BlY2lmaWMgcGFja2FnZXMgb3IgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWNhdGlvbnMgZXhpc3QgaW4gdGhlIEJTUCBsYXllciwgYmV5b25kIHRoZSByZXF1aXJlbWVudHMgZm9yIGdlbmVyYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGlhbmNlIHdpdGggdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIG5vIHJlcXVpcmVtZW50IGV4aXN0cyBkaWN0YXRpbmcgdGhhdCBhIHNwZWNpZmljIGtlcm5lbCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbCB2ZXJzaW9uIGJlIHVzZWQgaW4gYSBnaXZlbiBCU1AuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHRoZSByZXF1aXJlbWVudHMgZm9yIGEgcmVsZWFzZWQgQlNQIHRoYXQgY29uZm9ybXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3Q6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxheWVyIE5hbWU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgQlNQIG11c3QgaGF2ZSBhIGxheWVyIG5hbWUgdGhhdCBmb2xsb3dzIHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3Qgc3RhbmRhcmRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBCU1AgbGF5ZXIgbmFtZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYnNwLWxheWVycyc+QlNQIExheWVyczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkZpbGUgU3lzdGVtIExheW91dDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gcG9zc2libGUsIHVzZSB0aGUgc2FtZSBkaXJlY3RvcnkgbmFtZXMgaW4geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTUCBsYXllciBhcyBsaXN0ZWQgaW4gdGhlIDxmaWxlbmFtZT5yZWNpcGVzLnR4dDwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgeW91IHNob3VsZCBwbGFjZSByZWNpcGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcykgYW5kIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWNhdGlvbnMgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlcykgaW50bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWNpcGVzLSo8L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcmllcyBieSBmdW5jdGlvbmFsIGFyZWEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBvdXRsaW5lZCBpbiA8ZmlsZW5hbWU+cmVjaXBlcy50eHQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgY2Fubm90IGZpbmQgYSBjYXRlZ29yeSBpbiA8ZmlsZW5hbWU+cmVjaXBlcy50eHQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGZpdCBhIHBhcnRpY3VsYXIgcmVjaXBlLCB5b3UgY2FuIG1ha2UgdXAgeW91ciBvd24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy0qPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCA8ZmlsZW5hbWU+cmVjaXBlcy50eHQ8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgaW4gdGhlIE9wZW5FbWJlZGRlZCBDb3JlIExheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5vcGVuZW1iZWRkZWQtY29yZTwvZmlsZW5hbWU+KSBmb3VuZCBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS90cmVlL21ldGEnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5XaXRoaW4gYW55IHBhcnRpY3VsYXIgPGZpbGVuYW1lPnJlY2lwZXMtKjwvZmlsZW5hbWU+IGNhdGVnb3J5LCB0aGUgbGF5b3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIG1hdGNoIHdoYXQgaXMgZm91bmQgaW4gdGhlIE9wZW5FbWJlZGRlZCBDb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkgKDxmaWxlbmFtZT5vcGVuZW1iZWRkZWQtY29yZTwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHRoZSBTb3VyY2UgRGlyZWN0b3J5ICg8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgbWFrZSBzdXJlIHlvdSBwbGFjZSByZWxhdGVkIGZpbGVzIGluIGFwcHJvcHJpYXRlbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGVkIDxmaWxlbmFtZT5yZWNpcGVzLSo8L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcmllcyBzcGVjaWZpYyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUncyBmdW5jdGlvbiwgb3Igd2l0aGluIGEgc3ViZGlyZWN0b3J5IGNvbnRhaW5pbmcgYSBzZXQgb2YgY2xvc2VseS1yZWxhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlcyB0aGVtc2VsdmVzIHNob3VsZCBmb2xsb3cgdGhlIGdlbmVyYWwgZ3VpZGVsaW5lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciByZWNpcGVzIHVzZWQgaW4gdGhlIFlvY3RvIFByb2plY3QgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHA6Ly9vcGVuZW1iZWRkZWQub3JnL3dpa2kvU3R5bGVndWlkZSc+T3BlbkVtYmVkZGVkIFN0eWxlIEd1aWRlPC91bGluaz4iLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MaWNlbnNlIEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBpbmNsdWRlIGEgbGljZW5zZSBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbGljZW5zZSBjb3ZlcnMgdGhlIEJTUCBNZXRhZGF0YSBhcyBhIHdob2xlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNwZWNpZnkgd2hpY2ggbGljZW5zZSB0byB1c2Ugc2luY2UgdGhlcmUgaXMgbm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGxpY2Vuc2UgaWYgb25lIGlzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9tZXRhLWludGVsL3RyZWUvbWV0YS1mcmkyL0NPUFlJTkcuTUlUJz48ZmlsZW5hbWU+Q09QWUlORy5NSVQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBmb3IgdGhlIEZpc2ggUml2ZXIgSXNsYW5kIDIgQlNQIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1mcmkyPC9maWxlbmFtZT4gQlNQIGxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYW4gZXhhbXBsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UkVBRE1FIEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBpbmNsdWRlIGEgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9tZXRhLWludGVsL3RyZWUvbWV0YS1mcmkyL1JFQURNRSc+PGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGZvciB0aGUgRmlzaCBSaXZlciBJc2xhbmQgMiBCU1AgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLWZyaTI8L2ZpbGVuYW1lPiBCU1AgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhbiBleGFtcGxlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5BdCBhIG1pbmltdW0sIHRoZSA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgYnJpZWYgZGVzY3JpcHRpb24gYWJvdXQgdGhlIGhhcmR3YXJlIHRoZSBCU1AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIGxpc3Qgb2YgYWxsIHRoZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHdoaWNoIGEgQlNQIGxheWVyIGRlcGVuZHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVzZSBkZXBlbmRlbmNpZXMgYXJlIHR5cGljYWxseSBhIGxpc3Qgb2YgcmVxdWlyZWQgbGF5ZXJzIG5lZWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYnVpbGQgdGhlIEJTUC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBkZXBlbmRlbmNpZXMgc2hvdWxkIGFsc28gY29udGFpbiBpbmZvcm1hdGlvbiByZWdhcmRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhlIEJTUCBtaWdodCBoYXZlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QW55IHJlcXVpcmVkIHNwZWNpYWwgbGljZW5zaW5nIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgaW5mb3JtYXRpb24gaW5jbHVkZXMgaW5mb3JtYXRpb24gb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwgdmFyaWFibGVzIG5lZWRlZCB0byBzYXRpc2Z5IGEgRVVMQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGluc3RydWN0aW9ucyBvbiBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gYnVpbGQgb3IgZGlzdHJpYnV0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJpZXMgYnVpbHQgZnJvbSB0aGUgQlNQIE1ldGFkYXRhLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIG5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNQIGxheWVyIG1haW50YWluZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBwZXJzb24gdG8gd2hvbSBwYXRjaGVzIGFuZCBxdWVzdGlvbnMgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBzZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBmaW5kIHRoZSByaWdodCBwZXJzb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBidWlsZCB0aGUgQlNQIHVzaW5nIHRoZSBCU1AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBib290IHRoZSBCU1AgYnVpbGQgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEJTUCBsYXllci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluc3RydWN0aW9ucyBvbiBob3cgdG8gYm9vdCB0aGUgYmluYXJ5IGltYWdlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVkIGluIHRoZSA8ZmlsZW5hbWU+YmluYXJ5PC9maWxlbmFtZT4gZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJlc2VudC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluZm9ybWF0aW9uIG9uIGFueSBrbm93biBidWdzIG9yIGlzc3VlcyB0aGF0IHVzZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQga25vdyBhYm91dCB3aGVuIGVpdGhlciBidWlsZGluZyBvciBib290aW5nIHRoZSBCU1AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyaWVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SRUFETUUuc291cmNlcyBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgaW5jbHVkZSBhIDxmaWxlbmFtZT5SRUFETUUuc291cmNlczwvZmlsZW5hbWU+IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBzcGVjaWZpZXMgZXhhY3RseSB3aGVyZSB5b3UgY2FuIGZpbmQgdGhlIHNvdXJjZXMgdXNlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlIHRoZSBiaW5hcnkgaW1hZ2VzIGNvbnRhaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmluYXJ5PC9maWxlbmFtZT4gZGlyZWN0b3J5LCBpZiBwcmVzZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2kvbWV0YS1pbnRlbC90cmVlL21ldGEtZnJpMi9SRUFETUUuc291cmNlcyc+PGZpbGVuYW1lPlJFQURNRS5zb3VyY2VzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgZm9yIHRoZSBGaXNoIFJpdmVyIElzbGFuZCAyIEJTUCBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtZnJpMjwvZmlsZW5hbWU+IEJTUCBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGFuIGV4YW1wbGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxheWVyIENvbmZpZ3VyYXRpb24gRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGluY2x1ZGUgYSA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWxlIGlkZW50aWZpZXMgdGhlIDxmaWxlbmFtZT5tZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCU1AgbGF5ZXIgYXMgYSBsYXllciB0byB0aGUgYnVpbGQgc3lzdGVtLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYWNoaW5lIENvbmZpZ3VyYXRpb24gRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGluY2x1ZGUgb25lIG9yIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9tYWNoaW5lLzxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVzZSBjb25maWd1cmF0aW9uIGZpbGVzIGRlZmluZSBtYWNoaW5lIHRhcmdldHMgdGhhdCBjYW4gYmUgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgQlNQIGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE11bHRpcGxlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcyBkZWZpbmUgdmFyaWF0aW9ucyBvZiBtYWNoaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBCU1AuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYSBCU1Agc3VwcG9ydHMgbXVsdGlwbGUgbWFjaGluZSB2YXJpYXRpb25zLCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZXF1YXRlbHkgZGVzY3JpYmUgZWFjaCB2YXJpYXRpb24gaW4gdGhlIEJTUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvIG5vdCB1c2UgbXVsdGlwbGUgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGRlc2NyaWJlIGRpc3BhcmF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBoYXZlIHZlcnkgZGlmZmVyZW50IHRhcmdldHMsIHlvdSBzaG91bGQgY3JlYXRlIHNlcGFyYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNQIGxheWVycyBmb3IgZWFjaCB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+SXQgaXMgY29tcGxldGVseSBwb3NzaWJsZSBmb3IgYSBkZXZlbG9wZXIgdG8gc3RydWN0dXJlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgcmVwb3NpdG9yeSBhcyBhIGNvbmdsb21lcmF0aW9uIG9mIHVucmVsYXRlZCBCU1AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcywgYW5kIHRvIHBvc3NpYmx5IGdlbmVyYXRlIEJTUHMgdGFyZ2V0ZWQgZm9yIHJlbGVhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoYXQgZGlyZWN0b3J5IHVzaW5nIHNjcmlwdHMgb3Igc29tZSBvdGhlciBtZWNoYW5pc20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+bWV0YS15b2N0by1ic3A8L2ZpbGVuYW1lPiBsYXllcikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VjaCBjb25zaWRlcmF0aW9ucyBhcmUgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBkb2N1bWVudC48L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3JlbGVhc2VkLWJzcC1yZWNvbW1lbmRhdGlvbnMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5SZWxlYXNlZCBCU1AgUmVjb21tZW5kYXRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHJlY29tbWVuZGF0aW9ucyBmb3IgYSByZWxlYXNlZCBCU1AgdGhhdCBjb25mb3JtcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Qm9vdGFibGUgSW1hZ2VzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNQIHJlbGVhc2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGNvbnRhaW4gb25lIG9yIG1vcmUgYm9vdGFibGUgaW1hZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGluZyBib290YWJsZSBpbWFnZXMgYWxsb3dzIHVzZXJzIHRvIGVhc2lseSB0cnkgb3V0IHRoZSBCU1AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGVpciBvd24gaGFyZHdhcmUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkluIHNvbWUgY2FzZXMsIGl0IG1pZ2h0IG5vdCBiZSBjb252ZW5pZW50IHRvIGluY2x1ZGUgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RhYmxlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IG1pZ2h0IHdhbnQgdG8gbWFrZSB0d28gdmVyc2lvbnMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNQIGF2YWlsYWJsZTogb25lIHRoYXQgY29udGFpbnMgYmluYXJ5IGltYWdlcywgYW5kIG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgZG9lcyBub3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZlcnNpb24gdGhhdCBkb2VzIG5vdCBjb250YWluIGJvb3RhYmxlIGltYWdlcyBhdm9pZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm5lY2Vzc2FyeSBkb3dubG9hZCB0aW1lcyBmb3IgdXNlcnMgbm90IGludGVyZXN0ZWQgaW4gdGhlIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IG5lZWQgdG8gZGlzdHJpYnV0ZSBhIEJTUCBhbmQgaW5jbHVkZSBib290YWJsZSBpbWFnZXMgb3IgYnVpbGQga2VybmVsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW1zIG1lYW50IHRvIGFsbG93IHVzZXJzIHRvIGJvb3QgdGhlIEJTUCBmb3IgZXZhbHVhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2VzLCB5b3Ugc2hvdWxkIHB1dCB0aGUgaW1hZ2VzIGFuZCBhcnRpZmFjdHMgd2l0aGluIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmluYXJ5LzwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPklmIHlvdSBkbyBpbmNsdWRlIGEgYm9vdGFibGUgaW1hZ2UgYXMgcGFydCBvZiB0aGUgQlNQIGFuZCB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXMgYnVpbHQgYnkgc29mdHdhcmUgY292ZXJlZCBieSB0aGUgR1BMIG9yIG90aGVyIG9wZW4gc291cmNlIGxpY2Vuc2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGlzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gdW5kZXJzdGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBtZWV0IGFsbCBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzLCB3aGljaCBjb3VsZCBpbmNsdWRlIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHNvdXJjZSBmaWxlcy48L25vdGU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzZSBhIFlvY3RvIExpbnV4IEtlcm5lbDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtlcm5lbCByZWNpcGVzIGluIHRoZSBCU1Agc2hvdWxkIGJlIGJhc2VkIG9uIGEgWW9jdG8gTGludXgga2VybmVsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2luZyB5b3VyIHJlY2lwZXMgb24gdGhlc2Uga2VybmVscyByZWR1Y2VzIHRoZSBjb3N0cyBmb3IgbWFpbnRhaW5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgQlNQIGFuZCBpbmNyZWFzZXMgaXRzIHNjYWxhYmlsaXR5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgPGZpbGVuYW1lPllvY3RvIExpbnV4IEtlcm5lbDwvZmlsZW5hbWU+IGNhdGVnb3J5IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+U291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZXNlIGtlcm5lbHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjdXN0b21pemluZy1hLXJlY2lwZS1mb3ItYS1ic3AnPgorICAgICAgICAgICAgPHRpdGxlPkN1c3RvbWl6aW5nIGEgUmVjaXBlIGZvciBhIEJTUDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgSWYgeW91IHBsYW4gb24gY3VzdG9taXppbmcgYSByZWNpcGUgZm9yIGEgcGFydGljdWxhciBCU1AsIHlvdSBuZWVkIHRvIGRvIHRoZQorICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlIGEgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgZm9yIHRoZSBtb2RpZmllZCByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB1c2luZyBhcHBlbmQgZmlsZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLWJiYXBwZW5kLWZpbGVzJz5Vc2luZyAuYmJhcHBlbmQgRmlsZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgRW5zdXJlIHlvdXIgZGlyZWN0b3J5IHN0cnVjdHVyZSBpbiB0aGUgQlNQIGxheWVyCisgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc3VwcG9ydHMgeW91ciBtYWNoaW5lIGlzIHN1Y2ggdGhhdCBpdCBjYW4gYmUgZm91bmQKKyAgICAgICAgICAgICAgICAgICAgICAgYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBleGFtcGxlIGxhdGVyIGluIHRoaXMgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICBQdXQgdGhlIGFwcGVuZCBmaWxlIGluIGEgZGlyZWN0b3J5IHdob3NlIG5hbWUgbWF0Y2hlcworICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFjaGluZSdzIG5hbWUgYW5kIGlzIGxvY2F0ZWQgaW4gYW4gYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgc3ViLWRpcmVjdG9yeSBpbnNpZGUgdGhlIEJTUCBsYXllciAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1ic3A8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnJlY2lwZXMtZ3JhcGhpY3M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXMtY29yZTwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGgpLgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UGxhY2UgdGhlIEJTUC1zcGVjaWZpYyBmaWxlcyBpbiB0aGUgcHJvcGVyIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICBpbnNpZGUgdGhlIEJTUCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgSG93IGV4cGFuc2l2ZSB0aGUgbGF5ZXIgaXMgYWZmZWN0cyB3aGVyZSB5b3UgbXVzdCBwbGFjZSB0aGVzZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgbGF5ZXIgc3VwcG9ydHMgc2V2ZXJhbCBkaWZmZXJlbnQgbWFjaGluZSB0eXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gYmUgc3VyZSB5b3VyIGxheWVyJ3MgZGlyZWN0b3J5IHN0cnVjdHVyZSBpbmNsdWRlcyBoaWVyYXJjaHkKKyAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzZXBhcmF0ZXMgdGhlIGZpbGVzIG91dCBhY2NvcmRpbmcgdG8gbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBsYXllciBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIG1hY2hpbmVzLCB0aGUgbGF5ZXIgd291bGQgbm90CisgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgdGhhdCBhZGRpdGlvbmFsIGhpZXJhcmNoeSBhbmQgdGhlIGZpbGVzIHdvdWxkIG9idmlvdXNseSBub3QgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgYWJsZSB0byByZXNpZGUgaW4gYSBtYWNoaW5lLXNwZWNpZmljIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIGEgc3BlY2lmaWMgZXhhbXBsZSB0byBoZWxwIHlvdSBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgIENvbnNpZGVyIGFuIGV4YW1wbGUgdGhhdCBjdXN0b21pemVzIGEgcmVjaXBlIGJ5IGFkZGluZworICAgICAgICAgICAgICAgYSBCU1Atc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIG5hbWVkIDxmaWxlbmFtZT5pbnRlcmZhY2VzPC9maWxlbmFtZT4gdG8gdGhlCisgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5pdC1pZnVwZG93bl8xLjAuYmI8L2ZpbGVuYW1lPiByZWNpcGUgZm9yIG1hY2hpbmUgInh5eiIgd2hlcmUgdGhlCisgICAgICAgICAgICAgICBCU1AgbGF5ZXIgYWxzbyBzdXBwb3J0cyBzZXZlcmFsIG90aGVyIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgRG8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RWRpdCB0aGUgPGZpbGVuYW1lPmluaXQtaWZ1cGRvd25fMS4wLmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBzbyB0aGF0IGl0CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhcHBlbmQgZmlsZSBuZWVkcyB0byBiZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteHl6L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlIGFuZCBwbGFjZSB0aGUgbmV3IDxmaWxlbmFtZT5pbnRlcmZhY2VzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBCU1AncyBsYXllciBoZXJlOgorICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEteHl6L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2ZpbGVzL3h5ei1tYWNoaW5lLW9uZS9pbnRlcmZhY2VzCisgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgPGZpbGVuYW1lPm1ldGEteHl6PC9maWxlbmFtZT4gbGF5ZXIgZGlkIG5vdCBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBtYWNoaW5lcywgeW91IHdvdWxkIHBsYWNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmludGVyZmFjZXM8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllciBoZXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLXh5ei9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9maWxlcy9pbnRlcmZhY2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSBhcHBlbmQgZmlsZXMgZXh0ZW5kcyB0aGUgc2VhcmNoIHBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzIHRvIGZpbmQgZmlsZXMgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBmb3IgdGhpcyBleGFtcGxlIHlvdSBuZWVkIHRvIGhhdmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5maWxlczwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpbiB0aGUgc2FtZSBsb2NhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICBhcyB5b3VyIGFwcGVuZCBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdic3AtbGljZW5zaW5nLWNvbnNpZGVyYXRpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5CU1AgTGljZW5zaW5nIENvbnNpZGVyYXRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gc29tZSBjYXNlcywgYSBCU1AgY29udGFpbnMgc2VwYXJhdGVseSBsaWNlbnNlZCBJbnRlbGxlY3R1YWwgUHJvcGVydHkgKElQKQorICAgICAgICAgICAgICAgIGZvciBhIGNvbXBvbmVudCBvciBjb21wb25lbnRzLgorICAgICAgICAgICAgICAgIEZvciB0aGVzZSBjYXNlcywgeW91IGFyZSByZXF1aXJlZCB0byBhY2NlcHQgdGhlIHRlcm1zIG9mIGEgY29tbWVyY2lhbCBvciBvdGhlcgorICAgICAgICAgICAgICAgIHR5cGUgb2YgbGljZW5zZSB0aGF0IHJlcXVpcmVzIHNvbWUga2luZCBvZiBleHBsaWNpdCBFbmQgVXNlciBMaWNlbnNlIEFncmVlbWVudCAoRVVMQSkuCisgICAgICAgICAgICAgICAgT25jZSB0aGUgbGljZW5zZSBpcyBhY2NlcHRlZCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2FuIHRoZW4gYnVpbGQgYW5kCisgICAgICAgICAgICAgICAgaW5jbHVkZSB0aGUgY29ycmVzcG9uZGluZyBjb21wb25lbnQgaW4gdGhlIGZpbmFsIEJTUCBpbWFnZS4KKyAgICAgICAgICAgICAgICBJZiB0aGUgQlNQIGlzIGF2YWlsYWJsZSBhcyBhIHByZS1idWlsdCBpbWFnZSwgeW91IGNhbiBkb3dubG9hZCB0aGUgaW1hZ2UgYWZ0ZXIKKyAgICAgICAgICAgICAgICBhZ3JlZWluZyB0byB0aGUgbGljZW5zZSBvciBFVUxBLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY291bGQgZmluZCB0aGF0IHNvbWUgc2VwYXJhdGVseSBsaWNlbnNlZCBjb21wb25lbnRzIHRoYXQgYXJlIGVzc2VudGlhbAorICAgICAgICAgICAgICAgIGZvciBub3JtYWwgb3BlcmF0aW9uIG9mIHRoZSBzeXN0ZW0gbWlnaHQgbm90IGhhdmUgYW4gdW5lbmN1bWJlcmVkIChvciBmcmVlKQorICAgICAgICAgICAgICAgIHN1YnN0aXR1dGUuCisgICAgICAgICAgICAgICAgV2l0aG91dCB0aGVzZSBlc3NlbnRpYWwgY29tcG9uZW50cywgdGhlIHN5c3RlbSB3b3VsZCBiZSBub24tZnVuY3Rpb25hbC4KKyAgICAgICAgICAgICAgICBUaGVuIGFnYWluLCB5b3UgbWlnaHQgZmluZCB0aGF0IG90aGVyIGxpY2Vuc2VkIGNvbXBvbmVudHMgdGhhdCBhcmUgc2ltcGx5CisgICAgICAgICAgICAgICAgJ2dvb2QtdG8taGF2ZScgb3IgcHVyZWx5IGVsZWN0aXZlIGRvIGhhdmUgYW4gdW5lbmN1bWJlcmVkLCBmcmVlIHJlcGxhY2VtZW50CisgICAgICAgICAgICAgICAgY29tcG9uZW50IHRoYXQgeW91IGNhbiB1c2UgcmF0aGVyIHRoYW4gYWdyZWVpbmcgdG8gdGhlIHNlcGFyYXRlbHkgbGljZW5zZWQgY29tcG9uZW50LgorICAgICAgICAgICAgICAgIEV2ZW4gZm9yIGNvbXBvbmVudHMgZXNzZW50aWFsIHRvIHRoZSBzeXN0ZW0sIHlvdSBtaWdodCBmaW5kIGFuIHVuZW5jdW1iZXJlZCBjb21wb25lbnQKKyAgICAgICAgICAgICAgICB0aGF0IGlzIG5vdCBpZGVudGljYWwgYnV0IHdpbGwgd29yayBhcyBhIGxlc3MtY2FwYWJsZSB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgICAgIGxpY2Vuc2VkIHZlcnNpb24gaW4gdGhlIEJTUCByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBjYXNlcyB3aGVyZSB5b3UgY2FuIHN1YnN0aXR1dGUgYSBmcmVlIGNvbXBvbmVudCBhbmQgc3RpbGwKKyAgICAgICAgICAgICAgICBtYWludGFpbiB0aGUgc3lzdGVtJ3MgZnVuY3Rpb25hbGl0eSwgdGhlICJEb3dubG9hZHMiIHBhZ2UgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7Jz5Zb2N0byBQcm9qZWN0IHdlYnNpdGUnczwvdWxpbms+CisgICAgICAgICAgICAgICAgbWFrZXMgYXZhaWxhYmxlIGRlLWZlYXR1cmVkIEJTUHMKKyAgICAgICAgICAgICAgICB0aGF0IGFyZSBjb21wbGV0ZWx5IGZyZWUgb2YgYW55IElQIGVuY3VtYnJhbmNlcy4KKyAgICAgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMsIHlvdSBjYW4gdXNlIHRoZSBzdWJzdGl0dXRpb24gZGlyZWN0bHkgYW5kCisgICAgICAgICAgICAgICAgd2l0aG91dCBhbnkgZnVydGhlciBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgICAgIElmIHByZXNlbnQsIHRoZXNlIGZ1bGx5IGRlLWZlYXR1cmVkIEJTUHMgYXJlIG5hbWVkIGFwcHJvcHJpYXRlbHkKKyAgICAgICAgICAgICAgICBkaWZmZXJlbnQgYXMgY29tcGFyZWQgdG8gdGhlIG5hbWVzIG9mIHRoZSByZXNwZWN0aXZlCisgICAgICAgICAgICAgICAgZW5jdW1iZXJlZCBCU1BzLgorICAgICAgICAgICAgICAgIElmIGF2YWlsYWJsZSwgdGhlc2Ugc3Vic3RpdHV0aW9ucyBhcmUgeW91cgorICAgICAgICAgICAgICAgIHNpbXBsZXN0IGFuZCBtb3N0IHByZWZlcnJlZCBvcHRpb25zLgorICAgICAgICAgICAgICAgIFVzZSBvZiB0aGVzZSBzdWJzdGl0dXRpb25zIG9mIGNvdXJzZSBhc3N1bWVzIHRoZSByZXN1bHRpbmcgZnVuY3Rpb25hbGl0eSBtZWV0cworICAgICAgICAgICAgICAgIHN5c3RlbSByZXF1aXJlbWVudHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIGhvd2V2ZXIsIGEgbm9uLWVuY3VtYmVyZWQgdmVyc2lvbiBpcyB1bmF2YWlsYWJsZSBvcgorICAgICAgICAgICAgICAgIGl0IHByb3ZpZGVzIHVuc3VpdGFibGUgZnVuY3Rpb25hbGl0eSBvciBxdWFsaXR5LCB5b3UgY2FuIHVzZSBhbiBlbmN1bWJlcmVkCisgICAgICAgICAgICAgICAgdmVyc2lvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBjb3VwbGUgZGlmZmVyZW50IG1ldGhvZHMgZXhpc3Qgd2l0aGluIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvCisgICAgICAgICAgICAgICAgc2F0aXNmeSB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBmb3IgYW4gZW5jdW1iZXJlZCBCU1AuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyB0aGVtIGluIG9yZGVyIG9mIHByZWZlcmVuY2U6CisJICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJQ0VOU0VfRkxBR1MnPjxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gZGVmaW5lIHRoZSByZWNpcGVzIHRoYXQgaGF2ZSBjb21tZXJjaWFsIG9yIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcyBvZiBzcGVjaWFsbHktbGljZW5zZWQgcGFja2FnZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBlYWNoIG9mIHRob3NlIHJlY2lwZXMsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgYSBtYXRjaGluZyBsaWNlbnNlIHN0cmluZyBpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IHZhcmlhYmxlIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTElDRU5TRV9GTEFHU19XSElURUxJU1QnPjxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTX1dISVRFTElTVDwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5aW5nIHRoZSBtYXRjaGluZyBsaWNlbnNlIHN0cmluZyBzaWduaWZpZXMgdGhhdCB5b3UgYWdyZWUgdG8gdGhlIGxpY2Vuc2UuCisgICAgICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgYnVpbGQgc3lzdGVtIGNhbiBidWlsZCB0aGUgY29ycmVzcG9uZGluZyByZWNpcGUgYW5kIGluY2x1ZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb21wb25lbnQgaW4gdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2VuYWJsaW5nLWNvbW1lcmNpYWxseS1saWNlbnNlZC1yZWNpcGVzJz5FbmFibGluZworICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVyY2lhbGx5IExpY2Vuc2VkIFJlY2lwZXM8L3VsaW5rPiIgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hbnVhbCBmb3IgZGV0YWlscyBvbiBob3cgdG8gdXNlIHRoZXNlIHZhcmlhYmxlcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgYnVpbGQgYXMgeW91IG5vcm1hbGx5IHdvdWxkLCB3aXRob3V0CisJCSAgICAgICAgc3BlY2lmeWluZyBhbnkgcmVjaXBlcyBpbiB0aGUKKwkJICAgICAgICA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHU19XSElURUxJU1Q8L2ZpbGVuYW1lPiwgdGhlIGJ1aWxkIHN0b3BzIGFuZAorCQkgICAgICAgIHByb3ZpZGVzIHlvdSB3aXRoIHRoZSBsaXN0IG9mIHJlY2lwZXMgdGhhdCB5b3UgaGF2ZQorCQkgICAgICAgIHRyaWVkIHRvIGluY2x1ZGUgaW4gdGhlIGltYWdlIHRoYXQgbmVlZCBlbnRyaWVzIGluCisJCSAgICAgICAgdGhlIDxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTX1dISVRFTElTVDwvZmlsZW5hbWU+LgorCQkgICAgICAgIE9uY2UgeW91IGVudGVyIHRoZSBhcHByb3ByaWF0ZSBsaWNlbnNlIGZsYWdzIGludG8gdGhlIHdoaXRlbGlzdCwKKwkJICAgICAgICByZXN0YXJ0IHRoZSBidWlsZCB0byBjb250aW51ZSB3aGVyZSBpdCBsZWZ0IG9mZi4KKwkJICAgICAgICBEdXJpbmcgdGhlIGJ1aWxkLCB0aGUgcHJvbXB0IHdpbGwgbm90IGFwcGVhciBhZ2FpbgorCQkgICAgICAgIHNpbmNlIHlvdSBoYXZlIHNhdGlzZmllZCB0aGUgcmVxdWlyZW1lbnQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+T25jZSB0aGUgYXBwcm9wcmlhdGUgbGljZW5zZSBmbGFncyBhcmUgb24gdGhlIHdoaXRlIGxpc3QKKwkJICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUPC9maWxlbmFtZT4gdmFyaWFibGUsIHlvdQorCQkgICAgICAgIGNhbiBidWlsZCB0aGUgZW5jdW1iZXJlZCBpbWFnZSB3aXRoIG5vIGNoYW5nZSBhdCBhbGwKKwkJICAgICAgICB0byB0aGUgbm9ybWFsIGJ1aWxkIHByb2Nlc3MuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2V0IGEgcHJlLWJ1aWx0IHZlcnNpb24gb2YgdGhlIEJTUDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBnZXQgdGhpcyB0eXBlIG9mIEJTUCBieSB2aXNpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJEb3dubG9hZHMiIHBhZ2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7Jz5Zb2N0byBQcm9qZWN0IHdlYnNpdGU8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZG93bmxvYWQgQlNQIHRhcmJhbGxzIHRoYXQgY29udGFpbiBwcm9wcmlldGFyeSBjb21wb25lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciBhZ3JlZWluZyB0byB0aGUgbGljZW5zaW5nCisgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlbWVudHMgb2YgZWFjaCBvZiB0aGUgaW5kaXZpZHVhbGx5IGVuY3VtYmVyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGFzIHBhcnQgb2YgdGhlIGRvd25sb2FkIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgICAgICBPYnRhaW5pbmcgdGhlIEJTUCB0aGlzIHdheSBhbGxvd3MgeW91IHRvIGFjY2VzcyBhbiBlbmN1bWJlcmVkCisgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSBpbW1lZGlhdGVseSBhZnRlciBhZ3JlZWluZyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrLXRocm91Z2ggbGljZW5zZSBhZ3JlZW1lbnRzIHByZXNlbnRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHdlYnNpdGUuCisgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgaWYgeW91IHdhbnQgdG8gYnVpbGQgdGhlIGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICB5b3Vyc2VsZiB1c2luZyB0aGUgcmVjaXBlcyBjb250YWluZWQgd2l0aGluIHRoZSBCU1AKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmJhbGwsIHlvdSB3aWxsIHN0aWxsIG5lZWQgdG8gY3JlYXRlIGFuCisgICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZSA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHU19XSElURUxJU1Q8L2ZpbGVuYW1lPiB0byBtYXRjaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuY3VtYmVyZWQgcmVjaXBlcyBpbiB0aGUgQlNQLjwvcGFyYT48L2xpc3RpdGVtPgorCSAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgUHJlLWNvbXBpbGVkIGltYWdlcyBhcmUgYnVuZGxlZCB3aXRoCisgICAgICAgICAgICAgICAgYSB0aW1lLWxpbWl0ZWQga2VybmVsIHRoYXQgcnVucyBmb3IgYQorICAgICAgICAgICAgICAgIHByZWRldGVybWluZWQgYW1vdW50IG9mIHRpbWUgKDEwIGRheXMpIGJlZm9yZSBpdCBmb3JjZXMKKyAgICAgICAgICAgICAgICB0aGUgc3lzdGVtIHRvIHJlYm9vdC4KKyAgICAgICAgICAgICAgICBUaGlzIGxpbWl0YXRpb24gaXMgbWVhbnQgdG8gZGlzY291cmFnZSBkaXJlY3QgcmVkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICBvZiB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgWW91IG11c3QgZXZlbnR1YWxseSByZWJ1aWxkIHRoZSBpbWFnZSBpZiB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyByZXN0cmljdGlvbi4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy10aGUteW9jdG8tcHJvamVjdHMtYnNwLXRvb2xzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyB0aGUgWW9jdG8gUHJvamVjdCdzIEJTUCBUb29sczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGluY2x1ZGVzIGEgY291cGxlIG9mIHRvb2xzIHRoYXQgZW5hYmxlCisgICAgICAgICAgICAgICAgeW91IHRvIGNyZWF0ZSBhIDxsaW5rIGxpbmtlbmQ9J2JzcC1sYXllcnMnPkJTUCBsYXllcjwvbGluaz4KKyAgICAgICAgICAgICAgICBmcm9tIHNjcmF0Y2ggYW5kIGRvIGJhc2ljIGNvbmZpZ3VyYXRpb24gYW5kIG1haW50ZW5hbmNlCisgICAgICAgICAgICAgICAgb2YgdGhlIGtlcm5lbCB3aXRob3V0IGV2ZXIgbG9va2luZyBhdCBhIE1ldGFkYXRhIGZpbGUuCisgICAgICAgICAgICAgICAgVGhlc2UgdG9vbHMgYXJlIDxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHJlc3BlY3RpdmVseS4KKwkgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJlIHRoZSBjb21tb24gbG9jYXRpb24gYW5kIGhlbHAgZmVhdHVyZXMgYXMgd2VsbAorICAgICAgICAgICAgICAgIGFzIHByb3ZpZGUgZGV0YWlscyBmb3IgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsPC9maWxlbmFtZT4gdG9vbHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdjb21tb24tZmVhdHVyZXMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Db21tb24gRmVhdHVyZXM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlc2lnbmVkIHRvIGhhdmUgYSAgY29tbWFuZCBpbnRlcmZhY2Ugc29tZXdoYXQgbGlrZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNnaXQnPkdpdDwvdWxpbms+LCBlYWNoCisgICAgICAgICAgICAgICAgICAgIHRvb2wgaXMgc3RydWN0dXJlZCBhcyBhIHNldCBvZiBzdWItY29tbWFuZHMgdW5kZXIgYQorICAgICAgICAgICAgICAgICAgICB0b3AtbGV2ZWwgY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRvcC1sZXZlbCBjb21tYW5kICg8ZmlsZW5hbWU+eW9jdG8tYnNwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbDwvZmlsZW5hbWU+KSBpdHNlbGYgZG9lcworICAgICAgICAgICAgICAgICAgICBub3RoaW5nIGJ1dCBpbnZva2Ugb3IgcHJvdmlkZSBoZWxwIG9uIHRoZSBzdWItY29tbWFuZHMKKyAgICAgICAgICAgICAgICAgICAgaXQgc3VwcG9ydHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJvdGggdG9vbHMgcmVzaWRlIGluIHRoZSA8ZmlsZW5hbWU+c2NyaXB0cy88L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0byB1c2UgdGhlIHNjcmlwdHMsIHlvdSBtdXN0IDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQganVzdCBhcyB5b3Ugd291bGQgd2hlbiBpbnZva2luZyBhIGJ1aWxkOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52IDxyZXBsYWNlYWJsZT5idWlsZF9kaXI8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtb3N0IGltbWVkaWF0ZWx5IHVzZWZ1bCBmdW5jdGlvbiBpcyB0byBnZXQgaGVscCBvbiBib3RoIHRvb2xzLgorICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbHQtaW4gaGVscCBzeXN0ZW0gbWFrZXMgaXQgZWFzeSB0byBkcmlsbCBkb3duIGF0CisgICAgICAgICAgICAgICAgICAgIGFueSB0aW1lIGFuZCB2aWV3IHRoZSBzeW50YXggcmVxdWlyZWQgZm9yIGFueSBzcGVjaWZpYyBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBTaW1wbHkgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgd2l0aCB0aGUgPGZpbGVuYW1lPmhlbHA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2g6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB5b2N0by1ic3AgaGVscAorICAgICBVc2FnZToKKworICAgICAgQ3JlYXRlIGEgY3VzdG9taXplZCBZb2N0byBCU1AgbGF5ZXIuCisKKyAgICAgIHVzYWdlOiB5b2N0by1ic3AgWy0tdmVyc2lvbl0gWy0taGVscF0gQ09NTUFORCBbQVJHU10KKworICAgICAgQ3VycmVudCAneW9jdG8tYnNwJyBjb21tYW5kcyBhcmU6CisgICAgICAgICBjcmVhdGUgICAgICAgICAgICBDcmVhdGUgYSBuZXcgWW9jdG8gQlNQCisgICAgICAgICBsaXN0ICAgICAgICAgICAgICBMaXN0IGF2YWlsYWJsZSB2YWx1ZXMgZm9yIG9wdGlvbnMgYW5kIEJTUCBwcm9wZXJ0aWVzCisKKyAgICAgIFNlZSAneW9jdG8tYnNwIGhlbHAgQ09NTUFORCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLgorCisKKyAgICAgT3B0aW9uczoKKyAgICAgICAtLXZlcnNpb24gICAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAtaCwgLS1oZWxwICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgIC1ELCAtLWRlYnVnICBvdXRwdXQgZGVidWcgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTaW1pbGFybHksIGVudGVyaW5nIGp1c3QgdGhlIG5hbWUgb2YgYSBzdWItY29tbWFuZCBzaG93cyB0aGUgZGV0YWlsZWQgdXNhZ2UKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoYXQgc3ViLWNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB5b2N0by1ic3AgY3JlYXRlCisKKyAgICAgVXNhZ2U6CisKKyAgICAgIENyZWF0ZSBhIG5ldyBZb2N0byBCU1AKKworICAgICAgdXNhZ2U6IHlvY3RvLWJzcCBjcmVhdGUgJmx0O2JzcC1uYW1lJmd0OyAmbHQ7a2FyY2gmZ3Q7IFstbyAmbHQ7RElSTkFNRSZndDsgfCAtLW91dGRpciAmbHQ7RElSTkFNRSZndDtdCisgICAgICAgICAgICAgWy1pICZsdDtKU09OIFBST1BFUlRZIEZJTEUmZ3Q7IHwgLS1pbmZpbGUgJmx0O0pTT04gUFJPUEVSVFlfRklMRSZndDtdCisKKyAgICAgIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgWW9jdG8gQlNQIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycy4KKyAgICAgIFRoZSBuZXcgQlNQIHdpbGwgYmUgYSBuZXcgWW9jdG8gQlNQIGxheWVyIGNvbnRhaW5lZCBieSBkZWZhdWx0IHdpdGhpbgorICAgICAgdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgc3BlY2lmaWVkIGFzICdtZXRhLWJzcC1uYW1lJy4gIFRoZSAtbyBvcHRpb24KKyAgICAgIGNhbiBiZSB1c2VkIHRvIHBsYWNlIHRoZSBCU1AgbGF5ZXIgaW4gYSBkaXJlY3Rvcnkgd2l0aCBhIGRpZmZlcmVudAorICAgICAgbmFtZSBhbmQgbG9jYXRpb24uCisKKyAgICAgIC4uLgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBhbnkgc3ViLWNvbW1hbmQsIHlvdSBjYW4gdXNlIHRoZSB3b3JkICJoZWxwIiBvcHRpb24ganVzdCBiZWZvcmUgdGhlCisgICAgICAgICAgICAgICAgICAgIHN1Yi1jb21tYW5kIHRvIGdldCBtb3JlIGV4dGVuc2l2ZSBkb2N1bWVudGF0aW9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8tYnNwIGhlbHAgY3JlYXRlCisKKyAgICAgTkFNRQorICAgICAgICAgeW9jdG8tYnNwIGNyZWF0ZSAtIENyZWF0ZSBhIG5ldyBZb2N0byBCU1AKKworICAgICBTWU5PUFNJUworICAgICAgICAgeW9jdG8tYnNwIGNyZWF0ZSAmbHQ7YnNwLW5hbWUmZ3Q7ICZsdDtrYXJjaCZndDsgWy1vICZsdDtESVJOQU1FJmd0OyB8IC0tb3V0ZGlyICZsdDtESVJOQU1FJmd0O10KKyAgICAgICAgICAgICBbLWkgJmx0O0pTT04gUFJPUEVSVFkgRklMRSZndDsgfCAtLWluZmlsZSAmbHQ7SlNPTiBQUk9QRVJUWV9GSUxFJmd0O10KKworICAgICBERVNDUklQVElPTgorICAgICAgICAgVGhpcyBjb21tYW5kIGNyZWF0ZXMgYSBZb2N0byBCU1AgYmFzZWQgb24gdGhlIHNwZWNpZmllZAorICAgICAgICAgcGFyYW1ldGVycy4gIFRoZSBuZXcgQlNQIHdpbGwgYmUgYSBuZXcgWW9jdG8gQlNQIGxheWVyIGNvbnRhaW5lZAorICAgICAgICAgYnkgZGVmYXVsdCB3aXRoaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgc3BlY2lmaWVkIGFzCisgICAgICAgICAnbWV0YS1ic3AtbmFtZScuICBUaGUgLW8gb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHBsYWNlIHRoZSBCU1AgbGF5ZXIKKyAgICAgICAgIGluIGEgZGlyZWN0b3J5IHdpdGggYSBkaWZmZXJlbnQgbmFtZSBhbmQgbG9jYXRpb24uCisKKyAgICAgICAgIFRoZSB2YWx1ZSBvZiB0aGUgJ2thcmNoJyBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB0aGUgc2V0IG9mIGZpbGVzCisgICAgICAgICB0aGF0IHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB0aGUgQlNQLCBhbG9uZyB3aXRoIHRoZSBzcGVjaWZpYyBzZXQgb2YKKyAgICAgICAgICdwcm9wZXJ0aWVzJyB0aGF0IHdpbGwgYmUgdXNlZCB0byBmaWxsIG91dCB0aGUgQlNQLXNwZWNpZmljCisgICAgICAgICBwb3J0aW9ucyBvZiB0aGUgQlNQLiAgVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlICdrYXJjaCcgcGFyYW1ldGVyCisgICAgICAgICBjYW4gYmUgbGlzdGVkIHZpYSAneW9jdG8tYnNwIGxpc3Qga2FyY2gnLgorCisgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBOb3cgdGhhdCB5b3Uga25vdyB3aGVyZSB0aGVzZSB0d28gY29tbWFuZHMgcmVzaWRlIGFuZCBob3cgdG8gYWNjZXNzIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgIG9uIHRoZW0sIHlvdSBzaG91bGQgZmluZCBpdCByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCB0byBkaXNjb3ZlciB0aGUgY29tbWFuZHMKKyAgICAgICAgICAgICAgICAgICAgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIEJTUCBhbmQgcGVyZm9ybSBiYXNpYyBrZXJuZWwgbWFpbnRlbmFuY2Ugb24gdGhhdCBCU1AgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIHRvb2xzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1sYXllcjwvZmlsZW5hbWU+IHRvb2wgdG8gY3JlYXRlCisgICAgICAgICAgICAgICAgICAgICAgICBhICJnZW5lcmljIiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGlzIHRvb2wsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLWdlbmVyYWwtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWxheWVyLXNjcmlwdCc+Q3JlYXRpbmcgYSBHZW5lcmFsIExheWVyIFVzaW5nIHRoZSB5b2N0by1sYXllciBTY3JpcHQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgR3VpZGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG5leHQgc2VjdGlvbnMgcHJvdmlkZSBhIGNvbmNyZXRlIHN0YXJ0aW5nIHBvaW50IHRvIGV4cGFuZCBvbiBhIGZldyBwb2ludHMgdGhhdAorICAgICAgICAgICAgICAgICAgICBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cyBvciB0aGF0IGNvdWxkIHVzZSBmdXJ0aGVyIGV4cGxhbmF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctYS1uZXctYnNwLWxheWVyLXVzaW5nLXRoZS15b2N0by1ic3Atc2NyaXB0Jz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgYSBuZXcgQlNQIExheWVyIFVzaW5nIHRoZSB5b2N0by1ic3AgU2NyaXB0PC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+IHNjcmlwdCBjcmVhdGVzIGEgbmV3CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2JzcC1sYXllcnMnPkJTUCBsYXllcjwvbGluaz4gZm9yIGFueSBhcmNoaXRlY3R1cmUgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBZb2N0byBQcm9qZWN0LCBhcyB3ZWxsIGFzIFFFTVUgdmVyc2lvbnMgb2YgdGhlIHNhbWUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IG1vZGUgb2YgdGhlIHNjcmlwdCdzIG9wZXJhdGlvbiBpcyB0byBwcm9tcHQgeW91IGZvciBpbmZvcm1hdGlvbiBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gZ2VuZXJhdGUgdGhlIEJTUCBsYXllci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBjdXJyZW50IHNldCBvZiBCU1BzLCB0aGUgc2NyaXB0IHByb21wdHMgeW91IGZvciB2YXJpb3VzIGltcG9ydGFudAorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzIHN1Y2ggYXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGtlcm5lbCB0byB1c2U8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgYnJhbmNoIG9mIHRoYXQga2VybmVsIHRvIHVzZSAob3IgcmUtdXNlKTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZXRoZXIgb3Igbm90IHRvIHVzZSBYLCBhbmQgaWYgc28sIHdoaWNoIGRyaXZlcnMgdG8gdXNlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V2hldGhlciB0byB0dXJuIG9uIFNNUDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZXRoZXIgdGhlIEJTUCBoYXMgYSBrZXlib2FyZDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZXRoZXIgdGhlIEJTUCBoYXMgYSB0b3VjaHNjcmVlbjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJlbWFpbmluZyBjb25maWd1cmFibGUgaXRlbXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBCU1A8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1ic3AgY3JlYXRlPC9maWxlbmFtZT4gc3ViLWNvbW1hbmQgdG8gY3JlYXRlCisgICAgICAgICAgICAgICAgICAgIGEgbmV3IEJTUCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIHJlcXVpcmVzIHlvdSB0byBzcGVjaWZ5IGEgcGFydGljdWxhciBrZXJuZWwgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+a2FyY2g8L2ZpbGVuYW1lPikgb24gd2hpY2ggdG8gYmFzZSB0aGUgQlNQLgorICAgICAgICAgICAgICAgICAgICBBc3N1bWluZyB5b3UgaGF2ZSBzb3VyY2VkIHRoZSBlbnZpcm9ubWVudCwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1ic3AgbGlzdCBrYXJjaDwvZmlsZW5hbWU+IHN1Yi1jb21tYW5kIHRvIGxpc3QgdGhlCisgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMgYXZhaWxhYmxlIGZvciBCU1AgY3JlYXRpb24gYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHlvY3RvLWJzcCBsaXN0IGthcmNoCisgICAgIEFyY2hpdGVjdHVyZXMgYXZhaWxhYmxlOgorICAgICAgICAgcWVtdQorICAgICAgICAgbWlwczY0CisgICAgICAgICBwb3dlcnBjCisgICAgICAgICB4ODZfNjQKKyAgICAgICAgIGFybQorICAgICAgICAgbWlwcworICAgICAgICAgaTM4NgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIHByZXNlbnRzIGFuIGV4YW1wbGUgdGhhdCB1c2VzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teWFybTwvZmlsZW5hbWU+IGFzIHRoZSBtYWNoaW5lIG5hbWUgYW5kIDxmaWxlbmFtZT5xZW11PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYXMgdGhlIG1hY2hpbmUgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICBPZiB0aGUgYXZhaWxhYmxlIGFyY2hpdGVjdHVyZXMsIDxmaWxlbmFtZT5xZW11PC9maWxlbmFtZT4gaXMgdGhlIG9ubHkgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgY2F1c2VzIHRoZSBzY3JpcHQgdG8gcHJvbXB0IHlvdSBmdXJ0aGVyIGZvciBhbiBhY3R1YWwgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICBJbiBldmVyeSBvdGhlciB3YXksIHRoaXMgYXJjaGl0ZWN0dXJlIGlzIHJlcHJlc2VudGF0aXZlIG9mIGhvdyBjcmVhdGluZyBhIEJTUCBmb3IKKyAgICAgICAgICAgICAgICAgICAgYW4gYWN0dWFsIG1hY2hpbmUgd291bGQgd29yay4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlYXNvbiB0aGUgZXhhbXBsZSB1c2VzIHRoaXMgYXJjaGl0ZWN0dXJlIGlzIGJlY2F1c2UgaXQgaXMgYW4gZW11bGF0ZWQgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgICAgIGFuZCBjYW4gZWFzaWx5IGJlIGZvbGxvd2VkIHdpdGhvdXQgcmVxdWlyaW5nIGFjdHVhbCBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXMgdGhlIDxmaWxlbmFtZT55b2N0by1ic3AgY3JlYXRlPC9maWxlbmFtZT4gY29tbWFuZCBydW5zLCBkZWZhdWx0IHZhbHVlcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgdGhlIHByb21wdHMgYXBwZWFyIGluIGJyYWNrZXRzLgorICAgICAgICAgICAgICAgICAgICBQcmVzc2luZyBlbnRlciB3aXRob3V0IHN1cHBseWluZyBhbnl0aGluZyBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIHByZXNzaW5nIGVudGVyCisgICAgICAgICAgICAgICAgICAgIHdpdGggYW4gaW52YWxpZCByZXNwb25zZSBjYXVzZXMgdGhlIHNjcmlwdCB0byBhY2NlcHQgdGhlIGRlZmF1bHQgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIHNjcmlwdCBjb21wbGV0ZXMsIHRoZSBuZXcgPGZpbGVuYW1lPm1ldGEtbXlhcm08L2ZpbGVuYW1lPiBCU1AgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgaXMgY3JlYXRlZCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGFzc3VtZXMgeW91IGhhdmUgc291cmNlZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHNldHVwIHNjcmlwdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIHRoZSBjb21wbGV0ZSBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8tYnNwIGNyZWF0ZSBteWFybSBxZW11CisgICAgIENoZWNraW5nIGJhc2ljIGdpdCBjb25uZWN0aXZpdHkuLi4KKyAgICAgRG9uZS4KKyAgICAgV2hpY2ggcWVtdSBhcmNoaXRlY3R1cmUgd291bGQgeW91IGxpa2UgdG8gdXNlPyBbZGVmYXVsdDogaTM4Nl0KKyAgICAgICAgIDEpIGkzODYgICAgKDMyLWJpdCkKKyAgICAgICAgIDIpIHg4Nl82NCAgKDY0LWJpdCkKKyAgICAgICAgIDMpIEFSTSAgICAgKDMyLWJpdCkKKyAgICAgICAgIDQpIFBvd2VyUEMgKDMyLWJpdCkKKyAgICAgICAgIDUpIE1JUFMgICAgKDMyLWJpdCkKKyAgICAgICAgIDYpIE1JUFM2NCAgKDY0LWJpdCkKKyAgICAgMworICAgICBXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDMuMTkpIGtlcm5lbD8gKHkvbikgW2RlZmF1bHQ6IHldIHkKKyAgICAgRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIFtkZWZhdWx0OiB5XQorICAgICBHZXR0aW5nIGJyYW5jaGVzIGZyb20gcmVtb3RlIHJlcG8gZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xOS5naXQuLi4KKyAgICAgUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgeW91ciBuZXcgQlNQIGJyYW5jaCBvbjogW2RlZmF1bHQ6IHN0YW5kYXJkL2Jhc2VdCisgICAgICAgICAxKSBzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcworICAgICAgICAgMikgc3RhbmRhcmQvYmFzZQorICAgICAgICAgMykgc3RhbmRhcmQvYmVhZ2xlYm9hcmQKKyAgICAgICAgIDQpIHN0YW5kYXJkL2JlYWdsZWJvbmUKKyAgICAgICAgIDUpIHN0YW5kYXJkL2NrCisgICAgICAgICA2KSBzdGFuZGFyZC9jb21tb24tcGMKKyAgICAgICAgIDcpIHN0YW5kYXJkL2Nyb3duYmF5CisgICAgICAgICA4KSBzdGFuZGFyZC9lZGdlcm91dGVyCisgICAgICAgICA5KSBzdGFuZGFyZC9mc2wtbXBjODMxNWUtcmRiCisgICAgICAgICAxMCkgc3RhbmRhcmQvbXRpLW1hbHRhMzIKKyAgICAgICAgIDExKSBzdGFuZGFyZC9tdGktbWFsdGE2NAorICAgICAgICAgMTIpIHN0YW5kYXJkL3FlbXVhcm02NAorICAgICAgICAgMTMpIHN0YW5kYXJkL3FlbXVwcGMKKyAgICAgMQorICAgICBXb3VsZCB5b3UgbGlrZSBTTVAgc3VwcG9ydD8gKHkvbikgW2RlZmF1bHQ6IHldCisgICAgIERvZXMgeW91ciBCU1AgaGF2ZSBhIHRvdWNoc2NyZWVuPyAoeS9uKSBbZGVmYXVsdDogbl0KKyAgICAgRG9lcyB5b3VyIEJTUCBoYXZlIGEga2V5Ym9hcmQ/ICh5L24pIFtkZWZhdWx0OiB5XQorICAgICBOZXcgcWVtdSBCU1AgY3JlYXRlZCBpbiBtZXRhLW15YXJtCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBleGFtcGxlIG5vdzoKKyAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciB0aGUgUUVNVSBhcmNoaXRlY3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNjcmlwdCBmaXJzdCBwcm9tcHRzIHlvdSBmb3Igd2hpY2ggZW11bGF0ZWQgYXJjaGl0ZWN0dXJlIHRvIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgZXhhbXBsZSwgd2UgdXNlIHRoZSBBUk0gYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBzY3JpcHQgdGhlbiBwcm9tcHRzIHlvdSBmb3IgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCAzLjE5IGtlcm5lbCBpcyBhY2NlcHRhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvLCB0aGUgZXhhbXBsZSBhY2NlcHRzIHRoZSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBlbnRlciAnbicsIHRoZSBzY3JpcHQgcHJvbXB0cyB5b3UgdG8gZnVydGhlciBlbnRlciB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGRvIHdhbnQgdG8gdXNlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk5leHQsIHRoZSBzY3JpcHQgYXNrcyB3aGV0aGVyIHlvdSB3b3VsZCBsaWtlIHRvIGhhdmUgYSBuZXcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2ggY3JlYXRlZCBlc3BlY2lhbGx5IGZvciB5b3VyIEJTUCBpbiB0aGUgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNsb2NhbC1rZXJuZWwtZmlsZXMnPkxpbnV4IFlvY3RvIEtlcm5lbDwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkgLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCwgdGhlbiB0aGUgc2NyaXB0IHJlLXVzZXMgYW4gZXhpc3RpbmcgYnJhbmNoLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JbiB0aGlzIGV4YW1wbGUsIHRoZSBkZWZhdWx0IChvciAieWVzIikgaXMgYWNjZXB0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGh1cywgYSBuZXcgYnJhbmNoIGlzIGNyZWF0ZWQgZm9yIHRoZSBCU1AgcmF0aGVyIHRoYW4gdXNpbmcgYSBjb21tb24sIHNoYXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmV3IGJyYW5jaCBpcyB0aGUgYnJhbmNoIGNvbW1pdHRlZCB0byBmb3IgYW55IHBhdGNoZXMgeW91IG1pZ2h0IGxhdGVyIGFkZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVhc29uIGEgbmV3IGJyYW5jaCBpcyB0aGUgZGVmYXVsdCBpcyB0aGF0IHR5cGljYWxseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCU1BzIGRvIHJlcXVpcmUgQlNQLXNwZWNpZmljIHBhdGNoZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRvb2wgdGh1cyBhc3N1bWVzIHRoYXQgbW9zdCBvZiB0aW1lIGEgbmV3IGJyYW5jaCBpcyByZXF1aXJlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZWdhcmRsZXNzIG9mIHdoaWNoIGNob2ljZSB5b3UgbWFrZSBpbiB0aGUgcHJldmlvdXMgc3RlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgYXJlIG5vdyBnaXZlbiB0aGUgb3Bwb3J0dW5pdHkgdG8gc2VsZWN0IGEgcGFydGljdWxhciBtYWNoaW5lIGJyYW5jaCBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRvIGJhc2UgeW91ciBuZXcgQlNQLXNwZWNpZmljIG1hY2hpbmUgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRvIHJlLXVzZSBpZiB5b3UgaGFkIGVsZWN0ZWQgdG8gbm90IGNyZWF0ZSBhIG5ldyBicmFuY2gpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhpcyBleGFtcGxlIGlzIGdlbmVyYXRpbmcgYW4gQVJNLWJhc2VkIEJTUCwgdGhlIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VzIDxmaWxlbmFtZT4jMTwvZmlsZW5hbWU+IGF0IHRoZSBwcm9tcHQsIHdoaWNoIHNlbGVjdHMgdGhlIEFSTS12ZXJzYXRpbGUgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSByZW1haW5kZXIgb2YgdGhlIHByb21wdHMgYXJlIHJvdXRpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgYXJlIGFjY2VwdGVkIGZvciBlYWNoLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJ5IGRlZmF1bHQsIHRoZSBzY3JpcHQgY3JlYXRlcyB0aGUgbmV3IEJTUCBMYXllciBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+cG9reS9idWlsZDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgQlNQIExheWVyIGlzIGNyZWF0ZWQsIHlvdSBtdXN0IGFkZCBpdCB0byB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTEFZRVJTID0gPyAiIFwKKyAgICAgICAgL3Vzci9sb2NhbC9zcmMveW9jdG8vbWV0YSBcCisgICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEteW9jdG8gXAorICAgICAgICAvdXNyL2xvY2FsL3NyYy95b2N0by9tZXRhLXlvY3RvLWJzcCBcCisgICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEtbXlhcm0gXAorICAgICAgICAiCisKKyAgICAgQkJMQVlFUlNfTk9OX1JFTU9WQUJMRSA/PSAiIFwKKyAgICAgICAgL3Vzci9sb2NhbC9zcmMveW9jdG8vbWV0YSBcCisgICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEteW9jdG8gXAorICAgICAgICAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQWRkaW5nIHRoZSBsYXllciB0byB0aGlzIGZpbGUgYWxsb3dzIHRoZSBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgdGhlIEJTUCBhbmQKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiB0b29sIHRvIGJlIGFibGUgdG8gZmluZCB0aGUgbGF5ZXIgYW5kCisgICAgICAgICAgICAgICAgICAgIG90aGVyIE1ldGFkYXRhIGl0IG5lZWRzIG9uIHdoaWNoIHRvIG9wZXJhdGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbWFuYWdpbmcta2VybmVsLXBhdGNoZXMtYW5kLWNvbmZpZy1pdGVtcy13aXRoLXlvY3RvLWtlcm5lbCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPk1hbmFnaW5nIEtlcm5lbCBQYXRjaGVzIGFuZCBDb25maWcgSXRlbXMgd2l0aCB5b2N0by1rZXJuZWw8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzc3VtaW5nIHlvdSBoYXZlIGNyZWF0ZWQgYSA8bGluayBsaW5rZW5kPSdic3AtbGF5ZXJzJz5CU1AgTGF5ZXI8L2xpbms+IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPjwvbGluaz4gYW5kIHlvdSBhZGRlZCBpdCB0byB5b3VyCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkxBWUVSUyc+PGZpbGVuYW1lPkJCTEFZRVJTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB5b3UgY2FuIG5vdyB1c2UKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiBzY3JpcHQgdG8gYWRkIHBhdGNoZXMgYW5kIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgaXRlbXMgdG8gdGhlIEJTUCdzIGtlcm5lbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiBzY3JpcHQgYWxsb3dzIHlvdSB0byBhZGQsIHJlbW92ZSwgYW5kIGxpc3QgcGF0Y2hlcworICAgICAgICAgICAgICAgICAgICBhbmQga2VybmVsIGNvbmZpZyBzZXR0aW5ncyB0byBhIEJTUCdzIGtlcm5lbAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgQWxsIHlvdSBuZWVkIHRvIGRvIGlzIHVzZSB0aGUgYXBwcm9wcmlhdGUgc3ViLWNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIFJlY2FsbCB0aGF0IHRoZSBlYXNpZXN0IHdheSB0byBzZWUgZXhhY3RseSB3aGF0IHN1Yi1jb21tYW5kcyBhcmUgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgIGlzIHRvIHVzZSB0aGUgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbDwvZmlsZW5hbWU+IGJ1aWx0LWluIGhlbHAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHlvY3RvLWtlcm5lbCAtLWhlbHAKKyAgICAgVXNhZ2U6CisgICAgICBNb2RpZnkgYW5kIGxpc3QgWW9jdG8gQlNQIGtlcm5lbCBjb25maWcgaXRlbXMgYW5kIHBhdGNoZXMuCisgICAgICB1c2FnZTogeW9jdG8ta2VybmVsIFstLXZlcnNpb25dIFstLWhlbHBdIENPTU1BTkQgW0FSR1NdCisgICAgICBDdXJyZW50ICd5b2N0by1rZXJuZWwnIGNvbW1hbmRzIGFyZToKKyAgICAgICAgY29uZmlnIGxpc3QgICAgICAgTGlzdCB0aGUgbW9kaWZpYWJsZSBzZXQgb2YgYmFyZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgZm9yIGEgQlNQCisgICAgICAgIGNvbmZpZyBhZGQgICAgICAgIEFkZCBvciBtb2RpZnkgYmFyZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgZm9yIGEgQlNQCisgICAgICAgIGNvbmZpZyBybSAgICAgICAgIFJlbW92ZSBiYXJlIGtlcm5lbCBjb25maWcgb3B0aW9ucyBmcm9tIGEgQlNQCisgICAgICAgIHBhdGNoIGxpc3QgICAgICAgIExpc3QgdGhlIHBhdGNoZXMgYXNzb2NpYXRlZCB3aXRoIGEgQlNQCisgICAgICAgIHBhdGNoIGFkZCAgICAgICAgIFBhdGNoIHRoZSBZb2N0byBrZXJuZWwgZm9yIGEgQlNQCisgICAgICAgIHBhdGNoIHJtICAgICAgICAgIFJlbW92ZSBwYXRjaGVzIGZyb20gYSBCU1AKKyAgICAgICAgZmVhdHVyZSBsaXN0ICAgICAgTGlzdCB0aGUgZmVhdHVyZXMgdXNlZCBieSBhIEJTUAorICAgICAgICBmZWF0dXJlIGFkZCAgICAgICBIYXZlIGEgQlNQIHVzZSBhIGZlYXR1cmUKKyAgICAgICAgZmVhdHVyZSBybSAgICAgICAgSGF2ZSBhIEJTUCBzdG9wIHVzaW5nIGEgZmVhdHVyZQorICAgICAgICBmZWF0dXJlcyBsaXN0ICAgICBMaXN0IHRoZSBmZWF0dXJlcyBhdmFpbGFibGUgdG8gQlNQcworICAgICAgICBmZWF0dXJlIGRlc2NyaWJlICBEZXNjcmliZSBhIHBhcnRpY3VsYXIgZmVhdHVyZQorICAgICAgICBmZWF0dXJlIGNyZWF0ZSAgICBDcmVhdGUgYSBuZXcgQlNQLWxvY2FsIGZlYXR1cmUKKyAgICAgICAgZmVhdHVyZSBkZXN0cm95ICAgUmVtb3ZlIGEgQlNQLWxvY2FsIGZlYXR1cmUKKyAgICAgIFNlZSAneW9jdG8ta2VybmVsIGhlbHAgQ09NTUFORCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLgorICAgICBPcHRpb25zOgorICAgICAgIC0tdmVyc2lvbiAgICBzaG93IHByb2dyYW0ncyB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdAorICAgICAgIC1oLCAtLWhlbHAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgLUQsIC0tZGVidWcgIG91dHB1dCBkZWJ1ZyBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsIHBhdGNoIGFkZDwvZmlsZW5hbWU+IHN1Yi1jb21tYW5kIGFsbG93cyB5b3UgdG8gYWRkIGEKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2ggdG8gYSBCU1AuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBhZGRzIHR3byBwYXRjaGVzIHRvIHRoZSA8ZmlsZW5hbWU+bXlhcm08L2ZpbGVuYW1lPiBCU1A6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB5b2N0by1rZXJuZWwgcGF0Y2ggYWRkIG15YXJtIH4vdGVzdC5wYXRjaAorICAgICBBZGRlZCBwYXRjaGVzOgorICAgICAgIHRlc3QucGF0Y2gKKworICAgICAkIHlvY3RvLWtlcm5lbCBwYXRjaCBhZGQgbXlhcm0gfi95b2N0by10ZXN0bW9kLnBhdGNoCisgICAgIEFkZGVkIHBhdGNoZXM6CisgICAgICAgeW9jdG8tdGVzdG1vZC5wYXRjaAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPkFsdGhvdWdoIHRoZSBwcmV2aW91cyBleGFtcGxlIGFkZHMgcGF0Y2hlcyBvbmUgYXQgYSB0aW1lLCBpdCBpcyBwb3NzaWJsZQorICAgICAgICAgICAgICAgICAgICB0byBhZGQgbXVsdGlwbGUgcGF0Y2hlcyBhdCB0aGUgc2FtZSB0aW1lLjwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB2ZXJpZnkgcGF0Y2hlcyBoYXZlIGJlZW4gYWRkZWQgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1rZXJuZWwgcGF0Y2ggbGlzdDwvZmlsZW5hbWU+IHN1Yi1jb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB5b2N0by1rZXJuZWwgcGF0Y2ggbGlzdCBteWFybQorICAgICBUaGUgY3VycmVudCBzZXQgb2YgbWFjaGluZS1zcGVjaWZpYyBwYXRjaGVzIGZvciBteWFybSBpczoKKyAgICAgICAxKSB0ZXN0LnBhdGNoCisgICAgICAgMikgeW9jdG8tdGVzdG1vZC5wYXRjaAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiBzY3JpcHQgdG8KKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlIGEgcGF0Y2ggdXNpbmcgdGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWwgcGF0Y2ggcm08L2ZpbGVuYW1lPiBzdWItY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8ta2VybmVsIHBhdGNoIHJtIG15YXJtCisgICAgIFNwZWNpZnkgdGhlIHBhdGNoZXMgdG8gcmVtb3ZlOgorICAgICAgIDEpIHRlc3QucGF0Y2gKKyAgICAgICAyKSB5b2N0by10ZXN0bW9kLnBhdGNoCisgICAgIDEKKyAgICAgUmVtb3ZlZCBwYXRjaGVzOgorICAgICAgIHRlc3QucGF0Y2gKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZ2FpbiwgdXNpbmcgdGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWwgcGF0Y2ggbGlzdDwvZmlsZW5hbWU+IHN1Yi1jb21tYW5kLAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHZlcmlmeSB0aGF0IHRoZSBwYXRjaCB3YXMgaW4gZmFjdCByZW1vdmVkOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8ta2VybmVsIHBhdGNoIGxpc3QgbXlhcm0KKyAgICAgVGhlIGN1cnJlbnQgc2V0IG9mIG1hY2hpbmUtc3BlY2lmaWMgcGF0Y2hlcyBmb3IgbXlhcm0gaXM6CisgICAgICAgMSkgeW9jdG8tdGVzdG1vZC5wYXRjaAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIGEgY29tcGxldGVseSBzaW1pbGFyIHdheSwgeW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWwgY29uZmlnIGFkZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHN1Yi1jb21tYW5kIHRvIGFkZCBvbmUgb3IgbW9yZSBrZXJuZWwgY29uZmlnIGl0ZW0gc2V0dGluZ3MgdG8gYSBCU1AuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYWRkIGEgY291cGxlIG9mIGNvbmZpZyBpdGVtcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm15YXJtPC9maWxlbmFtZT4gQlNQOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8ta2VybmVsIGNvbmZpZyBhZGQgbXlhcm0gQ09ORklHX01JU0NfREVWSUNFUz15CisgICAgIEFkZGVkIGl0ZW06CisgICAgICAgQ09ORklHX01JU0NfREVWSUNFUz15CisKKyAgICAgJCB5b2N0by1rZXJuZWwgY29uZmlnIGFkZCBteWFybSBDT05GSUdfWU9DVE9fVEVTVE1PRD15CisgICAgIEFkZGVkIGl0ZW06CisgICAgICAgQ09ORklHX1lPQ1RPX1RFU1RNT0Q9eQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggdGhlIHByZXZpb3VzIGV4YW1wbGUgYWRkcyBjb25maWcgaXRlbXMgb25lIGF0IGEgdGltZSwgaXQgaXMgcG9zc2libGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFkZCBtdWx0aXBsZSBjb25maWcgaXRlbXMgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGxpc3QgdGhlIGNvbmZpZyBpdGVtcyBub3cgYXNzb2NpYXRlZCB3aXRoIHRoZSBCU1AuCisgICAgICAgICAgICAgICAgICAgIERvaW5nIHNvIHNob3dzIHlvdSB0aGUgY29uZmlnIGl0ZW1zIHlvdSBhZGRlZCBhcyB3ZWxsIGFzIG90aGVycyBhc3NvY2lhdGVkCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIEJTUDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHlvY3RvLWtlcm5lbCBjb25maWcgbGlzdCBteWFybQorICAgICBUaGUgY3VycmVudCBzZXQgb2YgbWFjaGluZS1zcGVjaWZpYyBrZXJuZWwgY29uZmlnIGl0ZW1zIGZvciBteWFybSBpczoKKyAgICAgICAgICAgICAxKSBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyAgICAgICAgICAgICAyKSBDT05GSUdfWU9DVE9fVEVTVE1PRD15CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRmluYWxseSwgeW91IGNhbiByZW1vdmUgb25lIG9yIG1vcmUgY29uZmlnIGl0ZW1zIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsIGNvbmZpZyBybTwvZmlsZW5hbWU+IHN1Yi1jb21tYW5kIGluIGEgbWFubmVyCisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlbHkgYW5hbG9nb3VzIHRvIDxmaWxlbmFtZT55b2N0by1rZXJuZWwgcGF0Y2ggcm08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvZmlndXJlcy9ic3AtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9maWd1cmVzL2JzcC10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyNGRkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvZmlndXJlcy9ic3AtdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtY29tbW9uLXRhc2tzLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtY29tbW9uLXRhc2tzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTI3YTg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1jb21tb24tdGFza3MueG1sCkBAIC0wLDAgKzEsMTAwNDkgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdleHRlbmRwb2t5Jz4KKworPHRpdGxlPkNvbW1vbiBUYXNrczwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2hhcHRlciBkZXNjcmliZXMgZnVuZGFtZW50YWwgcHJvY2VkdXJlcyBzdWNoIGFzIGNyZWF0aW5nIGxheWVycywKKyAgICAgICAgYWRkaW5nIG5ldyBzb2Z0d2FyZSBwYWNrYWdlcywgZXh0ZW5kaW5nIG9yIGN1c3RvbWl6aW5nIGltYWdlcywKKyAgICAgICAgcG9ydGluZyB3b3JrIHRvIG5ldyBoYXJkd2FyZSAoYWRkaW5nIGEgbmV3IG1hY2hpbmUpLCBhbmQgc28gZm9ydGguCisgICAgICAgIFlvdSB3aWxsIGZpbmQgdGhhdCB0aGUgcHJvY2VkdXJlcyBkb2N1bWVudGVkIGhlcmUgb2NjdXIgb2Z0ZW4gaW4gdGhlCisgICAgICAgIGRldmVsb3BtZW50IGN5Y2xlIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0LgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSJ1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMiPgorICAgICAgICA8dGl0bGU+VW5kZXJzdGFuZGluZyBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHN1cHBvcnRzIG9yZ2FuaXppbmcKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21ldGFkYXRhJz5NZXRhZGF0YTwvbGluaz4gaW50byBtdWx0aXBsZSBsYXllcnMuCisgICAgICAgICAgICBMYXllcnMgYWxsb3cgeW91IHRvIGlzb2xhdGUgZGlmZmVyZW50IHR5cGVzIG9mIGN1c3RvbWl6YXRpb25zIGZyb20KKyAgICAgICAgICAgIGVhY2ggb3RoZXIuCisgICAgICAgICAgICBZb3UgbWlnaHQgZmluZCBpdCB0ZW1wdGluZyB0byBrZWVwIGV2ZXJ5dGhpbmcgaW4gb25lIGxheWVyIHdoZW4KKyAgICAgICAgICAgIHdvcmtpbmcgb24gYSBzaW5nbGUgcHJvamVjdC4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBtb3JlIG1vZHVsYXIgeW91ciBNZXRhZGF0YSwgdGhlIGVhc2llcgorICAgICAgICAgICAgaXQgaXMgdG8gY29wZSB3aXRoIGZ1dHVyZSBjaGFuZ2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBpbGx1c3RyYXRlIGhvdyBsYXllcnMgYXJlIHVzZWQgdG8ga2VlcCB0aGluZ3MgbW9kdWxhciwgY29uc2lkZXIKKyAgICAgICAgICAgIG1hY2hpbmUgY3VzdG9taXphdGlvbnMuCisgICAgICAgICAgICBUaGVzZSB0eXBlcyBvZiBjdXN0b21pemF0aW9ucyB0eXBpY2FsbHkgcmVzaWRlIGluIGEgc3BlY2lhbCBsYXllciwKKyAgICAgICAgICAgIHJhdGhlciB0aGFuIGEgZ2VuZXJhbCBsYXllciwgY2FsbGVkIGEgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApCisgICAgICAgICAgICBMYXllci4KKyAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGUgbWFjaGluZSBjdXN0b21pemF0aW9ucyBzaG91bGQgYmUgaXNvbGF0ZWQgZnJvbQorICAgICAgICAgICAgcmVjaXBlcyBhbmQgTWV0YWRhdGEgdGhhdCBzdXBwb3J0IGEgbmV3IEdVSSBlbnZpcm9ubWVudCwKKyAgICAgICAgICAgIGZvciBleGFtcGxlLgorICAgICAgICAgICAgVGhpcyBzaXR1YXRpb24gZ2l2ZXMgeW91IGEgY291cGxlIG9mIGxheWVyczogb25lIGZvciB0aGUgbWFjaGluZQorICAgICAgICAgICAgY29uZmlndXJhdGlvbnMsIGFuZCBvbmUgZm9yIHRoZSBHVUkgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCwgaG93ZXZlciwgdGhhdCB0aGUgQlNQIGxheWVyIGNhbgorICAgICAgICAgICAgc3RpbGwgbWFrZSBtYWNoaW5lLXNwZWNpZmljIGFkZGl0aW9ucyB0byByZWNpcGVzIHdpdGhpbiB0aGUgR1VJCisgICAgICAgICAgICBlbnZpcm9ubWVudCBsYXllciB3aXRob3V0IHBvbGx1dGluZyB0aGUgR1VJIGxheWVyIGl0c2VsZgorICAgICAgICAgICAgd2l0aCB0aG9zZSBtYWNoaW5lLXNwZWNpZmljIGNoYW5nZXMuCisgICAgICAgICAgICBZb3UgY2FuIGFjY29tcGxpc2ggdGhpcyB0aHJvdWdoIGEgcmVjaXBlIHRoYXQgaXMgYSBCaXRCYWtlIGFwcGVuZAorICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikgZmlsZSwgd2hpY2ggaXMgZGVzY3JpYmVkIGxhdGVyCisgICAgICAgICAgICBpbiB0aGlzIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd5b2N0by1wcm9qZWN0LWxheWVycyc+CisgICAgICAgICAgICA8dGl0bGU+TGF5ZXJzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgY29udGFpbnMgYm90aCBnZW5lcmFsIGxheWVycyBhbmQgQlNQCisgICAgICAgICAgICAgICAgbGF5ZXJzIHJpZ2h0IG91dCBvZiB0aGUgYm94LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZWFzaWx5IGlkZW50aWZ5IGxheWVycyB0aGF0IHNoaXAgd2l0aCBhCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlIGluIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGJ5IHRoZWlyCisgICAgICAgICAgICAgICAgZm9sZGVyIG5hbWVzLgorICAgICAgICAgICAgICAgIEZvbGRlcnMgdGhhdCByZXByZXNlbnQgbGF5ZXJzIHR5cGljYWxseSBoYXZlIG5hbWVzIHRoYXQgYmVnaW4gd2l0aAorICAgICAgICAgICAgICAgIHRoZSBzdHJpbmcgPGZpbGVuYW1lPm1ldGEtPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEl0IGlzIG5vdCBhIHJlcXVpcmVtZW50IHRoYXQgYSBsYXllciBuYW1lIGJlZ2luIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIHByZWZpeCA8ZmlsZW5hbWU+bWV0YS08L2ZpbGVuYW1lPiwgYnV0IGl0IGlzIGEgY29tbW9ubHkKKyAgICAgICAgICAgICAgICAgICAgYWNjZXB0ZWQgc3RhbmRhcmQgaW4gdGhlIFlvY3RvIFByb2plY3QgY29tbXVuaXR5LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgd2hlbiB5b3Ugc2V0IHVwIHRoZSBTb3VyY2UgRGlyZWN0b3J5IHN0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICB5b3Ugd2lsbCBzZWUgc2V2ZXJhbCBsYXllcnM6CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1za2VsZXRvbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXNlbGZ0ZXN0PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgRWFjaCBvZiB0aGVzZSBmb2xkZXJzIHJlcHJlc2VudHMgYSBkaXN0aW5jdCBsYXllci4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYW5vdGhlciBleGFtcGxlLCBpZiB5b3Ugc2V0IHVwIGEgbG9jYWwgY29weSBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgYW5kIHRoZW4gZXhwbG9yZSB0aGUgZm9sZGVyIG9mIHRoYXQgZ2VuZXJhbCBsYXllciwKKyAgICAgICAgICAgICAgICB5b3Ugd2lsbCBkaXNjb3ZlciBtYW55IEludGVsLXNwZWNpZmljIEJTUCBsYXllcnMgaW5zaWRlLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEJTUCBsYXllcnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIExheWVyczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApCisgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmcteW91ci1vd24tbGF5ZXInPgorICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIFlvdXIgT3duIExheWVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQgaXMgdmVyeSBlYXN5IHRvIGNyZWF0ZSB5b3VyIG93biBsYXllcnMgdG8gdXNlIHdpdGggdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBzaGlwcyB3aXRoIHNjcmlwdHMgdGhhdCBzcGVlZCB1cCBjcmVhdGluZworICAgICAgICAgICAgICAgIGdlbmVyYWwgbGF5ZXJzIGFuZCBCU1AgbGF5ZXJzLgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIHN0ZXBzIHlvdSBwZXJmb3JtIGJ5IGhhbmQgdG8gY3JlYXRlCisgICAgICAgICAgICAgICAgYSBsYXllciBzbyB0aGF0IHlvdSBjYW4gYmV0dGVyIHVuZGVyc3RhbmQgdGhlbS4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxheWVyLWNyZWF0aW9uIHNjcmlwdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjY3JlYXRpbmctYS1uZXctYnNwLWxheWVyLXVzaW5nLXRoZS15b2N0by1ic3Atc2NyaXB0Jz5DcmVhdGluZyBhIE5ldyBCU1AgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWJzcCBTY3JpcHQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKQorICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmctYS1nZW5lcmFsLWxheWVyLXVzaW5nLXRoZS15b2N0by1sYXllci1zY3JpcHQnPkNyZWF0aW5nIGEgR2VuZXJhbCBMYXllciBVc2luZyB0aGUgeW9jdG8tbGF5ZXIgU2NyaXB0PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZ1cnRoZXIgZG93biBpbiB0aGlzIG1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIGdlbmVyYWwgc3RlcHMgdG8gY3JlYXRlIHlvdXIgbGF5ZXI6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNoZWNrIEV4aXN0aW5nIExheWVyczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQmVmb3JlIGNyZWF0aW5nIGEgbmV3IGxheWVyLCB5b3Ugc2hvdWxkIGJlIHN1cmUgc29tZW9uZQorICAgICAgICAgICAgICAgICAgICAgICAgaGFzIG5vdCBhbHJlYWR5IGNyZWF0ZWQgYSBsYXllciBjb250YWluaW5nIHRoZSBNZXRhZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4L2xheWVycy8nPjxmaWxlbmFtZT5PcGVuRW1iZWRkZWQgTWV0YWRhdGEgSW5kZXg8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYSBsaXN0IG9mIGxheWVycyBmcm9tIHRoZSBPcGVuRW1iZWRkZWQgY29tbXVuaXR5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIGEgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGUgdGhlIGRpcmVjdG9yeSBmb3IgeW91ciBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoaWxlIG5vdCBzdHJpY3RseSByZXF1aXJlZCwgcHJlcGVuZCB0aGUgbmFtZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRlciB3aXRoIHRoZSBzdHJpbmcgPGZpbGVuYW1lPm1ldGEtPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS1teWxheWVyCisgICAgIG1ldGEtR1VJX3h5egorICAgICBtZXRhLW15bWFjaGluZQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIGEgTGF5ZXIgQ29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgIEluc2lkZSB5b3VyIG5ldyBsYXllciBmb2xkZXIsIHlvdSBuZWVkIHRvIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICBJdCBpcyBlYXNpZXN0IHRvIHRha2UgYW4gZXhpc3RpbmcgbGF5ZXIgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGFuZCBjb3B5IHRoYXQgdG8geW91ciBsYXllcidzCisgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IGFuZCB0aGVuIG1vZGlmeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBhcyBuZWVkZWQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUKKyAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwL2NvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgZGVtb25zdHJhdGVzIHRoZSByZXF1aXJlZCBzeW50YXg6CisgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFkZCB0byBCQlBBVEgKKyAgICAgQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iCisKKyAgICAgIyBXZSBoYXZlIHJlY2lwZXMtKiBkaXJlY3RvcmllcywgYWRkIHRvIEJCRklMRVMKKyAgICAgQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisgICAgICAgICAgICAgICAgICR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmJhcHBlbmQiCisKKyAgICAgQkJGSUxFX0NPTExFQ1RJT05TICs9ICJ5b2N0b2JzcCIKKyAgICAgQkJGSUxFX1BBVFRFUk5feW9jdG9ic3AgPSAiXiR7TEFZRVJESVJ9LyIKKyAgICAgQkJGSUxFX1BSSU9SSVRZX3lvY3RvYnNwID0gIjUiCisgICAgIExBWUVSVkVSU0lPTl95b2N0b2JzcCA9ICIzIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkhlcmUgaXMgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgY29uZmlndXJhdGlvbiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyBkaXJlY3RvcnkgaXMgYXBwZW5kZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsIG5vbi1kaXN0cm8gbGF5ZXJzLCB3aGljaCBpbmNsdWRlIGFsbCBCU1AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVycywgYXJlIGV4cGVjdGVkIHRvIGFwcGVuZCB0aGUgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIHRoZSBvdGhlciBoYW5kLCBkaXN0cm8gbGF5ZXJzLCBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+LCBjYW4gY2hvb3NlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBlbmZvcmNlIHRoZWlyIG93biBwcmVjZWRlbmNlIG92ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9mIHRoYXQgc3ludGF4LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgcmVjaXBlcyBmb3IgdGhlIGxheWVycyBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkZJTEVTJz5CQkZJTEVTPC91bGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJCRklMRV9DT0xMRUNUSU9OUyc+QkJGSUxFX0NPTExFQ1RJT05TPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpcyB0aGVuIGFwcGVuZGVkIHdpdGggdGhlIGxheWVyIG5hbWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkZJTEVfUEFUVEVSTic+QkJGSUxFX1BBVFRFUk48L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIHNldCB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBtYXRjaCBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT4gaW50byBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MQVlFUkRJUic+TEFZRVJESVI8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHVzZWQgdG8gbWFrZSA8ZmlsZW5hbWU+QkJGSUxFX1BBVFRFUk48L2ZpbGVuYW1lPiBtYXRjaCB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyJ3MgcGF0aC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJGSUxFX1BSSU9SSVRZJz5CQkZJTEVfUFJJT1JJVFk8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRoZW4gYXNzaWducyBhIHByaW9yaXR5IHRvIHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbHlpbmcgcHJpb3JpdGllcyBpcyB1c2VmdWwgaW4gc2l0dWF0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSB0aGUgc2FtZSByZWNpcGUgbWlnaHQgYXBwZWFyIGluIG11bHRpcGxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVycyBhbmQgYWxsb3dzIHlvdSB0byBjaG9vc2UgdGhlIGxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgdGFrZXMgcHJlY2VkZW5jZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTEFZRVJWRVJTSU9OJz5MQVlFUlZFUlNJT048L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIG9wdGlvbmFsbHkgc3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgYXMgYSBzaW5nbGUgbnVtYmVyLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Tm90ZSB0aGUgdXNlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MQVlFUkRJUic+TEFZRVJESVI8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgd2hpY2ggZXhwYW5kcyB0byB0aGUgZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgICAgICBsYXllci48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaHJvdWdoIHRoZSB1c2Ugb2YgdGhlIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIEJpdEJha2UgbG9jYXRlcyBjbGFzcyBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlcXVpcmU8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCBCaXRCYWtlIHVzZXMgdGhlIGZpcnN0IGZpbGUgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyB0aGUgbmFtZSBmb3VuZCBpbiA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHdheSB0aGUgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaXMgdXNlZCBmb3IgYmluYXJpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCwgdGhlcmVmb3JlLCB0aGF0IHlvdSB1c2UgdW5pcXVlCisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBhbmQgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWVzIGluIHlvdXIgY3VzdG9tIGxheWVyLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFkZCBDb250ZW50OjwvZW1waGFzaXM+IERlcGVuZGluZworICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIHR5cGUgb2YgbGF5ZXIsIGFkZCB0aGUgY29udGVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBsYXllciBhZGRzIHN1cHBvcnQgZm9yIGEgbWFjaGluZSwgYWRkIHRoZSBtYWNoaW5lCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGluIGEgPGZpbGVuYW1lPmNvbmYvbWFjaGluZS88L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSB3aXRoaW4gdGhlIGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGxheWVyIGFkZHMgZGlzdHJvIHBvbGljeSwgYWRkIHRoZSBkaXN0cm8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gaW4gYSA8ZmlsZW5hbWU+Y29uZi9kaXN0cm8vPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgd2l0aGluIHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBsYXllciBpbnRyb2R1Y2VzIG5ldyByZWNpcGVzLCBwdXQgdGhlIHJlY2lwZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIGluIDxmaWxlbmFtZT5yZWNpcGVzLSo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3JpZXMgd2l0aGluIHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPkluIG9yZGVyIHRvIGJlIGNvbXBsaWFudCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgbGF5ZXIgbXVzdCBjb250YWluIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNic3AtZmlsZWxheW91dC1yZWFkbWUnPlJFQURNRSBmaWxlLjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYmVzdC1wcmFjdGljZXMtdG8tZm9sbG93LXdoZW4tY3JlYXRpbmctbGF5ZXJzJz4KKyAgICAgICAgICAgIDx0aXRsZT5CZXN0IFByYWN0aWNlcyB0byBGb2xsb3cgV2hlbiBDcmVhdGluZyBMYXllcnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBjcmVhdGUgbGF5ZXJzIHRoYXQgYXJlIGVhc2llciB0byBtYWludGFpbiBhbmQgdGhhdCB3aWxsCisgICAgICAgICAgICAgICAgbm90IGltcGFjdCBidWlsZHMgZm9yIG90aGVyIG1hY2hpbmVzLCB5b3Ugc2hvdWxkIGNvbnNpZGVyIHRoZQorICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdhdm9pZC1vdmVybGF5aW5nLWVudGlyZS1yZWNpcGVzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+QXZvaWQgIk92ZXJsYXlpbmciIEVudGlyZSBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBdm9pZCAib3ZlcmxheWluZyIgZW50aXJlIHJlY2lwZXMgZnJvbSBvdGhlciBsYXllcnMgaW4geW91cgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgZG8gbm90IGNvcHkgYW4gZW50aXJlIHJlY2lwZSBpbnRvIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIgYW5kIHRoZW4gbW9kaWZ5IGl0LgorICAgICAgICAgICAgICAgICAgICBSYXRoZXIsIHVzZSBhbiBhcHBlbmQgZmlsZSAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICB0byBvdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBvbmx5IHRob3NlIHBhcnRzIG9mIHRoZSBvcmlnaW5hbCByZWNpcGUgeW91IG5lZWQgdG8gbW9kaWZ5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2F2b2lkLWR1cGxpY2F0aW5nLWluY2x1ZGUtZmlsZXMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Bdm9pZCBEdXBsaWNhdGluZyBJbmNsdWRlIEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBdm9pZCBkdXBsaWNhdGluZyBpbmNsdWRlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBVc2UgYXBwZW5kIGZpbGVzICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgIGZvciBlYWNoIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICB0aGF0IHVzZXMgYW4gaW5jbHVkZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBPciwgaWYgeW91IGFyZSBpbnRyb2R1Y2luZyBhIG5ldyByZWNpcGUgdGhhdCByZXF1aXJlcworICAgICAgICAgICAgICAgICAgICB0aGUgaW5jbHVkZWQgZmlsZSwgdXNlIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBvcmlnaW5hbAorICAgICAgICAgICAgICAgICAgICBsYXllciBkaXJlY3RvcnkgdG8gcmVmZXIgdG8gdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlcXVpcmUgcmVjaXBlcy1jb3JlLzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4vPC9maWxlbmFtZT48cmVwbGFjZWFibGU+ZmlsZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIDxmaWxlbmFtZT5yZXF1aXJlIDwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZpbGU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSdyZSBmaW5kaW5nIHlvdSBoYXZlIHRvIG92ZXJsYXkgdGhlIGluY2x1ZGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgaXQgY291bGQgaW5kaWNhdGUgYSBkZWZpY2llbmN5IGluIHRoZSBpbmNsdWRlIGZpbGUgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIGxheWVyIHRvIHdoaWNoIGl0IG9yaWdpbmFsbHkgYmVsb25ncy4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgeW91IHNob3VsZCB0cnkgdG8gYWRkcmVzcyB0aGF0CisgICAgICAgICAgICAgICAgICAgIGRlZmljaWVuY3kgaW5zdGVhZCBvZiBvdmVybGF5aW5nIHRoZSBpbmNsdWRlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY291bGQgYWRkcmVzcyB0aGlzIGJ5IGdldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIG1haW50YWluZXIgb2YgdGhlIGluY2x1ZGUgZmlsZSB0byBhZGQgYSB2YXJpYWJsZSBvcgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgdG8gbWFrZSBpdCBlYXN5IHRvIG92ZXJyaWRlIHRoZSBwYXJ0cyBuZWVkaW5nCisgICAgICAgICAgICAgICAgICAgIHRvIGJlIG92ZXJyaWRkZW4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLXlvdXItbGF5ZXJzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+U3RydWN0dXJlIFlvdXIgTGF5ZXJzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQcm9wZXIgdXNlIG9mIG92ZXJyaWRlcyB3aXRoaW4gYXBwZW5kIGZpbGVzIGFuZCBwbGFjZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgb2YgbWFjaGluZS1zcGVjaWZpYyBmaWxlcyB3aXRoaW4geW91ciBsYXllciBjYW4gZW5zdXJlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgYSBidWlsZCBpcyBub3QgdXNpbmcgdGhlIHdyb25nIE1ldGFkYXRhIGFuZCBuZWdhdGl2ZWx5CisgICAgICAgICAgICAgICAgICAgIGltcGFjdGluZyBhIGJ1aWxkIGZvciBhIGRpZmZlcmVudCBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHNvbWUgZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1vZGlmeWluZyBWYXJpYWJsZXMgdG8gU3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgRGlmZmVyZW50IE1hY2hpbmU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3NlIHlvdSBoYXZlIGEgbGF5ZXIgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1vbmU8L2ZpbGVuYW1lPiB0aGF0IGFkZHMgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBidWlsZGluZyBtYWNoaW5lICJvbmUiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGRvIHNvLCB5b3UgdXNlIGFuIGFwcGVuZCBmaWxlIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2UtZmlsZXMuYmJhcHBlbmQ8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGUgYSBkZXBlbmRlbmN5IG9uICJmb28iIGJ5IGFsdGVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUEVORFMgPSAiZm9vIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVwZW5kZW5jeSBpcyBjcmVhdGVkIGR1cmluZyBhbnkgYnVpbGQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIHRoZSBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9uZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBtaWdodCBub3Qgd2FudCB0aGlzIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWxsIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBhcmUgYnVpbGRpbmcgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZSAidHdvIiBidXQgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSBoYXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb25lPC9maWxlbmFtZT4gbGF5ZXIgaW5jbHVkZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBidWlsZCwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2UtZmlsZXM8L2ZpbGVuYW1lPiBmb3IgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0d28iIHdpbGwgYWxzbyBoYXZlIHRoZSBkZXBlbmRlbmN5IG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvbzwvZmlsZW5hbWU+LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UbyBtYWtlIHN1cmUgeW91ciBjaGFuZ2VzIGFwcGx5IG9ubHkgd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5nIG1hY2hpbmUgIm9uZSIsIHVzZSBhIG1hY2hpbmUgb3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+IHN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUEVORFNfb25lID0gImZvbyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBmb2xsb3cgdGhlIHNhbWUgc3RyYXRlZ3kgd2hlbiB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4gb3BlcmF0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUEVORFNfYXBwZW5kX29uZSA9ICIgZm9vIgorICAgICBERVBFTkRTX3ByZXBlbmRfb25lID0gImZvbyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGFjdHVhbCBleGFtcGxlLCBoZXJlJ3MgYSBsaW5lIGZyb20gdGhlIHJlY2lwZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgT1Byb2ZpbGUgcHJvZmlsZXIsIHdoaWNoIGxpc3RzIGFuIGV4dHJhIGJ1aWxkLXRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IHdoZW4gYnVpbGRpbmcgc3BlY2lmaWNhbGx5IGZvciA2NC1iaXQgUG93ZXJQQzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUEVORFNfYXBwZW5kX3Bvd2VycGM2NCA9ICIgbGlicGZtNCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2b2lkaW5nICIrPSIgYW5kICI9KyIgYW5kIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4gb3BlcmF0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyByZWNvbW1lbmRlZCBhcyB3ZWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGxhY2UgTWFjaGluZS1TcGVjaWZpYyBGaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIE1hY2hpbmUtU3BlY2lmaWMgTG9jYXRpb25zOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgaGF2ZSBhIGJhc2UgcmVjaXBlLCBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2UtZmlsZXMuYmI8L2ZpbGVuYW1lPiwgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IHRvIGEgZmlsZSwgeW91IGNhbiB1c2UgYW4gYXBwZW5kIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBjYXVzZSB0aGUgYnVpbGQgdG8gdXNlIHlvdXIgb3duIHZlcnNpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYW4gYXBwZW5kIGZpbGUgaW4geW91ciBsYXllciBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9uZS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzLmJiYXBwZW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VsZCBleHRlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtCUE59OiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIGZvciBtYWNoaW5lICJvbmUiIHdpbGwgcGljayB1cCB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS1zcGVjaWZpYyBmaWxlIGFzIGxvbmcgYXMgeW91IGhhdmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9uZS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBhcmUgYnVpbGRpbmcgZm9yIGEgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluY2x1ZGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5tZXRhLW9uZTwvZmlsZW5hbWU+IGxheWVyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsb2NhdGlvbiBvZiB5b3VyIG1hY2hpbmUtc3BlY2lmaWMgZmlsZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBsb2NhdGlvbiB3aGVyZSB0aGF0IGZpbGUgaXMgZm91bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkcyBmb3IgYWxsIG1hY2hpbmVzIHdpbGwgYWxzbyB1c2UgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtc3BlY2lmaWMgZmlsZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBtYWtlIHN1cmUgdGhhdCBhIG1hY2hpbmUtc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGlzIHVzZWQgZm9yIGEgcGFydGljdWxhciBtYWNoaW5lIGJ5IHB1dHRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlsZSBpbiBhIHN1YmRpcmVjdG9yeSBzcGVjaWZpYyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCByYXRoZXIgdGhhbiBwbGFjaW5nIHRoZSBmaWxlIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb25lL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBzaG93biBhYm92ZSwgcHV0IGl0IGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb25lL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvb25lLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdCBvbmx5IGRvZXMgdGhpcyBtYWtlIHN1cmUgdGhlIGZpbGUgaXMgdXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBidWlsZGluZyBmb3IgbWFjaGluZSAib25lIiwgYnV0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHByb2Nlc3MgbG9jYXRlcyB0aGUgZmlsZSBtb3JlIHF1aWNrbHkuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkluIHN1bW1hcnksIHlvdSBuZWVkIHRvIHBsYWNlIGFsbCBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZWQgZnJvbSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBtYWNoaW5lLXNwZWNpZmljIHN1YmRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgaW4gb3JkZXIgdG8gcmVzdHJpY3QgdGhvc2UgZmlsZXMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljIGJ1aWxkcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nb3RoZXItcmVjb21tZW5kYXRpb25zJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+T3RoZXIgUmVjb21tZW5kYXRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXZSBhbHNvIHJlY29tbWVuZCB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0b3JlIGN1c3RvbSBsYXllcnMgaW4gYSBHaXQgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS08cmVwbGFjZWFibGU+bGF5ZXJfbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4gZm9ybWF0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsb25lIHRoZSByZXBvc2l0b3J5IGFsb25nc2lkZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyB0aGVzZSByZWNvbW1lbmRhdGlvbnMga2VlcHMgeW91ciBTb3VyY2UgRGlyZWN0b3J5IGFuZAorICAgICAgICAgICAgICAgICAgICAgaXRzIGNvbmZpZ3VyYXRpb24gZW50aXJlbHkgaW5zaWRlIHRoZSBZb2N0byBQcm9qZWN0J3MgY29yZQorICAgICAgICAgICAgICAgICAgICAgYmFzZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZW5hYmxpbmcteW91ci1sYXllcic+CisgICAgICAgICAgICA8dGl0bGU+RW5hYmxpbmcgWW91ciBMYXllcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlZm9yZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4gdXNlIHlvdXIgbmV3IGxheWVyLAorICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGVuYWJsZSBpdC4KKyAgICAgICAgICAgICAgICBUbyBlbmFibGUgeW91ciBsYXllciwgc2ltcGx5IGFkZCB5b3VyIGxheWVyJ3MgcGF0aCB0byB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJCTEFZRVJTJz5CQkxBWUVSUzwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLAorICAgICAgICAgICAgICAgIHdoaWNoIGlzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIGVuYWJsZSBhIGxheWVyIG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtbXlsYXllcjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTENPTkZfVkVSU0lPTiA9ICI2IgorCisgICAgIEJCUEFUSCA9ICIke1RPUERJUn0iCisgICAgIEJCRklMRVMgPz0gIiIKKworICAgICBCQkxBWUVSUyA/PSAiIFwKKyAgICAgICAkSE9NRS9wb2t5L21ldGEgXAorICAgICAgICRIT01FL3Bva3kvbWV0YS15b2N0byBcCisgICAgICAgJEhPTUUvcG9reS9tZXRhLXlvY3RvLWJzcCBcCisgICAgICAgJEhPTUUvcG9reS9tZXRhLW15bGF5ZXIgXAorICAgICAgICIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgcGFyc2VzIGVhY2ggPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICBhcyBzcGVjaWZpZWQgaW4gdGhlIDxmaWxlbmFtZT5CQkxBWUVSUzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgd2l0aGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICBEdXJpbmcgdGhlIHByb2Nlc3Npbmcgb2YgZWFjaAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCBCaXRCYWtlIGFkZHMgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlcywgY2xhc3NlcyBhbmQgY29uZmlndXJhdGlvbnMgY29udGFpbmVkIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIGxheWVyIHRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLWJiYXBwZW5kLWZpbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyAuYmJhcHBlbmQgRmlsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBSZWNpcGVzIHVzZWQgdG8gYXBwZW5kIE1ldGFkYXRhIHRvIG90aGVyIHJlY2lwZXMgYXJlIGNhbGxlZAorICAgICAgICAgICAgICAgIEJpdEJha2UgYXBwZW5kIGZpbGVzLgorICAgICAgICAgICAgICAgIEJpdEJha2UgYXBwZW5kIGZpbGVzIHVzZSB0aGUgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICB0eXBlIHN1ZmZpeCwgd2hpbGUgdGhlIGNvcnJlc3BvbmRpbmcgcmVjaXBlcyB0byB3aGljaCBNZXRhZGF0YQorICAgICAgICAgICAgICAgIGlzIGJlaW5nIGFwcGVuZGVkIHVzZSB0aGUgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGUgdHlwZQorICAgICAgICAgICAgICAgIHN1ZmZpeC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBhbGxvd3MgeW91ciBsYXllciB0byBtYWtlCisgICAgICAgICAgICAgICAgYWRkaXRpb25zIG9yIGNoYW5nZXMgdG8gdGhlIGNvbnRlbnQgb2YgYW5vdGhlciBsYXllcidzIHJlY2lwZQorICAgICAgICAgICAgICAgIHdpdGhvdXQgaGF2aW5nIHRvIGNvcHkgdGhlIG90aGVyIHJlY2lwZSBpbnRvIHlvdXIgbGF5ZXIuCisgICAgICAgICAgICAgICAgWW91ciA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSByZXNpZGVzIGluIHlvdXIgbGF5ZXIsCisgICAgICAgICAgICAgICAgd2hpbGUgdGhlIG1haW4gPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IHJlY2lwZSBmaWxlIHRvCisgICAgICAgICAgICAgICAgd2hpY2ggeW91IGFyZSBhcHBlbmRpbmcgTWV0YWRhdGEgcmVzaWRlcyBpbiBhIGRpZmZlcmVudCBsYXllci4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXBwZW5kIGZpbGVzIG11c3QgaGF2ZSB0aGUgc2FtZSByb290IG5hbWVzIGFzIHRoZWlyIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgICAgICByZWNpcGVzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgYXBwZW5kIGZpbGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c29tZWFwcF8mRElTVFJPOy5iYmFwcGVuZDwvZmlsZW5hbWU+IG11c3QgYXBwbHkgdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c29tZWFwcF8mRElTVFJPOy5iYjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoaXMgbWVhbnMgdGhlIG9yaWdpbmFsIHJlY2lwZSBhbmQgYXBwZW5kIGZpbGUgbmFtZXMgYXJlIHZlcnNpb24KKyAgICAgICAgICAgICAgICBudW1iZXItc3BlY2lmaWMuCisgICAgICAgICAgICAgICAgSWYgdGhlIGNvcnJlc3BvbmRpbmcgcmVjaXBlIGlzIHJlbmFtZWQgdG8gdXBkYXRlIHRvIGEgbmV3ZXIKKyAgICAgICAgICAgICAgICB2ZXJzaW9uLCB0aGUgY29ycmVzcG9uZGluZyA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBtdXN0CisgICAgICAgICAgICAgICAgYmUgcmVuYW1lZCAoYW5kIHBvc3NpYmx5IHVwZGF0ZWQpIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLCBCaXRCYWtlIGRpc3BsYXlzIGFuIGVycm9yIG9uIHN0YXJ0aW5nCisgICAgICAgICAgICAgICAgaWYgaXQgZGV0ZWN0cyBhIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIHRoYXQgZG9lcworICAgICAgICAgICAgICAgIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyByZWNpcGUgd2l0aCBhIG1hdGNoaW5nIG5hbWUuCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQl9EQU5HTElOR0FQUEVORFNfV0FSTk9OTFknPjxmaWxlbmFtZT5CQl9EQU5HTElOR0FQUEVORFNfV0FSTk9OTFk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBoYW5kbGUgdGhpcyBlcnJvci4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVpbmcgYWJsZSB0byBhcHBlbmQgaW5mb3JtYXRpb24gdG8gYW4gZXhpc3RpbmcgcmVjaXBlIG5vdCBvbmx5CisgICAgICAgICAgICAgICAgYXZvaWRzIGR1cGxpY2F0aW9uLCBidXQgYWxzbyBhdXRvbWF0aWNhbGx5IGFwcGxpZXMgcmVjaXBlCisgICAgICAgICAgICAgICAgY2hhbmdlcyBpbiBhIGRpZmZlcmVudCBsYXllciB0byB5b3VyIGxheWVyLgorICAgICAgICAgICAgICAgIElmIHlvdSB3ZXJlIGNvcHlpbmcgcmVjaXBlcywgeW91IHdvdWxkIGhhdmUgdG8gbWFudWFsbHkgbWVyZ2UKKyAgICAgICAgICAgICAgICBjaGFuZ2VzIGFzIHRoZXkgb2NjdXIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBtYWluIGZvcm1mYWN0b3IgcmVjaXBlIGFuZCBhCisgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBmb3JtZmFjdG9yIGFwcGVuZCBmaWxlIGJvdGggZnJvbSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBtYWluIGZvcm1mYWN0b3IgcmVjaXBlLCB3aGljaCBpcyBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb3JtZmFjdG9yXzAuMC5iYjwvZmlsZW5hbWU+IGFuZCBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICJtZXRhIiBsYXllciBhdAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3I8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNVTU1BUlkgPSAiRGV2aWNlIGZvcm1mYWN0b3IgaW5mb3JtYXRpb24iCisgICAgIFNFQ1RJT04gPSAiYmFzZSIKKyAgICAgTElDRU5TRSA9ICJNSVQiCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorICAgICBQUiA9ICJyNDUiCisKKyAgICAgU1JDX1VSSSA9ICJmaWxlOi8vY29uZmlnIGZpbGU6Ly9tYWNoY29uZmlnIgorICAgICBTID0gIiR7V09SS0RJUn0iCisKKyAgICAgUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKyAgICAgSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworICAgICBkb19pbnN0YWxsKCkgeworCSAgICAgIyBJbnN0YWxsIGZpbGUgb25seSBpZiBpdCBoYXMgY29udGVudHMKKyAgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2Zvcm1mYWN0b3IvCisgICAgICAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Zvcm1mYWN0b3IvCisJICAgICBpZiBbIC1zICIke1N9L21hY2hjb25maWciIF07IHRoZW4KKwkgICAgICAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vbWFjaGNvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9mb3JtZmFjdG9yLworCSAgICAgZmkKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiB0aGUgbWFpbiByZWNpcGUsIG5vdGUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCB0ZWxscyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGVyZSB0bworICAgICAgICAgICAgICAgIGZpbmQgZmlsZXMgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIHRoZSBhcHBlbmQgZmlsZSwgd2hpY2ggaXMgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9ybWZhY3Rvcl8wLjAuYmJhcHBlbmQ8L2ZpbGVuYW1lPiBhbmQgaXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICBFbWVubG93IEJTUCBMYXllciBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsL21ldGEtZW1lbmxvdzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBmaWxlIGlzIGluIDxmaWxlbmFtZT5yZWNpcGVzLWJzcC9mb3JtZmFjdG9yPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgYnVpbGQgc3lzdGVtIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBsb2NhdGUgZmlsZXMuCisgICAgICAgICAgICAgICAgVGhpcyBhcHBlbmQgZmlsZSBleHRlbmRzIHRoZSBsb2NhdGlvbnMgYnkgc2V0dGluZyB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIFNldHRpbmcgdGhpcyB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBpcyB0aGUgbW9zdCByZWxpYWJsZSBhbmQgcmVjb21tZW5kZWQgbWV0aG9kIGZvciBhZGRpbmcKKyAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyB0byB0aGUgc2VhcmNoIHBhdGggdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgdG8gZmluZCBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHN0YXRlbWVudCBpbiB0aGlzIGV4YW1wbGUgZXh0ZW5kcyB0aGUgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRISVNESVInPjxmaWxlbmFtZT5USElTRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LyR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHdoaWNoIHJlc29sdmVzIHRvIGEgZGlyZWN0b3J5IG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvcm1mYWN0b3I8L2ZpbGVuYW1lPiBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBpbiB3aGljaCB0aGUgYXBwZW5kIGZpbGUgcmVzaWRlcyAoaS5lLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsL21ldGEtZW1lbmxvdy9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3I8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGlzIGltcGxpZXMgdGhhdCB5b3UgbXVzdCBoYXZlIHRoZSBzdXBwb3J0aW5nIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSBzZXQgdXAgdGhhdCB3aWxsIGNvbnRhaW4gYW55IGZpbGVzIG9yIHBhdGNoZXMgeW91CisgICAgICAgICAgICAgICAgd2lsbCBiZSBpbmNsdWRpbmcgZnJvbSB0aGUgbGF5ZXIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzaW5nIHRoZSBpbW1lZGlhdGUgZXhwYW5zaW9uIGFzc2lnbm1lbnQgb3BlcmF0b3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Oj08L2ZpbGVuYW1lPiBpcyBpbXBvcnRhbnQgYmVjYXVzZSBvZiB0aGUgcmVmZXJlbmNlIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRISVNESVI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgdHJhaWxpbmcgY29sb24gY2hhcmFjdGVyIGlzIGltcG9ydGFudCBhcyBpdCBlbnN1cmVzIHRoYXQKKyAgICAgICAgICAgICAgICBpdGVtcyBpbiB0aGUgbGlzdCByZW1haW4gY29sb24tc2VwYXJhdGVkLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgYXV0b21hdGljYWxseSBkZWZpbmVzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRISVNESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgbmV2ZXIgc2V0IHRoaXMgdmFyaWFibGUgeW91cnNlbGYuCisgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyAiX3ByZXBlbmQiIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT4gZW5zdXJlcyB5b3VyIHBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgc2VhcmNoZWQgcHJpb3IgdG8gb3RoZXIgcGF0aHMgaW4gdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBBbHNvLCBub3QgYWxsIGFwcGVuZCBmaWxlcyBhZGQgZXh0cmEgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBNYW55IGFwcGVuZCBmaWxlcyBzaW1wbHkgZXhpc3QgdG8gYWRkIGJ1aWxkIG9wdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5zeXN0ZW1kPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB5b3VyIGFwcGVuZCBmaWxlIHdvdWxkIG5vdCBldmVuCisgICAgICAgICAgICAgICAgICAgICAgICB1c2UgdGhlIDxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncHJpb3JpdGl6aW5nLXlvdXItbGF5ZXInPgorICAgICAgICAgICAgPHRpdGxlPlByaW9yaXRpemluZyBZb3VyIExheWVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRWFjaCBsYXllciBpcyBhc3NpZ25lZCBhIHByaW9yaXR5IHZhbHVlLgorICAgICAgICAgICAgICAgIFByaW9yaXR5IHZhbHVlcyBjb250cm9sIHdoaWNoIGxheWVyIHRha2VzIHByZWNlZGVuY2UgaWYgdGhlcmUKKyAgICAgICAgICAgICAgICBhcmUgcmVjaXBlIGZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBtdWx0aXBsZSBsYXllcnMuCisgICAgICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB0aGUgcmVjaXBlIGZpbGUgZnJvbSB0aGUgbGF5ZXIgd2l0aCBhIGhpZ2hlcgorICAgICAgICAgICAgICAgIHByaW9yaXR5IG51bWJlciB0YWtlcyBwcmVjZWRlbmNlLgorICAgICAgICAgICAgICAgIFByaW9yaXR5IHZhbHVlcyBhbHNvIGFmZmVjdCB0aGUgb3JkZXIgaW4gd2hpY2ggbXVsdGlwbGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZXMgZm9yIHRoZSBzYW1lIHJlY2lwZSBhcmUKKyAgICAgICAgICAgICAgICBhcHBsaWVkLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZWl0aGVyIHNwZWNpZnkgdGhlIHByaW9yaXR5IG1hbnVhbGx5LCBvciBhbGxvdyB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gdG8gY2FsY3VsYXRlIGl0IGJhc2VkIG9uIHRoZSBsYXllcidzIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gc3BlY2lmeSB0aGUgbGF5ZXIncyBwcmlvcml0eSBtYW51YWxseSwgdXNlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkZJTEVfUFJJT1JJVFknPjxmaWxlbmFtZT5CQkZJTEVfUFJJT1JJVFk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQkZJTEVfUFJJT1JJVFlfbXlsYXllciA9ICIxIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgPHBhcmE+SXQgaXMgcG9zc2libGUgZm9yIGEgcmVjaXBlIHdpdGggYSBsb3dlciB2ZXJzaW9uIG51bWJlcgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGluIGEgbGF5ZXIgdGhhdCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdG8gdGFrZSBwcmVjZWRlbmNlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5BbHNvLCB0aGUgbGF5ZXIgcHJpb3JpdHkgZG9lcyBub3QgY3VycmVudGx5IGFmZmVjdCB0aGUKKyAgICAgICAgICAgICAgICBwcmVjZWRlbmNlIG9yZGVyIG9mIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICAgICAgRnV0dXJlIHZlcnNpb25zIG9mIEJpdEJha2UgbWlnaHQgYWRkcmVzcyB0aGlzLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtYW5hZ2luZy1sYXllcnMnPgorICAgICAgICAgICAgPHRpdGxlPk1hbmFnaW5nIExheWVyczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBCaXRCYWtlIGxheWVyIG1hbmFnZW1lbnQgdG9vbCB0byBwcm92aWRlIGEgdmlldworICAgICAgICAgICAgICAgIGludG8gdGhlIHN0cnVjdHVyZSBvZiByZWNpcGVzIGFjcm9zcyBhIG11bHRpLWxheWVyIHByb2plY3QuCisgICAgICAgICAgICAgICAgQmVpbmcgYWJsZSB0byBnZW5lcmF0ZSBvdXRwdXQgdGhhdCByZXBvcnRzIG9uIGNvbmZpZ3VyZWQgbGF5ZXJzCisgICAgICAgICAgICAgICAgd2l0aCB0aGVpciBwYXRocyBhbmQgcHJpb3JpdGllcyBhbmQgb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZXMgYW5kIHRoZWlyIGFwcGxpY2FibGUKKyAgICAgICAgICAgICAgICByZWNpcGVzIGNhbiBoZWxwIHRvIHJldmVhbCBwb3RlbnRpYWwgcHJvYmxlbXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGUgZm9sbG93aW5nIGZvcm0gd2hlbiBydW5uaW5nIHRoZSBsYXllciBtYW5hZ2VtZW50IHRvb2wuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UtbGF5ZXJzIDxyZXBsYWNlYWJsZT5jb21tYW5kPC9yZXBsYWNlYWJsZT4gWzxyZXBsYWNlYWJsZT5hcmd1bWVudHM8L3JlcGxhY2VhYmxlPl0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyB0aGUgYXZhaWxhYmxlIGNvbW1hbmRzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGVtcGhhc2lzPmhlbHA6PC9lbXBoYXNpcz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheXMgZ2VuZXJhbCBoZWxwIG9yIGhlbHAgb24gYSBzcGVjaWZpZWQgY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxlbXBoYXNpcz5zaG93LWxheWVyczo8L2VtcGhhc2lzPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBTaG93cyB0aGUgY3VycmVudCBjb25maWd1cmVkIGxheWVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxlbXBoYXNpcz5zaG93LXJlY2lwZXM6PC9lbXBoYXNpcz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgYXZhaWxhYmxlIHJlY2lwZXMgYW5kIHRoZSBsYXllcnMgdGhhdCBwcm92aWRlIHRoZW0uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48ZW1waGFzaXM+c2hvdy1vdmVybGF5ZWQ6PC9lbXBoYXNpcz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3ZlcmxheWVkIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBBIHJlY2lwZSBpcyBvdmVybGF5ZWQgd2hlbiBhIHJlY2lwZSB3aXRoIHRoZSBzYW1lIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0cyBpbiBhbm90aGVyIGxheWVyIHRoYXQgaGFzIGEgaGlnaGVyIGxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxlbXBoYXNpcz5zaG93LWFwcGVuZHM6PC9lbXBoYXNpcz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGVzIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBmaWxlcyB0byB3aGljaCB0aGV5IGFwcGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGVtcGhhc2lzPnNob3ctY3Jvc3MtZGVwZW5kczo8L2VtcGhhc2lzPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiByZWNpcGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyb3NzIGxheWVyIGJvdW5kYXJpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48ZW1waGFzaXM+YWRkLWxheWVyOjwvZW1waGFzaXM+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFkZHMgYSBsYXllciB0byA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGVtcGhhc2lzPnJlbW92ZS1sYXllcjo8L2VtcGhhc2lzPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVzIGEgbGF5ZXIgZnJvbSA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48ZW1waGFzaXM+ZmxhdHRlbjo8L2VtcGhhc2lzPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBGbGF0dGVucyB0aGUgbGF5ZXIgY29uZmlndXJhdGlvbiBpbnRvIGEgc2VwYXJhdGUgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICBGbGF0dGVuaW5nIHlvdXIgbGF5ZXIgY29uZmlndXJhdGlvbiBidWlsZHMgYSAiZmxhdHRlbmVkIgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIGFsbCBsYXllcnMsCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGFueSBvdmVybGF5ZWQgcmVjaXBlcyByZW1vdmVkIGFuZCBhbnkKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlcyBhcHBlbmRlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtaWdodCBoYXZlIHRvIHBlcmZvcm0gc29tZSBtYW51YWwgY2xlYW51cCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5lZCBsYXllciBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Tm9uLXJlY2lwZSBmaWxlcyAoc3VjaCBhcyBwYXRjaGVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgb3ZlcndyaXR0ZW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmbGF0dGVuIGNvbW1hbmQgc2hvd3MgYSB3YXJuaW5nIGZvciB0aGVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFueXRoaW5nIGJleW9uZCB0aGUgbm9ybWFsIGxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwIGhhcyBiZWVuIGFkZGVkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgdGhlIGxvd2VzdCBwcmlvcml0eSBsYXllcidzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sYXllci5jb25mPC9maWxlbmFtZT4gaXMgdXNlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk92ZXJyaWRkZW4gYW5kIGFwcGVuZGVkIGl0ZW1zIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGVzIG5lZWQgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5lZCB1cC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGNvbnRlbnRzIG9mIGVhY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGVuZCB1cCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhdHRlbmVkIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgdGhlcmUgYXJlIGFwcGVuZGVkIG9yIGNoYW5nZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdmFsdWVzLCB5b3UgbmVlZCB0byB0aWR5IHRoZXNlIHVwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdXJzZWxmLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUsIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS1sYXllcnM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIGFkZHMgdGhlIGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiMjIyMgYmJhcHBlbmRlZCAuLi48L2ZpbGVuYW1lPiBzbyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBrbm93IHdoZXJlIHRoZSBmb2xsb3dpbmcgbGluZXMgb3JpZ2luYXRlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIC4uLgorICAgICBERVNDUklQVElPTiA9ICJBIHVzZWZ1bCB1dGlsaXR5IgorICAgICAuLi4KKyAgICAgRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNvbWV0aGluZyIKKyAgICAgLi4uCisKKyAgICAgIyMjIyBiYmFwcGVuZGVkIGZyb20gbWV0YS1hbm90aGVybGF5ZXIgIyMjIworCisgICAgIERFU0NSSVBUSU9OID0gIkN1c3RvbWl6ZWQgdXRpbGl0eSIKKyAgICAgRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1zb21ldGhpbmdlbHNlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkZWFsbHksIHlvdSB3b3VsZCB0aWR5IHVwIHRoZXNlIHV0aWxpdGllcyBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIC4uLgorICAgICBERVNDUklQVElPTiA9ICJDdXN0b21pemVkIHV0aWxpdHkiCisgICAgIC4uLgorICAgICBFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc29tZXRoaW5nIC0tZW5hYmxlLXNvbWV0aGluZ2Vsc2UiCisgICAgIC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1hLWdlbmVyYWwtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWxheWVyLXNjcmlwdCc+CisgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgYSBHZW5lcmFsIExheWVyIFVzaW5nIHRoZSB5b2N0by1sYXllciBTY3JpcHQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnlvY3RvLWxheWVyPC9maWxlbmFtZT4gc2NyaXB0IHNpbXBsaWZpZXMKKyAgICAgICAgICAgICAgICBjcmVhdGluZyBhIG5ldyBnZW5lcmFsIGxheWVyLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gQlNQIGxheWVycywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIExheWVyczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFNwZWNpZmljIChCU1ApCisgICAgICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBtb2RlIG9mIHRoZSBzY3JpcHQncyBvcGVyYXRpb24gaXMgdG8gcHJvbXB0IHlvdSBmb3IKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZ2VuZXJhdGUgdGhlIGxheWVyOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgbGF5ZXIgcHJpb3JpdHkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZXRoZXIgb3Igbm90IHRvIGNyZWF0ZSBhIHNhbXBsZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZXRoZXIgb3Igbm90IHRvIGNyZWF0ZSBhIHNhbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+eW9jdG8tbGF5ZXIgY3JlYXRlPC9maWxlbmFtZT4gc3ViLWNvbW1hbmQKKyAgICAgICAgICAgICAgICB0byBjcmVhdGUgYSBuZXcgZ2VuZXJhbCBsYXllci4KKyAgICAgICAgICAgICAgICBJbiBpdHMgc2ltcGxlc3QgZm9ybSwgeW91IGNhbiBjcmVhdGUgYSBsYXllciBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB5b2N0by1sYXllciBjcmVhdGUgbXlsYXllcgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgZXhhbXBsZSBjcmVhdGVzIGEgbGF5ZXIgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1teWxheWVyPC9maWxlbmFtZT4gaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyB0aGUgPGZpbGVuYW1lPnlvY3RvLWxheWVyIGNyZWF0ZTwvZmlsZW5hbWU+IGNvbW1hbmQgcnVucywKKyAgICAgICAgICAgICAgICBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHByb21wdHMgYXBwZWFyIGluIGJyYWNrZXRzLgorICAgICAgICAgICAgICAgIFByZXNzaW5nIGVudGVyIHdpdGhvdXQgc3VwcGx5aW5nIGFueXRoaW5nIGZvciB0aGUgcHJvbXB0cworICAgICAgICAgICAgICAgIG9yIHByZXNzaW5nIGVudGVyIGFuZCBwcm92aWRpbmcgYW4gaW52YWxpZCByZXNwb25zZSBjYXVzZXMgdGhlCisgICAgICAgICAgICAgICAgc2NyaXB0IHRvIGFjY2VwdCB0aGUgZGVmYXVsdCB2YWx1ZS4KKyAgICAgICAgICAgICAgICBPbmNlIHRoZSBzY3JpcHQgY29tcGxldGVzLCB0aGUgbmV3IGxheWVyCisgICAgICAgICAgICAgICAgaXMgY3JlYXRlZCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUaGUgc2NyaXB0IG5hbWVzIHRoZSBsYXllciBieSBwcmVwZW5kaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtPC9maWxlbmFtZT4gdG8gdGhlIG5hbWUgeW91IHByb3ZpZGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE1pbmltYWxseSwgdGhlIHNjcmlwdCBjcmVhdGVzIHRoZSBmb2xsb3dpbmcgd2l0aGluIHRoZSBsYXllcjoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBsYXllcidzIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByb290IG5hbWUgZm9yIHRoZSBmaWxlIGlzIHRoZSBzYW1lIGFzIHRoZSByb290IG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgcHJvdmlkZWQgZm9yIHRoZSBsYXllciAoZS5nLgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5sYXllcjwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT1BZSU5HLk1JVDwvZmlsZW5hbWU+IGZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb3B5cmlnaHQgYW5kIHVzZSBub3RpY2UgZm9yIHRoZSBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRoZSA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgZmlsZSBkZXNjcmliaW5nIHRoZSBjb250ZW50cyBvZiB5b3VyIG5ldyBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgY2hvb3NlIHRvIGdlbmVyYXRlIGEgc2FtcGxlIHJlY2lwZSBmaWxlLCB0aGUgc2NyaXB0CisgICAgICAgICAgICAgICAgcHJvbXB0cyB5b3UgZm9yIHRoZSBuYW1lIGZvciB0aGUgcmVjaXBlIGFuZCB0aGVuIGNyZWF0ZXMgaXQKKyAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmxheWVyPC9yZXBsYWNlYWJsZT4vcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBjcmVhdGVzIGEgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGUgYW5kIGEKKyAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHdoaWNoIGNvbnRhaW5zIGEgc2FtcGxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmhlbGxvd29ybGQuYzwvZmlsZW5hbWU+IHNvdXJjZSBmaWxlLCBhbG9uZyB3aXRoCisgICAgICAgICAgICAgICAgYSBzYW1wbGUgcGF0Y2ggZmlsZS4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHByb3ZpZGUgYSByZWNpcGUgbmFtZSwgdGhlIHNjcmlwdCB1c2VzCisgICAgICAgICAgICAgICAgImV4YW1wbGUiLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgY2hvb3NlIHRvIGdlbmVyYXRlIGEgc2FtcGxlIGFwcGVuZCBmaWxlLCB0aGUgc2NyaXB0CisgICAgICAgICAgICAgICAgcHJvbXB0cyB5b3UgZm9yIHRoZSBuYW1lIGZvciB0aGUgZmlsZSBhbmQgdGhlbiBjcmVhdGVzIGl0CisgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5sYXllcjwvcmVwbGFjZWFibGU+L3JlY2lwZXMtZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBzY3JpcHQgY3JlYXRlcyBhIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGFuZCBhCisgICAgICAgICAgICAgICAgZGlyZWN0b3J5LCB3aGljaCBjb250YWlucyBhIHNhbXBsZSBwYXRjaCBmaWxlLgorICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgcHJvdmlkZSBhIHJlY2lwZSBuYW1lLCB0aGUgc2NyaXB0IHVzZXMKKyAgICAgICAgICAgICAgICAiZXhhbXBsZSIuCisgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBhbHNvIHByb21wdHMgeW91IGZvciB0aGUgdmVyc2lvbiBvZiB0aGUgYXBwZW5kIGZpbGUuCisgICAgICAgICAgICAgICAgVGhlIHZlcnNpb24gc2hvdWxkIG1hdGNoIHRoZSByZWNpcGUgdG8gd2hpY2ggdGhlIGFwcGVuZCBmaWxlCisgICAgICAgICAgICAgICAgaXMgYXNzb2NpYXRlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGVhc2llc3Qgd2F5IHRvIHNlZSBob3cgdGhlIDxmaWxlbmFtZT55b2N0by1sYXllcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgc2NyaXB0IHdvcmtzIGlzIHRvIGV4cGVyaW1lbnQgd2l0aCB0aGUgc2NyaXB0LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyByZWFkIHRoZSB1c2FnZSBpbmZvcm1hdGlvbiBieSBlbnRlcmluZyB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHlvY3RvLWxheWVyIGhlbHAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uY2UgeW91IGNyZWF0ZSB5b3VyIGdlbmVyYWwgbGF5ZXIsIHlvdSBtdXN0IGFkZCBpdCB0byB5b3VyCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB3aGVyZSBhIGxheWVyIG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtbXlsYXllcjwvZmlsZW5hbWU+IGlzIGFkZGVkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPSA/IiBcCisgICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEgXAorICAgICAgICAvdXNyL2xvY2FsL3NyYy95b2N0by9tZXRhLXlvY3RvIFwKKyAgICAgICAgL3Vzci9sb2NhbC9zcmMveW9jdG8vbWV0YS15b2N0by1ic3AgXAorICAgICAgICAvdXNyL2xvY2FsL3NyYy95b2N0by9tZXRhLW15bGF5ZXIgXAorICAgICAgICAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFkZGluZyB0aGUgbGF5ZXIgdG8gdGhpcyBmaWxlIGVuYWJsZXMgdGhlIGJ1aWxkIHN5c3RlbSB0bworICAgICAgICAgICAgICAgIGxvY2F0ZSB0aGUgbGF5ZXIgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZSc+CisgICAgICAgIDx0aXRsZT5DdXN0b21pemluZyBJbWFnZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBjdXN0b21pemUgaW1hZ2VzIHRvIHNhdGlzZnkgcGFydGljdWxhciByZXF1aXJlbWVudHMuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHNldmVyYWwgbWV0aG9kcyBhbmQgcHJvdmlkZXMgZ3VpZGVsaW5lcyBmb3IgZWFjaC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktZXh0ZW5kLWN1c3RvbWltYWdlLWxvY2FsY29uZic+CisgICAgICAgICAgICA8dGl0bGU+Q3VzdG9taXppbmcgSW1hZ2VzIFVzaW5nIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQcm9iYWJseSB0aGUgZWFzaWVzdCB3YXkgdG8gY3VzdG9taXplIGFuIGltYWdlIGlzIHRvIGFkZCBhCisgICAgICAgICAgICAgICAgcGFja2FnZSBieSB3YXkgb2YgdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgQmVjYXVzZSBpdCBpcyBsaW1pdGVkIHRvIGxvY2FsIHVzZSwgdGhpcyBtZXRob2QgZ2VuZXJhbGx5IG9ubHkKKyAgICAgICAgICAgICAgICBhbGxvd3MgeW91IHRvIGFkZCBwYWNrYWdlcyBhbmQgaXMgbm90IGFzIGZsZXhpYmxlIGFzIGNyZWF0aW5nCisgICAgICAgICAgICAgICAgeW91ciBvd24gY3VzdG9taXplZCBpbWFnZS4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBhZGQgcGFja2FnZXMgdXNpbmcgbG9jYWwgdmFyaWFibGVzIHRoaXMgd2F5LCB5b3UgbmVlZAorICAgICAgICAgICAgICAgIHRvIHJlYWxpemUgdGhhdCB0aGVzZSB2YXJpYWJsZSBjaGFuZ2VzIGFyZSBpbiBlZmZlY3QgZm9yIGV2ZXJ5CisgICAgICAgICAgICAgICAgYnVpbGQgYW5kIGNvbnNlcXVlbnRseSBhZmZlY3QgYWxsIGltYWdlcywgd2hpY2ggbWlnaHQgbm90CisgICAgICAgICAgICAgICAgYmUgd2hhdCB5b3UgcmVxdWlyZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gYWRkIGEgcGFja2FnZSB0byB5b3VyIGltYWdlIHVzaW5nIHRoZSBsb2NhbCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgZmlsZSwgdXNlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfSU5TVEFMTCc+SU1BR0VfSU5TVEFMTDwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB3aXRoIHRoZSA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+IG9wZXJhdG9yOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfSU5TVEFMTF9hcHBlbmQgPSAiIHN0cmFjZSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVXNlIG9mIHRoZSBzeW50YXggaXMgaW1wb3J0YW50IC0gc3BlY2lmaWNhbGx5LCB0aGUgc3BhY2UgYmV0d2VlbgorICAgICAgICAgICAgICAgIHRoZSBxdW90ZSBhbmQgdGhlIHBhY2thZ2UgbmFtZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RyYWNlPC9maWxlbmFtZT4gaW4gdGhpcyBleGFtcGxlLgorICAgICAgICAgICAgICAgIFRoaXMgc3BhY2UgaXMgcmVxdWlyZWQgc2luY2UgdGhlIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBvcGVyYXRvciBkb2VzIG5vdCBhZGQgdGhlIHNwYWNlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgeW91IG11c3QgdXNlIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4gaW5zdGVhZAorICAgICAgICAgICAgICAgIG9mIHRoZSA8ZmlsZW5hbWU+Kz08L2ZpbGVuYW1lPiBvcGVyYXRvciBpZiB5b3Ugd2FudCB0byBhdm9pZAorICAgICAgICAgICAgICAgIG9yZGVyaW5nIGlzc3Vlcy4KKyAgICAgICAgICAgICAgICBUaGUgcmVhc29uIGZvciB0aGlzIGlzIGJlY2F1c2UgZG9pbmcgc28gdW5jb25kaXRpb25hbGx5IGFwcGVuZHMKKyAgICAgICAgICAgICAgICB0byB0aGUgdmFyaWFibGUgYW5kIGF2b2lkcyBvcmRlcmluZyBwcm9ibGVtcyBkdWUgdG8gdGhlCisgICAgICAgICAgICAgICAgdmFyaWFibGUgYmVpbmcgc2V0IGluIGltYWdlIHJlY2lwZXMgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZXMgd2l0aCBvcGVyYXRvcnMgbGlrZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4/PTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFVzaW5nIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4gZW5zdXJlcyB0aGUgb3BlcmF0aW9uIHRha2VzCisgICAgICAgICAgICAgICAgYWZmZWN0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBzaG93biBpbiBpdHMgc2ltcGxlc3QgdXNlLAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMX2FwcGVuZDwvZmlsZW5hbWU+IGFmZmVjdHMgYWxsIGltYWdlcy4KKyAgICAgICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBleHRlbmQgdGhlIHN5bnRheCBzbyB0aGF0IHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGFwcGxpZXMgdG8gYSBzcGVjaWZpYyBpbWFnZSBvbmx5LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0lOU1RBTExfYXBwZW5kX3BuLWNvcmUtaW1hZ2UtbWluaW1hbCA9ICIgc3RyYWNlIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgYWRkcyA8ZmlsZW5hbWU+c3RyYWNlPC9maWxlbmFtZT4gdG8gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IGltYWdlIG9ubHkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWRkIHBhY2thZ2VzIHVzaW5nIGEgc2ltaWxhciBhcHByb2FjaCB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMJz5DT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEw8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgSWYgeW91IHVzZSB0aGlzIHZhcmlhYmxlLCBvbmx5CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtKjwvZmlsZW5hbWU+IGltYWdlcyBhcmUgYWZmZWN0ZWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZS1pbWFnZWZlYXR1cmVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5DdXN0b21pemluZyBJbWFnZXMgVXNpbmcgQ3VzdG9tIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciBtZXRob2QgZm9yIGN1c3RvbWl6aW5nIHlvdXIgaW1hZ2UgaXMgdG8gZW5hYmxlIG9yCisgICAgICAgICAgICAgICAgZGlzYWJsZSBoaWdoLWxldmVsIGltYWdlIGZlYXR1cmVzIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGFuZCA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhUUkFfSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgQWx0aG91Z2ggdGhlIGZ1bmN0aW9ucyBmb3IgYm90aCB2YXJpYWJsZXMgYXJlIG5lYXJseSBlcXVpdmFsZW50LAorICAgICAgICAgICAgICAgIGJlc3QgcHJhY3RpY2VzIGRpY3RhdGUgdXNpbmcgPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmcm9tIHdpdGhpbiBhIHJlY2lwZSBhbmQgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBmcm9tIHdpdGhpbgorICAgICAgICAgICAgICAgIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZlYXR1cmVzIHdvcmssIHRoZSBiZXN0IHJlZmVyZW5jZSBpcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvY29yZS1pbWFnZS5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhpcyBjbGFzcyBsaXN0cyBvdXQgdGhlIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIG9mIHdoaWNoIG1vc3QgbWFwIHRvIHBhY2thZ2UgZ3JvdXBzIHdoaWxlIHNvbWUsIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVidWctdHdlYWtzPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlYWQtb25seS1yb290ZnM8L2ZpbGVuYW1lPiwgcmVzb2x2ZSBhcyBnZW5lcmFsCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gc3VtbWFyeSwgdGhlIGZpbGUgbG9va3MgYXQgdGhlIGNvbnRlbnRzIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGFuZCB0aGVuIG1hcHMKKyAgICAgICAgICAgICAgICBvciBjb25maWd1cmVzIHRoZSBmZWF0dXJlIGFjY29yZGluZ2x5LgorICAgICAgICAgICAgICAgIEJhc2VkIG9uIHRoaXMgaW5mb3JtYXRpb24sIHRoZSBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgIGFkZHMgdGhlIGFwcHJvcHJpYXRlIHBhY2thZ2VzIG9yIGNvbmZpZ3VyYXRpb25zIHRvIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBFZmZlY3RpdmVseSwgeW91IGFyZSBlbmFibGluZyBleHRyYSBmZWF0dXJlcyBieSBleHRlbmRpbmcgdGhlCisgICAgICAgICAgICAgICAgY2xhc3Mgb3IgY3JlYXRpbmcgYSBjdXN0b20gY2xhc3MgZm9yIHVzZSB3aXRoIHNwZWNpYWxpemVkIGltYWdlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgZnJvbSB3aXRoaW4geW91ciBsb2NhbCBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgVXNpbmcgYSBzZXBhcmF0ZSBhcmVhIGZyb20gd2hpY2ggdG8gZW5hYmxlIGZlYXR1cmVzIHdpdGgKKyAgICAgICAgICAgICAgICB0aGlzIHZhcmlhYmxlIGhlbHBzIHlvdSBhdm9pZCBvdmVyd3JpdGluZyB0aGUgZmVhdHVyZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgaW1hZ2UgcmVjaXBlIHRoYXQgYXJlIGVuYWJsZWQgd2l0aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBvZiA8ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBpcyBhZGRlZAorICAgICAgICAgICAgICAgIHRvIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IHdpdGhpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGlsbHVzdHJhdGUgaG93IHlvdSBjYW4gdXNlIHRoZXNlIHZhcmlhYmxlcyB0byBtb2RpZnkgeW91cgorICAgICAgICAgICAgICAgIGltYWdlLCBjb25zaWRlciBhbiBleGFtcGxlIHRoYXQgc2VsZWN0cyB0aGUgU1NIIHNlcnZlci4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBzaGlwcyB3aXRoIHR3byBTU0ggc2VydmVycyB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgIHdpdGggeW91ciBpbWFnZXM6IERyb3BiZWFyIGFuZCBPcGVuU1NILgorICAgICAgICAgICAgICAgIERyb3BiZWFyIGlzIGEgbWluaW1hbCBTU0ggc2VydmVyIGFwcHJvcHJpYXRlIGZvcgorICAgICAgICAgICAgICAgIHJlc291cmNlLWNvbnN0cmFpbmVkIGVudmlyb25tZW50cywgd2hpbGUgT3BlblNTSCBpcyBhCisgICAgICAgICAgICAgICAgd2VsbC1rbm93biBzdGFuZGFyZCBTU0ggc2VydmVyIGltcGxlbWVudGF0aW9uLgorICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4gaW1hZ2UKKyAgICAgICAgICAgICAgICBpcyBjb25maWd1cmVkIHRvIHVzZSBEcm9wYmVhci4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbHNiPC9maWxlbmFtZT4gaW1hZ2VzIGJvdGgKKyAgICAgICAgICAgICAgICBpbmNsdWRlIE9wZW5TU0guCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBpbWFnZSBkb2VzIG5vdAorICAgICAgICAgICAgICAgIGNvbnRhaW4gYW4gU1NIIHNlcnZlci4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBjdXN0b21pemUgeW91ciBpbWFnZSBhbmQgY2hhbmdlIHRoZXNlIGRlZmF1bHRzLgorICAgICAgICAgICAgICAgIEVkaXQgdGhlIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgaW4geW91ciByZWNpcGUgb3IgdXNlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IGluIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgc28gdGhhdCBpdCBjb25maWd1cmVzIHRoZQorICAgICAgICAgICAgICAgIGltYWdlIHlvdSBhcmUgd29ya2luZyB3aXRoIHRvIGluY2x1ZGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3NoLXNlcnZlci1kcm9wYmVhcjwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNzaC1zZXJ2ZXItb3BlbnNzaDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBmb3IgYSBjb21wbGV0ZQorICAgICAgICAgICAgICAgIGxpc3Qgb2YgaW1hZ2UgZmVhdHVyZXMgdGhhdCBzaGlwIHdpdGggdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZS1jdXN0b21iYic+CisgICAgICAgICAgICA8dGl0bGU+Q3VzdG9taXppbmcgSW1hZ2VzIFVzaW5nIEN1c3RvbSAuYmIgRmlsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gY3VzdG9taXplIGFuIGltYWdlIGJ5IGNyZWF0aW5nIGEgY3VzdG9tIHJlY2lwZQorICAgICAgICAgICAgICAgIHRoYXQgZGVmaW5lcyBhZGRpdGlvbmFsIHNvZnR3YXJlIGFzIHBhcnQgb2YgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyB0aGUgZm9ybSBmb3IgdGhlIHR3byBsaW5lcyB5b3UgbmVlZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0lOU1RBTEwgPSAicGFja2FnZWdyb3VwLWNvcmUteDExLWJhc2UgcGFja2FnZTEgcGFja2FnZTIiCisKKyAgICAgaW5oZXJpdCBjb3JlLWltYWdlCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEZWZpbmluZyB0aGUgc29mdHdhcmUgdXNpbmcgYSBjdXN0b20gcmVjaXBlIGdpdmVzIHlvdSB0b3RhbAorICAgICAgICAgICAgICAgIGNvbnRyb2wgb3ZlciB0aGUgY29udGVudHMgb2YgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byB1c2UgdGhlIGNvcnJlY3QgbmFtZXMgb2YgcGFja2FnZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9JTlNUQUxMJz5JTUFHRV9JTlNUQUxMPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIFlvdSBtdXN0IHVzZSB0aGUgT3BlbkVtYmVkZGVkIG5vdGF0aW9uIGFuZCBub3QgdGhlIERlYmlhbiBub3RhdGlvbiBmb3IgdGhlIG5hbWVzCisgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmdsaWJjLWRldjwvZmlsZW5hbWU+IGluc3RlYWQgb2YgPGZpbGVuYW1lPmxpYmM2LWRldjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIG90aGVyIG1ldGhvZCBmb3IgY3JlYXRpbmcgYSBjdXN0b20gaW1hZ2UgaXMgdG8gYmFzZSBpdCBvbiBhbiBleGlzdGluZyBpbWFnZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGltYWdlIGJhc2VkIG9uIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGJ1dCBhZGQgdGhlIGFkZGl0aW9uYWwgcGFja2FnZSA8ZmlsZW5hbWU+c3RyYWNlPC9maWxlbmFtZT4gdG8gdGhlIGltYWdlLAorICAgICAgICAgICAgICAgIGNvcHkgdGhlIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLmJiPC9maWxlbmFtZT4gdG8gYQorICAgICAgICAgICAgICAgIG5ldyA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gYW5kIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gdGhlIGVuZCBvZiB0aGUgY29weToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0lOU1RBTEwgKz0gInN0cmFjZSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZS1jdXN0b210YXNrcyc+CisgICAgICAgICAgICA8dGl0bGU+Q3VzdG9taXppbmcgSW1hZ2VzIFVzaW5nIEN1c3RvbSBQYWNrYWdlIEdyb3VwczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBjb21wbGV4IGN1c3RvbSBpbWFnZXMsIHRoZSBiZXN0IGFwcHJvYWNoIGZvciBjdXN0b21pemluZworICAgICAgICAgICAgICAgIGFuIGltYWdlIGlzIHRvIGNyZWF0ZSBhIGN1c3RvbSBwYWNrYWdlIGdyb3VwIHJlY2lwZSB0aGF0IGlzCisgICAgICAgICAgICAgICAgdXNlZCB0byBidWlsZCB0aGUgaW1hZ2Ugb3IgaW1hZ2VzLgorICAgICAgICAgICAgICAgIEEgZ29vZCBleGFtcGxlIG9mIGEgcGFja2FnZSBncm91cCByZWNpcGUgaXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtYmFzZS5iYjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZXhhbWluZSB0aGF0IHJlY2lwZSwgeW91IHNlZSB0aGF0IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRVMnPlBBQ0tBR0VTPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGxpc3RzIHRoZSBwYWNrYWdlIGdyb3VwIHBhY2thZ2VzIHRvIHByb2R1Y2UuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5pbmhlcml0IHBhY2thZ2Vncm91cDwvZmlsZW5hbWU+IHN0YXRlbWVudAorICAgICAgICAgICAgICAgIHNldHMgYXBwcm9wcmlhdGUgZGVmYXVsdCB2YWx1ZXMgYW5kIGF1dG9tYXRpY2FsbHkgYWRkcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4sIDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tcHRlc3Q8L2ZpbGVuYW1lPiBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIGZvciBlYWNoCisgICAgICAgICAgICAgICAgcGFja2FnZSBzcGVjaWZpZWQgaW4gdGhlIDxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmluaGVyaXQgcGFja2FnZXM8L2ZpbGVuYW1lPiBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRlZCBuZWFyIHRoZSB0b3Agb2YgdGhlIHJlY2lwZSwgY2VydGFpbmx5IGJlZm9yZQorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT4gc3RhdGVtZW50LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIGVhY2ggcGFja2FnZSB5b3Ugc3BlY2lmeSBpbiA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUkRFUEVORFMnPlJERVBFTkRTPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUlJFQ09NTUVORFMnPlJSRUNPTU1FTkRTPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGVudHJpZXMgdG8gcHJvdmlkZSBhIGxpc3Qgb2YgcGFja2FnZXMgdGhlIHBhcmVudCB0YXNrIHBhY2thZ2UKKyAgICAgICAgICAgICAgICBzaG91bGQgY29udGFpbi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSBleGFtcGxlcyBvZiB0aGVzZSBmdXJ0aGVyIGRvd24gaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1iYXNlLmJiPC9maWxlbmFtZT4gcmVjaXBlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGEgc2hvcnQsIGZhYnJpY2F0ZWQgZXhhbXBsZSBzaG93aW5nIHRoZSBzYW1lIGJhc2ljCisgICAgICAgICAgICAgICAgcGllY2VzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVTQ1JJUFRJT04gPSAiTXkgQ3VzdG9tIFBhY2thZ2UgR3JvdXBzIgorCisgICAgIGluaGVyaXQgcGFja2FnZWdyb3VwCisKKyAgICAgUEFDS0FHRVMgPSAiXAorICAgICAgICAgcGFja2FnZWdyb3VwLWN1c3RvbS1hcHBzIFwKKyAgICAgICAgIHBhY2thZ2Vncm91cC1jdXN0b20tdG9vbHMgXAorICAgICAgICAgIgorCisgICAgIFJERVBFTkRTX3BhY2thZ2Vncm91cC1jdXN0b20tYXBwcyA9ICJcCisgICAgICAgICBkcm9wYmVhciBcCisgICAgICAgICBwb3J0bWFwIFwKKyAgICAgICAgIHBzcGxhc2giCisKKyAgICAgUkRFUEVORFNfcGFja2FnZWdyb3VwLWN1c3RvbS10b29scyA9ICJcCisgICAgICAgICBvcHJvZmlsZSBcCisgICAgICAgICBvcHJvZmlsZXVpLXNlcnZlciBcCisgICAgICAgICBsdHRuZy10b29scyIKKworICAgICBSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtY3VzdG9tLXRvb2xzID0gIlwKKyAgICAgICAgIGtlcm5lbC1tb2R1bGUtb3Byb2ZpbGUiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgdHdvIHBhY2thZ2UgZ3JvdXAgcGFja2FnZXMgYXJlIGNyZWF0ZWQgd2l0aCB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIHRoZWlyCisgICAgICAgICAgICAgICAgcmVjb21tZW5kZWQgcGFja2FnZSBkZXBlbmRlbmNpZXMgbGlzdGVkOiA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWN1c3RvbS1hcHBzPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY3VzdG9tLXRvb2xzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVG8gYnVpbGQgYW4gaW1hZ2UgdXNpbmcgdGhlc2UgcGFja2FnZSBncm91cCBwYWNrYWdlcywgeW91IG5lZWQgdG8gYWRkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jdXN0b20tYXBwczwvZmlsZW5hbWU+IGFuZC9vcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY3VzdG9tLXRvb2xzPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0lOU1RBTEwnPklNQUdFX0lOU1RBTEw8L3VsaW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEZvciBvdGhlciBmb3JtcyBvZiBpbWFnZSBkZXBlbmRlbmNpZXMgc2VlIHRoZSBvdGhlciBhcmVhcyBvZiB0aGlzIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZS1pbWFnZS1uYW1lJz4KKyAgICAgICAgICAgIDx0aXRsZT5DdXN0b21pemluZyBhbiBJbWFnZSBIb3N0bmFtZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBjb25maWd1cmVkIGhvc3RuYW1lIChpLmUuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvaG9zdG5hbWU8L2ZpbGVuYW1lPikgaW4gYW4gaW1hZ2UgaXMgdGhlCisgICAgICAgICAgICAgICAgc2FtZSBhcyB0aGUgbWFjaGluZSBuYW1lLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBlcXVhbHMgInFlbXV4ODYiLCB0aGUgY29uZmlndXJlZCBob3N0bmFtZSB3cml0dGVuIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvaG9zdG5hbWU8L2ZpbGVuYW1lPiBpcyAicWVtdXg4NiIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gY3VzdG9taXplIHRoaXMgbmFtZSBieSBhbHRlcmluZyB0aGUgdmFsdWUgb2YgdGhlCisgICAgICAgICAgICAgICAgImhvc3RuYW1lIiB2YXJpYWJsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzZS1maWxlczwvZmlsZW5hbWU+IHJlY2lwZSB1c2luZyBlaXRoZXIKKyAgICAgICAgICAgICAgICBhbiBhcHBlbmQgZmlsZSBvciBhIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBpbiBhbiBhcHBlbmQgZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGhvc3RuYW1lPSJteWhvc3RuYW1lIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGhvc3RuYW1lX3BuLWJhc2UtZmlsZXMgPSAibXlob3N0bmFtZSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIENoYW5naW5nIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSB2YXJpYWJsZSAiaG9zdG5hbWUiIGNhbiBiZQorICAgICAgICAgICAgICAgIHVzZWZ1bCBpbiBjZXJ0YWluIHNpdHVhdGlvbnMuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IG5lZWQgdG8gZG8gZXh0ZW5zaXZlIHRlc3Rpbmcgb24gYW4KKyAgICAgICAgICAgICAgICBpbWFnZSBhbmQgeW91IHdvdWxkIGxpa2UgdG8gZWFzaWx5IGlkZW50aWZ5IHRoZSBpbWFnZQorICAgICAgICAgICAgICAgIHVuZGVyIHRlc3QgZnJvbSBleGlzdGluZyBpbWFnZXMgd2l0aCB0eXBpY2FsIGRlZmF1bHQKKyAgICAgICAgICAgICAgICBob3N0bmFtZXMuCisgICAgICAgICAgICAgICAgSW4gdGhpcyBzaXR1YXRpb24sIHlvdSBjb3VsZCBjaGFuZ2UgdGhlIGRlZmF1bHQgaG9zdG5hbWUgdG8KKyAgICAgICAgICAgICAgICAidGVzdG1lIiwgd2hpY2ggcmVzdWx0cyBpbiBhbGwgdGhlIGltYWdlcyB1c2luZyB0aGUgbmFtZQorICAgICAgICAgICAgICAgICJ0ZXN0bWUiLgorICAgICAgICAgICAgICAgIE9uY2UgdGVzdGluZyBpcyBjb21wbGV0ZSBhbmQgeW91IGRvIG5vdCBuZWVkIHRvIHJlYnVpbGQgdGhlCisgICAgICAgICAgICAgICAgaW1hZ2UgZm9yIHRlc3QgYW55IGxvbmdlciwgeW91IGNhbiBlYXNpbHkgcmVzZXQgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICBob3N0bmFtZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciBwb2ludCBvZiBpbnRlcmVzdCBpcyB0aGF0IGlmIHlvdSB1bnNldCB0aGUgdmFyaWFibGUsCisgICAgICAgICAgICAgICAgdGhlIGltYWdlIHdpbGwgaGF2ZSBubyBkZWZhdWx0IGhvc3RuYW1lIGluIHRoZSBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHVuc2V0cyB0aGUgdmFyaWFibGUgaW4gYQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGhvc3RuYW1lX3BuLWJhc2UtZmlsZXMgPSAiIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBIYXZpbmcgbm8gZGVmYXVsdCBob3N0bmFtZSBpbiB0aGUgZmlsZXN5c3RlbSBpcyBzdWl0YWJsZSBmb3IKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudHMgdGhhdCB1c2UgZHluYW1pYyBob3N0bmFtZXMgc3VjaCBhcyB2aXJ0dWFsCisgICAgICAgICAgICAgICAgbWFjaGluZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS13cml0aW5nLWEtbmV3LXJlY2lwZSc+CisgICAgICAgIDx0aXRsZT5Xcml0aW5nIGEgTmV3IFJlY2lwZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSZWNpcGVzICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZXMpIGFyZSBmdW5kYW1lbnRhbCBjb21wb25lbnRzCisgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIEVhY2ggc29mdHdhcmUgY29tcG9uZW50IGJ1aWx0IGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICByZXF1aXJlcyBhIHJlY2lwZSB0byBkZWZpbmUgdGhlIGNvbXBvbmVudC4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIGNyZWF0ZSwgd3JpdGUsIGFuZCB0ZXN0IGEgbmV3CisgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdmFyaWFibGVzIHRoYXQgYXJlIHVzZWZ1bCBmb3IgcmVjaXBlcyBhbmQKKyAgICAgICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24gYWJvdXQgcmVjaXBlIG5hbWluZyBpc3N1ZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXZhcmxvY2FsaXR5LXJlY2lwZS1yZXF1aXJlZCc+UmVxdWlyZWQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1vdmVydmlldyc+CisgICAgICAgICAgICA8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyB0aGUgYmFzaWMgcHJvY2VzcyBmb3IgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgIG5ldyByZWNpcGUuCisgICAgICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGUgc2VjdGlvbiBwcm92aWRlcyBkZXRhaWxzIGZvciB0aGUgc3RlcHMuCisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3JlY2lwZS13b3JrZmxvdy5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI3aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtbG9jYXRlLW9yLWF1dG9tYXRpY2FsbHktY3JlYXRlLWEtYmFzZS1yZWNpcGUnPgorICAgICAgICAgICAgPHRpdGxlPkxvY2F0ZSBvciBBdXRvbWF0aWNhbGx5IENyZWF0ZSBhIEJhc2UgUmVjaXBlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHdheXMgd3JpdGUgYSByZWNpcGUgZnJvbSBzY3JhdGNoLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHR3byBjaG9pY2VzIGV4aXN0IHRoYXQgY2FuIGhlbHAgeW91IHF1aWNrbHkgZ2V0IGEKKyAgICAgICAgICAgICAgICBzdGFydCBvbiBhIG5ldyByZWNpcGU6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cmVjaXBldG9vbDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBBIHRvb2wgcHJvdmlkZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgdGhhdCBhdXRvbWF0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIGEgYmFzZSByZWNpcGUgYmFzZWQgb24gdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FeGlzdGluZyBSZWNpcGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGlvbiBhbmQgbW9kaWZpY2F0aW9uIG9mIGFuIGV4aXN0aW5nIHJlY2lwZSB0aGF0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICBzaW1pbGFyIGluIGZ1bmN0aW9uIHRvIHRoZSByZWNpcGUgeW91IG5lZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtY3JlYXRpbmctdGhlLWJhc2UtcmVjaXBlLXVzaW5nLXJlY2lwZXRvb2wnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyB0aGUgQmFzZSBSZWNpcGUgVXNpbmcgPGZpbGVuYW1lPnJlY2lwZXRvb2w8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXRvb2w8L2ZpbGVuYW1lPiBhdXRvbWF0ZXMgY3JlYXRpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgYSBiYXNlIHJlY2lwZSBnaXZlbiBhIHNldCBvZiBzb3VyY2UgY29kZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgQXMgbG9uZyBhcyB5b3UgY2FuIGV4dHJhY3Qgb3IgcG9pbnQgdG8gdGhlIHNvdXJjZSBmaWxlcywKKyAgICAgICAgICAgICAgICAgICAgdGhlIHRvb2wgd2lsbCBjb25zdHJ1Y3QgYSByZWNpcGUgYW5kIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIGFsbCBwcmUtYnVpbGQgaW5mb3JtYXRpb24gaW50byB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSBhbiBhcHBsaWNhdGlvbiB0aGF0IGJ1aWxkcworICAgICAgICAgICAgICAgICAgICB1c2luZyBBdXRvdG9vbHMuCisgICAgICAgICAgICAgICAgICAgIENyZWF0aW5nIHRoZSBiYXNlIHJlY2lwZSB1c2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBldG9vbDwvZmlsZW5hbWU+IHJlc3VsdHMgaW4gYSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBoYXMgdGhlIHByZS1idWlsZCBkZXBlbmRlbmNpZXMsIGxpY2Vuc2UgcmVxdWlyZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICBhbmQgY2hlY2tzdW1zIGNvbmZpZ3VyZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHJ1biB0aGUgdG9vbCwgeW91IGp1c3QgbmVlZCB0byBiZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgaGF2ZSBzb3VyY2VkIHRoZSBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnY8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+KS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgYmFzaWMgPGZpbGVuYW1lPnJlY2lwZXRvb2w8L2ZpbGVuYW1lPiBzeW50YXg6CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgUnVubmluZyA8ZmlsZW5hbWU+cmVjaXBldG9vbCAtaDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBldG9vbCBjcmVhdGUgLWg8L2ZpbGVuYW1lPiBwcm9kdWNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5dGhvbi1nZW5lcmF0ZWQgaGVscCwgd2hpY2ggcHJlc2VudGVkIGRpZmZlcmVudGx5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIHdoYXQgZm9sbG93cyBoZXJlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcmVjaXBldG9vbCAtaAorICAgICByZWNpcGV0b29sIGNyZWF0ZSBbLWhdCisgICAgIHJlY2lwZXRvb2wgWy1kXSBbLXFdIFstLWNvbG9yIGF1dG8gfCBhbHdheXMgfCBuZXZlciBdIGNyZWF0ZSAtbyA8cmVwbGFjZWFibGU+T1VURklMRTwvcmVwbGFjZWFibGU+IFstbV0gWy14IDxyZXBsYWNlYWJsZT5FWFRFUk5BTFNSQzwvcmVwbGFjZWFibGU+XSA8cmVwbGFjZWFibGU+c291cmNlPC9yZXBsYWNlYWJsZT4KKworICAgICAgICAgIC1kICAgICAgIEVuYWJsZXMgZGVidWcgb3V0cHV0LgorICAgICAgICAgIC1xICAgICAgIE91dHB1dHMgb25seSBlcnJvcnMgKHF1aWV0IG1vZGUpLgorICAgICAgICAgIC0tY29sb3IgIENvbG9yaXplcyB0aGUgb3V0cHV0IGF1dG9tYXRpY2FsbHksIGFsd2F5cywgb3IgbmV2ZXIuCisgICAgICAgICAgLWggICAgICAgRGlzcGxheXMgUHl0aG9uIGdlbmVyYXRlZCBzeW50YXggZm9yIHJlY2lwZXRvb2wuCisgICAgICAgICAgY3JlYXRlICAgQ2F1c2VzIHJlY2lwZXRvb2wgdG8gY3JlYXRlIGEgYmFzZSByZWNpcGUuICBUaGUgY3JlYXRlCisgICAgICAgICAgICAgICAgICAgY29tbWFuZCBpcyBmdXJ0aGVyIGRlZmluZWQgd2l0aCB0aGVzZSBvcHRpb25zOgorCisgICAgICAgICAgICAgICAgICAgLW8gPHJlcGxhY2VhYmxlPk9VVEZJTEU8L3JlcGxhY2VhYmxlPiAgICAgIFNwZWNpZmllcyB0aGUgZnVsbCBwYXRoIGFuZCBmaWxlbmFtZSBmb3IgdGhlIGdlbmVyYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgLW0gICAgICAgICAgICAgIENhdXNlcyB0aGUgcmVjaXBlIHRvIGJlIG1hY2hpbmUtc3BlY2lmaWMgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIChkZWZhdWx0KS4KKyAgICAgICAgICAgICAgICAgICAteCA8cmVwbGFjZWFibGU+RVhURVJOQUxTUkM8L3JlcGxhY2VhYmxlPiAgRmV0Y2hlcyBhbmQgZXh0cmFjdHMgc291cmNlIGZpbGVzIGZyb20gPHJlcGxhY2VhYmxlPnNvdXJjZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBwbGFjZXMgdGhlbSBpbiA8cmVwbGFjZWFibGU+RVhURVJOQUxTUkM8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnNvdXJjZTwvcmVwbGFjZWFibGU+IG11c3QgYmUgYSBVUkwuCisgICAgICAgICAgICAgICAgICAgLWggICAgICAgICAgICAgIERpc3BsYXlzIFB5dGhvbi1nZW5lcmF0ZWQgc3ludGF4IGZvciBjcmVhdGUuCisgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnNvdXJjZTwvcmVwbGFjZWFibGU+ICAgICAgICAgIFNwZWNpZmllcyB0aGUgc291cmNlIGNvZGUgb24gd2hpY2ggdG8gYmFzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFJ1bm5pbmcgPGZpbGVuYW1lPnJlY2lwZXRvb2wgY3JlYXRlIC1vPC9maWxlbmFtZT4mbmJzcDs8cmVwbGFjZWFibGU+T1VURklMRTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgdGhlIGJhc2UgcmVjaXBlIGFuZCBsb2NhdGVzIGl0IHByb3Blcmx5IGluIHRoZQorICAgICAgICAgICAgICAgICAgICBsYXllciB0aGF0IGNvbnRhaW5zIHlvdXIgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHNvbWUgc3ludGF4IGV4YW1wbGVzOgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyBzeW50YXggdG8gZ2VuZXJhdGUgYSByZWNpcGUgYmFzZWQgb24gPHJlcGxhY2VhYmxlPnNvdXJjZTwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgICAgICAgICBPbmNlIGdlbmVyYXRlZCwgdGhlIHJlY2lwZSByZXNpZGVzIGluIHRoZSBleGlzdGluZyBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgY29kZSBsYXllcjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByZWNpcGV0b29sIGNyZWF0ZSAtbyA8cmVwbGFjZWFibGU+T1VURklMRTwvcmVwbGFjZWFibGU+Jm5ic3A7PHJlcGxhY2VhYmxlPnNvdXJjZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgc3ludGF4IHRvIGdlbmVyYXRlIGEgcmVjaXBlIHVzaW5nIGNvZGUgdGhhdCB5b3UKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFjdCBmcm9tIDxyZXBsYWNlYWJsZT5zb3VyY2U8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4dHJhY3RlZCBjb2RlIGlzIHBsYWNlZCBpbiBpdHMgb3duIGxheWVyIGRlZmluZWQKKyAgICAgICAgICAgICAgICAgICAgYnkgPHJlcGxhY2VhYmxlPkVYVEVSTkFMU1JDPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcmVjaXBldG9vbCBjcmVhdGUgLW8gPHJlcGxhY2VhYmxlPk9VVEZJTEU8L3JlcGxhY2VhYmxlPiAteCA8cmVwbGFjZWFibGU+RVhURVJOQUxTUkM8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+c291cmNlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyBzeW50YXggdG8gZ2VuZXJhdGUgYSByZWNpcGUgYmFzZWQgb24gPHJlcGxhY2VhYmxlPnNvdXJjZTwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgICAgICAgICBUaGUgb3B0aW9ucyBkaXJlY3QgPGZpbGVuYW1lPnJlY2lwZXRvb2w8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgICAgICAgICBydW4gaW4gInF1aWV0IG1vZGUiIGFuZCB0byBnZW5lcmF0ZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIE9uY2UgZ2VuZXJhdGVkLCB0aGUgcmVjaXBlIHJlc2lkZXMgaW4gdGhlIGV4aXN0aW5nIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICBjb2RlIGxheWVyOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJlY2lwZXRvb2wgY3JlYXRlIC1vIDxyZXBsYWNlYWJsZT5PVVRGSUxFPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnNvdXJjZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWxvY2F0aW5nLWFuZC11c2luZy1hLXNpbWlsYXItcmVjaXBlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+TG9jYXRpbmcgYW5kIFVzaW5nIGEgU2ltaWxhciBSZWNpcGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlZm9yZSB3cml0aW5nIGEgcmVjaXBlIGZyb20gc2NyYXRjaCwgaXQgaXMgb2Z0ZW4gdXNlZnVsIHRvCisgICAgICAgICAgICAgICAgICAgIGRpc2NvdmVyIHdoZXRoZXIgc29tZW9uZSBlbHNlIGhhcyBhbHJlYWR5IHdyaXR0ZW4gb25lIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbWVldHMgKG9yIGNvbWVzIGNsb3NlIHRvIG1lZXRpbmcpIHlvdXIgbmVlZHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGFuZCBPcGVuRW1iZWRkZWQgY29tbXVuaXRpZXMgbWFpbnRhaW4gbWFueQorICAgICAgICAgICAgICAgICAgICByZWNpcGVzIHRoYXQgbWlnaHQgYmUgY2FuZGlkYXRlcyBmb3Igd2hhdCB5b3UgYXJlIGRvaW5nLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgYSBnb29kIGNlbnRyYWwgaW5kZXggb2YgdGhlc2UgcmVjaXBlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnJz5PcGVuRW1iZWRkZWQgbWV0YWRhdGEgaW5kZXg8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV29ya2luZyBmcm9tIGFuIGV4aXN0aW5nIHJlY2lwZSBvciBhIHNrZWxldG9uIHJlY2lwZSBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgYmVzdCB3YXkgdG8gZ2V0IHN0YXJ0ZWQuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgcG9pbnRzIG9uIGJvdGggbWV0aG9kczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TG9jYXRlIGFuZCBtb2RpZnkgYSByZWNpcGUgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGNsb3NlIHRvIHdoYXQgeW91IHdhbnQgdG8gZG86PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCB3b3JrcyB3aGVuIHlvdSBhcmUgZmFtaWxpYXIgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IHJlY2lwZSBzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWV0aG9kIGRvZXMgbm90IHdvcmsgc28gd2VsbCBmb3IgdGhvc2UgbmV3IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3Qgb3Igd3JpdGluZyByZWNpcGVzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Tb21lIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1ldGhvZCBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyBhIHJlY2lwZSB0aGF0IGhhcyBhcmVhcyB0b3RhbGx5IHVucmVsYXRlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoYXQgeW91IGFyZSB0cnlpbmcgdG8gYWNjb21wbGlzaCB3aXRoIHlvdXIgcmVjaXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCByZWNvZ25pemluZyBhcmVhcyBvZiB0aGUgcmVjaXBlIHRoYXQgeW91IG1pZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSB0byBhZGQgZnJvbSBzY3JhdGNoLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsIHRoZXNlIHJpc2tzIHN0ZW0gZnJvbSB1bmZhbWlsaWFyaXR5IHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcgcmVjaXBlIHNwYWNlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2UgYW5kIG1vZGlmeSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tlbGV0b24gcmVjaXBlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBkbyBub3Qgd2FudCB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBldG9vbDwvZmlsZW5hbWU+IGFuZCB5b3UgY2Fubm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZCBhbiBleGlzdGluZyByZWNpcGUgdGhhdCBpcyBjbG9zZSB0byBtZWV0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBuZWVkcywgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlIHRoZSBmdW5kYW1lbnRhbCBhcmVhcyBvZiBhIG5ldyByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVNDUklQVElPTiA9ICIiCisgICAgIEhPTUVQQUdFID0gIiIKKyAgICAgTElDRU5TRSA9ICIiCisgICAgIFNFQ1RJT04gPSAiIgorICAgICBERVBFTkRTID0gIiIKKyAgICAgTElDX0ZJTEVTX0NIS1NVTSA9ICIiCisKKyAgICAgU1JDX1VSSSA9ICIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1zdG9yaW5nLWFuZC1uYW1pbmctdGhlLXJlY2lwZSc+CisgICAgICAgICAgICA8dGl0bGU+U3RvcmluZyBhbmQgTmFtaW5nIHRoZSBSZWNpcGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHlvdXIgYmFzZSByZWNpcGUsIHlvdSBzaG91bGQgcHV0IGl0IGluIHlvdXIKKyAgICAgICAgICAgICAgICBvd24gbGF5ZXIgYW5kIG5hbWUgaXQgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgICAgICAgICBMb2NhdGluZyBpdCBjb3JyZWN0bHkgZW5zdXJlcyB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICBzeXN0ZW0gY2FuIGZpbmQgaXQgd2hlbiB5b3UgdXNlIEJpdEJha2UgdG8gcHJvY2VzcyB0aGUKKyAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdG9yaW5nIFlvdXIgUmVjaXBlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGxvY2F0ZXMgeW91ciByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgbGF5ZXIncyA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkZJTEVTJz48ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgc2V0cyB1cCBhIHBhdGggZnJvbSB3aGljaCB0aGUgYnVpbGQgc3lzdGVtIGNhbgorICAgICAgICAgICAgICAgICAgICBsb2NhdGUgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgdHlwaWNhbCB1c2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisgICAgICAgICAgICAgICAgICR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmJhcHBlbmQiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgbmVlZCB0byBiZSBzdXJlIHlvdSBsb2NhdGUgeW91ciBuZXcgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGluc2lkZSB5b3VyIGxheWVyIHN1Y2ggdGhhdCBpdCBjYW4gYmUgZm91bmQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgbGF5ZXJzIGFyZQorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nIGFuZCBDcmVhdGluZyBMYXllcnM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TmFtaW5nIFlvdXIgUmVjaXBlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IG5hbWUgeW91ciByZWNpcGUsIHlvdSBuZWVkIHRvIGZvbGxvdyB0aGlzIG5hbWluZworICAgICAgICAgICAgICAgICAgICBjb252ZW50aW9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5iYXNlbmFtZTwvcmVwbGFjZWFibGU+XzxyZXBsYWNlYWJsZT52ZXJzaW9uPC9yZXBsYWNlYWJsZT4uYmIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBVc2UgbG93ZXItY2FzZWQgY2hhcmFjdGVycyBhbmQgZG8gbm90IGluY2x1ZGUgdGhlIHJlc2VydmVkCisgICAgICAgICAgICAgICAgICAgIHN1ZmZpeGVzIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tY3Jvc3M8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPi1pbml0aWFsPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4gY2FzdWFsbHkgKGkuZS4gZG8gbm90IHVzZSB0aGVtCisgICAgICAgICAgICAgICAgICAgIGFzIHBhcnQgb2YgeW91ciByZWNpcGUgbmFtZSB1bmxlc3MgdGhlIHN0cmluZyBhcHBsaWVzKS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBjdXBzXzEuNy4wLmJiCisgICAgIGdhd2tfNC4wLjIuYmIKKyAgICAgaXJzc2lfMC44LjE2LXJjMS5iYgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1bmRlcnN0YW5kaW5nLXJlY2lwZS1zeW50YXgnPgorICAgICAgICAgICAgPHRpdGxlPlVuZGVyc3RhbmRpbmcgUmVjaXBlIFN5bnRheDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVuZGVyc3RhbmRpbmcgcmVjaXBlIGZpbGUgc3ludGF4IGlzIGltcG9ydGFudCBmb3IKKyAgICAgICAgICAgICAgICB3cml0aW5nIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IG92ZXJ2aWV3cyB0aGUgYmFzaWMgaXRlbXMgdGhhdCBtYWtlIHVwIGEKKyAgICAgICAgICAgICAgICBCaXRCYWtlIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGNvbXBsZXRlIEJpdEJha2Ugc3ludGF4IGRlc2NyaXB0aW9ucywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2JpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGEnPlN5bnRheCBhbmQgT3BlcmF0b3JzPC91bGluaz4iCisgICAgICAgICAgICAgICAgY2hhcHRlciBvZiB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlZhcmlhYmxlIEFzc2lnbm1lbnRzIGFuZCBNYW5pcHVsYXRpb25zOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSBhc3NpZ25tZW50cyBhbGxvdyBhIHZhbHVlIHRvIGJlIGFzc2lnbmVkIHRvIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGFzc2lnbm1lbnQgY2FuIGJlIHN0YXRpYyB0ZXh0IG9yIG1pZ2h0IGluY2x1ZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb250ZW50cyBvZiBvdGhlciB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiBhZGRpdGlvbiB0byB0aGUgYXNzaWdubWVudCwgYXBwZW5kaW5nIGFuZCBwcmVwZW5kaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zIGFyZSBhbHNvIHN1cHBvcnRlZC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3Mgc29tZSBvZiB0aGUgd2F5cworICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiB1c2UgdmFyaWFibGVzIGluIHJlY2lwZXM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFMgPSAiJHtXT1JLRElSfS9wb3N0Zml4LSR7UFZ9IgorICAgICBDRkxBR1MgKz0gIi1ETk9fQVNNIgorICAgICBTUkNfVVJJX2FwcGVuZCA9ICIgZmlsZTovL2ZpeHVwLnBhdGNoIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RnVuY3Rpb25zOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbnMgcHJvdmlkZSBhIHNlcmllcyBvZiBhY3Rpb25zIHRvIGJlIHBlcmZvcm1lZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSB1c3VhbGx5IHVzZSBmdW5jdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIG9mIGEgdGFzayBmdW5jdGlvbiBvciB0byBjb21wbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICBhIGRlZmF1bHQgZnVuY3Rpb24gKGkuZS4gYXBwZW5kIG9yIHByZXBlbmQgdG8gYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIGZ1bmN0aW9uKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkIGZ1bmN0aW9ucyB1c2UgPGZpbGVuYW1lPnNoPC9maWxlbmFtZT4gc2hlbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheCwgYWx0aG91Z2ggYWNjZXNzIHRvIE9wZW5FbWJlZGRlZCB2YXJpYWJsZXMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbCBtZXRob2RzIGFyZSBhbHNvIGF2YWlsYWJsZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgZnVuY3Rpb24gZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZWQ8L2ZpbGVuYW1lPiByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2luc3RhbGwgKCkgeworICAgICAgICAgYXV0b3Rvb2xzX2RvX2luc3RhbGwKKyAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisgICAgICAgICBtdiAke0R9JHtiaW5kaXJ9L3NlZCAke0R9JHtiYXNlX2JpbmRpcn0vc2VkCisgICAgICAgICBybWRpciAke0R9JHtiaW5kaXJ9LworICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGltcGxlbWVudCBuZXcgZnVuY3Rpb25zIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBjYWxsZWQgYmV0d2VlbiBleGlzdGluZyB0YXNrcyBhcyBsb25nIGFzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGZ1bmN0aW9ucyBhcmUgbm90IHJlcGxhY2luZyBvciBjb21wbGVtZW50aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBmdW5jdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGltcGxlbWVudCBmdW5jdGlvbnMgaW4gUHl0aG9uCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHNoZWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgQm90aCBvZiB0aGVzZSBvcHRpb25zIGFyZSBub3Qgc2VlbiBpbiB0aGUgbWFqb3JpdHkgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+S2V5d29yZHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgcmVjaXBlcyB1c2Ugb25seSBhIGZldyBrZXl3b3Jkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSB1c2Uga2V5d29yZHMgdG8gaW5jbHVkZSBjb21tb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9ucyAoPGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiksIGxvYWQgcGFydHMKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIGEgcmVjaXBlIGZyb20gb3RoZXIgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlcXVpcmU8L2ZpbGVuYW1lPikgYW5kIGV4cG9ydCB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBlbnZpcm9ubWVudCAoPGZpbGVuYW1lPmV4cG9ydDwvZmlsZW5hbWU+KS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgdGhlIHVzZSBvZiBzb21lIG9mCisgICAgICAgICAgICAgICAgICAgICAgICB0aGVzZSBrZXl3b3JkczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZXhwb3J0IFBPU1RDT05GID0gIiR7U1RBR0lOR19CSU5ESVJ9L3Bvc3Rjb25mIgorICAgICBpbmhlcml0IGF1dG9jb25mCisgICAgIHJlcXVpcmUgb3RoZXJmaWxlLmluYworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29tbWVudHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFueSBsaW5lcyB0aGF0IGJlZ2luIHdpdGggdGhlIGhhc2ggY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPiM8L2ZpbGVuYW1lPikgYXJlIHRyZWF0ZWQgYXMgY29tbWVudCBsaW5lcworICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGFyZSBpZ25vcmVkOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIFRoaXMgaXMgYSBjb21tZW50CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBuZXh0IGxpc3Qgc3VtbWFyaXplcyB0aGUgbW9zdCBpbXBvcnRhbnQgYW5kIG1vc3QgY29tbW9ubHkKKyAgICAgICAgICAgICAgICB1c2VkIHBhcnRzIG9mIHRoZSByZWNpcGUgc3ludGF4LgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZXNlIHBhcnRzIG9mIHRoZSBzeW50YXgsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICByZWZlcmVuY2UgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNiaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhJz5TeW50YXggYW5kIE9wZXJhdG9yczwvdWxpbms+CisgICAgICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxpbmUgQ29udGludWF0aW9uOiA8ZmlsZW5hbWU+XDwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBiYWNrd2FyZCBzbGFzaCAoPGZpbGVuYW1lPlw8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciB0byBzcGxpdCBhIHN0YXRlbWVudCBvdmVyIG11bHRpcGxlIGxpbmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgUGxhY2UgdGhlIHNsYXNoIGNoYXJhY3RlciBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRvIGJlIGNvbnRpbnVlZCBvbiB0aGUgbmV4dCBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWQVIgPSAiQSByZWFsbHkgbG9uZyBcCisgICAgICAgICAgICBsaW5lIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbm5vdCBoYXZlIGFueSBjaGFyYWN0ZXJzIGluY2x1ZGluZyBzcGFjZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB0YWJzIGFmdGVyIHRoZSBzbGFzaCBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2luZyBWYXJpYWJsZXM6IDxmaWxlbmFtZT4key4uLn08L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPiR7PHJlcGxhY2VhYmxlPnZhcm5hbWU8L3JlcGxhY2VhYmxlPn08L2ZpbGVuYW1lPiBzeW50YXggdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VzcyB0aGUgY29udGVudHMgb2YgYSB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbGlicG5nL3psaWItJHtQVn0udGFyLmd6IgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UXVvdGUgQWxsIEFzc2lnbm1lbnRzOiA8ZmlsZW5hbWU+IjxyZXBsYWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+IjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIGRvdWJsZSBxdW90ZXMgYXJvdW5kIHRoZSB2YWx1ZSBpbiBhbGwgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWQVIxID0gIiR7T1RIRVJWQVJ9IgorICAgICBWQVIyID0gIlRoZSB2ZXJzaW9uIGlzICR7UFZ9IgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29uZGl0aW9uYWwgQXNzaWdubWVudDogPGZpbGVuYW1lPj89PC9maWxlbmFtZT48L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb25hbCBhc3NpZ25tZW50IGlzIHVzZWQgdG8gYXNzaWduIGEgdmFsdWUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGEgdmFyaWFibGUsIGJ1dCBvbmx5IHdoZW4gdGhlIHZhcmlhYmxlIGlzIGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICAgICAgdW5zZXQuCisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIHF1ZXN0aW9uIG1hcmsgZm9sbG93ZWQgYnkgdGhlIGVxdWFsIHNpZ24KKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Pz08L2ZpbGVuYW1lPikgdG8gbWFrZSBhICJzb2Z0IiBhc3NpZ25tZW50CisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGZvciBjb25kaXRpb25hbCBhc3NpZ25tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCAic29mdCIgYXNzaWdubWVudHMgYXJlIHVzZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgZm9yIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBhcmUgYWxsb3dlZCB0byBjb21lIHRocm91Z2ggZnJvbSB0aGUgZXh0ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SGVyZSBpcyBhbiBleGFtcGxlIHdoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VkFSMTwvZmlsZW5hbWU+IGlzIHNldCB0byAiTmV3IHZhbHVlIiBpZgorICAgICAgICAgICAgICAgICAgICAgICAgaXQgaXMgY3VycmVudGx5IGVtcHR5LgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgPGZpbGVuYW1lPlZBUjE8L2ZpbGVuYW1lPiBoYXMgYWxyZWFkeSBiZWVuCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQsIGl0IHJlbWFpbnMgdW5jaGFuZ2VkOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWQVIxID89ICJOZXcgdmFsdWUiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIG5leHQgZXhhbXBsZSwgPGZpbGVuYW1lPlZBUjE8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgaXMgbGVmdCB3aXRoIHRoZSB2YWx1ZSAiT3JpZ2luYWwgdmFsdWUiOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWQVIxID0gIk9yaWdpbmFsIHZhbHVlIgorICAgICBWQVIxID89ICJOZXcgdmFsdWUiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BcHBlbmRpbmc6IDxmaWxlbmFtZT4rPTwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBwbHVzIGNoYXJhY3RlciBmb2xsb3dlZCBieSB0aGUgZXF1YWxzIHNpZ24KKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Kz08L2ZpbGVuYW1lPikgdG8gYXBwZW5kIHZhbHVlcyB0byBleGlzdGluZworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcGVyYXRvciBhZGRzIGEgc3BhY2UgYmV0d2VlbiB0aGUgZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50IG9mIHRoZSB2YXJpYWJsZSBhbmQgdGhlIG5ldyBjb250ZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSArPSAiZmlsZTovL2ZpeC1tYWtlZmlsZS5wYXRjaCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByZXBlbmRpbmc6IDxmaWxlbmFtZT49KzwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBlcXVhbHMgc2lnbiBmb2xsb3dlZCBieSB0aGUgcGx1cyBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+PSs8L2ZpbGVuYW1lPikgdG8gcHJlcGVuZCB2YWx1ZXMgdG8gZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3BlcmF0b3IgYWRkcyBhIHNwYWNlIGJldHdlZW4gdGhlIG5ldyBjb250ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBleGlzdGluZyBjb250ZW50IG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5IZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFZBUiA9KyAiU3RhcnRzIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QXBwZW5kaW5nOiA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+IG9wZXJhdG9yIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQgdmFsdWVzIHRvIGV4aXN0aW5nIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3BlcmF0b3IgZG9lcyBub3QgYWRkIGFueSBhZGRpdGlvbmFsIHNwYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgQWxzbywgdGhlIG9wZXJhdG9yIGlzIGFwcGxpZWQgYWZ0ZXIgYWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPis9PC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPj0rPC9maWxlbmFtZT4gb3BlcmF0b3JzIGhhdmUgYmVlbiBhcHBsaWVkIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgYWxsIDxmaWxlbmFtZT49PC9maWxlbmFtZT4gYXNzaWdubWVudHMgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgb2NjdXJyZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgdGhlIHNwYWNlIGJlaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBleHBsaWNpdGx5IGFkZGVkIHRvIHRoZSBzdGFydCB0byBlbnN1cmUgdGhlIGFwcGVuZGVkCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBpcyBub3QgbWVyZ2VkIHdpdGggdGhlIGV4aXN0aW5nIHZhbHVlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJX2FwcGVuZCA9ICIgZmlsZTovL2ZpeC1tYWtlZmlsZS5wYXRjaCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgdGhlIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yIHdpdGggb3ZlcnJpZGVzLCB3aGljaCByZXN1bHRzIGluIHRoZSBhY3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IGJlaW5nIHBlcmZvcm1lZCBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXQgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUklfYXBwZW5kX3NoNCA9ICIgZmlsZTovL2ZpeC1tYWtlZmlsZS5wYXRjaCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByZXBlbmRpbmc6IDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+X3ByZXBlbmQ8L2ZpbGVuYW1lPiBvcGVyYXRvciB0bworICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZCB2YWx1ZXMgdG8gZXhpc3RpbmcgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcGVyYXRvciBkb2VzIG5vdCBhZGQgYW55IGFkZGl0aW9uYWwgc3BhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBBbHNvLCB0aGUgb3BlcmF0b3IgaXMgYXBwbGllZCBhZnRlciBhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Kz08L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PSs8L2ZpbGVuYW1lPiBvcGVyYXRvcnMgaGF2ZSBiZWVuIGFwcGxpZWQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciBhbGwgPGZpbGVuYW1lPj08L2ZpbGVuYW1lPiBhc3NpZ25tZW50cyBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICBvY2N1cnJlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyB0aGUgc3BhY2UgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0bHkgYWRkZWQgdG8gdGhlIGVuZCB0byBlbnN1cmUgdGhlIHByZXBlbmRlZAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgaXMgbm90IG1lcmdlZCB3aXRoIHRoZSBleGlzdGluZyB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ0ZMQUdTX3ByZXBlbmQgPSAiLUkke1N9L215aW5jbHVkZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHVzZSB0aGUgPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yIHdpdGggb3ZlcnJpZGVzLCB3aGljaCByZXN1bHRzIGluIHRoZSBhY3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IGJlaW5nIHBlcmZvcm1lZCBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXQgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENGTEFHU19wcmVwZW5kX3NoNCA9ICItSSR7U30vbXlpbmNsdWRlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5PdmVycmlkZXM6PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2Ugb3ZlcnJpZGVzIHRvIHNldCBhIHZhbHVlIGNvbmRpdGlvbmFsbHksCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBpY2FsbHkgYmFzZWQgb24gaG93IHRoZSByZWNpcGUgaXMgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdG8gc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtCUkFOQ0gnPjxmaWxlbmFtZT5LQlJBTkNIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUncyB2YWx1ZSB0byAic3RhbmRhcmQvYmFzZSIgZm9yIGFueSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgZm9yIHFlbXVhcm0gd2hlcmUgaXQgc2hvdWxkIGJlIHNldCB0bworICAgICAgICAgICAgICAgICAgICAgICAgInN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIiwgeW91IHdvdWxkIGRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLQlJBTkNIID0gInN0YW5kYXJkL2Jhc2UiCisgICAgIEtCUkFOQ0hfcWVtdWFybSAgPSAic3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBPdmVycmlkZXMgYXJlIGFsc28gdXNlZCB0byBzZXBhcmF0ZSBhbHRlcm5hdGUgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgICAgICBvZiBhIHZhcmlhYmxlIGluIG90aGVyIHNpdHVhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgd2hlbiBzZXR0aW5nIHZhcmlhYmxlcyBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGFyZSBzcGVjaWZpYyB0byBpbmRpdmlkdWFsIHBhY2thZ2VzIHByb2R1Y2VkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICBhIHJlY2lwZSwgeW91IHNob3VsZCBhbHdheXMgdXNlIGFuIG92ZXJyaWRlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluZGVudGF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBVc2Ugc3BhY2VzIGZvciBpbmRlbnRhdGlvbiByYXRoZXIgdGhhbiB0aGFuIHRhYnMuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3Igc2hlbGwgZnVuY3Rpb25zLCBib3RoIGN1cnJlbnRseSB3b3JrLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaXQgaXMgYSBwb2xpY3kgZGVjaXNpb24gb2YgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHVzZSB0YWJzIGluIHNoZWxsIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlYWxpemUgdGhhdCBzb21lIGxheWVycyBoYXZlIGEgcG9saWN5IHRvIHVzZSBzcGFjZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhbGwgaW5kZW50YXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2luZyBQeXRob24gZm9yIENvbXBsZXggT3BlcmF0aW9uczogPGZpbGVuYW1lPiR7QDxyZXBsYWNlYWJsZT5weXRob25fY29kZTwvcmVwbGFjZWFibGU+fTwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgYWR2YW5jZWQgcHJvY2Vzc2luZywgaXQgaXMgcG9zc2libGUgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICBQeXRob24gY29kZSBkdXJpbmcgdmFyaWFibGUgYXNzaWdubWVudHMgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaCBhbmQgcmVwbGFjZW1lbnQgb24gYSB2YXJpYWJsZSkuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGluZGljYXRlIFB5dGhvbiBjb2RlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7QDxyZXBsYWNlYWJsZT5weXRob25fY29kZTwvcmVwbGFjZWFibGU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBzeW50YXggZm9yIHRoZSB2YXJpYWJsZSBhc3NpZ25tZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImZ0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvc3JjL3ppcCR7QGQuZ2V0VmFyKCdQVicsMSkucmVwbGFjZSgnLicsICcnKX0udGd6CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TaGVsbCBGdW5jdGlvbiBTeW50YXg6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlIHNoZWxsIGZ1bmN0aW9ucyBhcyBpZiB5b3Ugd2VyZSB3cml0aW5nIGEgc2hlbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCB3aGVuIHlvdSBkZXNjcmliZSBhIGxpc3Qgb2YgYWN0aW9ucyB0byB0YWtlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBlbnN1cmUgdGhhdCB5b3VyIHNjcmlwdCB3b3JrcyB3aXRoIGEgZ2VuZXJpYworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNoPC9maWxlbmFtZT4gYW5kIHRoYXQgaXQgZG9lcyBub3QgcmVxdWlyZQorICAgICAgICAgICAgICAgICAgICAgICAgYW55IDxmaWxlbmFtZT5iYXNoPC9maWxlbmFtZT4gb3Igb3RoZXIgc2hlbGwtc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc2FtZSBjb25zaWRlcmF0aW9ucyBhcHBseSB0byB2YXJpb3VzIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgdXRpbGl0aWVzIChlLmcuIDxmaWxlbmFtZT5zZWQ8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ncmVwPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5hd2s8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkgdGhhdCB5b3UgbWlnaHQgd2lzaCB0byB1c2UuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiBpbiBkb3VidCwgeW91IHNob3VsZCBjaGVjayB3aXRoIG11bHRpcGxlCisgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMgLSBpbmNsdWRpbmcgdGhvc2UgZnJvbSBCdXN5Qm94LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1ydW5uaW5nLWEtYnVpbGQtb24tdGhlLXJlY2lwZSc+CisgICAgICAgICAgICA8dGl0bGU+UnVubmluZyBhIEJ1aWxkIG9uIHRoZSBSZWNpcGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDcmVhdGluZyBhIG5ldyByZWNpcGUgaXMgdXN1YWxseSBhbiBpdGVyYXRpdmUgcHJvY2VzcyB0aGF0CisgICAgICAgICAgICAgICAgcmVxdWlyZXMgdXNpbmcgQml0QmFrZSB0byBwcm9jZXNzIHRoZSByZWNpcGUgbXVsdGlwbGUgdGltZXMgaW4KKyAgICAgICAgICAgICAgICBvcmRlciB0byBwcm9ncmVzc2l2ZWx5IGRpc2NvdmVyIGFuZCBhZGQgaW5mb3JtYXRpb24gdG8gdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzc3VtaW5nIHlvdSBoYXZlIHNvdXJjZWQgYSBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgKGkuZS4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+KQorICAgICAgICAgICAgICAgIGFuZCB5b3UgYXJlIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiwKKyAgICAgICAgICAgICAgICB1c2UgQml0QmFrZSB0byBwcm9jZXNzIHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgICAgIEFsbCB5b3UgbmVlZCB0byBwcm92aWRlIGlzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48cmVwbGFjZWFibGU+YmFzZW5hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+IG9mIHRoZSByZWNpcGUgYXMgZGVzY3JpYmVkCisgICAgICAgICAgICAgICAgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb246CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgPHJlcGxhY2VhYmxlPmJhc2VuYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBidWlsZCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY3JlYXRlcyBhCisgICAgICAgICAgICAgICAgdGVtcG9yYXJ5IHdvcmsgZGlyZWN0b3J5IGZvciBlYWNoIHJlY2lwZQorICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgIHdoZXJlIGl0IGtlZXBzIGV4dHJhY3RlZCBzb3VyY2UgZmlsZXMsIGxvZyBmaWxlcywgaW50ZXJtZWRpYXRlCisgICAgICAgICAgICAgICAgY29tcGlsYXRpb24gYW5kIHBhY2thZ2luZyBmaWxlcywgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcGVyLXJlY2lwZSB0ZW1wb3Jhcnkgd29yayBkaXJlY3RvcnkgaXMgY29uc3RydWN0ZWQgYXMgZm9sbG93cyBhbmQKKyAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIHNldmVyYWwgZmFjdG9yczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJBU0VfV09SS0RJUiA/PSAiJHtUTVBESVJ9L3dvcmsiCisgICAgIFdPUktESVIgPSAiJHtCQVNFX1dPUktESVJ9LyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9LyR7UE59LyR7RVhURU5EUEV9JHtQVn0tJHtQUn0iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGFzc3VtZSBhIFNvdXJjZSBEaXJlY3RvcnkgdG9wLWxldmVsIGZvbGRlciBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4sIGEgZGVmYXVsdCBCdWlsZCBEaXJlY3RvcnkgYXQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS9idWlsZDwvZmlsZW5hbWU+LCBhbmQgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2LXBva3ktbGludXg8L2ZpbGVuYW1lPiBtYWNoaW5lIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHN1cHBvc2UgeW91ciByZWNpcGUgaXMgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9vXzEuMy4wLmJiPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgd29yayBkaXJlY3RvcnkgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzIHRvCisgICAgICAgICAgICAgICAgYnVpbGQgdGhlIHBhY2thZ2Ugd291bGQgYmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBva3kvYnVpbGQvdG1wL3dvcmsvcWVtdXg4Ni1wb2t5LWxpbnV4L2Zvby8xLjMuMC1yMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbnNpZGUgdGhpcyBkaXJlY3RvcnkgeW91IGNhbiBmaW5kIHN1Yi1kaXJlY3RvcmllcyBzdWNoIGFzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmltYWdlPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5wYWNrYWdlcy1zcGxpdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+dGVtcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEFmdGVyIHRoZSBidWlsZCwgeW91IGNhbiBleGFtaW5lIHRoZXNlIHRvIGRldGVybWluZSBob3cgd2VsbAorICAgICAgICAgICAgICAgIHRoZSBidWlsZCB3ZW50LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbG9nIGZpbGVzIGZvciBlYWNoIHRhc2sgaW4gdGhlIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50ZW1wPC9maWxlbmFtZT4gZGlyZWN0b3J5IChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5L2J1aWxkL3RtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9mb28vMS4zLjAtcjAvdGVtcDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgTG9nIGZpbGVzIGFyZSBuYW1lZCA8ZmlsZW5hbWU+bG9nLjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmxvZy5kb19jb25maWd1cmU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvZy5kb19mZXRjaDwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvZy5kb19jb21waWxlPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1aWxkIHByb2Nlc3MgaW4gdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2Nsb3Nlci1sb29rJz5BIENsb3NlciBMb29rIGF0IHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50PC91bGluaz4iCisgICAgICAgICAgICAgICAgY2hhcHRlciBvZiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gcmVmZXJlbmNlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGluIHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCdzIGdsb3NzYXJ5IGZvciBtb3JlIGluZm9ybWF0aW9uOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0b3AtbGV2ZWwgYnVpbGQgb3V0cHV0IGRpcmVjdG9yeTwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTVVMVElNQUNIX1RBUkdFVF9TWVMnPjxmaWxlbmFtZT5NVUxUSU1BQ0hfVEFSR0VUX1NZUzwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0IHN5c3RlbSBpZGVudGlmaWVyPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgbmFtZTwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhURU5EUEUnPjxmaWxlbmFtZT5FWFRFTkRQRTwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZXBvY2ggLSAoaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QRSc+PGZpbGVuYW1lPlBFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IHNwZWNpZmllZCwgd2hpY2ggaXMgdXN1YWxseSB0aGUgY2FzZSBmb3IgbW9zdAorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcywgdGhlbiA8ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPiBpcyBibGFuayk8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSB2ZXJzaW9uPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgcmV2aXNpb248L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtZmV0Y2hpbmctY29kZSc+CisgICAgICAgICAgICA8dGl0bGU+RmV0Y2hpbmcgQ29kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaXJzdCB0aGluZyB5b3VyIHJlY2lwZSBtdXN0IGRvIGlzIHNwZWNpZnkgaG93IHRvIGZldGNoCisgICAgICAgICAgICAgICAgdGhlIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBGZXRjaGluZyBpcyBjb250cm9sbGVkIG1haW5seSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBZb3VyIHJlY2lwZSBtdXN0IGhhdmUgYSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgdGhhdCBwb2ludHMgdG8gd2hlcmUgdGhlIHNvdXJjZSBpcyBsb2NhdGVkLgorICAgICAgICAgICAgICAgIEZvciBhIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiBzb3VyY2UgbG9jYXRpb25zLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NvdXJjZXMtZGV2LWVudmlyb25tZW50Jz5Tb3VyY2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtZmV0Y2gnPjxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0YXNrIHVzZXMgdGhlIHByZWZpeCBvZiBlYWNoIGVudHJ5IGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gdmFyaWFibGUgdmFsdWUgdG8gZGV0ZXJtaW5lIHdoaWNoCisgICAgICAgICAgICAgICAgZmV0Y2hlciB0byB1c2UgdG8gZ2V0IHlvdXIgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgICAgIEl0IGlzIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHZhcmlhYmxlIHRoYXQgdHJpZ2dlcnMKKyAgICAgICAgICAgICAgICB0aGUgZmV0Y2hlci4KKyAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtcGF0Y2gnPjxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0YXNrIHVzZXMgdGhlIHZhcmlhYmxlIGFmdGVyIHNvdXJjZSBpcyBmZXRjaGVkIHRvIGFwcGx5CisgICAgICAgICAgICAgICAgcGF0Y2hlcy4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTT1ZFUlJJREVTJz48ZmlsZW5hbWU+RklMRVNPVkVSUklERVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgZm9yIHNjYW5uaW5nIGRpcmVjdG9yeSBsb2NhdGlvbnMgZm9yIGxvY2FsIGZpbGVzIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gdmFyaWFibGUgaW4geW91ciByZWNpcGUgbXVzdAorICAgICAgICAgICAgICAgIGRlZmluZSBlYWNoIHVuaXF1ZSBsb2NhdGlvbiBmb3IgeW91ciBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICAgICAgSXQgaXMgZ29vZCBwcmFjdGljZSB0byBub3QgaGFyZC1jb2RlIHBhdGhuYW1lcyBpbiBhbiBVUkwgdXNlZAorICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgUmF0aGVyIHRoYW4gaGFyZC1jb2RlIHRoZXNlIHBhdGhzLCB1c2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgd2hpY2ggY2F1c2VzIHRoZSBmZXRjaCBwcm9jZXNzIHRvIHVzZSB0aGUgdmVyc2lvbiBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICB0aGUgcmVjaXBlIGZpbGVuYW1lLgorICAgICAgICAgICAgICAgIFNwZWNpZnlpbmcgdGhlIHZlcnNpb24gaW4gdGhpcyBtYW5uZXIgbWVhbnMgdGhhdCB1cGdyYWRpbmcgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlIHRvIGEgZnV0dXJlIHZlcnNpb24gaXMgYXMgc2ltcGxlIGFzIHJlbmFtaW5nIHRoZSByZWNpcGUKKyAgICAgICAgICAgICAgICB0byBtYXRjaCB0aGUgbmV3IHZlcnNpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYSBzaW1wbGUgZXhhbXBsZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2RydG9vbHMvY2RydG9vbHMtbmF0aXZlXzMuMDFhMjAuYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHJlY2lwZSB3aGVyZSB0aGUgc291cmNlIGNvbWVzIGZyb20gYSBzaW5nbGUgdGFyYmFsbC4KKyAgICAgICAgICAgICAgICBOb3RpY2UgdGhlIHVzZSBvZiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiZnRwOi8vZnRwLmJlcmxpb3MuZGUvcHViL2NkcmVjb3JkL2FscGhhL2NkcnRvb2xzLSR7UFZ9LnRhci5iejIiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGaWxlcyBtZW50aW9uZWQgaW4gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB3aG9zZSBuYW1lcyBlbmQKKyAgICAgICAgICAgICAgICBpbiBhIHR5cGljYWwgYXJjaGl2ZSBleHRlbnNpb24gKGUuZy4gPGZpbGVuYW1lPi50YXI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnRhci5nejwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+LnRhci5iejI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnppcDwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGgpLCBhcmUgYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgIGV4dHJhY3RlZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLXVucGFjayc+PGZpbGVuYW1lPmRvX3VucGFjazwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0YXNrLgorICAgICAgICAgICAgICAgIEZvciBhbm90aGVyIGV4YW1wbGUgdGhhdCBzcGVjaWZpZXMgdGhlc2UgdHlwZXMgb2YgZmlsZXMsIHNlZQorICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSduZXctcmVjaXBlLWF1dG90b29sZWQtcGFja2FnZSc+QXV0b3Rvb2xlZCBQYWNrYWdlPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbm90aGVyIHdheSBvZiBzcGVjaWZ5aW5nIHNvdXJjZSBpcyBmcm9tIGFuIFNDTS4KKyAgICAgICAgICAgICAgICBGb3IgR2l0IHJlcG9zaXRvcmllcywgeW91IG11c3Qgc3BlY2lmeQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kIHlvdSBzaG91bGQgc3BlY2lmeQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHRvIGluY2x1ZGUgdGhlIHJldmlzaW9uIHdpdGgKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDUFYnPjxmaWxlbmFtZT5TUkNQVjwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlIHJlY2lwZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2Jsa3RyYWNlL2Jsa3RyYWNlX2dpdC5iYjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDUkVWID0gImQ2OTE4Yzg4MzI3OTNiNDIwNWVkM2JmZWRlNzhjMmY5MTVjMjMzODUiCisKKyAgICAgUFIgPSAicjYiCisgICAgIFBWID0gIjEuMC41K2dpdCR7U1JDUFZ9IgorCisgICAgIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5kay9ibGt0cmFjZS5naXQgXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9sZGZsYWdzLnBhdGNoIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91ciA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudCBpbmNsdWRlcworICAgICAgICAgICAgICAgIFVSTHMgcG9pbnRpbmcgdG8gaW5kaXZpZHVhbCBmaWxlcyBmZXRjaGVkIGZyb20gYSByZW1vdGUgc2VydmVyCisgICAgICAgICAgICAgICAgb3RoZXIgdGhhbiBhIHZlcnNpb24gY29udHJvbCBzeXN0ZW0sIEJpdEJha2UgYXR0ZW1wdHMgdG8KKyAgICAgICAgICAgICAgICB2ZXJpZnkgdGhlIGZpbGVzIGFnYWluc3QgY2hlY2tzdW1zIGRlZmluZWQgaW4geW91ciByZWNpcGUgdG8KKyAgICAgICAgICAgICAgICBlbnN1cmUgdGhleSBoYXZlIG5vdCBiZWVuIHRhbXBlcmVkIHdpdGggb3Igb3RoZXJ3aXNlIG1vZGlmaWVkCisgICAgICAgICAgICAgICAgc2luY2UgdGhlIHJlY2lwZSB3YXMgd3JpdHRlbi4KKyAgICAgICAgICAgICAgICBUd28gY2hlY2tzdW1zIGFyZSB1c2VkOgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJW21kNXN1bV08L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSVtzaGEyNTZzdW1dPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdXIgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB2YXJpYWJsZSBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICBtb3JlIHRoYW4gYSBzaW5nbGUgVVJMIChleGNsdWRpbmcgU0NNIFVSTHMpLCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgIHByb3ZpZGUgdGhlIDxmaWxlbmFtZT5tZDU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2hhMjU2PC9maWxlbmFtZT4gY2hlY2tzdW1zIGZvciBlYWNoIFVSTC4KKyAgICAgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMsIHlvdSBwcm92aWRlIGEgbmFtZSBmb3IgZWFjaCBVUkwgYXMgcGFydCBvZgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGFuZCB0aGVuIHJlZmVyZW5jZSB0aGF0IG5hbWUKKyAgICAgICAgICAgICAgICBpbiB0aGUgc3Vic2VxdWVudCBjaGVja3N1bSBzdGF0ZW1lbnRzLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2EvYXBtZC9hcG1kXzMuMi4yLm9yaWcudGFyLmd6O25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgICAgICAgJHtERUJJQU5fTUlSUk9SfS9tYWluL2EvYXBtZC9hcG1kXyR7UFZ9LmRpZmYuZ3o7bmFtZT1wYXRjaAorCisgICAgIFNSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gImIxZTYzMDllODMzMWUwZjRlNmVmZDMxMWMyZDk3ZmE4IgorICAgICBTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICI3ZjdkOWY2MGI3NzY2Yjg1Mjg4MWQ0MGI4ZmY5MWQ4ZTM5ZmNjYjBkMWQ5MTMxMDJhNWM3NWEyZGJiNTIzMzJkIgorCisgICAgIFNSQ19VUklbcGF0Y2gubWQ1c3VtXSA9ICI1N2UxYjY4OTI2NGVhODBmNzgzNTM1MTllZWNlMGM5MiIKKyAgICAgU1JDX1VSSVtwYXRjaC5zaGEyNTZzdW1dID0gIjc5MDVmZjk2YmU5M2Q3MjU1NDRkMDA0MGU0MjVjNDJmOWMwNTU4MGRiM2MyNzJmMTFjZmY3NWI5YWE4OWQ0MzAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQcm9wZXIgdmFsdWVzIGZvciA8ZmlsZW5hbWU+bWQ1PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNoYTI1NjwvZmlsZW5hbWU+IGNoZWNrc3VtcyBtaWdodCBiZSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICB3aXRoIG90aGVyIHNpZ25hdHVyZXMgb24gdGhlIGRvd25sb2FkIHBhZ2UgZm9yIHRoZSB1cHN0cmVhbQorICAgICAgICAgICAgICAgIHNvdXJjZSAoZS5nLiA8ZmlsZW5hbWU+bWQ1PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNoYTE8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnNoYTI1NjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5HUEc8L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIG9ubHkgZGVhbHMgd2l0aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaGEyNTZzdW08L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPm1kNXN1bTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHlvdSBzaG91bGQgdmVyaWZ5IGFsbCB0aGUgc2lnbmF0dXJlcyB5b3UgZmluZCBieSBoYW5kLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiBubyA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGNoZWNrc3VtcyBhcmUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgd2hlbiB5b3UgYXR0ZW1wdCB0byBidWlsZCB0aGUgcmVjaXBlLCBvciB5b3UgcHJvdmlkZSBhbgorICAgICAgICAgICAgICAgIGluY29ycmVjdCBjaGVja3N1bSwgdGhlIGJ1aWxkIHdpbGwgcHJvZHVjZSBhbiBlcnJvciBmb3IgZWFjaAorICAgICAgICAgICAgICAgIG1pc3Npbmcgb3IgaW5jb3JyZWN0IGNoZWNrc3VtLgorICAgICAgICAgICAgICAgIEFzIHBhcnQgb2YgdGhlIGVycm9yIG1lc3NhZ2UsIHRoZSBidWlsZCBzeXN0ZW0gcHJvdmlkZXMKKyAgICAgICAgICAgICAgICB0aGUgY2hlY2tzdW0gc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZldGNoZWQgZmlsZS4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGNoZWNrc3VtcywgeW91IGNhbiBjb3B5IGFuZCBwYXN0ZQorICAgICAgICAgICAgICAgIHRoZW0gaW50byB5b3VyIHJlY2lwZSBhbmQgdGhlbiBydW4gdGhlIGJ1aWxkIGFnYWluIHRvIGNvbnRpbnVlLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQsIGlmIHRoZSB1cHN0cmVhbSBzb3VyY2UgcHJvdmlkZXMgc2lnbmF0dXJlcworICAgICAgICAgICAgICAgICAgICBmb3IgdmVyaWZ5aW5nIHRoZSBkb3dubG9hZGVkIHNvdXJjZSBjb2RlLCB5b3Ugc2hvdWxkCisgICAgICAgICAgICAgICAgICAgIHZlcmlmeSB0aG9zZSBtYW51YWxseSBiZWZvcmUgc2V0dGluZyB0aGUgY2hlY2tzdW0gdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSByZWNpcGUgYW5kIGNvbnRpbnVpbmcgd2l0aCB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGZpbmFsIGV4YW1wbGUgaXMgYSBiaXQgbW9yZSBjb21wbGljYXRlZCBhbmQgaXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZV85LjIwLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGUncyA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudCBpZGVudGlmaWVzCisgICAgICAgICAgICAgICAgbXVsdGlwbGUgZmlsZXMgYXMgdGhlIHNvdXJjZSBmaWxlcyBmb3IgdGhlIHJlY2lwZTogYSB0YXJiYWxsLCBhCisgICAgICAgICAgICAgICAgcGF0Y2ggZmlsZSwgYSBkZXNrdG9wIGZpbGUsIGFuZCBhbiBpY29uLgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJodHRwOi8vZGlzdC5zY2htb3JwLmRlL3J4dnQtdW5pY29kZS9BdHRpYy9yeHZ0LXVuaWNvZGUtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgICAgICAgZmlsZTovL3h3Yy5wYXRjaCBcCisgICAgICAgICAgICAgICAgZmlsZTovL3J4dnQuZGVza3RvcCBcCisgICAgICAgICAgICAgICAgZmlsZTovL3J4dnQucG5nIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiB5b3Ugc3BlY2lmeSBsb2NhbCBmaWxlcyB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IFVSSSBwcm90b2NvbCwgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIGZldGNoZXMgZmlsZXMgZnJvbSB0aGUgbG9jYWwgbWFjaGluZS4KKyAgICAgICAgICAgICAgICBUaGUgcGF0aCBpcyByZWxhdGl2ZSB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCBzZWFyY2hlcyBzcGVjaWZpYyBkaXJlY3RvcmllcyBpbiBhIGNlcnRhaW4gb3JkZXI6CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQlAnPjxmaWxlbmFtZT5CUDwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJQTic+PGZpbGVuYW1lPkJQTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3JpZXMgYXJlIGFzc3VtZWQgdG8gYmUgc3ViZGlyZWN0b3JpZXMgb2YgdGhlCisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSByZWNpcGUgb3IgYXBwZW5kIGZpbGUgcmVzaWRlcy4KKyAgICAgICAgICAgICAgICBGb3IgYW5vdGhlciBleGFtcGxlIHRoYXQgc3BlY2lmaWVzIHRoZXNlIHR5cGVzIG9mIGZpbGVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J25ldy1yZWNpcGUtc2luZ2xlLWMtZmlsZS1wYWNrYWdlLWhlbGxvLXdvcmxkJz5TaW5nbGUgLmMgRmlsZSBQYWNrYWdlIChIZWxsbyBXb3JsZCEpPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgZXhhbXBsZSBhbHNvIHNwZWNpZmllcyBhIHBhdGNoIGZpbGUuCisgICAgICAgICAgICAgICAgUGF0Y2ggZmlsZXMgYXJlIGZpbGVzIHdob3NlIG5hbWVzIHVzdWFsbHkgZW5kIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5wYXRjaDwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT4uZGlmZjwvZmlsZW5hbWU+IGJ1dAorICAgICAgICAgICAgICAgIGNhbiBlbmQgd2l0aCBjb21wcmVzc2VkIHN1ZmZpeGVzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlmZi5nejwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYXRjaC5iejI8L2ZpbGVuYW1lPiwgZm9yIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGFwcGxpZXMgcGF0Y2hlcyBhcyBkZXNjcmliZWQKKyAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbmV3LXJlY2lwZS1wYXRjaGluZy1jb2RlJz5QYXRjaGluZyBDb2RlPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLXVucGFja2luZy1jb2RlJz4KKyAgICAgICAgICAgIDx0aXRsZT5VbnBhY2tpbmcgQ29kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIER1cmluZyB0aGUgYnVpbGQsIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy11bnBhY2snPjxmaWxlbmFtZT5kb191bnBhY2s8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdGFzayB1bnBhY2tzIHRoZSBzb3VyY2Ugd2l0aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBwb2ludGluZyB0byB3aGVyZSBpdCBpcyB1bnBhY2tlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBmZXRjaGluZyB5b3VyIHNvdXJjZSBmaWxlcyBmcm9tIGFuIHVwc3RyZWFtIHNvdXJjZQorICAgICAgICAgICAgICAgIGFyY2hpdmVkIHRhcmJhbGwgYW5kIHRoZSB0YXJiYWxsJ3MgaW50ZXJuYWwgc3RydWN0dXJlIG1hdGNoZXMKKyAgICAgICAgICAgICAgICB0aGUgY29tbW9uIGNvbnZlbnRpb24gb2YgYSB0b3AtbGV2ZWwgc3ViZGlyZWN0b3J5IG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQlBOJz48ZmlsZW5hbWU+QlBOPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LSR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHRoZW4geW91IGRvIG5vdCBuZWVkIHRvIHNldCA8ZmlsZW5hbWU+UzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3BlY2lmaWVzIHRvIGZldGNoCisgICAgICAgICAgICAgICAgc291cmNlIGZyb20gYW4gYXJjaGl2ZSB0aGF0IGRvZXMgbm90IHVzZSB0aGlzIGNvbnZlbnRpb24sCisgICAgICAgICAgICAgICAgb3IgZnJvbSBhbiBTQ00gbGlrZSBHaXQgb3IgU3VidmVyc2lvbiwgeW91ciByZWNpcGUgbmVlZHMgdG8KKyAgICAgICAgICAgICAgICBkZWZpbmUgPGZpbGVuYW1lPlM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgcHJvY2Vzc2luZyB5b3VyIHJlY2lwZSB1c2luZyBCaXRCYWtlIHN1Y2Nlc3NmdWxseSB1bnBhY2tzCisgICAgICAgICAgICAgICAgdGhlIHNvdXJjZSBmaWxlcywgeW91IG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBwb2ludGVkIHRvIGJ5IDxmaWxlbmFtZT4ke1N9PC9maWxlbmFtZT4gbWF0Y2hlcyB0aGUgc3RydWN0dXJlCisgICAgICAgICAgICAgICAgb2YgdGhlIHNvdXJjZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLXBhdGNoaW5nLWNvZGUnPgorICAgICAgICAgICAgPHRpdGxlPlBhdGNoaW5nIENvZGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTb21ldGltZXMgaXQgaXMgbmVjZXNzYXJ5IHRvIHBhdGNoIGNvZGUgYWZ0ZXIgaXQgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICBmZXRjaGVkLgorICAgICAgICAgICAgICAgIEFueSBmaWxlcyBtZW50aW9uZWQgaW4gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB3aG9zZQorICAgICAgICAgICAgICAgIG5hbWVzIGVuZCBpbiA8ZmlsZW5hbWU+LnBhdGNoPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmRpZmY8L2ZpbGVuYW1lPiBvciBjb21wcmVzc2VkIHZlcnNpb25zIG9mIHRoZXNlCisgICAgICAgICAgICAgICAgc3VmZml4ZXMgKGUuZy4gPGZpbGVuYW1lPmRpZmYuZ3o8L2ZpbGVuYW1lPiBhcmUgdHJlYXRlZCBhcworICAgICAgICAgICAgICAgIHBhdGNoZXMuCisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLXBhdGNoJz48ZmlsZW5hbWU+ZG9fcGF0Y2g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdGFzayBhdXRvbWF0aWNhbGx5IGFwcGxpZXMgdGhlc2UgcGF0Y2hlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBzaG91bGQgYmUgYWJsZSB0byBhcHBseSBwYXRjaGVzIHdpdGggdGhlICItcDEiCisgICAgICAgICAgICAgICAgb3B0aW9uIChpLmUuIG9uZSBkaXJlY3RvcnkgbGV2ZWwgaW4gdGhlIHBhdGggd2lsbCBiZSBzdHJpcHBlZAorICAgICAgICAgICAgICAgIG9mZikuCisgICAgICAgICAgICAgICAgSWYgeW91ciBwYXRjaCBuZWVkcyB0byBoYXZlIG1vcmUgZGlyZWN0b3J5IGxldmVscyBzdHJpcHBlZCBvZmYsCisgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGxldmVscyB1c2luZyB0aGUgInN0cmlwbGV2ZWwiIG9wdGlvbiBpbgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGVudHJ5IGZvciB0aGUgcGF0Y2guCisgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgaWYgeW91ciBwYXRjaCBuZWVkcyB0byBiZSBhcHBsaWVkIGluIGEgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICBzdWJkaXJlY3RvcnkgdGhhdCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBwYXRjaCBmaWxlLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgInBhdGNoZGlyIiBvcHRpb24gaW4gdGhlIGVudHJ5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyB3aXRoIGFsbCBsb2NhbCBmaWxlcyByZWZlcmVuY2VkIGluCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHVzaW5nIDxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4sIHlvdSBzaG91bGQgcGxhY2UKKyAgICAgICAgICAgICAgICBwYXRjaCBmaWxlcyBpbiBhIGRpcmVjdG9yeSBuZXh0IHRvIHRoZSByZWNpcGUgZWl0aGVyCisgICAgICAgICAgICAgICAgbmFtZWQgdGhlIHNhbWUgYXMgdGhlIGJhc2UgbmFtZSBvZiB0aGUgcmVjaXBlCisgICAgICAgICAgICAgICAgKDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CUCc+PGZpbGVuYW1lPkJQPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CUE4nPjxmaWxlbmFtZT5CUE48L2ZpbGVuYW1lPjwvdWxpbms+KQorICAgICAgICAgICAgICAgIG9yICJmaWxlcyIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1saWNlbnNpbmcnPgorICAgICAgICAgICAgPHRpdGxlPkxpY2Vuc2luZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdXIgcmVjaXBlIG5lZWRzIHRvIGhhdmUgYm90aCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTElDRU5TRSc+PGZpbGVuYW1lPkxJQ0VOU0U8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJQ19GSUxFU19DSEtTVU0nPjxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBsaWNlbnNlIGZvciB0aGUgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGtub3cgdGhlIGxpY2Vuc2UgdW5kZXIgd2hpY2ggdGhlIHNvZnR3YXJlCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgYXJlIGJ1aWxkaW5nIGlzIGRpc3RyaWJ1dGVkLCB5b3Ugc2hvdWxkIGdvIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlIGNvZGUgYW5kIGxvb2sgZm9yIHRoYXQgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBUeXBpY2FsIGZpbGVzIGNvbnRhaW5pbmcgdGhpcyBpbmZvcm1hdGlvbiBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q09QWUlORzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ0VOU0U8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY291bGQgYWxzbyBmaW5kIHRoZSBpbmZvcm1hdGlvbiBuZWFyIHRoZSB0b3Agb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgc291cmNlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZ2l2ZW4gYSBwaWVjZSBvZiBzb2Z0d2FyZSBsaWNlbnNlZCB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgeW91IHdvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQgPGZpbGVuYW1lPkxJQ0VOU0U8L2ZpbGVuYW1lPiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFID0gIkdQTHYyIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBsaWNlbnNlcyB5b3Ugc3BlY2lmeSB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT4gY2FuIGhhdmUgYW55IG5hbWUgYXMgbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgYXMgeW91IGRvIG5vdCB1c2Ugc3BhY2VzLCBzaW5jZSBzcGFjZXMgYXJlIHVzZWQgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvcnMgYmV0d2VlbiBsaWNlbnNlIG5hbWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHN0YW5kYXJkIGxpY2Vuc2VzLCB1c2UgdGhlIG5hbWVzIG9mIHRoZSBmaWxlcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBvciB0aGUgPGZpbGVuYW1lPlNQRFhMSUNFTlNFTUFQPC9maWxlbmFtZT4gZmxhZyBuYW1lcworICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBpbiA8ZmlsZW5hbWU+bWV0YS9jb25mL2xpY2Vuc2VzLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhpcyB2YXJpYWJsZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgbWFrZSBzdXJlIHRoZSBsaWNlbnNlIHRleHQgaGFzIG5vdCBjaGFuZ2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgaXQgaGFzLCB0aGUgYnVpbGQgcHJvZHVjZXMgYW4gZXJyb3IgYW5kIGl0IGFmZm9yZHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSB0aGUgY2hhbmNlIHRvIGZpZ3VyZSBpdCBvdXQgYW5kIGNvcnJlY3QgdGhlIHByb2JsZW0uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgbmVlZCB0byBzcGVjaWZ5IGFsbCBhcHBsaWNhYmxlIGxpY2Vuc2luZworICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgZm9yIHRoZSBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3RlcCwgdGhlIGJ1aWxkIHByb2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgY29tcGFyZSB0aGUgY2hlY2tzdW1zIG9mIHRoZSBmaWxlcyB0byBiZSBzdXJlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdGV4dCBoYXMgbm90IGNoYW5nZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBBbnkgZGlmZmVyZW5jZXMgcmVzdWx0IGluIGFuIGVycm9yIHdpdGggdGhlIG1lc3NhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgY2hlY2tzdW0uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBleHBsYW5hdGlvbiBhbmQgZXhhbXBsZXMgb2YgaG93IHRvIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT4gdmFyaWFibGUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN1c2luZ3Bva3ktY29uZmlndXJpbmctTElDX0ZJTEVTX0NIS1NVTSc+VHJhY2tpbmcgTGljZW5zZSBDaGFuZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGNoZWNrc3VtIHN0cmluZywgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBjYW4gbGlzdCB0aGUgYXBwcm9wcmlhdGUgZmlsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+IHZhcmlhYmxlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY29ycmVjdCBtZDUgc3RyaW5ncywgYXR0ZW1wdCB0byBidWlsZCB0aGUgc29mdHdhcmUsCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBub3RlIHRoZSByZXN1bHRpbmcgZXJyb3IgbWVzc2FnZXMgdGhhdCB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQgdGhlIGNvcnJlY3QgbWQ1IHN0cmluZ3MuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbmV3LXJlY2lwZS1mZXRjaGluZy1jb2RlJz5GZXRjaGluZyBDb2RlPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGFzc3VtZXMgdGhlIHNvZnR3YXJlIGhhcyBhCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q09QWUlORzwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PXh4eCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHRyeSB0byBidWlsZCB0aGUgc29mdHdhcmUsIHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgcHJvZHVjZSBhbiBlcnJvciBhbmQgZ2l2ZSB5b3UgdGhlIGNvcnJlY3Qgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHlvdSBjYW4gc3Vic3RpdHV0ZSBpbnRvIHRoZSByZWNpcGUgZmlsZSBmb3IgYQorICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2VxdWVudCBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCis8IS0tCisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciB0cnlpbmcgdGhpcyBvdXQgSSBjcmVhdGVkIGEgbmV3IHJlY2lwZSBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5odG9wXzEuMC4yLmJiPC9maWxlbmFtZT4gYW5kIHB1dCBpdCBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9odG9wPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlcmUgYXJlIHR3byBsaWNlbnNlIHR5cGUgc3RhdGVtZW50cyBpbiBteSB2ZXJ5IHNpbXBsZQorICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ0VOU0UgPSAiIgorCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiIgorCisgICAgIFNSQ19VUklbbWQ1c3VtXSA9ICIiCisgICAgIFNSQ19VUklbc2hhMjU2c3VtXSA9ICIiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEV2aWRlbnRseSwgeW91IG5lZWQgdG8gcnVuIGEgPGZpbGVuYW1lPmJpdGJha2UgLWMgY2xlYW5hbGwgaHRvcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIE5leHQsIHlvdSBkZWxldGUgb3IgY29tbWVudCBvdXQgdGhlIHR3byA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgbGluZXMgYXQgdGhlIGVuZCBhbmQgdGhlbiBhdHRlbXB0IHRvIGJ1aWxkIHRoZSBzb2Z0d2FyZSB3aXRoCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgaHRvcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIERvaW5nIHNvIGNhdXNlcyBCaXRCYWtlIHRvIHJlcG9ydCBzb21lIGVycm9ycyBhbmQgYW5kIGdpdmUKKyAgICAgICAgICAgICAgICB5b3UgdGhlIGFjdHVhbCBzdHJpbmdzIHlvdSBuZWVkIGZvciB0aGUgbGFzdCB0d28KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGxpbmVzLgorICAgICAgICAgICAgICAgIFByaW9yIHRvIHRoaXMsIHlvdSBoYXZlIHRvIGRpZyBhcm91bmQgaW4gdGhlIGhvbWUgcGFnZSBvZiB0aGUKKyAgICAgICAgICAgICAgICBzb3VyY2UgZm9yIDxmaWxlbmFtZT5odG9wPC9maWxlbmFtZT4gYW5kIGRldGVybWluZSB0aGF0IHRoZQorICAgICAgICAgICAgICAgIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIEdQTHYyLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gcHJvdmlkZSB0aGF0IGluIHRoZSA8ZmlsZW5hbWU+TElDRU5TRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50LgorICAgICAgICAgICAgICAgIE5vdyB5b3UgZWRpdCB5b3VyIHJlY2lwZSB0byBoYXZlIHRob3NlIHR3byBzdHJpbmdzIGZvcgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudHM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFID0gIkdQTHYyIgorCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiIgorCisgICAgIFNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2h0b3AvaHRvcC0ke1BWfS50YXIuZ3oiCisgICAgIFNSQ19VUklbbWQ1c3VtXSA9ICIwZDAxY2NhOGRmMzM0OWM3NDU2OWNlZmViYmQ5OTE5ZSIKKyAgICAgU1JDX1VSSVtzaGEyNTZzdW1dID0gImVlNjA2NTdiMDQ0ZWNlMGRmMDk2YzA1MzA2MGRmN2FiZjNjY2UzYTU2OGFiMzRkMjYwMDQ5ZTZhMzdjY2Q4YTEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHlvdSBjYW4gYnVpbGQgdGhlIHNvZnR3YXJlIGFnYWluIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIGh0b3A8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIFRoZXJlIGlzIGp1c3QgYSBzZXQgb2YgZXJyb3JzIG5vdyBhc3NvY2lhdGVkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgZW1wdHkgPGZpbGVuYW1lPkxJQ19GSUxFU19DSEtTVU08L2ZpbGVuYW1lPiB2YXJpYWJsZSBub3cuCisgICAgICAgICAgICA8L3BhcmE+CistLT4KKworICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtY29uZmlndXJpbmctdGhlLXJlY2lwZSc+CisgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIFJlY2lwZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE1vc3Qgc29mdHdhcmUgcHJvdmlkZXMgc29tZSBtZWFucyBvZiBzZXR0aW5nIGJ1aWxkLXRpbWUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmVmb3JlIGNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgIFR5cGljYWxseSwgc2V0dGluZyB0aGVzZSBvcHRpb25zIGlzIGFjY29tcGxpc2hlZCBieSBydW5uaW5nIGEKKyAgICAgICAgICAgICAgICBjb25maWd1cmUgc2NyaXB0IHdpdGggc29tZSBvcHRpb25zLCBvciBieSBtb2RpZnlpbmcgYSBidWlsZAorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBtYWpvciBwYXJ0IG9mIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBpcyBhYm91dCBjaGVja2luZyBmb3IKKyAgICAgICAgICAgICAgICBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBhbmQgcG9zc2libHkgZW5hYmxpbmcgb3B0aW9uYWwKKyAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGFzIGEgcmVzdWx0LgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHNwZWNpZnkgYW55IGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIGZvciB0aGUKKyAgICAgICAgICAgICAgICBzb2Z0d2FyZSB5b3UgYXJlIGJ1aWxkaW5nIGluIHlvdXIgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFsdWUsIGluIHRlcm1zIG9mIG90aGVyIHJlY2lwZXMgdGhhdCBzYXRpc2Z5IHRob3NlCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gb2Z0ZW4gZmluZCBidWlsZC10aW1lIG9yIHJ1bnRpbWUKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgZGVzY3JpYmVkIGluIHRoZSBzb2Z0d2FyZSdzIGRvY3VtZW50YXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBwcm92aWRlcyBjb25maWd1cmF0aW9uIGl0ZW1zIG9mIG5vdGUgYmFzZWQKKyAgICAgICAgICAgICAgICBvbiBob3cgeW91ciBzb2Z0d2FyZSBpcyBidWlsdDoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkF1dG90b29sczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBzb3VyY2UgZmlsZXMgaGF2ZSBhCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZmlndXJlLmFjPC9maWxlbmFtZT4gZmlsZSwgdGhlbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBzb2Z0d2FyZSBpcyBidWlsdCB1c2luZyBBdXRvdG9vbHMuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB5b3UganVzdCBuZWVkIHRvIHdvcnJ5IGFib3V0CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZnlpbmcgdGhlIGNvbmZpZ3VyYXRpb24uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2hlbiB1c2luZyBBdXRvdG9vbHMsIHlvdXIgcmVjaXBlIG5lZWRzIHRvIGluaGVyaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtYXV0b3Rvb2xzJz48ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgYW5kIHlvdXIgcmVjaXBlIGRvZXMgbm90IGhhdmUgdG8gY29udGFpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBtaWdodCBzdGlsbCB3YW50IHRvIG1ha2Ugc29tZSBhZGp1c3RtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY2FuIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVFJBX09FQ09ORic+PGZpbGVuYW1lPkVYVFJBX09FQ09ORjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHBhc3MgYW55IG5lZWRlZCBjb25maWd1cmUgb3B0aW9ucyB0aGF0IGFyZSBzcGVjaWZpYworICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHJlY2lwZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DTWFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBzb3VyY2UgZmlsZXMgaGF2ZSBhCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q01ha2VMaXN0cy50eHQ8L2ZpbGVuYW1lPiBmaWxlLCB0aGVuIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvZnR3YXJlIGlzIGJ1aWx0IHVzaW5nIENNYWtlLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgeW91IGp1c3QgbmVlZCB0byB3b3JyeSBhYm91dAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZ5aW5nIHRoZSBjb25maWd1cmF0aW9uLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPldoZW4geW91IHVzZSBDTWFrZSwgeW91ciByZWNpcGUgbmVlZHMgdG8gaW5oZXJpdAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1jbWFrZSc+PGZpbGVuYW1lPmNtYWtlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgYW5kIHlvdXIgcmVjaXBlIGRvZXMgbm90IGhhdmUgdG8gY29udGFpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gbWFrZSBzb21lIGFkanVzdG1lbnRzIGJ5IHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRSQV9PRUNNQUtFJz48ZmlsZW5hbWU+RVhUUkFfT0VDTUFLRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHBhc3MgYW55IG5lZWRlZCBjb25maWd1cmUgb3B0aW9ucyB0aGF0IGFyZSBzcGVjaWZpYworICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHJlY2lwZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5PdGhlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBzb3VyY2UgZmlsZXMgZG8gbm90IGhhdmUgYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmZpZ3VyZS5hYzwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q01ha2VMaXN0cy50eHQ8L2ZpbGVuYW1lPiBmaWxlLCB0aGVuIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvZnR3YXJlIGlzIGJ1aWx0IHVzaW5nIHNvbWUgbWV0aG9kIG90aGVyIHRoYW4gQXV0b3Rvb2xzCisgICAgICAgICAgICAgICAgICAgICAgICBvciBDTWFrZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHlvdSBub3JtYWxseSBuZWVkIHRvIHByb3ZpZGUgYQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgaW4geW91ciByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHVubGVzcywgb2YgY291cnNlLCB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbmZpZ3VyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkV2ZW4gaWYgeW91ciBzb2Z0d2FyZSBpcyBub3QgYmVpbmcgYnVpbHQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIEF1dG90b29scyBvciBDTWFrZSwgeW91IHN0aWxsIG1pZ2h0IG5vdCBuZWVkIHRvIGRlYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYW55IGNvbmZpZ3VyYXRpb24gaXNzdWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGNvbmZpZ3VyYXRpb24gaXMgZXZlbiBhIHJlcXVpcmVkIHN0ZXAuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbWlnaHQgbmVlZCB0byBtb2RpZnkgYSBNYWtlZmlsZSBvciBzb21lIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBmb3IgdGhlIGJ1aWxkIHRvIHNwZWNpZnkgbmVjZXNzYXJ5IGJ1aWxkIG9wdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICBPciwgcGVyaGFwcyB5b3UgbWlnaHQgbmVlZCB0byBydW4gYSBwcm92aWRlZCwgY3VzdG9tCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgc2NyaXB0IHdpdGggdGhlIGFwcHJvcHJpYXRlIG9wdGlvbnMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIHRoZSBjYXNlIGludm9sdmluZyBhIGN1c3RvbSBjb25maWd1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCwgeW91IHdvdWxkIHJ1bgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi4vY29uZmlndXJlIC0taGVscDwvZmlsZW5hbWU+IGFuZCBsb29rIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG9wdGlvbnMgeW91IG5lZWQgdG8gc2V0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIGNvbmZpZ3VyYXRpb24gc3VjY2VlZHMsIGl0IGlzIGFsd2F5cyBnb29kIHByYWN0aWNlIHRvCisgICAgICAgICAgICAgICAgbG9vayBhdCB0aGUgPGZpbGVuYW1lPmxvZy5kb19jb25maWd1cmU8L2ZpbGVuYW1lPiBmaWxlIHRvCisgICAgICAgICAgICAgICAgZW5zdXJlIHRoYXQgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbnMgaGF2ZSBiZWVuIGVuYWJsZWQgYW5kIG5vCisgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBuZWVkIHRvIGJlIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgcmVwb3J0cyB0aGF0IGl0IGZvdW5kCisgICAgICAgICAgICAgICAgc29tZXRoaW5nIG5vdCBtZW50aW9uZWQgaW4gPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPiwgb3IKKyAgICAgICAgICAgICAgICB0aGF0IGl0IGRpZCBub3QgZmluZCBzb21ldGhpbmcgdGhhdCBpdCBuZWVkZWQgZm9yIHNvbWUKKyAgICAgICAgICAgICAgICBkZXNpcmVkIG9wdGlvbmFsIGZ1bmN0aW9uYWxpdHksIHRoZW4geW91IHdvdWxkIG5lZWQgdG8gYWRkCisgICAgICAgICAgICAgICAgdGhvc2UgdG8gPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBMb29raW5nIGF0IHRoZSBsb2cgbWlnaHQgYWxzbyByZXZlYWwgaXRlbXMgYmVpbmcgY2hlY2tlZCBmb3IsCisgICAgICAgICAgICAgICAgZW5hYmxlZCwgb3IgYm90aCB0aGF0IHlvdSBkbyBub3Qgd2FudCwgb3IgaXRlbXMgbm90IGJlaW5nIGZvdW5kCisgICAgICAgICAgICAgICAgdGhhdCBhcmUgaW4gPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPiwgaW4gd2hpY2ggY2FzZQorICAgICAgICAgICAgICAgIHlvdSB3b3VsZCBuZWVkIHRvIGxvb2sgYXQgcGFzc2luZyBleHRyYSBvcHRpb25zIHRvIHRoZQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBzY3JpcHQgYXMgbmVlZGVkLgorICAgICAgICAgICAgICAgIEZvciByZWZlcmVuY2UgaW5mb3JtYXRpb24gb24gY29uZmlndXJlIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlCisgICAgICAgICAgICAgICAgc29mdHdhcmUgeW91IGFyZSBidWlsZGluZywgeW91IGNhbiBjb25zdWx0IHRoZSBvdXRwdXQgb2YgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi4vY29uZmlndXJlIC0taGVscDwvZmlsZW5hbWU+IGNvbW1hbmQgd2l0aGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7U308L2ZpbGVuYW1lPiBvciBjb25zdWx0IHRoZSBzb2Z0d2FyZSdzIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWNvbXBpbGF0aW9uJz4KKyAgICAgICAgICAgIDx0aXRsZT5Db21waWxhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIER1cmluZyBhIGJ1aWxkLCB0aGUgPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPiB0YXNrCisgICAgICAgICAgICAgICAgaGFwcGVucyBhZnRlciBzb3VyY2UgaXMgZmV0Y2hlZCwgdW5wYWNrZWQsIGFuZCBjb25maWd1cmVkLgorICAgICAgICAgICAgICAgIElmIHRoZSByZWNpcGUgcGFzc2VzIHRocm91Z2ggPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSwgbm90aGluZyBuZWVkcyB0byBiZSBkb25lLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB0aGUgY29tcGlsZSBzdGVwIGZhaWxzLCB5b3UgbmVlZCB0byBkaWFnbm9zZSB0aGUKKyAgICAgICAgICAgICAgICBmYWlsdXJlLgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgY29tbW9uIGlzc3VlcyB0aGF0IGNhdXNlIGZhaWx1cmVzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGFyYWxsZWwgYnVpbGQgZmFpbHVyZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZXNlIGZhaWx1cmVzIG1hbmlmZXN0IHRoZW1zZWx2ZXMgYXMgaW50ZXJtaXR0ZW50CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMsIG9yIGVycm9ycyByZXBvcnRpbmcgdGhhdCBhIGZpbGUgb3IgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSBjcmVhdGVkIGJ5IHNvbWUgb3RoZXIgcGFydCBvZiB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgY291bGQgbm90IGJlIGZvdW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB0eXBlIG9mIGZhaWx1cmUgY2FuIG9jY3VyIGV2ZW4gaWYsIHVwb24gaW5zcGVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBkb2VzIGV4aXN0IGFmdGVyIHRoZSBidWlsZCBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCwgYmVjYXVzZSB0aGF0IHBhcnQgb2YgdGhlIGJ1aWxkIHByb2Nlc3MgaGFwcGVuZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSB3cm9uZyBvcmRlci48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UbyBmaXggdGhlIHByb2JsZW0sIHlvdSBuZWVkIHRvIGVpdGhlciBzYXRpc2Z5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWlzc2luZyBkZXBlbmRlbmN5IGluIHRoZSBNYWtlZmlsZSBvciB3aGF0ZXZlcgorICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0IHByb2R1Y2VkIHRoZSBNYWtlZmlsZSwgb3IgKGFzIGEgd29ya2Fyb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBUkFMTEVMX01BS0UnPjxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdG8gYW4gZW1wdHkgc3RyaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQVJBTExFTF9NQUtFID0gIiIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gcGFyYWxsZWwgTWFrZWZpbGUgaXNzdWVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2RlYnVnZ2luZy1wYXJhbGxlbC1tYWtlLXJhY2VzJz5EZWJ1Z2dpbmcgUGFyYWxsZWwgTWFrZSBSYWNlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbXByb3BlciBob3N0IHBhdGggdXNhZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmFpbHVyZSBhcHBsaWVzIHRvIHJlY2lwZXMgYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiBvbmx5LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZhaWx1cmUgb2NjdXJzIHdoZW4gdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MgdXNlcworICAgICAgICAgICAgICAgICAgICAgICAgaW1wcm9wZXIgaGVhZGVycywgbGlicmFyaWVzLCBvciBvdGhlciBmaWxlcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCBzeXN0ZW0gd2hlbiBjcm9zcy1jb21waWxpbmcgZm9yIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UbyBmaXggdGhlIHByb2JsZW0sIGV4YW1pbmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9nLmRvX2NvbXBpbGU8L2ZpbGVuYW1lPiBmaWxlIHRvIGlkZW50aWZ5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaG9zdCBwYXRocyBiZWluZyB1c2VkIChlLmcuCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9pbmNsdWRlPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9saWI8L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoKSBhbmQgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgZWl0aGVyIGFkZCBjb25maWd1cmUgb3B0aW9ucywgYXBwbHkgYSBwYXRjaCwgb3IgZG8gYm90aC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkZhaWx1cmUgdG8gZmluZCByZXF1aXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzL2hlYWRlcnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIGEgYnVpbGQtdGltZSBkZXBlbmRlbmN5IGlzIG1pc3NpbmcgYmVjYXVzZSBpdCBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBiZWVuIGRlY2xhcmVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgb3IgYmVjYXVzZSB0aGUgZGVwZW5kZW5jeSBleGlzdHMgYnV0IHRoZSBwYXRoIHVzZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBwcm9jZXNzIHRvIGZpbmQgdGhlIGZpbGUgaXMgaW5jb3JyZWN0IGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBzdGVwIGRpZCBub3QgZGV0ZWN0IGl0LCB0aGUgY29tcGlsYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgY291bGQgZmFpbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBlaXRoZXIgb2YgdGhlc2UgZmFpbHVyZXMsIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzCisgICAgICAgICAgICAgICAgICAgICAgICBub3RlcyB0aGF0IGZpbGVzIGNvdWxkIG5vdCBiZSBmb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZXNlIGNhc2VzLCB5b3UgbmVlZCB0byBnbyBiYWNrIGFuZCBhZGQgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB0byB0aGUgY29uZmlndXJlIHNjcmlwdCBhcyB3ZWxsIGFzIHBvc3NpYmx5CisgICAgICAgICAgICAgICAgICAgICAgICBhZGQgYWRkaXRpb25hbCBidWlsZC10aW1lIGRlcGVuZGVuY2llcyB0bworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5PY2Nhc2lvbmFsbHksIGl0IGlzIG5lY2Vzc2FyeSB0byBhcHBseSBhIHBhdGNoCisgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgc291cmNlIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBwYXRocyBhcmUgdXNlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIHNwZWNpZnkgcGF0aHMgdG8gZmluZCBmaWxlcyBzdGFnZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIHN5c3Jvb3QgZnJvbSBvdGhlciByZWNpcGVzLCB1c2UgdGhlIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwcm92aWRlcworICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TVEFHSU5HX0JJTkRJUjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNUQUdJTkdfSU5DRElSPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1RBR0lOR19EQVRBRElSPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aCkuCis8IS0tCisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNUQUdJTkdfQklORElSJz48ZmlsZW5hbWU+U1RBR0lOR19CSU5ESVI8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNUQUdJTkdfSU5DRElSJz48ZmlsZW5hbWU+U1RBR0lOR19JTkNESVI8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNUQUdJTkdfREFUQURJUic+PGZpbGVuYW1lPlNUQUdJTkdfREFUQURJUjwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGgpLgorLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWluc3RhbGxpbmcnPgorICAgICAgICAgICAgPHRpdGxlPkluc3RhbGxpbmc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEdXJpbmcgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiwgdGhlIHRhc2sgY29waWVzIHRoZQorICAgICAgICAgICAgICAgIGJ1aWx0IGZpbGVzIGFsb25nIHdpdGggdGhlaXIgaGllcmFyY2h5IHRvIGxvY2F0aW9ucyB0aGF0CisgICAgICAgICAgICAgICAgd291bGQgbWlycm9yIHRoZWlyIGxvY2F0aW9ucyBvbiB0aGUgdGFyZ2V0IGRldmljZS4KKyAgICAgICAgICAgICAgICBUaGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MgY29waWVzIGZpbGVzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CJz48ZmlsZW5hbWU+QjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyB0byB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHRvIGNyZWF0ZSB0aGUgc3RydWN0dXJlIGFzIGl0IHNob3VsZCBhcHBlYXIgb24gdGhlCisgICAgICAgICAgICAgICAgdGFyZ2V0IHN5c3RlbS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSG93IHlvdXIgc29mdHdhcmUgaXMgYnVpbHQgYWZmZWN0cyB3aGF0IHlvdSBtdXN0IGRvIHRvIGJlCisgICAgICAgICAgICAgICAgc3VyZSB5b3VyIHNvZnR3YXJlIGlzIGluc3RhbGxlZCBjb3JyZWN0bHkuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyB3aGF0IHlvdSBtdXN0IGRvIGZvciBpbnN0YWxsYXRpb24KKyAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgYnVpbGQgc3lzdGVtIHVzZWQgYnkgdGhlIHNvZnR3YXJlCisgICAgICAgICAgICAgICAgYmVpbmcgYnVpbHQ6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BdXRvdG9vbHMgYW5kIENNYWtlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgc29mdHdhcmUgeW91ciByZWNpcGUgaXMgYnVpbGRpbmcgdXNlcyBBdXRvdG9vbHMKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIENNYWtlLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gdW5kZXJzdGFuZHMgaG93IHRvIGluc3RhbGwgdGhlIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgZG8gbm90IGhhdmUgdG8gaGF2ZSBhCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IHRhc2sgYXMgcGFydCBvZiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW5zdGFsbCBwb3J0aW9uIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgY29tcGxldGVzIHdpdGggbm8gaXNzdWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IHdpc2ggdG8gaW5zdGFsbCBhZGRpdGlvbmFsIGZpbGVzIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBiZWluZyBpbnN0YWxsZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYWtlIGluc3RhbGw8L2ZpbGVuYW1lPiwgeW91IHNob3VsZCBkbyB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyBhIDxmaWxlbmFtZT5kb19pbnN0YWxsX2FwcGVuZDwvZmlsZW5hbWU+IGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgaW5zdGFsbCBjb21tYW5kIGFzIGRlc2NyaWJlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlICJNYW51YWwiIGJ1bGxldGVkIGl0ZW0gbGF0ZXIgaW4gdGhpcyBsaXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T3RoZXIgKHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFrZSBpbnN0YWxsPC9maWxlbmFtZT4pOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBkZWZpbmUgYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiBmdW5jdGlvbiBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gc2hvdWxkIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZV9ydW5tYWtlIGluc3RhbGw8L2ZpbGVuYW1lPiBhbmQgd2lsbCBsaWtlbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gcGFzcyBpbiB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGFzIHdlbGwuCisgICAgICAgICAgICAgICAgICAgICAgICBIb3cgeW91IHBhc3MgdGhhdCBwYXRoIGlzIGRlcGVuZGVudCBvbiBob3cgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiBiZWluZyBydW4gaXMgd3JpdHRlbgorICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPkRFU1RESVI9JHtEfTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSRUZJWD0ke0R9PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU5TVEFMTFJPT1Q9JHtEfTwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGgpLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGFuIGV4YW1wbGUgcmVjaXBlIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFrZSBpbnN0YWxsPC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSduZXctcmVjaXBlLW1ha2VmaWxlLWJhc2VkLXBhY2thZ2UnPk1ha2VmaWxlLUJhc2VkIFBhY2thZ2U8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYW51YWw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGRlZmluZSBhCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IGZ1bmN0aW9uIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiBtdXN0IGZpcnN0IHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluc3RhbGwgLWQ8L2ZpbGVuYW1lPiB0byBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRCc+PGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIGRpcmVjdG9yaWVzIGV4aXN0LCB5b3VyIGZ1bmN0aW9uIGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbnN0YWxsPC9maWxlbmFtZT4gdG8gbWFudWFsbHkgaW5zdGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0IHNvZnR3YXJlIGludG8gdGhlIGRpcmVjdG9yaWVzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5zdGFsbDwvZmlsZW5hbWU+IGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY29yZXV0aWxzL21hbnVhbC9odG1sX25vZGUvaW5zdGFsbC1pbnZvY2F0aW9uLmh0bWwnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciB0aGUgc2NlbmFyaW9zIHRoYXQgZG8gbm90IHVzZSBBdXRvdG9vbHMgb3IKKyAgICAgICAgICAgICAgICBDTWFrZSwgeW91IG5lZWQgdG8gdHJhY2sgdGhlIGluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgIGFuZCBkaWFnbm9zZSBhbmQgZml4IGFueSBpc3N1ZXMgdW50aWwgZXZlcnl0aGluZyBpbnN0YWxscworICAgICAgICAgICAgICAgIGNvcnJlY3RseS4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBsb29rIGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7RH08L2ZpbGVuYW1lPiwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtXT1JLRElSfS9pbWFnZTwvZmlsZW5hbWU+LCB0byBiZSBzdXJlIHlvdXIKKyAgICAgICAgICAgICAgICBmaWxlcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGNvcnJlY3RseS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBEdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLCB5b3UgbWlnaHQgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZ5IHNvbWUgb2YgdGhlIGluc3RhbGxlZCBmaWxlcyB0byBzdWl0IHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgbmVlZCB0byByZXBsYWNlIGhhcmQtY29kZWQgcGF0aHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIGFuIGluaXRzY3JpcHQgd2l0aCB2YWx1ZXMgb2YgdmFyaWFibGVzIHByb3ZpZGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgc3lzdGVtLCBzdWNoIGFzIHJlcGxhY2luZworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvYmluLzwvZmlsZW5hbWU+IHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2JpbmRpcn08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBwZXJmb3JtIHN1Y2ggbW9kaWZpY2F0aW9ucyBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4sIGJlIHN1cmUgdG8gbW9kaWZ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gZmlsZSBhZnRlciBjb3B5aW5nIHJhdGhlciB0aGFuIGJlZm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgY29weWluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIE1vZGlmeWluZyBhZnRlciBjb3B5aW5nIGVuc3VyZXMgdGhhdCB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICBjYW4gcmUtZXhlY3V0ZSA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IGlmCisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9lX3J1bm1ha2UgaW5zdGFsbDwvZmlsZW5hbWU+LCB3aGljaCBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1biBkaXJlY3RseSBvciBjYW4gYmUgcnVuIGluZGlyZWN0bHkgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLWNtYWtlJz48ZmlsZW5hbWU+Y21ha2U8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLCBydW5zIDxmaWxlbmFtZT5tYWtlIGluc3RhbGw8L2ZpbGVuYW1lPiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWxsZWwuCisgICAgICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMsIGEgTWFrZWZpbGUgY2FuIGhhdmUgbWlzc2luZyBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJldHdlZW4gdGFyZ2V0cyB0aGF0IGNhbiByZXN1bHQgaW4gcmFjZSBjb25kaXRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGV4cGVyaWVuY2UgaW50ZXJtaXR0ZW50IGZhaWx1cmVzIGR1cmluZworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiwgeW91IG1pZ2h0IGJlIGFibGUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmsgYXJvdW5kIHRoZW0gYnkgZGlzYWJsaW5nIHBhcmFsbGVsIE1ha2VmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxscyBieSBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB0aGUgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQVJBTExFTF9NQUtFSU5TVCA9ICIiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBTZWUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQVJBTExFTF9NQUtFSU5TVCc+PGZpbGVuYW1lPlBBUkFMTEVMX01BS0VJTlNUPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWVuYWJsaW5nLXN5c3RlbS1zZXJ2aWNlcyc+CisgICAgICAgICAgICA8dGl0bGU+RW5hYmxpbmcgU3lzdGVtIFNlcnZpY2VzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gaW5zdGFsbCBhIHNlcnZpY2UsIHdoaWNoIGlzIGEgcHJvY2VzcyB0aGF0CisgICAgICAgICAgICAgICAgdXN1YWxseSBzdGFydHMgb24gYm9vdCBhbmQgcnVucyBpbiB0aGUgYmFja2dyb3VuZCwgdGhlbgorICAgICAgICAgICAgICAgIHlvdSBtdXN0IGluY2x1ZGUgc29tZSBhZGRpdGlvbmFsIGRlZmluaXRpb25zIGluIHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGFkZGluZyBzZXJ2aWNlcyBhbmQgdGhlIHNlcnZpY2UgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICAgICAgICBzY3JpcHQgb3IgdGhlIHNlcnZpY2UgZmlsZSBpdHNlbGYgaXMgbm90IGluc3RhbGxlZCwgeW91IG11c3QKKyAgICAgICAgICAgICAgICBwcm92aWRlIGZvciB0aGF0IGluc3RhbGxhdGlvbiBpbiB5b3VyIHJlY2lwZSB1c2luZyBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGxfYXBwZW5kPC9maWxlbmFtZT4gZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgSWYgeW91ciByZWNpcGUgYWxyZWFkeSBoYXMgYSA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZnVuY3Rpb24sIHVwZGF0ZSB0aGUgZnVuY3Rpb24gbmVhciBpdHMgZW5kIHJhdGhlciB0aGFuCisgICAgICAgICAgICAgICAgYWRkaW5nIGFuIGFkZGl0aW9uYWwgPGZpbGVuYW1lPmRvX2luc3RhbGxfYXBwZW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmdW5jdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIHRoZSBpbnN0YWxsYXRpb24gZm9yIHlvdXIgc2VydmljZXMsIHlvdSBuZWVkCisgICAgICAgICAgICAgICAgdG8gYWNjb21wbGlzaCB3aGF0IGlzIG5vcm1hbGx5IGRvbmUgYnkKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFrZSBpbnN0YWxsPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIG1ha2Ugc3VyZSB5b3VyIGluc3RhbGxhdGlvbiBhcnJhbmdlcyB0aGUgb3V0cHV0CisgICAgICAgICAgICAgICAgc2ltaWxhciB0byBob3cgaXQgaXMgYXJyYW5nZWQgb24gdGhlIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHN0YXJ0aW5nCisgICAgICAgICAgICAgICAgc2VydmljZXMgdHdvIGRpZmZlcmVudCB3YXlzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3lzVmluaXQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c1Zpbml0IGlzIGEgc3lzdGVtIGFuZCBzZXJ2aWNlIG1hbmFnZXIgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlcyB0aGUgaW5pdCBzeXN0ZW0gdXNlZCB0byBjb250cm9sIHRoZSB2ZXJ5IGJhc2ljCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMgb2YgeW91ciBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgaW5pdCBwcm9ncmFtIGlzIHRoZSBmaXJzdCBwcm9ncmFtCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgd2hlbiB0aGUgc3lzdGVtIGJvb3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgSW5pdCB0aGVuIGNvbnRyb2xzIHRoZSBzdGFydHVwLCBydW5uaW5nIGFuZCBzaHV0ZG93bgorICAgICAgICAgICAgICAgICAgICAgICAgb2YgYWxsIG90aGVyIHByb2dyYW1zLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRvIGVuYWJsZSBhIHNlcnZpY2UgdXNpbmcgU3lzVmluaXQsIHlvdXIgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkcyB0byBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtdXBkYXRlLXJjLmQnPjxmaWxlbmFtZT51cGRhdGUtcmMuZDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIGhlbHBzIGZhY2lsaXRhdGUgc2FmZWx5IGluc3RhbGxpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG9uIHRoZSB0YXJnZXQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IHdpbGwgbmVlZCB0byBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU5JVFNDUklQVF9QQUNLQUdFUyc+PGZpbGVuYW1lPklOSVRTQ1JJUFRfUEFDS0FHRVM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlOSVRTQ1JJUFRfTkFNRSc+PGZpbGVuYW1lPklOSVRTQ1JJUFRfTkFNRTwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTklUU0NSSVBUX1BBUkFNUyc+PGZpbGVuYW1lPklOSVRTQ1JJUFRfUEFSQU1TPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIHdpdGhpbiB5b3VyIHJlY2lwZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zeXN0ZW1kOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gTWFuYWdlbWVudCBEYWVtb24gKHN5c3RlbWQpIHdhcyBkZXNpZ25lZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZSBTeXNWaW5pdCBhbmQgdG8gcHJvdmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgZW5oYW5jZWQgbWFuYWdlbWVudCBvZiBzZXJ2aWNlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHN5c3RlbWQsIHNlZSB0aGUgc3lzdGVtZAorICAgICAgICAgICAgICAgICAgICAgICAgaG9tZXBhZ2UgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9zeXN0ZW1kLyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UbyBlbmFibGUgYSBzZXJ2aWNlIHVzaW5nIHN5c3RlbWQsIHlvdXIgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkcyB0byBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtc3lzdGVtZCc+PGZpbGVuYW1lPnN5c3RlbWQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgPGZpbGVuYW1lPnN5c3RlbWQuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgaW4geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1wYWNrYWdpbmcnPgorICAgICAgICAgICAgPHRpdGxlPlBhY2thZ2luZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFN1Y2Nlc3NmdWwgcGFja2FnaW5nIGlzIGEgY29tYmluYXRpb24gb2YgYXV0b21hdGVkIHByb2Nlc3NlcworICAgICAgICAgICAgICAgIHBlcmZvcm1lZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhbmQgc29tZQorICAgICAgICAgICAgICAgIHNwZWNpZmljIHN0ZXBzIHlvdSBuZWVkIHRvIHRha2UuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyB0aGUgcHJvY2VzczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNwbGl0dGluZyBGaWxlczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT4gdGFzayBzcGxpdHMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyBwcm9kdWNlZCBieSB0aGUgcmVjaXBlIGludG8gbG9naWNhbCBjb21wb25lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgRXZlbiBzb2Z0d2FyZSB0aGF0IHByb2R1Y2VzIGEgc2luZ2xlIGJpbmFyeSBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGwgaGF2ZSBkZWJ1ZyBzeW1ib2xzLCBkb2N1bWVudGF0aW9uLCBhbmQgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWwgY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBzcGxpdCBvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPiB0YXNrIGVuc3VyZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgZmlsZXMgYXJlIHNwbGl0IHVwIGFuZCBwYWNrYWdlZCBjb3JyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SdW5uaW5nIFFBIENoZWNrczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1pbnNhbmUnPjxmaWxlbmFtZT5pbnNhbmU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBhZGRzIGEgc3RlcCB0bworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBhY2thZ2UgZ2VuZXJhdGlvbiBwcm9jZXNzIHNvIHRoYXQgb3V0cHV0IHF1YWxpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc3VyYW5jZSBjaGVja3MgYXJlIGdlbmVyYXRlZCBieSB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHN0ZXAgcGVyZm9ybXMgYSByYW5nZSBvZiBjaGVja3MgdG8gYmUgc3VyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkJ3Mgb3V0cHV0IGlzIGZyZWUgb2YgY29tbW9uIHByb2JsZW1zIHRoYXQgc2hvdworICAgICAgICAgICAgICAgICAgICAgICAgdXAgZHVyaW5nIHJ1bnRpbWUuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlc2UgY2hlY2tzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1pbnNhbmUnPjxmaWxlbmFtZT5pbnNhbmU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXFhLWNoZWNrcyc+UUEgRXJyb3IgYW5kIFdhcm5pbmcgTWVzc2FnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkhhbmQtQ2hlY2tpbmcgWW91ciBQYWNrYWdlczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgeW91IGJ1aWxkIHlvdXIgc29mdHdhcmUsIHlvdSBuZWVkIHRvIGJlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgcGFja2FnZXMgYXJlIGNvcnJlY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBFeGFtaW5lIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn0vcGFja2FnZXMtc3BsaXQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCBtYWtlIHN1cmUgZmlsZXMgYXJlIHdoZXJlIHlvdSBleHBlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZW0gdG8gYmUuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZGlzY292ZXIgcHJvYmxlbXMsIHlvdSBjYW4gc2V0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbChfYXBwZW5kKTwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNwbGl0dGluZyBhbiBBcHBsaWNhdGlvbiBpbnRvIE11bHRpcGxlIFBhY2thZ2VzPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBzcGxpdCBhbiBhcHBsaWNhdGlvbiBpbnRvIHNldmVyYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3BsaXR0aW5nLWFuLWFwcGxpY2F0aW9uLWludG8tbXVsdGlwbGUtcGFja2FnZXMnPlNwbGl0dGluZyBhbiBBcHBsaWNhdGlvbiBpbnRvIE11bHRpcGxlIFBhY2thZ2VzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGFuIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbnN0YWxsaW5nIGEgUG9zdC1JbnN0YWxsYXRpb24gU2NyaXB0PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBzaG93aW5nIGhvdyB0byBpbnN0YWxsIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc3QtaW5zdGFsbGF0aW9uIHNjcmlwdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J25ldy1yZWNpcGUtcG9zdC1pbnN0YWxsYXRpb24tc2NyaXB0cyc+UG9zdC1JbnN0YWxsYXRpb24gU2NyaXB0czwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFya2luZyBQYWNrYWdlIEFyY2hpdGVjdHVyZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHdoYXQgeW91ciByZWNpcGUgaXMgYnVpbGRpbmcgYW5kIGhvdyBpdAorICAgICAgICAgICAgICAgICAgICAgICAgaXMgY29uZmlndXJlZCwgaXQgbWlnaHQgYmUgaW1wb3J0YW50IHRvIG1hcmsgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBwcm9kdWNlZCBhcyBiZWluZyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUsIG9yIHRvIG1hcmsgdGhlbSBhcyBub3QgYmVpbmcgc3BlY2lmaWMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGEgcGFydGljdWxhciBtYWNoaW5lIG9yIGFyY2hpdGVjdHVyZSBhdCBhbGwuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBwYWNrYWdlcyBwcm9kdWNlZCBmb3IgdGhlIHRhcmdldCBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlZCBhcyBiZWluZyBzcGVjaWZpYyB0byB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IG1hY2hpbmUgYmVjYXVzZSB0aGF0IGlzIHVzdWFsbHkgdGhlIGRlc2lyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHRoZSByZWNpcGUgY29uZmlndXJlcyB0aGUgc29mdHdhcmUgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0IHNwZWNpZmljIHRvIHRoZSB0YXJnZXQgbWFjaGluZSAoZS5nLiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGlzIHBhc3NlZCBpbnRvIHRoZSBjb25maWd1cmUgc2NyaXB0IG9yIGEgcGF0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFwcGxpZWQgb25seSBmb3IgYSBwYXJ0aWN1bGFyIG1hY2hpbmUpLCB0aGVuIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIG1hcmsgdGhlIHBhY2thZ2VzIHByb2R1Y2VkIGFzIGJlaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSByZWNpcGUgcHJvZHVjZXMgcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgZG8gbm90IGNvbnRhaW4gYW55dGhpbmcgc3BlY2lmaWMgdG8gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZSBvciBhcmNoaXRlY3R1cmUgYXQgYWxsIChlLmcuIHJlY2lwZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc2ltcGx5IHBhY2thZ2Ugc2NyaXB0IGZpbGVzIG9yIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzKSwgeW91IHNob3VsZCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1hbGxhcmNoJz48ZmlsZW5hbWU+YWxsYXJjaDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIHRvIGRvIHRoaXMgZm9yIHlvdSBieSBhZGRpbmcgdGhpcyB0byB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGluaGVyaXQgYWxsYXJjaAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgRW5zdXJpbmcgdGhhdCB0aGUgcGFja2FnZSBhcmNoaXRlY3R1cmUgaXMgY29ycmVjdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgbm90IGNyaXRpY2FsIHdoaWxlIHlvdSBhcmUgZG9pbmcgdGhlIGZpcnN0IGZldyBidWlsZHMKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaXQgaXMgaW1wb3J0YW50IGluIG9yZGVyCisgICAgICAgICAgICAgICAgICAgICAgICB0byBlbnN1cmUgdGhhdCB5b3VyIHJlY2lwZSByZWJ1aWxkcyAob3IgZG9lcyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYnVpbGQpIGFwcHJvcHJpYXRlbHkgaW4gcmVzcG9uc2UgdG8gY2hhbmdlcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiwgYW5kIHRvIGVuc3VyZSB0aGF0IHlvdSBnZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZSBwYWNrYWdlcyBpbnN0YWxsZWQgb24gdGhlIHRhcmdldCBtYWNoaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljdWxhcmx5IGlmIHlvdSBydW4gc2VwYXJhdGUgYnVpbGRzIGZvciBtb3JlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIG9uZSB0YXJnZXQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Byb3Blcmx5LXZlcnNpb25pbmctcHJlLXJlbGVhc2UtcmVjaXBlcyc+CisgICAgICAgICAgICA8dGl0bGU+UHJvcGVybHkgVmVyc2lvbmluZyBQcmUtUmVsZWFzZSBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU29tZXRpbWVzIHRoZSBuYW1lIG9mIGEgcmVjaXBlIGNhbiBsZWFkIHRvIHZlcnNpb25pbmcKKyAgICAgICAgICAgICAgICBwcm9ibGVtcyB3aGVuIHRoZSByZWNpcGUgaXMgdXBncmFkZWQgdG8gYSBmaW5hbCByZWxlYXNlLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aXJzc2lfMC44LjE2LXJjMS5iYjwvZmlsZW5hbWU+IHJlY2lwZSBmaWxlIGluCisgICAgICAgICAgICAgICAgdGhlIGxpc3Qgb2YgZXhhbXBsZSByZWNpcGVzIGluIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSduZXctcmVjaXBlLXN0b3JpbmctYW5kLW5hbWluZy10aGUtcmVjaXBlJz5TdG9yaW5nIGFuZCBOYW1pbmcgdGhlIFJlY2lwZTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBpcyBhdCBhIHJlbGVhc2UgY2FuZGlkYXRlIHN0YWdlIChpLmUuCisgICAgICAgICAgICAgICAgInJjMSIpLgorICAgICAgICAgICAgICAgIFdoZW4gdGhlIHJlY2lwZSBpcyByZWxlYXNlZCwgdGhlIHJlY2lwZSBmaWxlbmFtZSBiZWNvbWVzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmlyc3NpXzAuOC4xNi5iYjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSB2ZXJzaW9uIGNoYW5nZSBmcm9tIDxmaWxlbmFtZT4wLjguMTYtcmMxPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB0byA8ZmlsZW5hbWU+MC44LjE2PC9maWxlbmFtZT4gaXMgc2VlbiBhcyBhIGRlY3JlYXNlIGJ5IHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBhbmQgcGFja2FnZSBtYW5hZ2Vycywgc28gdGhlIHJlc3VsdGluZyBwYWNrYWdlcworICAgICAgICAgICAgICAgIHdpbGwgbm90IGNvcnJlY3RseSB0cmlnZ2VyIGFuIHVwZ3JhZGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIGVuc3VyZSB0aGUgdmVyc2lvbnMgY29tcGFyZSBwcm9wZXJseSwgdGhlCisgICAgICAgICAgICAgICAgcmVjb21tZW5kZWQgY29udmVudGlvbiBpcyB0byBzZXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIHJlY2lwZSB0bworICAgICAgICAgICAgICAgICI8cmVwbGFjZWFibGU+cHJldmlvdXNfdmVyc2lvbjwvcmVwbGFjZWFibGU+KzxyZXBsYWNlYWJsZT5jdXJyZW50X3ZlcnNpb248L3JlcGxhY2VhYmxlPiIuCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgYW4gYWRkaXRpb25hbCB2YXJpYWJsZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgIGN1cnJlbnQgdmVyc2lvbiBlbHNld2hlcmUuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkVBTFBWID0gIjAuOC4xNi1yYzEiCisgICAgIFBWID0gIjAuOC4xNSske1JFQUxQVn0iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtcG9zdC1pbnN0YWxsYXRpb24tc2NyaXB0cyc+CisgICAgICAgICAgICA8dGl0bGU+UG9zdC1JbnN0YWxsYXRpb24gU2NyaXB0czwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFBvc3QtaW5zdGFsbGF0aW9uIHNjcmlwdHMgcnVuIGltbWVkaWF0ZWx5IGFmdGVyIGluc3RhbGxpbmcKKyAgICAgICAgICAgICAgICBhIHBhY2thZ2Ugb24gdGhlIHRhcmdldCBvciBkdXJpbmcgaW1hZ2UgY3JlYXRpb24gd2hlbiBhCisgICAgICAgICAgICAgICAgcGFja2FnZSBpcyBpbmNsdWRlZCBpbiBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICBUbyBhZGQgYSBwb3N0LWluc3RhbGxhdGlvbiBzY3JpcHQgdG8gYSBwYWNrYWdlLCBhZGQgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcG9zdGluc3RfUEFDS0FHRU5BTUUoKTwvZmlsZW5hbWU+IGZ1bmN0aW9uIHRvCisgICAgICAgICAgICAgICAgdGhlIHJlY2lwZSBmaWxlICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pIGFuZCByZXBsYWNlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VOQU1FPC9maWxlbmFtZT4gd2l0aCB0aGUgbmFtZSBvZiB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgIHlvdSB3YW50IHRvIGF0dGFjaCB0byB0aGUgPGZpbGVuYW1lPnBvc3RpbnN0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBzY3JpcHQuCisgICAgICAgICAgICAgICAgVG8gYXBwbHkgdGhlIHBvc3QtaW5zdGFsbGF0aW9uIHNjcmlwdCB0byB0aGUgbWFpbiBwYWNrYWdlCisgICAgICAgICAgICAgICAgZm9yIHRoZSByZWNpcGUsIHdoaWNoIGlzIHVzdWFsbHkgd2hhdCBpcyByZXF1aXJlZCwgc3BlY2lmeQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGluIHBsYWNlIG9mIDxmaWxlbmFtZT5QQUNLQUdFTkFNRTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIHBvc3QtaW5zdGFsbGF0aW9uIGZ1bmN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBrZ19wb3N0aW5zdF9QQUNLQUdFTkFNRSgpIHsKKyAgICAgIyBDb21tYW5kcyB0byBjYXJyeSBvdXQKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBkZWZpbmVkIGluIHRoZSBwb3N0LWluc3RhbGxhdGlvbiBmdW5jdGlvbiBpcworICAgICAgICAgICAgICAgIGNhbGxlZCB3aGVuIHRoZSByb290IGZpbGVzeXN0ZW0gaXMgY3JlYXRlZC4KKyAgICAgICAgICAgICAgICBJZiB0aGUgc2NyaXB0IHN1Y2NlZWRzLCB0aGUgcGFja2FnZSBpcyBtYXJrZWQgYXMgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgIElmIHRoZSBzY3JpcHQgZmFpbHMsIHRoZSBwYWNrYWdlIGlzIG1hcmtlZCBhcyB1bnBhY2tlZCBhbmQKKyAgICAgICAgICAgICAgICB0aGUgc2NyaXB0IGlzIGV4ZWN1dGVkIHdoZW4gdGhlIGltYWdlIGJvb3RzIGFnYWluLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTb21ldGltZXMgaXQgaXMgbmVjZXNzYXJ5IGZvciB0aGUgZXhlY3V0aW9uIG9mIGEKKyAgICAgICAgICAgICAgICBwb3N0LWluc3RhbGxhdGlvbiBzY3JpcHQgdG8gYmUgZGVsYXllZCB1bnRpbCB0aGUgZmlyc3QgYm9vdC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIHNjcmlwdCBtaWdodCBuZWVkIHRvIGJlIGV4ZWN1dGVkIG9uIHRoZQorICAgICAgICAgICAgICAgIGRldmljZSBpdHNlbGYuCisgICAgICAgICAgICAgICAgVG8gZGVsYXkgc2NyaXB0IGV4ZWN1dGlvbiB1bnRpbCBib290IHRpbWUsIHVzZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgc3RydWN0dXJlIGluIHRoZSBwb3N0LWluc3RhbGxhdGlvbiBzY3JpcHQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwa2dfcG9zdGluc3RfUEFDS0FHRU5BTUUoKSB7CisgICAgIGlmIFsgeCIkRCIgPSAieCIgXTsgdGhlbgorICAgICAgICAgICMgQWN0aW9ucyB0byBjYXJyeSBvdXQgb24gdGhlIGRldmljZSBnbyBoZXJlCisgICAgIGVsc2UKKyAgICAgICAgICBleGl0IDEKKyAgICAgZmkKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgZGVsYXlzIGV4ZWN1dGlvbiB1bnRpbCB0aGUgaW1hZ2UgYm9vdHMKKyAgICAgICAgICAgICAgICBhZ2FpbiBiZWNhdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8ZmlsZW5hbWU+RDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcG9pbnRzIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgaW1hZ2Ugd2hlbgorICAgICAgICAgICAgICAgIHRoZSByb290IGZpbGVzeXN0ZW0gaXMgY3JlYXRlZCBhdCBidWlsZCB0aW1lIGJ1dCBpcyB1bnNldAorICAgICAgICAgICAgICAgIHdoZW4gZXhlY3V0ZWQgb24gdGhlIGZpcnN0IGJvb3QuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEVxdWl2YWxlbnQgc3VwcG9ydCBmb3IgcHJlLWluc3RhbGwsIHByZS11bmluc3RhbGwsIGFuZAorICAgICAgICAgICAgICAgIHBvc3QtdW5pbnN0YWxsIHNjcmlwdHMgZXhpc3QgYnkgd2F5IG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wcmVpbnN0PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wcmVybTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3Bvc3RybTwvZmlsZW5hbWU+LCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICAgICAgVGhlc2Ugc2NyaXBzIHdvcmsgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgZG9lcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcG9zdGluc3Q8L2ZpbGVuYW1lPiB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGV5CisgICAgICAgICAgICAgICAgcnVuIGF0IGRpZmZlcmVudCB0aW1lcy4KKyAgICAgICAgICAgICAgICBBbHNvLCBiZWNhdXNlIG9mIHdoZW4gdGhleSBydW4sIHRoZXkgYXJlIG5vdCBhcHBsaWNhYmxlIHRvCisgICAgICAgICAgICAgICAgYmVpbmcgcnVuIGF0IGltYWdlIGNyZWF0aW9uIHRpbWUgbGlrZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcG9zdGluc3Q8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLXRlc3RpbmcnPgorICAgICAgICAgICAgPHRpdGxlPlRlc3Rpbmc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZmluYWwgc3RlcCBmb3IgY29tcGxldGluZyB5b3VyIHJlY2lwZSBpcyB0byBiZSBzdXJlIHRoYXQKKyAgICAgICAgICAgICAgICB0aGUgc29mdHdhcmUgeW91IGJ1aWx0IHJ1bnMgY29ycmVjdGx5LgorICAgICAgICAgICAgICAgIFRvIGFjY29tcGxpc2ggcnVudGltZSB0ZXN0aW5nLCBhZGQgdGhlIGJ1aWxkJ3Mgb3V0cHV0CisgICAgICAgICAgICAgICAgcGFja2FnZXMgdG8geW91ciBpbWFnZSBhbmQgdGVzdCB0aGVtIG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3VzdG9taXplIHlvdXIgaW1hZ2UgYnkgYWRkaW5nCisgICAgICAgICAgICAgICAgc3BlY2lmaWMgcGFja2FnZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZSc+Q3VzdG9taXppbmcgSW1hZ2VzPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtdGVzdGluZy1leGFtcGxlcyc+CisgICAgICAgICAgICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBoZWxwIHN1bW1hcml6ZSBob3cgdG8gd3JpdGUgYSByZWNpcGUsIHRoaXMgc2VjdGlvbiBwcm92aWRlcworICAgICAgICAgICAgICAgIHNvbWUgZXhhbXBsZXMgZ2l2ZW4gdmFyaW91cyBzY2VuYXJpb3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJlY2lwZXMgdGhhdCB1c2UgbG9jYWwgZmlsZXM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzaW5nIGFuIEF1dG90b29sZWQgcGFja2FnZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VXNpbmcgYSBNYWtlZmlsZS1iYXNlZCBwYWNrYWdlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TcGxpdHRpbmcgYW4gYXBwbGljYXRpb24gaW50byBtdWx0aXBsZSBwYWNrYWdlczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkaW5nIGJpbmFyaWVzIHRvIGFuIGltYWdlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLXNpbmdsZS1jLWZpbGUtcGFja2FnZS1oZWxsby13b3JsZCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlNpbmdsZSAuYyBGaWxlIFBhY2thZ2UgKEhlbGxvIFdvcmxkISk8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ1aWxkaW5nIGFuIGFwcGxpY2F0aW9uIGZyb20gYSBzaW5nbGUgZmlsZSB0aGF0IGlzIHN0b3JlZAorICAgICAgICAgICAgICAgICAgICBsb2NhbGx5IChlLmcuIHVuZGVyIDxmaWxlbmFtZT5maWxlczwvZmlsZW5hbWU+KSByZXF1aXJlcworICAgICAgICAgICAgICAgICAgICBhIHJlY2lwZSB0aGF0IGhhcyB0aGUgZmlsZSBsaXN0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+U1JDX1VSSTwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgeW91IG5lZWQgdG8gbWFudWFsbHkgd3JpdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gdGFza3MuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPlM8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGRlZmluZXMgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBzb3VyY2UgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhpcyBjYXNlIC0gdGhlIGRpcmVjdG9yeSBCaXRCYWtlIHVzZXMgZm9yIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTVU1NQVJZID0gIlNpbXBsZSBoZWxsb3dvcmxkIGFwcGxpY2F0aW9uIgorICAgICBTRUNUSU9OID0gImV4YW1wbGVzIgorICAgICBMSUNFTlNFID0gIk1JVCIKKyAgICAgTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L01JVDttZDU9MDgzNWFkZTY5OGUwYmNmODUwNmVjZGEyZjdiNGYzMDIiCisKKyAgICAgU1JDX1VSSSA9ICJmaWxlOi8vaGVsbG93b3JsZC5jIgorCisgICAgIFMgPSAiJHtXT1JLRElSfSIKKworICAgICBkb19jb21waWxlKCkgeworICAgICAJJHtDQ30gaGVsbG93b3JsZC5jIC1vIGhlbGxvd29ybGQKKyAgICAgfQorCisgICAgIGRvX2luc3RhbGwoKSB7CisgICAgIAlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKyAgICAgCWluc3RhbGwgLW0gMDc1NSBoZWxsb3dvcmxkICR7RH0ke2JpbmRpcn0KKyAgICAgfQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+aGVsbG93b3JsZDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aGVsbG93b3JsZC1kYmc8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5oZWxsb3dvcmxkLWRldjwvZmlsZW5hbWU+IHBhY2thZ2VzIGFyZSBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjdXN0b21pemUgdGhlIHBhY2thZ2luZyBwcm9jZXNzLAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzcGxpdHRpbmctYW4tYXBwbGljYXRpb24taW50by1tdWx0aXBsZS1wYWNrYWdlcyc+U3BsaXR0aW5nIGFuIEFwcGxpY2F0aW9uIGludG8gTXVsdGlwbGUgUGFja2FnZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtYXV0b3Rvb2xlZC1wYWNrYWdlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+QXV0b3Rvb2xlZCBQYWNrYWdlPC90aXRsZT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25zIHRoYXQgdXNlIEF1dG90b29scyBzdWNoIGFzIDxmaWxlbmFtZT5hdXRvY29uZjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b21ha2U8L2ZpbGVuYW1lPiByZXF1aXJlIGEgcmVjaXBlIHRoYXQgaGFzIGEgc291cmNlIGFyY2hpdmUgbGlzdGVkIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+U1JDX1VSSTwvdWxpbms+PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIGFsc28gaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtYXV0b3Rvb2xzJz48ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgd2hpY2ggY29udGFpbnMgdGhlIGRlZmluaXRpb25zIG9mIGFsbCB0aGUgc3RlcHMKKyAgICAgICAgICAgICAgICAgICAgbmVlZGVkIHRvIGJ1aWxkIGFuIEF1dG90b29sLWJhc2VkIGFwcGxpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBidWlsZCBpcyBhdXRvbWF0aWNhbGx5IHBhY2thZ2VkLgorICAgICAgICAgICAgICAgICAgICBBbmQsIGlmIHRoZSBhcHBsaWNhdGlvbiB1c2VzIE5MUyBmb3IgbG9jYWxpemF0aW9uLCBwYWNrYWdlcyB3aXRoIGxvY2FsIGluZm9ybWF0aW9uIGFyZQorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgKG9uZSBwYWNrYWdlIHBlciBsYW5ndWFnZSkuCisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBvbmUgZXhhbXBsZTogKDxmaWxlbmFtZT5oZWxsb18yLjMuYmI8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTVU1NQVJZID0gIkdOVSBIZWxsb3dvcmxkIGFwcGxpY2F0aW9uIgorICAgICBTRUNUSU9OID0gImV4YW1wbGVzIgorICAgICBMSUNFTlNFID0gIkdQTHYyKyIKKyAgICAgTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCisKKyAgICAgU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2hlbGxvL2hlbGxvLSR7UFZ9LnRhci5neiIKKworICAgICBpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJQ19GSUxFU19DSEtTVU0nPkxJQ19GSUxFU19DSEtTVU08L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIHVzZWQgdG8gdHJhY2sgc291cmNlIGxpY2Vuc2UgY2hhbmdlcyBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN1c2luZ3Bva3ktY29uZmlndXJpbmctTElDX0ZJTEVTX0NIS1NVTSc+VHJhY2tpbmcgTGljZW5zZSBDaGFuZ2VzPC91bGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gcXVpY2tseSBjcmVhdGUgQXV0b3Rvb2wtYmFzZWQgcmVjaXBlcyBpbiBhIG1hbm5lciBzaW1pbGFyIHRvIHRoZSBwcmV2aW91cyBleGFtcGxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtbWFrZWZpbGUtYmFzZWQtcGFja2FnZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPk1ha2VmaWxlLUJhc2VkIFBhY2thZ2U8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9ucyB0aGF0IHVzZSBHTlUgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBhbHNvIHJlcXVpcmUgYSByZWNpcGUgdGhhdCBoYXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIHNvdXJjZSBhcmNoaXZlIGxpc3RlZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPlNSQ19VUkk8L3VsaW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgdG8gYWRkIGEgPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPiBzdGVwIHNpbmNlIGJ5IGRlZmF1bHQgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICBzdGFydHMgdGhlIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gY29tbWFuZCB0byBjb21waWxlIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgYWRkaXRpb25hbCA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IG9wdGlvbnMsIHlvdSBzaG91bGQgc3RvcmUgdGhlbSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRSQV9PRU1BS0UnPkVYVFJBX09FTUFLRTwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgcGFzc2VzIHRoZXNlIG9wdGlvbnMgaW50byB0aGUgR05VIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gaW52b2NhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGEgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiB0YXNrIGlzIHN0aWxsIHJlcXVpcmVkLgorICAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UsIEJpdEJha2UgcnVucyBhbiBlbXB0eSA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IHRhc2sgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTb21lIGFwcGxpY2F0aW9ucyBtaWdodCByZXF1aXJlIGV4dHJhIHBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIHRvIHRoZSBjb21waWxlci4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBhcHBsaWNhdGlvbiBtaWdodCBuZWVkIGFuIGFkZGl0aW9uYWwgaGVhZGVyIHBhdGguCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWNjb21wbGlzaCB0aGlzIGJ5IGFkZGluZyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DRkxBR1MnPkNGTEFHUzwvdWxpbms+PC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyB0aGlzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENGTEFHU19wcmVwZW5kID0gIi1JICR7U30vaW5jbHVkZSAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIDxmaWxlbmFtZT5tdGQtdXRpbHM8L2ZpbGVuYW1lPiBpcyBhIG1ha2VmaWxlLWJhc2VkIHBhY2thZ2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1VNTUFSWSA9ICJUb29scyBmb3IgbWFuYWdpbmcgbWVtb3J5IHRlY2hub2xvZ3kgZGV2aWNlcyIKKyAgICAgU0VDVElPTiA9ICJiYXNlIgorICAgICBERVBFTkRTID0gInpsaWIgbHpvIGUyZnNwcm9ncyB1dGlsLWxpbnV4IgorICAgICBIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpbnV4LW10ZC5pbmZyYWRlYWQub3JnLyIKKyAgICAgTElDRU5TRSA9ICJHUEx2MisiCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9jb21tb24uaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTE3O21kNT1iYTA1YjA3OTEyYTQ0ZWEyYmY4MWNlNDA5MzgwMDQ5YyIKKworICAgICAjIFVzZSB0aGUgbGF0ZXN0IHZlcnNpb24gYXQgMjYgT2N0LCAyMDEzCisgICAgIFNSQ1JFViA9ICI5ZjEwNzEzMmE2YTA3M2NjZTM3NDM0Y2E5Y2RhNjkxN2RkOGQ4NjZiIgorICAgICBTUkNfVVJJID0gImdpdDovL2dpdC5pbmZyYWRlYWQub3JnL210ZC11dGlscy5naXQgXAorICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2FkZC1leGNsdXNpb24tdG8tbWtmcy1qZmZzMi1naXQtMi5wYXRjaCBcCisgICAgICIKKworICAgICBQViA9ICIxLjUuMStnaXQke1NSQ1BWfSIKKworICAgICBTID0gIiR7V09SS0RJUn0vZ2l0LyIKKworICAgICBFWFRSQV9PRU1BS0UgPSAiJ0NDPSR7Q0N9JyAnUkFOTElCPSR7UkFOTElCfScgJ0FSPSR7QVJ9JyAnQ0ZMQUdTPSR7Q0ZMQUdTfSAtSSR7U30vaW5jbHVkZSAtRFdJVEhPVVRfWEFUVFInICdCVUlMRERJUj0ke1N9JyIKKworICAgICBkb19pbnN0YWxsICgpIHsKKyAgICAgICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9IFNCSU5ESVI9JHtzYmluZGlyfSBNQU5ESVI9JHttYW5kaXJ9IElOQ0xVREVESVI9JHtpbmNsdWRlZGlyfQorICAgICB9CisKKyAgICAgUEFDS0FHRVMgPSsgIm10ZC11dGlscy1qZmZzMiBtdGQtdXRpbHMtdWJpZnMgbXRkLXV0aWxzLW1pc2MiCisKKyAgICAgRklMRVNfbXRkLXV0aWxzLWpmZnMyID0gIiR7c2JpbmRpcn0vbWtmcy5qZmZzMiAke3NiaW5kaXJ9L2pmZnMyZHVtcCAke3NiaW5kaXJ9L2pmZnMycmVhZGVyICR7c2JpbmRpcn0vc3VtdG9vbCIKKyAgICAgRklMRVNfbXRkLXV0aWxzLXViaWZzID0gIiR7c2JpbmRpcn0vbWtmcy51YmlmcyAke3NiaW5kaXJ9L3ViaSoiCisgICAgIEZJTEVTX210ZC11dGlscy1taXNjID0gIiR7c2JpbmRpcn0vbmZ0bCogJHtzYmluZGlyfS9mdGwqICR7c2JpbmRpcn0vcmZkKiAke3NiaW5kaXJ9L2RvYyogJHtzYmluZGlyfS9zZXJ2ZV9pbWFnZSAke3NiaW5kaXJ9L3JlY3ZfaW1hZ2UiCisKKyAgICAgUEFSQUxMRUxfTUFLRSA9ICIiCisKKyAgICAgQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdzcGxpdHRpbmctYW4tYXBwbGljYXRpb24taW50by1tdWx0aXBsZS1wYWNrYWdlcyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlNwbGl0dGluZyBhbiBBcHBsaWNhdGlvbiBpbnRvIE11bHRpcGxlIFBhY2thZ2VzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRVMnPlBBQ0tBR0VTPC91bGluaz48L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFUyc+RklMRVM8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRvIHNwbGl0IGFuIGFwcGxpY2F0aW9uIGludG8gbXVsdGlwbGUgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHRoYXQgdXNlcyB0aGUgPGZpbGVuYW1lPmxpYnhwbTwvZmlsZW5hbWU+IHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyByZWNpcGUgZ2VuZXJhdGVzIGEgc2luZ2xlIHBhY2thZ2UgdGhhdCBjb250YWlucyB0aGUgbGlicmFyeSBhbG9uZworICAgICAgICAgICAgICAgICAgICB3aXRoIGEgZmV3IGJpbmFyaWVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG1vZGlmeSB0aGUgcmVjaXBlIHRvIHNwbGl0IHRoZSBiaW5hcmllcyBpbnRvIHNlcGFyYXRlIHBhY2thZ2VzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCisgICAgIFNVTU1BUlkgPSAiWHBtOiBYIFBpeG1hcCBleHRlbnNpb24gbGlicmFyeSIKKyAgICAgTElDRU5TRSA9ICJCU0QiCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTUxZjQyNzBiMDEyZWNkNGFiMWExNjRmNWY0ZWQ2Y2Y3IgorICAgICBERVBFTkRTICs9ICJsaWJ4ZXh0IGxpYnNtIGxpYnh0IgorICAgICBQRSA9ICIxIgorCisgICAgIFhPUkdfUE4gPSAibGliWHBtIgorCisgICAgIFBBQ0tBR0VTID0rICJzeHBtIGN4cG0iCisgICAgIEZJTEVTX2N4cG0gPSAiJHtiaW5kaXJ9L2N4cG0iCisgICAgIEZJTEVTX3N4cG0gPSAiJHtiaW5kaXJ9L3N4cG0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIHdlIHdhbnQgdG8gc2hpcCB0aGUgPGZpbGVuYW1lPnN4cG08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmN4cG08L2ZpbGVuYW1lPiBiaW5hcmllcyBpbiBzZXBhcmF0ZSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgU2luY2UgPGZpbGVuYW1lPmJpbmRpcjwvZmlsZW5hbWU+IHdvdWxkIGJlIHBhY2thZ2VkIGludG8gdGhlIG1haW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QTic+UE48L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgYnkgZGVmYXVsdCwgd2UgcHJlcGVuZCB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc28gYWRkaXRpb25hbCBwYWNrYWdlIG5hbWVzIGFyZSBhZGRlZCB0byB0aGUgc3RhcnQgb2YgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZXN1bHRzIGluIHRoZSBleHRyYSA8ZmlsZW5hbWU+RklMRVNfKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB0aGVuIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gdGhhdCBkZWZpbmUgd2hpY2ggZmlsZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGdvIGludG8gd2hpY2ggcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEZpbGVzIGluY2x1ZGVkIGJ5IGVhcmxpZXIgcGFja2FnZXMgYXJlIHNraXBwZWQgYnkgbGF0dGVyIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgbWFpbiA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPiBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGluY2x1ZGUgdGhlIGFib3ZlIGxpc3RlZCBmaWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdwYWNrYWdpbmctZXh0ZXJuYWxseS1wcm9kdWNlZC1iaW5hcmllcyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlBhY2thZ2luZyBFeHRlcm5hbGx5IFByb2R1Y2VkIEJpbmFyaWVzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMsIHlvdSBuZWVkIHRvIGFkZCBwcmUtY29tcGlsZWQgYmluYXJpZXMgdG8gYW4KKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHRoYXQgYmluYXJpZXMgZm9yIHByb3ByaWV0YXJ5IGNvZGUKKyAgICAgICAgICAgICAgICAgICAgZXhpc3QsIHdoaWNoIGFyZSBjcmVhdGVkIGJ5IGEgcGFydGljdWxhciBkaXZpc2lvbiBvZiBhCisgICAgICAgICAgICAgICAgICAgIGNvbXBhbnkuCisgICAgICAgICAgICAgICAgICAgIFlvdXIgcGFydCBvZiB0aGUgY29tcGFueSBuZWVkcyB0byB1c2UgdGhvc2UgYmluYXJpZXMgYXMKKyAgICAgICAgICAgICAgICAgICAgcGFydCBvZiBhbiBpbWFnZSB0aGF0IHlvdSBhcmUgYnVpbGRpbmcgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFNpbmNlIHlvdSBvbmx5IGhhdmUgdGhlIGJpbmFyaWVzIGFuZCBub3QgdGhlIHNvdXJjZSBjb2RlLAorICAgICAgICAgICAgICAgICAgICB5b3UgY2Fubm90IHVzZSBhIHR5cGljYWwgcmVjaXBlIHRoYXQgZXhwZWN0cyB0byBmZXRjaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgc291cmNlIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIGNvbXBpbGUgaXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIE9uZSBtZXRob2QgaXMgdG8gcGFja2FnZSB0aGUgYmluYXJpZXMgYW5kIHRoZW4gaW5zdGFsbCB0aGVtCisgICAgICAgICAgICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBHZW5lcmFsbHksIGl0IGlzIG5vdCBhIGdvb2QgaWRlYSB0byBwYWNrYWdlIGJpbmFyaWVzCisgICAgICAgICAgICAgICAgICAgIHNpbmNlLCBhbW9uZyBvdGhlciB0aGluZ3MsIGl0IGNhbiBoaW5kZXIgdGhlIGFiaWxpdHkgdG8KKyAgICAgICAgICAgICAgICAgICAgcmVwcm9kdWNlIGJ1aWxkcyBhbmQgY291bGQgbGVhZCB0byBjb21wYXRpYmlsaXR5IHByb2JsZW1zCisgICAgICAgICAgICAgICAgICAgIHdpdGggQUJJIGluIHRoZSBmdXR1cmUuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHNvbWV0aW1lcyB5b3UgaGF2ZSBubyBjaG9pY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBlYXNpZXN0IHNvbHV0aW9uIGlzIHRvIGNyZWF0ZSBhIHJlY2lwZSB0aGF0IHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLWJpbi1wYWNrYWdlJz48ZmlsZW5hbWU+YmluX3BhY2thZ2U8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGFuZCB0byBiZSBzdXJlIHRoYXQgeW91IGFyZSB1c2luZyBkZWZhdWx0IGxvY2F0aW9ucworICAgICAgICAgICAgICAgICAgICBmb3IgYnVpbGQgYXJ0aWZhY3RzLgorICAgICAgICAgICAgICAgICAgICBJbiBtb3N0IGNhc2VzLCB0aGUgPGZpbGVuYW1lPmJpbl9wYWNrYWdlPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlcyAic2tpcHBpbmciIHRoZSBjb25maWd1cmUgYW5kIGNvbXBpbGUgc3RlcHMgYXMgd2VsbAorICAgICAgICAgICAgICAgICAgICBhcyBzZXRzIHRoaW5ncyB1cCB0byBncmFiIHBhY2thZ2VzIGZyb20gdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICAgICAgICAgICAgIGFyZWEuCisgICAgICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoaXMgY2xhc3Mgc2V0cyA8ZmlsZW5hbWU+bm9leGVjPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb24gYm90aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFza3MsIHNldHMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTXyR7UE59PC9maWxlbmFtZT4gdG8gIi8iIHNvIHRoYXQgaXQgcGlja3MKKyAgICAgICAgICAgICAgICAgICAgdXAgYWxsIGZpbGVzLCBhbmQgc2V0cyB1cCBhCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzaywgd2hpY2ggZWZmZWN0aXZlbHkgY29waWVzIGFsbCBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1N9PC9maWxlbmFtZT4gdG8gPGZpbGVuYW1lPiR7RH08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iaW5fcGFja2FnZTwvZmlsZW5hbWU+IGNsYXNzIHdvcmtzIHdlbGwgd2hlbgorICAgICAgICAgICAgICAgICAgICB0aGUgZmlsZXMgZXh0cmFjdGVkIGludG8gPGZpbGVuYW1lPiR7U308L2ZpbGVuYW1lPiBhcmUKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBsYWlkIG91dCBpbiB0aGUgd2F5IHRoZXkgc2hvdWxkIGJlIGxhaWQgb3V0CisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZXNlIHZhcmlhYmxlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwncyB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBnbG9zc2FyeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGNhbid0IHVzZSB0aGUgPGZpbGVuYW1lPmJpbl9wYWNrYWdlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHlvdSBuZWVkIHRvIGJlIHN1cmUgeW91IGFyZSBkb2luZyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSBhIHJlY2lwZSB3aGVyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPiB0YXNrcyBkbyBub3RoaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKKyAgICAgZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gbWFrZSB0aGVzZSB0YXNrcyBhbiBlbXB0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1ha2Ugc3VyZSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiB0YXNrIGluc3RhbGxzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyaWVzIGFwcHJvcHJpYXRlbHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RW5zdXJlIHRoYXQgeW91IHNldCB1cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+ICh1c3VhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTXyR7UE59PC9maWxlbmFtZT4pIHRvIHBvaW50IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzIHlvdSBoYXZlIGluc3RhbGxlZCwgd2hpY2ggb2YgY291cnNlIGRlcGVuZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB3aGVyZSB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlbSBhbmQgd2hldGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob3NlIGZpbGVzIGFyZSBpbiBkaWZmZXJlbnQgbG9jYXRpb25zIHRoYW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LW5ld21hY2hpbmUiPgorICAgICAgICA8dGl0bGU+QWRkaW5nIGEgTmV3IE1hY2hpbmU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWRkaW5nIGEgbmV3IG1hY2hpbmUgdG8gdGhlIFlvY3RvIFByb2plY3QgaXMgYSBzdHJhaWdodGZvcndhcmQKKyAgICAgICAgICAgIHByb2Nlc3MuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byBhZGQgbWFjaGluZXMgdGhhdCBhcmUgc2ltaWxhcgorICAgICAgICAgICAgdG8gdGhvc2UgdGhhdCB0aGUgWW9jdG8gUHJvamVjdCBhbHJlYWR5IHN1cHBvcnRzLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgQWx0aG91Z2ggd2VsbCB3aXRoaW4gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgWW9jdG8gUHJvamVjdCwKKyAgICAgICAgICAgICAgICBhZGRpbmcgYSB0b3RhbGx5IG5ldyBhcmNoaXRlY3R1cmUgbWlnaHQgcmVxdWlyZQorICAgICAgICAgICAgICAgIGNoYW5nZXMgdG8gPGZpbGVuYW1lPmdjYy9nbGliYzwvZmlsZW5hbWU+IGFuZCB0byB0aGUgc2l0ZQorICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLCB3aGljaCBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgbWFudWFsLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgYSBjb21wbGV0ZSBleGFtcGxlIHRoYXQgc2hvd3MgaG93IHRvIGFkZCBhIG5ldyBtYWNoaW5lLAorICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+Q3JlYXRpbmcgYSBOZXcgQlNQIExheWVyIFVzaW5nIHRoZSB5b2N0by1ic3AgU2NyaXB0PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LW5ld21hY2hpbmUtY29uZmZpbGUiPgorICAgICAgICAgICAgPHRpdGxlPkFkZGluZyB0aGUgTWFjaGluZSBDb25maWd1cmF0aW9uIEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBhZGQgYSBuZXcgbWFjaGluZSwgeW91IG5lZWQgdG8gYWRkIGEgbmV3IG1hY2hpbmUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgdG8gdGhlIGxheWVyJ3MKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9tYWNoaW5lPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIHByb3ZpZGVzIGRldGFpbHMgYWJvdXQgdGhlIGRldmljZQorICAgICAgICAgICAgICAgIHlvdSBhcmUgYWRkaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZSByb290IG5hbWUgb2YgdGhlCisgICAgICAgICAgICAgICAgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGUgdG8gcmVmZXJlbmNlIHRoZSBuZXcgbWFjaGluZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZ2l2ZW4gYSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZSBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jcm93bmJheS5jb25mPC9maWxlbmFtZT4sIHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICByZWNvZ25pemVzIHRoZSBtYWNoaW5lIGFzICJjcm93bmJheSIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBtb3N0IGltcG9ydGFudCB2YXJpYWJsZXMgeW91IG11c3Qgc2V0IGluIHlvdXIgbWFjaGluZQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBvciBpbmNsdWRlIGZyb20gYSBsb3dlci1sZXZlbCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgZmlsZSBhcmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UQVJHRVRfQVJDSCc+VEFSR0VUX0FSQ0g8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiAiYXJtIik8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFJFRkVSUkVEX1BST1ZJREVSJz5QUkVGRVJSRURfUFJPVklERVI8L3VsaW5rPl92aXJ0dWFsL2tlcm5lbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9GRUFUVVJFUyc+TUFDSElORV9GRUFUVVJFUzwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuICJhcG0gc2NyZWVuIHdpZmkiKTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgbWlnaHQgYWxzbyBuZWVkIHRoZXNlIHZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TRVJJQUxfQ09OU09MRVMnPlNFUklBTF9DT05TT0xFUzwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuICIxMTUyMDA7dHR5UzAgMTE1MjAwO3R0eVMxIik8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS0VSTkVMX0lNQUdFVFlQRSc+S0VSTkVMX0lNQUdFVFlQRTwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuICJ6SW1hZ2UiKTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9GU1RZUEVTJz5JTUFHRV9GU1RZUEVTPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gInRhci5neiBqZmZzMiIpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBmdWxsIGRldGFpbHMgb24gdGhlc2UgdmFyaWFibGVzIGluIHRoZSByZWZlcmVuY2UKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbGV2ZXJhZ2UgZXhpc3RpbmcgbWFjaGluZSA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGVzIGZyb20gPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LW5ld21hY2hpbmUta2VybmVsIj4KKyAgICAgICAgICAgIDx0aXRsZT5BZGRpbmcgYSBLZXJuZWwgZm9yIHRoZSBNYWNoaW5lPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gbmVlZHMgdG8gYmUgYWJsZSB0byBidWlsZCBhIGtlcm5lbAorICAgICAgICAgICAgICAgIGZvciB0aGUgbWFjaGluZS4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBlaXRoZXIgY3JlYXRlIGEgbmV3IGtlcm5lbCByZWNpcGUgZm9yIHRoaXMgbWFjaGluZSwKKyAgICAgICAgICAgICAgICBvciBleHRlbmQgYW4gZXhpc3Rpbmcga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgc2V2ZXJhbCBrZXJuZWwgcmVjaXBlIGV4YW1wbGVzIGluIHRoZQorICAgICAgICAgICAgICAgIFNvdXJjZSBEaXJlY3RvcnkgYXQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdGhhdCB5b3UgY2FuIHVzZSBhcyByZWZlcmVuY2VzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGNyZWF0aW5nIGEgbmV3IGtlcm5lbCByZWNpcGUsIG5vcm1hbCByZWNpcGUtd3JpdGluZworICAgICAgICAgICAgICAgIHJ1bGVzIGFwcGx5IGZvciBzZXR0aW5nIHVwIGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPlNSQ19VUkk8L3VsaW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRodXMsIHlvdSBuZWVkIHRvIHNwZWNpZnkgYW55IG5lY2Vzc2FyeSBwYXRjaGVzIGFuZCBzZXQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPlM8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdG8gcG9pbnQgYXQgdGhlIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGNyZWF0ZSBhIDxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPiB0YXNrIHRoYXQKKyAgICAgICAgICAgICAgICBjb25maWd1cmVzIHRoZSB1bnBhY2tlZCBrZXJuZWwgd2l0aCBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgWW91IGNhbiBkbyB0aGlzIGJ5IHVzaW5nIGEgPGZpbGVuYW1lPm1ha2UgZGVmY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb21tYW5kIG9yLCBtb3JlIGNvbW1vbmx5LCBieSBjb3B5aW5nIGluIGEgc3VpdGFibGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSBhbmQgdGhlbiBydW5uaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ha2Ugb2xkY29uZmlnPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgQnkgbWFraW5nIHVzZSBvZiA8ZmlsZW5hbWU+aW5oZXJpdCBrZXJuZWw8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICBwb3RlbnRpYWxseSBzb21lIG9mIHRoZSA8ZmlsZW5hbWU+bGludXgtKi5pbmM8L2ZpbGVuYW1lPiBmaWxlcywKKyAgICAgICAgICAgICAgICBtb3N0IG90aGVyIGZ1bmN0aW9uYWxpdHkgaXMgY2VudHJhbGl6ZWQgYW5kIHRoZSBkZWZhdWx0cyBvZiB0aGUKKyAgICAgICAgICAgICAgICBjbGFzcyBub3JtYWxseSB3b3JrIHdlbGwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgZXh0ZW5kaW5nIGFuIGV4aXN0aW5nIGtlcm5lbCByZWNpcGUsIGl0IGlzIHVzdWFsbHkKKyAgICAgICAgICAgICAgICBhIG1hdHRlciBvZiBhZGRpbmcgYSBzdWl0YWJsZSA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIFRoZSBmaWxlIG5lZWRzIHRvIGJlIGFkZGVkIGludG8gYSBsb2NhdGlvbiBzaW1pbGFyIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGVzIHVzZWQgZm9yIG90aGVyIG1hY2hpbmVzCisgICAgICAgICAgICAgICAgaW4gYSBnaXZlbiBrZXJuZWwgcmVjaXBlLgorICAgICAgICAgICAgICAgIEEgcG9zc2libGUgd2F5IHRvIGRvIHRoaXMgaXMgYnkgbGlzdGluZyB0aGUgZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGFuZCBhZGRpbmcgdGhlIG1hY2hpbmUgdG8gdGhlCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ09NUEFUSUJMRV9NQUNISU5FJz5DT01QQVRJQkxFX01BQ0hJTkU8L3VsaW5rPjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ09NUEFUSUJMRV9NQUNISU5FID0gJyhxZW11eDg2fHFlbXVtaXBzKScKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGVzLAorICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uJz5DaGFuZ2luZyB0aGUgQ29uZmlndXJhdGlvbjwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LW5ld21hY2hpbmUtZm9ybWZhY3RvciI+CisgICAgICAgICAgICA8dGl0bGU+QWRkaW5nIGEgRm9ybWZhY3RvciBDb25maWd1cmF0aW9uIEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIGZvcm1mYWN0b3IgY29uZmlndXJhdGlvbiBmaWxlIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgICAgICAgICAgICAgIHRhcmdldCBoYXJkd2FyZSBmb3Igd2hpY2ggdGhlIGltYWdlIGlzIGJlaW5nIGJ1aWx0IGFuZCBpbmZvcm1hdGlvbiB0aGF0CisgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbSBjYW5ub3Qgb2J0YWluIGZyb20gb3RoZXIgc291cmNlcyBzdWNoIGFzIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgU29tZSBleGFtcGxlcyBvZiBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gYSBmb3JtZmFjdG9yIGNvbmZpZ3VyYXRpb24gZmlsZSBpbmNsdWRlCisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgb3JpZW50YXRpb24sIHdoZXRoZXIgb3Igbm90IHRoZSBzeXN0ZW0gaGFzIGEga2V5Ym9hcmQsCisgICAgICAgICAgICAgICAgdGhlIHBvc2l0aW9uaW5nIG9mIHRoZSBrZXlib2FyZCBpbiByZWxhdGlvbiB0byB0aGUgc2NyZWVuLCBhbmQKKyAgICAgICAgICAgICAgICB0aGUgc2NyZWVuIHJlc29sdXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gdXNlcyByZWFzb25hYmxlIGRlZmF1bHRzIGluIG1vc3QgY2FzZXMuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgY3VzdG9taXphdGlvbiBpcworICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSwgeW91IG5lZWQgdG8gY3JlYXRlIGEgPGZpbGVuYW1lPm1hY2hjb25maWc8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBkaXJlY3RvcmllcyBmb3Igc3BlY2lmaWMgbWFjaGluZXMgc3VjaCBhcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11YXJtPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXR0aW5ncyBhdmFpbGFibGUgYW5kIHRoZSBkZWZhdWx0cywgc2VlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvY29uZmlnPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICBzYW1lIGFyZWEuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIGZvciAicWVtdWFybSIgbWFjaGluZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEhBVkVfVE9VQ0hTQ1JFRU49MQorICAgICBIQVZFX0tFWUJPQVJEPTEKKworICAgICBESVNQTEFZX0NBTl9ST1RBVEU9MAorICAgICBESVNQTEFZX09SSUVOVEFUSU9OPTAKKyAgICAgI0RJU1BMQVlfV0lEVEhfUElYRUxTPTY0MAorICAgICAjRElTUExBWV9IRUlHSFRfUElYRUxTPTQ4MAorICAgICAjRElTUExBWV9CUFA9MTYKKyAgICAgRElTUExBWV9EUEk9MTUwCisgICAgIERJU1BMQVlfU1VCUElYRUxfT1JERVI9dnJnYgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LXdvcmtpbmctd2l0aC1saWJyYXJpZXMiPgorICAgICAgICA8dGl0bGU+V29ya2luZyBXaXRoIExpYnJhcmllczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBMaWJyYXJpZXMgYXJlIGFuIGludGVncmFsIHBhcnQgb2YgeW91ciBzeXN0ZW0uCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHNvbWUgY29tbW9uIHByYWN0aWNlcyB5b3UgbWlnaHQgZmluZAorICAgICAgICAgICAgaGVscGZ1bCB3aGVuIHdvcmtpbmcgd2l0aCBsaWJyYXJpZXMgdG8gYnVpbGQgeW91ciBzeXN0ZW06CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSdpbmNsdWRpbmctc3RhdGljLWxpYnJhcnktZmlsZXMnPkhvdyB0byBpbmNsdWRlIHN0YXRpYyBsaWJyYXJ5IGZpbGVzPC9saW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0nY29tYmluaW5nLW11bHRpcGxlLXZlcnNpb25zLWxpYnJhcnktZmlsZXMtaW50by1vbmUtaW1hZ2UnPkhvdyB0byB1c2UgdGhlIE11bHRpbGliIGZlYXR1cmUgdG8gY29tYmluZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBsaWJyYXJ5IGZpbGVzIGludG8gYSBzaW5nbGUgaW1hZ2U8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSdpbnN0YWxsaW5nLW11bHRpcGxlLXZlcnNpb25zLW9mLXRoZS1zYW1lLWxpYnJhcnknPkhvdyB0byBpbnN0YWxsIG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBzYW1lIGxpYnJhcnkgaW4gcGFyYWxsZWwgb24gdGhlIHNhbWUgc3lzdGVtPC9saW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2luY2x1ZGluZy1zdGF0aWMtbGlicmFyeS1maWxlcyc+CisgICAgICAgICAgICA8dGl0bGU+SW5jbHVkaW5nIFN0YXRpYyBMaWJyYXJ5IEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBidWlsZGluZyBhIGxpYnJhcnkgYW5kIHRoZSBsaWJyYXJ5IG9mZmVycyBzdGF0aWMgbGlua2luZywgeW91IGNhbiBjb250cm9sCisgICAgICAgICAgICAgICAgd2hpY2ggc3RhdGljIGxpYnJhcnkgZmlsZXMgKDxmaWxlbmFtZT4qLmE8L2ZpbGVuYW1lPiBmaWxlcykgZ2V0IGluY2x1ZGVkIGluIHRoZQorICAgICAgICAgICAgICAgIGJ1aWx0IGxpYnJhcnkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBhbmQgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVNfKjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUgZGVmaW5lIGhvdyBmaWxlcyBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICBieSB0aGUgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiB0YXNrIGFyZSBwYWNrYWdlZC4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT4gdmFyaWFibGUgaW5jbHVkZXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQTn0tc3RhdGljZGV2PC9maWxlbmFtZT4sIHdoaWNoIHJlcHJlc2VudHMgYWxsIHN0YXRpYyBsaWJyYXJ5IGZpbGVzLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBTb21lIHByZXZpb3VzbHkgcmVsZWFzZWQgdmVyc2lvbnMgb2YgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCB0aGUgc3RhdGljIGxpYnJhcnkgZmlsZXMgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQTn0tZGV2PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBwYXJ0IG9mIHRoZSBCaXRCYWtlIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2hlcmUKKyAgICAgICAgICAgICAgICB5b3UgY2FuIHNlZSBob3cgdGhlIHN0YXRpYyBsaWJyYXJ5IGZpbGVzIGFyZSBkZWZpbmVkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRV9CRUZPUkVfUE4gPz0gIiIKKyAgICAgUEFDS0FHRVMgPSAiJHtQTn0tZGJnICR7UE59LXN0YXRpY2RldiAke1BOfS1kZXYgJHtQTn0tZG9jICR7UE59LWxvY2FsZSAke1BBQ0tBR0VfQkVGT1JFX1BOfSAke1BOfSIKKyAgICAgUEFDS0FHRVNfRFlOQU1JQyA9ICJeJHtQTn0tbG9jYWxlLS4qIgorICAgICBGSUxFUyA9ICIiCisKKyAgICAgRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyogJHtzYmluZGlyfS8qICR7bGliZXhlY2Rpcn0vKiAke2xpYmRpcn0vbGliKiR7U09MSUJTfSBcCisgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0gJHtzaGFyZWRzdGF0ZWRpcn0gJHtsb2NhbHN0YXRlZGlyfSBcCisgICAgICAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9LyogJHtiYXNlX3NiaW5kaXJ9LyogXAorICAgICAgICAgICAgICAgICAke2Jhc2VfbGliZGlyfS8qJHtTT0xJQlN9IFwKKyAgICAgICAgICAgICAgICAgJHtiYXNlX3ByZWZpeH0vbGliL3VkZXYvcnVsZXMuZCAke3ByZWZpeH0vbGliL3VkZXYvcnVsZXMuZCBcCisgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vJHtCUE59ICR7bGliZGlyfS8ke0JQTn0vKiBcCisgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vcGl4bWFwcyAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucyBcCisgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vaWRsICR7ZGF0YWRpcn0vb21mICR7ZGF0YWRpcn0vc291bmRzIFwKKyAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2Jvbm9iby9zZXJ2ZXJzIgorCisgICAgIEZJTEVTXyR7UE59LWJpbiA9ICIke2JpbmRpcn0vKiAke3NiaW5kaXJ9LyoiCisKKyAgICAgRklMRVNfJHtQTn0tZG9jID0gIiR7ZG9jZGlyfSAke21hbmRpcn0gJHtpbmZvZGlyfSAke2RhdGFkaXJ9L2d0ay1kb2MgXAorICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dub21lL2hlbHAiCisgICAgIFNFQ1RJT05fJHtQTn0tZG9jID0gImRvYyIKKworICAgICBGSUxFU19TT0xJQlNERVYgPz0gIiR7YmFzZV9saWJkaXJ9L2xpYioke1NPTElCU0RFVn0gJHtsaWJkaXJ9L2xpYioke1NPTElCU0RFVn0iCisgICAgIEZJTEVTXyR7UE59LWRldiA9ICIke2luY2x1ZGVkaXJ9ICR7RklMRVNfU09MSUJTREVWfSAke2xpYmRpcn0vKi5sYSBcCisgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vKi5vICR7bGliZGlyfS9wa2djb25maWcgJHtkYXRhZGlyfS9wa2djb25maWcgXAorICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hY2xvY2FsICR7YmFzZV9saWJkaXJ9LyoubyBcCisgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vJHtCUE59LyoubGEgJHtiYXNlX2xpYmRpcn0vKi5sYSIKKyAgICAgU0VDVElPTl8ke1BOfS1kZXYgPSAiZGV2ZWwiCisgICAgIEFMTE9XX0VNUFRZXyR7UE59LWRldiA9ICIxIgorICAgICBSREVQRU5EU18ke1BOfS1kZXYgPSAiJHtQTn0gKD0gJHtFWFRFTkRQS0dWfSkiCisKKyAgICAgRklMRVNfJHtQTn0tc3RhdGljZGV2ID0gIiR7bGliZGlyfS8qLmEgJHtiYXNlX2xpYmRpcn0vKi5hICR7bGliZGlyfS8ke0JQTn0vKi5hIgorICAgICBTRUNUSU9OXyR7UE59LXN0YXRpY2RldiA9ICJkZXZlbCIKKyAgICAgUkRFUEVORFNfJHtQTn0tc3RhdGljZGV2ID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0iY29tYmluaW5nLW11bHRpcGxlLXZlcnNpb25zLWxpYnJhcnktZmlsZXMtaW50by1vbmUtaW1hZ2UiPgorICAgICAgICAgICAgPHRpdGxlPkNvbWJpbmluZyBNdWx0aXBsZSBWZXJzaW9ucyBvZiBMaWJyYXJ5IEZpbGVzIGludG8gT25lIEltYWdlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBvZmZlcnMgdGhlIGFiaWxpdHkgdG8gYnVpbGQgbGlicmFyaWVzIHdpdGggZGlmZmVyZW50CisgICAgICAgICAgICAgICAgdGFyZ2V0IG9wdGltaXphdGlvbnMgb3IgYXJjaGl0ZWN0dXJlIGZvcm1hdHMgYW5kIGNvbWJpbmUgdGhlc2UgdG9nZXRoZXIKKyAgICAgICAgICAgICAgICBpbnRvIG9uZSBzeXN0ZW0gaW1hZ2UuCisgICAgICAgICAgICAgICAgWW91IGNhbiBsaW5rIGRpZmZlcmVudCBiaW5hcmllcyBpbiB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICBhZ2FpbnN0IHRoZSBkaWZmZXJlbnQgbGlicmFyaWVzIGFzIG5lZWRlZCBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzLgorICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBpcyBjYWxsZWQgIk11bHRpbGliLiIKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSB3b3VsZCBiZSB3aGVyZSB5b3UgaGF2ZSBtb3N0IG9mIGEgc3lzdGVtIGNvbXBpbGVkIGluIDMyLWJpdAorICAgICAgICAgICAgICAgIG1vZGUgdXNpbmcgMzItYml0IGxpYnJhcmllcywgYnV0IHlvdSBoYXZlIHNvbWV0aGluZyBsYXJnZSwgbGlrZSBhIGRhdGFiYXNlCisgICAgICAgICAgICAgICAgZW5naW5lLCB0aGF0IG5lZWRzIHRvIGJlIGEgNjQtYml0IGFwcGxpY2F0aW9uIGFuZCB1c2VzIDY0LWJpdCBsaWJyYXJpZXMuCisgICAgICAgICAgICAgICAgTXVsdGlsaWIgYWxsb3dzIHlvdSB0byBnZXQgdGhlIGJlc3Qgb2YgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBsaWJyYXJpZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoaWxlIHRoZSBNdWx0aWxpYiBmZWF0dXJlIGlzIG1vc3QgY29tbW9ubHkgdXNlZCBmb3IgMzIgYW5kIDY0LWJpdCBkaWZmZXJlbmNlcywKKyAgICAgICAgICAgICAgICB0aGUgYXBwcm9hY2ggdGhlIGJ1aWxkIHN5c3RlbSB1c2VzIGZhY2lsaXRhdGVzIGRpZmZlcmVudCB0YXJnZXQgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAgICAgICBZb3UgY291bGQgY29tcGlsZSBzb21lIGJpbmFyaWVzIHRvIHVzZSBvbmUgc2V0IG9mIGxpYnJhcmllcyBhbmQgb3RoZXIgYmluYXJpZXMKKyAgICAgICAgICAgICAgICB0byB1c2UgYSBkaWZmZXJlbnQgc2V0IG9mIGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICBUaGUgbGlicmFyaWVzIGNvdWxkIGRpZmZlciBpbiBhcmNoaXRlY3R1cmUsIGNvbXBpbGVyIG9wdGlvbnMsIG9yIG90aGVyCisgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIG92ZXJ2aWV3cyB0aGUgTXVsdGlsaWIgcHJvY2VzcyBvbmx5LgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGRldGFpbHMgb24gaG93IHRvIGltcGxlbWVudCBNdWx0aWxpYiwgc2VlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9NdWx0aWxpYic+TXVsdGlsaWI8L3VsaW5rPiB3aWtpCisgICAgICAgICAgICAgICAgcGFnZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXNpZGUgZnJvbSB0aGlzIHdpa2kgcGFnZSwgc2V2ZXJhbCBleGFtcGxlcyBleGlzdCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1za2VsZXRvbjwvZmlsZW5hbWU+IGxheWVyIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz46CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb25mL211bHRpbGliLWV4YW1wbGUuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGU8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb25mL211bHRpbGliLWV4YW1wbGUyLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cmVjaXBlcy1tdWx0aWxpYi9pbWFnZXMvY29yZS1pbWFnZS1tdWx0aWxpYi1leGFtcGxlLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncHJlcGFyaW5nLXRvLXVzZS1tdWx0aWxpYic+CisgICAgICAgICAgICAgICAgPHRpdGxlPlByZXBhcmluZyB0byBVc2UgTXVsdGlsaWI8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFVzZXItc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGRyaXZlIHRoZSBNdWx0aWxpYiBmZWF0dXJlLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHRoZXJlIGlzIG5vIG9uZSAib3V0LW9mLXRoZS1ib3giIGNvbmZpZ3VyYXRpb24gdGhhdCBsaWtlbHkKKyAgICAgICAgICAgICAgICAgICAgZXhpc3RzIHRvIG1lZXQgeW91ciBuZWVkcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gZW5hYmxlIE11bHRpbGliLCB5b3UgZmlyc3QgbmVlZCB0byBlbnN1cmUgeW91ciByZWNpcGUgaXMKKyAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBsaWJyYXJpZXMuCisgICAgICAgICAgICAgICAgICAgIE1hbnkgc3RhbmRhcmQgcmVjaXBlcyBhcmUgYWxyZWFkeSBleHRlbmRlZCBhbmQgc3VwcG9ydCBtdWx0aXBsZSBsaWJyYXJpZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2hlY2sgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvbXVsdGlsaWIuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4gdG8gc2VlIGhvdyB0aGlzIGlzCisgICAgICAgICAgICAgICAgICAgIGRvbmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkNMQVNTRVhURU5EJz48ZmlsZW5hbWU+QkJDTEFTU0VYVEVORDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEV2ZW50dWFsbHksIGFsbCByZWNpcGVzIHdpbGwgYmUgY292ZXJlZCBhbmQgdGhpcyBsaXN0IHdpbGwKKyAgICAgICAgICAgICAgICAgICAgbm90IGJlIG5lZWRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBtb3N0IHBhcnQsIHRoZSBNdWx0aWxpYiBjbGFzcyBleHRlbnNpb24gd29ya3MgYXV0b21hdGljYWxseSB0bworICAgICAgICAgICAgICAgICAgICBleHRlbmQgdGhlIHBhY2thZ2UgbmFtZSBmcm9tIDxmaWxlbmFtZT4ke1BOfTwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke01MUFJFRklYfSR7UE59PC9maWxlbmFtZT4sIHdoZXJlIDxmaWxlbmFtZT5NTFBSRUZJWDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBwYXJ0aWN1bGFyIG11bHRpbGliIChlLmcuICJsaWIzMi0iIG9yICJsaWI2NC0iKS4KKyAgICAgICAgICAgICAgICAgICAgU3RhbmRhcmQgdmFyaWFibGVzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUlBST1ZJREVTJz48ZmlsZW5hbWU+UlBST1ZJREVTPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC91bGluaz4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRVNfRFlOQU1JQyc+PGZpbGVuYW1lPlBBQ0tBR0VTX0RZTkFNSUM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFyZSBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkIGJ5IHRoZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgZXh0ZW5kaW5nIGFueSBtYW51YWwgY29kZSBpbiB0aGUgcmVjaXBlLCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7TUxQUkVGSVh9PC9maWxlbmFtZT4gdmFyaWFibGUgdG8gZW5zdXJlIHRob3NlIG5hbWVzIGFyZSBleHRlbmRlZAorICAgICAgICAgICAgICAgICAgICBjb3JyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgYXV0b21hdGljIGV4dGVuc2lvbiBjb2RlIHJlc2lkZXMgaW4gPGZpbGVuYW1lPm11bHRpbGliLmJiY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1tdWx0aWxpYic+CisgICAgICAgICAgICAgICAgPHRpdGxlPlVzaW5nIE11bHRpbGliPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZnRlciB5b3UgaGF2ZSBzZXQgdXAgdGhlIHJlY2lwZXMsIHlvdSBuZWVkIHRvIGRlZmluZSB0aGUgYWN0dWFsCisgICAgICAgICAgICAgICAgICAgIGNvbWJpbmF0aW9uIG9mIG11bHRpcGxlIGxpYnJhcmllcyB5b3Ugd2FudCB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGFjY29tcGxpc2ggdGhpcyB0aHJvdWdoIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSBjb25maWd1cmF0aW9uIHdvdWxkIGJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTUFDSElORSA9ICJxZW11eDg2LTY0IgorICAgICByZXF1aXJlIGNvbmYvbXVsdGlsaWIuY29uZgorICAgICBNVUxUSUxJQlMgPSAibXVsdGlsaWI6bGliMzIiCisgICAgIERFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi1saWIzMiA9ICJ4ODYiCisgICAgIElNQUdFX0lOU1RBTEwgPSAibGliMzItY29ubm1hbiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgZW5hYmxlcyBhbgorICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsIGxpYnJhcnkgbmFtZWQgPGZpbGVuYW1lPmxpYjMyPC9maWxlbmFtZT4gYWxvbmdzaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICBub3JtYWwgdGFyZ2V0IHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBXaGVuIGNvbWJpbmluZyB0aGVzZSAibGliMzIiIGFsdGVybmF0aXZlcywgdGhlIGV4YW1wbGUgdXNlcyAieDg2IiBmb3IgdHVuaW5nLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhpcyBwYXJ0aWN1bGFyIHR1bmluZywgc2VlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2lhMzIvYXJjaC1pYTMyLmluYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZXhhbXBsZSB0aGVuIGluY2x1ZGVzIDxmaWxlbmFtZT5saWIzMi1jb25ubWFuPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW4gYWxsIHRoZSBpbWFnZXMsIHdoaWNoIGlsbHVzdHJhdGVzIG9uZSBtZXRob2Qgb2YgaW5jbHVkaW5nIGEKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgbGlicmFyeSBkZXBlbmRlbmN5LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBhIG5vcm1hbCBpbWFnZSBidWlsZCB0byBpbmNsdWRlIHRoaXMgZGVwZW5kZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBidWlsZCBNdWx0aWxpYiBwYWNrYWdlcyBzcGVjaWZpY2FsbHkgd2l0aCBhIGNvbW1hbmQgbGlrZSB0aGlzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaWIzMi1jb25ubWFuCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdhZGRpdGlvbmFsLWltcGxlbWVudGF0aW9uLWRldGFpbHMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5BZGRpdGlvbmFsIEltcGxlbWVudGF0aW9uIERldGFpbHM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERpZmZlcmVudCBwYWNrYWdpbmcgc3lzdGVtcyBoYXZlIGRpZmZlcmVudCBsZXZlbHMgb2YgbmF0aXZlIE11bHRpbGliCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuCisgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlbWVudCBTeXN0ZW0sIHRoZSBmb2xsb3dpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscworICAgICAgICAgICAgICAgICAgICBleGlzdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIHVuaXF1ZSBhcmNoaXRlY3R1cmUgaXMgZGVmaW5lZCBmb3IgdGhlIE11bHRpbGliIHBhY2thZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsb25nIHdpdGggY3JlYXRpbmcgYSB1bmlxdWUgZGVwbG95IGZvbGRlciB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50bXAvZGVwbG95L3JwbTwvZmlsZW5hbWU+IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgPGZpbGVuYW1lPmxpYjMyPC9maWxlbmFtZT4gaW4gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2LTY0PC9maWxlbmFtZT4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBvc3NpYmxlIGFyY2hpdGVjdHVyZXMgaW4gdGhlIHN5c3RlbSBhcmUgImFsbCIsICJxZW11eDg2XzY0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGliMzJfcWVtdXg4Nl82NCIsIGFuZCAibGliMzJfeDg2Ii48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgPGZpbGVuYW1lPiR7TUxQUkVGSVh9PC9maWxlbmFtZT4gdmFyaWFibGUgaXMgc3RyaXBwZWQgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1BOfTwvZmlsZW5hbWU+IGR1cmluZyBSUE0gcGFja2FnaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1pbmcgZm9yIGEgbm9ybWFsIFJQTSBwYWNrYWdlIGFuZCBhIE11bHRpbGliIFJQTSBwYWNrYWdlIGluIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdXg4Ni02NDwvZmlsZW5hbWU+IHN5c3RlbSByZXNvbHZlcyB0byBzb21ldGhpbmcgc2ltaWxhciB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNoLTQuMS1yMi54ODZfNjQucnBtPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2gtNC4xLnIyLmxpYjMyX3g4Ni5ycG08L2ZpbGVuYW1lPiwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZW4gaW5zdGFsbGluZyBhIE11bHRpbGliIGltYWdlLCB0aGUgUlBNIGJhY2tlbmQgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxscyB0aGUgYmFzZSBpbWFnZSBhbmQgdGhlbiBpbnN0YWxscyB0aGUgTXVsdGlsaWIgbGlicmFyaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBidWlsZCBzeXN0ZW0gcmVsaWVzIG9uIFJQTSB0byByZXNvbHZlIHRoZSBpZGVudGljYWwgZmlsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHdvIChvciBtb3JlKSBNdWx0aWxpYiBwYWNrYWdlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgSVBLIFBhY2thZ2UgTWFuYWdlbWVudCBTeXN0ZW0sIHRoZSBmb2xsb3dpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBleGlzdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgPGZpbGVuYW1lPiR7TUxQUkVGSVh9PC9maWxlbmFtZT4gaXMgbm90IHN0cmlwcGVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQTn08L2ZpbGVuYW1lPiBkdXJpbmcgSVBLIHBhY2thZ2luZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtaW5nIGZvciBhIG5vcm1hbCBSUE0gcGFja2FnZSBhbmQgYSBNdWx0aWxpYiBJUEsgcGFja2FnZSBpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODYtNjQ8L2ZpbGVuYW1lPiBzeXN0ZW0gcmVzb2x2ZXMgdG8gc29tZXRoaW5nIGxpa2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzaF80LjEtcjIueDg2XzY0LmlwazwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWIzMi1iYXNoXzQuMS1yd194ODYuaXBrPC9maWxlbmFtZT4sIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgSVBLIGRlcGxveSBmb2xkZXIgaXMgbm90IG1vZGlmaWVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtNTFBSRUZJWH08L2ZpbGVuYW1lPiBiZWNhdXNlIHBhY2thZ2VzIHdpdGggYW5kIHdpdGhvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgTXVsdGlsaWIgZmVhdHVyZSBjYW4gZXhpc3QgaW4gdGhlIHNhbWUgZm9sZGVyIGR1ZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQTn08L2ZpbGVuYW1lPiBkaWZmZXJlbmNlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JUEsgZGVmaW5lcyBhIHNhbml0eSBjaGVjayBmb3IgTXVsdGlsaWIgaW5zdGFsbGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgY2VydGFpbiBydWxlcyBmb3IgZmlsZSBjb21wYXJpc29uLCBvdmVycmlkZGVuLCBldGMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbnN0YWxsaW5nLW11bHRpcGxlLXZlcnNpb25zLW9mLXRoZS1zYW1lLWxpYnJhcnknPgorICAgICAgICAgICAgPHRpdGxlPkluc3RhbGxpbmcgTXVsdGlwbGUgVmVyc2lvbnMgb2YgdGhlIFNhbWUgTGlicmFyeTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNpdHVhdGlvbnMgY2FuIGV4aXN0IHdoZXJlIHlvdSBuZWVkIHRvIGluc3RhbGwgYW5kIHVzZQorICAgICAgICAgICAgICAgIG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBzYW1lIGxpYnJhcnkgb24gdGhlIHNhbWUgc3lzdGVtCisgICAgICAgICAgICAgICAgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgICAgICBUaGVzZSBzaXR1YXRpb25zIGFsbW9zdCBhbHdheXMgZXhpc3Qgd2hlbiBhIGxpYnJhcnkgQVBJCisgICAgICAgICAgICAgICAgY2hhbmdlcyBhbmQgeW91IGhhdmUgbXVsdGlwbGUgcGllY2VzIG9mIHNvZnR3YXJlIHRoYXQKKyAgICAgICAgICAgICAgICBkZXBlbmQgb24gdGhlIHNlcGFyYXRlIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgICAgIFRvIGFjY29tbW9kYXRlIHRoZXNlIHNpdHVhdGlvbnMsIHlvdSBjYW4gaW5zdGFsbCBtdWx0aXBsZQorICAgICAgICAgICAgICAgIHZlcnNpb25zIG9mIHRoZSBzYW1lIGxpYnJhcnkgaW4gcGFyYWxsZWwgb24gdGhlIHNhbWUgc3lzdGVtLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcHJvY2VzcyBpcyBzdHJhaWdodGZvcndhcmQgYXMgbG9uZyBhcyB0aGUgbGlicmFyaWVzIHVzZQorICAgICAgICAgICAgICAgIHByb3BlciB2ZXJzaW9uaW5nLgorICAgICAgICAgICAgICAgIFdpdGggcHJvcGVybHkgdmVyc2lvbmVkIGxpYnJhcmllcywgYWxsIHlvdSBuZWVkIHRvIGRvIHRvCisgICAgICAgICAgICAgICAgaW5kaXZpZHVhbGx5IHNwZWNpZnkgdGhlIGxpYnJhcmllcyBpcyBjcmVhdGUgc2VwYXJhdGUsCisgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVseSBuYW1lZCByZWNpcGVzIHdoZXJlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L3VsaW5rPiBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgIG5hbWUgaW5jbHVkZXMgYSBwb3J0aW9uIHRoYXQgZGlmZmVyZW50aWF0ZXMgZWFjaCBsaWJyYXJ5IHZlcnNpb24KKyAgICAgICAgICAgICAgICAoZS5nLnRoZSBtYWpvciBwYXJ0IG9mIHRoZSB2ZXJzaW9uIG51bWJlcikuCisgICAgICAgICAgICAgICAgVGh1cywgaW5zdGVhZCBvZiBoYXZpbmcgYSBzaW5nbGUgcmVjaXBlIHRoYXQgbG9hZHMgb25lIHZlcnNpb24KKyAgICAgICAgICAgICAgICBvZiBhIGxpYnJhcnkgKGUuZy4gPGZpbGVuYW1lPmNsdXR0ZXI8L2ZpbGVuYW1lPiksIHlvdSBwcm92aWRlCisgICAgICAgICAgICAgICAgbXVsdGlwbGUgcmVjaXBlcyB0aGF0IHJlc3VsdCBpbiBkaWZmZXJlbnQgdmVyc2lvbnMKKyAgICAgICAgICAgICAgICBvZiB0aGUgbGlicmFyaWVzIHlvdSB3YW50LgorICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgdHdvIHJlY2lwZXMgd291bGQgYWxsb3cgdGhlCisgICAgICAgICAgICAgICAgdHdvIHNlcGFyYXRlIHZlcnNpb25zIG9mIHRoZSA8ZmlsZW5hbWU+Y2x1dHRlcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgbGlicmFyeSB0byBjby1leGlzdCBvbiB0aGUgc2FtZSBzeXN0ZW06CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBjbHV0dGVyLTEuNl8xLjYuMjAuYmIKKyAgICAgY2x1dHRlci0xLjhfMS44LjQuYmIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCBpZiB5b3UgaGF2ZSBvdGhlciByZWNpcGVzIHRoYXQgZGVwZW5kIG9uIGEgZ2l2ZW4KKyAgICAgICAgICAgICAgICBsaWJyYXJ5LCB5b3UgbmVlZCB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGNyZWF0ZSB0aGUgZGVwZW5kZW5jeS4KKyAgICAgICAgICAgICAgICBDb250aW51aW5nIHdpdGggdGhlIHNhbWUgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gaGF2ZSBhIHJlY2lwZQorICAgICAgICAgICAgICAgIGRlcGVuZCBvbiB0aGUgMS44IHZlcnNpb24gb2YgdGhlIDxmaWxlbmFtZT5jbHV0dGVyPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBsaWJyYXJ5LCB1c2UgdGhlIGZvbGxvd2luZyBpbiB5b3VyIHJlY2lwZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUEVORFMgPSAiY2x1dHRlci0xLjgiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLXBhcnRpdGlvbmVkLWltYWdlcyc+CisgICAgICAgIDx0aXRsZT5DcmVhdGluZyBQYXJ0aXRpb25lZCBJbWFnZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3JlYXRpbmcgYW4gaW1hZ2UgZm9yIGEgcGFydGljdWxhciBoYXJkd2FyZSB0YXJnZXQgdXNpbmcgdGhlCisgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4geW91IGNhbiBib290CisgICAgICAgICAgICB0aGF0IGltYWdlIGFzIGlzIG9uIHlvdXIgZGV2aWNlLgorICAgICAgICAgICAgUGh5c2ljYWwgZGV2aWNlcyBhY2NlcHQgYW5kIGJvb3QgaW1hZ2VzIGluIHZhcmlvdXMgd2F5cyBkZXBlbmRpbmcKKyAgICAgICAgICAgIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGRldmljZS4KKyAgICAgICAgICAgIFVzdWFsbHksIGluZm9ybWF0aW9uIGFib3V0IHRoZSBoYXJkd2FyZSBjYW4gdGVsbCB5b3Ugd2hhdCBpbWFnZQorICAgICAgICAgICAgZm9ybWF0IHRoZSBkZXZpY2UgcmVxdWlyZXMuCisgICAgICAgICAgICBTaG91bGQgeW91ciBkZXZpY2UgcmVxdWlyZSBtdWx0aXBsZSBwYXJ0aXRpb25zIG9uIGFuIFNEIGNhcmQsIGZsYXNoLAorICAgICAgICAgICAgb3IgYW4gSERELCB5b3UgY2FuIHVzZSB0aGUgT3BlbkVtYmVkZGVkIEltYWdlIENyZWF0b3IsCisJICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4sIHRvIGNyZWF0ZSB0aGUgcHJvcGVybHkgcGFydGl0aW9uZWQgaW1hZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gY29tbWFuZCBnZW5lcmF0ZXMgcGFydGl0aW9uZWQgaW1hZ2VzCisgICAgICAgICAgICBmcm9tIGV4aXN0aW5nIE9wZW5FbWJlZGRlZCBidWlsZCBhcnRpZmFjdHMuCisgICAgICAgICAgICBJbWFnZSBnZW5lcmF0aW9uIGlzIGRyaXZlbiBieSBwYXJ0aXRpb25pbmcgY29tbWFuZHMgY29udGFpbmVkCisgICAgICAgICAgICBpbiBhbiBPcGVuZW1iZWRkZWQga2lja3N0YXJ0IGZpbGUgKDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4pCisgICAgICAgICAgICBzcGVjaWZpZWQgZWl0aGVyIGRpcmVjdGx5IG9uIHRoZSBjb21tYW5kIGxpbmUgb3IgYXMgb25lIG9mIGEKKyAgICAgICAgICAgIHNlbGVjdGlvbiBvZiBjYW5uZWQgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBmaWxlcyBhcyBzaG93bgorICAgICAgICAgICAgd2l0aCB0aGUgPGZpbGVuYW1lPndpYyBsaXN0IGltYWdlczwvZmlsZW5hbWU+IGNvbW1hbmQgaW4gdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctYS1wcm92aWRlZC1raWNrc3RhcnRfZmlsZSc+VXNpbmcgYW4gRXhpc3RpbmcgS2lja3N0YXJ0IEZpbGU8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIFdoZW4gYXBwbGllZCB0byBhIGdpdmVuIHNldCBvZiBidWlsZCBhcnRpZmFjdHMsIHRoZSByZXN1bHQgaXMgYW4KKyAgICAgICAgICAgIGltYWdlIG9yIHNldCBvZiBpbWFnZXMgdGhhdCBjYW4gYmUgZGlyZWN0bHkgd3JpdHRlbiBvbnRvIG1lZGlhIGFuZAorICAgICAgICAgICAgdXNlZCBvbiBhIHBhcnRpY3VsYXIgc3lzdGVtLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisJICAgICAgICBUaGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGNvbW1hbmQgYW5kIHRoZSBpbmZyYXN0cnVjdHVyZQorCSAgICAgICAgaXQgaXMgYmFzZWQgb24gaXMgYnkgZGVmaW5pdGlvbiBpbmNvbXBsZXRlLgorICAgICAgICAgICAgSXRzIHB1cnBvc2UgaXMgdG8gYWxsb3cgdGhlIGdlbmVyYXRpb24gb2YgY3VzdG9taXplZCBpbWFnZXMsCisgICAgICAgICAgICBhbmQgYXMgc3VjaCB3YXMgZGVzaWduZWQgdG8gYmUgY29tcGxldGVseSBleHRlbnNpYmxlIHRocm91Z2ggYQorICAgICAgICAgICAgcGx1Z2luIGludGVyZmFjZS4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdvcGVuZW1iZWRkZWQta2lja3N0YXJ0LXBsdWdpbnMnPlBsdWdpbnM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gb24gdGhlc2UgcGx1Z2lucy4KKwkgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIHNvbWUgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBvbgorICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+LCBkZXNjcmliZXMgd2hhdCB5b3UgbmVlZCB0byBoYXZlIGluCisgICAgICAgICAgICBwbGFjZSB0byBydW4gdGhlIHRvb2wsIHByb3ZpZGVzIGluc3RydWN0aW9uIG9uIGhvdyB0byB1c2UKKyAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiwgYW5kIHByb3ZpZGVzIHNldmVyYWwgZXhhbXBsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nd2ljLWJhY2tncm91bmQnPgorICAgICAgICAgICAgPHRpdGxlPkJhY2tncm91bmQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgc29tZSBiYWNrZ3JvdW5kIG9uIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiB1dGlsaXR5LgorICAgICAgICAgICAgICAgIFdoaWxlIG5vbmUgb2YgdGhpcyBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCB0byB1c2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4sIHlvdSBtaWdodCBmaW5kIGl0IGludGVyZXN0aW5nLgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lICJ3aWMiIGlzIGRlcml2ZWQgZnJvbSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlIENyZWF0b3IgKG9laWMpLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlICJvZSIgZGlwaHRob25nIGluICJvZWljIiB3YXMgcHJvbW90ZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBsZXR0ZXIgInciLCBiZWNhdXNlICJvZWljIiBpcyBib3RoIGRpZmZpY3VsdCB0byByZW1lbWJlciBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb25vdW5jZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBNZWVnbyBJbWFnZSBDcmVhdG9yICg8ZmlsZW5hbWU+bWljPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcmsuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGltcGxlbWVudGF0aW9uIGhhcyBiZWVuCisgICAgICAgICAgICAgICAgICAgICAgICBoZWF2aWx5IG1vZGlmaWVkIHRvIG1ha2UgZGlyZWN0IHVzZSBvZiBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGFydGlmYWN0cyBpbnN0ZWFkIG9mIHBhY2thZ2UgaW5zdGFsbGF0aW9uIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiwgd2hpY2ggYXJlIGFscmVhZHkgaW5jb3Jwb3JhdGVkIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBhcnRpZmFjdHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpcyBhIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYWxvbmUgdXRpbGl0eSB0aGF0IGluaXRpYWxseSBwcm92aWRlcworICAgICAgICAgICAgICAgICAgICAgICAgZWFzaWVyLXRvLXVzZSBhbmQgbW9yZSBmbGV4aWJsZSByZXBsYWNlbWVudHMgZm9yIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvdXBsZSBiaXRzIG9mIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkgaW4gT0UgQ29yZSdzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ym9vdC1kaXJlY3RkaXNrLmJiY2xhc3M8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ta2VmaWRpc2suc2g8L2ZpbGVuYW1lPiBzY3JpcHRzLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGFuZCB0aG9zZSBleGFtcGxlcyBpcworICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3aXRoIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2YgdGhvc2Ugc2NyaXB0cyBpcyBpbXBsZW1lbnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgYnkgYSBnZW5lcmFsLXB1cnBvc2UgcGFydGl0aW9uaW5nIGxhbmd1YWdlLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gUmVkaGF0IGtpY2tzdGFydCBzeW50YXguPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nd2ljLXJlcXVpcmVtZW50cyc+CisgICAgICAgICAgICA8dGl0bGU+UmVxdWlyZW1lbnRzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gdXRpbGl0eQorICAgICAgICAgICAgICAgIHdpdGggdGhlIE9wZW5FbWJlZGRlZCBCdWlsZCBzeXN0ZW0sIHlvdXIgc3lzdGVtIG5lZWRzCisgICAgICAgICAgICAgICAgdG8gbWVldCB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50czoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIExpbnV4IGRpc3RyaWJ1dGlvbiBvbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBob3N0IG11c3Qgc3VwcG9ydCB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNkZXRhaWxlZC1zdXBwb3J0ZWQtZGlzdHJvcyc+U3VwcG9ydGVkIExpbnV4IERpc3RyaWJ1dGlvbnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBmb3IgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCBvZiBkaXN0cmlidXRpb25zLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc3RhbmRhcmQgc3lzdGVtIHV0aWxpdGllcywgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNwPC9maWxlbmFtZT4sIG11c3QgYmUgaW5zdGFsbGVkIG9uIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IGhvc3Qgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGhhdmUgdGhlIGJ1aWxkIGFydGlmYWN0cyBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUsIHdoaWNoIHR5cGljYWxseSBtZWFucyB0aGF0IHlvdSBtdXN0CisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIGFscmVhZHkgY3JlYXRlZCBhbiBpbWFnZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5lbWJlZGRlZCBidWlsZCBzeXN0ZW0gKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICBXaGlsZSBpdCBtaWdodCBzZWVtIHJlZHVuZGFudCB0byBnZW5lcmF0ZSBhbiBpbWFnZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXIgdG8gY3JlYXRlIGFuIGltYWdlIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4sIHRoZSBjdXJyZW50IHZlcnNpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiByZXF1aXJlcyB0aGUgYXJ0aWZhY3RzCisgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZm9ybSBnZW5lcmF0ZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBidWlsZCBzZXZlcmFsIG5hdGl2ZSB0b29sczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIHBhcnRlZC1uYXRpdmUgZG9zZnN0b29scy1uYXRpdmUgbXRvb2xzLW5hdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGhhdmUgc291cmNlZCBvbmUgb2YgdGhlIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHRzIChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPikKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nd2ljLWdldHRpbmctaGVscCc+CisgICAgICAgICAgICA8dGl0bGU+R2V0dGluZyBIZWxwPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBnZXQgZ2VuZXJhbCBoZWxwIGZvciB0aGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYnkgZW50ZXJpbmcgdGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBjb21tYW5kIGJ5IGl0c2VsZgorICAgICAgICAgICAgICAgIG9yIGJ5IGVudGVyaW5nIHRoZSBjb21tYW5kIHdpdGggYSBoZWxwIGFyZ3VtZW50IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyAtaAorICAgICAkIHdpYyAtLWhlbHAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEN1cnJlbnRseSwgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IHN1cHBvcnRzIHR3byBjb21tYW5kczoKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y3JlYXRlPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5saXN0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgWW91IGNhbiBnZXQgaGVscCBmb3IgdGhlc2UgY29tbWFuZHMgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGhlbHAgPHJlcGxhY2VhYmxlPmNvbW1hbmQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGdldCBkZXRhaWxlZCBoZWxwIG9uIGEgbnVtYmVyIG9mIHRvcGljcworICAgICAgICAgICAgICAgIGZyb20gdGhlIGhlbHAgc3lzdGVtLgorICAgICAgICAgICAgICAgIFRoZSBvdXRwdXQgb2YgPGZpbGVuYW1lPndpYyAtLWhlbHA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpc3BsYXlzIGEgbGlzdCBvZiBhdmFpbGFibGUgaGVscAorICAgICAgICAgICAgICAgIHRvcGljcyB1bmRlciBhICJIZWxwIHRvcGljcyIgaGVhZGluZy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGhhdmUgdGhlIGhlbHAgc3lzdGVtIGRpc3BsYXkgdGhlIGhlbHAgdGV4dCBmb3IKKyAgICAgICAgICAgICAgICBhIGdpdmVuIHRvcGljIGJ5IHByZWZhY2luZyB0aGUgdG9waWMgd2l0aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWMgaGVscDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3aWMgaGVscCA8cmVwbGFjZWFibGU+aGVscF90b3BpYzwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgb3V0IG1vcmUgYWJvdXQgdGhlIGltYWdlcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBjcmVhdGVzIHVzaW5nIHRoZSBleGlzdGluZworICAgICAgICAgICAgICAgIGtpY2tzdGFydCBmaWxlcyB3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybSBvZiB0aGUgY29tbWFuZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGxpc3QgPHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT4gaGVscAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICB3aGVyZSA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBpcyBlaXRoZXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyZWN0ZGlzazwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1rZWZpZGlzazwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J29wZXJhdGlvbmFsLW1vZGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5PcGVyYXRpb25hbCBNb2RlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorCSAgICAgICAgICAgIFlvdSBjYW4gdXNlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpbiB0d28gZGlmZmVyZW50CisJICAgICAgICAgICAgbW9kZXMsIGRlcGVuZGluZyBvbiBob3cgbXVjaCBjb250cm9sIHlvdSBuZWVkIGZvcgorCSAgICAgICAgICAgIHNwZWNpZnlpbmcgdGhlIE9wZW5lbWJlZGRlZCBidWlsZCBhcnRpZmFjdHMgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICB1c2VkIGZvciBjcmVhdGluZyB0aGUgaW1hZ2U6IFJhdyBhbmQgQ29va2VkOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmF3IE1vZGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBleHBsaWNpdGx5IHNwZWNpZnkgYnVpbGQgYXJ0aWZhY3RzIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29va2VkIE1vZGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nIGFuZCBpbWFnZSBuYW1lIGFyZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgbG9jYXRlCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcHJvdmlkZSB0aGUgYnVpbGQgYXJ0aWZhY3RzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSBtb2RlIHlvdSB1c2UsIHlvdSBuZWVkIHRvIGhhdmUgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgYXJ0aWZhY3RzIHJlYWR5IGFuZCBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgZW52aXJvbm1lbnQgbXVzdCBiZSBzZXQgdXAgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHNjcmlwdCBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdyYXctbW9kZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlJhdyBNb2RlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZ2VuZXJhbCBmb3JtIG9mIHRoZSAnd2ljJyBjb21tYW5kIGluIHJhdyBtb2RlIGlzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGNyZWF0ZSA8cmVwbGFjZWFibGU+aW1hZ2VfbmFtZTwvcmVwbGFjZWFibGU+LndrcyBbPHJlcGxhY2VhYmxlPm9wdGlvbnM8L3JlcGxhY2VhYmxlPl0gWy4uLl0KKworICAgICAgICAgV2hlcmU6CisKKyAgICAgICAgICAgICA8cmVwbGFjZWFibGU+aW1hZ2VfbmFtZTwvcmVwbGFjZWFibGU+LndrcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuIE9wZW5FbWJlZGRlZCBraWNrc3RhcnQgZmlsZS4gIFlvdSBjYW4gcHJvdmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgb3duIGN1c3RvbSBmaWxlIG9yIHVzZSBhIGZpbGUgZnJvbSBhIHNldCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIGZpbGVzIGFzIGRlc2NyaWJlZCBieSBmdXJ0aGVyIG9wdGlvbnMuCisKKyAgICAgICAgICAgICAtbyA8cmVwbGFjZWFibGU+T1VURElSPC9yZXBsYWNlYWJsZT4sIC0tb3V0ZGlyPTxyZXBsYWNlYWJsZT5PVVRESVI8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5IGluIHdoaWNoIHRvIGNyZWF0ZSBpbWFnZS4KKworICAgICAgICAgICAgIC1pIDxyZXBsYWNlYWJsZT5QUk9QRVJUSUVTX0ZJTEU8L3JlcGxhY2VhYmxlPiwgLS1pbmZpbGU9PHJlcGxhY2VhYmxlPlBST1BFUlRJRVNfRklMRTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBmb3IgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzIGFzIGEgSlNPTiBmaWxlLgorCisgICAgICAgICAgICAgLWUgPHJlcGxhY2VhYmxlPklNQUdFX05BTUU8L3JlcGxhY2VhYmxlPiwgLS1pbWFnZS1uYW1lPTxyZXBsYWNlYWJsZT5JTUFHRV9OQU1FPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgaW1hZ2UgZnJvbSB3aGljaCB0byB1c2UgdGhlIGFydGlmYWN0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPikuCisKKyAgICAgICAgICAgICAtciA8cmVwbGFjZWFibGU+Uk9PVEZTX0RJUjwvcmVwbGFjZWFibGU+LCAtLXJvb3Rmcy1kaXI9PHJlcGxhY2VhYmxlPlJPT1RGU19ESVI8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwYXRoIHRvIHRoZSA8ZmlsZW5hbWU+L3Jvb3RmczwvZmlsZW5hbWU+IGRpcmVjdG9yeSB0byB1c2UgYXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiByb290ZnMgc291cmNlLgorCisgICAgICAgICAgICAgLWIgPHJlcGxhY2VhYmxlPkJPT1RJTUdfRElSPC9yZXBsYWNlYWJsZT4sIC0tYm9vdGltZy1kaXI9PHJlcGxhY2VhYmxlPkJPT1RJTUdfRElSPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGJvb3QgYXJ0aWZhY3RzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPi9FRkk8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+L3N5c2xpbnV4PC9maWxlbmFtZT4pIHRvIHVzZSBhcyB0aGUgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBib290aW1nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLgorCisgICAgICAgICAgICAgLWsgPHJlcGxhY2VhYmxlPktFUk5FTF9ESVI8L3JlcGxhY2VhYmxlPiwgLS1rZXJuZWwtZGlyPTxyZXBsYWNlYWJsZT5LRVJORUxfRElSPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGtlcm5lbCB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBib290IGltYWdlLgorCisgICAgICAgICAgICAgLW4gPHJlcGxhY2VhYmxlPk5BVElWRV9TWVNST09UPC9yZXBsYWNlYWJsZT4sIC0tbmF0aXZlLXN5c3Jvb3Q9PHJlcGxhY2VhYmxlPk5BVElWRV9TWVNST09UPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCB0byB0aGUgbmF0aXZlIHN5c3Jvb3QgY29udGFpbmluZyB0aGUgdG9vbHMgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYnVpbGQgdGhlIGltYWdlLgorCisgICAgICAgICAgICAgLXMsIC0tc2tpcC1idWlsZC1jaGVjaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNraXBzIHRoZSBidWlsZCBjaGVjay4KKworICAgICAgICAgICAgIC1ELCAtLWRlYnVnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0IGRlYnVnIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBuZWVkIHJvb3QgcHJpdmlsZWdlcyB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIGZhY3QsIHlvdSBzaG91bGQgbm90IHJ1biBhcyByb290IHdoZW4gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB1dGlsaXR5LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY29va2VkLW1vZGUnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Db29rZWQgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGdlbmVyYWwgZm9ybSBvZiB0aGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgQ29va2VkIE1vZGUgaXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3aWMgY3JlYXRlIDxyZXBsYWNlYWJsZT5raWNrc3RhcnRfZmlsZTwvcmVwbGFjZWFibGU+IC1lIDxyZXBsYWNlYWJsZT5pbWFnZV9uYW1lPC9yZXBsYWNlYWJsZT4KKworICAgICAgICAgV2hlcmU6CisKKyAgICAgICAgICAgICA8cmVwbGFjZWFibGU+a2lja3N0YXJ0X2ZpbGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuIE9wZW5FbWJlZGRlZCBraWNrc3RhcnQgZmlsZS4gWW91IGNhbiBwcm92aWRlIHlvdXIgb3duCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tIGZpbGUgb3Igc3VwcGxpZWQgZmlsZS4KKworICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5pbWFnZV9uYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGltYWdlIGJ1aWx0IHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBmb3JtIGlzIHRoZSBzaW1wbGVzdCBhbmQgbW9zdCB1c2VyLWZyaWVuZGx5LCBhcyBpdAorICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCByZXF1aXJlIHNwZWNpZnlpbmcgYWxsIGluZGl2aWR1YWwgcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAgICAgICAgQWxsIHlvdSBuZWVkIHRvIHByb3ZpZGUgaXMgeW91ciBvd24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBmaWxlIG9yIG9uZSBwcm92aWRlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICByZWxlYXNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1hLXByb3ZpZGVkLWtpY2tzdGFydF9maWxlJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBhbiBFeGlzdGluZyBLaWNrc3RhcnQgRmlsZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgd2FudCB0byBjcmVhdGUgeW91ciBvd24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LndrczwvZmlsZW5hbWU+IGZpbGUsIHlvdSBjYW4gdXNlIGFuIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgZmlsZSBwcm92aWRlZCBieSB0aGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGluc3RhbGxhdGlvbi4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGxpc3QgdGhlIGF2YWlsYWJsZSBmaWxlczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGxpc3QgaW1hZ2VzCisgICAgIGRpcmVjdGRpc2sgQ3JlYXRlIGEgJ3BjYmlvcycgZGlyZWN0IGRpc2sgaW1hZ2UKKyAgICAgbWtlZmlkaXNrIENyZWF0ZSBhbiBFRkkgZGlzayBpbWFnZQorICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSBhbiBleGlzdGluZyBmaWxlLCB5b3UgZG8gbm90IGhhdmUgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LndrczwvZmlsZW5hbWU+IGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGluIFJhdyBNb2RlIHRoYXQgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcmVjdGRpc2s8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGNyZWF0ZSBkaXJlY3RkaXNrIC1yIDxyZXBsYWNlYWJsZT5yb290ZnNfZGlyPC9yZXBsYWNlYWJsZT4gLWIgPHJlcGxhY2VhYmxlPmJvb3RpbWdfZGlyPC9yZXBsYWNlYWJsZT4gXAorICAgICAgICAgICAtayA8cmVwbGFjZWFibGU+a2VybmVsX2RpcjwvcmVwbGFjZWFibGU+IC1uIDxyZXBsYWNlYWJsZT5uYXRpdmVfc3lzcm9vdDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSB0aGUgYWN0dWFsIHBhcnRpdGlvbiBsYW5ndWFnZSBjb21tYW5kcworICAgICAgICAgICAgICAgIHVzZWQgaW4gdGhlIDxmaWxlbmFtZT5ta2VmaWRpc2sud2tzPC9maWxlbmFtZT4gZmlsZSB0byBnZW5lcmF0ZQorICAgICAgICAgICAgICAgIGFuIGltYWdlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBzaG9ydC1kZXNjcmlwdGlvbjogQ3JlYXRlIGFuIEVGSSBkaXNrIGltYWdlCisgICAgICMgbG9uZy1kZXNjcmlwdGlvbjogQ3JlYXRlcyBhIHBhcnRpdGlvbmVkIEVGSSBkaXNrIGltYWdlIHRoYXQgdGhlIHVzZXIKKyAgICAgIyBjYW4gZGlyZWN0bHkgZGQgdG8gYm9vdCBtZWRpYS4KKworICAgICBwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctZWZpIC0tb25kaXNrIHNkYSAtLWxhYmVsIG1zZG9zIC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorCisgICAgIHBhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDMgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKKworICAgICBwYXJ0IHN3YXAgLS1vbmRpc2sgc2RhIC0tc2l6ZSA0NCAtLWxhYmVsIHN3YXAxIC0tZnN0eXBlPXN3YXAKKworICAgICBib290bG9hZGVyICAtLXRpbWVvdXQ9MTAgIC0tYXBwZW5kPSJyb290d2FpdCByb290ZnN0eXBlPWV4dDMgY29uc29sZT10dHlQQ0gwLDExNTIwMCBjb25zb2xlPXR0eTAgdm1hbGxvYz0yNTZNQiBzbmQtaGRhLWludGVsLmVuYWJsZV9tc2k9MCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nd2ljLXVzYWdlLWV4YW1wbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5FeGFtcGxlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBzZXZlcmFsIGV4YW1wbGVzIHRoYXQgc2hvdyBob3cgdG8gdXNlCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiB1dGlsaXR5LgorICAgICAgICAgICAgICAgIEFsbCB0aGUgZXhhbXBsZXMgYXNzdW1lIHRoZSBsaXN0IG9mIHJlcXVpcmVtZW50cyBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nd2ljLXJlcXVpcmVtZW50cyc+UmVxdWlyZW1lbnRzPC9saW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgICAgIGhhdmUgYmVlbiBtZXQuCisgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGVzIGFzc3VtZSB0aGUgcHJldmlvdXNseSBnZW5lcmF0ZWQgaW1hZ2UgaXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdnZW5lcmF0ZS1hbi1pbWFnZS11c2luZy1hLXByb3ZpZGVkLWtpY2tzdGFydC1maWxlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+R2VuZXJhdGUgYW4gSW1hZ2UgdXNpbmcgYW4gRXhpc3RpbmcgS2lja3N0YXJ0IEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBydW5zIGluIENvb2tlZCBNb2RlIGFuZCB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWtlZmlkaXNrPC9maWxlbmFtZT4ga2lja3N0YXJ0IGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3aWMgY3JlYXRlIG1rZWZpZGlzayAtZSBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgQ2hlY2tpbmcgYmFzaWMgYnVpbGQgZW52aXJvbm1lbnQuLi4KKyAgICAgRG9uZS4KKworICAgICBDcmVhdGluZyBpbWFnZShzKS4uLgorCisgICAgIEluZm86IFRoZSBuZXcgaW1hZ2UocykgY2FuIGJlIGZvdW5kIGhlcmU6CisgICAgICAvdmFyL3RtcC93aWMvYnVpbGQvbWtlZmlkaXNrLTIwMTMxMDIzMDk0Ni1zZGEuZGlyZWN0CisKKyAgICAgVGhlIGZvbGxvd2luZyBidWlsZCBhcnRpZmFjdHMgd2VyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgaW1hZ2Uocyk6CisgICAgICBST09URlNfRElSOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3dvcmsvbWlubm93LXBva3ktbGludXgvY29yZS1pbWFnZS1taW5pbWFsLzEuMC1yMC9yb290ZnMKKyAgICAgIEJPT1RJTUdfRElSOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3dvcmsvbWlubm93LXBva3ktbGludXgvY29yZS1pbWFnZS1taW5pbWFsLzEuMC1yMC9jb3JlLWltYWdlLW1pbmltYWwtMS4wL2hkZGltZworICAgICAgS0VSTkVMX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy9taW5ub3cvdXNyL3NyYy9rZXJuZWwKKyAgICAgIE5BVElWRV9TWVNST09UOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eAorCisKKyAgICAgVGhlIGltYWdlKHMpIHdlcmUgY3JlYXRlZCB1c2luZyBPRSBraWNrc3RhcnQgZmlsZToKKyAgICAgIC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9zY3JpcHRzL2xpYi9pbWFnZS9jYW5uZWQtd2tzL21rZWZpZGlzay53a3MKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgc2hvd3MgdGhlIGVhc2llc3Qgd2F5IHRvIGNyZWF0ZSBhbiBpbWFnZQorICAgICAgICAgICAgICAgICAgICBieSBydW5uaW5nIGluIENvb2tlZCBNb2RlIGFuZCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1lPC9maWxlbmFtZT4gb3B0aW9uIHdpdGggYW4gZXhpc3Rpbmcga2lja3N0YXJ0CisgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEFsbCB0aGF0IGlzIG5lY2Vzc2FyeSBpcyB0byBzcGVjaWZ5IHRoZSBpbWFnZSB1c2VkIHRvCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlIHRoZSBhcnRpZmFjdHMuCisgICAgICAgICAgICAgICAgICAgIFlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBuZWVkcyB0byBoYXZlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNldCB0byB0aGUgbWFjaGluZSB5b3UgYXJlIHVzaW5nLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICAibWlubm93IiBpbiB0aGlzIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBvdXRwdXQgc3BlY2lmaWVzIHRoZSBleGFjdCBjcmVhdGVkIGFzIHdlbGwgYXMgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgaXQgd2FzIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBvdXRwdXQgYWxzbyBuYW1lcyB0aGUgYXJ0aWZhY3RzIHVzZWQgYW5kIHRoZSBleGFjdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LndrczwvZmlsZW5hbWU+IHNjcmlwdCB0aGF0IHdhcyB1c2VkIHRvIGdlbmVyYXRlCisgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGFsd2F5cyB2ZXJpZnkgdGhlIGRldGFpbHMgcHJvdmlkZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGltYWdlIHdhcyBpbmRlZWQgY3JlYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3RseSBhcyBleHBlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb250aW51aW5nIHdpdGggdGhlIGV4YW1wbGUsIHlvdSBjYW4gbm93IGRpcmVjdGx5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZDwvZmlsZW5hbWU+IHRoZSBpbWFnZSB0byBhIFVTQiBzdGljaywgb3IKKyAgICAgICAgICAgICAgICAgICAgd2hhdGV2ZXIgbWVkaWEgZm9yIHdoaWNoIHlvdSBidWlsdCB5b3VyIGltYWdlLAorICAgICAgICAgICAgICAgICAgICBhbmQgYm9vdCB0aGUgcmVzdWx0aW5nIG1lZGlhOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyBkZCBpZj0vdmFyL3RtcC93aWMvYnVpbGQvbWtlZmlkaXNrLTIwMTMxMDIzMDk0Ni1zZGEuZGlyZWN0IG9mPS9kZXYvc2RiCisgICAgIFtzdWRvXSBwYXNzd29yZCBmb3IgdHJ6OgorICAgICAxODIyNzQrMCByZWNvcmRzIGluCisgICAgIDE4MjI3NCswIHJlY29yZHMgb3V0CisgICAgIDkzMzI0Mjg4IGJ5dGVzICg5MyBNQikgY29waWVkLCAxNC40Nzc3IHMsIDYuNCBNQi9zCisgICAgIFt0cnpAZW1wYW5hZGEgfl0kIHN1ZG8gZWplY3QgL2Rldi9zZGIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLWEtbW9kaWZpZWQta2lja3N0YXJ0LWZpbGUnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBhIE1vZGlmaWVkIEtpY2tzdGFydCBGaWxlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpbWFnZSBjcmVhdGlvbiBpcyBkcml2ZW4KKyAgICAgICAgICAgICAgICAgICAgYnkgdGhlIGtpY2tzdGFydCBmaWxlLCBpdCBpcyBlYXN5IHRvIGFmZmVjdCBpbWFnZSBjcmVhdGlvbgorICAgICAgICAgICAgICAgICAgICBieSBjaGFuZ2luZyB0aGUgcGFyYW1ldGVycyBpbiB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgZGVtb25zdHJhdGVzIHRoYXQgdGhyb3VnaCBtb2RpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIDxmaWxlbmFtZT5kaXJlY3RkaXNrPC9maWxlbmFtZT4ga2lja3N0YXJ0IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzIG1lbnRpb25lZCBlYXJsaWVyLCB5b3UgY2FuIHVzZSB0aGUgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljIGxpc3QgaW1hZ2VzPC9maWxlbmFtZT4gdG8gc2hvdyB0aGUgbGlzdAorICAgICAgICAgICAgICAgICAgICBvZiBleGlzdGluZyBraWNrc3RhcnQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlc2UgZmlsZXMgcmVzaWRlIGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL2xpYi9pbWFnZS9jYW5uZWQtd2tzLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBhdmFpbGFibGUgZmlsZXMgcmVzaWRlIGluIHRoaXMgZGlyZWN0b3J5LCB5b3UKKyAgICAgICAgICAgICAgICAgICAgY2FuIGNyZWF0ZSBhbmQgYWRkIHlvdXIgb3duIGN1c3RvbSBmaWxlcyB0byB0aGUgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBTdWJzZXF1ZW50IHVzZSBvZiB0aGUgPGZpbGVuYW1lPndpYyBsaXN0IGltYWdlczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgd291bGQgdGhlbiBpbmNsdWRlIHlvdXIga2lja3N0YXJ0IGZpbGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBleGlzdGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyZWN0ZGlzazwvZmlsZW5hbWU+IGZpbGUgYWxyZWFkeSBkb2VzIG1vc3QKKyAgICAgICAgICAgICAgICAgICAgb2Ygd2hhdCBpcyBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGZvciB0aGUgaGFyZHdhcmUgaW4gdGhpcyBleGFtcGxlLCB0aGUgaW1hZ2Ugd2lsbAorICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJvb3QgZnJvbSA8ZmlsZW5hbWU+c2RiPC9maWxlbmFtZT4gaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2RhPC9maWxlbmFtZT4sIHdoaWNoIGlzIHdoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXJlY3RkaXNrPC9maWxlbmFtZT4ga2lja3N0YXJ0IGZpbGUgdXNlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGUgYmVnaW5zIGJ5IG1ha2luZyBhIGNvcHkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXJlY3RkaXNrLndrczwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL2xpYi9pbWFnZS9jYW5uZWQtd2tzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCB0aGVuIGNoYW5naW5nIHRoZSBsaW5lcyB0aGF0IHNwZWNpZnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBkaXNrIGZyb20gd2hpY2ggdG8gYm9vdC4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNwIC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9zY3JpcHRzL2xpYi9pbWFnZS9jYW5uZWQtd2tzL2RpcmVjdGRpc2sud2tzIFwKKyAgICAgICAgICAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2Uvc2NyaXB0cy9saWIvaW1hZ2UvY2FubmVkLXdrcy9kaXJlY3RkaXNrc2RiLndrcworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIE5leHQsIHRoZSBleGFtcGxlIG1vZGlmaWVzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyZWN0ZGlza3NkYi53a3M8L2ZpbGVuYW1lPiBmaWxlIGFuZCBjaGFuZ2VzIGFsbAorICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMgb2YgIjxmaWxlbmFtZT4tLW9uZGlzayBzZGE8L2ZpbGVuYW1lPiIKKyAgICAgICAgICAgICAgICAgICAgdG8gIjxmaWxlbmFtZT4tLW9uZGlzayBzZGI8L2ZpbGVuYW1lPiIuCisgICAgICAgICAgICAgICAgICAgIFRoZSBleGFtcGxlIGNoYW5nZXMgdGhlIGZvbGxvd2luZyB0d28gbGluZXMgYW5kIGxlYXZlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nIGxpbmVzIHVudG91Y2hlZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctcGNiaW9zIC0tb25kaXNrIHNkYiAtLWxhYmVsIGJvb3QgLS1hY3RpdmUgLS1hbGlnbiAxMDI0CisgICAgIHBhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RiIC0tZnN0eXBlPWV4dDMgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBsaW5lcyBhcmUgY2hhbmdlZCwgdGhlIGV4YW1wbGUgZ2VuZXJhdGVzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyZWN0ZGlza3NkYjwvZmlsZW5hbWU+IGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCBwb2ludHMgdGhlIHByb2Nlc3MgYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBhcnRpZmFjdHMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBOZXh0IFVuaXQgb2YgQ29tcHV0aW5nIChudWMpCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3aWMgY3JlYXRlIGRpcmVjdGRpc2tzZGIgLWUgY29yZS1pbWFnZS1taW5pbWFsCisgICAgIENoZWNraW5nIGJhc2ljIGJ1aWxkIGVudmlyb25tZW50Li4uCisgICAgIERvbmUuCisKKyAgICAgQ3JlYXRpbmcgaW1hZ2UocykuLi4KKworICAgICBJbmZvOiBUaGUgbmV3IGltYWdlKHMpIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgL3Zhci90bXAvd2ljL2J1aWxkL2RpcmVjdGRpc2tzZGItMjAxMzEwMjMxMTMxLXNkYi5kaXJlY3QKKworICAgICBUaGUgZm9sbG93aW5nIGJ1aWxkIGFydGlmYWN0cyB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBpbWFnZShzKToKKyAgICAgIFJPT1RGU19ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvd29yay9udWMtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3Jvb3RmcworICAgICAgQk9PVElNR19ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvbnVjL3Vzci9zaGFyZQorICAgICAgS0VSTkVMX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy9udWMvdXNyL3NyYy9rZXJuZWwKKyAgICAgIE5BVElWRV9TWVNST09UOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eAorCisKKyAgICAgVGhlIGltYWdlKHMpIHdlcmUgY3JlYXRlZCB1c2luZyBPRSBraWNrc3RhcnQgZmlsZToKKyAgICAgIC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9zY3JpcHRzL2xpYi9pbWFnZS9jYW5uZWQtd2tzL2RpcmVjdGRpc2tzZGIud2tzCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQ29udGludWluZyB3aXRoIHRoZSBleGFtcGxlLCB5b3UgY2FuIG5vdyBkaXJlY3RseQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGQ8L2ZpbGVuYW1lPiB0aGUgaW1hZ2UgdG8gYSBVU0Igc3RpY2ssIG9yCisgICAgICAgICAgICAgICAgICAgIHdoYXRldmVyIG1lZGlhIGZvciB3aGljaCB5b3UgYnVpbHQgeW91ciBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgYW5kIGJvb3QgdGhlIHJlc3VsdGluZyBtZWRpYToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gZGQgaWY9L3Zhci90bXAvd2ljL2J1aWxkL2RpcmVjdGRpc2tzZGItMjAxMzEwMjMxMTMxLXNkYi5kaXJlY3Qgb2Y9L2Rldi9zZGIKKyAgICAgODYwMTgrMCByZWNvcmRzIGluCisgICAgIDg2MDE4KzAgcmVjb3JkcyBvdXQKKyAgICAgNDQwNDEyMTYgYnl0ZXMgKDQ0IE1CKSBjb3BpZWQsIDEzLjA3MzQgcywgMy40IE1CL3MKKyAgICAgW3RyekBlbXBhbmFkYSB0bXBdJCBzdWRvIGVqZWN0IC9kZXYvc2RiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1hbi1pbWFnZS1iYXNlZC1vbi1jb3JlLWltYWdlLW1pbmltYWwtYW5kLWNyb3duYmF5LW5vZW1nZCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIGFuIEltYWdlIEJhc2VkIG9uIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmNyb3duYmF5LW5vZW1nZDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgY3JlYXRlcyBhbiBpbWFnZSBiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gYW5kIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNyb3duYmF5LW5vZW1nZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGhhdCB3b3JrcyByaWdodCBvdXQgb2YgdGhlIGJveC4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyBjcmVhdGUgZGlyZWN0ZGlzayAtZSBjb3JlLWltYWdlLW1pbmltYWwKKworICAgICBDaGVja2luZyBiYXNpYyBidWlsZCBlbnZpcm9ubWVudC4uLgorICAgICBEb25lLgorCisgICAgIENyZWF0aW5nIGltYWdlKHMpLi4uCisKKyAgICAgSW5mbzogVGhlIG5ldyBpbWFnZShzKSBjYW4gYmUgZm91bmQgaGVyZToKKyAgICAgIC92YXIvdG1wL3dpYy9idWlsZC9kaXJlY3RkaXNrLTIwMTMwOTI1MjM1MC1zZGEuZGlyZWN0CisKKyAgICAgVGhlIGZvbGxvd2luZyBidWlsZCBhcnRpZmFjdHMgd2VyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgaW1hZ2Uocyk6CisKKyAgICAgUk9PVEZTX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC93b3JrL2Nyb3duYmF5X25vZW1nZC1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC8xLjAtcjAvcm9vdGZzCisgICAgIEJPT1RJTUdfRElSOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL2Nyb3duYmF5LW5vZW1nZC91c3Ivc2hhcmUKKyAgICAgS0VSTkVMX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy9jcm93bmJheS1ub2VtZ2QvdXNyL3NyYy9rZXJuZWwKKyAgICAgTkFUSVZFX1NZU1JPT1Q6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvY3Jvd25iYXktbm9lbWdkL3Vzci9zcmMva2VybmVsCisKKyAgICAgVGhlIGltYWdlKHMpIHdlcmUgY3JlYXRlZCB1c2luZyBPRSBraWNrc3RhcnQgZmlsZToKKyAgICAgIC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9zY3JpcHRzL2xpYi9pbWFnZS9jYW5uZWQtd2tzL2RpcmVjdGRpc2sud2tzCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1hLW1vZGlmaWVkLWtpY2tzdGFydC1maWxlLWFuZC1ydW5uaW5nLWluLXJhdy1tb2RlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+VXNpbmcgYSBNb2RpZmllZCBLaWNrc3RhcnQgRmlsZSBhbmQgUnVubmluZyBpbiBSYXcgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgbWFudWFsbHkgc3BlY2lmaWVzIGVhY2ggYnVpbGQgYXJ0aWZhY3QKKyAgICAgICAgICAgICAgICAgICAgKHJ1bnMgaW4gUmF3IE1vZGUpIGFuZCB1c2VzIGEgbW9kaWZpZWQga2lja3N0YXJ0IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBleGFtcGxlIGFsc28gdXNlcyB0aGUgPGZpbGVuYW1lPi1vPC9maWxlbmFtZT4gb3B0aW9uCisgICAgICAgICAgICAgICAgICAgIHRvIGNhdXNlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiB0byBjcmVhdGUgdGhlIG91dHB1dAorICAgICAgICAgICAgICAgICAgICBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Zhci90bXAvd2ljPC9maWxlbmFtZT4gZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGNyZWF0ZSB+L3Rlc3Qud2tzIC1vIC9ob21lL3Ryei90ZXN0d2ljIC0tcm9vdGZzLWRpciBcCisgICAgICAgICAgL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC93b3JrL2Nyb3duYmF5X25vZW1nZC1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC8xLjAtcjAvcm9vdGZzIFwKKyAgICAgICAgICAtLWJvb3RpbWctZGlyIC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvY3Jvd25iYXktbm9lbWdkL3Vzci9zaGFyZSBcCisgICAgICAgICAgLS1rZXJuZWwtZGlyIC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvY3Jvd25iYXktbm9lbWdkL3Vzci9zcmMva2VybmVsIFwKKyAgICAgICAgICAtLW5hdGl2ZS1zeXNyb290IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4CisKKyAgICAgQ3JlYXRpbmcgaW1hZ2UocykuLi4KKworICAgICBJbmZvOiBUaGUgbmV3IGltYWdlKHMpIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgL2hvbWUvdHJ6L3Rlc3R3aWMvYnVpbGQvdGVzdC0yMDEzMDkyNjAwMzItc2RhLmRpcmVjdAorCisgICAgIFRoZSBmb2xsb3dpbmcgYnVpbGQgYXJ0aWZhY3RzIHdlcmUgdXNlZCB0byBjcmVhdGUgdGhlIGltYWdlKHMpOgorCisgICAgIFJPT1RGU19ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvd29yay9jcm93bmJheV9ub2VtZ2QtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3Jvb3RmcworICAgICBCT09USU1HX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy9jcm93bmJheS1ub2VtZ2QvdXNyL3NoYXJlCisgICAgIEtFUk5FTF9ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvY3Jvd25iYXktbm9lbWdkL3Vzci9zcmMva2VybmVsCisgICAgIE5BVElWRV9TWVNST09UOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL2Nyb3duYmF5LW5vZW1nZC91c3Ivc3JjL2tlcm5lbAorCisgICAgIFRoZSBpbWFnZShzKSB3ZXJlIGNyZWF0ZWQgdXNpbmcgT0Uga2lja3N0YXJ0IGZpbGU6CisgICAgICAvaG9tZS90cnovdGVzdC53a3MKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhpcyBleGFtcGxlLAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGRpZCBub3QgaGF2ZSB0byBiZSBzcGVjaWZpZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBzaW5jZSB0aGUgYXJ0aWZhY3QgaXMKKyAgICAgICAgICAgICAgICAgICAgbWFudWFsbHkgc3BlY2lmaWVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdvcGVuZW1iZWRkZWQta2lja3N0YXJ0LXBsdWdpbnMnPgorICAgICAgICAgICAgPHRpdGxlPlBsdWdpbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKwkgICAgICAgICAgICBQbHVnaW5zIGFsbG93IDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBmdW5jdGlvbmFsaXR5IHRvCisJICAgICAgICAgICAgYmUgZXh0ZW5kZWQgYW5kIHNwZWNpYWxpemVkIGJ5IHVzZXJzLgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkb2N1bWVudHMgdGhlIHBsdWdpbiBpbnRlcmZhY2UsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgY3VycmVudGx5IHJlc3RyaWN0ZWQgdG8gc291cmNlIHBsdWdpbnMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorCSAgICAgICAgICAgIFNvdXJjZSBwbHVnaW5zIHByb3ZpZGUgYSBtZWNoYW5pc20gdG8gY3VzdG9taXplCisJICAgICAgICAgICAgdmFyaW91cyBhc3BlY3RzIG9mIHRoZSBpbWFnZSBnZW5lcmF0aW9uIHByb2Nlc3MgaW4KKwkgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4sIG1haW5seSB0aGUgY29udGVudHMgb2YKKwkgICAgICAgICAgICBwYXJ0aXRpb25zLgorCSAgICAgICAgICAgIFRoZSBwbHVnaW5zIHByb3ZpZGUgYSBtZWNoYW5pc20gZm9yIG1hcHBpbmcgdmFsdWVzCisJICAgICAgICAgICAgc3BlY2lmaWVkIGluIDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4gZmlsZXMgdXNpbmcgdGhlCisJICAgICAgICAgICAgPGZpbGVuYW1lPi0tc291cmNlPC9maWxlbmFtZT4ga2V5d29yZCB0byBhCisgICAgICAgICAgICAgICAgcGFydGljdWxhciBwbHVnaW4gaW1wbGVtZW50YXRpb24gdGhhdCBwb3B1bGF0ZXMgYQorICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgcGFydGl0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKwkgICAgICAgICAgICBBIHNvdXJjZSBwbHVnaW4gaXMgY3JlYXRlZCBhcyBhIHN1YmNsYXNzIG9mCisJICAgICAgICAgICAgPGZpbGVuYW1lPlNvdXJjZVBsdWdpbjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBwbHVnaW4gZmlsZSBjb250YWluaW5nIGl0IGlzIGFkZGVkIHRvCisJICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvbGliL21pYy9wbHVnaW5zL3NvdXJjZS88L2ZpbGVuYW1lPiB0bworCSAgICAgICAgICAgIG1ha2UgdGhlIHBsdWdpbiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gdGhlCisJICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGltcGxlbWVudGF0aW9uLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKKwkgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0cy9saWIvbWljL3BsdWdpbmJhc2UucHk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisJICAgICAgICAgICAgU291cmNlIHBsdWdpbnMgY2FuIGFsc28gYmUgaW1wbGVtZW50ZWQgYW5kIGFkZGVkIGJ5CisJICAgICAgICAgICAgZXh0ZXJuYWwgbGF5ZXJzLgorICAgICAgICAgICAgICAgIEFzIHN1Y2gsIGFueSBwbHVnaW5zIGZvdW5kIGluIGEKKwkgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0cy9saWIvbWljL3BsdWdpbnMvc291cmNlLzwvZmlsZW5hbWU+CisJICAgICAgICAgICAgZGlyZWN0b3J5IGluIGFuIGV4dGVybmFsIGxheWVyIGFyZSBhbHNvIG1hZGUKKwkgICAgICAgICAgICBhdmFpbGFibGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorCSAgICAgICAgICAgIFdoZW4gdGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbiBuZWVkcworCSAgICAgICAgICAgIHRvIGludm9rZSBhIHBhcnRpdGlvbi1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiwgaXQgbG9va3MKKwkgICAgICAgICAgICBmb3IgdGhlIHBsdWdpbiB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIGFzIHRoZQorCSAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNvdXJjZTwvZmlsZW5hbWU+IHBhcmFtZXRlciBnaXZlbiB0bworICAgICAgICAgICAgICAgIHRoYXQgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgcGFydGl0aW9uIGlzIHNldCB1cCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBjYmlvcyAgIC4uLgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKwkgICAgICAgICAgICBUaGUgbWV0aG9kcyBkZWZpbmVkIGFzIGNsYXNzIG1lbWJlcnMgb2YgdGhlIHBsdWdpbgorCSAgICAgICAgICAgIGhhdmluZyB0aGUgbWF0Y2hpbmcgPGZpbGVuYW1lPmJvb3RpbWctcGNiaW9zLm5hbWU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNsYXNzIG1lbWJlciBhcmUgdXNlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisJICAgICAgICAgICAgVG8gYmUgbW9yZSBjb25jcmV0ZSwgaGVyZSBpcyB0aGUgcGx1Z2luIGRlZmluaXRpb24gdGhhdAorCSAgICAgICAgICAgIG1hdGNoZXMgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNvdXJjZSBib290aW1nLXBjYmlvczwvZmlsZW5hbWU+IHVzYWdlLAorICAgICAgICAgICAgICAgIGFsb25nIHdpdGggYW4gZXhhbXBsZQorCSAgICAgICAgICAgIG1ldGhvZCBjYWxsZWQgYnkgdGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgICAgICAgIHdoZW4gaXQgbmVlZHMgdG8gaW52b2tlIGFuIGltcGxlbWVudGF0aW9uLXNwZWNpZmljCisJICAgICAgICAgICAgcGFydGl0aW9uLXByZXBhcmF0aW9uIGZ1bmN0aW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBjbGFzcyBCb290aW1nUGNiaW9zUGx1Z2luKFNvdXJjZVBsdWdpbik6CisgICAgICAgIG5hbWUgPSAnYm9vdGltZy1wY2Jpb3MnCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIGRvX3ByZXBhcmVfcGFydGl0aW9uKHNlbGYsIHBhcnQsIC4uLikKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisJICAgICAgICAgICAgSWYgdGhlIHN1YmNsYXNzIGl0c2VsZiBkb2VzIG5vdCBpbXBsZW1lbnQgYSBmdW5jdGlvbiwgYQorCSAgICAgICAgICAgIGRlZmF1bHQgdmVyc2lvbiBpbiBhIHN1cGVyY2xhc3MgaXMgbG9jYXRlZCBhbmQKKwkgICAgICAgICAgICB1c2VkLCB3aGljaCBpcyB3aHkgYWxsIHBsdWdpbnMgbXVzdCBiZSBkZXJpdmVkIGZyb20KKwkgICAgICAgICAgICA8ZmlsZW5hbWU+U291cmNlUGx1Z2luPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorCSAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+U291cmNlUGx1Z2luPC9maWxlbmFtZT4gY2xhc3MgZGVmaW5lcyB0aGUKKwkgICAgICAgICAgICBmb2xsb3dpbmcgbWV0aG9kcywgd2hpY2ggaXMgdGhlIGN1cnJlbnQgc2V0IG9mIG1ldGhvZHMKKwkgICAgICAgICAgICB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBvciBvdmVycmlkZGVuIGJ5CisJICAgICAgICAgICAgPGZpbGVuYW1lPi0tc291cmNlPC9maWxlbmFtZT4gcGx1Z2lucy4KKyAgICAgICAgICAgICAgICBBbnkgbWV0aG9kcyBub3QgaW1wbGVtZW50ZWQgYnkgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPiBzdWJjbGFzcyBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucyBwcmVzZW50IGluIHRoZQorCSAgICAgICAgICAgIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorCSAgICAgICAgICAgIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPiBzb3VyY2UgZm9yIGRldGFpbHM6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRvX3ByZXBhcmVfcGFydGl0aW9uKCk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbGVkIHRvIGRvIHRoZSBhY3R1YWwgY29udGVudCBwb3B1bGF0aW9uIGZvciBhCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIG1ldGhvZCBwcmVwYXJlcyB0aGUgZmluYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbiBpbWFnZSB0aGF0IGlzIGluY29ycG9yYXRlZCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZGlzayBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb19jb25maWd1cmVfcGFydGl0aW9uKCk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbGVkIGJlZm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3ByZXBhcmVfcGFydGl0aW9uKCk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIHR5cGljYWxseSB1c2VkIHRvIGNyZWF0ZSBjdXN0b20KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIGEgcGFydGl0aW9uIChlLmcuIHN5c2xpbnV4IG9yCisgICAgICAgICAgICAgICAgICAgICAgICBncnViIGNvbmZpZ3VyYXRpb24gZmlsZXMpLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRvX2luc3RhbGxfZGlzaygpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENhbGxlZCBhZnRlciBhbGwgcGFydGl0aW9ucyBoYXZlIGJlZW4gcHJlcGFyZWQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlbWJsZWQgaW50byBhIGRpc2sgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIGhvb2sgdG8gYWxsb3cgZmluYWxpemF0aW9uIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc2sgaW1hZ2UsIChlLmcuIHdyaXRpbmcgYW4gTUJSKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb19zdGFnZV9wYXJ0aXRpb24oKTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWFsIGNvbnRlbnQtc3RhZ2luZyBob29rIGNhbGxlZCBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wcmVwYXJlX3BhcnRpdGlvbigpPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBub3JtYWxseSBlbXB0eS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UeXBpY2FsbHksIGEgcGFydGl0aW9uIGp1c3QgdXNlcyB0aGUgcGFzc2VkLWluCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzIChlLmcuIHRoZSB1bm1vZGlmaWVkIHZhbHVlIG9mCisJCSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ym9vdGltZ19kaXI8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpbiBzb21lIGNhc2VzIHRoaW5ncyBtaWdodCBuZWVkIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBtb3JlIHRhaWxvcmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgY2VydGFpbiBmaWxlcyBtaWdodCBhZGRpdGlvbmFsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gYmUgdGFrZW4gZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJvb3RpbWdfZGlyICsgL2Jvb3Q8L2ZpbGVuYW1lPi4KKwkJICAgICAgICAgICAgICAgIFRoaXMgaG9vayBhbGxvd3MgdGhvc2UgZmlsZXMgdG8gYmUgc3RhZ2VkIGluIGEKKwkJICAgICAgICAgICAgICAgIGN1c3RvbWl6ZWQgZmFzaGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nZXRfYml0YmFrZV92YXIoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dzIHlvdSB0byBhY2Nlc3Mgbm9uLXN0YW5kYXJkIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgeW91IG1pZ2h0IHdhbnQgdG8gdXNlIGZvciB0aGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2NoZW1lIGlzIGV4dGVuc2libGUuCisgICAgICAgICAgICAgICAgQWRkaW5nIG1vcmUgaG9va3MgaXMgYSBzaW1wbGUgbWF0dGVyIG9mIGFkZGluZyBtb3JlCisgICAgICAgICAgICAgICAgcGx1Z2luIG1ldGhvZHMgdG8gPGZpbGVuYW1lPlNvdXJjZVBsdWdpbjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIGRlcml2ZWQgY2xhc3Nlcy4KKyAgICAgICAgICAgICAgICBUaGUgY29kZSB0aGF0IHRoZW4gbmVlZHMgdG8gY2FsbCB0aGUgcGx1Z2luIG1ldGhvZHMgdXNlcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wbHVnaW4uZ2V0X3NvdXJjZV9wbHVnaW5fbWV0aG9kcygpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB0byBmaW5kIHRoZSBtZXRob2Qgb3IgbWV0aG9kcyBuZWVkZWQgYnkgdGhlIGNhbGwuCisgICAgICAgICAgICAgICAgUmV0cmlldmFsIG9mIHRob3NlIG1ldGhvZHMgaXMgYWNjb21wbGlzaGVkCisgICAgICAgICAgICAgICAgYnkgZmlsbGluZyB1cCBhIGRpY3Qgd2l0aCBrZXlzCisgICAgICAgICAgICAgICAgY29udGFpbmluZyB0aGUgbWV0aG9kIG5hbWVzIG9mIGludGVyZXN0LgorICAgICAgICAgICAgICAgIE9uIHN1Y2Nlc3MsIHRoZXNlIHdpbGwgYmUgZmlsbGVkIGluIHdpdGggdGhlIGFjdHVhbAorICAgICAgICAgICAgICAgIG1ldGhvZHMuCisgICAgICAgICAgICAgICAgUGxlYXNlIHNlZSB0aGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gZm9yIGV4YW1wbGVzIGFuZCBkZXRhaWxzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J29wZW5lbWJlZGRlZC1raWNrc3RhcnQtd2tzLXJlZmVyZW5jZSc+CisgICAgICAgICAgICA8dGl0bGU+T3BlbkVtYmVkZGVkIEtpY2tzdGFydCAoLndrcykgUmVmZXJlbmNlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGN1cnJlbnQgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGltcGxlbWVudGF0aW9uIHN1cHBvcnRzCisgICAgICAgICAgICAgICAgb25seSB0aGUgYmFzaWMga2lja3N0YXJ0IHBhcnRpdGlvbmluZyBjb21tYW5kczoKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFydGl0aW9uPC9maWxlbmFtZT4gKG9yIDxmaWxlbmFtZT5wYXJ0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmb3Igc2hvcnQpIGFuZCA8ZmlsZW5hbWU+Ym9vdGxvYWRlcjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBGdXR1cmUgdXBkYXRlcyB3aWxsIGltcGxlbWVudCBtb3JlIGNvbW1hbmRzIGFuZCBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIGFueXRoaW5nIHRoYXQgaXMgbm90IHNwZWNpZmljYWxseQorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQsIHJlc3VsdHMgY2FuIGJlIHVucHJlZGljdGFibGUuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiB0aGUgY29tbWFuZHMsIHRoZWlyIHN5bnRheCwKKyAgICAgICAgICAgICAgICBhbmQgbWVhbmluZ3MuCisgICAgICAgICAgICAgICAgVGhlIGNvbW1hbmRzIGFyZSBiYXNlZCBvbiB0aGUgRmVkb3JhCisgICAgICAgICAgICAgICAga2lja3N0YXJ0IHZlcnNpb25zIGJ1dCB3aXRoIG1vZGlmaWNhdGlvbnMgdG8KKyAgICAgICAgICAgICAgICByZWZsZWN0IDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBjYXBhYmlsaXRpZXMuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIG9yaWdpbmFsIGRvY3VtZW50YXRpb24gZm9yIHRob3NlIGNvbW1hbmRzCisgICAgICAgICAgICAgICAgYXQgdGhlIGZvbGxvd2luZyBsaW5rczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9BbmFjb25kYS9LaWNrc3RhcnQjcGFydF9vcl9wYXJ0aXRpb24nPmh0dHA6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0FuYWNvbmRhL0tpY2tzdGFydCNwYXJ0X29yX3BhcnRpdGlvbjwvdWxpbms+CisJCQkgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvQW5hY29uZGEvS2lja3N0YXJ0I2Jvb3Rsb2FkZXInPmh0dHA6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0FuYWNvbmRhL0tpY2tzdGFydCNib290bG9hZGVyPC91bGluaz4KKwkJCSAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY29tbWFuZC1wYXJ0LW9yLXBhcnRpdGlvbic+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNvbW1hbmQ6IHBhcnQgb3IgcGFydGl0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgcGFydGl0aW9uIG9uIHRoZSBzeXN0ZW0gYW5kIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIHN5bnRheDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwYXJ0IDxyZXBsYWNlYWJsZT5tbnRwb2ludDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT48cmVwbGFjZWFibGU+bW50cG9pbnQ8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIHdoZXJlIHRoZQorICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24gd2lsbCBiZSBtb3VudGVkIGFuZCBtdXN0IGJlIG9mIG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGZvcm1zOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT4vPHJlcGxhY2VhYmxlPnBhdGg8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCA8ZmlsZW5hbWU+LzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vaG9tZTwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnN3YXA8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcGFydGl0aW9uIHdpbGwgYmUgdXNlZCBhcyBzd2FwIHNwYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIG9wdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT4tLXNpemU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbXVtIHBhcnRpdGlvbiBzaXplIGluIE1CeXRlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5IGFuIGludGVnZXIgdmFsdWUgc3VjaCBhcyA1MDAuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG8gbm90IGFwcGVuZCB0aGUgbnVtYmVyIHdpdGggIk1CIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgdGhpcyBvcHRpb24gaWYgeW91IHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNvdXJjZTwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+LS1zb3VyY2U8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4tc3BlY2lmaWMgb3B0aW9uIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcyB0aGUgc291cmNlIG9mIHRoZSBkYXRhIHRoYXQgcG9wdWxhdGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbW9zdCBjb21tb24gdmFsdWUgZm9yIHRoaXMgb3B0aW9uIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJvb3RmcyIsIGJ1dCB5b3UgY2FuIHVzZSBhbnkgdmFsdWUgdGhhdCBtYXBzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSB2YWxpZCBzb3VyY2UgcGx1Z2luLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgc291cmNlIHBsdWdpbnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nb3BlbmVtYmVkZGVkLWtpY2tzdGFydC1wbHVnaW5zJz5QbHVnaW5zPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0tc291cmNlIHJvb3RmczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBjcmVhdGVzIGEgcGFydGl0aW9uIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFyZ2UgYXMgbmVlZGVkIGFuZCB0byBmaWxsIGl0IHdpdGggdGhlIGNvbnRlbnRzIG9mCisJCQkgICAgICAgICAgICAgICAgdGhlIHJvb3QgZmlsZXN5c3RlbSBwb2ludGVkIHRvIGJ5IHRoZQorCQkJICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tcjwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZSBvcHRpb24KKwkJCSAgICAgICAgICAgICAgICBvciB0aGUgZXF1aXZhbGVudCByb290ZnMgZGVyaXZlZCBmcm9tIHRoZQorCQkJICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZTwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZQorCQkJICAgICAgICAgICAgICAgIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZXN5c3RlbSB0eXBlIHVzZWQgdG8gY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbiBpcyBkcml2ZW4gYnkgdGhlIHZhbHVlIG9mIHRoZQorCQkJICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLWZzdHlwZTwvZmlsZW5hbWU+IG9wdGlvbgorCQkJICAgICAgICAgICAgICAgIHNwZWNpZmllZCBmb3IgdGhlIHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIGVudHJ5IG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0tZnN0eXBlPC9maWxlbmFtZT4gdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisJCQkgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1zb3VyY2UgPHJlcGxhY2VhYmxlPnBsdWdpbi1uYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gY3JlYXRlcyBhIHBhcnRpdGlvbiBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhcmdlIGFzIG5lZWRlZCBhbmQgZmlsbHMgaXQgd2l0aCB0aGUgY29udGVudHMgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGFydGl0aW9uIHRoYXQgaXMgZ2VuZXJhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBwbHVnaW4gbmFtZSB1c2luZyB0aGUgZGF0YSBwb2ludGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYnkgdGhlIDxmaWxlbmFtZT4tcjwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiBvciB0aGUgZXF1aXZhbGVudCByb290ZnMgZGVyaXZlZCBmcm9tIHRoZQorCQkJICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZTwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZQorCQkJICAgICAgICAgICAgICAgIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGFjdGx5IHdoYXQgdGhvc2UgY29udGVudHMgYW5kCisJCQkgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSB0eXBlIGVuZCB1cCBiZWluZyBhcmUgZGVwZW5kZW50CisJCQkgICAgICAgICAgICAgICAgb24gdGhlIGdpdmVuIHBsdWdpbiBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPi0tb25kaXNrPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPi0tb25kcml2ZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VzIHRoZSBwYXJ0aXRpb24gdG8gYmUgY3JlYXRlZCBvbiBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+LS1mc3R5cGU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHMgdGhlIGZpbGUgc3lzdGVtIHR5cGUgZm9yIHRoZSBwYXJ0aXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWQgdmFsdWVzIGFyZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmV4dDQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5leHQzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZXh0MjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJ0cmZzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+c3F1YXNoZnM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5zd2FwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT4tLWZzb3B0aW9uczwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgZnJlZS1mb3JtIHN0cmluZyBvZiBvcHRpb25zIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB3aGVuIG1vdW50aW5nIHRoZSBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc3RyaW5nIHdpbGwgYmUgY29waWVkIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvZnN0YWI8L2ZpbGVuYW1lPiBmaWxlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBzeXN0ZW0gYW5kIHNob3VsZCBiZSBlbmNsb3NlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyAiZGVmYXVsdHMiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+LS1sYWJlbCBsYWJlbDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsYWJlbCB0byBnaXZlIHRvIHRoZSBmaWxlc3lzdGVtIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgbWFkZSBvbiB0aGUgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBnaXZlbiBsYWJlbCBpcyBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSwgYSBuZXcgbGFiZWwgaXMgY3JlYXRlZCBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+LS1hY3RpdmU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtzIHRoZSBwYXJ0aXRpb24gYXMgYWN0aXZlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+LS1hbGlnbiAoaW4gS0J5dGVzKTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgYSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4tc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gdGhhdCBzYXlzIHRvIHN0YXJ0IGEgcGFydGl0aW9uIG9uIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCBLQnl0ZXMgYm91bmRhcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbW1hbmQtYm9vdGxvYWRlcic+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNvbW1hbmQ6IGJvb3Rsb2FkZXI8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBzcGVjaWZpZXMgaG93IHRoZSBib290IGxvYWRlciBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZCBhbmQgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJvb3Rsb2FkZXIgZnVuY3Rpb25hbGl0eSBhbmQgYm9vdCBwYXJ0aXRpb25zIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQgYnkgdGhlIHZhcmlvdXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNvdXJjZTwvZmlsZW5hbWU+CisJCQkgICAgICAgICAgICBwbHVnaW5zIHRoYXQgaW1wbGVtZW50IGJvb3Rsb2FkZXIgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBib290bG9hZGVyIGNvbW1hbmQgZXNzZW50aWFsbHkgcHJvdmlkZXMgYSBtZWFucyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZ5aW5nIGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+LS10aW1lb3V0PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290bG9hZGVyIHRpbWVzIG91dCBhbmQgYm9vdHMgdGhlIGRlZmF1bHQgb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+LS1hcHBlbmQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBrZXJuZWwgcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVzZSBwYXJhbWV0ZXJzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHN5c2xpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkFQUEVORDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdydWI8L2ZpbGVuYW1lPiBrZXJuZWwgY29tbWFuZCBsaW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nY29uZmlndXJpbmctdGhlLWtlcm5lbCc+CisgICAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgS2VybmVsPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENvbmZpZ3VyaW5nIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBjb25zaXN0cyBvZiBtYWtpbmcgc3VyZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBoYXMgYWxsIHRoZSByaWdodCBpbmZvcm1hdGlvbgorICAgICAgICAgICAgaW4gaXQgZm9yIHRoZSBpbWFnZSB5b3UgYXJlIGJ1aWxkaW5nLgorICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gdG9vbCBhbmQKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIHRvIG1ha2Ugc3VyZSB5b3VyCisgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgaXMganVzdCBob3cgeW91IG5lZWQgaXQuCisgICAgICAgICAgICBZb3UgY2FuIGFsc28gc2F2ZSBrbm93biBjb25maWd1cmF0aW9ucyBpbiBhCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSB0aGF0IHRoZSBidWlsZCBzeXN0ZW0gY2FuIHVzZQorICAgICAgICAgICAgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byB1c2UgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIGNyZWF0ZSBhbmQgdXNlIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLCBhbmQgaG93IHRvIGludGVyYWN0aXZlbHkKKyAgICAgICAgICAgIG1vZGlmeSB5b3VyIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSB0byBjcmVhdGUgdGhlCisgICAgICAgICAgICBsZWFuZXN0IGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgcG9zc2libGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uJz5DaGFuZ2luZyB0aGUgQ29uZmlndXJhdGlvbjwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLW1lbnVjb25maWcnPgorICAgICAgICAgICAgPHRpdGxlPlVzaW5nJm5ic3A7Jm5ic3A7PGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBlYXNpZXN0IHdheSB0byBkZWZpbmUga2VybmVsIGNvbmZpZ3VyYXRpb25zIGlzIHRvIHNldCB0aGVtIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB0b29sLgorICAgICAgICAgICAgICAgIFRoaXMgdG9vbCBwcm92aWRlcyBhbiBpbnRlcmFjdGl2ZSBtZXRob2Qgd2l0aCB3aGljaAorICAgICAgICAgICAgICAgIHRvIHNldCBrZXJuZWwgY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICAgICAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gb24gPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiwgc2VlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NZW51Y29uZmlnJz48L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gdXNlIHRoZSA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IHRvb2wgaW4gdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCwgeW91IG11c3QgbGF1bmNoIGl0IHVzaW5nIEJpdEJha2UuCisgICAgICAgICAgICAgICAgVGh1cywgdGhlIGVudmlyb25tZW50IG11c3QgYmUgc2V0IHVwIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBzY3JpcHQgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgIFlvdSBtdXN0IGFsc28gYmUgc3VyZSBvZiB0aGUgc3RhdGUgb2YgeW91ciBidWlsZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIHJ1biA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYXNzdW1pbmcgdGhlIFNvdXJjZSBEaXJlY3RvcnkncyB0b3AtbGV2ZWwgZm9sZGVyIGlzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPn4vcG9reTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCBwb2t5CisgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52CisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBrZXJuZWxfY29uZmlnbWUgLWYKKyAgICAgJCBiaXRiYWtlIGxpbnV4LXlvY3RvIC1jIG1lbnVjb25maWcKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT25jZSA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IGNvbWVzIHVwLCBpdHMgc3RhbmRhcmQKKyAgICAgICAgICAgICAgICBpbnRlcmZhY2UgYWxsb3dzIHlvdSB0byBpbnRlcmFjdGl2ZWx5IGV4YW1pbmUgYW5kIGNvbmZpZ3VyZQorICAgICAgICAgICAgICAgIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAgICBBZnRlciBtYWtpbmcgeW91ciBjaGFuZ2VzLCBzaW1wbHkgZXhpdCB0aGUgdG9vbCBhbmQgc2F2ZSB5b3VyCisgICAgICAgICAgICAgICAgY2hhbmdlcyB0byBjcmVhdGUgYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDb25zaWRlciBhbiBleGFtcGxlIHRoYXQgY29uZmlndXJlcyB0aGUgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGtlcm5lbC4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSByZWNvZ25pemVzIHRoaXMga2VybmVsIGFzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGh1cywgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBmcm9tIHRoZSBzaGVsbCBpbiB3aGljaCB5b3UgcHJldmlvdXNseSBzb3VyY2VkIHRoZQorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGluaXRpYWxpemF0aW9uIHNjcmlwdCBjbGVhbnMgdGhlIHNoYXJlZCBzdGF0ZSBjYWNoZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBhbmQgdGhlbiBydW5zIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMgbWVudWNvbmZpZworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IGxhdW5jaGVzLCB1c2UgdGhlIGludGVyZmFjZQorICAgICAgICAgICAgICAgIHRvIG5hdmlnYXRlIHRocm91Z2ggdGhlIHNlbGVjdGlvbnMgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBpbgorICAgICAgICAgICAgICAgIHdoaWNoIHlvdSBhcmUgaW50ZXJlc3RlZC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIDxmaWxlbmFtZT5DT05GSUdfU01QPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBzZXR0aW5nLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBpdCBhdCA8ZmlsZW5hbWU+UHJvY2Vzc29yIFR5cGUgYW5kIEZlYXR1cmVzPC9maWxlbmFtZT4gdW5kZXIKKyAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBzZWxlY3Rpb24gPGZpbGVuYW1lPlN5bW1ldHJpYyBNdWx0aS1wcm9jZXNzaW5nIFN1cHBvcnQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBBZnRlciBoaWdobGlnaHRpbmcgdGhlIHNlbGVjdGlvbiwgdXNlIHRoZSBhcnJvdyBrZXlzIHRvIHNlbGVjdCBvciBkZXNlbGVjdAorICAgICAgICAgICAgICAgIHRoZSBzZXR0aW5nLgorICAgICAgICAgICAgICAgIFdoZW4geW91IGFyZSBmaW5pc2hlZCB3aXRoIGFsbCB5b3VyIHNlbGVjdGlvbnMsIGV4aXQgb3V0IGFuZCBzYXZlIHRoZW0uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNhdmluZyB0aGUgc2VsZWN0aW9ucyB1cGRhdGVzIHRoZSA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBmaWxlIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0byBjb25maWd1cmUgdGhlCisgICAgICAgICAgICAgICAga2VybmVsIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGFuZCBleGFtaW5lIHRoaXMgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC93b3JrLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBhY3R1YWwgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBpcyBsb2NhdGVkIGluIHRoZSBhcmVhIHdoZXJlIHRoZQorICAgICAgICAgICAgICAgIHNwZWNpZmljIGtlcm5lbCBpcyBidWlsdC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IHdlcmUgYnVpbGRpbmcgYSBMaW51eCBZb2N0byBrZXJuZWwgYmFzZWQgb24gdGhlCisgICAgICAgICAgICAgICAgTGludXggMy4xNCBrZXJuZWwgYW5kIHlvdSB3ZXJlIGJ1aWxkaW5nIGEgUUVNVSBpbWFnZSB0YXJnZXRlZCBmb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eDg2PC9maWxlbmFtZT4gYXJjaGl0ZWN0dXJlLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgd291bGQgYmUgbG9jYXRlZCBoZXJlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcG9reS9idWlsZC90bXAvd29yay9xZW11eDg2LXBva3ktbGludXgvbGludXgteW9jdG8tMy4xNC4xMStnaXQxKzg0Zi4uLgorICAgICAgICAuLi42NTZlZDMwLXIxL2xpbnV4LXFlbXV4ODYtc3RhbmRhcmQtYnVpbGQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIGRpcmVjdG9yeSBpcyBhcnRpZmljaWFsbHkgc3BsaXQgYW5kIG1hbnkgb2YgdGhlIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGFjdHVhbCBmaWxlbmFtZSBhcmUgb21pdHRlZCBpbiBvcmRlciB0byBtYWtlIGl0IG1vcmUgcmVhZGFibGUuCisgICAgICAgICAgICAgICAgICAgIEFsc28sIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIHlvdSBhcmUgdXNpbmcsIHRoZSBleGFjdCBwYXRobmFtZQorICAgICAgICAgICAgICAgICAgICBmb3IgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTQuLi48L2ZpbGVuYW1lPiBtaWdodCBkaWZmZXIuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaXRoaW4gdGhlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSwgeW91IGNhbiBzZWUgdGhlIGtlcm5lbCBzZXR0aW5ncy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBlbnRyeSBzaG93cyB0aGF0IHN5bW1ldHJpYyBtdWx0aS1wcm9jZXNzb3Igc3VwcG9ydAorICAgICAgICAgICAgICAgIGlzIG5vdCBzZXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIENPTkZJR19TTVAgaXMgbm90IHNldAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBnb29kIG1ldGhvZCB0byBpc29sYXRlIGNoYW5nZWQgY29uZmlndXJhdGlvbnMgaXMgdG8gdXNlIGEgY29tYmluYXRpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB0b29sIGFuZCBzaW1wbGUgc2hlbGwgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgQmVmb3JlIGNoYW5naW5nIGNvbmZpZ3VyYXRpb25zIHdpdGggPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiwgY29weSB0aGUKKyAgICAgICAgICAgICAgICBleGlzdGluZyA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGFuZCByZW5hbWUgaXQgdG8gc29tZXRoaW5nIGVsc2UsCisgICAgICAgICAgICAgICAgdXNlIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gdG8gbWFrZQorICAgICAgICAgICAgICAgIGFzIG1hbnkgY2hhbmdlcyBhcyB5b3Ugd2FudCBhbmQgc2F2ZSB0aGVtLCB0aGVuIGNvbXBhcmUgdGhlIHJlbmFtZWQgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgYWdhaW5zdCB0aGUgbmV3bHkgY3JlYXRlZCBmaWxlLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSByZXN1bHRpbmcgZGlmZmVyZW5jZXMgYXMgeW91ciBiYXNlIHRvIGNyZWF0ZSBjb25maWd1cmF0aW9uIGZyYWdtZW50cworICAgICAgICAgICAgICAgIHRvIHBlcm1hbmVudGx5IHNhdmUgaW4geW91ciBrZXJuZWwgbGF5ZXIuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gbWFrZSBhIGNvcHkgb2YgdGhlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gYW5kIGRvbid0IGp1c3QKKyAgICAgICAgICAgICAgICAgICAgcmVuYW1lIGl0LgorICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIG5lZWRzIGFuIGV4aXN0aW5nIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZnJvbSB3aGljaCB0byB3b3JrLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1hLWRlZmNvbmZpZy1maWxlJz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhJm5ic3A7Jm5ic3A7PGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlIGlzIHNpbXBseSBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiByZW5hbWVkIHRvICJkZWZjb25maWciLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGEgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICB0byByZXRhaW4gYSBrbm93biBzZXQgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb25zIGZyb20gd2hpY2ggdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4gZHJhdyB0byBjcmVhdGUgdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBPdXQtb2YtdGhlLWJveCwgdGhlIFlvY3RvIFByb2plY3QgbmV2ZXIgc2hpcHMgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgdXNlZCB0byBjb25maWd1cmUgdGhlCisgICAgICAgICAgICAgICAgICAgIGtlcm5lbC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGNyZWF0ZSBhIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiwgc3RhcnQgd2l0aCBhCisgICAgICAgICAgICAgICAgY29tcGxldGUsIHdvcmtpbmcgTGludXgga2VybmVsIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIENvcHkgdGhhdCBmaWxlIHRvIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpbiB5b3VyIGxheWVyJ3MKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1rZXJuZWwvbGludXg8L2ZpbGVuYW1lPiBkaXJlY3RvcnksIGFuZCByZW5hbWUKKyAgICAgICAgICAgICAgICB0aGUgY29waWVkIGZpbGUgdG8gImRlZmNvbmZpZyIuCisgICAgICAgICAgICAgICAgVGhlbiwgYWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8gdGhlIGxpbnV4LXlvY3RvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgaW4geW91ciBsYXllcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKKyAgICAgU1JDX1VSSSArPSAiZmlsZTovL2RlZmNvbmZpZyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHRlbGxzIHRoZSBidWlsZCBzeXN0ZW0gaG93IHRvIHNlYXJjaCBmb3IgdGhlIGZpbGUsIHdoaWxlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgZXh0ZW5kcyB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIChzZWFyY2ggZGlyZWN0b3JpZXMpIHRvIGluY2x1ZGUgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UE59PC9maWxlbmFtZT4gZGlyZWN0b3J5IHlvdSBjcmVhdGVkIHRvIGhvbGQgdGhlCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGFwcGxpZXMgdGhlIGNvbmZpZ3VyYXRpb25zIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlIGJlZm9yZSBhcHBseWluZyBhbnkKKyAgICAgICAgICAgICAgICAgICAgc3Vic2VxdWVudCBjb25maWd1cmF0aW9uIGZyYWdtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIGtlcm5lbCBjb25maWd1cmF0aW9uIGlzIGEgY29tYmluYXRpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIGluIHRoZSA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBhbmQgYW55IGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIHlvdSBwcm92aWRlLgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byByZWFsaXplIHRoYXQgaWYgeW91IGhhdmUgYW55IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRzLCB0aGUgYnVpbGQgc3lzdGVtIGFwcGxpZXMgdGhlc2Ugb24gdG9wIG9mIGFuZAorICAgICAgICAgICAgICAgICAgICBhZnRlciBhcHBseWluZyB0aGUgZXhpc3RpbmcgZGVmY29uZmlnIGZpbGUgY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uJz5DaGFuZ2luZyB0aGUgQ29uZmlndXJhdGlvbjwvdWxpbms+IgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9ucywgYm90aCBpbiB0aGUgWW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctY29uZmlnLWZyYWdtZW50cyc+CisgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgQ29uZmlndXJhdGlvbiBGcmFnbWVudHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIGZyYWdtZW50cyBhcmUgc2ltcGx5IGtlcm5lbCBvcHRpb25zIHRoYXQgYXBwZWFyIGluIGEgZmlsZQorICAgICAgICAgICAgICAgIHBsYWNlZCB3aGVyZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4gZmluZCBhbmQgYXBwbHkgdGhlbS4KKyAgICAgICAgICAgICAgICBTeW50YWN0aWNhbGx5LCB0aGUgY29uZmlndXJhdGlvbiBzdGF0ZW1lbnQgaXMgaWRlbnRpY2FsIHRvIHdoYXQgd291bGQgYXBwZWFyCisgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgdG1wL3dvcmsvPHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPi1wb2t5LWxpbnV4L2xpbnV4LXlvY3RvLTxyZXBsYWNlYWJsZT5yZWxlYXNlX3NwZWNpZmljX3N0cmluZzwvcmVwbGFjZWFibGU+L2xpbnV4LTxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4tPHJlcGxhY2VhYmxlPmJ1aWxkX3R5cGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQgaXMgc2ltcGxlIHRvIGNyZWF0ZSBhIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlzc3VpbmcgdGhlIGZvbGxvd2luZyBmcm9tIHRoZSBzaGVsbCBjcmVhdGVzIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudAorICAgICAgICAgICAgICAgIGZpbGUgbmFtZWQgPGZpbGVuYW1lPm15X3NtcC5jZmc8L2ZpbGVuYW1lPiB0aGF0IGVuYWJsZXMgbXVsdGktcHJvY2Vzc29yIHN1cHBvcnQKKyAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIGtlcm5lbDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZWNobyAiQ09ORklHX1NNUD15IiA+PiBteV9zbXAuY2ZnCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBBbGwgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlcyBtdXN0IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jZmc8L2ZpbGVuYW1lPiBleHRlbnNpb24gaW4gb3JkZXIgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHJlY29nbml6ZSB0aGVtIGFzIGEKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZXJlIGRvIHlvdSBwdXQgeW91ciBjb25maWd1cmF0aW9uIGZyYWdtZW50IGZpbGVzPworICAgICAgICAgICAgICAgIFlvdSBjYW4gcGxhY2UgdGhlc2UgZmlsZXMgaW4gdGhlIHNhbWUgYXJlYSBwb2ludGVkIHRvIGJ5CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwaWNrcyB1cCB0aGUgY29uZmlndXJhdGlvbiBhbmQKKyAgICAgICAgICAgICAgICBhZGRzIGl0IHRvIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYWQgYSBzZXQgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zCisgICAgICAgICAgICAgICAgaW4gYSBmaWxlIGNhbGxlZCA8ZmlsZW5hbWU+bXljb25maWcuY2ZnPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgSWYgeW91IHB1dCB0aGF0IGZpbGUgaW5zaWRlIGEgZGlyZWN0b3J5IG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvPC9maWxlbmFtZT4gdGhhdCByZXNpZGVzIGluIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFzIHRoZSBrZXJuZWwncyBhcHBlbmQgZmlsZSBhbmQgdGhlbiBhZGQgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3RhdGVtZW50IHN1Y2ggYXMgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgIHRvIHRoZSBrZXJuZWwncyBhcHBlbmQgZmlsZSwgdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zCisgICAgICAgICAgICAgICAgd2lsbCBiZSBwaWNrZWQgdXAgYW5kIGFwcGxpZWQgd2hlbiB0aGUga2VybmVsIGlzIGJ1aWx0LgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSArPSAiZmlsZTovL215Y29uZmlnLmNmZyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIG1lbnRpb25lZCBlYXJsaWVyLCB5b3UgY2FuIGdyb3VwIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgaW50byBtdWx0aXBsZSBmaWxlcyBhbmQKKyAgICAgICAgICAgICAgICBuYW1lIHRoZW0gYWxsIGluIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudCBhcyB3ZWxsLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY291bGQgZ3JvdXAgc2VwYXJhdGUgY29uZmlndXJhdGlvbnMgc3BlY2lmaWNhbGx5IGZvciBFdGhlcm5ldCBhbmQgZ3JhcGhpY3MKKyAgICAgICAgICAgICAgICBpbnRvIHRoZWlyIG93biBmaWxlcyBhbmQgYWRkIHRob3NlIGJ5IHVzaW5nIGEgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgbGlrZSB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgaW4geW91ciBhcHBlbmQgZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9teWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL2V0aC5jZmcgXAorICAgICAgICAgICAgZmlsZTovL2dmeC5jZmciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2ZpbmUtdHVuaW5nLXRoZS1rZXJuZWwtY29uZmlndXJhdGlvbi1maWxlJz4KKyAgICAgICAgICAgIDx0aXRsZT5GaW5lLVR1bmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gRmlsZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbWFrZSBzdXJlIHRoZSA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgaXMgYXMgbGVhbiBvciBlZmZpY2llbnQgYXMKKyAgICAgICAgICAgICAgICBwb3NzaWJsZSBieSByZWFkaW5nIHRoZSBvdXRwdXQgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZyYWdtZW50IGF1ZGl0LAorICAgICAgICAgICAgICAgIG5vdGluZyBhbnkgaXNzdWVzLCBtYWtpbmcgY2hhbmdlcyB0byBjb3JyZWN0IHRoZSBpc3N1ZXMsIGFuZCB0aGVuIHJlcGVhdGluZy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgcGFydCBvZiB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MsIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnY2hlY2s8L2ZpbGVuYW1lPiB0YXNrIHJ1bnMuCisgICAgICAgICAgICAgICAgVGhpcyB0YXNrIHZhbGlkYXRlcyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gYnkgY2hlY2tpbmcgdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGFnYWluc3QgdGhlIGlucHV0IGZpbGVzLgorICAgICAgICAgICAgICAgIER1cmluZyB0aGUgY2hlY2ssIHRoZSB0YXNrIHByb2R1Y2VzIHdhcm5pbmcgbWVzc2FnZXMgZm9yIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICBpc3N1ZXM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJlcXVlc3RlZCBvcHRpb25zIHRoYXQgZGlkIG5vdCBtYWtlIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29uZmlndXJhdGlvbiBpdGVtcyB0aGF0IGFwcGVhciB0d2ljZSBpbiB0aGUgc2FtZQorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbmZpZ3VyYXRpb24gaXRlbXMgdGFnZ2VkIGFzICJyZXF1aXJlZCIgdGhhdCB3ZXJlIG92ZXJyaWRkZW4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgYm9hcmQgb3ZlcnJpZGVzIGEgbm9uLWJvYXJkIHNwZWNpZmljIG9wdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkxpc3RlZCBvcHRpb25zIG5vdCB2YWxpZCBmb3IgdGhlIGtlcm5lbCBiZWluZyBwcm9jZXNzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIG9wdGlvbiBkb2VzIG5vdCBhcHBlYXIgYW55d2hlcmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fa2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT4gdGFzayBjYW4KKyAgICAgICAgICAgICAgICAgICAgYWxzbyBvcHRpb25hbGx5IHJlcG9ydCBpZiBhbiBvcHRpb24gaXMgb3ZlcnJpZGRlbiBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBlYWNoIG91dHB1dCB3YXJuaW5nLCBhIG1lc3NhZ2UgcG9pbnRzIHRvIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgdGhlIG9wdGlvbnMgYW5kIGEgcG9pbnRlciB0byB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZyYWdtZW50IHRoYXQgZGVmaW5lcyB0aGVtLgorICAgICAgICAgICAgICAgIENvbGxlY3RpdmVseSwgdGhlIGZpbGVzIGFyZSB0aGUga2V5IHRvIHN0cmVhbWxpbmluZyB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBzdHJlYW1saW5lIHRoZSBjb25maWd1cmF0aW9uLCBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0YXJ0IHdpdGggYSBmdWxsIGNvbmZpZ3VyYXRpb24gdGhhdCB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIGtub3cgd29ya3MgLSBpdCBidWlsZHMgYW5kIGJvb3RzIHN1Y2Nlc3NmdWxseS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIHdpbGwgYmUgeW91ciBiYXNlbGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VwYXJhdGVseSBydW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29uZmlnbWU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnY2hlY2s8L2ZpbGVuYW1lPiB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGFrZSB0aGUgcmVzdWx0aW5nIGxpc3Qgb2YgZmlsZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnY2hlY2s8L2ZpbGVuYW1lPiB0YXNrCisgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncyBhbmQgZG8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcm9wIHZhbHVlcyB0aGF0IGFyZSByZWRlZmluZWQgaW4gdGhlIGZyYWdtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCBkbyBub3QgY2hhbmdlIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5hbHl6ZSBhbmQgcG90ZW50aWFsbHkgZHJvcCB2YWx1ZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIHRoYXQgb3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5hbHl6ZSBhbmQgcG90ZW50aWFsbHkgcmVtb3ZlIG5vbi1ib2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZSByZXBlYXRlZCBhbmQgaW52YWxpZCBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciB5b3UgaGF2ZSB3b3JrZWQgdGhyb3VnaCB0aGUgb3V0cHV0IG9mIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gYXVkaXQsIHlvdSBjYW4gcmUtcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZ21lPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fa2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT4gdGFza3MgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUgcmVzdWx0cyBvZiB5b3VyIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBtb3JlIGlzc3VlcywgeW91IGNhbiBkZWFsIHdpdGggdGhlbSBhcworICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzdGVwLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXRlcmF0aXZlbHkgd29ya2luZyB0aHJvdWdoIHN0ZXBzIHR3byB0aHJvdWdoIGZvdXIgZXZlbnR1YWxseSB5aWVsZHMKKyAgICAgICAgICAgICAgICBhIG1pbmltYWwsIHN0cmVhbWxpbmVkIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHRoZSBiZXN0IDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4sIHlvdSBjYW4gYnVpbGQgdGhlIExpbnV4CisgICAgICAgICAgICAgICAgWW9jdG8ga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBhdGNoaW5nLXRoZS1rZXJuZWwiPgorICAgICAgICA8dGl0bGU+UGF0Y2hpbmcgdGhlIEtlcm5lbDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBQYXRjaGluZyB0aGUga2VybmVsIGludm9sdmVzIGNoYW5naW5nIG9yIGFkZGluZyBjb25maWd1cmF0aW9ucyB0byBhbiBleGlzdGluZyBrZXJuZWwsCisgICAgICAgICAgICBjaGFuZ2luZyBvciBhZGRpbmcgcmVjaXBlcyB0byB0aGUga2VybmVsIHRoYXQgYXJlIG5lZWRlZCB0byBzdXBwb3J0IHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzLAorICAgICAgICAgICAgb3IgZXZlbiBhbHRlcmluZyB0aGUgc291cmNlIGNvZGUgaXRzZWxmLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiBzY3JpcHQKKyAgICAgICAgICAgICAgICBmb3VuZCBpbiB0aGUgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICB1bmRlciA8ZmlsZW5hbWU+c2NyaXB0czwvZmlsZW5hbWU+IHRvIG1hbmFnZSBrZXJuZWwgcGF0Y2hlcyBhbmQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICBTZWUgdGhlICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNtYW5hZ2luZy1rZXJuZWwtcGF0Y2hlcy1hbmQtY29uZmlnLWl0ZW1zLXdpdGgteW9jdG8ta2VybmVsJz5NYW5hZ2luZyBrZXJuZWwgUGF0Y2hlcyBhbmQgQ29uZmlnIEl0ZW1zIHdpdGggeW9jdG8ta2VybmVsPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1ApIERldmVsb3BlcidzIEd1aWRlIGZvcgorICAgICAgICAgICAgICAgIG1vcmUgaW5mb3JtYXRpb24uPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgY3JlYXRlcyBhIHNpbXBsZSBwYXRjaCBieSBhZGRpbmcgc29tZSBRRU1VIGVtdWxhdG9yIGNvbnNvbGUKKyAgICAgICAgICAgIG91dHB1dCBhdCBib290IHRpbWUgdGhyb3VnaCA8ZmlsZW5hbWU+cHJpbnRrPC9maWxlbmFtZT4gc3RhdGVtZW50cyBpbiB0aGUga2VybmVsJ3MKKyAgICAgICAgICAgIDxmaWxlbmFtZT5jYWxpYnJhdGUuYzwvZmlsZW5hbWU+IHNvdXJjZSBjb2RlIGZpbGUuCisgICAgICAgICAgICBBcHBseWluZyB0aGUgcGF0Y2ggYW5kIGJvb3RpbmcgdGhlIG1vZGlmaWVkIGltYWdlIGNhdXNlcyB0aGUgYWRkZWQKKyAgICAgICAgICAgIG1lc3NhZ2VzIHRvIGFwcGVhciBvbiB0aGUgZW11bGF0b3IncyBjb25zb2xlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZXhhbXBsZSBhc3N1bWVzIGEgY2xlYW4gYnVpbGQgZXhpc3RzIGZvciB0aGUgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgbWFjaGluZSBpbiBhCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGUgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+IGlzCisgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQ8L2ZpbGVuYW1lPiBhbmQgaXMgbG9jYXRlZCBpbiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgdGhlIGtlcm5lbCBpcyBiYXNlZCBvbiB0aGUgTGludXggMy40IGtlcm5lbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWxzbywgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGF0Y2hpbmcgdGhlIGtlcm5lbCwgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNhcHBseWluZy1wYXRjaGVzJz5BcHBseWluZyBQYXRjaGVzPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRlLWEtbGF5ZXItZm9yLXlvdXItY2hhbmdlcyc+CisgICAgICAgICAgICA8dGl0bGU+Q3JlYXRlIGEgTGF5ZXIgZm9yIHlvdXIgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBzdGVwIGlzIHRvIGNyZWF0ZSBhIGxheWVyIHNvIHlvdSBjYW4gaXNvbGF0ZSB5b3VyCisgICAgICAgICAgICAgICAgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICBSYXRoZXIgdGhhbiB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1sYXllcjwvZmlsZW5hbWU+IHNjcmlwdAorICAgICAgICAgICAgICAgIHRvIGNyZWF0ZSB0aGUgbGF5ZXIsIHRoaXMgZXhhbXBsZSBzdGVwcyB0aHJvdWdoIHRoZSBwcm9jZXNzCisgICAgICAgICAgICAgICAgYnkgaGFuZC4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBpbmZvcm1hdGlvbiBvbiB0aGUgc2NyaXB0IHRoYXQgY3JlYXRlcyBhIGdlbmVyYWwKKyAgICAgICAgICAgICAgICBsYXllciwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcmVhdGluZy1hLWdlbmVyYWwtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWxheWVyLXNjcmlwdCc+Q3JlYXRpbmcgYSBHZW5lcmFsIExheWVyIFVzaW5nIHRoZSB5b2N0by1sYXllciBTY3JpcHQ8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXNlIHR3byBjb21tYW5kcyBjcmVhdGUgYSBkaXJlY3RvcnkgeW91IGNhbiB1c2UgZm9yIHlvdXIKKyAgICAgICAgICAgICAgICBsYXllcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9wb2t5CisgICAgICQgbWtkaXIgbWV0YS1teWxheWVyCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIENyZWF0aW5nIGEgZGlyZWN0b3J5IHRoYXQgZm9sbG93cyB0aGUgWW9jdG8gUHJvamVjdCBsYXllciBuYW1pbmcKKyAgICAgICAgICAgICAgICBjb252ZW50aW9ucyBzZXRzIHVwIHRoZSBsYXllciBmb3IgeW91ciBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIFRoZSBsYXllciBpcyB3aGVyZSB5b3UgcGxhY2UgeW91ciBjb25maWd1cmF0aW9uIGZpbGVzLCBhcHBlbmQKKyAgICAgICAgICAgICAgICBmaWxlcywgYW5kIHBhdGNoIGZpbGVzLgorICAgICAgICAgICAgICAgIFRvIGxlYXJuIG1vcmUgYWJvdXQgY3JlYXRpbmcgYSBsYXllciBhbmQgZmlsbGluZyBpdCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIGZpbGVzIHlvdSBuZWVkLCBzZWUgdGhlICI8bGluayBsaW5rZW5kPSd1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcKKyAgICAgICAgICAgICAgICBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdmaW5kaW5nLXRoZS1rZXJuZWwtc291cmNlLWNvZGUnPgorICAgICAgICAgICAgPHRpdGxlPkZpbmRpbmcgdGhlIEtlcm5lbCBTb3VyY2UgQ29kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEVhY2ggdGltZSB5b3UgYnVpbGQgYSBrZXJuZWwgaW1hZ2UsIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgaXMgZmV0Y2hlZAorICAgICAgICAgICAgICAgIGFuZCB1bnBhY2tlZCBpbnRvIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtTfS9saW51eAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdmaW5kaW5nLXRoZS10ZW1wb3Jhcnktc291cmNlLWNvZGUnPkZpbmRpbmcgVGVtcG9yYXJ5IFNvdXJjZSBDb2RlPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGFuZCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvdWxpbms+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgc291cmNlIGlzIGtlcHQgZHVyaW5nIGEgYnVpbGQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciB0aGlzIGV4YW1wbGUsIHdlIGFyZSBnb2luZyB0byBwYXRjaCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5pdC9jYWxpYnJhdGUuYzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICBieSBhZGRpbmcgc29tZSBzaW1wbGUgY29uc29sZSA8ZmlsZW5hbWU+cHJpbnRrPC9maWxlbmFtZT4gc3RhdGVtZW50cyB0aGF0IHdlIGNhbgorICAgICAgICAgICAgICAgIHNlZSB3aGVuIHdlIGJvb3QgdGhlIGltYWdlIHVzaW5nIFFFTVUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctdGhlLXBhdGNoJz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyB0aGUgUGF0Y2g8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUd28gbWV0aG9kcyBleGlzdCBieSB3aGljaCB5b3UgY2FuIGNyZWF0ZSB0aGUgcGF0Y2g6CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndXNpbmctZGV2dG9vbC1pbi15b3VyLXdvcmtmbG93Jz48ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+PC9saW5rPiBhbmQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd1c2luZy1hLXF1aWx0LXdvcmtmbG93Jz5RdWlsdDwvbGluaz4uCisgICAgICAgICAgICAgICAgRm9yIGtlcm5lbCBwYXRjaGVzLCB0aGUgR2l0IHdvcmtmbG93IGlzIG1vcmUgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGFzc3VtZXMgdGhlIEdpdCB3b3JrZmxvdyBhbmQgc2hvd3MgdGhlIHN0ZXBzIHNwZWNpZmljIHRvCisgICAgICAgICAgICAgICAgdGhpcyBleGFtcGxlLgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2UgdG8gd2hlcmUgdGhlIGtlcm5lbCBzb3VyY2UgY29kZSBpcyBiZWZvcmUgbWFraW5nCisgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIGVkaXRzIHRvIHRoZSA8ZmlsZW5hbWU+Y2FsaWJyYXRlLmM8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4vcG9reS9idWlsZC90bXAvd29yay9xZW11eDg2LXBva3ktbGludXgvbGludXgteW9jdG8tJHtQVn0tJHtQUn0vbGludXgKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgeW91IGFyZSB3b3JraW5nIGluIGFuIGVzdGFibGlzaGVkIEdpdCByZXBvc2l0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IG11c3QgYmUgaW4gdGhpcyBkaXJlY3RvcnkgaW4gb3JkZXIgdG8gY29tbWl0IHlvdXIgY2hhbmdlcworICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNyZWF0ZSB0aGUgcGF0Y2ggZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPlRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvdWxpbms+IHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudCB0aGUgdmVyc2lvbiBhbmQgcmV2aXNpb24gZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0bzwvZmlsZW5hbWU+IHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gdmFyaWFibGUgaW5jbHVkZXMgdGhlIEdpdCBtZXRhIGFuZCBtYWNoaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGVzLCB3aGljaCBtYWtlIHRoZSBkaXJlY3RvcnkgbmFtZSBsb25nZXIgdGhhbiB5b3UgbWlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QuCisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RWRpdCB0aGUgc291cmNlIGZpbGU8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkaXQgdGhlIDxmaWxlbmFtZT5pbml0L2NhbGlicmF0ZS5jPC9maWxlbmFtZT4gZmlsZSB0byBoYXZlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGNoYW5nZXM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHZvaWQgY2FsaWJyYXRlX2RlbGF5KHZvaWQpCisgICAgIHsKKyAgICAgICAgIHVuc2lnbmVkIGxvbmcgbHBqOworICAgICAgICAgc3RhdGljIGJvb2wgcHJpbnRlZDsKKyAgICAgICAgIGludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworICAgICAgICAgcHJpbnRrKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKKyAgICAgICAgIHByaW50aygiKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuIik7CisgICAgICAgICBwcmludGsoIiogICAgICAgIEhFTExPIFlPQ1RPIEtFUk5FTCAgICAgICAgICpcbiIpOworICAgICAgICAgcHJpbnRrKCIqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4iKTsKKyAgICAgICAgIHByaW50aygiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisKKyAgICAgCWlmIChwZXJfY3B1KGNwdV9sb29wc19wZXJfamlmZnksIHRoaXNfY3B1KSkgeworICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YWdlIGFuZCBjb21taXQgeW91ciBjaGFuZ2VzPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGVzZSBHaXQgY29tbWFuZHMgZGlzcGxheSB0aGUgbW9kaWZpZWQgZmlsZSwgc3RhZ2UgaXQsIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXQgdGhlIGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IHN0YXR1cworICAgICAkIGdpdCBhZGQgaW5pdC9jYWxpYnJhdGUuYworICAgICAkIGdpdCBjb21taXQgLW0gImNhbGlicmF0ZTogQWRkIHByaW50ayBleGFtcGxlIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdlbmVyYXRlIHRoZSBwYXRjaCBmaWxlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIEdpdCBjb21tYW5kIGNyZWF0ZXMgdGhlIGEgcGF0Y2ggZmlsZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjAwMDEtY2FsaWJyYXRlLUFkZC1wcmludGstZXhhbXBsZS5wYXRjaDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtMQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZXQtdXAteW91ci1sYXllci1mb3ItdGhlLWJ1aWxkJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXQgVXAgWW91ciBMYXllciBmb3IgdGhlIEJ1aWxkPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+VGhlc2Ugc3RlcHMgZ2V0IHlvdXIgbGF5ZXIgc2V0IHVwIGZvciB0aGUgYnVpbGQ6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSBhZGRpdGlvbmFsIHN0cnVjdHVyZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIHRoZSBhZGRpdGlvbmFsIGxheWVyIHN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3kvbWV0YS1teWxheWVyCisgICAgICQgbWtkaXIgY29uZgorICAgICAkIG1rZGlyIHJlY2lwZXMta2VybmVsCisgICAgICQgbWtkaXIgcmVjaXBlcy1rZXJuZWwvbGludXgKKyAgICAgJCBta2RpciByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0bworICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaG9sZHMgeW91ciBjb25maWd1cmF0aW9uIGZpbGVzLCB3aGlsZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1rZXJuZWw8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaG9sZHMgeW91ciBhcHBlbmQgZmlsZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIHBhdGNoIGZpbGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIHRoZSBsYXllciBjb25maWd1cmF0aW9uIGZpbGU8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIE1vdmUgdG8gdGhlIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXIvY29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQgY3JlYXRlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgV2UgaGF2ZSBhIGNvbmYgYW5kIGNsYXNzZXMgZGlyZWN0b3J5LCBhZGQgdG8gQkJQQVRICisgICAgIEJCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisgICAgICMgV2UgaGF2ZSByZWNpcGVzLSogZGlyZWN0b3JpZXMsIGFkZCB0byBCQkZJTEVTCisgICAgIEJCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmIgXAorICAgICAgICAgICAgICAgICAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCisgICAgIEJCRklMRV9DT0xMRUNUSU9OUyArPSAibXlsYXllciIKKyAgICAgQkJGSUxFX1BBVFRFUk5fbXlsYXllciA9ICJeJHtMQVlFUkRJUn0vIgorICAgICBCQkZJTEVfUFJJT1JJVFlfbXlsYXllciA9ICI1IgorICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICBOb3RpY2UgPGZpbGVuYW1lPm15bGF5ZXI8L2ZpbGVuYW1lPiBhcyBwYXJ0IG9mIHRoZSBsYXN0IHRocmVlCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgdGhlIGtlcm5lbCByZWNpcGUgYXBwZW5kIGZpbGU8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIE1vdmUgdG8gdGhlIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXIvcmVjaXBlcy1rZXJuZWwvbGludXg8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0b18zLjQuYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKKworICAgICBTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1jYWxpYnJhdGUtQWRkLXByaW50ay1leGFtcGxlLnBhdGNoIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50cyBlbmFibGUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gZmluZCB0aGUgcGF0Y2ggZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIGFwcGVuZCBmaWxlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWJiYXBwZW5kLWZpbGVzJz5Vc2luZyAuYmJhcHBlbmQgRmlsZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlB1dCB0aGUgcGF0Y2ggZmlsZSBpbiB5b3VyIGxheWVyPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlIHRoZSA8ZmlsZW5hbWU+MDAwMS1jYWxpYnJhdGUtQWRkLXByaW50ay1leGFtcGxlLnBhdGNoPC9maWxlbmFtZT4gZmlsZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG88L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2V0LXVwLWZvci10aGUtYnVpbGQnPgorICAgICAgICAgICAgPHRpdGxlPlNldCBVcCBmb3IgdGhlIEJ1aWxkPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRG8gdGhlIGZvbGxvd2luZyB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIHBhcmFtZXRlcnMgYXJlIHNldCB1cCBmb3IgdGhlIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgT25jZSB5b3Ugc2V0IHVwIHRoZXNlIGJ1aWxkIHBhcmFtZXRlcnMsIHRoZXkgZG8gbm90IGhhdmUgdG8gY2hhbmdlIHVubGVzcyB5b3UKKyAgICAgICAgICAgICAgICBjaGFuZ2UgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgb2YgdGhlIG1hY2hpbmUgeW91IGFyZSBidWlsZGluZzoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIGZvciB0aGUgY29ycmVjdCB0YXJnZXQgYXJjaGl0ZWN0dXJlOjwvZW1waGFzaXM+IFlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb24gd2l0aGluIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSB1c2VkIHdoZW4gYnVpbGRpbmcgdGhlIExpbnV4IGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4gaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+LCB3aGljaCBzcGVjaWZpZXMgYSAzMi1iaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFkZW1hcmsgY2xhc3M9J3JlZ2lzdGVyZWQnPkludGVsPC90cmFkZW1hcms+IEFyY2hpdGVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IG1hY2hpbmUgc3VpdGFibGUgZm9yIHRoZSBRRU1VIGVtdWxhdG9yLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPklkZW50aWZ5IHlvdXIgPGZpbGVuYW1lPm1ldGEtbXlsYXllcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBsYXllcjo8L2VtcGhhc2lzPiBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkxBWUVSUyc+PGZpbGVuYW1lPkJCTEFZRVJTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS9idWlsZC9jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IG5lZWRzIHRvIGhhdmUgdGhlIHBhdGggdG8geW91ciBsb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtbXlsYXllcjwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5CQkxBWUVSUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGNvbnRhaW5zIHBhdGhzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcDwvZmlsZW5hbWU+IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFkZCB0aGUgcGF0aCB0byB5b3VyIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXI8L2ZpbGVuYW1lPiBsb2NhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPz0gIiBcCisgICAgICAgJEhPTUUvcG9reS9tZXRhIFwKKyAgICAgICAkSE9NRS9wb2t5L21ldGEteW9jdG8gXAorICAgICAgICRIT01FL3Bva3kvbWV0YS15b2N0by1ic3AgXAorICAgICAgICRIT01FL3Bva3kvbWV0YS1teWxheWVyIFwKKyAgICAgICAiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGQtdGhlLW1vZGlmaWVkLXFlbXUta2VybmVsLWltYWdlJz4KKyAgICAgICAgICAgIDx0aXRsZT5CdWlsZCB0aGUgTW9kaWZpZWQgUUVNVSBLZXJuZWwgSW1hZ2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0ZXBzIGJ1aWxkIHlvdXIgbW9kaWZpZWQga2VybmVsIGltYWdlOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CZSBzdXJlIHlvdXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgaW5pdGlhbGl6ZWQ8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdXIgZW52aXJvbm1lbnQgc2hvdWxkIGJlIHNldCB1cCBzaW5jZSB5b3UgcHJldmlvdXNseSBzb3VyY2VkCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgaXQgaXMgbm90LCBzb3VyY2UgdGhlIHNjcmlwdCBhZ2FpbiBmcm9tIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9wb2t5CisgICAgICQgc291cmNlICZPRV9JTklUX0ZJTEU7CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DbGVhbiB1cDwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBjbGVhbiB0aGUgc2hhcmVkIHN0YXRlIG91dCBieSB1c2luZyBCaXRCYWtlCisgICAgICAgICAgICAgICAgICAgICAgICB0byBydW4gZnJvbSB3aXRoaW4gdGhlIEJ1aWxkIERpcmVjdG9yeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jbGVhbnNzdGF0ZSc+PGZpbGVuYW1lPmRvX2NsZWFuc3N0YXRlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFzayBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWMgY2xlYW5zc3RhdGUgbGludXgteW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldmVyIHJlbW92ZSBhbnkgZmlsZXMgYnkgaGFuZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50bXAvZGVwbG95PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaW5zaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgdXNlIHRoZSB2YXJpb3VzIEJpdEJha2UgY2xlYW4gdGFza3MgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhciBvdXQgcHJldmlvdXMgYnVpbGQgYXJ0aWZhY3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgY2xlYW4gdGFza3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNsZWFuJz48ZmlsZW5hbWU+ZG9fY2xlYW48L2ZpbGVuYW1lPjwvdWxpbms+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNsZWFuYWxsJz48ZmlsZW5hbWU+ZG9fY2xlYW5hbGw8L2ZpbGVuYW1lPjwvdWxpbms+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNsZWFuc3N0YXRlJz48ZmlsZW5hbWU+ZG9fY2xlYW5zc3RhdGU8L2ZpbGVuYW1lPjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zIGFsbCBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCB0aGUgaW1hZ2U8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIE5leHQsIGJ1aWxkIHRoZSBrZXJuZWwgaW1hZ2UgdXNpbmcgdGhpcyBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWsgbGludXgteW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Jvb3QtdGhlLWltYWdlLWFuZC12ZXJpZnkteW91ci1jaGFuZ2VzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Cb290IHRoZSBJbWFnZSBhbmQgVmVyaWZ5IFlvdXIgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXNlIHN0ZXBzIGJvb3QgdGhlIGltYWdlIGFuZCBhbGxvdyB5b3UgdG8gc2VlIHRoZSBjaGFuZ2VzCisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJvb3QgdGhlIGltYWdlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBCb290IHRoZSBtb2RpZmllZCBpbWFnZSBpbiB0aGUgUUVNVSBlbXVsYXRvcgorICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhpcyBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgcWVtdXg4NgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlZlcmlmeSB0aGUgY2hhbmdlczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgTG9nIGludG8gdGhlIG1hY2hpbmUgdXNpbmcgPGZpbGVuYW1lPnJvb3Q8L2ZpbGVuYW1lPiB3aXRoIG5vIHBhc3N3b3JkIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICB1c2UgdGhlIGZvbGxvd2luZyBzaGVsbCBjb21tYW5kIHRvIHNjcm9sbCB0aHJvdWdoIHRoZSBjb25zb2xlJ3MgYm9vdCBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgZG1lc2cgfCBsZXNzCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHNlZSB0aGUgcmVzdWx0cyBvZiB5b3VyIDxmaWxlbmFtZT5wcmludGs8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBvdXRwdXQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtYWtpbmctaW1hZ2VzLW1vcmUtc2VjdXJlJz4KKyAgICAgICAgPHRpdGxlPk1ha2luZyBJbWFnZXMgTW9yZSBTZWN1cmU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU2VjdXJpdHkgaXMgb2YgaW5jcmVhc2luZyBjb25jZXJuIGZvciBlbWJlZGRlZCBkZXZpY2VzLgorICAgICAgICAgICAgQ29uc2lkZXIgdGhlIGlzc3VlcyBhbmQgcHJvYmxlbXMgZGlzY3Vzc2VkIGluIGp1c3QgdGhpcworICAgICAgICAgICAgc2FtcGxpbmcgb2Ygd29yayBmb3VuZCBhY3Jvc3MgdGhlIEludGVybmV0OgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0naHR0cHM6Ly93d3cuc2NobmVpZXIuY29tL2Jsb2cvYXJjaGl2ZXMvMjAxNC8wMS9zZWN1cml0eV9yaXNrc185Lmh0bWwnPlNlY3VyaXR5IFJpc2tzIG9mIEVtYmVkZGVkIFN5c3RlbXM8L3VsaW5rPiI8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBieSBCcnVjZSBTY2huZWllcgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0naHR0cDovL2ludGVybmV0Y2Vuc3VzMjAxMi5iaXRidWNrZXQub3JnL3BhcGVyLmh0bWwnPkludGVybmV0IENlbnN1cyAyMDEyPC91bGluaz4iPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgYnkgQ2FybmEgQm90bmV0PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHA6Ly9lbGludXgub3JnL2ltYWdlcy82LzZmL1NlY3VyaXR5LWlzc3Vlcy5wZGYnPlNlY3VyaXR5IElzc3VlcyBmb3IgRW1iZWRkZWQgRGV2aWNlczwvdWxpbms+IjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIGJ5IEpha2UgRWRnZQorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0naHR0cHM6Ly93d3cubmNjZ3JvdXAuY29tL21lZGlhLzE4NDc1L2V4cGxvaXRpbmdfc2VjdXJpdHlfZ2F0ZXdheXNfdmlhX3RoZWlyX3dlYl9pbnRlcmZhY2VzLnBkZic+VGhleSBvdWdodCB0byBrbm93IGJldHRlcjogRXhwbG9pdGluZyBTZWN1cml0eSBHYXRld2F5cyB2aWEgdGhlaXIgV2ViIEludGVyZmFjZXM8L3VsaW5rPiI8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBieSBCZW4gV2lsbGlhbXMKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiBzZWN1cmluZyB5b3VyIGltYWdlIGlzIG9mIGNvbmNlcm4sIHRoZXJlIGFyZSBzdGVwcywgdG9vbHMsCisgICAgICAgICAgICBhbmQgdmFyaWFibGVzIHRoYXQgeW91IGNhbiBjb25zaWRlciB0byBoZWxwIHlvdSByZWFjaCB0aGUKKyAgICAgICAgICAgIHNlY3VyaXR5IGdvYWxzIHlvdSBuZWVkIGZvciB5b3VyIHBhcnRpY3VsYXIgZGV2aWNlLgorICAgICAgICAgICAgTm90IGFsbCBzaXR1YXRpb25zIGFyZSBpZGVudGljYWwgd2hlbiBpdCBjb21lcyB0byBtYWtpbmcgYW4KKyAgICAgICAgICAgIGltYWdlIHNlY3VyZS4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdGhpcyBzZWN0aW9uIHByb3ZpZGVzIHNvbWUgZ3VpZGFuY2UgYW5kIHN1Z2dlc3Rpb25zCisgICAgICAgICAgICBmb3IgY29uc2lkZXJhdGlvbiB3aGVuIHlvdSB3YW50IHRvIG1ha2UgeW91ciBpbWFnZSBtb3JlIHNlY3VyZS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIHNlY3VyaXR5IHJlcXVpcmVtZW50cyBhbmQgcmlza3MgYXJlCisgICAgICAgICAgICAgICAgZGlmZmVyZW50IGZvciBldmVyeSB0eXBlIG9mIGRldmljZSwgdGhpcyBzZWN0aW9uIGNhbm5vdAorICAgICAgICAgICAgICAgIHByb3ZpZGUgYSBjb21wbGV0ZSByZWZlcmVuY2Ugb24gc2VjdXJpbmcgeW91ciBjdXN0b20gT1MuCisgICAgICAgICAgICAgICAgSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWxzbyBjb25zdWx0IG90aGVyIHNvdXJjZXMKKyAgICAgICAgICAgICAgICBvZiBpbmZvcm1hdGlvbiBvbiBlbWJlZGRlZCBMaW51eCBzeXN0ZW0gaGFyZGVuaW5nIGFuZCBvbgorICAgICAgICAgICAgICAgIHNlY3VyaXR5LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2dlbmVyYWwtY29uc2lkZXJhdGlvbnMnPgorICAgICAgICAgICAgPHRpdGxlPkdlbmVyYWwgQ29uc2lkZXJhdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBHZW5lcmFsIGNvbnNpZGVyYXRpb25zIGV4aXN0IHRoYXQgaGVscCB5b3UgY3JlYXRlIG1vcmUKKyAgICAgICAgICAgICAgICBzZWN1cmUgaW1hZ2VzLgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBzdWdnZXN0aW9ucyB0byBoZWxwCisgICAgICAgICAgICAgICAgbWFrZSB5b3VyIGRldmljZSBtb3JlIHNlY3VyZToKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTY2FuIGFkZGl0aW9uYWwgY29kZSB5b3UgYXJlIGFkZGluZyB0byB0aGUgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiBhcHBsaWNhdGlvbiBjb2RlKSBieSB1c2luZyBzdGF0aWMgYW5hbHlzaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xzLgorICAgICAgICAgICAgICAgICAgICAgICAgTG9vayBmb3IgYnVmZmVyIG92ZXJmbG93cyBhbmQgb3RoZXIgcG90ZW50aWFsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eSBwcm9ibGVtcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBheSBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0byB0aGUgc2VjdXJpdHkgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICBhbnkgd2ViLWJhc2VkIGFkbWluaXN0cmF0aW9uIGludGVyZmFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPldlYiBpbnRlcmZhY2VzIHR5cGljYWxseSBuZWVkIHRvIHBlcmZvcm0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkbWluaXN0cmF0aXZlIGZ1bmN0aW9ucyBhbmQgdGVuZCB0byBuZWVkIHRvIHJ1biB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICBlbGV2YXRlZCBwcml2aWxlZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIGNvbnNlcXVlbmNlcyByZXN1bHRpbmcgZnJvbSB0aGUgaW50ZXJmYWNlJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5IGJlY29taW5nIGNvbXByb21pc2VkIGNhbiBiZSBzZXJpb3VzLgorICAgICAgICAgICAgICAgICAgICAgICAgTG9vayBmb3IgY29tbW9uIHdlYiB2dWxuZXJhYmlsaXRpZXMgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgY3Jvc3Mtc2l0ZS1zY3JpcHRpbmcgKFhTUyksIHVudmFsaWRhdGVkIGlucHV0cywKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5BcyB3aXRoIHN5c3RlbSBwYXNzd29yZHMsIHRoZSBkZWZhdWx0IGNyZWRlbnRpYWxzCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWNjZXNzaW5nIGEgd2ViLWJhc2VkIGludGVyZmFjZSBzaG91bGQgbm90IGJlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSBhY3Jvc3MgYWxsIGRldmljZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHBhcnRpY3VsYXJseSB0cnVlIGlmIHRoZSBpbnRlcmZhY2UgaXMgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICAgICAgYnkgZGVmYXVsdCBhcyBpdCBjYW4gYmUgYXNzdW1lZCB0aGF0IG1hbnkgZW5kLXVzZXJzCisgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIG5vdCBjaGFuZ2UgdGhlIGNyZWRlbnRpYWxzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRW5zdXJlIHlvdSBjYW4gdXBkYXRlIHRoZSBzb2Z0d2FyZSBvbiB0aGUgZGV2aWNlIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBtaXRpZ2F0ZSB2dWxuZXJhYmlsaXRpZXMgZGlzY292ZXJlZCBpbiB0aGUgZnV0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb25zaWRlcmF0aW9uIGVzcGVjaWFsbHkgYXBwbGllcyB3aGVuIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSBpcyBuZXR3b3JrLWVuYWJsZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBFbnN1cmUgeW91IHJlbW92ZSBvciBkaXNhYmxlIGRlYnVnZ2luZyBmdW5jdGlvbmFsaXR5CisgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgcHJvZHVjaW5nIHRoZSBmaW5hbCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZG8gdGhpcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NvbnNpZGVyYXRpb25zLXNwZWNpZmljLXRvLXRoZS1vcGVuZW1iZWRkZWQtYnVpbGQtc3lzdGVtJz5Db25zaWRlcmF0aW9ucyBTcGVjaWZpYyB0byB0aGUgT3BlbkVtYmVkZGVkIEJ1aWxkIFN5c3RlbTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEVuc3VyZSB5b3UgaGF2ZSBubyBuZXR3b3JrIHNlcnZpY2VzIGxpc3RlbmluZyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBhcmUgbm90IG5lZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZSBhbnkgc29mdHdhcmUgZnJvbSB0aGUgaW1hZ2UgdGhhdCBpcyBub3QgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIGhhcmR3YXJlIHN1cHBvcnQgZm9yIHNlY3VyZSBib290IGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4geW91ciBkZXZpY2Ugc3VwcG9ydHMgdGhpcyBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZWN1cml0eS1mbGFncyc+CisgICAgICAgICAgICA8dGl0bGU+U2VjdXJpdHkgRmxhZ3M8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBoYXMgc2VjdXJpdHkgZmxhZ3MgdGhhdCB5b3UgY2FuIGVuYWJsZSB0aGF0CisgICAgICAgICAgICAgICAgaGVscCBtYWtlIHlvdXIgYnVpbGQgb3V0cHV0IG1vcmUgc2VjdXJlLgorICAgICAgICAgICAgICAgIFRoZSBzZWN1cml0eSBmbGFncyBhcmUgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9zZWN1cml0eV9mbGFncy5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUgaW4geW91cgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgcmVjaXBlLCBjZXJ0YWluIHNlY3VyaXR5IGZsYWdzIGFyZSBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgIGFuZCBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+Cis8IS0tCisgICAgICAgICAgICAgICAgVGhlIEdDQy9MRCBmbGFncyBpbiA8ZmlsZW5hbWU+c2VjdXJpdHlfZmxhZ3MuaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBlbmFibGUgbW9yZSBzZWN1cmUgY29kZSBnZW5lcmF0aW9uLgorICAgICAgICAgICAgICAgIEJ5IGluY2x1ZGluZyB0aGUgPGZpbGVuYW1lPnNlY3VyaXR5X2ZsYWdzLmluYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSwgeW91IGVuYWJsZSBmbGFncyB0byB0aGUgY29tcGlsZXIgYW5kIGxpbmtlciB0aGF0IGNhdXNlCisgICAgICAgICAgICAgICAgdGhlbSB0byBnZW5lcmF0ZSBtb3JlIHNlY3VyZSBjb2RlLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgR0NDL0xEIGZsYWdzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5LWxzYjwvZmlsZW5hbWU+IGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CistLT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBsaW5lIGluIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3IgaW4geW91ciBjdXN0b20KKyAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlIHRvIGVuYWJsZSB0aGUgc2VjdXJpdHkKKyAgICAgICAgICAgICAgICBjb21waWxlciBhbmQgbGlua2VyIGZsYWdzIGZvciB5b3VyIGJ1aWxkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcmVxdWlyZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3NlY3VyaXR5X2ZsYWdzLmluYworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjb25zaWRlcmF0aW9ucy1zcGVjaWZpYy10by10aGUtb3BlbmVtYmVkZGVkLWJ1aWxkLXN5c3RlbSc+CisgICAgICAgICAgICA8dGl0bGU+Q29uc2lkZXJhdGlvbnMgU3BlY2lmaWMgdG8gdGhlIE9wZW5FbWJlZGRlZCBCdWlsZCBTeXN0ZW08L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHRha2Ugc29tZSBzdGVwcyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIG1ha2UgeW91ciBpbWFnZXMgbW9yZSBzZWN1cmU6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRW5zdXJlICJkZWJ1Zy10d2Vha3MiIGlzIG5vdCBvbmUgb2YgeW91ciBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBjcmVhdGluZyBhIG5ldyBwcm9qZWN0LCB0aGUgZGVmYXVsdCBpcyB0byBwcm92aWRlIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhbiBpbml0aWFsIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVzIHRoaXMgZmVhdHVyZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRSQV9JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPkVYVFJBX0lNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPiB2YXJpYWJsZSB3aXRoIHRoZSBsaW5lOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAiZGVidWctdHdlYWtzIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGRpc2FibGUgdGhhdCBmZWF0dXJlLCBzaW1wbHkgY29tbWVudCBvdXQgdGhhdCBsaW5lIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Ugc3VyZSA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBkb2VzIG5vdCBjb250YWluCisgICAgICAgICAgICAgICAgICAgICAgICAiZGVidWctdHdlYWtzIiBiZWZvcmUgcHJvZHVjaW5nIHlvdXIgZmluYWwgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICBBbW9uZyBvdGhlciB0aGluZ3MsIGxlYXZpbmcgdGhpcyBpbiBwbGFjZSBzZXRzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcm9vdCBwYXNzd29yZCBhcyBibGFuaywgd2hpY2ggbWFrZXMgbG9nZ2luZyBpbiBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2luZyBvciBpbnNwZWN0aW9uIGVhc3kgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBidXQgYWxzbyBtZWFucyBhbnlvbmUgY2FuIGVhc2lseSBsb2cgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBwcm9kdWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIHNldCBhIHJvb3QgcGFzc3dvcmQgZm9yIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGFsc28gdG8gc2V0IHBhc3N3b3JkcyBmb3IgYW55IGV4dHJhIHVzZXJzIHlvdSBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkIChlLmcuIGFkbWluaXN0cmF0aXZlIG9yIHNlcnZpY2UgdHlwZSB1c2VycykuCisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzZXQgdXAgcGFzc3dvcmRzIGZvciBtdWx0aXBsZSBpbWFnZXMgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzLCB5b3Ugc2hvdWxkIG5vdCBkdXBsaWNhdGUgcGFzc3dvcmRzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUbyBzZXQgdXAgcGFzc3dvcmRzLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1leHRyYXVzZXJzJz48ZmlsZW5hbWU+ZXh0cmF1c2VyczwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB3aGljaCBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9uIGhvdyB0byBzZXQgdXAgYm90aCByb290IGFuZCB1c2VyCisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1leHRyYXVzZXJzJz48ZmlsZW5hbWU+ZXh0cmF1c2Vycy5iYmNsYXNzPC9maWxlbmFtZT48L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIGFkZGluZyBleHRyYSB1c2VyIGFjY291bnRzIG9yIHNldHRpbmcgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QgcGFzc3dvcmQsIGJlIGNhdXRpb3VzIGFib3V0IHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSBwYXNzd29yZCBvbiBldmVyeSBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIHRoaXMsIGFuZCB0aGUgcGFzc3dvcmQgeW91IGhhdmUgc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZXhwb3NlZCwgdGhlbiBldmVyeSBkZXZpY2UgaXMgbm93IHBvdGVudGlhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJvbWlzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdGhpcyBhY2Nlc3MgYnV0IHdhbnQgdG8gZW5zdXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHksIGNvbnNpZGVyIHNldHRpbmcgYSBkaWZmZXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tIHBhc3N3b3JkIGZvciBlYWNoIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHlvdSBkbyB0aGlzIGFzIGEgc2VwYXJhdGUgc3RlcCBhZnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBkZXBsb3kgdGhlIGltYWdlIG9udG8gdGhlIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBDb25zaWRlciBlbmFibGluZyBhIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbCAoTUFDKQorICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrIHN1Y2ggYXMgU01BQ0sgb3IgU0VMaW51eCBhbmQgdHVuaW5nIGl0CisgICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZWx5IGZvciB5b3VyIGRldmljZSdzIHVzYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9tZXRhLXNlbGludXgvJz48ZmlsZW5hbWU+bWV0YS1zZWxpbnV4PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9vbHMtZm9yLWhhcmRlbmluZy15b3VyLWltYWdlJz4KKyAgICAgICAgICAgIDx0aXRsZT5Ub29scyBmb3IgSGFyZGVuaW5nIFlvdXIgSW1hZ2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBwcm92aWRlcyB0b29scyBmb3IgbWFraW5nIHlvdXIgaW1hZ2UKKyAgICAgICAgICAgICAgICBtb3JlIHNlY3VyZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlc2UgdG9vbHMgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtc2VjdXJpdHk8L2ZpbGVuYW1lPiBsYXllciBvZiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC9jZ2l0LmNnaSc+WW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmcteW91ci1vd24tZGlzdHJpYnV0aW9uJz4KKyAgICAgICAgPHRpdGxlPkNyZWF0aW5nIFlvdXIgT3duIERpc3RyaWJ1dGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBidWlsZCBhbiBpbWFnZSB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCBhbmQKKyAgICAgICAgICAgIGRvIG5vdCBhbHRlciBhbnkgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdtZXRhZGF0YSc+TWV0YWRhdGE8L2xpbms+LCB5b3UgYXJlIGNyZWF0aW5nIGEKKyAgICAgICAgICAgIFBva3kgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgSWYgeW91IHdpc2ggdG8gZ2FpbiBtb3JlIGNvbnRyb2wgb3ZlciBwYWNrYWdlIGFsdGVybmF0aXZlCisgICAgICAgICAgICBzZWxlY3Rpb25zLCBjb21waWxlLXRpbWUgb3B0aW9ucywgYW5kIG90aGVyIGxvdy1sZXZlbAorICAgICAgICAgICAgY29uZmlndXJhdGlvbnMsIHlvdSBjYW4gY3JlYXRlIHlvdXIgb3duIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gY3JlYXRlIHlvdXIgb3duIGRpc3RyaWJ1dGlvbiwgdGhlIGJhc2ljIHN0ZXBzIGNvbnNpc3Qgb2YKKyAgICAgICAgICAgIGNyZWF0aW5nIHlvdXIgb3duIGRpc3RyaWJ1dGlvbiBsYXllciwgY3JlYXRpbmcgeW91ciBvd24KKyAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGUsIGFuZCB0aGVuIGFkZGluZyBhbnkgbmVlZGVkCisgICAgICAgICAgICBjb2RlIGFuZCBNZXRhZGF0YSB0byB0aGUgbGF5ZXIuCisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0ZXBzIHByb3ZpZGUgc29tZSBtb3JlIGRldGFpbDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgYSBsYXllciBmb3IgeW91ciBuZXcgZGlzdHJvOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZSB5b3VyIGRpc3RyaWJ1dGlvbiBsYXllciBzbyB0aGF0IHlvdSBjYW4ga2VlcCB5b3VyCisgICAgICAgICAgICAgICAgICAgIE1ldGFkYXRhIGFuZCBjb2RlIGZvciB0aGUgZGlzdHJpYnV0aW9uIHNlcGFyYXRlLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjcmVhdGUgYW5kIHVzZSB5b3VyIG93bgorICAgICAgICAgICAgICAgICAgICBsYXllciBmb3IgY29uZmlndXJhdGlvbiBhbmQgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgeW91ciBvd24gbGF5ZXIgYXMgY29tcGFyZWQgdG8ganVzdCBwbGFjaW5nCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIGluIGEgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgbWFrZXMgaXQgZWFzaWVyIHRvIHJlcHJvZHVjZSB0aGUgc2FtZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBjb25maWd1cmF0aW9uIHdoZW4gdXNpbmcgbXVsdGlwbGUgYnVpbGQgbWFjaGluZXMuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWEtZ2VuZXJhbC1sYXllci11c2luZy10aGUteW9jdG8tbGF5ZXItc2NyaXB0Jz5DcmVhdGluZyBhIEdlbmVyYWwgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWxheWVyIFNjcmlwdDwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBxdWlja2x5IHNldCB1cCBhIGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZSBuZWVkcyB0byBiZSBjcmVhdGVkIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Y29uZi9kaXN0cm88L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgeW91cgorICAgICAgICAgICAgICAgICAgICBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gbmFtZSBpdCB1c2luZyB5b3VyIGRpc3RyaWJ1dGlvbiBuYW1lCisgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5teWRpc3Ryby5jb25mPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RSTyc+PGZpbGVuYW1lPkRJU1RSTzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBkZXRlcm1pbmVzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBvZiB5b3VyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBzcGxpdCBvdXQgcGFydHMgb2YgeW91ciBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgaW50byBpbmNsdWRlIGZpbGVzIGFuZCB0aGVuICJyZXF1aXJlIiB0aGVtIGZyb20gd2l0aGluCisgICAgICAgICAgICAgICAgICAgIHlvdXIgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBwbGFjZSB0aGUgaW5jbHVkZSBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvZGlzdHJvL2luY2x1ZGU8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YKKyAgICAgICAgICAgICAgICAgICAgeW91ciBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgQSBjb21tb24gZXhhbXBsZSB1c2FnZSBvZiBpbmNsdWRlIGZpbGVzIHdvdWxkIGJlIHRvCisgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRlIG91dCB0aGUgc2VsZWN0aW9uIG9mIGRlc2lyZWQgdmVyc2lvbiBhbmQgcmV2aXNpb25zCisgICAgICAgICAgICAgICAgICAgIGZvciBpbmRpdmlkdWFsIHJlY2lwZXMuCis8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdXIgY29uZmlndXJhdGlvbiBmaWxlIG5lZWRzIHRvIHNldCB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkIHZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPX05BTUUnPjxmaWxlbmFtZT5ESVNUUk9fTkFNRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19WRVJTSU9OJz48ZmlsZW5hbWU+RElTVFJPX1ZFUlNJT048L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgZm9sbG93aW5nIHZhcmlhYmxlcyBhcmUgb3B0aW9uYWwgYW5kIHlvdSB0eXBpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgc2V0IHRoZW0gZnJvbSB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPX0VYVFJBX1JERVBFTkRTJz48ZmlsZW5hbWU+RElTVFJPX0VYVFJBX1JERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTJz48ZmlsZW5hbWU+RElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVENMSUJDJz48ZmlsZW5hbWU+VENMSUJDPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDx0aXA+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBiYXNlIHlvdXIgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIHZlcnkgYmFzaWMgY29uZmlndXJhdGlvbiBmcm9tIE9FLUNvcmUsIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mPC9maWxlbmFtZT4gYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgcmVmZXJlbmNlIGFuZCBqdXN0IGluY2x1ZGUgdmFyaWFibGVzIHRoYXQgZGlmZmVyCisgICAgICAgICAgICAgICAgICAgICAgICBhcyBjb21wYXJlZCB0byA8ZmlsZW5hbWU+ZGVmYXVsdHNldHVwLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gY3JlYXRlIGEgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgZnJvbSBzY3JhdGNoIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmF1bHRzZXR1cC5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgb3IgY29uZmlndXJhdGlvbiBmaWxlcyBmcm9tIG90aGVyIGRpc3RyaWJ1dGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgUG9reSBvciBBbmdzdHJvbSBhcyByZWZlcmVuY2VzLgorICAgICAgICAgICAgICAgICAgICA8L3RpcD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByb3ZpZGUgbWlzY2VsbGFuZW91cyB2YXJpYWJsZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBkZWZpbmUgYW55IG90aGVyIHZhcmlhYmxlcyBmb3Igd2hpY2ggeW91IHdhbnQgdG8KKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlIGEgZGVmYXVsdCBvciBlbmZvcmNlIGFzIHBhcnQgb2YgdGhlIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGluY2x1ZGUgbmVhcmx5IGFueSB2YXJpYWJsZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZXMgeW91IHVzZSBhcmUgbm90IGxpbWl0ZWQgdG8gdGhlIGxpc3QgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzIGJ1bGxldGVkIGl0ZW0uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Qb2ludCB0byBZb3VyIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgc2V0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RSTyc+PGZpbGVuYW1lPkRJU1RSTzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gcG9pbnQgdG8geW91ciBkaXN0cmlidXRpb24ncyBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3VyIGRpc3RyaWJ1dGlvbidzIGNvbmZpZ3VyYXRpb24gZmlsZSBpcworICAgICAgICAgICAgICAgICAgICBuYW1lZCA8ZmlsZW5hbWU+bXlkaXN0cm8uY29uZjwvZmlsZW5hbWU+LCB0aGVuIHlvdSBwb2ludAorICAgICAgICAgICAgICAgICAgICB0byBpdCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERJU1RSTyA9ICJteWRpc3RybyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QWRkIG1vcmUgdG8gdGhlIGxheWVyIGlmIG5lY2Vzc2FyeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBVc2UgeW91ciBsYXllciB0byBob2xkIG90aGVyIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbjoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgcmVjaXBlcyBmb3IgaW5zdGFsbGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Ryby1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgYXJlIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgaW5zdGFsbGVkIGJ5IGFub3RoZXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIGRpc3Ryby1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBhcmUgaW5jbHVkZWQgYnkgYW4gZXhpc3RpbmcgcmVjaXBlLCB5b3Ugc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkIGFuIGFwcGVuZCBmaWxlICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRob3NlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFuZCByZWNvbW1lbmRhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBob3cgdG8gYWRkIHJlY2lwZXMgdG8geW91ciBsYXllciwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcmVhdGluZy15b3VyLW93bi1sYXllcic+Q3JlYXRpbmcgWW91ciBPd24gTGF5ZXI8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdiZXN0LXByYWN0aWNlcy10by1mb2xsb3ctd2hlbi1jcmVhdGluZy1sYXllcnMnPkJlc3QgUHJhY3RpY2VzIHRvIEZvbGxvdyBXaGVuIENyZWF0aW5nIExheWVyczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIGFueSBpbWFnZSByZWNpcGVzIHRoYXQgYXJlIHNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8geW91ciBkaXN0cmlidXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIGEgPGZpbGVuYW1lPnBzcGxhc2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlIGZvciBhIGJyYW5kZWQgc3BsYXNoIHNjcmVlbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gYXBwZW5kIGZpbGVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWJiYXBwZW5kLWZpbGVzJz5Vc2luZyAuYmJhcHBlbmQgRmlsZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIGFueSBvdGhlciBhcHBlbmQgZmlsZXMgdG8gbWFrZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbSBjaGFuZ2VzIHRoYXQgYXJlIHNwZWNpZmljIHRvIGluZGl2aWR1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLWEtY3VzdG9tLXRlbXBsYXRlLWNvbmZpZ3VyYXRpb24tZGlyZWN0b3J5Jz4KKyAgICAgICAgPHRpdGxlPkNyZWF0aW5nIGEgQ3VzdG9tIFRlbXBsYXRlIENvbmZpZ3VyYXRpb24gRGlyZWN0b3J5PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBhcmUgcHJvZHVjaW5nIHlvdXIgb3duIGN1c3RvbWl6ZWQgdmVyc2lvbgorICAgICAgICAgICAgb2YgdGhlIGJ1aWxkIHN5c3RlbSBmb3IgdXNlIGJ5IG90aGVyIHVzZXJzLCB5b3UgbWlnaHQKKyAgICAgICAgICAgIHdhbnQgdG8gY3VzdG9taXplIHRoZSBtZXNzYWdlIHNob3duIGJ5IHRoZSBzZXR1cCBzY3JpcHQgb3IKKyAgICAgICAgICAgIHlvdSBtaWdodCB3YW50IHRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgY29uZmlndXJhdGlvbiBmaWxlcyAoaS5lLgorICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4pIHRoYXQgYXJlIGNyZWF0ZWQgaW4KKyAgICAgICAgICAgIGEgbmV3IGJ1aWxkIGRpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5URU1QTEFURUNPTkY8L2ZpbGVuYW1lPiB0byBsb2NhdGUgdGhlIGRpcmVjdG9yeQorICAgICAgICAgICAgZnJvbSB3aGljaCBpdCBnYXRoZXJzIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gdGhhdCB1bHRpbWF0ZWx5CisgICAgICAgICAgICBlbmRzIHVwIGluIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3RvcnknczwvbGluaz4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPlRFTVBMQVRFQ09ORjwvZmlsZW5hbWU+IGlzIHNldCBhcworICAgICAgICAgICAgZm9sbG93cyBpbiB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiByZXBvc2l0b3J5OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURU1QTEFURUNPTkY9JHtURU1QTEFURUNPTkY6LW1ldGEteW9jdG8vY29uZn0KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgaXMgdGhlIGRpcmVjdG9yeSB1c2VkIGJ5IHRoZSBidWlsZCBzeXN0ZW0gdG8gZmluZCB0ZW1wbGF0ZXMKKyAgICAgICAgICAgIGZyb20gd2hpY2ggdG8gYnVpbGQgc29tZSBrZXkgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgIElmIHlvdSBsb29rIGF0IHRoaXMgZGlyZWN0b3J5LCB5b3Ugd2lsbCBzZWUgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mLnNhbXBsZTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mLW5vdGVzLnR4dDwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZXNlIGZpbGVzIHRvIGZvcm0gdGhlIHJlc3BlY3RpdmUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwgYW5kIGRpc3BsYXkgdGhlIGxpc3Qgb2YKKyAgICAgICAgICAgIEJpdEJha2UgdGFyZ2V0cyB3aGVuIHJ1bm5pbmcgdGhlIHNldHVwIHNjcmlwdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gb3ZlcnJpZGUgdGhlc2UgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGVzIHdpdGgKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIHlvdSB3YW50IHVzZWQgd2l0aGluIGV2ZXJ5IG5ldworICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5LCBzaW1wbHkgc2V0IHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPlRFTVBMQVRFQ09ORjwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIHlvdXIgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5URU1QTEFURUNPTkY8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBzZXQgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+LnRlbXBsYXRlY29uZjwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzIGluIHRoZQorICAgICAgICAgICAgdG9wLWxldmVsCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgZm9sZGVyIChlLmcuIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgRWRpdCB0aGUgPGZpbGVuYW1lPi50ZW1wbGF0ZWNvbmY8L2ZpbGVuYW1lPiBzbyB0aGF0IGl0IGNhbiBsb2NhdGUKKyAgICAgICAgICAgIHlvdXIgZGlyZWN0b3J5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZXN0IHByYWN0aWNlcyBkaWN0YXRlIHRoYXQgeW91IHNob3VsZCBrZWVwIHlvdXIKKyAgICAgICAgICAgIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IGluIHlvdXIgY3VzdG9tIGRpc3RyaWJ1dGlvbiBsYXllci4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYXZlIGEgbGF5ZXIgbmFtZWQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXI8L2ZpbGVuYW1lPiBsb2NhdGVkIGluIHlvdXIgaG9tZSBkaXJlY3RvcnkKKyAgICAgICAgICAgIGFuZCB5b3Ugd2FudCB5b3VyIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IG5hbWVkCisgICAgICAgICAgICA8ZmlsZW5hbWU+bXljb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICBDaGFuZ2luZyB0aGUgPGZpbGVuYW1lPi50ZW1wbGF0ZWNvbmY8L2ZpbGVuYW1lPiBhcyBmb2xsb3dzCisgICAgICAgICAgICBjYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gbG9vayBpbiB5b3VyIGRpcmVjdG9yeQorICAgICAgICAgICAgYW5kIGJhc2UgaXRzIGNvbmZpZ3VyYXRpb24gZmlsZXMgb24gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5zYW1wbGU8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGVzIGl0IGZpbmRzLgorICAgICAgICAgICAgVGhlIGZpbmFsIGNvbmZpZ3VyYXRpb24gZmlsZXMgKGkuZS4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IHVsdGltYXRlbHkgc3RpbGwgZW5kIHVwIGluCisgICAgICAgICAgICB5b3VyIEJ1aWxkIERpcmVjdG9yeSwgYnV0IHRoZXkgYXJlIGJhc2VkIG9uIHlvdXIKKyAgICAgICAgICAgIDxmaWxlbmFtZT4qLnNhbXBsZTwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURU1QTEFURUNPTkY9JHtURU1QTEFURUNPTkY6LW1ldGEtbXlsYXllci9teWNvbmZ9CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzaWRlIGZyb20gdGhlIDxmaWxlbmFtZT4qLnNhbXBsZTwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZXMsCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmNvbmYtbm90ZXMudHh0PC9maWxlbmFtZT4gYWxzbyByZXNpZGVzIGluIHRoZQorICAgICAgICAgICAgZGVmYXVsdCA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIHNjcmlwdHMgdGhhdCBzZXQgdXAgdGhlIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgICAgICAoaS5lLgorICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Ij48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQiPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+KQorICAgICAgICAgICAgdXNlIHRoaXMgZmlsZSB0byBkaXNwbGF5IEJpdEJha2UgdGFyZ2V0cyBhcyBwYXJ0IG9mIHRoZSBzY3JpcHQKKyAgICAgICAgICAgIG91dHB1dC4KKyAgICAgICAgICAgIEN1c3RvbWl6aW5nIHRoaXMgPGZpbGVuYW1lPmNvbmYtbm90ZXMudHh0PC9maWxlbmFtZT4gZmlsZSBpcyBhCisgICAgICAgICAgICBnb29kIHdheSB0byBtYWtlIHN1cmUgeW91ciBsaXN0IG9mIGN1c3RvbSB0YXJnZXRzIGFwcGVhcnMKKyAgICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIHNjcmlwdCdzIG91dHB1dC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGVyZSBpcyB0aGUgZGVmYXVsdCBsaXN0IG9mIHRhcmdldHMgZGlzcGxheWVkIGFzIGEgcmVzdWx0IG9mCisgICAgICAgICAgICBydW5uaW5nIGVpdGhlciBvZiB0aGUgc2V0dXAgc2NyaXB0czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgWW91IGNhbiBub3cgcnVuICdiaXRiYWtlICZsdDt0YXJnZXQmZ3Q7JworCisgICAgIENvbW1vbiB0YXJnZXRzIGFyZToKKyAgICAgICAgIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICAgY29yZS1pbWFnZS1zYXRvCisgICAgICAgICBtZXRhLXRvb2xjaGFpbgorICAgICAgICAgYWR0LWluc3RhbGxlcgorICAgICAgICAgbWV0YS1pZGUtc3VwcG9ydAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDaGFuZ2luZyB0aGUgbGlzdGVkIGNvbW1vbiB0YXJnZXRzIGlzIGFzIGVhc3kgYXMgZWRpdGluZyB5b3VyCisgICAgICAgICAgICB2ZXJzaW9uIG9mIDxmaWxlbmFtZT5jb25mLW5vdGVzLnR4dDwvZmlsZW5hbWU+IGluIHlvdXIKKyAgICAgICAgICAgIGN1c3RvbSB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uIGRpcmVjdG9yeSBhbmQgbWFraW5nIHN1cmUgeW91CisgICAgICAgICAgICBoYXZlIDxmaWxlbmFtZT5URU1QTEFURUNPTkY8L2ZpbGVuYW1lPiBzZXQgdG8geW91ciBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYnVpbGRpbmctYS10aW55LXN5c3RlbSc+CisgICAgICAgIDx0aXRsZT5CdWlsZGluZyBhIFRpbnkgU3lzdGVtPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFZlcnkgc21hbGwgZGlzdHJpYnV0aW9ucyBoYXZlIHNvbWUgc2lnbmlmaWNhbnQgYWR2YW50YWdlcyBzdWNoCisgICAgICAgICAgICBhcyByZXF1aXJpbmcgbGVzcyBvbi1kaWUgb3IgaW4tcGFja2FnZSBtZW1vcnkgKGNoZWFwZXIpLCBiZXR0ZXIKKyAgICAgICAgICAgIHBlcmZvcm1hbmNlIHRocm91Z2ggZWZmaWNpZW50IGNhY2hlIHVzYWdlLCBsb3dlciBwb3dlciByZXF1aXJlbWVudHMKKyAgICAgICAgICAgIGR1ZSB0byBsZXNzIG1lbW9yeSwgZmFzdGVyIGJvb3QgdGltZXMsIGFuZCByZWR1Y2VkIGRldmVsb3BtZW50CisgICAgICAgICAgICBvdmVyaGVhZC4KKyAgICAgICAgICAgIFNvbWUgcmVhbC13b3JsZCBleGFtcGxlcyB3aGVyZSBhIHZlcnkgc21hbGwgZGlzdHJpYnV0aW9uIGdpdmVzCisgICAgICAgICAgICB5b3UgZGlzdGluY3QgYWR2YW50YWdlcyBhcmUgZGlnaXRhbCBjYW1lcmFzLCBtZWRpY2FsIGRldmljZXMsCisgICAgICAgICAgICBhbmQgc21hbGwgaGVhZGxlc3Mgc3lzdGVtcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIGluZm9ybWF0aW9uIHRoYXQgc2hvd3MgeW91IGhvdyB5b3UgY2FuCisgICAgICAgICAgICB0cmltIHlvdXIgZGlzdHJpYnV0aW9uIHRvIGV2ZW4gc21hbGxlciBzaXplcyB0aGFuIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnBva3ktdGlueTwvZmlsZW5hbWU+IGRpc3RyaWJ1dGlvbiwgd2hpY2ggaXMgYXJvdW5kCisgICAgICAgICAgICA1IE1ieXRlcywgdGhhdCBjYW4gYmUgYnVpbHQgb3V0LW9mLXRoZS1ib3ggdXNpbmcgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndGlueS1zeXN0ZW0tb3ZlcnZpZXcnPgorICAgICAgICAgICAgPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHByZXNlbnRzIHRoZSBvdmVyYWxsIHN0ZXBzIHlvdSBuZWVkIHRvCisgICAgICAgICAgICAgICAgY29uc2lkZXIgYW5kIHBlcmZvcm0gdG8gY3JlYXRlIGRpc3RyaWJ1dGlvbnMgd2l0aCBzbWFsbGVyCisgICAgICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtcywgYWNoaWV2ZSBmYXN0ZXIgYm9vdCB0aW1lcywgbWFpbnRhaW4geW91ciBjcml0aWNhbAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHksIGFuZCBhdm9pZCBpbml0aWFsIFJBTSBkaXNrczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnb2Fscy1hbmQtZ3VpZGluZy1wcmluY2lwbGVzJz5EZXRlcm1pbmUgeW91ciBnb2FscyBhbmQgZ3VpZGluZyBwcmluY2lwbGVzLjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd1bmRlcnN0YW5kLXdoYXQtZ2l2ZXMteW91ci1pbWFnZS1zaXplJz5VbmRlcnN0YW5kIHdoYXQgY29udHJpYnV0ZXMgdG8geW91ciBpbWFnZSBzaXplLjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd0cmltLXRoZS1yb290LWZpbGVzeXN0ZW0nPlJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgcm9vdCBmaWxlc3lzdGVtLjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd0cmltLXRoZS1rZXJuZWwnPlJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUga2VybmVsLjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZW1vdmUtcGFja2FnZS1tYW5hZ2VtZW50LXJlcXVpcmVtZW50cyc+RWxpbWluYXRlIHBhY2thZ2luZyByZXF1aXJlbWVudHMuPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2xvb2stZm9yLW90aGVyLXdheXMtdG8tbWluaW1pemUtc2l6ZSc+TG9vayBmb3Igb3RoZXIgd2F5cyB0byBtaW5pbWl6ZSBzaXplLjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdpdGVyYXRlLW9uLXRoZS1wcm9jZXNzJz5JdGVyYXRlIG9uIHRoZSBwcm9jZXNzLjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2dvYWxzLWFuZC1ndWlkaW5nLXByaW5jaXBsZXMnPgorICAgICAgICAgICAgPHRpdGxlPkdvYWxzIGFuZCBHdWlkaW5nIFByaW5jaXBsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWZvcmUgeW91IGNhbiByZWFjaCB5b3VyIGRlc3RpbmF0aW9uLCB5b3UgbmVlZCB0byBrbm93CisgICAgICAgICAgICAgICAgd2hlcmUgeW91IGFyZSBnb2luZy4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgbGlzdCB0aGF0IHlvdSBjYW4gdXNlIGFzIGEgZ3VpZGUgd2hlbgorICAgICAgICAgICAgICAgIGNyZWF0aW5nIHZlcnkgc21hbGwgZGlzdHJpYnV0aW9uczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RGV0ZXJtaW5lIGhvdyBtdWNoIHNwYWNlIHlvdSBuZWVkCisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiBhIGtlcm5lbCB0aGF0IGlzIDEgTWJ5dGUgb3IgbGVzcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgcm9vdCBmaWxlc3lzdGVtIHRoYXQgaXMgMyBNYnl0ZXMgb3IgbGVzcykuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZpbmQgdGhlIGFyZWFzIHRoYXQgYXJlIGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICAgICAgdGFraW5nIDkwJSBvZiB0aGUgc3BhY2UgYW5kIGNvbmNlbnRyYXRlIG9uIHJlZHVjaW5nCisgICAgICAgICAgICAgICAgICAgICAgICB0aG9zZSBhcmVhcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RG8gbm90IGNyZWF0ZSBhbnkgZGlmZmljdWx0ICJoYWNrcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFjaGlldmUgeW91ciBnb2Fscy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkxldmVyYWdlIHRoZSBkZXZpY2Utc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Xb3JrIGluIGEgc2VwYXJhdGUgbGF5ZXIgc28gdGhhdCB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIGtlZXAgY2hhbmdlcyBpc29sYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3JlYXRlIGxheWVycywgc2VlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgIjxsaW5rIGxpbmtlbmQ9J3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZyBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VuZGVyc3RhbmQtd2hhdC1naXZlcy15b3VyLWltYWdlLXNpemUnPgorICAgICAgICAgICAgPHRpdGxlPlVuZGVyc3RhbmQgV2hhdCBDb250cmlidXRlcyB0byBZb3VyIEltYWdlIFNpemU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJdCBpcyBlYXNpZXN0IHRvIGhhdmUgc29tZXRoaW5nIHRvIHN0YXJ0IHdpdGggd2hlbiBjcmVhdGluZworICAgICAgICAgICAgICAgIHlvdXIgb3duIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgWW9jdG8gUHJvamVjdCBvdXQtb2YtdGhlLWJveCB0byBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3ktdGlueTwvZmlsZW5hbWU+IGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICBVbHRpbWF0ZWx5LCB5b3Ugd2lsbCB3YW50IHRvIG1ha2UgY2hhbmdlcyBpbiB5b3VyIG93bgorICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiB0aGF0IGFyZSBsaWtlbHkgbW9kZWxlZCBhZnRlcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5LXRpbnk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVG8gdXNlIDxmaWxlbmFtZT5wb2t5LXRpbnk8L2ZpbGVuYW1lPiBpbiB5b3VyIGJ1aWxkLAorICAgICAgICAgICAgICAgICAgICBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRvICJwb2t5LXRpbnkiCisgICAgICAgICAgICAgICAgICAgIGFzIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLXlvdXItb3duLWRpc3RyaWJ1dGlvbic+Q3JlYXRpbmcgWW91ciBPd24gRGlzdHJpYnV0aW9uPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVuZGVyc3RhbmRpbmcgc29tZSBtZW1vcnkgY29uY2VwdHMgd2lsbCBoZWxwIHlvdSByZWR1Y2UgdGhlCisgICAgICAgICAgICAgICAgc3lzdGVtIHNpemUuCisgICAgICAgICAgICAgICAgTWVtb3J5IGNvbnNpc3RzIG9mIHN0YXRpYywgZHluYW1pYywgYW5kIHRlbXBvcmFyeSBtZW1vcnkuCisgICAgICAgICAgICAgICAgU3RhdGljIG1lbW9yeSBpcyB0aGUgVEVYVCAoY29kZSksIERBVEEgKGluaXRpYWxpemVkIGRhdGEKKyAgICAgICAgICAgICAgICBpbiB0aGUgY29kZSksIGFuZCBCU1MgKHVuaW5pdGlhbGl6ZWQgZGF0YSkgc2VjdGlvbnMuCisgICAgICAgICAgICAgICAgRHluYW1pYyBtZW1vcnkgcmVwcmVzZW50cyBtZW1vcnkgdGhhdCBpcyBhbGxvY2F0ZWQgYXQgcnVudGltZToKKyAgICAgICAgICAgICAgICBzdGFja3MsIGhhc2ggdGFibGVzLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgVGVtcG9yYXJ5IG1lbW9yeSBpcyByZWNvdmVyZWQgYWZ0ZXIgdGhlIGJvb3QgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICBUaGlzIG1lbW9yeSBjb25zaXN0cyBvZiBtZW1vcnkgdXNlZCBmb3IgZGVjb21wcmVzc2luZworICAgICAgICAgICAgICAgIHRoZSBrZXJuZWwgYW5kIGZvciB0aGUgPGZpbGVuYW1lPl9faW5pdF9fPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmdW5jdGlvbnMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGhlbHAgeW91IHNlZSB3aGVyZSB5b3UgY3VycmVudGx5IGFyZSB3aXRoIGtlcm5lbCBhbmQgcm9vdAorICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gc2l6ZXMsIHlvdSBjYW4gdXNlIHR3byB0b29scyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPiBpbgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+c2NyaXB0cy90aW55LzwvZmlsZW5hbWU+IGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmtzaXplLnB5PC9maWxlbmFtZT46IFJlcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudCBzaXplcyBmb3IgdGhlIGtlcm5lbCBidWlsZCBvYmplY3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZGlyc2l6ZS5weTwvZmlsZW5hbWU+OiBSZXBvcnRzCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQgc2l6ZXMgZm9yIHRoZSByb290IGZpbGVzeXN0ZW0uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgVGhpcyBuZXh0IHRvb2wgYW5kIGNvbW1hbmQgaGVscCB5b3Ugb3JnYW5pemUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZyYWdtZW50cyBhbmQgdmlldyBmaWxlIGRlcGVuZGVuY2llcyBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm06CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5tZXJnZV9jb25maWcuc2g8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEhlbHBzIHlvdSBtYW5hZ2UgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgZnJhZ21lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggdGhpcyB0b29sLCB5b3UgY2FuIG1lcmdlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRzIHRvZ2V0aGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRvb2wgYWxsb3dzIHlvdSB0byBtYWtlIG92ZXJyaWRlcyBhbmQgd2FybnMgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBvZiBhbnkgbWlzc2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdG9vbCBpcyBpZGVhbCBmb3IgYWxsb3dpbmcgeW91IHRvIGl0ZXJhdGUgb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLCBjcmVhdGUgbWluaW1hbCBjb25maWd1cmF0aW9ucywgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgZGlmZmVyZW50IG1hY2hpbmVzCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGhhdmluZyB0byBkdXBsaWNhdGUgeW91ciBwcm9jZXNzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSA8ZmlsZW5hbWU+bWVyZ2VfY29uZmlnLnNoPC9maWxlbmFtZT4gc2NyaXB0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0IG9mIHRoZSBMaW51eCBZb2N0byBrZXJuZWwgR2l0IHJlcG9zaXRvcmllcworICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTQ8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjEwPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy44PC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMva2NvbmZpZzwvZmlsZW5hbWU+IGRpcmVjdG9yeS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmF0aW9uIGZyYWdtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgICAgICBNYW51YWwgYW5kIHRoZSAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmctY29uZmlnLWZyYWdtZW50cyc+Q3JlYXRpbmcgQ29uZmlndXJhdGlvbiBGcmFnbWVudHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiwgd2hpY2ggaXMgaW4gdGhpcyBtYW51YWwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Yml0YmFrZSAtdSBkZXBleHAgLWcgPHJlcGxhY2VhYmxlPmJpdGJha2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoZSBCaXRCYWtlIGNvbW1hbmQgd2l0aCB0aGVzZSBvcHRpb25zIGJyaW5ncyB1cAorICAgICAgICAgICAgICAgICAgICAgICAgYSBEZXBlbmRlbmN5IEV4cGxvcmVyIGZyb20gd2hpY2ggeW91IGNhbiB2aWV3IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGFsbG93cyB5b3UgdG8gbWFrZQorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtZWQgZGVjaXNpb25zIHdoZW4gY3V0dGluZyBvdXQgdmFyaW91cyBwaWVjZXMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWwgYW5kIHJvb3QgZmlsZXN5c3RlbS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0cmltLXRoZS1yb290LWZpbGVzeXN0ZW0nPgorICAgICAgICAgICAgPHRpdGxlPlRyaW0gdGhlIFJvb3QgRmlsZXN5c3RlbTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSByb290IGZpbGVzeXN0ZW0gaXMgbWFkZSB1cCBvZiBwYWNrYWdlcyBmb3IgYm9vdGluZywKKyAgICAgICAgICAgICAgICBsaWJyYXJpZXMsIGFuZCBhcHBsaWNhdGlvbnMuCisgICAgICAgICAgICAgICAgVG8gY2hhbmdlIHRoaW5ncywgeW91IGNhbiBjb25maWd1cmUgaG93IHRoZSBwYWNrYWdpbmcgaGFwcGVucywKKyAgICAgICAgICAgICAgICB3aGljaCBjaGFuZ2VzIHRoZSB3YXkgeW91IGJ1aWxkIHRoZW0uCisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIG1vZGlmeSB0aGUgZmlsZXN5c3RlbSBpdHNlbGYgb3Igc2VsZWN0IGEgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmlyc3QsIGZpbmQgb3V0IHdoYXQgaXMgaG9nZ2luZyB5b3VyIHJvb3QgZmlsZXN5c3RlbSBieSBydW5uaW5nIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXJzaXplLnB5PC9maWxlbmFtZT4gc2NyaXB0IGZyb20geW91ciByb290IGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgPHJlcGxhY2VhYmxlPnJvb3QtZGlyZWN0b3J5LW9mLWltYWdlPC9yZXBsYWNlYWJsZT4KKyAgICAgJCBkaXJzaXplLnB5IDEwMDAwMCA+IGRpcnNpemUtMTAway5sb2cKKyAgICAgJCBjYXQgZGlyc2l6ZS0xMDBrLmxvZworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFwcGx5IGEgZmlsdGVyIHRvIHRoZSBzY3JpcHQgdG8gaWdub3JlIGZpbGVzIHVuZGVyCisgICAgICAgICAgICAgICAgYSBjZXJ0YWluIHNpemUuCisgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgZmlsdGVycyBvdXQgYW55IGZpbGVzIGJlbG93IDEwMCBLYnl0ZXMuCisgICAgICAgICAgICAgICAgVGhlIHNpemVzIHJlcG9ydGVkIGJ5IHRoZSB0b29sIGFyZSB1bmNvbXByZXNzZWQsIGFuZCB0aHVzCisgICAgICAgICAgICAgICAgd2lsbCBiZSBzbWFsbGVyIGJ5IGEgcmVsYXRpdmVseSBjb25zdGFudCBmYWN0b3IgaW4gYQorICAgICAgICAgICAgICAgIGNvbXByZXNzZWQgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgIFdoZW4geW91IGV4YW1pbmUgeW91ciBsb2cgZmlsZSwgeW91IGNhbiBmb2N1cyBvbiBhcmVhcyBvZiB0aGUKKyAgICAgICAgICAgICAgICByb290IGZpbGVzeXN0ZW0gdGhhdCB0YWtlIHVwIGxhcmdlIGFtb3VudHMgb2YgbWVtb3J5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBiZSBzdXJlIHRoYXQgd2hhdCB5b3UgZWxpbWluYXRlIGRvZXMgbm90IGNyaXBwbGUKKyAgICAgICAgICAgICAgICB0aGUgZnVuY3Rpb25hbGl0eSB5b3UgbmVlZC4KKyAgICAgICAgICAgICAgICBPbmUgd2F5IHRvIHNlZSBob3cgcGFja2FnZXMgcmVsYXRlIHRvIGVhY2ggb3RoZXIgaXMgYnkgdXNpbmcKKyAgICAgICAgICAgICAgICB0aGUgRGVwZW5kZW5jeSBFeHBsb3JlciBVSSB3aXRoIHRoZSBCaXRCYWtlIGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIDxyZXBsYWNlYWJsZT5pbWFnZS1kaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPgorICAgICAkIGJpdGJha2UgLXUgZGVwZXhwIC1nIDxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFVzZSB0aGUgaW50ZXJmYWNlIHRvIHNlbGVjdCBwb3RlbnRpYWwgcGFja2FnZXMgeW91IHdpc2ggdG8KKyAgICAgICAgICAgICAgICBlbGltaW5hdGUgYW5kIHNlZSB0aGVpciBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gZGVjaWRpbmcgaG93IHRvIHJlZHVjZSB0aGUgc2l6ZSwgZ2V0IHJpZCBvZiBwYWNrYWdlcyB0aGF0CisgICAgICAgICAgICAgICAgcmVzdWx0IGluIG1pbmltYWwgaW1wYWN0IG9uIHRoZSBmZWF0dXJlIHNldC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IG5vdCBuZWVkIGEgVkdBIGRpc3BsYXkuCisgICAgICAgICAgICAgICAgT3IsIHlvdSBtaWdodCBiZSBhYmxlIHRvIGdldCBieSB3aXRoIDxmaWxlbmFtZT5kZXZ0bXBmczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5tZGV2PC9maWxlbmFtZT4gaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51ZGV2PC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSB0byBtYWtlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGVsaW1pbmF0ZSA8ZmlsZW5hbWU+dWRldjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nbGliPC9maWxlbmFtZT4sIHNldCB0aGUgZm9sbG93aW5nIGluIHRoZQorICAgICAgICAgICAgICAgIGxvY2FsIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFZJUlRVQUwtUlVOVElNRV9kZXZfbWFuYWdlciA9ICIiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGaW5hbGx5LCB5b3Ugc2hvdWxkIGNvbnNpZGVyIGV4YWN0bHkgdGhlIHR5cGUgb2Ygcm9vdAorICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0geW91IG5lZWQgdG8gbWVldCB5b3VyIG5lZWRzIHdoaWxlIGFsc28gcmVkdWNpbmcKKyAgICAgICAgICAgICAgICBpdHMgc2l6ZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgPGZpbGVuYW1lPmNyYW1mczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zcXVhc2hmczwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+dWJpZnM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXh0MjwvZmlsZW5hbWU+LCBvciBhbiA8ZmlsZW5hbWU+aW5pdHJhbWZzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB1c2luZyA8ZmlsZW5hbWU+aW5pdHJhbWZzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgQmUgYXdhcmUgdGhhdCA8ZmlsZW5hbWU+ZXh0MzwvZmlsZW5hbWU+IHJlcXVpcmVzIGEgMSBNYnl0ZQorICAgICAgICAgICAgICAgIGpvdXJuYWwuCisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBva2F5IHdpdGggcnVubmluZyByZWFkLW9ubHksIHlvdSBkbyBub3QgbmVlZCB0aGlzCisgICAgICAgICAgICAgICAgam91cm5hbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgQWZ0ZXIgZWFjaCByb3VuZCBvZiBlbGltaW5hdGlvbiwgeW91IG5lZWQgdG8gcmVidWlsZCB5b3VyCisgICAgICAgICAgICAgICAgc3lzdGVtIGFuZCB0aGVuIHVzZSB0aGUgdG9vbHMgdG8gc2VlIHRoZSBlZmZlY3RzIG9mIHlvdXIKKyAgICAgICAgICAgICAgICByZWR1Y3Rpb25zLgorICAgICAgICAgICAgPC9ub3RlPgorCisKKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0cmltLXRoZS1rZXJuZWwnPgorICAgICAgICAgICAgPHRpdGxlPlRyaW0gdGhlIEtlcm5lbDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBrZXJuZWwgaXMgYnVpbHQgYnkgaW5jbHVkaW5nIHBvbGljaWVzIGZvciBoYXJkd2FyZS1pbmRlcGVuZGVudAorICAgICAgICAgICAgICAgIGFzcGVjdHMuCisgICAgICAgICAgICAgICAgV2hhdCBzdWJzeXN0ZW1zIGRvIHlvdSBlbmFibGU/CisgICAgICAgICAgICAgICAgRm9yIHdoYXQgYXJjaGl0ZWN0dXJlIGFyZSB5b3UgYnVpbGRpbmc/CisgICAgICAgICAgICAgICAgV2hpY2ggZHJpdmVycyBkbyB5b3UgYnVpbGQgYnkgZGVmYXVsdD8KKyAgICAgICAgICAgICAgICA8bm90ZT5Zb3UgY2FuIG1vZGlmeSB0aGUga2VybmVsIHNvdXJjZSBpZiB5b3Ugd2FudCB0byBoZWxwCisgICAgICAgICAgICAgICAgICAgIHdpdGggYm9vdCB0aW1lLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUnVuIHRoZSA8ZmlsZW5hbWU+a3NpemUucHk8L2ZpbGVuYW1lPiBzY3JpcHQgZnJvbSB0aGUgdG9wLWxldmVsCisgICAgICAgICAgICAgICAgTGludXggYnVpbGQgZGlyZWN0b3J5IHRvIGdldCBhbiBpZGVhIG9mIHdoYXQgaXMgbWFraW5nIHVwCisgICAgICAgICAgICAgICAgdGhlIGtlcm5lbDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgPHJlcGxhY2VhYmxlPnRvcC1sZXZlbC1saW51eC1idWlsZC1kaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPgorICAgICAkIGtzaXplLnB5ID4ga3NpemUubG9nCisgICAgICQgY2F0IGtzaXplLmxvZworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBleGFtaW5lIHRoZSBsb2csIHlvdSB3aWxsIHNlZSBob3cgbXVjaCBzcGFjZSBpcworICAgICAgICAgICAgICAgIHRha2VuIHVwIHdpdGggdGhlIGJ1aWx0LWluIDxmaWxlbmFtZT4ubzwvZmlsZW5hbWU+IGZpbGVzIGZvcgorICAgICAgICAgICAgICAgIGRyaXZlcnMsIG5ldHdvcmtpbmcsIGNvcmUga2VybmVsIGZpbGVzLCBmaWxlc3lzdGVtLCBzb3VuZCwKKyAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgVGhlIHNpemVzIHJlcG9ydGVkIGJ5IHRoZSB0b29sIGFyZSB1bmNvbXByZXNzZWQsIGFuZCB0aHVzCisgICAgICAgICAgICAgICAgd2lsbCBiZSBzbWFsbGVyIGJ5IGEgcmVsYXRpdmVseSBjb25zdGFudCBmYWN0b3IgaW4gYSBjb21wcmVzc2VkCisgICAgICAgICAgICAgICAga2VybmVsIGltYWdlLgorICAgICAgICAgICAgICAgIExvb2sgdG8gcmVkdWNlIHRoZSBhcmVhcyB0aGF0IGFyZSBsYXJnZSBhbmQgdGFraW5nIHVwIGFyb3VuZAorICAgICAgICAgICAgICAgIHRoZSAiOTAlIHJ1bGUuIgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBleGFtaW5lLCBvciBkcmlsbCBkb3duLCBpbnRvIGFueSBwYXJ0aWN1bGFyIGFyZWEsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWQ8L2ZpbGVuYW1lPiBvcHRpb24gd2l0aCB0aGUgc2NyaXB0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBrc2l6ZS5weSAtZCA+IGtzaXplLmxvZworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBVc2luZyB0aGlzIG9wdGlvbiBicmVha3Mgb3V0IHRoZSBpbmRpdmlkdWFsIGZpbGUgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICBmb3IgZWFjaCBhcmVhIG9mIHRoZSBrZXJuZWwgKGUuZy4gZHJpdmVycywgbmV0d29ya2luZywgYW5kCisgICAgICAgICAgICAgICAgc28gZm9ydGgpLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgeW91ciBsb2cgZmlsZSB0byBzZWUgd2hhdCB5b3UgY2FuIGVsaW1pbmF0ZSBmcm9tIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICBiYXNlZCBvbiBmZWF0dXJlcyB5b3UgY2FuIGxldCBnby4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBub3QgZ29pbmcgdG8gbmVlZCBzb3VuZCwgeW91IGRvIG5vdAorICAgICAgICAgICAgICAgIG5lZWQgYW55IGRyaXZlcnMgdGhhdCBzdXBwb3J0IHNvdW5kLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBZnRlciBmaWd1cmluZyBvdXQgd2hhdCB0byBlbGltaW5hdGUsIHlvdSBuZWVkIHRvIHJlY29uZmlndXJlCisgICAgICAgICAgICAgICAgdGhlIGtlcm5lbCB0byByZWZsZWN0IHRob3NlIGNoYW5nZXMgZHVyaW5nIHRoZSBuZXh0IGJ1aWxkLgorICAgICAgICAgICAgICAgIFlvdSBjb3VsZCBydW4gPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiBhbmQgbWFrZSBhbGwgeW91cgorICAgICAgICAgICAgICAgIGNoYW5nZXMgYXQgb25jZS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGF0IG1ha2VzIGl0IGRpZmZpY3VsdCB0byBzZWUgdGhlIGVmZmVjdHMgb2YgeW91cgorICAgICAgICAgICAgICAgIGluZGl2aWR1YWwgZWxpbWluYXRpb25zIGFuZCBhbHNvIG1ha2VzIGl0IGRpZmZpY3VsdCB0byByZXBsaWNhdGUKKyAgICAgICAgICAgICAgICB0aGUgY2hhbmdlcyBmb3IgcGVyaGFwcyBhbm90aGVyIHRhcmdldCBkZXZpY2UuCisgICAgICAgICAgICAgICAgQSBiZXR0ZXIgbWV0aG9kIGlzIHRvIHN0YXJ0IHdpdGggbm8gY29uZmlndXJhdGlvbnMgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWxsbm9jb25maWc8L2ZpbGVuYW1lPiwgY3JlYXRlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBmcmFnbWVudHMgZm9yIGluZGl2aWR1YWwgY2hhbmdlcywgYW5kIHRoZW4gbWFuYWdlIHRoZQorICAgICAgICAgICAgICAgIGZyYWdtZW50cyBpbnRvIGEgc2luZ2xlIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2luZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXJnZV9jb25maWcuc2g8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgdG9vbCBtYWtlcyBpdCBlYXN5IGZvciB5b3UgdG8gaXRlcmF0ZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGNoYW5nZSBhbmQgYnVpbGQgY3ljbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEVhY2ggdGltZSB5b3UgbWFrZSBjb25maWd1cmF0aW9uIGNoYW5nZXMsIHlvdSBuZWVkIHRvIHJlYnVpbGQKKyAgICAgICAgICAgICAgICB0aGUga2VybmVsIGFuZCBjaGVjayB0byBzZWUgd2hhdCBpbXBhY3QgeW91ciBjaGFuZ2VzIGhhZCBvbgorICAgICAgICAgICAgICAgIHRoZSBvdmVyYWxsIHNpemUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVtb3ZlLXBhY2thZ2UtbWFuYWdlbWVudC1yZXF1aXJlbWVudHMnPgorICAgICAgICAgICAgPHRpdGxlPlJlbW92ZSBQYWNrYWdlIE1hbmFnZW1lbnQgUmVxdWlyZW1lbnRzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUGFja2FnaW5nIHJlcXVpcmVtZW50cyBhZGQgc2l6ZSB0byB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgT25lIHdheSB0byByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGltYWdlIGlzIHRvIHJlbW92ZSBhbGwgdGhlCisgICAgICAgICAgICAgICAgcGFja2FnaW5nIHJlcXVpcmVtZW50cyBmcm9tIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICBUaGlzIHJlZHVjdGlvbiBpbmNsdWRlcyBib3RoIHJlbW92aW5nIHRoZSBwYWNrYWdlIG1hbmFnZXIKKyAgICAgICAgICAgICAgICBhbmQgaXRzIHVuaXF1ZSBkZXBlbmRlbmNpZXMgYXMgd2VsbCBhcyByZW1vdmluZyB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgZGF0YSBpdHNlbGYuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGVsaW1pbmF0ZSBhbGwgdGhlIHBhY2thZ2luZyByZXF1aXJlbWVudHMgZm9yIGFuIGltYWdlLAorICAgICAgICAgICAgICAgIGJlIHN1cmUgdGhhdCAicGFja2FnZS1tYW5hZ2VtZW50IiBpcyBub3QgcGFydCBvZiB5b3VyCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50IGZvciB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgcmVtb3ZlIHRoaXMgZmVhdHVyZSwgeW91IGFyZSByZW1vdmluZyB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgIG1hbmFnZXIgYXMgd2VsbCBhcyBpdHMgZGVwZW5kZW5jaWVzIGZyb20gdGhlIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdsb29rLWZvci1vdGhlci13YXlzLXRvLW1pbmltaXplLXNpemUnPgorICAgICAgICAgICAgPHRpdGxlPkxvb2sgZm9yIE90aGVyIFdheXMgdG8gTWluaW1pemUgU2l6ZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB5b3VyIHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlcywgb3RoZXIgYXJlYXMgdGhhdCB5b3UKKyAgICAgICAgICAgICAgICBjYW4gdHJpbSBsaWtlbHkgZXhpc3QuCisgICAgICAgICAgICAgICAgVGhlIGtleSB0byBmaW5kaW5nIHRoZXNlIGFyZWFzIGlzIHRocm91Z2ggdG9vbHMgYW5kIG1ldGhvZHMKKyAgICAgICAgICAgICAgICBkZXNjcmliZWQgaGVyZSBjb21iaW5lZCB3aXRoIGV4cGVyaW1lbnRhdGlvbiBhbmQgaXRlcmF0aW9uLgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIGEgY291cGxlIG9mIGFyZWFzIHRvIGV4cGVyaW1lbnQgd2l0aDoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBJbiBnZW5lcmFsLCBmb2xsb3cgdGhpcyBwcm9jZXNzOgorICAgICAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZW1vdmUgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHlvdSB0aGluayB5b3UgZG8gbm90IG5lZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJ1aWxkIHlvdXIgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgdGhlIGJ1aWxkIGZhaWxzIGR1ZSB0byBtaXNzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMgaW4gYSBwYWNrYWdlLCBkZXRlcm1pbmUgaWYgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvbmZpZ3VyZSB0aGUgcGFja2FnZSB0byBub3QgbmVlZCB0aG9zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbiB0byBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCB3aWRlIGNoYXJhY3RlciBzdXBwb3J0IGFzIGlzIGRvbmUgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uY3Vyc2VzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yLCBpZiBzdXBwb3J0IGZvciB0aG9zZSBjaGFyYWN0ZXJzIGlzIG5lZWRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lIHdoYXQgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgcHJvdmlkZSB0aGUgc3VwcG9ydCBhbmQgcmVzdG9yZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJlYnVpbGQgYW5kIHJlcGVhdCB0aGUgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJ1c3lib3g8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBCdXN5Qm94LCB1c2UgYSBwcm9jZXNzIHNpbWlsYXIgYXMgZGVzY3JpYmVkIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBBIGRpZmZlcmVuY2UgaXMgeW91IHdpbGwgbmVlZCB0byBib290IHRoZSByZXN1bHRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB0byBzZWUgaWYgeW91IGFyZSBhYmxlIHRvIGRvIGV2ZXJ5dGhpbmcgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QgZnJvbSB0aGUgcnVubmluZyBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBiZSBzdXJlIHRvIGludGVncmF0ZSBjb25maWd1cmF0aW9uIGZyYWdtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgaW50byBCdXN5Ym94IGJlY2F1c2UgQnVzeUJveCBoYW5kbGVzIGl0cyBvd24gY29yZQorICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgYW5kIHRoZW4gYWxsb3dzIHlvdSB0byBhZGQgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRzIG9uIHRvcC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2l0ZXJhdGUtb24tdGhlLXByb2Nlc3MnPgorICAgICAgICAgICAgPHRpdGxlPkl0ZXJhdGUgb24gdGhlIFByb2Nlc3M8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBub3QgcmVhY2hlZCB5b3VyIGdvYWxzIG9uIHN5c3RlbSBzaXplLCB5b3UgbmVlZAorICAgICAgICAgICAgICAgIHRvIGl0ZXJhdGUgb24gdGhlIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgVGhlIHByb2Nlc3MgaXMgdGhlIHNhbWUuCisgICAgICAgICAgICAgICAgVXNlIHRoZSB0b29scyBhbmQgc2VlIGp1c3Qgd2hhdCBpcyB0YWtpbmcgdXAgOTAlIG9mIHRoZSByb290CisgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSBhbmQgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgICAgICBEZWNpZGUgd2hhdCB5b3UgY2FuIGVsaW1pbmF0ZSB3aXRob3V0IGxpbWl0aW5nIHlvdXIgZGV2aWNlCisgICAgICAgICAgICAgICAgYmV5b25kIHdoYXQgeW91IG5lZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB5b3VyIHN5c3RlbSwgYSBnb29kIHBsYWNlIHRvIGxvb2sgbWlnaHQgYmUKKyAgICAgICAgICAgICAgICBCdXN5Ym94LCB3aGljaCBwcm92aWRlcyBhIHN0cmlwcGVkIGRvd24KKyAgICAgICAgICAgICAgICB2ZXJzaW9uIG9mIFVuaXggdG9vbHMgaW4gYSBzaW5nbGUsIGV4ZWN1dGFibGUgZmlsZS4KKyAgICAgICAgICAgICAgICBZb3UgbWlnaHQgYmUgYWJsZSB0byBkcm9wIHZpcnR1YWwgdGVybWluYWwgc2VydmljZXMgb3IgcGVyaGFwcworICAgICAgICAgICAgICAgIGlwdjYuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYnVpbGRpbmctaW1hZ2VzLWZvci1tb3JlLXRoYW4tb25lLW1hY2hpbmUnPgorICAgICAgICA8dGl0bGU+QnVpbGRpbmcgSW1hZ2VzIGZvciBNb3JlIHRoYW4gT25lIE1hY2hpbmU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBjb21tb24gc2NlbmFyaW8gZGV2ZWxvcGVycyBmYWNlIGlzIGNyZWF0aW5nIGltYWdlcyBmb3Igc2V2ZXJhbAorICAgICAgICAgICAgZGlmZmVyZW50IG1hY2hpbmVzIHRoYXQgdXNlIHRoZSBzYW1lIHNvZnR3YXJlIGVudmlyb25tZW50LgorICAgICAgICAgICAgSW4gdGhpcyBzaXR1YXRpb24sIGl0IGlzIHRlbXB0aW5nIHRvIHNldCB0aGUKKyAgICAgICAgICAgIHR1bmluZ3MgYW5kIG9wdGltaXphdGlvbiBmbGFncyBmb3IgZWFjaCBidWlsZCBzcGVjaWZpY2FsbHkgZm9yCisgICAgICAgICAgICB0aGUgdGFyZ2V0ZWQgaGFyZHdhcmUgKGkuZS4gIm1heGluZyBvdXQiIHRoZSB0dW5pbmdzKS4KKyAgICAgICAgICAgIERvaW5nIHNvIGNhbiBjb25zaWRlcmFibHkgYWRkIHRvIGJ1aWxkIHRpbWVzIGFuZCBwYWNrYWdlIGZlZWQKKyAgICAgICAgICAgIG1haW50ZW5hbmNlIGNvbGxlY3RpdmVseSBmb3IgdGhlIG1hY2hpbmVzLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHNlbGVjdGluZyB0dW5lcyB0aGF0IGFyZSBleHRyZW1lbHkgc3BlY2lmaWMgdG8gYQorICAgICAgICAgICAgQ1BVIGNvcmUgdXNlZCBpbiBhIHN5c3RlbSBtaWdodCBlbmFibGUgc29tZSBtaWNybyBvcHRpbWl6YXRpb25zCisgICAgICAgICAgICBpbiBHQ0MgZm9yIHRoYXQgcGFydGljdWxhciBzeXN0ZW0gYnV0IHdvdWxkIG90aGVyd2lzZSBub3QgZ2FpbgorICAgICAgICAgICAgeW91IG11Y2ggb2YgYSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlIGFjcm9zcyB0aGUgb3RoZXIgc3lzdGVtcworICAgICAgICAgICAgYXMgY29tcGFyZWQgdG8gdXNpbmcgYSBtb3JlIGdlbmVyYWwgdHVuaW5nIGFjcm9zcyBhbGwgdGhlIGJ1aWxkcworICAgICAgICAgICAgKGUuZy4gc2V0dGluZworICAgICAgICAgICAgPHVsaW5rIHVybD0ndmFyLURFRkFVTFRUVU5FJz48ZmlsZW5hbWU+REVGQVVMVFRVTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICBzcGVjaWZpY2FsbHkgZm9yIGVhY2ggbWFjaGluZSdzIGJ1aWxkKS4KKyAgICAgICAgICAgIFJhdGhlciB0aGFuICJtYXggb3V0IiBlYWNoIGJ1aWxkJ3MgdHVuaW5ncywgeW91IGNhbiB0YWtlIHN0ZXBzIHRoYXQKKyAgICAgICAgICAgIGNhdXNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHJldXNlIHNvZnR3YXJlIGFjcm9zcyB0aGUKKyAgICAgICAgICAgIHZhcmlvdXMgbWFjaGluZXMgd2hlcmUgaXQgbWFrZXMgc2Vuc2UuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiBidWlsZCBzcGVlZCBhbmQgcGFja2FnZSBmZWVkIG1haW50ZW5hbmNlIGFyZSBjb25zaWRlcmF0aW9ucywKKyAgICAgICAgICAgIHlvdSBzaG91bGQgY29uc2lkZXIgdGhlIHBvaW50cyBpbiB0aGlzIHNlY3Rpb24gdGhhdCBjYW4gaGVscCB5b3UKKyAgICAgICAgICAgIG9wdGltaXplIHlvdXIgdHVuaW5ncyB0byBiZXN0IGNvbnNpZGVyIGJ1aWxkIHRpbWVzIGFuZCBwYWNrYWdlCisgICAgICAgICAgICBmZWVkIG1haW50ZW5hbmNlLgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNoYXJlIHRoZSBCdWlsZCBEaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgYXQgYWxsIHBvc3NpYmxlLCBzaGFyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgYWNyb3NzIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgc3dpdGNoaW5nIGJldHdlZW4gZGlmZmVyZW50CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGluIHRoZSBzYW1lIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBwcmFjdGljZSBpcyB3ZWxsIHN1cHBvcnRlZCBhbmQgcmVndWxhcmx5IHVzZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcGVycyB3aGVuIGJ1aWxkaW5nIGZvciBtdWx0aXBsZSBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoZSBzYW1lIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiBmb3IKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgbWFjaGluZSBidWlsZHMsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNhbgorICAgICAgICAgICAgICAgICAgICByZXVzZSB0aGUgZXhpc3RpbmcgbmF0aXZlIGFuZCBvZnRlbiBjcm9zcy1yZWNpcGVzIGZvcgorICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgYnVpbGQgdGltZSBkZWNyZWFzZXMuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncyBjaGFuZ2Ugb3IgZnVuZGFtZW50YWwgY29uZmlndXJhdGlvbiBzZXR0aW5ncworICAgICAgICAgICAgICAgICAgICAgICAgc3VjaCBhcyB0aGUgZmlsZXN5c3RlbSBsYXlvdXQsIHlvdSBuZWVkIHRvIHdvcmsgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgYSBjbGVhbiA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBTaGFyaW5nIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiB1bmRlciB0aGVzZQorICAgICAgICAgICAgICAgICAgICAgICAgY2lyY3Vtc3RhbmNlcyBtaWdodCB3b3JrIGJ1dCBzaW5jZSBpdCBpcyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGd1YXJhbnRlZWQsIHlvdSBzaG91bGQgdXNlIGEgY2xlYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVuYWJsZSB0aGUgQXBwcm9wcmlhdGUgUGFja2FnZSBBcmNoaXRlY3R1cmU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZW5hYmxlcyB0aHJlZQorICAgICAgICAgICAgICAgICAgICBsZXZlbHMgb2YgcGFja2FnZSBhcmNoaXRlY3R1cmVzOiAiYWxsIiwgInR1bmUiIG9yICJwYWNrYWdlIiwKKyAgICAgICAgICAgICAgICAgICAgYW5kICJtYWNoaW5lIi4KKyAgICAgICAgICAgICAgICAgICAgQW55IGdpdmVuIHJlY2lwZSB1c3VhbGx5IHNlbGVjdHMgb25lIG9mIHRoZXNlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcyAodHlwZXMpIGZvciBpdHMgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgZm9yIHdoYXQgYSBnaXZlbiByZWNpcGUgY3JlYXRlcyBwYWNrYWdlcywgbWFraW5nCisgICAgICAgICAgICAgICAgICAgIHN1cmUgeW91IGVuYWJsZSB0aGUgYXBwcm9wcmlhdGUgcGFja2FnZSBhcmNoaXRlY3R1cmUgY2FuCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGltcGFjdCB0aGUgYnVpbGQgdGltZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkEgcmVjaXBlIHRoYXQganVzdCBnZW5lcmF0ZXMgc2NyaXB0cyBjYW4gZW5hYmxlCisgICAgICAgICAgICAgICAgICAgICJhbGwiIGFyY2hpdGVjdHVyZSBiZWNhdXNlIHRoZXJlIGFyZSBubyBiaW5hcmllcyB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgVG8gc3BlY2lmaWNhbGx5IGVuYWJsZSAiYWxsIiBhcmNoaXRlY3R1cmUsIGJlIHN1cmUgeW91cgorICAgICAgICAgICAgICAgICAgICByZWNpcGUgaW5oZXJpdHMgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLWFsbGFyY2gnPjxmaWxlbmFtZT5hbGxhcmNoPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjbGFzcyBpcyB1c2VmdWwgZm9yICJhbGwiIGFyY2hpdGVjdHVyZXMgYmVjYXVzZSBpdAorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVzIG1hbnkgdmFyaWFibGVzIHNvIHBhY2thZ2VzIGNhbiBiZSB1c2VkIGFjcm9zcworICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91ciByZWNpcGUgbmVlZHMgdG8gZ2VuZXJhdGUgcGFja2FnZXMgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZS1zcGVjaWZpYyBvciB3aGVuIG9uZSBvZiB0aGUgYnVpbGQgb3IgcnVudGltZQorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgaXMgYWxyZWFkeSBtYWNoaW5lLWFyY2hpdGVjdHVyZSBkZXBlbmRlbnQsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIG1ha2VzIHlvdXIgcmVjaXBlIGFsc28gbWFjaGluZS1hcmNoaXRlY3R1cmUgZGVwZW5kZW50LAorICAgICAgICAgICAgICAgICAgICBtYWtlIHN1cmUgeW91ciByZWNpcGUgZW5hYmxlcyB0aGUgIm1hY2hpbmUiIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FX0FSQ0gnPjxmaWxlbmFtZT5NQUNISU5FX0FSQ0g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgZG8gbm90IHNwZWNpZmljYWxseSBlbmFibGUgYSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9BUkNIJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZGVmYXVsdHMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UVU5FX1BLR0FSQ0gnPjxmaWxlbmFtZT5UVU5FX1BLR0FSQ0g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHNldHRpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRV9BUkNIID0gIiR7VFVORV9QS0dBUkNIfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNob29zZSBhIEdlbmVyaWMgVHVuaW5nIEZpbGUgaWYgUG9zc2libGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU29tZSB0dW5lcyBhcmUgbW9yZSBnZW5lcmljIGFuZCBjYW4gcnVuIG9uIG11bHRpcGxlIHRhcmdldHMKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gYW4gPGZpbGVuYW1lPmFybXY1PC9maWxlbmFtZT4gc2V0IG9mIHBhY2thZ2VzIGNvdWxkCisgICAgICAgICAgICAgICAgICAgIHJ1biBvbiA8ZmlsZW5hbWU+YXJtdjY8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFybXY3PC9maWxlbmFtZT4gcHJvY2Vzc29ycyBpbiBtb3N0IGNhc2VzKS4KKyAgICAgICAgICAgICAgICAgICAgU2ltaWxhcmx5LCA8ZmlsZW5hbWU+aTQ4NjwvZmlsZW5hbWU+IGJpbmFyaWVzIGNvdWxkIHdvcmsKKyAgICAgICAgICAgICAgICAgICAgb24gPGZpbGVuYW1lPmk1ODY8L2ZpbGVuYW1lPiBhbmQgaGlnaGVyIHByb2Nlc3NvcnMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgcmVhbGl6ZSwgaG93ZXZlciwgdGhhdCBhZHZhbmNlcyBvbiBuZXdlcgorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3IgdmVyc2lvbnMgd291bGQgbm90IGJlIHVzZWQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3Ugc2VsZWN0IHRoZSBzYW1lIHR1bmUgZm9yIHNldmVyYWwgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSByZXVzZXMgc29mdHdhcmUKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNseSBidWlsdCwgdGh1cyBzcGVlZGluZyB1cCB0aGUgb3ZlcmFsbCBidWlsZCB0aW1lLgorICAgICAgICAgICAgICAgICAgICBSZWFsaXplIHRoYXQgZXZlbiB0aG91Z2ggYSBuZXcgc3lzcm9vdCBmb3IgZWFjaCBtYWNoaW5lIGlzCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZCwgdGhlIHNvZnR3YXJlIGlzIG5vdCByZWNvbXBpbGVkIGFuZCBvbmx5IG9uZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGZlZWQgZXhpc3RzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1hbmFnZSBHcmFudWxhciBMZXZlbCBQYWNrYWdpbmc6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU29tZXRpbWVzIGNhc2VzIGV4aXN0IHdoZXJlIGluamVjdGluZyBhbm90aGVyIGxldmVsCisgICAgICAgICAgICAgICAgICAgIG9mIHBhY2thZ2UgYXJjaGl0ZWN0dXJlIGJleW9uZCB0aGUgdGhyZWUgaGlnaGVyIGxldmVscworICAgICAgICAgICAgICAgICAgICBub3RlZCBlYXJsaWVyIGNhbiBiZSB1c2VmdWwuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgPGZpbGVuYW1lPmVtZ2Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBncmFwaGljcyBzdGFjayBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBsYXllciwgYSBzdWJzZXQgb2Ygc29mdHdhcmUgZXhpc3RzIHRoYXQgaXMKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZWQgYWdhaW5zdCBzb21ldGhpbmcgZGlmZmVyZW50IGZyb20gdGhlIHJlc3Qgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGdlbmVyaWMgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZXhhbWluZSB0aGUga2V5IGNvZGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpJz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgImRhaXN5IiBicmFuY2ggaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNsYXNzZXMvZW1nZC1nbC5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEZvciBhIHNwZWNpZmljIHNldCBvZiBwYWNrYWdlcywgdGhlIGNvZGUgcmVkZWZpbmVzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0FSQ0gnPjxmaWxlbmFtZT5QQUNLQUdFX0FSQ0g8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9FWFRSQV9BUkNIUyc+PGZpbGVuYW1lPlBBQ0tBR0VfRVhUUkFfQVJDSFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHRoZW4gYXBwZW5kZWQgd2l0aCB0aGlzIGV4dHJhIHR1bmUgbmFtZSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbC1lbWdkLmluYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0IGlzIHRoYXQgd2hlbiBzZWFyY2hpbmcgZm9yIHBhY2thZ2VzLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHVzZXMgYSBmb3VyLWxldmVsIHNlYXJjaCBhbmQgdGhlIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgbmV3IGxldmVsIGFyZSBwcmVmZXJyZWQgYXMgY29tcGFyZWQgdG8gdGhlIHN0YW5kYXJkCisgICAgICAgICAgICAgICAgICAgIHR1bmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBvdmVyYWxsIHJlc3VsdCBpcyB0aGF0IHRoZSBidWlsZCBzeXN0ZW0gcmV1c2VzIG1vc3QKKyAgICAgICAgICAgICAgICAgICAgc29mdHdhcmUgZnJvbSB0aGUgY29tbW9uIHR1bmUgZXhjZXB0IGZvciBzcGVjaWZpYyBjYXNlcworICAgICAgICAgICAgICAgICAgICBhcyBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlIFRvb2xzIHRvIERlYnVnIElzc3Vlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMgeW91IGNhbiBydW4gaW50byBzaXR1YXRpb25zIHdoZXJlIHNvZnR3YXJlIGlzCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIHJlYnVpbHQgd2hlbiB5b3UgdGhpbmsgaXQgc2hvdWxkIG5vdCBiZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIG1pZ2h0IG5vdCBiZQorICAgICAgICAgICAgICAgICAgICB1c2luZyBzaGFyZWQgc3RhdGUgYmV0d2VlbiBtYWNoaW5lcyB3aGVuIHlvdSB0aGluayBpdAorICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIHR5cGVzIG9mIHNpdHVhdGlvbnMgYXJlIHVzdWFsbHkgZHVlIHRvIHJlZmVyZW5jZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gbWFjaGluZS1zcGVjaWZpYyB2YXJpYWJsZXMgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU0VSSUFMX0NPTlNPTEUnPjxmaWxlbmFtZT5TRVJJQUxfQ09OU09MRTwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1YU0VSVkVSJz48ZmlsZW5hbWU+WFNFUlZFUjwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FX0ZFQVRVUkVTJz48ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCBpbiBjb2RlIHRoYXQgaXMgc3VwcG9zZWQgdG8gb25seSBiZQorICAgICAgICAgICAgICAgICAgICB0dW5lLXNwZWNpZmljIG9yIHdoZW4gdGhlIHJlY2lwZSBkZXBlbmRzCisgICAgICAgICAgICAgICAgICAgICg8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJTVUdHRVNUUyc+PGZpbGVuYW1lPlJTVUdHRVNUUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkgb24gc29tZSBvdGhlciByZWNpcGUgdGhhdCBhbHJlYWR5IGhhcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9BUkNIJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGFzICIke01BQ0hJTkVfQVJDSH0iLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhdGNoZXMgdG8gZml4IGFueSBpc3N1ZXMgaWRlbnRpZmllZCBhcmUgbW9zdCB3ZWxjb21lCisgICAgICAgICAgICAgICAgICAgICAgICBhcyB0aGVzZSBpc3N1ZXMgb2NjYXNpb25hbGx5IGRvIG9jY3VyLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Gb3Igc3VjaCBjYXNlcywgeW91IGNhbiB1c2Ugc29tZSB0b29scyB0byBoZWxwIHlvdQorICAgICAgICAgICAgICAgICAgICBzb3J0IG91dCB0aGUgc2l0dWF0aW9uOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c3N0YXRlLWRpZmYtbWFjaGluZXMuc2g8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGlzIHRvb2wgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIFJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIGNvbW1lbnRzIGluIHRoZSBzY3JpcHQgZm9yIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93IHRvIHVzZSB0aGUgdG9vbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Qml0QmFrZSdzICItUyBwcmludGRpZmYiIE9wdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoaXMgb3B0aW9uIGNhdXNlcyBCaXRCYWtlIHRvIHRyeSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdGFibGlzaCB0aGUgY2xvc2VzdCBzaWduYXR1cmUgbWF0Y2ggaXQgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gaW4gdGhlIHNoYXJlZCBzdGF0ZSBjYWNoZSkgYW5kIHRoZW4gcnVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UtZGlmZnNpZ3M8L2ZpbGVuYW1lPiBvdmVyIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgdG8gZGV0ZXJtaW5lIHRoZSBzdGFtcHMgYW5kIGRlbHRhIHdoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlc2UgdHdvIHN0YW1wIHRyZWVzIGRpdmVyZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3dvcmtpbmctd2l0aC1wYWNrYWdlcyc+CisgICAgICAgIDx0aXRsZT5Xb3JraW5nIHdpdGggUGFja2FnZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBhIGZldyB0YXNrcyB0aGF0IGludm9sdmUgcGFja2FnZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZXhjbHVkaW5nLXBhY2thZ2VzLWZyb20tYW4taW1hZ2UnPkV4Y2x1ZGluZyBwYWNrYWdlcyBmcm9tIGFuIGltYWdlPC9saW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2luY3JlbWVudGluZy1hLXBhY2thZ2UtcmV2aXNpb24tbnVtYmVyJz5JbmNyZW1lbnRpbmcgYSBwYWNrYWdlIHJldmlzaW9uIG51bWJlcjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdoYW5kbGluZy1vcHRpb25hbC1tb2R1bGUtcGFja2FnaW5nJz5IYW5kbGluZyBvcHRpb25hbCBtb2R1bGUgcGFja2FnaW5nPC9saW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3VzaW5nLXJ1bnRpbWUtcGFja2FnZS1tYW5hZ2VtZW50Jz5Vc2luZyBSdW50aW1lIFBhY2thZ2UgTWFuYWdlbWVudDwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd0ZXN0aW5nLXBhY2thZ2VzLXdpdGgtcHRlc3QnPlNldHRpbmcgdXAgYW5kIHJ1bm5pbmcgcGFja2FnZSB0ZXN0IChwdGVzdCk8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZXhjbHVkaW5nLXBhY2thZ2VzLWZyb20tYW4taW1hZ2UnPgorICAgICAgICAgICAgPHRpdGxlPkV4Y2x1ZGluZyBQYWNrYWdlcyBmcm9tIGFuIEltYWdlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IG1pZ2h0IGZpbmQgaXQgbmVjZXNzYXJ5IHRvIHByZXZlbnQgc3BlY2lmaWMgcGFja2FnZXMKKyAgICAgICAgICAgICAgICBmcm9tIGJlaW5nIGluc3RhbGxlZCBpbnRvIGFuIGltYWdlLgorICAgICAgICAgICAgICAgIElmIHNvLCB5b3UgY2FuIHVzZSBzZXZlcmFsIHZhcmlhYmxlcyB0byBkaXJlY3QgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgc3lzdGVtIHRvIGVzc2VudGlhbGx5IGlnbm9yZSBpbnN0YWxsaW5nIHJlY29tbWVuZGVkIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgb3IgdG8gbm90IGluc3RhbGwgYSBwYWNrYWdlIGF0IGFsbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGludHJvZHVjZXMgdmFyaWFibGVzIHlvdSBjYW4gdXNlIHRvCisgICAgICAgICAgICAgICAgcHJldmVudCBwYWNrYWdlcyBmcm9tIGJlaW5nIGluc3RhbGxlZCBpbnRvIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgRWFjaCBvZiB0aGVzZSB2YXJpYWJsZXMgb25seSB3b3JrcyB3aXRoIElQSyBhbmQgUlBNCisgICAgICAgICAgICAgICAgcGFja2FnZSB0eXBlcy4KKyAgICAgICAgICAgICAgICBTdXBwb3J0IGZvciBEZWJpYW4gcGFja2FnZXMgZG9lcyBub3QgZXhpc3QuCisgICAgICAgICAgICAgICAgQWxzbywgeW91IGNhbiB1c2UgdGhlc2UgdmFyaWFibGVzIGZyb20geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciBhdHRhY2ggdGhlbSB0byBhCisgICAgICAgICAgICAgICAgc3BlY2lmaWMgaW1hZ2UgcmVjaXBlIGJ5IHVzaW5nIGEgcmVjaXBlIG5hbWUgb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlsIG9uIHRoZSB2YXJpYWJsZXMsIHNlZSB0aGUgZGVzY3JpcHRpb25zIGluIHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCdzIGdsb3NzYXJ5IGNoYXB0ZXIuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQURfUkVDT01NRU5EQVRJT05TJz48ZmlsZW5hbWU+QkFEX1JFQ09NTUVOREFUSU9OUzwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyB2YXJpYWJsZSB0byBzcGVjaWZ5ICJyZWNvbW1lbmRlZC1vbmx5IgorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgdGhhdCB5b3UgZG8gbm90IHdhbnQgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTk9fUkVDT01NRU5EQVRJT05TJz48ZmlsZW5hbWU+Tk9fUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIHZhcmlhYmxlIHRvIHByZXZlbnQgYWxsICJyZWNvbW1lbmRlZC1vbmx5IgorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgZnJvbSBiZWluZyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0VYQ0xVREUnPjxmaWxlbmFtZT5QQUNLQUdFX0VYQ0xVREU8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgdmFyaWFibGUgdG8gcHJldmVudCBzcGVjaWZpYyBwYWNrYWdlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICBiZWluZyBpbnN0YWxsZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAicmVjb21tZW5kZWQtb25seSIgb3Igbm90LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gcmVhbGl6ZSB0aGF0IHRoZSBidWlsZCBwcm9jZXNzIGNvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsIHdpdGggYW4gZXJyb3Igd2hlbiB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnQgdGhlIGluc3RhbGxhdGlvbiBvZiBhIHBhY2thZ2Ugd2hvc2UgcHJlc2VuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJlcXVpcmVkIGJ5IGFuIGluc3RhbGxlZCBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW5jcmVtZW50aW5nLWEtcGFja2FnZS1yZXZpc2lvbi1udW1iZXInPgorICAgICAgICAgICAgPHRpdGxlPkluY3JlbWVudGluZyBhIFBhY2thZ2UgUmV2aXNpb24gTnVtYmVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgYSBjb21taXR0ZWQgY2hhbmdlIHJlc3VsdHMgaW4gY2hhbmdpbmcgdGhlIHBhY2thZ2Ugb3V0cHV0LAorICAgICAgICAgICAgICAgIHRoZW4gdGhlIHZhbHVlIG9mIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIG5lZWRzIHRvIGJlIGluY3JlYXNlZCAob3IgImJ1bXBlZCIpLgorICAgICAgICAgICAgICAgIEluY3JlYXNpbmcgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gb2NjdXJzIG9uZSBvZiB0d28gd2F5czoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QXV0b21hdGljYWxseSB1c2luZyBhIFBhY2thZ2UgUmV2aXNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2UgKFBSIFNlcnZpY2UpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TWFudWFsbHkgaW5jcmVtZW50aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEdpdmVuIHRoYXQgb25lIG9mIHRoZSBjaGFsbGVuZ2VzIGFueSBidWlsZCBzeXN0ZW0gYW5kIGl0cworICAgICAgICAgICAgICAgIHVzZXJzIGZhY2UgaXMgaG93IHRvIG1haW50YWluIGEgcGFja2FnZSBmZWVkIHRoYXQgaXMgY29tcGF0aWJsZQorICAgICAgICAgICAgICAgIHdpdGggZXhpc3RpbmcgcGFja2FnZSBtYW5hZ2VyIGFwcGxpY2F0aW9ucyBzdWNoIGFzCisgICAgICAgICAgICAgICAgUlBNLCBBUFQsIGFuZCBPUEtHLCB1c2luZyBhbiBhdXRvbWF0ZWQgc3lzdGVtIGlzIG11Y2gKKyAgICAgICAgICAgICAgICBwcmVmZXJyZWQgb3ZlciBhIG1hbnVhbCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgSW4gZWl0aGVyIHN5c3RlbSwgdGhlIG1haW4gcmVxdWlyZW1lbnQgaXMgdGhhdCB2ZXJzaW9uCisgICAgICAgICAgICAgICAgbnVtYmVyaW5nIGluY3JlYXNlcyBpbiBhIGxpbmVhciBmYXNoaW9uIGFuZCB0aGF0IGEgbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgdmVyc2lvbiBjb21wb25lbnRzIGV4aXN0IHRoYXQgc3VwcG9ydCB0aGF0IGxpbmVhciBwcm9ncmVzc2lvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyB0d28gc2VjdGlvbnMgcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiB0aGUgUFIgU2VydmljZQorICAgICAgICAgICAgICAgIGFuZCBvbiBtYW51YWwgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gYnVtcGluZy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3dvcmtpbmctd2l0aC1hLXByLXNlcnZpY2UnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Xb3JraW5nIFdpdGggYSBQUiBTZXJ2aWNlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQsIGF0dGVtcHRpbmcgdG8gbWFpbnRhaW4gcmV2aXNpb24gbnVtYmVycyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgZXJyb3IgcHJvbmUsIGluYWNjdXJhdGUsIGFuZCBjYXVzZXMgcHJvYmxlbXMgZm9yIHBlb3BsZQorICAgICAgICAgICAgICAgICAgICBzdWJtaXR0aW5nIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIENvbnZlcnNlbHksIHRoZSBQUiBTZXJ2aWNlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzCisgICAgICAgICAgICAgICAgICAgIGluY3JlYXNpbmcgbnVtYmVycywgcGFydGljdWxhcmx5IHRoZSByZXZpc2lvbiBmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggcmVtb3ZlcyB0aGUgaHVtYW4gZWxlbWVudC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB1c2luZyBhIFBSIFNlcnZpY2UsIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgY2FuIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9QUl9TZXJ2aWNlJz5QUiBTZXJ2aWNlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB1c2VzIHZhcmlhYmxlcyBpbiBvcmRlciBvZgorICAgICAgICAgICAgICAgICAgICBkZWNyZWFzaW5nIHByaW9yaXR5IHRvIGZhY2lsaXRhdGUgcmV2aXNpb24gbnVtYmVyaW5nIChpLmUuCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QRSc+PGZpbGVuYW1lPlBFPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBlcG9jaCwgdmVyc2lvbiwgYW5kIHJldmlzaW9uLCByZXNwZWN0aXZlbHkpLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWVzIGFyZSBoaWdobHkgZGVwZW5kZW50IG9uIHRoZSBwb2xpY2llcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgcHJvY2VkdXJlcyBvZiBhIGdpdmVuIGRpc3RyaWJ1dGlvbiBhbmQgcGFja2FnZSBmZWVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2NoZWNrc3Vtcyc+c2lnbmF0dXJlczwvdWxpbms+IiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggYXJlIHVuaXF1ZSB0byBhIGdpdmVuIGJ1aWxkLCB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIGtub3dzIHdoZW4gdG8gcmVidWlsZCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgQWxsIHRoZSBpbnB1dHMgaW50byBhIGdpdmVuIHRhc2sgYXJlIHJlcHJlc2VudGVkIGJ5IGEKKyAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLCB3aGljaCBjYW4gdHJpZ2dlciBhIHJlYnVpbGQgd2hlbiBkaWZmZXJlbnQuCisgICAgICAgICAgICAgICAgICAgIFRodXMsIHRoZSBidWlsZCBzeXN0ZW0gaXRzZWxmIGRvZXMgbm90IHJlbHkgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IG51bWJlcnMgdG8gdHJpZ2dlciBhIHJlYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzaWduYXR1cmVzLCBob3dldmVyLCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPiB2YWx1ZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBQUiBTZXJ2aWNlIHdvcmtzIHdpdGggYm90aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+T0VCYXNpYzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+T0VCYXNpY0hhc2g8L2ZpbGVuYW1lPiBnZW5lcmF0b3JzLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgb2YgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gYnVtcHMgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW0gY2hhbmdlcyBhbmQgdGhlIGRpZmZlcmVudCBnZW5lcmF0b3IgbWVjaGFuaXNtcworICAgICAgICAgICAgICAgICAgICBjaGFuZ2Ugc2lnbmF0dXJlcyB1bmRlciBkaWZmZXJlbnQgY2lyY3Vtc3RhbmNlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXMgaW1wbGVtZW50ZWQsIHRoZSBidWlsZCBzeXN0ZW0gaW5jbHVkZXMgdmFsdWVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgdGhlIFBSIFNlcnZpY2UgaW50byB0aGUgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gZmllbGQgYXMKKyAgICAgICAgICAgICAgICAgICAgYW4gYWRkaXRpb24gdXNpbmcgdGhlIGZvcm0gIjxmaWxlbmFtZT4ueDwvZmlsZW5hbWU+IiBzbworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cjA8L2ZpbGVuYW1lPiBiZWNvbWVzIDxmaWxlbmFtZT5yMC4xPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yMC4yPC9maWxlbmFtZT4gYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNjaGVtZSBhbGxvd3MgZXhpc3RpbmcgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIHRvIGJlIHVzZWQgZm9yIHdoYXRldmVyIHJlYXNvbnMsIHdoaWNoIGluY2x1ZGUgbWFudWFsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IGJ1bXBzLCBzaG91bGQgaXQgYmUgbmVjZXNzYXJ5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgUFIgU2VydmljZSBpcyBub3QgZW5hYmxlZCBvciBydW5uaW5nLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgcGFja2FnZXMgZ2VuZXJhdGVkIGFyZSBqdXN0ICJzZWxmIGNvbnNpc3RlbnQiLgorICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGFkZHMgYW5kIHJlbW92ZXMgcGFja2FnZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZXJlIGFyZSBubyBndWFyYW50ZWVzIGFib3V0IHVwZ3JhZGUgcGF0aHMgYnV0IGltYWdlcworICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIGNvbnNpc3RlbnQgYW5kIGNvcnJlY3Qgd2l0aCB0aGUgbGF0ZXN0IGNoYW5nZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzaW1wbGVzdCBmb3JtIGZvciBhIFBSIFNlcnZpY2UgaXMgZm9yIGl0IHRvIGV4aXN0CisgICAgICAgICAgICAgICAgICAgIGZvciBhIHNpbmdsZSBob3N0IGRldmVsb3BtZW50IHN5c3RlbSB0aGF0IGJ1aWxkcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBmZWVkIChidWlsZGluZyBzeXN0ZW0pLgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhpcyBzY2VuYXJpbywgeW91IGNhbiBlbmFibGUgYSBsb2NhbCBQUiBTZXJ2aWNlIGJ5CisgICAgICAgICAgICAgICAgICAgIHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSU0VSVl9IT1NUJz48ZmlsZW5hbWU+UFJTRVJWX0hPU1Q8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSU0VSVl9IT1NUID0gImxvY2FsaG9zdDowIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIHNlcnZpY2UgaXMgc3RhcnRlZCwgcGFja2FnZXMgd2lsbCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgICAgIGdldCBpbmNyZWFzaW5nIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IHZhbHVlcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB3aWxsIHRha2UgY2FyZSBvZiBzdGFydGluZyBhbmQgc3RvcHBpbmcgdGhlIHNlcnZlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgYSBtb3JlIGNvbXBsZXggc2V0dXAgd2hlcmUgbXVsdGlwbGUgaG9zdAorICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBzeXN0ZW1zIHdvcmsgYWdhaW5zdCBhIGNvbW1vbiwgc2hhcmVkIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgZmVlZCwgeW91IGhhdmUgYSBzaW5nbGUgUFIgU2VydmljZSBydW5uaW5nIGFuZCBpdCBpcworICAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWQgdG8gZWFjaCBidWlsZGluZyBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIEZvciB0aGlzIHNjZW5hcmlvLCB5b3UgbmVlZCB0byBzdGFydCB0aGUgUFIgU2VydmljZSB1c2luZworICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmJpdGJha2UtcHJzZXJ2PC9maWxlbmFtZT4gY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBiaXRiYWtlLXByc2VydiAtLWhvc3QgPHJlcGxhY2VhYmxlPmlwPC9yZXBsYWNlYWJsZT4gLS1wb3J0IDxyZXBsYWNlYWJsZT5wb3J0PC9yZXBsYWNlYWJsZT4gLS1zdGFydAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uIHRvIGhhbmQtc3RhcnRpbmcgdGhlIHNlcnZpY2UsIHlvdSBuZWVkIHRvCisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZSB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9mIGVhY2gKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgc3lzdGVtIGFzIGRlc2NyaWJlZCBlYXJsaWVyIHNvIGVhY2ggc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHBvaW50cyB0byB0aGUgc2VydmVyIGFuZCBwb3J0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHlvdSB1c2UgYnVpbGQgaGlzdG9yeSwgd2hpY2ggYWRkcworICAgICAgICAgICAgICAgICAgICBzb21lIHNhbml0eSBjaGVja3MgdG8gcGFja2FnZSB2ZXJzaW9ucywgaW4gY29uanVuY3Rpb24gd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgc2VydmVyIHRoYXQgaXMgcnVubmluZyB0aGUgUFIgU2VydmljZS4KKyAgICAgICAgICAgICAgICAgICAgVG8gZW5hYmxlIGJ1aWxkIGhpc3RvcnksIGFkZCB0aGUgZm9sbG93aW5nIHRvIGVhY2ggYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtJ3MgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgSXQgaXMgcmVjb21tZW5kZWQgdG8gYWN0aXZhdGUgImJ1aWxkaGlzdG9yeSIgZm9yIHRlc3RpbmcgdGhlIFBSIHNlcnZpY2UKKyAgICAgSU5IRVJJVCArPSAiYnVpbGRoaXN0b3J5IgorICAgICBCVUlMREhJU1RPUllfQ09NTUlUID0gIjEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGJ1aWxkIGhpc3RvcnksIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I21haW50YWluaW5nLWJ1aWxkLW91dHB1dC1xdWFsaXR5Jz5NYWludGFpbmluZyBCdWlsZCBPdXRwdXQgUXVhbGl0eTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRvZXMgbm90IG1haW50YWluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IGluZm9ybWF0aW9uIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHNoYXJlZCBzdGF0ZSAoc3N0YXRlKSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG1haW50YWluIGFuIHNzdGF0ZSBmZWVkLCBpdHMgZXhwZWN0ZWQgdGhhdCBlaXRoZXIKKyAgICAgICAgICAgICAgICAgICAgYWxsIHlvdXIgYnVpbGRpbmcgc3lzdGVtcyB0aGF0IGNvbnRyaWJ1dGUgdG8gdGhlIHNzdGF0ZQorICAgICAgICAgICAgICAgICAgICBmZWVkIHVzZSBhIHNoYXJlZCBQUiBTZXJ2aWNlLCBvciB5b3UgZG8gbm90IHJ1biBhIFBSCisgICAgICAgICAgICAgICAgICAgIFNlcnZpY2Ugb24gYW55IG9mIHlvdXIgYnVpbGRpbmcgc3lzdGVtcy4KKyAgICAgICAgICAgICAgICAgICAgSGF2aW5nIHNvbWUgc3lzdGVtcyB1c2UgYSBQUiBTZXJ2aWNlIHdoaWxlIG90aGVycyBkbworICAgICAgICAgICAgICAgICAgICBub3QgbGVhZHMgdG8gb2J2aW91cyBwcm9ibGVtcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHNoYXJlZCBzdGF0ZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc2hhcmVkLXN0YXRlLWNhY2hlJz5TaGFyZWQgU3RhdGUgQ2FjaGU8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdtYW51YWxseS1idW1waW5nLXByJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+TWFudWFsbHkgQnVtcGluZyBQUjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGFsdGVybmF0aXZlIHRvIHNldHRpbmcgdXAgYSBQUiBTZXJ2aWNlIGlzIHRvIG1hbnVhbGx5CisgICAgICAgICAgICAgICAgICAgIGJ1bXAgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgYSBjb21taXR0ZWQgY2hhbmdlIHJlc3VsdHMgaW4gY2hhbmdpbmcgdGhlIHBhY2thZ2Ugb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICB0aGVuIHRoZSB2YWx1ZSBvZiB0aGUgUFIgdmFyaWFibGUgbmVlZHMgdG8gYmUgaW5jcmVhc2VkCisgICAgICAgICAgICAgICAgICAgIChvciAiYnVtcGVkIikgYXMgcGFydCBvZiB0aGF0IGNvbW1pdC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG5ldyByZWNpcGVzIHlvdSBzaG91bGQgYWRkIHRoZSA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgc2V0IGl0cyBpbml0aWFsIHZhbHVlIGVxdWFsIHRvICJyMCIsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICBFdmVuIHRob3VnaCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAicjAiLCB0aGUgcHJhY3RpY2Ugb2YgYWRkaW5nIGl0IHRvIGEgbmV3IHJlY2lwZSBtYWtlcworICAgICAgICAgICAgICAgICAgICBpdCBoYXJkZXIgdG8gZm9yZ2V0IHRvIGJ1bXAgdGhlIHZhcmlhYmxlIHdoZW4geW91IG1ha2UgY2hhbmdlcworICAgICAgICAgICAgICAgICAgICB0byB0aGUgcmVjaXBlIGluIGZ1dHVyZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBzaGFyaW5nIGEgY29tbW9uIDxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4gZmlsZSB3aXRoIG11bHRpcGxlIHJlY2lwZXMsCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gYWxzbyB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU5DX1BSJz5JTkNfUFI8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGVuc3VyZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHRoZSByZWNpcGVzIHNoYXJpbmcgdGhlIDxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4gZmlsZSBhcmUgcmVidWlsdCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+IGZpbGUgaXRzZWxmIGlzIGNoYW5nZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+IGZpbGUgbXVzdCBzZXQgPGZpbGVuYW1lPklOQ19QUjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIChpbml0aWFsbHkgdG8gInIwIiksIGFuZCBhbGwgcmVjaXBlcyByZWZlcnJpbmcgdG8gaXQgc2hvdWxkIHNldCA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0byAiJChJTkNfUFIpLjAiIGluaXRpYWxseSwgaW5jcmVtZW50aW5nIHRoZSBsYXN0IG51bWJlciB3aGVuIHRoZSByZWNpcGUgaXMgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIDxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4gZmlsZSBpcyBjaGFuZ2VkIHRoZW4gaXRzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTkNfUFI8L2ZpbGVuYW1lPiBzaG91bGQgYmUgaW5jcmVtZW50ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdXBncmFkaW5nIHRoZSB2ZXJzaW9uIG9mIGEgcGFja2FnZSwgYXNzdW1pbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPlBWPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLCB0aGUgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gdmFyaWFibGUgc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgIHJlc2V0IHRvICJyMCIgKG9yICIkKElOQ19QUikuMCIgaWYgeW91IGFyZSB1c2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU5DX1BSPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc3VhbGx5LCB2ZXJzaW9uIGluY3JlYXNlcyBvY2N1ciBvbmx5IHRvIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiBmb3Igc29tZSByZWFzb24gPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gY2hhbmdlcyBidXQgZG9lcyBub3QKKyAgICAgICAgICAgICAgICAgICAgaW5jcmVhc2UsIHlvdSBjYW4gaW5jcmVhc2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEUnPlBFPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSAoUGFja2FnZSBFcG9jaCkuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBkZWZhdWx0cyB0byAiMCIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gbnVtYmVyaW5nIHN0cml2ZXMgdG8gZm9sbG93IHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmRlYmlhbi5vcmcvZG9jL2RlYmlhbi1wb2xpY3kvY2gtY29udHJvbGZpZWxkcy5odG1sJz4KKyAgICAgICAgICAgICAgICAgICAgRGViaWFuIFZlcnNpb24gRmllbGQgUG9saWN5IEd1aWRlbGluZXM8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgZ3VpZGVsaW5lcyBkZWZpbmUgaG93IHZlcnNpb25zIGFyZSBjb21wYXJlZCBhbmQgd2hhdCAiaW5jcmVhc2luZyIgYSB2ZXJzaW9uIG1lYW5zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdoYW5kbGluZy1vcHRpb25hbC1tb2R1bGUtcGFja2FnaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5IYW5kbGluZyBPcHRpb25hbCBNb2R1bGUgUGFja2FnaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTWFueSBwaWVjZXMgb2Ygc29mdHdhcmUgc3BsaXQgZnVuY3Rpb25hbGl0eSBpbnRvIG9wdGlvbmFsCisgICAgICAgICAgICAgICAgbW9kdWxlcyAob3IgcGx1Zy1pbnMpIGFuZCB0aGUgcGx1Zy1pbnMgdGhhdCBhcmUgYnVpbHQKKyAgICAgICAgICAgICAgICBtaWdodCBkZXBlbmQgb24gY29uZmlndXJhdGlvbiBvcHRpb25zLgorICAgICAgICAgICAgICAgIFRvIGF2b2lkIGhhdmluZyB0byBkdXBsaWNhdGUgdGhlIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lcyB3aGF0CisgICAgICAgICAgICAgICAgbW9kdWxlcyBhcmUgYXZhaWxhYmxlIGluIHlvdXIgcmVjaXBlIG9yIHRvIGF2b2lkIGhhdmluZworICAgICAgICAgICAgICAgIHRvIHBhY2thZ2UgZWFjaCBtb2R1bGUgYnkgaGFuZCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGhhbmRsZSBtb2R1bGUgcGFja2FnaW5nIGR5bmFtaWNhbGx5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBoYW5kbGUgb3B0aW9uYWwgbW9kdWxlIHBhY2thZ2luZywgeW91IG5lZWQgdG8gZG8gdHdvIHRoaW5nczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RW5zdXJlIHRoZSBtb2R1bGUgcGFja2FnaW5nIGlzIGFjdHVhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICBkb25lLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RW5zdXJlIHRoYXQgYW55IGRlcGVuZGVuY2llcyBvbiBvcHRpb25hbAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlcyBmcm9tIG90aGVyIHJlY2lwZXMgYXJlIHNhdGlzZmllZCBieSB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbWFraW5nLXN1cmUtdGhlLXBhY2thZ2luZy1pcy1kb25lJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+TWFraW5nIFN1cmUgdGhlIFBhY2thZ2luZyBpcyBEb25lPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBlbnN1cmUgdGhlIG1vZHVsZSBwYWNrYWdpbmcgYWN0dWFsbHkgZ2V0cyBkb25lLCB5b3UgdXNlCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZG9fc3BsaXRfcGFja2FnZXM8L2ZpbGVuYW1lPiBmdW5jdGlvbiB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5wb3B1bGF0ZV9wYWNrYWdlczwvZmlsZW5hbWU+IFB5dGhvbiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19zcGxpdF9wYWNrYWdlczwvZmlsZW5hbWU+IGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgIHNlYXJjaGVzIGZvciBhIHBhdHRlcm4gb2YgZmlsZXMgb3IgZGlyZWN0b3JpZXMgdW5kZXIgYQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgcGF0aCBhbmQgY3JlYXRlcyBhIHBhY2thZ2UgZm9yIGVhY2ggb25lIGl0IGZpbmRzCisgICAgICAgICAgICAgICAgICAgIGJ5IGFwcGVuZGluZyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMgZm9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU19wYWNrYWdlbmFtZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFNfcGFja2FnZW5hbWU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFU0NSSVBUSU9OX3BhY2thZ2VuYW1lPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlIDxmaWxlbmFtZT5saWdodHRwZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgICAgICBsaWdodHRwZF9saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9JykKKyAgICAgICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpZ2h0dHBkX2xpYmRpciwgJ15tb2RfKC4qKVwuc28kJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpZ2h0dHBkLW1vZHVsZS0lcycsICdMaWdodHRwZCBtb2R1bGUgZm9yICVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RlcGVuZHM9JycpCisgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgZXhhbXBsZSBzcGVjaWZpZXMgYSBudW1iZXIgb2YgdGhpbmdzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBjYWxsIHRvIDxmaWxlbmFtZT5kb19zcGxpdF9wYWNrYWdlczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgZGlyZWN0b3J5IHdpdGhpbiB0aGUgZmlsZXMgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgeW91ciByZWNpcGUgdGhyb3VnaCA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gd2hpY2ggdG8gc2VhcmNoLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgcmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gbWF0Y2ggbW9kdWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgaW4gdGhhdCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGV4YW1wbGUsIG5vdGUgdGhlIHBhcmVudGhlc2VzICgpIHRoYXQgbWFyaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwYXJ0IG9mIHRoZSBleHByZXNzaW9uIGZyb20gd2hpY2ggdGhlIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgc2hvdWxkIGJlIGRlcml2ZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSBwYXR0ZXJuIHRvIHVzZSBmb3IgdGhlIHBhY2thZ2UgbmFtZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSBkZXNjcmlwdGlvbiBmb3IgZWFjaCBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFuIGVtcHR5IHN0cmluZyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXh0cmFfZGVwZW5kczwvZmlsZW5hbWU+LCB3aGljaCBkaXNhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IGRlcGVuZGVuY3kgb24gdGhlIG1haW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlnaHR0cGQ8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRodXMsIGlmIGEgZmlsZSBpbiA8ZmlsZW5hbWU+JHtsaWJkaXJ9PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWQgPGZpbGVuYW1lPm1vZF9hbGlhcy5zbzwvZmlsZW5hbWU+IGlzIGZvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcGFja2FnZSBjYWxsZWQgPGZpbGVuYW1lPmxpZ2h0dHBkLW1vZHVsZS1hbGlhczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgY3JlYXRlZCBmb3IgaXQgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ERVNDUklQVElPTic+PGZpbGVuYW1lPkRFU0NSSVBUSU9OPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byAiTGlnaHR0cGQgbW9kdWxlIGZvciBhbGlhcyIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBPZnRlbiwgcGFja2FnaW5nIG1vZHVsZXMgaXMgYXMgc2ltcGxlIGFzIHRoZSBwcmV2aW91cworICAgICAgICAgICAgICAgICAgICBleGFtcGxlLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBtb3JlIGFkdmFuY2VkIG9wdGlvbnMgZXhpc3QgdGhhdCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gPGZpbGVuYW1lPmRvX3NwbGl0X3BhY2thZ2VzPC9maWxlbmFtZT4gdG8gbW9kaWZ5IGl0cworICAgICAgICAgICAgICAgICAgICBiZWhhdmlvci4KKyAgICAgICAgICAgICAgICAgICAgQW5kLCBpZiB5b3UgbmVlZCB0bywgeW91IGNhbiBhZGQgbW9yZSBsb2dpYyBieSBzcGVjaWZ5aW5nCisgICAgICAgICAgICAgICAgICAgIGEgaG9vayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBmb3IgZWFjaCBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBhbHNvIHBlcmZlY3RseSBhY2NlcHRhYmxlIHRvIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3NwbGl0X3BhY2thZ2VzPC9maWxlbmFtZT4gbXVsdGlwbGUgdGltZXMgaWYKKyAgICAgICAgICAgICAgICAgICAgeW91IGhhdmUgbW9yZSB0aGFuIG9uZSBzZXQgb2YgbW9kdWxlcyB0byBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBleGFtcGxlcyB0aGF0IHNob3cgaG93IHRvIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fc3BsaXRfcGFja2FnZXM8L2ZpbGVuYW1lPiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29ubm1hbi5pbmM8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBvZiB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd5b2N0by1wcm9qZWN0LXJlcG9zaXRvcmllcyc+c291cmNlIHJlcG9zaXRvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZmluZCBleGFtcGxlcyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2tlcm5lbC5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhIHJlZmVyZW5jZSB0aGF0IHNob3dzCisgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fc3BsaXRfcGFja2FnZXM8L2ZpbGVuYW1lPiBtYW5kYXRvcnkgYW5kCisgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1hbmRhdG9yeSBhcmd1bWVudHMKKworICAgICByb290CisgICAgICAgIFRoZSBwYXRoIGluIHdoaWNoIHRvIHNlYXJjaAorICAgICBmaWxlX3JlZ2V4CisgICAgICAgIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBzZWFyY2hlZCBmaWxlcy4KKyAgICAgICAgVXNlIHBhcmVudGhlc2VzICgpIHRvIG1hcmsgdGhlIHBhcnQgb2YgdGhpcworICAgICAgICBleHByZXNzaW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gZGVyaXZlIHRoZQorICAgICAgICBtb2R1bGUgbmFtZSAodG8gYmUgc3Vic3RpdHV0ZWQgd2hlcmUgJXMgaXMKKyAgICAgICAgdXNlZCBpbiBvdGhlciBmdW5jdGlvbiBhcmd1bWVudHMgYXMgbm90ZWQgYmVsb3cpCisgICAgIG91dHB1dF9wYXR0ZXJuCisgICAgICAgIFBhdHRlcm4gdG8gdXNlIGZvciB0aGUgcGFja2FnZSBuYW1lcy4gTXVzdAorICAgICAgICBpbmNsdWRlICVzLgorICAgICBkZXNjcmlwdGlvbgorICAgICAgICBEZXNjcmlwdGlvbiB0byBzZXQgZm9yIGVhY2ggcGFja2FnZS4gTXVzdAorICAgICAgICBpbmNsdWRlICVzLgorCisgICAgIE9wdGlvbmFsIGFyZ3VtZW50cworCisgICAgIHBvc3RpbnN0CisgICAgICAgIFBvc3RpbnN0YWxsIHNjcmlwdCB0byB1c2UgZm9yIGFsbCBwYWNrYWdlcworICAgICAgICAoYXMgYSBzdHJpbmcpCisgICAgIHJlY3Vyc2l2ZQorICAgICAgICBUcnVlIHRvIHBlcmZvcm0gYSByZWN1cnNpdmUgc2VhcmNoIC0gZGVmYXVsdAorICAgICAgICBGYWxzZQorICAgICBob29rCisgICAgICAgIEEgaG9vayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIGV2ZXJ5IG1hdGNoLgorICAgICAgICBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nCisgICAgICAgIGFyZ3VtZW50cyAoaW4gdGhlIG9yZGVyIGxpc3RlZCk6CisKKyAgICAgICAgZgorICAgICAgICAgICBGdWxsIHBhdGggdG8gdGhlIGZpbGUvZGlyZWN0b3J5IG1hdGNoCisgICAgICAgIHBrZworICAgICAgICAgICBUaGUgcGFja2FnZSBuYW1lCisgICAgICAgIGZpbGVfcmVnZXgKKyAgICAgICAgICAgQXMgYWJvdmUKKyAgICAgICAgb3V0cHV0X3BhdHRlcm4KKyAgICAgICAgICAgQXMgYWJvdmUKKyAgICAgICAgbW9kdWxlbmFtZQorICAgICAgICAgICBUaGUgbW9kdWxlIG5hbWUgZGVyaXZlZCB1c2luZyBmaWxlX3JlZ2V4CisKKyAgICAgZXh0cmFfZGVwZW5kcworICAgICAgICBFeHRyYSBydW50aW1lIGRlcGVuZGVuY2llcyAoUkRFUEVORFMpIHRvIGJlCisgICAgICAgIHNldCBmb3IgYWxsIHBhY2thZ2VzLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBOb25lCisgICAgICAgIGNhdXNlcyBhIGRlcGVuZGVuY3kgb24gdGhlIG1haW4gcGFja2FnZQorICAgICAgICAoJHtQTn0pIC0gaWYgeW91IGRvIG5vdCB3YW50IHRoaXMsIHBhc3MgZW1wdHkKKyAgICAgICAgc3RyaW5nICcnIGZvciB0aGlzIHBhcmFtZXRlci4KKyAgICAgYXV4X2ZpbGVzX3BhdHRlcm4KKyAgICAgICAgRXh0cmEgaXRlbShzKSB0byBiZSBhZGRlZCB0byBGSUxFUyBmb3IgZWFjaAorICAgICAgICBwYWNrYWdlLiBDYW4gYmUgYSBzaW5nbGUgc3RyaW5nIGl0ZW0gb3IgYSBsaXN0CisgICAgICAgIG9mIHN0cmluZ3MgZm9yIG11bHRpcGxlIGl0ZW1zLiBNdXN0IGluY2x1ZGUgJXMuCisgICAgIHBvc3RybQorICAgICAgICBwb3N0cm0gc2NyaXB0IHRvIHVzZSBmb3IgYWxsIHBhY2thZ2VzIChhcyBhCisgICAgICAgIHN0cmluZykKKyAgICAgYWxsb3dfZGlycworICAgICAgICBUcnVlIHRvIGFsbG93IGRpcmVjdG9yaWVzIHRvIGJlIG1hdGNoZWQgLQorICAgICAgICBkZWZhdWx0IEZhbHNlCisgICAgIHByZXBlbmQKKyAgICAgICAgSWYgVHJ1ZSwgcHJlcGVuZCBjcmVhdGVkIHBhY2thZ2VzIHRvIFBBQ0tBR0VTCisgICAgICAgIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgRmFsc2Ugd2hpY2ggYXBwZW5kcyB0aGVtCisgICAgIG1hdGNoX3BhdGgKKyAgICAgICAgbWF0Y2ggZmlsZV9yZWdleCBvbiB0aGUgd2hvbGUgcmVsYXRpdmUgcGF0aCB0bworICAgICAgICB0aGUgcm9vdCByYXRoZXIgdGhhbiBqdXN0IHRoZSBmaWxlIG5hbWUKKyAgICAgYXV4X2ZpbGVzX3BhdHRlcm5fdmVyYmF0aW0KKyAgICAgICAgRXh0cmEgaXRlbShzKSB0byBiZSBhZGRlZCB0byBGSUxFUyBmb3IgZWFjaAorICAgICAgICBwYWNrYWdlLCB1c2luZyB0aGUgYWN0dWFsIGRlcml2ZWQgbW9kdWxlIG5hbWUKKyAgICAgICAgcmF0aGVyIHRoYW4gY29udmVydGluZyBpdCB0byBzb21ldGhpbmcgbGVnYWwKKyAgICAgICAgZm9yIGEgcGFja2FnZSBuYW1lLiBDYW4gYmUgYSBzaW5nbGUgc3RyaW5nIGl0ZW0KKyAgICAgICAgb3IgYSBsaXN0IG9mIHN0cmluZ3MgZm9yIG11bHRpcGxlIGl0ZW1zLiBNdXN0CisgICAgICAgIGluY2x1ZGUgJXMuCisgICAgIGFsbG93X2xpbmtzCisgICAgICAgIFRydWUgdG8gYWxsb3cgc3ltbGlua3MgdG8gYmUgbWF0Y2hlZCAtIGRlZmF1bHQKKyAgICAgICAgRmFsc2UKKyAgICAgc3VtbWFyeQorICAgICAgICBTdW1tYXJ5IHRvIHNldCBmb3IgZWFjaCBwYWNrYWdlLiBNdXN0IGluY2x1ZGUgJXM7CisgICAgICAgIGRlZmF1bHRzIHRvIGRlc2NyaXB0aW9uIGlmIG5vdCBzZXQuCisgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3NhdGlzZnlpbmctZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+U2F0aXNmeWluZyBEZXBlbmRlbmNpZXM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWNvbmQgcGFydCBmb3IgaGFuZGxpbmcgb3B0aW9uYWwgbW9kdWxlIHBhY2thZ2luZworICAgICAgICAgICAgICAgICAgICBpcyB0byBlbnN1cmUgdGhhdCBhbnkgZGVwZW5kZW5jaWVzIG9uIG9wdGlvbmFsIG1vZHVsZXMKKyAgICAgICAgICAgICAgICAgICAgZnJvbSBvdGhlciByZWNpcGVzIGFyZSBzYXRpc2ZpZWQgYnkgeW91ciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYmUgc3VyZSB0aGVzZSBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZCBieQorICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VTX0RZTkFNSUMnPjxmaWxlbmFtZT5QQUNLQUdFU19EWU5BTUlDPC9maWxlbmFtZT48L3VsaW5rPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgY29udGludWVzIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWdodHRwZDwvZmlsZW5hbWU+IHJlY2lwZSBzaG93biBlYXJsaWVyOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VTX0RZTkFNSUMgPSAibGlnaHR0cGQtbW9kdWxlLS4qIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIHNwZWNpZmllZCBpbiB0aGUgcmVndWxhciBleHByZXNzaW9uIGNhbiBvZgorICAgICAgICAgICAgICAgICAgICBjb3Vyc2UgYmUgYW55dGhpbmcuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgaXQgaXMgPGZpbGVuYW1lPmxpZ2h0dHBkLW1vZHVsZS08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgaXMgc3BlY2lmaWVkIGFzIHRoZSBwcmVmaXggdG8gZW5zdXJlIHRoYXQgYW55CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIG9uIGEgcGFja2FnZSBuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIHByZWZpeCBhcmUgc2F0aXNmaWVkCisgICAgICAgICAgICAgICAgICAgIGR1cmluZyBidWlsZCB0aW1lLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIDxmaWxlbmFtZT5kb19zcGxpdF9wYWNrYWdlczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFzIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgdGhlIHZhbHVlIHlvdSBwdXQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VTX0RZTkFNSUM8L2ZpbGVuYW1lPiBzaG91bGQgY29ycmVzcG9uZCB0bworICAgICAgICAgICAgICAgICAgICB0aGUgbmFtZSBwYXR0ZXJuIHNwZWNpZmllZCBpbiB0aGUgY2FsbCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fc3BsaXRfcGFja2FnZXM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctcnVudGltZS1wYWNrYWdlLW1hbmFnZW1lbnQnPgorICAgICAgICAgICAgPHRpdGxlPlVzaW5nIFJ1bnRpbWUgUGFja2FnZSBNYW5hZ2VtZW50PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRHVyaW5nIGEgYnVpbGQsIEJpdEJha2UgYWx3YXlzIHRyYW5zZm9ybXMgYSByZWNpcGUgaW50byBvbmUgb3IKKyAgICAgICAgICAgICAgICBtb3JlIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBCaXRCYWtlIHRha2VzIHRoZSA8ZmlsZW5hbWU+YmFzaDwvZmlsZW5hbWU+IHJlY2lwZQorICAgICAgICAgICAgICAgIGFuZCBjdXJyZW50bHkgcHJvZHVjZXMgdGhlIDxmaWxlbmFtZT5iYXNoLWRiZzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNoLXN0YXRpY2RldjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNoLWRldjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YmFzaC1kb2M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzaC1sb2NhbGU8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2g8L2ZpbGVuYW1lPiBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICBOb3QgYWxsIGdlbmVyYXRlZCBwYWNrYWdlcyBhcmUgaW5jbHVkZWQgaW4gYW4gaW1hZ2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHNldmVyYWwgc2l0dWF0aW9ucywgeW91IG1pZ2h0IG5lZWQgdG8gdXBkYXRlLCBhZGQsIHJlbW92ZSwKKyAgICAgICAgICAgICAgICBvciBxdWVyeSB0aGUgcGFja2FnZXMgb24gYSB0YXJnZXQgZGV2aWNlIGF0IHJ1bnRpbWUKKyAgICAgICAgICAgICAgICAoaS5lLiB3aXRob3V0IGhhdmluZyB0byBnZW5lcmF0ZSBhIG5ldyBpbWFnZSkuCisgICAgICAgICAgICAgICAgRXhhbXBsZXMgb2Ygc3VjaCBzaXR1YXRpb25zIGluY2x1ZGU6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHdhbnQgdG8gcHJvdmlkZSBpbi10aGUtZmllbGQgdXBkYXRlcyB0byBkZXBsb3llZAorICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlcyAoZS5nLiBzZWN1cml0eSB1cGRhdGVzKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugd2FudCB0byBoYXZlIGEgZmFzdCB0dXJuLWFyb3VuZCBkZXZlbG9wbWVudCBjeWNsZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG9uZSBvciBtb3JlIGFwcGxpY2F0aW9ucyB0aGF0IHJ1biBvbiB5b3VyIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugd2FudCB0byB0ZW1wb3JhcmlseSBpbnN0YWxsIHRoZSAiZGVidWciIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICBvZiB2YXJpb3VzIGFwcGxpY2F0aW9ucyBvbiB5b3VyIGRldmljZSBzbyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z2dpbmcgY2FuIGJlIGdyZWF0bHkgaW1wcm92ZWQgYnkgYWxsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VzcyB0byBzeW1ib2xzIGFuZCBzb3VyY2UgZGVidWdnaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSB3YW50IHRvIGRlcGxveSBhIG1vcmUgbWluaW1hbCBwYWNrYWdlIHNlbGVjdGlvbiBvZgorICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBkZXZpY2UgYnV0IGFsbG93IGluLXRoZS1maWVsZCB1cGRhdGVzIHRvIGFkZCBhCisgICAgICAgICAgICAgICAgICAgICAgICBsYXJnZXIgc2VsZWN0aW9uIGZvciBjdXN0b21pemF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIGFsbCB0aGVzZSBzaXR1YXRpb25zLCB5b3UgaGF2ZSBzb21ldGhpbmcgc2ltaWxhciB0byBhIG1vcmUKKyAgICAgICAgICAgICAgICB0cmFkaXRpb25hbCBMaW51eCBkaXN0cmlidXRpb24gaW4gdGhhdCBpbi1maWVsZCBkZXZpY2VzCisgICAgICAgICAgICAgICAgYXJlIGFibGUgdG8gcmVjZWl2ZSBwcmUtY29tcGlsZWQgcGFja2FnZXMgZnJvbSBhIHNlcnZlciBmb3IKKyAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gb3IgdXBkYXRlLgorICAgICAgICAgICAgICAgIEJlaW5nIGFibGUgdG8gaW5zdGFsbCB0aGVzZSBwYWNrYWdlcyBvbiBhIHJ1bm5pbmcsCisgICAgICAgICAgICAgICAgaW4tZmllbGQgZGV2aWNlIGlzIHdoYXQgaXMgdGVybWVkICJydW50aW1lIHBhY2thZ2UKKyAgICAgICAgICAgICAgICBtYW5hZ2VtZW50Ii4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHJ1bnRpbWUgcGFja2FnZSBtYW5hZ2VtZW50LCB5b3UKKyAgICAgICAgICAgICAgICBuZWVkIGEgaG9zdC9zZXJ2ZXIgbWFjaGluZSB0aGF0IHNlcnZlcyB1cCB0aGUgcHJlLWNvbXBpbGVkCisgICAgICAgICAgICAgICAgcGFja2FnZXMgcGx1cyB0aGUgcmVxdWlyZWQgbWV0YWRhdGEuCisgICAgICAgICAgICAgICAgWW91IGFsc28gbmVlZCBwYWNrYWdlIG1hbmlwdWxhdGlvbiB0b29scyBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBtYWNoaW5lIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSB0byBhY3QgYXMgdGhlIHNlcnZlci4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGF0IG1hY2hpbmUgZG9lcyBub3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBiZSB0aGUKKyAgICAgICAgICAgICAgICBwYWNrYWdlIHNlcnZlci4KKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgbWFjaGluZSBjb3VsZCBwdXNoIGl0cyBhcnRpZmFjdHMgdG8gYW5vdGhlciBtYWNoaW5lCisgICAgICAgICAgICAgICAgdGhhdCBhY3RzIGFzIHRoZSBzZXJ2ZXIgKGUuZy4gSW50ZXJuZXQtZmFjaW5nKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBzaW1wbGUgYnVpbGQgdGhhdCB0YXJnZXRzIGp1c3Qgb25lIGRldmljZSBwcm9kdWNlcworICAgICAgICAgICAgICAgIG1vcmUgdGhhbiBvbmUgcGFja2FnZSBkYXRhYmFzZS4KKyAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIHBhY2thZ2VzIHByb2R1Y2VkIGJ5IGEgYnVpbGQgYXJlIHNlcGFyYXRlZAorICAgICAgICAgICAgICAgIG91dCBpbnRvIGEgY291cGxlIG9mIGRpZmZlcmVudCBwYWNrYWdlIGdyb3VwaW5ncyBiYXNlZCBvbgorICAgICAgICAgICAgICAgIGNyaXRlcmlhIHN1Y2ggYXMgdGhlIHRhcmdldCdzIENQVSBhcmNoaXRlY3R1cmUsIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICBib2FyZCwgb3IgdGhlIEMgbGlicmFyeSB1c2VkIG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgYnVpbGQgdGFyZ2V0aW5nIHRoZSA8ZmlsZW5hbWU+cWVtdWFybTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGV2aWNlIHByb2R1Y2VzIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFja2FnZSBkYXRhYmFzZXM6CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFsbDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YXJtdjV0ZTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdWFybTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50ZWQgeW91ciA8ZmlsZW5hbWU+cWVtdWFybTwvZmlsZW5hbWU+IGRldmljZSB0byBiZQorICAgICAgICAgICAgICAgIGF3YXJlIG9mIGFsbCB0aGUgcGFja2FnZXMgdGhhdCB3ZXJlIGF2YWlsYWJsZSB0byBpdCwKKyAgICAgICAgICAgICAgICB5b3Ugd291bGQgbmVlZCB0byBwb2ludCBpdCB0byBlYWNoIG9mIHRoZXNlIGRhdGFiYXNlcworICAgICAgICAgICAgICAgIGluZGl2aWR1YWxseS4KKyAgICAgICAgICAgICAgICBJbiBhIHNpbWlsYXIgd2F5LCBhIHRyYWRpdGlvbmFsIExpbnV4IGRpc3RyaWJ1dGlvbiB1c3VhbGx5IGlzCisgICAgICAgICAgICAgICAgY29uZmlndXJlZCB0byBiZSBhd2FyZSBvZiBhIG51bWJlciBvZiBzb2Z0d2FyZSByZXBvc2l0b3JpZXMKKyAgICAgICAgICAgICAgICBmcm9tIHdoaWNoIGl0IHJldHJpZXZlcyBwYWNrYWdlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNpbmcgcnVudGltZSBwYWNrYWdlIG1hbmFnZW1lbnQgaXMgY29tcGxldGVseSBvcHRpb25hbCBhbmQKKyAgICAgICAgICAgICAgICBub3QgcmVxdWlyZWQgZm9yIGEgc3VjY2Vzc2Z1bCBidWlsZCBvciBkZXBsb3ltZW50IGluIGFueQorICAgICAgICAgICAgICAgIHdheS4KKyAgICAgICAgICAgICAgICBCdXQgaWYgeW91IHdhbnQgdG8gbWFrZSB1c2Ugb2YgcnVudGltZSBwYWNrYWdlIG1hbmFnZW1lbnQsCisgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gZG8gYSBjb3VwbGUgdGhpbmdzIGFib3ZlIGFuZCBiZXlvbmQgdGhlIGJhc2ljcy4KKyAgICAgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBkZXNjcmliZXMgd2hhdCB5b3UgbmVlZCB0byBkby4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3J1bnRpbWUtcGFja2FnZS1tYW5hZ2VtZW50LWJ1aWxkJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+QnVpbGQgQ29uc2lkZXJhdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgYnVpbGQgY29uc2lkZXJhdGlvbnMgdGhhdCB5b3UgbmVlZAorICAgICAgICAgICAgICAgICAgICB0byBiZSBhd2FyZSBvZiBpbiBvcmRlciB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHJ1bnRpbWUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBtYW5hZ2VtZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIEJpdEJha2UgZ2VuZXJhdGVzIHBhY2thZ2VzIGl0IG5lZWRzIHRvIGtub3cKKyAgICAgICAgICAgICAgICAgICAgd2hhdCBmb3JtYXQgb3IgZm9ybWF0cyB0byB1c2UuCisgICAgICAgICAgICAgICAgICAgIEluIHlvdXIgY29uZmlndXJhdGlvbiwgeW91IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gc3BlY2lmeSB0aGUgZm9ybWF0LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2hvb3NlIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBmb3JtYXQgYnV0IHlvdSBtdXN0CisgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlIGF0IGxlYXN0IG9uZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd291bGQgbGlrZSB5b3VyIGltYWdlIHRvIHN0YXJ0IG9mZiB3aXRoIGEgYmFzaWMKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBkYXRhYmFzZSBvZiB0aGUgcGFja2FnZXMgaW4geW91ciBjdXJyZW50IGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgaGF2ZSB0aGUgcmVsZXZhbnQgdG9vbHMgYXZhaWxhYmxlIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgZm9yIHJ1bnRpbWUgcGFja2FnZSBtYW5hZ2VtZW50LCB5b3UgY2FuIGluY2x1ZGUKKyAgICAgICAgICAgICAgICAgICAgInBhY2thZ2UtbWFuYWdlbWVudCIgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSW5jbHVkaW5nICJwYWNrYWdlLW1hbmFnZW1lbnQiIGluIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBlbnN1cmVzIHRoYXQgd2hlbiB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgaXMgYXNzZW1ibGVkIGZvciB5b3VyIHRhcmdldCwgdGhlIGltYWdlIGluY2x1ZGVzCisgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50bHkta25vd24gcGFja2FnZSBkYXRhYmFzZXMgYXMgd2VsbCBhcworICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0LXNwZWNpZmljIHRvb2xzIHJlcXVpcmVkIGZvciBydW50aW1lCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlbWVudCB0byBiZSBwZXJmb3JtZWQgb24gdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LgorICAgICAgICAgICAgICAgICAgICBZb3UgY291bGQgc3RhcnQgeW91ciBpbWFnZSBvZmYgd2l0aG91dCBhbnkgZGF0YWJhc2VzCisgICAgICAgICAgICAgICAgICAgIGJ1dCBvbmx5IGluY2x1ZGUgdGhlIHJlcXVpcmVkIG9uLXRhcmdldCBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIHRvb2wocykuCisgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHlvdSBjb3VsZCBpbmNsdWRlICJvcGtnIiBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaWYgeW91IGFyZSB1c2luZyB0aGUgSVBLIHBhY2thZ2UgZm9ybWF0LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHRoZW4gaW5pdGlhbGl6ZSB5b3VyIHRhcmdldCdzIHBhY2thZ2UgZGF0YWJhc2UocykKKyAgICAgICAgICAgICAgICAgICAgbGF0ZXIgb25jZSB5b3VyIGltYWdlIGlzIHVwIGFuZCBydW5uaW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuZXZlciB5b3UgcGVyZm9ybSBhbnkgc29ydCBvZiBidWlsZCBzdGVwIHRoYXQgY2FuCisgICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbGx5IGdlbmVyYXRlIGEgcGFja2FnZSBvciBtb2RpZnkgYW4gZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwgaXQgaXMgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHJlLWdlbmVyYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGluZGV4IHdpdGg6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAkIGJpdGJha2UgcGFja2FnZS1pbmRleAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFJlYWxpemUgdGhhdCBpdCBpcyBub3Qgc3VmZmljaWVudCB0byBzaW1wbHkgZG8gdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICQgYml0YmFrZSA8cmVwbGFjZWFibGU+c29tZS1wYWNrYWdlPC9yZXBsYWNlYWJsZT4gcGFja2FnZS1pbmRleAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYmVjYXVzZSBCaXRCYWtlIGRvZXMgbm90IHByb3Blcmx5IHNjaGVkdWxlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZS1pbmRleDwvZmlsZW5hbWU+IHRhcmdldCBmdWxseSBhZnRlciBhbnkKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGFyZ2V0IGhhcyBjb21wbGV0ZWQuCisgICAgICAgICAgICAgICAgICAgIFRodXMsIGJlIHN1cmUgdG8gcnVuIHRoZSBwYWNrYWdlIHVwZGF0ZSBzdGVwIHNlcGFyYXRlbHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzIGRlc2NyaWJlZCBiZWxvdyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3J1bnRpbWUtcGFja2FnZS1tYW5hZ2VtZW50LXRhcmdldC1pcGsnPlVzaW5nIElQSzwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24sIGlmIHlvdSBhcmUgdXNpbmcgSVBLIGFzIHlvdXIgcGFja2FnZSBmb3JtYXQsIHlvdQorICAgICAgICAgICAgICAgICAgICBjYW4gbWFrZSB1c2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXN0cm8tZmVlZC1jb25maWdzPC9maWxlbmFtZT4gcmVjaXBlIHByb3ZpZGVkCisgICAgICAgICAgICAgICAgICAgIGJ5IDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gaW4gb3JkZXIgdG8gY29uZmlndXJlIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IHRvIHVzZSB5b3VyIElQSyBkYXRhYmFzZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91ciBidWlsZCBpcyBjb21wbGV0ZSwgeW91ciBwYWNrYWdlcyByZXNpZGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1RNUERJUn0vZGVwbG95LzxyZXBsYWNlYWJsZT5wYWNrYWdlLWZvcm1hdDwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgPGZpbGVuYW1lPiR7VE1QRElSfTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIDxmaWxlbmFtZT50bXA8L2ZpbGVuYW1lPiBhbmQgeW91ciBzZWxlY3RlZCBwYWNrYWdlIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgaXMgSVBLLCB0aGVuIHlvdXIgSVBLIHBhY2thZ2VzIGFyZSBhdmFpbGFibGUgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9kZXBsb3kvaXBrPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncnVudGltZS1wYWNrYWdlLW1hbmFnZW1lbnQtc2VydmVyJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+SG9zdCBvciBTZXJ2ZXIgTWFjaGluZSBTZXR1cDwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCBwYWNrYWdlcyBhcmUgc2VydmVkIGZyb20gYSBzZXJ2ZXIgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgSFRUUC4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgb3RoZXIgcHJvdG9jb2xzIGFyZSBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gdXNlIEhUVFAsIHRoZW4gc2V0dXAgYW5kIGNvbmZpZ3VyZSBhCisgICAgICAgICAgICAgICAgICAgIHdlYiBzZXJ2ZXIsIHN1Y2ggYXMgQXBhY2hlIDIgb3IgbGlnaHR0cGQsIG9uIHRoZSBtYWNoaW5lCisgICAgICAgICAgICAgICAgICAgIHNlcnZpbmcgdGhlIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcyBwcmV2aW91c2x5IG1lbnRpb25lZCwgdGhlIGJ1aWxkIG1hY2hpbmUgY2FuIGFjdCBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgdGhhdCBkZXNjcmliZSBzZXJ2ZXIgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICBzZXR1cHMsIHRoZSBidWlsZCBtYWNoaW5lIGlzIGFzc3VtZWQgdG8gYWxzbyBiZSB0aGUgc2VydmVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdwYWNrYWdlLXNlcnZlci1hcGFjaGUnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+U2VydmluZyBQYWNrYWdlcyB2aWEgQXBhY2hlIDI8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGFzc3VtZXMgeW91IGFyZSB1c2luZyB0aGUgQXBhY2hlIDIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCB0aGUgZGlyZWN0b3J5IHRvIHlvdXIgQXBhY2hlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIHdoaWNoIHlvdSBjYW4gZmluZCBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy9odHRwZC9jb25mL2h0dHBkLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIGNvbW1hbmRzIHNpbWlsYXIgdG8gdGhlc2Ugb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlc2UgZXhhbXBsZSBjb21tYW5kcyBhc3N1bWUgYSB0b3AtbGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBpbiB5b3VyIGhvbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZXhhbXBsZSBhbHNvIGFzc3VtZXMgYW4gUlBNIHBhY2thZ2UgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBhIGRpZmZlcmVudCBwYWNrYWdlIHR5cGUsIHN1Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgSVBLLCB1c2UgImlwayIgaW4gdGhlIHBhdGhuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAmbHQ7VmlydHVhbEhvc3QgKjo4MCZndDsKKyAgICAgICAuLi4uCisgICAgICAgICBBbGlhcyAvcnBtIH4vcG9reS9idWlsZC90bXAvZGVwbG95L3JwbQorICAgICAgICAgJmx0O0RpcmVjdG9yeSAifi9wb2t5L2J1aWxkL3RtcC9kZXBsb3kvcnBtIiZndDsKKyAgICAgICAgICAgT3B0aW9ucyArSW5kZXhlcworICAgICAgICAgJmx0Oy9EaXJlY3RvcnkmZ3Q7CisgICAgICZsdDsvVmlydHVhbEhvc3QmZ3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbG9hZCB0aGUgQXBhY2hlIGNvbmZpZ3VyYXRpb24gYXMgZGVzY3JpYmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgc3RlcC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGFsbCBjb21tYW5kcywgYmUgc3VyZSB5b3UgaGF2ZSByb290CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZpbGVnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBkZXZlbG9wbWVudCBzeXN0ZW0gaXMgdXNpbmcgRmVkb3JhIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENlbnRPUywgdXNlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBzZXJ2aWNlIGh0dHBkIHJlbG9hZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBVYnVudHUgYW5kIERlYmlhbiwgdXNlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyAvZXRjL2luaXQuZC9hcGFjaGUyIHJlbG9hZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBPcGVuU1VTRSwgdXNlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyAvZXRjL2luaXQuZC9hcGFjaGUyIHJlbG9hZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIFNlY3VyaXR5LUVuaGFuY2VkIExpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTRUxpbnV4KSwgeW91IG5lZWQgdG8gbGFiZWwgdGhlIGZpbGVzIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlaW5nIGFjY2Vzc2libGUgdGhyb3VnaCBBcGFjaGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZnJvbSB0aGUgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGFzc3VtZXMgUlBNIHBhY2thZ2UgdHlwZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBjaGNvbiAtUiAtaCAtdCBodHRwZF9zeXNfY29udGVudF90IHRtcC9kZXBsb3kvcnBtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncGFja2FnZS1zZXJ2ZXItbGlnaHR0cGQnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+U2VydmluZyBQYWNrYWdlcyB2aWEgbGlnaHR0cGQ8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBsaWdodHRwZCwgYWxsIHlvdSBuZWVkCisgICAgICAgICAgICAgICAgICAgICAgICB0byBkbyBpcyB0byBwcm92aWRlIGEgbGluayBmcm9tIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1RNUERJUn0vZGVwbG95LzxyZXBsYWNlYWJsZT5wYWNrYWdlLWZvcm1hdDwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB0byBsaWdodHRwZCdzIGRvY3VtZW50LXJvb3QuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGRldGVybWluZSB0aGUgc3BlY2lmaWNzIG9mIHlvdXIgbGlnaHR0cGQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxhdGlvbiBieSBsb29raW5nIHRocm91Z2ggaXRzIGNvbmZpZ3VyYXRpb24gZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIHVzdWFsbHkgZm91bmQgYXQ6CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy9saWdodHRwZC9saWdodHRwZC5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHVzaW5nIElQSywgbGlnaHR0cGQncworICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQtcm9vdCBpcyBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdmFyL3d3dy9saWdodHRwZDwvZmlsZW5hbWU+LCBhbmQgeW91IGhhZAorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgZm9yIGEgdGFyZ2V0IG5hbWVkICJCT0FSRCIsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIHlvdSBtaWdodCBjcmVhdGUgYSBsaW5rIGZyb20geW91ciBidWlsZCBsb2NhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgdG8gbGlnaHR0cGQncyBkb2N1bWVudC1yb290IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIyBsbiAtcyAkKFBXRCkvdG1wL2RlcGxveS9pcGsgL3Zhci93d3cvbGlnaHR0cGQvQk9BUkQtZGlyCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHlvdSBuZWVkIHRvIHN0YXJ0IHRoZSBsaWdodHRwZCBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWV0aG9kIHVzZWQgdG8gc3RhcnQgdGhlIHNlcnZlciB2YXJpZXMgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIG9uZSBiYXNpYyBtZXRob2QgdGhhdCBzdGFydHMgaXQgYnkgaGFuZCBpczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAjIGxpZ2h0dHBkIC1mIC9ldGMvbGlnaHR0cGQvbGlnaHR0cGQuY29uZgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncnVudGltZS1wYWNrYWdlLW1hbmFnZW1lbnQtdGFyZ2V0Jz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+VGFyZ2V0IFNldHVwPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHVwIHRoZSB0YXJnZXQgZGlmZmVycyBkZXBlbmRpbmcgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlbWVudCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBpbmZvcm1hdGlvbiBmb3IgUlBNIGFuZCBJUEsuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3J1bnRpbWUtcGFja2FnZS1tYW5hZ2VtZW50LXRhcmdldC1ycG0nPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+VXNpbmcgUlBNPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBmb3IgcGVyZm9ybWluZyBydW50aW1lIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgb2YgUlBNIHBhY2thZ2VzIG9uIHRoZSB0YXJnZXQgaXMgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c21hcnQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgT24gdGhlIHRhcmdldCBtYWNoaW5lLCB5b3UgbmVlZCB0byBpbmZvcm0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zbWFydDwvZmlsZW5hbWU+IG9mIGV2ZXJ5IHBhY2thZ2UgZGF0YWJhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IHRvIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHN1cHBvc2UgeW91ciB0YXJnZXQgZGV2aWNlIGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgdGhyZWUgcGFja2FnZSBkYXRhYmFzZXMgZnJvbSBhIHNlcnZlciBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNlcnZlci5uYW1lPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWxsPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5pNTg2PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdpdmVuIHRoaXMgZXhhbXBsZSwgaXNzdWUgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBzbWFydCBjaGFubmVsIC0tYWRkIGFsbCB0eXBlPXJwbS1tZCBiYXNldXJsPWh0dHA6Ly9zZXJ2ZXIubmFtZS9ycG0vYWxsCisgICAgICMgc21hcnQgY2hhbm5lbCAtLWFkZCBpNTg1IHR5cGU9cnBtLW1kIGJhc2V1cmw9aHR0cDovL3NlcnZlci5uYW1lL3JwbS9pNTg2CisgICAgICMgc21hcnQgY2hhbm5lbCAtLWFkZCBxZW11eDg2IHR5cGU9cnBtLW1kIGJhc2V1cmw9aHR0cDovL3NlcnZlci5uYW1lL3JwbS9xZW11eDg2CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBBbHNvIGZyb20gdGhlIHRhcmdldCBtYWNoaW5lLCBmZXRjaCB0aGUgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gdXNpbmcgdGhpcyBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIHNtYXJ0IHVwZGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBub3cgdXNlIHRoZSA8ZmlsZW5hbWU+c21hcnQgcXVlcnk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5zbWFydCBpbnN0YWxsPC9maWxlbmFtZT4gY29tbWFuZHMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmQgYW5kIGluc3RhbGwgcGFja2FnZXMgZnJvbSB0aGUgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3J1bnRpbWUtcGFja2FnZS1tYW5hZ2VtZW50LXRhcmdldC1pcGsnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+VXNpbmcgSVBLPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBmb3IgcGVyZm9ybWluZyBydW50aW1lIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgb2YgSVBLIHBhY2thZ2VzIG9uIHRoZSB0YXJnZXQgaXMgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciB0byBpbmZvcm0gPGZpbGVuYW1lPm9wa2c8L2ZpbGVuYW1lPiBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgZGF0YWJhc2VzIHlvdSB3YW50IHRvIHVzZSwgc2ltcGx5IGNyZWF0ZSBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIG1vcmUgPGZpbGVuYW1lPiouY29uZjwvZmlsZW5hbWU+IGZpbGVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvb3BrZzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4gYXBwbGljYXRpb24gdXNlcyB0aGVtCisgICAgICAgICAgICAgICAgICAgICAgICB0byBmaW5kIGl0cyBhdmFpbGFibGUgcGFja2FnZSBkYXRhYmFzZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdSBjb25maWd1cmVkIHlvdXIgSFRUUCBzZXJ2ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uIHlvdXIgbWFjaGluZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnd3dy5teXNpdGUuY29tPC9maWxlbmFtZT4gdG8gc2VydmUgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gYSA8ZmlsZW5hbWU+Qk9BUkQtZGlyPC9maWxlbmFtZT4gZGlyZWN0b3J5IHVuZGVyCisgICAgICAgICAgICAgICAgICAgICAgICBpdHMgZG9jdW1lbnQtcm9vdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IG1pZ2h0IGNyZWF0ZSBhIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgb24gdGhlIHRhcmdldCBjYWxsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL29wa2cvYmFzZS1mZWVkcy5jb25mPC9maWxlbmFtZT4gdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHNyYy9neiBhbGwgaHR0cDovL3d3dy5teXNpdGUuY29tL0JPQVJELWRpci9hbGwKKyAgICAgc3JjL2d6IGFybXY3YSBodHRwOi8vd3d3Lm15c2l0ZS5jb20vQk9BUkQtZGlyL2FybXY3YQorICAgICBzcmMvZ3ogYmVhZ2xlYm9uZSBodHRwOi8vd3d3Lm15c2l0ZS5jb20vQk9BUkQtZGlyL2JlYWdsZWJvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQXMgYSB3YXkgb2YgbWFraW5nIGl0IGVhc2llciB0byBnZW5lcmF0ZSBhbmQgbWFrZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlc2UgSVBLIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXZhaWxhYmxlIG9uIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCwgc2ltcGx5IGRlZmluZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZFRURfREVQTE9ZRElSX0JBU0VfVVJJJz48ZmlsZW5hbWU+RkVFRF9ERVBMT1lESVJfQkFTRV9VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB0byBwb2ludCB0byB5b3VyIHNlcnZlciBhbmQgdGhlIGxvY2F0aW9uIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LXJvb3Qgd2hpY2ggY29udGFpbnMgdGhlIGRhdGFiYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlOiBpZiB5b3UgYXJlIHNlcnZpbmcgeW91ciBwYWNrYWdlcyBvdmVyCisgICAgICAgICAgICAgICAgICAgICAgICBIVFRQLCB5b3VyIHNlcnZlcidzIElQIGFkZHJlc3MgaXMgMTkyLjE2OC43LjEsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBkYXRhYmFzZXMgYXJlIGxvY2F0ZWQgaW4gYSBkaXJlY3RvcnkgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Qk9BUkQtZGlyPC9maWxlbmFtZT4gdW5kZXJuZWF0aCB5b3VyIEhUVFAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcidzIGRvY3VtZW50LXJvb3QsIHlvdSBuZWVkIHRvIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZFRURfREVQTE9ZRElSX0JBU0VfVVJJPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5odHRwOi8vMTkyLjE2OC43LjEvQk9BUkQtZGlyPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBhIHNldCBvZiBjb25maWd1cmF0aW9uIGZpbGVzIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgdGFyZ2V0IHRvIHdvcmsgd2l0aCB0aGlzIGZlZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIHRoZSB0YXJnZXQgbWFjaGluZSwgZmV0Y2ggKG9yIHJlZnJlc2gpIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBpbmZvcm1hdGlvbiB1c2luZyB0aGlzIGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgb3BrZyB1cGRhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHVzZSB0aGUgPGZpbGVuYW1lPm9wa2cgbGlzdDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wa2cgaW5zdGFsbDwvZmlsZW5hbWU+IGNvbW1hbmRzIHRvIGZpbmQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIHBhY2thZ2VzIGZyb20gdGhlIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0ZXN0aW5nLXBhY2thZ2VzLXdpdGgtcHRlc3QnPgorICAgICAgICAgICAgPHRpdGxlPlRlc3RpbmcgUGFja2FnZXMgV2l0aCBwdGVzdDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgUGFja2FnZSBUZXN0IChwdGVzdCkgcnVucyB0ZXN0cyBhZ2FpbnN0IHBhY2thZ2VzIGJ1aWx0CisgICAgICAgICAgICAgICAgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gb24gdGhlIHRhcmdldCBtYWNoaW5lLgorICAgICAgICAgICAgICAgIEEgcHRlc3QgY29udGFpbnMgYXQgbGVhc3QgdHdvIGl0ZW1zOiB0aGUgYWN0dWFsIHRlc3QsIGFuZAorICAgICAgICAgICAgICAgIGEgc2hlbGwgc2NyaXB0ICg8ZmlsZW5hbWU+cnVuLXB0ZXN0PC9maWxlbmFtZT4pIHRoYXQgc3RhcnRzCisgICAgICAgICAgICAgICAgdGhlIHRlc3QuCisgICAgICAgICAgICAgICAgVGhlIHNoZWxsIHNjcmlwdCB0aGF0IHN0YXJ0cyB0aGUgdGVzdCBtdXN0IG5vdCBjb250YWluCisgICAgICAgICAgICAgICAgdGhlIGFjdHVhbCB0ZXN0IC0gdGhlIHNjcmlwdCBvbmx5IHN0YXJ0cyB0aGUgdGVzdC4KKyAgICAgICAgICAgICAgICBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIHRlc3QgY2FuIGJlIGFueXRoaW5nIGZyb20gYSBzaW1wbGUKKyAgICAgICAgICAgICAgICBzaGVsbCBzY3JpcHQgdGhhdCBydW5zIGEgYmluYXJ5IGFuZCBjaGVja3MgdGhlIG91dHB1dCB0bworICAgICAgICAgICAgICAgIGFuIGVsYWJvcmF0ZSBzeXN0ZW0gb2YgdGVzdCBiaW5hcmllcyBhbmQgZGF0YSBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHRlc3QgZ2VuZXJhdGVzIG91dHB1dCBpbiB0aGUgZm9ybWF0IHVzZWQgYnkKKyAgICAgICAgICAgICAgICBBdXRvbWFrZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5yZXN1bHQ8L3JlcGxhY2VhYmxlPjogPHJlcGxhY2VhYmxlPnRlc3RuYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgd2hlcmUgdGhlIHJlc3VsdCBjYW4gYmUgPGZpbGVuYW1lPlBBU1M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RkFJTDwvZmlsZW5hbWU+LCBvciA8ZmlsZW5hbWU+U0tJUDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIGFuZCB0aGUgdGVzdG5hbWUgY2FuIGJlIGFueSBpZGVudGlmeWluZyBzdHJpbmcuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgWW9jdG8gUHJvamVjdCByZWNpcGVzIHRoYXQgYXJlIGFscmVhZHkKKyAgICAgICAgICAgICAgICBlbmFibGVkIHdpdGggcHRlc3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL1B0ZXN0Jz5QdGVzdDwvdWxpbms+CisgICAgICAgICAgICAgICAgd2lraSBwYWdlLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBBIHJlY2lwZSBpcyAicHRlc3QtZW5hYmxlZCIgaWYgaXQgaW5oZXJpdHMgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLXB0ZXN0Jz48ZmlsZW5hbWU+cHRlc3Q8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2FkZGluZy1wdGVzdC10by15b3VyLWJ1aWxkJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+QWRkaW5nIHB0ZXN0IHRvIFlvdXIgQnVpbGQ8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBwYWNrYWdlIHRlc3RpbmcgdG8geW91ciBidWlsZCwgYWRkIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVFJBX0lNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB0byB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBESVNUUk9fRkVBVFVSRVNfYXBwZW5kID0gIiBwdGVzdCIKKyAgICAgRVhUUkFfSU1BR0VfRkVBVFVSRVMgKz0gInB0ZXN0LXBrZ3MiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3VyIGJ1aWxkIGlzIGNvbXBsZXRlLCB0aGUgcHRlc3QgZmlsZXMgYXJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9saWIvPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPi9wdGVzdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGltYWdlLCB3aGVyZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3J1bm5pbmctcHRlc3QnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5SdW5uaW5nIHB0ZXN0PC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnB0ZXN0LXJ1bm5lcjwvZmlsZW5hbWU+IHBhY2thZ2UgaW5zdGFsbHMgYQorICAgICAgICAgICAgICAgICAgICBzaGVsbCBzY3JpcHQgdGhhdCBsb29wcyB0aHJvdWdoIGFsbCBpbnN0YWxsZWQgcHRlc3QgdGVzdAorICAgICAgICAgICAgICAgICAgICBzdWl0ZXMgYW5kIHJ1bnMgdGhlbSBpbiBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgbWlnaHQgd2FudCB0byBhZGQgdGhpcyBwYWNrYWdlIHRvCisgICAgICAgICAgICAgICAgICAgIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZ2V0dGluZy15b3VyLXBhY2thZ2UtcmVhZHknPgorICAgICAgICAgICAgICAgIDx0aXRsZT5HZXR0aW5nIFlvdXIgUGFja2FnZSBSZWFkeTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gZW5hYmxlIGEgcmVjaXBlIHRvIHJ1biBpbnN0YWxsZWQgcHRlc3RzCisgICAgICAgICAgICAgICAgICAgIG9uIHRhcmdldCBoYXJkd2FyZSwKKyAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gcHJlcGFyZSB0aGUgcmVjaXBlcyB0aGF0IGJ1aWxkIHRoZSBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICB5b3Ugd2FudCB0byB0ZXN0LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHdoYXQgeW91IGhhdmUgdG8gZG8gZm9yIGVhY2ggcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CZSBzdXJlIHRoZSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0cyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1wdGVzdCc+PGZpbGVuYW1lPnB0ZXN0PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZSB0aGUgZm9sbG93aW5nIGxpbmUgaW4gZWFjaCByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpbmhlcml0IHB0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgPGZpbGVuYW1lPnJ1bi1wdGVzdDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzY3JpcHQgc3RhcnRzIHlvdXIgdGVzdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGUgdGhlIHNjcmlwdCB3aGVyZSB5b3Ugd2lsbCByZWZlciB0byBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzdGFydHMgYSB0ZXN0IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kYnVzPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIS9iaW4vc2gKKyAgICAgY2QgdGVzdAorICAgICBtYWtlIC1rIHJ1bnRlc3QtVEVTVFMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVuc3VyZSBkZXBlbmRlbmNpZXMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHRlc3QgYWRkcyBidWlsZCBvciBydW50aW1lIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgbm9ybWFsbHkgZG8gbm90IGV4aXN0IGZvciB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWNoIGFzIHJlcXVpcmluZyAibWFrZSIgdG8gcnVuIHRoZSB0ZXN0IHN1aXRlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBpbiB5b3VyIHJlY2lwZSBpbiBvcmRlciBmb3IgdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBtZWV0IHRoZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHdoZXJlIHRoZSBwYWNrYWdlIGhhcyBhIHJ1bnRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IG9uICJtYWtlIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QWRkIGEgZnVuY3Rpb24gdG8gYnVpbGQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCBzdWl0ZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdCBtYW55IHBhY2thZ2VzIHN1cHBvcnQgY3Jvc3MtY29tcGlsYXRpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVpciB0ZXN0IHN1aXRlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSB1c3VhbGx5IG5lZWQgdG8gYWRkIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcy1jb21waWxhdGlvbiBmdW5jdGlvbiB0byB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+TWFueSBwYWNrYWdlcyBiYXNlZCBvbiBBdXRvbWFrZSBjb21waWxlIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biB0aGUgdGVzdCBzdWl0ZSBieSB1c2luZyBhIHNpbmdsZSBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjaCBhcyA8ZmlsZW5hbWU+bWFrZSBjaGVjazwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBuYXRpdmUgPGZpbGVuYW1lPm1ha2UgY2hlY2s8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkcyBhbmQgcnVucyBvbiB0aGUgc2FtZSBjb21wdXRlciwgd2hpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcy1jb21waWxpbmcgcmVxdWlyZXMgdGhhdCB0aGUgcGFja2FnZSBpcyBidWlsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBob3N0IGJ1dCBleGVjdXRlZCBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsdCB2ZXJzaW9uIG9mIEF1dG9tYWtlIHRoYXQgc2hpcHMgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGluY2x1ZGVzIGEgcGF0Y2ggdGhhdCBzZXBhcmF0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGluZyBhbmQgZXhlY3V0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgcGFja2FnZXMgdGhhdCB1c2UgdGhlIHVuYWx0ZXJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaGVkIHZlcnNpb24gb2YgPGZpbGVuYW1lPm1ha2UgY2hlY2s8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgY3Jvc3MtY29tcGlsZXMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlJlZ2FyZGxlc3MsIHlvdSBzdGlsbCBtdXN0IGFkZCBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbXBpbGVfcHRlc3Q8L2ZpbGVuYW1lPiBmdW5jdGlvbiB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHRoZSB0ZXN0IHN1aXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBhIGZ1bmN0aW9uIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyB0byB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSBidWlsZHRlc3QtVEVTVFMKKyAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FbnN1cmUgc3BlY2lhbCBjb25maWd1cmF0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBzZXQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgcGFja2FnZSByZXF1aXJlcyBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3IgdG8gY29tcGlsaW5nIHRoZSB0ZXN0IGNvZGUsIHlvdSBtdXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0IGEgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZV9wdGVzdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaW50byB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgdGhlIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+cHRlc3Q8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgY29waWVzIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bi1wdGVzdDwvZmlsZW5hbWU+IHRvIHRoZSB0YXJnZXQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBydW5zIG1ha2UgPGZpbGVuYW1lPmluc3RhbGwtcHRlc3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJ1biB0aGUgdGVzdHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhpcyBpcyBub3QgZW5vdWdoLCB5b3UgbmVlZCB0byBjcmVhdGUgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsX3B0ZXN0PC9maWxlbmFtZT4gZnVuY3Rpb24gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZSBzdXJlIGl0IGdldHMgY2FsbGVkIGFmdGVyIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWtlIGluc3RhbGwtcHRlc3QiIGNvbXBsZXRlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3dvcmtpbmctd2l0aC1zb3VyY2UtZmlsZXMnPgorICAgICAgICA8dGl0bGU+V29ya2luZyB3aXRoIFNvdXJjZSBGaWxlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3b3JrcyB3aXRoIHNvdXJjZSBmaWxlcyBsb2NhdGVkCisgICAgICAgICAgICB0aHJvdWdoIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBXaGVuIHlvdSBidWlsZCBzb21ldGhpbmcgdXNpbmcgQml0QmFrZSwgYSBiaWcgcGFydCBvZiB0aGUgb3BlcmF0aW9uCisgICAgICAgICAgICBpcyBsb2NhdGluZyBhbmQgZG93bmxvYWRpbmcgYWxsIHRoZSBzb3VyY2UgdGFyYmFsbHMuCisgICAgICAgICAgICBGb3IgaW1hZ2VzLCBkb3dubG9hZGluZyBhbGwgdGhlIHNvdXJjZSBmb3IgdmFyaW91cyBwYWNrYWdlcyBjYW4KKyAgICAgICAgICAgIHRha2UgYSBzaWduaWZpY2FudCBhbW91bnQgb2YgdGltZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIGluZm9ybWF0aW9uIGZvciB3b3JraW5nIHdpdGggc291cmNlCisgICAgICAgICAgICBmaWxlcyB0aGF0IGNhbiBsZWFkIHRvIG1vcmUgZWZmaWNpZW50IHVzZSBvZiByZXNvdXJjZXMgYW5kCisgICAgICAgICAgICB0aW1lLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctdXAtZWZmZWN0aXZlLW1pcnJvcnMnPgorICAgICAgICAgICAgPHRpdGxlPlNldHRpbmcgdXAgRWZmZWN0aXZlIE1pcnJvcnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQsIGEgZ29vZCBkZWFsIHRoYXQgZ29lcyBpbnRvIGEgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIGJ1aWxkIGlzIHNpbXBseSBkb3dubG9hZGluZyBhbGwgb2YgdGhlIHNvdXJjZSB0YXJiYWxscy4KKyAgICAgICAgICAgICAgICBNYXliZSB5b3UgaGF2ZSBiZWVuIHdvcmtpbmcgd2l0aCBhbm90aGVyIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIChPcGVuRW1iZWRkZWQgb3IgQW5nc3Ryb20pIGZvciB3aGljaCB5b3UgaGF2ZSBidWlsdCB1cCBhCisgICAgICAgICAgICAgICAgc2l6YWJsZSBkaXJlY3Rvcnkgb2Ygc291cmNlIHRhcmJhbGxzLgorICAgICAgICAgICAgICAgIE9yLCBwZXJoYXBzIHNvbWVvbmUgZWxzZSBoYXMgc3VjaCBhIGRpcmVjdG9yeSBmb3Igd2hpY2ggeW91CisgICAgICAgICAgICAgICAgaGF2ZSByZWFkIGFjY2Vzcy4KKyAgICAgICAgICAgICAgICBJZiBzbywgeW91IGNhbiBzYXZlIHRpbWUgYnkgYWRkaW5nIHN0YXRlbWVudHMgdG8geW91cgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBzbyB0aGF0IHRoZSBidWlsZCBwcm9jZXNzIGNoZWNrcyBsb2NhbAorICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGZpcnN0IGZvciBleGlzdGluZyB0YXJiYWxscyBiZWZvcmUgY2hlY2tpbmcgdGhlCisgICAgICAgICAgICAgICAgSW50ZXJuZXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZWZmaWNpZW50IHdheSB0byBzZXQgaXQgdXAgaW4geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNPVVJDRV9NSVJST1JfVVJMID89ICJmaWxlOi8vL2hvbWUveW91L3lvdXItZG93bmxvYWQtZGlyLyIKKyAgICAgSU5IRVJJVCArPSAib3duLW1pcnJvcnMiCisgICAgIEJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyA9ICIxIgorICAgICAjIEJCX05PX05FVFdPUksgPSAiMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTJz48ZmlsZW5hbWU+QkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBnZW5lcmF0ZQorICAgICAgICAgICAgICAgIHRhcmJhbGxzIG9mIHRoZSBHaXQgcmVwb3NpdG9yaWVzIGFuZCBzdG9yZSB0aGVtIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIER1ZSB0byBwZXJmb3JtYW5jZSByZWFzb25zLCBnZW5lcmF0aW5nIGFuZCBzdG9yaW5nIHRoZXNlCisgICAgICAgICAgICAgICAgdGFyYmFsbHMgaXMgbm90IHRoZSBidWlsZCBzeXN0ZW0ncyBkZWZhdWx0IGJlaGF2aW9yLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gdXNlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSwgc2VlIHRoZSB2YXJpYWJsZSdzIGdsb3NzYXJ5IGVudHJ5IGluIHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdnZXR0aW5nLXNvdXJjZS1maWxlcy1hbmQtc3VwcHJlc3NpbmctdGhlLWJ1aWxkJz4KKyAgICAgICAgICAgIDx0aXRsZT5HZXR0aW5nIFNvdXJjZSBGaWxlcyBhbmQgU3VwcHJlc3NpbmcgdGhlIEJ1aWxkPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciB0ZWNobmlxdWUgeW91IGNhbiB1c2UgdG8gcmVhZHkgeW91cnNlbGYgZm9yIGEKKyAgICAgICAgICAgICAgICBzdWNjZXNzaXZlIHN0cmluZyBvZiBidWlsZCBvcGVyYXRpb25zLCBpcyB0byBwcmUtZmV0Y2gKKyAgICAgICAgICAgICAgICBhbGwgdGhlIHNvdXJjZSBmaWxlcyB3aXRob3V0IGFjdHVhbGx5IHN0YXJ0aW5nIGEgYnVpbGQuCisgICAgICAgICAgICAgICAgVGhpcyB0ZWNobmlxdWUgbGV0cyB5b3Ugd29yayB0aHJvdWdoIGFueSBkb3dubG9hZCBpc3N1ZXMKKyAgICAgICAgICAgICAgICBhbmQgdWx0aW1hdGVseSBnYXRoZXJzIGFsbCB0aGUgc291cmNlIGZpbGVzIGludG8geW91cgorICAgICAgICAgICAgICAgIGRvd25sb2FkIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1idWlsZC1kb3dubG9hZHMnPjxmaWxlbmFtZT5idWlsZC9kb3dubG9hZHM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgIHdoaWNoIGlzIGxvY2F0ZWQgd2l0aAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBCaXRCYWtlIGNvbW1hbmQgZm9ybSB0byBmZXRjaCBhbGwgdGhlCisgICAgICAgICAgICAgICAgbmVjZXNzYXJ5IHNvdXJjZXMgd2l0aG91dCBzdGFydGluZyB0aGUgYnVpbGQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWMgZmV0Y2hhbGwgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgdmFyaWF0aW9uIG9mIHRoZSBCaXRCYWtlIGNvbW1hbmQgZ3VhcmFudGVlcyB0aGF0IHlvdQorICAgICAgICAgICAgICAgIGhhdmUgYWxsIHRoZSBzb3VyY2VzIGZvciB0aGF0IEJpdEJha2UgdGFyZ2V0IHNob3VsZCB5b3UKKyAgICAgICAgICAgICAgICBkaXNjb25uZWN0IGZyb20gdGhlIEludGVybmV0IGFuZCB3YW50IHRvIGRvIHRoZSBidWlsZAorICAgICAgICAgICAgICAgIGxhdGVyIG9mZmxpbmUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYnVpbGRpbmctc29mdHdhcmUtZnJvbS1hbi1leHRlcm5hbC1zb3VyY2UiPgorICAgICAgICA8dGl0bGU+QnVpbGRpbmcgU29mdHdhcmUgZnJvbSBhbiBFeHRlcm5hbCBTb3VyY2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiB3aGVuCisgICAgICAgICAgICBidWlsZGluZyBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgIFRoZSBidWlsZCBwcm9jZXNzIGludm9sdmVzIGZldGNoaW5nIHRoZSBzb3VyY2UgZmlsZXMsIHVucGFja2luZworICAgICAgICAgICAgdGhlbSwgYW5kIHRoZW4gcGF0Y2hpbmcgdGhlbSBpZiBuZWNlc3NhcnkgYmVmb3JlIHRoZSBidWlsZCB0YWtlcworICAgICAgICAgICAgcGxhY2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNpdHVhdGlvbnMgZXhpc3Qgd2hlcmUgeW91IG1pZ2h0IHdhbnQgdG8gYnVpbGQgc29mdHdhcmUgZnJvbSBzb3VyY2UKKyAgICAgICAgICAgIGZpbGVzIHRoYXQgYXJlIGV4dGVybmFsIHRvIGFuZCB0aHVzIG91dHNpZGUgb2YgdGhlCisgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgYSBwcm9qZWN0IHRoYXQgaW5jbHVkZXMgYSBuZXcgQlNQIHdpdGgKKyAgICAgICAgICAgIGEgaGVhdmlseSBjdXN0b21pemVkIGtlcm5lbC4KKyAgICAgICAgICAgIEFuZCwgeW91IHdhbnQgdG8gbWluaW1pemUgZXhwb3NpbmcgdGhlIGJ1aWxkIHN5c3RlbSB0byB0aGUKKyAgICAgICAgICAgIGRldmVsb3BtZW50IHRlYW0gc28gdGhhdCB0aGV5IGNhbiBmb2N1cyBvbiB0aGVpciBwcm9qZWN0IGFuZAorICAgICAgICAgICAgbWFpbnRhaW4gZXZlcnlvbmUncyB3b3JrZmxvdyBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB5b3Ugd2FudCBhIGtlcm5lbCBzb3VyY2UgZGlyZWN0b3J5IG9uIHRoZSBkZXZlbG9wbWVudAorICAgICAgICAgICAgbWFjaGluZSB3aGVyZSB0aGUgZGV2ZWxvcG1lbnQgb2NjdXJzLgorICAgICAgICAgICAgWW91IHdhbnQgdGhlIHJlY2lwZSdzCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICB2YXJpYWJsZSB0byBwb2ludCB0byB0aGUgZXh0ZXJuYWwgZGlyZWN0b3J5IGFuZCB1c2UgaXQgYXMgaXMsIG5vdAorICAgICAgICAgICAgY29weSBpdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gYnVpbGQgZnJvbSBzb2Z0d2FyZSB0aGF0IGNvbWVzIGZyb20gYW4gZXh0ZXJuYWwgc291cmNlLCBhbGwgeW91CisgICAgICAgICAgICBuZWVkIHRvIGRvIGlzIGluaGVyaXQgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1leHRlcm5hbHNyYyc+PGZpbGVuYW1lPmV4dGVybmFsc3JjPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgY2xhc3MgYW5kIHRoZW4gc2V0IHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVEVSTkFMU1JDJz48ZmlsZW5hbWU+RVhURVJOQUxTUkM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICB2YXJpYWJsZSB0byBwb2ludCB0byB5b3VyIGV4dGVybmFsIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgSGVyZSBhcmUgdGhlIHN0YXRlbWVudHMgdG8gcHV0IGluIHlvdXIKKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVCArPSAiZXh0ZXJuYWxzcmMiCisgICAgIEVYVEVSTkFMU1JDX3BuLTxyZXBsYWNlYWJsZT5teXJlY2lwZTwvcmVwbGFjZWFibGU+ID0gIjxyZXBsYWNlYWJsZT5wYXRoLXRvLXlvdXItc291cmNlLXRyZWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgc2hvd3MgaG93IHRvIGFjY29tcGxpc2ggdGhlIHNhbWUgdGhpbmcgYnkgc2V0dGluZworICAgICAgICAgICAgPGZpbGVuYW1lPkVYVEVSTkFMU1JDPC9maWxlbmFtZT4gaW4gdGhlIHJlY2lwZSBpdHNlbGYgb3IgaW4gdGhlCisgICAgICAgICAgICByZWNpcGUncyBhcHBlbmQgZmlsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhURVJOQUxTUkMgPSAiPHJlcGxhY2VhYmxlPnBhdGg8L3JlcGxhY2VhYmxlPiIKKyAgICAgRVhURVJOQUxTUkNfQlVJTEQgPSAiPHJlcGxhY2VhYmxlPnBhdGg8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEluIG9yZGVyIGZvciB0aGVzZSBzZXR0aW5ncyB0byB0YWtlIGVmZmVjdCwgeW91IG11c3QgZ2xvYmFsbHkKKyAgICAgICAgICAgICAgICBvciBsb2NhbGx5IGluaGVyaXQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtZXh0ZXJuYWxzcmMnPjxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPmV4dGVybmFsc3JjLmJiY2xhc3M8L2ZpbGVuYW1lPiBidWlsZHMKKyAgICAgICAgICAgIHRoZSBzb3VyY2UgY29kZSBpbiBhIGRpcmVjdG9yeSBzZXBhcmF0ZSBmcm9tIHRoZSBleHRlcm5hbCBzb3VyY2UKKyAgICAgICAgICAgIGRpcmVjdG9yeSBhcyBzcGVjaWZpZWQgYnkKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRFUk5BTFNSQyc+PGZpbGVuYW1lPkVYVEVSTkFMU1JDPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIGhhdmUgdGhlIHNvdXJjZSBidWlsdCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgaW4KKyAgICAgICAgICAgIHdoaWNoIGl0IHJlc2lkZXMsIG9yIHNvbWUgb3RoZXIgbm9taW5hdGVkIGRpcmVjdG9yeSwgeW91IGNhbiBzZXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRFUk5BTFNSQ19CVUlMRCc+PGZpbGVuYW1lPkVYVEVSTkFMU1JDX0JVSUxEPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdG8gcG9pbnQgdG8gdGhhdCBkaXJlY3Rvcnk6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVYVEVSTkFMU1JDX0JVSUxEX3BuLTxyZXBsYWNlYWJsZT5teXJlY2lwZTwvcmVwbGFjZWFibGU+ID0gIjxyZXBsYWNlYWJsZT5wYXRoLXRvLXlvdXItc291cmNlLXRyZWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJzZWxlY3RpbmctYW4taW5pdGlhbGl6YXRpb24tbWFuYWdlciI+CisgICAgICAgIDx0aXRsZT5TZWxlY3RpbmcgYW4gSW5pdGlhbGl6YXRpb24gTWFuYWdlcjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIFN5c1Zpbml0IGFzIHRoZSBpbml0aWFsaXphdGlvbgorICAgICAgICAgICAgbWFuYWdlci4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHN1cHBvcnQgYWxzbyBleGlzdHMgZm9yIHN5c3RlbWQsCisgICAgICAgICAgICB3aGljaCBpcyBhIGZ1bGwgcmVwbGFjZW1lbnQgZm9yIGluaXQgd2l0aAorICAgICAgICAgICAgcGFyYWxsZWwgc3RhcnRpbmcgb2Ygc2VydmljZXMsIHJlZHVjZWQgc2hlbGwgb3ZlcmhlYWQgYW5kIG90aGVyCisgICAgICAgICAgICBmZWF0dXJlcyB0aGF0IGFyZSB1c2VkIGJ5IG1hbnkgZGlzdHJpYnV0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gdXNlIFN5c1Zpbml0LCB5b3UgZG8KKyAgICAgICAgICAgIG5vdCBoYXZlIHRvIGRvIGFueXRoaW5nLgorICAgICAgICAgICAgQnV0LCBpZiB5b3Ugd2FudCB0byB1c2Ugc3lzdGVtZCwgeW91IG11c3QKKyAgICAgICAgICAgIHRha2Ugc29tZSBzdGVwcyBhcyBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1zeXN0ZW1kLWV4Y2x1c2l2ZWx5Jz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBzeXN0ZW1kIEV4Y2x1c2l2ZWx5PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU2V0IHRoZSB0aGVzZSB2YXJpYWJsZXMgaW4geW91ciBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERJU1RST19GRUFUVVJFU19hcHBlbmQgPSAiIHN5c3RlbWQiCisgICAgIFZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIgPSAic3lzdGVtZCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHByZXZlbnQgdGhlIFN5c1Zpbml0CisgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIGZlYXR1cmUgZnJvbQorICAgICAgICAgICAgICAgIGJlaW5nIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQgPSAic3lzdmluaXQiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIERvaW5nIHNvIHJlbW92ZXMgYW55IHJlZHVuZGFudCBTeXNWaW5pdCBzY3JpcHRzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyByZW1vdmUgIGluaXRzY3JpcHRzIGZyb20geW91ciBpbWFnZSBhbHRvZ2V0aGVyLAorICAgICAgICAgICAgICAgIHNldCB0aGlzIHZhcmlhYmxlIGFsc286CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWSVJUVUFMLVJVTlRJTUVfaW5pdHNjcmlwdHMgPSAiIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBiYWNrZmlsbCB2YXJpYWJsZSwgc2VlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQ8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXN5c3RlbWQtZm9yLXRoZS1tYWluLWltYWdlLWFuZC11c2luZy1zeXN2aW5pdC1mb3ItdGhlLXJlc2N1ZS1pbWFnZSc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgc3lzdGVtZCBmb3IgdGhlIE1haW4gSW1hZ2UgYW5kIFVzaW5nIFN5c1Zpbml0IGZvciB0aGUgUmVzY3VlIEltYWdlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU2V0IHRoZXNlIHZhcmlhYmxlcyBpbiB5b3VyIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgZmlsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRElTVFJPX0ZFQVRVUkVTX2FwcGVuZCA9ICIgc3lzdGVtZCIKKyAgICAgVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciA9ICJzeXN0ZW1kIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBEb2luZyBzbyBjYXVzZXMgeW91ciBtYWluIGltYWdlIHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWNvcmUtYm9vdC5iYjwvZmlsZW5hbWU+IHJlY2lwZSBhbmQKKyAgICAgICAgICAgICAgICBzeXN0ZW1kLgorICAgICAgICAgICAgICAgIFRoZSByZXNjdWUvbWluaW1hbCBpbWFnZSBjYW5ub3QgdXNlIHRoaXMgcGFja2FnZSBncm91cC4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpdCBjYW4gaW5zdGFsbCBTeXNWaW5pdAorICAgICAgICAgICAgICAgIGFuZCB0aGUgYXBwcm9wcmlhdGUgcGFja2FnZXMgd2lsbCBoYXZlIHN1cHBvcnQgZm9yIGJvdGgKKyAgICAgICAgICAgICAgICBzeXN0ZW1kIGFuZCBTeXNWaW5pdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJzZWxlY3RpbmctZGV2LW1hbmFnZXIiPgorICAgICAgICA8dGl0bGU+U2VsZWN0aW5nIGEgRGV2aWNlIE1hbmFnZXI8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgbXVsdGlwbGUgd2F5cyB0byBtYW5hZ2UgdGhlIGRldmljZQorICAgICAgICAgICAgbWFuYWdlciAoPGZpbGVuYW1lPi9kZXY8L2ZpbGVuYW1lPik6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGVyc2lzdGVudCBhbmQgUHJlLVBvcHVsYXRlZDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoaXMgY2FzZSwgdGhlIDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT4gZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIGlzIHBlcnNpc3RlbnQgYW5kIHRoZSByZXF1aXJlZCBkZXZpY2Ugbm9kZXMgYXJlIGNyZWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2UgPGZpbGVuYW1lPmRldnRtcGZzPC9maWxlbmFtZT4gd2l0aCBhIERldmljZSBNYW5hZ2VyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZvciB0aGlzIGNhc2UsIHRoZSA8ZmlsZW5hbWU+L2RldjwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBpcyBwcm92aWRlZCBieSB0aGUga2VybmVsIGFzIGFuIGluLW1lbW9yeSBmaWxlIHN5c3RlbSBhbmQKKyAgICAgICAgICAgICAgICAgICAgaXMgYXV0b21hdGljYWxseSBwb3B1bGF0ZWQgYnkgdGhlIGtlcm5lbCBhdCBydW50aW1lLgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2YgZGV2aWNlIG5vZGVzIGlzIGRvbmUgaW4gdXNlcgorICAgICAgICAgICAgICAgICAgICBzcGFjZSBieSBhIGRldmljZSBtYW5hZ2VyIGxpa2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVkZXY8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVzeWJveC1tZGV2PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ic3RhdGljLWRldi1tYW5hZ2VtZW50Ij4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBQZXJzaXN0ZW50IGFuZCBQcmUtUG9wdWxhdGVkPGZpbGVuYW1lPi9kZXY8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVzZSB0aGUgc3RhdGljIG1ldGhvZCBmb3IgZGV2aWNlIHBvcHVsYXRpb24sIHlvdSBuZWVkIHRvCisgICAgICAgICAgICAgICAgc2V0IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1VU0VfREVWRlMnPjxmaWxlbmFtZT5VU0VfREVWRlM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gIjAiIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVU0VfREVWRlMgPSAiMCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBjb250ZW50IG9mIHRoZSByZXN1bHRpbmcgPGZpbGVuYW1lPi9kZXY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpcyBkZWZpbmVkIGluIGEgRGV2aWNlIFRhYmxlIGZpbGUuCisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0RFVklDRV9UQUJMRVMnPjxmaWxlbmFtZT5JTUFHRV9ERVZJQ0VfVEFCTEVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGRlZmluZXMgdGhlIERldmljZSBUYWJsZSB0byB1c2UgYW5kIHNob3VsZCBiZSBzZXQKKyAgICAgICAgICAgICAgICBpbiB0aGUgbWFjaGluZSBvciBkaXN0cm8gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gc2V0IHRoaXMgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGRlZmluZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfREVWSUNFX1RBQkxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlLCB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZpY2VfdGFibGUtbWluaW1hbC50eHQ8L2ZpbGVuYW1lPiBpcyB1c2VkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfREVWSUNFX1RBQkxFUyA9ICJkZXZpY2VfdGFibGUtbXltYWNoaW5lLnR4dCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBwb3B1bGF0aW9uIGlzIGhhbmRsZWQgYnkgdGhlIDxmaWxlbmFtZT5tYWtlZGV2czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdXRpbGl0eSBkdXJpbmcgaW1hZ2UgY3JlYXRpb246CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0iZGV2dG1wZnMtZGV2LW1hbmFnZW1lbnQiPgorICAgICAgICAgICAgPHRpdGxlPlVzaW5nIDxmaWxlbmFtZT5kZXZ0bXBmczwvZmlsZW5hbWU+IGFuZCBhIERldmljZSBNYW5hZ2VyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gdXNlIHRoZSBkeW5hbWljIG1ldGhvZCBmb3IgZGV2aWNlIHBvcHVsYXRpb24sIHlvdSBuZWVkIHRvCisgICAgICAgICAgICAgICAgdXNlIChvciBiZSBzdXJlIHRvIHNldCkgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVVTRV9ERVZGUyc+PGZpbGVuYW1lPlVTRV9ERVZGUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byAiMSIsIHdoaWNoIGlzIHRoZSBkZWZhdWx0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVNFX0RFVkZTID0gIjEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFdpdGggdGhpcyBzZXR0aW5nLCB0aGUgcmVzdWx0aW5nIDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaXMgcG9wdWxhdGVkIGJ5IHRoZSBrZXJuZWwgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG1wZnM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBNYWtlIHN1cmUgdGhlIGNvcnJlc3BvbmRpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q09ORklHX0RFVlRNUEZTPC9maWxlbmFtZT4gaXMgc2V0IHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICB5b3UgYnVpbGQgYSBMaW51eCBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFsbCBkZXZpY2VzIGNyZWF0ZWQgYnkgPGZpbGVuYW1lPmRldnRtcGZzPC9maWxlbmFtZT4gd2lsbCBiZQorICAgICAgICAgICAgICAgIG93bmVkIGJ5IDxmaWxlbmFtZT5yb290PC9maWxlbmFtZT4gYW5kIGhhdmUgcGVybWlzc2lvbnMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+MDYwMDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBoYXZlIG1vcmUgY29udHJvbCBvdmVyIHRoZSBkZXZpY2Ugbm9kZXMsIHlvdSBjYW4gdXNlIGEKKyAgICAgICAgICAgICAgICBkZXZpY2UgbWFuYWdlciBsaWtlIDxmaWxlbmFtZT51ZGV2PC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVzeWJveC1tZGV2PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgWW91IGNob29zZSB0aGUgZGV2aWNlIG1hbmFnZXIgYnkgZGVmaW5pbmcgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlZJUlRVQUwtUlVOVElNRV9kZXZfbWFuYWdlcjwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgaW4geW91ciBtYWNoaW5lIG9yIGRpc3RybyBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWSVJUVUFMLVJVTlRJTUVfZGV2X21hbmFnZXIgPSAidWRldiIKKworICAgICAjIFNvbWUgYWx0ZXJuYXRpdmUgdmFsdWVzCisgICAgICMgVklSVFVBTC1SVU5USU1FX2Rldl9tYW5hZ2VyID0gImJ1c3lib3gtbWRldiIKKyAgICAgIyBWSVJUVUFMLVJVTlRJTUVfZGV2X21hbmFnZXIgPSAic3lzdGVtZCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1hcHBkZXYtc3JjcmV2Ij4KKyAgICAgICAgPHRpdGxlPlVzaW5nIGFuIEV4dGVybmFsIFNDTTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UncmUgd29ya2luZyBvbiBhIHJlY2lwZSB0aGF0IHB1bGxzIGZyb20gYW4gZXh0ZXJuYWwgU291cmNlCisgICAgICAgICAgICBDb2RlIE1hbmFnZXIgKFNDTSksIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgc3lzdGVtIG5vdGljZSBuZXcgcmVjaXBlIGNoYW5nZXMgYWRkZWQgdG8gdGhlIFNDTSBhbmQgdGhlbiBidWlsZAorICAgICAgICAgICAgdGhlIHJlc3VsdGluZyBwYWNrYWdlcyB0aGF0IGRlcGVuZCBvbiB0aGUgbmV3IHJlY2lwZXMgYnkgdXNpbmcKKyAgICAgICAgICAgIHRoZSBsYXRlc3QgdmVyc2lvbnMuCisgICAgICAgICAgICBUaGlzIG9ubHkgd29ya3MgZm9yIFNDTXMgZnJvbSB3aGljaCBpdCBpcyBwb3NzaWJsZSB0byBnZXQgYQorICAgICAgICAgICAgc2Vuc2libGUgcmV2aXNpb24gbnVtYmVyIGZvciBjaGFuZ2VzLgorICAgICAgICAgICAgQ3VycmVudGx5LCB5b3UgY2FuIGRvIHRoaXMgd2l0aCBBcGFjaGUgU3VidmVyc2lvbiAoU1ZOKSwgR2l0LCBhbmQKKyAgICAgICAgICAgIEJhemFhciAoQlpSKSByZXBvc2l0b3JpZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGVuYWJsZSB0aGlzIGJlaGF2aW9yLCB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgb2YgdGhlIHJlY2lwZSBuZWVkcyB0byByZWZlcmVuY2UKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNQVic+PGZpbGVuYW1lPlNSQ1BWPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFYgPSAiMS4yLjMrZ2l0JHtTUkNQVn0iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGVuLCB5b3UgY2FuIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIKKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT46CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ1JFVl9wbi08cmVwbGFjZWFibGU+UE48L3JlcGxhY2VhYmxlPiA9ICIke0FVVE9SRVZ9IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICBpcyB0aGUgbmFtZSBvZiB0aGUgcmVjaXBlIGZvciB3aGljaCB5b3Ugd2FudCB0byBlbmFibGUgYXV0b21hdGljIHNvdXJjZQorICAgICAgICAgICAgcmV2aXNpb24gdXBkYXRpbmcuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgd2FudCB0byB1cGRhdGUgeW91ciBsb2NhbCBjb25maWd1cmF0aW9uIGZpbGUsIHlvdSBjYW4KKyAgICAgICAgICAgIGFkZCB0aGUgZm9sbG93aW5nIGRpcmVjdGx5IHRvIHRoZSByZWNpcGUgdG8gZmluaXNoIGVuYWJsaW5nCisgICAgICAgICAgICB0aGUgZmVhdHVyZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDUkVWID0gIiR7QVVUT1JFVn0iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGEgZGlzdHJpYnV0aW9uIG5hbWVkCisgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS1ibGVlZGluZzwvZmlsZW5hbWU+LCB3aG9zZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmaWxlIGNvbnRhaW5zIHRoZSBsaW5lOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByZXF1aXJlIGNvbmYvZGlzdHJvL2luY2x1ZGUvcG9reS1mbG9hdGluZy1yZXZpc2lvbnMuaW5jCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGxpbmUgcHVsbHMgaW4gdGhlIGxpc3RlZCBpbmNsdWRlIGZpbGUgdGhhdCBjb250YWlucworICAgICAgICAgICAgbnVtZXJvdXMgbGluZXMgb2YgZXhhY3RseSB0aGF0IGZvcm06CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ1JFVl9wbi1nY29uZi1kYnVzID89ICIke0FVVE9SRVZ9IgorICAgICBTUkNSRVZfcG4tbWF0Y2hib3gtY29tbW9uID89ICIke0FVVE9SRVZ9IgorICAgICBTUkNSRVZfcG4tbWF0Y2hib3gtY29uZmlnLWd0ayA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLW1hdGNoYm94LWRlc2t0b3AgPz0gIiR7QVVUT1JFVn0iCisgICAgIFNSQ1JFVl9wbi1tYXRjaGJveC1rZXlib2FyZCA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLW1hdGNoYm94LXBhbmVsID89ICIke0FVVE9SRVZ9IgorICAgICBTUkNSRVZfcG4tbWF0Y2hib3gtcGFuZWwtMiA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLW1hdGNoYm94LXRoZW1lcy1leHRyYSA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLW1hdGNoYm94LXRlcm1pbmFsID89ICIke0FVVE9SRVZ9IgorICAgICBTUkNSRVZfcG4tbWF0Y2hib3gtd20gPz0gIiR7QVVUT1JFVn0iCisgICAgIFNSQ1JFVl9wbi1tYXRjaGJveC13bS0yID89ICIke0FVVE9SRVZ9IgorICAgICBTUkNSRVZfcG4tc2V0dGluZ3MtZGFlbW9uID89ICIke0FVVE9SRVZ9IgorICAgICBTUkNSRVZfcG4tc2NyZWVuc2hvdCA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLWxpYmZha2VrZXkgPz0gIiR7QVVUT1JFVn0iCisgICAgIFNSQ1JFVl9wbi1vcHJvZmlsZXVpID89ICIke0FVVE9SRVZ9IgorICAgICAgICAgIC4KKyAgICAgICAgICAuCisgICAgICAgICAgLgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlc2UgbGluZXMgYWxsb3cgeW91IHRvIGV4cGVyaW1lbnQgd2l0aCBidWlsZGluZyBhCisgICAgICAgICAgICBkaXN0cmlidXRpb24gdGhhdCB0cmFja3MgdGhlIGxhdGVzdCBkZXZlbG9wbWVudCBzb3VyY2UKKyAgICAgICAgICAgIGZvciBudW1lcm91cyBwYWNrYWdlcy4KKyAgICAgICAgICAgIDxub3RlPjx0aXRsZT5DYXV0aW9uPC90aXRsZT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnBva3ktYmxlZWRpbmc8L2ZpbGVuYW1lPiBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICBpcyBub3QgdGVzdGVkIG9uIGEgcmVndWxhciBiYXNpcy4KKyAgICAgICAgICAgICAgICBLZWVwIHRoaXMgaW4gbWluZCBpZiB5b3UgdXNlIGl0LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLWEtcmVhZC1vbmx5LXJvb3QtZmlsZXN5c3RlbSc+CisgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhIFJlYWQtT25seSBSb290IEZpbGVzeXN0ZW08L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU3VwcG9zZSwgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIHlvdSBuZWVkIHRvIGRpc2FibGUKKyAgICAgICAgICAgIHlvdXIgdGFyZ2V0IGRldmljZSdzIHJvb3QgZmlsZXN5c3RlbSdzIHdyaXRlIHBlcm1pc3Npb25zCisgICAgICAgICAgICAoaS5lLiB5b3UgbmVlZCBhIHJlYWQtb25seSByb290IGZpbGVzeXN0ZW0pLgorICAgICAgICAgICAgT3IsIHBlcmhhcHMgeW91IGFyZSBydW5uaW5nIHRoZSBkZXZpY2UncyBvcGVyYXRpbmcgc3lzdGVtCisgICAgICAgICAgICBmcm9tIGEgcmVhZC1vbmx5IHN0b3JhZ2UgZGV2aWNlLgorICAgICAgICAgICAgRm9yIGVpdGhlciBjYXNlLCB5b3UgY2FuIGN1c3RvbWl6ZSB5b3VyIGltYWdlIGZvcgorICAgICAgICAgICAgdGhhdCBiZWhhdmlvci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgU3VwcG9ydGluZyBhIHJlYWQtb25seSByb290IGZpbGVzeXN0ZW0gcmVxdWlyZXMgdGhhdCB0aGUgc3lzdGVtIGFuZAorICAgICAgICAgICAgYXBwbGljYXRpb25zIGRvIG5vdCB0cnkgdG8gd3JpdGUgdG8gdGhlIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgIFlvdSBtdXN0IGNvbmZpZ3VyZSBhbGwgcGFydHMgb2YgdGhlIHRhcmdldCBzeXN0ZW0gdG8gd3JpdGUKKyAgICAgICAgICAgIGVsc2V3aGVyZSwgb3IgdG8gZ3JhY2VmdWxseSBmYWlsIGluIHRoZSBldmVudCBvZiBhdHRlbXB0aW5nIHRvCisgICAgICAgICAgICB3cml0ZSB0byB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICA8L25vdGU+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLXRoZS1yb290LWZpbGVzeXN0ZW0nPgorICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIHRoZSBSb290IEZpbGVzeXN0ZW08L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBjcmVhdGUgdGhlIHJlYWQtb25seSByb290IGZpbGVzeXN0ZW0sIHNpbXBseSBhZGQgdGhlCisgICAgICAgICAgICAgICAgInJlYWQtb25seS1yb290ZnMiIGZlYXR1cmUgdG8geW91ciBpbWFnZS4KKyAgICAgICAgICAgICAgICBVc2luZyBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnRzIGluIHlvdXIKKyAgICAgICAgICAgICAgICBpbWFnZSByZWNpcGUgb3IgZnJvbSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgICAgIGNhdXNlcyB0aGUgYnVpbGQgc3lzdGVtIHRvIGNyZWF0ZSBhIHJlYWQtb25seSByb290IGZpbGVzeXN0ZW06CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9GRUFUVVJFUyA9ICJyZWFkLW9ubHktcm9vdGZzIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhUUkFfSU1BR0VfRkVBVFVSRVMgKz0gInJlYWQtb25seS1yb290ZnMiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZXNlIHZhcmlhYmxlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZ3Bva3ktZXh0ZW5kLWN1c3RvbWltYWdlLWltYWdlZmVhdHVyZXMnPkN1c3RvbWl6aW5nIEltYWdlcyBVc2luZyBDdXN0b20gPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgdmFyaWFibGVzLCBzZWUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBhbmQgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVFJBX0lNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Bvc3QtaW5zdGFsbGF0aW9uLXNjcmlwdHMnPgorICAgICAgICAgICAgPHRpdGxlPlBvc3QtSW5zdGFsbGF0aW9uIFNjcmlwdHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJdCBpcyB2ZXJ5IGltcG9ydGFudCB0aGF0IHlvdSBtYWtlIHN1cmUgYWxsCisgICAgICAgICAgICAgICAgcG9zdC1JbnN0YWxsYXRpb24gKDxmaWxlbmFtZT5wa2dfcG9zdGluc3Q8L2ZpbGVuYW1lPikgc2NyaXB0cworICAgICAgICAgICAgICAgIGZvciBwYWNrYWdlcyB0aGF0IGFyZSBpbnN0YWxsZWQgaW50byB0aGUgaW1hZ2UgY2FuIGJlIHJ1bgorICAgICAgICAgICAgICAgIGF0IHRoZSB0aW1lIHdoZW4gdGhlIHJvb3QgZmlsZXN5c3RlbSBpcyBjcmVhdGVkIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBvbiB0aGUgaG9zdCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgVGhlc2Ugc2NyaXB0cyBjYW5ub3QgYXR0ZW1wdCB0byBydW4gZHVyaW5nIGZpcnN0LWJvb3Qgb24gdGhlCisgICAgICAgICAgICAgICAgdGFyZ2V0IGRldmljZS4KKyAgICAgICAgICAgICAgICBXaXRoIHRoZSAicmVhZC1vbmx5LXJvb3RmcyIgZmVhdHVyZSBlbmFibGVkLAorICAgICAgICAgICAgICAgIHRoZSBidWlsZCBzeXN0ZW0gY2hlY2tzIGR1cmluZyByb290IGZpbGVzeXN0ZW0gY3JlYXRpb24gdG8gbWFrZQorICAgICAgICAgICAgICAgIHN1cmUgYWxsIHBvc3QtaW5zdGFsbGF0aW9uIHNjcmlwdHMgc3VjY2VlZC4KKyAgICAgICAgICAgICAgICBJZiBhbnkgb2YgdGhlc2Ugc2NyaXB0cyBzdGlsbCBuZWVkIHRvIGJlIHJ1biBhZnRlciB0aGUgcm9vdAorICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gaXMgY3JlYXRlZCwgdGhlIGJ1aWxkIGltbWVkaWF0ZWx5IGZhaWxzLgorICAgICAgICAgICAgICAgIFRoZXNlIGJ1aWxkLXRpbWUgY2hlY2tzIGVuc3VyZSB0aGF0IHRoZSBidWlsZCBmYWlscworICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIHRoZSB0YXJnZXQgZGV2aWNlIGZhaWxzIGxhdGVyIGR1cmluZyBpdHMKKyAgICAgICAgICAgICAgICBpbml0aWFsIGJvb3Qgb3BlcmF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBNb3N0IG9mIHRoZSBjb21tb24gcG9zdC1pbnN0YWxsYXRpb24gc2NyaXB0cyBnZW5lcmF0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGZvciB0aGUgb3V0LW9mLXRoZS1ib3ggWW9jdG8gUHJvamVjdCBhcmUgZW5naW5lZXJlZAorICAgICAgICAgICAgICAgIHNvIHRoYXQgdGhleSBjYW4gcnVuIGR1cmluZyByb290IGZpbGVzeXN0ZW0gY3JlYXRpb24KKyAgICAgICAgICAgICAgICAoZS5nLiBwb3N0LWluc3RhbGxhdGlvbiBzY3JpcHRzIGZvciBjYWNoaW5nIGZvbnRzKS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgY3JlYXRlIGFuZCBhZGQgY3VzdG9tIHNjcmlwdHMsIHlvdSBuZWVkCisgICAgICAgICAgICAgICAgdG8gYmUgc3VyZSB0aGV5IGNhbiBiZSBydW4gZHVyaW5nIHRoaXMgZmlsZSBzeXN0ZW0gY3JlYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgY29tbW9uIHByb2JsZW1zIHRoYXQgcHJldmVudAorICAgICAgICAgICAgICAgIHBvc3QtaW5zdGFsbGF0aW9uIHNjcmlwdHMgZnJvbSBydW5uaW5nIGR1cmluZyByb290IGZpbGVzeXN0ZW0KKyAgICAgICAgICAgICAgICBjcmVhdGlvbjoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Tm90IHVzaW5nICREIGluIGZyb250IG9mIGFic29sdXRlCisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBkZWZpbmVzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JDwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUQnPjxmaWxlbmFtZT5EPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgcm9vdCBmaWxlc3lzdGVtIGlzIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgPGZpbGVuYW1lPiREPC9maWxlbmFtZT4gaXMgYmxhbmsgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCBpcyBydW4gb24gdGhlIHRhcmdldCBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGltcGxpZXMgdHdvIHB1cnBvc2VzIGZvciA8ZmlsZW5hbWU+JEQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuc3VyaW5nIHBhdGhzIGFyZSB2YWxpZCBpbiBib3RoIHRoZSBob3N0IGFuZCB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50cywgYW5kIGNoZWNraW5nIHRvIGRldGVybWluZSB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgaXMgYmVpbmcgdXNlZCBhcyBhIG1ldGhvZCBmb3IgdGFraW5nCisgICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZSBhY3Rpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5BdHRlbXB0aW5nIHRvIHJ1biBwcm9jZXNzZXMgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIHRvIG9yIGRlcGVuZGVudCBvbiB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gd29yayBhcm91bmQgdGhlc2UgYXR0ZW1wdHMgYnkgdXNpbmcgbmF0aXZlCisgICAgICAgICAgICAgICAgICAgICAgICB0b29scyB0byBhY2NvbXBsaXNoIHRoZSBzYW1lIHRhc2tzLCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgYnkgYWx0ZXJuYXRpdmVseSBydW5uaW5nIHRoZSBwcm9jZXNzZXMgdW5kZXIgUUVNVSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGhhcyB0aGUgPGZpbGVuYW1lPnFlbXVfcnVuX2JpbmFyeTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1xZW11Jz48ZmlsZW5hbWU+cWVtdTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2FyZWFzLXdpdGgtd3JpdGUtYWNjZXNzJz4KKyAgICAgICAgICAgIDx0aXRsZT5BcmVhcyBXaXRoIFdyaXRlIEFjY2VzczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdpdGggdGhlICJyZWFkLW9ubHktcm9vdGZzIiBmZWF0dXJlIGVuYWJsZWQsCisgICAgICAgICAgICAgICAgYW55IGF0dGVtcHQgYnkgdGhlIHRhcmdldCB0byB3cml0ZSB0byB0aGUgcm9vdCBmaWxlc3lzdGVtIGF0CisgICAgICAgICAgICAgICAgcnVudGltZSBmYWlscy4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHlvdSBjb25maWd1cmUgcHJvY2Vzc2VzCisgICAgICAgICAgICAgICAgYW5kIGFwcGxpY2F0aW9ucyB0aGF0IGF0dGVtcHQgdGhlc2UgdHlwZXMgb2Ygd3JpdGVzIGRvIHNvCisgICAgICAgICAgICAgICAgdG8gZGlyZWN0b3JpZXMgd2l0aCB3cml0ZSBhY2Nlc3MgKGUuZy4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3RtcDwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT4vdmFyL3J1bjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwZXJmb3JtaW5nLWF1dG9tYXRlZC1ydW50aW1lLXRlc3RpbmciPgorICAgICAgICA8dGl0bGU+UGVyZm9ybWluZyBBdXRvbWF0ZWQgUnVudGltZSBUZXN0aW5nPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIG1ha2VzIGF2YWlsYWJsZSBhIHNlcmllcyBvZiBhdXRvbWF0ZWQKKyAgICAgICAgICAgIHRlc3RzIGZvciBpbWFnZXMgdG8gdmVyaWZ5IHJ1bnRpbWUgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgICAgIFlvdSBjYW4gcnVuIHRoZXNlIHRlc3RzIG9uIGVpdGhlciBRRU1VIG9yIGFjdHVhbCB0YXJnZXQgaGFyZHdhcmUuCisgICAgICAgICAgICBUZXN0cyBhcmUgd3JpdHRlbiBpbiBQeXRob24gbWFraW5nIHVzZSBvZiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT51bml0dGVzdDwvZmlsZW5hbWU+IG1vZHVsZSwgYW5kIHRoZSBtYWpvcml0eSBvZiB0aGVtCisgICAgICAgICAgICBydW4gY29tbWFuZHMgb24gdGhlIHRhcmdldCBzeXN0ZW0gb3ZlciBTU0guCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB5b3Ugc2V0IHVwIHRoZSBlbnZpcm9ubWVudCB0byB1c2UgdGhlc2UKKyAgICAgICAgICAgIHRlc3RzLCBydW4gYXZhaWxhYmxlIHRlc3RzLCBhbmQgd3JpdGUgYW5kIGFkZCB5b3VyIG93biB0ZXN0cy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdlbmFibGluZy10ZXN0cyc+CisgICAgICAgICAgICA8dGl0bGU+RW5hYmxpbmcgVGVzdHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gd2hldGhlciB5b3UgYXJlIHBsYW5uaW5nIHRvIHJ1biB0ZXN0cyB1c2luZworICAgICAgICAgICAgICAgIFFFTVUgb3Igb24gdGhlIGhhcmR3YXJlLCB5b3UgaGF2ZSB0byB0YWtlCisgICAgICAgICAgICAgICAgZGlmZmVyZW50IHN0ZXBzIHRvIGVuYWJsZSB0aGUgdGVzdHMuCisgICAgICAgICAgICAgICAgU2VlIHRoZSBmb2xsb3dpbmcgc3Vic2VjdGlvbnMgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0bworICAgICAgICAgICAgICAgIGVuYWJsZSBib3RoIHR5cGVzIG9mIHRlc3RzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncWVtdS1pbWFnZS1lbmFibGluZy10ZXN0cyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkVuYWJsaW5nIFJ1bnRpbWUgVGVzdHMgb24gUUVNVTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gcnVuIHRlc3RzLCB5b3UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZXQgdXAgdG8gYXZvaWQgaW50ZXJhY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIDxmaWxlbmFtZT5zdWRvPC9maWxlbmFtZT4gZm9yIG5ldHdvcmtpbmc6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbyBhY2NvbXBsaXNoIHRoaXMsIHlvdSBtdXN0IGRvIG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFkZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk5PUEFTU1dEPC9maWxlbmFtZT4gZm9yIHlvdXIgdXNlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPi9ldGMvc3Vkb2VyczwvZmlsZW5hbWU+IGVpdGhlciBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbCBjb21tYW5kcyBvciBqdXN0IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXUtaWZ1cDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgcHJvdmlkZSB0aGUgZnVsbCBwYXRoIGFzIHRoYXQgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgaWYgeW91IGFyZSB1c2luZyBtdWx0aXBsZSBjbG9uZXMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIHNvbWUgZGlzdHJpYnV0aW9ucywgeW91IGFsc28gbmVlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgb3V0ICJEZWZhdWx0cyByZXF1aXJldHR5IiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL3N1ZG9lcnM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1hbnVhbGx5IGNvbmZpZ3VyZSBhIHRhcCBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB5b3VyIHN5c3RlbS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJ1biBhcyByb290IHRoZSBzY3JpcHQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHNob3VsZCBnZW5lcmF0ZSBhIGxpc3Qgb2YgdGFwIGRldmljZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBvcHRpb24gdHlwaWNhbGx5IGNob3NlbiBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dG9idWlsZGVyLXR5cGUgZW52aXJvbm1lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTUExBWTwvZmlsZW5hbWU+IHZhcmlhYmxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gc2V0IHRoaXMgdmFyaWFibGUgc28gdGhhdCB5b3UgaGF2ZSBhbiBYCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyIGF2YWlsYWJsZSAoZS5nLiBzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT52bmNzZXJ2ZXI8L2ZpbGVuYW1lPiBmb3IgYSBoZWFkbGVzcyBtYWNoaW5lKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QmUgc3VyZSB5b3VyIGhvc3QncyBmaXJld2FsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdHMgaW5jb21pbmcgY29ubmVjdGlvbnMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Mi4xNjguNy4wLzI0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29tZSBvZiB0aGUgdGVzdHMgKGluIHBhcnRpY3VsYXIgc21hcnQgdGVzdHMpIHN0YXJ0IGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUCBzZXJ2ZXIgb24gYSByYW5kb20gaGlnaCBudW1iZXIgcG9ydCwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIHNlcnZlIGZpbGVzIHRvIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNtYXJ0IG1vZHVsZSBzZXJ2ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtERVBMT1lfRElSfS9ycG08L2ZpbGVuYW1lPiBzbyBpdCBjYW4gcnVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21hcnQgY2hhbm5lbCBjb21tYW5kcy4gVGhhdCBtZWFucyB5b3VyIGhvc3QncyBmaXJld2FsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYWNjZXB0IGluY29taW5nIGNvbm5lY3Rpb25zIGZyb20gMTkyLjE2OC43LjAvMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgdGhlIGRlZmF1bHQgSVAgcmFuZ2UgdXNlZCBmb3IgdGFwIGRldmljZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3Ugc3RhcnQgcnVubmluZyB0aGUgdGVzdHMsIHRoZSBmb2xsb3dpbmcgaGFwcGVuczoKKyAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgY29weSBvZiB0aGUgcm9vdCBmaWxlc3lzdGVtIGlzIHdyaXR0ZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byA8ZmlsZW5hbWU+JHtXT1JLRElSfS90ZXN0aW1hZ2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgaW1hZ2UgaXMgYm9vdGVkIHVuZGVyIFFFTVUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmQgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBzY3JpcHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSBkZWZhdWx0IHRpbWVvdXQgb2YgNTAwIHNlY29uZHMgb2NjdXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYWxsb3cgZm9yIHRoZSBib290IHByb2Nlc3MgdG8gcmVhY2ggdGhlIGxvZ2luIHByb21wdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNoYW5nZSB0aGUgdGltZW91dCBwZXJpb2QgYnkgc2V0dGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1URVNUX1FFTVVCT09UX1RJTUVPVVQnPjxmaWxlbmFtZT5URVNUX1FFTVVCT09UX1RJTUVPVVQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5PbmNlIHRoZSBib290IHByb2Nlc3MgaXMgcmVhY2hlZCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naW4gcHJvbXB0IGFwcGVhcnMsIHRoZSB0ZXN0cyBydW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bGwgYm9vdCBsb2cgaXMgd3JpdHRlbiB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1dPUktESVJ9L3Rlc3RpbWFnZS9xZW11X2Jvb3RfbG9nPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RWFjaCB0ZXN0IG1vZHVsZSBsb2FkcyBpbiB0aGUgb3JkZXIgZm91bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+VEVTVF9TVUlURVM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlIGZ1bGwgb3V0cHV0IG9mIHRoZSBjb21tYW5kcyBydW4gb3ZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTSCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1dPUktESVJ9L3Rlc3RpbWdhZ2Uvc3NoX3RhcmdldF9sb2c8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JZiBubyBmYWlsdXJlcyBvY2N1ciwgdGhlIHRhc2sgcnVubmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cyBlbmRzIHN1Y2Nlc3NmdWxseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlIG91dHB1dCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51bml0dGVzdDwvZmlsZW5hbWU+IGluIHRoZSB0YXNrIGxvZyBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1dPUktESVJ9L3RlbXAvbG9nLmRvX3Rlc3RpbWFnZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2hhcmR3YXJlLWltYWdlLWVuYWJsaW5nLXRlc3RzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RW5hYmxpbmcgUnVudGltZSBUZXN0cyBvbiBIYXJkd2FyZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2FuIHJ1biB0ZXN0cyBvbiByZWFsCisgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlLCBhbmQgZm9yIGNlcnRhaW4gZGV2aWNlcyBpdCBjYW4gYWxzbyBkZXBsb3kKKyAgICAgICAgICAgICAgICAgICAgdGhlIGltYWdlIHRvIGJlIHRlc3RlZCBvbnRvIHRoZSBkZXZpY2UgYmVmb3JlaGFuZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGF1dG9tYXRlZCBkZXBsb3ltZW50LCBhICJtYXN0ZXIgaW1hZ2UiIGlzIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICBvbnRvIHRoZSBoYXJkd2FyZSBvbmNlIGFzIHBhcnQgb2Ygc2V0dXAuCisgICAgICAgICAgICAgICAgICAgIFRoZW4sIGVhY2ggdGltZSB0ZXN0cyBhcmUgdG8gYmUgcnVuLCB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIG9jY3VyczoKKyAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBtYXN0ZXIgaW1hZ2UgaXMgYm9vdGVkIGludG8gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byB3cml0ZSB0aGUgaW1hZ2UgdG8gYmUgdGVzdGVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzZWNvbmQgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBkZXZpY2UgaXMgdGhlbiByZWJvb3RlZCB1c2luZyBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsIHNjcmlwdCB0aGF0IHlvdSBuZWVkIHRvIHByb3ZpZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGRldmljZSBib290cyBpbnRvIHRoZSBpbWFnZSB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBydW5uaW5nIHRlc3RzIChpbmRlcGVuZGVudCBvZiB3aGV0aGVyIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICBoYXMgYmVlbiBkZXBsb3llZCBhdXRvbWF0aWNhbGx5IG9yIG5vdCksIHRoZSBkZXZpY2UgaXMKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgdG8gYmUgY29ubmVjdGVkIHRvIGEgbmV0d29yayBvbiBhCisgICAgICAgICAgICAgICAgICAgIHByZS1kZXRlcm1pbmVkIElQIGFkZHJlc3MuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZWl0aGVyIHVzZSBzdGF0aWMgSVAgYWRkcmVzc2VzIHdyaXR0ZW4gaW50bworICAgICAgICAgICAgICAgICAgICB0aGUgaW1hZ2UsIG9yIHNldCB0aGUgaW1hZ2UgdG8gdXNlIERIQ1AgYW5kIGhhdmUgeW91cgorICAgICAgICAgICAgICAgICAgICBESENQIHNlcnZlciBvbiB0aGUgdGVzdCBuZXR3b3JrIGFzc2lnbiBhIGtub3duIElQIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSBkZXZpY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIHJ1biB0ZXN0cyBvbiBoYXJkd2FyZSwgeW91IG5lZWQgdG8gc2V0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5URVNUX1RBUkdFVDwvZmlsZW5hbWU+IHRvIGFuIGFwcHJvcHJpYXRlIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICBGb3IgUUVNVSwgeW91IGRvIG5vdCBoYXZlIHRvIGNoYW5nZSBhbnl0aGluZywgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgaXMgIlFlbXVUYXJnZXQiLgorICAgICAgICAgICAgICAgICAgICBGb3IgcnVubmluZyB0ZXN0cyBvbiBoYXJkd2FyZSwgdGhlIGZvbGxvd2luZyBvcHRpb25zIGV4aXN0OgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iU2ltcGxlUmVtb3RlVGFyZ2V0Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSAiU2ltcGxlUmVtb3RlVGFyZ2V0IiBpZiB5b3UgYXJlIGdvaW5nIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuIHRlc3RzIG9uIGEgdGFyZ2V0IHN5c3RlbSB0aGF0IGlzIGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIHRoZSBpbWFnZSB0byBiZSB0ZXN0ZWQgYW5kIGlzIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBuZXR3b3JrLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlICJTaW1wbGVSZW1vdGVUYXJnZXQiIGluIGNvbmp1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBlaXRoZXIgcmVhbCBoYXJkd2FyZSBvciBhbiBpbWFnZSBydW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluIGEgc2VwYXJhdGVseSBzdGFydGVkIFFFTVUgb3IgYW55CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgdmlydHVhbCBtYWNoaW5lIG1hbmFnZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJHdW1taWJvb3RUYXJnZXQiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlICJHdW1taWJvb3RUYXJnZXQiIGlmIHlvdXIgaGFyZHdhcmUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBFRkktYmFzZWQgbWFjaGluZSB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmd1bW1pYm9vdDwvZmlsZW5hbWU+IGFzIGJvb3Rsb2FkZXIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtdGVzdG1hc3RlcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHNvbWV0aGluZyBzaW1pbGFyKSBpcyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxzbywgeW91ciBoYXJkd2FyZSB1bmRlciB0ZXN0IG11c3QgYmUgaW4gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERIQ1AtZW5hYmxlZCBuZXR3b3JrIHRoYXQgZ2l2ZXMgaXQgdGhlIHNhbWUgSVAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzIGZvciBlYWNoIHJlYm9vdC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IGNob29zZSAiR3VtbWlib290VGFyZ2V0IiwgdGhlcmUgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCByZXF1aXJlbWVudHMgYW5kIGNvbnNpZGVyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2VsZWN0aW5nLWd1bW1pYm9vdHRhcmdldCc+U2VsZWN0aW5nIEd1bW1pYm9vdFRhcmdldDwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiwgd2hpY2ggZm9sbG93cywgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJCZWFnbGVCb25lVGFyZ2V0Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSAiQmVhZ2xlQm9uZVRhcmdldCIgaWYgeW91IGFyZSBkZXBsb3lpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMgYW5kIHJ1bm5pbmcgdGVzdHMgb24gdGhlIEJlYWdsZUJvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmxhY2siIG9yIG9yaWdpbmFsICJXaGl0ZSIgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlc2UgdGVzdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHRoZSBCZWFnbGVCb25lVGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzL2JlYWdsZWJvbmV0YXJnZXQucHk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJFZGdlUm91dGVyVGFyZ2V0Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSAiRWRnZVJvdXRlclRhcmdldCIgaXMgeW91IGFyZSBkZXBsb3lpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMgYW5kIHJ1bm5pbmcgdGVzdHMgb24gdGhlIFViaXF1aXRpIE5ldHdvcmtzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZVJvdXRlciBMaXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZXNlIHRlc3RzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMgYXQgdGhlIHRvcCBvZiB0aGUgRWRnZVJvdXRlclRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9lZGdlcm91dGVydGFyZ2V0LnB5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iR3J1YlRhcmdldCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgdGhlICJzdXBwb3J0cyBkZXBsb3lpbmcgaW1hZ2VzIGFuZCBydW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMgb24gYW55IGdlbmVyaWMgUEMgdGhhdCBib290cyB1c2luZyBHUlVCLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZXNlIHRlc3RzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMgYXQgdGhlIHRvcCBvZiB0aGUgR3J1YlRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9ncnVidGFyZ2V0LnB5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iPHJlcGxhY2VhYmxlPnlvdXItdGFyZ2V0PC9yZXBsYWNlYWJsZT4iOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIHlvdXIgb3duIGN1c3RvbSB0YXJnZXQgaWYgeW91IHdhbnQgdG8gcnVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMgd2hlbiB5b3UgYXJlIGRlcGxveWluZyBpbWFnZXMgYW5kIHJ1bm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cyBvbiBhIGN1c3RvbSBtYWNoaW5lIHdpdGhpbiB5b3VyIEJTUCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbyBkbyB0aGlzLCB5b3UgbmVlZCB0byBhZGQgYSBQeXRob24gdW5pdCB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcyB0aGUgdGFyZ2V0IGNsYXNzIHVuZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYi9vZXFhL2NvbnRyb2xsZXJzLzwvZmlsZW5hbWU+IHdpdGhpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgYWxzbyBwcm92aWRlIGFuIGVtcHR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9faW5pdF9fLnB5PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGVzLCBzZWUgZmlsZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by1ic3AvbGliL29lcWEvY29udHJvbGxlcnMvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3NlbGVjdGluZy1ndW1taWJvb3R0YXJnZXQnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5TZWxlY3RpbmcgR3VtbWlib290VGFyZ2V0PC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZGlkIG5vdCBzZXQgPGZpbGVuYW1lPlRFU1RfVEFSR0VUPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICAgICAgIkd1bW1pYm9vdFRhcmdldCIsIHRoZW4geW91IGRvIG5vdCBuZWVkIGFueSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2tpcCBkb3duIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncWVtdS1pbWFnZS1ydW5uaW5nLXRlc3RzJz5SdW5uaW5nIFRlc3RzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRpZCBzZXQgPGZpbGVuYW1lPlRFU1RfVEFSR0VUPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICAgICAgIkd1bW1pYm9vdFRhcmdldCIsIHlvdSBhbHNvIG5lZWQgdG8gcGVyZm9ybSBhIG9uZS10aW1lCisgICAgICAgICAgICAgICAgICAgIHNldHVwIG9mIHlvdXIgbWFzdGVyIGltYWdlIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2V0IDxmaWxlbmFtZT5FRklfUFJPVklERVI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdGhhdCA8ZmlsZW5hbWU+RUZJX1BST1ZJREVSPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRUZJX1BST1ZJREVSID0gImd1bW1pYm9vdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIHRoZSBtYXN0ZXIgaW1hZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCB0aGUgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtdGVzdG1hc3RlcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLXRlc3RtYXN0ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBpcyBwcm92aWRlZCBhcyBhbiBleGFtcGxlIGZvciBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hc3RlciIgaW1hZ2UgYW5kIHlvdSBjYW4gY3VzdG9taXplIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBhcyB5b3Ugd291bGQgYW55IG90aGVyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SGVyZSBhcmUgdGhlIGltYWdlIHJlY2lwZSByZXF1aXJlbWVudHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluaGVyaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbyB0aGF0IGtlcm5lbCBtb2R1bGVzIGFyZSBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluc3RhbGxzIG5vcm1hbCBsaW51eCB1dGlsaXRpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBidXN5Ym94IG9uZXMgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNoPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZXV0aWxzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGFyPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z3ppcDwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rbW9kPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2VzIGEgY3VzdG9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsIFJBTSBEaXNrIChpbml0cmFtZnMpIGltYWdlIHdpdGggYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tIGluc3RhbGxlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgbm9ybWFsIGltYWdlIHRoYXQgeW91IGNhbiBpbnN0YWxsIHVzdWFsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgYSBzaW5nbGUgcm9vdGZzIHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaW1hZ2UgdXNlcyBhbm90aGVyIGluc3RhbGxlciB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIGEgc3BlY2lmaWMgcGFydGl0aW9uIGxheW91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdCBhbGwgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiB1c2UgYW4gaW5zdGFsbGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHN1Y2ggY2FzZXMsIHlvdSBuZWVkIHRvIG1hbnVhbGx5IGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBwYXJ0aXRpb24gbGF5b3V0IG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rmlyc3QgcGFydGl0aW9uIG1vdW50ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXIgPGZpbGVuYW1lPi9ib290PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsZWQgImJvb3QiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIG1haW4gcm9vdGZzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbiB3aGVyZSB0aGlzIGltYWdlIGdldHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLCB3aGljaCBpcyBtb3VudGVkIHVuZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Bbm90aGVyIHBhcnRpdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbGVkICJ0ZXN0cm9vdGZzIiB3aGVyZSB0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcyBnZXQgZGVwbG95ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5zdGFsbCBpbWFnZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGwgdGhlIGltYWdlIHRoYXQgeW91IGp1c3QgYnVpbHQgb24gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIHRoaW5nIHlvdSBuZWVkIHRvIGRvIHdoZW4gc2V0dGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEVTVF9UQVJHRVQ8L2ZpbGVuYW1lPiB0byAiR3VtbWlib290VGFyZ2V0IiBpcworICAgICAgICAgICAgICAgICAgICB0byBzZXQgdXAgdGhlIHRlc3QgaW1hZ2U6CisgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2V0IHVwIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50cyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfRlNUWVBFUyArPSAidGFyLmd6IgorICAgICBJTkhFUklUICs9ICJ0ZXN0aW1hZ2UiCisgICAgIFRFU1RfVEFSR0VUID0gIkd1bW1pYm9vdFRhcmdldCIKKyAgICAgVEVTVF9UQVJHRVRfSVAgPSAiMTkyLjE2OC4yLjMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCB5b3VyIHRlc3QgaW1hZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgQml0QmFrZSB0byBidWlsZCB0aGUgaW1hZ2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3Bvd2VyLWNvbnRyb2wnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Qb3dlciBDb250cm9sPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9zdCBoYXJkd2FyZSB0YXJnZXRzIG90aGVyIHRoYW4gU2ltcGxlUmVtb3RlVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGNvbnRyb2wgcG93ZXI6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEVTVF9QT1dFUkNPTlRST0xfQ01EPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dldGhlciB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRFU1RfUE9XRVJDT05UUk9MX0VYVFJBX0FSR1M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgY29tbWFuZCB0aGF0IHJ1bnMgb24gdGhlIGhvc3QgYW5kIGRvZXMgcG93ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0ZXN0IGNvZGUgcGFzc2VzIG9uZSBhcmd1bWVudCB0byB0aGF0IGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmLCBvbiBvciBjeWNsZSAob2ZmIHRoZW4gb24pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNvdWxkIGFwcGVhciBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9QT1dFUkNPTlRST0xfQ01EID0gInBvd2VyY29udHJvbC5leHAgdGVzdCAxMC4xMS4xMi4xIG51YzEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIGV4cGVjdCBzY3JpcHQgZG9lcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBzc2ggdGVzdEAxMC4xMS4xMi4xICJweWN0bCBudWMxIDxyZXBsYWNlYWJsZT5hcmc8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgdGhlbiBydW5zIGEgUHl0aG9uIHNjcmlwdCB0aGF0IGNvbnRyb2xzIHBvd2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgbGFiZWwgY2FsbGVkIDxmaWxlbmFtZT5udWMxPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGN1c3RvbWl6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEVTVF9QT1dFUkNPTlRST0xfQ01EPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5URVNUX1BPV0VSQ09OVFJPTF9FWFRSQV9BUkdTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHlvdXIgb3duIHNldHVwLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgb25lIHJlcXVpcmVtZW50IGlzIHRoYXQgaXQgYWNjZXB0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24iLCAib2ZmIiwgYW5kICJjeWNsZSIgYXMgdGhlIGxhc3QgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gbm8gY29tbWFuZCBpcyBkZWZpbmVkLCBpdCBjb25uZWN0cyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2Ugb3ZlciBTU0ggYW5kIHVzZXMgdGhlIGNsYXNzaWMgcmVib290IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byByZWJvb3QgdGhlIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc2ljIHJlYm9vdCBpcyBmaW5lIGFzIGxvbmcgYXMgdGhlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxseSByZWJvb3RzIChpLmUuIHRoZSBTU0ggdGVzdCBoYXMgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBpcyB1c2VmdWwgZm9yIHNjZW5hcmlvcyB3aGVyZSB5b3UgaGF2ZSBhIHNpbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwLCB0eXBpY2FsbHkgd2l0aCBhIHNpbmdsZSBib2FyZCwgYW5kIHdoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29tZSBtYW51YWwgaW50ZXJhY3Rpb24gaXMgb2theSBmcm9tIHRpbWUgdG8gdGltZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIG5vIGhhcmR3YXJlIHRvIGF1dG9tYXRpY2FsbHkgcGVyZm9ybSBwb3dlcgorICAgICAgICAgICAgICAgICAgICBjb250cm9sIGJ1dCBzdGlsbCB3aXNoIHRvIGV4cGVyaW1lbnQgd2l0aCBhdXRvbWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgdGVzdGluZywgeW91IGNhbiB1c2UgdGhlIGRpYWxvZy1wb3dlci1jb250cm9sCisgICAgICAgICAgICAgICAgICAgIHNjcmlwdCB0aGF0IHNob3dzIGEgZGlhbG9nIHByb21wdGluZyB5b3UgdG8gcGVyZm9ybSB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgcG93ZXIgYWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNjcmlwdCByZXF1aXJlcyBlaXRoZXIgS0RpYWxvZyBvciBaZW5pdHkgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICBUbyB1c2UgdGhpcyBzY3JpcHQsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRFU1RfUE9XRVJDT05UUk9MX0NNRCc+PGZpbGVuYW1lPlRFU1RfUE9XRVJDT05UUk9MX0NNRDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX1BPV0VSQ09OVFJPTF9DTUQgPSAiJHtDT1JFQkFTRX0vc2NyaXB0cy9jb250cmliL2RpYWxvZy1wb3dlci1jb250cm9sIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nc2VyaWFsLWNvbnNvbGUtY29ubmVjdGlvbic+CisgICAgICAgICAgICAgICAgPHRpdGxlPlNlcmlhbCBDb25zb2xlIENvbm5lY3Rpb248L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciB0ZXN0IHRhcmdldCBjbGFzc2VzIHJlcXVpcmluZyBhIHNlcmlhbCBjb25zb2xlCisgICAgICAgICAgICAgICAgICAgIHRvIGludGVyYWN0IHdpdGggdGhlIGJvb3Rsb2FkZXIgKGUuZy4gQmVhZ2xlQm9uZVRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgRWRnZVJvdXRlclRhcmdldCwgYW5kIEdydWJUYXJnZXQpLCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGEgY29tbWFuZCB0byB1c2UgdG8gY29ubmVjdCB0byB0aGUgc2VyaWFsIGNvbnNvbGUKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHRhcmdldCBtYWNoaW5lIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVEVTVF9TRVJJQUxDT05UUk9MX0NNRCc+PGZpbGVuYW1lPlRFU1RfU0VSSUFMQ09OVFJPTF9DTUQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCBvcHRpb25hbGx5IHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVEVTVF9TRVJJQUxDT05UUk9MX0VYVFJBX0FSR1MnPjxmaWxlbmFtZT5URVNUX1NFUklBTENPTlRST0xfRVhUUkFfQVJHUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGNhc2VzIGNvdWxkIGJlIGEgc2VyaWFsIHRlcm1pbmFsIHByb2dyYW0gaWYgdGhlCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgaXMgY29ubmVjdGVkIHRvIGEgbG9jYWwgc2VyaWFsIHBvcnQsIG9yIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRlbG5ldDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zc2g8L2ZpbGVuYW1lPiBjb21tYW5kIGNvbm5lY3RpbmcgdG8gYSByZW1vdGUKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgIFJlZ2FyZGxlc3Mgb2YgdGhlIGNhc2UsIHRoZSBjb21tYW5kIHNpbXBseSBuZWVkcyB0bworICAgICAgICAgICAgICAgICAgICBjb25uZWN0IHRvIHRoZSBzZXJpYWwgY29uc29sZSBhbmQgZm9yd2FyZCB0aGF0IGNvbm5lY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgdG8gc3RhbmRhcmQgaW5wdXQgYW5kIG91dHB1dCBhcyBhbnkgbm9ybWFsIHRlcm1pbmFsCisgICAgICAgICAgICAgICAgICAgIHByb2dyYW0gZG9lcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIHVzZSB0aGUgcGljb2NvbSB0ZXJtaW5hbCBwcm9ncmFtIG9uCisgICAgICAgICAgICAgICAgICAgIHNlcmlhbCBkZXZpY2UgPGZpbGVuYW1lPi9kZXYvdHR5VVNCMDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGF0IDExNTIwMGJwcywgeW91IHdvdWxkIHNldCB0aGUgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX1NFUklBTENPTlRST0xfQ01EID0gInBpY29jb20gL2Rldi90dHlVU0IwIC1iIDExNTIwMCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgbG9jYWwgZGV2aWNlcyB3aGVyZSB0aGUgc2VyaWFsIHBvcnQgZGV2aWNlIGRpc2FwcGVhcnMKKyAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgZGV2aWNlIHJlYm9vdHMsIGFuIGFkZGl0aW9uYWwgInNlcmRldnRyeSIgd3JhcHBlcgorICAgICAgICAgICAgICAgICAgICBzY3JpcHQgaXMgcHJvdmlkZWQuCisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSB0aGlzIHdyYXBwZXIsIHNpbXBseSBwcmVmaXggdGhlIHRlcm1pbmFsIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgd2l0aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtDT1JFQkFTRX0vc2NyaXB0cy9jb250cmliL3NlcmRldnRyeTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFU1RfU0VSSUFMQ09OVFJPTF9DTUQgPSAiJHtDT1JFQkFTRX0vc2NyaXB0cy9jb250cmliL3NlcmRldnRyeSBwaWNvY29tIC1iCisxMTUyMDAgL2Rldi90dHlVU0IwIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InFlbXUtaW1hZ2UtcnVubmluZy10ZXN0cyI+CisgICAgICAgICAgICA8dGl0bGU+UnVubmluZyBUZXN0czwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gc3RhcnQgdGhlIHRlc3RzIGF1dG9tYXRpY2FsbHkgb3IgbWFudWFsbHk6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BdXRvbWF0aWNhbGx5IHJ1bm5pbmcgdGVzdHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIHJ1biB0aGUgdGVzdHMgYXV0b21hdGljYWxseSBhZnRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3VjY2Vzc2Z1bGx5IGNyZWF0ZXMgYW4gaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVEVTVF9JTUFHRSc+PGZpbGVuYW1lPlRFU1RfSU1BR0U8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byAiMSIgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9JTUFHRSA9ICIxIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgTmV4dCwgYnVpbGQgeW91ciBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBpbWFnZSBzdWNjZXNzZnVsbHkgYnVpbGRzLCB0aGUgdGVzdHMgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgcnVuOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1hbnVhbGx5IHJ1bm5pbmcgdGVzdHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIG1hbnVhbGx5IHJ1biB0aGUgdGVzdHMsIGZpcnN0IGdsb2JhbGx5IGluaGVyaXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy10ZXN0aW1hZ2UnPjxmaWxlbmFtZT50ZXN0aW1hZ2U8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBieSBlZGl0aW5nIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBJTkhFUklUICs9ICJ0ZXN0aW1hZ2UiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBOZXh0LCB1c2UgQml0QmFrZSB0byBydW4gdGhlIHRlc3RzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBiaXRiYWtlIC1jIHRlc3RpbWFnZSA8cmVwbGFjZWFibGU+aW1hZ2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbGwgdGVzdCBmaWxlcyByZXNpZGUgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9saWIvb2VxYS9ydW50aW1lPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgQSB0ZXN0IG5hbWUgbWFwcyBkaXJlY3RseSB0byBhIFB5dGhvbiBtb2R1bGUuCisgICAgICAgICAgICAgICAgRWFjaCB0ZXN0IG1vZHVsZSBtYXkgY29udGFpbiBhIG51bWJlciBvZiBpbmRpdmlkdWFsIHRlc3RzLgorICAgICAgICAgICAgICAgIFRlc3RzIGFyZSB1c3VhbGx5IGdyb3VwZWQgdG9nZXRoZXIgYnkgdGhlIGFyZWEKKyAgICAgICAgICAgICAgICB0ZXN0ZWQgKGUuZyB0ZXN0cyBmb3Igc3lzdGVtZCByZXNpZGUgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9saWIvb2VxYS9ydW50aW1lL3N5c3RlbWQucHk8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWRkIHRlc3RzIHRvIGFueSBsYXllciBwcm92aWRlZCB5b3UgcGxhY2UgdGhlbSBpbiB0aGUKKyAgICAgICAgICAgICAgICBwcm9wZXIgYXJlYSBhbmQgeW91IGV4dGVuZAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBhcyBub3JtYWwuCisgICAgICAgICAgICAgICAgQmUgc3VyZSB0aGF0IHRlc3RzIHJlc2lkZSBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48cmVwbGFjZWFibGU+bGF5ZXI8L3JlcGxhY2VhYmxlPi9saWIvb2VxYS9ydW50aW1lPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdGhhdCBtb2R1bGUgbmFtZXMgZG8gbm90IGNvbGxpZGUgd2l0aCBtb2R1bGUgbmFtZXMKKyAgICAgICAgICAgICAgICAgICAgdXNlZCBpbiB0aGUgZGVmYXVsdCBzZXQgb2YgdGVzdCBtb2R1bGVzIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2xpYi9vZXFhL3J1bnRpbWU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gY2hhbmdlIHRoZSBzZXQgb2YgdGVzdHMgcnVuIGJ5IGFwcGVuZGluZyBvciBvdmVycmlkaW5nCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRFU1RfU1VJVEVTJz48ZmlsZW5hbWU+VEVTVF9TVUlURVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBFYWNoIG5hbWUgaW4gPGZpbGVuYW1lPlRFU1RfU1VJVEVTPC9maWxlbmFtZT4gcmVwcmVzZW50cyBhCisgICAgICAgICAgICAgICAgcmVxdWlyZWQgdGVzdCBmb3IgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIFRlc3QgbW9kdWxlcyBuYW1lZCB3aXRoaW4gPGZpbGVuYW1lPlRFU1RfU1VJVEVTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjYW5ub3QgYmUgc2tpcHBlZCBldmVuIGlmIGEgdGVzdCBpcyBub3Qgc3VpdGFibGUgZm9yIGFuIGltYWdlCisgICAgICAgICAgICAgICAgKGUuZy4gcnVubmluZyB0aGUgUlBNIHRlc3RzIG9uIGFuIGltYWdlIHdpdGhvdXQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cnBtPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIEFwcGVuZGluZyAiYXV0byIgdG8gPGZpbGVuYW1lPlRFU1RfU1VJVEVTPC9maWxlbmFtZT4gY2F1c2VzIHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0byB0cnkgdG8gcnVuIGFsbCB0ZXN0cyB0aGF0IGFyZSBzdWl0YWJsZSBmb3IgdGhlCisgICAgICAgICAgICAgICAgaW1hZ2UgKGkuZS4gZWFjaCB0ZXN0IG1vZHVsZSBtYXkgZWxlY3QgdG8gc2tpcCBpdHNlbGYpLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgb3JkZXIgeW91IGxpc3QgdGVzdHMgaW4gPGZpbGVuYW1lPlRFU1RfU1VJVEVTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBpcyBpbXBvcnRhbnQgYW5kIGluZmx1ZW5jZXMgdGVzdCBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0ZXN0cyB0aGF0IGRlcGVuZCBvbiBvdGhlciB0ZXN0cyBzaG91bGQgYmUgYWRkZWQKKyAgICAgICAgICAgICAgICBhZnRlciB0aGUgdGVzdCBvbiB3aGljaCB0aGV5IGRlcGVuZC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc2luY2UgdGhlIDxmaWxlbmFtZT5zc2g8L2ZpbGVuYW1lPiB0ZXN0CisgICAgICAgICAgICAgICAgZGVwZW5kcyBvbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGluZzwvZmlsZW5hbWU+IHRlc3QsICJzc2giIG5lZWRzIHRvIGNvbWUgYWZ0ZXIKKyAgICAgICAgICAgICAgICAicGluZyIgaW4gdGhlIGxpc3QuCisgICAgICAgICAgICAgICAgVGhlIHRlc3QgY2xhc3MgcHJvdmlkZXMgbm8gcmUtb3JkZXJpbmcgb3IgZGVwZW5kZW5jeSBoYW5kbGluZy4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRWFjaCBtb2R1bGUgY2FuIGhhdmUgbXVsdGlwbGUgY2xhc3NlcyB3aXRoIG11bHRpcGxlIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy4KKyAgICAgICAgICAgICAgICAgICAgQW5kLCBQeXRob24gPGZpbGVuYW1lPnVuaXR0ZXN0PC9maWxlbmFtZT4gcnVsZXMgYXBwbHkuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIHRoaW5ncyB0byBrZWVwIGluIG1pbmQgd2hlbiBydW5uaW5nIHRlc3RzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgZGVmYXVsdCB0ZXN0cyBmb3IgdGhlIGltYWdlIGFyZSBkZWZpbmVkCisgICAgICAgICAgICAgICAgICAgICAgICBhczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVGQVVMVF9URVNUX1NVSVRFU19wbi08cmVwbGFjZWFibGU+aW1hZ2U8L3JlcGxhY2VhYmxlPiA9ICJwaW5nIHNzaCBkZiBjb25ubWFuIHN5c2xvZyB4b3JnIHNjcCB2bmMgZGF0ZSBycG0gc21hcnQgZG1lc2ciCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgeW91ciBvd24gdGVzdCB0byB0aGUgbGlzdCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFU1RfU1VJVEVTX2FwcGVuZCA9ICIgbXl0ZXN0IgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UnVuIGEgc3BlY2lmaWMgbGlzdCBvZiB0ZXN0cyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX1NVSVRFUyA9ICJ0ZXN0MSB0ZXN0MiB0ZXN0MyIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlbWVtYmVyLCBvcmRlciBpcyBpbXBvcnRhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHBsYWNlIGEgdGVzdCB0aGF0IGlzIGRlcGVuZGVudCBvbiBhbm90aGVyIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhdGVyIGluIHRoZSBvcmRlci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJleHBvcnRpbmctdGVzdHMiPgorICAgICAgICAgICAgPHRpdGxlPkV4cG9ydGluZyBUZXN0czwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZXhwb3J0IHRlc3RzIHNvIHRoYXQgdGhleSBjYW4gcnVuIGluZGVwZW5kZW50bHkgb2YKKyAgICAgICAgICAgICAgICB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIEV4cG9ydGluZyB0ZXN0cyBpcyByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGhhbmQKKyAgICAgICAgICAgICAgICB0aGUgdGVzdCBleGVjdXRpb24gb2ZmIHRvIGEgc2NoZWR1bGVyLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gb25seSBleHBvcnQgdGVzdHMgdGhhdCBhcmUgZGVmaW5lZCBpbgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1URVNUX1NVSVRFUyc+PGZpbGVuYW1lPlRFU1RfU1VJVEVTPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91ciBpbWFnZSBpcyBhbHJlYWR5IGJ1aWx0LCBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBhcmUgc2V0CisgICAgICAgICAgICAgICAgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBwcm92aWRlIHRoZSBJUCBhZGRyZXNzIHlvdSBuZWVkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9FWFBPUlRfT05MWSA9ICIxIgorICAgICBURVNUX1RBUkdFVCA9ICJzaW1wbGVyZW1vdGUiCisgICAgIFRFU1RfVEFSR0VUX0lQID0gIjE5Mi4xNjguNy4yIgorICAgICBURVNUX1NFUlZFUl9JUCA9ICIxOTIuMTY4LjcuMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiB0aGVuIGV4cG9ydCB0aGUgdGVzdHMgd2l0aCB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byAtYyB0ZXN0aW1hZ2UKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRXhwb3J0aW5nIHRoZSB0ZXN0cyBwbGFjZXMgdGhlbSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4gaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL3Rlc3RpbWFnZS9jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiwgd2hpY2gKKyAgICAgICAgICAgICAgICBpcyBjb250cm9sbGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5URVNUX0VYUE9SVF9ESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBub3cgcnVuIHRoZSB0ZXN0cyBvdXRzaWRlIG9mIHRoZSBidWlsZCBlbnZpcm9ubWVudDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgdG1wL3Rlc3RpbWFnZS9jb3JlLWltYWdlLXNhdG8KKyAgICAgJCAuL3J1bmV4cG9ydGVkLnB5IHRlc3RkYXRhLmpzb24KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgImV4cG9ydCIgZmVhdHVyZSBkb2VzIG5vdCBkZXBsb3kgb3IgYm9vdCB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBZb3VyIHRhcmdldCAoYmUgaXQgYSBRZW11IG9yIGhhcmR3YXJlIG9uZSkKKyAgICAgICAgICAgICAgICAgICAgaGFzIHRvIGFscmVhZHkgYmUgdXAgYW5kIHJ1bm5pbmcgd2hlbiB5b3UgY2FsbAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cnVuZXhwb3J0ZWQucHk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGV4cG9ydGVkIGRhdGEgKGkuZS4gPGZpbGVuYW1lPnRlc3RkYXRhLmpzb248L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICBjb250YWlucyBwYXRocyB0byB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIFRodXMsIHRoZSBjb250ZW50cyBvZiB0aGUgZGlyZWN0b3J5IGNhbiBiZSBtb3ZlZAorICAgICAgICAgICAgICAgIHRvIGFub3RoZXIgbWFjaGluZSBhcyBsb25nIGFzIHlvdSB1cGRhdGUgc29tZSBwYXRocyBpbiB0aGUKKyAgICAgICAgICAgICAgICBKU09OLgorICAgICAgICAgICAgICAgIFVzdWFsbHksIHlvdSBvbmx5IGNhcmUgYWJvdXQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7REVQTE9ZX0RJUn0vcnBtPC9maWxlbmFtZT4gZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgKGFzc3VtaW5nIHRoZSBSUE0gYW5kIFNtYXJ0IHRlc3RzIGFyZSBlbmFibGVkKS4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHJ1bm5pbmcgdGhlIHRlc3RzIG9uIG90aGVyIG1hY2hpbmUKKyAgICAgICAgICAgICAgICBtZWFucyB0aGF0IHlvdSBoYXZlIHRvIG1vdmUgdGhlIGNvbnRlbnRzIGFuZCBjYWxsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bmV4cG9ydGVkLnB5PC9maWxlbmFtZT4gd2l0aAorICAgICAgICAgICAgICAgICItLWRlcGxveS1kaXIgPHJlcGxhY2VhYmxlPnBhdGg8L3JlcGxhY2VhYmxlPiIgYXMKKyAgICAgICAgICAgICAgICBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgLi9ydW5leHBvcnRlZC5weSAtLWRlcGxveS1kaXIgL25ldy9wYXRoL29uL3RoaXMvbWFjaGluZSB0ZXN0ZGF0YS5qc29uCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5leHBvcnRlZC5weTwvZmlsZW5hbWU+IGFjY2VwdHMgb3RoZXIgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgYXMgd2VsbCBhcyBkZXNjcmliZWQgdXNpbmcgPGZpbGVuYW1lPi0taGVscDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InFlbXUtaW1hZ2Utd3JpdGluZy1uZXctdGVzdHMiPgorICAgICAgICAgICAgPHRpdGxlPldyaXRpbmcgTmV3IFRlc3RzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgbWVudGlvbmVkIHByZXZpb3VzbHksIGFsbCBuZXcgdGVzdCBmaWxlcyBuZWVkIHRvIGJlIGluIHRoZQorICAgICAgICAgICAgICAgIHByb3BlciBwbGFjZSBmb3IgdGhlIGJ1aWxkIHN5c3RlbSB0byBmaW5kIHRoZW0uCisgICAgICAgICAgICAgICAgTmV3IHRlc3RzIGZvciBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgb3V0c2lkZSBvZiB0aGUgY29yZQorICAgICAgICAgICAgICAgIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgbGF5ZXIgdGhhdCBhZGRzIHRoZSBmdW5jdGlvbmFsaXR5LCBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48cmVwbGFjZWFibGU+bGF5ZXI8L3JlcGxhY2VhYmxlPi9saWIvb2VxYS9ydW50aW1lPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAoYXMgbG9uZyBhcworICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgaXMgZXh0ZW5kZWQgaW4gdGhlIGxheWVyJ3MKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUgYXMgbm9ybWFsKS4KKyAgICAgICAgICAgICAgICBKdXN0IHJlbWVtYmVyIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZpbGVuYW1lcyBuZWVkIHRvIG1hcCBkaXJlY3RseSB0byB0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAobW9kdWxlKSBuYW1lcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RG8gbm90IHVzZSBtb2R1bGUgbmFtZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlkZSB3aXRoIGV4aXN0aW5nIGNvcmUgdGVzdHMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1pbmltYWxseSwgYW4gZW1wdHkKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fX2luaXRfXy5weTwvZmlsZW5hbWU+IGZpbGUgbXVzdCBleGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHJ1bnRpbWUgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGNyZWF0ZSBhIG5ldyB0ZXN0LCBzdGFydCBieSBjb3B5aW5nIGFuIGV4aXN0aW5nIG1vZHVsZQorICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5zeXNsb2cucHk8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nY2MucHk8L2ZpbGVuYW1lPiBhcmUgZ29vZCBvbmVzIHRvIHVzZSkuCisgICAgICAgICAgICAgICAgVGVzdCBtb2R1bGVzIGNhbiB1c2UgY29kZSBmcm9tCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvbGliL29lcWEvdXRpbHM8L2ZpbGVuYW1lPiwgd2hpY2ggYXJlIGhlbHBlcgorICAgICAgICAgICAgICAgIGNsYXNzZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFN0cnVjdHVyZSBzaGVsbCBjb21tYW5kcyBzdWNoIHRoYXQgeW91IHJlbHkgb24gdGhlbSBhbmQgdGhleQorICAgICAgICAgICAgICAgIHJldHVybiBhIHNpbmdsZSBjb2RlIGZvciBzdWNjZXNzLgorICAgICAgICAgICAgICAgIEJlIGF3YXJlIHRoYXQgc29tZXRpbWVzIHlvdSB3aWxsIG5lZWQgdG8gcGFyc2UgdGhlIG91dHB1dC4KKyAgICAgICAgICAgICAgICBTZWUgdGhlIDxmaWxlbmFtZT5kZi5weTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kYXRlLnB5PC9maWxlbmFtZT4gbW9kdWxlcyBmb3IgZXhhbXBsZXMuCisgICAgICAgICAgICA8L25vdGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSB3aWxsIG5vdGljZSB0aGF0IGFsbCB0ZXN0IGNsYXNzZXMgaW5oZXJpdAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZVJ1bnRpbWVUZXN0PC9maWxlbmFtZT4sIHdoaWNoIGlzIGZvdW5kIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvbGliL29ldGVzdC5weTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoaXMgYmFzZSBjbGFzcyBvZmZlcnMgc29tZSBoZWxwZXIgYXR0cmlidXRlcywgd2hpY2ggYXJlCisgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdxZW11LWltYWdlLXdyaXRpbmctdGVzdHMtY2xhc3MtbWV0aG9kcyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNsYXNzIE1ldGhvZHM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENsYXNzIG1ldGhvZHMgYXJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5oYXNQYWNrYWdlKHBrZyk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgIlRydWUiIGlmIDxmaWxlbmFtZT5wa2c8L2ZpbGVuYW1lPiBpcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgcGFja2FnZSBsaXN0IG9mIHRoZSBpbWFnZSwgd2hpY2ggaXMgYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgbWFuaWZlc3QgZmlsZSB0aGF0IGlzIGdlbmVyYXRlZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3Jvb3RmczwvZmlsZW5hbWU+IHRhc2suCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5oYXNGZWF0dXJlKGZlYXR1cmUpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5zICJUcnVlIiBpZiB0aGUgZmVhdHVyZSBpcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3FlbXUtaW1hZ2Utd3JpdGluZy10ZXN0cy1jbGFzcy1hdHRyaWJ1dGVzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q2xhc3MgQXR0cmlidXRlczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ2xhc3MgYXR0cmlidXRlcyBhcmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBzY21kPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcXVhbHMgInBzIC1lZiIgaWYgPGZpbGVuYW1lPnByb2NwczwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGluIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UsIDxmaWxlbmFtZT5wc2NtZDwvZmlsZW5hbWU+IGVxdWFscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcyIgKGJ1c3lib3gpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dGM8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjYWxsZWQgdGVzdCBjb250ZXh0LCB3aGljaCBnaXZlcyBhY2Nlc3MgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgQml0QmFrZSBkYXRhc3RvcmUsIHdoaWNoIGFsbG93cyB5b3UgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSBzdHVmZiBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciIpPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dGVzdHNsaXN0PC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT50ZXN0c3JlcXVpcmVkPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWQgaW50ZXJuYWxseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0ZXN0cyBkbyBub3QgbmVlZCB0aGVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5maWxlc2RpcjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYWJzb2x1dGUgcGF0aCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvbGliL29lcWEvcnVudGltZS9maWxlczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggY29udGFpbnMgaGVscGVyIGZpbGVzIGZvciB0ZXN0cyBtZWFudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNvcHlpbmcgb24gdGhlIHRhcmdldCBzdWNoIGFzIHNtYWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyB3cml0dGVuIGluIEMgZm9yIGNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnRhcmdldDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0IGNvbnRyb2xsZXIgb2JqZWN0IHVzZWQgdG8gZGVwbG95CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc3RhcnQgYW4gaW1hZ2Ugb24gYSBwYXJ0aWN1bGFyIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gUWVtdVRhcmdldCwgU2ltcGxlUmVtb3RlLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd1bW1pYm9vdFRhcmdldCkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0cyB1c3VhbGx5IHVzZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5pcDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJnZXQncyBJUCBhZGRyZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zZXJ2ZXJfaXA8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgaG9zdCdzIElQIGFkZHJlc3MsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzdWFsbHkgdXNlZCBieSB0aGUgInNtYXJ0IiB0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5ydW4oY21kLCB0aW1lb3V0PU5vbmUpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNpbmdsZSwgbW9zdCB1c2VkIG1ldGhvZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGlzIGEgd3JhcHBlciBmb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zc2ggcm9vdEBob3N0ICJjbWQiPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIHJldHVybnMgYSB0dXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSwgd2hpY2ggYXJlIHdoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlaXIgbmFtZXMgaW1wbHkgLSB0aGUgcmV0dXJuIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgImNtZCIgYW5kIHdoYXRldmVyIG91dHB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBwcm9kdWNlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHRpbWVvdXQgYXJndW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Qgc2hvdWxkIHdhaXQgZm9yICJjbWQiIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzICJOb25lIiwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QgdXNlcyB0aGUgZGVmYXVsdCBpbnN0YW5jZSdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgcGVyaW9kLCB3aGljaCBpcyAzMDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzICIwIiwgdGhlIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVucyB1bnRpbCB0aGUgY29tbWFuZCByZXR1cm5zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5jb3B5X3RvKGxvY2FscGF0aCwgcmVtb3RlcGF0aCk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NwIGxvY2FscGF0aCByb290QGlwOnJlbW90ZXBhdGg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Y29weV9mcm9tKHJlbW90ZXBhdGgsIGxvY2FscGF0aCk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NwIHJvb3RAaG9zdDpyZW1vdGVwYXRoIGxvY2FscGF0aDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdxZW11LWltYWdlLXdyaXRpbmctdGVzdHMtaW5zdGFuY2UtYXR0cmlidXRlcyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkluc3RhbmNlIEF0dHJpYnV0ZXM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgc2luZ2xlIGluc3RhbmNlIGF0dHJpYnV0ZSBleGlzdHMsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50YXJnZXQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT50YXJnZXQ8L2ZpbGVuYW1lPiBpbnN0YW5jZSBhdHRyaWJ1dGUgaXMKKyAgICAgICAgICAgICAgICAgICAgaWRlbnRpY2FsIHRvIHRoZSBjbGFzcyBhdHRyaWJ1dGUgb2YgdGhlIHNhbWUgbmFtZSwgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgaXMgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBleGlzdHMgYXMgYm90aCBhbiBpbnN0YW5jZSBhbmQgY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIHNvIHRlc3RzIGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNlbGYudGFyZ2V0LnJ1bihjbWQpPC9maWxlbmFtZT4gaW4gaW5zdGFuY2UKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kcyBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5ydW4oY21kKTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1ZyI+CisgICAgICAgIDx0aXRsZT5EZWJ1Z2dpbmcgV2l0aCB0aGUgR05VIFByb2plY3QgRGVidWdnZXIgKEdEQikgUmVtb3RlbHk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgR0RCIGFsbG93cyB5b3UgdG8gZXhhbWluZSBydW5uaW5nIHByb2dyYW1zLCB3aGljaCBpbiB0dXJuIGhlbHBzIHlvdSB0byB1bmRlcnN0YW5kIGFuZCBmaXggcHJvYmxlbXMuCisgICAgICAgICAgICBJdCBhbHNvIGFsbG93cyB5b3UgdG8gcGVyZm9ybSBwb3N0LW1vcnRlbSBzdHlsZSBhbmFseXNpcyBvZiBwcm9ncmFtIGNyYXNoZXMuCisgICAgICAgICAgICBHREIgaXMgYXZhaWxhYmxlIGFzIGEgcGFja2FnZSB3aXRoaW4gdGhlIFlvY3RvIFByb2plY3QgYW5kIGlzCisgICAgICAgICAgICBpbnN0YWxsZWQgaW4gU0RLIGltYWdlcyBieSBkZWZhdWx0LgorICAgICAgICAgICAgU2VlIHRoZSAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWltYWdlcyc+SW1hZ2VzPC91bGluaz4iIGNoYXB0ZXIKKyAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlc2UgaW1hZ2VzLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIG9uIEdEQiBhdCA8dWxpbmsgdXJsPSJodHRwOi8vc291cmNld2FyZS5vcmcvZ2RiLyIvPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDx0aXA+CisgICAgICAgICAgICBGb3IgYmVzdCByZXN1bHRzLCBpbnN0YWxsIGRlYnVnICg8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+KSBwYWNrYWdlcworICAgICAgICAgICAgZm9yIHRoZSBhcHBsaWNhdGlvbnMgeW91IGFyZSBnb2luZyB0byBkZWJ1Zy4KKyAgICAgICAgICAgIERvaW5nIHNvIG1ha2VzIGV4dHJhIGRlYnVnIHN5bWJvbHMgYXZhaWxhYmxlIHRoYXQgZ2l2ZSB5b3UgbW9yZQorICAgICAgICAgICAgbWVhbmluZ2Z1bCBvdXRwdXQuCisgICAgICAgIDwvdGlwPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU29tZXRpbWVzLCBkdWUgdG8gbWVtb3J5IG9yIGRpc2sgc3BhY2UgY29uc3RyYWludHMsIGl0IGlzIG5vdCBwb3NzaWJsZQorICAgICAgICAgICAgdG8gdXNlIEdEQiBkaXJlY3RseSBvbiB0aGUgcmVtb3RlIHRhcmdldCB0byBkZWJ1ZyBhcHBsaWNhdGlvbnMuCisgICAgICAgICAgICBUaGVzZSBjb25zdHJhaW50cyBhcmlzZSBiZWNhdXNlIEdEQiBuZWVkcyB0byBsb2FkIHRoZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYW5kIHRoZQorICAgICAgICAgICAgYmluYXJpZXMgb2YgdGhlIHByb2Nlc3MgYmVpbmcgZGVidWdnZWQuCisgICAgICAgICAgICBBZGRpdGlvbmFsbHksIEdEQiBuZWVkcyB0byBwZXJmb3JtIG1hbnkgY29tcHV0YXRpb25zIHRvIGxvY2F0ZSBpbmZvcm1hdGlvbiBzdWNoIGFzIGZ1bmN0aW9uCisgICAgICAgICAgICBuYW1lcywgdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlcywgc3RhY2sgdHJhY2VzIGFuZCBzbyBmb3J0aCAtIGV2ZW4gYmVmb3JlIHN0YXJ0aW5nIHRoZQorICAgICAgICAgICAgZGVidWdnaW5nIHByb2Nlc3MuCisgICAgICAgICAgICBUaGVzZSBleHRyYSBjb21wdXRhdGlvbnMgcGxhY2UgbW9yZSBsb2FkIG9uIHRoZSB0YXJnZXQgc3lzdGVtIGFuZCBjYW4gYWx0ZXIgdGhlCisgICAgICAgICAgICBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGhlbHAgZ2V0IHBhc3QgdGhlIHByZXZpb3VzbHkgbWVudGlvbmVkIGNvbnN0cmFpbnRzLCB5b3UgY2FuIHVzZSBHZGJzZXJ2ZXIuCisgICAgICAgICAgICBHZGJzZXJ2ZXIgcnVucyBvbiB0aGUgcmVtb3RlIHRhcmdldCBhbmQgZG9lcyBub3QgbG9hZCBhbnkgZGVidWdnaW5nIGluZm9ybWF0aW9uCisgICAgICAgICAgICBmcm9tIHRoZSBkZWJ1Z2dlZCBwcm9jZXNzLgorICAgICAgICAgICAgSW5zdGVhZCwgYSBHREIgaW5zdGFuY2UgcHJvY2Vzc2VzIHRoZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdGhhdCBpcyBydW4gb24gYQorICAgICAgICAgICAgcmVtb3RlIGNvbXB1dGVyIC0gdGhlIGhvc3QgR0RCLgorICAgICAgICAgICAgVGhlIGhvc3QgR0RCIHRoZW4gc2VuZHMgY29udHJvbCBjb21tYW5kcyB0byBHZGJzZXJ2ZXIgdG8gbWFrZSBpdCBzdG9wIG9yIHN0YXJ0IHRoZSBkZWJ1Z2dlZAorICAgICAgICAgICAgcHJvZ3JhbSwgYXMgd2VsbCBhcyByZWFkIG9yIHdyaXRlIG1lbW9yeSByZWdpb25zIG9mIHRoYXQgZGVidWdnZWQgcHJvZ3JhbS4KKyAgICAgICAgICAgIEFsbCB0aGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGxvYWRlZCBhbmQgcHJvY2Vzc2VkIGFzIHdlbGwKKyAgICAgICAgICAgIGFzIGFsbCB0aGUgaGVhdnkgZGVidWdnaW5nIGlzIGRvbmUgYnkgdGhlIGhvc3QgR0RCLgorICAgICAgICAgICAgT2ZmbG9hZGluZyB0aGVzZSBwcm9jZXNzZXMgZ2l2ZXMgdGhlIEdkYnNlcnZlciBydW5uaW5nIG9uIHRoZSB0YXJnZXQgYSBjaGFuY2UgdG8gcmVtYWluCisgICAgICAgICAgICBzbWFsbCBhbmQgZmFzdC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHNvdXJjZSBmaWxlcyBhcmUgcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki1kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlcyBpbiBvcmRlciB0byBlbmFibGUgR0RCCisgICAgICAgICAgICAgICAgdG8gc2hvdyBzb3VyY2UgbGluZXMgaW4gaXRzIG91dHB1dC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHNhdmUgZnVydGhlciBzcGFjZSBvbiB0aGUgdGFyZ2V0IGJ5IHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUnPjxmaWxlbmFtZT5QQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvICJkZWJ1Zy13aXRob3V0LXNyYyIgc28gdGhhdCB0aGVzZSBwYWNrYWdlcyBkbyBub3QKKyAgICAgICAgICAgICAgICBpbmNsdWRlIHRoZSBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlY2F1c2UgdGhlIGhvc3QgR0RCIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIHRoZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYW5kCisgICAgICAgICAgICBmb3IgZG9pbmcgdGhlIG5lY2Vzc2FyeSBwcm9jZXNzaW5nIHRvIG1ha2UgYWN0dWFsIGRlYnVnZ2luZyBoYXBwZW4sCisgICAgICAgICAgICB5b3UgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIGhvc3QgY2FuIGFjY2VzcyB0aGUgdW5zdHJpcHBlZCBiaW5hcmllcyBjb21wbGV0ZQorICAgICAgICAgICAgd2l0aCB0aGVpciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYW5kIGFsc28gYmUgc3VyZSB0aGUgdGFyZ2V0IGlzIGNvbXBpbGVkIHdpdGggbm8gb3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAgIFRoZSBob3N0IEdEQiBtdXN0IGFsc28gaGF2ZSBsb2NhbCBhY2Nlc3MgdG8gYWxsIHRoZSBsaWJyYXJpZXMgdXNlZCBieSB0aGUKKyAgICAgICAgICAgIGRlYnVnZ2VkIHByb2dyYW0uCisgICAgICAgICAgICBCZWNhdXNlIEdkYnNlcnZlciBkb2VzIG5vdCBuZWVkIGFueSBsb2NhbCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24sIHRoZSBiaW5hcmllcyBvbgorICAgICAgICAgICAgdGhlIHJlbW90ZSB0YXJnZXQgY2FuIHJlbWFpbiBzdHJpcHBlZC4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBiaW5hcmllcyBtdXN0IGFsc28gYmUgY29tcGlsZWQgd2l0aG91dCBvcHRpbWl6YXRpb24KKyAgICAgICAgICAgIHNvIHRoZXkgbWF0Y2ggdGhlIGhvc3QncyBiaW5hcmllcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gcmVtYWluIGNvbnNpc3RlbnQgd2l0aCBHREIgZG9jdW1lbnRhdGlvbiBhbmQgdGVybWlub2xvZ3ksIHRoZSBiaW5hcnkgYmVpbmcgZGVidWdnZWQKKyAgICAgICAgICAgIG9uIHRoZSByZW1vdGUgdGFyZ2V0IG1hY2hpbmUgaXMgcmVmZXJyZWQgdG8gYXMgdGhlICJpbmZlcmlvciIgYmluYXJ5LgorICAgICAgICAgICAgRm9yIGRvY3VtZW50YXRpb24gb24gR0RCIHNlZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9nZGIvZG9jdW1lbnRhdGlvbi8iPkdEQiBzaXRlPC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgc3RlcHMgeW91IG5lZWQgdG8gdGFrZQorICAgICAgICAgICAgdG8gZGVidWcgdXNpbmcgdGhlIEdOVSBwcm9qZWN0IGRlYnVnZ2VyLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3BsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnLXNldHVwJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXQgVXAgdGhlIENyb3NzLURldmVsb3BtZW50IERlYnVnZ2luZyBFbnZpcm9ubWVudDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlZm9yZSB5b3UgY2FuIGluaXRpYXRlIGEgcmVtb3RlIGRlYnVnZ2luZyBzZXNzaW9uLCB5b3UgbmVlZAorICAgICAgICAgICAgICAgIHRvIGJlIHN1cmUgeW91IGhhdmUgc2V0IHVwIHRoZSBjcm9zcy1kZXZlbG9wbWVudCBlbnZpcm9ubWVudCwKKyAgICAgICAgICAgICAgICB0b29sY2hhaW4sIGFuZCBzeXNyb290LgorICAgICAgICAgICAgICAgIFRoZSAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjYWR0LXByZXBhcmUnPlByZXBhcmluZyBmb3IgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBjaGFwdGVyIG9mIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlCisgICAgICAgICAgICAgICAgZGVzY3JpYmVzIHRoaXMgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdSBoYXZlIHJlYWQgdGhhdCBjaGFwdGVyIGFuZCBoYXZlIHNldCB1cAorICAgICAgICAgICAgICAgIHlvdXIgZW52aXJvbm1lbnQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1nZGItcmVtb3RlZGVidWctbGF1bmNoLWdkYnNlcnZlciI+CisgICAgICAgICAgICA8dGl0bGU+TGF1bmNoIEdkYnNlcnZlciBvbiB0aGUgVGFyZ2V0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTWFrZSBzdXJlIEdkYnNlcnZlciBpcyBpbnN0YWxsZWQgb24gdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICBJZiBpdCBpcyBub3QsIGluc3RhbGwgdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2Ric2VydmVyPC9maWxlbmFtZT4sIHdoaWNoIG5lZWRzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJ0aHJlYWQtZGIxPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlLCB0aGF0IHdoZW4gZW50ZXJlZCBmcm9tIHRoZSBob3N0LAorICAgICAgICAgICAgICAgIGNvbm5lY3RzIHRvIHRoZSB0YXJnZXQgYW5kIGxhdW5jaGVzIEdkYnNlcnZlciBpbiBvcmRlciB0bworICAgICAgICAgICAgICAgICJkZWJ1ZyIgYSBiaW5hcnkgbmFtZWQgPGZpbGVuYW1lPmhlbGxvd29ybGQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2Ric2VydmVyIGxvY2FsaG9zdDoyMzQ1IC91c3IvYmluL2hlbGxvd29ybGQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgR2Ric2VydmVyIHNob3VsZCBub3cgYmUgbGlzdGVuaW5nIG9uIHBvcnQgMjM0NSBmb3IgZGVidWdnaW5nCisgICAgICAgICAgICAgICAgY29tbWFuZHMgY29taW5nIGZyb20gYSByZW1vdGUgR0RCIHByb2Nlc3MgdGhhdCBpcyBydW5uaW5nIG9uCisgICAgICAgICAgICAgICAgdGhlIGhvc3QgY29tcHV0ZXIuCisgICAgICAgICAgICAgICAgQ29tbXVuaWNhdGlvbiBiZXR3ZWVuIEdkYnNlcnZlciBhbmQgdGhlIGhvc3QgR0RCIGFyZSBkb25lCisgICAgICAgICAgICAgICAgdXNpbmcgVENQLgorICAgICAgICAgICAgICAgIFRvIHVzZSBvdGhlciBjb21tdW5pY2F0aW9uIHByb3RvY29scywgcGxlYXNlIHJlZmVyIHRvIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nZGIvJz5HZGJzZXJ2ZXIgZG9jdW1lbnRhdGlvbjwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnLWxhdW5jaC1nZGIiPgorICAgICAgICAgICAgPHRpdGxlPkxhdW5jaCBHREIgb24gdGhlIEhvc3QgQ29tcHV0ZXI8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBSdW5uaW5nIEdEQiBvbiB0aGUgaG9zdCBjb21wdXRlciB0YWtlcyBhIG51bWJlciBvZiBzdGFnZXMsIHdoaWNoCisgICAgICAgICAgICAgICAgdGhpcyBzZWN0aW9uIGRlc2NyaWJlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnLWxhdW5jaC1nZGItYnVpbGRjcm9zcyI+CisgICAgICAgICAgICAgICAgPHRpdGxlPkJ1aWxkIHRoZSBDcm9zcy1HREIgUGFja2FnZTwvdGl0bGU+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgc3VpdGFibGUgR0RCIGNyb3NzLWJpbmFyeSBpcyByZXF1aXJlZCB0aGF0IHJ1bnMgb24geW91cgorICAgICAgICAgICAgICAgICAgICBob3N0IGNvbXB1dGVyIGJ1dCBhbHNvIGtub3dzIGFib3V0IHRoZSB0aGUgQUJJIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICByZW1vdGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGdldCB0aGlzIGJpbmFyeSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4nPkNyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB3aGVyZSB0aGUgdG9vbGNoYWluIGhhcyBiZWVuIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZGVmYXVsdCBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9vcHQvcG9reS8mRElTVFJPOzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIC9vcHQvcG9reS8mRElTVFJPOy9zeXNyb290cy9pNjg2LXBva3lzZGstbGludXgvdXNyL2Jpbi9hcm12N2EtdmZwLW5lb24tcG9reS1saW51eC1nbnVlYWJpL2FybS1wb2t5LWxpbnV4LWdudWVhYmktZ2RiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgd2hlcmUgPGZpbGVuYW1lPmFybTwvZmlsZW5hbWU+IGlzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+bGludXgtZ251ZWFiaTwvZmlsZW5hbWU+IGlzIHRoZSB0YXJnZXQgQUJJLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBCaXRCYWtlIHRvIGJ1aWxkIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2RiLWNyb3NzPC9maWxlbmFtZT4gYmluYXJ5LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGdkYi1jcm9zcworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIGJpbmFyeSBpcyBidWlsdCwgeW91IGNhbiBmaW5kIGl0IGhlcmU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgdG1wL3N5c3Jvb3RzLzxyZXBsYWNlYWJsZT5ob3N0LWFyY2g8L3JlcGxhY2VhYmxlPi91c3IvYmluLzxyZXBsYWNlYWJsZT50YXJnZXQtcGxhdGZvcm08L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+dGFyZ2V0LWFiaTwvcmVwbGFjZWFibGU+LWdkYgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRlLXRoZS1nZGItaW5pdGlhbGl6YXRpb24tZmlsZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNyZWF0ZSB0aGUgR0RCIEluaXRpYWxpemF0aW9uIEZpbGUgYW5kIFBvaW50IHRvIFlvdXIgUm9vdCBGaWxlc3lzdGVtPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBc2lkZSBmcm9tIHRoZSBHREIgY3Jvc3MtYmluYXJ5LCB5b3UgYWxzbyBuZWVkIGEgR0RCCisgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uIGZpbGUgaW4gdGhlIHNhbWUgdG9wIGRpcmVjdG9yeSBpbiB3aGljaAorICAgICAgICAgICAgICAgICAgICB5b3VyIGJpbmFyeSByZXNpZGVzLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzdGFydCBHREIgb24geW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSwgR0RCCisgICAgICAgICAgICAgICAgICAgIGZpbmRzIHRoaXMgaW5pdGlhbGl6YXRpb24gZmlsZSBhbmQgZXhlY3V0ZXMgYWxsIHRoZQorICAgICAgICAgICAgICAgICAgICBjb21tYW5kcyB3aXRoaW4uCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgPGZpbGVuYW1lPi5nZGJpbml0PC9maWxlbmFtZT4sIHNlZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0naHR0cDovL3NvdXJjZXdhcmUub3JnL2dkYi9vbmxpbmVkb2NzL2dkYi8nPkRlYnVnZ2luZyB3aXRoIEdEQjwvdWxpbms+IiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgbWFpbnRhaW5lZCBieQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnNvdXJjZXdhcmUub3JnJz5zb3VyY2V3YXJlLm9yZzwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBhZGQgYSBzdGF0ZW1lbnQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5+Ly5nZGJpbml0PC9maWxlbmFtZT4gZmlsZSB0aGF0IHBvaW50cyB0byB5b3VyCisgICAgICAgICAgICAgICAgICAgIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgcG9pbnRzIHRvIHRoZSByb290IGZpbGVzeXN0ZW0gZm9yCisgICAgICAgICAgICAgICAgICAgIGFuIEFSTS1iYXNlZCB0YXJnZXQgZGV2aWNlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHNldCBzeXNyb290IH4vc3lzcm9vdF9hcm0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnLWxhdW5jaC1nZGItbGF1bmNoaG9zdCI+CisgICAgICAgICAgICAgICAgPHRpdGxlPkxhdW5jaCB0aGUgSG9zdCBHREI8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlZm9yZSBsYXVuY2hpbmcgdGhlIGhvc3QgR0RCLCB5b3UgbmVlZCB0byBiZSBzdXJlCisgICAgICAgICAgICAgICAgICAgIHlvdSBoYXZlIHNvdXJjZWQgdGhlIGNyb3NzLWRlYnVnZ2luZyBlbnZpcm9ubWVudCBzY3JpcHQsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlmIHlvdSBpbnN0YWxsZWQgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbiB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiBpcyBhdCA8ZmlsZW5hbWU+L29wdC9wb2t5LyZESVNUUk87PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIGJlZ2lucyB3aXRoIHRoZSBzdHJpbmcgImVudmlyb25tZW50LXNldHVwIi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3NldHRpbmctdXAtdGhlLWNyb3NzLWRldmVsb3BtZW50LWVudmlyb25tZW50Jz5TZXR0aW5nIFVwIHRoZSBDcm9zcy1EZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzCisgICAgICAgICAgICAgICAgICAgIEd1aWRlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGaW5hbGx5LCBzd2l0Y2ggdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgYmluYXJ5IHJlc2lkZXMKKyAgICAgICAgICAgICAgICAgICAgYW5kIHJ1biB0aGUgPGZpbGVuYW1lPmNyb3NzLWdkYjwvZmlsZW5hbWU+IGJpbmFyeS4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZSB0aGUgYmluYXJ5IGZpbGUgeW91IGFyZSBnb2luZyB0byBkZWJ1Zy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBjb250aW51ZXMgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSB1c2VkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uIGJ5IGxvYWRpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5oZWxsb3dvcmxkPC9maWxlbmFtZT4gYmluYXJ5IGFzIHdlbGwgYXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2luZyBpbmZvcm1hdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGFybS1wb2t5LWxpbnV4LWdudWFiaS1nZGIgaGVsbG93b3JsZAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kcyBpbiB5b3VyIDxmaWxlbmFtZT4uZ2RiaW5pdDwvZmlsZW5hbWU+IGV4ZWN1dGUKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBHREIgcHJvbXB0IGFwcGVhcnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3BsYXRkZXYtZ2RiLWNvbm5lY3QtdG8tdGhlLXJlbW90ZS1nZGItc2VydmVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5Db25uZWN0IHRvIHRoZSBSZW1vdGUgR0RCIFNlcnZlcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZyb20gdGhlIHRhcmdldCwgeW91IG5lZWQgdG8gY29ubmVjdCB0byB0aGUgcmVtb3RlIEdEQgorICAgICAgICAgICAgICAgIHNlcnZlciB0aGF0IGlzIHJ1bm5pbmcgb24gdGhlIGhvc3QuCisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgcmVtb3RlIGhvc3QgYW5kIHBvcnQuCisgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgY29tbWFuZCBjb250aW51aW5nIHdpdGggdGhlIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICB0YXJnZXQgcmVtb3RlIDE5Mi4xNjguNy4yOjIzNDUKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1nZGItcmVtb3RlZGVidWctbGF1bmNoLWdkYi11c2luZyI+CisgICAgICAgICAgICA8dGl0bGU+VXNlIHRoZSBEZWJ1Z2dlcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHByb2NlZWQgd2l0aCBkZWJ1Z2dpbmcgYXMgbm9ybWFsIC0gYXMgaWYgeW91IHdlcmUgZGVidWdnaW5nCisgICAgICAgICAgICAgICAgb24gdGhlIGxvY2FsIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGluc3RydWN0IEdEQiB0byBicmVhayBpbiB0aGUgIm1haW4iIGZ1bmN0aW9uIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgY29udGludWUgd2l0aCBleGVjdXRpb24gb2YgdGhlIGluZmVyaW9yIGJpbmFyeSB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kcworICAgICAgICAgICAgICAgIGZyb20gd2l0aGluIEdEQjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIChnZGIpIGJyZWFrIG1haW4KKyAgICAgKGdkYikgY29udGludWUKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIEdEQiwgc2VlIHRoZSBwcm9qZWN0J3Mgb25saW5lIGRvY3VtZW50YXRpb24gYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vc291cmNld2FyZS5vcmcvZ2RiL2Rvd25sb2FkL29ubGluZWRvY3MvIi8+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2RlYnVnZ2luZy1wYXJhbGxlbC1tYWtlLXJhY2VzJz4KKyAgICAgICAgPHRpdGxlPkRlYnVnZ2luZyBQYXJhbGxlbCBNYWtlIFJhY2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgcGFyYWxsZWwgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiByYWNlIG9jY3VycyB3aGVuIHRoZSBidWlsZAorICAgICAgICAgICAgY29uc2lzdHMgb2Ygc2V2ZXJhbCBwYXJ0cyB0aGF0IGFyZSBydW4gc2ltdWx0YW5lb3VzbHkgYW5kCisgICAgICAgICAgICBhIHNpdHVhdGlvbiBvY2N1cnMgd2hlbiB0aGUgb3V0cHV0IG9yIHJlc3VsdCBvZiBvbmUKKyAgICAgICAgICAgIHBhcnQgaXMgbm90IHJlYWR5IGZvciB1c2Ugd2l0aCBhIGRpZmZlcmVudCBwYXJ0IG9mIHRoZSBidWlsZCB0aGF0CisgICAgICAgICAgICBkZXBlbmRzIG9uIHRoYXQgb3V0cHV0LgorICAgICAgICAgICAgUGFyYWxsZWwgbWFrZSByYWNlcyBhcmUgYW5ub3lpbmcgYW5kIGNhbiBzb21ldGltZXMgYmUgZGlmZmljdWx0CisgICAgICAgICAgICB0byByZXByb2R1Y2UgYW5kIGZpeC4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHNvbWUgc2ltcGxlIHRpcHMgYW5kIHRyaWNrcyBleGlzdCB0aGF0IGNhbiBoZWxwCisgICAgICAgICAgICB5b3UgZGVidWcgYW5kIGZpeCB0aGVtLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIGEgcmVhbC13b3JsZCBleGFtcGxlIG9mIGFuIGVycm9yIGVuY291bnRlcmVkCisgICAgICAgICAgICBvbiB0aGUgWW9jdG8gUHJvamVjdCBhdXRvYnVpbGRlciBhbmQgdGhlIHByb2Nlc3MgdXNlZCB0byBmaXggaXQuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgY2Fubm90IHByb3Blcmx5IGZpeCBhIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gcmFjZQorICAgICAgICAgICAgICAgIGNvbmRpdGlvbiwgeW91IGNhbiB3b3JrIGFyb3VuZCBpdCBieSBjbGVhcmluZyBlaXRoZXIgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBUkFMTEVMX01BS0UnPjxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBUkFMTEVMX01BS0VJTlNUJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRUlOU1Q8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RoZS1mYWlsdXJlJz4KKyAgICAgICAgICAgIDx0aXRsZT5UaGUgRmFpbHVyZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciB0aGlzIGV4YW1wbGUsIGFzc3VtZSB0aGF0IHlvdSBhcmUgYnVpbGRpbmcgYW4gaW1hZ2UgdGhhdAorICAgICAgICAgICAgICAgIGRlcGVuZHMgb24gdGhlICJuZWFyZCIgcGFja2FnZS4KKyAgICAgICAgICAgICAgICBBbmQsIGR1cmluZyB0aGUgYnVpbGQsIEJpdEJha2UgcnVucyBpbnRvIHByb2JsZW1zIGFuZAorICAgICAgICAgICAgICAgIGNyZWF0ZXMgdGhlIGZvbGxvd2luZyBvdXRwdXQuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBsb2cgZmlsZSBoYXMgbG9uZ2VyIGxpbmVzIGFydGlmaWNpYWxseQorICAgICAgICAgICAgICAgICAgICBicm9rZW4gdG8gbWFrZSB0aGUgbGlzdGluZyBlYXNpZXIgdG8gcmVhZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgSWYgeW91IGV4YW1pbmUgdGhlIG91dHB1dCBvciB0aGUgbG9nIGZpbGUsIHlvdSBzZWUgdGhlCisgICAgICAgICAgICAgICAgZmFpbHVyZSBkdXJpbmcgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHwgREVCVUc6IFNJVEUgZmlsZXMgWydlbmRpYW4tbGl0dGxlJywgJ2JpdC0zMicsICdpeDg2LWNvbW1vbicsICdjb21tb24tbGludXgnLCAnY29tbW9uLWdsaWJjJywgJ2k1ODYtbGludXgnLCAnY29tbW9uJ10KKyAgICAgfCBERUJVRzogRXhlY3V0aW5nIHNoZWxsIGZ1bmN0aW9uIGRvX2NvbXBpbGUKKyAgICAgfCBOT1RFOiBtYWtlIC1qIDE2CisgICAgIHwgbWFrZSAtLW5vLXByaW50LWRpcmVjdG9yeSBhbGwtYW0KKyAgICAgfCAvYmluL21rZGlyIC1wIGluY2x1ZGUvbmVhcgorICAgICB8IC9iaW4vbWtkaXIgLXAgaW5jbHVkZS9uZWFyCisgICAgIHwgL2Jpbi9ta2RpciAtcCBpbmNsdWRlL25lYXIKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL3R5cGVzLmggaW5jbHVkZS9uZWFyL3R5cGVzLmgKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL2xvZy5oIGluY2x1ZGUvbmVhci9sb2cuaAorICAgICB8IGxuIC1zIC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS9uaWdodGx5LXg4Ni9idWlsZC9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvbmVhcmQvCisgICAgICAgMC4xNC1yMC9uZWFyZC0wLjE0L2luY2x1ZGUvcGx1Z2luLmggaW5jbHVkZS9uZWFyL3BsdWdpbi5oCisgICAgIHwgL2Jpbi9ta2RpciAtcCBpbmNsdWRlL25lYXIKKyAgICAgfCAvYmluL21rZGlyIC1wIGluY2x1ZGUvbmVhcgorICAgICB8IC9iaW4vbWtkaXIgLXAgaW5jbHVkZS9uZWFyCisgICAgIHwgbG4gLXMgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9uZWFyZC8KKyAgICAgICAwLjE0LXIwL25lYXJkLTAuMTQvaW5jbHVkZS90YWcuaCBpbmNsdWRlL25lYXIvdGFnLmgKKyAgICAgfCAvYmluL21rZGlyIC1wIGluY2x1ZGUvbmVhcgorICAgICB8IGxuIC1zIC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS9uaWdodGx5LXg4Ni9idWlsZC9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvbmVhcmQvCisgICAgICAgMC4xNC1yMC9uZWFyZC0wLjE0L2luY2x1ZGUvYWRhcHRlci5oIGluY2x1ZGUvbmVhci9hZGFwdGVyLmgKKyAgICAgfCAvYmluL21rZGlyIC1wIGluY2x1ZGUvbmVhcgorICAgICB8IGxuIC1zIC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS9uaWdodGx5LXg4Ni9idWlsZC9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvbmVhcmQvCisgICAgICAgMC4xNC1yMC9uZWFyZC0wLjE0L2luY2x1ZGUvbmRlZi5oIGluY2x1ZGUvbmVhci9uZGVmLmgKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL3Rsdi5oIGluY2x1ZGUvbmVhci90bHYuaAorICAgICB8IC9iaW4vbWtkaXIgLXAgaW5jbHVkZS9uZWFyCisgICAgIHwgL2Jpbi9ta2RpciAtcCBpbmNsdWRlL25lYXIKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL3NldHRpbmcuaCBpbmNsdWRlL25lYXIvc2V0dGluZy5oCisgICAgIHwgL2Jpbi9ta2RpciAtcCBpbmNsdWRlL25lYXIKKyAgICAgfCAvYmluL21rZGlyIC1wIGluY2x1ZGUvbmVhcgorICAgICB8IC9iaW4vbWtkaXIgLXAgaW5jbHVkZS9uZWFyCisgICAgIHwgbG4gLXMgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9uZWFyZC8KKyAgICAgICAwLjE0LXIwL25lYXJkLTAuMTQvaW5jbHVkZS9kZXZpY2UuaCBpbmNsdWRlL25lYXIvZGV2aWNlLmgKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL25mY19jb3B5LmggaW5jbHVkZS9uZWFyL25mY19jb3B5LmgKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL3NuZXAuaCBpbmNsdWRlL25lYXIvc25lcC5oCisgICAgIHwgbG4gLXMgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9uZWFyZC8KKyAgICAgICAwLjE0LXIwL25lYXJkLTAuMTQvaW5jbHVkZS92ZXJzaW9uLmggaW5jbHVkZS9uZWFyL3ZlcnNpb24uaAorICAgICB8IGxuIC1zIC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS9uaWdodGx5LXg4Ni9idWlsZC9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvbmVhcmQvCisgICAgICAgMC4xNC1yMC9uZWFyZC0wLjE0L2luY2x1ZGUvZGJ1cy5oIGluY2x1ZGUvbmVhci9kYnVzLmgKKyAgICAgfCAuL3NyYy9nZW5idWlsdGluIG5mY3R5cGUxIG5mY3R5cGUyIG5mY3R5cGUzIG5mY3R5cGU0IHAycCA+IHNyYy9idWlsdGluLmgKKyAgICAgfCBpNTg2LXBva3ktbGludXgtZ2NjICAtbTMyIC1tYXJjaD1pNTg2IC0tc3lzcm9vdD0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvCisgICAgICAgYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3FlbXV4ODYgLURIQVZFX0NPTkZJR19IIC1JLiAtSS4vaW5jbHVkZSAtSS4vc3JjIC1JLi9nZGJ1cyAgLUkvaG9tZS9wb2t5YnVpbGQvCisgICAgICAgeW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUvZ2xpYi0yLjAKKyAgICAgICAtSS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS9uaWdodGx5LXg4Ni9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMvcWVtdXg4Ni91c3IvCisgICAgICAgbGliL2dsaWItMi4wL2luY2x1ZGUgIC1JL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkLworICAgICAgIHRtcC9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL2RidXMtMS4wIC1JL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlLworICAgICAgIG5pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy9xZW11eDg2L3Vzci9saWIvZGJ1cy0xLjAvaW5jbHVkZSAgLUkvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIvCisgICAgICAgeW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUvbGlibmwzCisgICAgICAgLURORUFSX1BMVUdJTl9CVUlMVElOIC1EUExVR0lORElSPVwiIi91c3IvbGliL25lYXIvcGx1Z2lucyJcIgorICAgICAgIC1EQ09ORklHRElSPVwiIi9ldGMvbmVhcmRcIiIgLU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtYworICAgICAgIC1vIHRvb2xzL3NuZXAtc2VuZC5vIHRvb2xzL3NuZXAtc2VuZC5jCisgICAgIHwgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIHRvb2xzL3NuZXAtc2VuZC5jOjE2OjA6CisgICAgIHwgdG9vbHMvLi4vc3JjL25lYXIuaDo0MToyMzogZmF0YWwgZXJyb3I6IG5lYXIvZGJ1cy5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisgICAgIHwgICNpbmNsdWRlICZsdDtuZWFyL2RidXMuaCZndDsKKyAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIF4KKyAgICAgfCBjb21waWxhdGlvbiB0ZXJtaW5hdGVkLgorICAgICB8IG1ha2VbMV06ICoqKiBbdG9vbHMvc25lcC1zZW5kLm9dIEVycm9yIDEKKyAgICAgfCBtYWtlWzFdOiAqKiogV2FpdGluZyBmb3IgdW5maW5pc2hlZCBqb2JzLi4uLgorICAgICB8IG1ha2U6ICoqKiBbYWxsXSBFcnJvciAyCisgICAgIHwgRVJST1I6IG9lX3J1bm1ha2UgZmFpbGVkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlcHJvZHVjaW5nLXRoZS1lcnJvcic+CisgICAgICAgICAgICA8dGl0bGU+UmVwcm9kdWNpbmcgdGhlIEVycm9yPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVjYXVzZSByYWNlIGNvbmRpdGlvbnMgYXJlIGludGVybWl0dGVudCwgdGhleSBkbyBub3QKKyAgICAgICAgICAgICAgICBtYW5pZmVzdCB0aGVtc2VsdmVzIGV2ZXJ5IHRpbWUgeW91IGRvIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICBJbiBmYWN0LCBtb3N0IHRpbWVzIHRoZSBidWlsZCB3aWxsIGNvbXBsZXRlIHdpdGhvdXQgcHJvYmxlbXMKKyAgICAgICAgICAgICAgICBldmVuIHRob3VnaCB0aGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGV4aXN0cy4KKyAgICAgICAgICAgICAgICBUaHVzLCBvbmNlIHRoZSBlcnJvciBzdXJmYWNlcywgeW91IG5lZWQgYSB3YXkgdG8gcmVwcm9kdWNlIGl0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIGNvbXBpbGluZyB0aGUgIm5lYXJkIiBwYWNrYWdlIGlzIGNhdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgcHJvYmxlbS4KKyAgICAgICAgICAgICAgICBTbyB0aGUgZmlyc3QgdGhpbmcgdG8gZG8gaXMgYnVpbGQgIm5lYXJkIiBsb2NhbGx5LgorICAgICAgICAgICAgICAgIEJlZm9yZSB5b3Ugc3RhcnQgdGhlIGJ1aWxkLCBzZXQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBUkFMTEVMX01BS0UnPjxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRvCisgICAgICAgICAgICAgICAgYSBoaWdoIG51bWJlciAoZS5nLiAiLWogMjAiKS4KKyAgICAgICAgICAgICAgICBVc2luZyBhIGhpZ2ggdmFsdWUgZm9yIDxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBpbmNyZWFzZXMgdGhlIGNoYW5jZXMgb2YgdGhlIHJhY2UgY29uZGl0aW9uIHNob3dpbmcgdXA6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbmVhcmQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uY2UgdGhlIGxvY2FsIGJ1aWxkIGZvciAibmVhcmQiIGNvbXBsZXRlcywgc3RhcnQgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+IGJ1aWxkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIG5lYXJkIC1jIGRldnNoZWxsCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwbGF0ZGV2LWFwcGRldi1kZXZzaGVsbCc+VXNpbmcgYSBEZXZlbG9wbWVudCBTaGVsbDwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gdGhlIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+LCBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBtYWtlIGNsZWFuCisgICAgICQgbWFrZSB0b29scy9zbmVwLXNlbmQubworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4gY29tbWFuZHMgY2F1c2UgdGhlIGZhaWx1cmUKKyAgICAgICAgICAgICAgICB0byBjbGVhcmx5IGJlIHZpc2libGUuCisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBhIG1pc3NpbmcgZGVwZW5kZW5jeSBleGlzdHMgZm9yIHRoZSAibmVhcmQiCisgICAgICAgICAgICAgICAgTWFrZWZpbGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgc29tZSBhYmJyZXZpYXRlZCwgc2FtcGxlIG91dHB1dCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIG1pc3NpbmcgZGVwZW5kZW5jeSBjbGVhcmx5IHZpc2libGUgYXQgdGhlIGVuZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGk1ODYtcG9reS1saW51eC1nY2MgIC1tMzIgLW1hcmNoPWk1ODYgLS1zeXNyb290PS9ob21lL3Njb3R0LWxlbm92by8uLi4uLi4KKyAgICAgICAgLgorICAgICAgICAuCisgICAgICAgIC4KKyAgICAgdG9vbHMvc25lcC1zZW5kLmMKKyAgICAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIHRvb2xzL3NuZXAtc2VuZC5jOjE2OjA6CisgICAgIHRvb2xzLy4uL3NyYy9uZWFyLmg6NDE6MjM6IGZhdGFsIGVycm9yOiBuZWFyL2RidXMuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICAgICAgI2luY2x1ZGUgJmx0O25lYXIvZGJ1cy5oJmd0OworICAgICAgICAgICAgICAgICAgICAgICBeCisgICAgIGNvbXBpbGF0aW9uIHRlcm1pbmF0ZWQuCisgICAgIG1ha2U6ICoqKiBbdG9vbHMvc25lcC1zZW5kLm9dIEVycm9yIDEKKyAgICAgJAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1hLXBhdGNoLWZvci10aGUtZml4Jz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhIFBhdGNoIGZvciB0aGUgRml4PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGVyZSBpcyBhIG1pc3NpbmcgZGVwZW5kZW5jeSBmb3IgdGhlIE1ha2VmaWxlCisgICAgICAgICAgICAgICAgdGFyZ2V0LCB5b3UgbmVlZCB0byBwYXRjaCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TWFrZWZpbGUuYW08L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcyBnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICBmcm9tIDxmaWxlbmFtZT5NYWtlZmlsZS5pbjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIFF1aWx0IHRvIGNyZWF0ZSB0aGUgcGF0Y2g6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHF1aWx0IG5ldyBwYXJhbGxlbG1ha2UucGF0Y2gKKyAgICAgUGF0Y2ggcGF0Y2hlcy9wYXJhbGxlbG1ha2UucGF0Y2ggaXMgbm93IG9uIHRvcAorICAgICAkIHF1aWx0IGFkZCBNYWtlZmlsZS5hbQorICAgICBGaWxlIE1ha2VmaWxlLmFtIGFkZGVkIHRvIHBhdGNoIHBhdGNoZXMvcGFyYWxsZWxtYWtlLnBhdGNoCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIFF1aWx0LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWEtcXVpbHQtd29ya2Zsb3cnPlVzaW5nIFF1aWx0IGluIFlvdXIgV29ya2Zsb3c8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQgeW91IG5lZWQgdG8gbWFrZSB0aGUgZWRpdHMgdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TWFrZWZpbGUuYW08L2ZpbGVuYW1lPiB0byBhZGQgdGhlIG1pc3NpbmcKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmN5LgorICAgICAgICAgICAgICAgIEZvciBvdXIgZXhhbXBsZSwgeW91IGhhdmUgdG8gYWRkIHRoZSBmb2xsb3dpbmcgbGluZQorICAgICAgICAgICAgICAgIHRvIHRoZSBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgdG9vbHMvc25lcC1zZW5kLiQoT0JKRVhUKTogaW5jbHVkZS9uZWFyL2RidXMuaAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBlZGl0ZWQgdGhlIGZpbGUsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVmcmVzaDwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBwYXRjaDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcXVpbHQgcmVmcmVzaAorICAgICBSZWZyZXNoZWQgcGF0Y2ggcGF0Y2hlcy9wYXJhbGxlbG1ha2UucGF0Y2gKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT25jZSB0aGUgcGF0Y2ggZmlsZSBleGlzdHMsIHlvdSBuZWVkIHRvIGFkZCBpdCBiYWNrIHRvIHRoZQorICAgICAgICAgICAgICAgIG9yaWdpbmF0aW5nIHJlY2lwZSBmb2xkZXIuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGFzc3VtaW5nIGEgdG9wLWxldmVsCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICBuYW1lZCA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcCBwYXRjaGVzL3BhcmFsbGVsbWFrZS5wYXRjaCBwb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGZpbmFsIHRoaW5nIHlvdSBuZWVkIHRvIGRvIHRvIGltcGxlbWVudCB0aGUgZml4IGluIHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIGlzIHRvIHVwZGF0ZSB0aGUgIm5lYXJkIiByZWNpcGUgKGkuZS4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmVhcmQtMC4xNC5iYjwvZmlsZW5hbWU+KSBzbyB0aGF0IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgaW5jbHVkZXMgdGhlIHBhdGNoIGZpbGUuCisgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSBmaWxlIGlzIGluIHRoZSBmb2xkZXIgYWJvdmUgdGhlIHBhdGNoLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgd2hhdCB0aGUgZWRpdGVkIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgd291bGQgbG9vayBsaWtlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L25ldHdvcmsvbmZjLyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9uZWFyZC5pbiBcCisgICAgICAgICAgICAgICAgZmlsZTovL25lYXJkLnNlcnZpY2UuaW4gXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9wYXJhbGxlbG1ha2UucGF0Y2ggXAorICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2l0aCB0aGUgcGF0Y2ggY29tcGxldGUgYW5kIG1vdmVkIHRvIHRoZSBjb3JyZWN0IGZvbGRlciBhbmQKKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgdXBkYXRlZCwgeW91IGNhbgorICAgICAgICAgICAgICAgIGV4aXQgdGhlIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBleGl0CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Rlc3RpbmctdGhlLWJ1aWxkJz4KKyAgICAgICAgICAgIDx0aXRsZT5UZXN0aW5nIHRoZSBCdWlsZDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdpdGggZXZlcnl0aGluZyBpbiBwbGFjZSwgeW91IGNhbiBnZXQgYmFjayB0byB0cnlpbmcgdGhlCisgICAgICAgICAgICAgICAgYnVpbGQgYWdhaW4gbG9jYWxseToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBuZWFyZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIGJ1aWxkIHNob3VsZCBzdWNjZWVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBOb3cgeW91IGNhbiBvcGVuIHVwIGEgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4gYWdhaW4KKyAgICAgICAgICAgICAgICBhbmQgcmVwZWF0IHRoZSBjbGVhbiBhbmQgbWFrZSBvcGVyYXRpb25zIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbmVhcmQgLWMgZGV2c2hlbGwKKyAgICAgJCBtYWtlIGNsZWFuCisgICAgICQgbWFrZSB0b29scy9zbmVwLXNlbmQubworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc2hvdWxkIHdvcmsgd2l0aG91dCBpc3N1ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgd2l0aCBhbGwgc29sdmVkIHByb2JsZW1zLCBpZiB0aGV5IG9yaWdpbmF0ZWQgdXBzdHJlYW0sIHlvdQorICAgICAgICAgICAgICAgIG5lZWQgdG8gc3VibWl0IHRoZSBmaXggZm9yIHRoZSByZWNpcGUgaW4gT0UtQ29yZSBhbmQgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICBzbyB0aGF0IHRoZSBwcm9ibGVtIGlzIHRha2VuIGNhcmUgb2YgYXQgaXRzIHNvdXJjZS4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2hvdy10by1zdWJtaXQtYS1jaGFuZ2UnPkhvdyB0byBTdWJtaXQgYSBDaGFuZ2U8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1vcHJvZmlsZSI+CisgICAgICAgIDx0aXRsZT5Qcm9maWxpbmcgd2l0aCBPUHJvZmlsZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vb3Byb2ZpbGUuc291cmNlZm9yZ2UubmV0LyI+T1Byb2ZpbGU8L3VsaW5rPiBpcyBhCisgICAgICAgICAgICBzdGF0aXN0aWNhbCBwcm9maWxlciB3ZWxsIHN1aXRlZCBmb3IgZmluZGluZyBwZXJmb3JtYW5jZQorICAgICAgICAgICAgYm90dGxlbmVja3MgaW4gYm90aCB1c2VyLXNwYWNlIHNvZnR3YXJlIGFuZCBpbiB0aGUga2VybmVsLgorICAgICAgICAgICAgVGhpcyBwcm9maWxlciBwcm92aWRlcyBhbnN3ZXJzIHRvIHF1ZXN0aW9ucyBsaWtlICJXaGljaCBmdW5jdGlvbnMgZG9lcyBteSBhcHBsaWNhdGlvbiBzcGVuZAorICAgICAgICAgICAgdGhlIG1vc3QgdGltZSBpbiB3aGVuIGRvaW5nIFg/IgorICAgICAgICAgICAgQmVjYXVzZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyB3ZWxsIGludGVncmF0ZWQgd2l0aCBPUHJvZmlsZSwgaXQgbWFrZXMgcHJvZmlsaW5nCisgICAgICAgICAgICBhcHBsaWNhdGlvbnMgb24gdGFyZ2V0IGhhcmR3YXJlIHN0cmFpZ2h0IGZvcndhcmQuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc2V0IHVwIGFuZCBydW4gT1Byb2ZpbGUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUFJPRl9VUkw7I3Byb2ZpbGUtbWFudWFsLW9wcm9maWxlJz5vcHJvZmlsZTwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nIE1hbnVhbC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gdXNlIE9Qcm9maWxlLCB5b3UgbmVlZCBhbiBpbWFnZSB0aGF0IGhhcyBPUHJvZmlsZSBpbnN0YWxsZWQuCisgICAgICAgICAgICBUaGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhpcyBpcyB3aXRoICJ0b29scy1wcm9maWxlIiBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfRkVBVFVSRVMnPklNQUdFX0ZFQVRVUkVTPC91bGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgIFlvdSBhbHNvIG5lZWQgZGVidWdnaW5nIHN5bWJvbHMgdG8gYmUgYXZhaWxhYmxlIG9uIHRoZSBzeXN0ZW0gd2hlcmUgdGhlIGFuYWx5c2lzCisgICAgICAgICAgICB0YWtlcyBwbGFjZS4KKyAgICAgICAgICAgIFlvdSBjYW4gZ2FpbiBhY2Nlc3MgdG8gdGhlIHN5bWJvbHMgYnkgdXNpbmcgImRiZy1wa2dzIiBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIG9yIGJ5CisgICAgICAgICAgICBpbnN0YWxsaW5nIHRoZSBhcHByb3ByaWF0ZSBkZWJ1ZyAoPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgIHBhY2thZ2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3Igc3VjY2Vzc2Z1bCBjYWxsIGdyYXBoIGFuYWx5c2lzLCB0aGUgYmluYXJpZXMgbXVzdCBwcmVzZXJ2ZSB0aGUgZnJhbWUKKyAgICAgICAgICAgIHBvaW50ZXIgcmVnaXN0ZXIgYW5kIHNob3VsZCBhbHNvIGJlIGNvbXBpbGVkIHdpdGggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+LWZuby1vbWl0LWZyYW1lcG9pbnRlcjwvZmlsZW5hbWU+IGZsYWcuCisgICAgICAgICAgICBZb3UgY2FuIGFjaGlldmUgdGhpcyBieSBzZXR0aW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TRUxFQ1RFRF9PUFRJTUlaQVRJT04nPlNFTEVDVEVEX09QVElNSVpBVElPTjwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhcmlhYmxlIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25zOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAtZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zCisgICAgIC1mbm8tb21pdC1mcmFtZXBvaW50ZXIKKyAgICAgLWZyZW5hbWUtcmVnaXN0ZXJzCisgICAgIC1PMgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgWW91IGNhbiBhbHNvIGFjaGlldmUgaXQgYnkgc2V0dGluZyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItREVCVUdfQlVJTEQnPkRFQlVHX0JVSUxEPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgdmFyaWFibGUgdG8gIjEiIGluIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgIElmIHlvdSB1c2UgdGhlIDxmaWxlbmFtZT5ERUJVR19CVUlMRDwvZmlsZW5hbWU+IHZhcmlhYmxlLAorICAgICAgICAgICAgeW91IGFsc28gYWRkIGV4dHJhIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB0aGF0IGNhbiBtYWtlIHRoZSBkZWJ1ZworICAgICAgICAgICAgcGFja2FnZXMgbGFyZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1vcHJvZmlsZS10YXJnZXQiPgorICAgICAgICAgICAgPHRpdGxlPlByb2ZpbGluZyBvbiB0aGUgVGFyZ2V0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNpbmcgT1Byb2ZpbGUsIHlvdSBjYW4gcGVyZm9ybSBhbGwgdGhlIHByb2ZpbGluZyB3b3JrIG9uIHRoZSB0YXJnZXQgZGV2aWNlLgorICAgICAgICAgICAgICAgIEEgc2ltcGxlIE9Qcm9maWxlIHNlc3Npb24gbWlnaHQgbG9vayBsaWtlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBvcGNvbnRyb2wgLS1yZXNldAorICAgICAjIG9wY29udHJvbCAtLXN0YXJ0IC0tc2VwYXJhdGU9bGliIC0tbm8tdm1saW51eCAtYyA1CisgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgLgorICAgICAgICBbZG8gd2hhdGV2ZXIgaXMgYmVpbmcgcHJvZmlsZWRdCisgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgLgorICAgICAjIG9wY29udHJvbCAtLXN0b3AKKyAgICAgJCBvcHJlcG9ydCAtY2wKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5yZXNldDwvZmlsZW5hbWU+IGNvbW1hbmQgY2xlYXJzIGFueSBwcmV2aW91c2x5IHByb2ZpbGVkIGRhdGEuCisgICAgICAgICAgICAgICAgVGhlIG5leHQgY29tbWFuZCBzdGFydHMgT1Byb2ZpbGUuCisgICAgICAgICAgICAgICAgVGhlIG9wdGlvbnMgdXNlZCB3aGVuIHN0YXJ0aW5nIHRoZSBwcm9maWxlciBzZXBhcmF0ZSBkeW5hbWljIGxpYnJhcnkgZGF0YQorICAgICAgICAgICAgICAgIHdpdGhpbiBhcHBsaWNhdGlvbnMsIGRpc2FibGUga2VybmVsIHByb2ZpbGluZywgYW5kIGVuYWJsZSBjYWxsZ3JhcGhpbmcgdXAgdG8KKyAgICAgICAgICAgICAgICBmaXZlIGxldmVscyBkZWVwLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUbyBwcm9maWxlIHRoZSBrZXJuZWwsIHlvdSB3b3VsZCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS12bWxpbnV4PS9wYXRoL3RvL3ZtbGludXg8L2ZpbGVuYW1lPiBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+dm1saW51eDwvZmlsZW5hbWU+IGZpbGUgaXMgdXN1YWxseSBpbiB0aGUgc291cmNlIGRpcmVjdG9yeSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ib290LzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQgbXVzdCBtYXRjaCB0aGUgcnVubmluZyBrZXJuZWwuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBZnRlciB5b3UgcGVyZm9ybSB5b3VyIHByb2ZpbGluZyB0YXNrcywgdGhlIG5leHQgY29tbWFuZCBzdG9wcyB0aGUgcHJvZmlsZXIuCisgICAgICAgICAgICAgICAgQWZ0ZXIgdGhhdCwgeW91IGNhbiB2aWV3IHJlc3VsdHMgd2l0aCB0aGUgPGZpbGVuYW1lPm9wcmVwb3J0PC9maWxlbmFtZT4gY29tbWFuZCB3aXRoIG9wdGlvbnMKKyAgICAgICAgICAgICAgICB0byBzZWUgdGhlIHNlcGFyYXRlIGxpYnJhcnkgc3ltYm9scyBhbmQgY2FsbGdyYXBoIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDYWxsZ3JhcGhpbmcgbG9ncyBpbmZvcm1hdGlvbiBhYm91dCB0aW1lIHNwZW50IGluIGZ1bmN0aW9ucyBhbmQgYWJvdXQgYSBmdW5jdGlvbidzCisgICAgICAgICAgICAgICAgY2FsbGluZyBmdW5jdGlvbiAocGFyZW50KSBhbmQgY2FsbGVkIGZ1bmN0aW9ucyAoY2hpbGRyZW4pLgorICAgICAgICAgICAgICAgIFRoZSBoaWdoZXIgdGhlIGNhbGxncmFwaGluZyBkZXB0aCwgdGhlIG1vcmUgYWNjdXJhdGUgdGhlIHJlc3VsdHMuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaGlnaGVyIGRlcHRocyBhbHNvIGluY3JlYXNlIHRoZSBsb2dnaW5nIG92ZXJoZWFkLgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IHNob3VsZCB0YWtlIGNhcmUgd2hlbiBzZXR0aW5nIHRoZSBjYWxsZ3JhcGhpbmcgZGVwdGguCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIE9uIEFSTSwgYmluYXJpZXMgbmVlZCB0byBoYXZlIHRoZSBmcmFtZSBwb2ludGVyIGVuYWJsZWQgZm9yIGNhbGxncmFwaGluZyB0byB3b3JrLgorICAgICAgICAgICAgICAgICAgICBUbyBhY2NvbXBsaXNoIHRoaXMgdXNlIHRoZSA8ZmlsZW5hbWU+LWZuby1vbWl0LWZyYW1lcG9pbnRlcjwvZmlsZW5hbWU+IG9wdGlvbgorICAgICAgICAgICAgICAgICAgICB3aXRoIDxmaWxlbmFtZT5nY2M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIE9Qcm9maWxlLCBzZWUgdGhlIE9Qcm9maWxlCisgICAgICAgICAgICAgICAgb25saW5lIGRvY3VtZW50YXRpb24gYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vb3Byb2ZpbGUuc291cmNlZm9yZ2UubmV0L2RvY3MvIi8+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtb3Byb2ZpbGUtb3Byb2ZpbGV1aSI+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgT1Byb2ZpbGVVSTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciBPUHJvZmlsZSBpcyBhbHNvIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGRvd25sb2FkIGFuZCBidWlsZCB0aGlzIGludGVyZmFjZSBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpL29wcm9maWxldWkvIj48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBJZiB0aGUgInRvb2xzLXByb2ZpbGUiIGltYWdlIGZlYXR1cmUgaXMgc2VsZWN0ZWQsIGFsbCBuZWNlc3NhcnkgYmluYXJpZXMKKyAgICAgICAgICAgICAgICBhcmUgaW5zdGFsbGVkIG9udG8gdGhlIHRhcmdldCBkZXZpY2UgZm9yIE9Qcm9maWxlVUkgaW50ZXJhY3Rpb24uCisgICAgICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiBpbWFnZSBmZWF0dXJlcyB0aGF0IHNoaXAgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCwKKyAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1mZWF0dXJlcy1pbWFnZSc+SW1hZ2UgRmVhdHVyZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEV2ZW4gdGhvdWdoIHRoZSBzb3VyY2UgZGlyZWN0b3J5IHVzdWFsbHkgaW5jbHVkZXMgYWxsIG5lZWRlZCBwYXRjaGVzIG9uIHRoZSB0YXJnZXQgZGV2aWNlLCB5b3UKKyAgICAgICAgICAgICAgICBtaWdodCBmaW5kIHlvdSBuZWVkIG90aGVyIE9Qcm9maWxlIHBhdGNoZXMgZm9yIHJlY2VudCBPUHJvZmlsZVVJIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgIElmIHNvLCBzZWUgdGhlIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9vcHJvZmlsZXVpL3RyZWUvUkVBRE1FJz4KKyAgICAgICAgICAgICAgICBPUHJvZmlsZVVJIFJFQURNRTwvdWxpbms+IGZvciB0aGUgbW9zdCByZWNlbnQgaW5mb3JtYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LW9wcm9maWxlLW9wcm9maWxldWktb25saW5lIj4KKyAgICAgICAgICAgICAgICA8dGl0bGU+T25saW5lIE1vZGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFVzaW5nIE9Qcm9maWxlIGluIG9ubGluZSBtb2RlIGFzc3VtZXMgYSB3b3JraW5nIG5ldHdvcmsgY29ubmVjdGlvbiB3aXRoIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgICAgIFdpdGggdGhpcyBjb25uZWN0aW9uLCB5b3UganVzdCBuZWVkIHRvIHJ1biAib3Byb2ZpbGUtc2VydmVyIiBvbiB0aGUgZGV2aWNlLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBPUHJvZmlsZSBsaXN0ZW5zIG9uIHBvcnQgNDIyNC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNoYW5nZSB0aGUgcG9ydCB1c2luZyB0aGUgPGZpbGVuYW1lPi0tcG9ydDwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjbGllbnQgcHJvZ3JhbSBpcyBjYWxsZWQgPGZpbGVuYW1lPm9wcm9maWxlLXZpZXdlcjwvZmlsZW5hbWU+IGFuZCBpdHMgVUkgaXMgcmVsYXRpdmVseQorICAgICAgICAgICAgICAgICAgICBzdHJhaWdodCBmb3J3YXJkLgorICAgICAgICAgICAgICAgICAgICBZb3UgYWNjZXNzIGtleSBmdW5jdGlvbmFsaXR5IHRocm91Z2ggdGhlIGJ1dHRvbnMgb24gdGhlIHRvb2xiYXIsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIGFyZSBkdXBsaWNhdGVkIGluIHRoZSBtZW51cy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdGhlIGJ1dHRvbnM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvbm5lY3Q6PC9lbXBoYXNpcz4gQ29ubmVjdHMgdG8gdGhlIHJlbW90ZSBob3N0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBzdXBwbHkgdGhlIElQIGFkZHJlc3Mgb3IgaG9zdG5hbWUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRpc2Nvbm5lY3Q6PC9lbXBoYXNpcz4gRGlzY29ubmVjdHMgZnJvbSB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFydDo8L2VtcGhhc2lzPiBTdGFydHMgcHJvZmlsaW5nIG9uIHRoZSBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0b3A6PC9lbXBoYXNpcz4gU3RvcHMgcHJvZmlsaW5nIG9uIHRoZSBkZXZpY2UgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRzIHRoZSBkYXRhIHRvIHRoZSBsb2NhbCBob3N0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3BwaW5nIHRoZSBwcm9maWxlciBnZW5lcmF0ZXMgdGhlIHByb2ZpbGUgYW5kIGRpc3BsYXlzIGl0IGluIHRoZSB2aWV3ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRvd25sb2FkOjwvZW1waGFzaXM+IERvd25sb2FkcyB0aGUgZGF0YSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCBhbmQgZ2VuZXJhdGVzIHRoZSBwcm9maWxlLCB3aGljaCBhcHBlYXJzIGluIHRoZSB2aWV3ZXIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJlc2V0OjwvZW1waGFzaXM+IFJlc2V0cyB0aGUgc2FtcGxlIGRhdGEgb24gdGhlIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldHRpbmcgdGhlIGRhdGEgcmVtb3ZlcyBzYW1wbGUgaW5mb3JtYXRpb24gY29sbGVjdGVkIGZyb20gcHJldmlvdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGluZyBydW5zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91IHJlc2V0IHRoZSBkYXRhIGlmIHlvdSBkbyBub3Qgd2FudCB0byBpbmNsdWRlIG9sZCBzYW1wbGUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNhdmU6PC9lbXBoYXNpcz4gU2F2ZXMgdGhlIGRhdGEgZG93bmxvYWRlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCB0byBhbm90aGVyIGRpcmVjdG9yeSBmb3IgbGF0ZXIgZXhhbWluYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9wZW46PC9lbXBoYXNpcz4gTG9hZHMgcHJldmlvdXNseSBzYXZlZCBkYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNsaWVudCBkb3dubG9hZHMgdGhlIGNvbXBsZXRlIHByb2ZpbGUgYXJjaGl2ZSBmcm9tCisgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgdG8gdGhlIGhvc3QgZm9yIHByb2Nlc3NpbmcuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgYXJjaGl2ZSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBzYW1wbGUgZGF0YSwgdGhlIG9iamVjdCBmaWxlcywKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG9iamVjdCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGFyY2hpdmUgaXMgdGhlbiBjb252ZXJ0ZWQgdXNpbmcgdGhlIDxmaWxlbmFtZT5vcGFyY2hjb252PC9maWxlbmFtZT4gc2NyaXB0LCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCB1c2VzIDxmaWxlbmFtZT5vcGltcG9ydDwvZmlsZW5hbWU+IHRvIGNvbnZlcnQgdGhlIGFyY2hpdmUgZnJvbQorICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IHRvIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBwcm9jZXNzZWQgb24gdGhlIGhvc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERvd25sb2FkZWQgYXJjaGl2ZXMgcmVzaWRlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4gaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IGFuZCBhcmUgY2xlYXJlZCB1cCB3aGVuIHRoZXkgYXJlIG5vIGxvbmdlciBpbiB1c2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3aXNoIHRvIHBlcmZvcm0ga2VybmVsIHByb2ZpbGluZywgeW91IG5lZWQgdG8gYmUgc3VyZQorICAgICAgICAgICAgICAgICAgICBhIDxmaWxlbmFtZT52bWxpbnV4PC9maWxlbmFtZT4gZmlsZSB0aGF0IG1hdGNoZXMgdGhlIHJ1bm5pbmcga2VybmVsIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIHNvdXJjZSBkaXJlY3RvcnksIHRoYXQgZmlsZSBpcyB1c3VhbGx5IGxvY2F0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ib290L3ZtbGludXgtPHJlcGxhY2VhYmxlPmtlcm5lbHZlcnNpb248L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+LCB3aGVyZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmtlcm5lbHZlcnNpb248L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+IGlzIHRoZSB2ZXJzaW9uIG9mIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGdlbmVyYXRlcyBzZXBhcmF0ZSA8ZmlsZW5hbWU+dm1saW51eDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGZvciBlYWNoIGtlcm5lbCBpdCBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIFRodXMsIGl0IHNob3VsZCBqdXN0IGJlIGEgcXVlc3Rpb24gb2YgbWFraW5nIHN1cmUgYSBtYXRjaGluZyBwYWNrYWdlIGlzCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCAoZS5nLiA8ZmlsZW5hbWU+b3BrZyBpbnN0YWxsIGtlcm5lbC12bWxpbnV4PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZXMgYXJlIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkIGludG8gZGV2ZWxvcG1lbnQgYW5kIHByb2ZpbGluZyBpbWFnZXMKKyAgICAgICAgICAgICAgICAgICAgYWxvbmdzaWRlIE9Qcm9maWxlLgorICAgICAgICAgICAgICAgICAgICBBIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGV4aXN0cyB3aXRoaW4gdGhlIE9Qcm9maWxlVUkgc2V0dGluZ3MgcGFnZSB0aGF0IHlvdSBjYW4gdXNlIHRvCisgICAgICAgICAgICAgICAgICAgIGVudGVyIHRoZSBsb2NhdGlvbiBvZiB0aGUgPGZpbGVuYW1lPnZtbGludXg8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXYWl0aW5nIGZvciBkZWJ1ZyBzeW1ib2xzIHRvIHRyYW5zZmVyIGZyb20gdGhlIGRldmljZSBjYW4gYmUgc2xvdywgYW5kIGl0CisgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBhbHdheXMgbmVjZXNzYXJ5IHRvIGFjdHVhbGx5IGhhdmUgdGhlbSBvbiB0aGUgZGV2aWNlIGZvciBPUHJvZmlsZSB1c2UuCisgICAgICAgICAgICAgICAgICAgIEFsbCB0aGF0IGlzIG5lZWRlZCBpcyBhIGNvcHkgb2YgdGhlIGZpbGVzeXN0ZW0gd2l0aCB0aGUgZGVidWcgc3ltYm9scyBwcmVzZW50CisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSB2aWV3ZXIgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGUgIjxsaW5rIGxpbmtlbmQ9J3BsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnLWxhdW5jaC1nZGInPkxhdW5jaCBHREIgb24gdGhlIEhvc3QgQ29tcHV0ZXI8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGNvdmVycyBob3cgdG8gY3JlYXRlIHN1Y2ggYSBkaXJlY3Rvcnkgd2l0aGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGFuZCBob3cgdG8gdXNlIHRoZSBPUHJvZmlsZVVJIFNldHRpbmdzCisgICAgICAgICAgICAgICAgICAgIERpYWxvZyB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZnkgdGhlIGRpcmVjdG9yeSwgaXQgd2lsbCBiZSB1c2VkIHdoZW4gdGhlIGZpbGUgY2hlY2tzdW1zCisgICAgICAgICAgICAgICAgICAgIG1hdGNoIHRob3NlIG9uIHRoZSBzeXN0ZW0geW91IGFyZSBwcm9maWxpbmcuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1vcHJvZmlsZS1vcHJvZmlsZXVpLW9mZmxpbmUiPgorICAgICAgICAgICAgICAgIDx0aXRsZT5PZmZsaW5lIE1vZGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIG5ldHdvcmsgYWNjZXNzIHRvIHRoZSB0YXJnZXQgaXMgdW5hdmFpbGFibGUsIHlvdSBjYW4gZ2VuZXJhdGUKKyAgICAgICAgICAgICAgICAgICAgYW4gYXJjaGl2ZSBmb3IgcHJvY2Vzc2luZyBpbiA8ZmlsZW5hbWU+b3Byb2ZpbGUtdmlld2VyPC9maWxlbmFtZT4gYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIG9wY29udHJvbCAtLXJlc2V0CisgICAgICMgb3Bjb250cm9sIC0tc3RhcnQgLS1zZXBhcmF0ZT1saWIgLS1uby12bWxpbnV4IC1jIDUKKyAgICAgICAgICAgIC4KKyAgICAgICAgICAgIC4KKyAgICAgW2RvIHdoYXRldmVyIGlzIGJlaW5nIHByb2ZpbGVkXQorICAgICAgICAgICAgLgorICAgICAgICAgICAgLgorICAgICAjIG9wY29udHJvbCAtLXN0b3AKKyAgICAgIyBvcGFyY2hpdmUgLW8gbXlfYXJjaGl2ZQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBhYm92ZSBleGFtcGxlLCA8ZmlsZW5hbWU+bXlfYXJjaGl2ZTwvZmlsZW5hbWU+IGlzIHRoZSBuYW1lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBhcmNoaXZlIGRpcmVjdG9yeSB3aGVyZSB5b3Ugd291bGQgbGlrZSB0aGUgcHJvZmlsZSBhcmNoaXZlIHRvIGJlIGtlcHQuCisgICAgICAgICAgICAgICAgICAgIEFmdGVyIHRoZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgeW91IGNhbiBjb3B5IGl0IHRvIGFub3RoZXIgaG9zdCBhbmQgbG9hZCBpdAorICAgICAgICAgICAgICAgICAgICB1c2luZyA8ZmlsZW5hbWU+b3Byb2ZpbGUtdmlld2VyPC9maWxlbmFtZT4gb3BlbiBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgICAgICAgICBJZiBuZWNlc3NhcnksIHRoZSBhcmNoaXZlIGlzIGNvbnZlcnRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWFpbnRhaW5pbmctb3Blbi1zb3VyY2UtbGljZW5zZS1jb21wbGlhbmNlLWR1cmluZy15b3VyLXByb2R1Y3RzLWxpZmVjeWNsZSc+CisgICAgICAgIDx0aXRsZT5NYWludGFpbmluZyBPcGVuIFNvdXJjZSBMaWNlbnNlIENvbXBsaWFuY2UgRHVyaW5nIFlvdXIgUHJvZHVjdCdzIExpZmVjeWNsZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmUgb2YgdGhlIGNvbmNlcm5zIGZvciBhIGRldmVsb3BtZW50IG9yZ2FuaXphdGlvbiB1c2luZyBvcGVuIHNvdXJjZQorICAgICAgICAgICAgc29mdHdhcmUgaXMgaG93IHRvIG1haW50YWluIGNvbXBsaWFuY2Ugd2l0aCB2YXJpb3VzIG9wZW4gc291cmNlCisgICAgICAgICAgICBsaWNlbnNpbmcgZHVyaW5nIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHByb2R1Y3QuCisgICAgICAgICAgICBXaGlsZSB0aGlzIHNlY3Rpb24gZG9lcyBub3QgcHJvdmlkZSBsZWdhbCBhZHZpY2Ugb3IKKyAgICAgICAgICAgIGNvbXByZWhlbnNpdmVseSBjb3ZlciBhbGwgc2NlbmFyaW9zLCBpdCBkb2VzCisgICAgICAgICAgICBwcmVzZW50IG1ldGhvZHMgdGhhdCB5b3UgY2FuIHVzZSB0bworICAgICAgICAgICAgYXNzaXN0IHlvdSBpbiBtZWV0aW5nIHRoZSBjb21wbGlhbmNlIHJlcXVpcmVtZW50cyBkdXJpbmcgYSBzb2Z0d2FyZQorICAgICAgICAgICAgcmVsZWFzZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2l0aCBodW5kcmVkcyBvZiBkaWZmZXJlbnQgb3BlbiBzb3VyY2UgbGljZW5zZXMgdGhhdCB0aGUgWW9jdG8KKyAgICAgICAgICAgIFByb2plY3QgdHJhY2tzLCBpdCBpcyBkaWZmaWN1bHQgdG8ga25vdyB0aGUgcmVxdWlyZW1lbnRzIG9mIGVhY2gKKyAgICAgICAgICAgIGFuZCBldmVyeSBsaWNlbnNlLgorICAgICAgICAgICAgSG93ZXZlciwgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgbWFqb3IgRkxPU1MgbGljZW5zZXMgY2FuIGJlZ2luCisgICAgICAgICAgICB0byBiZSBjb3ZlcmVkIGJ5CisgICAgICAgICAgICBhc3N1bWluZyB0aGF0IHRocmVlIG1haW4gYXJlYXMgb2YgY29uY2VybiBleGlzdDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNvdXJjZSBjb2RlIG11c3QgYmUgcHJvdmlkZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkxpY2Vuc2UgdGV4dCBmb3IgdGhlIHNvZnR3YXJlIG11c3QgYmUKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbXBpbGF0aW9uIHNjcmlwdHMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb2RlIG11c3QgYmUgcHJvdmlkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBUaGVyZSBhcmUgb3RoZXIgcmVxdWlyZW1lbnRzIGJleW9uZCB0aGUgc2NvcGUgb2YgdGhlc2UKKyAgICAgICAgICAgIHRocmVlIGFuZCB0aGUgbWV0aG9kcyBkZXNjcmliZWQgaW4gdGhpcyBzZWN0aW9uCisgICAgICAgICAgICAoZS5nLiB0aGUgbWVjaGFuaXNtIHRocm91Z2ggd2hpY2ggc291cmNlIGNvZGUgaXMgZGlzdHJpYnV0ZWQpLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyBkaWZmZXJlbnQgb3JnYW5pemF0aW9ucyBoYXZlIGRpZmZlcmVudCBtZXRob2RzIG9mIGNvbXBseWluZyB3aXRoCisgICAgICAgICAgICBvcGVuIHNvdXJjZSBsaWNlbnNpbmcsIHRoaXMgc2VjdGlvbiBpcyBub3QgbWVhbnQgdG8gaW1wbHkgdGhhdAorICAgICAgICAgICAgdGhlcmUgaXMgb25seSBvbmUgc2luZ2xlIHdheSB0byBtZWV0IHlvdXIgY29tcGxpYW5jZSBvYmxpZ2F0aW9ucywKKyAgICAgICAgICAgIGJ1dCByYXRoZXIgdG8gZGVzY3JpYmUgb25lIG1ldGhvZCBvZiBhY2hpZXZpbmcgY29tcGxpYW5jZS4KKyAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBtZXRob2RzIHN1cHBvcnRlZCB0byBtZWV0IHRoZQorICAgICAgICAgICAgcHJldmlvdXNseSBtZW50aW9uZWQgdGhyZWUgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgT25jZSB5b3UgdGFrZSBzdGVwcyB0byBtZWV0IHRoZXNlIHJlcXVpcmVtZW50cywKKyAgICAgICAgICAgIGFuZCBwcmlvciB0byByZWxlYXNpbmcgaW1hZ2VzLCBzb3VyY2VzLCBhbmQgdGhlIGJ1aWxkIHN5c3RlbSwKKyAgICAgICAgICAgIHlvdSBzaG91bGQgYXVkaXQgYWxsIGFydGlmYWN0cyB0byBlbnN1cmUgY29tcGxldGVuZXNzLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgZ2VuZXJhdGVzIGEgbGljZW5zZSBtYW5pZmVzdCBkdXJpbmcKKyAgICAgICAgICAgICAgICBpbWFnZSBjcmVhdGlvbiB0aGF0IGlzIGxvY2F0ZWQKKyAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+JHtERVBMT1lfRElSfS9saWNlbnNlcy88cmVwbGFjZWFibGU+aW1hZ2VfbmFtZS1kYXRlc3RhbXA8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdG8gYXNzaXN0IHdpdGggYW55IGF1ZGl0cy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwcm92aWRpbmctdGhlLXNvdXJjZS1jb2RlJz4KKyAgICAgICAgICAgIDx0aXRsZT5Qcm92aWRpbmcgdGhlIFNvdXJjZSBDb2RlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQ29tcGxpYW5jZSBhY3Rpdml0aWVzIHNob3VsZCBiZWdpbiBiZWZvcmUgeW91IGdlbmVyYXRlIHRoZQorICAgICAgICAgICAgICAgIGZpbmFsIGltYWdlLgorICAgICAgICAgICAgICAgIFRoZSBmaXJzdCB0aGluZyB5b3Ugc2hvdWxkIGxvb2sgYXQgaXMgdGhlIHJlcXVpcmVtZW50IHRoYXQKKyAgICAgICAgICAgICAgICB0b3BzIHRoZSBsaXN0IGZvciBtb3N0IGNvbXBsaWFuY2UgZ3JvdXBzIC0gcHJvdmlkaW5nCisgICAgICAgICAgICAgICAgdGhlIHNvdXJjZS4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBoYXMgYSBmZXcgd2F5cyBvZiBtZWV0aW5nIHRoaXMKKyAgICAgICAgICAgICAgICByZXF1aXJlbWVudC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25lIG9mIHRoZSBlYXNpZXN0IHdheXMgdG8gbWVldCB0aGlzIHJlcXVpcmVtZW50IGlzCisgICAgICAgICAgICAgICAgdG8gcHJvdmlkZSB0aGUgZW50aXJlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB1c2VkIGJ5IHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCwgaG93ZXZlciwgaGFzIGEgZmV3IGlzc3Vlcy4KKyAgICAgICAgICAgICAgICBUaGUgbW9zdCBvYnZpb3VzIGlzIHRoZSBzaXplIG9mIHRoZSBkaXJlY3Rvcnkgc2luY2UgaXQgaW5jbHVkZXMKKyAgICAgICAgICAgICAgICBhbGwgc291cmNlcyB1c2VkIGluIHRoZSBidWlsZCBhbmQgbm90IGp1c3QgdGhlIHNvdXJjZSB1c2VkIGluCisgICAgICAgICAgICAgICAgdGhlIHJlbGVhc2VkIGltYWdlLgorICAgICAgICAgICAgICAgIEl0IHdpbGwgaW5jbHVkZSB0b29sY2hhaW4gc291cmNlLCBhbmQgb3RoZXIgYXJ0aWZhY3RzLCB3aGljaAorICAgICAgICAgICAgICAgIHlvdSB3b3VsZCBub3QgZ2VuZXJhbGx5IHJlbGVhc2UuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlIG1vcmUgc2VyaW91cyBpc3N1ZSBmb3IgbW9zdCBjb21wYW5pZXMgaXMgYWNjaWRlbnRhbAorICAgICAgICAgICAgICAgIHJlbGVhc2Ugb2YgcHJvcHJpZXRhcnkgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgYW4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1hcmNoaXZlcic+PGZpbGVuYW1lPmFyY2hpdmVyPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGNsYXNzIHRvIGhlbHAgYXZvaWQgc29tZSBvZiB0aGVzZSBjb25jZXJucy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVmb3JlIHlvdSBlbXBsb3kgPGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+IG9yIHRoZQorICAgICAgICAgICAgICAgIGFyY2hpdmVyIGNsYXNzLCB5b3UgbmVlZCB0byBkZWNpZGUgaG93IHlvdSBjaG9vc2UgdG8KKyAgICAgICAgICAgICAgICBwcm92aWRlIHNvdXJjZS4KKyAgICAgICAgICAgICAgICBUaGUgc291cmNlIGFyY2hpdmVyIGNsYXNzIGNhbiBnZW5lcmF0ZSB0YXJiYWxscyBhbmQgU1JQTXMKKyAgICAgICAgICAgICAgICBhbmQgY2FuIGNyZWF0ZSB0aGVtIHdpdGggdmFyaW91cyBsZXZlbHMgb2YgY29tcGxpYW5jZSBpbiBtaW5kLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmUgd2F5IG9mIGRvaW5nIHRoaXMgKGJ1dCBjZXJ0YWlubHkgbm90IHRoZSBvbmx5IHdheSkgaXMgdG8KKyAgICAgICAgICAgICAgICByZWxlYXNlIGp1c3QgdGhlIHNvdXJjZSBhcyBhIHRhcmJhbGwuCisgICAgICAgICAgICAgICAgWW91IGNhbiBkbyB0aGlzIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIHRvIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJhcmNoaXZlciIKKyAgICAgQVJDSElWRVJfTU9ERVtzcmNdID0gIm9yaWdpbmFsIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBEdXJpbmcgdGhlIGNyZWF0aW9uIG9mIHlvdXIgaW1hZ2UsIHRoZSBzb3VyY2UgZnJvbSBhbGwKKyAgICAgICAgICAgICAgICByZWNpcGVzIHRoYXQgZGVwbG95IHBhY2thZ2VzIHRvIHRoZSBpbWFnZSBpcyBwbGFjZWQgd2l0aGluCisgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3JpZXMgb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQTE9ZX0RJUi9zb3VyY2VzPC9maWxlbmFtZT4gYmFzZWQgb24gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGZvciBlYWNoIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBSZWxlYXNpbmcgdGhlIGVudGlyZSBkaXJlY3RvcnkgZW5hYmxlcyB5b3UgdG8gY29tcGx5IHdpdGgKKyAgICAgICAgICAgICAgICByZXF1aXJlbWVudHMgY29uY2VybmluZyBwcm92aWRpbmcgdGhlIHVubW9kaWZpZWQgc291cmNlLgorICAgICAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlIHNpemUgb2YgdGhlIGRpcmVjdG9yeSBjYW4KKyAgICAgICAgICAgICAgICBnZXQgbGFyZ2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgd2F5IHRvIGhlbHAgbWl0aWdhdGUgdGhlIHNpemUgaXNzdWUgaXMgdG8gb25seSByZWxlYXNlCisgICAgICAgICAgICAgICAgdGFyYmFsbHMgZm9yIGxpY2Vuc2VzIHRoYXQgcmVxdWlyZSB0aGUgcmVsZWFzZSBvZgorICAgICAgICAgICAgICAgIHNvdXJjZS4KKyAgICAgICAgICAgICAgICBMZXQgdXMgYXNzdW1lIHlvdSBhcmUgb25seSBjb25jZXJuZWQgd2l0aCBHUEwgY29kZSBhcworICAgICAgICAgICAgICAgIGlkZW50aWZpZWQgd2l0aCB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCBwb2t5L2J1aWxkL3RtcC9kZXBsb3kvc291cmNlcworICAgICAkIG1rZGlyIH4vZ3BsX3NvdXJjZV9yZWxlYXNlCisgICAgICQgZm9yIGRpciBpbiAqLypHUEwqOyBkbyBjcCAtciAkZGlyIH4vZ3BsX3NvdXJjZV9yZWxlYXNlOyBkb25lCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHlvdSBjb3VsZCBjcmVhdGUgYSB0YXJiYWxsIGZyb20gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdwbF9zb3VyY2VfcmVsZWFzZTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQKKyAgICAgICAgICAgICAgICBwcm92aWRlIHRoYXQgdG8gdGhlIGVuZCB1c2VyLgorICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIHdvdWxkIGJlIGEgc3RlcCB0b3dhcmQgYWNoaWV2aW5nIGNvbXBsaWFuY2UKKyAgICAgICAgICAgICAgICB3aXRoIHNlY3Rpb24gM2Egb2YgR1BMdjIgYW5kIHdpdGggc2VjdGlvbiA2IG9mIEdQTHYzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Byb3ZpZGluZy1saWNlbnNlLXRleHQnPgorICAgICAgICAgICAgPHRpdGxlPlByb3ZpZGluZyBMaWNlbnNlIFRleHQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmUgcmVxdWlyZW1lbnQgdGhhdCBpcyBvZnRlbiBvdmVybG9va2VkIGlzIGluY2x1c2lvbgorICAgICAgICAgICAgICAgIG9mIGxpY2Vuc2UgdGV4dC4KKyAgICAgICAgICAgICAgICBUaGlzIHJlcXVpcmVtZW50IGFsc28gbmVlZHMgdG8gYmUgZGVhbHQgd2l0aCBwcmlvciB0bworICAgICAgICAgICAgICAgIGdlbmVyYXRpbmcgdGhlIGZpbmFsIGltYWdlLgorICAgICAgICAgICAgICAgIFNvbWUgbGljZW5zZXMgcmVxdWlyZSB0aGUgbGljZW5zZSB0ZXh0IHRvIGFjY29tcGFueQorICAgICAgICAgICAgICAgIHRoZSBiaW5hcnkuCisgICAgICAgICAgICAgICAgWW91IGNhbiBhY2hpZXZlIHRoaXMgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENPUFlfTElDX01BTklGRVNUID0gIjEiCisgICAgIENPUFlfTElDX0RJUlMgPSAiMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQWRkaW5nIHRoZXNlIHN0YXRlbWVudHMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBlbnN1cmVzCisgICAgICAgICAgICAgICAgdGhhdCB0aGUgbGljZW5zZXMgY29sbGVjdGVkIGR1cmluZyBwYWNrYWdlIGdlbmVyYXRpb24KKyAgICAgICAgICAgICAgICBhcmUgaW5jbHVkZWQgb24geW91ciBpbWFnZS4KKyAgICAgICAgICAgICAgICBBcyB0aGUgc291cmNlIGFyY2hpdmVyIGhhcyBhbHJlYWR5IGFyY2hpdmVkIHRoZSBvcmlnaW5hbAorICAgICAgICAgICAgICAgIHVubW9kaWZpZWQgc291cmNlIHRoYXQgY29udGFpbnMgdGhlIGxpY2Vuc2UgZmlsZXMsCisgICAgICAgICAgICAgICAgeW91IHdvdWxkIGhhdmUgYWxyZWFkeSBtZXQgdGhlIHJlcXVpcmVtZW50cyBmb3IgaW5jbHVzaW9uCisgICAgICAgICAgICAgICAgb2YgdGhlIGxpY2Vuc2UgaW5mb3JtYXRpb24gd2l0aCBzb3VyY2UgYXMgZGVmaW5lZCBieSB0aGUgR1BMCisgICAgICAgICAgICAgICAgYW5kIG90aGVyIG9wZW4gc291cmNlIGxpY2Vuc2VzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Byb3ZpZGluZy1jb21waWxhdGlvbi1zY3JpcHRzLWFuZC1zb3VyY2UtY29kZS1tb2RpZmljYXRpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5Qcm92aWRpbmcgQ29tcGlsYXRpb24gU2NyaXB0cyBhbmQgU291cmNlIENvZGUgTW9kaWZpY2F0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgYWRkcmVzc2VkIGFsbCB3ZSBuZWVkIHRvIGFkZHJlc3MKKyAgICAgICAgICAgICAgICBwcmlvciB0byBnZW5lcmF0aW5nIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICBUaGUgbmV4dCB0d28gcmVxdWlyZW1lbnRzIGFyZSBhZGRyZXNzZWQgZHVyaW5nIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgIHBhY2thZ2luZyBvZiB0aGUgcmVsZWFzZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQnkgcmVsZWFzaW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgYW5kIHRoZSBsYXllcnMgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkLCB5b3Ugd2lsbCBiZSBwcm92aWRpbmcgYm90aAorICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uIHNjcmlwdHMgYW5kIHRoZSBzb3VyY2UgY29kZSBtb2RpZmljYXRpb25zIGluIG9uZQorICAgICAgICAgICAgICAgIHN0ZXAuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHRoZSBkZXBsb3ltZW50IHRlYW0gaGFzIGEKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNic3AtbGF5ZXJzJz5CU1AgbGF5ZXI8L3VsaW5rPgorICAgICAgICAgICAgICAgIGFuZCBhIGRpc3RybyBsYXllciwgYW5kIHRob3NlIHRob3NlIGxheWVycyBhcmUgdXNlZCB0byBwYXRjaCwKKyAgICAgICAgICAgICAgICBjb21waWxlLCBwYWNrYWdlLCBvciBtb2RpZnkgKGluIGFueSB3YXkpIGFueSBvcGVuIHNvdXJjZQorICAgICAgICAgICAgICAgIHNvZnR3YXJlIGluY2x1ZGVkIGluIHlvdXIgcmVsZWFzZWQgaW1hZ2VzLCB5b3UKKyAgICAgICAgICAgICAgICBtaWdodCBiZSByZXF1aXJlZCB0byB0byByZWxlYXNlIHRob3NlIGxheWVycyB1bmRlciBzZWN0aW9uIDMgb2YKKyAgICAgICAgICAgICAgICBHUEx2MiBvciBzZWN0aW9uIDEgb2YgR1BMdjMuCisgICAgICAgICAgICAgICAgT25lIHdheSBvZiBkb2luZyB0aGF0IGlzIHdpdGggYSBjbGVhbgorICAgICAgICAgICAgICAgIGNoZWNrb3V0IG9mIHRoZSB2ZXJzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IGFuZCBsYXllcnMgdXNlZAorICAgICAgICAgICAgICAgIGR1cmluZyB5b3VyIGJ1aWxkLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgV2UgYnVpbHQgdXNpbmcgdGhlICZESVNUUk9fTkFNRTsgYnJhbmNoIG9mIHRoZSBwb2t5IHJlcG8KKyAgICAgJCBnaXQgY2xvbmUgLWIgJkRJU1RST19OQU1FOyBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5CisgICAgICQgY2QgcG9reQorICAgICAjIFdlIGJ1aWx0IHVzaW5nIHRoZSByZWxlYXNlX2JyYW5jaCBmb3Igb3VyIGxheWVycworICAgICAkIGdpdCBjbG9uZSAtYiByZWxlYXNlX2JyYW5jaCBnaXQ6Ly9naXQubXljb21wYW55LmNvbS9tZXRhLW15LWJzcC1sYXllcgorICAgICAkIGdpdCBjbG9uZSAtYiByZWxlYXNlX2JyYW5jaCBnaXQ6Ly9naXQubXljb21wYW55LmNvbS9tZXRhLW15LXNvZnR3YXJlLWxheWVyCisgICAgICMgY2xlYW4gdXAgdGhlIC5naXQgcmVwb3MKKyAgICAgJCBmaW5kIC4gLW5hbWUgIi5naXQiIC10eXBlIGQgLWV4ZWMgcm0gLXJmIHt9IFw7CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE9uZSB0aGluZyBhIGRldmVsb3BtZW50IG9yZ2FuaXphdGlvbiBtaWdodCB3YW50IHRvIGNvbnNpZGVyCisgICAgICAgICAgICAgICAgZm9yIGVuZC11c2VyIGNvbnZlbmllbmNlIGlzIHRvIG1vZGlmeQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmYvYmJsYXllcnMuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgICAgIGVuc3VyZSB0aGF0IHdoZW4gdGhlIGVuZCB1c2VyIHV0aWxpemVzIHRoZSByZWxlYXNlZCBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbSB0byBidWlsZCBhbiBpbWFnZSwgdGhlIGRldmVsb3BtZW50IG9yZ2FuaXphdGlvbidzCisgICAgICAgICAgICAgICAgbGF5ZXJzIGFyZSBpbmNsdWRlZCBpbiB0aGUgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUgYXV0b21hdGljYWxseToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgTEFZRVJfQ09ORl9WRVJTSU9OIGlzIGluY3JlYXNlZCBlYWNoIHRpbWUgYnVpbGQvY29uZi9iYmxheWVycy5jb25mCisgICAgICMgY2hhbmdlcyBpbmNvbXBhdGlibHkKKyAgICAgTENPTkZfVkVSU0lPTiA9ICI2IgorCisgICAgIEJCUEFUSCA9ICIke1RPUERJUn0iCisgICAgIEJCRklMRVMgPz0gIiIKKworICAgICBCQkxBWUVSUyA/PSAiIFwKKyAgICAgICAjI09FUk9PVCMjL21ldGEgXAorICAgICAgICMjT0VST09UIyMvbWV0YS15b2N0byBcCisgICAgICAgIyNPRVJPT1QjIy9tZXRhLXlvY3RvLWJzcCBcCisgICAgICAgIyNPRVJPT1QjIy9tZXRhLW15bGF5ZXIgXAorICAgICAgICIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQ3JlYXRpbmcgYW5kIHByb3ZpZGluZyBhbiBhcmNoaXZlIG9mIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21ldGFkYXRhJz5NZXRhZGF0YTwvbGluaz4gbGF5ZXJzCisgICAgICAgICAgICAgICAgKHJlY2lwZXMsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBzbyBmb3J0aCkKKyAgICAgICAgICAgICAgICBlbmFibGVzIHlvdSB0byBtZWV0IHlvdXIKKyAgICAgICAgICAgICAgICByZXF1aXJlbWVudHMgdG8gaW5jbHVkZSB0aGUgc2NyaXB0cyB0byBjb250cm9sIGNvbXBpbGF0aW9uCisgICAgICAgICAgICAgICAgYXMgd2VsbCBhcyBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGUgb3JpZ2luYWwgc291cmNlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXRoZS1lcnJvci1yZXBvcnRpbmctdG9vbCc+CisgICAgICAgIDx0aXRsZT5Vc2luZyB0aGUgRXJyb3IgUmVwb3J0aW5nIFRvb2w8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGVycm9yIHJlcG9ydGluZyB0b29sIGFsbG93cyB5b3UgdG8KKyAgICAgICAgICAgIHN1Ym1pdCBlcnJvcnMgZW5jb3VudGVyZWQgZHVyaW5nIGJ1aWxkcyB0byBhIGNlbnRyYWwgZGF0YWJhc2UuCisgICAgICAgICAgICBPdXRzaWRlIG9mIHRoZSBidWlsZCBlbnZpcm9ubWVudCwgeW91IGNhbiB1c2UgYSB3ZWIgaW50ZXJmYWNlIHRvCisgICAgICAgICAgICBicm93c2UgZXJyb3JzLCB2aWV3IHN0YXRpc3RpY3MsIGFuZCBxdWVyeSBmb3IgZXJyb3JzLgorICAgICAgICAgICAgVGhlIHRvb2wgd29ya3MgdXNpbmcgYSBjbGllbnQtc2VydmVyIHN5c3RlbSB3aGVyZSB0aGUgY2xpZW50CisgICAgICAgICAgICBwb3J0aW9uIGlzIGludGVncmF0ZWQgd2l0aCB0aGUgaW5zdGFsbGVkIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIFRoZSBzZXJ2ZXIgcmVjZWl2ZXMgdGhlIGluZm9ybWF0aW9uIGNvbGxlY3RlZCBhbmQgc2F2ZXMgaXQgaW4gYQorICAgICAgICAgICAgZGF0YWJhc2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgbGl2ZSBpbnN0YW5jZSBvZiB0aGUgZXJyb3IgcmVwb3J0aW5nIHNlcnZlciBleGlzdHMgYXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9lcnJvcnMueW9jdG9wcm9qZWN0Lm9yZyc+PC91bGluaz4uCisgICAgICAgICAgICBUaGlzIHNlcnZlciBleGlzdHMgc28gdGhhdCB3aGVuIHlvdSB3YW50IHRvIGdldCBoZWxwIHdpdGgKKyAgICAgICAgICAgIGJ1aWxkIGZhaWx1cmVzLCB5b3UgY2FuIHN1Ym1pdCBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIG9uIHRoZQorICAgICAgICAgICAgZmFpbHVyZSBlYXNpbHkgYW5kIHRoZW4gcG9pbnQgdG8gdGhlIFVSTCBpbiB5b3VyIGJ1ZyByZXBvcnQKKyAgICAgICAgICAgIG9yIHNlbmQgYW4gZW1haWwgdG8gdGhlIG1haWxpbmcgbGlzdC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIElmIHlvdSBzZW5kIGVycm9yIHJlcG9ydHMgdG8gdGhpcyBzZXJ2ZXIsIHRoZSByZXBvcnRzIGJlY29tZQorICAgICAgICAgICAgICAgIHB1YmxpY2x5IHZpc2libGUuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZW5hYmxpbmctYW5kLXVzaW5nLXRoZS10b29sJz4KKyAgICAgICAgICAgIDx0aXRsZT5FbmFibGluZyBhbmQgVXNpbmcgdGhlIFRvb2w8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgZXJyb3IgcmVwb3J0aW5nIHRvb2wgaXMgZGlzYWJsZWQuCisgICAgICAgICAgICAgICAgWW91IGNhbiBlbmFibGUgaXQgYnkgaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1yZXBvcnQtZXJyb3InPjxmaWxlbmFtZT5yZXBvcnQtZXJyb3I8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgY2xhc3MgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50IHRvIHRoZSBlbmQgb2YKKyAgICAgICAgICAgICAgICB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVCArPSAicmVwb3J0LWVycm9yIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGVycm9yIHJlcG9ydGluZyBmZWF0dXJlIHN0b3JlcyBpbmZvcm1hdGlvbiBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxPR19ESVInPjxmaWxlbmFtZT5MT0dfRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59L2Vycm9yLXJlcG9ydDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gc3BlY2lmeSBhIGRpcmVjdG9yeSB0byB1c2UgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICB0byB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVSUl9SRVBPUlRfRElSID0gInBhdGgiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEVuYWJsaW5nIGVycm9yIHJlcG9ydGluZyBjYXVzZXMgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gY29sbGVjdAorICAgICAgICAgICAgICAgIHRoZSBlcnJvcnMgYW5kIHN0b3JlIHRoZW0gaW4gYSBmaWxlIGFzIHByZXZpb3VzbHkgZGVzY3JpYmVkLgorICAgICAgICAgICAgICAgIFdoZW4gdGhlIGJ1aWxkIHN5c3RlbSBlbmNvdW50ZXJzIGFuIGVycm9yLCBpdCBpbmNsdWRlcyBhCisgICAgICAgICAgICAgICAgY29tbWFuZCBhcyBwYXJ0IG9mIHRoZSBjb25zb2xlIG91dHB1dC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHJ1biB0aGUgY29tbWFuZCB0byBzZW5kIHRoZSBlcnJvciBmaWxlIHRvIHRoZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBzZW5kcyB0aGUgZXJyb3JzIHRvIGFuCisgICAgICAgICAgICAgICAgdXBzdHJlYW0gc2VydmVyOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzZW5kLWVycm9yLXJlcG9ydCAvaG9tZS9icmFuZHVzYS9wcm9qZWN0L3Bva3kvYnVpbGQvdG1wL2xvZy9lcnJvci1yZXBvcnQvZXJyb3JfcmVwb3J0XzIwMTQwMzE0MTYxNy50eHQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIHRoZSBlcnJvcnMgYXJlIHNlbnQgdG8gYSBwdWJsaWMKKyAgICAgICAgICAgICAgICBkYXRhYmFzZSBhdmFpbGFibGUgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZXJyb3JzLnlvY3RvcHJvamVjdC5vcmcnPjwvdWxpbms+LCB3aGljaCBpcworICAgICAgICAgICAgICAgIHVzZWQgYnkgdGhlIGVudGlyZSBjb21tdW5pdHkuCisgICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZnkgYSBwYXJ0aWN1bGFyIHNlcnZlciwgeW91IGNhbiBzZW5kIHRoZSBlcnJvcnMKKyAgICAgICAgICAgICAgICB0byBhIGRpZmZlcmVudCBkYXRhYmFzZS4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgIG9wdGlvbnM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNlbmQtZXJyb3ItcmVwb3J0IC0taGVscAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiBzZW5kaW5nIHRoZSBlcnJvciBmaWxlLCB5b3UgYXJlIHByb21wdGVkIHRvIHJldmlldyB0aGUKKyAgICAgICAgICAgICAgICBkYXRhIGJlaW5nIHNlbnQgYXMgd2VsbCBhcyB0byBwcm92aWRlIGEgbmFtZSBhbmQgb3B0aW9uYWwKKyAgICAgICAgICAgICAgICBlbWFpbCBhZGRyZXNzLgorICAgICAgICAgICAgICAgIE9uY2UgeW91IHNhdGlzZnkgdGhlc2UgcHJvbXB0cywgdGhlIGNvbW1hbmQgcmV0dXJucyBhIGxpbmsKKyAgICAgICAgICAgICAgICBmcm9tIHRoZSBzZXJ2ZXIgdGhhdCBjb3JyZXNwb25kcyB0byB5b3VyIGVudHJ5IGluIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaGVyZSBpcyBhIHR5cGljYWwgbGluazoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGh0dHA6Ly9lcnJvcnMueW9jdG9wcm9qZWN0Lm9yZy9FcnJvcnMvRGV0YWlscy85NTIyLworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgdGhlIGxpbmsgdGFrZXMgeW91IHRvIGEgd2ViIGludGVyZmFjZSB3aGVyZSB5b3UgY2FuCisgICAgICAgICAgICAgICAgYnJvd3NlLCBxdWVyeSB0aGUgZXJyb3JzLCBhbmQgdmlldyBzdGF0aXN0aWNzLgorICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkaXNhYmxpbmctdGhlLXRvb2wnPgorICAgICAgICAgICAgPHRpdGxlPkRpc2FibGluZyB0aGUgVG9vbDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGRpc2FibGUgdGhlIGVycm9yIHJlcG9ydGluZyBmZWF0dXJlLCBzaW1wbHkgcmVtb3ZlIG9yIGNvbW1lbnQKKyAgICAgICAgICAgICAgICBvdXQgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQgZnJvbSB0aGUgZW5kIG9mIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4geW91cgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVQgKz0gInJlcG9ydC1lcnJvciIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy11cC15b3VyLW93bi1lcnJvci1yZXBvcnRpbmctc2VydmVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIFlvdXIgT3duIEVycm9yIFJlcG9ydGluZyBTZXJ2ZXI8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBzZXQgdXAgeW91ciBvd24gZXJyb3IgcmVwb3J0aW5nIHNlcnZlciwgeW91CisgICAgICAgICAgICAgICAgY2FuIG9idGFpbiB0aGUgY29kZSBmcm9tIHRoZSBHaXQgcmVwb3NpdG9yeSBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL2Vycm9yLXJlcG9ydC13ZWIvJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbnMgb24gaG93IHRvIHNldCBpdCB1cCBhcmUgaW4gdGhlIFJFQURNRSBkb2N1bWVudC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+CisKKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIzZWEzYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKQEAgLTAsMCArMSwyNyBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IiB2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCistLT4KKworICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvcGVybWFsaW5rcy54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9kaXZpc2lvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wiLz4KKworICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInZGV2LXN0eWxlLmNzcyciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiIHNlbGVjdD0iQSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUuaWQuYXR0cmlidXRlcyIgc2VsZWN0PSIxIiAvPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkN2I1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8eHNsOnN0eWxlc2hlZXQKKwl4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKwl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKKwl4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IgorCXZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0CisJICBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCistLT4KKworICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rZXIub3V0cHV0LmluZGVudCIgc2VsZWN0PSIneWVzJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rLnF1aWV0bHkiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rLmZpcnN0LnNlY3Rpb25zIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5zZWN0aW9uLmRlcHRoIiBzZWxlY3Q9IjEwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0idXNlLmlkLmFzLmZpbGVuYW1lIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ1bGluay50YXJnZXQiIHNlbGVjdD0iJ19zZWxmJyIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJiYXNlLmRpciIgc2VsZWN0PSInaHRtbC9kZXYtbWFudWFsLyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJy4uL2Jvb2suY3NzJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImVjbGlwc2UubWFuaWZlc3QiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNyZWF0ZS5wbHVnaW4ueG1sIiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzdXBwcmVzcy5uYXZpZ2F0aW9uIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS5pbmRleCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IjEiIC8+Cis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1pbnRyby54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWludHJvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzUwODgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1pbnRyby54bWwKQEAgLTAsMCArMSwyNDYgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdkZXYtbWFudWFsLWludHJvJz4KKworPHRpdGxlPlRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbDwvdGl0bGU+CisgICAgPHNlY3Rpb24gaWQ9J2Rldi1pbnRybyc+CisgICAgICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2VsY29tZSB0byB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwhCisgICAgICAgICAgICBUaGlzIG1hbnVhbCBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZSBZb2N0byBQcm9qZWN0IHRvCisgICAgICAgICAgICBkZXZlbG9wIGVtYmVkZGVkIExpbnV4IGltYWdlcyBhbmQgdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgdGhhdAorICAgICAgICAgICAgcnVuIG9uIHRhcmdldGVkIGRldmljZXMuCisgICAgICAgICAgICBUaGUgbWFudWFsIHByb3ZpZGVzIGFuIG92ZXJ2aWV3IG9mIGltYWdlLCBrZXJuZWwsIGFuZAorICAgICAgICAgICAgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgIEJlY2F1c2UgbXVjaCBvZiB0aGUgaW5mb3JtYXRpb24gaW4gdGhpcyBtYW51YWwgaXMgZ2VuZXJhbCwgaXQKKyAgICAgICAgICAgIGNvbnRhaW5zIG1hbnkgcmVmZXJlbmNlcyB0byBvdGhlciBzb3VyY2VzIHdoZXJlIHlvdSBjYW4gZmluZCBtb3JlCisgICAgICAgICAgICBkZXRhaWwuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNhbiBmaW5kIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIEdpdCwgcmVwb3NpdG9yaWVzLAorICAgICAgICAgICAgYW5kIG9wZW4gc291cmNlIGluIGdlbmVyYWwgaW4gbWFueSBwbGFjZXMgb24gdGhlIEludGVybmV0LgorICAgICAgICAgICAgQW5vdGhlciBleGFtcGxlIHNwZWNpZmljIHRvIHRoZSBZb2N0byBQcm9qZWN0IGlzIGhvdyB0byBxdWlja2x5CisgICAgICAgICAgICBzZXQgdXAgeW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSBhbmQgYnVpbGQgYW4gaW1hZ2UsIHdoaWNoIHlvdQorICAgICAgICAgICAgZmluZCBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsnPllvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQ8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGRvZXMsIGhvd2V2ZXIsIHByb3ZpZGUKKyAgICAgICAgICAgIGd1aWRhbmNlIGFuZCBleGFtcGxlcyBvbiBob3cgdG8gY2hhbmdlIHRoZSBrZXJuZWwgc291cmNlIGNvZGUsCisgICAgICAgICAgICByZWNvbmZpZ3VyZSB0aGUga2VybmVsLCBhbmQgZGV2ZWxvcCBhbiBhcHBsaWNhdGlvbiB1c2luZyB0aGUKKyAgICAgICAgICAgIHBvcHVsYXIgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4gSURFLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBCeSBkZWZhdWx0LCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCBjcmVhdGVzIGEgUG9reSBkaXN0cmlidXRpb24uCisgICAgICAgICAgICBIb3dldmVyLCB5b3UgY2FuIGNyZWF0ZSB5b3VyIG93biBkaXN0cmlidXRpb24gYnkgcHJvdmlkaW5nIGtleQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nbWV0YWRhdGEnPk1ldGFkYXRhPC9saW5rPi4KKyAgICAgICAgICAgIEEgZ29vZCBleGFtcGxlIGlzIEFuZ3N0cm9tLCB3aGljaCBoYXMgaGFkIGEgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICBiYXNlZCBvbiB0aGUgWW9jdG8gUHJvamVjdCBzaW5jZSBpdHMgaW5jZXB0aW9uLgorICAgICAgICAgICAgT3RoZXIgZXhhbXBsZXMgaW5jbHVkZSBjb21tZXJjaWFsIGRpc3RyaWJ1dGlvbnMgbGlrZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9vcmdhbml6YXRpb24vd2luZC1yaXZlci1zeXN0ZW1zJz5XaW5kIFJpdmVyIExpbnV4PC91bGluaz4sCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy55b2N0b3Byb2plY3Qub3JnL29yZ2FuaXphdGlvbi9tZW50b3ItZ3JhcGhpY3MnPk1lbnRvciBFbWJlZGRlZCBMaW51eDwvdWxpbms+LAorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9vcmdhbml6YXRpb24vZW5lYS1hYic+RU5FQSBMaW51eDwvdWxpbms+CisgICAgICAgICAgICBhbmQgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9lY29zeXN0ZW0vbWVtYmVyLW9yZ2FuaXphdGlvbnMnPm90aGVyczwvdWxpbms+LgorICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmcteW91ci1vd24tZGlzdHJpYnV0aW9uJz5DcmVhdGluZyBZb3VyIE93biBEaXN0cmlidXRpb248L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd3aGF0LXRoaXMtbWFudWFsLXByb3ZpZGVzJz4KKyAgICAgICAgPHRpdGxlPldoYXQgVGhpcyBNYW51YWwgUHJvdmlkZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyB3aGF0IHlvdSBjYW4gZ2V0IGZyb20gdGhpcyBtYW51YWw6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbmZvcm1hdGlvbiB0aGF0IGxldHMgeW91IGdldCBzZXQKKyAgICAgICAgICAgICAgICAgICAgdXAgdG8gZGV2ZWxvcCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5mb3JtYXRpb24gdG8gaGVscCBkZXZlbG9wZXJzIHdobyBhcmUgbmV3IHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBvcGVuIHNvdXJjZSBlbnZpcm9ubWVudCBhbmQgdG8gdGhlIGRpc3RyaWJ1dGVkIHJldmlzaW9uCisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgc3lzdGVtIEdpdCwgd2hpY2ggdGhlIFlvY3RvIFByb2plY3QgdXNlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFuIHVuZGVyc3RhbmRpbmcgb2YgY29tbW9uIGVuZC10by1lbmQKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgbW9kZWxzIGFuZCB0YXNrcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5mb3JtYXRpb24gYWJvdXQgY29tbW9uIGRldmVsb3BtZW50IHRhc2tzCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYWxseSB1c2VkIGR1cmluZyBpbWFnZSBkZXZlbG9wbWVudCBmb3IKKyAgICAgICAgICAgICAgICAgICAgZW1iZWRkZWQgZGV2aWNlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIGludGVncmF0aW9uIG9mIHRoZSBRdWlja0VNVWxhdG9yIChRRU1VKSwgd2hpY2ggbGV0cyB5b3UKKyAgICAgICAgICAgICAgICAgICAgc2ltdWxhdGUgcnVubmluZyBvbiBoYXJkd2FyZSBhbiBpbWFnZSB5b3UgaGF2ZSBidWlsdCB1c2luZworICAgICAgICAgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1hbnkgcmVmZXJlbmNlcyB0byBvdGhlciBzb3VyY2VzIG9mIHJlbGF0ZWQKKyAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd3aGF0LXRoaXMtbWFudWFsLWRvZXMtbm90LXByb3ZpZGUnPgorICAgICAgICA8dGl0bGU+V2hhdCB0aGlzIE1hbnVhbCBEb2VzIE5vdCBQcm92aWRlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgbWFudWFsIHdpbGwgbm90IGdpdmUgeW91IHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RlcC1ieS1zdGVwIGluc3RydWN0aW9ucyB3aGVuIHRob3NlIGluc3RydWN0aW9ucyBleGlzdCBpbiBvdGhlciBZb2N0bworICAgICAgICAgICAgICAgICAgICBQcm9qZWN0IGRvY3VtZW50YXRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlIGNvbnRhaW5zIGRldGFpbGVkCisgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucyBvbiBob3cgdG8gcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyNpbnN0YWxsaW5nLXRoZS1hZHQnPkFEVCBJbnN0YWxsZXI8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgdXNlZCB0byBzZXQgdXAgYSBjcm9zcy1kZXZlbG9wbWVudCBlbnZpcm9ubWVudC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJlZmVyZW5jZSBtYXRlcmlhbDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHR5cGUgb2YgbWF0ZXJpYWwgcmVzaWRlcyBpbiBhbiBhcHByb3ByaWF0ZSByZWZlcmVuY2UgbWFudWFsLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3lzdGVtIHZhcmlhYmxlcyBhcmUgZG9jdW1lbnRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsnPllvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbDwvdWxpbms+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGV0YWlsZWQgcHVibGljIGluZm9ybWF0aW9uIHRoYXQgaXMgbm90IHNwZWNpZmljIHRvIHRoZSBZb2N0byBQcm9qZWN0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBleGhhdXN0aXZlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgR2l0IGlzIGNvdmVyZWQgYmV0dGVyIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIEludGVybmV0IHRoYW4gaW4gdGhpcyBtYW51YWwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdvdGhlci1pbmZvcm1hdGlvbic+CisgICAgICAgIDx0aXRsZT5PdGhlciBJbmZvcm1hdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZWNhdXNlIHRoaXMgbWFudWFsIHByZXNlbnRzIG92ZXJ2aWV3IGluZm9ybWF0aW9uIGZvciBtYW55IGRpZmZlcmVudAorICAgICAgICAgICAgdG9waWNzLCBzdXBwbGVtZW50YWwgaW5mb3JtYXRpb24gaXMgcmVjb21tZW5kZWQgZm9yIGZ1bGwKKyAgICAgICAgICAgIGNvbXByZWhlbnNpb24uCisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3QgcHJlc2VudHMgb3RoZXIgc291cmNlcyBvZiBpbmZvcm1hdGlvbiB5b3UgbWlnaHQgZmluZCBoZWxwZnVsOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsnPllvY3RvIFByb2plY3QgV2Vic2l0ZTwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICA8L2VtcGhhc2lzPiBUaGUgaG9tZSBwYWdlIGZvciB0aGUgWW9jdG8gUHJvamVjdCBwcm92aWRlcyBsb3RzIG9mIGluZm9ybWF0aW9uIG9uIHRoZSBwcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgbGlua3MgdG8gc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsnPllvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQ8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNob3J0IGRvY3VtZW50IGxldHMgeW91IGdldCBzdGFydGVkCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIFlvY3RvIFByb2plY3QgYW5kIHF1aWNrbHkgYmVnaW4gYnVpbGRpbmcgYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7Jz5Zb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWw8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1hbnVhbCBpcyBhIHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICBndWlkZSB0byB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwgd2hpY2ggaXMgYmFzZWQgb24gQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgIlBva3kiLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyc+WW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgZ3VpZGUgcHJvdmlkZXMgaW5mb3JtYXRpb24gdGhhdCBsZXRzIHlvdSBnZXQgZ29pbmcgd2l0aCB0aGUgQXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKSBhbmQgc3RhbmQtYWxvbmUgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucyB0bworICAgICAgICAgICAgICAgICAgICBkZXZlbG9wIHByb2plY3RzIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyc+WW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGd1aWRlIGRlZmluZXMgdGhlIHN0cnVjdHVyZSBmb3IgQlNQIGNvbXBvbmVudHMuCisgICAgICAgICAgICAgICAgICAgIEhhdmluZyBhIGNvbW1vbmx5IHVuZGVyc3Rvb2Qgc3RydWN0dXJlIGVuY291cmFnZXMgc3RhbmRhcmRpemF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsnPllvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbDwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgbWFudWFsIGRlc2NyaWJlcyBob3cgdG8gd29yayB3aXRoIExpbnV4IFlvY3RvIGtlcm5lbHMgYXMgd2VsbCBhcyBwcm92aWRlcyBhIGJpdAorICAgICAgICAgICAgICAgICAgICBvZiBjb25jZXB0dWFsIGluZm9ybWF0aW9uIG9uIHRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhlIFlvY3RvIExpbnV4IGtlcm5lbCB0cmVlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19QUk9GX1VSTDsnPllvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nIE1hbnVhbDwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgbWFudWFsIHByZXNlbnRzIGEgc2V0IG9mIGNvbW1vbiBhbmQgZ2VuZXJhbGx5IHVzZWZ1bCB0cmFjaW5nIGFuZAorICAgICAgICAgICAgICAgICAgICBwcm9maWxpbmcgc2NoZW1lcyBhbG9uZyB3aXRoIHRoZWlyIGFwcGxpY2F0aW9ucyAoYXMgYXBwcm9wcmlhdGUpIHRvIGVhY2ggdG9vbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfVE9BU1RfVVJMOyc+VG9hc3RlciBVc2VyIE1hbnVhbDwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgbWFudWFsIGludHJvZHVjZXMgYW5kIGRlc2NyaWJlcyBob3cgdG8gc2V0IHVwIGFuZCB1c2UKKyAgICAgICAgICAgICAgICAgICAgVG9hc3Rlciwgd2hpY2ggaXMgYSB3ZWIgaW50ZXJmYWNlIHRvIHRoZSBZb2N0byBQcm9qZWN0J3MKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtc3lzdGVtLXRlcm0nPk9wZW5FbWJlZGRlZCBCdWlsZCBTeXN0ZW08L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9M1psT3UtZ0xzaDAnPgorICAgICAgICAgICAgICAgICAgICBFY2xpcHNlIElERSBZb2N0byBQbHVnLWluPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQSBzdGVwLWJ5LXN0ZXAgaW5zdHJ1Y3Rpb25hbCB2aWRlbyB0aGF0CisgICAgICAgICAgICAgICAgICAgIGRlbW9uc3RyYXRlcyBob3cgYW4gYXBwbGljYXRpb24gZGV2ZWxvcGVyIHVzZXMgWW9jdG8gUGx1Zy1pbiBmZWF0dXJlcyB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIEVjbGlwc2UgSURFLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvRkFRJz5GQVE8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgY29tbW9ubHkgYXNrZWQgcXVlc3Rpb25zIGFuZCB0aGVpciBhbnN3ZXJzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fUkVMRUFTRV9OT1RFUzsnPlJlbGVhc2UgTm90ZXM8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBGZWF0dXJlcywgdXBkYXRlcyBhbmQga25vd24gaXNzdWVzIGZvciB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICByZWxlYXNlIG9mIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9ob2InPkhvYjwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICBIb2IncyBwcmltYXJ5IGdvYWwgaXMgdG8gZW5hYmxlIGEgdXNlciB0byBwZXJmb3JtIGNvbW1vbiB0YXNrcyBtb3JlIGVhc2lseS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvdG9hc3Rlcic+VG9hc3RlcjwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEFuIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZSAoQVBJKSBhbmQgd2ViLWJhc2VkCisgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSB0byB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwgd2hpY2ggdXNlcworICAgICAgICAgICAgICAgICAgICBCaXRCYWtlLCB0aGF0IHJlcG9ydHMgYnVpbGQgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2J1aWxkLWFwcGxpYW5jZSc+QnVpbGQgQXBwbGlhbmNlPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQSB2aXJ0dWFsIG1hY2hpbmUgdGhhdAorICAgICAgICAgICAgICAgICAgICBlbmFibGVzIHlvdSB0byBidWlsZCBhbmQgYm9vdCBhIGN1c3RvbSBlbWJlZGRlZCBMaW51eCBpbWFnZQorICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IHVzaW5nIGEgbm9uLUxpbnV4IGRldmVsb3BtZW50IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0JVR1pJTExBX1VSTDsnPkJ1Z3ppbGxhPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1ZyB0cmFja2luZyBhcHBsaWNhdGlvbiB0aGUgWW9jdG8gUHJvamVjdCB1c2VzLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZmluZCBwcm9ibGVtcyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LCB5b3Ugc2hvdWxkIHJlcG9ydCB0aGVtIHVzaW5nIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+WW9jdG8gUHJvamVjdCBNYWlsaW5nIExpc3RzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRvIHN1YnNjcmliZSB0byB0aGUgWW9jdG8gUHJvamVjdCBtYWlsaW5nCisgICAgICAgICAgICAgICAgICAgIGxpc3RzLCBjbGljayBvbiB0aGUgZm9sbG93aW5nIFVSTHMgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvL3lvY3RvJz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhIFlvY3RvIFByb2plY3QgRGlzY3Vzc2lvbnMgbWFpbGluZyBsaXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvL3Bva3knPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgWW9jdG8gUHJvamVjdCBEaXNjdXNzaW9ucyBtYWlsaW5nIGxpc3QgYWJvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSAoUG9reSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0xJU1RTX1VSTDsvbGlzdGluZm8veW9jdG8tYW5ub3VuY2UnPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgbWFpbGluZyBsaXN0IHRvIHJlY2VpdmUgb2ZmaWNpYWwgWW9jdG8gUHJvamVjdCBhbm5vdW5jZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgd2VsbCBhcyBZb2N0byBQcm9qZWN0IG1pbGVzdG9uZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0xJU1RTX1VSTDsvbGlzdGluZm8nPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgbGlzdGluZyBvZiBhbGwgcHVibGljIG1haWxpbmcgbGlzdHMgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlzdHMueW9jdG9wcm9qZWN0Lm9yZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkludGVybmV0IFJlbGF5IENoYXQgKElSQyk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVHdvIElSQyBjaGFubmVscyBvbiBmcmVlbm9kZSBhcmUgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgIGZvciBZb2N0byBQcm9qZWN0IGFuZCBQb2t5IGRpc2N1c3Npb25zOiA8ZmlsZW5hbWU+I3lvY3RvPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4jcG9reTwvZmlsZW5hbWU+LCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZPRV9IT01FX1VSTDsnPk9wZW5FbWJlZGRlZDwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gdXNlZCBieSB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBwcm9qZWN0IGlzIHRoZSB1cHN0cmVhbSwgZ2VuZXJpYywgZW1iZWRkZWQgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgIGZyb20gd2hpY2ggdGhlIFlvY3RvIFByb2plY3QgZGVyaXZlcyBpdHMgYnVpbGQgc3lzdGVtIChQb2t5KQorICAgICAgICAgICAgICAgICAgICBhbmQgdG8gd2hpY2ggaXQgY29udHJpYnV0ZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cub3BlbmVtYmVkZGVkLm9yZy93aWtpL0JpdEJha2UnPkJpdEJha2U8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgdG9vbCB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHRvIHByb2Nlc3MgcHJvamVjdCBtZXRhZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyc+Qml0QmFrZSBVc2VyIE1hbnVhbDo8L3VsaW5rPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEEgY29tcHJlaGVuc2l2ZSBndWlkZSB0byB0aGUgQml0QmFrZSB0b29sLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBpbmZvcm1hdGlvbiBvbiBCaXRCYWtlLCBzZWUgdGhpcyBtYW51YWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93aWtpLnFlbXUub3JnL0luZGV4Lmh0bWwnPlF1aWNrIEVNVWxhdG9yIChRRU1VKTwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEFuIG9wZW4tc291cmNlIG1hY2hpbmUgZW11bGF0b3IgYW5kIHZpcnR1YWxpemVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLW1vZGVsLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbW9kZWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMGRlZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLW1vZGVsLnhtbApAQCAtMCwwICsxLDI2MjQgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdkZXYtbWFudWFsLW1vZGVsJz4KKworPHRpdGxlPkNvbW1vbiBEZXZlbG9wbWVudCBNb2RlbHM8L3RpdGxlPgorCis8cGFyYT4KKyAgICBNYW55IGRldmVsb3BtZW50IG1vZGVscyBleGlzdCBmb3Igd2hpY2ggeW91IGNhbiB1c2UgdGhlIFlvY3RvIFByb2plY3QuCisgICAgVGhpcyBjaGFwdGVyIG92ZXJ2aWV3cyBzaW1wbGUgbWV0aG9kcyB0aGF0IHVzZSB0b29scyBwcm92aWRlZCBieSB0aGUKKyAgICBZb2N0byBQcm9qZWN0OgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3lzdGVtIERldmVsb3BtZW50OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgU3lzdGVtIERldmVsb3BtZW50IGNvdmVycyBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICBhbmQga2VybmVsIG1vZGlmaWNhdGlvbiBvciBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9uIGhvdyB0byBjcmVhdGUgYSBCU1AsIHNlZSB0aGUKKyAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjY3JlYXRpbmctYS1uZXctYnNwLWxheWVyLXVzaW5nLXRoZS15b2N0by1ic3Atc2NyaXB0Jz5DcmVhdGluZyBhIE5ldyBCU1AgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWJzcCBTY3JpcHQ8L3VsaW5rPiIKKyAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKQorICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICAgICAgIEZvciBtb3JlIGNvbXBsZXRlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB3b3JrIHdpdGggdGhlIGtlcm5lbCwKKyAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlciBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgIFVzZXIgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgY292ZXJzIGRldmVsb3BtZW50IG9mIGFwcGxpY2F0aW9ucworICAgICAgICAgICAgIHRoYXQgeW91IGludGVuZCB0byBydW4gb24gdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc2V0IHVwIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gZm9yCisgICAgICAgICAgICAgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCwgc2VlIHRoZQorICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCisgICAgICAgICAgICAgRm9yIGEgc2ltcGxlIGV4YW1wbGUgb2YgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCB1c2luZworICAgICAgICAgICAgIHRoZSA8dHJhZGVtYXJrIGNsYXNzPSd0cmFkZSc+RWNsaXBzZTwvdHJhZGVtYXJrPiBJREUsIHNlZSB0aGUKKyAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYXBwbGljYXRpb24tZGV2ZWxvcG1lbnQtd29ya2Zsb3cnPkFwcGxpY2F0aW9uCisgICAgICAgICAgICAgRGV2ZWxvcG1lbnQgV29ya2Zsb3c8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UZW1wb3JhcnkgU291cmNlIENvZGUgTW9kaWZpY2F0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgRGlyZWN0IG1vZGlmaWNhdGlvbiBvZiB0ZW1wb3Jhcnkgc291cmNlIGNvZGUgaXMgYSBjb252ZW5pZW50CisgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgbW9kZWwgdG8gcXVpY2tseSBpdGVyYXRlIGFuZCBkZXZlbG9wIHRvd2FyZHMgYQorICAgICAgICAgICAgIHNvbHV0aW9uLgorICAgICAgICAgICAgIE9uY2UgeW91IGltcGxlbWVudCB0aGUgc29sdXRpb24sIHlvdSBzaG91bGQgb2YgY291cnNlIHRha2UKKyAgICAgICAgICAgICBzdGVwcyB0byBnZXQgdGhlIGNoYW5nZXMgdXBzdHJlYW0gYW5kIGFwcGxpZWQgaW4gdGhlIGFmZmVjdGVkCisgICAgICAgICAgICAgcmVjaXBlcy4KKyAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW1hZ2UgRGV2ZWxvcG1lbnQgdXNpbmcgVG9hc3Rlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgIFlvdSBjYW4gdXNlIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvVG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL3RvYXN0ZXInPlRvYXN0ZXI8L3VsaW5rPgorICAgICAgICAgICAgIHRvIGJ1aWxkIGN1c3RvbSBvcGVyYXRpbmcgc3lzdGVtIGltYWdlcyB3aXRoaW4gdGhlIGJ1aWxkCisgICAgICAgICAgICAgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgVG9hc3RlciBwcm92aWRlcyBhbiBlZmZpY2llbnQgaW50ZXJmYWNlIHRvIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICB0aGF0IGFsbG93cyB5b3UgdG8gc3RhcnQgYnVpbGRzIGFuZCBleGFtaW5lIGJ1aWxkIHN0YXRpc3RpY3MuCisgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkltYWdlIERldmVsb3BtZW50IHVzaW5nIEhvYjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9ob2InPkhvYjwvdWxpbms+CisgICAgICAgICAgICAgdG8gYnVpbGQgY3VzdG9tIG9wZXJhdGluZyBzeXN0ZW0gaW1hZ2VzIHdpdGhpbiB0aGUgYnVpbGQKKyAgICAgICAgICAgICBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICBIb2IgcHJvdmlkZXMgYW4gZWZmaWNpZW50IGludGVyZmFjZSB0byB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNpbmcgYSBEZXZlbG9wbWVudCBTaGVsbDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGEgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4gdG8gZWZmaWNpZW50bHkgZGVidWcKKyAgICAgICAgICAgICBjb21tYW5kcyBvciBzaW1wbHkgZWRpdCBwYWNrYWdlcy4KKyAgICAgICAgICAgICBXb3JraW5nIGluc2lkZSBhIGRldmVsb3BtZW50IHNoZWxsIGlzIGEgcXVpY2sgd2F5IHRvIHNldCB1cCB0aGUKKyAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgZW52aXJvbm1lbnQgdG8gd29yayBvbiBwYXJ0cyBvZiBhIHByb2plY3QuCisgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgIDwvaXRlbWl6ZWRsaXN0PgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0nc3lzdGVtLWRldmVsb3BtZW50LW1vZGVsJz4KKyAgICA8dGl0bGU+U3lzdGVtIERldmVsb3BtZW50IFdvcmtmbG93PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBTeXN0ZW0gZGV2ZWxvcG1lbnQgaW52b2x2ZXMgbW9kaWZpY2F0aW9uIG9yIGNyZWF0aW9uIG9mIGFuIGltYWdlIHRoYXQgeW91IHdhbnQgdG8gcnVuIG9uCisgICAgICAgIGEgc3BlY2lmaWMgaGFyZHdhcmUgdGFyZ2V0LgorICAgICAgICBVc3VhbGx5LCB3aGVuIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBpbWFnZSB0aGF0IHJ1bnMgb24gZW1iZWRkZWQgaGFyZHdhcmUsIHRoZSBpbWFnZSBkb2VzCisgICAgICAgIG5vdCByZXF1aXJlIHRoZSBzYW1lIG51bWJlciBvZiBmZWF0dXJlcyB0aGF0IGEgZnVsbC1mbGVkZ2VkIExpbnV4IGRpc3RyaWJ1dGlvbiBwcm92aWRlcy4KKyAgICAgICAgVGh1cywgeW91IGNhbiBjcmVhdGUgYSBtdWNoIHNtYWxsZXIgaW1hZ2UgdGhhdCBpcyBkZXNpZ25lZCB0byB1c2Ugb25seSB0aGUKKyAgICAgICAgZmVhdHVyZXMgZm9yIHlvdXIgcGFydGljdWxhciBoYXJkd2FyZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVG8gaGVscCB5b3UgdW5kZXJzdGFuZCBob3cgc3lzdGVtIGRldmVsb3BtZW50IHdvcmtzIGluIHRoZSBZb2N0byBQcm9qZWN0LCB0aGlzIHNlY3Rpb24KKyAgICAgICAgY292ZXJzIHR3byB0eXBlcyBvZiBpbWFnZSBkZXZlbG9wbWVudDogIEJTUCBjcmVhdGlvbiBhbmQga2VybmVsIG1vZGlmaWNhdGlvbiBvcgorICAgICAgICBjb25maWd1cmF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdkZXZlbG9waW5nLWEtYm9hcmQtc3VwcG9ydC1wYWNrYWdlLWJzcCc+CisgICAgICAgIDx0aXRsZT5EZXZlbG9waW5nIGEgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgQlNQIGlzIGEgY29sbGVjdGlvbiBvZiByZWNpcGVzIHRoYXQsIHdoZW4gYXBwbGllZCBkdXJpbmcgYSBidWlsZCwgcmVzdWx0cyBpbgorICAgICAgICAgICAgYW4gaW1hZ2UgdGhhdCB5b3UgY2FuIHJ1biBvbiBhIHBhcnRpY3VsYXIgYm9hcmQuCisgICAgICAgICAgICBUaHVzLCB0aGUgcGFja2FnZSB3aGVuIGNvbXBpbGVkIGludG8gdGhlIG5ldyBpbWFnZSwgc3VwcG9ydHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgYm9hcmQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEZvciBhIGJyaWVmIGxpc3Qgb2YgdGVybXMgdXNlZCB3aGVuIGRlc2NyaWJpbmcgdGhlIGRldmVsb3BtZW50IHByb2Nlc3MgaW4gdGhlIFlvY3RvIFByb2plY3QsCisgICAgICAgICAgICBzZWUgdGhlICI8bGluayBsaW5rZW5kPSd5b2N0by1wcm9qZWN0LXRlcm1zJz5Zb2N0byBQcm9qZWN0IFRlcm1zPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgPC9ub3RlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gcHJlc2VudHMgdGhlIGJhc2ljCisgICAgICAgICAgICBzdGVwcyB1c2VkIHRvIGNyZWF0ZSBhIEJTUCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCdzCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyN1c2luZy10aGUteW9jdG8tcHJvamVjdHMtYnNwLXRvb2xzJz5CU1AgVG9vbHM8L3VsaW5rPi4KKyAgICAgICAgICAgIEFsdGhvdWdoIG5vdCByZXF1aXJlZCBmb3IgQlNQIGNyZWF0aW9uLCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gcmVwb3NpdG9yeSwgd2hpY2ggY29udGFpbnMKKyAgICAgICAgICAgIG1hbnkgQlNQcyBzdXBwb3J0ZWQgYnkgdGhlIFlvY3RvIFByb2plY3QsIGlzIHBhcnQgb2YgdGhlIGV4YW1wbGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIHRoYXQgc2hvd3MgaG93IHRvIGNyZWF0ZSBhIG5ldyBsYXllciB1c2luZyB0aGUgdG9vbHMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNjcmVhdGluZy1hLW5ldy1ic3AtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWJzcC1zY3JpcHQnPkNyZWF0aW5nIGEgTmV3IEJTUCBMYXllciBVc2luZyB0aGUgeW9jdG8tYnNwIFNjcmlwdDwvdWxpbms+IgorICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGlsbHVzdHJhdGlvbiBhbmQgbGlzdCBzdW1tYXJpemUgdGhlIEJTUCBjcmVhdGlvbiBnZW5lcmFsIHdvcmtmbG93LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNldCB1cCB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtIHRvIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgdXNpbmcgdGhlIFlvY3RvIFByb2plY3Q8L2VtcGhhc2lzPjogIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjdGhlLWxpbnV4LWRpc3Rybyc+VGhlIExpbnV4IERpc3RyaWJ1dGlvbjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3BhY2thZ2VzJz5UaGUgQnVpbGQgSG9zdCBQYWNrYWdlczwvdWxpbms+IiBzZWN0aW9ucyBib3RoCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0IGZvciByZXF1aXJlbWVudHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Fc3RhYmxpc2ggYSBsb2NhbCBjb3B5IG9mIHRoZSBwcm9qZWN0IGZpbGVzIG9uIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtPC9lbXBoYXNpcz46ICBZb3UgbmVlZCB0aGlzIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZQorICAgICAgICAgICAgICAgICAgICBEaXJlY3Rvcnk8L2xpbms+IGF2YWlsYWJsZSBvbiB5b3VyIGhvc3Qgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBIYXZpbmcgdGhlc2UgZmlsZXMgb24geW91ciBzeXN0ZW0gZ2l2ZXMgeW91IGFjY2VzcyB0byB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgcHJvY2VzcyBhbmQgdG8gdGhlIHRvb2xzIHlvdSBuZWVkLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHNldCB1cCB0aGUgU291cmNlIERpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZ2V0dGluZy1zZXR1cCc+R2V0dGluZyBTZXQgVXA8L2xpbms+IiBzZWN0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXN0YWJsaXNoIHRoZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgb24geW91ciBzeXN0ZW08L2VtcGhhc2lzPjogIEhhdmluZyBsb2NhbCBjb3BpZXMKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlc2Ugc3VwcG9ydGVkIEJTUCBsYXllcnMgb24geW91ciBzeXN0ZW0gZ2l2ZXMgeW91CisgICAgICAgICAgICAgICAgICAgIGFjY2VzcyB0byBsYXllcnMgeW91IG1pZ2h0IGJlIGFibGUgdG8gYnVpbGQgb24gb3IgbW9kaWZ5CisgICAgICAgICAgICAgICAgICAgIHRvIGNyZWF0ZSB5b3VyIEJTUC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBnZXQgdGhlc2UgZmlsZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dldHRpbmctc2V0dXAnPkdldHRpbmcgU2V0IFVwPC9saW5rPiIgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSB5b3VyIG93biBCU1AgbGF5ZXIgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+PGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+PC91bGluaz4gc2NyaXB0PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgIExheWVycyBhcmUgaWRlYWwgZm9yCisgICAgICAgICAgICAgICAgICAgIGlzb2xhdGluZyBhbmQgc3RvcmluZyB3b3JrIGZvciBhIGdpdmVuIHBpZWNlIG9mIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICBBIGxheWVyIGlzIHJlYWxseSBqdXN0IGEgbG9jYXRpb24gb3IgYXJlYSBpbiB3aGljaCB5b3UgcGxhY2UKKyAgICAgICAgICAgICAgICAgICAgdGhlIHJlY2lwZXMgYW5kIGNvbmZpZ3VyYXRpb25zIGZvciB5b3VyIEJTUC4KKyAgICAgICAgICAgICAgICAgICAgSW4gZmFjdCwgYSBCU1AgaXMsIGluIGl0c2VsZiwgYSBzcGVjaWFsIHR5cGUgb2YgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzaW1wbGVzdCB3YXkgdG8gY3JlYXRlIGEgbmV3IEJTUCBsYXllciB0aGF0IGlzIGNvbXBsaWFudCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGlzIHRvIHVzZSB0aGUgPGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+IHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoYXQgc2NyaXB0LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNjcmVhdGluZy1hLW5ldy1ic3AtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWJzcC1zY3JpcHQnPkNyZWF0aW5nIGEgTmV3IEJTUCBMYXllciBVc2luZyB0aGUgeW9jdG8tYnNwIFNjcmlwdDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFub3RoZXIgZXhhbXBsZSB0aGF0IGlsbHVzdHJhdGVzIGEgbGF5ZXIgaXMgYW4gYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFN1cHBvc2UgeW91IGFyZSBjcmVhdGluZyBhbiBhcHBsaWNhdGlvbiB0aGF0IGhhcyBsaWJyYXJ5IG9yIG90aGVyIGRlcGVuZGVuY2llcyBpbgorICAgICAgICAgICAgICAgICAgICBvcmRlciBmb3IgaXQgdG8gY29tcGlsZSBhbmQgcnVuLgorICAgICAgICAgICAgICAgICAgICBUaGUgbGF5ZXIsIGluIHRoaXMgY2FzZSwgd291bGQgYmUgd2hlcmUgYWxsIHRoZSByZWNpcGVzIHRoYXQgZGVmaW5lIHRob3NlIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICBhcmUga2VwdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGtleSBwb2ludCBmb3IgYSBsYXllciBpcyB0aGF0IGl0IGlzIGFuIGlzb2xhdGVkIGFyZWEgdGhhdCBjb250YWlucworICAgICAgICAgICAgICAgICAgICBhbGwgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uIGZvciB0aGUgcHJvamVjdCB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGtub3dzIGFib3V0LgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBsYXllcnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZyBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQlNQIGxheWVycywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIExheWVyczwvdWxpbms+IiBzZWN0aW9uIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPkZpdmUgQlNQcyBleGlzdCB0aGF0IGFyZSBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2U6IDxmaWxlbmFtZT5nZW5lcmljeDg2PC9maWxlbmFtZT4sIDxmaWxlbmFtZT5nZW5lcmljeDg2LTY0PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iZWFnbGVib25lPC9maWxlbmFtZT4gKEFSTSksCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tcGM4MzE1ZTwvZmlsZW5hbWU+IChQb3dlclBDKSwKKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5lZGdlcm91dGVyPC9maWxlbmFtZT4gKE1JUFMpLgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlcyBhbmQgY29uZmlndXJhdGlvbnMgZm9yIHRoZXNlIGZpdmUgQlNQcyBhcmUgbG9jYXRlZCBhbmQgZGlzcGVyc2VkCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBsYXllcgorICAgICAgICAgICAgICAgICAgICBjb250YWlucyBCU1AgbGF5ZXJzIGZvciBtYW55IHN1cHBvcnRlZCBCU1BzIChlLmcuCisgICAgICAgICAgICAgICAgICAgIENyeXN0YWwgRm9yZXN0LCBFbWVubG93LCBGaXNoIFJpdmVyIElzbGFuZCAyLCBIYXN3ZWxsLAorICAgICAgICAgICAgICAgICAgICBKYXNwZXIgRm9yZXN0LCBhbmQgc28gZm9ydGgpLgorICAgICAgICAgICAgICAgICAgICBBc2lkZSBmcm9tIHRoZSBCU1BzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGxheWVyLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbiBhZGRpdGlvbmFsIEJTUCBsYXllcnMgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1taW5ub3c8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtcmFzcGJlcnJ5cGk8L2ZpbGVuYW1lPi48L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPldoZW4geW91IHNldCB1cCBhIGxheWVyIGZvciBhIG5ldyBCU1AsIHlvdSBzaG91bGQgZm9sbG93IGEgc3RhbmRhcmQgbGF5b3V0LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGxheW91dCBpcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNic3AtZmlsZWxheW91dCc+RXhhbXBsZSBGaWxlc3lzdGVtIExheW91dDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcG1lbnQgR3VpZGUuCisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBzdGFuZGFyZCBsYXlvdXQsIHlvdSB3aWxsIG5vdGljZSBhIHN1Z2dlc3RlZCBzdHJ1Y3R1cmUgZm9yIHJlY2lwZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZSBzdGFuZGFyZCBsYXlvdXQgZm9yIGEgQlNQIGJ5IGV4YW1pbmluZworICAgICAgICAgICAgICAgICAgICBhbnkgc3VwcG9ydGVkIEJTUCBmb3VuZCBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBsYXllciBpbnNpZGUKKyAgICAgICAgICAgICAgICAgICAgdGhlIFNvdXJjZSBEaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYWtlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB0byB5b3VyIG5ldyBCU1AKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXI8L2VtcGhhc2lzPjogIFRoZSBzdGFuZGFyZCBCU1AgbGF5ZXIgc3RydWN0dXJlIG9yZ2FuaXplcyB0aGUgZmlsZXMgeW91IG5lZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gZWRpdCBpbiA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGFuZCBzZXZlcmFsIDxmaWxlbmFtZT5yZWNpcGVzLSo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyB3aXRoaW4gdGhlIEJTUCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBjaGFuZ2VzIGlkZW50aWZ5IHdoZXJlIHlvdXIgbmV3IGxheWVyIGlzIG9uIHRoZSBsb2NhbCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgYW5kIGlkZW50aWZ5IHdoaWNoIGtlcm5lbCB5b3UgYXJlIGdvaW5nIHRvIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgcnVuIHRoZSA8ZmlsZW5hbWU+eW9jdG8tYnNwPC9maWxlbmFtZT4gc2NyaXB0LCB5b3UgYXJlIGFibGUgdG8gaW50ZXJhY3RpdmVseQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgbWFueSB0aGluZ3MgZm9yIHRoZSBCU1AgKGUuZy4ga2V5Ym9hcmQsIHRvdWNoc2NyZWVuLCBhbmQgc28gZm9ydGgpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ha2UgcmVjaXBlIGNoYW5nZXMgdG8geW91ciBuZXcgQlNQIGxheWVyPC9lbXBoYXNpcz46ICBSZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyBpbmNsdWRlIGFsdGVyaW5nIHJlY2lwZXMgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcyksIHJlbW92aW5nCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMgeW91IGRvIG5vdCB1c2UsIGFuZCBhZGRpbmcgbmV3IHJlY2lwZXMgb3IgYXBwZW5kIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pIHRoYXQgeW91IG5lZWQgdG8gc3VwcG9ydCB5b3VyIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByZXBhcmUgZm9yIHRoZSBidWlsZDwvZW1waGFzaXM+OiAgT25jZSB5b3UgaGF2ZSBtYWRlIGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyB0byB5b3VyIEJTUCBsYXllciwgdGhlcmUgcmVtYWlucyBhIGZldyB0aGluZ3MKKyAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gZG8gZm9yIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGluIG9yZGVyIGZvciBpdCB0byBjcmVhdGUgeW91ciBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gZ2V0IHRoZSBidWlsZCBlbnZpcm9ubWVudCByZWFkeSBieSBzb3VyY2luZyBhbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52PC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICBhbmQgeW91IG5lZWQgdG8gYmUgc3VyZSB0d28ga2V5IGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIGNvbmZpZ3VyZWQgYXBwcm9wcmlhdGVseToKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBtYWtlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF3YXJlIG9mIHlvdXIgbmV3IGxheWVyLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdlbmFibGluZy15b3VyLWxheWVyJz5FbmFibGluZyBZb3VyIExheWVyPC9saW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGxldCB0aGUgYnVpbGQgc3lzdGVtIGtub3cgYWJvdXQgeW91ciBuZXcgbGF5ZXIuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZW50aXJlIHByb2Nlc3MgZm9yIGJ1aWxkaW5nIGFuIGltYWdlIGlzIG92ZXJ2aWV3ZWQgaW4gdGhlIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcXMtYnVpbGRpbmctaW1hZ2VzJz5CdWlsZGluZyBJbWFnZXM8L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC4KKyAgICAgICAgICAgICAgICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gcmVmZXJlbmNlIHRoaXMgaW5mb3JtYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCB0aGUgaW1hZ2U8L2VtcGhhc2lzPjogIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHVzZXMgdGhlIEJpdEJha2UgdG9vbCB0byBidWlsZCBpbWFnZXMgYmFzZWQgb24gdGhlIHR5cGUgb2YgaW1hZ2UgeW91IHdhbnQgdG8gY3JlYXRlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBCaXRCYWtlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7Jz5CaXRCYWtlIFVzZXIgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGJ1aWxkIHByb2Nlc3Mgc3VwcG9ydHMgc2V2ZXJhbCB0eXBlcyBvZiBpbWFnZXMgdG8gc2F0aXNmeSBkaWZmZXJlbnQgbmVlZHMuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IiBjaGFwdGVyCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBpbWFnZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIHZpZXcgYSB2aWRlbyBwcmVzZW50YXRpb24gb24gIkJ1aWxkaW5nIEN1c3RvbSBFbWJlZGRlZCBJbWFnZXMgd2l0aCBZb2N0byIKKyAgICAgICAgICAgIGF0IDx1bGluayB1cmw9J2h0dHA6Ly9mcmVlLWVsZWN0cm9ucy5jb20vYmxvZy9lbGMtMjAxMS12aWRlb3MnPkZyZWUgRWxlY3Ryb25zPC91bGluaz4uCisgICAgICAgICAgICBBZnRlciBnb2luZyB0byB0aGUgcGFnZSwganVzdCBzZWFyY2ggZm9yICJFbWJlZGRlZCIuCisgICAgICAgICAgICBZb3UgY2FuIGFsc28gZmluZCBzdXBwbGVtZW50YWwgaW5mb3JtYXRpb24gaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyc+CisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgRmluYWxseSwgdGhlcmUgaXMgaGVscGZ1bCBtYXRlcmlhbCBhbmQgbGlua3Mgb24gdGhpcworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL1RyYW5zY3JpcHQ6X2NyZWF0aW5nX29uZV9nZW5lcmljX0F0b21fQlNQX2Zyb21fYW5vdGhlcic+d2lraSBwYWdlPC91bGluaz4uCisgICAgICAgICAgICBBbHRob3VnaCBhIGJpdCBkYXRlZCwgeW91IG1pZ2h0IGZpbmQgdGhlIGluZm9ybWF0aW9uIG9uIHRoZSB3aWtpCisgICAgICAgICAgICBoZWxwZnVsLgorICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbW9kaWZ5aW5nLXRoZS1rZXJuZWwnPgorICAgICAgICA8dGl0bGU+PGFuY2hvciBpZD0na2VybmVsLXNwb3QnIC8+TW9kaWZ5aW5nIHRoZSBLZXJuZWw8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgS2VybmVsIG1vZGlmaWNhdGlvbiBpbnZvbHZlcyBjaGFuZ2luZyB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwsIHdoaWNoIGNvdWxkIGludm9sdmUgY2hhbmdpbmcKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcyB3ZWxsIGFzIGFkZGluZyBuZXcga2VybmVsIHJlY2lwZXMuCisgICAgICAgICAgICBDb25maWd1cmF0aW9uIGNoYW5nZXMgY2FuIGJlIGFkZGVkIGluIHRoZSBmb3JtIG9mIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLCB3aGlsZSByZWNpcGUKKyAgICAgICAgICAgIG1vZGlmaWNhdGlvbiBjb21lcyB0aHJvdWdoIHRoZSBrZXJuZWwncyA8ZmlsZW5hbWU+cmVjaXBlcy1rZXJuZWw8L2ZpbGVuYW1lPiBhcmVhCisgICAgICAgICAgICBpbiBhIGtlcm5lbCBsYXllciB5b3UgY3JlYXRlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBwcmVzZW50cyBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgIGtlcm5lbCBhcmNoaXRlY3R1cmUgYW5kIHRoZSBzdGVwcyB0byBtb2RpZnkgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIFlvdSBjYW4gcmVmZXJlbmNlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhdGNoaW5nLXRoZS1rZXJuZWwnPlBhdGNoaW5nIHRoZSBLZXJuZWw8L2xpbms+IiBzZWN0aW9uCisgICAgICAgICAgICBmb3IgYW4gZXhhbXBsZSB0aGF0IGNoYW5nZXMgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBrZXJuZWwuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbmZpZ3VyZSB0aGUga2VybmVsLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY29uZmlndXJpbmctdGhlLWtlcm5lbCc+Q29uZmlndXJpbmcgdGhlIEtlcm5lbDwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUga2VybmVsIGFuZCBvbiBtb2RpZnlpbmcgdGhlIGtlcm5lbCwgc2VlIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtb3ZlcnZpZXcnPgorICAgICAgICAgICAgPHRpdGxlPktlcm5lbCBPdmVydmlldzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRyYWRpdGlvbmFsbHksIHdoZW4gb25lIHRoaW5rcyBvZiBhIHBhdGNoZWQga2VybmVsLCB0aGV5IHRoaW5rIG9mIGEgYmFzZSBrZXJuZWwKKyAgICAgICAgICAgICAgICBzb3VyY2UgdHJlZSBhbmQgYSBmaXhlZCBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBrZXJuZWwgcGF0Y2hlcy4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCwgaG93ZXZlciwgZW1wbG95cyBtZWNoYW5pc21zIHRoYXQsIGluIGEgc2Vuc2UsIHJlc3VsdCBpbiBhIGtlcm5lbCBzb3VyY2UKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuCisgICAgICAgICAgICAgICAgQnkgdGhlIGVuZCBvZiB0aGlzIHNlY3Rpb24sIHRoaXMgYW5hbG9neSB3aWxsIGJlY29tZSBjbGVhcmVyLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgYSB3ZWIgaW50ZXJmYWNlIHRvIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yaWVzIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBJZiB5b3UgbG9vayBhdCB0aGUgaW50ZXJmYWNlLCB5b3Ugd2lsbCBzZWUgdG8gdGhlIGxlZnQgYSBncm91cGluZyBvZgorICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3JpZXMgdGl0bGVkICJZb2N0byBMaW51eCBLZXJuZWwuIgorICAgICAgICAgICAgICAgIFdpdGhpbiB0aGlzIGdyb3VwLCB5b3Ugd2lsbCBmaW5kIHNldmVyYWwga2VybmVscyBzdXBwb3J0ZWQgYnkKKyAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdDoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuODwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLSBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWJsZSBZb2N0byBQcm9qZWN0IGtlcm5lbCB0byB1c2Ugd2l0aCB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3QgUmVsZWFzZSAxLjQuIFRoaXMga2VybmVsIGlzIGJhc2VkIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgTGludXggMy44IHJlbGVhc2VkIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTA8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0gQW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwsIHVuc3VwcG9ydGVkIFlvY3RvIFByb2plY3Qga2VybmVsIHVzZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgUmVsZWFzZSAxLjUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGtlcm5lbCBpcyBiYXNlZCBvbiB0aGUgTGludXggMy4xMCByZWxlYXNlZCBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE0PC9maWxlbmFtZT48L2VtcGhhc2lzPiAtIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhYmxlIFlvY3RvIFByb2plY3Qga2VybmVsIHRvIHVzZSB3aXRoIHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCBSZWxlYXNlcyAxLjYgYW5kIDEuNy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMga2VybmVsIGlzIGJhc2VkIG9uIHRoZSBMaW51eCAzLjE0IHJlbGVhc2VkIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTc8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0gQW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwsIHVuc3VwcG9ydGVkIFlvY3RvIFByb2plY3Qga2VybmVsIHVzZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgUmVsZWFzZSAxLjcuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGtlcm5lbCBpcyBiYXNlZCBvbiB0aGUgTGludXggMy4xNyByZWxlYXNlZCBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT48L2VtcGhhc2lzPiAtIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhYmxlIFlvY3RvIFByb2plY3Qga2VybmVsIHRvIHVzZSB3aXRoIHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCBSZWxlYXNlIDEuOC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMga2VybmVsIGlzIGJhc2VkIG9uIHRoZSBMaW51eCAzLjE5IHJlbGVhc2VkIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLWRldjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLSBBCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBrZXJuZWwgYmFzZWQgb24gdGhlIGxhdGVzdCB1cHN0cmVhbSByZWxlYXNlCisgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBrZXJuZWxzIGFyZSBtYWludGFpbmVkIHVzaW5nIHRoZSBHaXQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0KKyAgICAgICAgICAgICAgICB0aGF0IHN0cnVjdHVyZXMgdGhlbSB1c2luZyB0aGUgZmFtaWxpYXIgInRyZWUiLCAiYnJhbmNoIiwgYW5kICJsZWFmIiBzY2hlbWUuCisgICAgICAgICAgICAgICAgQnJhbmNoZXMgcmVwcmVzZW50IGRpdmVyc2lvbnMgZnJvbSBnZW5lcmFsIGNvZGUgdG8gbW9yZSBzcGVjaWZpYyBjb2RlLCB3aGlsZSBsZWF2ZXMKKyAgICAgICAgICAgICAgICByZXByZXNlbnQgdGhlIGVuZC1wb2ludHMgZm9yIGEgY29tcGxldGUgYW5kIHVuaXF1ZSBrZXJuZWwgd2hvc2Ugc291cmNlIGZpbGVzLAorICAgICAgICAgICAgICAgIHdoZW4gZ2F0aGVyZWQgZnJvbSB0aGUgcm9vdCBvZiB0aGUgdHJlZSB0byB0aGUgbGVhZiwgYWNjdW11bGF0ZSB0byBjcmVhdGUgdGhlIGZpbGVzCisgICAgICAgICAgICAgICAgbmVjZXNzYXJ5IGZvciBhIHNwZWNpZmljIHBpZWNlIG9mIGhhcmR3YXJlIGFuZCBpdHMgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgZGlzcGxheXMgdGhpcyBjb25jZXB0OgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0xLnBuZyIKKyAgICAgICAgICAgICAgICAgICAgd2lkdGg9IjZpbiIgZGVwdGg9IjZpbiIgYWxpZ249ImNlbnRlciIgc2NhbGU9IjEwMCIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2l0aGluIHRoZSBmaWd1cmUsIHRoZSAiS2VybmVsLm9yZyBCcmFuY2ggUG9pbnQiIHJlcHJlc2VudHMgdGhlIHBvaW50IGluIHRoZSB0cmVlCisgICAgICAgICAgICAgICAgd2hlcmUgYSBzdXBwb3J0ZWQgYmFzZSBrZXJuZWwgaXMgbW9kaWZpZWQgZnJvbSB0aGUgTGludXgga2VybmVsLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGlzIGNvdWxkIGJlIHRoZSBicmFuY2ggcG9pbnQgZm9yIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAga2VybmVsLgorICAgICAgICAgICAgICAgIFRodXMsIGV2ZXJ5dGhpbmcgZnVydGhlciB0byB0aGUgcmlnaHQgaW4gdGhlIHN0cnVjdHVyZSBpcyBiYXNlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+IGtlcm5lbC4KKyAgICAgICAgICAgICAgICBCcmFuY2ggcG9pbnRzIHRvIHRoZSByaWdodCBpbiB0aGUgZmlndXJlIHJlcHJlc2VudCB3aGVyZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+IGtlcm5lbCBpcyBtb2RpZmllZCBmb3Igc3BlY2lmaWMgaGFyZHdhcmUKKyAgICAgICAgICAgICAgICBvciB0eXBlcyBvZiBrZXJuZWxzLCBzdWNoIGFzIHJlYWwtdGltZSBrZXJuZWxzLgorICAgICAgICAgICAgICAgIEVhY2ggbGVhZiB0aHVzIHJlcHJlc2VudHMgdGhlIGVuZC1wb2ludCBmb3IgYSBrZXJuZWwgZGVzaWduZWQgdG8gcnVuIG9uIGEgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICB0YXJnZXRlZCBkZXZpY2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBvdmVyYWxsIHJlc3VsdCBpcyBhIEdpdC1tYWludGFpbmVkIHJlcG9zaXRvcnkgZnJvbSB3aGljaCBhbGwgdGhlIHN1cHBvcnRlZAorICAgICAgICAgICAgICAgIGtlcm5lbCB0eXBlcyBjYW4gYmUgZGVyaXZlZCBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQgZGV2aWNlcy4KKyAgICAgICAgICAgICAgICBBIGJpZyBhZHZhbnRhZ2UgdG8gdGhpcyBzY2hlbWUgaXMgdGhlIHNoYXJpbmcgb2YgY29tbW9uIGZlYXR1cmVzIGJ5IGtlZXBpbmcgdGhlbSBpbgorICAgICAgICAgICAgICAgICJsYXJnZXIiIGJyYW5jaGVzIHdpdGhpbiB0aGUgdHJlZS4KKyAgICAgICAgICAgICAgICBUaGlzIHByYWN0aWNlIGVsaW1pbmF0ZXMgcmVkdW5kYW50IHN0b3JhZ2Ugb2Ygc2ltaWxhciBmZWF0dXJlcyBzaGFyZWQgYW1vbmcga2VybmVscy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgS2VlcCBpbiBtaW5kIHRoZSBmaWd1cmUgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgYWxsIHRoZSBzdXBwb3J0ZWQgWW9jdG8KKyAgICAgICAgICAgICAgICBQcm9qZWN0IGtlcm5lbCB0eXBlcywgYnV0IHJhdGhlciBzaG93cyBhIHNpbmdsZSBnZW5lcmljIGtlcm5lbCBqdXN0IGZvciBjb25jZXB0dWFsIHB1cnBvc2VzLgorICAgICAgICAgICAgICAgIEFsc28ga2VlcCBpbiBtaW5kIHRoYXQgdGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgWW9jdG8gUHJvamVjdCBzb3VyY2UgcmVwb3NpdG9yaWVzCisgICAgICAgICAgICAgICAgdGhhdCBhcmUgZWl0aGVyIHB1bGxlZCBmcm9tIGR1cmluZyB0aGUgYnVpbGQgb3IgZXN0YWJsaXNoZWQgb24gdGhlIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtCisgICAgICAgICAgICAgICAgcHJpb3IgdG8gdGhlIGJ1aWxkIGJ5IGVpdGhlciBjbG9uaW5nIGEgcGFydGljdWxhciBrZXJuZWwncyBHaXQgcmVwb3NpdG9yeSBvciBieQorICAgICAgICAgICAgICAgIGRvd25sb2FkaW5nIGFuZCB1bnBhY2tpbmcgYSB0YXJiYWxsLgorICAgICAgICAgICAgPC9ub3RlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVcHN0cmVhbSBzdG9yYWdlIG9mIGFsbCB0aGUgYXZhaWxhYmxlIGtlcm5lbCBzb3VyY2UgY29kZSBpcyBvbmUgdGhpbmcsIHdoaWxlCisgICAgICAgICAgICAgICAgcmVwcmVzZW50aW5nIGFuZCB1c2luZyB0aGUgY29kZSBvbiB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtIGlzIGFub3RoZXIuCisgICAgICAgICAgICAgICAgQ29uY2VwdHVhbGx5LCB5b3UgY2FuIHRoaW5rIG9mIHRoZSBrZXJuZWwgc291cmNlIHJlcG9zaXRvcmllcyBhcyBhbGwgdGhlCisgICAgICAgICAgICAgICAgc291cmNlIGZpbGVzIG5lY2Vzc2FyeSBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQga2VybmVscy4KKyAgICAgICAgICAgICAgICBBcyBhIGRldmVsb3BlciwgeW91IGFyZSBqdXN0IGludGVyZXN0ZWQgaW4gdGhlIHNvdXJjZSBmaWxlcyBmb3IgdGhlIGtlcm5lbCBvbgorICAgICAgICAgICAgICAgIHdoaWNoIHlvdSBhcmUgd29ya2luZy4KKyAgICAgICAgICAgICAgICBBbmQsIGZ1cnRoZXJtb3JlLCB5b3UgbmVlZCB0aGVtIGF2YWlsYWJsZSBvbiB5b3VyIGhvc3Qgc3lzdGVtLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBLZXJuZWwgc291cmNlIGNvZGUgaXMgYXZhaWxhYmxlIG9uIHlvdXIgaG9zdCBzeXN0ZW0gYSBjb3VwbGUgb2YgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgd2F5cy4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHdvcmtpbmcgaW4gdGhlIGtlcm5lbCBhbGwgdGhlIHRpbWUsIHlvdSBwcm9iYWJseSB3b3VsZCB3YW50CisgICAgICAgICAgICAgICAgdG8gc2V0IHVwIHlvdXIgb3duIGxvY2FsIEdpdCByZXBvc2l0b3J5IG9mIHRoZSBrZXJuZWwgdHJlZS4KKyAgICAgICAgICAgICAgICBJZiB5b3UganVzdCBuZWVkIHRvIG1ha2Ugc29tZSBwYXRjaGVzIHRvIHRoZSBrZXJuZWwsIHlvdSBjYW4gYWNjZXNzCisgICAgICAgICAgICAgICAgdGVtcG9yYXJ5IGtlcm5lbCBzb3VyY2UgZmlsZXMgdGhhdCB3ZXJlIGV4dHJhY3RlZCBhbmQgdXNlZAorICAgICAgICAgICAgICAgIGR1cmluZyBhIGJ1aWxkLgorICAgICAgICAgICAgICAgIFdlIHdpbGwganVzdCB0YWxrIGFib3V0IHdvcmtpbmcgd2l0aCB0aGUgdGVtcG9yYXJ5IHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBnZXQga2VybmVsIHNvdXJjZSBjb2RlIG9udG8geW91cgorICAgICAgICAgICAgICAgIGhvc3Qgc3lzdGVtLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2xvY2FsLWtlcm5lbC1maWxlcyc+WW9jdG8gUHJvamVjdCBLZXJuZWw8L2xpbms+IgorICAgICAgICAgICAgICAgIGJ1bGxldGVkIGl0ZW0gZWFybGllciBpbiB0aGUgbWFudWFsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGF0IGhhcHBlbnMgZHVyaW5nIHRoZSBidWlsZD8KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBidWlsZCB0aGUga2VybmVsIG9uIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtLCBhbGwgZmlsZXMgbmVlZGVkIGZvciB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICBhcmUgdGFrZW4gZnJvbSB0aGUgc291cmNlIHJlcG9zaXRvcmllcyBwb2ludGVkIHRvIGJ5IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICBhbmQgZ2F0aGVyZWQgaW4gYSB0ZW1wb3Jhcnkgd29yayBhcmVhCisgICAgICAgICAgICAgICAgd2hlcmUgdGhleSBhcmUgc3Vic2VxdWVudGx5IHVzZWQgdG8gY3JlYXRlIHRoZSB1bmlxdWUga2VybmVsLgorICAgICAgICAgICAgICAgIFRodXMsIGluIGEgc2Vuc2UsIHRoZSBwcm9jZXNzIGNvbnN0cnVjdHMgYSBsb2NhbCBzb3VyY2UgdHJlZSBzcGVjaWZpYyB0byB5b3VyCisgICAgICAgICAgICAgICAga2VybmVsIHRvIGdlbmVyYXRlIHRoZSBuZXcga2VybmVsIGltYWdlIC0gYSBzb3VyY2UgZ2VuZXJhdG9yIGlmIHlvdSB3aWxsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIHRoZSB0ZW1wb3JhcnkgZmlsZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICBjcmVhdGVkIG9uIHlvdXIgaG9zdCBzeXN0ZW0gd2hlbiB0aGUgYnVpbGQgb2NjdXJzLgorICAgICAgICAgICAgICAgIFRoaXMKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4gY29udGFpbnMgYWxsIHRoZQorICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcyB1c2VkIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi1nZW5lcmljLnBuZyIKKyAgICAgICAgICAgICAgICAgICAgd2lkdGg9IjZpbiIgZGVwdGg9IjVpbiIgYWxpZ249ImNlbnRlciIgc2NhbGU9IjEwMCIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWdhaW4sIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCdzCisgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlIGFuZCBpdHMgYnJhbmNoaW5nIHN0cmF0ZWd5LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gcmVmZXJlbmNlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYXRjaGluZy10aGUta2VybmVsJz5QYXRjaGluZyB0aGUgS2VybmVsPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBhIGRldGFpbGVkIGV4YW1wbGUgdGhhdCBtb2RpZmllcyB0aGUga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2tlcm5lbC1tb2RpZmljYXRpb24td29ya2Zsb3cnPgorICAgICAgICAgICAgPHRpdGxlPktlcm5lbCBNb2RpZmljYXRpb24gV29ya2Zsb3c8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGlsbHVzdHJhdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBsaXN0IHN1bW1hcml6ZXMgdGhlIGtlcm5lbCBtb2RpZmljYXRpb24gZ2VuZXJhbCB3b3JrZmxvdy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmciCisgICAgICAgICAgICAgICAgICAgIHdpZHRoPSI2aW4iIGRlcHRoPSI1aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2V0IHVwIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gdG8gc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgdXNpbmcgdGhlIFlvY3RvIFByb2plY3Q8L2VtcGhhc2lzPjogIFNlZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjdGhlLWxpbnV4LWRpc3Rybyc+VGhlIExpbnV4IERpc3RyaWJ1dGlvbjwvdWxpbms+IiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3BhY2thZ2VzJz5UaGUgQnVpbGQgSG9zdCBQYWNrYWdlczwvdWxpbms+IiBzZWN0aW9ucyBib3RoCisgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBmb3IgcmVxdWlyZW1lbnRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVzdGFibGlzaCBhIGxvY2FsIGNvcHkgb2YgcHJvamVjdCBmaWxlcyBvbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW08L2VtcGhhc2lzPjogIEhhdmluZyB0aGUgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3Rvcnk8L2xpbms+IG9uIHlvdXIgc3lzdGVtIGdpdmVzIHlvdSBhY2Nlc3MgdG8gdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHRvb2xzCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgbmVlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2V0IHRoZXNlIGZpbGVzLCBzZWUgdGhlIGJ1bGxldGVkIGl0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdsb2NhbC15cC1yZWxlYXNlJz5Zb2N0byBQcm9qZWN0IFJlbGVhc2U8L2xpbms+IiBlYXJsaWVyIGluIHRoaXMgbWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXN0YWJsaXNoIHRoZSB0ZW1wb3Jhcnkga2VybmVsIHNvdXJjZSBmaWxlczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGVtcG9yYXJ5IGtlcm5lbCBzb3VyY2UgZmlsZXMgYXJlIGtlcHQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdoZW4geW91IHJ1biBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgbmV2ZXIgYnVpbHQgdGhlIGtlcm5lbCBpbiB3aGljaCB5b3UgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmVzdGVkLCB5b3UgbmVlZCB0byBydW4gYW4gaW5pdGlhbCBidWlsZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgZXN0YWJsaXNoIGxvY2FsIGtlcm5lbCBzb3VyY2UgZmlsZXMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IGFyZSBidWlsZGluZyBhbiBpbWFnZSBmb3IgdGhlIGZpcnN0IHRpbWUsIHlvdSBuZWVkIHRvIGdldCB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHJlYWR5IGJ5IHNvdXJjaW5nIGFuIGVudmlyb25tZW50IHNldHVwIHNjcmlwdAorICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52PC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgYWxzbyBuZWVkIHRvIGJlIHN1cmUgdHdvIGtleSBjb25maWd1cmF0aW9uIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBjb25maWd1cmVkIGFwcHJvcHJpYXRlbHkuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGVudGlyZSBwcm9jZXNzIGZvciBidWlsZGluZyBhbiBpbWFnZSBpcyBvdmVydmlld2VkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcXMtYnVpbGRpbmctaW1hZ2VzJz5CdWlsZGluZyBJbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbWlnaHQgd2FudCB0byByZWZlcmVuY2UgdGhpcyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIEJpdEJha2UgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7Jz5CaXRCYWtlIFVzZXIgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgYnVpbGQgcHJvY2VzcyBzdXBwb3J0cyBzZXZlcmFsIHR5cGVzIG9mIGltYWdlcyB0byBzYXRpc2Z5IGRpZmZlcmVudCBuZWVkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IiBjaGFwdGVyIGluCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvciBpbmZvcm1hdGlvbiBvbiBzdXBwb3J0ZWQgaW1hZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFrZSBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2FibGU8L2VtcGhhc2lzPjogIE1vZGlmeWluZyB0aGUga2VybmVsIGRvZXMgbm90IGFsd2F5cyBtZWFuIGRpcmVjdGx5CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2luZyBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgaGF2ZSB0byBkbyB0aGlzLCB5b3UgbWFrZSB0aGUgY2hhbmdlcyB0byB0aGUgZmlsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBEaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFrZSBrZXJuZWwgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGlmIGFwcGxpY2FibGU8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgc2l0dWF0aW9uIGNhbGxzIGZvciBjaGFuZ2luZyB0aGUga2VybmVsJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIHlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz48ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBhbGxvd3MgeW91IHRvIGludGVyYWN0aXZlbHkgZGV2ZWxvcCBhbmQgdGVzdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB5b3UgYXJlIG1ha2luZyB0byB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgICAgICAgICAgU2F2aW5nIGNoYW5nZXMgeW91IG1ha2Ugd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB1cGRhdGVzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUga2VybmVsJ3MgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPldhcm5pbmc8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyeSB0byByZXNpc3QgdGhlIHRlbXB0YXRpb24gdG8gZGlyZWN0bHkgZWRpdCBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9zeXNyb290cy88cmVwbGFjZWFibGU+bWFjaGluZS1uYW1lPC9yZXBsYWNlYWJsZT4va2VybmVsPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9pbmcgc28sIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cyB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcmVnZW5lcmF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHRoZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIG1hZGUgdXNpbmcgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHlvdSBoYXZlIHNhdmVkIHRoZW0sIHlvdSBjYW4gZGlyZWN0bHkgY29tcGFyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGluZyA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgYWdhaW5zdCBhbgorICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3Rpbmcgb3JpZ2luYWwgYW5kIGdhdGhlciB0aG9zZSBjaGFuZ2VzIGludG8gYQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nY3JlYXRpbmctY29uZmlnLWZyYWdtZW50cyc+Y29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcmVmZXJlbmNlZCBmcm9tIHdpdGhpbiB0aGUga2VybmVsJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlLjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QWRkaXRpb25hbGx5LCBpZiB5b3UgYXJlIHdvcmtpbmcgaW4gYSBCU1AgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBuZWVkIHRvIG1vZGlmeSB0aGUgQlNQJ3Mga2VybmVsJ3MgY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjbWFuYWdpbmcta2VybmVsLXBhdGNoZXMtYW5kLWNvbmZpZy1pdGVtcy13aXRoLXlvY3RvLWtlcm5lbCc+PGZpbGVuYW1lPnlvY3RvLWtlcm5lbDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCBhcyB3ZWxsIGFzIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbDwvZmlsZW5hbWU+IHNjcmlwdCBsZXRzCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgaW50ZXJhY3RpdmVseSBzZXQgdXAga2VybmVsIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmVidWlsZCB0aGUga2VybmVsIGltYWdlIHdpdGggeW91ciBjaGFuZ2VzPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBSZWJ1aWxkaW5nIHRoZSBrZXJuZWwgaW1hZ2UgYXBwbGllcyB5b3VyIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nYXBwbGljYXRpb24tZGV2ZWxvcG1lbnQtd29ya2Zsb3cnPgorICAgIDx0aXRsZT5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBXb3JrZmxvdzwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCB5b3Ugd2FudAorICAgICAgICB0byBydW4gb24geW91ciB0YXJnZXQgaGFyZHdhcmUsIHdoaWNoIGlzIHJ1bm5pbmcgYSBrZXJuZWwgaW1hZ2UgY3JlYXRlZCB1c2luZyB0aGUKKyAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgYW4KKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjYWR0LWludHJvJz5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBUb29sa2l0IChBRFQpPC91bGluaz4KKyAgICAgICAgYW5kIHN0YW5kLWFsb25lCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3RoZS1jcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4nPmNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnM8L3VsaW5rPgorICAgICAgICB0aGF0IGZhY2lsaXRhdGUgcXVpY2sgZGV2ZWxvcG1lbnQgYW5kIGludGVncmF0aW9uIG9mIHlvdXIgYXBwbGljYXRpb24gaW50byBpdHMgcnVudGltZSBlbnZpcm9ubWVudC4KKyAgICAgICAgVXNpbmcgdGhlIEFEVCBhbmQgdG9vbGNoYWlucywgeW91IGNhbiBjb21waWxlIGFuZCBsaW5rIHlvdXIgYXBwbGljYXRpb24uCisgICAgICAgIFlvdSBjYW4gdGhlbiBkZXBsb3kgeW91ciBhcHBsaWNhdGlvbiB0byB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIHRvIHRoZSBRRU1VIGVtdWxhdG9yIGZvciB0ZXN0aW5nLgorICAgICAgICBJZiB5b3UgYXJlIGZhbWlsaWFyIHdpdGggdGhlIHBvcHVsYXIgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4gSURFLAorICAgICAgICB5b3UgY2FuIHVzZSBhbiBFY2xpcHNlIFlvY3RvIFBsdWctaW4gdG8KKyAgICAgICAgYWxsb3cgeW91IHRvIGRldmVsb3AsIGRlcGxveSwgYW5kIHRlc3QgeW91ciBhcHBsaWNhdGlvbiBhbGwgZnJvbSB3aXRoaW4gRWNsaXBzZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hpbGUgd2Ugc3Ryb25nbHkgc3VnZ2VzdCB1c2luZyB0aGUgQURUIHRvIGRldmVsb3AgeW91ciBhcHBsaWNhdGlvbiwgdGhpcyBvcHRpb24gbWlnaHQgbm90CisgICAgICAgIGJlIGJlc3QgZm9yIHlvdS4KKyAgICAgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgeW91IGNhbiBzdGlsbCB1c2UgcGllY2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0IGZvciB5b3VyIGRldmVsb3BtZW50IHByb2Nlc3MuCisgICAgICAgIEhvd2V2ZXIsIGJlY2F1c2UgdGhlIHByb2Nlc3MgY2FuIHZhcnkgZ3JlYXRseSwgdGhpcyBtYW51YWwgZG9lcyBub3QgcHJvdmlkZSBkZXRhaWwgb24gdGhlIHByb2Nlc3MuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3dvcmtmbG93LXVzaW5nLXRoZS1hZHQtYW5kLWVjbGlwc2UnPgorICAgICAgICA8dGl0bGU+V29ya2Zsb3cgVXNpbmcgdGhlIEFEVCBhbmQgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gaGVscCB5b3UgdW5kZXJzdGFuZCBob3cgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgd29ya3MgdXNpbmcgdGhlIEFEVCwgdGhpcyBzZWN0aW9uCisgICAgICAgICAgICBwcm92aWRlcyBhbiBvdmVydmlldyBvZiB0aGUgZ2VuZXJhbCBkZXZlbG9wbWVudCBwcm9jZXNzIGFuZCBhIGRldGFpbGVkIGV4YW1wbGUgb2YgdGhlIHByb2Nlc3MKKyAgICAgICAgICAgIGFzIGl0IGlzIHVzZWQgZnJvbSB3aXRoaW4gdGhlIEVjbGlwc2UgSURFLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGlsbHVzdHJhdGlvbiBhbmQgbGlzdCBzdW1tYXJpemUgdGhlIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IGdlbmVyYWwgd29ya2Zsb3cuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nIgorICAgICAgICAgICAgICAgIHdpZHRoPSI3aW4iIGRlcHRoPSI4aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlPSIxMDAiIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByZXBhcmUgdGhlIGhvc3Qgc3lzdGVtIGZvciB0aGUgWW9jdG8gUHJvamVjdDwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBTZWUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2RldGFpbGVkLXN1cHBvcnRlZC1kaXN0cm9zJz5TdXBwb3J0ZWQgTGludXggRGlzdHJpYnV0aW9uczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlcXVpcmVkLXBhY2thZ2VzLWZvci10aGUtaG9zdC1kZXZlbG9wbWVudC1zeXN0ZW0nPlJlcXVpcmVkIFBhY2thZ2VzIGZvciB0aGUgSG9zdCBEZXZlbG9wbWVudCBTeXN0ZW08L3VsaW5rPiIgc2VjdGlvbnMgYm90aAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvciByZXF1aXJlbWVudHMuCisgICAgICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIGJlIHN1cmUgeW91ciBob3N0IHN5c3RlbSBoYXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT54dGVybTwvZmlsZW5hbWU+IHBhY2thZ2UgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNlY3VyZSB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgdGFyZ2V0IGltYWdlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGhhdmUgYSB0YXJnZXQga2VybmVsIGltYWdlIHRoYXQgaGFzIGJlZW4gYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5EZXBlbmRpbmcgb24gd2hldGhlciB0aGUgWW9jdG8gUHJvamVjdCBoYXMgYSBwcmUtYnVpbHQgaW1hZ2UgdGhhdCBtYXRjaGVzIHlvdXIgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZSBhbmQgd2hlcmUgeW91IGFyZSBnb2luZyB0byBydW4gdGhlIGltYWdlIHdoaWxlIHlvdSBkZXZlbG9wIHlvdXIgYXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgKFFFTVUgb3IgcmVhbCBoYXJkd2FyZSksIHRoZSBhcmVhIGZyb20gd2hpY2ggeW91IGdldCB0aGUgaW1hZ2UgZGlmZmVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvd25sb2FkIHRoZSBpbWFnZSBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19NQUNISU5FU19ETF9VUkw7Jz48ZmlsZW5hbWU+bWFjaGluZXM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBzdXBwb3J0ZWQgYW5kIHlvdSBhcmUgZ29pbmcgdG8gZGV2ZWxvcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGVzdCB5b3VyIGFwcGxpY2F0aW9uIG9uIGFjdHVhbCBoYXJkd2FyZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RG93bmxvYWQgdGhlIGltYWdlIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1FFTVVfRExfVVJMOyc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYWNoaW5lcy9xZW11PC9maWxlbmFtZT48L3VsaW5rPiBpZiB5b3VyIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB5b3UgYXJlIGdvaW5nIHRvIGRldmVsb3AgYW5kIHRlc3QgeW91ciBhcHBsaWNhdGlvbiB1c2luZyB0aGUgUUVNVQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXVsYXRvci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QnVpbGQgeW91ciBpbWFnZSBpZiB5b3UgY2Fubm90IGZpbmQgYSBwcmUtYnVpbHQgaW1hZ2UgdGhhdCBtYXRjaGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIHNpbWlsYXIgdG8gYSBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlLCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmeSB0aGUga2VybmVsIGltYWdlIGJlZm9yZSB5b3UgYnVpbGQgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhdGNoaW5nLXRoZS1rZXJuZWwnPlBhdGNoaW5nIHRoZSBLZXJuZWw8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBhbiBleGFtcGxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgaW5mb3JtYXRpb24gb24gcHJlLWJ1aWx0IGtlcm5lbCBpbWFnZSBuYW1pbmcgc2NoZW1lcyBmb3IgaW1hZ2VzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgY2FuIHJ1biBvbiB0aGUgUUVNVSBlbXVsYXRvciwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNkb3dubG9hZGluZy10aGUtcHJlLWJ1aWx0LWxpbnV4LWtlcm5lbCc+RG93bmxvYWRpbmcgdGhlIFByZS1CdWlsdCBMaW51eCBLZXJuZWw8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgdGhlIEFEVDwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBUaGUgQURUIHByb3ZpZGVzIGEgdGFyZ2V0LXNwZWNpZmljIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbiwgdGhlIHJvb3QgZmlsZXN5c3RlbSwKKyAgICAgICAgICAgICAgICAgICAgdGhlIFFFTVUgZW11bGF0b3IsIGFuZCBvdGhlciB0b29scyB0aGF0IGNhbiBoZWxwIHlvdSBkZXZlbG9wIHlvdXIgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFdoaWxlIGl0IGlzIHBvc3NpYmxlIHRvIGdldCB0aGVzZSBwaWVjZXMgc2VwYXJhdGVseSwgdGhlIEFEVCBJbnN0YWxsZXIgcHJvdmlkZXMgYW4KKyAgICAgICAgICAgICAgICAgICAgZWFzeSwgaW5jbHVzaXZlIG1ldGhvZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBnZXQgdGhlc2UgcGllY2VzIGJ5IHJ1bm5pbmcgYW4gQURUIGluc3RhbGxlciBzY3JpcHQsIHdoaWNoIGlzIGNvbmZpZ3VyYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpbnN0YWxsIHRoZSBBRFQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3VzaW5nLXRoZS1hZHQtaW5zdGFsbGVyJz5Vc2luZyB0aGUgQURUIEluc3RhbGxlcjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SWYgYXBwbGljYWJsZSwgc2VjdXJlIHRoZSB0YXJnZXQgcm9vdCBmaWxlc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgQ3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBjaG9vc2Ugbm90IHRvIGluc3RhbGwgdGhlIEFEVCB1c2luZyB0aGUgQURUIEluc3RhbGxlciwKKyAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gZmluZCBhbmQgZG93bmxvYWQgdGhlIGFwcHJvcHJpYXRlIHJvb3QgZmlsZXN5c3RlbSBhbmQKKyAgICAgICAgICAgICAgICAgICAgdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gZmluZCB0aGUgdGFyYmFsbHMgZm9yIHRoZSByb290IGZpbGVzeXN0ZW0gaW4gdGhlIHNhbWUgYXJlYSB1c2VkCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUga2VybmVsIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgaW1hZ2UgeW91IGFyZSBydW5uaW5nLCB0aGUgcm9vdCBmaWxlc3lzdGVtIHlvdSBuZWVkIGRpZmZlcnMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIGRldmVsb3BpbmcgYW4gYXBwbGljYXRpb24gdGhhdCBydW5zIG9uIGFuIGltYWdlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydHMgU2F0bywgeW91IG5lZWQgdG8gZ2V0IGEgcm9vdCBmaWxlc3lzdGVtIHRoYXQgc3VwcG9ydHMgU2F0by48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gZmluZCB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucyBhdAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fVE9PTENIQUlOX0RMX1VSTDsnPjxmaWxlbmFtZT50b29sY2hhaW5zPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBnZXQgdGhlIGNvcnJlY3QgdG9vbGNoYWluIGZvciB5b3VyIGRldmVsb3BtZW50IGhvc3QgYW5kIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdXNpbmctYW4tZXhpc3RpbmctdG9vbGNoYWluLXRhcmJhbGwnPlVzaW5nIGEgQ3Jvc3MtVG9vbGNoYWluIFRhcmJhbGw8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZSBmb3IgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNpbnN0YWxsaW5nLXRoZS10b29sY2hhaW4nPkluc3RhbGxpbmcgdGhlIFRvb2xjaGFpbjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZSBmb3IgaW5mb3JtYXRpb24gb24gZmluZGluZyBhbmQgaW5zdGFsbGluZworICAgICAgICAgICAgICAgICAgICB0aGUgY29ycmVjdCB0b29sY2hhaW4gYmFzZWQgb24geW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSBhbmQgeW91ciB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSBhbmQgYnVpbGQgeW91ciBhcHBsaWNhdGlvbjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB5b3UgbmVlZCB0byBoYXZlIHNvdXJjZSBmaWxlcyBmb3IgeW91ciBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB0aGUgZmlsZXMsIHlvdSBjYW4gdXNlIHRoZSBFY2xpcHNlIElERSB0byBpbXBvcnQgdGhlbSBhbmQgYnVpbGQgdGhlCisgICAgICAgICAgICAgICAgICAgIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgbm90IHVzaW5nIEVjbGlwc2UsIHlvdSBuZWVkIHRvIHVzZSB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbHMgeW91IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIHRvIGNyZWF0ZSB0aGUgaW1hZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EZXBsb3kgdGhlIGltYWdlIHdpdGggdGhlIGFwcGxpY2F0aW9uPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgdGhlIEVjbGlwc2UgSURFLCB5b3UgY2FuIGRlcGxveSB5b3VyIGltYWdlIHRvIHRoZSBoYXJkd2FyZSBvciB0bworICAgICAgICAgICAgICAgICAgICBRRU1VIHRocm91Z2ggdGhlIHByb2plY3QncyBwcmVmZXJlbmNlcy4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBub3QgdXNpbmcgdGhlIEVjbGlwc2UgSURFLCB0aGVuIHlvdSBuZWVkIHRvIGRlcGxveSB0aGUgYXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGhhcmR3YXJlIHVzaW5nIG90aGVyIG1ldGhvZHMuCisgICAgICAgICAgICAgICAgICAgIE9yLCBpZiB5b3UgYXJlIHVzaW5nIFFFTVUsIHlvdSBuZWVkIHRvIHVzZSB0aGF0IHRvb2wgYW5kCisgICAgICAgICAgICAgICAgICAgIGxvYWQgeW91ciBpbWFnZSBpbiBmb3IgdGVzdGluZy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZGV2LW1hbnVhbC1xZW11Jz5Vc2luZyB0aGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgY2hhcHRlciBmb3IgaW5mb3JtYXRpb24gb24gdXNpbmcgUUVNVS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UZXN0IGFuZCBkZWJ1ZyB0aGUgYXBwbGljYXRpb248L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3VyIGFwcGxpY2F0aW9uIGlzIGRlcGxveWVkLCB5b3UgbmVlZCB0byB0ZXN0IGl0LgorICAgICAgICAgICAgICAgICAgICBXaXRoaW4gdGhlIEVjbGlwc2UgSURFLCB5b3UgY2FuIHVzZSB0aGUgZGVidWdnaW5nIGVudmlyb25tZW50IGFsb25nIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIHNldCBvZiB1c2VyLXNwYWNlIHRvb2xzIGluc3RhbGxlZCBhbG9uZyB3aXRoIHRoZSBBRFQgdG8gZGVidWcgeW91ciBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgT2YgY291cnNlLCB0aGUgc2FtZSB1c2VyLXNwYWNlIHRvb2xzIGFyZSBhdmFpbGFibGUgc2VwYXJhdGVseSBpZiB5b3UgY2hvb3NlCisgICAgICAgICAgICAgICAgICAgIG5vdCB0byB1c2UgdGhlIEVjbGlwc2UgSURFLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2FkdC1lY2xpcHNlJz4KKyAgICAgICAgPHRpdGxlPldvcmtpbmcgV2l0aGluIEVjbGlwc2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIEVjbGlwc2UgSURFIGlzIGEgcG9wdWxhciBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBhbmQgaXQgZnVsbHkKKyAgICAgICAgICAgIHN1cHBvcnRzIGRldmVsb3BtZW50IHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhpcyByZWxlYXNlIG9mIHRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRzIGJvdGggdGhlIEx1bmEKKyAgICAgICAgICAgICAgICBhbmQgS2VwbGVyIHZlcnNpb25zIG9mIHRoZSBFY2xpcHNlIElERS4KKyAgICAgICAgICAgICAgICBUaHVzLCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHByb3ZpZGVzIHNldHVwIGluZm9ybWF0aW9uIGZvcgorICAgICAgICAgICAgICAgIGJvdGggdmVyc2lvbnMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4geW91IGluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgRWNsaXBzZSBZb2N0byBQcm9qZWN0IFBsdWctaW4KKyAgICAgICAgICAgIGludG8gdGhlIEVjbGlwc2UgSURFLCB5b3UgbWF4aW1pemUgeW91ciBZb2N0byBQcm9qZWN0IGV4cGVyaWVuY2UuCisgICAgICAgICAgICBJbnN0YWxsaW5nIGFuZCBjb25maWd1cmluZyB0aGUgUGx1Zy1pbiByZXN1bHRzIGluIGFuIGVudmlyb25tZW50CisgICAgICAgICAgICB0aGF0IGhhcyBleHRlbnNpb25zIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBsZXQgeW91IG1vcmUgZWFzaWx5CisgICAgICAgICAgICBkZXZlbG9wIHNvZnR3YXJlLgorICAgICAgICAgICAgVGhlc2UgZXh0ZW5zaW9ucyBhbGxvdyBmb3IgY3Jvc3MtY29tcGlsYXRpb24sIGRlcGxveW1lbnQsIGFuZAorICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHlvdXIgb3V0cHV0IGludG8gYSBRRU1VIGVtdWxhdGlvbiBzZXNzaW9uIGFzIHdlbGwgYXMKKyAgICAgICAgICAgIGFjdHVhbCB0YXJnZXQgaGFyZHdhcmUuCisgICAgICAgICAgICBZb3UgY2FuIGFsc28gcGVyZm9ybSBjcm9zcy1kZWJ1Z2dpbmcgYW5kIHByb2ZpbGluZy4KKyAgICAgICAgICAgIFRoZSBlbnZpcm9ubWVudCBhbHNvIHN1cHBvcnRzIGEgc3VpdGUgb2YgdG9vbHMgdGhhdCBhbGxvd3MgeW91CisgICAgICAgICAgICB0byBwZXJmb3JtIHJlbW90ZSBwcm9maWxpbmcsIHRyYWNpbmcsIGNvbGxlY3Rpb24gb2YgcG93ZXIgZGF0YSwKKyAgICAgICAgICAgIGNvbGxlY3Rpb24gb2YgbGF0ZW5jeSBkYXRhLCBhbmQgY29sbGVjdGlvbiBvZiBwZXJmb3JtYW5jZSBkYXRhLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIEVjbGlwc2UgSURFCisgICAgICAgICAgICBZb2N0byBQbHVnLWluIGFuZCBob3cgdG8gdXNlIGl0IHRvIGRldmVsb3AgeW91ciBhcHBsaWNhdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZXR0aW5nLXVwLXRoZS1lY2xpcHNlLWlkZSc+CisgICAgICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCB0aGUgRWNsaXBzZSBJREU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBkZXZlbG9wIHdpdGhpbiB0aGUgRWNsaXBzZSBJREUsIHlvdSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5zdGFsbCB0aGUgb3B0aW1hbCB2ZXJzaW9uIG9mIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgICAgIElERS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbmZpZ3VyZSB0aGUgRWNsaXBzZSBJREUuCisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5zdGFsbCB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluLgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbmZpZ3VyZSB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluLgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgaW5zdGFsbCBFY2xpcHNlIGZyb20geW91ciBkaXN0cmlidXRpb24ncyBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gaW5zdGFsbCBFY2xpcHNlIGZyb20gdGhlIG9mZmljaWFsIEVjbGlwc2UKKyAgICAgICAgICAgICAgICAgICAgZG93bmxvYWQgc2l0ZSBhcyBkaXJlY3RlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2luc3RhbGxpbmctZWNsaXBzZS1pZGUnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nIHRoZSBFY2xpcHNlIElERTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgaGF2ZSB0aGUgTHVuYSBTUjIgKDQuNC4yKQorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIG9mIHRoZSBFY2xpcHNlIElERSBpbnN0YWxsZWQgb24geW91ciBkZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBjdXJyZW50bHkgaGF2ZSB0aGUgS2VwbGVyIDQuMy4yIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGFuZCB5b3UgZG8gbm90IHdhbnQgdG8gdXBncmFkZSB0aGUgSURFLCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBLZXBsZXIgdG8gd29yayB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGhhdmUgdGhlIEx1bmEgU1IyICg0LjQuMikgRWNsaXBzZSBJREUKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLCB5b3UgY2FuIGZpbmQgdGhlIHRhcmJhbGwgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJkVDTElQU0VfTUFJTl9VUkw7Jz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgRnJvbSB0aGF0IHNpdGUsIGNob29zZSB0aGUgYXBwcm9wcmlhdGUgZG93bmxvYWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIkVjbGlwc2UgSURFIGZvciBDL0MrKyBEZXZlbG9wZXJzIi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIGNvbnRhaW5zIHRoZSBFY2xpcHNlIFBsYXRmb3JtLCB0aGUgSmF2YQorICAgICAgICAgICAgICAgICAgICBEZXZlbG9wbWVudCBUb29scyAoSkRUKSwgYW5kIHRoZSBQbHVnLWluIERldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgIEVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGRvd25sb2FkZWQgdGhlIHRhcmJhbGwsIGV4dHJhY3QgaXQgaW50byBhCisgICAgICAgICAgICAgICAgICAgIGNsZWFuIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdW5wYWNrIGFuZCBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgICAgICBkb3dubG9hZGVkIEVjbGlwc2UgSURFIHRhcmJhbGwgaW50byBhIGNsZWFuIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgZGVmYXVsdCBuYW1lIDxmaWxlbmFtZT5lY2xpcHNlPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+CisgICAgICQgdGFyIC14enZmIH4vRG93bmxvYWRzL2VjbGlwc2UtY3BwLWx1bmEtU1IyLWxpbnV4LWd0ay14ODZfNjQudGFyLmd6CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdjb25maWd1cmluZy10aGUtZWNsaXBzZS1pZGUnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgRWNsaXBzZSBJREU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyB0aGUgc3RlcHMgbmVlZGVkIHRvIGNvbmZpZ3VyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSBJREUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlZm9yZSBpbnN0YWxsaW5nIGFuZCBjb25maWd1cmluZyB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluLAorICAgICAgICAgICAgICAgICAgICB5b3UgbmVlZCB0byBjb25maWd1cmUgdGhlIEVjbGlwc2UgSURFLgorICAgICAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2UgZ2VuZXJhbCBzdGVwczoKKyAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0YXJ0IHRoZSBFY2xpcHNlIElERS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWtlIHN1cmUgeW91IGFyZSBpbiB5b3VyIFdvcmtiZW5jaCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgIkluc3RhbGwgTmV3IFNvZnR3YXJlIiBmcm9tIHRoZSAiSGVscCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWxsLWRvd24gbWVudS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+THVuYSAtICZFQ0xJUFNFX0xVTkFfVVJMOzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgIldvcmsgd2l0aDoiIHB1bGwtZG93biBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgS2VwbGVyLCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktlcGxlciAtICZFQ0xJUFNFX0tFUExFUl9VUkw7PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXhwYW5kIHRoZSBib3ggbmV4dCB0byAiTGludXggVG9vbHMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNlbGVjdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TGludXggVG9vbHMgTFRUbmcgVHJhY2VyIENvbnRyb2w8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TGludXggVG9vbHMgTFRUbmcgVXNlcnNwYWNlIEFuYWx5c2lzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxUVG5nIEtlcm5lbCBBbmFseXNpczwvZmlsZW5hbWU+IGJveGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZXNlIHNlbGVjdGlvbnMgZG8gbm90IGFwcGVhciBpbiB0aGUgbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IG1lYW5zIHRoZSBpdGVtcyBhcmUgYWxyZWFkeSBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBLZXBsZXIsIHNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TFRUbmcgLSBMaW51eCBUcmFjaW5nIFRvb2xraXQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4cGFuZCB0aGUgYm94IG5leHQgdG8gIk1vYmlsZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2UgRGV2ZWxvcG1lbnQiIGFuZCBzZWxlY3QgdGhlIGZvbGxvd2luZyBib3hlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZ2FpbiwgaWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgaXRlbXMgYXJlIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uLCB0aGF0IG1lYW5zIHRoZSBpdGVtcyBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGluc3RhbGxlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkMvQysrIFJlbW90ZSBMYXVuY2ggKFJlcXVpcmVzIFJTRSBSZW1vdGUgU3lzdGVtIEV4cGxvcmVyKTwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+UmVtb3RlIFN5c3RlbSBFeHBsb3JlciBFbmQtdXNlciBSdW50aW1lPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5SZW1vdGUgU3lzdGVtIEV4cGxvcmVyIFVzZXIgQWN0aW9uczwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+VGFyZ2V0IE1hbmFnZW1lbnQgVGVybWluYWwgKENvcmUgU0RLKTwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+VENGIFJlbW90ZSBTeXN0ZW0gRXhwbG9yZXIgYWRkLWluPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5UQ0YgVGFyZ2V0IEV4cGxvcmVyPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHBhbmQgdGhlIGJveCBuZXh0IHRvICJQcm9ncmFtbWluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhbmd1YWdlcyIgYW5kIHNlbGVjdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Qy9DKysgQXV0b3Rvb2xzIFN1cHBvcnQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+Qy9DKysgRGV2ZWxvcG1lbnQgVG9vbHM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBMdW5hLCB0aGVzZSBpdGVtcyBkbyBub3QgYXBwZWFyIG9uIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdGhleSBhcmUgYWxyZWFkeSBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBhbmQgcmVzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBFY2xpcHNlIElERS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdpbnN0YWxsaW5nLXRoZS1lY2xpcHNlLXlvY3RvLXBsdWctaW4nPgorICAgICAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nIG9yIEFjY2Vzc2luZyB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGluc3RhbGwgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiBpbnRvIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgIElERSBvbmUgb2YgdHdvIHdheXM6ICB1c2UgdGhlIFlvY3RvIFByb2plY3QncyBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgIFVwZGF0ZSBzaXRlIHRvIGluc3RhbGwgdGhlIHByZS1idWlsdCBwbHVnLWluIG9yIGJ1aWxkIGFuZAorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIHRoZSBwbHVnLWluIGZyb20gdGhlIGxhdGVzdCBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXNvZnR3YXJlJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkluc3RhbGxpbmcgdGhlIFByZS1idWlsdCBQbHVnLWluIGZyb20gdGhlIFlvY3RvIFByb2plY3QgRWNsaXBzZSBVcGRhdGUgU2l0ZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUbyBpbnN0YWxsIHRoZSBFY2xpcHNlIFlvY3RvIFBsdWctaW4gZnJvbSB0aGUgdXBkYXRlCisgICAgICAgICAgICAgICAgICAgICAgICBzaXRlLCBmb2xsb3cgdGhlc2Ugc3RlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0YXJ0IHVwIHRoZSBFY2xpcHNlIElERS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIEVjbGlwc2UsIHNlbGVjdCAiSW5zdGFsbCBOZXcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUiIGZyb20gdGhlICJIZWxwIiBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIkFkZC4uLiIgaW4gdGhlICJXb3JrIHdpdGg6IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVhLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVudGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mRUNMSVBTRV9ETF9QTFVHSU5fVVJMOy9sdW5hPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFVSTCBmaWVsZCBhbmQgcHJvdmlkZSBhIG1lYW5pbmdmdWwgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgIk5hbWUiIGZpZWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgS2VwbGVyLCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mRUNMSVBTRV9ETF9QTFVHSU5fVVJMOy9rZXBsZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFVSTCBmaWVsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiT0siIHRvIGhhdmUgdGhlIGVudHJ5IGFkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSAiV29yayB3aXRoOiIgZHJvcC1kb3duIGxpc3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgdGhlIGVudHJ5IGZvciB0aGUgcGx1Zy1pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSAiV29yayB3aXRoOiIgZHJvcC1kb3duIGxpc3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DaGVjayB0aGUgYm94ZXMgbmV4dCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WW9jdG8gUHJvamVjdCBBRFQgUGx1Zy1pbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WW9jdG8gUHJvamVjdCBCaXRiYWtlIENvbW1hbmRlciBQbHVnLWluPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WW9jdG8gUHJvamVjdCBEb2N1bWVudGF0aW9uIHBsdWctaW48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbXBsZXRlIHRoZSByZW1haW5pbmcgc29mdHdhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIHN0ZXBzIGFuZCB0aGVuIHJlc3RhcnQgdGhlIEVjbGlwc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURFIHRvIGZpbmlzaCB0aGUgaW5zdGFsbGF0aW9uIG9mIHRoZSBwbHVnLWluLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2xpY2sgIk9LIiB3aGVuIHByb21wdGVkIGFib3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsaW5nIHNvZnR3YXJlIHRoYXQgY29udGFpbnMgdW5zaWduZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nemlwLWZpbGUtbWV0aG9kJz4KKyAgICAgICAgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyB0aGUgUGx1Zy1pbiBVc2luZyB0aGUgTGF0ZXN0IFNvdXJjZSBDb2RlPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gaW5zdGFsbCB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluIGZyb20gdGhlIGxhdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlIGNvZGUsIGZvbGxvdyB0aGVzZSBzdGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QmUgc3VyZSB5b3VyIGRldmVsb3BtZW50IHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgdXNpbmcgT3BlbkpESyB0byBidWlsZCB0aGUgcGx1Zy1pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBkb2luZyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VXNlIHRoZSBPcmFjbGUgSkRLLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkb24ndCBoYXZlIHRoYXQsIGdvIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2huZXR3b3JrL2phdmEvamF2YXNlL2Rvd25sb2Fkcy9qZGs3LWRvd25sb2Fkcy0xODgwMjYwLmh0bWwnPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGRvd25sb2FkIHRoZSBsYXRlc3QgYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKYXZhIFNFIERldmVsb3BtZW50IEtpdCB0YXJiYWxsIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3QgaXQgaW50byB5b3VyIGhvbWUgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIHRoZSBzaGVsbCB5b3UgYXJlIGdvaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZG8geW91ciB3b3JrLCBleHBvcnQgdGhlIGxvY2F0aW9uIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIE9yYWNsZSBKYXZhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBzdGVwIGNyZWF0ZXMgYSBuZXcgZm9sZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBleHRyYWN0ZWQgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gdXNlIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXhwb3J0PC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBwcm92aWRlIHRoZSBzcGVjaWZpYyBsb2NhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGV4cG9ydCBQQVRIPX4vPHJlcGxhY2VhYmxlPmV4dHJhY3RlZF9qZGtfbG9jYXRpb248L3JlcGxhY2VhYmxlPi9iaW46JFBBVEgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgc2FtZSBzaGVsbCwgY3JlYXRlIGEgR2l0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgd2l0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZWNsaXBzZS1wb2t5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJlIHN1cmUgdG8gY2hlY2tvdXQgdGhlIGNvcnJlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyBMdW5hLCBkbyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNoZWNrb3V0IGx1bmEveW9jdG8tMS44CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwdXRzIHlvdSBpbiBhIGRldGFjaGVkIEhFQUQgc3RhdGUsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZpbmUgc2luY2UgeW91IGFyZSBvbmx5IGdvaW5nIHRvIGJlIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgZGV2ZWxvcGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGJ1aWxkaW5nIGtlcGxlciwgY2hlY2tvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VwbGVyL3lvY3RvLTEuODwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNoYW5nZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgd2l0aGluIHRoZSBHaXQgcmVwb3NpdG9yeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIHNjcmlwdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2V0IHVwIHRoZSBsb2NhbCBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBydW5uaW5nIHRoZSBzZXR1cCBzY3JpcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCAuL3NldHVwLnNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZW4gdGhlIHNjcmlwdCBmaW5pc2hlcyBleGVjdXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHByb21wdHMgeW91IHdpdGggaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5idWlsZC5zaDwvZmlsZW5hbWU+IHNjcmlwdCwgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYWxzbyBpbiB0aGUgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgb2YgdGhlIEdpdCByZXBvc2l0b3J5IGNyZWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFybGllci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJ1biB0aGUgPGZpbGVuYW1lPmJ1aWxkLnNoPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0IGFzIGRpcmVjdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHByb3ZpZGUgdGhlIHRhZyBuYW1lLCBkb2N1bWVudGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCwgYW5kIGEgcmVsZWFzZSBuYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bHVuYS95b2N0by0xLjg8L2ZpbGVuYW1lPiB0YWcsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFzdGVyPC9maWxlbmFtZT4gZG9jdW1lbnRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2gsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JkRJU1RST19OQU1FOzwvZmlsZW5hbWU+IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSBuYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgRUNMSVBTRV9IT01FPS9ob21lL3Njb3R0cmlmL2VjbGlwc2UtcG9reS9zY3JpcHRzL2VjbGlwc2UgLi9idWlsZC5zaCBsdW5hL3lvY3RvLTEuOCBtYXN0ZXIgJkRJU1RST19OQU1FOyAyPiZhbXA7MSB8IHRlZSAtYSBidWlsZC5sb2cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciBydW5uaW5nIHRoZSBzY3JpcHQsIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcmcueW9jdG8uc2RrLTwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnJlbGVhc2U8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4tPC9maWxlbmFtZT48cmVwbGFjZWFibGU+ZGF0ZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi1hcmNoaXZlLnppcDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIG5lY2Vzc2FyeSwgc3RhcnQgdGhlIEVjbGlwc2UgSURFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBiZSBzdXJlIHlvdSBhcmUgaW4gdGhlIFdvcmtiZW5jaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCAiSW5zdGFsbCBOZXcgU29mdHdhcmUiIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlICJIZWxwIiBwdWxsLWRvd24gbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJBZGQiLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Qcm92aWRlIGFueXRoaW5nIHlvdSB3YW50IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmFtZSIgZmllbGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiQXJjaGl2ZSIgYW5kIGJyb3dzZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWklQIGZpbGUgeW91IGJ1aWx0IGluIHN0ZXAgZWlnaHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgWklQIGZpbGUgc2hvdWxkIG5vdCBiZSAidW56aXBwZWQiLCBhbmQgbXVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSB0aGUgPGZpbGVuYW1lPiphcmNoaXZlLnppcDwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCBieSBydW5uaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQuc2g8L2ZpbGVuYW1lPiBzY3JpcHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayB0aGUgIk9LIiBidXR0b24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DaGVjayB0aGUgYm94ZXMgdGhhdCBhcHBlYXIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluc3RhbGxhdGlvbiB3aW5kb3cgdG8gaW5zdGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllvY3RvIFByb2plY3QgQURUIFBsdWctaW48L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllvY3RvIFByb2plY3QgQml0YmFrZSBDb21tYW5kZXIgUGx1Zy1pbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Zb2N0byBQcm9qZWN0IERvY3VtZW50YXRpb24gcGx1Zy1pbjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RmluaXNoIHRoZSBpbnN0YWxsYXRpb24gYnkgY2xpY2tpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgYXBwcm9wcmlhdGUgYnV0dG9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjbGljayAiT0siIHdoZW4gcHJvbXB0ZWQgYWJvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGluZyBzb2Z0d2FyZSB0aGF0IGNvbnRhaW5zIHVuc2lnbmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZXN0YXJ0IHRoZSBFY2xpcHNlIElERSBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQXQgdGhpcyBwb2ludCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY29uZmlndXJlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSBZb2N0byBQbHVnLWluIGFzIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjb25maWd1cmluZy10aGUtZWNsaXBzZS15b2N0by1wbHVnLWluJz5Db25maWd1cmluZyB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLXRoZS1lY2xpcHNlLXlvY3RvLXBsdWctaW4nPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb25maWd1cmluZyB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluIGludm9sdmVzIHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIENyb3NzIENvbXBpbGVyIG9wdGlvbnMgYW5kIHRoZSBUYXJnZXQgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvbmZpZ3VyYXRpb25zIHlvdSBjaG9vc2UgYmVjb21lIHRoZSBkZWZhdWx0IHNldHRpbmdzCisgICAgICAgICAgICAgICAgICAgIGZvciBhbGwgcHJvamVjdHMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBoYXZlIG9wcG9ydHVuaXRpZXMgdG8gY2hhbmdlIHRoZW0gbGF0ZXIgd2hlbgorICAgICAgICAgICAgICAgICAgICB5b3UgY29uZmlndXJlIHRoZSBwcm9qZWN0IChzZWUgdGhlIGZvbGxvd2luZyBzZWN0aW9uKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gc3RhcnQsIHlvdSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmcgZnJvbSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIEVjbGlwc2UgSURFOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNob29zZSAiUHJlZmVyZW5jZXMiIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldpbmRvdyIgbWVudSB0byBkaXNwbGF5IHRoZSBQcmVmZXJlbmNlcyBEaWFsb2cuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIllvY3RvIFByb2plY3QgQURUIiB0byBkaXNwbGF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gc2NyZWVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY29uZmlndXJpbmctdGhlLWNyb3NzLWNvbXBpbGVyLW9wdGlvbnMnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIENyb3NzLUNvbXBpbGVyIE9wdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gY29uZmlndXJlIHRoZSBDcm9zcyBDb21waWxlciBPcHRpb25zLCB5b3UgbXVzdCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0eXBlIG9mIHRvb2xjaGFpbiwgcG9pbnQgdG8gdGhlIHRvb2xjaGFpbiwgc3BlY2lmeQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN5c3Jvb3QgbG9jYXRpb24sIGFuZCBzZWxlY3QgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNlbGVjdGluZyB0aGUgVG9vbGNoYWluIFR5cGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlN0YW5kYWxvbmUgcHJlLWJ1aWx0IHRvb2xjaGFpbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgc3lzdGVtIGRlcml2ZWQgdG9vbGNoYWluPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIENyb3NzIENvbXBpbGVyIE9wdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TdGFuZGFsb25lIFByZS1idWlsdCBUb29sY2hhaW46PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhpcyBtb2RlIHdoZW4geW91IGFyZSB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHN0YW5kLWFsb25lIGNyb3NzLXRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGFyZSBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBkZXZlbG9wZXIgYW5kIGRvIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJ1aWxkIGEgdGFyZ2V0IGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCB5b3UganVzdCB3YW50IHRvIHVzZSBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdG9vbGNoYWluIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGV4aXN0aW5nIGtlcm5lbCBhbmQgdGFyZ2V0IHJvb3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CdWlsZCBTeXN0ZW0gRGVyaXZlZCBUb29sY2hhaW46PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhpcyBtb2RlIGlmIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcy10b29sY2hhaW4gaGFzIGJlZW4gaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBidWlsdCBhcyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgc3lzdGVtIGRlcml2ZWQgdG9vbGNoYWluPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBhcmUgdXNpbmcgdGhlIHRvb2xjaGFpbiBidW5kbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2lkZSB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBvaW50IHRvIHRoZSBUb29sY2hhaW46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBhIHN0YW5kLWFsb25lIHByZS1idWlsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4sIHlvdSBzaG91bGQgYmUgcG9pbnRpbmcgdG8gd2hlcmUgaXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgdXNlZCB0aGUgQURUIEluc3RhbGxlciBzY3JpcHQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkIHRoZSBkZWZhdWx0IGluc3RhbGxhdGlvbiBkaXJlY3RvcnksIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4gd2lsbCBiZSBpbnN0YWxsZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mWU9DVE9fQURUUEFUSF9ESVI7PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWN0aW9ucyAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjY29uZmlndXJpbmctYW5kLXJ1bm5pbmctdGhlLWFkdC1pbnN0YWxsZXItc2NyaXB0Jz5Db25maWd1cmluZyBhbmQgUnVubmluZyB0aGUgQURUIEluc3RhbGxlciBTY3JpcHQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2luZy1hbi1leGlzdGluZy10b29sY2hhaW4tdGFyYmFsbCc+VXNpbmcgYSBDcm9zcy1Ub29sY2hhaW4gVGFyYmFsbDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdWlkZSBkZXNjcmliZSBob3cgdG8gaW5zdGFsbCBhIHN0YW5kLWFsb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyb3NzLXRvb2xjaGFpbi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBhcmUgdXNpbmcgYSBzeXN0ZW0tZGVyaXZlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4sIHRoZSBwYXRoIHlvdSBwcm92aWRlIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRvb2xjaGFpbiBSb290IExvY2F0aW9uPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdXNpbmctdGhlLXRvb2xjaGFpbi1mcm9tLXdpdGhpbi10aGUtYnVpbGQtdHJlZSc+VXNpbmcgQml0QmFrZSBhbmQgdGhlIEJ1aWxkIERpcmVjdG9yeTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCB0aGUgdG9vbGNoYWluIGludG8gdGhlIEJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNwZWNpZnkgdGhlIFN5c3Jvb3QgTG9jYXRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBsb2NhdGlvbiBpcyB3aGVyZSB0aGUgcm9vdCBmaWxlc3lzdGVtIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IGhhcmR3YXJlIHJlc2lkZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB1c2VkIHRoZSBBRFQgSW5zdGFsbGVyIHNjcmlwdCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0ZWQgdGhlIGRlZmF1bHQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiB0aGUgbG9jYXRpb24gaW4geW91ciBob21lIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIGZvbGRlciBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGVzdC15b2N0by88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXJnZXRfYXJjaDwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHdoZW4geW91IHVzZSB0aGUgQURUIEluc3RhbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L29wdC9wb2t5LyZESVNUUk87L3N5c3Jvb3RzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gaXMgdXNlZCBmb3IgdGhlIFFFTVUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci1zcGFjZSB0b29scyBhbmQgdGhlIE5GUyBib290IHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IHVzZWQgZWl0aGVyIG9mIHRoZSBvdGhlciB0d28KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcyB0byBpbnN0YWxsIHRoZSB0b29sY2hhaW4gb3IgZGlkIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHQgdGhlIEFEVCBJbnN0YWxsZXIgc2NyaXB0J3MgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LCB0aGVuIHRoZSBsb2NhdGlvbiBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3lzcm9vdCBmaWxlc3lzdGVtIGRlcGVuZHMgb24gd2hlcmUgeW91CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRlbHkgZXh0cmFjdGVkIGFuZCBpbnN0YWxsZWQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGluc3RhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbiBhbmQgb24gaG93IHRvIGV4dHJhY3QgYW5kIGluc3RhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3Jvb3QgZmlsZXN5c3RlbSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjaW5zdGFsbGluZy10aGUtYWR0Jz5JbnN0YWxsaW5nIHRoZSBBRFQgYW5kIFRvb2xjaGFpbnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZWxlY3QgdGhlIFRhcmdldCBBcmNoaXRlY3R1cmU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgdGhlIHR5cGUgb2YgaGFyZHdhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGFyZSBnb2luZyB0byB1c2Ugb3IgZW11bGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBwdWxsLWRvd24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRhcmdldCBBcmNoaXRlY3R1cmU8L2ZpbGVuYW1lPiBtZW51CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIG1ha2UgeW91ciBzZWxlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwdWxsLWRvd24gbWVudSBzaG91bGQgaGF2ZSB0aGUgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBhcmNoaXRlY3R1cmUgeW91IG5lZWQgaXMgbm90IGxpc3RlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWVudSwgeW91IHdpbGwgbmVlZCB0byBidWlsZCB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcXMtYnVpbGRpbmctaW1hZ2VzJz5CdWlsZGluZyBJbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLXRoZS10YXJnZXQtb3B0aW9ucyc+CisgICAgICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgVGFyZ2V0IE9wdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjaG9vc2UgdG8gZW11bGF0ZSBoYXJkd2FyZSB1c2luZyB0aGUgUUVNVQorICAgICAgICAgICAgICAgICAgICAgICAgZW11bGF0b3IsIG9yIHlvdSBjYW4gY2hvb3NlIHRvIHJ1biB5b3VyIGltYWdlIG9uIGFjdHVhbAorICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UUVNVTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdpbGwgYmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFFTVUgZW11bGF0b3IuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGVtdWxhdG9yLCB5b3UgYWxzbyBuZWVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0ZSB0aGUga2VybmVsIGFuZCBzcGVjaWZ5IGFueSBjdXN0b20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgc3lzdGVtIGRlcml2ZWQgdG9vbGNoYWluPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQga2VybmVsIHlvdSBidWlsdCB3aWxsIGJlIGxvY2F0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEJ1aWxkIERpcmVjdG9yeSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveS9pbWFnZXMvPHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TdGFuZGFsb25lIHByZS1idWlsdCB0b29sY2hhaW48L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHByZS1idWlsdCBpbWFnZSB5b3UgZG93bmxvYWRlZCBpcyBsb2NhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBkaXJlY3RvcnkgeW91IHNwZWNpZmllZCB3aGVuIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZGVkIHRoZSBpbWFnZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPk1vc3QgY3VzdG9tIG9wdGlvbnMgYXJlIGZvciBhZHZhbmNlZCBRRU1VCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzIHRvIGZ1cnRoZXIgY3VzdG9taXplIHRoZWlyIFFFTVUgaW5zdGFuY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZXNlIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBiZXR3ZWVuIHBhaXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZWQgYnJhY2tldHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUgb3B0aW9ucyBtdXN0IGJlIHNwZWNpZmllZCBvdXRzaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFja2V0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgdGhlIG9wdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNlcmlhbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bm9ncmFwaGljPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a3ZtPC9maWxlbmFtZT4gbXVzdCBhbGwgYmUgb3V0c2lkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhY2tldHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPm1hbiBxZW11PC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBnZXQgaGVscCBvbiBhbGwgdGhlIG9wdGlvbnMgYW5kIHRoZWlyIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBzZXJpYWwg4oCYJmx0Oy1tIDI1NiAtZnVsbC1zY3JlZW4mZ3Q74oCZCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSBtb2RlLCBTeXNyb290IGlzIGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBhcyBwYXJ0IG9mIHRoZSBDcm9zcy1Db21waWxlciBPcHRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TeXNyb290IExvY2F0aW9uOjwvZmlsZW5hbWU+IGZpZWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkV4dGVybmFsIEhXOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2lsbCBiZSB1c2luZyBhY3R1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgdGhlICJPSyIgdG8gc2F2ZSB5b3VyIHBsdWctaW4gY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctdGhlLXByb2plY3QnPgorICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIHRoZSBQcm9qZWN0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBjcmVhdGUgdHdvIHR5cGVzIG9mIHByb2plY3RzOiAgQXV0b3Rvb2xzLWJhc2VkLCBvcgorICAgICAgICAgICAgICAgIE1ha2VmaWxlLWJhc2VkLgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIGNyZWF0ZSBBdXRvdG9vbHMtYmFzZWQgcHJvamVjdHMKKyAgICAgICAgICAgICAgICBmcm9tIHdpdGhpbiB0aGUgRWNsaXBzZSBJREUuCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIE1ha2VmaWxlLWJhc2VkIHByb2plY3RzIGluIGEKKyAgICAgICAgICAgICAgICB0ZXJtaW5hbCB3aW5kb3csIHNlZSB0aGUgc2VjdGlvbgorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2luZy10aGUtY29tbWFuZC1saW5lJz5Vc2luZyB0aGUgQ29tbWFuZCBMaW5lPC91bGluaz4iCisgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIERvIG5vdCB1c2Ugc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHByb2plY3QgbmFtZXMKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gc3BhY2VzLCB1bmRlcnNjb3JlcywgZXRjLikuICBEb2luZyBzbyBjYW4KKyAgICAgICAgICAgICAgICAgICAgY2F1c2UgY29uZmlndXJhdGlvbiB0byBmYWlsLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gY3JlYXRlIGEgcHJvamVjdCBiYXNlZCBvbiBhIFlvY3RvIHRlbXBsYXRlIGFuZCB0aGVuIGRpc3BsYXkKKyAgICAgICAgICAgICAgICB0aGUgc291cmNlIGNvZGUsIGZvbGxvdyB0aGVzZSBzdGVwczoKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgIlByb2plY3QiIGZyb20gdGhlICJGaWxlIC0+IE5ldyIgbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RG91YmxlIGNsaWNrIDxmaWxlbmFtZT5DQysrPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvdWJsZSBjbGljayA8ZmlsZW5hbWU+QyBQcm9qZWN0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNyZWF0ZSB0aGUgcHJvamVjdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4cGFuZCA8ZmlsZW5hbWU+WW9jdG8gUHJvamVjdCBBRFQgQXV0b3Rvb2xzIFByb2plY3Q8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0IDxmaWxlbmFtZT5IZWxsbyBXb3JsZCBBTlNJIEMgQXV0b3Rvb2xzIFByb2plY3Q8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYW4gQXV0b3Rvb2xzLWJhc2VkIHByb2plY3QgYmFzZWQgb24gYSBZb2N0bworICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5QdXQgYSBuYW1lIGluIHRoZSA8ZmlsZW5hbWU+UHJvamVjdCBuYW1lOjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIERvIG5vdCB1c2UgaHlwaGVucyBhcyBwYXJ0IG9mIHRoZSBuYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiTmV4dCIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgaW5mb3JtYXRpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QXV0aG9yPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q29weXJpZ2h0IG5vdGljZTwvZmlsZW5hbWU+IGZpZWxkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QmUgc3VyZSB0aGUgPGZpbGVuYW1lPkxpY2Vuc2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgaXMgY29ycmVjdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJGaW5pc2giLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgdGhlICJvcGVuIHBlcnNwZWN0aXZlIiBwcm9tcHQgYXBwZWFycywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrICJZZXMiIHNvIHRoYXQgeW91IGluIHRoZSBDL0MrKyBwZXJzcGVjdGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGxlZnQtaGFuZCBuYXZpZ2F0aW9uIHBhbmUgc2hvd3MgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZGlzcGxheSB5b3VyIHNvdXJjZSBieSBkb3VibGUgY2xpY2tpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0J3Mgc291cmNlIGZpbGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjb25maWd1cmluZy10aGUtY3Jvc3MtdG9vbGNoYWlucyc+CisgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIENyb3NzLVRvb2xjaGFpbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZWFybGllciBzZWN0aW9uLAorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjb25maWd1cmluZy10aGUtZWNsaXBzZS15b2N0by1wbHVnLWluJz5Db25maWd1cmluZyB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluPC9saW5rPiIsCisgICAgICAgICAgICAgICAgc2V0cyB1cCB0aGUgZGVmYXVsdCBwcm9qZWN0IGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gb3ZlcnJpZGUgdGhlc2Ugc2V0dGluZ3MgZm9yIGEgZ2l2ZW4gcHJvamVjdCBieSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICB0aGVzZSBzdGVwczoKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgIkNoYW5nZSBZb2N0byBQcm9qZWN0IFNldHRpbmdzIiBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgIlByb2plY3QiIG1lbnUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNlbGVjdGlvbiBicmluZ3MgdXAgdGhlIFlvY3RvIFByb2plY3QgU2V0dGluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIERpYWxvZyBhbmQgYWxsb3dzIHlvdSB0byBtYWtlIGNoYW5nZXMgc3BlY2lmaWMgdG8gYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWwgcHJvamVjdC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5CeSBkZWZhdWx0LCB0aGUgQ3Jvc3MgQ29tcGlsZXIgT3B0aW9ucyBhbmQgVGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIGZvciBhIHByb2plY3QgYXJlIGluaGVyaXRlZCBmcm9tIHNldHRpbmdzIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgdXNpbmcgdGhlIFByZWZlcmVuY2VzIERpYWxvZyBhcyBkZXNjcmliZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVhcmxpZXIgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY29uZmlndXJpbmctdGhlLWVjbGlwc2UteW9jdG8tcGx1Zy1pbic+Q29uZmlndXJpbmcgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBTZXR0aW5ncyBEaWFsb2cgYWxsb3dzIHlvdSB0byBvdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhvc2UgZGVmYXVsdCBzZXR0aW5ncyBmb3IgYSBnaXZlbiBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWtlIHlvdXIgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBwcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgY2xpY2sgIk9LIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmlnaHQtY2xpY2sgaW4gdGhlIG5hdmlnYXRpb24gcGFuZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCAiUmVjb25maWd1cmUgUHJvamVjdCIgZnJvbSB0aGUgcG9wLXVwIG1lbnUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNlbGVjdGlvbiByZWNvbmZpZ3VyZXMgdGhlIHByb2plY3QgYnkgcnVubmluZworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9nZW4uc2g8L2ZpbGVuYW1lPiBpbiB0aGUgd29ya3NwYWNlIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBhbHNvIHJ1bnMgPGZpbGVuYW1lPmxpYnRvb2xpemU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hY2xvY2FsPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b2NvbmY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hdXRvaGVhZGVyPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b21ha2UgLS1hPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi4vY29uZmlndXJlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBDbGljayBvbiB0aGUgIkNvbnNvbGUiIHRhYiBiZW5lYXRoIHlvdXIgc291cmNlIGNvZGUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUgcmVzdWx0cyBvZiByZWNvbmZpZ3VyaW5nIHlvdXIgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGRpbmctdGhlLXByb2plY3QnPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIHRoZSBQcm9qZWN0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gYnVpbGQgdGhlIHByb2plY3Qgc2VsZWN0ICJCdWlsZCBQcm9qZWN0IiBmcm9tIHRoZQorICAgICAgICAgICAgICAgICJQcm9qZWN0IiBtZW51LgorICAgICAgICAgICAgICAgIFRoZSBjb25zb2xlIHNob3VsZCB1cGRhdGUgYW5kIHlvdSBjYW4gbm90ZSB0aGUgY3Jvc3MtY29tcGlsZXIKKyAgICAgICAgICAgICAgICB5b3UgYXJlIHVzaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3N0YXJ0aW5nLXFlbXUtaW4tdXNlci1zcGFjZS1uZnMtbW9kZSc+CisgICAgICAgICAgICA8dGl0bGU+U3RhcnRpbmcgUUVNVSBpbiBVc2VyLVNwYWNlIE5GUyBNb2RlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gc3RhcnQgdGhlIFFFTVUgZW11bGF0b3IgZnJvbSB3aXRoaW4gRWNsaXBzZSwgZm9sbG93IHRoZXNlCisgICAgICAgICAgICAgICAgc3RlcHM6CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Rldi1tYW51YWwtcWVtdSc+VXNpbmcgdGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgUUVNVS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXhwb3NlIGFuZCBzZWxlY3QgIkV4dGVybmFsIFRvb2xzIiBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgIlJ1biIgbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdXIgaW1hZ2Ugc2hvdWxkIGFwcGVhciBhcyBhIHNlbGVjdGFibGUgbWVudSBpdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgeW91ciBpbWFnZSBmcm9tIHRoZSBtZW51IHRvIGxhdW5jaAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGVtdWxhdG9yIGluIGEgbmV3IHdpbmRvdy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgbmVlZGVkLCBlbnRlciB5b3VyIGhvc3Qgcm9vdCBwYXNzd29yZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNoZWxsIHdpbmRvdyBhdCB0aGUgcHJvbXB0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZXRzIHVwIGEgPGZpbGVuYW1lPlRhcCAwPC9maWxlbmFtZT4gY29ubmVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkIGZvciBydW5uaW5nIGluIHVzZXItc3BhY2UgTkZTIG1vZGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldhaXQgZm9yIFFFTVUgdG8gbGF1bmNoLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+T25jZSBRRU1VIGxhdW5jaGVzLCB5b3UgY2FuIGJlZ2luIG9wZXJhdGluZworICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoYXQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBPbmUgdXNlZnVsIHRhc2sgYXQgdGhpcyBwb2ludCB3b3VsZCBiZSB0byBkZXRlcm1pbmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBJUCBBZGRyZXNzIGZvciB0aGUgdXNlci1zcGFjZSBORlMgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pZmNvbmZpZzwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGVwbG95aW5nLWFuZC1kZWJ1Z2dpbmctdGhlLWFwcGxpY2F0aW9uJz4KKyAgICAgICAgICAgIDx0aXRsZT5EZXBsb3lpbmcgYW5kIERlYnVnZ2luZyB0aGUgQXBwbGljYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIHRoZSBRRU1VIGVtdWxhdG9yIGlzIHJ1bm5pbmcgdGhlIGltYWdlLCB5b3UgY2FuIGRlcGxveQorICAgICAgICAgICAgICAgIHlvdXIgYXBwbGljYXRpb24gdXNpbmcgdGhlIEVjbGlwc2UgSURFIGFuZCB0aGVuIHVzZQorICAgICAgICAgICAgICAgIHRoZSBlbXVsYXRvciB0byBwZXJmb3JtIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gZGVwbG95IHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgIkRlYnVnIENvbmZpZ3VyYXRpb25zLi4uIiBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIlJ1biIgbWVudS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIHRoZSBsZWZ0IGFyZWEsIGV4cGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkMvQysrUmVtb3RlIEFwcGxpY2F0aW9uPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkxvY2F0ZSB5b3VyIHByb2plY3QgYW5kIHNlbGVjdCBpdCB0byBicmluZworICAgICAgICAgICAgICAgICAgICAgICAgdXAgYSBuZXcgdGFiYmVkIHZpZXcgaW4gdGhlIERlYnVnIENvbmZpZ3VyYXRpb25zIERpYWxvZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RW50ZXIgdGhlIGFic29sdXRlIHBhdGggaW50byB3aGljaCB5b3Ugd2FudAorICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVwbG95IHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgIlJlbW90ZSBBYnNvbHV0ZSBGaWxlIFBhdGggZm9yCisgICAgICAgICAgICAgICAgICAgICAgICBDL0MrK0FwcGxpY2F0aW9uOiIgZmllbGQuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZW50ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2Jpbi88cmVwbGFjZWFibGU+cHJvZ3JhbW5hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayBvbiB0aGUgIkRlYnVnZ2VyIiB0YWIgdG8gc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgY3Jvc3MtdG9vbCBkZWJ1Z2dlciB5b3UgYXJlIHVzaW5nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgb24gdGhlICJNYWluIiB0YWIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGUgYSBuZXcgY29ubmVjdGlvbiB0byB0aGUgUUVNVSBpbnN0YW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgYnkgY2xpY2tpbmcgb24gIm5ldyIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgPGZpbGVuYW1lPlRDRjwvZmlsZW5hbWU+LCB3aGljaCBtZWFucworICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0IENvbW11bmljYXRpb24gRnJhbWV3b3JrLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIk5leHQiLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xlYXIgb3V0IHRoZSAiaG9zdCBuYW1lIiBmaWVsZCBhbmQgZW50ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBJUCBBZGRyZXNzIGRldGVybWluZWQgZWFybGllci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJGaW5pc2giIHRvIGNsb3NlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgTmV3IENvbm5lY3Rpb25zIERpYWxvZy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzZSB0aGUgZHJvcC1kb3duIG1lbnUgbm93IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIkNvbm5lY3Rpb24iIGZpZWxkIGFuZCBwaWNrIHRoZSBJUCBBZGRyZXNzIHlvdSBlbnRlcmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIkRlYnVnIiB0byBicmluZyB1cCBhIGxvZ2luIHNjcmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGxvZ2luLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWNjZXB0IHRoZSBkZWJ1ZyBwZXJzcGVjdGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncnVubmluZy11c2VyLXNwYWNlLXRvb2xzJz4KKyAgICAgICAgICAgIDx0aXRsZT5SdW5uaW5nIFVzZXItU3BhY2UgVG9vbHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciBpbiB0aGUgbWFudWFsLCBzZXZlcmFsIHRvb2xzIGV4aXN0IHRoYXQKKyAgICAgICAgICAgICAgICBlbmhhbmNlIHlvdXIgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZS4KKyAgICAgICAgICAgICAgICBUaGVzZSB0b29scyBhcmUgYWlkcyBpbiBkZXZlbG9waW5nIGFuZCBkZWJ1Z2dpbmcgYXBwbGljYXRpb25zCisgICAgICAgICAgICAgICAgYW5kIGltYWdlcy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHJ1biB0aGVzZSB1c2VyLXNwYWNlIHRvb2xzIGZyb20gd2l0aGluIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgSURFIHRocm91Z2ggdGhlICJZb2N0b1Byb2plY3RUb29scyIgbWVudS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSB5b3UgcGljayBhIHRvb2wsIHlvdSBuZWVkIHRvIGNvbmZpZ3VyZSBpdCBmb3IgdGhlIHJlbW90ZQorICAgICAgICAgICAgICAgIHRhcmdldC4KKyAgICAgICAgICAgICAgICBFdmVyeSB0b29sIG5lZWRzIHRvIGhhdmUgdGhlIGNvbm5lY3Rpb24gY29uZmlndXJlZC4KKyAgICAgICAgICAgICAgICBZb3UgbXVzdCBzZWxlY3QgYW4gZXhpc3RpbmcgVENGLWJhc2VkIFJTRSBjb25uZWN0aW9uIHRvIHRoZQorICAgICAgICAgICAgICAgIHJlbW90ZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgSWYgb25lIGRvZXMgbm90IGV4aXN0LCBjbGljayAiTmV3IiB0byBjcmVhdGUgb25lLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIHNwZWNpZmljcyBhYm91dCB0aGUgcmVtb3RlIHRvb2xzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPk9Qcm9maWxlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGluZyB0aGlzIHRvb2wgY2F1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wcm9maWxlLXNlcnZlcjwvZmlsZW5hbWU+IG9uIHRoZSByZW1vdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCB0byBsYXVuY2ggb24gdGhlIGxvY2FsIGhvc3QgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+b3Byb2ZpbGUtdmlld2VyPC9maWxlbmFtZT4gbXVzdCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIG9uIHRoZSBsb2NhbCBob3N0IG1hY2hpbmUgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wcm9maWxlLXNlcnZlcjwvZmlsZW5hbWU+IG11c3QgYmUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgcmVtb3RlIHRhcmdldCwgcmVzcGVjdGl2ZWx5LCBpbiBvcmRlciB0byB1c2UuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBjb21waWxlIGFuZCBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wcm9maWxlLXZpZXdlcjwvZmlsZW5hbWU+IGZyb20gdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgY29kZSBvbiB5b3VyIGxvY2FsIGhvc3QgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCBpbiBvcmRlciB0byBjb252ZXJ0IHRoZSB0YXJnZXQncyBzYW1wbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCBkYXRhIGludG8gYSBmb3JtIHRoYXQgdGhlIGhvc3QgY2FuIHVzZSwgeW91IG11c3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgT1Byb2ZpbGUgdmVyc2lvbiAwLjkuNCBvciBncmVhdGVyIGluc3RhbGxlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBsb2NhdGUgYm90aCB0aGUgdmlld2VyIGFuZCBzZXJ2ZXIgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kvb3Byb2ZpbGV1aS8nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIHVwIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhpcyB0b29sIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyNwcm9maWxlLW1hbnVhbC1vcHJvZmlsZSc+b3Byb2ZpbGU8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT5UaGUgPGZpbGVuYW1lPm9wcm9maWxlLXNlcnZlcjwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgYnkgZGVmYXVsdCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG8tc2RrPC9maWxlbmFtZT4gaW1hZ2UuPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPkx0dG5nMi4wIHRyYWNlIGltcG9ydDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3RpbmcgdGhpcyB0b29sIHRyYW5zZmVycyB0aGUgcmVtb3RlIHRhcmdldCdzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+THR0bmc8L2ZpbGVuYW1lPiB0cmFjaW5nIGRhdGEgYmFjayB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIGhvc3QgbWFjaGluZSBhbmQgdXNlcyB0aGUgTHR0bmcgRWNsaXBzZSBwbHVnLWluCisgICAgICAgICAgICAgICAgICAgICAgICB0byBncmFwaGljYWxseSBkaXNwbGF5IHRoZSBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSBMdHRuZyB0byB0cmFjZSBhbgorICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgPHVsaW5rIHVybD0naHR0cDovL2x0dG5nLm9yZy9kb2N1bWVudGF0aW9uJz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyNsdHRuZy1saW51eC10cmFjZS10b29sa2l0LW5leHQtZ2VuZXJhdGlvbic+TFRUbmcgKExpbnV4IFRyYWNlIFRvb2xraXQsIG5leHQgZ2VuZXJhdGlvbik8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24sIHdoaWNoIGlzIGluIHRoZSBZb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNpbmcgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+RG8gbm90IHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MdHRuZy11c2VyIHNwYWNlIChsZWdhY3kpPC9maWxlbmFtZT4gdG9vbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHRvb2wgbm8gbG9uZ2VyIGhhcyBhbnkgdXBzdHJlYW0gc3VwcG9ydC48L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5CZWZvcmUgeW91IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MdHRuZzIuMCB0cmFjZSBpbXBvcnQ8L2ZpbGVuYW1lPiB0b29sLAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gc2V0dXAgdGhlIEx0dG5nIEVjbGlwc2UgcGx1Zy1pbiBhbmQgY3JlYXRlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNpbmcgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIERvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCAiT3BlbiBQZXJzcGVjdGl2ZSIgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldpbmRvdyIgbWVudSBhbmQgdGhlbiBzZWxlY3QgIk90aGVyLi4uIiB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmluZyB1cCBhIG1lbnUgb2Ygb3RoZXIgcGVyc3BlY3RpdmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgIlRyYWNpbmciLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIk9LIiB0byBjaGFuZ2UgdGhlIEVjbGlwc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc3BlY3RpdmUgaW50byB0aGUgVHJhY2luZyBwZXJzcGVjdGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSBhIG5ldyBUcmFjaW5nIHByb2plY3QgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW5nICJQcm9qZWN0IiBmcm9tIHRoZSAiRmlsZSAtPiBOZXciIG1lbnUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DaG9vc2UgIlRyYWNpbmcgUHJvamVjdCIgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRyYWNpbmciIG1lbnUgYW5kIGNsaWNrICJOZXh0Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlByb3ZpZGUgYSBuYW1lIGZvciB5b3VyIHRyYWNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdCBhbmQgY2xpY2sgIkZpbmlzaCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5HZW5lcmF0ZSB5b3VyIHRyYWNpbmcgZGF0YSBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlIHRhcmdldC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0ICJMdHRuZzIuMCB0cmFjZSBpbXBvcnQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlICJZb2N0byBQcm9qZWN0IFRvb2xzIiBtZW51IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IHRoZSBkYXRhIGltcG9ydCBwcm9jZXNzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TcGVjaWZ5IHlvdXIgcmVtb3RlIGNvbm5lY3Rpb24gbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciB0aGUgVXN0IGRpcmVjdG9yeSBwYXRoLCBzcGVjaWZ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsb2NhdGlvbiBvZiB5b3VyIHJlbW90ZSB0cmFjaW5nIGRhdGEuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2Ugc3VyZSB0aGUgbG9jYXRpb24gZW5kcyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51c3Q8L2ZpbGVuYW1lPiAoZS5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9teXNlc3Npb24vdXN0PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIk9LIiB0byBjb21wbGV0ZSB0aGUgaW1wb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRhIGlzIG5vdyBpbiB0aGUgbG9jYWwgdHJhY2luZyBwcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjcmVhdGVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SaWdodCBjbGljayBvbiB0aGUgZGF0YSBhbmQgdGhlbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1lbnUgdG8gU2VsZWN0ICJHZW5lcmljIENURiBUcmFjZSIgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRyYWNlIFR5cGUuLi4gLT4gQ29tbW9uIFRyYWNlIEZvcm1hdCIgbWVudSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAgdGhlIHRyYWNpbmcgdHlwZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmlnaHQgY2xpY2sgdGhlIG1vdXNlIGFuZCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9wZW4iIHRvIGJyaW5nIHVwIHRoZSBFY2xpcHNlIEx0dG5nIFRyYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXdlciBzbyB5b3UgdmlldyB0aGUgdHJhY2luZyBkYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPlBvd2VyVE9QPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGluZyB0aGlzIHRvb2wgcnVucyBQb3dlclRPUCBvbiB0aGUgcmVtb3RlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZSBhbmQgZGlzcGxheXMgdGhlIHJlc3VsdHMgaW4gYSBuZXcgdmlldyBjYWxsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyVE9QLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSAiVGltZSB0byBnYXRoZXIgZGF0YShzZWMpOiIgZmllbGQgaXMgdGhlIHRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCBpbiBzZWNvbmRzIGJlZm9yZSBkYXRhIGlzIGdhdGhlcmVkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGUgdGFyZ2V0IGZvciBhbmFseXNpcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgInNob3cgcGlkcyBpbiB3YWtldXBzIGxpc3Q6IiBmaWVsZCBjb3JyZXNwb25kcworICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIDxmaWxlbmFtZT4tcDwvZmlsZW5hbWU+IGFyZ3VtZW50IHBhc3NlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBvd2VyVE9QPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPkxhdGVuY3lUT1AgYW5kIFBlcmY8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgTGF0ZW5jeVRPUCBpZGVudGlmaWVzIHN5c3RlbSBsYXRlbmN5LCB3aGlsZQorICAgICAgICAgICAgICAgICAgICAgICAgUGVyZiBtb25pdG9ycyB0aGUgc3lzdGVtJ3MgcGVyZm9ybWFuY2UgY291bnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW5nIGVpdGhlciBvZiB0aGVzZSB0b29scyBjYXVzZXMgYW4gUlNFIHRlcm1pbmFsCisgICAgICAgICAgICAgICAgICAgICAgICB2aWV3IHRvIGFwcGVhciBmcm9tIHdoaWNoIHlvdSBjYW4gcnVuIHRoZSB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJvdGggdG9vbHMgcmVmcmVzaCB0aGUgZW50aXJlIHNjcmVlbiB0byBkaXNwbGF5IHJlc3VsdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIHRoZXkgcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc2V0dGluZyB1cCBhbmQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wZXJmPC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19QUk9GX1VSTDsjcHJvZmlsZS1tYW51YWwtcGVyZic+cGVyZjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5TeXN0ZW1UYXA8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtdGFwIGlzIGEgdG9vbCB0aGF0IGxldHMgeW91IGNyZWF0ZSBhbmQgcmV1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdHMgdG8gZXhhbWluZSB0aGUgYWN0aXZpdGllcyBvZiBhIGxpdmUgTGludXgKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZWFzaWx5IGV4dHJhY3QsIGZpbHRlciwgYW5kIHN1bW1hcml6ZSBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGhlbHBzIHlvdSBkaWFnbm9zZSBjb21wbGV4IHBlcmZvcm1hbmNlIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsIHByb2JsZW1zLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc2V0dGluZyB1cCBhbmQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TeXN0ZW1UYXA8L2ZpbGVuYW1lPiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9zeXN0ZW10YXAvZG9jdW1lbnRhdGlvbi5odG1sJz5TeXN0ZW1UYXAgRG9jdW1lbnRhdGlvbjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+IHRvb2wgbGV0cyB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1aWNrbHkgc2V0IHVwIGEgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRvb2wgcmVxdWlyZXMgYSBNZXRhZGF0YSBsb2NhdGlvbiwgYnVpbGQgbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBCU1AgbmFtZSwgQlNQIG91dHB1dCBsb2NhdGlvbiwgYW5kIGEga2VybmVsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPiB0b29sIG91dHNpZGUgb2YgRWNsaXBzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNjcmVhdGluZy1hLW5ldy1ic3AtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWJzcC1zY3JpcHQnPkNyZWF0aW5nIGEgbmV3IEJTUCBMYXllciBVc2luZyB0aGUgeW9jdG8tYnNwIFNjcmlwdDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIChCU1ApIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd29ya2Zsb3ctdXNpbmctc3RhbmQtYWxvbmUtY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWlucyc+CisgICAgICAgIDx0aXRsZT5Xb3JrZmxvdyBVc2luZyBTdGFuZC1BbG9uZSBDcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW5zPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGRldmVsb3AgYW4gYXBwbGljYXRpb24gd2l0aG91dCBwcmlvciBpbnN0YWxsYXRpb24KKyAgICAgICAgICAgIG9mIHRoZSBBRFQsIHlvdSBzdGlsbCBjYW4gZW1wbG95IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluJz5Dcm9zcyBEZXZlbG9wbWVudCBUb29sY2hhaW48L2xpbms+LAorICAgICAgICAgICAgdGhlIFFFTVUgZW11bGF0b3IsIGFuZCBhIG51bWJlciBvZiBzdXBwb3J0ZWQgIHRhcmdldCBpbWFnZSBmaWxlcy4KKyAgICAgICAgICAgIFlvdSBqdXN0IG5lZWQgdG8gZm9sbG93IHRoZXNlIGdlbmVyYWwgc3RlcHM6CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbnN0YWxsIHRoZSBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4gZm9yIHlvdXIgdGFyZ2V0IGhhcmR3YXJlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaW5zdGFsbCB0aGUgdG9vbGNoYWluLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2luZy1hbi1leGlzdGluZy10b29sY2hhaW4tdGFyYmFsbCc+VXNpbmcgYSBDcm9zcy1Ub29sY2hhaW4gVGFyYmFsbDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzCisgICAgICAgICAgICAgICAgICAgIEd1aWRlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RG93bmxvYWQgdGhlIFRhcmdldCBJbWFnZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0cyBzZXZlcmFsIHRhcmdldCBhcmNoaXRlY3R1cmVzCisgICAgICAgICAgICAgICAgICAgIGFuZCBoYXMgbWFueSBwcmUtYnVpbHQga2VybmVsIGltYWdlcyBhbmQgcm9vdCBmaWxlc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIGltYWdlcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBhcmUgZ29pbmcgdG8gZGV2ZWxvcCB5b3VyIGFwcGxpY2F0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlLCBnbyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX01BQ0hJTkVTX0RMX1VSTDsnPjxmaWxlbmFtZT5tYWNoaW5lczwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgZG93bmxvYWQgYXJlYSBhbmQgY2hvb3NlIGEgdGFyZ2V0IG1hY2hpbmUgYXJlYQorICAgICAgICAgICAgICAgICAgICBmcm9tIHdoaWNoIHRvIGRvd25sb2FkIHRoZSBrZXJuZWwgaW1hZ2UgYW5kIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBkb3dubG9hZCBhcmVhIGNvdWxkIGhhdmUgc2V2ZXJhbCBmaWxlcyBpbiBpdCB0aGF0CisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgZGV2ZWxvcG1lbnQgdXNpbmcgYWN0dWFsIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGFyZWEgbWlnaHQgY29udGFpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmhkZGltZzwvZmlsZW5hbWU+IGZpbGVzIHRoYXQgY29tYmluZSB0aGUKKyAgICAgICAgICAgICAgICAgICAga2VybmVsIGltYWdlIHdpdGggdGhlIGZpbGVzeXN0ZW0sIGJvb3QgbG9hZGVycywgYW5kCisgICAgICAgICAgICAgICAgICAgIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIGdldCB0aGUgZmlsZXMgeW91IG5lZWQgZm9yIHlvdXIgcGFydGljdWxhcgorICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBwcm9jZXNzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IGFyZSBnb2luZyB0byBkZXZlbG9wIHlvdXIgYXBwbGljYXRpb24gYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZW4gcnVuIGFuZCB0ZXN0IGl0IHVzaW5nIHRoZSBRRU1VIGVtdWxhdG9yLCBnbyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1FFTVVfRExfVVJMOyc+PGZpbGVuYW1lPm1hY2hpbmVzL3FlbXU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkIGFyZWEuCisgICAgICAgICAgICAgICAgICAgIEZyb20gdGhpcyBhcmVhLCBnbyBkb3duIGludG8gdGhlIGRpcmVjdG9yeSBmb3IgeW91cgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgYXJjaGl0ZWN0dXJlIChlLmcuIDxmaWxlbmFtZT5xZW11eDg2XzY0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGFuIDx0cmFkZW1hcmsgY2xhc3M9J3JlZ2lzdGVyZWQnPkludGVsPC90cmFkZW1hcms+LWJhc2VkCisgICAgICAgICAgICAgICAgICAgIDY0LWJpdCBhcmNoaXRlY3R1cmUpLgorICAgICAgICAgICAgICAgICAgICBEb3dubG9hZCBrZXJuZWwsIHJvb3QgZmlsZXN5c3RlbSwgYW5kIGFueSBvdGhlciBmaWxlcyB5b3UKKyAgICAgICAgICAgICAgICAgICAgbmVlZCBmb3IgeW91ciBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT5JbiBvcmRlciB0byB1c2UgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbiBRRU1VLCB5b3UKKyAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBleHRyYWN0IGl0LgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyNleHRyYWN0aW5nLXRoZS1yb290LWZpbGVzeXN0ZW0nPkV4dHJhY3RpbmcgdGhlIFJvb3QgRmlsZXN5c3RlbTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZXh0cmFjdCB0aGUgcm9vdAorICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLjwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRldmVsb3AgYW5kIFRlc3QgeW91cgorICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbjo8L2VtcGhhc2lzPiAgQXQgdGhpcyBwb2ludCwgeW91IGhhdmUgdGhlIHRvb2xzCisgICAgICAgICAgICAgICAgICAgIHRvIGRldmVsb3AgeW91ciBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdG8gc2VwYXJhdGVseSBpbnN0YWxsIGFuZCB1c2UgdGhlIFFFTVUKKyAgICAgICAgICAgICAgICAgICAgZW11bGF0b3IsIHlvdSBjYW4gZ28gdG8KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3dpa2kucWVtdS5vcmcvTWFpbl9QYWdlJz5RRU1VIEhvbWUgUGFnZTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRvIGRvd25sb2FkIGFuZCBsZWFybiBhYm91dCB0aGUgZW11bGF0b3IuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZGV2LW1hbnVhbC1xZW11Jz5Vc2luZyB0aGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgY2hhcHRlciBmb3IgaW5mb3JtYXRpb24gb24gdXNpbmcgUUVNVSB3aXRoaW4gdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgICAgIFByb2plY3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZGV2LW1vZGlmeWluZy1zb3VyY2UtY29kZSI+CisgICAgPHRpdGxlPk1vZGlmeWluZyBTb3VyY2UgQ29kZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQSBjb21tb24gZGV2ZWxvcG1lbnQgd29ya2Zsb3cgY29uc2lzdHMgb2YgbW9kaWZ5aW5nIHByb2plY3Qgc291cmNlCisgICAgICAgIGZpbGVzIHRoYXQgYXJlIGV4dGVybmFsIHRvIHRoZSBZb2N0byBQcm9qZWN0IGFuZCB0aGVuIGludGVncmF0aW5nCisgICAgICAgIHRoYXQgcHJvamVjdCdzIGJ1aWxkIG91dHB1dCBpbnRvIGFuIGltYWdlIGJ1aWx0IHVzaW5nIHRoZQorICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICBHaXZlbiB0aGlzIHNjZW5hcmlvLCBkZXZlbG9wbWVudCBlbmdpbmVlcnMgdHlwaWNhbGx5IHdhbnQgdG8gc3RpY2sKKyAgICAgICAgdG8gdGhlaXIgZmFtaWxpYXIgcHJvamVjdCBkZXZlbG9wbWVudCB0b29scyBhbmQgbWV0aG9kcywgd2hpY2ggYWxsb3dzCisgICAgICAgIHRoZW0gdG8ganVzdCBmb2N1cyBvbiB0aGUgcHJvamVjdC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU2V2ZXJhbCB3b3JrZmxvd3MgZXhpc3QgdGhhdCBhbGxvdyB5b3UgdG8gZGV2ZWxvcCwgYnVpbGQsIGFuZCB0ZXN0CisgICAgICAgIGNvZGUgdGhhdCBpcyBnb2luZyB0byBiZSBpbnRlZ3JhdGVkIGludG8gYW4gaW1hZ2UgYnVpbHQgdXNpbmcgdGhlCisgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdHdvOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQSBzZXQgb2YgdG9vbHMgdG8gYWlkIGluIHdvcmtpbmcgb24gdGhlIHNvdXJjZSBjb2RlIGJ1aWx0IGJ5CisgICAgICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgU2VjdGlvbgorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1kZXZ0b29sLWluLXlvdXItd29ya2Zsb3cnPlVzaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gaW4gWW91ciBXb3JrZmxvdzwvbGluaz4iCisgICAgICAgICAgICAgICAgZGVzY3JpYmVzIHRoaXMgd29ya2Zsb3cuCisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgbW9yZSBpbmZvcm1hdGlvbiB0aGF0IHNob3djYXNlcyB0aGUgd29ya2Zsb3csIGNsaWNrCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2EvbGluYXJvLm9yZy9maWxlL2QvMEIzS0d6WTVmVzdsYVREVnhVWG8zVURSdmQycy92aWV3Jz5oZXJlPC91bGluaz4KKyAgICAgICAgICAgICAgICBmb3IgYW4gZXhjZWxsZW50IHByZXNlbnRhdGlvbiBieSBUcmV2b3IgV29lcm5lciB0aGF0CisgICAgICAgICAgICAgICAgcHJvdmlkZXMgZGV0YWlsZWQgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBhbmQgYSBjb21wbGV0ZQorICAgICAgICAgICAgICAgIHdvcmtpbmcgdHV0b3JpYWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjx1bGluayB1cmw9J2h0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL3F1aWx0Jz5RdWlsdDwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQSBwb3dlcmZ1bCB0b29sIHRoYXQgYWxsb3dzIHlvdSB0byBjYXB0dXJlIHNvdXJjZQorICAgICAgICAgICAgICAgIGNvZGUgY2hhbmdlcyB3aXRob3V0IGhhdmluZyBhIGNsZWFuIHNvdXJjZSB0cmVlLgorICAgICAgICAgICAgICAgIFdoaWxlIFF1aWx0IGlzIG5vdCB0aGUgcHJlZmVycmVkIHdvcmtmbG93IG9mIHRoZSB0d28sIHRoaXMKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluY2x1ZGVzIGl0IGZvciB1c2VycyB0aGF0IGFyZSBjb21taXR0ZWQgdG8gdXNpbmcKKyAgICAgICAgICAgICAgICB0aGUgdG9vbC4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWEtcXVpbHQtd29ya2Zsb3cnPlVzaW5nIFF1aWx0IGluIFlvdXIgV29ya2Zsb3c8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZy1kZXZ0b29sLWluLXlvdXItd29ya2Zsb3cnPgorICAgICAgICA8dGl0bGU+VXNpbmcgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBpbiBZb3VyIFdvcmtmbG93PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIG1lbnRpb25lZCBlYXJsaWVyLCA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGhlbHBzCisgICAgICAgICAgICB5b3UgZWFzaWx5IGRldmVsb3AgcHJvamVjdHMgd2hvc2UgYnVpbGQgb3V0cHV0IG11c3QgYmUgcGFydCBvZgorICAgICAgICAgICAgYW4gaW1hZ2UgYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBwcmVzZW50cyB0aGUgd29ya2Zsb3cgeW91IHdvdWxkCisgICAgICAgICAgICB1c2UgdGhhdCBpbmNsdWRlcyA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPGZvb3Rub3RlPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBLdWRvcyBhbmQgdGhhbmtzIHRvCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J21haWx0bzp0d29lcm5lckBnbWFpbC5jb20nPlRyZXZvciBXb2VybmVyPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2hvc2UKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHBzOi8vZHJpdmUuZ29vZ2xlLmNvbS9maWxlL2QvMEIzS0d6WTVmVzdsYVREVnhVWG8zVURSdmQycy92aWV3Jz5Zb2N0byBQcm9qZWN0IERldmVsb3BlciBXb3JrZmxvdyBUdXRvcmlhbDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBwYXBlciBjb250cmlidXRlZCBuaWNlbHkgdG93YXJkcyB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcworICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZm9vdG5vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzdGVwcyBpbiB0aGlzIHNlY3Rpb24gYXNzdW1lIHlvdSBoYXZlIGEgcHJldmlvdXNseSBidWlsdAorICAgICAgICAgICAgaW1hZ2UgdGhhdCBpcyBhbHJlYWR5IGVpdGhlciBydW5uaW5nIGluIFFFTVUgb3IgcnVubmluZyBvbiBhY3R1YWwKKyAgICAgICAgICAgIGhhcmR3YXJlLgorICAgICAgICAgICAgQWxzbywgaXQgaXMgYXNzdW1lZCB0aGF0IGZvciBkZXBsb3ltZW50IG9mIHRoZSBpbWFnZSB0byB0aGUKKyAgICAgICAgICAgIHRhcmdldCwgU1NIIGlzIGluc3RhbGxlZCBpbiB0aGUgaW1hZ2UgYW5kIGlmIHRoZSBpbWFnZSBpcyBydW5uaW5nCisgICAgICAgICAgICBvbiByZWFsIGhhcmR3YXJlIHRoYXQgeW91IGhhdmUgbmV0d29yayBhY2Nlc3MgdG8gYW5kIGZyb20geW91cgorICAgICAgICAgICAgZGV2ZWxvcG1lbnQgbWFjaGluZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1cGRhdGUteW91ci1leHRlcm5hbC1zb3VyY2UnPgorICAgICAgICAgICAgPHRpdGxlPlVwZGF0ZSBZb3VyIEV4dGVybmFsIFNvdXJjZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFBhcnQgb2YgdGhlIGRldmVsb3BtZW50IGZsb3cgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IG9mIGNvdXJzZSBpbnZvbHZlcyB1cGRhdGluZworICAgICAgICAgICAgICAgIHlvdXIgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgICAgIFNldmVyYWwgb3Bwb3J0dW5pdGllcyBleGlzdCBpbiB0aGUgd29ya2Zsb3cgdG8gZXh0cmFjdCBhbmQKKyAgICAgICAgICAgICAgICB3b3JrIG9uIHRoZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBGb3Igbm93LCBqdXN0IHJlYWxpemUgdGhhdCB5b3UgbmVlZCB0byBiZSBhYmxlIHRvIGhhdmUKKyAgICAgICAgICAgICAgICBhY2Nlc3MgdG8gYW5kIGVkaXQgZmlsZXMuCisgICAgICAgICAgICAgICAgT25lIG9idmlvdXMgc29sdXRpb24gaXMgdG8gaW5pdGlhbGx5IGV4dHJhY3QgdGhlIGNvZGUgaW50byBhbgorICAgICAgICAgICAgICAgIGlzb2xhdGVkIGFyZWEgaW4gcHJlcGFyYXRpb24gZm9yIG1vZGlmaWNhdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciBvcHRpb24gaXMgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIG1ha2VzIHVzZSBvZiBhICJ3b3Jrc3BhY2UiIGxheWVyIHdoZXJlIG11Y2ggb2YKKyAgICAgICAgICAgICAgICB0aGUgdHJhbnNpdGlvbmFsIHdvcmsgb2NjdXJzLCB3aGljaCBpcyBuZWVkZWQgZm9yIHNldHRpbmcgdXAKKyAgICAgICAgICAgICAgICBNZXRhZGF0YSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRoYXQgbGV0cyB5b3UKKyAgICAgICAgICAgICAgICBidWlsZCB5b3VyIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgIE9wdGlvbnMgKGkuZS4gIi14IikgZXhpc3QgdXNpbmcgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRoYXQgZW5hYmxlIHlvdSB0byB1c2UgdGhlIHRvb2wgdG8gZXh0cmFjdCBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2UtZGV2dG9vbC10by1pbnRlZ3JhdGUteW91ci1jb2RlLXdpdGgtdGhlLWltYWdlJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2UgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gdG8gSW50ZWdyYXRlIFlvdXIgQ29kZSB3aXRoIHRoZSBJbWFnZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZXMgdGhlIG5lZWRlZCBNZXRhZGF0YSB0aGF0IGFsbG93cyB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIHlvdXIgY29kZSBpbnRvIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSWYgYSBwYWNrYWdlIG9yIHBhY2thZ2VzIHByb2R1Y2VkIGJ5IHRoZSByZWNpcGUgb24gd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgeW91IGFyZSB3b3JraW5nIGFyZSBub3QgYWxyZWFkeSBpbgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfSU5TVEFMTCc+PGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgaW1hZ2UsIHlvdSBtdXN0IGFkZCB0aGVtLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gY29tbWFuZCBkb2VzIG5vdAorICAgICAgICAgICAgICAgICAgICBhZGQgdGhlbSBmb3IgeW91LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIGZvcm06CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgYWRkIDxyZXBsYWNlYWJsZT55b3VyLXByb2plY3QtbmFtZTwvcmVwbGFjZWFibGU+Jm5ic3A7PHJlcGxhY2VhYmxlPnBhdGgtdG8tc291cmNlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFJ1bm5pbmcgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBmb3IgdGhlIGZpcnN0IHRpbWUKKyAgICAgICAgICAgICAgICBjcmVhdGVzIGEgd29ya3NwYWNlIGxheWVyIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRoYXQKKyAgICAgICAgICAgICAgICBpcyBiYXNlZCBvbiB5b3VyIHByb2plY3QncyBsb2NhdGlvbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5wYXRoLXRvLXNvdXJjZTwvcmVwbGFjZWFibGU+LzxyZXBsYWNlYWJsZT5idWlsZC1kaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+d29ya3NwYWNlLWxheWVyPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZSBsYXllciBpcyAid29ya3NwYWNlIi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIGRldGFpbHMgb24gdGhlIHdvcmtzcGFjZSBsYXllciBjcmVhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5idWlsZC1kaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPiwKKyAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2RldnRvb2wtYWRkaW5nLWEtbmV3LXJlY2lwZS10by10aGUtd29ya3NwYWNlJz5BZGRpbmcgYSBOZXcgUmVjaXBlIHRvIHRoZSBXb3Jrc3BhY2UgTGF5ZXI8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKzwhLS0KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9mIGNvdXJzZSwgZWFjaCBsYXllciBtdXN0IGhhdmUgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sYXllci5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gYWxzbyBjcmVhdGVzIHRoaXMgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNhdCB3b3Jrc3BhY2UvY29uZi9sYXllci5jb25mCisgICAgICMgIyMjIHdvcmtzcGFjZSBsYXllciBhdXRvwq1nZW5lcmF0ZWQgYnkgZGV2dG9vbCAjIyMKKyAgICAgQkJQQVRIID0uICIke0xBWUVSRElSfToiCisgICAgIEJCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMvKi8qLmJiIFwKKyAgICAgICAgICAgICAgICAgJHtMQVlFUkRJUn0vYXBwZW5kcy8qLmJiYXBwZW5kIgorICAgICBCQkZJTEVfQ09MTEVDVElPTlMgKz0gIndvcmtzcGFjZWxheWVyIgorICAgICBCQkZJTEVfUEFUVEVSTl93b3Jrc3BhY2VsYXllciA9ICJeJHtMQVlFUkRJUn0vIgorICAgICBCQkZJTEVfUEFUVEVSTl9JR05PUkVfRU1QVFlfd29ya3NwYWNlbGF5ZXIgPSAiMSIKKyAgICAgQkJGSUxFX1BSSU9SSVRZX3dvcmtzcGFjZWxheWVyID0gIjk5IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKy0tPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBSdW5uaW5nIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZXMgeW91ciByZWNpcGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNhdCB3b3Jrc3BhY2UvcmVjaXBlcy88cmVwbGFjZWFibGU+eW91ci1wcm9qZWN0LW5hbWU8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+eW91ci1wcm9qZWN0LW5hbWU8L3JlcGxhY2VhYmxlPi5iYgorICAgICAjIFJlY2lwZSBjcmVhdGVkIGJ5IHJlY2lwZXRvb2wKKyAgICAgIyBUaGlzIGlzIHRoZSBiYXNpcyBvZiBhIHJlY2lwZSBhbmQgbWF5IG5lZWQgZnVydGhlciBlZGl0aW5nIGluIG9yZGVyIHRvIGJlIGZ1bGx5IGZ1bmN0aW9uYWwuCisgICAgICMgKEZlZWwgZnJlZSB0byByZW1vdmUgdGhlc2UgY29tbWVudHMgd2hlbiBlZGl0aW5nLikKKyAgICAgIworICAgICAjIFVuYWJsZSB0byBmaW5kIGFueSBmaWxlcyB0aGF0IGxvb2tlZCBsaWtlIGxpY2Vuc2Ugc3RhdGVtZW50cy4gQ2hlY2sgdGhlIGFjY29tcGFueWluZworICAgICAjIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZSBoZWFkZXJzIGFuZCBzZXQgTElDRU5TRSBhbmQgTElDX0ZJTEVTX0NIS1NVTSBhY2NvcmRpbmdseS4KKyAgICAgTElDRU5TRSA9ICJDTE9TRUQiCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiIgorCisgICAgICMgTm8gaW5mb3JtYXRpb24gZm9yIFNSQ19VUkkgeWV0IChvbmx5IGFuIGV4dGVybmFsIHNvdXJjZSB0cmVlIHdhcworICAgICAjIHNwZWNpZmllZCkKKyAgICAgU1JDX1VSSSA9ICIiCisKKyAgICAgREVQRU5EUyA9ICJsaWJ4MTEiCisgICAgICMgTk9URTogaWYgdGhpcyBzb2Z0d2FyZSBpcyBub3QgY2FwYWJsZSBvZiBiZWluZyBidWlsdCBpbiBhIHNlcGFyYXRlIGJ1aWxkIGRpcmVjdG9yeQorICAgICAjIGZyb20gdGhlIHNvdXJjZSwgeW91IHNob3VsZCByZXBsYWNlIGF1dG90b29scyB3aXRoIGF1dG90b29sc8KtLWJyb2tlbnNlcCBpbiB0aGUKKyAgICAgIyBpbmhlcml0IGxpbmUKKyAgICAgaW5oZXJpdCBhdXRvdG9vbHMKKworICAgICAjIFNwZWNpZnkgYW55IG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0byB0aGUgY29uZmlndXJlIHNjcmlwdCB1c2luZyBFWFRSQV9PRUNPTkY6CisgICAgIEVYVFJBX09FQ09ORiA9ICIiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBMYXN0bHksIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIGNyZWF0ZXMgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNhdCB3b3Jrc3BhY2UvYXBwZW5kcy88cmVwbGFjZWFibGU+eW91ci1wcm9qZWN0LW5hbWU8L3JlcGxhY2VhYmxlPi5iYmFwcGVuZAorICAgICBpbmhlcml0IGV4dGVybmFsc3JjCisgICAgIEVYVEVSTkFMU1JDID0gIi88cmVwbGFjZWFibGU+cGF0aC10by1zb3VyY2U8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+eW91ci1wcm9qZWN0LW5hbWU8L3JlcGxhY2VhYmxlPiIKKworICAgICAjIGluaXRpYWxfcmV2OiA8cmVwbGFjZWFibGU+Y29tbWl0LUlEPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGQteW91ci1wcm9qZWN0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5CdWlsZCBZb3VyIFByb2plY3Q8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBCaXRCYWtlIG9yIDxmaWxlbmFtZT5kZXZ0b29sIGJ1aWxkPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICBidWlsZCB5b3VyIG1vZGlmaWVkIHByb2plY3QuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVzZSBCaXRCYWtlLCB1c2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSA8cmVwbGFjZWFibGU+eW91ci1wcm9qZWN0LW5hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIGJ1aWxkPC9maWxlbmFtZT4sIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSAtYyBwb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgYnVpbGQgPHJlcGxhY2VhYmxlPnlvdXItcHJvamVjdC1uYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworPCEtLQorICAgICAgICA8c2VjdGlvbiBpZD0nZGV2LWJ1aWxkLXRoZS1pbWFnZSc+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGQgdGhlIEltYWdlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZpbmFsIHN0ZXAgYmVmb3JlIHRlc3RpbmcgaXMgdG8gcmVidWlsZCB0aGUgYmFzZSBpbWFnZQorICAgICAgICAgICAgICAgIHdpdGggeW91ciBwcm9qZWN0IGNoYW5nZXMgYXMgcGFydCBvZiB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgU2ltcGx5IHJ1biBCaXRCYWtlIGFnYWluIG9uIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Rldi10ZXN0aW5nLXRoZS1pbWFnZSc+CisgICAgICAgICAgICA8dGl0bGU+VGVzdGluZyB0aGUgSW1hZ2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHRoZSBpbWFnZSwgeW91IGNhbiB0ZXN0IGl0IHVzaW5nIFFFTVUuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGFzc3VtaW5nICJxZW11eDg2IjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcnVucWVtdSBxZW11eDg2IDxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdGVzdCBhbiBpbWFnZSB1c2luZyBRRU1VLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Rldi1tYW51YWwtcWVtdSc+VXNpbmcgdGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorLS0+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtcXVpY2stcmVmZXJlbmNlJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gUXVpY2sgUmVmZXJlbmNlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gaGFzIG1vcmUgZnVuY3Rpb25hbGl0eSB0aGFuIHNpbXBseQorICAgICAgICAgICAgYWRkaW5nIGEgbmV3IHJlY2lwZSBhbmQgdGhlIHN1cHBvcnRpbmcgTWV0YWRhdGEgdG8gYSB0ZW1wb3JhcnkKKyAgICAgICAgICAgIHdvcmtzcGFjZSBsYXllci4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBhIHNob3J0IHJlZmVyZW5jZSBvbgorICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBmb3IgbW9zdCBvZiB0aGUgY29tbWFuZHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGV2dG9vbC1nZXR0aW5nLWhlbHAnPgorICAgICAgICAgICAgPHRpdGxlPkdldHRpbmcgSGVscDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBlYXNpZXN0IHdheSB0byBnZXQgaGVscCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gY29tbWFuZCBpcyB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1oZWxwPC9maWxlbmFtZT4gb3B0aW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIC0taGVscAorICAgICB1c2FnZTogZGV2dG9vbCBbLWhdIFstLWJhc2VwYXRoIEJBU0VQQVRIXSBbLWRdIFstcV0gWy0tY29sb3IgQ09MT1JdCisgICAgICAgICAgICAgICAmbHQ7c3ViY29tbWFuZCZndDsgLi4uCisKKyAgICAgT3BlbkVtYmVkZGVkIGRldmVsb3BtZW50IHRvb2wKKworICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgIC0tYmFzZXBhdGggQkFTRVBBVEggIEJhc2UgZGlyZWN0b3J5IG9mIFNESyAvIGJ1aWxkIGRpcmVjdG9yeQorICAgICAgIC1kLCAtLWRlYnVnICAgICAgICAgIEVuYWJsZSBkZWJ1ZyBvdXRwdXQKKyAgICAgICAtcSwgLS1xdWlldCAgICAgICAgICBQcmludCBvbmx5IGVycm9ycworICAgICAgIC0tY29sb3IgQ09MT1IgICAgICAgIENvbG9yaXplIG91dHB1dCAod2hlcmUgQ09MT1IgaXMgYXV0bywgYWx3YXlzLCBuZXZlcikKKworICAgICBzdWJjb21tYW5kczoKKyAgICAgICAmbHQ7c3ViY29tbWFuZCZndDsKKyAgICAgICAgIGNyZWF0ZS13b3Jrc3BhY2UgICBTZXQgdXAgYSB3b3Jrc3BhY2UKKyAgICAgICAgIGRlcGxveS10YXJnZXQgICAgICBEZXBsb3kgcmVjaXBlIG91dHB1dCBmaWxlcyB0byBsaXZlIHRhcmdldCBtYWNoaW5lCisgICAgICAgICB1bmRlcGxveS10YXJnZXQgICAgVW5kZXBsb3kgcmVjaXBlIG91dHB1dCBmaWxlcyBpbiBsaXZlIHRhcmdldCBtYWNoaW5lCisgICAgICAgICBhZGQgICAgICAgICAgICAgICAgQWRkIGEgbmV3IHJlY2lwZQorICAgICAgICAgbW9kaWZ5ICAgICAgICAgICAgIE1vZGlmeSB0aGUgc291cmNlIGZvciBhbiBleGlzdGluZyByZWNpcGUKKyAgICAgICAgIGV4dHJhY3QgICAgICAgICAgICBFeHRyYWN0IHRoZSBzb3VyY2UgZm9yIGFuIGV4aXN0aW5nIHJlY2lwZQorICAgICAgICAgdXBkYXRlLXJlY2lwZSAgICAgIEFwcGx5IGNoYW5nZXMgZnJvbSBleHRlcm5hbCBzb3VyY2UgdHJlZSB0byByZWNpcGUKKyAgICAgICAgIHN0YXR1cyAgICAgICAgICAgICBTaG93IHdvcmtzcGFjZSBzdGF0dXMKKyAgICAgICAgIGJ1aWxkICAgICAgICAgICAgICBCdWlsZCBhIHJlY2lwZQorICAgICAgICAgcmVzZXQgICAgICAgICAgICAgIFJlbW92ZSBhIHJlY2lwZSBmcm9tIHlvdXIgd29ya3NwYWNlCisKKyAgICAgVXNlIGRldnRvb2wgJmx0O3N1YmNvbW1hbmQmZ3Q7IC0taGVscCB0byBnZXQgaGVscCBvbiBhIHNwZWNpZmljIGNvbW1hbmQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGRpcmVjdGVkIGluIHRoZSBnZW5lcmFsIGhlbHAgb3V0cHV0LCB5b3UgY2FuIGdldCBtb3JlCisgICAgICAgICAgICAgICAgc3ludGF4IG9uIGEgc3BlY2lmaWMgY29tbWFuZCBieSBwcm92aWRpbmcgdGhlIGNvbW1hbmQKKyAgICAgICAgICAgICAgICBuYW1lIGFuZCB1c2luZyA8ZmlsZW5hbWU+LS1oZWxwPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgYWRkIC0taGVscAorICAgICB1c2FnZTogZGV2dG9vbCBhZGQgWy1oXSBbLS1zYW1lLWRpcl0gWy0tZmV0Y2ggVVJJXSBbLS12ZXJzaW9uIFZFUlNJT05dCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVuYW1lIHNyY3RyZWUKKworICAgICBBZGRzIGEgbmV3IHJlY2lwZQorCisgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgIHJlY2lwZW5hbWUgICAgICAgICAgICBOYW1lIGZvciBuZXcgcmVjaXBlIHRvIGFkZAorICAgICAgIHNyY3RyZWUgICAgICAgICAgICAgICBQYXRoIHRvIGV4dGVybmFsIHNvdXJjZSB0cmVlCisKKyAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgLS1zYW1lLWRpciwgLXMgICAgICAgIEJ1aWxkIGluIHNhbWUgZGlyZWN0b3J5IGFzIHNvdXJjZQorICAgICAgIC0tZmV0Y2ggVVJJLCAtZiBVUkkgICBGZXRjaCB0aGUgc3BlY2lmaWVkIFVSSSBhbmQgZXh0cmFjdCBpdCB0byBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSB0cmVlCisgICAgICAgLS12ZXJzaW9uIFZFUlNJT04sIC1WIFZFUlNJT04KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiB0byB1c2Ugd2l0aGluIHJlY2lwZSAoUFYpCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtYWRkaW5nLWEtbmV3LXJlY2lwZS10by10aGUtd29ya3NwYWNlJz4KKyAgICAgICAgICAgIDx0aXRsZT5BZGRpbmcgYSBOZXcgUmVjaXBlIHRvIHRoZSBXb3Jrc3BhY2UgTGF5ZXI8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gYWRkIGEgbmV3IHJlY2lwZQorICAgICAgICAgICAgICAgIHRvIHRoZSB3b3Jrc3BhY2UgbGF5ZXIuCisgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSB5b3UgYWRkIHNob3VsZCBub3QgZXhpc3QgLQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gY3JlYXRlcyBpdCBmb3IgeW91LgorICAgICAgICAgICAgICAgIFRoZSBzb3VyY2UgZmlsZXMgdGhlIHJlY2lwZSB1c2VzIHNob3VsZCBleGlzdCBpbiBhbiBleHRlcm5hbAorICAgICAgICAgICAgICAgIGFyZWEuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjcmVhdGVzIGFuZCBhZGRzIGEgbmV3IHJlY2lwZSBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5qYWNrc29uPC9maWxlbmFtZT4gdG8gdGhlIHdvcmtzcGFjZSBsYXllci4KKyAgICAgICAgICAgICAgICBUaGUgc291cmNlIGNvZGUgYnVpbHQgYnkgdGhlIHJlY2lwZXMgcmVzaWRlcyBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vaG9tZS9zY290dHJpZi9zb3VyY2VzL2phY2tzb248L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCBhZGQgamFja3NvbiAvaG9tZS9zY290dHJpZi9zb3VyY2VzL2phY2tzb24KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEZvciBjb21wbGV0ZSBzeW50YXgsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgYWRkIC0taGVscDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYWRkIGEgcmVjaXBlIGFuZCB0aGUgd29ya3NwYWNlIGxheWVyIGRvZXMgbm90IGV4aXN0LAorICAgICAgICAgICAgICAgIHRoZSBjb21tYW5kIGNyZWF0ZXMgdGhlIGxheWVyIGFuZCBwb3B1bGF0ZXMgaXQgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2J1aWxkLXdvcmtzcGFjZS1kaXJlY3RvcnkucG5nIgorICAgICAgICAgICAgICAgICAgICB3aWR0aD0iNmluIiBkZXB0aD0iNGluIiBhbGlnbj0iY2VudGVyIiBzY2FsZT0iMTAwIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJFQURNRSAtIFByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIHdoYXQgaXMgaW4gd29ya3NwYWNlIGxheWVyIGFuZCBob3cgdG8KKyAgICAgICAgICAgICAgbWFuYWdlIGl0LgorCisgICAgIGFwcGVuZHMgLSBBIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zICouYmJhcHBlbmQgZmlsZXMsIHdoaWNoIHBvaW50IHRvCisgICAgICAgICAgICAgICBleHRlcm5hbCBzb3VyY2UuCisKKyAgICAgY29uZiAtIEEgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgbGF5ZXIuY29uZiBmaWxlLgorCisgICAgIHJlY2lwZXMgLSBBIGRpcmVjdG9yeSBjb250YWluaW5nIHJlY2lwZXMuICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhCisgICAgICAgICAgICAgICBmb2xkZXIgZm9yIGVhY2ggZGlyZWN0b3J5IGFkZGVkIHdob3NlIG5hbWUgbWF0Y2hlcyB0aGF0IG9mIHRoZQorICAgICAgICAgICAgICAgYWRkZWQgcmVjaXBlLiAgZGV2dG9vbCBwbGFjZXMgdGhlIDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPi5iYiBmaWxlCisgICAgICAgICAgICAgICB3aXRoaW4gdGhhdCBzdWItZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUnVubmluZyA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiB3aGVuIHRoZQorICAgICAgICAgICAgICAgIHdvcmtzcGFjZSBsYXllciBleGlzdHMgY2F1c2VzIHRoZSB0b29sIHRvIGFkZCB0aGUgcmVjaXBlCisgICAgICAgICAgICAgICAgYW5kIGFwcGVuZCBmaWxlcyBpbnRvIHRoZSBleGlzdGluZyB3b3Jrc3BhY2UgbGF5ZXIuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGlzIGNyZWF0ZWQgdG8gcG9pbnQKKyAgICAgICAgICAgICAgICB0byB0aGUgZXh0ZXJuYWwgc291cmNlIHRyZWUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGV2dG9vbC1tb2RpZnlpbmctYS1yZWNpcGUnPgorICAgICAgICAgICAgPHRpdGxlPk1vZGlmeWluZyBhbiBFeGlzdGluZyBSZWNpcGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gYmVnaW4KKyAgICAgICAgICAgICAgICBtb2RpZnlpbmcgdGhlIHNvdXJjZSBvZiBhbiBleGlzdGluZyByZWNpcGUuCisgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGlzIHZlcnkgc2ltaWxhciB0byB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdkZXZ0b29sLWFkZGluZy1hLW5ldy1yZWNpcGUtdG8tdGhlLXdvcmtzcGFjZSc+PGZpbGVuYW1lPmFkZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgcGh5c2ljYWxseSBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlIGluIHRoZSB3b3Jrc3BhY2UgbGF5ZXIgYmVjYXVzZSB0aGUgcmVjaXBlIGFscmVhZHkKKyAgICAgICAgICAgICAgICBleGlzdHMgaW4gYW4gYW5vdGhlciBsYXllci4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+IGNvbW1hbmQgZXh0cmFjdHMgdGhlCisgICAgICAgICAgICAgICAgc291cmNlIGZvciBhIHJlY2lwZSwgc2V0cyBpdCB1cCBhcyBhIEdpdCByZXBvc2l0b3J5IGlmIHRoZQorICAgICAgICAgICAgICAgIHNvdXJjZSBoYWQgbm90IGFscmVhZHkgYmVlbiBmZXRjaGVkIGZyb20gR2l0LCBjaGVja3Mgb3V0IGEKKyAgICAgICAgICAgICAgICBicmFuY2ggZm9yIGRldmVsb3BtZW50LCBhbmQgYXBwbGllcyBhbnkgcGF0Y2hlcyBmcm9tIHRoZSByZWNpcGUKKyAgICAgICAgICAgICAgICBhcyBjb21taXRzIG9uIHRvcC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gY2hlY2tvdXQgdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgIGZpbGVzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIG1vZGlmeSAteCA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4mbmJzcDs8cmVwbGFjZWFibGU+cGF0aC10by1zb3VyY2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBVc2luZyB0aGUgYWJvdmUgY29tbWFuZCBmb3JtLCB0aGUgZGVmYXVsdCBkZXZlbG9wbWVudCBicmFuY2gKKyAgICAgICAgICAgICAgICB3b3VsZCBiZSAiZGV2dG9vbCIuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEZvciBjb21wbGV0ZSBzeW50YXgsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5IC0taGVscDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtdXBkYXRpbmctYS1yZWNpcGUnPgorICAgICAgICAgICAgPHRpdGxlPlVwZGF0aW5nIGEgUmVjaXBlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCB1cGRhdGUtcmVjaXBlPC9maWxlbmFtZT4gY29tbWFuZCB0bworICAgICAgICAgICAgICAgIHVwZGF0ZSB5b3VyIHJlY2lwZSB3aXRoIHBhdGNoZXMgdGhhdCByZWZsZWN0IGNoYW5nZXMgeW91IG1ha2UKKyAgICAgICAgICAgICAgICB0byB0aGUgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3Uga25vdyB5b3UgYXJlIGdvaW5nIHRvIHdvcmsgb24gc29tZQorICAgICAgICAgICAgICAgIGNvZGUsIHlvdSBjb3VsZCBmaXJzdCB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZGV2dG9vbC1tb2RpZnlpbmctYS1yZWNpcGUnPjxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gZXh0cmFjdCB0aGUgY29kZSBhbmQgc2V0IHVwIHRoZSB3b3Jrc3BhY2UuCisgICAgICAgICAgICAgICAgQWZ0ZXIgd2hpY2gsIHlvdSBjb3VsZCBtb2RpZnksIGNvbXBpbGUsIGFuZCB0ZXN0IHRoZSBjb2RlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggdGhlIHJlc3VsdHMgYW5kIHlvdSBoYXZlIGNvbW1pdHRlZAorICAgICAgICAgICAgICAgIHlvdXIgY2hhbmdlcyB0byB0aGUgR2l0IHJlcG9zaXRvcnksIHlvdSBjYW4gdGhlbgorICAgICAgICAgICAgICAgIHJ1biB0aGUgPGZpbGVuYW1lPmRldnRvb2wgdXBkYXRlLXJlY2lwZTwvZmlsZW5hbWU+IHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgICAgICBwYXRjaGVzIGFuZCB1cGRhdGUgdGhlIHJlY2lwZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCB1cGRhdGUtcmVjaXBlIDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB5b3UgcnVuIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCB1cGRhdGUtcmVjaXBlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB3aXRob3V0IGNvbW1pdHRpbmcgeW91ciBjaGFuZ2VzLCB0aGUgY29tbWFuZCBpZ25vcmVzIHRoZQorICAgICAgICAgICAgICAgIGNoYW5nZXMuCisgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgIE9mdGVuLCB5b3UgbWlnaHQgd2FudCB0byBhcHBseSBjdXN0b21pemF0aW9ucyBtYWRlIHRvIHlvdXIKKyAgICAgICAgICAgICAgICAgc29mdHdhcmUgaW4geW91ciBvd24gbGF5ZXIgcmF0aGVyIHRoYW4gYXBwbHkgdGhlbSB0byB0aGUKKyAgICAgICAgICAgICAgICAgb3JpZ2luYWwgcmVjaXBlLgorICAgICAgICAgICAgICAgICBJZiBzbywgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tYTwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT4tLWFwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgIG9wdGlvbiB3aXRoIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCB1cGRhdGUtcmVjaXBlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgVGhlc2Ugb3B0aW9ucyBhbGxvdyB5b3UgdG8gc3BlY2lmeSB0aGUgbGF5ZXIgaW50byB3aGljaCB0bworICAgICAgICAgICAgICAgICB3cml0ZSBhbiBhcHBlbmQgZmlsZToKKyAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgdXBkYXRlLXJlY2lwZSA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4gLWEgPHJlcGxhY2VhYmxlPmJhc2UtbGF5ZXItZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPiouYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGlzIGNyZWF0ZWQgYXQgdGhlCisgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlIHBhdGggd2l0aGluIHRoZSBzcGVjaWZpZWQgbGF5ZXIgZGlyZWN0b3J5LCB3aGljaAorICAgICAgICAgICAgICAgICBtYXkgb3IgbWF5IG5vdCBiZSBpbiB5b3VyIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICAgSWYgYW4gYXBwZW5kIGZpbGUgYWxyZWFkeSBleGlzdHMsIHRoZSBjb21tYW5kIHVwZGF0ZXMgaXQKKyAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGNvbXBsZXRlIHN5bnRheCwgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC0taGVscDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtcmVzZXR0aW5nLWEtcmVjaXBlJz4KKyAgICAgICAgICAgIDx0aXRsZT5SZXNldHRpbmcgYSBSZWNpcGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHJlc2V0PC9maWxlbmFtZT4gY29tbWFuZCB0byByZW1vdmUgYQorICAgICAgICAgICAgICAgIHJlY2lwZSBhbmQgaXRzIGNvbmZpZ3VyYXRpb24gKGUuZy4gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSkgZnJvbSB0aGUgd29ya3NwYWNlIGxheWVyLgorICAgICAgICAgICAgICAgIFJlYWxpemUgdGhhdCB0aGlzIGNvbW1hbmQgZGVsZXRlcyB0aGUgcmVjaXBlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZS4KKyAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCBkb2VzIG5vdCBwaHlzaWNhbGx5IG1vdmUgdGhlbSBmb3IgeW91LgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG11c3QgYmUgc3VyZSB0byBwaHlzaWNhbGx5IHJlbG9jYXRlIHlvdXIKKyAgICAgICAgICAgICAgICB1cGRhdGVkIHJlY2lwZSBhbmQgdGhlIGFwcGVuZCBmaWxlIG91dHNpZGUgb2YgdGhlIHdvcmtzcGFjZQorICAgICAgICAgICAgICAgIGxheWVyIGJlZm9yZSBydW5uaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCByZXNldDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tbWFuZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHJlc2V0PC9maWxlbmFtZT4gY29tbWFuZCBkZXRlY3RzIHRoYXQKKyAgICAgICAgICAgICAgICB0aGUgcmVjaXBlIG9yIHRoZSBhcHBlbmQgZmlsZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLCB0aGUKKyAgICAgICAgICAgICAgICBjb21tYW5kIHByZXNlcnZlcyB0aGUgbW9kaWZpZWQgZmlsZXMgaW4gYSBzZXBhcmF0ZSAiYXR0aWMiCisgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IHVuZGVyIHRoZSB3b3Jrc3BhY2UgbGF5ZXIuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEZvciBjb21wbGV0ZSBzeW50YXgsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgcmVzZXQgLS1oZWxwPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGV2dG9vbC1idWlsZGluZy15b3VyLXNvZnR3YXJlJz4KKyAgICAgICAgICAgIDx0aXRsZT5CdWlsZGluZyBZb3VyIFNvZnR3YXJlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZDwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gY2F1c2UgdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBidWlsZCB5b3VyIHNvZnR3YXJlIGJhc2VkCisgICAgICAgICAgICAgICAgb24gdGhlIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZDwvZmlsZW5hbWU+IGNvbW1hbmQgaXMgZXF1aXZhbGVudCB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1jIHBvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgYnVpbGQgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBGb3IgY29tcGxldGUgc3ludGF4LCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIHVwZGF0ZS1yZWNpcGUgLS1oZWxwPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgQnVpbGRpbmcgeW91ciBzb2Z0d2FyZSB1c2luZyA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaXMgaWRlbnRpY2FsIHRvIHVzaW5nIEJpdEJha2UgdG8gYnVpbGQgdGhlIHNvZnR3YXJlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtZGVwbG95aW5nLXlvdXItc29mdHdhcmUtb24tdGhlLXRhcmdldC1tYWNoaW5lJz4KKyAgICAgICAgICAgIDx0aXRsZT5EZXBsb3lpbmcgWW91ciBTb2Z0d2FyZSBvbiB0aGUgVGFyZ2V0IE1hY2hpbmU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGRlcGxveS10YXJnZXQ8L2ZpbGVuYW1lPiBjb21tYW5kIHRvCisgICAgICAgICAgICAgICAgZGVwbG95IHRoZSByZWNpcGUncyBidWlsZCBvdXRwdXQgdG8gdGhlIGxpdmUgdGFyZ2V0IG1hY2hpbmU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgZGVwbG95LXRhcmdldCA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4mbmJzcDs8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBpcyB0aGUgYWRkcmVzcyBvZiB0aGUKKyAgICAgICAgICAgICAgICB0YXJnZXQgbWFjaGluZSwgd2hpY2ggbXVzdCBiZSBydW5uaW5nIGFuIFNTSCBzZXJ2ZXIgKGkuZS4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXNlckBob3N0bmFtZVs6ZGVzdGRpcl08L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBkZXBsb3lzIGFsbCBmaWxlcyBpbnN0YWxsZWQgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0YXNrLgorICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB5b3UgZG8gbm90IG5lZWQgdG8gaGF2ZSBwYWNrYWdlIG1hbmFnZW1lbnQgZW5hYmxlZAorICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgdGFyZ2V0IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgSWYgeW91IGRvLCB0aGUgcGFja2FnZSBtYW5hZ2VyIGlzIGJ5cGFzc2VkLgorICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgaXMgZm9yIGRldmVsb3BtZW50IG9ubHkuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIG5ldmVyIHVzZSBpdCB0byB1cGRhdGUgYW4gaW1hZ2UgdGhhdCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGluIHByb2R1Y3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBjb21wbGV0ZSBzeW50YXgsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIGRlcGxveS10YXJnZXQgLS1oZWxwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGV2dG9vbC1yZW1vdmluZy15b3VyLXNvZnR3YXJlLWZyb20tdGhlLXRhcmdldC1tYWNoaW5lJz4KKyAgICAgICAgICAgIDx0aXRsZT5SZW1vdmluZyBZb3VyIFNvZnR3YXJlIGZyb20gdGhlIFRhcmdldCBNYWNoaW5lPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCB1bmRlcGxveS10YXJnZXQ8L2ZpbGVuYW1lPiBjb21tYW5kIHRvCisgICAgICAgICAgICAgICAgcmVtb3ZlIGRlcGxveWVkIGJ1aWxkIG91dHB1dCBmcm9tIHRoZSB0YXJnZXQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICBGb3IgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHVuZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KKyAgICAgICAgICAgICAgICB3b3JrLCB5b3UgbXVzdCBoYXZlIHByZXZpb3VzbHkgdXNlZCB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdkZXZ0b29sLWRlcGxveWluZy15b3VyLXNvZnR3YXJlLW9uLXRoZS10YXJnZXQtbWFjaGluZSc+PGZpbGVuYW1lPmRldnRvb2wgZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgdW5kZXBsb3ktdGFyZ2V0IDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPiZuYnNwOzxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IGlzIHRoZSBhZGRyZXNzIG9mIHRoZQorICAgICAgICAgICAgICAgIHRhcmdldCBtYWNoaW5lLCB3aGljaCBtdXN0IGJlIHJ1bm5pbmcgYW4gU1NIIHNlcnZlciAoaS5lLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51c2VyQGhvc3RuYW1lPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBGb3IgY29tcGxldGUgc3ludGF4LCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIHVuZGVwbG95LXRhcmdldCAtLWhlbHA8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLWNyZWF0aW5nLXRoZS13b3Jrc3BhY2UnPgorICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIHRoZSBXb3Jrc3BhY2UgTGF5ZXIgaW4gYW4gQWx0ZXJuYXRpdmUgTG9jYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGNyZWF0ZS13b3Jrc3BhY2U8L2ZpbGVuYW1lPiBjb21tYW5kIHRvCisgICAgICAgICAgICAgICAgY3JlYXRlIGEgbmV3IHdvcmtzcGFjZSBsYXllciBpbiB5b3VyCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgIFdoZW4geW91IGNyZWF0ZSBhIG5ldyB3b3Jrc3BhY2UgbGF5ZXIsIGl0IGlzIHBvcHVsYXRlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvbmx5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgY3JlYXRlcyBhIG5ldyB3b3Jrc3BhY2UgbGF5ZXIgaW4geW91cgorICAgICAgICAgICAgICAgIGN1cnJlbnQgd29ya2luZyBhbmQgYnkgZGVmYXVsdCBuYW1lcyB0aGUgd29ya3NwYWNlIGxheWVyCisgICAgICAgICAgICAgICAgIndvcmtzcGFjZSI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgY3JlYXRlLXdvcmtzcGFjZQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGNvbXBsZXRlIHN5bnRheCwgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBjcmVhdGUtd29ya3NwYWNlIC0taGVscDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGNyZWF0ZSBhIHdvcmtzcGFjZSBsYXllciBhbnl3aGVyZSBieSBzdXBwbHlpbmcKKyAgICAgICAgICAgICAgICBhIHBhdGhuYW1lIHdpdGggdGhlIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIGNyZWF0ZXMgYSBuZXcgd29ya3NwYWNlIGxheWVyIG5hbWVkCisgICAgICAgICAgICAgICAgIm5ldy13b3Jrc3BhY2UiOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGNyZWF0ZS13b3Jrc3BhY2UgL2hvbWUvc2NvdHRyaWYvbmV3LXdvcmtzcGFjZQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJ1c2luZy1hLXF1aWx0LXdvcmtmbG93Ij4KKyAgICAgICAgPHRpdGxlPlVzaW5nIFF1aWx0IGluIFlvdXIgV29ya2Zsb3c8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvcHJvamVjdHMvcXVpbHQnPlF1aWx0PC91bGluaz4KKyAgICAgICAgICAgIGlzIGEgcG93ZXJmdWwgdG9vbCB0aGF0IGFsbG93cyB5b3UgdG8gY2FwdHVyZSBzb3VyY2UgY29kZSBjaGFuZ2VzCisgICAgICAgICAgICB3aXRob3V0IGhhdmluZyBhIGNsZWFuIHNvdXJjZSB0cmVlLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIG91dGxpbmVzIHRoZSB0eXBpY2FsIHdvcmtmbG93IHlvdSBjYW4gdXNlIHRvIG1vZGlmeQorICAgICAgICAgICAgc291cmNlIGNvZGUsIHRlc3QgY2hhbmdlcywgYW5kIHRoZW4gcHJlc2VydmUgdGhlIGNoYW5nZXMgaW4gdGhlCisgICAgICAgICAgICBmb3JtIG9mIGEgcGF0Y2ggYWxsIHVzaW5nIFF1aWx0LgorICAgICAgICAgICAgPG5vdGU+PHRpdGxlPlRpcDwvdGl0bGU+CisgICAgICAgICAgICAgICAgV2l0aCByZWdhcmQgdG8gcHJlc2VydmluZyBjaGFuZ2VzIHRvIHNvdXJjZSBmaWxlcyBpZiB5b3UKKyAgICAgICAgICAgICAgICBjbGVhbiBhIHJlY2lwZSBvciBoYXZlIDxmaWxlbmFtZT5ybV93b3JrPC9maWxlbmFtZT4gZW5hYmxlZCwKKyAgICAgICAgICAgICAgICB0aGUgd29ya2Zsb3cgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1kZXZ0b29sLWluLXlvdXItd29ya2Zsb3cnPlVzaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gaW4gWW91ciBXb3JrZmxvdzwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpcyBhIHNhZmVyIGRldmVsb3BtZW50IGZsb3cgdGhhbiB0aGFuIHRoZSBmbG93IHRoYXQKKyAgICAgICAgICAgICAgICB1c2VzIFF1aWx0LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3cgdGhlc2UgZ2VuZXJhbCBzdGVwczoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkZpbmQgdGhlIFNvdXJjZSBDb2RlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRlbXBvcmFyeSBzb3VyY2UgY29kZSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIGlzIGtlcHQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZmluZGluZy10aGUtdGVtcG9yYXJ5LXNvdXJjZS1jb2RlJz5GaW5kaW5nIFRlbXBvcmFyeSBTb3VyY2UgQ29kZTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gdG8gbGVhcm4gaG93IHRvIGxvY2F0ZSB0aGUgZGlyZWN0b3J5IHRoYXQgaGFzIHRoZQorICAgICAgICAgICAgICAgICAgICB0ZW1wb3Jhcnkgc291cmNlIGNvZGUgZm9yIGEgcGFydGljdWxhciBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNoYW5nZSBZb3VyIFdvcmtpbmcgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGJlIGluIHRoZSBkaXJlY3RvcnkgdGhhdCBoYXMgdGhlIHRlbXBvcmFyeSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgVGhhdCBkaXJlY3RvcnkgaXMgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSBhIE5ldyBQYXRjaDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBCZWZvcmUgbW9kaWZ5aW5nIHNvdXJjZSBjb2RlLCB5b3UgbmVlZCB0byBjcmVhdGUgYSBuZXcgcGF0Y2guCisgICAgICAgICAgICAgICAgICAgIFRvIGNyZWF0ZSBhIG5ldyBwYXRjaCBmaWxlLCB1c2UgPGZpbGVuYW1lPnF1aWx0IG5ldzwvZmlsZW5hbWU+IGFzIGJlbG93OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcXVpbHQgbmV3IG15X2NoYW5nZXMucGF0Y2gKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Tm90aWZ5IFF1aWx0IGFuZCBBZGQgRmlsZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgY3JlYXRpbmcgdGhlIHBhdGNoLCB5b3UgbmVlZCB0byBub3RpZnkgUXVpbHQgYWJvdXQgdGhlIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIHlvdSBwbGFuIHRvIGVkaXQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBub3RpZnkgUXVpbHQgYnkgYWRkaW5nIHRoZSBmaWxlcyB0byB0aGUgcGF0Y2ggeW91IGp1c3QgY3JlYXRlZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHF1aWx0IGFkZCBmaWxlMS5jIGZpbGUyLmMgZmlsZTMuYworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RWRpdCB0aGUgRmlsZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTWFrZSB5b3VyIGNoYW5nZXMgaW4gdGhlIHNvdXJjZSBjb2RlIHRvIHRoZSBmaWxlcyB5b3UgYWRkZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHBhdGNoLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRlc3QgWW91ciBDaGFuZ2VzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgbW9kaWZpZWQgdGhlIHNvdXJjZSBjb2RlLCB0aGUgZWFzaWVzdCB3YXkgdG8KKyAgICAgICAgICAgICAgICAgICAgeW91ciBjaGFuZ2VzIGlzIGJ5IGNhbGxpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4gdGFzayBhcyBzaG93biBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1jIGNvbXBpbGUgLWYgPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+LWY8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+LS1mb3JjZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbiBmb3JjZXMgdGhlIHNwZWNpZmllZCB0YXNrIHRvIGV4ZWN1dGUuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBmaW5kIHByb2JsZW1zIHdpdGggeW91ciBjb2RlLCB5b3UgY2FuIGp1c3Qga2VlcCBlZGl0aW5nIGFuZAorICAgICAgICAgICAgICAgICAgICByZS10ZXN0aW5nIGl0ZXJhdGl2ZWx5IHVudGlsIHRoaW5ncyB3b3JrIGFzIGV4cGVjdGVkLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT5BbGwgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1ha2UgdG8gdGhlIHRlbXBvcmFyeSBzb3VyY2UgY29kZQorICAgICAgICAgICAgICAgICAgICBkaXNhcHBlYXIgb25jZSB5b3UgcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY2xlYW4nPjxmaWxlbmFtZT5kb19jbGVhbjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNsZWFuYWxsJz48ZmlsZW5hbWU+ZG9fY2xlYW5hbGw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2tzIHVzaW5nIEJpdEJha2UgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgLWMgY2xlYW4gPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSAtYyBjbGVhbmFsbCA8cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBNb2RpZmljYXRpb25zIHdpbGwgYWxzbyBkaXNhcHBlYXIgaWYgeW91IHVzZSB0aGUgPGZpbGVuYW1lPnJtX3dvcms8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmZWF0dXJlIGFzIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcXMtYnVpbGRpbmctaW1hZ2VzJz5CdWlsZGluZyBJbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2VuZXJhdGUgdGhlIFBhdGNoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91ciBjaGFuZ2VzIHdvcmsgYXMgZXhwZWN0ZWQsIHlvdSBuZWVkIHRvIHVzZSBRdWlsdCB0byBnZW5lcmF0ZSB0aGUgZmluYWwgcGF0Y2ggdGhhdAorICAgICAgICAgICAgICAgICAgICBjb250YWlucyBhbGwgeW91ciBtb2RpZmljYXRpb25zLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcXVpbHQgcmVmcmVzaAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHRoZSA8ZmlsZW5hbWU+bXlfY2hhbmdlcy5wYXRjaDwvZmlsZW5hbWU+IGZpbGUgaGFzIGFsbCB5b3VyIGVkaXRzIG1hZGUKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIDxmaWxlbmFtZT5maWxlMS5jPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5maWxlMi5jPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZTMuYzwvZmlsZW5hbWU+IGZpbGVzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBmaW5kIHRoZSByZXN1bHRpbmcgcGF0Y2ggZmlsZSBpbiB0aGUgPGZpbGVuYW1lPnBhdGNoZXMvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgKDxmaWxlbmFtZT5TPC9maWxlbmFtZT4pIGRpcmVjdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvcHkgdGhlIFBhdGNoIEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHNpbXBsaWNpdHksIGNvcHkgdGhlIHBhdGNoIGZpbGUgaW50byBhIGRpcmVjdG9yeSBuYW1lZCA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggeW91IGNhbiBjcmVhdGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgdGhlIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KSBmaWxlIG9yIHRoZQorICAgICAgICAgICAgICAgICAgICBhcHBlbmQgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgUGxhY2luZyB0aGUgcGF0Y2ggaGVyZSBndWFyYW50ZWVzIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2lsbCBmaW5kCisgICAgICAgICAgICAgICAgICAgIHRoZSBwYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgTmV4dCwgYWRkIHRoZSBwYXRjaCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPlNSQ19VUkk8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJICs9ICJmaWxlOi8vbXlfY2hhbmdlcy5wYXRjaCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdmaW5kaW5nLXRoZS10ZW1wb3Jhcnktc291cmNlLWNvZGUnPgorICAgICAgICA8dGl0bGU+RmluZGluZyBUZW1wb3JhcnkgU291cmNlIENvZGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IG1pZ2h0IGZpbmQgaXQgaGVscGZ1bCBkdXJpbmcgZGV2ZWxvcG1lbnQgdG8gbW9kaWZ5IHRoZQorICAgICAgICAgICAgdGVtcG9yYXJ5IHNvdXJjZSBjb2RlIHVzZWQgYnkgcmVjaXBlcyB0byBidWlsZCBwYWNrYWdlcy4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBhcmUgZGV2ZWxvcGluZyBhIHBhdGNoIGFuZCB5b3UgbmVlZCB0bworICAgICAgICAgICAgZXhwZXJpbWVudCBhIGJpdCB0byBmaWd1cmUgb3V0IHlvdXIgc29sdXRpb24uCisgICAgICAgICAgICBBZnRlciB5b3UgaGF2ZSBpbml0aWFsbHkgYnVpbHQgdGhlIHBhY2thZ2UsIHlvdSBjYW4gaXRlcmF0aXZlbHkKKyAgICAgICAgICAgIHR3ZWFrIHRoZSBzb3VyY2UgY29kZSwgd2hpY2ggaXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiwgYW5kIHRoZW4KKyAgICAgICAgICAgIHlvdSBjYW4gZm9yY2UgYSByZS1jb21waWxlIGFuZCBxdWlja2x5IHRlc3QgeW91ciBhbHRlcmVkIGNvZGUuCisgICAgICAgICAgICBPbmNlIHlvdSBzZXR0bGUgb24gYSBzb2x1dGlvbiwgeW91IGNhbiB0aGVuIHByZXNlcnZlIHlvdXIgY2hhbmdlcworICAgICAgICAgICAgaW4gdGhlIGZvcm0gb2YgcGF0Y2hlcy4KKyAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgUXVpbHQgZm9yIGRldmVsb3BtZW50LCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctYS1xdWlsdC13b3JrZmxvdyc+VXNpbmcgUXVpbHQgaW4gWW91ciBXb3JrZmxvdzwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEdXJpbmcgYSBidWlsZCwgdGhlIHVucGFja2VkIHRlbXBvcmFyeSBzb3VyY2UgY29kZSB1c2VkIGJ5IHJlY2lwZXMKKyAgICAgICAgICAgIHRvIGJ1aWxkIHBhY2thZ2VzIGlzIGF2YWlsYWJsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IGFzCisgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TJz5TPC91bGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgIEJlbG93IGlzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgPGZpbGVuYW1lPlM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcyBkZWZpbmVkIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUyA9ICIke1dPUktESVJ9LyR7QlB9IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgWW91IHNob3VsZCBiZSBhd2FyZSB0aGF0IG1hbnkgcmVjaXBlcyBvdmVycmlkZSB0aGUgPGZpbGVuYW1lPlM8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCByZWNpcGVzIHRoYXQgZmV0Y2ggdGhlaXIgc291cmNlIGZyb20gR2l0IHVzdWFsbHkgc2V0CisgICAgICAgICAgICA8ZmlsZW5hbWU+UzwvZmlsZW5hbWU+IHRvIDxmaWxlbmFtZT4ke1dPUktESVJ9L2dpdDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJQJz48ZmlsZW5hbWU+QlA8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgcmVwcmVzZW50cyB0aGUgYmFzZSByZWNpcGUgbmFtZSwgd2hpY2ggY29uc2lzdHMgb2YgdGhlIG5hbWUgYW5kIHZlcnNpb246CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCUCA9ICIke0JQTn0tJHtQVn0iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgcGF0aCB0byB0aGUgd29yayBkaXJlY3RvcnkgZm9yIHRoZSByZWNpcGUKKyAgICAgICAgICAgICg8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvdWxpbms+KQorICAgICAgICAgICAgaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAke1RNUERJUn0vd29yay8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfS8ke1BOfS8ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgYWN0dWFsIGRpcmVjdG9yeSBkZXBlbmRzIG9uIHNldmVyYWwgdGhpbmdzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIFRoZSB0b3AtbGV2ZWwgYnVpbGQgb3V0cHV0IGRpcmVjdG9yeTwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NVUxUSU1BQ0hfVEFSR0VUX1NZUyc+PGZpbGVuYW1lPk1VTFRJTUFDSF9UQVJHRVRfU1lTPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIHRhcmdldCBzeXN0ZW0gaWRlbnRpZmllcjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSBuYW1lPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVEVORFBFJz48ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICBUaGUgZXBvY2ggLSAoaWYKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBFJz48ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBzcGVjaWZpZWQsIHdoaWNoIGlzIHVzdWFsbHkgdGhlIGNhc2UgZm9yIG1vc3QKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcywgdGhlbiA8ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPiBpcyBibGFuayk8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgdmVyc2lvbjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSByZXZpc2lvbjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgYXNzdW1lIGEgU291cmNlIERpcmVjdG9yeSB0b3AtbGV2ZWwgZm9sZGVyCisgICAgICAgICAgICBuYW1lZCA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+LCBhIGRlZmF1bHQgQnVpbGQgRGlyZWN0b3J5IGF0CisgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS9idWlsZDwvZmlsZW5hbWU+LCBhbmQgYQorICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODYtcG9reS1saW51eDwvZmlsZW5hbWU+IG1hY2hpbmUgdGFyZ2V0CisgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICBGdXJ0aGVybW9yZSwgc3VwcG9zZSB5b3VyIHJlY2lwZSBpcyBuYW1lZAorICAgICAgICAgICAgPGZpbGVuYW1lPmZvb18xLjMuMC5iYjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgd29yayBkaXJlY3RvcnkgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzIHRvCisgICAgICAgICAgICBidWlsZCB0aGUgcGFja2FnZSB3b3VsZCBiZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwb2t5L2J1aWxkL3RtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9mb28vMS4zLjAtcjAKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTm93IHRoYXQgeW91IGtub3cgd2hlcmUgdG8gbG9jYXRlIHRoZSBkaXJlY3RvcnkgdGhhdCBoYXMgdGhlCisgICAgICAgICAgICB0ZW1wb3Jhcnkgc291cmNlIGNvZGUsIHlvdSBjYW4gdXNlIGEgUXVpbHQgYXMgZGVzY3JpYmVkIGluIHNlY3Rpb24KKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1hLXF1aWx0LXdvcmtmbG93Jz5Vc2luZyBRdWlsdCBpbiBZb3VyIFdvcmtmbG93PC9saW5rPiIKKyAgICAgICAgICAgIHRvIG1ha2UgeW91ciBlZGl0cywgdGVzdCB0aGUgY2hhbmdlcywgYW5kIHByZXNlcnZlIHRoZSBjaGFuZ2VzIGluCisgICAgICAgICAgICB0aGUgZm9ybSBvZiBwYXRjaGVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0naW1hZ2UtZGV2ZWxvcG1lbnQtdXNpbmctdG9hc3Rlcic+CisgICAgPHRpdGxlPkltYWdlIERldmVsb3BtZW50IFVzaW5nIFRvYXN0ZXI8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvYXN0ZXIgaXMgYSB3ZWIgaW50ZXJmYWNlIHRvIHRoZSBZb2N0byBQcm9qZWN0J3MgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgIHN5c3RlbS4KKyAgICAgICAgWW91IGNhbiBpbml0aWF0ZSBidWlsZHMgdXNpbmcgVG9hc3RlciBhcyB3ZWxsIGFzIGV4YW1pbmUgdGhlIHJlc3VsdHMKKyAgICAgICAgYW5kIHN0YXRpc3RpY3Mgb2YgYnVpbGRzLgorICAgICAgICBTZWUgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1RPQVNUX1VSTDsjdG9hc3Rlci1tYW51YWwtaW50cm8nPlRvYXN0ZXIgVXNlciBNYW51YWw8L3VsaW5rPgorICAgICAgICBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHNldCB1cCBhbmQgdXNlIFRvYXN0ZXIgdG8gYnVpbGQgaW1hZ2VzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2ltYWdlLWRldmVsb3BtZW50LXVzaW5nLWhvYic+CisgICAgPHRpdGxlPkltYWdlIERldmVsb3BtZW50IFVzaW5nIEhvYjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2hvYic+SG9iPC91bGluaz4gaXMgYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZm9yIHRoZQorICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLCB3aGljaCBpcyBiYXNlZCBvbiBCaXRCYWtlLgorICAgICAgICBZb3UgY2FuIHVzZSB0aGUgSG9iIHRvIGJ1aWxkIGN1c3RvbSBvcGVyYXRpbmcgc3lzdGVtIGltYWdlcyB3aXRoaW4gdGhlIFlvY3RvIFByb2plY3QgYnVpbGQgZW52aXJvbm1lbnQuCisgICAgICAgIEhvYiBzaW1wbHkgcHJvdmlkZXMgYSBmcmllbmRseSBpbnRlcmZhY2Ugb3ZlciB0aGUgYnVpbGQgc3lzdGVtIHVzZWQgZHVyaW5nIGRldmVsb3BtZW50LgorICAgICAgICBJbiBvdGhlciB3b3JkcywgYnVpbGRpbmcgaW1hZ2VzIHdpdGggdGhlIEhvYiBsZXRzIHlvdSB0YWtlIGNhcmUgb2YgY29tbW9uIGJ1aWxkIHRhc2tzIG1vcmUgZWFzaWx5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBIb2IsIHNlZSB0aGUgcHJvamVjdCBwYWdlIGF0CisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2hvYic+PC91bGluaz4KKyAgICAgICAgb24gdGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZS4KKyAgICAgICAgSWYgeW91IGZvbGxvdyB0aGUgIkRvY3VtZW50YXRpb24iIGxpbmsgZnJvbSB0aGUgSG9iIHBhZ2UsIHlvdSB3aWxsCisgICAgICAgIGZpbmQgYSBzaG9ydCBpbnRyb2R1Y3RvcnkgdHJhaW5pbmcgdmlkZW8gb24gSG9iLgorICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3RzIHNvbWUgZmVhdHVyZXMgb2YgSG9iOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gc2V0dXAgYW5kIHJ1biBIb2IgdXNpbmcgdGhlc2UgY29tbWFuZHM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52CisgICAgICQgaG9iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiBzZXQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGZvciB3aGljaCB5b3UgYXJlIGJ1aWxkaW5nIHRoZSBpbWFnZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3UgY2FuIG1vZGlmeSB2YXJpb3VzIHBvbGljeSBzZXR0aW5ncyBzdWNoIGFzIHRoZQorICAgICAgICAgICAgICAgIHBhY2thZ2UgZm9ybWF0IHdpdGggd2hpY2ggdG8gYnVpbGQsCisgICAgICAgICAgICAgICAgdGhlIHBhcmFsbGVsaXNtIEJpdEJha2UgdXNlcywgd2hldGhlciBvciBub3QgdG8gYnVpbGQgYW4KKyAgICAgICAgICAgICAgICBleHRlcm5hbCB0b29sY2hhaW4sIGFuZCB3aGljaCBob3N0IHRvIGJ1aWxkIGFnYWluc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiBtYW5hZ2UKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPmxheWVyczwvbGluaz4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiBzZWxlY3QgYSBiYXNlIGltYWdlIGFuZCB0aGVuIGFkZCBleHRyYSBwYWNrYWdlcyBmb3IgeW91ciBjdXN0b20gYnVpbGQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiBsYXVuY2ggYW5kIG1vbml0b3IgdGhlIGJ1aWxkIGZyb20gd2l0aGluIEhvYi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0icGxhdGRldi1hcHBkZXYtZGV2c2hlbGwiPgorICAgIDx0aXRsZT5Vc2luZyBhIERldmVsb3BtZW50IFNoZWxsPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGVuIGRlYnVnZ2luZyBjZXJ0YWluIGNvbW1hbmRzIG9yIGV2ZW4gd2hlbiBqdXN0IGVkaXRpbmcgcGFja2FnZXMsCisgICAgICAgIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+IGNhbiBiZSBhIHVzZWZ1bCB0b29sLgorICAgICAgICBXaGVuIHlvdSBpbnZva2UgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4sIHNvdXJjZSBmaWxlcyBhcmUKKyAgICAgICAgZXh0cmFjdGVkIGludG8geW91ciB3b3JraW5nIGRpcmVjdG9yeSBhbmQgcGF0Y2hlcyBhcmUgYXBwbGllZC4KKyAgICAgICAgVGhlbiwgYSBuZXcgdGVybWluYWwgaXMgb3BlbmVkIGFuZCB5b3UgYXJlIHBsYWNlZCBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkuCisgICAgICAgIEluIHRoZSBuZXcgdGVybWluYWwsIGFsbCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkLXJlbGF0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZQorICAgICAgICBzdGlsbCBkZWZpbmVkIHNvIHlvdSBjYW4gdXNlIGNvbW1hbmRzIHN1Y2ggYXMgPGZpbGVuYW1lPmNvbmZpZ3VyZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+LgorICAgICAgICBUaGUgY29tbWFuZHMgZXhlY3V0ZSBqdXN0IGFzIGlmIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdlcmUgZXhlY3V0aW5nIHRoZW0uCisgICAgICAgIENvbnNlcXVlbnRseSwgd29ya2luZyB0aGlzIHdheSBjYW4gYmUgaGVscGZ1bCB3aGVuIGRlYnVnZ2luZyBhIGJ1aWxkIG9yIHByZXBhcmluZworICAgICAgICBzb2Z0d2FyZSB0byBiZSB1c2VkIHdpdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHRoYXQgdXNlcyA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPiBvbiBhIHRhcmdldCBuYW1lZAorICAgICAgICA8ZmlsZW5hbWU+bWF0Y2hib3gtZGVza3RvcDwvZmlsZW5hbWU+OgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBtYXRjaGJveC1kZXNrdG9wIC1jIGRldnNoZWxsCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjb21tYW5kIHNwYXducyBhIHRlcm1pbmFsIHdpdGggYSBzaGVsbCBwcm9tcHQgd2l0aGluIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgZW52aXJvbm1lbnQuCisgICAgICAgIFRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItT0VfVEVSTUlOQUwnPjxmaWxlbmFtZT5PRV9URVJNSU5BTDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgdmFyaWFibGUgY29udHJvbHMgd2hhdCB0eXBlIG9mIHNoZWxsIGlzIG9wZW5lZC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIHNwYXduZWQgdGVybWluYWxzLCB0aGUgZm9sbG93aW5nIG9jY3VyczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbmNsdWRlcyB0aGUKKyAgICAgICAgICAgICAgICBjcm9zcy10b29sY2hhaW4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDxmaWxlbmFtZT5wa2djb25maWc8L2ZpbGVuYW1lPiB2YXJpYWJsZXMgZmluZCB0aGUgY29ycmVjdAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ucGM8L2ZpbGVuYW1lPiBmaWxlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDxmaWxlbmFtZT5jb25maWd1cmU8L2ZpbGVuYW1lPiBjb21tYW5kIGZpbmRzIHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3Qgc2l0ZSBmaWxlcyBhcyB3ZWxsIGFzIGFueSBvdGhlciBuZWNlc3NhcnkgZmlsZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaXRoaW4gdGhpcyBlbnZpcm9ubWVudCwgeW91IGNhbiBydW4gY29uZmlndXJlIG9yIGNvbXBpbGUKKyAgICAgICAgY29tbWFuZHMgYXMgaWYgdGhleSB3ZXJlIGJlaW5nIHJ1biBieQorICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpdHNlbGYuCisgICAgICAgIEFzIG5vdGVkIGVhcmxpZXIsIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbHNvIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyB0byB0aGUKKyAgICAgICAgU291cmNlIERpcmVjdG9yeSAoPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L3VsaW5rPikuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoZW4geW91IGFyZSBmaW5pc2hlZCwgeW91IGp1c3QgZXhpdCB0aGUgc2hlbGwgb3IgY2xvc2UgdGhlIHRlcm1pbmFsIHdpbmRvdy4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJdCBpcyB3b3J0aCByZW1lbWJlcmluZyB0aGF0IHdoZW4gdXNpbmcgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHlvdSBuZWVkIHRvIHVzZSB0aGUgZnVsbCBjb21waWxlciBuYW1lIHN1Y2ggYXMgPGZpbGVuYW1lPmFybS1wb2t5LWxpbnV4LWdudWVhYmktZ2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGluc3RlYWQgb2YganVzdCB1c2luZyA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGUgc2FtZSBhcHBsaWVzIHRvIG90aGVyIGFwcGxpY2F0aW9ucyBzdWNoIGFzIDxmaWxlbmFtZT5iaW51dGlsczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPmxpYnRvb2w8L2ZpbGVuYW1lPiBhbmQgc28gZm9ydGguCisgICAgICAgICAgICBCaXRCYWtlIHNldHMgdXAgZW52aXJvbm1lbnQgdmFyaWFibGVzIHN1Y2ggYXMgPGZpbGVuYW1lPkNDPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHRvIGFzc2lzdCBhcHBsaWNhdGlvbnMsIHN1Y2ggYXMgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiB0byBmaW5kIHRoZSBjb3JyZWN0IHRvb2xzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJdCBpcyBhbHNvIHdvcnRoIG5vdGluZyB0aGF0IDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+IHN0aWxsIHdvcmtzIG92ZXIKKyAgICAgICAgICAgIFgxMSBmb3J3YXJkaW5nIGFuZCBzaW1pbGFyIHNpdHVhdGlvbnMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L25vdGU+Cis8L3NlY3Rpb24+CisKKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbmV3YmllLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbmV3YmllLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGZhOTY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1uZXdiaWUueG1sCkBAIC0wLDAgKzEsMTcxNiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2Rldi1tYW51YWwtbmV3YmllJz4KKworPHRpdGxlPlRoZSBZb2N0byBQcm9qZWN0IE9wZW4gU291cmNlIERldmVsb3BtZW50IEVudmlyb25tZW50PC90aXRsZT4KKworPHBhcmE+CisgICAgVGhpcyBjaGFwdGVyIGhlbHBzIHlvdSB1bmRlcnN0YW5kIHRoZSBZb2N0byBQcm9qZWN0IGFzIGFuIG9wZW4gc291cmNlIGRldmVsb3BtZW50IHByb2plY3QuCisgICAgSW4gZ2VuZXJhbCwgd29ya2luZyBpbiBhbiBvcGVuIHNvdXJjZSBlbnZpcm9ubWVudCBpcyB2ZXJ5IGRpZmZlcmVudCBmcm9tIHdvcmtpbmcgaW4gYQorICAgIGNsb3NlZCwgcHJvcHJpZXRhcnkgZW52aXJvbm1lbnQuCisgICAgQWRkaXRpb25hbGx5LCB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIHNwZWNpZmljIHRvb2xzIGFuZCBjb25zdHJ1Y3RzIGFzIHBhcnQgb2YgaXRzIGRldmVsb3BtZW50CisgICAgZW52aXJvbm1lbnQuCisgICAgVGhpcyBjaGFwdGVyIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgb3BlbiBzb3VyY2UgcGhpbG9zb3BoeSwgdXNpbmcgdGhlCisgICAgWW9jdG8gUHJvamVjdCBpbiBhIHRlYW0gZW52aXJvbm1lbnQsIHNvdXJjZSByZXBvc2l0b3JpZXMsIFlvY3RvIFByb2plY3QKKyAgICB0ZXJtcywgbGljZW5zaW5nLCB0aGUgb3BlbiBzb3VyY2UgZGlzdHJpYnV0ZWQgdmVyc2lvbiBjb250cm9sIHN5c3RlbSBHaXQsCisgICAgd29ya2Zsb3dzLCBidWcgdHJhY2tpbmcsIGFuZCBob3cgdG8gc3VibWl0IGNoYW5nZXMuCis8L3BhcmE+CisKKzxzZWN0aW9uIGlkPSdvcGVuLXNvdXJjZS1waGlsb3NvcGh5Jz4KKyAgICA8dGl0bGU+T3BlbiBTb3VyY2UgUGhpbG9zb3BoeTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgT3BlbiBzb3VyY2UgcGhpbG9zb3BoeSBpcyBjaGFyYWN0ZXJpemVkIGJ5IHNvZnR3YXJlIGRldmVsb3BtZW50IGRpcmVjdGVkIGJ5IHBlZXIgcHJvZHVjdGlvbgorICAgICAgICBhbmQgY29sbGFib3JhdGlvbiB0aHJvdWdoIGFuIGFjdGl2ZSBjb21tdW5pdHkgb2YgZGV2ZWxvcGVycy4KKyAgICAgICAgQ29udHJhc3QgdGhpcyB0byB0aGUgbW9yZSBzdGFuZGFyZCBjZW50cmFsaXplZCBkZXZlbG9wbWVudCBtb2RlbHMgdXNlZCBieSBjb21tZXJjaWFsIHNvZnR3YXJlCisgICAgICAgIGNvbXBhbmllcyB3aGVyZSBhIGZpbml0ZSBzZXQgb2YgZGV2ZWxvcGVycyBwcm9kdWNlcyBhIHByb2R1Y3QgZm9yIHNhbGUgdXNpbmcgYSBkZWZpbmVkIHNldAorICAgICAgICBvZiBwcm9jZWR1cmVzIHRoYXQgdWx0aW1hdGVseSByZXN1bHQgaW4gYW4gZW5kIHByb2R1Y3Qgd2hvc2UgYXJjaGl0ZWN0dXJlIGFuZCBzb3VyY2UgbWF0ZXJpYWwKKyAgICAgICAgYXJlIGNsb3NlZCB0byB0aGUgcHVibGljLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBPcGVuIHNvdXJjZSBwcm9qZWN0cyBjb25jZXB0dWFsbHkgaGF2ZSBkaWZmZXJpbmcgY29uY3VycmVudCBhZ2VuZGFzLCBhcHByb2FjaGVzLCBhbmQgcHJvZHVjdGlvbi4KKyAgICAgICAgVGhlc2UgZmFjZXRzIG9mIHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzIGNhbiBjb21lIGZyb20gYW55b25lIGluIHRoZSBwdWJsaWMgKGNvbW11bml0eSkgdGhhdCBoYXMgYQorICAgICAgICBzdGFrZSBpbiB0aGUgc29mdHdhcmUgcHJvamVjdC4KKyAgICAgICAgVGhlIG9wZW4gc291cmNlIGVudmlyb25tZW50IGNvbnRhaW5zIG5ldyBjb3B5cmlnaHQsIGxpY2Vuc2luZywgZG9tYWluLCBhbmQgY29uc3VtZXIgaXNzdWVzCisgICAgICAgIHRoYXQgZGlmZmVyIGZyb20gdGhlIG1vcmUgdHJhZGl0aW9uYWwgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgICAgIEluIGFuIG9wZW4gc291cmNlIGVudmlyb25tZW50LCB0aGUgZW5kIHByb2R1Y3QsIHNvdXJjZSBtYXRlcmlhbCwgYW5kIGRvY3VtZW50YXRpb24gYXJlCisgICAgICAgIGFsbCBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBhdCBubyBjb3N0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBBIGJlbmNobWFyayBleGFtcGxlIG9mIGFuIG9wZW4gc291cmNlIHByb2plY3QgaXMgdGhlIExpbnV4IGtlcm5lbCwgd2hpY2ggd2FzIGluaXRpYWxseSBjb25jZWl2ZWQKKyAgICAgICAgYW5kIGNyZWF0ZWQgYnkgRmlubmlzaCBjb21wdXRlciBzY2llbmNlIHN0dWRlbnQgTGludXMgVG9ydmFsZHMgaW4gMTk5MS4KKyAgICAgICAgQ29udmVyc2VseSwgYSBnb29kIGV4YW1wbGUgb2YgYSBub24tb3BlbiBzb3VyY2UgcHJvamVjdCBpcyB0aGUKKyAgICAgICAgPHRyYWRlbWFyayBjbGFzcz0ncmVnaXN0ZXJlZCc+V2luZG93czwvdHJhZGVtYXJrPiBmYW1pbHkgb2Ygb3BlcmF0aW5nCisgICAgICAgIHN5c3RlbXMgZGV2ZWxvcGVkIGJ5IDx0cmFkZW1hcmsgY2xhc3M9J3JlZ2lzdGVyZWQnPk1pY3Jvc29mdDwvdHJhZGVtYXJrPiBDb3Jwb3JhdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2lraXBlZGlhIGhhcyBhIGdvb2QgaGlzdG9yaWNhbCBkZXNjcmlwdGlvbiBvZiB0aGUgT3BlbiBTb3VyY2UgUGhpbG9zb3BoeQorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL09wZW5fc291cmNlJz5oZXJlPC91bGluaz4uCisgICAgICAgIFlvdSBjYW4gYWxzbyBmaW5kIGhlbHBmdWwgaW5mb3JtYXRpb24gb24gaG93IHRvIHBhcnRpY2lwYXRlIGluIHRoZSBMaW51eCBDb21tdW5pdHkKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xkbi5saW51eGZvdW5kYXRpb24ub3JnL2Jvb2svaG93LXBhcnRpY2lwYXRlLWxpbnV4LWNvbW11bml0eSc+aGVyZTwvdWxpbms+LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9InVzaW5ncG9reS1jaGFuZ2VzLWNvbGxhYm9yYXRlIj4KKyAgICA8dGl0bGU+VXNpbmcgdGhlIFlvY3RvIFByb2plY3QgaW4gYSBUZWFtIEVudmlyb25tZW50PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBJdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgY2xlYXIgaG93IHlvdSBjYW4gdXNlIHRoZSBZb2N0bworICAgICAgICBQcm9qZWN0IGluIGEgdGVhbSBlbnZpcm9ubWVudCwgb3Igc2NhbGUgaXQgZm9yIGEgbGFyZ2UgdGVhbSBvZgorICAgICAgICBkZXZlbG9wZXJzLgorICAgICAgICBPbmUgb2YgdGhlIHN0cmVuZ3RocyBvZiB0aGUgWW9jdG8gUHJvamVjdCBpcyB0aGF0IGl0IGlzIGV4dHJlbWVseQorICAgICAgICBmbGV4aWJsZS4KKyAgICAgICAgVGh1cywgeW91IGNhbiBhZGFwdCBpdCB0byBtYW55IGRpZmZlcmVudCB1c2UgY2FzZXMgYW5kIHNjZW5hcmlvcy4KKyAgICAgICAgSG93ZXZlciwgdGhlc2UgY2hhcmFjdGVyaXN0aWNzIGNhbiBjYXVzZSBhIHN0cnVnZ2xlIGlmIHlvdSBhcmUgdHJ5aW5nCisgICAgICAgIHRvIGNyZWF0ZSBhIHdvcmtpbmcgc2V0dXAgdGhhdCBzY2FsZXMgYWNyb3NzIGEgbGFyZ2UgdGVhbS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVG8gaGVscCB3aXRoIHRoZXNlIHR5cGVzIG9mIHNpdHVhdGlvbnMsIHRoaXMgc2VjdGlvbiBwcmVzZW50cworICAgICAgICBzb21lIG9mIHRoZSBwcm9qZWN0J3MgbW9zdCBzdWNjZXNzZnVsIGV4cGVyaWVuY2VzLAorICAgICAgICBwcmFjdGljZXMsIHNvbHV0aW9ucywgYW5kIGF2YWlsYWJsZSB0ZWNobm9sb2dpZXMgdGhhdCB3b3JrIHdlbGwuCisgICAgICAgIEtlZXAgaW4gbWluZCwgdGhlIGluZm9ybWF0aW9uIGhlcmUgaXMgYSBzdGFydGluZyBwb2ludC4KKyAgICAgICAgWW91IGNhbiBidWlsZCBvZmYgaXQgYW5kIGN1c3RvbWl6ZSBpdCB0byBmaXQgYW55CisgICAgICAgIHBhcnRpY3VsYXIgd29ya2luZyBlbnZpcm9ubWVudCBhbmQgc2V0IG9mIHByYWN0aWNlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nYmVzdC1wcmFjdGljZXMtc3lzdGVtLWNvbmZpZ3VyYXRpb25zJz4KKyAgICAgICAgPHRpdGxlPlN5c3RlbSBDb25maWd1cmF0aW9uczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTeXN0ZW1zIGFjcm9zcyBhIGxhcmdlIHRlYW0gc2hvdWxkIG1lZXQgdGhlIG5lZWRzIG9mCisgICAgICAgICAgICB0d28gdHlwZXMgb2YgZGV2ZWxvcGVyczogdGhvc2Ugd29ya2luZyBvbiB0aGUgY29udGVudHMgb2YgdGhlCisgICAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtIGltYWdlIGl0c2VsZiBhbmQgdGhvc2UgZGV2ZWxvcGluZyBhcHBsaWNhdGlvbnMuCisgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIGRldmVsb3BlciwgdGhlaXIgd29ya3N0YXRpb25zIG11c3QKKyAgICAgICAgICAgIGJlIGJvdGggcmVhc29uYWJseSBwb3dlcmZ1bCBhbmQgcnVuIExpbnV4LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Jlc3QtcHJhY3RpY2VzLWFwcGxpY2F0aW9uLWRldmVsb3BtZW50Jz4KKyAgICAgICAgICAgIDx0aXRsZT5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBkZXZlbG9wZXJzIHdobyBtYWlubHkgZG8gYXBwbGljYXRpb24gbGV2ZWwgd29yaworICAgICAgICAgICAgICAgIG9uIHRvcCBvZiBhbiBleGlzdGluZyBzb2Z0d2FyZSBzdGFjaywKKyAgICAgICAgICAgICAgICBoZXJlIGFyZSBzb21lIHByYWN0aWNlcyB0aGF0IHdvcmsgYmVzdDoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VXNlIGEgcHJlLWJ1aWx0IHRvb2xjaGFpbiB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyB0aGUgc29mdHdhcmUgc3RhY2sgaXRzZWxmLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlbiwgZGV2ZWxvcCB0aGUgYXBwbGljYXRpb24gY29kZSBvbiB0b3Agb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIHdvcmtzIHdlbGwgZm9yIHNtYWxsIG51bWJlcnMgb2YgcmVsYXRpdmVseQorICAgICAgICAgICAgICAgICAgICAgICAgaXNvbGF0ZWQgYXBwbGljYXRpb25zLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V2hlbiBwb3NzaWJsZSwgdXNlIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICBwbHVnLWluIGZvciB0aGUgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4gSURFCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb3RoZXIgcGllY2VzIG9mIEFwcGxpY2F0aW9uIERldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgICAgICBUZWNobm9sb2d5IChBRFQpLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdhcHBsaWNhdGlvbi1kZXZlbG9wbWVudC13b3JrZmxvdyc+QXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIERldmVsb3BtZW50IFdvcmtmbG93PC9saW5rPiIgc2VjdGlvbiBhcyB3ZWxsIGFzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsnPllvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+S2VlcCB5b3VyIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGRvIHRoaXMgdGhyb3VnaCBwcm92aXNpb25pbmcgZWl0aGVyIGFzIG5ldworICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluIGRvd25sb2FkcyBvciBhcyB1cGRhdGVzIHRocm91Z2ggYSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUgbWVjaGFuaXNtIHVzaW5nIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHByb3ZpZGUgdXBkYXRlcyB0byBhbiBleGlzdGluZyB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZXhhY3QgbWVjaGFuaWNzIG9mIGhvdyBhbmQgd2hlbiB0byBkbyB0aGlzIGFyZSBhCisgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbiBmb3IgbG9jYWwgcG9saWN5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VXNlIG11bHRpcGxlIHRvb2xjaGFpbnMgaW5zdGFsbGVkIGxvY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGludG8gZGlmZmVyZW50IGxvY2F0aW9ucyB0byBhbGxvdyBkZXZlbG9wbWVudCBhY3Jvc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25zLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Jlc3QtcHJhY3RpY2VzLWNvcmUtc3lzdGVtLWRldmVsb3BtZW50Jz4KKyAgICAgICAgICAgIDx0aXRsZT5Db3JlIFN5c3RlbSBEZXZlbG9wbWVudDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBjb3JlIHN5c3RlbSBkZXZlbG9wbWVudCwgaXQgaXMgb2Z0ZW4gYmVzdCB0byBoYXZlIHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBpdHNlbGYgYXZhaWxhYmxlIG9uIHRoZSBkZXZlbG9wZXIgd29ya3N0YXRpb25zCisgICAgICAgICAgICAgICAgc28gZGV2ZWxvcGVycyBjYW4gcnVuIHRoZWlyIG93biBidWlsZHMgYW5kIGRpcmVjdGx5CisgICAgICAgICAgICAgICAgcmVidWlsZCB0aGUgc29mdHdhcmUgc3RhY2suCisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBrZWVwIHRoZSBjb3JlIHN5c3RlbSB1bmNoYW5nZWQgYXMgbXVjaCBhcworICAgICAgICAgICAgICAgIHBvc3NpYmxlIGFuZCBkbyB5b3VyIHdvcmsgaW4gbGF5ZXJzIG9uIHRvcCBvZiB0aGUgY29yZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgRG9pbmcgc28gZ2l2ZXMgeW91IGEgZ3JlYXRlciBsZXZlbCBvZiBwb3J0YWJpbGl0eSB3aGVuCisgICAgICAgICAgICAgICAgdXBncmFkaW5nIHRvIG5ldyB2ZXJzaW9ucyBvZiB0aGUgY29yZSBzeXN0ZW0gb3IgQm9hcmQKKyAgICAgICAgICAgICAgICBTdXBwb3J0IFBhY2thZ2VzIChCU1BzKS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHNoYXJlIGxheWVycyBhbW9uZ3N0IHRoZSBkZXZlbG9wZXJzIG9mIGEgcGFydGljdWxhcgorICAgICAgICAgICAgICAgIHByb2plY3QgYW5kIGNvbnRhaW4gdGhlIHBvbGljeSBjb25maWd1cmF0aW9uIHRoYXQgZGVmaW5lcworICAgICAgICAgICAgICAgIHRoZSBwcm9qZWN0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBc2lkZSBmcm9tIHRoZSBwcmV2aW91cyBiZXN0IHByYWN0aWNlcywgdGhlcmUgZXhpc3RzIGEgbnVtYmVyCisgICAgICAgICAgICAgICAgb2YgdGlwcyBhbmQgdHJpY2tzIHRoYXQgY2FuIGhlbHAgc3BlZWQgdXAgY29yZSBkZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIHByb2plY3RzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2UgYQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc2hhcmVkLXN0YXRlLWNhY2hlJz5TaGFyZWQgU3RhdGUgQ2FjaGU8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgKHNzdGF0ZSkgYW1vbmcgZ3JvdXBzIG9mIGRldmVsb3BlcnMgd2hvIGFyZSBvbiBhCisgICAgICAgICAgICAgICAgICAgICAgICBmYXN0IG5ldHdvcmsuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYmVzdCB3YXkgdG8gc2hhcmUgc3N0YXRlIGlzIHRocm91Z2ggYQorICAgICAgICAgICAgICAgICAgICAgICAgTmV0d29yayBGaWxlIFN5c3RlbSAoTkZTKSBzaGFyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCB1c2VyIHRvIGJ1aWxkIGEgZ2l2ZW4gY29tcG9uZW50IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0IHRpbWUgY29udHJpYnV0ZXMgdGhhdCBvYmplY3QgdG8gdGhlIHNzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIHN1YnNlcXVlbnQgYnVpbGRzIGZyb20gb3RoZXIgZGV2ZWxvcGVycyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICByZXVzZSB0aGUgb2JqZWN0IHJhdGhlciB0aGFuIHJlYnVpbGQgaXQgdGhlbXNlbHZlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFsdGhvdWdoIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBvdGhlciBwcm90b2NvbHMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc3N0YXRlIHN1Y2ggYXMgSFRUUCBhbmQgRlRQLCB5b3Ugc2hvdWxkIGF2b2lkIHRoZXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgSFRUUCBsaW1pdHMgdGhlIHNzdGF0ZSB0byByZWFkLW9ubHkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBGVFAgcHJvdmlkZXMgcG9vciBwZXJmb3JtYW5jZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SGF2ZSBhdXRvYnVpbGRlcnMgY29udHJpYnV0ZSB0byB0aGUgc3N0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICBwb29sIHNpbWlsYXJseSB0byBob3cgdGhlIGRldmVsb3BlciB3b3Jrc3RhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGUuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdiZXN0LXByYWN0aWNlcy1hdXRvYnVpbGRlcnMnPkF1dG9idWlsZGVyczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QnVpbGQgc3RhbmQtYWxvbmUgdGFyYmFsbHMgdGhhdCBjb250YWluCisgICAgICAgICAgICAgICAgICAgICAgICAibWlzc2luZyIgc3lzdGVtIHJlcXVpcmVtZW50cyBpZiBmb3Igc29tZSByZWFzb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGRldmVsb3BlciB3b3Jrc3RhdGlvbnMgZG8gbm90IG1lZXQgbWluaW11bSBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVtZW50cyBzdWNoIGFzIGxhdGVzdCBQeXRob24gdmVyc2lvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2hycGF0aDwvZmlsZW5hbWU+LCBvciBvdGhlciB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gaW5zdGFsbCBhbmQgcmVsb2NhdGUgdGhlIHRhcmJhbGwgZXhhY3RseSBhcyB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvdWxkIHRoZSB1c3VhbCBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gc28gdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgYWxsIGRldmVsb3BlcnMgY2FuIG1lZXQgbWluaW11bSB2ZXJzaW9uIHJlcXVpcmVtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgb24gbW9zdCBkaXN0cmlidXRpb25zLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VXNlIGEgc21hbGwgbnVtYmVyIG9mIHNoYXJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2ggcGVyZm9ybWFuY2Ugc3lzdGVtcyBmb3IgdGVzdGluZyBwdXJwb3NlcworICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gZHVhbCwgc2l4LWNvcmUgWGVvbnMgd2l0aCAyNCBHYnl0ZXMgb2YgUkFNCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcGxlbnR5IG9mIGRpc2sgc3BhY2UpLgorICAgICAgICAgICAgICAgICAgICAgICAgRGV2ZWxvcGVycyBjYW4gdXNlIHRoZXNlIHN5c3RlbXMgZm9yIHdpZGVyLCBtb3JlCisgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpdmUgdGVzdGluZyB3aGlsZSB0aGV5IGNvbnRpbnVlIHRvIGRldmVsb3AKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsbHkgdXNpbmcgdGhlaXIgcHJpbWFyeSBkZXZlbG9wbWVudCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVuYWJsZSB0aGUgUFIgU2VydmljZSB3aGVuIHBhY2thZ2UgZmVlZHMKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gYmUgaW5jcmVtZW50YWwgd2l0aCBjb250aW51YWxseSBpbmNyZWFzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFInPlBSPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgdGhpcyBzaXR1YXRpb24gb2NjdXJzIHdoZW4geW91IHVzZSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgcHVibGlzaCBwYWNrYWdlIGZlZWRzIGFuZCB1c2UgYSBzaGFyZWQgc3RhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGVuYWJsZSB0aGUgUFIgU2VydmljZSBmb3IgYWxsIHVzZXJzIHdobworICAgICAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSBzaGFyZWQgc3RhdGUgcG9vbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBQUiBTZXJ2aWNlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nd29ya2luZy13aXRoLWEtcHItc2VydmljZSc+V29ya2luZyBXaXRoIGEgUFIgU2VydmljZTwvbGluaz4iLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmVzdC1wcmFjdGljZXMtc291cmNlLWNvbnRyb2wtbWFuYWdlbWVudCc+CisgICAgICAgIDx0aXRsZT5Tb3VyY2UgQ29udHJvbCBNYW5hZ2VtZW50IChTQ00pPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEtlZXBpbmcgeW91cgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgIGFuZCBhbnkgc29mdHdhcmUgeW91IGFyZSBkZXZlbG9waW5nIHVuZGVyIHRoZQorICAgICAgICAgICAgY29udHJvbCBvZiBhbiBTQ00gc3lzdGVtIHRoYXQgaXMgY29tcGF0aWJsZQorICAgICAgICAgICAgd2l0aCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyBhZHZpc2FibGUuCisgICAgICAgICAgICBPZiB0aGUgU0NNcyBCaXRCYWtlIHN1cHBvcnRzLCB0aGUKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgdGVhbSBzdHJvbmdseSByZWNvbW1lbmRzIHVzaW5nCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnaXQnPkdpdDwvbGluaz4uCisgICAgICAgICAgICBHaXQgaXMgYSBkaXN0cmlidXRlZCBzeXN0ZW0gdGhhdCBpcyBlYXN5IHRvIGJhY2t1cCwKKyAgICAgICAgICAgIGFsbG93cyB5b3UgdG8gd29yayByZW1vdGVseSwgYW5kIHRoZW4gY29ubmVjdHMgYmFjayB0byB0aGUKKyAgICAgICAgICAgIGluZnJhc3RydWN0dXJlLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIGFib3V0IEJpdEJha2UsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7Jz5CaXRCYWtlIFVzZXIgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEl0IGlzIHJlbGF0aXZlbHkgZWFzeSB0byBzZXQgdXAgR2l0IHNlcnZpY2VzIGFuZCBjcmVhdGUKKyAgICAgICAgICAgIGluZnJhc3RydWN0dXJlIGxpa2UKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOyc+aHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnPC91bGluaz4sCisgICAgICAgICAgICB3aGljaCBpcyBiYXNlZCBvbiBzZXJ2ZXIgc29mdHdhcmUgY2FsbGVkCisgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0b2xpdGU8L2ZpbGVuYW1lPiB3aXRoIDxmaWxlbmFtZT5jZ2l0PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGJlaW5nIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHdlYiBpbnRlcmZhY2UgdGhhdCBsZXRzIHlvdSB2aWV3IHRoZQorICAgICAgICAgICAgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5naXRvbGl0ZTwvZmlsZW5hbWU+IHNvZnR3YXJlIGlkZW50aWZpZXMgdXNlcnMKKyAgICAgICAgICAgIHVzaW5nIFNTSCBrZXlzIGFuZCBhbGxvd3MgYnJhbmNoLWJhc2VkCisgICAgICAgICAgICBhY2Nlc3MgY29udHJvbHMgdG8gcmVwb3NpdG9yaWVzIHRoYXQgeW91IGNhbiBjb250cm9sIGFzIGxpdHRsZQorICAgICAgICAgICAgb3IgYXMgbXVjaCBhcyBuZWNlc3NhcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFRoZSBzZXR1cCBvZiB0aGVzZSBzZXJ2aWNlcyBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgbWFudWFsLgorICAgICAgICAgICAgSG93ZXZlciwgc2l0ZXMgc3VjaCBhcyB0aGVzZSBleGlzdCB0aGF0IGRlc2NyaWJlIGhvdyB0byBwZXJmb3JtCisgICAgICAgICAgICBzZXR1cDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9ib29rL2NoNC04Lmh0bWwnPkdpdCBkb2N1bWVudGF0aW9uPC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlcyBob3cgdG8gaW5zdGFsbCA8ZmlsZW5hbWU+Z2l0b2xpdGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBvbiB0aGUgc2VydmVyLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPSdodHRwOi8vc2l0YXJhbWMuZ2l0aHViLmNvbS9naXRvbGl0ZS9tYXN0ZXItdG9jLmh0bWwnPlRoZSA8ZmlsZW5hbWU+Z2l0b2xpdGU8L2ZpbGVuYW1lPiBtYXN0ZXIgaW5kZXg8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgQWxsIHRvcGljcyBmb3IgPGZpbGVuYW1lPmdpdG9saXRlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPSdodHRwczovL2dpdC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0ludGVyZmFjZXMsX2Zyb250ZW5kcyxfYW5kX3Rvb2xzJz5JbnRlcmZhY2VzLCBmcm9udGVuZHMsIGFuZCB0b29sczwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICBEb2N1bWVudGF0aW9uIG9uIGhvdyB0byBjcmVhdGUgaW50ZXJmYWNlcyBhbmQgZnJvbnRlbmRzCisgICAgICAgICAgICAgICAgICAgIGZvciBHaXQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdiZXN0LXByYWN0aWNlcy1hdXRvYnVpbGRlcnMnPgorICAgICAgICA8dGl0bGU+QXV0b2J1aWxkZXJzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEF1dG9idWlsZGVycyBhcmUgb2Z0ZW4gdGhlIGNvcmUgb2YgYSBkZXZlbG9wbWVudCBwcm9qZWN0LgorICAgICAgICAgICAgSXQgaXMgaGVyZSB0aGF0IGNoYW5nZXMgZnJvbSBpbmRpdmlkdWFsIGRldmVsb3BlcnMgYXJlIGJyb3VnaHQKKyAgICAgICAgICAgIHRvZ2V0aGVyIGFuZCBjZW50cmFsbHkgdGVzdGVkIGFuZCBzdWJzZXF1ZW50IGRlY2lzaW9ucyBhYm91dAorICAgICAgICAgICAgcmVsZWFzZXMgY2FuIGJlIG1hZGUuCisgICAgICAgICAgICBBdXRvYnVpbGRlcnMgYWxzbyBhbGxvdyBmb3IgImNvbnRpbnVvdXMgaW50ZWdyYXRpb24iIHN0eWxlCisgICAgICAgICAgICB0ZXN0aW5nIG9mIHNvZnR3YXJlIGNvbXBvbmVudHMgYW5kIHJlZ3Jlc3Npb24gaWRlbnRpZmljYXRpb24KKyAgICAgICAgICAgIGFuZCB0cmFja2luZy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU2VlICI8dWxpbmsgdXJsPSdodHRwOi8vYXV0b2J1aWxkZXIueW9jdG9wcm9qZWN0Lm9yZyc+WW9jdG8gUHJvamVjdCBBdXRvYnVpbGRlcjwvdWxpbms+IgorICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGxpbmtzIHRvIGJ1aWxkYm90LgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgdGVhbSBoYXMgZm91bmQgdGhpcyBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgICAgd29ya3Mgd2VsbCBpbiB0aGlzIHJvbGUuCisgICAgICAgICAgICBBIHB1YmxpYyBleGFtcGxlIG9mIHRoaXMgaXMgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgIEF1dG9idWlsZGVycywgd2hpY2ggd2UgdXNlIHRvIHRlc3QgdGhlIG92ZXJhbGwgaGVhbHRoIG9mIHRoZQorICAgICAgICAgICAgcHJvamVjdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZlYXR1cmVzIG9mIHRoaXMgc3lzdGVtIGFyZToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkhpZ2hsaWdodHMgd2hlbiBjb21taXRzIGJyZWFrIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlBvcHVsYXRlcyBhbiBzc3RhdGUgY2FjaGUgZnJvbSB3aGljaAorICAgICAgICAgICAgICAgICAgICBkZXZlbG9wZXJzIGNhbiBwdWxsIHJhdGhlciB0aGFuIHJlcXVpcmluZyBsb2NhbAorICAgICAgICAgICAgICAgICAgICBidWlsZHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFsbG93cyBjb21taXQgaG9vayB0cmlnZ2VycywKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggdHJpZ2dlciBidWlsZHMgd2hlbiBjb21taXRzIGFyZSBtYWRlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWxsb3dzIHRyaWdnZXJpbmcgb2YgYXV0b21hdGVkIGltYWdlIGJvb3RpbmcKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRlc3RpbmcgdW5kZXIgdGhlIFF1aWNrRU1VbGF0b3IgKFFFTVUpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3VwcG9ydHMgaW5jcmVtZW50YWwgYnVpbGQgdGVzdGluZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgZnJvbS1zY3JhdGNoIGJ1aWxkcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2hhcmVzIG91dHB1dCB0aGF0IGFsbG93cyBkZXZlbG9wZXIKKyAgICAgICAgICAgICAgICAgICAgdGVzdGluZyBhbmQgaGlzdG9yaWNhbCByZWdyZXNzaW9uIGludmVzdGlnYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGVzIG91dHB1dCB0aGF0IGNhbiBiZSB1c2VkIGZvciByZWxlYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFsbG93cyBzY2hlZHVsaW5nIG9mIGJ1aWxkcyBzbyB0aGF0IHJlc291cmNlcworICAgICAgICAgICAgICAgICAgICBjYW4gYmUgdXNlZCBlZmZpY2llbnRseS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2Jlc3QtcHJhY3RpY2VzLXBvbGljaWVzLWFuZC1jaGFuZ2UtZmxvdyc+CisgICAgICAgIDx0aXRsZT5Qb2xpY2llcyBhbmQgQ2hhbmdlIEZsb3c8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaXRzZWxmIHVzZXMgYSBoaWVyYXJjaGljYWwgc3RydWN0dXJlIGFuZCBhCisgICAgICAgICAgICBwdWxsIG1vZGVsLgorICAgICAgICAgICAgU2NyaXB0cyBleGlzdCB0byBjcmVhdGUgYW5kIHNlbmQgcHVsbCByZXF1ZXN0cworICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPmNyZWF0ZS1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zZW5kLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIFRoaXMgbW9kZWwgaXMgaW4gbGluZSB3aXRoIG90aGVyIG9wZW4gc291cmNlIHByb2plY3RzIHdoZXJlCisgICAgICAgICAgICBtYWludGFpbmVycyBhcmUgcmVzcG9uc2libGUgZm9yIHNwZWNpZmljIGFyZWFzIG9mIHRoZSBwcm9qZWN0CisgICAgICAgICAgICBhbmQgYSBzaW5nbGUgbWFpbnRhaW5lciBoYW5kbGVzIHRoZSBmaW5hbCAidG9wLW9mLXRyZWUiIG1lcmdlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgWW91IGNhbiBhbHNvIHVzZSBhIG1vcmUgY29sbGVjdGl2ZSBwdXNoIG1vZGVsLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5naXRvbGl0ZTwvZmlsZW5hbWU+IHNvZnR3YXJlIHN1cHBvcnRzIGJvdGggdGhlCisgICAgICAgICAgICBwdXNoIGFuZCBwdWxsIG1vZGVscyBxdWl0ZSBlYXNpbHkuCisgICAgICAgIDwvbm90ZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIHdpdGggYW55IGRldmVsb3BtZW50IGVudmlyb25tZW50LCBpdCBpcyBpbXBvcnRhbnQKKyAgICAgICAgICAgIHRvIGRvY3VtZW50IHRoZSBwb2xpY3kgdXNlZCBhcyB3ZWxsIGFzIGFueSBtYWluIHByb2plY3QKKyAgICAgICAgICAgIGd1aWRlbGluZXMgc28gdGhleSBhcmUgdW5kZXJzdG9vZCBieSBldmVyeW9uZS4KKyAgICAgICAgICAgIEl0IGlzIGFsc28gYSBnb29kIGlkZWEgdG8gaGF2ZSB3ZWxsIHN0cnVjdHVyZWQKKyAgICAgICAgICAgIGNvbW1pdCBtZXNzYWdlcywgd2hpY2ggYXJlIHVzdWFsbHkgYSBwYXJ0IG9mIGEgcHJvamVjdCdzCisgICAgICAgICAgICBndWlkZWxpbmVzLgorICAgICAgICAgICAgR29vZCBjb21taXQgbWVzc2FnZXMgYXJlIGVzc2VudGlhbCB3aGVuIGxvb2tpbmcgYmFjayBpbiB0aW1lIGFuZAorICAgICAgICAgICAgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgd2h5IGNoYW5nZXMgd2VyZSBtYWRlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZGlzY292ZXIgdGhhdCBjaGFuZ2VzIGFyZSBuZWVkZWQgdG8gdGhlIGNvcmUgbGF5ZXIgb2YgdGhlCisgICAgICAgICAgICBwcm9qZWN0LCBpdCBpcyB3b3J0aCBzaGFyaW5nIHRob3NlIHdpdGggdGhlIGNvbW11bml0eSBhcyBzb29uCisgICAgICAgICAgICBhcyBwb3NzaWJsZS4KKyAgICAgICAgICAgIENoYW5jZXMgYXJlIGlmIHlvdSBoYXZlIGRpc2NvdmVyZWQgdGhlIG5lZWQgZm9yIGNoYW5nZXMsIHNvbWVvbmUKKyAgICAgICAgICAgIGVsc2UgaW4gdGhlIGNvbW11bml0eSBuZWVkcyB0aGVtIGFsc28uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmVzdC1wcmFjdGljZXMtc3VtbWFyeSc+CisgICAgICAgIDx0aXRsZT5TdW1tYXJ5PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBzdW1tYXJpemVzIHRoZSBrZXkgcmVjb21tZW5kYXRpb25zIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgIHByZXZpb3VzIHNlY3Rpb25zOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VXNlIDxsaW5rIGxpbmtlbmQ9J2dpdCc+R2l0PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhcyB0aGUgc291cmNlIGNvbnRyb2wgc3lzdGVtLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWludGFpbiB5b3VyIE1ldGFkYXRhIGluIGxheWVycyB0aGF0IG1ha2Ugc2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgZm9yIHlvdXIgc2l0dWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSd1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgYW5kIENyZWF0aW5nIExheWVyczwvbGluaz4iIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24KKyAgICAgICAgICAgICAgICAgICAgbGF5ZXJzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VwYXJhdGUgdGhlIHByb2plY3QncyBNZXRhZGF0YSBhbmQgY29kZSBieSB1c2luZworICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZSBHaXQgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd5b2N0by1wcm9qZWN0LXJlcG9zaXRvcmllcyc+WW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gb24gdGhlc2UgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdnZXR0aW5nLXNldHVwJz5HZXR0aW5nIFNldCBVcDwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzZXQgdXAgbG9jYWwgR2l0CisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcyBmb3IgcmVsYXRlZCB1cHN0cmVhbSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZXQgdXAgdGhlIGRpcmVjdG9yeSBmb3IgdGhlIHNoYXJlZCBzdGF0ZSBjYWNoZQorICAgICAgICAgICAgICAgICAgICAoPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNTVEFURV9ESVInPjxmaWxlbmFtZT5TU1RBVEVfRElSPC9maWxlbmFtZT48L3VsaW5rPikKKyAgICAgICAgICAgICAgICAgICAgd2hlcmUgaXQgbWFrZXMgc2Vuc2UuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzZXQgdXAgdGhlIHNzdGF0ZSBjYWNoZSBvbiBhIHN5c3RlbSB1c2VkCisgICAgICAgICAgICAgICAgICAgIGJ5IGRldmVsb3BlcnMgaW4gdGhlIHNhbWUgb3JnYW5pemF0aW9uIGFuZCBzaGFyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgc2FtZSBzb3VyY2UgZGlyZWN0b3JpZXMgb24gdGhlaXIgbWFjaGluZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZXQgdXAgYW4gQXV0b2J1aWxkZXIgYW5kIGhhdmUgaXQgcG9wdWxhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIHNzdGF0ZSBjYWNoZSBhbmQgc291cmNlIGRpcmVjdG9yaWVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgWW9jdG8gUHJvamVjdCBjb21tdW5pdHkgZW5jb3VyYWdlcyB5b3UKKyAgICAgICAgICAgICAgICAgICAgdG8gc2VuZCBwYXRjaGVzIHRvIHRoZSBwcm9qZWN0IHRvIGZpeCBidWdzIG9yIGFkZCBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIHN1Ym1pdCBwYXRjaGVzLCBmb2xsb3cgdGhlIHByb2plY3QgY29tbWl0CisgICAgICAgICAgICAgICAgICAgIGd1aWRlbGluZXMgZm9yIHdyaXRpbmcgZ29vZCBjb21taXQgbWVzc2FnZXMuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J2hvdy10by1zdWJtaXQtYS1jaGFuZ2UnPkhvdyB0byBTdWJtaXQgYSBDaGFuZ2U8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZW5kIGNoYW5nZXMgdG8gdGhlIGNvcmUgc29vbmVyIHRoYW4gbGF0ZXIKKyAgICAgICAgICAgICAgICAgICAgYXMgb3RoZXJzIGFyZSBsaWtlbHkgdG8gcnVuIGludG8gdGhlIHNhbWUgaXNzdWVzLgorICAgICAgICAgICAgICAgICAgICBGb3Igc29tZSBndWlkYW5jZSBvbiBtYWlsaW5nIGxpc3RzIHRvIHVzZSwgc2VlIHRoZSBsaXN0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGUgbWFpbGluZyBsaXN0cywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVzb3VyY2VzLW1haWxpbmdsaXN0Jz5NYWlsaW5nIExpc3RzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3lvY3RvLXByb2plY3QtcmVwb3NpdG9yaWVzJz4KKyAgICA8dGl0bGU+WW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIG1haW50YWlucyBjb21wbGV0ZSBzb3VyY2UgcmVwb3NpdG9yaWVzIGZvciBhbGwKKyAgICAgICAgWW9jdG8gUHJvamVjdCBmaWxlcyBhdAorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC9jZ2l0LmNnaSc+PC91bGluaz4uCisgICAgICAgIFRoaXMgd2ViLWJhc2VkIHNvdXJjZSBjb2RlIGJyb3dzZXIgaXMgb3JnYW5pemVkIGludG8gY2F0ZWdvcmllcyBieQorICAgICAgICBmdW5jdGlvbiBzdWNoIGFzIElERSBQbHVnaW5zLCBNYXRjaGJveCwgUG9reSwgWW9jdG8gTGludXggS2VybmVsLCBhbmQKKyAgICAgICAgc28gZm9ydGguCisgICAgICAgIEZyb20gdGhlIGludGVyZmFjZSwgeW91IGNhbiBjbGljayBvbiBhbnkgcGFydGljdWxhciBpdGVtIGluIHRoZSAiTmFtZSIKKyAgICAgICAgY29sdW1uIGFuZCBzZWUgdGhlIFVSTCBhdCB0aGUgYm90dG9tIG9mIHRoZSBwYWdlIHRoYXQgeW91IG5lZWQgdG8gY2xvbmUKKyAgICAgICAgYSBHaXQgcmVwb3NpdG9yeSBmb3IgdGhhdCBwYXJ0aWN1bGFyIGl0ZW0uCisgICAgICAgIEhhdmluZyBhIGxvY2FsIEdpdCByZXBvc2l0b3J5IG9mIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPiwgd2hpY2ggaXMKKyAgICAgICAgdXN1YWxseSBuYW1lZCAicG9reSIsIGFsbG93cworICAgICAgICB5b3UgdG8gbWFrZSBjaGFuZ2VzLCBjb250cmlidXRlIHRvIHRoZSBoaXN0b3J5LCBhbmQgdWx0aW1hdGVseSBlbmhhbmNlCisgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0J3MgdG9vbHMsIEJvYXJkIFN1cHBvcnQgUGFja2FnZXMsIGFuZCBzbyBmb3J0aC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIGFueSBzdXBwb3J0ZWQgcmVsZWFzZSBvZiBZb2N0byBQcm9qZWN0LCB5b3UgY2FuIGFsc28gZ28gdG8gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsnPllvY3RvIFByb2plY3QgV2Vic2l0ZTwvdWxpbms+IGFuZAorICAgICAgICBzZWxlY3QgdGhlICJEb3dubG9hZHMiIHRhYiBhbmQgZ2V0IGEgcmVsZWFzZWQgdGFyYmFsbCBvZiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IG9yIGFueSBzdXBwb3J0ZWQgQlNQIHRhcmJhbGxzLgorICAgICAgICBVbnBhY2tpbmcgdGhlc2UgdGFyYmFsbHMgZ2l2ZXMgeW91IGEgc25hcHNob3Qgb2YgdGhlIHJlbGVhc2VkCisgICAgICAgIGZpbGVzLgorICAgICAgICA8bm90ZT48dGl0bGU+Tm90ZXM8L3RpdGxlPgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSByZWNvbW1lbmRlZCBtZXRob2QgZm9yIHNldHRpbmcgdXAgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBmaWxlcyBmb3Igc3VwcG9ydGVkIEJTUHMKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4sIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4pIGlzIHRvIHVzZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnaXQnPkdpdDwvbGluaz4gdG8gY3JlYXRlIGEgbG9jYWwgY29weSBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gYWx3YXlzIHdvcmsgaW4gbWF0Y2hpbmcgYnJhbmNoZXMgZm9yIGJvdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIHNlbGVjdGVkIEJTUCByZXBvc2l0b3J5IGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPikgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGNoZWNrZWQgb3V0IHRoZSAibWFzdGVyIiBicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgb2YgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBhbmQgeW91IGFyZSBnb2luZyB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiwgYmUgc3VyZSB0byBjaGVja291dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIm1hc3RlciIgYnJhbmNoIG9mIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSW4gc3VtbWFyeSwgaGVyZSBpcyB3aGVyZSB5b3UgY2FuIGdldCB0aGUgcHJvamVjdCBmaWxlcyBuZWVkZWQgZm9yIGRldmVsb3BtZW50OgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdzb3VyY2UtcmVwb3NpdG9yaWVzJz48ZW1waGFzaXM+PHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2knPlNvdXJjZSBSZXBvc2l0b3JpZXM6PC91bGluaz48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoaXMgYXJlYSBjb250YWlucyBJREUgUGx1Z2lucywgTWF0Y2hib3gsIFBva3ksIFBva3kgU3VwcG9ydCwgVG9vbHMsIFlvY3RvIExpbnV4IEtlcm5lbCwgYW5kIFlvY3RvCisgICAgICAgICAgICAgICAgTWV0YWRhdGEgTGF5ZXJzLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gY3JlYXRlIGxvY2FsIGNvcGllcyBvZiBHaXQgcmVwb3NpdG9yaWVzIGZvciBlYWNoIG9mIHRoZXNlIGFyZWFzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjZpbiIgZGVwdGg9IjRpbiIgLz4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48YW5jaG9yIGlkPSdpbmRleC1kb3dubG9hZHMnIC8+PGVtcGhhc2lzPjx1bGluayB1cmw9JyZZT0NUT19ETF9VUkw7L3JlbGVhc2VzLyc+SW5kZXggb2YgL3JlbGVhc2VzOjwvdWxpbms+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGlzIGlzIGFuIGluZGV4IG9mIHJlbGVhc2VzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICB0aGUgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4KKyAgICAgICAgICAgICAgICBZb2N0byBQbHVnLWluLCBtaXNjZWxsYW5lb3VzIHN1cHBvcnQsIFBva3ksIFBzZXVkbywgaW5zdGFsbGVycyBmb3IgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucywKKyAgICAgICAgICAgICAgICBhbmQgYWxsIHJlbGVhc2VkIHZlcnNpb25zIG9mIFlvY3RvIFByb2plY3QgaW4gdGhlIGZvcm0gb2YgaW1hZ2VzIG9yIHRhcmJhbGxzLgorICAgICAgICAgICAgICAgIERvd25sb2FkaW5nIGFuZCBleHRyYWN0aW5nIHRoZXNlIGZpbGVzIGRvZXMgbm90IHByb2R1Y2UgYSBsb2NhbCBjb3B5IG9mIHRoZQorICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5IGJ1dCByYXRoZXIgYSBzbmFwc2hvdCBvZiBhIHBhcnRpY3VsYXIgcmVsZWFzZSBvciBpbWFnZS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSIzLjVpbiIgLz4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+IkRvd25sb2FkcyIgcGFnZSBmb3IgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+WW9jdG8gUHJvamVjdCBXZWJzaXRlPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBY2Nlc3MgdGhpcyBwYWdlIGJ5IGdvaW5nIHRvIHRoZSB3ZWJzaXRlIGFuZCB0aGVuIHNlbGVjdGluZworICAgICAgICAgICAgICAgIHRoZSAiRG93bmxvYWRzIiB0YWIuCisgICAgICAgICAgICAgICAgVGhpcyBwYWdlIGFsbG93cyB5b3UgdG8gZG93bmxvYWQgYW55IFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICByZWxlYXNlIG9yIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBpbiB0YXJiYWxsIGZvcm0uCisgICAgICAgICAgICAgICAgVGhlIHRhcmJhbGxzIGFyZSBzaW1pbGFyIHRvIHRob3NlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ETF9VUkw7L3JlbGVhc2VzLyc+SW5kZXggb2YgL3JlbGVhc2VzOjwvdWxpbms+IGFyZWEuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy95cC1kb3dubG9hZC5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSI0aW4iIC8+CisgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0neW9jdG8tcHJvamVjdC10ZXJtcyc+CisgICAgPHRpdGxlPllvY3RvIFByb2plY3QgVGVybXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgdGVybXMgYW5kIGRlZmluaXRpb25zIHVzZXJzIG5ldyB0byB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudAorICAgICAgICBlbnZpcm9ubWVudCBtaWdodCBmaW5kIGhlbHBmdWwuCisgICAgICAgIFdoaWxlIHNvbWUgb2YgdGhlc2UgdGVybXMgYXJlIHVuaXZlcnNhbCwgdGhlIGxpc3QgaW5jbHVkZXMgdGhlbSBqdXN0IGluIGNhc2U6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFwcGVuZCBGaWxlczo8L2VtcGhhc2lzPiBGaWxlcyB0aGF0IGFwcGVuZCBidWlsZCBpbmZvcm1hdGlvbiB0bworICAgICAgICAgICAgICAgIGEgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgQXBwZW5kIGZpbGVzIGFyZSBrbm93biBhcyBCaXRCYWtlIGFwcGVuZCBmaWxlcyBhbmQgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGV4cGVjdHMgZXZlcnkgYXBwZW5kIGZpbGUgdG8gaGF2ZSBhIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgICAgICByZWNpcGUgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPikgZmlsZS4KKyAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhlIGFwcGVuZCBmaWxlIGFuZCBjb3JyZXNwb25kaW5nIHJlY2lwZSBmaWxlCisgICAgICAgICAgICAgICAgbXVzdCB1c2UgdGhlIHNhbWUgcm9vdCBmaWxlbmFtZS4KKyAgICAgICAgICAgICAgICBUaGUgZmlsZW5hbWVzIGNhbiBkaWZmZXIgb25seSBpbiB0aGUgZmlsZSB0eXBlIHN1ZmZpeCB1c2VkIChlLmcuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvcm1mYWN0b3JfMC4wLmJiPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5mb3JtZmFjdG9yXzAuMC5iYmFwcGVuZDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+SW5mb3JtYXRpb24gaW4gYXBwZW5kIGZpbGVzIGV4dGVuZHMgb3Igb3ZlcnJpZGVzIHRoZQorICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGluIHRoZSBzaW1pbGFybHktbmFtZWQgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgRm9yIGFuIGV4YW1wbGUgb2YgYW4gYXBwZW5kIGZpbGUgaW4gdXNlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWJiYXBwZW5kLWZpbGVzJz5Vc2luZyAuYmJhcHBlbmQgRmlsZXM8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBBcHBlbmQgZmlsZXMgY2FuIGFsc28gdXNlIHdpbGRjYXJkIHBhdHRlcm5zIGluIHRoZWlyIHZlcnNpb24gbnVtYmVycworICAgICAgICAgICAgICAgICAgICBzbyB0aGV5IGNhbiBiZSBhcHBsaWVkIHRvIG1vcmUgdGhhbiBvbmUgdmVyc2lvbiBvZiB0aGUgdW5kZXJseWluZyByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J2JpdGJha2UtdGVybSc+PGVtcGhhc2lzPkJpdEJha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGUgdGFzayBleGVjdXRvciBhbmQgc2NoZWR1bGVyIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbSB0byBidWlsZCBpbWFnZXMuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQml0QmFrZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsnPkJpdEJha2UgVXNlciBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0nYnVpbGQtZGlyZWN0b3J5Jz48ZW1waGFzaXM+QnVpbGQgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhpcyB0ZXJtIHJlZmVycyB0byB0aGUgYXJlYSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICBzeXN0ZW0gZm9yIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICBUaGUgYXJlYSBpcyBjcmVhdGVkIHdoZW4geW91IDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPiB0aGUKKyAgICAgICAgICAgICAgICBzZXR1cCBlbnZpcm9ubWVudCBzY3JpcHQgdGhhdCBpcyBmb3VuZCBpbiB0aGUgU291cmNlIERpcmVjdG9yeQorICAgICAgICAgICAgICAgIChpLmUuIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pLgorICAgICAgICAgICAgICAgIFRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVE9QRElSJz48ZmlsZW5hbWU+VE9QRElSPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHBvaW50cyB0byB0aGUgQnVpbGQgRGlyZWN0b3J5LjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgaGF2ZSBhIGxvdCBvZiBmbGV4aWJpbGl0eSB3aGVuIGNyZWF0aW5nIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgc29tZSBleGFtcGxlcyB0aGF0IHNob3cgaG93IHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBUaGUgZXhhbXBsZXMgYXNzdW1lIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4gaXMKKyAgICAgICAgICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSB0aGUgQnVpbGQgRGlyZWN0b3J5IGluc2lkZSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeSBhbmQgbGV0IHRoZSBuYW1lIG9mIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeSBkZWZhdWx0IHRvIDxmaWxlbmFtZT5idWlsZDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCAkSE9NRS9wb2t5CisgICAgICQgc291cmNlICZPRV9JTklUX0ZJTEU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSB0aGUgQnVpbGQgRGlyZWN0b3J5IGluc2lkZSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9tZSBkaXJlY3RvcnkgYW5kIHNwZWNpZmljYWxseSBuYW1lIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRlc3QtYnVpbGRzPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkICRIT01FCisgICAgICQgc291cmNlIHBva3kvJk9FX0lOSVRfRklMRTsgdGVzdC1idWlsZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdmlkZSBhIGRpcmVjdG9yeSBwYXRoIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljYWxseSBuYW1lIHRoZSBCdWlsZCBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW55IGludGVybWVkaWF0ZSBmb2xkZXJzIGluIHRoZSBwYXRobmFtZSBtdXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgY3JlYXRlcyBhIEJ1aWxkIERpcmVjdG9yeSBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ZUC0mUE9LWVZFUlNJT047PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5IHdpdGhpbiB0aGUgZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgPGZpbGVuYW1lPm15YnVpbGRzPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkY2QgJEhPTUUKKyAgICAgJCBzb3VyY2UgJEhPTUUvcG9reS8mT0VfSU5JVF9GSUxFOyAkSE9NRS9teWJ1aWxkcy9ZUC0mUE9LWVZFUlNJT047CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgQnVpbGQgRGlyZWN0b3J5IGNvbnRhaW5zCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGUgYnVpbGQgc3lzdGVtIHVzZXMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICBpdHMgd29yay4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiBjYW5ub3QgYmUgdW5kZXIgTkZTLgorICAgICAgICAgICAgICAgICAgICAgICAgVGh1cywgYnkgZGVmYXVsdCwgdGhlIEJ1aWxkIERpcmVjdG9yeSBjYW5ub3QgYmUgdW5kZXIgTkZTLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IG5lZWQgdGhlIEJ1aWxkIERpcmVjdG9yeSB0byBiZSB1bmRlciBORlMsCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHNldCB0aGlzIHVwIGJ5IHNldHRpbmcgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgdG8gdXNlIGEgbG9jYWwgZHJpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBlZmZlY3RpdmVseSBzZXBhcmF0ZXMgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIDxmaWxlbmFtZT5UT1BESVI8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgdGhlIEJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNsYXNzZXM6PC9lbXBoYXNpcz4gRmlsZXMgdGhhdCBwcm92aWRlIGZvciBsb2dpYyBlbmNhcHN1bGF0aW9uCisgICAgICAgICAgICAgICAgYW5kIGluaGVyaXRhbmNlIHNvIHRoYXQgY29tbW9ubHkgdXNlZCBwYXR0ZXJucyBjYW4gYmUgZGVmaW5lZCBvbmNlIGFuZCB0aGVuIGVhc2lseSB1c2VkCisgICAgICAgICAgICAgICAgaW4gbXVsdGlwbGUgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICBGb3IgcmVmZXJlbmNlIGluZm9ybWF0aW9uIG9uIHRoZSBZb2N0byBQcm9qZWN0IGNsYXNzZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMnPkNsYXNzZXM8L3VsaW5rPiIgY2hhcHRlciBvZiB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgICAgICAgICAgQ2xhc3MgZmlsZXMgZW5kIHdpdGggdGhlIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+IGZpbGVuYW1lIGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29uZmlndXJhdGlvbiBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpbiB2YXJpb3VzIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZXMgcHJvdmlkZXMgZ2xvYmFsIGRlZmluaXRpb25zIG9mIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSBpbgorICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgICAgIGNvbnRhaW5zIHVzZXItZGVmaW5lZCB2YXJpYWJsZXMgdGhhdCBhZmZlY3QgZXZlcnkgYnVpbGQuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3kuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGRlZmluZXMgWW9jdG8gImRpc3RybyIgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB1c2VkIG9ubHkgd2hlbiBidWlsZGluZyB3aXRoIHRoaXMgcG9saWN5LgorICAgICAgICAgICAgICAgIE1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcywgd2hpY2gKKyAgICAgICAgICAgICAgICBhcmUgbG9jYXRlZCB0aHJvdWdob3V0IHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LCBkZWZpbmUKKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIHNwZWNpZmljIGhhcmR3YXJlIGFuZCBhcmUgb25seSB1c2VkIHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICBmb3IgdGhhdCB0YXJnZXQgKGUuZy4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hY2hpbmUvYmVhZ2xlYm9uZS5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgZGVmaW5lcyB2YXJpYWJsZXMgZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBBUk0gQ29ydGV4LUE4CisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgYm9hcmQpLgorICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gZmlsZXMgZW5kIHdpdGggYSA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGVuYW1lIGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluJz4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluIGdlbmVyYWwsIGEgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluIGlzIGEgY29sbGVjdGlvbiBvZgorICAgICAgICAgICAgICAgICAgICBzb2Z0d2FyZSBkZXZlbG9wbWVudCB0b29scyBhbmQgdXRpbGl0aWVzIHRoYXQgcnVuIG9uIG9uZQorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgYW5kIGFsbG93IHlvdSB0byBkZXZlbG9wIHNvZnR3YXJlIGZvciBhCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCwgb3IgdGFyZ2V0ZWQsIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgdG9vbGNoYWlucyBjb250YWluIGNyb3NzLWNvbXBpbGVycywgbGlua2VycywgYW5kCisgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2VycyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0cyB0d28gZGlmZmVyZW50IGNyb3NzLWRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbnM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSB0b29sY2hhaW4gb25seSB1c2VkIGJ5IGFuZCB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHdoZW4gYnVpbGRpbmcgYW4gaW1hZ2UgZm9yIGEgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgcmVsb2NhdGFibGUgdG9vbGNoYWluIHVzZWQgb3V0c2lkZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgYnkgZGV2ZWxvcGVycyB3aGVuIGRldmVsb3BpbmcgYXBwbGljYXRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3aWxsIHJ1biBvbiBhIHRhcmdldGVkIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMgdGhpcyByZWxvY2F0YWJsZSBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbiBpcyByZWZlcnJlZCB0byBhcyB0aGUgbWV0YS10b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDcmVhdGlvbiBvZiB0aGVzZSB0b29sY2hhaW5zIGlzIHNpbXBsZSBhbmQgYXV0b21hdGVkLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdG9vbGNoYWluIGNvbmNlcHRzIGFzIHRoZXkgYXBwbHkgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbi1nZW5lcmF0aW9uJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW4gR2VuZXJhdGlvbjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlbG9jYXRhYmxlIHRvb2xjaGFpbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsnPllvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW1hZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBbiBpbWFnZSBpcyBhbiBhcnRpZmFjdCBvZiB0aGUgQml0QmFrZSBidWlsZCBwcm9jZXNzIGdpdmVuCisgICAgICAgICAgICAgICAgYSBjb2xsZWN0aW9uIG9mIHJlY2lwZXMgYW5kIHJlbGF0ZWQgTWV0YWRhdGEuCisgICAgICAgICAgICAgICAgSW1hZ2VzIGFyZSB0aGUgYmluYXJ5IG91dHB1dCB0aGF0IHJ1biBvbiBzcGVjaWZpYyBoYXJkd2FyZSBvcgorICAgICAgICAgICAgICAgIFFFTVUgYW5kIGFyZSB1c2VkIGZvciBzcGVjaWZpYyB1c2UtY2FzZXMuCisgICAgICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiB0aGUgc3VwcG9ydGVkIGltYWdlIHR5cGVzIHRoYXQgdGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWltYWdlcyc+SW1hZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdsYXllcic+PGVtcGhhc2lzPkxheWVyOjwvZW1waGFzaXM+IEEgY29sbGVjdGlvbiBvZiByZWNpcGVzIHJlcHJlc2VudGluZyB0aGUgY29yZSwKKyAgICAgICAgICAgICAgICBhIEJTUCwgb3IgYW4gYXBwbGljYXRpb24gc3RhY2suCisgICAgICAgICAgICAgICAgRm9yIGEgZGlzY3Vzc2lvbiBzcGVjaWZpY2FsbHkgb24gQlNQIExheWVycywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNic3AtbGF5ZXJzJz5CU1AgTGF5ZXJzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1ApCisgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J21ldGEtdG9vbGNoYWluJz48ZW1waGFzaXM+TWV0YS1Ub29sY2hhaW46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBIHRlcm0gc29tZXRpbWVzIHVzZWQgZm9yCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdtZXRhZGF0YSc+PGVtcGhhc2lzPk1ldGFkYXRhOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIGZpbGVzIHRoYXQgQml0QmFrZSBwYXJzZXMgd2hlbiBidWlsZGluZyBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICBJbiBnZW5lcmFsLCBNZXRhZGF0YSBpbmNsdWRlcyByZWNpcGVzLCBjbGFzc2VzLCBhbmQKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgICAgIEluIHRoZSBjb250ZXh0IG9mIHRoZSBrZXJuZWwgKCJrZXJuZWwgTWV0YWRhdGEiKSwKKyAgICAgICAgICAgICAgICBpdCByZWZlcnMgdG8gTWV0YWRhdGEgaW4gdGhlIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBicmFuY2hlcyBvZiB0aGUga2VybmVsIHNvdXJjZSBHaXQgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdvZS1jb3JlJz48ZW1waGFzaXM+T0UtQ29yZTo8L2VtcGhhc2lzPiBBIGNvcmUgc2V0IG9mIE1ldGFkYXRhIG9yaWdpbmF0aW5nCisgICAgICAgICAgICAgICAgd2l0aCBPcGVuRW1iZWRkZWQgKE9FKSB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIE9FIGFuZCB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICBUaGlzIE1ldGFkYXRhIGlzIGZvdW5kIGluIHRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nYnVpbGQtc3lzdGVtLXRlcm0nPjxlbXBoYXNpcz5PcGVuRW1iZWRkZWQgQnVpbGQgU3lzdGVtOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBzcGVjaWZpYyB0byB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyBiYXNlZCBvbiBhbm90aGVyIHByb2plY3Qga25vd24KKyAgICAgICAgICAgICAgICBhcyAiUG9reSIsIHdoaWNoIHVzZXMKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdiaXRiYWtlLXRlcm0nPkJpdEJha2U8L2xpbms+IGFzIHRoZSB0YXNrCisgICAgICAgICAgICAgICAgZXhlY3V0b3IuCisgICAgICAgICAgICAgICAgVGhyb3VnaG91dCB0aGUgWW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIHNldCwgdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gc2ltcGx5CisgICAgICAgICAgICAgICAgYXMgInRoZSBidWlsZCBzeXN0ZW0iLgorICAgICAgICAgICAgICAgIElmIG90aGVyIGJ1aWxkIHN5c3RlbXMsIHN1Y2ggYXMgYSBob3N0IG9yIHRhcmdldCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBhcmUgcmVmZXJlbmNlZCwgdGhlIGRvY3VtZW50YXRpb24gY2xlYXJseSBzdGF0ZXMgdGhlCisgICAgICAgICAgICAgICAgZGlmZmVyZW5jZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHNvbWUgaGlzdG9yaWNhbCBpbmZvcm1hdGlvbiBhYm91dCBQb2t5LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Bva3knPlBva3k8L2xpbms+IHRlcm0uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QYWNrYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgSW4gdGhlIGNvbnRleHQgb2YgdGhlIFlvY3RvIFByb2plY3QsIHRoaXMgdGVybSByZWZlcnMgdG8gYQorICAgICAgICAgICAgICAgIHJlY2lwZSdzIHBhY2thZ2VkIG91dHB1dCBwcm9kdWNlZCBieSBCaXRCYWtlIChpLmUuIGEKKyAgICAgICAgICAgICAgICAiYmFrZWQgcmVjaXBlIikuCisgICAgICAgICAgICAgICAgQSBwYWNrYWdlIGlzIGdlbmVyYWxseSB0aGUgY29tcGlsZWQgYmluYXJpZXMgcHJvZHVjZWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICByZWNpcGUncyBzb3VyY2VzLgorICAgICAgICAgICAgICAgIFlvdSAiYmFrZSIgc29tZXRoaW5nIGJ5IHJ1bm5pbmcgaXQgdGhyb3VnaCBCaXRCYWtlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5JdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgdGVybSAicGFja2FnZSIgY2FuLCBpbiBnZW5lcmFsLCBoYXZlIHN1YnRsZQorICAgICAgICAgICAgICAgIG1lYW5pbmdzLiAgRm9yIGV4YW1wbGUsIHRoZSBwYWNrYWdlcyByZWZlcnJlZCB0byBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNwYWNrYWdlcyc+VGhlIEJ1aWxkIEhvc3QgUGFja2FnZXM8L3VsaW5rPiIgc2VjdGlvbiBhcmUKKyAgICAgICAgICAgICAgICBjb21waWxlZCBiaW5hcmllcyB0aGF0LCB3aGVuIGluc3RhbGxlZCwgYWRkIGZ1bmN0aW9uYWxpdHkgdG8geW91ciBMaW51eAorICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbi48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+QW5vdGhlciBwb2ludCB3b3J0aCBub3RpbmcgaXMgdGhhdCBoaXN0b3JpY2FsbHkgd2l0aGluIHRoZSBZb2N0byBQcm9qZWN0LAorICAgICAgICAgICAgICAgIHJlY2lwZXMgd2VyZSByZWZlcnJlZCB0byBhcyBwYWNrYWdlcyAtIHRodXMsIHRoZSBleGlzdGVuY2Ugb2Ygc2V2ZXJhbCBCaXRCYWtlCisgICAgICAgICAgICAgICAgdmFyaWFibGVzIHRoYXQgYXJlIHNlZW1pbmdseSBtaXMtbmFtZWQsCisgICAgICAgICAgICAgICAgKGUuZy4gPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L3VsaW5rPiwgYW5kCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBFJz48ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPjwvdWxpbms+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGFja2FnZSBHcm91cHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBcmJpdHJhcnkgZ3JvdXBzIG9mIHNvZnR3YXJlIFJlY2lwZXMuCisgICAgICAgICAgICAgICAgWW91IHVzZSBwYWNrYWdlIGdyb3VwcyB0byBob2xkIHJlY2lwZXMgdGhhdCwgd2hlbiBidWlsdCwKKyAgICAgICAgICAgICAgICB1c3VhbGx5IGFjY29tcGxpc2ggYSBzaW5nbGUgdGFzay4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYSBwYWNrYWdlIGdyb3VwIGNvdWxkIGNvbnRhaW4gdGhlIHJlY2lwZXMgZm9yIGEKKyAgICAgICAgICAgICAgICBjb21wYW554oCZcyBwcm9wcmlldGFyeSBvciB2YWx1ZS1hZGQgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgT3IsIHRoZSBwYWNrYWdlIGdyb3VwIGNvdWxkIGNvbnRhaW4gdGhlIHJlY2lwZXMgdGhhdCBlbmFibGUKKyAgICAgICAgICAgICAgICBncmFwaGljcy4KKyAgICAgICAgICAgICAgICBBIHBhY2thZ2UgZ3JvdXAgaXMgcmVhbGx5IGp1c3QgYW5vdGhlciByZWNpcGUuCisgICAgICAgICAgICAgICAgQmVjYXVzZSBwYWNrYWdlIGdyb3VwIGZpbGVzIGFyZSByZWNpcGVzLCB0aGV5IGVuZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlbmFtZSBleHRlbnNpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J3Bva3knPjxlbXBoYXNpcz5Qb2t5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIHRlcm0gInBva3kiIGNhbiBtZWFuIHNldmVyYWwgdGhpbmdzLgorICAgICAgICAgICAgICAgIEluIGl0cyBtb3N0IGdlbmVyYWwgc2Vuc2UsIGl0IGlzIGFuIG9wZW4tc291cmNlCisgICAgICAgICAgICAgICAgcHJvamVjdCB0aGF0IHdhcyBpbml0aWFsbHkgZGV2ZWxvcGVkIGJ5IE9wZW5lZEhhbmQuCisgICAgICAgICAgICAgICAgV2l0aCBPcGVuZWRIYW5kLCBwb2t5IHdhcyBkZXZlbG9wZWQgb2ZmIG9mIHRoZSBleGlzdGluZworICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYmVjb21pbmcgYSBjb21tZXJjaWFsbHkKKyAgICAgICAgICAgICAgICBzdXBwb3J0YWJsZSBidWlsZCBzeXN0ZW0gZm9yIGVtYmVkZGVkIExpbnV4LgorICAgICAgICAgICAgICAgIEFmdGVyIEludGVsIENvcnBvcmF0aW9uIGFjcXVpcmVkIE9wZW5lZEhhbmQsIHRoZQorICAgICAgICAgICAgICAgIHByb2plY3QgcG9reSBiZWNhbWUgdGhlIGJhc2lzIGZvciB0aGUgWW9jdG8gUHJvamVjdCdzCisgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5XaXRoaW4gdGhlIFlvY3RvIFByb2plY3Qgc291cmNlIHJlcG9zaXRvcmllcywKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IGV4aXN0cyBhcyBhIHNlcGFyYXRlIEdpdAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgeW91IGNhbiBjbG9uZSB0byB5aWVsZCBhIGxvY2FsIGNvcHkgb24geW91cgorICAgICAgICAgICAgICAgIGhvc3Qgc3lzdGVtLgorICAgICAgICAgICAgICAgIFRodXMsICJwb2t5IiBjYW4gcmVmZXIgdG8gdGhlIGxvY2FsIGNvcHkgb2YgdGhlIFNvdXJjZQorICAgICAgICAgICAgICAgIERpcmVjdG9yeSB1c2VkIGZvciBkZXZlbG9wbWVudCB3aXRoaW4gdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgUHJvamVjdC48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+RmluYWxseSwgInBva3kiIGNhbiByZWZlciB0byB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgKGkuZS4gZGlzdHJpYnV0aW9uKSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICBQcm9qZWN0IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IHRvIGJ1aWxkIGFuIGltYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZWNpcGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBIHNldCBvZiBpbnN0cnVjdGlvbnMgZm9yIGJ1aWxkaW5nIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIEEgcmVjaXBlIGRlc2NyaWJlcyB3aGVyZSB5b3UgZ2V0IHNvdXJjZSBjb2RlLCB3aGljaCBwYXRjaGVzCisgICAgICAgICAgICAgICAgdG8gYXBwbHksIGhvdyB0byBjb25maWd1cmUgdGhlIHNvdXJjZSwgaG93IHRvIGNvbXBpbGUgaXQgYW5kIHNvIG9uLgorICAgICAgICAgICAgICAgIFJlY2lwZXMgYWxzbyBkZXNjcmliZSBkZXBlbmRlbmNpZXMgZm9yIGxpYnJhcmllcyBvciBmb3Igb3RoZXIKKyAgICAgICAgICAgICAgICByZWNpcGVzLgorICAgICAgICAgICAgICAgIFJlY2lwZXMgcmVwcmVzZW50IHRoZSBsb2dpY2FsIHVuaXQgb2YgZXhlY3V0aW9uLCB0aGUgc29mdHdhcmUKKyAgICAgICAgICAgICAgICB0byBidWlsZCwgdGhlIGltYWdlcyB0byBidWlsZCwgYW5kIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZSBleHRlbnNpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3NvdXJjZS1kaXJlY3RvcnknPjxlbXBoYXNpcz5Tb3VyY2UgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhpcyB0ZXJtIHJlZmVycyB0byB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBjcmVhdGVkIGFzIGEgcmVzdWx0CisgICAgICAgICAgICAgICAgb2YgY3JlYXRpbmcgYSBsb2NhbCBjb3B5IG9mIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IEdpdAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgPGZpbGVuYW1lPmdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIG9yIGV4cGFuZGluZyBhIHJlbGVhc2VkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gdGFyYmFsbC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRpbmcgYSBsb2NhbCBjb3B5IG9mIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5IGlzIHRoZSByZWNvbW1lbmRlZCBtZXRob2QgZm9yIHNldHRpbmcgdXAKKyAgICAgICAgICAgICAgICAgICAgeW91ciBTb3VyY2UgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBTb21ldGltZXMgeW91IG1pZ2h0IGhlYXIgdGhlIHRlcm0gInBva3kgZGlyZWN0b3J5IiB1c2VkIHRvIHJlZmVyCisgICAgICAgICAgICAgICAgdG8gdGhpcyBkaXJlY3Rvcnkgc3RydWN0dXJlLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IGZpbGUgb3IKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG5hbWVzIHRoYXQgY29udGFpbiBzcGFjZXMuCisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdGhhdCB0aGUgU291cmNlIERpcmVjdG9yeSB5b3UgdXNlIGRvZXMgbm90IGNvbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlc2UgdHlwZXMgb2YgbmFtZXMuCisgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBTb3VyY2UgRGlyZWN0b3J5IGNvbnRhaW5zIEJpdEJha2UsIERvY3VtZW50YXRpb24sCisgICAgICAgICAgICAgICAgTWV0YWRhdGEgYW5kIG90aGVyIGZpbGVzIHRoYXQgYWxsIHN1cHBvcnQgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgbXVzdCBoYXZlIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGluIHBsYWNlIG9uCisgICAgICAgICAgICAgICAgeW91ciBkZXZlbG9wbWVudCBzeXN0ZW0gaW4gb3JkZXIgdG8gZG8gYW55IGRldmVsb3BtZW50IHVzaW5nCisgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+V2hlbiB5b3UgY3JlYXRlIGEgbG9jYWwgY29weSBvZiB0aGUgR2l0IHJlcG9zaXRvcnksIHlvdQorICAgICAgICAgICAgICAgIGNhbiBuYW1lIHRoZSByZXBvc2l0b3J5IGFueXRoaW5nIHlvdSBsaWtlLgorICAgICAgICAgICAgICAgIFRocm91Z2hvdXQgbXVjaCBvZiB0aGUgZG9jdW1lbnRhdGlvbiwgInBva3kiCisgICAgICAgICAgICAgICAgaXMgdXNlZCBhcyB0aGUgbmFtZSBvZiB0aGUgdG9wLWxldmVsIGZvbGRlciBvZiB0aGUgbG9jYWwgY29weSBvZgorICAgICAgICAgICAgICAgIHRoZSBwb2t5IEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIFNvLCBmb3IgZXhhbXBsZSwgY2xvbmluZyB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5IHJlc3VsdHMgaW4gYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSB3aG9zZSB0b3AtbGV2ZWwKKyAgICAgICAgICAgICAgICBmb2xkZXIgaXMgYWxzbyBuYW1lZCAicG9reSIuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+V2hpbGUgaXQgaXMgbm90IHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSB0YXJiYWxsIGV4cGFuc2lvbgorICAgICAgICAgICAgICAgIHRvIHNldCB1cCB0aGUgU291cmNlIERpcmVjdG9yeSwgaWYgeW91IGRvLCB0aGUgdG9wLWxldmVsCisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG5hbWUgb2YgdGhlIFNvdXJjZSBEaXJlY3RvcnkgaXMgZGVyaXZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSB0YXJiYWxsLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBkb3dubG9hZGluZyBhbmQgdW5wYWNraW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZZT0NUT19QT0tZX1RBUkJBTEw7PC9maWxlbmFtZT4gcmVzdWx0cyBpbiBhCisgICAgICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeSB3aG9zZSByb290IGZvbGRlciBpcyBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mWU9DVE9fUE9LWTs8L2ZpbGVuYW1lPi48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5JdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUKKyAgICAgICAgICAgICAgICBTb3VyY2UgRGlyZWN0b3J5IGNyZWF0ZWQgYnkgdW5wYWNraW5nIGEgcmVsZWFzZWQgdGFyYmFsbCBhcworICAgICAgICAgICAgICAgIGNvbXBhcmVkIHRvIGNsb25pbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFdoZW4geW91IHVucGFjayBhIHRhcmJhbGwsIHlvdSBoYXZlIGFuIGV4YWN0IGNvcHkgb2YgdGhlIGZpbGVzCisgICAgICAgICAgICAgICAgYmFzZWQgb24gdGhlIHRpbWUgb2YgcmVsZWFzZSAtIGEgZml4ZWQgcmVsZWFzZSBwb2ludC4KKyAgICAgICAgICAgICAgICBBbnkgY2hhbmdlcyB5b3UgbWFrZSB0byB5b3VyIGxvY2FsIGZpbGVzIGluIHRoZSBTb3VyY2UgRGlyZWN0b3J5CisgICAgICAgICAgICAgICAgYXJlIG9uIHRvcCBvZiB0aGUgcmVsZWFzZSBhbmQgd2lsbCByZW1haW4gbG9jYWwgb25seS4KKyAgICAgICAgICAgICAgICBPbiB0aGUgb3RoZXIgaGFuZCwgd2hlbiB5b3UgY2xvbmUgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeSwgeW91IGhhdmUgYW4gYWN0aXZlIGRldmVsb3BtZW50IHJlcG9zaXRvcnkgd2l0aAorICAgICAgICAgICAgICAgIGFjY2VzcyB0byB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yeSdzIGJyYW5jaGVzIGFuZCB0YWdzLgorICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgYW55IGxvY2FsIGNoYW5nZXMgeW91IG1ha2UgdG8gdGhlIGxvY2FsCisgICAgICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeSBjYW4gYmUgbGF0ZXIgYXBwbGllZCB0byBhY3RpdmUgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBicmFuY2hlcyBvZiB0aGUgdXBzdHJlYW0gPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5LjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNvbmNlcHRzIHJlbGF0ZWQgdG8gR2l0CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzLCBicmFuY2hlcywgYW5kIHRhZ3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVwb3NpdG9yaWVzLXRhZ3MtYW5kLWJyYW5jaGVzJz5SZXBvc2l0b3JpZXMsIFRhZ3MsIGFuZCBCcmFuY2hlczwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VGFzazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEEgdW5pdCBvZiBleGVjdXRpb24gZm9yIEJpdEJha2UgKGUuZy4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1mZXRjaCc+PGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtcGF0Y2gnPjxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXBzdHJlYW06PC9lbXBoYXNpcz4gQSByZWZlcmVuY2UgdG8gc291cmNlIGNvZGUgb3IgcmVwb3NpdG9yaWVzCisgICAgICAgICAgICAgICAgdGhhdCBhcmUgbm90IGxvY2FsIHRvIHRoZSBkZXZlbG9wbWVudCBzeXN0ZW0gYnV0IGxvY2F0ZWQgaW4gYSBtYXN0ZXIgYXJlYSB0aGF0IGlzIGNvbnRyb2xsZWQKKyAgICAgICAgICAgICAgICBieSB0aGUgbWFpbnRhaW5lciBvZiB0aGUgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGluIG9yZGVyIGZvciBhIGRldmVsb3BlciB0byB3b3JrIG9uIGEgcGFydGljdWxhciBwaWVjZSBvZiBjb2RlLCB0aGV5IG5lZWQgdG8KKyAgICAgICAgICAgICAgICBmaXJzdCBnZXQgYSBjb3B5IG9mIGl0IGZyb20gYW4gInVwc3RyZWFtIiBzb3VyY2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2xpY2Vuc2luZyc+CisgICAgPHRpdGxlPkxpY2Vuc2luZzwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQmVjYXVzZSBvcGVuIHNvdXJjZSBwcm9qZWN0cyBhcmUgb3BlbiB0byB0aGUgcHVibGljLCB0aGV5IGhhdmUgZGlmZmVyZW50IGxpY2Vuc2luZyBzdHJ1Y3R1cmVzIGluIHBsYWNlLgorICAgICAgICBMaWNlbnNlIGV2b2x1dGlvbiBmb3IgYm90aCBPcGVuIFNvdXJjZSBhbmQgRnJlZSBTb2Z0d2FyZSBoYXMgYW4gaW50ZXJlc3RpbmcgaGlzdG9yeS4KKyAgICAgICAgSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIHRoaXMgaGlzdG9yeSwgeW91IGNhbiBmaW5kIGJhc2ljIGluZm9ybWF0aW9uIGhlcmU6CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvT3Blbi1zb3VyY2VfbGljZW5zZSc+T3BlbiBzb3VyY2UgbGljZW5zZSBoaXN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0naHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GcmVlX3NvZnR3YXJlX2xpY2Vuc2UnPkZyZWUgc29mdHdhcmUgbGljZW5zZQorICAgICAgICAgICAgaGlzdG9yeTwvdWxpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEluIGdlbmVyYWwsIHRoZSBZb2N0byBQcm9qZWN0IGlzIGJyb2FkbHkgbGljZW5zZWQgdW5kZXIgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKKyAgICAgICAgKE1JVCkgTGljZW5zZS4KKyAgICAgICAgTUlUIGxpY2Vuc2luZyBwZXJtaXRzIHRoZSByZXVzZSBvZiBzb2Z0d2FyZSB3aXRoaW4gcHJvcHJpZXRhcnkgc29mdHdhcmUgYXMgbG9uZyBhcyB0aGUKKyAgICAgICAgbGljZW5zZSBpcyBkaXN0cmlidXRlZCB3aXRoIHRoYXQgc29mdHdhcmUuCisgICAgICAgIE1JVCBpcyBhbHNvIGNvbXBhdGlibGUgd2l0aCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkuCisgICAgICAgIFBhdGNoZXMgdG8gdGhlIFlvY3RvIFByb2plY3QgZm9sbG93IHRoZSB1cHN0cmVhbSBsaWNlbnNpbmcgc2NoZW1lLgorICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gb24gdGhlIE1JVCBsaWNlbnNlCisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwJz5oZXJlPC91bGluaz4uCisgICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBvbiB0aGUgR05VIEdQTCA8dWxpbmsgdXJsPSdodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0xHUEwtMy4wJz4KKyAgICAgICAgaGVyZTwvdWxpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGVuIHlvdSBidWlsZCBhbiBpbWFnZSB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCwgdGhlIGJ1aWxkIHByb2Nlc3MgdXNlcyBhCisgICAgICAgIGtub3duIGxpc3Qgb2YgbGljZW5zZXMgdG8gZW5zdXJlIGNvbXBsaWFuY2UuCisgICAgICAgIFlvdSBjYW4gZmluZCB0aGlzIGxpc3QgaW4gdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+IGF0CisgICAgICAgIDxmaWxlbmFtZT5tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlczwvZmlsZW5hbWU+LgorICAgICAgICBPbmNlIHRoZSBidWlsZCBjb21wbGV0ZXMsIHRoZSBsaXN0IG9mIGFsbCBsaWNlbnNlcyBmb3VuZCBhbmQgdXNlZCBkdXJpbmcgdGhhdCBidWlsZCBhcmUKKyAgICAgICAga2VwdCBpbiB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+IGF0CisgICAgICAgIDxmaWxlbmFtZT50bXAvZGVwbG95L2xpY2Vuc2VzPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIGEgbW9kdWxlIHJlcXVpcmVzIGEgbGljZW5zZSB0aGF0IGlzIG5vdCBpbiB0aGUgYmFzZSBsaXN0LCB0aGUgYnVpbGQgcHJvY2VzcworICAgICAgICBnZW5lcmF0ZXMgYSB3YXJuaW5nIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgIFRoZXNlIHRvb2xzIG1ha2UgaXQgZWFzaWVyIGZvciBhIGRldmVsb3BlciB0byBiZSBjZXJ0YWluIG9mIHRoZSBsaWNlbnNlcyB3aXRoIHdoaWNoCisgICAgICAgIHRoZWlyIHNoaXBwZWQgcHJvZHVjdHMgbXVzdCBjb21wbHkuCisgICAgICAgIEhvd2V2ZXIsIGV2ZW4gd2l0aCB0aGVzZSB0b29scyBpdCBpcyBzdGlsbCB1cCB0byB0aGUgZGV2ZWxvcGVyIHRvIHJlc29sdmUgcG90ZW50aWFsIGxpY2Vuc2luZyBpc3N1ZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBiYXNlIGxpc3Qgb2YgbGljZW5zZXMgdXNlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBTb2Z0d2FyZSBQYWNrYWdlCisgICAgICAgIERhdGEgRXhjaGFuZ2UgKFNQRFgpIGxpc3QgYW5kIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIChPU0kpIHByb2plY3RzLgorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vc3BkeC5vcmcnPlNQRFggR3JvdXA8L3VsaW5rPiBpcyBhIHdvcmtpbmcgZ3JvdXAgb2YgdGhlIExpbnV4IEZvdW5kYXRpb24KKyAgICAgICAgdGhhdCBtYWludGFpbnMgYSBzcGVjaWZpY2F0aW9uCisgICAgICAgIGZvciBhIHN0YW5kYXJkIGZvcm1hdCBmb3IgY29tbXVuaWNhdGluZyB0aGUgY29tcG9uZW50cywgbGljZW5zZXMsIGFuZCBjb3B5cmlnaHRzCisgICAgICAgIGFzc29jaWF0ZWQgd2l0aCBhIHNvZnR3YXJlIHBhY2thZ2UuCisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9vcGVuc291cmNlLm9yZyc+T1NJPC91bGluaz4gaXMgYSBjb3Jwb3JhdGlvbiBkZWRpY2F0ZWQgdG8gdGhlIE9wZW4gU291cmNlCisgICAgICAgIERlZmluaXRpb24gYW5kIHRoZSBlZmZvcnQgZm9yIHJldmlld2luZyBhbmQgYXBwcm92aW5nIGxpY2Vuc2VzIHRoYXQKKyAgICAgICAgY29uZm9ybSB0byB0aGUgT3BlbiBTb3VyY2UgRGVmaW5pdGlvbiAoT1NEKS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBmaW5kIGEgbGlzdCBvZiB0aGUgY29tYmluZWQgU1BEWCBhbmQgT1NJIGxpY2Vuc2VzIHRoYXQgdGhlCisgICAgICAgIFlvY3RvIFByb2plY3QgdXNlcyBpbiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPm1ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGluIHlvdXIKKyAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiB0aGF0IGNhbiBoZWxwIHlvdSBtYWludGFpbiBjb21wbGlhbmNlIHdpdGggdmFyaW91cworICAgICAgICBvcGVuIHNvdXJjZSBsaWNlbnNpbmcgZHVyaW5nIHRoZSBsaWZlY3ljbGUgb2YgYSBwcm9kdWN0IGNyZWF0ZWQgdXNpbmcKKyAgICAgICAgdGhlIFlvY3RvIFByb2plY3QsIHNlZSB0aGUKKyAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21haW50YWluaW5nLW9wZW4tc291cmNlLWxpY2Vuc2UtY29tcGxpYW5jZS1kdXJpbmcteW91ci1wcm9kdWN0cy1saWZlY3ljbGUnPk1haW50YWluaW5nIE9wZW4gU291cmNlIExpY2Vuc2UgQ29tcGxpYW5jZSBEdXJpbmcgWW91ciBQcm9kdWN0J3MgTGlmZWN5Y2xlPC9saW5rPiIKKyAgICAgICAgc2VjdGlvbi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdnaXQnPgorICAgIDx0aXRsZT5HaXQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IG1ha2VzIGV4dGVuc2l2ZSB1c2Ugb2YgR2l0LAorICAgICAgICB3aGljaCBpcyBhIGZyZWUsIG9wZW4gc291cmNlIGRpc3RyaWJ1dGVkIHZlcnNpb24gY29udHJvbCBzeXN0ZW0uCisgICAgICAgIEdpdCBzdXBwb3J0cyBkaXN0cmlidXRlZCBkZXZlbG9wbWVudCwgbm9uLWxpbmVhciBkZXZlbG9wbWVudCwgYW5kIGNhbiBoYW5kbGUgbGFyZ2UgcHJvamVjdHMuCisgICAgICAgIEl0IGlzIGJlc3QgdGhhdCB5b3UgaGF2ZSBzb21lIGZ1bmRhbWVudGFsIHVuZGVyc3RhbmRpbmcgb2YgaG93IEdpdCB0cmFja3MgcHJvamVjdHMgYW5kCisgICAgICAgIGhvdyB0byB3b3JrIHdpdGggR2l0IGlmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBZb2N0byBQcm9qZWN0IGZvciBkZXZlbG9wbWVudC4KKyAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGEgcXVpY2sgb3ZlcnZpZXcgb2YgaG93IEdpdCB3b3JrcyBhbmQgcHJvdmlkZXMgeW91IHdpdGggYSBzdW1tYXJ5CisgICAgICAgIG9mIHNvbWUgZXNzZW50aWFsIEdpdCBjb21tYW5kcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gR2l0LCBzZWUKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2RvY3VtZW50YXRpb24nPjwvdWxpbms+LgorICAgICAgICBJZiB5b3UgbmVlZCB0byBkb3dubG9hZCBHaXQsIGdvIHRvIDx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9kb3dubG9hZCc+PC91bGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlcG9zaXRvcmllcy10YWdzLWFuZC1icmFuY2hlcyc+CisgICAgICAgIDx0aXRsZT5SZXBvc2l0b3JpZXMsIFRhZ3MsIGFuZCBCcmFuY2hlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciBpbiB0aGUgc2VjdGlvbgorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3lvY3RvLXByb2plY3QtcmVwb3NpdG9yaWVzJz5Zb2N0byBQcm9qZWN0IFNvdXJjZSBSZXBvc2l0b3JpZXM8L2xpbms+IiwKKyAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IG1haW50YWlucyBzb3VyY2UgcmVwb3NpdG9yaWVzIGF0CisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPjwvdWxpbms+LgorICAgICAgICAgICAgSWYgeW91IGxvb2sgYXQgdGhpcyB3ZWItaW50ZXJmYWNlIG9mIHRoZSByZXBvc2l0b3JpZXMsIGVhY2ggaXRlbSBpcyBhIHNlcGFyYXRlCisgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgR2l0IHJlcG9zaXRvcmllcyB1c2UgYnJhbmNoaW5nIHRlY2huaXF1ZXMgdGhhdCB0cmFjayBjb250ZW50IGNoYW5nZSAobm90IGZpbGVzKQorICAgICAgICAgICAgd2l0aGluIGEgcHJvamVjdCAoZS5nLiBhIG5ldyBmZWF0dXJlIG9yIHVwZGF0ZWQgZG9jdW1lbnRhdGlvbikuCisgICAgICAgICAgICBDcmVhdGluZyBhIHRyZWUtbGlrZSBzdHJ1Y3R1cmUgYmFzZWQgb24gcHJvamVjdCBkaXZlcmdlbmNlIGFsbG93cyBmb3IgZXhjZWxsZW50IGhpc3RvcmljYWwKKyAgICAgICAgICAgIGluZm9ybWF0aW9uIG92ZXIgdGhlIGxpZmUgb2YgYSBwcm9qZWN0LgorICAgICAgICAgICAgVGhpcyBtZXRob2RvbG9neSBhbHNvIGFsbG93cyBmb3IgYW4gZW52aXJvbm1lbnQgZnJvbSB3aGljaCB5b3UgY2FuIGRvIGxvdHMgb2YKKyAgICAgICAgICAgIGxvY2FsIGV4cGVyaW1lbnRhdGlvbiBvbiBwcm9qZWN0cyBhcyB5b3UgZGV2ZWxvcCBjaGFuZ2VzIG9yIG5ldyBmZWF0dXJlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBHaXQgcmVwb3NpdG9yeSByZXByZXNlbnRzIGFsbCBkZXZlbG9wbWVudCBlZmZvcnRzIGZvciBhIGdpdmVuIHByb2plY3QuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIEdpdCByZXBvc2l0b3J5IDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gY29udGFpbnMgYWxsIGNoYW5nZXMKKyAgICAgICAgICAgIGFuZCBkZXZlbG9wbWVudHMgZm9yIFBva3kgb3ZlciB0aGUgY291cnNlIG9mIGl0cyBlbnRpcmUgbGlmZS4KKyAgICAgICAgICAgIFRoYXQgbWVhbnMgdGhhdCBhbGwgY2hhbmdlcyB0aGF0IG1ha2UgdXAgYWxsIHJlbGVhc2VzIGFyZSBjYXB0dXJlZC4KKyAgICAgICAgICAgIFRoZSByZXBvc2l0b3J5IG1haW50YWlucyBhIGNvbXBsZXRlIGhpc3Rvcnkgb2YgY2hhbmdlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIGFueSByZXBvc2l0b3J5IGJ5ICJjbG9uaW5nIiBpdCB3aXRoIHRoZSBHaXQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5jbG9uZTwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICBXaGVuIHlvdSBjbG9uZSBhIEdpdCByZXBvc2l0b3J5LCB5b3UgZW5kIHVwIHdpdGggYW4gaWRlbnRpY2FsIGNvcHkgb2YgdGhlCisgICAgICAgICAgICByZXBvc2l0b3J5IG9uIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtLgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBhIGxvY2FsIGNvcHkgb2YgYSByZXBvc2l0b3J5LCB5b3UgY2FuIHRha2Ugc3RlcHMgdG8gZGV2ZWxvcCBsb2NhbGx5LgorICAgICAgICAgICAgRm9yIGV4YW1wbGVzIG9uIGhvdyB0byBjbG9uZSBHaXQgcmVwb3NpdG9yaWVzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZ2V0dGluZy1zZXR1cCc+R2V0dGluZyBTZXQgVXA8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IEdpdCB0cmFja3MgY29udGVudCBjaGFuZ2UgYW5kCisgICAgICAgICAgICBub3QgZmlsZXMuCisgICAgICAgICAgICBHaXQgdXNlcyAiYnJhbmNoZXMiIHRvIG9yZ2FuaXplIGRpZmZlcmVudCBkZXZlbG9wbWVudCBlZmZvcnRzLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgaGFzCisgICAgICAgICAgICBzZXZlcmFsIGJyYW5jaGVzIHRoYXQgaW5jbHVkZSB0aGUgY3VycmVudAorICAgICAgICAgICAgPGZpbGVuYW1lPiZESVNUUk9fTkFNRTs8L2ZpbGVuYW1lPiBicmFuY2gsIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1hc3RlcjwvZmlsZW5hbWU+IGJyYW5jaCwgYW5kIG1hbnkgYnJhbmNoZXMgZm9yIHBhc3QKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZXMuCisgICAgICAgICAgICBZb3UgY2FuIHNlZSBhbGwgdGhlIGJyYW5jaGVzIGJ5IGdvaW5nIHRvCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2kvcG9reS8nPjwvdWxpbms+IGFuZAorICAgICAgICAgICAgY2xpY2tpbmcgb24gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpL3Bva3kvcmVmcy9oZWFkcyc+Wy4uLl08L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICBsaW5rIGJlbmVhdGggdGhlICJCcmFuY2giIGhlYWRpbmcuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEVhY2ggb2YgdGhlc2UgYnJhbmNoZXMgcmVwcmVzZW50cyBhIHNwZWNpZmljIGFyZWEgb2YgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1hc3RlcjwvZmlsZW5hbWU+IGJyYW5jaCByZXByZXNlbnRzIHRoZSBjdXJyZW50IG9yIG1vc3QgcmVjZW50CisgICAgICAgICAgICBkZXZlbG9wbWVudC4KKyAgICAgICAgICAgIEFsbCBvdGhlciBicmFuY2hlcyByZXByZXNlbnQgb2Zmc2hvb3RzIG9mIHRoZSA8ZmlsZW5hbWU+bWFzdGVyPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGJyYW5jaC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIGEgbG9jYWwgY29weSBvZiBhIEdpdCByZXBvc2l0b3J5LCB0aGUgY29weSBoYXMgdGhlIHNhbWUgc2V0CisgICAgICAgICAgICBvZiBicmFuY2hlcyBhcyB0aGUgb3JpZ2luYWwuCisgICAgICAgICAgICBUaGlzIG1lYW5zIHlvdSBjYW4gdXNlIEdpdCB0byBjcmVhdGUgYSBsb2NhbCB3b3JraW5nIGFyZWEgKGFsc28gY2FsbGVkIGEgYnJhbmNoKQorICAgICAgICAgICAgdGhhdCB0cmFja3MgYSBzcGVjaWZpYyBkZXZlbG9wbWVudCBicmFuY2ggZnJvbSB0aGUgc291cmNlIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgaW4gb3RoZXIgd29yZHMsIHlvdSBjYW4gZGVmaW5lIHlvdXIgbG9jYWwgR2l0IGVudmlyb25tZW50IHRvIHdvcmsgb24gYW55IGRldmVsb3BtZW50CisgICAgICAgICAgICBicmFuY2ggaW4gdGhlIHJlcG9zaXRvcnkuCisgICAgICAgICAgICBUbyBoZWxwIGlsbHVzdHJhdGUsIGhlcmUgaXMgYSBzZXQgb2YgY29tbWFuZHMgdGhhdCBjcmVhdGVzIGEgbG9jYWwgY29weSBvZiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkgYW5kIHRoZW4gY3JlYXRlcyBhbmQgY2hlY2tzIG91dCBhIGxvY2FsCisgICAgICAgICAgICBHaXQgYnJhbmNoIHRoYXQgdHJhY2tzIHRoZSBZb2N0byBQcm9qZWN0ICZESVNUUk87IFJlbGVhc2UgKCZESVNUUk9fTkFNRTspIGRldmVsb3BtZW50OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reQorICAgICAkIGNkIHBva3kKKyAgICAgJCBnaXQgY2hlY2tvdXQgLWIgJkRJU1RST19OQU1FOyBvcmlnaW4vJkRJU1RST19OQU1FOworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgbmFtZSBvZiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiB5b3VyIGxvY2FsCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgaXMgInBva3kiIGFuZCB0aGUgbmFtZSBvZiB0aGF0IGxvY2FsIHdvcmtpbmcgYXJlYSAobG9jYWwgYnJhbmNoKQorICAgICAgICAgICAgeW91IGp1c3QgY3JlYXRlZCBhbmQgY2hlY2tlZCBvdXQgaXMgIiZESVNUUk9fTkFNRTsiLgorICAgICAgICAgICAgVGhlIGZpbGVzIGluIHlvdXIgbG9jYWwgcmVwb3NpdG9yeSBub3cgcmVmbGVjdCB0aGUgc2FtZSBmaWxlcyB0aGF0CisgICAgICAgICAgICBhcmUgaW4gdGhlICImRElTVFJPX05BTUU7IiBkZXZlbG9wbWVudCBicmFuY2ggb2YgdGhlCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0J3MgInBva3kiIHVwc3RyZWFtIHJlcG9zaXRvcnkuCisgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IHdoZW4geW91IGNyZWF0ZSBhbmQgY2hlY2tvdXQgYQorICAgICAgICAgICAgbG9jYWwgd29ya2luZyBicmFuY2ggYmFzZWQgb24gYSBicmFuY2ggbmFtZSwKKyAgICAgICAgICAgIHlvdXIgbG9jYWwgZW52aXJvbm1lbnQgbWF0Y2hlcyB0aGUgInRpcCIgb2YgdGhhdCBkZXZlbG9wbWVudCBicmFuY2gKKyAgICAgICAgICAgIGF0IHRoZSB0aW1lIHlvdSBjcmVhdGVkIHlvdXIgbG9jYWwgYnJhbmNoLCB3aGljaCBjb3VsZCBiZQorICAgICAgICAgICAgZGlmZmVyZW50IGZyb20gdGhlIGZpbGVzIGF0IHRoZSB0aW1lIG9mIGEgc2ltaWxhcmx5IG5hbWVkIHJlbGVhc2UuCisgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgY3JlYXRpbmcgYW5kIGNoZWNraW5nIG91dCBhIGxvY2FsIGJyYW5jaCBiYXNlZCBvbgorICAgICAgICAgICAgdGhlICImRElTVFJPX05BTUU7IiBicmFuY2ggbmFtZSBpcyBub3QgdGhlIHNhbWUgYXMKKyAgICAgICAgICAgIGNsb25pbmcgYW5kIGNoZWNraW5nIG91dCB0aGUgIm1hc3RlciIgYnJhbmNoLgorICAgICAgICAgICAgS2VlcCByZWFkaW5nIHRvIHNlZSBob3cgeW91IGNyZWF0ZSBhIGxvY2FsIHNuYXBzaG90IG9mIGEgWW9jdG8KKyAgICAgICAgICAgIFByb2plY3QgUmVsZWFzZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgR2l0IHVzZXMgInRhZ3MiIHRvIG1hcmsgc3BlY2lmaWMgY2hhbmdlcyBpbiBhIHJlcG9zaXRvcnkuCisgICAgICAgICAgICBUeXBpY2FsbHksIGEgdGFnIGlzIHVzZWQgdG8gbWFyayBhIHNwZWNpYWwgcG9pbnQgc3VjaCBhcyB0aGUgZmluYWwKKyAgICAgICAgICAgIGNoYW5nZSBiZWZvcmUgYSBwcm9qZWN0IGlzIHJlbGVhc2VkLgorICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIHRhZ3MgdXNlZCB3aXRoIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IEdpdAorICAgICAgICAgICAgcmVwb3NpdG9yeSBieSBnb2luZyB0bworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpL3Bva3kvJz48L3VsaW5rPiBhbmQKKyAgICAgICAgICAgIGNsaWNraW5nIG9uIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9wb2t5L3JlZnMvdGFncyc+Wy4uLl08L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICBsaW5rIGJlbmVhdGggdGhlICJUYWciIGhlYWRpbmcuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvbWUga2V5IHRhZ3MgYXJlIDxmaWxlbmFtZT5keWxhbi05LjAuNDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPmRvcmEtMTAuMC40PC9maWxlbmFtZT4sIDxmaWxlbmFtZT5kYWlzeS0xMS4wLjI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kaXp6eS0xMi4wLjA8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+JkRJU1RST19OQU1FOy0mUE9LWVZFUlNJT047PC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGVzZSB0YWdzIHJlcHJlc2VudCBZb2N0byBQcm9qZWN0IHJlbGVhc2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIHRoZSBHaXQgcmVwb3NpdG9yeSwgeW91IGFsc28gaGF2ZSBhY2Nlc3MgdG8gYWxsIHRoZQorICAgICAgICAgICAgdGFncy4KKyAgICAgICAgICAgIFNpbWlsYXIgdG8gYnJhbmNoZXMsIHlvdSBjYW4gY3JlYXRlIGFuZCBjaGVja291dCBhIGxvY2FsIHdvcmtpbmcgR2l0IGJyYW5jaCBiYXNlZAorICAgICAgICAgICAgb24gYSB0YWcgbmFtZS4KKyAgICAgICAgICAgIFdoZW4geW91IGRvIHRoaXMsIHlvdSBnZXQgYSBzbmFwc2hvdCBvZiB0aGUgR2l0IHJlcG9zaXRvcnkgdGhhdCByZWZsZWN0cworICAgICAgICAgICAgdGhlIHN0YXRlIG9mIHRoZSBmaWxlcyB3aGVuIHRoZSBjaGFuZ2Ugd2FzIG1hZGUgYXNzb2NpYXRlZCB3aXRoIHRoYXQgdGFnLgorICAgICAgICAgICAgVGhlIG1vc3QgY29tbW9uIHVzZSBpcyB0byBjaGVja291dCBhIHdvcmtpbmcgYnJhbmNoIHRoYXQgbWF0Y2hlcyBhIHNwZWNpZmljCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2UuCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgfgorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5CisgICAgICQgY2QgcG9reQorICAgICAkIGdpdCBjaGVja291dCAtYiBteS0mRElTVFJPX05BTUU7LSZQT0tZVkVSU0lPTjsgJkRJU1RST19OQU1FOy0mUE9LWVZFUlNJT047CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBuYW1lIG9mIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHlvdXIgbG9jYWwgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgRmlsZXMgR2l0IHJlcG9zaXRvcnkgaXMgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEFuZCwgdGhlIG5hbWUgb2YgdGhlIGxvY2FsIGJyYW5jaCB5b3UgaGF2ZSBjcmVhdGVkIGFuZCBjaGVja2VkIG91dCBpcworICAgICAgICAgICAgPGZpbGVuYW1lPm15LSZESVNUUk9fTkFNRTstJlBPS1lWRVJTSU9OOzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIGZpbGVzIGluIHlvdXIgcmVwb3NpdG9yeSBub3cgZXhhY3RseSBtYXRjaCB0aGUgWW9jdG8gUHJvamVjdCAmRElTVFJPOworICAgICAgICAgICAgUmVsZWFzZSB0YWcgKDxmaWxlbmFtZT4mRElTVFJPX05BTUU7LSZQT0tZVkVSU0lPTjs8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IHdoZW4geW91IGNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBsb2NhbAorICAgICAgICAgICAgd29ya2luZyBicmFuY2ggYmFzZWQgb24gYSB0YWcsIHlvdXIgZW52aXJvbm1lbnQgbWF0Y2hlcyBhIHNwZWNpZmljIHBvaW50CisgICAgICAgICAgICBpbiB0aW1lIGFuZCBub3QgdGhlIGVudGlyZSBkZXZlbG9wbWVudCBicmFuY2guCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmFzaWMtY29tbWFuZHMnPgorICAgICAgICA8dGl0bGU+QmFzaWMgQ29tbWFuZHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgR2l0IGhhcyBhbiBleHRlbnNpdmUgc2V0IG9mIGNvbW1hbmRzIHRoYXQgbGV0cyB5b3UgbWFuYWdlIGNoYW5nZXMgYW5kIHBlcmZvcm0KKyAgICAgICAgICAgIGNvbGxhYm9yYXRpb24gb3ZlciB0aGUgbGlmZSBvZiBhIHByb2plY3QuCisgICAgICAgICAgICBDb252ZW5pZW50bHkgdGhvdWdoLCB5b3UgY2FuIG1hbmFnZSB3aXRoIGEgc21hbGwgc2V0IG9mIGJhc2ljIG9wZXJhdGlvbnMgYW5kIHdvcmtmbG93cworICAgICAgICAgICAgb25jZSB5b3UgdW5kZXJzdGFuZCB0aGUgYmFzaWMgcGhpbG9zb3BoeSBiZWhpbmQgR2l0LgorICAgICAgICAgICAgWW91IGRvIG5vdCBoYXZlIHRvIGJlIGFuIGV4cGVydCBpbiBHaXQgdG8gYmUgZnVuY3Rpb25hbC4KKyAgICAgICAgICAgIEEgZ29vZCBwbGFjZSB0byBsb29rIGZvciBpbnN0cnVjdGlvbiBvbiBhIG1pbmltYWwgc2V0IG9mIEdpdCBjb21tYW5kcyBpcworICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2RvY3VtZW50YXRpb24nPmhlcmU8L3VsaW5rPi4KKyAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIGRvd25sb2FkIEdpdCwgeW91IGNhbiBkbyBzbworICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2Rvd25sb2FkJz5oZXJlPC91bGluaz4sIGFsdGhvdWdoCisgICAgICAgICAgICBhbnkgcmVhc29uYWJseSBjdXJyZW50IExpbnV4IGRpc3RyaWJ1dGlvbiBzaG91bGQgYWxyZWFkeSBoYXZlIGFuCisgICAgICAgICAgICBpbnN0YWxsYWJsZSBwYWNrYWdlIGZvciBHaXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBkbyBub3Qga25vdyBtdWNoIGFib3V0IEdpdCwgeW91IHNob3VsZCBlZHVjYXRlCisgICAgICAgICAgICB5b3Vyc2VsZiBieSB2aXNpdGluZyB0aGUgbGlua3MgcHJldmlvdXNseSBtZW50aW9uZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBicmllZmx5IGRlc2NyaWJlcyBzb21lIGJhc2ljIEdpdCBvcGVyYXRpb25zIGFzIGEgd2F5IHRvIGdldCBzdGFydGVkLgorICAgICAgICAgICAgQXMgd2l0aCBhbnkgc2V0IG9mIGNvbW1hbmRzLCB0aGlzIGxpc3QgKGluIG1vc3QgY2FzZXMpIHNpbXBseSBzaG93cyB0aGUgYmFzZSBjb21tYW5kIGFuZAorICAgICAgICAgICAgb21pdHMgdGhlIG1hbnkgYXJndW1lbnRzIHRoZXkgc3VwcG9ydC4KKyAgICAgICAgICAgIFNlZSB0aGUgR2l0IGRvY3VtZW50YXRpb24gZm9yIGNvbXBsZXRlIGRlc2NyaXB0aW9ucyBhbmQgc3RyYXRlZ2llcyBvbiBob3cgdG8gdXNlIHRoZXNlIGNvbW1hbmRzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgaW5pdDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IEluaXRpYWxpemVzIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2Fubm90IHVzZSBHaXQgY29tbWFuZHMgdW5sZXNzIHlvdSBoYXZlIGEgPGZpbGVuYW1lPi5naXQ8L2ZpbGVuYW1lPiByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBjbG9uZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZXMgYSBsb2NhbCBjbG9uZSBvZiBhIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBEdXJpbmcgY29sbGFib3JhdGlvbiwgdGhpcyBjb21tYW5kIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEKKyAgICAgICAgICAgICAgICAgICAgbG9jYWwgR2l0IHJlcG9zaXRvcnkgdGhhdCBpcyBvbiBlcXVhbCBmb290aW5nIHdpdGggYSBmZWxsb3cKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcGVy4oCZcyBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGFkZDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IFN0YWdlcyB1cGRhdGVkIGZpbGUgY29udGVudHMKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGluZGV4IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgR2l0IHVzZXMgdG8gdHJhY2sgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc3RhZ2UgYWxsIGZpbGVzIHRoYXQgaGF2ZSBjaGFuZ2VkIGJlZm9yZSB5b3UgY2FuIGNvbW1pdCB0aGVtLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBjb21taXQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBDcmVhdGVzIGEgImNvbW1pdCIgdGhhdCBkb2N1bWVudHMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGNoYW5nZXMgeW91IG1hZGUuCisgICAgICAgICAgICAgICAgICAgIENvbW1pdHMgYXJlIHVzZWQgZm9yIGhpc3RvcmljYWwgcHVycG9zZXMsIGZvciBkZXRlcm1pbmluZyBpZiBhIG1haW50YWluZXIgb2YgYSBwcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIHdpbGwgYWxsb3cgdGhlIGNoYW5nZSwgYW5kIGZvciB1bHRpbWF0ZWx5IHB1c2hpbmcgdGhlIGNoYW5nZSBmcm9tIHlvdXIgbG9jYWwgR2l0IHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgcHJvamVjdOKAmXMgdXBzdHJlYW0gKG9yIG1hc3RlcikgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgc3RhdHVzPC9maWxlbmFtZT46PC9lbXBoYXNpcz4gUmVwb3J0cyBhbnkgbW9kaWZpZWQgZmlsZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICBwb3NzaWJseSBuZWVkIHRvIGJlIHN0YWdlZCBhbmQgY29tbWl0dGVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBjaGVja291dCAmbHQ7YnJhbmNoLW5hbWUmZ3Q7PC9maWxlbmFtZT46PC9lbXBoYXNpcz4gQ2hhbmdlcworICAgICAgICAgICAgICAgICAgICB5b3VyIHdvcmtpbmcgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgYW5hbG9nb3VzIHRvICJjZCIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGNoZWNrb3V0IOKAk2IgJmx0O3dvcmtpbmctYnJhbmNoJmd0OzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IENyZWF0ZXMKKyAgICAgICAgICAgICAgICAgICAgYSB3b3JraW5nIGJyYW5jaCBvbiB5b3VyIGxvY2FsIG1hY2hpbmUgd2hlcmUgeW91IGNhbiBpc29sYXRlIHdvcmsuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGEgZ29vZCBpZGVhIHRvIHVzZSBsb2NhbCBicmFuY2hlcyB3aGVuIGFkZGluZyBzcGVjaWZpYyBmZWF0dXJlcyBvciBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHdheSBpZiB5b3UgZG8gbm90IGxpa2Ugd2hhdCB5b3UgaGF2ZSBkb25lIHlvdSBjYW4gZWFzaWx5IGdldCByaWQgb2YgdGhlIHdvcmsuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGJyYW5jaDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IFJlcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcgbG9jYWwgYnJhbmNoZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIHRlbGxzIHlvdSB0aGUgYnJhbmNoIGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IHdvcmtpbmcuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGJyYW5jaCAtRCAmbHQ7YnJhbmNoLW5hbWUmZ3Q7PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRGVsZXRlcyBhbiBleGlzdGluZyBsb2NhbCBicmFuY2guCisgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGJlIGluIGEgbG9jYWwgYnJhbmNoIG90aGVyIHRoYW4gdGhlIG9uZSB5b3UgYXJlIGRlbGV0aW5nCisgICAgICAgICAgICAgICAgICAgIGluIG9yZGVyIHRvIGRlbGV0ZSA8ZmlsZW5hbWU+Jmx0O2JyYW5jaC1uYW1lJmd0OzwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBwdWxsPC9maWxlbmFtZT46PC9lbXBoYXNpcz4gUmV0cmlldmVzIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZyb20gYW4gdXBzdHJlYW0gR2l0CisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgYW5kIHBsYWNlcyBpdCBpbiB5b3VyIGxvY2FsIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBZb3UgdXNlIHRoaXMgY29tbWFuZCB0byBtYWtlIHN1cmUgeW91IGFyZSBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICBmcm9tIHdoaWNoIHlvdSBhcmUgYmFzaW5nIGNoYW5nZXMgKC5lLmcuIHRoZSBtYXN0ZXIgYnJhbmNoKS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgcHVzaDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNlbmRzIGFsbCB5b3VyIGNvbW1pdHRlZCBsb2NhbCBjaGFuZ2VzIHRvIGFuIHVwc3RyZWFtIEdpdAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IChlLmcuIGEgY29udHJpYnV0aW9uIHJlcG9zaXRvcnkpLgorICAgICAgICAgICAgICAgICAgICBUaGUgbWFpbnRhaW5lciBvZiB0aGUgcHJvamVjdCBkcmF3cyBmcm9tIHRoZXNlIHJlcG9zaXRvcmllcworICAgICAgICAgICAgICAgICAgICB3aGVuIGFkZGluZyBjaGFuZ2VzIHRvIHRoZSBwcm9qZWN04oCZcyBtYXN0ZXIgcmVwb3NpdG9yeSBvcgorICAgICAgICAgICAgICAgICAgICBvdGhlciBkZXZlbG9wbWVudCBicmFuY2guCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBtZXJnZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IENvbWJpbmVzIG9yIGFkZHMgY2hhbmdlcyBmcm9tIG9uZQorICAgICAgICAgICAgICAgICAgICBsb2NhbCBicmFuY2ggb2YgeW91ciByZXBvc2l0b3J5IHdpdGggYW5vdGhlciBicmFuY2guCisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IGNyZWF0ZSBhIGxvY2FsIEdpdCByZXBvc2l0b3J5LCB0aGUgZGVmYXVsdCBicmFuY2ggaXMgbmFtZWQgIm1hc3RlciIuCisgICAgICAgICAgICAgICAgICAgIEEgdHlwaWNhbCB3b3JrZmxvdyBpcyB0byBjcmVhdGUgYSB0ZW1wb3JhcnkgYnJhbmNoIGZvciBpc29sYXRlZCB3b3JrLCBtYWtlIGFuZCBjb21taXQgeW91cgorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLCBzd2l0Y2ggdG8geW91ciBsb2NhbCBtYXN0ZXIgYnJhbmNoLCBtZXJnZSB0aGUgY2hhbmdlcyBmcm9tIHRoZSB0ZW1wb3JhcnkgYnJhbmNoIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgIGxvY2FsIG1hc3RlciBicmFuY2gsIGFuZCB0aGVuIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGJyYW5jaC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgY2hlcnJ5LXBpY2s8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBDaG9vc2UgYW5kIGFwcGx5IHNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdHMgZnJvbSBvbmUgYnJhbmNoIGludG8gYW5vdGhlciBicmFuY2guCisgICAgICAgICAgICAgICAgICAgIFRoZXJlIGFyZSB0aW1lcyB3aGVuIHlvdSBtaWdodCBub3QgYmUgYWJsZSB0byBtZXJnZSBhbGwgdGhlIGNoYW5nZXMgaW4gb25lIGJyYW5jaCB3aXRoCisgICAgICAgICAgICAgICAgICAgIGFub3RoZXIgYnV0IG5lZWQgdG8gcGljayBvdXQgY2VydGFpbiBvbmVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdGs8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBQcm92aWRlcyBhIEdVSSB2aWV3IG9mIHRoZSBicmFuY2hlcworICAgICAgICAgICAgICAgICAgICBhbmQgY2hhbmdlcyBpbiB5b3VyIGxvY2FsIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgYSBnb29kIHdheSB0byBncmFwaGljYWxseSBzZWUgd2hlcmUgdGhpbmdzIGhhdmUgZGl2ZXJnZWQgaW4geW91cgorICAgICAgICAgICAgICAgICAgICBsb2NhbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBsb2c8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBSZXBvcnRzIGEgaGlzdG9yeSBvZiB5b3VyIGNoYW5nZXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGRpZmY8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBEaXNwbGF5cyBsaW5lLWJ5LWxpbmUgZGlmZmVyZW5jZXMKKyAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiB5b3VyIGxvY2FsIHdvcmtpbmcgZmlsZXMgYW5kIHRoZSBzYW1lIGZpbGVzIGluIHRoZSB1cHN0cmVhbSBHaXQgcmVwb3NpdG9yeSB0aGF0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoIGN1cnJlbnRseSB0cmFja3MuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3dvcmtmbG93cyc+CisgICAgPHRpdGxlPldvcmtmbG93czwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIHNvbWUgb3ZlcnZpZXcgb24gd29ya2Zsb3dzIHVzaW5nIEdpdC4KKyAgICAgICAgSW4gcGFydGljdWxhciwgdGhlIGluZm9ybWF0aW9uIGNvdmVycyBiYXNpYyBwcmFjdGljZXMgdGhhdCBkZXNjcmliZSByb2xlcyBhbmQgYWN0aW9ucyBpbiBhCisgICAgICAgIGNvbGxhYm9yYXRpdmUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgICAgIEFnYWluLCBpZiB5b3UgYXJlIGZhbWlsaWFyIHdpdGggdGhpcyB0eXBlIG9mIGRldmVsb3BtZW50IGVudmlyb25tZW50LCB5b3UgbWlnaHQgd2FudCB0byBqdXN0CisgICAgICAgIHNraXAgdGhpcyBzZWN0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBmaWxlcyBhcmUgbWFpbnRhaW5lZCB1c2luZyBHaXQgaW4gYSAibWFzdGVyIiBicmFuY2ggd2hvc2UgR2l0IGhpc3RvcnkKKyAgICAgICAgdHJhY2tzIGV2ZXJ5IGNoYW5nZSBhbmQgd2hvc2Ugc3RydWN0dXJlIHByb3ZpZGVzIGJyYW5jaGVzIGZvciBhbGwgZGl2ZXJnaW5nIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgIEFsdGhvdWdoIHRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIEdpdCwgbWFueSBvcGVuIHNvdXJjZSBwcm9qZWN0cyBkbyBzby4KKyAgICAgICAgRm9yIHRoZSBZb2N0byBQcm9qZWN0LCBhIGtleSBpbmRpdmlkdWFsIGNhbGxlZCB0aGUgIm1haW50YWluZXIiIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgIm1hc3RlciIKKyAgICAgICAgYnJhbmNoIG9mIGEgZ2l2ZW4gR2l0IHJlcG9zaXRvcnkuCisgICAgICAgIFRoZSAibWFzdGVyIiBicmFuY2ggaXMgdGhlIOKAnHVwc3RyZWFt4oCdIHJlcG9zaXRvcnkgd2hlcmUgdGhlIGZpbmFsIGJ1aWxkcyBvZiB0aGUgcHJvamVjdCBvY2N1ci4KKyAgICAgICAgVGhlIG1haW50YWluZXIgaXMgcmVzcG9uc2libGUgZm9yIGFjY2VwdGluZyBjaGFuZ2VzIGZyb20gb3RoZXIgZGV2ZWxvcGVycyBhbmQgZm9yCisgICAgICAgIG9yZ2FuaXppbmcgdGhlIHVuZGVybHlpbmcgYnJhbmNoIHN0cnVjdHVyZSB0byByZWZsZWN0IHJlbGVhc2Ugc3RyYXRlZ2llcyBhbmQgc28gZm9ydGguCisgICAgICAgIDxub3RlPkZvciBpbmZvcm1hdGlvbiBvbiBmaW5kaW5nIG91dCB3aG8gaXMgcmVzcG9uc2libGUgZm9yIChtYWludGFpbnMpCisgICAgICAgICAgICBhIHBhcnRpY3VsYXIgYXJlYSBvZiBjb2RlLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBwcm9qZWN0IGFsc28gaGFzIGFuIHVwc3RyZWFtIGNvbnRyaWJ1dGlvbiBHaXQgcmVwb3NpdG9yeSBuYW1lZAorICAgICAgICA8ZmlsZW5hbWU+cG9reS1jb250cmliPC9maWxlbmFtZT4uCisgICAgICAgIFlvdSBjYW4gc2VlIGFsbCB0aGUgYnJhbmNoZXMgaW4gdGhpcyByZXBvc2l0b3J5IHVzaW5nIHRoZSB3ZWIgaW50ZXJmYWNlCisgICAgICAgIG9mIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsnPlNvdXJjZSBSZXBvc2l0b3JpZXM8L3VsaW5rPiBvcmdhbml6ZWQKKyAgICAgICAgd2l0aGluIHRoZSAiUG9reSBTdXBwb3J0IiBhcmVhLgorICAgICAgICBUaGVzZSBicmFuY2hlcyB0ZW1wb3JhcmlseSBob2xkIGNoYW5nZXMgdG8gdGhlIHByb2plY3QgdGhhdCBoYXZlIGJlZW4KKyAgICAgICAgc3VibWl0dGVkIG9yIGNvbW1pdHRlZCBieSB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCB0ZWFtIGFuZCBieQorICAgICAgICBjb21tdW5pdHkgbWVtYmVycyB3aG8gY29udHJpYnV0ZSB0byB0aGUgcHJvamVjdC4KKyAgICAgICAgVGhlIG1haW50YWluZXIgZGV0ZXJtaW5lcyBpZiB0aGUgY2hhbmdlcyBhcmUgcXVhbGlmaWVkIHRvIGJlIG1vdmVkCisgICAgICAgIGZyb20gdGhlICJjb250cmliIiBicmFuY2hlcyBpbnRvIHRoZSAibWFzdGVyIiBicmFuY2ggb2YgdGhlIEdpdAorICAgICAgICByZXBvc2l0b3J5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBEZXZlbG9wZXJzIChpbmNsdWRpbmcgY29udHJpYnV0aW5nIGNvbW11bml0eSBtZW1iZXJzKSBjcmVhdGUgYW5kIG1haW50YWluIGNsb25lZCByZXBvc2l0b3JpZXMKKyAgICAgICAgb2YgdGhlIHVwc3RyZWFtICJtYXN0ZXIiIGJyYW5jaC4KKyAgICAgICAgVGhlc2UgcmVwb3NpdG9yaWVzIGFyZSBsb2NhbCB0byB0aGVpciBkZXZlbG9wbWVudCBwbGF0Zm9ybXMgYW5kIGFyZSB1c2VkIHRvIGRldmVsb3AgY2hhbmdlcy4KKyAgICAgICAgV2hlbiBhIGRldmVsb3BlciBpcyBzYXRpc2ZpZWQgd2l0aCBhIHBhcnRpY3VsYXIgZmVhdHVyZSBvciBjaGFuZ2UsIHRoZXkgInB1c2giIHRoZSBjaGFuZ2VzCisgICAgICAgIHRvIHRoZSBhcHByb3ByaWF0ZSAiY29udHJpYiIgcmVwb3NpdG9yeS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRGV2ZWxvcGVycyBhcmUgcmVzcG9uc2libGUgZm9yIGtlZXBpbmcgdGhlaXIgbG9jYWwgcmVwb3NpdG9yeSB1cC10by1kYXRlIHdpdGggIm1hc3RlciIuCisgICAgICAgIFRoZXkgYXJlIGFsc28gcmVzcG9uc2libGUgZm9yIHN0cmFpZ2h0ZW5pbmcgb3V0IGFueSBjb25mbGljdHMgdGhhdCBtaWdodCBhcmlzZSB3aXRoaW4gZmlsZXMKKyAgICAgICAgdGhhdCBhcmUgYmVpbmcgd29ya2VkIG9uIHNpbXVsdGFuZW91c2x5IGJ5IG1vcmUgdGhhbiBvbmUgcGVyc29uLgorICAgICAgICBBbGwgdGhpcyB3b3JrIGlzIGRvbmUgbG9jYWxseSBvbiB0aGUgZGV2ZWxvcGVy4oCZcyBtYWNoaW5lcyBiZWZvcmUgYW55dGhpbmcgaXMgcHVzaGVkIHRvIGEKKyAgICAgICAgImNvbnRyaWIiIGFyZWEgYW5kIGV4YW1pbmVkIGF0IHRoZSBtYWludGFpbmVy4oCZcyBsZXZlbC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQSBzb21ld2hhdCBmb3JtYWwgbWV0aG9kIGV4aXN0cyBieSB3aGljaCBkZXZlbG9wZXJzIGNvbW1pdCBjaGFuZ2VzIGFuZCBwdXNoIHRoZW0gaW50byB0aGUKKyAgICAgICAgImNvbnRyaWIiIGFyZWEgYW5kIHN1YnNlcXVlbnRseSByZXF1ZXN0IHRoYXQgdGhlIG1haW50YWluZXIgaW5jbHVkZSB0aGVtIGludG8gIm1hc3RlciIKKyAgICAgICAgVGhpcyBwcm9jZXNzIGlzIGNhbGxlZCDigJxzdWJtaXR0aW5nIGEgcGF0Y2jigJ0gb3IgInN1Ym1pdHRpbmcgYSBjaGFuZ2UuIgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gc3VibWl0dGluZyBwYXRjaGVzIGFuZCBjaGFuZ2VzLCBzZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC9saW5rPiIgc2VjdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVG8gc3VtbWFyaXplIHRoZSBlbnZpcm9ubWVudDogIGEgc2luZ2xlIHBvaW50IG9mIGVudHJ5IGV4aXN0cyBmb3IKKyAgICAgICAgY2hhbmdlcyBpbnRvIHRoZSBwcm9qZWN04oCZcyAibWFzdGVyIiBicmFuY2ggb2YgdGhlIEdpdCByZXBvc2l0b3J5LAorICAgICAgICB3aGljaCBpcyBjb250cm9sbGVkIGJ5IHRoZSBwcm9qZWN04oCZcyBtYWludGFpbmVyLgorICAgICAgICBBbmQsIGEgc2V0IG9mIGRldmVsb3BlcnMgZXhpc3Qgd2hvIGluZGVwZW5kZW50bHkgZGV2ZWxvcCwgdGVzdCwgYW5kCisgICAgICAgIHN1Ym1pdCBjaGFuZ2VzIHRvICJjb250cmliIiBhcmVhcyBmb3IgdGhlIG1haW50YWluZXIgdG8gZXhhbWluZS4KKyAgICAgICAgVGhlIG1haW50YWluZXIgdGhlbiBjaG9vc2VzIHdoaWNoIGNoYW5nZXMgYXJlIGdvaW5nIHRvIGJlY29tZSBhCisgICAgICAgIHBlcm1hbmVudCBwYXJ0IG9mIHRoZSBwcm9qZWN0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjNpbiIgYWxpZ249ImxlZnQiIHNjYWxlZml0PSIxIiAvPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGlsZSBlYWNoIGRldmVsb3BtZW50IGVudmlyb25tZW50IGlzIHVuaXF1ZSwgdGhlcmUgYXJlIHNvbWUgYmVzdCBwcmFjdGljZXMgb3IgbWV0aG9kcworICAgICAgICB0aGF0IGhlbHAgZGV2ZWxvcG1lbnQgcnVuIHNtb290aGx5LgorICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3QgZGVzY3JpYmVzIHNvbWUgb2YgdGhlc2UgcHJhY3RpY2VzLgorICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBHaXQgd29ya2Zsb3dzLCBzZWUgdGhlIHdvcmtmbG93IHRvcGljcyBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2Jvb2suZ2l0LXNjbS5jb20nPkdpdCBDb21tdW5pdHkgQm9vazwvdWxpbms+LgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYWtlIFNtYWxsIENoYW5nZXM6PC9lbXBoYXNpcz4gSXQgaXMgYmVzdCB0byBrZWVwIHRoZSBjaGFuZ2VzIHlvdSBjb21taXQKKyAgICAgICAgICAgICAgICBzbWFsbCBhcyBjb21wYXJlZCB0byBidW5kbGluZyBtYW55IGRpc3BhcmF0ZSBjaGFuZ2VzIGludG8gYSBzaW5nbGUgY29tbWl0LgorICAgICAgICAgICAgICAgIFRoaXMgcHJhY3RpY2Ugbm90IG9ubHkga2VlcHMgdGhpbmdzIG1hbmFnZWFibGUgYnV0IGFsc28gYWxsb3dzIHRoZSBtYWludGFpbmVyCisgICAgICAgICAgICAgICAgdG8gbW9yZSBlYXNpbHkgaW5jbHVkZSBvciByZWZ1c2UgY2hhbmdlcy48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+SXQgaXMgYWxzbyBnb29kIHByYWN0aWNlIHRvIGxlYXZlIHRoZSByZXBvc2l0b3J5IGluIGEgc3RhdGUgdGhhdCBhbGxvd3MgeW91IHRvCisgICAgICAgICAgICAgICAgc3RpbGwgc3VjY2Vzc2Z1bGx5IGJ1aWxkIHlvdXIgcHJvamVjdC4gIEluIG90aGVyIHdvcmRzLCBkbyBub3QgY29tbWl0IGhhbGYgb2YgYSBmZWF0dXJlLAorICAgICAgICAgICAgICAgIHRoZW4gYWRkIHRoZSBvdGhlciBoYWxmIGFzIGEgc2VwYXJhdGUsIGxhdGVyIGNvbW1pdC4KKyAgICAgICAgICAgICAgICBFYWNoIGNvbW1pdCBzaG91bGQgdGFrZSB5b3UgZnJvbSBvbmUgYnVpbGRhYmxlIHByb2plY3Qgc3RhdGUgdG8gYW5vdGhlcgorICAgICAgICAgICAgICAgIGJ1aWxkYWJsZSBzdGF0ZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlIEJyYW5jaGVzIExpYmVyYWxseTo8L2VtcGhhc2lzPiBJdCBpcyB2ZXJ5IGVhc3kgdG8gY3JlYXRlLCB1c2UsIGFuZAorICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2NhbCBicmFuY2hlcyBpbiB5b3VyIHdvcmtpbmcgR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgWW91IGNhbiBuYW1lIHRoZXNlIGJyYW5jaGVzIGFueXRoaW5nIHlvdSBsaWtlLgorICAgICAgICAgICAgICAgIEl0IGlzIGhlbHBmdWwgdG8gZ2l2ZSB0aGVtIG5hbWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFydGljdWxhciBmZWF0dXJlIG9yIGNoYW5nZQorICAgICAgICAgICAgICAgIG9uIHdoaWNoIHlvdSBhcmUgd29ya2luZy4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBhcmUgZG9uZSB3aXRoIGEgZmVhdHVyZSBvciBjaGFuZ2UgYW5kIGhhdmUgbWVyZ2VkIGl0CisgICAgICAgICAgICAgICAgaW50byB5b3VyIGxvY2FsIG1hc3RlciBicmFuY2gsIHNpbXBseSBkaXNjYXJkIHRoZSB0ZW1wb3JhcnkKKyAgICAgICAgICAgICAgICBicmFuY2guPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1lcmdlIENoYW5nZXM6PC9lbXBoYXNpcz4gVGhlIDxmaWxlbmFtZT5naXQgbWVyZ2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgYWxsb3dzIHlvdSB0byB0YWtlIHRoZQorICAgICAgICAgICAgICAgIGNoYW5nZXMgZnJvbSBvbmUgYnJhbmNoIGFuZCBmb2xkIHRoZW0gaW50byBhbm90aGVyIGJyYW5jaC4KKyAgICAgICAgICAgICAgICBUaGlzIHByb2Nlc3MgaXMgZXNwZWNpYWxseSBoZWxwZnVsIHdoZW4gbW9yZSB0aGFuIGEgc2luZ2xlIGRldmVsb3BlciBtaWdodCBiZSB3b3JraW5nCisgICAgICAgICAgICAgICAgb24gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzYW1lIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgTWVyZ2luZyBjaGFuZ2VzIGFsc28gYXV0b21hdGljYWxseSBpZGVudGlmaWVzIGFueSBjb2xsaXNpb25zIG9yICJjb25mbGljdHMiCisgICAgICAgICAgICAgICAgdGhhdCBtaWdodCBoYXBwZW4gYXMgYSByZXN1bHQgb2YgdGhlIHNhbWUgbGluZXMgb2YgY29kZSBiZWluZyBhbHRlcmVkIGJ5IHR3byBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICBkZXZlbG9wZXJzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYW5hZ2UgQnJhbmNoZXM6PC9lbXBoYXNpcz4gQmVjYXVzZSBicmFuY2hlcyBhcmUgZWFzeSB0byB1c2UsIHlvdSBzaG91bGQKKyAgICAgICAgICAgICAgICB1c2UgYSBzeXN0ZW0gd2hlcmUgYnJhbmNoZXMgaW5kaWNhdGUgdmFyeWluZyBsZXZlbHMgb2YgY29kZSByZWFkaW5lc3MuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gaGF2ZSBhICJ3b3JrIiBicmFuY2ggdG8gZGV2ZWxvcCBpbiwgYSAidGVzdCIgYnJhbmNoIHdoZXJlIHRoZSBjb2RlIG9yCisgICAgICAgICAgICAgICAgY2hhbmdlIGlzIHRlc3RlZCwgYSAic3RhZ2UiIGJyYW5jaCB3aGVyZSBjaGFuZ2VzIGFyZSByZWFkeSB0byBiZSBjb21taXR0ZWQsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICBBcyB5b3VyIHByb2plY3QgZGV2ZWxvcHMsIHlvdSBjYW4gbWVyZ2UgY29kZSBhY3Jvc3MgdGhlIGJyYW5jaGVzIHRvIHJlZmxlY3QgZXZlci1pbmNyZWFzaW5nCisgICAgICAgICAgICAgICAgc3RhYmxlIHN0YXRlcyBvZiB0aGUgZGV2ZWxvcG1lbnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzZSBQdXNoIGFuZCBQdWxsOjwvZW1waGFzaXM+IFRoZSBwdXNoLXB1bGwgd29ya2Zsb3cgaXMgYmFzZWQgb24gdGhlCisgICAgICAgICAgICAgICAgY29uY2VwdCBvZiBkZXZlbG9wZXJzICJwdXNoaW5nIiBsb2NhbCBjb21taXRzIHRvIGEgcmVtb3RlIHJlcG9zaXRvcnksIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgdXN1YWxseSBhIGNvbnRyaWJ1dGlvbiByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIFRoaXMgd29ya2Zsb3cgaXMgYWxzbyBiYXNlZCBvbiBkZXZlbG9wZXJzICJwdWxsaW5nIiBrbm93biBzdGF0ZXMgb2YgdGhlIHByb2plY3QgZG93biBpbnRvIHRoZWlyCisgICAgICAgICAgICAgICAgbG9jYWwgZGV2ZWxvcG1lbnQgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgIFRoZSB3b3JrZmxvdyBlYXNpbHkgYWxsb3dzIHlvdSB0byBwdWxsIGNoYW5nZXMgc3VibWl0dGVkIGJ5IG90aGVyIGRldmVsb3BlcnMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICB1cHN0cmVhbSByZXBvc2l0b3J5IGludG8geW91ciB3b3JrIGFyZWEgZW5zdXJpbmcgdGhhdCB5b3UgaGF2ZSB0aGUgbW9zdCByZWNlbnQgc29mdHdhcmUKKyAgICAgICAgICAgICAgICBvbiB3aGljaCB0byBkZXZlbG9wLgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGhhcyB0d28gc2NyaXB0cyBuYW1lZCA8ZmlsZW5hbWU+Y3JlYXRlLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZW5kLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+IHRoYXQgc2hpcCB3aXRoIHRoZSByZWxlYXNlIHRvIGZhY2lsaXRhdGUgdGhpcworICAgICAgICAgICAgICAgIHdvcmtmbG93LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGVzZSBzY3JpcHRzIGluIHRoZSA8ZmlsZW5hbWU+c2NyaXB0czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZm9sZGVyIG9mIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZXNlIHNjcmlwdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncHVzaGluZy1hLWNoYW5nZS11cHN0cmVhbSc+VXNpbmcgU2NyaXB0cyB0byBQdXNoIGEgQ2hhbmdlIFVwc3RyZWFtIGFuZCBSZXF1ZXN0IGEgUHVsbDwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBhdGNoIFdvcmtmbG93OjwvZW1waGFzaXM+IFRoaXMgd29ya2Zsb3cgYWxsb3dzIHlvdSB0byBub3RpZnkgdGhlCisgICAgICAgICAgICAgICAgbWFpbnRhaW5lciB0aHJvdWdoIGFuIGVtYWlsIHRoYXQgeW91IGhhdmUgYSBjaGFuZ2UgKG9yIHBhdGNoKSB5b3Ugd291bGQgbGlrZSBjb25zaWRlcmVkCisgICAgICAgICAgICAgICAgZm9yIHRoZSAibWFzdGVyIiBicmFuY2ggb2YgdGhlIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIFRvIHNlbmQgdGhpcyB0eXBlIG9mIGNoYW5nZSwgeW91IGZvcm1hdCB0aGUgcGF0Y2ggYW5kIHRoZW4gc2VuZCB0aGUgZW1haWwgdXNpbmcgdGhlIEdpdCBjb21tYW5kcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgZm9ybWF0LXBhdGNoPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5naXQgc2VuZC1lbWFpbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZXNlIHNjcmlwdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ndHJhY2tpbmctYnVncyc+CisgICAgPHRpdGxlPlRyYWNraW5nIEJ1Z3M8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHVzZXMgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmJ1Z3ppbGxhLm9yZy9hYm91dC8nPkJ1Z3ppbGxhPC91bGluaz4gdG8gdHJhY2sgYnVncy4KKyAgICAgICAgSW1wbGVtZW50YXRpb25zIG9mIEJ1Z3ppbGxhIHdvcmsgd2VsbCBmb3IgZ3JvdXAgZGV2ZWxvcG1lbnQgYmVjYXVzZSB0aGV5IHRyYWNrIGJ1Z3MgYW5kIGNvZGUKKyAgICAgICAgY2hhbmdlcywgY2FuIGJlIHVzZWQgdG8gY29tbXVuaWNhdGUgY2hhbmdlcyBhbmQgcHJvYmxlbXMgd2l0aCBkZXZlbG9wZXJzLCBjYW4gYmUgdXNlZCB0bworICAgICAgICBzdWJtaXQgYW5kIHJldmlldyBwYXRjaGVzLCBhbmQgY2FuIGJlIHVzZWQgdG8gbWFuYWdlIHF1YWxpdHkgYXNzdXJhbmNlLgorICAgICAgICBUaGUgaG9tZSBwYWdlIGZvciB0aGUgWW9jdG8gUHJvamVjdCBpbXBsZW1lbnRhdGlvbiBvZiBCdWd6aWxsYSBpcworICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fQlVHWklMTEFfVVJMOyc+JllPQ1RPX0JVR1pJTExBX1VSTDs8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU29tZXRpbWVzIGl0IGlzIGhlbHBmdWwgdG8gc3VibWl0LCBpbnZlc3RpZ2F0ZSwgb3IgdHJhY2sgYSBidWcgYWdhaW5zdCB0aGUgWW9jdG8gUHJvamVjdCBpdHNlbGYKKyAgICAgICAgc3VjaCBhcyB3aGVuIGRpc2NvdmVyaW5nIGFuIGlzc3VlIHdpdGggc29tZSBjb21wb25lbnQgb2YgdGhlIGJ1aWxkIHN5c3RlbSB0aGF0IGFjdHMgY29udHJhcnkKKyAgICAgICAgdG8gdGhlIGRvY3VtZW50YXRpb24gb3IgeW91ciBleHBlY3RhdGlvbnMuCisgICAgICAgIEZvbGxvd2luZyBpcyB0aGUgZ2VuZXJhbCBwcm9jZWR1cmUgZm9yIHN1Ym1pdHRpbmcgYSBuZXcgYnVnIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgIEJ1Z3ppbGxhLgorICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiBkZWZlY3QgbWFuYWdlbWVudCwgYnVnIHRyYWNraW5nLCBhbmQgZmVhdHVyZSByZXF1ZXN0CisgICAgICAgIHByb2Nlc3NlcyBhbGwgYWNjb21wbGlzaGVkIHRocm91Z2ggdGhlIFlvY3RvIFByb2plY3QgQnVnemlsbGEgb24gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9CdWd6aWxsYV9Db25maWd1cmF0aW9uX2FuZF9CdWdfVHJhY2tpbmcnPndpa2kgcGFnZTwvdWxpbms+LgorICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWx3YXlzIHVzZSB0aGUgWW9jdG8gUHJvamVjdCBpbXBsZW1lbnRhdGlvbiBvZiBCdWd6aWxsYSB0byBzdWJtaXQKKyAgICAgICAgICAgICAgICBhIGJ1Zy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGVuIHN1Ym1pdHRpbmcgYSBuZXcgYnVnLCBiZSBzdXJlIHRvIGNob29zZSB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgICBDbGFzc2lmaWNhdGlvbiwgUHJvZHVjdCwgYW5kIENvbXBvbmVudCBmb3Igd2hpY2ggdGhlIGlzc3VlIHdhcyBmb3VuZC4KKyAgICAgICAgICAgICAgICBEZWZlY3RzIGZvciB0aGUgWW9jdG8gUHJvamVjdCBmYWxsIGludG8gb25lIG9mIHNldmVuIGNsYXNzaWZpY2F0aW9uczoKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IENvbXBvbmVudHMsIEluZnJhc3RydWN0dXJlLCBCdWlsZCBTeXN0ZW0gJmFtcDsgTWV0YWRhdGEsCisgICAgICAgICAgICAgICAgRG9jdW1lbnRhdGlvbiwgUUEvVGVzdGluZywgUnVudGltZSBhbmQgSGFyZHdhcmUuCisgICAgICAgICAgICAgICAgRWFjaCBvZiB0aGVzZSBDbGFzc2lmaWNhdGlvbnMgYnJlYWsgZG93biBpbnRvIG11bHRpcGxlIFByb2R1Y3RzIGFuZCwgaW4gc29tZQorICAgICAgICAgICAgICAgIGNhc2VzLCBtdWx0aXBsZSBDb21wb25lbnRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzZSB0aGUgYnVnIGZvcm0gdG8gY2hvb3NlIHRoZSBjb3JyZWN0IEhhcmR3YXJlIGFuZCBBcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICBmb3Igd2hpY2ggdGhlIGJ1ZyBhcHBsaWVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluZGljYXRlIHRoZSBZb2N0byBQcm9qZWN0IHZlcnNpb24geW91IHdlcmUgdXNpbmcgd2hlbiB0aGUgaXNzdWUKKyAgICAgICAgICAgICAgICBvY2N1cnJlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CZSBzdXJlIHRvIGluZGljYXRlIHRoZSBTZXZlcml0eSBvZiB0aGUgYnVnLgorICAgICAgICAgICAgICAgIFNldmVyaXR5IGNvbW11bmljYXRlcyBob3cgdGhlIGJ1ZyBpbXBhY3RlZCB5b3VyIHdvcmsuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0IHRoZSBhcHByb3ByaWF0ZSAiRG9jdW1lbnRhdGlvbiBjaGFuZ2UiIGl0ZW0KKyAgICAgICAgICAgICAgICBmb3IgdGhlIGJ1Zy4KKyAgICAgICAgICAgICAgICBGaXhpbmcgYSBidWcgbWF5IG9yIG1heSBub3QgYWZmZWN0IHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Qcm92aWRlIGEgYnJpZWYgc3VtbWFyeSBvZiB0aGUgaXNzdWUuCisgICAgICAgICAgICAgICAgVHJ5IHRvIGxpbWl0IHlvdXIgc3VtbWFyeSB0byBqdXN0IGEgbGluZSBvciB0d28gYW5kIGJlIHN1cmUgdG8gY2FwdHVyZSB0aGUKKyAgICAgICAgICAgICAgICBlc3NlbmNlIG9mIHRoZSBpc3N1ZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Qcm92aWRlIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGlzc3VlLgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgcHJvdmlkZSBhcyBtdWNoIGRldGFpbCBhcyB5b3UgY2FuIGFib3V0IHRoZSBjb250ZXh0LCBiZWhhdmlvciwgb3V0cHV0LAorICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCB0aGF0IHN1cnJvdW5kcyB0aGUgaXNzdWUuCisgICAgICAgICAgICAgICAgWW91IGNhbiBldmVuIGF0dGFjaCBzdXBwb3J0aW5nIGZpbGVzIGZvciBvdXRwdXQgZnJvbSBsb2dzIGJ5CisgICAgICAgICAgICAgICAgdXNpbmcgdGhlICJBZGQgYW4gYXR0YWNobWVudCIgYnV0dG9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJlIHN1cmUgdG8gY29weSB0aGUgYXBwcm9wcmlhdGUgcGVvcGxlIGluIHRoZQorICAgICAgICAgICAgICAgICJDQyBMaXN0IiBmb3IgdGhlIGJ1Zy4KKyAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBhYm91dCBmaW5kaW5nIG91dCB3aG8gaXMgcmVzcG9uc2libGUKKyAgICAgICAgICAgICAgICBmb3IgY29kZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdWJtaXQgdGhlIGJ1ZyBieSBjbGlja2luZyB0aGUgIlN1Ym1pdCBCdWciIGJ1dHRvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz4KKyAgICA8dGl0bGU+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQ29udHJpYnV0aW9ucyB0byB0aGUgWW9jdG8gUHJvamVjdCBhbmQgT3BlbkVtYmVkZGVkIGFyZSB2ZXJ5IHdlbGNvbWUuCisgICAgICAgIEJlY2F1c2UgdGhlIHN5c3RlbSBpcyBleHRyZW1lbHkgY29uZmlndXJhYmxlIGFuZCBmbGV4aWJsZSwgd2UgcmVjb2duaXplIHRoYXQgZGV2ZWxvcGVycworICAgICAgICB3aWxsIHdhbnQgdG8gZXh0ZW5kLCBjb25maWd1cmUgb3Igb3B0aW1pemUgaXQgZm9yIHRoZWlyIHNwZWNpZmljIHVzZXMuCisgICAgICAgIFlvdSBzaG91bGQgc2VuZCBwYXRjaGVzIHRvIHRoZSBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3Qgc28gdGhhdCB0aGV5CisgICAgICAgIGNhbiBiZSByZXZpZXdlZCBhbmQgbWVyZ2VkIGJ5IHRoZSBhcHByb3ByaWF0ZSBtYWludGFpbmVyLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCZWZvcmUgc3VibWl0dGluZyBhbnkgY2hhbmdlLCBiZSBzdXJlIHRvIGZpbmQgb3V0IHdobyB5b3Ugc2hvdWxkIGJlCisgICAgICAgIG5vdGlmeWluZy4KKyAgICAgICAgU2V2ZXJhbCBtZXRob2RzIGV4aXN0IHRocm91Z2ggd2hpY2ggeW91IGZpbmQgb3V0IHdobyB5b3Ugc2hvdWxkIGJlIGNvcHlpbmcKKyAgICAgICAgb3Igbm90aWZ5aW5nOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYWludGVuYW5jZSBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgRXhhbWluZSB0aGUgPGZpbGVuYW1lPm1haW50YWluZXJzLmluYzwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgICAgIGF0IDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL2luY2x1ZGU8L2ZpbGVuYW1lPiwgdG8KKyAgICAgICAgICAgICAgICBzZWUgd2hvIGlzIHJlc3BvbnNpYmxlIGZvciBjb2RlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Cb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgUkVBRE1FIEZpbGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgRm9yIEJTUCBtYWludGFpbmVycyBvZiBzdXBwb3J0ZWQgQlNQcywgeW91IGNhbiBleGFtaW5lCisgICAgICAgICAgICAgICAgaW5kaXZpZHVhbCBCU1AgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uLCBzb21lIGxheWVycyAoc3VjaCBhcyB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBsYXllciksCisgICAgICAgICAgICAgICAgaW5jbHVkZSBhIDxmaWxlbmFtZT5NQUlOVEFJTkVSUzwvZmlsZW5hbWU+IGZpbGUgd2hpY2ggY29udGFpbnMKKyAgICAgICAgICAgICAgICBhIGxpc3Qgb2YgYWxsIHN1cHBvcnRlZCBCU1AgbWFpbnRhaW5lcnMgZm9yIHRoYXQgbGF5ZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNlYXJjaCBieSBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVXNpbmcgPGxpbmsgbGlua2VuZD0nZ2l0Jz5HaXQ8L2xpbms+LCB5b3UgY2FuIGVudGVyIHRoZQorICAgICAgICAgICAgICAgIGZvbGxvd2luZyBjb21tYW5kIHRvIGJyaW5nIHVwIGEgc2hvcnQgbGlzdCBvZiBhbGwgY29tbWl0cworICAgICAgICAgICAgICAgIGFnYWluc3QgYSBzcGVjaWZpYyBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZ2l0IHNob3J0bG9nIC0tIDxyZXBsYWNlYWJsZT5maWxlbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEp1c3QgcHJvdmlkZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSBmb3Igd2hpY2ggeW91IGFyZSBpbnRlcmVzdGVkLgorICAgICAgICAgICAgICAgIFRoZSBpbmZvcm1hdGlvbiByZXR1cm5lZCBpcyBub3Qgb3JkZXJlZCBieSBoaXN0b3J5IGJ1dCBkb2VzCisgICAgICAgICAgICAgICAgaW5jbHVkZSBhIGxpc3Qgb2YgYWxsIGNvbW1pdHRlcnMgZ3JvdXBlZCBieSBuYW1lLgorICAgICAgICAgICAgICAgIEZyb20gdGhlIGxpc3QsIHlvdSBjYW4gc2VlIHdobyBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGJ1bGsgb2YKKyAgICAgICAgICAgICAgICB0aGUgY2hhbmdlcyBhZ2FpbnN0IHRoZSBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIGEgbGlzdCBvZiB0aGUgWW9jdG8gUHJvamVjdCBhbmQgcmVsYXRlZCBtYWlsaW5nIGxpc3RzLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXNvdXJjZXMtbWFpbGluZ2xpc3QnPk1haWxpbmcgbGlzdHM8L3VsaW5rPiIgc2VjdGlvbiBpbgorICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBIZXJlIGlzIHNvbWUgZ3VpZGFuY2Ugb24gd2hpY2ggbWFpbGluZyBsaXN0IHRvIHVzZSBmb3Igd2hhdCB0eXBlIG9mIGNoYW5nZToKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgY2hhbmdlcyB0byB0aGUgY29yZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21ldGFkYXRhJz5NZXRhZGF0YTwvbGluaz4sIHNlbmQgeW91ciBwYXRjaCB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmT0VfTElTVFNfVVJMOy9saXN0aW5mby9vcGVuZW1iZWRkZWQtY29yZSc+b3BlbmVtYmVkZGVkLWNvcmU8L3VsaW5rPiBtYWlsaW5nIGxpc3QuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgY2hhbmdlIHRvIGFueXRoaW5nIHVuZGVyIHRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcworICAgICAgICAgICAgICAgIHNob3VsZCBiZSBzZW50IHRvIHRoaXMgbWFpbGluZyBsaXN0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciBjaGFuZ2VzIHRvIEJpdEJha2UgKGFueXRoaW5nIHVuZGVyIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5KSwgc2VuZCB5b3VyIHBhdGNoIHRvIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZPRV9MSVNUU19VUkw7L2xpc3RpbmZvL2JpdGJha2UtZGV2ZWwnPmJpdGJha2UtZGV2ZWw8L3VsaW5rPiBtYWlsaW5nIGxpc3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIGNoYW5nZXMgdG8gPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiwgc2VuZCB5b3VyIHBhdGNoIHRvIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvL3Bva3knPnBva3k8L3VsaW5rPiBtYWlsaW5nIGxpc3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIGNoYW5nZXMgdG8gb3RoZXIgbGF5ZXJzIGhvc3RlZCBvbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0b3Byb2plY3Qub3JnPC9maWxlbmFtZT4gKHVubGVzcyB0aGUKKyAgICAgICAgICAgICAgICBsYXllcidzIGRvY3VtZW50YXRpb24gc3BlY2lmaWVzIG90aGVyd2lzZSksIHRvb2xzLCBhbmQgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIGRvY3VtZW50YXRpb24sIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fTElTVFNfVVJMOy9saXN0aW5mby95b2N0byc+eW9jdG88L3VsaW5rPiBtYWlsaW5nIGxpc3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIGFkZGl0aW9uYWwgcmVjaXBlcyB0aGF0IGRvIG5vdCBmaXQgaW50byB0aGUgY29yZSBNZXRhZGF0YSwKKyAgICAgICAgICAgICAgICB5b3Ugc2hvdWxkIGRldGVybWluZSB3aGljaCBsYXllciB0aGUgcmVjaXBlIHNob3VsZCBnbyBpbnRvIGFuZCBzdWJtaXQgdGhlCisgICAgICAgICAgICAgICAgY2hhbmdlIGluIHRoZSBtYW5uZXIgcmVjb21tZW5kZWQgYnkgdGhlIGRvY3VtZW50YXRpb24gKGUuZy4gUkVBRE1FKSBzdXBwbGllZAorICAgICAgICAgICAgICAgIHdpdGggdGhlIGxheWVyLiBJZiBpbiBkb3VidCwgcGxlYXNlIGFzayBvbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fTElTVFNfVVJMOy9saXN0aW5mby95b2N0byc+eW9jdG88L3VsaW5rPiBvcgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZPRV9MSVNUU19VUkw7L2xpc3RpbmZvL29wZW5lbWJlZGRlZC1kZXZlbCc+b3BlbmVtYmVkZGVkLWRldmVsPC91bGluaz4KKyAgICAgICAgICAgICAgICBtYWlsaW5nIGxpc3RzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB5b3Ugc2VuZCBhIHBhdGNoLCBiZSBzdXJlIHRvIGluY2x1ZGUgYSAiU2lnbmVkLW9mZi1ieToiCisgICAgICAgIGxpbmUgaW4gdGhlIHNhbWUgc3R5bGUgYXMgcmVxdWlyZWQgYnkgdGhlIExpbnV4IGtlcm5lbC4KKyAgICAgICAgQWRkaW5nIHRoaXMgbGluZSBzaWduaWZpZXMgdGhhdCB5b3UsIHRoZSBzdWJtaXR0ZXIsIGhhdmUgYWdyZWVkIHRvIHRoZSBEZXZlbG9wZXIncyBDZXJ0aWZpY2F0ZSBvZiBPcmlnaW4gMS4xCisgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRGV2ZWxvcGVyJ3MgQ2VydGlmaWNhdGUgb2YgT3JpZ2luIDEuMQorCisgICAgIEJ5IG1ha2luZyBhIGNvbnRyaWJ1dGlvbiB0byB0aGlzIHByb2plY3QsIEkgY2VydGlmeSB0aGF0OgorCisgICAgIChhKSBUaGUgY29udHJpYnV0aW9uIHdhcyBjcmVhdGVkIGluIHdob2xlIG9yIGluIHBhcnQgYnkgbWUgYW5kIEkKKyAgICAgICAgIGhhdmUgdGhlIHJpZ2h0IHRvIHN1Ym1pdCBpdCB1bmRlciB0aGUgb3BlbiBzb3VyY2UgbGljZW5zZQorICAgICAgICAgaW5kaWNhdGVkIGluIHRoZSBmaWxlOyBvcgorCisgICAgIChiKSBUaGUgY29udHJpYnV0aW9uIGlzIGJhc2VkIHVwb24gcHJldmlvdXMgd29yayB0aGF0LCB0byB0aGUgYmVzdAorICAgICAgICAgb2YgbXkga25vd2xlZGdlLCBpcyBjb3ZlcmVkIHVuZGVyIGFuIGFwcHJvcHJpYXRlIG9wZW4gc291cmNlCisgICAgICAgICBsaWNlbnNlIGFuZCBJIGhhdmUgdGhlIHJpZ2h0IHVuZGVyIHRoYXQgbGljZW5zZSB0byBzdWJtaXQgdGhhdAorICAgICAgICAgd29yayB3aXRoIG1vZGlmaWNhdGlvbnMsIHdoZXRoZXIgY3JlYXRlZCBpbiB3aG9sZSBvciBpbiBwYXJ0CisgICAgICAgICBieSBtZSwgdW5kZXIgdGhlIHNhbWUgb3BlbiBzb3VyY2UgbGljZW5zZSAodW5sZXNzIEkgYW0KKyAgICAgICAgIHBlcm1pdHRlZCB0byBzdWJtaXQgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSksIGFzIGluZGljYXRlZAorICAgICAgICAgaW4gdGhlIGZpbGU7IG9yCisKKyAgICAgKGMpIFRoZSBjb250cmlidXRpb24gd2FzIHByb3ZpZGVkIGRpcmVjdGx5IHRvIG1lIGJ5IHNvbWUgb3RoZXIKKyAgICAgICAgIHBlcnNvbiB3aG8gY2VydGlmaWVkIChhKSwgKGIpIG9yIChjKSBhbmQgSSBoYXZlIG5vdCBtb2RpZmllZAorICAgICAgICAgaXQuCisKKyAgICAgKGQpIEkgdW5kZXJzdGFuZCBhbmQgYWdyZWUgdGhhdCB0aGlzIHByb2plY3QgYW5kIHRoZSBjb250cmlidXRpb24KKyAgICAgICAgIGFyZSBwdWJsaWMgYW5kIHRoYXQgYSByZWNvcmQgb2YgdGhlIGNvbnRyaWJ1dGlvbiAoaW5jbHVkaW5nIGFsbAorICAgICAgICAgcGVyc29uYWwgaW5mb3JtYXRpb24gSSBzdWJtaXQgd2l0aCBpdCwgaW5jbHVkaW5nIG15IHNpZ24tb2ZmKSBpcworICAgICAgICAgbWFpbnRhaW5lZCBpbmRlZmluaXRlbHkgYW5kIG1heSBiZSByZWRpc3RyaWJ1dGVkIGNvbnNpc3RlbnQgd2l0aAorICAgICAgICAgdGhpcyBwcm9qZWN0IG9yIHRoZSBvcGVuIHNvdXJjZSBsaWNlbnNlKHMpIGludm9sdmVkLgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEluIGEgY29sbGFib3JhdGl2ZSBlbnZpcm9ubWVudCwgaXQgaXMgbmVjZXNzYXJ5IHRvIGhhdmUgc29tZSBzb3J0IG9mIHN0YW5kYXJkCisgICAgICAgIG9yIG1ldGhvZCB0aHJvdWdoIHdoaWNoIHlvdSBzdWJtaXQgY2hhbmdlcy4KKyAgICAgICAgT3RoZXJ3aXNlLCB0aGluZ3MgY291bGQgZ2V0IHF1aXRlIGNoYW90aWMuCisgICAgICAgIE9uZSBnZW5lcmFsIHByYWN0aWNlIHRvIGZvbGxvdyBpcyB0byBtYWtlIHNtYWxsLCBjb250cm9sbGVkIGNoYW5nZXMuCisgICAgICAgIEtlZXBpbmcgY2hhbmdlcyBzbWFsbCBhbmQgaXNvbGF0ZWQgYWlkcyByZXZpZXcsIG1ha2VzIG1lcmdpbmcvcmViYXNpbmcgZWFzaWVyCisgICAgICAgIGFuZCBrZWVwcyB0aGUgY2hhbmdlIGhpc3RvcnkgY2xlYW4gd2hlbiBhbnlvbmUgbmVlZHMgdG8gcmVmZXIgdG8gaXQgaW4gZnV0dXJlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGVuIHlvdSBtYWtlIGEgY29tbWl0LCB5b3UgbXVzdCBmb2xsb3cgY2VydGFpbiBzdGFuZGFyZHMgZXN0YWJsaXNoZWQgYnkgdGhlCisgICAgICAgIE9wZW5FbWJlZGRlZCBhbmQgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCB0ZWFtcy4KKyAgICAgICAgRm9yIGVhY2ggY29tbWl0LCB5b3UgbXVzdCBwcm92aWRlIGEgc2luZ2xlLWxpbmUgc3VtbWFyeSBvZiB0aGUgY2hhbmdlIGFuZCB5b3UKKyAgICAgICAgc2hvdWxkIGFsbW9zdCBhbHdheXMgcHJvdmlkZSBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2Ygd2hhdCB5b3UgZGlkIChpLmUuCisgICAgICAgIHRoZSBib2R5IG9mIHRoZSBjb21taXQgbWVzc2FnZSkuCisgICAgICAgIFRoZSBvbmx5IGV4Y2VwdGlvbnMgZm9yIG5vdCBwcm92aWRpbmcgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiB3b3VsZCBiZSBpZiB5b3VyCisgICAgICAgIGNoYW5nZSBpcyBhIHNpbXBsZSwgc2VsZi1leHBsYW5hdG9yeSBjaGFuZ2UgdGhhdCBuZWVkcyBubyBmdXJ0aGVyIGRlc2NyaXB0aW9uCisgICAgICAgIGJleW9uZCB0aGUgc3VtbWFyeS4KKyAgICAgICAgSGVyZSBhcmUgdGhlIGd1aWRlbGluZXMgZm9yIGNvbXBvc2luZyBhIGNvbW1pdCBtZXNzYWdlOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlByb3ZpZGUgYSBzaW5nbGUtbGluZSwgc2hvcnQgc3VtbWFyeSBvZiB0aGUgY2hhbmdlLgorICAgICAgICAgICAgICAgIFRoaXMgc3VtbWFyeSBpcyB0eXBpY2FsbHkgdmlld2FibGUgaW4gdGhlICJzaG9ydGxpc3QiIG9mIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgVGh1cywgcHJvdmlkaW5nIHNvbWV0aGluZyBzaG9ydCBhbmQgZGVzY3JpcHRpdmUgdGhhdCBnaXZlcyB0aGUgcmVhZGVyCisgICAgICAgICAgICAgICAgYSBzdW1tYXJ5IG9mIHRoZSBjaGFuZ2UgaXMgdXNlZnVsIHdoZW4gdmlld2luZyBhIGxpc3Qgb2YgbWFueSBjb21taXRzLgorICAgICAgICAgICAgICAgIFRoaXMgc2hvcnQgZGVzY3JpcHRpb24gc2hvdWxkIGJlIHByZWZpeGVkIGJ5IHRoZSByZWNpcGUgbmFtZSAoaWYgY2hhbmdpbmcgYSByZWNpcGUpLCBvcgorICAgICAgICAgICAgICAgIGVsc2UgdGhlIHNob3J0IGZvcm0gcGF0aCB0byB0aGUgZmlsZSBiZWluZyBjaGFuZ2VkLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciB0aGUgYm9keSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UsIHByb3ZpZGUgZGV0YWlsZWQgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICB0aGF0IGRlc2NyaWJlcyB3aGF0IHlvdSBjaGFuZ2VkLCB3aHkgeW91IG1hZGUgdGhlIGNoYW5nZSwgYW5kIHRoZSBhcHByb2FjaAorICAgICAgICAgICAgICAgIHlvdSB1c2VkLiBJdCBtYXkgYWxzbyBiZSBoZWxwZnVsIGlmIHlvdSBtZW50aW9uIGhvdyB5b3UgdGVzdGVkIHRoZSBjaGFuZ2UuCisgICAgICAgICAgICAgICAgUHJvdmlkZSBhcyBtdWNoIGRldGFpbCBhcyB5b3UgY2FuIGluIHRoZSBib2R5IG9mIHRoZSBjb21taXQgbWVzc2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB0aGUgY2hhbmdlIGFkZHJlc3NlcyBhIHNwZWNpZmljIGJ1ZyBvciBpc3N1ZSB0aGF0IGlzCisgICAgICAgICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIGEgYnVnLXRyYWNraW5nIElELCBpbmNsdWRlIGEgcmVmZXJlbmNlIHRvIHRoYXQKKyAgICAgICAgICAgICAgICBJRCBpbiB5b3VyIGRldGFpbGVkIGRlc2NyaXB0aW9uLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIGEgc3BlY2lmaWMgY29udmVudGlvbiBmb3IKKyAgICAgICAgICAgICAgICBidWcgcmVmZXJlbmNlcyAtIGFueSBjb21taXQgdGhhdCBhZGRyZXNzZXMgYSBzcGVjaWZpYyBidWcgc2hvdWxkCisgICAgICAgICAgICAgICAgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybSBmb3IgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRml4ZXMgW1lPQ1RPICM8cmVwbGFjZWFibGU+YnVnLWlkPC9yZXBsYWNlYWJsZT5dCisKKyAgICAgPHJlcGxhY2VhYmxlPmRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGNoYW5nZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIFdoZXJlIDxyZXBsYWNlYWJsZT5idWctaWQ8L3JlcGxhY2VhYmxlPiBpcyByZXBsYWNlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIHNwZWNpZmljIGJ1ZyBJRCBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IEJ1Z3ppbGxhIGluc3RhbmNlLgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgZ3VpZGFuY2Ugb24gY3JlYXRpbmcgd2VsbC1mb3JtZWQgY29tbWl0IG1lc3NhZ2VzIGF0IHRoaXMgT3BlbkVtYmVkZGVkCisgICAgICAgIHdpa2kgcGFnZToKKyAgICAgICAgPHVsaW5rIHVybD0nJk9FX0hPTUVfVVJMOy93aWtpL0NvbW1pdF9QYXRjaF9NZXNzYWdlX0d1aWRlbGluZXMnPjwvdWxpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgbmV4dCB0d28gc2VjdGlvbnMgZGVzY3JpYmUgZ2VuZXJhbCBpbnN0cnVjdGlvbnMgZm9yIGJvdGggcHVzaGluZworICAgICAgICBjaGFuZ2VzIHVwc3RyZWFtIGFuZCBmb3Igc3VibWl0dGluZyBjaGFuZ2VzIGFzIHBhdGNoZXMuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3B1c2hpbmctYS1jaGFuZ2UtdXBzdHJlYW0nPgorICAgICAgICA8dGl0bGU+VXNpbmcgU2NyaXB0cyB0byBQdXNoIGEgQ2hhbmdlIFVwc3RyZWFtIGFuZCBSZXF1ZXN0IGEgUHVsbDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgYmFzaWMgZmxvdyBmb3IgcHVzaGluZyBhIGNoYW5nZSB0byBhbiB1cHN0cmVhbSAiY29udHJpYiIgR2l0IHJlcG9zaXRvcnkgaXMgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1ha2UgeW91ciBjaGFuZ2VzIGluIHlvdXIgbG9jYWwgR2l0IHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0YWdlIHlvdXIgY2hhbmdlcyBieSB1c2luZyB0aGUgPGZpbGVuYW1lPmdpdCBhZGQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kIG9uIGVhY2ggZmlsZSB5b3UgY2hhbmdlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbW1pdCB0aGUgY2hhbmdlIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGNvbW1pdDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gcHJvdmlkZSBhIGNvbW1pdCBtZXNzYWdlIHRoYXQgZm9sbG93cyB0aGUKKyAgICAgICAgICAgICAgICAgICAgcHJvamVjdOKAmXMgY29tbWl0IG1lc3NhZ2Ugc3RhbmRhcmRzIGFzIGRlc2NyaWJlZCBlYXJsaWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFB1c2ggdGhlIGNoYW5nZSB0byB0aGUgdXBzdHJlYW0gImNvbnRyaWIiIHJlcG9zaXRvcnkgYnkKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIDxmaWxlbmFtZT5naXQgcHVzaDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ob3RpZnkgdGhlIG1haW50YWluZXIgdGhhdCB5b3UgaGF2ZSBwdXNoZWQgYSBjaGFuZ2UgYnkgbWFraW5nIGEgcHVsbAorICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LgorICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBwcm92aWRlcyB0d28gc2NyaXB0cyB0aGF0IGNvbnZlbmllbnRseSBsZXQgeW91IGdlbmVyYXRlIGFuZCBzZW5kCisgICAgICAgICAgICAgICAgICAgIHB1bGwgcmVxdWVzdHMgdG8gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIHNjcmlwdHMgYXJlIDxmaWxlbmFtZT5jcmVhdGUtcHVsbC1yZXF1ZXN0PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZW5kLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlc2Ugc2NyaXB0cyBpbiB0aGUgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlVzaW5nIHRoZXNlIHNjcmlwdHMgY29ycmVjdGx5IGZvcm1hdHMgdGhlIHJlcXVlc3RzIHdpdGhvdXQgaW50cm9kdWNpbmcgYW55CisgICAgICAgICAgICAgICAgICAgIHdoaXRlc3BhY2Ugb3IgSFRNTCBmb3JtYXR0aW5nLgorICAgICAgICAgICAgICAgICAgICBUaGUgbWFpbnRhaW5lciB0aGF0IHJlY2VpdmVzIHlvdXIgcGF0Y2hlcyBuZWVkcyB0byBiZSBhYmxlIHRvIHNhdmUgYW5kIGFwcGx5IHRoZW0KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSB5b3VyIGVtYWlscy4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhlc2Ugc2NyaXB0cyBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZCBmb3Igc2VuZGluZyBwYXRjaGVzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGhlbHAgb24gdXNpbmcgdGhlc2Ugc2NyaXB0cywgc2ltcGx5IHByb3ZpZGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4taDwvZmlsZW5hbWU+IGFyZ3VtZW50IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBwb2t5L3NjcmlwdHMvY3JlYXRlLXB1bGwtcmVxdWVzdCAtaAorICAgICAkIHBva3kvc2NyaXB0cy9zZW5kLXB1bGwtcmVxdWVzdCAtaAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGdlbmVyYWwgR2l0IGluZm9ybWF0aW9uIG9uIGhvdyB0byBwdXNoIGEgY2hhbmdlIHVwc3RyZWFtIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2Jvb2svZW4vdjIvRGlzdHJpYnV0ZWQtR2l0LURpc3RyaWJ1dGVkLVdvcmtmbG93cyc+R2l0IENvbW11bml0eSBCb29rPC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3VibWl0dGluZy1hLXBhdGNoJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIEVtYWlsIHRvIFN1Ym1pdCBhIFBhdGNoPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gc3VibWl0IHBhdGNoZXMgd2l0aG91dCB1c2luZyB0aGUgPGZpbGVuYW1lPmNyZWF0ZS1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zZW5kLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+IHNjcmlwdHMgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLgorICAgICAgICAgICAgSG93ZXZlciwga2VlcCBpbiBtaW5kLCB0aGUgcHJlZmVycmVkIG1ldGhvZCBpcyB0byB1c2UgdGhlIHNjcmlwdHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgY29tcG9uZW50cyBjaGFuZ2VkLCB5b3UgbmVlZCB0byBzdWJtaXQgdGhlIGVtYWlsIHRvIGEgc3BlY2lmaWMKKyAgICAgICAgICAgIG1haWxpbmcgbGlzdC4KKyAgICAgICAgICAgIEZvciBzb21lIGd1aWRhbmNlIG9uIHdoaWNoIG1haWxpbmcgbGlzdCB0byB1c2UsIHNlZSB0aGUgbGlzdCBpbiB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgYXZhaWxhYmxlIG1haWxpbmcgbGlzdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXNvdXJjZXMtbWFpbGluZ2xpc3QnPk1haWxpbmcgTGlzdHM8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGVyZSBpcyB0aGUgZ2VuZXJhbCBwcm9jZWR1cmUgb24gaG93IHRvIHN1Ym1pdCBhIHBhdGNoIHRocm91Z2ggZW1haWwgd2l0aG91dCB1c2luZyB0aGUKKyAgICAgICAgICAgIHNjcmlwdHM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWtlIHlvdXIgY2hhbmdlcyBpbiB5b3VyIGxvY2FsIEdpdCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdGFnZSB5b3VyIGNoYW5nZXMgYnkgdXNpbmcgdGhlIDxmaWxlbmFtZT5naXQgYWRkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBvbiBlYWNoIGZpbGUgeW91IGNoYW5nZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbW1pdCB0aGUgY2hhbmdlIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGNvbW1pdCAtLXNpZ25vZmY8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGUgPGZpbGVuYW1lPi0tc2lnbm9mZjwvZmlsZW5hbWU+IG9wdGlvbiBpZGVudGlmaWVzIHlvdSBhcyB0aGUgcGVyc29uCisgICAgICAgICAgICAgICAgICAgIG1ha2luZyB0aGUgY2hhbmdlIGFuZCBhbHNvIHNhdGlzZmllcyB0aGUgRGV2ZWxvcGVyJ3MgQ2VydGlmaWNhdGUgb2YKKyAgICAgICAgICAgICAgICAgICAgT3JpZ2luIChEQ08pIHNob3duIGVhcmxpZXIuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5XaGVuIHlvdSBmb3JtIGEgY29tbWl0LCB5b3UgbXVzdCBmb2xsb3cgY2VydGFpbiBzdGFuZGFyZHMgZXN0YWJsaXNoZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgdGVhbS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBlYXJsaWVyIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2hvdy10by1zdWJtaXQtYS1jaGFuZ2UnPkhvdyB0byBTdWJtaXQgYSBDaGFuZ2U8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBmb3IgWW9jdG8gUHJvamVjdCBjb21taXQgbWVzc2FnZSBzdGFuZGFyZHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvcm1hdCB0aGUgY29tbWl0IGludG8gYW4gZW1haWwgbWVzc2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVG8gZm9ybWF0IGNvbW1pdHMsIHVzZSB0aGUgPGZpbGVuYW1lPmdpdCBmb3JtYXQtcGF0Y2g8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBwcm92aWRlIHRoZSBjb21tYW5kLCB5b3UgbXVzdCBpbmNsdWRlIGEgcmV2aXNpb24gbGlzdCBvciBhIG51bWJlciBvZiBwYXRjaGVzCisgICAgICAgICAgICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBlaXRoZXIgb2YgdGhlc2UgdHdvIGNvbW1hbmRzIHRha2VzIHlvdXIgbW9zdAorICAgICAgICAgICAgICAgICAgICByZWNlbnQgc2luZ2xlIGNvbW1pdCBhbmQgZm9ybWF0cyBpdCBhcyBhbiBlbWFpbCBtZXNzYWdlIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLTEKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGZvcm1hdC1wYXRjaCBIRUFEfgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5BZnRlciB0aGUgY29tbWFuZCBpcyBydW4sIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBjb250YWlucyBhCisgICAgICAgICAgICAgICAgICAgIG51bWJlcmVkIDxmaWxlbmFtZT4ucGF0Y2g8L2ZpbGVuYW1lPiBmaWxlIGZvciB0aGUgY29tbWl0LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IHByb3ZpZGUgc2V2ZXJhbCBjb21taXRzIGFzIHBhcnQgb2YgdGhlIGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Z2l0IGZvcm1hdC1wYXRjaDwvZmlsZW5hbWU+IGNvbW1hbmQgcHJvZHVjZXMgYQorICAgICAgICAgICAgICAgICAgICBzZXJpZXMgb2YgbnVtYmVyZWQgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IOKAkyBvbmUgZm9yIGVhY2ggY29tbWl0LgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIHBhdGNoLCB5b3Ugc2hvdWxkIGFsc28gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1jb3ZlcjwvZmlsZW5hbWU+IG9wdGlvbiB3aXRoIHRoZSBjb21tYW5kLCB3aGljaCBnZW5lcmF0ZXMgYQorICAgICAgICAgICAgICAgICAgICBjb3ZlciBsZXR0ZXIgYXMgdGhlIGZpcnN0ICJwYXRjaCIgaW4gdGhlIHNlcmllcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB0aGVuIGVkaXQgdGhlIGNvdmVyIGxldHRlciB0byBwcm92aWRlIGEgZGVzY3JpcHRpb24gZm9yCisgICAgICAgICAgICAgICAgICAgIHRoZSBzZXJpZXMgb2YgcGF0Y2hlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSA8ZmlsZW5hbWU+Z2l0IGZvcm1hdC1wYXRjaDwvZmlsZW5hbWU+IGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgIHNlZSA8ZmlsZW5hbWU+R0lUX0ZPUk1BVF9QQVRDSCgxKTwvZmlsZW5hbWU+IGRpc3BsYXllZCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hbiBnaXQtZm9ybWF0LXBhdGNoPC9maWxlbmFtZT4gY29tbWFuZC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPklmIHlvdSBhcmUgb3Igd2lsbCBiZSBhIGZyZXF1ZW50IGNvbnRyaWJ1dG9yIHRvIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIG9yIHRvIE9wZW5FbWJlZGRlZCwgeW91IG1pZ2h0IGNvbnNpZGVyIHJlcXVlc3RpbmcgYSBjb250cmliIGFyZWEgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcnkgYXNzb2NpYXRlZCByaWdodHMuPC9ub3RlPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkltcG9ydCB0aGUgZmlsZXMgaW50byB5b3VyIG1haWwgY2xpZW50IGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IHNlbmQtZW1haWw8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT5JbiBvcmRlciB0byB1c2UgPGZpbGVuYW1lPmdpdCBzZW5kLWVtYWlsPC9maWxlbmFtZT4sIHlvdSBtdXN0IGhhdmUgdGhlCisgICAgICAgICAgICAgICAgICAgIHRoZSBwcm9wZXIgR2l0IHBhY2thZ2VzIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIFVidW50dSwgRGViaWFuLCBhbmQgRmVkb3JhIHRoZSBwYWNrYWdlIGlzIDxmaWxlbmFtZT5naXQtZW1haWw8L2ZpbGVuYW1lPi48L25vdGU+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgPGZpbGVuYW1lPmdpdCBzZW5kLWVtYWlsPC9maWxlbmFtZT4gY29tbWFuZCBzZW5kcyBlbWFpbCBieSB1c2luZyBhIGxvY2FsCisgICAgICAgICAgICAgICAgICAgIG9yIHJlbW90ZSBNYWlsIFRyYW5zcG9ydCBBZ2VudCAoTVRBKSBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tc210cDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+c2VuZG1haWw8L2ZpbGVuYW1lPiwgb3IgdGhyb3VnaCBhIGRpcmVjdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c210cDwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gaW4geW91ciBHaXQgPGZpbGVuYW1lPmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgc3VibWl0dGluZyBwYXRjaGVzIHRocm91Z2ggZW1haWwgb25seSwgaXQgaXMgdmVyeSBpbXBvcnRhbnQKKyAgICAgICAgICAgICAgICAgICAgdGhhdCB5b3Ugc3VibWl0IHRoZW0gd2l0aG91dCBhbnkgd2hpdGVzcGFjZSBvciBIVE1MIGZvcm1hdHRpbmcgdGhhdAorICAgICAgICAgICAgICAgICAgICBlaXRoZXIgeW91IG9yIHlvdXIgbWFpbGVyIGludHJvZHVjZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBtYWludGFpbmVyIHRoYXQgcmVjZWl2ZXMgeW91ciBwYXRjaGVzIG5lZWRzIHRvIGJlIGFibGUgdG8gc2F2ZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgYXBwbHkgdGhlbSBkaXJlY3RseSBmcm9tIHlvdXIgZW1haWxzLgorICAgICAgICAgICAgICAgICAgICBBIGdvb2Qgd2F5IHRvIHZlcmlmeSB0aGF0IHdoYXQgeW91IGFyZSBzZW5kaW5nIHdpbGwgYmUgYXBwbGljYWJsZSBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgbWFpbnRhaW5lciBpcyB0byBkbyBhIGRyeSBydW4gYW5kIHNlbmQgdGhlbSB0byB5b3Vyc2VsZiBhbmQgdGhlbgorICAgICAgICAgICAgICAgICAgICBzYXZlIGFuZCBhcHBseSB0aGVtIGFzIHRoZSBtYWludGFpbmVyIHdvdWxkLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIDxmaWxlbmFtZT5naXQgc2VuZC1lbWFpbDwvZmlsZW5hbWU+IGNvbW1hbmQgaXMgdGhlIHByZWZlcnJlZCBtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZm9yIHNlbmRpbmcgeW91ciBwYXRjaGVzIHNpbmNlIHRoZXJlIGlzIG5vIHJpc2sgb2YgY29tcHJvbWlzaW5nIHdoaXRlc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UsIHdoaWNoIGNhbiBvY2N1ciB3aGVuIHlvdSB1c2UgeW91ciBvd24gbWFpbCBjbGllbnQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIGFsc28gaGFzIHNldmVyYWwgb3B0aW9ucyB0aGF0IGxldCB5b3UKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSByZWNpcGllbnRzIGFuZCBwZXJmb3JtIGZ1cnRoZXIgZWRpdGluZyBvZiB0aGUgZW1haWwgbWVzc2FnZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIDxmaWxlbmFtZT5naXQgc2VuZC1lbWFpbDwvZmlsZW5hbWU+IGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgIHNlZSA8ZmlsZW5hbWU+R0lULVNFTkQtRU1BSUwoMSk8L2ZpbGVuYW1lPiBkaXNwbGF5ZWQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5tYW4gZ2l0LXNlbmQtZW1haWw8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLXFlbXUueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1xZW11LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2M5MTVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1xZW11LnhtbApAQCAtMCwwICsxLDQyMiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2Rldi1tYW51YWwtcWVtdSc+CisKKzx0aXRsZT5Vc2luZyB0aGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpPC90aXRsZT4KKworPHBhcmE+CisgICAgUXVpY2sgRU1VbGF0b3IgKFFFTVUpIGlzIGFuIE9wZW4gU291cmNlIHByb2plY3QgdGhlIFlvY3RvIFByb2plY3QgdXNlcworICAgIGFzIHBhcnQgb2YgaXRzIGRldmVsb3BtZW50ICJ0b29sIHNldCIuCisgICAgQXMgc3VjaCwgdGhlIGluZm9ybWF0aW9uIGluIHRoaXMgY2hhcHRlciBpcyBsaW1pdGVkIHRvIHRoZQorICAgIFlvY3RvIFByb2plY3QgaW50ZWdyYXRpb24gb2YgUUVNVSBhbmQgbm90IFFFTVUgaW4gZ2VuZXJhbC4KKyAgICBGb3Igb2ZmaWNpYWwgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50YXRpb24gb24gUUVNVSwgc2VlIHRoZQorICAgIGZvbGxvd2luZyByZWZlcmVuY2VzOgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PHVsaW5rIHVybD0naHR0cDovL3dpa2kucWVtdS5vcmcvTWFpbl9QYWdlJz5RRU1VIFdlYnNpdGU8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgVGhlIG9mZmljaWFsIHdlYnNpdGUgZm9yIHRoZSBRRU1VIE9wZW4gU291cmNlIHByb2plY3QuCisgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48dWxpbmsgdXJsPSdodHRwOi8vd2lraS5xZW11Lm9yZy9NYW51YWwnPkRvY3VtZW50YXRpb248L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgVGhlIFFFTVUgdXNlciBtYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKzwvcGFyYT4KKworPHBhcmE+CisgICAgVGhpcyBjaGFwdGVyIHByb3ZpZGVzIGFuIG92ZXJ2aWV3IG9mIHRoZSBZb2N0byBQcm9qZWN0J3MgaW50ZWdyYXRpb24gb2YKKyAgICBRRU1VLCBhIGRlc2NyaXB0aW9uIG9mIGhvdyB5b3UgdXNlIFFFTVUgYW5kIGl0cyB2YXJpb3VzIG9wdGlvbnMsIHJ1bm5pbmcKKyAgICB1bmRlciBhIE5ldHdvcmsgRmlsZSBTeXN0ZW0gKE5GUykgc2VydmVyLCBhbmQgYSBmZXcgdGlwcyBhbmQgdHJpY2tzIHlvdQorICAgIG1pZ2h0IGZpbmQgaGVscGZ1bCB3aGVuIHVzaW5nIFFFTVUuCis8L3BhcmE+CisKKzxzZWN0aW9uIGlkPSdxZW11LW92ZXJ2aWV3Jz4KKyAgICA8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgWW9jdG8gUHJvamVjdCwgUUVNVSBpcyBhbgorICAgICAgICBlbXVsYXRvciBhbmQgdmlydHVhbGl6YXRpb24gbWFjaGluZSB0aGF0IGFsbG93cyB5b3UgdG8gcnVuIGEgY29tcGxldGUKKyAgICAgICAgaW1hZ2UgeW91IGhhdmUgYnVpbHQgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QgYXMganVzdCBhbm90aGVyIHRhc2sKKyAgICAgICAgb24geW91ciBidWlsZCBzeXN0ZW0uCisgICAgICAgIFFFTVUgaXMgdXNlZnVsIGZvciBydW5uaW5nIGFuZCB0ZXN0aW5nIGltYWdlcyBhbmQgYXBwbGljYXRpb25zIG9uCisgICAgICAgIHN1cHBvcnRlZCBZb2N0byBQcm9qZWN0IGFyY2hpdGVjdHVyZXMgd2l0aG91dCBoYXZpbmcgYWN0dWFsIGhhcmR3YXJlLgorICAgICAgICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoZSBZb2N0byBQcm9qZWN0IHVzZXMgUUVNVSB0byBydW4gYXV0b21hdGVkCisgICAgICAgIFF1YWxpdHkgQXNzdXJhbmNlIChRQSkgdGVzdHMgb24gZmluYWwgaW1hZ2VzIHNoaXBwZWQgd2l0aCBlYWNoCisgICAgICAgIHJlbGVhc2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFFFTVUgaXMgbWFkZSBhdmFpbGFibGUgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCBhIG51bWJlciBvZiB3YXlzLgorICAgICAgICBUaGUgZWFzaWVzdCBhbmQgcmVjb21tZW5kZWQgbWV0aG9kIGZvciBnZXR0aW5nIFFFTVUgaXMgdG8gcnVuIHRoZQorICAgICAgICBBRFQgaW5zdGFsbGVyLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIG1ha2Ugc3VyZSB5b3UgaGF2ZQorICAgICAgICBRRU1VIGF2YWlsYWJsZSwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdGhlLXFlbXUtZW11bGF0b3InPlRoZSBRRU1VIEVtdWxhdG9yPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncWVtdS1ydW5uaW5nLXFlbXUnPgorICAgIDx0aXRsZT5SdW5uaW5nIFFFTVU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFJ1bm5pbmcgUUVNVSBpbnZvbHZlcyBoYXZpbmcgeW91ciBidWlsZCBlbnZpcm9ubWVudCBzZXQgdXAsIGhhdmluZyB0aGUKKyAgICAgICAgcmlnaHQgYXJ0aWZhY3RzIGF2YWlsYWJsZSwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRvIHVzZSB0aGUgbWFueQorICAgICAgICBvcHRpb25zIHRoYXQgYXJlIGF2YWlsYWJsZSB0byB5b3Ugd2hlbiB5b3Ugc3RhcnQgUUVNVSB1c2luZyB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdxZW11LXNldHRpbmctdXAtdGhlLWVudmlyb25tZW50Jz4KKyAgICAgICAgPHRpdGxlPlNldHRpbmcgVXAgdGhlIEVudmlyb25tZW50PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBydW4gUUVNVSBpbiB0aGUgc2FtZSBlbnZpcm9ubWVudCBmcm9tIHdoaWNoIHlvdSBydW4gQml0QmFrZS4KKyAgICAgICAgICAgIFRoaXMgbWVhbnMgeW91IG5lZWQgdG8gc291cmNlIGEgYnVpbGQgZW52aXJvbm1lbnQgc2NyaXB0IChpLmUuCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIG9yCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPikuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncWVtdS11c2luZy10aGUtcnVucWVtdS1jb21tYW5kJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIHRoZSA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IENvbW1hbmQ8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGJhc2ljIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gY29tbWFuZCBzeW50YXggaXMgYXMKKyAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcnVucWVtdSBbPHJlcGxhY2VhYmxlPm9wdGlvbjwvcmVwbGFjZWFibGU+IF0gIFsuLi5dCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBCYXNlZCBvbiB3aGF0IHlvdSBwcm92aWRlIG9uIHRoZSBjb21tYW5kIGxpbmUsCisgICAgICAgICAgICA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IGRvZXMgYSBnb29kIGpvYiBvZiBmaWd1cmluZyBvdXQgd2hhdAorICAgICAgICAgICAgeW91IGFyZSB0cnlpbmcgdG8gZG8uCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYnkgZGVmYXVsdCwgUUVNVSBsb29rcyBmb3IgdGhlIG1vc3QgcmVjZW50bHkgYnVpbHQKKyAgICAgICAgICAgIGltYWdlIGFjY29yZGluZyB0byB0aGUgdGltZXN0YW1wIHdoZW4gaXQgbmVlZHMgdG8gbG9vayBmb3IgYW4KKyAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgTWluaW1hbGx5LCB0aHJvdWdoIHRoZSB1c2Ugb2Ygb3B0aW9ucywgeW91IG11c3QgcHJvdmlkZSBlaXRoZXIKKyAgICAgICAgICAgIGEgbWFjaGluZSBuYW1lLCBhIHZpcnR1YWwgbWFjaGluZSBpbWFnZQorICAgICAgICAgICAgKDxmaWxlbmFtZT4qLnZtZGs8L2ZpbGVuYW1lPiksIG9yIGEga2VybmVsIGltYWdlCisgICAgICAgICAgICAoPGZpbGVuYW1lPiouYmluPC9maWxlbmFtZT4pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYSBkZXNjcmlwdGlvbiBvZiA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+CisgICAgICAgICAgICBvcHRpb25zIHlvdSBjYW4gcHJvdmlkZSBvbiB0aGUgY29tbWFuZCBsaW5lOgorICAgICAgICAgICAgPG5vdGU+PHRpdGxlPlRpcDwvdGl0bGU+CisgICAgICAgICAgICAgICAgSWYgeW91IGRvIHByb3ZpZGUgc29tZSAiaWxsZWdhbCIgb3B0aW9uIGNvbWJpbmF0aW9uIG9yIHBlcmhhcHMKKyAgICAgICAgICAgICAgICB5b3UgZG8gbm90IHByb3ZpZGUgZW5vdWdoIGluIHRoZSB3YXkgb2Ygb3B0aW9ucywKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IHByb3ZpZGVzIGFwcHJvcHJpYXRlIGVycm9yCisgICAgICAgICAgICAgICAgbWVzc2FnaW5nIHRvIGhlbHAgeW91IGNvcnJlY3QgdGhlIHByb2JsZW0uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48cmVwbGFjZWFibGU+UUVNVUFSQ0g8L3JlcGxhY2VhYmxlPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIFFFTVUgbWFjaGluZSBhcmNoaXRlY3R1cmUsIHdoaWNoIG11c3QgYmUgInFlbXV4ODYiLAorICAgICAgICAgICAgICAgICAgICAicWVtdXg4Nl82NCIsICJxZW11YXJtIiwgInFlbXVtaXBzIiwgInFlbXVtaXBzZWwiLAorICAgICAgICAgICAgICAgICAgICDigJxxZW11bWlwczY0IiwgInFlbXVzaDQiLCAicWVtdXBwYyIsICJxZW11bWljcm9ibGF6ZSIsCisgICAgICAgICAgICAgICAgICAgIG9yICJxZW11enlucSIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPlZNPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIHZpcnR1YWwgbWFjaGluZSBpbWFnZSwgd2hpY2ggbXVzdCBiZSBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4udm1kazwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIG9wdGlvbiB3aGVuIHlvdSB3YW50IHRvIGJvb3QgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnZtZGs8L2ZpbGVuYW1lPiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGltYWdlIGZpbGVuYW1lIHlvdSBwcm92aWRlIG11c3QgY29udGFpbiBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBzdHJpbmdzOiAicWVtdXg4Ni02NCIsICJxZW11eDg2IiwgInFlbXVhcm0iLAorICAgICAgICAgICAgICAgICAgICAicWVtdW1pcHM2NCIsICJxZW11bWlwcyIsICJxZW11cHBjIiwgb3IgInFlbXVzaDQiLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHJlcGxhY2VhYmxlPlJPT1RGUzwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICBBIHJvb3QgZmlsZXN5c3RlbSB0aGF0IGhhcyBvbmUgb2YgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICBmaWxldHlwZSBleHRlbnNpb25zOiAiZXh0MiIsICJleHQzIiwgImV4dDQiLCAiamZmczIiLAorICAgICAgICAgICAgICAgICAgICAibmZzIiwgb3IgImJ0cmZzIi4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGZpbGVuYW1lIHlvdSBwcm92aWRlIGZvciB0aGlzIG9wdGlvbiB1c2VzIOKAnG5mc+KAnSwgaXQKKyAgICAgICAgICAgICAgICAgICAgbXVzdCBwcm92aWRlIGFuIGV4cGxpY2l0IHJvb3QgZmlsZXN5c3RlbSBwYXRoLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHJlcGxhY2VhYmxlPktFUk5FTDwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICBBIGtlcm5lbCBpbWFnZSwgd2hpY2ggaXMgYSA8ZmlsZW5hbWU+LmJpbjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHByb3ZpZGUgYSA8ZmlsZW5hbWU+LmJpbjwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gZGV0ZWN0cyBpdCBhbmQgYXNzdW1lcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgZmlsZSBpcyBhIGtlcm5lbCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxyZXBsYWNlYWJsZT5NQUNISU5FPC9yZXBsYWNlYWJsZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIFFFTVUgbWFjaGluZSwgd2hpY2ggbXVzdCBiZSBvbmUKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZzogInFlbXV4ODYiLAorICAgICAgICAgICAgICAgICAgICAicWVtdXg4Ni02NCIsICJxZW11YXJtIiwgInFlbXVtaXBzIiwgInFlbXVtaXBzZWwiLAorICAgICAgICAgICAgICAgICAgICDigJxxZW11bWlwczY0IiwgInFlbXVzaDQiLCAicWVtdXBwYyIsICJxZW11bWljcm9ibGF6ZSIsCisgICAgICAgICAgICAgICAgICAgIG9yICJxZW11enlucSIuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+UUVNVUFSQ0g8L3JlcGxhY2VhYmxlPiBvcHRpb25zIGFyZSBiYXNpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgaWRlbnRpY2FsLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHByb3ZpZGUgYSA8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbiwgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiB0cmllcyB0byBkZXRlcm1pbmUKKyAgICAgICAgICAgICAgICAgICAgaXQgYmFzZWQgb24gb3RoZXIgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5yYW1mczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgeW91IGFyZSBib290aW5nIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyYW1mcykKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UsIHdoaWNoIG1lYW5zIHRoZSA8ZmlsZW5hbWU+RlNUWVBFPC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNwaW8uZ3o8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5pc288L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgSW5kaWNhdGVzIHlvdSBhcmUgYm9vdGluZyBhbiBJU08gaW1hZ2UsIHdoaWNoIG1lYW5zIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RlNUWVBFPC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5pc288L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5ub2dyYXBoaWM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRGlzYWJsZXMgdGhlIHZpZGVvIGNvbnNvbGUsIHdoaWNoIHNldHMgdGhlIGNvbnNvbGUgdG8KKyAgICAgICAgICAgICAgICAgICAgInR0eXMwIi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5zZXJpYWw8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyBhIHNlcmlhbCBjb25zb2xlIG9uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZGV2L3R0eVMwPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Ymlvc2RpcjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBFc3RhYmxpc2hlcyBhIGN1c3RvbSBkaXJlY3RvcnkgZm9yIEJJT1MsIFZHQSBCSU9TIGFuZAorICAgICAgICAgICAgICAgICAgICBrZXltYXBzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJpb3NmaWxlbmFtZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBFc3RhYmxpc2hlcyBhIGN1c3RvbSBCSU9TIG5hbWUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cWVtdXBhcmFtcz1cIjxyZXBsYWNlYWJsZT54eXo8L3JlcGxhY2VhYmxlPlwiPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBjdXN0b20gUUVNVSBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyBvcHRpb24gdG8gcGFzcyBvcHRpb25zIG90aGVyIHRoYW4gdGhlIHNpbXBsZQorICAgICAgICAgICAgICAgICAgICAia3ZtIiBhbmQgInNlcmlhbCIgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5ib290cGFyYW1zPVwiPHJlcGxhY2VhYmxlPnh5ejwvcmVwbGFjZWFibGU+XCI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGN1c3RvbSBib290IHBhcmFtZXRlcnMgZm9yIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YXVkaW88L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyBhdWRpbyBpbiBRRU1VLgorICAgICAgICAgICAgICAgICAgICBUaGUgPHJlcGxhY2VhYmxlPk1BQ0hJTkU8L3JlcGxhY2VhYmxlPiBvcHRpb24gbXVzdCBiZQorICAgICAgICAgICAgICAgICAgICBlaXRoZXIgInFlbXV4ODYiIG9yICJxZW11eDg2LTY0IiBpbiBvcmRlciBmb3IgYXVkaW8gdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgPGZpbGVuYW1lPnNuZF9pbnRlbDh4MDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT5zbmRfZW5zMTM3MDwvZmlsZW5hbWU+IGRyaXZlciBtdXN0IGJlCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBpbiBsaW51eCBndWVzdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5zbGlycDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBFbmFibGVzICJzbGlycCIgbmV0d29ya2luZywgd2hpY2ggaXMgYSBkaWZmZXJlbnQgd2F5CisgICAgICAgICAgICAgICAgICAgIG9mIG5ldHdvcmtpbmcgdGhhdCBkb2VzIG5vdCBuZWVkIHJvb3QgYWNjZXNzCisgICAgICAgICAgICAgICAgICAgIGJ1dCBhbHNvIGlzIG5vdCBhcyBlYXN5IHRvIHVzZSBvciBjb21wcmVoZW5zaXZlCisgICAgICAgICAgICAgICAgICAgIGFzIHRoZSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmt2bTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBFbmFibGVzIEtWTSB3aGVuIHJ1bm5pbmcgInFlbXV4ODYiIG9yICJxZW11eDg2LTY0IgorICAgICAgICAgICAgICAgICAgICBRRU1VIGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBLVk0gdG8gd29yaywgYWxsIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBtdXN0IGJlIG1ldDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3VyIDxyZXBsYWNlYWJsZT5NQUNISU5FPC9yZXBsYWNlYWJsZT4gbXVzdCBiZSBlaXRoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicWVtdXg4NiIgb3IgInFlbXV4ODYtNjQiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdXIgYnVpbGQgaG9zdCBoYXMgdG8gaGF2ZSB0aGUgS1ZNIG1vZHVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQsIHdoaWNoIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZGV2L2t2bTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdXIgYnVpbGQgaG9zdCBoYXMgdG8gaGF2ZSB2aXJ0aW8gbmV0IGRldmljZSwgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgPGZpbGVuYW1lPi9kZXYvdmhvc3QtbmV0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlICBidWlsZCBob3N0IDxmaWxlbmFtZT4vZGV2L2t2bTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGhhcyB0byBiZSBib3RoIHdyaXRhYmxlIGFuZCByZWFkYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgaG9zdCA8ZmlsZW5hbWU+L2Rldi92aG9zdC1uZXQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBoYXMgdG8gYmUgZWl0aGVyIHJlYWRhYmxlIG9yIHdyaXRhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIOKAnHNsaXJwLWVuYWJsZWTigJ0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnB1YmxpY3ZuYzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBFbmFibGVzIGEgVk5DIHNlcnZlciBvcGVuIHRvIGFsbCBob3N0cy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGZ1cnRoZXIgdW5kZXJzdGFuZGluZyByZWdhcmRpbmcgb3B0aW9uIHVzZSB3aXRoCisgICAgICAgICAgICA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+LCBjb25zaWRlciBzb21lIGV4YW1wbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgc3RhcnRzIFFFTVUgd2l0aAorICAgICAgICAgICAgPHJlcGxhY2VhYmxlPk1BQ0hJTkU8L3JlcGxhY2VhYmxlPiBzZXQgdG8gInFlbXV4ODYiLgorICAgICAgICAgICAgQXNzdW1pbmcgYSBzdGFuZGFyZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LAorICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBhdXRvbWF0aWNhbGx5IGZpbmRzIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJ6SW1hZ2UtcWVtdXg4Ni5iaW48L2ZpbGVuYW1lPiBpbWFnZSBmaWxlIGFuZAorICAgICAgICAgICAgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsLXFlbXV4ODYtMjAxNDA3MDcwNzQ2MTEucm9vdGZzLmV4dDM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgKGFzc3VtaW5nIHRoZSBjdXJyZW50IGJ1aWxkIGNyZWF0ZWQgYQorICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IGltYWdlKS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFdoZW4gbW9yZSB0aGFuIG9uZSBpbWFnZSB3aXRoIHRoZSBzYW1lIG5hbWUgZXhpc3RzLCBRRU1VIGZpbmRzCisgICAgICAgICAgICAgICAgYW5kIHVzZXMgdGhlIG1vc3QgcmVjZW50bHkgYnVpbHQgaW1hZ2UgYWNjb3JkaW5nIHRvIHRoZQorICAgICAgICAgICAgICAgIHRpbWVzdGFtcC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAkIHJ1bnFlbXUgcWVtdXg4NgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIHByb2R1Y2VzIHRoZSBleGFjdCBzYW1lIHJlc3VsdHMgYXMgdGhlCisgICAgICAgICAgICBwcmV2aW91cyBleGFtcGxlLgorICAgICAgICAgICAgVGhpcyBjb21tYW5kLCBob3dldmVyLCBzcGVjaWZpY2FsbHkgcHJvdmlkZXMgdGhlIGltYWdlCisgICAgICAgICAgICBhbmQgcm9vdCBmaWxlc3lzdGVtIHR5cGUuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcnVucWVtdSBxZW11eDg2IGNvcmUtaW1hZ2UtbWluaW1hbCBleHQzCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgc3BlY2lmaWVzIHRvIGJvb3QgYW4gaW5pdGlhbCBSQU0gZGlzayBpbWFnZQorICAgICAgICAgICAgYW5kIHRvIGVuYWJsZSBhdWRpbyBpbiBRRU1VLgorICAgICAgICAgICAgRm9yIHRoaXMgY2FzZSwgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBzZXQgdGhlCisgICAgICAgICAgICBpbnRlcm5hbCB2YXJpYWJsZSA8ZmlsZW5hbWU+RlNUWVBFPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICJjcGlvLmd6Ii4KKyAgICAgICAgICAgIEFsc28sIGZvciBhdWRpbyB0byBiZSBlbmFibGVkLCBhbiBhcHByb3ByaWF0ZSBkcml2ZXIgbXVzdAorICAgICAgICAgICAgYmUgaW5zdGFsbGVkIChzZWUgdGhlIHByZXZpb3VzIGRlc2NyaXB0aW9uIGZvciB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5hdWRpbzwvZmlsZW5hbWU+IG9wdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcnVucWVtdSBxZW11eDg2IHJhbWZzIGF1ZGlvCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgZG9lcyBub3QgcHJvdmlkZSBlbm91Z2ggaW5mb3JtYXRpb24gZm9yCisgICAgICAgICAgICBRRU1VIHRvIGxhdW5jaC4KKyAgICAgICAgICAgIFdoaWxlIHRoZSBjb21tYW5kIGRvZXMgcHJvdmlkZSBhIHJvb3QgZmlsZXN5c3RlbSB0eXBlLCBpdAorICAgICAgICAgICAgbXVzdCBhbHNvIG1pbmltYWxseSBwcm92aWRlIGEKKyAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5NQUNISU5FPC9yZXBsYWNlYWJsZT4sCisgICAgICAgICAgICA8cmVwbGFjZWFibGU+S0VSTkVMPC9yZXBsYWNlYWJsZT4sIG9yCisgICAgICAgICAgICA8cmVwbGFjZWFibGU+Vk08L3JlcGxhY2VhYmxlPiBvcHRpb24uCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcnVucWVtdSBleHQzCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgc3BlY2lmaWVzIHRvIGJvb3QgYSB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2UKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LnZtZGs8L2ZpbGVuYW1lPiBmaWxlKS4KKyAgICAgICAgICAgIEZyb20gdGhlIDxmaWxlbmFtZT4udm1kazwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBkZXRlcm1pbmVzIHRoZSBRRU1VCisgICAgICAgICAgICBhcmNoaXRlY3R1cmUgKDxyZXBsYWNlYWJsZT5NQUNISU5FPC9yZXBsYWNlYWJsZT4pIHRvIGJlCisgICAgICAgICAgICAicWVtdXg4NiIgYW5kIHRoZSByb290IGZpbGVzeXN0ZW0gdHlwZSB0byBiZSAidm1kayIuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcnVucWVtdSAvaG9tZS9zY290dC1sZW5vdm8vdm0vY29yZS1pbWFnZS1taW5pbWFsLXFlbXV4ODYudm1kaworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncWVtdS1ydW5uaW5nLXVuZGVyLWEtbmV0d29yay1maWxlLXN5c3RlbS1uZnMtc2VydmVyJz4KKyAgICA8dGl0bGU+UnVubmluZyBVbmRlciBhIE5ldHdvcmsgRmlsZSBTeXN0ZW0gKE5GUykgU2VydmVyPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBPbmUgbWV0aG9kIGZvciBydW5uaW5nIFFFTVUgaXMgdG8gcnVuIGl0IG9uIGFuIE5GUyBzZXJ2ZXIuCisgICAgICAgIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lIGZpbGUgc3lzdGVtIGZyb20gYm90aAorICAgICAgICB0aGUgYnVpbGQgYW5kIHRoZSBlbXVsYXRlZCBzeXN0ZW0gYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgSXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgc3lzdGVtIGRvZXMgbm90IG5lZWQgcm9vdCBwcml2aWxlZ2VzCisgICAgICAgIHRvIHJ1bi4KKyAgICAgICAgSXQgdXNlcyBhIHVzZXIgc3BhY2UgTkZTIHNlcnZlciB0byBhdm9pZCB0aGF0LgorICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byBzZXQgdXAgZm9yIHJ1bm5pbmcgUUVNVSB1c2luZyBhbiBORlMKKyAgICAgICAgc2VydmVyIGFuZCB0aGVuIGhvdyB5b3UgY2FuIHN0YXJ0IGFuZCBzdG9wIHRoZSBzZXJ2ZXIuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3FlbXUtc2V0dGluZy11cC10by11c2UtbmZzJz4KKyAgICAgICAgPHRpdGxlPlNldHRpbmcgVXAgdG8gVXNlIE5GUzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHlvdSBhcmUgYWJsZSB0byBydW4gUUVNVSBpbiB5b3VyIGVudmlyb25tZW50LCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11LWV4dHJhY3Qtc2RrPC9maWxlbmFtZT4gc2NyaXB0LCB3aGljaCBpcyBsb2NhdGVkCisgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYWxvbmcgd2l0aAorICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBzY3JpcHQuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnJ1bnFlbXUtZXh0cmFjdC1zZGs8L2ZpbGVuYW1lPiB0YWtlcyBhIHJvb3QKKyAgICAgICAgICAgIGZpbGUgc3lzdGVtIHRhcmJhbGwgYW5kIGV4dHJhY3RzIGl0IGludG8gYSBsb2NhdGlvbiB0aGF0IHlvdQorICAgICAgICAgICAgc3BlY2lmeS4KKyAgICAgICAgICAgIFRoZW4sIHdoZW4geW91IHJ1biA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+LCB5b3UgY2FuIHNwZWNpZnkKKyAgICAgICAgICAgIHRoZSBsb2NhdGlvbiB0aGF0IGhhcyB0aGUgZmlsZSBzeXN0ZW0gdG8gcGFzcyBpdCB0byBRRU1VLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgdGFrZXMgYSBmaWxlIHN5c3RlbSBhbmQgZXh0cmFjdHMgaXQgdG8KKyAgICAgICAgICAgIGEgZGlyZWN0b3J5IG5hbWVkIDxmaWxlbmFtZT50ZXN0LW5mczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBydW5xZW11LWV4dHJhY3Qtc2RrIC4vdG1wL2RlcGxveS9pbWFnZXMvcWVtdXg4Ni9jb3JlLWltYWdlLXNhdG8tcWVtdXg4Ni50YXIuYnoyIHRlc3QtbmZzCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGV4dHJhY3RlZCB0aGUgZmlsZSBzeXN0ZW0sIHlvdSBjYW4gcnVuCisgICAgICAgICAgICA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IG5vcm1hbGx5IHdpdGggdGhlIGFkZGl0aW9uYWwKKyAgICAgICAgICAgIGxvY2F0aW9uIG9mIHRoZSBmaWxlIHN5c3RlbS4KKyAgICAgICAgICAgIFlvdSBjYW4gdGhlbiBhbHNvIG1ha2UgY2hhbmdlcyB0byB0aGUgZmlsZXMgd2l0aGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+Li90ZXN0LW5mczwvZmlsZW5hbWU+IGFuZCBzZWUgdGhvc2UgY2hhbmdlcyBhcHBlYXIgaW4gdGhlCisgICAgICAgICAgICBpbWFnZSBpbiByZWFsIHRpbWUuCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdXNpbmcgdGhlIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4gaW1hZ2U6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJ1bnFlbXUgcWVtdXg4NiAuL3Rlc3QtbmZzCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncWVtdS1zdGFydGluZy1hbmQtc3RvcHBpbmctbmZzJz4KKyAgICAgICAgPHRpdGxlPlN0YXJ0aW5nIGFuZCBTdG9wcGluZyBORlM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBtYW51YWxseSBzdGFydCBhbmQgc3RvcCB0aGUgTkZTIHNoYXJlIHVzaW5nIHRoZXNlCisgICAgICAgICAgICBjb21tYW5kczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c3RhcnQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTdGFydHMgdGhlIE5GUyBzaGFyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBydW5xZW11LWV4cG9ydC1yb290ZnMgc3RhcnQgPHJlcGxhY2VhYmxlPmZpbGUtc3lzdGVtLWxvY2F0aW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zdG9wPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU3RvcHMgdGhlIE5GUyBzaGFyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBydW5xZW11LWV4cG9ydC1yb290ZnMgc3RvcCA8cmVwbGFjZWFibGU+ZmlsZS1zeXN0ZW0tbG9jYXRpb248L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnJlc3RhcnQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZXN0YXJ0cyB0aGUgTkZTIHNoYXJlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJ1bnFlbXUtZXhwb3J0LXJvb3RmcyByZXN0YXJ0IDxyZXBsYWNlYWJsZT5maWxlLXN5c3RlbS1sb2NhdGlvbjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3FlbXUtdGlwcy1hbmQtdHJpY2tzJz4KKyAgICA8dGl0bGU+VGlwcyBhbmQgVHJpY2tzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3QgZGVzY3JpYmVzIHRoaW5ncyB5b3UgY2FuIGRvIHRvIG1ha2UgcnVubmluZyBRRU1VCisgICAgICAgIGluIHRoZSBjb250ZXh0IG9mIHRoZSBZb2N0byBQcm9qZWN0IGEgYmV0dGVyIGV4cGVyaWVuY2U6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN3aXRjaGluZyBCZXR3ZWVuIENvbnNvbGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgV2hlbiBib290aW5nIG9yIHJ1bm5pbmcgUUVNVSwgeW91IGNhbiBzd2l0Y2ggYmV0d2VlbgorICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBjb25zb2xlcyBieSB1c2luZworICAgICAgICAgICAgICAgIEN0cmwrQWx0KzxyZXBsYWNlYWJsZT5udW1iZXI8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgQ3RybCtBbHQrMyBzd2l0Y2hlcyB5b3UgdG8gdGhlIHNlcmlhbCBjb25zb2xlIGFzCisgICAgICAgICAgICAgICAgbG9uZyBhcyB0aGF0IGNvbnNvbGUgaXMgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICBCZWluZyBhYmxlIHRvIHN3aXRjaCBjb25zb2xlcyBpcyBoZWxwZnVsLCBmb3IgZXhhbXBsZSwgaWYgdGhlCisgICAgICAgICAgICAgICAgbWFpbiBRRU1VIGNvbnNvbGUgYnJlYWtzIGZvciBzb21lIHJlYXNvbi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVXN1YWxseSwgIjIiIGdldHMgeW91IHRvIHRoZSBtYWluIGNvbnNvbGUgYW5kICIzIiBnZXRzIHlvdQorICAgICAgICAgICAgICAgICAgICB0byB0aGUgc2VyaWFsIGNvbnNvbGUuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZW1vdmluZyB0aGUgU3BsYXNoIFNjcmVlbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gcmVtb3ZlIHRoZSBzcGxhc2ggc2NyZWVuIHdoZW4gUUVNVSBpcyBib290aW5nIGJ5CisgICAgICAgICAgICAgICAgdXNpbmcgQWx0K2xlZnQuCisgICAgICAgICAgICAgICAgUmVtb3ZpbmcgdGhlIHNwbGFzaCBzY3JlZW4gYWxsb3dzIHlvdSB0byBzZWUgd2hhdCBpcyBoYXBwZW5pbmcKKyAgICAgICAgICAgICAgICBpbiB0aGUgYmFja2dyb3VuZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGlzYWJsaW5nIHRoZSBDdXJzb3IgR3JhYjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IFFFTVUgaW50ZWdyYXRpb24gY2FwdHVyZXMgdGhlIGN1cnNvciB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgbWFpbiB3aW5kb3cuCisgICAgICAgICAgICAgICAgSXQgZG9lcyB0aGlzIHNpbmNlIHN0YW5kYXJkIG1vdXNlIGRldmljZXMgb25seSBwcm92aWRlIHJlbGF0aXZlCisgICAgICAgICAgICAgICAgaW5wdXQgYW5kIG5vdCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICAgICAgICAgICAgICBZb3UgdGhlbiBoYXZlIHRvIGJyZWFrIG91dCBvZiB0aGUgZ3JhYiB1c2luZyB0aGUgIkN0cmwrQWx0IiBrZXkKKyAgICAgICAgICAgICAgICBjb21iaW5hdGlvbi4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgWW9jdG8gUHJvamVjdCdzIGludGVncmF0aW9uIG9mIFFFTVUgZW5hYmxlcyB0aGUKKyAgICAgICAgICAgICAgICB3YWNvbSBVU0IgdG91Y2ggcGFkIGRyaXZlciBieSBkZWZhdWx0IHRvIGFsbG93IGlucHV0IG9mIGFic29sdXRlCisgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMuCisgICAgICAgICAgICAgICAgVGhpcyBkZWZhdWx0IG1lYW5zIHRoYXQgdGhlIG1vdXNlIGNhbiBlbnRlciBhbmQgbGVhdmUgdGhlCisgICAgICAgICAgICAgICAgbWFpbiB3aW5kb3cgd2l0aG91dCB0aGUgZ3JhYiB0YWtpbmcgZWZmZWN0IGxlYWRpbmcgdG8gYSBiZXR0ZXIKKyAgICAgICAgICAgICAgICB1c2VyIGV4cGVyaWVuY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLXN0YXJ0LnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtc3RhcnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOTg5YjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLXN0YXJ0LnhtbApAQCAtMCwwICsxLDQzMyBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2Rldi1tYW51YWwtc3RhcnQnPgorCis8dGl0bGU+R2V0dGluZyBTdGFydGVkIHdpdGggdGhlIFlvY3RvIFByb2plY3Q8L3RpdGxlPgorCis8cGFyYT4KKyAgICBUaGlzIGNoYXB0ZXIgaW50cm9kdWNlcyB0aGUgWW9jdG8gUHJvamVjdCBhbmQgZ2l2ZXMgeW91IGFuIGlkZWEgb2Ygd2hhdCB5b3UgbmVlZCB0byBnZXQgc3RhcnRlZC4KKyAgICBZb3UgY2FuIGZpbmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHNldCB1cCB5b3VyIGRldmVsb3BtZW50IGhvc3QgYW5kIGJ1aWxkIG9yIHVzZSBpbWFnZXMgZm9yCisgICAgaGFyZHdhcmUgc3VwcG9ydGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IGJ5IHJlYWRpbmcgdGhlCisgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyc+WW9jdG8gUHJvamVjdCBRdWljayBTdGFydDwvdWxpbms+LgorPC9wYXJhPgorCis8cGFyYT4KKyAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgY2hhcHRlciBzdW1tYXJpemVzIHdoYXQgaXMgaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgYW5kIHByb3ZpZGVzCisgICAgc29tZSBoaWdoZXItbGV2ZWwgY29uY2VwdHMgeW91IG1pZ2h0IHdhbnQgdG8gY29uc2lkZXIuCis8L3BhcmE+CisKKzxzZWN0aW9uIGlkPSdpbnRyb2R1Y2luZy10aGUteW9jdG8tcHJvamVjdCc+CisgICAgPHRpdGxlPkludHJvZHVjaW5nIHRoZSBZb2N0byBQcm9qZWN0PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBpcyBhbiBvcGVuLXNvdXJjZSBjb2xsYWJvcmF0aW9uIHByb2plY3QgZm9jdXNlZCBvbiBlbWJlZGRlZCBMaW51eCBkZXZlbG9wbWVudC4KKyAgICAgICAgVGhlIHByb2plY3QgY3VycmVudGx5IHByb3ZpZGVzIGEgYnVpbGQgc3lzdGVtIHRoYXQgaXMKKyAgICAgICAgcmVmZXJyZWQgdG8gYXMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLXN5c3RlbS10ZXJtJz5PcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtPC9saW5rPgorICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uLgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBwcm92aWRlcyB2YXJpb3VzIGFuY2lsbGFyeSB0b29scyBmb3IgdGhlIGVtYmVkZGVkIGRldmVsb3BlcgorICAgICAgICBhbmQgYWxzbyBmZWF0dXJlcyB0aGUgU2F0byByZWZlcmVuY2UgVXNlciBJbnRlcmZhY2UsIHdoaWNoIGlzIG9wdGltaXplZCBmb3IKKyAgICAgICAgc3R5bHVzLWRyaXZlbiwgbG93LXJlc29sdXRpb24gc2NyZWVucy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0sIHdoaWNoIHVzZXMKKyAgICAgICAgPGxpbmsgbGlua2VuZD0nYml0YmFrZS10ZXJtJz5CaXRCYWtlPC9saW5rPiwgdG8gZGV2ZWxvcCBjb21wbGV0ZSBMaW51eAorICAgICAgICBpbWFnZXMgYW5kIGFzc29jaWF0ZWQgdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgZm9yIGFyY2hpdGVjdHVyZXMgYmFzZWQKKyAgICAgICAgb24gQVJNLCBNSVBTLCBQb3dlclBDLCB4ODYgYW5kIHg4Ni02NC4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBCeSBkZWZhdWx0LCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCBjcmVhdGVzIGEgUG9reSBkaXN0cmlidXRpb24uCisgICAgICAgICAgICBIb3dldmVyLCB5b3UgY2FuIGNyZWF0ZSB5b3VyIG93biBkaXN0cmlidXRpb24gYnkgcHJvdmlkaW5nIGtleQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nbWV0YWRhdGEnPk1ldGFkYXRhPC9saW5rPi4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLXlvdXItb3duLWRpc3RyaWJ1dGlvbic+Q3JlYXRpbmcgWW91ciBPd24gRGlzdHJpYnV0aW9uPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvbm90ZT4KKyAgICAgICAgV2hpbGUgdGhlIFlvY3RvIFByb2plY3QgZG9lcyBub3QgcHJvdmlkZSBhIHN0cmljdCB0ZXN0aW5nIGZyYW1ld29yaywKKyAgICAgICAgaXQgZG9lcyBwcm92aWRlIG9yIGdlbmVyYXRlIGZvciB5b3UgYXJ0aWZhY3RzIHRoYXQgbGV0IHlvdSBwZXJmb3JtIHRhcmdldC1sZXZlbCBhbmQKKyAgICAgICAgZW11bGF0ZWQgdGVzdGluZyBhbmQgZGVidWdnaW5nLgorICAgICAgICBBZGRpdGlvbmFsbHksIGlmIHlvdSBhcmUgYW4gPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4KKyAgICAgICAgSURFIHVzZXIsIHlvdSBjYW4gaW5zdGFsbCBhbiBFY2xpcHNlIFlvY3RvIFBsdWctaW4gdG8gYWxsb3cgeW91IHRvCisgICAgICAgIGRldmVsb3Agd2l0aGluIHRoYXQgZmFtaWxpYXIgZW52aXJvbm1lbnQuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nZ2V0dGluZy1zZXR1cCc+CisgICAgPHRpdGxlPkdldHRpbmcgU2V0IFVwPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBIZXJlIGlzIHdoYXQgeW91IG5lZWQgdG8gdXNlIHRoZSBZb2N0byBQcm9qZWN0OgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Ib3N0IFN5c3RlbTo8L2VtcGhhc2lzPiAgWW91IHNob3VsZCBoYXZlIGEgcmVhc29uYWJseSBjdXJyZW50CisgICAgICAgICAgICAgICAgTGludXgtYmFzZWQgaG9zdCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgWW91IHdpbGwgaGF2ZSB0aGUgYmVzdCByZXN1bHRzIHdpdGggYSByZWNlbnQgcmVsZWFzZSBvZiBGZWRvcmEsCisgICAgICAgICAgICAgICAgb3BlblNVU0UsIERlYmlhbiwgVWJ1bnR1LCBvciBDZW50T1MgYXMgdGhlc2UgcmVsZWFzZXMgYXJlIGZyZXF1ZW50bHkgdGVzdGVkIGFnYWluc3QgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICBhbmQgb2ZmaWNpYWxseSBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiB0aGUgZGlzdHJpYnV0aW9ucyB1bmRlciB2YWxpZGF0aW9uIGFuZCB0aGVpciBzdGF0dXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjZGV0YWlsZWQtc3VwcG9ydGVkLWRpc3Ryb3MnPlN1cHBvcnRlZCBMaW51eCBEaXN0cmlidXRpb25zPC91bGluaz4iIHNlY3Rpb24KKyAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGFuZCB0aGUgd2lraSBwYWdlIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL0Rpc3RyaWJ1dGlvbl9TdXBwb3J0Jz5EaXN0cmlidXRpb24gU3VwcG9ydDwvdWxpbms+LjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGFsc28gaGF2ZSBhYm91dCA1MCBHYnl0ZXMgb2YgZnJlZSBkaXNrIHNwYWNlIGZvciBidWlsZGluZyBpbWFnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBhY2thZ2VzOjwvZW1waGFzaXM+ICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIHJlcXVpcmVzIHRoYXQgY2VydGFpbiBwYWNrYWdlcyBleGlzdCBvbiB5b3VyIGRldmVsb3BtZW50IHN5c3RlbSAoZS5nLiBQeXRob24gMi43KS4KKyAgICAgICAgICAgICAgICBTZWUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcGFja2FnZXMnPlRoZSBCdWlsZCBIb3N0IFBhY2thZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBhbmQgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlcXVpcmVkLXBhY2thZ2VzLWZvci10aGUtaG9zdC1kZXZlbG9wbWVudC1zeXN0ZW0nPlJlcXVpcmVkIFBhY2thZ2VzIGZvciB0aGUgSG9zdCBEZXZlbG9wbWVudCBTeXN0ZW08L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIHRoZSBleGFjdAorICAgICAgICAgICAgICAgIHBhY2thZ2UgcmVxdWlyZW1lbnRzIGFuZCB0aGUgaW5zdGFsbGF0aW9uIGNvbW1hbmRzIHRvIGluc3RhbGwKKyAgICAgICAgICAgICAgICB0aGVtIGZvciB0aGUgc3VwcG9ydGVkIGRpc3RyaWJ1dGlvbnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0gaWQ9J2xvY2FsLXlwLXJlbGVhc2UnPjxwYXJhPjxlbXBoYXNpcz5Zb2N0byBQcm9qZWN0IFJlbGVhc2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCBhIHJlbGVhc2Ugb2YgdGhlIFlvY3RvIFByb2plY3QgbG9jYWxseSBpbnN0YWxsZWQgb24KKyAgICAgICAgICAgICAgICB5b3VyIGRldmVsb3BtZW50IHN5c3RlbS4KKyAgICAgICAgICAgICAgICBUaGUgZG9jdW1lbnRhdGlvbiByZWZlcnMgdG8gdGhpcyBzZXQgb2YgbG9jYWxseSBpbnN0YWxsZWQgZmlsZXMKKyAgICAgICAgICAgICAgICBhcyB0aGUgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgWW91IGNyZWF0ZSB5b3VyIFNvdXJjZSBEaXJlY3RvcnkgYnkgdXNpbmcKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnaXQnPkdpdDwvbGluaz4gdG8gY2xvbmUgYSBsb2NhbCBjb3B5CisgICAgICAgICAgICAgICAgb2YgdGhlIHVwc3RyZWFtIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSwKKyAgICAgICAgICAgICAgICBvciBieSBkb3dubG9hZGluZyBhbmQgdW5wYWNraW5nIGEgdGFyYmFsbCBvZiBhbiBvZmZpY2lhbAorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICBUaGUgcHJlZmVycmVkIG1ldGhvZCBpcyB0byBjcmVhdGUgYSBjbG9uZSBvZiB0aGUgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+V29ya2luZyBmcm9tIGEgY29weSBvZiB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yeSBhbGxvd3MgeW91CisgICAgICAgICAgICAgICAgdG8gY29udHJpYnV0ZSBiYWNrIGludG8gdGhlIFlvY3RvIFByb2plY3Qgb3Igc2ltcGx5IHdvcmsgd2l0aAorICAgICAgICAgICAgICAgIHRoZSBsYXRlc3Qgc29mdHdhcmUgb24gYSBkZXZlbG9wbWVudCBicmFuY2guCisgICAgICAgICAgICAgICAgQmVjYXVzZSBHaXQgbWFpbnRhaW5zIGFuZCBjcmVhdGVzIGFuIHVwc3RyZWFtIHJlcG9zaXRvcnkgd2l0aAorICAgICAgICAgICAgICAgIGEgY29tcGxldGUgaGlzdG9yeSBvZiBjaGFuZ2VzIGFuZCB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhIGxvY2FsCisgICAgICAgICAgICAgICAgY2xvbmUgb2YgdGhhdCByZXBvc2l0b3J5LCB5b3UgaGF2ZSBhY2Nlc3MgdG8gYWxsIHRoZSBZb2N0bworICAgICAgICAgICAgICAgIFByb2plY3QgZGV2ZWxvcG1lbnQgYnJhbmNoZXMgYW5kIHRhZyBuYW1lcyB1c2VkIGluIHRoZSB1cHN0cmVhbQorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxub3RlPllvdSBjYW4gdmlldyB0aGUgWW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzIGF0CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+PC91bGluaz4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyB0cmFuc2NyaXB0IHNob3dzIGhvdyB0byBjbG9uZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5IGludG8gdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCBjcmVhdGVzIHRoZSBsb2NhbCByZXBvc2l0b3J5IGluIGEgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gR2l0IHVzZWQgd2l0aGluIHRoZSBZb2N0byBQcm9qZWN0LCBzZWUKKyAgICAgICAgICAgICAgICB0aGUgIjxsaW5rIGxpbmtlbmQ9J2dpdCc+R2l0PC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kKKyAgICAgQ2xvbmluZyBpbnRvICdwb2t5Jy4uLgorICAgICByZW1vdGU6IENvdW50aW5nIG9iamVjdHM6IDIyNjc5MCwgZG9uZS4KKyAgICAgcmVtb3RlOiBDb21wcmVzc2luZyBvYmplY3RzOiAxMDAlICg1NzQ2NS81NzQ2NSksIGRvbmUuCisgICAgIHJlbW90ZTogVG90YWwgMjI2NzkwIChkZWx0YSAxNjUyMTIpLCByZXVzZWQgMjI1ODg3IChkZWx0YSAxNjQzMjcpCisgICAgIFJlY2VpdmluZyBvYmplY3RzOiAxMDAlICgyMjY3OTAvMjI2NzkwKSwgMTAwLjk4IE1pQiB8IDI2MyBLaUIvcywgZG9uZS4KKyAgICAgUmVzb2x2aW5nIGRlbHRhczogMTAwJSAoMTY1MjEyLzE2NTIxMiksIGRvbmUuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgYW5vdGhlciBleGFtcGxlIG9mIGhvdyB0byBzZXQgdXAgeW91ciBvd24gbG9jYWwgR2l0CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzLCBzZWUgdGhpcworICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9UcmFuc2NyaXB0Ol9mcm9tX2dpdF9jaGVja291dF90b19tZXRhLWludGVsX0JTUCc+CisgICAgICAgICAgICAgICAgd2lraSBwYWdlPC91bGluaz4sIHdoaWNoIGRlc2NyaWJlcyBob3cgdG8gY3JlYXRlIGxvY2FsCisgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcmllcyBmb3IgYm90aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBnZXQgdGhlIFlvY3RvIFByb2plY3QgRmlsZXMgYnkgZG93bmxvYWRpbmcKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2VzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0hPTUVfVVJMOyI+WW9jdG8gUHJvamVjdCB3ZWJzaXRlPC91bGluaz4uCisgICAgICAgICAgICAgICAgRnJvbSB0aGUgd2Vic2l0ZSwgeW91IGp1c3QgY2xpY2sgIkRvd25sb2FkcyIgaW4gdGhlIG5hdmlnYXRpb24KKyAgICAgICAgICAgICAgICBwYW5lIHRvIHRoZSBsZWZ0IHRvIGRpc3BsYXkgYWxsIFlvY3RvIFByb2plY3QgZG93bmxvYWRzLgorICAgICAgICAgICAgICAgIEN1cnJlbnQgYW5kIGFyY2hpdmVkIHJlbGVhc2VzIGFyZSBhdmFpbGFibGUgZm9yIGRvd25sb2FkLgorICAgICAgICAgICAgICAgIE5pZ2h0bHkgYW5kIGRldmVsb3BtZW50YWwgYnVpbGRzIGFyZSBhbHNvIG1haW50YWluZWQgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSImWU9DVE9fQUJfTklHSFRMWV9VUkw7Ij48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBPbmUgZmluYWwgc2l0ZSB5b3UgY2FuIHZpc2l0IGZvciBpbmZvcm1hdGlvbiBvbiBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgcmVsZWFzZXMgaXMgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL1JlbGVhc2VzJz5SZWxlYXNlczwvdWxpbms+CisgICAgICAgICAgICAgICAgd2lraS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbSBpZD0nbG9jYWwta2VybmVsLWZpbGVzJz48cGFyYT48ZW1waGFzaXM+WW9jdG8gUHJvamVjdCBLZXJuZWw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGdvaW5nIHRvIGJlIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGEgc3VwcG9ydGVkIFlvY3RvIFByb2plY3Qga2VybmVsLCB5b3UKKyAgICAgICAgICAgICAgICBuZWVkIHRvIGVzdGFibGlzaCBsb2NhbCBjb3BpZXMgb2YgdGhlIHNvdXJjZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgR2l0IHJlcG9zaXRvcmllcyBvZiBzdXBwb3J0ZWQgWW9jdG8gUHJvamVjdCBrZXJuZWxzIG9yZ2FuaXplZCB1bmRlcgorICAgICAgICAgICAgICAgICJZb2N0byBMaW51eCBLZXJuZWwiIGluIHRoZSBZb2N0byBQcm9qZWN0IFNvdXJjZSBSZXBvc2l0b3JpZXMgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPjwvdWxpbms+LjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGlzIHNldHVwIGNhbiBpbnZvbHZlIGNyZWF0aW5nIGEgYmFyZSBjbG9uZSBvZiB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICBjb3B5aW5nIHRoYXQgY2xvbmVkIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgWW91IGNhbiBjcmVhdGUgdGhlIGJhcmUgY2xvbmUgYW5kIHRoZSBjb3B5IG9mIHRoZSBiYXJlIGNsb25lIGFueXdoZXJlIHlvdSBsaWtlLgorICAgICAgICAgICAgICAgIEZvciBzaW1wbGljaXR5LCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBjcmVhdGUgdGhlc2Ugc3RydWN0dXJlcyBvdXRzaWRlIG9mIHRoZQorICAgICAgICAgICAgICAgIFNvdXJjZSBEaXJlY3RvcnksIHdoaWNoIGlzIHVzdWFsbHkgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPi48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+QXMgYW4gZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0cmFuc2NyaXB0IHNob3dzIGhvdyB0byBjcmVhdGUgdGhlIGJhcmUgY2xvbmUKKyAgICAgICAgICAgICAgICBvZiB0aGUgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTk8L2ZpbGVuYW1lPiBrZXJuZWwgYW5kIHRoZW4gY3JlYXRlIGEgY29weSBvZgorICAgICAgICAgICAgICAgIHRoYXQgY2xvbmUuCisgICAgICAgICAgICAgICAgPG5vdGU+V2hlbiB5b3UgaGF2ZSBhIGxvY2FsIFlvY3RvIFByb2plY3Qga2VybmVsIEdpdCByZXBvc2l0b3J5LCB5b3UgY2FuCisgICAgICAgICAgICAgICAgcmVmZXJlbmNlIHRoYXQgcmVwb3NpdG9yeSByYXRoZXIgdGhhbiB0aGUgdXBzdHJlYW0gR2l0IHJlcG9zaXRvcnkgYXMKKyAgICAgICAgICAgICAgICBwYXJ0IG9mIHRoZSA8ZmlsZW5hbWU+Y2xvbmU8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIERvaW5nIHNvIGNhbiBzcGVlZCB1cCB0aGUgcHJvY2Vzcy48L25vdGU+PC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgdGhlIGJhcmUgY2xvbmUgaXMgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOS5naXQ8L2ZpbGVuYW1lPiwgd2hpbGUgdGhlCisgICAgICAgICAgICAgICAgY29weSBpcyBuYW1lZCA8ZmlsZW5hbWU+bXktbGludXgteW9jdG8tMy4xOS13b3JrPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjbG9uZSAtLWJhcmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xOSBsaW51eC15b2N0by0zLjE5LmdpdAorICAgICBDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICdsaW51eC15b2N0by0zLjE5LmdpdCcuLi4KKyAgICAgcmVtb3RlOiBDb3VudGluZyBvYmplY3RzOiAzOTgzMjU2LCBkb25lLgorICAgICByZW1vdGU6IENvbXByZXNzaW5nIG9iamVjdHM6IDEwMCUgKDYwNTAwNi82MDUwMDYpLCBkb25lLgorICAgICByZW1vdGU6IFRvdGFsIDM5ODMyNTYgKGRlbHRhIDMzNTI4MzIpLCByZXVzZWQgMzk3NDUwMyAoZGVsdGEgMzM0NDA3OSkKKyAgICAgUmVjZWl2aW5nIG9iamVjdHM6IDEwMCUgKDM5ODMyNTYvMzk4MzI1NiksIDg0My42NiBNaUIgfCAxLjA3IE1pQi9zLCBkb25lLgorICAgICBSZXNvbHZpbmcgZGVsdGFzOiAxMDAlICgzMzUyODMyLzMzNTI4MzIpLCBkb25lLgorICAgICBDaGVja2luZyBjb25uZWN0aXZpdHkuLi4gZG9uZS4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPk5vdyBjcmVhdGUgYSBjbG9uZSBvZiB0aGUgYmFyZSBjbG9uZSBqdXN0IGNyZWF0ZWQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjbG9uZSBsaW51eC15b2N0by0zLjE5LmdpdCBteS1saW51eC15b2N0by0zLjE5LXdvcmsKKyAgICAgQ2xvbmluZyBpbnRvICdteS1saW51eC15b2N0by0zLjE5LXdvcmsnLi4uCisgICAgIGRvbmUuCisgICAgIENoZWNraW5nIG91dCBmaWxlczogMTAwJSAoNDg0NDAvNDg0NDApLCBkb25lLgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbSBpZD0nbWV0YS15b2N0by1rZXJuZWwtZXh0cmFzLXJlcG8nPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGEteW9jdG8ta2VybmVsLWV4dHJhczwvZmlsZW5hbWU+IEdpdCBSZXBvc2l0b3J5PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWtlcm5lbC1leHRyYXM8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBjb250YWlucyBNZXRhZGF0YSBuZWVkZWQKKyAgICAgICAgICAgICAgICBvbmx5IGlmIHlvdSBhcmUgbW9kaWZ5aW5nIGFuZCBidWlsZGluZyB0aGUga2VybmVsIGltYWdlLgorICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIGl0IGNvbnRhaW5zIHRoZSBrZXJuZWwgQml0QmFrZSBhcHBlbmQgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICBmaWxlcyB0aGF0IHlvdQorICAgICAgICAgICAgICAgIGVkaXQgdG8gcG9pbnQgdG8geW91ciBsb2NhbGx5IG1vZGlmaWVkIGtlcm5lbCBzb3VyY2UgZmlsZXMgYW5kIHRvIGJ1aWxkIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgICAgICBQb2ludGluZyB0byB0aGVzZSBsb2NhbCBmaWxlcyBpcyBtdWNoIG1vcmUgZWZmaWNpZW50IHRoYW4gcmVxdWlyaW5nIGEgZG93bmxvYWQgb2YgdGhlCisgICAgICAgICAgICAgICAga2VybmVsJ3Mgc291cmNlIGZpbGVzIGZyb20gdXBzdHJlYW0gZWFjaCB0aW1lIHlvdSBtYWtlIGNoYW5nZXMgdG8gdGhlIGtlcm5lbC48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBmaW5kIHRoZSA8ZmlsZW5hbWU+bWV0YS15b2N0by1rZXJuZWwtZXh0cmFzPC9maWxlbmFtZT4gR2l0IFJlcG9zaXRvcnkgaW4gdGhlCisgICAgICAgICAgICAgICAgIllvY3RvIE1ldGFkYXRhIExheWVycyIgYXJlYSBvZiB0aGUgWW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBJdCBpcyBnb29kIHByYWN0aWNlIHRvIGNyZWF0ZSB0aGlzIEdpdCByZXBvc2l0b3J5IGluc2lkZSB0aGUgU291cmNlIERpcmVjdG9yeS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+Rm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgdGhhdCBjcmVhdGVzIHRoZSA8ZmlsZW5hbWU+bWV0YS15b2N0by1rZXJuZWwtZXh0cmFzPC9maWxlbmFtZT4gR2l0CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBpbnNpZGUgdGhlIFNvdXJjZSBEaXJlY3RvcnksIHdoaWNoIGlzIG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBpbiB0aGlzIGNhc2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4vcG9reQorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9tZXRhLXlvY3RvLWtlcm5lbC1leHRyYXMgbWV0YS15b2N0by1rZXJuZWwtZXh0cmFzCisgICAgIENsb25pbmcgaW50byAnbWV0YS15b2N0by1rZXJuZWwtZXh0cmFzJy4uLgorICAgICByZW1vdGU6IENvdW50aW5nIG9iamVjdHM6IDcyNywgZG9uZS4KKyAgICAgcmVtb3RlOiBDb21wcmVzc2luZyBvYmplY3RzOiAxMDAlICg0NTIvNDUyKSwgZG9uZS4KKyAgICAgcmVtb3RlOiBUb3RhbCA3MjcgKGRlbHRhIDI2MCksIHJldXNlZCA3MTkgKGRlbHRhIDI1MikKKyAgICAgUmVjZWl2aW5nIG9iamVjdHM6IDEwMCUgKDcyNy83MjcpLCA1MzYuMzYgS2lCIHwgMjQwIEtpQi9zLCBkb25lLgorICAgICBSZXNvbHZpbmcgZGVsdGFzOiAxMDAlICgyNjAvMjYwKSwgZG9uZS4KKyAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdzdXBwb3J0ZWQtYm9hcmQtc3VwcG9ydC1wYWNrYWdlcy0oYnNwcyknPjxlbXBoYXNpcz5TdXBwb3J0ZWQgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcyk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0cyBtYW55IEJTUHMsIHdoaWNoIGFyZSBtYWludGFpbmVkIGluCisgICAgICAgICAgICAgICAgdGhlaXIgb3duIGxheWVycyBvciBpbiBsYXllcnMgZGVzaWduZWQgdG8gY29udGFpbiBzZXZlcmFsCisgICAgICAgICAgICAgICAgQlNQcy4KKyAgICAgICAgICAgICAgICBUbyBnZXQgYW4gaWRlYSBvZiBtYWNoaW5lIHN1cHBvcnQgdGhyb3VnaCBCU1AgbGF5ZXJzLCB5b3UgY2FuCisgICAgICAgICAgICAgICAgbG9vayBhdCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fUkVMRUFTRV9ETF9VUkw7L21hY2hpbmVzJz5pbmRleCBvZiBtYWNoaW5lczwvdWxpbms+CisgICAgICAgICAgICAgICAgZm9yIHRoZSByZWxlYXNlLjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBZb2N0byBQcm9qZWN0IHVzZXMgdGhlIGZvbGxvd2luZyBCU1AgbGF5ZXIgbmFtaW5nCisgICAgICAgICAgICAgICAgc2NoZW1lOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICB3aGVyZSA8cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPiBpcyB0aGUgcmVjb2duaXplZAorICAgICAgICAgICAgICAgIEJTUCBuYW1lLgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLWNyb3duYmF5CisgICAgIG1ldGEtZW1lbmxvdworICAgICBtZXRhLXJhc3BiZXJyeXBpCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIExheWVyczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApCisgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQlNQIExheWVycy48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5BIHVzZWZ1bCBHaXQgcmVwb3NpdG9yeSByZWxlYXNlZCB3aXRoIHRoZSBZb2N0bworICAgICAgICAgICAgICAgIFByb2plY3QgaXMgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgYQorICAgICAgICAgICAgICAgIHBhcmVudCBsYXllciB0aGF0IGNvbnRhaW5zIG1hbnkgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIExheWVyczwvdWxpbms+LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbG9jYXRlIHRoZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IEdpdAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgaW4gdGhlICJZb2N0byBNZXRhZGF0YSBMYXllcnMiIGFyZWEgb2YgdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpJz48L3VsaW5rPi48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5Vc2luZworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dpdCc+R2l0PC9saW5rPiB0byBjcmVhdGUgYSBsb2NhbCBjbG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICB1cHN0cmVhbSByZXBvc2l0b3J5IGNhbiBiZSBoZWxwZnVsIGlmIHlvdSBhcmUgd29ya2luZyB3aXRoCisgICAgICAgICAgICAgICAgQlNQcy4KKyAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHlvdSBzZXQgdXAgdGhlIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeSBpbnNpZGUgdGhlIFNvdXJjZSBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgdHJhbnNjcmlwdCBzaG93cyB0aGUgc3RlcHMgdG8gY2xvbmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHdvcmsgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoIHRoYXQgbWF0Y2hlcyB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pIGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGNoZWNrZWQgb3V0IHRoZSAibWFzdGVyIiBicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgb2YgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBhbmQgeW91IGFyZSBnb2luZyB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiwgYmUgc3VyZSB0byBjaGVja291dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIm1hc3RlciIgYnJhbmNoIG9mIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3kKKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbWV0YS1pbnRlbC5naXQKKyAgICAgQ2xvbmluZyBpbnRvICdtZXRhLWludGVsJy4uLgorICAgICByZW1vdGU6IENvdW50aW5nIG9iamVjdHM6IDg4NDQsIGRvbmUuCisgICAgIHJlbW90ZTogQ29tcHJlc3Npbmcgb2JqZWN0czogMTAwJSAoMjg2NC8yODY0KSwgZG9uZS4KKyAgICAgcmVtb3RlOiBUb3RhbCA4ODQ0IChkZWx0YSA0OTMxKSwgcmV1c2VkIDg3ODAgKGRlbHRhIDQ4NjcpCisgICAgIFJlY2VpdmluZyBvYmplY3RzOiAxMDAlICg4ODQ0Lzg4NDQpLCAyLjQ4IE1pQiB8IDI2NCBLaUIvcywgZG9uZS4KKyAgICAgUmVzb2x2aW5nIGRlbHRhczogMTAwJSAoNDkzMS80OTMxKSwgZG9uZS4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHNhbWUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvVHJhbnNjcmlwdDpfZnJvbV9naXRfY2hlY2tvdXRfdG9fbWV0YS1pbnRlbF9CU1AnPndpa2kgcGFnZTwvdWxpbms+CisgICAgICAgICAgICAgICAgcmVmZXJlbmNlZCBlYXJsaWVyIGNvdmVycyBob3cgdG8gc2V0IHVwIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVjbGlwc2UgWW9jdG8gUGx1Zy1pbjo8L2VtcGhhc2lzPiAgSWYgeW91IGFyZSBkZXZlbG9waW5nCisgICAgICAgICAgICAgICAgYXBwbGljYXRpb25zIHVzaW5nIHRoZSBFY2xpcHNlIEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgKElERSksCisgICAgICAgICAgICAgICAgeW91IHdpbGwgbmVlZCB0aGlzIHBsdWctaW4uCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZXR0aW5nLXVwLXRoZS1lY2xpcHNlLWlkZSc+U2V0dGluZyB1cCB0aGUgRWNsaXBzZSBJREU8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2J1aWxkaW5nLWltYWdlcyc+CisgICAgPHRpdGxlPkJ1aWxkaW5nIEltYWdlczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGJ1aWxkIHByb2Nlc3MgY3JlYXRlcyBhbiBlbnRpcmUgTGludXggZGlzdHJpYnV0aW9uLCBpbmNsdWRpbmcgdGhlIHRvb2xjaGFpbiwgZnJvbSBzb3VyY2UuCisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgdG9waWMsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcXMtYnVpbGRpbmctaW1hZ2VzJz5CdWlsZGluZyBJbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGJ1aWxkIHByb2Nlc3MgaXMgYXMgZm9sbG93czoKKyAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1ha2Ugc3VyZSB5b3UgaGF2ZSBzZXQgdXAgdGhlIFNvdXJjZSBEaXJlY3RvcnkgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgIHByZXZpb3VzIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5pdGlhbGl6ZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYnkgc291cmNpbmcgYSBidWlsZAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHNjcmlwdCAoaS5lLgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk9wdGlvbmFsbHkgZW5zdXJlIHRoZSA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLAorICAgICAgICAgICAgICAgIHdoaWNoIGlzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiwKKyAgICAgICAgICAgICAgICBpcyBzZXQgdXAgaG93IHlvdSB3YW50IGl0LgorICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIG1hbnkgYXNwZWN0cyBvZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaW5jbHVkaW5nCisgICAgICAgICAgICAgICAgdGhlIHRhcmdldCBtYWNoaW5lIGFyY2hpdGVjdHVyZSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+TUFDSElORTwvdWxpbms+PC9maWxlbmFtZT4gdmFyaWFibGUsCisgICAgICAgICAgICAgICAgdGhlIHBhY2thZ2luZyBmb3JtYXQgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgKDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvdWxpbms+KSwKKyAgICAgICAgICAgICAgICBhbmQgYSBjZW50cmFsaXplZCB0YXJiYWxsIGRvd25sb2FkIGRpcmVjdG9yeSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRExfRElSJz5ETF9ESVI8L3VsaW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIEJ1aWxkIHRoZSBpbWFnZSB1c2luZyB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IGluZm9ybWF0aW9uIG9uIEJpdEJha2UsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7Jz5CaXRCYWtlIFVzZXIgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UnVuIHRoZSBpbWFnZSBlaXRoZXIgb24gdGhlIGFjdHVhbCBoYXJkd2FyZSBvciB1c2luZyB0aGUgUUVNVQorICAgICAgICAgICAgICAgIGVtdWxhdG9yLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3VzaW5nLXByZS1idWlsdC1iaW5hcmllcy1hbmQtcWVtdSc+CisgICAgPHRpdGxlPlVzaW5nIFByZS1CdWlsdCBCaW5hcmllcyBhbmQgUUVNVTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQW5vdGhlciBvcHRpb24geW91IGhhdmUgdG8gZ2V0IHN0YXJ0ZWQgaXMgdG8gdXNlIHByZS1idWlsdCBiaW5hcmllcy4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgbWFueSB0eXBlcyBvZiBiaW5hcmllcyB3aXRoIGVhY2ggcmVsZWFzZS4KKyAgICAgICAgU2VlIHRoZSAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWltYWdlcyc+SW1hZ2VzPC91bGluaz4iCisgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbAorICAgICAgICBmb3IgZGVzY3JpcHRpb25zIG9mIHRoZSB0eXBlcyBvZiBiaW5hcmllcyB0aGF0IHNoaXAgd2l0aCBhIFlvY3RvIFByb2plY3QKKyAgICAgICAgcmVsZWFzZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVXNpbmcgYSBwcmUtYnVpbHQgYmluYXJ5IGlzIGlkZWFsIGZvciBkZXZlbG9waW5nIHNvZnR3YXJlIGFwcGxpY2F0aW9ucyB0byBydW4gb24geW91cgorICAgICAgICB0YXJnZXQgaGFyZHdhcmUuCisgICAgICAgIFRvIGRvIHRoaXMsIHlvdSBuZWVkIHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBhcHByb3ByaWF0ZSBjcm9zcy10b29sY2hhaW4gdGFyYmFsbCBmb3IKKyAgICAgICAgdGhlIGFyY2hpdGVjdHVyZSBvbiB3aGljaCB5b3UgYXJlIGRldmVsb3BpbmcuCisgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgYW4gU0RLIHR5cGUgaW1hZ2UsIHRoZSBpbWFnZSBzaGlwcyB3aXRoIHRoZSBjb21wbGV0ZSB0b29sY2hhaW4gbmF0aXZlIHRvCisgICAgICAgIHRoZSBhcmNoaXRlY3R1cmUuCisgICAgICAgIElmIHlvdSBhcmUgbm90IHVzaW5nIGFuIFNESyB0eXBlIGltYWdlLCB5b3UgbmVlZCB0byBzZXBhcmF0ZWx5IGRvd25sb2FkIGFuZAorICAgICAgICBpbnN0YWxsIHRoZSBzdGFuZC1hbG9uZSBZb2N0byBQcm9qZWN0IGNyb3NzLXRvb2xjaGFpbiB0YXJiYWxsLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIGltYWdlIHlvdSBhcmUgdXNpbmcsIHlvdSBuZWVkIHRvIGRvd25sb2FkIHRoZSBwcmUtYnVpbHQga2VybmVsCisgICAgICAgIHRoYXQgeW91IHdpbGwgYm9vdCBpbiB0aGUgUUVNVSBlbXVsYXRvciBhbmQgdGhlbiBkb3dubG9hZCBhbmQgZXh0cmFjdCB0aGUgdGFyZ2V0IHJvb3QKKyAgICAgICAgZmlsZXN5c3RlbSBmb3IgeW91ciB0YXJnZXQgbWFjaGluZeKAmXMgYXJjaGl0ZWN0dXJlLgorICAgICAgICBZb3UgY2FuIGdldCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYmluYXJpZXMgYW5kIGZpbGUgc3lzdGVtcyBmcm9tCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19NQUNISU5FU19ETF9VUkw7Jz5tYWNoaW5lczwvdWxpbms+LgorICAgICAgICBZb3UgY2FuIGdldCBpbnN0YWxsYXRpb24gc2NyaXB0cyBmb3Igc3RhbmQtYWxvbmUgdG9vbGNoYWlucyBmcm9tCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19UT09MQ0hBSU5fRExfVVJMOyc+dG9vbGNoYWluczwvdWxpbms+LgorICAgICAgICBPbmNlIHlvdSBoYXZlIGFsbCB5b3VyIGZpbGVzLCB5b3Ugc2V0IHVwIHRoZSBlbnZpcm9ubWVudCB0byBlbXVsYXRlIHRoZSBoYXJkd2FyZQorICAgICAgICBieSBzb3VyY2luZyBhbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuCisgICAgICAgIEZpbmFsbHksIHlvdSBzdGFydCB0aGUgUUVNVSBlbXVsYXRvci4KKyAgICAgICAgWW91IGNhbiBmaW5kIGRldGFpbHMgb24gYWxsIHRoZXNlIHN0ZXBzIGluIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyN1c2luZy1wcmUtYnVpbHQnPkV4YW1wbGUgVXNpbmcgUHJlLUJ1aWx0IEJpbmFyaWVzIGFuZCBRRU1VPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCB1c2luZyBRRU1VIHdpdGggdGhlIFlvY3RvIFByb2plY3QgaW4gdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdkZXYtbWFudWFsLXFlbXUnPlVzaW5nIHRoZSBRdWljayBFTVVsYXRvciAoUUVNVSk8L2xpbms+IgorICAgICAgICBzZWN0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBVc2luZyBRRU1VIHRvIGVtdWxhdGUgeW91ciBoYXJkd2FyZSBjYW4gcmVzdWx0IGluIHNwZWVkIGlzc3VlcworICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCBhbmQgaG9zdCBhcmNoaXRlY3R1cmUgbWl4LgorICAgICAgICBGb3IgZXhhbXBsZSwgdXNpbmcgdGhlIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4gaW1hZ2UgaW4gdGhlIGVtdWxhdG9yCisgICAgICAgIG9uIGFuIEludGVsLWJhc2VkIDMyLWJpdCAoeDg2KSBob3N0IG1hY2hpbmUgaXMgZmFzdCBiZWNhdXNlIHRoZSB0YXJnZXQgYW5kCisgICAgICAgIGhvc3QgYXJjaGl0ZWN0dXJlcyBtYXRjaC4KKyAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIHVzaW5nIHRoZSA8ZmlsZW5hbWU+cWVtdWFybTwvZmlsZW5hbWU+IGltYWdlIG9uIHRoZSBzYW1lIEludGVsLWJhc2VkCisgICAgICAgIGhvc3QgY2FuIGJlIHNsb3dlci4KKyAgICAgICAgQnV0LCB5b3Ugc3RpbGwgYWNoaWV2ZSBmYWl0aGZ1bCBlbXVsYXRpb24gb2YgQVJNLXNwZWNpZmljIGlzc3Vlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVG8gc3BlZWQgdGhpbmdzIHVwLCB0aGUgUUVNVSBpbWFnZXMgc3VwcG9ydCB1c2luZyA8ZmlsZW5hbWU+ZGlzdGNjPC9maWxlbmFtZT4KKyAgICAgICAgdG8gY2FsbCBhIGNyb3NzLWNvbXBpbGVyIG91dHNpZGUgdGhlIGVtdWxhdGVkIHN5c3RlbS4KKyAgICAgICAgSWYgeW91IHVzZWQgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiB0byBzdGFydCBRRU1VLCBhbmQgdGhlCisgICAgICAgIDxmaWxlbmFtZT5kaXN0Y2NkPC9maWxlbmFtZT4gYXBwbGljYXRpb24gaXMgcHJlc2VudCBvbiB0aGUgaG9zdCBzeXN0ZW0sIGFueQorICAgICAgICBCaXRCYWtlIGNyb3NzLWNvbXBpbGluZyB0b29sY2hhaW4gYXZhaWxhYmxlIGZyb20gdGhlIGJ1aWxkIHN5c3RlbSBpcyBhdXRvbWF0aWNhbGx5CisgICAgICAgIHVzZWQgZnJvbSB3aXRoaW4gUUVNVSBzaW1wbHkgYnkgY2FsbGluZyA8ZmlsZW5hbWU+ZGlzdGNjPC9maWxlbmFtZT4uCisgICAgICAgIFlvdSBjYW4gYWNjb21wbGlzaCB0aGlzIGJ5IGRlZmluaW5nIHRoZSBjcm9zcy1jb21waWxlciB2YXJpYWJsZQorICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+ZXhwb3J0IENDPSJkaXN0Y2MiPC9maWxlbmFtZT4pLgorICAgICAgICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgYXJlIHVzaW5nIGEgc3VpdGFibGUgU0RLIGltYWdlIG9yIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICBzdGFuZC1hbG9uZSB0b29sY2hhaW4gaXMgcHJlc2VudCwKKyAgICAgICAgdGhlIHRvb2xjaGFpbiBpcyBhbHNvIGF1dG9tYXRpY2FsbHkgdXNlZC4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgU2V2ZXJhbCBtZWNoYW5pc21zIGV4aXN0IHRoYXQgbGV0IHlvdSBjb25uZWN0IHRvIHRoZSBzeXN0ZW0gcnVubmluZyBvbiB0aGUKKyAgICAgICAgUUVNVSBlbXVsYXRvcjoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5RRU1VIHByb3ZpZGVzIGEgZnJhbWVidWZmZXIgaW50ZXJmYWNlIHRoYXQgbWFrZXMgc3RhbmRhcmQKKyAgICAgICAgICAgICAgICBjb25zb2xlcyBhdmFpbGFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2VuZXJhbGx5LCBoZWFkbGVzcyBlbWJlZGRlZCBkZXZpY2VzIGhhdmUgYSBzZXJpYWwgcG9ydC4KKyAgICAgICAgICAgICAgICBJZiBzbywgeW91IGNhbiBjb25maWd1cmUgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb2YgdGhlIHJ1bm5pbmcgaW1hZ2UKKyAgICAgICAgICAgICAgICB0byB1c2UgdGhhdCBwb3J0IHRvIHJ1biBhIGNvbnNvbGUuCisgICAgICAgICAgICAgICAgVGhlIGNvbm5lY3Rpb24gdXNlcyBzdGFuZGFyZCBJUCBuZXR3b3JraW5nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFNTSCBzZXJ2ZXJzIGV4aXN0IGluIHNvbWUgUUVNVSBpbWFnZXMuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBRRU1VIGltYWdlIGhhcyBhCisgICAgICAgICAgICAgICAgRHJvcGJlYXIgc2VjdXJlIHNoZWxsIChTU0gpIHNlcnZlciB0aGF0IHJ1bnMgd2l0aCB0aGUgcm9vdAorICAgICAgICAgICAgICAgIHBhc3N3b3JkIGRpc2FibGVkLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1mdWxsLWNtZGxpbmU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1sc2I8L2ZpbGVuYW1lPiBRRU1VIGltYWdlcworICAgICAgICAgICAgICAgIGhhdmUgT3BlblNTSCBpbnN0ZWFkIG9mIERyb3BiZWFyLgorICAgICAgICAgICAgICAgIEluY2x1ZGluZyB0aGVzZSBTU0ggc2VydmVycyBhbGxvdyB5b3UgdG8gdXNlIHN0YW5kYXJkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNzaDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+c2NwPC9maWxlbmFtZT4gY29tbWFuZHMuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBRRU1VIGltYWdlLAorICAgICAgICAgICAgICAgIGhvd2V2ZXIsIGNvbnRhaW5zIG5vIFNTSCBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiB1c2UgYSBwcm92aWRlZCwgdXNlci1zcGFjZSBORlMgc2VydmVyIHRvIGJvb3QgdGhlIFFFTVUgc2Vzc2lvbgorICAgICAgICAgICAgICAgIHVzaW5nIGEgbG9jYWwgY29weSBvZiB0aGUgcm9vdCBmaWxlc3lzdGVtIG9uIHRoZSBob3N0LgorICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIG1ha2UgdGhpcyBjb25uZWN0aW9uLCB5b3UgbXVzdCBleHRyYWN0IGEgcm9vdCBmaWxlc3lzdGVtIHRhcmJhbGwgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXUtZXh0cmFjdC1zZGs8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIEFmdGVyIHJ1bm5pbmcgdGhlIGNvbW1hbmQsIHlvdSBtdXN0IHRoZW4gcG9pbnQgdGhlIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBzY3JpcHQgdG8gdGhlIGV4dHJhY3RlZCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBhIHJvb3QgZmlsZXN5c3RlbSBpbWFnZSBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L25vdGU+Cis8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA4ZDNhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwueG1sCkBAIC0wLDAgKzEsMTI0IEBACis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Ym9vayBpZD0nZGV2LW1hbnVhbCcgbGFuZz0nZW4nCisgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIKKyAgICAgIHhtbG5zPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgICAgID4KKyAgICA8Ym9va2luZm8+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0nZmlndXJlcy9kZXYtdGl0bGUucG5nJworICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J1NWRycKKyAgICAgICAgICAgICAgICAgICAgYWxpZ249J2xlZnQnIHNjYWxlZml0PScxJyB3aWR0aD0nMTAwJScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8dGl0bGU+CisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAorICAgICAgICA8L3RpdGxlPgorCisgICAgICAgIDxhdXRob3Jncm91cD4KKyAgICAgICAgICAgIDxhdXRob3I+CisgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5TY290dDwvZmlyc3RuYW1lPiA8c3VybmFtZT5SaWZlbmJhcms8L3N1cm5hbWU+CisgICAgICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8b3JnbmFtZT5JbnRlbCBDb3Jwb3JhdGlvbjwvb3JnbmFtZT4KKyAgICAgICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgIDxlbWFpbD5zY290dC5tLnJpZmVuYmFya0BpbnRlbC5jb208L2VtYWlsPgorICAgICAgICAgICAgPC9hdXRob3I+CisgICAgICAgIDwvYXV0aG9yZ3JvdXA+CisKKyAgICAgICAgPHJldmhpc3Rvcnk+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT42IE9jdG9iZXIgMjAxMTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlRoZSBpbml0aWFsIGRvY3VtZW50IHJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4yPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxMjwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4yIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4zPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDEyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjMgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjQ8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDEzPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjQgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjU8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTM8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNS4xPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+SmFudWFyeSAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjUuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNjwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNiBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNzwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS43IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS44PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS44IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS45PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjkgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgIDwvcmV2aGlzdG9yeT4KKworICAgIDxjb3B5cmlnaHQ+CisgICAgIDx5ZWFyPiZDT1BZUklHSFRfWUVBUjs8L3llYXI+CisgICAgICA8aG9sZGVyPkxpbnV4IEZvdW5kYXRpb248L2hvbGRlcj4KKyAgICA8L2NvcHlyaWdodD4KKworICAgIDxsZWdhbG5vdGljZT4KKyAgICAgIDxwYXJhPgorICAgICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudCB1bmRlcgorICAgICAgICAgIHRoZSB0ZXJtcyBvZiB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiIHVybD0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMi4wL3VrLyI+CisgICAgICAgICAgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAyLjAgVUs6IEVuZ2xhbmQgJmFtcDsgV2FsZXM8L3VsaW5rPiBhcyBwdWJsaXNoZWQgYnkKKyAgICAgICAgICBDcmVhdGl2ZSBDb21tb25zLgorICAgICAgPC9wYXJhPgorCisgICAgICA8bm90ZT4KKyAgICAgICAgICBGb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbWFudWFsIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlLCBzZWUgdGhlCisgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsnPllvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsPC91bGluaz4KKyAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICA8L25vdGU+CisgICAgPC9sZWdhbG5vdGljZT4KKworICAgIDwvYm9va2luZm8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJkZXYtbWFudWFsLWludHJvLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iZGV2LW1hbnVhbC1zdGFydC54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImRldi1tYW51YWwtbmV3YmllLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iZGV2LW1hbnVhbC1tb2RlbC54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImRldi1tYW51YWwtY29tbW9uLXRhc2tzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iZGV2LW1hbnVhbC1xZW11LnhtbCIvPgorCis8L2Jvb2s+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1zdHlsZS5jc3MgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MDBmZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtc3R5bGUuY3NzCkBAIC0wLDAgKzEsOTg0IEBACisvKgorICAgR2VuZXJpYyBYSFRNTCAvIERvY0Jvb2sgWEhUTUwgQ1NTIFN0eWxlc2hlZXQuCisKKyAgIEJyb3dzZXIgd3JhbmdsaW5nIGFuZCB0eXBvZ3JhcGhpYyBkZXNpZ24gYnkKKyAgICAgIE95dmluZCBLb2xhcyAvIHBpcHBpbkBnaW1wLm9yZworCisgICBDdXN0b21pc2VkIGZvciBQb2t5IGJ5CisgICAgICBNYXR0aGV3IEFsbHVtIC8gbWFsbHVtQG8taGFuZC5jb20KKworICAgVGhhbmtzIHRvOgorICAgICBMaWFtIFIuIEUuIFF1aW4KKyAgICAgV2lsbGlhbSBTa2FnZ3MKKyAgICAgSmFrdWIgU3RlaW5lcgorCisgICBTdHJ1Y3R1cmUKKyAgIC0tLS0tLS0tLQorCisgICBUaGUgc3R5bGVzaGVldCBpcyBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKKworICAgICAgIFBvc2l0aW9uaW5nCisgICAgICAgICAgTWFyZ2lucywgcGFkZGluZ3MsIHdpZHRoLCBmb250LXNpemUsIGNsZWFyaW5nLgorICAgICAgIERlY29yYXRpb25zCisgICAgICAgICAgQm9yZGVycywgc3R5bGUKKyAgICAgICBDb2xvcnMKKyAgICAgICAgICBDb2xvcnMKKyAgICAgICBHcmFwaGljcworICAgICAgICAgIEdyYXBoaWNhbCBiYWNrZ3JvdW5kcworICAgICAgIE5hc3R5IElFIHR3ZWFrcworICAgICAgICAgIFdvcmthcm91bmRzIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgaW4gaW50ZXJuZXQgZXhwbG9yZXIsCisgICAgICAgICAgY3VycmVudGx5IG1ha2VzIHRoZSBzdHlsZXNoZWV0IG5vbiB2YWxpZGF0aW5nLCBidXQgdXAgdW50aWwKKyAgICAgICAgICB0aGlzIHBvaW50IGl0IGlzIHZhbGlkYXRpbmcuCisgICAgICAgTW96aWxsYSBleHRlbnNpb25zCisgICAgICAgICAgVHJhbnNwYXJlbmN5IGZvciBmb290ZXIKKwkgIFJvdW5kZWQgY29ybmVycyBvbiBib3hlcworCisqLworCisKKyAgLyoqKioqKioqKioqKioqKiAvCisgLyAgUG9zaXRpb25pbmcgICAvCisvICoqKioqKioqKioqKioqKi8KKworYm9keSB7CisgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBTYW5zLCBzYW5zLXNlcmlmOworCisgIG1pbi13aWR0aDogNjQwcHg7CisgIHdpZHRoOiA4MCU7CisgIG1hcmdpbjogIDBlbSBhdXRvOworICBwYWRkaW5nOiAyZW0gNWVtIDVlbSA1ZW07CisgIGNvbG9yOiAjMzMzOworfQorCitoMSxoMixoMyxoNCxoNSxoNixoNyB7CisgIGZvbnQtZmFtaWx5OiBBcmlhbCwgU2FuczsKKyAgY29sb3I6ICMwMDU1N0Q7CisgIGNsZWFyOiBib3RoOworfQorCitoMSB7CisgIGZvbnQtc2l6ZTogMmVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMmVtIDBlbSAwZW0gMGVtOworfQorCitoMi5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMC4xMGVtIDBlbSAzLjBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjhlbTsKKyAgcGFkZGluZy1sZWZ0OiAyMCU7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworaDIgeworICBtYXJnaW46IDJlbSAwZW0gMC42NmVtIDBlbTsKKyAgcGFkZGluZzogMC41ZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS41ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMy5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQyLjE0JTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK2gzIHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0MCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNCB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDUgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g2IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLmF1dGhvcmdyb3VwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIHBhZGRpbmctdG9wOiAyNTZweDsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL2Rldi10aXRsZS5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7CisgIG1hcmdpbi10b3A6IC0yNTZweDsKKyAgcGFkZGluZy1yaWdodDogNTBweDsKKyAgbWFyZ2luLWxlZnQ6IDBweDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7CisgIHdpZHRoOiA3NDBweDsKK30KKworaDMuYXV0aG9yIHsKKyAgbWFyZ2luOiAwZW0gMG1lIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zaXplOiAxMDAlOworICBjb2xvcjogIzMzMzsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5hdXRob3IgdHQuZW1haWwgeworICBmb250LXNpemU6IDY2JTsKK30KKworLnRpdGxlcGFnZSBociB7CisgIHdpZHRoOiAwZW07CisgIGNsZWFyOiBib3RoOworfQorCisucmV2aGlzdG9yeSB7CisgIHBhZGRpbmctdG9wOiAyZW07CisgIGNsZWFyOiBib3RoOworfQorCisudG9jLAorLmxpc3Qtb2YtdGFibGVzLAorLmxpc3Qtb2YtZXhhbXBsZXMsCisubGlzdC1vZi1maWd1cmVzIHsKKyAgcGFkZGluZzogMS4zM2VtIDBlbSAyLjVlbSAwZW07CisgIGNvbG9yOiAjMDA1NTdEOworfQorCisudG9jIHAsCisubGlzdC1vZi10YWJsZXMgcCwKKy5saXN0LW9mLWZpZ3VyZXMgcCwKKy5saXN0LW9mLWV4YW1wbGVzIHAgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMC4zZW07CisgIG1hcmdpbjogMS41ZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgcCBiLAorLmxpc3Qtb2YtdGFibGVzIHAgYiwKKy5saXN0LW9mLWZpZ3VyZXMgcCBiLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCBieworICBmb250LXNpemU6IDEwMC4wJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy50b2MgZGwsCisubGlzdC1vZi10YWJsZXMgZGwsCisubGlzdC1vZi1maWd1cmVzIGRsLAorLmxpc3Qtb2YtZXhhbXBsZXMgZGwgeworICBtYXJnaW46IDBlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZHQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGRkIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAyLjZlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuZ2xvc3NhcnkgZGwsCitkaXYudmFyaWFibGVsaXN0IGRsIHsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgd2lkdGg6IDIwZW07CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCisudmFyaWFibGVsaXN0IGRsIGR0IHsKKyAgbWFyZ2luLXRvcDogMC41ZW07Cit9CisKKy5nbG9zc2FyeSBkbCBkZCwKKy52YXJpYWJsZWxpc3QgZGwgZGQgeworICBtYXJnaW4tdG9wOiAtMWVtOworICBtYXJnaW4tbGVmdDogMjUuNWVtOworfQorCisuZ2xvc3NhcnkgZGQgcCwKKy52YXJpYWJsZWxpc3QgZGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKK2RpdiBwLmNvcHlyaWdodCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK2Rpdi5sZWdhbG5vdGljZSBwLmxlZ2Fsbm90aWNlLXRpdGxlIHsKKyAgbWFyZ2luLWJvdHRvbTogMGVtOworfQorCitwIHsKKyAgbGluZS1oZWlnaHQ6IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisKK30KKworZGwgeworICBwYWRkaW5nLXRvcDogMGVtOworfQorCitociB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCisKKy5tZWRpYW9iamVjdCwKKy5tZWRpYW9iamVjdGNvIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitpbWcgeworICBib3JkZXI6IG5vbmU7Cit9CisKK3VsIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMS41ZW07Cit9CisKK3VsIGxpIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCit1bCBsaSBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKwordGFibGUgeworICB3aWR0aCA6MTAwJTsKK30KKwordGggeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCitwIGFbaWRdIHsKKyAgbWFyZ2luOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKKyAgZGlzcGxheTogaW5saW5lOworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorCithIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGNvbG9yOiAjNDQ0OworfQorCitwcmUgeworICAgIG92ZXJmbG93OiBhdXRvOworfQorCithOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIC8qZm9udC13ZWlnaHQ6IGJvbGQ7Ki8KK30KKworLyogVGhpcyBzdHlsZSBkZWZpbmVzIGhvdyB0aGUgcGVybWFsaW5rIGNoYXJhY3RlcgorICAgYXBwZWFycyBieSBpdHNlbGYgYW5kIHdoZW4gaG92ZXJlZCBvdmVyIHdpdGgKKyAgIHRoZSBtb3VzZS4gKi8KKworW2FsdD0nUGVybWFsaW5rJ10geyBjb2xvcjogI2VlZTsgfQorW2FsdD0nUGVybWFsaW5rJ106aG92ZXIgeyBjb2xvcjogYmxhY2s7IH0KKworCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUgeworICBtYXJnaW46IDFlbSAwZW07CisgIHBhZGRpbmc6IDFlbTsKKyAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOworfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWxleGFtcGxlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbHRhYmxlIHAudGl0bGUgYiwKK2Rpdi5maWd1cmUgcC50aXRsZSBiLAorZGl2LmV4YW1wbGUgcC50aXRsZSBiLAorZGl2LnRhYmxlIHAudGl0bGUgYnsKKyAgICBwYWRkaW5nLXRvcDogMGVtOworICAgIG1hcmdpbi10b3A6IDBlbTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLm1lZGlhb2JqZWN0IC5jYXB0aW9uLAorLm1lZGlhb2JqZWN0IC5jYXB0aW9uIHAgIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZy10b3A6IDAuNWVtOworICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Cit9CisKKy5lcGlncmFwaCB7CisgIHBhZGRpbmctbGVmdDogNTUlOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKy5lcGlncmFwaCBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmVwaWdyYXBoIC5xdW90ZSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKy5lcGlncmFwaCAuYXR0cmlidXRpb24geworICBmb250LXN0eWxlOiBub3JtYWw7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitzcGFuLmFwcGxpY2F0aW9uIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisucHJvZ3JhbWxpc3RpbmcgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlOworICBmb250LXNpemU6IDgwJTsKKyAgd2hpdGUtc3BhY2U6IHByZTsKKyAgbWFyZ2luOiAxLjMzZW0gMGVtOworICBwYWRkaW5nOiAxLjMzZW07Cit9CisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBtYXJnaW4tdG9wOiAxZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKKworfQorCisvKiBmb3JjZSBmdWxsIHdpZHRoIG9mIHRhYmxlIHdpdGhpbiBkaXYgKi8KKy50aXAgdGFibGUsCisud2FybmluZyB0YWJsZSwKKy5jYXV0aW9uIHRhYmxlLAorLm5vdGUgdGFibGUgeworICBib3JkZXI6IG5vbmU7CisgIHdpZHRoOiAxMDAlOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBwYWRkaW5nOiAwLjhlbSAwLjBlbSAwLjBlbSAwLjBlbTsKKyAgbWFyZ2luIDogMGVtIDBlbSAwZW0gMGVtOworfQorCisudGlwIHAsCisud2FybmluZyBwLAorLmNhdXRpb24gcCwKKy5ub3RlIHAgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMC41ZW07CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmFjcm9ueW0geworICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICBwYWRkaW5nOiAwLjA5ZW0gMC4zZW07CisgIG1hcmdpbjogMGVtOworfQorCisuaXRlbWl6ZWRsaXN0IGxpIHsKKyAgY2xlYXI6IG5vbmU7Cit9CisKKy5maWxlbmFtZSB7CisgIGZvbnQtc2l6ZTogbWVkaXVtOworICBmb250LWZhbWlseTogQ291cmllciwgbW9ub3NwYWNlOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDBlbTsKKyAgdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RmOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgbGVmdDogMGVtOworICBib3R0b206IDBlbTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworZGl2Lm5hdmhlYWRlciB0ZCwKK2Rpdi5uYXZmb290ZXIgdGQgeworICBmb250LXNpemU6IDY2JTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0aCB7CisgIC8qZm9udC1mYW1pbHk6IEdlb3JnaWEsIFRpbWVzLCBzZXJpZjsqLworICAvKmZvbnQtc2l6ZTogeC1sYXJnZTsqLworICBmb250LXNpemU6IDgwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci1ib3R0b206IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYSwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYSB7CisgIGNvbG9yOiAjNzc3OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKy8qIG5vcm1hbCB0ZXh0IGluIHRoZSBmb290ZXIgKi8KK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgeworICBjb2xvcjogYmxhY2s7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTp2aXNpdGVkLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOnZpc2l0ZWQgeworICBjb2xvcjogIzQ0NDsKK30KKworCisvKiBsaW5rcyBpbiBoZWFkZXIgYW5kIGZvb3RlciAqLworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOmhvdmVyLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBjb2xvcjogIzMzYTsKK30KKworZGl2Lm5hdmhlYWRlciBociwKK2Rpdi5uYXZmb290ZXIgaHIgeworICBkaXNwbGF5OiBub25lOworfQorCisKKy5xYW5kYXNldCB0ci5xdWVzdGlvbiB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnFhbmRhc2V0IHRyLmFuc3dlciB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKy5hbnN3ZXIgdGQgeworICBwYWRkaW5nLWJvdHRvbTogMS41ZW07Cit9CisKKy5lbXBoYXNpcyB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisKKyAgLyoqKioqKioqKioqKiogLworIC8gZGVjb3JhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKi8KKworLnRpdGxlcGFnZSB7Cit9CisKKy5wYXJ0IC50aXRsZSB7Cit9CisKKy5zdWJ0aXRsZSB7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKgoraDEgeworICBib3JkZXI6IG5vbmU7Cit9CisKK2gyIHsKKyAgYm9yZGVyLXRvcDogc29saWQgMC4yZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDMgeworICBib3JkZXItdG9wOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDQgeworICBib3JkZXI6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNSB7CisgIGJvcmRlcjogMGVtOworfQorKi8KKworLnByb2dyYW1saXN0aW5nIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisucXVlc3Rpb24gdGQgeworICBib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7Cit9CisKKy5hbnN3ZXIgeworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZDsKK30KKworICAvKioqKioqKioqIC8KKyAvICBjb2xvcnMgIC8KKy8gKioqKioqKioqLworCitib2R5IHsKKyAgY29sb3I6ICMzMzM7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorCithIHsKKyAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cit9CisKK2E6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVkZWRlOworfQorCisKK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3LAoraDggeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKworaHIgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKKworLnRpcCwgLndhcm5pbmcsIC5jYXV0aW9uLCAubm90ZSB7CisgIGJvcmRlci1jb2xvcjogI2ZmZjsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKK30KKworCisud2FybmluZyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLnRpcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5ub3RlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgY29sb3I6ICMwNDQ7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworcHJlLnByb2dyYW1saXN0aW5nIHsKKyAgY29sb3I6IGJsYWNrOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXItY29sb3I6ICNhYWE7CisgIGJvcmRlci13aWR0aDogMnB4OworfQorCisuZ3VpbWVudSwKKy5ndWlsYWJlbCwKKy5ndWltZW51aXRlbSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgYm9yZGVyLWNvbG9yOiAjOTk5OworfQorCisKK2Rpdi5uYXZoZWFkZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKK2Rpdi5uYXZmb290ZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKKyAgLyoqKioqKioqKioqIC8KKyAvICBncmFwaGljcyAgLworLyAqKioqKioqKioqKi8KKworLyoKK2JvZHkgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ib2R5X2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisubmF2aGVhZGVyLAorLm5vdGUsCisudGlwIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvbm90ZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLndhcm5pbmcsCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL3dhcm5pbmdfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5maWd1cmUsCisuaW5mb3JtYWxmaWd1cmUsCisuZXhhbXBsZSwKKy5pbmZvcm1hbGV4YW1wbGUsCisudGFibGUsCisuaW5mb3JtYWx0YWJsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2ZpZ3VyZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworKi8KK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3eworfQorCisvKgorRXhhbXBsZSBvZiBob3cgdG8gc3RpY2sgYW4gaW1hZ2UgYXMgcGFydCBvZiB0aGUgdGl0bGUuCisKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy93aGl0ZS1vbi1ibGFjay5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Cit9CisqLworCitkaXYucHJlZmFjZSAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5jb2xvcGhvbiAudGl0bGUsCitkaXYuY2hhcHRlciAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7Cit9CisKK2Rpdi5zZWN0aW9uIGRpdi5zZWN0aW9uIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LnNlY3QyIC50aXRsZXBhZ2UgLnRpdGxlIHsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworfQorCisKK2gxLnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIGhlaWdodDogMjU2cHg7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47CisgIHdpZHRoOiAwcHg7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyAgcGlwcGluLmdpbXAub3JnIHNwZWNpZmljIGFsdGVyYXRpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgY29sb3I6ICM3Nzc7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nOiAwOworICBtYXJnaW46IDA7CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwcHg7CisgIGxlZnQ6IDBweDsKKyAgd2lkdGg6IDEwMCU7CisgIGhlaWdodDogNTBweDsKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2hlYWRpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKKyAgYm9yZGVyOiBub25lOworfQorCitkaXYuaGVhZGluZyBhIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyOiBub25lOworICBjb2xvcjogI2RkZDsKKyAgZm9udC1zaXplOiA4MCU7CisgIHRleHQtYWxpZ246cmlnaHQ7CisKKyAgd2lkdGg6IDEwMCU7CisgIHBhZGRpbmctdG9wOiAxMHB4OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMHB4OworICBsZWZ0OiAwcHg7CisKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2Zvb3RpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7Cit9CisqLworCisKKworICAvKioqKioqKioqKioqKioqKioqIC8KKyAvICBuYXN0eSBpZSB0d2Vha3MgIC8KKy8gKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKKyAgbWFyZ2luLWxlZnQ6ZXhwcmVzc2lvbigiLTVlbSIpOworfQorYm9keSB7CisgIHBhZGRpbmc6ZXhwcmVzc2lvbigiNGVtIDVlbSAwZW0gNWVtIik7Cit9CisqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvIG1vemlsbGEgdmVuZG9yIHNwZWNpZmljIGNzcyBleHRlbnNpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIC1tb3otb3BhY2l0eTogMC44ZW07Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSwKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuNWVtOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuM2VtOworfQorKi8KKwordGFibGUgdHIgdGQgdGFibGUgdHIgdGQgeworICBkaXNwbGF5OiBub25lOworfQorCisKK2hyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKwordGFibGUgeworICBib3JkZXI6IDBlbTsKK30KKworIC5waG90byB7CisgIGZsb2F0OiByaWdodDsKKyAgbWFyZ2luLWxlZnQ6ICAgMS41ZW07CisgIG1hcmdpbi1ib3R0b206IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisgIG1heC13aWR0aDogICAgICAxN2VtOworICBib3JkZXI6ICAgICAxcHggc29saWQgZ3JheTsKKyAgcGFkZGluZzogICAgM3B4OworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKyAuc2VwZXJhdG9yIHsKKyAgIHBhZGRpbmctdG9wOiAyZW07CisgICBjbGVhcjogYm90aDsKKyAgfQorCisgICN2YWxpZGF0b3JzIHsKKyAgICAgIG1hcmdpbi10b3A6IDVlbTsKKyAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgY29sb3I6ICM3Nzc7CisgIH0KKyAgQG1lZGlhIHByaW50IHsKKyAgICAgIGJvZHkgeworICAgICAgICAgIGZvbnQtc2l6ZTogOHB0OworICAgICAgfQorICAgICAgLm5vcHJpbnQgeworICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CisgICAgICB9CisgIH0KKworCisudGlwLAorLm5vdGUgeworICAgYmFja2dyb3VuZDogI2YwZjBmMjsKKyAgIGNvbG9yOiAjMzMzOworICAgcGFkZGluZzogMjBweDsKKyAgIG1hcmdpbjogMjBweDsKK30KKworLnRpcCBoMywKKy5ub3RlIGgzIHsKKyAgIHBhZGRpbmc6IDBlbTsKKyAgIG1hcmdpbjogMGVtOworICAgZm9udC1zaXplOiAyZW07CisgICBmb250LXdlaWdodDogYm9sZDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisudGlwIGEsCisubm90ZSBhIHsKKyAgIGNvbG9yOiAjMzMzOworICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5mb290bm90ZSB7CisgICBmb250LXNpemU6IHNtYWxsOworICAgY29sb3I6ICMzMzM7Cit9CisKKy8qIENoYW5nZXMgdGhlIGFubm91bmNlbWVudCB0ZXh0ICovCisudGlwIGgzLAorLndhcm5pbmcgaDMsCisuY2F1dGlvbiBoMywKKy5ub3RlIGgzIHsKKyAgIGZvbnQtc2l6ZTpsYXJnZTsKKyAgIGNvbG9yOiAjMDA1NTdEOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOTMzNzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2FwcC1kZXYtZmxvdy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MGIwYWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2JzcC1kZXYtZmxvdy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvYnVpbGQtd29ya3NwYWNlLWRpcmVjdG9yeS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU2MWY4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvYnVpbGQtd29ya3NwYWNlLWRpcmVjdG9yeS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9kZXYtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9kZXYtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzY2FjNGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2Rldi10aXRsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9naXQtd29ya2Zsb3cucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9naXQtd29ya2Zsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MDEzMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2dpdC13b3JrZmxvdy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMjUxZDVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDkxMDVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE2YzBiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLWdlbmVyaWMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOTcwZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLWdlbmVyaWMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvcmVjaXBlLXdvcmtmbG93LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvcmVjaXBlLXdvcmtmbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGU5NjBiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9yZWNpcGUtd29ya2Zsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWM1ZjI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMveXAtZG93bmxvYWQucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy95cC1kb3dubG9hZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3MGJlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMveXAtZG93bmxvYWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2ZpZ3VyZXMva2VybmVsLWFyY2hpdGVjdHVyZS1vdmVydmlldy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9maWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhYWQxNzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9maWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2ZpZ3VyZXMva2VybmVsLWRldi10aXRsZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9maWd1cmVzL2tlcm5lbC1kZXYtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhOGRkNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9maWd1cmVzL2tlcm5lbC1kZXYtdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtYWR2YW5jZWQueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1hZHZhbmNlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkYjg1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtYWR2YW5jZWQueG1sCkBAIC0wLDAgKzEsMTA4OCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2tlcm5lbC1kZXYtYWR2YW5jZWQnPgorPHRpdGxlPldvcmtpbmcgd2l0aCBBZHZhbmNlZCBNZXRhZGF0YTwvdGl0bGU+CisKKzxzZWN0aW9uIGlkPSdrZXJuZWwtZGV2LWFkdmFuY2VkLW92ZXJ2aWV3Jz4KKyAgICA8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgYW5kIHBhdGNoZXMsIHRoZQorICAgICAgICBZb2N0byBQcm9qZWN0IGtlcm5lbCB0b29scyBhbHNvIHN1cHBvcnQgcmljaAorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPiB0aGF0IHlvdSBjYW4KKyAgICAgICAgdXNlIHRvIGRlZmluZSBjb21wbGV4IHBvbGljaWVzIGFuZCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgc3VwcG9ydC4KKyAgICAgICAgVGhlIHB1cnBvc2Ugb2YgdGhlIE1ldGFkYXRhIGFuZCB0aGUgdG9vbHMgdGhhdCBtYW5hZ2UgaXQsIGtub3duIGFzCisgICAgICAgIHRoZSBrZXJuLXRvb2xzICg8ZmlsZW5hbWU+a2Vybi10b29scy1uYXRpdmVfZ2l0LmJiPC9maWxlbmFtZT4pLCBpcworICAgICAgICB0byBoZWxwIHlvdSBtYW5hZ2UgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHNvdXJjZXMKKyAgICAgICAgdXNlZCB0byBzdXBwb3J0IG11bHRpcGxlIEJTUHMgYW5kIExpbnV4IGtlcm5lbCB0eXBlcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSd1c2luZy1rZXJuZWwtbWV0YWRhdGEtaW4tYS1yZWNpcGUnPgorICAgIDx0aXRsZT5Vc2luZyBLZXJuZWwgTWV0YWRhdGEgaW4gYSBSZWNpcGU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBrZXJuZWwgc291cmNlcyBpbiB0aGUgWW9jdG8gUHJvamVjdCBjb250YWluIGtlcm5lbCBNZXRhZGF0YSwgd2hpY2gKKyAgICAgICAgaXMgbG9jYXRlZCBpbiB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2hlcyBvZiB0aGUga2VybmVsCisgICAgICAgIHNvdXJjZSBHaXQgcmVwb3NpdG9yaWVzLgorICAgICAgICBUaGlzIE1ldGFkYXRhIGRlZmluZXMgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcykgdGhhdAorICAgICAgICBjb3JyZXNwb25kIHRvIGRlZmluaXRpb25zIGluIGxpbnV4LXlvY3RvIHJlY2lwZXMgZm9yIHRoZSBzYW1lIEJTUHMuCisgICAgICAgIEEgQlNQIGNvbnNpc3RzIG9mIGFuIGFnZ3JlZ2F0aW9uIG9mIGtlcm5lbCBwb2xpY3kgYW5kIGhhcmR3YXJlLXNwZWNpZmljCisgICAgICAgIGZlYXR1cmUgZW5hYmxlbWVudHMuCisgICAgICAgIFRoZSBCU1AgY2FuIGJlIGluZmx1ZW5jZWQgZnJvbSB3aXRoaW4gdGhlIGxpbnV4LXlvY3RvIHJlY2lwZS4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBMaW51eCBrZXJuZWwgc291cmNlIHRoYXQgY29udGFpbnMga2VybmVsIE1ldGFkYXRhIGlzIHNhaWQgdG8gYmUKKyAgICAgICAgICAgICJsaW51eC15b2N0byBzdHlsZSIga2VybmVsIHNvdXJjZS4KKyAgICAgICAgICAgIEEgTGludXgga2VybmVsIHJlY2lwZSB0aGF0IGluaGVyaXRzIGZyb20gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8uaW5jPC9maWxlbmFtZT4gaW5jbHVkZSBmaWxlIGlzIHNhaWQgdG8gYmUgYQorICAgICAgICAgICAgImxpbnV4LXlvY3RvIHN0eWxlIiByZWNpcGUuCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRXZlcnkgbGludXgteW9jdG8gc3R5bGUgcmVjaXBlIG11c3QgZGVmaW5lIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS01BQ0hJTkUnPjxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgdmFyaWFibGUuCisgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdHlwaWNhbGx5IHNldCB0byB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICB2YXJpYWJsZSwgd2hpY2ggaXMgdXNlZCBieQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPi4KKyAgICAgICAgSG93ZXZlciwgaW4gc29tZSBjYXNlcywgdGhlIHZhcmlhYmxlIG1pZ2h0IGluc3RlYWQgcmVmZXIgdG8gdGhlCisgICAgICAgIHVuZGVybHlpbmcgcGxhdGZvcm0gb2YgdGhlIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIE11bHRpcGxlIEJTUHMgY2FuIHJldXNlIHRoZSBzYW1lIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+CisgICAgICAgIG5hbWUgaWYgdGhleSBhcmUgYnVpbHQgdXNpbmcgdGhlIHNhbWUgQlNQIGRlc2NyaXB0aW9uLgorICAgICAgICBUaGUgImVwMTA4LXp5bnFtcCIgYW5kICJxZW11enlucW1wIiBCU1AgY29tYmluYXRpb24KKyAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLXhpbGlueDwvZmlsZW5hbWU+CisgICAgICAgIGxheWVyIGlzIGEgZ29vZCBleGFtcGxlIG9mIHR3byBCU1BzIHVzaW5nIHRoZSBzYW1lCisgICAgICAgIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+IHZhbHVlIChpLmUuICJ6eW5xbXAiKS4KKyAgICAgICAgU2VlIHRoZSA8bGluayBsaW5rZW5kPSdic3AtZGVzY3JpcHRpb25zJz5CU1AgRGVzY3JpcHRpb25zPC9saW5rPiBzZWN0aW9uCisgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBFdmVyeSBsaW51eC15b2N0byBzdHlsZSByZWNpcGUgbXVzdCBhbHNvIGluZGljYXRlIHRoZSBMaW51eCBrZXJuZWwKKyAgICAgICAgc291cmNlIHJlcG9zaXRvcnkgYnJhbmNoIHVzZWQgdG8gYnVpbGQgdGhlIExpbnV4IGtlcm5lbC4KKyAgICAgICAgVGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LQlJBTkNIJz48ZmlsZW5hbWU+S0JSQU5DSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgdmFyaWFibGUgbXVzdCBiZSBzZXQgdG8gaW5kaWNhdGUgdGhlIGJyYW5jaC4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPktCUkFOQ0g8L2ZpbGVuYW1lPiB2YWx1ZSB0byBkZWZpbmUgYW4KKyAgICAgICAgICAgIGFsdGVybmF0ZSBicmFuY2ggdHlwaWNhbGx5IHdpdGggYSBtYWNoaW5lIG92ZXJyaWRlIGFzIHNob3duIGhlcmUKKyAgICAgICAgICAgIGZyb20gdGhlIDxmaWxlbmFtZT5tZXRhLWVtZW5sb3c8L2ZpbGVuYW1lPiBsYXllcjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0JSQU5DSF9lbWVubG93LW5vZW1nZCA9ICJzdGFuZGFyZC9iYXNlIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBsaW51eC15b2N0byBzdHlsZSByZWNpcGVzIGNhbiBvcHRpb25hbGx5IGRlZmluZSB0aGUgZm9sbG93aW5nCisgICAgICAgIHZhcmlhYmxlczoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS0VSTkVMX0ZFQVRVUkVTJz5LRVJORUxfRkVBVFVSRVM8L3VsaW5rPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTElOVVhfS0VSTkVMX1RZUEUnPkxJTlVYX0tFUk5FTF9UWVBFPC91bGluaz4KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPiBkZWZpbmVzIHRoZSBrZXJuZWwgdHlwZSB0byBiZQorICAgICAgICB1c2VkIGluIGFzc2VtYmxpbmcgdGhlIGNvbmZpZ3VyYXRpb24uCisgICAgICAgIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIDxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+LAorICAgICAgICBpdCBkZWZhdWx0cyB0byAic3RhbmRhcmQiLgorICAgICAgICBUb2dldGhlciB3aXRoCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LTUFDSElORSc+PGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgPGZpbGVuYW1lPkxJTlVYX0tFUk5FTF9UWVBFPC9maWxlbmFtZT4gZGVmaW5lcyB0aGUgc2VhcmNoCisgICAgICAgIGFyZ3VtZW50cyB1c2VkIGJ5IHRoZSBrZXJuZWwgdG9vbHMgdG8gZmluZCB0aGUKKyAgICAgICAgYXBwcm9wcmlhdGUgZGVzY3JpcHRpb24gd2l0aGluIHRoZSBrZXJuZWwgTWV0YWRhdGEgd2l0aCB3aGljaCB0bworICAgICAgICBidWlsZCBvdXQgdGhlIHNvdXJjZXMgYW5kIGNvbmZpZ3VyYXRpb24uCisgICAgICAgIFRoZSBsaW51eC15b2N0byByZWNpcGVzIGRlZmluZSAic3RhbmRhcmQiLCAidGlueSIsIGFuZCAicHJlZW1wdC1ydCIKKyAgICAgICAga2VybmVsIHR5cGVzLgorICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdrZXJuZWwtdHlwZXMnPktlcm5lbCBUeXBlczwvbGluaz4iIHNlY3Rpb24KKyAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24ga2VybmVsIHR5cGVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBEdXJpbmcgdGhlIGJ1aWxkLCB0aGUga2Vybi10b29scyBzZWFyY2ggZm9yIHRoZSBCU1AgZGVzY3JpcHRpb24KKyAgICAgICAgZmlsZSB0aGF0IG1vc3QgY2xvc2VseSBtYXRjaGVzIHRoZSA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPgorICAgICAgICBhbmQgPGZpbGVuYW1lPkxJTlVYX0tFUk5FTF9UWVBFPC9maWxlbmFtZT4gdmFyaWFibGVzIHBhc3NlZCBpbiBmcm9tIHRoZQorICAgICAgICByZWNpcGUuCisgICAgICAgIFRoZSB0b29scyB1c2UgdGhlIGZpcnN0IEJTUCBkZXNjcmlwdGlvbiBpdCBmaW5kcyB0aGF0IG1hdGNoCisgICAgICAgIGJvdGggdmFyaWFibGVzLgorICAgICAgICBJZiB0aGUgdG9vbHMgY2Fubm90IGZpbmQgYSBtYXRjaCwgdGhleSBpc3N1ZSBhIHdhcm5pbmcgc3VjaCBhcworICAgICAgICB0aGUgZm9sbG93aW5nOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFdBUk5JTkc6IENhbid0IGZpbmQgYW55IEJTUCBoYXJkd2FyZSBvciByZXF1aXJlZCBjb25maWd1cmF0aW9uIGZyYWdtZW50cy4KKyAgICAgV0FSTklORzogTG9va2VkIGF0IG1ldGEvY2ZnL2Jyb2tlbi9lbWVubG93LWJyb2tlbi9oZHdfZnJhZ3MudHh0IGFuZAorICAgICAgICAgICAgICBtZXRhL2NmZy9icm9rZW4vZW1lbmxvdy1icm9rZW4vcmVxdWlyZWRfZnJhZ3MudHh0IGluIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgbWV0YS9jZmcvYnJva2VuL2VtZW5sb3ctYnJva2VuCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgSW4gdGhpcyBleGFtcGxlLCA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPiB3YXMgc2V0IHRvICJlbWVubG93LWJyb2tlbiIKKyAgICAgICAgYW5kIDxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+IHdhcyBzZXQgdG8gImJyb2tlbiIuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSB0b29scyBmaXJzdCBzZWFyY2ggZm9yIHRoZSA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgdGhlbiBmb3IgdGhlIDxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+LgorICAgICAgICBJZiB0aGUgdG9vbHMgY2Fubm90IGZpbmQgYSBwYXJ0aWFsIG1hdGNoLCB0aGV5IHdpbGwgdXNlIHRoZQorICAgICAgICBzb3VyY2VzIGZyb20gdGhlIDxmaWxlbmFtZT5LQlJBTkNIPC9maWxlbmFtZT4gYW5kIGFueSBjb25maWd1cmF0aW9uCisgICAgICAgIHNwZWNpZmllZCBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5LRVJORUxfRkVBVFVSRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICB0byBpbmNsdWRlIGZlYXR1cmVzIChjb25maWd1cmF0aW9uIGZyYWdtZW50cywgcGF0Y2hlcywgb3IgYm90aCkgdGhhdAorICAgICAgICBhcmUgbm90IGFscmVhZHkgaW5jbHVkZWQgYnkgdGhlIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBjb21iaW5hdGlvbi4KKyAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGluY2x1ZGUgYSBmZWF0dXJlIHNwZWNpZmllZCBhcworICAgICAgICAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MiLAorICAgICAgICBzcGVjaWZ5OgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtFUk5FTF9GRUFUVVJFUyArPSAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgVG8gaW5jbHVkZSBhIGZlYXR1cmUgY2FsbGVkICJjZmcvc291bmQuc2NjIiBqdXN0IGZvciB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPiBtYWNoaW5lLCBzcGVjaWZ5OgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4NiA9ICIgY2ZnL3NvdW5kLnNjYyIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBUaGUgdmFsdWUgb2YgdGhlIGVudHJpZXMgaW4gPGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+CisgICAgICAgIGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgbG9jYXRpb24gd2l0aGluIHRoZSBrZXJuZWwgTWV0YWRhdGEgaXRzZWxmLgorICAgICAgICBUaGUgZXhhbXBsZXMgaGVyZSBhcmUgdGFrZW4gZnJvbSB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPgorICAgICAgICBicmFuY2ggb2YgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4gcmVwb3NpdG9yeS4KKyAgICAgICAgV2l0aGluIHRoYXQgYnJhbmNoLCAiZmVhdHVyZXMiIGFuZCAiY2ZnIiBhcmUgc3ViZGlyZWN0b3JpZXMgb2YgdGhlCisgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdrZXJuZWwtbWV0YWRhdGEtc3ludGF4Jz5LZXJuZWwgTWV0YWRhdGEgU3ludGF4PC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGUgcHJvY2Vzc2luZyBvZiB0aGUgdGhlc2UgdmFyaWFibGVzIGhhcyBldm9sdmVkIHNvbWUgYmV0d2VlbiB0aGUKKwkgICAgICAgIDAuOSBhbmQgMS4zIHJlbGVhc2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0IGFuZCBhc3NvY2lhdGVkCisJICAgICAgICBrZXJuLXRvb2xzIHNvdXJjZXMuCisgICAgICAgICAgICBUaGUgZGVzY3JpcHRpb25zIGluIHRoaXMgc2VjdGlvbiBhcmUgYWNjdXJhdGUgZm9yIDEuMyBhbmQgbGF0ZXIKKwkgICAgICAgIHJlbGVhc2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0na2VybmVsLW1ldGFkYXRhLWxvY2F0aW9uJz4KKyAgICA8dGl0bGU+S2VybmVsIE1ldGFkYXRhIExvY2F0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBLZXJuZWwgTWV0YWRhdGEgY2FuIGJlIGRlZmluZWQgaW4gZWl0aGVyIHRoZSBrZXJuZWwgcmVjaXBlCisgICAgICAgIChyZWNpcGUtc3BhY2UpIG9yIGluIHRoZSBrZXJuZWwgdHJlZSAoaW4tdHJlZSkuCisgICAgICAgIFdoZXJlIHlvdSBjaG9vc2UgdG8gZGVmaW5lIHRoZSBNZXRhZGF0YSBkZXBlbmRzIG9uIHdoYXQgeW91IHdhbnQKKyAgICAgICAgdG8gZG8gYW5kIGhvdyB5b3UgaW50ZW5kIHRvIHdvcmsuCisgICAgICAgIFJlZ2FyZGxlc3Mgb2Ygd2hlcmUgeW91IGRlZmluZSB0aGUga2VybmVsIE1ldGFkYXRhLCB0aGUgc3ludGF4IHVzZWQKKyAgICAgICAgYXBwbGllcyBlcXVhbGx5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgYXJlIHVuZmFtaWxpYXIgd2l0aCB0aGUgTGludXgga2VybmVsIGFuZCBvbmx5IHdpc2gKKyAgICAgICAgdG8gYXBwbHkgYSBjb25maWd1cmF0aW9uIGFuZCBwb3NzaWJseSBhIGNvdXBsZSBvZiBwYXRjaGVzIHByb3ZpZGVkIHRvCisgICAgICAgIHlvdSBieSBvdGhlcnMsIHRoZSByZWNpcGUtc3BhY2UgbWV0aG9kIGlzIHJlY29tbWVuZGVkLgorICAgICAgICBUaGlzIG1ldGhvZCBpcyBhbHNvIGEgZ29vZCBhcHByb2FjaCBpZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBMaW51eCBrZXJuZWwKKyAgICAgICAgc291cmNlcyB5b3UgZG8gbm90IGNvbnRyb2wgb3IgaWYgeW91IGp1c3QgZG8gbm90IHdhbnQgdG8gbWFpbnRhaW4gYQorICAgICAgICBMaW51eCBrZXJuZWwgR2l0IHJlcG9zaXRvcnkgb24geW91ciBvd24uCisgICAgICAgIEZvciBwYXJ0aWFsIGluZm9ybWF0aW9uIG9uIGhvdyB5b3UgY2FuIGRlZmluZSBrZXJuZWwgTWV0YWRhdGEgaW4KKyAgICAgICAgdGhlIHJlY2lwZS1zcGFjZSwgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nbW9kaWZ5aW5nLWFuLWV4aXN0aW5nLXJlY2lwZSc+TW9kaWZ5aW5nIGFuIEV4aXN0aW5nIFJlY2lwZTwvbGluaz4iCisgICAgICAgIHNlY3Rpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIENvbnZlcnNlbHksIGlmIHlvdSBhcmUgYWN0aXZlbHkgZGV2ZWxvcGluZyBhIGtlcm5lbCBhbmQgYXJlIGFscmVhZHkKKyAgICAgICAgbWFpbnRhaW5pbmcgYSBMaW51eCBrZXJuZWwgR2l0IHJlcG9zaXRvcnkgb2YgeW91ciBvd24sIHlvdSBtaWdodCBmaW5kCisgICAgICAgIGl0IG1vcmUgY29udmVuaWVudCB0byB3b3JrIHdpdGggdGhlIGtlcm5lbCBNZXRhZGF0YSBpbiB0aGUgc2FtZQorICAgICAgICByZXBvc2l0b3J5IGFzIHRoZSBMaW51eCBrZXJuZWwgc291cmNlcy4KKyAgICAgICAgVGhpcyBtZXRob2QgY2FuIG1ha2UgaXRlcmF0aXZlIGRldmVsb3BtZW50IG9mIHRoZSBMaW51eCBrZXJuZWwKKyAgICAgICAgbW9yZSBlZmZpY2llbnQgb3V0c2lkZSBvZiB0aGUgQml0QmFrZSBlbnZpcm9ubWVudC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVjaXBlLXNwYWNlLW1ldGFkYXRhJz4KKyAgICAgICAgPHRpdGxlPlJlY2lwZS1TcGFjZSBNZXRhZGF0YTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHN0b3JlZCBpbiByZWNpcGUtc3BhY2UsIHRoZSBrZXJuZWwgTWV0YWRhdGEgZmlsZXMgcmVzaWRlIGluIGEKKyAgICAgICAgICAgIGRpcmVjdG9yeSBoaWVyYXJjaHkgYmVsb3cKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgRm9yIGEgbGludXgteW9jdG8gcmVjaXBlIG9yIGZvciBhIExpbnV4IGtlcm5lbCByZWNpcGUgZGVyaXZlZAorICAgICAgICAgICAgYnkgY29weWluZyBhbmQgbW9kaWZ5aW5nCisgICAgICAgICAgICA8ZmlsZW5hbWU+b2UtY29yZS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICB0byBhIHJlY2lwZSBpbiB5b3VyIGxheWVyLCA8ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGlzIHR5cGljYWxseSBzZXQgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRISVNESVInPjxmaWxlbmFtZT5USElTRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LyR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nbW9kaWZ5aW5nLWFuLWV4aXN0aW5nLXJlY2lwZSc+TW9kaWZ5aW5nIGFuIEV4aXN0aW5nIFJlY2lwZTwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBhIHRyaXZpYWwgdHJlZSBvZiBrZXJuZWwgTWV0YWRhdGEKKyAgICAgICAgICAgIHN0b3JlZCBpbiByZWNpcGUtc3BhY2Ugd2l0aGluIGEgQlNQIGxheWVyOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5teV9ic3BfbGF5ZXI8L3JlcGxhY2VhYmxlPi8KKyAgICAgYC0tIHJlY2lwZXMta2VybmVsCisgICAgICAgICBgLS0gbGludXgKKyAgICAgICAgICAgICBgLS0gbGludXgteW9jdG8KKyAgICAgICAgICAgICAgICAgfC0tIGJzcC1zdGFuZGFyZC5zY2MKKyAgICAgICAgICAgICAgICAgfC0tIGJzcC5jZmcKKyAgICAgICAgICAgICAgICAgYC0tIHN0YW5kYXJkLmNmZworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHRoZSBNZXRhZGF0YSBpcyBzdG9yZWQgaW4gcmVjaXBlLXNwYWNlLCB5b3UgbXVzdCB0YWtlCisgICAgICAgICAgICBzdGVwcyB0byBlbnN1cmUgQml0QmFrZSBoYXMgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBkZWNpZGUKKyAgICAgICAgICAgIHdoYXQgZmlsZXMgdG8gZmV0Y2ggYW5kIHdoZW4gdGhleSBuZWVkIHRvIGJlIGZldGNoZWQgYWdhaW4uCisgICAgICAgICAgICBJdCBpcyBvbmx5IG5lY2Vzc2FyeSB0byBzcGVjaWZ5IHRoZSA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlcyBvbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICBCaXRCYWtlIHBhcnNlcyB0aGVtIGFuZCBmZXRjaGVzIGFueSBmaWxlcyByZWZlcmVuY2VkIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlcyBieSB0aGUgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYXRjaDwvZmlsZW5hbWU+LCBvciA8ZmlsZW5hbWU+a2NvbmY8L2ZpbGVuYW1lPiBjb21tYW5kcy4KKyAgICAgICAgICAgIEJlY2F1c2Ugb2YgdGhpcywgaXQgaXMgbmVjZXNzYXJ5IHRvIGJ1bXAgdGhlIHJlY2lwZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICB2YWx1ZSB3aGVuIGNoYW5naW5nIHRoZSBjb250ZW50IG9mIGZpbGVzIG5vdCBleHBsaWNpdGx5IGxpc3RlZAorICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0naW4tdHJlZS1tZXRhZGF0YSc+CisgICAgICAgIDx0aXRsZT5Jbi1UcmVlIE1ldGFkYXRhPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gc3RvcmVkIGluLXRyZWUsIHRoZSBrZXJuZWwgTWV0YWRhdGEgZmlsZXMgcmVzaWRlIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlIExpbnV4IGtlcm5lbCBzb3VyY2VzLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gZGlyZWN0b3J5IGNhbiBiZSBwcmVzZW50IGluIHRoZQorICAgICAgICAgICAgc2FtZSByZXBvc2l0b3J5IGJyYW5jaCBhcyB0aGUgc291cmNlcywKKyAgICAgICAgICAgIHN1Y2ggYXMgIm1hc3RlciIsIG9yIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gY2FuIGJlIGl0cyBvd24KKyAgICAgICAgICAgIG9ycGhhbiBicmFuY2guCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBBbiBvcnBoYW4gYnJhbmNoIGluIEdpdCBpcyBhIGJyYW5jaCB3aXRoIHVuaXF1ZSBoaXN0b3J5IGFuZAorICAgICAgICAgICAgICAgIGNvbnRlbnQgdG8gdGhlIG90aGVyIGJyYW5jaGVzIGluIHRoZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIE9ycGhhbiBicmFuY2hlcyBhcmUgdXNlZnVsIHRvIHRyYWNrIE1ldGFkYXRhIGNoYW5nZXMKKyAgICAgICAgICAgICAgICBpbmRlcGVuZGVudGx5IGZyb20gdGhlIHNvdXJjZXMgb2YgdGhlIExpbnV4IGtlcm5lbCwgd2hpbGUKKyAgICAgICAgICAgICAgICBzdGlsbCBrZWVwaW5nIHRoZW0gdG9nZXRoZXIgaW4gdGhlIHNhbWUgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkb2N1bWVudCwgd2Ugd2lsbCBkaXNjdXNzIGFsbAorICAgICAgICAgICAgaW4tdHJlZSBNZXRhZGF0YSBhcyByZXNpZGluZyBiZWxvdyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHRoYXQgc2hvd3MgaG93IGEgdHJpdmlhbCB0cmVlIG9mIE1ldGFkYXRhCisgICAgICAgICAgICBpcyBzdG9yZWQgaW4gYSBjdXN0b20gTGludXgga2VybmVsIEdpdCByZXBvc2l0b3J5OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLworICAgICBgLS0gY2ZnCisgICAgICAgICBgLS0ga2VybmVsLWNhY2hlCisgICAgICAgICAgICAgfC0tIGJzcC1zdGFuZGFyZC5zY2MKKyAgICAgICAgICAgICB8LS0gYnNwLmNmZworICAgICAgICAgICAgIGAtLSBzdGFuZGFyZC5jZmcKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gdXNlIGEgYnJhbmNoIGRpZmZlcmVudCBmcm9tIHdoZXJlIHRoZSBzb3VyY2VzIHJlc2lkZSwKKyAgICAgICAgICAgIHNwZWNpZnkgdGhlIGJyYW5jaCBpbiB0aGUgPGZpbGVuYW1lPktNRVRBPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgIGluIHlvdXIgTGludXgga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS01FVEEgPSAibWV0YSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRvIHVzZSB0aGUgc2FtZSBicmFuY2ggYXMgdGhlIHNvdXJjZXMsIHNldAorICAgICAgICAgICAgPGZpbGVuYW1lPktNRVRBPC9maWxlbmFtZT4gdG8gYW4gZW1wdHkgc3RyaW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLTUVUQSA9ICIiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCB5b3VyIG93biBzb3VyY2VzIGFuZCB3YW50IHRvIGNyZWF0ZSBhbgorICAgICAgICAgICAgb3JwaGFuIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLCB1c2UgdGhlc2UgY29tbWFuZHMKKyAgICAgICAgICAgIGZyb20gd2l0aGluIHlvdXIgTGludXgga2VybmVsIEdpdCByZXBvc2l0b3J5OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjaGVja291dCAtLW9ycGhhbiBtZXRhCisgICAgICQgZ2l0IHJtIC1yZiAuCisgICAgICQgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJDcmVhdGUgb3JwaGFuIG1ldGEgYnJhbmNoIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgbW9kaWZ5IHRoZSBNZXRhZGF0YSBpbiB0aGUgbGludXgteW9jdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLCB5b3UgbXVzdCBub3QgZm9yZ2V0IHRvIHVwZGF0ZQorICAgICAgICAgICAgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDUkVWJz48ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgc3RhdGVtZW50cyBpbiB0aGUga2VybmVsJ3MgcmVjaXBlLgorICAgICAgICAgICAgSW4gcGFydGljdWxhciwgeW91IG5lZWQgdG8gdXBkYXRlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ1JFVl9tZXRhPC9maWxlbmFtZT4gdmFyaWFibGUgdG8gbWF0Y2ggdGhlIGNvbW1pdCBpbgorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5LTUVUQTwvZmlsZW5hbWU+IGJyYW5jaCB5b3Ugd2lzaCB0byB1c2UuCisgICAgICAgICAgICBDaGFuZ2luZyB0aGUgZGF0YSBpbiB0aGVzZSBicmFuY2hlcyBhbmQgbm90IHVwZGF0aW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+IHN0YXRlbWVudHMgdG8gbWF0Y2ggd2lsbCBjYXVzZSB0aGUKKyAgICAgICAgICAgIGJ1aWxkIHRvIGZldGNoIGFuIG9sZGVyIGNvbW1pdC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2tlcm5lbC1tZXRhZGF0YS1zeW50YXgnPgorICAgIDx0aXRsZT5LZXJuZWwgTWV0YWRhdGEgU3ludGF4PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUga2VybmVsIE1ldGFkYXRhIGNvbnNpc3RzIG9mIHRocmVlIHByaW1hcnkgdHlwZXMgb2YgZmlsZXM6CisgICAgICAgIDxmaWxlbmFtZT5zY2M8L2ZpbGVuYW1lPgorICAgICAgICA8Zm9vdG5vdGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NjPC9maWxlbmFtZT4gc3RhbmRzIGZvciBTZXJpZXMgQ29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIENvbnRyb2wsIGJ1dCB0aGUgbmFtaW5nIGhhcyBsZXNzIHNpZ25pZmljYW5jZSBpbiB0aGUKKyAgICAgICAgICAgICAgICBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSB0b29saW5nIHRoYW4gaXQgaGFkIGluIHRoZQorICAgICAgICAgICAgICAgIHBhc3QuCisgICAgICAgICAgICAgICAgQ29uc2lkZXIgPGZpbGVuYW1lPnNjYzwvZmlsZW5hbWU+IGZpbGVzIHRvIGJlIGRlc2NyaXB0aW9uIGZpbGVzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Zvb3Rub3RlPgorICAgICAgICBkZXNjcmlwdGlvbiBmaWxlcywgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIGFuZCBwYXRjaGVzLgorICAgICAgICBUaGUgPGZpbGVuYW1lPnNjYzwvZmlsZW5hbWU+IGZpbGVzIGRlZmluZSB2YXJpYWJsZXMgYW5kIGluY2x1ZGUgb3IKKyAgICAgICAgb3RoZXJ3aXNlIHJlZmVyZW5jZSBhbnkgb2YgdGhlIHRocmVlIGZpbGUgdHlwZXMuCisgICAgICAgIFRoZSBkZXNjcmlwdGlvbiBmaWxlcyBhcmUgdXNlZCB0byBhZ2dyZWdhdGUgYWxsIHR5cGVzIG9mIGtlcm5lbAorICAgICAgICBNZXRhZGF0YSBpbnRvCisgICAgICAgIHdoYXQgdWx0aW1hdGVseSBkZXNjcmliZXMgdGhlIHNvdXJjZXMgYW5kIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVkCisgICAgICAgIHRvIGJ1aWxkIGEgTGludXgga2VybmVsIHRhaWxvcmVkIHRvIGEgc3BlY2lmaWMgbWFjaGluZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zY2M8L2ZpbGVuYW1lPiBkZXNjcmlwdGlvbiBmaWxlcyBhcmUgdXNlZCB0byBkZWZpbmUgdHdvCisgICAgICAgIGZ1bmRhbWVudGFsIHR5cGVzIG9mIGtlcm5lbCBNZXRhZGF0YToKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5GZWF0dXJlczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGZWF0dXJlcyBhZ2dyZWdhdGUgc291cmNlcyBpbiB0aGUgZm9ybSBvZiBwYXRjaGVzIGFuZCBjb25maWd1cmF0aW9uCisgICAgICAgIGZyYWdtZW50cyBpbnRvIGEgbW9kdWxhciByZXVzYWJsZSB1bml0LgorICAgICAgICBZb3UgY2FuIHVzZSBmZWF0dXJlcyB0byBpbXBsZW1lbnQgY29uY2VwdHVhbGx5IHNlcGFyYXRlIGtlcm5lbAorICAgICAgICBNZXRhZGF0YSBkZXNjcmlwdGlvbnMgc3VjaCBhcyBwdXJlIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLAorICAgICAgICBzaW1wbGUgcGF0Y2hlcywgY29tcGxleCBmZWF0dXJlcywgYW5kIGtlcm5lbCB0eXBlcy4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0na2VybmVsLXR5cGVzJz5LZXJuZWwgdHlwZXM8L2xpbms+IGRlZmluZSBnZW5lcmFsCisgICAgICAgIGtlcm5lbCBmZWF0dXJlcyBhbmQgcG9saWN5IHRvIGJlIHJldXNlZCBpbiB0aGUgQlNQcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQlNQcyBkZWZpbmUgaGFyZHdhcmUtc3BlY2lmaWMgZmVhdHVyZXMgYW5kIGFnZ3JlZ2F0ZSB0aGVtIHdpdGgga2VybmVsCisgICAgICAgIHR5cGVzIHRvIGZvcm0gdGhlIGZpbmFsIGRlc2NyaXB0aW9uIG9mIHdoYXQgd2lsbCBiZSBhc3NlbWJsZWQgYW5kIGJ1aWx0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGlsZSB0aGUga2VybmVsIE1ldGFkYXRhIHN5bnRheCBkb2VzIG5vdCBlbmZvcmNlIGFueSBsb2dpY2FsCisgICAgICAgIHNlcGFyYXRpb24gb2YgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIHBhdGNoZXMsIGZlYXR1cmVzIG9yIGtlcm5lbAorICAgICAgICB0eXBlcywgYmVzdCBwcmFjdGljZXMgZGljdGF0ZSBhIGxvZ2ljYWwgc2VwYXJhdGlvbiBvZiB0aGVzZSB0eXBlcworICAgICAgICBvZiBNZXRhZGF0YS4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBNZXRhZGF0YSBmaWxlIGhpZXJhcmNoeSBpcyByZWNvbW1lbmRlZDoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+YmFzZTwvcmVwbGFjZWFibGU+LworICAgICAgICBic3AvCisgICAgICAgIGNmZy8KKyAgICAgICAgZmVhdHVyZXMvCisgICAgICAgIGt0eXBlcy8KKyAgICAgICAgcGF0Y2hlcy8KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJzcDwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjb250YWlucyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0nYnNwLWRlc2NyaXB0aW9ucyc+QlNQIGRlc2NyaXB0aW9uczwvbGluaz4uCisgICAgICAgIFRoZSByZW1haW5pbmcgZGlyZWN0b3JpZXMgYWxsIGNvbnRhaW4gImZlYXR1cmVzIi4KKyAgICAgICAgU2VwYXJhdGluZyA8ZmlsZW5hbWU+YnNwPC9maWxlbmFtZT4gZnJvbSB0aGUgcmVzdCBvZiB0aGUgc3RydWN0dXJlCisgICAgICAgIGFpZHMgY29uY2VwdHVhbGl6aW5nIGludGVuZGVkIHVzYWdlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBVc2UgdGhlc2UgZ3VpZGVsaW5lcyB0byBoZWxwIHBsYWNlIHlvdXIgPGZpbGVuYW1lPnNjYzwvZmlsZW5hbWU+CisgICAgICAgIGRlc2NyaXB0aW9uIGZpbGVzIHdpdGhpbiB0aGUgc3RydWN0dXJlOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIHlvdXIgZmlsZSBjb250YWlucworICAgICAgICAgICAgICAgIG9ubHkgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIHBsYWNlIHRoZSBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jZmc8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgeW91ciBmaWxlIGNvbnRhaW5zCisgICAgICAgICAgICAgICAgb25seSBzb3VyY2UtY29kZSBmaXhlcywgcGxhY2UgdGhlIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhdGNoZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgeW91ciBmaWxlIGVuY2Fwc3VsYXRlcworICAgICAgICAgICAgICAgIGEgbWFqb3IgZmVhdHVyZSwgb2Z0ZW4gY29tYmluaW5nIHNvdXJjZXMgYW5kIGNvbmZpZ3VyYXRpb25zLAorICAgICAgICAgICAgICAgIHBsYWNlIHRoZSBmaWxlIGluIDxmaWxlbmFtZT5mZWF0dXJlczwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JZiB5b3VyIGZpbGUgYWdncmVnYXRlcworICAgICAgICAgICAgICAgIG5vbi1oYXJkd2FyZSBjb25maWd1cmF0aW9uIGFuZCBwYXRjaGVzIGluIG9yZGVyIHRvIGRlZmluZSBhCisgICAgICAgICAgICAgICAgYmFzZSBrZXJuZWwgcG9saWN5IG9yIG1ham9yIGtlcm5lbCB0eXBlIHRvIGJlIHJldXNlZCBhY3Jvc3MKKyAgICAgICAgICAgICAgICBtdWx0aXBsZSBCU1BzLCBwbGFjZSB0aGUgZmlsZSBpbiA8ZmlsZW5hbWU+a3R5cGVzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGVzZSBkaXN0aW5jdGlvbnMgY2FuIGVhc2lseSBiZWNvbWUgYmx1cnJlZCAtIGVzcGVjaWFsbHkgYXMKKyAgICAgICAgb3V0LW9mLXRyZWUgZmVhdHVyZXMgc2xvd2x5IG1lcmdlIHVwc3RyZWFtIG92ZXIgdGltZS4KKyAgICAgICAgQWxzbywgcmVtZW1iZXIgdGhhdCBob3cgdGhlIGRlc2NyaXB0aW9uIGZpbGVzIGFyZSBwbGFjZWQgaXMKKyAgICAgICAgYSBwdXJlbHkgbG9naWNhbCBvcmdhbml6YXRpb24gYW5kIGhhcyBubyBpbXBhY3Qgb24gdGhlIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgb2YgdGhlIGtlcm5lbCBNZXRhZGF0YS4KKyAgICAgICAgVGhlcmUgaXMgbm8gaW1wYWN0IGJlY2F1c2UgYWxsIG9mIDxmaWxlbmFtZT5jZmc8L2ZpbGVuYW1lPiwKKyAgICAgICAgPGZpbGVuYW1lPmZlYXR1cmVzPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5wYXRjaGVzPC9maWxlbmFtZT4sIGFuZAorICAgICAgICA8ZmlsZW5hbWU+a3R5cGVzPC9maWxlbmFtZT4sIGNvbnRhaW4gImZlYXR1cmVzIiBhcyBmYXIgYXMgdGhlIGtlcm5lbAorICAgICAgICB0b29scyBhcmUgY29uY2VybmVkLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBQYXRocyB1c2VkIGluIGtlcm5lbCBNZXRhZGF0YSBmaWxlcyBhcmUgcmVsYXRpdmUgdG8KKyAgICAgICAgPGZpbGVuYW1lPiZsdDtiYXNlJmd0OzwvZmlsZW5hbWU+LCB3aGljaCBpcyBlaXRoZXIKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgaWYgeW91IGFyZSBjcmVhdGluZyBNZXRhZGF0YSBpbgorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWNpcGUtc3BhY2UtbWV0YWRhdGEnPnJlY2lwZS1zcGFjZTwvbGluaz4sCisgICAgICAgIG9yIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGUvPC9maWxlbmFtZT4gaWYgeW91IGFyZSBjcmVhdGluZworICAgICAgICBNZXRhZGF0YSA8bGluayBsaW5rZW5kPSdpbi10cmVlLW1ldGFkYXRhJz5pbi10cmVlPC9saW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nY29uZmlndXJhdGlvbic+CisgICAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzaW1wbGVzdCB1bml0IG9mIGtlcm5lbCBNZXRhZGF0YSBpcyB0aGUgY29uZmlndXJhdGlvbi1vbmx5CisgICAgICAgICAgICBmZWF0dXJlLgorICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBwYXJhbWV0ZXJzIGluIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlCisgICAgICAgICAgICAoPGZpbGVuYW1lPi5jZmc8L2ZpbGVuYW1lPikgYW5kIGEgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICB0aGF0IGRlc2NyaWJlcyB0aGUgZnJhZ21lbnQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBTeW1tZXRyaWMgTXVsdGktUHJvY2Vzc2luZyAoU01QKSBmcmFnbWVudCBpbmNsdWRlZCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkKKyAgICAgICAgICAgIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgdHdvIGZpbGVzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBjZmcvc21wLnNjYzoKKyAgICAgICAgZGVmaW5lIEtGRUFUVVJFX0RFU0NSSVBUSU9OICJFbmFibGUgU01QIgorICAgICAgICBkZWZpbmUgS0ZFQVRVUkVfQ09NUEFUSUJJTElUWSBhbGwKKworICAgICAgICBrY29uZiBoYXJkd2FyZSBzbXAuY2ZnCisKKyAgICAgY2ZnL3NtcC5jZmc6CisgICAgICAgIENPTkZJR19TTVA9eQorICAgICAgICBDT05GSUdfU0NIRURfU01UPXkKKyAgICAgICAgIyBJbmNyZWFzZSBkZWZhdWx0IE5SX0NQVVMgZnJvbSA4IHRvIDY0IHNvIHRoYXQgcGxhdGZvcm0gd2l0aAorICAgICAgICAjIG1vcmUgdGhhbiA4IHByb2Nlc3NvcnMgY2FuIGJlIGFsbCBhY3RpdmF0ZWQgYXQgYm9vdCB0aW1lCisgICAgICAgIENPTkZJR19OUl9DUFVTPTY0CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gb24gY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1jb25maWctZnJhZ21lbnRzJz5DcmVhdGluZyBDb25maWd1cmF0aW9uIEZyYWdtZW50czwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgYW5kIGluCisgICAgICAgICAgICB0aGUgIjxsaW5rIGxpbmtlbmQ9J2dlbmVyYXRpbmctY29uZmlndXJhdGlvbi1maWxlcyc+R2VuZXJhdGluZyBDb25maWd1cmF0aW9uIEZpbGVzPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZWFybGllciBpbiB0aGlzIG1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtGRUFUVVJFX0RFU0NSSVBUSU9OJz48ZmlsZW5hbWU+S0ZFQVRVUkVfREVTQ1JJUFRJT048L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICBwcm92aWRlcyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBmcmFnbWVudC4KKyAgICAgICAgICAgIEhpZ2hlciBsZXZlbCBrZXJuZWwgdG9vbHMgdXNlIHRoaXMgZGVzY3JpcHRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+a2NvbmY8L2ZpbGVuYW1lPiBjb21tYW5kIGlzIHVzZWQgdG8gaW5jbHVkZSB0aGUKKyAgICAgICAgICAgIGFjdHVhbCBjb25maWd1cmF0aW9uIGZyYWdtZW50IGluIGFuIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGUsIGFuZCB0aGUgImhhcmR3YXJlIiBrZXl3b3JkIGlkZW50aWZpZXMgdGhlIGZyYWdtZW50IGFzCisgICAgICAgICAgICBiZWluZyBoYXJkd2FyZSBlbmFibGluZywgYXMgb3Bwb3NlZCB0byBnZW5lcmFsIHBvbGljeSwKKyAgICAgICAgICAgIHdoaWNoIHdvdWxkIHVzZSB0aGUgIm5vbi1oYXJkd2FyZSIga2V5d29yZC4KKyAgICAgICAgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyBtYWRlIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgdmFsaWRhdGlvbiB0b29scywgd2hpY2ggd2FybiB5b3UgaWYgYSBoYXJkd2FyZSBmcmFnbWVudAorICAgICAgICAgICAgb3ZlcnJpZGVzIGEgcG9saWN5IHNldCBieSBhIG5vbi1oYXJkd2FyZSBmcmFnbWVudC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBkZXNjcmlwdGlvbiBmaWxlIGNhbiBpbmNsdWRlIG11bHRpcGxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmtjb25mPC9maWxlbmFtZT4gc3RhdGVtZW50cywgb25lIHBlciBmcmFnbWVudC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dlbmVyYXRpbmctY29uZmlndXJhdGlvbi1maWxlcyc+R2VuZXJhdGluZyBDb25maWd1cmF0aW9uIEZpbGVzPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24sIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgQml0QmFrZSBjb21tYW5kIHRvIGF1ZGl0IHlvdXIKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBrZXJuZWxfY29uZmlnY2hlY2sgLWYKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdwYXRjaGVzJz4KKyAgICAgICAgPHRpdGxlPlBhdGNoZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUGF0Y2ggZGVzY3JpcHRpb25zIGFyZSB2ZXJ5IHNpbWlsYXIgdG8gY29uZmlndXJhdGlvbiBmcmFnbWVudAorICAgICAgICAgICAgZGVzY3JpcHRpb25zLCB3aGljaCBhcmUgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLgorICAgICAgICAgICAgSG93ZXZlciwgaW5zdGVhZCBvZiBhIDxmaWxlbmFtZT4uY2ZnPC9maWxlbmFtZT4gZmlsZSwgdGhlc2UKKyAgICAgICAgICAgIGRlc2NyaXB0aW9ucyB3b3JrIHdpdGggc291cmNlIHBhdGNoZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgdHlwaWNhbCBwYXRjaCBpbmNsdWRlcyBhIGRlc2NyaXB0aW9uIGZpbGUgYW5kIHRoZSBwYXRjaCBpdHNlbGY6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBhdGNoZXMvbXlwYXRjaC5zY2M6CisgICAgICAgIHBhdGNoIG15cGF0Y2gucGF0Y2gKKworICAgICBwYXRjaGVzL215cGF0Y2gucGF0Y2g6CisgICAgICAgIDxyZXBsYWNlYWJsZT50eXBpY2FsLXBhdGNoPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFlvdSBjYW4gY3JlYXRlIHRoZSB0eXBpY2FsIDxmaWxlbmFtZT4ucGF0Y2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZSB1c2luZyA8ZmlsZW5hbWU+ZGlmZiAtTnVycDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGZvcm1hdC1wYXRjaDwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZGVzY3JpcHRpb24gZmlsZSBjYW4gaW5jbHVkZSBtdWx0aXBsZSBwYXRjaCBzdGF0ZW1lbnRzLAorICAgICAgICAgICAgb25lIHBlciBwYXRjaC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdmZWF0dXJlcyc+CisgICAgICAgIDx0aXRsZT5GZWF0dXJlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGZWF0dXJlcyBhcmUgY29tcGxleCBrZXJuZWwgTWV0YWRhdGEgdHlwZXMgdGhhdCBjb25zaXN0CisgICAgICAgICAgICBvZiBjb25maWd1cmF0aW9uIGZyYWdtZW50cyAoPGZpbGVuYW1lPmtjb25mPC9maWxlbmFtZT4pLCBwYXRjaGVzCisgICAgICAgICAgICAoPGZpbGVuYW1lPnBhdGNoPC9maWxlbmFtZT4pLCBhbmQgcG9zc2libHkgb3RoZXIgZmVhdHVyZQorICAgICAgICAgICAgZGVzY3JpcHRpb24gZmlsZXMgKDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBhIGZlYXR1cmUgZGVzY3JpcHRpb24gZmlsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZmVhdHVyZXMvbXlmZWF0dXJlLnNjYworICAgICAgICBkZWZpbmUgS0ZFQVRVUkVfREVTQ1JJUFRJT04gIkVuYWJsZSBteWZlYXR1cmUiCisKKyAgICAgICAgcGF0Y2ggMDAwMS1teWZlYXR1cmUtY29yZS5wYXRjaAorICAgICAgICBwYXRjaCAwMDAyLW15ZmVhdHVyZS1pbnRlcmZhY2UucGF0Y2gKKworICAgICAgICBpbmNsdWRlIGNmZy9teWZlYXR1cmVfZGVwZW5kZW5jeS5zY2MKKyAgICAgICAga2NvbmYgbm9uLWhhcmR3YXJlIG15ZmVhdHVyZS5jZmcKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBzaG93cyBob3cgdGhlIDxmaWxlbmFtZT5wYXRjaDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPmtjb25mPC9maWxlbmFtZT4gY29tbWFuZHMgYXJlIHVzZWQgYXMgd2VsbCBhcworICAgICAgICAgICAgaG93IGFuIGFkZGl0aW9uYWwgZmVhdHVyZSBkZXNjcmlwdGlvbiBmaWxlIGlzIGluY2x1ZGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUeXBpY2FsbHksIGZlYXR1cmVzIGFyZSBsZXNzIGdyYW51bGFyIHRoYW4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgZnJhZ21lbnRzIGFuZCBhcmUgbW9yZSBsaWtlbHkgdGhhbiBjb25maWd1cmF0aW9uIGZyYWdtZW50cworICAgICAgICAgICAgYW5kIHBhdGNoZXMgdG8gYmUgdGhlIHR5cGVzIG9mIHRoaW5ncyB5b3Ugd2FudCB0byBzcGVjaWZ5CisgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIG9mIHRoZQorICAgICAgICAgICAgTGludXgga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWtlcm5lbC1tZXRhZGF0YS1pbi1hLXJlY2lwZSc+VXNpbmcgS2VybmVsIE1ldGFkYXRhIGluIGEgUmVjaXBlPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZWFybGllciBpbiB0aGUgbWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2tlcm5lbC10eXBlcyc+CisgICAgICAgIDx0aXRsZT5LZXJuZWwgVHlwZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBrZXJuZWwgdHlwZSBkZWZpbmVzIGEgaGlnaC1sZXZlbCBrZXJuZWwgcG9saWN5IGJ5CisgICAgICAgICAgICBhZ2dyZWdhdGluZyBub24taGFyZHdhcmUgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgd2l0aAorICAgICAgICAgICAgcGF0Y2hlcyB5b3Ugd2FudCB0byB1c2Ugd2hlbiBidWlsZGluZyBhIExpbnV4IGtlcm5lbHMgb2YgYQorICAgICAgICAgICAgc3BlY2lmaWMgdHlwZS4KKyAgICAgICAgICAgIFN5bnRhY3RpY2FsbHksIGtlcm5lbCB0eXBlcyBhcmUgbm8gZGlmZmVyZW50IHRoYW4gZmVhdHVyZXMKKyAgICAgICAgICAgIGFzIGRlc2NyaWJlZCBpbiB0aGUgIjxsaW5rIGxpbmtlbmQ9J2ZlYXR1cmVzJz5GZWF0dXJlczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGluIHRoZSBrZXJuZWwKKyAgICAgICAgICAgIHJlY2lwZSBzZWxlY3RzIHRoZSBrZXJuZWwgdHlwZS4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWtlcm5lbC1tZXRhZGF0YS1pbi1hLXJlY2lwZSc+VXNpbmcgS2VybmVsIE1ldGFkYXRhIGluIGEgUmVjaXBlPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+CisgICAgICAgICAgICB0cmVlIGRlZmluZXMgdGhyZWUga2VybmVsIHR5cGVzOiAic3RhbmRhcmQiLAorICAgICAgICAgICAgInRpbnkiLCBhbmQgInByZWVtcHQtcnQiOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+InN0YW5kYXJkIjoKKyAgICAgICAgICAgICAgICAgICAgSW5jbHVkZXMgdGhlIGdlbmVyaWMgTGludXgga2VybmVsIHBvbGljeSBvZiB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgUHJvamVjdCBsaW51eC15b2N0byBrZXJuZWwgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBwb2xpY3kgaW5jbHVkZXMsIGFtb25nIG90aGVyIHRoaW5ncywgd2hpY2ggZmlsZQorICAgICAgICAgICAgICAgICAgICBzeXN0ZW1zLCBuZXR3b3JraW5nIG9wdGlvbnMsIGNvcmUga2VybmVsIGZlYXR1cmVzLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgZGVidWdnaW5nIGFuZCB0cmFjaW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPiJwcmVlbXB0LXJ0IjoKKyAgICAgICAgICAgICAgICAgICAgQXBwbGllcyB0aGUgPGZpbGVuYW1lPlBSRUVNUFRfUlQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBwYXRjaGVzIGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlcXVpcmVkIHRvCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGEgcmVhbC10aW1lIExpbnV4IGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBrZXJuZWwgdHlwZSBpbmhlcml0cyBmcm9tIHRoZSAic3RhbmRhcmQiIGtlcm5lbCB0eXBlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+InRpbnkiOgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIGEgYmFyZSBtaW5pbXVtIGNvbmZpZ3VyYXRpb24gbWVhbnQgdG8gc2VydmUgYXMgYQorICAgICAgICAgICAgICAgICAgICBiYXNlIGZvciB2ZXJ5IHNtYWxsIExpbnV4IGtlcm5lbHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSAidGlueSIga2VybmVsIHR5cGUgaXMgaW5kZXBlbmRlbnQgZnJvbSB0aGUgInN0YW5kYXJkIgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBBbHRob3VnaCB0aGUgInRpbnkiIGtlcm5lbCB0eXBlIGRvZXMgbm90IGN1cnJlbnRseSBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgIGFueSBzb3VyY2UgY2hhbmdlcywgaXQgbWlnaHQgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlICJzdGFuZGFyZCIga2VybmVsIHR5cGUgaXMgZGVmaW5lZCBieQorICAgICAgICAgICAgPGZpbGVuYW1lPnN0YW5kYXJkLnNjYzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIEluY2x1ZGUgdGhpcyBrZXJuZWwgdHlwZSBmcmFnbWVudCB0byBnZXQgdGhlIHN0YW5kYXJkIGZlYXR1cmVzIGFuZAorICAgICAjIGNvbmZpZ3VyYXRpb24gdmFsdWVzLgorCisgICAgICMgSW5jbHVkZSBhbGwgc3RhbmRhcmQgZmVhdHVyZXMKKyAgICAgaW5jbHVkZSBzdGFuZGFyZC1ub2NmZy5zY2MKKworICAgICBrY29uZiBub24taGFyZHdhcmUgc3RhbmRhcmQuY2ZnCisKKyAgICAgIyBpbmRpdmlkdWFsIGNmZyBibG9jayBzZWN0aW9uCisgICAgIGluY2x1ZGUgY2ZnL2ZzL2RldnRtcGZzLnNjYworICAgICBpbmNsdWRlIGNmZy9mcy9kZWJ1Z2ZzLnNjYworICAgICBpbmNsdWRlIGNmZy9mcy9idHJmcy5zY2MKKyAgICAgaW5jbHVkZSBjZmcvZnMvZXh0Mi5zY2MKKyAgICAgaW5jbHVkZSBjZmcvZnMvZXh0My5zY2MKKyAgICAgaW5jbHVkZSBjZmcvZnMvZXh0NC5zY2MKKworICAgICBpbmNsdWRlIGNmZy9uZXQvaXB2Ni5zY2MKKyAgICAgaW5jbHVkZSBjZmcvbmV0L2lwX25mLnNjYworICAgICBpbmNsdWRlIGNmZy9uZXQvaXA2X25mLnNjYworICAgICBpbmNsdWRlIGNmZy9uZXQvYnJpZGdlLnNjYworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyB3aXRoIGFueSA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+IGZpbGUsIGEKKyAgICAgICAgICAgIGtlcm5lbCB0eXBlIGRlZmluaXRpb24gY2FuIGFnZ3JlZ2F0ZSBvdGhlcgorICAgICAgICAgICAgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlcyB3aXRoCisgICAgICAgICAgICA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGNvbW1hbmRzLgorICAgICAgICAgICAgVGhlc2UgZGVmaW5pdGlvbnMgY2FuIGFsc28gZGlyZWN0bHkgcHVsbCBpbgorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgYW5kIHBhdGNoZXMgd2l0aCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5rY29uZjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+cGF0Y2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgY29tbWFuZHMsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgSXQgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSB0byBjcmVhdGUgYSBrZXJuZWwgdHlwZQorICAgICAgICAgICAgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgVGhlIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBmaWxlIGNhbiBpbXBsaWNpdGx5IGRlZmluZQorICAgICAgICAgICAgdGhlIGtlcm5lbCB0eXBlIHVzaW5nIGEgPGZpbGVuYW1lPmRlZmluZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtUWVBFJz5LVFlQRTwvdWxpbms+IG15a3R5cGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgbGluZS4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J2JzcC1kZXNjcmlwdGlvbnMnPkJTUCBEZXNjcmlwdGlvbnM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdic3AtZGVzY3JpcHRpb25zJz4KKyAgICAgICAgPHRpdGxlPkJTUCBEZXNjcmlwdGlvbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQlNQIGRlc2NyaXB0aW9ucyBjb21iaW5lIGtlcm5lbCB0eXBlcyB3aXRoIGhhcmR3YXJlLXNwZWNpZmljCisgICAgICAgICAgICBmZWF0dXJlcy4KKyAgICAgICAgICAgIFRoZSBoYXJkd2FyZS1zcGVjaWZpYyBwb3J0aW9uIGlzIHR5cGljYWxseSBkZWZpbmVkCisgICAgICAgICAgICBpbmRlcGVuZGVudGx5LCBhbmQgdGhlbiBhZ2dyZWdhdGVkIHdpdGggZWFjaCBzdXBwb3J0ZWQga2VybmVsCisgICAgICAgICAgICB0eXBlLgorICAgICAgICAgICAgQ29uc2lkZXIgdGhpcyBzaW1wbGUgQlNQIGRlc2NyaXB0aW9uIHRoYXQgc3VwcG9ydHMgdGhlCisgICAgICAgICAgICA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPiBtYWNoaW5lOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPi5zY2M6CisgICAgICAgIGRlZmluZSBLTUFDSElORSA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPgorICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKworICAgICAgICBrY29uZiA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPi5jZmcKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEV2ZXJ5IEJTUCBkZXNjcmlwdGlvbiBzaG91bGQgZGVmaW5lIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtNQUNISU5FJz48ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtUWVBFJz48ZmlsZW5hbWU+S1RZUEU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LQVJDSCc+PGZpbGVuYW1lPktBUkNIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgVGhlc2UgdmFyaWFibGVzIGFsbG93IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGlkZW50aWZ5CisgICAgICAgICAgICB0aGUgZGVzY3JpcHRpb24gYXMgbWVldGluZyB0aGUgY3JpdGVyaWEgc2V0IGJ5IHRoZSByZWNpcGUgYmVpbmcKKyAgICAgICAgICAgIGJ1aWx0LgorICAgICAgICAgICAgVGhpcyBzaW1wbGUgZXhhbXBsZSBzdXBwb3J0cyB0aGUgIm15YnNwIiBtYWNoaW5lIGZvciB0aGUgInN0YW5kYXJkIgorICAgICAgICAgICAga2VybmVsIGFuZCB0aGUgImkzODYiIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmUgYXdhcmUgdGhhdCBhIGhhcmQgbGluayBiZXR3ZWVuIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPktUWVBFPC9maWxlbmFtZT4gdmFyaWFibGUgYW5kIGEga2VybmVsIHR5cGUKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uIGZpbGUgZG9lcyBub3QgZXhpc3QuCisgICAgICAgICAgICBUaHVzLCBpZiB5b3UgZG8gbm90IGhhdmUga2VybmVsIHR5cGVzIGRlZmluZWQgaW4geW91ciBrZXJuZWwKKyAgICAgICAgICAgIE1ldGFkYXRhLCB5b3Ugb25seSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBrZXJuZWwgcmVjaXBlJ3MKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSU5VWF9LRVJORUxfVFlQRSc+PGZpbGVuYW1lPkxJTlVYX0tFUk5FTF9UWVBFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRoZSA8ZmlsZW5hbWU+S1RZUEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbiB0aGUKKyAgICAgICAgICAgIEJTUCBkZXNjcmlwdGlvbiBmaWxlIG1hdGNoLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRnV0dXJlIHZlcnNpb25zIG9mIHRoZSB0b29saW5nIG1ha2UgdGhlIHNwZWNpZmljYXRpb24gb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S1RZUEU8L2ZpbGVuYW1lPiBpbiB0aGUgQlNQIG9wdGlvbmFsLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZGlkIHdhbnQgdG8gc2VwYXJhdGUgeW91ciBrZXJuZWwgcG9saWN5IGZyb20geW91cgorICAgICAgICAgICAgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgeW91IGNvdWxkIGRvIHNvIGJ5IHNwZWNpZnlpbmcgYSBrZXJuZWwKKyAgICAgICAgICAgIHR5cGUsIHN1Y2ggYXMgInN0YW5kYXJkIiBhbmQgaW5jbHVkaW5nIHRoYXQgZGVzY3JpcHRpb24gZmlsZQorICAgICAgICAgICAgaW4gdGhlIEJTUCBkZXNjcmlwdGlvbiBmaWxlLgorICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0na2VybmVsLXR5cGVzJz5LZXJuZWwgVHlwZXM8L2xpbms+IiBzZWN0aW9uCisgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IG1pZ2h0IGFsc28gaGF2ZSBtdWx0aXBsZSBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyB0aGF0IHlvdQorICAgICAgICAgICAgYWdncmVnYXRlIGludG8gYSBzaW5nbGUgaGFyZHdhcmUgZGVzY3JpcHRpb24gZmlsZSB0aGF0IHlvdQorICAgICAgICAgICAgY291bGQgaW5jbHVkZSBpbiB0aGUgQlNQIGRlc2NyaXB0aW9uIGZpbGUsIHJhdGhlciB0aGFuIHJlZmVyZW5jaW5nCisgICAgICAgICAgICBhIHNpbmdsZSA8ZmlsZW5hbWU+LmNmZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPi5zY2M6CisgICAgICAgIGRlZmluZSBLTUFDSElORSBteWJzcAorICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKworICAgICAgICBpbmNsdWRlIHN0YW5kYXJkLnNjYworICAgICAgICBpbmNsdWRlIDxyZXBsYWNlYWJsZT5teWJzcDwvcmVwbGFjZWFibGU+LWh3LnNjYworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgPGZpbGVuYW1lPnN0YW5kYXJkLnNjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICBhZ2dyZWdhdGVzIGFsbCB0aGUgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIHBhdGNoZXMsIGFuZAorICAgICAgICAgICAgZmVhdHVyZXMgdGhhdCBtYWtlIHVwIHlvdXIgc3RhbmRhcmQga2VybmVsIHBvbGljeSB3aGVyZWFzCisgICAgICAgICAgICA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4taHcuc2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGFnZ3JlZ2F0ZXMgYWxsIHRob3NlIG5lY2Vzc2FyeQorICAgICAgICAgICAgdG8gc3VwcG9ydCB0aGUgaGFyZHdhcmUgYXZhaWxhYmxlIG9uIHRoZQorICAgICAgICAgICAgPHJlcGxhY2VhYmxlPm15YnNwPC9yZXBsYWNlYWJsZT4gbWFjaGluZS4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gYnJlYWsgYSBjb21wbGV0ZQorICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGludG8gdGhlIHZhcmlvdXMKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTWFueSByZWFsLXdvcmxkIGV4YW1wbGVzIGFyZSBtb3JlIGNvbXBsZXguCisgICAgICAgICAgICBMaWtlIGFueSBvdGhlciA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+IGZpbGUsIEJTUAorICAgICAgICAgICAgZGVzY3JpcHRpb25zIGNhbiBhZ2dyZWdhdGUgZmVhdHVyZXMuCisgICAgICAgICAgICBDb25zaWRlciB0aGUgTWlubm93IEJTUCBkZWZpbml0aW9uIGZyb20gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+CisgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWlubm93LnNjYzoKKyAgICAgICAgaW5jbHVkZSBjZmcveDg2LnNjYworICAgICAgICBpbmNsdWRlIGZlYXR1cmVzL2VnMjB0L2VnMjB0LnNjYworICAgICAgICBpbmNsdWRlIGNmZy9kbWFlbmdpbmUuc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvcG93ZXIvaW50ZWwuc2NjCisgICAgICAgIGluY2x1ZGUgY2ZnL2VmaS5zY2MKKyAgICAgICAgaW5jbHVkZSBmZWF0dXJlcy91c2IvZWhjaS1oY2Quc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvdXNiL29oY2ktaGNkLnNjYworICAgICAgICBpbmNsdWRlIGZlYXR1cmVzL3VzYi91c2ItZ2FkZ2V0cy5zY2MKKyAgICAgICAgaW5jbHVkZSBmZWF0dXJlcy91c2IvdG91Y2hzY3JlZW4tY29tcG9zaXRlLnNjYworICAgICAgICBpbmNsdWRlIGNmZy90aW1lci9ocGV0LnNjYworICAgICAgICBpbmNsdWRlIGNmZy90aW1lci9ydGMuc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvbGVkcy9sZWRzLnNjYworICAgICAgICBpbmNsdWRlIGZlYXR1cmVzL3NwaS9zcGlkZXYuc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvaTJjL2kyY2Rldi5zY2MKKworICAgICAgICAjIEVhcmx5cHJpbnRrIGFuZCBwb3J0IGRlYnVnIHJlcXVpcmVzIDgyNTAKKyAgICAgICAga2NvbmYgaGFyZHdhcmUgY2ZnLzgyNTAuY2ZnCisKKyAgICAgICAga2NvbmYgaGFyZHdhcmUgbWlubm93LmNmZworICAgICAgICBrY29uZiBoYXJkd2FyZSBtaW5ub3ctZGV2LmNmZworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1pbm5vdy5zY2M8L2ZpbGVuYW1lPiBkZXNjcmlwdGlvbiBmaWxlIGluY2x1ZGVzCisgICAgICAgICAgICBhIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+bWlubm93LmNmZzwvZmlsZW5hbWU+KSBzcGVjaWZpYyB0byB0aGUgTWlubm93CisgICAgICAgICAgICBCU1AgYXMgd2VsbCBhcyBzZXZlcmFsIG1vcmUgZ2VuZXJhbCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmcmFnbWVudHMgYW5kIGZlYXR1cmVzIGVuYWJsaW5nIGhhcmR3YXJlIGZvdW5kIG9uIHRoZQorICAgICAgICAgICAgbWFjaGluZS4KKyAgICAgICAgICAgIFRoaXMgZGVzY3JpcHRpb24gZmlsZSBpcyB0aGVuIGluY2x1ZGVkIGluIGVhY2ggb2YgdGhlIHRocmVlCisgICAgICAgICAgICAibWlubm93IiBkZXNjcmlwdGlvbiBmaWxlcyBmb3IgdGhlIHN1cHBvcnRlZCBrZXJuZWwgdHlwZXMKKyAgICAgICAgICAgIChpLmUuICJzdGFuZGFyZCIsICJwcmVlbXB0LXJ0IiwgYW5kICJ0aW55IikuCisgICAgICAgICAgICBDb25zaWRlciB0aGUgIm1pbm5vdyIgZGVzY3JpcHRpb24gZm9yIHRoZSAic3RhbmRhcmQiIGtlcm5lbAorICAgICAgICAgICAgdHlwZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWlubm93LXN0YW5kYXJkLnNjYzoKKyAgICAgICAgZGVmaW5lIEtNQUNISU5FIG1pbm5vdworICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKworICAgICAgICBpbmNsdWRlIGt0eXBlcy9zdGFuZGFyZAorCisgICAgICAgIGluY2x1ZGUgbWlubm93LnNjYworCisgICAgICAgICMgRXh0cmEgbWlubm93IGNvbmZpZ3MgYWJvdmUgdGhlIG1pbmltYWwgZGVmaW5lZCBpbiBtaW5ub3cuc2NjCisgICAgICAgIGluY2x1ZGUgY2ZnL2VmaS1leHQuc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvbWVkaWEvbWVkaWEtYWxsLnNjYworICAgICAgICBpbmNsdWRlIGZlYXR1cmVzL3NvdW5kL3NuZF9oZGFfaW50ZWwuc2NjCisKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIHNob3VsZCByZWFsbHkgYmUgaW4gc3RhbmRhcmQuc2NjCisgICAgICAgICMgVVNCIGxpdmUtaW1hZ2Ugc3VwcG9ydAorICAgICAgICBpbmNsdWRlIGNmZy91c2ItbWFzcy1zdG9yYWdlLnNjYworICAgICAgICBpbmNsdWRlIGNmZy9ib290LWxpdmUuc2NjCisKKyAgICAgICAgIyBCYXNpYyBwcm9maWxpbmcKKyAgICAgICAgaW5jbHVkZSBmZWF0dXJlcy9sYXRlbmN5dG9wL2xhdGVuY3l0b3Auc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvcHJvZmlsaW5nL3Byb2ZpbGluZy5zY2MKKworICAgICAgICAjIFJlcXVlc3RlZCBkcml2ZXJzIHRoYXQgZG9uJ3QgaGF2ZSBhbiBleGlzdGluZyBzY2MKKyAgICAgICAga2NvbmYgaGFyZHdhcmUgbWlubm93LWRyaXZlcnMtZXh0cmEuY2ZnCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBjb21tYW5kIG1pZHdheSB0aHJvdWdoIHRoZSBmaWxlCisgICAgICAgICAgICBpbmNsdWRlcyB0aGUgPGZpbGVuYW1lPm1pbm5vdy5zY2M8L2ZpbGVuYW1lPiBkZXNjcmlwdGlvbiB0aGF0CisgICAgICAgICAgICBkZWZpbmVzIGFsbCBoYXJkd2FyZSBlbmFibGVtZW50cyBmb3IgdGhlIEJTUCB0aGF0IGlzIGNvbW1vbiB0byBhbGwKKyAgICAgICAgICAgIGtlcm5lbCB0eXBlcy4KKyAgICAgICAgICAgIFVzaW5nIHRoaXMgY29tbWFuZCBzaWduaWZpY2FudGx5IHJlZHVjZXMgZHVwbGljYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vdyBjb25zaWRlciB0aGUgIm1pbm5vdyIgZGVzY3JpcHRpb24gZm9yIHRoZSAidGlueSIga2VybmVsIHR5cGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1pbm5vdy10aW55LnNjYzoKKyAgICAgICAgZGVmaW5lIEtNQUNISU5FIG1pbm5vdworICAgICAgICBkZWZpbmUgS1RZUEUgdGlueQorICAgICAgICBkZWZpbmUgS0FSQ0ggaTM4NgorCisgICAgICAgIGluY2x1ZGUga3R5cGVzL3RpbnkKKworICAgICAgICBpbmNsdWRlIG1pbm5vdy5zY2MKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEFzIHlvdSBtaWdodCBleHBlY3QsIHRoZSAidGlueSIgZGVzY3JpcHRpb24gaW5jbHVkZXMgcXVpdGUgYQorICAgICAgICAgICAgYml0IGxlc3MuCisgICAgICAgICAgICBJbiBmYWN0LCBpdCBpbmNsdWRlcyBvbmx5IHRoZSBtaW5pbWFsIHBvbGljeSBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgInRpbnkiIGtlcm5lbCB0eXBlIGFuZCB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZXF1aXJlZAorICAgICAgICAgICAgZm9yIGJvb3RpbmcgdGhlIG1hY2hpbmUgYWxvbmcgd2l0aCB0aGUgbW9zdCBiYXNpYyBmdW5jdGlvbmFsaXR5IG9mCisgICAgICAgICAgICB0aGUgc3lzdGVtIGFzIGRlZmluZWQgaW4gdGhlIGJhc2UgIm1pbm5vdyIgZGVzY3JpcHRpb24gZmlsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTm90aWNlIGFnYWluIHRoZSB0aHJlZSBjcml0aWNhbCB2YXJpYWJsZXM6CisgICAgICAgICAgICA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPktUWVBFPC9maWxlbmFtZT4sCisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPktBUkNIPC9maWxlbmFtZT4uCisgICAgICAgICAgICBPZiB0aGVzZSB2YXJpYWJsZXMsIG9ubHkgdGhlIDxmaWxlbmFtZT5LVFlQRTwvZmlsZW5hbWU+IGhhcyBjaGFuZ2VkLgorICAgICAgICAgICAgSXQgaXMgbm93IHNldCB0byAidGlueSIuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdvcmdhbml6aW5nLXlvdXItc291cmNlJz4KKyAgICA8dGl0bGU+T3JnYW5pemluZyBZb3VyIFNvdXJjZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgTWFueSByZWNpcGVzIGJhc2VkIG9uIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tY3VzdG9tLmJiPC9maWxlbmFtZT4KKyAgICAgICAgcmVjaXBlIHVzZSBMaW51eCBrZXJuZWwgc291cmNlcyB0aGF0IGhhdmUgb25seSBhIHNpbmdsZQorICAgICAgICBicmFuY2ggLSAibWFzdGVyIi4KKyAgICAgICAgVGhpcyB0eXBlIG9mIHJlcG9zaXRvcnkgc3RydWN0dXJlIGlzIGZpbmUgZm9yIGxpbmVhciBkZXZlbG9wbWVudAorICAgICAgICBzdXBwb3J0aW5nIGEgc2luZ2xlIG1hY2hpbmUgYW5kIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgSG93ZXZlciwgaWYgeW91IHdvcmsgd2l0aCBtdWx0aXBsZSBib2FyZHMgYW5kIGFyY2hpdGVjdHVyZXMsCisgICAgICAgIGEga2VybmVsIHNvdXJjZSByZXBvc2l0b3J5IHdpdGggbXVsdGlwbGUgYnJhbmNoZXMgaXMgbW9yZQorICAgICAgICBlZmZpY2llbnQuCisgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBuZWVkIGEgc2VyaWVzIG9mIHBhdGNoZXMgZm9yIG9uZSBib2FyZCB0byBib290LgorICAgICAgICBTb21ldGltZXMsIHRoZXNlIHBhdGNoZXMgYXJlIHdvcmtzLWluLXByb2dyZXNzIG9yIGZ1bmRhbWVudGFsbHkgd3JvbmcsCisgICAgICAgIHlldCB0aGV5IGFyZSBzdGlsbCBuZWNlc3NhcnkgZm9yIHNwZWNpZmljIGJvYXJkcy4KKyAgICAgICAgSW4gdGhlc2Ugc2l0dWF0aW9ucywgeW91IG1vc3QgbGlrZWx5IGRvIG5vdCB3YW50IHRvIGluY2x1ZGUgdGhlc2UKKyAgICAgICAgcGF0Y2hlcyBpbiBldmVyeSBrZXJuZWwgeW91IGJ1aWxkIChpLmUuIGhhdmUgdGhlIHBhdGNoZXMgYXMgcGFydCBvZgorICAgICAgICB0aGUgbG9uZSAibWFzdGVyIiBicmFuY2gpLgorICAgICAgICBJdCBpcyBzaXR1YXRpb25zIGxpa2UgdGhlc2UgdGhhdCBnaXZlIHJpc2UgdG8gbXVsdGlwbGUgYnJhbmNoZXMgdXNlZAorICAgICAgICB3aXRoaW4gYSBMaW51eCBrZXJuZWwgc291cmNlcyBHaXQgcmVwb3NpdG9yeS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgUmVwb3NpdG9yeSBvcmdhbml6YXRpb24gc3RyYXRlZ2llcyBleGlzdCB0aGF0IG1heGltaXplIHNvdXJjZSByZXVzZSwKKyAgICAgICAgcmVtb3ZlIHJlZHVuZGFuY3ksIGFuZCBsb2dpY2FsbHkgb3JkZXIgeW91ciBjaGFuZ2VzLgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJlc2VudHMgc3RyYXRlZ2llcyBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FbmNhcHN1bGF0aW5nIHBhdGNoZXMgaW4gYSBmZWF0dXJlIGRlc2NyaXB0aW9uCisgICAgICAgICAgICAgICAgYW5kIG9ubHkgaW5jbHVkaW5nIHRoZSBwYXRjaGVzIGluIHRoZSBCU1AgZGVzY3JpcHRpb25zIG9mCisgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2FibGUgYm9hcmRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0aW5nIGEgbWFjaGluZSBicmFuY2ggaW4geW91cgorICAgICAgICAgICAgICAgIGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yeSBhbmQgYXBwbHlpbmcgdGhlIHBhdGNoZXMgb24gdGhhdAorICAgICAgICAgICAgICAgIGJyYW5jaCBvbmx5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0aW5nIGEgZmVhdHVyZSBicmFuY2ggaW4geW91cgorICAgICAgICAgICAgICAgIGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yeSBhbmQgbWVyZ2luZyB0aGF0IGJyYW5jaCBpbnRvIHlvdXIKKyAgICAgICAgICAgICAgICBCU1Agd2hlbiBuZWVkZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgYXBwcm9hY2ggeW91IHRha2UgaXMgZW50aXJlbHkgdXAgdG8geW91CisgICAgICAgIGFuZCBkZXBlbmRzIG9uIHdoYXQgd29ya3MgYmVzdCBmb3IgeW91ciBkZXZlbG9wbWVudCBtb2RlbC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nZW5jYXBzdWxhdGluZy1wYXRjaGVzJz4KKyAgICAgICAgPHRpdGxlPkVuY2Fwc3VsYXRpbmcgUGF0Y2hlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBpZiB5b3UgYXJlIHJldXNpbmcgcGF0Y2hlcyBmcm9tIGFuIGV4dGVybmFsIHRyZWUgYW5kIGFyZSBub3QKKyAgICAgICAgICAgIHdvcmtpbmcgb24gdGhlIHBhdGNoZXMsIHlvdSBtaWdodCBmaW5kIHRoZSBlbmNhcHN1bGF0ZWQgZmVhdHVyZQorICAgICAgICAgICAgdG8gYmUgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICBHaXZlbiB0aGlzIHNjZW5hcmlvLCB5b3UgZG8gbm90IG5lZWQgdG8gY3JlYXRlIGFueSBicmFuY2hlcyBpbiB0aGUKKyAgICAgICAgICAgIHNvdXJjZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgUmF0aGVyLCB5b3UganVzdCB0YWtlIHRoZSBzdGF0aWMgcGF0Y2hlcyB5b3UgbmVlZCBhbmQgZW5jYXBzdWxhdGUKKyAgICAgICAgICAgIHRoZW0gd2l0aGluIGEgZmVhdHVyZSBkZXNjcmlwdGlvbi4KKyAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgdGhlIGZlYXR1cmUgZGVzY3JpcHRpb24sIHlvdSBzaW1wbHkgaW5jbHVkZSB0aGF0IGludG8KKyAgICAgICAgICAgIHRoZSBCU1AgZGVzY3JpcHRpb24gYXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2JzcC1kZXNjcmlwdGlvbnMnPkJTUCBEZXNjcmlwdGlvbnM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjcmVhdGUgcGF0Y2hlcyBhbmQgQlNQCisgICAgICAgICAgICBkZXNjcmlwdGlvbnMgaW4gdGhlICI8bGluayBsaW5rZW5kPSdwYXRjaGVzJz5QYXRjaGVzPC9saW5rPiIgYW5kCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYnNwLWRlc2NyaXB0aW9ucyc+QlNQIERlc2NyaXB0aW9uczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtYWNoaW5lLWJyYW5jaGVzJz4KKyAgICAgICAgPHRpdGxlPk1hY2hpbmUgQnJhbmNoZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgaGF2ZSBtdWx0aXBsZSBtYWNoaW5lcyBhbmQgYXJjaGl0ZWN0dXJlcyB0byBzdXBwb3J0LAorICAgICAgICAgICAgb3IgeW91IGFyZSBhY3RpdmVseSB3b3JraW5nIG9uIGJvYXJkIHN1cHBvcnQsIGl0IGlzIG1vcmUKKyAgICAgICAgICAgIGVmZmljaWVudCB0byBjcmVhdGUgYnJhbmNoZXMgaW4gdGhlIHJlcG9zaXRvcnkgYmFzZWQgb24KKyAgICAgICAgICAgIGluZGl2aWR1YWwgbWFjaGluZXMuCisgICAgICAgICAgICBIYXZpbmcgbWFjaGluZSBicmFuY2hlcyBhbGxvd3MgY29tbW9uIHNvdXJjZSB0byByZW1haW4gaW4gdGhlCisgICAgICAgICAgICAibWFzdGVyIiBicmFuY2ggd2l0aCBhbnkgZmVhdHVyZXMgc3BlY2lmaWMgdG8gYSBtYWNoaW5lIHN0b3JlZAorICAgICAgICAgICAgaW4gdGhlIGFwcHJvcHJpYXRlIG1hY2hpbmUgYnJhbmNoLgorICAgICAgICAgICAgVGhpcyBvcmdhbml6YXRpb24gbWV0aG9kIGZyZWVzIHlvdSBmcm9tIGNvbnRpbnVhbGx5IHJlaW50ZWdyYXRpbmcKKyAgICAgICAgICAgIHlvdXIgcGF0Y2hlcyBpbnRvIGEgZmVhdHVyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBhIG5ldyBicmFuY2gsIHlvdSBjYW4gc2V0IHVwIHlvdXIga2VybmVsIE1ldGFkYXRhCisgICAgICAgICAgICB0byB1c2UgdGhlIGJyYW5jaCBhIGNvdXBsZSBkaWZmZXJlbnQgd2F5cy4KKyAgICAgICAgICAgIEluIHRoZSByZWNpcGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbmV3IGJyYW5jaCBhcyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5LQlJBTkNIPC9maWxlbmFtZT4gdG8gdXNlIGZvciB0aGUgYm9hcmQgYXMKKyAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtCUkFOQ0ggPSAibXluZXdicmFuY2giCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBbm90aGVyIG1ldGhvZCBpcyB0byB1c2UgdGhlIDxmaWxlbmFtZT5icmFuY2g8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICBpbiB0aGUgQlNQIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBteWJzcC5zY2M6CisgICAgICAgIGRlZmluZSBLTUFDSElORSBteWJzcAorICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKyAgICAgICAgaW5jbHVkZSBzdGFuZGFyZC5zY2MKKworICAgICAgICBicmFuY2ggbXluZXdicmFuY2gKKworICAgICAgICBpbmNsdWRlIG15YnNwLWh3LnNjYworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZmluZAorICAgICAgICAgICAgeW91cnNlbGYgd2l0aCBudW1lcm91cyBicmFuY2hlcywgeW91IG1pZ2h0IGNvbnNpZGVyIHVzaW5nIGEKKyAgICAgICAgICAgIGhpZXJhcmNoaWNhbCBicmFuY2hpbmcgc3lzdGVtIHNpbWlsYXIgdG8gd2hhdCB0aGUgbGludXgteW9jdG8gTGludXgKKyAgICAgICAgICAgIGtlcm5lbCByZXBvc2l0b3JpZXMgdXNlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+Y29tbW9uPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPmtlcm5lbF90eXBlPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgaGFkIHR3byBrZXJuZWwgdHlwZXMsICJzdGFuZGFyZCIgYW5kICJzbWFsbCIgZm9yCisgICAgICAgICAgICBpbnN0YW5jZSwgdGhyZWUgbWFjaGluZXMsIGFuZCA8cmVwbGFjZWFibGU+Y29tbW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIGFzIDxmaWxlbmFtZT5teWRpcjwvZmlsZW5hbWU+LCB0aGUgYnJhbmNoZXMgaW4geW91cgorICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkgbWlnaHQgbG9vayBsaWtlIHRoaXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG15ZGlyL2Jhc2UKKyAgICAgbXlkaXIvc3RhbmRhcmQvYmFzZQorICAgICBteWRpci9zdGFuZGFyZC9tYWNoaW5lX2EKKyAgICAgbXlkaXIvc3RhbmRhcmQvbWFjaGluZV9iCisgICAgIG15ZGlyL3N0YW5kYXJkL21hY2hpbmVfYworICAgICBteWRpci9zbWFsbC9iYXNlCisgICAgIG15ZGlyL3NtYWxsL21hY2hpbmVfYQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIG9yZ2FuaXphdGlvbiBjYW4gaGVscCBjbGFyaWZ5IHRoZSBicmFuY2ggcmVsYXRpb25zaGlwcy4KKyAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgPGZpbGVuYW1lPm15ZGlyL3N0YW5kYXJkL21hY2hpbmVfYTwvZmlsZW5hbWU+CisgICAgICAgICAgICBpbmNsdWRlcyBldmVyeXRoaW5nIGluIDxmaWxlbmFtZT5teWRpci9iYXNlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+bXlkaXIvc3RhbmRhcmQvYmFzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlICJzdGFuZGFyZCIgYW5kICJzbWFsbCIgYnJhbmNoZXMgYWRkIHNvdXJjZXMgc3BlY2lmaWMgdG8gdGhvc2UKKyAgICAgICAgICAgIGtlcm5lbCB0eXBlcyB0aGF0IGZvciB3aGF0ZXZlciByZWFzb24gYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgdGhlCisgICAgICAgICAgICBvdGhlciBicmFuY2hlcy4KKyAgICAgICAgICAgIDxub3RlPlRoZSAiYmFzZSIgYnJhbmNoZXMgYXJlIGFuIGFydGlmYWN0IG9mIHRoZSB3YXkgR2l0IG1hbmFnZXMKKyAgICAgICAgICAgICAgICBpdHMgZGF0YSBpbnRlcm5hbGx5IG9uIHRoZSBmaWxlc3lzdGVtOiBHaXQgd2lsbCBub3QgYWxsb3cgeW91CisgICAgICAgICAgICAgICAgdG8gdXNlIDxmaWxlbmFtZT5teWRpci9zdGFuZGFyZDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teWRpci9zdGFuZGFyZC9tYWNoaW5lX2E8L2ZpbGVuYW1lPiBiZWNhdXNlIGl0CisgICAgICAgICAgICAgICAgd291bGQgaGF2ZSB0byBjcmVhdGUgYSBmaWxlIGFuZCBhIGRpcmVjdG9yeSBuYW1lZCAic3RhbmRhcmQiLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2ZlYXR1cmUtYnJhbmNoZXMnPgorICAgICAgICA8dGl0bGU+RmVhdHVyZSBCcmFuY2hlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBhcmUgYWN0aXZlbHkgZGV2ZWxvcGluZyBuZXcgZmVhdHVyZXMsIGl0IGNhbiBiZSBtb3JlCisgICAgICAgICAgICBlZmZpY2llbnQgdG8gd29yayB3aXRoIHRoYXQgZmVhdHVyZSBhcyBhIGJyYW5jaCwgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIGFzIGEgc2V0IG9mIHBhdGNoZXMgdGhhdCBoYXZlIHRvIGJlIHJlZ3VsYXJseSB1cGRhdGVkLgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgTGludXgga2VybmVsIHRvb2xzIHByb3ZpZGUgZm9yIHRoaXMgd2l0aAorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5naXQgbWVyZ2U8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBtZXJnZSBhIGZlYXR1cmUgYnJhbmNoIGludG8gYSBCU1AsIGluc2VydCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgbWVyZ2U8L2ZpbGVuYW1lPiBjb21tYW5kIGFmdGVyIGFueQorICAgICAgICAgICAgPGZpbGVuYW1lPmJyYW5jaDwvZmlsZW5hbWU+IGNvbW1hbmRzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBteWJzcC5zY2M6CisgICAgICAgIGRlZmluZSBLTUFDSElORSBteWJzcAorICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKyAgICAgICAgaW5jbHVkZSBzdGFuZGFyZC5zY2MKKworICAgICAgICBicmFuY2ggbXluZXdicmFuY2gKKyAgICAgICAgZ2l0IG1lcmdlIG15ZmVhdHVyZQorCisgICAgICAgIGluY2x1ZGUgbXlic3AtaHcuc2NjCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdzY2MtcmVmZXJlbmNlJz4KKyAgICA8dGl0bGU+U0NDIERlc2NyaXB0aW9uIEZpbGUgUmVmZXJlbmNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgYSBicmllZiByZWZlcmVuY2UgZm9yIHRoZSBjb21tYW5kcyB5b3UgY2FuIHVzZQorICAgICAgICB3aXRoaW4gYW4gU0NDIGRlc2NyaXB0aW9uIGZpbGUgKDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4pOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5icmFuY2ggW3JlZl08L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IGJyYW5jaCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBicmFuY2gKKyAgICAgICAgICAgICAgICAodHlwaWNhbGx5IDxmaWxlbmFtZT4ke0tUWVBFfTwvZmlsZW5hbWU+KSB1c2luZworICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoLCBvciAicmVmIiBpZiBzcGVjaWZpZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmRlZmluZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIERlZmluZXMgdmFyaWFibGVzLCBzdWNoIGFzIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LVFlQRTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+S0FSQ0g8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPktGRUFUVVJFX0RFU0NSSVBUSU9OPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmluY2x1ZGUgU0NDX0ZJTEU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBJbmNsdWRlcyBhbiBTQ0MgZmlsZSBpbiB0aGUgY3VycmVudCBmaWxlLgorICAgICAgICAgICAgICAgIFRoZSBmaWxlIGlzIHBhcnNlZCBhcyBpZiB5b3UgaGFkIGluc2VydGVkIGl0IGlubGluZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+a2NvbmYgW2hhcmR3YXJlfG5vbi1oYXJkd2FyZV0gQ0ZHX0ZJTEU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBRdWV1ZXMgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50IGZvciBtZXJnaW5nIGludG8gdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgTGludXggPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5naXQgbWVyZ2UgR0lUX0JSQU5DSDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIE1lcmdlcyB0aGUgZmVhdHVyZSBicmFuY2ggaW50byB0aGUgY3VycmVudCBicmFuY2guCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnBhdGNoIFBBVENIX0ZJTEU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBcHBsaWVzIHRoZSBwYXRjaCB0byB0aGUgY3VycmVudCBHaXQgYnJhbmNoLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jb21tb24ueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jb21tb24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YzgyY2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWNvbW1vbi54bWwKQEAgLTAsMCArMSwxMDMzIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0na2VybmVsLWRldi1jb21tb24nPgorCis8dGl0bGU+Q29tbW9uIFRhc2tzPC90aXRsZT4KKworPHBhcmE+CisgICAgVGhpcyBjaGFwdGVyIHByZXNlbnRzIHNldmVyYWwgY29tbW9uIHRhc2tzIHlvdSBwZXJmb3JtIHdoZW4geW91CisgICAgd29yayB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IGtlcm5lbC4KKyAgICBUaGVzZSB0YXNrcyBpbmNsdWRlIHByZXBhcmluZyBhIGxheWVyLCBtb2RpZnlpbmcgYW4gZXhpc3RpbmcgcmVjaXBlLAorICAgIGl0ZXJhdGl2ZSBkZXZlbG9wbWVudCwgd29ya2luZyB3aXRoIHlvdXIgb3duIHNvdXJjZXMsIGFuZCBpbmNvcnBvcmF0aW5nCisgICAgb3V0LW9mLXRyZWUgbW9kdWxlcy4KKyAgICA8bm90ZT4KKyAgICAgICAgVGhlIGV4YW1wbGVzIHByZXNlbnRlZCBpbiB0aGlzIGNoYXB0ZXIgd29yayB3aXRoIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgIDEuMi4yIFJlbGVhc2UgYW5kIGZvcndhcmQuCisgICAgPC9ub3RlPgorPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLWFuZC1wcmVwYXJpbmctYS1sYXllcic+CisgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhbmQgUHJlcGFyaW5nIGEgTGF5ZXI8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGFyZSBnb2luZyB0byBiZSBtb2RpZnlpbmcga2VybmVsIHJlY2lwZXMsIGl0IGlzIHJlY29tbWVuZGVkCisgICAgICAgICAgICB0aGF0IHlvdSBjcmVhdGUgYW5kIHByZXBhcmUgeW91ciBvd24gbGF5ZXIgaW4gd2hpY2ggdG8gZG8geW91cgorICAgICAgICAgICAgd29yay4KKyAgICAgICAgICAgIFlvdXIgbGF5ZXIgY29udGFpbnMgaXRzIG93bgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4KKyAgICAgICAgICAgIGFwcGVuZCBmaWxlcworICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikgYW5kIHByb3ZpZGVzIGEgY29udmVuaWVudAorICAgICAgICAgICAgbWVjaGFuaXNtIHRvIGNyZWF0ZSB5b3VyIG93biByZWNpcGUgZmlsZXMKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgRm9yIGRldGFpbHMgb24gaG93IHRvIGNyZWF0ZSBhbmQgd29yayB3aXRoIGxheWVycywgc2VlIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgIHNlY3Rpb25zIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPiI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvdWxpbms+IiBmb3IKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvbiBsYXllcnMgYW5kIGhvdyB0byBjcmVhdGUgbGF5ZXJzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4iPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc2V0LXVwLXlvdXItbGF5ZXItZm9yLXRoZS1idWlsZCc+U2V0IFVwIFlvdXIgTGF5ZXIgZm9yIHRoZSBCdWlsZDwvdWxpbms+IiBmb3IKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIG9uIHNldHRpbmcgdXAgYSBsYXllciBmb3Iga2VybmVsCisgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbW9kaWZ5aW5nLWFuLWV4aXN0aW5nLXJlY2lwZSc+CisgICAgICAgIDx0aXRsZT5Nb2RpZnlpbmcgYW4gRXhpc3RpbmcgUmVjaXBlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIG1hbnkgY2FzZXMsIHlvdSBjYW4gY3VzdG9taXplIGFuIGV4aXN0aW5nIGxpbnV4LXlvY3RvIHJlY2lwZSB0bworICAgICAgICAgICAgbWVldCB0aGUgbmVlZHMgb2YgeW91ciBwcm9qZWN0LgorICAgICAgICAgICAgRWFjaCByZWxlYXNlIG9mIHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGEgZmV3IExpbnV4CisgICAgICAgICAgICBrZXJuZWwgcmVjaXBlcyBmcm9tIHdoaWNoIHlvdSBjYW4gY2hvb3NlLgorICAgICAgICAgICAgVGhlc2UgYXJlIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGluIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE1vZGlmeWluZyBhbiBleGlzdGluZyByZWNpcGUgY2FuIGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0aW5nIHRoZSBhcHBlbmQgZmlsZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BcHBseWluZyBwYXRjaGVzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNoYW5naW5nIHRoZSBjb25maWd1cmF0aW9uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVmb3JlIG1vZGlmeWluZyBhbiBleGlzdGluZyByZWNpcGUsIGJlIHN1cmUgdGhhdCB5b3UgaGF2ZSBjcmVhdGVkCisgICAgICAgICAgICBhIG1pbmltYWwsIGN1c3RvbSBsYXllciBmcm9tIHdoaWNoIHlvdSBjYW4gd29yay4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWFuZC1wcmVwYXJpbmctYS1sYXllcic+Q3JlYXRpbmcgYW5kIFByZXBhcmluZyBhIExheWVyPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIHNvbWUgZ2VuZXJhbCByZXNvdXJjZXMuCisgICAgICAgICAgICBZb3UgY2FuIGFsc28gc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NldC11cC15b3VyLWxheWVyLWZvci10aGUtYnVpbGQnPlNldCBVcCBZb3VyIExheWVyIGZvciB0aGUgQnVpbGQ8L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgb2YgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBhIGRldGFpbGVkCisgICAgICAgICAgICBleGFtcGxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLXRoZS1hcHBlbmQtZmlsZSc+CisgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgdGhlIEFwcGVuZCBGaWxlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNyZWF0ZSB0aGlzIGZpbGUgaW4geW91ciBjdXN0b20gbGF5ZXIuCisgICAgICAgICAgICAgICAgWW91IGFsc28gbmFtZSBpdCBhY2NvcmRpbmdseSBiYXNlZCBvbiB0aGUgbGludXgteW9jdG8gcmVjaXBlCisgICAgICAgICAgICAgICAgeW91IGFyZSB1c2luZy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBtb2RpZnlpbmcgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcmVjaXBlLCB0aGUgYXBwZW5kIGZpbGUgd2lsbCB0eXBpY2FsbHkgYmUgbG9jYXRlZCBhcyBmb2xsb3dzCisgICAgICAgICAgICAgICAgd2l0aGluIHlvdXIgY3VzdG9tIGxheWVyOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHJlcGxhY2VhYmxlPnlvdXItbGF5ZXI8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBhcHBlbmQgZmlsZSBzaG91bGQgaW5pdGlhbGx5IGV4dGVuZCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHNlYXJjaCBwYXRoIGJ5IHByZXBlbmRpbmcgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHlvdXIKKyAgICAgICAgICAgICAgICBmaWxlcyB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBwYXRoIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRISVNESVInPjxmaWxlbmFtZT5USElTRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LyR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZXhwYW5kcyB0byAibGludXgteW9jdG8iIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhpcworICAgICAgICAgICAgICAgIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgSWYgeW91IGFkZCBhbnkgbmV3IGZpbGVzIHRoYXQgbW9kaWZ5IHRoZSBrZXJuZWwgcmVjaXBlIGFuZCB5b3UKKyAgICAgICAgICAgICAgICBoYXZlIGV4dGVuZGVkIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPiBhcworICAgICAgICAgICAgICAgIGRlc2NyaWJlZCBhYm92ZSwgeW91IG11c3QgcGxhY2UgdGhlIGZpbGVzIGluIHlvdXIgbGF5ZXIgaW4gdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIGFyZWE6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+eW91ci1sYXllcjwvcmVwbGFjZWFibGU+L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT5JZiB5b3UgYXJlIHdvcmtpbmcgb24gYSBuZXcgbWFjaGluZSBCb2FyZCBTdXBwb3J0IFBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgKEJTUCksIGJlIHN1cmUgdG8gcmVmZXIgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdhcHBseWluZy1wYXRjaGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5BcHBseWluZyBQYXRjaGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgYSBzaW5nbGUgcGF0Y2ggb3IgYSBzbWFsbCBzZXJpZXMgb2YgcGF0Y2hlcworICAgICAgICAgICAgICAgIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UsIHlvdQorICAgICAgICAgICAgICAgIGNhbiBkbyBzbyBqdXN0IGFzIHlvdSB3b3VsZCB3aXRoIGFueSBvdGhlciByZWNpcGUuCisgICAgICAgICAgICAgICAgWW91IGZpcnN0IGNvcHkgdGhlIHBhdGNoZXMgdG8gdGhlIHBhdGggYWRkZWQgdG8KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGluIHlvdXIgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgYXMgZGVzY3JpYmVkIGluCisgICAgICAgICAgICAgICAgdGhlIHByZXZpb3VzIHNlY3Rpb24sIGFuZCB0aGVuIHJlZmVyZW5jZSB0aGVtIGluCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHN0YXRlbWVudHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY2FuIGFwcGx5IGEgdGhyZWUtcGF0Y2ggc2VyaWVzIGJ5IGFkZGluZyB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgbGluZXMgdG8geW91ciBsaW51eC15b2N0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGluIHlvdXIgbGF5ZXI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1maXJzdC1jaGFuZ2UucGF0Y2giCisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly8wMDAyLXNlY29uZC1jaGFuZ2UucGF0Y2giCisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly8wMDAzLXRoaXJkLWNoYW5nZS5wYXRjaCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIG5leHQgdGltZSB5b3UgcnVuIEJpdEJha2UgdG8gYnVpbGQgdGhlIExpbnV4IGtlcm5lbCwKKyAgICAgICAgICAgICAgICBCaXRCYWtlIGRldGVjdHMgdGhlIGNoYW5nZSBpbiB0aGUgcmVjaXBlIGFuZCBmZXRjaGVzIGFuZAorICAgICAgICAgICAgICAgIGFwcGxpZXMgdGhlIHBhdGNoZXMgYmVmb3JlIGJ1aWxkaW5nIHRoZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBhIGRldGFpbGVkIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gcGF0Y2ggdGhlIGtlcm5lbCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwYXRjaGluZy10aGUta2VybmVsJz5QYXRjaGluZyB0aGUgS2VybmVsPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY2hhbmdpbmctdGhlLWNvbmZpZ3VyYXRpb24nPgorICAgICAgICAgICAgPHRpdGxlPkNoYW5naW5nIHRoZSBDb25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBtYWtlIHdob2xlc2FsZSBvciBpbmNyZW1lbnRhbCBjaGFuZ2VzIHRvIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSB1c2VkIGZvciB0aGUgZXZlbnR1YWwKKyAgICAgICAgICAgICAgICBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbiBieSBpbmNsdWRpbmcgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlIGFuZCBieSBzcGVjaWZ5aW5nCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHRvIGJlIGFwcGxpZWQgdG8gdGhhdCBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBhIGNvbXBsZXRlLCB3b3JraW5nIExpbnV4IGtlcm5lbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlIHlvdSB3YW50IHRvIHVzZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24sIGFzIGJlZm9yZSwgY29weQorICAgICAgICAgICAgICAgIHRoYXQgZmlsZSB0byB0aGUgYXBwcm9wcmlhdGUgPGZpbGVuYW1lPiR7UE59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaW4geW91ciBsYXllcidzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4gZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgIGFuZCByZW5hbWUgdGhlIGNvcGllZCBmaWxlIHRvICJkZWZjb25maWciLgorICAgICAgICAgICAgICAgIFRoZW4sIGFkZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHRoZSBsaW51eC15b2N0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGluIHlvdXIgbGF5ZXI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9kZWZjb25maWciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHRlbGxzIHRoZSBidWlsZCBzeXN0ZW0gaG93IHRvCisgICAgICAgICAgICAgICAgc2VhcmNoIGZvciB0aGUgZmlsZSwgd2hpbGUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBleHRlbmRzIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgKHNlYXJjaCBkaXJlY3RvcmllcykgdG8gaW5jbHVkZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQTn08L2ZpbGVuYW1lPiBkaXJlY3RvcnkgeW91IGNyZWF0ZWQgdG8gaG9sZCB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGNoYW5nZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gYXBwbGllcyB0aGUgY29uZmlndXJhdGlvbnMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSBiZWZvcmUgYXBwbHlpbmcgYW55CisgICAgICAgICAgICAgICAgc3Vic2VxdWVudCBjb25maWd1cmF0aW9uIGZyYWdtZW50cy4KKyAgICAgICAgICAgICAgICBUaGUgZmluYWwga2VybmVsIGNvbmZpZ3VyYXRpb24gaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBpbiB0aGUgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgYW5kCisgICAgICAgICAgICAgICAgYW55IGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIHlvdSBwcm92aWRlLgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHJlYWxpemUgdGhhdCBpZiB5b3UgaGF2ZSBhbnkgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZyYWdtZW50cywgdGhlIGJ1aWxkIHN5c3RlbSBhcHBsaWVzIHRoZXNlIG9uIHRvcCBvZiBhbmQKKyAgICAgICAgICAgICAgICBhZnRlciBhcHBseWluZyB0aGUgZXhpc3RpbmcgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgIDwvbm90ZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgR2VuZXJhbGx5IHNwZWFraW5nLCB0aGUgcHJlZmVycmVkIGFwcHJvYWNoIGlzIHRvIGRldGVybWluZSB0aGUKKyAgICAgICAgICAgICAgICBpbmNyZW1lbnRhbCBjaGFuZ2UgeW91IHdhbnQgdG8gbWFrZSBhbmQgYWRkIHRoYXQgYXMgYQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBhIGJhc2ljIHNlcmlhbAorICAgICAgICAgICAgICAgIGNvbnNvbGUsIGNyZWF0ZSBhIGZpbGUgbmFtZWQgPGZpbGVuYW1lPjgyNTAuY2ZnPC9maWxlbmFtZT4gaW4KKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPiR7UE59PC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGggdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgIGNvbnRlbnQgKHdpdGhvdXQgaW5kZW50YXRpb24pOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ09ORklHX1NFUklBTF84MjUwPXkKKyAgICAgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorICAgICBDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKKyAgICAgQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKKyAgICAgQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorICAgICBDT05GSUdfU0VSSUFMX0NPUkU9eQorICAgICBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE5leHQsIGluY2x1ZGUgdGhpcyBjb25maWd1cmF0aW9uIGZyYWdtZW50IGFuZCBleHRlbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKKyAgICAgU1JDX1VSSSArPSAiZmlsZTovLzgyNTAuY2ZnIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgbmV4dCB0aW1lIHlvdSBydW4gQml0QmFrZSB0byBidWlsZCB0aGUgTGludXgga2VybmVsLCBCaXRCYWtlCisgICAgICAgICAgICAgICAgZGV0ZWN0cyB0aGUgY2hhbmdlIGluIHRoZSByZWNpcGUgYW5kIGZldGNoZXMgYW5kIGFwcGxpZXMgdGhlCisgICAgICAgICAgICAgICAgbmV3IGNvbmZpZ3VyYXRpb24gYmVmb3JlIGJ1aWxkaW5nIHRoZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBhIGRldGFpbGVkIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gY29uZmlndXJlIHRoZSBrZXJuZWwsCisgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjb25maWd1cmluZy10aGUta2VybmVsJz5Db25maWd1cmluZyB0aGUgS2VybmVsPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctYW4taW4tdHJlZS1kZWZjb25maWctZmlsZSc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgYW4gIkluLVRyZWUiJm5ic3A7Jm5ic3A7PGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJdCBtaWdodCBiZSBkZXNpcmFibGUgdG8gaGF2ZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmcmFnbWVudAorICAgICAgICAgICAgICAgIHN1cHBvcnQgdGhyb3VnaCBhIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlIHRoYXQKKyAgICAgICAgICAgICAgICBpcyBwdWxsZWQgZnJvbSB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGZvciB0aGUgY29uZmlndXJlZAorICAgICAgICAgICAgICAgIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gbG9va3MgZm9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGVzIGluIHRoZSBsYXllciB1c2VkIGZvcgorICAgICAgICAgICAgICAgIE1ldGFkYXRhLCB3aGljaCBpcyAib3V0LW9mLXRyZWUiLCBhbmQgdGhlbiBjb25maWd1cmVzIHRoZW0KKyAgICAgICAgICAgICAgICB1c2luZyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSArPSAiZmlsZTovL2RlZmNvbmZpZyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCB3YW50IHRvIG1haW50YWluIGNvcGllcyBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlcyBpbiB5b3VyIGxheWVyIGJ1dCB3b3VsZAorICAgICAgICAgICAgICAgIHJhdGhlciBhbGxvdyB1c2VycyB0byB1c2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIHRoZQorICAgICAgICAgICAgICAgIGtlcm5lbCB0cmVlIGFuZCBzdGlsbCBiZSBhYmxlIHRvIGFkZCBjb25maWd1cmF0aW9uIGZyYWdtZW50cworICAgICAgICAgICAgICAgIHRvIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0aHJvdWdoLCBmb3IgZXhhbXBsZSwgYXBwZW5kIGZpbGVzLCB5b3UgY2FuIGRpcmVjdCB0aGUKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHVzZSBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgdGhhdCBpcyAiaW4tdHJlZSIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHNwZWNpZnkgYW4gImluLXRyZWUiIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlLAorICAgICAgICAgICAgICAgIGVkaXQgdGhlIHJlY2lwZSB0aGF0IGJ1aWxkcyB5b3VyIGtlcm5lbCBzbyB0aGF0IGl0IGhhcyB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgY29tbWFuZCBmb3JtOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0JVSUxEX0RFRkNPTkZJR188dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS01BQ0hJTkUnPktNQUNISU5FPC91bGluaz4gPz0gPHJlcGxhY2VhYmxlPmRlZmNvbmZpZ19maWxlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYXBwZW5kIHRoZSB2YXJpYWJsZSB3aXRoCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT4gYW5kIHRoZW4gc3VwcGx5IHRoZSBwYXRoIHRvCisgICAgICAgICAgICAgICAgeW91ciAiaW4tdHJlZSIgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzaWRlIGZyb20gbW9kaWZ5aW5nIHlvdXIga2VybmVsIHJlY2lwZSBhbmQgcHJvdmlkaW5nIHlvdXIgb3duCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsIHlvdSBuZWVkIHRvIGJlIHN1cmUgbm8KKyAgICAgICAgICAgICAgICBmaWxlcyBvciBzdGF0ZW1lbnRzIHNldCA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHRvIHVzZSBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IG90aGVyIHRoYW4geW91ciAiaW4tdHJlZSIKKyAgICAgICAgICAgICAgICBmaWxlIChlLmcuIGEga2VybmVsJ3MgPGZpbGVuYW1lPmxpbnV4LTwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlKS4KKyAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIGJ1aWxkIHN5c3RlbSBkZXRlY3RzIGEgc3RhdGVtZW50CisgICAgICAgICAgICAgICAgdGhhdCBpZGVudGlmaWVzIGFuICJvdXQtb2YtdHJlZSIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSwgdGhhdCBzdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICB3aWxsIG92ZXJyaWRlIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0JVSUxEX0RFRkNPTkZJRzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtCVUlMRF9ERUZDT05GSUcnPjxmaWxlbmFtZT5LQlVJTERfREVGQ09ORklHPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGRlc2NyaXB0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLWFuLWl0ZXJhdGl2ZS1kZXZlbG9wbWVudC1wcm9jZXNzJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIGFuIEl0ZXJhdGl2ZSBEZXZlbG9wbWVudCBQcm9jZXNzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBkbyBub3QgaGF2ZSBleGlzdGluZyBwYXRjaGVzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMsCisgICAgICAgICAgICB5b3UgY2FuIGl0ZXJhdGl2ZWx5IGdlbmVyYXRlIHRoZW0gZnJvbSB3aXRoaW4gdGhlIEJpdEJha2UgYnVpbGQKKyAgICAgICAgICAgIGVudmlyb25tZW50IGFzIGRlc2NyaWJlZCB3aXRoaW4gdGhpcyBzZWN0aW9uLgorICAgICAgICAgICAgRHVyaW5nIGFuIGl0ZXJhdGl2ZSB3b3JrZmxvdywgcnVubmluZyBhIHByZXZpb3VzbHkgY29tcGxldGVkIEJpdEJha2UKKyAgICAgICAgICAgIHRhc2sgY2F1c2VzIEJpdEJha2UgdG8gaW52YWxpZGF0ZSB0aGUgdGFza3MgdGhhdCBmb2xsb3cgdGhlCisgICAgICAgICAgICBjb21wbGV0ZWQgdGFzayBpbiB0aGUgYnVpbGQgc2VxdWVuY2UuCisgICAgICAgICAgICBJbnZhbGlkYXRlZCB0YXNrcyByZWJ1aWxkIHRoZSBuZXh0IHRpbWUgeW91IHJ1biB0aGUgYnVpbGQgdXNpbmcKKyAgICAgICAgICAgIEJpdEJha2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIHlvdSByZWFkIHRoaXMgc2VjdGlvbiwgYmUgc3VyZSB0byBzdWJzdGl0dXRlIHRoZSBuYW1lCisgICAgICAgICAgICBvZiB5b3VyIExpbnV4IGtlcm5lbCByZWNpcGUgZm9yIHRoZSB0ZXJtCisgICAgICAgICAgICAibGludXgteW9jdG8iLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RpcC1kaXJ0eS1zdHJpbmcnPgorICAgICAgICAgICAgPHRpdGxlPiItZGlydHkiIFN0cmluZzwvdGl0bGU+CisKKzwhLS0KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5BUiAtIERhcnJlbiBIYXJ0OjwvZW1waGFzaXM+ICBUaGlzIHNlY3Rpb24KKyAgICAgICAgICAgICAgICBvcmlnaW5hdGVkIGZyb20gdGhlIG9sZCBZb2N0byBQcm9qZWN0IEtlcm5lbCBBcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICBhbmQgVXNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICBJdCB3YXMgZGVjaWRlZCB3ZSBuZWVkIHRvIHB1dCBpdCBpbiB0aGlzIHNlY3Rpb24gaGVyZS4KKyAgICAgICAgICAgICAgICBEYXJyZW4gbmVlZHMgdG8gZmlndXJlIG91dCB3aGVyZSB3ZSB3YW50IGl0IGFuZCB3aGF0IHBhcnQKKyAgICAgICAgICAgICAgICBvZiBpdCB3ZSB3YW50IChhbGwsIHJldmlzaW9uPz8/KQorICAgICAgICAgICAgPC9wYXJhPgorLS0+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIGtlcm5lbCBpbWFnZXMgYXJlIGJlaW5nIGJ1aWx0IHdpdGggIi1kaXJ0eSIgb24gdGhlCisgICAgICAgICAgICAgICAgZW5kIG9mIHRoZSB2ZXJzaW9uIHN0cmluZywgdGhpcyBzaW1wbHkgbWVhbnMgdGhhdAorICAgICAgICAgICAgICAgIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkgaGF2ZSBub3QgYmVlbiBjb21taXR0ZWQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBzdGF0dXMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBhYm92ZSBHaXQgY29tbWFuZCB0byByZXBvcnQgbW9kaWZpZWQsCisgICAgICAgICAgICAgICAgcmVtb3ZlZCwgb3IgYWRkZWQgZmlsZXMuCisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBjb21taXQgdGhvc2UgY2hhbmdlcyB0byB0aGUgdHJlZSByZWdhcmRsZXNzIG9mCisgICAgICAgICAgICAgICAgd2hldGhlciB0aGV5IHdpbGwgYmUgc2F2ZWQsIGV4cG9ydGVkLCBvciB1c2VkLgorICAgICAgICAgICAgICAgIE9uY2UgeW91IGNvbW1pdCB0aGUgY2hhbmdlcywgeW91IG5lZWQgdG8gcmVidWlsZCB0aGUga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBmb3JjZSBhIHBpY2t1cCBhbmQgY29tbWl0IG9mIGFsbCBzdWNoIHBlbmRpbmcgY2hhbmdlcywKKyAgICAgICAgICAgICAgICBlbnRlciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgYWRkIC4KKyAgICAgJCBnaXQgY29tbWl0IC1zIC1hIC1tICJnZXR0aW5nIHJpZCBvZiAtZGlydHkiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBOZXh0LCByZWJ1aWxkIHRoZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG1hbmlwdWxhdGUgdGhlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgIHVzZWQgdG8gYnVpbGQgYSBsaW51eC15b2N0byByZWNpcGUgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IGNvbW1hbmQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBtZW51Y29uZmlnCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBzdGFydHMgdGhlIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uIHRvb2wsCisgICAgICAgICAgICAgICAgd2hpY2ggYWxsb3dzIHlvdSB0byBwcmVwYXJlIGEgbmV3CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGZvciB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgZXhpdCB0aGUgdG9vbCwgYmUgc3VyZSB0byBzYXZlIHlvdXIgY2hhbmdlcworICAgICAgICAgICAgICAgIGF0IHRoZSBwcm9tcHQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSByZXN1bHRpbmcgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGlzCisgICAgICAgICAgICAgICAgbG9jYXRlZCBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4gdW5kZXIgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LSR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9BUkNIJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LSR7PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJTlVYX0tFUk5FTF9UWVBFJz48ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPjwvdWxpbms+fS1idWlsZDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgZW50aXJlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBhcyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uJz5DaGFuZ2luZyB0aGUgQ29uZmlndXJhdGlvbjwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgYmV0dGVyIG1ldGhvZCBpcyB0byBjcmVhdGUgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvIGNvbmZpZ3VyYXRpb24gZmlsZXM6IG9uZSBwcmV2aW91c2x5CisgICAgICAgICAgICAgICAgY3JlYXRlZCBhbmQgc2F2ZWQsIGFuZCBvbmUgZnJlc2hseSBjcmVhdGVkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gdG9vbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gY3JlYXRlIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudCB1c2luZyB0aGlzIG1ldGhvZCwgZm9sbG93CisgICAgICAgICAgICAgICAgdGhlc2Ugc3RlcHM6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29tcGxldGUgYSBidWlsZCBhdCBsZWFzdCB0aHJvdWdoIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gdGFzayBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMga2VybmVsX2NvbmZpZ21lIC1mCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHN0ZXAgZW5zdXJlcyB0aGF0IHlvdSB3aWxsIGJlIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBmcm9tIGEga25vd24gc3RhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHNpdHVhdGlvbnMgZXhpc3Qgd2hlcmUgeW91ciBidWlsZCBzdGF0ZSBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgYmVjb21lIHVua25vd24sIGl0IGlzIGJlc3QgdG8gcnVuIHRoZSBwcmV2aW91cworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBwcmlvciB0byBzdGFydGluZyB1cAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UnVuIHRoZSA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMgbWVudWNvbmZpZworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UnVuIHRoZSA8ZmlsZW5hbWU+ZGlmZmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHRvIHByZXBhcmUgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlc3VsdGluZyBmaWxlIDxmaWxlbmFtZT5mcmFnbWVudC5jZmc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBwbGFjZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+IGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGxpbnV4LXlvY3RvIC1jIGRpZmZjb25maWcKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRpZmZjb25maWc8L2ZpbGVuYW1lPiBjb21tYW5kIGNyZWF0ZXMgYSBmaWxlIHRoYXQgaXMgYQorICAgICAgICAgICAgICAgIGxpc3Qgb2YgTGludXgga2VybmVsIDxmaWxlbmFtZT5DT05GSUdfPC9maWxlbmFtZT4gYXNzaWdubWVudHMuCisgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nY2hhbmdpbmctdGhlLWNvbmZpZ3VyYXRpb24nPkNoYW5naW5nIHRoZSBDb25maWd1cmF0aW9uPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZSBvdXRwdXQgYXMgYQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgdGhpcyBtZXRob2QgdG8gY3JlYXRlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRzIGZvciBhIEJTUC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nYnNwLWRlc2NyaXB0aW9ucyc+QlNQIERlc2NyaXB0aW9uczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUga2VybmVsIHRvb2xzIGFsc28gcHJvdmlkZSBjb25maWd1cmF0aW9uIHZhbGlkYXRpb24uCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlc2UgdG9vbHMgdG8gcHJvZHVjZSB3YXJuaW5ncyBmb3Igd2hlbiBhCisgICAgICAgICAgICAgICAgcmVxdWVzdGVkIGNvbmZpZ3VyYXRpb24gZG9lcyBub3QgYXBwZWFyIGluIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBvciB3aGVuIHlvdSBvdmVycmlkZSBhCisgICAgICAgICAgICAgICAgcG9saWN5IGNvbmZpZ3VyYXRpb24gaW4gYSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGZyYWdtZW50LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB3aXRoIHNvbWUgc2FtcGxlIG91dHB1dCBvZiB0aGUgY29tbWFuZAorICAgICAgICAgICAgICAgIHRoYXQgcnVucyB0aGVzZSB0b29sczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBrZXJuZWxfY29uZmlnY2hlY2sgLWYKKworICAgICAuLi4KKworICAgICBOT1RFOiB2YWxpZGF0aW5nIGtlcm5lbCBjb25maWd1cmF0aW9uCisgICAgIFRoaXMgQlNQIHNldHMgMyBpbnZhbGlkL29ic29sZXRlIGtlcm5lbCBvcHRpb25zLgorICAgICBUaGVzZSBjb25maWcgb3B0aW9ucyBhcmUgbm90IG9mZmVyZWQgYW55d2hlcmUgd2l0aGluIHRoaXMga2VybmVsLgorICAgICBUaGUgZnVsbCBsaXN0IGNhbiBiZSBmb3VuZCBpbiB5b3VyIGtlcm5lbCBzcmMgZGlyIGF0OgorICAgICBtZXRhL2NmZy9zdGFuZGFyZC9teWJzcC9pbnZhbGlkLmNmZworCisgICAgIFRoaXMgQlNQIHNldHMgMjEga2VybmVsIG9wdGlvbnMgdGhhdCBhcmUgcG9zc2libHkgbm9uLWhhcmR3YXJlIHJlbGF0ZWQuCisgICAgIFRoZSBmdWxsIGxpc3QgY2FuIGJlIGZvdW5kIGluIHlvdXIga2VybmVsIHNyYyBkaXIgYXQ6CisgICAgIG1ldGEvY2ZnL3N0YW5kYXJkL215YnNwL3NwZWNpZmllZF9ub25faGR3LmNmZworCisgICAgIFdBUk5JTkc6IFRoZXJlIHdlcmUgMiBoYXJkd2FyZSBvcHRpb25zIHJlcXVlc3RlZCB0aGF0IGRvIG5vdAorICAgICAgICAgICAgICBoYXZlIGEgY29ycmVzcG9uZGluZyB2YWx1ZSBwcmVzZW50IGluIHRoZSBmaW5hbCAiLmNvbmZpZyIgZmlsZS4KKyAgICAgICAgICAgICAgVGhpcyBwcm9iYWJseSBtZWFucyB5b3UgYXJlIG5vdCBnZXR0aW5nIHRoZSBjb25maWcgeW91IHdhbnRlZC4KKyAgICAgICAgICAgICAgVGhlIGZ1bGwgbGlzdCBjYW4gYmUgZm91bmQgaW4geW91ciBrZXJuZWwgc3JjIGRpciBhdDoKKyAgICAgICAgICAgICAgbWV0YS9jZmcvc3RhbmRhcmQvbXlic3AvbWlzbWF0Y2guY2ZnCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgb3V0cHV0IGRlc2NyaWJlcyB0aGUgdmFyaW91cyBwcm9ibGVtcyB0aGF0IHlvdSBjYW4KKyAgICAgICAgICAgICAgICBlbmNvdW50ZXIgYWxvbmcgd2l0aCB3aGVyZSB0byBmaW5kIHRoZSBvZmZlbmRpbmcgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGl0ZW1zLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgbG9ncyB0byBhZGp1c3QgeW91cgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHRoZW4gcmVwZWF0IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rZXJuZWxfY29uZmlnbWU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT4gY29tbWFuZHMgdW50aWwKKyAgICAgICAgICAgICAgICB0aGV5IHByb2R1Y2Ugbm8gd2FybmluZ3MuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB0b29sLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLW1lbnVjb25maWcnPlVzaW5nIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT48L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtb2RpZnlpbmctc291cmNlLWNvZGUnPgorICAgICAgICAgICAgPHRpdGxlPk1vZGlmeWluZyBTb3VyY2UgQ29kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZXhwZXJpbWVudCB3aXRoIHNvdXJjZSBjb2RlIGNoYW5nZXMgYW5kIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgc2ltcGxlIHBhdGNoIHdpdGhvdXQgbGVhdmluZyB0aGUgQml0QmFrZSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICBUbyBnZXQgc3RhcnRlZCwgYmUgc3VyZSB0byBjb21wbGV0ZSBhIGJ1aWxkIGF0CisgICAgICAgICAgICAgICAgbGVhc3QgdGhyb3VnaCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdGFzazoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBrZXJuZWxfY29uZmlnbWUgLWYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGFraW5nIHRoaXMgc3RlcCBlbnN1cmVzIHlvdSBoYXZlIHRoZSBzb3VyY2VzIHByZXBhcmVkCisgICAgICAgICAgICAgICAgYW5kIHRoZSBjb25maWd1cmF0aW9uIGNvbXBsZXRlZC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlIHNvdXJjZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn0vbGludXg8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZWRpdCB0aGUgc291cmNlcyBhcyB5b3Ugd291bGQgYW55IG90aGVyIExpbnV4IHNvdXJjZQorICAgICAgICAgICAgICAgIHRyZWUuCisgICAgICAgICAgICAgICAgSG93ZXZlciwga2VlcCBpbiBtaW5kIHRoYXQgeW91IHdpbGwgbG9zZSBjaGFuZ2VzIGlmIHlvdQorICAgICAgICAgICAgICAgIHRyaWdnZXIgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWZldGNoJz48ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdGFzayBmb3IgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGF2b2lkIHRyaWdnZXJpbmcgdGhpcyB0YXNrIGJ5IG5vdCB1c2luZyBCaXRCYWtlIHRvCisgICAgICAgICAgICAgICAgcnVuIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jbGVhbmFsbCc+PGZpbGVuYW1lPmNsZWFuYWxsPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY2xlYW5zc3RhdGUnPjxmaWxlbmFtZT5jbGVhbnNzdGF0ZTwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgb3IgZm9yY2VkCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWZldGNoJz48ZmlsZW5hbWU+ZmV0Y2g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgQWxzbywgZG8gbm90IG1vZGlmeSB0aGUgcmVjaXBlIGl0c2VsZiB3aGlsZSB3b3JraW5nCisgICAgICAgICAgICAgICAgd2l0aCB0ZW1wb3JhcnkgY2hhbmdlcyBvciBCaXRCYWtlIG1pZ2h0IHJ1biB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmV0Y2g8L2ZpbGVuYW1lPiBjb21tYW5kIGRlcGVuZGluZyBvbiB0aGUKKyAgICAgICAgICAgICAgICBjaGFuZ2VzIHRvIHRoZSByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHRlc3QgeW91ciB0ZW1wb3JhcnkgY2hhbmdlcywgaW5zdHJ1Y3QgQml0QmFrZSB0byBydW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbXBpbGU8L2ZpbGVuYW1lPiBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPi1mPC9maWxlbmFtZT4gb3B0aW9uIGZvcmNlcyB0aGUgY29tbWFuZCB0byBydW4KKyAgICAgICAgICAgICAgICBldmVuIHRob3VnaCBCaXRCYWtlIG1pZ2h0IHRoaW5rIGl0IGhhcyBhbHJlYWR5IGRvbmUgc286CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMgY29tcGlsZSAtZgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB0aGUgY29tcGlsZSBmYWlscywgeW91IGNhbiB1cGRhdGUgdGhlIHNvdXJjZXMgYW5kIHJlcGVhdAorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Y29tcGlsZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIE9uY2UgY29tcGlsYXRpb24gaXMgc3VjY2Vzc2Z1bCwgeW91IGNhbiBpbnNwZWN0IGFuZCB0ZXN0CisgICAgICAgICAgICAgICAgdGhlIHJlc3VsdGluZyBidWlsZCAoaS5lLiBrZXJuZWwsIG1vZHVsZXMsIGFuZCBzbyBmb3J0aCkgZnJvbQorICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgYnVpbGQgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtXT1JLRElSfS9saW51eC0ke1BBQ0tBR0VfQVJDSH0tJHtMSU5VWF9LRVJORUxfVFlQRX0tYnVpbGQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBydW4gdGhlIDxmaWxlbmFtZT5kZXBsb3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gcGxhY2UgdGhlIGtlcm5lbCBpbWFnZSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveS9pbWFnZXM8L2ZpbGVuYW1lPiBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorCSQgYml0YmFrZSBsaW51eC15b2N0byAtYyBkZXBsb3kKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQW5kLCBvZiBjb3Vyc2UsIHlvdSBjYW4gcGVyZm9ybSB0aGUgcmVtYWluaW5nIGluc3RhbGxhdGlvbiBhbmQKKyAgICAgICAgICAgICAgICBwYWNrYWdpbmcgc3RlcHMgYnkgaXNzdWluZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisJJCBiaXRiYWtlIGxpbnV4LXlvY3RvCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgcmFwaWQgaXRlcmF0aXZlIGRldmVsb3BtZW50LCB0aGUgZWRpdC1jb21waWxlLXJlcGVhdCBsb29wCisgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGluIHRoaXMgc2VjdGlvbiBpcyBwcmVmZXJhYmxlIHRvIHJlYnVpbGRpbmcgdGhlCisgICAgICAgICAgICAgICAgZW50aXJlIHJlY2lwZSBiZWNhdXNlIHRoZSBpbnN0YWxsYXRpb24gYW5kIHBhY2thZ2luZyB0YXNrcworICAgICAgICAgICAgICAgIGFyZSB2ZXJ5IHRpbWUgY29uc3VtaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBzb3VyY2UgY29kZSBtb2RpZmljYXRpb25zLAorICAgICAgICAgICAgICAgIHlvdSBjYW4gbWFrZSB0aGVtIHBlcm1hbmVudCBieSBnZW5lcmF0aW5nIHBhdGNoZXMgYW5kCisgICAgICAgICAgICAgICAgYXBwbHlpbmcgdGhlbSB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50IGFzIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYXBwbHlpbmctcGF0Y2hlcyc+QXBwbHlpbmcgUGF0Y2hlczwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIG5vdCBmYW1pbGlhciB3aXRoIGdlbmVyYXRpbmcgcGF0Y2hlcywgcmVmZXIgdG8gdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NyZWF0aW5nLXRoZS1wYXRjaCc+Q3JlYXRpbmcgdGhlIFBhdGNoPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd29ya2luZy13aXRoLXlvdXItb3duLXNvdXJjZXMnPgorICAgICAgICA8dGl0bGU+V29ya2luZyBXaXRoIFlvdXIgT3duIFNvdXJjZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGNhbm5vdCB3b3JrIHdpdGggb25lIG9mIHRoZSBMaW51eCBrZXJuZWwKKyAgICAgICAgICAgIHZlcnNpb25zIHN1cHBvcnRlZCBieSBleGlzdGluZyBsaW51eC15b2N0byByZWNpcGVzLCB5b3UgY2FuCisgICAgICAgICAgICBzdGlsbCBtYWtlIHVzZSBvZiB0aGUgWW9jdG8gUHJvamVjdCBMaW51eCBrZXJuZWwgdG9vbGluZyBieQorICAgICAgICAgICAgd29ya2luZyB3aXRoIHlvdXIgb3duIHNvdXJjZXMuCisgICAgICAgICAgICBXaGVuIHlvdSB1c2UgeW91ciBvd24gc291cmNlcywgeW91IHdpbGwgbm90IGJlIGFibGUgdG8KKyAgICAgICAgICAgIGxldmVyYWdlIHRoZSBleGlzdGluZyBrZXJuZWwKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+IGFuZAorICAgICAgICAgICAgc3RhYmlsaXphdGlvbiB3b3JrIG9mIHRoZSBsaW51eC15b2N0byBzb3VyY2VzLgorICAgICAgICAgICAgSG93ZXZlciwgeW91IHdpbGwgYmUgYWJsZSB0byBtYW5hZ2UgeW91ciBvd24gTWV0YWRhdGEgaW4gdGhlIHNhbWUKKyAgICAgICAgICAgIGZvcm1hdCBhcyB0aGUgbGludXgteW9jdG8gc291cmNlcy4KKyAgICAgICAgICAgIE1haW50YWluaW5nIGZvcm1hdCBjb21wYXRpYmlsaXR5IGZhY2lsaXRhdGVzIGNvbnZlcmdpbmcgd2l0aAorICAgICAgICAgICAgbGludXgteW9jdG8gb24gYSBmdXR1cmUsIG11dHVhbGx5LXN1cHBvcnRlZCBrZXJuZWwgdmVyc2lvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gaGVscCB5b3UgdXNlIHlvdXIgb3duIHNvdXJjZXMsIHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGEKKyAgICAgICAgICAgIGxpbnV4LXlvY3RvIGN1c3RvbSByZWNpcGUKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+bGludXgteW9jdG8tY3VzdG9tLmJiPC9maWxlbmFtZT4pIHRoYXQgdXNlcworICAgICAgICAgICAgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiBzb3VyY2VzCisgICAgICAgICAgICBhbmQgdGhlIFlvY3RvIFByb2plY3QgTGludXgga2VybmVsIHRvb2xzIGZvciBtYW5hZ2luZworICAgICAgICAgICAga2VybmVsIE1ldGFkYXRhLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoaXMgcmVjaXBlIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBvZiB0aGUKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz5Tb3VyY2UgUmVwb3NpdG9yeTwvdWxpbms+CisgICAgICAgICAgICBhdDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KKyAgICAgcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS5iYgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGJhc2ljIHN0ZXBzIHlvdSBjYW4gdXNlIHRvIHdvcmsgd2l0aCB5b3VyIG93biBzb3VyY2VzOgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db3B5IHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tY3VzdG9tLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHRvIHlvdXIgbGF5ZXIgYW5kIGdpdmUgaXQgYSBtZWFuaW5nZnVsIG5hbWUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIHNob3VsZCBpbmNsdWRlIHRoZSB2ZXJzaW9uIG9mIHRoZSBMaW51eCBrZXJuZWwgeW91CisgICAgICAgICAgICAgICAgICAgIGFyZSB1c2luZyAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tbXlwcm9qZWN0XzMuMTkuYmI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgd2hlcmUgIjMuMTkiIGlzIHRoZSBiYXNlIHZlcnNpb24gb2YgdGhlIExpbnV4IGtlcm5lbAorICAgICAgICAgICAgICAgICAgICB3aXRoIHdoaWNoIHlvdSB3b3VsZCBiZSB3b3JraW5nKS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW4gdGhlIHNhbWUgZGlyZWN0b3J5IGluc2lkZSB5b3VyIGxheWVyLAorICAgICAgICAgICAgICAgICAgICBjcmVhdGUgYSBtYXRjaGluZyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgdG8gc3RvcmUgeW91ciBwYXRjaGVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by1teXByb2plY3Q8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWtlIHN1cmUgeW91IGhhdmUgZWl0aGVyIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgb3IgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tY3VzdG9tLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBoYXZlIGEgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gcnVuIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBtYWtlIGRlZmNvbmZpZworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFmdGVyIHJ1bm5pbmcgdGhlIGNvbW1hbmQsIGNvcHkgdGhlIHJlc3VsdGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYXMgImRlZmNvbmZpZyIgYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZW4gYWRkIGl0IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSByZWNpcGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5SdW5uaW5nIHRoZSA8ZmlsZW5hbWU+bWFrZSBkZWZjb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHJlc3VsdHMgaW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgeW91cgorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgYXMgZGVmaW5lZCBieSB5b3VyIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgbm8gZ3VhcmFudGVlIGV4aXN0cyB0aGF0IHRoaXMgY29uZmlndXJhdGlvbiBpcworICAgICAgICAgICAgICAgICAgICB2YWxpZCBmb3IgeW91ciB1c2UgY2FzZSwgb3IgdGhhdCB5b3VyIGJvYXJkIHdpbGwgZXZlbiBib290LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHBhcnRpY3VsYXJseSB0cnVlIGZvciBub24teDg2IGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSBub24teDg2IDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlcywgeW91CisgICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gYmUgbW9yZSBzcGVjaWZpYyBhbmQgZmluZCBvbmUgdGhhdCBtYXRjaGVzIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgYm9hcmQgKGkuZS4gZm9yIGFybSwgeW91IGxvb2sgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFyY2gvYXJtL2NvbmZpZ3M8L2ZpbGVuYW1lPiBhbmQgdXNlIHRoZSBvbmUgdGhhdAorICAgICAgICAgICAgICAgICAgICBpcyB0aGUgYmVzdCBzdGFydGluZyBwb2ludCBmb3IgeW91ciBib2FyZCkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FZGl0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGluIHlvdXIgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGFzIGFwcHJvcHJpYXRlIGZvciB5b3VyIHByb2plY3Q6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzaG91bGQgc3BlY2lmeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgR2l0IHJlcG9zaXRvcnkgdGhhdCB1c2VzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIEdpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoZXIgcHJvdG9jb2xzIChpLmUuIDxmaWxlbmFtZT5maWxlPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+aHR0cDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gdmFyaWFibGUgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxzbyBzcGVjaWZ5IGVpdGhlciBhIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgb3Igc29tZSBjb25maWd1cmF0aW9uIGZyYWdtZW50IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBza2VsZXRvbiByZWNpcGUgcHJvdmlkZXMgYW4gZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gYXMgYSBzeW50YXggcmVmZXJlbmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSU5VWF9WRVJTSU9OJz48ZmlsZW5hbWU+TElOVVhfVkVSU0lPTjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIExpbnV4IGtlcm5lbCB2ZXJzaW9uIHlvdSBhcmUgdXNpbmcgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMy4xOSIpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSU5VWF9WRVJTSU9OX0VYVEVOU0lPTic+PGZpbGVuYW1lPkxJTlVYX1ZFUlNJT05fRVhURU5TSU9OPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgTGludXgga2VybmVsIDxmaWxlbmFtZT5DT05GSUdfTE9DQUxWRVJTSU9OPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIGNvbXBpbGVkIGludG8gdGhlIHJlc3VsdGluZyBrZXJuZWwgYW5kIHZpc2libGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSA8ZmlsZW5hbWU+dW5hbWU8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb21taXQgSUQgZnJvbSB3aGljaCB5b3Ugd2FudCB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJlYXQgdGhpcyB2YXJpYWJsZSB0aGUgc2FtZSBhcyB5b3Ugd291bGQgaW4gYW55IG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY3JlbWVudCB0aGUgdmFyaWFibGUgdG8gaW5kaWNhdGUgdG8gdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0aGF0IHRoZSByZWNpcGUgaGFzIGNoYW5nZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+IGFzc2lnbm1lbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBpY2FsbHkgYWRlcXVhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY29tYmluZXMgdGhlIDxmaWxlbmFtZT5MSU5VWF9WRVJTSU9OPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBTb3VyY2UgQ29udHJvbCBNYW5hZ2VyIChTQ00pIHJldmlzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgZGVyaXZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNQVic+PGZpbGVuYW1lPlNSQ1BWPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb21iaW5lZCByZXN1bHRzIGFyZSBhIHN0cmluZyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgMy4xOS4xMStnaXQxKzY4YTYzNWJmOGRmYjY0YjAyMjYzYzFhYzgwYzk0ODY0N2NjNzZkNWZfMSsyMThiZDhkMjAyMmI5ODUyYzYwZDMyZjBkNzcwOTMxZTNjZjM0M2UyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoaWxlIGxlbmd0aHksIHRoZSBleHRyYSB2ZXJib3NpdHkgaW4gPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwcyBlbnN1cmUgeW91IGFyZSB1c2luZyB0aGUgZXhhY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzIGZyb20gd2hpY2ggeW91IGludGVuZCB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ09NUEFUSUJMRV9NQUNISU5FJz48ZmlsZW5hbWU+Q09NUEFUSUJMRV9NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgdGhlIG1hY2hpbmVzIHN1cHBvcnRlZCBieSB5b3VyIG5ldyByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpbiB0aGUgZXhhbXBsZSByZWNpcGUgaXMgc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgZGVmYXVsdCB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IHRoZSBlbXB0eSBzdHJpbmcsICIoXiQpIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRlZmF1bHQgc2V0dGluZyB0cmlnZ2VycyBhbiBleHBsaWNpdCBidWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgY2hhbmdlIGl0IHRvIG1hdGNoIGEgbGlzdCBvZiB0aGUgbWFjaGluZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHlvdXIgbmV3IHJlY2lwZSBzdXBwb3J0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdG8gc3VwcG9ydCB0aGUgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+cWVtdXg4Ni02NDwvZmlsZW5hbWU+IG1hY2hpbmVzLCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDT01QQVRJQkxFX01BQ0hJTkUgPSAicWVtdXg4NnxxZW11eDg2LTY0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlByb3ZpZGUgZnVydGhlciBjdXN0b21pemF0aW9ucyB0byB5b3VyIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBhcyBuZWVkZWQganVzdCBhcyB5b3Ugd291bGQgY3VzdG9taXplIGFuIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgICAgIGxpbnV4LXlvY3RvIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nbW9kaWZ5aW5nLWFuLWV4aXN0aW5nLXJlY2lwZSc+TW9kaWZ5aW5nCisgICAgICAgICAgICAgICAgICAgIGFuIEV4aXN0aW5nIFJlY2lwZTwvbGluaz4iIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd29ya2luZy13aXRoLW91dC1vZi10cmVlLW1vZHVsZXMnPgorICAgICAgICA8dGl0bGU+V29ya2luZyB3aXRoIE91dC1vZi1UcmVlIE1vZHVsZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBzdGVwcyB0byBidWlsZCBvdXQtb2YtdHJlZSBtb2R1bGVzIG9uCisgICAgICAgICAgICB5b3VyIHRhcmdldCBhbmQgZGVzY3JpYmVzIGhvdyB0byBpbmNvcnBvcmF0ZSBvdXQtb2YtdHJlZSBtb2R1bGVzCisgICAgICAgICAgICBpbiB0aGUgYnVpbGQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGRpbmctb3V0LW9mLXRyZWUtbW9kdWxlcy1vbi10aGUtdGFyZ2V0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5CdWlsZGluZyBPdXQtb2YtVHJlZSBNb2R1bGVzIG9uIHRoZSBUYXJnZXQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGlsZSB0aGUgdHJhZGl0aW9uYWwgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBtb2RlbCB3b3VsZCBiZQorICAgICAgICAgICAgICAgIHRvIGluY2x1ZGUga2VybmVsIG1vZHVsZXMgYXMgcGFydCBvZiB0aGUgbm9ybWFsIGJ1aWxkCisgICAgICAgICAgICAgICAgcHJvY2VzcywgeW91IG1pZ2h0IGZpbmQgaXQgdXNlZnVsIHRvIGJ1aWxkIG1vZHVsZXMgb24gdGhlCisgICAgICAgICAgICAgICAgdGFyZ2V0LgorICAgICAgICAgICAgICAgIFRoaXMgY291bGQgYmUgdGhlIGNhc2UgaWYgeW91ciB0YXJnZXQgc3lzdGVtIGlzIGNhcGFibGUKKyAgICAgICAgICAgICAgICBhbmQgcG93ZXJmdWwgZW5vdWdoIHRvIGhhbmRsZSB0aGUgbmVjZXNzYXJ5IGNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgIEJlZm9yZSBkZWNpZGluZyB0byBidWlsZCBvbiB5b3VyIHRhcmdldCwgaG93ZXZlciwgeW91IHNob3VsZAorICAgICAgICAgICAgICAgIGNvbnNpZGVyIHRoZSBiZW5lZml0cyBvZiB1c2luZyBhIHByb3BlciBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGZyb20geW91ciBidWlsZCBob3N0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGJ1aWxkIG91dC1vZi10cmVlIG1vZHVsZXMgb24KKyAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0LCB0aGVyZSBhcmUgc29tZSBzdGVwcyB5b3UgbmVlZCB0byB0YWtlCisgICAgICAgICAgICAgICAgb24gdGhlIHRhcmdldCB0aGF0IGlzIHJ1bm5pbmcgeW91ciBTREsgaW1hZ2UuCisgICAgICAgICAgICAgICAgQnJpZWZseSwgdGhlIDxmaWxlbmFtZT5rZXJuZWwtZGV2PC9maWxlbmFtZT4gcGFja2FnZQorICAgICAgICAgICAgICAgIGlzIGluc3RhbGxlZCBieSBkZWZhdWx0IG9uIGFsbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLnNkazwvZmlsZW5hbWU+IGltYWdlcyBhbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmtlcm5lbC1kZXZzcmM8L2ZpbGVuYW1lPiBwYWNrYWdlIGlzIGluc3RhbGxlZAorICAgICAgICAgICAgICAgIG9uIG1hbnkgb2YgdGhlIDxmaWxlbmFtZT4qLnNkazwvZmlsZW5hbWU+IGltYWdlcy4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgbmVlZCB0byBjcmVhdGUgc29tZSBzY3JpcHRzIHByaW9yIHRvCisgICAgICAgICAgICAgICAgYXR0ZW1wdGluZyB0byBidWlsZCB0aGUgb3V0LW9mLXRyZWUgbW9kdWxlcyBvbiB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgdGhhdCBpcyBydW5uaW5nIHRoYXQgaW1hZ2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFByaW9yIHRvIGF0dGVtcHRpbmcgdG8gYnVpbGQgdGhlIG91dC1vZi10cmVlIG1vZHVsZXMsCisgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gYmUgb24gdGhlIHRhcmdldCBhcyByb290IGFuZCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgIGNoYW5nZSB0byB0aGUgPGZpbGVuYW1lPi91c3Ivc3JjL2tlcm5lbDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBOZXh0LCA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IHRoZSBzY3JpcHRzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBjZCAvdXNyL3NyYy9rZXJuZWwKKyAgICAgIyBtYWtlIHNjcmlwdHMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQmVjYXVzZSBhbGwgU0RLIGltYWdlIHJlY2lwZXMgaW5jbHVkZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXYtcGtnczwvZmlsZW5hbWU+LCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLWRldjwvZmlsZW5hbWU+IHBhY2thZ2VzIHdpbGwgYmUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgYXMgcGFydCBvZiB0aGUgU0RLIGltYWdlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLWRldnNyYzwvZmlsZW5hbWU+IHBhY2thZ2VzIHdpbGwgYmUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgYXMgcGFydCBvZiBhcHBsaWNhYmxlIFNESyBpbWFnZXMuCisgICAgICAgICAgICAgICAgVGhlIFNESyB1c2VzIHRoZSBzY3JpcHRzIHdoZW4gYnVpbGRpbmcgb3V0LW9mLXRyZWUKKyAgICAgICAgICAgICAgICBtb2R1bGVzLgorICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgc3dpdGNoZWQgdG8gdGhhdCBkaXJlY3RvcnkgYW5kIGNyZWF0ZWQgdGhlCisgICAgICAgICAgICAgICAgc2NyaXB0cywgeW91IHNob3VsZCBiZSBhYmxlIHRvIGJ1aWxkIHlvdXIgb3V0LW9mLXRyZWUgbW9kdWxlcworICAgICAgICAgICAgICAgIG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW5jb3Jwb3JhdGluZy1vdXQtb2YtdHJlZS1tb2R1bGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbmNvcnBvcmF0aW5nIE91dC1vZi1UcmVlIE1vZHVsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGlsZSBpdCBpcyBhbHdheXMgcHJlZmVyYWJsZSB0byB3b3JrIHdpdGggc291cmNlcyBpbnRlZ3JhdGVkCisgICAgICAgICAgICAgICAgaW50byB0aGUgTGludXgga2VybmVsIHNvdXJjZXMsIGlmIHlvdSBuZWVkIGFuIGV4dGVybmFsIGtlcm5lbAorICAgICAgICAgICAgICAgIG1vZHVsZSwgdGhlIDxmaWxlbmFtZT5oZWxsby1tb2QuYmI8L2ZpbGVuYW1lPiByZWNpcGUgaXMKKyAgICAgICAgICAgICAgICBhdmFpbGFibGUgYXMgYSB0ZW1wbGF0ZSBmcm9tIHdoaWNoIHlvdSBjYW4gY3JlYXRlIHlvdXIKKyAgICAgICAgICAgICAgICBvd24gb3V0LW9mLXRyZWUgTGludXgga2VybmVsIG1vZHVsZSByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgdGVtcGxhdGUgcmVjaXBlIGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOyc+U291cmNlIFJlcG9zaXRvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KKyAgICAgcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2hlbGxvLW1vZC9oZWxsby1tb2RfMC4xLmJiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBnZXQgc3RhcnRlZCwgY29weSB0aGlzIHJlY2lwZSB0byB5b3VyIGxheWVyIGFuZCBnaXZlIGl0IGEKKyAgICAgICAgICAgICAgICBtZWFuaW5nZnVsIG5hbWUgKGUuZy4gPGZpbGVuYW1lPm15bW9kdWxlXzEuMC5iYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICBJbiB0aGUgc2FtZSBkaXJlY3RvcnksIGNyZWF0ZSBhIG5ldyBkaXJlY3RvcnkgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPiB3aGVyZSB5b3UgY2FuIHN0b3JlIGFueSBzb3VyY2UgZmlsZXMsCisgICAgICAgICAgICAgICAgcGF0Y2hlcywgb3Igb3RoZXIgZmlsZXMgbmVjZXNzYXJ5IGZvciBidWlsZGluZworICAgICAgICAgICAgICAgIHRoZSBtb2R1bGUgdGhhdCBkbyBub3QgY29tZSB3aXRoIHRoZSBzb3VyY2VzLgorICAgICAgICAgICAgICAgIEZpbmFsbHksIHVwZGF0ZSB0aGUgcmVjaXBlIGFzIG5lZWRlZCBmb3IgdGhlIG1vZHVsZS4KKyAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHlvdSB3aWxsIG5lZWQgdG8gc2V0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItREVTQ1JJUFRJT04nPjxmaWxlbmFtZT5ERVNDUklQVElPTjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFKjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIGJ1aWxkIHN5c3RlbSB1c2VkIGJ5IHRoZSBtb2R1bGUgc291cmNlcywKKyAgICAgICAgICAgICAgICB5b3UgbWlnaHQgbmVlZCB0byBtYWtlIHNvbWUgYWRqdXN0bWVudHMuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgdHlwaWNhbCBtb2R1bGUgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBsb29rcyBtdWNoIGxpa2UgdGhlIG9uZSBwcm92aWRlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5oZWxsby1tb2Q8L2ZpbGVuYW1lPiB0ZW1wbGF0ZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG9iai1tIDo9IGhlbGxvLm8KKworICAgICBTUkMgOj0gJChzaGVsbCBwd2QpCisKKyAgICAgYWxsOgorICAgICAgICAgJChNQUtFKSAtQyAkKEtFUk5FTF9TUkMpIE09JChTUkMpCisKKyAgICAgbW9kdWxlc19pbnN0YWxsOgorICAgICAgICAgJChNQUtFKSAtQyAkKEtFUk5FTF9TUkMpIE09JChTUkMpIG1vZHVsZXNfaW5zdGFsbAorICAgICAuLi4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBpbXBvcnRhbnQgcG9pbnQgdG8gbm90ZSBoZXJlIGlzIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LRVJORUxfU1JDJz48ZmlsZW5hbWU+S0VSTkVMX1NSQzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1tb2R1bGUnPjxmaWxlbmFtZT5tb2R1bGU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgY2xhc3Mgc2V0cyB0aGlzIHZhcmlhYmxlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS0VSTkVMX1BBVEgnPjxmaWxlbmFtZT5LRVJORUxfUEFUSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TVEFHSU5HX0tFUk5FTF9ESVInPjxmaWxlbmFtZT5TVEFHSU5HX0tFUk5FTF9ESVI8L2ZpbGVuYW1lPjwvdWxpbms+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgd2l0aCB0aGUgbmVjZXNzYXJ5IExpbnV4IGtlcm5lbCBidWlsZCBpbmZvcm1hdGlvbiB0byBidWlsZAorICAgICAgICAgICAgICAgIG1vZHVsZXMuCisgICAgICAgICAgICAgICAgSWYgeW91ciBtb2R1bGUgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4gdXNlcyBhIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB5b3UgbWlnaHQgd2FudCB0byBvdmVycmlkZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGUoKTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBzdGVwLCBvciBjcmVhdGUgYSBwYXRjaCB0bworICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiB0byB3b3JrIHdpdGggdGhlIG1vcmUgdHlwaWNhbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LRVJORUxfU1JDPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX1BBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFmdGVyIHlvdSBoYXZlIHByZXBhcmVkIHlvdXIgcmVjaXBlLCB5b3Ugd2lsbCBsaWtlbHkgd2FudCB0bworICAgICAgICAgICAgICAgIGluY2x1ZGUgdGhlIG1vZHVsZSBpbiB5b3VyIGltYWdlcy4KKyAgICAgICAgICAgICAgICBUbyBkbyB0aGlzLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGluCisgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBhbmQgc2V0IG9uZSBvZiB0aGVtCisgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVseSBmb3IgeW91ciBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTJz48ZmlsZW5hbWU+TUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9FWFRSQV9SREVQRU5EUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRVhUUkFfUkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTJz48ZmlsZW5hbWU+TUFDSElORV9FWFRSQV9SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBNb2R1bGVzIGFyZSBvZnRlbiBub3QgcmVxdWlyZWQgZm9yIGJvb3QgYW5kIGNhbiBiZSBleGNsdWRlZCBmcm9tCisgICAgICAgICAgICAgICAgY2VydGFpbiBidWlsZCBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGFsbG93cyBmb3IgdGhlIG1vc3QgZmxleGliaWxpdHk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTICs9ICJrZXJuZWwtbW9kdWxlLW15bW9kdWxlIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgdmFsdWUgaXMgZGVyaXZlZCBieSBhcHBlbmRpbmcgdGhlIG1vZHVsZSBmaWxlbmFtZSB3aXRob3V0CisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT4ua288L2ZpbGVuYW1lPiBleHRlbnNpb24gdG8gdGhlIHN0cmluZworICAgICAgICAgICAgICAgICJrZXJuZWwtbW9kdWxlLSIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIHZhcmlhYmxlIGlzCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kIG5vdCBhCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUsIHRoZSBidWlsZCB3aWxsIG5vdCBmYWlsIGlmIHRoaXMgbW9kdWxlIGlzIG5vdAorICAgICAgICAgICAgICAgIGF2YWlsYWJsZSB0byBpbmNsdWRlIGluIHRoZSBpbWFnZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworCisgICAgPHNlY3Rpb24gaWQ9J2luc3BlY3RpbmctY2hhbmdlcy1hbmQtY29tbWl0cyc+CisgICAgICAgIDx0aXRsZT5JbnNwZWN0aW5nIENoYW5nZXMgYW5kIENvbW1pdHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBjb21tb24gcXVlc3Rpb24gd2hlbiB3b3JraW5nIHdpdGggYSBrZXJuZWwgaXM6CisgICAgICAgICAgICAiV2hhdCBjaGFuZ2VzIGhhdmUgYmVlbiBhcHBsaWVkIHRvIHRoaXMgdHJlZT8iCisgICAgICAgICAgICBSYXRoZXIgdGhhbiB1c2luZyAiZ3JlcCIgYWNyb3NzIGRpcmVjdG9yaWVzIHRvIHNlZSB3aGF0IGhhcworICAgICAgICAgICAgY2hhbmdlZCwgeW91IGNhbiB1c2UgR2l0IHRvIGluc3BlY3Qgb3Igc2VhcmNoIHRoZSBrZXJuZWwgdHJlZS4KKyAgICAgICAgICAgIFVzaW5nIEdpdCBpcyBhbiBlZmZpY2llbnQgd2F5IHRvIHNlZSB3aGF0IGhhcyBjaGFuZ2VkIGluIHRoZSB0cmVlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3doYXQtY2hhbmdlZC1pbi1hLWtlcm5lbCc+CisgICAgICAgICAgICA8dGl0bGU+V2hhdCBDaGFuZ2VkIGluIGEgS2VybmVsPzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgYSBmZXcgZXhhbXBsZXMgdGhhdCBzaG93IGhvdyB0byB1c2UgR2l0CisgICAgICAgICAgICAgICAgY29tbWFuZHMgdG8gZXhhbWluZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIFRoZXNlIGV4YW1wbGVzIGFyZSBieSBubyBtZWFucyB0aGUgb25seSB3YXkgdG8gc2VlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMsIHVubGVzcyB5b3UgcHJvdmlkZSBhIGNvbW1pdAorICAgICAgICAgICAgICAgICAgICByYW5nZSwgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiBoaXN0b3J5IGlzIGJsZW5kZWQKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBZb2N0byBQcm9qZWN0IGtlcm5lbCBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZvcm0gcmFuZ2VzIGJ5IHVzaW5nIGJyYW5jaCBuYW1lcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgdHJlZSBhcyB0aGUgdXBwZXIgYW5kIGxvd2VyIGNvbW1pdCBtYXJrZXJzIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIEdpdCBjb21tYW5kcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIGJyYW5jaCBuYW1lcyB0aHJvdWdoIHRoZSB3ZWIgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBZb2N0byBQcm9qZWN0IHNvdXJjZSByZXBvc2l0b3JpZXMgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQuY2dpJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgVG8gc2VlIGEgZnVsbCByYW5nZSBvZiB0aGUgY2hhbmdlcywgdXNlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgd2hhdGNoYW5nZWQ8L2ZpbGVuYW1lPiBjb21tYW5kIGFuZCBzcGVjaWZ5IGEKKyAgICAgICAgICAgICAgICBjb21taXQgcmFuZ2UgZm9yIHRoZSBicmFuY2gKKyAgICAgICAgICAgICAgICAoPHJlcGxhY2VhYmxlPmNvbW1pdDwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi4uPC9maWxlbmFtZT48cmVwbGFjZWFibGU+Y29tbWl0PC9yZXBsYWNlYWJsZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBsb29rcyBhdCB3aGF0IGhhcyBjaGFuZ2VkIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5lbWVubG93PC9maWxlbmFtZT4gYnJhbmNoIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4ga2VybmVsLgorICAgICAgICAgICAgICAgIFRoZSBsb3dlciBjb21taXQgcmFuZ2UgaXMgdGhlIGNvbW1pdCBhc3NvY2lhdGVkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN0YW5kYXJkL2Jhc2U8L2ZpbGVuYW1lPiBicmFuY2gsIHdoaWxlCisgICAgICAgICAgICAgICAgdGhlIHVwcGVyIGNvbW1pdCByYW5nZSBpcyB0aGUgY29tbWl0IGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RhbmRhcmQvZW1lbmxvdzwvZmlsZW5hbWU+IGJyYW5jaC4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IHdoYXRjaGFuZ2VkIG9yaWdpbi9zdGFuZGFyZC9iYXNlLi5vcmlnaW4vc3RhbmRhcmQvZW1lbmxvdworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gc2VlIHNob3J0LCBvbmUgbGluZSBzdW1tYXJpZXMgb2YgY2hhbmdlcyB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBsb2c8L2ZpbGVuYW1lPiBjb21tYW5kOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgbG9nIC0tb25lbGluZSBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGlzIGNvbW1hbmQgdG8gc2VlIGNvZGUgZGlmZmVyZW5jZXMgZm9yIHRoZSBjaGFuZ2VzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgZGlmZiBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGlzIGNvbW1hbmQgdG8gc2VlIHRoZSBjb21taXQgbG9nIG1lc3NhZ2VzIGFuZCB0aGUKKyAgICAgICAgICAgICAgICB0ZXh0IGRpZmZlcmVuY2VzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgc2hvdyBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGlzIGNvbW1hbmQgdG8gY3JlYXRlIGluZGl2aWR1YWwgcGF0Y2hlcyBmb3IKKyAgICAgICAgICAgICAgICBlYWNoIGNoYW5nZS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB0aGF0IGNyZWF0ZXMgcGF0Y2ggZmlsZXMgZm9yIGVhY2gKKyAgICAgICAgICAgICAgICBjb21taXQgYW5kIHBsYWNlcyB0aGVtIGluIHlvdXIgPGZpbGVuYW1lPkRvY3VtZW50czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgZm9ybWF0LXBhdGNoIC1vICRIT01FL0RvY3VtZW50cyBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2hvd2luZy1hLXBhcnRpY3VsYXItZmVhdHVyZS1vci1icmFuY2gtY2hhbmdlJz4KKyAgICAgICAgICAgIDx0aXRsZT5TaG93aW5nIGEgUGFydGljdWxhciBGZWF0dXJlIG9yIEJyYW5jaCBDaGFuZ2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUYWdzIGluIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCB0cmVlIGRpdmlkZSBjaGFuZ2VzIGZvcgorICAgICAgICAgICAgICAgIHNpZ25pZmljYW50IGZlYXR1cmVzIG9yIGJyYW5jaGVzLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2l0IHNob3c8L2ZpbGVuYW1lPiZuYnNwOzxyZXBsYWNlYWJsZT50YWc8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgc2hvd3MgY2hhbmdlcyBiYXNlZCBvbiBhIHRhZy4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyA8ZmlsZW5hbWU+c3lzdGVtdGFwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjaGFuZ2VzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgc2hvdyBzeXN0ZW10YXAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBicmFuY2ggLS1jb250YWluczwvZmlsZW5hbWU+Jm5ic3A7PHJlcGxhY2VhYmxlPnRhZzwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgY29tbWFuZCB0byBzaG93IHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gYSBwYXJ0aWN1bGFyIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIHNob3dzIHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN5c3RlbXRhcDwvZmlsZW5hbWU+IGZlYXR1cmU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBicmFuY2ggLS1jb250YWlucyBzeXN0ZW10YXAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtY29uY2VwdHMtYXBweC54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWNvbmNlcHRzLWFwcHgueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOTE3NDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWNvbmNlcHRzLWFwcHgueG1sCkBAIC0wLDAgKzEsMjUzIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8YXBwZW5kaXggaWQ9J2tlcm5lbC1kZXYtY29uY2VwdHMtYXBweCc+Cis8dGl0bGU+QWR2YW5jZWQgS2VybmVsIENvbmNlcHRzPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtYmlnLXBpY3R1cmUnPgorICAgICAgICA8dGl0bGU+WW9jdG8gUHJvamVjdCBLZXJuZWwgRGV2ZWxvcG1lbnQgYW5kIE1haW50ZW5hbmNlPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBLZXJuZWxzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBZb2N0byBQcm9qZWN0LCBsaWtlIG90aGVyIGtlcm5lbHMsIGFyZSBiYXNlZCBvZmYgdGhlIExpbnV4CisgICAgICAgICAgICBrZXJuZWwgcmVsZWFzZXMgZnJvbSA8dWxpbmsgdXJsPSdodHRwOi8vd3d3Lmtlcm5lbC5vcmcnPjwvdWxpbms+LgorICAgICAgICAgICAgQXQgdGhlIGJlZ2lubmluZyBvZiBhIG1ham9yIGRldmVsb3BtZW50IGN5Y2xlLCB0aGUgWW9jdG8gUHJvamVjdCB0ZWFtCisgICAgICAgICAgICBjaG9vc2VzIGl0cyBrZXJuZWwgYmFzZWQgb24gZmFjdG9ycyBzdWNoIGFzIHJlbGVhc2UgdGltaW5nLCB0aGUgYW50aWNpcGF0ZWQgcmVsZWFzZQorICAgICAgICAgICAgdGltaW5nIG9mIGZpbmFsIHVwc3RyZWFtIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gdmVyc2lvbnMsIGFuZCBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICBmZWF0dXJlIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgIFR5cGljYWxseSwgdGhlIGtlcm5lbCBjaG9zZW4gaXMgaW4gdGhlCisgICAgICAgICAgICBmaW5hbCBzdGFnZXMgb2YgZGV2ZWxvcG1lbnQgYnkgdGhlIGNvbW11bml0eS4KKyAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUga2VybmVsIGlzIGluIHRoZSByZWxlYXNlCisgICAgICAgICAgICBjYW5kaWRhdGUgb3IgInJjIiBwaGFzZSBhbmQgbm90IHlldCBhIGZpbmFsIHJlbGVhc2UuCisgICAgICAgICAgICBCdXQsIGJ5IGJlaW5nIGluIHRoZSBmaW5hbCBzdGFnZXMgb2YgZXh0ZXJuYWwgZGV2ZWxvcG1lbnQsIHRoZSB0ZWFtIGtub3dzIHRoYXQgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+IGZpbmFsIHJlbGVhc2Ugd2lsbCBjbGVhcmx5IGJlIHdpdGhpbiB0aGUgZWFybHkgc3RhZ2VzIG9mCisgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCB3aW5kb3cuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGJhbGFuY2UgYWxsb3dzIHRoZSB0ZWFtIHRvIGRlbGl2ZXIgdGhlIG1vc3QgdXAtdG8tZGF0ZSBrZXJuZWwKKyAgICAgICAgICAgIHBvc3NpYmxlLCB3aGlsZSBzdGlsbCBlbnN1cmluZyB0aGF0IHRoZSB0ZWFtIGhhcyBhIHN0YWJsZSBvZmZpY2lhbCByZWxlYXNlIGZvcgorICAgICAgICAgICAgdGhlIGJhc2VsaW5lIExpbnV4IGtlcm5lbCB2ZXJzaW9uLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHVsdGltYXRlIHNvdXJjZSBmb3Iga2VybmVscyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgWW9jdG8gUHJvamVjdCBhcmUgcmVsZWFzZWQga2VybmVscworICAgICAgICAgICAgZnJvbSA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gYSBmb3VuZGF0aW9uYWwga2VybmVsIGZyb20gPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiwgdGhlCisgICAgICAgICAgICBrZXJuZWxzIGF2YWlsYWJsZSBjb250YWluIGEgbWl4IG9mIGltcG9ydGFudCBuZXcgbWFpbmxpbmUKKyAgICAgICAgICAgIGRldmVsb3BtZW50cywgbm9uLW1haW5saW5lIGRldmVsb3BtZW50cyAod2hlbiB0aGVyZSBpcyBubyBhbHRlcm5hdGl2ZSksCisgICAgICAgICAgICBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgZGV2ZWxvcG1lbnRzLAorICAgICAgICAgICAgYW5kIGN1c3RvbSBmZWF0dXJlcy4KKyAgICAgICAgICAgIFRoZXNlIGFkZGl0aW9ucyByZXN1bHQgaW4gYSBjb21tZXJjaWFsbHkgcmVsZWFzZWQgWW9jdG8gUHJvamVjdCBMaW51eCBrZXJuZWwgdGhhdCBjYXRlcnMKKyAgICAgICAgICAgIHRvIHNwZWNpZmljIGVtYmVkZGVkIGRlc2lnbmVyIG5lZWRzIGZvciB0YXJnZXRlZCBoYXJkd2FyZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9uY2UgYSBrZXJuZWwgaXMgb2ZmaWNpYWxseSByZWxlYXNlZCwgdGhlIFlvY3RvIFByb2plY3QgdGVhbSBnb2VzIGludG8KKyAgICAgICAgICAgIHRoZWlyIG5leHQgZGV2ZWxvcG1lbnQgY3ljbGUsIG9yIHVwd2FyZCByZXZpc2lvbiAodXByZXYpIGN5Y2xlLCB3aGlsZSBzdGlsbAorICAgICAgICAgICAgY29udGludWluZyBtYWludGVuYW5jZSBvbiB0aGUgcmVsZWFzZWQga2VybmVsLgorICAgICAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgbW9zdCBzdXN0YWluYWJsZSBhbmQgc3RhYmxlIHdheQorICAgICAgICAgICAgdG8gaW5jbHVkZSBmZWF0dXJlIGRldmVsb3BtZW50IHVwc3RyZWFtIGlzIHRocm91Z2ggYSBrZXJuZWwgdXByZXYgcHJvY2Vzcy4KKyAgICAgICAgICAgIEJhY2stcG9ydGluZyBodW5kcmVkcyBvZiBpbmRpdmlkdWFsIGZpeGVzIGFuZCBtaW5vciBmZWF0dXJlcyBmcm9tIHZhcmlvdXMKKyAgICAgICAgICAgIGtlcm5lbCB2ZXJzaW9ucyBpcyBub3Qgc3VzdGFpbmFibGUgYW5kIGNhbiBlYXNpbHkgY29tcHJvbWlzZSBxdWFsaXR5LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRHVyaW5nIHRoZSB1cHJldiBjeWNsZSwgdGhlIFlvY3RvIFByb2plY3QgdGVhbSB1c2VzIGFuIG9uZ29pbmcgYW5hbHlzaXMgb2YKKyAgICAgICAgICAgIGtlcm5lbCBkZXZlbG9wbWVudCwgQlNQIHN1cHBvcnQsIGFuZCByZWxlYXNlIHRpbWluZyB0byBzZWxlY3QgdGhlIGJlc3QKKyAgICAgICAgICAgIHBvc3NpYmxlIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gdmVyc2lvbi4KKyAgICAgICAgICAgIFRoZSB0ZWFtIGNvbnRpbnVhbGx5IG1vbml0b3JzIGNvbW11bml0eSBrZXJuZWwKKyAgICAgICAgICAgIGRldmVsb3BtZW50IHRvIGxvb2sgZm9yIHNpZ25pZmljYW50IGZlYXR1cmVzIG9mIGludGVyZXN0LgorICAgICAgICAgICAgVGhlIHRlYW0gZG9lcyBjb25zaWRlciBiYWNrLXBvcnRpbmcgbGFyZ2UgZmVhdHVyZXMgaWYgdGhleSBoYXZlIGEgc2lnbmlmaWNhbnQgYWR2YW50YWdlLgorICAgICAgICAgICAgVXNlciBvciBjb21tdW5pdHkgZGVtYW5kIGNhbiBhbHNvIHRyaWdnZXIgYSBiYWNrLXBvcnQgb3IgY3JlYXRpb24gb2YgbmV3CisgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGluIHRoZSBZb2N0byBQcm9qZWN0IGJhc2VsaW5lIGtlcm5lbCBkdXJpbmcgdGhlIHVwcmV2IGN5Y2xlLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgR2VuZXJhbGx5IHNwZWFraW5nLCBldmVyeSBuZXcga2VybmVsIGJvdGggYWRkcyBmZWF0dXJlcyBhbmQgaW50cm9kdWNlcyBuZXcgYnVncy4KKyAgICAgICAgICAgIFRoZXNlIGNvbnNlcXVlbmNlcyBhcmUgdGhlIGJhc2ljIHByb3BlcnRpZXMgb2YgdXBzdHJlYW0ga2VybmVsIGRldmVsb3BtZW50IGFuZCBhcmUKKyAgICAgICAgICAgIG1hbmFnZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgdGVhbSdzIGtlcm5lbCBzdHJhdGVneS4KKyAgICAgICAgICAgIEl0IGlzIHRoZSBZb2N0byBQcm9qZWN0IHRlYW0ncyBwb2xpY3kgdG8gbm90IGJhY2stcG9ydCBtaW5vciBmZWF0dXJlcyB0byB0aGUgcmVsZWFzZWQga2VybmVsLgorICAgICAgICAgICAgVGhleSBvbmx5IGNvbnNpZGVyIGJhY2stcG9ydGluZyBzaWduaWZpY2FudCB0ZWNobm9sb2dpY2FsIGp1bXBzIC0gYW5kLCB0aGF0IGlzIGRvbmUKKyAgICAgICAgICAgIGFmdGVyIGEgY29tcGxldGUgZ2FwIGFuYWx5c2lzLgorICAgICAgICAgICAgVGhlIHJlYXNvbiBmb3IgdGhpcyBwb2xpY3kgaXMgdGhhdCBiYWNrLXBvcnRpbmcgYW55IHNtYWxsIHRvIG1lZGl1bSBzaXplZCBjaGFuZ2UKKyAgICAgICAgICAgIGZyb20gYW4gZXZvbHZpbmcga2VybmVsIGNhbiBlYXNpbHkgY3JlYXRlIG1pc21hdGNoZXMsIGluY29tcGF0aWJpbGl0aWVzIGFuZCB2ZXJ5CisgICAgICAgICAgICBzdWJ0bGUgZXJyb3JzLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlc2UgcG9saWNpZXMgcmVzdWx0IGluIGJvdGggYSBzdGFibGUgYW5kIGEgY3V0dGluZworICAgICAgICAgICAgZWRnZSBrZXJuZWwgdGhhdCBtaXhlcyBmb3J3YXJkIHBvcnRzIG9mIGV4aXN0aW5nIGZlYXR1cmVzIGFuZCBzaWduaWZpY2FudCBhbmQgY3JpdGljYWwKKyAgICAgICAgICAgIG5ldyBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgRm9yd2FyZCBwb3J0aW5nIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGtlcm5lbHMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIFlvY3RvIFByb2plY3Qga2VybmVsCisgICAgICAgICAgICBjYW4gYmUgdGhvdWdodCBvZiBhcyBhICJtaWNybyB1cHJldi4iCisgICAgICAgICAgICBUaGUgbWFueSDigJxtaWNybyB1cHJldnPigJ0gcHJvZHVjZSBhIGtlcm5lbCB2ZXJzaW9uIHdpdGggYSBtaXggb2YKKyAgICAgICAgICAgIGltcG9ydGFudCBuZXcgbWFpbmxpbmUsIG5vbi1tYWlubGluZSwgQlNQIGRldmVsb3BtZW50cyBhbmQgZmVhdHVyZSBpbnRlZ3JhdGlvbnMuCisgICAgICAgICAgICBUaGlzIGtlcm5lbCBnaXZlcyBpbnNpZ2h0IGludG8gbmV3IGZlYXR1cmVzIGFuZCBhbGxvd3MgZm9jdXNlZAorICAgICAgICAgICAgYW1vdW50cyBvZiB0ZXN0aW5nIHRvIGJlIGRvbmUgb24gdGhlIGtlcm5lbCwgd2hpY2ggcHJldmVudHMKKyAgICAgICAgICAgIHN1cnByaXNlcyB3aGVuIHNlbGVjdGluZyB0aGUgbmV4dCBtYWpvciB1cHJldi4KKyAgICAgICAgICAgIFRoZSBxdWFsaXR5IG9mIHRoZXNlIGN1dHRpbmcgZWRnZSBrZXJuZWxzIGlzIGV2b2x2aW5nIGFuZCB0aGUga2VybmVscyBhcmUgdXNlZCBpbiBsZWFkaW5nIGVkZ2UKKyAgICAgICAgICAgIGZlYXR1cmUgYW5kIEJTUCBkZXZlbG9wbWVudC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtYXJjaGl0ZWN0dXJlJz4KKyAgICAgICAgPHRpdGxlPktlcm5lbCBBcmNoaXRlY3R1cmU8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUga2VybmVscyBhdmFpbGFibGUgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgYW5kIHByb3ZpZGVzIGluZm9ybWF0aW9uCisgICAgICAgICAgICBvbiB0aGUgbWVjaGFuaXNtcyB1c2VkIHRvIGFjaGlldmUgdGhhdCBhcmNoaXRlY3R1cmUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYXJjaGl0ZWN0dXJlLW92ZXJ2aWV3Jz4KKyAgICAgICAgICAgIDx0aXRsZT5PdmVydmlldzwvdGl0bGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciwgYSBrZXkgZ29hbCBvZiB0aGUgWW9jdG8gUHJvamVjdCBpcyB0byBwcmVzZW50IHRoZQorICAgICAgICAgICAgICAgIGRldmVsb3BlciB3aXRoCisgICAgICAgICAgICAgICAgYSBrZXJuZWwgdGhhdCBoYXMgYSBjbGVhciBhbmQgY29udGludW91cyBoaXN0b3J5IHRoYXQgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4KKyAgICAgICAgICAgICAgICBUaGUgYXJjaGl0ZWN0dXJlIGFuZCBtZWNoYW5pc21zIHVzZWQgYWNoaWV2ZSB0aGF0IGdvYWwgaW4gYSBtYW5uZXIgc2ltaWxhciB0byB0aGUKKyAgICAgICAgICAgICAgICB1cHN0cmVhbSA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiB0aGluayBvZiBhIFlvY3RvIFByb2plY3Qga2VybmVsIGFzIGNvbnNpc3Rpbmcgb2YgYSBiYXNlbGluZSBMaW51eCBrZXJuZWwgd2l0aAorICAgICAgICAgICAgICAgIGFkZGVkIGZlYXR1cmVzIGxvZ2ljYWxseSBzdHJ1Y3R1cmVkIG9uIHRvcCBvZiB0aGUgYmFzZWxpbmUuCisgICAgICAgICAgICAgICAgVGhlIGZlYXR1cmVzIGFyZSB0YWdnZWQgYW5kIG9yZ2FuaXplZCBieSB3YXkgb2YgYSBicmFuY2hpbmcgc3RyYXRlZ3kgaW1wbGVtZW50ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgc291cmNlIGNvZGUgbWFuYWdlciAoU0NNKSBHaXQuCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEdpdCBhcyBhcHBsaWVkIHRvIHRoZSBZb2N0byBQcm9qZWN0LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2dpdCc+R2l0PC91bGluaz4iIHNlY3Rpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcmVzdWx0IGlzIHRoYXQgdGhlIHVzZXIgaGFzIHRoZSBhYmlsaXR5IHRvIHNlZSB0aGUgYWRkZWQgZmVhdHVyZXMgYW5kCisgICAgICAgICAgICAgICAgdGhlIGNvbW1pdHMgdGhhdCBtYWtlIHVwIHRob3NlIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uIHRvIGJlaW5nIGFibGUgdG8gc2VlIGFkZGVkIGZlYXR1cmVzLCB0aGUgdXNlciBjYW4gYWxzbyB2aWV3IHRoZSBoaXN0b3J5IG9mIHdoYXQKKyAgICAgICAgICAgICAgICBtYWRlIHVwIHRoZSBiYXNlbGluZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGlsbHVzdHJhdGlvbiBzaG93cyB0aGUgY29uY2VwdHVhbCBZb2N0byBQcm9qZWN0IGtlcm5lbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWwtYXJjaGl0ZWN0dXJlLW92ZXJ2aWV3LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGU9IjEwMCIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHRoZSBpbGx1c3RyYXRpb24sIHRoZSAiS2VybmVsLm9yZyBCcmFuY2ggUG9pbnQiCisgICAgICAgICAgICAgICAgbWFya3MgdGhlIHNwZWNpZmljIHNwb3QgKG9yIHJlbGVhc2UpIGZyb20KKyAgICAgICAgICAgICAgICB3aGljaCB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgaXMgY3JlYXRlZC4KKyAgICAgICAgICAgICAgICBGcm9tIHRoaXMgcG9pbnQgInVwIiBpbiB0aGUgdHJlZSwgZmVhdHVyZXMgYW5kIGRpZmZlcmVuY2VzIGFyZSBvcmdhbml6ZWQgYW5kIHRhZ2dlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSAiWW9jdG8gUHJvamVjdCBCYXNlbGluZSBLZXJuZWwiIGNvbnRhaW5zIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBjb21tb24gdG8gZXZlcnkga2VybmVsCisgICAgICAgICAgICAgICAgdHlwZSBhbmQgQlNQIHRoYXQgaXMgb3JnYW5pemVkIGZ1cnRoZXIgdXAgdGhlIHRyZWUuCisgICAgICAgICAgICAgICAgUGxhY2luZyB0aGVzZSBjb21tb24gZmVhdHVyZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgdHJlZSB0aGlzIHdheSBtZWFucyBmZWF0dXJlcyBkbyBub3QgaGF2ZSB0byBiZSBkdXBsaWNhdGVkIGFsb25nIGluZGl2aWR1YWwgYnJhbmNoZXMgb2YgdGhlCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRnJvbSB0aGUgWW9jdG8gUHJvamVjdCBCYXNlbGluZSBLZXJuZWwsIGJyYW5jaCBwb2ludHMgcmVwcmVzZW50IHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgICAgICAgICBmb3IgaW5kaXZpZHVhbCBCU1BzIGFzIHdlbGwgYXMgcmVhbC10aW1lIGtlcm5lbHMuCisgICAgICAgICAgICAgICAgVGhlIGlsbHVzdHJhdGlvbiByZXByZXNlbnRzIHRoaXMgdGhyb3VnaCB0aHJlZSBCU1Atc3BlY2lmaWMgYnJhbmNoZXMgYW5kIGEgcmVhbC10aW1lCisgICAgICAgICAgICAgICAga2VybmVsIGJyYW5jaC4KKyAgICAgICAgICAgICAgICBFYWNoIGJyYW5jaCByZXByZXNlbnRzIHNvbWUgdW5pcXVlIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBCU1Agb3IgYSByZWFsLXRpbWUga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlIHN0cnVjdHVyZSwgdGhlIHJlYWwtdGltZSBrZXJuZWwgYnJhbmNoIGhhcyBjb21tb24gZmVhdHVyZXMgZm9yIGFsbAorICAgICAgICAgICAgICAgIHJlYWwtdGltZSBrZXJuZWxzIGFuZCBjb250YWlucworICAgICAgICAgICAgICAgIG1vcmUgYnJhbmNoZXMgZm9yIGluZGl2aWR1YWwgQlNQLXNwZWNpZmljIHJlYWwtdGltZSBrZXJuZWxzLgorICAgICAgICAgICAgICAgIFRoZSBpbGx1c3RyYXRpb24gc2hvd3MgdGhyZWUgYnJhbmNoZXMgYXMgYW4gZXhhbXBsZS4KKyAgICAgICAgICAgICAgICBFYWNoIGJyYW5jaCBwb2ludHMgdGhlIHdheSB0byBzcGVjaWZpYywgdW5pcXVlIGZlYXR1cmVzIGZvciBhIHJlc3BlY3RpdmUgcmVhbC10aW1lCisgICAgICAgICAgICAgICAga2VybmVsIGFzIHRoZXkgYXBwbHkgdG8gYSBnaXZlbiBCU1AuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcmVzdWx0aW5nIHRyZWUgc3RydWN0dXJlIHByZXNlbnRzIGEgY2xlYXIgcGF0aCBvZiBtYXJrZXJzIChvciBicmFuY2hlcykgdG8gdGhlCisgICAgICAgICAgICAgICAgZGV2ZWxvcGVyIHRoYXQsIGZvciBhbGwgcHJhY3RpY2FsIHB1cnBvc2VzLCBpcyB0aGUga2VybmVsIG5lZWRlZCBmb3IgYW55IGdpdmVuIHNldAorICAgICAgICAgICAgICAgIG9mIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdicmFuY2hpbmctYW5kLXdvcmtmbG93Jz4KKyAgICAgICAgICAgIDx0aXRsZT5CcmFuY2hpbmcgU3RyYXRlZ3kgYW5kIFdvcmtmbG93PC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHRlYW0gY3JlYXRlcyBrZXJuZWwgYnJhbmNoZXMgYXQgcG9pbnRzIHdoZXJlIGZ1bmN0aW9uYWxpdHkgaXMKKyAgICAgICAgICAgICAgICBubyBsb25nZXIgc2hhcmVkIGFuZCB0aHVzLCBuZWVkcyB0byBiZSBpc29sYXRlZC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYm9hcmQtc3BlY2lmaWMgaW5jb21wYXRpYmlsaXRpZXMgd291bGQgcmVxdWlyZSBkaWZmZXJlbnQgZnVuY3Rpb25hbGl0eQorICAgICAgICAgICAgICAgIGFuZCB3b3VsZCByZXF1aXJlIGEgYnJhbmNoIHRvIHNlcGFyYXRlIHRoZSBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICBMaWtld2lzZSwgZm9yIHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlcywgdGhlIHNhbWUgYnJhbmNoaW5nIHN0cmF0ZWd5IGlzIHVzZWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGJyYW5jaGluZyBzdHJhdGVneSByZXN1bHRzIGluIGEgdHJlZSB0aGF0IGhhcyBmZWF0dXJlcyBvcmdhbml6ZWQgdG8gYmUgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICBmb3IgcGFydGljdWxhciBmdW5jdGlvbmFsaXR5LCBzaW5nbGUga2VybmVsIHR5cGVzLCBvciBhIHN1YnNldCBvZiBrZXJuZWwgdHlwZXMuCisgICAgICAgICAgICAgICAgVGhpcyBzdHJhdGVneSBhbHNvIHJlc3VsdHMgaW4gbm90IGhhdmluZyB0byBzdG9yZSB0aGUgc2FtZSBmZWF0dXJlIHR3aWNlCisgICAgICAgICAgICAgICAgaW50ZXJuYWxseSBpbiB0aGUgdHJlZS4KKyAgICAgICAgICAgICAgICBSYXRoZXIsIHRoZSBrZXJuZWwgdGVhbSBzdG9yZXMgdGhlIHVuaXF1ZSBkaWZmZXJlbmNlcyByZXF1aXJlZCB0byBhcHBseSB0aGUKKyAgICAgICAgICAgICAgICBmZWF0dXJlIG9udG8gdGhlIGtlcm5lbCB0eXBlIGluIHF1ZXN0aW9uLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIHN0cml2ZXMgdG8gcGxhY2UgZmVhdHVyZXMgaW4gdGhlIHRyZWUgc3VjaCB0aGF0IHRoZXkgY2FuIGJlCisgICAgICAgICAgICAgICAgICAgIHNoYXJlZCBieSBhbGwgYm9hcmRzIGFuZCBrZXJuZWwgdHlwZXMgd2hlcmUgcG9zc2libGUuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGR1cmluZyBkZXZlbG9wbWVudCBjeWNsZXMgb3Igd2hlbiBsYXJnZSBmZWF0dXJlcyBhcmUgbWVyZ2VkLAorICAgICAgICAgICAgICAgICAgICB0aGUgdGVhbSBjYW5ub3QgYWx3YXlzIGZvbGxvdyB0aGlzIHByYWN0aWNlLgorICAgICAgICAgICAgICAgICAgICBJbiB0aG9zZSBjYXNlcywgdGhlIHRlYW0gdXNlcyBpc29sYXRlZCBicmFuY2hlcyB0byBtZXJnZSBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCU1Atc3BlY2lmaWMgY29kZSBhZGRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gYSBzaW1pbGFyIG1hbm5lciB0byBrZXJuZWwtc3BlY2lmaWMgYWRkaXRpb25zLgorICAgICAgICAgICAgICAgIFNvbWUgQlNQcyBvbmx5IG1ha2Ugc2Vuc2UgZ2l2ZW4gY2VydGFpbiBrZXJuZWwgdHlwZXMuCisgICAgICAgICAgICAgICAgU28sIGZvciB0aGVzZSB0eXBlcywgdGhlIHRlYW0gY3JlYXRlcyBicmFuY2hlcyBvZmYgdGhlIGVuZCBvZiB0aGF0IGtlcm5lbCB0eXBlIGZvciBhbGwKKyAgICAgICAgICAgICAgICBvZiB0aGUgQlNQcyB0aGF0IGFyZSBzdXBwb3J0ZWQgb24gdGhhdCBrZXJuZWwgdHlwZS4KKyAgICAgICAgICAgICAgICBGcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiB0aGUgdG9vbHMgdGhhdCBjcmVhdGUgdGhlIEJTUCBicmFuY2gsIHRoZSBCU1AgaXMgcmVhbGx5IG5vCisgICAgICAgICAgICAgICAgZGlmZmVyZW50IHRoYW4gYSBmZWF0dXJlLgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdGhlIHNhbWUgYnJhbmNoaW5nIHN0cmF0ZWd5IGFwcGxpZXMgdG8gQlNQcyBhcyBpdCBkb2VzIHRvIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgIFNvIGFnYWluLCByYXRoZXIgdGhhbiBzdG9yZSB0aGUgQlNQIHR3aWNlLCB0aGUgdGVhbSBvbmx5IHN0b3JlcyB0aGUgdW5pcXVlCisgICAgICAgICAgICAgICAgZGlmZmVyZW5jZXMgZm9yIHRoZSBCU1AgYWNyb3NzIHRoZSBzdXBwb3J0ZWQgbXVsdGlwbGUga2VybmVscy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoaWxlIHRoaXMgc3RyYXRlZ3kgY2FuIHJlc3VsdCBpbiBhIHRyZWUgd2l0aCBhIHNpZ25pZmljYW50IG51bWJlciBvZiBicmFuY2hlcywgaXQgaXMKKyAgICAgICAgICAgICAgICBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB0aGF0IGZyb20gdGhlIGRldmVsb3BlcidzIHBvaW50IG9mIHZpZXcsIHRoZXJlIGlzIGEgbGluZWFyCisgICAgICAgICAgICAgICAgcGF0aCB0aGF0IHRyYXZlbHMgZnJvbSB0aGUgYmFzZWxpbmUgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiwgdGhyb3VnaCBhIHNlbGVjdAorICAgICAgICAgICAgICAgIGdyb3VwIG9mIGZlYXR1cmVzIGFuZCBlbmRzIHdpdGggdGhlaXIgQlNQLXNwZWNpZmljIGNvbW1pdHMuCisgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBkaXZpc2lvbnMgb2YgdGhlIGtlcm5lbCBhcmUgdHJhbnNwYXJlbnQgYW5kIGFyZSBub3QgcmVsZXZhbnQKKyAgICAgICAgICAgICAgICB0byB0aGUgZGV2ZWxvcGVyIG9uIGEgZGF5LXRvLWRheSBiYXNpcy4KKyAgICAgICAgICAgICAgICBGcm9tIHRoZSBkZXZlbG9wZXIncyBwZXJzcGVjdGl2ZSwgdGhpcyBwYXRoIGlzIHRoZSAibWFzdGVyIiBicmFuY2guCisgICAgICAgICAgICAgICAgVGhlIGRldmVsb3BlciBkb2VzIG5vdCBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZSBleGlzdGVuY2Ugb2YgYW55IG90aGVyIGJyYW5jaGVzIGF0IGFsbC4KKyAgICAgICAgICAgICAgICBPZiBjb3Vyc2UsIHRoZXJlIGlzIHZhbHVlIGluIHRoZSBleGlzdGVuY2Ugb2YgdGhlc2UgYnJhbmNoZXMKKyAgICAgICAgICAgICAgICBpbiB0aGUgdHJlZSwgc2hvdWxkIGEgcGVyc29uIGRlY2lkZSB0byBleHBsb3JlIHRoZW0uCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byBCU1BzIGF0IGVpdGhlciB0aGUgY29tbWl0IGxldmVsIG9yIGF0IHRoZSBsaW5lLWJ5LWxpbmUKKyAgICAgICAgICAgICAgICBjb2RlIDxmaWxlbmFtZT5kaWZmPC9maWxlbmFtZT4gbGV2ZWwgaXMgbm93IGEgdHJpdmlhbCBvcGVyYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXb3JraW5nIHdpdGggdGhlIGtlcm5lbCBhcyBhIHN0cnVjdHVyZWQgdHJlZSBmb2xsb3dzIHJlY29nbml6ZWQgY29tbXVuaXR5IGJlc3QgcHJhY3RpY2VzLgorICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSBrZXJuZWwgYXMgc2hpcHBlZCB3aXRoIHRoZSBwcm9kdWN0LCBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICBjb25zaWRlcmVkIGFuICJ1cHN0cmVhbSBzb3VyY2UiIGFuZCB2aWV3ZWQgYXMgYSBzZXJpZXMgb2YKKyAgICAgICAgICAgICAgICBoaXN0b3JpY2FsIGFuZCBkb2N1bWVudGVkIG1vZGlmaWNhdGlvbnMgKGNvbW1pdHMpLgorICAgICAgICAgICAgICAgIFRoZXNlIG1vZGlmaWNhdGlvbnMgcmVwcmVzZW50IHRoZSBkZXZlbG9wbWVudCBhbmQgc3RhYmlsaXphdGlvbiBkb25lCisgICAgICAgICAgICAgICAgYnkgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIGRldmVsb3BtZW50IHRlYW0uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIGNvbW1pdHMgb25seSBjaGFuZ2UgYXQgc2lnbmlmaWNhbnQgcmVsZWFzZSBwb2ludHMgaW4gdGhlIHByb2R1Y3QgbGlmZSBjeWNsZSwKKyAgICAgICAgICAgICAgICBkZXZlbG9wZXJzIGNhbiB3b3JrIG9uIGEgYnJhbmNoIGNyZWF0ZWQKKyAgICAgICAgICAgICAgICBmcm9tIHRoZSBsYXN0IHJlbGV2YW50IGNvbW1pdCBpbiB0aGUgc2hpcHBlZCBZb2N0byBQcm9qZWN0IGtlcm5lbC4KKyAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgcHJldmlvdXNseSwgdGhlIHN0cnVjdHVyZSBpcyB0cmFuc3BhcmVudCB0byB0aGUgZGV2ZWxvcGVyCisgICAgICAgICAgICAgICAgYmVjYXVzZSB0aGUga2VybmVsIHRyZWUgaXMgbGVmdCBpbiB0aGlzIHN0YXRlIGFmdGVyIGNsb25pbmcgYW5kIGJ1aWxkaW5nIHRoZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc291cmNlLWNvZGUtbWFuYWdlci1naXQnPgorICAgICAgICAgICAgPHRpdGxlPlNvdXJjZSBDb2RlIE1hbmFnZXIgLSBHaXQ8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSkgaXMgR2l0LgorICAgICAgICAgICAgICAgIFRoaXMgU0NNIGlzIHRoZSBvYnZpb3VzIG1lY2hhbmlzbSBmb3IgbWVldGluZyB0aGUgcHJldmlvdXNseSBtZW50aW9uZWQgZ29hbHMuCisgICAgICAgICAgICAgICAgTm90IG9ubHkgaXMgaXQgdGhlIFNDTSBmb3IgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiBidXQsCisgICAgICAgICAgICAgICAgR2l0IGNvbnRpbnVlcyB0byBncm93IGluIHBvcHVsYXJpdHkgYW5kIHN1cHBvcnRzIG1hbnkgZGlmZmVyZW50IHdvcmsgZmxvd3MsCisgICAgICAgICAgICAgICAgZnJvbnQtZW5kcyBhbmQgbWFuYWdlbWVudCB0ZWNobmlxdWVzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGRvY3VtZW50YXRpb24gb24gR2l0IGF0IDx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9kb2N1bWVudGF0aW9uJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZ2V0IGFuIGludHJvZHVjdGlvbiB0byBHaXQgYXMgaXQgYXBwbGllcyB0byB0aGUgWW9jdG8gUHJvamVjdCBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICBUaGVzZSByZWZlcmVuY2VkIHNlY3Rpb25zIG92ZXJ2aWV3IEdpdCBhbmQgZGVzY3JpYmUgYSBtaW5pbWFsIHNldCBvZgorICAgICAgICAgICAgICAgIGNvbW1hbmRzIHRoYXQgYWxsb3dzIHlvdSB0byBiZSBmdW5jdGlvbmFsIHVzaW5nIEdpdC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgYXMgbXVjaCwgb3IgYXMgbGl0dGxlLCBvZiB3aGF0IEdpdCBoYXMgdG8gb2ZmZXIgdG8gYWNjb21wbGlzaCB3aGF0CisgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIGZvciB5b3VyIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgaGF2ZSB0byBiZSBhICJHaXQgTWFzdGVyIiBpbiBvcmRlciB0byB1c2UgaXQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+Cis8L2FwcGVuZGl4PgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWN1c3RvbWl6YXRpb24ueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjViNzM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDI2IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9IidrZXJuZWwtZGV2LXN0eWxlLmNzcyciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiPkE8L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IjEiIC8+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1NmE1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDM1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldAorCXhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorCXhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiCisJdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQKKwkgIGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmtlci5vdXRwdXQuaW5kZW50IiBzZWxlY3Q9Iid5ZXMnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsucXVpZXRseSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuZmlyc3Quc2VjdGlvbnMiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rLnNlY3Rpb24uZGVwdGgiIHNlbGVjdD0iMTAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ1c2UuaWQuYXMuZmlsZW5hbWUiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVsaW5rLnRhcmdldCIgc2VsZWN0PSInX3NlbGYnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImJhc2UuZGlyIiBzZWxlY3Q9IidodG1sL2tlcm5lbC1kZXYvJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInLi4vYm9vay5jc3MnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZWNsaXBzZS5tYW5pZmVzdCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY3JlYXRlLnBsdWdpbi54bWwiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InN1cHByZXNzLm5hdmlnYXRpb24iIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmluZGV4IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCI+QTwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWV4YW1wbGVzLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtZXhhbXBsZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkOWFlZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWV4YW1wbGVzLnhtbApAQCAtMCwwICsxLDkxOCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2tlcm5lbC1ob3ctdG8nPgorCis8dGl0bGU+V29ya2luZyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IEtlcm5lbDwvdGl0bGU+CisKKworPHNlY3Rpb24gaWQ9J2FjdGlvbnMtb3JnJz4KKyAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyBob3cgdG8gYWNjb21wbGlzaCB0YXNrcyBpbnZvbHZpbmcgYSBrZXJuZWwncyB0cmVlIHN0cnVjdHVyZS4KKyAgICAgICAgVGhlIGluZm9ybWF0aW9uIGlzIGRlc2lnbmVkIHRvIGhlbHAgdGhlIGRldmVsb3BlciB0aGF0IHdhbnRzIHRvIG1vZGlmeSB0aGUgWW9jdG8KKyAgICAgICAgUHJvamVjdCBrZXJuZWwgYW5kIGNvbnRyaWJ1dGUgY2hhbmdlcyB1cHN0cmVhbSB0byB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgVGhlIGluZm9ybWF0aW9uIGNvdmVycyB0aGUgZm9sbG93aW5nOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRyZWUgY29uc3RydWN0aW9uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QnVpbGQgc3RyYXRlZ2llczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldvcmtmbG93IGV4YW1wbGVzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd0cmVlLWNvbnN0cnVjdGlvbic+CisgICAgICAgIDx0aXRsZT5UcmVlIENvbnN0cnVjdGlvbjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBjb25zdHJ1Y3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSByZXBvc2l0b3JpZXMKKyAgICAgICAgICAgIGFzIGFjY29tcGxpc2hlZCBieSB0aGUgWW9jdG8gUHJvamVjdCB0ZWFtIHRvIGNyZWF0ZSBrZXJuZWwgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgVGhlc2Uga2VybmVsIHJlcG9zaXRvcmllcyBhcmUgZm91bmQgdW5kZXIgdGhlIGhlYWRpbmcgIllvY3RvIExpbnV4IEtlcm5lbCIgYXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+JllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpPC91bGluaz4KKyAgICAgICAgICAgIGFuZCBjYW4gYmUgc2hpcHBlZCBhcyBwYXJ0IG9mIGEgWW9jdG8gUHJvamVjdCByZWxlYXNlLgorICAgICAgICAgICAgVGhlIHRlYW0gY3JlYXRlcyB0aGVzZSByZXBvc2l0b3JpZXMgYnkKKyAgICAgICAgICAgIGNvbXBpbGluZyBhbmQgZXhlY3V0aW5nIHRoZSBzZXQgb2YgZmVhdHVyZSBkZXNjcmlwdGlvbnMgZm9yIGV2ZXJ5IEJTUC9mZWF0dXJlCisgICAgICAgICAgICBpbiB0aGUgcHJvZHVjdC4KKyAgICAgICAgICAgIFRob3NlIGZlYXR1cmUgZGVzY3JpcHRpb25zIGxpc3QgYWxsIG5lY2Vzc2FyeSBwYXRjaGVzLAorICAgICAgICAgICAgY29uZmlndXJhdGlvbiwgYnJhbmNoaW5nLCB0YWdnaW5nIGFuZCBmZWF0dXJlIGRpdmlzaW9ucyBmb3VuZCBpbiBhIGtlcm5lbC4KKyAgICAgICAgICAgIFRodXMsIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCByZXBvc2l0b3J5IChvciB0cmVlKSBpcyBidWlsdC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBleGlzdGVuY2Ugb2YgdGhpcyB0cmVlIGFsbG93cyB5b3UgdG8gYWNjZXNzIGFuZCBjbG9uZSBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3Qga2VybmVsIHJlcG9zaXRvcnkgYW5kIHVzZSBpdCB0byBidWlsZCBpbWFnZXMgYmFzZWQgb24gdGhlaXIgY29uZmlndXJhdGlvbnMKKyAgICAgICAgICAgIGFuZCBmZWF0dXJlcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgZmlsZXMgdXNlZCB0byBkZXNjcmliZSBhbGwgdGhlIHZhbGlkIGZlYXR1cmVzIGFuZCBCU1BzCisgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgaW4gYW55IGNsb25lIG9mIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yeQorICAgICAgICAgICAgR2l0IHRyZWUuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIGNsb25lcyB0aGUgWW9jdG8gUHJvamVjdCBiYXNlbGluZSBrZXJuZWwgdGhhdAorICAgICAgICAgICAgYnJhbmNoZWQgb2ZmIG9mIDxmaWxlbmFtZT5saW51eC5vcmc8L2ZpbGVuYW1lPiB2ZXJzaW9uIDMuNDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy40CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBGb3IgYW5vdGhlciBleGFtcGxlIG9mIGhvdyB0byBzZXQgdXAgYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBvZiB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAga2VybmVsIGZpbGVzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbG9jYWwta2VybmVsLWZpbGVzJz5Zb2N0byBQcm9qZWN0IEtlcm5lbDwvdWxpbms+IiBidWxsZXRlZAorICAgICAgICAgICAgaXRlbSBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGNsb25lZCB0aGUga2VybmVsIEdpdCByZXBvc2l0b3J5IG9uIHlvdXIgbG9jYWwgbWFjaGluZSwgeW91IGNhbgorICAgICAgICAgICAgc3dpdGNoIHRvIHRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGJyYW5jaCB3aXRoaW4gdGhlIHJlcG9zaXRvcnkuCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBhc3N1bWVzIHRoZSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBmb3IgdGhlIGtlcm5lbCBpcyBpbgorICAgICAgICAgICAgYSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG5hbWVkIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L2xpbnV4LXlvY3RvLTMuNAorICAgICAkIGdpdCBjaGVja291dCAtYiBtZXRhIG9yaWdpbi9tZXRhCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGNoZWNrZWQgb3V0IGFuZCBzd2l0Y2hlZCB0byB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2gsCisgICAgICAgICAgICB5b3UgY2FuIHNlZSBhIHNuYXBzaG90IG9mIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIGZlYXR1cmUgZGVzY3JpcHRpb25zIHRoYXQgYXJlCisgICAgICAgICAgICB1c2VkIHRvIGJ1aWxkIHRoYXQgcGFydGljdWxhciBrZXJuZWwgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIFRoZXNlIGRlc2NyaXB0aW9ucyBhcmUgaW4gdGhlIGZvcm0gb2YgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBzaG91bGQgcmVhbGl6ZSwgaG93ZXZlciwgdGhhdCBicm93c2luZyB5b3VyIGxvY2FsIGtlcm5lbCByZXBvc2l0b3J5CisgICAgICAgICAgICBmb3IgZmVhdHVyZSBkZXNjcmlwdGlvbnMgYW5kIHBhdGNoZXMgaXMgbm90IGFuIGVmZmVjdGl2ZSB3YXkgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgaW4gYQorICAgICAgICAgICAgcGFydGljdWxhciBrZXJuZWwgYnJhbmNoLgorICAgICAgICAgICAgSW5zdGVhZCwgeW91IHNob3VsZCB1c2UgR2l0IGRpcmVjdGx5IHRvIGRpc2NvdmVyIHRoZSBjaGFuZ2VzIGluIGEgYnJhbmNoLgorICAgICAgICAgICAgVXNpbmcgR2l0IGlzIGFuIGVmZmljaWVudCBhbmQgZmxleGlibGUgd2F5IHRvIGluc3BlY3QgY2hhbmdlcyB0byB0aGUga2VybmVsLgorICAgICAgICAgICAgRm9yIGV4YW1wbGVzIHNob3dpbmcgaG93IHRvIHVzZSBHaXQgdG8gaW5zcGVjdCBrZXJuZWwgY29tbWl0cywgc2VlIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMKKyAgICAgICAgICAgIGluIHRoaXMgY2hhcHRlci4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEdyb3VuZCB1cCByZWNvbnN0cnVjdGlvbiBvZiB0aGUgY29tcGxldGUga2VybmVsIHRyZWUgaXMgYW4gYWN0aW9uIG9ubHkgdGFrZW4gYnkgdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCB0ZWFtIGR1cmluZyBhbiBhY3RpdmUgZGV2ZWxvcG1lbnQgY3ljbGUuCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIGEgY2xvbmUgb2YgdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSwgeW91IGFyZSBzaW1wbHkgbWFraW5nIGl0CisgICAgICAgICAgICAgICAgZWZmaWNpZW50bHkgYXZhaWxhYmxlIGZvciBidWlsZGluZyBhbmQgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0ZXBzIGRlc2NyaWJlIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBZb2N0byBQcm9qZWN0IFRlYW0gY29uc3RydWN0cworICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSBHaXQgcmVwb3NpdG9yeSAob3IgdHJlZSkgZm91bmQgYXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+PC91bGluaz4gZ2l2ZW4gdGhlCisgICAgICAgICAgICBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgdG9wLWxldmVsIGtlcm5lbCBmZWF0dXJlIG9yIEJTUC4KKyAgICAgICAgICAgIFRoZXNlIGFyZSB0aGUgYWN0aW9ucyB0aGF0IGVmZmVjdGl2ZWx5IGNyZWF0ZSB0aGUgdHJlZQorICAgICAgICAgICAgdGhhdCBpbmNsdWRlcyB0aGUgbmV3IGZlYXR1cmUsIHBhdGNoIG9yIEJTUDoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSB0b3AtbGV2ZWwga2VybmVsIGZlYXR1cmUgaXMgcGFzc2VkIHRvIHRoZSBrZXJuZWwgYnVpbGQgc3Vic3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBOb3JtYWxseSwgdGhpcyBmZWF0dXJlIGlzIGEgQlNQIGZvciBhIHBhcnRpY3VsYXIga2VybmVsIHR5cGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBmaWxlIHRoYXQgZGVzY3JpYmVzIHRoZSB0b3AtbGV2ZWwgZmVhdHVyZSBpcyBsb2NhdGVkIGJ5IHNlYXJjaGluZworICAgICAgICAgICAgICAgICAgICB0aGVzZSBzeXN0ZW0gZGlyZWN0b3JpZXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGluLXRyZWUga2VybmVsLWNhY2hlIGRpcmVjdG9yaWVzLCB3aGljaCBhcmUgbG9jYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFyZWFzIHBvaW50ZWQgdG8gYnkgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaW4gcmVjaXBlczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgdHlwaWNhbCBidWlsZCwgdGhlIHRhcmdldCBvZiB0aGUgc2VhcmNoIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZSBkZXNjcmlwdGlvbiBpbiBhbiA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgd2hvc2UgbmFtZSBmb2xsb3dzIHRoaXMgZm9ybWF0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICZsdDtic3BfbmFtZSZndDstJmx0O2tlcm5lbF90eXBlJmd0Oy5zY2MKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5PbmNlIGxvY2F0ZWQsIHRoZSBmZWF0dXJlIGRlc2NyaXB0aW9uIGlzIGVpdGhlciBjb21waWxlZCBpbnRvIGEgc2ltcGxlIHNjcmlwdAorICAgICAgICAgICAgICAgICAgICBvZiBhY3Rpb25zLCBvciBpbnRvIGFuIGV4aXN0aW5nIGVxdWl2YWxlbnQgc2NyaXB0IHRoYXQgaXMgYWxyZWFkeSBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBzaGlwcGVkIGtlcm5lbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXh0cmEgZmVhdHVyZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSB0b3AtbGV2ZWwgZmVhdHVyZSBkZXNjcmlwdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgZmVhdHVyZXMgY2FuIGNvbWUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtFUk5FTF9GRUFUVVJFUyc+PGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gcmVjaXBlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RWFjaCBleHRyYSBmZWF0dXJlIGlzIGxvY2F0ZWQsIGNvbXBpbGVkIGFuZCBhcHBlbmRlZCB0byB0aGUgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIGFzIGRlc2NyaWJlZCBpbiBzdGVwIHRocmVlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgc2NyaXB0IGlzIGV4ZWN1dGVkIHRvIHByb2R1Y2UgYSBzZXJpZXMgb2YgPGZpbGVuYW1lPm1ldGEtKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBkaXJlY3RvcmllcyBhcmUgZGVzY3JpcHRpb25zIG9mIGFsbCB0aGUgYnJhbmNoZXMsIHRhZ3MsIHBhdGNoZXMgYW5kIGNvbmZpZ3VyYXRpb25zIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBiZSBhcHBsaWVkIHRvIHRoZSBiYXNlIEdpdCByZXBvc2l0b3J5IHRvIGNvbXBsZXRlbHkgY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKGJ1aWxkKSBicmFuY2ggZm9yIHRoZSBuZXcgQlNQIG9yIGZlYXR1cmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBiYXNlIHJlcG9zaXRvcnkgaXMgY2xvbmVkLCBhbmQgdGhlIGFjdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgbGlzdGVkIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgYXJlIGFwcGxpZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIHRyZWUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBHaXQgcmVwb3NpdG9yeSBpcyBsZWZ0IHdpdGggdGhlIGRlc2lyZWQgYnJhbmNoIGNoZWNrZWQgb3V0IGFuZCBhbnkKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgYnJhbmNoaW5nLCBwYXRjaGluZyBhbmQgdGFnZ2luZyBoYXMgYmVlbiBwZXJmb3JtZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGtlcm5lbCB0cmVlIGlzIG5vdyByZWFkeSBmb3IgZGV2ZWxvcGVyIGNvbnN1bXB0aW9uIHRvIGJlIGxvY2FsbHkgY2xvbmVkLAorICAgICAgICAgICAgY29uZmlndXJlZCwgYW5kIGJ1aWx0IGludG8gYSBZb2N0byBQcm9qZWN0IGtlcm5lbCBzcGVjaWZpYyB0byBzb21lIHRhcmdldCBoYXJkd2FyZS4KKyAgICAgICAgICAgIDxub3RlPjxwYXJhPlRoZSBnZW5lcmF0ZWQgPGZpbGVuYW1lPm1ldGEtKjwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIGFkZCB0byB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgYXMgc2hpcHBlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IHJlbGVhc2UuCisgICAgICAgICAgICAgICAgQW55IGFkZC1vbnMgYW5kIGNvbmZpZ3VyYXRpb24gZGF0YSBhcmUgYXBwbGllZCB0byB0aGUgZW5kIG9mIGFuIGV4aXN0aW5nIGJyYW5jaC4KKyAgICAgICAgICAgICAgICBUaGUgZnVsbCByZXBvc2l0b3J5IGdlbmVyYXRpb24gdGhhdCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICBvZmZpY2lhbCBZb2N0byBQcm9qZWN0IGtlcm5lbCByZXBvc2l0b3JpZXMgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPmh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0LmNnaTwvdWxpbms+CisgICAgICAgICAgICAgICAgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIGFsbCBzdXBwb3J0ZWQgYm9hcmRzIGFuZCBjb25maWd1cmF0aW9ucy48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHRlY2huaXF1ZSB0aGUgWW9jdG8gUHJvamVjdCB0ZWFtIHVzZXMgaXMgZmxleGlibGUgYW5kIGFsbG93cyBmb3Igc2VhbWxlc3MKKyAgICAgICAgICAgICAgICBibGVuZGluZyBvZiBhbiBpbW11dGFibGUgaGlzdG9yeSB3aXRoIGFkZGl0aW9uYWwgcGF0Y2hlcyBzcGVjaWZpYyB0byBhCisgICAgICAgICAgICAgICAgZGVwbG95bWVudC4KKyAgICAgICAgICAgICAgICBBbnkgYWRkaXRpb25zIHRvIHRoZSBrZXJuZWwgYmVjb21lIGFuIGludGVncmF0ZWQgcGFydCBvZiB0aGUgYnJhbmNoZXMuPC9wYXJhPgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2J1aWxkLXN0cmF0ZWd5Jz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkIFN0cmF0ZWd5PC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgb2YgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIGV4aXN0cyBvbiBhIGRldmVsb3BtZW50IHN5c3RlbSwKKyAgICAgICAgICAgIHlvdSBjYW4gY29uc2lkZXIgdGhlIGNvbXBpbGF0aW9uIHBoYXNlIG9mIGtlcm5lbCBkZXZlbG9wbWVudCAtIGJ1aWxkaW5nIGEga2VybmVsIGltYWdlLgorICAgICAgICAgICAgU29tZSBwcmVyZXF1aXNpdGVzIGV4aXN0IHRoYXQgYXJlIHZhbGlkYXRlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyBiZWZvcmUgY29tcGlsYXRpb24KKyAgICAgICAgICAgIHN0YXJ0czoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPiBwb2ludHMKKyAgICAgICAgICAgICAgICB0byB0aGUga2VybmVsIEdpdCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgQlNQIGJ1aWxkIGJyYW5jaCBleGlzdHMuCisgICAgICAgICAgICAgICAgVGhpcyBicmFuY2ggaGFzIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICZsdDtrZXJuZWxfdHlwZSZndDsvJmx0O2JzcF9uYW1lJmd0OworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBtYWtlcyBzdXJlIHRoZXNlIGNvbmRpdGlvbnMgZXhpc3QgYmVmb3JlIGF0dGVtcHRpbmcgY29tcGlsYXRpb24uCisgICAgICAgICAgICBPdGhlciBtZWFucywgaG93ZXZlciwgZG8gZXhpc3QsIHN1Y2ggYXMgYXMgYm9vdHN0cmFwcGluZyBhIEJTUCwgc2VlCisgICAgICAgICAgICB0aGUgIjxsaW5rIGxpbmtlbmQ9J3dvcmtmbG93LWV4YW1wbGVzJz5Xb3JrZmxvdyBFeGFtcGxlczwvbGluaz4iLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZWZvcmUgYnVpbGRpbmcgYSBrZXJuZWwsIHRoZSBidWlsZCBwcm9jZXNzIHZlcmlmaWVzIHRoZSB0cmVlCisgICAgICAgICAgICBhbmQgY29uZmlndXJlcyB0aGUga2VybmVsIGJ5IHByb2Nlc3NpbmcgYWxsIG9mIHRoZQorICAgICAgICAgICAgY29uZmlndXJhdGlvbiAiZnJhZ21lbnRzIiBzcGVjaWZpZWQgYnkgZmVhdHVyZSBkZXNjcmlwdGlvbnMgaW4gdGhlIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgQXMgdGhlIGZlYXR1cmVzIGFyZSBjb21waWxlZCwgYXNzb2NpYXRlZCBrZXJuZWwgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgYXJlIG5vdGVkCisgICAgICAgICAgICBhbmQgcmVjb3JkZWQgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLSo8L2ZpbGVuYW1lPiBzZXJpZXMgb2YgZGlyZWN0b3JpZXMgaW4gdGhlaXIgY29tcGlsYXRpb24gb3JkZXIuCisgICAgICAgICAgICBUaGUgZnJhZ21lbnRzIGFyZSBtaWdyYXRlZCwgcHJlLXByb2Nlc3NlZCBhbmQgcGFzc2VkIHRvIHRoZSBMaW51eCBLZXJuZWwKKyAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gc3Vic3lzdGVtICg8ZmlsZW5hbWU+bGtjPC9maWxlbmFtZT4pIGFzIHJhdyBpbnB1dCBpbiB0aGUgZm9ybQorICAgICAgICAgICAgb2YgYSA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmxrYzwvZmlsZW5hbWU+IHVzZXMgaXRzIG93biBpbnRlcm5hbCBkZXBlbmRlbmN5IGNvbnN0cmFpbnRzIHRvIGRvIHRoZSBmaW5hbAorICAgICAgICAgICAgcHJvY2Vzc2luZyBvZiB0aGF0IGluZm9ybWF0aW9uIGFuZCBnZW5lcmF0ZXMgdGhlIGZpbmFsIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgdGhhdCBpcyB1c2VkIGR1cmluZyBjb21waWxhdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVXNpbmcgdGhlIGJvYXJkJ3MgYXJjaGl0ZWN0dXJlIGFuZCBvdGhlciByZWxldmFudCB2YWx1ZXMgZnJvbSB0aGUgYm9hcmQncyB0ZW1wbGF0ZSwKKyAgICAgICAgICAgIGtlcm5lbCBjb21waWxhdGlvbiBpcyBzdGFydGVkIGFuZCBhIGtlcm5lbCBpbWFnZSBpcyBwcm9kdWNlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIG90aGVyIHRoaW5nIHRoYXQgeW91IG5vdGljZSBvbmNlIHlvdSBjb25maWd1cmUgYSBrZXJuZWwgaXMgdGhhdAorICAgICAgICAgICAgdGhlIGJ1aWxkIHByb2Nlc3MgZ2VuZXJhdGVzIGEgYnVpbGQgdHJlZSB0aGF0IGlzIHNlcGFyYXRlIGZyb20geW91ciBrZXJuZWwncyBsb2NhbCBHaXQKKyAgICAgICAgICAgIHNvdXJjZSByZXBvc2l0b3J5IHRyZWUuCisgICAgICAgICAgICBUaGlzIGJ1aWxkIHRyZWUgaGFzIGEgbmFtZSB0aGF0IHVzZXMgdGhlIGZvbGxvd2luZyBmb3JtLCB3aGVyZQorICAgICAgICAgICAgPGZpbGVuYW1lPiR7TUFDSElORX08L2ZpbGVuYW1lPiBpcyB0aGUgbWV0YWRhdGEgbmFtZSBvZiB0aGUgbWFjaGluZSAoQlNQKSBhbmQgImtlcm5lbF90eXBlIiBpcyBvbmUKKyAgICAgICAgICAgIG9mIHRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRlZCBrZXJuZWwgdHlwZXMgKGUuZy4gInN0YW5kYXJkIik6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbGludXgtJHtNQUNISU5FfS0mbHQ7a2VybmVsX3R5cGUmZ3Q7LWJ1aWxkCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGV4aXN0aW5nIHN1cHBvcnQgaW4gdGhlIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gdHJlZSBhY2hpZXZlcyB0aGlzCisgICAgICAgICAgICBkZWZhdWx0IGZ1bmN0aW9uYWxpdHkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgYmVoYXZpb3IgbWVhbnMgdGhhdCBhbGwgdGhlIGdlbmVyYXRlZCBmaWxlcyBmb3IgYSBwYXJ0aWN1bGFyIG1hY2hpbmUgb3IgQlNQIGFyZSBub3cgaW4KKyAgICAgICAgICAgIHRoZSBidWlsZCB0cmVlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFRoZSBmaWxlcyBpbmNsdWRlIHRoZSBmaW5hbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsIGFsbCB0aGUgPGZpbGVuYW1lPi5vPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGVzLCB0aGUgPGZpbGVuYW1lPi5hPC9maWxlbmFtZT4gZmlsZXMsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgIFNpbmNlIGVhY2ggbWFjaGluZSBvciBCU1AgaGFzIGl0cyBvd24gc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IGluIGl0cyBvd24gc2VwYXJhdGUgYnJhbmNoCisgICAgICAgICAgICBvZiB0aGUgR2l0IHJlcG9zaXRvcnksIHlvdSBjYW4gZWFzaWx5IHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudCBidWlsZHMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd29ya2Zsb3ctZXhhbXBsZXMnPgorICAgICAgICA8dGl0bGU+V29ya2Zsb3cgRXhhbXBsZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgcHJldmlvdXNseSBub3RlZCwgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIGhhcyBidWlsdC1pbiBHaXQgaW50ZWdyYXRpb24uCisgICAgICAgICAgICBIb3dldmVyLCB0aGVzZSB1dGlsaXRpZXMgYXJlIG5vdCB0aGUgb25seSB3YXkgdG8gd29yayB3aXRoIHRoZSBrZXJuZWwgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGhhcyBub3QgbWFkZSBjaGFuZ2VzIHRvIEdpdCBvciB0byBvdGhlciB0b29scyB0aGF0CisgICAgICAgICAgICB3b3VsZCBpbnZhbGlkYXRlIGFsdGVybmF0ZSB3b3JrZmxvd3MuCisgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSB3YXkgdGhlIGtlcm5lbCByZXBvc2l0b3J5IGlzIGNvbnN0cnVjdGVkIHJlc3VsdHMgaW4gdXNpbmcKKyAgICAgICAgICAgIG9ubHkgY29yZSBHaXQgZnVuY3Rpb25hbGl0eSwgdGh1cyBhbGxvd2luZyBhbnkgbnVtYmVyIG9mIHRvb2xzIG9yIGZyb250IGVuZHMgdG8gdXNlIHRoZQorICAgICAgICAgICAgcmVzdWx0aW5nIHRyZWUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBjb250YWlucyBzZXZlcmFsIHdvcmtmbG93IGV4YW1wbGVzLgorICAgICAgICAgICAgTWFueSBvZiB0aGUgZXhhbXBsZXMgdXNlIEdpdCBjb21tYW5kcy4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBHaXQgZG9jdW1lbnRhdGlvbiBhdAorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2RvY3VtZW50YXRpb24nPjwvdWxpbms+LgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGEgc2ltcGxlIG92ZXJ2aWV3IG9mIHVzaW5nIEdpdCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2dpdCc+R2l0PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjaGFuZ2UtaW5zcGVjdGlvbi1rZXJuZWwtY2hhbmdlcy1jb21taXRzJz4KKyAgICAgICAgICAgIDx0aXRsZT5DaGFuZ2UgSW5zcGVjdGlvbjogQ2hhbmdlcy9Db21taXRzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBjb21tb24gcXVlc3Rpb24gd2hlbiB3b3JraW5nIHdpdGggYSBrZXJuZWwgaXM6CisgICAgICAgICAgICAgICAgIldoYXQgY2hhbmdlcyBoYXZlIGJlZW4gYXBwbGllZCB0byB0aGlzIHRyZWU/IgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiBwcm9qZWN0cyB0aGF0IGhhdmUgYSBjb2xsZWN0aW9uIG9mIGRpcmVjdG9yaWVzIHRoYXQKKyAgICAgICAgICAgICAgICBjb250YWluIHBhdGNoZXMgdG8gdGhlIGtlcm5lbCwgaXQgaXMgcG9zc2libGUgdG8gaW5zcGVjdCBvciAiZ3JlcCIgdGhlIGNvbnRlbnRzCisgICAgICAgICAgICAgICAgb2YgdGhlIGRpcmVjdG9yaWVzIHRvIGdldCBhIGdlbmVyYWwgZmVlbCBmb3IgdGhlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgVGhpcyBzb3J0IG9mIHBhdGNoIGluc3BlY3Rpb24gaXMgbm90IGFuIGVmZmljaWVudCB3YXkgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICBkb25lIHRvIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgVGhlIHJlYXNvbiBpdCBpcyBpbmVmZmljaWVudCBpcyBiZWNhdXNlIHRoZXJlIGFyZSBtYW55IG9wdGlvbmFsIHBhdGNoZXMgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICBzZWxlY3RlZCBiYXNlZCBvbiB0aGUga2VybmVsIHR5cGUgYW5kIHRoZSBmZWF0dXJlIGRlc2NyaXB0aW9uLgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgcGF0Y2hlcyBjb3VsZCBleGlzdCBpbiBkaXJlY3RvcmllcyB0aGF0IGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHNlYXJjaC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIGNoYW5nZWQgaW4gdGhlIGJyYW5jaCBpcyB0byB1c2UKKyAgICAgICAgICAgICAgICBHaXQgYW5kIGluc3BlY3Qgb3Igc2VhcmNoIHRoZSBrZXJuZWwgdHJlZS4KKyAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBnaXZlcyB5b3UgYSBmdWxsIHZpZXcgb2Ygbm90IG9ubHkgdGhlIHNvdXJjZSBjb2RlIG1vZGlmaWNhdGlvbnMsCisgICAgICAgICAgICAgICAgYnV0IGFsc28gcHJvdmlkZXMgdGhlIHJlYXNvbnMgZm9yIHRoZSBjaGFuZ2VzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nd2hhdC1jaGFuZ2VkLWluLWEta2VybmVsJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+V2hhdCBDaGFuZ2VkIGluIGEgS2VybmVsPzwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBhIGZldyBleGFtcGxlcyB0aGF0IHNob3cgaG93IHRvIHVzZSBHaXQgY29tbWFuZHMgdG8gZXhhbWluZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIEdpdCByZXBvc2l0b3JpZXMgaW4gdGhlIFlvY3RvIFByb2plY3QgZG8gbm90IGJyZWFrIGV4aXN0aW5nIEdpdAorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5LCBhbmQgYmVjYXVzZSB0aGVyZSBleGlzdHMgbWFueSBwZXJtdXRhdGlvbnMgb2YgdGhlc2UgdHlwZXMgb2YKKyAgICAgICAgICAgICAgICAgICAgR2l0IGNvbW1hbmRzLCBtYW55IG1ldGhvZHMgZXhpc3QgYnkgd2hpY2ggeW91IGNhbiBkaXNjb3ZlciBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMsIHVubGVzcyB5b3UgcHJvdmlkZSBhIGNvbW1pdCByYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gaGlzdG9yeSBpcyBibGVuZGVkIHdpdGggWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZvcm0gcmFuZ2VzIGJ5IHVzaW5nIGJyYW5jaCBuYW1lcyBmcm9tIHRoZSBrZXJuZWwgdHJlZSBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyIGFuZCBsb3dlciBjb21taXQgbWFya2VycyB3aXRoIHRoZSBHaXQgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGUgYnJhbmNoIG5hbWVzIHRocm91Z2ggdGhlIHdlYiBpbnRlcmZhY2UgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHNvdXJjZSByZXBvc2l0b3JpZXMgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0LmNnaSc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGJyYW5jaCBuYW1lcyBmb3IgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIHJlcG9zaXRvcnkgY2FuIGJlIHNlZW4gYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0LmNnaS9saW51eC15b2N0by0zLjQvcmVmcy9oZWFkcyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVG8gc2VlIGEgZnVsbCByYW5nZSBvZiB0aGUgY2hhbmdlcywgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IHdoYXRjaGFuZ2VkPC9maWxlbmFtZT4gY29tbWFuZCBhbmQgc3BlY2lmeSBhIGNvbW1pdCByYW5nZQorICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGJyYW5jaCAoPGZpbGVuYW1lPiZsdDtjb21taXQmZ3Q7Li4mbHQ7Y29tbWl0Jmd0OzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgbG9va3MgYXQgd2hhdCBoYXMgY2hhbmdlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmVtZW5sb3c8L2ZpbGVuYW1lPiBicmFuY2ggb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjQ8L2ZpbGVuYW1lPiBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIFRoZSBsb3dlciBjb21taXQgcmFuZ2UgaXMgdGhlIGNvbW1pdCBhc3NvY2lhdGVkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zdGFuZGFyZC9iYXNlPC9maWxlbmFtZT4gYnJhbmNoLCB3aGlsZQorICAgICAgICAgICAgICAgICAgICB0aGUgdXBwZXIgY29tbWl0IHJhbmdlIGlzIHRoZSBjb21taXQgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RhbmRhcmQvZW1lbmxvdzwvZmlsZW5hbWU+IGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCB3aGF0Y2hhbmdlZCBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBzZWUgYSBzdW1tYXJ5IG9mIGNoYW5nZXMgdXNlIHRoZSA8ZmlsZW5hbWU+Z2l0IGxvZzwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB1c2luZyB0aGUgc2FtZSBicmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBsb2cgLS1vbmVsaW5lIG9yaWdpbi9zdGFuZGFyZC9iYXNlLi5vcmlnaW4vc3RhbmRhcmQvZW1lbmxvdworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2l0IGxvZzwvZmlsZW5hbWU+IG91dHB1dCBtaWdodCBiZSBtb3JlIHVzZWZ1bCB0aGFuCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Z2l0IHdoYXRjaGFuZ2VkPC9maWxlbmFtZT4gYXMgeW91IGdldAorICAgICAgICAgICAgICAgICAgICBhIHNob3J0LCBvbmUtbGluZSBzdW1tYXJ5IG9mIGVhY2ggY2hhbmdlIGFuZCBub3QgdGhlIGVudGlyZSBjb21taXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHNlZSBjb2RlIGRpZmZlcmVuY2VzIGFzc29jaWF0ZWQgd2l0aCBhbGwgdGhlIGNoYW5nZXMsIHVzZQorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmdpdCBkaWZmPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGRpZmYgb3JpZ2luL3N0YW5kYXJkL2Jhc2UuLm9yaWdpbi9zdGFuZGFyZC9lbWVubG93CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZXMgYW5kIHRoZSB0ZXh0IGRpZmZlcmVuY2VzIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IHNob3c8L2ZpbGVuYW1lPiBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgc2hvdyBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNyZWF0ZSBpbmRpdmlkdWFsIHBhdGNoZXMgZm9yIGVhY2ggY2hhbmdlIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGZvcm1hdC1wYXRjaDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHRoYXQgY3JlYXRlcyBwYXRjaCBmaWxlcyBmb3IgZWFjaCBjb21taXQgYW5kCisgICAgICAgICAgICAgICAgICAgIHBsYWNlcyB0aGVtIGluIHlvdXIgPGZpbGVuYW1lPkRvY3VtZW50czwvZmlsZW5hbWU+IGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLW8gJEhPTUUvRG9jdW1lbnRzIG9yaWdpbi9zdGFuZGFyZC9iYXNlLi5vcmlnaW4vc3RhbmRhcmQvZW1lbmxvdworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nc2hvdy1hLXBhcnRpY3VsYXItZmVhdHVyZS1vci1icmFuY2gtY2hhbmdlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+U2hvdyBhIFBhcnRpY3VsYXIgRmVhdHVyZSBvciBCcmFuY2ggQ2hhbmdlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXJzIHVzZSB0YWdzIGluIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCB0cmVlIHRvIGRpdmlkZSBjaGFuZ2VzIGZvciBzaWduaWZpY2FudAorICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyBvciBicmFuY2hlcy4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3Uga25vdyBhIHBhcnRpY3VsYXIgdGFnLCB5b3UgY2FuIHVzZSBHaXQgY29tbWFuZHMKKyAgICAgICAgICAgICAgICAgICAgdG8gc2hvdyBjaGFuZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFnIGFuZCBmaW5kIHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSBCU1AgYnJhbmNoLCA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+LCBhbmQgZmVhdHVyZSB0YWdzIGFyZSBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnQsIHRoZXJlIGNvdWxkIGJlIG1hbnkgdGFncy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmdpdCBzaG93ICZsdDt0YWcmZ3Q7PC9maWxlbmFtZT4gY29tbWFuZCBzaG93cyBjaGFuZ2VzIHRoYXQgYXJlIHRhZ2dlZCBieQorICAgICAgICAgICAgICAgICAgICBhIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGNoYW5nZXMgdGFnZ2VkIGJ5IHRoZSA8ZmlsZW5hbWU+c3lzdGVtdGFwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBzaG93IHN5c3RlbXRhcAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+Z2l0IGJyYW5jaCAtLWNvbnRhaW5zICZsdDt0YWcmZ3Q7PC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB0byBzaG93IHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gYSBwYXJ0aWN1bGFyIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBzaG93cyB0aGUgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSA8ZmlsZW5hbWU+c3lzdGVtdGFwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBicmFuY2ggLS1jb250YWlucyBzeXN0ZW10YXAKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBtYW55IG90aGVyIGNvbXBhcmlzb25zIHRvIGlzb2xhdGUgQlNQIGFuZCBrZXJuZWwgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gY29tcGFyZSBhZ2FpbnN0IDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gdGFncworICAgICAgICAgICAgICAgICAgICBzdWNoIGFzIHRoZSA8ZmlsZW5hbWU+djMuNDwvZmlsZW5hbWU+IHRhZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGV2ZWxvcG1lbnQtc2F2aW5nLWtlcm5lbC1tb2RpZmljYXRpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5EZXZlbG9wbWVudDogU2F2aW5nIEtlcm5lbCBNb2RpZmljYXRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciBjb21tb24gb3BlcmF0aW9uIGlzIHRvIGJ1aWxkIGEgQlNQIHN1cHBsaWVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0LCBtYWtlIHNvbWUKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLCByZWJ1aWxkLCBhbmQgdGhlbiB0ZXN0LgorICAgICAgICAgICAgICAgIFRob3NlIGxvY2FsIGNoYW5nZXMgb2Z0ZW4gbmVlZCB0byBiZSBleHBvcnRlZCwgc2hhcmVkIG9yIG90aGVyd2lzZSBtYWludGFpbmVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTaW5jZSB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgc291cmNlIHRyZWUgaXMgYmFja2VkIGJ5IEdpdCwgdGhpcyBhY3Rpdml0eSBpcworICAgICAgICAgICAgICAgIG11Y2ggZWFzaWVyIGFzIGNvbXBhcmVkIHRvIHdpdGggcHJldmlvdXMgcmVsZWFzZXMuCisgICAgICAgICAgICAgICAgQmVjYXVzZSBHaXQgdHJhY2tzIGZpbGUgbW9kaWZpY2F0aW9ucywgYWRkaXRpb25zIGFuZCBkZWxldGlvbnMsIGl0IGlzIGVhc3kKKyAgICAgICAgICAgICAgICB0byBtb2RpZnkgdGhlIGNvZGUgYW5kIGxhdGVyIHJlYWxpemUgdGhhdCB5b3UgbmVlZCB0byBzYXZlIHRoZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIEl0IGlzIGFsc28gZWFzeSB0byBkZXRlcm1pbmUgd2hhdCBoYXMgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBhbHNvIHByb3ZpZGVzIG1hbnkgdG9vbHMgdG8gY29tbWl0LCB1bmRvIGFuZCBleHBvcnQgdGhvc2UgbW9kaWZpY2F0aW9ucy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGFuZCBpdHMgc3ViLXNlY3Rpb25zLCBkZXNjcmliZSBnZW5lcmFsIGFwcGxpY2F0aW9uIG9mIEdpdCdzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnB1c2g8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnB1bGw8L2ZpbGVuYW1lPiBjb21tYW5kcywgd2hpY2ggYXJlIHVzZWQgdG8KKyAgICAgICAgICAgICAgICBnZXQgeW91ciBjaGFuZ2VzIHVwc3RyZWFtIG9yIHNvdXJjZSB5b3VyIGNvZGUgZnJvbSBhbiB1cHN0cmVhbSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIHNjcmlwdHMgdGhhdCBoZWxwIHlvdSB3b3JrIGluIGEgY29sbGFib3JhdGl2ZSBkZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGVzZSBzY3JpcHRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3B1c2hpbmctYS1jaGFuZ2UtdXBzdHJlYW0nPlVzaW5nIFNjcmlwdHMgdG8gUHVzaCBhIENoYW5nZQorICAgICAgICAgICAgICAgIFVwc3RyZWFtIGFuZCBSZXF1ZXN0IGEgUHVsbDwvdWxpbms+IiBhbmQKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc3VibWl0dGluZy1hLXBhdGNoJz5Vc2luZyBFbWFpbCB0byBTdWJtaXQgYSBQYXRjaDwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb25zIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlcmUgYXJlIG1hbnkgd2F5cyB0byBzYXZlIGtlcm5lbCBtb2RpZmljYXRpb25zLgorICAgICAgICAgICAgICAgIFRoZSB0ZWNobmlxdWUgZW1wbG95ZWQKKyAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIHRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIHBhdGNoZXM6CisKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QnVsayBzdG9yYWdlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbnRlcm5hbCBzaGFyaW5nIGVpdGhlciB0aHJvdWdoIHBhdGNoZXMgb3IgYnkgdXNpbmcgR2l0PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRlcm5hbCBzdWJtaXNzaW9uczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXhwb3J0aW5nIGZvciBpbnRlZ3JhdGlvbiBpbnRvIGFub3RoZXIgU291cmNlIENvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hbmFnZXIgKFNDTSk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGxpc3Qgb2YgaXNzdWVzLCB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHBhdGNoZXMgYWxzbyBpbmZsdWVuY2VzCisgICAgICAgICAgICAgICAgdGhlIG1ldGhvZCBmb3IgZ2F0aGVyaW5nIHRoZW06CisKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QmlzZWN0YWJpbGl0eTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29tbWl0IGhlYWRlcnM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRpdmlzaW9uIG9mIHN1YnN5c3RlbXMgZm9yIHNlcGFyYXRlIHN1Ym1pc3Npb24gb3IgcmV2aWV3PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdidWxrLWV4cG9ydCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkJ1bGsgRXhwb3J0PC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB5b3UgY2FuICJidWxrIiBleHBvcnQgY2hhbmdlcyB0aGF0IGhhdmUgbm90CisgICAgICAgICAgICAgICAgICAgIGJlZW4gc2VwYXJhdGVkIG9yIGRpdmlkZWQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2l0dWF0aW9uIHdvcmtzIHdlbGwgd2hlbiB5b3UgYXJlIHNpbXBseSBzdG9yaW5nIHBhdGNoZXMgb3V0c2lkZSBvZiB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSByZXBvc2l0b3J5LCBlaXRoZXIgcGVybWFuZW50bHkgb3IgdGVtcG9yYXJpbHksIGFuZCB5b3UgYXJlIG5vdCBjb21taXR0aW5nCisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudGFsIGNoYW5nZXMgZHVyaW5nIGRldmVsb3BtZW50LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdGVjaG5pcXVlIGlzIG5vdCBhcHByb3ByaWF0ZSBmb3IgZnVsbCBpbnRlZ3JhdGlvbiBvZiB1cHN0cmVhbSBzdWJtaXNzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIGNoYW5nZXMgYXJlIG5vdCBwcm9wZXJseSBkaXZpZGVkIGFuZCBkbyBub3QgcHJvdmlkZSBhbiBhdmVudWUgZm9yIHBlci1jaGFuZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdCBtZXNzYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZXJlZm9yZSwgdGhpcyBleGFtcGxlIGFzc3VtZXMgdGhhdCBjaGFuZ2VzIGhhdmUgbm90IGJlZW4gY29tbWl0dGVkIGluY3JlbWVudGFsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBkZXZlbG9wbWVudCBhbmQgdGhhdCB5b3Ugc2ltcGx5IG11c3QgZ2F0aGVyIGFuZCBleHBvcnQgdGhlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgYnVsayBleHBvcnQgb2YgQUxMIG1vZGlmaWNhdGlvbnMgd2l0aG91dCBzZXBhcmF0aW9uIG9yIGRpdmlzaW9uCisgICAgICMgb2YgdGhlIGNoYW5nZXMKKworICAgICAkIGdpdCBhZGQgLgorICAgICAkIGdpdCBjb21taXQgLXMgLWEgLW0gJmx0O21zZyZndDsKKyAgICAgICAgb3IKKyAgICAgJCBnaXQgY29tbWl0IC1zIC1hICMgYW5kIGludGVyYWN0IHdpdGggJEVESVRPUgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBvcGVyYXRpb25zIGNhcHR1cmUgYWxsIHRoZSBsb2NhbCBjaGFuZ2VzIGluIHRoZSBwcm9qZWN0IHNvdXJjZQorICAgICAgICAgICAgICAgICAgICB0cmVlIGluIGEgc2luZ2xlIEdpdCBjb21taXQuCisgICAgICAgICAgICAgICAgICAgIEFuZCwgdGhhdCBjb21taXQgaXMgYWxzbyBzdG9yZWQgaW4gdGhlIHByb2plY3QncyBzb3VyY2UgdHJlZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgY2hhbmdlcyBhcmUgZXhwb3J0ZWQsIHlvdSBjYW4gcmVzdG9yZSB0aGVtIG1hbnVhbGx5IHVzaW5nIGEgdGVtcGxhdGUKKyAgICAgICAgICAgICAgICAgICAgb3IgdGhyb3VnaCBpbnRlZ3JhdGlvbiB3aXRoIHRoZSA8ZmlsZW5hbWU+ZGVmYXVsdF9rZXJuZWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2luY3JlbWVudGFsLXBsYW5uZWQtc2hhcmluZyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkluY3JlbWVudGFsL1BsYW5uZWQgU2hhcmluZzwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gc2F2ZSBtb2RpZmljYXRpb25zIHdoZW4geW91IGFyZSBtYWtpbmcgaW5jcmVtZW50YWwKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0cyBvciBwcmFjdGljaW5nIHBsYW5uZWQgc2hhcmluZy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGVzIGluIHRoaXMgc2VjdGlvbiBhc3N1bWUgdGhhdCB5b3UgaGF2ZSBpbmNyZW1lbnRhbGx5IGNvbW1pdHRlZAorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIHRvIHRoZSB0cmVlIGR1cmluZyBkZXZlbG9wbWVudCBhbmQgbm93IG5lZWQgdG8gZXhwb3J0IHRoZW0uCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWN0aW9ucyB0aGF0IGZvbGxvdworICAgICAgICAgICAgICAgICAgICBkZXNjcmliZSBob3cgeW91IGNhbiBleHBvcnQgeW91ciBjaGFuZ2VzIGludGVybmFsbHkgdGhyb3VnaCBlaXRoZXIgcGF0Y2hlcyBvciBieQorICAgICAgICAgICAgICAgICAgICB1c2luZyBHaXQgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIER1cmluZyBkZXZlbG9wbWVudCwgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBhcmUgb2YgaW50ZXJlc3QuCisgICAgICAgICAgICAgICAgICAgIEZvciBmdWxsIEdpdCBkb2N1bWVudGF0aW9uLCByZWZlciB0byB0aGUgR2l0IGRvY3VtZW50YXRpb24gYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdGh1Yi5jb20nPjwvdWxpbms+LgorCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBlZGl0IGEgZmlsZQorICAgICAkIHZpICZsdDtwYXRoJmd0Oy9maWxlCisgICAgICMgc3RhZ2UgdGhlIGNoYW5nZQorICAgICAkIGdpdCBhZGQgJmx0O3BhdGgmZ3Q7L2ZpbGUKKyAgICAgIyBjb21taXQgdGhlIGNoYW5nZQorICAgICAkIGdpdCBjb21taXQgLXMKKyAgICAgIyByZW1vdmUgYSBmaWxlCisgICAgICQgZ2l0IHJtICZsdDtwYXRoJmd0Oy9maWxlCisgICAgICMgY29tbWl0IHRoZSBjaGFuZ2UKKyAgICAgJCBnaXQgY29tbWl0IC1zCisKKyAgICAgLi4uIGV0Yy4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXN0cmlidXRlZCBkZXZlbG9wbWVudCB3aXRoIEdpdCBpcyBwb3NzaWJsZSB3aGVuIHlvdSB1c2UgYSB1bml2ZXJzYWxseQorICAgICAgICAgICAgICAgICAgICBhZ3JlZWQtdXBvbiB1bmlxdWUgY29tbWl0IGlkZW50aWZpZXIgKHNldCBieSB0aGUgY3JlYXRvciBvZiB0aGUgY29tbWl0KSB0aGF0IG1hcHMgdG8gYQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBjaGFuZ2Ugc2V0IHdpdGggYSBzcGVjaWZpYyBwYXJlbnQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgaWRlbnRpZmllciBpcyBjcmVhdGVkIGZvciB5b3Ugd2hlbgorICAgICAgICAgICAgICAgICAgICB5b3UgY3JlYXRlIGEgY29tbWl0LCBhbmQgaXMgcmUtY3JlYXRlZCB3aGVuIHlvdSBhbWVuZCwgYWx0ZXIgb3IgcmUtYXBwbHkKKyAgICAgICAgICAgICAgICAgICAgYSBjb21taXQuCisgICAgICAgICAgICAgICAgICAgIEFzIGFuIGluZGl2aWR1YWwgaW4gaXNvbGF0aW9uLCB0aGlzIGlzIG9mIG5vIGludGVyZXN0LgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UKKyAgICAgICAgICAgICAgICAgICAgaW50ZW5kIHRvIHNoYXJlIHlvdXIgdHJlZSB3aXRoIG5vcm1hbCBHaXQgPGZpbGVuYW1lPnB1c2g8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnB1bGw8L2ZpbGVuYW1lPiBvcGVyYXRpb25zIGZvcgorICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRlZCBkZXZlbG9wbWVudCwgeW91IHNob3VsZCBjb25zaWRlciB0aGUgcmFtaWZpY2F0aW9ucyBvZiBjaGFuZ2luZyBhCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdCB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2hhcmVkIHdpdGggb3RoZXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBc3N1bWluZyB0aGF0IHRoZSBjaGFuZ2VzIGhhdmUgbm90IGJlZW4gcHVzaGVkIHVwc3RyZWFtLCBvciBwdWxsZWQgaW50bworICAgICAgICAgICAgICAgICAgICBhbm90aGVyIHJlcG9zaXRvcnksIHlvdSBjYW4gdXBkYXRlIGJvdGggdGhlIGNvbW1pdCBjb250ZW50IGFuZCBjb21taXQgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIGRldmVsb3BtZW50IGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIEdpdCBhZGQgJmx0O3BhdGgmZ3Q7L2ZpbGUKKyAgICAgJCBHaXQgY29tbWl0IC0tYW1lbmQKKyAgICAgJCBHaXQgcmViYXNlIG9yIEdpdCByZWJhc2UgLWkKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZ2FpbiwgYXNzdW1pbmcgdGhhdCB0aGUgY2hhbmdlcyBoYXZlIG5vdCBiZWVuIHB1c2hlZCB1cHN0cmVhbSwgYW5kIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbm8gcGVuZGluZyB3b3Jrcy1pbi1wcm9ncmVzcyBleGlzdCAodXNlIDxmaWxlbmFtZT5naXQgc3RhdHVzPC9maWxlbmFtZT4gdG8gY2hlY2spLCB0aGVuCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gcmV2ZXJ0ICh1bmRvKSBjb21taXRzIGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIHJlbW92ZSB0aGUgY29tbWl0LCB1cGRhdGUgd29ya2luZyB0cmVlIGFuZCByZW1vdmUgYWxsCisgICAgICMgdHJhY2VzIG9mIHRoZSBjaGFuZ2UKKyAgICAgJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisgICAgICMgcmVtb3ZlIHRoZSBjb21taXQsIGJ1dCBsZWF2ZSB0aGUgZmlsZXMgY2hhbmdlZCBhbmQgc3RhZ2VkIGZvciByZS1jb21taXQKKyAgICAgJCBnaXQgcmVzZXQgLS1zb2Z0IEhFQUReCisgICAgICMgcmVtb3ZlIHRoZSBjb21taXQsIGxlYXZlIGZpbGUgY2hhbmdlLCBidXQgbm90IHN0YWdlZCBmb3IgY29tbWl0CisgICAgICQgZ2l0IHJlc2V0IC0tbWl4ZWQgSEVBRF4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNyZWF0ZSBicmFuY2hlcywgImNoZXJyeS1waWNrIiBjaGFuZ2VzLCBvciBwZXJmb3JtIGFueSBudW1iZXIgb2YgR2l0CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMgdW50aWwgdGhlIGNvbW1pdHMgYXJlIGluIGdvb2Qgb3JkZXIgZm9yIHB1c2hpbmcgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICAgICAgb3IgZm9yIHB1bGwgcmVxdWVzdHMuCisgICAgICAgICAgICAgICAgICAgIEFmdGVyIGEgPGZpbGVuYW1lPnB1c2g8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+cHVsbDwvZmlsZW5hbWU+IGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdHMgYXJlIG5vcm1hbGx5IGNvbnNpZGVyZWQKKyAgICAgICAgICAgICAgICAgICAgInBlcm1hbmVudCIgYW5kIHlvdSBzaG91bGQgbm90IG1vZGlmeSB0aGVtLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGUgY29tbWl0cyBuZWVkIHRvIGJlIGNoYW5nZWQsIHlvdSBjYW4gaW5jcmVtZW50YWxseSBkbyBzbyB3aXRoIG5ldyBjb21taXRzLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBwcmFjdGljZXMgZm9sbG93IHN0YW5kYXJkIEdpdCB3b3JrZmxvdyBhbmQgdGhlIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gYmVzdAorICAgICAgICAgICAgICAgICAgICBwcmFjdGljZXMsIHdoaWNoIGlzIHJlY29tbWVuZGVkLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRvIHRhZyBvciBicmFuY2ggYmVmb3JlIGFkZGluZyBjaGFuZ2VzIHRvIGEgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgQlNQIG9yIGJlZm9yZSBjcmVhdGluZyBhIG5ldyBvbmUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVhc29uIGZvciB0aGlzIHJlY29tbWVuZGF0aW9uIGlzIGJlY2F1c2UgdGhlIGJyYW5jaCBvciB0YWcgcHJvdmlkZXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlIHBvaW50IHRvIGZhY2lsaXRhdGUgbG9jYXRpbmcgYW5kIGV4cG9ydGluZyBsb2NhbCBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2V4cG9ydC1pbnRlcm5hbGx5LXZpYS1wYXRjaGVzJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkV4cG9ydGluZyBDaGFuZ2VzIEludGVybmFsbHkgYnkgVXNpbmcgUGF0Y2hlczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB5b3UgY2FuIGV4dHJhY3QgY29tbWl0dGVkIGNoYW5nZXMgZnJvbSBhIHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICBieSBleHBvcnRpbmcgdGhlbSBhcyBwYXRjaGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgY2hhbmdlcyBoYXZlIGJlZW4gZXh0cmFjdGVkLCB5b3UgY2FuIHVzZSB0aGUgcGF0Y2hlcyBmb3IgdXBzdHJlYW0gc3VibWlzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlIHRoZW0gaW4gYSBZb2N0byBQcm9qZWN0IHRlbXBsYXRlIGZvciBhdXRvbWF0aWMga2VybmVsIHBhdGNoaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXBwbHkgdGhlbSBpbiBtYW55IG90aGVyIGNvbW1vbiB1c2VzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgc2hvd3MgaG93IHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB3aXRoIHNlcXVlbnRpYWxseSBudW1iZXJlZCBwYXRjaGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQsIHlvdSBjYW4gYXBwbHkgaXQgdG8gYSByZXBvc2l0b3J5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBhbTwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gcmVwcm9kdWNlIHRoZSBvcmlnaW5hbCBjb21taXQgYW5kIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlbGF0ZWQgaW5mb3JtYXRpb24gc3VjaCBhcyBhdXRob3IsIGRhdGUsIGNvbW1pdCBsb2csIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuZXcgY29tbWl0IGlkZW50aWZpZXJzIChJRCkgd2lsbCBiZSBnZW5lcmF0ZWQgdXBvbiByZS1hcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFjdGlvbiByZWZsZWN0cyB0aGF0IHRoZSBjb21taXQgaXMgbm93IGFwcGxpZWQgdG8gYW4gdW5kZXJseWluZyBjb21taXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgZGlmZmVyZW50IElELgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjICZsdDtmaXJzdC1jb21taXQmZ3Q7IGNhbiBiZSBhIHRhZyBpZiBvbmUgd2FzIGNyZWF0ZWQgYmVmb3JlIGRldmVsb3BtZW50CisgICAgICMgYmVnYW4uIEl0IGNhbiBhbHNvIGJlIHRoZSBwYXJlbnQgYnJhbmNoIGlmIGEgYnJhbmNoIHdhcyBjcmVhdGVkCisgICAgICMgYmVmb3JlIGRldmVsb3BtZW50IGJlZ2FuLgorCisgICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtbyAmbHQ7ZGlyJmd0OyAmbHQ7Zmlyc3QgY29tbWl0Jmd0Oy4uJmx0O2xhc3QgY29tbWl0Jmd0OworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBJZGVudGlmeSBjb21taXRzIG9mIGludGVyZXN0LgorCisgICAgICMgSWYgdGhlIHRyZWUgd2FzIHRhZ2dlZCBiZWZvcmUgZGV2ZWxvcG1lbnQKKyAgICAgJCBnaXQgZm9ybWF0LXBhdGNoIC1vICZsdDtzYXZlIGRpciZndDsgJmx0O3RhZyZndDsKKworICAgICAjIElmIG5vIHRhZ3MgYXJlIGF2YWlsYWJsZQorICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLW8gJmx0O3NhdmUgZGlyJmd0OyBIRUFEXiAgIyBsYXN0IGNvbW1pdAorICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLW8gJmx0O3NhdmUgZGlyJmd0OyBIRUFEXl4gIyBsYXN0IDIgY29tbWl0cworICAgICAkIGdpdCB3aGF0Y2hhbmdlZCAjIGlkZW50aWZ5IGxhc3QgY29tbWl0CisgICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtbyAmbHQ7c2F2ZSBkaXImZ3Q7ICZsdDtjb21taXQgaWQmZ3Q7CisgICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtbyAmbHQ7c2F2ZSBkaXImZ3Q7ICZsdDtyZXYtbGlzdCZndDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdleHBvcnQtaW50ZXJuYWxseS12aWEtZ2l0Jz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkV4cG9ydGluZyBDaGFuZ2VzIEludGVybmFsbHkgYnkgVXNpbmcgR2l0PC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHlvdSBjYW4gZXhwb3J0IGNoYW5nZXMgZnJvbSBhIHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICBieSBwdXNoaW5nIHRoZSBjaGFuZ2VzIGludG8gYSBtYXN0ZXIgcmVwb3NpdG9yeSBvciBieSBtYWtpbmcgYSBwdWxsIHJlcXVlc3QuCisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHB1c2hlZCB0aGUgY2hhbmdlcyB0byB0aGUgbWFzdGVyIHJlcG9zaXRvcnksIHlvdSBjYW4gdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgcHVsbCB0aG9zZSBzYW1lIGNoYW5nZXMgaW50byBhIG5ldyBrZXJuZWwgYnVpbGQgYXQgYSBsYXRlciB0aW1lLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyBjb21tYW5kIGZvcm0gdG8gcHVzaCB0aGUgY2hhbmdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgcHVzaCBzc2g6Ly8mbHQ7bWFzdGVyX3NlcnZlciZndDsvJmx0O3BhdGhfdG9fcmVwbyZndDsKKyAgICAgICAgJmx0O2xvY2FsX2JyYW5jaCZndDs6Jmx0O3JlbW90ZV9icmFuY2gmZ3Q7CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgcHVzaGVzIHRoZSBjaGFuZ2VzIGZyb20geW91ciBsb2NhbCBicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by9zdGFuZGFyZC9jb21tb24tcGMvYmFzZTwvZmlsZW5hbWU+IHRvIHRoZSByZW1vdGUgYnJhbmNoIHdpdGggdGhlIHNhbWUgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIG1hc3RlciByZXBvc2l0b3J5IDxmaWxlbmFtZT4vL2dpdC5teWNvbXBhbnkuY29tL3B1Yi9naXQva2VybmVsLTMuNDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBwdXNoIHNzaDovL2dpdC5teWNvbXBhbnkuY29tL3B1Yi9naXQva2VybmVsLTMuNCBcCisgICAgICAgIHlvY3RvL3N0YW5kYXJkL2NvbW1vbi1wYy9iYXNlOnlvY3RvL3N0YW5kYXJkL2NvbW1vbi1wYy9iYXNlCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgcHVsbCByZXF1ZXN0IGVudGFpbHMgdXNpbmcgdGhlIDxmaWxlbmFtZT5naXQgcmVxdWVzdC1wdWxsPC9maWxlbmFtZT4gY29tbWFuZCB0byBjb21wb3NlCisgICAgICAgICAgICAgICAgICAgICAgICBhbiBlbWFpbCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG1haW50YWluZXIgcmVxdWVzdGluZyB0aGF0IGEgYnJhbmNoIGJlIHB1bGxlZCBpbnRvIHRoZSBtYXN0ZXIgcmVwb3NpdG9yeSwgc2VlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0aHViLmNvbS9ndWlkZXMvcHVsbC1yZXF1ZXN0cyc+PC91bGluaz4gZm9yIGFuIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlciBjb21tYW5kcyBzdWNoIGFzIDxmaWxlbmFtZT5naXQgc3Rhc2g8L2ZpbGVuYW1lPiBvciBicmFuY2hpbmcgY2FuIGFsc28gYmUgdXNlZCB0byBzYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcywgYnV0IGFyZSBub3QgY292ZXJlZCBpbiB0aGlzIGRvY3VtZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZXhwb3J0LWZvci1leHRlcm5hbC11cHN0cmVhbS1zdWJtaXNzaW9uJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RXhwb3J0aW5nIENoYW5nZXMgZm9yIEV4dGVybmFsIChVcHN0cmVhbSkgU3VibWlzc2lvbjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gZXhwb3J0IGNoYW5nZXMgZm9yIGV4dGVybmFsIHVwc3RyZWFtIHN1Ym1pc3Npb24uCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBwYXRjaCBzZXJpZXMgaXMgbGFyZ2Ugb3IgdGhlIG1haW50YWluZXIgcHJlZmVycyB0byBwdWxsCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMsIHlvdSBjYW4gc3VibWl0IHRoZXNlIGNoYW5nZXMgYnkgdXNpbmcgYSBwdWxsIHJlcXVlc3QuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGl0IGlzIGNvbW1vbiB0byBzZW5kIHBhdGNoZXMgYXMgYW4gZW1haWwgc2VyaWVzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBhbGxvd3MgZWFzeSByZXZpZXcgYW5kIGludGVncmF0aW9uIG9mIHRoZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSBzZW5kaW5nIHBhdGNoZXMgZm9yIHJldmlldyBiZSBzdXJlIHlvdSB1bmRlcnN0YW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgY29tbXVuaXR5IHN0YW5kYXJkcyBmb3Igc3VibWl0dGluZyBhbmQgZG9jdW1lbnRpbmcgY2hhbmdlcyBhbmQgZm9sbG93IHRoZWlyIGJlc3QgcHJhY3RpY2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGtlcm5lbCBwYXRjaGVzIHNob3VsZCBmb2xsb3cgc3RhbmRhcmRzIHN1Y2ggYXM6CisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4Lnl5ei51cy9wYXRjaC1mb3JtYXQuaHRtbCc+PC91bGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyAoaW4gYW55IGxpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBzb3VyY2UgdHJlZSk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtZXNzYWdlcyB1c2VkIHRvIGNvbW1pdCBjaGFuZ2VzIGFyZSBhIGxhcmdlIHBhcnQgb2YgdGhlc2Ugc3RhbmRhcmRzLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIGJlIHN1cmUgdGhhdCB0aGUgaGVhZGVycyBmb3IgZWFjaCBjb21taXQgaGF2ZSB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZm9sbG93IHRoZSBZb2N0byBQcm9qZWN0IGNvbW1pdCBtZXNzYWdlIHN0YW5kYXJkcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjaG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhCisgICAgICAgICAgICAgICAgICAgIENoYW5nZTwvdWxpbms+IiBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGluaXRpYWwgY29tbWl0cyB3ZXJlIG5vdCBwcm9wZXJseSBkb2N1bWVudGVkIG9yIGRvIG5vdCBtZWV0IHRob3NlIHN0YW5kYXJkcywKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiByZS1iYXNlIGJ5IHVzaW5nIHRoZSA8ZmlsZW5hbWU+Z2l0IHJlYmFzZSAtaTwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KKyAgICAgICAgICAgICAgICAgICAgbWFuaXB1bGF0ZSB0aGUgY29tbWl0cyBhbmQKKyAgICAgICAgICAgICAgICAgICAgZ2V0IHRoZW0gaW50byB0aGUgcmVxdWlyZWQgZm9ybWF0LgorICAgICAgICAgICAgICAgICAgICBPdGhlciB0ZWNobmlxdWVzIHN1Y2ggYXMgYnJhbmNoaW5nIGFuZCBjaGVycnktcGlja2luZyBjb21taXRzIGFyZSBhbHNvIHZpYWJsZSBvcHRpb25zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBjb21wbGV0ZSB0aGUgY29tbWl0cywgeW91IGNhbiBnZW5lcmF0ZSB0aGUgZW1haWwgdGhhdCBzZW5kcyB0aGUgcGF0Y2hlcworICAgICAgICAgICAgICAgICAgICB0byB0aGUgbWFpbnRhaW5lcihzKSBvciBsaXN0cyB0aGF0IHJldmlldyBhbmQgaW50ZWdyYXRlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIDxmaWxlbmFtZT5naXQgc2VuZC1lbWFpbDwvZmlsZW5hbWU+IGlzIGNvbW1vbmx5IHVzZWQgdG8gZW5zdXJlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgcGF0Y2hlcyBhcmUgcHJvcGVybHkKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkIGZvciBlYXN5IGFwcGxpY2F0aW9uIGFuZCBhdm9pZCBtYWlsZXItaW5kdWNlZCBwYXRjaCBkYW1hZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBkdW1waW5nIHBhdGNoZXMgZm9yIGV4dGVybmFsIHN1Ym1pc3Npb246CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBkdW1wIHRoZSBsYXN0IDQgY29tbWl0cworICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLS10aHJlYWQgLW4gLW8gfi9yci8gSEVBRF5eXl4KKyAgICAgJCBnaXQgc2VuZC1lbWFpbCAtLWNvbXBvc2UgLS1zdWJqZWN0ICdbUkZDIDAvTl0gJmx0O3BhdGNoIHNlcmllcyBzdW1tYXJ5Jmd0OycgXAorICAgICAgLS10byBmb29AeW9jdG9wcm9qZWN0Lm9yZyAtLXRvIGJhckB5b2N0b3Byb2plY3Qub3JnIFwKKyAgICAgIC0tY2MgbGlzdEB5b2N0b3Byb2plY3Qub3JnICB+L3JyCisgICAgICMgdGhlIGVkaXRvciBpcyBpbnZva2VkIGZvciB0aGUgMC9OIHBhdGNoLCBhbmQgd2hlbiBjb21wbGV0ZSB0aGUgZW50aXJlCisgICAgICMgc2VyaWVzIGlzIHNlbnQgdmlhIGVtYWlsIGZvciByZXZpZXcKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2V4cG9ydC1mb3ItaW1wb3J0LWludG8tb3RoZXItc2NtJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RXhwb3J0aW5nIENoYW5nZXMgZm9yIEltcG9ydCBpbnRvIEFub3RoZXIgU0NNPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSB3YW50IHRvIGV4cG9ydCBjaGFuZ2VzIGZvciBpbXBvcnQgaW50byBhbm90aGVyCisgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSksIHlvdSBjYW4gdXNlIGFueSBvZiB0aGUgcHJldmlvdXNseSBkaXNjdXNzZWQKKyAgICAgICAgICAgICAgICAgICAgdGVjaG5pcXVlcy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgdGhlIHBhdGNoZXMgYXJlIG1hbnVhbGx5IGFwcGxpZWQgdG8gYSBzZWNvbmRhcnkgdHJlZSBhbmQgdGhlbgorICAgICAgICAgICAgICAgICAgICB0aGF0IHRyZWUgaXMgY2hlY2tlZCBpbnRvIHRoZSBTQ00sIHlvdSBjYW4gbG9zZSBjaGFuZ2UgaW5mb3JtYXRpb24gc3VjaCBhcworICAgICAgICAgICAgICAgICAgICBjb21taXQgbG9ncy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBwcm9jZXNzIGlzIG5vdCByZWNvbW1lbmRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTWFueSBTQ01zIGNhbiBkaXJlY3RseSBpbXBvcnQgR2l0IGNvbW1pdHMsIG9yIGNhbiB0cmFuc2xhdGUgR2l0IHBhdGNoZXMgc28gdGhhdAorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBpcyBub3QgbG9zdC4KKyAgICAgICAgICAgICAgICAgICAgVGhvc2UgZmFjaWxpdGllcyBhcmUgU0NNLWRlcGVuZGVudCBhbmQgeW91IHNob3VsZCB1c2UgdGhlbSB3aGVuZXZlciBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2NtLXdvcmtpbmctd2l0aC10aGUteW9jdG8tcHJvamVjdC1rZXJuZWwtaW4tYW5vdGhlci1zY20nPgorICAgICAgICAgICAgPHRpdGxlPldvcmtpbmcgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCBLZXJuZWwgaW4gQW5vdGhlciBTQ008L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGtlcm5lbCBkZXZlbG9wbWVudCBpbiBhbiBTQ00gb3RoZXIgdGhhbiBHaXQsCisgICAgICAgICAgICAgICAgd2hpY2ggaXMgbm90IHRoZSBzYW1lIGFzIGV4cG9ydGluZyBjaGFuZ2VzIHRvIGFub3RoZXIgU0NNIGRlc2NyaWJlZCBlYXJsaWVyLgorICAgICAgICAgICAgICAgIEZvciB0aGlzIHNjZW5hcmlvLCB5b3UgdXNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvCisgICAgICAgICAgICAgICAgZGV2ZWxvcCB0aGUga2VybmVsIGluIGEgZGlmZmVyZW50IFNDTS4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIG11c3QgYmUgdHJ1ZSBmb3IgeW91IHRvIGFjY29tcGxpc2ggdGhpczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGRlbGl2ZXJlZCBZb2N0byBQcm9qZWN0IGtlcm5lbCBtdXN0IGJlIGV4cG9ydGVkIGludG8gdGhlIHNlY29uZAorICAgICAgICAgICAgICAgICAgICAgICAgU0NNLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RGV2ZWxvcG1lbnQgbXVzdCBiZSBleHBvcnRlZCBmcm9tIHRoYXQgc2Vjb25kYXJ5IFNDTSBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZXhwb3J0aW5nLWRlbGl2ZXJlZC1rZXJuZWwtdG8tc2NtJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RXhwb3J0aW5nIHRoZSBEZWxpdmVyZWQgS2VybmVsIHRvIHRoZSBTQ008L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgU0NNLCBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byBleHBvcnQgdGhlIGVudGlyZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSwgYnJhbmNoZXMgYW5kIGFsbCwgaW50byBhIG5ldyBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgcHJlZmVycmVkIGJlY2F1c2UgaXQgaGFzIHRoZSBtb3N0IGZsZXhpYmlsaXR5IGFuZCBwb3RlbnRpYWwgdG8gbWFpbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIG1ldGEgZGF0YSBhc3NvY2lhdGVkIHdpdGggZWFjaCBjb21taXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gYSBkaXJlY3QgaW1wb3J0IG1lY2hhbmlzbSBpcyBub3QgYXZhaWxhYmxlLCBpdCBpcyBzdGlsbCBwb3NzaWJsZSB0bworICAgICAgICAgICAgICAgICAgICBleHBvcnQgYSBicmFuY2ggKG9yIHNlcmllcyBvZiBicmFuY2hlcykgYW5kIGNoZWNrIHRoZW0gaW50byBhIG5ldyByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGlsbHVzdHJhdGUgc29tZSBvZiB0aGUgc3RlcHMgeW91IGNvdWxkIHVzZSB0bworICAgICAgICAgICAgICAgICAgICBpbXBvcnQgdGhlIDxmaWxlbmFtZT55b2N0by9zdGFuZGFyZC9jb21tb24tcGMvYmFzZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBpbnRvIGEgc2Vjb25kYXJ5IFNDTToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjaGVja291dCB5b2N0by9zdGFuZGFyZC9jb21tb24tcGMvYmFzZQorICAgICAkIGNkIC4uIDsgZWNobyBsaW51eC8uZ2l0ICZndDsgLmN2c2lnbm9yZQorICAgICAkIGN2cyBpbXBvcnQgLW0gImluaXRpYWwgaW1wb3J0IiBsaW51eCBNWV9DT01QQU5ZIHN0YXJ0CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNvdWxkIG5vdyByZWxvY2F0ZSB0aGUgQ1ZTIHJlcG9zaXRvcnkgYW5kIHVzZSBpdCBpbiBhIGNlbnRyYWxpemVkIG1hbm5lci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kcyBpbGx1c3RyYXRlIGhvdyB5b3UgY2FuIGNvbmRlbnNlIGFuZCBtZXJnZSB0d28gQlNQcyBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kIFNDTToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjaGVja291dCB5b2N0by9zdGFuZGFyZC9jb21tb24tcGMvYmFzZQorICAgICAkIGdpdCBtZXJnZSB5b2N0by9zdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZQorICAgICAjIHJlc29sdmUgYW55IGNvbmZsaWN0cyBhbmQgY29tbWl0IHRoZW0KKyAgICAgJCBjZCAuLiA7IGVjaG8gbGludXgvLmdpdCAmZ3Q7IC5jdnNpZ25vcmUKKyAgICAgJCBjdnMgaW1wb3J0IC1tICJpbml0aWFsIGltcG9ydCIgbGludXggTVlfQ09NUEFOWSBzdGFydAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0naW1wb3J0aW5nLWNoYW5nZXMtZm9yLWJ1aWxkJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+SW1wb3J0aW5nIENoYW5nZXMgZm9yIHRoZSBCdWlsZDwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25jZSBkZXZlbG9wbWVudCBoYXMgcmVhY2hlZCBhIHN1aXRhYmxlIHBvaW50IGluIHRoZSBzZWNvbmQgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQsIHlvdSBuZWVkIHRvIGV4cG9ydCB0aGUgY2hhbmdlcyBhcyBwYXRjaGVzLgorICAgICAgICAgICAgICAgICAgICBUbyBleHBvcnQgdGhlbSwgcGxhY2UgdGhlIGNoYW5nZXMgaW4gYSByZWNpcGUgYW5kCisgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYXBwbHkgdGhlbSB0byB0aGUga2VybmVsIGR1cmluZyBwYXRjaGluZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnNwLWNyZWF0aW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhIEJTUCBCYXNlZCBvbiBhbiBFeGlzdGluZyBTaW1pbGFyIEJTUDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBvdmVydmlld3MgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgYSBCU1AgYmFzZWQgb24gYW4KKyAgICAgICAgICAgICAgICBleGlzdGluZyBzaW1pbGFyIEJTUC4KKyAgICAgICAgICAgICAgICBUaGUgaW5mb3JtYXRpb24gaXMgaW50cm9kdWN0b3J5IGluIG5hdHVyZSBhbmQgZG9lcyBub3QgcHJvdmlkZSBzdGVwLWJ5LXN0ZXAgZXhhbXBsZXMuCisgICAgICAgICAgICAgICAgRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjcmVhdGUgYSBuZXcgQlNQLCBzZWUKKyAgICAgICAgICAgICAgICB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+Q3JlYXRpbmcgYSBOZXcgQlNQIExheWVyIFVzaW5nIHRoZSB5b2N0by1ic3AgU2NyaXB0PC91bGluaz4iIHNlY3Rpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGUsIG9yIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvVHJhbnNjcmlwdDpfY3JlYXRpbmdfb25lX2dlbmVyaWNfQXRvbV9CU1BfZnJvbV9hbm90aGVyJz5UcmFuc2NyaXB0Ol9jcmVhdGluZ19vbmVfZ2VuZXJpY19BdG9tX0JTUF9mcm9tX2Fub3RoZXI8L3VsaW5rPgorICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGJhc2ljIHN0ZXBzIHlvdSBuZWVkIHRvIGZvbGxvdyBhcmU6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ha2Ugc3VyZSB5b3UgaGF2ZSBzZXQgdXAgYSBsb2NhbCBTb3VyY2UgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBjcmVhdGUgYSBsb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBieSBlaXRoZXIgY3JlYXRpbmcgYSBHaXQgcmVwb3NpdG9yeSAocmVjb21tZW5kZWQpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0aW5nIGEgWW9jdG8gUHJvamVjdCByZWxlYXNlIHRhcmJhbGwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2hvb3NlIGFuIGV4aXN0aW5nIEJTUCBhdmFpbGFibGUgd2l0aCB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVHJ5IHRvIG1hcCB5b3VyIGJvYXJkIGZlYXR1cmVzIGFzIGNsb3NlbHkgdG8gdGhlIGZlYXR1cmVzIG9mIGEgQlNQIHRoYXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgc3VwcG9ydGVkIGFuZCBleGlzdHMgaW4gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBTdGFydGluZyB3aXRoIHNvbWV0aGluZyBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB5b3VyIGJvYXJkIG1ha2VzIGRldmVsb3BpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgQlNQIGVhc2llci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhbGwgdGhlIEJTUHMgdGhhdCBhcmUgc3VwcG9ydGVkIGFuZCBzaGlwIHdpdGggdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBZb2N0byBQcm9qZWN0J3MgRG93bmxvYWQgcGFnZSBhdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy9kb3dubG9hZCc+PC91bGluaz4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QmUgc3VyZSB5b3UgaGF2ZSB0aGUgQmFzZSBCU1A6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGVpdGhlciBoYXZlIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgb2YgdGhlIGJhc2UgQlNQIHNldCB1cCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBkb3dubG9hZGVkIGFuZCBleHRyYWN0ZWQgdGhlIGZpbGVzIGZyb20gYSByZWxlYXNlIEJTUCB0YXJiYWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgRWl0aGVyIG1ldGhvZCBnaXZlcyB5b3UgYWNjZXNzIHRvIHRoZSBCU1Agc291cmNlIGZpbGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ha2UgYSBjb3B5IG9mIHRoZSBleGlzdGluZyBCU1AsIHRodXMgaXNvbGF0aW5nIHlvdXIgbmV3CisgICAgICAgICAgICAgICAgICAgICAgICBCU1Agd29yazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ29weWluZyB0aGUgZXhpc3RpbmcgQlNQIGZpbGUgc3RydWN0dXJlIGdpdmVzIHlvdSBhIG5ldyBhcmVhIGluIHdoaWNoIHRvIHdvcmsuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFrZSBjb25maWd1cmF0aW9uIGFuZCByZWNpcGUgY2hhbmdlcyB0byB5b3VyIG5ldyBCU1A6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gY2hhbmdlcyBpbnZvbHZlIHRoZSBmaWxlcyBpbiB0aGUgQlNQJ3MgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlcyBpbmNsdWRlIGNyZWF0aW5nIGEgbWFjaGluZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgYW5kIGVkaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGlkZW50aWZ5IHRoZSBrZXJuZWwgeW91IHdpbGwgYmUgdXNpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICBSZWNpcGUgY2hhbmdlcyBpbmNsdWRlIHJlbW92aW5nLCBtb2RpZnlpbmcsIG9yIGFkZGluZyBuZXcgcmVjaXBlIGZpbGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0IHRoZSBidWlsZCBwcm9jZXNzIG9uIHdoYXQgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiB0aGUgaW1hZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHJlcGFyZSBmb3IgdGhlIGJ1aWxkOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCZWZvcmUgeW91IGFjdHVhbGx5IGluaXRpYXRlIHRoZSBidWlsZCwgeW91IG5lZWQgdG8gc2V0IHVwIHRoZSBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgYnkgc291cmNpbmcgdGhlIGVudmlyb25tZW50IGluaXRpYWxpemF0aW9uIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50LCB5b3UgbmVlZCB0byBtYWtlIHNvbWUgYnVpbGQgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyB0byB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgdGhlIGltYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIEJpdEJha2UgdG8gY3JlYXRlIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGRlY2lkZSBvbiB0aGUgdHlwZSBvZiBpbWFnZSB5b3UgYXJlIGdvaW5nIHRvIGJ1aWxkIChlLmcuIG1pbmltYWwsIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLCBzYXRvLCBhbmQgc28gZm9ydGgpIGFuZCB0aGVuIHN0YXJ0IHRoZSBidWlsZCB1c2luZyB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RpcC1kaXJ0eS1zdHJpbmcnPgorICAgICAgICAgICAgPHRpdGxlPiItZGlydHkiIFN0cmluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIGtlcm5lbCBpbWFnZXMgYXJlIGJlaW5nIGJ1aWx0IHdpdGggIi1kaXJ0eSIgb24gdGhlIGVuZCBvZiB0aGUgdmVyc2lvbgorICAgICAgICAgICAgICAgIHN0cmluZywgdGhpcyBzaW1wbHkgbWVhbnMgdGhhdCBtb2RpZmljYXRpb25zIGluIHRoZSBzb3VyY2UKKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaGF2ZSBub3QgYmVlbiBjb21taXR0ZWQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBzdGF0dXMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBhYm92ZSBHaXQgY29tbWFuZCB0byByZXBvcnQgbW9kaWZpZWQsIHJlbW92ZWQsIG9yIGFkZGVkIGZpbGVzLgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgY29tbWl0IHRob3NlIGNoYW5nZXMgdG8gdGhlIHRyZWUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgd2lsbCBiZSBzYXZlZCwKKyAgICAgICAgICAgICAgICBleHBvcnRlZCwgb3IgdXNlZC4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBjb21taXQgdGhlIGNoYW5nZXMgeW91IG5lZWQgdG8gcmVidWlsZCB0aGUga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBicnV0ZSBmb3JjZSBwaWNrdXAgYW5kIGNvbW1pdCBhbGwgc3VjaCBwZW5kaW5nIGNoYW5nZXMsIGVudGVyIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBhZGQgLgorICAgICAkIGdpdCBjb21taXQgLXMgLWEgLW0gImdldHRpbmcgcmlkIG9mIC1kaXJ0eSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5leHQsIHJlYnVpbGQgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1mYXEueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1mYXEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOTlhZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWZhcS54bWwKQEAgLTAsMCArMSwxNDAgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxhcHBlbmRpeCBpZD0na2VybmVsLWRldi1mYXEnPgorPHRpdGxlPktlcm5lbCBEZXZlbG9wbWVudCBGQVE8L3RpdGxlPgorCis8c2VjdGlvbiBpZD0na2VybmVsLWRldi1mYXEtc2VjdGlvbic+CisgICAgPHRpdGxlPkNvbW1vbiBRdWVzdGlvbnMgYW5kIFNvbHV0aW9uczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0cyBzb21lIHNvbHV0aW9ucyBmb3IgY29tbW9uIHF1ZXN0aW9ucy4KKworCisgICAgICAgIDxxYW5kYXNldD4KKyAgICAgICAgICAgIDxxYW5kYWVudHJ5PgorICAgICAgICAgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBIb3cgZG8gSSB1c2UgbXkgb3duIExpbnV4IGtlcm5lbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPworICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBSZWZlciB0byB0aGUgIjxsaW5rIGxpbmtlbmQ9J2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uJz5DaGFuZ2luZyB0aGUgQ29uZmlndXJhdGlvbjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvYW5zd2VyPgorICAgICAgICAgICAgPC9xYW5kYWVudHJ5PgorCisgICAgICAgICAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSG93IGRvIEkgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzPworICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyIHRvIHRoZSAiPGxpbmsgbGlua2VuZD0nZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2Fuc3dlcj4KKyAgICAgICAgICAgIDwvcWFuZGFlbnRyeT4KKworICAgICAgICAgICAgPHFhbmRhZW50cnk+CisgICAgICAgICAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvdyBkbyBJIHVzZSBteSBvd24gTGludXgga2VybmVsIHNvdXJjZXM/CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICAgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXIgdG8gdGhlICI8bGluayBsaW5rZW5kPSd3b3JraW5nLXdpdGgteW91ci1vd24tc291cmNlcyc+V29ya2luZyBXaXRoIFlvdXIgT3duIFNvdXJjZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2Fuc3dlcj4KKyAgICAgICAgICAgIDwvcWFuZGFlbnRyeT4KKworICAgICAgICAgICAgPHFhbmRhZW50cnk+CisgICAgICAgICAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvdyBkbyBJIGluc3RhbGwvbm90LWluc3RhbGwgdGhlIGtlcm5lbCBpbWFnZSBvbiB0aGUgcm9vdGZzPworICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBrZXJuZWwgaW1hZ2UgKGUuZy4gPGZpbGVuYW1lPnZtbGludXo8L2ZpbGVuYW1lPikgaXMgcHJvdmlkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSA8ZmlsZW5hbWU+a2VybmVsLWltYWdlPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlIHJlY2lwZXMgZGVwZW5kIG9uIDxmaWxlbmFtZT5rZXJuZWwtYmFzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gc3BlY2lmeSB3aGV0aGVyIG9yIG5vdCB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSBpcyBpbnN0YWxsZWQgaW4gdGhlIGdlbmVyYXRlZCByb290IGZpbGVzeXN0ZW0sIG92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFNfa2VybmVsLWJhc2U8L2ZpbGVuYW1lPiB0byBpbmNsdWRlIG9yIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSAia2VybmVsLWltYWdlIi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5TZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctYmJhcHBlbmQtZmlsZXMnPlVzaW5nIC5iYmFwcGVuZCBGaWxlczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgICAgICBob3cgdG8gdXNlIGFuIGFwcGVuZCBmaWxlIHRvIG92ZXJyaWRlIG1ldGFkYXRhLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9hbnN3ZXI+CisgICAgICAgICAgICA8L3FhbmRhZW50cnk+CisKKyAgICAgICAgICAgIDxxYW5kYWVudHJ5PgorICAgICAgICAgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBIb3cgZG8gSSBpbnN0YWxsIGEgc3BlY2lmaWMga2VybmVsIG1vZHVsZT8KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgICAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBMaW51eCBrZXJuZWwgbW9kdWxlcyBhcmUgcGFja2FnZWQgaW5kaXZpZHVhbGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gZW5zdXJlIGEgc3BlY2lmaWMga2VybmVsIG1vZHVsZSBpcyBpbmNsdWRlZCBpbiBhbiBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgaXQgaW4gdGhlIGFwcHJvcHJpYXRlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlc2Ugb3RoZXIgdmFyaWFibGVzIGFyZSB1c2VmdWwgZm9yIGluc3RhbGxpbmcgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkVfRVhUUkFfUkRFUEVORFMnPjxmaWxlbmFtZT5NQUNISU5FX0VYVFJBX1JERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc2V0IHRoZSBmb2xsb3dpbmcgaW4gdGhlIDxmaWxlbmFtZT5xZW11eDg2LmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSB0byBpbmNsdWRlIHRoZSA8ZmlsZW5hbWU+YWIxMjM8L2ZpbGVuYW1lPiBrZXJuZWwgbW9kdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBpbWFnZXMgYnVpbHQgZm9yIHRoZSA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+IG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgKz0gImtlcm5lbC1tb2R1bGUtYWIxMjMiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2luY29ycG9yYXRpbmctb3V0LW9mLXRyZWUtbW9kdWxlcyc+SW5jb3Jwb3JhdGluZyBPdXQtb2YtVHJlZSBNb2R1bGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2Fuc3dlcj4KKyAgICAgICAgICAgIDwvcWFuZGFlbnRyeT4KKworICAgICAgICAgICAgPHFhbmRhZW50cnk+CisgICAgICAgICAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvdyBkbyBJIGNoYW5nZSB0aGUgTGludXgga2VybmVsIGNvbW1hbmQgbGluZT8KKyAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBMaW51eCBrZXJuZWwgY29tbWFuZCBsaW5lIGlzIHR5cGljYWxseSBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYWNoaW5lIGNvbmZpZyB1c2luZyB0aGUgPGZpbGVuYW1lPkFQUEVORDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY2FuIGFkZCBzb21lIGhlbHBmdWwgZGVidWcgaW5mb3JtYXRpb24gZG9pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEFQUEVORCArPSAicHJpbnRrLnRpbWU9eSBpbml0Y2FsbF9kZWJ1ZyBkZWJ1ZyIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvYW5zd2VyPgorICAgICAgICAgICAgPC9xYW5kYWVudHJ5PgorICAgICAgICA8L3FhbmRhc2V0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKzwvYXBwZW5kaXg+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtaW50cm8ueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1pbnRyby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzZTUwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtaW50cm8ueG1sCkBAIC0wLDAgKzEsMTQ5IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0na2VybmVsLWRldi1pbnRybyc+Cis8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworPCEtLQorPHBhcmE+CisgICAgPGVtcGhhc2lzPkFSIC0gRGFycmVuIEhhcnQ6PC9lbXBoYXNpcz4gIFNlZSBpZiB0aGUgY29uY2VwdHMgaW4gdGhlc2UKKyAgICB0aHJlZSBidWxsZXRzIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgaW4gc29tZXdoZXJlIGluIHRoaXMgbWFudWFsOgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EbyB3ZSBjb252ZXkgdGhhdCBvdXIga2VybmVsIEdpdCByZXBvc2l0b3JpZXMKKyAgICAgICAgICAgIGhhdmUgYSBjbGVhciBhbmQgY29udGludW91cyBoaXN0b3J5LCBzaW1pbGFyIHRvIHRoZSB3YXkgdGhlCisgICAgICAgICAgICBrZXJuZWwgR2l0IHJlcG9zaXRvcmllcyBmb3IgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZG8uCisgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvZXMgdGhlIG1hbnVhbCBub3RlIHRoYXQgWW9jdG8gUHJvamVjdCBkZWxpdmVycworICAgICAgICAgICAgYSBrZXkgc2V0IG9mIHN1cHBvcnRlZCBrZXJuZWwgdHlwZXMsIHdoZXJlCisgICAgICAgICAgICBlYWNoIHR5cGUgaXMgdGFpbG9yZWQgdG8gbWVldCBhIHNwZWNpZmljIHVzZSAoZS5nLiBuZXR3b3JraW5nLAorICAgICAgICAgICAgY29uc3VtZXIsIGRldmljZXMsIGFuZCBzbyBmb3J0aCkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EbyB3ZSBjb252ZXkgdGhhdCB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIGEKKyAgICAgICAgICAgIEdpdCBicmFuY2hpbmcgc3RyYXRlZ3kgdGhhdCwgZnJvbSBhCisgICAgICAgICAgICBkZXZlbG9wZXIncyBwb2ludCBvZiB2aWV3LCByZXN1bHRzIGluIGEgbGluZWFyIHBhdGggZnJvbSB0aGUKKyAgICAgICAgICAgIGJhc2VsaW5lIGtlcm5lbC5vcmcsIHRocm91Z2ggYSBzZWxlY3QgZ3JvdXAgb2YgZmVhdHVyZXMgYW5kCisgICAgICAgICAgICBlbmRzIHdpdGggdGhlaXIgQlNQLXNwZWNpZmljIGNvbW1pdHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+Cis8L3BhcmE+CistLT4KKworICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtZGV2LW92ZXJ2aWV3Jz4KKyAgICAgICAgPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJlZ2FyZGxlc3Mgb2YgaG93IHlvdSBpbnRlbmQgdG8gbWFrZSB1c2Ugb2YgdGhlIFlvY3RvIFByb2plY3QsCisgICAgICAgICAgICBjaGFuY2VzIGFyZSB5b3Ugd2lsbCB3b3JrIHdpdGggdGhlIExpbnV4IGtlcm5lbC4KKyAgICAgICAgICAgIFRoaXMgbWFudWFsIHByb3ZpZGVzIGJhY2tncm91bmQgaW5mb3JtYXRpb24gb24gdGhlIFlvY3RvIExpbnV4IGtlcm5lbAorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4sCisgICAgICAgICAgICBkZXNjcmliZXMgY29tbW9uIHRhc2tzIHlvdSBjYW4gcGVyZm9ybSB1c2luZyB0aGUga2VybmVsIHRvb2xzLAorICAgICAgICAgICAgYW5kIHNob3dzIHlvdSBob3cgdG8gdXNlIHRoZSBrZXJuZWwgTWV0YWRhdGEgbmVlZGVkIHRvIHdvcmsgd2l0aAorICAgICAgICAgICAgdGhlIGtlcm5lbCBpbnNpZGUgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgPC9wYXJhPgorCisgICAgICAgPHBhcmE+CisgICAgICAgICAgICBFYWNoIFlvY3RvIFByb2plY3QgcmVsZWFzZSBoYXMgYSBzZXQgb2YgbGludXgteW9jdG8gcmVjaXBlcywgd2hvc2UKKyAgICAgICAgICAgIEdpdCByZXBvc2l0b3JpZXMgeW91IGNhbiB2aWV3IGluIHRoZSBZb2N0bworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4gdW5kZXIKKyAgICAgICAgICAgIHRoZSAiWW9jdG8gTGludXggS2VybmVsIiBoZWFkaW5nLgorICAgICAgICAgICAgTmV3IHJlY2lwZXMgZm9yIHRoZSByZWxlYXNlIHRyYWNrIHRoZSBsYXRlc3QgdXBzdHJlYW0gZGV2ZWxvcG1lbnRzCisgICAgICAgICAgICBhbmQgaW50cm9kdWNlIG5ld2x5LXN1cHBvcnRlZCBwbGF0Zm9ybXMuCisgICAgICAgICAgICBQcmV2aW91cyByZWNpcGVzIGluIHRoZSByZWxlYXNlIGFyZSByZWZyZXNoZWQgYW5kIHN1cHBvcnRlZCBmb3IgYXQKKyAgICAgICAgICAgIGxlYXN0IG9uZSBhZGRpdGlvbmFsIHJlbGVhc2UuCisgICAgICAgICAgICBBcyB0aGV5IGFsaWduLCB0aGVzZSBwcmV2aW91cyByZWxlYXNlcyBhcmUgdXBkYXRlZCB0byBpbmNsdWRlIHRoZQorICAgICAgICAgICAgbGF0ZXN0IGZyb20gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L29yZ2FuaXphdGlvbi9sb25nLXRlcm0tc3VwcG9ydC1pbml0aWF0aXZlLWx0c2knPkxvbmcgVGVybSBTdXBwb3J0IEluaXRpYXRpdmU8L3VsaW5rPgorICAgICAgICAgICAgKExUU0kpIHByb2plY3QuCisgICAgICAgICAgICBBbHNvIGluY2x1ZGVkIGlzIGEgbGludXgteW9jdG8gZGV2ZWxvcG1lbnQgcmVjaXBlCisgICAgICAgICAgICAoPGZpbGVuYW1lPmxpbnV4LXlvY3RvLWRldi5iYjwvZmlsZW5hbWU+KSBzaG91bGQgeW91IHdhbnQgdG8gd29yaworICAgICAgICAgICAgd2l0aCB0aGUgdmVyeSBsYXRlc3QgaW4gdXBzdHJlYW0gTGludXgga2VybmVsIGRldmVsb3BtZW50IGFuZAorICAgICAgICAgICAga2VybmVsIE1ldGFkYXRhIGRldmVsb3BtZW50LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBhbHNvIHByb3ZpZGVzIGEgcG93ZXJmdWwgc2V0IG9mIGtlcm5lbAorICAgICAgICAgICAgdG9vbHMgZm9yIG1hbmFnaW5nIExpbnV4IGtlcm5lbCBzb3VyY2VzIGFuZCBjb25maWd1cmF0aW9uIGRhdGEuCisgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGVzZSB0b29scyB0byBtYWtlIGEgc2luZ2xlIGNvbmZpZ3VyYXRpb24gY2hhbmdlLAorICAgICAgICAgICAgYXBwbHkgbXVsdGlwbGUgcGF0Y2hlcywgb3Igd29yayB3aXRoIHlvdXIgb3duIGtlcm5lbCBzb3VyY2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUga2VybmVsIHRvb2xzIGFsbG93IHlvdSB0byBnZW5lcmF0ZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmcmFnbWVudHMgdGhhdCBzcGVjaWZ5IG9ubHkgd2hhdCB5b3UgbXVzdCwgYW5kIG5vdGhpbmcgbW9yZS4KKyAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIG9ubHkgbmVlZCB0byBjb250YWluIHRoZSBoaWdoZXN0IGxldmVsCisgICAgICAgICAgICB2aXNpYmxlIDxmaWxlbmFtZT5DT05GSUc8L2ZpbGVuYW1lPiBvcHRpb25zIGFzIHByZXNlbnRlZCBieSB0aGUgTGludXgKKyAgICAgICAgICAgIGtlcm5lbCA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IHN5c3RlbS4KKyAgICAgICAgICAgIENvbnRyYXN0IHRoaXMgYWdhaW5zdCBhIGNvbXBsZXRlIExpbnV4IGtlcm5lbAorICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiwgd2hpY2ggaW5jbHVkZXMgYWxsIHRoZSBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICBzZWxlY3RlZCA8ZmlsZW5hbWU+Q09ORklHPC9maWxlbmFtZT4gb3B0aW9ucy4KKyAgICAgICAgICAgIFRoaXMgZWZmaWNpZW5jeSByZWR1Y2VzIHlvdXIgbWFpbnRlbmFuY2UgZWZmb3J0IGFuZCBhbGxvd3MgeW91CisgICAgICAgICAgICB0byBmdXJ0aGVyIHNlcGFyYXRlIHlvdXIgY29uZmlndXJhdGlvbiBpbiB3YXlzIHRoYXQgbWFrZSBzZW5zZSBmb3IKKyAgICAgICAgICAgIHlvdXIgcHJvamVjdC4KKyAgICAgICAgICAgIEEgY29tbW9uIHNwbGl0IHNlcGFyYXRlcyBwb2xpY3kgYW5kIGhhcmR3YXJlLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGFsbCB5b3VyIGtlcm5lbHMgbWlnaHQgc3VwcG9ydAorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5wcm9jPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5zeXM8L2ZpbGVuYW1lPiBmaWxlc3lzdGVtcywKKyAgICAgICAgICAgIGJ1dCBvbmx5IHNwZWNpZmljIGJvYXJkcyByZXF1aXJlIHNvdW5kLCBVU0IsIG9yIHNwZWNpZmljIGRyaXZlcnMuCisgICAgICAgICAgICBTcGVjaWZ5aW5nIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGluZGl2aWR1YWxseSBhbGxvd3MgeW91IHRvIGFnZ3JlZ2F0ZQorICAgICAgICAgICAgdGhlbSB0b2dldGhlciBhcyBuZWVkZWQsIGJ1dCBtYWludGFpbnMgdGhlbSBpbiBvbmx5IG9uZSBwbGFjZS4KKyAgICAgICAgICAgIFNpbWlsYXIgbG9naWMgYXBwbGllcyB0byBzZXBhcmF0aW5nIHNvdXJjZSBjaGFuZ2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZG8gbm90IG1haW50YWluIHlvdXIgb3duIGtlcm5lbCBzb3VyY2VzIGFuZCBuZWVkIHRvIG1ha2UKKyAgICAgICAgICAgIG9ubHkgbWluaW1hbCBjaGFuZ2VzIHRvIHRoZSBzb3VyY2VzLCB0aGUgcmVsZWFzZWQgcmVjaXBlcyBwcm92aWRlIGEKKyAgICAgICAgICAgIHZldHRlZCBiYXNlIHVwb24gd2hpY2ggdG8gbGF5ZXIgeW91ciBjaGFuZ2VzLgorICAgICAgICAgICAgRG9pbmcgc28gYWxsb3dzIHlvdSB0byBiZW5lZml0IGZyb20gdGhlIGNvbnRpbnVhbCBrZXJuZWwKKyAgICAgICAgICAgIGludGVncmF0aW9uIGFuZCB0ZXN0aW5nIHBlcmZvcm1lZCBkdXJpbmcgZGV2ZWxvcG1lbnQgb2YgdGhlCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiwgaW5zdGVhZCwgeW91IGhhdmUgYSB2ZXJ5IHNwZWNpZmljIExpbnV4IGtlcm5lbCBzb3VyY2UgdHJlZQorICAgICAgICAgICAgYW5kIGFyZSB1bmFibGUgdG8gYWxpZ24gd2l0aCBvbmUgb2YgdGhlIG9mZmljaWFsIGxpbnV4LXlvY3RvCisgICAgICAgICAgICByZWNpcGVzLCBhbiBhbHRlcm5hdGl2ZSBleGlzdHMgYnkgd2hpY2ggeW91IGNhbiB1c2UgdGhlIFlvY3RvCisgICAgICAgICAgICBQcm9qZWN0IExpbnV4IGtlcm5lbCB0b29scyB3aXRoIHlvdXIgb3duIGtlcm5lbCBzb3VyY2VzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2tlcm5lbC1kZXYtb3RoZXItcmVzb3VyY2VzJz4KKyAgICAgICAgPHRpdGxlPk90aGVyIFJlc291cmNlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgc2VjdGlvbnMgdGhhdCBmb2xsb3cgcHJvdmlkZSBpbnN0cnVjdGlvbnMgZm9yIGNvbXBsZXRpbmcKKyAgICAgICAgICAgIHNwZWNpZmljIExpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCB0YXNrcy4KKyAgICAgICAgICAgIFRoZXNlIGluc3RydWN0aW9ucyBhc3N1bWUgeW91IGFyZSBjb21mb3J0YWJsZSB3b3JraW5nIHdpdGgKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9vcGVuZW1iZWRkZWQub3JnL3dpa2kvQml0YmFrZSc+Qml0QmFrZTwvdWxpbms+CisgICAgICAgICAgICByZWNpcGVzIGFuZCBiYXNpYyBvcGVuLXNvdXJjZSBkZXZlbG9wbWVudCB0b29scy4KKyAgICAgICAgICAgIFVuZGVyc3RhbmRpbmcgdGhlc2UgY29uY2VwdHMgd2lsbCBmYWNpbGl0YXRlIHRoZSBwcm9jZXNzIG9mIHdvcmtpbmcKKyAgICAgICAgICAgIHdpdGggdGhlIGtlcm5lbCByZWNpcGVzLgorICAgICAgICAgICAgSWYgeW91IGZpbmQgeW91IG5lZWQgc29tZSBhZGRpdGlvbmFsIGJhY2tncm91bmQsIHBsZWFzZSBiZSBzdXJlIHRvCisgICAgICAgICAgICByZXZpZXcgYW5kIHVuZGVyc3RhbmQgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyc+WW9jdG8gUHJvamVjdCBRdWljayBTdGFydDwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2Rldi1tb2RpZnlpbmctc291cmNlLWNvZGUnPk1vZGlmeWluZyBTb3VyY2UgQ29kZTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21vZGlmeWluZy10aGUta2VybmVsJz5Nb2RpZnlpbmcgdGhlIEtlcm5lbDwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGaW5hbGx5LCB3aGlsZSB0aGlzIGRvY3VtZW50IGZvY3VzZXMgb24gdGhlIG1hbnVhbCBjcmVhdGlvbiBvZgorICAgICAgICAgICAgcmVjaXBlcywgcGF0Y2hlcywgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgdG9vbHMgYXJlIGF2YWlsYWJsZSB0byBhdXRvbWF0ZQorICAgICAgICAgICAgdGhpcyBwcm9jZXNzIHdpdGggZXhpc3RpbmcgY29udGVudCBhbmQgd29yayB3ZWxsIHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgIGluaXRpYWwgZnJhbWV3b3JrIGFuZCBib2lsZXJwbGF0ZSBjb2RlLgorICAgICAgICAgICAgRm9yIGRldGFpbHMgb24gdGhlc2UgdG9vbHMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyN1c2luZy10aGUteW9jdG8tcHJvamVjdHMtYnNwLXRvb2xzJz5Vc2luZyB0aGUgWW9jdG8gUHJvamVjdCdzIEJTUCBUb29sczwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MKKyAgICAgICAgICAgIEd1aWRlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LW1haW50LWFwcHgueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1tYWludC1hcHB4LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmIwY2Y2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1tYWludC1hcHB4LnhtbApAQCAtMCwwICsxLDIyMCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGFwcGVuZGl4IGlkPSdrZXJuZWwtZGV2LW1haW50LWFwcHgnPgorPHRpdGxlPktlcm5lbCBNYWludGVuYW5jZTwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0ndHJlZS1jb25zdHJ1Y3Rpb24nPgorICAgICAgICA8dGl0bGU+VHJlZSBDb25zdHJ1Y3Rpb248L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgY29uc3RydWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yaWVzCisgICAgICAgICAgICBhcyBhY2NvbXBsaXNoZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgdGVhbSB0byBjcmVhdGUga2VybmVsIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgIFRoZXNlIGtlcm5lbCByZXBvc2l0b3JpZXMgYXJlIGZvdW5kIHVuZGVyIHRoZSBoZWFkaW5nICJZb2N0byBMaW51eCBLZXJuZWwiIGF0CisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPiZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaTwvdWxpbms+CisgICAgICAgICAgICBhbmQgY2FuIGJlIHNoaXBwZWQgYXMgcGFydCBvZiBhIFlvY3RvIFByb2plY3QgcmVsZWFzZS4KKyAgICAgICAgICAgIFRoZSB0ZWFtIGNyZWF0ZXMgdGhlc2UgcmVwb3NpdG9yaWVzIGJ5CisgICAgICAgICAgICBjb21waWxpbmcgYW5kIGV4ZWN1dGluZyB0aGUgc2V0IG9mIGZlYXR1cmUgZGVzY3JpcHRpb25zIGZvciBldmVyeSBCU1AKKyAgICAgICAgICAgIGFuZCBmZWF0dXJlIGluIHRoZSBwcm9kdWN0LgorICAgICAgICAgICAgVGhvc2UgZmVhdHVyZSBkZXNjcmlwdGlvbnMgbGlzdCBhbGwgbmVjZXNzYXJ5IHBhdGNoZXMsCisgICAgICAgICAgICBjb25maWd1cmF0aW9uLCBicmFuY2hpbmcsIHRhZ2dpbmcgYW5kIGZlYXR1cmUgZGl2aXNpb25zIGZvdW5kIGluIGEga2VybmVsLgorICAgICAgICAgICAgVGh1cywgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHJlcG9zaXRvcnkgKG9yIHRyZWUpIGlzIGJ1aWx0LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGV4aXN0ZW5jZSBvZiB0aGlzIHRyZWUgYWxsb3dzIHlvdSB0byBhY2Nlc3MgYW5kIGNsb25lIGEgcGFydGljdWxhcgorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBrZXJuZWwgcmVwb3NpdG9yeSBhbmQgdXNlIGl0IHRvIGJ1aWxkIGltYWdlcyBiYXNlZCBvbiB0aGVpciBjb25maWd1cmF0aW9ucworICAgICAgICAgICAgYW5kIGZlYXR1cmVzLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZSBmaWxlcyB1c2VkIHRvIGRlc2NyaWJlIGFsbCB0aGUgdmFsaWQgZmVhdHVyZXMgYW5kIEJTUHMKKyAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBpbiBhbnkgY2xvbmUgb2YgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSByZXBvc2l0b3J5CisgICAgICAgICAgICBHaXQgdHJlZS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgY2xvbmVzIHRoZSBZb2N0byBQcm9qZWN0IGJhc2VsaW5lIGtlcm5lbCB0aGF0CisgICAgICAgICAgICBicmFuY2hlZCBvZmYgb2YgPGZpbGVuYW1lPmxpbnV4Lm9yZzwvZmlsZW5hbWU+IHZlcnNpb24gMy4xOToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xOQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgRm9yIGFub3RoZXIgZXhhbXBsZSBvZiBob3cgdG8gc2V0IHVwIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgb2YgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgIGtlcm5lbCBmaWxlcywgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2xvY2FsLWtlcm5lbC1maWxlcyc+WW9jdG8gUHJvamVjdCBLZXJuZWw8L3VsaW5rPiIgYnVsbGV0ZWQKKyAgICAgICAgICAgIGl0ZW0gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBjbG9uZWQgdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSBvbiB5b3VyIGxvY2FsIG1hY2hpbmUsIHlvdSBjYW4KKyAgICAgICAgICAgIHN3aXRjaCB0byB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2ggd2l0aGluIHRoZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgYXNzdW1lcyB0aGUgbG9jYWwgR2l0IHJlcG9zaXRvcnkgZm9yIHRoZSBrZXJuZWwgaXMgaW4KKyAgICAgICAgICAgIGEgdG9wLWxldmVsIGRpcmVjdG9yeSBuYW1lZCA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIGxpbnV4LXlvY3RvLTMuMTkKKyAgICAgJCBnaXQgY2hlY2tvdXQgLWIgbWV0YSBvcmlnaW4vbWV0YQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBjaGVja2VkIG91dCBhbmQgc3dpdGNoZWQgdG8gdGhlIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLAorICAgICAgICAgICAgeW91IGNhbiBzZWUgYSBzbmFwc2hvdCBvZiBhbGwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBmZWF0dXJlIGRlc2NyaXB0aW9ucyB0aGF0IGFyZQorICAgICAgICAgICAgdXNlZCB0byBidWlsZCB0aGF0IHBhcnRpY3VsYXIga2VybmVsIHJlcG9zaXRvcnkuCisgICAgICAgICAgICBUaGVzZSBkZXNjcmlwdGlvbnMgYXJlIGluIHRoZSBmb3JtIG9mIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3Ugc2hvdWxkIHJlYWxpemUsIGhvd2V2ZXIsIHRoYXQgYnJvd3NpbmcgeW91ciBsb2NhbCBrZXJuZWwgcmVwb3NpdG9yeQorICAgICAgICAgICAgZm9yIGZlYXR1cmUgZGVzY3JpcHRpb25zIGFuZCBwYXRjaGVzIGlzIG5vdCBhbiBlZmZlY3RpdmUgd2F5IHRvIGRldGVybWluZSB3aGF0IGlzIGluIGEKKyAgICAgICAgICAgIHBhcnRpY3VsYXIga2VybmVsIGJyYW5jaC4KKyAgICAgICAgICAgIEluc3RlYWQsIHlvdSBzaG91bGQgdXNlIEdpdCBkaXJlY3RseSB0byBkaXNjb3ZlciB0aGUgY2hhbmdlcyBpbiBhIGJyYW5jaC4KKyAgICAgICAgICAgIFVzaW5nIEdpdCBpcyBhbiBlZmZpY2llbnQgYW5kIGZsZXhpYmxlIHdheSB0byBpbnNwZWN0IGNoYW5nZXMgdG8gdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEdyb3VuZCB1cCByZWNvbnN0cnVjdGlvbiBvZiB0aGUgY29tcGxldGUga2VybmVsIHRyZWUgaXMgYW4gYWN0aW9uIG9ubHkgdGFrZW4gYnkgdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCB0ZWFtIGR1cmluZyBhbiBhY3RpdmUgZGV2ZWxvcG1lbnQgY3ljbGUuCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIGEgY2xvbmUgb2YgdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSwgeW91IGFyZSBzaW1wbHkgbWFraW5nIGl0CisgICAgICAgICAgICAgICAgZWZmaWNpZW50bHkgYXZhaWxhYmxlIGZvciBidWlsZGluZyBhbmQgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0ZXBzIGRlc2NyaWJlIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBZb2N0byBQcm9qZWN0IFRlYW0gY29uc3RydWN0cworICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSBHaXQgcmVwb3NpdG9yeSAob3IgdHJlZSkgZm91bmQgYXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+PC91bGluaz4gZ2l2ZW4gdGhlCisgICAgICAgICAgICBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgdG9wLWxldmVsIGtlcm5lbCBmZWF0dXJlIG9yIEJTUC4KKyAgICAgICAgICAgIFRoZXNlIGFyZSB0aGUgYWN0aW9ucyB0aGF0IGVmZmVjdGl2ZWx5IGNyZWF0ZSB0aGUgdHJlZQorICAgICAgICAgICAgdGhhdCBpbmNsdWRlcyB0aGUgbmV3IGZlYXR1cmUsIHBhdGNoIG9yIEJTUDoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSB0b3AtbGV2ZWwga2VybmVsIGZlYXR1cmUgaXMgcGFzc2VkIHRvIHRoZSBrZXJuZWwgYnVpbGQgc3Vic3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBOb3JtYWxseSwgdGhpcyBmZWF0dXJlIGlzIGEgQlNQIGZvciBhIHBhcnRpY3VsYXIga2VybmVsIHR5cGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBmaWxlIHRoYXQgZGVzY3JpYmVzIHRoZSB0b3AtbGV2ZWwgZmVhdHVyZSBpcyBsb2NhdGVkIGJ5IHNlYXJjaGluZworICAgICAgICAgICAgICAgICAgICB0aGVzZSBzeXN0ZW0gZGlyZWN0b3JpZXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGluLXRyZWUga2VybmVsLWNhY2hlIGRpcmVjdG9yaWVzLCB3aGljaCBhcmUgbG9jYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFyZWFzIHBvaW50ZWQgdG8gYnkgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaW4gcmVjaXBlczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgdHlwaWNhbCBidWlsZCwgdGhlIHRhcmdldCBvZiB0aGUgc2VhcmNoIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZSBkZXNjcmlwdGlvbiBpbiBhbiA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgd2hvc2UgbmFtZSBmb2xsb3dzIHRoaXMgZm9ybWF0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+LTxyZXBsYWNlYWJsZT5rZXJuZWxfdHlwZTwvcmVwbGFjZWFibGU+LnNjYworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk9uY2UgbG9jYXRlZCwgdGhlIGZlYXR1cmUgZGVzY3JpcHRpb24gaXMgZWl0aGVyIGNvbXBpbGVkIGludG8gYSBzaW1wbGUgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIG9mIGFjdGlvbnMsIG9yIGludG8gYW4gZXhpc3RpbmcgZXF1aXZhbGVudCBzY3JpcHQgdGhhdCBpcyBhbHJlYWR5IHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHNoaXBwZWQga2VybmVsLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRyYSBmZWF0dXJlcyBhcmUgYXBwZW5kZWQgdG8gdGhlIHRvcC1sZXZlbCBmZWF0dXJlIGRlc2NyaXB0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBmZWF0dXJlcyBjYW4gY29tZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS0VSTkVMX0ZFQVRVUkVTJz48ZmlsZW5hbWU+S0VSTkVMX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiByZWNpcGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FYWNoIGV4dHJhIGZlYXR1cmUgaXMgbG9jYXRlZCwgY29tcGlsZWQgYW5kIGFwcGVuZGVkIHRvIHRoZSBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgYXMgZGVzY3JpYmVkIGluIHN0ZXAgdGhyZWUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBzY3JpcHQgaXMgZXhlY3V0ZWQgdG8gcHJvZHVjZSBhIHNlcmllcyBvZiA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGRpcmVjdG9yaWVzIGFyZSBkZXNjcmlwdGlvbnMgb2YgYWxsIHRoZSBicmFuY2hlcywgdGFncywgcGF0Y2hlcyBhbmQgY29uZmlndXJhdGlvbnMgdGhhdAorICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGJhc2UgR2l0IHJlcG9zaXRvcnkgdG8gY29tcGxldGVseSBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSAoYnVpbGQpIGJyYW5jaCBmb3IgdGhlIG5ldyBCU1Agb3IgZmVhdHVyZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGJhc2UgcmVwb3NpdG9yeSBpcyBjbG9uZWQsIGFuZCB0aGUgYWN0aW9ucworICAgICAgICAgICAgICAgICAgICBsaXN0ZWQgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLSo8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcyBhcmUgYXBwbGllZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgdHJlZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIEdpdCByZXBvc2l0b3J5IGlzIGxlZnQgd2l0aCB0aGUgZGVzaXJlZCBicmFuY2ggY2hlY2tlZCBvdXQgYW5kIGFueQorICAgICAgICAgICAgICAgICAgICByZXF1aXJlZCBicmFuY2hpbmcsIHBhdGNoaW5nIGFuZCB0YWdnaW5nIGhhcyBiZWVuIHBlcmZvcm1lZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUga2VybmVsIHRyZWUgaXMgbm93IHJlYWR5IGZvciBkZXZlbG9wZXIgY29uc3VtcHRpb24gdG8gYmUgbG9jYWxseSBjbG9uZWQsCisgICAgICAgICAgICBjb25maWd1cmVkLCBhbmQgYnVpbHQgaW50byBhIFlvY3RvIFByb2plY3Qga2VybmVsIHNwZWNpZmljIHRvIHNvbWUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgPG5vdGU+PHBhcmE+VGhlIGdlbmVyYXRlZCA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgYWRkIHRvIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICBhcyBzaGlwcGVkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICBBbnkgYWRkLW9ucyBhbmQgY29uZmlndXJhdGlvbiBkYXRhIGFyZSBhcHBsaWVkIHRvIHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgYnJhbmNoLgorICAgICAgICAgICAgICAgIFRoZSBmdWxsIHJlcG9zaXRvcnkgZ2VuZXJhdGlvbiB0aGF0IGlzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIG9mZmljaWFsIFlvY3RvIFByb2plY3Qga2VybmVsIHJlcG9zaXRvcmllcyBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+aHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQuY2dpPC91bGluaz4KKyAgICAgICAgICAgICAgICBpcyB0aGUgY29tYmluYXRpb24gb2YgYWxsIHN1cHBvcnRlZCBib2FyZHMgYW5kIGNvbmZpZ3VyYXRpb25zLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgdGVjaG5pcXVlIHRoZSBZb2N0byBQcm9qZWN0IHRlYW0gdXNlcyBpcyBmbGV4aWJsZSBhbmQgYWxsb3dzIGZvciBzZWFtbGVzcworICAgICAgICAgICAgICAgIGJsZW5kaW5nIG9mIGFuIGltbXV0YWJsZSBoaXN0b3J5IHdpdGggYWRkaXRpb25hbCBwYXRjaGVzIHNwZWNpZmljIHRvIGEKKyAgICAgICAgICAgICAgICBkZXBsb3ltZW50LgorICAgICAgICAgICAgICAgIEFueSBhZGRpdGlvbnMgdG8gdGhlIGtlcm5lbCBiZWNvbWUgYW4gaW50ZWdyYXRlZCBwYXJ0IG9mIHRoZSBicmFuY2hlcy48L3BhcmE+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYnVpbGQtc3RyYXRlZ3knPgorICAgICAgICA8dGl0bGU+QnVpbGQgU3RyYXRlZ3k8L3RpdGxlPgorCis8IS0tCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGVtcGhhc2lzPkFSIC0gRGFycmVuIEhhcnQ6PC9lbXBoYXNpcz4gIFNvbWUgcGFydHMgb2YgdGhpcyBzZWN0aW9uCisgICAgICAgICAgICBuZWVkIHRvIGJlIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWFuLWl0ZXJhdGl2ZS1kZXZlbG9wbWVudC1wcm9jZXNzJz5Vc2luZyBhbiBJdGVyYXRpdmUgRGV2ZWxvcG1lbnQgUHJvY2VzczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgRGFycmVuIG5lZWRzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggcGFydHMgYW5kIGlkZW50aWZ5IHRoZW0uCisgICAgICAgIDwvcGFyYT4KKy0tPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSBhIGxvY2FsIEdpdCByZXBvc2l0b3J5IG9mIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBleGlzdHMgb24gYSBkZXZlbG9wbWVudCBzeXN0ZW0sCisgICAgICAgICAgICB5b3UgY2FuIGNvbnNpZGVyIHRoZSBjb21waWxhdGlvbiBwaGFzZSBvZiBrZXJuZWwgZGV2ZWxvcG1lbnQgLSBidWlsZGluZyBhIGtlcm5lbCBpbWFnZS4KKyAgICAgICAgICAgIFNvbWUgcHJlcmVxdWlzaXRlcyBleGlzdCB0aGF0IGFyZSB2YWxpZGF0ZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgYmVmb3JlIGNvbXBpbGF0aW9uCisgICAgICAgICAgICBzdGFydHM6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4gcG9pbnRzCisgICAgICAgICAgICAgICAgdG8gdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIEJTUCBidWlsZCBicmFuY2ggZXhpc3RzLgorICAgICAgICAgICAgICAgIFRoaXMgYnJhbmNoIGhhcyB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+a2VybmVsX3R5cGU8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBtYWtlcyBzdXJlIHRoZXNlIGNvbmRpdGlvbnMgZXhpc3QgYmVmb3JlIGF0dGVtcHRpbmcgY29tcGlsYXRpb24uCisgICAgICAgICAgICBPdGhlciBtZWFucywgaG93ZXZlciwgZG8gZXhpc3QsIHN1Y2ggYXMgYXMgYm9vdHN0cmFwcGluZyBhIEJTUC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVmb3JlIGJ1aWxkaW5nIGEga2VybmVsLCB0aGUgYnVpbGQgcHJvY2VzcyB2ZXJpZmllcyB0aGUgdHJlZQorICAgICAgICAgICAgYW5kIGNvbmZpZ3VyZXMgdGhlIGtlcm5lbCBieSBwcm9jZXNzaW5nIGFsbCBvZiB0aGUKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gImZyYWdtZW50cyIgc3BlY2lmaWVkIGJ5IGZlYXR1cmUgZGVzY3JpcHRpb25zIGluIHRoZSA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgICAgIEFzIHRoZSBmZWF0dXJlcyBhcmUgY29tcGlsZWQsIGFzc29jaWF0ZWQga2VybmVsIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIGFyZSBub3RlZAorICAgICAgICAgICAgYW5kIHJlY29yZGVkIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4gc2VyaWVzIG9mIGRpcmVjdG9yaWVzIGluIHRoZWlyIGNvbXBpbGF0aW9uIG9yZGVyLgorICAgICAgICAgICAgVGhlIGZyYWdtZW50cyBhcmUgbWlncmF0ZWQsIHByZS1wcm9jZXNzZWQgYW5kIHBhc3NlZCB0byB0aGUgTGludXggS2VybmVsCisgICAgICAgICAgICBDb25maWd1cmF0aW9uIHN1YnN5c3RlbSAoPGZpbGVuYW1lPmxrYzwvZmlsZW5hbWU+KSBhcyByYXcgaW5wdXQgaW4gdGhlIGZvcm0KKyAgICAgICAgICAgIG9mIGEgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5sa2M8L2ZpbGVuYW1lPiB1c2VzIGl0cyBvd24gaW50ZXJuYWwgZGVwZW5kZW5jeSBjb25zdHJhaW50cyB0byBkbyB0aGUgZmluYWwKKyAgICAgICAgICAgIHByb2Nlc3Npbmcgb2YgdGhhdCBpbmZvcm1hdGlvbiBhbmQgZ2VuZXJhdGVzIHRoZSBmaW5hbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgIHRoYXQgaXMgdXNlZCBkdXJpbmcgY29tcGlsYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFVzaW5nIHRoZSBib2FyZCdzIGFyY2hpdGVjdHVyZSBhbmQgb3RoZXIgcmVsZXZhbnQgdmFsdWVzIGZyb20gdGhlIGJvYXJkJ3MgdGVtcGxhdGUsCisgICAgICAgICAgICBrZXJuZWwgY29tcGlsYXRpb24gaXMgc3RhcnRlZCBhbmQgYSBrZXJuZWwgaW1hZ2UgaXMgcHJvZHVjZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBvdGhlciB0aGluZyB0aGF0IHlvdSBub3RpY2Ugb25jZSB5b3UgY29uZmlndXJlIGEga2VybmVsIGlzIHRoYXQKKyAgICAgICAgICAgIHRoZSBidWlsZCBwcm9jZXNzIGdlbmVyYXRlcyBhIGJ1aWxkIHRyZWUgdGhhdCBpcyBzZXBhcmF0ZSBmcm9tIHlvdXIga2VybmVsJ3MgbG9jYWwgR2l0CisgICAgICAgICAgICBzb3VyY2UgcmVwb3NpdG9yeSB0cmVlLgorICAgICAgICAgICAgVGhpcyBidWlsZCB0cmVlIGhhcyBhIG5hbWUgdGhhdCB1c2VzIHRoZSBmb2xsb3dpbmcgZm9ybSwgd2hlcmUKKyAgICAgICAgICAgIDxmaWxlbmFtZT4ke01BQ0hJTkV9PC9maWxlbmFtZT4gaXMgdGhlIG1ldGFkYXRhIG5hbWUgb2YgdGhlIG1hY2hpbmUgKEJTUCkgYW5kICJrZXJuZWxfdHlwZSIgaXMgb25lCisgICAgICAgICAgICBvZiB0aGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0ZWQga2VybmVsIHR5cGVzIChlLmcuICJzdGFuZGFyZCIpOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGxpbnV4LSR7TUFDSElORX0tPHJlcGxhY2VhYmxlPmtlcm5lbF90eXBlPC9yZXBsYWNlYWJsZT4tYnVpbGQKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZXhpc3Rpbmcgc3VwcG9ydCBpbiB0aGUgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiB0cmVlIGFjaGlldmVzIHRoaXMKKyAgICAgICAgICAgIGRlZmF1bHQgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBiZWhhdmlvciBtZWFucyB0aGF0IGFsbCB0aGUgZ2VuZXJhdGVkIGZpbGVzIGZvciBhIHBhcnRpY3VsYXIgbWFjaGluZSBvciBCU1AgYXJlIG5vdyBpbgorICAgICAgICAgICAgdGhlIGJ1aWxkIHRyZWUgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIGZpbGVzIGluY2x1ZGUgdGhlIGZpbmFsIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSwgYWxsIHRoZSA8ZmlsZW5hbWU+Lm88L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZXMsIHRoZSA8ZmlsZW5hbWU+LmE8L2ZpbGVuYW1lPiBmaWxlcywgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgU2luY2UgZWFjaCBtYWNoaW5lIG9yIEJTUCBoYXMgaXRzIG93biBzZXBhcmF0ZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgaW4gaXRzIG93biBzZXBhcmF0ZSBicmFuY2gKKyAgICAgICAgICAgIG9mIHRoZSBHaXQgcmVwb3NpdG9yeSwgeW91IGNhbiBlYXNpbHkgc3dpdGNoIGJldHdlZW4gZGlmZmVyZW50IGJ1aWxkcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvYXBwZW5kaXg+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtc3R5bGUuY3NzIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1zdHlsZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUwYzFjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtc3R5bGUuY3NzCkBAIC0wLDAgKzEsOTg0IEBACisvKgorICAgR2VuZXJpYyBYSFRNTCAvIERvY0Jvb2sgWEhUTUwgQ1NTIFN0eWxlc2hlZXQuCisKKyAgIEJyb3dzZXIgd3JhbmdsaW5nIGFuZCB0eXBvZ3JhcGhpYyBkZXNpZ24gYnkKKyAgICAgIE95dmluZCBLb2xhcyAvIHBpcHBpbkBnaW1wLm9yZworCisgICBDdXN0b21pc2VkIGZvciBQb2t5IGJ5CisgICAgICBNYXR0aGV3IEFsbHVtIC8gbWFsbHVtQG8taGFuZC5jb20KKworICAgVGhhbmtzIHRvOgorICAgICBMaWFtIFIuIEUuIFF1aW4KKyAgICAgV2lsbGlhbSBTa2FnZ3MKKyAgICAgSmFrdWIgU3RlaW5lcgorCisgICBTdHJ1Y3R1cmUKKyAgIC0tLS0tLS0tLQorCisgICBUaGUgc3R5bGVzaGVldCBpcyBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKKworICAgICAgIFBvc2l0aW9uaW5nCisgICAgICAgICAgTWFyZ2lucywgcGFkZGluZ3MsIHdpZHRoLCBmb250LXNpemUsIGNsZWFyaW5nLgorICAgICAgIERlY29yYXRpb25zCisgICAgICAgICAgQm9yZGVycywgc3R5bGUKKyAgICAgICBDb2xvcnMKKyAgICAgICAgICBDb2xvcnMKKyAgICAgICBHcmFwaGljcworICAgICAgICAgIEdyYXBoaWNhbCBiYWNrZ3JvdW5kcworICAgICAgIE5hc3R5IElFIHR3ZWFrcworICAgICAgICAgIFdvcmthcm91bmRzIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgaW4gaW50ZXJuZXQgZXhwbG9yZXIsCisgICAgICAgICAgY3VycmVudGx5IG1ha2VzIHRoZSBzdHlsZXNoZWV0IG5vbiB2YWxpZGF0aW5nLCBidXQgdXAgdW50aWwKKyAgICAgICAgICB0aGlzIHBvaW50IGl0IGlzIHZhbGlkYXRpbmcuCisgICAgICAgTW96aWxsYSBleHRlbnNpb25zCisgICAgICAgICAgVHJhbnNwYXJlbmN5IGZvciBmb290ZXIKKwkgIFJvdW5kZWQgY29ybmVycyBvbiBib3hlcworCisqLworCisKKyAgLyoqKioqKioqKioqKioqKiAvCisgLyAgUG9zaXRpb25pbmcgICAvCisvICoqKioqKioqKioqKioqKi8KKworYm9keSB7CisgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBTYW5zLCBzYW5zLXNlcmlmOworCisgIG1pbi13aWR0aDogNjQwcHg7CisgIHdpZHRoOiA4MCU7CisgIG1hcmdpbjogIDBlbSBhdXRvOworICBwYWRkaW5nOiAyZW0gNWVtIDVlbSA1ZW07CisgIGNvbG9yOiAjMzMzOworfQorCitoMSxoMixoMyxoNCxoNSxoNixoNyB7CisgIGZvbnQtZmFtaWx5OiBBcmlhbCwgU2FuczsKKyAgY29sb3I6ICMwMDU1N0Q7CisgIGNsZWFyOiBib3RoOworfQorCitoMSB7CisgIGZvbnQtc2l6ZTogMmVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMmVtIDBlbSAwZW0gMGVtOworfQorCitoMi5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMC4xMGVtIDBlbSAzLjBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjhlbTsKKyAgcGFkZGluZy1sZWZ0OiAyMCU7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworaDIgeworICBtYXJnaW46IDJlbSAwZW0gMC42NmVtIDBlbTsKKyAgcGFkZGluZzogMC41ZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS41ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMy5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQyLjE0JTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK2gzIHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0MCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNCB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDUgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g2IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLmF1dGhvcmdyb3VwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIHBhZGRpbmctdG9wOiAyNTZweDsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL2tlcm5lbC1kZXYtdGl0bGUucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdG9wOworICBtYXJnaW4tdG9wOiAtMjU2cHg7CisgIHBhZGRpbmctcmlnaHQ6IDUwcHg7CisgIG1hcmdpbi1sZWZ0OiAwcHg7CisgIHRleHQtYWxpZ246IHJpZ2h0OworICB3aWR0aDogNzQwcHg7Cit9CisKK2gzLmF1dGhvciB7CisgIG1hcmdpbjogMGVtIDBtZSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgY29sb3I6ICMzMzM7CisgIGNsZWFyOiBib3RoOworfQorCisuYXV0aG9yIHR0LmVtYWlsIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKKy50aXRsZXBhZ2UgaHIgeworICB3aWR0aDogMGVtOworICBjbGVhcjogYm90aDsKK30KKworLnJldmhpc3RvcnkgeworICBwYWRkaW5nLXRvcDogMmVtOworICBjbGVhcjogYm90aDsKK30KKworLnRvYywKKy5saXN0LW9mLXRhYmxlcywKKy5saXN0LW9mLWV4YW1wbGVzLAorLmxpc3Qtb2YtZmlndXJlcyB7CisgIHBhZGRpbmc6IDEuMzNlbSAwZW0gMi41ZW0gMGVtOworICBjb2xvcjogIzAwNTU3RDsKK30KKworLnRvYyBwLAorLmxpc3Qtb2YtdGFibGVzIHAsCisubGlzdC1vZi1maWd1cmVzIHAsCisubGlzdC1vZi1leGFtcGxlcyBwIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDAuM2VtOworICBtYXJnaW46IDEuNWVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIHAgYiwKKy5saXN0LW9mLXRhYmxlcyBwIGIsCisubGlzdC1vZi1maWd1cmVzIHAgYiwKKy5saXN0LW9mLWV4YW1wbGVzIHAgYnsKKyAgZm9udC1zaXplOiAxMDAuMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisudG9jIGRsLAorLmxpc3Qtb2YtdGFibGVzIGRsLAorLmxpc3Qtb2YtZmlndXJlcyBkbCwKKy5saXN0LW9mLWV4YW1wbGVzIGRsIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGR0IHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkZCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMi42ZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2Lmdsb3NzYXJ5IGRsLAorZGl2LnZhcmlhYmxlbGlzdCBkbCB7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHdpZHRoOiAyMGVtOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworLnZhcmlhYmxlbGlzdCBkbCBkdCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworfQorCisuZ2xvc3NhcnkgZGwgZGQsCisudmFyaWFibGVsaXN0IGRsIGRkIHsKKyAgbWFyZ2luLXRvcDogLTFlbTsKKyAgbWFyZ2luLWxlZnQ6IDI1LjVlbTsKK30KKworLmdsb3NzYXJ5IGRkIHAsCisudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCitkaXYgcC5jb3B5cmlnaHQgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCitkaXYubGVnYWxub3RpY2UgcC5sZWdhbG5vdGljZS10aXRsZSB7CisgIG1hcmdpbi1ib3R0b206IDBlbTsKK30KKworcCB7CisgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworCit9CisKK2RsIHsKKyAgcGFkZGluZy10b3A6IDBlbTsKK30KKworaHIgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworCisubWVkaWFvYmplY3QsCisubWVkaWFvYmplY3RjbyB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworaW1nIHsKKyAgYm9yZGVyOiBub25lOworfQorCit1bCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDEuNWVtOworfQorCit1bCBsaSB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKwordWwgbGkgcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK3RhYmxlIHsKKyAgd2lkdGggOjEwMCU7Cit9CisKK3RoIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBmb250LXdlaWdodDogbm9ybWFsOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0ZCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworcCBhW2lkXSB7CisgIG1hcmdpbjogMHB4OworICBwYWRkaW5nOiAwcHg7CisgIGRpc3BsYXk6IGlubGluZTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKK30KKworYSB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBjb2xvcjogIzQ0NDsKK30KKworcHJlIHsKKyAgICBvdmVyZmxvdzogYXV0bzsKK30KKworYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAvKmZvbnQtd2VpZ2h0OiBib2xkOyovCit9CisKKy8qIFRoaXMgc3R5bGUgZGVmaW5lcyBob3cgdGhlIHBlcm1hbGluayBjaGFyYWN0ZXIKKyAgIGFwcGVhcnMgYnkgaXRzZWxmIGFuZCB3aGVuIGhvdmVyZWQgb3ZlciB3aXRoCisgICB0aGUgbW91c2UuICovCisKK1thbHQ9J1Blcm1hbGluayddIHsgY29sb3I6ICNlZWU7IH0KK1thbHQ9J1Blcm1hbGluayddOmhvdmVyIHsgY29sb3I6IGJsYWNrOyB9CisKKworZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlIHsKKyAgbWFyZ2luOiAxZW0gMGVtOworICBwYWRkaW5nOiAxZW07CisgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKK30KKworCitkaXYuaW5mb3JtYWxmaWd1cmUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWx0YWJsZSBwLnRpdGxlIGIsCitkaXYuZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5leGFtcGxlIHAudGl0bGUgYiwKK2Rpdi50YWJsZSBwLnRpdGxlIGJ7CisgICAgcGFkZGluZy10b3A6IDBlbTsKKyAgICBtYXJnaW4tdG9wOiAwZW07CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiwKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiBwICB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmctdG9wOiAwLjVlbTsKKyAgcGFkZGluZy1ib3R0b206IDAuNWVtOworfQorCisuZXBpZ3JhcGggeworICBwYWRkaW5nLWxlZnQ6IDU1JTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZXBpZ3JhcGggcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5lcGlncmFwaCAucXVvdGUgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisuZXBpZ3JhcGggLmF0dHJpYnV0aW9uIHsKKyAgZm9udC1zdHlsZTogbm9ybWFsOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworc3Bhbi5hcHBsaWNhdGlvbiB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnByb2dyYW1saXN0aW5nIHsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgZm9udC1zaXplOiA4MCU7CisgIHdoaXRlLXNwYWNlOiBwcmU7CisgIG1hcmdpbjogMS4zM2VtIDBlbTsKKyAgcGFkZGluZzogMS4zM2VtOworfQorCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgbWFyZ2luLXRvcDogMWVtOworICBtYXJnaW4tYm90dG9tOiAxZW07CisKK30KKworLyogZm9yY2UgZnVsbCB3aWR0aCBvZiB0YWJsZSB3aXRoaW4gZGl2ICovCisudGlwIHRhYmxlLAorLndhcm5pbmcgdGFibGUsCisuY2F1dGlvbiB0YWJsZSwKKy5ub3RlIHRhYmxlIHsKKyAgYm9yZGVyOiBub25lOworICB3aWR0aDogMTAwJTsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgcGFkZGluZzogMC44ZW0gMC4wZW0gMC4wZW0gMC4wZW07CisgIG1hcmdpbiA6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRpcCBwLAorLndhcm5pbmcgcCwKKy5jYXV0aW9uIHAsCisubm90ZSBwIHsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuNWVtOworICBwYWRkaW5nLXJpZ2h0OiAxZW07CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5hY3JvbnltIHsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgcGFkZGluZzogMC4wOWVtIDAuM2VtOworICBtYXJnaW46IDBlbTsKK30KKworLml0ZW1pemVkbGlzdCBsaSB7CisgIGNsZWFyOiBub25lOworfQorCisuZmlsZW5hbWUgeworICBmb250LXNpemU6IG1lZGl1bTsKKyAgZm9udC1mYW1pbHk6IENvdXJpZXIsIG1vbm9zcGFjZTsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAwZW07CisgIHRvcDogMGVtOworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NkZjsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBwb3NpdGlvbjogZml4ZWQ7CisgIGxlZnQ6IDBlbTsKKyAgYm90dG9tOiAwZW07CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIHdpZHRoOiAxMDAlOworfQorCisKK2Rpdi5uYXZoZWFkZXIgdGQsCitkaXYubmF2Zm9vdGVyIHRkIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGggeworICAvKmZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBUaW1lcywgc2VyaWY7Ki8KKyAgLypmb250LXNpemU6IHgtbGFyZ2U7Ki8KKyAgZm9udC1zaXplOiA4MCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLXRvcDogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItYm90dG9tOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGEsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGEgeworICBjb2xvcjogIzc3NzsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisvKiBub3JtYWwgdGV4dCBpbiB0aGUgZm9vdGVyICovCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIHsKKyAgY29sb3I6IGJsYWNrOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6dmlzaXRlZCwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTp2aXNpdGVkIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKKworLyogbGlua3MgaW4gaGVhZGVyIGFuZCBmb290ZXIgKi8KK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTpob3ZlciwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgY29sb3I6ICMzM2E7Cit9CisKK2Rpdi5uYXZoZWFkZXIgaHIsCitkaXYubmF2Zm9vdGVyIGhyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCisucWFuZGFzZXQgdHIucXVlc3Rpb24gdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy5xYW5kYXNldCB0ci5hbnN3ZXIgdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisuYW5zd2VyIHRkIHsKKyAgcGFkZGluZy1ib3R0b206IDEuNWVtOworfQorCisuZW1waGFzaXMgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworCisgIC8qKioqKioqKioqKioqIC8KKyAvIGRlY29yYXRpb25zICAvCisvICoqKioqKioqKioqKiovCisKKy50aXRsZXBhZ2UgeworfQorCisucGFydCAudGl0bGUgeworfQorCisuc3VidGl0bGUgeworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyoKK2gxIHsKKyAgYm9yZGVyOiBub25lOworfQorCitoMiB7CisgIGJvcmRlci10b3A6IHNvbGlkIDAuMmVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2gzIHsKKyAgYm9yZGVyLXRvcDogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g0IHsKKyAgYm9yZGVyOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDUgeworICBib3JkZXI6IDBlbTsKK30KKyovCisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworLnF1ZXN0aW9uIHRkIHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOworfQorCisuYW5zd2VyIHsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBib3JkZXItdG9wOiAxcHggc29saWQ7Cit9CisKKyAgLyoqKioqKioqKiAvCisgLyAgY29sb3JzICAvCisvICoqKioqKioqKi8KKworYm9keSB7CisgIGNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworYSB7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworfQorCithOmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RlZGVkZTsKK30KKworCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoNywKK2g4IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisKK2hyIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCisKKy50aXAsIC53YXJuaW5nLCAuY2F1dGlvbiwgLm5vdGUgeworICBib3JkZXItY29sb3I6ICNmZmY7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7Cit9CisKKworLndhcm5pbmcgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy50aXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisubm90ZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGNvbG9yOiAjMDQ0OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKK3ByZS5wcm9ncmFtbGlzdGluZyB7CisgIGNvbG9yOiBibGFjazsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworICBib3JkZXItd2lkdGg6IDJweDsKK30KKworLmd1aW1lbnUsCisuZ3VpbGFiZWwsCisuZ3VpbWVudWl0ZW0geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGJvcmRlci1jb2xvcjogIzk5OTsKK30KKworCitkaXYubmF2aGVhZGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCitkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCisgIC8qKioqKioqKioqKiAvCisgLyAgZ3JhcGhpY3MgIC8KKy8gKioqKioqKioqKiovCisKKy8qCitib2R5IHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvYm9keV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLm5hdmhlYWRlciwKKy5ub3RlLAorLnRpcCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL25vdGVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy53YXJuaW5nLAorLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy93YXJuaW5nX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisuZmlndXJlLAorLmluZm9ybWFsZmlndXJlLAorLmV4YW1wbGUsCisuaW5mb3JtYWxleGFtcGxlLAorLnRhYmxlLAorLmluZm9ybWFsdGFibGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9maWd1cmVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKyovCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoN3sKK30KKworLyoKK0V4YW1wbGUgb2YgaG93IHRvIHN0aWNrIGFuIGltYWdlIGFzIHBhcnQgb2YgdGhlIHRpdGxlLgorCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvd2hpdGUtb24tYmxhY2sucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworfQorKi8KKworZGl2LnByZWZhY2UgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuY29sb3Bob24gLnRpdGxlLAorZGl2LmNoYXB0ZXIgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworfQorCitkaXYuc2VjdGlvbiBkaXYuc2VjdGlvbiAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5zZWN0MiAudGl0bGVwYWdlIC50aXRsZSB7CisgICAgYmFja2dyb3VuZDogbm9uZTsKK30KKworCitoMS50aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBoZWlnaHQ6IDI1NnB4OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworfQorCitoMi5zdWJ0aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworICB3aWR0aDogMHB4OworICBkaXNwbGF5OiBub25lOworfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gIHBpcHBpbi5naW1wLm9yZyBzcGVjaWZpYyBhbHRlcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIGNvbG9yOiAjNzc3OworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAwOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMHB4OworICBsZWZ0OiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDUwcHg7CisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9oZWFkaW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CisgIGJvcmRlcjogbm9uZTsKK30KKworZGl2LmhlYWRpbmcgYSB7CisgIGNvbG9yOiAjNDQ0OworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlcjogbm9uZTsKKyAgY29sb3I6ICNkZGQ7CisgIGZvbnQtc2l6ZTogODAlOworICB0ZXh0LWFsaWduOnJpZ2h0OworCisgIHdpZHRoOiAxMDAlOworICBwYWRkaW5nLXRvcDogMTBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDBweDsKKyAgbGVmdDogMHB4OworCisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9mb290aW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworfQorKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKiAvCisgLyAgbmFzdHkgaWUgdHdlYWtzICAvCisvICoqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7CisgIG1hcmdpbi1sZWZ0OmV4cHJlc3Npb24oIi01ZW0iKTsKK30KK2JvZHkgeworICBwYWRkaW5nOmV4cHJlc3Npb24oIjRlbSA1ZW0gMGVtIDVlbSIpOworfQorKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyBtb3ppbGxhIHZlbmRvciBzcGVjaWZpYyBjc3MgZXh0ZW5zaW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICAtbW96LW9wYWNpdHk6IDAuOGVtOworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUsCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjVlbTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjNlbTsKK30KKyovCisKK3RhYmxlIHRyIHRkIHRhYmxlIHRyIHRkIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCitociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3RhYmxlIHsKKyAgYm9yZGVyOiAwZW07Cit9CisKKyAucGhvdG8geworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiAgIDEuNWVtOworICBtYXJnaW4tYm90dG9tOiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXgtd2lkdGg6ICAgICAgMTdlbTsKKyAgYm9yZGVyOiAgICAgMXB4IHNvbGlkIGdyYXk7CisgIHBhZGRpbmc6ICAgIDNweDsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisgLnNlcGVyYXRvciB7CisgICBwYWRkaW5nLXRvcDogMmVtOworICAgY2xlYXI6IGJvdGg7CisgIH0KKworICAjdmFsaWRhdG9ycyB7CisgICAgICBtYXJnaW4tdG9wOiA1ZW07CisgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgIGNvbG9yOiAjNzc3OworICB9CisgIEBtZWRpYSBwcmludCB7CisgICAgICBib2R5IHsKKyAgICAgICAgICBmb250LXNpemU6IDhwdDsKKyAgICAgIH0KKyAgICAgIC5ub3ByaW50IHsKKyAgICAgICAgICBkaXNwbGF5OiBub25lOworICAgICAgfQorICB9CisKKworLnRpcCwKKy5ub3RlIHsKKyAgIGJhY2tncm91bmQ6ICNmMGYwZjI7CisgICBjb2xvcjogIzMzMzsKKyAgIHBhZGRpbmc6IDIwcHg7CisgICBtYXJnaW46IDIwcHg7Cit9CisKKy50aXAgaDMsCisubm90ZSBoMyB7CisgICBwYWRkaW5nOiAwZW07CisgICBtYXJnaW46IDBlbTsKKyAgIGZvbnQtc2l6ZTogMmVtOworICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICBjb2xvcjogIzMzMzsKK30KKworLnRpcCBhLAorLm5vdGUgYSB7CisgICBjb2xvcjogIzMzMzsKKyAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuZm9vdG5vdGUgeworICAgZm9udC1zaXplOiBzbWFsbDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisvKiBDaGFuZ2VzIHRoZSBhbm5vdW5jZW1lbnQgdGV4dCAqLworLnRpcCBoMywKKy53YXJuaW5nIGgzLAorLmNhdXRpb24gaDMsCisubm90ZSBoMyB7CisgICBmb250LXNpemU6bGFyZ2U7CisgICBjb2xvcjogIzAwNTU3RDsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNkZjJjYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYueG1sCkBAIC0wLDAgKzEsMTE1IEBACis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Ym9vayBpZD0na2VybmVsLWRldicgbGFuZz0nZW4nCisgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIKKyAgICAgIHhtbG5zPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgICAgID4KKyAgICA8Ym9va2luZm8+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0nZmlndXJlcy9rZXJuZWwtZGV2LXRpdGxlLnBuZycKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSdTVkcnCisgICAgICAgICAgICAgICAgICAgIGFsaWduPSdsZWZ0JyBzY2FsZWZpdD0nMScgd2lkdGg9JzEwMCUnLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgIDwvbWVkaWFvYmplY3Q+CisKKyAgICAgICAgPHRpdGxlPgorCQkgIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbAorCQk8L3RpdGxlPgorCisgICAgICAgIDxhdXRob3Jncm91cD4KKyAgICAgICAgICAgIDxhdXRob3I+CisgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5EYXJyZW48L2ZpcnN0bmFtZT4gPHN1cm5hbWU+SGFydDwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkludGVsIENvcnBvcmF0aW9uPC9vcmduYW1lPgorICAgICAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgPGVtYWlsPmRhcnJlbi5oYXJ0QGludGVsLmNvbTwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKyAgICAgICAgPC9hdXRob3Jncm91cD4KKworICAgICAgICA8cmV2aGlzdG9yeT4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTM8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxMzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS41IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS41LjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5KYW51YXJ5IDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNS4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS42PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS42IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS43PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjcgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjg8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjggUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjk8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgPC9yZXZoaXN0b3J5PgorCisgICAgPGNvcHlyaWdodD4KKyAgICAgIDx5ZWFyPiZDT1BZUklHSFRfWUVBUjs8L3llYXI+CisgICAgICA8aG9sZGVyPkxpbnV4IEZvdW5kYXRpb248L2hvbGRlcj4KKyAgICA8L2NvcHlyaWdodD4KKworICAgIDxsZWdhbG5vdGljZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvdWsvIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlIEFsaWtlIDIuMCBVSzogRW5nbGFuZCAmYW1wOyBXYWxlczwvdWxpbms+IGFzIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zLgorICAgICAgPC9wYXJhPgorICAgICAgPG5vdGU+CisgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyc+WW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsPC91bGluaz4KKyAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICA8L25vdGU+CisgICAgPC9sZWdhbG5vdGljZT4KKworICAgIDwvYm9va2luZm8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJrZXJuZWwtZGV2LWludHJvLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1jb21tb24ueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJrZXJuZWwtZGV2LWFkdmFuY2VkLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1jb25jZXB0cy1hcHB4LnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1tYWludC1hcHB4LnhtbCIvPgorCis8IS0tCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1leGFtcGxlcy54bWwiLz4KKy0tPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1mYXEueG1sIi8+CisKKzwhLS0gICAgPGluZGV4IGlkPSdpbmRleCc+CisgICAgICA8dGl0bGU+SW5kZXg8L3RpdGxlPgorICAgIDwvaW5kZXg+CistLT4KKworPC9ib29rPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9hZHQtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYWR0LXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTcxZTQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYWR0LXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9hbmFseXNpcy1mb3ItcGFja2FnZS1zcGxpdHRpbmcucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYW5hbHlzaXMtZm9yLXBhY2thZ2Utc3BsaXR0aW5nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGYyNzk0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYW5hbHlzaXMtZm9yLXBhY2thZ2Utc3BsaXR0aW5nLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYXBwLWRldi1mbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTI3YjkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYXBwLWRldi1mbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDBiMGFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9ic3AtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnNwLXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjI0ZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnNwLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2J1aWxkLXdvcmtzcGFjZS1kaXJlY3RvcnkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NjFmOGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZGhpc3Rvcnktd2ViLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2J1aWxkaGlzdG9yeS13ZWIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZGI4NmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZGhpc3Rvcnktd2ViLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZGhpc3RvcnkucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDVmOGE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWZiZWE1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2J1aWxkaW5nLWFuLWltYWdlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA3NDY0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2NvbmZpZ3VyYXRpb24tY29tcGlsZS1hdXRvcmVjb25mLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9jcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW5zLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbnMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNjY3MGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9jcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW5zLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQyMjcxOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvZGV2LXRpdGxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2Rldi10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjYWM0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2Rldi10aXRsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2dpdC13b3JrZmxvdy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQwMTMzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2dpdC13b3JrZmxvdy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaG9zdGVkLXNlcnZpY2UucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaG9zdGVkLXNlcnZpY2UucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZmVhN2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9ob3N0ZWQtc2VydmljZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW1hZ2UtZ2VuZXJhdGlvbi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9pbWFnZS1nZW5lcmF0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjk2MjU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW1hZ2UtZ2VuZXJhdGlvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW1hZ2VzLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2ltYWdlcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk5ZWFjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2ltYWdlcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkwNzk5NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWFyY2hpdGVjdHVyZS1vdmVydmlldy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtYXJjaGl0ZWN0dXJlLW92ZXJ2aWV3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYWFkMTcyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWFyY2hpdGVjdHVyZS1vdmVydmlldy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA5MTA1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi10aXRsZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtZGV2LXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YThkZDU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi10aXRsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNmMwYjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi1nZW5lcmljLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjk3MGVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLXRpdGxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbC10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlkODZjMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbC10aXRsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstYWxsLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWFsbC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliNDBiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWFsbC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstY2hvb3NlLWV2ZW50cy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1jaG9vc2UtZXZlbnRzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGRkNjJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstY2hvb3NlLWV2ZW50cy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstaTkxNS1kaXNwbGF5LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWk5MTUtZGlzcGxheS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwZWRmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWk5MTUtZGlzcGxheS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstb3V0cHV0LWRpc3BsYXkucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstb3V0cHV0LWRpc3BsYXkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMmQwZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1vdXRwdXQtZGlzcGxheS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvbGF5ZXItaW5wdXQucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvbGF5ZXItaW5wdXQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNGYyZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9sYXllci1pbnB1dC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvbHR0bmdtYWluMC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9sdHRuZ21haW4wLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjYwMTEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvbHR0bmdtYWluMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvbWVnYS10aXRsZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9tZWdhLXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGUwYjg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvbWVnYS10aXRsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1idXN5Ym94LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktYnVzeWJveC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyNzVjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktYnVzeWJveC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYjY0NzAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1kb3dubG9hZGluZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3NDJkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktcHJvY2Vzc2VzLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktcHJvY2Vzc2VzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTU0NzAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1wcm9jZXNzZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BhY2thZ2UtZmVlZHMucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGFja2FnZS1mZWVkcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjOWMzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BhY2thZ2UtZmVlZHMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BhdGNoaW5nLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BhdGNoaW5nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWNkMDE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGF0Y2hpbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtcHJvYmUtZG9fZm9yay1wcm9maWxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtcHJvYmUtZG9fZm9yay1wcm9maWxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTEwNzBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi1wcm9iZS1kb19mb3JrLXByb2ZpbGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGVjNmFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi1yZXBvcnQtY3ljbGVzLXUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjcyODY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLWxpYmMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyY2UyNDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLW1lbnUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtYW5ub3RhdGUtbWVudS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViMzRlYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLW1lbnUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLXVkaGNwYy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ODFlOWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRlYnVnaW5mby5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kZWJ1Z2luZm8ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMTdiNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kZWJ1Z2luZm8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLW1lbnUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20tbWVudS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkxM2M4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLW1lbnUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTk2MmM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQyZDA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZXhwYW5kZWQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1mbGF0LXN0cmlwcGVkLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1mbGF0LXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGYzOTVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWZsYXQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktZnJvbS11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktZnJvbS11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjdjNzY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS1mcm9tLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLWRlYnVnaW5mby5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5OWFmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1zdHJpcHBlZC11bnJlc29sdmVkLWhpZGRlbi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQtdW5yZXNvbHZlZC1oaWRkZW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTgwOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQtdW5yZXNvbHZlZC1oaWRkZW4ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1zdHJpcHBlZC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMjMwMmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Bva3ktdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcG9reS10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg5M2Q4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Bva3ktdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcHJvZmlsZS10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1YzY4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Ym9vdGNoYXJ0Z3VpLWxpbnV4LXlvY3RvLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Ym9vdGNoYXJ0Z3VpLWxpbnV4LXlvY3RvLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjZiZmRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcHlib290Y2hhcnRndWktbGludXgteW9jdG8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLW5vc3RyaXAucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0tbm9zdHJpcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0Njc1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLW5vc3RyaXAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWUzNTM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3JlY2lwZS13b3JrZmxvdy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9yZWNpcGUtd29ya2Zsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZTk2MGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9yZWNpcGUtd29ya2Zsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NjaGVkLXdha2V1cC1wcm9maWxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NjaGVkLXdha2V1cC1wcm9maWxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjI1ODExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc2NoZWQtd2FrZXVwLXByb2ZpbGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Nkay1nZW5lcmF0aW9uLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Nkay1nZW5lcmF0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzdlMjc0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc2RrLWdlbmVyYXRpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Nkay5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zZGsucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MzljYzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zZGsucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NpbXBsZS1jb25maWd1cmF0aW9uLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NpbXBsZS1jb25maWd1cmF0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGZjZTJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc2ltcGxlLWNvbmZpZ3VyYXRpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NvdXJjZS1mZXRjaGluZy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtZmV0Y2hpbmcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YWVmYjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtZmV0Y2hpbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NvdXJjZS1pbnB1dC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtaW5wdXQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NTE1MDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtaW5wdXQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NvdXJjZS1yZXBvcy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YzVmMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY2FsbGVycy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNhbGxlcnMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MGM4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNhbGxlcnMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jb3B5LWZyb20tdXNlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzMTQyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS10by11c2VyLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS10by11c2VyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTViYWI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jb3B5LXRvLXVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3RvYXN0ZXItdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvdG9hc3Rlci10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlYTM5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3RvYXN0ZXItdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3VzZXItY29uZmlndXJhdGlvbi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy91c2VyLWNvbmZpZ3VyYXRpb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYjNmOGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy91c2VyLWNvbmZpZ3VyYXRpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3VzaW5nLWEtcHJlLWJ1aWx0LWltYWdlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3VzaW5nLWEtcHJlLWJ1aWx0LWltYWdlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDMxMzBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvdXNpbmctYS1wcmUtYnVpbHQtaW1hZ2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lvY3RvLWVudmlyb25tZW50LXJlZi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC1yZWYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MGM2YzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC1yZWYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmI3YTU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lvY3RvLXByb2plY3QtdHJhbnNwLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lvY3RvLXByb2plY3QtdHJhbnNwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMWQyYjE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMveW9jdG8tcHJvamVjdC10cmFuc3AucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lwLWRvd25sb2FkLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lwLWRvd25sb2FkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzcwYmU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMveXAtZG93bmxvYWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTJiNWIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL21lZ2EtbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsNDIgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS50b2MiPgorICAgYXBwZW5kaXggIHRvYworICAgY2hhcHRlciAgIHRvYworICAgYXJ0aWNsZSAgIG5vcAorICAgYm9vayAgICAgIG5vcAorICAgcGFydCAgICAgIG5vcAorICAgcHJlZmFjZSAgIG5vcAorICAgcWFuZGFkaXYgIG5vcAorICAgcWFuZGFzZXQgIG5vcAorICAgcmVmZXJlbmNlIG5vcAorICAgc2VjdGlvbiAgIG5vcAorICAgc2V0ICAgICAgIG5vcAorICA8L3hzbDpwYXJhbT4KKworICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvcGVybWFsaW5rcy54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9kaXZpc2lvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2dsb3NzLXBlcm1hbGlua3MueHNsIi8+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJ21lZ2Etc3R5bGUuY3NzJyIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCI+QTwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS5pZC5hdHRyaWJ1dGVzIiBzZWxlY3Q9IjEiIC8+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvbWVnYS1tYW51YWwueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL21lZ2EtbWFudWFsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzVlYmYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL21lZ2EtbWFudWFsLnhtbApAQCAtMCwwICsxLDIzMSBAQAorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworCis8Ym9vayBpZD0nbWVnYS1tYW51YWwnIGxhbmc9J2VuJworICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiCisgICAgICB4bWxucz0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgICAgICA+CisKKyAgICA8Ym9va2luZm8+CisKKyAgICAgICAgPGFic3RyYWN0PgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgTWVnYS1NYW51YWwgaXMgYSBjb25jYXRlbmF0aW9uIG9mIHRoZSBwdWJsaXNoZWQKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgSFRNTCBtYW51YWxzIGZvciB0aGUgZ2l2ZW4gcmVsZWFzZS4KKyAgICAgICAgICAgIFRoZSBtYW51YWwgZXhpc3RzIHRvIGhlbHAgdXNlcnMgZWZmaWNpZW50bHkgc2VhcmNoIGZvciBzdHJpbmdzCisgICAgICAgICAgICBhY3Jvc3MgdGhlIGVudGlyZSBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gc2V0LgorICAgICAgICA8L2Fic3RyYWN0PgorCisgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9J2ZpZ3VyZXMvbWVnYS10aXRsZS5wbmcnCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0nU1ZHJworICAgICAgICAgICAgICAgICAgICBhbGlnbj0nbGVmdCcgc2NhbGVmaXQ9JzEnIHdpZHRoPScxMDAlJy8+CisgICAgICAgICAgICA8L2ltYWdlb2JqZWN0PgorICAgICAgICA8L21lZGlhb2JqZWN0PgorCisgICAgICAgIDx0aXRsZT4KKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgTWVnYS1NYW51YWwKKyAgICAgICAgPC90aXRsZT4KKworICAgICAgICA8YXV0aG9yZ3JvdXA+CisgICAgICAgICAgICA8YXV0aG9yPgorICAgICAgICAgICAgICAgIDxmaXJzdG5hbWU+U2NvdHQ8L2ZpcnN0bmFtZT4gPHN1cm5hbWU+UmlmZW5iYXJrPC9zdXJuYW1lPgorICAgICAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG9yZ25hbWU+SW50ZWwgQ29ycG9yYXRpb248L29yZ25hbWU+CisgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICA8ZW1haWw+c2NvdHQubS5yaWZlbmJhcmtAaW50ZWwuY29tPC9lbWFpbD4KKyAgICAgICAgICAgIDwvYXV0aG9yPgorICAgICAgICA8L2F1dGhvcmdyb3VwPgorCisgICAgICAgIDxyZXZoaXN0b3J5PgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS44PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS44IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS45PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjkgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgPC9yZXZoaXN0b3J5PgorCisgICAgPGNvcHlyaWdodD4KKyAgICAgIDx5ZWFyPiZDT1BZUklHSFRfWUVBUjs8L3llYXI+CisgICAgICA8aG9sZGVyPkxpbnV4IEZvdW5kYXRpb248L2hvbGRlcj4KKyAgICA8L2NvcHlyaWdodD4KKworICAgIDxsZWdhbG5vdGljZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvdWsvIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlIEFsaWtlIDIuMCBVSzogRW5nbGFuZCAmYW1wOyBXYWxlczwvdWxpbms+IGFzIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zLgorICAgICAgPC9wYXJhPgorICAgICAgPG5vdGU+CisgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX01NX1VSTDsnPllvY3RvIFByb2plY3QgTWVnYS1NYW51YWw8L3VsaW5rPgorICAgICAgICAgIGZyb20gdGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZS4KKyAgICAgIDwvbm90ZT4KKworICAgIDwvbGVnYWxub3RpY2U+CisKKyAgICA8L2Jvb2tpbmZvPgorCis8IS0tIEluY2x1ZGVzIHlvY3RvLXByb2plY3QtcXMgLS0+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLnhtbCIvPgorCis8IS0tIEluY2x1ZGVzIGRldi1tYW51YWwgdGl0bGUgaW1hZ2UgYW5kIHRoZW4gZGV2LW1hbnVhbCBjaGFwdGVycyAtLT4KKworICAgIDxwYXJhPgorICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGV2LXRpdGxlLnBuZyIgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBzY2FsZWZpdD0iMSIgLz4KKyAgICA8L3BhcmE+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWludHJvLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9kZXYtbWFudWFsL2Rldi1tYW51YWwtc3RhcnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1uZXdiaWUueG1sIi8+CisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1tb2RlbC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWNvbW1vbi10YXNrcy54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vZGV2LW1hbnVhbC9kZXYtbWFudWFsLXFlbXUueG1sIi8+CisKKzwhLS0gSW5jbHVkZXMgYWR0LW1hbnVhbCB0aXRsZSBpbWFnZSBhbmQgdGhlbiBhZHQtbWFudWFsIGNoYXB0ZXJzIC0tPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9hZHQtdGl0bGUucG5nIiB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIHNjYWxlZml0PSIxIiAvPgorICAgIDwvcGFyYT4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9hZHQtbWFudWFsL2FkdC1tYW51YWwtaW50cm8ueG1sIi8+CisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2FkdC1tYW51YWwvYWR0LWludHJvLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9hZHQtbWFudWFsL2FkdC1wcmVwYXJlLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9hZHQtbWFudWFsL2FkdC1wYWNrYWdlLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9hZHQtbWFudWFsL2FkdC1jb21tYW5kLnhtbCIvPgorCis8IS0tIEluY2x1ZGVzIGJzcC1ndWlkZSB0aXRsZSBpbWFnZSBhbmQgdGhlbiBic3AtZ3VpZGUgY2hhcHRlcnMgLS0+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2JzcC10aXRsZS5wbmciIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgc2NhbGVmaXQ9IjEiIC8+CisgICAgPC9wYXJhPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2JzcC1ndWlkZS9ic3AueG1sIi8+CisKKzwhLS0gSW5jbHVkZXMga2VybmVsLWRldiB0aXRsZSBpbWFnZSBhbmQgdGhlbiBrZXJuZWwtZGV2IGNoYXB0ZXJzIC0tPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWwtZGV2LXRpdGxlLnBuZyIgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBzY2FsZWZpdD0iMSIgLz4KKyAgICA8L3BhcmE+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4va2VybmVsLWRldi9rZXJuZWwtZGV2LWludHJvLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtY29tbW9uLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtYWR2YW5jZWQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jb25jZXB0cy1hcHB4LnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtbWFpbnQtYXBweC54bWwiLz4KKworPCEtLSBJbmNsdWRlcyBwcm9maWxlLW1hbnVhbCB0aXRsZSBpbWFnZSBhbmQgdGhlbiBwcm9maWxlLW1hbnVhbCBjaGFwdGVycyAtLT4KKworICAgIDxwYXJhPgorICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcHJvZmlsZS10aXRsZS5wbmciIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgc2NhbGVmaXQ9IjEiIC8+CisgICAgPC9wYXJhPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWludHJvLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1hcmNoLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC11c2FnZS54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtZXhhbXBsZXMueG1sIi8+CisKKzwhLS0gSW5jbHVkZXMgcmVmLW1hbnVhbCB0aXRsZSBpbWFnZSBhbmQgdGhlbiByZWYtbWFudWFsIGNoYXB0ZXJzIC0tPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wb2t5LXRpdGxlLnBuZyIgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBzY2FsZWZpdD0iMSIgLz4KKyAgICA8L3BhcmE+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcmVmLW1hbnVhbC9pbnRyb2R1Y3Rpb24ueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcmVmLW1hbnVhbC91c2luZ3Bva3kueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcmVmLW1hbnVhbC9jbG9zZXItbG9vay54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3RlY2huaWNhbC1kZXRhaWxzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvbWlncmF0aW9uLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvcmVmLXN0cnVjdHVyZS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3JlZi1jbGFzc2VzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvcmVmLXRhc2tzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvcmVmLXFhLWNoZWNrcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3JlZi1pbWFnZXMueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcmVmLW1hbnVhbC9yZWYtZmVhdHVyZXMueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcmVmLW1hbnVhbC9yZWYtdmFyaWFibGVzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvcmVmLXZhcmxvY2FsaXR5LnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvZmFxLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvcmVzb3VyY2VzLnhtbCIvPgorCis8IS0tIEluY2x1ZGVzIHRvYXN0ZXItbWFudWFsIHRpdGxlIGltYWdlIGFuZCB0aGVuIHRvYXN0ZXItbWFudWFsIGNoYXB0ZXJzIC0tPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy90b2FzdGVyLXRpdGxlLnBuZyIgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBzY2FsZWZpdD0iMSIgLz4KKyAgICA8L3BhcmE+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtaW50cm8ueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc3RhcnQueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc2V0dXAtYW5kLXVzZS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1yZWZlcmVuY2UueG1sIi8+CisKKzwvYm9vaz4KKworPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvbWVnYS1zdHlsZS5jc3MgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvbWVnYS1zdHlsZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3MWEyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLXN0eWxlLmNzcwpAQCAtMCwwICsxLDk4NCBAQAorLyoKKyAgIEdlbmVyaWMgWEhUTUwgLyBEb2NCb29rIFhIVE1MIENTUyBTdHlsZXNoZWV0LgorCisgICBCcm93c2VyIHdyYW5nbGluZyBhbmQgdHlwb2dyYXBoaWMgZGVzaWduIGJ5CisgICAgICBPeXZpbmQgS29sYXMgLyBwaXBwaW5AZ2ltcC5vcmcKKworICAgQ3VzdG9taXNlZCBmb3IgUG9reSBieQorICAgICAgTWF0dGhldyBBbGx1bSAvIG1hbGx1bUBvLWhhbmQuY29tCisKKyAgIFRoYW5rcyB0bzoKKyAgICAgTGlhbSBSLiBFLiBRdWluCisgICAgIFdpbGxpYW0gU2thZ2dzCisgICAgIEpha3ViIFN0ZWluZXIKKworICAgU3RydWN0dXJlCisgICAtLS0tLS0tLS0KKworICAgVGhlIHN0eWxlc2hlZXQgaXMgZGl2aWRlZCBpbnRvIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisKKyAgICAgICBQb3NpdGlvbmluZworICAgICAgICAgIE1hcmdpbnMsIHBhZGRpbmdzLCB3aWR0aCwgZm9udC1zaXplLCBjbGVhcmluZy4KKyAgICAgICBEZWNvcmF0aW9ucworICAgICAgICAgIEJvcmRlcnMsIHN0eWxlCisgICAgICAgQ29sb3JzCisgICAgICAgICAgQ29sb3JzCisgICAgICAgR3JhcGhpY3MKKyAgICAgICAgICBHcmFwaGljYWwgYmFja2dyb3VuZHMKKyAgICAgICBOYXN0eSBJRSB0d2Vha3MKKyAgICAgICAgICBXb3JrYXJvdW5kcyBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIGluIGludGVybmV0IGV4cGxvcmVyLAorICAgICAgICAgIGN1cnJlbnRseSBtYWtlcyB0aGUgc3R5bGVzaGVldCBub24gdmFsaWRhdGluZywgYnV0IHVwIHVudGlsCisgICAgICAgICAgdGhpcyBwb2ludCBpdCBpcyB2YWxpZGF0aW5nLgorICAgICAgIE1vemlsbGEgZXh0ZW5zaW9ucworICAgICAgICAgIFRyYW5zcGFyZW5jeSBmb3IgZm9vdGVyCisJICBSb3VuZGVkIGNvcm5lcnMgb24gYm94ZXMKKworKi8KKworCisgIC8qKioqKioqKioqKioqKiogLworIC8gIFBvc2l0aW9uaW5nICAgLworLyAqKioqKioqKioqKioqKiovCisKK2JvZHkgeworICBmb250LWZhbWlseTogVmVyZGFuYSwgU2Fucywgc2Fucy1zZXJpZjsKKworICBtaW4td2lkdGg6IDY0MHB4OworICB3aWR0aDogODAlOworICBtYXJnaW46ICAwZW0gYXV0bzsKKyAgcGFkZGluZzogMmVtIDVlbSA1ZW0gNWVtOworICBjb2xvcjogIzMzMzsKK30KKworaDEsaDIsaDMsaDQsaDUsaDYsaDcgeworICBmb250LWZhbWlseTogQXJpYWwsIFNhbnM7CisgIGNvbG9yOiAjMDA1NTdEOworICBjbGVhcjogYm90aDsKK30KKworaDEgeworICBmb250LXNpemU6IDJlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDJlbSAwZW0gMGVtIDBlbTsKK30KKworaDIuc3VidGl0bGUgeworICBtYXJnaW46IDAuMTBlbSAwZW0gMy4wZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS44ZW07CisgIHBhZGRpbmctbGVmdDogMjAlOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2gyIHsKKyAgbWFyZ2luOiAyZW0gMGVtIDAuNjZlbSAwZW07CisgIHBhZGRpbmc6IDAuNWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuNWVtOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDMuc3VidGl0bGUgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0Mi4xNCU7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitoMyB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDQgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTIwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g1IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNiB7CisgIG1hcmdpbjogMWVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy5hdXRob3Jncm91cCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nLXRvcDogMjU2cHg7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy9tZWdhLXRpdGxlLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IHRvcDsKKyAgbWFyZ2luLXRvcDogLTI1NnB4OworICBwYWRkaW5nLXJpZ2h0OiA1MHB4OworICBtYXJnaW4tbGVmdDogMHB4OworICB0ZXh0LWFsaWduOiByaWdodDsKKyAgd2lkdGg6IDc0MHB4OworfQorCitoMy5hdXRob3IgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXNpemU6IDEwMCU7CisgIGNvbG9yOiAjMzMzOworICBjbGVhcjogYm90aDsKK30KKworLmF1dGhvciB0dC5lbWFpbCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCisudGl0bGVwYWdlIGhyIHsKKyAgd2lkdGg6IDBlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5yZXZoaXN0b3J5IHsKKyAgcGFkZGluZy10b3A6IDJlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy50b2MsCisubGlzdC1vZi10YWJsZXMsCisubGlzdC1vZi1leGFtcGxlcywKKy5saXN0LW9mLWZpZ3VyZXMgeworICBwYWRkaW5nOiAxLjMzZW0gMGVtIDIuNWVtIDBlbTsKKyAgY29sb3I6ICMwMDU1N0Q7Cit9CisKKy50b2MgcCwKKy5saXN0LW9mLXRhYmxlcyBwLAorLmxpc3Qtb2YtZmlndXJlcyBwLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwLjNlbTsKKyAgbWFyZ2luOiAxLjVlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBwIGIsCisubGlzdC1vZi10YWJsZXMgcCBiLAorLmxpc3Qtb2YtZmlndXJlcyBwIGIsCisubGlzdC1vZi1leGFtcGxlcyBwIGJ7CisgIGZvbnQtc2l6ZTogMTAwLjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLnRvYyBkbCwKKy5saXN0LW9mLXRhYmxlcyBkbCwKKy5saXN0LW9mLWZpZ3VyZXMgZGwsCisubGlzdC1vZi1leGFtcGxlcyBkbCB7CisgIG1hcmdpbjogMGVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkdCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZGQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDIuNmVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5nbG9zc2FyeSBkbCwKK2Rpdi52YXJpYWJsZWxpc3QgZGwgeworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBmb250LXdlaWdodDogbm9ybWFsOworICB3aWR0aDogMjBlbTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy52YXJpYWJsZWxpc3QgZGwgZHQgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKK30KKworLmdsb3NzYXJ5IGRsIGRkLAorLnZhcmlhYmxlbGlzdCBkbCBkZCB7CisgIG1hcmdpbi10b3A6IC0xZW07CisgIG1hcmdpbi1sZWZ0OiAyNS41ZW07Cit9CisKKy5nbG9zc2FyeSBkZCBwLAorLnZhcmlhYmxlbGlzdCBkZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworZGl2IHAuY29weXJpZ2h0IHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworZGl2LmxlZ2Fsbm90aWNlIHAubGVnYWxub3RpY2UtdGl0bGUgeworICBtYXJnaW4tYm90dG9tOiAwZW07Cit9CisKK3AgeworICBsaW5lLWhlaWdodDogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKworfQorCitkbCB7CisgIHBhZGRpbmctdG9wOiAwZW07Cit9CisKK2hyIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKKworLm1lZGlhb2JqZWN0LAorLm1lZGlhb2JqZWN0Y28geworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKK2ltZyB7CisgIGJvcmRlcjogbm9uZTsKK30KKwordWwgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAxLjVlbTsKK30KKwordWwgbGkgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK3VsIGxpIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCit0YWJsZSB7CisgIHdpZHRoIDoxMDAlOworfQorCit0aCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKwordGQgeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3AgYVtpZF0geworICBtYXJnaW46IDBweDsKKyAgcGFkZGluZzogMHB4OworICBkaXNwbGF5OiBpbmxpbmU7CisgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Cit9CisKK2EgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK3ByZSB7CisgICAgb3ZlcmZsb3c6IGF1dG87Cit9CisKK2E6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgLypmb250LXdlaWdodDogYm9sZDsqLworfQorCisvKiBUaGlzIHN0eWxlIGRlZmluZXMgaG93IHRoZSBwZXJtYWxpbmsgY2hhcmFjdGVyCisgICBhcHBlYXJzIGJ5IGl0c2VsZiBhbmQgd2hlbiBob3ZlcmVkIG92ZXIgd2l0aAorICAgdGhlIG1vdXNlLiAqLworCitbYWx0PSdQZXJtYWxpbmsnXSB7IGNvbG9yOiAjZWVlOyB9CitbYWx0PSdQZXJtYWxpbmsnXTpob3ZlciB7IGNvbG9yOiBibGFjazsgfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSB7CisgIG1hcmdpbjogMWVtIDBlbTsKKyAgcGFkZGluZzogMWVtOworICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7Cit9CisKKworZGl2LmluZm9ybWFsZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsdGFibGUgcC50aXRsZSBiLAorZGl2LmZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYudGFibGUgcC50aXRsZSBieworICAgIHBhZGRpbmctdG9wOiAwZW07CisgICAgbWFyZ2luLXRvcDogMGVtOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisubWVkaWFvYmplY3QgLmNhcHRpb24sCisubWVkaWFvYmplY3QgLmNhcHRpb24gcCAgeworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nLXRvcDogMC41ZW07CisgIHBhZGRpbmctYm90dG9tOiAwLjVlbTsKK30KKworLmVwaWdyYXBoIHsKKyAgcGFkZGluZy1sZWZ0OiA1NSU7CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworLmVwaWdyYXBoIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuZXBpZ3JhcGggLnF1b3RlIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorLmVwaWdyYXBoIC5hdHRyaWJ1dGlvbiB7CisgIGZvbnQtc3R5bGU6IG5vcm1hbDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK3NwYW4uYXBwbGljYXRpb24geworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogODAlOworICB3aGl0ZS1zcGFjZTogcHJlOworICBtYXJnaW46IDEuMzNlbSAwZW07CisgIHBhZGRpbmc6IDEuMzNlbTsKK30KKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIG1hcmdpbi10b3A6IDFlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworCit9CisKKy8qIGZvcmNlIGZ1bGwgd2lkdGggb2YgdGFibGUgd2l0aGluIGRpdiAqLworLnRpcCB0YWJsZSwKKy53YXJuaW5nIHRhYmxlLAorLmNhdXRpb24gdGFibGUsCisubm90ZSB0YWJsZSB7CisgIGJvcmRlcjogbm9uZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIHBhZGRpbmc6IDAuOGVtIDAuMGVtIDAuMGVtIDAuMGVtOworICBtYXJnaW4gOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50aXAgcCwKKy53YXJuaW5nIHAsCisuY2F1dGlvbiBwLAorLm5vdGUgcCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKKyAgcGFkZGluZy1yaWdodDogMWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuYWNyb255bSB7CisgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIHBhZGRpbmc6IDAuMDllbSAwLjNlbTsKKyAgbWFyZ2luOiAwZW07Cit9CisKKy5pdGVtaXplZGxpc3QgbGkgeworICBjbGVhcjogbm9uZTsKK30KKworLmZpbGVuYW1lIHsKKyAgZm9udC1zaXplOiBtZWRpdW07CisgIGZvbnQtZmFtaWx5OiBDb3VyaWVyLCBtb25vc3BhY2U7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgbGVmdDogMGVtOworICB0b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7CisgIGJhY2tncm91bmQtY29sb3I6ICNjZGY7CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgcG9zaXRpb246IGZpeGVkOworICBsZWZ0OiAwZW07CisgIGJvdHRvbTogMGVtOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICB3aWR0aDogMTAwJTsKK30KKworCitkaXYubmF2aGVhZGVyIHRkLAorZGl2Lm5hdmZvb3RlciB0ZCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRoIHsKKyAgLypmb250LWZhbWlseTogR2VvcmdpYSwgVGltZXMsIHNlcmlmOyovCisgIC8qZm9udC1zaXplOiB4LWxhcmdlOyovCisgIGZvbnQtc2l6ZTogODAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci10b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhIHsKKyAgY29sb3I6ICM3Nzc7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworLyogbm9ybWFsIHRleHQgaW4gdGhlIGZvb3RlciAqLworZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCB7CisgIGNvbG9yOiBibGFjazsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOnZpc2l0ZWQsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6dmlzaXRlZCB7CisgIGNvbG9yOiAjNDQ0OworfQorCisKKy8qIGxpbmtzIGluIGhlYWRlciBhbmQgZm9vdGVyICovCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6aG92ZXIsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGNvbG9yOiAjMzNhOworfQorCitkaXYubmF2aGVhZGVyIGhyLAorZGl2Lm5hdmZvb3RlciBociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworLnFhbmRhc2V0IHRyLnF1ZXN0aW9uIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisucWFuZGFzZXQgdHIuYW5zd2VyIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorLmFuc3dlciB0ZCB7CisgIHBhZGRpbmctYm90dG9tOiAxLjVlbTsKK30KKworLmVtcGhhc2lzIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKworICAvKioqKioqKioqKioqKiAvCisgLyBkZWNvcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqLworCisudGl0bGVwYWdlIHsKK30KKworLnBhcnQgLnRpdGxlIHsKK30KKworLnN1YnRpdGxlIHsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKy8qCitoMSB7CisgIGJvcmRlcjogbm9uZTsKK30KKworaDIgeworICBib3JkZXItdG9wOiBzb2xpZCAwLjJlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoMyB7CisgIGJvcmRlci10b3A6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNCB7CisgIGJvcmRlcjogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g1IHsKKyAgYm9yZGVyOiAwZW07Cit9CisqLworCisucHJvZ3JhbWxpc3RpbmcgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKy5xdWVzdGlvbiB0ZCB7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsKK30KKworLmFuc3dlciB7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkOworfQorCisgIC8qKioqKioqKiogLworIC8gIGNvbG9ycyAgLworLyAqKioqKioqKiovCisKK2JvZHkgeworICBjb2xvcjogIzMzMzsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisKK2EgeworICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKK30KKworYTpob3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6ICNkZWRlZGU7Cit9CisKKworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDcsCitoOCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworfQorCitociB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworCisudGlwLCAud2FybmluZywgLmNhdXRpb24sIC5ub3RlIHsKKyAgYm9yZGVyLWNvbG9yOiAjZmZmOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmOworfQorCisKKy53YXJuaW5nIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisudGlwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLm5vdGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBjb2xvcjogIzA0NDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCitwcmUucHJvZ3JhbWxpc3RpbmcgeworICBjb2xvcjogYmxhY2s7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKKyAgYm9yZGVyLXdpZHRoOiAycHg7Cit9CisKKy5ndWltZW51LAorLmd1aWxhYmVsLAorLmd1aW1lbnVpdGVtIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICBib3JkZXItY29sb3I6ICM5OTk7Cit9CisKKworZGl2Lm5hdmhlYWRlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworICAvKioqKioqKioqKiogLworIC8gIGdyYXBoaWNzICAvCisvICoqKioqKioqKioqLworCisvKgorYm9keSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2JvZHlfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5uYXZoZWFkZXIsCisubm90ZSwKKy50aXAgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ub3RlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisud2FybmluZywKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvd2FybmluZ19iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLmZpZ3VyZSwKKy5pbmZvcm1hbGZpZ3VyZSwKKy5leGFtcGxlLAorLmluZm9ybWFsZXhhbXBsZSwKKy50YWJsZSwKKy5pbmZvcm1hbHRhYmxlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvZmlndXJlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisqLworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDd7Cit9CisKKy8qCitFeGFtcGxlIG9mIGhvdyB0byBzdGljayBhbiBpbWFnZSBhcyBwYXJ0IG9mIHRoZSB0aXRsZS4KKworZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL3doaXRlLW9uLWJsYWNrLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKK30KKyovCisKK2Rpdi5wcmVmYWNlIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmNvbG9waG9uIC50aXRsZSwKK2Rpdi5jaGFwdGVyIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKK30KKworZGl2LnNlY3Rpb24gZGl2LnNlY3Rpb24gLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuc2VjdDIgLnRpdGxlcGFnZSAudGl0bGUgeworICAgIGJhY2tncm91bmQ6IG5vbmU7Cit9CisKKworaDEudGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgaGVpZ2h0OiAyNTZweDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKK30KKworaDIuc3VidGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKKyAgd2lkdGg6IDBweDsKKyAgZGlzcGxheTogbm9uZTsKK30KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvICBwaXBwaW4uZ2ltcC5vcmcgc3BlY2lmaWMgYWx0ZXJhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICBjb2xvcjogIzc3NzsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmc6IDA7CisgIG1hcmdpbjogMDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDBweDsKKyAgbGVmdDogMHB4OworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiA1MHB4OworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvaGVhZGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworICBib3JkZXI6IG5vbmU7Cit9CisKK2Rpdi5oZWFkaW5nIGEgeworICBjb2xvcjogIzQ0NDsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICBib3JkZXI6IG5vbmU7CisgIGNvbG9yOiAjZGRkOworICBmb250LXNpemU6IDgwJTsKKyAgdGV4dC1hbGlnbjpyaWdodDsKKworICB3aWR0aDogMTAwJTsKKyAgcGFkZGluZy10b3A6IDEwcHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgYm90dG9tOiAwcHg7CisgIGxlZnQ6IDBweDsKKworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvZm9vdGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKK30KKyovCisKKworCisgIC8qKioqKioqKioqKioqKioqKiogLworIC8gIG5hc3R5IGllIHR3ZWFrcyAgLworLyAqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworICBtYXJnaW4tbGVmdDpleHByZXNzaW9uKCItNWVtIik7Cit9Citib2R5IHsKKyAgcGFkZGluZzpleHByZXNzaW9uKCI0ZW0gNWVtIDBlbSA1ZW0iKTsKK30KKyovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gbW96aWxsYSB2ZW5kb3Igc3BlY2lmaWMgY3NzIGV4dGVuc2lvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgLW1vei1vcGFjaXR5OiAwLjhlbTsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlLAorLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC41ZW07Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC4zZW07Cit9CisqLworCit0YWJsZSB0ciB0ZCB0YWJsZSB0ciB0ZCB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworaHIgeworICBkaXNwbGF5OiBub25lOworfQorCit0YWJsZSB7CisgIGJvcmRlcjogMGVtOworfQorCisgLnBob3RvIHsKKyAgZmxvYXQ6IHJpZ2h0OworICBtYXJnaW4tbGVmdDogICAxLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWF4LXdpZHRoOiAgICAgIDE3ZW07CisgIGJvcmRlcjogICAgIDFweCBzb2xpZCBncmF5OworICBwYWRkaW5nOiAgICAzcHg7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorIC5zZXBlcmF0b3IgeworICAgcGFkZGluZy10b3A6IDJlbTsKKyAgIGNsZWFyOiBib3RoOworICB9CisKKyAgI3ZhbGlkYXRvcnMgeworICAgICAgbWFyZ2luLXRvcDogNWVtOworICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICBjb2xvcjogIzc3NzsKKyAgfQorICBAbWVkaWEgcHJpbnQgeworICAgICAgYm9keSB7CisgICAgICAgICAgZm9udC1zaXplOiA4cHQ7CisgICAgICB9CisgICAgICAubm9wcmludCB7CisgICAgICAgICAgZGlzcGxheTogbm9uZTsKKyAgICAgIH0KKyAgfQorCisKKy50aXAsCisubm90ZSB7CisgICBiYWNrZ3JvdW5kOiAjZjBmMGYyOworICAgY29sb3I6ICMzMzM7CisgICBwYWRkaW5nOiAyMHB4OworICAgbWFyZ2luOiAyMHB4OworfQorCisudGlwIGgzLAorLm5vdGUgaDMgeworICAgcGFkZGluZzogMGVtOworICAgbWFyZ2luOiAwZW07CisgICBmb250LXNpemU6IDJlbTsKKyAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgY29sb3I6ICMzMzM7Cit9CisKKy50aXAgYSwKKy5ub3RlIGEgeworICAgY29sb3I6ICMzMzM7CisgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLmZvb3Rub3RlIHsKKyAgIGZvbnQtc2l6ZTogc21hbGw7CisgICBjb2xvcjogIzMzMzsKK30KKworLyogQ2hhbmdlcyB0aGUgYW5ub3VuY2VtZW50IHRleHQgKi8KKy50aXAgaDMsCisud2FybmluZyBoMywKKy5jYXV0aW9uIGgzLAorLm5vdGUgaDMgeworICAgZm9udC1zaXplOmxhcmdlOworICAgY29sb3I6ICMwMDU1N0Q7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcG9reS5lbnQgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcG9reS5lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjNGY2ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wb2t5LmVudApAQCAtMCwwICsxLDcwIEBACis8IUVOVElUWSBESVNUUk8gIjEuOSI+Cis8IUVOVElUWSBESVNUUk9fQ09NUFJFU1NFRCAiMTkiPgorPCFFTlRJVFkgRElTVFJPX05BTUUgInRiZCI+Cis8IUVOVElUWSBZT0NUT19ET0NfVkVSU0lPTiAiMS45Ij4KKzwhRU5USVRZIFBPS1lWRVJTSU9OICIxNC4wLjAiPgorPCFFTlRJVFkgUE9LWVZFUlNJT05fQ09NUFJFU1NFRCAiMTQwMCI+Cis8IUVOVElUWSBZT0NUT19QT0tZICJwb2t5LSZESVNUUk9fTkFNRTstJlBPS1lWRVJTSU9OOyI+Cis8IUVOVElUWSBDT1BZUklHSFRfWUVBUiAiMjAxMC0yMDE1Ij4KKzwhRU5USVRZIFlPQ1RPX0RMX1VSTCAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnIj4KKzwhRU5USVRZIFlPQ1RPX0hPTUVfVVJMICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fTElTVFNfVVJMICJodHRwOi8vbGlzdHMueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19CVUdaSUxMQV9VUkwgImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnIj4KKzwhRU5USVRZIFlPQ1RPX1dJS0lfVVJMICJodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19BQl9VUkwgImh0dHA6Ly9hdXRvYnVpbGRlci55b2N0b3Byb2plY3Qub3JnIj4KKzwhRU5USVRZIFlPQ1RPX0dJVF9VUkwgImh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19BRFRSRVBPX1VSTCAiaHR0cDovL2FkdHJlcG8ueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19SRUxFQVNFX05PVEVTICImWU9DVE9fSE9NRV9VUkw7L2Rvd25sb2Fkcy9jb3JlLyZESVNUUk9fTkFNRTsmRElTVFJPX0NPTVBSRVNTRUQ7Ij4KKzwhRU5USVRZIE9FX0hPTUVfVVJMICJodHRwOi8vd3d3Lm9wZW5lbWJlZGRlZC5vcmciPgorPCFFTlRJVFkgT0VfTElTVFNfVVJMICJodHRwOi8vbGlzdHMub3BlbmVtYmVkZGVkLm9yZy9tYWlsbWFuIj4KKzwhRU5USVRZIE9FX0RPQ1NfVVJMICJodHRwOi8vZG9jcy5vcGVuZW1iZWRkZWQub3JnIj4KKzwhRU5USVRZIE9IX0hPTUVfVVJMICJodHRwOi8vby1oYW5kLmNvbSI+Cis8IUVOVElUWSBCSVRCQUtFX0hPTUVfVVJMICJodHRwOi8vZGV2ZWxvcGVyLmJlcmxpb3MuZGUvcHJvamVjdHMvYml0YmFrZS8iPgorPCFFTlRJVFkgRUNMSVBTRV9NQUlOX1VSTCAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9kb3dubG9hZHMiPgorPCFFTlRJVFkgRUNMSVBTRV9ETF9VUkwgImh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZyI+Cis8IUVOVElUWSBFQ0xJUFNFX0RMX1BMVUdJTl9VUkwgIiZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL2VjbGlwc2UtcGx1Z2luLyZESVNUUk87Ij4KKzwhRU5USVRZIEVDTElQU0VfVVBEQVRFU19VUkwgIiZFQ0xJUFNFX0RMX1VSTDsvdG0vdXBkYXRlcy8zLjMiPgorPCFFTlRJVFkgRUNMSVBTRV9JTkRJR09fVVJMICImRUNMSVBTRV9ETF9VUkw7L3JlbGVhc2VzL2luZGlnbyI+Cis8IUVOVElUWSBFQ0xJUFNFX0pVTk9fVVJMICImRUNMSVBTRV9ETF9VUkw7L3JlbGVhc2VzL2p1bm8iPgorPCFFTlRJVFkgRUNMSVBTRV9MVU5BX1VSTCAiJkVDTElQU0VfRExfVVJMOy9yZWxlYXNlcy9sdW5hIj4KKzwhRU5USVRZIEVDTElQU0VfS0VQTEVSX1VSTCAiJkVDTElQU0VfRExfVVJMOy9yZWxlYXNlcy9rZXBsZXIiPgorPCFFTlRJVFkgRUNMSVBTRV9JTkRJR09fQ0RUX1VSTCAiJkVDTElQU0VfRExfVVJMOy90b29scy9jZHQvcmVsZWFzZXMvaW5kaWdvIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfVVJMICImWU9DVE9fSE9NRV9VUkw7L2RvY3MiPgorPCFFTlRJVFkgWU9DVE9fU09VUkNFU19VUkwgIiZZT0NUT19IT01FX1VSTDsvc291cmNlcy8iPgorPCFFTlRJVFkgWU9DVE9fQUJfUE9SVF9VUkwgIiZZT0NUT19BQl9VUkw7OjgwMTAiPgorPCFFTlRJVFkgWU9DVE9fQUJfTklHSFRMWV9VUkwgIiZZT0NUT19BQl9VUkw7L3B1Yi9uaWdodGx5LyI+Cis8IUVOVElUWSBZT0NUT19QT0tZX1VSTCAiJllPQ1RPX0RMX1VSTDsvcmVsZWFzZXMvcG9reS8iPgorPCFFTlRJVFkgWU9DVE9fUkVMRUFTRV9ETF9VUkwgIiZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL3lvY3RvL3lvY3RvLSZESVNUUk87Ij4KKzwhRU5USVRZIFlPQ1RPX1RPT0xDSEFJTl9ETF9VUkwgIiZZT0NUT19SRUxFQVNFX0RMX1VSTDsvdG9vbGNoYWluLyI+Cis8IUVOVElUWSBZT0NUT19FQ0xJUFNFX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy9lY2xpcHNlLXBsdWdpbi8iPgorPCFFTlRJVFkgWU9DVE9fQURUSU5TVEFMTEVSX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy9hZHQtaW5zdGFsbGVyIj4KKzwhRU5USVRZIFlPQ1RPX1BPS1lfRExfVVJMICImWU9DVE9fUkVMRUFTRV9ETF9VUkw7LyZZT0NUT19QT0tZOy50YXIuYnoyIj4KKzwhRU5USVRZIFlPQ1RPX01BQ0hJTkVTX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy9tYWNoaW5lcyI+Cis8IUVOVElUWSBZT0NUT19RRU1VX0RMX1VSTCAiJllPQ1RPX01BQ0hJTkVTX0RMX1VSTDsvcWVtdSI+Cis8IUVOVElUWSBZT0NUT19QWVRIT04taTY4Nl9ETF9VUkwgIiZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL21pc2NzdXBwb3J0L3B5dGhvbi1uYXRpdmVzZGstc3RhbmRhbG9uZS1pNjg2LnRhci5iejIiPgorPCFFTlRJVFkgWU9DVE9fUFlUSE9OLXg4Nl82NF9ETF9VUkwgIiZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL21pc2NzdXBwb3J0L3B5dGhvbi1uYXRpdmVzZGstc3RhbmRhbG9uZS14ODZfNjQudGFyLmJ6MiI+Cis8IUVOVElUWSBZT0NUT19ET0NTX1FTX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfQURUX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L2FkdC1tYW51YWwvYWR0LW1hbnVhbC5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfUkVGX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfQlNQX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L2JzcC1ndWlkZS9ic3AtZ3VpZGUuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0RFVl9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9kZXYtbWFudWFsL2Rldi1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0tFUk5FTF9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9rZXJuZWwtbWFudWFsL2tlcm5lbC1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMICImWU9DVE9fRE9DU19VUkw7LyZZT0NUT19ET0NfVkVSU0lPTjsva2VybmVsLWRldi9rZXJuZWwtZGV2Lmh0bWwiPgorPCFFTlRJVFkgWU9DVE9fRE9DU19QUk9GX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLmh0bWwiPgorPCFFTlRJVFkgWU9DVE9fRE9DU19NTV9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9tZWdhLW1hbnVhbC9tZWdhLW1hbnVhbC5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfQkJfVVJMICImWU9DVE9fRE9DU19VUkw7LyZZT0NUT19ET0NfVkVSU0lPTjsvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLmh0bWwiPgorPCFFTlRJVFkgWU9DVE9fRE9DU19UT0FTVF9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0FEVFBBVEhfRElSICIvb3B0L3Bva3kvJkRJU1RSTzsiPgorPCFFTlRJVFkgWU9DVE9fUE9LWV9UQVJCQUxMICImWU9DVE9fUE9LWTsudGFyLmJ6MiI+Cis8IUVOVElUWSBPRV9JTklUX1BBVEggIiZZT0NUT19QT0tZOy9vZS1pbml0LWJ1aWxkLWVudiI+Cis8IUVOVElUWSBPRV9JTklUX0ZJTEUgIm9lLWluaXQtYnVpbGQtZW52Ij4KKzwhRU5USVRZIFVCVU5UVV9IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTCAiZ2F3ayB3Z2V0IGdpdC1jb3JlIGRpZmZzdGF0IHVuemlwIHRleGluZm8gZ2NjLW11bHRpbGliIFwKKyAgICAgYnVpbGQtZXNzZW50aWFsIGNocnBhdGggc29jYXQiPgorPCFFTlRJVFkgRkVET1JBX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMICJnYXdrIG1ha2Ugd2dldCB0YXIgYnppcDIgZ3ppcCBweXRob24gdW56aXAgcGVybCBwYXRjaCBcCisgICAgIGRpZmZ1dGlscyBkaWZmc3RhdCBnaXQgY3BwIGdjYyBnY2MtYysrIGdsaWJjLWRldmVsIHRleGluZm8gY2hycGF0aCBcCisgICAgIGNjYWNoZSBwZXJsLURhdGEtRHVtcGVyIHBlcmwtVGV4dC1QYXJzZVdvcmRzIHBlcmwtVGhyZWFkLVF1ZXVlIHNvY2F0IFwKKyAgICAgZmluZHV0aWxzIHdoaWNoIj4KKzwhRU5USVRZIE9QRU5TVVNFX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMICJweXRob24gZ2NjIGdjYy1jKysgZ2l0IGNocnBhdGggbWFrZSB3Z2V0IHB5dGhvbi14bWwgXAorICAgICBkaWZmc3RhdCBtYWtlaW5mbyBweXRob24tY3Vyc2VzIHBhdGNoIHNvY2F0Ij4KKzwhRU5USVRZIENFTlRPU19IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTCAiZ2F3ayBtYWtlIHdnZXQgdGFyIGJ6aXAyIGd6aXAgcHl0aG9uIHVuemlwIHBlcmwgcGF0Y2ggXAorICAgICBkaWZmdXRpbHMgZGlmZnN0YXQgZ2l0IGNwcCBnY2MgZ2NjLWMrKyBnbGliYy1kZXZlbCB0ZXhpbmZvIGNocnBhdGggc29jYXQiPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstYWxsLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWFsbC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliNDBiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWFsbC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstY2hvb3NlLWV2ZW50cy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1jaG9vc2UtZXZlbnRzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGRkNjJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstY2hvb3NlLWV2ZW50cy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstaTkxNS1kaXNwbGF5LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWk5MTUtZGlzcGxheS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwZWRmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWk5MTUtZGlzcGxheS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstb3V0cHV0LWRpc3BsYXkucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstb3V0cHV0LWRpc3BsYXkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMmQwZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1vdXRwdXQtZGlzcGxheS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvbHR0bmdtYWluMC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9sdHRuZ21haW4wLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjYwMTEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvbHR0bmdtYWluMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1idXN5Ym94LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktYnVzeWJveC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyNzVjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktYnVzeWJveC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYjY0NzAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1kb3dubG9hZGluZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3NDJkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktcHJvY2Vzc2VzLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktcHJvY2Vzc2VzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTU0NzAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1wcm9jZXNzZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtcHJvYmUtZG9fZm9yay1wcm9maWxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtcHJvYmUtZG9fZm9yay1wcm9maWxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTEwNzBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi1wcm9iZS1kb19mb3JrLXByb2ZpbGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGVjNmFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi1yZXBvcnQtY3ljbGVzLXUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjcyODY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLWxpYmMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyY2UyNDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLW1lbnUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtYW5ub3RhdGUtbWVudS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViMzRlYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLW1lbnUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLXVkaGNwYy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ODFlOWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRlYnVnaW5mby5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kZWJ1Z2luZm8ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMTdiNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kZWJ1Z2luZm8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLW1lbnUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20tbWVudS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkxM2M4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLW1lbnUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTk2MmM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQyZDA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZXhwYW5kZWQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1mbGF0LXN0cmlwcGVkLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1mbGF0LXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGYzOTVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWZsYXQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktZnJvbS11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktZnJvbS11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjdjNzY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS1mcm9tLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLWRlYnVnaW5mby5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5OWFmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1zdHJpcHBlZC11bnJlc29sdmVkLWhpZGRlbi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQtdW5yZXNvbHZlZC1oaWRkZW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTgwOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQtdW5yZXNvbHZlZC1oaWRkZW4ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1zdHJpcHBlZC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMjMwMmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcHJvZmlsZS10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1YzY4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Ym9vdGNoYXJ0Z3VpLWxpbnV4LXlvY3RvLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Ym9vdGNoYXJ0Z3VpLWxpbnV4LXlvY3RvLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjZiZmRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcHlib290Y2hhcnRndWktbGludXgteW9jdG8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLW5vc3RyaXAucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0tbm9zdHJpcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0Njc1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLW5vc3RyaXAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWUzNTM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3NjaGVkLXdha2V1cC1wcm9maWxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3NjaGVkLXdha2V1cC1wcm9maWxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjI1ODExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvc2NoZWQtd2FrZXVwLXByb2ZpbGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY2FsbGVycy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNhbGxlcnMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MGM4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNhbGxlcnMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jb3B5LWZyb20tdXNlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzMTQyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS10by11c2VyLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS10by11c2VyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTViYWI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jb3B5LXRvLXVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1hcmNoLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1hcmNoLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWQxMTU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWFyY2gueG1sCkBAIC0wLDAgKzEsNDUgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdwcm9maWxlLW1hbnVhbC1hcmNoJz4KKworPHRpdGxlPk92ZXJhbGwgQXJjaGl0ZWN0dXJlIG9mIHRoZSBMaW51eCBUcmFjaW5nIGFuZCBQcm9maWxpbmcgVG9vbHM8L3RpdGxlPgorCis8c2VjdGlvbiBpZD0nYXJjaGl0ZWN0dXJlLW9mLXRoZS10cmFjaW5nLWFuZC1wcm9maWxpbmctdG9vbHMnPgorICAgIDx0aXRsZT5BcmNoaXRlY3R1cmUgb2YgdGhlIFRyYWNpbmcgYW5kIFByb2ZpbGluZyBUb29sczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSXQgbWF5IHNlZW0gc3VycHJpc2luZyB0byBzZWUgYSBzZWN0aW9uIGNvdmVyaW5nIGFuICdvdmVyYWxsIGFyY2hpdGVjdHVyZScKKyAgICAgICAgZm9yIHdoYXQgc2VlbXMgdG8gYmUgYSByYW5kb20gY29sbGVjdGlvbiBvZiB0cmFjaW5nIHRvb2xzIHRoYXQgdG9nZXRoZXIKKyAgICAgICAgbWFrZSB1cCB0aGUgTGludXggdHJhY2luZyBhbmQgcHJvZmlsaW5nIHNwYWNlLgorICAgICAgICBUaGUgZmFjdCBpcywgaG93ZXZlciwgdGhhdCBpbiByZWNlbnQgeWVhcnMgdGhpcyBzZWVtaW5nbHkgZGlzcGFyYXRlCisgICAgICAgIHNldCBvZiB0b29scyBoYXMgc3RhcnRlZCB0byBjb252ZXJnZSBvbiBhICdjb3JlJyBzZXQgb2YgdW5kZXJseWluZworICAgICAgICBtZWNoYW5pc21zOgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPnN0YXRpYyB0cmFjZXBvaW50czwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+ZHluYW1pYyB0cmFjZXBvaW50cworICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPmtwcm9iZXM8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPnVwcm9iZXM8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+dGhlIHBlcmZfZXZlbnRzIHN1YnN5c3RlbTwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+ZGVidWdmczwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBSYXRoZXIgdGhhbiBlbnVtZXJhdGluZyBoZXJlIGhvdyBlYWNoIHRvb2wgbWFrZXMgdXNlIG9mCisgICAgICAgIHRoZXNlIGNvbW1vbiBtZWNoYW5pc21zLCB0ZXh0Ym94ZXMgbGlrZSB0aGlzIHdpbGwgbWFrZSBub3RlIG9mIHRoZQorICAgICAgICBzcGVjaWZpYyB1c2FnZXMgaW4gZWFjaCB0b29sIGFzIHRoZXkgY29tZSB1cCBpbiB0aGUgY291cnNlCisgICAgICAgIG9mIHRoZSB0ZXh0LgorICAgIDwvaW5mb3JtYWxleGFtcGxlPgorPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FhNTdlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDI3IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9Iidwcm9maWxlLW1hbnVhbC1zdHlsZS5jc3MnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIiBzZWxlY3Q9IkEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmlkLmF0dHJpYnV0ZXMiIHNlbGVjdD0iMSIgLz4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5ODI4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0CisJeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisJeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKwl2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworICA8eHNsOmltcG9ydAorCSAgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVua2VyLm91dHB1dC5pbmRlbnQiIHNlbGVjdD0iJ3llcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5xdWlldGx5IiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5maXJzdC5zZWN0aW9ucyIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuc2VjdGlvbi5kZXB0aCIgc2VsZWN0PSIxMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVzZS5pZC5hcy5maWxlbmFtZSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0idWxpbmsudGFyZ2V0IiBzZWxlY3Q9Iidfc2VsZiciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYmFzZS5kaXIiIHNlbGVjdD0iJ2h0bWwvcHJvZmlsZS1tYW51YWwvJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInLi4vYm9vay5jc3MnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZWNsaXBzZS5tYW5pZmVzdCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY3JlYXRlLnBsdWdpbi54bWwiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InN1cHByZXNzLm5hdmlnYXRpb24iIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmluZGV4IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCI+QTwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtZXhhbXBsZXMueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWV4YW1wbGVzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjMwYzZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWV4YW1wbGVzLnhtbApAQCAtMCwwICsxLDM5IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ncHJvZmlsZS1tYW51YWwtZXhhbXBsZXMnPgorCis8dGl0bGU+UmVhbC1Xb3JsZCBFeGFtcGxlczwvdGl0bGU+CisKKzxwYXJhPgorICAgIFRoaXMgY2hhcHRlciBjb250YWlucyByZWFsLXdvcmxkIGV4YW1wbGVzLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0nc2xvdy13cml0ZS1zcGVlZC1vbi1saXZlLWltYWdlcyc+CisgICAgPHRpdGxlPlNsb3cgV3JpdGUgU3BlZWQgb24gTGl2ZSBJbWFnZXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEluIG9uZSBvZiBvdXIgcHJldmlvdXMgcmVsZWFzZXMgKGRlbnppbCksIHVzZXJzIG5vdGljZWQgdGhhdCBib290aW5nCisgICAgICAgIG9mZiBvZiBhIGxpdmUgaW1hZ2UgYW5kIHdyaXRpbmcgdG8gZGlzayB3YXMgbm90aWNlYWJseSBzbG93ZXIuCisgICAgICAgIFRoaXMgaW5jbHVkZWQgdGhlIGJvb3QgaXRzZWxmLCBlc3BlY2lhbGx5IHRoZSBmaXJzdCBvbmUsIHNpbmNlIGZpcnN0CisgICAgICAgIGJvb3RzIHRlbmQgdG8gZG8gYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygd3JpdGluZyBkdWUgdG8gY2VydGFpbgorICAgICAgICBwb3N0LWluc3RhbGwgc2NyaXB0cy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIHByb2JsZW0gKGFuZCBzb2x1dGlvbikgd2FzIGRpc2NvdmVyZWQgYnkgdXNpbmcgdGhlIFlvY3RvIHRyYWNpbmcKKyAgICAgICAgdG9vbHMsIGluIHRoaXMgY2FzZSAncGVyZiBzdGF0JywgJ3BlcmYgc2NyaXB0JywgJ3BlcmYgcmVjb3JkJworICAgICAgICBhbmQgJ3BlcmYgcmVwb3J0Jy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU2VlIGFsbCB0aGUgdW52YXJuaXNoZWQgZGV0YWlscyBvZiBob3cgdGhpcyBidWcgd2FzIGRpYWdub3NlZCBhbmQKKyAgICAgICAgc29sdmVkIGhlcmU6IFlvY3RvIEJ1ZyAjMzA0OQorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtaW50cm8ueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWludHJvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzQ3ZjUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWludHJvLnhtbApAQCAtMCwwICsxLDEwMiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3Byb2ZpbGUtbWFudWFsLWludHJvJz4KKworPHRpdGxlPllvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nIE1hbnVhbDwvdGl0bGU+CisgICAgPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtaW50cm8nPgorICAgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvY3RvIGJ1bmRsZXMgYSBudW1iZXIgb2YgdHJhY2luZyBhbmQgcHJvZmlsaW5nIHRvb2xzIC0gdGhpcyAnSE9XVE8nCisgICAgICAgICAgICBkZXNjcmliZXMgdGhlaXIgYmFzaWMgdXNhZ2UgYW5kIHNob3dzIGJ5IGV4YW1wbGUgaG93IHRvIG1ha2UgdXNlCisgICAgICAgICAgICBvZiB0aGVtIHRvIGV4YW1pbmUgYXBwbGljYXRpb24gYW5kIHN5c3RlbSBiZWhhdmlvci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHRvb2xzIHByZXNlbnRlZCBhcmUgZm9yIHRoZSBtb3N0IHBhcnQgY29tcGxldGVseSBvcGVuLWVuZGVkIGFuZAorICAgICAgICAgICAgaGF2ZSBxdWl0ZSBnb29kIGFuZC9vciBleHRlbnNpdmUgZG9jdW1lbnRhdGlvbiBvZiB0aGVpciBvd24gd2hpY2gKKyAgICAgICAgICAgIGNhbiBiZSB1c2VkIHRvIHNvbHZlIGp1c3QgYWJvdXQgYW55IHByb2JsZW0geW91IG1pZ2h0IGNvbWUgYWNyb3NzCisgICAgICAgICAgICBpbiBMaW51eC4KKyAgICAgICAgICAgIEVhY2ggc2VjdGlvbiB0aGF0IGRlc2NyaWJlcyBhIHBhcnRpY3VsYXIgdG9vbCBoYXMgbGlua3MgdG8gdGhhdAorICAgICAgICAgICAgdG9vbCdzIGRvY3VtZW50YXRpb24gYW5kIHdlYnNpdGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgJ0hPV1RPJyBpcyB0byBwcmVzZW50IGEgc2V0IG9mIGNvbW1vbiBhbmQKKyAgICAgICAgICAgIGdlbmVyYWxseSB1c2VmdWwgdHJhY2luZyBhbmQgcHJvZmlsaW5nIGlkaW9tcyBhbG9uZyB3aXRoIHRoZWlyCisgICAgICAgICAgICBhcHBsaWNhdGlvbiAoYXMgYXBwcm9wcmlhdGUpIHRvIGVhY2ggdG9vbCwgaW4gdGhlIGNvbnRleHQgb2YgYQorICAgICAgICAgICAgZ2VuZXJhbC1wdXJwb3NlICdkcmlsbC1kb3duJyBtZXRob2RvbG9neSB0aGF0IGNhbiBiZSBhcHBsaWVkCisgICAgICAgICAgICB0byBzb2x2aW5nIGEgbGFyZ2UgbnVtYmVyICg5MCU/KSBvZiBwcm9ibGVtcy4KKyAgICAgICAgICAgIEZvciBoZWxwIHdpdGggbW9yZSBhZHZhbmNlZCB1c2FnZXMgYW5kIHByb2JsZW1zLCBwbGVhc2Ugc2VlCisgICAgICAgICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igd2Vic2l0ZXMgbGlzdGVkIGZvciBlYWNoIHRvb2wuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmaW5hbCBzZWN0aW9uIG9mIHRoaXMgJ0hPV1RPJyBpcyBhIGNvbGxlY3Rpb24gb2YgcmVhbC13b3JsZAorICAgICAgICAgICAgZXhhbXBsZXMgd2hpY2ggd2UnbGwgYmUgY29udGludWFsbHkgYWRkaW5nIHRvIGFzIHdlIHNvbHZlIG1vcmUKKyAgICAgICAgICAgIHByb2JsZW1zIHVzaW5nIHRoZSB0b29scyAtIGZlZWwgZnJlZSB0byBhZGQgeW91ciBvd24gZXhhbXBsZXMKKyAgICAgICAgICAgIHRvIHRoZSBsaXN0IQorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtbWFudWFsLWdlbmVyYWwtc2V0dXAnPgorICAgICAgICA8dGl0bGU+R2VuZXJhbCBTZXR1cDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBNb3N0IG9mIHRoZSB0b29scyBhcmUgYXZhaWxhYmxlIG9ubHkgaW4gJ3NkaycgaW1hZ2VzIG9yIGluIGltYWdlcworICAgICAgICAgICAgYnVpbHQgYWZ0ZXIgYWRkaW5nICd0b29scy1wcm9maWxlJyB0byB5b3VyIGxvY2FsLmNvbmYuCisgICAgICAgICAgICBTbywgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYWxsIG9mIHRoZSB0b29scyBkZXNjcmliZWQgaGVyZSwKKyAgICAgICAgICAgIHBsZWFzZSBmaXJzdCBidWlsZCBhbmQgYm9vdCBhbiAnc2RrJyBpbWFnZSBlLmcuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8tc2RrCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBvciBhbHRlcm5hdGl2ZWx5IGJ5IGFkZGluZyAndG9vbHMtcHJvZmlsZScgdG8gdGhlCisgICAgICAgICAgICBFWFRSQV9JTUFHRV9GRUFUVVJFUyBsaW5lIGluIHlvdXIgbG9jYWwuY29uZjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIEVYVFJBX0lNQUdFX0ZFQVRVUkVTID0gImRlYnVnLXR3ZWFrcyB0b29scy1wcm9maWxlIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSWYgeW91IHVzZSB0aGUgJ3Rvb2xzLXByb2ZpbGUnIG1ldGhvZCwgeW91IGRvbid0IG5lZWQgdG8gYnVpbGQgYW4KKyAgICAgICAgICAgIHNkayBpbWFnZSAtIHRoZSB0cmFjaW5nIGFuZCBwcm9maWxpbmcgdG9vbHMgd2lsbCBiZSBpbmNsdWRlZCBpbgorICAgICAgICAgICAgbm9uLXNkayBpbWFnZXMgYXMgd2VsbCBlLmcuOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8bm90ZT48cGFyYT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgWW9jdG8gYnVpbGQgc3lzdGVtIHN0cmlwcyBzeW1ib2xzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgYmluYXJpZXMgaXQgcGFja2FnZXMsIHdoaWNoIG1ha2VzIGl0IGRpZmZpY3VsdCB0byB1c2Ugc29tZQorICAgICAgICAgICAgICAgIG9mIHRoZSB0b29scy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PHBhcmE+WW91IGNhbiBwcmV2ZW50IHRoYXQgYnkgcHV0dGluZyB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgaW4geW91ciBsb2NhbC5jb25mIHdoZW4geW91IGJ1aWxkIHRoZSBpbWFnZToKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSElCSVRfUEFDS0FHRV9TVFJJUCA9ICIxIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGFib3ZlIHNldHRpbmcgd2lsbCBub3RpY2VhYmx5IGluY3JlYXNlIHRoZSBzaXplIG9mIHlvdXIgaW1hZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSd2ZSBhbHJlYWR5IGJ1aWx0IGEgc3RyaXBwZWQgaW1hZ2UsIHlvdSBjYW4gZ2VuZXJhdGUKKyAgICAgICAgICAgIGRlYnVnIHBhY2thZ2VzICh4eHgtZGJnKSB3aGljaCB5b3UgY2FuIG1hbnVhbGx5IGluc3RhbGwgYXMKKyAgICAgICAgICAgIG5lZWRlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gZ2VuZXJhdGUgZGVidWcgaW5mbyBmb3IgcGFja2FnZXMsIHlvdSBjYW4gYWRkIGRiZy1wa2dzIHRvCisgICAgICAgICAgICBFWFRSQV9JTUFHRV9GRUFUVVJFUyBpbiBsb2NhbC5jb25mLiBGb3IgZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAiZGVidWctdHdlYWtzIHRvb2xzLXByb2ZpbGUgZGJnLXBrZ3MiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBZGRpdGlvbmFsbHksIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSByaWdodCB0eXBlIG9mCisgICAgICAgICAgICBkZWJ1Z2luZm8sIHdlIGFsc28gbmVlZCB0byBhZGQgdGhlIGZvbGxvd2luZyB0byBsb2NhbC5jb25mOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFID0gJ2RlYnVnLWZpbGUtZGlyZWN0b3J5JworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtc3R5bGUuY3NzIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLXN0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2NjYTg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLXN0eWxlLmNzcwpAQCAtMCwwICsxLDk4NCBAQAorLyoKKyAgIEdlbmVyaWMgWEhUTUwgLyBEb2NCb29rIFhIVE1MIENTUyBTdHlsZXNoZWV0LgorCisgICBCcm93c2VyIHdyYW5nbGluZyBhbmQgdHlwb2dyYXBoaWMgZGVzaWduIGJ5CisgICAgICBPeXZpbmQgS29sYXMgLyBwaXBwaW5AZ2ltcC5vcmcKKworICAgQ3VzdG9taXNlZCBmb3IgUG9reSBieQorICAgICAgTWF0dGhldyBBbGx1bSAvIG1hbGx1bUBvLWhhbmQuY29tCisKKyAgIFRoYW5rcyB0bzoKKyAgICAgTGlhbSBSLiBFLiBRdWluCisgICAgIFdpbGxpYW0gU2thZ2dzCisgICAgIEpha3ViIFN0ZWluZXIKKworICAgU3RydWN0dXJlCisgICAtLS0tLS0tLS0KKworICAgVGhlIHN0eWxlc2hlZXQgaXMgZGl2aWRlZCBpbnRvIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisKKyAgICAgICBQb3NpdGlvbmluZworICAgICAgICAgIE1hcmdpbnMsIHBhZGRpbmdzLCB3aWR0aCwgZm9udC1zaXplLCBjbGVhcmluZy4KKyAgICAgICBEZWNvcmF0aW9ucworICAgICAgICAgIEJvcmRlcnMsIHN0eWxlCisgICAgICAgQ29sb3JzCisgICAgICAgICAgQ29sb3JzCisgICAgICAgR3JhcGhpY3MKKyAgICAgICAgICBHcmFwaGljYWwgYmFja2dyb3VuZHMKKyAgICAgICBOYXN0eSBJRSB0d2Vha3MKKyAgICAgICAgICBXb3JrYXJvdW5kcyBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIGluIGludGVybmV0IGV4cGxvcmVyLAorICAgICAgICAgIGN1cnJlbnRseSBtYWtlcyB0aGUgc3R5bGVzaGVldCBub24gdmFsaWRhdGluZywgYnV0IHVwIHVudGlsCisgICAgICAgICAgdGhpcyBwb2ludCBpdCBpcyB2YWxpZGF0aW5nLgorICAgICAgIE1vemlsbGEgZXh0ZW5zaW9ucworICAgICAgICAgIFRyYW5zcGFyZW5jeSBmb3IgZm9vdGVyCisJICBSb3VuZGVkIGNvcm5lcnMgb24gYm94ZXMKKworKi8KKworCisgIC8qKioqKioqKioqKioqKiogLworIC8gIFBvc2l0aW9uaW5nICAgLworLyAqKioqKioqKioqKioqKiovCisKK2JvZHkgeworICBmb250LWZhbWlseTogVmVyZGFuYSwgU2Fucywgc2Fucy1zZXJpZjsKKworICBtaW4td2lkdGg6IDY0MHB4OworICB3aWR0aDogODAlOworICBtYXJnaW46ICAwZW0gYXV0bzsKKyAgcGFkZGluZzogMmVtIDVlbSA1ZW0gNWVtOworICBjb2xvcjogIzMzMzsKK30KKworaDEsaDIsaDMsaDQsaDUsaDYsaDcgeworICBmb250LWZhbWlseTogQXJpYWwsIFNhbnM7CisgIGNvbG9yOiAjMDA1NTdEOworICBjbGVhcjogYm90aDsKK30KKworaDEgeworICBmb250LXNpemU6IDJlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDJlbSAwZW0gMGVtIDBlbTsKK30KKworaDIuc3VidGl0bGUgeworICBtYXJnaW46IDAuMTBlbSAwZW0gMy4wZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS44ZW07CisgIHBhZGRpbmctbGVmdDogMjAlOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2gyIHsKKyAgbWFyZ2luOiAyZW0gMGVtIDAuNjZlbSAwZW07CisgIHBhZGRpbmc6IDAuNWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuNWVtOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDMuc3VidGl0bGUgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0Mi4xNCU7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitoMyB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDQgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTIwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g1IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNiB7CisgIG1hcmdpbjogMWVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy5hdXRob3Jncm91cCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nLXRvcDogMjU2cHg7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy9wcm9maWxlLXRpdGxlLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IHRvcDsKKyAgbWFyZ2luLXRvcDogLTI1NnB4OworICBwYWRkaW5nLXJpZ2h0OiA1MHB4OworICBtYXJnaW4tbGVmdDogMHB4OworICB0ZXh0LWFsaWduOiByaWdodDsKKyAgd2lkdGg6IDc0MHB4OworfQorCitoMy5hdXRob3IgeworICBtYXJnaW46IDBlbSAwbWUgMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXNpemU6IDEwMCU7CisgIGNvbG9yOiAjMzMzOworICBjbGVhcjogYm90aDsKK30KKworLmF1dGhvciB0dC5lbWFpbCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCisudGl0bGVwYWdlIGhyIHsKKyAgd2lkdGg6IDBlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5yZXZoaXN0b3J5IHsKKyAgcGFkZGluZy10b3A6IDJlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy50b2MsCisubGlzdC1vZi10YWJsZXMsCisubGlzdC1vZi1leGFtcGxlcywKKy5saXN0LW9mLWZpZ3VyZXMgeworICBwYWRkaW5nOiAxLjMzZW0gMGVtIDIuNWVtIDBlbTsKKyAgY29sb3I6ICMwMDU1N0Q7Cit9CisKKy50b2MgcCwKKy5saXN0LW9mLXRhYmxlcyBwLAorLmxpc3Qtb2YtZmlndXJlcyBwLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwLjNlbTsKKyAgbWFyZ2luOiAxLjVlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBwIGIsCisubGlzdC1vZi10YWJsZXMgcCBiLAorLmxpc3Qtb2YtZmlndXJlcyBwIGIsCisubGlzdC1vZi1leGFtcGxlcyBwIGJ7CisgIGZvbnQtc2l6ZTogMTAwLjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLnRvYyBkbCwKKy5saXN0LW9mLXRhYmxlcyBkbCwKKy5saXN0LW9mLWZpZ3VyZXMgZGwsCisubGlzdC1vZi1leGFtcGxlcyBkbCB7CisgIG1hcmdpbjogMGVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkdCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZGQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDIuNmVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5nbG9zc2FyeSBkbCwKK2Rpdi52YXJpYWJsZWxpc3QgZGwgeworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBmb250LXdlaWdodDogbm9ybWFsOworICB3aWR0aDogMjBlbTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy52YXJpYWJsZWxpc3QgZGwgZHQgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKK30KKworLmdsb3NzYXJ5IGRsIGRkLAorLnZhcmlhYmxlbGlzdCBkbCBkZCB7CisgIG1hcmdpbi10b3A6IC0xZW07CisgIG1hcmdpbi1sZWZ0OiAyNS41ZW07Cit9CisKKy5nbG9zc2FyeSBkZCBwLAorLnZhcmlhYmxlbGlzdCBkZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworZGl2IHAuY29weXJpZ2h0IHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworZGl2LmxlZ2Fsbm90aWNlIHAubGVnYWxub3RpY2UtdGl0bGUgeworICBtYXJnaW4tYm90dG9tOiAwZW07Cit9CisKK3AgeworICBsaW5lLWhlaWdodDogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKworfQorCitkbCB7CisgIHBhZGRpbmctdG9wOiAwZW07Cit9CisKK2hyIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKKworLm1lZGlhb2JqZWN0LAorLm1lZGlhb2JqZWN0Y28geworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKK2ltZyB7CisgIGJvcmRlcjogbm9uZTsKK30KKwordWwgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAxLjVlbTsKK30KKwordWwgbGkgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK3VsIGxpIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCit0YWJsZSB7CisgIHdpZHRoIDoxMDAlOworfQorCit0aCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKwordGQgeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3AgYVtpZF0geworICBtYXJnaW46IDBweDsKKyAgcGFkZGluZzogMHB4OworICBkaXNwbGF5OiBpbmxpbmU7CisgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Cit9CisKK2EgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK3ByZSB7CisgICAgb3ZlcmZsb3c6IGF1dG87Cit9CisKK2E6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgLypmb250LXdlaWdodDogYm9sZDsqLworfQorCisvKiBUaGlzIHN0eWxlIGRlZmluZXMgaG93IHRoZSBwZXJtYWxpbmsgY2hhcmFjdGVyCisgICBhcHBlYXJzIGJ5IGl0c2VsZiBhbmQgd2hlbiBob3ZlcmVkIG92ZXIgd2l0aAorICAgdGhlIG1vdXNlLiAqLworCitbYWx0PSdQZXJtYWxpbmsnXSB7IGNvbG9yOiAjZWVlOyB9CitbYWx0PSdQZXJtYWxpbmsnXTpob3ZlciB7IGNvbG9yOiBibGFjazsgfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSB7CisgIG1hcmdpbjogMWVtIDBlbTsKKyAgcGFkZGluZzogMWVtOworICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7Cit9CisKKworZGl2LmluZm9ybWFsZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsdGFibGUgcC50aXRsZSBiLAorZGl2LmZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYudGFibGUgcC50aXRsZSBieworICAgIHBhZGRpbmctdG9wOiAwZW07CisgICAgbWFyZ2luLXRvcDogMGVtOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisubWVkaWFvYmplY3QgLmNhcHRpb24sCisubWVkaWFvYmplY3QgLmNhcHRpb24gcCAgeworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nLXRvcDogMC41ZW07CisgIHBhZGRpbmctYm90dG9tOiAwLjVlbTsKK30KKworLmVwaWdyYXBoIHsKKyAgcGFkZGluZy1sZWZ0OiA1NSU7CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworLmVwaWdyYXBoIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuZXBpZ3JhcGggLnF1b3RlIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorLmVwaWdyYXBoIC5hdHRyaWJ1dGlvbiB7CisgIGZvbnQtc3R5bGU6IG5vcm1hbDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK3NwYW4uYXBwbGljYXRpb24geworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogODAlOworICB3aGl0ZS1zcGFjZTogcHJlOworICBtYXJnaW46IDEuMzNlbSAwZW07CisgIHBhZGRpbmc6IDEuMzNlbTsKK30KKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIG1hcmdpbi10b3A6IDFlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworCit9CisKKy8qIGZvcmNlIGZ1bGwgd2lkdGggb2YgdGFibGUgd2l0aGluIGRpdiAqLworLnRpcCB0YWJsZSwKKy53YXJuaW5nIHRhYmxlLAorLmNhdXRpb24gdGFibGUsCisubm90ZSB0YWJsZSB7CisgIGJvcmRlcjogbm9uZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIHBhZGRpbmc6IDAuOGVtIDAuMGVtIDAuMGVtIDAuMGVtOworICBtYXJnaW4gOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50aXAgcCwKKy53YXJuaW5nIHAsCisuY2F1dGlvbiBwLAorLm5vdGUgcCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKKyAgcGFkZGluZy1yaWdodDogMWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuYWNyb255bSB7CisgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIHBhZGRpbmc6IDAuMDllbSAwLjNlbTsKKyAgbWFyZ2luOiAwZW07Cit9CisKKy5pdGVtaXplZGxpc3QgbGkgeworICBjbGVhcjogbm9uZTsKK30KKworLmZpbGVuYW1lIHsKKyAgZm9udC1zaXplOiBtZWRpdW07CisgIGZvbnQtZmFtaWx5OiBDb3VyaWVyLCBtb25vc3BhY2U7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgbGVmdDogMGVtOworICB0b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7CisgIGJhY2tncm91bmQtY29sb3I6ICNjZGY7CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgcG9zaXRpb246IGZpeGVkOworICBsZWZ0OiAwZW07CisgIGJvdHRvbTogMGVtOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICB3aWR0aDogMTAwJTsKK30KKworCitkaXYubmF2aGVhZGVyIHRkLAorZGl2Lm5hdmZvb3RlciB0ZCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRoIHsKKyAgLypmb250LWZhbWlseTogR2VvcmdpYSwgVGltZXMsIHNlcmlmOyovCisgIC8qZm9udC1zaXplOiB4LWxhcmdlOyovCisgIGZvbnQtc2l6ZTogODAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci10b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhIHsKKyAgY29sb3I6ICM3Nzc7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworLyogbm9ybWFsIHRleHQgaW4gdGhlIGZvb3RlciAqLworZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCB7CisgIGNvbG9yOiBibGFjazsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOnZpc2l0ZWQsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6dmlzaXRlZCB7CisgIGNvbG9yOiAjNDQ0OworfQorCisKKy8qIGxpbmtzIGluIGhlYWRlciBhbmQgZm9vdGVyICovCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6aG92ZXIsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGNvbG9yOiAjMzNhOworfQorCitkaXYubmF2aGVhZGVyIGhyLAorZGl2Lm5hdmZvb3RlciBociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworLnFhbmRhc2V0IHRyLnF1ZXN0aW9uIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisucWFuZGFzZXQgdHIuYW5zd2VyIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorLmFuc3dlciB0ZCB7CisgIHBhZGRpbmctYm90dG9tOiAxLjVlbTsKK30KKworLmVtcGhhc2lzIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKworICAvKioqKioqKioqKioqKiAvCisgLyBkZWNvcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqLworCisudGl0bGVwYWdlIHsKK30KKworLnBhcnQgLnRpdGxlIHsKK30KKworLnN1YnRpdGxlIHsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKy8qCitoMSB7CisgIGJvcmRlcjogbm9uZTsKK30KKworaDIgeworICBib3JkZXItdG9wOiBzb2xpZCAwLjJlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoMyB7CisgIGJvcmRlci10b3A6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNCB7CisgIGJvcmRlcjogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g1IHsKKyAgYm9yZGVyOiAwZW07Cit9CisqLworCisucHJvZ3JhbWxpc3RpbmcgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKy5xdWVzdGlvbiB0ZCB7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsKK30KKworLmFuc3dlciB7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkOworfQorCisgIC8qKioqKioqKiogLworIC8gIGNvbG9ycyAgLworLyAqKioqKioqKiovCisKK2JvZHkgeworICBjb2xvcjogIzMzMzsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisKK2EgeworICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKK30KKworYTpob3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6ICNkZWRlZGU7Cit9CisKKworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDcsCitoOCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworfQorCitociB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworCisudGlwLCAud2FybmluZywgLmNhdXRpb24sIC5ub3RlIHsKKyAgYm9yZGVyLWNvbG9yOiAjZmZmOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmOworfQorCisKKy53YXJuaW5nIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisudGlwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLm5vdGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBjb2xvcjogIzA0NDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCitwcmUucHJvZ3JhbWxpc3RpbmcgeworICBjb2xvcjogYmxhY2s7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKKyAgYm9yZGVyLXdpZHRoOiAycHg7Cit9CisKKy5ndWltZW51LAorLmd1aWxhYmVsLAorLmd1aW1lbnVpdGVtIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICBib3JkZXItY29sb3I6ICM5OTk7Cit9CisKKworZGl2Lm5hdmhlYWRlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworICAvKioqKioqKioqKiogLworIC8gIGdyYXBoaWNzICAvCisvICoqKioqKioqKioqLworCisvKgorYm9keSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2JvZHlfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5uYXZoZWFkZXIsCisubm90ZSwKKy50aXAgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ub3RlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisud2FybmluZywKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvd2FybmluZ19iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLmZpZ3VyZSwKKy5pbmZvcm1hbGZpZ3VyZSwKKy5leGFtcGxlLAorLmluZm9ybWFsZXhhbXBsZSwKKy50YWJsZSwKKy5pbmZvcm1hbHRhYmxlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvZmlndXJlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisqLworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDd7Cit9CisKKy8qCitFeGFtcGxlIG9mIGhvdyB0byBzdGljayBhbiBpbWFnZSBhcyBwYXJ0IG9mIHRoZSB0aXRsZS4KKworZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL3doaXRlLW9uLWJsYWNrLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKK30KKyovCisKK2Rpdi5wcmVmYWNlIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmNvbG9waG9uIC50aXRsZSwKK2Rpdi5jaGFwdGVyIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKK30KKworZGl2LnNlY3Rpb24gZGl2LnNlY3Rpb24gLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuc2VjdDIgLnRpdGxlcGFnZSAudGl0bGUgeworICAgIGJhY2tncm91bmQ6IG5vbmU7Cit9CisKKworaDEudGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgaGVpZ2h0OiAyNTZweDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKK30KKworaDIuc3VidGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKKyAgd2lkdGg6IDBweDsKKyAgZGlzcGxheTogbm9uZTsKK30KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvICBwaXBwaW4uZ2ltcC5vcmcgc3BlY2lmaWMgYWx0ZXJhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICBjb2xvcjogIzc3NzsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmc6IDA7CisgIG1hcmdpbjogMDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDBweDsKKyAgbGVmdDogMHB4OworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiA1MHB4OworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvaGVhZGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworICBib3JkZXI6IG5vbmU7Cit9CisKK2Rpdi5oZWFkaW5nIGEgeworICBjb2xvcjogIzQ0NDsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICBib3JkZXI6IG5vbmU7CisgIGNvbG9yOiAjZGRkOworICBmb250LXNpemU6IDgwJTsKKyAgdGV4dC1hbGlnbjpyaWdodDsKKworICB3aWR0aDogMTAwJTsKKyAgcGFkZGluZy10b3A6IDEwcHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgYm90dG9tOiAwcHg7CisgIGxlZnQ6IDBweDsKKworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvZm9vdGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKK30KKyovCisKKworCisgIC8qKioqKioqKioqKioqKioqKiogLworIC8gIG5hc3R5IGllIHR3ZWFrcyAgLworLyAqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworICBtYXJnaW4tbGVmdDpleHByZXNzaW9uKCItNWVtIik7Cit9Citib2R5IHsKKyAgcGFkZGluZzpleHByZXNzaW9uKCI0ZW0gNWVtIDBlbSA1ZW0iKTsKK30KKyovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gbW96aWxsYSB2ZW5kb3Igc3BlY2lmaWMgY3NzIGV4dGVuc2lvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgLW1vei1vcGFjaXR5OiAwLjhlbTsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlLAorLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC41ZW07Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC4zZW07Cit9CisqLworCit0YWJsZSB0ciB0ZCB0YWJsZSB0ciB0ZCB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworaHIgeworICBkaXNwbGF5OiBub25lOworfQorCit0YWJsZSB7CisgIGJvcmRlcjogMGVtOworfQorCisgLnBob3RvIHsKKyAgZmxvYXQ6IHJpZ2h0OworICBtYXJnaW4tbGVmdDogICAxLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWF4LXdpZHRoOiAgICAgIDE3ZW07CisgIGJvcmRlcjogICAgIDFweCBzb2xpZCBncmF5OworICBwYWRkaW5nOiAgICAzcHg7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorIC5zZXBlcmF0b3IgeworICAgcGFkZGluZy10b3A6IDJlbTsKKyAgIGNsZWFyOiBib3RoOworICB9CisKKyAgI3ZhbGlkYXRvcnMgeworICAgICAgbWFyZ2luLXRvcDogNWVtOworICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICBjb2xvcjogIzc3NzsKKyAgfQorICBAbWVkaWEgcHJpbnQgeworICAgICAgYm9keSB7CisgICAgICAgICAgZm9udC1zaXplOiA4cHQ7CisgICAgICB9CisgICAgICAubm9wcmludCB7CisgICAgICAgICAgZGlzcGxheTogbm9uZTsKKyAgICAgIH0KKyAgfQorCisKKy50aXAsCisubm90ZSB7CisgICBiYWNrZ3JvdW5kOiAjZjBmMGYyOworICAgY29sb3I6ICMzMzM7CisgICBwYWRkaW5nOiAyMHB4OworICAgbWFyZ2luOiAyMHB4OworfQorCisudGlwIGgzLAorLm5vdGUgaDMgeworICAgcGFkZGluZzogMGVtOworICAgbWFyZ2luOiAwZW07CisgICBmb250LXNpemU6IDJlbTsKKyAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgY29sb3I6ICMzMzM7Cit9CisKKy50aXAgYSwKKy5ub3RlIGEgeworICAgY29sb3I6ICMzMzM7CisgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLmZvb3Rub3RlIHsKKyAgIGZvbnQtc2l6ZTogc21hbGw7CisgICBjb2xvcjogIzMzMzsKK30KKworLyogQ2hhbmdlcyB0aGUgYW5ub3VuY2VtZW50IHRleHQgKi8KKy50aXAgaDMsCisud2FybmluZyBoMywKKy5jYXV0aW9uIGgzLAorLm5vdGUgaDMgeworICAgZm9udC1zaXplOmxhcmdlOworICAgY29sb3I6ICMwMDU1N0Q7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtdXNhZ2UueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLXVzYWdlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWFkNzM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLXVzYWdlLnhtbApAQCAtMCwwICsxLDM2OTUgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdwcm9maWxlLW1hbnVhbC11c2FnZSc+CisKKzx0aXRsZT5CYXNpYyBVc2FnZSAod2l0aCBleGFtcGxlcykgZm9yIGVhY2ggb2YgdGhlIFlvY3RvIFRyYWNpbmcgVG9vbHM8L3RpdGxlPgorCis8cGFyYT4KKyAgICBUaGlzIGNoYXB0ZXIgcHJlc2VudHMgYmFzaWMgdXNhZ2UgZXhhbXBsZXMgZm9yIGVhY2ggb2YgdGhlIHRyYWNpbmcKKyAgICB0b29scy4KKzwvcGFyYT4KKworPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtbWFudWFsLXBlcmYnPgorICAgIDx0aXRsZT5wZXJmPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgJ3BlcmYnIHRvb2wgaXMgdGhlIHByb2ZpbGluZyBhbmQgdHJhY2luZyB0b29sIHRoYXQgY29tZXMKKyAgICAgICAgYnVuZGxlZCB3aXRoIHRoZSBMaW51eCBrZXJuZWwuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIERvbid0IGxldCB0aGUgZmFjdCB0aGF0IGl0J3MgcGFydCBvZiB0aGUga2VybmVsIGZvb2wgeW91IGludG8gdGhpbmtpbmcKKyAgICAgICAgdGhhdCBpdCdzIG9ubHkgZm9yIHRyYWNpbmcgYW5kIHByb2ZpbGluZyB0aGUga2VybmVsIC0geW91IGNhbiBpbmRlZWQKKyAgICAgICAgdXNlIGl0IHRvIHRyYWNlIGFuZCBwcm9maWxlIGp1c3QgdGhlIGtlcm5lbCwgYnV0IHlvdSBjYW4gYWxzbyB1c2UgaXQKKyAgICAgICAgdG8gcHJvZmlsZSBzcGVjaWZpYyBhcHBsaWNhdGlvbnMgc2VwYXJhdGVseSAod2l0aCBvciB3aXRob3V0IGtlcm5lbAorICAgICAgICBjb250ZXh0KSwgYW5kIHlvdSBjYW4gYWxzbyB1c2UgaXQgdG8gdHJhY2UgYW5kIHByb2ZpbGUgdGhlIGtlcm5lbAorICAgICAgICBhbmQgYWxsIGFwcGxpY2F0aW9ucyBvbiB0aGUgc3lzdGVtIHNpbXVsdGFuZW91c2x5IHRvIGdhaW4gYSBzeXN0ZW0td2lkZQorICAgICAgICB2aWV3IG9mIHdoYXQncyBnb2luZyBvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSW4gbWFueSB3YXlzLCBwZXJmIGFpbXMgdG8gYmUgYSBzdXBlcnNldCBvZiBhbGwgdGhlIHRyYWNpbmcgYW5kIHByb2ZpbGluZworICAgICAgICB0b29scyBhdmFpbGFibGUgaW4gTGludXggdG9kYXksIGluY2x1ZGluZyBhbGwgdGhlIG90aGVyIHRvb2xzIGNvdmVyZWQKKyAgICAgICAgaW4gdGhpcyBIT1dUTy4gVGhlIHBhc3QgY291cGxlIG9mIHllYXJzIGhhdmUgc2VlbiBwZXJmIHN1YnN1bWUgYSBsb3QKKyAgICAgICAgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhvc2Ugb3RoZXIgdG9vbHMgYW5kLCBhdCB0aGUgc2FtZSB0aW1lLCB0aG9zZQorICAgICAgICBvdGhlciB0b29scyBoYXZlIHJlbW92ZWQgbGFyZ2UgcG9ydGlvbnMgb2YgdGhlaXIgcHJldmlvdXMgZnVuY3Rpb25hbGl0eQorICAgICAgICBhbmQgcmVwbGFjZWQgaXQgd2l0aCBjYWxscyB0byB0aGUgZXF1aXZhbGVudCBmdW5jdGlvbmFsaXR5IG5vdworICAgICAgICBpbXBsZW1lbnRlZCBieSB0aGUgcGVyZiBzdWJzeXN0ZW0uIEV4dHJhcG9sYXRpb24gc3VnZ2VzdHMgdGhhdCBhdAorICAgICAgICBzb21lIHBvaW50IHRob3NlIG90aGVyIHRvb2xzIHdpbGwgc2ltcGx5IGJlY29tZSBjb21wbGV0ZWx5IHJlZHVuZGFudAorICAgICAgICBhbmQgZ28gYXdheTsgdW50aWwgdGhlbiwgd2UnbGwgY292ZXIgdGhvc2Ugb3RoZXIgdG9vbHMgaW4gdGhlc2UgcGFnZXMKKyAgICAgICAgYW5kIGluIG1hbnkgY2FzZXMgc2hvdyBob3cgdGhlIHNhbWUgdGhpbmdzIGNhbiBiZSBhY2NvbXBsaXNoZWQgaW4KKyAgICAgICAgcGVyZiBhbmQgdGhlIG90aGVyIHRvb2xzIHdoZW4gaXQgc2VlbXMgdXNlZnVsIHRvIGRvIHNvLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY292ZXJhZ2UgYmVsb3cgZGV0YWlscyBzb21lIG9mIHRoZSBtb3N0IGNvbW1vbiB3YXlzIHlvdSdsbCBsaWtlbHkKKyAgICAgICAgd2FudCB0byBhcHBseSB0aGUgdG9vbDsgZnVsbCBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBlaXRoZXIgd2l0aGluCisgICAgICAgIHRoZSB0b29sIGl0c2VsZiBvciBpbiB0aGUgbWFuIHBhZ2VzIGF0CisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL3BlcmYnPnBlcmYoMSk8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncGVyZi1zZXR1cCc+CisgICAgICAgIDx0aXRsZT5TZXR1cDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgdGhpcyBzZWN0aW9uLCB3ZSdsbCBhc3N1bWUgeW91J3ZlIGFscmVhZHkgcGVyZm9ybWVkIHRoZSBiYXNpYworICAgICAgICAgICAgc2V0dXAgb3V0bGluZWQgaW4gdGhlIEdlbmVyYWwgU2V0dXAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gcGFydGljdWxhciwgeW91J2xsIGdldCB0aGUgbW9zdCBtaWxlYWdlIG91dCBvZiBwZXJmIGlmIHlvdQorICAgICAgICAgICAgcHJvZmlsZSBhbiBpbWFnZSBidWlsdCB3aXRoIElOSElCSVRfUEFDS0FHRV9TVFJJUCA9ICIxIiBpbiB5b3VyCisgICAgICAgICAgICBsb2NhbC5jb25mLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBwZXJmIHJ1bnMgb24gdGhlIHRhcmdldCBzeXN0ZW0gZm9yIHRoZSBtb3N0IHBhcnQuIFlvdSBjYW4gYXJjaGl2ZQorICAgICAgICAgICAgcHJvZmlsZSBkYXRhIGFuZCBjb3B5IGl0IHRvIHRoZSBob3N0IGZvciBhbmFseXNpcywgYnV0IGZvciB0aGUKKyAgICAgICAgICAgIHJlc3Qgb2YgdGhpcyBkb2N1bWVudCB3ZSBhc3N1bWUgeW91J3ZlIHNzaCdlZCB0byB0aGUgaG9zdCBhbmQKKyAgICAgICAgICAgIHdpbGwgYmUgcnVubmluZyB0aGUgcGVyZiBjb21tYW5kcyBvbiB0aGUgdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3BlcmYtYmFzaWMtdXNhZ2UnPgorICAgICAgICA8dGl0bGU+QmFzaWMgVXNhZ2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHBlcmYgdG9vbCBpcyBwcmV0dHkgbXVjaCBzZWxmLWRvY3VtZW50aW5nLiBUbyByZW1pbmQgeW91cnNlbGYKKyAgICAgICAgICAgIG9mIHRoZSBhdmFpbGFibGUgY29tbWFuZHMsIHNpbXBseSB0eXBlICdwZXJmJywgd2hpY2ggd2lsbCBzaG93IHlvdQorICAgICAgICAgICAgYmFzaWMgdXNhZ2UgYWxvbmcgd2l0aCB0aGUgYXZhaWxhYmxlIHBlcmYgc3ViY29tbWFuZHM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZgorCisgICAgIHVzYWdlOiBwZXJmIFstLXZlcnNpb25dIFstLWhlbHBdIENPTU1BTkQgW0FSR1NdCisKKyAgICAgVGhlIG1vc3QgY29tbW9ubHkgdXNlZCBwZXJmIGNvbW1hbmRzIGFyZToKKyAgICAgICBhbm5vdGF0ZSAgICAgICAgUmVhZCBwZXJmLmRhdGEgKGNyZWF0ZWQgYnkgcGVyZiByZWNvcmQpIGFuZCBkaXNwbGF5IGFubm90YXRlZCBjb2RlCisgICAgICAgYXJjaGl2ZSAgICAgICAgIENyZWF0ZSBhcmNoaXZlIHdpdGggb2JqZWN0IGZpbGVzIHdpdGggYnVpbGQtaWRzIGZvdW5kIGluIHBlcmYuZGF0YSBmaWxlCisgICAgICAgYmVuY2ggICAgICAgICAgIEdlbmVyYWwgZnJhbWV3b3JrIGZvciBiZW5jaG1hcmsgc3VpdGVzCisgICAgICAgYnVpbGRpZC1jYWNoZSAgIE1hbmFnZSBidWlsZC1pZCBjYWNoZS4KKyAgICAgICBidWlsZGlkLWxpc3QgICAgTGlzdCB0aGUgYnVpbGRpZHMgaW4gYSBwZXJmLmRhdGEgZmlsZQorICAgICAgIGRpZmYgICAgICAgICAgICBSZWFkIHR3byBwZXJmLmRhdGEgZmlsZXMgYW5kIGRpc3BsYXkgdGhlIGRpZmZlcmVudGlhbCBwcm9maWxlCisgICAgICAgZXZsaXN0ICAgICAgICAgIExpc3QgdGhlIGV2ZW50IG5hbWVzIGluIGEgcGVyZi5kYXRhIGZpbGUKKyAgICAgICBpbmplY3QgICAgICAgICAgRmlsdGVyIHRvIGF1Z21lbnQgdGhlIGV2ZW50cyBzdHJlYW0gd2l0aCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgICAga21lbSAgICAgICAgICAgIFRvb2wgdG8gdHJhY2UvbWVhc3VyZSBrZXJuZWwgbWVtb3J5KHNsYWIpIHByb3BlcnRpZXMKKyAgICAgICBrdm0gICAgICAgICAgICAgVG9vbCB0byB0cmFjZS9tZWFzdXJlIGt2bSBndWVzdCBvcworICAgICAgIGxpc3QgICAgICAgICAgICBMaXN0IGFsbCBzeW1ib2xpYyBldmVudCB0eXBlcworICAgICAgIGxvY2sgICAgICAgICAgICBBbmFseXplIGxvY2sgZXZlbnRzCisgICAgICAgcHJvYmUgICAgICAgICAgIERlZmluZSBuZXcgZHluYW1pYyB0cmFjZXBvaW50cworICAgICAgIHJlY29yZCAgICAgICAgICBSdW4gYSBjb21tYW5kIGFuZCByZWNvcmQgaXRzIHByb2ZpbGUgaW50byBwZXJmLmRhdGEKKyAgICAgICByZXBvcnQgICAgICAgICAgUmVhZCBwZXJmLmRhdGEgKGNyZWF0ZWQgYnkgcGVyZiByZWNvcmQpIGFuZCBkaXNwbGF5IHRoZSBwcm9maWxlCisgICAgICAgc2NoZWQgICAgICAgICAgIFRvb2wgdG8gdHJhY2UvbWVhc3VyZSBzY2hlZHVsZXIgcHJvcGVydGllcyAobGF0ZW5jaWVzKQorICAgICAgIHNjcmlwdCAgICAgICAgICBSZWFkIHBlcmYuZGF0YSAoY3JlYXRlZCBieSBwZXJmIHJlY29yZCkgYW5kIGRpc3BsYXkgdHJhY2Ugb3V0cHV0CisgICAgICAgc3RhdCAgICAgICAgICAgIFJ1biBhIGNvbW1hbmQgYW5kIGdhdGhlciBwZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRpc3RpY3MKKyAgICAgICB0ZXN0ICAgICAgICAgICAgUnVucyBzYW5pdHkgdGVzdHMuCisgICAgICAgdGltZWNoYXJ0ICAgICAgIFRvb2wgdG8gdmlzdWFsaXplIHRvdGFsIHN5c3RlbSBiZWhhdmlvciBkdXJpbmcgYSB3b3JrbG9hZAorICAgICAgIHRvcCAgICAgICAgICAgICBTeXN0ZW0gcHJvZmlsaW5nIHRvb2wuCisKKyAgICAgU2VlICdwZXJmIGhlbHAgQ09NTUFORCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXBlcmYtdG8tZG8tYmFzaWMtcHJvZmlsaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBwZXJmIHRvIGRvIEJhc2ljIFByb2ZpbGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGEgc2ltcGxlIHRlc3QgY2FzZSwgd2UnbGwgcHJvZmlsZSB0aGUgJ3dnZXQnIG9mIGEgZmFpcmx5IGxhcmdlCisgICAgICAgICAgICAgICAgZmlsZSwgd2hpY2ggaXMgYSBtaW5pbWFsbHkgaW50ZXJlc3RpbmcgY2FzZSBiZWNhdXNlIGl0IGhhcyBib3RoCisgICAgICAgICAgICAgICAgZmlsZSBhbmQgbmV0d29yayBJL08gYXNwZWN0cywgYW5kIGF0IGxlYXN0IGluIHRoZSBjYXNlIG9mIHN0YW5kYXJkCisgICAgICAgICAgICAgICAgWW9jdG8gaW1hZ2VzLCBpdCdzIGltcGxlbWVudGVkIGFzIHBhcnQgb2YgYnVzeWJveCwgc28gdGhlIG1ldGhvZHMKKyAgICAgICAgICAgICAgICB3ZSB1c2UgdG8gYW5hbHl6ZSBpdCBjYW4gYmUgdXNlZCBpbiBhIHZlcnkgc2ltaWxhciB3YXkgdG8gdGhlIHdob2xlCisgICAgICAgICAgICAgICAgaG9zdCBvZiBzdXBwb3J0ZWQgYnVzeWJveCBhcHBsZXRzIGluIFlvY3RvLgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBybSBsaW51eC0yLjYuMTkuMi50YXIuYnoyOyBcCisgICAgIHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHF1aWNrZXN0IGFuZCBlYXNpZXN0IHdheSB0byBnZXQgc29tZSBiYXNpYyBvdmVyYWxsIGRhdGEgYWJvdXQKKyAgICAgICAgICAgICAgICB3aGF0J3MgZ29pbmcgb24gZm9yIGEgcGFydGljdWxhciB3b3JrbG9hZCBpcyB0byBwcm9maWxlIGl0IHVzaW5nCisgICAgICAgICAgICAgICAgJ3BlcmYgc3RhdCcuICdwZXJmIHN0YXQnIGJhc2ljYWxseSBwcm9maWxlcyB1c2luZyBhIGZldyBkZWZhdWx0CisgICAgICAgICAgICAgICAgY291bnRlcnMgYW5kIGRpc3BsYXlzIHRoZSBzdW1tZWQgY291bnRzIGF0IHRoZSBlbmQgb2YgdGhlIHJ1bjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiBzdGF0IHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKyAgICAgQ29ubmVjdGluZyB0byBkb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZyAoMTQwLjIxMS4xNjkuNTk6ODApCisgICAgIGxpbnV4LTIuNi4xOS4yLnRhci5iIDEwMCUgfCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKnwgNDE3MjdrICAwOjAwOjAwIEVUQQorCisgICAgIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3RhdHMgZm9yICd3Z2V0IDx1bGluayB1cmw9J2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyJz5odHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6MjwvdWxpbms+JzoKKworICAgICAgICAgICA0NTk3LjIyMzkwMiB0YXNrLWNsb2NrICAgICAgICAgICAgICAgICMgICAgMC4wNzcgQ1BVcyB1dGlsaXplZAorICAgICAgICAgICAgICAgICAyMzU2OCBjb250ZXh0LXN3aXRjaGVzICAgICAgICAgICMgICAgMC4wMDUgTS9zZWMKKyAgICAgICAgICAgICAgICAgICAgNjggQ1BVLW1pZ3JhdGlvbnMgICAgICAgICAgICAjICAgIDAuMDE1IEsvc2VjCisgICAgICAgICAgICAgICAgICAgMjQxIHBhZ2UtZmF1bHRzICAgICAgICAgICAgICAgIyAgICAwLjA1MiBLL3NlYworICAgICAgICAgICAgMzA0NTgxNzI5MyBjeWNsZXMgICAgICAgICAgICAgICAgICAgICMgICAgMC42NjMgR0h6CisgICAgICAgJmx0O25vdCBzdXBwb3J0ZWQmZ3Q7IHN0YWxsZWQtY3ljbGVzLWZyb250ZW5kCisgICAgICAgJmx0O25vdCBzdXBwb3J0ZWQmZ3Q7IHN0YWxsZWQtY3ljbGVzLWJhY2tlbmQKKyAgICAgICAgICAgICA4NTg5MDkxNjcgaW5zdHJ1Y3Rpb25zICAgICAgICAgICAgICAjICAgIDAuMjggIGluc25zIHBlciBjeWNsZQorICAgICAgICAgICAgIDE2NTQ0MTE2NSBicmFuY2hlcyAgICAgICAgICAgICAgICAgICMgICAzNS45ODcgTS9zZWMKKyAgICAgICAgICAgICAgMTk1NTAzMjkgYnJhbmNoLW1pc3NlcyAgICAgICAgICAgICAjICAgMTEuODIlIG9mIGFsbCBicmFuY2hlcworCisgICAgICAgICAgNTkuODM2NjI3NjIwIHNlY29uZHMgdGltZSBlbGFwc2VkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE1hbnkgdGltZXMgc3VjaCBhIHNpbXBsZS1taW5kZWQgdGVzdCBkb2Vzbid0IHlpZWxkIG11Y2ggb2YKKyAgICAgICAgICAgICAgICBpbnRlcmVzdCwgYnV0IHNvbWV0aW1lcyBpdCBkb2VzIChzZWUgUmVhbC13b3JsZCBZb2N0byBidWcKKyAgICAgICAgICAgICAgICAoc2xvdyBsb29wLW1vdW50ZWQgd3JpdGUgc3BlZWQpKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWxzbywgbm90ZSB0aGF0ICdwZXJmIHN0YXQnIGlzbid0IHJlc3RyaWN0ZWQgdG8gYSBmaXhlZCBzZXQgb2YKKyAgICAgICAgICAgICAgICBjb3VudGVycyAtIGJhc2ljYWxseSBhbnkgZXZlbnQgbGlzdGVkIGluIHRoZSBvdXRwdXQgb2YgJ3BlcmYgbGlzdCcKKyAgICAgICAgICAgICAgICBjYW4gYmUgdGFsbGllZCBieSAncGVyZiBzdGF0Jy4gRm9yIGV4YW1wbGUsIHN1cHBvc2Ugd2Ugd2FudGVkIHRvCisgICAgICAgICAgICAgICAgc2VlIGEgc3VtbWFyeSBvZiBhbGwgdGhlIGV2ZW50cyByZWxhdGVkIHRvIGtlcm5lbCBtZW1vcnkKKyAgICAgICAgICAgICAgICBhbGxvY2F0aW9uL2ZyZWVpbmcgYWxvbmcgd2l0aCBjYWNoZSBoaXRzIGFuZCBtaXNzZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc3RhdCAtZSBrbWVtOiogLWUgY2FjaGUtcmVmZXJlbmNlcyAtZSBjYWNoZS1taXNzZXMgd2dldCA8dWxpbmsgdXJsPSdodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6Mic+aHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejI8L3VsaW5rPgorICAgICBDb25uZWN0aW5nIHRvIGRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnICgxNDAuMjExLjE2OS41OTo4MCkKKyAgICAgbGludXgtMi42LjE5LjIudGFyLmIgMTAwJSB8KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfCA0MTcyN2sgIDA6MDA6MDAgRVRBCisKKyAgICAgUGVyZm9ybWFuY2UgY291bnRlciBzdGF0cyBmb3IgJ3dnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4nOgorCisgICAgICAgICAgICAgICAgICA1NTY2IGttZW06a21hbGxvYworICAgICAgICAgICAgICAgIDEyNTUxNyBrbWVtOmttZW1fY2FjaGVfYWxsb2MKKyAgICAgICAgICAgICAgICAgICAgIDAga21lbTprbWFsbG9jX25vZGUKKyAgICAgICAgICAgICAgICAgICAgIDAga21lbTprbWVtX2NhY2hlX2FsbG9jX25vZGUKKyAgICAgICAgICAgICAgICAgMzQ0MDEga21lbTprZnJlZQorICAgICAgICAgICAgICAgICA2OTkyMCBrbWVtOmttZW1fY2FjaGVfZnJlZQorICAgICAgICAgICAgICAgICAgIDEzMyBrbWVtOm1tX3BhZ2VfZnJlZQorICAgICAgICAgICAgICAgICAgICA0MSBrbWVtOm1tX3BhZ2VfZnJlZV9iYXRjaGVkCisgICAgICAgICAgICAgICAgIDExNTAyIGttZW06bW1fcGFnZV9hbGxvYworICAgICAgICAgICAgICAgICAxMTM3NSBrbWVtOm1tX3BhZ2VfYWxsb2Nfem9uZV9sb2NrZWQKKyAgICAgICAgICAgICAgICAgICAgIDAga21lbTptbV9wYWdlX3BjcHVfZHJhaW4KKyAgICAgICAgICAgICAgICAgICAgIDAga21lbTptbV9wYWdlX2FsbG9jX2V4dGZyYWcKKyAgICAgICAgICAgICAgNjY4NDg2MDIgY2FjaGUtcmVmZXJlbmNlcworICAgICAgICAgICAgICAgMjkxNzc0MCBjYWNoZS1taXNzZXMgICAgICAgICAgICAgICMgICAgNC4zNjUgJSBvZiBhbGwgY2FjaGUgcmVmcworCisgICAgICAgICAgNDQuODMxMDIzNDE1IHNlY29uZHMgdGltZSBlbGFwc2VkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFNvICdwZXJmIHN0YXQnIGdpdmVzIHVzIGEgbmljZSBlYXN5IHdheSB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZgorICAgICAgICAgICAgICAgIHdoYXQgbWlnaHQgYmUgaGFwcGVuaW5nIGZvciBhIHNldCBvZiBldmVudHMsIGJ1dCBub3JtYWxseSB3ZSdkCisgICAgICAgICAgICAgICAgbmVlZCBhIGxpdHRsZSBtb3JlIGRldGFpbCBpbiBvcmRlciB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbgorICAgICAgICAgICAgICAgIGluIGEgd2F5IHRoYXQgd2UgY2FuIGFjdCBvbiBpbiBhIHVzZWZ1bCB3YXkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGRpdmUgZG93biBpbnRvIGEgbmV4dCBsZXZlbCBvZiBkZXRhaWwsIHdlIGNhbiB1c2UgJ3BlcmYKKyAgICAgICAgICAgICAgICByZWNvcmQnLydwZXJmIHJlcG9ydCcgd2hpY2ggd2lsbCBjb2xsZWN0IHByb2ZpbGluZyBkYXRhIGFuZAorICAgICAgICAgICAgICAgIHByZXNlbnQgaXQgdG8gdXNlIHVzaW5nIGFuIGludGVyYWN0aXZlIHRleHQtYmFzZWQgVUkgKG9yCisgICAgICAgICAgICAgICAgc2ltcGx5IGFzIHRleHQgaWYgd2Ugc3BlY2lmeSAtLXN0ZGlvIHRvICdwZXJmIHJlcG9ydCcpLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBvdXIgZmlyc3QgYXR0ZW1wdCBhdCBwcm9maWxpbmcgdGhpcyB3b3JrbG9hZCwgd2UnbGwgc2ltcGx5CisgICAgICAgICAgICAgICAgcnVuICdwZXJmIHJlY29yZCcsIGhhbmRpbmcgaXQgdGhlIHdvcmtsb2FkIHdlIHdhbnQgdG8gcHJvZmlsZQorICAgICAgICAgICAgICAgIChldmVyeXRoaW5nIGFmdGVyICdwZXJmIHJlY29yZCcgYW5kIGFueSBwZXJmIG9wdGlvbnMgd2UgaGFuZAorICAgICAgICAgICAgICAgIGl0IC0gaGVyZSBub25lIC0gd2lsbCBiZSBleGVjdXRlZCBpbiBhIG5ldyBzaGVsbCkuIHBlcmYgY29sbGVjdHMKKyAgICAgICAgICAgICAgICBzYW1wbGVzIHVudGlsIHRoZSBwcm9jZXNzIGV4aXRzIGFuZCByZWNvcmRzIHRoZW0gaW4gYSBmaWxlIG5hbWVkCisgICAgICAgICAgICAgICAgJ3BlcmYuZGF0YScgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgcmVjb3JkIHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKworICAgICBDb25uZWN0aW5nIHRvIGRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnICgxNDAuMjExLjE2OS41OTo4MCkKKyAgICAgbGludXgtMi42LjE5LjIudGFyLmIgMTAwJSB8KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfCA0MTcyN2sgIDA6MDA6MDAgRVRBCisgICAgIFsgcGVyZiByZWNvcmQ6IFdva2VuIHVwIDEgdGltZXMgdG8gd3JpdGUgZGF0YSBdCisgICAgIFsgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSAwLjE3NiBNQiBwZXJmLmRhdGEgKH43NzAwIHNhbXBsZXMpIF0KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRvIHNlZSB0aGUgcmVzdWx0cyBpbiBhICd0ZXh0LWJhc2VkIFVJJyAodHVpKSwgc2ltcGx5IHJ1bgorICAgICAgICAgICAgJ3BlcmYgcmVwb3J0Jywgd2hpY2ggd2lsbCByZWFkIHRoZSBwZXJmLmRhdGEgZmlsZSBpbiB0aGUgY3VycmVudAorICAgICAgICAgICAgd29ya2luZyBkaXJlY3RvcnkgYW5kIGRpc3BsYXkgdGhlIHJlc3VsdHMgaW4gYW4gaW50ZXJhY3RpdmUgVUk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgcmVwb3J0CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcGVyZi13Z2V0LWZsYXQtc3RyaXBwZWQucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGFib3ZlIHNjcmVlbnNob3QgZGlzcGxheXMgYSAnZmxhdCcgcHJvZmlsZSwgb25lIGVudHJ5IGZvcgorICAgICAgICAgICAgICAgIGVhY2ggJ2J1Y2tldCcgY29ycmVzcG9uZGluZyB0byB0aGUgZnVuY3Rpb25zIHRoYXQgd2VyZSBwcm9maWxlZAorICAgICAgICAgICAgICAgIGR1cmluZyB0aGUgcHJvZmlsaW5nIHJ1biwgb3JkZXJlZCBmcm9tIHRoZSBtb3N0IHBvcHVsYXIgdG8gdGhlCisgICAgICAgICAgICAgICAgbGVhc3QgKHBlcmYgaGFzIG9wdGlvbnMgdG8gc29ydCBpbiB2YXJpb3VzIG9yZGVycyBhbmQga2V5cyBhcworICAgICAgICAgICAgICAgIHdlbGwgYXMgZGlzcGxheSBlbnRyaWVzIG9ubHkgYWJvdmUgYSBjZXJ0YWluIHRocmVzaG9sZCBhbmQgc28KKyAgICAgICAgICAgICAgICBvbiAtIHNlZSB0aGUgcGVyZiBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzKS4gTm90ZSB0aGF0IHRoaXMKKyAgICAgICAgICAgICAgICBpbmNsdWRlcyBib3RoIHVzZXJzcGFjZSBmdW5jdGlvbnMgKGVudHJpZXMgY29udGFpbmluZyBhIFsuXSkgYW5kCisgICAgICAgICAgICAgICAga2VybmVsIGZ1bmN0aW9ucyBhY2NvdW50ZWQgdG8gdGhlIHByb2Nlc3MgKGVudHJpZXMgY29udGFpbmluZworICAgICAgICAgICAgICAgIGEgW2tdKS4gKHBlcmYgaGFzIGNvbW1hbmQtbGluZSBtb2RpZmllcnMgdGhhdCBjYW4gYmUgdXNlZCB0bworICAgICAgICAgICAgICAgIHJlc3RyaWN0IHRoZSBwcm9maWxpbmcgdG8ga2VybmVsIG9yIHVzZXJzcGFjZSwgYW1vbmcgb3RoZXJzKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTm90aWNlIGFsc28gdGhhdCB0aGUgYWJvdmUgcmVwb3J0IHNob3dzIGFuIGVudHJ5IGZvciAnYnVzeWJveCcsCisgICAgICAgICAgICAgICAgd2hpY2ggaXMgdGhlIGV4ZWN1dGFibGUgdGhhdCBpbXBsZW1lbnRzICd3Z2V0JyBpbiBZb2N0bywgYnV0IHRoYXQKKyAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIGEgdXNlZnVsIGZ1bmN0aW9uIG5hbWUgaW4gdGhhdCBlbnRyeSwgaXQgZGlzcGxheXMKKyAgICAgICAgICAgICAgICBhIG5vdC1zby1mcmllbmRseSBoZXggdmFsdWUgaW5zdGVhZC4gVGhlIHN0ZXBzIGJlbG93IHdpbGwgc2hvdworICAgICAgICAgICAgICAgIGhvdyB0byBmaXggdGhhdCBwcm9ibGVtLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWZvcmUgd2UgZG8gdGhhdCwgaG93ZXZlciwgbGV0J3MgdHJ5IHJ1bm5pbmcgYSBkaWZmZXJlbnQgcHJvZmlsZSwKKyAgICAgICAgICAgICAgICBvbmUgd2hpY2ggc2hvd3Mgc29tZXRoaW5nIGEgbGl0dGxlIG1vcmUgaW50ZXJlc3RpbmcuIFRoZSBvbmx5CisgICAgICAgICAgICAgICAgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBuZXcgcHJvZmlsZSBhbmQgdGhlIHByZXZpb3VzIG9uZSBpcyB0aGF0CisgICAgICAgICAgICAgICAgd2UnbGwgYWRkIHRoZSAtZyBvcHRpb24sIHdoaWNoIHdpbGwgcmVjb3JkIG5vdCBqdXN0IHRoZSBhZGRyZXNzCisgICAgICAgICAgICAgICAgb2YgYSBzYW1wbGVkIGZ1bmN0aW9uLCBidXQgdGhlIGVudGlyZSBjYWxsY2hhaW4gdG8gdGhlIHNhbXBsZWQKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBhcyB3ZWxsOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHJlY29yZCAtZyB3Z2V0IDx1bGluayB1cmw9J2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyJz5odHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6MjwvdWxpbms+CisgICAgIENvbm5lY3RpbmcgdG8gZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcgKDE0MC4yMTEuMTY5LjU5OjgwKQorICAgICBsaW51eC0yLjYuMTkuMi50YXIuYiAxMDAlIHwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip8IDQxNzI3ayAgMDowMDowMCBFVEEKKyAgICAgWyBwZXJmIHJlY29yZDogV29rZW4gdXAgMyB0aW1lcyB0byB3cml0ZSBkYXRhIF0KKyAgICAgWyBwZXJmIHJlY29yZDogQ2FwdHVyZWQgYW5kIHdyb3RlIDAuNjUyIE1CIHBlcmYuZGF0YSAofjI4NDc2IHNhbXBsZXMpIF0KKworCisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZXBvcnQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNpbmcgdGhlIGNhbGxncmFwaCB2aWV3LCB3ZSBjYW4gYWN0dWFsbHkgc2VlIG5vdCBvbmx5IHdoaWNoCisgICAgICAgICAgICAgICAgZnVuY3Rpb25zIHRvb2sgdGhlIG1vc3QgdGltZSwgYnV0IHdlIGNhbiBhbHNvIHNlZSBhIHN1bW1hcnkgb2YKKyAgICAgICAgICAgICAgICBob3cgdGhvc2UgZnVuY3Rpb25zIHdlcmUgY2FsbGVkIGFuZCBsZWFybiBzb21ldGhpbmcgYWJvdXQgaG93IHRoZQorICAgICAgICAgICAgICAgIHByb2dyYW0gaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCBpbiB0aGUgcHJvY2Vzcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTm90aWNlIHRoYXQgZWFjaCBlbnRyeSBpbiB0aGUgYWJvdmUgc2NyZWVuc2hvdCBub3cgY29udGFpbnMgYSAnKycKKyAgICAgICAgICAgICAgICBvbiB0aGUgbGVmdC1oYW5kIHNpZGUuIFRoaXMgbWVhbnMgdGhhdCB3ZSBjYW4gZXhwYW5kIHRoZSBlbnRyeSBhbmQKKyAgICAgICAgICAgICAgICBkcmlsbCBkb3duIGludG8gdGhlIGNhbGxjaGFpbnMgdGhhdCBmZWVkIGludG8gdGhhdCBlbnRyeS4KKyAgICAgICAgICAgICAgICBQcmVzc2luZyAnZW50ZXInIG9uIGFueSBvbmUgb2YgdGhlbSB3aWxsIGV4cGFuZCB0aGUgY2FsbGNoYWluCisgICAgICAgICAgICAgICAgKHlvdSBjYW4gYWxzbyBwcmVzcyAnRScgdG8gZXhwYW5kIHRoZW0gYWxsIGF0IHRoZSBzYW1lIHRpbWUgb3IgJ0MnCisgICAgICAgICAgICAgICAgdG8gY29sbGFwc2UgdGhlbSBhbGwpLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiB0aGUgc2NyZWVuc2hvdCBhYm92ZSwgd2UndmUgdG9nZ2xlZCB0aGUgX19jb3B5X3RvX3VzZXJfbGwoKQorICAgICAgICAgICAgICAgIGVudHJ5IGFuZCBzZXZlcmFsIHN1Ym5vZGVzIGFsbCB0aGUgd2F5IGRvd24uIFRoaXMgbGV0cyB1cyBzZWUKKyAgICAgICAgICAgICAgICB3aGljaCBjYWxsY2hhaW5zIGNvbnRyaWJ1dGVkIHRvIHRoZSBwcm9maWxlZCBfX2NvcHlfdG9fdXNlcl9sbCgpCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gd2hpY2ggY29udHJpYnV0ZWQgMS43NyUgdG8gdGhlIHRvdGFsIHByb2ZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGEgYml0IG9mIGJhY2tncm91bmQgZXhwbGFuYXRpb24gZm9yIHRoZXNlIGNhbGxjaGFpbnMsIHRoaW5rCisgICAgICAgICAgICAgICAgYWJvdXQgd2hhdCBoYXBwZW5zIGF0IGEgaGlnaCBsZXZlbCB3aGVuIHlvdSBydW4gd2dldCB0byBnZXQgYSBmaWxlCisgICAgICAgICAgICAgICAgb3V0IG9uIHRoZSBuZXR3b3JrLiBCYXNpY2FsbHkgd2hhdCBoYXBwZW5zIGlzIHRoYXQgdGhlIGRhdGEgY29tZXMKKyAgICAgICAgICAgICAgICBpbnRvIHRoZSBrZXJuZWwgdmlhIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gKHNvY2tldCkgYW5kIGlzIHBhc3NlZAorICAgICAgICAgICAgICAgIHRvIHRoZSB1c2Vyc3BhY2UgcHJvZ3JhbSAnd2dldCcgKHdoaWNoIGlzIGFjdHVhbGx5IGEgcGFydCBvZgorICAgICAgICAgICAgICAgIGJ1c3lib3gsIGJ1dCB0aGF0J3Mgbm90IGltcG9ydGFudCBmb3Igbm93KSwgd2hpY2ggdGFrZXMgdGhlIGJ1ZmZlcnMKKyAgICAgICAgICAgICAgICB0aGUga2VybmVsIHBhc3NlcyB0byBpdCBhbmQgd3JpdGVzIGl0IHRvIGEgZGlzayBmaWxlIHRvIHNhdmUgaXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBwYXJ0IG9mIHRoaXMgcHJvY2VzcyB0aGF0IHdlJ3JlIGxvb2tpbmcgYXQgaW4gdGhlIGFib3ZlIGNhbGwKKyAgICAgICAgICAgICAgICBzdGFja3MgaXMgdGhlIHBhcnQgd2hlcmUgdGhlIGtlcm5lbCBwYXNzZXMgdGhlIGRhdGEgaXQncyByZWFkIGZyb20KKyAgICAgICAgICAgICAgICB0aGUgc29ja2V0IGRvd24gdG8gd2dldCBpLmUuIGEgY29weS10by11c2VyLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBOb3RpY2UgYWxzbyB0aGF0IGhlcmUgdGhlcmUncyBhbHNvIGEgY2FzZSB3aGVyZSB0aGUgaGV4IHZhbHVlCisgICAgICAgICAgICAgICAgaXMgZGlzcGxheWVkIGluIHRoZSBjYWxsc3RhY2ssIGhlcmUgaW4gdGhlIGV4cGFuZGVkCisgICAgICAgICAgICAgICAgc3lzX2Nsb2NrX2dldHRpbWUoKSBmdW5jdGlvbi4gTGF0ZXIgd2UnbGwgc2VlIGl0IHJlc29sdmUgdG8gYQorICAgICAgICAgICAgICAgIHVzZXJzcGFjZSBmdW5jdGlvbiBjYWxsIGluIGJ1c3lib3guCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LWZyb20tdXNlci1leHBhbmRlZC1zdHJpcHBlZC5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI3aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgYWJvdmUgc2NyZWVuc2hvdCBzaG93cyB0aGUgb3RoZXIgaGFsZiBvZiB0aGUgam91cm5leSBmb3IgdGhlCisgICAgICAgICAgICAgICAgZGF0YSAtIGZyb20gdGhlIHdnZXQgcHJvZ3JhbSdzIHVzZXJzcGFjZSBidWZmZXJzIHRvIGRpc2suIFRvIGdldAorICAgICAgICAgICAgICAgIHRoZSBidWZmZXJzIHRvIGRpc2ssIHRoZSB3Z2V0IHByb2dyYW0gaXNzdWVzIGEgd3JpdGUoMiksIHdoaWNoCisgICAgICAgICAgICAgICAgZG9lcyBhIGNvcHktZnJvbS11c2VyIHRvIHRoZSBrZXJuZWwsIHdoaWNoIHRoZW4gdGFrZXMgY2FyZSB2aWEKKyAgICAgICAgICAgICAgICBzb21lIGNpcmN1aXRvdXMgcGF0aCAocHJvYmFibHkgYWxzbyBwcmVzZW50IHNvbWV3aGVyZSBpbiB0aGUKKyAgICAgICAgICAgICAgICBwcm9maWxlIGRhdGEpLCB0byBnZXQgaXQgc2FmZWx5IHRvIGRpc2suCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vdyB0aGF0IHdlJ3ZlIHNlZW4gdGhlIGJhc2ljIGxheW91dCBvZiB0aGUgcHJvZmlsZSBkYXRhIGFuZCB0aGUKKyAgICAgICAgICAgICAgICBiYXNpY3Mgb2YgaG93IHRvIGV4dHJhY3QgdXNlZnVsIGluZm9ybWF0aW9uIG91dCBvZiBpdCwgbGV0J3MgZ2V0CisgICAgICAgICAgICAgICAgYmFjayB0byB0aGUgdGFzayBhdCBoYW5kIGFuZCBzZWUgaWYgd2UgY2FuIGdldCBzb21lIGJhc2ljIGlkZWEKKyAgICAgICAgICAgICAgICBhYm91dCB3aGVyZSB0aGUgdGltZSBpcyBzcGVudCBpbiB0aGUgcHJvZ3JhbSB3ZSdyZSBwcm9maWxpbmcsCisgICAgICAgICAgICAgICAgd2dldC4gUmVtZW1iZXIgdGhhdCB3Z2V0IGlzIGFjdHVhbGx5IGltcGxlbWVudGVkIGFzIGFuIGFwcGxldAorICAgICAgICAgICAgICAgIGluIGJ1c3lib3gsIHNvIHdoaWxlIHRoZSBwcm9jZXNzIG5hbWUgaXMgJ3dnZXQnLCB0aGUgZXhlY3V0YWJsZQorICAgICAgICAgICAgICAgIHdlJ3JlIGFjdHVhbGx5IGludGVyZXN0ZWQgaW4gaXMgYnVzeWJveC4gU28gbGV0J3MgZXhwYW5kIHRoZQorICAgICAgICAgICAgICAgIGZpcnN0IGVudHJ5IGNvbnRhaW5pbmcgYnVzeWJveDoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFnYWluLCBiZWZvcmUgd2UgZXhwYW5kZWQgd2Ugc2F3IHRoYXQgdGhlIGZ1bmN0aW9uIHdhcyBsYWJlbGVkCisgICAgICAgICAgICAgICAgd2l0aCBhIGhleCB2YWx1ZSBpbnN0ZWFkIG9mIGEgc3ltYm9sIGFzIHdpdGggbW9zdCBvZiB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgZW50cmllcy4gRXhwYW5kaW5nIHRoZSBidXN5Ym94IGVudHJ5IGRvZXNuJ3QgbWFrZSBpdCBhbnkgYmV0dGVyLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcHJvYmxlbSBpcyB0aGF0IHBlcmYgY2FuJ3QgZmluZCB0aGUgc3ltYm9sIGluZm9ybWF0aW9uIGZvciB0aGUKKyAgICAgICAgICAgICAgICBidXN5Ym94IGJpbmFyeSwgd2hpY2ggaXMgYWN0dWFsbHkgc3RyaXBwZWQgb3V0IGJ5IHRoZSBZb2N0byBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25lIHdheSBhcm91bmQgdGhhdCBpcyB0byBwdXQgdGhlIGZvbGxvd2luZyBpbiB5b3VyIGxvY2FsLmNvbmYKKyAgICAgICAgICAgICAgICB3aGVuIHlvdSBidWlsZCB0aGUgaW1hZ2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhJQklUX1BBQ0tBR0VfU1RSSVAgPSAiMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSG93ZXZlciwgd2UgYWxyZWFkeSBoYXZlIGFuIGltYWdlIHdpdGggdGhlIGJpbmFyaWVzIHN0cmlwcGVkLAorICAgICAgICAgICAgICAgIHNvIHdoYXQgY2FuIHdlIGRvIHRvIGdldCBwZXJmIHRvIHJlc29sdmUgdGhlIHN5bWJvbHM/IEJhc2ljYWxseQorICAgICAgICAgICAgICAgIHdlIG5lZWQgdG8gaW5zdGFsbCB0aGUgZGVidWdpbmZvIGZvciB0aGUgYnVzeWJveCBwYWNrYWdlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBnZW5lcmF0ZSB0aGUgZGVidWcgaW5mbyBmb3IgdGhlIHBhY2thZ2VzIGluIHRoZSBpbWFnZSwgd2UgY2FuCisgICAgICAgICAgICAgICAgYWRkIGRiZy1wa2dzIHRvIEVYVFJBX0lNQUdFX0ZFQVRVUkVTIGluIGxvY2FsLmNvbmYuIEZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAiZGVidWctdHdlYWtzIHRvb2xzLXByb2ZpbGUgZGJnLXBrZ3MiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIHR5cGUgb2YgZGVidWdpbmZvIHRoYXQKKyAgICAgICAgICAgICAgICBwZXJmIHVuZGVyc3RhbmRzLCB3ZSBhbHNvIG5lZWQgdG8gYWRkIHRoZSBmb2xsb3dpbmcgdG8gbG9jYWwuY29uZjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUgPSAnZGVidWctZmlsZS1kaXJlY3RvcnknCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE9uY2Ugd2UndmUgZG9uZSB0aGF0LCB3ZSBjYW4gaW5zdGFsbCB0aGUgZGVidWdpbmZvIGZvciBidXN5Ym94LgorICAgICAgICAgICAgICAgIFRoZSBkZWJ1ZyBwYWNrYWdlcyBvbmNlIGJ1aWx0IGNhbiBiZSBmb3VuZCBpbgorICAgICAgICAgICAgICAgIGJ1aWxkL3RtcC9kZXBsb3kvcnBtLyogb24gdGhlIGhvc3Qgc3lzdGVtLiBGaW5kIHRoZQorICAgICAgICAgICAgICAgIGJ1c3lib3gtZGJnLS4uLnJwbSBmaWxlIGFuZCBjb3B5IGl0IHRvIHRoZSB0YXJnZXQuIEZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgW3RyekBlbXBhbmFkYSBjb3JlMl0kIHNjcCAvaG9tZS90cnoveW9jdG8vY3Jvd25iYXktdHJhY2luZy1kYmcvYnVpbGQvdG1wL2RlcGxveS9ycG0vY29yZTJfMzIvYnVzeWJveC1kYmctMS4yMC4yLXIyLmNvcmUyXzMyLnJwbSByb290QDE5Mi4xNjguMS4zMToKKyAgICAgcm9vdEAxOTIuMTY4LjEuMzEncyBwYXNzd29yZDoKKyAgICAgYnVzeWJveC1kYmctMS4yMC4yLXIyLmNvcmUyXzMyLnJwbSAgICAgICAgICAgICAgICAgICAgIDEwMCUgMTgyNktCICAgMS44TUIvcyAgIDAwOjAxCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE5vdyBpbnN0YWxsIHRoZSBkZWJ1ZyBycG0gb24gdGhlIHRhcmdldDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcnBtIC1pIGJ1c3lib3gtZGJnLTEuMjAuMi1yMi5jb3JlMl8zMi5ycG0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTm93IHRoYXQgdGhlIGRlYnVnaW5mbyBpcyBpbnN0YWxsZWQsIHdlIHNlZSB0aGF0IHRoZSBidXN5Ym94CisgICAgICAgICAgICAgICAgZW50cmllcyBub3cgZGlzcGxheSB0aGVpciBmdW5jdGlvbnMgc3ltYm9saWNhbGx5OgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZGVidWdpbmZvLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHdlIGV4cGFuZCBvbmUgb2YgdGhlIGVudHJpZXMgYW5kIHByZXNzICdlbnRlcicgb24gYSBsZWFmIG5vZGUsCisgICAgICAgICAgICAgICAgd2UncmUgcHJlc2VudGVkIHdpdGggYSBtZW51IG9mIGFjdGlvbnMgd2UgY2FuIHRha2UgdG8gZ2V0IG1vcmUKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoYXQgZW50cnk6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kc28tem9vbS1tZW51LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjJpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uZSBvZiB0aGVzZSBhY3Rpb25zIGFsbG93cyB1cyB0byBzaG93IGEgdmlldyB0aGF0IGRpc3BsYXlzIGEKKyAgICAgICAgICAgICAgICBidXN5Ym94LWNlbnRyaWMgdmlldyBvZiB0aGUgcHJvZmlsZWQgZnVuY3Rpb25zIChpbiB0aGlzIGNhc2Ugd2UndmUKKyAgICAgICAgICAgICAgICBhbHNvIGV4cGFuZGVkIGFsbCB0aGUgbm9kZXMgdXNpbmcgdGhlICdFJyBrZXkpOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20ucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmluYWxseSwgd2UgY2FuIHNlZSB0aGF0IG5vdyB0aGF0IHRoZSBidXN5Ym94IGRlYnVnaW5mbyBpcworICAgICAgICAgICAgICAgIGluc3RhbGxlZCwgdGhlIHByZXZpb3VzbHkgdW5yZXNvbHZlZCBzeW1ib2wgaW4gdGhlCisgICAgICAgICAgICAgICAgc3lzX2Nsb2NrX2dldHRpbWUoKSBlbnRyeSBtZW50aW9uZWQgcHJldmlvdXNseSBpcyBub3cgcmVzb2x2ZWQsCisgICAgICAgICAgICAgICAgYW5kIHNob3dzIHRoYXQgdGhlIHN5c19jbG9ja19nZXR0aW1lIHN5c3RlbSBjYWxsIHRoYXQgd2FzIHRoZQorICAgICAgICAgICAgICAgIHNvdXJjZSBvZiA2Ljc1JSBvZiB0aGUgY29weS10by11c2VyIG92ZXJoZWFkIHdhcyBpbml0aWF0ZWQgYnkKKyAgICAgICAgICAgICAgICB0aGUgaGFuZGxlX2lucHV0KCkgYnVzeWJveCBmdW5jdGlvbjoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXQgdGhlIGxvd2VzdCBsZXZlbCBvZiBkZXRhaWwsIHdlIGNhbiBkaXZlIGRvd24gdG8gdGhlIGFzc2VtYmx5CisgICAgICAgICAgICAgICAgbGV2ZWwgYW5kIHNlZSB3aGljaCBpbnN0cnVjdGlvbnMgY2F1c2VkIHRoZSBtb3N0IG92ZXJoZWFkIGluIGEKKyAgICAgICAgICAgICAgICBmdW5jdGlvbi4gUHJlc3NpbmcgJ2VudGVyJyBvbiB0aGUgJ3VkaGNwY19tYWluJyBmdW5jdGlvbiwgd2UncmUKKyAgICAgICAgICAgICAgICBhZ2FpbiBwcmVzZW50ZWQgd2l0aCBhIG1lbnU6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS1tZW51LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjJpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNlbGVjdGluZyAnQW5ub3RhdGUgdWRoY3BjX21haW4nLCB3ZSBnZXQgYSBkZXRhaWxlZCBsaXN0aW5nIG9mCisgICAgICAgICAgICAgICAgcGVyY2VudGFnZXMgYnkgaW5zdHJ1Y3Rpb24gZm9yIHRoZSB1ZGhjcGNfbWFpbiBmdW5jdGlvbi4gRnJvbSB0aGUKKyAgICAgICAgICAgICAgICBkaXNwbGF5LCB3ZSBjYW4gc2VlIHRoYXQgb3ZlciA1MCUgb2YgdGhlIHRpbWUgc3BlbnQgaW4gdGhpcworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzIHRha2VuIHVwIGJ5IGEgY291cGxlIHRlc3RzIGFuZCB0aGUgbW92ZSBvZiBhCisgICAgICAgICAgICAgICAgY29uc3RhbnQgKDEpIHRvIGEgcmVnaXN0ZXI6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYSBzZWd1ZSBpbnRvIHRyYWNpbmcsIGxldCdzIHRyeSBhbm90aGVyIHByb2ZpbGUgdXNpbmcgYQorICAgICAgICAgICAgICAgIGRpZmZlcmVudCBjb3VudGVyLCBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCAnY3ljbGVzJy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHRyYWNpbmcgYW5kIHByb2ZpbGluZyBpbmZyYXN0cnVjdHVyZSBpbiBMaW51eCBoYXMgYmVjb21lCisgICAgICAgICAgICAgICAgdW5pZmllZCBpbiBhIHdheSB0aGF0IGFsbG93cyB1cyB0byB1c2UgdGhlIHNhbWUgdG9vbCB3aXRoIGEKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZXQgb2YgY291bnRlcnMsIG5vdCBqdXN0IHRoZSBzdGFuZGFyZAorICAgICAgICAgICAgICAgIGhhcmR3YXJlIGNvdW50ZXJzIHRoYXQgdHJhZGl0aW9uYWwgdG9vbHMgaGF2ZSBoYWQgdG8gcmVzdHJpY3QKKyAgICAgICAgICAgICAgICB0aGVtc2VsdmVzIHRvIChvZiBjb3Vyc2UgdGhlIHRyYWRpdGlvbmFsIHRvb2xzIGNhbiBhbHNvIG1ha2UgdXNlCisgICAgICAgICAgICAgICAgb2YgdGhlIGV4cGFuZGVkIHBvc3NpYmlsaXRpZXMgbm93IGF2YWlsYWJsZSB0byB0aGVtLCBhbmQgaW4gc29tZQorICAgICAgICAgICAgICAgIGNhc2VzIGhhdmUsIGFzIG1lbnRpb25lZCBwcmV2aW91c2x5KS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2UgY2FuIGdldCBhIGxpc3Qgb2YgdGhlIGF2YWlsYWJsZSBldmVudHMgdGhhdCBjYW4gYmUgdXNlZCB0bworICAgICAgICAgICAgICAgIHByb2ZpbGUgYSB3b3JrbG9hZCB2aWEgJ3BlcmYgbGlzdCc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgbGlzdAorCisgICAgIExpc3Qgb2YgcHJlLWRlZmluZWQgZXZlbnRzICh0byBiZSB1c2VkIGluIC1lKToKKyAgICAgIGNwdS1jeWNsZXMgT1IgY3ljbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIHN0YWxsZWQtY3ljbGVzLWZyb250ZW5kIE9SIGlkbGUtY3ljbGVzLWZyb250ZW5kICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIHN0YWxsZWQtY3ljbGVzLWJhY2tlbmQgT1IgaWRsZS1jeWNsZXMtYmFja2VuZCAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGluc3RydWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGNhY2hlLXJlZmVyZW5jZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGNhY2hlLW1pc3NlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGJyYW5jaC1pbnN0cnVjdGlvbnMgT1IgYnJhbmNoZXMgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGJyYW5jaC1taXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGJ1cy1jeWNsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIHJlZi1jeWNsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKworICAgICAgY3B1LWNsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgdGFzay1jbG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgcGFnZS1mYXVsdHMgT1IgZmF1bHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgbWlub3ItZmF1bHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgbWFqb3ItZmF1bHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgY29udGV4dC1zd2l0Y2hlcyBPUiBjcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgY3B1LW1pZ3JhdGlvbnMgT1IgbWlncmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgYWxpZ25tZW50LWZhdWx0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgZW11bGF0aW9uLWZhdWx0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorCisgICAgICBMMS1kY2FjaGUtbG9hZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICBMMS1kY2FjaGUtbG9hZC1taXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICBMMS1kY2FjaGUtcHJlZmV0Y2gtbWlzc2VzICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICBMMS1pY2FjaGUtbG9hZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICBMMS1pY2FjaGUtbG9hZC1taXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICAuCisgICAgICAuCisgICAgICAuCisgICAgICByTk5OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbUmF3IGhhcmR3YXJlIGV2ZW50IGRlc2NyaXB0b3JdCisgICAgICBjcHUvdDE9djFbLHQyPXYyLHQzIC4uLl0vbW9kaWZpZXIgICAgICAgICAgICAgICAgICBbUmF3IGhhcmR3YXJlIGV2ZW50IGRlc2NyaXB0b3JdCisgICAgICAgKHNlZSAncGVyZiBsaXN0IC0taGVscCcgb24gaG93IHRvIGVuY29kZSBpdCkKKworICAgICAgbWVtOiZsdDthZGRyJmd0O1s6YWNjZXNzXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0hhcmR3YXJlIGJyZWFrcG9pbnRdCisKKyAgICAgIHN1bnJwYzpycGNfY2FsbF9zdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc3VucnBjOnJwY19iaW5kX3N0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzdW5ycGM6cnBjX2Nvbm5lY3Rfc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHN1bnJwYzpycGNfdGFza19iZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc2tiOmtmcmVlX3NrYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBza2I6Y29uc3VtZV9za2IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNrYjpza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgbmV0Om5ldF9kZXZfeG1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBuZXQ6bmV0X2Rldl9xdWV1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIG5ldDpuZXRpZl9yZWNlaXZlX3NrYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgbmV0Om5ldGlmX3J4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBuYXBpOm5hcGlfcG9sbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNvY2s6c29ja19yY3ZxdWV1ZV9mdWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc29jazpzb2NrX2V4Y2VlZF9idWZfbGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICB1ZHA6dWRwX2ZhaWxfcXVldWVfcmN2X3NrYiAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGhkYTpoZGFfc2VuZF9jbWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgaGRhOmhkYV9nZXRfcmVzcG9uc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBoZGE6aGRhX2J1c19yZXNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNjc2k6c2NzaV9kaXNwYXRjaF9jbWRfc3RhcnQgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc2NzaTpzY3NpX2Rpc3BhdGNoX2NtZF9lcnJvciAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzY3NpOnNjc2lfZWhfd2FrZXVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGRybTpkcm1fdmJsYW5rX2V2ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgZHJtOmRybV92YmxhbmtfZXZlbnRfcXVldWVkICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBkcm06ZHJtX3ZibGFua19ldmVudF9kZWxpdmVyZWQgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHJhbmRvbTptaXhfcG9vbF9ieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgcmFuZG9tOm1peF9wb29sX2J5dGVzX25vbG9jayAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICByYW5kb206Y3JlZGl0X2VudHJvcHlfYml0cyAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGdwaW86Z3Bpb19kaXJlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgZ3BpbzpncGlvX3ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBibG9jazpibG9ja19ycV9hYm9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGJsb2NrOmJsb2NrX3JxX3JlcXVldWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgYmxvY2s6YmxvY2tfcnFfaXNzdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBibG9jazpibG9ja19iaW9fYm91bmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGJsb2NrOmJsb2NrX2Jpb19jb21wbGV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgYmxvY2s6YmxvY2tfYmlvX2JhY2ttZXJnZSAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICAuCisgICAgICAuCisgICAgICB3cml0ZWJhY2s6d3JpdGViYWNrX3dha2VfdGhyZWFkICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHdyaXRlYmFjazp3cml0ZWJhY2tfd2FrZV9mb3JrZXJfdGhyZWFkICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgd3JpdGViYWNrOndyaXRlYmFja19iZGlfcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICAuCisgICAgICAuCisgICAgICB3cml0ZWJhY2s6d3JpdGViYWNrX3NpbmdsZV9pbm9kZV9yZXF1ZXVlICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHdyaXRlYmFjazp3cml0ZWJhY2tfc2luZ2xlX2lub2RlICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAga21lbTprbWFsbG9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBrbWVtOmttZW1fY2FjaGVfYWxsb2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGttZW06bW1fcGFnZV9hbGxvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAga21lbTptbV9wYWdlX2FsbG9jX3pvbmVfbG9ja2VkICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBrbWVtOm1tX3BhZ2VfcGNwdV9kcmFpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGttZW06bW1fcGFnZV9hbGxvY19leHRmcmFnICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdm1zY2FuOm1tX3Ztc2Nhbl9rc3dhcGRfc2xlZXAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICB2bXNjYW46bW1fdm1zY2FuX2tzd2FwZF93YWtlICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHZtc2NhbjptbV92bXNjYW5fd2FrZXVwX2tzd2FwZCAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdm1zY2FuOm1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbiAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICAuCisgICAgICAuCisgICAgICBtb2R1bGU6bW9kdWxlX2dldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIG1vZHVsZTptb2R1bGVfcHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgbW9kdWxlOm1vZHVsZV9yZXF1ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzY2hlZDpzY2hlZF9rdGhyZWFkX3N0b3AgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNjaGVkOnNjaGVkX3dha2V1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc2NoZWQ6c2NoZWRfd2FrZXVwX25ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzY2hlZDpzY2hlZF9wcm9jZXNzX2ZvcmsgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNjaGVkOnNjaGVkX3Byb2Nlc3NfZXhlYyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc2NoZWQ6c2NoZWRfc3RhdF9ydW50aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICByY3U6cmN1X3V0aWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHdvcmtxdWV1ZTp3b3JrcXVldWVfcXVldWVfd29yayAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgd29ya3F1ZXVlOndvcmtxdWV1ZV9leGVjdXRlX2VuZCAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzaWduYWw6c2lnbmFsX2dlbmVyYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNpZ25hbDpzaWduYWxfZGVsaXZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdGltZXI6dGltZXJfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICB0aW1lcjp0aW1lcl9zdGFydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHRpbWVyOmhydGltZXJfY2FuY2VsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdGltZXI6aXRpbWVyX3N0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICB0aW1lcjppdGltZXJfZXhwaXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGlycTppcnFfaGFuZGxlcl9lbnRyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgaXJxOmlycV9oYW5kbGVyX2V4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBpcnE6c29mdGlycV9lbnRyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGlycTpzb2Z0aXJxX2V4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgaXJxOnNvZnRpcnFfcmFpc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBwcmludGs6Y29uc29sZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHRhc2s6dGFza19uZXd0YXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdGFzazp0YXNrX3JlbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzeXNjYWxsczpzeXNfZW50ZXJfc29ja2V0Y2FsbCAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHN5c2NhbGxzOnN5c19leGl0X3NvY2tldGNhbGwgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgLgorICAgICAgLgorICAgICAgLgorICAgICAgc3lzY2FsbHM6c3lzX2VudGVyX3Vuc2hhcmUgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzeXNjYWxsczpzeXNfZXhpdF91bnNoYXJlICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHJhd19zeXNjYWxsczpzeXNfZW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgcmF3X3N5c2NhbGxzOnN5c19leGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgc2FtZSBzZXQgb2YgZXZlbnRzIGRlZmluZWQKKyAgICAgICAgICAgICAgICBieSB0aGUgdHJhY2UgZXZlbnQgc3Vic3lzdGVtIGFuZCBleHBvc2VkIGJ5CisgICAgICAgICAgICAgICAgZnRyYWNlL3RyYWNlY21kL2tlcm5lbHNoYXJrIGFzIGZpbGVzIGluCisgICAgICAgICAgICAgICAgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMsIGJ5IFN5c3RlbVRhcCBhcworICAgICAgICAgICAgICAgIGtlcm5lbC50cmFjZSgidHJhY2Vwb2ludF9uYW1lIikgYW5kIChwYXJ0aWFsbHkpIGFjY2Vzc2VkIGJ5IExUVG5nLgorICAgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9ubHkgYSBzdWJzZXQgb2YgdGhlc2Ugd291bGQgYmUgb2YgaW50ZXJlc3QgdG8gdXMgd2hlbiBsb29raW5nIGF0CisgICAgICAgICAgICAgICAgdGhpcyB3b3JrbG9hZCwgc28gbGV0J3MgY2hvb3NlIHRoZSBtb3N0IGxpa2VseSBzdWJzeXN0ZW1zCisgICAgICAgICAgICAgICAgKGlkZW50aWZpZWQgYnkgdGhlIHN0cmluZyBiZWZvcmUgdGhlIGNvbG9uIGluIHRoZSBUcmFjZXBvaW50IGV2ZW50cykKKyAgICAgICAgICAgICAgICBhbmQgZG8gYSAncGVyZiBzdGF0JyBydW4gdXNpbmcgb25seSB0aG9zZSB3aWxkY2FyZGVkIHN1YnN5c3RlbXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc3RhdCAtZSBza2I6KiAtZSBuZXQ6KiAtZSBuYXBpOiogLWUgc2NoZWQ6KiAtZSB3b3JrcXVldWU6KiAtZSBpcnE6KiAtZSBzeXNjYWxsczoqIHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKyAgICAgUGVyZm9ybWFuY2UgY291bnRlciBzdGF0cyBmb3IgJ3dnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4nOgorCisgICAgICAgICAgICAgICAgIDIzMzIzIHNrYjprZnJlZV9za2IKKyAgICAgICAgICAgICAgICAgICAgIDAgc2tiOmNvbnN1bWVfc2tiCisgICAgICAgICAgICAgICAgIDQ5ODk3IHNrYjpza2JfY29weV9kYXRhZ3JhbV9pb3ZlYworICAgICAgICAgICAgICAgICAgNjIxNyBuZXQ6bmV0X2Rldl94bWl0CisgICAgICAgICAgICAgICAgICA2MjE3IG5ldDpuZXRfZGV2X3F1ZXVlCisgICAgICAgICAgICAgICAgICA3OTYyIG5ldDpuZXRpZl9yZWNlaXZlX3NrYgorICAgICAgICAgICAgICAgICAgICAgMiBuZXQ6bmV0aWZfcngKKyAgICAgICAgICAgICAgICAgIDgzNDAgbmFwaTpuYXBpX3BvbGwKKyAgICAgICAgICAgICAgICAgICAgIDAgc2NoZWQ6c2NoZWRfa3RocmVhZF9zdG9wCisgICAgICAgICAgICAgICAgICAgICAwIHNjaGVkOnNjaGVkX2t0aHJlYWRfc3RvcF9yZXQKKyAgICAgICAgICAgICAgICAgIDM3NDkgc2NoZWQ6c2NoZWRfd2FrZXVwCisgICAgICAgICAgICAgICAgICAgICAwIHNjaGVkOnNjaGVkX3dha2V1cF9uZXcKKyAgICAgICAgICAgICAgICAgICAgIDAgc2NoZWQ6c2NoZWRfc3dpdGNoCisgICAgICAgICAgICAgICAgICAgIDI5IHNjaGVkOnNjaGVkX21pZ3JhdGVfdGFzaworICAgICAgICAgICAgICAgICAgICAgMCBzY2hlZDpzY2hlZF9wcm9jZXNzX2ZyZWUKKyAgICAgICAgICAgICAgICAgICAgIDEgc2NoZWQ6c2NoZWRfcHJvY2Vzc19leGl0CisgICAgICAgICAgICAgICAgICAgICAwIHNjaGVkOnNjaGVkX3dhaXRfdGFzaworICAgICAgICAgICAgICAgICAgICAgMCBzY2hlZDpzY2hlZF9wcm9jZXNzX3dhaXQKKyAgICAgICAgICAgICAgICAgICAgIDAgc2NoZWQ6c2NoZWRfcHJvY2Vzc19mb3JrCisgICAgICAgICAgICAgICAgICAgICAxIHNjaGVkOnNjaGVkX3Byb2Nlc3NfZXhlYworICAgICAgICAgICAgICAgICAgICAgMCBzY2hlZDpzY2hlZF9zdGF0X3dhaXQKKyAgICAgICAgIDIxMDY1MTk0MTU2NDEgc2NoZWQ6c2NoZWRfc3RhdF9zbGVlcAorICAgICAgICAgICAgICAgICAgICAgMCBzY2hlZDpzY2hlZF9zdGF0X2lvd2FpdAorICAgICAgICAgICAgIDE0NzQ1MzYxMyBzY2hlZDpzY2hlZF9zdGF0X2Jsb2NrZWQKKyAgICAgICAgICAgMTI5MDMwMjY5NTUgc2NoZWQ6c2NoZWRfc3RhdF9ydW50aW1lCisgICAgICAgICAgICAgICAgICAgICAwIHNjaGVkOnNjaGVkX3BpX3NldHByaW8KKyAgICAgICAgICAgICAgICAgIDM1NzQgd29ya3F1ZXVlOndvcmtxdWV1ZV9xdWV1ZV93b3JrCisgICAgICAgICAgICAgICAgICAzNTc0IHdvcmtxdWV1ZTp3b3JrcXVldWVfYWN0aXZhdGVfd29yaworICAgICAgICAgICAgICAgICAgICAgMCB3b3JrcXVldWU6d29ya3F1ZXVlX2V4ZWN1dGVfc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgIDAgd29ya3F1ZXVlOndvcmtxdWV1ZV9leGVjdXRlX2VuZAorICAgICAgICAgICAgICAgICAxNjYzMSBpcnE6aXJxX2hhbmRsZXJfZW50cnkKKyAgICAgICAgICAgICAgICAgMTY2MzEgaXJxOmlycV9oYW5kbGVyX2V4aXQKKyAgICAgICAgICAgICAgICAgMjg1MjEgaXJxOnNvZnRpcnFfZW50cnkKKyAgICAgICAgICAgICAgICAgMjg1MjEgaXJxOnNvZnRpcnFfZXhpdAorICAgICAgICAgICAgICAgICAyODcyOCBpcnE6c29mdGlycV9yYWlzZQorICAgICAgICAgICAgICAgICAgICAgMSBzeXNjYWxsczpzeXNfZW50ZXJfc2VuZG1tc2cKKyAgICAgICAgICAgICAgICAgICAgIDEgc3lzY2FsbHM6c3lzX2V4aXRfc2VuZG1tc2cKKyAgICAgICAgICAgICAgICAgICAgIDAgc3lzY2FsbHM6c3lzX2VudGVyX3JlY3ZtbXNnCisgICAgICAgICAgICAgICAgICAgICAwIHN5c2NhbGxzOnN5c19leGl0X3JlY3ZtbXNnCisgICAgICAgICAgICAgICAgICAgIDE0IHN5c2NhbGxzOnN5c19lbnRlcl9zb2NrZXRjYWxsCisgICAgICAgICAgICAgICAgICAgIDE0IHN5c2NhbGxzOnN5c19leGl0X3NvY2tldGNhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgICAgMTY5NjUgc3lzY2FsbHM6c3lzX2VudGVyX3JlYWQKKyAgICAgICAgICAgICAgICAgMTY5NjUgc3lzY2FsbHM6c3lzX2V4aXRfcmVhZAorICAgICAgICAgICAgICAgICAxMjg1NCBzeXNjYWxsczpzeXNfZW50ZXJfd3JpdGUKKyAgICAgICAgICAgICAgICAgMTI4NTQgc3lzY2FsbHM6c3lzX2V4aXRfd3JpdGUKKyAgICAgICAgICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgICAgICAgICAgIC4KKworICAgICAgICAgIDU4LjAyOTcxMDk3MiBzZWNvbmRzIHRpbWUgZWxhcHNlZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBMZXQncyBwaWNrIG9uZSBvZiB0aGVzZSB0cmFjZXBvaW50cyBhbmQgdGVsbCBwZXJmIHRvIGRvIGEgcHJvZmlsZQorICAgICAgICAgICAgICAgIHVzaW5nIGl0IGFzIHRoZSBzYW1wbGluZyBldmVudDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZWNvcmQgLWcgLWUgc2NoZWQ6c2NoZWRfd2FrZXVwIHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9zY2hlZC13YWtldXAtcHJvZmlsZS5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI3aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgc2NyZWVuc2hvdCBhYm92ZSBzaG93cyB0aGUgcmVzdWx0cyBvZiBydW5uaW5nIGEgcHJvZmlsZSB1c2luZworICAgICAgICAgICAgICAgIHNjaGVkOnNjaGVkX3N3aXRjaCB0cmFjZXBvaW50LCB3aGljaCBzaG93cyB0aGUgcmVsYXRpdmUgY29zdHMgb2YKKyAgICAgICAgICAgICAgICB2YXJpb3VzIHBhdGhzIHRvIHNjaGVkX3dha2V1cCAobm90ZSB0aGF0IHNjaGVkX3dha2V1cCBpcyB0aGUKKyAgICAgICAgICAgICAgICBuYW1lIG9mIHRoZSB0cmFjZXBvaW50IC0gaXQncyBhY3R1YWxseSBkZWZpbmVkIGp1c3QgaW5zaWRlCisgICAgICAgICAgICAgICAgdHR3dV9kb193YWtldXAoKSwgd2hpY2ggYWNjb3VudHMgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIGFjdHVhbGx5CisgICAgICAgICAgICAgICAgZGlzcGxheWVkIGluIHRoZSBwcm9maWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgLyoKKyAgICAgICogTWFyayB0aGUgdGFzayBydW5uYWJsZSBhbmQgcGVyZm9ybSB3YWtldXAtcHJlZW1wdGlvbi4KKyAgICAgICovCisgICAgIHN0YXRpYyB2b2lkCisgICAgIHR0d3VfZG9fd2FrZXVwKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2VfZmxhZ3MpCisgICAgIHsKKyAgICAgICAgICB0cmFjZV9zY2hlZF93YWtldXAocCwgdHJ1ZSk7CisgICAgICAgICAgLgorICAgICAgICAgIC4KKyAgICAgICAgICAuCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQSBjb3VwbGUgb2YgdGhlIG1vcmUgaW50ZXJlc3RpbmcgY2FsbGNoYWlucyBhcmUgZXhwYW5kZWQgYW5kCisgICAgICAgICAgICAgICAgZGlzcGxheWVkIGFib3ZlLCBiYXNpY2FsbHkgc29tZSBuZXR3b3JrIHJlY2VpdmUgcGF0aHMgdGhhdAorICAgICAgICAgICAgICAgIHByZXN1bWFibHkgZW5kIHVwIHdha2luZyB1cCB3Z2V0IChidXN5Ym94KSB3aGVuIG5ldHdvcmsgZGF0YSBpcworICAgICAgICAgICAgICAgIHJlYWR5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBOb3RlIHRoYXQgYmVjYXVzZSB0cmFjZXBvaW50cyBhcmUgbm9ybWFsbHkgdXNlZCBmb3IgdHJhY2luZywKKyAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCBzYW1wbGluZyBwZXJpb2QgZm9yIHRyYWNlcG9pbnRzIGlzIDEgaS5lLiBmb3IKKyAgICAgICAgICAgICAgICB0cmFjZXBvaW50cyBwZXJmIHdpbGwgc2FtcGxlIG9uIGV2ZXJ5IGV2ZW50IG9jY3VycmVuY2UgKHRoaXMKKyAgICAgICAgICAgICAgICBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgLWMgb3B0aW9uKS4gVGhpcyBpcyBpbiBjb250cmFzdCB0bworICAgICAgICAgICAgICAgIGhhcmR3YXJlIGNvdW50ZXJzIHN1Y2ggYXMgZm9yIGV4YW1wbGUgdGhlIGRlZmF1bHQgJ2N5Y2xlcycKKyAgICAgICAgICAgICAgICBoYXJkd2FyZSBjb3VudGVyIHVzZWQgZm9yIG5vcm1hbCBwcm9maWxpbmcsIHdoZXJlIHNhbXBsaW5nCisgICAgICAgICAgICAgICAgcGVyaW9kcyBhcmUgbXVjaCBoaWdoZXIgKGluIHRoZSB0aG91c2FuZHMpIGJlY2F1c2UgcHJvZmlsaW5nIHNob3VsZAorICAgICAgICAgICAgICAgIGhhdmUgYXMgbG93IGFuIG92ZXJoZWFkIGFzIHBvc3NpYmxlIGFuZCBzYW1wbGluZyBvbiBldmVyeSBjeWNsZQorICAgICAgICAgICAgICAgIHdvdWxkIGJlIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXBlcmYtdG8tZG8tYmFzaWMtdHJhY2luZyc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgcGVyZiB0byBkbyBCYXNpYyBUcmFjaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUHJvZmlsaW5nIGlzIGEgZ3JlYXQgdG9vbCBmb3Igc29sdmluZyBtYW55IHByb2JsZW1zIG9yIGZvcgorICAgICAgICAgICAgICAgIGdldHRpbmcgYSBoaWdoLWxldmVsIHZpZXcgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggYSB3b3JrbG9hZCBvcgorICAgICAgICAgICAgICAgIGFjcm9zcyB0aGUgc3lzdGVtLiBJdCBpcyBob3dldmVyIGJ5IGRlZmluaXRpb24gYW4gYXBwcm94aW1hdGlvbiwKKyAgICAgICAgICAgICAgICBhcyBzdWdnZXN0ZWQgYnkgdGhlIG1vc3QgcHJvbWluZW50IHdvcmQgYXNzb2NpYXRlZCB3aXRoIGl0LAorICAgICAgICAgICAgICAgICdzYW1wbGluZycuIE9uIHRoZSBvbmUgaGFuZCwgaXQgYWxsb3dzIGEgcmVwcmVzZW50YXRpdmUgcGljdHVyZSBvZgorICAgICAgICAgICAgICAgIHdoYXQncyBnb2luZyBvbiBpbiB0aGUgc3lzdGVtIHRvIGJlIGNoZWFwbHkgdGFrZW4sIGJ1dCBvbiB0aGUgb3RoZXIKKyAgICAgICAgICAgICAgICBoYW5kLCB0aGF0IGNoZWFwbmVzcyBsaW1pdHMgaXRzIHV0aWxpdHkgd2hlbiB0aGF0IGRhdGEgc3VnZ2VzdHMgYQorICAgICAgICAgICAgICAgIG5lZWQgdG8gJ2RpdmUgZG93bicgbW9yZSBkZWVwbHkgdG8gZGlzY292ZXIgd2hhdCdzIHJlYWxseSBnb2luZworICAgICAgICAgICAgICAgIG9uLiBJbiBzdWNoIGNhc2VzLCB0aGUgb25seSB3YXkgdG8gc2VlIHdoYXQncyByZWFsbHkgZ29pbmcgb24gaXMKKyAgICAgICAgICAgICAgICB0byBiZSBhYmxlIHRvIGxvb2sgYXQgKG9yIHN1bW1hcml6ZSBtb3JlIGludGVsbGlnZW50bHkpIHRoZQorICAgICAgICAgICAgICAgIGluZGl2aWR1YWwgc3RlcHMgdGhhdCBnbyBpbnRvIHRoZSBoaWdoZXItbGV2ZWwgYmVoYXZpb3IgZXhwb3NlZAorICAgICAgICAgICAgICAgIGJ5IHRoZSBjb2Fyc2UtZ3JhaW5lZCBwcm9maWxpbmcgZGF0YS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYSBjb25jcmV0ZSBleGFtcGxlLCB3ZSBjYW4gdHJhY2UgYWxsIHRoZSBldmVudHMgd2UgdGhpbmsgbWlnaHQKKyAgICAgICAgICAgICAgICBiZSBhcHBsaWNhYmxlIHRvIG91ciB3b3JrbG9hZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZWNvcmQgLWcgLWUgc2tiOiogLWUgbmV0OiogLWUgbmFwaToqIC1lIHNjaGVkOnNjaGVkX3N3aXRjaCAtZSBzY2hlZDpzY2hlZF93YWtldXAgLWUgaXJxOioKKyAgICAgIC1lIHN5c2NhbGxzOnN5c19lbnRlcl9yZWFkIC1lIHN5c2NhbGxzOnN5c19leGl0X3JlYWQgLWUgc3lzY2FsbHM6c3lzX2VudGVyX3dyaXRlIC1lIHN5c2NhbGxzOnN5c19leGl0X3dyaXRlCisgICAgICB3Z2V0IDx1bGluayB1cmw9J2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyJz5odHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6MjwvdWxpbms+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFdlIGNhbiBsb29rIGF0IHRoZSByYXcgdHJhY2Ugb3V0cHV0IHVzaW5nICdwZXJmIHNjcmlwdCcgd2l0aCBubworICAgICAgICAgICAgICAgIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiBzY3JpcHQKKworICAgICAgICAgICBwZXJmICAxMjYyIFswMDBdIDExNjI0Ljg1NzA4Mjogc3lzX2V4aXRfcmVhZDogMHgwCisgICAgICAgICAgIHBlcmYgIDEyNjIgWzAwMF0gMTE2MjQuODU3MTkzOiBzY2hlZF93YWtldXA6IGNvbW09bWlncmF0aW9uLzAgcGlkPTYgcHJpbz0wIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1ODAyMTogc29mdGlycV9yYWlzZTogdmVjPTEgW2FjdGlvbj1USU1FUl0KKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTgwNzQ6IHNvZnRpcnFfZW50cnk6IHZlYz0xIFthY3Rpb249VElNRVJdCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU4MDgxOiBzb2Z0aXJxX2V4aXQ6IHZlYz0xIFthY3Rpb249VElNRVJdCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU4MTY2OiBzeXNfZW50ZXJfcmVhZDogZmQ6IDB4MDAwMywgYnVmOiAweGJmODJjOTQwLCBjb3VudDogMHgwMjAwCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU4MTc3OiBzeXNfZXhpdF9yZWFkOiAweDIwMAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1ODg3ODoga2ZyZWVfc2tiOiBza2JhZGRyPTB4ZWIyNDhkODAgcHJvdG9jb2w9MCBsb2NhdGlvbj0weGMxNWE1MzA4CisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU4OTQ1OiBrZnJlZV9za2I6IHNrYmFkZHI9MHhlYjI0ODAwMCBwcm90b2NvbD0wIGxvY2F0aW9uPTB4YzE1YTUzMDgKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTkwMjA6IHNvZnRpcnFfcmFpc2U6IHZlYz0xIFthY3Rpb249VElNRVJdCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU5MDc2OiBzb2Z0aXJxX2VudHJ5OiB2ZWM9MSBbYWN0aW9uPVRJTUVSXQorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTA4Mzogc29mdGlycV9leGl0OiB2ZWM9MSBbYWN0aW9uPVRJTUVSXQorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTE2Nzogc3lzX2VudGVyX3JlYWQ6IGZkOiAweDAwMDMsIGJ1ZjogMHhiNzcyMDAwMCwgY291bnQ6IDB4MDQwMAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTE5Mjogc3lzX2V4aXRfcmVhZDogMHgxZDcKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTkyMjg6IHN5c19lbnRlcl9yZWFkOiBmZDogMHgwMDAzLCBidWY6IDB4Yjc3MjAwMDAsIGNvdW50OiAweDA0MDAKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTkyMzM6IHN5c19leGl0X3JlYWQ6IDB4MAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTU3Mzogc3lzX2VudGVyX3JlYWQ6IGZkOiAweDAwMDMsIGJ1ZjogMHhiZjgyYzU4MCwgY291bnQ6IDB4MDIwMAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTU4NDogc3lzX2V4aXRfcmVhZDogMHgyMDAKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTk4NjQ6IHN5c19lbnRlcl9yZWFkOiBmZDogMHgwMDAzLCBidWY6IDB4Yjc3MjAwMDAsIGNvdW50OiAweDA0MDAKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTk4ODg6IHN5c19leGl0X3JlYWQ6IDB4NDAwCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU5OTM1OiBzeXNfZW50ZXJfcmVhZDogZmQ6IDB4MDAwMywgYnVmOiAweGI3NzIwMDAwLCBjb3VudDogMHgwNDAwCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU5OTQ0OiBzeXNfZXhpdF9yZWFkOiAweDQwMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIGdpdmVzIHVzIGEgZGV0YWlsZWQgdGltZXN0YW1wZWQgc2VxdWVuY2Ugb2YgZXZlbnRzIHRoYXQKKyAgICAgICAgICAgICAgICBvY2N1cnJlZCB3aXRoaW4gdGhlIHdvcmtsb2FkIHdpdGggcmVzcGVjdCB0byB0aG9zZSBldmVudHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIG1hbnkgd2F5cywgcHJvZmlsaW5nIGNhbiBiZSB2aWV3ZWQgYXMgYSBzdWJzZXQgb2YgdHJhY2luZyAtCisgICAgICAgICAgICAgICAgdGhlb3JldGljYWxseSwgaWYgeW91IGhhdmUgYSBzZXQgb2YgdHJhY2UgZXZlbnRzIHRoYXQncyBzdWZmaWNpZW50CisgICAgICAgICAgICAgICAgdG8gY2FwdHVyZSBhbGwgdGhlIGltcG9ydGFudCBhc3BlY3RzIG9mIGEgd29ya2xvYWQsIHlvdSBjYW4gZGVyaXZlCisgICAgICAgICAgICAgICAgYW55IG9mIHRoZSByZXN1bHRzIG9yIHZpZXdzIHRoYXQgYSBwcm9maWxpbmcgcnVuIGNhbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciBhc3BlY3Qgb2YgdHJhZGl0aW9uYWwgcHJvZmlsaW5nIGlzIHRoYXQgd2hpbGUgcG93ZXJmdWwgaW4KKyAgICAgICAgICAgICAgICBtYW55IHdheXMsIGl0J3MgbGltaXRlZCBieSB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIHVuZGVybHlpbmcgZGF0YS4KKyAgICAgICAgICAgICAgICBQcm9maWxpbmcgdG9vbHMgb2ZmZXIgdmFyaW91cyB3YXlzIG9mIHNvcnRpbmcgYW5kIHByZXNlbnRpbmcgdGhlCisgICAgICAgICAgICAgICAgc2FtcGxlIGRhdGEsIHdoaWNoIG1ha2UgaXQgbXVjaCBtb3JlIHVzZWZ1bCBhbmQgYW1lbmFibGUgdG8gdXNlcgorICAgICAgICAgICAgICAgIGV4cGVyaW1lbnRhdGlvbiwgYnV0IGluIHRoZSBlbmQgaXQgY2FuJ3QgYmUgdXNlZCBpbiBhbiBvcGVuLWVuZGVkCisgICAgICAgICAgICAgICAgd2F5IHRvIGV4dHJhY3QgZGF0YSB0aGF0IGp1c3QgaXNuJ3QgcHJlc2VudCBhcyBhIGNvbnNlcXVlbmNlIG9mCisgICAgICAgICAgICAgICAgdGhlIGZhY3QgdGhhdCBjb25jZXB0dWFsbHksIG1vc3Qgb2YgaXQgaGFzIGJlZW4gdGhyb3duIGF3YXkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZ1bGwtYmxvd24gZGV0YWlsZWQgdHJhY2luZyBkYXRhIGRvZXMgaG93ZXZlciBvZmZlciB0aGUgb3Bwb3J0dW5pdHkKKyAgICAgICAgICAgICAgICB0byBtYW5pcHVsYXRlIGFuZCBwcmVzZW50IHRoZSBpbmZvcm1hdGlvbiBjb2xsZWN0ZWQgZHVyaW5nIGEKKyAgICAgICAgICAgICAgICB0cmFjaW5nIHJ1biBpbiBhbiBpbmZpbml0ZSB2YXJpZXR5IG9mIHdheXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFub3RoZXIgd2F5IHRvIGxvb2sgYXQgaXQgaXMgdGhhdCB0aGVyZSBhcmUgb25seSBzbyBtYW55IHdheXMgdGhhdAorICAgICAgICAgICAgICAgIHRoZSAncHJpbWl0aXZlJyBjb3VudGVycyBjYW4gYmUgdXNlZCBvbiB0aGVpciBvd24gdG8gZ2VuZXJhdGUKKyAgICAgICAgICAgICAgICBpbnRlcmVzdGluZyBvdXRwdXQ7IHRvIGdldCBhbnl0aGluZyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gc2ltcGxlCisgICAgICAgICAgICAgICAgY291bnRzIHJlcXVpcmVzIHNvbWUgYW1vdW50IG9mIGFkZGl0aW9uYWwgbG9naWMsIHdoaWNoIGlzIHR5cGljYWxseQorICAgICAgICAgICAgICAgIHZlcnkgc3BlY2lmaWMgdG8gdGhlIHByb2JsZW0gYXQgaGFuZC4gRm9yIGV4YW1wbGUsIGlmIHdlIHdhbnRlZCB0bworICAgICAgICAgICAgICAgIG1ha2UgdXNlIG9mIGEgJ2NvdW50ZXInIHRoYXQgbWFwcyB0byB0aGUgdmFsdWUgb2YgdGhlIHRpbWUKKyAgICAgICAgICAgICAgICBkaWZmZXJlbmNlIGJldHdlZW4gd2hlbiBhIHByb2Nlc3Mgd2FzIHNjaGVkdWxlZCB0byBydW4gb24gYQorICAgICAgICAgICAgICAgIHByb2Nlc3NvciBhbmQgdGhlIHRpbWUgaXQgYWN0dWFsbHkgcmFuLCB3ZSB3b3VsZG4ndCBleHBlY3Qgc3VjaAorICAgICAgICAgICAgICAgIGEgY291bnRlciB0byBleGlzdCBvbiBpdHMgb3duLCBidXQgd2UgY291bGQgZGVyaXZlIG9uZSBjYWxsZWQgc2F5CisgICAgICAgICAgICAgICAgJ3dha2V1cF9sYXRlbmN5JyBhbmQgdXNlIGl0IHRvIGV4dHJhY3QgYSB1c2VmdWwgdmlldyBvZiB0aGF0IG1ldHJpYworICAgICAgICAgICAgICAgIGZyb20gdHJhY2UgZGF0YS4gTGlrZXdpc2UsIHdlIHJlYWxseSBjYW4ndCBmaWd1cmUgb3V0IGZyb20gc3RhbmRhcmQKKyAgICAgICAgICAgICAgICBwcm9maWxpbmcgdG9vbHMgaG93IG11Y2ggZGF0YSBldmVyeSBwcm9jZXNzIG9uIHRoZSBzeXN0ZW0gcmVhZHMgYW5kCisgICAgICAgICAgICAgICAgd3JpdGVzLCBhbG9uZyB3aXRoIGhvdyBtYW55IG9mIHRob3NlIHJlYWRzIGFuZCB3cml0ZXMgZmFpbAorICAgICAgICAgICAgICAgIGNvbXBsZXRlbHkuIElmIHdlIGhhdmUgc3VmZmljaWVudCB0cmFjZSBkYXRhLCBob3dldmVyLCB3ZSBjb3VsZAorICAgICAgICAgICAgICAgIHdpdGggdGhlIHJpZ2h0IHRvb2xzIGVhc2lseSBleHRyYWN0IGFuZCBwcmVzZW50IHRoYXQgaW5mb3JtYXRpb24sCisgICAgICAgICAgICAgICAgYnV0IHdlJ2QgbmVlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBwcmUtY2FubmVkIHByb2ZpbGluZyB0b29scyB0bworICAgICAgICAgICAgICAgIGRvIHRoYXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEx1Y2tpbHksIHRoZXJlIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHdheSB0byBoYW5kbGUgc3VjaCBuZWVkcywKKyAgICAgICAgICAgICAgICBjYWxsZWQgJ3Byb2dyYW1taW5nIGxhbmd1YWdlcycuIE1ha2luZyBwcm9ncmFtbWluZyBsYW5ndWFnZXMKKyAgICAgICAgICAgICAgICBlYXNpbHkgYXZhaWxhYmxlIHRvIGFwcGx5IHRvIHN1Y2ggcHJvYmxlbXMgZ2l2ZW4gdGhlIHNwZWNpZmljCisgICAgICAgICAgICAgICAgZm9ybWF0IG9mIGRhdGEgaXMgY2FsbGVkIGEgJ3Byb2dyYW1taW5nIGxhbmd1YWdlIGJpbmRpbmcnIGZvcgorICAgICAgICAgICAgICAgIHRoYXQgZGF0YSBhbmQgbGFuZ3VhZ2UuIFBlcmYgc3VwcG9ydHMgdHdvIHByb2dyYW1taW5nIGxhbmd1YWdlCisgICAgICAgICAgICAgICAgYmluZGluZ3MsIG9uZSBmb3IgUHl0aG9uIGFuZCBvbmUgZm9yIFBlcmwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IExhbmd1YWdlIGJpbmRpbmdzIGZvciBtYW5pcHVsYXRpbmcgYW5kCisgICAgICAgICAgICAgICAgYWdncmVnYXRpbmcgdHJhY2UgZGF0YSBhcmUgb2YgY291cnNlIG5vdCBhIG5ldworICAgICAgICAgICAgICAgIGlkZWEuICBPbmUgb2YgdGhlIGZpcnN0IHByb2plY3RzIHRvIGRvIHRoaXMgd2FzIElCTSdzIERQcm9iZXMKKyAgICAgICAgICAgICAgICBkcGNjIGNvbXBpbGVyLCBhbiBBTlNJIEMgY29tcGlsZXIgd2hpY2ggdGFyZ2V0ZWQgYSBsb3ctbGV2ZWwKKyAgICAgICAgICAgICAgICBhc3NlbWJseSBsYW5ndWFnZSBydW5uaW5nIG9uIGFuIGluLWtlcm5lbCBpbnRlcnByZXRlciBvbiB0aGUKKyAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtLiAgVGhpcyBpcyBleGFjdGx5IGFuYWxvZ291cyB0byB3aGF0IFN1bidzIERUcmFjZQorICAgICAgICAgICAgICAgIGRpZCwgZXhjZXB0IHRoYXQgRFRyYWNlIGludmVudGVkIGl0cyBvd24gbGFuZ3VhZ2UgZm9yIHRoZSBwdXJwb3NlLgorICAgICAgICAgICAgICAgIFN5c3RlbXRhcCwgaGVhdmlseSBpbnNwaXJlZCBieSBEVHJhY2UsIGFsc28gY3JlYXRlZCBpdHMgb3duCisgICAgICAgICAgICAgICAgb25lLW9mZiBsYW5ndWFnZSwgYnV0IHJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlIHByb2R1Y3Qgb24gYW4KKyAgICAgICAgICAgICAgICBpbi1rZXJuZWwgaW50ZXJwcmV0ZXIsIGNyZWF0ZWQgYW4gZWxhYm9yYXRlIGNvbXBpbGVyLWJhc2VkCisgICAgICAgICAgICAgICAgbWFjaGluZXJ5IHRvIHRyYW5zbGF0ZSBpdHMgbGFuZ3VhZ2UgaW50byBrZXJuZWwgbW9kdWxlcyB3cml0dGVuCisgICAgICAgICAgICAgICAgaW4gQy4KKyAgICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBOb3cgdGhhdCB3ZSBoYXZlIHRoZSB0cmFjZSBkYXRhIGluIHBlcmYuZGF0YSwgd2UgY2FuIHVzZQorICAgICAgICAgICAgICAgICdwZXJmIHNjcmlwdCAtZycgdG8gZ2VuZXJhdGUgYSBza2VsZXRvbiBzY3JpcHQgd2l0aCBoYW5kbGVycworICAgICAgICAgICAgICAgIGZvciB0aGUgcmVhZC93cml0ZSBlbnRyeS9leGl0IGV2ZW50cyB3ZSByZWNvcmRlZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiBzY3JpcHQgLWcgcHl0aG9uCisgICAgIGdlbmVyYXRlZCBQeXRob24gc2NyaXB0OiBwZXJmLXNjcmlwdC5weQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgc2tlbGV0b24gc2NyaXB0IHNpbXBseSBjcmVhdGVzIGEgcHl0aG9uIGZ1bmN0aW9uIGZvciBlYWNoCisgICAgICAgICAgICAgICAgZXZlbnQgdHlwZSBpbiB0aGUgcGVyZi5kYXRhIGZpbGUuIFRoZSBib2R5IG9mIGVhY2ggZnVuY3Rpb24gc2ltcGx5CisgICAgICAgICAgICAgICAgcHJpbnRzIHRoZSBldmVudCBuYW1lIGFsb25nIHdpdGggaXRzIHBhcmFtZXRlcnMuIEZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZGVmIG5ldF9fbmV0aWZfcngoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKyAgICAgICAgICAgIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorICAgICAgICAgICAgc2tiYWRkciwgbGVuLCBuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRfaGVhZGVyKGV2ZW50X25hbWUsIGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pCisKKwkJICAgICBwcmludCAic2tiYWRkcj0ldSwgbGVuPSV1LCBuYW1lPSVzXG4iICUgKHNrYmFkZHIsIGxlbiwgbmFtZSksCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFdlIGNhbiBydW4gdGhhdCBzY3JpcHQgZGlyZWN0bHkgdG8gcHJpbnQgYWxsIG9mIHRoZSBldmVudHMKKyAgICAgICAgICAgICAgICBjb250YWluZWQgaW4gdGhlIHBlcmYuZGF0YSBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHNjcmlwdCAtcyBwZXJmLXNjcmlwdC5weQorCisgICAgIGluIHRyYWNlX2JlZ2luCisgICAgIHN5c2NhbGxzX19zeXNfZXhpdF9yZWFkICAgICAwIDExNjI0Ljg1NzA4Mjc5NSAgICAgMTI2MiBwZXJmICAgICAgICAgICAgICAgICAgbnI9MywgcmV0PTAKKyAgICAgc2NoZWRfX3NjaGVkX3dha2V1cCAgICAgIDAgMTE2MjQuODU3MTkzNDk4ICAgICAxMjYyIHBlcmYgICAgICAgICAgICAgICAgICBjb21tPW1pZ3JhdGlvbi8wLCBwaWQ9NiwgcHJpbz0wLCAgICAgIHN1Y2Nlc3M9MSwgdGFyZ2V0X2NwdT0wCisgICAgIGlycV9fc29mdGlycV9yYWlzZSAgICAgICAxIDExNjI0Ljg1ODAyMTYzNSAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgdmVjPVRJTUVSCisgICAgIGlycV9fc29mdGlycV9lbnRyeSAgICAgICAxIDExNjI0Ljg1ODA3NDA3NSAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgdmVjPVRJTUVSCisgICAgIGlycV9fc29mdGlycV9leGl0ICAgICAgICAxIDExNjI0Ljg1ODA4MTM4OSAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgdmVjPVRJTUVSCisgICAgIHN5c2NhbGxzX19zeXNfZW50ZXJfcmVhZCAgICAgMSAxMTYyNC44NTgxNjY0MzQgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIGZkPTMsIGJ1Zj0zMjEzMDE5NDU2LCAgICAgIGNvdW50PTUxMgorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTgxNzc5MjQgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD01MTIKKyAgICAgc2tiX19rZnJlZV9za2IgICAgICAgICAgIDEgMTE2MjQuODU4ODc4MTg4ICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICBza2JhZGRyPTM5NDUwNDEyODAsICAgICAgICAgICBsb2NhdGlvbj0zMjQzOTIyMTg0LCBwcm90b2NvbD0wCisgICAgIHNrYl9fa2ZyZWVfc2tiICAgICAgICAgICAxIDExNjI0Ljg1ODk0NTYwOCAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgc2tiYWRkcj0zOTQ1MDM3ODI0LCAgICAgIGxvY2F0aW9uPTMyNDM5MjIxODQsIHByb3RvY29sPTAKKyAgICAgaXJxX19zb2Z0aXJxX3JhaXNlICAgICAgIDEgMTE2MjQuODU5MDIwOTQyICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICB2ZWM9VElNRVIKKyAgICAgaXJxX19zb2Z0aXJxX2VudHJ5ICAgICAgIDEgMTE2MjQuODU5MDc2OTM1ICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICB2ZWM9VElNRVIKKyAgICAgaXJxX19zb2Z0aXJxX2V4aXQgICAgICAgIDEgMTE2MjQuODU5MDgzNDY5ICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICB2ZWM9VElNRVIKKyAgICAgc3lzY2FsbHNfX3N5c19lbnRlcl9yZWFkICAgICAxIDExNjI0Ljg1OTE2NzU2NSAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgbnI9MywgZmQ9MywgYnVmPTMwNzc3MDE2MzIsICAgICAgY291bnQ9MTAyNAorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTkxOTI1MzMgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD00NzEKKyAgICAgc3lzY2FsbHNfX3N5c19lbnRlcl9yZWFkICAgICAxIDExNjI0Ljg1OTIyODA3MiAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgbnI9MywgZmQ9MywgYnVmPTMwNzc3MDE2MzIsICAgICAgY291bnQ9MTAyNAorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTkyMzM3MDcgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD0wCisgICAgIHN5c2NhbGxzX19zeXNfZW50ZXJfcmVhZCAgICAgMSAxMTYyNC44NTk1NzMwMDggICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIGZkPTMsIGJ1Zj0zMjEzMDE4NDk2LCAgICAgIGNvdW50PTUxMgorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTk1ODQ4MTggICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD01MTIKKyAgICAgc3lzY2FsbHNfX3N5c19lbnRlcl9yZWFkICAgICAxIDExNjI0Ljg1OTg2NDU2MiAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgbnI9MywgZmQ9MywgYnVmPTMwNzc3MDE2MzIsICAgICAgY291bnQ9MTAyNAorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTk4ODg3NzAgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD0xMDI0CisgICAgIHN5c2NhbGxzX19zeXNfZW50ZXJfcmVhZCAgICAgMSAxMTYyNC44NTk5MzUxNDAgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIGZkPTMsIGJ1Zj0zMDc3NzAxNjMyLCAgICAgIGNvdW50PTEwMjQKKyAgICAgc3lzY2FsbHNfX3N5c19leGl0X3JlYWQgICAgIDEgMTE2MjQuODU5OTQ0MDMyICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICBucj0zLCByZXQ9MTAyNAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGF0IGluIGl0c2VsZiBpc24ndCB2ZXJ5IHVzZWZ1bDsgYWZ0ZXIgYWxsLCB3ZSBjYW4gYWNjb21wbGlzaAorICAgICAgICAgICAgICAgIHByZXR0eSBtdWNoIHRoZSBzYW1lIHRoaW5nIGJ5IHNpbXBseSBydW5uaW5nICdwZXJmIHNjcmlwdCcKKyAgICAgICAgICAgICAgICB3aXRob3V0IGFyZ3VtZW50cyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIHBlcmYuZGF0YSBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXZSBjYW4gaG93ZXZlciByZXBsYWNlIHRoZSBwcmludCBzdGF0ZW1lbnRzIGluIHRoZSBnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBib2RpZXMgd2l0aCB3aGF0ZXZlciB3ZSB3YW50LCBhbmQgdGhlcmVieSBtYWtlIGl0CisgICAgICAgICAgICAgICAgaW5maW5pdGVseSBtb3JlIHVzZWZ1bC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYSBzaW1wbGUgZXhhbXBsZSwgbGV0J3MganVzdCByZXBsYWNlIHRoZSBwcmludCBzdGF0ZW1lbnRzIGluCisgICAgICAgICAgICAgICAgdGhlIGZ1bmN0aW9uIGJvZGllcyB3aXRoIGEgc2ltcGxlIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nIGJ1dAorICAgICAgICAgICAgICAgIGluY3JlbWVudCBhIHBlci1ldmVudCBjb3VudC4gV2hlbiB0aGUgcHJvZ3JhbSBpcyBydW4gYWdhaW5zdCBhCisgICAgICAgICAgICAgICAgcGVyZi5kYXRhIGZpbGUsIGVhY2ggdGltZSBhIHBhcnRpY3VsYXIgZXZlbnQgaXMgZW5jb3VudGVyZWQsCisgICAgICAgICAgICAgICAgYSB0YWxseSBpcyBpbmNyZW1lbnRlZCBmb3IgdGhhdCBldmVudC4gRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkZWYgbmV0X19uZXRpZl9yeChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorICAgICAgICAgICAgY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisgICAgICAgICAgICBza2JhZGRyLCBsZW4sIG5hbWUpOgorCQkgICAgICAgICAgaW5jX2NvdW50cyhldmVudF9uYW1lKQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBFYWNoIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gaW4gdGhlIGdlbmVyYXRlZCBjb2RlIGlzIG1vZGlmaWVkCisgICAgICAgICAgICAgICAgdG8gZG8gdGhpcy4gRm9yIGNvbnZlbmllbmNlLCB3ZSBkZWZpbmUgYSBjb21tb24gZnVuY3Rpb24gY2FsbGVkCisgICAgICAgICAgICAgICAgaW5jX2NvdW50cygpIHRoYXQgZWFjaCBoYW5kbGVyIGNhbGxzOyBpbmNfY291bnRzKCkgc2ltcGx5IHRhbGxpZXMKKyAgICAgICAgICAgICAgICBhIGNvdW50IGZvciBlYWNoIGV2ZW50IHVzaW5nIHRoZSAnY291bnRzJyBoYXNoLCB3aGljaCBpcyBhCisgICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWQgaGFzaCBmdW5jdGlvbiB0aGF0IGRvZXMgUGVybC1saWtlIGF1dG92aXZpZmljYXRpb24sIGEKKyAgICAgICAgICAgICAgICBjYXBhYmlsaXR5IHRoYXQncyBleHRyZW1lbHkgdXNlZnVsIGZvciBraW5kcyBvZiBtdWx0aS1sZXZlbAorICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uIGNvbW1vbmx5IHVzZWQgaW4gcHJvY2Vzc2luZyB0cmFjZXMgKHNlZSBwZXJmJ3MKKyAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uIG9uIHRoZSBQeXRob24gbGFuZ3VhZ2UgYmluZGluZyBmb3IgZGV0YWlscyk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBjb3VudHMgPSBhdXRvZGljdCgpCisKKyAgICAgZGVmIGluY19jb3VudHMoZXZlbnRfbmFtZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNvdW50c1tldmVudF9uYW1lXSArPSAxCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb3VudHNbZXZlbnRfbmFtZV0gPSAxCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZpbmFsbHksIGF0IHRoZSBlbmQgb2YgdGhlIHRyYWNlIHByb2Nlc3NpbmcgcnVuLCB3ZSB3YW50IHRvCisgICAgICAgICAgICAgICAgcHJpbnQgdGhlIHJlc3VsdCBvZiBhbGwgdGhlIHBlci1ldmVudCB0YWxsaWVzLiBGb3IgdGhhdCwgd2UKKyAgICAgICAgICAgICAgICB1c2UgdGhlIHNwZWNpYWwgJ3RyYWNlX2VuZCgpJyBmdW5jdGlvbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRlZiB0cmFjZV9lbmQoKToKKyAgICAgICAgICAgIGZvciBldmVudF9uYW1lLCBjb3VudCBpbiBjb3VudHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICIlLTQwcyAlMTBzXG4iICUgKGV2ZW50X25hbWUsIGNvdW50KQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgZW5kIHJlc3VsdCBpcyBhIHN1bW1hcnkgb2YgYWxsIHRoZSBldmVudHMgcmVjb3JkZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBza2JfX3NrYl9jb3B5X2RhdGFncmFtX2lvdmVjICAgICAgICAgICAgICAgICAgMTMxNDgKKyAgICAgaXJxX19zb2Z0aXJxX2VudHJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Nzk2CisgICAgIGlycV9faXJxX2hhbmRsZXJfZXhpdCAgICAgICAgICAgICAgICAgICAgICAgICAgMzgwNQorICAgICBpcnFfX3NvZnRpcnFfZXhpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3OTUKKyAgICAgc3lzY2FsbHNfX3N5c19lbnRlcl93cml0ZSAgICAgICAgICAgICAgICAgICAgICA4OTkwCisgICAgIG5ldF9fbmV0X2Rldl94bWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY1MgorICAgICBza2JfX2tmcmVlX3NrYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwNDcKKyAgICAgc2NoZWRfX3NjaGVkX3dha2V1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTU1CisgICAgIGlycV9faXJxX2hhbmRsZXJfZW50cnkgICAgICAgICAgICAgICAgICAgICAgICAgMzgwNAorICAgICBpcnFfX3NvZnRpcnFfcmFpc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3OTkKKyAgICAgbmV0X19uZXRfZGV2X3F1ZXVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjUyCisgICAgIHN5c2NhbGxzX19zeXNfZW50ZXJfcmVhZCAgICAgICAgICAgICAgICAgICAgICAxNzU5OQorICAgICBuZXRfX25ldGlmX3JlY2VpdmVfc2tiICAgICAgICAgICAgICAgICAgICAgICAgIDE3NDMKKyAgICAgc3lzY2FsbHNfX3N5c19leGl0X3JlYWQgICAgICAgICAgICAgICAgICAgICAgIDE3NTk4CisgICAgIG5ldF9fbmV0aWZfcnggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorICAgICBuYXBpX19uYXBpX3BvbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4NzcKKyAgICAgc3lzY2FsbHNfX3N5c19leGl0X3dyaXRlICAgICAgICAgICAgICAgICAgICAgICA4OTkwCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIHByZXR0eSBtdWNoIGV4YWN0bHkgdGhlIHNhbWUgaW5mb3JtYXRpb24gd2UgZ2V0CisgICAgICAgICAgICAgICAgZnJvbSAncGVyZiBzdGF0Jywgd2hpY2ggZ29lcyBhIGxpdHRsZSB3YXkgdG8gc3VwcG9ydCB0aGUgaWRlYQorICAgICAgICAgICAgICAgIG1lbnRpb25lZCBwcmV2aW91c2x5IHRoYXQgZ2l2ZW4gdGhlIHJpZ2h0IGtpbmQgb2YgdHJhY2UgZGF0YSwKKyAgICAgICAgICAgICAgICBoaWdoZXItbGV2ZWwgcHJvZmlsaW5nLXR5cGUgc3VtbWFyaWVzIGNhbiBiZSBkZXJpdmVkIGZyb20gaXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERvY3VtZW50YXRpb24gb24gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzEvcGVyZi1zY3JpcHQtcHl0aG9uJz4ncGVyZiBzY3JpcHQnIHB5dGhvbiBiaW5kaW5nPC91bGluaz4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc3lzdGVtLXdpZGUtdHJhY2luZy1hbmQtcHJvZmlsaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5TeXN0ZW0tV2lkZSBUcmFjaW5nIGFuZCBQcm9maWxpbmc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZXhhbXBsZXMgc28gZmFyIGhhdmUgZm9jdXNlZCBvbiB0cmFjaW5nIGEgcGFydGljdWxhciBwcm9ncmFtIG9yCisgICAgICAgICAgICAgICAgd29ya2xvYWQgLSBpbiBvdGhlciB3b3JkcywgZXZlcnkgcHJvZmlsaW5nIHJ1biBoYXMgc3BlY2lmaWVkIHRoZQorICAgICAgICAgICAgICAgIHByb2dyYW0gdG8gcHJvZmlsZSBpbiB0aGUgY29tbWFuZC1saW5lIGUuZy4gJ3BlcmYgcmVjb3JkIHdnZXQgLi4uJy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQncyBhbHNvIHBvc3NpYmxlLCBhbmQgbW9yZSBpbnRlcmVzdGluZyBpbiBtYW55IGNhc2VzLCB0byBydW4gYQorICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIHByb2ZpbGUgb3IgdHJhY2Ugd2hpbGUgcnVubmluZyB0aGUgd29ya2xvYWQgaW4gYQorICAgICAgICAgICAgICAgIHNlcGFyYXRlIHNoZWxsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBkbyBzeXN0ZW0td2lkZSBwcm9maWxpbmcgb3IgdHJhY2luZywgeW91IHR5cGljYWxseSB1c2UKKyAgICAgICAgICAgICAgICB0aGUgLWEgZmxhZyB0byAncGVyZiByZWNvcmQnLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBkZW1vbnN0cmF0ZSB0aGlzLCBvcGVuIHVwIG9uZSB3aW5kb3cgYW5kIHN0YXJ0IHRoZSBwcm9maWxlCisgICAgICAgICAgICAgICAgdXNpbmcgdGhlIC1hIGZsYWcgKHByZXNzIEN0cmwtQyB0byBzdG9wIHRyYWNpbmcpOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHJlY29yZCAtZyAtYQorICAgICBeQ1sgcGVyZiByZWNvcmQ6IFdva2VuIHVwIDYgdGltZXMgdG8gd3JpdGUgZGF0YSBdCisgICAgIFsgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSAxLjQwMCBNQiBwZXJmLmRhdGEgKH42MTE3MiBzYW1wbGVzKSBdCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIGFub3RoZXIgd2luZG93LCBydW4gdGhlIHdnZXQgdGVzdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgd2dldCA8dWxpbmsgdXJsPSdodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6Mic+aHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejI8L3VsaW5rPgorICAgICBDb25uZWN0aW5nIHRvIGRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnICgxNDAuMjExLjE2OS41OTo4MCkKKyAgICAgbGludXgtMi42LjE5LjIudGFyLmIgMTAwJSB8KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKnwgNDE3MjdrICAwOjAwOjAwIEVUQQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBIZXJlIHdlIHNlZSBlbnRyaWVzIG5vdCBvbmx5IGZvciBvdXIgd2dldCBsb2FkLCBidXQgZm9yIG90aGVyCisgICAgICAgICAgICAgICAgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIHN5c3RlbSBhcyB3ZWxsOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHRoZSBzbmFwc2hvdCBhYm92ZSwgd2UgY2FuIHNlZSBjYWxsY2hhaW5zIHRoYXQgb3JpZ2luYXRlIGluCisgICAgICAgICAgICAgICAgbGliYywgYW5kIGEgY2FsbGNoYWluIGZyb20gWG9yZyB0aGF0IGRlbW9uc3RyYXRlcyB0aGF0IHdlJ3JlCisgICAgICAgICAgICAgICAgdXNpbmcgYSBwcm9wcmlldGFyeSBYIGRyaXZlciBpbiB1c2Vyc3BhY2UgKG5vdGljZSB0aGUgcHJlc2VuY2UKKyAgICAgICAgICAgICAgICBvZiAnUFZSJyBhbmQgc29tZSBvdGhlciB1bnJlc29sdmFibGUgc3ltYm9scyBpbiB0aGUgZXhwYW5kZWQKKyAgICAgICAgICAgICAgICBYb3JnIGNhbGxjaGFpbikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vdGUgYWxzbyB0aGF0IHdlIGhhdmUgYm90aCBrZXJuZWwgYW5kIHVzZXJzcGFjZSBlbnRyaWVzIGluIHRoZQorICAgICAgICAgICAgICAgIGFib3ZlIHNuYXBzaG90LiBXZSBjYW4gYWxzbyB0ZWxsIHBlcmYgdG8gZm9jdXMgb24gdXNlcnNwYWNlIGJ1dAorICAgICAgICAgICAgICAgIHByb3ZpZGluZyBhIG1vZGlmaWVyLCBpbiB0aGlzIGNhc2UgJ3UnLCB0byB0aGUgJ2N5Y2xlcycgaGFyZHdhcmUKKyAgICAgICAgICAgICAgICBjb3VudGVyIHdoZW4gd2UgcmVjb3JkIGEgcHJvZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZWNvcmQgLWcgLWEgLWUgY3ljbGVzOnUKKyAgICAgXkNbIHBlcmYgcmVjb3JkOiBXb2tlbiB1cCAyIHRpbWVzIHRvIHdyaXRlIGRhdGEgXQorICAgICBbIHBlcmYgcmVjb3JkOiBDYXB0dXJlZCBhbmQgd3JvdGUgMC4zNzYgTUIgcGVyZi5kYXRhICh+MTY0NDMgc2FtcGxlcykgXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vdGljZSBpbiB0aGUgc2NyZWVuc2hvdCBhYm92ZSwgd2Ugc2VlIG9ubHkgdXNlcnNwYWNlIGVudHJpZXMgKFsuXSkKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmluYWxseSwgd2UgY2FuIHByZXNzICdlbnRlcicgb24gYSBsZWFmIG5vZGUgYW5kIHNlbGVjdCB0aGUgJ1pvb20KKyAgICAgICAgICAgICAgICBpbnRvIERTTycgbWVudSBpdGVtIHRvIHNob3cgb25seSBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aCBhCisgICAgICAgICAgICAgICAgc3BlY2lmaWMgRFNPLiBJbiB0aGUgc2NyZWVuc2hvdCBiZWxvdywgd2UndmUgem9vbWVkIGludG8gdGhlCisgICAgICAgICAgICAgICAgJ2xpYmMnIERTTyB3aGljaCBzaG93cyBhbGwgdGhlIGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIGxpYmMteHh4LnNvIERTTy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdlIGNhbiBhbHNvIHVzZSB0aGUgc3lzdGVtLXdpZGUgLWEgc3dpdGNoIHRvIGRvIHN5c3RlbS13aWRlCisgICAgICAgICAgICAgICAgdHJhY2luZy4gSGVyZSB3ZSdsbCB0cmFjZSBhIGNvdXBsZSBvZiBzY2hlZHVsZXIgZXZlbnRzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHJlY29yZCAtYSAtZSBzY2hlZDpzY2hlZF9zd2l0Y2ggLWUgc2NoZWQ6c2NoZWRfd2FrZXVwCisgICAgIF5DWyBwZXJmIHJlY29yZDogV29rZW4gdXAgMzggdGltZXMgdG8gd3JpdGUgZGF0YSBdCisgICAgIFsgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSA5Ljc4MCBNQiBwZXJmLmRhdGEgKH40MjcyOTkgc2FtcGxlcykgXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXZSBjYW4gbG9vayBhdCB0aGUgcmF3IG91dHB1dCB1c2luZyAncGVyZiBzY3JpcHQnIHdpdGggbm8KKyAgICAgICAgICAgICAgICBhcmd1bWVudHM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc2NyaXB0CisKKyAgICAgICAgICAgICAgICBwZXJmICAxMzgzIFswMDFdICA2MTcxLjQ2MDA0NTogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxMzgzIFswMDFdICA2MTcxLjQ2MDA2Njogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09cGVyZiBwcmV2X3BpZD0xMzgzIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SKyA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMToxIG5leHRfcGlkPTIxIG5leHRfcHJpbz0xMjAKKyAgICAgICAgIGt3b3JrZXIvMToxICAgIDIxIFswMDFdICA2MTcxLjQ2MDA5Mzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci8xOjEgcHJldl9waWQ9MjEgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1wZXJmIG5leHRfcGlkPTEzODMgbmV4dF9wcmlvPTEyMAorICAgICAgICAgICAgIHN3YXBwZXIgICAgIDAgWzAwMF0gIDYxNzEuNDY4MDYzOiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjMgcGlkPTEyMDkgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCisgICAgICAgICAgICAgc3dhcHBlciAgICAgMCBbMDAwXSAgNjE3MS40NjgxMDc6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3dvcmtlci8wOjMgbmV4dF9waWQ9MTIwOSBuZXh0X3ByaW89MTIwCisgICAgICAgICBrd29ya2VyLzA6MyAgMTIwOSBbMDAwXSAgNjE3MS40NjgxNDM6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDozIHByZXZfcGlkPTEyMDkgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCisgICAgICAgICAgICAgICAgcGVyZiAgMTM4MyBbMDAxXSAgNjE3MS40NzAwMzk6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyLzE6MSBwaWQ9MjEgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAxCisgICAgICAgICAgICAgICAgcGVyZiAgMTM4MyBbMDAxXSAgNjE3MS40NzAwNTg6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXBlcmYgcHJldl9waWQ9MTM4MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UisgPT0+IG5leHRfY29tbT1rd29ya2VyLzE6MSBuZXh0X3BpZD0yMSBuZXh0X3ByaW89MTIwCisgICAgICAgICBrd29ya2VyLzE6MSAgICAyMSBbMDAxXSAgNjE3MS40NzAwODI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMToxIHByZXZfcGlkPTIxIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09cGVyZiBuZXh0X3BpZD0xMzgzIG5leHRfcHJpbz0xMjAKKyAgICAgICAgICAgICAgICBwZXJmICAxMzgzIFswMDFdICA2MTcxLjQ4MDAzNTogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdwZXJmLWZpbHRlcmluZyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkZpbHRlcmluZzwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTm90aWNlIHRoYXQgdGhlcmUgYXJlIGEgbG90IG9mIGV2ZW50cyB0aGF0IGRvbid0IHJlYWxseSBoYXZlCisgICAgICAgICAgICAgICAgICAgIGFueXRoaW5nIHRvIGRvIHdpdGggd2hhdCB3ZSdyZSBpbnRlcmVzdGVkIGluLCBuYW1lbHkgZXZlbnRzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgc2NoZWR1bGUgJ3BlcmYnIGl0c2VsZiBpbiBhbmQgb3V0IG9yIHRoYXQgd2FrZSBwZXJmIHVwLgorICAgICAgICAgICAgICAgICAgICBXZSBjYW4gZ2V0IHJpZCBvZiB0aG9zZSBieSB1c2luZyB0aGUgJy0tZmlsdGVyJyBvcHRpb24gLQorICAgICAgICAgICAgICAgICAgICBmb3IgZWFjaCBldmVudCB3ZSBzcGVjaWZ5IHVzaW5nIC1lLCB3ZSBjYW4gYWRkIGEgLS1maWx0ZXIKKyAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhhdCB0byBmaWx0ZXIgb3V0IHRyYWNlIGV2ZW50cyB0aGF0IGNvbnRhaW4gZmllbGRzCisgICAgICAgICAgICAgICAgICAgIHdpdGggc3BlY2lmaWMgdmFsdWVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZWNvcmQgLWEgLWUgc2NoZWQ6c2NoZWRfc3dpdGNoIC0tZmlsdGVyICduZXh0X2NvbW0gIT0gcGVyZiAmYW1wOyZhbXA7IHByZXZfY29tbSAhPSBwZXJmJyAtZSBzY2hlZDpzY2hlZF93YWtldXAgLS1maWx0ZXIgJ2NvbW0gIT0gcGVyZicKKyAgICAgXkNbIHBlcmYgcmVjb3JkOiBXb2tlbiB1cCAzOCB0aW1lcyB0byB3cml0ZSBkYXRhIF0KKyAgICAgWyBwZXJmIHJlY29yZDogQ2FwdHVyZWQgYW5kIHdyb3RlIDkuNjg4IE1CIHBlcmYuZGF0YSAofjQyMzI3OSBzYW1wbGVzKSBdCisKKworICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc2NyaXB0CisKKyAgICAgICAgICAgICBzd2FwcGVyICAgICAwIFswMDBdICA3OTMyLjE2MjE4MDogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rd29ya2VyLzA6MyBuZXh0X3BpZD0xMjA5IG5leHRfcHJpbz0xMjAKKyAgICAgICAgIGt3b3JrZXIvMDozICAxMjA5IFswMDBdICA3OTMyLjE2MjIzNjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci8wOjMgcHJldl9waWQ9MTIwOSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjE3MDA0ODogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjE4MDA0NDogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjE5MDAzODogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjIwMDA0NDogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjIxMDA0NDogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjIyMDA0NDogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICBzd2FwcGVyICAgICAwIFswMDFdICA3OTMyLjIzMDExMTogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICBzd2FwcGVyICAgICAwIFswMDFdICA3OTMyLjIzMDE0Njogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8xIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rd29ya2VyLzE6MSBuZXh0X3BpZD0yMSBuZXh0X3ByaW89MTIwCisgICAgICAgICBrd29ya2VyLzE6MSAgICAyMSBbMDAxXSAgNzkzMi4yMzAyMDU6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMToxIHByZXZfcGlkPTIxIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8xIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAorICAgICAgICAgICAgIHN3YXBwZXIgICAgIDAgWzAwMF0gIDc5MzIuMzI2MTA5OiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjMgcGlkPTEyMDkgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCisgICAgICAgICAgICAgc3dhcHBlciAgICAgMCBbMDAwXSAgNzkzMi4zMjYxNzE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3dvcmtlci8wOjMgbmV4dF9waWQ9MTIwOSBuZXh0X3ByaW89MTIwCisgICAgICAgICBrd29ya2VyLzA6MyAgMTIwOSBbMDAwXSAgNzkzMi4zMjYyMTQ6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDozIHByZXZfcGlkPTEyMDkgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB3ZSd2ZSBmaWx0ZXJlZCBvdXQgYWxsIGV2ZW50cyB0aGF0IGhhdmUgJ3BlcmYnCisgICAgICAgICAgICAgICAgICAgIGluIHRoZWlyICdjb21tJyBvciAnY29tbV9wcmV2JyBvciAnY29tbV9uZXh0JyBmaWVsZHMuIE5vdGljZQorICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZXJlIGFyZSBzdGlsbCBldmVudHMgcmVjb3JkZWQgZm9yIHBlcmYsIGJ1dCBub3RpY2UKKyAgICAgICAgICAgICAgICAgICAgdGhhdCB0aG9zZSBldmVudHMgZG9uJ3QgaGF2ZSB2YWx1ZXMgb2YgJ3BlcmYnIGZvciB0aGUgZmlsdGVyZWQKKyAgICAgICAgICAgICAgICAgICAgZmllbGRzLiBUbyBjb21wbGV0ZWx5IGZpbHRlciBvdXQgYW55dGhpbmcgZnJvbSBwZXJmIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSBhIGJpdCBtb3JlIHdvcmssIGJ1dCBmb3IgdGhlIHB1cnBvc2Ugb2YgZGVtb25zdHJhdGluZworICAgICAgICAgICAgICAgICAgICBob3cgdG8gdXNlIGZpbHRlcnMsIGl0J3MgY2xvc2UgZW5vdWdoLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgc2FtZSBzZXQgb2YgZXZlbnQKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVycyBkZWZpbmVkIGJ5IHRoZSB0cmFjZSBldmVudCBzdWJzeXN0ZW0uIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZnRyYWNlL3RyYWNlY21kL2tlcm5lbHNoYXJrIHNlY3Rpb24gZm9yIG1vcmUgZGlzY3Vzc2lvbiBhYm91dAorICAgICAgICAgICAgICAgICAgICB0aGVzZSBldmVudCBmaWx0ZXJzLgorICAgICAgICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IFRoZXNlIGV2ZW50IGZpbHRlcnMgYXJlIGltcGxlbWVudGVkIGJ5IGEKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbC1wdXJwb3NlIHBzZXVkby1pbnRlcnByZXRlciBpbiB0aGUga2VybmVsIGFuZCBhcmUgYW4KKyAgICAgICAgICAgICAgICAgICAgaW50ZWdyYWwgYW5kIGluZGlzcGVuc2FibGUgcGFydCBvZiB0aGUgcGVyZiBkZXNpZ24gYXMgaXQKKyAgICAgICAgICAgICAgICAgICAgcmVsYXRlcyB0byB0cmFjaW5nLiAga2VybmVsLWJhc2VkIGV2ZW50IGZpbHRlcnMgcHJvdmlkZSBhCisgICAgICAgICAgICAgICAgICAgIG1lY2hhbmlzbSB0byBwcmVjaXNlbHkgdGhyb3R0bGUgdGhlIGV2ZW50IHN0cmVhbSB0aGF0IGFwcGVhcnMKKyAgICAgICAgICAgICAgICAgICAgaW4gdXNlciBzcGFjZSwgd2hlcmUgaXQgbWFrZXMgc2Vuc2UgdG8gcHJvdmlkZSBiaW5kaW5ncyB0byByZWFsCisgICAgICAgICAgICAgICAgICAgIHByb2dyYW1taW5nIGxhbmd1YWdlcyBmb3IgcG9zdHByb2Nlc3NpbmcgdGhlIGV2ZW50IHN0cmVhbS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmNoaXRlY3R1cmUgYWxsb3dzIGZvciB0aGUgaW50ZWxsaWdlbnQgYW5kIGZsZXhpYmxlCisgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbmluZyBvZiBwcm9jZXNzaW5nIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJhc3QgdGhpcyB3aXRoIG90aGVyIHRvb2xzIHN1Y2ggYXMgU3lzdGVtVGFwLCB3aGljaCBkb2VzCisgICAgICAgICAgICAgICAgICAgIGFsbCBvZiBpdHMgcHJvY2Vzc2luZyBpbiB0aGUga2VybmVsIGFuZCBhcyBzdWNoIHJlcXVpcmVzIGEKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCBwcm9qZWN0LWRlZmluZWQgbGFuZ3VhZ2UgaW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgdGhhdAorICAgICAgICAgICAgICAgICAgICBkZXNpZ24sIG9yIExUVG5nLCB3aGVyZSBldmVyeXRoaW5nIGlzIHNlbnQgdG8gdXNlcnNwYWNlIGFuZAorICAgICAgICAgICAgICAgICAgICBhcyBzdWNoIHJlcXVpcmVzIGEgc3VwZXItZWZmaWNpZW50IGtlcm5lbC10by11c2Vyc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0IG1lY2hhbmlzbSBpbiBvcmRlciB0byBmdW5jdGlvbiBwcm9wZXJseS4gIFdoaWxlCisgICAgICAgICAgICAgICAgICAgIHBlcmYgY2VydGFpbmx5IGNhbiBiZW5lZml0IGZyb20gZm9yIGluc3RhbmNlIGFkdmFuY2VzIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBkZXNpZ24gb2YgdGhlIHRyYW5zcG9ydCwgaXQgZG9lc24ndCBmdW5kYW1lbnRhbGx5IGRlcGVuZAorICAgICAgICAgICAgICAgICAgICBvbiB0aGVtLiAgQmFzaWNhbGx5LCBpZiB5b3UgZmluZCB0aGF0IHlvdXIgcGVyZiB0cmFjaW5nCisgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGlzIGNhdXNpbmcgYnVmZmVyIEkvTyBvdmVycnVucywgaXQgcHJvYmFibHkKKyAgICAgICAgICAgICAgICAgICAgbWVhbnMgdGhhdCB5b3UgYXJlbid0IHRha2luZyBlbm91Z2ggYWR2YW50YWdlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgZmlsdGVyaW5nIGVuZ2luZS4KKyAgICAgICAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1keW5hbWljLXRyYWNlcG9pbnRzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBEeW5hbWljIFRyYWNlcG9pbnRzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgcGVyZiBpc24ndCByZXN0cmljdGVkIHRvIHRoZSBmaXhlZCBzZXQgb2Ygc3RhdGljIHRyYWNlcG9pbnRzCisgICAgICAgICAgICAgICAgbGlzdGVkIGJ5ICdwZXJmIGxpc3QnLiBVc2VycyBjYW4gYWxzbyBhZGQgdGhlaXIgb3duICdkeW5hbWljJworICAgICAgICAgICAgICAgIHRyYWNlcG9pbnRzIGFueXdoZXJlIGluIHRoZSBrZXJuZWwuIEZvciBpbnN0YW5jZSwgc3VwcG9zZSB3ZQorICAgICAgICAgICAgICAgIHdhbnQgdG8gZGVmaW5lIG91ciBvd24gdHJhY2Vwb2ludCBvbiBkb19mb3JrKCkuIFdlIGNhbiBkbyB0aGF0CisgICAgICAgICAgICAgICAgdXNpbmcgdGhlICdwZXJmIHByb2JlJyBwZXJmIHN1YmNvbW1hbmQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgcHJvYmUgZG9fZm9yaworICAgICBBZGRlZCBuZXcgZXZlbnQ6CisgICAgICAgcHJvYmU6ZG9fZm9yayAgICAgICAgKG9uIGRvX2ZvcmspCisKKyAgICAgWW91IGNhbiBub3cgdXNlIGl0IGluIGFsbCBwZXJmIHRvb2xzLCBzdWNoIGFzOgorCisJICAgICBwZXJmIHJlY29yZCAtZSBwcm9iZTpkb19mb3JrIC1hUiBzbGVlcCAxCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFkZGluZyBhIG5ldyB0cmFjZXBvaW50IHZpYSAncGVyZiBwcm9iZScgcmVzdWx0cyBpbiBhbiBldmVudAorICAgICAgICAgICAgICAgIHdpdGggYWxsIHRoZSBleHBlY3RlZCBmaWxlcyBhbmQgZm9ybWF0IGluCisgICAgICAgICAgICAgICAgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMsIGp1c3QgdGhlIHNhbWUgYXMgZm9yIHN0YXRpYworICAgICAgICAgICAgICAgIHRyYWNlcG9pbnRzIChhcyBkaXNjdXNzZWQgaW4gbW9yZSBkZXRhaWwgaW4gdGhlIHRyYWNlIGV2ZW50cworICAgICAgICAgICAgICAgIHN1YnN5c3RlbSBzZWN0aW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9wcm9iZS9kb19mb3JrIyBscyAtYWwKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBPY3QgMjggMTE6NDIgLgorICAgICBkcnd4ci14ci14ICAgIDMgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE9jdCAyOCAxMTo0MiAuLgorICAgICAtcnctci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE9jdCAyOCAxMTo0MiBlbmFibGUKKyAgICAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBPY3QgMjggMTE6NDIgZmlsdGVyCisgICAgIC1yLS1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgT2N0IDI4IDExOjQyIGZvcm1hdAorICAgICAtci0tci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE9jdCAyOCAxMTo0MiBpZAorCisgICAgIHJvb3RAY3Jvd25iYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMvcHJvYmUvZG9fZm9yayMgY2F0IGZvcm1hdAorICAgICBuYW1lOiBkb19mb3JrCisgICAgIElEOiA5NDQKKyAgICAgZm9ybWF0OgorCSAgICAgZmllbGQ6dW5zaWduZWQgc2hvcnQgY29tbW9uX3R5cGU7CW9mZnNldDowOwlzaXplOjI7CXNpZ25lZDowOworCSAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fZmxhZ3M7CW9mZnNldDoyOwlzaXplOjE7CXNpZ25lZDowOworCSAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fcHJlZW1wdF9jb3VudDsJb2Zmc2V0OjM7CXNpemU6MTsJc2lnbmVkOjA7CisJICAgICBmaWVsZDppbnQgY29tbW9uX3BpZDsJb2Zmc2V0OjQ7CXNpemU6NDsJc2lnbmVkOjE7CisJICAgICBmaWVsZDppbnQgY29tbW9uX3BhZGRpbmc7CW9mZnNldDo4OwlzaXplOjQ7CXNpZ25lZDoxOworCisJICAgICBmaWVsZDp1bnNpZ25lZCBsb25nIF9fcHJvYmVfaXA7CW9mZnNldDoxMjsJc2l6ZTo0OwlzaWduZWQ6MDsKKworICAgICBwcmludCBmbXQ6ICIoJWx4KSIsIFJFQy0+X19wcm9iZV9pcAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXZSBjYW4gbGlzdCBhbGwgZHluYW1pYyB0cmFjZXBvaW50cyBjdXJyZW50bHkgaW4gZXhpc3RlbmNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHByb2JlIC1sCisgICAgICBwcm9iZTpkb19mb3JrICAgICAgICAob24gZG9fZm9yaykKKyAgICAgIHByb2JlOnNjaGVkdWxlICAgICAgIChvbiBzY2hlZHVsZSkKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTGV0J3MgcmVjb3JkIHN5c3RlbS13aWRlICgnc2xlZXAgMzAnIGlzIGEgdHJpY2sgZm9yIHJlY29yZGluZworICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIGJ1dCBiYXNpY2FsbHkgZG8gbm90aGluZyBhbmQgdGhlbiB3YWtlIHVwIGFmdGVyCisgICAgICAgICAgICAgICAgMzAgc2Vjb25kcyk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgcmVjb3JkIC1nIC1hIC1lIHByb2JlOmRvX2Zvcmsgc2xlZXAgMzAKKyAgICAgWyBwZXJmIHJlY29yZDogV29rZW4gdXAgMSB0aW1lcyB0byB3cml0ZSBkYXRhIF0KKyAgICAgWyBwZXJmIHJlY29yZDogQ2FwdHVyZWQgYW5kIHdyb3RlIDAuMDg3IE1CIHBlcmYuZGF0YSAofjM4MTIgc2FtcGxlcykgXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBVc2luZyAncGVyZiBzY3JpcHQnIHdlIGNhbiBzZWUgZWFjaCBkb19mb3JrIGV2ZW50IHRoYXQgZmlyZWQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc2NyaXB0CisKKyAgICAgIyA9PT09PT09PQorICAgICAjIGNhcHR1cmVkIG9uOiBTdW4gT2N0IDI4IDExOjU1OjE4IDIwMTIKKyAgICAgIyBob3N0bmFtZSA6IGNyb3duYmF5CisgICAgICMgb3MgcmVsZWFzZSA6IDMuNC4xMS15b2N0by1zdGFuZGFyZAorICAgICAjIHBlcmYgdmVyc2lvbiA6IDMuNC4xMQorICAgICAjIGFyY2ggOiBpNjg2CisgICAgICMgbnJjcHVzIG9ubGluZSA6IDIKKyAgICAgIyBucmNwdXMgYXZhaWwgOiAyCisgICAgICMgY3B1ZGVzYyA6IEludGVsKFIpIEF0b20oVE0pIENQVSBFNjYwIEAgMS4zMEdIegorICAgICAjIGNwdWlkIDogR2VudWluZUludGVsLDYsMzgsMQorICAgICAjIHRvdGFsIG1lbW9yeSA6IDEwMTcxODQga0IKKyAgICAgIyBjbWRsaW5lIDogL3Vzci9iaW4vcGVyZiByZWNvcmQgLWcgLWEgLWUgcHJvYmU6ZG9fZm9yayBzbGVlcCAzMAorICAgICAjIGV2ZW50IDogbmFtZSA9IHByb2JlOmRvX2ZvcmssIHR5cGUgPSAyLCBjb25maWcgPSAweDNiMCwgY29uZmlnMSA9IDB4MCwgY29uZmlnMiA9IDB4MCwgZXhjbF91c3IgPSAwLCBleGNsX2tlcm4KKyAgICAgID0gMCwgaWQgPSB7IDUsIDYgfQorICAgICAjIEhFQURFUl9DUFVfVE9QT0xPR1kgaW5mbyBhdmFpbGFibGUsIHVzZSAtSSB0byBkaXNwbGF5CisgICAgICMgPT09PT09PT0KKyAgICAgIworICAgICAgbWF0Y2hib3gtZGVza3RvICAxMTk3IFswMDFdIDM0MjExLjM3ODMxODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMjk1IFswMDFdIDM0MjExLjM4MDM4ODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICBwY21hbmZtICAxMjk2IFswMDBdIDM0MjExLjYzMjM1MDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICBwY21hbmZtICAxMjk2IFswMDBdIDM0MjExLjYzOTkxNzogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMTk3IFswMDFdIDM0MjE3LjU0MTYwMzogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMjk5IFswMDFdIDM0MjE3LjU0MzU4NDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgZ3RodW1iICAxMzAwIFswMDFdIDM0MjE3LjY5NzQ1MTogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgZ3RodW1iICAxMzAwIFswMDFdIDM0MjE5LjA4NTczNDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgZ3RodW1iICAxMzAwIFswMDBdIDM0MjE5LjEyMTM1MTogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgZ3RodW1iICAxMzAwIFswMDFdIDM0MjE5LjI2NDU1MTogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICBwY21hbmZtICAxMjk2IFswMDBdIDM0MjE5LjU5MDM4MDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMTk3IFswMDFdIDM0MjI0Ljk1NTk2NTogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMzA2IFswMDFdIDM0MjI0Ljk1Nzk3MjogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtdGVybWluICAxMzA3IFswMDBdIDM0MjI1LjAzODIxNDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtdGVybWluICAxMzA3IFswMDFdIDM0MjI1LjA0NDIxODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtdGVybWluICAxMzA3IFswMDBdIDM0MjI1LjA0NjQ0MjogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMTk3IFswMDFdIDM0MjM3LjExMjEzODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMzExIFswMDFdIDM0MjM3LjExNDEwNjogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgICBnYWt1ICAxMzEyIFswMDBdIDM0MjM3LjIwMjM4ODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBbmQgdXNpbmcgJ3BlcmYgcmVwb3J0JyBvbiB0aGUgc2FtZSBmaWxlLCB3ZSBjYW4gc2VlIHRoZQorICAgICAgICAgICAgICAgIGNhbGxncmFwaHMgZnJvbSBzdGFydGluZyBhIGZldyBwcm9ncmFtcyBkdXJpbmcgdGhvc2UgMzAgc2Vjb25kczoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtcHJvYmUtZG9fZm9yay1wcm9maWxlLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IFRoZSB0cmFjZSBldmVudHMgc3Vic3lzdGVtIGFjY29tbW9kYXRlIHN0YXRpYworICAgICAgICAgICAgICAgIGFuZCBkeW5hbWljIHRyYWNlcG9pbnRzIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IC0gdGhlcmUncyBubworICAgICAgICAgICAgICAgIGRpZmZlcmVuY2UgYXMgZmFyIGFzIHRoZSBpbmZyYXN0cnVjdHVyZSBpcyBjb25jZXJuZWQuICBTZWUgdGhlCisgICAgICAgICAgICAgICAgZnRyYWNlIHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgdHJhY2UgZXZlbnQgc3Vic3lzdGVtLgorICAgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IER5bmFtaWMgdHJhY2Vwb2ludHMgYXJlIGltcGxlbWVudGVkIHVuZGVyIHRoZQorICAgICAgICAgICAgICAgIGNvdmVycyBieSBrcHJvYmVzIGFuZCB1cHJvYmVzLiAga3Byb2JlcyBhbmQgdXByb2JlcyBhcmUgYWxzbyB1c2VkCisgICAgICAgICAgICAgICAgYnkgYW5kIGluIGZhY3QgYXJlIHRoZSBtYWluIGZvY3VzIG9mIFN5c3RlbVRhcC4KKyAgICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3BlcmYtZG9jdW1lbnRhdGlvbic+CisgICAgICAgIDx0aXRsZT5Eb2N1bWVudGF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9ubGluZSB2ZXJzaW9ucyBvZiB0aGUgbWFuIHBhZ2VzIGZvciB0aGUgY29tbWFuZHMgZGlzY3Vzc2VkIGluIHRoaXMKKyAgICAgICAgICAgIHNlY3Rpb24gY2FuIGJlIGZvdW5kIGhlcmU6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzEvcGVyZi1zdGF0Jz4ncGVyZiBzdGF0JyBtYW5wYWdlPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzEvcGVyZi1yZWNvcmQnPidwZXJmIHJlY29yZCcgbWFucGFnZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL3BlcmYtcmVwb3J0Jz4ncGVyZiByZXBvcnQnIG1hbnBhZ2U8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSA8dWxpbmsgdXJsPSdodHRwOi8vbGludXguZGllLm5ldC9tYW4vMS9wZXJmLXByb2JlJz4ncGVyZiBwcm9iZScgbWFucGFnZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL3BlcmYtc2NyaXB0Jz4ncGVyZiBzY3JpcHQnIG1hbnBhZ2U8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvY3VtZW50YXRpb24gb24gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL3BlcmYtc2NyaXB0LXB5dGhvbic+J3BlcmYgc2NyaXB0JyBweXRob24gYmluZGluZzwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHRvcC1sZXZlbAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGludXguZGllLm5ldC9tYW4vMS9wZXJmJz5wZXJmKDEpIG1hbnBhZ2U8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTm9ybWFsbHksIHlvdSBzaG91bGQgYmUgYWJsZSB0byBpbnZva2UgdGhlIG1hbiBwYWdlcyB2aWEgcGVyZgorICAgICAgICAgICAgaXRzZWxmIGUuZy4gJ3BlcmYgaGVscCcgb3IgJ3BlcmYgaGVscCByZWNvcmQnLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIb3dldmVyLCBieSBkZWZhdWx0IFlvY3RvIGRvZXNuJ3QgaW5zdGFsbCBtYW4gcGFnZXMsIGJ1dCBwZXJmCisgICAgICAgICAgICBpbnZva2VzIHRoZSBtYW4gcGFnZXMgZm9yIG1vc3QgaGVscCBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgYnVnCisgICAgICAgICAgICBhbmQgaXMgYmVpbmcgYWRkcmVzc2VkIGJ5IGEgWW9jdG8gYnVnOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzg4Jz5CdWcgMzM4OCAtIHBlcmY6IGVuYWJsZSBtYW4gcGFnZXMgZm9yIGJhc2ljICdoZWxwJyBmdW5jdGlvbmFsaXR5PC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBtYW4gcGFnZXMgaW4gdGV4dCBmb3JtLCBhbG9uZyB3aXRoIHNvbWUgb3RoZXIgZmlsZXMsIHN1Y2ggYXMKKyAgICAgICAgICAgIGEgc2V0IG9mIGV4YW1wbGVzLCBjYW4gYmUgZm91bmQgaW4gdGhlICdwZXJmJyBkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICBrZXJuZWwgdHJlZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGVyZSdzIGFsc28gYSBuaWNlIHBlcmYgdHV0b3JpYWwgb24gdGhlIHBlcmYgd2lraSB0aGF0IGdvZXMKKyAgICAgICAgICAgIGludG8gbW9yZSBkZXRhaWwgdGhhbiB3ZSBkbyBoZXJlIGluIGNlcnRhaW4gYXJlYXM6CisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3BlcmYud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9UdXRvcmlhbCc+UGVyZiBUdXRvcmlhbDwvdWxpbms+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdwcm9maWxlLW1hbnVhbC1mdHJhY2UnPgorICAgIDx0aXRsZT5mdHJhY2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgICdmdHJhY2UnIGxpdGVyYWxseSByZWZlcnMgdG8gdGhlICdmdHJhY2UgZnVuY3Rpb24gdHJhY2VyJyBidXQgaW4KKyAgICAgICAgcmVhbGl0eSB0aGlzIGVuY29tcGFzc2VzIGEgbnVtYmVyIG9mIHJlbGF0ZWQgdHJhY2VycyBhbG9uZyB3aXRoCisgICAgICAgIHRoZSBpbmZyYXN0cnVjdHVyZSB0aGF0IHRoZXkgYWxsIG1ha2UgdXNlIG9mLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdmdHJhY2Utc2V0dXAnPgorICAgICAgICA8dGl0bGU+U2V0dXA8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIHRoaXMgc2VjdGlvbiwgd2UnbGwgYXNzdW1lIHlvdSd2ZSBhbHJlYWR5IHBlcmZvcm1lZCB0aGUgYmFzaWMKKyAgICAgICAgICAgIHNldHVwIG91dGxpbmVkIGluIHRoZSBHZW5lcmFsIFNldHVwIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIGZ0cmFjZSwgdHJhY2UtY21kLCBhbmQga2VybmVsc2hhcmsgcnVuIG9uIHRoZSB0YXJnZXQgc3lzdGVtLAorICAgICAgICAgICAgYW5kIGFyZSByZWFkeSB0byBnbyBvdXQtb2YtdGhlLWJveCAtIG5vIGFkZGl0aW9uYWwgc2V0dXAgaXMKKyAgICAgICAgICAgIG5lY2Vzc2FyeS4gRm9yIHRoZSByZXN0IG9mIHRoaXMgc2VjdGlvbiB3ZSBhc3N1bWUgeW91J3ZlIHNzaCdlZAorICAgICAgICAgICAgdG8gdGhlIGhvc3QgYW5kIHdpbGwgYmUgcnVubmluZyBmdHJhY2Ugb24gdGhlIHRhcmdldC4ga2VybmVsc2hhcmsKKyAgICAgICAgICAgIGlzIGEgR1VJIGFwcGxpY2F0aW9uIGFuZCBpZiB5b3UgdXNlIHRoZSAnLVgnIG9wdGlvbiB0byBzc2ggeW91CisgICAgICAgICAgICBjYW4gaGF2ZSB0aGUga2VybmVsc2hhcmsgR1VJIHJ1biBvbiB0aGUgdGFyZ2V0IGJ1dCBkaXNwbGF5CisgICAgICAgICAgICByZW1vdGVseSBvbiB0aGUgaG9zdCBpZiB5b3Ugd2FudC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdiYXNpYy1mdHJhY2UtdXNhZ2UnPgorICAgICAgICA8dGl0bGU+QmFzaWMgZnRyYWNlIHVzYWdlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICdmdHJhY2UnIGVzc2VudGlhbGx5IHJlZmVycyB0byBldmVyeXRoaW5nIGluY2x1ZGVkIGluCisgICAgICAgICAgICB0aGUgL3RyYWNpbmcgZGlyZWN0b3J5IG9mIHRoZSBtb3VudGVkIGRlYnVnZnMgZmlsZXN5c3RlbQorICAgICAgICAgICAgKFlvY3RvIGZvbGxvd3MgdGhlIHN0YW5kYXJkIGNvbnZlbnRpb24gYW5kIG1vdW50cyBpdAorICAgICAgICAgICAgYXQgL3N5cy9rZXJuZWwvZGVidWcpLiBIZXJlJ3MgYSBsaXN0aW5nIG9mIGFsbCB0aGUgZmlsZXMKKyAgICAgICAgICAgIGZvdW5kIGluIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcgb24gYSBZb2N0byBzeXN0ZW06CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAc3VnYXJiYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyMgbHMKKyAgICAgUkVBRE1FICAgICAgICAgICAgICAgICAgICAgIGtwcm9iZV9ldmVudHMgICAgICAgICAgICAgICB0cmFjZQorICAgICBhdmFpbGFibGVfZXZlbnRzICAgICAgICAgICAga3Byb2JlX3Byb2ZpbGUgICAgICAgICAgICAgIHRyYWNlX2Nsb2NrCisgICAgIGF2YWlsYWJsZV9maWx0ZXJfZnVuY3Rpb25zICBvcHRpb25zICAgICAgICAgICAgICAgICAgICAgdHJhY2VfbWFya2VyCisgICAgIGF2YWlsYWJsZV90cmFjZXJzICAgICAgICAgICBwZXJfY3B1ICAgICAgICAgICAgICAgICAgICAgdHJhY2Vfb3B0aW9ucworICAgICBidWZmZXJfc2l6ZV9rYiAgICAgICAgICAgICAgcHJpbnRrX2Zvcm1hdHMgICAgICAgICAgICAgIHRyYWNlX3BpcGUKKyAgICAgYnVmZmVyX3RvdGFsX3NpemVfa2IgICAgICAgIHNhdmVkX2NtZGxpbmVzICAgICAgICAgICAgICB0cmFjaW5nX2NwdW1hc2sKKyAgICAgY3VycmVudF90cmFjZXIgICAgICAgICAgICAgIHNldF9ldmVudCAgICAgICAgICAgICAgICAgICB0cmFjaW5nX2VuYWJsZWQKKyAgICAgZHluX2Z0cmFjZV90b3RhbF9pbmZvICAgICAgIHNldF9mdHJhY2VfZmlsdGVyICAgICAgICAgICB0cmFjaW5nX29uCisgICAgIGVuYWJsZWRfZnVuY3Rpb25zICAgICAgICAgICBzZXRfZnRyYWNlX25vdHJhY2UgICAgICAgICAgdHJhY2luZ190aHJlc2gKKyAgICAgZXZlbnRzICAgICAgICAgICAgICAgICAgICAgIHNldF9mdHJhY2VfcGlkCisgICAgIGZyZWVfYnVmZmVyICAgICAgICAgICAgICAgICBzZXRfZ3JhcGhfZnVuY3Rpb24KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBmaWxlcyBsaXN0ZWQgYWJvdmUgYXJlIHVzZWQgZm9yIHZhcmlvdXMgcHVycG9zZXMgLQorICAgICAgICAgICAgc29tZSByZWxhdGUgZGlyZWN0bHkgdG8gdGhlIHRyYWNlcnMgdGhlbXNlbHZlcywgb3RoZXJzIGFyZQorICAgICAgICAgICAgdXNlZCB0byBzZXQgdHJhY2luZyBvcHRpb25zLCBhbmQgeWV0IG90aGVycyBhY3R1YWxseSBjb250YWluCisgICAgICAgICAgICB0aGUgdHJhY2luZyBvdXRwdXQgd2hlbiBhIHRyYWNlciBpcyBpbiBlZmZlY3QuIFNvbWUgb2YgdGhlCisgICAgICAgICAgICBmdW5jdGlvbnMgY2FuIGJlIGd1ZXNzZWQgZnJvbSB0aGVpciBuYW1lcywgb3RoZXJzIG5lZWQKKyAgICAgICAgICAgIGV4cGxhbmF0aW9uOyBpbiBhbnkgY2FzZSwgd2UnbGwgY292ZXIgc29tZSBvZiB0aGUgZmlsZXMgd2UKKyAgICAgICAgICAgIHNlZSBoZXJlIGJlbG93IGJ1dCBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIG90aGVycywgcGxlYXNlCisgICAgICAgICAgICBzZWUgdGhlIGZ0cmFjZSBkb2N1bWVudGF0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXZSdsbCBzdGFydCBieSBsb29raW5nIGF0IHNvbWUgb2YgdGhlIGF2YWlsYWJsZSBidWlsdC1pbgorICAgICAgICAgICAgdHJhY2Vycy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgY2F0J2luZyB0aGUgJ2F2YWlsYWJsZV90cmFjZXJzJyBmaWxlIGxpc3RzIHRoZSBzZXQgb2YKKyAgICAgICAgICAgIGF2YWlsYWJsZSB0cmFjZXJzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcjIGNhdCBhdmFpbGFibGVfdHJhY2VycworICAgICBibGsgZnVuY3Rpb25fZ3JhcGggZnVuY3Rpb24gbm9wCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgJ2N1cnJlbnRfdHJhY2VyJyBmaWxlIGNvbnRhaW5zIHRoZSB0cmFjZXIgY3VycmVudGx5IGluCisgICAgICAgICAgICBlZmZlY3Q6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAc3VnYXJiYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyMgY2F0IGN1cnJlbnRfdHJhY2VyCisgICAgIG5vcAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGFib3ZlIGxpc3Rpbmcgb2YgY3VycmVudF90cmFjZXIgc2hvd3MgdGhhdAorICAgICAgICAgICAgdGhlICdub3AnIHRyYWNlciBpcyBpbiBlZmZlY3QsIHdoaWNoIGlzIGp1c3QgYW5vdGhlcgorICAgICAgICAgICAgd2F5IG9mIHNheWluZyB0aGF0IHRoZXJlJ3MgYWN0dWFsbHkgbm8gdHJhY2VyCisgICAgICAgICAgICBjdXJyZW50bHkgaW4gZWZmZWN0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBlY2hvJ2luZyBvbmUgb2YgdGhlIGF2YWlsYWJsZV90cmFjZXJzIGludG8gY3VycmVudF90cmFjZXIKKyAgICAgICAgICAgIG1ha2VzIHRoZSBzcGVjaWZpZWQgdHJhY2VyIHRoZSBjdXJyZW50IHRyYWNlcjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIGZ1bmN0aW9uID4gY3VycmVudF90cmFjZXIKKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjYXQgY3VycmVudF90cmFjZXIKKyAgICAgZnVuY3Rpb24KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBhYm92ZSBzZXRzIHRoZSBjdXJyZW50IHRyYWNlciB0byBiZSB0aGUKKyAgICAgICAgICAgICdmdW5jdGlvbiB0cmFjZXInLiBUaGlzIHRyYWNlciB0cmFjZXMgZXZlcnkgZnVuY3Rpb24KKyAgICAgICAgICAgIGNhbGwgaW4gdGhlIGtlcm5lbCBhbmQgbWFrZXMgaXQgYXZhaWxhYmxlIGFzIHRoZQorICAgICAgICAgICAgY29udGVudHMgb2YgdGhlICd0cmFjZScgZmlsZS4gUmVhZGluZyB0aGUgJ3RyYWNlJyBmaWxlCisgICAgICAgICAgICBsaXN0cyB0aGUgY3VycmVudGx5IGJ1ZmZlcmVkIGZ1bmN0aW9uIGNhbGxzIHRoYXQgaGF2ZSBiZWVuCisgICAgICAgICAgICB0cmFjZWQgYnkgdGhlIGZ1bmN0aW9uIHRyYWNlcjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjYXQgdHJhY2UgfCBsZXNzCisKKyAgICAgIyB0cmFjZXI6IGZ1bmN0aW9uCisgICAgICMKKyAgICAgIyBlbnRyaWVzLWluLWJ1ZmZlci9lbnRyaWVzLXdyaXR0ZW46IDMxMDYyOS83NjY0NzEgICAjUDo4CisgICAgICMKKyAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8tLS0tLT0mZ3Q7IGlycXMtb2ZmCisgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gXy0tLS09Jmd0OyBuZWVkLXJlc2NoZWQKKyAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC8gXy0tLT0mZ3Q7IGhhcmRpcnEvc29mdGlycQorICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IC8gXy0tPSZndDsgcHJlZW1wdC1kZXB0aAorICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8fCAvICAgICBkZWxheQorICAgICAjICAgICAgICAgICBUQVNLLVBJRCAgIENQVSMgIHx8fHwgICAgVElNRVNUQU1QICBGVU5DVElPTgorICAgICAjICAgICAgICAgICAgICB8IHwgICAgICAgfCAgIHx8fHwgICAgICAgfCAgICAgICAgIHwKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTY5OiBrdGltZV9nZXRfcmVhbCAmbHQ7LWludGVsX2lkbGUKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTcwOiBnZXRuc3RpbWVvZmRheSAmbHQ7LWt0aW1lX2dldF9yZWFsCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLi4xICAgNDcwLjg2NzE3MTogbnNfdG9fdGltZXZhbCAmbHQ7LWludGVsX2lkbGUKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTcxOiBuc190b190aW1lc3BlYyAmbHQ7LW5zX3RvX3RpbWV2YWwKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTcyOiBzbXBfYXBpY190aW1lcl9pbnRlcnJ1cHQgJmx0Oy1hcGljX3RpbWVyX2ludGVycnVwdAorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC4uMSAgIDQ3MC44NjcxNzI6IG5hdGl2ZV9hcGljX21lbV93cml0ZSAmbHQ7LXNtcF9hcGljX3RpbWVyX2ludGVycnVwdAorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC4uMSAgIDQ3MC44NjcxNzI6IGlycV9lbnRlciAmbHQ7LXNtcF9hcGljX3RpbWVyX2ludGVycnVwdAorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC4uMSAgIDQ3MC44NjcxNzI6IHJjdV9pcnFfZW50ZXIgJmx0Oy1pcnFfZW50ZXIKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTczOiByY3VfaWRsZV9leGl0X2NvbW1vbi5pc3JhLjMzICZsdDstcmN1X2lycV9lbnRlcgorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC4uMSAgIDQ3MC44NjcxNzM6IGxvY2FsX2JoX2Rpc2FibGUgJmx0Oy1pcnFfZW50ZXIKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTczOiBhZGRfcHJlZW1wdF9jb3VudCAmbHQ7LWxvY2FsX2JoX2Rpc2FibGUKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuczEgICA0NzAuODY3MTc0OiB0aWNrX2NoZWNrX2lkbGUgJmx0Oy1pcnFfZW50ZXIKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuczEgICA0NzAuODY3MTc0OiB0aWNrX2NoZWNrX29uZXNob3RfYnJvYWRjYXN0ICZsdDstdGlja19jaGVja19pZGxlCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLnMxICAgNDcwLjg2NzE3NDoga3RpbWVfZ2V0ICZsdDstdGlja19jaGVja19pZGxlCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLnMxICAgNDcwLjg2NzE3NDogdGlja19ub2h6X3N0b3BfaWRsZSAmbHQ7LXRpY2tfY2hlY2tfaWRsZQorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMSAgIDQ3MC44NjcxNzU6IHVwZGF0ZV90c190aW1lX3N0YXRzICZsdDstdGlja19ub2h6X3N0b3BfaWRsZQorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMSAgIDQ3MC44NjcxNzU6IG5yX2lvd2FpdF9jcHUgJmx0Oy11cGRhdGVfdHNfdGltZV9zdGF0cworICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMSAgIDQ3MC44NjcxNzU6IHRpY2tfZG9fdXBkYXRlX2ppZmZpZXM2NCAmbHQ7LXRpY2tfY2hlY2tfaWRsZQorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMSAgIDQ3MC44NjcxNzU6IF9yYXdfc3Bpbl9sb2NrICZsdDstdGlja19kb191cGRhdGVfamlmZmllczY0CisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLnMxICAgNDcwLjg2NzE3NjogYWRkX3ByZWVtcHRfY291bnQgJmx0Oy1fcmF3X3NwaW5fbG9jaworICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMiAgIDQ3MC44NjcxNzY6IGRvX3RpbWVyICZsdDstdGlja19kb191cGRhdGVfamlmZmllczY0CisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLnMyICAgNDcwLjg2NzE3NjogX3Jhd19zcGluX2xvY2sgJmx0Oy1kb190aW1lcgorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMiAgIDQ3MC44NjcxNzY6IGFkZF9wcmVlbXB0X2NvdW50ICZsdDstX3Jhd19zcGluX2xvY2sKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuczMgICA0NzAuODY3MTc3OiBudHBfdGlja19sZW5ndGggJmx0Oy1kb190aW1lcgorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMyAgIDQ3MC44NjcxNzc6IF9yYXdfc3Bpbl9sb2NrX2lycXNhdmUgJmx0Oy1udHBfdGlja19sZW5ndGgKKyAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEVhY2ggbGluZSBpbiB0aGUgdHJhY2UgYWJvdmUgc2hvd3Mgd2hhdCB3YXMgaGFwcGVuaW5nIGluCisgICAgICAgICAgICB0aGUga2VybmVsIG9uIGEgZ2l2ZW4gY3B1LCB0byB0aGUgbGV2ZWwgb2YgZGV0YWlsIG9mCisgICAgICAgICAgICBmdW5jdGlvbiBjYWxscy4gRWFjaCBlbnRyeSBzaG93cyB0aGUgZnVuY3Rpb24gY2FsbGVkLAorICAgICAgICAgICAgZm9sbG93ZWQgYnkgaXRzIGNhbGxlciAoYWZ0ZXIgdGhlIGFycm93KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHRyYWNlciBnaXZlcyB5b3UgYW4gZXh0cmVtZWx5IGRldGFpbGVkIGlkZWEKKyAgICAgICAgICAgIG9mIHdoYXQgdGhlIGtlcm5lbCB3YXMgZG9pbmcgYXQgdGhlIHBvaW50IGluIHRpbWUgdGhlIHRyYWNlCisgICAgICAgICAgICB3YXMgdGFrZW4sIGFuZCBpcyBhIGdyZWF0IHdheSB0byBsZWFybiBhYm91dCBob3cgdGhlIGtlcm5lbAorICAgICAgICAgICAgY29kZSB3b3JrcyBpbiBhIGR5bmFtaWMgc2Vuc2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IFRoZSBmdHJhY2UgZnVuY3Rpb24gdHJhY2VyIGlzIGFsc28KKyAgICAgICAgICAgIGF2YWlsYWJsZSBmcm9tIHdpdGhpbiBwZXJmLCBhcyB0aGUgZnRyYWNlOmZ1bmN0aW9uIHRyYWNlcG9pbnQuCisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgYSBsaXR0bGUgbW9yZSBkaWZmaWN1bHQgdG8gZm9sbG93IHRoZSBjYWxsIGNoYWlucyB0aGFuCisgICAgICAgICAgICBpdCBuZWVkcyB0byBiZSAtIGx1Y2tpbHkgdGhlcmUncyBhIHZhcmlhbnQgb2YgdGhlIGZ1bmN0aW9uCisgICAgICAgICAgICB0cmFjZXIgdGhhdCBkaXNwbGF5cyB0aGUgY2FsbGNoYWlucyBleHBsaWNpdGx5LCBjYWxsZWQgdGhlCisgICAgICAgICAgICAnZnVuY3Rpb25fZ3JhcGgnIHRyYWNlcjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIGZ1bmN0aW9uX2dyYXBoICZndDsgY3VycmVudF90cmFjZXIKKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjYXQgdHJhY2UgfCBsZXNzCisKKyAgICAgIHRyYWNlcjogZnVuY3Rpb25fZ3JhcGgKKworICAgICAgQ1BVICBEVVJBVElPTiAgICAgICAgICAgICAgICAgIEZVTkNUSU9OIENBTExTCisgICAgICB8ICAgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwKKyAgICAgNykgICAwLjA0NiB1cyAgICB8ICAgICAgcGlja19uZXh0X3Rhc2tfZmFpcigpOworICAgICA3KSAgIDAuMDQzIHVzICAgIHwgICAgICBwaWNrX25leHRfdGFza19zdG9wKCk7CisgICAgIDcpICAgMC4wNDIgdXMgICAgfCAgICAgIHBpY2tfbmV4dF90YXNrX3J0KCk7CisgICAgIDcpICAgMC4wMzIgdXMgICAgfCAgICAgIHBpY2tfbmV4dF90YXNrX2ZhaXIoKTsKKyAgICAgNykgICAwLjAzMCB1cyAgICB8ICAgICAgcGlja19uZXh0X3Rhc2tfaWRsZSgpOworICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICBfcmF3X3NwaW5fdW5sb2NrX2lycSgpIHsKKyAgICAgNykgICAwLjAzMyB1cyAgICB8ICAgICAgICBzdWJfcHJlZW1wdF9jb3VudCgpOworICAgICA3KSAgIDAuMjU4IHVzICAgIHwgICAgICB9CisgICAgIDcpICAgMC4wMzIgdXMgICAgfCAgICAgIHN1Yl9wcmVlbXB0X2NvdW50KCk7CisgICAgIDcpICsgMTMuMzQxIHVzICAgfCAgICB9IC8qIF9fc2NoZWR1bGUgKi8KKyAgICAgNykgICAwLjA5NSB1cyAgICB8ICB9IC8qIHN1Yl9wcmVlbXB0X2NvdW50ICovCisgICAgIDcpICAgICAgICAgICAgICAgfCAgc2NoZWR1bGUoKSB7CisgICAgIDcpICAgICAgICAgICAgICAgfCAgICBfX3NjaGVkdWxlKCkgeworICAgICA3KSAgIDAuMDYwIHVzICAgIHwgICAgICBhZGRfcHJlZW1wdF9jb3VudCgpOworICAgICA3KSAgIDAuMDQ0IHVzICAgIHwgICAgICByY3Vfbm90ZV9jb250ZXh0X3N3aXRjaCgpOworICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICBfcmF3X3NwaW5fbG9ja19pcnEoKSB7CisgICAgIDcpICAgMC4wMzMgdXMgICAgfCAgICAgICAgYWRkX3ByZWVtcHRfY291bnQoKTsKKyAgICAgNykgICAwLjI0NyB1cyAgICB8ICAgICAgfQorICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICBpZGxlX2JhbGFuY2UoKSB7CisgICAgIDcpICAgICAgICAgICAgICAgfCAgICAgICAgX3Jhd19zcGluX3VubG9jaygpIHsKKyAgICAgNykgICAwLjAzMSB1cyAgICB8ICAgICAgICAgIHN1Yl9wcmVlbXB0X2NvdW50KCk7CisgICAgIDcpICAgMC4yNDYgdXMgICAgfCAgICAgICAgfQorICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICAgIHVwZGF0ZV9zaGFyZXMoKSB7CisgICAgIDcpICAgMC4wMzAgdXMgICAgfCAgICAgICAgICBfX3JjdV9yZWFkX2xvY2soKTsKKyAgICAgNykgICAwLjAyOSB1cyAgICB8ICAgICAgICAgIF9fcmN1X3JlYWRfdW5sb2NrKCk7CisgICAgIDcpICAgMC40ODQgdXMgICAgfCAgICAgICAgfQorICAgICA3KSAgIDAuMDMwIHVzICAgIHwgICAgICAgIF9fcmN1X3JlYWRfbG9jaygpOworICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICAgIGxvYWRfYmFsYW5jZSgpIHsKKyAgICAgNykgICAgICAgICAgICAgICB8ICAgICAgICAgIGZpbmRfYnVzaWVzdF9ncm91cCgpIHsKKyAgICAgNykgICAwLjAzMSB1cyAgICB8ICAgICAgICAgICAgaWRsZV9jcHUoKTsKKyAgICAgNykgICAwLjAyOSB1cyAgICB8ICAgICAgICAgICAgaWRsZV9jcHUoKTsKKyAgICAgNykgICAwLjAzNSB1cyAgICB8ICAgICAgICAgICAgaWRsZV9jcHUoKTsKKyAgICAgNykgICAwLjkwNiB1cyAgICB8ICAgICAgICAgIH0KKyAgICAgNykgICAxLjE0MSB1cyAgICB8ICAgICAgICB9CisgICAgIDcpICAgMC4wMjIgdXMgICAgfCAgICAgICAgbXNlY3NfdG9famlmZmllcygpOworICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICAgIGxvYWRfYmFsYW5jZSgpIHsKKyAgICAgNykgICAgICAgICAgICAgICB8ICAgICAgICAgIGZpbmRfYnVzaWVzdF9ncm91cCgpIHsKKyAgICAgNykgICAwLjAzMSB1cyAgICB8ICAgICAgICAgICAgaWRsZV9jcHUoKTsKKyAgICAgLgorICAgICAuCisgICAgIC4KKyAgICAgNCkgICAwLjA2MiB1cyAgICB8ICAgICAgICBtc2Vjc190b19qaWZmaWVzKCk7CisgICAgIDQpICAgMC4wNjIgdXMgICAgfCAgICAgICAgX19yY3VfcmVhZF91bmxvY2soKTsKKyAgICAgNCkgICAgICAgICAgICAgICB8ICAgICAgICBfcmF3X3NwaW5fbG9jaygpIHsKKyAgICAgNCkgICAwLjA3MyB1cyAgICB8ICAgICAgICAgIGFkZF9wcmVlbXB0X2NvdW50KCk7CisgICAgIDQpICAgMC41NjIgdXMgICAgfCAgICAgICAgfQorICAgICA0KSArIDE3LjQ1MiB1cyAgIHwgICAgICB9CisgICAgIDQpICAgMC4xMDggdXMgICAgfCAgICAgIHB1dF9wcmV2X3Rhc2tfZmFpcigpOworICAgICA0KSAgIDAuMTAyIHVzICAgIHwgICAgICBwaWNrX25leHRfdGFza19mYWlyKCk7CisgICAgIDQpICAgMC4wODQgdXMgICAgfCAgICAgIHBpY2tfbmV4dF90YXNrX3N0b3AoKTsKKyAgICAgNCkgICAwLjA3NSB1cyAgICB8ICAgICAgcGlja19uZXh0X3Rhc2tfcnQoKTsKKyAgICAgNCkgICAwLjA2MiB1cyAgICB8ICAgICAgcGlja19uZXh0X3Rhc2tfZmFpcigpOworICAgICA0KSAgIDAuMDY2IHVzICAgIHwgICAgICBwaWNrX25leHRfdGFza19pZGxlKCk7CisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICA0KSAgIGt3b3JrZXItNzQgICA9Jmd0OyAgICAmbHQ7aWRsZSZndDstMAorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICA0KSAgICAgICAgICAgICAgIHwgICAgICBmaW5pc2hfdGFza19zd2l0Y2goKSB7CisgICAgIDQpICAgICAgICAgICAgICAgfCAgICAgICAgX3Jhd19zcGluX3VubG9ja19pcnEoKSB7CisgICAgIDQpICAgMC4xMDAgdXMgICAgfCAgICAgICAgICBzdWJfcHJlZW1wdF9jb3VudCgpOworICAgICA0KSAgIDAuNTgyIHVzICAgIHwgICAgICAgIH0KKyAgICAgNCkgICAxLjEwNSB1cyAgICB8ICAgICAgfQorICAgICA0KSAgIDAuMDg4IHVzICAgIHwgICAgICBzdWJfcHJlZW1wdF9jb3VudCgpOworICAgICA0KSAhIDEwMC4wNjYgdXMgIHwgICAgfQorICAgICAuCisgICAgIC4KKyAgICAgLgorICAgICAzKSAgICAgICAgICAgICAgIHwgIHN5c19pb2N0bCgpIHsKKyAgICAgMykgICAwLjA4MyB1cyAgICB8ICAgIGZnZXRfbGlnaHQoKTsKKyAgICAgMykgICAgICAgICAgICAgICB8ICAgIHNlY3VyaXR5X2ZpbGVfaW9jdGwoKSB7CisgICAgIDMpICAgMC4wNjYgdXMgICAgfCAgICAgIGNhcF9maWxlX2lvY3RsKCk7CisgICAgIDMpICAgMC41NjIgdXMgICAgfCAgICB9CisgICAgIDMpICAgICAgICAgICAgICAgfCAgICBkb192ZnNfaW9jdGwoKSB7CisgICAgIDMpICAgICAgICAgICAgICAgfCAgICAgIGRybV9pb2N0bCgpIHsKKyAgICAgMykgICAwLjA3NSB1cyAgICB8ICAgICAgICBkcm1fdXRfZGVidWdfcHJpbnRrKCk7CisgICAgIDMpICAgICAgICAgICAgICAgfCAgICAgICAgaTkxNV9nZW1fcHdyaXRlX2lvY3RsKCkgeworICAgICAzKSAgICAgICAgICAgICAgIHwgICAgICAgICAgaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoKSB7CisgICAgIDMpICAgMC4wNzAgdXMgICAgfCAgICAgICAgICAgIG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgpOworICAgICAzKSAgIDAuNTcwIHVzICAgIHwgICAgICAgICAgfQorICAgICAzKSAgICAgICAgICAgICAgIHwgICAgICAgICAgZHJtX2dlbV9vYmplY3RfbG9va3VwKCkgeworICAgICAzKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICBfcmF3X3NwaW5fbG9jaygpIHsKKyAgICAgMykgICAwLjA4MCB1cyAgICB8ICAgICAgICAgICAgICBhZGRfcHJlZW1wdF9jb3VudCgpOworICAgICAzKSAgIDAuNjIwIHVzICAgIHwgICAgICAgICAgICB9CisgICAgIDMpICAgICAgICAgICAgICAgfCAgICAgICAgICAgIF9yYXdfc3Bpbl91bmxvY2soKSB7CisgICAgIDMpICAgMC4wODUgdXMgICAgfCAgICAgICAgICAgICAgc3ViX3ByZWVtcHRfY291bnQoKTsKKyAgICAgMykgICAwLjU2MiB1cyAgICB8ICAgICAgICAgICAgfQorICAgICAzKSAgIDIuMTQ5IHVzICAgIHwgICAgICAgICAgfQorICAgICAzKSAgIDAuMTMzIHVzICAgIHwgICAgICAgICAgaTkxNV9nZW1fb2JqZWN0X3BpbigpOworICAgICAzKSAgICAgICAgICAgICAgIHwgICAgICAgICAgaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKCkgeworICAgICAzKSAgIDAuMDY1IHVzICAgIHwgICAgICAgICAgICBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3B1X3dyaXRlX2RvbWFpbigpOworICAgICAzKSAgIDAuMDY1IHVzICAgIHwgICAgICAgICAgICBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcoKTsKKyAgICAgMykgICAwLjA2MiB1cyAgICB8ICAgICAgICAgICAgaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2NwdV93cml0ZV9kb21haW4oKTsKKyAgICAgMykgICAxLjYxMiB1cyAgICB8ICAgICAgICAgIH0KKyAgICAgMykgICAgICAgICAgICAgICB8ICAgICAgICAgIGk5MTVfZ2VtX29iamVjdF9wdXRfZmVuY2UoKSB7CisgICAgIDMpICAgMC4wOTcgdXMgICAgfCAgICAgICAgICAgIGk5MTVfZ2VtX29iamVjdF9mbHVzaF9mZW5jZS5jb25zdHByb3AuMzYoKTsKKyAgICAgMykgICAwLjY0NSB1cyAgICB8ICAgICAgICAgIH0KKyAgICAgMykgICAwLjA3MCB1cyAgICB8ICAgICAgICAgIGFkZF9wcmVlbXB0X2NvdW50KCk7CisgICAgIDMpICAgMC4wNzAgdXMgICAgfCAgICAgICAgICBzdWJfcHJlZW1wdF9jb3VudCgpOworICAgICAzKSAgIDAuMDczIHVzICAgIHwgICAgICAgICAgaTkxNV9nZW1fb2JqZWN0X3VucGluKCk7CisgICAgIDMpICAgMC4wNjggdXMgICAgfCAgICAgICAgICBtdXRleF91bmxvY2soKTsKKyAgICAgMykgICA5LjkyNCB1cyAgICB8ICAgICAgICB9CisgICAgIDMpICsgMTEuMjM2IHVzICAgfCAgICAgIH0KKyAgICAgMykgKyAxMS43NzAgdXMgICB8ICAgIH0KKyAgICAgMykgKyAxMy43ODQgdXMgICB8ICB9CisgICAgIDMpICAgICAgICAgICAgICAgfCAgc3lzX2lvY3RsKCkgeworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgQXMgeW91IGNhbiBzZWUsIHRoZSBmdW5jdGlvbl9ncmFwaCBkaXNwbGF5IGlzIG11Y2ggZWFzaWVyIHRvCisgICAgICAgICAgICBmb2xsb3cuIEFsc28gbm90ZSB0aGF0IGluIGFkZGl0aW9uIHRvIHRoZSBmdW5jdGlvbiBjYWxscyBhbmQKKyAgICAgICAgICAgIGFzc29jaWF0ZWQgYnJhY2VzLCBvdGhlciBldmVudHMgc3VjaCBhcyBzY2hlZHVsZXIgZXZlbnRzCisgICAgICAgICAgICBhcmUgZGlzcGxheWVkIGluIGNvbnRleHQuIEluIGZhY3QsIHlvdSBjYW4gZnJlZWx5IGluY2x1ZGUKKyAgICAgICAgICAgIGFueSB0cmFjZXBvaW50IGF2YWlsYWJsZSBpbiB0aGUgdHJhY2UgZXZlbnRzIHN1YnN5c3RlbSBkZXNjcmliZWQKKyAgICAgICAgICAgIGluIHRoZSBuZXh0IHNlY3Rpb24gYnkgc2ltcGx5IGVuYWJsaW5nIHRob3NlIGV2ZW50cywgYW5kIHRoZXknbGwKKyAgICAgICAgICAgIGFwcGVhciBpbiBjb250ZXh0IGluIHRoZSBmdW5jdGlvbiBncmFwaCBkaXNwbGF5LiBRdWl0ZSBhCisgICAgICAgICAgICBwb3dlcmZ1bCB0b29sIGZvciB1bmRlcnN0YW5kaW5nIGtlcm5lbCBkeW5hbWljcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWxzbyBub3RpY2UgdGhhdCB0aGVyZSBhcmUgdmFyaW91cyBhbm5vdGF0aW9ucyBvbiB0aGUgbGVmdAorICAgICAgICAgICAgaGFuZCBzaWRlIG9mIHRoZSBkaXNwbGF5LiBGb3IgZXhhbXBsZSBpZiB0aGUgdG90YWwgdGltZSBpdAorICAgICAgICAgICAgdG9vayBmb3IgYSBnaXZlbiBmdW5jdGlvbiB0byBleGVjdXRlIGlzIGFib3ZlIGEgY2VydGFpbgorICAgICAgICAgICAgdGhyZXNob2xkLCBhbiBleGNsYW1hdGlvbiBwb2ludCBvciBwbHVzIHNpZ24gYXBwZWFycyBvbiB0aGUKKyAgICAgICAgICAgIGxlZnQgaGFuZCBzaWRlLiBQbGVhc2Ugc2VlIHRoZSBmdHJhY2UgZG9jdW1lbnRhdGlvbiBmb3IKKyAgICAgICAgICAgIGRldGFpbHMgb24gYWxsIHRoZXNlIGZpZWxkcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd0aGUtdHJhY2UtZXZlbnRzLXN1YnN5c3RlbSc+CisgICAgICAgIDx0aXRsZT5UaGUgJ3RyYWNlIGV2ZW50cycgU3Vic3lzdGVtPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9uZSBlc3BlY2lhbGx5IGltcG9ydGFudCBkaXJlY3RvcnkgY29udGFpbmVkIHdpdGhpbgorICAgICAgICAgICAgdGhlIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcgZGlyZWN0b3J5IGlzIHRoZSAnZXZlbnRzJworICAgICAgICAgICAgc3ViZGlyZWN0b3J5LCB3aGljaCBjb250YWlucyByZXByZXNlbnRhdGlvbnMgb2YgZXZlcnkKKyAgICAgICAgICAgIHRyYWNlcG9pbnQgaW4gdGhlIHN5c3RlbS4gTGlzdGluZyBvdXQgdGhlIGNvbnRlbnRzIG9mCisgICAgICAgICAgICB0aGUgJ2V2ZW50cycgc3ViZGlyZWN0b3J5LCB3ZSBzZWUgbWFpbmx5IGFub3RoZXIgc2V0IG9mCisgICAgICAgICAgICBzdWJkaXJlY3RvcmllczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjZCBldmVudHMKKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cyMgbHMgLWFsCisgICAgIGRyd3hyLXhyLXggICAzOCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IC4KKyAgICAgZHJ3eHIteHIteCAgICA1IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgLi4KKyAgICAgZHJ3eHIteHIteCAgIDE5IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgYmxvY2sKKyAgICAgZHJ3eHIteHIteCAgIDMyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgYnRyZnMKKyAgICAgZHJ3eHIteHIteCAgICA1IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgZHJtCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGVuYWJsZQorICAgICBkcnd4ci14ci14ICAgNDAgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBleHQzCisgICAgIGRyd3hyLXhyLXggICA3OSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGV4dDQKKyAgICAgZHJ3eHIteHIteCAgIDE0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgZnRyYWNlCisgICAgIGRyd3hyLXhyLXggICAgOCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGhkYQorICAgICAtci0tci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBoZWFkZXJfZXZlbnQKKyAgICAgLXItLXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgaGVhZGVyX3BhZ2UKKyAgICAgZHJ3eHIteHIteCAgIDI1IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgaTkxNQorICAgICBkcnd4ci14ci14ICAgIDcgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBpcnEKKyAgICAgZHJ3eHIteHIteCAgIDEyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgamJkCisgICAgIGRyd3hyLXhyLXggICAxNCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGpiZDIKKyAgICAgZHJ3eHIteHIteCAgIDE0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga21lbQorICAgICBkcnd4ci14ci14ICAgIDcgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBtb2R1bGUKKyAgICAgZHJ3eHIteHIteCAgICAzIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgbmFwaQorICAgICBkcnd4ci14ci14ICAgIDYgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBuZXQKKyAgICAgZHJ3eHIteHIteCAgICAzIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgb29tCisgICAgIGRyd3hyLXhyLXggICAxMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHBvd2VyCisgICAgIGRyd3hyLXhyLXggICAgMyByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHByaW50aworICAgICBkcnd4ci14ci14ICAgIDggcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSByYW5kb20KKyAgICAgZHJ3eHIteHIteCAgICA0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgcmF3X3N5c2NhbGxzCisgICAgIGRyd3hyLXhyLXggICAgMyByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHJjdQorICAgICBkcnd4ci14ci14ICAgIDYgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBycG0KKyAgICAgZHJ3eHIteHIteCAgIDIwIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgc2NoZWQKKyAgICAgZHJ3eHIteHIteCAgICA3IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgc2NzaQorICAgICBkcnd4ci14ci14ICAgIDQgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBzaWduYWwKKyAgICAgZHJ3eHIteHIteCAgICA1IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgc2tiCisgICAgIGRyd3hyLXhyLXggICAgNCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHNvY2sKKyAgICAgZHJ3eHIteHIteCAgIDEwIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgc3VucnBjCisgICAgIGRyd3hyLXhyLXggIDUzOCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHN5c2NhbGxzCisgICAgIGRyd3hyLXhyLXggICAgNCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHRhc2sKKyAgICAgZHJ3eHIteHIteCAgIDE0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgdGltZXIKKyAgICAgZHJ3eHIteHIteCAgICAzIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgdWRwCisgICAgIGRyd3hyLXhyLXggICAyMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHZtc2NhbgorICAgICBkcnd4ci14ci14ICAgIDMgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSB2c3lzY2FsbAorICAgICBkcnd4ci14ci14ICAgIDYgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSB3b3JrcXVldWUKKyAgICAgZHJ3eHIteHIteCAgIDI2IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgd3JpdGViYWNrCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBFYWNoIG9uZSBvZiB0aGVzZSBzdWJkaXJlY3RvcmllcyBjb3JyZXNwb25kcyB0byBhCisgICAgICAgICAgICAnc3Vic3lzdGVtJyBhbmQgY29udGFpbnMgeWV0IGFnYWluIG1vcmUgc3ViZGlyZWN0b3JpZXMsCisgICAgICAgICAgICBlYWNoIG9uZSBvZiB0aG9zZSBmaW5hbGx5IGNvcnJlc3BvbmRpbmcgdG8gYSB0cmFjZXBvaW50LgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGhlcmUgYXJlIHRoZSBjb250ZW50cyBvZiB0aGUgJ2ttZW0nIHN1YnN5c3RlbToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cyMgY2Qga21lbQorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2ttZW0jIGxzIC1hbAorICAgICBkcnd4ci14ci14ICAgMTQgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSAuCisgICAgIGRyd3hyLXhyLXggICAzOCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IC4uCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGVuYWJsZQorICAgICAtcnctci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBmaWx0ZXIKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga2ZyZWUKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga21hbGxvYworICAgICBkcnd4ci14ci14ICAgIDIgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBrbWFsbG9jX25vZGUKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga21lbV9jYWNoZV9hbGxvYworICAgICBkcnd4ci14ci14ICAgIDIgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBrbWVtX2NhY2hlX2FsbG9jX25vZGUKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga21lbV9jYWNoZV9mcmVlCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IG1tX3BhZ2VfYWxsb2MKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgbW1fcGFnZV9hbGxvY19leHRmcmFnCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IG1tX3BhZ2VfYWxsb2Nfem9uZV9sb2NrZWQKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgbW1fcGFnZV9mcmVlCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IG1tX3BhZ2VfZnJlZV9iYXRjaGVkCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IG1tX3BhZ2VfcGNwdV9kcmFpbgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgTGV0J3Mgc2VlIHdoYXQncyBpbnNpZGUgdGhlIHN1YmRpcmVjdG9yeSBmb3IgYSBzcGVjaWZpYworICAgICAgICAgICAgdHJhY2Vwb2ludCwgaW4gdGhpcyBjYXNlIHRoZSBvbmUgZm9yIGttYWxsb2M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAc3VnYXJiYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMva21lbSMgY2Qga21hbGxvYworICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2ttZW0va21hbGxvYyMgbHMgLWFsCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IC4KKyAgICAgZHJ3eHIteHIteCAgIDE0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgLi4KKyAgICAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgZW5hYmxlCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGZpbHRlcgorICAgICAtci0tci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBmb3JtYXQKKyAgICAgLXItLXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgaWQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSAnZm9ybWF0JyBmaWxlIGZvciB0aGUgdHJhY2Vwb2ludCBkZXNjcmliZXMgdGhlIGV2ZW50CisgICAgICAgICAgICBpbiBtZW1vcnksIHdoaWNoIGlzIHVzZWQgYnkgdGhlIHZhcmlvdXMgdHJhY2luZyB0b29scworICAgICAgICAgICAgdGhhdCBub3cgbWFrZSB1c2Ugb2YgdGhlc2UgdHJhY2Vwb2ludCB0byBwYXJzZSB0aGUgZXZlbnQKKyAgICAgICAgICAgIGFuZCBtYWtlIHNlbnNlIG9mIGl0LCBhbG9uZyB3aXRoIGEgJ3ByaW50IGZtdCcgZmllbGQgdGhhdAorICAgICAgICAgICAgYWxsb3dzIHRvb2xzIGxpa2UgZnRyYWNlIHRvIGRpc3BsYXkgdGhlIGV2ZW50IGFzIHRleHQuCisgICAgICAgICAgICBIZXJlJ3Mgd2hhdCB0aGUgZm9ybWF0IG9mIHRoZSBrbWFsbG9jIGV2ZW50IGxvb2tzIGxpa2U6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAc3VnYXJiYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMva21lbS9rbWFsbG9jIyBjYXQgZm9ybWF0CisgICAgIG5hbWU6IGttYWxsb2MKKyAgICAgSUQ6IDMxMworICAgICBmb3JtYXQ6CisJICAgICBmaWVsZDp1bnNpZ25lZCBzaG9ydCBjb21tb25fdHlwZTsJb2Zmc2V0OjA7CXNpemU6MjsJc2lnbmVkOjA7CisJICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9mbGFnczsJb2Zmc2V0OjI7CXNpemU6MTsJc2lnbmVkOjA7CisJICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9wcmVlbXB0X2NvdW50OwlvZmZzZXQ6MzsJc2l6ZToxOwlzaWduZWQ6MDsKKwkgICAgIGZpZWxkOmludCBjb21tb25fcGlkOwlvZmZzZXQ6NDsJc2l6ZTo0OwlzaWduZWQ6MTsKKwkgICAgIGZpZWxkOmludCBjb21tb25fcGFkZGluZzsJb2Zmc2V0Ojg7CXNpemU6NDsJc2lnbmVkOjE7CisKKwkgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlOwlvZmZzZXQ6MTY7CXNpemU6ODsJc2lnbmVkOjA7CisJICAgICBmaWVsZDpjb25zdCB2b2lkICogcHRyOwlvZmZzZXQ6MjQ7CXNpemU6ODsJc2lnbmVkOjA7CisJICAgICBmaWVsZDpzaXplX3QgYnl0ZXNfcmVxOwlvZmZzZXQ6MzI7CXNpemU6ODsJc2lnbmVkOjA7CisJICAgICBmaWVsZDpzaXplX3QgYnl0ZXNfYWxsb2M7CW9mZnNldDo0MDsJc2l6ZTo4OwlzaWduZWQ6MDsKKwkgICAgIGZpZWxkOmdmcF90IGdmcF9mbGFnczsJb2Zmc2V0OjQ4OwlzaXplOjQ7CXNpZ25lZDowOworCisgICAgIHByaW50IGZtdDogImNhbGxfc2l0ZT0lbHggcHRyPSVwIGJ5dGVzX3JlcT0lenUgYnl0ZXNfYWxsb2M9JXp1IGdmcF9mbGFncz0lcyIsIFJFQy0+Y2FsbF9zaXRlLCBSRUMtPnB0ciwgUkVDLT5ieXRlc19yZXEsIFJFQy0+Ynl0ZXNfYWxsb2MsCisgICAgIChSRUMtPmdmcF9mbGFncykgPyBfX3ByaW50X2ZsYWdzKFJFQy0+Z2ZwX2ZsYWdzLCAifCIsIHsodW5zaWduZWQgbG9uZykoKCgoIGdmcF90KTB4MTB1KSB8ICgoIGdmcF90KTB4NDB1KSB8ICgoIGdmcF90KTB4ODB1KSB8ICgoCisgICAgIGdmcF90KTB4MjAwMDB1KSB8ICgoIGdmcF90KTB4MDJ1KSB8ICgoIGdmcF90KTB4MDh1KSkgfCAoKCBnZnBfdCkweDQwMDB1KSB8ICgoIGdmcF90KTB4MTAwMDB1KSB8ICgoIGdmcF90KTB4MTAwMHUpIHwgKCggZ2ZwX3QpMHgyMDB1KSB8ICgoCisgICAgIGdmcF90KTB4NDAwMDAwdSkpLCAiR0ZQX1RSQU5TSFVHRSJ9LCB7KHVuc2lnbmVkIGxvbmcpKCgoIGdmcF90KTB4MTB1KSB8ICgoIGdmcF90KTB4NDB1KSB8ICgoIGdmcF90KTB4ODB1KSB8ICgoIGdmcF90KTB4MjAwMDB1KSB8ICgoCisgICAgIGdmcF90KTB4MDJ1KSB8ICgoIGdmcF90KTB4MDh1KSksICJHRlBfSElHSFVTRVJfTU9WQUJMRSJ9LCB7KHVuc2lnbmVkIGxvbmcpKCgoIGdmcF90KTB4MTB1KSB8ICgoIGdmcF90KTB4NDB1KSB8ICgoIGdmcF90KTB4ODB1KSB8ICgoCisgICAgIGdmcF90KTB4MjAwMDB1KSB8ICgoIGdmcF90KTB4MDJ1KSksICJHRlBfSElHSFVTRVIifSwgeyh1bnNpZ25lZCBsb25nKSgoKCBnZnBfdCkweDEwdSkgfCAoKCBnZnBfdCkweDQwdSkgfCAoKCBnZnBfdCkweDgwdSkgfCAoKAorICAgICBnZnBfdCkweDIwMDAwdSkpLCAiR0ZQX1VTRVIifSwgeyh1bnNpZ25lZCBsb25nKSgoKCBnZnBfdCkweDEwdSkgfCAoKCBnZnBfdCkweDQwdSkgfCAoKCBnZnBfdCkweDgwdSkgfCAoKCBnZnBfdCkweDgwMDAwdSkpLCBHRlBfVEVNUE9SQVJZIn0sCisgICAgIHsodW5zaWduZWQgbG9uZykoKCggZ2ZwX3QpMHgxMHUpIHwgKCggZ2ZwX3QpMHg0MHUpIHwgKCggZ2ZwX3QpMHg4MHUpKSwgIkdGUF9LRVJORUwifSwgeyh1bnNpZ25lZCBsb25nKSgoKCBnZnBfdCkweDEwdSkgfCAoKCBnZnBfdCkweDQwdSkpLAorICAgICAiR0ZQX05PRlMifSwgeyh1bnNpZ25lZCBsb25nKSgoKCBnZnBfdCkweDIwdSkpLCAiR0ZQX0FUT01JQyJ9LCB7KHVuc2lnbmVkIGxvbmcpKCgoIGdmcF90KTB4MTB1KSksICJHRlBfTk9JTyJ9LCB7KHVuc2lnbmVkIGxvbmcpKCgKKyAgICAgZ2ZwX3QpMHgyMHUpLCAiR0ZQX0hJR0gifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTB4MTB1KSwgIkdGUF9XQUlUIn0sIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDQwdSksICJHRlBfSU8ifSwgeyh1bnNpZ25lZCBsb25nKSgoCisgICAgIGdmcF90KTB4MTAwdSksICJHRlBfQ09MRCJ9LCB7KHVuc2lnbmVkIGxvbmcpKCggZ2ZwX3QpMHgyMDB1KSwgIkdGUF9OT1dBUk4ifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTB4NDAwdSksICJHRlBfUkVQRUFUIn0sIHsodW5zaWduZWQKKyAgICAgbG9uZykoKCBnZnBfdCkweDgwMHUpLCAiR0ZQX05PRkFJTCJ9LCB7KHVuc2lnbmVkIGxvbmcpKCggZ2ZwX3QpMHgxMDAwdSksICJHRlBfTk9SRVRSWSJ9LCAgICAgIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDQwMDB1KSwgIkdGUF9DT01QIn0sCisgICAgIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDgwMDB1KSwgIkdGUF9aRVJPIn0sIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDEwMDAwdSksICJHRlBfTk9NRU1BTExPQyJ9LCB7KHVuc2lnbmVkIGxvbmcpKCggZ2ZwX3QpMHgyMDAwMHUpLAorICAgICAiR0ZQX0hBUkRXQUxMIn0sIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDQwMDAwdSksICJHRlBfVEhJU05PREUifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTB4ODAwMDB1KSwgIkdGUF9SRUNMQUlNQUJMRSJ9LCB7KHVuc2lnbmVkCisgICAgIGxvbmcpKCggZ2ZwX3QpMHgwOHUpLCAiR0ZQX01PVkFCTEUifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTApLCAiR0ZQX05PVFJBQ0sifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTB4NDAwMDAwdSksICJHRlBfTk9fS1NXQVBEIn0sCisgICAgIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDgwMDAwMHUpLCAiR0ZQX09USEVSX05PREUifSApIDogIkdGUF9OT1dBSVQiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgJ2VuYWJsZScgZmlsZSBpbiB0aGUgdHJhY2Vwb2ludCBkaXJlY3RvcnkgaXMgd2hhdCBhbGxvd3MKKyAgICAgICAgICAgIHRoZSB1c2VyIChvciB0b29scyBzdWNoIGFzIHRyYWNlLWNtZCkgdG8gYWN0dWFsbHkgdHVybiB0aGUKKyAgICAgICAgICAgIHRyYWNlcG9pbnQgb24gYW5kIG9mZi4gV2hlbiBlbmFibGVkLCB0aGUgY29ycmVzcG9uZGluZworICAgICAgICAgICAgdHJhY2Vwb2ludCB3aWxsIHN0YXJ0IGFwcGVhcmluZyBpbiB0aGUgZnRyYWNlICd0cmFjZScKKyAgICAgICAgICAgIGZpbGUgZGVzY3JpYmVkIHByZXZpb3VzbHkuIEZvciBleGFtcGxlLCB0aGlzIHR1cm5zIG9uIHRoZQorICAgICAgICAgICAga21hbGxvYyB0cmFjZXBvaW50OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2ttZW0va21hbGxvYyMgZWNobyAxID4gZW5hYmxlCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBdCB0aGUgbW9tZW50LCB3ZSdyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGUgZnVuY3Rpb24gdHJhY2VyIG9yCisgICAgICAgICAgICBzb21lIG90aGVyIHRyYWNlciB0aGF0IG1pZ2h0IGJlIGluIGVmZmVjdCwgc28gd2UgZmlyc3QgdHVybgorICAgICAgICAgICAgaXQgb2ZmLCBidXQgaWYgd2UgZG8gdGhhdCwgd2Ugc3RpbGwgbmVlZCB0byB0dXJuIHRyYWNpbmcgb24gaW4KKyAgICAgICAgICAgIG9yZGVyIHRvIHNlZSB0aGUgZXZlbnRzIGluIHRoZSBvdXRwdXQgYnVmZmVyOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcjIGVjaG8gbm9wID4gY3VycmVudF90cmFjZXIKKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIDEgPiB0cmFjaW5nX29uCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBOb3csIGlmIHdlIGxvb2sgYXQgdGhlIHRoZSAndHJhY2UnIGZpbGUsIHdlIHNlZSBub3RoaW5nCisgICAgICAgICAgICBidXQgdGhlIGttYWxsb2MgZXZlbnRzIHdlIGp1c3QgdHVybmVkIG9uOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcjIGNhdCB0cmFjZSB8IGxlc3MKKyAgICAgIyB0cmFjZXI6IG5vcAorICAgICAjCisgICAgICMgZW50cmllcy1pbi1idWZmZXIvZW50cmllcy13cml0dGVuOiAxODk3LzE4OTcgICAjUDo4CisgICAgICMKKyAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8tLS0tLT0mZ3Q7IGlycXMtb2ZmCisgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gXy0tLS09Jmd0OyBuZWVkLXJlc2NoZWQKKyAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC8gXy0tLT0mZ3Q7IGhhcmRpcnEvc29mdGlycQorICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IC8gXy0tPSZndDsgcHJlZW1wdC1kZXB0aAorICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8fCAvICAgICBkZWxheQorICAgICAjICAgICAgICAgICBUQVNLLVBJRCAgIENQVSMgIHx8fHwgICAgVElNRVNUQU1QICBGVU5DVElPTgorICAgICAjICAgICAgICAgICAgICB8IHwgICAgICAgfCAgIHx8fHwgICAgICAgfCAgICAgICAgIHwKKyAgICAgICAgICAgIGRyb3BiZWFyLTE0NjUgIFswMDBdIC4uLjEgMTgxNTQuNjIwNzUzOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTY2NTBkNCBwdHI9ZmZmZjg4MDA3MjljMzAwMCBieXRlc19yZXE9MjA0OCBieXRlc19hbGxvYz0yMDQ4IGdmcF9mbGFncz1HRlBfS0VSTkVMCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDAwXSAuLnMzIDE4MTU0LjYyMTY0MDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTliMzYgcHRyPWZmZmY4ODAwNmQ1NTU4MDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9BVE9NSUMKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTQuNjIxNjU2OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NTgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICBtYXRjaGJveC10ZXJtaW4tMTM2MSAgWzAwMV0gLi4uMSAxODE1NC43NTU0NzI6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjE0MDUwIHB0cj1mZmZmODgwMDZkNWYwZTAwIGJ5dGVzX3JlcT01MTIgYnl0ZXNfYWxsb2M9NTEyIGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9SRVBFQVQKKyAgICAgICAgICAgICAgICBYb3JnLTEyNjQgIFswMDJdIC4uLjEgMTgxNTQuNzU1NTgxOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTQxYWJlOCBwdHI9ZmZmZjg4MDA3MzRmNGNjMCBieXRlc19yZXE9MTY4IGJ5dGVzX2FsbG9jPTE5MiBnZnBfZmxhZ3M9R0ZQX0tFUk5FTHxHRlBfTk9XQVJOfEdGUF9OT1JFVFJZCisgICAgICAgICAgICAgICAgWG9yZy0xMjY0ICBbMDAyXSAuLi4xIDE4MTU0Ljc1NTU4Mzoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE0MTkyYTMgcHRyPWZmZmY4ODAwMWY4MjI1MjAgYnl0ZXNfcmVxPTI0IGJ5dGVzX2FsbG9jPTMyIGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9aRVJPCisgICAgICAgICAgICAgICAgWG9yZy0xMjY0ICBbMDAyXSAuLi4xIDE4MTU0Ljc1NTU4OToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE0MTllZGIgcHRyPWZmZmY4ODAwNzIxYTJmMDAgYnl0ZXNfcmVxPTY0IGJ5dGVzX2FsbG9jPTY0IGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9aRVJPCisgICAgIG1hdGNoYm94LXRlcm1pbi0xMzYxICBbMDAxXSAuLi4xIDE4MTU1LjM1NDU5NDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTQwNTAgcHRyPWZmZmY4ODAwNmRiMzU0MDAgYnl0ZXNfcmVxPTU3NiBieXRlc19hbGxvYz0xMDI0IGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9SRVBFQVQKKyAgICAgICAgICAgICAgICBYb3JnLTEyNjQgIFswMDJdIC4uLjEgMTgxNTUuMzU0NzAzOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTQxYWJlOCBwdHI9ZmZmZjg4MDA3MzRmNGNjMCBieXRlc19yZXE9MTY4IGJ5dGVzX2FsbG9jPTE5MiBnZnBfZmxhZ3M9R0ZQX0tFUk5FTHxHRlBfTk9XQVJOfEdGUF9OT1JFVFJZCisgICAgICAgICAgICAgICAgWG9yZy0xMjY0ICBbMDAyXSAuLi4xIDE4MTU1LjM1NDcwNToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE0MTkyYTMgcHRyPWZmZmY4ODAwMWY4MjI1MjAgYnl0ZXNfcmVxPTI0IGJ5dGVzX2FsbG9jPTMyIGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9aRVJPCisgICAgICAgICAgICAgICAgWG9yZy0xMjY0ICBbMDAyXSAuLi4xIDE4MTU1LjM1NDcxMToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE0MTllZGIgcHRyPWZmZmY4ODAwNzIxYTJmMDAgYnl0ZXNfcmVxPTY0IGJ5dGVzX2FsbG9jPTY0IGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9aRVJPCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDAwXSAuLnMzIDE4MTU1LjY3MzMxOToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTliMzYgcHRyPWZmZmY4ODAwNmQ1NTU4MDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9BVE9NSUMKKyAgICAgICAgICAgIGRyb3BiZWFyLTE0NjUgIFswMDBdIC4uLjEgMTgxNTUuNjczNTI1OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTY2NTBkNCBwdHI9ZmZmZjg4MDA3MjljMzAwMCBieXRlc19yZXE9MjA0OCBieXRlc19hbGxvYz0yMDQ4IGdmcF9mbGFncz1HRlBfS0VSTkVMCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDAwXSAuLnMzIDE4MTU1LjY3NDgyMToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTliMzYgcHRyPWZmZmY4ODAwNmQ1NTQ4MDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9BVE9NSUMKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTUuNzkzMDE0OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NDgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICAgICAgICAgZHJvcGJlYXItMTQ2NSAgWzAwMF0gLi4uMSAxODE1NS43OTMyMTk6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjY1MGQ0IHB0cj1mZmZmODgwMDcyOWMzMDAwIGJ5dGVzX3JlcT0yMDQ4IGJ5dGVzX2FsbG9jPTIwNDggZ2ZwX2ZsYWdzPUdGUF9LRVJORUwKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTUuNzk0MTQ3OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NTgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwMF0gLi5zMyAxODE1NS45MzY3MDU6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjE5YjM2IHB0cj1mZmZmODgwMDZkNTU1ODAwIGJ5dGVzX3JlcT01MTIgYnl0ZXNfYWxsb2M9NTEyIGdmcF9mbGFncz1HRlBfQVRPTUlDCisgICAgICAgICAgICBkcm9wYmVhci0xNDY1ICBbMDAwXSAuLi4xIDE4MTU1LjkzNjkxMDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2NjUwZDQgcHRyPWZmZmY4ODAwNzI5YzMwMDAgYnl0ZXNfcmVxPTIwNDggYnl0ZXNfYWxsb2M9MjA0OCBnZnBfZmxhZ3M9R0ZQX0tFUk5FTAorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwMF0gLi5zMyAxODE1NS45Mzc4Njk6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjE5YjM2IHB0cj1mZmZmODgwMDZkNTU0ODAwIGJ5dGVzX3JlcT01MTIgYnl0ZXNfYWxsb2M9NTEyIGdmcF9mbGFncz1HRlBfQVRPTUlDCisgICAgIG1hdGNoYm94LXRlcm1pbi0xMzYxICBbMDAxXSAuLi4xIDE4MTU1Ljk1MzY2Nzoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTQwNTAgcHRyPWZmZmY4ODAwNmQ1ZjIwMDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9LRVJORUx8R0ZQX1JFUEVBVAorICAgICAgICAgICAgICAgIFhvcmctMTI2NCAgWzAwMl0gLi4uMSAxODE1NS45NTM3NzU6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNDFhYmU4IHB0cj1mZmZmODgwMDczNGY0Y2MwIGJ5dGVzX3JlcT0xNjggYnl0ZXNfYWxsb2M9MTkyIGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9OT1dBUk58R0ZQX05PUkVUUlkKKyAgICAgICAgICAgICAgICBYb3JnLTEyNjQgIFswMDJdIC4uLjEgMTgxNTUuOTUzNzc3OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTQxOTJhMyBwdHI9ZmZmZjg4MDAxZjgyMjUyMCBieXRlc19yZXE9MjQgYnl0ZXNfYWxsb2M9MzIgZ2ZwX2ZsYWdzPUdGUF9LRVJORUx8R0ZQX1pFUk8KKyAgICAgICAgICAgICAgICBYb3JnLTEyNjQgIFswMDJdIC4uLjEgMTgxNTUuOTUzNzgzOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTQxOWVkYiBwdHI9ZmZmZjg4MDA3MjFhMmYwMCBieXRlc19yZXE9NjQgYnl0ZXNfYWxsb2M9NjQgZ2ZwX2ZsYWdzPUdGUF9LRVJORUx8R0ZQX1pFUk8KKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTYuMTc2MDUzOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NDgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICAgICAgICAgZHJvcGJlYXItMTQ2NSAgWzAwMF0gLi4uMSAxODE1Ni4xNzYyNTc6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjY1MGQ0IHB0cj1mZmZmODgwMDcyOWMzMDAwIGJ5dGVzX3JlcT0yMDQ4IGJ5dGVzX2FsbG9jPTIwNDggZ2ZwX2ZsYWdzPUdGUF9LRVJORUwKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTYuMTc3NzE3OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NTgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwMF0gLi5zMyAxODE1Ni4zOTkyMjk6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjE5YjM2IHB0cj1mZmZmODgwMDZkNTU1ODAwIGJ5dGVzX3JlcT01MTIgYnl0ZXNfYWxsb2M9NTEyIGdmcF9mbGFncz1HRlBfQVRPTUlDCisgICAgICAgICAgICBkcm9wYmVhci0xNDY1ICBbMDAwXSAuLi4xIDE4MTU2LjM5OTQzNDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2NjUwZDQgcHRyPWZmZmY4ODAwNzI5YzMwMDAgYnl0ZXNfaHR0cDovL3Jvc3RlZHQuaG9tZWxpbnV4LmNvbS9rZXJuZWxzaGFyay9yZXE9MjA0OCBieXRlc19hbGxvYz0yMDQ4IGdmcF9mbGFncz1HRlBfS0VSTkVMCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDAwXSAuLnMzIDE4MTU2LjQwMDY2MDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTliMzYgcHRyPWZmZmY4ODAwNmQ1NTQ4MDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9BVE9NSUMKKyAgICAgbWF0Y2hib3gtdGVybWluLTEzNjEgIFswMDFdIC4uLjEgMTgxNTYuNTUyODAwOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxNDA1MCBwdHI9ZmZmZjg4MDA2ZGIzNDgwMCBieXRlc19yZXE9NTc2IGJ5dGVzX2FsbG9jPTEwMjQgZ2ZwX2ZsYWdzPUdGUF9LRVJORUx8R0ZQX1JFUEVBVAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVG8gYWdhaW4gZGlzYWJsZSB0aGUga21hbGxvYyBldmVudCwgd2UgbmVlZCB0byBzZW5kIDAgdG8gdGhlCisgICAgICAgICAgICBlbmFibGUgZmlsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9rbWVtL2ttYWxsb2MjIGVjaG8gMCA+IGVuYWJsZQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgWW91IGNhbiBlbmFibGUgYW55IG51bWJlciBvZiBldmVudHMgb3IgY29tcGxldGUgc3Vic3lzdGVtcworICAgICAgICAgICAgKGJ5IHVzaW5nIHRoZSAnZW5hYmxlJyBmaWxlIGluIHRoZSBzdWJzeXN0ZW0gZGlyZWN0b3J5KSBhbmQKKyAgICAgICAgICAgIGdldCBhbiBhcmJpdHJhcmlseSBmaW5lLWdyYWluZWQgaWRlYSBvZiB3aGF0J3MgZ29pbmcgb24gaW4gdGhlCisgICAgICAgICAgICBzeXN0ZW0gYnkgZW5hYmxpbmcgYXMgbWFueSBvZiB0aGUgYXBwcm9wcmlhdGUgdHJhY2Vwb2ludHMKKyAgICAgICAgICAgIGFzIGFwcGxpY2FibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgbnVtYmVyIG9mIHRoZSB0b29scyBkZXNjcmliZWQgaW4gdGhpcyBIT1dUTyBkbyBqdXN0IHRoYXQsCisgICAgICAgICAgICBpbmNsdWRpbmcgdHJhY2UtY21kIGFuZCBrZXJuZWxzaGFyayBpbiB0aGUgbmV4dCBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBUaGVzZSB0cmFjZXBvaW50cyBhbmQgdGhlaXIgcmVwcmVzZW50YXRpb24KKyAgICAgICAgICAgIGFyZSB1c2VkIG5vdCBvbmx5IGJ5IGZ0cmFjZSwgIGJ1dCBieSBtYW55IG9mIHRoZSBvdGhlciB0b29scworICAgICAgICAgICAgY292ZXJlZCBpbiB0aGlzIGRvY3VtZW50IGFuZCB0aGV5IGZvcm0gYSBjZW50cmFsIHBvaW50IG9mCisgICAgICAgICAgICBpbnRlZ3JhdGlvbiBmb3IgdGhlIHZhcmlvdXMgdHJhY2VycyBhdmFpbGFibGUgaW4gTGludXguCisgICAgICAgICAgICBUaGV5IGZvcm0gYSBjZW50cmFsIHBhcnQgb2YgdGhlIGluc3RydW1lbnRhdGlvbiBmb3IgdGhlCisgICAgICAgICAgICBmb2xsb3dpbmcgdG9vbHM6IHBlcmYsIGx0dG5nLCBmdHJhY2UsIGJsa3RyYWNlIGFuZCBTeXN0ZW1UYXAKKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBFdmVudHVhbGx5IGFsbCB0aGUgc3BlY2lhbC1wdXJwb3NlIHRyYWNlcnMKKyAgICAgICAgICAgIGN1cnJlbnRseSBhdmFpbGFibGUgaW4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyB3aWxsIGJlCisgICAgICAgICAgICByZW1vdmVkIGFuZCByZXBsYWNlZCB3aXRoIGVxdWl2YWxlbnQgdHJhY2VycyBiYXNlZCBvbiB0aGUKKyAgICAgICAgICAgICd0cmFjZSBldmVudHMnIHN1YnN5c3RlbS4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3RyYWNlLWNtZC1rZXJuZWxzaGFyayc+CisgICAgICAgIDx0aXRsZT50cmFjZS1jbWQva2VybmVsc2hhcms8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgdHJhY2UtY21kIGlzIGVzc2VudGlhbGx5IGFuIGV4dGVuc2l2ZSBjb21tYW5kLWxpbmUgJ3dyYXBwZXInCisgICAgICAgICAgICBpbnRlcmZhY2UgdGhhdCBoaWRlcyB0aGUgZGV0YWlscyBvZiBhbGwgdGhlIGluZGl2aWR1YWwgZmlsZXMKKyAgICAgICAgICAgIGluIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcsIGFsbG93aW5nIHVzZXJzIHRvIHNwZWNpZnkKKyAgICAgICAgICAgIHNwZWNpZmljIHBhcnRpY3VsYXIgZXZlbnRzIHdpdGhpbiB0aGUKKyAgICAgICAgICAgIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzLyBzdWJkaXJlY3RvcnkgYW5kIHRvIGNvbGxlY3QKKyAgICAgICAgICAgIHRyYWNlcyBhbmQgYXZvaWQgaGF2aW5nIHRvIGRlYWwgd2l0aCB0aG9zZSBkZXRhaWxzIGRpcmVjdGx5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyB5ZXQgYW5vdGhlciBsYXllciBvbiB0b3Agb2YgdGhhdCwga2VybmVsc2hhcmsgcHJvdmlkZXMgYSBHVUkKKyAgICAgICAgICAgIHRoYXQgYWxsb3dzIHVzZXJzIHRvIHN0YXJ0IGFuZCBzdG9wIHRyYWNlcyBhbmQgc3BlY2lmeSBzZXRzCisgICAgICAgICAgICBvZiBldmVudHMgdXNpbmcgYW4gaW50dWl0aXZlIGludGVyZmFjZSwgYW5kIHZpZXcgdGhlCisgICAgICAgICAgICBvdXRwdXQgYXMgYm90aCB0cmFjZSBldmVudHMgYW5kIGFzIGEgcGVyLUNQVSBncmFwaGljYWwKKyAgICAgICAgICAgIGRpc3BsYXkuIEl0IGRpcmVjdGx5IHVzZXMgJ3RyYWNlLWNtZCcgYXMgdGhlIHBsdW1iaW5nCisgICAgICAgICAgICB0aGF0IGFjY29tcGxpc2hlcyBhbGwgdGhhdCB1bmRlcm5lYXRoIHRoZSBjb3ZlcnMgKGFuZAorICAgICAgICAgICAgYWN0dWFsbHkgZGlzcGxheXMgdGhlIHRyYWNlLWNtZCBjb21tYW5kIGl0IHVzZXMsIGFzIHdlJ2xsIHNlZSkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIHN0YXJ0IGEgdHJhY2UgdXNpbmcga2VybmVsc2hhcmssIGZpcnN0IHN0YXJ0IGtlcm5lbHNoYXJrOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5On4jIGtlcm5lbHNoYXJrCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGVuIGJyaW5nIHVwIHRoZSAnQ2FwdHVyZScgZGlhbG9nIGJ5IGNob29zaW5nIGZyb20gdGhlCisgICAgICAgICAgICBrZXJuZWxzaGFyayBtZW51OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDYXB0dXJlIHwgUmVjb3JkCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGF0IHdpbGwgZGlzcGxheSB0aGUgZm9sbG93aW5nIGRpYWxvZywgd2hpY2ggYWxsb3dzIHlvdSB0bworICAgICAgICAgICAgY2hvb3NlIG9uZSBvciBtb3JlIGV2ZW50cyAob3IgZXZlbiBvbmUgb3IgbW9yZSBjb21wbGV0ZQorICAgICAgICAgICAgc3Vic3lzdGVtcykgdG8gdHJhY2U6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWxzaGFyay1jaG9vc2UtZXZlbnRzLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjZpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vdGUgdGhhdCB0aGVzZSBhcmUgZXhhY3RseSB0aGUgc2FtZSBzZXRzIG9mIGV2ZW50cyBkZXNjcmliZWQKKyAgICAgICAgICAgIGluIHRoZSBwcmV2aW91cyB0cmFjZSBldmVudHMgc3Vic3lzdGVtIHNlY3Rpb24sIGFuZCBpbiBmYWN0CisgICAgICAgICAgICBpcyB3aGVyZSB0cmFjZS1jbWQgZ2V0cyB0aGVtIGZvciBrZXJuZWxzaGFyay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gdGhlIGFib3ZlIHNjcmVlbnNob3QsIHdlJ3ZlIGRlY2lkZWQgdG8gZXhwbG9yZSB0aGUKKyAgICAgICAgICAgIGdyYXBoaWNzIHN1YnN5c3RlbSBhIGJpdCBhbmQgc28gaGF2ZSBjaG9zZW4gdG8gdHJhY2UgYWxsCisgICAgICAgICAgICB0aGUgdHJhY2Vwb2ludHMgY29udGFpbmVkIHdpdGhpbiB0aGUgJ2k5MTUnIGFuZCAnZHJtJworICAgICAgICAgICAgc3Vic3lzdGVtcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWZ0ZXIgZG9pbmcgdGhhdCwgd2UgY2FuIHN0YXJ0IGFuZCBzdG9wIHRoZSB0cmFjZSB1c2luZworICAgICAgICAgICAgdGhlICdSdW4nIGFuZCAnU3RvcCcgYnV0dG9uIG9uIHRoZSBsb3dlciByaWdodCBjb3JuZXIgb2YKKyAgICAgICAgICAgIHRoZSBkaWFsb2cgKHRoZSBzYW1lIGJ1dHRvbiB3aWxsIHR1cm4gaW50byB0aGUgJ1N0b3AnCisgICAgICAgICAgICBidXR0b24gYWZ0ZXIgdGhlIHRyYWNlIGhhcyBzdGFydGVkKToKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2tlcm5lbHNoYXJrLW91dHB1dC1kaXNwbGF5LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjZpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vdGljZSB0aGF0IHRoZSByaWdodC1oYW5kIHBhbmUgc2hvd3MgdGhlIGV4YWN0IHRyYWNlLWNtZAorICAgICAgICAgICAgY29tbWFuZC1saW5lIHRoYXQncyB1c2VkIHRvIHJ1biB0aGUgdHJhY2UsIGFsb25nIHdpdGggdGhlCisgICAgICAgICAgICByZXN1bHRzIG9mIHRoZSB0cmFjZS1jbWQgcnVuLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHRoZSAnU3RvcCcgYnV0dG9uIGlzIHByZXNzZWQsIHRoZSBncmFwaGljYWwgdmlldyBtYWdpY2FsbHkKKyAgICAgICAgICAgIGZpbGxzIHVwIHdpdGggYSBjb2xvcmZ1bCBwZXItY3B1IGRpc3BsYXkgb2YgdGhlIHRyYWNlIGRhdGEsCisgICAgICAgICAgICBhbG9uZyB3aXRoIHRoZSBkZXRhaWxlZCBldmVudCBsaXN0aW5nIGJlbG93IHRoYXQ6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWxzaGFyay1pOTE1LWRpc3BsYXkucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGVyZSdzIGFub3RoZXIgZXhhbXBsZSwgdGhpcyB0aW1lIGEgZGlzcGxheSByZXN1bHRpbmcKKyAgICAgICAgICAgIGZyb20gdHJhY2luZyAnYWxsIGV2ZW50cyc6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWxzaGFyay1hbGwucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHRvb2wgaXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnksIGJ1dCBmb3IgbW9yZSBkZXRhaWxlZAorICAgICAgICAgICAgaW5mb3JtYXRpb24gb24gbmF2aWdhdGluZyB0aHJvdWdoIHRoZSBkYXRhLCBzZWUgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vcm9zdGVkdC5ob21lbGludXguY29tL2tlcm5lbHNoYXJrLyc+a2VybmVsc2hhcmsgd2Vic2l0ZTwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2Z0cmFjZS1kb2N1bWVudGF0aW9uJz4KKyAgICAgICAgPHRpdGxlPkRvY3VtZW50YXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGRvY3VtZW50YXRpb24gZm9yIGZ0cmFjZSBjYW4gYmUgZm91bmQgaW4gdGhlIGtlcm5lbAorICAgICAgICAgICAgRG9jdW1lbnRhdGlvbiBkaXJlY3Rvcnk6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSB0cmFjZSBldmVudCBzdWJzeXN0ZW0gY2FuIGFsc28KKyAgICAgICAgICAgIGJlIGZvdW5kIGluIHRoZSBrZXJuZWwgRG9jdW1lbnRhdGlvbiBkaXJlY3Rvcnk6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERvY3VtZW50YXRpb24vdHJhY2UvZXZlbnRzLnR4dAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlcmUgaXMgYSBuaWNlIHNlcmllcyBvZiBhcnRpY2xlcyBvbiB1c2luZworICAgICAgICAgICAgZnRyYWNlIGFuZCB0cmFjZS1jbWQgYXQgTFdOOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0naHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMzY1ODM1Lyc+RGVidWdnaW5nIHRoZSBrZXJuZWwgdXNpbmcgRnRyYWNlIC0gcGFydCAxPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHA6Ly9sd24ubmV0L0FydGljbGVzLzM2Njc5Ni8nPkRlYnVnZ2luZyB0aGUga2VybmVsIHVzaW5nIEZ0cmFjZSAtIHBhcnQgMjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPSdodHRwOi8vbHduLm5ldC9BcnRpY2xlcy8zNzA0MjMvJz5TZWNyZXRzIG9mIHRoZSBGdHJhY2UgZnVuY3Rpb24gdHJhY2VyPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHBzOi8vbHduLm5ldC9BcnRpY2xlcy80MTAyMDAvJz50cmFjZS1jbWQ6IEEgZnJvbnQtZW5kIGZvciBGdHJhY2U8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGVyZSdzIG1vcmUgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBrZXJuZWxzaGFyayB1c2FnZSBoZXJlOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3Jvc3RlZHQuaG9tZWxpbnV4LmNvbS9rZXJuZWxzaGFyay8nPktlcm5lbFNoYXJrPC91bGluaz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW4gYW11c2luZyB5ZXQgdXNlZnVsIFJFQURNRSAoYSB0cmFjaW5nIG1pbmktSE9XVE8pIGNhbiBiZQorICAgICAgICAgICAgZm91bmQgaW4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9SRUFETUUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdwcm9maWxlLW1hbnVhbC1zeXN0ZW10YXAnPgorICAgIDx0aXRsZT5zeXN0ZW10YXA8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFN5c3RlbVRhcCBpcyBhIHN5c3RlbS13aWRlIHNjcmlwdC1iYXNlZCB0cmFjaW5nIGFuZCBwcm9maWxpbmcgdG9vbC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU3lzdGVtVGFwIHNjcmlwdHMgYXJlIEMtbGlrZSBwcm9ncmFtcyB0aGF0IGFyZSBleGVjdXRlZCBpbiB0aGUKKyAgICAgICAga2VybmVsIHRvIGdhdGhlci9wcmludC9hZ2dyZWdhdGUgZGF0YSBleHRyYWN0ZWQgZnJvbSB0aGUgY29udGV4dAorICAgICAgICB0aGV5IGVuZCB1cCBiZWluZyBpbnZva2VkIHVuZGVyLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyBwcm9iZSBmcm9tIHRoZQorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vc291cmNld2FyZS5vcmcvc3lzdGVtdGFwL3R1dG9yaWFsLyc+U3lzdGVtVGFwIHR1dG9yaWFsPC91bGluaz4KKyAgICAgICAgc2ltcGx5IHByaW50cyBhIGxpbmUgZXZlcnkgdGltZSBhbnkgcHJvY2VzcyBvbiB0aGUgc3lzdGVtIG9wZW4oKXMKKyAgICAgICAgYSBmaWxlLiBGb3IgZWFjaCBsaW5lLCBpdCBwcmludHMgdGhlIGV4ZWN1dGFibGUgbmFtZSBvZiB0aGUKKyAgICAgICAgcHJvZ3JhbSB0aGF0IG9wZW5lZCB0aGUgZmlsZSwgYWxvbmcgd2l0aCBpdHMgUElELCBhbmQgdGhlIG5hbWUKKyAgICAgICAgb2YgdGhlIGZpbGUgaXQgb3BlbmVkIChvciB0cmllZCB0byBvcGVuKSwgd2hpY2ggaXQgZXh0cmFjdHMKKyAgICAgICAgZnJvbSB0aGUgb3BlbiBzeXNjYWxsJ3MgYXJnc3RyLgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHByb2JlIHN5c2NhbGwub3BlbgorICAgICB7CisgICAgICAgICAgICAgcHJpbnRmICgiJXMoJWQpIG9wZW4gKCVzKVxuIiwgZXhlY25hbWUoKSwgcGlkKCksIGFyZ3N0cikKKyAgICAgfQorCisgICAgIHByb2JlIHRpbWVyLm1zKDQwMDApICMgYWZ0ZXIgNCBzZWNvbmRzCisgICAgIHsKKyAgICAgICAgICAgICBleGl0ICgpCisgICAgIH0KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBOb3JtYWxseSwgdG8gZXhlY3V0ZSB0aGlzIHByb2JlLCB5b3UnZCBzaW1wbHkgaW5zdGFsbAorICAgICAgICBzeXN0ZW10YXAgb24gdGhlIHN5c3RlbSB5b3Ugd2FudCB0byBwcm9iZSwgYW5kIGRpcmVjdGx5IHJ1bgorICAgICAgICB0aGUgcHJvYmUgb24gdGhhdCBzeXN0ZW0gZS5nLiBhc3N1bWluZyB0aGUgbmFtZSBvZiB0aGUgZmlsZQorICAgICAgICBjb250YWluaW5nIHRoZSBhYm92ZSB0ZXh0IGlzIHRyYWNlX29wZW4uc3RwOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgc3RhcCB0cmFjZV9vcGVuLnN0cAorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIFdoYXQgc3lzdGVtdGFwIGRvZXMgdW5kZXIgdGhlIGNvdmVycyB0byBydW4gdGhpcyBwcm9iZSBpcyAxKQorICAgICAgICBwYXJzZSBhbmQgY29udmVydCB0aGUgcHJvYmUgdG8gYW4gZXF1aXZhbGVudCAnQycgZm9ybSwgMikKKyAgICAgICAgY29tcGlsZSB0aGUgJ0MnIGZvcm0gaW50byBhIGtlcm5lbCBtb2R1bGUsIDMpIGluc2VydCB0aGUKKyAgICAgICAgbW9kdWxlIGludG8gdGhlIGtlcm5lbCwgd2hpY2ggYXJtcyBpdCwgYW5kIDQpIGNvbGxlY3QgdGhlIGRhdGEKKyAgICAgICAgZ2VuZXJhdGVkIGJ5IHRoZSBwcm9iZSBhbmQgZGlzcGxheSBpdCB0byB0aGUgdXNlci4KKyAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICAgICBJbiBvcmRlciB0byBhY2NvbXBsaXNoIHN0ZXBzIDEgYW5kIDIsIHRoZSAnc3RhcCcgcHJvZ3JhbSBuZWVkcworICAgICAgICBhY2Nlc3MgdG8gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gdGhhdCBwcm9kdWNlZCB0aGUga2VybmVsCisgICAgICAgIHRoYXQgdGhlIHByb2JlZCBzeXN0ZW0gaXMgcnVubmluZy4gSW4gdGhlIGNhc2Ugb2YgYSB0eXBpY2FsCisgICAgICAgIGVtYmVkZGVkIHN5c3RlbSAodGhlICd0YXJnZXQnKSwgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0KKyAgICAgICAgdW5mb3J0dW5hdGVseSBpc24ndCB0eXBpY2FsbHkgcGFydCBvZiB0aGUgaW1hZ2UgcnVubmluZyBvbgorICAgICAgICB0aGUgdGFyZ2V0LiBJdCBpcyBub3JtYWxseSBhdmFpbGFibGUgb24gdGhlICdob3N0JyBzeXN0ZW0KKyAgICAgICAgdGhhdCBwcm9kdWNlZCB0aGUgdGFyZ2V0IGltYWdlIGhvd2V2ZXI7IGluIHN1Y2ggY2FzZXMsCisgICAgICAgIHN0ZXBzIDEgYW5kIDIgYXJlIGV4ZWN1dGVkIG9uIHRoZSBob3N0IHN5c3RlbSwgYW5kIHN0ZXBzCisgICAgICAgIDMgYW5kIDQgYXJlIGV4ZWN1dGVkIG9uIHRoZSB0YXJnZXQgc3lzdGVtLCB1c2luZyBvbmx5IHRoZQorICAgICAgICBzeXN0ZW10YXAgJ3J1bnRpbWUnLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgc3lzdGVtdGFwIHN1cHBvcnQgaW4gWW9jdG8gYXNzdW1lcyB0aGF0IG9ubHkgc3RlcHMKKyAgICAgICAgMyBhbmQgNCBhcmUgcnVuIG9uIHRoZSB0YXJnZXQ7IGl0IGlzIHBvc3NpYmxlIHRvIGRvCisgICAgICAgIGV2ZXJ5dGhpbmcgb24gdGhlIHRhcmdldCwgYnV0IHRoaXMgc2VjdGlvbiBhc3N1bWVzIG9ubHkKKyAgICAgICAgdGhlIHR5cGljYWwgZW1iZWRkZWQgdXNlLWNhc2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFNvIGJhc2ljYWxseSB3aGF0IHlvdSBuZWVkIHRvIGRvIGluIG9yZGVyIHRvIHJ1biBhIHN5c3RlbXRhcAorICAgICAgICBzY3JpcHQgb24gdGhlIHRhcmdldCBpcyB0byAxKSBvbiB0aGUgaG9zdCBzeXN0ZW0sIGNvbXBpbGUgdGhlCisgICAgICAgIHByb2JlIGludG8gYSBrZXJuZWwgbW9kdWxlIHRoYXQgbWFrZXMgc2Vuc2UgdG8gdGhlIHRhcmdldCwgMikKKyAgICAgICAgY29weSB0aGUgbW9kdWxlIG9udG8gdGhlIHRhcmdldCBzeXN0ZW0gYW5kIDMpIGluc2VydCB0aGUKKyAgICAgICAgbW9kdWxlIGludG8gdGhlIHRhcmdldCBrZXJuZWwsIHdoaWNoIGFybXMgaXQsIGFuZCA0KSBjb2xsZWN0CisgICAgICAgIHRoZSBkYXRhIGdlbmVyYXRlZCBieSB0aGUgcHJvYmUgYW5kIGRpc3BsYXkgaXQgdG8gdGhlIHVzZXIuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3N5c3RlbXRhcC1zZXR1cCc+CisgICAgICAgIDx0aXRsZT5TZXR1cDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaG9zZSBhcmUgYSBsb3Qgb2Ygc3RlcHMgYW5kIGEgbG90IG9mIGRldGFpbHMsIGJ1dAorICAgICAgICAgICAgZm9ydHVuYXRlbHkgWW9jdG8gaW5jbHVkZXMgYSBzY3JpcHQgY2FsbGVkICdjcm9zc3RhcCcKKyAgICAgICAgICAgIHRoYXQgd2lsbCB0YWtlIGNhcmUgb2YgdGhvc2UgZGV0YWlscywgYWxsb3dpbmcgeW91IHRvCisgICAgICAgICAgICBzaW1wbHkgZXhlY3V0ZSBhIHN5c3RlbXRhcCBzY3JpcHQgb24gdGhlIHJlbW90ZSB0YXJnZXQsCisgICAgICAgICAgICB3aXRoIGFyZ3VtZW50cyBpZiBuZWNlc3NhcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIG9yZGVyIHRvIGRvIHRoaXMgZnJvbSBhIHJlbW90ZSBob3N0LCBob3dldmVyLCB5b3UKKyAgICAgICAgICAgIG5lZWQgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGJ1aWxkIGZvciB0aGUgaW1hZ2UgeW91CisgICAgICAgICAgICBib290ZWQuIFRoZSAnY3Jvc3N0YXAnIHNjcmlwdCBwcm92aWRlcyBkZXRhaWxzIG9uIGhvdworICAgICAgICAgICAgdG8gZG8gdGhpcyBpZiB5b3UgcnVuIHRoZSBzY3JpcHQgb24gdGhlIGhvc3Qgd2l0aG91dCBoYXZpbmcKKyAgICAgICAgICAgIGRvbmUgYSBidWlsZDoKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFN5c3RlbVRhcCwgd2hpY2ggdXNlcyAnY3Jvc3N0YXAnLCBhc3N1bWVzIHlvdSBjYW4gZXN0YWJsaXNoIGFuCisgICAgICAgICAgICAgICAgc3NoIGNvbm5lY3Rpb24gdG8gdGhlIHJlbW90ZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgUGxlYXNlIHJlZmVyIHRvIHRoZSBjcm9zc3RhcCB3aWtpIHBhZ2UgZm9yIGRldGFpbHMgb24gdmVyaWZ5aW5nCisgICAgICAgICAgICAgICAgc3NoIGNvbm5lY3Rpb25zIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9UcmFjaW5nX2FuZF9Qcm9maWxpbmcjc3lzdGVtdGFwJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBBbHNvLCB0aGUgYWJpbGl0eSB0byBzc2ggaW50byB0aGUgdGFyZ2V0IHN5c3RlbSBpcyBub3QgZW5hYmxlZAorICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQgaW4gKi1taW5pbWFsIGltYWdlcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcm9zc3RhcCByb290QDE5Mi4xNjguMS44OCB0cmFjZV9vcGVuLnN0cAorCisgICAgIEVycm9yOiBObyB0YXJnZXQga2VybmVsIGJ1aWxkIGZvdW5kLgorICAgICBEaWQgeW91IGZvcmdldCB0byBjcmVhdGUgYSBsb2NhbCBidWlsZCBvZiB5b3VyIGltYWdlPworCisgICAgICdjcm9zc3RhcCcgcmVxdWlyZXMgYSBsb2NhbCBzZGsgYnVpbGQgb2YgdGhlIHRhcmdldCBzeXN0ZW0KKyAgICAgKG9yIGEgYnVpbGQgdGhhdCBpbmNsdWRlcyAndG9vbHMtcHJvZmlsZScpIGluIG9yZGVyIHRvIGJ1aWxkCisgICAgIGtlcm5lbCBtb2R1bGVzIHRoYXQgY2FuIHByb2JlIHRoZSB0YXJnZXQgc3lzdGVtLgorCisgICAgIFByYWN0aWNhbGx5IHNwZWFraW5nLCB0aGF0IG1lYW5zIHlvdSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAtIElmIHlvdSdyZSBydW5uaW5nIGEgcHJlLWJ1aWx0IGltYWdlLCBkb3dubG9hZCB0aGUgcmVsZWFzZQorICAgICAgICBhbmQvb3IgQlNQIHRhcmJhbGxzIHVzZWQgdG8gYnVpbGQgdGhlIGltYWdlLgorICAgICAgLSBJZiB5b3UncmUgd29ya2luZyBmcm9tIGdpdCBzb3VyY2VzLCBqdXN0IGNsb25lIHRoZSBtZXRhZGF0YQorICAgICAgICBhbmQgQlNQIGxheWVycyBuZWVkZWQgdG8gYnVpbGQgdGhlIGltYWdlIHlvdSdsbCBiZSBib290aW5nLgorICAgICAgLSBNYWtlIHN1cmUgeW91J3JlIHByb3Blcmx5IHNldCB1cCB0byBidWlsZCBhIG5ldyBpbWFnZSAoc2VlCisgICAgICAgIHRoZSBCU1AgUkVBRE1FIGFuZC9vciB0aGUgd2lkZWx5IGF2YWlsYWJsZSBiYXNpYyBkb2N1bWVudGF0aW9uCisgICAgICAgIHRoYXQgZGlzY3Vzc2VzIGhvdyB0byBidWlsZCBpbWFnZXMpLgorICAgICAgLSBCdWlsZCBhbiAtc2RrIHZlcnNpb24gb2YgdGhlIGltYWdlIGUuZy46CisgICAgICAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0by1zZGsKKyAgICAgIE9SCisgICAgICAtIEJ1aWxkIGEgbm9uLXNkayBpbWFnZSBidXQgaW5jbHVkZSB0aGUgcHJvZmlsaW5nIHRvb2xzOgorICAgICAgICAgIFsgZWRpdCBsb2NhbC5jb25mIGFuZCBhZGQgJ3Rvb2xzLXByb2ZpbGUnIHRvIHRoZSBlbmQgb2YKKyAgICAgICAgICAgIHRoZSBFWFRSQV9JTUFHRV9GRUFUVVJFUyB2YXJpYWJsZSBdCisgICAgICAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworCisgICAgIE9uY2UgeW91J3ZlIGJ1aWxkIHRoZSBpbWFnZSBvbiB0aGUgaG9zdCBzeXN0ZW0sIHlvdSdyZSByZWFkeSB0bworICAgICBib290IGl0IChvciB0aGUgZXF1aXZhbGVudCBwcmUtYnVpbHQgaW1hZ2UpIGFuZCB1c2UgJ2Nyb3NzdGFwJworICAgICB0byBwcm9iZSBpdCAoeW91IG5lZWQgdG8gc291cmNlIHRoZSBlbnZpcm9ubWVudCBhcyB1c3VhbCBmaXJzdCk6CisKKyAgICAgICAgJCBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYKKyAgICAgICAgJCBjZCB+L215L3N5c3RlbXRhcC9zY3JpcHRzCisgICAgICAgICQgY3Jvc3N0YXAgcm9vdEAxOTIuMTY4LjEueHh4IG15c2NyaXB0LnN0cAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgU28gZXNzZW50aWFsbHkgd2hhdCB5b3UgbmVlZCB0byBkbyBpcyBidWlsZCBhbiBTREsgaW1hZ2Ugb3IKKyAgICAgICAgICAgIGltYWdlIHdpdGggJ3Rvb2xzLXByb2ZpbGUnIGFzIGRldGFpbGVkIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Byb2ZpbGUtbWFudWFsLWdlbmVyYWwtc2V0dXAnPkdlbmVyYWwgU2V0dXA8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGlzIG1hbnVhbCwgYW5kIGJvb3QgdGhlIHJlc3VsdGluZyB0YXJnZXQgaW1hZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIElmIHlvdSBoYXZlIGEgYnVpbGQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgbXVsdGlwbGUgbWFjaGluZXMsCisgICAgICAgICAgICB5b3UgbmVlZCB0byBoYXZlIHRoZSBNQUNISU5FIHlvdSdyZSBjb25uZWN0aW5nIHRvIHNlbGVjdGVkCisgICAgICAgICAgICBpbiBsb2NhbC5jb25mLCBhbmQgdGhlIGtlcm5lbCBpbiB0aGF0IG1hY2hpbmUncyBidWlsZAorICAgICAgICAgICAgZGlyZWN0b3J5IG11c3QgbWF0Y2ggdGhlIGtlcm5lbCBvbiB0aGUgYm9vdGVkIHN5c3RlbSBleGFjdGx5LAorICAgICAgICAgICAgb3IgeW91J2xsIGdldCB0aGUgYWJvdmUgJ2Nyb3NzdGFwJyBtZXNzYWdlIHdoZW4geW91IHRyeSB0bworICAgICAgICAgICAgaW52b2tlIGEgc2NyaXB0LgorICAgICAgICA8L25vdGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3J1bm5pbmctYS1zY3JpcHQtb24tYS10YXJnZXQnPgorICAgICAgICA8dGl0bGU+UnVubmluZyBhIFNjcmlwdCBvbiBhIFRhcmdldDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHlvdSd2ZSBkb25lIHRoYXQsIHlvdSBzaG91bGQgYmUgYWJsZSB0byBydW4gYSBzeXN0ZW10YXAKKyAgICAgICAgICAgIHNjcmlwdCBvbiB0aGUgdGFyZ2V0OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIC9wYXRoL3RvL3lvY3RvCisgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52CisKKyAgICAgIyMjIFNoZWxsIGVudmlyb25tZW50IHNldCB1cCBmb3IgYnVpbGRzLiAjIyMKKworICAgICBZb3UgY2FuIG5vdyBydW4gJ2JpdGJha2UgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+JworCisgICAgIENvbW1vbiB0YXJnZXRzIGFyZToKKyAgICAgICAgIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICAgY29yZS1pbWFnZS1zYXRvCisgICAgICAgICBtZXRhLXRvb2xjaGFpbgorICAgICAgICAgYWR0LWluc3RhbGxlcgorICAgICAgICAgbWV0YS1pZGUtc3VwcG9ydAorCisgICAgIFlvdSBjYW4gYWxzbyBydW4gZ2VuZXJhdGVkIHFlbXUgaW1hZ2VzIHdpdGggYSBjb21tYW5kIGxpa2UgJ3J1bnFlbXUgcWVtdXg4NicKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9uY2UgeW91J3ZlIGRvbmUgdGhhdCwgeW91IGNhbiBjZCB0byB3aGF0ZXZlciBkaXJlY3RvcnkKKyAgICAgICAgICAgIGNvbnRhaW5zIHlvdXIgc2NyaXB0cyBhbmQgdXNlICdjcm9zc3RhcCcgdG8gcnVuIHRoZSBzY3JpcHQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgL3BhdGgvdG8vbXkvc3lzdGVtYXAvc2NyaXB0CisgICAgICQgY3Jvc3N0YXAgcm9vdEAxOTIuMTY4LjcuMiB0cmFjZV9vcGVuLnN0cAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSWYgeW91IGdldCBhbiBlcnJvciBjb25uZWN0aW5nIHRvIHRoZSB0YXJnZXQgZS5nLjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcm9zc3RhcCByb290QDE5Mi4xNjguNy4yIHRyYWNlX29wZW4uc3RwCisgICAgIGVycm9yIGVzdGFibGlzaGluZyBzc2ggY29ubmVjdGlvbiBvbiByZW1vdGUgJ3Jvb3RAMTkyLjE2OC43LjInCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUcnkgc3NoJ2luZyB0byB0aGUgdGFyZ2V0IGFuZCBzZWUgd2hhdCBoYXBwZW5zOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNzaCByb290QDE5Mi4xNjguNy4yCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBIGxvdCBvZiB0aGUgdGltZSwgY29ubmVjdGlvbiBwcm9ibGVtcyBhcmUgZHVlIHNwZWNpZnlpbmcgYQorICAgICAgICAgICAgd3JvbmcgSVAgYWRkcmVzcyBvciBoYXZpbmcgYSAnaG9zdCBrZXkgdmVyaWZpY2F0aW9uIGVycm9yJy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgZXZlcnl0aGluZyB3b3JrZWQgYXMgcGxhbm5lZCwgeW91IHNob3VsZCBzZWUgc29tZXRoaW5nCisgICAgICAgICAgICBsaWtlIHRoaXMgKGVudGVyIHRoZSBwYXNzd29yZCB3aGVuIHByb21wdGVkLCBvciBwcmVzcyBlbnRlcgorICAgICAgICAgICAgaWYgaXQncyBzZXQgdXAgdG8gdXNlIG5vIHBhc3N3b3JkKToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcm9zc3RhcCByb290QDE5Mi4xNjguNy4yIHRyYWNlX29wZW4uc3RwCisgICAgIHJvb3RAMTkyLjE2OC43LjIncyBwYXNzd29yZDoKKyAgICAgbWF0Y2hib3gtdGVybWluKDEwMzYpIG9wZW4gKCIvdG1wL3Z0ZTNGUzJMVyIsIE9fUkRXUnxPX0NSRUFUfE9fRVhDTHxPX0xBUkdFRklMRSwgMDYwMCkKKyAgICAgbWF0Y2hib3gtdGVybWluKDEwMzYpIG9wZW4gKCIvdG1wL3Z0ZUpNQzdMVyIsIE9fUkRXUnxPX0NSRUFUfE9fRVhDTHxPX0xBUkdFRklMRSwgMDYwMCkKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzeXN0ZW10YXAtZG9jdW1lbnRhdGlvbic+CisgICAgICAgIDx0aXRsZT5Eb2N1bWVudGF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBTeXN0ZW1UYXAgbGFuZ3VhZ2UgcmVmZXJlbmNlIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3NvdXJjZXdhcmUub3JnL3N5c3RlbXRhcC9sYW5ncmVmLyc+U3lzdGVtVGFwIExhbmd1YWdlIFJlZmVyZW5jZTwvdWxpbms+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIExpbmtzIHRvIG90aGVyIFN5c3RlbVRhcCBkb2N1bWVudHMsIHR1dG9yaWFscywgYW5kIGV4YW1wbGVzIGNhbiBiZQorICAgICAgICAgICAgZm91bmQgaGVyZToKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9zeXN0ZW10YXAvZG9jdW1lbnRhdGlvbi5odG1sJz5TeXN0ZW1UYXAgZG9jdW1lbnRhdGlvbiBwYWdlPC91bGluaz4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtbWFudWFsLW9wcm9maWxlJz4KKyAgICA8dGl0bGU+b3Byb2ZpbGU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIG9wcm9maWxlIGl0c2VsZiBpcyBhIGNvbW1hbmQtbGluZSBhcHBsaWNhdGlvbiB0aGF0IHJ1bnMgb24gdGhlCisgICAgICAgIHRhcmdldCBzeXN0ZW0uCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J29wcm9maWxlLXNldHVwJz4KKyAgICAgICAgPHRpdGxlPlNldHVwPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciB0aGlzIHNlY3Rpb24sIHdlJ2xsIGFzc3VtZSB5b3UndmUgYWxyZWFkeSBwZXJmb3JtZWQgdGhlCisgICAgICAgICAgICBiYXNpYyBzZXR1cCBvdXRsaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwcm9maWxlLW1hbnVhbC1nZW5lcmFsLXNldHVwJz5HZW5lcmFsIFNldHVwPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciB0aGUgc2VjdGlvbiB0aGF0IGRlYWxzIHdpdGggcnVubmluZyBvcHJvZmlsZSBmcm9tIHRoZSBjb21tYW5kLWxpbmUsCisgICAgICAgICAgICB3ZSBhc3N1bWUgeW91J3ZlIHNzaCdlZCB0byB0aGUgaG9zdCBhbmQgd2lsbCBiZSBydW5uaW5nCisgICAgICAgICAgICBvcHJvZmlsZSBvbiB0aGUgdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBvcHJvZmlsZXVpIChvcHJvZmlsZS12aWV3ZXIpIGlzIGEgR1VJLWJhc2VkIHByb2dyYW0gdGhhdCBydW5zCisgICAgICAgICAgICBvbiB0aGUgaG9zdCBhbmQgaW50ZXJhY3RzIHJlbW90ZWx5IHdpdGggdGhlIHRhcmdldC4KKyAgICAgICAgICAgIFNlZSB0aGUgb3Byb2ZpbGV1aSBzZWN0aW9uIGZvciB0aGUgZXhhY3Qgc3RlcHMgbmVlZGVkIHRvCisgICAgICAgICAgICBpbnN0YWxsIG9wcm9maWxldWkgb24gdGhlIGhvc3QuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nb3Byb2ZpbGUtYmFzaWMtdXNhZ2UnPgorICAgICAgICA8dGl0bGU+QmFzaWMgVXNhZ2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT3Byb2ZpbGUgYXMgY29uZmlndXJlZCBpbiBZb2N0byBpcyBhIHN5c3RlbS13aWRlIHByb2ZpbGVyCisgICAgICAgICAgICAoaS5lLiB0aGUgdmVyc2lvbiBpbiBZb2N0byBkb2Vzbid0IHlldCBtYWtlIHVzZSBvZiB0aGUKKyAgICAgICAgICAgIHBlcmZfZXZlbnRzIGludGVyZmFjZSB3aGljaCB3b3VsZCBhbGxvdyBpdCB0byBwcm9maWxlCisgICAgICAgICAgICBzcGVjaWZpYyBwcm9jZXNzZXMgYW5kIHdvcmtsb2FkcykuIEl0IHJlbGllcyBvbiBoYXJkd2FyZQorICAgICAgICAgICAgY291bnRlciBzdXBwb3J0IGluIHRoZSBoYXJkd2FyZSAoYnV0IGNhbiBmYWxsIGJhY2sgdG8gYQorICAgICAgICAgICAgdGltZXItYmFzZWQgbW9kZSksIHdoaWNoIG1lYW5zIHRoYXQgaXQgZG9lc24ndCB0YWtlCisgICAgICAgICAgICBhZHZhbnRhZ2Ugb2YgdHJhY2Vwb2ludHMgb3Igb3RoZXIgZXZlbnQgc291cmNlcyBmb3IgZXhhbXBsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgY29uc2lzdHMgb2YgYSBrZXJuZWwgbW9kdWxlIHRoYXQgY29sbGVjdHMgc2FtcGxlcyBhbmQgYQorICAgICAgICAgICAgdXNlcnNwYWNlIGRhZW1vbiB0aGF0IHdyaXRlcyB0aGUgc2FtcGxlIGRhdGEgdG8gZGlzay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlICdvcGNvbnRyb2wnIHNoZWxsIHNjcmlwdCBpcyB1c2VkIGZvciB0cmFuc3BhcmVudGx5CisgICAgICAgICAgICBtYW5hZ2luZyB0aGVzZSBjb21wb25lbnRzIGFuZCBzdGFydGluZyBhbmQgc3RvcHBpbmcKKyAgICAgICAgICAgIHByb2ZpbGVzLCBhbmQgdGhlICdvcHJlcG9ydCcgY29tbWFuZCBpcyB1c2VkIHRvCisgICAgICAgICAgICBkaXNwbGF5IHRoZSByZXN1bHRzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgb3Byb2ZpbGUgZGFlbW9uIHNob3VsZCBhbHJlYWR5IGJlIHJ1bm5pbmcsIGJ1dCBiZWZvcmUKKyAgICAgICAgICAgIHlvdSBzdGFydCBwcm9maWxpbmcsIHlvdSBtYXkgbmVlZCB0byBjaGFuZ2Ugc29tZSBzZXR0aW5ncworICAgICAgICAgICAgYW5kIHNvbWUgb2YgdGhlc2Ugc2V0dGluZ3MgbWF5IHJlcXVpcmUgdGhlIGRhZW1vbiB0byBub3QKKyAgICAgICAgICAgIGJlIHJ1bm5pbmcuIE9uZSBvZiB0aGVzZSBzZXR0aW5ncyBpcyB0aGUgcGF0aCB0byB0aGUKKyAgICAgICAgICAgIHZtbGludXggZmlsZSwgd2hpY2ggeW91J2xsIHdhbnQgdG8gc2V0IHVzaW5nIHRoZSAtLXZtbGludXgKKyAgICAgICAgICAgIG9wdGlvbiBpZiB5b3Ugd2FudCB0aGUga2VybmVsIHByb2ZpbGVkOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXZtbGludXg9L2Jvb3Qvdm1saW51eC1gdW5hbWUgLXJgCisgICAgIFRoZSBwcm9maWxpbmcgZGFlbW9uIGlzIGN1cnJlbnRseSBhY3RpdmUsIHNvIGNoYW5nZXMgdG8gdGhlIGNvbmZpZ3VyYXRpb24KKyAgICAgd2lsbCBiZSB1c2VkIHRoZSBuZXh0IHRpbWUgeW91IHJlc3RhcnQgb3Byb2ZpbGUgYWZ0ZXIgYSAtLXNodXRkb3duIG9yIC0tZGVpbml0LgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgWW91IGNhbiBjaGVjayBpZiB2bWxpbnV4IGZpbGU6IGlzIHNldCB1c2luZyBvcGNvbnRyb2wgLS1zdGF0dXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tc3RhdHVzCisgICAgIERhZW1vbiBwYXVzZWQ6IHBpZCAxMzM0CisgICAgIFNlcGFyYXRlIG9wdGlvbnM6IGxpYnJhcnkKKyAgICAgdm1saW51eCBmaWxlOiBub25lCisgICAgIEltYWdlIGZpbHRlcjogbm9uZQorICAgICBDYWxsLWdyYXBoIGRlcHRoOiA2CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJZiBpdCdzIG5vdCwgeW91IG5lZWQgdG8gc2h1dGRvd24gdGhlIGRhZW1vbiwgYWRkIHRoZSBzZXR0aW5nCisgICAgICAgICAgICBhbmQgcmVzdGFydCB0aGUgZGFlbW9uOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXNodXRkb3duCisgICAgIEtpbGxpbmcgZGFlbW9uLgorCisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tdm1saW51eD0vYm9vdC92bWxpbnV4LWB1bmFtZSAtcmAKKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcGNvbnRyb2wgLS1zdGFydC1kYWVtb24KKyAgICAgVXNpbmcgZGVmYXVsdCBldmVudDogQ1BVX0NMS19VTkhBTFRFRDoxMDAwMDA6MDoxOjEKKyAgICAgVXNpbmcgMi42KyBPUHJvZmlsZSBrZXJuZWwgaW50ZXJmYWNlLgorICAgICBSZWFkaW5nIG1vZHVsZSBpbmZvLgorICAgICBVc2luZyBsb2cgZmlsZSAvdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzL29wcm9maWxlZC5sb2cKKyAgICAgRGFlbW9uIHN0YXJ0ZWQuCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJZiB3ZSBjaGVjayB0aGUgc3RhdHVzIGFnYWluIHdlIG5vdyBzZWUgb3VyIHVwZGF0ZWQgc2V0dGluZ3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tc3RhdHVzCisgICAgIERhZW1vbiBwYXVzZWQ6IHBpZCAxNjQ5CisgICAgIFNlcGFyYXRlIG9wdGlvbnM6IGxpYnJhcnkKKyAgICAgdm1saW51eCBmaWxlOiAvYm9vdC92bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZAorICAgICBJbWFnZSBmaWx0ZXI6IG5vbmUKKyAgICAgQ2FsbC1ncmFwaCBkZXB0aDogNgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgV2UncmUgbm93IGluIGEgcG9zaXRpb24gdG8gcnVuIGEgcHJvZmlsZS4gRm9yIHRoYXQgd2UgdXNlCisgICAgICAgICAgICAnb3Bjb250cm9sIC0tc3RhcnQnOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXN0YXJ0CisgICAgIFByb2ZpbGVyIHJ1bm5pbmcuCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJbiBhbm90aGVyIHdpbmRvdywgcnVuIG91ciB3Z2V0IHdvcmtsb2FkOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHJtIGxpbnV4LTIuNi4xOS4yLnRhci5iejI7IHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz47IHN5bmMKKyAgICAgQ29ubmVjdGluZyB0byBkb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZyAoMTQwLjIxMS4xNjkuNTk6ODApCisgICAgIGxpbnV4LTIuNi4xOS4yLnRhci5iIDEwMCUgfCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip8IDQxNzI3ayAgMDowMDowMCBFVEEKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRvIHN0b3AgdGhlIHByb2ZpbGUgd2UgdXNlICdvcGNvbnRyb2wgLS1zaHV0ZG93bicsIHdoaWNoIG5vdAorICAgICAgICAgICAgb25seSBzdG9wcyB0aGUgcHJvZmlsZSBidXQgc2h1dHMgZG93biB0aGUgZGFlbW9uIGFzIHdlbGw6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tc2h1dGRvd24KKyAgICAgU3RvcHBpbmcgcHJvZmlsaW5nLgorICAgICBLaWxsaW5nIGRhZW1vbi4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9wcm9maWxlIHdyaXRlcyBzYW1wbGUgZGF0YSB0byAvdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzLAorICAgICAgICAgICAgd2hpY2ggeW91IGNhbiBsb29rIGF0IGlmIHlvdSdyZSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhlCisgICAgICAgICAgICBzYW1wbGVzIGFyZSBzdHJ1Y3R1cmVkLiBUaGlzIGlzIGFsc28gaW50ZXJlc3RpbmcgYmVjYXVzZQorICAgICAgICAgICAgaXQncyByZWxhdGVkIHRvIGhvdyB5b3UgZGl2ZSBkb3duIHRvIGdldCBmdXJ0aGVyIGRldGFpbHMKKyAgICAgICAgICAgIGFib3V0IHNwZWNpZmljIGV4ZWN1dGFibGVzIGluIE9Qcm9maWxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBzZWUgdGhlIGRlZmF1bHQgZGlzcGxheSBvdXRwdXQgZm9yIGEgcHJvZmlsZSwgc2ltcGx5IHR5cGUKKyAgICAgICAgICAgICdvcHJlcG9ydCcsIHdoaWNoIHdpbGwgc2hvdyB0aGUgcmVzdWx0cyB1c2luZyB0aGUgZGF0YSBpbgorICAgICAgICAgICAgL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcHJlcG9ydAorCisgICAgIFdBUk5JTkchIFRoZSBPUHJvZmlsZSBrZXJuZWwgZHJpdmVyIHJlcG9ydHMgc2FtcGxlIGJ1ZmZlciBvdmVyZmxvd3MuCisgICAgIFN1Y2ggb3ZlcmZsb3dzIGNhbiByZXN1bHQgaW4gaW5jb3JyZWN0IHNhbXBsZSBhdHRyaWJ1dGlvbiwgaW52YWxpZCBzYW1wbGUKKyAgICAgZmlsZXMgYW5kIG90aGVyIHN5bXB0b21zLiAgU2VlIHRoZSBvcHJvZmlsZWQubG9nIGZvciBkZXRhaWxzLgorICAgICBZb3Ugc2hvdWxkIGFkanVzdCB5b3VyIHNhbXBsaW5nIGZyZXF1ZW5jeSB0byBlbGltaW5hdGUgKG9yIGF0IGxlYXN0IG1pbmltaXplKQorICAgICB0aGVzZSBvdmVyZmxvd3MuCisgICAgIENQVTogSW50ZWwgQXJjaGl0ZWN0dXJhbCBQZXJmbW9uLCBzcGVlZCAxLjNlKzA2IE1IeiAoZXN0aW1hdGVkKQorICAgICBDb3VudGVkIENQVV9DTEtfVU5IQUxURUQgZXZlbnRzIChDbG9jayBjeWNsZXMgd2hlbiBub3QgaGFsdGVkKSB3aXRoIGEgdW5pdCBtYXNrIG9mIDB4MDAgKE5vIHVuaXQgbWFzaykgY291bnQgMTAwMDAwCisgICAgIENQVV9DTEtfVU5IQUxULi4ufAorICAgICAgc2FtcGxlc3wgICAgICAlfAorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICA0NjQzNjUgNzkuODE1NiB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZAorICAgICAgICA2NTEwOCAxMS4xOTA4IG9wcm9maWxlZAorCSAgICAgQ1BVX0NMS19VTkhBTFQuLi58CisJICAgICAgIHNhbXBsZXN8ICAgICAgJXwKKyAJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAJICAgICAgICAgNjQ0MTYgOTguOTM3MiBvcHJvZmlsZWQKKyAJICAgICAgICAgICA2OTIgIDEuMDYyOCBsaWJjLTIuMTYuc28KKyAgICAgICAgMzY5NTkgIDYuMzUyNiBuby12bWxpbnV4CisgICAgICAgICA0Mzc4ICAwLjc1MjUgYnVzeWJveAorCSAgICAgQ1BVX0NMS19VTkhBTFQuLi58CisJICAgICAgIHNhbXBsZXN8ICAgICAgJXwKKwkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLQorCSAgICAgICAgICAyODQ0IDY0Ljk2MTIgbGliYy0yLjE2LnNvCisJICAgICAgICAgIDEzMzcgMzAuNTM5MSBidXN5Ym94CisJICAgICAgICAgICAxOTMgIDQuNDA4NCBsZC0yLjE2LnNvCisJICAgICAgICAgICAgIDIgIDAuMDQ1NyBsaWJuc3NfY29tcGF0LTIuMTYuc28KKwkgICAgICAgICAgICAgMSAgMC4wMjI4IGxpYm5zbC0yLjE2LnNvCisJICAgICAgICAgICAgIDEgIDAuMDIyOCBsaWJuc3NfZmlsZXMtMi4xNi5zbworICAgICAgICAgNDM0NCAgMC43NDY3IGJhc2gKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgMjY1NyA2MS4xNjQ4IGJhc2gKKwkgICAgICAgICAgMTY2NSAzOC4zMjg3IGxpYmMtMi4xNi5zbworCSAgICAgICAgICAgIDE4ICAwLjQxNDQgbGQtMi4xNi5zbworCSAgICAgICAgICAgICAzICAwLjA2OTEgbGlidGluZm8uc28uNS45CisJICAgICAgICAgICAgIDEgIDAuMDIzMCBsaWJkbC0yLjE2LnNvCisgICAgICAgICAzMTE4ICAwLjUzNTkgbmZfY29ubnRyYWNrCisgICAgICAgICAgNjg2ICAwLjExNzkgbWF0Y2hib3gtdGVybWluYWwKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgIDIxNCAzMS4xOTUzIGxpYmdsaWItMi4wLnNvLjAuMzIwMC40CisJICAgICAgICAgICAxMTQgMTYuNjE4MSBsaWJjLTIuMTYuc28KKwkgICAgICAgICAgICA3OSAxMS41MTYwIGxpYmNhaXJvLnNvLjIuMTEyMDAuMgorCSAgICAgICAgICAgIDc4IDExLjM3MDMgbGliZ2RrLXgxMS0yLjAuc28uMC4yNDAwLjgKKwkgICAgICAgICAgICA1MSAgNy40MzQ0IGxpYnB0aHJlYWQtMi4xNi5zbworCSAgICAgICAgICAgIDQ1ICA2LjU1OTggbGliZ29iamVjdC0yLjAuc28uMC4zMjAwLjQKKwkgICAgICAgICAgICAyOSAgNC4yMjc0IGxpYnZ0ZS5zby45LjI4MDAuMgorCSAgICAgICAgICAgIDI1ICAzLjY0NDMgbGliWDExLnNvLjYuMy4wCisJICAgICAgICAgICAgMTkgIDIuNzY5NyBsaWJ4Y2Iuc28uMS4xLjAKKwkgICAgICAgICAgICAxNyAgMi40NzgxIGxpYmd0ay14MTEtMi4wLnNvLjAuMjQwMC44CisJICAgICAgICAgICAgMTIgIDEuNzQ5MyBsaWJydC0yLjE2LnNvCisJICAgICAgICAgICAgIDMgIDAuNDM3MyBsaWJYcmVuZGVyLnNvLjEuMy4wCisgICAgICAgICAgNjcxICAwLjExNTMgZW1nZAorICAgICAgICAgIDQxMSAgMC4wNzA2IG5mX2Nvbm50cmFja19pcHY0CisgICAgICAgICAgMzkxICAwLjA2NzIgaXB0YWJsZV9uYXQKKyAgICAgICAgICAzNzggIDAuMDY1MCBuZl9uYXQKKyAgICAgICAgICAyNjMgIDAuMDQ1MiBYb3JnCisJICAgICBDUFVfQ0xLX1VOSEFMVC4uLnwKKwkgICAgICAgc2FtcGxlc3wgICAgICAlfAorCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgICAgICAgICAxMDYgNDAuMzA0MiBYb3JnCisJICAgICAgICAgICAgNTMgMjAuMTUyMSBsaWJjLTIuMTYuc28KKwkgICAgICAgICAgICAzMSAxMS43ODcxIGxpYnBpeG1hbi0xLnNvLjAuMjcuMgorCSAgICAgICAgICAgIDI2ICA5Ljg4NTkgZW1nZF9kcnYuc28KKwkgICAgICAgICAgICAxNiAgNi4wODM3IGxpYmVtZ2RzcnZfdW0uc28uMS41LjE1LjMyMjYKKwkgICAgICAgICAgICAxMSAgNC4xODI1IGxpYkVNR0QyZC5zby4xLjUuMTUuMzIyNgorCSAgICAgICAgICAgICA5ICAzLjQyMjEgbGliZmIuc28KKwkgICAgICAgICAgICAgNyAgMi42NjE2IGxpYnB0aHJlYWQtMi4xNi5zbworCSAgICAgICAgICAgICAxICAwLjM4MDIgbGlidWRldi5zby4wLjkuMworCSAgICAgICAgICAgICAxICAwLjM4MDIgbGliZHJtLnNvLjIuNC4wCisJICAgICAgICAgICAgIDEgIDAuMzgwMiBsaWJleHRtb2Quc28KKwkgICAgICAgICAgICAgMSAgMC4zODAyIG1vdXNlX2Rydi5zbworICAgICAuCisgICAgIC4KKyAgICAgLgorICAgICAgICAgICA5ICAwLjAwMTUgY29ubm1hbmQKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgICAgNCA0NC40NDQ0IGxpYmdsaWItMi4wLnNvLjAuMzIwMC40CisJICAgICAgICAgICAgIDIgMjIuMjIyMiBsaWJwdGhyZWFkLTIuMTYuc28KKwkgICAgICAgICAgICAgMSAxMS4xMTExIGNvbm5tYW5kCisJICAgICAgICAgICAgIDEgMTEuMTExMSBsaWJjLTIuMTYuc28KKwkgICAgICAgICAgICAgMSAxMS4xMTExIGxpYnJ0LTIuMTYuc28KKyAgICAgICAgICAgIDYgIDAuMDAxMCBvcHJvZmlsZS1zZXJ2ZXIKKyAgICAgCSBDUFVfQ0xLX1VOSEFMVC4uLnwKKwkgICAgICAgc2FtcGxlc3wgICAgICAlfAorCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgICAgICAgICAgIDMgNTAuMDAwMCBsaWJjLTIuMTYuc28KKwkgICAgICAgICAgICAgMSAxNi42NjY3IG9wcm9maWxlLXNlcnZlcgorCSAgICAgICAgICAgICAxIDE2LjY2NjcgbGlicHRocmVhZC0yLjE2LnNvCisJICAgICAgICAgICAgIDEgMTYuNjY2NyBsaWJnbGliLTIuMC5zby4wLjMyMDAuNAorICAgICAgICAgICA1IDguNmUtMDQgZ2NvbmZkLTIKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgICAgMiA0MC4wMDAwIGxpYmRidXMtMS5zby4zLjcuMgorCSAgICAgICAgICAgICAyIDQwLjAwMDAgbGliZ2xpYi0yLjAuc28uMC4zMjAwLjQKKwkgICAgICAgICAgICAgMSAyMC4wMDAwIGxpYmMtMi4xNi5zbworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIG91dHB1dCBhYm92ZSBzaG93cyB0aGUgYnJlYWtkb3duIG9yIHNhbXBsZXMgYnkgYm90aAorICAgICAgICAgICAgbnVtYmVyIG9mIHNhbXBsZXMgYW5kIHBlcmNlbnRhZ2UgZm9yIGVhY2ggZXhlY3V0YWJsZS4KKyAgICAgICAgICAgIFdpdGhpbiBhbiBleGVjdXRhYmxlLCB0aGUgc2FtcGxlIGNvdW50cyBhcmUgYnJva2VuIGRvd24KKyAgICAgICAgICAgIGZ1cnRoZXIgaW50byBleGVjdXRhYmxlIGFuZCBzaGFyZWQgbGlicmFyaWVzIChEU09zKSB1c2VkCisgICAgICAgICAgICBieSB0aGUgZXhlY3V0YWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gZ2V0IGV2ZW4gbW9yZSBkZXRhaWxlZCBicmVha2Rvd25zIGJ5IGZ1bmN0aW9uLCB3ZSBuZWVkIHRvCisgICAgICAgICAgICBoYXZlIHRoZSBmdWxsIHBhdGhzIHRvIHRoZSBEU09zLCB3aGljaCB3ZSBjYW4gZ2V0IGJ5CisgICAgICAgICAgICB1c2luZyAtZiB3aXRoIG9wcmVwb3J0OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wcmVwb3J0IC1mCisKKyAgICAgQ1BVOiBJbnRlbCBBcmNoaXRlY3R1cmFsIFBlcmZtb24sIHNwZWVkIDEuM2UrMDYgTUh6IChlc3RpbWF0ZWQpCisgICAgIENvdW50ZWQgQ1BVX0NMS19VTkhBTFRFRCBldmVudHMgKENsb2NrIGN5Y2xlcyB3aGVuIG5vdCBoYWx0ZWQpIHdpdGggYSB1bml0IG1hc2sgb2YgMHgwMCAoTm8gdW5pdCBtYXNrKSBjb3VudCAxMDAwMDAKKyAgICAgQ1BVX0NMS19VTkhBTFQuLi58CisgICAgICBzYW1wbGVzfCAgICAgICV8CisKKyAgICAgICA0NjQzNjUgNzkuODE1NiAvYm9vdC92bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZAorICAgICAgIDY1MTA4IDExLjE5MDggL3Vzci9iaW4vb3Byb2ZpbGVkCisJICAgICBDUFVfQ0xLX1VOSEFMVC4uLnwKKwkgICAgICAgc2FtcGxlc3wgICAgICAlfAorCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgICAgICAgNjQ0MTYgOTguOTM3MiAvdXNyL2Jpbi9vcHJvZmlsZWQKKwkgICAgICAgICAgIDY5MiAgMS4wNjI4IC9saWIvbGliYy0yLjE2LnNvCisgICAgICAgIDM2OTU5ICA2LjM1MjYgL25vLXZtbGludXgKKyAgICAgICAgIDQzNzggIDAuNzUyNSAvYmluL2J1c3lib3gKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgMjg0NCA2NC45NjEyIC9saWIvbGliYy0yLjE2LnNvCisJICAgICAgICAgIDEzMzcgMzAuNTM5MSAvYmluL2J1c3lib3gKKwkgICAgICAgICAgIDE5MyAgNC40MDg0IC9saWIvbGQtMi4xNi5zbworCSAgICAgICAgICAgICAyICAwLjA0NTcgL2xpYi9saWJuc3NfY29tcGF0LTIuMTYuc28KKwkgICAgICAgICAgICAgMSAgMC4wMjI4IC9saWIvbGlibnNsLTIuMTYuc28KKwkgICAgICAgICAgICAgMSAgMC4wMjI4IC9saWIvbGlibnNzX2ZpbGVzLTIuMTYuc28KKyAgICAgICAgIDQzNDQgIDAuNzQ2NyAvYmluL2Jhc2gKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgMjY1NyA2MS4xNjQ4IC9iaW4vYmFzaAorCSAgICAgICAgICAxNjY1IDM4LjMyODcgL2xpYi9saWJjLTIuMTYuc28KKwkgICAgICAgICAgICAxOCAgMC40MTQ0IC9saWIvbGQtMi4xNi5zbworCSAgICAgICAgICAgICAzICAwLjA2OTEgL2xpYi9saWJ0aW5mby5zby41LjkKKwkgICAgICAgICAgICAgMSAgMC4wMjMwIC9saWIvbGliZGwtMi4xNi5zbworICAgICAuCisgICAgIC4KKyAgICAgLgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVXNpbmcgdGhlIHBhdGhzIHNob3duIGluIHRoZSBhYm92ZSBvdXRwdXQgYW5kIHRoZSAtbCBvcHRpb24gdG8KKyAgICAgICAgICAgIG9wcmVwb3J0LCB3ZSBjYW4gc2VlIGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBoaXRzIGluIHRoZQorICAgICAgICAgICAgcHJvZmlsZSBhbmQgdGhlaXIgc2FtcGxlIGNvdW50cyBhbmQgcGVyY2VudGFnZXMuIEhlcmUncyBhCisgICAgICAgICAgICBwb3J0aW9uIG9mIHdoYXQgd2UgZ2V0IGZvciB0aGUga2VybmVsOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wcmVwb3J0IC1sIC9ib290L3ZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkCisKKyAgICAgQ1BVOiBJbnRlbCBBcmNoaXRlY3R1cmFsIFBlcmZtb24sIHNwZWVkIDEuM2UrMDYgTUh6IChlc3RpbWF0ZWQpCisgICAgIENvdW50ZWQgQ1BVX0NMS19VTkhBTFRFRCBldmVudHMgKENsb2NrIGN5Y2xlcyB3aGVuIG5vdCBoYWx0ZWQpIHdpdGggYSB1bml0IG1hc2sgb2YgMHgwMCAoTm8gdW5pdCBtYXNrKSBjb3VudCAxMDAwMDAKKyAgICAgc2FtcGxlcyAgJSAgICAgICAgc3ltYm9sIG5hbWUKKyAgICAgMjMzOTgxICAgNTAuMzg3MyAgaW50ZWxfaWRsZQorICAgICAxNTQzNyAgICAgMy4zMjQzICByYl9nZXRfcmVhZGVyX3BhZ2UKKyAgICAgMTQ1MDMgICAgIDMuMTIzMiAgcmluZ19idWZmZXJfY29uc3VtZQorICAgICAxNDA5MiAgICAgMy4wMzQ3ICBtdXRleF9zcGluX29uX293bmVyCisgICAgIDEzMDI0ICAgICAyLjgwNDcgIHJlYWRfaHBldAorICAgICA4MDM5ICAgICAgMS43MzEyICBzdWJfcHJlZW1wdF9jb3VudAorICAgICA3MDk2ICAgICAgMS41MjgxICBpb3JlYWQzMgorICAgICA2OTk3ICAgICAgMS41MDY4ICBhZGRfcHJlZW1wdF9jb3VudAorICAgICAzOTg1ICAgICAgMC44NTgyICByYl9hZHZhbmNlX3JlYWRlcgorICAgICAzNDg4ICAgICAgMC43NTExICBhZGRfZXZlbnRfZW50cnkKKyAgICAgMzMwMyAgICAgIDAuNzExMyAgZ2V0X3BhcmVudF9pcAorICAgICAzMTA0ICAgICAgMC42Njg0ICByYl9idWZmZXJfcGVlaworICAgICAyOTYwICAgICAgMC42Mzc0ICBvcF9jcHVfYnVmZmVyX3JlYWRfZW50cnkKKyAgICAgMjYxNCAgICAgIDAuNTYyOSAgc3luY19idWZmZXIKKyAgICAgMjU0NSAgICAgIDAuNTQ4MSAgZGVidWdfc21wX3Byb2Nlc3Nvcl9pZAorICAgICAyNDU2ICAgICAgMC41Mjg5ICBvaGNpX2lycQorICAgICAyMzk3ICAgICAgMC41MTYyICBtZW1zZXQKKyAgICAgMjM0OSAgICAgIDAuNTA1OSAgX19jb3B5X3RvX3VzZXJfbGwKKyAgICAgMjE4NSAgICAgIDAuNDcwNSAgcmluZ19idWZmZXJfZXZlbnRfbGVuZ3RoCisgICAgIDE5MTggICAgICAwLjQxMzAgIGluX2xvY2tfZnVuY3Rpb25zCisgICAgIDE4NTAgICAgICAwLjM5ODQgIF9fc2NoZWR1bGUKKyAgICAgMTc2NyAgICAgIDAuMzgwNSAgX19jb3B5X2Zyb21fdXNlcl9sbF9ub3plcm8KKyAgICAgMTU3NSAgICAgIDAuMzM5MiAgcmJfZXZlbnRfZGF0YV9sZW5ndGgKKyAgICAgMTI1NiAgICAgIDAuMjcwNSAgbWVtY3B5CisgICAgIDEyMzMgICAgICAwLjI2NTUgIHN5c3RlbV9jYWxsCisgICAgIDEyMTMgICAgICAwLjI2MTIgIG1lbnVfc2VsZWN0CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBOb3RpY2UgdGhhdCBhYm92ZSB3ZSBzZWUgYW4gZW50cnkgZm9yIHRoZSBfX2NvcHlfdG9fdXNlcl9sbCgpCisgICAgICAgICAgICBmdW5jdGlvbiB0aGF0IHdlJ3ZlIGxvb2tlZCBhdCB3aXRoIG90aGVyIHByb2ZpbGVycyBhcyB3ZWxsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlJ3Mgd2hhdCB3ZSBnZXQgd2hlbiB3ZSBkbyB0aGUgc2FtZSB0aGluZyBmb3IgdGhlCisgICAgICAgICAgICBidXN5Ym94IGV4ZWN1dGFibGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENQVTogSW50ZWwgQXJjaGl0ZWN0dXJhbCBQZXJmbW9uLCBzcGVlZCAxLjNlKzA2IE1IeiAoZXN0aW1hdGVkKQorICAgICBDb3VudGVkIENQVV9DTEtfVU5IQUxURUQgZXZlbnRzIChDbG9jayBjeWNsZXMgd2hlbiBub3QgaGFsdGVkKSB3aXRoIGEgdW5pdCBtYXNrIG9mIDB4MDAgKE5vIHVuaXQgbWFzaykgY291bnQgMTAwMDAwCisgICAgIHNhbXBsZXMgICUgICAgICAgIGltYWdlIG5hbWUgICAgICAgICAgICAgICBzeW1ib2wgbmFtZQorICAgICAzNDkgICAgICAgOC40MTk4ICBidXN5Ym94ICAgICAgICAgICAgICAgICAgcmV0cmlldmVfZmlsZV9kYXRhCisgICAgIDMwOCAgICAgICA3LjQzMDYgIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfSU9fZmlsZV94c2dldG4KKyAgICAgMjgzICAgICAgIDYuODI3NSAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIF9fcmVhZF9ub2NhbmNlbAorICAgICAyMzUgICAgICAgNS42Njk1ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgc3lzY2FsbAorICAgICAyMzMgICAgICAgNS42MjEyICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgY2xlYXJlcnIKKyAgICAgMjE1ICAgICAgIDUuMTg3MCAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIGZyZWFkCisgICAgIDE4MSAgICAgICA0LjM2NjcgIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfX3dyaXRlX25vY2FuY2VsCisgICAgIDE1OCAgICAgICAzLjgxMTggIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfX3VuZGVyZmxvdworICAgICAxNTEgICAgICAgMy42NDI5ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgX2RsX2FkZHIKKyAgICAgMTUwICAgICAgIDMuNjE4OCAgYnVzeWJveCAgICAgICAgICAgICAgICAgIHByb2dyZXNzX21ldGVyCisgICAgIDE1MCAgICAgICAzLjYxODggIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfX3BvbGxfbm9jYW5jZWwKKyAgICAgMTQ4ICAgICAgIDMuNTcwNiAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIF9JT19maWxlX3VuZGVyZmxvd0BAR0xJQkNfMi4xCisgICAgIDEzNyAgICAgICAzLjMwNTIgIGJ1c3lib3ggICAgICAgICAgICAgICAgICBzYWZlX3BvbGwKKyAgICAgMTI1ICAgICAgIDMuMDE1NyAgYnVzeWJveCAgICAgICAgICAgICAgICAgIGJiX3Byb2dyZXNzX3VwZGF0ZQorICAgICAxMjIgICAgICAgMi45NDMzICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgX194ODYuZ2V0X3BjX3RodW5rLmJ4CisgICAgIDk1ICAgICAgICAyLjI5MTkgIGJ1c3lib3ggICAgICAgICAgICAgICAgICBmdWxsX3dyaXRlCisgICAgIDgxICAgICAgICAxLjk1NDIgIGJ1c3lib3ggICAgICAgICAgICAgICAgICBzYWZlX3dyaXRlCisgICAgIDc3ICAgICAgICAxLjg1NzcgIGJ1c3lib3ggICAgICAgICAgICAgICAgICB4d3JpdGUKKyAgICAgNzIgICAgICAgIDEuNzM3MCAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIF9JT19maWxlX3JlYWQKKyAgICAgNzEgICAgICAgIDEuNzEyOSAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIF9JT19zZ2V0bgorICAgICA2NyAgICAgICAgMS42MTY0ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgcG9sbAorICAgICA1MiAgICAgICAgMS4yNTQ1ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgX0lPX3N3aXRjaF90b19nZXRfbW9kZQorICAgICA0NSAgICAgICAgMS4wODU2ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgcmVhZAorICAgICAzNCAgICAgICAgMC44MjAzICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgd3JpdGUKKyAgICAgMzIgICAgICAgIDAuNzcyMCAgYnVzeWJveCAgICAgICAgICAgICAgICAgIG1vbm90b25pY19zZWMKKyAgICAgMjUgICAgICAgIDAuNjAzMSAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIHZmcHJpbnRmCisgICAgIDIyICAgICAgICAwLjUzMDggIGJ1c3lib3ggICAgICAgICAgICAgICAgICBnZXRfbW9ubworICAgICAxNCAgICAgICAgMC4zMzc4ICBsZC0yLjE2LnNvICAgICAgICAgICAgICAgc3RyY21wCisgICAgIDE0ICAgICAgICAwLjMzNzggIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfX3g4Ni5nZXRfcGNfdGh1bmsuY3gKKyAgICAgLgorICAgICAuCisgICAgIC4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFNpbmNlIHdlIHJlY29yZGVkIHRoZSBwcm9maWxlIHdpdGggYSBjYWxsY2hhaW4gZGVwdGggb2YgNiwgd2UKKyAgICAgICAgICAgIHNob3VsZCBiZSBhYmxlIHRvIHNlZSBvdXIgX19jb3B5X3RvX3VzZXJfbGwoKSBjYWxsY2hhaW5zIGluCisgICAgICAgICAgICB0aGUgb3V0cHV0LCBhbmQgaW5kZWVkIHdlIGNhbiBpZiB3ZSBzZWFyY2ggYXJvdW5kIGEgYml0IGluCisgICAgICAgICAgICB0aGUgJ29wcmVwb3J0IC0tY2FsbGdyYXBoJyBvdXRwdXQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3ByZXBvcnQgLS1jYWxsZ3JhcGggL2Jvb3Qvdm1saW51eC0zLjQuMTEteW9jdG8tc3RhbmRhcmQKKworICAgICAgIDM5MiAgICAgICA2Ljk2MzkgIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIHNvY2tfYWlvX3JlYWQKKyAgICAgICA3MzYgICAgICAxMy4wNzUxICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBfX2dlbmVyaWNfZmlsZV9haW9fd3JpdGUKKyAgICAgICAzMjU1ICAgICA1Ny44MjU1ICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBpbmV0X3JlY3Ztc2cKKyAgICAgNzg1ICAgICAgIDAuMTY5MCAgdm1saW51eC0zLjQuMTEteW9jdG8tc3RhbmRhcmQgdGNwX3JlY3Ztc2cKKyAgICAgICAxNzkwICAgICAzMS43OTQwICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBsb2NhbF9iaF9lbmFibGUKKyAgICAgICAxMjM4ICAgICAyMS45ODkzICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBfX2tmcmVlX3NrYgorICAgICAgIDk5MiAgICAgIDE3LjYxOTkgIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIGxvY2tfc29ja19uZXN0ZWQKKyAgICAgICA3ODUgICAgICAxMy45NDMyICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCB0Y3BfcmVjdm1zZyBbc2VsZl0KKyAgICAgICA1MjUgICAgICAgOS4zMjUwICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCByZWxlYXNlX3NvY2sKKyAgICAgICAxMTIgICAgICAgMS45ODkzICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCB0Y3BfY2xlYW51cF9yYnVmCisgICAgICAgNzIgICAgICAgIDEuMjc4OSAgdm1saW51eC0zLjQuMTEteW9jdG8tc3RhbmRhcmQgc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMKKworICAgICAxNzAgICAgICAgMC4wMzY2ICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYworICAgICAgIDE0OTEgICAgIDczLjMwMzggIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIG1lbWNweV90b2lvdmVjCisgICAgICAgMzI3ICAgICAgMTYuMDc2NyAgdm1saW51eC0zLjQuMTEteW9jdG8tc3RhbmRhcmQgc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMKKyAgICAgICAxNzAgICAgICAgOC4zNTc5ICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyBbc2VsZl0KKyAgICAgICAyMCAgICAgICAgMC45ODMzICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBjb3B5X3RvX3VzZXIKKworICAgICAgIDI1ODggICAgIDk4LjI5MDkgIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIGNvcHlfdG9fdXNlcgorICAgICAyMzQ5ICAgICAgMC41MDU5ICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBfX2NvcHlfdG9fdXNlcl9sbAorICAgICAgIDIzNDkgICAgIDg5LjIxMzggIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIF9fY29weV90b191c2VyX2xsIFtzZWxmXQorICAgICAgIDE2NiAgICAgICA2LjMwNDYgIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIGRvX3BhZ2VfZmF1bHQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFJlbWVtYmVyIHRoYXQgYnkgZGVmYXVsdCBPUHJvZmlsZSBzZXNzaW9ucyBhcmUgY3VtdWxhdGl2ZQorICAgICAgICAgICAgaS5lLiBpZiB5b3Ugc3RhcnQgYW5kIHN0b3AgYSBwcm9maWxpbmcgc2Vzc2lvbiwgdGhlbiBzdGFydCBhCisgICAgICAgICAgICBuZXcgb25lLCB0aGUgbmV3IG9uZSB3aWxsIG5vdCBlcmFzZSB0aGUgcHJldmlvdXMgcnVuKHMpIGJ1dAorICAgICAgICAgICAgd2lsbCBidWlsZCBvbiBpdC4gSWYgeW91IHdhbnQgdG8gcmVzdGFydCBhIHByb2ZpbGUgZnJvbSBzY3JhdGNoLAorICAgICAgICAgICAgeW91IG5lZWQgdG8gcmVzZXQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tcmVzZXQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdvcHJvZmlsZXVpLWEtZ3VpLWZvci1vcHJvZmlsZSc+CisgICAgICAgIDx0aXRsZT5PUHJvZmlsZVVJIC0gQSBHVUkgZm9yIE9Qcm9maWxlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvY3RvIGFsc28gc3VwcG9ydHMgYSBncmFwaGljYWwgVUkgZm9yIGNvbnRyb2xsaW5nIGFuZCB2aWV3aW5nCisgICAgICAgICAgICBPUHJvZmlsZSB0cmFjZXMsIGNhbGxlZCBPUHJvZmlsZVVJLiBUbyB1c2UgaXQsIHlvdSBmaXJzdCBuZWVkCisgICAgICAgICAgICB0byBjbG9uZSB0aGUgb3Byb2ZpbGV1aSBnaXQgcmVwbywgdGhlbiBjb25maWd1cmUsIGJ1aWxkLCBhbmQKKyAgICAgICAgICAgIGluc3RhbGwgaXQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFt0cnpAZW1wYW5hZGEgdG1wXSQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wcm9maWxldWkKKyAgICAgW3RyekBlbXBhbmFkYSB0bXBdJCBjZCBvcHJvZmlsZXVpCisgICAgIFt0cnpAZW1wYW5hZGEgb3Byb2ZpbGV1aV0kIC4vYXV0b2dlbi5zaAorICAgICBbdHJ6QGVtcGFuYWRhIG9wcm9maWxldWldJCBzdWRvIG1ha2UgaW5zdGFsbAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgT3Byb2ZpbGVVSSByZXBsYWNlcyB0aGUgJ29wcmVwb3J0JyBmdW5jdGlvbmFsaXR5IHdpdGggYSBHVUksCisgICAgICAgICAgICBhbmQgbm9ybWFsbHkgZG9lc24ndCByZXF1aXJlIHRoZSB1c2VyIHRvIHVzZSAnb3Bjb250cm9sJyBlaXRoZXIuCisgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBwcm9maWxlIHRoZSBrZXJuZWwsIGhvd2V2ZXIsIHlvdSBuZWVkIHRvIGVpdGhlcgorICAgICAgICAgICAgdXNlIHRoZSBVSSB0byBzcGVjaWZ5IGEgdm1saW51eCBvciB1c2UgJ29wY29udHJvbCcgdG8gc3BlY2lmeQorICAgICAgICAgICAgaXQgb24gdGhlIHRhcmdldDoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmlyc3QsIG9uIHRoZSB0YXJnZXQsIGNoZWNrIGlmIHZtbGludXggZmlsZTogaXMgc2V0OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXN0YXR1cworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSWYgbm90OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXNodXRkb3duCisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tdm1saW51eD0vYm9vdC92bWxpbnV4LWB1bmFtZSAtcmAKKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcGNvbnRyb2wgLS1zdGFydC1kYWVtb24KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE5vdywgc3RhcnQgdGhlIG9wcm9maWxlIFVJIG9uIHRoZSBob3N0IHN5c3RlbToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgW3RyekBlbXBhbmFkYSBvcHJvZmlsZXVpXSQgb3Byb2ZpbGUtdmlld2VyCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUbyBydW4gYSBwcm9maWxlIG9uIHRoZSByZW1vdGUgc3lzdGVtLCBmaXJzdCBjb25uZWN0IHRvIHRoZQorICAgICAgICAgICAgcmVtb3RlIHN5c3RlbSBieSBwcmVzc2luZyB0aGUgJ0Nvbm5lY3QnIGJ1dHRvbiBhbmQgc3VwcGx5aW5nCisgICAgICAgICAgICB0aGUgSVAgYWRkcmVzcyBhbmQgcG9ydCBvZiB0aGUgcmVtb3RlIHN5c3RlbSAodGhlIGRlZmF1bHQKKyAgICAgICAgICAgIHBvcnQgaXMgNDIyNCkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBvcHJvZmlsZSBzZXJ2ZXIgc2hvdWxkIGF1dG9tYXRpY2FsbHkgYmUgc3RhcnRlZCBhbHJlYWR5LgorICAgICAgICAgICAgSWYgbm90LCB0aGUgY29ubmVjdGlvbiB3aWxsIGZhaWwgYW5kIHlvdSBlaXRoZXIgdHlwZWQgaW4gdGhlCisgICAgICAgICAgICB3cm9uZyBJUCBhZGRyZXNzIGFuZCBwb3J0IChzZWUgYmVsb3cpLCBvciB5b3UgbmVlZCB0byBzdGFydAorICAgICAgICAgICAgdGhlIHNlcnZlciB5b3Vyc2VsZjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcHJvZmlsZS1zZXJ2ZXIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9yLCB0byBzcGVjaWZ5IGEgc3BlY2lmaWMgcG9ydDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcHJvZmlsZS1zZXJ2ZXIgLS1wb3J0IDg4ODgKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9uY2UgY29ubmVjdGVkLCBwcmVzcyB0aGUgJ1N0YXJ0JyBidXR0b24gYW5kIHRoZW4gcnVuIHRoZQorICAgICAgICAgICAgd2dldCB3b3JrbG9hZCBvbiB0aGUgcmVtb3RlIHN5c3RlbToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBybSBsaW51eC0yLjYuMTkuMi50YXIuYnoyOyB3Z2V0IDx1bGluayB1cmw9J2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyJz5odHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6MjwvdWxpbms+OyBzeW5jCisgICAgIENvbm5lY3RpbmcgdG8gZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcgKDE0MC4yMTEuMTY5LjU5OjgwKQorICAgICBsaW51eC0yLjYuMTkuMi50YXIuYiAxMDAlIHwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfCA0MTcyN2sgIDA6MDA6MDAgRVRBCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBPbmNlIHRoZSB3b3JrbG9hZCBjb21wbGV0ZXMsIHByZXNzIHRoZSAnU3RvcCcgYnV0dG9uLiBBdCB0aGF0CisgICAgICAgICAgICBwb2ludCB0aGUgT1Byb2ZpbGUgdmlld2VyIHdpbGwgZG93bmxvYWQgdGhlIHByb2ZpbGUgZmlsZXMgaXQncworICAgICAgICAgICAgY29sbGVjdGVkICh0aGlzIG1heSB0YWtlIHNvbWUgdGltZSwgZXNwZWNpYWxseSBpZiB0aGUga2VybmVsCisgICAgICAgICAgICB3YXMgcHJvZmlsZWQpLiBXaGlsZSBpdCBkb3dubG9hZHMgdGhlIGZpbGVzLCB5b3Ugc2hvdWxkIHNlZQorICAgICAgICAgICAgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB0aGUgcHJvZmlsZSBmaWxlcyBoYXZlIGJlZW4gcmV0cmlldmVkLCB5b3Ugc2hvdWxkIHNlZSBhCisgICAgICAgICAgICBsaXN0IG9mIHRoZSBwcm9jZXNzZXMgdGhhdCB3ZXJlIHByb2ZpbGVkOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvb3Byb2ZpbGV1aS1wcm9jZXNzZXMucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IHNlbGVjdCBvbmUgb2YgdGhlbSwgeW91IHNob3VsZCBzZWUgYWxsIHRoZSBzeW1ib2xzIHRoYXQKKyAgICAgICAgICAgIHdlcmUgaGl0IGR1cmluZyB0aGUgcHJvZmlsZS4gU2VsZWN0aW5nIG9uZSBvZiB0aGVtIHdpbGwgc2hvdyBhCisgICAgICAgICAgICBsaXN0IG9mIGNhbGxlcnMgYW5kIGNhbGxlZXMgb2YgdGhlIGNob3NlbiBmdW5jdGlvbiBpbiB0d28KKyAgICAgICAgICAgIHBhbmVzIGJlbG93IHRoZSB0b3AgcGFuZS4gRm9yIGV4YW1wbGUsIGhlcmUncyB3aGF0IHdlIHNlZQorICAgICAgICAgICAgd2hlbiB3ZSBzZWxlY3QgX19jb3B5X3RvX3VzZXJfbGwoKToKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL29wcm9maWxldWktY29weS10by11c2VyLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIGFub3RoZXIgZXhhbXBsZSwgd2UgY2FuIGxvb2sgYXQgdGhlIGJ1c3lib3ggcHJvY2VzcyBhbmQgc2VlCisgICAgICAgICAgICB0aGF0IHRoZSBwcm9ncmVzcyBtZXRlciBtYWRlIGEgc3lzdGVtIGNhbGw6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9vcHJvZmlsZXVpLWJ1c3lib3gucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdvcHJvZmlsZS1kb2N1bWVudGF0aW9uJz4KKyAgICAgICAgPHRpdGxlPkRvY3VtZW50YXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW9jdG8gYWxyZWFkeSBoYXMgc29tZSBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIHVwIGFuZCB1c2luZworICAgICAgICAgICAgT1Byb2ZpbGUgYW5kIG9wcm9maWxldWkuIEFzIHRoaXMgZG9jdW1lbnQgZG9lc24ndCBjb3ZlcgorICAgICAgICAgICAgZXZlcnl0aGluZyBpbiBkZXRhaWwsIGl0IG1heSBiZSB3b3J0aCB0YWtpbmcgYSBsb29rIGF0IHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BsYXRkZXYtb3Byb2ZpbGUnPlByb2ZpbGluZyB3aXRoIE9Qcm9maWxlPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT1Byb2ZpbGUgbWFudWFsIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL29wcm9maWxlLnNvdXJjZWZvcmdlLm5ldC9kb2MvaW5kZXguaHRtbCc+T1Byb2ZpbGUgbWFudWFsPC91bGluaz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9Qcm9maWxlIHdlYnNpdGUgY29udGFpbnMgbGlua3MgdG8gdGhlIGFib3ZlIG1hbnVhbCBhbmQKKyAgICAgICAgICAgIGJ1bmNoIG9mIG90aGVyIGl0ZW1zIGluY2x1ZGluZyBhbiBleHRlbnNpdmUgc2V0IG9mIGV4YW1wbGVzOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL29wcm9maWxlLnNvdXJjZWZvcmdlLm5ldC9hYm91dC8nPkFib3V0IE9Qcm9maWxlPC91bGluaz4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtbWFudWFsLXN5c3Byb2YnPgorICAgIDx0aXRsZT5TeXNwcm9mPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBTeXNwcm9mIGlzIGEgdmVyeSBlYXN5IHRvIHVzZSBzeXN0ZW0td2lkZSBwcm9maWxlciB0aGF0IGNvbnNpc3RzCisgICAgICAgIG9mIGEgc2luZ2xlIHdpbmRvdyB3aXRoIHRocmVlIHBhbmVzIGFuZCBhIGZldyBidXR0b25zIHdoaWNoIGFsbG93CisgICAgICAgIHlvdSB0byBzdGFydCwgc3RvcCwgYW5kIHZpZXcgdGhlIHByb2ZpbGUgZnJvbSBvbmUgcGxhY2UuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3N5c3Byb2Ytc2V0dXAnPgorICAgICAgICA8dGl0bGU+U2V0dXA8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIHRoaXMgc2VjdGlvbiwgd2UnbGwgYXNzdW1lIHlvdSd2ZSBhbHJlYWR5IHBlcmZvcm1lZCB0aGUKKyAgICAgICAgICAgIGJhc2ljIHNldHVwIG91dGxpbmVkIGluIHRoZSBHZW5lcmFsIFNldHVwIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFN5c3Byb2YgaXMgYSBHVUktYmFzZWQgYXBwbGljYXRpb24gdGhhdCBydW5zIG9uIHRoZSB0YXJnZXQKKyAgICAgICAgICAgIHN5c3RlbS4gRm9yIHRoZSByZXN0IG9mIHRoaXMgZG9jdW1lbnQgd2UgYXNzdW1lIHlvdSd2ZQorICAgICAgICAgICAgc3NoJ2VkIHRvIHRoZSBob3N0IGFuZCB3aWxsIGJlIHJ1bm5pbmcgU3lzcHJvZiBvbiB0aGUKKyAgICAgICAgICAgIHRhcmdldCAoeW91IGNhbiB1c2UgdGhlICctWCcgb3B0aW9uIHRvIHNzaCBhbmQgaGF2ZSB0aGUKKyAgICAgICAgICAgIFN5c3Byb2YgR1VJIHJ1biBvbiB0aGUgdGFyZ2V0IGJ1dCBkaXNwbGF5IHJlbW90ZWx5IG9uIHRoZQorICAgICAgICAgICAgaG9zdCBpZiB5b3Ugd2FudCkuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3lzcHJvZi1iYXNpYy11c2FnZSc+CisgICAgICAgIDx0aXRsZT5CYXNpYyBVc2FnZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBzdGFydCBwcm9maWxpbmcgdGhlIHN5c3RlbSwgeW91IHNpbXBseSBwcmVzcyB0aGUgJ1N0YXJ0JworICAgICAgICAgICAgYnV0dG9uLiBUbyBzdG9wIHByb2ZpbGluZyBhbmQgdG8gc3RhcnQgdmlld2luZyB0aGUgcHJvZmlsZSBkYXRhCisgICAgICAgICAgICBpbiBvbmUgZWFzeSBzdGVwLCBwcmVzcyB0aGUgJ1Byb2ZpbGUnIGJ1dHRvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB5b3UndmUgcHJlc3NlZCB0aGUgcHJvZmlsZSBidXR0b24sIHRoZSB0aHJlZSBwYW5lcyB3aWxsCisgICAgICAgICAgICBmaWxsIHVwIHdpdGggcHJvZmlsaW5nIGRhdGE6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9zeXNwcm9mLWNvcHktdG8tdXNlci5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI0aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbGVmdCBwYW5lIHNob3dzIGEgbGlzdCBvZiBmdW5jdGlvbnMgYW5kIHByb2Nlc3Nlcy4KKyAgICAgICAgICAgIFNlbGVjdGluZyBvbmUgb2YgdGhvc2UgZXhwYW5kcyB0aGF0IGZ1bmN0aW9uIGluIHRoZSByaWdodAorICAgICAgICAgICAgcGFuZSwgc2hvd2luZyBhbGwgaXRzIGNhbGxlZXMuIE5vdGUgdGhhdCB0aGlzIGNhbGxlci1vcmllbnRlZAorICAgICAgICAgICAgZGlzcGxheSBpcyBlc3NlbnRpYWxseSB0aGUgaW52ZXJzZSBvZiBwZXJmJ3MgZGVmYXVsdAorICAgICAgICAgICAgY2FsbGVlLW9yaWVudGVkIGNhbGxjaGFpbiBkaXNwbGF5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiB0aGUgc2NyZWVuc2hvdCBhYm92ZSwgd2UncmUgZm9jdXNpbmcgb24gX19jb3B5X3RvX3VzZXJfbGwoKQorICAgICAgICAgICAgYW5kIGxvb2tpbmcgdXAgdGhlIGNhbGxjaGFpbiB3ZSBjYW4gc2VlIHRoYXQgb25lIG9mIHRoZSBjYWxsZXJzCisgICAgICAgICAgICBvZiBfX2NvcHlfdG9fdXNlcl9sbCBpcyBzeXNfcmVhZCgpIGFuZCB0aGUgY29tcGxldGUgY2FsbHBhdGgKKyAgICAgICAgICAgIGJldHdlZW4gdGhlbS4gTm90aWNlIHRoYXQgdGhpcyBpcyBlc3NlbnRpYWxseSBhIHBvcnRpb24gb2YgdGhlCisgICAgICAgICAgICBzYW1lIGluZm9ybWF0aW9uIHdlIHNhdyBpbiB0aGUgcGVyZiBkaXNwbGF5IHNob3duIGluIHRoZSBwZXJmCisgICAgICAgICAgICBzZWN0aW9uIG9mIHRoaXMgcGFnZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iNGluIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU2ltaWxhcmx5LCB0aGUgYWJvdmUgaXMgYSBzbmFwc2hvdCBvZiB0aGUgU3lzcHJvZiBkaXNwbGF5IG9mIGEKKyAgICAgICAgICAgIGNvcHktZnJvbS11c2VyIGNhbGxjaGFpbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmluYWxseSwgbG9va2luZyBhdCB0aGUgdGhpcmQgU3lzcHJvZiBwYW5lIGluIHRoZSBsb3dlciBsZWZ0LAorICAgICAgICAgICAgd2UgY2FuIHNlZSBhIGxpc3Qgb2YgYWxsIHRoZSBjYWxsZXJzIG9mIGEgcGFydGljdWxhciBmdW5jdGlvbgorICAgICAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIHRvcCBsZWZ0IHBhbmUuIEluIHRoaXMgY2FzZSwgdGhlIGxvd2VyIHBhbmUgaXMKKyAgICAgICAgICAgIHNob3dpbmcgYWxsIHRoZSBjYWxsZXJzIG9mIF9fbWFya19pbm9kZV9kaXJ0eToKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3N5c3Byb2YtY2FsbGVycy5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI0aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEb3VibGUtY2xpY2tpbmcgb24gb25lIG9mIHRob3NlIGZ1bmN0aW9ucyB3aWxsIGluIHR1cm4gY2hhbmdlIHRoZQorICAgICAgICAgICAgZm9jdXMgdG8gdGhlIHNlbGVjdGVkIGZ1bmN0aW9uLCBhbmQgc28gb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IElmIHlvdSBsaWtlIHN5c3Byb2YncyAnY2FsbGVyLW9yaWVudGVkJworICAgICAgICAgICAgZGlzcGxheSwgeW91IG1heSBiZSBhYmxlIHRvIGFwcHJveGltYXRlIGl0IGluIG90aGVyIHRvb2xzIGFzCisgICAgICAgICAgICB3ZWxsLiAgRm9yIGV4YW1wbGUsICdwZXJmIHJlcG9ydCcgaGFzIHRoZSAtZyAoLS1jYWxsLWdyYXBoKQorICAgICAgICAgICAgb3B0aW9uIHRoYXQgeW91IGNhbiBleHBlcmltZW50IHdpdGg7IG9uZSBvZiB0aGUgb3B0aW9ucyBpcworICAgICAgICAgICAgJ2NhbGxlcicgZm9yIGFuIGludmVydGVkIGNhbGxlci1iYXNlZCBjYWxsZ3JhcGggZGlzcGxheS4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N5c3Byb2YtZG9jdW1lbnRhdGlvbic+CisgICAgICAgIDx0aXRsZT5Eb2N1bWVudGF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgU3lzcHJvZiwgYnV0CisgICAgICAgICAgICBtYXliZSB0aGF0J3MgYmVjYXVzZSBpdCdzIHByZXR0eSBzZWxmLWV4cGxhbmF0b3J5LgorICAgICAgICAgICAgVGhlIFN5c3Byb2Ygd2Vic2l0ZSwgaG93ZXZlciwgaXMgaGVyZToKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9zeXNwcm9mLmNvbS8nPlN5c3Byb2YsIFN5c3RlbS13aWRlIFBlcmZvcm1hbmNlIFByb2ZpbGVyIGZvciBMaW51eDwvdWxpbms+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdsdHRuZy1saW51eC10cmFjZS10b29sa2l0LW5leHQtZ2VuZXJhdGlvbic+CisgICAgPHRpdGxlPkxUVG5nIChMaW51eCBUcmFjZSBUb29sa2l0LCBuZXh0IGdlbmVyYXRpb24pPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSdsdHRuZy1zZXR1cCc+CisgICAgICAgIDx0aXRsZT5TZXR1cDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgdGhpcyBzZWN0aW9uLCB3ZSdsbCBhc3N1bWUgeW91J3ZlIGFscmVhZHkgcGVyZm9ybWVkIHRoZQorICAgICAgICAgICAgYmFzaWMgc2V0dXAgb3V0bGluZWQgaW4gdGhlIEdlbmVyYWwgU2V0dXAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTFRUbmcgaXMgcnVuIG9uIHRoZSB0YXJnZXQgc3lzdGVtIGJ5IHNzaCdpbmcgdG8gaXQuCisgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3Ugd2FudCB0byBzZWUgdGhlIHRyYWNlcyBncmFwaGljYWxseSwKKyAgICAgICAgICAgIGluc3RhbGwgRWNsaXBzZSBhcyBkZXNjcmliZWQgaW4gc2VjdGlvbgorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21hbnVhbGx5LWNvcHlpbmctYS10cmFjZS10by10aGUtaG9zdC1hbmQtdmlld2luZy1pdC1pbi1lY2xpcHNlJz5NYW51YWxseSBjb3B5aW5nIGEgdHJhY2UgdG8gdGhlIGhvc3QgYW5kIHZpZXdpbmcgaXQgaW4gRWNsaXBzZSAoaS5lLiB1c2luZyBFY2xpcHNlIHdpdGhvdXQgbmV0d29yayBzdXBwb3J0KTwvbGluaz4iCisgICAgICAgICAgICBhbmQgZm9sbG93IHRoZSBkaXJlY3Rpb25zIHRvIG1hbnVhbGx5IGNvcHkgdHJhY2VzIHRvIHRoZSBob3N0IGFuZAorICAgICAgICAgICAgdmlldyB0aGVtIGluIEVjbGlwc2UgKGkuZS4gdXNpbmcgRWNsaXBzZSB3aXRob3V0IG5ldHdvcmsgc3VwcG9ydCkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEJlIHN1cmUgdG8gZG93bmxvYWQgYW5kIGluc3RhbGwvcnVuIHRoZSAnU1IxJyBvciBsYXRlciBKdW5vIHJlbGVhc2UKKyAgICAgICAgICAgIG9mIGVjbGlwc2UgZS5nLjoKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZG93bmxvYWRzL2Rvd25sb2FkLnBocD9maWxlPS90ZWNobm9sb2d5L2VwcC9kb3dubG9hZHMvcmVsZWFzZS9qdW5vL1NSMS9lY2xpcHNlLWNwcC1qdW5vLVNSMS1saW51eC1ndGsteDg2XzY0LnRhci5neic+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9kb3dubG9hZHMvZG93bmxvYWQucGhwP2ZpbGU9L3RlY2hub2xvZ3kvZXBwL2Rvd25sb2Fkcy9yZWxlYXNlL2p1bm8vU1IxL2VjbGlwc2UtY3BwLWp1bm8tU1IxLWxpbnV4LWd0ay14ODZfNjQudGFyLmd6PC91bGluaz4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjb2xsZWN0aW5nLWFuZC12aWV3aW5nLXRyYWNlcyc+CisgICAgICAgIDx0aXRsZT5Db2xsZWN0aW5nIGFuZCBWaWV3aW5nIFRyYWNlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHlvdSd2ZSBhcHBsaWVkIHRoZSBhYm92ZSBjb21taXRzIGFuZCBidWlsdCBhbmQgYm9vdGVkIHlvdXIKKyAgICAgICAgICAgIGltYWdlICh5b3UgbmVlZCB0byBidWlsZCB0aGUgY29yZS1pbWFnZS1zYXRvLXNkayBpbWFnZSBvciB1c2Ugb25lIG9mIHRoZQorICAgICAgICAgICAgb3RoZXIgbWV0aG9kcyBkZXNjcmliZWQgaW4gdGhlIEdlbmVyYWwgU2V0dXAgc2VjdGlvbiksIHlvdSdyZQorICAgICAgICAgICAgcmVhZHkgdG8gc3RhcnQgdHJhY2luZy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjb2xsZWN0aW5nLWFuZC12aWV3aW5nLWEtdHJhY2Utb24tdGhlLXRhcmdldC1pbnNpZGUtYS1zaGVsbCc+CisgICAgICAgICAgICA8dGl0bGU+Q29sbGVjdGluZyBhbmQgdmlld2luZyBhIHRyYWNlIG9uIHRoZSB0YXJnZXQgKGluc2lkZSBhIHNoZWxsKTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZpcnN0LCBmcm9tIHRoZSBob3N0LCBzc2ggdG8gdGhlIHRhcmdldDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3NoIC1sIHJvb3QgMTkyLjE2OC4xLjQ3CisgICAgIFRoZSBhdXRoZW50aWNpdHkgb2YgaG9zdCAnMTkyLjE2OC4xLjQ3ICgxOTIuMTY4LjEuNDcpJyBjYW4ndCBiZSBlc3RhYmxpc2hlZC4KKyAgICAgUlNBIGtleSBmaW5nZXJwcmludCBpcyAyMzpiZDpjODpiMTphODo3MTo1MjowMDplZTowMDo0Zjo2NDo5ZToxMDpiOTo3ZS4KKyAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbnRpbnVlIGNvbm5lY3RpbmcgKHllcy9ubyk/IHllcworICAgICBXYXJuaW5nOiBQZXJtYW5lbnRseSBhZGRlZCAnMTkyLjE2OC4xLjQ3JyAoUlNBKSB0byB0aGUgbGlzdCBvZiBrbm93biBob3N0cy4KKyAgICAgcm9vdEAxOTIuMTY4LjEuNDcncyBwYXNzd29yZDoKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT25jZSBvbiB0aGUgdGFyZ2V0LCB1c2UgdGhlc2Ugc3RlcHMgdG8gY3JlYXRlIGEgdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIGNyZWF0ZQorICAgICBTcGF3bmluZyBhIHNlc3Npb24gZGFlbW9uCisgICAgIFNlc3Npb24gYXV0by0yMDEyMTAxNS0yMzIxMjAgY3JlYXRlZC4KKyAgICAgVHJhY2VzIHdpbGwgYmUgd3JpdHRlbiBpbiAvaG9tZS9yb290L2x0dG5nLXRyYWNlcy9hdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBFbmFibGUgdGhlIGV2ZW50cyB5b3Ugd2FudCB0byB0cmFjZSAoaW4gdGhpcyBjYXNlIGFsbAorICAgICAgICAgICAgICAgIGtlcm5lbCBldmVudHMpOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBsdHRuZyBlbmFibGUtZXZlbnQgLS1rZXJuZWwgLS1hbGwKKyAgICAgQWxsIGtlcm5lbCBldmVudHMgYXJlIGVuYWJsZWQgaW4gY2hhbm5lbCBjaGFubmVsMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBTdGFydCB0aGUgdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIHN0YXJ0CisgICAgIFRyYWNpbmcgc3RhcnRlZCBmb3Igc2Vzc2lvbiBhdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBbmQgdGhlbiBzdG9wIHRoZSB0cmFjZSBhZnRlciBhd2hpbGUgb3IgYWZ0ZXIgcnVubmluZworICAgICAgICAgICAgICAgIGEgcGFydGljdWxhciB3b3JrbG9hZCB0aGF0IHlvdSB3YW50IHRvIHRyYWNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBsdHRuZyBzdG9wCisgICAgIFRyYWNpbmcgc3RvcHBlZCBmb3Igc2Vzc2lvbiBhdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG5vdyB2aWV3IHRoZSB0cmFjZSBpbiB0ZXh0IGZvcm0gb24gdGhlIHRhcmdldDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgbHR0bmcgdmlldworICAgICBbMjM6MjE6NTYuOTg5MjcwMzk5XSAoKz8uPz8/Pz8/Pz8/KSBzeXNfZ2V0ZXVpZDogeyAxIH0sIHsgfQorICAgICBbMjM6MjE6NTYuOTg5Mjc4MDgxXSAoKzAuMDAwMDA3NjgyKSBleGl0X3N5c2NhbGw6IHsgMSB9LCB7IHJldCA9IDAgfQorICAgICBbMjM6MjE6NTYuOTg5Mjg2MDQzXSAoKzAuMDAwMDA3OTYyKSBzeXNfcGlwZTogeyAxIH0sIHsgZmlsZGVzID0gMHhCNzdCOUU4QyB9CisgICAgIFsyMzoyMTo1Ni45ODkzMjE4MDJdICgrMC4wMDAwMzU3NTkpIGV4aXRfc3lzY2FsbDogeyAxIH0sIHsgcmV0ID0gMCB9CisgICAgIFsyMzoyMTo1Ni45ODkzMjkzNDVdICgrMC4wMDAwMDc1NDMpIHN5c19tbWFwX3Bnb2ZmOiB7IDEgfSwgeyBhZGRyID0gMHgwLCBsZW4gPSAxMDQ4NTc2MCwgcHJvdCA9IDMsIGZsYWdzID0gMTMxMzYyLCBmZCA9IDQyOTQ5NjcyOTUsIHBnb2ZmID0gMCB9CisgICAgIFsyMzoyMTo1Ni45ODkzNTE2OTRdICgrMC4wMDAwMjIzNDkpIGV4aXRfc3lzY2FsbDogeyAxIH0sIHsgcmV0ID0gLTEyNDc4MDU0NDAgfQorICAgICBbMjM6MjE6NTYuOTg5NDMyOTg5XSAoKzAuMDAwMDgxMjk1KSBzeXNfY2xvbmU6IHsgMSB9LCB7IGNsb25lX2ZsYWdzID0gMHg0MTEsIG5ld3NwID0gMHhCNUVGRkZFNCwgcGFyZW50X3RpZCA9IDB4RkZGRkZGRkYsIGNoaWxkX3RpZCA9IDB4MCB9CisgICAgIFsyMzoyMTo1Ni45ODk0NzcxMjldICgrMC4wMDAwNDQxNDApIHNjaGVkX3N0YXRfcnVudGltZTogeyAxIH0sIHsgY29tbSA9ICJsdHRuZy1jb25zdW1lcmQiLCB0aWQgPSAxMTkzLCBydW50aW1lID0gNjgxNjYwLCB2cnVudGltZSA9IDQzMzY3OTgzMzg4IH0KKyAgICAgWzIzOjIxOjU2Ljk4OTQ4NjY5N10gKCswLjAwMDAwOTU2OCkgc2NoZWRfbWlncmF0ZV90YXNrOiB7IDEgfSwgeyBjb21tID0gImx0dG5nLWNvbnN1bWVyZCIsIHRpZCA9IDExOTMsIHByaW8gPSAyMCwgb3JpZ19jcHUgPSAxLCBkZXN0X2NwdSA9IDEgfQorICAgICBbMjM6MjE6NTYuOTg5NTA4NDE4XSAoKzAuMDAwMDIxNzIxKSBocnRpbWVyX2luaXQ6IHsgMSB9LCB7IGhydGltZXIgPSAzOTcwODMyMDc2LCBjbG9ja2lkID0gMSwgbW9kZSA9IDEgfQorICAgICBbMjM6MjE6NTYuOTg5NzcwNDYyXSAoKzAuMDAwMjYyMDQ0KSBocnRpbWVyX2NhbmNlbDogeyAxIH0sIHsgaHJ0aW1lciA9IDM5OTM4NjU0NDAgfQorICAgICBbMjM6MjE6NTYuOTg5NzcxNTgwXSAoKzAuMDAwMDAxMTE4KSBocnRpbWVyX2NhbmNlbDogeyAwIH0sIHsgaHJ0aW1lciA9IDM5OTM4MTIxOTIgfQorICAgICBbMjM6MjE6NTYuOTg5Nzc2OTU3XSAoKzAuMDAwMDA1Mzc3KSBocnRpbWVyX2V4cGlyZV9lbnRyeTogeyAxIH0sIHsgaHJ0aW1lciA9IDM5OTM4NjU0NDAsIG5vdyA9IDc5ODE1OTgwMDA3MDU3LCBmdW5jdGlvbiA9IDMyMzg0NjUyMzIgfQorICAgICBbMjM6MjE6NTYuOTg5Nzc4MTQ1XSAoKzAuMDAwMDAxMTg4KSBocnRpbWVyX2V4cGlyZV9lbnRyeTogeyAwIH0sIHsgaHJ0aW1lciA9IDM5OTM4MTIxOTIsIG5vdyA9IDc5ODE1OTgwMDA4MTc0LCBmdW5jdGlvbiA9IDMyMzg0NjUyMzIgfQorICAgICBbMjM6MjE6NTYuOTg5NzkxNjk1XSAoKzAuMDAwMDEzNTUwKSBzb2Z0aXJxX3JhaXNlOiB7IDEgfSwgeyB2ZWMgPSAxIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTc5NTM5Nl0gKCswLjAwMDAwMzcwMSkgc29mdGlycV9yYWlzZTogeyAwIH0sIHsgdmVjID0gMSB9CisgICAgIFsyMzoyMTo1Ni45ODk4MDA2MzVdICgrMC4wMDAwMDUyMzkpIHNvZnRpcnFfcmFpc2U6IHsgMCB9LCB7IHZlYyA9IDkgfQorICAgICBbMjM6MjE6NTYuOTg5ODA3MTMwXSAoKzAuMDAwMDA2NDk1KSBzY2hlZF9zdGF0X3J1bnRpbWU6IHsgMSB9LCB7IGNvbW0gPSAibHR0bmctY29uc3VtZXJkIiwgdGlkID0gMTE5MywgcnVudGltZSA9IDMzMDcxMCwgdnJ1bnRpbWUgPSA0MzM2ODMxNDA5OCB9CisgICAgIFsyMzoyMTo1Ni45ODk4MDk5OTNdICgrMC4wMDAwMDI4NjMpIHNjaGVkX3N0YXRfcnVudGltZTogeyAwIH0sIHsgY29tbSA9ICJsdHRuZy1zZXNzaW9uZCIsIHRpZCA9IDExODEsIHJ1bnRpbWUgPSAxMDE1MzEzLCB2cnVudGltZSA9IDM2OTc2NzMzMjQwIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTgxODUxNF0gKCswLjAwMDAwODUyMSkgaHJ0aW1lcl9leHBpcmVfZXhpdDogeyAwIH0sIHsgaHJ0aW1lciA9IDM5OTM4MTIxOTIgfQorICAgICBbMjM6MjE6NTYuOTg5ODE5NjMxXSAoKzAuMDAwMDAxMTE3KSBocnRpbWVyX2V4cGlyZV9leGl0OiB7IDEgfSwgeyBocnRpbWVyID0gMzk5Mzg2NTQ0MCB9CisgICAgIFsyMzoyMTo1Ni45ODk4MjE4NjZdICgrMC4wMDAwMDIyMzUpIGhydGltZXJfc3RhcnQ6IHsgMCB9LCB7IGhydGltZXIgPSAzOTkzODEyMTkyLCBmdW5jdGlvbiA9IDMyMzg0NjUyMzIsIGV4cGlyZXMgPSA3OTgxNTk4MTAwMDAwMCwgc29mdGV4cGlyZXMgPSA3OTgxNTk4MTAwMDAwMCB9CisgICAgIFsyMzoyMTo1Ni45ODk4MjI5ODRdICgrMC4wMDAwMDExMTgpIGhydGltZXJfc3RhcnQ6IHsgMSB9LCB7IGhydGltZXIgPSAzOTkzODY1NDQwLCBmdW5jdGlvbiA9IDMyMzg0NjUyMzIsIGV4cGlyZXMgPSA3OTgxNTk4MTAwMDAwMCwgc29mdGV4cGlyZXMgPSA3OTgxNTk4MTAwMDAwMCB9CisgICAgIFsyMzoyMTo1Ni45ODk4MzI3NjJdICgrMC4wMDAwMDk3NzgpIHNvZnRpcnFfZW50cnk6IHsgMSB9LCB7IHZlYyA9IDEgfQorICAgICBbMjM6MjE6NTYuOTg5ODMzODc5XSAoKzAuMDAwMDAxMTE3KSBzb2Z0aXJxX2VudHJ5OiB7IDAgfSwgeyB2ZWMgPSAxIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTgzODA2OV0gKCswLjAwMDAwNDE5MCkgdGltZXJfY2FuY2VsOiB7IDEgfSwgeyB0aW1lciA9IDM5OTM4NzE5NTYgfQorICAgICBbMjM6MjE6NTYuOTg5ODM5MTg3XSAoKzAuMDAwMDAxMTE4KSB0aW1lcl9jYW5jZWw6IHsgMCB9LCB7IHRpbWVyID0gMzk5MzgxODcwOCB9CisgICAgIFsyMzoyMTo1Ni45ODk4NDE0OTJdICgrMC4wMDAwMDIzMDUpIHRpbWVyX2V4cGlyZV9lbnRyeTogeyAxIH0sIHsgdGltZXIgPSAzOTkzODcxOTU2LCBub3cgPSA3OTUxNTk4MCwgZnVuY3Rpb24gPSAzMjM4Mjc3NTUyIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg0MjgxOV0gKCswLjAwMDAwMTMyNykgdGltZXJfZXhwaXJlX2VudHJ5OiB7IDAgfSwgeyB0aW1lciA9IDM5OTM4MTg3MDgsIG5vdyA9IDc5NTE1OTgwLCBmdW5jdGlvbiA9IDMyMzgyNzc1NTIgfQorICAgICBbMjM6MjE6NTYuOTg5ODU0ODMxXSAoKzAuMDAwMDEyMDEyKSBzY2hlZF9zdGF0X3J1bnRpbWU6IHsgMSB9LCB7IGNvbW0gPSAibHR0bmctY29uc3VtZXJkIiwgdGlkID0gMTE5MywgcnVudGltZSA9IDQ5MjM3LCB2cnVudGltZSA9IDQzMzY4MzYzMzM1IH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg1NTk0OV0gKCswLjAwMDAwMTExOCkgc2NoZWRfc3RhdF9ydW50aW1lOiB7IDAgfSwgeyBjb21tID0gImx0dG5nLXNlc3Npb25kIiwgdGlkID0gMTE4MSwgcnVudGltZSA9IDQ1MTIxLCB2cnVudGltZSA9IDM2OTc2Nzc4MzYxIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg2MTI1N10gKCswLjAwMDAwNTMwOCkgc2NoZWRfc3RhdF9zbGVlcDogeyAxIH0sIHsgY29tbSA9ICJrd29ya2VyLzE6MSIsIHRpZCA9IDIxLCBkZWxheSA9IDk0NTEzMTggfQorICAgICBbMjM6MjE6NTYuOTg5ODYyMzc0XSAoKzAuMDAwMDAxMTE3KSBzY2hlZF9zdGF0X3NsZWVwOiB7IDAgfSwgeyBjb21tID0gImt3b3JrZXIvMDowIiwgdGlkID0gNCwgZGVsYXkgPSA5OTU4ODIwIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg2ODI0MV0gKCswLjAwMDAwNTg2Nykgc2NoZWRfd2FrZXVwOiB7IDAgfSwgeyBjb21tID0gImt3b3JrZXIvMDowIiwgdGlkID0gNCwgcHJpbyA9IDEyMCwgc3VjY2VzcyA9IDEsIHRhcmdldF9jcHUgPSAwIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg2OTM1OF0gKCswLjAwMDAwMTExNykgc2NoZWRfd2FrZXVwOiB7IDEgfSwgeyBjb21tID0gImt3b3JrZXIvMToxIiwgdGlkID0gMjEsIHByaW8gPSAxMjAsIHN1Y2Nlc3MgPSAxLCB0YXJnZXRfY3B1ID0gMSB9CisgICAgIFsyMzoyMTo1Ni45ODk4Nzc0NjBdICgrMC4wMDAwMDgxMDIpIHRpbWVyX2V4cGlyZV9leGl0OiB7IDEgfSwgeyB0aW1lciA9IDM5OTM4NzE5NTYgfQorICAgICBbMjM6MjE6NTYuOTg5ODc4NTc3XSAoKzAuMDAwMDAxMTE3KSB0aW1lcl9leHBpcmVfZXhpdDogeyAwIH0sIHsgdGltZXIgPSAzOTkzODE4NzA4IH0KKyAgICAgLgorICAgICAuCisgICAgIC4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiBub3cgc2FmZWx5IGRlc3Ryb3kgdGhlIHRyYWNlIHNlc3Npb24gKG5vdGUgdGhhdAorICAgICAgICAgICAgICAgIHRoaXMgZG9lc24ndCBkZWxldGUgdGhlIHRyYWNlIC0gaXQncyBzdGlsbCB0aGVyZQorICAgICAgICAgICAgICAgIGluIH4vbHR0bmctdHJhY2VzKToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgbHR0bmcgZGVzdHJveQorICAgICBTZXNzaW9uIGF1dG8tMjAxMjEwMTUtMjMyMTIwIGRlc3Ryb3llZCBhdCAvaG9tZS9yb290CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgdHJhY2UgaXMgc2F2ZWQgaW4gYSBkaXJlY3Rvcnkgb2YgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICBuYW1lIGFzIHJldHVybmVkIGJ5ICdsdHRuZyBjcmVhdGUnLCB1bmRlciB0aGUgfi9sdHRuZy10cmFjZXMKKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgKG5vdGUgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGlzIGJ5IHN1cHBseWluZyB5b3VyCisgICAgICAgICAgICAgICAgb3duIG5hbWUgdG8gJ2x0dG5nIGNyZWF0ZScpOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBscyAtYWwgfi9sdHRuZy10cmFjZXMKKyAgICAgZHJ3eHJ3eC0tLSAgICAzIHJvb3QgICAgIHJvb3QgICAgICAgICAgMTAyNCBPY3QgMTUgMjM6MjEgLgorICAgICBkcnd4ci14ci14ICAgIDUgcm9vdCAgICAgcm9vdCAgICAgICAgICAxMDI0IE9jdCAxNSAyMzo1NyAuLgorICAgICBkcnd4cnd4LS0tICAgIDMgcm9vdCAgICAgcm9vdCAgICAgICAgICAxMDI0IE9jdCAxNSAyMzoyMSBhdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjb2xsZWN0aW5nLWFuZC12aWV3aW5nLWEtdXNlcnNwYWNlLXRyYWNlLW9uLXRoZS10YXJnZXQtaW5zaWRlLWEtc2hlbGwnPgorICAgICAgICAgICAgPHRpdGxlPkNvbGxlY3RpbmcgYW5kIHZpZXdpbmcgYSB1c2Vyc3BhY2UgdHJhY2Ugb24gdGhlIHRhcmdldCAoaW5zaWRlIGEgc2hlbGwpPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIExUVG5nIHVzZXJzcGFjZSB0cmFjaW5nLCB5b3UgbmVlZCB0byBoYXZlIGEgcHJvcGVybHkKKyAgICAgICAgICAgICAgICBpbnN0cnVtZW50ZWQgdXNlcnNwYWNlIHByb2dyYW0uIEZvciB0aGlzIGV4YW1wbGUsIHdlJ2xsIHVzZQorICAgICAgICAgICAgICAgIHRoZSAnaGVsbG8nIHRlc3QgcHJvZ3JhbSBnZW5lcmF0ZWQgYnkgdGhlIGx0dG5nLXVzdCBidWlsZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlICdoZWxsbycgdGVzdCBwcm9ncmFtIGlzbid0IGluc3RhbGxlZCBvbiB0aGUgcm9vdGZzIGJ5CisgICAgICAgICAgICAgICAgdGhlIGx0dG5nLXVzdCBidWlsZCwgc28gd2UgbmVlZCB0byBjb3B5IGl0IG92ZXIgbWFudWFsbHkuCisgICAgICAgICAgICAgICAgRmlyc3QgY2QgaW50byB0aGUgYnVpbGQgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIGhlbGxvCisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgYnVpbGQvdG1wL3dvcmsvY29yZTJfMzItcG9reS1saW51eC9sdHRuZy11c3QvMi4wLjUtcjAvZ2l0L3Rlc3RzL2hlbGxvLy5saWJzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIENvcHkgdGhhdCBvdmVyIHRvIHRoZSB0YXJnZXQgbWFjaGluZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc2NwIGhlbGxvIHJvb3RAMTkyLjE2OC4xLjIwOgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3Ugbm93IGhhdmUgdGhlIGluc3RydW1lbnRlZCBsdHRuZyAnaGVsbG8gd29ybGQnIHRlc3QKKyAgICAgICAgICAgICAgICBwcm9ncmFtIG9uIHRoZSB0YXJnZXQsIHJlYWR5IHRvIHRlc3QuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZpcnN0LCBmcm9tIHRoZSBob3N0LCBzc2ggdG8gdGhlIHRhcmdldDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3NoIC1sIHJvb3QgMTkyLjE2OC4xLjQ3CisgICAgIFRoZSBhdXRoZW50aWNpdHkgb2YgaG9zdCAnMTkyLjE2OC4xLjQ3ICgxOTIuMTY4LjEuNDcpJyBjYW4ndCBiZSBlc3RhYmxpc2hlZC4KKyAgICAgUlNBIGtleSBmaW5nZXJwcmludCBpcyAyMzpiZDpjODpiMTphODo3MTo1MjowMDplZTowMDo0Zjo2NDo5ZToxMDpiOTo3ZS4KKyAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbnRpbnVlIGNvbm5lY3RpbmcgKHllcy9ubyk/IHllcworICAgICBXYXJuaW5nOiBQZXJtYW5lbnRseSBhZGRlZCAnMTkyLjE2OC4xLjQ3JyAoUlNBKSB0byB0aGUgbGlzdCBvZiBrbm93biBob3N0cy4KKyAgICAgcm9vdEAxOTIuMTY4LjEuNDcncyBwYXNzd29yZDoKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT25jZSBvbiB0aGUgdGFyZ2V0LCB1c2UgdGhlc2Ugc3RlcHMgdG8gY3JlYXRlIGEgdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIGNyZWF0ZQorICAgICBTZXNzaW9uIGF1dG8tMjAxOTAzMDMtMDIxOTQzIGNyZWF0ZWQuCisgICAgIFRyYWNlcyB3aWxsIGJlIHdyaXR0ZW4gaW4gL2hvbWUvcm9vdC9sdHRuZy10cmFjZXMvYXV0by0yMDE5MDMwMy0wMjE5NDMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRW5hYmxlIHRoZSBldmVudHMgeW91IHdhbnQgdG8gdHJhY2UgKGluIHRoaXMgY2FzZSBhbGwKKyAgICAgICAgICAgICAgICB1c2Vyc3BhY2UgZXZlbnRzKToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgbHR0bmcgZW5hYmxlLWV2ZW50IC0tdXNlcnNwYWNlIC0tYWxsCisgICAgIEFsbCBVU1QgZXZlbnRzIGFyZSBlbmFibGVkIGluIGNoYW5uZWwgY2hhbm5lbDAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgU3RhcnQgdGhlIHRyYWNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBsdHRuZyBzdGFydAorICAgICBUcmFjaW5nIHN0YXJ0ZWQgZm9yIHNlc3Npb24gYXV0by0yMDE5MDMwMy0wMjE5NDMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgUnVuIHRoZSBpbnN0cnVtZW50ZWQgaGVsbG8gd29ybGQgcHJvZ3JhbToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgLi9oZWxsbworICAgICBIZWxsbywgV29ybGQhCisgICAgIFRyYWNpbmcuLi4gIGRvbmUuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFuZCB0aGVuIHN0b3AgdGhlIHRyYWNlIGFmdGVyIGF3aGlsZSBvciBhZnRlciBydW5uaW5nIGEKKyAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIHdvcmtsb2FkIHRoYXQgeW91IHdhbnQgdG8gdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIHN0b3AKKyAgICAgVHJhY2luZyBzdG9wcGVkIGZvciBzZXNzaW9uIGF1dG8tMjAxOTAzMDMtMDIxOTQzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHZpZXcgdGhlIHRyYWNlIGluIHRleHQgZm9ybSBvbiB0aGUgdGFyZ2V0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBsdHRuZyB2aWV3CisgICAgIFswMjozMToxNC45MDYxNDY1NDRdICgrPy4/Pz8/Pz8/Pz8pIGhlbGxvOjE0MjQgdXN0X3Rlc3RzX2hlbGxvOnRwdGVzdDogeyBjcHVfaWQgPSAxIH0sIHsgaW50ZmllbGQgPSAwLCBpbnRmaWVsZDIgPSAweDAsIGxvbmdmaWVsZCA9IDAsIG5ldGludGZpZWxkID0gMCwgbmV0aW50ZmllbGRoZXggPSAweDAsIGFycmZpZWxkMSA9IFsgWzBdID0gMSwgWzFdID0gMiwgWzJdID0gMyBdLCBhcnJmaWVsZDIgPSAidGVzdCIsIF9zZXFmaWVsZDFfbGVuZ3RoID0gNCwgc2VxZmllbGQxID0gWyBbMF0gPSAxMTYsIFsxXSA9IDEwMSwgWzJdID0gMTE1LCBbM10gPSAxMTYgXSwgX3NlcWZpZWxkMl9sZW5ndGggPSA0LCAgc2VxZmllbGQyID0gInRlc3QiLCBzdHJpbmdmaWVsZCA9ICJ0ZXN0IiwgZmxvYXRmaWVsZCA9IDIyMjIsIGRvdWJsZWZpZWxkID0gMiwgYm9vbGZpZWxkID0gMSB9CisgICAgIFswMjozMToxNC45MDYxNzAzNjBdICgrMC4wMDAwMjM4MTYpIGhlbGxvOjE0MjQgdXN0X3Rlc3RzX2hlbGxvOnRwdGVzdDogeyBjcHVfaWQgPSAxIH0sIHsgaW50ZmllbGQgPSAxLCBpbnRmaWVsZDIgPSAweDEsIGxvbmdmaWVsZCA9IDEsIG5ldGludGZpZWxkID0gMSwgbmV0aW50ZmllbGRoZXggPSAweDEsIGFycmZpZWxkMSA9IFsgWzBdID0gMSwgWzFdID0gMiwgWzJdID0gMyBdLCBhcnJmaWVsZDIgPSAidGVzdCIsIF9zZXFmaWVsZDFfbGVuZ3RoID0gNCwgc2VxZmllbGQxID0gWyBbMF0gPSAxMTYsIFsxXSA9IDEwMSwgWzJdID0gMTE1LCBbM10gPSAxMTYgXSwgX3NlcWZpZWxkMl9sZW5ndGggPSA0LCBzZXFmaWVsZDIgPSAidGVzdCIsIHN0cmluZ2ZpZWxkID0gInRlc3QiLCBmbG9hdGZpZWxkID0gMjIyMiwgZG91YmxlZmllbGQgPSAyLCBib29sZmllbGQgPSAxIH0KKyAgICAgWzAyOjMxOjE0LjkwNjE4MzE0MF0gKCswLjAwMDAxMjc4MCkgaGVsbG86MTQyNCB1c3RfdGVzdHNfaGVsbG86dHB0ZXN0OiB7IGNwdV9pZCA9IDEgfSwgeyBpbnRmaWVsZCA9IDIsIGludGZpZWxkMiA9IDB4MiwgbG9uZ2ZpZWxkID0gMiwgbmV0aW50ZmllbGQgPSAyLCBuZXRpbnRmaWVsZGhleCA9IDB4MiwgYXJyZmllbGQxID0gWyBbMF0gPSAxLCBbMV0gPSAyLCBbMl0gPSAzIF0sIGFycmZpZWxkMiA9ICJ0ZXN0IiwgX3NlcWZpZWxkMV9sZW5ndGggPSA0LCBzZXFmaWVsZDEgPSBbIFswXSA9IDExNiwgWzFdID0gMTAxLCBbMl0gPSAxMTUsIFszXSA9IDExNiBdLCBfc2VxZmllbGQyX2xlbmd0aCA9IDQsIHNlcWZpZWxkMiA9ICJ0ZXN0Iiwgc3RyaW5nZmllbGQgPSAidGVzdCIsIGZsb2F0ZmllbGQgPSAyMjIyLCBkb3VibGVmaWVsZCA9IDIsIGJvb2xmaWVsZCA9IDEgfQorICAgICBbMDI6MzE6MTQuOTA2MTk0Mzg1XSAoKzAuMDAwMDExMjQ1KSBoZWxsbzoxNDI0IHVzdF90ZXN0c19oZWxsbzp0cHRlc3Q6IHsgY3B1X2lkID0gMSB9LCB7IGludGZpZWxkID0gMywgaW50ZmllbGQyID0gMHgzLCBsb25nZmllbGQgPSAzLCBuZXRpbnRmaWVsZCA9IDMsIG5ldGludGZpZWxkaGV4ID0gMHgzLCBhcnJmaWVsZDEgPSBbIFswXSA9IDEsIFsxXSA9IDIsIFsyXSA9IDMgXSwgYXJyZmllbGQyID0gInRlc3QiLCBfc2VxZmllbGQxX2xlbmd0aCA9IDQsIHNlcWZpZWxkMSA9IFsgWzBdID0gMTE2LCBbMV0gPSAxMDEsIFsyXSA9IDExNSwgWzNdID0gMTE2IF0sIF9zZXFmaWVsZDJfbGVuZ3RoID0gNCwgc2VxZmllbGQyID0gInRlc3QiLCBzdHJpbmdmaWVsZCA9ICJ0ZXN0IiwgZmxvYXRmaWVsZCA9IDIyMjIsIGRvdWJsZWZpZWxkID0gMiwgYm9vbGZpZWxkID0gMSB9CisgICAgIC4KKyAgICAgLgorICAgICAuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHNhZmVseSBkZXN0cm95IHRoZSB0cmFjZSBzZXNzaW9uIChub3RlIHRoYXQKKyAgICAgICAgICAgICAgICB0aGlzIGRvZXNuJ3QgZGVsZXRlIHRoZSB0cmFjZSAtIGl0J3Mgc3RpbGwKKyAgICAgICAgICAgICAgICB0aGVyZSBpbiB+L2x0dG5nLXRyYWNlcyk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIGRlc3Ryb3kKKyAgICAgU2Vzc2lvbiBhdXRvLTIwMTkwMzAzLTAyMTk0MyBkZXN0cm95ZWQgYXQgL2hvbWUvcm9vdAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtYW51YWxseS1jb3B5aW5nLWEtdHJhY2UtdG8tdGhlLWhvc3QtYW5kLXZpZXdpbmctaXQtaW4tZWNsaXBzZSc+CisgICAgICAgICAgICA8dGl0bGU+TWFudWFsbHkgY29weWluZyBhIHRyYWNlIHRvIHRoZSBob3N0IGFuZCB2aWV3aW5nIGl0IGluIEVjbGlwc2UgKGkuZS4gdXNpbmcgRWNsaXBzZSB3aXRob3V0IG5ldHdvcmsgc3VwcG9ydCk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYWxyZWFkeSBoYXZlIGFuIExUVG5nIHRyYWNlIG9uIGEgcmVtb3RlIHRhcmdldCBhbmQKKyAgICAgICAgICAgICAgICB3b3VsZCBsaWtlIHRvIHZpZXcgaXQgaW4gRWNsaXBzZSBvbiB0aGUgaG9zdCwgeW91IGNhbiBlYXNpbHkKKyAgICAgICAgICAgICAgICBjb3B5IGl0IGZyb20gdGhlIHRhcmdldCB0byB0aGUgaG9zdCBhbmQgaW1wb3J0IGl0IGludG8KKyAgICAgICAgICAgICAgICBFY2xpcHNlIHRvIHZpZXcgaXQgdXNpbmcgdGhlIExUVG5nIEVjbGlwc2UgcGx1Zy1pbiBhbHJlYWR5CisgICAgICAgICAgICAgICAgYnVuZGxlZCBpbiB0aGUgRWNsaXBzZSAoSnVubyBTUjEgb3IgZ3JlYXRlcikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzaW5nIHRoZSB0cmFjZSB3ZSBjcmVhdGVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLCBhcmNoaXZlCisgICAgICAgICAgICAgICAgaXQgYW5kIGNvcHkgaXQgdG8geW91ciBob3N0IHN5c3RlbToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fi9sdHRuZy10cmFjZXMjIHRhciB6Y3ZmIGF1dG8tMjAxMjEwMTUtMjMyMTIwLnRhci5neiBhdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC8KKyAgICAgYXV0by0yMDEyMTAxNS0yMzIxMjAva2VybmVsLworICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC9rZXJuZWwvbWV0YWRhdGEKKyAgICAgYXV0by0yMDEyMTAxNS0yMzIxMjAva2VybmVsL2NoYW5uZWwwXzEKKyAgICAgYXV0by0yMDEyMTAxNS0yMzIxMjAva2VybmVsL2NoYW5uZWwwXzAKKworICAgICAkIHNjcCByb290QDE5Mi4xNjguMS40NzpsdHRuZy10cmFjZXMvYXV0by0yMDEyMTAxNS0yMzIxMjAudGFyLmd6IC4KKyAgICAgcm9vdEAxOTIuMTY4LjEuNDcncyBwYXNzd29yZDoKKyAgICAgYXV0by0yMDEyMTAxNS0yMzIxMjAudGFyLmd6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwJSAxNTY2S0IgICAxLjVNQi9zICAgMDA6MDEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVW5hcmNoaXZlIGl0IG9uIHRoZSBob3N0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBndW56aXAgLWMgYXV0by0yMDEyMTAxNS0yMzIxMjAudGFyLmd6IHwgdGFyIHh2ZiAtCisgICAgIGF1dG8tMjAxMjEwMTUtMjMyMTIwLworICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC9rZXJuZWwvCisgICAgIGF1dG8tMjAxMjEwMTUtMjMyMTIwL2tlcm5lbC9tZXRhZGF0YQorICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC9rZXJuZWwvY2hhbm5lbDBfMQorICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC9rZXJuZWwvY2hhbm5lbDBfMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXZSBjYW4gbm93IGltcG9ydCB0aGUgdHJhY2UgaW50byBFY2xpcHNlIGFuZCB2aWV3IGl0OgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZpcnN0LCBzdGFydCBlY2xpcHNlIGFuZCBvcGVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgJ0xUVG5nIEtlcm5lbCcgcGVyc3BlY3RpdmUgYnkgc2VsZWN0aW5nIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUgaXRlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgV2luZG93IHwgT3BlbiBQZXJzcGVjdGl2ZSB8IE90aGVyLi4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgZGlhbG9nIGJveCB0aGF0IG9wZW5zLCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICdMVFRuZyBLZXJuZWwnIGZyb20gdGhlIGxpc3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CYWNrIGF0IHRoZSBtYWluIG1lbnUsIHNlbGVjdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBtZW51IGl0ZW06CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZpbGUgfCBOZXcgfCBQcm9qZWN0Li4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgZGlhbG9nIGJveCB0aGF0IG9wZW5zLCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAnVHJhY2luZyB8IFRyYWNpbmcgUHJvamVjdCcgd2l6YXJkIGFuZCBwcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgJ05leHQ+Jy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdpdmUgdGhlIHByb2plY3QgYSBuYW1lIGFuZCBwcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgJ0ZpbmlzaCcuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgJ1Byb2plY3QgRXhwbG9yZXInIHBhbmUgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm9qZWN0IHlvdSBjcmVhdGVkLCByaWdodCBjbGljayBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICdUcmFjZXMnIGl0ZW0uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgJ0ltcG9ydC4uLiIgYW5kIGluIHRoZSBkaWFsb2cKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQncyBkaXNwbGF5ZWQ6PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ccm93c2UgdGhlIGZpbGVzeXN0ZW0gYW5kIGZpbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgdGhlICdrZXJuZWwnIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSB0cmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNvcGllZCBmcm9tIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGUuZy4gYXV0by0yMDEyMTAxNS0yMzIxMjAva2VybmVsPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4nQ2hlY2ttYXJrJyB0aGUgZGlyZWN0b3J5IGluIHRoZSB0cmVlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0J3MgZGlzcGxheWVkIGZvciB0aGUgdHJhY2U8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJlbG93IHRoYXQsIHNlbGVjdCAnQ29tbW9uIFRyYWNlIEZvcm1hdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEtlcm5lbCBUcmFjZScgZm9yIHRoZSAnVHJhY2UgVHlwZSc8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlByZXNzICdGaW5pc2gnIHRvIGNsb3NlIHRoZSBkaWFsb2cKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QmFjayBpbiB0aGUgJ1Byb2plY3QgRXhwbG9yZXInIHBhbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUtY2xpY2sgb24gdGhlICdrZXJuZWwnIGl0ZW0gZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2UgeW91IGp1c3QgaW1wb3J0ZWQgdW5kZXIgJ1RyYWNlcycKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBub3cgc2VlIHlvdXIgdHJhY2UgZGF0YSBkaXNwbGF5ZWQgZ3JhcGhpY2FsbHkKKyAgICAgICAgICAgICAgICBpbiBzZXZlcmFsIGRpZmZlcmVudCB2aWV3cyBpbiBFY2xpcHNlOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvbHR0bmdtYWluMC5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI2aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFjY2VzcyBleHRlbnNpdmUgaGVscCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlCisgICAgICAgICAgICAgICAgdGhlIExUVG5nIHBsdWctaW4gdG8gc2VhcmNoIGFuZCBhbmFseXplIGNhcHR1cmVkIHRyYWNlcyB2aWEKKyAgICAgICAgICAgICAgICB0aGUgRWNsaXBzZSBoZWxwIHN5c3RlbToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEhlbHAgfCBIZWxwIENvbnRlbnRzIHwgTFRUbmcgUGx1Zy1pbiBVc2VyIEd1aWRlCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbGxlY3RpbmctYW5kLXZpZXdpbmctYS10cmFjZS1pbi1lY2xpcHNlJz4KKyAgICAgICAgICAgIDx0aXRsZT5Db2xsZWN0aW5nIGFuZCB2aWV3aW5nIGEgdHJhY2UgaW4gRWNsaXBzZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBvbiBjb2xsZWN0aW5nIHRyYWNlcyByZW1vdGVseSBkb2Vzbid0IGN1cnJlbnRseQorICAgICAgICAgICAgICAgIHdvcmsgYmVjYXVzZSBvZiBFY2xpcHNlICdSU0UnIGNvbm5lY3Rpdml0eSBwcm9ibGVtcy4gTWFudWFsbHkKKyAgICAgICAgICAgICAgICB0cmFjaW5nIG9uIHRoZSB0YXJnZXQsIGNvcHlpbmcgdGhlIHRyYWNlIGZpbGVzIHRvIHRoZSBob3N0LAorICAgICAgICAgICAgICAgIGFuZCB2aWV3aW5nIHRoZSB0cmFjZSBpbiBFY2xpcHNlIG9uIHRoZSBob3N0IGFzIG91dGxpbmVkIGluCisgICAgICAgICAgICAgICAgcHJldmlvdXMgc3RlcHMgZG9lcyB3b3JrIGhvd2V2ZXIgLSBwbGVhc2UgdXNlIHRoZSBtYW51YWwKKyAgICAgICAgICAgICAgICBzdGVwcyBvdXRsaW5lZCBhYm92ZSB0byB2aWV3IHRyYWNlcyBpbiBFY2xpcHNlLgorICAgICAgICAgICAgPC9ub3RlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiBvcmRlciB0byB0cmFjZSBhIHJlbW90ZSB0YXJnZXQsIHlvdSBhbHNvIG5lZWQgdG8gYWRkCisgICAgICAgICAgICAgICAgYSAndHJhY2luZycgZ3JvdXAgb24gdGhlIHRhcmdldCBhbmQgY29ubmVjdCBhcyBhIHVzZXIKKyAgICAgICAgICAgICAgICB3aG8ncyBwYXJ0IG9mIHRoYXQgZ3JvdXAgZS5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBhZGR1c2VyIHRvbXoKKyAgICAgIyBncm91cGFkZCAtciB0cmFjaW5nCisgICAgICMgdXNlcm1vZCAtYSAtRyB0cmFjaW5nIHRvbXoKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rmlyc3QsIHN0YXJ0IGVjbGlwc2UgYW5kIG9wZW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAnTFRUbmcgS2VybmVsJyBwZXJzcGVjdGl2ZSBieSBzZWxlY3RpbmcgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUgaXRlbToKKyAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFdpbmRvdyB8IE9wZW4gUGVyc3BlY3RpdmUgfCBPdGhlci4uLgorICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIHRoZSBkaWFsb2cgYm94IHRoYXQgb3BlbnMsIHNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgJ0xUVG5nIEtlcm5lbCcgZnJvbSB0aGUgbGlzdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJhY2sgYXQgdGhlIG1haW4gbWVudSwgc2VsZWN0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIG1lbnUgaXRlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRmlsZSB8IE5ldyB8IFByb2plY3QuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIHRoZSBkaWFsb2cgYm94IHRoYXQgb3BlbnMsIHNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlICdUcmFjaW5nIHwgVHJhY2luZyBQcm9qZWN0JyB3aXphcmQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVzcyAnTmV4dD4nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2l2ZSB0aGUgcHJvamVjdCBhIG5hbWUgYW5kIHByZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAnRmluaXNoJy4gVGhhdCBzaG91bGQgcmVzdWx0IGluIGFuIGVudHJ5IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2plY3QnIHN1YndpbmRvdy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIHRoZSAnQ29udHJvbCcgc3Vid2luZG93IGp1c3QgYmVsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0LCBwcmVzcyAnTmV3IENvbm5lY3Rpb24nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIGEgbmV3IGNvbm5lY3Rpb24sIGdpdmluZyBpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lIG9yIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlByb3ZpZGUgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZAorICAgICAgICAgICAgICAgICAgICAgICAgb2YgYSBxdWFsaWZpZWQgdXNlciAoYSBtZW1iZXIgb2YgdGhlICd0cmFjaW5nJyBncm91cCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIHJvb3QgYWNjb3VudCBvbiB0aGUgdGFyZ2V0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHJvdmlkZSBhcHByb3ByaWF0ZSBhbnN3ZXJzIHRvIHdoYXRldmVyCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlzIGFza2VkIGZvciBlLmcuICdzZWN1cmUgc3RvcmFnZSBwYXNzd29yZCcKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBhbnl0aGluZyB5b3Ugd2FudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBnZXQgYW4gJ1JTRSBFcnJvcicgaXQgbWF5IGJlIGR1ZSB0byBwcm94aWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgbWF5IGJlIHBvc3NpYmxlIHRvIGdldCBhcm91bmQgdGhlIHByb2JsZW0gYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5naW5nIHRoZSBmb2xsb3dpbmcgc2V0dGluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgV2luZG93IHwgUHJlZmVyZW5jZXMgfCBOZXR3b3JrIENvbm5lY3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBTd2l0Y2ggJ0FjdGl2ZSBQcm92aWRlcicgdG8gJ0RpcmVjdCcKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbGx0bmctZG9jdW1lbnRhdGlvbic+CisgICAgICAgIDx0aXRsZT5Eb2N1bWVudGF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgcHJpbWFyeSBMVFRuZyBEb2N1bWVudGF0aW9uIG9uIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9sdHRuZy5vcmcvZG9jcy8nPkxUVG5nIERvY3VtZW50YXRpb248L3VsaW5rPgorICAgICAgICAgICAgc2l0ZS4KKyAgICAgICAgICAgIFRoZSBkb2N1bWVudGF0aW9uIG9uIHRoaXMgc2l0ZSBpcyBhcHByb3ByaWF0ZSBmb3IgaW50ZXJtZWRpYXRlIHRvCisgICAgICAgICAgICBhZHZhbmNlZCBzb2Z0d2FyZSBkZXZlbG9wZXJzIHdobyBhcmUgd29ya2luZyBpbiBhIExpbnV4IGVudmlyb25tZW50CisgICAgICAgICAgICBhbmQgYXJlIGludGVyZXN0ZWQgaW4gZWZmaWNpZW50IHNvZnR3YXJlIHRyYWNpbmcuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBMVFRuZyBpbiBnZW5lcmFsLCB2aXNpdCB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sdHRuZy5vcmcvbHR0bmcyLjAnPkxUVG5nIFByb2plY3Q8L3VsaW5rPgorICAgICAgICAgICAgc2l0ZS4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhICJHZXR0aW5nIFN0YXJ0ZWQiIGxpbmsgb24gdGhpcyBzaXRlIHRoYXQgdGFrZXMKKyAgICAgICAgICAgIHlvdSB0byBhbiBMVFRuZyBRdWljayBTdGFydC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmluYWxseSwgeW91IGNhbiBhY2Nlc3MgZXh0ZW5zaXZlIGhlbHAgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZQorICAgICAgICAgICAgdGhlIExUVG5nIHBsdWctaW4gdG8gc2VhcmNoIGFuZCBhbmFseXplIGNhcHR1cmVkIHRyYWNlcyB2aWEgdGhlCisgICAgICAgICAgICBFY2xpcHNlIGhlbHAgc3lzdGVtOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBIZWxwIHwgSGVscCBDb250ZW50cyB8IExUVG5nIFBsdWctaW4gVXNlciBHdWlkZQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncHJvZmlsZS1tYW51YWwtYmxrdHJhY2UnPgorICAgIDx0aXRsZT5ibGt0cmFjZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgYmxrdHJhY2UgaXMgYSB0b29sIGZvciB0cmFjaW5nIGFuZCByZXBvcnRpbmcgbG93LWxldmVsIGRpc2sgSS9PLgorICAgICAgICBibGt0cmFjZSBwcm92aWRlcyB0aGUgdHJhY2luZyBoYWxmIG9mIHRoZSBlcXVhdGlvbjsgaXRzIG91dHB1dCBjYW4KKyAgICAgICAgYmUgcGlwZWQgaW50byB0aGUgYmxrcGFyc2UgcHJvZ3JhbSwgd2hpY2ggcmVuZGVycyB0aGUgZGF0YSBpbiBhCisgICAgICAgIGh1bWFuLXJlYWRhYmxlIGZvcm0gYW5kIGRvZXMgc29tZSBiYXNpYyBhbmFseXNpczoKKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nYmxrdHJhY2Utc2V0dXAnPgorICAgICAgICA8dGl0bGU+U2V0dXA8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIHRoaXMgc2VjdGlvbiwgd2UnbGwgYXNzdW1lIHlvdSd2ZSBhbHJlYWR5IHBlcmZvcm1lZCB0aGUKKyAgICAgICAgICAgIGJhc2ljIHNldHVwIG91dGxpbmVkIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Byb2ZpbGUtbWFudWFsLWdlbmVyYWwtc2V0dXAnPkdlbmVyYWwgU2V0dXA8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgYmxrdHJhY2UgaXMgYW4gYXBwbGljYXRpb24gdGhhdCBydW5zIG9uIHRoZSB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgWW91IGNhbiBydW4gdGhlIGVudGlyZSBibGt0cmFjZSBhbmQgYmxrcGFyc2UgcGlwZWxpbmUgb24gdGhlCisgICAgICAgICAgICB0YXJnZXQsIG9yIHlvdSBjYW4gcnVuIGJsa3RyYWNlIGluICdsaXN0ZW4nIG1vZGUgb24gdGhlIHRhcmdldAorICAgICAgICAgICAgYW5kIGhhdmUgYmxrdHJhY2UgYW5kIGJsa3BhcnNlIGNvbGxlY3QgYW5kIGFuYWx5emUgdGhlIGRhdGEgb24KKyAgICAgICAgICAgIHRoZSBob3N0IChzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctYmxrdHJhY2UtcmVtb3RlbHknPlVzaW5nIGJsa3RyYWNlIFJlbW90ZWx5PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gYmVsb3cpLgorICAgICAgICAgICAgRm9yIHRoZSByZXN0IG9mIHRoaXMgc2VjdGlvbiB3ZSBhc3N1bWUgeW91J3ZlIHNzaCdlZCB0byB0aGUKKyAgICAgICAgICAgIGhvc3QgYW5kIHdpbGwgYmUgcnVubmluZyBibGtyYWNlIG9uIHRoZSB0YXJnZXQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmxrdHJhY2UtYmFzaWMtdXNhZ2UnPgorICAgICAgICA8dGl0bGU+QmFzaWMgVXNhZ2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gcmVjb3JkIGEgdHJhY2UsIHNpbXBseSBydW4gdGhlICdibGt0cmFjZScgY29tbWFuZCwgZ2l2aW5nIGl0CisgICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgYmxvY2sgZGV2aWNlIHlvdSB3YW50IHRvIHRyYWNlIGFjdGl2aXR5IG9uOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGJsa3RyYWNlIC9kZXYvc2RjCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJbiBhbm90aGVyIHNoZWxsLCBleGVjdXRlIGEgd29ya2xvYWQgeW91IHdhbnQgdG8gdHJhY2UuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6L21lZGlhL3NkYyMgcm0gbGludXgtMi42LjE5LjIudGFyLmJ6Mjsgd2dldCA8dWxpbmsgdXJsPSdodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6Mic+aHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejI8L3VsaW5rPjsgc3luYworICAgICBDb25uZWN0aW5nIHRvIGRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnICgxNDAuMjExLjE2OS41OTo4MCkKKyAgICAgbGludXgtMi42LjE5LjIudGFyLmIgMTAwJSB8KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKnwgNDE3MjdrICAwOjAwOjAwIEVUQQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgUHJlc3MgQ3RybC1DIGluIHRoZSBibGt0cmFjZSBzaGVsbCB0byBzdG9wIHRoZSB0cmFjZS4gSXQgd2lsbAorICAgICAgICAgICAgZGlzcGxheSBob3cgbWFueSBldmVudHMgd2VyZSBsb2dnZWQsIGFsb25nIHdpdGggdGhlIHBlci1jcHUgZmlsZQorICAgICAgICAgICAgc2l6ZXMgKGJsa3RyYWNlIHJlY29yZHMgdHJhY2VzIGluIHBlci1jcHUga2VybmVsIGJ1ZmZlcnMgYW5kCisgICAgICAgICAgICBzaW1wbHkgZHVtcHMgdGhlbSB0byB1c2Vyc3BhY2UgZm9yIGJsa3BhcnNlIHRvIG1lcmdlIGFuZCBzb3J0CisgICAgICAgICAgICBsYXRlcikuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIF5DPT09IHNkYyA9PT0KKyAgICAgIENQVSAgMDogICAgICAgICAgICAgICAgIDcwODIgZXZlbnRzLCAgICAgIDMzMiBLaUIgZGF0YQorICAgICAgQ1BVICAxOiAgICAgICAgICAgICAgICAgMTU3OCBldmVudHMsICAgICAgIDc0IEtpQiBkYXRhCisgICAgICBUb3RhbDogICAgICAgICAgICAgICAgICA4NjYwIGV2ZW50cyAoZHJvcHBlZCAwKSwgICAgICA0MDYgS2lCIGRhdGEKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIElmIHlvdSBleGFtaW5lIHRoZSBmaWxlcyBzYXZlZCB0byBkaXNrLCB5b3Ugc2VlIG11bHRpcGxlIGZpbGVzLAorICAgICAgICAgICAgb25lIHBlciBDUFUgYW5kIHdpdGggdGhlIGRldmljZSBuYW1lIGFzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgZmlsZW5hbWU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgbHMgLWFsCisgICAgIGRyd3hyLXhyLXggICAgNiByb290ICAgICByb290ICAgICAgICAgIDEwMjQgT2N0IDI3IDIyOjM5IC4KKyAgICAgZHJ3eHItc3IteCAgICA0IHJvb3QgICAgIHJvb3QgICAgICAgICAgMTAyNCBPY3QgMjYgMTg6MjQgLi4KKyAgICAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgIDMzOTkzOCBPY3QgMjcgMjI6NDAgc2RjLmJsa3RyYWNlLjAKKyAgICAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICA3NTc1MyBPY3QgMjcgMjI6NDAgc2RjLmJsa3RyYWNlLjEKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRvIHZpZXcgdGhlIHRyYWNlIGV2ZW50cywgc2ltcGx5IGludm9rZSAnYmxrcGFyc2UnIGluIHRoZQorICAgICAgICAgICAgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHRyYWNlIGZpbGVzLCBnaXZpbmcgaXQgdGhlIGRldmljZSBuYW1lCisgICAgICAgICAgICB0aGF0IGZvcm1zIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBmaWxlbmFtZXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgYmxrcGFyc2Ugc2RjCisKKyAgICAgIDgsMzIgICAxICAgICAgICAxICAgICAwLjAwMDAwMDAwMCAgMTIyNSAgUSAgV1MgMzQxNzA0OCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAgMiAgICAgMC4wMDAwMjUyMTMgIDEyMjUgIEcgIFdTIDM0MTcwNDggKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgIDMgICAgIDAuMDAwMDMzMzg0ICAxMjI1ICBQICAgTiBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgICA0ICAgICAwLjAwMDA0MzMwMSAgMTIyNSAgSSAgV1MgMzQxNzA0OCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDAwNTcyNzAgICAgIDAgIG0gICBOIGNmcTEyMjUgaW5zZXJ0X3JlcXVlc3QKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDA2NDgxMyAgICAgMCAgbSAgIE4gY2ZxMTIyNSBhZGRfdG9fcnIKKyAgICAgIDgsMzIgICAxICAgICAgICA1ICAgICAwLjAwMDA3NjMzNiAgMTIyNSAgVSAgIE4gW2piZDIvc2RjLThdIDEKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDA4ODU1OSAgICAgMCAgbSAgIE4gY2ZxIHdvcmtsb2FkIHNsaWNlOjE1MAorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMDk3MzU5ICAgICAwICBtICAgTiBjZnExMjI1IHNldF9hY3RpdmUgd2xfcHJpbzowIHdsX3R5cGU6MQorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMTA0MDYzICAgICAwICBtICAgTiBjZnExMjI1IE5vdCBpZGxpbmcuIHN0LT5jb3VudDoxCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDAxMTI1ODQgICAgIDAgIG0gICBOIGNmcTEyMjUgZmlmbz0gIChudWxsKQorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMTE4NzMwICAgICAwICBtICAgTiBjZnExMjI1IGRpc3BhdGNoX2luc2VydAorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMTI3MzkwICAgICAwICBtICAgTiBjZnExMjI1IGRpc3BhdGNoZWQgYSByZXF1ZXN0CisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDAxMzM1MzYgICAgIDAgIG0gICBOIGNmcTEyMjUgYWN0aXZhdGUgcnEsIGRydj0xCisgICAgICA4LDMyICAgMSAgICAgICAgNiAgICAgMC4wMDAxMzY4ODkgIDEyMjUgIEQgIFdTIDM0MTcwNDggKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgIDcgICAgIDAuMDAwMzYwMzgxICAxMjI1ICBRICBXUyAzNDE3MDU2ICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgICA4ICAgICAwLjAwMDM3NzQyMiAgMTIyNSAgRyAgV1MgMzQxNzA1NiArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAgOSAgICAgMC4wMDAzODg4NzYgIDEyMjUgIFAgICBOIFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMTAgICAgIDAuMDAwMzk3ODg2ICAxMjI1ICBRICBXUyAzNDE3MDY0ICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDExICAgICAwLjAwMDQwNDgwMCAgMTIyNSAgTSAgV1MgMzQxNzA2NCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAxMiAgICAgMC4wMDA0MTIzNDMgIDEyMjUgIFEgIFdTIDM0MTcwNzIgKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMTMgICAgIDAuMDAwNDE2NTMzICAxMjI1ICBNICBXUyAzNDE3MDcyICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDE0ICAgICAwLjAwMDQyMjEyMSAgMTIyNSAgUSAgV1MgMzQxNzA4MCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAxNSAgICAgMC4wMDA0MjUxOTQgIDEyMjUgIE0gIFdTIDM0MTcwODAgKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMTYgICAgIDAuMDAwNDMxOTY4ICAxMjI1ICBRICBXUyAzNDE3MDg4ICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDE3ICAgICAwLjAwMDQzNTI1MSAgMTIyNSAgTSAgV1MgMzQxNzA4OCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAxOCAgICAgMC4wMDA0NDAyNzkgIDEyMjUgIFEgIFdTIDM0MTcwOTYgKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMTkgICAgIDAuMDAwNDQzOTExICAxMjI1ICBNICBXUyAzNDE3MDk2ICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDIwICAgICAwLjAwMDQ1MDMzNiAgMTIyNSAgUSAgV1MgMzQxNzEwNCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAyMSAgICAgMC4wMDA0NTQwMzggIDEyMjUgIE0gIFdTIDM0MTcxMDQgKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMjIgICAgIDAuMDAwNDYyMDcwICAxMjI1ICBRICBXUyAzNDE3MTEyICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDIzICAgICAwLjAwMDQ2NTQyMiAgMTIyNSAgTSAgV1MgMzQxNzExMiArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAyNCAgICAgMC4wMDA0NzQyMjIgIDEyMjUgIEkgIFdTIDM0MTcwNTYgKyA2NCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDQ4MzAyMiAgICAgMCAgbSAgIE4gY2ZxMTIyNSBpbnNlcnRfcmVxdWVzdAorICAgICAgOCwzMiAgIDEgICAgICAgMjUgICAgIDAuMDAwNDg5NzI3ICAxMjI1ICBVICAgTiBbamJkMi9zZGMtOF0gMQorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwNDk4NDU3ICAgICAwICBtICAgTiBjZnExMjI1IE5vdCBpZGxpbmcuIHN0LT5jb3VudDoxCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDA1MDM3NjUgICAgIDAgIG0gICBOIGNmcTEyMjUgZGlzcGF0Y2hfaW5zZXJ0CisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDA1MTI5MTQgICAgIDAgIG0gICBOIGNmcTEyMjUgZGlzcGF0Y2hlZCBhIHJlcXVlc3QKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDUxODg1MSAgICAgMCAgbSAgIE4gY2ZxMTIyNSBhY3RpdmF0ZSBycSwgZHJ2PTIKKyAgICAgIC4KKyAgICAgIC4KKyAgICAgIC4KKyAgICAgIDgsMzIgICAwICAgICAgICAwICAgIDU4LjUxNTAwNjEzOCAgICAgMCAgbSAgIE4gY2ZxMzU1MSBjb21wbGV0ZSBycW5vaWRsZSAxCisgICAgICA4LDMyICAgMCAgICAgMjAyNCAgICA1OC41MTY2MDMyNjkgICAgIDMgIEMgIFdTIDMxNTY5OTIgKyAxNiBbMF0KKyAgICAgIDgsMzIgICAwICAgICAgICAwICAgIDU4LjUxNjYyNjczNiAgICAgMCAgbSAgIE4gY2ZxMzU1MSBjb21wbGV0ZSBycW5vaWRsZSAxCisgICAgICA4LDMyICAgMCAgICAgICAgMCAgICA1OC41MTY2MzQ1NTggICAgIDAgIG0gICBOIGNmcTM1NTEgYXJtX2lkbGU6IDggZ3JvdXBfaWRsZTogMAorICAgICAgOCwzMiAgIDAgICAgICAgIDAgICAgNTguNTE2NjM2OTMzICAgICAwICBtICAgTiBjZnEgc2NoZWR1bGUgZGlzcGF0Y2gKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgIDU4LjUxNjk3MTYxMyAgICAgMCAgbSAgIE4gY2ZxMzU1MSBzbGljZSBleHBpcmVkIHQ9MAorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgNTguNTE2OTgyMDg5ICAgICAwICBtICAgTiBjZnEzNTUxIHNsX3VzZWQ9MTMgZGlzcD02IGNoYXJnZT0xMyBpb3BzPTAgc2VjdD04MAorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgNTguNTE2OTg1NTExICAgICAwICBtICAgTiBjZnEzNTUxIGRlbF9mcm9tX3JyCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICA1OC41MTY5OTA4MTkgICAgIDAgIG0gICBOIGNmcTM1NTEgcHV0X3F1ZXVlCisKKyAgICAgQ1BVMCAoc2RjKToKKyAgICAgIFJlYWRzIFF1ZXVlZDogICAgICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZXMgUXVldWVkOiAgICAgICAgIDMzMSwgICAyNiwyODRLaUIKKyAgICAgIFJlYWQgRGlzcGF0Y2hlczogICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZSBEaXNwYXRjaGVzOiAgICAgIDQ4NSwgICA0MCw0ODRLaUIKKyAgICAgIFJlYWRzIFJlcXVldWVkOiAgICAgICAgIDAJCSBXcml0ZXMgUmVxdWV1ZWQ6ICAgICAgICAgMAorICAgICAgUmVhZHMgQ29tcGxldGVkOiAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlcyBDb21wbGV0ZWQ6ICAgICAgNTExLCAgIDQxLDAwMEtpQgorICAgICAgUmVhZCBNZXJnZXM6ICAgICAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlIE1lcmdlczogICAgICAgICAgIDEzLCAgICAgIDE2MEtpQgorICAgICAgUmVhZCBkZXB0aDogICAgICAgICAgICAgMCAgICAgICAgCSBXcml0ZSBkZXB0aDogICAgICAgICAgICAgMgorICAgICAgSU8gdW5wbHVnczogICAgICAgICAgICAyMyAgICAgICAgCSBUaW1lciB1bnBsdWdzOiAgICAgICAgICAgMAorICAgICBDUFUxIChzZGMpOgorICAgICAgUmVhZHMgUXVldWVkOiAgICAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlcyBRdWV1ZWQ6ICAgICAgICAgMjQ5LCAgIDE1LDgwMEtpQgorICAgICAgUmVhZCBEaXNwYXRjaGVzOiAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlIERpc3BhdGNoZXM6ICAgICAgIDQyLCAgICAxLDYwMEtpQgorICAgICAgUmVhZHMgUmVxdWV1ZWQ6ICAgICAgICAgMAkJIFdyaXRlcyBSZXF1ZXVlZDogICAgICAgICAwCisgICAgICBSZWFkcyBDb21wbGV0ZWQ6ICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGVzIENvbXBsZXRlZDogICAgICAgMTYsICAgIDEsMDg0S2lCCisgICAgICBSZWFkIE1lcmdlczogICAgICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGUgTWVyZ2VzOiAgICAgICAgICAgNDAsICAgICAgMjc2S2lCCisgICAgICBSZWFkIGRlcHRoOiAgICAgICAgICAgICAwICAgICAgICAJIFdyaXRlIGRlcHRoOiAgICAgICAgICAgICAyCisgICAgICBJTyB1bnBsdWdzOiAgICAgICAgICAgIDMwICAgICAgICAJIFRpbWVyIHVucGx1Z3M6ICAgICAgICAgICAxCisKKyAgICAgVG90YWwgKHNkYyk6CisgICAgICBSZWFkcyBRdWV1ZWQ6ICAgICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGVzIFF1ZXVlZDogICAgICAgICA1ODAsICAgNDIsMDg0S2lCCisgICAgICBSZWFkIERpc3BhdGNoZXM6ICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGUgRGlzcGF0Y2hlczogICAgICA1MjcsICAgNDIsMDg0S2lCCisgICAgICBSZWFkcyBSZXF1ZXVlZDogICAgICAgICAwCQkgV3JpdGVzIFJlcXVldWVkOiAgICAgICAgIDAKKyAgICAgIFJlYWRzIENvbXBsZXRlZDogICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZXMgQ29tcGxldGVkOiAgICAgIDUyNywgICA0MiwwODRLaUIKKyAgICAgIFJlYWQgTWVyZ2VzOiAgICAgICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZSBNZXJnZXM6ICAgICAgICAgICA1MywgICAgICA0MzZLaUIKKyAgICAgIElPIHVucGx1Z3M6ICAgICAgICAgICAgNTMgICAgICAgIAkgVGltZXIgdW5wbHVnczogICAgICAgICAgIDEKKworICAgICBUaHJvdWdocHV0IChSL1cpOiAwS2lCL3MgLyA3MTlLaUIvcworICAgICBFdmVudHMgKHNkYyk6IDYsNTkyIGVudHJpZXMKKyAgICAgU2tpcHM6IDAgZm9yd2FyZCAoMCAtICAgMC4wJSkKKyAgICAgSW5wdXQgZmlsZSBzZGMuYmxrdHJhY2UuMCBhZGRlZAorICAgICBJbnB1dCBmaWxlIHNkYy5ibGt0cmFjZS4xIGFkZGVkCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgcmVwb3J0IHNob3dzIGVhY2ggZXZlbnQgdGhhdCB3YXMgZm91bmQgaW4gdGhlIGJsa3RyYWNlIGRhdGEsCisgICAgICAgICAgICBhbG9uZyB3aXRoIGEgc3VtbWFyeSBvZiB0aGUgb3ZlcmFsbCBibG9jayBJL08gdHJhZmZpYyBkdXJpbmcKKyAgICAgICAgICAgIHRoZSBydW4uIFlvdSBjYW4gbG9vayBhdCB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL2Jsa3BhcnNlJz5ibGtwYXJzZTwvdWxpbms+CisgICAgICAgICAgICBtYW5wYWdlIHRvIGxlYXJuIHRoZQorICAgICAgICAgICAgbWVhbmluZyBvZiBlYWNoIGZpZWxkIGRpc3BsYXllZCBpbiB0aGUgdHJhY2UgbGlzdGluZy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdibGt0cmFjZS1saXZlLW1vZGUnPgorICAgICAgICAgICAgPHRpdGxlPkxpdmUgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIGJsa3RyYWNlIGFuZCBibGtwYXJzZSBhcmUgZGVzaWduZWQgZnJvbSB0aGUgZ3JvdW5kIHVwIHRvCisgICAgICAgICAgICAgICAgYmUgYWJsZSB0byBvcGVyYXRlIHRvZ2V0aGVyIGluIGEgJ3BpcGUgbW9kZScgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgc3Rkb3V0IG9mIGJsa3RyYWNlIGNhbiBiZSBmZWQgZGlyZWN0bHkgaW50byB0aGUgc3RkaW4gb2YKKyAgICAgICAgICAgICAgICBibGtwYXJzZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgYmxrdHJhY2UgL2Rldi9zZGMgLW8gLSB8IGJsa3BhcnNlIC1pIC0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyBlbmFibGVzIGxvbmctbGl2ZWQgdHJhY2luZyBzZXNzaW9ucyB0byBydW4gd2l0aG91dAorICAgICAgICAgICAgICAgIHdyaXRpbmcgYW55dGhpbmcgdG8gZGlzaywgYW5kIGFsbG93cyB0aGUgdXNlciB0byBsb29rIGZvcgorICAgICAgICAgICAgICAgIGNlcnRhaW4gY29uZGl0aW9ucyBpbiB0aGUgdHJhY2UgZGF0YSBpbiAncmVhbC10aW1lJyBieQorICAgICAgICAgICAgICAgIHZpZXdpbmcgdGhlIHRyYWNlIG91dHB1dCBhcyBpdCBzY3JvbGxzIGJ5IG9uIHRoZSBzY3JlZW4gb3IKKyAgICAgICAgICAgICAgICBieSBwYXNzaW5nIGl0IGFsb25nIHRvIHlldCBhbm90aGVyIHByb2dyYW0gaW4gdGhlIHBpcGVsaW5lCisgICAgICAgICAgICAgICAgc3VjaCBhcyBncmVwIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IGFuZCBjYXB0dXJlCisgICAgICAgICAgICAgICAgY29uZGl0aW9ucyBvZiBpbnRlcmVzdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlcmUncyBhY3R1YWxseSBhbm90aGVyIGJsa3RyYWNlIGNvbW1hbmQgdGhhdCBpbXBsZW1lbnRzCisgICAgICAgICAgICAgICAgdGhlIGFib3ZlIHBpcGVsaW5lIGFzIGEgc2luZ2xlIGNvbW1hbmQsIHNvIHRoZSB1c2VyIGRvZXNuJ3QKKyAgICAgICAgICAgICAgICBoYXZlIHRvIGJvdGhlciB0eXBpbmcgaW4gdGhlIGFib3ZlIGNvbW1hbmQgc2VxdWVuY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGJ0cmFjZSAvZGV2L3NkYworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1ibGt0cmFjZS1yZW1vdGVseSc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgYmxrdHJhY2UgUmVtb3RlbHk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIGJsa3RyYWNlIHRyYWNlcyBibG9jayBJL08gYW5kIGF0IHRoZSBzYW1lIHRpbWUKKyAgICAgICAgICAgICAgICBub3JtYWxseSB3cml0ZXMgaXRzIHRyYWNlIGRhdGEgdG8gYSBibG9jayBkZXZpY2UsIGFuZAorICAgICAgICAgICAgICAgIGluIGdlbmVyYWwgYmVjYXVzZSBpdCdzIG5vdCByZWFsbHkgYSBncmVhdCBpZGVhIHRvIG1ha2UKKyAgICAgICAgICAgICAgICB0aGUgZGV2aWNlIGJlaW5nIHRyYWNlZCB0aGUgc2FtZSBhcyB0aGUgZGV2aWNlIHRoZSB0cmFjZXIKKyAgICAgICAgICAgICAgICB3cml0ZXMgdG8sIGJsa3RyYWNlIHByb3ZpZGVzIGEgd2F5IHRvIHRyYWNlIHdpdGhvdXQKKyAgICAgICAgICAgICAgICBwZXJ0dXJiaW5nIHRoZSB0cmFjZWQgZGV2aWNlIGF0IGFsbCBieSBwcm92aWRpbmcgbmF0aXZlCisgICAgICAgICAgICAgICAgc3VwcG9ydCBmb3Igc2VuZGluZyBhbGwgdHJhY2UgZGF0YSBvdmVyIHRoZSBuZXR3b3JrLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBoYXZlIGJsa3RyYWNlIG9wZXJhdGUgaW4gdGhpcyBtb2RlLCBzdGFydCBibGt0cmFjZSBvbgorICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgc3lzdGVtIGJlaW5nIHRyYWNlZCB3aXRoIHRoZSAtbCBvcHRpb24sIGFsb25nIHdpdGgKKyAgICAgICAgICAgICAgICB0aGUgZGV2aWNlIHRvIHRyYWNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBibGt0cmFjZSAtbCAvZGV2L3NkYworICAgICBzZXJ2ZXI6IHdhaXRpbmcgZm9yIGNvbm5lY3Rpb25zLi4uCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE9uIHRoZSBob3N0IHN5c3RlbSwgdXNlIHRoZSAtaCBvcHRpb24gdG8gY29ubmVjdCB0byB0aGUKKyAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtLCBhbHNvIHBhc3NpbmcgaXQgdGhlIGRldmljZSB0byB0cmFjZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYmxrdHJhY2UgLWQgL2Rldi9zZGMgLWggMTkyLjE2OC4xLjQzCisgICAgIGJsa3RyYWNlOiBjb25uZWN0aW5nIHRvIDE5Mi4xNjguMS40MworICAgICBibGt0cmFjZTogY29ubmVjdGVkIQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBPbiB0aGUgdGFyZ2V0IHN5c3RlbSwgeW91IHNob3VsZCBzZWUgdGhpczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHNlcnZlcjogY29ubmVjdGlvbiBmcm9tIDE5Mi4xNjguMS40MworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiBhbm90aGVyIHNoZWxsLCBleGVjdXRlIGEgd29ya2xvYWQgeW91IHdhbnQgdG8gdHJhY2UuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5Oi9tZWRpYS9zZGMjIHJtIGxpbnV4LTIuNi4xOS4yLnRhci5iejI7IHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz47IHN5bmMKKyAgICAgQ29ubmVjdGluZyB0byBkb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZyAoMTQwLjIxMS4xNjkuNTk6ODApCisgICAgIGxpbnV4LTIuNi4xOS4yLnRhci5iIDEwMCUgfCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip8IDQxNzI3ayAgMDowMDowMCBFVEEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgV2hlbiBpdCdzIGRvbmUsIGRvIGEgQ3RybC1DIG9uIHRoZSBob3N0IHN5c3RlbSB0bworICAgICAgICAgICAgICAgIHN0b3AgdGhlIHRyYWNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgXkM9PT0gc2RjID09PQorICAgICAgQ1BVICAwOiAgICAgICAgICAgICAgICAgNzY5MSBldmVudHMsICAgICAgMzYxIEtpQiBkYXRhCisgICAgICBDUFUgIDE6ICAgICAgICAgICAgICAgICA0MTA5IGV2ZW50cywgICAgICAxOTMgS2lCIGRhdGEKKyAgICAgIFRvdGFsOiAgICAgICAgICAgICAgICAgMTE4MDAgZXZlbnRzIChkcm9wcGVkIDApLCAgICAgIDU1NCBLaUIgZGF0YQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBPbiB0aGUgdGFyZ2V0IHN5c3RlbSwgeW91IHNob3VsZCBhbHNvIHNlZSBhIHRyYWNlCisgICAgICAgICAgICAgICAgc3VtbWFyeSBmb3IgdGhlIHRyYWNlIGp1c3QgZW5kZWQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBzZXJ2ZXI6IGVuZCBvZiBydW4gZm9yIDE5Mi4xNjguMS40MzpzZGMKKyAgICAgPT09IHNkYyA9PT0KKyAgICAgIENQVSAgMDogICAgICAgICAgICAgICAgIDc2OTEgZXZlbnRzLCAgICAgIDM2MSBLaUIgZGF0YQorICAgICAgQ1BVICAxOiAgICAgICAgICAgICAgICAgNDEwOSBldmVudHMsICAgICAgMTkzIEtpQiBkYXRhCisgICAgICBUb3RhbDogICAgICAgICAgICAgICAgIDExODAwIGV2ZW50cyAoZHJvcHBlZCAwKSwgICAgICA1NTQgS2lCIGRhdGEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGJsa3RyYWNlIGluc3RhbmNlIG9uIHRoZSBob3N0IHdpbGwgc2F2ZSB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgb3V0cHV0IGluc2lkZSBhIGhvc3RuYW1lLXRpbWVzdGFtcCBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGxzIC1hbAorICAgICBkcnd4ci14ci14ICAgMTAgcm9vdCAgICAgcm9vdCAgICAgICAgICAxMDI0IE9jdCAyOCAwMjo0MCAuCisgICAgIGRyd3hyLXNyLXggICAgNCByb290ICAgICByb290ICAgICAgICAgIDEwMjQgT2N0IDI2IDE4OjI0IC4uCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgIDEwMjQgT2N0IDI4IDAyOjQwIDE5Mi4xNjguMS40My0yMDEyLTEwLTI4LTAyOjQwOjU2CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIGNkIGludG8gdGhhdCBkaXJlY3RvcnkgdG8gc2VlIHRoZSBvdXRwdXQgZmlsZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGxzIC1sCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAzNjkxOTMgT2N0IDI4IDAyOjQ0IHNkYy5ibGt0cmFjZS4wCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAxOTcyNzggT2N0IDI4IDAyOjQ0IHNkYy5ibGt0cmFjZS4xCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFuZCBydW4gYmxrcGFyc2Ugb24gdGhlIGhvc3Qgc3lzdGVtIHVzaW5nIHRoZSBkZXZpY2UgbmFtZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYmxrcGFyc2Ugc2RjCisKKyAgICAgIDgsMzIgICAxICAgICAgICAxICAgICAwLjAwMDAwMDAwMCAgMTI2MyAgUSAgUk0gNjAxNiArIDggW2xzXQorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMDM2MDM4ICAgICAwICBtICAgTiBjZnExMjYzIGFsbG9jZWQKKyAgICAgIDgsMzIgICAxICAgICAgICAyICAgICAwLjAwMDAzOTM5MCAgMTI2MyAgRyAgUk0gNjAxNiArIDggW2xzXQorICAgICAgOCwzMiAgIDEgICAgICAgIDMgICAgIDAuMDAwMDQ5MTY4ICAxMjYzICBJICBSTSA2MDE2ICsgOCBbbHNdCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDAwNTYxNTIgICAgIDAgIG0gICBOIGNmcTEyNjMgaW5zZXJ0X3JlcXVlc3QKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDA2MTYwMCAgICAgMCAgbSAgIE4gY2ZxMTI2MyBhZGRfdG9fcnIKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDA3NTQ5OCAgICAgMCAgbSAgIE4gY2ZxIHdvcmtsb2FkIHNsaWNlOjMwMAorICAgICAgLgorICAgICAgLgorICAgICAgLgorICAgICAgOCwzMiAgIDAgICAgICAgIDAgICAxNzcuMjY2Mzg1Njk2ICAgICAwICBtICAgTiBjZnExMjY3IGFybV9pZGxlOiA4IGdyb3VwX2lkbGU6IDAKKyAgICAgIDgsMzIgICAwICAgICAgICAwICAgMTc3LjI2NjM4ODE0MCAgICAgMCAgbSAgIE4gY2ZxIHNjaGVkdWxlIGRpc3BhdGNoCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgIDE3Ny4yNjY2NzkyMzkgICAgIDAgIG0gICBOIGNmcTEyNjcgc2xpY2UgZXhwaXJlZCB0PTAKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgMTc3LjI2NjY4OTI5NyAgICAgMCAgbSAgIE4gY2ZxMTI2NyBzbF91c2VkPTkgZGlzcD02IGNoYXJnZT05IGlvcHM9MCBzZWN0PTU2CisgICAgICA4LDMyICAgMSAgICAgICAgMCAgIDE3Ny4yNjY2OTI2NDkgICAgIDAgIG0gICBOIGNmcTEyNjcgZGVsX2Zyb21fcnIKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgMTc3LjI2NjY5NjU2MCAgICAgMCAgbSAgIE4gY2ZxMTI2NyBwdXRfcXVldWUKKworICAgICBDUFUwIChzZGMpOgorICAgICAgUmVhZHMgUXVldWVkOiAgICAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlcyBRdWV1ZWQ6ICAgICAgICAgMjcwLCAgIDIxLDcwOEtpQgorICAgICAgUmVhZCBEaXNwYXRjaGVzOiAgICAgICA1OSwgICAgMiw2MjhLaUIJIFdyaXRlIERpc3BhdGNoZXM6ICAgICAgNDk1LCAgIDM5LDk2NEtpQgorICAgICAgUmVhZHMgUmVxdWV1ZWQ6ICAgICAgICAgMAkJIFdyaXRlcyBSZXF1ZXVlZDogICAgICAgICAwCisgICAgICBSZWFkcyBDb21wbGV0ZWQ6ICAgICAgIDkwLCAgICAyLDc1MktpQgkgV3JpdGVzIENvbXBsZXRlZDogICAgICA1NDMsICAgNDEsNTk2S2lCCisgICAgICBSZWFkIE1lcmdlczogICAgICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGUgTWVyZ2VzOiAgICAgICAgICAgIDksICAgICAgMzQ0S2lCCisgICAgICBSZWFkIGRlcHRoOiAgICAgICAgICAgICAyICAgICAgICAJIFdyaXRlIGRlcHRoOiAgICAgICAgICAgICAyCisgICAgICBJTyB1bnBsdWdzOiAgICAgICAgICAgIDIwICAgICAgICAJIFRpbWVyIHVucGx1Z3M6ICAgICAgICAgICAxCisgICAgIENQVTEgKHNkYyk6CisgICAgICBSZWFkcyBRdWV1ZWQ6ICAgICAgICAgNjg4LCAgICAyLDc1MktpQgkgV3JpdGVzIFF1ZXVlZDogICAgICAgICAzODEsICAgMjAsNjUyS2lCCisgICAgICBSZWFkIERpc3BhdGNoZXM6ICAgICAgIDMxLCAgICAgIDEyNEtpQgkgV3JpdGUgRGlzcGF0Y2hlczogICAgICAgNTksICAgIDIsMzk2S2lCCisgICAgICBSZWFkcyBSZXF1ZXVlZDogICAgICAgICAwCQkgV3JpdGVzIFJlcXVldWVkOiAgICAgICAgIDAKKyAgICAgIFJlYWRzIENvbXBsZXRlZDogICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZXMgQ29tcGxldGVkOiAgICAgICAxMSwgICAgICA3NjRLaUIKKyAgICAgIFJlYWQgTWVyZ2VzOiAgICAgICAgICA1OTgsICAgIDIsMzkyS2lCCSBXcml0ZSBNZXJnZXM6ICAgICAgICAgICA4OCwgICAgICA0NDhLaUIKKyAgICAgIFJlYWQgZGVwdGg6ICAgICAgICAgICAgIDIgICAgICAgIAkgV3JpdGUgZGVwdGg6ICAgICAgICAgICAgIDIKKyAgICAgIElPIHVucGx1Z3M6ICAgICAgICAgICAgNTIgICAgICAgIAkgVGltZXIgdW5wbHVnczogICAgICAgICAgIDAKKworICAgICBUb3RhbCAoc2RjKToKKyAgICAgIFJlYWRzIFF1ZXVlZDogICAgICAgICA2ODgsICAgIDIsNzUyS2lCCSBXcml0ZXMgUXVldWVkOiAgICAgICAgIDY1MSwgICA0MiwzNjBLaUIKKyAgICAgIFJlYWQgRGlzcGF0Y2hlczogICAgICAgOTAsICAgIDIsNzUyS2lCCSBXcml0ZSBEaXNwYXRjaGVzOiAgICAgIDU1NCwgICA0MiwzNjBLaUIKKyAgICAgIFJlYWRzIFJlcXVldWVkOiAgICAgICAgIDAJCSBXcml0ZXMgUmVxdWV1ZWQ6ICAgICAgICAgMAorICAgICAgUmVhZHMgQ29tcGxldGVkOiAgICAgICA5MCwgICAgMiw3NTJLaUIJIFdyaXRlcyBDb21wbGV0ZWQ6ICAgICAgNTU0LCAgIDQyLDM2MEtpQgorICAgICAgUmVhZCBNZXJnZXM6ICAgICAgICAgIDU5OCwgICAgMiwzOTJLaUIJIFdyaXRlIE1lcmdlczogICAgICAgICAgIDk3LCAgICAgIDc5MktpQgorICAgICAgSU8gdW5wbHVnczogICAgICAgICAgICA3MiAgICAgICAgCSBUaW1lciB1bnBsdWdzOiAgICAgICAgICAgMQorCisgICAgIFRocm91Z2hwdXQgKFIvVyk6IDE1S2lCL3MgLyAyMzhLaUIvcworICAgICBFdmVudHMgKHNkYyk6IDksMzAxIGVudHJpZXMKKyAgICAgU2tpcHM6IDAgZm9yd2FyZCAoMCAtICAgMC4wJSkKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBzZWUgdGhlIHRyYWNlIGV2ZW50cyBhbmQgc3VtbWFyeSBqdXN0IGFzCisgICAgICAgICAgICAgICAgeW91IHdvdWxkIGhhdmUgaWYgeW91J2QgcnVuIHRoZSBzYW1lIGNvbW1hbmQgb24gdGhlIHRhcmdldC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0cmFjaW5nLWJsb2NrLWlvLXZpYS1mdHJhY2UnPgorICAgICAgICAgICAgPHRpdGxlPlRyYWNpbmcgQmxvY2sgSS9PIHZpYSAnZnRyYWNlJzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEl0J3MgYWxzbyBwb3NzaWJsZSB0byB0cmFjZSBibG9jayBJL08gdXNpbmcgb25seQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3RoZS10cmFjZS1ldmVudHMtc3Vic3lzdGVtJz50cmFjZSBldmVudHMgc3Vic3lzdGVtPC9saW5rPiwKKyAgICAgICAgICAgICAgICB3aGljaCBjYW4gYmUgdXNlZnVsIGZvciBjYXN1YWwgdHJhY2luZworICAgICAgICAgICAgICAgIGlmIHlvdSBkb24ndCB3YW50IHRvIGJvdGhlciBkZWFsaW5nIHdpdGggdGhlIHVzZXJzcGFjZSB0b29scy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gZW5hYmxlIHRyYWNpbmcgZm9yIGEgZ2l2ZW4gZGV2aWNlLCB1c2UKKyAgICAgICAgICAgICAgICAvc3lzL2Jsb2NrL3h4eC90cmFjZS9lbmFibGUsIHdoZXJlIHh4eCBpcyB0aGUgZGV2aWNlIG5hbWUuCisgICAgICAgICAgICAgICAgVGhpcyBmb3IgZXhhbXBsZSBlbmFibGVzIHRyYWNpbmcgZm9yIC9kZXYvc2RjOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIDEgPiAvc3lzL2Jsb2NrL3NkYy90cmFjZS9lbmFibGUKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT25jZSB5b3UndmUgc2VsZWN0ZWQgdGhlIGRldmljZShzKSB5b3Ugd2FudCB0byB0cmFjZSwKKyAgICAgICAgICAgICAgICBzZWxlY3RpbmcgdGhlICdibGsnIHRyYWNlciB3aWxsIHR1cm4gdGhlIGJsayB0cmFjZXIgb246CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcjIGNhdCBhdmFpbGFibGVfdHJhY2VycworICAgICBibGsgZnVuY3Rpb25fZ3JhcGggZnVuY3Rpb24gbm9wCisKKyAgICAgcm9vdEBjcm93bmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIGJsayA+IGN1cnJlbnRfdHJhY2VyCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEV4ZWN1dGUgdGhlIHdvcmtsb2FkIHlvdSdyZSBpbnRlcmVzdGVkIGluOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjYXQgL21lZGlhL3NkYy90ZXN0ZmlsZS50eHQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQW5kIGxvb2sgYXQgdGhlIG91dHB1dCAobm90ZSBoZXJlIHRoYXQgd2UncmUgdXNpbmcKKyAgICAgICAgICAgICAgICAndHJhY2VfcGlwZScgaW5zdGVhZCBvZiB0cmFjZSB0byBjYXB0dXJlIHRoaXMgdHJhY2UgLQorICAgICAgICAgICAgICAgIHRoaXMgYWxsb3dzIHVzIHRvIHdhaXQgYXJvdW5kIG9uIHRoZSBwaXBlIGZvciBkYXRhIHRvCisgICAgICAgICAgICAgICAgYXBwZWFyKToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyMgY2F0IHRyYWNlX3BpcGUKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2MzYxOiAgIDgsMzIgICBRICAgUiAxNjk5ODQ4ICsgOCBbY2F0XQorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMSAgMzAyMy4yNzY0MTA6ICAgOCwzMiAgIG0gICBOIGNmcTM1ODcgYWxsb2NlZAorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMSAgMzAyMy4yNzY0MTU6ICAgOCwzMiAgIEcgICBSIDE2OTk4NDggKyA4IFtjYXRdCisgICAgICAgICAgICAgICAgIGNhdC0zNTg3ICBbMDAxXSBkLi4xICAzMDIzLjI3NjQyNDogICA4LDMyICAgUCAgIE4gW2NhdF0KKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjIgIDMwMjMuMjc2NDMyOiAgIDgsMzIgICBJICAgUiAxNjk5ODQ4ICsgOCBbY2F0XQorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMSAgMzAyMy4yNzY0Mzk6ICAgOCwzMiAgIG0gICBOIGNmcTM1ODcgaW5zZXJ0X3JlcXVlc3QKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDQ1OiAgIDgsMzIgICBtICAgTiBjZnEzNTg3IGFkZF90b19ycgorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMiAgMzAyMy4yNzY0NTQ6ICAgOCwzMiAgIFUgICBOIFtjYXRdIDEKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDY0OiAgIDgsMzIgICBtICAgTiBjZnEgd29ya2xvYWQgc2xpY2U6MTUwCisgICAgICAgICAgICAgICAgIGNhdC0zNTg3ICBbMDAxXSBkLi4xICAzMDIzLjI3NjQ3MTogICA4LDMyICAgbSAgIE4gY2ZxMzU4NyBzZXRfYWN0aXZlIHdsX3ByaW86MCB3bF90eXBlOjIKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDc4OiAgIDgsMzIgICBtICAgTiBjZnEzNTg3IGZpZm89ICAobnVsbCkKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDgzOiAgIDgsMzIgICBtICAgTiBjZnEzNTg3IGRpc3BhdGNoX2luc2VydAorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMSAgMzAyMy4yNzY0OTA6ICAgOCwzMiAgIG0gICBOIGNmcTM1ODcgZGlzcGF0Y2hlZCBhIHJlcXVlc3QKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDk3OiAgIDgsMzIgICBtICAgTiBjZnEzNTg3IGFjdGl2YXRlIHJxLCBkcnY9MQorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMiAgMzAyMy4yNzY1MDA6ICAgOCwzMiAgIEQgICBSIDE2OTk4NDggKyA4IFtjYXRdCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFuZCB0aGlzIHR1cm5zIG9mZiB0cmFjaW5nIGZvciB0aGUgc3BlY2lmaWVkIGRldmljZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyMgZWNobyAwID4gL3N5cy9ibG9jay9zZGMvdHJhY2UvZW5hYmxlCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2Jsa3RyYWNlLWRvY3VtZW50YXRpb24nPgorICAgICAgICA8dGl0bGU+RG9jdW1lbnRhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmxpbmUgdmVyc2lvbnMgb2YgdGhlIG1hbiBwYWdlcyBmb3IgdGhlIGNvbW1hbmRzIGRpc2N1c3NlZAorICAgICAgICAgICAgaW4gdGhpcyBzZWN0aW9uIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzgvYmxrdHJhY2UnPmh0dHA6Ly9saW51eC5kaWUubmV0L21hbi84L2Jsa3RyYWNlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL2Jsa3BhcnNlJz5odHRwOi8vbGludXguZGllLm5ldC9tYW4vMS9ibGtwYXJzZTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPSdodHRwOi8vbGludXguZGllLm5ldC9tYW4vOC9idHJhY2UnPmh0dHA6Ly9saW51eC5kaWUubmV0L21hbi84L2J0cmFjZTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBhYm92ZSBtYW5wYWdlcywgYWxvbmcgd2l0aCBtYW5wYWdlcyBmb3IgdGhlIG90aGVyCisgICAgICAgICAgICBibGt0cmFjZSB1dGlsaXRpZXMgKGJ0dCwgYmxraW9tb24sIGV0YykgY2FuIGJlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgL2RvYyBkaXJlY3Rvcnkgb2YgdGhlIGJsa3RyYWNlIHRvb2xzIGdpdCByZXBvOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQua2VybmVsLmRrL2Jsa3RyYWNlLmdpdAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODYyMGRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLnhtbApAQCAtMCwwICsxLDEwNSBAQAorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGJvb2sgaWQ9J3Byb2ZpbGUtbWFudWFsJyBsYW5nPSdlbicKKyAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIgorICAgICAgeG1sbnM9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICAgICAgPgorICAgIDxib29raW5mbz4KKworICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSdmaWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nJworICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J1NWRycKKyAgICAgICAgICAgICAgICAgICAgYWxpZ249J2xlZnQnIHNjYWxlZml0PScxJyB3aWR0aD0nMTAwJScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8dGl0bGU+CisJCSAgWW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsCisJCTwvdGl0bGU+CisKKyAgICAgICAgPGF1dGhvcmdyb3VwPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlRvbTwvZmlyc3RuYW1lPiA8c3VybmFtZT5aYW51c3NpPC9zdXJuYW1lPgorICAgICAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG9yZ25hbWU+SW50ZWwgQ29ycG9yYXRpb248L29yZ25hbWU+CisgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICA8ZW1haWw+dG9tLnphbnVzc2lAaW50ZWwuY29tPC9lbWFpbD4KKyAgICAgICAgICAgIDwvYXV0aG9yPgorICAgICAgICA8L2F1dGhvcmdyb3VwPgorCisgICAgICAgIDxyZXZoaXN0b3J5PgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS40PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxMzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS40IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS41PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDEzPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjUgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjUuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkphbnVhcnkgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS41LjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjY8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjYgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjc8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNyBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuODwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuOTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS45IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICA8L3Jldmhpc3Rvcnk+CisKKyAgICA8Y29weXJpZ2h0PgorICAgICA8eWVhcj4mQ09QWVJJR0hUX1lFQVI7PC95ZWFyPgorICAgICAgPGhvbGRlcj5MaW51eCBGb3VuZGF0aW9uPC9ob2xkZXI+CisgICAgPC9jb3B5cmlnaHQ+CisKKyAgICA8bGVnYWxub3RpY2U+CisgICAgICA8cGFyYT4KKyAgICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyAgICAgICAgICB0aGUgdGVybXMgb2YgdGhlIDx1bGluayB0eXBlPSJodHRwIiB1cmw9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzIuMC91ay8iPgorICAgICAgICAgIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMi4wIFVLOiBFbmdsYW5kICZhbXA7IFdhbGVzPC91bGluaz4gYXMgcHVibGlzaGVkIGJ5CisgICAgICAgICAgQ3JlYXRpdmUgQ29tbW9ucy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPG5vdGU+CisgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyc+WW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsPC91bGluaz4KKyAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICA8L25vdGU+CisgICAgPC9sZWdhbG5vdGljZT4KKworICAgIDwvYm9va2luZm8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJwcm9maWxlLW1hbnVhbC1pbnRyby54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InByb2ZpbGUtbWFudWFsLWFyY2gueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJwcm9maWxlLW1hbnVhbC11c2FnZS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InByb2ZpbGUtbWFudWFsLWV4YW1wbGVzLnhtbCIvPgorCis8L2Jvb2s+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL1RPRE8gYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMGRiOTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9UT0RPCkBAIC0wLDAgKzEsMTEgQEAKK0hhbmRib29rIFRvZG8gTGlzdDoKKworICAqIERvY3VtZW50IGFkZGluZyBhIG5ldyBJTUFHRV9GRUFUVVJFIHRvIHRoZSBjdXN0b21pc2luZyBpbWFnZXMgc2VjdGlvbiAKKyAgKiBBZGQgaW5zdHJ1Y3Rpb25zIGFib3V0IHVzaW5nIHphdXJ1cy9vcGVubW9rbyBlbXVsYXRpb24KKyAgKiBBZGQgY29tcG9uZW50IG92ZXJ2aWV3L2Jsb2NrIGRpYWdyYW1zCisgICogU29mdHdhcmUgRGVldmVsb3BtZW50IGludHJvIHNob3VsZCBtZW50aW9uIGl0cyBzb2Z0d2FyZSBkZXZlbG9wbWVudCBmb3IgCisgICAgaW50ZW5kZWQgdGFyZ2V0IGFuZCBjb3VsZCBiZSBhIGRpZmZlcmVudCBhcmNoIGV0YyBhbmQgdGh1cyBzcGVjaWFsIGNhc2UuIAorICAqIEV4cGFuZCBpbnNhbmUuYmJjbGFzcyBkb2N1bWVudGF0aW9uIHRvIGNvdmVyIHRlc3RzCisgICogRG9jdW1lbnQgcmVtYWluaW5nIGNsYXNzZXMgKHNlZSBsaXN0IGluIHJlZi1jbGFzc2VzKQorICAqIERvY3VtZW50IGZvcm1mYWN0b3IKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvY2xvc2VyLWxvb2sueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvY2xvc2VyLWxvb2sueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZjY3NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9jbG9zZXItbG9vay54bWwKQEAgLTAsMCArMSwxMzMxIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nY2xvc2VyLWxvb2snPgorPHRpdGxlPkEgQ2xvc2VyIExvb2sgYXQgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2hhcHRlciB0YWtlcyBhIG1vcmUgZGV0YWlsZWQgbG9vayBhdCB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBkaWFncmFtIHJlcHJlc2VudHMgdGhlIGRldmVsb3BtZW50IGVudmlyb25tZW50IGF0IGEKKyAgICAgICAgaGlnaCBsZXZlbC4KKyAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIGNoYXB0ZXIgZXhwYW5kcyBvbiB0aGUgZnVuZGFtZW50YWwgaW5wdXQsIG91dHB1dCwKKyAgICAgICAgcHJvY2VzcywgYW5kCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+KSBibG9ja3MKKyAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmEgaWQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz4KKyAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3lvY3RvLWVudmlyb25tZW50LXJlZi5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI4aW4iIGRlcHRoPSI0LjI1aW4iIC8+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBnZW5lcmFsaXplZCBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50IGNvbnNpc3RzIG9mCisgICAgICAgIHNldmVyYWwgZnVuY3Rpb25hbCBhcmVhczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlciBDb25maWd1cmF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgTWV0YWRhdGEgeW91IGNhbiB1c2UgdG8gY29udHJvbCB0aGUgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWV0YWRhdGEgTGF5ZXJzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVmFyaW91cyBsYXllcnMgdGhhdCBwcm92aWRlIHNvZnR3YXJlLCBtYWNoaW5lLCBhbmQKKyAgICAgICAgICAgICAgICBkaXN0cm8gTWV0YWRhdGEuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNvdXJjZSBGaWxlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFVwc3RyZWFtIHJlbGVhc2VzLCBsb2NhbCBwcm9qZWN0cywgYW5kIFNDTXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIFN5c3RlbTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFByb2Nlc3NlcyB1bmRlciB0aGUgY29udHJvbCBvZgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFRoaXMgYmxvY2sgZXhwYW5kcyBvbiBob3cgQml0QmFrZSBmZXRjaGVzIHNvdXJjZSwgYXBwbGllcworICAgICAgICAgICAgICAgIHBhdGNoZXMsIGNvbXBsZXRlcyBjb21waWxhdGlvbiwgYW5hbHl6ZXMgb3V0cHV0IGZvciBwYWNrYWdlCisgICAgICAgICAgICAgICAgZ2VuZXJhdGlvbiwgY3JlYXRlcyBhbmQgdGVzdHMgcGFja2FnZXMsIGdlbmVyYXRlcyBpbWFnZXMsIGFuZAorICAgICAgICAgICAgICAgIGdlbmVyYXRlcyBjcm9zcy1kZXZlbG9wbWVudCB0b29scy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGFja2FnZSBGZWVkczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIERpcmVjdG9yaWVzIGNvbnRhaW5pbmcgb3V0cHV0IHBhY2thZ2VzIChSUE0sIERFQiBvciBJUEspLAorICAgICAgICAgICAgICAgIHdoaWNoIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBpbiB0aGUgY29uc3RydWN0aW9uIG9mIGFuIGltYWdlIG9yCisgICAgICAgICAgICAgICAgU0RLLCBwcm9kdWNlZCBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIFRoZXNlIGZlZWRzIGNhbiBhbHNvIGJlIGNvcGllZCBhbmQgc2hhcmVkIHVzaW5nIGEgd2ViIHNlcnZlciBvcgorICAgICAgICAgICAgICAgIG90aGVyIG1lYW5zIHRvIGZhY2lsaXRhdGUgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgaW1hZ2VzIG9uIGRldmljZXMgYXQgcnVudGltZSBpZiBydW50aW1lIHBhY2thZ2UgbWFuYWdlbWVudCBpcworICAgICAgICAgICAgICAgIGVuYWJsZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkltYWdlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEltYWdlcyBwcm9kdWNlZCBieSB0aGUgZGV2ZWxvcG1lbnQgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgU0RLOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbHMgdGhhdCBhcmUgcHJvZHVjZWQgYWxvbmcgd2l0aCBhbiBpbWFnZQorICAgICAgICAgICAgICAgIG9yIHNlcGFyYXRlbHkgd2l0aCBCaXRCYWtlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0idXNlci1jb25maWd1cmF0aW9uIj4KKyAgICAgICAgPHRpdGxlPlVzZXIgQ29uZmlndXJhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBVc2VyIGNvbmZpZ3VyYXRpb24gaGVscHMgZGVmaW5lIHRoZSBidWlsZC4KKyAgICAgICAgICAgIFRocm91Z2ggdXNlciBjb25maWd1cmF0aW9uLCB5b3UgY2FuIHRlbGwgQml0QmFrZSB0aGUKKyAgICAgICAgICAgIHRhcmdldCBhcmNoaXRlY3R1cmUgZm9yIHdoaWNoIHlvdSBhcmUgYnVpbGRpbmcgdGhlIGltYWdlLAorICAgICAgICAgICAgd2hlcmUgdG8gc3RvcmUgZG93bmxvYWRlZCBzb3VyY2UsIGFuZCBvdGhlciBidWlsZCBwcm9wZXJ0aWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyBhbiBleHBhbmRlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICJVc2VyIENvbmZpZ3VyYXRpb24iIGJveCBvZiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPjoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3VzZXItY29uZmlndXJhdGlvbi5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI1LjVpbiIgZGVwdGg9IjMuNWluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIG5lZWRzIHNvbWUgYmFzaWMgY29uZmlndXJhdGlvbiBmaWxlcyBpbiBvcmRlciB0byBjb21wbGV0ZQorICAgICAgICAgICAgYSBidWlsZC4KKyAgICAgICAgICAgIFRoZXNlIGZpbGVzIGFyZSA8ZmlsZW5hbWU+Ki5jb25mPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICBUaGUgbWluaW1hbGx5IG5lY2Vzc2FyeSBvbmVzIHJlc2lkZSBhcyBleGFtcGxlIGZpbGVzIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgRm9yIHNpbXBsaWNpdHksIHRoaXMgc2VjdGlvbiByZWZlcnMgdG8gdGhlIFNvdXJjZSBEaXJlY3RvcnkgYXMKKyAgICAgICAgICAgIHRoZSAiUG9reSBEaXJlY3RvcnkuIgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBjbG9uZSB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBvciB5b3UKKyAgICAgICAgICAgIGRvd25sb2FkIGFuZCB1bnBhY2sgYSBZb2N0byBQcm9qZWN0IHJlbGVhc2UsIHlvdSBjYW4gc2V0IHVwIHRoZQorICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeSB0byBiZSBuYW1lZCBhbnl0aGluZyB5b3Ugd2FudC4KKyAgICAgICAgICAgIEZvciB0aGlzIGRpc2N1c3Npb24sIHRoZSBjbG9uZWQgcmVwb3NpdG9yeSB1c2VzIHRoZSBkZWZhdWx0CisgICAgICAgICAgICBuYW1lIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgUG9reSByZXBvc2l0b3J5IGlzIHByaW1hcmlseSBhbiBhZ2dyZWdhdGlvbiBvZiBleGlzdGluZworICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICBJdCBpcyBub3QgYSBjYW5vbmljYWwgdXBzdHJlYW0gc291cmNlLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiBsYXllciBpbnNpZGUgUG9reSBjb250YWlucworICAgICAgICAgICAgYSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSB0aGF0IGhhcyBleGFtcGxlCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgVGhlc2UgZXhhbXBsZSBmaWxlcyBhcmUgdXNlZCBhcyBhIGJhc2lzIGZvciBjcmVhdGluZyBhY3R1YWwKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2hlbiB5b3Ugc291cmNlIHRoZSBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgc2NyaXB0CisgICAgICAgICAgICAoaS5lLgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG9yCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU291cmNpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNjcmlwdCBjcmVhdGVzIGEKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGlmIG9uZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgorICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZSBCdWlsZCBEaXJlY3RvcnkgZm9yIGFsbCBpdHMgd29yayBkdXJpbmcgYnVpbGRzLgorICAgICAgICAgICAgVGhlIEJ1aWxkIERpcmVjdG9yeSBoYXMgYSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSB0aGF0CisgICAgICAgICAgICBjb250YWlucyBkZWZhdWx0IHZlcnNpb25zIG9mIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgIFRoZXNlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgY3JlYXRlZCBvbmx5IGlmIHZlcnNpb25zCisgICAgICAgICAgICBkbyBub3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IGF0IHRoZSB0aW1lIHlvdQorICAgICAgICAgICAgc291cmNlIHRoZSBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlY2F1c2UgdGhlIFBva3kgcmVwb3NpdG9yeSBpcyBmdW5kYW1lbnRhbGx5IGFuIGFnZ3JlZ2F0aW9uIG9mCisgICAgICAgICAgICBleGlzdGluZyByZXBvc2l0b3JpZXMsIHNvbWUgdXNlcnMgbWlnaHQgYmUgZmFtaWxpYXIgd2l0aCBydW5uaW5nCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgIDxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPiBzY3JpcHQgaW4gdGhlIGNvbnRleHQKKyAgICAgICAgICAgIG9mIHNlcGFyYXRlIE9wZW5FbWJlZGRlZC1Db3JlIGFuZCBCaXRCYWtlIHJlcG9zaXRvcmllcyByYXRoZXIgdGhhbiBhCisgICAgICAgICAgICBzaW5nbGUgUG9reSByZXBvc2l0b3J5LgorICAgICAgICAgICAgVGhpcyBkaXNjdXNzaW9uIGFzc3VtZXMgdGhlIHNjcmlwdCBpcyBleGVjdXRlZCBmcm9tIHdpdGhpbiBhIGNsb25lZAorICAgICAgICAgICAgb3IgdW5wYWNrZWQgdmVyc2lvbiBvZiBQb2t5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEZXBlbmRpbmcgb24gd2hlcmUgdGhlIHNjcmlwdCBpcyBzb3VyY2VkLCBkaWZmZXJlbnQgc3ViLXNjcmlwdHMKKyAgICAgICAgICAgIGFyZSBjYWxsZWQgdG8gc2V0IHVwIHRoZSBCdWlsZCBEaXJlY3RvcnkgKFlvY3RvIG9yIE9wZW5FbWJlZGRlZCkuCisgICAgICAgICAgICBTcGVjaWZpY2FsbHksIHRoZSBzY3JpcHQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL29lLXNldHVwLWJ1aWxkZGlyPC9maWxlbmFtZT4gaW5zaWRlIHRoZQorICAgICAgICAgICAgcG9reSBkaXJlY3Rvcnkgc2V0cyB1cCB0aGUgQnVpbGQgRGlyZWN0b3J5IGFuZCBzZWVkcyB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICAoaWYgbmVjZXNzYXJ5KSB3aXRoIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXBwcm9wcmlhdGUgZm9yIHRoZQorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2NyaXB0cy9vZS1zZXR1cC1idWlsZGRpcjwvZmlsZW5hbWU+IHNjcmlwdAorICAgICAgICAgICAgICAgIHVzZXMgdGhlIDxmaWxlbmFtZT4kVEVNUExBVEVDT05GPC9maWxlbmFtZT4gdmFyaWFibGUgdG8KKyAgICAgICAgICAgICAgICBkZXRlcm1pbmUgd2hpY2ggc2FtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gbG9jYXRlLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHByb3ZpZGVzIG1hbnkKKyAgICAgICAgICAgIGJhc2ljIHZhcmlhYmxlcyB0aGF0IGRlZmluZSBhIGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICAgICAgSGVyZSBpcyBhIGxpc3Qgb2YgYSBmZXcuCisgICAgICAgICAgICBUbyBzZWUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbnMgaW4gYSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlIGNyZWF0ZWQgYnkgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNjcmlwdCwgc2VlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IGxheWVyOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBhcmFsbGVsaXNtIE9wdGlvbnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX05VTUJFUl9USFJFQURTJz48ZmlsZW5hbWU+QkJfTlVNQkVSX1RIUkVBRFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQVJBTExFTF9NQUtFJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjdmFyLUJCX05VTUJFUl9QQVJTRV9USFJFQURTJz48ZmlsZW5hbWU+QkJfTlVNQkVSX1BBUlNFX1RIUkVBRFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRhcmdldCBNYWNoaW5lIFNlbGVjdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Eb3dubG9hZCBEaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNoYXJlZCBTdGF0ZSBEaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9ESVInPjxmaWxlbmFtZT5TU1RBVEVfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgT3V0cHV0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb25zIHNldCBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBjYW4gYWxzbyBiZSBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvc2l0ZS5jb25mPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvYXV0by5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSB0ZWxscyBCaXRCYWtlIHdoYXQKKyAgICAgICAgICAgIGxheWVycyB5b3Ugd2FudCBjb25zaWRlcmVkIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgbGF5ZXJzIGxpc3RlZCBpbiB0aGlzIGZpbGUgaW5jbHVkZSBsYXllcnMKKyAgICAgICAgICAgIG1pbmltYWxseSBuZWVkZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBtdXN0IG1hbnVhbGx5IGFkZCBhbnkgY3VzdG9tIGxheWVycyB5b3UgaGF2ZSBjcmVhdGVkLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gd29ya2luZyB3aXRoIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2VuYWJsaW5nLXlvdXItbGF5ZXInPkVuYWJsaW5nIFlvdXIgTGF5ZXI8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZmlsZXMgPGZpbGVuYW1lPnNpdGUuY29uZjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG8uY29uZjwvZmlsZW5hbWU+IGFyZSBub3QgY3JlYXRlZCBieSB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIGluaXRpYWxpemF0aW9uIHNjcmlwdC4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRoZXNlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHlvdSBtdXN0IGNyZWF0ZSB0aGVtCisgICAgICAgICAgICB5b3Vyc2VsZjoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c2l0ZS5jb25mPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5jb25mL3NpdGUuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBjb25maWd1cmUgbXVsdGlwbGUgYnVpbGQgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYWQgc2V2ZXJhbCBidWlsZCBlbnZpcm9ubWVudHMgYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZXkgc2hhcmVkIHNvbWUgY29tbW9uIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCB0aGVzZSBkZWZhdWx0IGJ1aWxkIHByb3BlcnRpZXMgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgQSBnb29kIGV4YW1wbGUgaXMgcGVyaGFwcyB0aGUgcGFja2FnaW5nIGZvcm1hdCB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPk9uZSB1c2VmdWwgc2NlbmFyaW8gZm9yIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9zaXRlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGlzIHRvIGV4dGVuZCB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gaW5jbHVkZSB0aGUgcGF0aCB0byBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL3NpdGUuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGVuLCB3aGVuIEJpdEJha2UgbG9va3MgZm9yIE1ldGFkYXRhIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiwgaXQgZmluZHMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL3NpdGUuY29uZjwvZmlsZW5hbWU+IGZpbGUgYW5kIGFwcGxpZXMgeW91cgorICAgICAgICAgICAgICAgICAgICBjb21tb24gY29uZmlndXJhdGlvbnMgZm91bmQgaW4gdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRvIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb25zIGluIGEgcGFydGljdWxhciBidWlsZCBkaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgIGFsdGVyIHRoZSBzaW1pbGFyIGNvbmZpZ3VyYXRpb25zIHdpdGhpbiB0aGF0IGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSdzIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5hdXRvLmNvbmY8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgbm90IGhhbmQtY3JlYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgUmF0aGVyLCB0aGUgZmlsZSBpcyB1c3VhbGx5IGNyZWF0ZWQgYW5kIHdyaXR0ZW4gdG8gYnkKKyAgICAgICAgICAgICAgICAgICAgYW4gYXV0b2J1aWxkZXIuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZXR0aW5ncyBwdXQgaW50byB0aGUgZmlsZSBhcmUgdHlwaWNhbGx5IHRoZSBzYW1lIGFzCisgICAgICAgICAgICAgICAgICAgIHlvdSB3b3VsZCBmaW5kIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb3IgdGhlIDxmaWxlbmFtZT5jb25mL3NpdGUuY29uZjwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIGVkaXQgYWxsIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gZnVydGhlciBkZWZpbmUKKyAgICAgICAgICAgIGFueSBwYXJ0aWN1bGFyIGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICAgICAgVGhpcyBwcm9jZXNzIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSAiVXNlciBDb25maWd1cmF0aW9uIEVkaXRzIgorICAgICAgICAgICAgYm94IGluIHRoZSBmaWd1cmUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4geW91IGxhdW5jaCB5b3VyIGJ1aWxkIHdpdGggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSA8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBjb21tYW5kLCBCaXRCYWtlCisgICAgICAgICAgICBzb3J0cyBvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIHVsdGltYXRlbHkgZGVmaW5lIHlvdXIgYnVpbGQKKyAgICAgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9Im1ldGFkYXRhLW1hY2hpbmUtY29uZmlndXJhdGlvbi1hbmQtcG9saWN5LWNvbmZpZ3VyYXRpb24iPgorICAgICAgICA8dGl0bGU+TWV0YWRhdGEsIE1hY2hpbmUgQ29uZmlndXJhdGlvbiwgYW5kIFBvbGljeSBDb25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBwcmV2aW91cyBzZWN0aW9uIGRlc2NyaWJlZCB0aGUgdXNlciBjb25maWd1cmF0aW9ucyB0aGF0CisgICAgICAgICAgICBkZWZpbmUgQml0QmFrZSdzIGdsb2JhbCBiZWhhdmlvci4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiB0YWtlcyBhIGNsb3NlciBsb29rIGF0IHRoZSBsYXllcnMgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgdXNlcyB0byBmdXJ0aGVyIGNvbnRyb2wgdGhlIGJ1aWxkLgorICAgICAgICAgICAgVGhlc2UgbGF5ZXJzIHByb3ZpZGUgTWV0YWRhdGEgZm9yIHRoZSBzb2Z0d2FyZSwgbWFjaGluZSwgYW5kCisgICAgICAgICAgICBwb2xpY3kuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIGdlbmVyYWwsIHRocmVlIHR5cGVzIG9mIGxheWVyIGlucHV0IGV4aXN0OgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBvbGljeSBDb25maWd1cmF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIERpc3RyaWJ1dGlvbiBMYXllcnMgcHJvdmlkZSB0b3AtbGV2ZWwgb3IgZ2VuZXJhbAorICAgICAgICAgICAgICAgICAgICBwb2xpY2llcyBmb3IgdGhlIGltYWdlIG9yIFNESyBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgbGF5ZXIgd291bGQgZGljdGF0ZSB3aGV0aGVyIEJpdEJha2UKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXMgUlBNIG9yIElQSyBwYWNrYWdlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1hY2hpbmUgQ29uZmlndXJhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgbGF5ZXJzIHByb3ZpZGUgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB0eXBlIG9mIGluZm9ybWF0aW9uIGlzIHNwZWNpZmljIHRvIGEgcGFydGljdWxhcgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgYXJjaGl0ZWN0dXJlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWV0YWRhdGE6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgbGF5ZXJzIGNvbnRhaW4gdXNlci1zdXBwbGllZCByZWNpcGUgZmlsZXMsCisgICAgICAgICAgICAgICAgICAgIHBhdGNoZXMsIGFuZCBhcHBlbmQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIGFuIGV4cGFuZGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZQorICAgICAgICAgICAgTWV0YWRhdGEsIE1hY2hpbmUgQ29uZmlndXJhdGlvbiwgYW5kIFBvbGljeSBDb25maWd1cmF0aW9uIGlucHV0CisgICAgICAgICAgICAobGF5ZXJzKSBib3hlcyBvZiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPjoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2xheWVyLWlucHV0LnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjhpbiIgZGVwdGg9IjcuNWluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiBnZW5lcmFsLCBhbGwgbGF5ZXJzIGhhdmUgYSBzaW1pbGFyIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIFRoZXkgYWxsIGNvbnRhaW4gYSBsaWNlbnNpbmcgZmlsZQorICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPkNPUFlJTkc8L2ZpbGVuYW1lPikgaWYgdGhlIGxheWVyIGlzIHRvIGJlCisgICAgICAgICAgICBkaXN0cmlidXRlZCwgYSA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBhcyBnb29kIHByYWN0aWNlCisgICAgICAgICAgICBhbmQgZXNwZWNpYWxseSBpZiB0aGUgbGF5ZXIgaXMgdG8gYmUgZGlzdHJpYnV0ZWQsIGEKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5LCBhbmQgcmVjaXBlIGRpcmVjdG9yaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBoYXMgbWFueSBsYXllcnMgdGhhdCBjYW4gYmUgdXNlZC4KKyAgICAgICAgICAgIFlvdSBjYW4gc2VlIGEgd2ViLWludGVyZmFjZSBsaXN0aW5nIG9mIHRoZW0gb24gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvIj5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KKyAgICAgICAgICAgIHBhZ2UuCisgICAgICAgICAgICBUaGUgbGF5ZXJzIGFyZSBzaG93biBhdCB0aGUgYm90dG9tIGNhdGVnb3JpemVkIHVuZGVyCisgICAgICAgICAgICAiWW9jdG8gTWV0YWRhdGEgTGF5ZXJzLiIKKyAgICAgICAgICAgIFRoZXNlIGxheWVycyBhcmUgZnVuZGFtZW50YWxseSBhIHN1YnNldCBvZiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4L2xheWVycy8iPk9wZW5FbWJlZGRlZCBNZXRhZGF0YSBJbmRleDwvdWxpbms+LAorICAgICAgICAgICAgd2hpY2ggbGlzdHMgYWxsIGxheWVycyBwcm92aWRlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGNvbW11bml0eS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIExheWVycyBleGlzdCBpbiB0aGUgWW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzIHRoYXQKKyAgICAgICAgICAgICAgICBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIE9wZW5FbWJlZGRlZCBNZXRhZGF0YSBJbmRleC4KKyAgICAgICAgICAgICAgICBUaGVzZSBsYXllcnMgYXJlIGVpdGhlciBkZXByZWNhdGVkIG9yIGV4cGVyaW1lbnRhbCBpbiBuYXR1cmUuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICB3aGljaCBpcyBwYXJ0IG9mIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24sIHRvIGZpbmQgd2hhdCBsYXllcnMgaXQKKyAgICAgICAgICAgIHNob3VsZCBiZSB1c2luZyBhcyBwYXJ0IG9mIHRoZSBidWlsZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gbGF5ZXJzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nIGFuZCBDcmVhdGluZyBMYXllcnM8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9ImRpc3Ryby1sYXllciI+CisgICAgICAgICAgICA8dGl0bGU+RGlzdHJvIExheWVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGRpc3RyaWJ1dGlvbiBsYXllciBwcm92aWRlcyBwb2xpY3kgY29uZmlndXJhdGlvbnMgZm9yIHlvdXIKKyAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgQmVzdCBwcmFjdGljZXMgZGljdGF0ZSB0aGF0IHlvdSBpc29sYXRlIHRoZXNlIHR5cGVzIG9mCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgaW50byB0aGVpciBvd24gbGF5ZXIuCisgICAgICAgICAgICAgICAgU2V0dGluZ3MgeW91IHByb3ZpZGUgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9kaXN0cm8vPHJlcGxhY2VhYmxlPmRpc3RybzwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPiBvdmVycmlkZQorICAgICAgICAgICAgICAgIHNpbWlsYXIKKyAgICAgICAgICAgICAgICBzZXR0aW5ncyB0aGF0IEJpdEJha2UgZmluZHMgaW4geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgIERpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHByb3ZpZGVzIHNvbWUgZXhwbGFuYXRpb24gYW5kIHJlZmVyZW5jZXMKKyAgICAgICAgICAgICAgICBmb3Igd2hhdCB5b3UgdHlwaWNhbGx5IGZpbmQgaW4gdGhlIGRpc3RyaWJ1dGlvbiBsYXllcjoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmNsYXNzZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzIGZpbGVzICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikgaG9sZAorICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uIGZ1bmN0aW9uYWxpdHkgdGhhdCBjYW4gYmUgc2hhcmVkIGFtb25nCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzIGluIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdXIgcmVjaXBlcyBpbmhlcml0IGEgY2xhc3MsIHRoZXkgdGFrZSBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzIGFuZCBmdW5jdGlvbnMgZm9yIHRoYXQgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHJlYWQgbW9yZSBhYm91dCBjbGFzcyBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcyc+Q2xhc3NlczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5jb25mOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgaG9sZHMgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBsYXllciAoPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Y29uZi9kaXN0cm8vPHJlcGxhY2VhYmxlPmRpc3RybzwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPiksCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYW55IGRpc3RyaWJ1dGlvbi13aWRlIGluY2x1ZGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5yZWNpcGVzLSo6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlY2lwZXMgYW5kIGFwcGVuZCBmaWxlcyB0aGF0IGFmZmVjdCBjb21tb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgYWNyb3NzIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgY291bGQgaW5jbHVkZSByZWNpcGVzIGFuZCBhcHBlbmQgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFkZCBkaXN0cmlidXRpb24tc3BlY2lmaWMgY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uIHNjcmlwdHMsIGN1c3RvbSBpbWFnZSByZWNpcGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9ImJzcC1sYXllciI+CisgICAgICAgICAgICA8dGl0bGU+QlNQIExheWVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIEJTUCBMYXllciBwcm92aWRlcyBtYWNoaW5lIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgIEV2ZXJ5dGhpbmcgaW4gdGhpcyBsYXllciBpcyBzcGVjaWZpYyB0byB0aGUgbWFjaGluZSBmb3Igd2hpY2gKKyAgICAgICAgICAgICAgICB5b3UgYXJlIGJ1aWxkaW5nIHRoZSBpbWFnZSBvciB0aGUgU0RLLgorICAgICAgICAgICAgICAgIEEgY29tbW9uIHN0cnVjdHVyZSBvciBmb3JtIGlzIGRlZmluZWQgZm9yIEJTUCBsYXllcnMuCisgICAgICAgICAgICAgICAgWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IHRoaXMgc3RydWN0dXJlIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciBmb3IgYSBCU1AgbGF5ZXIgdG8gYmUgY29uc2lkZXJlZCBjb21wbGlhbnQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCwgaXQgbXVzdCBtZWV0IHNvbWUgc3RydWN0dXJhbCByZXF1aXJlbWVudHMuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgQlNQIExheWVyJ3MgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgY29udGFpbnMKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB0aGUgbWFjaGluZQorICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Y29uZi9tYWNoaW5lLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT4uY29uZjwvZmlsZW5hbWU+KSBhbmQsCisgICAgICAgICAgICAgICAgb2YgY291cnNlLCB0aGUgbGF5ZXIgKDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhlIGxheWVyIGlzIGRlZGljYXRlZCB0byBzcGVjaWZpYyByZWNpcGVzCisgICAgICAgICAgICAgICAgYnkgZnVuY3Rpb246IDxmaWxlbmFtZT5yZWNpcGVzLWJzcDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWNpcGVzLWNvcmU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1ncmFwaGljczwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1rZXJuZWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBNZXRhZGF0YSBjYW4gZXhpc3QgZm9yIG11bHRpcGxlIGZvcm1mYWN0b3JzLCBncmFwaGljcworICAgICAgICAgICAgICAgIHN1cHBvcnQgc3lzdGVtcywgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBXaGlsZSB0aGUgZmlndXJlIHNob3dzIHNldmVyYWwgPGZpbGVuYW1lPnJlY2lwZXMtKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLCBub3QgYWxsIHRoZXNlIGRpcmVjdG9yaWVzIGFwcGVhciBpbiBhbGwKKyAgICAgICAgICAgICAgICAgICAgQlNQIGxheWVycy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ic29mdHdhcmUtbGF5ZXIiPgorICAgICAgICAgICAgPHRpdGxlPlNvZnR3YXJlIExheWVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHNvZnR3YXJlIGxheWVyIHByb3ZpZGVzIHRoZSBNZXRhZGF0YSBmb3IgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgIHNvZnR3YXJlIHBhY2thZ2VzIHVzZWQgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICBUaGlzIGxheWVyIGRvZXMgbm90IGluY2x1ZGUgTWV0YWRhdGEgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUKKyAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24gb3IgdGhlIG1hY2hpbmUsIHdoaWNoIGFyZSBmb3VuZCBpbiB0aGVpcgorICAgICAgICAgICAgICAgIHJlc3BlY3RpdmUgbGF5ZXJzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGxheWVyIGNvbnRhaW5zIGFueSBuZXcgcmVjaXBlcyB0aGF0IHlvdXIgcHJvamVjdCBuZWVkcworICAgICAgICAgICAgICAgIGluIHRoZSBmb3JtIG9mIHJlY2lwZSBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJzb3VyY2VzLWRldi1lbnZpcm9ubWVudCI+CisgICAgICAgIDx0aXRsZT5Tb3VyY2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIG9yZGVyIGZvciB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUgYW4gaW1hZ2Ugb3IKKyAgICAgICAgICAgIGFueSB0YXJnZXQsIGl0IG11c3QgYmUgYWJsZSB0byBhY2Nlc3Mgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnZW5lcmFsLXlvY3RvLWVudmlyb25tZW50LWZpZ3VyZSc+Z2VuZXJhbCBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50IGZpZ3VyZTwvbGluaz4KKyAgICAgICAgICAgIHJlcHJlc2VudHMgc291cmNlIGZpbGVzIHVzaW5nIHRoZSAiVXBzdHJlYW0gUHJvamVjdCBSZWxlYXNlcyIsCisgICAgICAgICAgICAiTG9jYWwgUHJvamVjdHMiLCBhbmQgIlNDTXMgKG9wdGlvbmFsKSIgYm94ZXMuCisgICAgICAgICAgICBUaGUgZmlndXJlIHJlcHJlc2VudHMgbWlycm9ycywgd2hpY2ggYWxzbyBwbGF5IGEgcm9sZSBpbiBsb2NhdGluZworICAgICAgICAgICAgc291cmNlIGZpbGVzLCB3aXRoIHRoZSAiU291cmNlIE1pcnJvcihzKSIgYm94LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbWV0aG9kIGJ5IHdoaWNoIHNvdXJjZSBmaWxlcyBhcmUgdWx0aW1hdGVseSBvcmdhbml6ZWQgaXMKKyAgICAgICAgICAgIGEgZnVuY3Rpb24gb2YgdGhlIHByb2plY3QuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZm9yIHJlbGVhc2VkIHNvZnR3YXJlLCBwcm9qZWN0cyB0ZW5kIHRvIHVzZSB0YXJiYWxscworICAgICAgICAgICAgb3Igb3RoZXIgYXJjaGl2ZWQgZmlsZXMgdGhhdCBjYW4gY2FwdHVyZSB0aGUgc3RhdGUgb2YgYSByZWxlYXNlCisgICAgICAgICAgICBndWFyYW50ZWVpbmcgdGhhdCBpdCBpcyBzdGF0aWNhbGx5IHJlcHJlc2VudGVkLgorICAgICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIGZvciBhIHByb2plY3QgdGhhdCBpcyBtb3JlIGR5bmFtaWMgb3IKKyAgICAgICAgICAgIGV4cGVyaW1lbnRhbCBpbiBuYXR1cmUsIGEgcHJvamVjdCBtaWdodCBrZWVwIHNvdXJjZSBmaWxlcyBpbiBhCisgICAgICAgICAgICByZXBvc2l0b3J5IGNvbnRyb2xsZWQgYnkgYSBTb3VyY2UgQ29udHJvbCBNYW5hZ2VyIChTQ00pIHN1Y2ggYXMKKyAgICAgICAgICAgIEdpdC4KKyAgICAgICAgICAgIFB1bGxpbmcgc291cmNlIGZyb20gYSByZXBvc2l0b3J5IGFsbG93cyB5b3UgdG8gY29udHJvbAorICAgICAgICAgICAgdGhlIHBvaW50IGluIHRoZSByZXBvc2l0b3J5ICh0aGUgcmV2aXNpb24pIGZyb20gd2hpY2ggeW91IHdhbnQgdG8KKyAgICAgICAgICAgIGJ1aWxkIHNvZnR3YXJlLgorICAgICAgICAgICAgRmluYWxseSwgYSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvIG1pZ2h0IGV4aXN0LCB3aGljaCB3b3VsZCBnaXZlIHRoZQorICAgICAgICAgICAgY29uc3VtZXIgYSBjaG9pY2Ugd2hlbiBkZWNpZGluZyB3aGVyZSB0byBnZXQgc291cmNlIGZpbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHRvIHBvaW50IHRvIHNvdXJjZSBmaWxlcyByZWdhcmRsZXNzIG9mIHRoZWlyIGxvY2F0aW9uLgorICAgICAgICAgICAgRWFjaCByZWNpcGUgbXVzdCBoYXZlIGEgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgdGhhdCBwb2ludHMgdG8gdGhlIHNvdXJjZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW5vdGhlciBhcmVhIHRoYXQgcGxheXMgYSBzaWduaWZpY2FudCByb2xlIGluIHdoZXJlIHNvdXJjZSBmaWxlcworICAgICAgICAgICAgY29tZSBmcm9tIGlzIHBvaW50ZWQgdG8gYnkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgIFRoaXMgYXJlYSBpcyBhIGNhY2hlIHRoYXQgY2FuIGhvbGQgcHJldmlvdXNseSBkb3dubG9hZGVkIHNvdXJjZS4KKyAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBpbnN0cnVjdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUKKyAgICAgICAgICAgIHRhcmJhbGxzIGZyb20gR2l0IHJlcG9zaXRvcmllcywgd2hpY2ggaXMgbm90IHRoZSBkZWZhdWx0IGJlaGF2aW9yLAorICAgICAgICAgICAgYW5kIHN0b3JlIHRoZW0gaW4gdGhlIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiBieSB1c2luZyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMnPjxmaWxlbmFtZT5CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBKdWRpY2lvdXMgdXNlIG9mIGEgPGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjYW4KKyAgICAgICAgICAgIHNhdmUgdGhlIGJ1aWxkIHN5c3RlbSBhIHRyaXAgYWNyb3NzIHRoZSBJbnRlcm5ldCB3aGVuIGxvb2tpbmcKKyAgICAgICAgICAgIGZvciBmaWxlcy4KKyAgICAgICAgICAgIEEgZ29vZCBtZXRob2QgZm9yIHVzaW5nIGEgZG93bmxvYWQgZGlyZWN0b3J5IGlzIHRvIGhhdmUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiBwb2ludCB0byBhbiBhcmVhIG91dHNpZGUgb2YgeW91cgorICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgRG9pbmcgc28gYWxsb3dzIHlvdSB0byBzYWZlbHkgZGVsZXRlIHRoZSBCdWlsZCBEaXJlY3RvcnkKKyAgICAgICAgICAgIGlmIG5lZWRlZCB3aXRob3V0IGZlYXIgb2YgcmVtb3ZpbmcgYW55IGRvd25sb2FkZWQgc291cmNlIGZpbGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIHByb3ZpZGVzIGEgZGVlcGVyIGxvb2sgaW50byB0aGUKKyAgICAgICAgICAgIHNvdXJjZSBmaWxlcyBhbmQgdGhlIG1pcnJvcnMuCisgICAgICAgICAgICBIZXJlIGlzIGEgbW9yZSBkZXRhaWxlZCBsb29rIGF0IHRoZSBzb3VyY2UgZmlsZSBhcmVhIG9mIHRoZQorICAgICAgICAgICAgYmFzZSBmaWd1cmU6CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvc291cmNlLWlucHV0LnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjdpbiIgZGVwdGg9IjcuNWluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Vwc3RyZWFtLXByb2plY3QtcmVsZWFzZXMnPgorICAgICAgICAgICAgPHRpdGxlPlVwc3RyZWFtIFByb2plY3QgUmVsZWFzZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVcHN0cmVhbSBwcm9qZWN0IHJlbGVhc2VzIGV4aXN0IGFueXdoZXJlIGluIHRoZSBmb3JtIG9mIGFuCisgICAgICAgICAgICAgICAgYXJjaGl2ZWQgZmlsZSAoZS5nLiB0YXJiYWxsIG9yIHppcCBmaWxlKS4KKyAgICAgICAgICAgICAgICBUaGVzZSBmaWxlcyBjb3JyZXNwb25kIHRvIGluZGl2aWR1YWwgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZpZ3VyZSB1c2VzIHNwZWNpZmljIHJlbGVhc2VzIGVhY2ggZm9yCisgICAgICAgICAgICAgICAgQnVzeUJveCwgUXQsIGFuZCBEYnVzLgorICAgICAgICAgICAgICAgIEFuIGFyY2hpdmUgZmlsZSBjYW4gYmUgZm9yIGFueSByZWxlYXNlZCBwcm9kdWN0IHRoYXQgY2FuIGJlCisgICAgICAgICAgICAgICAgYnVpbHQgdXNpbmcgYSByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbG9jYWwtcHJvamVjdHMnPgorICAgICAgICAgICAgPHRpdGxlPkxvY2FsIFByb2plY3RzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTG9jYWwgcHJvamVjdHMgYXJlIGN1c3RvbSBiaXRzIG9mIHNvZnR3YXJlIHRoZSB1c2VyIHByb3ZpZGVzLgorICAgICAgICAgICAgICAgIFRoZXNlIGJpdHMgcmVzaWRlIHNvbWV3aGVyZSBsb2NhbCB0byBhIHByb2plY3QgLSBwZXJoYXBzCisgICAgICAgICAgICAgICAgYSBkaXJlY3RvcnkgaW50byB3aGljaCB0aGUgdXNlciBjaGVja3MgaW4gaXRlbXMgKGUuZy4KKyAgICAgICAgICAgICAgICBhIGxvY2FsIGRpcmVjdG9yeSBjb250YWluaW5nIGEgZGV2ZWxvcG1lbnQgc291cmNlIHRyZWUKKyAgICAgICAgICAgICAgICB1c2VkIGJ5IHRoZSBncm91cCkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBjYW5vbmljYWwgbWV0aG9kIHRocm91Z2ggd2hpY2ggdG8gaW5jbHVkZSBhIGxvY2FsIHByb2plY3QKKyAgICAgICAgICAgICAgICBpcyB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZXh0ZXJuYWxzcmMnPjxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNsYXNzIHRvIGluY2x1ZGUgdGhhdCBsb2NhbCBwcm9qZWN0LgorICAgICAgICAgICAgICAgIFlvdSB1c2UgZWl0aGVyIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IG9yIGEKKyAgICAgICAgICAgICAgICByZWNpcGUncyBhcHBlbmQgZmlsZSB0byBvdmVycmlkZSBvciBzZXQgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlIHRvIHBvaW50IHRvIHRoZSBsb2NhbCBkaXJlY3Rvcnkgb24geW91ciBkaXNrIHRvIHB1bGwKKyAgICAgICAgICAgICAgICBpbiB0aGUgd2hvbGUgc291cmNlIHRyZWUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+IGNsYXNzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWV4dGVybmFsc3JjJz48ZmlsZW5hbWU+ZXh0ZXJuYWxzcmMuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NjbXMnPgorICAgICAgICAgICAgPHRpdGxlPlNvdXJjZSBDb250cm9sIE1hbmFnZXJzIChPcHRpb25hbCk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbm90aGVyIHBsYWNlIHRoZSBidWlsZCBzeXN0ZW0gY2FuIGdldCBzb3VyY2UgZmlsZXMgZnJvbSBpcworICAgICAgICAgICAgICAgIHRocm91Z2ggYW4gU0NNIHN1Y2ggYXMgR2l0IG9yIFN1YnZlcnNpb24uCisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBhIHJlcG9zaXRvcnkgaXMgY2xvbmVkIG9yIGNoZWNrZWQgb3V0LgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1mZXRjaCc+PGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFzayBpbnNpZGUgQml0QmFrZSB1c2VzCisgICAgICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB0aGUgYXJndW1lbnQncyBwcmVmaXggdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0CisgICAgICAgICAgICAgICAgZmV0Y2hlciBtb2R1bGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaGF2ZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIGdlbmVyYXRlIHRhcmJhbGxzIGZvciBHaXQgcmVwb3NpdG9yaWVzIGFuZCBwbGFjZSB0aGVtIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTJz48ZmlsZW5hbWU+QkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICA8L25vdGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gZmV0Y2hpbmcgYSByZXBvc2l0b3J5LCBCaXRCYWtlIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGRldGVybWluZSB0aGUgc3BlY2lmaWMgcmV2aXNpb24gZnJvbSB3aGljaCB0bworICAgICAgICAgICAgICAgIGJ1aWxkLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NvdXJjZS1taXJyb3JzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Tb3VyY2UgTWlycm9yKHMpPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVHdvIGtpbmRzIG9mIG1pcnJvcnMgZXhpc3Q6IHByZS1taXJyb3JzIGFuZCByZWd1bGFyIG1pcnJvcnMuCisgICAgICAgICAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NSVJST1JTJz48ZmlsZW5hbWU+TUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBwb2ludCB0byB0aGVzZSwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgIEJpdEJha2UgY2hlY2tzIHByZS1taXJyb3JzIGJlZm9yZSBsb29raW5nIHVwc3RyZWFtIGZvciBhbnkKKyAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICAgICAgUHJlLW1pcnJvcnMgYXJlIGFwcHJvcHJpYXRlIHdoZW4geW91IGhhdmUgYSBzaGFyZWQgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgdGhhdCBpcyBub3QgYSBkaXJlY3RvcnkgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgQSBQcmUtbWlycm9yIHR5cGljYWxseSBwb2ludHMgdG8gYSBzaGFyZWQgZGlyZWN0b3J5IHRoYXQgaXMKKyAgICAgICAgICAgICAgICBsb2NhbCB0byB5b3VyIG9yZ2FuaXphdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUmVndWxhciBtaXJyb3JzIGNhbiBiZSBhbnkgc2l0ZSBhY3Jvc3MgdGhlIEludGVybmV0IHRoYXQgaXMKKyAgICAgICAgICAgICAgICB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIGxvY2F0aW9uIGZvciBzb3VyY2UgY29kZSBzaG91bGQgdGhlCisgICAgICAgICAgICAgICAgcHJpbWFyeSBzaXRlIG5vdCBiZSBmdW5jdGlvbmluZyBmb3Igc29tZSByZWFzb24gb3IgYW5vdGhlci4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwYWNrYWdlLWZlZWRzLWRldi1lbnZpcm9ubWVudCI+CisgICAgICAgIDx0aXRsZT5QYWNrYWdlIEZlZWRzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZ2VuZXJhdGVzIGFuIGltYWdlIG9yIGFuIFNESywKKyAgICAgICAgICAgIGl0IGdldHMgdGhlIHBhY2thZ2VzIGZyb20gYSBwYWNrYWdlIGZlZWQgYXJlYSBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ2VuZXJhbC15b2N0by1lbnZpcm9ubWVudC1maWd1cmUnPmdlbmVyYWwgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCBmaWd1cmU8L2xpbms+CisgICAgICAgICAgICBzaG93cyB0aGlzIHBhY2thZ2UgZmVlZHMgYXJlYSBpbiB0aGUgdXBwZXItcmlnaHQgY29ybmVyLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gbG9va3MgYSBsaXR0bGUgY2xvc2VyIGludG8gdGhlIHBhY2thZ2UgZmVlZHMgYXJlYSB1c2VkCisgICAgICAgICAgICBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgSGVyZSBpcyBhIG1vcmUgZGV0YWlsZWQgbG9vayBhdCB0aGUgYXJlYToKKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wYWNrYWdlLWZlZWRzLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjdpbiIgZGVwdGg9IjZpbiIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUGFja2FnZSBmZWVkcyBhcmUgYW4gaW50ZXJtZWRpYXJ5IHN0ZXAgaW4gdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwcm92aWRlcyBjbGFzc2VzIHRvIGdlbmVyYXRlCisgICAgICAgICAgICBkaWZmZXJlbnQgcGFja2FnZSB0eXBlcywgYW5kIHlvdSBzcGVjaWZ5IHdoaWNoIGNsYXNzZXMgdG8gZW5hYmxlCisgICAgICAgICAgICB0aHJvdWdoIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBCZWZvcmUgcGxhY2luZyB0aGUgcGFja2FnZXMgaW50byBwYWNrYWdlIGZlZWRzLAorICAgICAgICAgICAgdGhlIGJ1aWxkIHByb2Nlc3MgdmFsaWRhdGVzIHRoZW0gd2l0aCBnZW5lcmF0ZWQgb3V0cHV0IHF1YWxpdHkKKyAgICAgICAgICAgIGFzc3VyYW5jZSBjaGVja3MgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBwYWNrYWdlIGZlZWQgYXJlYSByZXNpZGVzIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuCisgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IHRoZSBidWlsZCBzeXN0ZW0gdXNlcyB0byB0ZW1wb3JhcmlseSBzdG9yZSBwYWNrYWdlcworICAgICAgICAgICAgaXMgZGV0ZXJtaW5lZCBieSBhIGNvbWJpbmF0aW9uIG9mIHZhcmlhYmxlcyBhbmQgdGhlIHBhcnRpY3VsYXIKKyAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlciBpbiB1c2UuCisgICAgICAgICAgICBTZWUgdGhlICJQYWNrYWdlIEZlZWRzIiBib3ggaW4gdGhlIGlsbHVzdHJhdGlvbiBhbmQgbm90ZSB0aGUKKyAgICAgICAgICAgIGluZm9ybWF0aW9uIHRvIHRoZSByaWdodCBvZiB0aGF0IGFyZWEuCisgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUgZm9sbG93aW5nIGRlZmluZXMgd2hlcmUgcGFja2FnZSBmaWxlcyBhcmUKKyAgICAgICAgICAgIGtlcHQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUic+PGZpbGVuYW1lPkRFUExPWV9ESVI8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIERlZmluZWQgYXMgPGZpbGVuYW1lPnRtcC9kZXBsb3k8L2ZpbGVuYW1lPiBpbiB0aGUgQnVpbGQKKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkRFUExPWV9ESVJfKjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIHBhY2thZ2UgbWFuYWdlciB1c2VkLCB0aGUgcGFja2FnZSB0eXBlCisgICAgICAgICAgICAgICAgICAgIHN1Yi1mb2xkZXIuCisgICAgICAgICAgICAgICAgICAgIEdpdmVuIFJQTSwgSVBLLCBvciBERUIgcGFja2FnaW5nIGFuZCB0YXJiYWxsIGNyZWF0aW9uLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfUlBNJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9SUE08L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX0lQSyc+PGZpbGVuYW1lPkRFUExPWV9ESVJfSVBLPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9ERUInPjxmaWxlbmFtZT5ERVBMT1lfRElSX0RFQjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfVEFSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9UQVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBhcmUgdXNlZCwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQVJDSCc+PGZpbGVuYW1lPlBBQ0tBR0VfQVJDSDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3ViLWZvbGRlcnMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBwYWNrYWdlcyBjb3VsZCBleGlzdCBmb3IgdGhlIGk1ODYgb3IgcWVtdXg4NgorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlIDxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlXyo8L2ZpbGVuYW1lPiB0YXNrcyB0bworICAgICAgICAgICAgZ2VuZXJhdGUgcGFja2FnZXMgYW5kIHBsYWNlIHRoZW0gaW50byB0aGUgcGFja2FnZSBob2xkaW5nIGFyZWEgKGUuZy4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX2lwazwvZmlsZW5hbWU+IGZvciBJUEsgcGFja2FnZXMpLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX2RlYic+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfZGViPC9maWxlbmFtZT48L2xpbms+IiwKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZV93cml0ZV9pcGsnPjxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX2lwazwvZmlsZW5hbWU+PC9saW5rPiIsCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfcnBtJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV9ycG08L2ZpbGVuYW1lPjwvbGluaz4iLAorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfdGFyJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV90YXI8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9ucyBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIGEgc2NlbmFyaW8gd2hlcmUgYW4gSVBLIHBhY2thZ2luZyBtYW5hZ2VyCisgICAgICAgICAgICBpcyBiZWluZyB1c2VkIGFuZCBwYWNrYWdlIGFyY2hpdGVjdHVyZSBzdXBwb3J0IGZvciBib3RoIGk1ODYKKyAgICAgICAgICAgIGFuZCBxZW11eDg2IGV4aXN0LgorICAgICAgICAgICAgUGFja2FnZXMgZm9yIHRoZSBpNTg2IGFyY2hpdGVjdHVyZSBhcmUgcGxhY2VkIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQvdG1wL2RlcGxveS9pcGsvaTU4NjwvZmlsZW5hbWU+LCB3aGlsZSBwYWNrYWdlcyBmb3IKKyAgICAgICAgICAgIHRoZSBxZW11eDg2IGFyY2hpdGVjdHVyZSBhcmUgcGxhY2VkIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQvdG1wL2RlcGxveS9pcGsvcWVtdXg4NjwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2JpdGJha2UtZGV2LWVudmlyb25tZW50Jz4KKyAgICAgICAgPHRpdGxlPkJpdEJha2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4KKyAgICAgICAgICAgIHRvIHByb2R1Y2UgaW1hZ2VzLgorICAgICAgICAgICAgWW91IGNhbiBzZWUgZnJvbSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPiwKKyAgICAgICAgICAgIHRoZSBCaXRCYWtlIGFyZWEgY29uc2lzdHMgb2Ygc2V2ZXJhbCBmdW5jdGlvbmFsIGFyZWFzLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHRha2VzIGEgY2xvc2VyIGxvb2sgYXQgZWFjaCBvZiB0aG9zZSBhcmVhcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU2VwYXJhdGUgZG9jdW1lbnRhdGlvbiBleGlzdHMgZm9yIHRoZSBCaXRCYWtlIHRvb2wuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2JpdGJha2UtdXNlci1tYW51YWwnPkJpdEJha2UgVXNlciBNYW51YWw8L3VsaW5rPgorICAgICAgICAgICAgZm9yIHJlZmVyZW5jZSBtYXRlcmlhbCBvbiBCaXRCYWtlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NvdXJjZS1mZXRjaGluZy1kZXYtZW52aXJvbm1lbnQnPgorICAgICAgICAgICAgPHRpdGxlPlNvdXJjZSBGZXRjaGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBzdGFnZXMgb2YgYnVpbGRpbmcgYSByZWNpcGUgYXJlIHRvIGZldGNoIGFuZCB1bnBhY2sKKyAgICAgICAgICAgICAgICB0aGUgc291cmNlIGNvZGU6CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3NvdXJjZS1mZXRjaGluZy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2LjVpbiIgZGVwdGg9IjVpbiIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWZldGNoJz48ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtdW5wYWNrJz48ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFza3MgZmV0Y2ggdGhlIHNvdXJjZSBmaWxlcyBhbmQgdW5wYWNrIHRoZW0gaW50byB0aGUgd29yaworICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV2ZXJ5IGxvY2FsIGZpbGUgKGUuZy4gPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBpcyBwYXJ0IG9mIGEgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdGFrZXMgYSBjaGVja3N1bQorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZmlsZSBmb3IgdGhlIHJlY2lwZSBhbmQgaW5zZXJ0cyB0aGUgY2hlY2tzdW0gaW50bworICAgICAgICAgICAgICAgICAgICB0aGUgc2lnbmF0dXJlIGZvciB0aGUgPGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIElmIGFueSBsb2NhbCBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT4gdGFzayBhbmQgYWxsIHRhc2tzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kIG9uIGl0IGFyZSByZS1leGVjdXRlZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgZXZlcnl0aGluZyBpcyBhY2NvbXBsaXNoZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICB3aGljaCBoYXMgYSBkZWZpbmVkIHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIHRoZSBCdWlsZCBEaXJlY3RvcnksCisgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1idWlsZCc+PGZpbGVuYW1lPmJ1aWxkLzwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVbnBhY2tlZCBzb3VyY2UgZmlsZXMgYXJlIHBvaW50ZWQgdG8gYnkgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIEVhY2ggcmVjaXBlIGhhcyBhbiBhcmVhIGluIHRoZSBCdWlsZCBEaXJlY3Rvcnkgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgdW5wYWNrZWQgc291cmNlIGNvZGUgcmVzaWRlcy4KKyAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGF0IGRpcmVjdG9yeSBmb3IgYW55IGdpdmVuIHJlY2lwZSBpcyBkZWZpbmVkIGZyb20KKyAgICAgICAgICAgICAgICBzZXZlcmFsIGRpZmZlcmVudCB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIHZhcmlhYmxlcyB0aGF0IGRlZmluZSB0aGVzZSBkaXJlY3RvcmllcworICAgICAgICAgICAgICAgIGJ5IGxvb2tpbmcgYXQgdGhlIGZpZ3VyZToKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1zIGFsbCBpdHMgd29yayBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9BUkNIJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGJ1aWx0IHBhY2thZ2Ugb3IgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfT1MnPjxmaWxlbmFtZT5UQVJHRVRfT1M8L2ZpbGVuYW1lPjwvbGluaz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG9wZXJhdGluZyBzeXN0ZW0gb2YgdGhlIHRhcmdldCBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBidWlsdCBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmVyc2lvbiBvZiB0aGUgcmVjaXBlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXZpc2lvbiBvZiB0aGUgcmVjaXBlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gd2l0aGluIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiB3aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyBwYWNrYWdlIGlzIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvbGluaz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgdGhlIHVucGFja2VkIHNvdXJjZSBmaWxlcyBmb3IgYSBnaXZlbiByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwYXRjaGluZy1kZXYtZW52aXJvbm1lbnQnPgorICAgICAgICAgICAgPHRpdGxlPlBhdGNoaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSBzb3VyY2UgY29kZSBpcyBmZXRjaGVkIGFuZCB1bnBhY2tlZCwgQml0QmFrZSBsb2NhdGVzCisgICAgICAgICAgICAgICAgcGF0Y2ggZmlsZXMgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgc291cmNlIGZpbGVzOgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wYXRjaGluZy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSI1aW4iIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYXRjaCc+PGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFzayBwcm9jZXNzZXMgcmVjaXBlcyBieQorICAgICAgICAgICAgICAgIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGxvY2F0ZSBhcHBsaWNhYmxlIHBhdGNoIGZpbGVzLCB3aGljaCBieSBkZWZhdWx0CisgICAgICAgICAgICAgICAgYXJlIDxmaWxlbmFtZT4qLnBhdGNoPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5kaWZmPC9maWxlbmFtZT4gZmlsZXMsIG9yIGFueSBmaWxlIGlmCisgICAgICAgICAgICAgICAgImFwcGx5PXllcyIgaXMgc3BlY2lmaWVkIGZvciB0aGUgZmlsZSBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgZmluZHMgYW5kIGFwcGxpZXMgbXVsdGlwbGUgcGF0Y2hlcyBmb3IgYSBzaW5nbGUgcmVjaXBlCisgICAgICAgICAgICAgICAgaW4gdGhlIG9yZGVyIGluIHdoaWNoIGl0IGZpbmRzIHRoZSBwYXRjaGVzLgorICAgICAgICAgICAgICAgIFBhdGNoZXMgYXJlIGFwcGxpZWQgdG8gdGhlIHJlY2lwZSdzIHNvdXJjZSBmaWxlcyBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPiBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgc291cmNlIGRpcmVjdG9yaWVzIGFyZQorICAgICAgICAgICAgICAgIGNyZWF0ZWQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc291cmNlLWZldGNoaW5nLWRldi1lbnZpcm9ubWVudCc+U291cmNlIEZldGNoaW5nPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyYXRpb24tYW5kLWNvbXBpbGF0aW9uLWRldi1lbnZpcm9ubWVudCc+CisgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbiBhbmQgQ29tcGlsYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBZnRlciBzb3VyY2UgY29kZSBpcyBwYXRjaGVkLCBCaXRCYWtlIGV4ZWN1dGVzIHRhc2tzIHRoYXQKKyAgICAgICAgICAgICAgICBjb25maWd1cmUgYW5kIGNvbXBpbGUgdGhlIHNvdXJjZSBjb2RlOgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI3aW4iIGRlcHRoPSI1aW4iIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc3RlcCBpbiB0aGUgYnVpbGQgcHJvY2VzcyBjb25zaXN0cyBvZiB0aHJlZSB0YXNrczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB0YXNrIGNvbmZpZ3VyZXMgdGhlIHNvdXJjZSBieSBlbmFibGluZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGluZyBhbnkgYnVpbGQtdGltZSBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbnMgY2FuIGNvbWUgZnJvbSB0aGUgcmVjaXBlIGl0c2VsZiBhcyB3ZWxsCisgICAgICAgICAgICAgICAgICAgICAgICBhcyBmcm9tIGFuIGluaGVyaXRlZCBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIHNvZnR3YXJlIGl0c2VsZiBtaWdodCBjb25maWd1cmUgaXRzZWxmCisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCBmb3Igd2hpY2ggaXQgaXMgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBjb25maWd1cmF0aW9ucyBoYW5kbGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFzayBhcmUgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHNvdXJjZSBjb2RlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzb3VyY2UgY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVpbmcgYnVpbHQgYnkgdGhlIHJlY2lwZS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBhcmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBhZGQgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYnkgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfT0VDT05GJz48ZmlsZW5hbWU+RVhUUkFfT0VDT05GPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdGhpcyB2YXJpYWJsZSB3b3JrcyB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY2xhc3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvYXV0b3Rvb2xzLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgT25jZSBhIGNvbmZpZ3VyYXRpb24gdGFzayBoYXMgYmVlbiBzYXRpc2ZpZWQsIEJpdEJha2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVzIHRoZSBzb3VyY2UgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgICAgICBDb21waWxhdGlvbiBvY2N1cnMgaW4gdGhlIGRpcmVjdG9yeSBwb2ludGVkIHRvIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlYWxpemUgdGhhdCB0aGUgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaXMsIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LCB0aGUgc2FtZSBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgY29tcGlsYXRpb24gaXMgZG9uZSwgQml0QmFrZSBleGVjdXRlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdGFzayBjb3BpZXMgZmlsZXMgZnJvbSB0aGUgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCBwbGFjZXMgdGhlbSBpbiBhIGhvbGRpbmcgYXJlYSBwb2ludGVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncGFja2FnZS1zcGxpdHRpbmctZGV2LWVudmlyb25tZW50Jz4KKyAgICAgICAgICAgIDx0aXRsZT5QYWNrYWdlIFNwbGl0dGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFmdGVyIHNvdXJjZSBjb2RlIGlzIGNvbmZpZ3VyZWQgYW5kIGNvbXBpbGVkLCB0aGUKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFuYWx5emVzCisgICAgICAgICAgICAgICAgdGhlIHJlc3VsdHMgYW5kIHNwbGl0cyB0aGUgb3V0cHV0IGludG8gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2FuYWx5c2lzLWZvci1wYWNrYWdlLXNwbGl0dGluZy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI3aW4iIGRlcHRoPSI3aW4iIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlZGF0YSc+PGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFza3MgY29tYmluZSB0byBhbmFseXplCisgICAgICAgICAgICAgICAgdGhlIGZpbGVzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC9saW5rPiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBhbmQgc3BsaXQgdGhlbSBpbnRvIHN1YnNldHMgYmFzZWQgb24gYXZhaWxhYmxlIHBhY2thZ2VzIGFuZAorICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgIFRoZSBhbmFseXppbmcgcHJvY2VzcyBpbnZvbHZlcyB0aGUgZm9sbG93aW5nIGFzIHdlbGwgYXMgb3RoZXIKKyAgICAgICAgICAgICAgICBpdGVtczogc3BsaXR0aW5nIG91dCBkZWJ1Z2dpbmcgc3ltYm9scywKKyAgICAgICAgICAgICAgICBsb29raW5nIGF0IHNoYXJlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcyBiZXR3ZWVuIHBhY2thZ2VzLAorICAgICAgICAgICAgICAgIGFuZCBsb29raW5nIGF0IHBhY2thZ2UgcmVsYXRpb25zaGlwcy4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT4gdGFzayBjcmVhdGVzIHBhY2thZ2UKKyAgICAgICAgICAgICAgICBtZXRhZGF0YSBiYXNlZCBvbiB0aGUgYW5hbHlzaXMgc3VjaCB0aGF0IHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2FuIGdlbmVyYXRlIHRoZSBmaW5hbCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICBXb3JraW5nLCBzdGFnZWQsIGFuZCBpbnRlcm1lZGlhdGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMKKyAgICAgICAgICAgICAgICBhbmQgcGFja2FnZSBzcGxpdHRpbmcgcHJvY2VzcyB1c2UgdGhlc2UgYXJlYXM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dEJz48ZmlsZW5hbWU+UEtHRDwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGZvciBwYWNrYWdlcyBiZWZvcmUgdGhleSBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEtHREFUQV9ESVInPjxmaWxlbmFtZT5QS0dEQVRBX0RJUjwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBBIHNoYXJlZCwgZ2xvYmFsLXN0YXRlIGRpcmVjdG9yeSB0aGF0IGhvbGRzIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZCBkdXJpbmcgdGhlIHBhY2thZ2luZyBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEtHREVTVFdPUksnPjxmaWxlbmFtZT5QS0dERVNUV09SSzwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBBIHRlbXBvcmFyeSB3b3JrIGFyZWEgdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT4gdGFzay4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBLR0RFU1QnPjxmaWxlbmFtZT5QS0dERVNUPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwYXJlbnQgZGlyZWN0b3J5IGZvciBwYWNrYWdlcyBhZnRlciB0aGV5IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZW4gc3BsaXQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICBUaGUgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBkZWZpbmVzIHRoZSBmaWxlcyB0aGF0IGdvIGludG8gZWFjaCBwYWNrYWdlIGluCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgZGV0YWlscyBvbiBob3cgdGhpcyBpcyBhY2NvbXBsaXNoZWQsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICBsb29rIGF0IHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBwYWNrYWdlcyBiZWluZyBjcmVhdGVkIChSUE0sIERFQiwgb3IKKyAgICAgICAgICAgICAgICBJUEspLCB0aGUgPGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfKjwvZmlsZW5hbWU+IHRhc2sKKyAgICAgICAgICAgICAgICBjcmVhdGVzIHRoZSBhY3R1YWwgcGFja2FnZXMgYW5kIHBsYWNlcyB0aGVtIGluIHRoZQorICAgICAgICAgICAgICAgIFBhY2thZ2UgRmVlZCBhcmVhLCB3aGljaCBpcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1RNUERJUn0vZGVwbG95PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGRldGFpbCBvbiB0aGF0IHBhcnQgb2YgdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIGNyZWF0aW5nIGZlZWRzIGRpcmVjdGx5IGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXBsb3kvKjwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIGRvZXMgbm90IGV4aXN0LgorICAgICAgICAgICAgICAgICAgICBDcmVhdGluZyBzdWNoIGZlZWRzIHVzdWFsbHkgcmVxdWlyZXMgc29tZSBraW5kIG9mIGZlZWQKKyAgICAgICAgICAgICAgICAgICAgbWFpbnRlbmFuY2UgbWVjaGFuaXNtIHRoYXQgd291bGQgdXBsb2FkIHRoZSBuZXcgcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgaW50byBhbiBvZmZpY2lhbCBwYWNrYWdlIGZlZWQgKGUuZy4gdGhlCisgICAgICAgICAgICAgICAgICAgIMOFbmdzdHLDtm0gZGlzdHJpYnV0aW9uKS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGhpZ2hseSBkaXN0cmlidXRpb24tc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRodXMgaXMgbm90IHByb3ZpZGVkIG91dCBvZiB0aGUgYm94LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbWFnZS1nZW5lcmF0aW9uLWRldi1lbnZpcm9ubWVudCc+CisgICAgICAgICAgICA8dGl0bGU+SW1hZ2UgR2VuZXJhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uY2UgcGFja2FnZXMgYXJlIHNwbGl0IGFuZCBzdG9yZWQgaW4gdGhlIFBhY2thZ2UgRmVlZHMgYXJlYSwKKyAgICAgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIEJpdEJha2UgdG8gZ2VuZXJhdGUgdGhlCisgICAgICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIGltYWdlOgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9pbWFnZS1nZW5lcmF0aW9uLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGltYWdlIGdlbmVyYXRpb24gcHJvY2VzcyBjb25zaXN0cyBvZiBzZXZlcmFsIHN0YWdlcyBhbmQKKyAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIG1hbnkgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1yb290ZnMnPjxmaWxlbmFtZT5kb19yb290ZnM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0YXNrIHVzZXMgdGhlc2Uga2V5IHZhcmlhYmxlcworICAgICAgICAgICAgICAgIHRvIGhlbHAgY3JlYXRlIHRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGFjdHVhbGx5IGluc3RhbGw6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIExpc3RzIG91dCB0aGUgYmFzZSBzZXQgb2YgcGFja2FnZXMgdG8gaW5zdGFsbCBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgUGFja2FnZSBGZWVkcyBhcmVhLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfRVhDTFVERSc+PGZpbGVuYW1lPlBBQ0tBR0VfRVhDTFVERTwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBwYWNrYWdlcyB0aGF0IHNob3VsZCBub3QgYmUgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBmZWF0dXJlcyB0byBpbmNsdWRlIGluIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIE1vc3Qgb2YgdGhlc2UgZmVhdHVyZXMgbWFwIHRvIGFkZGl0aW9uYWwgcGFja2FnZXMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYWNrYWdlIGJhY2tlbmQgdG8gdXNlIGFuZCBjb25zZXF1ZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBzIGRldGVybWluZSB3aGVyZSB0byBsb2NhdGUgcGFja2FnZXMgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZSBGZWVkcyBhcmVhLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0xJTkdVQVMnPjxmaWxlbmFtZT5JTUFHRV9MSU5HVUFTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgbGFuZ3VhZ2UocykgZm9yIHdoaWNoIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlIHN1cHBvcnQgcGFja2FnZXMgYXJlIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQYWNrYWdlIGluc3RhbGxhdGlvbiBpcyB1bmRlciBjb250cm9sIG9mIHRoZSBwYWNrYWdlIG1hbmFnZXIKKyAgICAgICAgICAgICAgICAoZS5nLiBzbWFydC9ycG0sIG9wa2csIG9yIGFwdC9kcGtnKSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3IKKyAgICAgICAgICAgICAgICBub3QgcGFja2FnZSBtYW5hZ2VtZW50IGlzIGVuYWJsZWQgZm9yIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgQXQgdGhlIGVuZCBvZiB0aGUgcHJvY2VzcywgaWYgcGFja2FnZSBtYW5hZ2VtZW50IGlzIG5vdAorICAgICAgICAgICAgICAgIGVuYWJsZWQgZm9yIHRoZSB0YXJnZXQsIHRoZSBwYWNrYWdlIG1hbmFnZXIncyBkYXRhIGZpbGVzCisgICAgICAgICAgICAgICAgYXJlIGRlbGV0ZWQgZnJvbSB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEdXJpbmcgaW1hZ2UgZ2VuZXJhdGlvbiwgdGhlIGJ1aWxkIHN5c3RlbSBhdHRlbXB0cyB0byBydW4KKyAgICAgICAgICAgICAgICBhbGwgcG9zdC1pbnN0YWxsYXRpb24gc2NyaXB0cy4KKyAgICAgICAgICAgICAgICBBbnkgdGhhdCBmYWlsIHRvIHJ1biBvbiB0aGUgYnVpbGQgaG9zdCBhcmUgcnVuIG9uIHRoZQorICAgICAgICAgICAgICAgIHRhcmdldCB3aGVuIHRoZSB0YXJnZXQgc3lzdGVtIGlzIGZpcnN0IGJvb3RlZC4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIGEKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLXJlYWQtb25seS1yb290LWZpbGVzeXN0ZW0nPnJlYWQtb25seSByb290IGZpbGVzeXN0ZW08L3VsaW5rPiwKKyAgICAgICAgICAgICAgICBhbGwgdGhlIHBvc3QgaW5zdGFsbGF0aW9uIHNjcmlwdHMgbXVzdCBzdWNjZWVkIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICBwYWNrYWdlIGluc3RhbGxhdGlvbiBwaGFzZSBzaW5jZSB0aGUgcm9vdCBmaWxlc3lzdGVtIGlzCisgICAgICAgICAgICAgICAgcmVhZC1vbmx5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEdXJpbmcgT3B0aW1pemF0aW9uLCBvcHRpbWl6aW5nIHByb2Nlc3NlcyBhcmUgcnVuIGFjcm9zcworICAgICAgICAgICAgICAgIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICBUaGVzZSBwcm9jZXNzZXMgaW5jbHVkZSA8ZmlsZW5hbWU+bWtsaWJzPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnByZWxpbms8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1rbGliczwvZmlsZW5hbWU+IHByb2Nlc3Mgb3B0aW1pemVzIHRoZSBzaXplCisgICAgICAgICAgICAgICAgb2YgdGhlIGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICBBIDxmaWxlbmFtZT5wcmVsaW5rPC9maWxlbmFtZT4gcHJvY2VzcyBvcHRpbWl6ZXMgdGhlIGR5bmFtaWMKKyAgICAgICAgICAgICAgICBsaW5raW5nIG9mIHNoYXJlZCBsaWJyYXJpZXMgdG8gcmVkdWNlIHN0YXJ0IHVwIHRpbWUgb2YKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWxvbmcgd2l0aCB3cml0aW5nIG91dCB0aGUgcm9vdCBmaWxlc3lzdGVtIGltYWdlLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcm9vdGZzPC9maWxlbmFtZT4gdGFzayBjcmVhdGVzIGEgbWFuaWZlc3QgZmlsZQorICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Lm1hbmlmZXN0PC9maWxlbmFtZT4pIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcworICAgICAgICAgICAgICAgIHRoZSByb290IGZpbGVzeXN0ZW0gaW1hZ2UgdGhhdCBsaXN0cyBvdXQsIGxpbmUtYnktbGluZSwgdGhlCisgICAgICAgICAgICAgICAgaW5zdGFsbGVkIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIFRoaXMgbWFuaWZlc3QgZmlsZSBpcyB1c2VmdWwgZm9yIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXRlc3RpbWFnZSc+PGZpbGVuYW1lPnRlc3RpbWFnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNsYXNzLCBmb3IgZXhhbXBsZSwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIHJ1bgorICAgICAgICAgICAgICAgIHNwZWNpZmljIHRlc3RzLgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfTUFOSUZFU1QnPjxmaWxlbmFtZT5JTUFHRV9NQU5JRkVTVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQYXJ0IG9mIHRoZSBpbWFnZSBnZW5lcmF0aW9uIHByb2Nlc3MgaW5jbHVkZXMgY29tcHJlc3NpbmcgdGhlCisgICAgICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIGltYWdlLgorICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIGlzIGFjY29tcGxpc2hlZCB0aHJvdWdoIHNldmVyYWwgb3B0aW1pemF0aW9uCisgICAgICAgICAgICAgICAgcm91dGluZXMgZGVzaWduZWQgdG8gcmVkdWNlIHRoZSBvdmVyYWxsIHNpemUgb2YgdGhlIGltYWdlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBZnRlciB0aGUgcm9vdCBmaWxlc3lzdGVtIGhhcyBiZWVuIGNvbnN0cnVjdGVkLCB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICBnZW5lcmF0aW9uIHByb2Nlc3MgdHVybnMgZXZlcnl0aGluZyBpbnRvIGFuIGltYWdlIGZpbGUgb3IKKyAgICAgICAgICAgICAgICBhIHNldCBvZiBpbWFnZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBUaGUgZm9ybWF0cyB1c2VkIGZvciB0aGUgcm9vdCBmaWxlc3lzdGVtIGRlcGVuZCBvbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIGVudGlyZSBpbWFnZSBnZW5lcmF0aW9uIHByb2Nlc3MgaXMgcnVuIHVuZGVyIFBzZXVkby4KKyAgICAgICAgICAgICAgICBSdW5uaW5nIHVuZGVyIFBzZXVkbyBlbnN1cmVzIHRoYXQgdGhlIGZpbGVzIGluIHRoZSByb290CisgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSBoYXZlIGNvcnJlY3Qgb3duZXJzaGlwLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Nkay1nZW5lcmF0aW9uLWRldi1lbnZpcm9ubWVudCc+CisgICAgICAgICAgICA8dGl0bGU+U0RLIEdlbmVyYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIEJpdEJha2UgdG8gZ2VuZXJhdGUgdGhlCisgICAgICAgICAgICAgICAgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIGluc3RhbGxlciBzY3JpcHQ6CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3Nkay1nZW5lcmF0aW9uLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbgorICAgICAgICAgICAgICAgIGdlbmVyYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluLWdlbmVyYXRpb24nPkNyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbiBHZW5lcmF0aW9uPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhZHZhbnRhZ2VzIGdhaW5lZCB3aGVuIGJ1aWxkaW5nIGEKKyAgICAgICAgICAgICAgICBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBvcHVsYXRlX3Nkayc+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX3NkazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHRhc2ssIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjb3B0aW9uYWxseS1idWlsZGluZy1hLXRvb2xjaGFpbi1pbnN0YWxsZXInPk9wdGlvbmFsbHkgQnVpbGRpbmcgYSBUb29sY2hhaW4gSW5zdGFsbGVyPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgIDwvbm90ZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTGlrZSBpbWFnZSBnZW5lcmF0aW9uLCB0aGUgU0RLIHNjcmlwdCBwcm9jZXNzIGNvbnNpc3RzIG9mCisgICAgICAgICAgICAgICAgc2V2ZXJhbCBzdGFnZXMgYW5kIGRlcGVuZHMgb24gbWFueSB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zZGs8L2ZpbGVuYW1lPiB0YXNrIHVzZXMgdGhlc2UKKyAgICAgICAgICAgICAgICBrZXkgdmFyaWFibGVzIHRvIGhlbHAgY3JlYXRlIHRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGFjdHVhbGx5CisgICAgICAgICAgICAgICAgaW5zdGFsbC4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIHZhcmlhYmxlcyBsaXN0ZWQgaW4gdGhlIGZpZ3VyZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstZGV2LWVudmlyb25tZW50Jz5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBTREs8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrPC9maWxlbmFtZT4gdGFzayBoYW5kbGVzIHR3bworICAgICAgICAgICAgICAgIHBhcnRzOiBhIHRhcmdldCBwYXJ0IGFuZCBhIGhvc3QgcGFydC4KKyAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0IHBhcnQgaXMgdGhlIHBhcnQgYnVpbHQgZm9yIHRoZSB0YXJnZXQgaGFyZHdhcmUgYW5kCisgICAgICAgICAgICAgICAgaW5jbHVkZXMgbGlicmFyaWVzIGFuZCBoZWFkZXJzLgorICAgICAgICAgICAgICAgIFRoZSBob3N0IHBhcnQgaXMgdGhlIHBhcnQgb2YgdGhlIFNESyB0aGF0IHJ1bnMgb24gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES01BQ0hJTkUnPjxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIGJvdGggcGFydHMgYXJlIGNvbnN0cnVjdGVkLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrPC9maWxlbmFtZT4gdGFzayBwZXJmb3JtcyBzb21lIGNsZWFudXAKKyAgICAgICAgICAgICAgICBvbiBib3RoIHBhcnRzLgorICAgICAgICAgICAgICAgIEFmdGVyIHRoZSBjbGVhbnVwLCB0aGUgdGFzayBjcmVhdGVzIGEgY3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgYW5kIGFueSBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQKKyAgICAgICAgICAgICAgICBtaWdodCBiZSBuZWVkZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBvdXRwdXQgb2YgdGhlIHRhc2sgaXMgdGhlIENyb3NzLWRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgdG9vbGNoYWluIGluc3RhbGxhdGlvbiBzY3JpcHQgKDxmaWxlbmFtZT4uc2g8L2ZpbGVuYW1lPiBmaWxlKSwKKyAgICAgICAgICAgICAgICB3aGljaCBpbmNsdWRlcyB0aGUgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2ltYWdlcy1kZXYtZW52aXJvbm1lbnQnPgorICAgICAgICA8dGl0bGU+SW1hZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBpbWFnZXMgcHJvZHVjZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgIGFyZSBjb21wcmVzc2VkIGZvcm1zIG9mIHRoZQorICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIHRoYXQgYXJlIHJlYWR5IHRvIGJvb3Qgb24gYSB0YXJnZXQgZGV2aWNlLgorICAgICAgICAgICAgWW91IGNhbiBzZWUgZnJvbSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPgorICAgICAgICAgICAgdGhhdCBCaXRCYWtlIG91dHB1dCwgaW4gcGFydCwgY29uc2lzdHMgb2YgaW1hZ2VzLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGlzIGdvaW5nIHRvIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRoaXMgb3V0cHV0OgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2ltYWdlcy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI1LjVpbiIgZGVwdGg9IjUuNWluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgYSBsaXN0IG9mIGV4YW1wbGUgaW1hZ2VzIHRoYXQgdGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMsCisgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWltYWdlcyc+SW1hZ2VzPC9saW5rPiIgY2hhcHRlci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW1hZ2VzIGFyZSB3cml0dGVuIG91dCB0byB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGluc2lkZSB0aGUgPGZpbGVuYW1lPnRtcC9kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT4vPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZvbGRlciBhcyBzaG93biBpbiB0aGUgZmlndXJlLgorICAgICAgICAgICAgVGhpcyBmb2xkZXIgY29udGFpbnMgYW55IGZpbGVzIGV4cGVjdGVkIHRvIGJlIGxvYWRlZCBvbiB0aGUKKyAgICAgICAgICAgIHRhcmdldCBkZXZpY2UuCisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSA8ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT4gZGlyZWN0b3J5LAorICAgICAgICAgICAgd2hpbGUgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9JTUFHRSc+PGZpbGVuYW1lPkRFUExPWV9ESVJfSU1BR0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHBvaW50cyB0byB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgaW1hZ2VzIGZvcgorICAgICAgICAgICAgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48cmVwbGFjZWFibGU+a2VybmVsLWltYWdlPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgQSBrZXJuZWwgYmluYXJ5IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX0lNQUdFVFlQRSc+PGZpbGVuYW1lPktFUk5FTF9JTUFHRVRZUEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc2V0dGluZyBkZXRlcm1pbmVzIHRoZSBuYW1pbmcgc2NoZW1lIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAga2VybmVsIGltYWdlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGF0IHZhcmlhYmxlLCB0aGUgZmlsZSBjb3VsZCBiZWdpbiB3aXRoCisgICAgICAgICAgICAgICAgICAgIGEgdmFyaWV0eSBvZiBuYW1pbmcgc3RyaW5ncy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2FuIGNvbnRhaW4gbXVsdGlwbGUgaW1hZ2UgZmlsZXMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnJvb3QtZmlsZXN5c3RlbS1pbWFnZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFJvb3QgZmlsZXN5c3RlbXMgZm9yIHRoZSB0YXJnZXQgZGV2aWNlIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLmV4dDM8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+Ki5iejI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlcykuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc2V0dGluZyBkZXRlcm1pbmVzIHRoZSByb290IGZpbGVzeXN0ZW0gaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2FuIGNvbnRhaW4gbXVsdGlwbGUgcm9vdCBmaWxlc3lzdGVtcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48cmVwbGFjZWFibGU+a2VybmVsLW1vZHVsZXM8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUYXJiYWxscyB0aGF0IGNvbnRhaW4gYWxsIHRoZSBtb2R1bGVzIGJ1aWx0IGZvciB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgICAgICBLZXJuZWwgbW9kdWxlIHRhcmJhbGxzIGV4aXN0IGZvciBsZWdhY3kgcHVycG9zZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBzdXBwcmVzc2VkIGJ5IHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NT0RVTEVfVEFSQkFMTF9ERVBMT1knPjxmaWxlbmFtZT5NT0RVTEVfVEFSQkFMTF9ERVBMT1k8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gIjAiLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRlcGxveS9pbWFnZXMvPHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBjYW4gY29udGFpbiBtdWx0aXBsZSBrZXJuZWwgbW9kdWxlIHRhcmJhbGxzCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgbWFjaGluZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5ib290bG9hZGVyczwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIEJvb3Rsb2FkZXJzIHN1cHBvcnRpbmcgdGhlIGltYWdlLCBpZiBhcHBsaWNhYmxlIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2FuIGNvbnRhaW4gbXVsdGlwbGUgYm9vdGxvYWRlcnMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnN5bWxpbmtzPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmb2xkZXIgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgYSBzeW1ib2xpYyBsaW5rIHRoYXQgcG9pbnRzIHRvIHRoZSBtb3N0IHJlY2VudGx5IGJ1aWx0IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgZm9yIGVhY2ggbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgbGlua3MgbWlnaHQgYmUgdXNlZnVsIGZvciBleHRlcm5hbCBzY3JpcHRzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBvYnRhaW4gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGVhY2ggZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzZGstZGV2LWVudmlyb25tZW50Jz4KKyAgICAgICAgPHRpdGxlPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFNESzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPiwKKyAgICAgICAgICAgIHRoZSBvdXRwdXQgbGFiZWxlZCAiQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgU0RLIiByZXByZXNlbnRzIGFuCisgICAgICAgICAgICBTREsuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gaXMgZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoaXMgb3V0cHV0OgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3Nkay5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI1aW4iIGRlcHRoPSI0aW4iIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzcGVjaWZpYyBmb3JtIG9mIHRoaXMgb3V0cHV0IGlzIGEgc2VsZi1leHRyYWN0aW5nCisgICAgICAgICAgICBTREsgaW5zdGFsbGVyICg8ZmlsZW5hbWU+Ki5zaDwvZmlsZW5hbWU+KSB0aGF0LCB3aGVuIHJ1biwKKyAgICAgICAgICAgIGluc3RhbGxzIHRoZSBTREssIHdoaWNoIGNvbnNpc3RzIG9mIGEgY3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgIHRvb2xjaGFpbiwgYSBzZXQgb2YgbGlicmFyaWVzIGFuZCBoZWFkZXJzLCBhbmQgYW4gU0RLCisgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuCisgICAgICAgICAgICBSdW5uaW5nIHRoaXMgaW5zdGFsbGVyIGVzc2VudGlhbGx5IHNldHMgdXAgeW91cgorICAgICAgICAgICAgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBZb3UgY2FuIHRoaW5rIG9mIHRoZSBjcm9zcy10b29sY2hhaW4gYXMgdGhlICJob3N0IgorICAgICAgICAgICAgcGFydCBiZWNhdXNlIGl0IHJ1bnMgb24gdGhlIFNESyBtYWNoaW5lLgorICAgICAgICAgICAgWW91IGNhbiB0aGluayBvZiB0aGUgbGlicmFyaWVzIGFuZCBoZWFkZXJzIGFzIHRoZSAidGFyZ2V0IgorICAgICAgICAgICAgcGFydCBiZWNhdXNlIHRoZXkgYXJlIGJ1aWx0IGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgVGhlIHNldHVwIHNjcmlwdCBpcyBhZGRlZCBzbyB0aGF0IHlvdSBjYW4gaW5pdGlhbGl6ZSB0aGUKKyAgICAgICAgICAgIGVudmlyb25tZW50IGJlZm9yZSB1c2luZyB0aGUgdG9vbHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRzIHNldmVyYWwgbWV0aG9kcyBieSB3aGljaCB5b3UgY2FuCisgICAgICAgICAgICAgICAgc2V0IHVwIHRoaXMgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgVGhlc2UgbWV0aG9kcyBpbmNsdWRlIGRvd25sb2FkaW5nIHByZS1idWlsdCBTREsgaW5zdGFsbGVycywKKyAgICAgICAgICAgICAgICBidWlsZGluZyBhbmQgaW5zdGFsbGluZyB5b3VyIG93biBTREsgaW5zdGFsbGVyLCBvciBydW5uaW5nCisgICAgICAgICAgICAgICAgYW4gQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKSBpbnN0YWxsZXIgdG8KKyAgICAgICAgICAgICAgICBpbnN0YWxsIG5vdCBqdXN0IGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMKKyAgICAgICAgICAgICAgICBidXQgYWxzbyBhZGRpdGlvbmFsIHRvb2xzIHRvIGhlbHAgaW4gdGhpcyB0eXBlIG9mCisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIG9uIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMKKyAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHNldHRpbmcgdXAgYSBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I2luc3RhbGxpbmctdGhlLWFkdCc+SW5zdGFsbGluZyB0aGUgQURUIGFuZCBUb29sY2hhaW5zPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9ub3RlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSBidWlsdCwgdGhlIFNESyBpbnN0YWxsZXJzIGFyZSB3cml0dGVuIG91dCB0byB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kZXBsb3kvc2RrPC9maWxlbmFtZT4gZm9sZGVyIGluc2lkZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGFzIHNob3duIGluIHRoZSBmaWd1cmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHNlY3Rpb24uCisgICAgICAgICAgICBTZXZlcmFsIHZhcmlhYmxlcyBleGlzdCB0aGF0IGhlbHAgY29uZmlndXJlIHRoZXNlIGZpbGVzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIDxmaWxlbmFtZT5kZXBsb3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TREtNQUNISU5FJz48ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgb24gd2hpY2ggdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xzIGFyZSBydW4gdG8KKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlIHBhY2thZ2VzIGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVNES0lNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+U0RLSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHRoZSBmZWF0dXJlcyB0byBpbmNsdWRlIGluIHRoZSAidGFyZ2V0IiBwYXJ0CisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItVE9PTENIQUlOX0hPU1RfVEFTSyc+PGZpbGVuYW1lPlRPT0xDSEFJTl9IT1NUX1RBU0s8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHBhY2thZ2VzIHRoYXQgbWFrZSB1cCB0aGUgaG9zdAorICAgICAgICAgICAgICAgICAgICBwYXJ0IG9mIHRoZSBTREsgKGkuZS4gdGhlIHBhcnQgdGhhdCBydW5zIG9uCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1jIHBvcHVsYXRlX3NkayA8cmVwbGFjZWFibGU+aW1hZ2VuYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgdGhlIFNESywgYSBzZXQgb2YgZGVmYXVsdCBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBhcHBseS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBhbGxvd3MgeW91IHRvIGFkZCBtb3JlIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVRPT0xDSEFJTl9UQVJHRVRfVEFTSyc+PGZpbGVuYW1lPlRPT0xDSEFJTl9UQVJHRVRfVEFTSzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgcGFja2FnZXMgdGhhdCBtYWtlIHVwIHRoZSB0YXJnZXQgcGFydAorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgU0RLIChpLmUuIHRoZSBwYXJ0IGJ1aWx0IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGhhcmR3YXJlKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TREtQQVRIJz48ZmlsZW5hbWU+U0RLUEFUSDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgZGVmYXVsdCBTREsgaW5zdGFsbGF0aW9uIHBhdGggb2ZmZXJlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9oZWxsby1hdXRvdG9vbHMvaGVsbG9fMi4zLmJiIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tYXV0b3Rvb2xzL2hlbGxvXzIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGZiMGIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tYXV0b3Rvb2xzL2hlbGxvXzIuMy5iYgpAQCAtMCwwICsxLDggQEAKK0RFU0NSSVBUSU9OID0gIkdOVSBIZWxsb3dvcmxkIGFwcGxpY2F0aW9uIgorU0VDVElPTiA9ICJleGFtcGxlcyIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hZGVmZGEzMDkwNTIyMzVhYTVkMWU5OWNlNzU1NzAxMCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2hlbGxvL2hlbGxvLSR7UFZ9LnRhci5iejIiCisKK2luaGVyaXQgYXV0b3Rvb2xzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9oZWxsby1zaW5nbGUvZmlsZXMvaGVsbG93b3JsZC5jIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tc2luZ2xlL2ZpbGVzL2hlbGxvd29ybGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzcxNjliCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tc2luZ2xlL2ZpbGVzL2hlbGxvd29ybGQuYwpAQCAtMCwwICsxLDggQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFpbih2b2lkKQoreworCXByaW50ZigiSGVsbG8gd29ybGQhXG4iKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tc2luZ2xlL2hlbGxvLmJiIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tc2luZ2xlL2hlbGxvLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MTI3NDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9oZWxsby1zaW5nbGUvaGVsbG8uYmIKQEAgLTAsMCArMSwxNyBAQAorREVTQ1JJUFRJT04gPSAiU2ltcGxlIGhlbGxvd29ybGQgYXBwbGljYXRpb24iCitTRUNUSU9OID0gImV4YW1wbGVzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vTUlUO21kNT0wODM1YWRlNjk4ZTBiY2Y4NTA2ZWNkYTJmN2I0ZjMwMiIKKworU1JDX1VSSSA9ICJmaWxlOi8vaGVsbG93b3JsZC5jIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2NvbXBpbGUoKSB7CisJJHtDQ30gaGVsbG93b3JsZC5jIC1vIGhlbGxvd29ybGQKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgaGVsbG93b3JsZCAke0R9JHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9saWJ4cG0vbGlieHBtXzMuNS42LmJiIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvbGlieHBtL2xpYnhwbV8zLjUuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNThkNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvbGlieHBtL2xpYnhwbV8zLjUuNi5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworREVTQ1JJUFRJT04gPSAiWDExIFBpeG1hcCBsaWJyYXJ5IgorTElDRU5TRSA9ICJYLUJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNlMDc3NjNkMTY5NjNjM2FmMTJkYjI3MWEzMWFiYWE1IgorREVQRU5EUyArPSAibGlieGV4dCIKK1BSID0gInIyIgorUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYcG0iCisKK1BBQ0tBR0VTID0rICJzeHBtIGN4cG0iCitGSUxFU19jeHBtID0gIiR7YmluZGlyfS9jeHBtIgorRklMRVNfc3hwbSA9ICIke2JpbmRpcn0vc3hwbSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2V4YW1wbGVzL210ZC1tYWtlZmlsZS9tdGQtdXRpbHNfMS4wLjAuYmIgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9tdGQtbWFrZWZpbGUvbXRkLXV0aWxzXzEuMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMDVhNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9tdGQtbWFrZWZpbGUvbXRkLXV0aWxzXzEuMC4wLmJiCkBAIC0wLDAgKzEsMTUgQEAKK0RFU0NSSVBUSU9OID0gIlRvb2xzIGZvciBtYW5hZ2luZyBtZW1vcnkgdGVjaG5vbG9neSBkZXZpY2VzLiIKK1NFQ1RJT04gPSAiYmFzZSIKK0RFUEVORFMgPSAiemxpYiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGludXgtbXRkLmluZnJhZGVhZC5vcmcvIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvY29tbW9uLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9YmEwNWIwNzkxMmE0NGVhMmJmODFjZTQwOTM4MDA0OWMiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmluZnJhZGVhZC5vcmcvcHViL210ZC11dGlscy9tdGQtdXRpbHMtJHtQVn0udGFyLmd6IgorCitDRkxBR1NfcHJlcGVuZCA9ICItSSAke1N9L2luY2x1ZGUgIgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZhcS54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9mYXEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5N2Q0OTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9mYXEueG1sCkBAIC0wLDAgKzEsODE3IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nZmFxJz4KKzx0aXRsZT5GQVE8L3RpdGxlPgorPHFhbmRhc2V0PgorICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG9lcyBQb2t5IGRpZmZlciBmcm9tIDx1bGluayB1cmw9JyZPRV9IT01FX1VSTDsnPk9wZW5FbWJlZGRlZDwvdWxpbms+PworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHRlcm0gIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Bva3knPlBva3k8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICByZWZlcnMgdG8gdGhlIHNwZWNpZmljIHJlZmVyZW5jZSBidWlsZCBzeXN0ZW0gdGhhdAorICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzLgorICAgICAgICAgICAgICAgIFBva3kgaXMgYmFzZWQgb24gPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjb2UtY29yZSc+T0UtQ29yZTwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFRodXMsIHRoZSBnZW5lcmljIHRlcm0gdXNlZCBoZXJlIGZvciB0aGUgYnVpbGQgc3lzdGVtIGlzCisgICAgICAgICAgICAgICAgdGhlICJPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgICAgICBEZXZlbG9wbWVudCBpbiB0aGUgWW9jdG8gUHJvamVjdCB1c2luZyBQb2t5IGlzIGNsb3NlbHkgdGllZCB0byBPcGVuRW1iZWRkZWQsIHdpdGgKKyAgICAgICAgICAgICAgICBjaGFuZ2VzIGFsd2F5cyBiZWluZyBtZXJnZWQgdG8gT0UtQ29yZSBvciBCaXRCYWtlIGZpcnN0IGJlZm9yZSBiZWluZyBwdWxsZWQgYmFjaworICAgICAgICAgICAgICAgIGludG8gUG9reS4KKyAgICAgICAgICAgICAgICBUaGlzIHByYWN0aWNlIGJlbmVmaXRzIGJvdGggcHJvamVjdHMgaW1tZWRpYXRlbHkuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYSBpZD0nZmFxLW5vdC1tZWV0aW5nLXJlcXVpcmVtZW50cyc+CisgICAgICAgICAgICAgICAgTXkgZGV2ZWxvcG1lbnQgc3lzdGVtIGRvZXMgbm90IG1lZXQgdGhlCisgICAgICAgICAgICAgICAgcmVxdWlyZWQgR2l0LCB0YXIsIGFuZCBQeXRob24gdmVyc2lvbnMuCisgICAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgSSBkbyBub3QgaGF2ZSBQeXRob24gMi43LjMgb3IgZ3JlYXRlciwgb3IKKyAgICAgICAgICAgICAgICBJIGRvIGhhdmUgUHl0aG9uIDMueCwgd2hpY2ggaXMgc3BlY2lmaWNhbGx5IG5vdCBzdXBwb3J0ZWQgYnkKKyAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICBDYW4gSSBzdGlsbCB1c2UgdGhlIFlvY3RvIFByb2plY3Q/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGdldCB0aGUgcmVxdWlyZWQgdG9vbHMgb24geW91ciBob3N0IGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgc3lzdGVtIGEgY291cGxlIGRpZmZlcmVudCB3YXlzIChpLmUuIGJ1aWxkaW5nIGEgdGFyYmFsbCBvcgorICAgICAgICAgICAgICAgIGRvd25sb2FkaW5nIGEgdGFyYmFsbCkuCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZXF1aXJlZC1naXQtdGFyLWFuZC1weXRob24tdmVyc2lvbnMnPlJlcXVpcmVkIEdpdCwgdGFyLCBhbmQgUHl0aG9uIFZlcnNpb25zPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBzdGVwcyBvbiBob3cgdG8gdXBkYXRlIHlvdXIgYnVpbGQgdG9vbHMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgY2FuIHlvdSBjbGFpbSBQb2t5IC8gT3BlbkVtYmVkZGVkLUNvcmUgaXMgc3RhYmxlPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlcmUgYXJlIHRocmVlIGFyZWFzIHRoYXQgaGVscCB3aXRoIHN0YWJpbGl0eTsKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIFlvY3RvIFByb2plY3QgdGVhbSBrZWVwcworICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjb2UtY29yZSc+T0UtQ29yZTwvdWxpbms+IHNtYWxsCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZm9jdXNlZCwgY29udGFpbmluZyBhcm91bmQgODMwIHJlY2lwZXMgYXMgb3Bwb3NlZCB0byB0aGUgdGhvdXNhbmRzCisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgaW4gb3RoZXIgT3BlbkVtYmVkZGVkIGNvbW11bml0eSBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgICAgICBLZWVwaW5nIGl0IHNtYWxsIG1ha2VzIGl0IGVhc3kgdG8gdGVzdCBhbmQgbWFpbnRhaW4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgWW9jdG8gUHJvamVjdCB0ZWFtIHJ1bnMgbWFudWFsIGFuZCBhdXRvbWF0ZWQgdGVzdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIGEgc21hbGwsIGZpeGVkIHNldCBvZiByZWZlcmVuY2UgaGFyZHdhcmUgYXMgd2VsbCBhcyBlbXVsYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBZb2N0byBQcm9qZWN0IHVzZXMgYW4gYXV0b2J1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBwcm92aWRlcyBjb250aW51b3VzIGJ1aWxkIGFuZCBpbnRlZ3JhdGlvbiB0ZXN0cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhvdyBkbyBJIGdldCBzdXBwb3J0IGZvciBteSBib2FyZCBhZGRlZCB0byB0aGUgWW9jdG8gUHJvamVjdD8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIGFuIGFkZGl0aW9uYWwgYm9hcmQgaXMgYWRkZWQgYnkgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBsYXllciBmb3IgaXQuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGNyZWF0ZSBhIEJTUCBsYXllciwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGFuZCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyc+WW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzdWFsbHksIGlmIHRoZSBib2FyZCBpcyBub3QgY29tcGxldGVseSBleG90aWMsIGFkZGluZyBzdXBwb3J0IGluCisgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFyZSB0aGVyZSBhbnkgcHJvZHVjdHMgYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgc29mdHdhcmUgcnVubmluZyBvbiB0aGUgPHVsaW5rIHVybD0naHR0cDovL3Zlcm5pZXIuY29tL2xhYnF1ZXN0Lyc+VmVybmllciBMYWJRdWVzdDwvdWxpbms+CisgICAgICAgICAgICAgICAgaXMgYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgU2VlIHRoZSA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnZlcm5pZXIuY29tL3Byb2R1Y3RzL2ludGVyZmFjZXMvbGFicS8nPlZlcm5pZXIgTGFiUXVlc3Q8L3VsaW5rPgorICAgICAgICAgICAgICAgIHdlYnNpdGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHByZS1wcm9kdWN0aW9uIGRldmljZXMgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBhbmQgdGhlIFlvY3RvIFByb2plY3QgdGVhbQorICAgICAgICAgICAgICAgIGFubm91bmNlcyB0aGVtIGFzIHNvb24gYXMgdGhleSBhcmUgcmVsZWFzZWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGF0IGRvZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvZHVjZSBhcyBvdXRwdXQ/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIHlvdSBjYW4gdXNlIHRoZSBzYW1lIHNldCBvZiByZWNpcGVzIHRvIGNyZWF0ZSBvdXRwdXQgb2YKKyAgICAgICAgICAgICAgICB2YXJpb3VzIGZvcm1hdHMsIHRoZSBvdXRwdXQgb2YgYW4gT3BlbkVtYmVkZGVkIGJ1aWxkIGRlcGVuZHMgb24KKyAgICAgICAgICAgICAgICBob3cgeW91IHN0YXJ0IGl0LgorICAgICAgICAgICAgICAgIFVzdWFsbHksIHRoZSBvdXRwdXQgaXMgYSBmbGFzaGFibGUgaW1hZ2UgcmVhZHkgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICBkZXZpY2UuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG8gSSBhZGQgbXkgcGFja2FnZSB0byB0aGUgWW9jdG8gUHJvamVjdD8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGFkZCBhIHBhY2thZ2UsIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIEJpdEJha2UgcmVjaXBlLgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3JlYXRlIGEgQml0QmFrZSByZWNpcGUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbmV3LXJlY2lwZS13cml0aW5nLWEtbmV3LXJlY2lwZSc+V3JpdGluZyBhIE5ldyBSZWNpcGU8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEbyBJIGhhdmUgdG8gcmVmbGFzaCBteSBlbnRpcmUgYm9hcmQgd2l0aCBhIG5ldyBZb2N0byBQcm9qZWN0IGltYWdlIHdoZW4gcmVjb21waWxpbmcKKyAgICAgICAgICAgICAgICBhIHBhY2thZ2U/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4gYnVpbGQgcGFja2FnZXMgaW4gdmFyaW91cworICAgICAgICAgICAgICAgIGZvcm1hdHMgc3VjaCBhcyBJUEsgZm9yIE9QS0csIERlYmlhbiBwYWNrYWdlCisgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uZGViPC9maWxlbmFtZT4pLCBvciBSUE0uCisgICAgICAgICAgICAgICAgWW91IGNhbiB0aGVuIHVwZ3JhZGUgdGhlIHBhY2thZ2VzIHVzaW5nIHRoZSBwYWNrYWdlIHRvb2xzIG9uCisgICAgICAgICAgICAgICAgdGhlIGRldmljZSwgbXVjaCBsaWtlIG9uIGEgZGVza3RvcCBkaXN0cmlidXRpb24gc3VjaCBhcworICAgICAgICAgICAgICAgIFVidW50dSBvciBGZWRvcmEuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgcGFja2FnZSBtYW5hZ2VtZW50IG9uIHRoZSB0YXJnZXQgaXMgZW50aXJlbHkgb3B0aW9uYWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJIHNlZSB0aGUgZXJyb3IgJzxmaWxlbmFtZT5jaG1vZDogWFhYWFggbmV3IHBlcm1pc3Npb25zIGFyZSByLXhyd3hyd3gsIG5vdCByLXhyLXhyLXg8L2ZpbGVuYW1lPicuCisgICAgICAgICAgICAgICAgV2hhdCBpcyB3cm9uZz8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBhcmUgcHJvYmFibHkgcnVubmluZyB0aGUgYnVpbGQgb24gYW4gTlRGUyBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgIFVzZSA8ZmlsZW5hbWU+ZXh0MjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZXh0MzwvZmlsZW5hbWU+LCBvciA8ZmlsZW5hbWU+ZXh0NDwvZmlsZW5hbWU+IGluc3RlYWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworPCEtLSAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSG93IGRvIEkgbWFrZSB0aGUgWW9jdG8gUHJvamVjdCB3b3JrIGluIFJIRUwvQ2VudE9TPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gZ2V0IHRoZSBZb2N0byBQcm9qZWN0IHdvcmtpbmcgdW5kZXIgUkhFTC9DZW50T1MgNS4xIHlvdSBuZWVkIHRvIGZpcnN0CisgICAgICAgICAgICAgICAgaW5zdGFsbCBzb21lIHJlcXVpcmVkIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIFRoZSBzdGFuZGFyZCBDZW50T1MgcGFja2FnZXMgbmVlZGVkIGFyZToKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+IkRldmVsb3BtZW50IHRvb2xzIiAoc2VsZWN0ZWQgZHVyaW5nIGluc3RhbGxhdGlvbik8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT50ZXhpMmh0bWw8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvbXBhdC1nY2MtMzQ8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIE9uIHRvcCBvZiB0aGVzZSwgeW91IG5lZWQgdGhlIGZvbGxvd2luZyBleHRlcm5hbCBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnB5dGhvbi1zcWxpdGUyPC9maWxlbmFtZT4gZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2RhZy53aWVlcnMuY29tL3JwbS9wYWNrYWdlcy9weXRob24tc3FsaXRlMi8nPkRBRyByZXBvc2l0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmhlbHAybWFuPC9maWxlbmFtZT4gZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2NlbnRvcy5rYXJhbi5vcmcvZWw0L2V4dHJhcy9zdGFibGUveDg2XzY0L1JQTVMvcmVwb2RhdGEvcmVwb3ZpZXcvaGVscDJtYW4tMC0xLjMzLjEtMi5odG1sJz5LYXJhbiByZXBvc2l0b3J5PC91bGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSB0aGVzZSBwYWNrYWdlcyBhcmUgaW5zdGFsbGVkLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aWxsIGJlIGFibGUKKyAgICAgICAgICAgICAgICB0byBidWlsZCBzdGFuZGFyZCBpbWFnZXMuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlcmUgbWlnaHQgYmUgYSBwcm9ibGVtIHdpdGggdGhlIFFFTVUgZW11bGF0b3Igc2VnZmF1bHRpbmcuCisgICAgICAgICAgICAgICAgWW91IGNhbiBlaXRoZXIgZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiBiaW5hcnkgbG9jYWxlcyBieSBzZXR0aW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OJz5FTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OPC9saW5rPgorICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+IHRvICIwIiBvciBieSByZW1vdmluZyB0aGUgPGZpbGVuYW1lPmxpbnV4LTIuNi1leGVjc2hpZWxkLnBhdGNoPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmcm9tIHRoZSBrZXJuZWwgYW5kIHJlYnVpbGRpbmcgaXQgc2luY2UgdGhhdCBpcyB0aGUgcGF0Y2ggdGhhdCBjYXVzZXMgdGhlIHByb2JsZW1zIHdpdGggUUVNVS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGluZm9ybWF0aW9uIG9uIGRpc3RyaWJ1dGlvbnMgdGhhdCB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIHVzZXMgZHVyaW5nIHZhbGlkYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvRGlzdHJpYnV0aW9uX1N1cHBvcnQnPkRpc3RyaWJ1dGlvbiBTdXBwb3J0PC91bGluaz4KKyAgICAgICAgICAgICAgICBXaWtpIHBhZ2UuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkZvciBub3RlcyBhYm91dCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCBvbiBhIFJIRUwgNC1iYXNlZAorICAgICAgICAgICAgICAgIGhvc3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvQnVpbGRpbmdPblJIRUw0Jz5CdWlsZGluZyBvbiBSSEVMNDwvdWxpbms+CisgICAgICAgICAgICAgICAgV2lraSBwYWdlLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PiAtLT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJIHNlZSBsb3RzIG9mIDQwNCByZXNwb25zZXMgZm9yIGZpbGVzIG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZZT0NUT19IT01FX1VSTDsvc291cmNlcy8qPC9maWxlbmFtZT4uIElzIHNvbWV0aGluZyB3cm9uZz8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vdGhpbmcgaXMgd3JvbmcuCisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2hlY2tzIGFueSBjb25maWd1cmVkIHNvdXJjZSBtaXJyb3JzIGJlZm9yZSBkb3dubG9hZGluZworICAgICAgICAgICAgICAgIGZyb20gdGhlIHVwc3RyZWFtIHNvdXJjZXMuCisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBkb2VzIHRoaXMgc2VhcmNoaW5nIGZvciBib3RoIHNvdXJjZSBhcmNoaXZlcyBhbmQKKyAgICAgICAgICAgICAgICBwcmUtY2hlY2tlZCBvdXQgdmVyc2lvbnMgb2YgU0NNLW1hbmFnZWQgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgVGhlc2UgY2hlY2tzIGhlbHAgaW4gbGFyZ2UgaW5zdGFsbGF0aW9ucyBiZWNhdXNlIGl0IGNhbiByZWR1Y2UgbG9hZCBvbiB0aGUgU0NNIHNlcnZlcnMKKyAgICAgICAgICAgICAgICB0aGVtc2VsdmVzLgorICAgICAgICAgICAgICAgIFRoZSBhZGRyZXNzIGFib3ZlIGlzIG9uZSBvZiB0aGUgZGVmYXVsdCBtaXJyb3JzIGNvbmZpZ3VyZWQgaW50byB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpZiBhbiB1cHN0cmVhbSBzb3VyY2UgZGlzYXBwZWFycywgdGhlIHRlYW0KKyAgICAgICAgICAgICAgICBjYW4gcGxhY2Ugc291cmNlcyB0aGVyZSBzbyBidWlsZHMgY29udGludWUgdG8gd29yay4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEkgaGF2ZSBtYWNoaW5lLXNwZWNpZmljIGRhdGEgaW4gYSBwYWNrYWdlIGZvciBvbmUgbWFjaGluZSBvbmx5IGJ1dCB0aGUgcGFja2FnZSBpcworICAgICAgICAgICAgICAgIGJlaW5nIG1hcmtlZCBhcyBtYWNoaW5lLXNwZWNpZmljIGluIGFsbCBjYXNlcywgaG93IGRvIEkgcHJldmVudCB0aGlzPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU2V0IDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSV9PVkVSUklERVNfUEFDS0FHRV9BUkNIJz5TUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0g8L2xpbms+CisgICAgICAgICAgICAgICAgPC9maWxlbmFtZT4gPSAiMCIgaW4gdGhlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlIGJ1dCBtYWtlIHN1cmUgdGhlIHBhY2thZ2UgaXMKKyAgICAgICAgICAgICAgICBtYW51YWxseSBtYXJrZWQgYXMKKyAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljIGZvciB0aGUgY2FzZSB0aGF0IG5lZWRzIGl0LgorICAgICAgICAgICAgICAgIFRoZSBjb2RlIHRoYXQgaGFuZGxlcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0g8L2ZpbGVuYW1lPiBpcyBpbgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2Jhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJJ20gYmVoaW5kIGEgZmlyZXdhbGwgYW5kIG5lZWQgdG8gdXNlIGEgcHJveHkgc2VydmVyLiBIb3cgZG8gSSBkbyB0aGF0PworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTW9zdCBzb3VyY2UgZmV0Y2hpbmcgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgZG9uZSBieSA8ZmlsZW5hbWU+d2dldDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYW5kIHlvdSB0aGVyZWZvcmUgbmVlZCB0byBzcGVjaWZ5IHRoZSBwcm94eSBzZXR0aW5ncyBpbiBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi53Z2V0cmM8L2ZpbGVuYW1lPiBmaWxlIGluIHlvdXIgaG9tZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlIHNldHRpbmdzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgaHR0cF9wcm94eSA9IGh0dHA6Ly9wcm94eS55b3lvZHluZS5jb206MTgwMjMvCisgICAgIGZ0cF9wcm94eSA9IGh0dHA6Ly9wcm94eS55b3lvZHluZS5jb206MTgwMjMvCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGFsc28gaW5jbHVkZXMgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaXRlLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gZmlsZSB0aGF0IHNob3dzIGhvdyB0bworICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBDVlMgYW5kIEdpdCBwcm94eSBzZXJ2ZXJzIGlmIG5lZWRlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoYXTigJlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IGFuZCA8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LW5hdGl2ZTwvZmlsZW5hbWU+PworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT4qLW5hdGl2ZTwvZmlsZW5hbWU+IHRhcmdldHMgYXJlIGRlc2lnbmVkIHRvIHJ1biBvbiB0aGUgc3lzdGVtCisgICAgICAgICAgICAgICAgYmVpbmcgdXNlZCBmb3IgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIFRoZXNlIGFyZSB1c3VhbGx5IHRvb2xzIHRoYXQgYXJlIG5lZWRlZCB0byBhc3Npc3QgdGhlIGJ1aWxkIGluIHNvbWUgd2F5IHN1Y2ggYXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cXVpbHQtbmF0aXZlPC9maWxlbmFtZT4sIHdoaWNoIGlzIHVzZWQgdG8gYXBwbHkgcGF0Y2hlcy4KKyAgICAgICAgICAgICAgICBUaGUgbm9uLW5hdGl2ZSB2ZXJzaW9uIGlzIHRoZSBvbmUgdGhhdCBydW5zIG9uIHRoZSB0YXJnZXQgZGV2aWNlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSSdtIHNlZWluZyByYW5kb20gYnVpbGQgZmFpbHVyZXMuIEhlbHA/IQorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgdGhlIHNhbWUgYnVpbGQgaXMgZmFpbGluZyBpbiB0b3RhbGx5IGRpZmZlcmVudCBhbmQgcmFuZG9tCisgICAgICAgICAgICAgICAgd2F5cywgdGhlIG1vc3QgbGlrZWx5IGV4cGxhbmF0aW9uIGlzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgaGFyZHdhcmUgeW91IGFyZSBydW5uaW5nIHRoZSBidWlsZCBvbgorICAgICAgICAgICAgICAgICAgICAgICAgaGFzIHNvbWUgcHJvYmxlbS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBhcmUgcnVubmluZyB0aGUgYnVpbGQgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxpemF0aW9uLCBpbiB3aGljaCBjYXNlIHRoZSB2aXJ0dWFsaXphdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvYmFibHkgaGFzIGJ1Z3MuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvY2Vzc2VzIGEgbWFzc2l2ZSBhbW91bnQgb2YKKyAgICAgICAgICAgICAgICBkYXRhIHRoYXQgY2F1c2VzIGxvdHMgb2YgbmV0d29yaywgZGlzayBhbmQgQ1BVIGFjdGl2aXR5IGFuZAorICAgICAgICAgICAgICAgIGlzIHNlbnNpdGl2ZSB0byBldmVuIHNpbmdsZS1iaXQgZmFpbHVyZXMgaW4gYW55IG9mIHRoZXNlIGFyZWFzLgorICAgICAgICAgICAgICAgIFRydWUgcmFuZG9tIGZhaWx1cmVzIGhhdmUgYWx3YXlzIGJlZW4gdHJhY2VkIGJhY2sgdG8gaGFyZHdhcmUKKyAgICAgICAgICAgICAgICBvciB2aXJ0dWFsaXphdGlvbiBpc3N1ZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIEkgdHJ5IHRvIGJ1aWxkIGEgbmF0aXZlIHJlY2lwZSwgdGhlIGJ1aWxkIGZhaWxzIHdpdGggPGZpbGVuYW1lPmljb252Lmg8L2ZpbGVuYW1lPiBwcm9ibGVtcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSBnZXQgYW4gZXJyb3IgbWVzc2FnZSB0aGF0IGluZGljYXRlcyBHTlUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliaWNvbnY8L2ZpbGVuYW1lPiBpcyBub3QgaW4gdXNlIGJ1dAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pY29udi5oPC9maWxlbmFtZT4gaGFzIGJlZW4gaW5jbHVkZWQgZnJvbQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJpY29udjwvZmlsZW5hbWU+LCB5b3UgbmVlZCB0byBjaGVjayB0byBzZWUgaWYKKyAgICAgICAgICAgICAgICB5b3UgaGF2ZSBhIHByZXZpb3VzbHkgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIGhlYWRlciBmaWxlCisgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPi91c3IvbG9jYWwvaW5jbHVkZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgI2Vycm9yIEdOVSBsaWJpY29udiBub3QgaW4gdXNlIGJ1dCBpbmNsdWRlZCBpY29udi5oIGlzIGZyb20gbGliaWNvbnYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgeW91IGZpbmQgYSBwcmV2aW91c2x5IGluc3RhbGxlZCBmaWxlLCB5b3Ugc2hvdWxkIGVpdGhlcgorICAgICAgICAgICAgICAgIHVuaW5zdGFsbCBpdCBvciB0ZW1wb3JhcmlseSByZW5hbWUgaXQgYW5kIHRyeSB0aGUgYnVpbGQgYWdhaW4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgaXNzdWUgaXMganVzdCBhIHNpbmdsZSBtYW5pZmVzdGF0aW9uIG9mICJzeXN0ZW0KKyAgICAgICAgICAgICAgICBsZWFrYWdlIiBpc3N1ZXMgY2F1c2VkIHdoZW4gdGhlIE9wZW5FYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIGZpbmRzIGFuZCB1c2VzIHByZXZpb3VzbHkgaW5zdGFsbGVkIGZpbGVzIGR1cmluZyBhIG5hdGl2ZQorICAgICAgICAgICAgICAgIGJ1aWxkLgorICAgICAgICAgICAgICAgIFRoaXMgdHlwZSBvZiBpc3N1ZSBtaWdodCBub3QgYmUgbGltaXRlZCB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pY29udi5oPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgQmUgc3VyZSB0aGF0IGxlYWthZ2UgY2Fubm90IG9jY3VyIGZyb20KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9sb2NhbC9pbmNsdWRlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9vcHQ8L2ZpbGVuYW1lPiBsb2NhdGlvbnMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGF0IGRvIHdlIG5lZWQgdG8gc2hpcCBmb3IgbGljZW5zZSBjb21wbGlhbmNlPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBpcyBhIGRpZmZpY3VsdCBxdWVzdGlvbiBhbmQgeW91IG5lZWQgdG8gY29uc3VsdCB5b3VyIGxhd3llcgorICAgICAgICAgICAgICAgIGZvciB0aGUgYW5zd2VyIGZvciB5b3VyIHNwZWNpZmljIGNhc2UuCisgICAgICAgICAgICAgICAgSXQgaXMgd29ydGggYmVhcmluZyBpbiBtaW5kIHRoYXQgZm9yIEdQTCBjb21wbGlhbmNlLCB0aGVyZSBuZWVkcworICAgICAgICAgICAgICAgIHRvIGJlIGVub3VnaCBpbmZvcm1hdGlvbiBzaGlwcGVkIHRvIGFsbG93IHNvbWVvbmUgZWxzZSB0bworICAgICAgICAgICAgICAgIHJlYnVpbGQgYW5kIHByb2R1Y2UgdGhlIHNhbWUgZW5kIHJlc3VsdCB5b3UgYXJlIHNoaXBwaW5nLgorICAgICAgICAgICAgICAgIFRoaXMgbWVhbnMgc2hhcmluZyB0aGUgc291cmNlIGNvZGUsIGFueSBwYXRjaGVzIGFwcGxpZWQgdG8gaXQsCisgICAgICAgICAgICAgICAgYW5kIGFsc28gYW55IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoYXQgcGFja2FnZQorICAgICAgICAgICAgICAgIHdhcyBjb25maWd1cmVkIGFuZCBidWlsdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gbGljZW5zaW5nIGluIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNsaWNlbnNpbmcnPkxpY2Vuc2luZzwvdWxpbms+IgorICAgICAgICAgICAgICAgIGFuZCAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWFpbnRhaW5pbmctb3Blbi1zb3VyY2UtbGljZW5zZS1jb21wbGlhbmNlLWR1cmluZy15b3VyLXByb2R1Y3RzLWxpZmVjeWNsZSc+TWFpbnRhaW5pbmcgT3BlbiBTb3VyY2UgTGljZW5zZSBDb21wbGlhbmNlIER1cmluZyBZb3VyIFByb2R1Y3QncyBMaWZlY3ljbGU8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9ucywgYm90aCBvZiB3aGljaCBhcmUgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG8gSSBkaXNhYmxlIHRoZSBjdXJzb3Igb24gbXkgdG91Y2hzY3JlZW4gZGV2aWNlPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gY3JlYXRlIGEgZm9ybSBmYWN0b3IgZmlsZSBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1maWxlbGF5b3V0LW1pc2MtcmVjaXBlcyc+TWlzY2VsbGFuZW91cyBCU1AtU3BlY2lmaWMgUmVjaXBlIEZpbGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1ApCisgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgICAgICAgICAgU2V0IHRoZSA8ZmlsZW5hbWU+SEFWRV9UT1VDSFNDUkVFTjwvZmlsZW5hbWU+IHZhcmlhYmxlIGVxdWFsIHRvCisgICAgICAgICAgICAgICAgb25lIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBIQVZFX1RPVUNIU0NSRUVOPTEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG8gSSBtYWtlIHN1cmUgY29ubmVjdGVkIG5ldHdvcmsgaW50ZXJmYWNlcyBhcmUgYnJvdWdodCB1cCBieSBkZWZhdWx0PworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaW50ZXJmYWNlcyBmaWxlIHByb3ZpZGVkIGJ5IHRoZSBuZXRiYXNlIHJlY2lwZSBkb2VzIG5vdAorICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYnJpbmcgdXAgbmV0d29yayBpbnRlcmZhY2VzLgorICAgICAgICAgICAgICAgIFRoZXJlZm9yZSwgeW91IHdpbGwgbmVlZCB0byBhZGQgYSBCU1Atc3BlY2lmaWMgbmV0YmFzZSB0aGF0IGluY2x1ZGVzIGFuIGludGVyZmFjZXMKKyAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIFNlZSB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1maWxlbGF5b3V0LW1pc2MtcmVjaXBlcyc+TWlzY2VsbGFuZW91cyBCU1AtU3BlY2lmaWMgUmVjaXBlIEZpbGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1ApCisgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIHRoZXNlIHR5cGVzIG9mCisgICAgICAgICAgICAgICAgbWlzY2VsbGFuZW91cyByZWNpcGUgZmlsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYWRkIHRoZSBmb2xsb3dpbmcgZmlsZXMgdG8geW91ciBsYXllcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtTUFDSElORS9yZWNpcGVzLWJzcC9uZXRiYXNlL25ldGJhc2UvTUFDSElORS9pbnRlcmZhY2VzCisgICAgIG1ldGEtTUFDSElORS9yZWNpcGVzLWJzcC9uZXRiYXNlL25ldGJhc2VfNS4wLmJiYXBwZW5kCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSG93IGRvIEkgY3JlYXRlIGltYWdlcyB3aXRoIG1vcmUgZnJlZSBzcGFjZT8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgaW1hZ2VzCisgICAgICAgICAgICAgICAgdGhhdCBhcmUgMS4zIHRpbWVzIHRoZSBzaXplIG9mIHRoZSBwb3B1bGF0ZWQgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgIFRvIGFmZmVjdCB0aGUgaW1hZ2Ugc2l6ZSwgeW91IG5lZWQgdG8gc2V0IHZhcmlvdXMKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkltYWdlIFNpemU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTX1NJWkUnPjxmaWxlbmFtZT5JTUFHRV9ST09URlNfU0laRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gZGVmaW5lIHRoZSBzaXplIG9mIHRoZSBpbWFnZSBpbiBLYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGRldGVybWluZXMgdGhlIHNpemUgYnkgdGFraW5nIGludG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQgdGhlIGluaXRpYWwgcm9vdCBmaWxlc3lzdGVtIHNpemUgYmVmb3JlIGFueQorICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpY2F0aW9ucyBzdWNoIGFzIHJlcXVlc3RlZCBzaXplIGZvciB0aGUgaW1hZ2UgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBhbnkgcmVxdWVzdGVkIGFkZGl0aW9uYWwgZnJlZSBkaXNrIHNwYWNlIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZCB0byB0aGUgaW1hZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T3ZlcmhlYWQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9PVkVSSEVBRF9GQUNUT1InPjxmaWxlbmFtZT5JTUFHRV9PVkVSSEVBRF9GQUNUT1I8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGRlZmluZSB0aGUgbXVsdGlwbGllciB0aGF0IHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZXMgdG8gdGhlIGluaXRpYWwgaW1hZ2Ugc2l6ZSwgd2hpY2ggaXMgMS4zIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFkZGl0aW9uYWwgRnJlZSBTcGFjZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSc+PGZpbGVuYW1lPklNQUdFX1JPT1RGU19FWFRSQV9TUEFDRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gYWRkIGFkZGl0aW9uYWwgZnJlZSBzcGFjZSB0byB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGFkZHMgdGhpcyBzcGFjZSB0byB0aGUgaW1hZ2UgYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IGRldGVybWluZXMgaXRzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfUk9PVEZTX1NJWkU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2h5IGRvbid0IHlvdSBzdXBwb3J0IGRpcmVjdG9yaWVzIHdpdGggc3BhY2VzIGluIHRoZSBwYXRobmFtZXM/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIGhhcyB0cmllZCB0byBkbyB0aGlzIGJlZm9yZSBidXQgdG9vCisgICAgICAgICAgICAgICAgbWFueSBvZiB0aGUgdG9vbHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZGVwZW5kcyBvbiwKKyAgICAgICAgICAgICAgICBzdWNoIGFzIDxmaWxlbmFtZT5hdXRvY29uZjwvZmlsZW5hbWU+LCBicmVhayB3aGVuIHRoZXkgZmluZAorICAgICAgICAgICAgICAgIHNwYWNlcyBpbiBwYXRobmFtZXMuCisgICAgICAgICAgICAgICAgVW50aWwgdGhhdCBzaXR1YXRpb24gY2hhbmdlcywgdGhlIHRlYW0gd2lsbCBub3Qgc3VwcG9ydCBzcGFjZXMKKyAgICAgICAgICAgICAgICBpbiBwYXRobmFtZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG8gSSB1c2UgYW4gZXh0ZXJuYWwgdG9vbGNoYWluPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHRvb2xjaGFpbiBjb25maWd1cmF0aW9uIGlzIHZlcnkgZmxleGlibGUgYW5kIGN1c3RvbWl6YWJsZS4KKyAgICAgICAgICAgICAgICBJdCBpcyBwcmltYXJpbHkgY29udHJvbGxlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVENNT0RFJz5UQ01PREU8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGNvbnRyb2xzIHdoaWNoIDxmaWxlbmFtZT50Y21vZGUtKi5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUgdG8gaW5jbHVkZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGU8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgd2l0aGluCisgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiA8ZmlsZW5hbWU+VENNT0RFPC9maWxlbmFtZT4gaXMgImRlZmF1bHQiLAorICAgICAgICAgICAgICAgIHdoaWNoIHRlbGxzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHVzZSBpdHMgaW50ZXJuYWxseQorICAgICAgICAgICAgICAgIGJ1aWx0IHRvb2xjaGFpbiAoaS5lLiA8ZmlsZW5hbWU+dGNtb2RlLWRlZmF1bHQuaW5jPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIG90aGVyIHBhdHRlcm5zIGFyZSBhY2NlcHRlZC4KKyAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCAiZXh0ZXJuYWwtKiIgcmVmZXJzIHRvIGV4dGVybmFsIHRvb2xjaGFpbnMuCisgICAgICAgICAgICAgICAgT25lIGV4YW1wbGUgaXMgdGhlIFNvdXJjZXJ5IEcrKyBUb29sY2hhaW4uCisgICAgICAgICAgICAgICAgVGhlIHN1cHBvcnQgZm9yIHRoaXMgdG9vbGNoYWluIHJlc2lkZXMgaW4gdGhlIHNlcGFyYXRlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtc291cmNlcnk8L2ZpbGVuYW1lPiBsYXllciBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXRodWIuY29tL01lbnRvckVtYmVkZGVkL21ldGEtc291cmNlcnkvJz48L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gdGhlIHRvb2xjaGFpbiBjb25maWd1cmF0aW9uLCB5b3UgYWxzbyBuZWVkIGEKKyAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvb2xjaGFpbiByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBmaWxlIG5lZWRzIHRvIHBhY2thZ2UgdXAgYW55IHByZS1idWlsdCBvYmplY3RzIGluCisgICAgICAgICAgICAgICAgdGhlIHRvb2xjaGFpbiBzdWNoIGFzIDxmaWxlbmFtZT5saWJnY2M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlic3RkY2MrKzwvZmlsZW5hbWU+LCBhbnkgbG9jYWxlcywgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhIGlkPSdob3ctZG9lcy10aGUteW9jdG8tcHJvamVjdC1vYnRhaW4tc291cmNlLWNvZGUtYW5kLXdpbGwtaXQtd29yay1iZWhpbmQtbXktZmlyZXdhbGwtb3ItcHJveHktc2VydmVyJz4KKyAgICAgICAgICAgICAgICBIb3cgZG9lcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBvYnRhaW4gc291cmNlIGNvZGUgYW5kCisgICAgICAgICAgICAgICAgd2lsbCBpdCB3b3JrIGJlaGluZCBteSBmaXJld2FsbCBvciBwcm94eSBzZXJ2ZXI/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgd2F5IHRoZSBidWlsZCBzeXN0ZW0gb2J0YWlucyBzb3VyY2UgY29kZSBpcyBoaWdobHkKKyAgICAgICAgICAgICAgICBjb25maWd1cmFibGUuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzZXR1cCB0aGUgYnVpbGQgc3lzdGVtIHRvIGdldCBzb3VyY2UgY29kZSBpbiBtb3N0CisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRzIGlmIEhUVFAgdHJhbnNwb3J0IGlzIGF2YWlsYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gdGhlIGJ1aWxkIHN5c3RlbSBzZWFyY2hlcyBmb3Igc291cmNlIGNvZGUsIGl0IGZpcnN0CisgICAgICAgICAgICAgICAgdHJpZXMgdGhlIGxvY2FsIGRvd25sb2FkIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBJZiB0aGF0IGxvY2F0aW9uIGZhaWxzLCBQb2t5IHRyaWVzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRU1JUlJPUlMnPjxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIHRoZSB1cHN0cmVhbSBzb3VyY2UsIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1JUlJPUlMnPjxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgaW4gdGhhdCBvcmRlci4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzc3VtaW5nIHlvdXIgZGlzdHJpYnV0aW9uIGlzICJwb2t5IiwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbSB1c2VzIHRoZSBZb2N0byBQcm9qZWN0IHNvdXJjZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gYnkgZGVmYXVsdCBmb3IgU0NNLWJhc2VkCisgICAgICAgICAgICAgICAgc291cmNlcywgdXBzdHJlYW1zIGZvciBub3JtYWwgdGFyYmFsbHMsIGFuZCB0aGVuIGZhbGxzIGJhY2sKKyAgICAgICAgICAgICAgICB0byBhIG51bWJlciBvZiBvdGhlciBtaXJyb3JzIGluY2x1ZGluZyB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIHNvdXJjZSBtaXJyb3IgaWYgdGhvc2UgZmFpbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHlvdSBjb3VsZCBhZGQgYSBzcGVjaWZpYyBzZXJ2ZXIgZm9yIHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0byBhdHRlbXB0IGJlZm9yZSBhbnkgb3RoZXJzIGJ5IGFkZGluZyBzb21ldGhpbmcKKyAgICAgICAgICAgICAgICBsaWtlIHRoZSBmb2xsb3dpbmcgdG8gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVNSVJST1JTX3ByZXBlbmQgPSAiXAorICAgICBnaXQ6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBmdHA6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBodHRwOi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgaHR0cHM6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlc2UgY2hhbmdlcyBjYXVzZSB0aGUgYnVpbGQgc3lzdGVtIHRvIGludGVyY2VwdCBHaXQsIEZUUCwKKyAgICAgICAgICAgICAgICBIVFRQLCBhbmQgSFRUUFMgcmVxdWVzdHMgYW5kIGRpcmVjdCB0aGVtIHRvIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5odHRwOi8vPC9maWxlbmFtZT4gc291cmNlcyBtaXJyb3IuCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPiBVUkxzIHRvIHBvaW50IHRvCisgICAgICAgICAgICAgICAgbG9jYWwgZGlyZWN0b3JpZXMgb3IgbmV0d29yayBzaGFyZXMgYXMgd2VsbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzaWRlIGZyb20gdGhlIHByZXZpb3VzIHRlY2huaXF1ZSwgdGhlc2Ugb3B0aW9ucyBhbHNvIGV4aXN0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfTk9fTkVUV09SSyA9ICIxIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIHN0YXRlbWVudCB0ZWxscyBCaXRCYWtlIHRvIGlzc3VlIGFuIGVycm9yIGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICB0cnlpbmcgdG8gYWNjZXNzIHRoZSBJbnRlcm5ldC4KKyAgICAgICAgICAgICAgICBUaGlzIHRlY2huaXF1ZSBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gZW5zdXJlIGNvZGUgYnVpbGRzCisgICAgICAgICAgICAgICAgb25seSBmcm9tIGxvY2FsIHNvdXJjZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFub3RoZXIgdGVjaG5pcXVlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRkVUQ0hfUFJFTUlSUk9ST05MWSA9ICIxIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIHN0YXRlbWVudCBsaW1pdHMgdGhlIGJ1aWxkIHN5c3RlbSB0byBwdWxsaW5nIHNvdXJjZQorICAgICAgICAgICAgICAgIGZyb20gdGhlIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gb25seS4KKyAgICAgICAgICAgICAgICBBZ2FpbiwgdGhpcyB0ZWNobmlxdWUgaXMgdXNlZnVsIGZvciByZXByb2R1Y2luZyBidWlsZHMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFub3RoZXIgdGVjaG5pcXVlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTID0gIjEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgc3RhdGVtZW50IHRlbGxzIHRoZSBidWlsZCBzeXN0ZW0gdG8gZ2VuZXJhdGUgbWlycm9yCisgICAgICAgICAgICAgICAgdGFyYmFsbHMuCisgICAgICAgICAgICAgICAgVGhpcyB0ZWNobmlxdWUgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG1pcnJvciBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgSWYgbm90LCBob3dldmVyLCB0aGUgdGVjaG5pcXVlIGNhbiBzaW1wbHkgd2FzdGUgdGltZSBkdXJpbmcKKyAgICAgICAgICAgICAgICB0aGUgYnVpbGQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGaW5hbGx5LCBjb25zaWRlciBhbiBleGFtcGxlIHdoZXJlIHlvdSBhcmUgYmVoaW5kIGFuCisgICAgICAgICAgICAgICAgSFRUUC1vbmx5IGZpcmV3YWxsLgorICAgICAgICAgICAgICAgIFlvdSBjb3VsZCBtYWtlIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyB0byB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSBhcyBsb25nIGFzCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gc2VydmVyIGlzIGN1cnJlbnQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVNSVJST1JTX3ByZXBlbmQgPSAiXAorICAgICBmdHA6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBodHRwOi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgaHR0cHM6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4iCisgICAgIEJCX0ZFVENIX1BSRU1JUlJPUk9OTFkgPSAiMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlc2UgY2hhbmdlcyB3b3VsZCBjYXVzZSB0aGUgYnVpbGQgc3lzdGVtIHRvIHN1Y2Nlc3NmdWxseQorICAgICAgICAgICAgICAgIGZldGNoIHNvdXJjZSBvdmVyIEhUVFAgYW5kIGFueSBuZXR3b3JrIGFjY2Vzc2VzIHRvIGFueXRoaW5nCisgICAgICAgICAgICAgICAgb3RoZXIgdGhhbiB0aGUgPGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPiB3b3VsZCBmYWlsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBhbHNvIGhvbm9ycyB0aGUgc3RhbmRhcmQgc2hlbGwgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgPGZpbGVuYW1lPmh0dHBfcHJveHk8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZnRwX3Byb3h5PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmh0dHBzX3Byb3h5PC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hbGxfcHJveHk8L2ZpbGVuYW1lPiB0byByZWRpcmVjdCByZXF1ZXN0cyB0aHJvdWdoCisgICAgICAgICAgICAgICAgcHJveHkgc2VydmVycy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUKKyAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9Xb3JraW5nX0JlaGluZF9hX05ldHdvcmtfUHJveHknPldvcmtpbmcgQmVoaW5kIGEgTmV0d29yayBQcm94eTwvdWxpbms+IgorICAgICAgICAgICAgICAgICBXaWtpIHBhZ2UuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDYW4gSSBnZXQgcmlkIG9mIGJ1aWxkIG91dHB1dCBzbyBJIGNhbiBzdGFydCBvdmVyPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWWVzIC0geW91IGNhbiBlYXNpbHkgZG8gdGhpcy4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSB1c2UgQml0QmFrZSB0byBidWlsZCBhbiBpbWFnZSwgYWxsIHRoZSBidWlsZCBvdXRwdXQKKyAgICAgICAgICAgICAgICBnb2VzIGludG8gdGhlIGRpcmVjdG9yeSBjcmVhdGVkIHdoZW4geW91IHJ1biB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgKGkuZS4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgaXMgbmFtZWQgPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT4gYnV0IGNhbiBiZSBuYW1lZAorICAgICAgICAgICAgICAgIGFueXRoaW5nIHlvdSB3YW50LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaXRoaW4gdGhlIEJ1aWxkIERpcmVjdG9yeSwgaXMgdGhlIDxmaWxlbmFtZT50bXA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUbyByZW1vdmUgYWxsIHRoZSBidWlsZCBvdXRwdXQgeWV0IHByZXNlcnZlIGFueSBzb3VyY2UgY29kZSBvcgorICAgICAgICAgICAgICAgIGRvd25sb2FkZWQgZmlsZXMgZnJvbSBwcmV2aW91cyBidWlsZHMsIHNpbXBseSByZW1vdmUgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoeSBkbyA8ZmlsZW5hbWU+JHtiaW5kaXJ9PC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT4ke2xpYmRpcn08L2ZpbGVuYW1lPiBoYXZlIHN0cmFuZ2UgdmFsdWVzIGZvciA8ZmlsZW5hbWU+LW5hdGl2ZTwvZmlsZW5hbWU+IHJlY2lwZXM/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBFeGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzIG1pZ2h0IG5lZWQgdG8gYmUgdXNlZCBmcm9tIGEKKyAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgb3RoZXIgdGhhbiB0aGUgZGlyZWN0b3J5IGludG8gd2hpY2ggdGhleSB3ZXJlCisgICAgICAgICAgICAgICAgaW5pdGlhbGx5IGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICBDb21wbGljYXRpbmcgdGhpcyBzaXR1YXRpb24gaXMgdGhlIGZhY3QgdGhhdCBzb21ldGltZXMgdGhlc2UKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzIGFyZSBjb21waWxlZCB3aXRoIHRoZSBleHBlY3RhdGlvbgorICAgICAgICAgICAgICAgIG9mIGJlaW5nIHJ1biBmcm9tIHRoYXQgaW5pdGlhbCBpbnN0YWxsYXRpb24gdGFyZ2V0IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBtb3ZpbmcgdGhlbSBjYXVzZXMgcHJvYmxlbXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2NlbmFyaW8gaXMgYSBmdW5kYW1lbnRhbCBwcm9ibGVtIGZvciBwYWNrYWdlIG1haW50YWluZXJzCisgICAgICAgICAgICAgICAgb2YgbWFpbnN0cmVhbSBMaW51eCBkaXN0cmlidXRpb25zIGFzIHdlbGwgYXMgZm9yIHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgQXMgc3VjaCwgYSB3ZWxsLWVzdGFibGlzaGVkIHNvbHV0aW9uIGV4aXN0cy4KKyAgICAgICAgICAgICAgICBNYWtlZmlsZXMsIEF1dG90b29scyBjb25maWd1cmF0aW9uIHNjcmlwdHMsIGFuZCBvdGhlciBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbXMgYXJlIGV4cGVjdGVkIHRvIHJlc3BlY3QgZW52aXJvbm1lbnQgdmFyaWFibGVzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmluZGlyPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5saWJkaXI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPnN5c2NvbmZkaXI8L2ZpbGVuYW1lPiB0aGF0IGluZGljYXRlIHdoZXJlCisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZXMsIGxpYnJhcmllcywgYW5kIGRhdGEgcmVzaWRlIHdoZW4gYSBwcm9ncmFtIGlzCisgICAgICAgICAgICAgICAgYWN0dWFsbHkgcnVuLgorICAgICAgICAgICAgICAgIFRoZXkgYXJlIGFsc28gZXhwZWN0ZWQgdG8gcmVzcGVjdCBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFU1RESVI8L2ZpbGVuYW1lPiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICBwcmVwZW5kZWQgdG8gYWxsIHRoZSBvdGhlciB2YXJpYWJsZXMgd2hlbiB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgYWN0dWFsbHkgaW5zdGFsbHMgdGhlIGZpbGVzLgorICAgICAgICAgICAgICAgIEl0IGlzIHVuZGVyc3Rvb2QgdGhhdCB0aGUgcHJvZ3JhbSBkb2VzIG5vdCBhY3R1YWxseSBydW4gZnJvbQorICAgICAgICAgICAgICAgIHdpdGhpbiA8ZmlsZW5hbWU+REVTVERJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgYSByZWNpcGUgdG8gYnVpbGQgYQorICAgICAgICAgICAgICAgIHRhcmdldC1hcmNoaXRlY3R1cmUgcHJvZ3JhbSAoaS5lLiBvbmUgdGhhdCBpcyBpbnRlbmRlZCBmb3IKKyAgICAgICAgICAgICAgICBpbmNsdXNpb24gb24gdGhlIGltYWdlIGJlaW5nIGJ1aWx0KSwgdGhhdCBwcm9ncmFtIGV2ZW50dWFsbHkKKyAgICAgICAgICAgICAgICBydW5zIGZyb20gdGhlIHJvb3QgZmlsZSBzeXN0ZW0gb2YgdGhhdCBpbWFnZS4KKyAgICAgICAgICAgICAgICBUaHVzLCB0aGUgYnVpbGQgc3lzdGVtIHByb3ZpZGVzIGEgdmFsdWUgb2YgIi91c3IvYmluIiBmb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmluZGlyPC9maWxlbmFtZT4sIGEgdmFsdWUgb2YgIi91c3IvbGliIiBmb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliZGlyPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTWVhbndoaWxlLCA8ZmlsZW5hbWU+REVTVERJUjwvZmlsZW5hbWU+IGlzIGEgcGF0aCB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB3aGVuIHRoZSByZWNpcGUgYnVpbGRzIGEgbmF0aXZlIHByb2dyYW0gKGkuZS4gb25lCisgICAgICAgICAgICAgICAgdGhhdCBpcyBpbnRlbmRlZCB0byBydW4gb24gdGhlIGJ1aWxkIG1hY2hpbmUpLCB0aGF0IHByb2dyYW0KKyAgICAgICAgICAgICAgICBpcyBuZXZlciBpbnN0YWxsZWQgZGlyZWN0bHkgdG8gdGhlIGJ1aWxkIG1hY2hpbmUncyByb290CisgICAgICAgICAgICAgICAgZmlsZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGUgYnVpbGQgc3lzdGVtIHVzZXMgcGF0aHMgd2l0aGluIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgIERpcmVjdG9yeSBmb3IgPGZpbGVuYW1lPkRFU1RESVI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmluZGlyPC9maWxlbmFtZT4gYW5kIHJlbGF0ZWQgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIFRvIGJldHRlciB1bmRlcnN0YW5kIHRoaXMsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgdHdvIHBhdGhzCisgICAgICAgICAgICAgICAgd2hlcmUgdGhlIGZpcnN0IGlzIHJlbGF0aXZlbHkgbm9ybWFsIGFuZCB0aGUgc2Vjb25kIGlzIG5vdDoKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRHVlIHRvIHRoZXNlIGxlbmd0aHkgZXhhbXBsZXMsIHRoZSBwYXRocyBhcmUgYXJ0aWZpY2lhbGx5CisgICAgICAgICAgICAgICAgICAgIGJyb2tlbiBhY3Jvc3MgbGluZXMgZm9yIHJlYWRhYmlsaXR5LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIC9ob21lL21heHRvdGhlbWF4L3Bva3ktYm9vdGNoYXJ0Mi9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvemxpYi8KKyAgICAgICAgMS4yLjgtcjAvc3lzcm9vdC1kZXN0ZGlyL3Vzci9iaW4KKworICAgICAvaG9tZS9tYXh0b3RoZW1heC9wb2t5LWJvb3RjaGFydDIvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4LworICAgICAgICB6bGliLW5hdGl2ZS8xLjIuOC1yMC9zeXNyb290LWRlc3RkaXIvaG9tZS9tYXh0b3RoZW1heC9wb2t5LWJvb3RjaGFydDIvCisgICAgICAgIGJ1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2JpbgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBFdmVuIGlmIHRoZSBwYXRocyBsb29rIHVudXN1YWwsIHRoZXkgYm90aCBhcmUgY29ycmVjdCAtCisgICAgICAgICAgICAgICAgdGhlIGZpcnN0IGZvciBhIHRhcmdldCBhbmQgdGhlIHNlY29uZCBmb3IgYSBuYXRpdmUgcmVjaXBlLgorICAgICAgICAgICAgICAgIFRoZXNlIHBhdGhzIGFyZSBhIGNvbnNlcXVlbmNlIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVNURElSPC9maWxlbmFtZT4gbWVjaGFuaXNtIGFuZCB3aGlsZSB0aGV5CisgICAgICAgICAgICAgICAgYXBwZWFyIHN0cmFuZ2UsIHRoZXkgYXJlIGNvcnJlY3QgYW5kIGluIHByYWN0aWNlIHZlcnkgZWZmZWN0aXZlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZpbGVzIHByb3ZpZGVkIGJ5IG15IDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4gcmVjaXBlIGRvCisgICAgICAgICAgICAgICAgbm90IGFwcGVhciB0byBiZSBhdmFpbGFibGUgdG8gb3RoZXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICBGaWxlcyBhcmUgbWlzc2luZyBmcm9tIHRoZSBuYXRpdmUgc3lzcm9vdCwgbXkgcmVjaXBlIGlzCisgICAgICAgICAgICAgICAgaW5zdGFsbGluZyB0byB0aGUgd3JvbmcgcGxhY2UsIG9yIEkgYW0gZ2V0dGluZyBwZXJtaXNzaW9ucworICAgICAgICAgICAgICAgIGVycm9ycyBkdXJpbmcgdGhlIGRvX2luc3RhbGwgdGFzayBpbiBteSByZWNpcGUhIFdoYXQgaXMgd3Jvbmc/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNpdHVhdGlvbiByZXN1bHRzIHdoZW4gYSBidWlsZCBzeXN0ZW0gZG9lcworICAgICAgICAgICAgICAgIG5vdCByZWNvZ25pemUgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBzdXBwbGllZCB0byBpdCBieQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFRoZSBpbmNpZGVudCB0aGF0IHByb21wdGVkIHRoaXMgRkFRIGVudHJ5IGludm9sdmVkIGEgTWFrZWZpbGUKKyAgICAgICAgICAgICAgICB0aGF0IHVzZWQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QklORElSPC9maWxlbmFtZT4gaW5zdGVhZCBvZiB0aGUgbW9yZSBzdGFuZGFyZAorICAgICAgICAgICAgICAgIHZhcmlhYmxlIDxmaWxlbmFtZT5iaW5kaXI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgbWFrZWZpbGUncyBoYXJkY29kZWQgZGVmYXVsdCB2YWx1ZSBvZiAiL3Vzci9iaW4iIHdvcmtlZAorICAgICAgICAgICAgICAgIG1vc3Qgb2YgdGhlIHRpbWUsIGJ1dCBub3QgZm9yIHRoZSByZWNpcGUncworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4gdmFyaWFudC4KKyAgICAgICAgICAgICAgICBGb3IgYW5vdGhlciBleGFtcGxlLCBwZXJtaXNzaW9ucyBlcnJvcnMgbWlnaHQgYmUgY2F1c2VkCisgICAgICAgICAgICAgICAgYnkgYSBNYWtlZmlsZSB0aGF0IGlnbm9yZXMgPGZpbGVuYW1lPkRFU1RESVI8L2ZpbGVuYW1lPiBvciB1c2VzCisgICAgICAgICAgICAgICAgYSBkaWZmZXJlbnQgbmFtZSBmb3IgdGhhdCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBDaGVjayB0aGUgdGhlIGJ1aWxkIHN5c3RlbSB0byBzZWUgaWYgdGhlc2Uga2luZHMgb2YKKyAgICAgICAgICAgICAgICBpc3N1ZXMgZXhpc3QuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworPC9xYW5kYXNldD4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9hbmFseXNpcy1mb3ItcGFja2FnZS1zcGxpdHRpbmcucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9hbmFseXNpcy1mb3ItcGFja2FnZS1zcGxpdHRpbmcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZjI3OTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2FuYWx5c2lzLWZvci1wYWNrYWdlLXNwbGl0dGluZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9idWlsZGhpc3Rvcnktd2ViLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LXdlYi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkYjg2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LXdlYi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9idWlsZGhpc3RvcnkucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9idWlsZGhpc3RvcnkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNWY4YTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2J1aWxkaGlzdG9yeS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2J1aWxkaW5nLWFuLWltYWdlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZmJlYTVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2NvbmZpZ3VyYXRpb24tY29tcGlsZS1hdXRvcmVjb25mLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDc0NjRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9jcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW5zLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2NjcwYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDIyNzE4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvaW1hZ2UtZ2VuZXJhdGlvbi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2ltYWdlLWdlbmVyYXRpb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiOTYyNTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2ltYWdlLWdlbmVyYXRpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvaW1hZ2VzLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvaW1hZ2VzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTllYWMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9pbWFnZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvbGF5ZXItaW5wdXQucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9sYXllci1pbnB1dC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE0ZjJlNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvbGF5ZXItaW5wdXQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvcGFja2FnZS1mZWVkcy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3BhY2thZ2UtZmVlZHMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YzljMzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3BhY2thZ2UtZmVlZHMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvcGF0Y2hpbmcucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9wYXRjaGluZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVjZDAxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvcGF0Y2hpbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvcG9reS10aXRsZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3Bva3ktdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4OTNkODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3Bva3ktdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc2RrLWdlbmVyYXRpb24ucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9zZGstZ2VuZXJhdGlvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM3ZTI3NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc2RrLWdlbmVyYXRpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc2RrLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc2RrLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTM5Y2M1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9zZGsucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLWZldGNoaW5nLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLWZldGNoaW5nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmFlZmI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9zb3VyY2UtZmV0Y2hpbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLWlucHV0LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLWlucHV0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzUxNTA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9zb3VyY2UtaW5wdXQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvdXNlci1jb25maWd1cmF0aW9uLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvdXNlci1jb25maWd1cmF0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmIzZjhlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy91c2VyLWNvbmZpZ3VyYXRpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQtcmVmLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQtcmVmLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTBjNmM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC1yZWYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ludHJvZHVjdGlvbi54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9pbnRyb2R1Y3Rpb24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNTBlMjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9pbnRyb2R1Y3Rpb24ueG1sCkBAIC0wLDAgKzEsNTkxIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ncmVmLW1hbnVhbC1pbnRybyc+Cis8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworPHNlY3Rpb24gaWQ9J2ludHJvLXdlbGNvbWUnPgorICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgbWFudWFsIHByb3ZpZGVzIHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgcmVsZWFzZSBvZiB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaXMgYW4gb3Blbi1zb3VyY2UgY29sbGFib3JhdGlvbiBwcm9qZWN0IGZvY3VzZWQgb24gZW1iZWRkZWQgTGludXgKKyAgICAgICAgZGV2ZWxvcGVycy4KKyAgICAgICAgQW1vbmdzdCBvdGhlciB0aGluZ3MsIHRoZSBZb2N0byBQcm9qZWN0IHVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0sIHdoaWNoCisgICAgICAgIGlzIGJhc2VkIG9uIHRoZSBQb2t5IHByb2plY3QsIHRvIGNvbnN0cnVjdCBjb21wbGV0ZSBMaW51eCBpbWFnZXMuCisgICAgICAgIFlvdSBjYW4gZmluZCBjb21wbGV0ZSBpbnRyb2R1Y3RvcnkgYW5kIGdldHRpbmcgc3RhcnRlZCBpbmZvcm1hdGlvbiBvbiB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICBieSByZWFkaW5nIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7Jz5Zb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0PC91bGluaz4uCisgICAgICAgIEZvciB0YXNrLWJhc2VkIGluZm9ybWF0aW9uIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0LCBzZWUgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbDwvdWxpbms+CisgICAgICAgIGFuZCB0aGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgRm9yIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBzdHJ1Y3R1cmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsnPllvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCisgICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBvbiB0cmFjaW5nIGFuZCBwcm9maWxpbmcgaW4gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyc+WW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsPC91bGluaz4uCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBCaXRCYWtlLCB3aGljaCBpcyB0aGUgdGFzayBleGVjdXRpb24gdG9vbCB0aGUKKyAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyBiYXNlZCBvbiwgc2VlIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2JpdGJha2UtdXNlci1tYW51YWwnPkJpdEJha2UgVXNlciBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgRmluYWxseSwgeW91IGNhbiBhbHNvIGZpbmQgbG90cyBvZiBZb2N0byBQcm9qZWN0IGluZm9ybWF0aW9uIG9uIHRoZQorICAgICAgICA8dWxpbmsgdXJsPSImWU9DVE9fSE9NRV9VUkw7Ij5Zb2N0byBQcm9qZWN0IHdlYnNpdGU8L3VsaW5rPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdpbnRyby1tYW51YWxvdmVydmlldyc+CisgICAgPHRpdGxlPkRvY3VtZW50YXRpb24gT3ZlcnZpZXc8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgICBUaGlzIHJlZmVyZW5jZSBtYW51YWwgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndXNpbmdwb2t5Jz5Vc2luZyB0aGUgWW9jdG8gUHJvamVjdDwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBQcm92aWRlcyBhbiBvdmVydmlldyBvZiB0aGUgY29tcG9uZW50cyB0aGF0IG1ha2UgdXAgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICBmb2xsb3dlZCBieSBpbmZvcm1hdGlvbiBhYm91dCBkZWJ1Z2dpbmcgaW1hZ2VzIGNyZWF0ZWQgaW4gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2Nsb3Nlci1sb29rJz5BIENsb3NlciBMb29rIGF0IHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50PC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFByb3ZpZGVzIGEgbW9yZSBkZXRhaWxlZCBsb29rIGF0IHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGRldmVsb3BtZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd0ZWNobmljYWwtZGV0YWlscyc+VGVjaG5pY2FsIERldGFpbHM8L2xpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgRGVzY3JpYmVzIGZ1bmRhbWVudGFsIFlvY3RvIFByb2plY3QgY29tcG9uZW50cyBhcyB3ZWxsIGFzIGFuIGV4cGxhbmF0aW9uCisgICAgICAgICAgICAgICAgYmVoaW5kIGhvdyB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIHNoYXJlZCBzdGF0ZSAoc3N0YXRlKSBjYWNoZSB0byBzcGVlZCBidWlsZCB0aW1lLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdtaWdyYXRpb24nPk1pZ3JhdGluZyB0byBhIE5ld2VyIFlvY3RvIFByb2plY3QgUmVsZWFzZTwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBEZXNjcmliZXMgcmVsZWFzZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0aGF0IGhlbHBzIHlvdSBtb3ZlIGZyb20KKyAgICAgICAgICAgICAgICBvbmUgWW9jdG8gUHJvamVjdCBSZWxlYXNlIHRvIGFub3RoZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1zdHJ1Y3R1cmUnPkRpcmVjdG9yeSBTdHJ1Y3R1cmU8L2xpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgRGVzY3JpYmVzIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPiBjcmVhdGVkCisgICAgICAgICAgICAgICAgZWl0aGVyIGJ5IHVucGFja2luZyBhIHJlbGVhc2VkIFlvY3RvIFByb2plY3QgdGFyYmFsbCBvbiB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtLAorICAgICAgICAgICAgICAgIG9yIGJ5IGNsb25pbmcgdGhlIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcG9reSc+UG9reTwvdWxpbms+IEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcyc+Q2xhc3NlczwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBEZXNjcmliZXMgdGhlIGNsYXNzZXMgdXNlZCBpbiB0aGUgWW9jdG8gUHJvamVjdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzJz5UYXNrczwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBEZXNjcmliZXMgdGhlIHRhc2tzIGRlZmluZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1xYS1jaGVja3MnPlFBIEVycm9yIGFuZCBXYXJuaW5nIE1lc3NhZ2VzPC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIExpc3RzIGFuZCBkZXNjcmliZXMgUUEgd2FybmluZyBhbmQgZXJyb3IgbWVzc2FnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1pbWFnZXMnPkltYWdlczwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBEZXNjcmliZXMgdGhlIHN0YW5kYXJkIGltYWdlcyB0aGF0IHRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtZmVhdHVyZXMnPkZlYXR1cmVzPC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIERlc2NyaWJlcyBtZWNoYW5pc21zIGZvciBjcmVhdGluZyBkaXN0cmlidXRpb24sIG1hY2hpbmUsIGFuZCBpbWFnZQorICAgICAgICAgICAgICAgIGZlYXR1cmVzIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VzcyB1c2luZyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXZhcmlhYmxlcy1nbG9zJz5WYXJpYWJsZXMgR2xvc3Nhcnk8L2xpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUHJlc2VudHMgbW9zdCB2YXJpYWJsZXMgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwgd2hpY2gKKyAgICAgICAgICAgICAgICB1c2VzIEJpdEJha2UuCisgICAgICAgICAgICAgICAgRW50cmllcyBkZXNjcmliZSB0aGUgZnVuY3Rpb24gb2YgdGhlIHZhcmlhYmxlIGFuZCBob3cgdG8gYXBwbHkgdGhlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXZhcmxvY2FsaXR5Jz5WYXJpYWJsZSBDb250ZXh0PC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFByb3ZpZGVzIHZhcmlhYmxlIGxvY2FsaXR5IG9yIGNvbnRleHQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2ZhcSc+RkFRPC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFByb3ZpZGVzIGFuc3dlcnMgZm9yIGNvbW1vbmx5IGFza2VkIHF1ZXN0aW9ucyBpbiB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IGVudmlyb25tZW50LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZXNvdXJjZXMnPkNvbnRyaWJ1dGluZyB0byB0aGUgWW9jdG8gUHJvamVjdDwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBQcm92aWRlcyBndWlkYW5jZSBvbiBob3cgeW91IGNhbiBjb250cmlidXRlIGJhY2sgdG8gdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgUHJvamVjdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCisKKzxzZWN0aW9uIGlkPSdpbnRyby1yZXF1aXJlbWVudHMnPgorPHRpdGxlPlN5c3RlbSBSZXF1aXJlbWVudHM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgICBGb3IgZ2VuZXJhbCBZb2N0byBQcm9qZWN0IHN5c3RlbSByZXF1aXJlbWVudHMsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjeXAtcmVzb3VyY2VzJz5TZXR0aW5nIFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0LgorICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBwcm92aWRlcyBkZXRhaWxzIG9uIHN5c3RlbSByZXF1aXJlbWVudHMKKyAgICAgICAgbm90IGNvdmVyZWQgaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J2RldGFpbGVkLXN1cHBvcnRlZC1kaXN0cm9zJz4KKyAgICAgICAgPHRpdGxlPlN1cHBvcnRlZCBMaW51eCBEaXN0cmlidXRpb25zPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEN1cnJlbnRseSwgdGhlIFlvY3RvIFByb2plY3QgaXMgc3VwcG9ydGVkIG9uIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgIGRpc3RyaWJ1dGlvbnM6CisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlcyBhcmUgdGVzdGVkIGFnYWluc3QgdGhlIHN0YWJsZSBMaW51eAorICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25zIGluIHRoZSBmb2xsb3dpbmcgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3Qgc2hvdWxkIHdvcmsgb24gb3RoZXIgZGlzdHJpYnV0aW9ucyBidXQKKyAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbiBpcyBub3QgcGVyZm9ybWVkIGFnYWluc3QgdGhlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgdGhlIFlvY3RvIFByb2plY3QgZG9lcyBub3Qgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICBhbmQgY3VycmVudGx5IGhhcyBubyBwbGFucyB0byBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIHJvbGxpbmctcmVsZWFzZXMgb3IgZGV2ZWxvcG1lbnQgZGlzdHJpYnV0aW9ucyBkdWUgdG8gdGhlaXIKKyAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRseSBjaGFuZ2luZyBuYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIFdlIHdlbGNvbWUgcGF0Y2hlcyBhbmQgYnVnIHJlcG9ydHMsIGJ1dCBrZWVwIGluIG1pbmQgdGhhdAorICAgICAgICAgICAgICAgICAgICBvdXIgcHJpb3JpdHkgaXMgb24gdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXMgbGlzdGVkIGJlbG93LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZW5jb3VudGVyIHByb2JsZW1zLCBwbGVhc2UgZ28gdG8KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0JVR1pJTExBX1VSTDsnPllvY3RvIFByb2plY3QgQnVnemlsbGE8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgc3VibWl0IGEgYnVnLgorICAgICAgICAgICAgICAgICAgICBXZSBhcmUgaW50ZXJlc3RlZCBpbiBoZWFyaW5nIGFib3V0IHlvdXIgZXhwZXJpZW5jZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorPCEtLQorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5VYnVudHUgMTAuMDQ8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VWJ1bnR1IDExLjEwPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVidW50dSAxMi4wNCAoTFRTKTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5VYnVudHUgMTMuMTA8L3BhcmE+PC9saXN0aXRlbT4gLS0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVidW50dSAxNC4wNCAoTFRTKTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5VYnVudHUgMTQuMTA8L3BhcmE+PC9saXN0aXRlbT4KKzwhLS0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZlZG9yYSAxNiAoVmVybmUpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZlZG9yYSAxNyAoU3BoZXJpY2FsKTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5GZWRvcmEgcmVsZWFzZSAxOSAoU2NocsO2ZGluZ2VyJ3MgQ2F0KTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5GZWRvcmEgcmVsZWFzZSAyMCAoSGVpc2VuYnVnKTwvcGFyYT48L2xpc3RpdGVtPiAtLT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RmVkb3JhIHJlbGVhc2UgMjE8L3BhcmE+PC9saXN0aXRlbT4KKzwhLS0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNlbnRPUyByZWxlYXNlIDUuNiAoRmluYWwpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNlbnRPUyByZWxlYXNlIDUuNyAoRmluYWwpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNlbnRPUyByZWxlYXNlIDUuOCAoRmluYWwpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNlbnRPUyByZWxlYXNlIDYuMyAoRmluYWwpPC9wYXJhPjwvbGlzdGl0ZW0+IC0tPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DZW50T1MgcmVsZWFzZSA2Lng8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2VudE9TIHJlbGVhc2UgNy54PC9wYXJhPjwvbGlzdGl0ZW0+Cis8IS0tICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZWJpYW4gR05VL0xpbnV4IDYuMCAoU3F1ZWV6ZSk8L3BhcmE+PC9saXN0aXRlbT4gLS0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNy54IChXaGVlenkpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggOC54IChKZXNzaWUpPC9wYXJhPjwvbGlzdGl0ZW0+Cis8IS0tICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZWJpYW4gR05VL0xpbnV4IDcuMSAoV2hlZXp5KTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZWJpYW4gR05VL0xpbnV4IDcuMiAoV2hlZXp5KTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZWJpYW4gR05VL0xpbnV4IDcuMyAoV2hlZXp5KTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZWJpYW4gR05VL0xpbnV4IDcuNCAoV2hlZXp5KTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZWJpYW4gR05VL0xpbnV4IDcuNSAoV2hlZXp5KTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZWJpYW4gR05VL0xpbnV4IDcuNiAoV2hlZXp5KTwvcGFyYT48L2xpc3RpdGVtPiAtLT4KKzwhLS0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPm9wZW5TVVNFIDExLjQ8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+b3BlblNVU0UgMTIuMTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5vcGVuU1VTRSAxMi4yPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPm9wZW5TVVNFIDEyLjM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+b3BlblNVU0UgMTMuMTwvcGFyYT48L2xpc3RpdGVtPiAtLT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+b3BlblNVU0UgMTMuMjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFdoaWxlIHRoZSBZb2N0byBQcm9qZWN0IFRlYW0gYXR0ZW1wdHMgdG8gZW5zdXJlIGFsbCBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICByZWxlYXNlcyBhcmUgb25lIGh1bmRyZWQgcGVyY2VudCBjb21wYXRpYmxlIHdpdGggZWFjaCBvZmZpY2lhbGx5CisgICAgICAgICAgICBzdXBwb3J0ZWQgTGludXggZGlzdHJpYnV0aW9uLCBpbnN0YW5jZXMgbWlnaHQgZXhpc3Qgd2hlcmUgeW91CisgICAgICAgICAgICBlbmNvdW50ZXIgYSBwcm9ibGVtIHdoaWxlIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0IG9uIGEgc3BlY2lmaWMKKyAgICAgICAgICAgIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgQ2VudE9TIDYuNCBkaXN0cmlidXRpb24gZG9lcyBub3QgaW5jbHVkZSB0aGUKKyAgICAgICAgICAgIEd0aysgMi4yMC4wIGFuZCBQeUd0ayAyLjIxLjAgKG9yIGhpZ2hlcikgcGFja2FnZXMsIHdoaWNoIGFyZQorICAgICAgICAgICAgcmVxdWlyZWQgdG8gcnVuCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9ob2InPkhvYjwvdWxpbms+LgorICAgICAgICA8L25vdGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlcXVpcmVkLXBhY2thZ2VzLWZvci10aGUtaG9zdC1kZXZlbG9wbWVudC1zeXN0ZW0nPgorICAgIDx0aXRsZT5SZXF1aXJlZCBQYWNrYWdlcyBmb3IgdGhlIEhvc3QgRGV2ZWxvcG1lbnQgU3lzdGVtPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBsaXN0IG9mIHBhY2thZ2VzIHlvdSBuZWVkIG9uIHRoZSBob3N0IGRldmVsb3BtZW50IHN5c3RlbSBjYW4KKyAgICAgICAgICAgIGJlIGxhcmdlIHdoZW4gY292ZXJpbmcgYWxsIGJ1aWxkIHNjZW5hcmlvcyB1c2luZyB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyByZXF1aXJlZCBwYWNrYWdlcyBhY2NvcmRpbmcgdG8KKyAgICAgICAgICAgIExpbnV4IGRpc3RyaWJ1dGlvbiBhbmQgZnVuY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndWJ1bnR1LXBhY2thZ2VzJz4KKyAgICAgICAgICAgIDx0aXRsZT5VYnVudHUgYW5kIERlYmlhbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBzaG93cyB0aGUgcmVxdWlyZWQgcGFja2FnZXMgYnkgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICBnaXZlbiBhIHN1cHBvcnRlZCBVYnVudHUgb3IgRGViaWFuIExpbnV4IGRpc3RyaWJ1dGlvbjoKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBidWlsZCBzeXN0ZW0gaGFzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3NzNC1kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlIGluc3RhbGxlZCwgeW91CisgICAgICAgICAgICAgICAgICAgIG1pZ2h0IGV4cGVyaWVuY2UgUUVNVSBidWlsZCBmYWlsdXJlcyBkdWUgdG8gdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGluZyBpdHMgb3duIGN1c3RvbQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9pbmNsdWRlL2xpbnV4L3NvdW5kY2FyZC5oPC9maWxlbmFtZT4gb24KKyAgICAgICAgICAgICAgICAgICAgdGhlIERlYmlhbiBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBydW4gaW50byB0aGlzIHNpdHVhdGlvbiwgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgc29sdXRpb25zIGV4aXN0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyBhcHQtZ2V0IGJ1aWxkLWRlcCBxZW11CisgICAgICQgc3VkbyBhcHQtZ2V0IHJlbW92ZSBvc3M0LWRldgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVzc2VudGlhbHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIG5lZWRlZCB0byBidWlsZCBhbiBpbWFnZSBvbiBhIGhlYWRsZXNzCisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW06CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyBhcHQtZ2V0IGluc3RhbGwgJlVCVU5UVV9IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HcmFwaGljYWwgYW5kIEVjbGlwc2UgUGx1Zy1JbiBFeHRyYXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIHJlY29tbWVuZGVkIGlmIHRoZSBob3N0IHN5c3RlbSBoYXMgZ3JhcGhpY3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgb3IgaWYgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlIEVjbGlwc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIElERToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCBsaWJzZGwxLjItZGV2IHh0ZXJtCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RG9jdW1lbnRhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIGlmIHlvdSBhcmUgZ29pbmcgdG8gYnVpbGQgb3V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIG1hbnVhbHM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyBhcHQtZ2V0IGluc3RhbGwgbWFrZSB4c2x0cHJvYyBkb2Nib29rLXV0aWxzIGZvcCBkYmxhdGV4IHhtbHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QURUIEluc3RhbGxlciBFeHRyYXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIG5lZWRlZCBpZiB5b3UgYXJlIGdvaW5nIHRvIGJlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdXNpbmctdGhlLWFkdC1pbnN0YWxsZXInPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFRvb2xraXQgKEFEVCkgSW5zdGFsbGVyPC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyBhcHQtZ2V0IGluc3RhbGwgYXV0b2NvbmYgYXV0b21ha2UgbGlidG9vbCBsaWJnbGliMi4wLWRldgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2ZlZG9yYS1wYWNrYWdlcyc+CisgICAgICAgICAgICA8dGl0bGU+RmVkb3JhIFBhY2thZ2VzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHNob3dzIHRoZSByZXF1aXJlZCBwYWNrYWdlcyBieSBmdW5jdGlvbgorICAgICAgICAgICAgICAgIGdpdmVuIGEgc3VwcG9ydGVkIEZlZG9yYSBMaW51eCBkaXN0cmlidXRpb246CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Fc3NlbnRpYWxzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgdG8gYnVpbGQgYW4gaW1hZ2UgZm9yIGEgaGVhZGxlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHl1bSBpbnN0YWxsICZGRURPUkFfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUw7CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R3JhcGhpY2FsIGFuZCBFY2xpcHNlIFBsdWctSW4gRXh0cmFzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyByZWNvbW1lbmRlZCBpZiB0aGUgaG9zdCBzeXN0ZW0gaGFzIGdyYXBoaWNzCisgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IG9yIGlmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgICAgICBJREU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyB5dW0gaW5zdGFsbCBTREwtZGV2ZWwgeHRlcm0gcGVybC1UaHJlYWQtUXVldWUKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Eb2N1bWVudGF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgaWYgeW91IGFyZSBnb2luZyB0byBidWlsZCBvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gbWFudWFsczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHl1bSBpbnN0YWxsIG1ha2UgZG9jYm9vay1zdHlsZS1kc3NzbCBkb2Nib29rLXN0eWxlLXhzbCBcCisgICAgIGRvY2Jvb2stZHRkcyBkb2Nib29rLXV0aWxzIGZvcCBsaWJ4c2x0IGRibGF0ZXggeG1sdG8geHNsdHByb2MKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BRFQgSW5zdGFsbGVyIEV4dHJhczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIGlmIHlvdSBhcmUgZ29pbmcgdG8gYmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2luZy10aGUtYWR0LWluc3RhbGxlcic+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKSBJbnN0YWxsZXI8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHl1bSBpbnN0YWxsIGF1dG9jb25mIGF1dG9tYWtlIGxpYnRvb2wgZ2xpYjItZGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdvcGVuc3VzZS1wYWNrYWdlcyc+CisgICAgICAgICAgICA8dGl0bGU+b3BlblNVU0UgUGFja2FnZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3MgdGhlIHJlcXVpcmVkIHBhY2thZ2VzIGJ5IGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgZ2l2ZW4gYSBzdXBwb3J0ZWQgb3BlblNVU0UgTGludXggZGlzdHJpYnV0aW9uOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXNzZW50aWFsczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIHRvIGJ1aWxkIGFuIGltYWdlIGZvciBhIGhlYWRsZXNzCisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW06CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyB6eXBwZXIgaW5zdGFsbCAmT1BFTlNVU0VfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUw7CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R3JhcGhpY2FsIGFuZCBFY2xpcHNlIFBsdWctSW4gRXh0cmFzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyByZWNvbW1lbmRlZCBpZiB0aGUgaG9zdCBzeXN0ZW0gaGFzIGdyYXBoaWNzCisgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IG9yIGlmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgICAgICBJREU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyB6eXBwZXIgaW5zdGFsbCBsaWJTREwtZGV2ZWwgeHRlcm0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Eb2N1bWVudGF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgaWYgeW91IGFyZSBnb2luZyB0byBidWlsZCBvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gbWFudWFsczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHp5cHBlciBpbnN0YWxsIG1ha2UgZm9wIHhzbHRwcm9jIGRibGF0ZXggeG1sdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BRFQgSW5zdGFsbGVyIEV4dHJhczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIGlmIHlvdSBhcmUgZ29pbmcgdG8gYmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2luZy10aGUtYWR0LWluc3RhbGxlcic+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKSBJbnN0YWxsZXI8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHp5cHBlciBpbnN0YWxsIGF1dG9jb25mIGF1dG9tYWtlIGxpYnRvb2wgZ2xpYjItZGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjZW50b3MtcGFja2FnZXMnPgorICAgICAgICAgICAgPHRpdGxlPkNlbnRPUyBQYWNrYWdlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBzaG93cyB0aGUgcmVxdWlyZWQgcGFja2FnZXMgYnkgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICBnaXZlbiBhIHN1cHBvcnRlZCBDZW50T1MgTGludXggZGlzdHJpYnV0aW9uOgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBGb3IgQ2VudE9TIDYueCwgc29tZSBvZiB0aGUgdmVyc2lvbnMgb2YgdGhlIGNvbXBvbmVudHMKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgYnkgdGhlIGRpc3RyaWJ1dGlvbiBhcmUgdG9vIG9sZCAoZS5nLiBHaXQsIFB5dGhvbiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRhcikuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGluc3RhbGwgdGhlIGJ1aWxkdG9vbHMgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgdG8gcHJvdmlkZSB2ZXJzaW9ucyB0aGF0IHdpbGwgd29yayB3aXRoIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGluc3RhbGwgdGhlIGJ1aWxkdG9vbHMgdGFyYmFsbCwKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVxdWlyZWQtZ2l0LXRhci1hbmQtcHl0aG9uLXZlcnNpb25zJz5SZXF1aXJlZCBHaXQsIFRhciwgYW5kIFB5dGhvbiBWZXJzaW9uczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXNzZW50aWFsczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIHRvIGJ1aWxkIGFuIGltYWdlIGZvciBhIGhlYWRsZXNzCisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW06CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyB5dW0gaW5zdGFsbCAmQ0VOVE9TX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMOworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdyYXBoaWNhbCBhbmQgRWNsaXBzZSBQbHVnLUluIEV4dHJhczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgcmVjb21tZW5kZWQgaWYgdGhlIGhvc3Qgc3lzdGVtIGhhcyBncmFwaGljcworICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBvciBpZiB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgRWNsaXBzZQorICAgICAgICAgICAgICAgICAgICAgICAgSURFOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8geXVtIGluc3RhbGwgU0RMLWRldmVsIHh0ZXJtCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RG9jdW1lbnRhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIGlmIHlvdSBhcmUgZ29pbmcgdG8gYnVpbGQgb3V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIG1hbnVhbHM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyB5dW0gaW5zdGFsbCBtYWtlIGRvY2Jvb2stc3R5bGUtZHNzc2wgZG9jYm9vay1zdHlsZS14c2wgXAorICAgICBkb2Nib29rLWR0ZHMgZG9jYm9vay11dGlscyBmb3AgbGlieHNsdCBkYmxhdGV4IHhtbHRvIHhzbHRwcm9jCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QURUIEluc3RhbGxlciBFeHRyYXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIG5lZWRlZCBpZiB5b3UgYXJlIGdvaW5nIHRvIGJlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdXNpbmctdGhlLWFkdC1pbnN0YWxsZXInPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFRvb2xraXQgKEFEVCkgSW5zdGFsbGVyPC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyB5dW0gaW5zdGFsbCBhdXRvY29uZiBhdXRvbWFrZSBsaWJ0b29sIGdsaWIyLWRldmVsCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVxdWlyZWQtZ2l0LXRhci1hbmQtcHl0aG9uLXZlcnNpb25zJz4KKyAgICAgICAgPHRpdGxlPlJlcXVpcmVkIEdpdCwgdGFyLCBhbmQgUHl0aG9uIFZlcnNpb25zPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIG9yZGVyIHRvIHVzZSB0aGUgYnVpbGQgc3lzdGVtLCB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtCisgICAgICAgICAgICBtdXN0IG1lZXQgdGhlIGZvbGxvd2luZyB2ZXJzaW9uIHJlcXVpcmVtZW50cyBmb3IgR2l0LCB0YXIsIGFuZAorICAgICAgICAgICAgUHl0aG9uOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2l0IDEuNy44IG9yIGdyZWF0ZXI8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+dGFyIDEuMjQgb3IgZ3JlYXRlcjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5QeXRob24gMi43LjMgb3IgZ3JlYXRlciBub3QgaW5jbHVkaW5nCisgICAgICAgICAgICAgICAgICAgIFB5dGhvbiAzLngsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSBkb2VzIG5vdCBtZWV0IGFsbCB0aGVzZSByZXF1aXJlbWVudHMsCisgICAgICAgICAgICB5b3UgY2FuIHJlc29sdmUgdGhpcyBieSBpbnN0YWxsaW5nIGEgPGZpbGVuYW1lPmJ1aWxkdG9vbHM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdGFyYmFsbCB0aGF0IGNvbnRhaW5zIHRoZXNlIHRvb2xzLgorICAgICAgICAgICAgWW91IGNhbiBnZXQgdGhlIHRhcmJhbGwgb25lIG9mIHR3byB3YXlzOiBkb3dubG9hZCBhIHByZS1idWlsdAorICAgICAgICAgICAgdGFyYmFsbCBvciB1c2UgQml0QmFrZSB0byBidWlsZCB0aGUgdGFyYmFsbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkb3dubG9hZGluZy1hLXByZS1idWlsdC1idWlsZHRvb2xzLXRhcmJhbGwnPgorICAgICAgICAgICAgPHRpdGxlPkRvd25sb2FkaW5nIGEgUHJlLUJ1aWx0IDxmaWxlbmFtZT5idWlsZHRvb2xzPC9maWxlbmFtZT4gVGFyYmFsbDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERvd25sb2FkaW5nIGFuZCBydW5uaW5nIGEgcHJlLWJ1aWx0IGJ1aWxkdG9vbHMgaW5zdGFsbGVyIGlzCisgICAgICAgICAgICAgICAgdGhlIGVhc2llc3Qgb2YgdGhlIHR3byBtZXRob2RzIGJ5IHdoaWNoIHlvdSBjYW4gZ2V0IHRoZXNlIHRvb2xzOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgTG9jYXRlIGFuZCBkb3dubG9hZCB0aGUgPGZpbGVuYW1lPiouc2g8L2ZpbGVuYW1lPiBhdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RMX1VSTDsvcmVsZWFzZXMveW9jdG8veW9jdG8tJkRJU1RSTzsvYnVpbGR0b29scy8nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGUgdGhlIGluc3RhbGxhdGlvbiBzY3JpcHQuCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc2ggcG9reS1nbGliYy14ODZfNjQtYnVpbGR0b29scy10YXJiYWxsLXg4Nl82NC1idWlsZHRvb2xzLW5hdGl2ZXNkay1zdGFuZGFsb25lLSZESVNUUk87LnNoCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBEdXJpbmcgZXhlY3V0aW9uLCBhIHByb21wdCBhcHBlYXJzIHRoYXQgYWxsb3dzIHlvdSB0bworICAgICAgICAgICAgICAgICAgICAgICAgY2hvb3NlIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCBjaG9vc2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgL2hvbWUvPHJlcGxhY2VhYmxlPnlvdXItdXNlcm5hbWU8L3JlcGxhY2VhYmxlPi9idWlsZHRvb2xzCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIHRoZSB0b29scyBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgYnkgdXNpbmcgYQorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBsaWtlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIC9ob21lLzxyZXBsYWNlYWJsZT55b3VyX3VzZXJuYW1lPC9yZXBsYWNlYWJsZT4vYnVpbGR0b29scy9lbnZpcm9ubWVudC1zZXR1cC1pNTg2LXBva3ktbGludXgKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9mIGNvdXJzZSwgeW91IG5lZWQgdG8gc3VwcGx5IHlvdXIgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBhbmQgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cmUgdG8gdXNlIHRoZSByaWdodCBmaWxlIChpLmUuIGk1ODUgb3IgeDg2LTY0KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgeW91IGhhdmUgc291cmNlZCB0aGUgc2V0dXAgc2NyaXB0LAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRvb2xzIGFyZSBhZGRlZCB0byA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYW55IG90aGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyByZXF1aXJlZCB0byBydW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB0b29scyBhcmUgaW5pdGlhbGl6ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0cyBhcmUgd29ya2luZyB2ZXJzaW9ucyB2ZXJzaW9ucyBvZiBHaXQsIHRhciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBhbmQgPGZpbGVuYW1lPmNocnBhdGg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGRpbmcteW91ci1vd24tYnVpbGR0b29scy10YXJiYWxsJz4KKyAgICAgICAgICAgIDx0aXRsZT5CdWlsZGluZyBZb3VyIE93biA8ZmlsZW5hbWU+YnVpbGR0b29sczwvZmlsZW5hbWU+IFRhcmJhbGw8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCdWlsZGluZyBhbmQgcnVubmluZyB5b3VyIG93biBidWlsZHRvb2xzIGluc3RhbGxlciBhcHBsaWVzCisgICAgICAgICAgICAgICAgb25seSB3aGVuIHlvdSBoYXZlIGEgYnVpbGQgaG9zdCB0aGF0IGNhbiBhbHJlYWR5IHJ1biBCaXRCYWtlLgorICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IHVzZSB0aGF0IG1hY2hpbmUgdG8gYnVpbGQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5zaDwvZmlsZW5hbWU+IGZpbGUgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICB0YWtlIHN0ZXBzIHRvIHRyYW5zZmVyIGFuZCBydW4gaXQgb24gYQorICAgICAgICAgICAgICAgIG1hY2hpbmUgdGhhdCBkb2VzIG5vdCBtZWV0IHRoZSBtaW5pbWFsIEdpdCwgdGFyLCBhbmQgUHl0aG9uCisgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSB0aGUgc3RlcHMgdG8gdGFrZSB0byBidWlsZCBhbmQgcnVuIHlvdXIgb3duCisgICAgICAgICAgICAgICAgYnVpbGR0b29scyBpbnN0YWxsZXI6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBPbiB0aGUgbWFjaGluZSB0aGF0IGlzIGFibGUgdG8gcnVuIEJpdEJha2UsCisgICAgICAgICAgICAgICAgICAgICAgICBiZSBzdXJlIHlvdSBoYXZlIHNldCB1cCB5b3VyIGJ1aWxkIGVudmlyb25tZW50IHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzZXR1cCBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJ1biB0aGUgQml0QmFrZSBjb21tYW5kIHRvIGJ1aWxkIHRoZSB0YXJiYWxsOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgYnVpbGR0b29scy10YXJiYWxsCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES01BQ0hJTkUnPjxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lcyB3aGV0aGVyIHlvdSBidWlsZCB0b29scyBmb3IgYSAzMi1iaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIDY0LWJpdCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgYnVpbGQgY29tcGxldGVzLCB5b3UgY2FuIGZpbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uc2g8L2ZpbGVuYW1lPiBmaWxlIHRoYXQgaW5zdGFsbHMKKyAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRvb2xzIGluIHRoZSA8ZmlsZW5hbWU+dG1wL2RlcGxveS9zZGs8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgIFRoZSBpbnN0YWxsZXIgZmlsZSBoYXMgdGhlIHN0cmluZyAiYnVpbGR0b29scyIKKyAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIG5hbWUuCisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmZXIgdGhlIDxmaWxlbmFtZT4uc2g8L2ZpbGVuYW1lPiBmaWxlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGhvc3QgdG8gdGhlIG1hY2hpbmUgdGhhdCBkb2VzIG5vdCBtZWV0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICBHaXQsIHRhciwgb3IgUHl0aG9uIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICBPbiB0aGUgbWFjaGluZSB0aGF0IGRvZXMgbm90IG1lZXQgdGhlIHJlcXVpcmVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgcnVuIHRoZSA8ZmlsZW5hbWU+LnNoPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICAgICB0byBpbnN0YWxsIHRoZSB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc2ggcG9reS1nbGliYy14ODZfNjQtYnVpbGR0b29scy10YXJiYWxsLXg4Nl82NC1idWlsZHRvb2xzLW5hdGl2ZXNkay1zdGFuZGFsb25lLSZESVNUUk87LnNoCisgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgRHVyaW5nIGV4ZWN1dGlvbiwgYSBwcm9tcHQgYXBwZWFycyB0aGF0IGFsbG93cyB5b3UgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgY2hvb3NlIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGNob29zZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIC9ob21lLzxyZXBsYWNlYWJsZT55b3VyX3VzZXJuYW1lPC9yZXBsYWNlYWJsZT4vYnVpbGR0b29scworICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UgdGhlIHRvb2xzIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBieSB1c2luZyBhCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2UgL2hvbWUvPHJlcGxhY2VhYmxlPnlvdXJfdXNlcm5hbWU8L3JlcGxhY2VhYmxlPi9idWlsZHRvb2xzL2Vudmlyb25tZW50LXNldHVwLWk1ODYtcG9reS1saW51eAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgT2YgY291cnNlLCB5b3UgbmVlZCB0byBzdXBwbHkgeW91ciBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IGFuZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgc3VyZSB0byB1c2UgdGhlIHJpZ2h0IGZpbGUgKGkuZS4gaTU4NSBvciB4ODYtNjQpLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciB5b3UgaGF2ZSBzb3VyY2VkIHRoZSBzZXR1cCBzY3JpcHQsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdG9vbHMgYXJlIGFkZGVkIHRvIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhbnkgb3RoZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIHJlcXVpcmVkIHRvIHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xzIGFyZSBpbml0aWFsaXplZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHRzIGFyZSB3b3JraW5nIHZlcnNpb25zIHZlcnNpb25zIG9mIEdpdCwgdGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgUHl0aG9uIGFuZCA8ZmlsZW5hbWU+Y2hycGF0aDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2ludHJvLWdldGl0Jz4KKyAgICA8dGl0bGU+T2J0YWluaW5nIHRoZSBZb2N0byBQcm9qZWN0PC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgdGVhbSBtYWtlcyB0aGUgWW9jdG8gUHJvamVjdCBhdmFpbGFibGUgdGhyb3VnaCBhIG51bWJlcgorICAgICAgICBvZiBtZXRob2RzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Tb3VyY2UgUmVwb3NpdG9yaWVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgV29ya2luZyBmcm9tIGEgY29weSBvZiB0aGUgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgaXMgdGhlCisgICAgICAgICAgICAgICAgcHJlZmVycmVkIG1ldGhvZCBmb3Igb2J0YWluaW5nIGFuZCB1c2luZyBhIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICByZWxlYXNlLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdmlldyB0aGUgWW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB5b3UgY2FuIGZpbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS8nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZWxlYXNlczo8L2VtcGhhc2lzPiBTdGFibGUsIHRlc3RlZAorICAgICAgICAgICAgICAgIHJlbGVhc2VzIGFyZSBhdmFpbGFibGUgYXMgdGFyYmFsbHMgdGhyb3VnaAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL3lvY3RvLycvPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TmlnaHRseSBCdWlsZHM6PC9lbXBoYXNpcz4gVGhlc2UKKyAgICAgICAgICAgICAgICB0YXJiYWxsIHJlbGVhc2VzIGFyZSBhdmFpbGFibGUgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fQUJfTklHSFRMWV9VUkw7Jy8+LgorICAgICAgICAgICAgICAgIFRoZXNlIGJ1aWxkcyBpbmNsdWRlIFlvY3RvIFByb2plY3QgcmVsZWFzZXMsIG1ldGEtdG9vbGNoYWluCisgICAgICAgICAgICAgICAgdGFyYmFsbCBpbnN0YWxsYXRpb24gc2NyaXB0cywgYW5kIGV4cGVyaW1lbnRhbCBidWlsZHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPllvY3RvIFByb2plY3QgV2Vic2l0ZTo8L2VtcGhhc2lzPiBZb3UgY2FuCisgICAgICAgICAgICAgICAgZmluZCB0YXJiYWxsIHJlbGVhc2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0IGFuZCBzdXBwb3J0ZWQgQlNQcworICAgICAgICAgICAgICAgIGF0IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsnPllvY3RvIFByb2plY3Qgd2Vic2l0ZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIEFsb25nIHdpdGggdGhlc2UgZG93bmxvYWRzLCB5b3UgY2FuIGZpbmQgbG90cyBvZiBvdGhlcgorICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGF0IHRoaXMgc2l0ZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0naW50cm8tZ2V0aXQtZGV2Jz4KKyAgICA8dGl0bGU+RGV2ZWxvcG1lbnQgQ2hlY2tvdXRzPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgICAgRGV2ZWxvcG1lbnQgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QgcmVxdWlyZXMgYSBsb2NhbAorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgIFlvdSBjYW4gc2V0IHVwIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGJ5IGNsb25pbmcgYSBjb3B5IG9mIHRoZSB1cHN0cmVhbQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwb2t5Jz5wb2t5PC91bGluaz4gR2l0IHJlcG9zaXRvcnkuCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZG8gdGhpcywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2V0dGluZy1zZXR1cCc+R2V0dGluZyBTZXQgVXA8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL21pZ3JhdGlvbi54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9taWdyYXRpb24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNzVlYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9taWdyYXRpb24ueG1sCkBAIC0wLDAgKzEsMjMxOSBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J21pZ3JhdGlvbic+Cis8dGl0bGU+TWlncmF0aW5nIHRvIGEgTmV3ZXIgWW9jdG8gUHJvamVjdCBSZWxlYXNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNoYXB0ZXIgcHJvdmlkZXMgaW5mb3JtYXRpb24geW91IGNhbiB1c2UgdG8gbWlncmF0ZSB3b3JrIHRvIGEKKyAgICAgICAgbmV3ZXIgWW9jdG8gUHJvamVjdCByZWxlYXNlLiAgWW91IGNhbiBmaW5kIHRoZSBzYW1lIGluZm9ybWF0aW9uIGluIHRoZQorICAgICAgICByZWxlYXNlIG5vdGVzIGZvciBhIGdpdmVuIHJlbGVhc2UuCisgICAgPC9wYXJhPgorCis8c2VjdGlvbiBpZD0nZ2VuZXJhbC1taWdyYXRpb24tY29uc2lkZXJhdGlvbnMnPgorICAgIDx0aXRsZT5HZW5lcmFsIE1pZ3JhdGlvbiBDb25zaWRlcmF0aW9uczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU29tZSBjb25zaWRlcmF0aW9ucyBhcmUgbm90IHRpZWQgdG8gYSBzcGVjaWZpYyBZb2N0byBQcm9qZWN0CisgICAgICAgIHJlbGVhc2UuCisgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBpbmZvcm1hdGlvbiB5b3Ugc2hvdWxkIGNvbnNpZGVyIHdoZW4KKyAgICAgICAgbWlncmF0aW5nIHRvIGFueSBuZXcgWW9jdG8gUHJvamVjdCByZWxlYXNlLgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EZWFsaW5nIHdpdGggQ3VzdG9taXplZCBSZWNpcGVzPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgSXNzdWVzIGNvdWxkIGFyaXNlIGlmIHlvdSB0YWtlIG9sZGVyIHJlY2lwZXMgdGhhdCBjb250YWluCisgICAgICAgICAgICAgICAgY3VzdG9taXphdGlvbnMgYW5kIHNpbXBseSBjb3B5IHRoZW0gZm9yd2FyZCBleHBlY3RpbmcgdGhlbQorICAgICAgICAgICAgICAgIHRvIHdvcmsgYWZ0ZXIgeW91IG1pZ3JhdGUgdG8gbmV3IFlvY3RvIFByb2plY3QgbWV0YWRhdGEuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgYSByZWNpcGUgaW4geW91ciBsYXllciB0aGF0IGlzCisgICAgICAgICAgICAgICAgYSBjdXN0b21pemVkIHZlcnNpb24gb2YgYSBjb3JlIHJlY2lwZSBjb3BpZWQgZnJvbSB0aGUgZWFybGllcgorICAgICAgICAgICAgICAgIHJlbGVhc2UsIHJhdGhlciB0aGFuIHRocm91Z2ggdGhlIHVzZSBvZiBhbiBhcHBlbmQgZmlsZS4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBtaWdyYXRlIHRvIGEgbmV3ZXIgdmVyc2lvbiBvZiBZb2N0byBQcm9qZWN0LCB0aGUKKyAgICAgICAgICAgICAgICBtZXRhZGF0YSAoZS5nLiBwZXJoYXBzIGFuIGluY2x1ZGUgZmlsZSB1c2VkIGJ5IHRoZSByZWNpcGUpCisgICAgICAgICAgICAgICAgY291bGQgaGF2ZSBjaGFuZ2VkIGluIGEgd2F5IHRoYXQgd291bGQgYnJlYWsgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIFNheSwgZm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaXMgcmVtb3ZlZCBmcm9tIGFuIGluY2x1ZGUgZmlsZQorICAgICAgICAgICAgICAgIGFuZCB0aGUgY3VzdG9taXplZCByZWNpcGUgdHJpZXMgdG8gY2FsbCB0aGF0IGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjb3VsZCAiZm9yd2FyZC1wb3J0IiBhbGwgeW91ciBjdXN0b21pemF0aW9ucyBpbiB5b3VyCisgICAgICAgICAgICAgICAgcmVjaXBlIHNvIHRoYXQgZXZlcnl0aGluZyB3b3JrcyBmb3IgdGhlIG5ldyByZWxlYXNlLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoaXMgaXMgbm90IHRoZSBvcHRpbWFsIHNvbHV0aW9uIGFzIHlvdSB3b3VsZCBoYXZlCisgICAgICAgICAgICAgICAgdG8gcmVwZWF0IHRoaXMgcHJvY2VzcyB3aXRoIGVhY2ggbmV3IHJlbGVhc2UgaWYgY2hhbmdlcworICAgICAgICAgICAgICAgIG9jY3VyIHRoYXQgZ2l2ZSByaXNlIHRvIHByb2JsZW1zLjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBiZXR0ZXIgc29sdXRpb24gKHdoZXJlIHByYWN0aWNhbCkgaXMgdG8gdXNlIGFwcGVuZAorICAgICAgICAgICAgICAgIGZpbGVzICg8ZmlsZW5hbWU+Ki5iYmFwcGVuZDwvZmlsZW5hbWU+KSB0byBjYXB0dXJlIGFueQorICAgICAgICAgICAgICAgIGN1c3RvbWl6YXRpb25zIHlvdSB3YW50IHRvIG1ha2UgdG8gYSByZWNpcGUuCisgICAgICAgICAgICAgICAgRG9pbmcgc28sIGlzb2xhdGVzIHlvdXIgY2hhbmdlcyBmcm9tIHRoZSBtYWluIHJlY2lwZSBtYWtpbmcKKyAgICAgICAgICAgICAgICB0aGVtIG11Y2ggbW9yZSBtYW5hZ2VhYmxlLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHNvbWV0aW1lcyBpdCBpcyBub3QgcHJhY3RpY2FsIHRvIHVzZSBhbiBhcHBlbmQKKyAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIEEgZ29vZCBleGFtcGxlIG9mIHRoaXMgaXMgd2hlbiBpbnRyb2R1Y2luZyBhIG5ld2VyIG9yIG9sZGVyCisgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiBhIHJlY2lwZSBpbiBhbm90aGVyIGxheWVyLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5VcGRhdGluZyBBcHBlbmQgRmlsZXM8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICBTaW5jZSBhcHBlbmQgZmlsZXMgZ2VuZXJhbGx5IG9ubHkgY29udGFpbiB5b3VyIGN1c3RvbWl6YXRpb25zLAorICAgICAgICAgICAgICAgIHRoZXkgb2Z0ZW4gZG8gbm90IG5lZWQgdG8gYmUgYWRqdXN0ZWQgZm9yIG5ldyByZWxlYXNlcy4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB0aGUgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgaXMKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgcmVjaXBlIChpLmUuIGl0cworICAgICAgICAgICAgICAgIG5hbWUgZG9lcyBub3QgdXNlIHRoZSAlIHdpbGRjYXJkKSBhbmQgdGhlIHZlcnNpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlIHRvIHdoaWNoIGl0IGlzIGFwcGVuZGluZyBoYXMgY2hhbmdlZCwgdGhlbiB5b3Ugd2lsbAorICAgICAgICAgICAgICAgIGF0IGEgbWluaW11bSBuZWVkIHRvIHJlbmFtZSB0aGUgYXBwZW5kIGZpbGUgdG8gbWF0Y2ggdGhlCisgICAgICAgICAgICAgICAgbmFtZSBvZiB0aGUgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgQSBtaXNtYXRjaCBiZXR3ZWVuIGFuIGFwcGVuZCBmaWxlIGFuZCBpdHMgY29ycmVzcG9uZGluZworICAgICAgICAgICAgICAgIHJlY2lwZSBmaWxlICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pIHdpbGwKKyAgICAgICAgICAgICAgICB0cmlnZ2VyIGFuIGVycm9yIGR1cmluZyBwYXJzaW5nLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5EZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgY3VzdG9taXphdGlvbiB0aGUgYXBwZW5kIGZpbGUKKyAgICAgICAgICAgICAgICBhcHBsaWVzLCBvdGhlciBpbmNvbXBhdGliaWxpdGllcyBtaWdodCBvY2N1ciB3aGVuIHlvdQorICAgICAgICAgICAgICAgIHVwZ3JhZGUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgYXBwZW5kIGZpbGUgYXBwbGllcyBhIHBhdGNoIGFuZCB0aGUKKyAgICAgICAgICAgICAgICByZWNpcGUgdG8gd2hpY2ggaXQgaXMgYXBwZW5kaW5nIGlzIHVwZGF0ZWQgdG8gYSBuZXdlcgorICAgICAgICAgICAgICAgIHZlcnNpb24sIHRoZSBwYXRjaCBtaWdodCBubyBsb25nZXIgYXBwbHkuCisgICAgICAgICAgICAgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSBhbmQgYXNzdW1pbmcgdGhlIHBhdGNoIGlzIHN0aWxsIG5lZWRlZCwKKyAgICAgICAgICAgICAgICB5b3UgbXVzdCBtb2RpZnkgdGhlIHBhdGNoIGZpbGUgc28gdGhhdCBpdCBkb2VzIGFwcGx5LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdtb3ZpbmctdG8tdGhlLXlvY3RvLXByb2plY3QtMS4zLXJlbGVhc2UnPgorICAgIDx0aXRsZT5Nb3ZpbmcgdG8gdGhlIFlvY3RvIFByb2plY3QgMS4zIFJlbGVhc2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBtaWdyYXRpb24gaW5mb3JtYXRpb24gZm9yIG1vdmluZyB0byB0aGUKKyAgICAgICAgWW9jdG8gUHJvamVjdCAxLjMgUmVsZWFzZSBmcm9tIHRoZSBwcmlvciByZWxlYXNlLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPScxLjMtbG9jYWwtY29uZmlndXJhdGlvbic+CisgICAgICAgIDx0aXRsZT5Mb2NhbCBDb25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIERpZmZlcmVuY2VzIGluY2x1ZGUgY2hhbmdlcyBmb3IKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfTUlSUk9SUyc+PGZpbGVuYW1lPlNTVEFURV9NSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS4zLXNzdGF0ZS1taXJyb3JzJz4KKyAgICAgICAgICAgIDx0aXRsZT5TU1RBVEVfTUlSUk9SUzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBzaGFyZWQgc3RhdGUgY2FjaGUgKHNzdGF0ZS1jYWNoZSksIGFzIHBvaW50ZWQgdG8gYnkKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1NUQVRFX0RJUic+PGZpbGVuYW1lPlNTVEFURV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4sIGJ5IGRlZmF1bHQKKyAgICAgICAgICAgICAgICBub3cgaGFzIHR3by1jaGFyYWN0ZXIgc3ViZGlyZWN0b3JpZXMgdG8gcHJldmVudCBpc3N1ZXMgYXJpc2luZworICAgICAgICAgICAgICAgIGZyb20gdG9vIG1hbnkgZmlsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIEFsc28sIG5hdGl2ZSBzc3RhdGUtY2FjaGUgcGFja2FnZXMgd2lsbCBnbyBpbnRvIGEgc3ViZGlyZWN0b3J5IG5hbWVkIHVzaW5nCisgICAgICAgICAgICAgICAgdGhlIGRpc3RybyBJRCBzdHJpbmcuCisgICAgICAgICAgICAgICAgSWYgeW91IGNvcHkgdGhlIG5ld2x5IHN0cnVjdHVyZWQgc3N0YXRlLWNhY2hlIHRvIGEgbWlycm9yIGxvY2F0aW9uCisgICAgICAgICAgICAgICAgKGVpdGhlciBsb2NhbCBvciByZW1vdGUpIGFuZCB0aGVuIHBvaW50IHRvIGl0IGluCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9NSVJST1JTJz48ZmlsZW5hbWU+U1NUQVRFX01JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gYXBwZW5kICJQQVRIIiB0byB0aGUgZW5kIG9mIHRoZSBtaXJyb3IgVVJMIHNvIHRoYXQKKyAgICAgICAgICAgICAgICB0aGUgcGF0aCB1c2VkIGJ5IEJpdEJha2UgYmVmb3JlIHRoZSBtaXJyb3Igc3Vic3RpdHV0aW9uIGlzCisgICAgICAgICAgICAgICAgYXBwZW5kZWQgdG8gdGhlIHBhdGggdXNlZCB0byBhY2Nlc3MgdGhlIG1pcnJvci4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTU1RBVEVfTUlSUk9SUyA9ICJmaWxlOi8vLiogaHR0cDovLzxyZXBsYWNlYWJsZT5zb21lc2VydmVyPC9yZXBsYWNlYWJsZT4udGxkL3NoYXJlL3NzdGF0ZS9QQVRIIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS4zLWJibGF5ZXJzLWNvbmYnPgorICAgICAgICAgICAgPHRpdGxlPmJibGF5ZXJzLmNvbmY8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiBsYXllciBjb25zaXN0cyBvZiB0d28gcGFydHMKKyAgICAgICAgICAgICAgICB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIFBva3kgcmVmZXJlbmNlIGRpc3RyaWJ1dGlvbiBhbmQgdGhlCisgICAgICAgICAgICAgICAgcmVmZXJlbmNlIGhhcmR3YXJlIEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpLCByZXNwZWN0aXZlbHk6CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by1ic3A8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBXaGVuIHJ1bm5pbmcgQml0QmFrZSBvciBIb2IgZm9yIHRoZSBmaXJzdCB0aW1lIGFmdGVyIHVwZ3JhZGluZywKKyAgICAgICAgICAgICAgICB5b3VyIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHdpbGwgYmUKKyAgICAgICAgICAgICAgICB1cGRhdGVkIHRvIGhhbmRsZSB0aGlzIGNoYW5nZSBhbmQgeW91IHdpbGwgYmUgYXNrZWQgdG8KKyAgICAgICAgICAgICAgICByZS1ydW4gb3IgcmVzdGFydCBmb3IgdGhlIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nMS4zLXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+UmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEaWZmZXJlbmNlcyBpbmNsdWRlIGNoYW5nZXMgZm9yIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5QeXRob24gZnVuY3Rpb24gd2hpdGVzcGFjZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cHJvdG89PC9maWxlbmFtZT4gaW4gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGFzayByZWNpcGVzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJlbW92ZWQgcmVjaXBlczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuMy1weXRob24tZnVuY3Rpb24td2hpdGVzcGFjZSc+CisgICAgICAgICAgICA8dGl0bGU+UHl0aG9uIEZ1bmN0aW9uIFdoaXRlc3BhY2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbGwgUHl0aG9uIGZ1bmN0aW9ucyBtdXN0IG5vdyB1c2UgZm91ciBzcGFjZXMgZm9yIGluZGVudGF0aW9uLgorICAgICAgICAgICAgICAgIFByZXZpb3VzbHksIGFuIGluY29uc2lzdGVudCBtaXggb2Ygc3BhY2VzIGFuZCB0YWJzIGV4aXN0ZWQsCisgICAgICAgICAgICAgICAgd2hpY2ggbWFkZSBleHRlbmRpbmcgdGhlc2UgZnVuY3Rpb25zIHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+X3ByZXBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbXBsaWNhdGVkIGdpdmVuIHRoYXQgUHl0aG9uIHRyZWF0cyB3aGl0ZXNwYWNlIGFzCisgICAgICAgICAgICAgICAgc3ludGFjdGljYWxseSBzaWduaWZpY2FudC4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGRlZmluaW5nIG9yIGV4dGVuZGluZyBhbnkgUHl0aG9uIGZ1bmN0aW9ucyAoZS5nLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb3B1bGF0ZV9wYWNrYWdlczwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT4gYW5kIHNvIGZvcnRoKSBpbiBjdXN0b20gcmVjaXBlcworICAgICAgICAgICAgICAgIG9yIGNsYXNzZXMsIHlvdSBuZWVkIHRvIGVuc3VyZSB5b3UgYXJlIHVzaW5nIGNvbnNpc3RlbnQKKyAgICAgICAgICAgICAgICBmb3VyLXNwYWNlIGluZGVudGF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjMtcHJvdG89LWluLXNyYy11cmknPgorICAgICAgICAgICAgPHRpdGxlPnByb3RvPSBpbiBTUkNfVVJJPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW55IHVzZSBvZiA8ZmlsZW5hbWU+cHJvdG89PC9maWxlbmFtZT4gaW4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIDxmaWxlbmFtZT5wcm90b2NvbD08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGlzIGFwcGxpZXMgdG8gdGhlIGZvbGxvd2luZyBVUklzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+c3ZuOi8vPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5ienI6Ly88L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmhnOi8vPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5vc2M6Ly88L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIE90aGVyIFVSSXMgd2VyZSBhbHJlYWR5IHVzaW5nIDxmaWxlbmFtZT5wcm90b2NvbD08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGlzIGNoYW5nZSBpbXByb3ZlcyBjb25zaXN0ZW5jeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS4zLW5hdGl2ZXNkayc+CisgICAgICAgICAgICA8dGl0bGU+bmF0aXZlc2RrPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHN1ZmZpeCA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4gaXMgbm93IGltcGxlbWVudGVkCisgICAgICAgICAgICAgICAgYXMgYSBwcmVmaXgsIHdoaWNoIHNpbXBsaWZpZXMgYSBsb3Qgb2YgdGhlIHBhY2thZ2luZyBjb2RlIGZvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiByZWNpcGVzLgorICAgICAgICAgICAgICAgIEFsbCBjdXN0b20gPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+IHJlY2lwZXMgYW5kIGFueQorICAgICAgICAgICAgICAgIHJlZmVyZW5jZXMgbmVlZCB0byBiZSB1cGRhdGVkIHRvIHVzZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGstKjwvZmlsZW5hbWU+IGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki1uYXRpdmVzZGs8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS4zLXRhc2stcmVjaXBlcyc+CisgICAgICAgICAgICA8dGl0bGU+VGFzayBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgIlRhc2siIHJlY2lwZXMgYXJlIG5vdyBrbm93biBhcyAiUGFja2FnZSBncm91cHMiIGFuZCBoYXZlCisgICAgICAgICAgICAgICAgYmVlbiByZW5hbWVkIGZyb20gPGZpbGVuYW1lPnRhc2stKi5iYjwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC0qLmJiPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgRXhpc3RpbmcgcmVmZXJlbmNlcyB0byB0aGUgcHJldmlvdXMgPGZpbGVuYW1lPnRhc2stKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgbmFtZXMgc2hvdWxkIHdvcmsgaW4gbW9zdCBjYXNlcyBhcyB0aGVyZSBpcyBhbiBhdXRvbWF0aWMKKyAgICAgICAgICAgICAgICB1cGdyYWRlIHBhdGggZm9yIG1vc3QgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgeW91IHNob3VsZCB1cGRhdGUgcmVmZXJlbmNlcyBpbiB5b3VyIG93biByZWNpcGVzIGFuZAorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIGFzIHRoZXkgY291bGQgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgcmVsZWFzZXMuCisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBhbHNvIHJlbmFtZSBhbnkgY3VzdG9tIDxmaWxlbmFtZT50YXNrLSo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHJlY2lwZXMgdG8gPGZpbGVuYW1lPnBhY2thZ2Vncm91cC0qPC9maWxlbmFtZT4sIGFuZCBjaGFuZ2UKKyAgICAgICAgICAgICAgICB0aGVtIHRvIGluaGVyaXQgPGZpbGVuYW1lPnBhY2thZ2Vncm91cDwvZmlsZW5hbWU+IGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGFzazwvZmlsZW5hbWU+LCBhcyB3ZWxsIGFzIHRha2luZyB0aGUgb3Bwb3J0dW5pdHkKKyAgICAgICAgICAgICAgICB0byByZW1vdmUgYW55dGhpbmcgbm93IGhhbmRsZWQgYnkKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLmJiY2xhc3M8L2ZpbGVuYW1lPiwgc3VjaCBhcyBwcm92aWRpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWRldjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcGFja2FnZXMsIHNldHRpbmcKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTElDX0ZJTEVTX0NIS1NVTSc+PGZpbGVuYW1lPkxJQ19GSUxFU19DSEtTVU08L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZWdyb3VwJz48ZmlsZW5hbWU+cGFja2FnZWdyb3VwLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgZnVydGhlciBkZXRhaWxzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjMtaW1hZ2UtZmVhdHVyZXMnPgorICAgICAgICAgICAgPHRpdGxlPklNQUdFX0ZFQVRVUkVTPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW1hZ2UgcmVjaXBlcyB0aGF0IHByZXZpb3VzbHkgaW5jbHVkZWQgImFwcHMtY29uc29sZS1jb3JlIgorICAgICAgICAgICAgICAgIGluIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgc2hvdWxkIG5vdyBpbmNsdWRlICJzcGxhc2giIGluc3RlYWQgdG8gZW5hYmxlIHRoZSBib290LXVwCisgICAgICAgICAgICAgICAgc3BsYXNoIHNjcmVlbi4KKyAgICAgICAgICAgICAgICBSZXRhaW5pbmcgImFwcHMtY29uc29sZS1jb3JlIiB3aWxsIHN0aWxsIGluY2x1ZGUgdGhlIHNwbGFzaAorICAgICAgICAgICAgICAgIHNjcmVlbiBidXQgZ2VuZXJhdGVzIGEgd2FybmluZy4KKyAgICAgICAgICAgICAgICBUaGUgImFwcHMteDExLWNvcmUiIGFuZCAiYXBwcy14MTEtZ2FtZXMiCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gZmVhdHVyZXMgaGF2ZSBiZWVuIHJlbW92ZWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuMy1yZW1vdmVkLXJlY2lwZXMnPgorICAgICAgICAgICAgPHRpdGxlPlJlbW92ZWQgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcmVjaXBlcyBoYXZlIGJlZW4gcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICBGb3IgbW9zdCBvZiB0aGVtLCBpdCBpcyB1bmxpa2VseSB0aGF0IHlvdSB3b3VsZCBoYXZlIGFueQorICAgICAgICAgICAgICAgIHJlZmVyZW5jZXMgdG8gdGhlbSBpbiB5b3VyIG93bgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+LgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBzaG91bGQgY2hlY2sgeW91ciBtZXRhZGF0YSBhZ2FpbnN0IHRoaXMgbGlzdCB0byBiZSBzdXJlOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmxpYngxMS10cmltPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlcGxhY2VkIGJ5IDxmaWxlbmFtZT5saWJ4MTE8L2ZpbGVuYW1lPiwgd2hpY2ggaGFzIGEgbmVnbGlnaWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBkaWZmZXJlbmNlIHdpdGggbW9kZXJuIFhvcmcuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnhzZXJ2ZXIteG9yZy1saXRlPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSA8ZmlsZW5hbWU+eHNlcnZlci14b3JnPC9maWxlbmFtZT4sIHdoaWNoIGhhcyBhIG5lZ2xpZ2libGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgZGlmZmVyZW5jZSB3aGVuIERSSSBhbmQgR0xYIG1vZHVsZXMgYXJlIG5vdCBpbnN0YWxsZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnhzZXJ2ZXIta2RyaXZlPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdGl2ZWx5IHVubWFpbnRhaW5lZCBmb3IgbWFueSB5ZWFycy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bWVzYS14bGliPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vIGxvbmdlciBzZXJ2ZXMgYW55IHB1cnBvc2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdhbGFnbzwvZmlsZW5hbWU+PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBSZXBsYWNlZCBieSB0ZWxlcGF0aHkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdhaWw8L2ZpbGVuYW1lPjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSB3YXMgaW50ZWdyYXRlZCBpbnRvIEdUSysgMi4xMy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZWdnZGJ1czwvZmlsZW5hbWU+PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBObyBsb25nZXIgbmVlZGVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5nY2MtKi1pbnRlcm1lZGlhdGU8L2ZpbGVuYW1lPjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIGhhcyBiZWVuIHJlc3RydWN0dXJlZCB0byBhdm9pZCB0aGUgbmVlZCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgc3RlcC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bGliZ3NtZDwvZmlsZW5hbWU+PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBVbm1haW50YWluZWQgZm9yIG1hbnkgeWVhcnMuCisgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbmFsaXR5IG5vdyBwcm92aWRlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9mb25vPC9maWxlbmFtZT4gaW5zdGVhZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5jb250YWN0cywgZGF0ZXMsIHRhc2tzLCBlZHMtdG9vbHM8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIExhcmdlbHkgdW5tYWludGFpbmVkIFBJTSBhcHBsaWNhdGlvbiBzdWl0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGhhcyBiZWVuIG1vdmVkIHRvIDxmaWxlbmFtZT5tZXRhLWdub21lPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5tZXRhLW9wZW5lbWJlZGRlZDwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uIHRvIHRoZSBwcmV2aW91c2x5IGxpc3RlZCBjaGFuZ2VzLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1kZW1vYXBwczwvZmlsZW5hbWU+IGRpcmVjdG9yeSBoYXMgYWxzbyBiZWVuIHJlbW92ZWQKKyAgICAgICAgICAgICAgICBiZWNhdXNlIHRoZSByZWNpcGVzIGluIGl0IHdlcmUgbm90IGJlaW5nIG1haW50YWluZWQgYW5kIG1hbnkKKyAgICAgICAgICAgICAgICBoYWQgYmVjb21lIG9ic29sZXRlIG9yIGJyb2tlbi4KKyAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZXNlIHJlY2lwZXMgd2VyZSBub3QgcGFyc2VkIGluIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgTWFueSBvZiB0aGVzZSByZWNpcGVzIGFyZSBhbHJlYWR5IHByb3ZpZGVkIGluIGFuIHVwZGF0ZWQgYW5kCisgICAgICAgICAgICAgICAgbWFpbnRhaW5lZCBmb3JtIHdpdGhpbiB0aGUgT3BlbkVtYmVkZGVkIGNvbW11bml0eSBsYXllcnMgc3VjaCBhcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5tZXRhLWdub21lPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgRm9yIHRoZSByZW1haW5kZXIsIHlvdSBjYW4gbm93IGZpbmQgdGhlbSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1leHRyYXM8L2ZpbGVuYW1lPiByZXBvc2l0b3J5LCB3aGljaCBpcyBpbiB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLXJlcG9zaXRvcmllcyc+U291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9JzEuMy1saW51eC1rZXJuZWwtbmFtaW5nJz4KKyAgICAgICAgPHRpdGxlPkxpbnV4IEtlcm5lbCBOYW1pbmc8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIG5hbWluZyBzY2hlbWUgZm9yIGtlcm5lbCBvdXRwdXQgYmluYXJpZXMgaGFzIGJlZW4gY2hhbmdlZCB0bworICAgICAgICAgICAgbm93IGluY2x1ZGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QRSc+PGZpbGVuYW1lPlBFPC9maWxlbmFtZT48L2xpbms+IGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICBmaWxlbmFtZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0VSTkVMX0lNQUdFX0JBU0VfTkFNRSA/PSAiJHtLRVJORUxfSU1BR0VUWVBFfS0ke1BFfS0ke1BWfS0ke1BSfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZWNhdXNlIHRoZSA8ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBub3Qgc2V0IGJ5IGRlZmF1bHQsCisgICAgICAgICAgICB0aGVzZSBiaW5hcnkgZmlsZXMgY291bGQgcmVzdWx0IHdpdGggbmFtZXMgdGhhdCBpbmNsdWRlIHR3byBkYXNoCisgICAgICAgICAgICBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBiekltYWdlLS0zLjEwLjkrZ2l0MCtjZDUwMmE4ODE0XzcxNDRiY2M0YjgtcjAtcWVtdXg4Ni02NC0yMDEzMDgzMDA4NTQzMS5iaW4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J21vdmluZy10by10aGUteW9jdG8tcHJvamVjdC0xLjQtcmVsZWFzZSc+CisgICAgPHRpdGxlPk1vdmluZyB0byB0aGUgWW9jdG8gUHJvamVjdCAxLjQgUmVsZWFzZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIG1pZ3JhdGlvbiBpbmZvcm1hdGlvbiBmb3IgbW92aW5nIHRvIHRoZQorICAgICAgICBZb2N0byBQcm9qZWN0IDEuNCBSZWxlYXNlIGZyb20gdGhlIHByaW9yIHJlbGVhc2UuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjQtYml0YmFrZSc+CisgICAgICAgIDx0aXRsZT5CaXRCYWtlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIERpZmZlcmVuY2VzIGluY2x1ZGUgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Db21tZW50IENvbnRpbnVhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJZiBhIGNvbW1lbnQgZW5kcyB3aXRoIGEgbGluZSBjb250aW51YXRpb24gKFwpIGNoYXJhY3RlciwKKyAgICAgICAgICAgICAgICAgICAgdGhlbiB0aGUgbmV4dCBsaW5lIG11c3QgYWxzbyBiZSBhIGNvbW1lbnQuCisgICAgICAgICAgICAgICAgICAgIEFueSBpbnN0YW5jZSB3aGVyZSB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgbm93IHRyaWdnZXJzCisgICAgICAgICAgICAgICAgICAgIGEgd2FybmluZy4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgZWl0aGVyIHJlbW92ZSB0aGUgY29udGludWF0aW9uIGNoYXJhY3Rlciwgb3IgYmUKKyAgICAgICAgICAgICAgICAgICAgc3VyZSB0aGUgbmV4dCBsaW5lIGlzIGEgY29tbWVudC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QYWNrYWdlIE5hbWUgT3ZlcnJpZGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBydW50aW1lIHBhY2thZ2Ugc3BlY2lmaWMgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJTVUdHRVNUUyc+PGZpbGVuYW1lPlJTVUdHRVNUUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJQUk9WSURFUyc+PGZpbGVuYW1lPlJQUk9WSURFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJDT05GTElDVFMnPjxmaWxlbmFtZT5SQ09ORkxJQ1RTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFUExBQ0VTJz48ZmlsZW5hbWU+UlJFUExBQ0VTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUFMTE9XX0VNUFRZJz48ZmlsZW5hbWU+QUxMT1dfRU1QVFk8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgcHJlLCBwb3N0LCBpbnN0YWxsLCBhbmQgdW5pbnN0YWxsIHNjcmlwdCBmdW5jdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wcmVpbnN0PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcG9zdGluc3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wcmVybTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wb3N0cm08L2ZpbGVuYW1lPiBzaG91bGQgYWx3YXlzIGhhdmUgYQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB1c2UgPGZpbGVuYW1lPlJERVBFTkRTXyR7UE59PC9maWxlbmFtZT4gZm9yCisgICAgICAgICAgICAgICAgICAgIHRoZSBtYWluIHBhY2thZ2UgaW5zdGVhZCBvZiA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIG1vcmUgc3RyaWN0IGNoZWNrcyB3aGVuIGl0IHBhcnNlcyByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjQtYnVpbGQtYmVoYXZpb3InPgorICAgICAgICA8dGl0bGU+QnVpbGQgQmVoYXZpb3I8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRGlmZmVyZW5jZXMgaW5jbHVkZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNoYXJlZCBTdGF0ZSBDb2RlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzaGFyZWQgc3RhdGUgY29kZSBoYXMgYmVlbiBvcHRpbWl6ZWQgdG8gYXZvaWQgcnVubmluZworICAgICAgICAgICAgICAgICAgICB1bm5lY2Vzc2FyeSB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgbm8gbG9uZ2VyIHBvcHVsYXRlcyB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIHN5c3Jvb3Qgc2luY2UgdGhhdCBpcyBub3QgbmVjZXNzYXJ5OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYyByb290ZnMgPHJlcGxhY2VhYmxlPnNvbWUtaW1hZ2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEluc3RlYWQsIHRoZSBzeXN0ZW0ganVzdCBuZWVkcyB0byBleHRyYWN0IHRoZSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBjb250ZW50cywgcmUtY3JlYXRlIHRoZSBwYWNrYWdlcywgYW5kIGNvbnN0cnVjdAorICAgICAgICAgICAgICAgICAgICB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNoYW5nZSBpcyB1bmxpa2VseSB0byBjYXVzZSBhbnkgcHJvYmxlbXMgdW5sZXNzCisgICAgICAgICAgICAgICAgICAgIHlvdSBoYXZlIG1pc3NpbmcgZGVjbGFyZWQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNjYW5uaW5nIERpcmVjdG9yeSBOYW1lczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNjYW5uaW5nIGZvciBmaWxlcyBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBzeXN0ZW0gbm93IHVzZXMKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTT1ZFUlJJREVTJz48ZmlsZW5hbWU+RklMRVNPVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiA8bGluayBsaW5rZW5kPSd2YXItT1ZFUlJJREVTJz48ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgZGlyZWN0b3J5IG5hbWVzLgorICAgICAgICAgICAgICAgICAgICBJbiBnZW5lcmFsLCB0aGUgdmFsdWVzIHByZXZpb3VzbHkgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+IGFyZSBub3cgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTT1ZFUlJJREVTPC9maWxlbmFtZT4gYXMgd2VsbC4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IHJlbGllZCB1cG9uIGFuIGFkZGl0aW9uYWwgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgeW91IHByZXZpb3VzbHkgYWRkZWQgdG8gPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB5b3UgbWlnaHQgbm93IG5lZWQgdG8gYWRkIGl0IHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU09WRVJSSURFUzwvZmlsZW5hbWU+IHVubGVzcyB5b3UgYXJlIGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgYWRkaW5nIGl0IHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FT1ZFUlJJREVTJz48ZmlsZW5hbWU+TUFDSElORU9WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvciA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPT1ZFUlJJREVTJz48ZmlsZW5hbWU+RElTVFJPT1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcywgYXMgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIHJlbGF0ZWQgY2hhbmdlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbWlncmF0aW9uLTEuNC12YXJpYWJsZXMnPlZhcmlhYmxlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS40LXByb3hpZXMtYW5kLWZldGNoaW5nLXNvdXJjZSc+CisgICAgICAgIDx0aXRsZT5Qcm94aWVzIGFuZCBGZXRjaGluZyBTb3VyY2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBuZXcgPGZpbGVuYW1lPm9lLWdpdC1wcm94eTwvZmlsZW5hbWU+IHNjcmlwdCBoYXMgYmVlbiBhZGRlZCB0bworICAgICAgICAgICAgcmVwbGFjZSBwcmV2aW91cyBtZXRob2RzIG9mIGhhbmRsaW5nIHByb3hpZXMgYW5kIGZldGNoaW5nIHNvdXJjZQorICAgICAgICAgICAgZnJvbSBHaXQuCisgICAgICAgICAgICBTZWUgdGhlIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmYvc2l0ZS5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoaXMgc2NyaXB0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjQtY3VzdG9tLWludGVyZmFjZXMtZmlsZS1uZXRiYXNlLWNoYW5nZSc+CisgICAgICAgIDx0aXRsZT5DdXN0b20gSW50ZXJmYWNlcyBGaWxlIChuZXRiYXNlIGNoYW5nZSk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGhhdmUgY3JlYXRlZCB5b3VyIG93biBjdXN0b20KKyAgICAgICAgICAgIDxmaWxlbmFtZT5ldGMvbmV0d29yay9pbnRlcmZhY2VzPC9maWxlbmFtZT4gZmlsZSBieSBjcmVhdGluZworICAgICAgICAgICAgYW4gYXBwZW5kIGZpbGUgZm9yIHRoZSA8ZmlsZW5hbWU+bmV0YmFzZTwvZmlsZW5hbWU+IHJlY2lwZSwKKyAgICAgICAgICAgIHlvdSBub3cgbmVlZCB0byBjcmVhdGUgYW4gYXBwZW5kIGZpbGUgZm9yIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmluaXQtaWZ1cGRvd248L2ZpbGVuYW1lPiByZWNpcGUgaW5zdGVhZCwgd2hpY2ggeW91IGNhbgorICAgICAgICAgICAgZmluZCBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgYXQgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd248L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGFwcGVuZCBmaWxlcywgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLWJiYXBwZW5kLWZpbGVzJz5Vc2luZyAuYmJhcHBlbmQgRmlsZXM8L3VsaW5rPiIKKyAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS40LXJlbW90ZS1kZWJ1Z2dpbmcnPgorICAgICAgICA8dGl0bGU+UmVtb3RlIERlYnVnZ2luZzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTdXBwb3J0IGZvciByZW1vdGUgZGVidWdnaW5nIHdpdGggdGhlIEVjbGlwc2UgSURFIGlzIG5vdworICAgICAgICAgICAgc2VwYXJhdGVkIGludG8gYW4gaW1hZ2UgZmVhdHVyZQorICAgICAgICAgICAgKDxmaWxlbmFtZT5lY2xpcHNlLWRlYnVnPC9maWxlbmFtZT4pIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWNvcmUtZWNsaXBzZS1kZWJ1ZzwvZmlsZW5hbWU+IHBhY2thZ2UgZ3JvdXAuCisgICAgICAgICAgICBQcmV2aW91c2x5LCB0aGUgZGVidWdnaW5nIGZlYXR1cmUgd2FzIGluY2x1ZGVkIHRocm91Z2ggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+dG9vbHMtZGVidWc8L2ZpbGVuYW1lPiBpbWFnZSBmZWF0dXJlLCB3aGljaCBjb3JyZXNwb25kcworICAgICAgICAgICAgdG8gdGhlIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY29yZS10b29scy1kZWJ1ZzwvZmlsZW5hbWU+CisgICAgICAgICAgICBwYWNrYWdlIGdyb3VwLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjQtdmFyaWFibGVzJz4KKyAgICAgICAgPHRpdGxlPlZhcmlhYmxlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBoYXZlIGNoYW5nZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPlNBTklUWV9URVNURURfRElTVFJPUzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgbm93IHVzZXMgYSBkaXN0cmlidXRpb24gSUQsIHdoaWNoIGlzIGNvbXBvc2VkCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBob3N0IGRpc3RyaWJ1dG9yIElEIGZvbGxvd2VkIGJ5IHRoZSByZWxlYXNlLgorICAgICAgICAgICAgICAgICAgICBQcmV2aW91c2x5LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0FOSVRZX1RFU1RFRF9ESVNUUk9TJz48ZmlsZW5hbWU+U0FOSVRZX1RFU1RFRF9ESVNUUk9TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHdhcyBjb21wb3NlZCBvZiB0aGUgZGVzY3JpcHRpb24gZmllbGQuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCAiVWJ1bnR1IDEyLjEwIiBiZWNvbWVzICJVYnVudHUtMTIuMTAiLgorICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhpcyBjaGFuZ2UgaWYgeW91IGFyZSBub3QKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNhbGx5IHNldHRpbmcgdGhpcyB2YXJpYWJsZSwgb3IgaWYgeW91IGFyZQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY2FsbHkgc2V0dGluZyBpdCB0byAiIi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEYnPjxmaWxlbmFtZT5QRjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVAnPjxmaWxlbmFtZT5QPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5GSUxFX0RJUk5BTUU8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcyBoYXZlIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgZHJvcHBlZCBmcm9tIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCBpcyB1c2VkIGFzIHRoZSBzZWFyY2ggcGF0aCBmb3IgZmluZGluZyBmaWxlcworICAgICAgICAgICAgICAgICAgICByZWZlcnJlZCB0byBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIGEgcmVjaXBlIHRoYXQgcmVsaWVkIHVwb24gdGhlc2UgZGlyZWN0b3JpZXMsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHdvdWxkIGJlIHVudXN1YWwsIHRoZW4geW91IHdpbGwgbmVlZCB0byBhZGQgdGhlCisgICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlIHBhdGhzIHdpdGhpbiB0aGUgcmVjaXBlIG9yLCBhbHRlcm5hdGl2ZWx5LAorICAgICAgICAgICAgICAgICAgICByZWFycmFuZ2UgdGhlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgbW9zdCBjb21tb24gbG9jYXRpb25zIGFyZSBzdGlsbCBjb3ZlcmVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0JQfTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+JHtCUE59PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIGFuZCAiZmlsZXMiLCB3aGljaCBhbGwgcmVtYWluIGluIHRoZSBkZWZhdWx0IHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLXRhcmdldC1wYWNrYWdlLW1hbmFnZW1lbnQtd2l0aC1ycG0nPgorICAgICAgICA8dGl0bGU+VGFyZ2V0IFBhY2thZ2UgTWFuYWdlbWVudCB3aXRoIFJQTTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiBydW50aW1lIHBhY2thZ2UgbWFuYWdlbWVudCBpcyBlbmFibGVkIGFuZCB0aGUgUlBNIGJhY2tlbmQKKyAgICAgICAgICAgIGlzIHNlbGVjdGVkLCBTbWFydCBpcyBub3cgaW5zdGFsbGVkIGZvciBwYWNrYWdlIGRvd25sb2FkLCBkZXBlbmRlbmN5CisgICAgICAgICAgICByZXNvbHV0aW9uLCBhbmQgdXBncmFkZXMgaW5zdGVhZCBvZiBaeXBwZXIuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIFNtYXJ0LCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kCisgICAgICAgICAgICBvbiB0aGUgdGFyZ2V0OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBzbWFydCAtLWhlbHAKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS40LXJlY2lwZXMtbW92ZWQnPgorICAgICAgICA8dGl0bGU+UmVjaXBlcyBNb3ZlZDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHJlY2lwZXMgd2VyZSBtb3ZlZCBmcm9tIHRoZWlyIHByZXZpb3VzIGxvY2F0aW9ucworICAgICAgICAgICAgYmVjYXVzZSB0aGV5IGFyZSBubyBsb25nZXIgdXNlZCBieSBhbnl0aGluZyBpbgorICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZC1Db3JlOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5jbHV0dGVyLWJveDJkPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm93IHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmV2b2x1dGlvbi1kYXRhLXNlcnZlcjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1nbm9tZTwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5ndGh1bWI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBOb3cgcmVzaWRlcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtZ25vbWU8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z3RraHRtbDI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBOb3cgcmVzaWRlcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtb2U8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z3VwbnA8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBOb3cgcmVzaWRlcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtbXVsdGltZWRpYTwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5neXBzeTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1vZTwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJjYW5iZXJyYTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1nbm9tZTwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJnZGF0YTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1nbm9tZTwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJtdXNpY2JyYWluejwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1tdWx0aW1lZGlhPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm1ldGFjaXR5PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm93IHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLWdub21lPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBvbGtpdDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1vZTwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT56ZXJvY29uZjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1uZXR3b3JraW5nPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNC1yZW1vdmFscy1hbmQtcmVuYW1lcyc+CisgICAgICAgIDx0aXRsZT5SZW1vdmFscyBhbmQgUmVuYW1lczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3Mgd2hhdCBoYXMgYmVlbiByZW1vdmVkIG9yIHJlbmFtZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmV2aWVleHQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgaXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT54c2VydmVyPC9maWxlbmFtZT4gc2luY2UgMjAwOC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HdGsrIERpcmVjdEZCOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgc3VwcG9ydCBiZWNhdXNlIHVwc3RyZWFtIEd0aysgbm8gbG9uZ2VyIHN1cHBvcnRzIGl0CisgICAgICAgICAgICAgICAgICAgIGFzIG9mIHZlcnNpb24gMi4xOC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bGlieGZvbnRjYWNoZSAvIHhmb250Y2FjaGVwcm90bzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgYmVjYXVzZSB0aGV5IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBYb3JnIHNlcnZlciBpbiAyMDA4LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJ4cCAvIGxpYnhwcmludGFwcHV0aWwgLyBsaWJ4cHJpbnR1dGlsIC8gcHJpbnRwcm90bzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgYmVjYXVzZSB0aGUgWFByaW50IHNlcnZlciB3YXMgcmVtb3ZlZCBmcm9tCisgICAgICAgICAgICAgICAgICAgIFhvcmcgaW4gMjAwOC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bGlieHRyYXAgLyB4dHJhcHByb3RvPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIHRoZWlyIGZ1bmN0aW9uYWxpdHkgd2FzIGJyb2tlbiB1cHN0cmVhbS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5saW51eC15b2N0byAzLjAga2VybmVsOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgd2l0aCBsaW51eC15b2N0byAzLjgga2VybmVsIGJlaW5nIGFkZGVkLgorICAgICAgICAgICAgICAgICAgICBUaGUgbGludXgteW9jdG8gMy4yIGFuZCBsaW51eC15b2N0byAzLjQga2VybmVscyByZW1haW4KKyAgICAgICAgICAgICAgICAgICAgYXMgcGFydCBvZiB0aGUgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bHNic2V0dXA8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIHdpdGggZnVuY3Rpb25hbGl0eSBub3cgcHJvdmlkZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxzYnRlc3Q8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bWF0Y2hib3gtc3Ryb2tlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIGl0IHdhcyBuZXZlciBtb3JlIHRoYW4gYSBwcm9vZi1vZi1jb25jZXB0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5tYXRjaGJveC13bS0yIC8gbWF0Y2hib3gtdGhlbWUtc2F0by0yPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIHRoZXkgYXJlIG5vdCBtYWludGFpbmVkLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCA8ZmlsZW5hbWU+bWF0Y2hib3gtd208L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hdGNoYm94LXRoZW1lLXNhdG88L2ZpbGVuYW1lPiBhcmUgc3RpbGwKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm1lc2EtZHJpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVuYW1lZCB0byA8ZmlsZW5hbWU+bWVzYTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5tZXNhLXhsaWI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgaXQgd2FzIG5vIGxvbmdlciB1c2VmdWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm11dHRlcjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgYmVjYXVzZSBub3RoaW5nIGV2ZXIgdXNlcyBpdCBhbmQgdGhlIHJlY2lwZSBpcworICAgICAgICAgICAgICAgICAgICB2ZXJ5IG9sZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+b3Jpbm9jby1jb25mPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIGl0IGhhcyBiZWNvbWUgb2Jzb2xldGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnVwZGF0ZS1tb2R1bGVzPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlciB1c2VkLgorICAgICAgICAgICAgICAgICAgICBUaGUga2VybmVsIG1vZHVsZSA8ZmlsZW5hbWU+cG9zdGluc3RhbGw8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBvc3RybTwvZmlsZW5hbWU+IHNjcmlwdHMgY2FuIG5vdyBkbyB0aGUgc2FtZQorICAgICAgICAgICAgICAgICAgICB0YXNrIHdpdGhvdXQgdGhlIHVzZSBvZiB0aGlzIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+d2ViPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIGl0IGlzIG5vdCBtYWludGFpbmVkLiAgU3VwZXJzZWRlZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ViLXdlYmtpdDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT54Zjg2YmlnZm9udHByb3RvPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIHVwc3RyZWFtIGl0IGhhcyBiZWVuIGRpc2FibGVkIGJ5IGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgc2luY2UgMjAwNy4KKyAgICAgICAgICAgICAgICAgICAgTm90aGluZyB1c2VzIDxmaWxlbmFtZT54Zjg2YmlnZm9udHByb3RvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnhmODZydXNocHJvdG88L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgaXRzIGRlcGVuZGVuY3kgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnhzZXJ2ZXI8L2ZpbGVuYW1lPiB3YXMgc3B1cmlvdXMgYW5kIGl0IHdhcworICAgICAgICAgICAgICAgICAgICByZW1vdmVkIGluIDIwMDUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnp5cHBlciAvIGxpYnp5cHAgLyBzYXQtc29sdmVyPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBhbmQgYmVlbiBmdW5jdGlvbmFsbHkgcmVwbGFjZWQgd2l0aCBTbWFydAorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPnB5dGhvbi1zbWFydHBtPC9maWxlbmFtZT4pIHdoZW4gUlBNIHBhY2thZ2luZworICAgICAgICAgICAgICAgICAgICBpcyB1c2VkIGFuZCBwYWNrYWdlIG1hbmFnZW1lbnQgaXMgZW5hYmxlZCBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nbW92aW5nLXRvLXRoZS15b2N0by1wcm9qZWN0LTEuNS1yZWxlYXNlJz4KKyAgICA8dGl0bGU+TW92aW5nIHRvIHRoZSBZb2N0byBQcm9qZWN0IDEuNSBSZWxlYXNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgbWlncmF0aW9uIGluZm9ybWF0aW9uIGZvciBtb3ZpbmcgdG8gdGhlCisgICAgICAgIFlvY3RvIFByb2plY3QgMS41IFJlbGVhc2UgZnJvbSB0aGUgcHJpb3IgcmVsZWFzZS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1ob3N0LWRlcGVuZGVuY3ktY2hhbmdlcyc+CisgICAgICAgIDx0aXRsZT5Ib3N0IERlcGVuZGVuY3kgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBub3cgaGFzIHNvbWUgYWRkaXRpb25hbCByZXF1aXJlbWVudHMKKyAgICAgICAgICAgIG9uIHRoZSBob3N0IHN5c3RlbToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlB5dGhvbiAyLjcuMys8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGFyIDEuMjQrPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdpdCAxLjcuOCs8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UGF0Y2hlZCB2ZXJzaW9uIG9mIE1ha2UgaWYgeW91IGFyZSB1c2luZworICAgICAgICAgICAgICAgICAgICAzLjgyLgorICAgICAgICAgICAgICAgICAgICBNb3N0IGRpc3RyaWJ1dGlvbnMgdGhhdCBwcm92aWRlIE1ha2UgMy44MiB1c2UgdGhlIHBhdGNoZWQKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgSWYgdGhlIExpbnV4IGRpc3RyaWJ1dGlvbiB5b3UgYXJlIHVzaW5nIG9uIHlvdXIgYnVpbGQgaG9zdAorICAgICAgICAgICAgZG9lcyBub3QgcHJvdmlkZSBwYWNrYWdlcyBmb3IgdGhlc2UsIHlvdSBjYW4gaW5zdGFsbCBhbmQgdXNlCisgICAgICAgICAgICB0aGUgQnVpbGR0b29scyB0YXJiYWxsLCB3aGljaCBwcm92aWRlcyBhbiBTREstbGlrZSBlbnZpcm9ubWVudAorICAgICAgICAgICAgY29udGFpbmluZyB0aGVtLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHJlcXVpcmVtZW50LCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVxdWlyZWQtZ2l0LXRhci1hbmQtcHl0aG9uLXZlcnNpb25zJz5SZXF1aXJlZCBHaXQsIHRhciwgYW5kIFB5dGhvbiBWZXJzaW9uczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtYXRvbS1wYy1ic3AnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmF0b20tcGM8L2ZpbGVuYW1lPiBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5hdG9tLXBjPC9maWxlbmFtZT4gaGFyZHdhcmUgcmVmZXJlbmNlIEJTUCBoYXMgYmVlbgorICAgICAgICAgICAgcmVwbGFjZWQgYnkgYSA8ZmlsZW5hbWU+Z2VuZXJpY3g4NjwvZmlsZW5hbWU+IEJTUC4KKyAgICAgICAgICAgIFRoaXMgQlNQIGlzIG5vdCBuZWNlc3NhcmlseSBndWFyYW50ZWVkIHRvIHdvcmsgb24gYWxsIHg4NgorICAgICAgICAgICAgaGFyZHdhcmUsIGJ1dCBpdCB3aWxsIHJ1biBvbiBhIHdpZGVyIHJhbmdlIG9mIHN5c3RlbXMgdGhhbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5hdG9tLXBjPC9maWxlbmFtZT4gZGlkLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCBhIDxmaWxlbmFtZT5nZW5lcmljeDg2LTY0PC9maWxlbmFtZT4gQlNQIGhhcworICAgICAgICAgICAgICAgIGJlZW4gYWRkZWQgZm9yIDY0LWJpdCBBdG9tIHN5c3RlbXMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1iaXRiYWtlJz4KKyAgICAgICAgPHRpdGxlPkJpdEJha2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRoYXQgcmVsYXRlIHRvIEJpdEJha2U6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBub3cgc3VwcG9ydHMgYSA8ZmlsZW5hbWU+X3JlbW92ZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLgorICAgICAgICAgICAgICAgICAgICBUaGUgYWRkaXRpb24gb2YgdGhpcyBvcGVyYXRvciBtZWFucyB5b3Ugd2lsbCBoYXZlIHRvCisgICAgICAgICAgICAgICAgICAgIHJlbmFtZSBhbnkgaXRlbXMgaW4gcmVjaXBlIHNwYWNlIChmdW5jdGlvbnMsIHZhcmlhYmxlcykKKyAgICAgICAgICAgICAgICAgICAgd2hvc2UgbmFtZXMgY3VycmVudGx5IGNvbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9yZW1vdmVfPC9maWxlbmFtZT4gb3IgZW5kIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9yZW1vdmU8L2ZpbGVuYW1lPiB0byBhdm9pZCB1bmV4cGVjdGVkIGJlaGF2aW9yLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UncyBnbG9iYWwgbWV0aG9kIHBvb2wgaGFzIGJlZW4gcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgbm90IHBhcnRpY3VsYXJseSB1c2VmdWwgYW5kIGxlZCB0byBjbGFzaGVzCisgICAgICAgICAgICAgICAgICAgIGJldHdlZW4gcmVjaXBlcyBjb250YWluaW5nIGZ1bmN0aW9ucyB0aGF0IGhhZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgc2FtZSBuYW1lLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlICJub25lIiBzZXJ2ZXIgYmFja2VuZCBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgICAgICAgICAgICAgICBUaGUgInByb2Nlc3MiIHNlcnZlciBiYWNrZW5kIGhhcyBiZWVuIHNlcnZpbmcgd2VsbCBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBmb3IgYSBsb25nIHRpbWUgbm93LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iaXRiYWtlLXJ1bnRhc2s8L2ZpbGVuYW1lPiBzY3JpcHQgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVAnPjxmaWxlbmFtZT5QPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEYnPjxmaWxlbmFtZT5QRjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYXJlIG5vIGxvbmdlciBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJPVklERVMnPjxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBieSBkZWZhdWx0IGluIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgdmVyc2lvbi1zcGVjaWZpYyA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpdGVtcyB3ZXJlIHNlbGRvbSB1c2VkLgorICAgICAgICAgICAgICAgICAgICBBdHRlbXB0aW5nIHRvIHVzZSB0aGVtIGNvdWxkIHJlc3VsdCBpbiB0d28gdmVyc2lvbnMgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgYnVpbHQgc2ltdWx0YW5lb3VzbHkgcmF0aGVyIHRoYW4ganVzdCBvbmUgdmVyc2lvbiBkdWUgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIHdheSBCaXRCYWtlIHJlc29sdmVzIGRlcGVuZGVuY2llcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtcWEtd2FybmluZ3MnPgorICAgICAgICA8dGl0bGU+UUEgV2FybmluZ3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBwYWNrYWdlIFFBIGNoZWNrczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBjdXN0b21pemVkCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FUlJPUl9RQSc+PGZpbGVuYW1lPkVSUk9SX1FBPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9yIDxsaW5rIGxpbmtlbmQ9J3Zhci1XQVJOX1FBJz48ZmlsZW5hbWU+V0FSTl9RQTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgaW4geW91ciBjb25maWd1cmF0aW9uLCBjaGVjayB0aGF0IHRoZXkgY29udGFpbiBhbGwgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIGlzc3VlcyB0aGF0IHlvdSB3aXNoIHRvIGJlIHJlcG9ydGVkLgorICAgICAgICAgICAgICAgICAgICBQcmV2aW91cyBZb2N0byBQcm9qZWN0IHZlcnNpb25zIGNvbnRhaW5lZCBhIGJ1ZyB0aGF0IG1lYW50CisgICAgICAgICAgICAgICAgICAgIHRoYXQgYW55IGl0ZW0gbm90IG1lbnRpb25lZCBpbiA8ZmlsZW5hbWU+RVJST1JfUUE8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBvciA8ZmlsZW5hbWU+V0FSTl9RQTwvZmlsZW5hbWU+IHdvdWxkIGJlIHRyZWF0ZWQgYXMgYQorICAgICAgICAgICAgICAgICAgICB3YXJuaW5nLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHNldmVyYWwgaW1wb3J0YW50IGl0ZW1zIHdlcmUgbm90IGFscmVhZHkgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgdmFsdWUgb2YgPGZpbGVuYW1lPldBUk5fUUE8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQWxsIG9mIHRoZSBwb3NzaWJsZSBRQSBjaGVja3MgYXJlIG5vdyBkb2N1bWVudGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aW5zYW5lLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbiBhZGRpdGlvbmFsIFFBIGNoZWNrIGhhcyBiZWVuIGFkZGVkIHRvIGNoZWNrIGlmCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL3NoYXJlL2luZm8vZGlyPC9maWxlbmFtZT4gaXMgYmVpbmcgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICBZb3VyIHJlY2lwZSBzaG91bGQgZGVsZXRlIHRoaXMgZmlsZSB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlmICJtYWtlIGluc3RhbGwiIGlzIGluc3RhbGxpbmcgaXQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyB0aGUgYnVpbGRoaXN0b3J5IGNsYXNzLCB0aGUgY2hlY2sgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIHZlcnNpb24gZ29pbmcgYmFja3dhcmRzIGlzIG5vdyBjb250cm9sbGVkIHVzaW5nIGEKKyAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmQgUUEgY2hlY2suCisgICAgICAgICAgICAgICAgICAgIFRodXMsIGlmIHlvdSBoYXZlIGN1c3RvbWl6ZWQgeW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RVJST1JfUUE8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+V0FSTl9RQTwvZmlsZW5hbWU+IHZhbHVlcyBhbmQgc3RpbGwgd2lzaCB0byBoYXZlCisgICAgICAgICAgICAgICAgICAgIHRoaXMgY2hlY2sgcGVyZm9ybWVkLCB5b3Ugc2hvdWxkIGFkZAorICAgICAgICAgICAgICAgICAgICAidmVyc2lvbi1nb2luZy1iYWNrd2FyZHMiIHRvIHlvdXIgdmFsdWUgZm9yIG9uZSBvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgdmFyaWFibGVzIGRlcGVuZGluZyBvbiBob3cgeW91IHdpc2ggaXQgdG8gYmUgaGFuZGxlZC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBkb2N1bWVudGVkIFFBIGNoZWNrcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZS5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtZGlyZWN0b3J5LWxheW91dC1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPkRpcmVjdG9yeSBMYXlvdXQgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSBjaGFuZ2VzIGV4aXN0OgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIE91dHB1dCBTREsgaW5zdGFsbGVyIGZpbGVzIGFyZSBub3cgbmFtZWQgdG8gaW5jbHVkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UgbmFtZSBhbmQgdHVuaW5nIGFyY2hpdGVjdHVyZSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX05BTUUnPjxmaWxlbmFtZT5TREtfTkFNRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEltYWdlcyBhbmQgcmVsYXRlZCBmaWxlcyBhcmUgbm93IGluc3RhbGxlZCBpbnRvIGEgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhlIG1hY2hpbmUsIGluc3RlYWQgb2YgYSBwYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGNvbnRhaW5pbmcgb3V0cHV0IGZpbGVzIGZvciBtdWx0aXBsZSBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX0lNQUdFJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9JTUFHRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBjb250aW51ZXMgdG8gcG9pbnQgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nCisgICAgICAgICAgICAgICAgICAgIGltYWdlcyBmb3IgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCBzaG91bGQgYmUgdXNlZCBhbnl3aGVyZSB0aGVyZSBpcyBhIG5lZWQgdG8gcmVmZXIgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhpcyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IHNjcmlwdCBub3cgdXNlcyB0aGlzCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGZpbmQgaW1hZ2VzIGFuZCBrZXJuZWwgYmluYXJpZXMgYW5kIHdpbGwgdXNlCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgdG8gZGV0ZXJtaW5lIHRoZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQTE9ZX0RJUl9JTUFHRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBleHRlcm5hbCBlbnZpcm9ubWVudC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRoaXN0b3J5IGlzIGVuYWJsZWQsIGl0cyBvdXRwdXQgaXMgbm93IHdyaXR0ZW4KKyAgICAgICAgICAgICAgICAgICAgdW5kZXIgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgRG9pbmcgc28gbWFrZXMgaXQgZWFzaWVyIHRvIGRlbGV0ZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gYW5kIHByZXNlcnZlIHRoZSBidWlsZCBoaXN0b3J5LgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIGRhdGEgZm9yIHByb2R1Y2VkIFNES3MgaXMgbm93IHNwbGl0IGJ5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9OQU1FJz48ZmlsZW5hbWU+SU1BR0VfTkFNRTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnBrZ2RhdGE8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgcHJvZHVjZWQgYXMKKyAgICAgICAgICAgICAgICAgICAgcGFydCBvZiB0aGUgcGFja2FnaW5nIHByb2Nlc3MgaGFzIGJlZW4gY29sbGFwc2VkIGludG8gYQorICAgICAgICAgICAgICAgICAgICBzaW5nbGUgbWFjaGluZS1zcGVjaWZpYyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGlzIGxvY2F0ZWQgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN5c3Jvb3RzPC9maWxlbmFtZT4gYW5kIHVzZXMgYSBtYWNoaW5lLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgIG5hbWUgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9zeXNyb290cy88cmVwbGFjZWFibGU+bWFjaGluZTwvcmVwbGFjZWFibGU+L3BrZ2RhdGE8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1zaG9ydGVuZWQtZ2l0LXNyY3Jldi12YWx1ZXMnPgorICAgICAgICA8dGl0bGU+U2hvcnRlbmVkIEdpdCA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4gVmFsdWVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2Ugd2lsbCBub3cgc2hvcnRlbiByZXZpc2lvbnMgZnJvbSBHaXQgcmVwb3NpdG9yaWVzIGZyb20gdGhlCisgICAgICAgICAgICBub3JtYWwgNDAgY2hhcmFjdGVycyBkb3duIHRvIDEwIGNoYXJhY3RlcnMgd2l0aGluCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDUFYnPjxmaWxlbmFtZT5TUkNQVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgZm9yIGltcHJvdmVkIHVzYWJpbGl0eSBpbiBwYXRoIGFuZCBmaWxlIG5hbWVzLgorICAgICAgICAgICAgVGhpcyBjaGFuZ2Ugc2hvdWxkIGJlIHNhZmUgd2l0aGluIGNvbnRleHRzIHdoZXJlIHRoZXNlIHJldmlzaW9ucworICAgICAgICAgICAgYXJlIHVzZWQgYmVjYXVzZSB0aGUgY2hhbmNlcyBvZiBzcGF0aWFsbHkgY2xvc2UgY29sbGlzaW9ucworICAgICAgICAgICAgaXMgdmVyeSBsb3cuCisgICAgICAgICAgICBEaXN0YW50IGNvbGxpc2lvbnMgYXJlIG5vdCBhIG1ham9yIGlzc3VlIGluIHRoZSB3YXkKKyAgICAgICAgICAgIHRoZSB2YWx1ZXMgYXJlIHVzZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1pbWFnZS1mZWF0dXJlcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdGhhdCByZWxhdGUgdG8KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBub3cgdmFsaWRhdGVkIHRvIGVuc3VyZSBpbnZhbGlkIGZlYXR1cmUgaXRlbXMgYXJlIG5vdAorICAgICAgICAgICAgICAgICAgICBhZGRlZC4KKyAgICAgICAgICAgICAgICAgICAgU29tZSB1c2VycyBtaXN0YWtlbmx5IGFkZCBwYWNrYWdlIG5hbWVzIHRvIHRoaXMgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB1c2luZworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfSU5TVEFMTCc+PGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgdG8gaGF2ZSB0aGUgcGFja2FnZSBhZGRlZCB0byB0aGUgaW1hZ2UsIHdoaWNoIGRvZXMKKyAgICAgICAgICAgICAgICAgICAgbm90IHdvcmsuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY2hhbmdlIGlzIGludGVuZGVkIHRvIGNhdGNoIHRob3NlIGtpbmRzIG9mIHNpdHVhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIFZhbGlkIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IGFyZSBkcmF3biBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0dST1VQJz48ZmlsZW5hbWU+UEFDS0FHRV9HUk9VUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPTVBMRU1FTlRBUllfR0xPQic+PGZpbGVuYW1lPkNPTVBMRU1FTlRBUllfR0xPQjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgYSBuZXcgInZhbGlkaXRlbXMiIHZhcmZsYWcgb24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZSAidmFsaWRpdGVtcyIgdmFyZmxhZyBjaGFuZ2UgYWxsb3dzIGFkZGl0aW9uYWwgZmVhdHVyZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgYWRkZWQgaWYgdGhleSBhcmUgbm90IHByb3ZpZGVkIHVzaW5nIHRoZSBwcmV2aW91cworICAgICAgICAgICAgICAgICAgICB0d28gbWVjaGFuaXNtcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXNseSBkZXByZWNhdGVkICJhcHBzLWNvbnNvbGUtY29yZSIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gaXRlbSBpcyBubyBsb25nZXIKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAgICAgICBBZGQgInNwbGFzaCIgdG8gPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gaWYgeW91CisgICAgICAgICAgICAgICAgICAgIHdpc2ggdG8gaGF2ZSB0aGUgc3BsYXNoIHNjcmVlbiBlbmFibGVkLCBzaW5jZSB0aGlzIGlzCisgICAgICAgICAgICAgICAgICAgIGFsbCB0aGF0IGFwcHMtY29uc29sZS1jb3JlIHdhcyBkb2luZy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtcnVuJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT4vcnVuPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT4vcnVuPC9maWxlbmFtZT4gZGlyZWN0b3J5IGZyb20gdGhlIEZpbGVzeXN0ZW0KKyAgICAgICAgICAgIEhpZXJhcmNoeSBTdGFuZGFyZCAzLjAgaGFzIGJlZW4gaW50cm9kdWNlZC4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBzb21lIG9mIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoaXMgY2hhbmdlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vY2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2NvbW1pdC8/aWQ9MGUzMjYyODBhMTViMGYyYzRlZjJlZjRlYzQ0MWY2M2Y1NWI3NTg3Myc+aGVyZTwvdWxpbms+LgorICAgICAgICAgICAgVGhlIGNoYW5nZSBhbHNvIG1lYW5zIHRoYXQgcmVjaXBlcyB0aGF0IGluc3RhbGwgZmlsZXMgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT4vdmFyL3J1bjwvZmlsZW5hbWU+IG11c3QgYmUgY2hhbmdlZC4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhIGd1aWRlIG9uIGhvdyB0byBtYWtlIHRoZXNlIGNoYW5nZXMKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9wZXJtYWxpbmsuZ21hbmUub3JnL2dtYW5lLmNvbXAuaGFuZGhlbGRzLm9wZW5lbWJlZGRlZC81ODUzMCc+aGVyZTwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtcmVtb3ZhbC1vZi1wYWNrYWdlLW1hbmFnZXItZGF0YWJhc2Utd2l0aGluLWltYWdlLXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+UmVtb3ZhbCBvZiBQYWNrYWdlIE1hbmFnZXIgRGF0YWJhc2UgV2l0aGluIEltYWdlIFJlY2lwZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGltYWdlIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBubyBsb25nZXIgYWRkcworICAgICAgICAgICAgPGZpbGVuYW1lPnJlbW92ZV9wYWNrYWdpbmdfZGF0YV9maWxlczwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQnPjxmaWxlbmFtZT5ST09URlNfUE9TVFBST0NFU1NfQ09NTUFORDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgIFRoaXMgYWRkaXRpb24gaXMgbm93IGhhbmRsZWQgYXV0b21hdGljYWxseSB3aGVuICJwYWNrYWdlLW1hbmFnZW1lbnQiCisgICAgICAgICAgICBpcyBub3QgaW4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgSWYgeW91IGhhdmUgY3VzdG9tIGltYWdlIHJlY2lwZXMgdGhhdCBtYWtlIHRoaXMgYWRkaXRpb24sCisgICAgICAgICAgICB5b3Ugc2hvdWxkIHJlbW92ZSB0aGUgbGluZXMsIGFzIHRoZXkgYXJlIG5vdCBuZWVkZWQgYW5kIG1pZ2h0CisgICAgICAgICAgICBpbnRlcmZlcmUgd2l0aCBjb3JyZWN0IG9wZXJhdGlvbiBvZiBwb3N0aW5zdGFsbCBzY3JpcHRzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtaW1hZ2VzLW5vdy1yZWJ1aWxkLW9ubHktb24tY2hhbmdlcy1pbnN0ZWFkLW9mLWV2ZXJ5LXRpbWUnPgorICAgICAgICA8dGl0bGU+SW1hZ2VzIE5vdyBSZWJ1aWxkIE9ubHkgb24gQ2hhbmdlcyBJbnN0ZWFkIG9mIEV2ZXJ5IFRpbWU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3Mtcm9vdGZzJz48ZmlsZW5hbWU+ZG9fcm9vdGZzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQgb3RoZXIgcmVsYXRlZCBpbWFnZQorICAgICAgICAgICAgY29uc3RydWN0aW9uIHRhc2tzIGFyZSBubyBsb25nZXIgbWFya2VkIGFzICJub3N0YW1wIi4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdGhleSB3aWxsIG9ubHkgYmUgcmUtZXhlY3V0ZWQgd2hlbiB0aGVpciBpbnB1dHMgaGF2ZQorICAgICAgICAgICAgY2hhbmdlZC4KKyAgICAgICAgICAgIFByZXZpb3VzIHZlcnNpb25zIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFsd2F5cyByZWJ1aWx0CisgICAgICAgICAgICB0aGUgaW1hZ2Ugd2hlbiByZXF1ZXN0ZWQgcmF0aGVyIHdoZW4gbmVjZXNzYXJ5LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtdGFzay1yZWNpcGVzJz4KKyAgICAgICAgPHRpdGxlPlRhc2sgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgcHJldmlvdXNseSBkZXByZWNhdGVkIDxmaWxlbmFtZT50YXNrLmJiY2xhc3M8L2ZpbGVuYW1lPiBoYXMKKyAgICAgICAgICAgIG5vdyBiZWVuIGRyb3BwZWQuCisgICAgICAgICAgICBGb3IgcmVjaXBlcyB0aGF0IHByZXZpb3VzbHkgaW5oZXJpdGVkIGZyb20gdGhpcyBjbGFzcywgeW91IHNob3VsZAorICAgICAgICAgICAgcmVuYW1lIHRoZW0gZnJvbSA8ZmlsZW5hbWU+dGFzay0qPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtKjwvZmlsZW5hbWU+IGFuZCBpbmhlcml0IHBhY2thZ2Vncm91cAorICAgICAgICAgICAgaW5zdGVhZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlZ3JvdXAnPjxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1idXN5Ym94Jz4KKyAgICAgICAgPHRpdGxlPkJ1c3lCb3g8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgd2Ugbm93IHNwbGl0IEJ1c3lCb3ggaW50byB0d28gYmluYXJpZXM6CisgICAgICAgICAgICBvbmUgdGhhdCBpcyBzdWlkIHJvb3QgZm9yIHRob3NlIGNvbXBvbmVudHMgdGhhdCBuZWVkIGl0LCBhbmQKKyAgICAgICAgICAgIGFub3RoZXIgZm9yIHRoZSByZXN0IG9mIHRoZSBjb21wb25lbnRzLgorICAgICAgICAgICAgU3BsaXR0aW5nIEJ1c3lCb3ggYWxsb3dzIGZvciBvcHRpbWl6YXRpb24gdGhhdCBlbGltaW5hdGVzIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnRpbnlsb2dpbjwvZmlsZW5hbWU+IHJlY2lwZSBhcyByZWNvbW1lbmRlZCBieSB1cHN0cmVhbS4KKyAgICAgICAgICAgIFlvdSBjYW4gZGlzYWJsZSB0aGlzIHNwbGl0IGJ5IHNldHRpbmcKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVVNZQk9YX1NQTElUX1NVSUQnPjxmaWxlbmFtZT5CVVNZQk9YX1NQTElUX1NVSUQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRvICIwIi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS41LWF1dG9tYXRlZC1pbWFnZS10ZXN0aW5nJz4KKyAgICAgICAgPHRpdGxlPkF1dG9tYXRlZCBJbWFnZSBUZXN0aW5nPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgbmV3IGF1dG9tYXRlZCBpbWFnZSB0ZXN0aW5nIGZyYW1ld29yayBoYXMgYmVlbiBhZGRlZAorICAgICAgICAgICAgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXRlc3RpbWFnZSc+PGZpbGVuYW1lPnRlc3RpbWFnZSouYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICBUaGlzIGZyYW1ld29yayByZXBsYWNlcyB0aGUgb2xkZXIKKyAgICAgICAgICAgIDxmaWxlbmFtZT5pbWFnZXRlc3QtcWVtdTwvZmlsZW5hbWU+IGZyYW1ld29yay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IHBlcmZvcm1pbmcgYXV0b21hdGVkIGltYWdlIHRlc3RzIGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BlcmZvcm1pbmctYXV0b21hdGVkLXJ1bnRpbWUtdGVzdGluZyc+UGVyZm9ybWluZyBBdXRvbWF0ZWQgUnVudGltZSBUZXN0aW5nPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtYnVpbGQtaGlzdG9yeSc+CisgICAgICAgIDx0aXRsZT5CdWlsZCBIaXN0b3J5PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgY2hhbmdlcyB0byBCdWlsZCBIaXN0b3J5OgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsZWQgcGFja2FnZSBzaXplczoKKyAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbnN0YWxsZWQtcGFja2FnZS1zaXplcy50eHQ8L2ZpbGVuYW1lPiBmb3IgYW4KKyAgICAgICAgICAgICAgICAgICAgIGltYWdlIG5vdyByZWNvcmRzIHRoZSBzaXplIG9mIHRoZSBmaWxlcyBpbnN0YWxsZWQgYnkgZWFjaAorICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBpbnN0ZWFkIG9mIHRoZSBzaXplIG9mIGVhY2ggY29tcHJlc3NlZCBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICBhcmNoaXZlIGZpbGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVwZW5kZW5jeSBncmFwaHMgKDxmaWxlbmFtZT5kZXBlbmRzKi5kb3Q8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgbm93IHVzZSB0aGUgYWN0dWFsIHBhY2thZ2UgbmFtZXMgaW5zdGVhZCBvZiByZXBsYWNpbmcKKyAgICAgICAgICAgICAgICAgICAgZGFzaGVzLCBkb3RzIGFuZCBwbHVzIHNpZ25zIHdpdGggdW5kZXJzY29yZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5idWlsZGhpc3RvcnktZGlmZjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5LWNvbGxlY3Qtc3JjcmV2czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHV0aWxpdGllcyBoYXZlIGltcHJvdmVkIGNvbW1hbmQtbGluZSBoYW5kbGluZy4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+LS1oZWxwPC9maWxlbmFtZT4gb3B0aW9uIGZvcgorICAgICAgICAgICAgICAgICAgICBlYWNoIHV0aWxpdHkgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIG5ldyBzeW50YXguCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBCdWlsZCBIaXN0b3J5LCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbWFpbnRhaW5pbmctYnVpbGQtb3V0cHV0LXF1YWxpdHknPk1haW50YWluaW5nIEJ1aWxkIE91dHB1dCBRdWFsaXR5PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS11ZGV2Jz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT51ZGV2PC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBjaGFuZ2VzIHRvIDxmaWxlbmFtZT51ZGV2PC9maWxlbmFtZT46CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVkZXY8L2ZpbGVuYW1lPiBubyBsb25nZXIgYnJpbmdzIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51ZGV2LWV4dHJhY29uZjwvZmlsZW5hbWU+IGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgc2luY2UgdGhpcyB3YXMgb3JpZ2luYWxseSBpbnRlbmRlZCB0byBiZSBvcHRpb25hbC4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdGhlIGV4dHJhIHJ1bGVzLCB0aGVuIGFkZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dWRldi1leHRyYWNvbmY8L2ZpbGVuYW1lPiB0byB5b3VyIGltYWdlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51ZGV2PC9maWxlbmFtZT4gbm8gbG9uZ2VyIGJyaW5ncyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGNpdXRpbHMtaWRzPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVzYnV0aWxzLWlkczwvZmlsZW5hbWU+IHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGFyZSBub3QgbmVlZGVkIGJ5IDxmaWxlbmFtZT51ZGV2PC9maWxlbmFtZT4gaXRzZWxmCisgICAgICAgICAgICAgICAgICAgIGFuZCByZW1vdmluZyB0aGVtIHNhdmVzIGFyb3VuZCAzNTBLQi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS41LXJlbW92ZWQtcmVuYW1lZC1yZWNpcGVzJz4KKyAgICAgICAgPHRpdGxlPlJlbW92ZWQgYW5kIFJlbmFtZWQgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmxpbnV4LXlvY3RvPC9maWxlbmFtZT4gMy4yIGtlcm5lbCBoYXMgYmVlbgorICAgICAgICAgICAgICAgIHJlbW92ZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYnRvb2wtbmF0aXZlc2RrPC9maWxlbmFtZT4gaGFzIGJlZW4gcmVuYW1lZCB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGstbGlidG9vbDwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50aW55bG9naW48L2ZpbGVuYW1lPiBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgICAgICAgICAgIEl0IGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGEgc3VpZCBwb3J0aW9uIG9mIEJ1c3lib3guCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdtaWdyYXRpb24tMS41LWJ1c3lib3gnPkJ1c3lCb3g8L2xpbms+IiBzZWN0aW9uCisgICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4dGVybmFsLXB5dGhvbi10YXJiYWxsPC9maWxlbmFtZT4gaGFzIGJlZW4gcmVuYW1lZAorICAgICAgICAgICAgICAgIHRvIDxmaWxlbmFtZT5idWlsZHRvb2xzLXRhcmJhbGw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ViLXdlYmtpdDwvZmlsZW5hbWU+IGhhcyBiZWVuIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgSXQgaGFzIGJlZW4gZnVuY3Rpb25hbGx5IHJlcGxhY2VkIGJ5CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1pZG9yaTwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbWFrZTwvZmlsZW5hbWU+IGhhcyBiZWVuIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgSXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBieSBhbnkgb3RoZXIgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50cmFuc2ZpZy1uYXRpdmU8L2ZpbGVuYW1lPiBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgICAgICAgICAgIEl0IGlzIG5vIGxvbmdlciBuZWVkZWQgYnkgYW55IG90aGVyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YW5qdXRhLXJlbW90ZS1ydW48L2ZpbGVuYW1lPiBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgICAgICAgICAgIEFuanV0YSBJREUgaW50ZWdyYXRpb24gaGFzIG5vdCBiZWVuIG9mZmljaWFsbHkgc3VwcG9ydGVkIGZvcgorICAgICAgICAgICAgICAgIHNldmVyYWwgcmVsZWFzZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS41LW90aGVyLWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+T3RoZXIgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYSBsaXN0IG9mIHNob3J0IGVudHJpZXMgZGVzY3JpYmluZyBvdGhlciBjaGFuZ2VzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW4tcG9zdGluc3RzPC9maWxlbmFtZT46IE1ha2UgdGhpcyBnZW5lcmljLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNlLWZpbGVzPC9maWxlbmFtZT46IFJlbW92ZSB0aGUgdW5uZWNlc3NhcnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1lZGlhLzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnh4eDwvcmVwbGFjZWFibGU+IGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hbHNhLXN0YXRlPC9maWxlbmFtZT46IFByb3ZpZGUgYW4gZW1wdHkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFzb3VuZC5jb25mPC9maWxlbmFtZT4gYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xhc3Nlcy9pbWFnZTwvZmlsZW5hbWU+OiBFbnN1cmUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJBRF9SRUNPTU1FTkRBVElPTlMnPjxmaWxlbmFtZT5CQURfUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRzIHByZS1yZW5hbWVkIHBhY2thZ2UgbmFtZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xhc3Nlcy9yb290ZnNfcnBtPC9maWxlbmFtZT46IEltcGxlbWVudAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkFEX1JFQ09NTUVOREFUSU9OUyc+PGZpbGVuYW1lPkJBRF9SRUNPTU1FTkRBVElPTlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIFJQTS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zeXN0ZW1kPC9maWxlbmFtZT46IFJlbW92ZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzdGVtZF91bml0ZGlyPC9maWxlbmFtZT4gaWYKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN5c3RlbWQ8L2ZpbGVuYW1lPiBpcyBub3QgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+OiBSZW1vdmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluaXQuZDwvZmlsZW5hbWU+IGRpciBpZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+IHVuaXQgZmlsZSBpcyBwcmVzZW50IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzdmluaXQ8L2ZpbGVuYW1lPiBpcyBub3QgYSBkaXN0cm8gZmVhdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlicGFtPC9maWxlbmFtZT46IERlbnkgYWxsIHNlcnZpY2VzIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk9USEVSPC9maWxlbmFtZT4gZW50cmllcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW1hZ2UuYmJjbGFzczwvZmlsZW5hbWU+OiBNb3ZlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW50aW1lX21hcHBpbmdfcmVuYW1lPC9maWxlbmFtZT4gdG8gYXZvaWQKKyAgICAgICAgICAgICAgICAgICAgY29uZmxpY3Qgd2l0aCA8ZmlsZW5hbWU+bXVsdGlsaWI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgU2VlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk5Myc+PGZpbGVuYW1lPllPQ1RPICM0OTkzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBpbiBCdWd6aWxsYSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgtZHRiPC9maWxlbmFtZT46IFVzZSBrZXJuZWwgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHRvIGdlbmVyYXRlIHRoZSA8ZmlsZW5hbWU+ZHRiPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmtlcm4tdG9vbHM8L2ZpbGVuYW1lPjogU3dpdGNoIGZyb20gZ3VpbHQgdG8KKyAgICAgICAgICAgICAgICAgICAgbmV3IDxmaWxlbmFtZT5rZ2l0LXMycTwvZmlsZW5hbWU+IHRvb2wuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdtb3ZpbmctdG8tdGhlLXlvY3RvLXByb2plY3QtMS42LXJlbGVhc2UnPgorICAgIDx0aXRsZT5Nb3ZpbmcgdG8gdGhlIFlvY3RvIFByb2plY3QgMS42IFJlbGVhc2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBtaWdyYXRpb24gaW5mb3JtYXRpb24gZm9yIG1vdmluZyB0byB0aGUKKyAgICAgICAgWW9jdG8gUHJvamVjdCAxLjYgUmVsZWFzZSBmcm9tIHRoZSBwcmlvciByZWxlYXNlLgorICAgIDwvcGFyYT4KKworCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtYXJjaGl2ZXItY2xhc3MnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmFyY2hpdmVyPC9maWxlbmFtZT4gQ2xhc3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hcmNoaXZlcic+PGZpbGVuYW1lPmFyY2hpdmVyPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcyBoYXMgYmVlbiByZXdyaXR0ZW4gYW5kIGl0cyBjb25maWd1cmF0aW9uIGhhcyBiZWVuIHNpbXBsaWZpZWQuCisgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBzb3VyY2UgYXJjaGl2ZXIsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtYWludGFpbmluZy1vcGVuLXNvdXJjZS1saWNlbnNlLWNvbXBsaWFuY2UtZHVyaW5nLXlvdXItcHJvZHVjdHMtbGlmZWN5Y2xlJz5NYWludGFpbmluZyBPcGVuIFNvdXJjZSBMaWNlbnNlIENvbXBsaWFuY2UgRHVyaW5nIFlvdXIgUHJvZHVjdCdzIExpZmVjeWNsZTwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1wYWNrYWdpbmctY2hhbmdlcyc+CisgICAgICAgIDx0aXRsZT5QYWNrYWdpbmcgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHBhY2thZ2luZyBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmludXRpbHM8L2ZpbGVuYW1lPiByZWNpcGUgbm8gbG9uZ2VyIHByb2R1Y2VzCisgICAgICAgICAgICAgICAgICAgIGEgPGZpbGVuYW1lPmJpbnV0aWxzLXN5bWxpbmtzPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXM8L2ZpbGVuYW1lPiBpcyBub3cgdXNlZCB0bworICAgICAgICAgICAgICAgICAgICBoYW5kbGUgdGhlIHByZWZlcnJlZCA8ZmlsZW5hbWU+YmludXRpbHM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYW50IG9uIHRoZSB0YXJnZXQgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdGMgKHRyYWZmaWMgY29udHJvbCkgdXRpbGl0aWVzIGhhdmUgYmVlbiBzcGxpdCBvdXQgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIG1haW4gPGZpbGVuYW1lPmlwcm91dGUyPC9maWxlbmFtZT4gcGFja2FnZSBhbmQgcHV0CisgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIDxmaWxlbmFtZT5pcHJvdXRlMi10YzwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5ndGstZW5naW5lczwvZmlsZW5hbWU+IHNjaGVtYXMgaGF2ZSBiZWVuCisgICAgICAgICAgICAgICAgICAgIG1vdmVkIHRvIGEgZGVkaWNhdGVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ndGstZW5naW5lcy1zY2hlbWFzPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmFybXY3YTwvZmlsZW5hbWU+IHdpdGggdGh1bWIgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgc3VmZml4IGhhcyBjaGFuZ2VkLgorICAgICAgICAgICAgICAgICAgICBUaGUgc3VmZml4IGZvciB0aGVzZSBwYWNrYWdlcyB3aXRoIHRoZSB0aHVtYgorICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb24gZW5hYmxlZCBpcyAidDIiIGFzIGl0IHNob3VsZCBiZS4KKyAgICAgICAgICAgICAgICAgICAgVXNlIG9mIHRoaXMgc3VmZml4IHdhcyBub3QgdGhlIGNhc2UgaW4gdGhlIDEuNSByZWxlYXNlLgorICAgICAgICAgICAgICAgICAgICBBcmNoaXRlY3R1cmUgbmFtZXMgd2lsbCBjaGFuZ2Ugd2l0aGluIHBhY2thZ2UgZmVlZHMgYXMgYQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1iaXRiYWtlJz4KKyAgICAgICAgPHRpdGxlPkJpdEJha2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LW1hdGNoaW5nLWJyYW5jaC1yZXF1aXJlbWVudC1mb3ItZ2l0LWZldGNoaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5NYXRjaGluZyBCcmFuY2ggUmVxdWlyZW1lbnQgZm9yIEdpdCBGZXRjaGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gZmV0Y2hpbmcgc291cmNlIGZyb20gYSBHaXQgcmVwb3NpdG9yeSB1c2luZworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICBCaXRCYWtlIHdpbGwgbm93IHZhbGlkYXRlIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YWx1ZSBhZ2FpbnN0IHRoZSBicmFuY2guCisgICAgICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IHRoZSBicmFuY2ggdXNpbmcgdGhlIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJnaXQ6Ly9zZXJ2ZXIubmFtZS9yZXBvc2l0b3J5O2JyYW5jaD08cmVwbGFjZWFibGU+YnJhbmNobmFtZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSBicmFuY2gsIEJpdEJha2UgbG9va3MKKyAgICAgICAgICAgICAgICBpbiB0aGUgZGVmYXVsdCAibWFzdGVyIiBicmFuY2guCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIGlmIHlvdSBuZWVkIHRvIGJ5cGFzcyB0aGlzIGNoZWNrIChlLmcuCisgICAgICAgICAgICAgICAgaWYgeW91IGFyZSBmZXRjaGluZyBhIHJldmlzaW9uIGNvcnJlc3BvbmRpbmcgdG8gYSB0YWcgdGhhdAorICAgICAgICAgICAgICAgIGlzIG5vdCBvbiBhbnkgYnJhbmNoKSwgeW91IGNhbiBhZGQgIjtub2JyYW5jaD0xIiB0bworICAgICAgICAgICAgICAgIHRoZSBlbmQgb2YgdGhlIFVSTCB3aXRoaW4gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LWJpdGJha2UtZGVwcyc+CisgICAgICAgICAgICA8dGl0bGU+UHl0aG9uIERlZmluaXRpb24gc3Vic3RpdHV0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgaGFkIHNvbWUgcHJldmlvdXNseSBkZXByZWNhdGVkIFB5dGhvbiBkZWZpbml0aW9ucworICAgICAgICAgICAgICAgIHdpdGhpbiBpdHMgPGZpbGVuYW1lPmJiPC9maWxlbmFtZT4gbW9kdWxlIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgWW91IHNob3VsZCB1c2UgdGhlaXIgc3ViLW1vZHVsZSBjb3VudGVycGFydHMgaW5zdGVhZDoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJiLk1hbGZvcm1lZFVybDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT5iYi5mZXRjaC5NYWxmb3JtZWRVcmw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJiLmZldGNoLmVuY29kZXVybDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT5iYi5mZXRjaC5lbmNvZGV1cmw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJiLmRlY29kZXVybDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT5iYi5mZXRjaC5kZWNvZGV1cmw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YmIubWtkaXJoaWVyPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgPGZpbGVuYW1lPmJiLnV0aWxzLm1rZGlyaGllcjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YmIubW92ZWZpbGU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSA8ZmlsZW5hbWU+YmIudXRpbHMubW92ZWZpbGU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJiLmNvcHlmaWxlPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgPGZpbGVuYW1lPmJiLnV0aWxzLmNvcHlmaWxlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5iYi53aGljaDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT5iYi51dGlscy53aGljaDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YmIudmVyY21wX3N0cmluZzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT5iYi51dGlscy52ZXJjbXBfc3RyaW5nPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5iYi52ZXJjbXA8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSA8ZmlsZW5hbWU+YmIudXRpbHMudmVyY21wPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LWJpdGJha2UtZmV0Y2hlcic+CisgICAgICAgICAgICA8dGl0bGU+U1ZLIEZldGNoZXI8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgU1ZLIGZldGNoZXIgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIEJpdEJha2UuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1iaXRiYWtlLWNvbnNvbGUtb3V0cHV0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5Db25zb2xlIE91dHB1dCBFcnJvciBSZWRpcmVjdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBCaXRCYWtlIGNvbnNvbGUgVUkgd2lsbCBub3cgb3V0cHV0IGVycm9ycyB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zdGRlcnI8L2ZpbGVuYW1lPiBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN0ZG91dDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaWYgeW91IGFyZSBwaXBpbmcgb3IgcmVkaXJlY3RpbmcgdGhlIG91dHB1dCBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gdG8gc29tZXdoZXJlIGVsc2UsIGFuZCB5b3Ugd2lzaAorICAgICAgICAgICAgICAgIHRvIHJldGFpbiB0aGUgZXJyb3JzLCB5b3Ugd2lsbCBuZWVkIHRvIGFkZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4yPiZhbXA7MTwvZmlsZW5hbWU+IChvciBzb21ldGhpbmcgc2ltaWxhcikgdG8gdGhlCisgICAgICAgICAgICAgICAgZW5kIG9mIHlvdXIgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGxpbmUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi10YXNrLXRhc2tuYW1lLW92ZXJyaWRlcyc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnRhc2stPC9maWxlbmFtZT48cmVwbGFjZWFibGU+dGFza25hbWU8L3JlcGxhY2VhYmxlPiBPdmVycmlkZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGFzay08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+IG92ZXJyaWRlcyBoYXZlIGJlZW4KKyAgICAgICAgICAgICAgICBhZGp1c3RlZCBzbyB0aGF0IHRhc2tzIHdob3NlIG5hbWVzIGNvbnRhaW4gdW5kZXJzY29yZXMgaGF2ZSB0aGUKKyAgICAgICAgICAgICAgICB1bmRlcnNjb3JlcyByZXBsYWNlZCBieSBoeXBoZW5zIGZvciB0aGUgb3ZlcnJpZGUgc28gdGhhdCB0aGV5CisgICAgICAgICAgICAgICAgbm93IGZ1bmN0aW9uIHByb3Blcmx5LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgdGFzayBvdmVycmlkZSBmb3IKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcG9wdWxhdGVfc2RrJz48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgaXMgPGZpbGVuYW1lPnRhc2stcG9wdWxhdGUtc2RrPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi12YXJpYWJsZS1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPkNoYW5nZXMgdG8gVmFyaWFibGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGhhdmUgY2hhbmdlZC4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB2YXJpYWJsZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtdmFyaWFibGVzLWdsb3MnPlZhcmlhYmxlcyBHbG9zc2FyeTwvbGluaz4iIENoYXB0ZXIuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi12YXJpYWJsZS1jaGFuZ2VzLVRNUERJUic+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNhbiBubyBsb25nZXIgYmUgb24gYW4gTkZTIG1vdW50LgorICAgICAgICAgICAgICAgIE5GUyBkb2VzIG5vdCBvZmZlciBmdWxsIFBPU0lYIGxvY2tpbmcgYW5kIGlub2RlIGNvbnNpc3RlbmN5CisgICAgICAgICAgICAgICAgYW5kIGNhbiBjYXVzZSB1bmV4cGVjdGVkIGlzc3VlcyBpZiB1c2VkIHRvIHN0b3JlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgY2hlY2sgZm9yIHRoaXMgb2NjdXJzIG9uIHN0YXJ0dXAuCisgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+IGlzIGRldGVjdGVkIG9uIGFuIE5GUyBtb3VudCwKKyAgICAgICAgICAgICAgICBhbiBlcnJvciBvY2N1cnMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi12YXJpYWJsZS1jaGFuZ2VzLVBSSU5DJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+UFJJTkM8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UFJJTkM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIHRyaWdnZXJzIGEgd2FybmluZyBpZgorICAgICAgICAgICAgICAgIGRldGVjdGVkIGR1cmluZyBhIGJ1aWxkLgorICAgICAgICAgICAgICAgIEZvcgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgaW5jcmVtZW50cyBvbiBjaGFuZ2VzLCB1c2UgdGhlIFBSIHNlcnZpY2UgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgb3V0IG1vcmUgYWJvdXQgdGhpcyBzZXJ2aWNlIGluIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN3b3JraW5nLXdpdGgtYS1wci1zZXJ2aWNlJz5Xb3JraW5nIFdpdGggYSBQUiBTZXJ2aWNlPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi12YXJpYWJsZS1jaGFuZ2VzLUlNQUdFX1RZUEVTJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+SU1BR0VfVFlQRVM8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSAic3VtLmpmZnMyIiBvcHRpb24gZm9yCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgImpmZnMyLnN1bSIgb3B0aW9uLCB3aGljaCBmaXRzIHRoZQorICAgICAgICAgICAgICAgIHByb2Nlc3Npbmcgb3JkZXIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi12YXJpYWJsZS1jaGFuZ2VzLUNPUFlfTElDX01BTklGRVNUJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+Q09QWV9MSUNfTUFOSUZFU1Q8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DT1BZX0xJQ19NQU5JRkVTVCc+PGZpbGVuYW1lPkNPUFlfTElDX01BTklGRVNUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgbXVzdAorICAgICAgICAgICAgICAgIG5vdyBiZSBzZXQgdG8gIjEiIHJhdGhlciB0aGFuIGFueSB2YWx1ZSBpbiBvcmRlciB0byBlbmFibGUKKyAgICAgICAgICAgICAgICBpdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXZhcmlhYmxlLWNoYW5nZXMtQ09QWV9MSUNfRElSUyc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPkNPUFlfTElDX0RJUlM8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DT1BZX0xJQ19ESVJTJz48ZmlsZW5hbWU+Q09QWV9MSUNfRElSUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIG11c3QKKyAgICAgICAgICAgICAgICBub3cgYmUgc2V0IHRvICIxIiByYXRoZXIgdGhhbiBhbnkgdmFsdWUgaW4gb3JkZXIgdG8gZW5hYmxlCisgICAgICAgICAgICAgICAgaXQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi12YXJpYWJsZS1jaGFuZ2VzLVBBQ0tBR0VfR1JPVVAnPgorICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5QQUNLQUdFX0dST1VQPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9HUk9VUCc+PGZpbGVuYW1lPlBBQ0tBR0VfR1JPVVA8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBoYXMgYmVlbiByZW5hbWVkIHRvCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZFQVRVUkVfUEFDS0FHRVMnPjxmaWxlbmFtZT5GRUFUVVJFX1BBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdG8gbW9yZSBhY2N1cmF0ZWx5IHJlZmxlY3QgaXRzIHB1cnBvc2UuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzdGlsbCB1c2UgPGZpbGVuYW1lPlBBQ0tBR0VfR1JPVVA8L2ZpbGVuYW1lPiBidXQKKyAgICAgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwcm9kdWNlcyBhIHdhcm5pbmcgbWVzc2FnZSB3aGVuCisgICAgICAgICAgICAgICAgaXQgZW5jb3VudGVycyB0aGUgdmFyaWFibGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi12YXJpYWJsZS1jaGFuZ2VzLXZhcmlhYmxlLWVudHJ5LWJlaGF2aW9yJz4KKyAgICAgICAgICAgIDx0aXRsZT5QcmVwcm9jZXNzIGFuZCBQb3N0IFByb2Nlc3MgQ29tbWFuZCBWYXJpYWJsZSBCZWhhdmlvcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIG5vdyBleHBlY3QgYSBzZW1pY29sb24gc2VwYXJhdGVkCisgICAgICAgICAgICAgICAgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBhbmQgbm90IGFyYml0cmFyeSBzaGVsbCBjb21tYW5kczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ST09URlNfUFJFUFJPQ0VTU19DT01NQU5EJz5ST09URlNfUFJFUFJPQ0VTU19DT01NQU5EPC9saW5rPgorICAgICA8bGluayBsaW5rZW5kPSd2YXItUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQnPlJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EPC9saW5rPgorICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX1BPU1RQUk9DRVNTX0NPTU1BTkQnPlNES19QT1NUUFJPQ0VTU19DT01NQU5EPC9saW5rPgorICAgICA8bGluayBsaW5rZW5kPSd2YXItUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQnPlBPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EPC9saW5rPgorICAgICA8bGluayBsaW5rZW5kPSd2YXItUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EJz5QT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkQ8L2xpbms+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EJz5JTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EPC9saW5rPgorICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EJz5JTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQ8L2xpbms+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ST09URlNfUE9TVFVOSU5TVEFMTF9DT01NQU5EJz5ST09URlNfUE9TVFVOSU5TVEFMTF9DT01NQU5EPC9saW5rPgorICAgICA8bGluayBsaW5rZW5kPSd2YXItUk9PVEZTX1BPU1RJTlNUQUxMX0NPTU1BTkQnPlJPT1RGU19QT1NUSU5TVEFMTF9DT01NQU5EPC9saW5rPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgbWlncmF0aW9uIHB1cnBvc2VzLCB5b3UgY2FuIHNpbXBseSB3cmFwIHNoZWxsIGNvbW1hbmRzIGluCisgICAgICAgICAgICAgICAgYSBzaGVsbCBmdW5jdGlvbiBhbmQgdGhlbiBjYWxsIHRoZSBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBteV9wb3N0cHJvY2Vzc19mdW5jdGlvbigpIHsKKyAgICAgICAgZWNobyAiaGVsbG8iID4gJHtJTUFHRV9ST09URlN9L2hlbGxvLnR4dAorICAgICB9CisgICAgIFJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICJteV9wb3N0cHJvY2Vzc19mdW5jdGlvbjsgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LWRpcmVjdG9yeS1sYXlvdXQtY2hhbmdlcyc+CisgICAgICAgIDx0aXRsZT5EaXJlY3RvcnkgTGF5b3V0IENoYW5nZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhLWhvYjwvZmlsZW5hbWU+IGxheWVyIGhhcyBiZWVuIHJlbW92ZWQgZnJvbQorICAgICAgICAgICAgdGhlIHRvcC1sZXZlbCBvZiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGxheWVyIGFyZSBubyBsb25nZXIgbmVlZGVkIGJ5IHRoZSBIb2IKKyAgICAgICAgICAgIHVzZXIgaW50ZXJmYWNlIGZvciBidWlsZGluZyBpbWFnZXMgYW5kIHRvb2xjaGFpbnMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1wYWNrYWdlLXRlc3QtcHRlc3QnPgorICAgICAgICA8dGl0bGU+UGFja2FnZSBUZXN0IChwdGVzdCk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUGFja2FnZSBUZXN0cyAocHRlc3QpIGFyZSBidWlsdCBidXQgbm90IGluc3RhbGxlZCBieSBkZWZhdWx0LgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHVzaW5nIFBhY2thZ2UgVGVzdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN0ZXN0aW5nLXBhY2thZ2VzLXdpdGgtcHRlc3QnPlNldHRpbmcgdXAgYW5kIHJ1bm5pbmcgcGFja2FnZSB0ZXN0IChwdGVzdCk8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSA8ZmlsZW5hbWU+cHRlc3Q8L2ZpbGVuYW1lPiBjbGFzcywgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXB0ZXN0Jz48ZmlsZW5hbWU+cHRlc3QuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1idWlsZC1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkIENoYW5nZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU2VwYXJhdGUgYnVpbGQgYW5kIHNvdXJjZSBkaXJlY3RvcmllcyBoYXZlIGJlZW4gZW5hYmxlZAorICAgICAgICAgICAgYnkgZGVmYXVsdCBmb3Igc2VsZWN0ZWQgcmVjaXBlcyB3aGVyZSBpdCBpcyBrbm93biB0byB3b3JrCisgICAgICAgICAgICAoYSB3aGl0ZWxpc3QpIGFuZCBmb3IgYWxsIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtY21ha2UnPjxmaWxlbmFtZT5jbWFrZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICBJbiBmdXR1cmUgcmVsZWFzZXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzIHdpbGwgZW5hYmxlIGEgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IGJ5IGRlZmF1bHQgYXMKKyAgICAgICAgICAgIHdlbGwuCisgICAgICAgICAgICBSZWNpcGVzIGJ1aWxkaW5nIEF1dG90b29scy1iYXNlZAorICAgICAgICAgICAgc29mdHdhcmUgdGhhdCBmYWlscyB0byBidWlsZCB3aXRoIGEgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5CisgICAgICAgICAgICBzaG91bGQgYmUgY2hhbmdlZCB0byBpbmhlcml0IGZyb20gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMtYnJva2Vuc2VwJz48ZmlsZW5hbWU+YXV0b3Rvb2xzLWJyb2tlbnNlcDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MgaW5zdGVhZCBvZiB0aGUgPGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+IGNsYXNzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtYnVpbGRpbmctcWVtdS1uYXRpdmUnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnFlbXUtbmF0aXZlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXUtbmF0aXZlPC9maWxlbmFtZT4gbm93IGJ1aWxkcyB3aXRob3V0CisgICAgICAgICAgICBTREwtYmFzZWQgZ3JhcGhpY2FsIG91dHB1dCBzdXBwb3J0IGJ5IGRlZmF1bHQuCisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgbGluZXMgYXJlIG5lZWRlZCBpbiB5b3VyCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IHRvIGVuYWJsZSBpdDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRUNPTkZJR19wbi1xZW11LW5hdGl2ZSA9ICJzZGwiCisgICAgIEFTU1VNRV9QUk9WSURFRCArPSAibGlic2RsLW5hdGl2ZSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb250YWlucyB0aGVzZSBzdGF0ZW1lbnRzLgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaWYgeW91IGFyZSBidWlsZGluZyBhIGhlYWRsZXNzIHN5c3RlbSBhbmQgdXNpbmcKKyAgICAgICAgICAgICAgICBhIGRlZmF1bHQgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB5b3Ugd2lsbCBuZWVkCisgICAgICAgICAgICAgICAgY29tbWVudCB0aGVzZSB0d28gbGluZXMgb3V0LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtY29yZS1pbWFnZS1iYXNpYyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1iYXNpYzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLWJhc2ljPC9maWxlbmFtZT4gaGFzIGJlZW4gcmVuYW1lZCB0bworICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIGFkZGl0aW9uIHRvIDxmaWxlbmFtZT5jb3JlLWltYWdlLWJhc2ljPC9maWxlbmFtZT4gYmVpbmcgcmVuYW1lZCwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY29yZS1iYXNpYzwvZmlsZW5hbWU+IGhhcyBiZWVuIHJlbmFtZWQgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmU8L2ZpbGVuYW1lPiB0byBtYXRjaC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LWxpY2Vuc2luZyc+CisgICAgICAgIDx0aXRsZT5MaWNlbnNpbmc8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHRvcC1sZXZlbCA8ZmlsZW5hbWU+TElDRU5TRTwvZmlsZW5hbWU+IGZpbGUgaGFzIGJlZW4gY2hhbmdlZAorICAgICAgICAgICAgdG8gYmV0dGVyIGRlc2NyaWJlIHRoZSBsaWNlbnNlIG9mIHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgb2YKKyAgICAgICAgICAgIE9FLUNvcmUuCisgICAgICAgICAgICBIb3dldmVyLCB0aGUgbGljZW5zaW5nIGl0c2VsZiByZW1haW5zIHVuY2hhbmdlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTm9ybWFsbHksIHRoaXMgY2hhbmdlIHdvdWxkIG5vdCBjYXVzZSBhbnkgc2lkZS1lZmZlY3RzLgorICAgICAgICAgICAgSG93ZXZlciwgc29tZSByZWNpcGVzIHBvaW50IHRvIHRoaXMgZmlsZSB3aXRoaW4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNfRklMRVNfQ0hLU1VNJz48ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgKGFzIDxmaWxlbmFtZT4ke0NPUkVCQVNFfS9MSUNFTlNFPC9maWxlbmFtZT4pIGFuZCB0aHVzIHRoZQorICAgICAgICAgICAgYWNjb21wYW55aW5nIGNoZWNrc3VtIG11c3QgYmUgY2hhbmdlZCBmcm9tCisgICAgICAgICAgICAzZjQwZDc5OTQzOTcxMDkyODVlYzdiODFmZGViM2I1OCB0bworICAgICAgICAgICAgNGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAuCisgICAgICAgICAgICBBIGJldHRlciBhbHRlcm5hdGl2ZSBpcyB0byBoYXZlCisgICAgICAgICAgICA8ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+IHBvaW50IHRvIGEgZmlsZQorICAgICAgICAgICAgZGVzY3JpYmluZyB0aGUgbGljZW5zZSB0aGF0IGlzIGRpc3RyaWJ1dGVkIHdpdGggdGhlIHNvdXJjZQorICAgICAgICAgICAgdGhhdCB0aGUgcmVjaXBlIGlzIGJ1aWxkaW5nLCBpZiBwb3NzaWJsZSwgcmF0aGVyIHRoYW4gcG9pbnRpbmcKKyAgICAgICAgICAgIHRvIDxmaWxlbmFtZT4ke0NPUkVCQVNFfS9MSUNFTlNFPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1jZmxhZ3Mtb3B0aW9ucyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+Q0ZMQUdTPC9maWxlbmFtZT4gT3B0aW9uczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgIi1mcGVybWlzc2l2ZSIgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNGTEFHUyc+PGZpbGVuYW1lPkNGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFsdWUuCisgICAgICAgICAgICBZb3UgbmVlZCB0byB0YWtlIGFjdGlvbiBvbiBpbmRpdmlkdWFsIHJlY2lwZXMgdGhhdCBmYWlsIHdoZW4KKyAgICAgICAgICAgIGJ1aWxkaW5nIHdpdGggdGhpcyBvcHRpb24uCisgICAgICAgICAgICBZb3UgbmVlZCB0byBlaXRoZXIgcGF0Y2ggdGhlIHJlY2lwZXMgdG8gZml4IHRoZSBpc3N1ZXMgcmVwb3J0ZWQgYnkKKyAgICAgICAgICAgIHRoZSBjb21waWxlciwgb3IgeW91IG5lZWQgdG8gYWRkICItZnBlcm1pc3NpdmUiIHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+Q0ZMQUdTPC9maWxlbmFtZT4gaW4gdGhlIHJlY2lwZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1jdXN0b20taW1hZ2VzJz4KKyAgICAgICAgPHRpdGxlPkN1c3RvbSBJbWFnZSBPdXRwdXQgVHlwZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3VzdG9tIGltYWdlIG91dHB1dCB0eXBlcywgYXMgc2VsZWN0ZWQgdXNpbmcKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgIG11c3QgZGVjbGFyZSB0aGVpciBkZXBlbmRlbmNpZXMgb24gb3RoZXIgaW1hZ2UgdHlwZXMgKGlmIGFueSkgdXNpbmcKKyAgICAgICAgICAgIGEgbmV3CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfVFlQRURFUCc+PGZpbGVuYW1lPklNQUdFX1RZUEVERVA8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtZG8tcGFja2FnZS13cml0ZS10YXNrJz4KKyAgICAgICAgPHRpdGxlPlRhc2tzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZTwvZmlsZW5hbWU+IHRhc2sgaGFzIGJlZW4gcmVtb3ZlZC4KKyAgICAgICAgICAgIFRoZSB0YXNrIGlzIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi11cGRhdGUtYWx0ZXJuYXRpdmVzLXByb3ZpZGVyJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmU8L2ZpbGVuYW1lPiBQcm92aWRlcjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZGVmYXVsdCA8ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlczwvZmlsZW5hbWU+IHByb3ZpZGVyIGhhcworICAgICAgICAgICAgYmVlbiBjaGFuZ2VkIGZyb20gPGZpbGVuYW1lPm9wa2c8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgPGZpbGVuYW1lPm9wa2ctdXRpbHM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoaXMgY2hhbmdlIHJlc29sdmVzIHNvbWUgdHJvdWJsZXNvbWUgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgVGhlIHJ1bnRpbWUgcGFja2FnZSBoYXMgYWxzbyBiZWVuIHJlbmFtZWQgZnJvbQorICAgICAgICAgICAgPGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXMtY3dvcnRoPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHRvIDxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2c8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXZpcnRjbGFzcy1vdmVycmlkZXMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnZpcnRjbGFzczwvZmlsZW5hbWU+IE92ZXJyaWRlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnZpcnRjbGFzczwvZmlsZW5hbWU+IG92ZXJyaWRlcyBhcmUgbm93IGRlcHJlY2F0ZWQuCisgICAgICAgICAgICBVc2UgdGhlIGVxdWl2YWxlbnQgY2xhc3Mgb3ZlcnJpZGVzIGluc3RlYWQgKGUuZy4KKyAgICAgICAgICAgIDxmaWxlbmFtZT52aXJ0Y2xhc3MtbmF0aXZlPC9maWxlbmFtZT4gYmVjb21lcworICAgICAgICAgICAgPGZpbGVuYW1lPmNsYXNzLW5hdGl2ZTwvZmlsZW5hbWU+LikKKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXJlbW92ZWQtcmVuYW1lZC1yZWNpcGVzJz4KKyAgICAgICAgPHRpdGxlPlJlbW92ZWQgYW5kIFJlbmFtZWQgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHJlY2lwZXMgaGF2ZSBiZWVuIHJlbW92ZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cGFja2FnZWdyb3VwLXRvb2xzZXQtbmF0aXZlPC9maWxlbmFtZT4gLQorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBpcyBsYXJnZWx5IHVudXNlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5saW51eC15b2N0by0zLjg8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIHRoZSBMaW51eCB5b2N0byAzLjgga2VybmVsIGhhcyBiZWVuIGRyb3BwZWQuCisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIHRoZSAzLjEwIGFuZCAzLjE0IGtlcm5lbHMgaGF2ZSBiZWVuIGFkZGVkCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjEwPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE0PC9maWxlbmFtZT4gcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5vY2YtbGludXg8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIGhhcyBiZWVuIGZ1bmN0aW9uYWxseSByZXBsYWNlZCB1c2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y3J5cHRvZGV2LWxpbnV4PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z2VuZXh0MmZzPC9maWxlbmFtZT4gLQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2VuZXh0MmZzPC9maWxlbmFtZT4gaXMgbm8gbG9uZ2VyIHVzZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBhbmQgaXMgdW5tYWludGFpbmVkIHVwc3RyZWFtLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmpzPC9maWxlbmFtZT4gLQorICAgICAgICAgICAgICAgICAgICBUaGlzIHByb3ZpZGVkIGFuIGFuY2llbnQgdmVyc2lvbiBvZiBNb3ppbGxhJ3MgamF2YXNjcmlwdAorICAgICAgICAgICAgICAgICAgICBlbmdpbmUgdGhhdCBpcyBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnphdXJ1c2Q8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgaGFzIGJlZW4gbW92ZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWhhbmRoZWxkPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZWdsaWJjIDIuMTc8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIFJlcGxhY2VkIGJ5IHRoZSA8ZmlsZW5hbWU+ZWdsaWJjIDIuMTk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z2NjIDQuNy4yPC9maWxlbmFtZT4gLQorICAgICAgICAgICAgICAgICAgICBSZXBsYWNlZCBieSB0aGUgbm93IHN0YWJsZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2NjIDQuOC4yPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZXh0ZXJuYWwtc291cmNlcnktdG9vbGNoYWluPC9maWxlbmFtZT4gLQorICAgICAgICAgICAgICAgICAgICB0aGlzIHJlY2lwZSBpcyBub3cgbWFpbnRhaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtc291cmNlcnk8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5saW51eC1saWJjLWhlYWRlcnMteW9jdG8gMy40K2dpdDwvZmlsZW5hbWU+IC0KKyAgICAgICAgICAgICAgICAgICAgTm93IHVzaW5nIHZlcnNpb24gMy4xMCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LWxpYmMtaGVhZGVyczwvZmlsZW5hbWU+IGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+bWV0YS10b29sY2hhaW4tZ21hZTwvZmlsZW5hbWU+IC0KKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgaXMgb2Jzb2xldGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWNvcmUtc2RrLWdtYWU8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIGlzIG9ic29sZXRlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtZ21hZS1zZGstdGFyZ2V0PC9maWxlbmFtZT4gLQorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBpcyBvYnNvbGV0ZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXJlbW92ZWQtY2xhc3Nlcyc+CisgICAgICAgIDx0aXRsZT5SZW1vdmVkIENsYXNzZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjbGFzc2VzIGhhdmUgYmVjb21lIG9ic29sZXRlIGFuZCBoYXZlIGJlZW4gcmVtb3ZlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5tb2R1bGVfc3RyaXA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnBrZ19tZXRhaW5mbzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cGtnX2Rpc3RyaWJ1dGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmltYWdlLWVtcHR5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXJlZmVyZW5jZS1ic3BzJz4KKyAgICAgICAgPHRpdGxlPlJlZmVyZW5jZSBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1BzKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHJlZmVyZW5jZSBCU1BzIGNoYW5nZXMgb2NjdXJyZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgQmVhZ2xlQm9hcmQKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5iZWFnbGVib2FyZDwvZmlsZW5hbWU+KSBBUk0gcmVmZXJlbmNlIGhhcmR3YXJlCisgICAgICAgICAgICAgICAgICAgIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZSBCZWFnbGVCb25lCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+YmVhZ2xlYm9uZTwvZmlsZW5hbWU+KSBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBSb3V0ZXJTdGF0aW9uIFBybworICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPnJvdXRlcnN0YXRpb25wcm88L2ZpbGVuYW1lPikgTUlQUyByZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIEVkZ2VSb3V0ZXIgTGl0ZQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmVkZ2Vyb3V0ZXI8L2ZpbGVuYW1lPikgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBUaGUgcHJldmlvdXMgcmVmZXJlbmNlIEJTUHMgZm9yIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJlYWdsZWJvYXJkPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+cm91dGVyc3RhdGlvbnBybzwvZmlsZW5hbWU+IG1hY2hpbmVzIGFyZSBzdGlsbCBhdmFpbGFibGUKKyAgICAgICAgICAgIGluIGEgbmV3IDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcC1vbGQ8L2ZpbGVuYW1lPiBsYXllciBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOyc+U291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+CisgICAgICAgICAgICBhdAorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvbWV0YS15b2N0by1ic3Atb2xkLyc+aHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvbWV0YS15b2N0by1ic3Atb2xkLzwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nbW92aW5nLXRvLXRoZS15b2N0by1wcm9qZWN0LTEuNy1yZWxlYXNlJz4KKyAgICA8dGl0bGU+TW92aW5nIHRvIHRoZSBZb2N0byBQcm9qZWN0IDEuNyBSZWxlYXNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgbWlncmF0aW9uIGluZm9ybWF0aW9uIGZvciBtb3ZpbmcgdG8gdGhlCisgICAgICAgIFlvY3RvIFByb2plY3QgMS43IFJlbGVhc2UgZnJvbSB0aGUgcHJpb3IgcmVsZWFzZS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNy1jaGFuZ2VzLXRvLXNldHRpbmctcWVtdS1wYWNrYWdlY29uZmlnLW9wdGlvbnMnPgorICAgICAgICA8dGl0bGU+Q2hhbmdlcyB0byBTZXR0aW5nIFFFTVUgPGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPiBPcHRpb25zIGluIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFFFTVUgcmVjaXBlIG5vdyB1c2VzIGEgbnVtYmVyIG9mCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRUNPTkZJRyc+PGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG9wdGlvbnMgdG8gZW5hYmxlIHZhcmlvdXMgb3B0aW9uYWwgZmVhdHVyZXMuCisgICAgICAgICAgICBUaGUgbWV0aG9kIHVzZWQgdG8gc2V0IGRlZmF1bHRzIGZvciB0aGVzZSBvcHRpb25zIG1lYW5zIHRoYXQKKyAgICAgICAgICAgIGV4aXN0aW5nCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGVzIHdpbGwgbmVlZCB0byBiZSBiZQorICAgICAgICAgICAgbW9kaWZpZWQgdG8gYXBwZW5kIHRvIDxmaWxlbmFtZT5QQUNLQUdFQ09ORklHPC9maWxlbmFtZT4gZm9yCisgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdS1uYXRpdmU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGstcWVtdTwvZmlsZW5hbWU+IGluc3RlYWQgb2Ygc2V0dGluZyBpdC4KKyAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0byBlbmFibGUgZ3JhcGhpY2FsIG91dHB1dCBmb3IgUUVNVSwgeW91IHNob3VsZAorICAgICAgICAgICAgbm93IGhhdmUgdGhlc2UgbGluZXMgaW4gPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRUNPTkZJR19hcHBlbmRfcG4tcWVtdS1uYXRpdmUgPSAiIHNkbCIKKyAgICAgUEFDS0FHRUNPTkZJR19hcHBlbmRfcG4tbmF0aXZlc2RrLXFlbXUgPSAiIHNkbCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS43LW1pbmltdW0tZ2l0LXZlcnNpb24nPgorICAgICAgICA8dGl0bGU+TWluaW11bSBHaXQgdmVyc2lvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbWluaW11bQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiB2ZXJzaW9uIHJlcXVpcmVkCisgICAgICAgICAgICBvbiB0aGUgYnVpbGQgaG9zdCBpcyBub3cgMS43LjggYmVjYXVzZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT4tLWxpc3Q8L2ZpbGVuYW1lPiBvcHRpb24gaXMgbm93IHJlcXVpcmVkIGJ5CisgICAgICAgICAgICBCaXRCYWtlJ3MgR2l0IGZldGNoZXIuCisgICAgICAgICAgICBBcyBhbHdheXMsIGlmIHlvdXIgaG9zdCBkaXN0cmlidXRpb24gZG9lcyBub3QgcHJvdmlkZSBhIHZlcnNpb24gb2YKKyAgICAgICAgICAgIEdpdCB0aGF0IG1lZXRzIHRoaXMgcmVxdWlyZW1lbnQsIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkdG9vbHMtdGFyYmFsbDwvZmlsZW5hbWU+IHRoYXQgZG9lcy4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZXF1aXJlZC1naXQtdGFyLWFuZC1weXRob24tdmVyc2lvbnMnPlJlcXVpcmVkIEdpdCwgdGFyLCBhbmQgUHl0aG9uIFZlcnNpb25zPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNy1hdXRvdG9vbHMtY2xhc3MtY2hhbmdlcyc+CisgICAgICAgIDx0aXRsZT5BdXRvdG9vbHMgQ2xhc3MgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzIGNoYW5nZXMgb2NjdXJyZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEEgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IGlzIG5vdyB1c2VkIGJ5IGRlZmF1bHQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPiBjbGFzcyBoYXMgYmVlbiBjaGFuZ2VkCisgICAgICAgICAgICAgICAgICAgIHRvIHVzZSBhIGRpcmVjdG9yeSBmb3IgYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1CJz48ZmlsZW5hbWU+QjwvZmlsZW5hbWU+PC9saW5rPiksCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIHNlcGFyYXRlIGZyb20gdGhlIHNvdXJjZSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgY29tbW9ubHkgcmVmZXJyZWQgdG8gYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkIgIT0gUzwvZmlsZW5hbWU+LCBvciBhbiBvdXQtb2YtdHJlZSBidWlsZC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCBpcyBhbHJlYWR5IGNhcGFibGUgb2YKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgaW4gYSBkaXJlY3Rvcnkgc2VwYXJhdGUgZnJvbSB0aGUgc291cmNlLCB5b3UKKyAgICAgICAgICAgICAgICAgICAgZG8gbm90IG5lZWQgdG8gZG8gYW55dGhpbmcuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHRoZSBzb2Z0d2FyZSBpcyBub3QgY2FwYWJsZSBvZiBiZWluZyBidWlsdAorICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIG1hbm5lciwgeW91IHdpbGwKKyAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBlaXRoZXIgcGF0Y2ggdGhlIHNvZnR3YXJlIHNvIHRoYXQgaXQgY2FuIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRlbHksIG9yIHlvdSB3aWxsIG5lZWQgdG8gY2hhbmdlIHRoZSByZWNpcGUgdG8KKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXV0b3Rvb2xzLWJyb2tlbnNlcCc+PGZpbGVuYW1lPmF1dG90b29scy1icm9rZW5zZXA8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgaW5zdGVhZCBvZiB0aGUgPGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+IGNsYXNzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPi0tZm9yZWlnbjwvZmlsZW5hbWU+IG9wdGlvbiBpcworICAgICAgICAgICAgICAgICAgICBubyBsb25nZXIgcGFzc2VkIHRvIDxmaWxlbmFtZT5hdXRvbWFrZTwvZmlsZW5hbWU+IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgcnVubmluZyA8ZmlsZW5hbWU+YXV0b2NvbmY8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiB0ZWxscyA8ZmlsZW5hbWU+YXV0b21ha2U8L2ZpbGVuYW1lPiB0aGF0IGEKKyAgICAgICAgICAgICAgICAgICAgcGFydGljdWxhciBzb2Z0d2FyZSBwYWNrYWdlIGRvZXMgbm90IGZvbGxvdyB0aGUgR05VCisgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkcyBhbmQgdGhlcmVmb3JlIHNob3VsZCBub3QgYmUgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gZGlzdHJpYnV0ZSBjZXJ0YWluIGZpbGVzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNoYW5nZUxvZzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QVVUSE9SUzwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIG1ham9yaXR5IG9mIHVwc3RyZWFtIHNvZnR3YXJlIHBhY2thZ2VzIGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgdGVsbCA8ZmlsZW5hbWU+YXV0b21ha2U8L2ZpbGVuYW1lPiB0byBlbmFibGUgZm9yZWlnbiBtb2RlCisgICAgICAgICAgICAgICAgICAgIHRoZW1zZWx2ZXMsIHRoZSBvcHRpb24gaXMgbW9zdGx5IHN1cGVyZmx1b3VzLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBzb21lIHJlY2lwZXMgd2lsbCBuZWVkIHBhdGNoZXMgZm9yIHRoaXMgY2hhbmdlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGVhc2lseSBtYWtlIHRoZSBjaGFuZ2UgYnkgcGF0Y2hpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmZpZ3VyZS5hYzwvZmlsZW5hbWU+IHNvIHRoYXQgaXQgcGFzc2VzCisgICAgICAgICAgICAgICAgICAgICJmb3JlaWduIiB0byA8ZmlsZW5hbWU+QU1fSU5JVF9BVVRPTUFLRSgpPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFNlZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vY2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2NvbW1pdC8/aWQ9MDE5NDMxODhmODVjZTY0MTE3MTdmYjViZjcwMmQ2MDlmNTU4MTNmMic+dGhpcyBjb21taXQ8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgYW4gZXhhbXBsZSBzaG93aW5nIGhvdyB0byBtYWtlIHRoZSBwYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS43LWJpbmFyeS1jb25maWd1cmF0aW9uLXNjcmlwdHMtZGlzYWJsZWQnPgorICAgICAgICA8dGl0bGU+QmluYXJ5IENvbmZpZ3VyYXRpb24gU2NyaXB0cyBEaXNhYmxlZDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTb21lIG9mIHRoZSBjb3JlIHJlY2lwZXMgdGhhdCBwYWNrYWdlIGJpbmFyeSBjb25maWd1cmF0aW9uIHNjcmlwdHMKKyAgICAgICAgICAgIG5vdyBkaXNhYmxlIHRoZSBzY3JpcHRzIGR1ZSB0byB0aGUKKyAgICAgICAgICAgIHNjcmlwdHMgcHJldmlvdXNseSByZXF1aXJpbmcgZXJyb3ItcHJvbmUgcGF0aCBzdWJzdGl0dXRpb24uCisgICAgICAgICAgICBTb2Z0d2FyZSB0aGF0IGxpbmtzIGFnYWluc3QgdGhlc2UgbGlicmFyaWVzIHVzaW5nIHRoZXNlIHNjcmlwdHMKKyAgICAgICAgICAgIHNob3VsZCB1c2UgdGhlIG11Y2ggbW9yZSByb2J1c3QgPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgaW5zdGVhZC4KKyAgICAgICAgICAgIFRoZSBsaXN0IG9mIHJlY2lwZXMgY2hhbmdlZCBpbiB0aGlzIHZlcnNpb24gKGFuZCB0aGVpcgorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBzY3JpcHRzKSBpcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkaXJlY3RmYiAoZGlyZWN0ZmItY29uZmlnKQorICAgICBmcmVldHlwZSAoZnJlZXR5cGUtY29uZmlnKQorICAgICBncGdtZSAoZ3BnbWUtY29uZmlnKQorICAgICBsaWJhc3N1YW4gKGxpYmFzc3Vhbi1jb25maWcpCisgICAgIGxpYmNyb2NvIChjcm9jby02LjAtY29uZmlnKQorICAgICBsaWJnY3J5cHQgKGxpYmdjcnlwdC1jb25maWcpCisgICAgIGxpYmdwZy1lcnJvciAoZ3BnLWVycm9yLWNvbmZpZykKKyAgICAgbGlia3NiYSAoa3NiYS1jb25maWcpCisgICAgIGxpYnBjYXAgKHBjYXAtY29uZmlnKQorICAgICBsaWJwY3JlIChwY3JlLWNvbmZpZykKKyAgICAgbGlicG5nIChsaWJwbmctY29uZmlnLCBsaWJwbmcxNi1jb25maWcpCisgICAgIGxpYnNkbCAoc2RsLWNvbmZpZykKKyAgICAgbGlidXNiLWNvbXBhdCAobGlidXNiLWNvbmZpZykKKyAgICAgbGlieG1sMiAoeG1sMi1jb25maWcpCisgICAgIGxpYnhzbHQgKHhzbHQtY29uZmlnKQorICAgICBuY3Vyc2VzIChuY3Vyc2VzLWNvbmZpZykKKyAgICAgbmVvbiAobmVvbi1jb25maWcpCisgICAgIG5wdGggKG5wdGgtY29uZmlnKQorICAgICBwdGggKHB0aC1jb25maWcpCisgICAgIHRhZ2xpYiAodGFnbGliLWNvbmZpZykKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgc3VwcG9ydCBmb3IgPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPiBoYXMgYmVlbgorICAgICAgICAgICAgYWRkZWQgdG8gc29tZSByZWNpcGVzIGluIHRoZSBwcmV2aW91cyBsaXN0IGluIHRoZSByYXJlIGNhc2VzCisgICAgICAgICAgICB3aGVyZSB0aGUgdXBzdHJlYW0gc29mdHdhcmUgcGFja2FnZSBkb2VzIG5vdCBhbHJlYWR5IHByb3ZpZGUKKyAgICAgICAgICAgIGl0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjctZ2xpYmMtcmVwbGFjZXMtZWdsaWJjJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5lZ2xpYmMgMi4xOTwvZmlsZW5hbWU+IFJlcGxhY2VkIHdpdGggPGZpbGVuYW1lPmdsaWJjIDIuMjA8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZWNhdXNlIDxmaWxlbmFtZT5lZ2xpYmM8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+IHdlcmUgYWxyZWFkeSBmYWlybHkgY2xvc2UsIHRoaXMKKyAgICAgICAgICAgIHJlcGxhY2VtZW50IHNob3VsZCBub3QgcmVxdWlyZSBhbnkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBvdGhlcgorICAgICAgICAgICAgc29mdHdhcmUgdGhhdCBsaW5rcyB0byA8ZmlsZW5hbWU+ZWdsaWJjPC9maWxlbmFtZT4uCisgICAgICAgICAgICBIb3dldmVyLCB0aGVyZSB3ZXJlIGEgbnVtYmVyIG9mIG1pbm9yIGNoYW5nZXMgaW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5nbGliYyAyLjIwPC9maWxlbmFtZT4gdXBzdHJlYW0gdGhhdCBjb3VsZCByZXF1aXJlCisgICAgICAgICAgICBwYXRjaGluZyBzb21lIHNvZnR3YXJlIChlLmcuIHRoZSByZW1vdmFsIG9mIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPl9CU0RfU09VUkNFPC9maWxlbmFtZT4gZmVhdHVyZSB0ZXN0IG1hY3JvKS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGZpbGVuYW1lPmdsaWJjIDIuMjA8L2ZpbGVuYW1lPiByZXF1aXJlcyB2ZXJzaW9uIDIuNi4zMiBvciBncmVhdGVyCisgICAgICAgICAgICBvZiB0aGUgTGludXgga2VybmVsLgorICAgICAgICAgICAgVGh1cywgb2xkZXIga2VybmVscyB3aWxsIG5vIGxvbmdlciBiZSB1c2FibGUgaW4gY29uanVuY3Rpb24gd2l0aCBpdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGZ1bGwgZGV0YWlscyBvbiB0aGUgY2hhbmdlcyBpbiA8ZmlsZW5hbWU+Z2xpYmMgMi4yMDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgc2VlIHRoZSB1cHN0cmVhbSByZWxlYXNlIG5vdGVzCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3NvdXJjZXdhcmUub3JnL21sL2xpYmMtYWxwaGEvMjAxNC0wOS9tc2cwMDA4OC5odG1sJz5oZXJlPC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNy1rZXJuZWwtbW9kdWxlLWF1dG9sb2FkaW5nJz4KKyAgICAgICAgPHRpdGxlPktlcm5lbCBNb2R1bGUgQXV0b2xvYWRpbmc8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItbW9kdWxlX2F1dG9sb2FkJz48ZmlsZW5hbWU+bW9kdWxlX2F1dG9sb2FkXyo8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIGlzIG5vdyBkZXByZWNhdGVkIGFuZCBhIG5ldworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9NT0RVTEVfQVVUT0xPQUQnPjxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX0FVVE9MT0FEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgorICAgICAgICAgICAgQWxzbywKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1tb2R1bGVfY29uZic+PGZpbGVuYW1lPm1vZHVsZV9jb25mXyo8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG11c3Qgbm93IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhIG5ldworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9NT0RVTEVfUFJPQkVDT05GJz48ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9QUk9CRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgVGhlIG5ldyB2YXJpYWJsZXMgbm8gbG9uZ2VyIHJlcXVpcmUgeW91IHRvIHNwZWNpZnkgdGhlIG1vZHVsZSBuYW1lCisgICAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSB2YXJpYWJsZSBuYW1lLgorICAgICAgICAgICAgVGhpcyBjaGFuZ2Ugbm90IG9ubHkgc2ltcGxpZmllcyB1c2FnZSBidXQgYWxzbyBhbGxvd3MgdGhlIHZhbHVlcworICAgICAgICAgICAgb2YgdGhlc2UgdmFyaWFibGVzIHRvIGJlIGFwcHJvcHJpYXRlbHkgaW5jb3Jwb3JhdGVkIGludG8gdGFzaworICAgICAgICAgICAgc2lnbmF0dXJlcyBhbmQgdGh1cyB0cmlnZ2VyIHRoZSBhcHByb3ByaWF0ZSB0YXNrcyB0byByZS1leGVjdXRlCisgICAgICAgICAgICB3aGVuIGNoYW5nZWQuCisgICAgICAgICAgICBZb3Ugc2hvdWxkIHJlcGxhY2UgYW55IHJlZmVyZW5jZXMgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5tb2R1bGVfYXV0b2xvYWRfKjwvZmlsZW5hbWU+IHdpdGgKKyAgICAgICAgICAgIDxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX0FVVE9MT0FEPC9maWxlbmFtZT4sIGFuZCBhZGQgYW55IG1vZHVsZXMKKyAgICAgICAgICAgIGZvciB3aGljaCA8ZmlsZW5hbWU+bW9kdWxlX2NvbmZfKjwvZmlsZW5hbWU+IGlzIHNwZWNpZmllZCB0bworICAgICAgICAgICAgPGZpbGVuYW1lPktFUk5FTF9NT0RVTEVfUFJPQkVDT05GPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX01PRFVMRV9BVVRPTE9BRCc+PGZpbGVuYW1lPktFUk5FTF9NT0RVTEVfQVVUT0xPQUQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9NT0RVTEVfUFJPQkVDT05GJz48ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9QUk9CRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS43LXFhLWNoZWNrLWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+UUEgQ2hlY2sgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNoYW5nZXMgaGF2ZSBvY2N1cnJlZCB0byB0aGUgUUEgY2hlY2sgcHJvY2VzczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIFFBIGNoZWNrcyA8ZmlsZW5hbWU+ZmlsZS1yZGVwczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+YnVpbGQtZGVwczwvZmlsZW5hbWU+IGhhdmUgYmVlbiBhZGRlZCBpbgorICAgICAgICAgICAgICAgICAgICBvcmRlciB0byB2ZXJpZnkgdGhhdCBmaWxlIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkCisgICAgICAgICAgICAgICAgICAgIChlLmcuIHBhY2thZ2UgY29udGFpbnMgYSBzY3JpcHQgcmVxdWlyaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vYmluL2Jhc2g8L2ZpbGVuYW1lPikgYW5kIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIGFyZSBkZWNsYXJlZCwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1xYS1jaGVja3MnPlFBIEVycm9yIGFuZCBXYXJuaW5nIE1lc3NhZ2VzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgY2hhcHRlci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQYWNrYWdlIFFBIGNoZWNrcyBhcmUgbm93IHBlcmZvcm1lZCBkdXJpbmcgYSBuZXcKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2VfcWEnPjxmaWxlbmFtZT5kb19wYWNrYWdlX3FhPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgcmF0aGVyIHRoYW4gYmVpbmcgcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2UnPjxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgIFRoaXMgYWxsb3dzIG1vcmUgcGFyYWxsZWwgZXhlY3V0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNoYW5nZSBpcyB1bmxpa2VseSB0byBiZSBhbiBpc3N1ZSBleGNlcHQgZm9yIGhpZ2hseQorICAgICAgICAgICAgICAgICAgICBjdXN0b21pemVkIHJlY2lwZXMgdGhhdCBkaXNhYmxlIHBhY2thZ2luZyB0YXNrcyB0aGVtc2VsdmVzCisgICAgICAgICAgICAgICAgICAgIGJ5IG1hcmtpbmcgdGhlbSBhcyA8ZmlsZW5hbWU+bm9leGVjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEZvciB0aG9zZSBwYWNrYWdlcywgeW91IHdpbGwgbmVlZCB0byBkaXNhYmxlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGFja2FnZV9xYTwvZmlsZW5hbWU+IHRhc2sgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGaWxlcyBiZWluZyBvdmVyd3JpdHRlbiBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9zeXNyb290Jz48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIG5vdyB0cmlnZ2VyIGFuIGVycm9yIGluc3RlYWQgb2YgYSB3YXJuaW5nLgorICAgICAgICAgICAgICAgICAgICBSZWNpcGVzIHNob3VsZCBub3QgYmUgb3ZlcndyaXRpbmcgZmlsZXMgd3JpdHRlbiB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgc3lzcm9vdCBieSBvdGhlciByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSB0aGVzZSB0eXBlcyBvZiByZWNpcGVzLCB5b3UgbmVlZCB0byBhbHRlciB0aGVtCisgICAgICAgICAgICAgICAgICAgIHNvIHRoYXQgdGhleSBkbyBub3Qgb3ZlcndyaXRlIHRoZXNlIGZpbGVzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IG1pZ2h0IG5vdyByZWNlaXZlIHRoaXMgZXJyb3IgYWZ0ZXIgY2hhbmdlcyBpbgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIG9yIG1ldGFkYXRhIHJlc3VsdGluZyBpbiBvcnBoYW5lZCBmaWxlcworICAgICAgICAgICAgICAgICAgICBiZWluZyBsZWZ0IGluIHRoZSBzeXNyb290LgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gcmVjZWl2ZSB0aGlzIGVycm9yLCB0aGUgd2F5IHRvIHJlc29sdmUgdGhlIGlzc3VlCisgICAgICAgICAgICAgICAgICAgIGlzIHRvIGRlbGV0ZSB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IgdG8gbW92ZSBpdCBvdXQgb2YgdGhlIHdheSBhbmQgdGhlbiByZS1zdGFydCB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIEFueXRoaW5nIHRoYXQgaGFzIGJlZW4gZnVsbHkgYnVpbHQgdXAgdG8gdGhhdCBwb2ludCBhbmQKKyAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgbmVlZCByZWJ1aWxkaW5nIHdpbGwgYmUgcmVzdG9yZWQgZnJvbSB0aGUgc2hhcmVkCisgICAgICAgICAgICAgICAgICAgIHN0YXRlIGNhY2hlIGFuZCB0aGUgcmVzdCBvZiB0aGUgYnVpbGQgd2lsbCBiZSBhYmxlIHRvCisgICAgICAgICAgICAgICAgICAgIHByb2NlZWQgYXMgbm9ybWFsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjctcmVtb3ZlZC1yZWNpcGVzJz4KKyAgICAgICAgPHRpdGxlPlJlbW92ZWQgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHJlY2lwZXMgaGF2ZSBiZWVuIHJlbW92ZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPngtbG9hZDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBoYXMgYmVlbiBzdXBlcnNlZGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIFUtYm9vdCBTUEwgZm9yIGFsbCBDb3J0ZXgtYmFzZWQgVEkgU29Dcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGxlZ2FjeSBib2FyZHMsIHRoZSA8ZmlsZW5hbWU+bWV0YS10aTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGxheWVyLCB3aGljaCBjb250YWlucyBhIG1haW50YWluZWQgcmVjaXBlLCBzaG91bGQgYmUgdXNlZAorICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51Ym9vdGNoYXJ0PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIGlzIG9ic29sZXRlLgorICAgICAgICAgICAgICAgICAgICBBIDxmaWxlbmFtZT5ib290Y2hhcnQyPC9maWxlbmFtZT4gcmVjaXBlIGhhcyBiZWVuIGFkZGVkCisgICAgICAgICAgICAgICAgICAgIHRvIGZ1bmN0aW9uYWxseSByZXBsYWNlIGl0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0byAzLjQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgdGhlIGxpbnV4LXlvY3RvIDMuNCBrZXJuZWwgaGFzIGJlZW4gZHJvcHBlZC4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgdGhlIDMuMTAgYW5kIDMuMTQga2VybmVscyByZW1haW5zLCB3aGlsZQorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciB2ZXJzaW9uIDMuMTcgaGFzIGJlZW4gYWRkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmVnbGliYzwvZmlsZW5hbWU+IGhhcyBiZWVuIHJlbW92ZWQgaW4gZmF2b3Igb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21pZ3JhdGlvbi0xLjctZ2xpYmMtcmVwbGFjZXMtZWdsaWJjJz48ZmlsZW5hbWU+ZWdsaWJjIDIuMTk8L2ZpbGVuYW1lPiBSZXBsYWNlZCB3aXRoIDxmaWxlbmFtZT5nbGliYyAyLjIwPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjctbWlzY2VsbGFuZW91cy1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPk1pc2NlbGxhbmVvdXMgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIG1pc2NlbGxhbmVvdXMgY2hhbmdlIG9jY3VycmVkOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBoaXN0b3J5IGZlYXR1cmUgbm93IHdyaXRlcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQtaWQudHh0PC9maWxlbmFtZT4gaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQtaWQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCA8ZmlsZW5hbWU+YnVpbGQtaWQudHh0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbm93IGNvbnRhaW5zIHRoZSBmdWxsIGJ1aWxkIGhlYWRlciBhcyBwcmludGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgdXBvbiBzdGFydGluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgbWFudWFsbHkgcmVtb3ZlIG9sZCAiYnVpbGQtaWQiIGZpbGVzIGZyb20geW91cgorICAgICAgICAgICAgICAgICAgICBleGlzdGluZyBidWlsZCBoaXN0b3J5IHJlcG9zaXRvcmllcyB0byBhdm9pZCBjb25mdXNpb24uCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgYnVpbGQgaGlzdG9yeSBmZWF0dXJlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdtYWludGFpbmluZy1idWlsZC1vdXRwdXQtcXVhbGl0eSc+TWFpbnRhaW5pbmcgQnVpbGQgT3V0cHV0IFF1YWxpdHk8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nbW92aW5nLXRvLXRoZS15b2N0by1wcm9qZWN0LTEuOC1yZWxlYXNlJz4KKyAgICA8dGl0bGU+TW92aW5nIHRvIHRoZSBZb2N0byBQcm9qZWN0IDEuOCBSZWxlYXNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgbWlncmF0aW9uIGluZm9ybWF0aW9uIGZvciBtb3ZpbmcgdG8gdGhlCisgICAgICAgIFlvY3RvIFByb2plY3QgMS44IFJlbGVhc2UgZnJvbSB0aGUgcHJpb3IgcmVsZWFzZS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuOC1yZW1vdmVkLXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+UmVtb3ZlZCBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcmVjaXBlcyBoYXZlIGJlZW4gcmVtb3ZlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5vd2wtdmlkZW88L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSByZXBsYWNlZCBieSA8ZmlsZW5hbWU+Z3N0LXBsYXllcjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdha3U8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSByZXBsYWNlZCBieSA8ZmlsZW5hbWU+Z3N0LXBsYXllcjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdub21lLWRlc2t0b3A8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgaXMgbm93IGF2YWlsYWJsZSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1nbm9tZTwvZmlsZW5hbWU+IGFuZCBpcyBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgaXMgbm93IGF2YWlsYWJsZSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1nbm9tZTwvZmlsZW5hbWU+IGFuZCBpcyBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnB5dGhvbi1hcmdwYXJzZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmFyZ3BhcnNlPC9maWxlbmFtZT4gbW9kdWxlIGlzIGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgaW4gdGhlIGRlZmF1bHQgUHl0aG9uIGRpc3RyaWJ1dGlvbiBpbiBhCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbmFtZWQgPGZpbGVuYW1lPnB5dGhvbi1hcmdwYXJzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHRoZSBzZXBhcmF0ZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cHl0aG9uLWFyZ3BhcnNlPC9maWxlbmFtZT4gcmVjaXBlIGlzIG5vCisgICAgICAgICAgICAgICAgICAgIGxvbmdlciBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+dGVsZXBhdGh5LXB5dGhvbiwgbGlidGVsZXBhdGh5LCB0ZWxlcGF0aHktZ2xpYiwgdGVsZXBhdGh5LWlkbGUsIHRlbGVwYXRoeS1taXNzaW9uLWNvbnRyb2w8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgQWxsIHRoZXNlIHJlY2lwZXMgaGF2ZSBtb3ZlZCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1vZTwvZmlsZW5hbWU+IGFuZCBhcmUgY29uc2VxdWVudGx5IG5vCisgICAgICAgICAgICAgICAgICAgIGxvbmdlciBuZWVkZWQgYnkgYW55IHJlY2lwZXMgaW4gT3BlbkVtYmVkZGVkLUNvcmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+bGludXgteW9jdG9fMy4xMDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+bGludXgteW9jdG9fMy4xNzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGZvciB0aGUgbGludXgteW9jdG8gMy4xMCBhbmQgMy4xNyBrZXJuZWxzIGhhcyBiZWVuCisgICAgICAgICAgICAgICAgICAgIGRyb3BwZWQuCisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIHRoZSAzLjE0IGtlcm5lbCByZW1haW5zLCB3aGlsZSBzdXBwb3J0IGZvcgorICAgICAgICAgICAgICAgICAgICAzLjE5IGtlcm5lbCBoYXMgYmVlbiBhZGRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5wb2t5LWZlZWQtY29uZmlnLW9wa2c8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgaGFzIGJlY29tZSBvYnNvbGV0ZSBhbmQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT5kaXN0cm8tZmVlZC1jb25maWc8L2ZpbGVuYW1lPiBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gaW5zdGVhZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5saWJhdiAwLjgueDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliYXYgOS54PC9maWxlbmFtZT4gaXMgbm93IHVzZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+c2VkLW5hdGl2ZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBObyBsb25nZXIgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICBBIHdvcmtpbmcgdmVyc2lvbiBvZiA8ZmlsZW5hbWU+c2VkPC9maWxlbmFtZT4gaXMgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgcHJvdmlkZWQgYnkgdGhlIGhvc3QgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjgtYmx1ZXonPgorICAgICAgICA8dGl0bGU+Qmx1ZVogNC54IC8gNS54IFNlbGVjdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBQcm9wZXIgYnVpbHQtaW4gc3VwcG9ydCBmb3Igc2VsZWN0aW5nIEJsdWVaIDUueCBpbiBwcmVmZXJlbmNlCisgICAgICAgICAgICB0byB0aGUgZGVmYXVsdCBvZiA0Lnggbm93IGV4aXN0cy4KKyAgICAgICAgICAgIFRvIHVzZSBCbHVlWiA1LngsIHNpbXBseSBhZGQgImJsdWV6NSIgdG8geW91cgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFsdWUuCisgICAgICAgICAgICBJZiB5b3UgaGFkIHByZXZpb3VzbHkgYWRkZWQgYXBwZW5kIGZpbGVzCisgICAgICAgICAgICAoPGZpbGVuYW1lPiouYmJhcHBlbmQ8L2ZpbGVuYW1lPikgdG8gbWFrZSB0aGlzIHNlbGVjdGlvbiwgeW91IGNhbgorICAgICAgICAgICAgbm93IHJlbW92ZSB0aGVtLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBZGRpdGlvbmFsbHksIGEKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJsdWV0b290aCc+PGZpbGVuYW1lPmJsdWV0b290aDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MgaGFzIGJlZW4gYWRkZWQgdG8gbWFrZSBzZWxlY3Rpb24gb2YgdGhlIGFwcHJvcHJpYXRlIGJsdWV0b290aAorICAgICAgICAgICAgc3VwcG9ydCB3aXRoaW4gYSByZWNpcGUgYSBsaXR0bGUgZWFzaWVyLgorICAgICAgICAgICAgSWYgeW91IHdpc2ggdG8gbWFrZSB1c2Ugb2YgdGhpcyBjbGFzcyBpbiBhIHJlY2lwZSwgYWRkIHNvbWV0aGluZworICAgICAgICAgICAgc3VjaCBhcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpbmhlcml0IGJsdWV0b290aAorICAgICBQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnJHtCTFVFWn0nLCAnJywgZCl9CisgICAgIFBBQ0tBR0VDT05GSUdbYmx1ZXo0XSA9ICItLWVuYWJsZS1ibHVldG9vdGgsLS1kaXNhYmxlLWJsdWV0b290aCxibHVlejQiCisgICAgIFBBQ0tBR0VDT05GSUdbYmx1ZXo1XSA9ICItLWVuYWJsZS1ibHVlejUsLS1kaXNhYmxlLWJsdWV6NSxibHVlejUiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuOC1rZXJuZWwtYnVpbGQtY2hhbmdlcyc+CisgICAgICAgIDx0aXRsZT5LZXJuZWwgQnVpbGQgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUga2VybmVsIGJ1aWxkIHByb2Nlc3Mgd2FzIGNoYW5nZWQgdG8gcGxhY2UgdGhlIHNvdXJjZQorICAgICAgICAgICAgaW4gYSBjb21tb24gc2hhcmVkIHdvcmsgYXJlYSBhbmQgdG8gcGxhY2UgYnVpbGQgYXJ0aWZhY3RzCisgICAgICAgICAgICBzZXBhcmF0ZWx5IGluIHRoZSBzb3VyY2UgY29kZSB0cmVlLgorICAgICAgICAgICAgSW4gdGhlb3J5LCBtaWdyYXRpb24gcGF0aHMgaGF2ZSBiZWVuIHByb3ZpZGVkIGZvciBtb3N0IGNvbW1vbgorICAgICAgICAgICAgdXNhZ2VzIGluIGtlcm5lbCByZWNpcGVzIGJ1dCB0aGlzIG1pZ2h0IG5vdCB3b3JrIGluIGFsbCBjYXNlcy4KKyAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHVzZXJzIG5lZWQgdG8gZW5zdXJlIHRoYXQKKyAgICAgICAgICAgIDxmaWxlbmFtZT4ke1N9PC9maWxlbmFtZT4gKHNvdXJjZSBmaWxlcykgYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHtCfTwvZmlsZW5hbWU+IChidWlsZCBhcnRpZmFjdHMpIGFyZSB1c2VkCisgICAgICAgICAgICBjb3JyZWN0bHkgaW4gZnVuY3Rpb25zIHN1Y2ggYXMKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgRm9yIGtlcm5lbCByZWNpcGVzIHRoYXQgZG8gbm90IGluaGVyaXQgZnJvbQorICAgICAgICAgICAgPGZpbGVuYW1lPmtlcm5lbC15b2N0bzwvZmlsZW5hbWU+IG9yIGluY2x1ZGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by5pbmM8L2ZpbGVuYW1lPiwgeW91IG1pZ2h0IHdpc2ggdG8KKyAgICAgICAgICAgIHJlZmVyIHRvIHRoZSA8ZmlsZW5hbWU+bGludXguaW5jPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gbGF5ZXIgZm9yIHRoZSBraW5kcyBvZiBjaGFuZ2VzIHlvdQorICAgICAgICAgICAgbmVlZCB0byBtYWtlLgorICAgICAgICAgICAgRm9yIHJlZmVyZW5jZSwgaGVyZSBpcyB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvbWV0YS1vcGVuZW1iZWRkZWQvY29tbWl0L21ldGEtb2UvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXguaW5jP2lkPWZjNzEzMmVkZTI3YWM2NzY2OTQ0OGQzZDI4NDVjZTdkNDZjNmExZWUnPmNvbW1pdDwvdWxpbms+CisgICAgICAgICAgICB3aGVyZSB0aGUgPGZpbGVuYW1lPmxpbnV4LmluYzwvZmlsZW5hbWU+IGZpbGUgaW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gd2FzIHVwZGF0ZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJlY2lwZXMgdGhhdCByZWx5IG9uIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgYW5kIGRvIG5vdCBpbmhlcml0CisgICAgICAgICAgICB0aGUgbW9kdWxlIGNsYXNzZXMgbWlnaHQgbmVlZCB0byBhZGQgZXhwbGljaXQgZGVwZW5kZW5jaWVzIG9uCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmRvX3NoYXJlZF93b3JrZGlyPC9maWxlbmFtZT4ga2VybmVsIHRhc2ssIGZvciBleGFtcGxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19jb25maWd1cmVbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3NoYXJlZF93b3JrZGlyIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjgtc3NsJz4KKyAgICAgICAgPHRpdGxlPlNTTCAzLjAgaXMgTm93IERpc2FibGVkIGluIE9wZW5TU0w8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU1NMIDMuMCBpcyBub3cgZGlzYWJsZWQgd2hlbiBidWlsZGluZyBPcGVuU1NMLgorICAgICAgICAgICAgRGlzYWJsaW5nIFNTTCAzLjAgYXZvaWRzIGFueSBsaW5nZXJpbmcgaW5zdGFuY2VzIG9mIHRoZSBQT09ETEUKKyAgICAgICAgICAgIHZ1bG5lcmFiaWxpdHkuCisgICAgICAgICAgICBJZiB5b3UgZmVlbCB5b3UgbXVzdCByZS1lbmFibGUgU1NMIDMuMCwgdGhlbiB5b3UgY2FuIGFkZCBhbgorICAgICAgICAgICAgYXBwZW5kIGZpbGUgKDxmaWxlbmFtZT4qLmJiYXBwZW5kPC9maWxlbmFtZT4pIGZvciB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5vcGVuc3NsPC9maWxlbmFtZT4gcmVjaXBlIHRvIHJlbW92ZSAiLW5vLXNzbDMiCisgICAgICAgICAgICBmcm9tCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfT0VDT05GJz48ZmlsZW5hbWU+RVhUUkFfT0VDT05GPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjgtZGVmYXVsdC1zeXNyb290LXBvaXNvbmluZyc+CisgICAgICAgIDx0aXRsZT5EZWZhdWx0IFN5c3Jvb3QgUG9pc29uaW5nPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5nY2MnczwvZmlsZW5hbWU+IGRlZmF1bHQgc3lzcm9vdCBhbmQgaW5jbHVkZSBkaXJlY3RvcmllcworICAgICAgICAgICAgYXJlIG5vdyAicG9pc29uZWQiLgorICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBzeXNyb290IGFuZCBpbmNsdWRlIGRpcmVjdG9yaWVzIGFyZSBiZWluZworICAgICAgICAgICAgcmVkaXJlY3RlZCB0byBhIG5vbi1leGlzdGVudCBsb2NhdGlvbiBpbiBvcmRlciB0byBjYXRjaCB3aGVuCisgICAgICAgICAgICBob3N0IGRpcmVjdG9yaWVzIGFyZSBiZWluZyB1c2VkIGR1ZSB0byB0aGUgY29ycmVjdCBvcHRpb25zIG5vdAorICAgICAgICAgICAgYmVpbmcgcGFzc2VkLgorICAgICAgICAgICAgVGhpcyBwb2lzb25pbmcgYXBwbGllcyBib3RoIHRvIHRoZSBjcm9zcy1jb21waWxlciB1c2VkIHdpdGhpbiB0aGUKKyAgICAgICAgICAgIGJ1aWxkIGFuZCB0byB0aGUgY3Jvc3MtY29tcGlsZXIgcHJvZHVjZWQgaW4gdGhlIFNESy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgdGhpcyBjaGFuZ2UgY2F1c2VzIHNvbWV0aGluZyBpbiB0aGUgYnVpbGQgdG8gZmFpbCwgaXQgYWxtb3N0CisgICAgICAgICAgICBjZXJ0YWlubHkgbWVhbnMgdGhlIHZhcmlvdXMgY29tcGlsZXIgZmxhZ3MgYW5kIGNvbW1hbmRzIGFyZSBub3QKKyAgICAgICAgICAgIGJlaW5nIHBhc3NlZCBjb3JyZWN0bHkgdG8gdGhlIHVuZGVybHlpbmcgcGllY2Ugb2Ygc29mdHdhcmUuCisgICAgICAgICAgICBJbiBzdWNoIGNhc2VzLCB5b3UgbmVlZCB0byB0YWtlIGNvcnJlY3RpdmUgc3RlcHMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuOC1yZWJ1aWxkLWltcHJvdmVtZW50cyc+CisgICAgICAgIDx0aXRsZT5SZWJ1aWxkIEltcHJvdmVtZW50czwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYmFzZSc+PGZpbGVuYW1lPmJhc2U8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWNtYWtlJz48ZmlsZW5hbWU+Y21ha2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzZXMgdG8gY2xlYW4gb3V0IGdlbmVyYXRlZCBmaWxlcyB3aGVuIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzayBuZWVkcyB0byBiZSByZS1leGVjdXRlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25lIG9mIHRoZSBpbXByb3ZlbWVudHMgaXMgdG8gYXR0ZW1wdCB0byBydW4gIm1ha2UgY2xlYW4iIGR1cmluZworICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPiB0YXNrIGlmIGEKKyAgICAgICAgICAgIDxmaWxlbmFtZT5NYWtlZmlsZTwvZmlsZW5hbWU+IGV4aXN0cy4KKyAgICAgICAgICAgIFNvbWUgc29mdHdhcmUgcGFja2FnZXMgZG8gbm90IHByb3ZpZGUgYSB3b3JraW5nIGNsZWFuIHRhcmdldAorICAgICAgICAgICAgd2l0aGluIHRoZWlyIG1ha2UgZmlsZXMuCisgICAgICAgICAgICBJZiB5b3UgaGF2ZSBzdWNoIHJlY2lwZXMsIHlvdSBuZWVkIHRvIHNldAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNMRUFOQlJPS0VOJz48ZmlsZW5hbWU+Q0xFQU5CUk9LRU48L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRvICIxIiB3aXRoaW4gdGhlIHJlY2lwZSwgZm9yIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENMRUFOQlJPS0VOID0gIjEiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuOC1xYS1jaGVjay1hbmQtdmFsaWRhdGlvbi1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPlFBIENoZWNrIGFuZCBWYWxpZGF0aW9uIENoYW5nZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBRQSBDaGVjayBhbmQgVmFsaWRhdGlvbiBDaGFuZ2VzIGhhdmUgb2NjdXJyZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNhZ2Ugb2YgPGZpbGVuYW1lPlBSSU5DPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNseSB0cmlnZ2VyZWQgYSB3YXJuaW5nLgorICAgICAgICAgICAgICAgICAgICBJdCBub3cgdHJpZ2dlcnMgYW4gZXJyb3IuCisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgcmVtb3ZlIGFueSByZW1haW5pbmcgdXNhZ2Ugb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSSU5DPC9maWxlbmFtZT4gaW4gYW55IHJlY2lwZSBvciBhcHBlbmQgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbiBhZGRpdGlvbmFsIFFBIGNoZWNrIGhhcyBiZWVuIGFkZGVkIHRvIGRldGVjdCB1c2FnZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtEfTwvZmlsZW5hbWU+IGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyB3aGVyZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRCc+PGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPjwvbGluaz4gdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBub3QgYmUgdXNlZCBhdCBhbGwuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzYW1lIGNoZWNrIGVuc3VyZXMgdGhhdCA8ZmlsZW5hbWU+JEQ8L2ZpbGVuYW1lPiBpcyB1c2VkCisgICAgICAgICAgICAgICAgICAgIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcHJlaW5zdC9wa2dfcG9zdGluc3QvcGtnX3ByZXJtL3BrZ19wb3N0cm08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMgaW5zdGVhZCBvZiA8ZmlsZW5hbWU+JHtEfTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPiBub3cKKyAgICAgICAgICAgICAgICAgICAgbmVlZHMgdG8gYmUgc2V0IHRvIGEgdmFsaWQgdmFsdWUgd2l0aGluIGEgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+UzwvZmlsZW5hbWU+IGlzIG5vdCBzZXQgaW4gdGhlIHJlY2lwZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpcyBub3QgYXV0b21hdGljYWxseSBjcmVhdGVkLgorICAgICAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+UzwvZmlsZW5hbWU+IGRvZXMgbm90IHBvaW50IHRvIGEgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIHRoYXQgZXhpc3RzIGF0IHRoZSB0aW1lIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtdW5wYWNrJz48ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgZmluaXNoZXMsIGEgd2FybmluZyB3aWxsIGJlIHNob3duLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNFTlNFJz48ZmlsZW5hbWU+TElDRU5TRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBub3cgdmFsaWRhdGVkIGZvciBjb3JyZWN0IGZvcm1hdHRpbmcgb2YgbXVsdGlwbGUKKyAgICAgICAgICAgICAgICAgICAgbGljZW5zZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBmb3JtYXQgaXMgaW52YWxpZCAoZS5nLiBtdWx0aXBsZSBsaWNlbnNlcyBhcmUKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHdpdGggbm8gb3BlcmF0b3JzIHRvIHNwZWNpZnkgaG93IHRoZSBtdWx0aXBsZQorICAgICAgICAgICAgICAgICAgICBsaWNlbnNlcyBpbnRlcmFjdCksIHRoZW4gYSB3YXJuaW5nIHdpbGwgYmUgc2hvd24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuOC1taXNjZWxsYW5lb3VzLWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+TWlzY2VsbGFuZW91cyBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbWlzY2VsbGFuZW91cyBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5zZW5kLWVycm9yLXJlcG9ydDwvZmlsZW5hbWU+IHNjcmlwdCBub3cKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0cyBhICItcyIgb3B0aW9uIHRvIGJlIHNwZWNpZmllZCBiZWZvcmUgdGhlIHNlcnZlcgorICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGFzc3VtZXMgYSBzZXJ2ZXIgYWRkcmVzcyBpcyBiZWluZyBzcGVjaWZpZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5vZS1wa2dkYXRhLXV0aWw8L2ZpbGVuYW1lPiBzY3JpcHQgbm93CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdHMgYSAiLXAiIG9wdGlvbiB0byBiZSBzcGVjaWZpZWQgYmVmb3JlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnZGF0YTwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgd2hpY2ggaXMgbm93CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGUgPGZpbGVuYW1lPnBrZ2RhdGE8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaXMgbm90CisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCwgdGhlIHNjcmlwdCB3aWxsIHJ1biBCaXRCYWtlIHRvIHF1ZXJ5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dEQVRBX0RJUic+PGZpbGVuYW1lPlBLR0RBVEFfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1iaXRiYWtlLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1iaXRiYWtlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzQwMmRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWJpdGJha2UueG1sCkBAIC0wLDAgKzEsNDcyIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ncmVmLWJpdGJha2UnPgorCisgICAgPHRpdGxlPkJpdEJha2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEJpdEJha2UgaXMgYSBwcm9ncmFtIHdyaXR0ZW4gaW4gUHl0aG9uIHRoYXQgaW50ZXJwcmV0cyB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4gdXNlZCBieQorICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgQXQgc29tZSBwb2ludCwgZGV2ZWxvcGVycyB3b25kZXIgd2hhdCBhY3R1YWxseSBoYXBwZW5zIHdoZW4geW91IGVudGVyOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNoYXB0ZXIgcHJvdmlkZXMgYW4gb3ZlcnZpZXcgb2Ygd2hhdCBoYXBwZW5zIGJlaGluZCB0aGUgc2NlbmVzIGZyb20gQml0QmFrZSdzIHBlcnNwZWN0aXZlLgorICAgIDwvcGFyYT4KKworICAgIDxub3RlPgorICAgICAgICBCaXRCYWtlIHN0cml2ZXMgdG8gYmUgYSBnZW5lcmljICJ0YXNrIiBleGVjdXRvciB0aGF0IGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgY29tcGxleCBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcHMuCisgICAgICAgIEFzIHN1Y2gsIGl0IGhhcyBubyByZWFsIGtub3dsZWRnZSBvZiB3aGF0IHRoZSB0YXNrcyBiZWluZyBleGVjdXRlZCBhY3R1YWxseSBkby4KKyAgICAgICAgQml0QmFrZSBqdXN0IGNvbnNpZGVycyBhIGxpc3Qgb2YgdGFza3Mgd2l0aCBkZXBlbmRlbmNpZXMgYW5kIGhhbmRsZXMKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgY29uc2lzdGluZyBvZiB2YXJpYWJsZXMgaW4gYSBjZXJ0YWluIGZvcm1hdCB0aGF0IGdldCBwYXNzZWQgdG8gdGhlIHRhc2tzLgorICAgIDwvbm90ZT4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtYml0YmFrZS1wYXJzaW5nJz4KKyAgICAgICAgPHRpdGxlPlBhcnNpbmc8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBwYXJzZXMgY29uZmlndXJhdGlvbiBmaWxlcywgY2xhc3NlcywgYW5kIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZpcnN0IHRoaW5nIEJpdEJha2UgZG9lcyBpcyBsb29rIGZvciB0aGUgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICBUaGlzIGZpbGUgcmVzaWRlcyBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgd2l0aGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mLzwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIEJpdEJha2UgZmluZHMgaXQgYnkgZXhhbWluaW5nIGl0cworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPiBlbnZpcm9ubWVudAorICAgICAgICAgICAgdmFyaWFibGUgYW5kIGxvb2tpbmcgZm9yIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mLzwvZmlsZW5hbWU+CisgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZSBsaXN0cyBvdGhlciBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmaWxlcyB0byBpbmNsdWRlIGZyb20gYSA8ZmlsZW5hbWU+Y29uZi88L2ZpbGVuYW1lPgorICAgICAgICAgICAgZGlyZWN0b3J5IGJlbG93IHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgSW4gZ2VuZXJhbCwgdGhlIG1vc3QgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gZmlsZSBmcm9tIGEgdXNlcidzIHBlcnNwZWN0aXZlCisgICAgICAgICAgICBpcyA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+LCB3aGljaCBjb250YWlucyBhIHVzZXIncyBjdXN0b21pemVkCisgICAgICAgICAgICBzZXR0aW5ncyBmb3IgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIE90aGVyIG5vdGFibGUgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgdGhlIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIChzZXQgYnkgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURJU1RSTyc+RElTVFJPPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlKQorICAgICAgICAgICAgYW5kIHRoZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgKHNldCBieSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+TUFDSElORTwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZSkuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkRJU1RSTzwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+IEJpdEJha2UgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIHZhcmlhYmxlcyBhcmUgYm90aCB1c3VhbGx5IHNldCBpbgorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgIFZhbGlkIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgYXZhaWxhYmxlIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mL2Rpc3Ryby88L2ZpbGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgICAgIGFuZCB2YWxpZCBtYWNoaW5lIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIGZpbGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgV2l0aGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS88L2ZpbGVuYW1lPgorICAgICAgICAgICAgZGlyZWN0b3J5IGFyZSB2YXJpb3VzIDxmaWxlbmFtZT50dW5lLSouaW5jPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IHByb3ZpZGUgY29tbW9uCisgICAgICAgICAgICAidHVuaW5nIiBzZXR0aW5ncyBzcGVjaWZpYyB0byBhbmQgc2hhcmVkIGJldHdlZW4gcGFydGljdWxhciBhcmNoaXRlY3R1cmVzIGFuZCBtYWNoaW5lcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWZ0ZXIgdGhlIHBhcnNpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNvbWUgc3RhbmRhcmQgY2xhc3NlcyBhcmUgaW5jbHVkZWQuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUgaXMgYWx3YXlzIGluY2x1ZGVkLgorICAgICAgICAgICAgT3RoZXIgY2xhc3NlcyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gdXNpbmcgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlOSEVSSVQnPklOSEVSSVQ8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhcmlhYmxlIGFyZSBhbHNvIGluY2x1ZGVkLgorICAgICAgICAgICAgQ2xhc3MgZmlsZXMgYXJlIHNlYXJjaGVkIGZvciBpbiBhIDxmaWxlbmFtZT5jbGFzc2VzPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5CisgICAgICAgICAgICB1bmRlciB0aGUgcGF0aHMgaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IGluIHRoZSBzYW1lIHdheSBhcworICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWZ0ZXIgY2xhc3NlcyBhcmUgaW5jbHVkZWQsIHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVTJz5CQkZJTEVTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICBpcyBzZXQsIHVzdWFsbHkgaW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4sIGFuZCBkZWZpbmVzIHRoZSBsaXN0IG9mIHBsYWNlcyB0byBzZWFyY2ggZm9yCisgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLSovPC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGhpbiBQb2t5LgorICAgICAgICAgICAgQWRkaW5nIGV4dHJhIGNvbnRlbnQgdG8gPGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPiBpcyBiZXN0IGFjaGlldmVkIHRocm91Z2ggdGhlIHVzZSBvZgorICAgICAgICAgICAgQml0QmFrZSBsYXllcnMgYXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZyBhbmQKKyAgICAgICAgICAgIENyZWF0aW5nIExheWVyczwvdWxpbms+IiBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBwYXJzZXMgZWFjaCA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZSBpbiA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgc3RvcmVzIHRoZSB2YWx1ZXMgb2YgdmFyaW91cyB2YXJpYWJsZXMuCisgICAgICAgICAgICBJbiBzdW1tYXJ5LCBmb3IgZWFjaCA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGUgdGhlIGNvbmZpZ3VyYXRpb24gcGx1cyB0aGUgYmFzZSBjbGFzcyBvZiB2YXJpYWJsZXMgYXJlIHNldCwgZm9sbG93ZWQKKyAgICAgICAgICAgIGJ5IHRoZSBkYXRhIGluIHRoZSA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgaXRzZWxmLCBmb2xsb3dlZCBieSBhbnkgaW5oZXJpdCBjb21tYW5kcyB0aGF0CisgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZSBtaWdodCBjb250YWluLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZWNhdXNlIHBhcnNpbmcgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGVzIGlzIGEgdGltZQorICAgICAgICAgICAgY29uc3VtaW5nIHByb2Nlc3MsIGEgY2FjaGUgaXMga2VwdCB0byBzcGVlZCB1cCBzdWJzZXF1ZW50IHBhcnNpbmcuCisgICAgICAgICAgICBUaGlzIGNhY2hlIGlzIGludmFsaWQgaWYgdGhlIHRpbWVzdGFtcCBvZiB0aGUgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlIGl0c2VsZiBjaGFuZ2VzLCBvciBpZiB0aGUgdGltZXN0YW1wcyBvZiBhbnkgb2YgdGhlIGluY2x1ZGUsCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIG9yIGNsYXNzIGZpbGVzIG9uIHdoaWNoIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGUgZGVwZW5kcyBjaGFuZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGJlIGF3YXJlIG9mIGhvdyBCaXRCYWtlIHBhcnNlcyBjdXJseSBicmFjZXMuCisgICAgICAgICAgICAgICAgSWYgYSByZWNpcGUgdXNlcyBhIGNsb3NpbmcgY3VybHkgYnJhY2Ugd2l0aGluIHRoZSBmdW5jdGlvbiBhbmQKKyAgICAgICAgICAgICAgICB0aGUgY2hhcmFjdGVyIGhhcyBubyBsZWFkaW5nIHNwYWNlcywgQml0QmFrZSBwcm9kdWNlcyBhIHBhcnNpbmcKKyAgICAgICAgICAgICAgICBlcnJvci4KKyAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIGEgcGFpciBvZiBjdXJseSBicmFjZSBpbiBhIHNoZWxsIGZ1bmN0aW9uLCB0aGUKKyAgICAgICAgICAgICAgICBjbG9zaW5nIGN1cmx5IGJyYWNlIG11c3Qgbm90IGJlIGxvY2F0ZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lCisgICAgICAgICAgICAgICAgd2l0aG91dCBsZWFkaW5nIHNwYWNlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgY2F1c2VzIEJpdEJha2UgdG8gcHJvZHVjZSBhIHBhcnNpbmcKKyAgICAgICAgICAgICAgICBlcnJvcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGZha2Vyb290IGNyZWF0ZV9zaGFyKCkgeworICAgICAgICAgY2F0ICZsdDsmbHQ7ICJFT0YiICZndDsgJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaAorICAgICB1c2FnZSgpCisgICAgIHsKKyAgICAgICBlY2hvICJ0ZXN0IgorICAgICAgICMjIyMjIyBUaGUgZm9sbG93aW5nICJ9IiBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgY2F1c2VzIGEgcGFyc2luZyBlcnJvciAjIyMjIyMKKyAgICAgfQorICAgICBFT0YKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXcml0aW5nIHRoZSByZWNpcGUgdGhpcyB3YXkgYXZvaWRzIHRoZSBlcnJvcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGZha2Vyb290IGNyZWF0ZV9zaGFyKCkgeworICAgICAgICAgY2F0ICZsdDsmbHQ7ICJFT0YiICZndDsgJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaAorICAgICB1c2FnZSgpCisgICAgIHsKKyAgICAgICBlY2hvICJ0ZXN0IgorICAgICAgICMjIyMjI1RoZSBmb2xsb3dpbmcgIn0iIHdpdGggYSBsZWFkaW5nIHNwYWNlIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSBhdm9pZHMgdGhlIGVycm9yICMjIyMjIworICAgICAgfQorICAgICBFT0YKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtYml0YmFrZS1wcm92aWRlcnMnPgorICAgICAgICA8dGl0bGU+UHJlZmVyZW5jZXMgYW5kIFByb3ZpZGVyczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIGFsbCB0aGUgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGVzIGhhdmUgYmVlbgorICAgICAgICAgICAgcGFyc2VkLCBCaXRCYWtlIHN0YXJ0cyB0byBidWlsZCB0aGUgdGFyZ2V0ICg8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uJ3MgZXhhbXBsZSkgYW5kIGxvb2tzIGZvciBwcm92aWRlcnMgb2YgdGhhdCB0YXJnZXQuCisgICAgICAgICAgICBPbmNlIGEgcHJvdmlkZXIgaXMgc2VsZWN0ZWQsIEJpdEJha2UgcmVzb2x2ZXMgYWxsIHRoZSBkZXBlbmRlbmNpZXMgZm9yCisgICAgICAgICAgICB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgSW4gdGhlIGNhc2Ugb2YgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+LCBpdCB3b3VsZCBsZWFkIHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG88L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gcmVjaXBlcyBsaWtlIDxmaWxlbmFtZT5tYXRjaGJveC10ZXJtaW5hbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPnBjbWFuZm08L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmd0aHVtYjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlc2UgcmVjaXBlcyBpbiB0dXJuIGRlcGVuZCBvbiA8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPiBhbmQgdGhlIHRvb2xjaGFpbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU29tZXRpbWVzIGEgdGFyZ2V0IG1pZ2h0IGhhdmUgbXVsdGlwbGUgcHJvdmlkZXJzLgorICAgICAgICAgICAgQSBjb21tb24gZXhhbXBsZSBpcyAidmlydHVhbC9rZXJuZWwiLCB3aGljaCBpcyBwcm92aWRlZCBieSBlYWNoIGtlcm5lbCBwYWNrYWdlLgorICAgICAgICAgICAgRWFjaCBtYWNoaW5lIG9mdGVuIHNlbGVjdHMgdGhlIGJlc3Qga2VybmVsIHByb3ZpZGVyIGJ5IHVzaW5nIGEgbGluZSBzaW1pbGFyIHRvIHRoZQorICAgICAgICAgICAgZm9sbG93aW5nIGluIHRoZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID0gImxpbnV4LXlvY3RvIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZGVmYXVsdCA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBSRUZFUlJFRF9QUk9WSURFUic+UFJFRkVSUkVEX1BST1ZJREVSPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICBpcyB0aGUgcHJvdmlkZXIgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSB0YXJnZXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFVuZGVyc3RhbmRpbmcgaG93IHByb3ZpZGVycyBhcmUgY2hvc2VuIGlzIG1hZGUgY29tcGxpY2F0ZWQgYnkgdGhlIGZhY3QKKyAgICAgICAgICAgIHRoYXQgbXVsdGlwbGUgdmVyc2lvbnMgbWlnaHQgZXhpc3QuCisgICAgICAgICAgICBCaXRCYWtlIGRlZmF1bHRzIHRvIHRoZSBoaWdoZXN0IHZlcnNpb24gb2YgYSBwcm92aWRlci4KKyAgICAgICAgICAgIFZlcnNpb24gY29tcGFyaXNvbnMgYXJlIG1hZGUgdXNpbmcgdGhlIHNhbWUgbWV0aG9kIGFzIERlYmlhbi4KKyAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVGRVJSRURfVkVSU0lPTic+UFJFRkVSUkVEX1ZFUlNJT048L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhcmlhYmxlIHRvIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIHZlcnNpb24gKHVzdWFsbHkgaW4gdGhlIGRpc3RybyBjb25maWd1cmF0aW9uKS4KKyAgICAgICAgICAgIFlvdSBjYW4gaW5mbHVlbmNlIHRoZSBvcmRlciBieSB1c2luZyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVGQVVMVF9QUkVGRVJFTkNFJz5ERUZBVUxUX1BSRUZFUkVOQ0U8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgZmlsZXMgaGF2ZSBhIHByZWZlcmVuY2Ugb2YgIjAiLgorICAgICAgICAgICAgU2V0dGluZyB0aGUgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+IHRvICItMSIgbWFrZXMgdGhlCisgICAgICAgICAgICBwYWNrYWdlIHVubGlrZWx5IHRvIGJlIHVzZWQgdW5sZXNzIGl0IGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4KKyAgICAgICAgICAgIFNldHRpbmcgdGhlIDxmaWxlbmFtZT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2ZpbGVuYW1lPiB0byAiMSIgbWFrZXMgaXQgbGlrZWx5IHRoZSBwYWNrYWdlIGlzIHVzZWQuCisgICAgICAgICAgICA8ZmlsZW5hbWU+UFJFRkVSUkVEX1ZFUlNJT048L2ZpbGVuYW1lPiBvdmVycmlkZXMgYW55IDxmaWxlbmFtZT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2ZpbGVuYW1lPiBzZXR0aW5nLgorICAgICAgICAgICAgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+IGlzIG9mdGVuIHVzZWQgdG8gbWFyayBuZXdlciBhbmQgbW9yZSBleHBlcmltZW50YWwgcGFja2FnZQorICAgICAgICAgICAgdmVyc2lvbnMgdW50aWwgdGhleSBoYXZlIHVuZGVyZ29uZSBzdWZmaWNpZW50IHRlc3RpbmcgdG8gYmUgY29uc2lkZXJlZCBzdGFibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIHN1bW1hcnksIEJpdEJha2UgaGFzIGNyZWF0ZWQgYSBsaXN0IG9mIHByb3ZpZGVycywgd2hpY2ggaXMgcHJpb3JpdGl6ZWQsIGZvciBlYWNoIHRhcmdldC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtYml0YmFrZS1kZXBlbmRlbmNpZXMnPgorICAgICAgICA8dGl0bGU+RGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEVhY2ggdGFyZ2V0IEJpdEJha2UgYnVpbGRzIGNvbnNpc3RzIG9mIG11bHRpcGxlIHRhc2tzIHN1Y2ggYXMKKyAgICAgICAgICAgIDxmaWxlbmFtZT5mZXRjaDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+dW5wYWNrPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+cGF0Y2g8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmNvbmZpZ3VyZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5jb21waWxlPC9maWxlbmFtZT4uCisgICAgICAgICAgICBGb3IgYmVzdCBwZXJmb3JtYW5jZSBvbiBtdWx0aS1jb3JlIHN5c3RlbXMsIEJpdEJha2UgY29uc2lkZXJzIGVhY2ggdGFzayBhcyBhbiBpbmRlcGVuZGVudAorICAgICAgICAgICAgZW50aXR5IHdpdGggaXRzIG93biBzZXQgb2YgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQgdGhyb3VnaCBzZXZlcmFsIHZhcmlhYmxlcy4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBhYm91dCB2YXJpYWJsZXMgQml0QmFrZSB1c2VzIGluIHRoZSBCaXRCYWtlIGRvY3VtZW50YXRpb24sCisgICAgICAgICAgICB3aGljaCBpcyBmb3VuZCBpbiB0aGUgPGZpbGVuYW1lPmJpdGJha2UvZG9jL21hbnVhbDwvZmlsZW5hbWU+IGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICBBdCBhIGJhc2ljIGxldmVsLCBpdCBpcyBzdWZmaWNpZW50IHRvIGtub3cgdGhhdCBCaXRCYWtlIHVzZXMgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz5SREVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZXMgd2hlbgorICAgICAgICAgICAgY2FsY3VsYXRpbmcgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi1iaXRiYWtlLXRhc2tsaXN0Jz4KKyAgICAgICAgPHRpdGxlPlRoZSBUYXNrIExpc3Q8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmFzZWQgb24gdGhlIGdlbmVyYXRlZCBsaXN0IG9mIHByb3ZpZGVycyBhbmQgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24sCisgICAgICAgICAgICBCaXRCYWtlIGNhbiBub3cgY2FsY3VsYXRlIGV4YWN0bHkgd2hhdCB0YXNrcyBpdCBuZWVkcyB0byBydW4gYW5kIGluIHdoYXQKKyAgICAgICAgICAgIG9yZGVyIGl0IG5lZWRzIHRvIHJ1biB0aGVtLgorICAgICAgICAgICAgVGhlIGJ1aWxkIG5vdyBzdGFydHMgd2l0aCBCaXRCYWtlIGZvcmtpbmcgb2ZmIHRocmVhZHMgdXAgdG8gdGhlIGxpbWl0IHNldCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItQkJfTlVNQkVSX1RIUkVBRFMnPkJCX05VTUJFUl9USFJFQURTPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgQml0QmFrZSBjb250aW51ZXMgdG8gZm9yayB0aHJlYWRzIGFzIGxvbmcgYXMgdGhlcmUgYXJlIHRhc2tzIHJlYWR5IHRvIHJ1biwKKyAgICAgICAgICAgIHRob3NlIHRhc2tzIGhhdmUgYWxsIHRoZWlyIGRlcGVuZGVuY2llcyBtZXQsIGFuZCB0aGUgdGhyZWFkIHRocmVzaG9sZCBoYXMgbm90IGJlZW4KKyAgICAgICAgICAgIGV4Y2VlZGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB5b3UgY2FuIGdyZWF0bHkgc3BlZWQgdXAgdGhlIGJ1aWxkIHRpbWUgYnkgcHJvcGVybHkgc2V0dGluZworICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5CQl9OVU1CRVJfVEhSRUFEUzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcXMtYnVpbGRpbmctaW1hZ2VzJz5CdWlsZGluZyBJbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIGVhY2ggdGFzayBjb21wbGV0ZXMsIGEgdGltZXN0YW1wIGlzIHdyaXR0ZW4gdG8gdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNUQU1QJz5TVEFNUDwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgIE9uIHN1YnNlcXVlbnQgcnVucywgQml0QmFrZSBsb29rcyB3aXRoaW4gdGhlIDxmaWxlbmFtZT5idWlsZC90bXAvc3RhbXBzPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGRpcmVjdG9yeSBhbmQgZG9lcyBub3QgcmVydW4KKyAgICAgICAgICAgIHRhc2tzIHRoYXQgYXJlIGFscmVhZHkgY29tcGxldGVkIHVubGVzcyBhIHRpbWVzdGFtcCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLgorICAgICAgICAgICAgQ3VycmVudGx5LCBpbnZhbGlkIHRpbWVzdGFtcHMgYXJlIG9ubHkgY29uc2lkZXJlZCBvbiBhIHBlcgorICAgICAgICAgICAgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGUgYmFzaXMuCisgICAgICAgICAgICBTbywgZm9yIGV4YW1wbGUsIGlmIHRoZSBjb25maWd1cmUgc3RhbXAgaGFzIGEgdGltZXN0YW1wIGdyZWF0ZXIgdGhhbiB0aGUKKyAgICAgICAgICAgIGNvbXBpbGUgdGltZXN0YW1wIGZvciBhIGdpdmVuIHRhcmdldCwgdGhlbiB0aGUgY29tcGlsZSB0YXNrIHdvdWxkIHJlcnVuLgorICAgICAgICAgICAgUnVubmluZyB0aGUgY29tcGlsZSB0YXNrIGFnYWluLCBob3dldmVyLCBoYXMgbm8gZWZmZWN0IG9uIG90aGVyIHByb3ZpZGVycworICAgICAgICAgICAgdGhhdCBkZXBlbmQgb24gdGhhdCB0YXJnZXQuCisgICAgICAgICAgICBUaGlzIGJlaGF2aW9yIGNvdWxkIGNoYW5nZSBvciBiZWNvbWUgY29uZmlndXJhYmxlIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXRCYWtlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBTb21lIHRhc2tzIGFyZSBtYXJrZWQgYXMgIm5vc3RhbXAiIHRhc2tzLgorICAgICAgICAgICAgTm8gdGltZXN0YW1wIGZpbGUgaXMgY3JlYXRlZCB3aGVuIHRoZXNlIHRhc2tzIGFyZSBydW4uCisgICAgICAgICAgICBDb25zZXF1ZW50bHksICJub3N0YW1wIiB0YXNrcyBhcmUgYWx3YXlzIHJlcnVuLgorICAgICAgICA8L25vdGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi1iaXRiYWtlLXJ1bnRhc2snPgorICAgICAgICA8dGl0bGU+UnVubmluZyBhIFRhc2s8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGFza3MgY2FuIGVpdGhlciBiZSBhIHNoZWxsIHRhc2sgb3IgYSBQeXRob24gdGFzay4KKyAgICAgICAgICAgIEZvciBzaGVsbCB0YXNrcywgQml0QmFrZSB3cml0ZXMgYSBzaGVsbCBzY3JpcHQgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT4ke1dPUktESVJ9L3RlbXAvcnVuLmRvX3Rhc2tuYW1lLnBpZDwvZmlsZW5hbWU+IGFuZCB0aGVuIGV4ZWN1dGVzIHRoZSBzY3JpcHQuCisgICAgICAgICAgICBUaGUgZ2VuZXJhdGVkIHNoZWxsIHNjcmlwdCBjb250YWlucyBhbGwgdGhlIGV4cG9ydGVkIHZhcmlhYmxlcywgYW5kIHRoZSBzaGVsbCBmdW5jdGlvbnMKKyAgICAgICAgICAgIHdpdGggYWxsIHZhcmlhYmxlcyBleHBhbmRlZC4KKyAgICAgICAgICAgIE91dHB1dCBmcm9tIHRoZSBzaGVsbCBzY3JpcHQgZ29lcyB0byB0aGUgZmlsZSA8ZmlsZW5hbWU+JHtXT1JLRElSfS90ZW1wL2xvZy5kb190YXNrbmFtZS5waWQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIExvb2tpbmcgYXQgdGhlIGV4cGFuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiB0aGUgcnVuIGZpbGUgYW5kIHRoZSBvdXRwdXQgaW4gdGhlIGxvZyBmaWxlcworICAgICAgICAgICAgaXMgYSB1c2VmdWwgZGVidWdnaW5nIHRlY2huaXF1ZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIFB5dGhvbiB0YXNrcywgQml0QmFrZSBleGVjdXRlcyB0aGUgdGFzayBpbnRlcm5hbGx5IGFuZCBsb2dzIGluZm9ybWF0aW9uIHRvIHRoZQorICAgICAgICAgICAgY29udHJvbGxpbmcgdGVybWluYWwuCisgICAgICAgICAgICBGdXR1cmUgdmVyc2lvbnMgb2YgQml0QmFrZSB3aWxsIHdyaXRlIHRoZSBmdW5jdGlvbnMgdG8gZmlsZXMgc2ltaWxhciB0byB0aGUgd2F5CisgICAgICAgICAgICBzaGVsbCB0YXNrcyBhcmUgaGFuZGxlZC4KKyAgICAgICAgICAgIExvZ2dpbmcgd2lsbCBiZSBoYW5kbGVkIGluIGEgd2F5IHNpbWlsYXIgdG8gc2hlbGwgdGFza3MgYXMgd2VsbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSBhbGwgdGhlIHRhc2tzIGhhdmUgYmVlbiBjb21wbGV0ZWQgQml0QmFrZSBleGl0cy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiBydW5uaW5nIGEgdGFzaywgQml0QmFrZSB0aWdodGx5IGNvbnRyb2xzIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQKKyAgICAgICAgICAgIG9mIHRoZSBidWlsZCB0YXNrcyB0byBtYWtlIHN1cmUgdW53YW50ZWQgY29udGFtaW5hdGlvbiBmcm9tIHRoZSBidWlsZCBtYWNoaW5lCisgICAgICAgICAgICBjYW5ub3QgaW5mbHVlbmNlIHRoZSBidWlsZC4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaWYgeW91IGRvIHdhbnQgc29tZXRoaW5nIHRvIGdldCBwYXNzZWQgaW50byB0aGUgYnVpbGQKKyAgICAgICAgICAgIHRhc2sncyBlbnZpcm9ubWVudCwgeW91IG11c3QgdGFrZSBhIGZldyBzdGVwczoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGVsbCBCaXRCYWtlIHRvIGxvYWQgd2hhdCB5b3Ugd2FudCBmcm9tIHRoZSBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBkYXRhIHN0b3JlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGRvIHNvIHRocm91Z2ggdGhlIDxmaWxlbmFtZT5CQl9FTlZfRVhUUkFXSElURTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYXNzdW1lIHlvdSB3YW50IHRvIHByZXZlbnQgdGhlIGJ1aWxkIHN5c3RlbSBmcm9tCisgICAgICAgICAgICAgICAgICAgIGFjY2Vzc2luZyB5b3VyIDxmaWxlbmFtZT4kSE9NRS8uY2NhY2hlPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgdGVsbHMgQml0QmFrZSB0byBsb2FkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DQ0FDSEVfRElSPC9maWxlbmFtZT4gZnJvbSB0aGUgZW52aXJvbm1lbnQgaW50byB0aGUgZGF0YQorICAgICAgICAgICAgICAgICAgICBzdG9yZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBleHBvcnQgQkJfRU5WX0VYVFJBV0hJVEU9IiRCQl9FTlZfRVhUUkFXSElURSBDQ0FDSEVfRElSIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRlbGwgQml0QmFrZSB0byBleHBvcnQgd2hhdCB5b3UgaGF2ZSBsb2FkZWQgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgc3RvcmUgdG8gdGhlIHRhc2sgZW52aXJvbm1lbnQgb2YgZXZlcnkgcnVubmluZyB0YXNrLgorICAgICAgICAgICAgICAgICAgICBMb2FkaW5nIHNvbWV0aGluZyBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbnRvIHRoZSBkYXRhIHN0b3JlCisgICAgICAgICAgICAgICAgICAgIChwcmV2aW91cyBzdGVwKSBvbmx5IG1ha2VzIGl0IGF2YWlsYWJsZSBpbiB0aGUgZGF0YXN0b3JlLgorICAgICAgICAgICAgICAgICAgICBUbyBleHBvcnQgaXQgdG8gdGhlIHRhc2sgZW52aXJvbm1lbnQgb2YgZXZlcnkgcnVubmluZyB0YXNrLAorICAgICAgICAgICAgICAgICAgICB1c2UgYSBjb21tYW5kIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gb3IgZGlzdHJvIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBleHBvcnQgQ0NBQ0hFX0RJUgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBBIHNpZGUgZWZmZWN0IG9mIHRoZSBwcmV2aW91cyBzdGVwcyBpcyB0aGF0IEJpdEJha2UgcmVjb3JkcyB0aGUgdmFyaWFibGUKKyAgICAgICAgICAgIGFzIGEgZGVwZW5kZW5jeSBvZiB0aGUgYnVpbGQgcHJvY2VzcyBpbiB0aGluZ3MgbGlrZSB0aGUgc2hhcmVkIHN0YXRlCisgICAgICAgICAgICBjaGVja3N1bXMuCisgICAgICAgICAgICBJZiBkb2luZyBzbyByZXN1bHRzIGluIHVubmVjZXNzYXJ5IHJlYnVpbGRzIG9mIHRhc2tzLCB5b3UgY2FuIHdoaXRlbGlzdCB0aGUKKyAgICAgICAgICAgIHZhcmlhYmxlIHNvIHRoYXQgdGhlIHNoYXJlZCBzdGF0ZSBjb2RlIGlnbm9yZXMgdGhlIGRlcGVuZGVuY3kgd2hlbiBpdCBjcmVhdGVzCisgICAgICAgICAgICBjaGVja3N1bXMuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhpcyBwcm9jZXNzLCBzZWUgdGhlIDxmaWxlbmFtZT5CQl9IQVNIQkFTRV9XSElURUxJU1Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZXhhbXBsZSBpbiB0aGUgIjxsaW5rIGxpbmtlbmQ9J2NoZWNrc3Vtcyc+Q2hlY2tzdW1zIChTaWduYXR1cmVzKTwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLWJpdGJha2UtY29tbWFuZGxpbmUnPgorICAgICAgICA8dGl0bGU+Qml0QmFrZSBDb21tYW5kIExpbmU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93aW5nIGlzIHRoZSBCaXRCYWtlIGhlbHAgb3V0cHV0OgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNjcmVlbj4KKyQgYml0YmFrZSAtLWhlbHAKK1VzYWdlOiBiaXRiYWtlIFtvcHRpb25zXSBbcmVjaXBlbmFtZS90YXJnZXQgLi4uXQorCisgICAgRXhlY3V0ZXMgdGhlIHNwZWNpZmllZCB0YXNrIChkZWZhdWx0IGlzICdidWlsZCcpIGZvciBhIGdpdmVuIHNldCBvZiB0YXJnZXQgcmVjaXBlcyAoLmJiIGZpbGVzKS4KKyAgICBJdCBpcyBhc3N1bWVkIHRoZXJlIGlzIGEgY29uZi9iYmxheWVycy5jb25mIGF2YWlsYWJsZSBpbiBjd2Qgb3IgaW4gQkJQQVRIIHdoaWNoCisgICAgd2lsbCBwcm92aWRlIHRoZSBsYXllciwgQkJGSUxFUyBhbmQgb3RoZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KKworT3B0aW9uczoKKyAgLS12ZXJzaW9uICAgICAgICAgICAgIHNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0CisgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgIC1iIEJVSUxERklMRSwgLS1idWlsZGZpbGU9QlVJTERGSUxFCisgICAgICAgICAgICAgICAgICAgICAgICBFeGVjdXRlIHRhc2tzIGZyb20gYSBzcGVjaWZpYyAuYmIgcmVjaXBlIGRpcmVjdGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgV0FSTklORzogRG9lcyBub3QgaGFuZGxlIGFueSBkZXBlbmRlbmNpZXMgZnJvbSBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcy4KKyAgLWssIC0tY29udGludWUgICAgICAgIENvbnRpbnVlIGFzIG11Y2ggYXMgcG9zc2libGUgYWZ0ZXIgYW4gZXJyb3IuIFdoaWxlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IHRoYXQgZmFpbGVkIGFuZCBhbnl0aGluZyBkZXBlbmRpbmcgb24gaXQgY2Fubm90CisgICAgICAgICAgICAgICAgICAgICAgICBiZSBidWlsdCwgYXMgbXVjaCBhcyBwb3NzaWJsZSB3aWxsIGJlIGJ1aWx0IGJlZm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHBpbmcuCisgIC1hLCAtLXRyeWFsdGNvbmZpZ3MgICBDb250aW51ZSB3aXRoIGJ1aWxkcyBieSB0cnlpbmcgdG8gdXNlIGFsdGVybmF0aXZlCisgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlcnMgd2hlcmUgcG9zc2libGUuCisgIC1mLCAtLWZvcmNlICAgICAgICAgICBGb3JjZSB0aGUgc3BlY2lmaWVkIHRhcmdldHMvdGFzayB0byBydW4gKGludmFsaWRhdGluZworICAgICAgICAgICAgICAgICAgICAgICAgYW55IGV4aXN0aW5nIHN0YW1wIGZpbGUpLgorICAtYyBDTUQsIC0tY21kPUNNRCAgICAgU3BlY2lmeSB0aGUgdGFzayB0byBleGVjdXRlLiBUaGUgZXhhY3Qgb3B0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIGRlcGVuZCBvbiB0aGUgbWV0YWRhdGEuIFNvbWUgZXhhbXBsZXMgbWlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlICdjb21waWxlJyBvciAncG9wdWxhdGVfc3lzcm9vdCcgb3IgJ2xpc3R0YXNrcycgbWF5CisgICAgICAgICAgICAgICAgICAgICAgICBnaXZlIGEgbGlzdCBvZiB0aGUgdGFza3MgYXZhaWxhYmxlLgorICAtQyBJTlZBTElEQVRFX1NUQU1QLCAtLWNsZWFyLXN0YW1wPUlOVkFMSURBVEVfU1RBTVAKKyAgICAgICAgICAgICAgICAgICAgICAgIEludmFsaWRhdGUgdGhlIHN0YW1wIGZvciB0aGUgc3BlY2lmaWVkIHRhc2sgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBpbGUnIGFuZCB0aGVuIHJ1biB0aGUgZGVmYXVsdCB0YXNrIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCB0YXJnZXQocykuCisgIC1yIFBSRUZJTEUsIC0tcmVhZD1QUkVGSUxFCisgICAgICAgICAgICAgICAgICAgICAgICBSZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBiZWZvcmUgYml0YmFrZS5jb25mLgorICAtUiBQT1NURklMRSwgLS1wb3N0cmVhZD1QT1NURklMRQorICAgICAgICAgICAgICAgICAgICAgICAgUmVhZCB0aGUgc3BlY2lmaWVkIGZpbGUgYWZ0ZXIgYml0YmFrZS5jb25mLgorICAtdiwgLS12ZXJib3NlICAgICAgICAgT3V0cHV0IG1vcmUgbG9nIG1lc3NhZ2UgZGF0YSB0byB0aGUgdGVybWluYWwuCisgIC1ELCAtLWRlYnVnICAgICAgICAgICBJbmNyZWFzZSB0aGUgZGVidWcgbGV2ZWwuIFlvdSBjYW4gc3BlY2lmeSB0aGlzIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYW4gb25jZS4KKyAgLW4sIC0tZHJ5LXJ1biAgICAgICAgIERvbid0IGV4ZWN1dGUsIGp1c3QgZ28gdGhyb3VnaCB0aGUgbW90aW9ucy4KKyAgLVMsIC0tZHVtcC1zaWduYXR1cmVzCisgICAgICAgICAgICAgICAgICAgICAgICBEb24ndCBleGVjdXRlLCBqdXN0IGR1bXAgb3V0IHRoZSBzaWduYXR1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdGlvbiBpbmZvcm1hdGlvbi4KKyAgLXAsIC0tcGFyc2Utb25seSAgICAgIFF1aXQgYWZ0ZXIgcGFyc2luZyB0aGUgQkIgcmVjaXBlcy4KKyAgLXMsIC0tc2hvdy12ZXJzaW9ucyAgIFNob3cgY3VycmVudCBhbmQgcHJlZmVycmVkIHZlcnNpb25zIG9mIGFsbCByZWNpcGVzLgorICAtZSwgLS1lbnZpcm9ubWVudCAgICAgU2hvdyB0aGUgZ2xvYmFsIG9yIHBlci1wYWNrYWdlIGVudmlyb25tZW50IGNvbXBsZXRlCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIHZhcmlhYmxlcyB3ZXJlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQvY2hhbmdlZC4KKyAgLWcsIC0tZ3JhcGh2aXogICAgICAgIFNhdmUgZGVwZW5kZW5jeSB0cmVlIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzIGluIHRoZSBkb3Qgc3ludGF4LgorICAtSSBFWFRSQV9BU1NVTUVfUFJPVklERUQsIC0taWdub3JlLWRlcHM9RVhUUkFfQVNTVU1FX1BST1ZJREVECisgICAgICAgICAgICAgICAgICAgICAgICBBc3N1bWUgdGhlc2UgZGVwZW5kZW5jaWVzIGRvbid0IGV4aXN0IGFuZCBhcmUgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgKGVxdWl2YWxlbnQgdG8gQVNTVU1FX1BST1ZJREVEKS4gVXNlZnVsIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBtYWtlIGRlcGVuZGVuY3kgZ3JhcGhzIG1vcmUgYXBwZWFsaW5nCisgIC1sIERFQlVHX0RPTUFJTlMsIC0tbG9nLWRvbWFpbnM9REVCVUdfRE9NQUlOUworICAgICAgICAgICAgICAgICAgICAgICAgU2hvdyBkZWJ1ZyBsb2dnaW5nIGZvciB0aGUgc3BlY2lmaWVkIGxvZ2dpbmcgZG9tYWlucworICAtUCwgLS1wcm9maWxlICAgICAgICAgUHJvZmlsZSB0aGUgY29tbWFuZCBhbmQgc2F2ZSByZXBvcnRzLgorICAtdSBVSSwgLS11aT1VSSAgICAgICAgVGhlIHVzZXIgaW50ZXJmYWNlIHRvIHVzZSAoZS5nLiBrbm90dHksIGhvYiwgZGVwZXhwKS4KKyAgLXQgU0VSVkVSVFlQRSwgLS1zZXJ2ZXJ0eXBlPVNFUlZFUlRZUEUKKyAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSB3aGljaCBzZXJ2ZXIgdG8gdXNlLCBwcm9jZXNzIG9yIHhtbHJwYy4KKyAgLS1yZXZpc2lvbnMtY2hhbmdlZCAgIFNldCB0aGUgZXhpdCBjb2RlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdGluZyByZXZpc2lvbnMgaGF2ZSBjaGFuZ2VkIG9yIG5vdC4KKyAgLS1zZXJ2ZXItb25seSAgICAgICAgIFJ1biBiaXRiYWtlIHdpdGhvdXQgYSBVSSwgb25seSBzdGFydGluZyBhIHNlcnZlcgorICAgICAgICAgICAgICAgICAgICAgICAgKGNvb2tlcikgcHJvY2Vzcy4KKyAgLUIgQklORCwgLS1iaW5kPUJJTkQgIFRoZSBuYW1lL2FkZHJlc3MgZm9yIHRoZSBiaXRiYWtlIHNlcnZlciB0byBiaW5kIHRvLgorICAtLW5vLXNldHNjZW5lICAgICAgICAgRG8gbm90IHJ1biBhbnkgc2V0c2NlbmUgdGFza3MuIHNzdGF0ZSB3aWxsIGJlIGlnbm9yZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBldmVyeXRoaW5nIG5lZWRlZCwgYnVpbHQuCisgIC0tcmVtb3RlLXNlcnZlcj1SRU1PVEVfU0VSVkVSCisgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0IHRvIHRoZSBzcGVjaWZpZWQgc2VydmVyLgorICAtbSwgLS1raWxsLXNlcnZlciAgICAgVGVybWluYXRlIHRoZSByZW1vdGUgc2VydmVyLgorICAtLW9ic2VydmUtb25seSAgICAgICAgQ29ubmVjdCB0byBhIHNlcnZlciBhcyBhbiBvYnNlcnZpbmctb25seSBjbGllbnQuCisgICAgICAgIDwvc2NyZWVuPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtYml0YmFrZS1mZXRjaGVycyc+CisgICAgICAgIDx0aXRsZT5GZXRjaGVyczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIGFsc28gY29udGFpbnMgYSBzZXQgb2YgImZldGNoZXIiIG1vZHVsZXMgdGhhdCBhbGxvdworICAgICAgICAgICAgcmV0cmlldmFsIG9mIHNvdXJjZSBjb2RlIGZyb20gdmFyaW91cyB0eXBlcyBvZiBzb3VyY2VzLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIEJpdEJha2UgY2FuIGdldCBzb3VyY2UgY29kZSBmcm9tIGEgZGlzayB3aXRoIHRoZSBtZXRhZGF0YSwgZnJvbSB3ZWJzaXRlcywKKyAgICAgICAgICAgIGZyb20gcmVtb3RlIHNoZWxsIGFjY291bnRzLCBvciBmcm9tIFNvdXJjZSBDb2RlIE1hbmFnZW1lbnQgKFNDTSkgc3lzdGVtcworICAgICAgICAgICAgbGlrZSA8ZmlsZW5hbWU+Y3ZzL3N1YnZlcnNpb24vZ2l0PC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZldGNoZXJzIGFyZSB1c3VhbGx5IHRyaWdnZXJlZCBieSBlbnRyaWVzIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPlNSQ19VUkk8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9wdGlvbnMgYW5kIGZvcm1hdHMgb2YgZW50cmllcyBmb3Igc3BlY2lmaWMKKyAgICAgICAgICAgIGZldGNoZXJzIGluIHRoZSBCaXRCYWtlIG1hbnVhbCBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UvZG9jL21hbnVhbDwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25lIHVzZWZ1bCBmZWF0dXJlIGZvciBjZXJ0YWluIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSkgZmV0Y2hlcnMgaXMgdGhlIGFiaWxpdHkgdG8KKyAgICAgICAgICAgICJhdXRvLXVwZGF0ZSIgd2hlbiB0aGUgdXBzdHJlYW0gU0NNIGNoYW5nZXMgdmVyc2lvbi4KKyAgICAgICAgICAgIFNpbmNlIHRoaXMgYWJpbGl0eSByZXF1aXJlcyBjZXJ0YWluIGZ1bmN0aW9uYWxpdHkgZnJvbSB0aGUgU0NNLCBub3QgYWxsCisgICAgICAgICAgICBzeXN0ZW1zIHN1cHBvcnQgaXQuCisgICAgICAgICAgICBDdXJyZW50bHkgU3VidmVyc2lvbiwgQmF6YWFyIGFuZCB0byBhIGxpbWl0ZWQgZXh0ZW50LCBHaXQgc3VwcG9ydCB0aGUgYWJpbGl0eSB0byAiYXV0by11cGRhdGUiLgorICAgICAgICAgICAgVGhpcyBmZWF0dXJlIHdvcmtzIHVzaW5nIHRoZSA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+U1JDUkVWPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwbGF0ZGV2LWFwcGRldi1zcmNyZXYnPlVzaW5nIGFuIEV4dGVybmFsIFNDTTwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NCBzcGVsbCBzcGVsbGxhbmc9ZW5fZ2IKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWNsYXNzZXMueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWNsYXNzZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4N2M5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtY2xhc3Nlcy54bWwKQEAgLTAsMCArMSwzNTM5IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ncmVmLWNsYXNzZXMnPgorPHRpdGxlPkNsYXNzZXM8L3RpdGxlPgorCis8cGFyYT4KKyAgICBDbGFzcyBmaWxlcyBhcmUgdXNlZCB0byBhYnN0cmFjdCBjb21tb24gZnVuY3Rpb25hbGl0eSBhbmQgc2hhcmUgaXQgYW1vbmdzdAorICAgIG11bHRpcGxlIHJlY2lwZSAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KSBmaWxlcy4KKyAgICBUbyB1c2UgYSBjbGFzcyBmaWxlLCB5b3Ugc2ltcGx5IG1ha2Ugc3VyZSB0aGUgcmVjaXBlIGluaGVyaXRzIHRoZSBjbGFzcy4KKyAgICBJbiBtb3N0IGNhc2VzLCB3aGVuIGEgcmVjaXBlIGluaGVyaXRzIGEgY2xhc3MgaXQgaXMgZW5vdWdoIHRvIGVuYWJsZSBpdHMKKyAgICBmZWF0dXJlcy4KKyAgICBUaGVyZSBhcmUgY2FzZXMsIGhvd2V2ZXIsIHdoZXJlIGluIHRoZSByZWNpcGUgeW91IG1pZ2h0IG5lZWQgdG8gc2V0CisgICAgdmFyaWFibGVzIG9yIG92ZXJyaWRlIHNvbWUgZGVmYXVsdCBiZWhhdmlvci4KKzwvcGFyYT4KKworPHBhcmE+CisgICAgQW55IDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+IHVzdWFsbHkKKyAgICBmb3VuZCBpbiBhIHJlY2lwZSBjYW4gYWxzbyBiZSBwbGFjZWQgaW4gYSBjbGFzcyBmaWxlLgorICAgIENsYXNzIGZpbGVzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSBleHRlbnNpb24gPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4KKyAgICBhbmQgYXJlIHVzdWFsbHkgcGxhY2VkIGluIGEgPGZpbGVuYW1lPmNsYXNzZXMvPC9maWxlbmFtZT4gZGlyZWN0b3J5IGJlbmVhdGgKKyAgICB0aGUgPGZpbGVuYW1lPm1ldGEqLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBmb3VuZCBpbiB0aGUKKyAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgQ2xhc3MgZmlsZXMgY2FuIGFsc28gYmUgcG9pbnRlZCB0byBieQorICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRERJUic+PGZpbGVuYW1lPkJVSUxERElSPC9maWxlbmFtZT48L2xpbms+CisgICAgKGUuZy4gPGZpbGVuYW1lPmJ1aWxkLzwvZmlsZW5hbWU+KSBpbiB0aGUgc2FtZSB3YXkgYXMKKyAgICA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlcyBpbiB0aGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgQ2xhc3MgZmlsZXMgYXJlIHNlYXJjaGVkIGZvciBpbgorICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICB1c2luZyB0aGUgc2FtZSBtZXRob2QgYnkgd2hpY2ggPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZXMgYXJlCisgICAgc2VhcmNoZWQuCis8L3BhcmE+CisKKzxwYXJhPgorICAgIFRoaXMgY2hhcHRlciBkaXNjdXNzZXMgb25seSB0aGUgbW9zdCB1c2VmdWwgYW5kIGltcG9ydGFudCBjbGFzc2VzLgorICAgIE90aGVyIGNsYXNzZXMgZG8gZXhpc3Qgd2l0aGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzPC9maWxlbmFtZT4KKyAgICBkaXJlY3RvcnkgaW4gdGhlCisgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgIFlvdSBjYW4gcmVmZXJlbmNlIHRoZSA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlcyBkaXJlY3RseQorICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYWxsYXJjaCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5hbGxhcmNoLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5hbGxhcmNoPC9maWxlbmFtZT4gY2xhc3MgaXMgaW5oZXJpdGVkCisgICAgICAgIGJ5IHJlY2lwZXMgdGhhdCBkbyBub3QgcHJvZHVjZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3V0cHV0LgorICAgICAgICBUaGUgY2xhc3MgZGlzYWJsZXMgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIG5vcm1hbGx5IG5lZWRlZCBmb3IgcmVjaXBlcworICAgICAgICB0aGF0IHByb2R1Y2UgZXhlY3V0YWJsZSBiaW5hcmllcyAoc3VjaCBhcyBidWlsZGluZyB0aGUgY3Jvc3MtY29tcGlsZXIKKyAgICAgICAgYW5kIGEgQyBsaWJyYXJ5IGFzIHByZS1yZXF1aXNpdGVzLCBhbmQgc3BsaXR0aW5nIG91dCBvZiBkZWJ1ZyBzeW1ib2xzCisgICAgICAgIGR1cmluZyBwYWNrYWdpbmcpLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFVubGlrZSBlLmcuIERlYmlhbiwgT3BlbkVtYmVkZGVkIHJlY2lwZXMgdGhhdCBwcm9kdWNlIHBhY2thZ2VzCisgICAgICAgICAgICB3aGljaAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG9uCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORV9QS0dBUkNIJz48ZmlsZW5hbWU+VFVORV9QS0dBUkNIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBwYWNrYWdlcyBzaG91bGQgbmV2ZXIgYmUgbWFkZSA8ZmlsZW5hbWU+YWxsYXJjaDwvZmlsZW5hbWU+LCBldmVuCisgICAgICAgICAgICBpZiB0aGV5IGRvIG5vdCBwcm9kdWNlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvdXRwdXQuIFRoaXMgd291bGQKKyAgICAgICAgICAgIGNhdXNlIHRoZSBkb19wYWNrYWdlX3dyaXRlXyogdGFza3MgdG8gaGF2ZSBkaWZmZXJlbnQgc2lnbmF0dXJlcworICAgICAgICAgICAgZm9yCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz5zCisgICAgICAgICAgICB3aXRoIGRpZmZlcmVudAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfUEtHQVJDSCc+PGZpbGVuYW1lPlRVTkVfUEtHQVJDSDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgIHRodXMgdW5uZWNlc3NhcnkgcmVidWlsZHMgZXZlcnkgc2luZ2xlIHRpbWUgYW4gaW1hZ2UgZm9yIGEgZGlmZmVyZW50CisgICAgICAgICAgICBNQUNISU5FIGlzIGJ1aWx0IChldmVuIHdpdGhvdXQgYW55IGNoYW5nZSB0byB0aGUgcmVjaXBlKS4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCeSBkZWZhdWx0LCBhbGwgcmVjaXBlcyBpbmhlcml0IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iYXNlJz48ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+PC9saW5rPiBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZSc+PGZpbGVuYW1lPnBhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3Nlcywgd2hpY2ggZW5hYmxlIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgbmVlZGVkIGZvciByZWNpcGVzIHRoYXQgcHJvZHVjZSBleGVjdXRhYmxlIG91dHB1dC4KKyAgICAgICAgSWYgeW91ciByZWNpcGUsIGZvciBleGFtcGxlLCBvbmx5IHByb2R1Y2VzIHBhY2thZ2VzIHRoYXQgY29udGFpbgorICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLCBtZWRpYSBmaWxlcywgb3Igc2NyaXB0cyAoZS5nLiBQeXRob24gYW5kIFBlcmwpLAorICAgICAgICB0aGVuIGl0IHNob3VsZCBpbmhlcml0IHRoZSA8ZmlsZW5hbWU+YWxsYXJjaDwvZmlsZW5hbWU+IGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWFyY2hpdmVyJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmFyY2hpdmVyLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5hcmNoaXZlcjwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIHJlbGVhc2luZworICAgICAgICBzb3VyY2UgY29kZSBhbmQgb3RoZXIgbWF0ZXJpYWxzIHdpdGggdGhlIGJpbmFyaWVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBzb3VyY2UgYXJjaGl2ZXIsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21haW50YWluaW5nLW9wZW4tc291cmNlLWxpY2Vuc2UtY29tcGxpYW5jZS1kdXJpbmcteW91ci1wcm9kdWN0cy1saWZlY3ljbGUnPk1haW50YWluaW5nIE9wZW4gU291cmNlIExpY2Vuc2UgQ29tcGxpYW5jZSBEdXJpbmcgWW91ciBQcm9kdWN0J3MgTGlmZWN5Y2xlPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICBZb3UgY2FuIGFsc28gc2VlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQVJDSElWRVJfTU9ERSc+PGZpbGVuYW1lPkFSQ0hJVkVSX01PREU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSB2YXJpYWJsZSBmbGFncyAodmFyZmxhZ3MpCisgICAgICAgIHRoYXQgaGVscCBjb250cm9sIGFyY2hpdmUgY3JlYXRpb24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYXV0b3Rvb2xzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmF1dG90b29scy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgQXV0b3Rvb2xlZAorICAgICAgICBwYWNrYWdlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5hdXRvY29uZjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YXV0b21ha2U8L2ZpbGVuYW1lPiwKKyAgICAgICAgYW5kIDxmaWxlbmFtZT5saWJ0b29sPC9maWxlbmFtZT4gYnJpbmcgc3RhbmRhcmRpemF0aW9uLgorICAgICAgICBUaGlzIGNsYXNzIGRlZmluZXMgYSBzZXQgb2YgdGFza3MgKGNvbmZpZ3VyZSwgY29tcGlsZSBldGMuKSB0aGF0CisgICAgICAgIHdvcmsgZm9yIGFsbCBBdXRvdG9vbGVkIHBhY2thZ2VzLgorICAgICAgICBJdCBzaG91bGQgdXN1YWxseSBiZSBlbm91Z2ggdG8gZGVmaW5lIGEgZmV3IHN0YW5kYXJkIHZhcmlhYmxlcworICAgICAgICBhbmQgdGhlbiBzaW1wbHkgPGZpbGVuYW1lPmluaGVyaXQgYXV0b3Rvb2xzPC9maWxlbmFtZT4uCisgICAgICAgIFRoaXMgY2xhc3MgY2FuIGFsc28gd29yayB3aXRoIHNvZnR3YXJlIHRoYXQgZW11bGF0ZXMgQXV0b3Rvb2xzLgorICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbmV3LXJlY2lwZS1hdXRvdG9vbGVkLXBhY2thZ2UnPkF1dG90b29sZWQgUGFja2FnZTwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICB1c2VzIG91dC1vZi10cmVlIGJ1aWxkcworICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+IDxmaWxlbmFtZT4hPTwvZmlsZW5hbWU+CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgIElmIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCBieSBhIHJlY2lwZSBkb2VzIG5vdCBzdXBwb3J0CisgICAgICAgIHVzaW5nIG91dC1vZi10cmVlIGJ1aWxkcywgeW91IHNob3VsZCBoYXZlIHRoZSByZWNpcGUgaW5oZXJpdCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXV0b3Rvb2xzLWJyb2tlbnNlcCc+PGZpbGVuYW1lPmF1dG90b29scy1icm9rZW5zZXA8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEl0J3MgdXNlZnVsIHRvIGhhdmUgc29tZSBpZGVhIG9mIGhvdyB0aGUgdGFza3MgZGVmaW5lZCBieSB0aGlzIGNsYXNzIHdvcmsKKyAgICAgICAgYW5kIHdoYXQgdGhleSBkbyBiZWhpbmQgdGhlIHNjZW5lcy4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICBSZWdlbmVyYXRlcyB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmUgc2NyaXB0ICh1c2luZyA8ZmlsZW5hbWU+YXV0b3JlY29uZjwvZmlsZW5hbWU+KSBhbmQgdGhlbiBsYXVuY2hlcyBpdAorICAgICAgICAgICAgICAgIHdpdGggYSBzdGFuZGFyZCBzZXQgb2YgYXJndW1lbnRzIHVzZWQgZHVyaW5nIGNyb3NzLWNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gcGFzcyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgdG8gPGZpbGVuYW1lPmNvbmZpZ3VyZTwvZmlsZW5hbWU+IHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPkVYVFJBX09FQ09ORjwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4gLSBSdW5zIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gd2l0aAorICAgICAgICAgICAgICAgIGFyZ3VtZW50cyB0aGF0IHNwZWNpZnkgdGhlIGNvbXBpbGVyIGFuZCBsaW5rZXIuCisgICAgICAgICAgICAgICAgWW91IGNhbiBwYXNzIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRocm91Z2gKKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRU1BS0UnPkVYVFJBX09FTUFLRTwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4gLSBSdW5zIDxmaWxlbmFtZT5tYWtlIGluc3RhbGw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGFuZCBwYXNzZXMgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBhcyA8ZmlsZW5hbWU+REVTVERJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMtYnJva2Vuc2VwJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmF1dG90b29scy1icm9rZW5zZXAuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmF1dG90b29scy1icm9rZW5zZXA8L2ZpbGVuYW1lPiBjbGFzcyBiZWhhdmVzIHRoZSBzYW1lCisgICAgICAgIGFzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MgYnV0IGJ1aWxkcyB3aXRoCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CJz48ZmlsZW5hbWU+QjwvZmlsZW5hbWU+PC9saW5rPiA9PQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCB3aGVuIG91dC1vZi10cmVlIGJ1aWxkIHN1cHBvcnQgaXMgZWl0aGVyIG5vdAorICAgICAgICBwcmVzZW50IG9yIGlzIGJyb2tlbi4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IG91dC1vZi10cmVlIHN1cHBvcnQgYmUgZml4ZWQgYW5kIHVzZWQKKyAgICAgICAgICAgIGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWJhc2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+IGNsYXNzIGlzIHNwZWNpYWwgaW4gdGhhdCBldmVyeQorICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZSBpbXBsaWNpdGx5IGluaGVyaXRzIHRoZSBjbGFzcy4KKyAgICAgICAgVGhpcyBjbGFzcyBjb250YWlucyBkZWZpbml0aW9ucyBmb3Igc3RhbmRhcmQgYmFzaWMKKyAgICAgICAgdGFza3Mgc3VjaCBhcyBmZXRjaGluZywgdW5wYWNraW5nLCBjb25maWd1cmluZyAoZW1wdHkgYnkgZGVmYXVsdCksCisgICAgICAgIGNvbXBpbGluZyAocnVucyBhbnkgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4gcHJlc2VudCksIGluc3RhbGxpbmcKKyAgICAgICAgKGVtcHR5IGJ5IGRlZmF1bHQpIGFuZCBwYWNrYWdpbmcgKGVtcHR5IGJ5IGRlZmF1bHQpLgorICAgICAgICBUaGVzZSBjbGFzc2VzIGFyZSBvZnRlbiBvdmVycmlkZGVuIG9yIGV4dGVuZGVkIGJ5IG90aGVyIGNsYXNzZXMKKyAgICAgICAgc3VjaCBhcyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXV0b3Rvb2xzJz48ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzIG9yIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcy4KKyAgICAgICAgVGhlIGNsYXNzIGFsc28gY29udGFpbnMgc29tZSBjb21tb25seSB1c2VkIGZ1bmN0aW9ucyBzdWNoIGFzCisgICAgICAgIDxmaWxlbmFtZT5vZV9ydW5tYWtlPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYmluLXBhY2thZ2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+YmluX3BhY2thZ2UuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJpbl9wYWNrYWdlPC9maWxlbmFtZT4gY2xhc3MgaXMgYQorICAgICAgICBoZWxwZXIgY2xhc3MgZm9yIHJlY2lwZXMgdGhhdCBleHRyYWN0IHRoZSBjb250ZW50cyBvZiBhIGJpbmFyeSBwYWNrYWdlCisgICAgICAgIChlLmcuIGFuIFJQTSkgYW5kIGluc3RhbGwgdGhvc2UgY29udGVudHMgcmF0aGVyIHRoYW4gYnVpbGRpbmcgdGhlCisgICAgICAgIGJpbmFyeSBmcm9tIHNvdXJjZS4KKyAgICAgICAgVGhlIGJpbmFyeSBwYWNrYWdlIGlzIGV4dHJhY3RlZCBhbmQgbmV3IHBhY2thZ2VzIGluIHRoZSBjb25maWd1cmVkCisgICAgICAgIG91dHB1dCBwYWNrYWdlIGZvcm1hdCBhcmUgY3JlYXRlZC4KKyAgICAgICAgRXh0cmFjdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHByb3ByaWV0YXJ5IGJpbmFyaWVzIGlzIGEgZ29vZCBleGFtcGxlCisgICAgICAgIHVzZSBmb3IgdGhpcyBjbGFzcy4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBGb3IgUlBNcyBhbmQgb3RoZXIgcGFja2FnZXMgdGhhdCBkbyBub3QgY29udGFpbiBhIHN1YmRpcmVjdG9yeSwKKyAgICAgICAgICAgIHlvdSBzaG91bGQgc3BlY2lmeSBhICJzdWJkaXIiIHBhcmFtZXRlci4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB3aGVyZSA8ZmlsZW5hbWU+JHtCUH08L2ZpbGVuYW1lPiBpcyB1c2VkIHNvIHRoYXQKKyAgICAgICAgICAgIHRoZSBmaWxlcyBhcmUgZXh0cmFjdGVkIGludG8gdGhlIHN1YmRpcmVjdG9yeSBleHBlY3RlZCBieSB0aGUKKyAgICAgICAgICAgIGRlZmF1bHQgdmFsdWUgb2YKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJodHRwOi8vZXhhbXBsZS5jb20vZG93bmxvYWRzL3NvbWVwYWNrYWdlLnJwbTtzdWJkaXI9JHtCUH0iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1iaW5jb25maWcnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+YmluY29uZmlnLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5iaW5jb25maWc8L2ZpbGVuYW1lPiBjbGFzcyBoZWxwcyB0byBjb3JyZWN0IHBhdGhzIGluCisgICAgICAgIHNoZWxsIHNjcmlwdHMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJlZm9yZSA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+IGhhZCBiZWNvbWUgd2lkZXNwcmVhZCwgbGlicmFyaWVzCisgICAgICAgIHNoaXBwZWQgc2hlbGwgc2NyaXB0cyB0byBnaXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaWJyYXJpZXMgYW5kCisgICAgICAgIGluY2x1ZGUgcGF0aHMgbmVlZGVkIHRvIGJ1aWxkIHNvZnR3YXJlICh1c3VhbGx5IG5hbWVkCisgICAgICAgIDxmaWxlbmFtZT5MSUJOQU1FLWNvbmZpZzwvZmlsZW5hbWU+KS4KKyAgICAgICAgVGhpcyBjbGFzcyBhc3Npc3RzIGFueSByZWNpcGUgdXNpbmcgc3VjaCBzY3JpcHRzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBEdXJpbmcgc3RhZ2luZywgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaW5zdGFsbHMgc3VjaCBzY3JpcHRzCisgICAgICAgIGludG8gdGhlIDxmaWxlbmFtZT5zeXNyb290cy88L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgIEluaGVyaXRpbmcgdGhpcyBjbGFzcyByZXN1bHRzIGluIGFsbCBwYXRocyBpbiB0aGVzZSBzY3JpcHRzIGJlaW5nCisgICAgICAgIGNoYW5nZWQgdG8gcG9pbnQgaW50byB0aGUgPGZpbGVuYW1lPnN5c3Jvb3RzLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBzbworICAgICAgICB0aGF0IGFsbCBidWlsZHMgdGhhdCB1c2UgdGhlIHNjcmlwdCB1c2UgdGhlIGNvcnJlY3QgZGlyZWN0b3JpZXMKKyAgICAgICAgZm9yIHRoZSBjcm9zcyBjb21waWxpbmcgbGF5b3V0LgorICAgICAgICBTZWUgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CSU5DT05GSUdfR0xPQic+PGZpbGVuYW1lPkJJTkNPTkZJR19HTE9CPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWJpbmNvbmZpZy1kaXNhYmxlZCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5iaW5jb25maWctZGlzYWJsZWQuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBBbiBhbHRlcm5hdGl2ZSB2ZXJzaW9uIG9mIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iaW5jb25maWcnPjxmaWxlbmFtZT5iaW5jb25maWc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MsIHdoaWNoIGRpc2FibGVzIGJpbmFyeSBjb25maWd1cmF0aW9uIHNjcmlwdHMgYnkgbWFraW5nIHRoZW0KKyAgICAgICAgcmV0dXJuIGFuIGVycm9yIGluIGZhdm9yIG9mIHVzaW5nIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgdG8gcXVlcnkgdGhlIGluZm9ybWF0aW9uLgorICAgICAgICBUaGUgc2NyaXB0cyB0byBiZSBkaXNhYmxlZCBzaG91bGQgYmUgc3BlY2lmaWVkIHVzaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQklOQ09ORklHJz48ZmlsZW5hbWU+QklOQ09ORklHPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIHdpdGhpbiB0aGUgcmVjaXBlIGluaGVyaXRpbmcgdGhlIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWJsYWNrbGlzdCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5ibGFja2xpc3QuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJsYWNrbGlzdDwvZmlsZW5hbWU+IGNsYXNzIHByZXZlbnRzCisgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGZyb20gYnVpbGRpbmcgc3BlY2lmaWMgcmVjaXBlcworICAgICAgICAoYmxhY2tsaXN0cyB0aGVtKS4KKyAgICAgICAgVG8gdXNlIHRoaXMgY2xhc3MsIGluaGVyaXQgdGhlIGNsYXNzIGdsb2JhbGx5IGFuZCBzZXQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOQkxBQ0tMSVNUJz48ZmlsZW5hbWU+UE5CTEFDS0xJU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgZm9yIGVhY2ggcmVjaXBlIHlvdSB3aXNoIHRvIGJsYWNrbGlzdC4KKyAgICAgICAgU3BlY2lmeSB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFsdWUgYXMgYSB2YXJpYWJsZSBmbGFnICh2YXJmbGFnKSBhbmQgcHJvdmlkZSBhIHJlYXNvbiwgd2hpY2ggaXMKKyAgICAgICAgcmVwb3J0ZWQsIGlmIHRoZSBwYWNrYWdlIGlzIHJlcXVlc3RlZCB0byBiZSBidWlsdCBhcyB0aGUgdmFsdWUuCisgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBibGFja2xpc3QgYSByZWNpcGUgY2FsbGVkICJleG90aWN3YXJlIiwKKyAgICAgICAgeW91IGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICBvciBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbjoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJibGFja2xpc3QiCisgICAgIFBOQkxBQ0tMSVNUW2V4b3RpY3dhcmVdID0gIk5vdCBzdXBwb3J0ZWQgYnkgb3VyIG9yZ2FuaXphdGlvbi4iCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1ibHVldG9vdGgnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Ymx1ZXRvb3RoLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5ibHVldG9vdGg8L2ZpbGVuYW1lPiBjbGFzcyBkZWZpbmVzIGEgdmFyaWFibGUgdGhhdAorICAgICAgICBleHBhbmRzIHRvIHRoZSByZWNpcGUgKHBhY2thZ2UpIHByb3ZpZGluZyBjb3JlCisgICAgICAgIGJsdWV0b290aCBzdXBwb3J0IG9uIHRoZSBwbGF0Zm9ybS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIGRldGFpbHMgb24gaG93IHRoZSBjbGFzcyB3b3Jrcywgc2VlIHRoZQorICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2JsdWV0b290aC5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUgWW9jdG8KKyAgICAgICAgUHJvamVjdAorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYm9vdC1kaXJlY3RkaXNrJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmJvb3QtZGlyZWN0ZGlzay5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Ym9vdC1kaXJlY3RkaXNrPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgY3JlYXRlcyBhbiBpbWFnZSB0aGF0IGNhbiBiZSBwbGFjZWQgZGlyZWN0bHkgb250byBhIGhhcmQgZGlzayB1c2luZworICAgICAgICA8ZmlsZW5hbWU+ZGQ8L2ZpbGVuYW1lPiBhbmQgdGhlbiBib290ZWQuCisgICAgICAgIFRoZSBpbWFnZSB1c2VzIFNZU0xJTlVYLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgZW5kIHJlc3VsdCBpcyBhIDUxMiBib290IHNlY3RvciBwb3B1bGF0ZWQgd2l0aCBhCisgICAgICAgIE1hc3RlciBCb290IFJlY29yZCAoTUJSKSBhbmQgcGFydGl0aW9uIHRhYmxlIGZvbGxvd2VkIGJ5IGFuIE1TRE9TCisgICAgICAgIEZBVDE2IHBhcnRpdGlvbiBjb250YWluaW5nIFNZU0xJTlVYIGFuZCBhIExpbnV4IGtlcm5lbCBjb21wbGV0ZWQgYnkKKyAgICAgICAgdGhlIDxmaWxlbmFtZT5leHQyPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5leHQzPC9maWxlbmFtZT4KKyAgICAgICAgcm9vdCBmaWxlc3lzdGVtcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1ib290aW1nJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmJvb3RpbWcuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJvb3RpbWc8L2ZpbGVuYW1lPiBjbGFzcyBjcmVhdGVzIGEgYm9vdGFibGUKKyAgICAgICAgaW1hZ2UgdXNpbmcgU1lTTElOVVgsIHlvdXIga2VybmVsLCBhbmQgYW4gb3B0aW9uYWwgaW5pdGlhbCBSQU0gZGlzaworICAgICAgICAoPGZpbGVuYW1lPmluaXRyZDwvZmlsZW5hbWU+KS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB5b3UgdXNlIHRoaXMgY2xhc3MsIHR3byB0aGluZ3MgaGFwcGVuOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPi5oZGRpbWc8L2ZpbGVuYW1lPiBmaWxlIGlzIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGFuIE1TRE9TIGZpbGVzeXN0ZW0gdGhhdCBjb250YWlucyBTWVNMSU5VWCwKKyAgICAgICAgICAgICAgICBhIGtlcm5lbCwgYW4gPGZpbGVuYW1lPmluaXRyZDwvZmlsZW5hbWU+LCBhbmQgYSByb290IGZpbGVzeXN0ZW0KKyAgICAgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgICAgICBBbGwgdGhyZWUgb2YgdGhlc2UgY2FuIGJlIHdyaXR0ZW4gdG8gaGFyZCBkcml2ZXMgZGlyZWN0bHkgYW5kCisgICAgICAgICAgICAgICAgYWxzbyBib290ZWQgb24gYSBVU0IgZmxhc2ggZGlza3MgdXNpbmcgPGZpbGVuYW1lPmRkPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgQSBDRCA8ZmlsZW5hbWU+LmlzbzwvZmlsZW5hbWU+IGltYWdlIGlzIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgV2hlbiB0aGlzIGZpbGUgaXMgYm9vdGVkLCB0aGUgPGZpbGVuYW1lPmluaXRyZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYm9vdHMgYW5kIHByb2Nlc3NlcyB0aGUgbGFiZWwgc2VsZWN0ZWQgaW4gU1lTTElOVVguCisgICAgICAgICAgICAgICAgQWN0aW9ucyBiYXNlZCBvbiB0aGUgbGFiZWwgYXJlIHRoZW4gcGVyZm9ybWVkIChlLmcuIGluc3RhbGxpbmcKKyAgICAgICAgICAgICAgICB0byBhIGhhcmQgZHJpdmUpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5ib290aW1nPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTklUUkQnPjxmaWxlbmFtZT5JTklUUkQ8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1OT0lTTyc+PGZpbGVuYW1lPk5PSVNPPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTk9IREQnPjxmaWxlbmFtZT5OT0hERDwvZmlsZW5hbWU+PC9saW5rPiwgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ST09URlMnPjxmaWxlbmFtZT5ST09URlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWJ1Z3ppbGxhJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1Z3ppbGxhLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5idWd6aWxsYTwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIHNldHRpbmcgdXAgYW4KKyAgICAgICAgaW5zdGFuY2Ugb2YgQnVnemlsbGEgaW4gd2hpY2ggeW91IGNhbiBhdXRvbWF0aWNhbGx5IGZpbGVzIGJ1ZyByZXBvcnRzCisgICAgICAgIGluIHJlc3BvbnNlIHRvIGJ1aWxkIGZhaWx1cmVzLgorICAgICAgICBGb3IgdGhpcyBjbGFzcyB0byB3b3JrLCB5b3UgbmVlZCB0byBlbmFibGUgdGhlIFhNTC1SUEMgaW50ZXJmYWNlIGluCisgICAgICAgIHRoZSBpbnN0YW5jZSBvZiBCdWd6aWxsYS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1idWlsZGhpc3RvcnknPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGRoaXN0b3J5LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPiBjbGFzcyByZWNvcmRzIGEKKyAgICAgICAgaGlzdG9yeSBvZiBidWlsZCBvdXRwdXQgbWV0YWRhdGEsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGRldGVjdCBwb3NzaWJsZQorICAgICAgICByZWdyZXNzaW9ucyBhcyB3ZWxsIGFzIHVzZWQgZm9yIGFuYWx5c2lzIG9mIHRoZSBidWlsZCBvdXRwdXQuCisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIEJ1aWxkIEhpc3RvcnksIHNlZSB0aGUKKyAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21haW50YWluaW5nLWJ1aWxkLW91dHB1dC1xdWFsaXR5Jz5NYWludGFpbmluZyBCdWlsZCBPdXRwdXQgUXVhbGl0eTwvbGluaz4iCisgICAgICAgIHNlY3Rpb24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYnVpbGRzdGF0cyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZHN0YXRzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5idWlsZHN0YXRzPC9maWxlbmFtZT4gY2xhc3MgcmVjb3JkcworICAgICAgICBwZXJmb3JtYW5jZSBzdGF0aXN0aWNzIGFib3V0IGVhY2ggdGFzayBleGVjdXRlZCBkdXJpbmcgdGhlIGJ1aWxkCisgICAgICAgIChlLmcuIGVsYXBzZWQgdGltZSwgQ1BVIHVzYWdlLCBhbmQgSS9PIHVzYWdlKS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB5b3UgdXNlIHRoaXMgY2xhc3MsIHRoZSBvdXRwdXQgZ29lcyBpbnRvIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERTVEFUU19CQVNFJz48ZmlsZW5hbWU+QlVJTERTVEFUU19CQVNFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGRpcmVjdG9yeSwgd2hpY2ggZGVmYXVsdHMgdG8gPGZpbGVuYW1lPiR7VE1QRElSfS9idWlsZHN0YXRzLzwvZmlsZW5hbWU+LgorICAgICAgICBZb3UgY2FuIGFuYWx5emUgdGhlIGVsYXBzZWQgdGltZSB1c2luZworICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS5weTwvZmlsZW5hbWU+LCB3aGljaAorICAgICAgICBwcm9kdWNlcyBhIGNhc2NhZGluZyBjaGFydCBvZiB0aGUgZW50aXJlIGJ1aWxkIHByb2Nlc3MgYW5kIGNhbiBiZQorICAgICAgICB1c2VmdWwgZm9yIGhpZ2hsaWdodGluZyBib3R0bGVuZWNrcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQ29sbGVjdGluZyBidWlsZCBzdGF0aXN0aWNzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB0aHJvdWdoIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUl9DTEFTU0VTJz48ZmlsZW5hbWU+VVNFUl9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIGZyb20geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgIENvbnNlcXVlbnRseSwgeW91IGRvIG5vdCBoYXZlIHRvIGRvIGFueXRoaW5nIHRvIGVuYWJsZSB0aGUgY2xhc3MuCisgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSB3YW50IHRvIGRpc2FibGUgdGhlIGNsYXNzLCBzaW1wbHkgcmVtb3ZlICJidWlsZHN0YXRzIgorICAgICAgICBmcm9tIHRoZSA8ZmlsZW5hbWU+VVNFUl9DTEFTU0VTPC9maWxlbmFtZT4gbGlzdC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1idWlsZHN0YXRzLXN1bW1hcnknPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGRzdGF0cy1zdW1tYXJ5LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBpbmhlcml0ZWQgZ2xvYmFsbHksIHByaW50cyBzdGF0aXN0aWNzIGF0IHRoZSBlbmQgb2YgdGhlIGJ1aWxkCisgICAgICAgIG9uIHNzdGF0ZSByZS11c2UuCisgICAgICAgIEluIG9yZGVyIHRvIGZ1bmN0aW9uLCB0aGlzIGNsYXNzIHJlcXVpcmVzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1idWlsZHN0YXRzJz48ZmlsZW5hbWU+YnVpbGRzdGF0czwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyBiZSBlbmFibGVkLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWNjYWNoZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5jY2FjaGUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNjYWNoZTwvZmlsZW5hbWU+IGNsYXNzIGVuYWJsZXMgdGhlCisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9jY2FjaGUuc2FtYmEub3JnLyc+Qy9DKysgQ29tcGlsZXIgQ2FjaGU8L3VsaW5rPgorICAgICAgICBmb3IgdGhlIGJ1aWxkLgorICAgICAgICBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gZ2l2ZSBhIG1pbm9yIHBlcmZvcm1hbmNlIGJvb3N0IGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgIEhvd2V2ZXIsIHVzaW5nIHRoZSBjbGFzcyBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIHNpZGUtZWZmZWN0cy4KKyAgICAgICAgVGh1cywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG8gbm90IHVzZSB0aGlzIGNsYXNzLgorICAgICAgICBTZWUgPHVsaW5rIHVybD0naHR0cDovL2NjYWNoZS5zYW1iYS5vcmcvJz48L3VsaW5rPiBmb3IgaW5mb3JtYXRpb24gb24KKyAgICAgICAgdGhlIEMvQysrIENvbXBpbGVyIENhY2hlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWNocnBhdGgnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y2hycGF0aC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y2hycGF0aDwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlICJjaHJwYXRoIiB1dGlsaXR5LCB3aGljaCBpcyB1c2VkIGR1cmluZyB0aGUKKyAgICAgICAgYnVpbGQgcHJvY2VzcyBmb3IgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+LAorICAgICAgICA8ZmlsZW5hbWU+Y3Jvc3M8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgIDxmaWxlbmFtZT5jcm9zcy1jYW5hZGlhbjwvZmlsZW5hbWU+IHJlY2lwZXMgdG8gY2hhbmdlCisgICAgICAgIDxmaWxlbmFtZT5SUEFUSDwvZmlsZW5hbWU+IHJlY29yZHMgd2l0aGluIGJpbmFyaWVzIGluIG9yZGVyIHRvIG1ha2UKKyAgICAgICAgdGhlbSByZWxvY2F0YWJsZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1jbHV0dGVyJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmNsdXR0ZXIuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNsdXR0ZXI8L2ZpbGVuYW1lPiBjbGFzcyBjb25zb2xpZGF0ZXMgdGhlCisgICAgICAgIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG5hbWluZyBhbmQgb3RoZXIgY29tbW9uIGl0ZW1zIHVzZWQgYnkgQ2x1dHRlcgorICAgICAgICBhbmQgcmVsYXRlZCByZWNpcGVzLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFVubGlrZSBzb21lIG90aGVyIGNsYXNzZXMgcmVsYXRlZCB0byBzcGVjaWZpYyBsaWJyYXJpZXMsIHJlY2lwZXMKKyAgICAgICAgICAgIGJ1aWxkaW5nIG90aGVyIHNvZnR3YXJlIHRoYXQgdXNlcyBDbHV0dGVyIGRvIG5vdCBuZWVkIHRvCisgICAgICAgICAgICBpbmhlcml0IHRoaXMgY2xhc3MgdW5sZXNzIHRoZXkgdXNlIHRoZSBzYW1lIHJlY2lwZSB2ZXJzaW9uaW5nCisgICAgICAgICAgICBzY2hlbWUgdGhhdCB0aGUgQ2x1dHRlciBhbmQgcmVsYXRlZCByZWNpcGVzIGRvLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY21ha2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y21ha2UuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNtYWtlPC9maWxlbmFtZT4gY2xhc3MgYWxsb3dzIGZvcgorICAgICAgICByZWNpcGVzIHRoYXQgbmVlZCB0byBidWlsZCBzb2Z0d2FyZSB1c2luZyB0aGUgQ01ha2UgYnVpbGQgc3lzdGVtLgorICAgICAgICBZb3UgY2FuIHVzZSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FQ01BS0UnPjxmaWxlbmFtZT5FWFRSQV9PRUNNQUtFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gYmUgcGFzc2VkIG9uCisgICAgICAgIHRoZSA8ZmlsZW5hbWU+Y21ha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGxpbmUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY21sMSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5jbWwxLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5jbWwxPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgYmFzaWMgc3VwcG9ydCBmb3IgdGhlCisgICAgICAgIExpbnV4IGtlcm5lbCBzdHlsZSBidWlsZCBjb25maWd1cmF0aW9uIHN5c3RlbS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1jb21wcmVzc19kb2MnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y29tcHJlc3NfZG9jLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRW5hYmxlcyBjb21wcmVzc2lvbiBmb3IgbWFuIHBhZ2VzIGFuZCBpbmZvIHBhZ2VzLgorICAgICAgICBUaGlzIGNsYXNzIGlzIGludGVuZGVkIHRvIGJlIGluaGVyaXRlZCBnbG9iYWxseS4KKyAgICAgICAgVGhlIGRlZmF1bHQgY29tcHJlc3Npb24gbWVjaGFuaXNtIGlzIGd6IChnemlwKSBidXQgeW91IGNhbgorICAgICAgICBzZWxlY3QgYW4gYWx0ZXJuYXRpdmUgbWVjaGFuaXNtIGJ5IHNldHRpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ET0NfQ09NUFJFU1MnPjxmaWxlbmFtZT5ET0NfQ09NUFJFU1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY29weWxlZnRfY29tcGxpYW5jZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5jb3B5bGVmdF9jb21wbGlhbmNlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5jb3B5bGVmdF9jb21wbGlhbmNlPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgcHJlc2VydmVzIHNvdXJjZSBjb2RlIGZvciB0aGUgcHVycG9zZXMgb2YgbGljZW5zZSBjb21wbGlhbmNlLgorICAgICAgICBUaGlzIGNsYXNzIGlzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSA8ZmlsZW5hbWU+YXJjaGl2ZXI8L2ZpbGVuYW1lPgorICAgICAgICBjbGFzcyBhbmQgaXMgc3RpbGwgdXNlZCBieSBzb21lIHVzZXJzIGV2ZW4gdGhvdWdoIGl0IGhhcyBiZWVuCisgICAgICAgIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWFyY2hpdmVyJz48ZmlsZW5hbWU+YXJjaGl2ZXI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY29weWxlZnRfZmlsdGVyJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmNvcHlsZWZ0X2ZpbHRlci5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEEgY2xhc3MgdXNlZCBieSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXJjaGl2ZXInPjxmaWxlbmFtZT5hcmNoaXZlcjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtY29weWxlZnRfY29tcGxpYW5jZSc+PGZpbGVuYW1lPmNvcHlsZWZ0X2NvbXBsaWFuY2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3NlcyBmb3IgZmlsdGVyaW5nIGxpY2Vuc2VzLgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNvcHlsZWZ0X2ZpbHRlcjwvZmlsZW5hbWU+IGNsYXNzIGlzIGFuIGludGVybmFsIGNsYXNzCisgICAgICAgIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1jb3JlLWltYWdlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmNvcmUtaW1hZ2UuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNvcmUtaW1hZ2U8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBjb21tb24gZGVmaW5pdGlvbnMgZm9yIHRoZQorICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS0qPC9maWxlbmFtZT4gaW1hZ2UgcmVjaXBlcywgc3VjaCBhcyBzdXBwb3J0IGZvcgorICAgICAgICBhZGRpdGlvbmFsCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWNwYW4nPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y3Bhbi5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y3BhbjwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIFBlcmwgbW9kdWxlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgUmVjaXBlcyBmb3IgUGVybCBtb2R1bGVzIGFyZSBzaW1wbGUuCisgICAgICAgIFRoZXNlIHJlY2lwZXMgdXN1YWxseSBvbmx5IG5lZWQgdG8gcG9pbnQgdG8gdGhlIHNvdXJjZSdzIGFyY2hpdmUgYW5kCisgICAgICAgIHRoZW4gaW5oZXJpdCB0aGUgcHJvcGVyIGNsYXNzIGZpbGUuCisgICAgICAgIEJ1aWxkaW5nIGlzIHNwbGl0IGludG8gdHdvIG1ldGhvZHMgZGVwZW5kaW5nIG9uIHdoaWNoIG1ldGhvZCB0aGUgbW9kdWxlCisgICAgICAgIGF1dGhvcnMgdXNlZC4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Nb2R1bGVzIHRoYXQgdXNlIG9sZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NYWtlZmlsZS5QTDwvZmlsZW5hbWU+LWJhc2VkIGJ1aWxkIHN5c3RlbSByZXF1aXJlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNwYW4uYmJjbGFzczwvZmlsZW5hbWU+IGluIHRoZWlyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TW9kdWxlcyB0aGF0IHVzZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CdWlsZC5QTDwvZmlsZW5hbWU+LWJhc2VkIGJ1aWxkIHN5c3RlbSByZXF1aXJlCisgICAgICAgICAgICAgICAgdXNpbmcgPGZpbGVuYW1lPmNwYW5fYnVpbGQuYmJjbGFzczwvZmlsZW5hbWU+IGluIHRoZWlyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWNyb3NzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmNyb3NzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5jcm9zczwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSByZWNpcGVzCisgICAgICAgIHRoYXQgYnVpbGQgdGhlIGNyb3NzLWNvbXBpbGF0aW9uIHRvb2xzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWNyb3NzLWNhbmFkaWFuJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmNyb3NzLWNhbmFkaWFuLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5jcm9zcy1jYW5hZGlhbjwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSByZWNpcGVzIHRoYXQgYnVpbGQgdGhlIENhbmFkaWFuCisgICAgICAgIENyb3NzLWNvbXBpbGF0aW9uIHRvb2xzIGZvciBTREtzLgorICAgICAgICBTZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGRpc2N1c3Npb24gb24gdGhlc2UgY3Jvc3MtY29tcGlsYXRpb24gdG9vbHMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY3Jvc3NzZGsnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y3Jvc3NzZGsuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNyb3Nzc2RrPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIHJlY2lwZXMgdGhhdCBidWlsZCB0aGUgY3Jvc3MtY29tcGlsYXRpb24KKyAgICAgICAgdG9vbHMgdXNlZCBmb3IgYnVpbGRpbmcgU0RLcy4KKyAgICAgICAgU2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluLWdlbmVyYXRpb24nPkNyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbiBHZW5lcmF0aW9uPC9saW5rPiIKKyAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBkaXNjdXNzaW9uIG9uIHRoZXNlIGNyb3NzLWNvbXBpbGF0aW9uIHRvb2xzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWRlYmlhbic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5kZWJpYW4uYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmRlYmlhbjwvZmlsZW5hbWU+IGNsYXNzIHJlbmFtZXMgb3V0cHV0IHBhY2thZ2VzIHNvIHRoYXQKKyAgICAgICAgdGhleSBmb2xsb3cgdGhlIERlYmlhbiBuYW1pbmcgcG9saWN5IChpLmUuIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+CisgICAgICAgIGJlY29tZXMgPGZpbGVuYW1lPmxpYmM2PC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5nbGliYy1kZXZlbDwvZmlsZW5hbWU+CisgICAgICAgIGJlY29tZXMgPGZpbGVuYW1lPmxpYmM2LWRldjwvZmlsZW5hbWU+LikKKyAgICAgICAgUmVuYW1pbmcgaW5jbHVkZXMgdGhlIGxpYnJhcnkgbmFtZSBhbmQgdmVyc2lvbiBhcyBwYXJ0IG9mIHRoZSBwYWNrYWdlCisgICAgICAgIG5hbWUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIGEgcmVjaXBlIGNyZWF0ZXMgcGFja2FnZXMgZm9yIG11bHRpcGxlIGxpYnJhcmllcworICAgICAgICAoc2hhcmVkIG9iamVjdCBmaWxlcyBvZiA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gdHlwZSksIHVzZSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxFQURfU09OQU1FJz48ZmlsZW5hbWU+TEVBRF9TT05BTUU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgaW4gdGhlIHJlY2lwZSB0byBzcGVjaWZ5IHRoZSBsaWJyYXJ5IG9uIHdoaWNoIHRvIGFwcGx5IHRoZQorICAgICAgICBuYW1pbmcgc2NoZW1lLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWRlcGxveSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5kZXBsb3kuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+IGNsYXNzIGhhbmRsZXMgZGVwbG95aW5nIGZpbGVzCisgICAgICAgIHRvIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9JTUFHRSc+PGZpbGVuYW1lPkRFUExPWV9ESVJfSU1BR0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICBUaGUgbWFpbiBmdW5jdGlvbiBvZiB0aGlzIGNsYXNzIGlzIHRvIGFsbG93IHRoZSBkZXBsb3kgc3RlcCB0byBiZQorICAgICAgICBhY2NlbGVyYXRlZCBieSBzaGFyZWQgc3RhdGUuCisgICAgICAgIFJlY2lwZXMgdGhhdCBpbmhlcml0IHRoaXMgY2xhc3Mgc2hvdWxkIGRlZmluZSB0aGVpciBvd24KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWRlcGxveSc+PGZpbGVuYW1lPmRvX2RlcGxveTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBmdW5jdGlvbiB0byBjb3B5IHRoZSBmaWxlcyB0byBiZSBkZXBsb3llZCB0bworICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZRElSJz48ZmlsZW5hbWU+REVQTE9ZRElSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICBhbmQgdXNlIDxmaWxlbmFtZT5hZGR0YXNrPC9maWxlbmFtZT4gdG8gYWRkIHRoZSB0YXNrIGF0IHRoZSBhcHByb3ByaWF0ZQorICAgICAgICBwbGFjZSwgd2hpY2ggaXMgdXN1YWxseSBhZnRlcgorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgb3IKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICBUaGUgY2xhc3MgdGhlbiB0YWtlcyBjYXJlIG9mIHN0YWdpbmcgdGhlIGZpbGVzIGZyb20KKyAgICAgICAgPGZpbGVuYW1lPkRFUExPWURJUjwvZmlsZW5hbWU+IHRvCisgICAgICAgIDxmaWxlbmFtZT5ERVBMT1lfRElSX0lNQUdFPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZGV2c2hlbGwnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+ZGV2c2hlbGwuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4gY2xhc3MgYWRkcyB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmRvX2RldnNoZWxsPC9maWxlbmFtZT4gdGFzay4KKyAgICAgICAgRGlzdHJpYnV0aW9uIHBvbGljeSBkaWN0YXRlcyB3aGV0aGVyIHRvIGluY2x1ZGUgdGhpcyBjbGFzcy4KKyAgICAgICAgU2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGxhdGRldi1hcHBkZXYtZGV2c2hlbGwnPlVzaW5nIGEgRGV2ZWxvcG1lbnQgU2hlbGw8L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgICAgdXNpbmcgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZGlzdHJvX2ZlYXR1cmVzX2NoZWNrJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmRpc3Ryb19mZWF0dXJlc19jaGVjay5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGlzdHJvX2ZlYXR1cmVzX2NoZWNrPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgYWxsb3dzIGluZGl2aWR1YWwgcmVjaXBlcyB0byBjaGVjayBmb3IgcmVxdWlyZWQgYW5kIGNvbmZsaWN0aW5nCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DT05GTElDVF9ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5DT05GTElDVF9ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzLgorICAgICAgICBJZiBhbnkgY29uZGl0aW9ucyBzcGVjaWZpZWQgaW4gdGhlIHJlY2lwZSB1c2luZyB0aGUgYWJvdmUgdmFyaWFibGVzIGFyZQorICAgICAgICBub3QgbWV0LCB0aGUgcmVjaXBlIHdpbGwgYmUgc2tpcHBlZC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1kaXN0cm9kYXRhJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmRpc3Ryb2RhdGEuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmRpc3Ryb2RhdGE8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBmb3IgYXV0b21hdGljIGNoZWNraW5nIGZvciB1cHN0cmVhbSByZWNpcGUgdXBkYXRlcy4KKyAgICAgICAgVGhlIGNsYXNzIGNyZWF0ZXMgYSBjb21tYS1zZXBhcmF0ZWQgdmFsdWUgKENTVikgc3ByZWFkc2hlZXQgdGhhdAorICAgICAgICBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVjaXBlcy4KKyAgICAgICAgVGhlIGluZm9ybWF0aW9uIHByb3ZpZGVzIHRoZSA8ZmlsZW5hbWU+ZG9fZGlzdHJvZGF0YTwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+ZG9fZGlzdHJvX2NoZWNrPC9maWxlbmFtZT4gdGFza3MsIHdoaWNoIGRvIHVwc3RyZWFtIGNoZWNraW5nCisgICAgICAgIGFuZCBhbHNvIHZlcmlmeSBpZiBhIHBhY2thZ2UgaXMgdXNlZCBpbiBtdWx0aXBsZSBtYWpvciBkaXN0cmlidXRpb25zLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY2xhc3MgaXMgbm90IGluY2x1ZGVkIGJ5IGRlZmF1bHQuCisgICAgICAgIFRvIHVzZSBpdCwgeW91IG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGZpbGVzIGFuZCBzZXQgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTkhFUklUJz48ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZToKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvZGlzdHJvX2FsaWFzLmluYworICAgICBpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvcmVjaXBlX2NvbG9yLmluYworICAgICBpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvbWFpbnRhaW5lcnMuaW5jCisgICAgIGluY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS91cHN0cmVhbV90cmFja2luZy5pbmMKKyAgICAgaW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3BhY2thZ2VfcmVnZXguaW5jCisgICAgIElOSEVSSVQrPSAiZGlzdHJvZGF0YSIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWRpc3R1dGlscyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5kaXN0dXRpbHMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmRpc3R1dGlsczwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIHJlY2lwZXMgZm9yIFB5dGhvbgorICAgICAgICB2ZXJzaW9uIDIueCBleHRlbnNpb25zLCB3aGljaCBhcmUgc2ltcGxlLgorICAgICAgICBUaGVzZSByZWNpcGVzIHVzdWFsbHkgb25seSBuZWVkIHRvIHBvaW50IHRvIHRoZSBzb3VyY2UncyBhcmNoaXZlIGFuZAorICAgICAgICB0aGVuIGluaGVyaXQgdGhlIHByb3BlciBjbGFzcy4KKyAgICAgICAgQnVpbGRpbmcgaXMgc3BsaXQgaW50byB0d28gbWV0aG9kcyBkZXBlbmRpbmcgb24gd2hpY2ggbWV0aG9kIHRoZQorICAgICAgICBtb2R1bGUgYXV0aG9ycyB1c2VkLgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4dGVuc2lvbnMgdGhhdCB1c2UgYW4gQXV0b3Rvb2xzLWJhc2VkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIHJlcXVpcmUgQXV0b3Rvb2xzIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXN0dXRpbHM8L2ZpbGVuYW1lPi1iYXNlZCBjbGFzc2VzIGluIHRoZWlyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXh0ZW5zaW9ucyB0aGF0IHVzZSBidWlsZCBzeXN0ZW1zIGJhc2VkIG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpc3R1dGlsczwvZmlsZW5hbWU+IHJlcXVpcmUKKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmRpc3R1dGlsczwvZmlsZW5hbWU+IGNsYXNzIGluIHRoZWlyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXh0ZW5zaW9ucyB0aGF0IHVzZSBidWlsZCBzeXN0ZW1zIGJhc2VkIG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNldHVwdG9vbHM8L2ZpbGVuYW1lPiByZXF1aXJlIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXNldHVwdG9vbHMnPjxmaWxlbmFtZT5zZXR1cHRvb2xzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgY2xhc3MgaW4gdGhlaXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZGlzdHV0aWxzMyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5kaXN0dXRpbHMzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5kaXN0dXRpbHMzPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgcmVjaXBlcyBmb3IgUHl0aG9uCisgICAgICAgIHZlcnNpb24gMy54IGV4dGVuc2lvbnMsIHdoaWNoIGFyZSBzaW1wbGUuCisgICAgICAgIFRoZXNlIHJlY2lwZXMgdXN1YWxseSBvbmx5IG5lZWQgdG8gcG9pbnQgdG8gdGhlIHNvdXJjZSdzIGFyY2hpdmUgYW5kCisgICAgICAgIHRoZW4gaW5oZXJpdCB0aGUgcHJvcGVyIGNsYXNzLgorICAgICAgICBCdWlsZGluZyBpcyBzcGxpdCBpbnRvIHR3byBtZXRob2RzIGRlcGVuZGluZyBvbiB3aGljaCBtZXRob2QgdGhlCisgICAgICAgIG1vZHVsZSBhdXRob3JzIHVzZWQuCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXh0ZW5zaW9ucyB0aGF0IHVzZSBhbiBBdXRvdG9vbHMtYmFzZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgcmVxdWlyZSBBdXRvdG9vbHMgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpc3R1dGlsczwvZmlsZW5hbWU+LWJhc2VkIGNsYXNzZXMgaW4gdGhlaXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRlbnNpb25zIHRoYXQgdXNlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpc3R1dGlsczwvZmlsZW5hbWU+LWJhc2VkIGJ1aWxkIHN5c3RlbXMgcmVxdWlyZQorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZGlzdHV0aWxzPC9maWxlbmFtZT4gY2xhc3MgaW4gdGhlaXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRlbnNpb25zIHRoYXQgdXNlIGJ1aWxkIHN5c3RlbXMgYmFzZWQgb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2V0dXB0b29sczM8L2ZpbGVuYW1lPiByZXF1aXJlIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXNldHVwdG9vbHMnPjxmaWxlbmFtZT5zZXR1cHRvb2xzMzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNsYXNzIGluIHRoZWlyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWV4dGVybmFsc3JjJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmV4dGVybmFsc3JjLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIGJ1aWxkaW5nIHNvZnR3YXJlCisgICAgICAgIGZyb20gc291cmNlIGNvZGUgdGhhdCBpcyBleHRlcm5hbCB0byB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgQnVpbGRpbmcgc29mdHdhcmUgZnJvbSBhbiBleHRlcm5hbCBzb3VyY2UgdHJlZSBtZWFucyB0aGF0IHRoZSBidWlsZAorICAgICAgICBzeXN0ZW0ncyBub3JtYWwgZmV0Y2gsIHVucGFjaywgYW5kIHBhdGNoIHByb2Nlc3MgaXMgbm90IHVzZWQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPiBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlcyB0bworICAgICAgICBsb2NhdGUgdW5wYWNrZWQgcmVjaXBlIHNvdXJjZSBjb2RlIGFuZCB0byBidWlsZCBpdCwgcmVzcGVjdGl2ZWx5LgorICAgICAgICBXaGVuIHlvdXIgcmVjaXBlIGluaGVyaXRzIHRoZSA8ZmlsZW5hbWU+ZXh0ZXJuYWxzcmM8L2ZpbGVuYW1lPiBjbGFzcywKKyAgICAgICAgeW91IHVzZSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVEVSTkFMU1JDJz48ZmlsZW5hbWU+RVhURVJOQUxTUkM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRFUk5BTFNSQ19CVUlMRCc+PGZpbGVuYW1lPkVYVEVSTkFMU1JDX0JVSUxEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlcyB0byB1bHRpbWF0ZWx5IGRlZmluZSA8ZmlsZW5hbWU+UzwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIGNsYXNzIGV4cGVjdHMgdGhlIHNvdXJjZSBjb2RlIHRvIHN1cHBvcnQgcmVjaXBlIGJ1aWxkcworICAgICAgICB0aGF0IHVzZSB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIHRvIHBvaW50IHRvIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICBzeXN0ZW0gcGxhY2VzIHRoZSBnZW5lcmF0ZWQgb2JqZWN0cyBidWlsdCBmcm9tIHRoZSByZWNpcGVzLgorICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaXMgc2V0IHRvIHRoZQorICAgICAgICBmb2xsb3dpbmcsIHdoaWNoIGlzIHNlcGFyYXRlIGZyb20gdGhlIHNvdXJjZSBkaXJlY3RvcnkKKyAgICAgICAgKDxmaWxlbmFtZT5TPC9maWxlbmFtZT4pOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7V09SS0RJUn0vJHtCUE59L3tQVn0vCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgU2VlIHRoZXNlIHZhcmlhYmxlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbjoKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlBOJz48ZmlsZW5hbWU+QlBOPC9maWxlbmFtZT48L2xpbms+LCBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZQorICAgICAgICA8ZmlsZW5hbWU+ZXh0ZXJuYWxzcmM8L2ZpbGVuYW1lPiBjbGFzcywgc2VlIHRoZSBjb21tZW50cyBpbgorICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2V4dGVybmFsc3JjLmJiY2xhc3M8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGUgPGZpbGVuYW1lPmV4dGVybmFsc3JjPC9maWxlbmFtZT4KKyAgICAgICAgY2xhc3MsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkaW5nLXNvZnR3YXJlLWZyb20tYW4tZXh0ZXJuYWwtc291cmNlJz5CdWlsZGluZyBTb2Z0d2FyZSBmcm9tIGFuIEV4dGVybmFsIFNvdXJjZTwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1leHRyYXVzZXJzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmV4dHJhdXNlcnMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmV4dHJhdXNlcnM8L2ZpbGVuYW1lPiBjbGFzcyBhbGxvd3MKKyAgICAgICAgYWRkaXRpb25hbCB1c2VyIGFuZCBncm91cCBjb25maWd1cmF0aW9uIHRvIGJlIGFwcGxpZWQgYXQgdGhlIGltYWdlCisgICAgICAgIGxldmVsLgorICAgICAgICBJbmhlcml0aW5nIHRoaXMgY2xhc3MgZWl0aGVyIGdsb2JhbGx5IG9yIGZyb20gYW4gaW1hZ2UgcmVjaXBlIGFsbG93cworICAgICAgICBhZGRpdGlvbmFsIHVzZXIgYW5kIGdyb3VwIG9wZXJhdGlvbnMgdG8gYmUgcGVyZm9ybWVkIHVzaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfVVNFUlNfUEFSQU1TJz48ZmlsZW5hbWU+RVhUUkFfVVNFUlNfUEFSQU1TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFRoZSB1c2VyIGFuZCBncm91cCBvcGVyYXRpb25zIGFkZGVkIHVzaW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmV4dHJhdXNlcnM8L2ZpbGVuYW1lPiBjbGFzcyBhcmUgbm90IHRpZWQgdG8gYSBzcGVjaWZpYworICAgICAgICAgICAgcmVjaXBlIG91dHNpZGUgb2YgdGhlIHJlY2lwZSBmb3IgdGhlIGltYWdlLgorICAgICAgICAgICAgVGh1cywgdGhlIG9wZXJhdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCBhY3Jvc3MgdGhlIGltYWdlIGFzIGEgd2hvbGUuCisgICAgICAgICAgICBVc2UgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy11c2VyYWRkJz48ZmlsZW5hbWU+dXNlcmFkZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MgdG8gYWRkIHVzZXIgYW5kIGdyb3VwIGNvbmZpZ3VyYXRpb24gdG8gYSBzcGVjaWZpYyByZWNpcGUuCisgICAgICAgIDwvbm90ZT4KKyAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgdXNlcyB0aGlzIGNsYXNzIGluIGFuIGltYWdlIHJlY2lwZToKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpbmhlcml0IGV4dHJhdXNlcnMKKyAgICAgRVhUUkFfVVNFUlNfUEFSQU1TID0gIlwKKyAgICAgICAgIHVzZXJhZGQgLXAgJycgdGVzdGVyOyBcCisgICAgICAgICBncm91cGFkZCBkZXZlbG9wZXJzOyBcCisgICAgICAgICB1c2VyZGVsIG5vYm9keTsgXAorICAgICAgICAgZ3JvdXBkZWwgLWcgdmlkZW87IFwKKyAgICAgICAgIGdyb3VwbW9kIC1nIDEwMjAgZGV2ZWxvcGVyczsgXAorICAgICAgICAgdXNlcm1vZCAtcyAvYmluL3NoIHRlc3RlcjsgXAorICAgICAgICAgIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGFkZHMgdHdvIHVzZXJzIG5hbWVkICJ0ZXN0ZXItamltIiBhbmQKKyAgICAgICAgInRlc3Rlci1zdWUiIGFuZCBhc3NpZ25zIHBhc3N3b3JkczoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpbmhlcml0IGV4dHJhdXNlcnMKKyAgICAgRVhUUkFfVVNFUlNfUEFSQU1TID0gIlwKKyAgICAgICAgIHVzZXJhZGQgLVAgdGVzdGVyMDEgdGVzdGVyLWppbTsgXAorICAgICAgICAgdXNlcmFkZCAtUCB0ZXN0ZXIwMSB0ZXN0ZXItc3VlOyBcCisgICAgICAgICAiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgRmluYWxseSwgaGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgc2V0cyB0aGUgcm9vdCBwYXNzd29yZCB0bworICAgICAgICAiMTg3NioxOCI6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgaW5oZXJpdCBleHRyYXVzZXJzCisgICAgIEVYVFJBX1VTRVJTX1BBUkFNUyA9ICJcCisgICAgICAgICB1c2VybW9kIC1QIDE4NzYqMTggcm9vdDsgXAorICAgICAgICAgIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZm9udGNhY2hlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmZvbnRjYWNoZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Zm9udGNhY2hlPC9maWxlbmFtZT4gY2xhc3MgZ2VuZXJhdGVzIHRoZQorICAgICAgICBwcm9wZXIgcG9zdC1pbnN0YWxsIGFuZCBwb3N0LXJlbW92ZSAocG9zdGluc3QgYW5kIHBvc3RybSkKKyAgICAgICAgc2NyaXB0bGV0cyBmb3IgZm9udCBwYWNrYWdlcy4KKyAgICAgICAgVGhlc2Ugc2NyaXB0bGV0cyBjYWxsIDxmaWxlbmFtZT5mYy1jYWNoZTwvZmlsZW5hbWU+IChwYXJ0IG9mCisgICAgICAgIDxmaWxlbmFtZT5Gb250Y29uZmlnPC9maWxlbmFtZT4pIHRvIGFkZCB0aGUgZm9udHMgdG8gdGhlIGZvbnQKKyAgICAgICAgaW5mb3JtYXRpb24gY2FjaGUuCisgICAgICAgIFNpbmNlIHRoZSBjYWNoZSBmaWxlcyBhcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLAorICAgICAgICA8ZmlsZW5hbWU+ZmMtY2FjaGU8L2ZpbGVuYW1lPiBydW5zIHVzaW5nIFFFTVUgaWYgdGhlIHBvc3RpbnN0CisgICAgICAgIHNjcmlwdGxldHMgbmVlZCB0byBiZSBydW4gb24gdGhlIGJ1aWxkIGhvc3QgZHVyaW5nIGltYWdlIGNyZWF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiB0aGUgZm9udHMgYmVpbmcgaW5zdGFsbGVkIGFyZSBpbiBwYWNrYWdlcyBvdGhlciB0aGFuIHRoZSBtYWluCisgICAgICAgIHBhY2thZ2UsIHNldAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRk9OVF9QQUNLQUdFUyc+PGZpbGVuYW1lPkZPTlRfUEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdG8gc3BlY2lmeSB0aGUgcGFja2FnZXMgY29udGFpbmluZyB0aGUgZm9udHMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZ2NvbmYnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Z2NvbmYuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmdjb25mPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgY29tbW9uCisgICAgICAgIGZ1bmN0aW9uYWxpdHkgZm9yIHJlY2lwZXMgdGhhdCBuZWVkIHRvIGluc3RhbGwgR0NvbmYgc2NoZW1hcy4KKyAgICAgICAgVGhlIHNjaGVtYXMgd2lsbCBiZSBwdXQgaW50byBhIHNlcGFyYXRlIHBhY2thZ2UKKyAgICAgICAgKDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS1nY29uZjwvZmlsZW5hbWU+KQorICAgICAgICB0aGF0IGlzIGNyZWF0ZWQgYXV0b21hdGljYWxseSB3aGVuIHRoaXMgY2xhc3MgaXMgaW5oZXJpdGVkLgorICAgICAgICBUaGlzIHBhY2thZ2UgdXNlcyB0aGUgYXBwcm9wcmlhdGUgcG9zdC1pbnN0YWxsIGFuZCBwb3N0LXJlbW92ZQorICAgICAgICAocG9zdGluc3QvcG9zdHJtKSBzY3JpcHRsZXRzIHRvIHJlZ2lzdGVyIGFuZCB1bnJlZ2lzdGVyIHRoZSBzY2hlbWFzCisgICAgICAgIGluIHRoZSB0YXJnZXQgaW1hZ2UuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZ2V0dGV4dCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5nZXR0ZXh0LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5nZXR0ZXh0PC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3IKKyAgICAgICAgYnVpbGRpbmcgc29mdHdhcmUgdGhhdCB1c2VzIHRoZSBHTlUgPGZpbGVuYW1lPmdldHRleHQ8L2ZpbGVuYW1lPgorICAgICAgICBpbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgbG9jYWxpemF0aW9uIHN5c3RlbS4KKyAgICAgICAgQWxsIHJlY2lwZXMgYnVpbGRpbmcgc29mdHdhcmUgdGhhdCB1c2UKKyAgICAgICAgPGZpbGVuYW1lPmdldHRleHQ8L2ZpbGVuYW1lPiBzaG91bGQgaW5oZXJpdCB0aGlzIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWdub21lJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmdub21lLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5nbm9tZTwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIHJlY2lwZXMgdGhhdAorICAgICAgICBidWlsZCBzb2Z0d2FyZSBmcm9tIHRoZSBHTk9NRSBzdGFjay4KKyAgICAgICAgVGhpcyBjbGFzcyBpbmhlcml0cyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZ25vbWViYXNlJz48ZmlsZW5hbWU+Z25vbWViYXNlPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ndGstaWNvbi1jYWNoZSc+PGZpbGVuYW1lPmd0ay1pY29uLWNhY2hlPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1nY29uZic+PGZpbGVuYW1lPmdjb25mPC9maWxlbmFtZT48L2xpbms+IGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1taW1lJz48ZmlsZW5hbWU+bWltZTwvZmlsZW5hbWU+PC9saW5rPiBjbGFzc2VzLgorICAgICAgICBUaGUgY2xhc3MgYWxzbyBkaXNhYmxlcyBHT2JqZWN0IGludHJvc3BlY3Rpb24gd2hlcmUgYXBwbGljYWJsZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1nbm9tZWJhc2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Z25vbWViYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5nbm9tZWJhc2U8L2ZpbGVuYW1lPiBjbGFzcyBpcyB0aGUgYmFzZQorICAgICAgICBjbGFzcyBmb3IgcmVjaXBlcyB0aGF0IGJ1aWxkIHNvZnR3YXJlIGZyb20gdGhlIEdOT01FIHN0YWNrLgorICAgICAgICBUaGlzIGNsYXNzIHNldHMKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+IHRvCisgICAgICAgIGRvd25sb2FkIHRoZSBzb3VyY2UgZnJvbSB0aGUgR05PTUUgbWlycm9ycyBhcyB3ZWxsIGFzIGV4dGVuZGluZworICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB3aXRoIHRoZSB0eXBpY2FsIEdOT01FIGluc3RhbGxhdGlvbiBwYXRocy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1ncnViLWVmaSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5ncnViLWVmaS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z3J1Yi1lZmk8L2ZpbGVuYW1lPgorICAgICAgICBjbGFzcyBwcm92aWRlcyA8ZmlsZW5hbWU+Z3J1Yi1lZmk8L2ZpbGVuYW1lPi1zcGVjaWZpYyBmdW5jdGlvbnMgZm9yCisgICAgICAgIGJ1aWxkaW5nIGJvb3RhYmxlIGltYWdlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBzdXBwb3J0cyBzZXZlcmFsIHZhcmlhYmxlczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5JVFJEJz48ZmlsZW5hbWU+SU5JVFJEPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIEluZGljYXRlcyBsaXN0IG9mIGZpbGVzeXN0ZW0gaW1hZ2VzIHRvIGNvbmNhdGVuYXRlIGFuZCB1c2UKKyAgICAgICAgICAgICAgICBhcyBhbiBpbml0aWFsIFJBTSBkaXNrIChpbml0cmQpIChvcHRpb25hbCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJPT1RGUyc+PGZpbGVuYW1lPlJPT1RGUzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgYSBmaWxlc3lzdGVtIGltYWdlIHRvIGluY2x1ZGUgYXMgdGhlIHJvb3QgZmlsZXN5c3RlbQorICAgICAgICAgICAgICAgIChvcHRpb25hbCkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdSVUJfR0ZYU0VSSUFMJz48ZmlsZW5hbWU+R1JVQl9HRlhTRVJJQUw8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgU2V0IHRoaXMgdG8gIjEiIHRvIGhhdmUgZ3JhcGhpY3MgYW5kIHNlcmlhbCBpbiB0aGUgYm9vdCBtZW51LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MQUJFTFMnPjxmaWxlbmFtZT5MQUJFTFM8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHRhcmdldHMgZm9yIHRoZSBhdXRvbWF0aWMgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQVBQRU5EJz48ZmlsZW5hbWU+QVBQRU5EPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIEFuIG92ZXJyaWRlIGxpc3Qgb2YgYXBwZW5kIHN0cmluZ3MgZm9yIGVhY2gKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TEFCRUw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR1JVQl9PUFRTJz48ZmlsZW5hbWU+R1JVQl9PUFRTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBhZGQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS4KKyAgICAgICAgICAgICAgICBPcHRpb25zIGFyZSBkZWxpbWl0ZWQgdXNpbmcgc2VtaS1jb2xvbiBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT47PC9maWxlbmFtZT4pLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HUlVCX1RJTUVPVVQnPjxmaWxlbmFtZT5HUlVCX1RJTUVPVVQ8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgVGltZW91dCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBkZWZhdWx0IDxmaWxlbmFtZT5MQUJFTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgKG9wdGlvbmFsKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWdzZXR0aW5ncyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5nc2V0dGluZ3MuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmdzZXR0aW5nczwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciByZWNpcGVzIHRoYXQgbmVlZCB0byBpbnN0YWxsCisgICAgICAgIEdTZXR0aW5ncyAoZ2xpYikgc2NoZW1hcy4KKyAgICAgICAgVGhlIHNjaGVtYXMgYXJlIGFzc3VtZWQgdG8gYmUgcGFydCBvZiB0aGUgbWFpbiBwYWNrYWdlLgorICAgICAgICBBcHByb3ByaWF0ZSBwb3N0LWluc3RhbGwgYW5kIHBvc3QtcmVtb3ZlIChwb3N0aW5zdC9wb3N0cm0pCisgICAgICAgIHNjcmlwdGxldHMgYXJlIGFkZGVkIHRvIHJlZ2lzdGVyIGFuZCB1bnJlZ2lzdGVyIHRoZSBzY2hlbWFzIGluIHRoZQorICAgICAgICB0YXJnZXQgaW1hZ2UuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZ3RrLWRvYyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5ndGstZG9jLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5ndGstZG9jPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgaXMgYSBoZWxwZXIgY2xhc3MgdG8gcHVsbCBpbiB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgPGZpbGVuYW1lPmd0ay1kb2M8L2ZpbGVuYW1lPiBkZXBlbmRlbmNpZXMgYW5kIGRpc2FibGUKKyAgICAgICAgPGZpbGVuYW1lPmd0ay1kb2M8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1ndGstaWNvbi1jYWNoZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5ndGstaWNvbi1jYWNoZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z3RrLWljb24tY2FjaGU8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBnZW5lcmF0ZXMgdGhlIHByb3BlciBwb3N0LWluc3RhbGwgYW5kIHBvc3QtcmVtb3ZlIChwb3N0aW5zdC9wb3N0cm0pCisgICAgICAgIHNjcmlwdGxldHMgZm9yIHBhY2thZ2VzIHRoYXQgdXNlIEdUSysgYW5kIGluc3RhbGwgaWNvbnMuCisgICAgICAgIFRoZXNlIHNjcmlwdGxldHMgY2FsbCA8ZmlsZW5hbWU+Z3RrLXVwZGF0ZS1pY29uLWNhY2hlPC9maWxlbmFtZT4gdG8gYWRkCisgICAgICAgIHRoZSBmb250cyB0byBHVEsrJ3MgaWNvbiBjYWNoZS4KKyAgICAgICAgU2luY2UgdGhlIGNhY2hlIGZpbGVzIGFyZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsCisgICAgICAgIDxmaWxlbmFtZT5ndGstdXBkYXRlLWljb24tY2FjaGU8L2ZpbGVuYW1lPiBpcyBydW4gdXNpbmcgUUVNVSBpZiB0aGUKKyAgICAgICAgcG9zdGluc3Qgc2NyaXB0bGV0cyBuZWVkIHRvIGJlIHJ1biBvbiB0aGUgYnVpbGQgaG9zdCBkdXJpbmcgaW1hZ2UKKyAgICAgICAgY3JlYXRpb24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZ3RrLWltbW9kdWxlcy1jYWNoZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5ndGstaW1tb2R1bGVzLWNhY2hlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5ndGstaW1tb2R1bGVzLWNhY2hlPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgZ2VuZXJhdGVzIHRoZSBwcm9wZXIgcG9zdC1pbnN0YWxsIGFuZCBwb3N0LXJlbW92ZSAocG9zdGluc3QvcG9zdHJtKQorICAgICAgICBzY3JpcHRsZXRzIGZvciBwYWNrYWdlcyB0aGF0IGluc3RhbGwgR1RLKyBpbnB1dCBtZXRob2QgbW9kdWxlcyBmb3IKKyAgICAgICAgdmlydHVhbCBrZXlib2FyZHMuCisgICAgICAgIFRoZXNlIHNjcmlwdGxldHMgY2FsbCA8ZmlsZW5hbWU+Z3RrLXVwZGF0ZS1pY29uLWNhY2hlPC9maWxlbmFtZT4gdG8gYWRkCisgICAgICAgIHRoZSBpbnB1dCBtZXRob2QgbW9kdWxlcyB0byB0aGUgY2FjaGUuCisgICAgICAgIFNpbmNlIHRoZSBjYWNoZSBmaWxlcyBhcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLAorICAgICAgICA8ZmlsZW5hbWU+Z3RrLXVwZGF0ZS1pY29uLWNhY2hlPC9maWxlbmFtZT4gaXMgcnVuIHVzaW5nIFFFTVUgaWYgdGhlCisgICAgICAgIHBvc3RpbnN0IHNjcmlwdGxldHMgbmVlZCB0byBiZSBydW4gb24gdGhlIGJ1aWxkIGhvc3QgZHVyaW5nIGltYWdlCisgICAgICAgIGNyZWF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiB0aGUgaW5wdXQgbWV0aG9kIG1vZHVsZXMgYmVpbmcgaW5zdGFsbGVkIGFyZSBpbiBwYWNrYWdlcyBvdGhlciB0aGFuCisgICAgICAgIHRoZSBtYWluIHBhY2thZ2UsIHNldAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR1RLSU1NT0RVTEVTX1BBQ0tBR0VTJz48ZmlsZW5hbWU+R1RLSU1NT0RVTEVTX1BBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRvIHNwZWNpZnkgdGhlIHBhY2thZ2VzIGNvbnRhaW5pbmcgdGhlIG1vZHVsZXMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZ3VtbWlib290Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmd1bW1pYm9vdC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z3VtbWlib290PC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgZnVuY3Rpb25zIHNwZWNpZmljCisgICAgICAgIHRvIHRoZSBndW1taWJvb3QgYm9vdGxvYWRlciBmb3IgYnVpbGRpbmcgYm9vdGFibGUgaW1hZ2VzLgorICAgICAgICBUaGlzIGlzIGFuIGludGVybmFsIGNsYXNzIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUKKyAgICAgICAgdXNlZCBkaXJlY3RseS4KKyAgICAgICAgU2V0IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRUZJX1BST1ZJREVSJz48ZmlsZW5hbWU+RUZJX1BST1ZJREVSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIHRvICJndW1taWJvb3QiIHRvIHVzZSB0aGlzIGNsYXNzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gbW9yZSB2YXJpYWJsZXMgdXNlZCBhbmQgc3VwcG9ydGVkIGluIHRoaXMgY2xhc3MsCisgICAgICAgIHNlZSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdVTU1JQk9PVF9DRkcnPjxmaWxlbmFtZT5HVU1NSUJPT1RfQ0ZHPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR1VNTUlCT09UX0VOVFJJRVMnPjxmaWxlbmFtZT5HVU1NSUJPT1RfRU5UUklFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HVU1NSUJPT1RfVElNRU9VVCc+PGZpbGVuYW1lPkdVTU1JQk9PVF9USU1FT1VUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBhbHNvIHNlZSB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2ZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2d1bW1pYm9vdC8nPkd1bW1pYm9vdCBkb2N1bWVudGF0aW9uPC91bGluaz4KKyAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZ3ppcG5hdGl2ZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5nemlwbmF0aXZlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5nemlwbmF0aXZlPC9maWxlbmFtZT4KKyAgICAgICAgY2xhc3MgZW5hYmxlcyB0aGUgdXNlIG9mIG5hdGl2ZSB2ZXJzaW9ucyBvZiA8ZmlsZW5hbWU+Z3ppcDwvZmlsZW5hbWU+CisgICAgICAgIGFuZCA8ZmlsZW5hbWU+cGlnejwvZmlsZW5hbWU+IHJhdGhlciB0aGFuIHRoZSB2ZXJzaW9ucyBvZiB0aGVzZSB0b29scworICAgICAgICBmcm9tIHRoZSBidWlsZCBob3N0LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWljZWNjJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmljZWNjLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzCisgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vZ2l0aHViLmNvbS9pY2VjYy9pY2VjcmVhbSc+SWNlY3JlYW08L3VsaW5rPiwgd2hpY2gKKyAgICAgICAgZmFjaWxpdGF0ZXMgdGFraW5nIGNvbXBpbGUgam9icyBhbmQgZGlzdHJpYnV0aW5nIHRoZW0gYW1vbmcgcmVtb3RlCisgICAgICAgIG1hY2hpbmVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY2xhc3Mgc3RhZ2VzIGRpcmVjdG9yaWVzIHdpdGggc3ltbGlua3MgZnJvbSA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4KKyAgICAgICAgYW5kIDxmaWxlbmFtZT5nKys8L2ZpbGVuYW1lPiB0byA8ZmlsZW5hbWU+aWNlY2M8L2ZpbGVuYW1lPiwgZm9yIGJvdGgKKyAgICAgICAgbmF0aXZlIGFuZCBjcm9zcyBjb21waWxlcnMuCisgICAgICAgIERlcGVuZGluZyBvbiBlYWNoIGNvbmZpZ3VyZSBvciBjb21waWxlLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICBhZGRzIHRoZSBkaXJlY3RvcmllcyBhdCB0aGUgaGVhZCBvZiB0aGUgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiBsaXN0CisgICAgICAgIGFuZCB0aGVuIHNldHMgdGhlIDxmaWxlbmFtZT5JQ0VDQ19DWFg8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgPGZpbGVuYW1lPklDRUNfQ0M8L2ZpbGVuYW1lPiB2YXJpYWJsZXMsIHdoaWNoIGFyZSB0aGUgcGF0aHMgdG8gdGhlCisgICAgICAgIDxmaWxlbmFtZT5nKys8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmdjYzwvZmlsZW5hbWU+IGNvbXBpbGVycywKKyAgICAgICAgcmVzcGVjdGl2ZWx5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgdGhlIGNyb3NzIGNvbXBpbGVyLCB0aGUgY2xhc3MgY3JlYXRlcyBhIDxmaWxlbmFtZT50YXIuZ3o8L2ZpbGVuYW1lPgorICAgICAgICBmaWxlIHRoYXQgY29udGFpbnMgdGhlIFlvY3RvIFByb2plY3QgdG9vbGNoYWluIGFuZCBzZXRzCisgICAgICAgIDxmaWxlbmFtZT5JQ0VDQ19WRVJTSU9OPC9maWxlbmFtZT4sIHdoaWNoIGlzIHRoZSB2ZXJzaW9uIG9mIHRoZQorICAgICAgICBjcm9zcy1jb21waWxlciB1c2VkIGluIHRoZSBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4sIGFjY29yZGluZ2x5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY2xhc3MgaGFuZGxlcyBhbGwgdGhyZWUgZGlmZmVyZW50IGNvbXBpbGUgc3RhZ2VzCisgICAgICAgIChpLmUgbmF0aXZlICxjcm9zcy1rZXJuZWwgYW5kIHRhcmdldCkgYW5kIGNyZWF0ZXMgdGhlIG5lY2Vzc2FyeQorICAgICAgICBlbnZpcm9ubWVudCA8ZmlsZW5hbWU+dGFyLmd6PC9maWxlbmFtZT4gZmlsZSB0byBiZSB1c2VkIGJ5IHRoZSByZW1vdGUKKyAgICAgICAgbWFjaGluZXMuCisgICAgICAgIFRoZSBjbGFzcyBhbHNvIHN1cHBvcnRzIFNESyBnZW5lcmF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiA8bGluayBsaW5rZW5kPSd2YXItSUNFQ0NfUEFUSCc+PGZpbGVuYW1lPklDRUNDX1BBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgaXMgbm90IHNldCBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwgdGhlbiB0aGUKKyAgICAgICAgY2xhc3MgdHJpZXMgdG8gbG9jYXRlIHRoZSA8ZmlsZW5hbWU+aWNlY2M8L2ZpbGVuYW1lPiBiaW5hcnkKKyAgICAgICAgdXNpbmcgPGZpbGVuYW1lPndoaWNoPC9maWxlbmFtZT4uCisKKyAgICAgICAgSWYKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlDRUNDX0VOVl9FWEVDJz48ZmlsZW5hbWU+SUNFQ0NfRU5WX0VYRUM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgaXMgc2V0IGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB0aGUgdmFyaWFibGUgc2hvdWxkCisgICAgICAgIHBvaW50IHRvIHRoZSA8ZmlsZW5hbWU+aWNlY2MtY3JlYXRlLWVudjwvZmlsZW5hbWU+IHNjcmlwdAorICAgICAgICBwcm92aWRlZCBieSB0aGUgdXNlci4KKyAgICAgICAgSWYgeW91IGRvIG5vdCBwb2ludCB0byBhIHVzZXItcHJvdmlkZWQgc2NyaXB0LCB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgIHVzZXMgdGhlIGRlZmF1bHQgc2NyaXB0IHByb3ZpZGVkIGJ5IHRoZSByZWNpcGUKKyAgICAgICAgPGZpbGVuYW1lPmljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlLmJiPC9maWxlbmFtZT4uCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgVGhpcyBzY3JpcHQgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIGFuZCBub3QgdGhlIG9uZSB0aGF0IGNvbWVzIHdpdGgKKyAgICAgICAgICAgIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+LgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIHlvdSBkbyBub3Qgd2FudCB0aGUgSWNlY3JlYW0gZGlzdHJpYnV0ZWQgY29tcGlsZSBzdXBwb3J0IHRvIGFwcGx5CisgICAgICAgIHRvIHNwZWNpZmljIHJlY2lwZXMgb3IgY2xhc3NlcywgeW91IGNhbiBlZmZlY3RpdmVseSAiYmxhY2tsaXN0IiB0aGVtCisgICAgICAgIGJ5IGxpc3RpbmcgdGhlIHJlY2lwZXMgYW5kIGNsYXNzZXMgdXNpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JQ0VDQ19VU0VSX1BBQ0tBR0VfQkwnPjxmaWxlbmFtZT5JQ0VDQ19VU0VSX1BBQ0tBR0VfQkw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JQ0VDQ19VU0VSX0NMQVNTX0JMJz48ZmlsZW5hbWU+SUNFQ0NfVVNFUl9DTEFTU19CTDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgdmFyaWFibGVzLCByZXNwZWN0aXZlbHksIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICBEb2luZyBzbyBjYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gaGFuZGxlIHRoZXNlCisgICAgICAgIGNvbXBpbGF0aW9ucyBsb2NhbGx5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBBZGRpdGlvbmFsbHksIHlvdSBjYW4gbGlzdCByZWNpcGVzIHVzaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSUNFQ0NfVVNFUl9QQUNLQUdFX1dMJz48ZmlsZW5hbWU+SUNFQ0NfVVNFUl9QQUNLQUdFX1dMPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRvIGZvcmNlCisgICAgICAgIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+IHRvIGJlIGVuYWJsZWQgZm9yIHJlY2lwZXMgdXNpbmcgYW4gZW1wdHkKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBUkFMTEVMX01BS0UnPjxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJbmhlcml0aW5nIHRoZSA8ZmlsZW5hbWU+aWNlY2M8L2ZpbGVuYW1lPiBjbGFzcyBjaGFuZ2VzIGFsbCBzc3RhdGUKKyAgICAgICAgc2lnbmF0dXJlcy4KKyAgICAgICAgQ29uc2VxdWVudGx5LCBpZiBhIGRldmVsb3BtZW50IHRlYW0gaGFzIGEgZGVkaWNhdGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICB0aGF0IHBvcHVsYXRlcworICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1NUQVRFX01JUlJPUlMnPjxmaWxlbmFtZT5TVEFURV9NSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGFuZCB0aGV5IHdhbnQgdG8gcmV1c2Ugc3N0YXRlIGZyb20KKyAgICAgICAgPGZpbGVuYW1lPlNUQVRFX01JUlJPUlM8L2ZpbGVuYW1lPiwgdGhlbiBhbGwgZGV2ZWxvcGVycyBhbmQgdGhlCisgICAgICAgIGJ1aWxkIHN5c3RlbSBuZWVkIHRvIGVpdGhlciBpbmhlcml0IHRoZSA8ZmlsZW5hbWU+aWNlY2M8L2ZpbGVuYW1lPgorICAgICAgICBjbGFzcyBvciBub2JvZHkgc2hvdWxkLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBBdCB0aGUgZGlzdHJpYnV0aW9uIGxldmVsLCB5b3UgY2FuIGluaGVyaXQgdGhlCisgICAgICAgIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+IGNsYXNzIHRvIGJlIHN1cmUgdGhhdCBhbGwgYnVpbGRlcnMgc3RhcnQKKyAgICAgICAgd2l0aCB0aGUgc2FtZSBzc3RhdGUgc2lnbmF0dXJlcy4KKyAgICAgICAgQWZ0ZXIgaW5oZXJpdGluZyB0aGUgY2xhc3MsIHlvdSBjYW4gdGhlbiBkaXNhYmxlIHRoZSBmZWF0dXJlIGJ5IHNldHRpbmcKKyAgICAgICAgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JQ0VDQ19ESVNBQkxFRCc+PGZpbGVuYW1lPklDRUNDX0RJU0FCTEVEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIHRvICIxIiBhcyBmb2xsb3dzOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVRfRElTVFJPX2FwcGVuZCA9ICIgaWNlY2MiCisgICAgIElDRUNDX0RJU0FCTEVEID8/PSAiMSIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBUaGlzIHByYWN0aWNlIG1ha2VzIHN1cmUgZXZlcnlvbmUgaXMgdXNpbmcgdGhlIHNhbWUgc2lnbmF0dXJlcyBidXQgYWxzbworICAgICAgICByZXF1aXJlcyBpbmRpdmlkdWFscyB0aGF0IGRvIHdhbnQgdG8gdXNlIEljZWNyZWFtIHRvIGVuYWJsZSB0aGUgZmVhdHVyZQorICAgICAgICBpbmRpdmlkdWFsbHkgYXMgZm9sbG93cyBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJQ0VDQ19ESVNBQkxFRCA9ICIiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1pbWFnZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5pbWFnZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW1hZ2U8L2ZpbGVuYW1lPiBjbGFzcyBoZWxwcyBzdXBwb3J0IGNyZWF0aW5nIGltYWdlcworICAgICAgICBpbiBkaWZmZXJlbnQgZm9ybWF0cy4KKyAgICAgICAgRmlyc3QsIHRoZSByb290IGZpbGVzeXN0ZW0gaXMgY3JlYXRlZCBmcm9tIHBhY2thZ2VzIHVzaW5nCisgICAgICAgIG9uZSBvZiB0aGUgPGZpbGVuYW1lPnJvb3RmcyouYmJjbGFzczwvZmlsZW5hbWU+CisgICAgICAgIGZpbGVzIChkZXBlbmRpbmcgb24gdGhlIHBhY2thZ2UgZm9ybWF0IHVzZWQpIGFuZCB0aGVuIG9uZSBvciBtb3JlIGltYWdlCisgICAgICAgIGZpbGVzIGFyZSBjcmVhdGVkLgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+SU1BR0VfRlNUWVBFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGNvbnRyb2xzIHRoZSB0eXBlcyBvZiBpbWFnZXMgdG8gZ2VuZXJhdGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9JTlNUQUxMJz5JTUFHRV9JTlNUQUxMPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgY29udHJvbHMgdGhlIGxpc3Qgb2YgcGFja2FnZXMgdG8gaW5zdGFsbCBpbnRvIHRoZQorICAgICAgICAgICAgICAgIGltYWdlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGN1c3RvbWl6aW5nIGltYWdlcywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZSc+Q3VzdG9taXppbmcgSW1hZ2VzPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IGltYWdlcyBhcmUgY3JlYXRlZCwgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0naW1hZ2VzLWRldi1lbnZpcm9ubWVudCc+SW1hZ2VzPC9saW5rPiIgc2VjdGlvbiBlbHNld2hlcmUKKyAgICAgICAgaW4gdGhpcyBtYW51YWwuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtaW1hZ2VfdHlwZXMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+aW1hZ2VfdHlwZXMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmltYWdlX3R5cGVzPC9maWxlbmFtZT4gY2xhc3MgZGVmaW5lcyBhbGwgb2YKKyAgICAgICAgdGhlIHN0YW5kYXJkIGltYWdlIG91dHB1dCB0eXBlcyB0aGF0IHlvdSBjYW4gZW5hYmxlIHRocm91Z2ggdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhpcyBjbGFzcyBhcyBhIHJlZmVyZW5jZSBvbiBob3cgdG8gYWRkIHN1cHBvcnQgZm9yIGN1c3RvbQorICAgICAgICBpbWFnZSBvdXRwdXQgdHlwZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgY2xhc3MgaXMgZW5hYmxlZCB0aHJvdWdoIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPklNQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgaW4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW1hZ2UnPjxmaWxlbmFtZT5pbWFnZS5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICBJZiB5b3UgZGVmaW5lIHlvdXIgb3duIGltYWdlIHR5cGVzIHVzaW5nIGEgY3VzdG9tIEJpdEJha2UgY2xhc3MgYW5kCisgICAgICAgIHRoZW4gdXNlIDxmaWxlbmFtZT5JTUFHRV9DTEFTU0VTPC9maWxlbmFtZT4gdG8gZW5hYmxlIGl0LCB0aGUgY3VzdG9tCisgICAgICAgIGNsYXNzIG11c3QgZWl0aGVyIGluaGVyaXQgPGZpbGVuYW1lPmltYWdlX3R5cGVzPC9maWxlbmFtZT4gb3IKKyAgICAgICAgPGZpbGVuYW1lPmltYWdlX3R5cGVzPC9maWxlbmFtZT4gbXVzdCBhbHNvIGFwcGVhciBpbgorICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfQ0xBU1NFUzwvZmlsZW5hbWU+LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWltYWdlX3R5cGVzX3Vib290Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmltYWdlX3R5cGVzX3Vib290LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5pbWFnZV90eXBlc191Ym9vdDwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIGRlZmluZXMgYWRkaXRpb25hbCBpbWFnZSB0eXBlcyBzcGVjaWZpY2FsbHkgZm9yIHRoZSBVLUJvb3QgYm9vdGxvYWRlci4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1pbWFnZS1saXZlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmltYWdlLWxpdmUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmltYWdlLWxpdmU8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyBidWlsZGluZyAibGl2ZSIKKyAgICAgICAgaW1hZ2VzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBOb3JtYWxseSwgeW91IGRvIG5vdCB1c2UgdGhpcyBjbGFzcyBkaXJlY3RseS4KKyAgICAgICAgSW5zdGVhZCwgeW91IGFkZCAibGl2ZSIgdG8KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IHdlcmUgYnVpbGRpbmcgYW4gSVNPIGltYWdlLCB5b3Ugd291bGQgYWRkICJsaXZlIgorICAgICAgICB0byA8ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+LCBzZXQgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1OT0lTTyc+PGZpbGVuYW1lPk5PSVNPPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlIHRvCisgICAgICAgICIwIiBhbmQgdGhlIGJ1aWxkIHN5c3RlbSB3b3VsZCB1c2UgdGhlIDxmaWxlbmFtZT5pbWFnZS1saXZlPC9maWxlbmFtZT4KKyAgICAgICAgY2xhc3MgdG8gYnVpbGQgdGhlIElTTyBpbWFnZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1pbWFnZS1ta2xpYnMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+aW1hZ2UtbWtsaWJzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5pbWFnZS1ta2xpYnM8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBlbmFibGVzIHRoZSB1c2Ugb2YgdGhlIDxmaWxlbmFtZT5ta2xpYnM8L2ZpbGVuYW1lPiB1dGlsaXR5IGR1cmluZyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXJvb3Rmcyc+PGZpbGVuYW1lPmRvX3Jvb3RmczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0YXNrLCB3aGljaCBvcHRpbWl6ZXMgdGhlIHNpemUgb2YKKyAgICAgICAgbGlicmFyaWVzIGNvbnRhaW5lZCBpbiB0aGUgaW1hZ2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBjbGFzcyBpcyBlbmFibGVkIGluIHRoZQorICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZi50ZW1wbGF0ZTwvZmlsZW5hbWU+IHVzaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUl9DTEFTU0VTJz48ZmlsZW5hbWU+VVNFUl9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVNFUl9DTEFTU0VTID89ICJidWlsZHN0YXRzIGltYWdlLW1rbGlicyBpbWFnZS1wcmVsaW5rIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtaW1hZ2UtcHJlbGluayc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5pbWFnZS1wcmVsaW5rLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5pbWFnZS1wcmVsaW5rPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSA8ZmlsZW5hbWU+cHJlbGluazwvZmlsZW5hbWU+IHV0aWxpdHkgZHVyaW5nCisgICAgICAgIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3Mtcm9vdGZzJz48ZmlsZW5hbWU+ZG9fcm9vdGZzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRhc2ssIHdoaWNoIG9wdGltaXplcyB0aGUgZHluYW1pYworICAgICAgICBsaW5raW5nIG9mIHNoYXJlZCBsaWJyYXJpZXMgdG8gcmVkdWNlIGV4ZWN1dGFibGUgc3RhcnR1cCB0aW1lLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCeSBkZWZhdWx0LCB0aGUgY2xhc3MgaXMgZW5hYmxlZCBpbiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmYudGVtcGxhdGU8L2ZpbGVuYW1lPiB1c2luZyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJfQ0xBU1NFUyc+PGZpbGVuYW1lPlVTRVJfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSBhcyBmb2xsb3dzOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFVTRVJfQ0xBU1NFUyA/PSAiYnVpbGRzdGF0cyBpbWFnZS1ta2xpYnMgaW1hZ2UtcHJlbGluayIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWltYWdlLXN3YWInPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+aW1hZ2Utc3dhYi5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW1hZ2Utc3dhYjwvZmlsZW5hbWU+IGNsYXNzIGVuYWJsZXMgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL3N3YWJiZXInPlN3YWJiZXI8L3VsaW5rPgorICAgICAgICB0b29sIGluIG9yZGVyIHRvIGRldGVjdCBhbmQgbG9nIGFjY2Vzc2VzIHRvIHRoZSBob3N0IHN5c3RlbSBkdXJpbmcKKyAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBwcm9jZXNzLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFRoaXMgY2xhc3MgaXMgY3VycmVudGx5IHVubWFpbnRhaW5lZC4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWltYWdlLXZtZGsnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+aW1hZ2Utdm1kay5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW1hZ2Utdm1kazwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIGJ1aWxkaW5nIFZNd2FyZQorICAgICAgICBWTURLIGltYWdlcy4KKyAgICAgICAgTm9ybWFsbHksIHlvdSBkbyBub3QgdXNlIHRoaXMgY2xhc3MgZGlyZWN0bHkuCisgICAgICAgIEluc3RlYWQsIHlvdSBhZGQgInZtZGsiIHRvCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1pbnNhbmUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+aW5zYW5lLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5pbnNhbmU8L2ZpbGVuYW1lPiBjbGFzcyBhZGRzIGEgc3RlcCB0byB0aGUgcGFja2FnZQorICAgICAgICBnZW5lcmF0aW9uIHByb2Nlc3Mgc28gdGhhdCBvdXRwdXQgcXVhbGl0eSBhc3N1cmFuY2UgY2hlY2tzIGFyZQorICAgICAgICBnZW5lcmF0ZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgIEEgcmFuZ2Ugb2YgY2hlY2tzIGFyZSBwZXJmb3JtZWQgdGhhdCBjaGVjayB0aGUgYnVpbGQncyBvdXRwdXQKKyAgICAgICAgZm9yIGNvbW1vbiBwcm9ibGVtcyB0aGF0IHNob3cgdXAgZHVyaW5nIHJ1bnRpbWUuCisgICAgICAgIERpc3RyaWJ1dGlvbiBwb2xpY3kgdXN1YWxseSBkaWN0YXRlcyB3aGV0aGVyIHRvIGluY2x1ZGUgdGhpcyBjbGFzcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBjb25maWd1cmUgdGhlIHNhbml0eSBjaGVja3Mgc28gdGhhdCBzcGVjaWZpYyB0ZXN0IGZhaWx1cmVzCisgICAgICAgIGVpdGhlciByYWlzZSBhIHdhcm5pbmcgb3IgYW4gZXJyb3IgbWVzc2FnZS4KKyAgICAgICAgVHlwaWNhbGx5LCBmYWlsdXJlcyBmb3IgbmV3IHRlc3RzIGdlbmVyYXRlIGEgd2FybmluZy4KKyAgICAgICAgU3Vic2VxdWVudCBmYWlsdXJlcyBmb3IgdGhlIHNhbWUgdGVzdCB3b3VsZCB0aGVuIGdlbmVyYXRlIGFuIGVycm9yCisgICAgICAgIG1lc3NhZ2Ugb25jZSB0aGUgbWV0YWRhdGEgaXMgaW4gYSBrbm93biBhbmQgZ29vZCBjb25kaXRpb24uCisgICAgICAgIFNlZSB0aGUKKyAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1xYS1jaGVja3MnPlFBIEVycm9yIGFuZCBXYXJuaW5nIE1lc3NhZ2VzPC9saW5rPiIKKyAgICAgICAgQ2hhcHRlciBmb3IgYSBsaXN0IG9mIGFsbCB0aGUgd2FybmluZyBhbmQgZXJyb3IgbWVzc2FnZXMKKyAgICAgICAgeW91IG1pZ2h0IGVuY291bnRlciB1c2luZyBhIGRlZmF1bHQgY29uZmlndXJhdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVXNlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItV0FSTl9RQSc+PGZpbGVuYW1lPldBUk5fUUE8L2ZpbGVuYW1lPjwvbGluaz4gYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FUlJPUl9RQSc+PGZpbGVuYW1lPkVSUk9SX1FBPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlcyB0byBjb250cm9sIHRoZSBiZWhhdmlvciBvZgorICAgICAgICB0aGVzZSBjaGVja3MgYXQgdGhlIGdsb2JhbCBsZXZlbCAoaS5lLiBpbiB5b3VyIGN1c3RvbSBkaXN0cm8KKyAgICAgICAgY29uZmlndXJhdGlvbikuCisgICAgICAgIEhvd2V2ZXIsIHRvIHNraXAgb25lIG9yIG1vcmUgY2hlY2tzIGluIHJlY2lwZXMsIHlvdSBzaG91bGQgdXNlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTlNBTkVfU0tJUCc+PGZpbGVuYW1lPklOU0FORV9TS0lQPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICBGb3IgZXhhbXBsZSwgdG8gc2tpcCB0aGUgY2hlY2sgZm9yIHN5bWJvbGljIGxpbmsKKyAgICAgICAgPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+IGZpbGVzIGluIHRoZSBtYWluIHBhY2thZ2Ugb2YgYSByZWNpcGUsCisgICAgICAgIGFkZCB0aGUgZm9sbG93aW5nIHRvIHRoZSByZWNpcGUuCisgICAgICAgIFlvdSBuZWVkIHRvIHJlYWxpemUgdGhhdCB0aGUgcGFja2FnZSBuYW1lIG92ZXJyaWRlLCBpbiB0aGlzIGV4YW1wbGUKKyAgICAgICAgPGZpbGVuYW1lPiR7UE59PC9maWxlbmFtZT4sIG11c3QgYmUgdXNlZDoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTlNBTkVfU0tJUF8ke1BOfSArPSAiZGV2LXNvIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCB0aGUgUUEgY2hlY2tzIGV4aXN0IGluIG9yZGVyIHRvIGRldGVjdCByZWFsCisgICAgICAgIG9yIHBvdGVudGlhbCBwcm9ibGVtcyBpbiB0aGUgcGFja2FnZWQgb3V0cHV0LgorICAgICAgICBTbyBleGVyY2lzZSBjYXV0aW9uIHdoZW4gZGlzYWJsaW5nIHRoZXNlIGNoZWNrcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHNob3dzIHRoZSB0ZXN0cyB5b3UgY2FuIGxpc3Qgd2l0aCB0aGUKKyAgICAgICAgPGZpbGVuYW1lPldBUk5fUUE8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPkVSUk9SX1FBPC9maWxlbmFtZT4KKyAgICAgICAgdmFyaWFibGVzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+YWxyZWFkeS1zdHJpcHBlZDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoYXQgcHJvZHVjZWQgYmluYXJpZXMgaGF2ZSBub3QgYWxyZWFkeSBiZWVuCisgICAgICAgICAgICAgICAgc3RyaXBwZWQgcHJpb3IgdG8gdGhlIGJ1aWxkIHN5c3RlbSBleHRyYWN0aW5nIGRlYnVnIHN5bWJvbHMuCisgICAgICAgICAgICAgICAgSXQgaXMgY29tbW9uIGZvciB1cHN0cmVhbSBzb2Z0d2FyZSBwcm9qZWN0cyB0byBkZWZhdWx0IHRvCisgICAgICAgICAgICAgICAgc3RyaXBwaW5nIGRlYnVnIHN5bWJvbHMgZm9yIG91dHB1dCBiaW5hcmllcy4KKyAgICAgICAgICAgICAgICBJbiBvcmRlciBmb3IgZGVidWdnaW5nIHRvIHdvcmsgb24gdGhlIHRhcmdldCB1c2luZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4gcGFja2FnZXMsIHRoaXMgc3RyaXBwaW5nIG11c3QgYmUKKyAgICAgICAgICAgICAgICBkaXNhYmxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmFyY2g6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyB0aGUgRXhlY3V0YWJsZSBhbmQgTGlua2FibGUgRm9ybWF0IChFTEYpIHR5cGUsIGJpdCBzaXplLAorICAgICAgICAgICAgICAgIGFuZCBlbmRpYW5uZXNzIG9mIGFueSBiaW5hcmllcyB0byBlbnN1cmUgdGhleSBtYXRjaCB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgIFRoaXMgdGVzdCBmYWlscyBpZiBhbnkgYmluYXJpZXMgZG8gbm90IG1hdGNoIHRoZSB0eXBlIHNpbmNlCisgICAgICAgICAgICAgICAgdGhlcmUgd291bGQgYmUgYW4gaW5jb21wYXRpYmlsaXR5LgorICAgICAgICAgICAgICAgIFRoZSB0ZXN0IGNvdWxkIGluZGljYXRlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgd3JvbmcgY29tcGlsZXIgb3IgY29tcGlsZXIgb3B0aW9ucyBoYXZlIGJlZW4gdXNlZC4KKyAgICAgICAgICAgICAgICBTb21ldGltZXMgc29mdHdhcmUsIGxpa2UgYm9vdGxvYWRlcnMsIG1pZ2h0IG5lZWQgdG8gYnlwYXNzCisgICAgICAgICAgICAgICAgdGhpcyBjaGVjay4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmJ1aWxkcGF0aHM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3IgcGF0aHMgdG8gbG9jYXRpb25zIG9uIHRoZSBidWlsZCBob3N0IGluc2lkZSB0aGUKKyAgICAgICAgICAgICAgICBvdXRwdXQgZmlsZXMuCisgICAgICAgICAgICAgICAgQ3VycmVudGx5LCB0aGlzIHRlc3QgdHJpZ2dlcnMgdG9vIG1hbnkgZmFsc2UgcG9zaXRpdmVzIGFuZAorICAgICAgICAgICAgICAgIHRodXMgaXMgbm90IG5vcm1hbGx5IGVuYWJsZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5idWlsZC1kZXBzOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIGlmIGEgYnVpbGQtdGltZSBkZXBlbmRlbmN5IHRoYXQgaXMgc3BlY2lmaWVkIHRocm91Z2gKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgZXhwbGljaXQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICBvciB0YXNrLWxldmVsIGRlcGVuZGVuY2llcyBleGlzdHMgdG8gbWF0Y2ggYW55IHJ1bnRpbWUKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmN5LgorICAgICAgICAgICAgICAgIFRoaXMgZGV0ZXJtaW5hdGlvbiBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHRvIGRpc2NvdmVyIHdoZXJlCisgICAgICAgICAgICAgICAgcnVudGltZSBkZXBlbmRlbmNpZXMgYXJlIGRldGVjdGVkIGFuZCBhZGRlZCBkdXJpbmcgcGFja2FnaW5nLgorICAgICAgICAgICAgICAgIElmIG5vIGV4cGxpY2l0IGRlcGVuZGVuY3kgaGFzIGJlZW4gc3BlY2lmaWVkIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICBtZXRhZGF0YSwgYXQgdGhlIHBhY2thZ2luZyBzdGFnZSBpdCBpcyB0b28gbGF0ZSB0byBlbnN1cmUgdGhhdAorICAgICAgICAgICAgICAgIHRoZSBkZXBlbmRlbmN5IGlzIGJ1aWx0LCBhbmQgdGh1cyB5b3UgY2FuIGVuZCB1cCB3aXRoIGFuCisgICAgICAgICAgICAgICAgZXJyb3Igd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQgaW50byB0aGUgaW1hZ2UgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1yb290ZnMnPjxmaWxlbmFtZT5kb19yb290ZnM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0YXNrIGJlY2F1c2UgdGhlIGF1dG8tZGV0ZWN0ZWQgZGVwZW5kZW5jeSB3YXMgbm90IHNhdGlzZmllZC4KKyAgICAgICAgICAgICAgICBBbiBleGFtcGxlIG9mIHRoaXMgd291bGQgYmUgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXBkYXRlLXJjLmQnPjxmaWxlbmFtZT51cGRhdGUtcmMuZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNsYXNzIGF1dG9tYXRpY2FsbHkgYWRkcyBhIGRlcGVuZGVuY3kgb24gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluaXRzY3JpcHRzLWZ1bmN0aW9uczwvZmlsZW5hbWU+IHBhY2thZ2UgdG8gcGFja2FnZXMKKyAgICAgICAgICAgICAgICB0aGF0IGluc3RhbGwgYW4gaW5pdHNjcmlwdCB0aGF0IHJlZmVycyB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL2luaXQuZC9mdW5jdGlvbnM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIHNob3VsZCByZWFsbHkgaGF2ZSBhbiBleHBsaWNpdAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IGZvciB0aGUgcGFja2FnZSBpbiBxdWVzdGlvbiBvbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbml0c2NyaXB0cy1mdW5jdGlvbnM8L2ZpbGVuYW1lPiBzbyB0aGF0IHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgYWJsZSB0byBlbnN1cmUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5pdHNjcmlwdHM8L2ZpbGVuYW1lPiByZWNpcGUgaXMgYWN0dWFsbHkgYnVpbHQgYW5kCisgICAgICAgICAgICAgICAgdGh1cyB0aGUgPGZpbGVuYW1lPmluaXRzY3JpcHRzLWZ1bmN0aW9uczwvZmlsZW5hbWU+IHBhY2thZ2UgaXMKKyAgICAgICAgICAgICAgICBtYWRlIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmNvbXBpbGUtaG9zdC1wYXRoOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgbG9nIGZvciBpbmRpY2F0aW9ucworICAgICAgICAgICAgICAgIHRoYXQgcGF0aHMgdG8gbG9jYXRpb25zIG9uIHRoZSBidWlsZCBob3N0IHdlcmUgdXNlZC4KKyAgICAgICAgICAgICAgICBVc2luZyBzdWNoIHBhdGhzIG1pZ2h0IHJlc3VsdCBpbiBob3N0IGNvbnRhbWluYXRpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgYnVpbGQgb3V0cHV0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZGVidWctZGVwczo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoYXQgYWxsIHBhY2thZ2VzIGV4Y2VwdCA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcGFja2FnZXMgZG8gbm90IGRlcGVuZCBvbiA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcGFja2FnZXMsIHdoaWNoIHdvdWxkIGNhdXNlIGEgcGFja2FnaW5nIGJ1Zy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRlYnVnLWZpbGVzOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgZm9yIDxmaWxlbmFtZT4uZGVidWc8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcyBpbiBhbnl0aGluZyBidXQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgIFRoZSBkZWJ1ZyBmaWxlcyBzaG91bGQgYWxsIGJlIGluIHRoZSA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgVGh1cywgYW55dGhpbmcgcGFja2FnZWQgZWxzZXdoZXJlIGlzIGluY29ycmVjdCBwYWNrYWdpbmcuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kZXAtY21wOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgZm9yIGludmFsaWQgdmVyc2lvbiBjb21wYXJpc29uIHN0YXRlbWVudHMgaW4gcnVudGltZQorICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHBhY2thZ2VzIChpLmUuIGluCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJTVUdHRVNUUyc+PGZpbGVuYW1lPlJTVUdHRVNUUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlBST1ZJREVTJz48ZmlsZW5hbWU+UlBST1ZJREVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVQTEFDRVMnPjxmaWxlbmFtZT5SUkVQTEFDRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJDT05GTElDVFMnPjxmaWxlbmFtZT5SQ09ORkxJQ1RTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdmFsdWVzKS4KKyAgICAgICAgICAgICAgICBBbnkgaW52YWxpZCBjb21wYXJpc29ucyBtaWdodCB0cmlnZ2VyIGZhaWx1cmVzIG9yIHVuZGVzaXJhYmxlCisgICAgICAgICAgICAgICAgYmVoYXZpb3Igd2hlbiBwYXNzZWQgdG8gdGhlIHBhY2thZ2UgbWFuYWdlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRlc2t0b3A6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFJ1bnMgdGhlIDxmaWxlbmFtZT5kZXNrdG9wLWZpbGUtdmFsaWRhdGU8L2ZpbGVuYW1lPiBwcm9ncmFtCisgICAgICAgICAgICAgICAgYWdhaW5zdCBhbnkgPGZpbGVuYW1lPi5kZXNrdG9wPC9maWxlbmFtZT4gZmlsZXMgdG8gdmFsaWRhdGUKKyAgICAgICAgICAgICAgICB0aGVpciBjb250ZW50cyBhZ2FpbnN0IHRoZSBzcGVjaWZpY2F0aW9uIGZvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uZGVza3RvcDwvZmlsZW5hbWU+IGZpbGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZGV2LWRlcHM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyB0aGF0IGFsbCBwYWNrYWdlcyBleGNlcHQgPGZpbGVuYW1lPi1kZXY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT4tc3RhdGljZGV2PC9maWxlbmFtZT4gcGFja2FnZXMgZG8gbm90IGRlcGVuZCBvbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4gcGFja2FnZXMsIHdoaWNoIHdvdWxkIGJlIGEKKyAgICAgICAgICAgICAgICBwYWNrYWdpbmcgYnVnLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZGV2LXNvOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgdGhhdCB0aGUgPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+IHN5bWJvbGljIGxpbmtzIGFyZSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWRldjwvZmlsZW5hbWU+IHBhY2thZ2UgYW5kIG5vdCBpbiBhbnkgb2YgdGhlIG90aGVyIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIEluIGdlbmVyYWwsIHRoZXNlIHN5bWxpbmtzIGFyZSBvbmx5IHVzZWZ1bCBmb3IgZGV2ZWxvcG1lbnQgcHVycG9zZXMuCisgICAgICAgICAgICAgICAgVGh1cywgdGhlIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4gcGFja2FnZSBpcyB0aGUgY29ycmVjdCBsb2NhdGlvbiBmb3IKKyAgICAgICAgICAgICAgICB0aGVtLgorICAgICAgICAgICAgICAgIFNvbWUgdmVyeSByYXJlIGNhc2VzIGRvIGV4aXN0IGZvciBkeW5hbWljYWxseSBsb2FkZWQgbW9kdWxlcyB3aGVyZQorICAgICAgICAgICAgICAgIHRoZXNlIHN5bWxpbmtzIGFyZSBuZWVkZWQgaW5zdGVhZCBpbiB0aGUgbWFpbiBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZmlsZS1yZGVwczo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoYXQgZmlsZS1sZXZlbCBkZXBlbmRlbmNpZXMgaWRlbnRpZmllZCBieSB0aGUKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF0IHBhY2thZ2luZyB0aW1lIGFyZSBzYXRpc2ZpZWQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgc2hlbGwgc2NyaXB0IG1pZ2h0IHN0YXJ0IHdpdGggdGhlIGxpbmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+IyEvYmluL2Jhc2g8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGlzIGxpbmUgd291bGQgdHJhbnNsYXRlIHRvIGEgZmlsZSBkZXBlbmRlbmN5IG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9iaW4vYmFzaDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIE9mIHRoZSB0aHJlZSBwYWNrYWdlIG1hbmFnZXJzIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbSBzdXBwb3J0cywgb25seSBSUE0gZGlyZWN0bHkgaGFuZGxlcyBmaWxlLWxldmVsCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLCByZXNvbHZpbmcgdGhlbSBhdXRvbWF0aWNhbGx5IHRvIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgcHJvdmlkaW5nIHRoZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgbGFjayBvZiB0aGF0IGZ1bmN0aW9uYWxpdHkgaW4gdGhlIG90aGVyIHR3bworICAgICAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlcnMgZG9lcyBub3QgbWVhbiB0aGUgZGVwZW5kZW5jaWVzIGRvIG5vdCBzdGlsbAorICAgICAgICAgICAgICAgIG5lZWQgcmVzb2x2aW5nLgorICAgICAgICAgICAgICAgIFRoaXMgUUEgY2hlY2sgYXR0ZW1wdHMgdG8gZW5zdXJlIHRoYXQgZXhwbGljaXRseSBkZWNsYXJlZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgZXhpc3QgdG8gaGFuZGxlIGFueSBmaWxlLWxldmVsIGRlcGVuZGVuY3kgZGV0ZWN0ZWQgaW4KKyAgICAgICAgICAgICAgICBwYWNrYWdlZCBmaWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmZpbGVzLWludmFsaWQ6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3IKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHZhbHVlcyB0aGF0IGNvbnRhaW4gIi8vIiwgd2hpY2ggaXMgaW52YWxpZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmluY29tcGF0aWJsZS1saWNlbnNlOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBSZXBvcnQgd2hlbiBwYWNrYWdlcyBhcmUgZXhjbHVkZWQgZnJvbSBiZWluZyBjcmVhdGVkIGR1ZSB0bworICAgICAgICAgICAgICAgIGJlaW5nIG1hcmtlZCB3aXRoIGEgbGljZW5zZSB0aGF0IGlzIGluCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOQ09NUEFUSUJMRV9MSUNFTlNFJz48ZmlsZW5hbWU+SU5DT01QQVRJQkxFX0xJQ0VOU0U8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5pbnN0YWxsLWhvc3QtcGF0aDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGxvZyBmb3IgaW5kaWNhdGlvbnMKKyAgICAgICAgICAgICAgICB0aGF0IHBhdGhzIHRvIGxvY2F0aW9ucyBvbiB0aGUgYnVpbGQgaG9zdCB3ZXJlIHVzZWQuCisgICAgICAgICAgICAgICAgVXNpbmcgc3VjaCBwYXRocyBtaWdodCByZXN1bHQgaW4gaG9zdCBjb250YW1pbmF0aW9uIG9mIHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIG91dHB1dC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmluc3RhbGxlZC12cy1zaGlwcGVkOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBSZXBvcnRzIHdoZW4gZmlsZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCB3aXRoaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IGJ1dCBoYXZlIG5vdCBiZWVuIGluY2x1ZGVkIGluCisgICAgICAgICAgICAgICAgYW55IHBhY2thZ2UgYnkgd2F5IG9mIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgRmlsZXMgdGhhdCBkbyBub3QgYXBwZWFyIGluIGFueSBwYWNrYWdlIGNhbm5vdCBiZSBwcmVzZW50IGluCisgICAgICAgICAgICAgICAgYW4gaW1hZ2UgbGF0ZXIgb24gaW4gdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgSWRlYWxseSwgYWxsIGluc3RhbGxlZCBmaWxlcyBzaG91bGQgYmUgcGFja2FnZWQgb3Igbm90CisgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGF0IGFsbC4KKyAgICAgICAgICAgICAgICBUaGVzZSBmaWxlcyBjYW4gYmUgZGVsZXRlZCBhdCB0aGUgZW5kIG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiBpZiB0aGUgZmlsZXMgYXJlIG5vdAorICAgICAgICAgICAgICAgIG5lZWRlZCBpbiBhbnkgcGFja2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmxhOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgPGZpbGVuYW1lPi5sYTwvZmlsZW5hbWU+IGZpbGVzIGZvciBhbnkgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcGF0aHMuCisgICAgICAgICAgICAgICAgQW55IDxmaWxlbmFtZT4ubGE8L2ZpbGVuYW1lPiBmaWxlIGNvbnRhaW5pbmcgdGhlc2UgcGF0aHMgaXMgaW5jb3JyZWN0IHNpbmNlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYnRvb2w8L2ZpbGVuYW1lPiBhZGRzIHRoZSBjb3JyZWN0IHN5c3Jvb3QgcHJlZml4IHdoZW4gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgZmlsZXMgYXV0b21hdGljYWxseSBpdHNlbGYuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5sZGZsYWdzOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBFbnN1cmVzIHRoYXQgdGhlIGJpbmFyaWVzIHdlcmUgbGlua2VkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxERkxBR1MnPjxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgb3B0aW9ucyBwcm92aWRlZCBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIElmIHRoaXMgdGVzdCBmYWlscywgY2hlY2sgdGhhdCB0aGUgPGZpbGVuYW1lPkxERkxBR1M8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGlzIGJlaW5nIHBhc3NlZCB0byB0aGUgbGlua2VyIGNvbW1hbmQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJkaXI6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3IgbGlicmFyaWVzIGJlaW5nIGluc3RhbGxlZCBpbnRvIGluY29ycmVjdAorICAgICAgICAgICAgICAgIChwb3NzaWJseSBoYXJkY29kZWQpIGluc3RhbGxhdGlvbiBwYXRocy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyB0ZXN0IHdpbGwgY2F0Y2ggcmVjaXBlcyB0aGF0IGluc3RhbGwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2xpYi9iYXIuc288L2ZpbGVuYW1lPiB3aGVuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7YmFzZV9saWJkaXJ9PC9maWxlbmFtZT4gaXMgImxpYjMyIi4KKyAgICAgICAgICAgICAgICBBbm90aGVyIGV4YW1wbGUgaXMgd2hlbiByZWNpcGVzIGluc3RhbGwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9saWI2NC9mb28uc288L2ZpbGVuYW1lPiB3aGVuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7bGliZGlyfTwvZmlsZW5hbWU+IGlzICIvdXNyL2xpYiIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJleGVjOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgaWYgYSBwYWNrYWdlIGNvbnRhaW5zIGZpbGVzIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvbGliZXhlYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoaXMgY2hlY2sgaXMgbm90IHBlcmZvcm1lZCBpZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliZXhlY2RpcjwvZmlsZW5hbWU+IHZhcmlhYmxlIGhhcyBiZWVuIHNldAorICAgICAgICAgICAgICAgIGV4cGxpY2l0bHkgdG8gPGZpbGVuYW1lPi91c3IvbGliZXhlYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cGFja2FnZXMtbGlzdDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIGZvciB0aGUgc2FtZSBwYWNrYWdlIGJlaW5nIGxpc3RlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoCisgICAgICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdmFsdWUuCisgICAgICAgICAgICAgICAgSW5zdGFsbGluZyB0aGUgcGFja2FnZSBpbiB0aGlzIG1hbm5lciBjYW4gY2F1c2UgZXJyb3JzIGR1cmluZworICAgICAgICAgICAgICAgIHBhY2thZ2luZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBlcm0tY29uZmlnOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBSZXBvcnRzIGxpbmVzIGluIDxmaWxlbmFtZT5mcy1wZXJtcy50eHQ8L2ZpbGVuYW1lPiB0aGF0IGhhdmUKKyAgICAgICAgICAgICAgICBhbiBpbnZhbGlkIGZvcm1hdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBlcm0tbGluZTo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUmVwb3J0cyBsaW5lcyBpbiA8ZmlsZW5hbWU+ZnMtcGVybXMudHh0PC9maWxlbmFtZT4gdGhhdCBoYXZlCisgICAgICAgICAgICAgICAgYW4gaW52YWxpZCBmb3JtYXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wZXJtLWxpbms6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFJlcG9ydHMgbGluZXMgaW4gPGZpbGVuYW1lPmZzLXBlcm1zLnR4dDwvZmlsZW5hbWU+IHRoYXQKKyAgICAgICAgICAgICAgICBzcGVjaWZ5ICdsaW5rJyB3aGVyZSB0aGUgc3BlY2lmaWVkIHRhcmdldCBhbHJlYWR5IGV4aXN0cy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBlcm1zOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDdXJyZW50bHksIHRoaXMgY2hlY2sgaXMgdW51c2VkIGJ1dCByZXNlcnZlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBrZ2NvbmZpZzo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIDxmaWxlbmFtZT4ucGM8L2ZpbGVuYW1lPiBmaWxlcyBmb3IgYW55CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPi88bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBwYXRocy4KKyAgICAgICAgICAgICAgICBBbnkgPGZpbGVuYW1lPi5wYzwvZmlsZW5hbWU+IGZpbGUgY29udGFpbmluZyB0aGVzZSBwYXRocyBpcyBpbmNvcnJlY3QKKyAgICAgICAgICAgICAgICBzaW5jZSA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+IGl0c2VsZiBhZGRzIHRoZSBjb3JyZWN0IHN5c3Jvb3QgcHJlZml4CisgICAgICAgICAgICAgICAgd2hlbiB0aGUgZmlsZXMgYXJlIGFjY2Vzc2VkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cGtnbmFtZTo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoYXQgYWxsIHBhY2thZ2VzIGluCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBoYXZlIG5hbWVzIHRoYXQgZG8gbm90IGNvbnRhaW4gaW52YWxpZCBjaGFyYWN0ZXJzIChpLmUuCisgICAgICAgICAgICAgICAgY2hhcmFjdGVycyBvdGhlciB0aGFuIDAtOSwgYS16LCAuLCArLCBhbmQgLSkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wa2d2LXVuZGVmaW5lZDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRvIHNlZSBpZiB0aGUgPGZpbGVuYW1lPlBLR1Y8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGlzIHVuZGVmaW5lZCBkdXJpbmcKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wa2d2YXJjaGVjazo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRocm91Z2ggdGhlIHZhcmlhYmxlcworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SU1VHR0VTVFMnPjxmaWxlbmFtZT5SU1VHR0VTVFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJDT05GTElDVFMnPjxmaWxlbmFtZT5SQ09ORkxJQ1RTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUFJPVklERVMnPjxmaWxlbmFtZT5SUFJPVklERVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRVBMQUNFUyc+PGZpbGVuYW1lPlJSRVBMQUNFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQUxMT1dfRU1QVFknPjxmaWxlbmFtZT5BTExPV19FTVBUWTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3ByZWluc3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3Bvc3RpbnN0PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wcmVybTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5wa2dfcG9zdHJtPC9maWxlbmFtZT4sIGFuZCByZXBvcnRzIGlmIHRoZXJlIGFyZQorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNldHMgdGhhdCBhcmUgbm90IHBhY2thZ2Utc3BlY2lmaWMuCisgICAgICAgICAgICAgICAgVXNpbmcgdGhlc2UgdmFyaWFibGVzIHdpdGhvdXQgYSBwYWNrYWdlIHN1ZmZpeCBpcyBiYWQgcHJhY3RpY2UsCisgICAgICAgICAgICAgICAgYW5kIG1pZ2h0IHVubmVjZXNzYXJpbHkgY29tcGxpY2F0ZSBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIgcGFja2FnZXMKKyAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIHNhbWUgcmVjaXBlIG9yIGhhdmUgb3RoZXIgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wbi1vdmVycmlkZXM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyB0aGF0IGEgcmVjaXBlIGRvZXMgbm90IGhhdmUgYSBuYW1lCisgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+KSB2YWx1ZQorICAgICAgICAgICAgICAgIHRoYXQgYXBwZWFycyBpbgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPjxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgSWYgYSByZWNpcGUgaXMgbmFtZWQgc3VjaCB0aGF0IGl0cyA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHZhbHVlIG1hdGNoZXMgc29tZXRoaW5nIGFscmVhZHkgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gKGUuZy4gPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBoYXBwZW5zIHRvIGJlIHRoZSBzYW1lIGFzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPJz48ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT48L2xpbms+KSwKKyAgICAgICAgICAgICAgICBpdCBjYW4gaGF2ZSB1bmV4cGVjdGVkIGNvbnNlcXVlbmNlcy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYXNzaWdubWVudHMgc3VjaCBhcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU18ke1BOfSA9ICJ4eXoiPC9maWxlbmFtZT4gZWZmZWN0aXZlbHkgdHVybiBpbnRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTID0gInh5eiI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cnBhdGhzOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgZm9yIHJwYXRocyBpbiB0aGUgYmluYXJpZXMgdGhhdCBjb250YWluIGJ1aWxkIHN5c3RlbSBwYXRocyBzdWNoCisgICAgICAgICAgICAgICAgYXMgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIElmIHRoaXMgdGVzdCBmYWlscywgYmFkIDxmaWxlbmFtZT4tcnBhdGg8L2ZpbGVuYW1lPiBvcHRpb25zIGFyZSBiZWluZworICAgICAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgbGlua2VyIGNvbW1hbmRzIGFuZCB5b3VyIGJpbmFyaWVzIGhhdmUgcG90ZW50aWFsIHNlY3VyaXR5CisgICAgICAgICAgICAgICAgaXNzdWVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c3BsaXQtc3RyaXA6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFJlcG9ydHMgdGhhdCBzcGxpdHRpbmcgb3Igc3RyaXBwaW5nIGRlYnVnIHN5bWJvbHMgZnJvbSBiaW5hcmllcworICAgICAgICAgICAgICAgIGhhcyBmYWlsZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zdGF0aWNkZXY6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3Igc3RhdGljIGxpYnJhcnkgZmlsZXMgKDxmaWxlbmFtZT4qLmE8L2ZpbGVuYW1lPikgaW4KKyAgICAgICAgICAgICAgICBub24tPGZpbGVuYW1lPnN0YXRpY2RldjwvZmlsZW5hbWU+IHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c3ltbGluay10by1zeXNyb290OjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgZm9yIHN5bWxpbmtzIGluIHBhY2thZ2VzIHRoYXQgcG9pbnQgaW50bworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBvbiB0aGUgaG9zdC4KKyAgICAgICAgICAgICAgICBTdWNoIHN5bWxpbmtzIHdpbGwgd29yayBvbiB0aGUgaG9zdCwgYnV0IGFyZSBjbGVhcmx5IGludmFsaWQKKyAgICAgICAgICAgICAgICB3aGVuIHJ1bm5pbmcgb24gdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnRleHRyZWw6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3IgRUxGIGJpbmFyaWVzIHRoYXQgY29udGFpbiByZWxvY2F0aW9ucyBpbiB0aGVpcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4udGV4dDwvZmlsZW5hbWU+IHNlY3Rpb25zLCB3aGljaCBjYW4gcmVzdWx0IGluIGEKKyAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZSBpbXBhY3QgYXQgcnVudGltZS4KKyAgICAgICAgICAgICAgICBTZWUgdGhlIGV4cGxhbmF0aW9uIGZvciB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdxYS1pc3N1ZS10ZXh0cmVsJz48ZmlsZW5hbWU+RUxGIGJpbmFyeTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHJ1bnRpbWUgcGVyZm9ybWFuY2UgaXNzdWVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dW5zYWZlLXJlZmVyZW5jZXMtaW4tYmluYXJpZXM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFJlcG9ydHMgd2hlbiBhIGJpbmFyeSBpbnN0YWxsZWQgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX2xpYmRpcn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX2JpbmRpcn08L2ZpbGVuYW1lPiwgb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX3NiaW5kaXJ9PC9maWxlbmFtZT4sIGRlcGVuZHMgb24gYW5vdGhlcgorICAgICAgICAgICAgICAgIGJpbmFyeSBpbnN0YWxsZWQgdW5kZXIgPGZpbGVuYW1lPiR7ZXhlY19wcmVmaXh9PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhpcyBkZXBlbmRlbmN5IGlzIGEgY29uY2VybiBpZiB5b3Ugd2FudCB0aGUgc3lzdGVtIHRvIHJlbWFpbgorICAgICAgICAgICAgICAgIGJhc2ljYWxseSBvcGVyYWJsZSBpZiA8ZmlsZW5hbWU+L3VzcjwvZmlsZW5hbWU+IGlzIG1vdW50ZWQKKyAgICAgICAgICAgICAgICBzZXBhcmF0ZWx5IGFuZCBpcyBub3QgbW91bnRlZC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgZm9yIGJpbmFyaWVzIGluc3RhbGxlZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX2xpYmRpcn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7YmFzZV9iaW5kaXJ9PC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX3NiaW5kaXJ9PC9maWxlbmFtZT4gYXJlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vbGliPC9maWxlbmFtZT4sIDxmaWxlbmFtZT4vYmluPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3NiaW48L2ZpbGVuYW1lPiwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBmb3IgYSBiaW5hcnkgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgIHVuZGVyIDxmaWxlbmFtZT4ke2V4ZWNfcHJlZml4fTwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dW5zYWZlLXJlZmVyZW5jZXMtaW4tc2NyaXB0czo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUmVwb3J0cyB3aGVuIGEgc2NyaXB0IGZpbGUgaW5zdGFsbGVkIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7YmFzZV9saWJkaXJ9PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7YmFzZV9iaW5kaXJ9PC9maWxlbmFtZT4sIG9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7YmFzZV9zYmluZGlyfTwvZmlsZW5hbWU+LCBkZXBlbmRzIG9uIGZpbGVzCisgICAgICAgICAgICAgICAgaW5zdGFsbGVkIHVuZGVyIDxmaWxlbmFtZT4ke2V4ZWNfcHJlZml4fTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoaXMgZGVwZW5kZW5jeSBpcyBhIGNvbmNlcm4gaWYgeW91IHdhbnQgdGhlIHN5c3RlbSB0byByZW1haW4KKyAgICAgICAgICAgICAgICBiYXNpY2FsbHkgb3BlcmFibGUgaWYgPGZpbGVuYW1lPi91c3I8L2ZpbGVuYW1lPiBpcyBtb3VudGVkCisgICAgICAgICAgICAgICAgc2VwYXJhdGVseSBhbmQgaXMgbm90IG1vdW50ZWQuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIGZvciBiaW5hcmllcyBpbnN0YWxsZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7YmFzZV9saWJkaXJ9PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2VfYmluZGlyfTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7YmFzZV9zYmluZGlyfTwvZmlsZW5hbWU+IGFyZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2xpYjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+L2JpbjwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9zYmluPC9maWxlbmFtZT4sIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgZm9yIGEgYmluYXJ5IGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICB1bmRlciA8ZmlsZW5hbWU+JHtleGVjX3ByZWZpeH08L2ZpbGVuYW1lPiBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3VzcjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnVzZWxlc3MtcnBhdGhzOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgZm9yIGR5bmFtaWMgbGlicmFyeSBsb2FkIHBhdGhzIChycGF0aHMpIGluIHRoZSBiaW5hcmllcyB0aGF0CisgICAgICAgICAgICAgICAgYnkgZGVmYXVsdCBvbiBhIHN0YW5kYXJkIHN5c3RlbSBhcmUgc2VhcmNoZWQgYnkgdGhlIGxpbmtlciAoZS5nLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vbGliPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT4vdXNyL2xpYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICBXaGlsZSB0aGVzZSBwYXRocyB3aWxsIG5vdCBjYXVzZSBhbnkgYnJlYWthZ2UsIHRoZXkgZG8gd2FzdGUgc3BhY2UgYW5kCisgICAgICAgICAgICAgICAgYXJlIHVubmVjZXNzYXJ5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dmFyLXVuZGVmaW5lZDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUmVwb3J0cyB3aGVuIHZhcmlhYmxlcyBmdW5kYW1lbnRhbCB0byBwYWNrYWdpbmcgKGkuZS4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPiwgYW5kCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR0QnPjxmaWxlbmFtZT5QS0dEPC9maWxlbmFtZT48L2xpbms+KSBhcmUKKyAgICAgICAgICAgICAgICB1bmRlZmluZWQgZHVyaW5nCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2UnPjxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dmVyc2lvbi1nb2luZy1iYWNrd2FyZHM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIElmIEJ1aWxkIEhpc3RvcnkgaXMgZW5hYmxlZCwgcmVwb3J0cyB3aGVuIGEgcGFja2FnZQorICAgICAgICAgICAgICAgIGJlaW5nIHdyaXR0ZW4gb3V0IGhhcyBhIGxvd2VyIHZlcnNpb24gdGhhbiB0aGUgcHJldmlvdXNseQorICAgICAgICAgICAgICAgIHdyaXR0ZW4gcGFja2FnZSB1bmRlciB0aGUgc2FtZSBuYW1lLgorICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgcGxhY2luZyBvdXRwdXQgcGFja2FnZXMgaW50byBhIGZlZWQgYW5kCisgICAgICAgICAgICAgICAgdXBncmFkaW5nIHBhY2thZ2VzIG9uIGEgdGFyZ2V0IHN5c3RlbSB1c2luZyB0aGF0IGZlZWQsIHRoZQorICAgICAgICAgICAgICAgIHZlcnNpb24gb2YgYSBwYWNrYWdlIGdvaW5nIGJhY2t3YXJkcyBjYW4gcmVzdWx0IGluIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICBzeXN0ZW0gbm90IGNvcnJlY3RseSB1cGdyYWRpbmcgdG8gdGhlICJuZXciIHZlcnNpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgcGFja2FnZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBub3QgdXNpbmcgcnVudGltZSBwYWNrYWdlIG1hbmFnZW1lbnQgb24geW91cgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtLCB0aGVuIHlvdSBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dAorICAgICAgICAgICAgICAgICAgICB0aGlzIHNpdHVhdGlvbi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT54b3JnLWRyaXZlci1hYmk6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyB0aGF0IGFsbCBwYWNrYWdlcyBjb250YWluaW5nIFhvcmcgZHJpdmVycyBoYXZlIEFCSQorICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnhzZXJ2ZXIteG9yZzwvZmlsZW5hbWU+IHJlY2lwZSBwcm92aWRlcyBkcml2ZXIKKyAgICAgICAgICAgICAgICBBQkkgbmFtZXMuCisgICAgICAgICAgICAgICAgQWxsIGRyaXZlcnMgc2hvdWxkIGRlcGVuZCBvbiB0aGUgQUJJIHZlcnNpb25zIHRoYXQgdGhleSBoYXZlCisgICAgICAgICAgICAgICAgYmVlbiBidWlsdCBhZ2FpbnN0LgorICAgICAgICAgICAgICAgIERyaXZlciByZWNpcGVzIHRoYXQgaW5jbHVkZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT54b3JnLWRyaXZlci1pbnB1dC5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT54b3JnLWRyaXZlci12aWRlby5pbmM8L2ZpbGVuYW1lPiB3aWxsCisgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBnZXQgdGhlc2UgdmVyc2lvbnMuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3Ugc2hvdWxkIG9ubHkgbmVlZCB0byBleHBsaWNpdGx5IGFkZAorICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyB0byBiaW5hcnkgZHJpdmVyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWluc3NlcnYnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+aW5zc2Vydi5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW5zc2VydjwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHVzZXMgdGhlIDxmaWxlbmFtZT5pbnNzZXJ2PC9maWxlbmFtZT4gdXRpbGl0eSB0byB1cGRhdGUgdGhlIG9yZGVyIG9mCisgICAgICAgIHN5bWJvbGljIGxpbmtzIGluIDxmaWxlbmFtZT4vZXRjL3JjPy5kLzwvZmlsZW5hbWU+IHdpdGhpbiBhbiBpbWFnZQorICAgICAgICBiYXNlZCBvbiBkZXBlbmRlbmNpZXMgc3BlY2lmaWVkIGJ5IExTQiBoZWFkZXJzIGluIHRoZQorICAgICAgICA8ZmlsZW5hbWU+aW5pdC5kPC9maWxlbmFtZT4gc2NyaXB0cyB0aGVtc2VsdmVzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWtlcm5lbCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5rZXJuZWwuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmtlcm5lbDwvZmlsZW5hbWU+IGNsYXNzIGhhbmRsZXMgYnVpbGRpbmcgTGludXgga2VybmVscy4KKyAgICAgICAgVGhlIGNsYXNzIGNvbnRhaW5zIGNvZGUgdG8gYnVpbGQgYWxsIGtlcm5lbCB0cmVlcy4KKyAgICAgICAgQWxsIG5lZWRlZCBoZWFkZXJzIGFyZSBzdGFnZWQgaW50byB0aGUKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFHSU5HX0tFUk5FTF9ESVInPlNUQUdJTkdfS0VSTkVMX0RJUjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICBkaXJlY3RvcnkgdG8gYWxsb3cgb3V0LW9mLXRyZWUgbW9kdWxlIGJ1aWxkcyB1c2luZworICAgICAgICB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtbW9kdWxlJz48ZmlsZW5hbWU+bW9kdWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIG1lYW5zIHRoYXQgZWFjaCBidWlsdCBrZXJuZWwgbW9kdWxlIGlzIHBhY2thZ2VkIHNlcGFyYXRlbHkgYW5kIGludGVyLW1vZHVsZQorICAgICAgICBkZXBlbmRlbmNpZXMgYXJlIGNyZWF0ZWQgYnkgcGFyc2luZyB0aGUgPGZpbGVuYW1lPm1vZGluZm88L2ZpbGVuYW1lPiBvdXRwdXQuCisgICAgICAgIElmIGFsbCBtb2R1bGVzIGFyZSByZXF1aXJlZCwgdGhlbiBpbnN0YWxsaW5nIHRoZSA8ZmlsZW5hbWU+a2VybmVsLW1vZHVsZXM8L2ZpbGVuYW1lPgorICAgICAgICBwYWNrYWdlIGluc3RhbGxzIGFsbCBwYWNrYWdlcyB3aXRoIG1vZHVsZXMgYW5kIHZhcmlvdXMgb3RoZXIga2VybmVsIHBhY2thZ2VzCisgICAgICAgIHN1Y2ggYXMgPGZpbGVuYW1lPmtlcm5lbC12bWxpbnV4PC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFZhcmlvdXMgb3RoZXIgY2xhc3NlcyBhcmUgdXNlZCBieSB0aGUgPGZpbGVuYW1lPmtlcm5lbDwvZmlsZW5hbWU+CisgICAgICAgIGFuZCA8ZmlsZW5hbWU+bW9kdWxlPC9maWxlbmFtZT4gY2xhc3NlcyBpbnRlcm5hbGx5IGluY2x1ZGluZyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMta2VybmVsLWFyY2gnPjxmaWxlbmFtZT5rZXJuZWwtYXJjaDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtbW9kdWxlLWJhc2UnPjxmaWxlbmFtZT5tb2R1bGUtYmFzZTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWxpbnV4LWtlcm5lbC1iYXNlJz48ZmlsZW5hbWU+bGludXgta2VybmVsLWJhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3Nlcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1rZXJuZWwtYXJjaCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5rZXJuZWwtYXJjaC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+a2VybmVsLWFyY2g8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBzZXRzIHRoZSA8ZmlsZW5hbWU+QVJDSDwvZmlsZW5hbWU+IGVudmlyb25tZW50IHZhcmlhYmxlIGZvciBMaW51eAorICAgICAgICBrZXJuZWwgY29tcGlsYXRpb24gKGluY2x1ZGluZyBtb2R1bGVzKS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1rZXJuZWwtbW9kdWxlLXNwbGl0Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmtlcm5lbC1tb2R1bGUtc3BsaXQuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmtlcm5lbC1tb2R1bGUtc3BsaXQ8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3Igc3BsaXR0aW5nIExpbnV4IGtlcm5lbCBtb2R1bGVzIGludG8KKyAgICAgICAgc2VwYXJhdGUgcGFja2FnZXMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMta2VybmVsLXlvY3RvJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmtlcm5lbC15b2N0by5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+a2VybmVsLXlvY3RvPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgcHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIGJ1aWxkaW5nIGZyb20gbGludXgteW9jdG8gc3R5bGUKKyAgICAgICAga2VybmVsIHNvdXJjZSByZXBvc2l0b3JpZXMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtbGliX3BhY2thZ2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+bGliX3BhY2thZ2UuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmxpYl9wYWNrYWdlPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgc3VwcG9ydHMgcmVjaXBlcyB0aGF0IGJ1aWxkIGxpYnJhcmllcyBhbmQgcHJvZHVjZSBleGVjdXRhYmxlCisgICAgICAgIGJpbmFyaWVzLCB3aGVyZSB0aG9zZSBiaW5hcmllcyBzaG91bGQgbm90IGJlIGluc3RhbGxlZCBieSBkZWZhdWx0CisgICAgICAgIGFsb25nIHdpdGggdGhlIGxpYnJhcnkuCisgICAgICAgIEluc3RlYWQsIHRoZSBiaW5hcmllcyBhcmUgYWRkZWQgdG8gYSBzZXBhcmF0ZQorICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0tYmluPC9maWxlbmFtZT4KKyAgICAgICAgcGFja2FnZSB0byBtYWtlIHRoZWlyIGluc3RhbGxhdGlvbiBvcHRpb25hbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1saWNlbnNlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmxpY2Vuc2UuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmxpY2Vuc2U8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBsaWNlbnNlCisgICAgICAgIG1hbmlmZXN0IGNyZWF0aW9uIGFuZCBsaWNlbnNlIGV4Y2x1c2lvbi4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgdXNpbmcgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5IRVJJVF9ESVNUUk8nPjxmaWxlbmFtZT5JTkhFUklUX0RJU1RSTzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1saW51eC1rZXJuZWwtYmFzZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5saW51eC1rZXJuZWwtYmFzZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+bGludXgta2VybmVsLWJhc2U8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3IgcmVjaXBlcyB0aGF0IGJ1aWxkIG91dCBvZiB0aGUgTGludXgKKyAgICAgICAga2VybmVsIHNvdXJjZSB0cmVlLgorICAgICAgICBUaGVzZSBidWlsZHMgZ29lcyBiZXlvbmQgdGhlIGtlcm5lbCBpdHNlbGYuCisgICAgICAgIEZvciBleGFtcGxlLCB0aGUgUGVyZiByZWNpcGUgYWxzbyBpbmhlcml0cyB0aGlzIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWxvZ2dpbmcnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+bG9nZ2luZy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+bG9nZ2luZzwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIHRoZSBzdGFuZGFyZAorICAgICAgICBzaGVsbCBmdW5jdGlvbnMgdXNlZCB0byBsb2cgbWVzc2FnZXMgZm9yIHZhcmlvdXMgQml0QmFrZSBzZXZlcml0eSBsZXZlbHMKKyAgICAgICAgKGkuZS4gPGZpbGVuYW1lPmJicGxhaW48L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmJibm90ZTwvZmlsZW5hbWU+LAorICAgICAgICA8ZmlsZW5hbWU+YmJ3YXJuPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5iYmVycm9yPC9maWxlbmFtZT4sCisgICAgICAgIDxmaWxlbmFtZT5iYmZhdGFsPC9maWxlbmFtZT4sIGFuZCA8ZmlsZW5hbWU+YmJkZWJ1ZzwvZmlsZW5hbWU+KS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgc2luY2UgaXQgaXMgaW5oZXJpdGVkIGJ5CisgICAgICAgIHRoZSA8ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+IGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLW1ldGEnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGNsYXNzIGlzIGluaGVyaXRlZCBieSByZWNpcGVzCisgICAgICAgIHRoYXQgZG8gbm90IGJ1aWxkIGFueSBvdXRwdXQgcGFja2FnZXMgdGhlbXNlbHZlcywgYnV0IGFjdCBhcyBhICJtZXRhIgorICAgICAgICB0YXJnZXQgZm9yIGJ1aWxkaW5nIG90aGVyIHJlY2lwZXMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtbWV0YWRhdGFfc2NtJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGFkYXRhX3NjbS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+bWV0YWRhdGFfc2NtPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBmb3IKKyAgICAgICAgcXVlcnlpbmcgdGhlIGJyYW5jaCBhbmQgcmV2aXNpb24gb2YgYSBTb3VyY2UgQ29kZSBNYW5hZ2VyIChTQ00pCisgICAgICAgIHJlcG9zaXRvcnkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iYXNlJz48ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyB1c2VzIHRoaXMgY2xhc3MgdG8gcHJpbnQgdGhlIHJldmlzaW9ucyBvZiBlYWNoIGxheWVyIGJlZm9yZQorICAgICAgICBzdGFydGluZyBldmVyeSBidWlsZC4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhZGF0YV9zY208L2ZpbGVuYW1lPiBjbGFzcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKKyAgICAgICAgYmVjYXVzZSBpdCBpcyBpbmhlcml0ZWQgYnkgdGhlIDxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT4gY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtbWltZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5taW1lLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5taW1lPC9maWxlbmFtZT4gY2xhc3MgZ2VuZXJhdGVzIHRoZSBwcm9wZXIKKyAgICAgICAgcG9zdC1pbnN0YWxsIGFuZCBwb3N0LXJlbW92ZSAocG9zdGluc3QvcG9zdHJtKSBzY3JpcHRsZXRzIGZvciBwYWNrYWdlcworICAgICAgICB0aGF0IGluc3RhbGwgTUlNRSB0eXBlIGZpbGVzLgorICAgICAgICBUaGVzZSBzY3JpcHRsZXRzIGNhbGwgPGZpbGVuYW1lPnVwZGF0ZS1taW1lLWRhdGFiYXNlPC9maWxlbmFtZT4gdG8gYWRkCisgICAgICAgIHRoZSBNSU1FIHR5cGVzIHRvIHRoZSBzaGFyZWQgZGF0YWJhc2UuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtbWlycm9ycyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5taXJyb3JzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5taXJyb3JzPC9maWxlbmFtZT4gY2xhc3Mgc2V0cyB1cCBzb21lIHN0YW5kYXJkCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NSVJST1JTJz48ZmlsZW5hbWU+TUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPiBlbnRyaWVzCisgICAgICAgIGZvciBzb3VyY2UgY29kZSBtaXJyb3JzLgorICAgICAgICBUaGVzZSBtaXJyb3JzIHByb3ZpZGUgYSBmYWxsLWJhY2sgcGF0aCBpbiBjYXNlIHRoZSB1cHN0cmVhbSBzb3VyY2UKKyAgICAgICAgc3BlY2lmaWVkIGluCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB3aXRoaW4gcmVjaXBlcyBpcyB1bmF2YWlsYWJsZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgc2luY2UgaXQgaXMgaW5oZXJpdGVkIGJ5IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iYXNlJz48ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+PC9saW5rPiBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1tb2R1bGUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+bW9kdWxlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5tb2R1bGU8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvciBidWlsZGluZworICAgICAgICBvdXQtb2YtdHJlZSBMaW51eCBrZXJuZWwgbW9kdWxlcy4KKyAgICAgICAgVGhlIGNsYXNzIGluaGVyaXRzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1tb2R1bGUtYmFzZSc+PGZpbGVuYW1lPm1vZHVsZS1iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1rZXJuZWwtbW9kdWxlLXNwbGl0Jz48ZmlsZW5hbWU+a2VybmVsLW1vZHVsZS1zcGxpdDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzc2VzLCBhbmQgaW1wbGVtZW50cyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdGFza3MuCisgICAgICAgIFRoZSBjbGFzcyBwcm92aWRlcyBldmVyeXRoaW5nIG5lZWRlZCB0byBidWlsZCBhbmQgcGFja2FnZSBhIGtlcm5lbAorICAgICAgICBtb2R1bGUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIG91dC1vZi10cmVlIExpbnV4IGtlcm5lbCBtb2R1bGVzLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfVVJMOyNpbmNvcnBvcmF0aW5nLW91dC1vZi10cmVlLW1vZHVsZXMnPkluY29ycG9yYXRpbmcgT3V0LW9mLVRyZWUgTW9kdWxlczwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtbW9kdWxlLWJhc2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+bW9kdWxlLWJhc2UuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPm1vZHVsZS1iYXNlPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgdGhlIGJhc2UKKyAgICAgICAgZnVuY3Rpb25hbGl0eSBmb3IgYnVpbGRpbmcgTGludXgga2VybmVsIG1vZHVsZXMuCisgICAgICAgIFR5cGljYWxseSwgYSByZWNpcGUgdGhhdCBidWlsZHMgc29mdHdhcmUgdGhhdCBpbmNsdWRlcyBvbmUgb3IKKyAgICAgICAgbW9yZSBrZXJuZWwgbW9kdWxlcyBhbmQgaGFzIGl0cyBvd24gbWVhbnMgb2YgYnVpbGRpbmcKKyAgICAgICAgdGhlIG1vZHVsZSBpbmhlcml0cyB0aGlzIGNsYXNzIGFzIG9wcG9zZWQgdG8gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtbW9kdWxlJz48ZmlsZW5hbWU+bW9kdWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLW11bHRpbGliKic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5tdWx0aWxpYiouYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPm11bHRpbGliKjwvZmlsZW5hbWU+IGNsYXNzZXMgcHJvdmlkZSBzdXBwb3J0CisgICAgICAgIGZvciBidWlsZGluZyBsaWJyYXJpZXMgd2l0aCBkaWZmZXJlbnQgdGFyZ2V0IG9wdGltaXphdGlvbnMgb3IgdGFyZ2V0CisgICAgICAgIGFyY2hpdGVjdHVyZXMgYW5kIGluc3RhbGxpbmcgdGhlbSBzaWRlLWJ5LXNpZGUgaW4gdGhlIHNhbWUgaW1hZ2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSBNdWx0aWxpYiBmZWF0dXJlLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjb21iaW5pbmctbXVsdGlwbGUtdmVyc2lvbnMtbGlicmFyeS1maWxlcy1pbnRvLW9uZS1pbWFnZSc+Q29tYmluaW5nIE11bHRpcGxlIFZlcnNpb25zIG9mIExpYnJhcnkgRmlsZXMgaW50byBPbmUgSW1hZ2U8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtbmF0aXZlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPm5hdGl2ZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgY29tbW9uCisgICAgICAgIGZ1bmN0aW9uYWxpdHkgZm9yIHJlY2lwZXMgdGhhdCB3aXNoIHRvIGJ1aWxkIHRvb2xzIHRvIHJ1biBvbiB0aGUgYnVpbGQKKyAgICAgICAgaG9zdCAoaS5lLiB0b29scyB0aGF0IHVzZSB0aGUgY29tcGlsZXIgb3Igb3RoZXIgdG9vbHMgZnJvbSB0aGUKKyAgICAgICAgYnVpbGQgaG9zdCkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gY3JlYXRlIGEgcmVjaXBlIHRoYXQgYnVpbGRzIHRvb2xzIHRoYXQgcnVuIG5hdGl2ZWx5IG9uIHRoZQorICAgICAgICBob3N0IGEgY291cGxlIGRpZmZlcmVudCB3YXlzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSBhIDxyZXBsYWNlYWJsZT5teXJlY2lwZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi1uYXRpdmUuYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRoYXQgaW5oZXJpdHMgdGhlIDxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIHRoaXMgbWV0aG9kLCB5b3UgbXVzdCBvcmRlciB0aGUgaW5oZXJpdCBzdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICBpbiB0aGUgcmVjaXBlIGFmdGVyIGFsbCBvdGhlciBpbmhlcml0IHN0YXRlbWVudHMgc28gdGhhdCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4gY2xhc3MgaXMgaW5oZXJpdGVkIGxhc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlIG9yIG1vZGlmeSBhIHRhcmdldCByZWNpcGUgdGhhdCBjb250YWlucworICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJDTEFTU0VYVEVORCc+PGZpbGVuYW1lPkJCQ0xBU1NFWFRFTkQ8L2ZpbGVuYW1lPjwvbGluaz4gPSAibmF0aXZlIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbnNpZGUgdGhlIHJlY2lwZSwgdXNlIDxmaWxlbmFtZT5fY2xhc3MtbmF0aXZlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9jbGFzcy10YXJnZXQ8L2ZpbGVuYW1lPiBvdmVycmlkZXMgdG8gc3BlY2lmeSBhbnkKKyAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IHNwZWNpZmljIHRvIHRoZSByZXNwZWN0aXZlIG5hdGl2ZSBvciB0YXJnZXQKKyAgICAgICAgICAgICAgICBjYXNlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQWx0aG91Z2ggYXBwbGllZCBkaWZmZXJlbnRseSwgdGhlIDxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPiBjbGFzcyBpcworICAgICAgICB1c2VkIHdpdGggYm90aCBtZXRob2RzLgorICAgICAgICBUaGUgYWR2YW50YWdlIG9mIHRoZSBzZWNvbmQgbWV0aG9kIGlzIHRoYXQgeW91IGRvIG5vdCBuZWVkIHRvIGhhdmUgdHdvCisgICAgICAgIHNlcGFyYXRlIHJlY2lwZXMgKGFzc3VtaW5nIHlvdSBuZWVkIGJvdGgpIGZvciBuYXRpdmUgYW5kIHRhcmdldC4KKyAgICAgICAgQWxsIGNvbW1vbiBwYXJ0cyBvZiB0aGUgcmVjaXBlIGFyZSBhdXRvbWF0aWNhbGx5IHNoYXJlZC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1uYXRpdmVzZGsnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+bmF0aXZlc2RrLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBjb21tb24KKyAgICAgICAgZnVuY3Rpb25hbGl0eSBmb3IgcmVjaXBlcyB0aGF0IHdpc2ggdG8gYnVpbGQgdG9vbHMgdG8gcnVuIGFzIHBhcnQgb2YKKyAgICAgICAgYW4gU0RLIChpLmUuIHRvb2xzIHRoYXQgcnVuIG9uCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtNQUNISU5FJz48ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gY3JlYXRlIGEgcmVjaXBlIHRoYXQgYnVpbGRzIHRvb2xzIHRoYXQgcnVuIG9uIHRoZSBTREsgbWFjaGluZQorICAgICAgICBhIGNvdXBsZSBkaWZmZXJlbnQgd2F5czoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGUgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGstPC9maWxlbmFtZT48cmVwbGFjZWFibGU+bXlyZWNpcGU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHJlY2lwZSB0aGF0IGluaGVyaXRzIHRoZSA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4gY2xhc3MuCisgICAgICAgICAgICAgICAgSWYgeW91IHVzZSB0aGlzIG1ldGhvZCwgeW91IG11c3Qgb3JkZXIgdGhlIGluaGVyaXQgc3RhdGVtZW50CisgICAgICAgICAgICAgICAgaW4gdGhlIHJlY2lwZSBhZnRlciBhbGwgb3RoZXIgaW5oZXJpdCBzdGF0ZW1lbnRzIHNvIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+IGNsYXNzIGlzIGluaGVyaXRlZCBsYXN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSBhIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiB2YXJpYW50CisgICAgICAgICAgICAgICAgb2YgYW55IHJlY2lwZSBieSBhZGRpbmcgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkNMQVNTRVhURU5EJz48ZmlsZW5hbWU+QkJDTEFTU0VYVEVORDwvZmlsZW5hbWU+PC9saW5rPiA9ICJuYXRpdmVzZGsiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluc2lkZSB0aGUgcmVjaXBlLCB1c2UgPGZpbGVuYW1lPl9jbGFzcy1uYXRpdmVzZGs8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X2NsYXNzLXRhcmdldDwvZmlsZW5hbWU+IG92ZXJyaWRlcyB0byBzcGVjaWZ5IGFueQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgc3BlY2lmaWMgdG8gdGhlIHJlc3BlY3RpdmUgU0RLIG1hY2hpbmUgb3IgdGFyZ2V0CisgICAgICAgICAgICAgICAgY2FzZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEFsdGhvdWdoIGFwcGxpZWQgZGlmZmVyZW50bHksIHRoZSA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgaXMgdXNlZCB3aXRoIGJvdGggbWV0aG9kcy4KKyAgICAgICAgVGhlIGFkdmFudGFnZSBvZiB0aGUgc2Vjb25kIG1ldGhvZCBpcyB0aGF0IHlvdSBkbyBub3QgbmVlZCB0byBoYXZlIHR3bworICAgICAgICBzZXBhcmF0ZSByZWNpcGVzIChhc3N1bWluZyB5b3UgbmVlZCBib3RoKSBmb3IgdGhlIFNESyBtYWNoaW5lIGFuZCB0aGUKKyAgICAgICAgdGFyZ2V0LgorICAgICAgICBBbGwgY29tbW9uIHBhcnRzIG9mIHRoZSByZWNpcGUgYXJlIGF1dG9tYXRpY2FsbHkgc2hhcmVkLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLW9lbGludCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5vZWxpbnQuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPm9lbGludDwvZmlsZW5hbWU+IGNsYXNzIGlzIGFuCisgICAgICAgIG9ic29sZXRlIGxpbnQgY2hlY2tpbmcgdG9vbCB0aGF0IGV4aXN0cyBpbgorICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQSBudW1iZXIgb2YgY2xhc3NlcyBleGlzdCB0aGF0IGNvdWxkIGJlIGdlbmVyYWxseSB1c2VmdWwgaW4KKyAgICAgICAgT0UtQ29yZSBidXQgYXJlIG5ldmVyIGFjdHVhbGx5IHVzZWQgd2l0aGluIE9FLUNvcmUgaXRzZWxmLgorICAgICAgICBUaGUgPGZpbGVuYW1lPm9lbGludDwvZmlsZW5hbWU+IGNsYXNzIGlzIG9uZSBzdWNoIGV4YW1wbGUuCisgICAgICAgIEhvd2V2ZXIsIGJlaW5nIGF3YXJlIG9mIHRoaXMgY2xhc3MgY2FuIHJlZHVjZSB0aGUgcHJvbGlmZXJhdGlvbiBvZgorICAgICAgICBkaWZmZXJlbnQgdmVyc2lvbnMgb2Ygc2ltaWxhciBjbGFzc2VzIGFjcm9zcyBtdWx0aXBsZSBsYXllcnMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtb3duLW1pcnJvcnMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+b3duLW1pcnJvcnMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPm93bi1taXJyb3JzPC9maWxlbmFtZT4gY2xhc3MgbWFrZXMgaXQKKyAgICAgICAgZWFzaWVyIHRvIHNldCB1cCB5b3VyIG93bgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJFTUlSUk9SUyc+PGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgZnJvbSB3aGljaCB0byBmaXJzdCBmZXRjaCBzb3VyY2UgYmVmb3JlIGF0dGVtcHRpbmcgdG8gZmV0Y2ggaXQgZnJvbSB0aGUKKyAgICAgICAgdXBzdHJlYW0gc3BlY2lmaWVkIGluCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB3aXRoaW4gZWFjaCByZWNpcGUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIHVzZSB0aGlzIGNsYXNzLCBpbmhlcml0IGl0IGdsb2JhbGx5IGFuZCBzcGVjaWZ5CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TT1VSQ0VfTUlSUk9SX1VSTCc+PGZpbGVuYW1lPlNPVVJDRV9NSVJST1JfVVJMPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVCArPSAib3duLW1pcnJvcnMiCisgICAgIFNPVVJDRV9NSVJST1JfVVJMID0gImh0dHA6Ly9leGFtcGxlLmNvbS9teS1zb3VyY2UtbWlycm9yIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBvbmx5IGEgc2luZ2xlIFVSTCBpbgorICAgICAgICA8ZmlsZW5hbWU+U09VUkNFX01JUlJPUl9VUkw8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wYWNrYWdlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnBhY2thZ2UuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBhY2thZ2U8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyBnZW5lcmF0aW5nCisgICAgICAgIHBhY2thZ2VzIGZyb20gYSBidWlsZCdzIG91dHB1dC4KKyAgICAgICAgVGhlIGNvcmUgZ2VuZXJpYyBmdW5jdGlvbmFsaXR5IGlzIGluCisgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgVGhlIGNvZGUgc3BlY2lmaWMgdG8gcGFydGljdWxhciBwYWNrYWdlIHR5cGVzIHJlc2lkZXMgaW4gdGhlc2UKKyAgICAgICAgcGFja2FnZS1zcGVjaWZpYyBjbGFzc2VzOgorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX2RlYic+PGZpbGVuYW1lPnBhY2thZ2VfZGViPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX3JwbSc+PGZpbGVuYW1lPnBhY2thZ2VfcnBtPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX2lwayc+PGZpbGVuYW1lPnBhY2thZ2VfaXBrPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZV90YXInPjxmaWxlbmFtZT5wYWNrYWdlX3RhcjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgPG5vdGU+PHRpdGxlPldhcm5pbmc8L3RpdGxlPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5wYWNrYWdlX3RhcjwvZmlsZW5hbWU+IGNsYXNzIGlzIGJyb2tlbiBhbmQgbm90CisgICAgICAgICAgICBzdXBwb3J0ZWQuCisgICAgICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkbyBub3QgdXNlIHRoaXMgY2xhc3MuCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBjb250cm9sIHRoZSBsaXN0IG9mIHJlc3VsdGluZyBwYWNrYWdlIGZvcm1hdHMgYnkgdXNpbmcgdGhlCisgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz5QQUNLQUdFX0NMQVNTRVM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgdmFyaWFibGUgZGVmaW5lZCBpbiB5b3VyIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgIFdoZW4gZGVmaW5pbmcgdGhlIHZhcmlhYmxlLCB5b3UgY2FuIHNwZWNpZnkgb25lIG9yIG1vcmUgcGFja2FnZSB0eXBlcy4KKyAgICAgICAgU2luY2UgaW1hZ2VzIGFyZSBnZW5lcmF0ZWQgZnJvbSBwYWNrYWdlcywgYSBwYWNrYWdpbmcgY2xhc3MgaXMKKyAgICAgICAgbmVlZGVkIHRvIGVuYWJsZSBpbWFnZSBnZW5lcmF0aW9uLgorICAgICAgICBUaGUgZmlyc3QgY2xhc3MgbGlzdGVkIGluIHRoaXMgdmFyaWFibGUgaXMgdXNlZCBmb3IgaW1hZ2UgZ2VuZXJhdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IHRha2UgdGhlIG9wdGlvbmFsIHN0ZXAgdG8gc2V0IHVwIGEgcmVwb3NpdG9yeSAocGFja2FnZSBmZWVkKQorICAgICAgICBvbiB0aGUgZGV2ZWxvcG1lbnQgaG9zdCB0aGF0IGNhbiBiZSB1c2VkIGJ5IFNtYXJ0LCB5b3UgY2FuCisgICAgICAgIGluc3RhbGwgcGFja2FnZXMgZnJvbSB0aGUgZmVlZCB3aGlsZSB5b3UgYXJlIHJ1bm5pbmcgdGhlIGltYWdlCisgICAgICAgIG9uIHRoZSB0YXJnZXQgKGkuZS4gcnVudGltZSBpbnN0YWxsYXRpb24gb2YgcGFja2FnZXMpLgorICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctcnVudGltZS1wYWNrYWdlLW1hbmFnZW1lbnQnPlVzaW5nIFJ1bnRpbWUgUGFja2FnZSBNYW5hZ2VtZW50PC91bGluaz4iCisgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIHBhY2thZ2Utc3BlY2lmaWMgY2xhc3MgeW91IGNob29zZSBjYW4gYWZmZWN0IGJ1aWxkLXRpbWUgcGVyZm9ybWFuY2UKKyAgICAgICAgYW5kIGhhcyBzcGFjZSByYW1pZmljYXRpb25zLgorICAgICAgICBJbiBnZW5lcmFsLCBidWlsZGluZyBhIHBhY2thZ2Ugd2l0aCBJUEsgdGFrZXMgYWJvdXQgdGhpcnR5IHBlcmNlbnQgbGVzcworICAgICAgICB0aW1lIGFzIGNvbXBhcmVkIHRvIHVzaW5nIFJQTSB0byBidWlsZCB0aGUgc2FtZSBvciBzaW1pbGFyIHBhY2thZ2UuCisgICAgICAgIFRoaXMgY29tcGFyaXNvbiB0YWtlcyBpbnRvIGFjY291bnQgYSBjb21wbGV0ZSBidWlsZCBvZiB0aGUgcGFja2FnZSB3aXRoCisgICAgICAgIGFsbCBkZXBlbmRlbmNpZXMgcHJldmlvdXNseSBidWlsdC4KKyAgICAgICAgVGhlIHJlYXNvbiBmb3IgdGhpcyBkaXNjcmVwYW5jeSBpcyBiZWNhdXNlIHRoZSBSUE0gcGFja2FnZSBtYW5hZ2VyCisgICAgICAgIGNyZWF0ZXMgYW5kIHByb2Nlc3NlcyBtb3JlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+IHRoYW4gdGhlCisgICAgICAgIElQSyBwYWNrYWdlIG1hbmFnZXIuCisgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG1pZ2h0IGNvbnNpZGVyIHNldHRpbmcKKyAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+IHRvICJwYWNrYWdlX2lwayIgaWYgeW91IGFyZQorICAgICAgICBidWlsZGluZyBzbWFsbGVyIHN5c3RlbXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJlZm9yZSBtYWtpbmcgeW91ciBwYWNrYWdlIG1hbmFnZXIgZGVjaXNpb24sIGhvd2V2ZXIsIHlvdSBzaG91bGQKKyAgICAgICAgY29uc2lkZXIgc29tZSBmdXJ0aGVyIHRoaW5ncyBhYm91dCB1c2luZyBSUE06CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgUlBNIHN0YXJ0cyB0byBwcm92aWRlIG1vcmUgYWJpbGl0aWVzIHRoYW4gSVBLIGR1ZSB0bworICAgICAgICAgICAgICAgIHRoZSBmYWN0IHRoYXQgaXQgcHJvY2Vzc2VzIG1vcmUgTWV0YWRhdGEuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgaW5mb3JtYXRpb24gaW5jbHVkZXMgaW5kaXZpZHVhbCBmaWxlIHR5cGVzLAorICAgICAgICAgICAgICAgIGZpbGUgY2hlY2tzdW0gZ2VuZXJhdGlvbiBhbmQgZXZhbHVhdGlvbiBvbiBpbnN0YWxsLCBzcGFyc2UgZmlsZQorICAgICAgICAgICAgICAgIHN1cHBvcnQsIGNvbmZsaWN0IGRldGVjdGlvbiBhbmQgcmVzb2x1dGlvbiBmb3IgTXVsdGlsaWIgc3lzdGVtcywKKyAgICAgICAgICAgICAgICBBQ0lEIHN0eWxlIHVwZ3JhZGUsIGFuZCByZXBhY2thZ2luZyBhYmlsaXRpZXMgZm9yIHJvbGxiYWNrcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBGb3Igc21hbGxlciBzeXN0ZW1zLCB0aGUgZXh0cmEgc3BhY2UgdXNlZCBmb3IgdGhlIEJlcmtlbGV5CisgICAgICAgICAgICAgICAgRGF0YWJhc2UgYW5kIHRoZSBhbW91bnQgb2YgbWV0YWRhdGEgd2hlbiB1c2luZyBSUE0gY2FuIGFmZmVjdAorICAgICAgICAgICAgICAgIHlvdXIgYWJpbGl0eSB0byBwZXJmb3JtIG9uLWRldmljZSB1cGdyYWRlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gZmluZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZSBlZmZlY3RzIG9mIHRoZSBwYWNrYWdlCisgICAgICAgIGNsYXNzIGF0IHRoZXNlIHR3byBZb2N0byBQcm9qZWN0IG1haWxpbmcgbGlzdCBsaW5rczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fTElTVFNfVVJMOy9waXBlcm1haWwvcG9reS8yMDExLU1heS8wMDYzNjIuaHRtbCc+CisgICAgICAgICAgICAgICAgaHR0cHM6Ly9saXN0cy55b2N0b3Byb2plY3Qub3JnL3BpcGVybWFpbC9wb2t5LzIwMTEtTWF5LzAwNjM2Mi5odG1sPC91bGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fTElTVFNfVVJMOy9waXBlcm1haWwvcG9reS8yMDExLU1heS8wMDYzNjMuaHRtbCc+CisgICAgICAgICAgICAgICAgaHR0cHM6Ly9saXN0cy55b2N0b3Byb2plY3Qub3JnL3BpcGVybWFpbC9wb2t5LzIwMTEtTWF5LzAwNjM2My5odG1sPC91bGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcGFja2FnZV9kZWInPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGFja2FnZV9kZWIuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBhY2thZ2VfZGViPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgcHJvdmlkZXMgc3VwcG9ydCBmb3IgY3JlYXRpbmcgcGFja2FnZXMgdGhhdCB1c2UgdGhlIERlYmlhbgorICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+LmRlYjwvZmlsZW5hbWU+KSBmaWxlIGZvcm1hdC4KKyAgICAgICAgVGhlIGNsYXNzIGVuc3VyZXMgdGhlIHBhY2thZ2VzIGFyZSB3cml0dGVuIG91dCBpbiBhCisgICAgICAgIDxmaWxlbmFtZT4uZGViPC9maWxlbmFtZT4gZmlsZSBmb3JtYXQgdG8gdGhlCisgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfREVCJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9ERUI8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgIGRpcmVjdG9yeS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpbmhlcml0cyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZSc+PGZpbGVuYW1lPnBhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MgYW5kIGlzIGVuYWJsZWQgdGhyb3VnaCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfaXBrJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnBhY2thZ2VfaXBrLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wYWNrYWdlX2lwazwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGNyZWF0aW5nIHBhY2thZ2VzIHRoYXQgdXNlIHRoZSBJUEsKKyAgICAgICAgKGkuZS4gPGZpbGVuYW1lPi5pcGs8L2ZpbGVuYW1lPikgZmlsZSBmb3JtYXQuCisgICAgICAgIFRoZSBjbGFzcyBlbnN1cmVzIHRoZSBwYWNrYWdlcyBhcmUgd3JpdHRlbiBvdXQgaW4gYQorICAgICAgICA8ZmlsZW5hbWU+LmlwazwvZmlsZW5hbWU+IGZpbGUgZm9ybWF0IHRvIHRoZQorICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX0lQSyc+PGZpbGVuYW1lPkRFUExPWV9ESVJfSVBLPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICBkaXJlY3RvcnkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgaW5oZXJpdHMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzIGFuZCBpcyBlbmFibGVkIHRocm91Z2ggdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX3JwbSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wYWNrYWdlX3JwbS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cGFja2FnZV9ycG08L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBzdXBwb3J0IGZvciBjcmVhdGluZyBwYWNrYWdlcyB0aGF0IHVzZSB0aGUgUlBNCisgICAgICAgIChpLmUuIDxmaWxlbmFtZT4ucnBtPC9maWxlbmFtZT4pIGZpbGUgZm9ybWF0LgorICAgICAgICBUaGUgY2xhc3MgZW5zdXJlcyB0aGUgcGFja2FnZXMgYXJlIHdyaXR0ZW4gb3V0IGluIGEKKyAgICAgICAgPGZpbGVuYW1lPi5ycG08L2ZpbGVuYW1lPiBmaWxlIGZvcm1hdCB0byB0aGUKKyAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9SUE0nPjxmaWxlbmFtZT5ERVBMT1lfRElSX1JQTTwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgZGlyZWN0b3J5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIGluaGVyaXRzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyBhbmQgaXMgZW5hYmxlZCB0aHJvdWdoIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIGluIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcGFja2FnZV90YXInPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGFja2FnZV90YXIuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBhY2thZ2VfdGFyPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgcHJvdmlkZXMgc3VwcG9ydCBmb3IgY3JlYXRpbmcgdGFyYmFsbHMuCisgICAgICAgIFRoZSBjbGFzcyBlbnN1cmVzIHRoZSBwYWNrYWdlcyBhcmUgd3JpdHRlbiBvdXQgaW4gYQorICAgICAgICB0YXJiYWxsIGZvcm1hdCB0byB0aGUKKyAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9UQVInPjxmaWxlbmFtZT5ERVBMT1lfRElSX1RBUjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgZGlyZWN0b3J5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIGluaGVyaXRzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyBhbmQgaXMgZW5hYmxlZCB0aHJvdWdoIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIGluIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgWW91IGNhbm5vdCBzcGVjaWZ5IHRoZSA8ZmlsZW5hbWU+cGFja2FnZV90YXI8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICAgICAgZmlyc3QgdXNpbmcgdGhlIDxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgIFlvdSBtdXN0IHVzZSA8ZmlsZW5hbWU+LmRlYjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPi5pcGs8L2ZpbGVuYW1lPiwgb3IgPGZpbGVuYW1lPi5ycG08L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICBmb3JtYXRzIGZvciB5b3VyIGltYWdlIG9yIFNESy4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VkYXRhJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnBhY2thZ2VkYXRhLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wYWNrYWdlZGF0YTwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzCisgICAgICAgIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciByZWFkaW5nIDxmaWxlbmFtZT5wa2dkYXRhPC9maWxlbmFtZT4gZmlsZXMKKyAgICAgICAgZm91bmQgaW4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR0RBVEFfRElSJz48ZmlsZW5hbWU+UEtHREFUQV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIFRoZXNlIGZpbGVzIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBvdXRwdXQgcGFja2FnZSBwcm9kdWNlZCBieQorICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSBpdCBpcyBpbmhlcml0ZWQgYnkgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBhY2thZ2Vncm91cCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBhY2thZ2Vncm91cDwvZmlsZW5hbWU+IGNsYXNzIHNldHMgZGVmYXVsdCB2YWx1ZXMKKyAgICAgICAgYXBwcm9wcmlhdGUgZm9yIHBhY2thZ2UgZ3JvdXAgcmVjaXBlcyAoZS5nLgorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz5QQUNLQUdFUzwvbGluaz48L2ZpbGVuYW1lPiwKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0FSQ0gnPlBBQ0tBR0VfQVJDSDwvbGluaz48L2ZpbGVuYW1lPiwKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1BTExPV19FTVBUWSc+QUxMT1dfRU1QVFk8L2xpbms+PC9maWxlbmFtZT4sCisgICAgICAgIGFuZCBzbyBmb3J0aCkuCisgICAgICAgIEl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IGFsbCBwYWNrYWdlIGdyb3VwIHJlY2lwZXMgaW5oZXJpdCB0aGlzIGNsYXNzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGlzIGNsYXNzLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZ3Bva3ktZXh0ZW5kLWN1c3RvbWltYWdlLWN1c3RvbXRhc2tzJz5DdXN0b21pemluZyBJbWFnZXMgVXNpbmcgQ3VzdG9tIFBhY2thZ2UgR3JvdXBzPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBQcmV2aW91c2x5LCB0aGlzIGNsYXNzIHdhcyBjYWxsZWQgdGhlIDxmaWxlbmFtZT50YXNrPC9maWxlbmFtZT4gY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcGFja2FnZWluZm8nPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGFja2FnZWluZm8uYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBhY2thZ2VpbmZvPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgZ2l2ZXMgYSBCaXRCYWtlIHVzZXIgaW50ZXJmYWNlIHRoZSBhYmlsaXR5IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uCisgICAgICAgIGFib3V0IG91dHB1dCBwYWNrYWdlcyBmcm9tIHRoZSA8ZmlsZW5hbWU+cGtnZGF0YTwvZmlsZW5hbWU+IGZpbGVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIGlzIGVuYWJsZWQgYXV0b21hdGljYWxseSB3aGVuIHVzaW5nIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9ob2InPkhvYjwvdWxpbms+CisgICAgICAgIHVzZXIgaW50ZXJmYWNlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBhdGNoJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnBhdGNoLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wYXRjaDwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IGZvcgorICAgICAgICBhcHBseWluZyBwYXRjaGVzIGR1cmluZyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhdGNoJz48ZmlsZW5hbWU+ZG9fcGF0Y2g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdGFzay4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSBpdCBpcyBpbmhlcml0ZWQgYnkgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJhc2UnPjxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBlcmxuYXRpdmUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGVybG5hdGl2ZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoZW4gaW5oZXJpdGVkIGJ5IGEgcmVjaXBlLCB0aGUgPGZpbGVuYW1lPnBlcmxuYXRpdmU8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBzdXBwb3J0cyB1c2luZyB0aGUgbmF0aXZlIHZlcnNpb24gb2YgUGVybCBidWlsdCBieSB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgIHJhdGhlciB0aGFuIHVzaW5nIHRoZSB2ZXJzaW9uIHByb3ZpZGVkIGJ5IHRoZSBidWlsZCBob3N0LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBpeGJ1ZmNhY2hlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnBpeGJ1ZmNhY2hlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5waXhidWZjYWNoZTwvZmlsZW5hbWU+IGNsYXNzIGdlbmVyYXRlcyB0aGUgcHJvcGVyCisgICAgICAgIHBvc3QtaW5zdGFsbCBhbmQgcG9zdC1yZW1vdmUgKHBvc3RpbnN0L3Bvc3RybSkgc2NyaXB0bGV0cyBmb3IgcGFja2FnZXMKKyAgICAgICAgdGhhdCBpbnN0YWxsIHBpeGJ1ZiBsb2FkZXJzLCB3aGljaCBhcmUgdXNlZCB3aXRoCisgICAgICAgIDxmaWxlbmFtZT5nZGstcGl4YnVmPC9maWxlbmFtZT4uCisgICAgICAgIFRoZXNlIHNjcmlwdGxldHMgY2FsbCA8ZmlsZW5hbWU+dXBkYXRlX3BpeGJ1Zl9jYWNoZTwvZmlsZW5hbWU+CisgICAgICAgIHRvIGFkZCB0aGUgcGl4YnVmIGxvYWRlcnMgdG8gdGhlIGNhY2hlLgorICAgICAgICBTaW5jZSB0aGUgY2FjaGUgZmlsZXMgYXJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywKKyAgICAgICAgPGZpbGVuYW1lPnVwZGF0ZV9waXhidWZfY2FjaGU8L2ZpbGVuYW1lPiBpcyBydW4gdXNpbmcgUUVNVSBpZiB0aGUKKyAgICAgICAgcG9zdGluc3Qgc2NyaXB0bGV0cyBuZWVkIHRvIGJlIHJ1biBvbiB0aGUgYnVpbGQgaG9zdCBkdXJpbmcgaW1hZ2UKKyAgICAgICAgY3JlYXRpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIHRoZSBwaXhidWYgbG9hZGVycyBiZWluZyBpbnN0YWxsZWQgYXJlIGluIHBhY2thZ2VzIG90aGVyCisgICAgICAgIHRoYW4gdGhlIHJlY2lwZSdzIG1haW4gcGFja2FnZSwgc2V0CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QSVhCVUZfUEFDS0FHRVMnPjxmaWxlbmFtZT5QSVhCVUZfUEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdG8gc3BlY2lmeSB0aGUgcGFja2FnZXMgY29udGFpbmluZyB0aGUgbG9hZGVycy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wa2djb25maWcnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGtnY29uZmlnLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgYSBzdGFuZGFyZCB3YXkgdG8gZ2V0CisgICAgICAgIGhlYWRlciBhbmQgbGlicmFyeSBpbmZvcm1hdGlvbi4KKyAgICAgICAgVGhpcyBjbGFzcyBhaW1zIHRvIHNtb290aCBpbnRlZ3JhdGlvbiBvZgorICAgICAgICA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+IGludG8gbGlicmFyaWVzIHRoYXQgdXNlIGl0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBEdXJpbmcgc3RhZ2luZywgQml0QmFrZSBpbnN0YWxscyA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+IGRhdGEgaW50byB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnN5c3Jvb3RzLzwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgQnkgbWFraW5nIHVzZSBvZiBzeXNyb290IGZ1bmN0aW9uYWxpdHkgd2l0aGluIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4sCisgICAgICAgIHRoaXMgY2xhc3Mgbm8gbG9uZ2VyIGhhcyB0byBtYW5pcHVsYXRlIHRoZSBmaWxlcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wb3B1bGF0ZS1zZGsnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cG9wdWxhdGVfc2RrLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wb3B1bGF0ZV9zZGs8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvcgorICAgICAgICBTREstb25seSByZWNpcGVzLgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gYWR2YW50YWdlcyBnYWluZWQgd2hlbiBidWlsZGluZyBhIGNyb3NzLWRldmVsb3BtZW50CisgICAgICAgIHRvb2xjaGFpbiB1c2luZyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBvcHVsYXRlX3Nkayc+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX3NkazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0YXNrLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyNvcHRpb25hbGx5LWJ1aWxkaW5nLWEtdG9vbGNoYWluLWluc3RhbGxlcic+T3B0aW9uYWxseSBCdWlsZGluZyBhIFRvb2xjaGFpbiBJbnN0YWxsZXI8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wb3B1bGF0ZS1zZGstKic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfKi5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cG9wdWxhdGVfc2RrXyo8L2ZpbGVuYW1lPiBjbGFzc2VzIHN1cHBvcnQgU0RLIGNyZWF0aW9uCisgICAgICAgIGFuZCBjb25zaXN0IG9mIHRoZSBmb2xsb3dpbmcgY2xhc3NlczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBvcHVsYXRlX3Nka19iYXNlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGUgYmFzZSBjbGFzcyBzdXBwb3J0aW5nIFNESyBjcmVhdGlvbiB1bmRlciBhbGwgcGFja2FnZQorICAgICAgICAgICAgICAgIG1hbmFnZXJzIChpLmUuIERFQiwgUlBNLCBhbmQgb3BrZykuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfZGViPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBTdXBwb3J0cyBjcmVhdGlvbiBvZiB0aGUgU0RLIGdpdmVuIHRoZSBEZWJpYW4gcGFja2FnZSBtYW5hZ2VyLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cG9wdWxhdGVfc2RrX3JwbTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgU3VwcG9ydHMgY3JlYXRpb24gb2YgdGhlIFNESyBnaXZlbiB0aGUgUlBNIHBhY2thZ2UgbWFuYWdlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBvcHVsYXRlX3Nka19pcGs8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFN1cHBvcnRzIGNyZWF0aW9uIG9mIHRoZSBTREsgZ2l2ZW4gdGhlIG9wa2cgKElQSyBmb3JtYXQpCisgICAgICAgICAgICAgICAgcGFja2FnZSBtYW5hZ2VyLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfYmFzZTwvZmlsZW5hbWU+IGNsYXNzIGluaGVyaXRzIHRoZQorICAgICAgICBhcHByb3ByaWF0ZSA8ZmlsZW5hbWU+cG9wdWxhdGVfc2RrXyo8L2ZpbGVuYW1lPiAoaS5lLgorICAgICAgICA8ZmlsZW5hbWU+ZGViPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5ycG08L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgIDxmaWxlbmFtZT5pcGs8L2ZpbGVuYW1lPikgYmFzZWQgb24KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1BLR1RZUEUnPjxmaWxlbmFtZT5JTUFHRV9QS0dUWVBFPC9maWxlbmFtZT48L2xpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgYmFzZSBjbGFzcyBlbnN1cmVzIGFsbCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpcmVjdG9yaWVzIGFyZQorICAgICAgICBlc3RhYmxpc2hlZCBhbmQgdGhlbiBwb3B1bGF0ZXMgdGhlIFNESy4KKyAgICAgICAgQWZ0ZXIgcG9wdWxhdGluZyB0aGUgU0RLLCB0aGUgPGZpbGVuYW1lPnBvcHVsYXRlX3Nka19iYXNlPC9maWxlbmFtZT4KKyAgICAgICAgY2xhc3MgY29uc3RydWN0cyB0d28gc3lzcm9vdHM6CisgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNES19BUkNIJz48ZmlsZW5hbWU+U0RLX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS1uYXRpdmVzZGs8L2ZpbGVuYW1lPiwKKyAgICAgICAgd2hpY2ggY29udGFpbnMgdGhlIGNyb3NzLWNvbXBpbGVyIGFuZCBhc3NvY2lhdGVkIHRvb2xpbmcsIGFuZCB0aGUKKyAgICAgICAgdGFyZ2V0LCB3aGljaCBjb250YWlucyBhIHRhcmdldCByb290IGZpbGVzeXN0ZW0gdGhhdCBpcyBjb25maWd1cmVkIGZvcgorICAgICAgICB0aGUgU0RLIHVzYWdlLgorICAgICAgICBUaGVzZSB0d28gaW1hZ2VzIHJlc2lkZSBpbgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX09VVFBVVCc+PGZpbGVuYW1lPlNES19PVVRQVVQ8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIHdoaWNoIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtTREtfT1VUUFVUfS8ke1NES19BUkNIfTxyZXBsYWNlYWJsZT4tbmF0aXZlc2RrLXBrZ3M8L3JlcGxhY2VhYmxlPgorICAgICAke1NES19PVVRQVVR9LyR7U0RLVEFSR0VUU1lTUk9PVH0vPHJlcGxhY2VhYmxlPnRhcmdldC1wa2dzPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGaW5hbGx5LCB0aGUgYmFzZSBwb3B1bGF0ZSBTREsgY2xhc3MgY3JlYXRlcyB0aGUgdG9vbGNoYWluCisgICAgICAgIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCwgdGhlIHRhcmJhbGwgb2YgdGhlIFNESywgYW5kIHRoZSBpbnN0YWxsZXIuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSByZXNwZWN0aXZlIDxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfZGViPC9maWxlbmFtZT4sCisgICAgICAgIDxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfcnBtPC9maWxlbmFtZT4sIGFuZAorICAgICAgICA8ZmlsZW5hbWU+cG9wdWxhdGVfc2RrX2lwazwvZmlsZW5hbWU+IGNsYXNzZXMgZWFjaCBzdXBwb3J0IHRoZQorICAgICAgICBzcGVjaWZpYyB0eXBlIG9mIFNESy4KKyAgICAgICAgVGhlc2UgY2xhc3NlcyBhcmUgaW5oZXJpdGVkIGJ5IGFuZCB1c2VkIHdpdGggdGhlCisgICAgICAgIDxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfYmFzZTwvZmlsZW5hbWU+IGNsYXNzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluCisgICAgICAgIGdlbmVyYXRpb24sIHNlZSB0aGUKKyAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbi1nZW5lcmF0aW9uJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW4gR2VuZXJhdGlvbjwvbGluaz4iCisgICAgICAgIHNlY3Rpb24uCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhZHZhbnRhZ2VzIGdhaW5lZCB3aGVuIGJ1aWxkaW5nIGEKKyAgICAgICAgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluIHVzaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcG9wdWxhdGVfc2RrJz48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRhc2ssIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I29wdGlvbmFsbHktYnVpbGRpbmctYS10b29sY2hhaW4taW5zdGFsbGVyJz5PcHRpb25hbGx5IEJ1aWxkaW5nIGEgVG9vbGNoYWluIEluc3RhbGxlcjwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXByZXhwb3J0Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnByZXhwb3J0LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wcmV4cG9ydDwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgZm9yCisgICAgICAgIGV4cG9ydGluZworICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPiB2YWx1ZXMuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseS4KKyAgICAgICAgICAgIFJhdGhlciwgaXQgaXMgZW5hYmxlZCB3aGVuIHVzaW5nCisgICAgICAgICAgICAiPGZpbGVuYW1lPmJpdGJha2UtcHJzZXJ2LXRvb2wgZXhwb3J0PC9maWxlbmFtZT4iLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcHJpbXBvcnQnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cHJpbXBvcnQuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnByaW1wb3J0PC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBmb3IKKyAgICAgICAgaW1wb3J0aW5nCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+IHZhbHVlcy4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5LgorICAgICAgICAgICAgUmF0aGVyLCBpdCBpcyBlbmFibGVkIHdoZW4gdXNpbmcKKyAgICAgICAgICAgICI8ZmlsZW5hbWU+Yml0YmFrZS1wcnNlcnYtdG9vbCBpbXBvcnQ8L2ZpbGVuYW1lPiIuCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wcnNlcnYnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cHJzZXJ2LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wcnNlcnY8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvcgorICAgICAgICB1c2luZyBhCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3dvcmtpbmctd2l0aC1hLXByLXNlcnZpY2UnPlBSIHNlcnZpY2U8L3VsaW5rPgorICAgICAgICBpbiBvcmRlciB0byBhdXRvbWF0aWNhbGx5IG1hbmFnZSB0aGUgaW5jcmVtZW50aW5nIG9mIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZSBmb3IKKyAgICAgICAgZWFjaCByZWNpcGUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgaXQgaXMgaW5oZXJpdGVkIGJ5IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcy4KKyAgICAgICAgSG93ZXZlciwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2lsbCBub3QgZW5hYmxlIHRoZQorICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgY2xhc3MgdW5sZXNzCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUlNFUlZfSE9TVCc+PGZpbGVuYW1lPlBSU0VSVl9IT1NUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGhhcyBiZWVuIHNldC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wdGVzdCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wdGVzdC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cHRlc3Q8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvcgorICAgICAgICBwYWNrYWdpbmcgYW5kIGluc3RhbGxpbmcgcnVudGltZSB0ZXN0cyBmb3IgcmVjaXBlcyB0aGF0IGJ1aWxkIHNvZnR3YXJlCisgICAgICAgIHRoYXQgcHJvdmlkZXMgdGhlc2UgdGVzdHMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgaXMgaW50ZW5kZWQgdG8gYmUgaW5oZXJpdGVkIGJ5IGluZGl2aWR1YWwgcmVjaXBlcy4KKyAgICAgICAgSG93ZXZlciwgdGhlIGNsYXNzJyBmdW5jdGlvbmFsaXR5IGlzIGxhcmdlbHkgZGlzYWJsZWQgdW5sZXNzICJwdGVzdCIKKyAgICAgICAgYXBwZWFycyBpbgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICBTZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN0ZXN0aW5nLXBhY2thZ2VzLXdpdGgtcHRlc3QnPlRlc3RpbmcgUGFja2FnZXMgV2l0aCBwdGVzdDwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICAgICAgICBvbiBwdGVzdC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wdGVzdC1nbm9tZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wdGVzdC1nbm9tZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEVuYWJsZXMgcGFja2FnZSB0ZXN0cyAocHRlc3RzKSBzcGVjaWZpY2FsbHkgZm9yIEdOT01FIHBhY2thZ2VzLAorICAgICAgICB3aGljaCBoYXZlIHRlc3RzIGludGVuZGVkIHRvIGJlIGV4ZWN1dGVkIHdpdGgKKyAgICAgICAgPGZpbGVuYW1lPmdub21lLWRlc2t0b3AtdGVzdGluZzwvZmlsZW5hbWU+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gc2V0dGluZyB1cCBhbmQgcnVubmluZyBwdGVzdHMsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Rlc3RpbmctcGFja2FnZXMtd2l0aC1wdGVzdCc+VGVzdGluZyBQYWNrYWdlcyBXaXRoIHB0ZXN0PC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXB5dGhvbi1kaXInPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cHl0aG9uLWRpci5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cHl0aG9uLWRpcjwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIHRoZSBiYXNlIHZlcnNpb24sCisgICAgICAgIGxvY2F0aW9uLCBhbmQgc2l0ZSBwYWNrYWdlIGxvY2F0aW9uIGZvciBQeXRob24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcHl0aG9ubmF0aXZlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnB5dGhvbm5hdGl2ZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoZW4gaW5oZXJpdGVkIGJ5IGEgcmVjaXBlLCB0aGUgPGZpbGVuYW1lPnB5dGhvbm5hdGl2ZTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHN1cHBvcnRzIHVzaW5nIHRoZSBuYXRpdmUgdmVyc2lvbiBvZiBQeXRob24gYnVpbHQgYnkgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICByYXRoZXIgdGhhbiB1c2luZyB0aGUgdmVyc2lvbiBwcm92aWRlZCBieSB0aGUgYnVpbGQgaG9zdC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1xZW11Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnFlbXUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnFlbXU8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvciByZWNpcGVzCisgICAgICAgIHRoYXQgZWl0aGVyIG5lZWQgUUVNVSBvciB0ZXN0IGZvciB0aGUgZXhpc3RlbmNlIG9mIFFFTVUuCisgICAgICAgIFR5cGljYWxseSwgdGhpcyBjbGFzcyBpcyB1c2VkIHRvIHJ1biBwcm9ncmFtcyBmb3IgYSB0YXJnZXQgc3lzdGVtIG9uCisgICAgICAgIHRoZSBidWlsZCBob3N0IHVzaW5nIFFFTVUncyBhcHBsaWNhdGlvbiBlbXVsYXRpb24gbW9kZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1xbWFrZSonPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cW1ha2UqLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5xbWFrZSo8L2ZpbGVuYW1lPiBjbGFzc2VzIHN1cHBvcnQgcmVjaXBlcyB0aGF0CisgICAgICAgIG5lZWQgdG8gYnVpbGQgc29mdHdhcmUgdGhhdCB1c2VzIFF0J3MgPGZpbGVuYW1lPnFtYWtlPC9maWxlbmFtZT4KKyAgICAgICAgYnVpbGQgc3lzdGVtIGFuZCBhcmUgY29tcHJpc2VkIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5xbWFrZV9iYXNlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBQcm92aWRlcyBiYXNlIGZ1bmN0aW9uYWxpdHkgZm9yIGFsbCB2ZXJzaW9ucyBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xbWFrZTwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cW1ha2UyPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBFeHRlbmRzIGJhc2UgZnVuY3Rpb25hbGl0eSBmb3IgPGZpbGVuYW1lPnFtYWtlPC9maWxlbmFtZT4gMi54IGFzCisgICAgICAgICAgICAgICAgdXNlZCBieSBRdCA0LnguPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgbmVlZCB0byBzZXQgYW55IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIHBhc3MgYW55IG9wdGlvbnMgdG8KKyAgICAgICAgPGZpbGVuYW1lPnFtYWtlPC9maWxlbmFtZT4sIHlvdSBjYW4gYWRkIHRoZXNlIHRvIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfUU1BS0VWQVJTX1BSRSc+PGZpbGVuYW1lPkVYVFJBX1FNQUtFVkFSU19QUkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgb3IKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX1FNQUtFVkFSU19QT1NUJz48ZmlsZW5hbWU+RVhUUkFfUU1BS0VWQVJTX1BPU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgYXJndW1lbnRzIG5lZWQgdG8gYmUgYmVmb3JlIG9yCisgICAgICAgIGFmdGVyIHRoZSA8ZmlsZW5hbWU+LnBybzwvZmlsZW5hbWU+IGZpbGUgbGlzdCBvbiB0aGUgY29tbWFuZCBsaW5lLAorICAgICAgICByZXNwZWN0aXZlbHkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJ5IGRlZmF1bHQsIGFsbCA8ZmlsZW5hbWU+LnBybzwvZmlsZW5hbWU+IGZpbGVzIGFyZSBidWlsdC4KKyAgICAgICAgSWYgeW91IHdhbnQgdG8gc3BlY2lmeSB5b3VyIG93biBzdWJzZXQgb2YgPGZpbGVuYW1lPi5wcm88L2ZpbGVuYW1lPgorICAgICAgICBmaWxlcyB0byBiZSBidWlsdCwgc3BlY2lmeSB0aGVtIGluIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUU1BS0VfUFJPRklMRVMnPjxmaWxlbmFtZT5RTUFLRV9QUk9GSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1xdDQqJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnF0NCouYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnF0NCo8L2ZpbGVuYW1lPiBjbGFzc2VzIHN1cHBvcnQgcmVjaXBlcyB0aGF0IG5lZWQgdG8KKyAgICAgICAgYnVpbGQgc29mdHdhcmUgdGhhdCB1c2VzIHRoZSBRdCBkZXZlbG9wbWVudCBmcmFtZXdvcmsgdmVyc2lvbiA0LngKKyAgICAgICAgYW5kIGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnF0NGU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFN1cHBvcnRzIGJ1aWxkaW5nIGFnYWluc3QgUXQvRW1iZWRkZWQsIHdoaWNoIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgZm9yIGdyYXBoaWNhbCBvdXRwdXQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5xdDR4MTE8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFN1cHBvcnRzIGJ1aWxkaW5nIGFnYWluc3QgUXQvWDExLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNsYXNzZXMgaW5oZXJpdCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcW1ha2UqJz48ZmlsZW5hbWU+cW1ha2UyPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXJlbG9jYXRhYmxlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnJlbG9jYXRhYmxlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5yZWxvY2F0YWJsZTwvZmlsZW5hbWU+IGNsYXNzIGVuYWJsZXMgcmVsb2NhdGlvbiBvZgorICAgICAgICBiaW5hcmllcyB3aGVuIHRoZXkgYXJlIGluc3RhbGxlZCBpbnRvIHRoZSBzeXNyb290LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIG1ha2VzIHVzZSBvZiB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtY2hycGF0aCc+PGZpbGVuYW1lPmNocnBhdGg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MgYW5kIGlzIHVzZWQgYnkgYm90aCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtY3Jvc3MnPjxmaWxlbmFtZT5jcm9zczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtbmF0aXZlJz48ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzZXMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcmVwb3J0LWVycm9yJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnJlcG9ydC1lcnJvci5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cmVwb3J0LWVycm9yPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgZW5hYmxpbmcgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLXRoZS1lcnJvci1yZXBvcnRpbmctdG9vbCc+ZXJyb3IgcmVwb3J0aW5nIHRvb2w8L3VsaW5rPiwKKyAgICAgICAgd2hpY2ggYWxsb3dzIHlvdSB0byBzdWJtaXQgYnVpbGQgZXJyb3IgaW5mb3JtYXRpb24gdG8gYSBjZW50cmFsCisgICAgICAgIGRhdGFiYXNlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY2xhc3MgY29sbGVjdHMgZGVidWcgaW5mb3JtYXRpb24gZm9yIHJlY2lwZSwgcmVjaXBlIHZlcnNpb24sIHRhc2ssCisgICAgICAgIG1hY2hpbmUsIGRpc3RybywgYnVpbGQgc3lzdGVtLCB0YXJnZXQgc3lzdGVtLCBob3N0IGRpc3RybywgYnJhbmNoLAorICAgICAgICBjb21taXQsIGFuZCBsb2cuCisgICAgICAgIEZyb20gdGhlIGluZm9ybWF0aW9uLCByZXBvcnQgZmlsZXMgdXNpbmcgYSBKU09OIGZvcm1hdCBhcmUgY3JlYXRlZCBhbmQKKyAgICAgICAgc3RvcmVkIGluCisgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUxPR19ESVInPjxmaWxlbmFtZT5MT0dfRElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0vZXJyb3ItcmVwb3J0PC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcm0td29yayc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5ybV93b3JrLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5ybV93b3JrPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgZGVsZXRpb24gb2YgdGVtcG9yYXJ5CisgICAgICAgIHdvcmtzcGFjZSwgd2hpY2ggY2FuIGVhc2UgeW91ciBoYXJkIGRyaXZlIGRlbWFuZHMgZHVyaW5nIGJ1aWxkcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2FuIHVzZSBhIHN1YnN0YW50aWFsIGFtb3VudCBvZiBkaXNrCisgICAgICAgIHNwYWNlIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgQSBwb3J0aW9uIG9mIHRoaXMgc3BhY2UgaXMgdGhlIHdvcmsgZmlsZXMgdW5kZXIgdGhlCisgICAgICAgIDxmaWxlbmFtZT4ke1RNUERJUn0vd29yazwvZmlsZW5hbWU+IGRpcmVjdG9yeSBmb3IgZWFjaCByZWNpcGUuCisgICAgICAgIE9uY2UgdGhlIGJ1aWxkIHN5c3RlbSBnZW5lcmF0ZXMgdGhlIHBhY2thZ2VzIGZvciBhIHJlY2lwZSwgdGhlIHdvcmsKKyAgICAgICAgZmlsZXMgZm9yIHRoYXQgcmVjaXBlIGFyZSBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICBIb3dldmVyLCBieSBkZWZhdWx0LCB0aGUgYnVpbGQgc3lzdGVtIHByZXNlcnZlcyB0aGVzZSBmaWxlcworICAgICAgICBmb3IgaW5zcGVjdGlvbiBhbmQgcG9zc2libGUgZGVidWdnaW5nIHB1cnBvc2VzLgorICAgICAgICBJZiB5b3Ugd291bGQgcmF0aGVyIGhhdmUgdGhlc2UgZmlsZXMgZGVsZXRlZCB0byBzYXZlIGRpc2sgc3BhY2UKKyAgICAgICAgYXMgdGhlIGJ1aWxkIHByb2dyZXNzZXMsIHlvdSBjYW4gZW5hYmxlIDxmaWxlbmFtZT5ybV93b3JrPC9maWxlbmFtZT4KKyAgICAgICAgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgIHdoaWNoIGlzIGZvdW5kIGluIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgSU5IRVJJVCArPSAicm1fd29yayIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBJZiB5b3UgYXJlIG1vZGlmeWluZyBhbmQgYnVpbGRpbmcgc291cmNlIGNvZGUgb3V0IG9mIHRoZSB3b3JrIGRpcmVjdG9yeQorICAgICAgICBmb3IgYSByZWNpcGUsIGVuYWJsaW5nIDxmaWxlbmFtZT5ybV93b3JrPC9maWxlbmFtZT4gd2lsbCBwb3RlbnRpYWxseQorICAgICAgICByZXN1bHQgaW4geW91ciBjaGFuZ2VzIHRvIHRoZSBzb3VyY2UgYmVpbmcgbG9zdC4KKyAgICAgICAgVG8gZXhjbHVkZSBzb21lIHJlY2lwZXMgZnJvbSBoYXZpbmcgdGhlaXIgd29yayBkaXJlY3RvcmllcyBkZWxldGVkIGJ5CisgICAgICAgIDxmaWxlbmFtZT5ybV93b3JrPC9maWxlbmFtZT4sIHlvdSBjYW4gYWRkIHRoZSBuYW1lcyBvZiB0aGUgcmVjaXBlIG9yCisgICAgICAgIHJlY2lwZXMgeW91IGFyZSB3b3JraW5nIG9uIHRvIHRoZSA8ZmlsZW5hbWU+Uk1fV09SS19FWENMVURFPC9maWxlbmFtZT4KKyAgICAgICAgdmFyaWFibGUsIHdoaWNoIGNhbiBhbHNvIGJlIHNldCBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgZmlsZS4KKyAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgUk1fV09SS19FWENMVURFICs9ICJidXN5Ym94IGdsaWJjIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcm9vdGZzKic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5yb290ZnMqLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5yb290ZnMqPC9maWxlbmFtZT4gY2xhc3NlcyBzdXBwb3J0IGNyZWF0aW5nCisgICAgICAgIHRoZSByb290IGZpbGVzeXN0ZW0gZm9yIGFuIGltYWdlIGFuZCBjb25zaXN0IG9mIHRoZSBmb2xsb3dpbmcgY2xhc3NlczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnJvb3Rmc19kZWI8L2ZpbGVuYW1lPiBjbGFzcywgd2hpY2ggc3VwcG9ydHMKKyAgICAgICAgICAgICAgICBjcmVhdGlvbiBvZiByb290IGZpbGVzeXN0ZW1zIGZvciBpbWFnZXMgYnVpbHQgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmRlYjwvZmlsZW5hbWU+IHBhY2thZ2VzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+cm9vdGZzX3JwbTwvZmlsZW5hbWU+IGNsYXNzLCB3aGljaCBzdXBwb3J0cworICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHJvb3QgZmlsZXN5c3RlbXMgZm9yIGltYWdlcyBidWlsdCB1c2luZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ucnBtPC9maWxlbmFtZT4gcGFja2FnZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5yb290ZnNfaXBrPC9maWxlbmFtZT4gY2xhc3MsIHdoaWNoIHN1cHBvcnRzCisgICAgICAgICAgICAgICAgY3JlYXRpb24gb2Ygcm9vdCBmaWxlc3lzdGVtcyBmb3IgaW1hZ2VzIGJ1aWx0IHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5pcGs8L2ZpbGVuYW1lPiBwYWNrYWdlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSByb290IGZpbGVzeXN0ZW0gaXMgY3JlYXRlZCBmcm9tIHBhY2thZ2VzIHVzaW5nIG9uZSBvZiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnJvb3RmcyouYmJjbGFzczwvZmlsZW5hbWU+IGZpbGVzIGFzIGRldGVybWluZWQgYnkgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgcm9vdCBmaWxlc3lzdGVtIGltYWdlcyBhcmUgY3JlYXRlZCwgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0naW1hZ2UtZ2VuZXJhdGlvbi1kZXYtZW52aXJvbm1lbnQnPkltYWdlIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICBzZWN0aW9uLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXNhbml0eSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5zYW5pdHkuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnNhbml0eTwvZmlsZW5hbWU+IGNsYXNzIGNoZWNrcyB0byBzZWUgaWYgcHJlcmVxdWlzaXRlCisgICAgICAgIHNvZnR3YXJlIGlzIHByZXNlbnQgb24gdGhlIGhvc3Qgc3lzdGVtIHNvIHRoYXQgdXNlcnMgY2FuIGJlIG5vdGlmaWVkCisgICAgICAgIG9mIHBvdGVudGlhbCBwcm9ibGVtcyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGVpciBidWlsZC4KKyAgICAgICAgVGhlIGNsYXNzIGFsc28gcGVyZm9ybXMgYmFzaWMgdXNlciBjb25maWd1cmF0aW9uIGNoZWNrcyBmcm9tCisgICAgICAgIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSB0bworICAgICAgICBwcmV2ZW50IGNvbW1vbiBtaXN0YWtlcyB0aGF0IGNhdXNlIGJ1aWxkIGZhaWx1cmVzLgorICAgICAgICBEaXN0cmlidXRpb24gcG9saWN5IHVzdWFsbHkgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGluY2x1ZGUgdGhpcyBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1zY29ucyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5zY29ucy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2NvbnM8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyByZWNpcGVzIHRoYXQgbmVlZCB0bworICAgICAgICBidWlsZCBzb2Z0d2FyZSB0aGF0IHVzZXMgdGhlIFNDb25zIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRVNDT05TJz48ZmlsZW5hbWU+RVhUUkFfT0VTQ09OUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MKKyAgICAgICAgU0NvbnMgY29tbWFuZCBsaW5lLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXNkbCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5zZGwuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnNkbDwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIHJlY2lwZXMgdGhhdCBuZWVkIHRvIGJ1aWxkCisgICAgICAgIHNvZnR3YXJlIHRoYXQgdXNlcyB0aGUgU2ltcGxlIERpcmVjdE1lZGlhIExheWVyIChTREwpIGxpYnJhcnkuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtc2V0dXB0b29scyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5zZXR1cHRvb2xzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zZXR1cHRvb2xzPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgUHl0aG9uCisgICAgICAgIHZlcnNpb24gMi54IGV4dGVuc2lvbnMgdGhhdCB1c2UgYnVpbGQgc3lzdGVtcyBiYXNlZCBvbgorICAgICAgICA8ZmlsZW5hbWU+c2V0dXB0b29sczwvZmlsZW5hbWU+LgorICAgICAgICBJZiB5b3VyIHJlY2lwZSB1c2VzIHRoZXNlIGJ1aWxkIHN5c3RlbXMsIHRoZSByZWNpcGUgbmVlZHMgdG8KKyAgICAgICAgaW5oZXJpdCB0aGUgPGZpbGVuYW1lPnNldHVwdG9vbHM8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1zZXR1cHRvb2xzMyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5zZXR1cHRvb2xzMy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2V0dXB0b29sczM8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyBQeXRob24KKyAgICAgICAgdmVyc2lvbiAzLnggZXh0ZW5zaW9ucyB0aGF0IHVzZSBidWlsZCBzeXN0ZW1zIGJhc2VkIG9uCisgICAgICAgIDxmaWxlbmFtZT5zZXR1cHRvb2xzMzwvZmlsZW5hbWU+LgorICAgICAgICBJZiB5b3VyIHJlY2lwZSB1c2VzIHRoZXNlIGJ1aWxkIHN5c3RlbXMsIHRoZSByZWNpcGUgbmVlZHMgdG8KKyAgICAgICAgaW5oZXJpdCB0aGUgPGZpbGVuYW1lPnNldHVwdG9vbHMzPC9maWxlbmFtZT4gY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtc2lwJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNpcC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2lwPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgc3VwcG9ydHMgcmVjaXBlcyB0aGF0IGJ1aWxkIG9yIHBhY2thZ2UgU0lQLWJhc2VkIFB5dGhvbiBiaW5kaW5ncy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1zaXRlY29uZmlnJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNpdGVjb25maWcuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnNpdGVjb25maWc8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvciBoYW5kbGluZyBzaXRlIGNvbmZpZ3VyYXRpb24uCisgICAgICAgIFRoZSBjbGFzcyBpcyB1c2VkIGJ5IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MgdG8gYWNjZWxlcmF0ZSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0YXNrLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXNpdGVpbmZvJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNpdGVpbmZvLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zaXRlaW5mbzwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0CisgICAgICAgIHRoZSB0YXJnZXRzIHRoYXQgbWlnaHQgYmUgbmVlZGVkIGJ5IG90aGVyIGNsYXNzZXMgb3IgcmVjaXBlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgQXV0b3Rvb2xzLCB3aGljaCBjYW4gcmVxdWlyZSB0ZXN0cyB0aGF0IG11c3QKKyAgICAgICAgZXhlY3V0ZSBvbiB0aGUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICBTaW5jZSB0aGlzIGlzIG5vdCBwb3NzaWJsZSBpbiBnZW5lcmFsIHdoZW4gY3Jvc3MgY29tcGlsaW5nLCBzaXRlCisgICAgICAgIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gcHJvdmlkZSBjYWNoZWQgdGVzdCByZXN1bHRzIHNvIHRoZXNlIHRlc3RzIGNhbgorICAgICAgICBiZSBza2lwcGVkIG92ZXIgYnV0IHN0aWxsIG1ha2UgdGhlIGNvcnJlY3QgdmFsdWVzIGF2YWlsYWJsZS4KKyAgICAgICAgVGhlCisgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWV0YS1zaXRlJz5tZXRhL3NpdGUgZGlyZWN0b3J5PC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgIGNvbnRhaW5zIHRlc3QgcmVzdWx0cyBzb3J0ZWQgaW50byBkaWZmZXJlbnQgY2F0ZWdvcmllcyBzdWNoIGFzCisgICAgICAgIGFyY2hpdGVjdHVyZSwgZW5kaWFubmVzcywgYW5kIHRoZSA8ZmlsZW5hbWU+bGliYzwvZmlsZW5hbWU+IHVzZWQuCisgICAgICAgIFNpdGUgaW5mb3JtYXRpb24gcHJvdmlkZXMgYSBsaXN0IG9mIGZpbGVzIGNvbnRhaW5pbmcgZGF0YSByZWxldmFudCB0bworICAgICAgICB0aGUgY3VycmVudCBidWlsZCBpbiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1DT05GSUdfU0lURSc+Q09ORklHX1NJVEU8L2xpbms+PC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgdGhhdCBBdXRvdG9vbHMgYXV0b21hdGljYWxseSBwaWNrcyB1cC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNsYXNzIGFsc28gcHJvdmlkZXMgdmFyaWFibGVzIGxpa2UKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1TSVRFSU5GT19FTkRJQU5ORVNTJz5TSVRFSU5GT19FTkRJQU5ORVNTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgIGFuZCA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNJVEVJTkZPX0JJVFMnPlNJVEVJTkZPX0JJVFM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgdGhhdCBjYW4gYmUgdXNlZCBlbHNld2hlcmUgaW4gdGhlIG1ldGFkYXRhLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCZWNhdXNlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iYXNlJz48ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+PC9saW5rPiBjbGFzcworICAgICAgICBpbmNsdWRlcyB0aGUgPGZpbGVuYW1lPnNpdGVpbmZvPC9maWxlbmFtZT4gY2xhc3MsIGl0IGlzIGFsd2F5cyBhY3RpdmUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtc3BkeCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5zcGR4LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zcGR4PC9maWxlbmFtZT4gY2xhc3MgaW50ZWdyYXRlcyByZWFsLXRpbWUgbGljZW5zZQorICAgICAgICBzY2FubmluZywgZ2VuZXJhdGlvbiBvZiBTUERYIHN0YW5kYXJkIG91dHB1dCwgYW5kIHZlcmlmaWNhdGlvbgorICAgICAgICBvZiBsaWNlbnNlIGluZm9ybWF0aW9uIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgVGhpcyBjbGFzcyBpcyBjdXJyZW50bHkgYXQgdGhlIHByb3RvdHlwZSBzdGFnZSBpbiB0aGUgMS42CisgICAgICAgICAgICByZWxlYXNlLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtc3N0YXRlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNzdGF0ZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c3N0YXRlPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3IgU2hhcmVkCisgICAgICAgIFN0YXRlIChzc3RhdGUpLgorICAgICAgICBCeSBkZWZhdWx0LCB0aGUgY2xhc3MgaXMgZW5hYmxlZCB0aHJvdWdoIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5IRVJJVF9ESVNUUk8nPjxmaWxlbmFtZT5JTkhFUklUX0RJU1RSTzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSdzIGRlZmF1bHQgdmFsdWUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHNzdGF0ZSwgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2hhcmVkLXN0YXRlLWNhY2hlJz5TaGFyZWQgU3RhdGUgQ2FjaGU8L2xpbms+IgorICAgICAgICBzZWN0aW9uLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXN0YWdpbmcnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+c3RhZ2luZy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c3RhZ2luZzwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHN0YWdpbmcKKyAgICAgICAgZmlsZXMgaW50byB0aGUgc3lzcm9vdCBkdXJpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9zeXNyb290Jz48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0YXNrLgorICAgICAgICBUaGUgY2xhc3MgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgaXQgaXMgaW5oZXJpdGVkIGJ5IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iYXNlJz48ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1zeXNsaW51eCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5zeXNsaW51eC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c3lzbGludXg8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzeXNsaW51eC1zcGVjaWZpYworICAgICAgICBmdW5jdGlvbnMgZm9yIGJ1aWxkaW5nIGJvb3RhYmxlIGltYWdlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNsYXNzIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTklUUkQnPjxmaWxlbmFtZT5JTklUUkQ8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgSW5kaWNhdGVzIGxpc3Qgb2YgZmlsZXN5c3RlbSBpbWFnZXMgdG8gY29uY2F0ZW5hdGUgYW5kIHVzZSBhcworICAgICAgICAgICAgICAgIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyZCkuCisgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBvcHRpb25hbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUk9PVEZTJz48ZmlsZW5hbWU+Uk9PVEZTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIEluZGljYXRlcyBhIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gaW5jbHVkZSBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgb3B0aW9uYWwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUFVVE9fU1lTTElOVVhNRU5VJz48ZmlsZW5hbWU+QVVUT19TWVNMSU5VWE1FTlU8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgRW5hYmxlcyBjcmVhdGluZyBhbiBhdXRvbWF0aWMgbWVudSB3aGVuIHNldCB0byAiMSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUxBQkVMUyc+PGZpbGVuYW1lPkxBQkVMUzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBMaXN0cyB0YXJnZXRzIGZvciBhdXRvbWF0aWMgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItQVBQRU5EJz48ZmlsZW5hbWU+QVBQRU5EPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIExpc3RzIGFwcGVuZCBzdHJpbmcgb3ZlcnJpZGVzIGZvciBlYWNoIGxhYmVsLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TWVNMSU5VWF9PUFRTJz48ZmlsZW5hbWU+U1lTTElOVVhfT1BUUzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBMaXN0cyBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gYWRkIHRvIHRoZSBzeXNsaW51eCBmaWxlLgorICAgICAgICAgICAgICAgIFNlbWljb2xvbiBjaGFyYWN0ZXJzIHNlcGFyYXRlIG11bHRpcGxlIG9wdGlvbnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVNZU0xJTlVYX1NQTEFTSCc+PGZpbGVuYW1lPlNZU0xJTlVYX1NQTEFTSDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBMaXN0cyBhIGJhY2tncm91bmQgZm9yIHRoZSBWR0EgYm9vdCBtZW51IHdoZW4geW91IGFyZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICBib290IG1lbnUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVNZU0xJTlVYX0RFRkFVTFRfQ09OU09MRSc+PGZpbGVuYW1lPlNZU0xJTlVYX0RFRkFVTFRfQ09OU09MRTwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBTZXQgdG8gImNvbnNvbGU9dHR5WCIgdG8gY2hhbmdlIGtlcm5lbCBib290IGRlZmF1bHQgY29uc29sZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItU1lTTElOVVhfU0VSSUFMJz48ZmlsZW5hbWU+U1lTTElOVVhfU0VSSUFMPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIFNldHMgYW4gYWx0ZXJuYXRlIHNlcmlhbCBwb3J0LgorICAgICAgICAgICAgICAgIE9yLCB0dXJucyBvZmYgc2VyaWFsIHdoZW4gdGhlIHZhcmlhYmxlIGlzIHNldCB3aXRoIGFuCisgICAgICAgICAgICAgICAgZW1wdHkgc3RyaW5nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TWVNMSU5VWF9TRVJJQUxfVFRZJz48ZmlsZW5hbWU+U1lTTElOVVhfU0VSSUFMX1RUWTwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBTZXRzIGFuIGFsdGVybmF0ZSAiY29uc29sZT10dHkuLi4iIGtlcm5lbCBib290IGFyZ3VtZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1zeXN0ZW1kJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnN5c3RlbWQuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnN5c3RlbWQ8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvciByZWNpcGVzCisgICAgICAgIHRoYXQgaW5zdGFsbCBzeXN0ZW1kIHVuaXQgZmlsZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIGNsYXNzIGlzIGRpc2FibGVkIHVubGVzcyB5b3UgaGF2ZSAic3lzdGVtZCIKKyAgICAgICAgaW4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVW5kZXIgdGhpcyBjbGFzcywgdGhlIHJlY2lwZSBvciBNYWtlZmlsZSAoaS5lLiB3aGF0ZXZlciB0aGUgcmVjaXBlIGlzCisgICAgICAgIGNhbGxpbmcgZHVyaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdGFzaykgaW5zdGFsbHMgdW5pdCBmaWxlcyBpbnRvCisgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUQnPjxmaWxlbmFtZT5EPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtPC9maWxlbmFtZT4uCisgICAgICAgIElmIHRoZSB1bml0IGZpbGVzIGJlaW5nIGluc3RhbGxlZCBnbyBpbnRvIHBhY2thZ2VzIG90aGVyIHRoYW4gdGhlCisgICAgICAgIG1haW4gcGFja2FnZSwgeW91IG5lZWQgdG8gc2V0CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TWVNURU1EX1BBQ0tBR0VTJz48ZmlsZW5hbWU+U1lTVEVNRF9QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBpbiB5b3VyIHJlY2lwZSB0byBpZGVudGlmeSB0aGUgcGFja2FnZXMgaW4gd2hpY2ggdGhlIGZpbGVzIHdpbGwgYmUKKyAgICAgICAgaW5zdGFsbGVkLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBZb3Ugc2hvdWxkIHNldAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1lTVEVNRF9TRVJWSUNFJz48ZmlsZW5hbWU+U1lTVEVNRF9TRVJWSUNFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRvIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGZpbGUuCisgICAgICAgIFlvdSBzaG91bGQgYWxzbyB1c2UgYSBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUgdG8gaW5kaWNhdGUgdGhlIHBhY2thZ2UKKyAgICAgICAgdG8gd2hpY2ggdGhlIHZhbHVlIGFwcGxpZXMuCisgICAgICAgIElmIHRoZSB2YWx1ZSBhcHBsaWVzIHRvIHRoZSByZWNpcGUncyBtYWluIHBhY2thZ2UsIHVzZQorICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPi4KKyAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlIGNvbm5tYW4gcmVjaXBlOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJjb25ubWFuLnNlcnZpY2UiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgU2VydmljZXMgYXJlIHNldCB1cCB0byBzdGFydCBvbiBib290IGF1dG9tYXRpY2FsbHkgdW5sZXNzCisgICAgICAgIHlvdSBoYXZlIHNldAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1lTVEVNRF9BVVRPX0VOQUJMRSc+PGZpbGVuYW1lPlNZU1RFTURfQVVUT19FTkFCTEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdG8gImRpc2FibGUiLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiA8ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+LCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzZWxlY3RpbmctYW4taW5pdGlhbGl6YXRpb24tbWFuYWdlcic+U2VsZWN0aW5nIGFuIEluaXRpYWxpemF0aW9uIE1hbmFnZXI8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdGVybWluYWwnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dGVybWluYWwuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnRlcm1pbmFsPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3Igc3RhcnRpbmcKKyAgICAgICAgYSB0ZXJtaW5hbCBzZXNzaW9uLgorICAgICAgICBUaGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU9FX1RFUk1JTkFMJz48ZmlsZW5hbWU+T0VfVEVSTUlOQUw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgY29udHJvbHMgd2hpY2ggdGVybWluYWwgZW11bGF0b3IgaXMgdXNlZCBmb3IgdGhlIHNlc3Npb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIE90aGVyIGNsYXNzZXMgdXNlIHRoZSA8ZmlsZW5hbWU+dGVybWluYWw8L2ZpbGVuYW1lPiBjbGFzcyBhbnl3aGVyZSBhCisgICAgICAgIHNlcGFyYXRlIHRlcm1pbmFsIHNlc3Npb24gbmVlZHMgdG8gYmUgc3RhcnRlZC4KKyAgICAgICAgRm9yIGV4YW1wbGUsIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYXRjaCc+PGZpbGVuYW1lPnBhdGNoPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzIGFzc3VtaW5nCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQVRDSFJFU09MVkUnPjxmaWxlbmFtZT5QQVRDSFJFU09MVkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgaXMgc2V0IHRvICJ1c2VyIiwgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWNtbDEnPjxmaWxlbmFtZT5jbWwxPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLCBhbmQgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRldnNoZWxsJz48ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MgYWxsIHVzZSB0aGUgPGZpbGVuYW1lPnRlcm1pbmFsPC9maWxlbmFtZT4gY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdGVzdGltYWdlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnRlc3RpbWFnZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dGVzdGltYWdlPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgcnVubmluZyBhdXRvbWF0ZWQKKyAgICAgICAgdGVzdHMgYWdhaW5zdCBpbWFnZXMgdXNpbmcgUUVNVSBhbmQgb24gYWN0dWFsIGhhcmR3YXJlLgorICAgICAgICBUaGUgY2xhc3MgaGFuZGxlcyBsb2FkaW5nIHRoZSB0ZXN0cyBhbmQgc3RhcnRpbmcgdGhlIGltYWdlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUbyB1c2UgdGhlIGNsYXNzLCB5b3UgbmVlZCB0byBwZXJmb3JtIHN0ZXBzIHRvIHNldCB1cCB0aGUKKyAgICAgICAgZW52aXJvbm1lbnQuCisgICAgICAgIFRoZSB0ZXN0cyBhcmUgY29tbWFuZHMgdGhhdCBydW4gb24gdGhlIHRhcmdldCBzeXN0ZW0gb3ZlcgorICAgICAgICA8ZmlsZW5hbWU+c3NoPC9maWxlbmFtZT4uCisgICAgICAgIHRoZXkgYXJlIHdyaXR0ZW4gaW4gUHl0aG9uIGFuZCBtYWtlIHVzZSBvZiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnVuaXR0ZXN0PC9maWxlbmFtZT4gbW9kdWxlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGVuYWJsZSwgcnVuLCBhbmQgY3JlYXRlIG5ldyB0ZXN0cywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGVyZm9ybWluZy1hdXRvbWF0ZWQtcnVudGltZS10ZXN0aW5nJz5QZXJmb3JtaW5nIEF1dG9tYXRlZCBSdW50aW1lIFRlc3Rpbmc8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy10ZXhpbmZvJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnRleGluZm8uYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIHNob3VsZCBiZSBpbmhlcml0ZWQgYnkgcmVjaXBlcyB3aG9zZSB1cHN0cmVhbSBwYWNrYWdlcworICAgICAgICBpbnZva2UgdGhlIDxmaWxlbmFtZT50ZXhpbmZvPC9maWxlbmFtZT4gdXRpbGl0aWVzIGF0IGJ1aWxkLXRpbWUuCisgICAgICAgIE5hdGl2ZSBhbmQgY3Jvc3MgcmVjaXBlcyBhcmUgbWFkZSB0byB1c2UgdGhlIGR1bW15IHNjcmlwdHMgcHJvdmlkZWQKKyAgICAgICAgYnkgPGZpbGVuYW1lPnRleGluZm8tZHVtbXktbmF0aXZlPC9maWxlbmFtZT4sIGZvciBpbXByb3ZlZCBwZXJmb3JtYW5jZS4KKyAgICAgICAgVGFyZ2V0IGFyY2hpdGVjdHVyZSByZWNpcGVzIHVzZSB0aGUgZ2VudWluZQorICAgICAgICBUZXhpbmZvIHV0aWxpdGllcy4KKyAgICAgICAgQnkgZGVmYXVsdCwgdGhleSB1c2UgdGhlIFRleGluZm8gdXRpbGl0aWVzIG9uIHRoZSBob3N0IHN5c3RlbS4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIFRleGluZm8gcmVjaXBlIHNoaXBwZWQgd2l0aCB0aGUgYnVpbGQKKyAgICAgICAgICAgIHN5c3RlbSwgeW91IGNhbiByZW1vdmUgInRleGluZm8tbmF0aXZlIiBmcm9tCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQVNTVU1FX1BST1ZJREVEJz48ZmlsZW5hbWU+QVNTVU1FX1BST1ZJREVEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQgbWFrZWluZm8gZnJvbQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNBTklUWV9SRVFVSVJFRF9VVElMSVRJRVMnPjxmaWxlbmFtZT5TQU5JVFlfUkVRVUlSRURfVVRJTElUSUVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdGluZGVyY2xpZW50Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnRpbmRlcmNsaWVudC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dGluZGVyY2xpZW50PC9maWxlbmFtZT4gY2xhc3Mgc3VibWl0cyBidWlsZCByZXN1bHRzIHRvCisgICAgICAgIGFuIGV4dGVybmFsIFRpbmRlcmJveCBpbnN0YW5jZS4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGlzIGNsYXNzIGlzIGN1cnJlbnRseSB1bm1haW50YWluZWQuCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy10b2FzdGVyJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnRvYXN0ZXIuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnRvYXN0ZXI8L2ZpbGVuYW1lPiBjbGFzcyBjb2xsZWN0cyBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgICBwYWNrYWdlcyBhbmQgaW1hZ2VzIGFuZCBzZW5kcyB0aGVtIGFzIGV2ZW50cyB0aGF0IHRoZSBCaXRCYWtlCisgICAgICAgIHVzZXIgaW50ZXJmYWNlIGNhbiByZWNlaXZlLgorICAgICAgICBUaGUgY2xhc3MgaXMgZW5hYmxlZCB3aGVuIHRoZSBUb2FzdGVyIHVzZXIgaW50ZXJmYWNlIGlzIHJ1bm5pbmcuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdG9vbGNoYWluLXNjcmlwdHMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dG9vbGNoYWluLXNjcmlwdHMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnRvb2xjaGFpbi1zY3JpcHRzPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgdGhlIHNjcmlwdHMKKyAgICAgICAgdXNlZCBmb3Igc2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQgZm9yIGluc3RhbGxlZCBTREtzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXR5cGVjaGVjayc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT50eXBlY2hlY2suYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnR5cGVjaGVjazwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIHN1cHBvcnQgZm9yCisgICAgICAgIHZhbGlkYXRpbmcgdGhlIHZhbHVlcyBvZiB2YXJpYWJsZXMgc2V0IGF0IHRoZSBjb25maWd1cmF0aW9uIGxldmVsCisgICAgICAgIGFnYWluc3QgdGhlaXIgZGVmaW5lZCB0eXBlcy4KKyAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYWxsb3dzIHlvdSB0byBkZWZpbmUgdGhlIHR5cGUgb2YgYQorICAgICAgICB2YXJpYWJsZSB1c2luZyB0aGUgInR5cGUiIHZhcmZsYWcuCisgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9GRUFUVVJFU1t0eXBlXSA9ICJsaXN0IgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdWJvb3QtY29uZmlnJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnVib290LWNvbmZpZy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dWJvb3QtY29uZmlnPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3IKKyAgICAgICAgVS1Cb290IGNvbmZpZ3VyYXRpb24gZm9yIGEgbWFjaGluZS4KKyAgICAgICAgU3BlY2lmeSB0aGUgbWFjaGluZSBpbiB5b3VyIHJlY2lwZSBhcyBmb2xsb3dzOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFVCT09UX0NPTkZJRyA/Pz0gJmx0O2RlZmF1bHQmZ3Q7CisgICAgIFVCT09UX0NPTkZJR1tmb29dID0gImNvbmZpZyxpbWFnZXMiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgWW91IGNhbiBhbHNvIHNwZWNpZnkgdGhlIG1hY2hpbmUgdXNpbmcgdGhpcyBtZXRob2Q6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVUJPT1RfTUFDSElORSA9ICJjb25maWciCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgU2VlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVUJPT1RfQ09ORklHJz48ZmlsZW5hbWU+VUJPT1RfQ09ORklHPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVUJPT1RfTUFDSElORSc+PGZpbGVuYW1lPlVCT09UX01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXVuaW5hdGl2ZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT51bmluYXRpdmUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBQcm92aWRlcyBhIG1lYW5zIG9mIHJldXNpbmcgPGZpbGVuYW1lPm5hdGl2ZS9jcm9zczwvZmlsZW5hbWU+IG92ZXIKKyAgICAgICAgbXVsdGlwbGUgZGlzdHJvcy4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBDdXJyZW50bHksIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgPGZpbGVuYW1lPnVuaW5hdGl2ZTwvZmlsZW5hbWU+CisgICAgICAgICAgICBjbGFzcyBpcyBleHBlcmltZW50YWwuCisgICAgICAgIDwvbm90ZT4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgY29tbWl0IG1lc3NhZ2UKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2NnaXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS9jb21taXQvP2lkPWU2NmM5NmFlOWM3YmEyMWViZDA0YTQ4MDczOTBmMDAzMTIzOGE4NWEnPmhlcmU8L3VsaW5rPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy11cGRhdGUtYWx0ZXJuYXRpdmVzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXM8L2ZpbGVuYW1lPiBjbGFzcyBoZWxwcyB0aGUKKyAgICAgICAgYWx0ZXJuYXRpdmVzIHN5c3RlbSB3aGVuIG11bHRpcGxlIHNvdXJjZXMgcHJvdmlkZSB0aGUgc2FtZSBjb21tYW5kLgorICAgICAgICBUaGlzIHNpdHVhdGlvbiBvY2N1cnMgd2hlbiBzZXZlcmFsIHByb2dyYW1zIHRoYXQgaGF2ZSB0aGUgc2FtZSBvcgorICAgICAgICBzaW1pbGFyIGZ1bmN0aW9uIGFyZSBpbnN0YWxsZWQgd2l0aCB0aGUgc2FtZSBuYW1lLgorICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5hcjwvZmlsZW5hbWU+IGNvbW1hbmQgaXMgYXZhaWxhYmxlIGZyb20gdGhlCisgICAgICAgIDxmaWxlbmFtZT5idXN5Ym94PC9maWxlbmFtZT4sIDxmaWxlbmFtZT5iaW51dGlsczwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+ZWxmdXRpbHM8L2ZpbGVuYW1lPiBwYWNrYWdlcy4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmVzPC9maWxlbmFtZT4gY2xhc3MgaGFuZGxlcworICAgICAgICByZW5hbWluZyB0aGUgYmluYXJpZXMgc28gdGhhdCBtdWx0aXBsZSBwYWNrYWdlcyBjYW4gYmUgaW5zdGFsbGVkCisgICAgICAgIHdpdGhvdXQgY29uZmxpY3RzLgorICAgICAgICBUaGUgPGZpbGVuYW1lPmFyPC9maWxlbmFtZT4gY29tbWFuZCBzdGlsbCB3b3JrcyByZWdhcmRsZXNzIG9mIHdoaWNoCisgICAgICAgIHBhY2thZ2VzIGFyZSBpbnN0YWxsZWQgb3Igc3Vic2VxdWVudGx5IHJlbW92ZWQuCisgICAgICAgIFRoZSBjbGFzcyByZW5hbWVzIHRoZSBjb25mbGljdGluZyBiaW5hcnkgaW4gZWFjaCBwYWNrYWdlIGFuZCBzeW1saW5rcworICAgICAgICB0aGUgaGlnaGVzdCBwcmlvcml0eSBiaW5hcnkgZHVyaW5nIGluc3RhbGxhdGlvbiBvciByZW1vdmFsIG9mIHBhY2thZ2VzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUbyB1c2UgdGhpcyBjbGFzcywgeW91IG5lZWQgdG8gZGVmaW5lIGEgbnVtYmVyIG9mIHZhcmlhYmxlczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItQUxURVJOQVRJVkUnPjxmaWxlbmFtZT5BTFRFUk5BVElWRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1BTFRFUk5BVElWRV9MSU5LX05BTUUnPjxmaWxlbmFtZT5BTFRFUk5BVElWRV9MSU5LX05BTUU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItQUxURVJOQVRJVkVfVEFSR0VUJz48ZmlsZW5hbWU+QUxURVJOQVRJVkVfVEFSR0VUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUFMVEVSTkFUSVZFX1BSSU9SSVRZJz48ZmlsZW5hbWU+QUxURVJOQVRJVkVfUFJJT1JJVFk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIFRoZXNlIHZhcmlhYmxlcyBsaXN0IGFsdGVybmF0aXZlIGNvbW1hbmRzIG5lZWRlZCBieSBhIHBhY2thZ2UsCisgICAgICAgIHByb3ZpZGUgcGF0aG5hbWVzIGZvciBsaW5rcywgZGVmYXVsdCBsaW5rcyBmb3IgdGFyZ2V0cywgYW5kCisgICAgICAgIHNvIGZvcnRoLgorICAgICAgICBGb3IgZGV0YWlscyBvbiBob3cgdG8gdXNlIHRoaXMgY2xhc3MsIHNlZSB0aGUgY29tbWVudHMgaW4gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpL3Bva3kvdHJlZS9tZXRhL2NsYXNzZXMvdXBkYXRlLWFsdGVybmF0aXZlcy5iYmNsYXNzJz48ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlcy5iYmNsYXNzPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmVzPC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICBkaXJlY3RseSBpbiB5b3VyIHJlY2lwZXMuCisgICAgICAgIEhvd2V2ZXIsIHRoaXMgY2xhc3Mgc2ltcGxpZmllcyB0aGluZ3MgaW4gbW9zdCBjYXNlcy4KKyAgICA8L25vdGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy11cGRhdGUtcmMuZCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT51cGRhdGUtcmMuZC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dXBkYXRlLXJjLmQ8L2ZpbGVuYW1lPiBjbGFzcyB1c2VzCisgICAgICAgIDxmaWxlbmFtZT51cGRhdGUtcmMuZDwvZmlsZW5hbWU+IHRvIHNhZmVseSBpbnN0YWxsIGFuCisgICAgICAgIGluaXRpYWxpemF0aW9uIHNjcmlwdCBvbiBiZWhhbGYgb2YgdGhlIHBhY2thZ2UuCisgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRha2VzIGNhcmUgb2YgZGV0YWlscyBzdWNoIGFzIG1ha2luZworICAgICAgICBzdXJlIHRoZSBzY3JpcHQgaXMgc3RvcHBlZCBiZWZvcmUgYSBwYWNrYWdlIGlzIHJlbW92ZWQgYW5kIHN0YXJ0ZWQgd2hlbgorICAgICAgICB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRocmVlIHZhcmlhYmxlcyBjb250cm9sIHRoaXMgY2xhc3M6CisgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU5JVFNDUklQVF9QQUNLQUdFUyc+SU5JVFNDUklQVF9QQUNLQUdFUzwvbGluaz48L2ZpbGVuYW1lPiwKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTklUU0NSSVBUX05BTUUnPklOSVRTQ1JJUFRfTkFNRTwvbGluaz48L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTklUU0NSSVBUX1BBUkFNUyc+SU5JVFNDUklQVF9QQVJBTVM8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgIFNlZSB0aGUgdmFyaWFibGUgbGlua3MgZm9yIGRldGFpbHMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdXNlcmFkZCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT51c2VyYWRkLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgdGhlIGFkZGl0aW9uIG9mIHVzZXJzCisgICAgICAgIG9yIGdyb3VwcyBmb3IgdXNhZ2UgYnkgdGhlIHBhY2thZ2Ugb24gdGhlIHRhcmdldC4KKyAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHBhY2thZ2VzIHRoYXQgY29udGFpbiBzeXN0ZW0gc2VydmljZXMgdGhhdAorICAgICAgICBzaG91bGQgYmUgcnVuIHVuZGVyIHRoZWlyIG93biB1c2VyIG9yIGdyb3VwLCB5b3UgY2FuIHVzZSB0aGlzIGNsYXNzIHRvCisgICAgICAgIGVuYWJsZSBjcmVhdGlvbiBvZiB0aGUgdXNlciBvciBncm91cC4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUuYmI8L2ZpbGVuYW1lPgorICAgICAgICByZWNpcGUgaW4gdGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICBwcm92aWRlcyBhIHNpbXBsZSBleGFtcGxlIHRoYXQgc2hvd3MgaG93IHRvIGFkZCB0aHJlZQorICAgICAgICB1c2VycyBhbmQgZ3JvdXBzIHRvIHR3byBwYWNrYWdlcy4KKyAgICAgICAgU2VlIHRoZSA8ZmlsZW5hbWU+dXNlcmFkZC1leGFtcGxlLmJiPC9maWxlbmFtZT4gcmVjaXBlIGZvciBtb3JlCisgICAgICAgIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhpcyBjbGFzcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSQUREX1BBQ0tBR0VTJz48ZmlsZW5hbWU+VVNFUkFERF9QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfUEFSQU0nPjxmaWxlbmFtZT5VU0VSQUREX1BBUkFNPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR1JPVVBBRERfUEFSQU0nPjxmaWxlbmFtZT5HUk9VUEFERF9QQVJBTTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HUk9VUE1FTVNfUEFSQU0nPjxmaWxlbmFtZT5HUk9VUE1FTVNfUEFSQU08L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXVzZXJhZGQtc3RhdGljaWRzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnVzZXJhZGQtc3RhdGljaWRzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT51c2VyYWRkLXN0YXRpY2lkczwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIHRoZSBhZGRpdGlvbgorICAgICAgICBvZiB1c2VycyBvciBncm91cHMgdGhhdCBoYXZlIHN0YXRpYyB1c2VyIGlkZW50aWZpY2F0aW9uCisgICAgICAgICg8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4pIGFuZCBncm91cCBpZGVudGlmaWNhdGlvbgorICAgICAgICAoPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+KSB2YWx1ZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGZvciBhc3NpZ25pbmcKKyAgICAgICAgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4gdmFsdWVzIHdoZW4KKyAgICAgICAgcGFja2FnZXMgYWRkIHVzZXJzIGFuZCBncm91cHMgZHVyaW5nIHBhY2thZ2UgaW5zdGFsbCB0aW1lIGlzIHRvCisgICAgICAgIGFkZCB0aGVtIGR5bmFtaWNhbGx5LgorICAgICAgICBUaGlzIHdvcmtzIGZpbmUgZm9yIHByb2dyYW1zIHRoYXQgZG8gbm90IGNhcmUgd2hhdCB0aGUgdmFsdWVzIG9mIHRoZQorICAgICAgICByZXN1bHRpbmcgdXNlcnMgYW5kIGdyb3VwcyBiZWNvbWUuCisgICAgICAgIEluIHRoZXNlIGNhc2VzLCB0aGUgb3JkZXIgb2YgdGhlIGluc3RhbGxhdGlvbiBkZXRlcm1pbmVzIHRoZSBmaW5hbAorICAgICAgICA8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPiB2YWx1ZXMuCisgICAgICAgIEhvd2V2ZXIsIGlmIG5vbi1kZXRlcm1pbmlzdGljCisgICAgICAgIDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+IHZhbHVlcyBhcmUgYQorICAgICAgICBwcm9ibGVtLCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0LCBkeW5hbWljIGFwcGxpY2F0aW9uIG9mIHRoZXNlCisgICAgICAgIHZhbHVlcyBieSBzZXR0aW5nIHN0YXRpYyB2YWx1ZXMuCisgICAgICAgIFdoZW4geW91IHNldCBzdGF0aWMgdmFsdWVzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBsb29rcyBpbgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+IGZvcgorICAgICAgICA8ZmlsZW5hbWU+ZmlsZXMvcGFzc3dkPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5maWxlcy9ncm91cDwvZmlsZW5hbWU+CisgICAgICAgIGZpbGVzIGZvciB0aGUgdmFsdWVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUbyB1c2Ugc3RhdGljIDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+CisgICAgICAgIHZhbHVlcywgeW91IG5lZWQgdG8gc2V0IHNvbWUgdmFyaWFibGVzLgorICAgICAgICBTZWUgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSQURERVhURU5TSU9OJz48ZmlsZW5hbWU+VVNFUkFEREVYVEVOU0lPTjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfVUlEX1RBQkxFUyc+PGZpbGVuYW1lPlVTRVJBRERfVUlEX1RBQkxFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfR0lEX1RBQkxFUyc+PGZpbGVuYW1lPlVTRVJBRERfR0lEX1RBQkxFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSQUREX0VSUk9SX0RZTkFNSUMnPjxmaWxlbmFtZT5VU0VSQUREX0VSUk9SX0RZTkFNSUM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzLgorICAgICAgICBZb3UgY2FuIGFsc28gc2VlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy11c2VyYWRkJz48ZmlsZW5hbWU+dXNlcmFkZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT48dGl0bGU+Tm90ZXM8L3RpdGxlPgorICAgICAgICBZb3UgZG8gbm90IHVzZSB0aGlzIGNsYXNzIGRpcmVjdGx5LgorICAgICAgICBZb3UgZWl0aGVyIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBjbGFzcyBieSBzZXR0aW5nIHRoZQorICAgICAgICA8ZmlsZW5hbWU+VVNFUkFEREVYVEVOU0lPTjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICBJZiB5b3UgZW5hYmxlIG9yIGRpc2FibGUgdGhlIGNsYXNzIGluIGEgY29uZmlndXJlZCBzeXN0ZW0sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgbWlnaHQgY29udGFpbiBpbmNvcnJlY3QgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4gdmFsdWVzLgorICAgICAgICBEZWxldGluZyB0aGUgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICB3aWxsIGNvcnJlY3QgdGhpcyBjb25kaXRpb24uCisgICAgPC9ub3RlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdXRpbGl0eS10YXNrcyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT51dGlsaXR5LXRhc2tzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT51dGlsaXR5LXRhc2tzPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3IKKyAgICAgICAgdmFyaW91cyAidXRpbGl0eSIgdHlwZSB0YXNrcyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIGFsbCByZWNpcGVzLAorICAgICAgICBzdWNoIGFzCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jbGVhbic+PGZpbGVuYW1lPmRvX2NsZWFuPC9maWxlbmFtZT48L2xpbms+IGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtbGlzdHRhc2tzJz48ZmlsZW5hbWU+ZG9fbGlzdHRhc2tzPC9maWxlbmFtZT48L2xpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBiZWNhdXNlIGl0IGlzIGluaGVyaXRlZCBieQorICAgICAgICB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYmFzZSc+PGZpbGVuYW1lPmJhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdXRpbHMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dXRpbHMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnV0aWxzPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgc29tZSB1c2VmdWwgUHl0aG9uCisgICAgICAgIGZ1bmN0aW9ucyB0aGF0IGFyZSB0eXBpY2FsbHkgdXNlZCBpbiBpbmxpbmUgUHl0aG9uIGV4cHJlc3Npb25zCisgICAgICAgIChlLmcuIDxmaWxlbmFtZT4ke0AuLi59PC9maWxlbmFtZT4pLgorICAgICAgICBPbmUgZXhhbXBsZSB1c2UgaXMgZm9yIDxmaWxlbmFtZT5iYi51dGlscy5jb250YWlucygpPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgaXQgaXMgaW5oZXJpdGVkIGJ5IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iYXNlJz48ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy12YWxhJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnZhbGEuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnZhbGE8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyByZWNpcGVzIHRoYXQgbmVlZCB0bworICAgICAgICBidWlsZCBzb2Z0d2FyZSB3cml0dGVuIHVzaW5nIHRoZSBWYWxhIHByb2dyYW1taW5nIGxhbmd1YWdlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXdhZic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT53YWYuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPndhZjwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIHJlY2lwZXMgdGhhdCBuZWVkIHRvIGJ1aWxkCisgICAgICAgIHNvZnR3YXJlIHRoYXQgdXNlcyB0aGUgV2FmIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgdG8gc3BlY2lmeSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBiZSBwYXNzZWQgb24KKyAgICAgICAgdGhlIFdhZiBjb21tYW5kIGxpbmUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8IS0tIFVuZG9jdW1lbnRlZCBjbGFzc2VzIGFyZToKKyAgICAgICAgaW1hZ2UtZW1wdHkuYmJjbGFzcyAocG9zc2libHkgYmVpbmcgZHJvcHBlZCkKKyAgICAgICAgbWlncmF0ZV9sb2NhbGNvdW50LmJiY2xhc3MgKHN0aWxsIG5lZWQgYSBkZXNjcmlwdGlvbikKKy0tPgorCisKKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWZlYXR1cmVzLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1mZWF0dXJlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk4ZTBhMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1mZWF0dXJlcy54bWwKQEAgLTAsMCArMSw0NDMgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdyZWYtZmVhdHVyZXMnPgorICAgIDx0aXRsZT5GZWF0dXJlczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjaGFwdGVyIHByb3ZpZGVzIGEgcmVmZXJlbmNlIG9mIHNoaXBwZWQgbWFjaGluZSBhbmQgZGlzdHJvIGZlYXR1cmVzCisgICAgICAgIHlvdSBjYW4gaW5jbHVkZSBhcyBwYXJ0IG9mIHlvdXIgaW1hZ2UsIGEgcmVmZXJlbmNlIG9uIGltYWdlIGZlYXR1cmVzIHlvdSBjYW4KKyAgICAgICAgc2VsZWN0LCBhbmQgYSByZWZlcmVuY2Ugb24gZmVhdHVyZSBiYWNrZmlsbGluZy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRmVhdHVyZXMgcHJvdmlkZSBhIG1lY2hhbmlzbSBmb3Igd29ya2luZyBvdXQgd2hpY2ggcGFja2FnZXMKKyAgICAgICAgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgaW1hZ2VzLgorICAgICAgICBEaXN0cmlidXRpb25zIGNhbiBzZWxlY3Qgd2hpY2ggZmVhdHVyZXMgdGhleSB3YW50IHRvIHN1cHBvcnQgdGhyb3VnaCB0aGUKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPkRJU1RST19GRUFUVVJFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICB2YXJpYWJsZSwgd2hpY2ggaXMgc2V0IG9yIGFwcGVuZGVkIHRvIGluIGEgZGlzdHJpYnV0aW9uJ3MgY29uZmlndXJhdGlvbiBmaWxlIHN1Y2ggYXMKKyAgICAgICAgPGZpbGVuYW1lPnBva3kuY29uZjwvZmlsZW5hbWU+LAorICAgICAgICA8ZmlsZW5hbWU+cG9reS10aW55LmNvbmY8L2ZpbGVuYW1lPiwKKyAgICAgICAgPGZpbGVuYW1lPnBva3ktbHNiLmNvbmY8L2ZpbGVuYW1lPiBhbmQgc28gZm9ydGguCisgICAgICAgIE1hY2hpbmUgZmVhdHVyZXMgYXJlIHNldCBpbiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0ZFQVRVUkVTJz5NQUNISU5FX0ZFQVRVUkVTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgIHZhcmlhYmxlLCB3aGljaCBpcyBzZXQgaW4gdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlIGFuZAorICAgICAgICBzcGVjaWZpZXMgdGhlIGhhcmR3YXJlIGZlYXR1cmVzIGZvciBhIGdpdmVuIG1hY2hpbmUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZXNlIHR3byB2YXJpYWJsZXMgY29tYmluZSB0byB3b3JrIG91dCB3aGljaCBrZXJuZWwgbW9kdWxlcywKKyAgICAgICAgdXRpbGl0aWVzLCBhbmQgb3RoZXIgcGFja2FnZXMgdG8gaW5jbHVkZS4KKyAgICAgICAgQSBnaXZlbiBkaXN0cmlidXRpb24gY2FuIHN1cHBvcnQgYSBzZWxlY3RlZCBzdWJzZXQgb2YgZmVhdHVyZXMgc28gc29tZSBtYWNoaW5lIGZlYXR1cmVzIG1pZ2h0IG5vdAorICAgICAgICBiZSBpbmNsdWRlZCBpZiB0aGUgZGlzdHJpYnV0aW9uIGl0c2VsZiBkb2VzIG5vdCBzdXBwb3J0IHRoZW0uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIE9uZSBtZXRob2QgeW91IGNhbiB1c2UgdG8gZGV0ZXJtaW5lIHdoaWNoIHJlY2lwZXMgYXJlIGNoZWNraW5nIHRvIHNlZSBpZiBhCisgICAgICAgIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBjb250YWluZWQgb3Igbm90IGlzIHRvIDxmaWxlbmFtZT5ncmVwPC9maWxlbmFtZT4gdGhyb3VnaAorICAgICAgICB0aGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgZm9yIHRoZSBmZWF0dXJlLgorICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBkaXNjb3ZlcnMgdGhlIHJlY2lwZXMgd2hvc2UgYnVpbGQgaXMgcG90ZW50aWFsbHkKKyAgICAgICAgY2hhbmdlZCBiYXNlZCBvbiBhIGdpdmVuIGZlYXR1cmU6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCBwb2t5CisgICAgICQgZ2l0IGdyZXAgJ2NvbnRhaW5zLipNQUNISU5FX0ZFQVRVUkVTLio8cmVwbGFjZWFibGU+ZmVhdHVyZTwvcmVwbGFjZWFibGU+JworICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi1mZWF0dXJlcy1tYWNoaW5lJz4KKyAgICAgICAgPHRpdGxlPk1hY2hpbmUgRmVhdHVyZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGl0ZW1zIGJlbG93IGFyZSBmZWF0dXJlcyB5b3UgY2FuIHVzZSB3aXRoCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9GRUFUVVJFUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICBGZWF0dXJlcyBkbyBub3QgaGF2ZSBhIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2UgdG8gcGFja2FnZXMsIGFuZCB0aGV5IGNhbgorICAgICAgICAgICAgZ28gYmV5b25kIHNpbXBseSBjb250cm9sbGluZyB0aGUgaW5zdGFsbGF0aW9uIG9mIGEgcGFja2FnZSBvciBwYWNrYWdlcy4KKyAgICAgICAgICAgIFNvbWV0aW1lcyBhIGZlYXR1cmUgY2FuIGluZmx1ZW5jZSBob3cgY2VydGFpbiByZWNpcGVzIGFyZSBidWlsdC4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBhIGZlYXR1cmUgbWlnaHQgZGV0ZXJtaW5lIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyZSBvcHRpb24KKyAgICAgICAgICAgIGlzIHNwZWNpZmllZCB3aXRoaW4gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIGZvciBhIHBhcnRpY3VsYXIgcmVjaXBlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGZlYXR1cmUgbGlzdCBvbmx5IHJlcHJlc2VudHMgZmVhdHVyZXMgYXMgc2hpcHBlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IG1ldGFkYXRhOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmFjcGk6PC9lbXBoYXNpcz4gSGFyZHdhcmUgaGFzIEFDUEkgKHg4Ni94ODZfNjQgb25seSkKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5hbHNhOjwvZW1waGFzaXM+IEhhcmR3YXJlIGhhcyBBTFNBIGF1ZGlvIGRyaXZlcnMKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5hcG06PC9lbXBoYXNpcz4gSGFyZHdhcmUgdXNlcyBBUE0gKG9yIEFQTSBlbXVsYXRpb24pCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ymx1ZXRvb3RoOjwvZW1waGFzaXM+IEhhcmR3YXJlIGhhcyBpbnRlZ3JhdGVkIEJUCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZWZpOjwvZW1waGFzaXM+IFN1cHBvcnQgZm9yIGJvb3RpbmcgdGhyb3VnaCBFRkkKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5leHQyOjwvZW1waGFzaXM+IEhhcmR3YXJlIEhERCBvciBNaWNyb2RyaXZlCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+aXJkYTo8L2VtcGhhc2lzPiBIYXJkd2FyZSBoYXMgSXJEQSBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+a2V5Ym9hcmQ6PC9lbXBoYXNpcz4gSGFyZHdhcmUgaGFzIGEga2V5Ym9hcmQKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wY2Jpb3M6PC9lbXBoYXNpcz4gU3VwcG9ydCBmb3IgYm9vdGluZyB0aHJvdWdoIEJJT1MKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wY2k6PC9lbXBoYXNpcz4gSGFyZHdhcmUgaGFzIGEgUENJIGJ1cworICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnBjbWNpYTo8L2VtcGhhc2lzPiBIYXJkd2FyZSBoYXMgUENNQ0lBIG9yIENvbXBhY3RGbGFzaCBzb2NrZXRzCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cGhvbmU6PC9lbXBoYXNpcz4gTW9iaWxlIHBob25lICh2b2ljZSkgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnF2Z2E6PC9lbXBoYXNpcz4gTWFjaGluZSBoYXMgYSBRVkdBICgzMjB4MjQwKSBkaXNwbGF5CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cnRjOjwvZW1waGFzaXM+IE1hY2hpbmUgaGFzIGEgUmVhbC1UaW1lIENsb2NrCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c2NyZWVuOjwvZW1waGFzaXM+IEhhcmR3YXJlIGhhcyBhIHNjcmVlbgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnNlcmlhbDo8L2VtcGhhc2lzPiBIYXJkd2FyZSBoYXMgc2VyaWFsIHN1cHBvcnQgKHVzdWFsbHkgUlMyMzIpCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dG91Y2hzY3JlZW46PC9lbXBoYXNpcz4gSGFyZHdhcmUgaGFzIGEgdG91Y2hzY3JlZW4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz51c2JnYWRnZXQ6PC9lbXBoYXNpcz4gSGFyZHdhcmUgaXMgVVNCIGdhZGdldCBkZXZpY2UgY2FwYWJsZQorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnVzYmhvc3Q6PC9lbXBoYXNpcz4gSGFyZHdhcmUgaXMgVVNCIEhvc3QgY2FwYWJsZQorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnZmYXQ6PC9lbXBoYXNpcz4gRkFUIGZpbGUgc3lzdGVtIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz53aWZpOjwvZW1waGFzaXM+IEhhcmR3YXJlIGhhcyBpbnRlZ3JhdGVkIFdpRmkKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtZmVhdHVyZXMtZGlzdHJvJz4KKyAgICAgICAgPHRpdGxlPkRpc3RybyBGZWF0dXJlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgaXRlbXMgYmVsb3cgYXJlIGZlYXR1cmVzIHlvdSBjYW4gdXNlIHdpdGgKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRvIGVuYWJsZSBmZWF0dXJlcyBhY3Jvc3MgeW91ciBkaXN0cmlidXRpb24uCisgICAgICAgICAgICBGZWF0dXJlcyBkbyBub3QgaGF2ZSBhIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2UgdG8gcGFja2FnZXMsCisgICAgICAgICAgICBhbmQgdGhleSBjYW4gZ28gYmV5b25kIHNpbXBseSBjb250cm9sbGluZyB0aGUgaW5zdGFsbGF0aW9uIG9mIGEKKyAgICAgICAgICAgIHBhY2thZ2Ugb3IgcGFja2FnZXMuCisgICAgICAgICAgICBJbiBtb3N0IGNhc2VzLCB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBhIGZlYXR1cmUgdHJhbnNsYXRlcyB0bworICAgICAgICAgICAgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbiBzdXBwbGllZCB0byB0aGUgY29uZmlndXJlIHNjcmlwdCBkdXJpbmcgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIGZvciB0aGUgcmVjaXBlcyB0aGF0IG9wdGlvbmFsbHkKKyAgICAgICAgICAgIHN1cHBvcnQgdGhlIGZlYXR1cmUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvbWUgZGlzdHJvIGZlYXR1cmVzIGFyZSBhbHNvIG1hY2hpbmUgZmVhdHVyZXMuCisgICAgICAgICAgICBUaGVzZSBzZWxlY3QgZmVhdHVyZXMgbWFrZSBzZW5zZSB0byBiZSBjb250cm9sbGVkIGJvdGggYXQKKyAgICAgICAgICAgIHRoZSBtYWNoaW5lIGFuZCBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBsZXZlbC4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DT01CSU5FRF9GRUFUVVJFUyc+PGZpbGVuYW1lPkNPTUJJTkVEX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgbGlzdCBvbmx5IHJlcHJlc2VudHMgZmVhdHVyZXMgYXMgc2hpcHBlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IG1ldGFkYXRhOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmFsc2E6PC9lbXBoYXNpcz4gSW5jbHVkZSBBTFNBIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgKE9TUyBjb21wYXRpYmlsaXR5IGtlcm5lbCBtb2R1bGVzIGluc3RhbGxlZCBpZiBhdmFpbGFibGUpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmJsdWV0b290aDo8L2VtcGhhc2lzPiBJbmNsdWRlCisgICAgICAgICAgICAgICAgICAgIGJsdWV0b290aCBzdXBwb3J0IChpbnRlZ3JhdGVkIEJUIG9ubHkpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Y3JhbWZzOjwvZW1waGFzaXM+IEluY2x1ZGUgQ3JhbUZTCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kaXJlY3RmYjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbmNsdWRlIERpcmVjdEZCIHN1cHBvcnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZXh0Mjo8L2VtcGhhc2lzPiBJbmNsdWRlIHRvb2xzIGZvcgorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0aW5nIGZvciBkZXZpY2VzIHdpdGggaW50ZXJuYWwgSEREL01pY3JvZHJpdmUgZm9yCisgICAgICAgICAgICAgICAgICAgIHN0b3JpbmcgZmlsZXMgKGluc3RlYWQgb2YgRmxhc2ggb25seSBkZXZpY2VzKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5pcHNlYzo8L2VtcGhhc2lzPiBJbmNsdWRlIElQU2VjCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5pcHY2OjwvZW1waGFzaXM+IEluY2x1ZGUgSVB2NiBzdXBwb3J0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmlyZGE6PC9lbXBoYXNpcz4gSW5jbHVkZSBJckRBIHN1cHBvcnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+a2V5Ym9hcmQ6PC9lbXBoYXNpcz4gSW5jbHVkZSBrZXlib2FyZAorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IChlLmcuIGtleW1hcHMgd2lsbCBiZSBsb2FkZWQgZHVyaW5nIGJvb3QpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPm5mczo8L2VtcGhhc2lzPiBJbmNsdWRlIE5GUyBjbGllbnQKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCAoZm9yIG1vdW50aW5nIE5GUyBleHBvcnRzIG9uIGRldmljZSkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+b3BlbmdsOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgdGhlIE9wZW4gR3JhcGhpY3MgTGlicmFyeSwgd2hpY2ggaXMgYQorICAgICAgICAgICAgICAgICAgICBjcm9zcy1sYW5ndWFnZSwgbXVsdGktcGxhdGZvcm0gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIHVzZWQgZm9yIHJlbmRlcmluZyB0d28gYW5kIHRocmVlLWRpbWVuc2lvbmFsCisgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cGNpOjwvZW1waGFzaXM+IEluY2x1ZGUgUENJIGJ1cworICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cGNtY2lhOjwvZW1waGFzaXM+IEluY2x1ZGUKKyAgICAgICAgICAgICAgICAgICAgUENNQ0lBL0NvbXBhY3RGbGFzaCBzdXBwb3J0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cHBwOjwvZW1waGFzaXM+IEluY2x1ZGUgUFBQIGRpYWx1cAorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cHRlc3Q6PC9lbXBoYXNpcz4gRW5hYmxlcyBidWlsZGluZworICAgICAgICAgICAgICAgICAgICB0aGUgcGFja2FnZSB0ZXN0cyB3aGVyZSBzdXBwb3J0ZWQgYnkgaW5kaXZpZHVhbCByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYWNrYWdlIHRlc3RzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN0ZXN0aW5nLXBhY2thZ2VzLXdpdGgtcHRlc3QnPlRlc3RpbmcgUGFja2FnZXMgV2l0aCBwdGVzdDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zbWJmczo8L2VtcGhhc2lzPiBJbmNsdWRlIFNNQiBuZXR3b3JrcworICAgICAgICAgICAgICAgICAgICBjbGllbnQgc3VwcG9ydCAoZm9yIG1vdW50aW5nIFNhbWJhL01pY3Jvc29mdCBXaW5kb3dzIHNoYXJlcworICAgICAgICAgICAgICAgICAgICBvbiBkZXZpY2UpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c3lzdGVtZDo8L2VtcGhhc2lzPiBJbmNsdWRlIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgPGZpbGVuYW1lPmluaXQ8L2ZpbGVuYW1lPiBtYW5hZ2VyLCB3aGljaCBpcyBhIGZ1bGwKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgb2YgZm9yIDxmaWxlbmFtZT5pbml0PC9maWxlbmFtZT4gd2l0aCBwYXJhbGxlbAorICAgICAgICAgICAgICAgICAgICBzdGFydGluZyBvZiBzZXJ2aWNlcywgcmVkdWNlZCBzaGVsbCBvdmVyaGVhZCwgYW5kIG90aGVyCisgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIDxmaWxlbmFtZT5pbml0PC9maWxlbmFtZT4gbWFuYWdlciBpcyB1c2VkIGJ5IG1hbnkKKyAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9ucy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnVzYmdhZGdldDo8L2VtcGhhc2lzPiBJbmNsdWRlIFVTQgorICAgICAgICAgICAgICAgICAgICBHYWRnZXQgRGV2aWNlIHN1cHBvcnQgKGZvciBVU0IgbmV0d29ya2luZy9zZXJpYWwvc3RvcmFnZSkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dXNiaG9zdDo8L2VtcGhhc2lzPiBJbmNsdWRlIFVTQiBIb3N0CisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgKGFsbG93cyB0byBjb25uZWN0IGV4dGVybmFsIGtleWJvYXJkLCBtb3VzZSwKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSwgbmV0d29yayBldGMpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+d2F5bGFuZDo8L2VtcGhhc2lzPiBJbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgICAgICBXYXlsYW5kIGRpc3BsYXkgc2VydmVyIHByb3RvY29sIGFuZCB0aGUgbGlicmFyeSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRzIGl0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+d2lmaTo8L2VtcGhhc2lzPiBJbmNsdWRlIFdpRmkgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAoaW50ZWdyYXRlZCBvbmx5KS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPngxMTo8L2VtcGhhc2lzPiBJbmNsdWRlIHRoZSBYIHNlcnZlcgorICAgICAgICAgICAgICAgICAgICBhbmQgbGlicmFyaWVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLWZlYXR1cmVzLWltYWdlJz4KKyAgICAgICAgPHRpdGxlPkltYWdlIEZlYXR1cmVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBjb250ZW50cyBvZiBpbWFnZXMgZ2VuZXJhdGVkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICBjYW4gYmUgY29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPkVYVFJBX0lNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZXMgdGhhdCB5b3UgdHlwaWNhbGx5IGNvbmZpZ3VyZSBpbiB5b3VyIGltYWdlIHJlY2lwZXMuCisgICAgICAgICAgICBUaHJvdWdoIHRoZXNlIHZhcmlhYmxlcywgeW91IGNhbiBhZGQgc2V2ZXJhbCBkaWZmZXJlbnQKKyAgICAgICAgICAgIHByZWRlZmluZWQgcGFja2FnZXMgc3VjaCBhcyBkZXZlbG9wbWVudCB1dGlsaXRpZXMgb3IgcGFja2FnZXMgd2l0aAorICAgICAgICAgICAgZGVidWcgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGludmVzdGlnYXRlIGFwcGxpY2F0aW9uIHByb2JsZW1zIG9yCisgICAgICAgICAgICBwcm9maWxlIGFwcGxpY2F0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpbWFnZSBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIGZvciBhbGwgaW1hZ2VzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmFsbG93LWVtcHR5LXBhc3N3b3JkOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEFsbG93cyBEcm9wYmVhciBhbmQgT3BlblNTSCB0byBhY2NlcHQgcm9vdCBsb2dpbnMKKyAgICAgICAgICAgICAgICAgICAgYW5kIGxvZ2lucyBmcm9tIGFjY291bnRzIGhhdmluZyBhbiBlbXB0eSBwYXNzd29yZCBzdHJpbmcuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZGJnLXBrZ3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgZGVidWcgc3ltYm9sIHBhY2thZ2VzIGZvciBhbGwgcGFja2FnZXMgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgIGluIGEgZ2l2ZW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZGVidWctdHdlYWtzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE1ha2VzIGFuIGltYWdlIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCAoZS5nLgorICAgICAgICAgICAgICAgICAgICBhbGxvd3Mgcm9vdCBsb2dpbnMgd2l0aG91dCBwYXNzd29yZHMgYW5kIGVuYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgcG9zdC1pbnN0YWxsYXRpb24gbG9nZ2luZykuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgJ2FsbG93LWVtcHR5LXBhc3N3b3JkJywgJ2VtcHR5LXJvb3QtcGFzc3dvcmQnLAorICAgICAgICAgICAgICAgICAgICBhbmQgJ3Bvc3QtaW5zdGFsbC1sb2dnaW5nJyBmZWF0dXJlcyBpbiB0aGlzIGxpc3QgZm9yCisgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZGV2LXBrZ3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgZGV2ZWxvcG1lbnQgcGFja2FnZXMgKGhlYWRlcnMgYW5kIGV4dHJhIGxpYnJhcnkKKyAgICAgICAgICAgICAgICAgICAgbGlua3MpIGZvciBhbGwgcGFja2FnZXMgaW5zdGFsbGVkIGluIGEgZ2l2ZW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZG9jLXBrZ3M6PC9lbXBoYXNpcz4gSW5zdGFsbHMKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiBwYWNrYWdlcyBmb3IgYWxsIHBhY2thZ2VzIGluc3RhbGxlZCBpbiBhCisgICAgICAgICAgICAgICAgICAgIGdpdmVuIGltYWdlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmVtcHR5LXJvb3QtcGFzc3dvcmQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU2V0cyB0aGUgcm9vdCBwYXNzd29yZCB0byBhbiBlbXB0eSBzdHJpbmcsIHdoaWNoIGFsbG93cworICAgICAgICAgICAgICAgICAgICBsb2dpbnMgd2l0aCBhIGJsYW5rIHBhc3N3b3JkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnBhY2thZ2UtbWFuYWdlbWVudDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyBwYWNrYWdlIG1hbmFnZW1lbnQgdG9vbHMgYW5kIHByZXNlcnZlcyB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyIGRhdGFiYXNlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnBvc3QtaW5zdGFsbC1sb2dnaW5nOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEVuYWJsZXMgbG9nZ2luZyBwb3N0aW5zdGFsbCBzY3JpcHQgcnVucyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPi92YXIvbG9nL3Bvc3RpbnN0YWxsLmxvZzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgb24gZmlyc3QgYm9vdCBvZiB0aGUgaW1hZ2Ugb24gdGhlIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cHRlc3QtcGtnczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyBwdGVzdCBwYWNrYWdlcyBmb3IgYWxsIHB0ZXN0LWVuYWJsZWQgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5yZWFkLW9ubHktcm9vdGZzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZXMgYW4gaW1hZ2Ugd2hvc2Ugcm9vdCBmaWxlc3lzdGVtIGlzIHJlYWQtb25seS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctYS1yZWFkLW9ubHktcm9vdC1maWxlc3lzdGVtJz5DcmVhdGluZyBhIFJlYWQtT25seSBSb290IEZpbGVzeXN0ZW08L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c3BsYXNoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEVuYWJsZXMgc2hvd2luZyBhIHNwbGFzaCBzY3JlZW4gZHVyaW5nIGJvb3QuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgc2NyZWVuIGlzIHByb3ZpZGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wc3BsYXNoPC9maWxlbmFtZT4sIHdoaWNoIGRvZXMgYWxsb3cKKyAgICAgICAgICAgICAgICAgICAgY3VzdG9taXphdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHByZWZlciB0byB1c2UgYW4gYWx0ZXJuYXRpdmUgc3BsYXNoIHNjcmVlbiBwYWNrYWdlLAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGRvIHNvIGJ5IHNldHRpbmcgdGhlIDxmaWxlbmFtZT5TUExBU0g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBhIGRpZmZlcmVudCBwYWNrYWdlIG5hbWUgKG9yIG5hbWVzKSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGltYWdlIHJlY2lwZSBvciBhdCB0aGUgZGlzdHJvIGNvbmZpZ3VyYXRpb24gbGV2ZWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c3RhdGljZGV2LXBrZ3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgc3RhdGljIGRldmVsb3BtZW50IHBhY2thZ2VzLCB3aGljaCBhcmUKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljIGxpYnJhcmllcyAoaS5lLiA8ZmlsZW5hbWU+Ki5hPC9maWxlbmFtZT4gZmlsZXMpLCBmb3IKKyAgICAgICAgICAgICAgICAgICAgYWxsIHBhY2thZ2VzIGluc3RhbGxlZCBpbiBhIGdpdmVuIGltYWdlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTb21lIGltYWdlIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgb25seSB3aGVuIHlvdSBpbmhlcml0IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtY29yZS1pbWFnZSc+PGZpbGVuYW1lPmNvcmUtaW1hZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgVGhlIGN1cnJlbnQgbGlzdCBvZiB0aGVzZSB2YWxpZCBmZWF0dXJlcyBpcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmVjbGlwc2UtZGVidWc6PC9lbXBoYXNpcz4gUHJvdmlkZXMKKyAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSByZW1vdGUgZGVidWdnaW5nIHN1cHBvcnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+aHdjb2RlY3M6PC9lbXBoYXNpcz4gSW5zdGFsbHMKKyAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGNvZGVjcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5uZnMtc2VydmVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIGFuIE5GUyBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cXQ0LXBrZ3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydHMgUXQ0L1gxMSBhbmQgZGVtbyBhcHBsaWNhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c3NoLXNlcnZlci1kcm9wYmVhcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyB0aGUgRHJvcGJlYXIgbWluaW1hbCBTU0ggc2VydmVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnNzaC1zZXJ2ZXItb3BlbnNzaDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyB0aGUgT3BlblNTSCBTU0ggc2VydmVyLCB3aGljaCBpcyBtb3JlCisgICAgICAgICAgICAgICAgICAgIGZ1bGwtZmVhdHVyZWQgdGhhbiBEcm9wYmVhci4KKyAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGlmIGJvdGggdGhlIE9wZW5TU0ggU1NIIHNlcnZlciBhbmQgdGhlIERyb3BiZWFyCisgICAgICAgICAgICAgICAgICAgIG1pbmltYWwgU1NIIHNlcnZlciBhcmUgcHJlc2VudCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiwgdGhlbiBPcGVuU1NIIHdpbGwgdGFrZQorICAgICAgICAgICAgICAgICAgICBwcmVjZWRlbmNlIGFuZCBEcm9wYmVhciB3aWxsIG5vdCBiZSBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dG9vbHMtZGVidWc6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN0cmFjZTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Z2RiPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBHREIsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnJz5EZWJ1Z2dpbmcgV2l0aCB0aGUgR05VIFByb2plY3QgRGVidWdnZXIgKEdEQikgUmVtb3RlbHk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0cmFjaW5nIGFuZCBwcm9maWxpbmcsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUFJPRl9VUkw7Jz5Zb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz50b29scy1wcm9maWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIHByb2ZpbGluZyB0b29scyBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcHJvZmlsZTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZXhtYXA8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5MVFRuZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvbiB1c2VyLXNwYWNlIHRvb2xzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2VyLXNwYWNlLXRvb2xzJz5Vc2VyLVNwYWNlIFRvb2xzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MKKyAgICAgICAgICAgICAgICAgICAgR3VpZGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dG9vbHMtc2RrOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIGEgZnVsbCBTREsgdGhhdCBydW5zIG9uIHRoZSBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dG9vbHMtdGVzdGFwcHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgZGV2aWNlIHRlc3RpbmcgdG9vbHMgKGUuZy4gdG91Y2hzY3JlZW4gZGVidWdnaW5nKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz54MTE6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgdGhlIFggc2VydmVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPngxMS1iYXNlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIHRoZSBYIHNlcnZlciB3aXRoIGEgbWluaW1hbCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz54MTEtc2F0bzo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyB0aGUgT3BlbmVkSGFuZCBTYXRvIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLWZlYXR1cmVzLWJhY2tmaWxsJz4KKyAgICAgICAgPHRpdGxlPkZlYXR1cmUgQmFja2ZpbGxpbmc8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU29tZXRpbWVzIGl0IGlzIG5lY2Vzc2FyeSBpbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBleHRlbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0ZFQVRVUkVTJz48ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgb3IgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdG8gY29udHJvbCBmdW5jdGlvbmFsaXR5IHRoYXQgd2FzIHByZXZpb3VzbHkgZW5hYmxlZCBhbmQgbm90IGFibGUKKyAgICAgICAgICAgIHRvIGJlIGRpc2FibGVkLgorICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB3ZSBuZWVkIHRvIGFkZCBhbgorICAgICAgICAgICAgYWRkaXRpb25hbCBmZWF0dXJlIGl0ZW0gdG8gYXBwZWFyIGluIG9uZSBvZiB0aGVzZSB2YXJpYWJsZXMsCisgICAgICAgICAgICBidXQgd2UgZG8gbm90IHdhbnQgdG8gZm9yY2UgZGV2ZWxvcGVycyB3aG8gaGF2ZSBleGlzdGluZyB2YWx1ZXMKKyAgICAgICAgICAgIG9mIHRoZSB2YXJpYWJsZXMgaW4gdGhlaXIgY29uZmlndXJhdGlvbiB0byBhZGQgdGhlIG5ldyBmZWF0dXJlCisgICAgICAgICAgICBpbiBvcmRlciB0byByZXRhaW4gdGhlIHNhbWUgb3ZlcmFsbCBsZXZlbCBvZiBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgVGh1cywgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGEgbWVjaGFuaXNtIHRvCisgICAgICAgICAgICBhdXRvbWF0aWNhbGx5ICJiYWNrZmlsbCIgdGhlc2UgYWRkZWQgZmVhdHVyZXMgaW50byBleGlzdGluZworICAgICAgICAgICAgZGlzdHJvIG9yIG1hY2hpbmUgY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGUgbGlzdCBvZiBmZWF0dXJlcyBmb3Igd2hpY2ggdGhpcyBpcyBkb25lIGJ5CisgICAgICAgICAgICBmaW5kaW5nIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFU19CQUNLRklMTCc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFU19CQUNLRklMTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgYW5kIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMJz48ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFU19CQUNLRklMTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlY2F1c2Ugc3VjaCBmZWF0dXJlcyBhcmUgYmFja2ZpbGxlZCBieSBkZWZhdWx0IGludG8gYWxsCisgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBhcyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHBhcmFncmFwaCwgZGV2ZWxvcGVycworICAgICAgICAgICAgd2hvIHdpc2ggdG8gZGlzYWJsZSB0aGUgbmV3IGZlYXR1cmVzIG5lZWQgdG8gYmUgYWJsZSB0byBzZWxlY3RpdmVseQorICAgICAgICAgICAgcHJldmVudCB0aGUgYmFja2ZpbGxpbmcgZnJvbSBvY2N1cnJpbmcuCisgICAgICAgICAgICBUaGV5IGNhbiBkbyB0aGlzIGJ5IGFkZGluZyB0aGUgdW5kZXNpcmVkIGZlYXR1cmUgb3IgZmVhdHVyZXMgdG8gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQnPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgb3IgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRCc+PGZpbGVuYW1lPk1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGVzIGZvciBkaXN0cm8gZmVhdHVyZXMgYW5kIG1hY2hpbmUgZmVhdHVyZXMgcmVzcGVjdGl2ZWx5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGFyZSB0d28gZXhhbXBsZXMgdG8gaGVscCBpbGx1c3RyYXRlIGZlYXR1cmUgYmFja2ZpbGxpbmc6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VGhlICJwdWxzZWF1ZGlvIiBkaXN0cm8gZmVhdHVyZSBvcHRpb248L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgUHJldmlvdXNseSwgUHVsc2VBdWRpbyBzdXBwb3J0IHdhcyBlbmFibGVkIHdpdGhpbiB0aGUgUXQgYW5kCisgICAgICAgICAgICAgICAgICAgIEdTdHJlYW1lciBmcmFtZXdvcmtzLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIG9mIHRoaXMsIHRoZSBmZWF0dXJlIGlzIGJhY2tmaWxsZWQgYW5kIHRodXMKKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCBmb3IgYWxsIGRpc3Ryb3MgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU1RST19GRUFUVVJFU19CQUNLRklMTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdXIgZGlzdHJvIG5lZWRzIHRvIGRpc2FibGUgdGhlIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZGlzYWJsZSB0aGUgZmVhdHVyZSB3aXRob3V0IGFmZmVjdGluZworICAgICAgICAgICAgICAgICAgICBvdGhlciBleGlzdGluZyBkaXN0cm8gY29uZmlndXJhdGlvbnMgdGhhdCBuZWVkIFB1bHNlQXVkaW8gc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICBieSBhZGRpbmcgInB1bHNlYXVkaW8iIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgZGlzdHJvJ3MgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgQWRkaW5nIHRoZSBmZWF0dXJlIHRvIHRoaXMgdmFyaWFibGUgd2hlbiBpdCBhbHNvCisgICAgICAgICAgICAgICAgICAgIGV4aXN0cyBpbiB0aGUgPGZpbGVuYW1lPkRJU1RST19GRUFUVVJFU19CQUNLRklMTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHByZXZlbnRzIHRoZSBidWlsZCBzeXN0ZW0gZnJvbSBhZGRpbmcgdGhlIGZlYXR1cmUgdG8KKyAgICAgICAgICAgICAgICAgICAgeW91ciBjb25maWd1cmF0aW9uJ3MgPGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+LCBlZmZlY3RpdmVseSBkaXNhYmxpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIGZlYXR1cmUgZm9yIHRoYXQgcGFydGljdWxhciBkaXN0cm8uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UaGUgInJ0YyIgbWFjaGluZSBmZWF0dXJlIG9wdGlvbjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBQcmV2aW91c2x5LCByZWFsIHRpbWUgY2xvY2sgKFJUQykgc3VwcG9ydCB3YXMgZW5hYmxlZCBmb3IgYWxsCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBkZXZpY2VzLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIG9mIHRoaXMsIHRoZSBmZWF0dXJlIGlzIGJhY2tmaWxsZWQgYW5kIHRodXMgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICBmb3IgYWxsIG1hY2hpbmVzIHRocm91Z2ggdGhlIDxmaWxlbmFtZT5NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgeW91ciB0YXJnZXQgZGV2aWNlIGRvZXMgbm90IGhhdmUgdGhpcyBjYXBhYmlsaXR5LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGRpc2FibGUgUlRDIHN1cHBvcnQgZm9yIHlvdXIgZGV2aWNlIHdpdGhvdXQKKyAgICAgICAgICAgICAgICAgICAgYWZmZWN0aW5nIG90aGVyIG1hY2hpbmVzIHRoYXQgbmVlZCBSVEMgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICBieSBhZGRpbmcgdGhlIGZlYXR1cmUgdG8geW91ciBtYWNoaW5lJ3MKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGxpc3QgaW4gdGhlIG1hY2hpbmUncyA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBBZGRpbmcgdGhlIGZlYXR1cmUgdG8gdGhpcyB2YXJpYWJsZSB3aGVuIGl0IGFsc28KKyAgICAgICAgICAgICAgICAgICAgZXhpc3RzIGluIHRoZSA8ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFU19CQUNLRklMTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHByZXZlbnRzIHRoZSBidWlsZCBzeXN0ZW0gZnJvbSBhZGRpbmcgdGhlIGZlYXR1cmUgdG8KKyAgICAgICAgICAgICAgICAgICAgeW91ciBjb25maWd1cmF0aW9uJ3MgPGZpbGVuYW1lPk1BQ0hJTkVfRkVBVFVSRVM8L2ZpbGVuYW1lPiwgZWZmZWN0aXZlbHkKKyAgICAgICAgICAgICAgICAgICAgZGlzYWJsaW5nIFJUQyBzdXBwb3J0IGZvciB0aGF0IHBhcnRpY3VsYXIgbWFjaGluZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorCis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00IHNwZWxsIHNwZWxsbGFuZz1lbl9nYgorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtaW1hZ2VzLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1pbWFnZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNWNhNWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtaW1hZ2VzLnhtbApAQCAtMCwwICsxLDE2OSBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3JlZi1pbWFnZXMnPgorICAgIDx0aXRsZT5JbWFnZXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHByb3ZpZGVzIHNldmVyYWwgZXhhbXBsZQorICAgICAgICBpbWFnZXMgdG8gc2F0aXNmeSBkaWZmZXJlbnQgbmVlZHMuCisgICAgICAgIFdoZW4geW91IGlzc3VlIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgeW91IHByb3ZpZGUgYSDigJx0b3AtbGV2ZWzigJ0gcmVjaXBlCisgICAgICAgIHRoYXQgZXNzZW50aWFsbHkgYmVnaW5zIHRoZSBidWlsZCBmb3IgdGhlIHR5cGUgb2YgaW1hZ2UgeW91IHdhbnQuCisgICAgPC9wYXJhPgorCisgICAgPG5vdGU+CisgICAgICAgIEJ1aWxkaW5nIGFuIGltYWdlIHdpdGhvdXQgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAzIChHUEx2MyksCisgICAgICAgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDMgKExHUEx2MyksIGFuZCB0aGUKKyAgICAgICAgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMyAoQUdQTC0zLjApIGNvbXBvbmVudHMKKyAgICAgICAgaXMgb25seSBzdXBwb3J0ZWQgZm9yIG1pbmltYWwgYW5kIGJhc2UgaW1hZ2VzLgorICAgICAgICBGdXJ0aGVybW9yZSwgaWYgeW91IGFyZSBnb2luZyB0byBidWlsZCBhbiBpbWFnZSB1c2luZyBub24tR1BMdjMgYW5kCisgICAgICAgIHNpbWlsYXJseSBsaWNlbnNlZCBjb21wb25lbnRzLCB5b3UgbXVzdCBtYWtlIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyBpbgorICAgICAgICB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGJlZm9yZSB1c2luZyB0aGUgQml0QmFrZQorICAgICAgICBjb21tYW5kIHRvIGJ1aWxkIHRoZSBtaW5pbWFsIG9yIGJhc2UgaW1hZ2U6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgMS4gQ29tbWVudCBvdXQgdGhlIEVYVFJBX0lNQUdFX0ZFQVRVUkVTIGxpbmUKKyAgICAgMi4gU2V0IElOQ09NUEFUSUJMRV9MSUNFTlNFID0gIkdQTC0zLjAgTEdQTC0zLjAgQUdQTC0zLjAiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L25vdGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRnJvbSB3aXRoaW4gdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnksIHlvdSBjYW4gdXNlCisgICAgICAgIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBkaXNwbGF5IHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHdpdGhpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgIHRoYXQgY29udGFpbmUgaW1hZ2UgcmVjaXBlIGZpbGVzOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbHMgbWV0YSovcmVjaXBlcyovaW1hZ2VzLyouYmIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb2xsb3dpbmcgaXMgYSBsaXN0IG9mIHN1cHBvcnRlZCByZWNpcGVzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5idWlsZC1hcHBsaWFuY2UtaW1hZ2U8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBbiBleGFtcGxlIHZpcnR1YWwgbWFjaGluZSB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgcGllY2VzIHJlcXVpcmVkIHRvCisgICAgICAgICAgICAgICAgcnVuIGJ1aWxkcyB1c2luZyB0aGUgYnVpbGQgc3lzdGVtIGFzIHdlbGwgYXMgdGhlIGJ1aWxkIHN5c3RlbSBpdHNlbGYuCisgICAgICAgICAgICAgICAgWW91IGNhbiBib290IGFuZCBydW4gdGhlIGltYWdlIHVzaW5nIGVpdGhlciB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnZtd2FyZS5jb20vcHJvZHVjdHMvcGxheWVyL292ZXJ2aWV3Lmh0bWwnPlZNd2FyZSBQbGF5ZXI8L3VsaW5rPgorICAgICAgICAgICAgICAgIG9yIDx1bGluayB1cmw9J2h0dHA6Ly93d3cudm13YXJlLmNvbS9wcm9kdWN0cy93b3Jrc3RhdGlvbi9vdmVydmlldy5odG1sJz5WTXdhcmUgV29ya3N0YXRpb248L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGltYWdlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy9kb2N1bWVudGF0aW9uL2J1aWxkLWFwcGxpYW5jZSc+QnVpbGQgQXBwbGlhbmNlPC91bGluaz4gcGFnZSBvbgorICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtYmFzZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgY29uc29sZS1vbmx5IGltYWdlIHRoYXQgZnVsbHkgc3VwcG9ydHMgdGhlIHRhcmdldCBkZXZpY2UgaGFyZHdhcmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtY2x1dHRlcjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEFuIGltYWdlIHdpdGggc3VwcG9ydCBmb3IgdGhlIE9wZW4gR0wtYmFzZWQgdG9vbGtpdCBDbHV0dGVyLCB3aGljaCBlbmFibGVzIGRldmVsb3BtZW50IG9mCisgICAgICAgICAgICAgICAgcmljaCBhbmQgYW5pbWF0ZWQgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1kaXJlY3RmYjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEFuIGltYWdlIHRoYXQgdXNlcyA8ZmlsZW5hbWU+ZGlyZWN0ZmI8L2ZpbGVuYW1lPiBpbnN0ZWFkIG9mIFgxMS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1mdWxsLWNtZGxpbmU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBIGNvbnNvbGUtb25seSBpbWFnZSB3aXRoIG1vcmUgZnVsbC1mZWF0dXJlZCBMaW51eCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGluc3RhbGxlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtbHNiPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQW4gaW1hZ2UgdGhhdCBjb25mb3JtcyB0byB0aGUgTGludXggU3RhbmRhcmQgQmFzZSAoTFNCKQorICAgICAgICAgICAgICAgIHNwZWNpZmljYXRpb24uCisgICAgICAgICAgICAgICAgVGhpcyBpbWFnZSByZXF1aXJlcyBhIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIHRoYXQKKyAgICAgICAgICAgICAgICBlbmFibGVzIExTQiBjb21wbGlhbmNlIChlLmcuIDxmaWxlbmFtZT5wb2t5LWxzYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYnVpbGQgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbHNiPC9maWxlbmFtZT4gd2l0aG91dCB0aGF0CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiwgdGhlIGltYWdlIHdpbGwgbm90IGJlIExTQi1jb21wbGlhbnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtbHNiLWRldjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbHNiPC9maWxlbmFtZT4gaW1hZ2UgdGhhdCBpcyBzdWl0YWJsZSBmb3IgZGV2ZWxvcG1lbnQgd29yaworICAgICAgICAgICAgICAgIHVzaW5nIHRoZSBob3N0LgorICAgICAgICAgICAgICAgIFRoZSBpbWFnZSBpbmNsdWRlcyBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgeW91IGNhbiB1c2UgaW4gYSBob3N0IGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgVGhpcyBpbWFnZSByZXF1aXJlcyBhIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIHRoYXQKKyAgICAgICAgICAgICAgICBlbmFibGVzIExTQiBjb21wbGlhbmNlIChlLmcuIDxmaWxlbmFtZT5wb2t5LWxzYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYnVpbGQgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbHNiLWRldjwvZmlsZW5hbWU+IHdpdGhvdXQgdGhhdAorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIHRoZSBpbWFnZSB3aWxsIG5vdCBiZSBMU0ItY29tcGxpYW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLWxzYi1zZGs8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBIDxmaWxlbmFtZT5jb3JlLWltYWdlLWxzYjwvZmlsZW5hbWU+IHRoYXQgaW5jbHVkZXMgZXZlcnl0aGluZyBpbgorICAgICAgICAgICAgICAgIG1ldGEtdG9vbGNoYWluIGJ1dCBhbHNvIGluY2x1ZGVzIGRldmVsb3BtZW50IGhlYWRlcnMgYW5kIGxpYnJhcmllcworICAgICAgICAgICAgICAgIHRvIGZvcm0gYSBjb21wbGV0ZSBzdGFuZGFsb25lIFNESy4KKyAgICAgICAgICAgICAgICBUaGlzIGltYWdlIHJlcXVpcmVzIGEgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gdGhhdAorICAgICAgICAgICAgICAgIGVuYWJsZXMgTFNCIGNvbXBsaWFuY2UgKGUuZy4gPGZpbGVuYW1lPnBva3ktbHNiPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIElmIHlvdSBidWlsZCA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1sc2Itc2RrPC9maWxlbmFtZT4gd2l0aG91dCB0aGF0CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiwgdGhlIGltYWdlIHdpbGwgbm90IGJlIExTQi1jb21wbGlhbnQuCisgICAgICAgICAgICAgICAgVGhpcyBpbWFnZSBpcyBzdWl0YWJsZSBmb3IgZGV2ZWxvcG1lbnQgdXNpbmcgdGhlIHRhcmdldC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSBzbWFsbCBpbWFnZSBqdXN0IGNhcGFibGUgb2YgYWxsb3dpbmcgYSBkZXZpY2UgdG8gYm9vdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsLWRldjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IGltYWdlIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCB3b3JrCisgICAgICAgICAgICAgICAgdXNpbmcgdGhlIGhvc3QuCisgICAgICAgICAgICAgICAgVGhlIGltYWdlIGluY2x1ZGVzIGhlYWRlcnMgYW5kIGxpYnJhcmllcyB5b3UgY2FuIHVzZSBpbiBhIGhvc3QgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0naW1hZ2VzLWNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMnPjxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gaW1hZ2UgdGhhdCBoYXMgdGhlIE1pbmltYWwgUkFNLWJhc2VkCisgICAgICAgICAgICAgICAgSW5pdGlhbCBSb290IEZpbGVzeXN0ZW0gKGluaXRyYW1mcykgYXMgcGFydCBvZiB0aGUga2VybmVsLAorICAgICAgICAgICAgICAgIHdoaWNoIGFsbG93cyB0aGUgc3lzdGVtIHRvIGZpbmQgdGhlIGZpcnN0IOKAnGluaXTigJ0gcHJvZ3JhbSBtb3JlIGVmZmljaWVudGx5LgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9JTlNUQUxMJz48ZmlsZW5hbWU+UEFDS0FHRV9JTlNUQUxMPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaGVscGZ1bCB3aGVuIHdvcmtpbmcgd2l0aAorICAgICAgICAgICAgICAgIGluaXRyYW1mcyBpbWFnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbC1tdGR1dGlsczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IGltYWdlIHRoYXQgaGFzIHN1cHBvcnQKKyAgICAgICAgICAgICAgICBmb3IgdGhlIE1pbmltYWwgTVREIFV0aWxpdGllcywgd2hpY2ggbGV0IHRoZSB1c2VyIGludGVyYWN0IHdpdGggdGhlCisgICAgICAgICAgICAgICAgTVREIHN1YnN5c3RlbSBpbiB0aGUga2VybmVsIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBmbGFzaCBkZXZpY2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLXJ0PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gaW1hZ2UgcGx1cyBhIHJlYWwtdGltZSB0ZXN0IHN1aXRlIGFuZAorICAgICAgICAgICAgICAgIHRvb2xzIGFwcHJvcHJpYXRlIGZvciByZWFsLXRpbWUgdXNlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLXJ0LXNkazwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtcnQ8L2ZpbGVuYW1lPiBpbWFnZSB0aGF0IGluY2x1ZGVzIGV2ZXJ5dGhpbmcgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS10b29sY2hhaW48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgaW1hZ2UgYWxzbyBpbmNsdWRlcyBkZXZlbG9wbWVudCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgdG8gZm9ybSBhIGNvbXBsZXRlCisgICAgICAgICAgICAgICAgc3RhbmQtYWxvbmUgU0RLIGFuZCBpcyBzdWl0YWJsZSBmb3IgZGV2ZWxvcG1lbnQgdXNpbmcgdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQW4gaW1hZ2Ugd2l0aCBTYXRvIHN1cHBvcnQsIGEgbW9iaWxlIGVudmlyb25tZW50IGFuZCB2aXN1YWwgc3R5bGUgdGhhdCB3b3JrcyB3ZWxsCisgICAgICAgICAgICAgICAgd2l0aCBtb2JpbGUgZGV2aWNlcy4KKyAgICAgICAgICAgICAgICBUaGUgaW1hZ2Ugc3VwcG9ydHMgWDExIHdpdGggYSBTYXRvIHRoZW1lIGFuZCBhcHBsaWNhdGlvbnMgc3VjaCBhcworICAgICAgICAgICAgICAgIGEgdGVybWluYWwsIGVkaXRvciwgZmlsZSBtYW5hZ2VyLCBtZWRpYSBwbGF5ZXIsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvLWRldjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+IGltYWdlIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIHVzaW5nIHRoZSBob3N0LgorICAgICAgICAgICAgICAgIFRoZSBpbWFnZSBpbmNsdWRlcyBsaWJyYXJpZXMgbmVlZGVkIHRvIGJ1aWxkIGFwcGxpY2F0aW9ucyBvbiB0aGUgZGV2aWNlIGl0c2VsZiwKKyAgICAgICAgICAgICAgICB0ZXN0aW5nIGFuZCBwcm9maWxpbmcgdG9vbHMsIGFuZCBkZWJ1ZyBzeW1ib2xzLgorICAgICAgICAgICAgICAgIFRoaXMgaW1hZ2Ugd2FzIGZvcm1lcmx5IDxmaWxlbmFtZT5jb3JlLWltYWdlLXNkazwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG8tc2RrPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4gaW1hZ2UgdGhhdCBpbmNsdWRlcyBldmVyeXRoaW5nIGluIG1ldGEtdG9vbGNoYWluLgorICAgICAgICAgICAgICAgIFRoZSBpbWFnZSBhbHNvIGluY2x1ZGVzIGRldmVsb3BtZW50IGhlYWRlcnMgYW5kIGxpYnJhcmllcyB0byBmb3JtIGEgY29tcGxldGUgc3RhbmRhbG9uZSBTREsKKyAgICAgICAgICAgICAgICBhbmQgaXMgc3VpdGFibGUgZm9yIGRldmVsb3BtZW50IHVzaW5nIHRoZSB0YXJnZXQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtdGVzdG1hc3RlcjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgIm1hc3RlciIgaW1hZ2UgZGVzaWduZWQgdG8gYmUgdXNlZCBmb3IgYXV0b21hdGVkIHJ1bnRpbWUgdGVzdGluZy4KKyAgICAgICAgICAgICAgICBQcm92aWRlcyBhICJrbm93biBnb29kIiBpbWFnZSB0aGF0IGlzIGRlcGxveWVkIHRvIGEgc2VwYXJhdGUKKyAgICAgICAgICAgICAgICBwYXJ0aXRpb24gc28gdGhhdCB5b3UgY2FuIGJvb3QgaW50byBpdCBhbmQgdXNlIGl0IHRvIGRlcGxveSBhCisgICAgICAgICAgICAgICAgc2Vjb25kIGltYWdlIHRvIGJlIHRlc3RlZC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBydW50aW1lIHRlc3RpbmcgaW4gdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BlcmZvcm1pbmctYXV0b21hdGVkLXJ1bnRpbWUtdGVzdGluZyc+UGVyZm9ybWluZyBBdXRvbWF0ZWQgUnVudGltZSBUZXN0aW5nPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtdGVzdG1hc3Rlci1pbml0cmFtZnM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBIFJBTS1iYXNlZCBJbml0aWFsIFJvb3QgRmlsZXN5c3RlbSAoaW5pdHJhbWZzKSBpbWFnZSB0YWlsb3JlZCBmb3IKKyAgICAgICAgICAgICAgICB1c2Ugd2l0aCB0aGUgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtdGVzdG1hc3RlcjwvZmlsZW5hbWU+IGltYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLXdlc3RvbjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgdmVyeSBiYXNpYyBXYXlsYW5kIGltYWdlIHdpdGggYSB0ZXJtaW5hbC4KKyAgICAgICAgICAgICAgICBUaGlzIGltYWdlIHByb3ZpZGVzIHRoZSBXYXlsYW5kIHByb3RvY29sIGxpYnJhcmllcyBhbmQgdGhlCisgICAgICAgICAgICAgICAgcmVmZXJlbmNlIFdlc3RvbiBjb21wb3NpdG9yLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3dheWxhbmQnPldheWxhbmQ8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLXgxMTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgdmVyeSBiYXNpYyBYMTEgaW1hZ2Ugd2l0aCBhIHRlcm1pbmFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5xdDRlLWRlbW8taW1hZ2U8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBbiBpbWFnZSB0aGF0IGxhdW5jaGVzIGludG8gdGhlIGRlbW8gYXBwbGljYXRpb24gZm9yIHRoZSBlbWJlZGRlZAorICAgICAgICAgICAgICAgIChub3QgYmFzZWQgb24gWDExKSB2ZXJzaW9uIG9mIFF0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1tYW51YWwtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1OGRkOTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMjkgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3Blcm1hbGlua3MueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9mb3JtYWwub2JqZWN0LmhlYWRpbmcueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9nbG9zcy1wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvcWEtY29kZS1wZXJtYWxpbmtzLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9IidyZWYtc3R5bGUuY3NzJyIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCIgc2VsZWN0PSJBIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS5pZC5hdHRyaWJ1dGVzIiBzZWxlY3Q9IjEiIC8+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiNzUyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1tYW51YWwtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDM1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldAorCXhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorCXhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiCisJdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQKKwkgIGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmtlci5vdXRwdXQuaW5kZW50IiBzZWxlY3Q9Iid5ZXMnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsucXVpZXRseSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuZmlyc3Quc2VjdGlvbnMiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rLnNlY3Rpb24uZGVwdGgiIHNlbGVjdD0iMTAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ1c2UuaWQuYXMuZmlsZW5hbWUiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVsaW5rLnRhcmdldCIgc2VsZWN0PSInX3NlbGYnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImJhc2UuZGlyIiBzZWxlY3Q9IidodG1sL3JlZi1tYW51YWwvJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInLi4vYm9vay5jc3MnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZWNsaXBzZS5tYW5pZmVzdCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY3JlYXRlLnBsdWdpbi54bWwiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InN1cHByZXNzLm5hdmlnYXRpb24iIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmluZGV4IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCI+QTwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1tYW51YWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNGVkZGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLnhtbApAQCAtMCwwICsxLDE2MCBAQAorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGJvb2sgaWQ9J3JlZi1tYW51YWwnIGxhbmc9J2VuJworICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiCisgICAgICB4bWxucz0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgICAgICA+CisgICAgPGJvb2tpbmZvPgorCisgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9J2ZpZ3VyZXMvcG9reS10aXRsZS5wbmcnCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0nU1ZHJworICAgICAgICAgICAgICAgICAgICBhbGlnbj0nbGVmdCcgc2NhbGVmaXQ9JzEnIHdpZHRoPScxMDAlJy8+CisgICAgICAgICAgICA8L2ltYWdlb2JqZWN0PgorICAgICAgICA8L21lZGlhb2JqZWN0PgorCisgICAgICAgIDx0aXRsZT4KKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbAorICAgICAgICA8L3RpdGxlPgorCisgICAgICAgIDxhdXRob3Jncm91cD4KKyAgICAgICAgICAgIDxhdXRob3I+CisgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5SaWNoYXJkPC9maXJzdG5hbWU+IDxzdXJuYW1lPlB1cmRpZTwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkxpbnV4IEZvdW5kYXRpb248L29yZ25hbWU+CisgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICA8ZW1haWw+cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZzwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKworICAgICAgICA8L2F1dGhvcmdyb3VwPgorCisgICAgICAgIDxyZXZoaXN0b3J5PgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+NC4wK2dpdDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjI0IE5vdmVtYmVyIDIwMTA8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDAuOSBSZWxlYXNlPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4wPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+NiBBcHJpbCAyMDExPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjAgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjAuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjIzIE1heSAyMDExPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjAuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjYgT2N0b2JlciAyMDExPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjI8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDEyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjIgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjM8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTI8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuMyBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTM8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxMzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS41IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS41LjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5KYW51YXJ5IDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNS4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS42PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS42IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS43PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjcgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjg8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjggUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjk8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgPC9yZXZoaXN0b3J5PgorCisgICAgPGNvcHlyaWdodD4KKyAgICAgIDx5ZWFyPiZDT1BZUklHSFRfWUVBUjs8L3llYXI+CisgICAgICA8aG9sZGVyPkxpbnV4IEZvdW5kYXRpb248L2hvbGRlcj4KKyAgICA8L2NvcHlyaWdodD4KKworICAgIDxsZWdhbG5vdGljZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvdWsvIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlIEFsaWtlIDIuMCBVSzogRW5nbGFuZCAmYW1wOyBXYWxlczwvdWxpbms+IGFzIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zLgorICAgICAgPC9wYXJhPgorICAgICAgPG5vdGU+CisgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7Jz5Zb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWw8L3VsaW5rPgorICAgICAgICAgIGZyb20gdGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZS4KKyAgICAgIDwvbm90ZT4KKyAgICA8L2xlZ2Fsbm90aWNlPgorCisgICAgPC9ib29raW5mbz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImludHJvZHVjdGlvbi54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InVzaW5ncG9reS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImNsb3Nlci1sb29rLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0idGVjaG5pY2FsLWRldGFpbHMueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJtaWdyYXRpb24ueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJyZWYtc3RydWN0dXJlLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0icmVmLWNsYXNzZXMueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJyZWYtdGFza3MueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJyZWYtcWEtY2hlY2tzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0icmVmLWltYWdlcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InJlZi1mZWF0dXJlcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InJlZi12YXJpYWJsZXMueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJyZWYtdmFybG9jYWxpdHkueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJmYXEueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJyZXNvdXJjZXMueG1sIi8+CisKKzwhLS0gICAgPGluZGV4IGlkPSdpbmRleCc+CisgICAgICA8dGl0bGU+SW5kZXg8L3RpdGxlPgorICAgIDwvaW5kZXg+CistLT4KKworPC9ib29rPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtcWEtY2hlY2tzLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1xYS1jaGVja3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4Njg5YjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtcWEtY2hlY2tzLnhtbApAQCAtMCwwICsxLDEyMzUgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdyZWYtcWEtY2hlY2tzJz4KKzx0aXRsZT5RQSBFcnJvciBhbmQgV2FybmluZyBNZXNzYWdlczwvdGl0bGU+CisKKzxzZWN0aW9uIGlkPSdxYS1pbnRyb2R1Y3Rpb24nPgorICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoZW4gYnVpbGRpbmcgYSByZWNpcGUsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHBlcmZvcm1zCisgICAgICAgIHZhcmlvdXMgUUEgY2hlY2tzIG9uIHRoZSBvdXRwdXQgdG8gZW5zdXJlIHRoYXQgY29tbW9uIGlzc3VlcyBhcmUKKyAgICAgICAgZGV0ZWN0ZWQgYW5kIHJlcG9ydGVkLgorICAgICAgICBTb21ldGltZXMgd2hlbiB5b3UgY3JlYXRlIGEgbmV3IHJlY2lwZSB0byBidWlsZCBuZXcgc29mdHdhcmUsCisgICAgICAgIGl0IHdpbGwgYnVpbGQgd2l0aCBubyBwcm9ibGVtcy4KKyAgICAgICAgV2hlbiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgb3Igd2hlbiB5b3UgaGF2ZSBRQSBpc3N1ZXMgYnVpbGRpbmcgYW55CisgICAgICAgIHNvZnR3YXJlLCBpdCBjb3VsZCB0YWtlIGEgbGl0dGxlIHRpbWUgdG8gcmVzb2x2ZSB0aGVtLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGlsZSBpdCBpcyB0ZW1wdGluZyB0byBpZ25vcmUgYSBRQSBtZXNzYWdlIG9yIGV2ZW4gdG8KKyAgICAgICAgZGlzYWJsZSBRQSBjaGVja3MsIGl0IGlzIGJlc3QgdG8gdHJ5IGFuZCByZXNvbHZlIGFueQorICAgICAgICByZXBvcnRlZCBRQSBpc3N1ZXMuCisgICAgICAgIFRoaXMgY2hhcHRlciBwcm92aWRlcyBhIGxpc3Qgb2YgdGhlIFFBIG1lc3NhZ2VzIGFuZCBicmllZiBleHBsYW5hdGlvbnMKKyAgICAgICAgb2YgdGhlIGlzc3VlcyB5b3UgY291bGQgZW5jb3VudGVyIHNvIHRoYXQgeW91IGNhbiBwcm9wZXJseSByZXNvbHZlCisgICAgICAgIHByb2JsZW1zLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgbmV4dCBzZWN0aW9uIHByb3ZpZGVzIGEgbGlzdCBvZiBhbGwgUUEgZXJyb3IgYW5kIHdhcm5pbmcKKyAgICAgICAgbWVzc2FnZXMgYmFzZWQgb24gYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisgICAgICAgIEVhY2ggZW50cnkgcHJvdmlkZXMgdGhlIG1lc3NhZ2Ugb3IgZXJyb3IgZm9ybSBhbG9uZyB3aXRoIGFuCisgICAgICAgIGV4cGxhbmF0aW9uLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXQgdGhlIGVuZCBvZiBlYWNoIG1lc3NhZ2UsIHRoZSBuYW1lIG9mIHRoZSBhc3NvY2lhdGVkCisgICAgICAgICAgICAgICAgICAgIFFBIHRlc3QgKGFzIGxpc3RlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZS5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uKSBhcHBlYXJzIHdpdGhpbiBzcXVhcmUgYnJhY2tldHMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXMgbWVudGlvbmVkLCB0aGlzIGxpc3Qgb2YgZXJyb3IgYW5kIHdhcm5pbmcgbWVzc2FnZXMgaXMgZm9yCisgICAgICAgICAgICAgICAgICAgIFFBIGNoZWNrcyBvbmx5LgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBkb2VzIG5vdCBjb3ZlciBhbGwgcG9zc2libGUgYnVpbGQgZXJyb3JzIG9yCisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzIHlvdSBjb3VsZCBlbmNvdW50ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSBzb21lIFFBIGNoZWNrcyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCwgdGhpcyBsaXN0CisgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGluY2x1ZGUgYWxsIHBvc3NpYmxlIFFBIGNoZWNrIGVycm9ycyBhbmQgd2FybmluZ3MuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdxYS1lcnJvcnMtYW5kLXdhcm5pbmdzJz4KKyAgICA8dGl0bGU+RXJyb3JzIGFuZCBXYXJuaW5nczwvdGl0bGU+CisKKzwhLS0KK1RoaXMgc2VjdGlvbiB1c2VzIHRoZSA8cGFyYT48Y29kZT4gY29uc3RydWN0IHRvIGVuYWJsZSBwZXJtYWxpbmtzIGZvciB0aGUKK3ZhcmlvdXMgUUEgaXNzdWUgYW5kIHdhcm5pbmcgbWVzc2FnZXMuICBUaGUgZmlsZSB0ZW1wbGF0ZXMvcWEtY29kZS1wZXJtYWxpbmtzLnhzbAoraXMgdXNlZCB0byBsb2NhdGUgdGhlIGNvbnN0cnVjdCBhbmQgZ2VuZXJhdGUgdGhlIHBlcm1hbGluay4gIFRoaXMgc29sdXRpb24KK2xldmVyYWdlcyB0aGUgZmFjdCB0aGF0IHJpZ2h0IG5vdyB0aGlzIHNlY3Rpb24gaW4gdGhlIHJlZi1tYW51YWwgaXMgdGhlIG9ubHkKK3BsYWNlIGlzIGFsbCB0aGUgWVAgZG9jcyB0aGF0IHVzZXMgdGhlIDxwYXJhPjxjb2RlPiBjb25zdHJ1Y3QuICBJZiwgaW4gdGhlCitmdXR1cmUsIHRoYXQgY29uc3RydWN0IHdlcmUgdG8gYXBwZWFyIGluIHRoZSByZWYtbWFudWFsLCBhIGdlbmVyaWMgcGVybWFsaW5rCit3b3VsZCBiZSBnZW5lcmF0ZWQgZm9yIHRoZSB0ZXh0IGJldHdlZW4gPGNvZGU+PC9jb2RlPi4gIElmIGEgYmV0dGVyIHNvbHV0aW9uCitjYW4gYmUgZm91bmQgdGhlbiBpdCBzaG91bGQgYmUgaW1wbGVtZW50ZWQuICBJIGNhbid0IGZpbmQgb25lIGF0IHRoZSBtb21lbnQuCistLT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1saWJleGVjJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtwYWNrYWdlbmFtZSZndDs6ICZsdDtwYXRoJmd0OyBpcyB1c2luZyBsaWJleGVjIHBsZWFzZSByZWxvY2F0ZSB0byAmbHQ7bGliZXhlY2RpciZndDsgW2xpYmV4ZWNdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpZmllZCBwYWNrYWdlIGNvbnRhaW5zIGZpbGVzIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2xpYmV4ZWM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPmxpYmV4ZWNkaXI8L2ZpbGVuYW1lPiBpcyBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgIiR7bGliZGlyfS8ke0JQTn0iIHJhdGhlciB0aGFuIHRvICIvdXNyL2xpYmV4ZWMiLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCBpbnN0YWxsaW5nIHRvIDxmaWxlbmFtZT4vdXNyL2xpYmV4ZWM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyBsaWtlbHkgbm90IGRlc2lyYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLXJwYXRocyc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBwYWNrYWdlICZsdDtwYWNrYWdlbmFtZSZndDsgY29udGFpbnMgYmFkIFJQQVRIICZsdDtycGF0aCZndDsgaW4gZmlsZSAmbHQ7ZmlsZSZndDsgW3JwYXRoc10KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIGJpbmFyeSBwcm9kdWNlZCBieSB0aGUgcmVjaXBlIGNvbnRhaW5zIGR5bmFtaWMKKyAgICAgICAgICAgICAgICAgICAgbGlicmFyeSBsb2FkIHBhdGhzIChycGF0aHMpIHRoYXQgY29udGFpbiBidWlsZCBzeXN0ZW0gcGF0aHMKKyAgICAgICAgICAgICAgICAgICAgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBhcmUgaW5jb3JyZWN0IGZvciB0aGUgdGFyZ2V0IGFuZCBjb3VsZCBwb3RlbnRpYWxseQorICAgICAgICAgICAgICAgICAgICBiZSBhIHNlY3VyaXR5IGlzc3VlLgorICAgICAgICAgICAgICAgICAgICBDaGVjayBmb3IgYmFkIDxmaWxlbmFtZT4tcnBhdGg8L2ZpbGVuYW1lPiBvcHRpb25zIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgbGlua2VyIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGxvZy4KKyAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSBidWlsZCBzeXN0ZW0gdXNlZCBieSB0aGUgc29mdHdhcmUgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgYnVpbHQsIHRoZXJlIG1pZ2h0IGJlIGEgY29uZmlndXJlIG9wdGlvbiB0byBkaXNhYmxlIHJwYXRoCisgICAgICAgICAgICAgICAgICAgIHVzYWdlIGNvbXBsZXRlbHkgd2l0aGluIHRoZSBidWlsZCBvZiB0aGUgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS11c2VsZXNzLXJwYXRocyc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7cGFja2FnZW5hbWUmZ3Q7OiAmbHQ7ZmlsZSZndDsgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIICZsdDtycGF0aCZndDsgW3VzZWxlc3MtcnBhdGhzXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgYmluYXJ5IHByb2R1Y2VkIGJ5IHRoZSByZWNpcGUgY29udGFpbnMgZHluYW1pYworICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5IGxvYWQgcGF0aHMgKHJwYXRocykgdGhhdCBvbiBhIHN0YW5kYXJkIHN5c3RlbSBhcmUKKyAgICAgICAgICAgICAgICAgICAgc2VhcmNoZWQgYnkgZGVmYXVsdCBieSB0aGUgbGlua2VyIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vbGliPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT4vdXNyL2xpYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgV2hpbGUgdGhlc2UgcGF0aHMgd2lsbCBub3QgY2F1c2UgYW55IGJyZWFrYWdlLCB0aGV5IGRvIHdhc3RlCisgICAgICAgICAgICAgICAgICAgIHNwYWNlIGFuZCBhcmUgdW5uZWNlc3NhcnkuCisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgYnVpbGQgc3lzdGVtIHVzZWQgYnkgdGhlIHNvZnR3YXJlIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0LCB0aGVyZSBtaWdodCBiZSBhIGNvbmZpZ3VyZSBvcHRpb24gdG8gZGlzYWJsZSBycGF0aAorICAgICAgICAgICAgICAgICAgICB1c2FnZSBjb21wbGV0ZWx5IHdpdGhpbiB0aGUgYnVpbGQgb2YgdGhlIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtZmlsZS1yZGVwcyc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7cGFja2FnZW5hbWUmZ3Q7IHJlcXVpcmVzICZsdDtmaWxlcyZndDssIGJ1dCBubyBwcm92aWRlcnMgaW4gaXRzIFJERVBFTkRTIFtmaWxlLXJkZXBzXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgZmlsZS1sZXZlbCBkZXBlbmRlbmN5IGhhcyBiZWVuIGlkZW50aWZpZWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHBhY2thZ2Ugb24gdGhlIHNwZWNpZmllZCBmaWxlcywgYnV0IHRoZXJlIGlzCisgICAgICAgICAgICAgICAgICAgIG5vIGV4cGxpY2l0IGNvcnJlc3BvbmRpbmcgZW50cnkgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIElmIHBhcnRpY3VsYXIgZmlsZXMgYXJlIHJlcXVpcmVkIGF0IHJ1bnRpbWUgdGhlbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiBzaG91bGQgYmUgZGVjbGFyZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSB0byBlbnN1cmUgdGhlIHBhY2thZ2VzIHByb3ZpZGluZyB0aGVtIGFyZSBidWlsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWJ1aWxkLWRlcHMnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O3BhY2thZ2VuYW1lMSZndDsgcmRlcGVuZHMgb24gJmx0O3BhY2thZ2VuYW1lMiZndDssIGJ1dCBpdCBpc24ndCBhIGJ1aWxkIGRlcGVuZGVuY3k/IFtidWlsZC1kZXBzXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgcnVudGltZSBkZXBlbmRlbmN5IGV4aXN0cyBiZXR3ZWVuIHRoZSB0d28gc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLCBidXQgdGhlcmUgaXMgbm90aGluZyBleHBsaWNpdCB3aXRoaW4gdGhlIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICB0byBlbmFibGUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gZW5zdXJlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBpcyBzYXRpc2ZpZWQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29uZGl0aW9uIGlzIHVzdWFsbHkgdHJpZ2dlcmVkIGJ5IGFuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlIGJlaW5nIGFkZGVkIGF0IHRoZSBwYWNrYWdpbmcgc3RhZ2UgcmF0aGVyIHRoYW4gdXAKKyAgICAgICAgICAgICAgICAgICAgZnJvbnQsIHdoaWNoIGlzIHVzdWFsbHkgYXV0b21hdGljIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gbW9zdCBjYXNlcywgeW91IHNob3VsZCBjaGFuZ2UgdGhlIHJlY2lwZSB0byBhZGQgYW4KKyAgICAgICAgICAgICAgICAgICAgZXhwbGljaXQgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gZm9yIHRoZSBkZXBlbmRlbmN5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtZGV2LXNvJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIG5vbiAtZGV2Ly1kYmcvbmF0aXZlc2RrLSBwYWNrYWdlIGNvbnRhaW5zIHN5bWxpbmsgLnNvOiAmbHQ7cGFja2FnZW5hbWUmZ3Q7IHBhdGggJyZsdDtwYXRoJmd0OycgW2Rldi1zb10KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTeW1saW5rIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBmaWxlcyBhcmUgZm9yIGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgIG9ubHksIGFuZCBzaG91bGQgdGhlcmVmb3JlIGdvIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzaXR1YXRpb24gbWlnaHQgb2NjdXIgaWYgeW91IGFkZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5zbyo8L2ZpbGVuYW1lPiByYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5zby4qPC9maWxlbmFtZT4gdG8gYSBub24tZGV2IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIENoYW5nZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAoYW5kIHBvc3NpYmx5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICBzdWNoIHRoYXQgdGhlIHNwZWNpZmllZCA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gZmlsZSBnb2VzCisgICAgICAgICAgICAgICAgICAgIGludG8gYW4gYXBwcm9wcmlhdGUgPGZpbGVuYW1lPi1kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtc3RhdGljZGV2Jz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIG5vbiAtc3RhdGljZGV2IHBhY2thZ2UgY29udGFpbnMgc3RhdGljIC5hIGxpYnJhcnk6ICZsdDtwYWNrYWdlbmFtZSZndDsgcGF0aCAnJmx0O3BhdGgmZ3Q7JyBbc3RhdGljZGV2XQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFN0YXRpYyA8ZmlsZW5hbWU+LmE8L2ZpbGVuYW1lPiBsaWJyYXJ5IGZpbGVzIHNob3VsZCBnbyBpbnRvCisgICAgICAgICAgICAgICAgICAgIGEgPGZpbGVuYW1lPi1zdGF0aWNkZXY8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBDaGFuZ2UKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgKGFuZCBwb3NzaWJseQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPikKKyAgICAgICAgICAgICAgICAgICAgc3VjaCB0aGF0IHRoZSBzcGVjaWZpZWQgPGZpbGVuYW1lPi5hPC9maWxlbmFtZT4gZmlsZSBnb2VzCisgICAgICAgICAgICAgICAgICAgIGludG8gYW4gYXBwcm9wcmlhdGUgPGZpbGVuYW1lPi1zdGF0aWNkZXY8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtbGliZGlyJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtwYWNrYWdlbmFtZSZndDs6IGZvdW5kIGxpYnJhcnkgaW4gd3JvbmcgbG9jYXRpb24gW2xpYmRpcl0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIGZpbGUgbWF5IGhhdmUgYmVlbiBpbnN0YWxsZWQgaW50byBhbiBpbmNvcnJlY3QKKyAgICAgICAgICAgICAgICAgICAgKHBvc3NpYmx5IGhhcmRjb2RlZCkgaW5zdGFsbGF0aW9uIHBhdGguCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGlzIHRlc3Qgd2lsbCBjYXRjaCByZWNpcGVzIHRoYXQgaW5zdGFsbAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2xpYi9iYXIuc288L2ZpbGVuYW1lPiB3aGVuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2VfbGliZGlyfTwvZmlsZW5hbWU+IGlzICJsaWIzMiIuCisgICAgICAgICAgICAgICAgICAgIEFub3RoZXIgZXhhbXBsZSBpcyB3aGVuIHJlY2lwZXMgaW5zdGFsbAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9saWI2NC9mb28uc288L2ZpbGVuYW1lPiB3aGVuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2xpYmRpcn08L2ZpbGVuYW1lPiBpcyAiL3Vzci9saWIiLgorICAgICAgICAgICAgICAgICAgICBGYWxzZSBwb3NpdGl2ZXMgb2NjYXNpb25hbGx5IGV4aXN0LgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMgYWRkICJsaWJkaXIiIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTlNBTkVfU0tJUCc+PGZpbGVuYW1lPklOU0FORV9TS0lQPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWRlYnVnLWZpbGVzJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIG5vbiBkZWJ1ZyBwYWNrYWdlIGNvbnRhaW5zIC5kZWJ1ZyBkaXJlY3Rvcnk6ICZsdDtwYWNrYWdlbmFtZSZndDsgcGF0aCAmbHQ7cGF0aCZndDsgW2RlYnVnLWZpbGVzXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgcGFja2FnZSBjb250YWlucyBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uZGVidWc8L2ZpbGVuYW1lPiBkaXJlY3RvcnksIHdoaWNoIHNob3VsZCBub3QKKyAgICAgICAgICAgICAgICAgICAgYXBwZWFyIGluIGFueXRoaW5nIGJ1dCB0aGUgPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNpdHVhdGlvbiBtaWdodCBvY2N1ciBpZiB5b3UgYWRkIGEgcGF0aCB3aGljaCBjb250YWlucworICAgICAgICAgICAgICAgICAgICBhIDxmaWxlbmFtZT4uZGVidWc8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kIGRvIG5vdAorICAgICAgICAgICAgICAgICAgICBleHBsaWNpdGx5IGFkZCB0aGUgPGZpbGVuYW1lPi5kZWJ1ZzwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICB0byB0aGUgPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBhZGQgdGhlIDxmaWxlbmFtZT4uZGVidWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgZXhwbGljaXRseSB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVNfJHtQTn0tZGJnPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFNlZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiA8ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWFyY2gnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgQXJjaGl0ZWN0dXJlIGRpZCBub3QgbWF0Y2ggKCZsdDttYWNoaW5lX2FyY2gmZ3Q7IHRvICZsdDtmaWxlX2FyY2gmZ3Q7KSBvbiAmbHQ7ZmlsZSZndDsgW2FyY2hdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2hlY2tzIHRoZQorICAgICAgICAgICAgICAgICAgICBFeGVjdXRhYmxlIGFuZCBMaW5rYWJsZSBGb3JtYXQgKEVMRikgdHlwZSwgYml0IHNpemUsIGFuZAorICAgICAgICAgICAgICAgICAgICBlbmRpYW5uZXNzIG9mIGFueSBiaW5hcmllcyB0byBlbnN1cmUgdGhleSBtYXRjaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB0ZXN0IGZhaWxzIGlmIGFueSBiaW5hcmllcyBkbyBub3QgbWF0Y2ggdGhlIHR5cGUgc2luY2UKKyAgICAgICAgICAgICAgICAgICAgdGhlcmUgd291bGQgYmUgYW4gaW5jb21wYXRpYmlsaXR5LgorICAgICAgICAgICAgICAgICAgICBUaGUgdGVzdCBjb3VsZCBpbmRpY2F0ZSB0aGF0IHRoZSB3cm9uZyBjb21waWxlciBvciBjb21waWxlcgorICAgICAgICAgICAgICAgICAgICBvcHRpb25zIGhhdmUgYmVlbiB1c2VkLgorICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMgc29mdHdhcmUsIGxpa2UgYm9vdGxvYWRlcnMsIG1pZ2h0IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgYnlwYXNzIHRoaXMgY2hlY2suCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBmaWxlIHlvdSByZWNlaXZlIHRoZSBlcnJvciBmb3IgaXMgZmlybXdhcmUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgZXhlY3V0ZWQgd2l0aGluIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSBvciBpcyBpbnRlbmRlZCB0byBydW4gb24gYSBzZXBhcmF0ZQorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3Igd2l0aGluIHRoZSBkZXZpY2UsIHlvdSBjYW4gYWRkICJhcmNoIiB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5TQU5FX1NLSVAnPjxmaWxlbmFtZT5JTlNBTkVfU0tJUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEFub3RoZXIgb3B0aW9uIGlzIHRvIGNoZWNrIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgbG9nIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY29tcGlsZXIgb3B0aW9ucyBiZWluZyB1c2VkCisgICAgICAgICAgICAgICAgICAgIGFyZSBjb3JyZWN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtYXJjaC1iaXQtc2l6ZS1uby1tYXRjaCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBCaXQgc2l6ZSBkaWQgbm90IG1hdGNoICgmbHQ7bWFjaGluZV9iaXRzJmd0OyB0byAmbHQ7ZmlsZV9iaXRzJmd0OykgJmx0O3JlY2lwZSZndDsgb24gJmx0O2ZpbGUmZ3Q7IFthcmNoXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNoZWNrcworICAgICAgICAgICAgICAgICAgICB0aGUgRXhlY3V0YWJsZSBhbmQgTGlua2FibGUgRm9ybWF0IChFTEYpIHR5cGUsCisgICAgICAgICAgICAgICAgICAgIGJpdCBzaXplLCBhbmQgZW5kaWFubmVzcyBvZiBhbnkgYmluYXJpZXMgdG8gZW5zdXJlCisgICAgICAgICAgICAgICAgICAgIHRoZXkgbWF0Y2ggdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdGVzdCBmYWlscyBpZiBhbnkgYmluYXJpZXMgZG8gbm90IG1hdGNoIHRoZSB0eXBlIHNpbmNlCisgICAgICAgICAgICAgICAgICAgIHRoZXJlIHdvdWxkIGJlIGFuIGluY29tcGF0aWJpbGl0eS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRlc3QgY291bGQgaW5kaWNhdGUgdGhhdCB0aGUgd3JvbmcgY29tcGlsZXIgb3IgY29tcGlsZXIKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyBoYXZlIGJlZW4gdXNlZC4KKyAgICAgICAgICAgICAgICAgICAgU29tZXRpbWVzIHNvZnR3YXJlLCBsaWtlIGJvb3Rsb2FkZXJzLCBtaWdodCBuZWVkIHRvCisgICAgICAgICAgICAgICAgICAgIGJ5cGFzcyB0aGlzIGNoZWNrLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGUgZmlsZSB5b3UgcmVjZWl2ZSB0aGUgZXJyb3IgZm9yIGlzIGZpcm13YXJlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgaXMgbm90IGludGVuZGVkIHRvIGJlIGV4ZWN1dGVkIHdpdGhpbiB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGluZyBzeXN0ZW0gb3IgaXMgaW50ZW5kZWQgdG8gcnVuIG9uIGEgc2VwYXJhdGUKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc29yIHdpdGhpbiB0aGUgZGV2aWNlLCB5b3UgY2FuIGFkZCAiYXJjaCIgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOU0FORV9TS0lQJz48ZmlsZW5hbWU+SU5TQU5FX1NLSVA8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBBbm90aGVyIG9wdGlvbiBpcyB0byBjaGVjayB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGxvZyBhbmQgdmVyaWZ5IHRoYXQgdGhlIGNvbXBpbGVyIG9wdGlvbnMgYmVpbmcgdXNlZCBhcmUKKyAgICAgICAgICAgICAgICAgICAgY29ycmVjdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWFyY2gtZW5kaWFubmVzcy1uby1tYXRjaCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBFbmRpYW5uZXNzIGRpZCBub3QgbWF0Y2ggKCZsdDttYWNoaW5lX2VuZGlhbm5lc3MmZ3Q7IHRvICZsdDtmaWxlX2VuZGlhbm5lc3MmZ3Q7KSBvbiAmbHQ7ZmlsZSZndDsgW2FyY2hdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2hlY2tzCisgICAgICAgICAgICAgICAgICAgIHRoZSBFeGVjdXRhYmxlIGFuZCBMaW5rYWJsZSBGb3JtYXQgKEVMRikgdHlwZSwgYml0CisgICAgICAgICAgICAgICAgICAgIHNpemUsIGFuZCBlbmRpYW5uZXNzIG9mIGFueSBiaW5hcmllcyB0byBlbnN1cmUgdGhleQorICAgICAgICAgICAgICAgICAgICBtYXRjaCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB0ZXN0IGZhaWxzIGlmIGFueSBiaW5hcmllcyBkbyBub3QgbWF0Y2ggdGhlIHR5cGUgc2luY2UKKyAgICAgICAgICAgICAgICAgICAgdGhlcmUgd291bGQgYmUgYW4gaW5jb21wYXRpYmlsaXR5LgorICAgICAgICAgICAgICAgICAgICBUaGUgdGVzdCBjb3VsZCBpbmRpY2F0ZSB0aGF0IHRoZSB3cm9uZyBjb21waWxlciBvciBjb21waWxlcgorICAgICAgICAgICAgICAgICAgICBvcHRpb25zIGhhdmUgYmVlbiB1c2VkLgorICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMgc29mdHdhcmUsIGxpa2UgYm9vdGxvYWRlcnMsIG1pZ2h0IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgYnlwYXNzIHRoaXMgY2hlY2suCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBmaWxlIHlvdSByZWNlaXZlIHRoZSBlcnJvciBmb3IgaXMgZmlybXdhcmUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgZXhlY3V0ZWQgd2l0aGluIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSBvciBpcyBpbnRlbmRlZCB0byBydW4gb24gYSBzZXBhcmF0ZQorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3Igd2l0aGluIHRoZSBkZXZpY2UsIHlvdSBjYW4gYWRkICJhcmNoIiB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5TQU5FX1NLSVAnPjxmaWxlbmFtZT5JTlNBTkVfU0tJUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEFub3RoZXIgb3B0aW9uIGlzIHRvIGNoZWNrIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgbG9nIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY29tcGlsZXIgb3B0aW9ucyBiZWluZyB1c2VkCisgICAgICAgICAgICAgICAgICAgIGFyZSBjb3JyZWN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtdGV4dHJlbCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBFTEYgYmluYXJ5ICcmbHQ7ZmlsZSZndDsnIGhhcyByZWxvY2F0aW9ucyBpbiAudGV4dCBbdGV4dHJlbF0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIEVMRiBiaW5hcnkgY29udGFpbnMgcmVsb2NhdGlvbnMgaW4gaXRzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4udGV4dDwvZmlsZW5hbWU+IHNlY3Rpb25zLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNpdHVhdGlvbiBjYW4gcmVzdWx0IGluIGEgcGVyZm9ybWFuY2UgaW1wYWN0CisgICAgICAgICAgICAgICAgICAgIGF0IHJ1bnRpbWUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgdGhlIHdheSB0byBzb2x2ZSB0aGlzIHBlcmZvcm1hbmNlIGlzc3VlIGlzIHRvCisgICAgICAgICAgICAgICAgICAgIGFkZCAiLWZQSUMiIG9yICItZnBpYyIgdG8gdGhlIGNvbXBpbGVyIGNvbW1hbmQtbGluZQorICAgICAgICAgICAgICAgICAgICBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZ2l2ZW4gc29mdHdhcmUgdGhhdCByZWFkcworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ0ZMQUdTJz48ZmlsZW5hbWU+Q0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHdoZW4geW91IGJ1aWxkIGl0LCB5b3UgY291bGQgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91cgorICAgICAgICAgICAgICAgICAgICByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ0ZMQUdTX2FwcGVuZCA9ICIgLWZQSUMgIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRleHQgcmVsb2NhdGlvbnMgYXQgcnVudGltZSwgc2VlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuYWtrYWRpYS5vcmcvZHJlcHBlci90ZXh0cmVsb2NzLmh0bWwnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtbGRmbGFncyc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBObyBHTlVfSEFTSCBpbiB0aGUgZWxmIGJpbmFyeTogJyZsdDtmaWxlJmd0OycgW2xkZmxhZ3NdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBpbmRpY2F0ZXMgdGhhdCBiaW5hcmllcyBwcm9kdWNlZCB3aGVuIGJ1aWxkaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICByZWNpcGUgaGF2ZSBub3QgYmVlbiBsaW5rZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxERkxBR1MnPjxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgcHJvdmlkZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgQ2hlY2sgdG8gYmUgc3VyZSB0aGF0IHRoZSA8ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIGJlaW5nIHBhc3NlZCB0byB0aGUgbGlua2VyIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIEEgY29tbW9uIHdvcmthcm91bmQgZm9yIHRoaXMgc2l0dWF0aW9uIGlzIHRvIHBhc3MgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxERkxBR1M8L2ZpbGVuYW1lPiB1c2luZworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0NDX0FSQ0gnPjxmaWxlbmFtZT5UQVJHRVRfQ0NfQVJDSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIHJlY2lwZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS14b3JnLWRyaXZlci1hYmknPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgUGFja2FnZSAmbHQ7cGFja2FnZW5hbWUmZ3Q7IGNvbnRhaW5zIFhvcmcgZHJpdmVyICgmbHQ7ZHJpdmVyJmd0OykgYnV0IG5vIHhvcmctYWJpLSBkZXBlbmRlbmNpZXMgW3hvcmctZHJpdmVyLWFiaV0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIHBhY2thZ2UgY29udGFpbnMgYW4gWG9yZyBkcml2ZXIsIGJ1dCBkb2VzIG5vdAorICAgICAgICAgICAgICAgICAgICBoYXZlIGEgY29ycmVzcG9uZGluZyBBQkkgcGFja2FnZSBkZXBlbmRlbmN5LgorICAgICAgICAgICAgICAgICAgICBUaGUgeHNlcnZlci14b3JnIHJlY2lwZSBwcm92aWRlcyBkcml2ZXIgQUJJIG5hbWVzLgorICAgICAgICAgICAgICAgICAgICBBbGwgZHJpdmVycyBzaG91bGQgZGVwZW5kIG9uIHRoZSBBQkkgdmVyc2lvbnMgdGhhdCB0aGV5IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgYmVlbiBidWlsdCBhZ2FpbnN0LgorICAgICAgICAgICAgICAgICAgICBEcml2ZXIgcmVjaXBlcyB0aGF0IGluY2x1ZGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnhvcmctZHJpdmVyLWlucHV0LmluYzwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT54b3JnLWRyaXZlci12aWRlby5pbmM8L2ZpbGVuYW1lPiB3aWxsCisgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgZ2V0IHRoZXNlIHZlcnNpb25zLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBzaG91bGQgb25seSBuZWVkIHRvIGV4cGxpY2l0bHkgYWRkCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyB0byBiaW5hcnkgZHJpdmVyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1pbmZvZGlyJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIFRoZSAvdXNyL3NoYXJlL2luZm8vZGlyIGZpbGUgaXMgbm90IG1lYW50IHRvIGJlIHNoaXBwZWQgaW4gYSBwYXJ0aWN1bGFyIHBhY2thZ2UuIFtpbmZvZGlyXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+L3Vzci9zaGFyZS9pbmZvL2RpcjwvZmlsZW5hbWU+IHNob3VsZCBub3QgYmUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZWQuCisgICAgICAgICAgICAgICAgICAgIEFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91cgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBvciB0byB5b3VyIDxmaWxlbmFtZT5kb19pbnN0YWxsX2FwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgcmVjaXBlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm0gJHtEfSR7aW5mb2Rpcn0vZGlyCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLXN5bWxpbmstdG8tc3lzcm9vdCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBTeW1saW5rICZsdDtwYXRoJmd0OyBpbiAmbHQ7cGFja2FnZW5hbWUmZ3Q7IHBvaW50cyB0byBUTVBESVIgW3N5bWxpbmstdG8tc3lzcm9vdF0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIHN5bWxpbmsgcG9pbnRzIGludG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvbiB0aGUgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgU3VjaCBzeW1saW5rcyB3aWxsIHdvcmsgb24gdGhlIGhvc3QuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZXkgYXJlIGNsZWFybHkgaW52YWxpZCB3aGVuIHJ1bm5pbmcgb24KKyAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBlaXRoZXIgY29ycmVjdCB0aGUgc3ltbGluayB0byB1c2UgYSByZWxhdGl2ZQorICAgICAgICAgICAgICAgICAgICBwYXRoIG9yIHJlbW92ZSB0aGUgc3ltbGluay4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWxhJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtmaWxlJmd0OyBmYWlsZWQgc2FuaXR5IHRlc3QgKHdvcmtkaXIpIGluIHBhdGggJmx0O3BhdGgmZ3Q7IFtsYV0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIDxmaWxlbmFtZT4ubGE8L2ZpbGVuYW1lPiBmaWxlIGNvbnRhaW5zCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgcGF0aHMuCisgICAgICAgICAgICAgICAgICAgIEFueSA8ZmlsZW5hbWU+LmxhPC9maWxlbmFtZT4gZmlsZSBjb250YWluaW5nIHRoZXNlIHBhdGhzCisgICAgICAgICAgICAgICAgICAgIGlzIGluY29ycmVjdCBzaW5jZSA8ZmlsZW5hbWU+bGlidG9vbDwvZmlsZW5hbWU+IGFkZHMgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvcnJlY3Qgc3lzcm9vdCBwcmVmaXggd2hlbiB1c2luZyB0aGUgZmlsZXMgYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICBpdHNlbGYuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1wa2djb25maWcnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O2ZpbGUmZ3Q7IGZhaWxlZCBzYW5pdHkgdGVzdCAodG1wZGlyKSBpbiBwYXRoICZsdDtwYXRoJmd0OyBbcGtnY29uZmlnXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgPGZpbGVuYW1lPi5wYzwvZmlsZW5hbWU+IGZpbGUgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT4vPC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgcGF0aHMuCisgICAgICAgICAgICAgICAgICAgIEFueSA8ZmlsZW5hbWU+LnBjPC9maWxlbmFtZT4gZmlsZSBjb250YWluaW5nIHRoZXNlIHBhdGhzIGlzCisgICAgICAgICAgICAgICAgICAgIGluY29ycmVjdCBzaW5jZSA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+IGl0c2VsZiBhZGRzCisgICAgICAgICAgICAgICAgICAgIHRoZSBjb3JyZWN0IHN5c3Jvb3QgcHJlZml4IHdoZW4gdGhlIGZpbGVzIGFyZSBhY2Nlc3NlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWRlYnVnLWRlcHMnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O3BhY2thZ2VuYW1lJmd0OyByZGVwZW5kcyBvbiAmbHQ7ZGVidWdfcGFja2FnZW5hbWUmZ3Q7IFtkZWJ1Zy1kZXBzXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgZGVwZW5kZW5jeSBleGlzdHMgYmV0d2VlbiB0aGUgc3BlY2lmaWVkIG5vbi1kYmcgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAoaS5lLiBhIHBhY2thZ2Ugd2hvc2UgbmFtZSBkb2VzIG5vdCBlbmQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPikgYW5kIGEgcGFja2FnZSB0aGF0IGlzIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRiZzwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGJnPC9maWxlbmFtZT4gcGFja2FnZXMgY29udGFpbgorICAgICAgICAgICAgICAgICAgICBkZWJ1ZyBzeW1ib2xzIGFuZCBhcmUgYnJvdWdodCBpbiB1c2luZyBzZXZlcmFsCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBtZXRob2RzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGJnLXBrZ3M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfSU5TVEFMTCc+PGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXMgYSBkZXBlbmRlbmN5IG9mIGFub3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGJnPC9maWxlbmFtZT4gcGFja2FnZSB0aGF0IHdhcyBicm91Z2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdXNpbmcgb25lIG9mIHRoZSBhYm92ZSBtZXRob2RzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlcGVuZGVuY3kgbWlnaHQgaGF2ZSBiZWVuIGF1dG9tYXRpY2FsbHkgYWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYmVjYXVzZSB0aGUgPGZpbGVuYW1lPmRiZzwvZmlsZW5hbWU+IHBhY2thZ2UgZXJyb25lb3VzbHkKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgZmlsZXMgdGhhdCBpdCBzaG91bGQgbm90IGNvbnRhaW4gKGUuZy4gYQorICAgICAgICAgICAgICAgICAgICBub24tc3ltbGluayA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gZmlsZSkgb3IgaXQgbWlnaHQKKyAgICAgICAgICAgICAgICAgICAgaGF2ZSBiZWVuIGFkZGVkIG1hbnVhbGx5IChlLmcuIGJ5IGFkZGluZyB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1kZXYtZGVwcyc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7cGFja2FnZW5hbWUmZ3Q7IHJkZXBlbmRzIG9uICZsdDtkZXZfcGFja2FnZW5hbWUmZ3Q7IFtkZXYtZGVwc10KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIGRlcGVuZGVuY3kgZXhpc3RzIGJldHdlZW4gdGhlIHNwZWNpZmllZCBub24tZGV2IHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgKGEgcGFja2FnZSB3aG9zZSBuYW1lIGRvZXMgbm90IGVuZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWRldjwvZmlsZW5hbWU+KSBhbmQgYSBwYWNrYWdlIHRoYXQgaXMgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2PC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlcyBjb250YWluIGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMgYW5kIGFyZSB1c3VhbGx5IGJyb3VnaHQgaW4gdXNpbmcgc2V2ZXJhbCBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGUgPGZpbGVuYW1lPmRldi1wa2dzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0lOU1RBTEwnPjxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIGEgZGVwZW5kZW5jeSBvZiBhbm90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldjwvZmlsZW5hbWU+IHBhY2thZ2UgdGhhdCB3YXMgYnJvdWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHVzaW5nIG9uZSBvZiB0aGUgYWJvdmUgbWV0aG9kcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZXBlbmRlbmN5IG1pZ2h0IGhhdmUgYmVlbiBhdXRvbWF0aWNhbGx5IGFkZGVkIChiZWNhdXNlCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZGV2PC9maWxlbmFtZT4gcGFja2FnZSBlcnJvbmVvdXNseSBjb250YWlucworICAgICAgICAgICAgICAgICAgICBmaWxlcyB0aGF0IGl0IHNob3VsZCBub3QgaGF2ZSAoZS5nLiBhIG5vbi1zeW1saW5rCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBmaWxlKSBvciBpdCBtaWdodCBoYXZlIGJlZW4gYWRkZWQKKyAgICAgICAgICAgICAgICAgICAgbWFudWFsbHkgKGUuZy4gYnkgYWRkaW5nIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWRlcC1jbXAnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O3ZhciZndDtfJmx0O3BhY2thZ2VuYW1lJmd0OyBpcyBpbnZhbGlkOiAmbHQ7Y29tcGFyaXNvbiZndDsgKCZsdDt2YWx1ZSZndDspICAgb25seSBjb21wYXJpc29ucyAmbHQ7LCA9LCAmZ3Q7LCAmbHQ7PSwgYW5kICZndDs9IGFyZSBhbGxvd2VkIFtkZXAtY21wXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgYWRkaW5nIGEgdmVyc2lvbmVkIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwIHRvIG9uZQorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZGVwZW5kZW5jeSB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJTVUdHRVNUUyc+PGZpbGVuYW1lPlJTVUdHRVNUUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJQUk9WSURFUyc+PGZpbGVuYW1lPlJQUk9WSURFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRVBMQUNFUyc+PGZpbGVuYW1lPlJSRVBMQUNFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJDT05GTElDVFMnPjxmaWxlbmFtZT5SQ09ORkxJQ1RTPC9maWxlbmFtZT48L2xpbms+KSwKKyAgICAgICAgICAgICAgICAgICAgeW91IG11c3Qgb25seSB1c2UgdGhlIG5hbWVkIGNvbXBhcmlzb24gb3BlcmF0b3JzLgorICAgICAgICAgICAgICAgICAgICBDaGFuZ2UgdGhlIHZlcnNpb25lZCBkZXBlbmRlbmN5IHZhbHVlcyB5b3UgYXJlIGFkZGluZworICAgICAgICAgICAgICAgICAgICB0byBtYXRjaCB0aG9zZSBsaXN0ZWQgaW4gdGhlIG1lc3NhZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1jb21waWxlLWhvc3QtcGF0aCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7cmVjaXBlbmFtZSZndDs6IFRoZSBjb21waWxlIGxvZyBpbmRpY2F0ZXMgdGhhdCBob3N0IGluY2x1ZGUgYW5kL29yIGxpYnJhcnkgcGF0aHMgd2VyZSB1c2VkLiBQbGVhc2UgY2hlY2sgdGhlIGxvZyAnJmx0O2xvZ2ZpbGUmZ3Q7JyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gW2NvbXBpbGUtaG9zdC1wYXRoXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2cgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBpbmRpY2F0ZXMgdGhhdCBwYXRocyBvbiB0aGUgaG9zdCB3ZXJlIHNlYXJjaGVkCisgICAgICAgICAgICAgICAgICAgIGZvciBmaWxlcywgd2hpY2ggaXMgbm90IGFwcHJvcHJpYXRlIHdoZW4gY3Jvc3MtY29tcGlsaW5nLgorICAgICAgICAgICAgICAgICAgICBMb29rIGZvciAiaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbiIgb3IgIkNST1NTIENPTVBJTEUKKyAgICAgICAgICAgICAgICAgICAgQmFkbmVzcyIgaW4gdGhlIHNwZWNpZmllZCBsb2cgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWluc3RhbGwtaG9zdC1wYXRoJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtyZWNpcGVuYW1lJmd0OzogVGhlIGluc3RhbGwgbG9nIGluZGljYXRlcyB0aGF0IGhvc3QgaW5jbHVkZSBhbmQvb3IgbGlicmFyeSBwYXRocyB3ZXJlIHVzZWQuIFBsZWFzZSBjaGVjayB0aGUgbG9nICcmbHQ7bG9nZmlsZSZndDsnIGZvciBtb3JlIGluZm9ybWF0aW9uLiBbaW5zdGFsbC1ob3N0LXBhdGhdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvZyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIGluZGljYXRlcyB0aGF0IHBhdGhzIG9uIHRoZSBob3N0IHdlcmUgc2VhcmNoZWQKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZpbGVzLCB3aGljaCBpcyBub3QgYXBwcm9wcmlhdGUgd2hlbiBjcm9zcy1jb21waWxpbmcuCisgICAgICAgICAgICAgICAgICAgIExvb2sgZm9yICJpcyB1bnNhZmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uIgorICAgICAgICAgICAgICAgICAgICBvciAiQ1JPU1MgQ09NUElMRSBCYWRuZXNzIiBpbiB0aGUgc3BlY2lmaWVkIGxvZyBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtYXV0b2NvbmYtbG9nJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIFRoaXMgYXV0b2NvbmYgbG9nIGluZGljYXRlcyBlcnJvcnMsIGl0IGxvb2tlZCBhdCBob3N0IGluY2x1ZGUgYW5kL29yIGxpYnJhcnkgcGF0aHMgd2hpbGUgZGV0ZXJtaW5pbmcgc3lzdGVtIGNhcGFiaWxpdGllcy4gUmVydW4gY29uZmlndXJlIHRhc2sgYWZ0ZXIgZml4aW5nIHRoaXMuIFRoZSBwYXRoIHdhcyAnJmx0O3BhdGgmZ3Q7JworICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2cgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgaW5kaWNhdGVzIHRoYXQgcGF0aHMgb24gdGhlIGhvc3Qgd2VyZSBzZWFyY2hlZAorICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZXMsIHdoaWNoIGlzIG5vdCBhcHByb3ByaWF0ZSB3aGVuIGNyb3NzLWNvbXBpbGluZy4KKyAgICAgICAgICAgICAgICAgICAgTG9vayBmb3IgImlzIHVuc2FmZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24iIG9yCisgICAgICAgICAgICAgICAgICAgICJDUk9TUyBDT01QSUxFIEJhZG5lc3MiIGluIHRoZSBzcGVjaWZpZWQgbG9nIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1wa2duYW1lJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtwYWNrYWdlbmFtZSZndDsgZG9lc24ndCBtYXRjaCB0aGUgW2EtejAtOS4rLV0rIHJlZ2V4IFtwa2duYW1lXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjb252ZW50aW9uIHdpdGhpbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAoc29tZXRpbWVzIGVuZm9yY2VkIGJ5IHRoZSBwYWNrYWdlIG1hbmFnZXIgaXRzZWxmKSBpcyB0bworICAgICAgICAgICAgICAgICAgICByZXF1aXJlIHRoYXQgcGFja2FnZSBuYW1lcyBhcmUgYWxsIGxvd2VyIGNhc2UKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRvIGFsbG93IGEgcmVzdHJpY3RlZCBzZXQgb2YgY2hhcmFjdGVycy4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91ciByZWNpcGUgbmFtZSBkb2VzIG5vdCBtYXRjaCB0aGlzLCBvciB5b3UgYWRkCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRoYXQgZG8gbm90IGNvbmZvcm0gdG8gdGhlIGNvbnZlbnRpb24sIHRoZW4geW91CisgICAgICAgICAgICAgICAgICAgIHdpbGwgcmVjZWl2ZSB0aGlzIGVycm9yLgorICAgICAgICAgICAgICAgICAgICBSZW5hbWUgeW91ciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIE9yLCBpZiB5b3UgaGF2ZSBhZGRlZCBhIG5vbi1jb25mb3JtaW5nIHBhY2thZ2UgbmFtZSB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPiwgY2hhbmdlIHRoZSBwYWNrYWdlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLXVua25vd24tY29uZmlndXJlLW9wdGlvbic+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7cmVjaXBlJmd0OzogY29uZmlndXJlIHdhcyBwYXNzZWQgdW5yZWNvZ25pemVkIG9wdGlvbnM6ICZsdDtvcHRpb25zJmd0OyBbdW5rbm93bi1jb25maWd1cmUtb3B0aW9uXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjb25maWd1cmUgc2NyaXB0IGlzIHJlcG9ydGluZyB0aGF0IHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyBhcmUgdW5yZWNvZ25pemVkLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNpdHVhdGlvbiBjb3VsZCBiZSBiZWNhdXNlIHRoZSBvcHRpb25zCisgICAgICAgICAgICAgICAgICAgIHdlcmUgcHJldmlvdXNseSB2YWxpZCBidXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgT3IsIHRoZXJlIHdhcyBhIG1pc3Rha2Ugd2hlbiB0aGUgb3B0aW9ucyB3ZXJlIGFkZGVkCisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGVyZSBpcyBhbm90aGVyIG9wdGlvbiB0aGF0IHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdW5zdXJlLCBjb25zdWx0IHRoZSB1cHN0cmVhbSBidWlsZAorICAgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi4vY29uZmlndXJlIC0taGVscDwvZmlsZW5hbWU+IG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSB1cHN0cmVhbSBjaGFuZ2UgbG9nIG9yIHJlbGVhc2Ugbm90ZXMuCisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgd29ya2VkIG91dCB3aGF0IHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgaXMsIHlvdSBjYW4gdXBkYXRlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IgdGhlIGluZGl2aWR1YWwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VDT05GSUcnPjxmaWxlbmFtZT5QQUNLQUdFQ09ORklHPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbiB2YWx1ZXMgYWNjb3JkaW5nbHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1wbi1vdmVycmlkZXMnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgUmVjaXBlICZsdDtyZWNpcGVmaWxlJmd0OyBoYXMgUE4gb2YgIiZsdDtyZWNpcGVuYW1lJmd0OyIgd2hpY2ggaXMgaW4gT1ZFUlJJREVTLCB0aGlzIGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBiZWhhdmlvci4gW3BuLW92ZXJyaWRlc10KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIHJlY2lwZSBoYXMgYSBuYW1lCisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPikKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgdGhhdCBhcHBlYXJzIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPjxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIElmIGEgcmVjaXBlIGlzIG5hbWVkIHN1Y2ggdGhhdCBpdHMgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgbWF0Y2hlcyBzb21ldGhpbmcgYWxyZWFkeSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gKGUuZy4gPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaGFwcGVucyB0byBiZSB0aGUgc2FtZSBhcworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RSTyc+PGZpbGVuYW1lPkRJU1RSTzwvZmlsZW5hbWU+PC9saW5rPiksCisgICAgICAgICAgICAgICAgICAgIGl0IGNhbiBoYXZlIHVuZXhwZWN0ZWQgY29uc2VxdWVuY2VzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYXNzaWdubWVudHMgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVNfJHtQTn0gPSAieHl6IjwvZmlsZW5hbWU+IGVmZmVjdGl2ZWx5CisgICAgICAgICAgICAgICAgICAgIHR1cm4gaW50byA8ZmlsZW5hbWU+RklMRVMgPSAieHl6IjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBSZW5hbWUgeW91ciByZWNpcGUgKG9yIGlmIDxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+IGlzIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIHNldCBleHBsaWNpdGx5LCBjaGFuZ2UgdGhlIDxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+IHZhbHVlKSBzbworICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSBjb25mbGljdCBkb2VzIG5vdCBvY2N1ci4KKyAgICAgICAgICAgICAgICAgICAgU2VlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtcGtndmFyY2hlY2snPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O3JlY2lwZWZpbGUmZ3Q7OiBWYXJpYWJsZSAmbHQ7dmFyaWFibGUmZ3Q7IGlzIHNldCBhcyBub3QgYmVpbmcgcGFja2FnZSBzcGVjaWZpYywgcGxlYXNlIGZpeCB0aGlzLiBbcGtndmFyY2hlY2tdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ2VydGFpbiB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJTVUdHRVNUUyc+PGZpbGVuYW1lPlJTVUdHRVNUUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJDT05GTElDVFMnPjxmaWxlbmFtZT5SQ09ORkxJQ1RTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlBST1ZJREVTJz48ZmlsZW5hbWU+UlBST1ZJREVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFUExBQ0VTJz48ZmlsZW5hbWU+UlJFUExBQ0VTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wcmVpbnN0PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcG9zdGluc3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wcmVybTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3Bvc3RybTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUFMTE9XX0VNUFRZJz48ZmlsZW5hbWU+QUxMT1dfRU1QVFk8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBhbHdheXMgYmUgc2V0IHNwZWNpZmljIHRvIGEgcGFja2FnZSAoaS5lLiB0aGV5CisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBzZXQgd2l0aCBhIHBhY2thZ2UgbmFtZSBvdmVycmlkZSBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EU18ke1BOfSA9ICJ2YWx1ZSI8L2ZpbGVuYW1lPiByYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFMgPSAidmFsdWUiPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgcmVjZWl2ZSB0aGlzIGVycm9yLCBjb3JyZWN0IGFueSBhc3NpZ25tZW50cyB0byB0aGVzZQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgd2l0aGluIHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtYWxyZWFkeS1zdHJpcHBlZCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBGaWxlICcmbHQ7ZmlsZSZndDsnIGZyb20gJmx0O3JlY2lwZW5hbWUmZ3Q7IHdhcyBhbHJlYWR5IHN0cmlwcGVkLCB0aGlzIHdpbGwgcHJldmVudCBmdXR1cmUgZGVidWdnaW5nISBbYWxyZWFkeS1zdHJpcHBlZF0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQcm9kdWNlZCBiaW5hcmllcyBoYXZlIGFscmVhZHkgYmVlbiBzdHJpcHBlZCBwcmlvciB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGV4dHJhY3RpbmcgZGVidWcgc3ltYm9scy4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgY29tbW9uIGZvciB1cHN0cmVhbSBzb2Z0d2FyZSBwcm9qZWN0cyB0byBkZWZhdWx0IHRvCisgICAgICAgICAgICAgICAgICAgIHN0cmlwcGluZyBkZWJ1ZyBzeW1ib2xzIGZvciBvdXRwdXQgYmluYXJpZXMuCisgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIGZvciBkZWJ1Z2dpbmcgdG8gd29yayBvbiB0aGUgdGFyZ2V0IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4gcGFja2FnZXMsIHRoaXMgc3RyaXBwaW5nIG11c3QgYmUKKyAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgYnVpbGQgc3lzdGVtIHVzZWQgYnkgdGhlIHNvZnR3YXJlIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0LCBkaXNhYmxpbmcgdGhpcyBzdHJpcHBpbmcgY291bGQgYmUgYXMgZWFzeSBhcworICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5aW5nIGFuIGFkZGl0aW9uYWwgY29uZmlndXJlIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSWYgbm90LCBkaXNhYmxpbmcgc3RyaXBwaW5nIG1pZ2h0IGludm9sdmUgcGF0Y2hpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHNjcmlwdHMuCisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBsYXR0ZXIgY2FzZSwgbG9vayBmb3IgcmVmZXJlbmNlcyB0byAic3RyaXAiIG9yCisgICAgICAgICAgICAgICAgICAgICJTVFJJUCIsIG9yIHRoZSAiLXMiIG9yICItUyIgY29tbWFuZC1saW5lIG9wdGlvbnMgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIG9uIHRoZSBsaW5rZXIgY29tbWFuZCBsaW5lIChwb3NzaWJseQorICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBjb21waWxlciBjb21tYW5kIGxpbmUgaWYgcHJlY2VkZWQgd2l0aCAiLVdsLCIpLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIERpc2FibGluZyBzdHJpcHBpbmcgaGVyZSBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZCBiaW5hcmllcyB3aWxsIGJlIHVuc3RyaXBwZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHNwbGl0cyBvdXQgZGVidWcKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMgdG8gdGhlIDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4gcGFja2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdpbGwgdGhlbiBzdHJpcCB0aGUgc3ltYm9scyBmcm9tIHRoZSBiaW5hcmllcy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtcGFja2FnZXMtbGlzdCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7cGFja2FnZW5hbWUmZ3Q7IGlzIGxpc3RlZCBpbiBQQUNLQUdFUyBtdWx0aXBsZSB0aW1lcywgdGhpcyBsZWFkcyB0byBwYWNrYWdpbmcgZXJyb3JzLiBbcGFja2FnZXMtbGlzdF0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQYWNrYWdlIG5hbWVzIG11c3QgYXBwZWFyIG9ubHkgb25jZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtaWdodCByZWNlaXZlIHRoaXMgZXJyb3IgaWYgeW91IGFyZSBhdHRlbXB0aW5nIHRvIGFkZCBhCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgdG8gPGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT4gdGhhdCBpcworICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGluIHRoZSB2YXJpYWJsZSdzIHZhbHVlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtZmlsZXMtaW52YWxpZCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBGSUxFUyB2YXJpYWJsZSBmb3IgcGFja2FnZSAmbHQ7cGFja2FnZW5hbWUmZ3Q7IGNvbnRhaW5zICcvLycgd2hpY2ggaXMgaW52YWxpZC4gQXR0ZW1wdGluZyB0byBmaXggdGhpcyBidXQgeW91IHNob3VsZCBjb3JyZWN0IHRoZSBtZXRhZGF0YS4gW2ZpbGVzLWludmFsaWRdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHN0cmluZyAiLy8iIGlzIGludmFsaWQgaW4gYSBVbml4IHBhdGguCisgICAgICAgICAgICAgICAgICAgIENvcnJlY3QgYWxsIG9jY3VycmVuY2VzIHdoZXJlIHRoaXMgc3RyaW5nIGFwcGVhcnMgaW4gYQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBzbyB0aGF0IHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgIi8iLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtaW5zdGFsbGVkLXZzLXNoaXBwZWQnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgICZsdDtyZWNpcGVuYW1lJmd0OzogRmlsZXMvZGlyZWN0b3JpZXMgd2VyZSBpbnN0YWxsZWQgYnV0IG5vdCBzaGlwcGVkIFtpbnN0YWxsZWQtdnMtc2hpcHBlZF0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGaWxlcyBoYXZlIGJlZW4gaW5zdGFsbGVkIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgYnV0IGhhdmUgbm90IGJlZW4gaW5jbHVkZWQgaW4gYW55IHBhY2thZ2UgYnkgd2F5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgRmlsZXMgdGhhdCBkbyBub3QgYXBwZWFyIGluIGFueSBwYWNrYWdlIGNhbm5vdCBiZSBwcmVzZW50IGluCisgICAgICAgICAgICAgICAgICAgIGFuIGltYWdlIGxhdGVyIG9uIGluIHRoZSBidWlsZCBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgdGhlIGZpbGVzIHRvIDxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIHlvdSB3YW50IHRoZW0gdG8gYXBwZWFyIGluIChlLmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTXyR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4gZm9yIHRoZSBtYWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlIHRoZSBmaWxlcyBhdCB0aGUgZW5kIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gdGFzayBpZiB0aGUgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgbm90IG5lZWRlZCBpbiBhbnkgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1vbGQtYW5kLW5ldy1wYWNrYWdlLWFuZC12ZXJzaW9uLW5hbWVzJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtvbGRwYWNrYWdlJmd0Oy0mbHQ7b2xkcGtndmVyc2lvbiZndDsgd2FzIHJlZ2lzdGVyZWQgYXMgc2hsaWIgcHJvdmlkZXIgZm9yICZsdDtsaWJyYXJ5Jmd0OywgY2hhbmdpbmcgaXQgdG8gJmx0O25ld3BhY2thZ2UmZ3Q7LSZsdDtuZXdwa2d2ZXJzaW9uJmd0OyBiZWNhdXNlIGl0IHdhcyBidWlsdCBsYXRlcgorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgbWVzc2FnZSBtZWFucyB0aGF0IGJvdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZsdDtvbGRwYWNrYWdlJmd0OzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Jmx0O25ld3BhY2thZ2UmZ3Q7PC9maWxlbmFtZT4gcHJvdmlkZSB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGV4cGVjdCB0aGlzIG1lc3NhZ2Ugd2hlbiBhIHJlY2lwZSBoYXMgYmVlbiByZW5hbWVkLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgdGhlIG1lc3NhZ2UgbWlnaHQgaW5kaWNhdGUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBhIHByaXZhdGUgdmVyc2lvbiBvZiBhIGxpYnJhcnkgaXMgYmVpbmcgZXJyb25lb3VzbHkKKyAgICAgICAgICAgICAgICAgICAgcGlja2VkIHVwIGFzIHRoZSBwcm92aWRlciBmb3IgYSBjb21tb24gbGlicmFyeS4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhhdCBpcyB0aGUgY2FzZSwgeW91IHNob3VsZCBhZGQgdGhlIGxpYnJhcnkncworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gZmlsZSBuYW1lIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUklWQVRFX0xJQlMnPjxmaWxlbmFtZT5QUklWQVRFX0xJQlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHJlY2lwZSB0aGF0IHByb3ZpZGVzCisgICAgICAgICAgICAgICAgICAgIHRoZSBwcml2YXRlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCis8IS0tCitIZXJlIGFyZSBzb21lIG1lc3NhZ2VzIHRoYXQgbWlnaHQgYmUgZG9jdW1lbnRlZCBpbiB0aGUgZnV0dXJlLgorUmlnaHQgbm93IHdlIGFyZSBub3QgZG9jdW1lbnRpbmcgdGhlbSBiZWNhdXNlIHRoZSBRQSBjaGVja3MgYXJlIG5vdAorZW5hYmxlZCBieSBkZWZhdWx0OgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBEZXNrdG9wIGZpbGUgaXNzdWU6ICZsdDtlcnJvciZndDsgW2Rlc2t0b3BdCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE5FRUQgQSBERVNDUklQVElPTiBBTkQgU09MVVRJT04KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAmbHQ7cGFja2FnZW5hbWUmZ3Q7OiAmbHQ7ZmlsZSZndDssIGluc3RhbGxlZCBpbiB0aGUgYmFzZV9wcmVmaXgsIHJlcXVpcmVzIGEgc2hhcmVkIGxpYnJhcnkgdW5kZXIgZXhlY19wcmVmaXggKCZsdDtleGVjX3ByZWZpeCZ0O2cpIFt1bnNhZmUtcmVmZXJlbmNlcy1pbi1iaW5hcmllc10KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTkVFRCBBIERFU0NSSVBUSU9OIEFORCBTT0xVVElPTgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICZsdDtwYWNrYWdlbmFtZSZndDs6IEZvdW5kIGEgcmVmZXJlbmNlIHRvICZsdDtleGVjX3ByZWZpeCZndDsvIGluICZsdDtwYXRoJmd0OyAtIFNoZWxsIHNjcmlwdHMgaW4gYmFzZV9iaW5kaXIgYW5kIGJhc2Vfc2JpbmRpciBzaG91bGQgbm90IHJlZmVyZW5jZSBhbnl0aGluZyBpbiBleGVjX3ByZWZpeCBbdW5zYWZlLXJlZmVyZW5jZXMtaW4tc2NyaXB0c10KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTkVFRCBBIERFU0NSSVBUSU9OIEFORCBTT0xVVElPTgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CistLT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLWFuZC1kaXNhYmxpbmctcWEtY2hlY2tzJz4KKyAgICA8dGl0bGU+Q29uZmlndXJpbmcgYW5kIERpc2FibGluZyBRQSBDaGVja3M8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gY29uZmlndXJlIHRoZSBRQSBjaGVja3MgZ2xvYmFsbHkgc28gdGhhdCBzcGVjaWZpYyBjaGVjaworICAgICAgICBmYWlsdXJlcyBlaXRoZXIgcmFpc2UgYSB3YXJuaW5nIG9yIGFuIGVycm9yIG1lc3NhZ2UsIHVzaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItV0FSTl9RQSc+PGZpbGVuYW1lPldBUk5fUUE8L2ZpbGVuYW1lPjwvbGluaz4gYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FUlJPUl9RQSc+PGZpbGVuYW1lPkVSUk9SX1FBPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlcywgcmVzcGVjdGl2ZWx5LgorICAgICAgICBZb3UgY2FuIGFsc28gZGlzYWJsZSBjaGVja3Mgd2l0aGluIGEgcGFydGljdWxhciByZWNpcGUgdXNpbmcKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOU0FORV9TS0lQJz48ZmlsZW5hbWU+SU5TQU5FX1NLSVA8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gd29yayB3aXRoIHRoZSBRQSBjaGVja3MsIHNlZSB0aGUKKyAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZS5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICBzZWN0aW9uLgorICAgICAgICA8bm90ZT48dGl0bGU+VGlwPC90aXRsZT4KKyAgICAgICAgICAgIFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCB0aGUgUUEgY2hlY2tzIGV4aXN0IGluIG9yZGVyIHRvCisgICAgICAgICAgICBkZXRlY3QgcmVhbCBvciBwb3RlbnRpYWwgcHJvYmxlbXMgaW4gdGhlIHBhY2thZ2VkIG91dHB1dC4KKyAgICAgICAgICAgIFNvIGV4ZXJjaXNlIGNhdXRpb24gd2hlbiBkaXNhYmxpbmcgdGhlc2UgY2hlY2tzLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtc3RydWN0dXJlLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1zdHJ1Y3R1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZTM5MjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtc3RydWN0dXJlLnhtbApAQCAtMCwwICsxLDExNTMgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdyZWYtc3RydWN0dXJlJz4KKworPHRpdGxlPlNvdXJjZSBEaXJlY3RvcnkgU3RydWN0dXJlPC90aXRsZT4KKworPHBhcmE+CisgICAgVGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPiBjb25zaXN0cyBvZiBzZXZlcmFsIGNvbXBvbmVudHMuCisgICAgVW5kZXJzdGFuZGluZyB0aGVtIGFuZCBrbm93aW5nIHdoZXJlIHRoZXkgYXJlIGxvY2F0ZWQgaXMga2V5IHRvIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0IHdlbGwuCisgICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyB0aGUgU291cmNlIERpcmVjdG9yeSBhbmQgZ2l2ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZhcmlvdXMKKyAgICBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCis8L3BhcmE+CisKKzxwYXJhPgorICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZXN0YWJsaXNoIGEgbG9jYWwgU291cmNlIERpcmVjdG9yeSBvbiB5b3VyIGRldmVsb3BtZW50IHN5c3RlbSwgc2VlIHRoZQorICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNnZXR0aW5nLXNldHVwJz5HZXR0aW5nIFNldCBVcDwvdWxpbms+IgorICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorPC9wYXJhPgorCis8bm90ZT4KKyAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IGZpbGUgb3IgZGlyZWN0b3J5IG5hbWVzIHRoYXQKKyAgICBjb250YWluIHNwYWNlcy4KKyAgICBCZSBzdXJlIHRoYXQgdGhlIFNvdXJjZSBEaXJlY3RvcnkgeW91IHVzZSBkb2VzIG5vdCBjb250YWluIHRoZXNlIHR5cGVzCisgICAgb2YgbmFtZXMuCis8L25vdGU+CisKKzxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtY29yZSc+CisgICAgPHRpdGxlPlRvcC1MZXZlbCBDb3JlIENvbXBvbmVudHM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIHRvcC1sZXZlbCBjb21wb25lbnRzIG9mIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1jb3JlLWJpdGJha2UnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJpdGJha2UvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgaW5jbHVkZXMgYSBjb3B5IG9mIEJpdEJha2UgZm9yIGVhc2Ugb2YgdXNlLgorICAgICAgICAgICAgVGhlIGNvcHkgdXN1YWxseSBtYXRjaGVzIHRoZSBjdXJyZW50IHN0YWJsZSBCaXRCYWtlIHJlbGVhc2UgZnJvbQorICAgICAgICAgICAgdGhlIEJpdEJha2UgcHJvamVjdC4KKyAgICAgICAgICAgIEJpdEJha2UsIGEKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICBpbnRlcnByZXRlciwgcmVhZHMgdGhlIFlvY3RvIFByb2plY3QgTWV0YWRhdGEgYW5kIHJ1bnMgdGhlIHRhc2tzCisgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoYXQgZGF0YS4KKyAgICAgICAgICAgIEZhaWx1cmVzIGFyZSB1c3VhbGx5IGZyb20gdGhlIE1ldGFkYXRhIGFuZCBub3QgZnJvbSBCaXRCYWtlIGl0c2VsZi4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgbW9zdCB1c2VycyBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBCaXRCYWtlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBydW4gdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCwgdGhlCisgICAgICAgICAgICBtYWluIEJpdEJha2UgZXhlY3V0YWJsZSwgd2hpY2ggcmVzaWRlcyBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlL2Jpbi88L2ZpbGVuYW1lPiBkaXJlY3RvcnksIHN0YXJ0cy4KKyAgICAgICAgICAgIFNvdXJjaW5nIGFuIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCAoZS5nLgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ic3RydWN0dXJlLWNvcmUtc2NyaXB0Ij48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG9yCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSJzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Ij48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgcGxhY2VzIHRoZSA8ZmlsZW5hbWU+c2NyaXB0czwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UvYmluPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgKGluIHRoYXQgb3JkZXIpIGludG8KKyAgICAgICAgICAgIHRoZSBzaGVsbCdzIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gZW52aXJvbm1lbnQgdmFyaWFibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEJpdEJha2UsIHNlZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsnPkJpdEJha2UgVXNlciBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtY29yZS1idWlsZCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdXNlciBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCB0aGUgb3V0cHV0CisgICAgICAgICAgICBnZW5lcmF0ZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaW4gaXRzIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gd2hlcmUKKyAgICAgICAgICAgIHRoZSBzb3VyY2UgdHJlZSBpcyBjb21iaW5lZCB3aXRoIHRoZSBvdXRwdXQuCisgICAgICAgICAgICBUaGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgaXMgY3JlYXRlZCBpbml0aWFsbHkgd2hlbiB5b3UgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+CisgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdAorICAgICAgICAgICAgKGkuZS4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBvcgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gcGxhY2Ugb3V0cHV0IGFuZCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmaWxlcyBpbiBhIGRpcmVjdG9yeSBzZXBhcmF0ZSBmcm9tIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICBieSBwcm92aWRpbmcgYSBkaXJlY3RvcnkgbmFtZSB3aGVuIHlvdSA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHRoZSBzZXR1cCBzY3JpcHQuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gc2VwYXJhdGluZyBvdXRwdXQgZnJvbSB5b3VyIGxvY2FsCisgICAgICAgICAgICBTb3VyY2UgRGlyZWN0b3J5IGZpbGVzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdoYW5kYm9vayc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9jdW1lbnRhdGlvbi88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBob2xkcyB0aGUgc291cmNlIGZvciB0aGUgWW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uCisgICAgICAgICAgICBhcyB3ZWxsIGFzIHRlbXBsYXRlcyBhbmQgdG9vbHMgdGhhdCBhbGxvdyB5b3UgdG8gZ2VuZXJhdGUgUERGIGFuZCBIVE1MCisgICAgICAgICAgICB2ZXJzaW9ucyBvZiB0aGUgbWFudWFscy4KKyAgICAgICAgICAgIEVhY2ggbWFudWFsIGlzIGNvbnRhaW5lZCBpbiBhIHN1Yi1mb2xkZXIuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZpbGVzIGZvciB0aGlzIG1hbnVhbCByZXNpZGUgaW4KKyAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+cmVmLW1hbnVhbC88L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWNvcmUtbWV0YSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgT3BlbkVtYmVkZGVkIENvcmUgbWV0YWRhdGEuCisgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGhvbGRzIHJlY2lwZXMsIGNvbW1vbiBjbGFzc2VzLCBhbmQgbWFjaGluZQorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmb3IgZW11bGF0ZWQgdGFyZ2V0cyAoPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11YXJtPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aC4pCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWNvcmUtbWV0YS15b2N0byc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS15b2N0by88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIFBva3kKKyAgICAgICAgICAgIHJlZmVyZW5jZSBkaXN0cmlidXRpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWNvcmUtbWV0YS15b2N0by1ic3AnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBZb2N0byBQcm9qZWN0IHJlZmVyZW5jZQorICAgICAgICAgICAgaGFyZHdhcmUgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcykuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBCU1BzLCBzZWUgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyc+WW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0CisgICAgICAgICAgICBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtc2VsZnRlc3QnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEtc2VsZnRlc3QvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgYWRkcyBhZGRpdGlvbmFsIHJlY2lwZXMgYW5kIGFwcGVuZCBmaWxlcworICAgICAgICAgICAgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIHNlbGZ0ZXN0cyB0byB2ZXJpZnkgdGhlIGJlaGF2aW9yCisgICAgICAgICAgICBvZiB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgZG8gbm90IGhhdmUgdG8gYWRkIHRoaXMgbGF5ZXIgdG8geW91cgorICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHVubGVzcyB5b3Ugd2FudCB0byBydW4gdGhlCisgICAgICAgICAgICBzZWxmdGVzdHMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtc2tlbGV0b24nPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEtc2tlbGV0b24vPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGVtcGxhdGUgcmVjaXBlcyBmb3IgQlNQIGFuZCBrZXJuZWwgZGV2ZWxvcG1lbnQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0cyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+c2NyaXB0cy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB2YXJpb3VzIGludGVncmF0aW9uIHNjcmlwdHMgdGhhdCBpbXBsZW1lbnQKKyAgICAgICAgICAgIGV4dHJhIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIFlvY3RvIFByb2plY3QgZW52aXJvbm1lbnQgKGUuZy4gUUVNVSBzY3JpcHRzKS4KKyAgICAgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSJzdHJ1Y3R1cmUtY29yZS1zY3JpcHQiPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBzY3JpcHRzIGFwcGVuZCB0aGlzIGRpcmVjdG9yeSB0byB0aGUgc2hlbGwncworICAgICAgICAgICAgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGhhcyB1c2VmdWwgc2NyaXB0cyB0aGF0IGFzc2lzdCBpbiBjb250cmlidXRpbmcKKyAgICAgICAgICAgIGJhY2sgdG8gdGhlIFlvY3RvIFByb2plY3QsIHN1Y2ggYXMgPGZpbGVuYW1lPmNyZWF0ZS1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zZW5kLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNjcmlwdCBpcyBvbmUgb2YgdHdvIHNjcmlwdHMgdGhhdCBzZXQgdXAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIG90aGVyIHNjcmlwdCwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSdW5uaW5nIHRoaXMgc2NyaXB0IHdpdGggdGhlIDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPiBjb21tYW5kIGluCisgICAgICAgICAgICBhIHNoZWxsIG1ha2VzIGNoYW5nZXMgdG8gPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiBhbmQgc2V0cyBvdGhlcgorICAgICAgICAgICAgY29yZSBCaXRCYWtlIHZhcmlhYmxlcyBiYXNlZCBvbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFlvdSBuZWVkIHRvIHJ1biBhbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgYmVmb3JlIHJ1bm5pbmcgQml0QmFrZQorICAgICAgICAgICAgY29tbWFuZHMuCisgICAgICAgICAgICBUaGUgc2NyaXB0IHVzZXMgb3RoZXIgc2NyaXB0cyB3aXRoaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0czwvZmlsZW5hbWU+IGRpcmVjdG9yeSB0byBkbyB0aGUgYnVsayBvZiB0aGUgd29yay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgcnVuIHRoaXMgc2NyaXB0LCB5b3VyIFlvY3RvIFByb2plY3QgZW52aXJvbm1lbnQgaXMgc2V0CisgICAgICAgICAgICB1cCwgYQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgaXMgY3JlYXRlZCwgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBiZWNvbWVzIHRoZSBCdWlsZCBEaXJlY3RvcnksCisgICAgICAgICAgICBhbmQgeW91IGFyZSBwcmVzZW50ZWQgd2l0aCBhIGxpc3Qgb2YgY29tbW9uIEJpdEJha2UgdGFyZ2V0cy4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYKKworICAgICAjIyMgU2hlbGwgZW52aXJvbm1lbnQgc2V0IHVwIGZvciBidWlsZHMuICMjIworCisgICAgIFlvdSBjYW4gbm93IHJ1biAnYml0YmFrZSAmbHQ7dGFyZ2V0Jmd0OycKKworICAgICBDb21tb24gdGFyZ2V0cyBhcmU6CisgICAgICAgICBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgICAgIGNvcmUtaW1hZ2Utc2F0bworICAgICAgICAgbWV0YS10b29sY2hhaW4KKyAgICAgICAgIGFkdC1pbnN0YWxsZXIKKyAgICAgICAgIG1ldGEtaWRlLXN1cHBvcnQKKworICAgICBZb3UgY2FuIGFsc28gcnVuIGdlbmVyYXRlZCBxZW11IGltYWdlcyB3aXRoIGEgY29tbWFuZCBsaWtlICdydW5xZW11IHFlbXV4ODYnCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgc2NyaXB0IGdldHMgaXRzIGRlZmF1bHQgbGlzdCBvZiBjb21tb24gdGFyZ2V0cyBmcm9tIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYtbm90ZXMudHh0PC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgZm91bmQgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICBTaG91bGQgeW91IGhhdmUgY3VzdG9tIGRpc3RyaWJ1dGlvbnMsIGl0IGlzIHZlcnkgZWFzeSB0byBtb2RpZnkKKyAgICAgICAgICAgIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlIHRvIGluY2x1ZGUgeW91ciB0YXJnZXRzIGZvciB5b3VyCisgICAgICAgICAgICBkaXN0cmlidXRpb24uCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctYS1jdXN0b20tdGVtcGxhdGUtY29uZmlndXJhdGlvbi1kaXJlY3RvcnknPkNyZWF0aW5nIGEgQ3VzdG9tIFRlbXBsYXRlIENvbmZpZ3VyYXRpb24gRGlyZWN0b3J5PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZQorICAgICAgICAgICAgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHJ1bm5pbmcgdGhpcyBzY3JpcHQgd2l0aG91dCBhCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICBhcmd1bWVudCBjcmVhdGVzIHRoZSA8ZmlsZW5hbWU+YnVpbGQ8L2ZpbGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgICAgIGluIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIElmIHlvdSBwcm92aWRlIGEgQnVpbGQgRGlyZWN0b3J5IGFyZ3VtZW50IHdoZW4geW91CisgICAgICAgICAgICA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4gdGhlIHNjcmlwdCwgeW91IGRpcmVjdCB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICBidWlsZCBzeXN0ZW0gdG8gY3JlYXRlIGEgQnVpbGQgRGlyZWN0b3J5IG9mIHlvdXIgY2hvaWNlLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBjcmVhdGVzIGEgQnVpbGQgRGlyZWN0b3J5IG5hbWVkCisgICAgICAgICAgICA8ZmlsZW5hbWU+bXlidWlsZHM8L2ZpbGVuYW1lPiB0aGF0IGlzIG91dHNpZGUgb2YgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlICZPRV9JTklUX0ZJTEU7IH4vbXlidWlsZHMKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIGZpbGVzLCB3aGljaCBhcmUgZm91bmQgYnkgZGVmYXVsdCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctYS1jdXN0b20tdGVtcGxhdGUtY29uZmlndXJhdGlvbi1kaXJlY3RvcnknPkNyZWF0aW5nIGEgQ3VzdG9tIFRlbXBsYXRlIENvbmZpZ3VyYXRpb24gRGlyZWN0b3J5PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZQorICAgICAgICAgICAgaW5mb3JtYXRpb24uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IGZpbGUgb3IgZGlyZWN0b3J5IG5hbWVzIHRoYXQKKyAgICAgICAgICAgICAgICBjb250YWluIHNwYWNlcy4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXR0ZW1wdCB0byBydW4gdGhlIDxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+IHNjcmlwdAorICAgICAgICAgICAgICAgIGZyb20gYSBTb3VyY2UgRGlyZWN0b3J5IHRoYXQgY29udGFpbnMgc3BhY2VzIGluIGVpdGhlciB0aGUgZmlsZW5hbWVzCisgICAgICAgICAgICAgICAgb3IgZGlyZWN0b3J5IG5hbWVzLCB0aGUgc2NyaXB0IHJldHVybnMgYW4gZXJyb3IgaW5kaWNhdGluZyBubyBzdWNoCisgICAgICAgICAgICAgICAgZmlsZSBvciBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgQmUgc3VyZSB0byB1c2UgYSBTb3VyY2UgRGlyZWN0b3J5IGZyZWUgb2YgbmFtZXMgY29udGFpbmluZyBzcGFjZXMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzY3JpcHQgaXMgb25lIG9mIHR3byBzY3JpcHRzIHRoYXQgc2V0IHVwIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgIGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICAgICAgQXNpZGUgZnJvbSBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudCwgdGhpcyBzY3JpcHQgc3RhcnRzIGEKKyAgICAgICAgICAgIG1lbW9yeS1yZXNpZGVudCBCaXRCYWtlIHNlcnZlci4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgb3RoZXIgc2V0dXAgc2NyaXB0LCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBNZW1vcnktcmVzaWRlbnQgQml0QmFrZSByZXNpZGVzIGluIG1lbW9yeSB1bnRpbCB5b3Ugc3BlY2lmaWNhbGx5CisgICAgICAgICAgICByZW1vdmUgaXQgdXNpbmcgdGhlIGZvbGxvd2luZyBCaXRCYWtlIGNvbW1hbmQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtbQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSdW5uaW5nIHRoaXMgc2NyaXB0IHdpdGggdGhlIDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPiBjb21tYW5kIGluCisgICAgICAgICAgICBhIHNoZWxsIG1ha2VzIGNoYW5nZXMgdG8gPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiBhbmQgc2V0cyBvdGhlcgorICAgICAgICAgICAgY29yZSBCaXRCYWtlIHZhcmlhYmxlcyBiYXNlZCBvbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIE9uZSBvZiB0aGVzZSB2YXJpYWJsZXMgaXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJTRVJWRVInPjxmaWxlbmFtZT5CQlNFUlZFUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGFsbG93cyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBsb2NhdGUKKyAgICAgICAgICAgIHRoZSBzZXJ2ZXIgdGhhdCBpcyBydW5uaW5nIEJpdEJha2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBuZWVkIHRvIHJ1biBhbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgYmVmb3JlIHVzaW5nIEJpdEJha2UKKyAgICAgICAgICAgIGNvbW1hbmRzLgorICAgICAgICAgICAgRm9sbG93aW5nIGlzIHRoZSBzY3JpcHQgc3ludGF4OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudi1tZW1yZXMgPHJlcGxhY2VhYmxlPnBvcnRfbnVtYmVyPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmJ1aWxkX2RpcjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHNvbWUgY29uc2lkZXJhdGlvbnMgd2hlbiBzb3VyY2luZyB0aGlzIHNjcmlwdDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc2NyaXB0IHVzZXMgb3RoZXIgc2NyaXB0cyB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gZGlyZWN0b3J5IHRvIGRvIHRoZSBidWxrIG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSB3b3JrLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgcHJvdmlkZSBhIHBvcnQgbnVtYmVyIHdpdGggdGhlIHNjcmlwdCwgdGhlCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugc2VydmVyIHN0YXJ0cyBhdCBhIHJhbmRvbWx5IHNlbGVjdGVkIHBvcnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCdzIHBhcmFtZXRlcnMgYXJlIHBvc2l0aW9uYWxseSBkZXBlbmRlbnQuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IGNhbm5vdCBydW4gdGhlIHNjcmlwdCBhbmQgcHJvdmlkZSBhCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgbmFtZSB3aXRob3V0IGFsc28gcHJvdmlkaW5nIGEgcG9ydCBudW1iZXIuCisgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUgZm9sbG93aW5nIHN5bnRheCBpcyBpbGxlZ2FsOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIG9lLWluaXRidWlsZC1lbnYtbWVtcmVzIDxyZXBsYWNlYWJsZT5idWlsZF9kaXI8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIHJlc3RyaWN0aW9uIG1pZ2h0IGJlIHJlc29sdmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZnV0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTUnPkJ1ZyA3NTU1PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4geW91IHJ1biB0aGlzIHNjcmlwdCwgeW91ciBZb2N0byBQcm9qZWN0IGVudmlyb25tZW50IGlzIHNldAorICAgICAgICAgICAgdXAsIGEgQnVpbGQgRGlyZWN0b3J5IGlzIGNyZWF0ZWQsIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgYmVjb21lcworICAgICAgICAgICAgdGhlIEJ1aWxkIERpcmVjdG9yeSwgYW5kIHlvdSBhcmUgcHJlc2VudGVkIHdpdGggYSBsaXN0IG9mIGNvbW1vbgorICAgICAgICAgICAgQml0QmFrZSB0YXJnZXRzLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudi1tZW1yZXMKKyAgICAgTm8gcG9ydCBzcGVjaWZpZWQsIHVzaW5nIGR5bmFtaWNhbGx5IHNlbGVjdGVkIHBvcnQKKworICAgICAjIyMgU2hlbGwgZW52aXJvbm1lbnQgc2V0IHVwIGZvciBidWlsZHMuICMjIworCisgICAgIFlvdSBjYW4gbm93IHJ1biAnYml0YmFrZSAmbHQ7dGFyZ2V0Jmd0OycKKworICAgICBDb21tb24gdGFyZ2V0cyBhcmU6CisgICAgICAgICBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgICAgIGNvcmUtaW1hZ2Utc2F0bworICAgICAgICAgbWV0YS10b29sY2hhaW4KKyAgICAgICAgIGFkdC1pbnN0YWxsZXIKKyAgICAgICAgIG1ldGEtaWRlLXN1cHBvcnQKKworICAgICBZb3UgY2FuIGFsc28gcnVuIGdlbmVyYXRlZCBxZW11IGltYWdlcyB3aXRoIGEgY29tbWFuZCBsaWtlICdydW5xZW11IHFlbXV4ODYnCisgICAgIEJpdGJha2Ugc2VydmVyIGFkZHJlc3M6IDEyNy4wLjAuMSwgc2VydmVyIHBvcnQ6IDUzOTk1CisgICAgIEJpdGJha2Ugc2VydmVyIHN0YXJ0ZWQgb24gZGVtYW5kIGFzIG5lZWRlZCwgdXNlIGJpdGJha2UgLW0gdG8gc2h1dCBpdCBkb3duCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgc2NyaXB0IGdldHMgaXRzIGRlZmF1bHQgbGlzdCBvZiBjb21tb24gdGFyZ2V0cyBmcm9tIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYtbm90ZXMudHh0PC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgZm91bmQgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICBTaG91bGQgeW91IGhhdmUgY3VzdG9tIGRpc3RyaWJ1dGlvbnMsIGl0IGlzIHZlcnkgZWFzeSB0byBtb2RpZnkKKyAgICAgICAgICAgIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlIHRvIGluY2x1ZGUgeW91ciB0YXJnZXRzIGZvciB5b3VyCisgICAgICAgICAgICBkaXN0cmlidXRpb24uCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctYS1jdXN0b20tdGVtcGxhdGUtY29uZmlndXJhdGlvbi1kaXJlY3RvcnknPkNyZWF0aW5nIGEgQ3VzdG9tIFRlbXBsYXRlIENvbmZpZ3VyYXRpb24gRGlyZWN0b3J5PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZQorICAgICAgICAgICAgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHJ1bm5pbmcgdGhpcyBzY3JpcHQgd2l0aG91dCBhCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICBhcmd1bWVudCBjcmVhdGVzIGEgYnVpbGQgZGlyZWN0b3J5IG5hbWVkCisgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIElmIHlvdSBwcm92aWRlIGEgQnVpbGQgRGlyZWN0b3J5IGFyZ3VtZW50IGFuZCBwb3J0IG51bWJlciB3aGVuIHlvdQorICAgICAgICAgICAgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+IHRoZSBzY3JpcHQsIHRoZSBCdWlsZCBEaXJlY3RvcnkgaXMKKyAgICAgICAgICAgIGNyZWF0ZWQgdXNpbmcgdGhhdCBuYW1lLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBzdGFydHMgdGhlIEJpdEJha2Ugc2VydmVyIHVzaW5nCisgICAgICAgICAgICBwb3J0IDUzOTk1IGFuZCBjcmVhdGVzIGEgQnVpbGQgRGlyZWN0b3J5IG5hbWVkCisgICAgICAgICAgICA8ZmlsZW5hbWU+bXlidWlsZHM8L2ZpbGVuYW1lPiB0aGF0IGlzIG91dHNpZGUgb2YgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52LW1lbXJlcyA1Mzk5NSB+L215YnVpbGRzCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+IHNjcmlwdCBzdGFydHMgYQorICAgICAgICAgICAgbWVtb3J5IHJlc2lkZW50IEJpdEJha2Ugc2VydmVyLgorICAgICAgICAgICAgVGhpcyBCaXRCYWtlIGluc3RhbmNlIHVzZXMgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS1jb29rZXJkYWVtb24ubG9nPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMKKyAgICAgICAgICAgIGxvY2F0ZWQgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgdGVtcGxhdGUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgZmlsZXMsIHdoaWNoIGFyZSBmb3VuZCBieSBkZWZhdWx0IGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLWN1c3RvbS10ZW1wbGF0ZS1jb25maWd1cmF0aW9uLWRpcmVjdG9yeSc+Q3JlYXRpbmcgYSBDdXN0b20gVGVtcGxhdGUgQ29uZmlndXJhdGlvbiBEaXJlY3Rvcnk8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlCisgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgZmlsZSBvcgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBuYW1lcyB0aGF0IGNvbnRhaW4gc3BhY2VzLgorICAgICAgICAgICAgICAgIElmIHlvdSBhdHRlbXB0IHRvIHJ1biB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT4gc2NyaXB0CisgICAgICAgICAgICAgICAgZnJvbSBhIFNvdXJjZSBEaXJlY3RvcnkgdGhhdCBjb250YWlucyBzcGFjZXMgaW4gZWl0aGVyIHRoZQorICAgICAgICAgICAgICAgIGZpbGVuYW1lcyBvciBkaXJlY3RvcnkgbmFtZXMsIHRoZSBzY3JpcHQgcmV0dXJucyBhbiBlcnJvcgorICAgICAgICAgICAgICAgIGluZGljYXRpbmcgbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHVzZSBhIFNvdXJjZSBEaXJlY3RvcnkgZnJlZSBvZiBuYW1lcyBjb250YWluaW5nCisgICAgICAgICAgICAgICAgc3BhY2VzLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1iYXNpYy10b3AtbGV2ZWwnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPkxJQ0VOU0UsIFJFQURNRSwgYW5kIFJFQURNRS5oYXJkd2FyZTwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZXNlIGZpbGVzIGFyZSBzdGFuZGFyZCB0b3AtbGV2ZWwgZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQnPgorICAgIDx0aXRsZT5UaGUgQnVpbGQgRGlyZWN0b3J5IC0gPGZpbGVuYW1lPmJ1aWxkLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgIHdoZW4geW91IHJ1biBvbmUgb2YgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdHMgKGkuZS4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgb3IKKyAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIHlvdSBkbyBub3QgZ2l2ZSB0aGUgQnVpbGQgRGlyZWN0b3J5IGEgc3BlY2lmaWMgbmFtZSB3aGVuIHlvdSBydW4KKyAgICAgICAgYSBzZXR1cCBzY3JpcHQsIHRoZSBuYW1lIGRlZmF1bHRzIHRvIDxmaWxlbmFtZT5idWlsZDwvZmlsZW5hbWU+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRPUERJUic+PGZpbGVuYW1lPlRPUERJUjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZQorICAgICAgICBwb2ludHMgdG8gdGhlIEJ1aWxkIERpcmVjdG9yeS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLWJ1aWxkaGlzdG9yeSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvYnVpbGRoaXN0b3J5PC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY3JlYXRlcyB0aGlzIGRpcmVjdG9yeSB3aGVuIHlvdQorICAgICAgICAgICAgZW5hYmxlIHRoZSBidWlsZCBoaXN0b3J5IGZlYXR1cmUuCisgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IHRyYWNrcyBidWlsZCBpbmZvcm1hdGlvbiBpbnRvIGltYWdlLCBwYWNrYWdlcywgYW5kCisgICAgICAgICAgICBTREsgc3ViZGlyZWN0b3JpZXMuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIGJ1aWxkIGhpc3RvcnkgZmVhdHVyZSwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21haW50YWluaW5nLWJ1aWxkLW91dHB1dC1xdWFsaXR5Jz5NYWludGFpbmluZyBCdWlsZCBPdXRwdXQgUXVhbGl0eTwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC1jb25mLWxvY2FsLmNvbmYnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL2NvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgbG9jYWwgdXNlciBjb25maWd1cmF0aW9ucworICAgICAgICAgICAgZm9yIHlvdXIgYnVpbGQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGNvbnRhaW5zIGRvY3VtZW50YXRpb24gb24KKyAgICAgICAgICAgIHRoZSB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyAgICAgICAgICAgIEFueSB2YXJpYWJsZSBzZXQgaGVyZSBvdmVycmlkZXMgYW55IHZhcmlhYmxlIHNldCBlbHNld2hlcmUgd2l0aGluCisgICAgICAgICAgICB0aGUgZW52aXJvbm1lbnQgdW5sZXNzIHRoYXQgdmFyaWFibGUgaXMgaGFyZC1jb2RlZCB3aXRoaW4gYSBmaWxlCisgICAgICAgICAgICAoZS5nLiBieSB1c2luZyAnPScgaW5zdGVhZCBvZiAnPz0nKS4KKyAgICAgICAgICAgIFNvbWUgdmFyaWFibGVzIGFyZSBoYXJkLWNvZGVkIGZvciB2YXJpb3VzIHJlYXNvbnMgYnV0IHRoZXNlCisgICAgICAgICAgICB2YXJpYWJsZXMgYXJlIHJlbGF0aXZlbHkgcmFyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRWRpdCB0aGlzIGZpbGUgdG8gc2V0IHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz5NQUNISU5FPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICBmb3Igd2hpY2ggeW91IHdhbnQgdG8gYnVpbGQsIHdoaWNoIHBhY2thZ2UgdHlwZXMgeW91IHdpc2ggdG8gdXNlCisgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPiksCisgICAgICAgICAgICBhbmQgdGhlIGxvY2F0aW9uIGZyb20gd2hpY2ggeW91IHdhbnQgdG8gYWNjZXNzIGRvd25sb2FkZWQgZmlsZXMKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+RExfRElSPC9saW5rPjwvZmlsZW5hbWU+KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBpcyBub3QgcHJlc2VudCB3aGVuIHlvdQorICAgICAgICAgICAgc3RhcnQgdGhlIGJ1aWxkLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzIGl0IGZyb20KKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IHdoZW4KKyAgICAgICAgICAgIHlvdSA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4gdGhlIHRvcC1sZXZlbCBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgc2V0dXAgc2NyaXB0IChpLmUuCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgb3IKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgc291cmNlIDxmaWxlbmFtZT5sb2NhbC5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IGZpbGUgdXNlZAorICAgICAgICAgICAgZGVwZW5kcyBvbiB0aGUgPGZpbGVuYW1lPiRURU1QTEFURUNPTkY8L2ZpbGVuYW1lPiBzY3JpcHQgdmFyaWFibGUsCisgICAgICAgICAgICB3aGljaCBkZWZhdWx0cyB0byA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHdoZW4geW91IGFyZSBidWlsZGluZyBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50CisgICAgICAgICAgICBlbnZpcm9ubWVudCBhbmQgZGVmYXVsdHMgdG8gPGZpbGVuYW1lPm1ldGEvY29uZjwvZmlsZW5hbWU+IHdoZW4KKyAgICAgICAgICAgIHlvdSBhcmUgYnVpbGRpbmcgZnJvbSB0aGUgT3BlbkVtYmVkZGVkIENvcmUgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBCZWNhdXNlIHRoZSBzY3JpcHQgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBzb3VyY2Ugb2YgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiBmaWxlLCB0aGlzIGltcGxpZXMgdGhhdAorICAgICAgICAgICAgeW91IGNhbiBjb25maWd1cmUgeW91ciBidWlsZCBlbnZpcm9ubWVudCBmcm9tIGFueSBsYXllciBieSBzZXR0aW5nCisgICAgICAgICAgICB0aGUgdmFyaWFibGUgaW4gdGhlIHRvcC1sZXZlbCBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgYXMKKyAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFTVBMQVRFQ09ORj08cmVwbGFjZWFibGU+eW91cl9sYXllcjwvcmVwbGFjZWFibGU+L2NvbmYKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9uY2UgdGhlIGJ1aWxkIHByb2Nlc3MgZ2V0cyB0aGUgc2FtcGxlIGZpbGUsIGl0IHVzZXMKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zZWQ8L2ZpbGVuYW1lPiB0byBzdWJzdGl0dXRlIGZpbmFsCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1PRVJPT1QnPjxmaWxlbmFtZT5PRVJPT1Q8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICB2YWx1ZXMgZm9yIGFsbCA8ZmlsZW5hbWU+IyNPRVJPT1QjIzwvZmlsZW5hbWU+IHZhbHVlcy4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIGhvdyB0aGUgPGZpbGVuYW1lPlRFTVBMQVRFQ09ORjwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgaXMgdXNlZCBieSBsb29raW5nIGF0IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL29lLXNldHVwLWJ1aWxkZGlyPC9maWxlbmFtZT4gc2NyaXB0IGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlIFlvY3RvIFByb2plY3QgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLWNvbmYtYmJsYXllcnMuY29uZic+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvY29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgZGVmaW5lcworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5sYXllcnM8L3VsaW5rPiwKKyAgICAgICAgICAgIHdoaWNoIGFyZSBkaXJlY3RvcnkgdHJlZXMsIHRyYXZlcnNlZCAob3Igd2Fsa2VkKSBieSBCaXRCYWtlLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSB1c2VzIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCTEFZRVJTJz48ZmlsZW5hbWU+QkJMQVlFUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHRvIGxpc3QgdGhlIGxheWVycyBCaXRCYWtlIHRyaWVzIHRvIGZpbmQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gaXMgbm90IHByZXNlbnQgd2hlbiB5b3UKKyAgICAgICAgICAgIHN0YXJ0IHRoZSBidWlsZCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY3JlYXRlcyBpdCBmcm9tCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiB3aGVuCisgICAgICAgICAgICB5b3UgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+IHRoZSB0b3AtbGV2ZWwgYnVpbGQgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIHNldHVwIHNjcmlwdCAoaS5lLgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG9yCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHNvdXJjZSA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiBmaWxlIHVzZWQKKyAgICAgICAgICAgIGRlcGVuZHMgb24gdGhlIDxmaWxlbmFtZT4kVEVNUExBVEVDT05GPC9maWxlbmFtZT4gc2NyaXB0IHZhcmlhYmxlLAorICAgICAgICAgICAgd2hpY2ggZGVmYXVsdHMgdG8gPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICB3aGVuIHlvdSBhcmUgYnVpbGRpbmcgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudAorICAgICAgICAgICAgZW52aXJvbm1lbnQgYW5kIGRlZmF1bHRzIHRvIDxmaWxlbmFtZT5tZXRhL2NvbmY8L2ZpbGVuYW1lPiB3aGVuCisgICAgICAgICAgICB5b3UgYXJlIGJ1aWxkaW5nIGZyb20gdGhlIE9wZW5FbWJlZGRlZCBDb3JlIGVudmlyb25tZW50LgorICAgICAgICAgICAgQmVjYXVzZSB0aGUgc2NyaXB0IHZhcmlhYmxlIHBvaW50cyB0byB0aGUgc291cmNlIG9mIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gZmlsZSwgdGhpcyBpbXBsaWVzIHRoYXQKKyAgICAgICAgICAgIHlvdSBjYW4gYmFzZSB5b3VyIGJ1aWxkIGZyb20gYW55IGxheWVyIGJ5IHNldHRpbmcgdGhlIHZhcmlhYmxlIGluCisgICAgICAgICAgICB0aGUgdG9wLWxldmVsIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURU1QTEFURUNPTkY9PHJlcGxhY2VhYmxlPnlvdXJfbGF5ZXI8L3JlcGxhY2VhYmxlPi9jb25mCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBPbmNlIHRoZSBidWlsZCBwcm9jZXNzIGdldHMgdGhlIHNhbXBsZSBmaWxlLCBpdCB1c2VzCisgICAgICAgICAgICA8ZmlsZW5hbWU+c2VkPC9maWxlbmFtZT4gdG8gc3Vic3RpdHV0ZSBmaW5hbAorICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItT0VST09UJz48ZmlsZW5hbWU+T0VST09UPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgdmFsdWVzIGZvciBhbGwgPGZpbGVuYW1lPiMjT0VST09UIyM8L2ZpbGVuYW1lPiB2YWx1ZXMuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSBob3cgdGhlIDxmaWxlbmFtZT5URU1QTEFURUNPTkY8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL29lLXNldHVwLWJ1aWxkZGlyPC9maWxlbmFtZT4gc2NyaXB0IGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlIFlvY3RvIFByb2plY3QgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLWNvbmYtc2FuaXR5X2luZm8nPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL2NvbmYvc2FuaXR5X2luZm88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGZpbGUgaW5kaWNhdGVzIHRoZSBzdGF0ZSBvZiB0aGUgc2FuaXR5IGNoZWNrcyBhbmQgaXMgY3JlYXRlZAorICAgICAgICAgICAgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtZG93bmxvYWRzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC9kb3dubG9hZHMvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZG93bmxvYWRlZCB1cHN0cmVhbSBzb3VyY2UgdGFyYmFsbHMuCisgICAgICAgICAgICBZb3UgY2FuIHJldXNlIHRoZSBkaXJlY3RvcnkgZm9yIG11bHRpcGxlIGJ1aWxkcyBvciBtb3ZlCisgICAgICAgICAgICB0aGUgZGlyZWN0b3J5IHRvIGFub3RoZXIgbG9jYXRpb24uCisgICAgICAgICAgICBZb3UgY2FuIGNvbnRyb2wgdGhlIGxvY2F0aW9uIG9mIHRoaXMgZGlyZWN0b3J5IHRocm91Z2ggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+RExfRElSPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC1zc3RhdGUtY2FjaGUnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3NzdGF0ZS1jYWNoZS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgc2hhcmVkIHN0YXRlIGNhY2hlLgorICAgICAgICAgICAgWW91IGNhbiByZXVzZSB0aGUgZGlyZWN0b3J5IGZvciBtdWx0aXBsZSBidWlsZHMgb3IgbW92ZQorICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSB0byBhbm90aGVyIGxvY2F0aW9uLgorICAgICAgICAgICAgWW91IGNhbiBjb250cm9sIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGRpcmVjdG9yeSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfRElSJz5TU1RBVEVfRElSPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzIGFuZCB1c2VzIHRoaXMgZGlyZWN0b3J5CisgICAgICAgICAgICBmb3IgYWxsIHRoZSBidWlsZCBzeXN0ZW0ncyBvdXRwdXQuCisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHBvaW50cyB0byB0aGlzIGRpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBjcmVhdGVzIHRoaXMgZGlyZWN0b3J5IGlmIGl0IGRvZXMgbm90IGV4aXN0LgorICAgICAgICAgICAgQXMgYSBsYXN0IHJlc29ydCwgdG8gY2xlYW4gdXAgYSBidWlsZCBhbmQgc3RhcnQgaXQgZnJvbSBzY3JhdGNoCisgICAgICAgICAgICAob3RoZXIgdGhhbiB0aGUgZG93bmxvYWRzKSwgeW91IGNhbiByZW1vdmUgZXZlcnl0aGluZyBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT50bXA8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb3IgZ2V0IHJpZCBvZiB0aGUKKyAgICAgICAgICAgIGRpcmVjdG9yeSBjb21wbGV0ZWx5LgorICAgICAgICAgICAgSWYgeW91IGRvLCB5b3Ugc2hvdWxkIGFsc28gY29tcGxldGVseSByZW1vdmUgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQvc3N0YXRlLWNhY2hlPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtYnVpbGRzdGF0cyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wL2J1aWxkc3RhdHMvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3Rvcnkgc3RvcmVzIHRoZSBidWlsZCBzdGF0aXN0aWNzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtY2FjaGUnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9jYWNoZS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIEJpdEJha2UgcGFyc2VzIHRoZSBtZXRhZGF0YSwgaXQgY3JlYXRlcyBhIGNhY2hlIGZpbGUgb2YgdGhlIHJlc3VsdCB0aGF0IGNhbgorICAgICAgICAgICAgYmUgdXNlZCB3aGVuIHN1YnNlcXVlbnRseSBydW5uaW5nIGNvbW1hbmRzLgorICAgICAgICAgICAgQml0QmFrZSBzdG9yZXMgdGhlc2UgcmVzdWx0cyBoZXJlIG9uIGEgcGVyLW1hY2hpbmUgYmFzaXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1kZXBsb3knPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9kZXBsb3kvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYW55ICJlbmQgcmVzdWx0IiBvdXRwdXQgZnJvbSB0aGUKKyAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBwcm9jZXNzLgorICAgICAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgcG9pbnRzIHRvIHRoaXMgZGlyZWN0b3J5LgorICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlsIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgPGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+CisgICAgICAgICAgICBkaXJlY3RvcnksIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdpbWFnZXMtZGV2LWVudmlyb25tZW50Jz5JbWFnZXM8L2xpbms+IiBhbmQKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstZGV2LWVudmlyb25tZW50Jz5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBTREs8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbnMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1kZXBsb3ktZGViJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvZGVwbG95L2RlYi88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSByZWNlaXZlcyBhbnkgPGZpbGVuYW1lPi5kZWI8L2ZpbGVuYW1lPiBwYWNrYWdlcyBwcm9kdWNlZCBieQorICAgICAgICAgICAgdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICBUaGUgcGFja2FnZXMgYXJlIHNvcnRlZCBpbnRvIGZlZWRzIGZvciBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlIHR5cGVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtZGVwbG95LXJwbSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wL2RlcGxveS9ycG0vPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgcmVjZWl2ZXMgYW55IDxmaWxlbmFtZT4ucnBtPC9maWxlbmFtZT4gcGFja2FnZXMgcHJvZHVjZWQgYnkKKyAgICAgICAgICAgIHRoZSBidWlsZCBwcm9jZXNzLgorICAgICAgICAgICAgVGhlIHBhY2thZ2VzIGFyZSBzb3J0ZWQgaW50byBmZWVkcyBmb3IgZGlmZmVyZW50IGFyY2hpdGVjdHVyZSB0eXBlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtdG1wLWRlcGxveS1pcGsnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9kZXBsb3kvaXBrLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IHJlY2VpdmVzIDxmaWxlbmFtZT4uaXBrPC9maWxlbmFtZT4gcGFja2FnZXMgcHJvZHVjZWQgYnkKKyAgICAgICAgICAgIHRoZSBidWlsZCBwcm9jZXNzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtZGVwbG95LWxpY2Vuc2VzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvZGVwbG95L2xpY2Vuc2VzLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IHJlY2VpdmVzIHBhY2thZ2UgbGljZW5zaW5nIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBkaXJlY3RvcnkgY29udGFpbnMgc3ViLWRpcmVjdG9yaWVzIGZvciA8ZmlsZW5hbWU+YmFzaDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPmJ1c3lib3g8L2ZpbGVuYW1lPiwgYW5kIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+IChhbW9uZyBvdGhlcnMpIHRoYXQgaW4gdHVybgorICAgICAgICAgICAgY29udGFpbiBhcHByb3ByaWF0ZSA8ZmlsZW5hbWU+Q09QWUlORzwvZmlsZW5hbWU+IGxpY2Vuc2UgZmlsZXMgd2l0aCBvdGhlciBsaWNlbnNpbmcgaW5mb3JtYXRpb24uCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gbGljZW5zaW5nLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWFpbnRhaW5pbmctb3Blbi1zb3VyY2UtbGljZW5zZS1jb21wbGlhbmNlLWR1cmluZy15b3VyLXByb2R1Y3RzLWxpZmVjeWNsZSc+TWFpbnRhaW5pbmcgT3BlbiBTb3VyY2UgTGljZW5zZSBDb21wbGlhbmNlIER1cmluZyBZb3VyIFByb2R1Y3QncyBMaWZlY3ljbGU8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1kZXBsb3ktaW1hZ2VzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvZGVwbG95L2ltYWdlcy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSByZWNlaXZlcyBjb21wbGV0ZSBmaWxlc3lzdGVtIGltYWdlcy4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGZsYXNoIHRoZSByZXN1bHRpbmcgaW1hZ2UgZnJvbSBhIGJ1aWxkIG9udG8gYSBkZXZpY2UsIGxvb2sgaGVyZSBmb3IgdGhlIGltYWdlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZSBjYXJlZnVsIHdoZW4gZGVsZXRpbmcgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuCisgICAgICAgICAgICBZb3UgY2FuIHNhZmVseSBkZWxldGUgb2xkIGltYWdlcyBmcm9tIHRoaXMgZGlyZWN0b3J5IChlLmcuCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS0qPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5ob2ItaW1hZ2UtKjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgZXRjLikuCisgICAgICAgICAgICBIb3dldmVyLCB0aGUga2VybmVsICg8ZmlsZW5hbWU+KnpJbWFnZSo8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPip1SW1hZ2UqPC9maWxlbmFtZT4sIGV0Yy4pLAorICAgICAgICAgICAgYm9vdGxvYWRlciBhbmQgb3RoZXIgc3VwcGxlbWVudGFyeSBmaWxlcyBtaWdodCBiZSBkZXBsb3llZCBoZXJlIHByaW9yIHRvIGJ1aWxkaW5nIGFuCisgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgIEJlY2F1c2UgdGhlc2UgZmlsZXMgYXJlIG5vdCBkaXJlY3RseSBwcm9kdWNlZCBmcm9tIHRoZSBpbWFnZSwgaWYgeW91CisgICAgICAgICAgICBkZWxldGUgdGhlbSB0aGV5IHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgcmUtY3JlYXRlZCB3aGVuIHlvdSBidWlsZCB0aGUgaW1hZ2UgYWdhaW4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBkbyBhY2NpZGVudGFsbHkgZGVsZXRlIGZpbGVzIGhlcmUsIHlvdSB3aWxsIG5lZWQgdG8gZm9yY2UgdGhlbSB0byBiZQorICAgICAgICAgICAgcmUtY3JlYXRlZC4KKyAgICAgICAgICAgIEluIG9yZGVyIHRvIGRvIHRoYXQsIHlvdSB3aWxsIG5lZWQgdG8ga25vdyB0aGUgdGFyZ2V0IHRoYXQgcHJvZHVjZWQgdGhlbS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGVzZSBjb21tYW5kcyByZWJ1aWxkIGFuZCByZS1jcmVhdGUgdGhlIGtlcm5lbCBmaWxlczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1jIGNsZWFuIHZpcnR1YWwva2VybmVsCisgICAgICQgYml0YmFrZSB2aXJ0dWFsL2tlcm5lbAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtZGVwbG95LXNkayc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wL2RlcGxveS9zZGsvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY3JlYXRlcyB0aGlzIGRpcmVjdG9yeSB0byBob2xkCisgICAgICAgICAgICB0b29sY2hhaW4gaW5zdGFsbGVyIHNjcmlwdHMsIHdoaWNoIHdoZW4gZXhlY3V0ZWQsIGluc3RhbGwgdGhlCisgICAgICAgICAgICBzeXNyb290IHRoYXQgbWF0Y2hlcyB5b3VyIHRhcmdldCBoYXJkd2FyZS4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBvdXQgbW9yZSBhYm91dCB0aGVzZSBpbnN0YWxsZXJzIGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I29wdGlvbmFsbHktYnVpbGRpbmctYS10b29sY2hhaW4taW5zdGFsbGVyJz5PcHRpb25hbGx5IEJ1aWxkaW5nIGEgVG9vbGNoYWluIEluc3RhbGxlcjwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtdG1wLXNzdGF0ZS1jb250cm9sJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvc3N0YXRlLWNvbnRyb2wvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGlzIGRpcmVjdG9yeSBmb3IgdGhlCisgICAgICAgICAgICBzaGFyZWQgc3RhdGUgbWFuaWZlc3QgZmlsZXMuCisgICAgICAgICAgICBUaGUgc2hhcmVkIHN0YXRlIGNvZGUgdXNlcyB0aGVzZSBmaWxlcyB0byByZWNvcmQgdGhlIGZpbGVzCisgICAgICAgICAgICBpbnN0YWxsZWQgYnkgZWFjaCBzc3RhdGUgdGFzayBzbyB0aGF0IHRoZSBmaWxlcyBjYW4gYmUgcmVtb3ZlZAorICAgICAgICAgICAgd2hlbiBjbGVhbmluZyB0aGUgcmVjaXBlIG9yIHdoZW4gYSBuZXdlciB2ZXJzaW9uIGlzIGFib3V0IHRvCisgICAgICAgICAgICBiZSBpbnN0YWxsZWQuCisgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGFsc28gdXNlcyB0aGUgbWFuaWZlc3RzIHRvIGRldGVjdCBhbmQgcHJvZHVjZQorICAgICAgICAgICAgYSB3YXJuaW5nIHdoZW4gZmlsZXMgZnJvbSBvbmUgdGFzayBhcmUgb3ZlcndyaXRpbmcgdGhvc2UgZnJvbQorICAgICAgICAgICAgYW5vdGhlci4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtdG1wLXN5c3Jvb3RzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvc3lzcm9vdHMvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgc2hhcmVkIGhlYWRlciBmaWxlcyBhbmQgbGlicmFyaWVzIGFzIHdlbGwgYXMgb3RoZXIgc2hhcmVkCisgICAgICAgICAgICBkYXRhLgorICAgICAgICAgICAgUGFja2FnZXMgdGhhdCBuZWVkIHRvIHNoYXJlIG91dHB1dCB3aXRoIG90aGVyIHBhY2thZ2VzIGRvIHNvIHdpdGhpbiB0aGlzIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaXMgc3ViZGl2aWRlZCBieSBhcmNoaXRlY3R1cmUgc28gbXVsdGlwbGUgYnVpbGRzIGNhbiBydW4gd2l0aGluCisgICAgICAgICAgICB0aGUgb25lIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtdG1wLXN0YW1wcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wL3N0YW1wcy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBob2xkcyBpbmZvcm1hdGlvbiB0aGF0IEJpdEJha2UgdXNlcyBmb3IgYWNjb3VudGluZyBwdXJwb3NlcworICAgICAgICAgICAgdG8gdHJhY2sgd2hhdCB0YXNrcyBoYXZlIHJ1biBhbmQgd2hlbiB0aGV5IGhhdmUgcnVuLgorICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpcyBzdWItZGl2aWRlZCBieSBhcmNoaXRlY3R1cmUsIHBhY2thZ2UgbmFtZSwgYW5kCisgICAgICAgICAgICB2ZXJzaW9uLgorICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHN0YW1wcy9hbGwtcG9reS1saW51eC9kaXN0Y2MtY29uZmlnLzEuMC1yMC5kb19idWlsZC0yZmRkLi4uLjJkbworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgQWx0aG91Z2ggdGhlIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkgYXJlIGVtcHR5IG9mIGRhdGEsCisgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlIGZpbGVuYW1lcyBhbmQgdGltZXN0YW1wcyBmb3IgdHJhY2tpbmcgcHVycG9zZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1sb2cnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9sb2cvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZ2VuZXJhbCBsb2dzIHRoYXQgYXJlIG5vdCBvdGhlcndpc2UgcGxhY2VkIHVzaW5nIHRoZQorICAgICAgICAgICAgcGFja2FnZSdzIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+V09SS0RJUjwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEV4YW1wbGVzIG9mIGxvZ3MgYXJlIHRoZSBvdXRwdXQgZnJvbSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jaGVja19wa2c8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2Rpc3Ryb19jaGVjazwvZmlsZW5hbWU+IHRhc2tzLgorICAgICAgICAgICAgUnVubmluZyBhIGJ1aWxkIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhpcyBkaXJlY3RvcnkgaXMgY3JlYXRlZC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtdG1wLXdvcmsnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC93b3JrLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB3b3JrIHN1Yi1kaXJlY3RvcmllcworICAgICAgICAgICAgZm9yIHBhY2thZ2VzIGJ1aWx0IGJ5IEJpdEJha2UuCisgICAgICAgICAgICBBbGwgdGFza3MgZXhlY3V0ZSBmcm9tIHRoZSBhcHByb3ByaWF0ZSB3b3JrIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgc291cmNlIGZvciBhIHBhcnRpY3VsYXIgcGFja2FnZSBpcyB1bnBhY2tlZCwKKyAgICAgICAgICAgIHBhdGNoZWQsIGNvbmZpZ3VyZWQgYW5kIGNvbXBpbGVkIGFsbCB3aXRoaW4gaXRzIG93biB3b3JrIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFdpdGhpbiB0aGUgd29yayBkaXJlY3RvcnksIG9yZ2FuaXphdGlvbiBpcyBiYXNlZCBvbiB0aGUgcGFja2FnZSBncm91cAorICAgICAgICAgICAgYW5kIHZlcnNpb24gZm9yIHdoaWNoIHRoZSBzb3VyY2UgaXMgYmVpbmcgY29tcGlsZWQKKyAgICAgICAgICAgIGFzIGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEl0IGlzIHdvcnRoIGNvbnNpZGVyaW5nIHRoZSBzdHJ1Y3R1cmUgb2YgYSB0eXBpY2FsIHdvcmsgZGlyZWN0b3J5LgorICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLWtlcm5lbC0zLjA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgb24gdGhlIG1hY2hpbmUgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgYnVpbHQgd2l0aGluIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgRm9yIHRoaXMgcGFja2FnZSwgYSB3b3JrIGRpcmVjdG9yeSBvZgorICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9saW51eC15b2N0by8zLjArZ2l0MSsmbHQ7Li4uLi4mZ3Q7PC9maWxlbmFtZT4sCisgICAgICAgICAgICByZWZlcnJlZCB0byBhcyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+V09SS0RJUjwvbGluaz48L2ZpbGVuYW1lPiwgaXMgY3JlYXRlZC4KKyAgICAgICAgICAgIFdpdGhpbiB0aGlzIGRpcmVjdG9yeSwgdGhlIHNvdXJjZSBpcyB1bnBhY2tlZCB0bworICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXFlbXV4ODYtc3RhbmRhcmQtYnVpbGQ8L2ZpbGVuYW1lPiBhbmQgdGhlbiBwYXRjaGVkIGJ5IFF1aWx0LgorICAgICAgICAgICAgKFNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZy1hLXF1aWx0LXdvcmtmbG93Jz5Vc2luZyBRdWlsdCBpbiBZb3VyIFdvcmtmbG93PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4pCisgICAgICAgICAgICBXaXRoaW4gdGhlIDxmaWxlbmFtZT5saW51eC1xZW11eDg2LXN0YW5kYXJkLWJ1aWxkPC9maWxlbmFtZT4gZGlyZWN0b3J5LAorICAgICAgICAgICAgc3RhbmRhcmQgUXVpbHQgZGlyZWN0b3JpZXMgPGZpbGVuYW1lPmxpbnV4LTMuMC9wYXRjaGVzPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+bGludXgtMy4wLy5wYzwvZmlsZW5hbWU+IGFyZSBjcmVhdGVkLAorICAgICAgICAgICAgYW5kIHN0YW5kYXJkIFF1aWx0IGNvbW1hbmRzIGNhbiBiZSB1c2VkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGVyZSBhcmUgb3RoZXIgZGlyZWN0b3JpZXMgZ2VuZXJhdGVkIHdpdGhpbiA8ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIG1vc3QgaW1wb3J0YW50IGRpcmVjdG9yeSBpcyA8ZmlsZW5hbWU+V09SS0RJUi90ZW1wLzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgd2hpY2ggaGFzIGxvZyBmaWxlcyBmb3IgZWFjaCB0YXNrICg8ZmlsZW5hbWU+bG9nLmRvXyoucGlkPC9maWxlbmFtZT4pCisgICAgICAgICAgICBhbmQgY29udGFpbnMgdGhlIHNjcmlwdHMgQml0QmFrZSBydW5zIGZvciBlYWNoIHRhc2sKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+cnVuLmRvXyoucGlkPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5XT1JLRElSL2ltYWdlLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpcyB3aGVyZSAibWFrZQorICAgICAgICAgICAgaW5zdGFsbCIgcGxhY2VzIGl0cyBvdXRwdXQgdGhhdCBpcyB0aGVuIHNwbGl0IGludG8gc3ViLXBhY2thZ2VzCisgICAgICAgICAgICB3aXRoaW4gPGZpbGVuYW1lPldPUktESVIvcGFja2FnZXMtc3BsaXQvPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXdvcmstc2hhcmVkJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvd29yay1zaGFyZWQvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGVmZmljaWVuY3ksIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgYW5kIHVzZXMKKyAgICAgICAgICAgIHRoaXMgZGlyZWN0b3J5IHRvIGhvbGQgcmVjaXBlcyB0aGF0IHNoYXJlIGEgd29yayBkaXJlY3Rvcnkgd2l0aAorICAgICAgICAgICAgb3RoZXIgcmVjaXBlcy4KKyAgICAgICAgICAgIEluIHByYWN0aWNlLCB0aGlzIGlzIG9ubHkgdXNlZCBmb3IgPGZpbGVuYW1lPmdjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICBhbmQgaXRzIHZhcmlhbnRzIChlLmcuIDxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5saWJnY2M8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmdjYy1ydW50aW1lPC9maWxlbmFtZT4sCisgICAgICAgICAgICBhbmQgc28gZm9ydGgpLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEnPgorICAgIDx0aXRsZT5UaGUgTWV0YWRhdGEgLSA8ZmlsZW5hbWU+bWV0YS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQXMgbWVudGlvbmVkIHByZXZpb3VzbHksCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+IGlzIHRoZSBjb3JlCisgICAgICAgIG9mIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICBNZXRhZGF0YSBoYXMgc2V2ZXJhbCBpbXBvcnRhbnQgc3ViZGl2aXNpb25zOgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1jbGFzc2VzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIDxmaWxlbmFtZT4qLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgIENsYXNzIGZpbGVzIGFyZSB1c2VkIHRvIGFic3RyYWN0IGNvbW1vbiBjb2RlIHNvIGl0IGNhbiBiZSByZXVzZWQgYnkgbXVsdGlwbGUKKyAgICAgICAgICAgIHBhY2thZ2VzLgorICAgICAgICAgICAgRXZlcnkgcGFja2FnZSBpbmhlcml0cyB0aGUgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICBFeGFtcGxlcyBvZiBvdGhlciBpbXBvcnRhbnQgY2xhc3NlcyBhcmUgPGZpbGVuYW1lPmF1dG90b29scy5iYmNsYXNzPC9maWxlbmFtZT4sIHdoaWNoCisgICAgICAgICAgICBpbiB0aGVvcnkgYWxsb3dzIGFueSBBdXRvdG9vbC1lbmFibGVkIHBhY2thZ2UgdG8gd29yayB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IHdpdGggbWluaW1hbCBlZmZvcnQuCisgICAgICAgICAgICBBbm90aGVyIGV4YW1wbGUgaXMgPGZpbGVuYW1lPmtlcm5lbC5iYmNsYXNzPC9maWxlbmFtZT4gdGhhdCBjb250YWlucyBjb21tb24gY29kZSBhbmQgZnVuY3Rpb25zCisgICAgICAgICAgICBmb3Igd29ya2luZyB3aXRoIHRoZSBMaW51eCBrZXJuZWwuCisgICAgICAgICAgICBGdW5jdGlvbnMgbGlrZSBpbWFnZSBnZW5lcmF0aW9uIG9yIHBhY2thZ2luZyBhbHNvIGhhdmUgdGhlaXIgc3BlY2lmaWMgY2xhc3MgZmlsZXMKKyAgICAgICAgICAgIHN1Y2ggYXMgPGZpbGVuYW1lPmltYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnJvb3Rmc18qLmJiY2xhc3M8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlKi5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciByZWZlcmVuY2UgaW5mb3JtYXRpb24gb24gY2xhc3Nlcywgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzJz5DbGFzc2VzPC9saW5rPiIgY2hhcHRlci4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1jb25mJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL2NvbmYvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGNvcmUgc2V0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCBzdGFydCBmcm9tCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gYW5kIGZyb20gd2hpY2ggYWxsIG90aGVyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIGZpbGVzIGFyZSBpbmNsdWRlZC4KKyAgICAgICAgICAgIFNlZSB0aGUgaW5jbHVkZSBzdGF0ZW1lbnRzIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZSBhbmQgeW91IHdpbGwgbm90ZSB0aGF0IGV2ZW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gaXMgbG9hZGVkIGZyb20gdGhlcmUuCisgICAgICAgICAgICBXaGlsZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gc2V0cyB1cCB0aGUgZGVmYXVsdHMsIHlvdSBjYW4gb2Z0ZW4gb3ZlcnJpZGUKKyAgICAgICAgICAgIHRoZXNlIGJ5IHVzaW5nIHRoZSAoPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPikgZmlsZSwgbWFjaGluZSBmaWxlIG9yCisgICAgICAgICAgICB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1jb25mLW1hY2hpbmUnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGFsbCB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgSWYgeW91IHNldCA8ZmlsZW5hbWU+TUFDSElORSA9ICJxZW11eDg2IjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gbG9va3MgZm9yIGEgPGZpbGVuYW1lPnFlbXV4ODYuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhpcworICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gZGlyZWN0b3J5IGNvbnRhaW5zIHZhcmlvdXMgZGF0YSBjb21tb24gdG8gbXVsdGlwbGUgbWFjaGluZXMuCisgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgYSBuZXcgbWFjaGluZSB0byB0aGUgWW9jdG8gUHJvamVjdCwgbG9vayBpbiB0aGlzIGRpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1jb25mLWRpc3Rybyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9jb25mL2Rpc3Ryby88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgY29udGVudHMgb2YgdGhpcyBkaXJlY3RvcnkgY29udHJvbHMgYW55IGRpc3RyaWJ1dGlvbi1zcGVjaWZpYworICAgICAgICAgICAgY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICBGb3IgdGhlIFlvY3RvIFByb2plY3QsIHRoZSA8ZmlsZW5hbWU+ZGVmYXVsdHNldHVwLmNvbmY8L2ZpbGVuYW1lPiBpcyB0aGUgbWFpbiBmaWxlIGhlcmUuCisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBpbmNsdWRlcyB0aGUgdmVyc2lvbnMgYW5kIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ0RBVEU8L2ZpbGVuYW1lPiBkZWZpbml0aW9ucyBmb3IgYXBwbGljYXRpb25zIHRoYXQgYXJlIGNvbmZpZ3VyZWQgaGVyZS4KKyAgICAgICAgICAgIEFuIGV4YW1wbGUgb2YgYW4gYWx0ZXJuYXRpdmUgY29uZmlndXJhdGlvbiBtaWdodCBiZSA8ZmlsZW5hbWU+cG9reS1ibGVlZGluZy5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICBBbHRob3VnaCB0aGlzIGZpbGUgbWFpbmx5IGluaGVyaXRzIGl0cyBjb25maWd1cmF0aW9uIGZyb20gUG9reS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1jb25mLW1hY2hpbmUtc2RrJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS1zZGsvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc2VhcmNoZXMgdGhpcyBkaXJlY3RvcnkgZm9yCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtNQUNISU5FJz48ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDMyLWJpdCBhbmQgNjQtYml0IHg4NiBmaWxlcyBzaGlwIHdpdGggdGhlIFlvY3RvCisgICAgICAgICAgICBQcm9qZWN0IHRoYXQgc3VwcG9ydCBzb21lIFNESyBob3N0cy4KKyAgICAgICAgICAgIEhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlIHRvIGV4dGVuZCB0aGF0IHN1cHBvcnQgdG8gb3RoZXIgU0RLIGhvc3RzCisgICAgICAgICAgICBieSBhZGRpbmcgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZpbGVzIGluIHRoaXMgc3ViZGlyZWN0b3J5CisgICAgICAgICAgICB3aXRoaW4gYW5vdGhlciBsYXllci4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1maWxlcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9maWxlcy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBjb21tb24gbGljZW5zZSBmaWxlcyBhbmQgc2V2ZXJhbCB0ZXh0IGZpbGVzCisgICAgICAgICAgICB1c2VkIGJ5IHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICBUaGUgdGV4dCBmaWxlcyBjb250YWluIG1pbmltYWwgZGV2aWNlIGluZm9ybWF0aW9uIGFuZAorICAgICAgICAgICAgbGlzdHMgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdpdGgga25vd24gcGVybWlzc2lvbnMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtbGliJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL2xpYi88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBPcGVuRW1iZWRkZWQgUHl0aG9uIGxpYnJhcnkgY29kZQorICAgICAgICAgICAgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1ic3AnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1ic3AvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYW55dGhpbmcgbGlua2luZyB0byBzcGVjaWZpYyBoYXJkd2FyZSBvciBoYXJkd2FyZQorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBzdWNoIGFzICJ1LWJvb3QiIGFuZCAiZ3J1YiIuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1jb25uZWN0aXZpdHknPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgbGlicmFyaWVzIGFuZCBhcHBsaWNhdGlvbnMgcmVsYXRlZCB0byBjb21tdW5pY2F0aW9uIHdpdGggb3RoZXIgZGV2aWNlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLWNvcmUnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1jb3JlLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHdoYXQgaXMgbmVlZGVkIHRvIGJ1aWxkIGEgYmFzaWMgd29ya2luZyBMaW51eCBpbWFnZQorICAgICAgICAgICAgaW5jbHVkaW5nIGNvbW1vbmx5IHVzZWQgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLXJlY2lwZXMtZGV2dG9vbHMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1kZXZ0b29scy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0b29scyB0aGF0IGFyZSBwcmltYXJpbHkgdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgVGhlIHRvb2xzLCBob3dldmVyLCBjYW4gYWxzbyBiZSB1c2VkIG9uIHRhcmdldHMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1leHRlbmRlZCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWV4dGVuZGVkLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIG5vbi1lc3NlbnRpYWwgYXBwbGljYXRpb25zIHRoYXQgYWRkIGZlYXR1cmVzIGNvbXBhcmVkIHRvIHRoZQorICAgICAgICAgICAgYWx0ZXJuYXRpdmVzIGluIGNvcmUuCisgICAgICAgICAgICBZb3UgbWlnaHQgbmVlZCB0aGlzIGRpcmVjdG9yeSBmb3IgZnVsbCB0b29sIGZ1bmN0aW9uYWxpdHkgb3IgZm9yIExpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikKKyAgICAgICAgICAgIGNvbXBsaWFuY2UuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1nbm9tZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWdub21lLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGFsbCB0aGluZ3MgcmVsYXRlZCB0byB0aGUgR1RLKyBhcHBsaWNhdGlvbiBmcmFtZXdvcmsuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1ncmFwaGljcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWdyYXBoaWNzLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIFggYW5kIG90aGVyIGdyYXBoaWNhbGx5IHJlbGF0ZWQgc3lzdGVtIGxpYnJhcmllcworICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLXJlY2lwZXMta2VybmVsJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBrZXJuZWwgYW5kIGdlbmVyaWMgYXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMgdGhhdAorICAgICAgICAgICAgaGF2ZSBzdHJvbmcga2VybmVsIGRlcGVuZGVuY2llcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLWxzYjQnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1sc2I0LzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHJlY2lwZXMgc3BlY2lmaWNhbGx5IGFkZGVkIHRvIHN1cHBvcnQKKyAgICAgICAgICAgIHRoZSBMaW51eCBTdGFuZGFyZCBCYXNlIChMU0IpIHZlcnNpb24gNC54LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLXJlY2lwZXMtbXVsdGltZWRpYSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgY29kZWNzIGFuZCBzdXBwb3J0IHV0aWxpdGllcyBmb3IgYXVkaW8sIGltYWdlcyBhbmQgdmlkZW8uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1xdCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLXF0LzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGFsbCB0aGluZ3MgcmVsYXRlZCB0byB0aGUgUXQgYXBwbGljYXRpb24gZnJhbWV3b3JrLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLXJlY2lwZXMtcnQnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1ydC88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBwYWNrYWdlIGFuZCBpbWFnZSByZWNpcGVzIGZvciB1c2luZyBhbmQgdGVzdGluZworICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5QUkVFTVBUX1JUPC9maWxlbmFtZT4ga2VybmVsLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLXJlY2lwZXMtc2F0byc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLXNhdG8vPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIFNhdG8gZGVtby9yZWZlcmVuY2UgVUkvVVggYW5kIGl0cyBhc3NvY2lhdGVkIGFwcGxpY2F0aW9ucworICAgICAgICAgICAgYW5kIGNvbmZpZ3VyYXRpb24gZGF0YS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLXN1cHBvcnQnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1zdXBwb3J0LzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHJlY2lwZXMgdXNlZCBieSBvdGhlciByZWNpcGVzLCBidXQgdGhhdCBhcmUKKyAgICAgICAgICAgIG5vdCBkaXJlY3RseSBpbmNsdWRlZCBpbiBpbWFnZXMgKGkuZS4gZGVwZW5kZW5jaWVzIG9mIG90aGVyCisgICAgICAgICAgICByZWNpcGVzKS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1zaXRlJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL3NpdGUvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYSBsaXN0IG9mIGNhY2hlZCByZXN1bHRzIGZvciB2YXJpb3VzIGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICBCZWNhdXNlIGNlcnRhaW4gImF1dG9jb25mIiB0ZXN0IHJlc3VsdHMgY2Fubm90IGJlIGRldGVybWluZWQgd2hlbiBjcm9zcy1jb21waWxpbmcgZHVlIHRvCisgICAgICAgICAgICB0aGUgdGVzdHMgbm90IGFibGUgdG8gcnVuIG9uIGEgbGl2ZSBzeXN0ZW0sIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGRpcmVjdG9yeSBpcworICAgICAgICAgICAgcGFzc2VkIHRvICJhdXRvY29uZiIgZm9yIHRoZSB2YXJpb3VzIGFyY2hpdGVjdHVyZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy10eHQnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvcmVjaXBlcy50eHQ8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGZpbGUgaXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgY29udGVudHMgb2YgPGZpbGVuYW1lPnJlY2lwZXMtKjwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1zdHlsZS5jc3MgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYThkYWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtc3R5bGUuY3NzCkBAIC0wLDAgKzEsMTAyOCBAQAorLyoKKyAgIEdlbmVyaWMgWEhUTUwgLyBEb2NCb29rIFhIVE1MIENTUyBTdHlsZXNoZWV0LgorCisgICBCcm93c2VyIHdyYW5nbGluZyBhbmQgdHlwb2dyYXBoaWMgZGVzaWduIGJ5CisgICAgICBPeXZpbmQgS29sYXMgLyBwaXBwaW5AZ2ltcC5vcmcKKworICAgQ3VzdG9taXNlZCBmb3IgUG9reSBieQorICAgICAgTWF0dGhldyBBbGx1bSAvIG1hbGx1bUBvLWhhbmQuY29tCisKKyAgIFRoYW5rcyB0bzoKKyAgICAgTGlhbSBSLiBFLiBRdWluCisgICAgIFdpbGxpYW0gU2thZ2dzCisgICAgIEpha3ViIFN0ZWluZXIKKworICAgU3RydWN0dXJlCisgICAtLS0tLS0tLS0KKworICAgVGhlIHN0eWxlc2hlZXQgaXMgZGl2aWRlZCBpbnRvIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisKKyAgICAgICBQb3NpdGlvbmluZworICAgICAgICAgIE1hcmdpbnMsIHBhZGRpbmdzLCB3aWR0aCwgZm9udC1zaXplLCBjbGVhcmluZy4KKyAgICAgICBEZWNvcmF0aW9ucworICAgICAgICAgIEJvcmRlcnMsIHN0eWxlCisgICAgICAgQ29sb3JzCisgICAgICAgICAgQ29sb3JzCisgICAgICAgR3JhcGhpY3MKKyAgICAgICAgICBHcmFwaGljYWwgYmFja2dyb3VuZHMKKyAgICAgICBOYXN0eSBJRSB0d2Vha3MKKyAgICAgICAgICBXb3JrYXJvdW5kcyBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIGluIGludGVybmV0IGV4cGxvcmVyLAorICAgICAgICAgIGN1cnJlbnRseSBtYWtlcyB0aGUgc3R5bGVzaGVldCBub24gdmFsaWRhdGluZywgYnV0IHVwIHVudGlsCisgICAgICAgICAgdGhpcyBwb2ludCBpdCBpcyB2YWxpZGF0aW5nLgorICAgICAgIE1vemlsbGEgZXh0ZW5zaW9ucworICAgICAgICAgIFRyYW5zcGFyZW5jeSBmb3IgZm9vdGVyCisJICBSb3VuZGVkIGNvcm5lcnMgb24gYm94ZXMKKworKi8KKworCisgIC8qKioqKioqKioqKioqKiogLworIC8gIFBvc2l0aW9uaW5nICAgLworLyAqKioqKioqKioqKioqKiovCisKK2JvZHkgeworICBmb250LWZhbWlseTogVmVyZGFuYSwgU2Fucywgc2Fucy1zZXJpZjsKKworICBtaW4td2lkdGg6IDY0MHB4OworICB3aWR0aDogODAlOworICBtYXJnaW46ICAwZW0gYXV0bzsKKyAgcGFkZGluZzogMmVtIDVlbSA1ZW0gNWVtOworICBjb2xvcjogIzMzMzsKK30KKworaDEsaDIsaDMsaDQsaDUsaDYsaDcgeworICBmb250LWZhbWlseTogQXJpYWwsIFNhbnM7CisgIGNvbG9yOiAjMDA1NTdEOworICBjbGVhcjogYm90aDsKK30KKworaDEgeworICBmb250LXNpemU6IDJlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDJlbSAwZW0gMGVtIDBlbTsKK30KKworaDIuc3VidGl0bGUgeworICBtYXJnaW46IDAuMTBlbSAwZW0gMy4wZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS44ZW07CisgIHBhZGRpbmctbGVmdDogMjAlOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2gyIHsKKyAgbWFyZ2luOiAyZW0gMGVtIDAuNjZlbSAwZW07CisgIHBhZGRpbmc6IDAuNWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuNWVtOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDMuc3VidGl0bGUgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0Mi4xNCU7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitoMyB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDQgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTIwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g1IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNiB7CisgIG1hcmdpbjogMWVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy5hdXRob3Jncm91cCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nLXRvcDogMjU2cHg7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy9wb2t5LXRpdGxlLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IHRvcDsKKyAgbWFyZ2luLXRvcDogLTI1NnB4OworICBwYWRkaW5nLXJpZ2h0OiA1MHB4OworICBtYXJnaW4tbGVmdDogMHB4OworICB0ZXh0LWFsaWduOiByaWdodDsKKyAgd2lkdGg6IDc0MHB4OworfQorCitoMy5hdXRob3IgeworICBtYXJnaW46IDBlbSAwbWUgMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXNpemU6IDEwMCU7CisgIGNvbG9yOiAjMzMzOworICBjbGVhcjogYm90aDsKK30KKworLmF1dGhvciB0dC5lbWFpbCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCisudGl0bGVwYWdlIGhyIHsKKyAgd2lkdGg6IDBlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5yZXZoaXN0b3J5IHsKKyAgcGFkZGluZy10b3A6IDJlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy50b2MsCisubGlzdC1vZi10YWJsZXMsCisubGlzdC1vZi1leGFtcGxlcywKKy5saXN0LW9mLWZpZ3VyZXMgeworICBwYWRkaW5nOiAxLjMzZW0gMGVtIDIuNWVtIDBlbTsKKyAgY29sb3I6ICMwMDU1N0Q7Cit9CisKKy50b2MgcCwKKy5saXN0LW9mLXRhYmxlcyBwLAorLmxpc3Qtb2YtZmlndXJlcyBwLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwLjNlbTsKKyAgbWFyZ2luOiAxLjVlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBwIGIsCisubGlzdC1vZi10YWJsZXMgcCBiLAorLmxpc3Qtb2YtZmlndXJlcyBwIGIsCisubGlzdC1vZi1leGFtcGxlcyBwIGJ7CisgIGZvbnQtc2l6ZTogMTAwLjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLnRvYyBkbCwKKy5saXN0LW9mLXRhYmxlcyBkbCwKKy5saXN0LW9mLWZpZ3VyZXMgZGwsCisubGlzdC1vZi1leGFtcGxlcyBkbCB7CisgIG1hcmdpbjogMGVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkdCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZGQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDIuNmVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy8qIFVzZSB0aGlzIHNldCB3aGVuIHlvdSBkZWNpZGUgdG8gZ2V0IHRoZSBpbWFnZXMgaW4gZm9yIHZhcmlhYmxlcy4KKworZGl2Lmdsb3NzYXJ5IGRsLAorZGl2LnZhcmlhYmxlbGlzdCBkbCB7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHdpZHRoOiAwZW07CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCisudmFyaWFibGVsaXN0IGRsIGR0IHsKKyAgbWFyZ2luLXRvcDogMC41ZW07Cit9CisKKy5nbG9zc2FyeSBkbCBkZCwKKy52YXJpYWJsZWxpc3QgZGwgZGQgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1sZWZ0OiAxNS41ZW07CisgIG1hcmdpbi1ib3R0b206IDJlbTsKK30KKworLmdsb3NzYXJ5IGRkIHAsCisudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworLmdsb3NzZGVmZmlyc3QgeworICB0ZXh0LWluZGVudDogLTcwcHg7Cit9CisqLworCisvKiBTdGFydCBvZiBub24taW1hZ2Ugc2V0ICovCisKK2Rpdi5nbG9zc2FyeSBkbCwKK2Rpdi52YXJpYWJsZWxpc3QgZGwgeworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBmb250LXdlaWdodDogbm9ybWFsOworICB3aWR0aDogMjBlbTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy52YXJpYWJsZWxpc3QgZGwgZHQgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKK30KKworLmdsb3NzYXJ5IGRsIGRkLAorLnZhcmlhYmxlbGlzdCBkbCBkZCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWxlZnQ6IDI1LjVlbTsKK30KKworLmdsb3NzYXJ5IGRkIHAsCisudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworLmdsb3NzZGVmZmlyc3QgeworICB0ZXh0LWluZGVudDogMHB4OworfQorCisvKiBFbmQgb2Ygbm9uLWltYWdlIHNldCAqLworCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCitkaXYgcC5jb3B5cmlnaHQgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCitkaXYubGVnYWxub3RpY2UgcC5sZWdhbG5vdGljZS10aXRsZSB7CisgIG1hcmdpbi1ib3R0b206IDBlbTsKK30KKworcCB7CisgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworCit9CisKK2RsIHsKKyAgcGFkZGluZy10b3A6IDBlbTsKK30KKworaHIgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworCisubWVkaWFvYmplY3QsCisubWVkaWFvYmplY3RjbyB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworaW1nIHsKKyAgYm9yZGVyOiBub25lOworfQorCit1bCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDEuNWVtOworfQorCit1bCBsaSB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKwordWwgbGkgcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK3RhYmxlIHsKKyAgd2lkdGggOjEwMCU7Cit9CisKK3RoIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBmb250LXdlaWdodDogbm9ybWFsOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0ZCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworcCBhW2lkXSB7CisgIG1hcmdpbjogMHB4OworICBwYWRkaW5nOiAwcHg7CisgIGRpc3BsYXk6IGlubGluZTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKK30KKworYSB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBjb2xvcjogIzQ0NDsKK30KKworcHJlIHsKKyAgICBvdmVyZmxvdzogYXV0bzsKK30KKworYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAvKmZvbnQtd2VpZ2h0OiBib2xkOyovCit9CisKKy8qIFRoaXMgc3R5bGUgZGVmaW5lcyBob3cgdGhlIHBlcm1hbGluayBjaGFyYWN0ZXIKKyAgIGFwcGVhcnMgYnkgaXRzZWxmIGFuZCB3aGVuIGhvdmVyZWQgb3ZlciB3aXRoCisgICB0aGUgbW91c2UuICovCisKK1thbHQ9J1Blcm1hbGluayddIHsgY29sb3I6ICNlZWU7IH0KK1thbHQ9J1Blcm1hbGluayddOmhvdmVyIHsgY29sb3I6IGJsYWNrOyB9CisKKworZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlIHsKKyAgbWFyZ2luOiAxZW0gMGVtOworICBwYWRkaW5nOiAxZW07CisgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKK30KKworCitkaXYuaW5mb3JtYWxmaWd1cmUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWx0YWJsZSBwLnRpdGxlIGIsCitkaXYuZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5leGFtcGxlIHAudGl0bGUgYiwKK2Rpdi50YWJsZSBwLnRpdGxlIGJ7CisgICAgcGFkZGluZy10b3A6IDBlbTsKKyAgICBtYXJnaW4tdG9wOiAwZW07CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiwKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiBwICB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmctdG9wOiAwLjVlbTsKKyAgcGFkZGluZy1ib3R0b206IDAuNWVtOworfQorCisuZXBpZ3JhcGggeworICBwYWRkaW5nLWxlZnQ6IDU1JTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZXBpZ3JhcGggcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5lcGlncmFwaCAucXVvdGUgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisuZXBpZ3JhcGggLmF0dHJpYnV0aW9uIHsKKyAgZm9udC1zdHlsZTogbm9ybWFsOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworc3Bhbi5hcHBsaWNhdGlvbiB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnByb2dyYW1saXN0aW5nIHsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgZm9udC1zaXplOiA4MCU7CisgIHdoaXRlLXNwYWNlOiBwcmU7CisgIG1hcmdpbjogMS4zM2VtIDBlbTsKKyAgcGFkZGluZzogMS4zM2VtOworfQorCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgbWFyZ2luLXRvcDogMWVtOworICBtYXJnaW4tYm90dG9tOiAxZW07CisKK30KKworLyogZm9yY2UgZnVsbCB3aWR0aCBvZiB0YWJsZSB3aXRoaW4gZGl2ICovCisudGlwIHRhYmxlLAorLndhcm5pbmcgdGFibGUsCisuY2F1dGlvbiB0YWJsZSwKKy5ub3RlIHRhYmxlIHsKKyAgYm9yZGVyOiBub25lOworICB3aWR0aDogMTAwJTsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgcGFkZGluZzogMC44ZW0gMC4wZW0gMC4wZW0gMC4wZW07CisgIG1hcmdpbiA6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRpcCBwLAorLndhcm5pbmcgcCwKKy5jYXV0aW9uIHAsCisubm90ZSBwIHsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuNWVtOworICBwYWRkaW5nLXJpZ2h0OiAxZW07CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5hY3JvbnltIHsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgcGFkZGluZzogMC4wOWVtIDAuM2VtOworICBtYXJnaW46IDBlbTsKK30KKworLml0ZW1pemVkbGlzdCBsaSB7CisgIGNsZWFyOiBub25lOworfQorCisuZmlsZW5hbWUgeworICBmb250LXNpemU6IG1lZGl1bTsKKyAgZm9udC1mYW1pbHk6IENvdXJpZXIsIG1vbm9zcGFjZTsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAwZW07CisgIHRvcDogMGVtOworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NkZjsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBwb3NpdGlvbjogZml4ZWQ7CisgIGxlZnQ6IDBlbTsKKyAgYm90dG9tOiAwZW07CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIHdpZHRoOiAxMDAlOworfQorCisKK2Rpdi5uYXZoZWFkZXIgdGQsCitkaXYubmF2Zm9vdGVyIHRkIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGggeworICAvKmZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBUaW1lcywgc2VyaWY7Ki8KKyAgLypmb250LXNpemU6IHgtbGFyZ2U7Ki8KKyAgZm9udC1zaXplOiA4MCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLXRvcDogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItYm90dG9tOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGEsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGEgeworICBjb2xvcjogIzc3NzsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisvKiBub3JtYWwgdGV4dCBpbiB0aGUgZm9vdGVyICovCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIHsKKyAgY29sb3I6IGJsYWNrOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6dmlzaXRlZCwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTp2aXNpdGVkIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKKworLyogbGlua3MgaW4gaGVhZGVyIGFuZCBmb290ZXIgKi8KK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTpob3ZlciwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgY29sb3I6ICMzM2E7Cit9CisKK2Rpdi5uYXZoZWFkZXIgaHIsCitkaXYubmF2Zm9vdGVyIGhyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCisucWFuZGFzZXQgdHIucXVlc3Rpb24gdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy5xYW5kYXNldCB0ci5hbnN3ZXIgdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisuYW5zd2VyIHRkIHsKKyAgcGFkZGluZy1ib3R0b206IDEuNWVtOworfQorCisuZW1waGFzaXMgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworCisgIC8qKioqKioqKioqKioqIC8KKyAvIGRlY29yYXRpb25zICAvCisvICoqKioqKioqKioqKiovCisKKy50aXRsZXBhZ2UgeworfQorCisucGFydCAudGl0bGUgeworfQorCisuc3VidGl0bGUgeworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyoKK2gxIHsKKyAgYm9yZGVyOiBub25lOworfQorCitoMiB7CisgIGJvcmRlci10b3A6IHNvbGlkIDAuMmVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2gzIHsKKyAgYm9yZGVyLXRvcDogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g0IHsKKyAgYm9yZGVyOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDUgeworICBib3JkZXI6IDBlbTsKK30KKyovCisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworLnF1ZXN0aW9uIHRkIHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOworfQorCisuYW5zd2VyIHsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBib3JkZXItdG9wOiAxcHggc29saWQ7Cit9CisKKyAgLyoqKioqKioqKiAvCisgLyAgY29sb3JzICAvCisvICoqKioqKioqKi8KKworYm9keSB7CisgIGNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworYSB7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworfQorCithOmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RlZGVkZTsKK30KKworCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoNywKK2g4IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisKK2hyIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCisKKy50aXAsIC53YXJuaW5nLCAuY2F1dGlvbiwgLm5vdGUgeworICBib3JkZXItY29sb3I6ICNmZmY7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7Cit9CisKKworLndhcm5pbmcgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy50aXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisubm90ZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGNvbG9yOiAjMDQ0OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKK3ByZS5wcm9ncmFtbGlzdGluZyB7CisgIGNvbG9yOiBibGFjazsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworICBib3JkZXItd2lkdGg6IDJweDsKK30KKworLmd1aW1lbnUsCisuZ3VpbGFiZWwsCisuZ3VpbWVudWl0ZW0geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGJvcmRlci1jb2xvcjogIzk5OTsKK30KKworCitkaXYubmF2aGVhZGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCitkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCisgIC8qKioqKioqKioqKiAvCisgLyAgZ3JhcGhpY3MgIC8KKy8gKioqKioqKioqKiovCisKKy8qCitib2R5IHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvYm9keV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLm5hdmhlYWRlciwKKy5ub3RlLAorLnRpcCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL25vdGVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy53YXJuaW5nLAorLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy93YXJuaW5nX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisuZmlndXJlLAorLmluZm9ybWFsZmlndXJlLAorLmV4YW1wbGUsCisuaW5mb3JtYWxleGFtcGxlLAorLnRhYmxlLAorLmluZm9ybWFsdGFibGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9maWd1cmVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKyovCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoN3sKK30KKworLyoKK0V4YW1wbGUgb2YgaG93IHRvIHN0aWNrIGFuIGltYWdlIGFzIHBhcnQgb2YgdGhlIHRpdGxlLgorCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvd2hpdGUtb24tYmxhY2sucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworfQorKi8KKworZGl2LnByZWZhY2UgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuY29sb3Bob24gLnRpdGxlLAorZGl2LmNoYXB0ZXIgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworfQorCitkaXYuc2VjdGlvbiBkaXYuc2VjdGlvbiAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5zZWN0MiAudGl0bGVwYWdlIC50aXRsZSB7CisgICAgYmFja2dyb3VuZDogbm9uZTsKK30KKworCitoMS50aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvcG9reS10aXRsZS5wbmciKTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgaGVpZ2h0OiAyNTZweDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKK30KKworaDIuc3VidGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKKyAgd2lkdGg6IDBweDsKKyAgZGlzcGxheTogbm9uZTsKK30KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvICBwaXBwaW4uZ2ltcC5vcmcgc3BlY2lmaWMgYWx0ZXJhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICBjb2xvcjogIzc3NzsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmc6IDA7CisgIG1hcmdpbjogMDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDBweDsKKyAgbGVmdDogMHB4OworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiA1MHB4OworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvaGVhZGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworICBib3JkZXI6IG5vbmU7Cit9CisKK2Rpdi5oZWFkaW5nIGEgeworICBjb2xvcjogIzQ0NDsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICBib3JkZXI6IG5vbmU7CisgIGNvbG9yOiAjZGRkOworICBmb250LXNpemU6IDgwJTsKKyAgdGV4dC1hbGlnbjpyaWdodDsKKworICB3aWR0aDogMTAwJTsKKyAgcGFkZGluZy10b3A6IDEwcHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgYm90dG9tOiAwcHg7CisgIGxlZnQ6IDBweDsKKworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvZm9vdGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKK30KKyovCisKKworCisgIC8qKioqKioqKioqKioqKioqKiogLworIC8gIG5hc3R5IGllIHR3ZWFrcyAgLworLyAqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworICBtYXJnaW4tbGVmdDpleHByZXNzaW9uKCItNWVtIik7Cit9Citib2R5IHsKKyAgcGFkZGluZzpleHByZXNzaW9uKCI0ZW0gNWVtIDBlbSA1ZW0iKTsKK30KKyovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gbW96aWxsYSB2ZW5kb3Igc3BlY2lmaWMgY3NzIGV4dGVuc2lvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgLW1vei1vcGFjaXR5OiAwLjhlbTsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlLAorLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC41ZW07Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC4zZW07Cit9CisqLworCit0YWJsZSB0ciB0ZCB0YWJsZSB0ciB0ZCB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworaHIgeworICBkaXNwbGF5OiBub25lOworfQorCit0YWJsZSB7CisgIGJvcmRlcjogMGVtOworfQorCisgLnBob3RvIHsKKyAgZmxvYXQ6IHJpZ2h0OworICBtYXJnaW4tbGVmdDogICAxLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWF4LXdpZHRoOiAgICAgIDE3ZW07CisgIGJvcmRlcjogICAgIDFweCBzb2xpZCBncmF5OworICBwYWRkaW5nOiAgICAzcHg7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorIC5zZXBlcmF0b3IgeworICAgcGFkZGluZy10b3A6IDJlbTsKKyAgIGNsZWFyOiBib3RoOworICB9CisKKyAgI3ZhbGlkYXRvcnMgeworICAgICAgbWFyZ2luLXRvcDogNWVtOworICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICBjb2xvcjogIzc3NzsKKyAgfQorICBAbWVkaWEgcHJpbnQgeworICAgICAgYm9keSB7CisgICAgICAgICAgZm9udC1zaXplOiA4cHQ7CisgICAgICB9CisgICAgICAubm9wcmludCB7CisgICAgICAgICAgZGlzcGxheTogbm9uZTsKKyAgICAgIH0KKyAgfQorCisKKy50aXAsCisubm90ZSB7CisgICBiYWNrZ3JvdW5kOiAjZjBmMGYyOworICAgY29sb3I6ICMzMzM7CisgICBwYWRkaW5nOiAyMHB4OworICAgbWFyZ2luOiAyMHB4OworfQorCisudGlwIGgzLAorLm5vdGUgaDMgeworICAgcGFkZGluZzogMGVtOworICAgbWFyZ2luOiAwZW07CisgICBmb250LXNpemU6IDJlbTsKKyAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgY29sb3I6ICMzMzM7Cit9CisKKy50aXAgYSwKKy5ub3RlIGEgeworICAgY29sb3I6ICMzMzM7CisgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLmZvb3Rub3RlIHsKKyAgIGZvbnQtc2l6ZTogc21hbGw7CisgICBjb2xvcjogIzMzMzsKK30KKworLyogQ2hhbmdlcyB0aGUgYW5ub3VuY2VtZW50IHRleHQgKi8KKy50aXAgaDMsCisud2FybmluZyBoMywKKy5jYXV0aW9uIGgzLAorLm5vdGUgaDMgeworICAgZm9udC1zaXplOmxhcmdlOworICAgY29sb3I6ICMwMDU1N0Q7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdGFza3MueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXRhc2tzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWI0ZDk2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXRhc2tzLnhtbApAQCAtMCwwICsxLDcxMSBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3JlZi10YXNrcyc+Cis8dGl0bGU+VGFza3M8L3RpdGxlPgorCis8cGFyYT4KKyAgICBUYXNrcyBhcmUgdW5pdHMgb2YgZXhlY3V0aW9uIGZvciBCaXRCYWtlLgorICAgIFJlY2lwZXMgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcykgdXNlIHRhc2tzIHRvIGNvbXBsZXRlCisgICAgY29uZmlndXJpbmcsIGNvbXBpbGluZywgYW5kIHBhY2thZ2luZyBzb2Z0d2FyZS4KKyAgICBUaGlzIGNoYXB0ZXIgcHJvdmlkZXMgYSByZWZlcmVuY2Ugb2YgdGhlIHRhc2tzIGRlZmluZWQgaW4gdGhlCisgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKzwvcGFyYT4KKworPHNlY3Rpb24gaWQ9J25vcm1hbC1yZWNpcGUtYnVpbGQtdGFza3MnPgorICAgIDx0aXRsZT5Ob3JtYWwgUmVjaXBlIEJ1aWxkIFRhc2tzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJlIG5vcm1hbCB0YXNrcyBhc3NvY2lhdGVkIHdpdGggYnVpbGRpbmcKKyAgICAgICAgYSByZWNpcGUuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1idWlsZCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZGVmYXVsdCB0YXNrIGZvciBhbGwgcmVjaXBlcy4KKyAgICAgICAgICAgIFRoaXMgdGFzayBkZXBlbmRzIG9uIGFsbCBvdGhlciBub3JtYWwgdGFza3MKKyAgICAgICAgICAgIHJlcXVpcmVkIHRvIGJ1aWxkIGEgcmVjaXBlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1jb21waWxlJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29tcGlsZXMgdGhlIHNvdXJjZSBpbiB0aGUgY29tcGlsYXRpb24gZGlyZWN0b3J5LCB3aGljaCBpcyBwb2ludGVkCisgICAgICAgICAgICB0byBieSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CJz48ZmlsZW5hbWU+QjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtY29tcGlsZV9wdGVzdF9iYXNlJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19jb21waWxlX3B0ZXN0X2Jhc2U8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb21waWxlcyB0aGUgcnVudGltZSB0ZXN0IHN1aXRlIGluY2x1ZGVkIGluIHRoZSBzb2Z0d2FyZSBiZWluZworICAgICAgICAgICAgYnVpbHQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29uZmlndXJlcyB0aGUgc291cmNlIGJ5IGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgYW55IGJ1aWxkLXRpbWUgYW5kCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtY29uZmlndXJlX3B0ZXN0X2Jhc2UnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZV9wdGVzdF9iYXNlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29uZmlndXJlcyB0aGUgcnVudGltZSB0ZXN0IHN1aXRlIGluY2x1ZGVkIGluIHRoZSBzb2Z0d2FyZSBiZWluZworICAgICAgICAgICAgYnVpbHQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWRlcGxveSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fZGVwbG95PC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV3JpdGVzIG91dHB1dCBmaWxlcyB0aGF0IGFyZSB0byBiZSBkZXBsb3llZCB0byB0aGUgZGVwbG95CisgICAgICAgICAgICBkaXJlY3RvcnksIHdoaWNoIGlzIGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZRElSJz48ZmlsZW5hbWU+REVQTE9ZRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19kZXBsb3k8L2ZpbGVuYW1lPiB0YXNrIGlzIGEKKyAgICAgICAgICAgIHNoYXJlZCBzdGF0ZSAoc3N0YXRlKSB0YXNrLCB3aGljaCBtZWFucyB0aGF0IHRoZSB0YXNrIGNhbgorICAgICAgICAgICAgYmUgYWNjZWxlcmF0ZWQgdGhyb3VnaCBzc3RhdGUgdXNlLgorICAgICAgICAgICAgUmVhbGl6ZSBhbHNvIHRoYXQgaWYgdGhlIHRhc2sgaXMgcmUtZXhlY3V0ZWQsIGFueSBwcmV2aW91cyBvdXRwdXQKKyAgICAgICAgICAgIGlzIHJlbW92ZWQgKGkuZS4gImNsZWFuZWQiKS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtZmV0Y2gnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmV0Y2hlcyB0aGUgc291cmNlIGNvZGUuCisgICAgICAgICAgICBUaGlzIHRhc2sgdXNlcyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRoZSBhcmd1bWVudCdzIHByZWZpeCB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QKKyAgICAgICAgICAgIGZldGNoZXIgbW9kdWxlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1pbnN0YWxsJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29waWVzIGZpbGVzIGZyb20gdGhlIGNvbXBpbGF0aW9uIGRpcmVjdG9yeSwgd2hpY2ggaXMgZGVmaW5lZCBieQorICAgICAgICAgICAgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQic+PGZpbGVuYW1lPkI8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUsCisgICAgICAgICAgICB0byBhIGhvbGRpbmcgYXJlYSBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUQnPjxmaWxlbmFtZT5EPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1pbnN0YWxsX3B0ZXN0X2Jhc2UnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2luc3RhbGxfcHRlc3RfYmFzZTwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENvcGllcyB0aGUgcnVudGltZSB0ZXN0IHN1aXRlIGZpbGVzIGZyb20gdGhlIGNvbXBpbGF0aW9uIGRpcmVjdG9yeQorICAgICAgICAgICAgdG8gYSBob2xkaW5nIGFyZWEuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBhY2thZ2UnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBbmFseXplcyB0aGUgY29udGVudCBvZiB0aGUgaG9sZGluZyBhcmVhIGFuZCBzcGxpdHMgaXQgaW50byBzdWJzZXRzCisgICAgICAgICAgICBiYXNlZCBvbiBhdmFpbGFibGUgcGFja2FnZXMgYW5kIGZpbGVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1wYWNrYWdlX3FhJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19wYWNrYWdlX3FhPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUnVucyBRQSBjaGVja3Mgb24gcGFja2FnZWQgZmlsZXMuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZSBjaGVja3MsIHNlZSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfZGViJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX2RlYjwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgRGViaWFuIHBhY2thZ2VzIChpLmUuIDxmaWxlbmFtZT4qLmRlYjwvZmlsZW5hbWU+IGZpbGVzKSBhbmQKKyAgICAgICAgICAgIHBsYWNlcyB0aGVtIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9ERUInPjxmaWxlbmFtZT5ERVBMT1lfRElSX0RFQjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGRpcmVjdG9yeSBpbiB0aGUgcGFja2FnZSBmZWVkcyBhcmVhLgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYWNrYWdlLWZlZWRzLWRldi1lbnZpcm9ubWVudCc+UGFja2FnZSBGZWVkczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX2lwayc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV9pcGs8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIElQSyBwYWNrYWdlcyAoaS5lLiA8ZmlsZW5hbWU+Ki5pcGs8L2ZpbGVuYW1lPiBmaWxlcykgYW5kCisgICAgICAgICAgICBwbGFjZXMgdGhlbSBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfSVBLJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9JUEs8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICBkaXJlY3RvcnkgaW4gdGhlIHBhY2thZ2UgZmVlZHMgYXJlYS4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGFja2FnZS1mZWVkcy1kZXYtZW52aXJvbm1lbnQnPlBhY2thZ2UgRmVlZHM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtcGFja2FnZV93cml0ZV9ycG0nPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfcnBtPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3JlYXRlcyBSUE0gcGFja2FnZXMgKGkuZS4gPGZpbGVuYW1lPioucnBtPC9maWxlbmFtZT4gZmlsZXMpIGFuZAorICAgICAgICAgICAgcGxhY2VzIHRoZW0gaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX1JQTSc+PGZpbGVuYW1lPkRFUExPWV9ESVJfUlBNPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgZGlyZWN0b3J5IGluIHRoZSBwYWNrYWdlIGZlZWRzIGFyZWEuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfdGFyJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX3RhcjwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgdGFyYmFsbHMgYW5kIHBsYWNlcyB0aGVtIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9UQVInPjxmaWxlbmFtZT5ERVBMT1lfRElSX1RBUjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGRpcmVjdG9yeSBpbiB0aGUgcGFja2FnZSBmZWVkcyBhcmVhLgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYWNrYWdlLWZlZWRzLWRldi1lbnZpcm9ubWVudCc+UGFja2FnZSBGZWVkczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1wYWNrYWdlZGF0YSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fcGFja2FnZWRhdGE8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIHBhY2thZ2UgbWV0YWRhdGEgdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtIHRvIGdlbmVyYXRlIHRoZQorICAgICAgICAgICAgZmluYWwgcGFja2FnZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBhdGNoJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIExvY2F0ZXMgcGF0Y2ggZmlsZXMgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgc291cmNlIGNvZGUuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGF0Y2hpbmctZGV2LWVudmlyb25tZW50Jz5QYXRjaGluZzwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9saWMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX2xpYzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdyaXRlcyBsaWNlbnNlIGluZm9ybWF0aW9uIGZvciB0aGUgcmVjaXBlIHRoYXQgaXMgY29sbGVjdGVkIGxhdGVyCisgICAgICAgICAgICB3aGVuIHRoZSBpbWFnZSBpcyBjb25zdHJ1Y3RlZC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtcG9wdWxhdGVfc2RrJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zZGs8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIHRoZSBmaWxlIGFuZCBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBhbiBpbnN0YWxsYWJsZSBTREsuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWdlbmVyYXRpb24tZGV2LWVudmlyb25tZW50Jz5TREsgR2VuZXJhdGlvbjwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9zeXNyb290Jz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29waWVzIGEgc3Vic2V0IG9mIGZpbGVzIGluc3RhbGxlZCBieSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzayBpbnRvIHRoZSBzeXNyb290IGluIG9yZGVyIHRvIG1ha2UgdGhlbSBhdmFpbGFibGUgdG8gb3RoZXIKKyAgICAgICAgICAgIHJlY2lwZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+IHRhc2sgaXMgYQorICAgICAgICAgICAgc2hhcmVkIHN0YXRlIChzc3RhdGUpIHRhc2ssIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHRhc2sgY2FuCisgICAgICAgICAgICBiZSBhY2NlbGVyYXRlZCB0aHJvdWdoIHNzdGF0ZSB1c2UuCisgICAgICAgICAgICBSZWFsaXplIGFsc28gdGhhdCBpZiB0aGUgdGFzayBpcyByZS1leGVjdXRlZCwgYW55IHByZXZpb3VzIG91dHB1dAorICAgICAgICAgICAgaXMgcmVtb3ZlZCAoaS5lLiAiY2xlYW5lZCIpLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1ybV93b3JrJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19ybV93b3JrPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUmVtb3ZlcyB3b3JrIGZpbGVzIGFmdGVyIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcworICAgICAgICAgICAgZmluaXNoZWQgd2l0aCB0aGVtLgorICAgICAgICAgICAgWW91IGNhbiBsZWFybiBtb3JlIGJ5IGxvb2tpbmcgYXQgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcm0td29yayc+PGZpbGVuYW1lPnJtX3dvcmsuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXJtX3dvcmtfYWxsJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19ybV93b3JrX2FsbDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvcC1sZXZlbCB0YXNrIGZvciByZW1vdmluZyB3b3JrIGZpbGVzIGFmdGVyIHRoZSBidWlsZCBzeXN0ZW0gaGFzCisgICAgICAgICAgICBmaW5pc2hlZCB3aXRoIHRoZW0uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXVucGFjayc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVW5wYWNrcyB0aGUgc291cmNlIGNvZGUgaW50byBhIHdvcmtpbmcgZGlyZWN0b3J5IHBvaW50ZWQgdG8KKyAgICAgICAgICAgIGJ5CisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZSBhbHNvCisgICAgICAgICAgICBwbGF5cyBhIHJvbGUgaW4gd2hlcmUgdW5wYWNrZWQgc291cmNlIGZpbGVzIHVsdGltYXRlbHkgcmVzaWRlLgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHNvdXJjZSBmaWxlcyBhcmUgdW5wYWNrZWQsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzb3VyY2UtZmV0Y2hpbmctZGV2LWVudmlyb25tZW50Jz5Tb3VyY2UgRmV0Y2hpbmc8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBhbmQgdGhlIDxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+UzwvZmlsZW5hbWU+IHZhcmlhYmxlIGRlc2NyaXB0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J21hbnVhbGx5LWNhbGxlZC10YXNrcyc+CisgICAgPHRpdGxlPk1hbnVhbGx5IENhbGxlZCBUYXNrczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlc2UgdGFza3MgYXJlIHR5cGljYWxseSBtYW51YWxseSB0cmlnZ2VyZWQgKGUuZy4gYnkgdXNpbmcgdGhlCisgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1jPC9maWxlbmFtZT4gY29tbWFuZC1saW5lIG9wdGlvbik6CisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1jaGVja3VyaSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fY2hlY2t1cmk8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBWYWxpZGF0ZXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhbHVlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1jaGVja3VyaWFsbCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fY2hlY2t1cmlhbGw8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBWYWxpZGF0ZXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhbHVlIGZvciBhbGwgcmVjaXBlcyByZXF1aXJlZCB0byBidWlsZCBhIHRhcmdldC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtY2xlYW4nPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2NsZWFuPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUmVtb3ZlcyBhbGwgb3V0cHV0IGZpbGVzIGZvciBhIHRhcmdldCBmcm9tIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXVucGFjayc+PGZpbGVuYW1lPmRvX3VucGFjazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzayBmb3J3YXJkIChpLmUuCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGF0Y2gnPjxmaWxlbmFtZT5kb191bnBhY2s8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIHJ1biB0aGlzIHRhc2sgdXNpbmcgQml0QmFrZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWMgY2xlYW4gPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJ1bm5pbmcgdGhpcyB0YXNrIGRvZXMgbm90IHJlbW92ZSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NoYXJlZC1zdGF0ZS1jYWNoZSc+c3N0YXRlPC9saW5rPikgY2FjaGUKKyAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpZiBubyBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIGFuZCB0aGUgcmVjaXBlIGlzCisgICAgICAgICAgICByZWJ1aWx0IGFmdGVyIGNsZWFuaW5nLCBvdXRwdXQgZmlsZXMgYXJlIHNpbXBseSByZXN0b3JlZCBmcm9tIHRoZQorICAgICAgICAgICAgc3N0YXRlIGNhY2hlLgorICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gcmVtb3ZlIHRoZSBzc3RhdGUgY2FjaGUgZmlsZXMgZm9yIHRoZSByZWNpcGUsCisgICAgICAgICAgICB5b3UgbmVlZCB0byB1c2UgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY2xlYW5zc3RhdGUnPjxmaWxlbmFtZT5kb19jbGVhbnNzdGF0ZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzayBpbnN0ZWFkIChpLmUuIDxmaWxlbmFtZT5iaXRiYWtlIC1jIGNsZWFuc3N0YXRlPC9maWxlbmFtZT4gPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+KS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtY2xlYW5hbGwnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2NsZWFuYWxsPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUmVtb3ZlcyBhbGwgb3V0cHV0IGZpbGVzLCBzaGFyZWQgc3RhdGUKKyAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSdzaGFyZWQtc3RhdGUtY2FjaGUnPnNzdGF0ZTwvbGluaz4pIGNhY2hlLCBhbmQKKyAgICAgICAgICAgIGRvd25sb2FkZWQgc291cmNlIGZpbGVzIGZvciBhIHRhcmdldCAoaS5lLiB0aGUgY29udGVudHMgb2YKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgRXNzZW50aWFsbHksIHRoZSA8ZmlsZW5hbWU+ZG9fY2xlYW5hbGw8L2ZpbGVuYW1lPiB0YXNrIGlzCisgICAgICAgICAgICBpZGVudGljYWwgdG8gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY2xlYW5zc3RhdGUnPjxmaWxlbmFtZT5kb19jbGVhbnNzdGF0ZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzayB3aXRoIHRoZSBhZGRlZCByZW1vdmFsIG9mIGRvd25sb2FkZWQgc291cmNlIGZpbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIHJ1biB0aGlzIHRhc2sgdXNpbmcgQml0QmFrZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWMgY2xlYW5hbGwgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFR5cGljYWxseSwgeW91IHdvdWxkIG5vdCBub3JtYWxseSB1c2UgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xlYW5hbGw8L2ZpbGVuYW1lPiB0YXNrLgorICAgICAgICAgICAgRG8gc28gb25seSBpZiB5b3Ugd2FudCB0byBzdGFydCBmcmVzaCB3aXRoIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWZldGNoJz48ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRhc2suCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWNsZWFuc3N0YXRlJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19jbGVhbnNzdGF0ZTwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJlbW92ZXMgYWxsIG91dHB1dCBmaWxlcyBhbmQgc2hhcmVkIHN0YXRlCisgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0nc2hhcmVkLXN0YXRlLWNhY2hlJz5zc3RhdGU8L2xpbms+KQorICAgICAgICAgICAgY2FjaGUgZm9yIGEgdGFyZ2V0LgorICAgICAgICAgICAgRXNzZW50aWFsbHksIHRoZSA8ZmlsZW5hbWU+ZG9fY2xlYW5zc3RhdGU8L2ZpbGVuYW1lPiB0YXNrIGlzCisgICAgICAgICAgICBpZGVudGljYWwgdG8gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY2xlYW4nPjxmaWxlbmFtZT5kb19jbGVhbjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzayB3aXRoIHRoZSBhZGRlZCByZW1vdmFsIG9mIHNoYXJlZCBzdGF0ZQorICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3NoYXJlZC1zdGF0ZS1jYWNoZSc+c3N0YXRlPC9saW5rPikgY2FjaGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gcnVuIHRoaXMgdGFzayB1c2luZyBCaXRCYWtlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYyBjbGVhbnNzdGF0ZSA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgcnVuIHRoZSA8ZmlsZW5hbWU+ZG9fY2xlYW5zc3RhdGU8L2ZpbGVuYW1lPiB0YXNrLAorICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gbm8gbG9uZ2VyIHVzZXMgYW55CisgICAgICAgICAgICBzc3RhdGUuCisgICAgICAgICAgICBDb25zZXF1ZW50bHksIGJ1aWxkaW5nIHRoZSByZWNpcGUgZnJvbSBzY3JhdGNoIGlzIGd1YXJhbnRlZWQuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX2NsZWFuc3N0YXRlPC9maWxlbmFtZT4gdGFzayBjYW5ub3QgcmVtb3ZlCisgICAgICAgICAgICAgICAgc3N0YXRlIGZyb20gYSByZW1vdGUgc3N0YXRlIG1pcnJvci4KKyAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBidWlsZCBhIHRhcmdldCBmcm9tIHNjcmF0Y2ggdXNpbmcgcmVtb3RlCisgICAgICAgICAgICAgICAgbWlycm9ycywgdXNlIHRoZSAiLWYiIG9wdGlvbiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1mIC1jIGRvX2NsZWFuc3N0YXRlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWRldnNoZWxsJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19kZXZzaGVsbDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFN0YXJ0cyBhIHNoZWxsIHdob3NlIGVudmlyb25tZW50IGlzIHNldCB1cCBmb3IKKyAgICAgICAgICAgIGRldmVsb3BtZW50LCBkZWJ1Z2dpbmcsIG9yIGJvdGguCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGxhdGRldi1hcHBkZXYtZGV2c2hlbGwnPlVzaW5nIGEgRGV2ZWxvcG1lbnQgU2hlbGw8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlCisgICAgICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtZmV0Y2hhbGwnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2ZldGNoYWxsPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmV0Y2hlcyBhbGwgcmVtb3RlIHNvdXJjZXMgcmVxdWlyZWQgdG8gYnVpbGQgYSB0YXJnZXQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWxpc3R0YXNrcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fbGlzdHRhc2tzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTGlzdHMgYWxsIGRlZmluZWQgdGFza3MgZm9yIGEgdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1wYWNrYWdlX2luZGV4Jz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19wYWNrYWdlX2luZGV4PC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3JlYXRlcyBvciB1cGRhdGVzIHRoZSBpbmRleCBpbiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPgorICAgICAgICAgICAgYXJlYS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoaXMgdGFzayBpcyBub3QgdHJpZ2dlcmVkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgLWM8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUgb3B0aW9uIGFzCisgICAgICAgICAgICAgICAgYXJlIHRoZSBvdGhlciB0YXNrcyBpbiB0aGlzIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGlzIHRhc2sgaXMgc3BlY2lmaWNhbGx5IGZvciB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZS1pbmRleDwvZmlsZW5hbWU+IHJlY2lwZSwKKyAgICAgICAgICAgICAgICB5b3UgcnVuIGl0IHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgcGFja2FnZS1pbmRleDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0naW1hZ2UtcmVsYXRlZC10YXNrcyc+CisgICAgPHRpdGxlPkltYWdlLVJlbGF0ZWQgVGFza3M8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBmb2xsb3dpbmcgdGFza3MgYXJlIGFwcGxpY2FibGUgdG8gaW1hZ2UgcmVjaXBlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWJvb3RpbWcnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2Jvb3RpbWc8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIGEgYm9vdGFibGUgbGl2ZSBpbWFnZS4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gbGl2ZSBpbWFnZSB0eXBlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtYnVuZGxlX2luaXRyYW1mcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fYnVuZGxlX2luaXRyYW1mczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENvbWJpbmVzIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyYW1mcykgaW1hZ2UgYW5kIGtlcm5lbAorICAgICAgICAgICAgdG9nZXRoZXIgdG8gZm9ybSBhIHNpbmdsZSBpbWFnZS4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPTkZJR19JTklUUkFNRlNfU09VUkNFJz48ZmlsZW5hbWU+Q09ORklHX0lOSVRSQU1GU19TT1VSQ0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIGhhcyBzb21lIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgdHlwZXMgb2YgaW1hZ2VzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1yb290ZnMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3Jvb3RmczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSAoZmlsZSBhbmQgZGlyZWN0b3J5IHN0cnVjdHVyZSkgZm9yIGFuCisgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdpbWFnZS1nZW5lcmF0aW9uLWRldi1lbnZpcm9ubWVudCc+SW1hZ2UgR2VuZXJhdGlvbjwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgcm9vdCBmaWxlc3lzdGVtIGlzIGNyZWF0ZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXRlc3RpbWFnZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fdGVzdGltYWdlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQm9vdHMgYW4gaW1hZ2UgYW5kIHBlcmZvcm1zIHJ1bnRpbWUgdGVzdHMgd2l0aGluIHRoZSBpbWFnZS4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhdXRvbWF0aWNhbGx5IHRlc3RpbmcgaW1hZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGVyZm9ybWluZy1hdXRvbWF0ZWQtcnVudGltZS10ZXN0aW5nJz5QZXJmb3JtaW5nIEF1dG9tYXRlZCBSdW50aW1lIFRlc3Rpbmc8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy10ZXN0aW1hZ2VfYXV0byc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fdGVzdGltYWdlX2F1dG88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCb290cyBhbiBpbWFnZSBhbmQgcGVyZm9ybXMgcnVudGltZSB0ZXN0cyB3aXRoaW4gdGhlIGltYWdlCisgICAgICAgICAgICBpbW1lZGlhdGVseSBhZnRlciBpdCBoYXMgYmVlbiBidWlsdC4KKyAgICAgICAgICAgIFRoaXMgdGFzayBpcyBlbmFibGVkIHdoZW4geW91IHNldAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRFU1RfSU1BR0UnPjxmaWxlbmFtZT5URVNUX0lNQUdFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBlcXVhbCB0byAiMSIuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhdXRvbWF0aWNhbGx5IHRlc3RpbmcgaW1hZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGVyZm9ybWluZy1hdXRvbWF0ZWQtcnVudGltZS10ZXN0aW5nJz5QZXJmb3JtaW5nIEF1dG9tYXRlZCBSdW50aW1lIFRlc3Rpbmc8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy12bWRraW1nJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb192bWRraW1nPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3JlYXRlcyBhIDxmaWxlbmFtZT4udm1kazwvZmlsZW5hbWU+IGltYWdlIGZvciB1c2Ugd2l0aAorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy52bXdhcmUuY29tLyc+Vk13YXJlPC91bGluaz4KKyAgICAgICAgICAgIGFuZCBjb21wYXRpYmxlIHZpcnR1YWwgbWFjaGluZSBob3N0cy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2tlcm5lbC1yZWxhdGVkLXRhc2tzJz4KKyAgICA8dGl0bGU+S2VybmVsLVJlbGF0ZWQgVGFza3M8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBmb2xsb3dpbmcgdGFza3MgYXJlIGFwcGxpY2FibGUgdG8ga2VybmVsIHJlY2lwZXMuCisgICAgICAgIFNvbWUgb2YgdGhlc2UgdGFza3MgKGUuZy4gdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1tZW51Y29uZmlnJz48ZmlsZW5hbWU+ZG9fbWVudWNvbmZpZzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0YXNrKSBhcmUgYWxzbyBhcHBsaWNhYmxlIHRvIHJlY2lwZXMgdGhhdCB1c2UKKyAgICAgICAgTGludXgga2VybmVsIHN0eWxlIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyB0aGUgQnVzeUJveCByZWNpcGUuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1jb21waWxlX2tlcm5lbG1vZHVsZXMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2NvbXBpbGVfa2VybmVsbW9kdWxlczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENvbXBpbGVzIGxvYWRhYmxlIG1vZHVsZXMgZm9yIHRoZSBMaW51eCBrZXJuZWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWRpZmZjb25maWcnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2RpZmZjb25maWc8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb21wYXJlcyB0aGUgb2xkIGFuZCBuZXcgY29uZmlnIGZpbGVzIGFmdGVyIHJ1bm5pbmcgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtbWVudWNvbmZpZyc+PGZpbGVuYW1lPmRvX21lbnVjb25maWc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRhc2sgZm9yIHRoZSBrZXJuZWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWtlcm5lbF9jaGVja291dCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fa2VybmVsX2NoZWNrb3V0PC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ2hlY2tzIG91dCBzb3VyY2UvbWV0YSBicmFuY2hlcyBmb3IgYSBsaW51eC15b2N0byBzdHlsZSBrZXJuZWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWtlcm5lbF9jb25maWdjaGVjayc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fa2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVmFsaWRhdGVzIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmb3IgYSBsaW51eC15b2N0byBzdHlsZSBrZXJuZWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWtlcm5lbF9jb25maWdtZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fa2VybmVsX2NvbmZpZ21lPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXNzZW1ibGVzIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmb3IgYSBsaW51eC15b2N0byBzdHlsZSBrZXJuZWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWtlcm5lbF9saW5rX3ZtbGludXgnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2tlcm5lbF9saW5rX3ZtbGludXg8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIGEgc3ltYm9saWMgbGluayBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPmFyY2gvJGFyY2gvYm9vdDwvZmlsZW5hbWU+IGZvciB2bWxpbnV4IGtlcm5lbAorICAgICAgICAgICAgaW1hZ2VzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1tZW51Y29uZmlnJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19tZW51Y29uZmlnPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUnVucyA8ZmlsZW5hbWU+bWFrZSBtZW51Y29uZmlnPC9maWxlbmFtZT4gZm9yIHRoZSBrZXJuZWwuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiwgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLW1lbnVjb25maWcnPlVzaW5nJm5ic3A7Jm5ic3A7PGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPjwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXNhdmVkZWZjb25maWcnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3NhdmVkZWZjb25maWc8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIGEgbWluaW1hbCBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1zaXplY2hlY2snPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3NpemVjaGVjazwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENoZWNrcyB0aGUgc2l6ZSBvZiB0aGUga2VybmVsIGltYWdlIGFnYWluc3QKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LRVJORUxfSU1BR0VfTUFYU0laRSc+PGZpbGVuYW1lPktFUk5FTF9JTUFHRV9NQVhTSVpFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB3aGVuIHNldC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3Mtc3RyaXAnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3N0cmlwPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU3RyaXBzIHVubmVlZGVkIHNlY3Rpb25zIG91dCBvZiB0aGUgTGludXgga2VybmVsIGltYWdlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy11Ym9vdF9ta2ltYWdlJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb191Ym9vdF9ta2ltYWdlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3JlYXRlcyBhIHVJbWFnZSBmaWxlIGZyb20gdGhlIGtlcm5lbCBmb3IgdGhlIFUtQm9vdCBib290bG9hZGVyLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy12YWxpZGF0ZV9icmFuY2hlcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fdmFsaWRhdGVfYnJhbmNoZXM8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBFbnN1cmVzIHRoYXQgdGhlIHNvdXJjZSwgbWV0YWRhdGEgKG9yIGJvdGgpIGJyYW5jaGVzIGFyZSBvbiB0aGUKKyAgICAgICAgICAgIGxvY2F0aW9ucyBzcGVjaWZpZWQgYnkgdGhlaXIKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhbHVlcyBmb3IgYSBsaW51eC15b2N0byBzdHlsZSBrZXJuZWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdtaXNjZWxsYW5lb3VzLXRhc2tzJz4KKyAgICA8dGl0bGU+TWlzY2VsbGFuZW91cyBUYXNrczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSBtaXNjZWxsYW5lb3VzIHRhc2tzLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtZ2VuZXJhdGVfcXRfY29uZmlnX2ZpbGUnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2dlbmVyYXRlX3F0X2NvbmZpZ19maWxlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV3JpdGVzIGEgPGZpbGVuYW1lPnF0LmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmaWxlIHVzZWQgZm9yIGJ1aWxkaW5nIGEgUXQtYmFzZWQgYXBwbGljYXRpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXNwZHgnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3NwZHg8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIGJ1aWxkIHN0YWdlIHRoYXQgdGFrZXMgdGhlIHNvdXJjZSBjb2RlIGFuZCBzY2FucyBpdCBvbiBhIHJlbW90ZQorICAgICAgICAgICAgRk9TU09MT0dZIHNlcnZlciBpbiBvcmRlciB0byBwcm9kdWNlIGFuIFNQRFggZG9jdW1lbnQuCisgICAgICAgICAgICBUaGlzIHRhc2sgYXBwbGllcyBvbmx5IHRvIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3BkeCc+PGZpbGVuYW1lPnNwZHg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi12YXJpYWJsZXMueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXZhcmlhYmxlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM0ZmMyMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi12YXJpYWJsZXMueG1sCkBAIC0wLDAgKzEsMTQwOTYgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzwhLS0gRHVtbXkgY2hhcHRlciAtLT4KKzxjaGFwdGVyIGlkPSdyZWYtdmFyaWFibGVzLWdsb3MnPgorCis8dGl0bGU+VmFyaWFibGVzIEdsb3NzYXJ5PC90aXRsZT4KKworPHBhcmE+CisgICAgVGhpcyBjaGFwdGVyIGxpc3RzIGNvbW1vbiB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhbmQgZ2l2ZXMgYW4gb3ZlcnZpZXcKKyAgICBvZiB0aGVpciBmdW5jdGlvbiBhbmQgY29udGVudHMuCis8L3BhcmE+CisKKzxnbG9zc2FyeSBpZD0ncmVmLXZhcmlhYmxlcy1nbG9zc2FyeSc+CisKKworICAgIDxwYXJhPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1BQklFWFRFTlNJT04nPkE8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUInPkI8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNBQ0hFJz5DPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EJz5EPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FRklfUFJPVklERVInPkU8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZFQVRVUkVfUEFDS0FHRVMnPkY8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdEQic+RzwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSE9NRVBBR0UnPkg8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlDRUNDX0RJU0FCTEVEJz5JPC9saW5rPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS1qJz5KPC9saW5rPiAtLT4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItS0FSQ0gnPks8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxBQkVMUyc+TDwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+TTwvbGluaz4KKzwhLS0gICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItZ2xvc3Nhcnktbic+TjwvbGluaz4gLS0+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU9CSkNPUFknPk88L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVAnPlA8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVFNQUtFX1BST0ZJTEVTJz5RPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SQU5MSUInPlI8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPlM8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVQnPlQ8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVCT09UX0NPTkZJRyc+VTwvbGluaz4KKzwhLS0gICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItZ2xvc3Nhcnktdic+VjwvbGluaz4gLS0+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVdBUk5fUUEnPlc8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVhTRVJWRVInPlg8L2xpbms+Cis8IS0tICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWdsb3NzYXJ5LXknPlk8L2xpbms+IC0tPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS16Jz5aPC9saW5rPi0tPgorICAgIDwvcGFyYT4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWEnPjx0aXRsZT5BPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFCSUVYVEVOU0lPTic+PGdsb3NzdGVybT5BQklFWFRFTlNJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFCSUVYVEVOU0lPTltkb2NdID0gIkV4dGVuc2lvbiB0byB0aGUgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoQUJJKSBmaWVsZCBvZiB0aGUgR05VIGNhbm9uaWNhbCBhcmNoaXRlY3R1cmUgbmFtZSAoZS5nLiAiZWFiaSIpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEV4dGVuc2lvbiB0byB0aGUgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoQUJJKQorICAgICAgICAgICAgICAgICAgICBmaWVsZCBvZiB0aGUgR05VIGNhbm9uaWNhbCBhcmNoaXRlY3R1cmUgbmFtZQorICAgICAgICAgICAgICAgICAgICAoZS5nLiAiZWFiaSIpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgIEFCSSBleHRlbnNpb25zIGFyZSBzZXQgaW4gdGhlIG1hY2hpbmUgaW5jbHVkZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtLmluYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgZmlsZSBzZXRzIHRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uOgorICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQUJJRVhURU5TSU9OID0gImVhYmkiCisgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFMTE9XX0VNUFRZJz48Z2xvc3N0ZXJtPkFMTE9XX0VNUFRZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBBTExPV19FTVBUWVtkb2NdID0gIlNwZWNpZmllcyBpZiBhbiBvdXRwdXQgcGFja2FnZSBzaG91bGQgc3RpbGwgYmUgcHJvZHVjZWQgaWYgaXQgaXMgZW1wdHkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgaWYgYW4gb3V0cHV0IHBhY2thZ2Ugc2hvdWxkIHN0aWxsIGJlIHByb2R1Y2VkIGlmIGl0IGlzIGVtcHR5LgorICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIEJpdEJha2UgZG9lcyBub3QgcHJvZHVjZSBlbXB0eSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICBUaGlzIGRlZmF1bHQgYmVoYXZpb3IgY2FuIGNhdXNlIGlzc3VlcyB3aGVuIHRoZXJlIGlzIGFuCisgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4gb3IKKyAgICAgICAgICAgICAgICAgICBzb21lIG90aGVyIGhhcmQgcnVudGltZSByZXF1aXJlbWVudCBvbiB0aGUgZXhpc3RlbmNlIG9mIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgIExpa2UgYWxsIHBhY2thZ2UtY29udHJvbGxpbmcgdmFyaWFibGVzLCB5b3UgbXVzdCBhbHdheXMgdXNlIHRoZW0gaW4KKyAgICAgICAgICAgICAgICAgICBjb25qdW5jdGlvbiB3aXRoIGEgcGFja2FnZSBuYW1lIG92ZXJyaWRlLCBhcyBpbjoKKyAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEFMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisgICAgIEFMTE9XX0VNUFRZXyR7UE59LWRldiA9ICIxIgorICAgICBBTExPV19FTVBUWV8ke1BOfS1zdGF0aWNkZXYgPSAiMSIKKyAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQUxURVJOQVRJVkUnPjxnbG9zc3Rlcm0+QUxURVJOQVRJVkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFMVEVSTkFUSVZFW2RvY10gPSAiTGlzdHMgY29tbWFuZHMgaW4gYSBwYWNrYWdlIHRoYXQgbmVlZCBhbiBhbHRlcm5hdGl2ZSBiaW5hcnkgbmFtaW5nIHNjaGVtZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBjb21tYW5kcyBpbiBhIHBhY2thZ2UgdGhhdCBuZWVkIGFuIGFsdGVybmF0aXZlCisgICAgICAgICAgICAgICAgICAgIGJpbmFyeSBuYW1pbmcgc2NoZW1lLgorICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMgdGhlIHNhbWUgY29tbWFuZCBpcyBwcm92aWRlZCBpbiBtdWx0aXBsZSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB0aGlzIG9jY3VycywgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gbmVlZHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIGNyZWF0ZSBhIGRpZmZlcmVudCBiaW5hcnkKKyAgICAgICAgICAgICAgICAgICAgbmFtaW5nIHNjaGVtZSBzbyB0aGUgY29tbWFuZHMgY2FuIGNvLWV4aXN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyB1c2UgdGhlIHZhcmlhYmxlLCBsaXN0IG91dCB0aGUgcGFja2FnZSdzIGNvbW1hbmRzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgYWxzbyBleGlzdCBhcyBwYXJ0IG9mIGFub3RoZXIgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSA8ZmlsZW5hbWU+YnVzeWJveDwvZmlsZW5hbWU+IHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgaGFzIGZvdXIgY29tbWFuZHMgdGhhdCBhbHNvIGV4aXN0IGFzIHBhcnQgb2YgYW5vdGhlcgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLCB5b3UgaWRlbnRpZnkgdGhlbSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEFMVEVSTkFUSVZFX2J1c3lib3ggPSAic2ggc2VkIHRlc3QgYnJhY2tldCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXBkYXRlLWFsdGVybmF0aXZlcyc+PGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BTFRFUk5BVElWRV9MSU5LX05BTUUnPjxnbG9zc3Rlcm0+QUxURVJOQVRJVkVfTElOS19OQU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBBTFRFUk5BVElWRV9MSU5LX05BTUVbZG9jXSA9ICJVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIG1hcCBkdXBsaWNhdGVkIGNvbW1hbmRzIHRvIGFjdHVhbCBsb2NhdGlvbnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVXNlZCBieSB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSB0byBtYXAgZHVwbGljYXRlZCBjb21tYW5kcworICAgICAgICAgICAgICAgICAgICB0byBhY3R1YWwgbG9jYXRpb25zLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIDxmaWxlbmFtZT5icmFja2V0PC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBieSB0aGUgPGZpbGVuYW1lPmJ1c3lib3g8L2ZpbGVuYW1lPiBwYWNrYWdlIGlzCisgICAgICAgICAgICAgICAgICAgIGR1cGxpY2F0ZWQgdGhyb3VnaCBhbm90aGVyIHBhY2thZ2UsIHlvdSBtdXN0IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkFMVEVSTkFUSVZFX0xJTktfTkFNRTwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIGFjdHVhbCBsb2NhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBTFRFUk5BVElWRV9MSU5LX05BTUVbYnJhY2tldF0gPSAiL3Vzci9iaW4vWyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBiaW5hcnkgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnJhY2tldDwvZmlsZW5hbWU+IGNvbW1hbmQgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPls8L2ZpbGVuYW1lPikgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1c3lib3g8L2ZpbGVuYW1lPiBwYWNrYWdlIHJlc2lkZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvYmluLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5BTFRFUk5BVElWRV9MSU5LX05BTUU8L2ZpbGVuYW1lPiBpcyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQsIGl0IGRlZmF1bHRzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiaW5kaXJ9LzxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXBkYXRlLWFsdGVybmF0aXZlcyc+PGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BTFRFUk5BVElWRV9QUklPUklUWSc+PGdsb3NzdGVybT5BTFRFUk5BVElWRV9QUklPUklUWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQUxURVJOQVRJVkVfUFJJT1JJVFlbZG9jXSA9ICJVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIGNyZWF0ZSBkZWZhdWx0IHByaW9yaXRpZXMgZm9yIGR1cGxpY2F0ZWQgY29tbWFuZHMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVXNlZCBieSB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSB0byBjcmVhdGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICBwcmlvcml0aWVzIGZvciBkdXBsaWNhdGVkIGNvbW1hbmRzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgdmFyaWFibGUgdG8gY3JlYXRlIGEgc2luZ2xlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgcmVnYXJkbGVzcyBvZiB0aGUgY29tbWFuZCBuYW1lIG9yIHBhY2thZ2UsIGEgZGVmYXVsdCBmb3IKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgZHVwbGljYXRlZCBjb21tYW5kcyByZWdhcmRsZXNzIG9mIHRoZSBwYWNrYWdlLCBvcgorICAgICAgICAgICAgICAgICAgICBhIGRlZmF1bHQgZm9yIHNwZWNpZmljIGNvbW1hbmRzIHRpZWQgdG8gcGFydGljdWxhciBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdGhlIGF2YWlsYWJsZSBzeW50YXggZm9ybXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiPHJlcGxhY2VhYmxlPnByaW9yaXR5PC9yZXBsYWNlYWJsZT4iCisgICAgIEFMVEVSTkFUSVZFX1BSSU9SSVRZWzxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT5dID0gIjxyZXBsYWNlYWJsZT5wcmlvcml0eTwvcmVwbGFjZWFibGU+IgorICAgICBBTFRFUk5BVElWRV9QUklPUklUWV88cmVwbGFjZWFibGU+cGtnPC9yZXBsYWNlYWJsZT5bPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPl0gPSAiPHJlcGxhY2VhYmxlPnByaW9yaXR5PC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVwZGF0ZS1hbHRlcm5hdGl2ZXMnPjxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQUxURVJOQVRJVkVfVEFSR0VUJz48Z2xvc3N0ZXJtPkFMVEVSTkFUSVZFX1RBUkdFVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQUxURVJOQVRJVkVfVEFSR0VUW2RvY10gPSAiVXNlZCBieSB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSB0byBjcmVhdGUgZGVmYXVsdCBsaW5rIGxvY2F0aW9ucyBmb3IgZHVwbGljYXRlZCBjb21tYW5kcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIGNyZWF0ZSBkZWZhdWx0IGxpbmsKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zIGZvciBkdXBsaWNhdGVkIGNvbW1hbmRzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgdmFyaWFibGUgdG8gY3JlYXRlIGEgc2luZ2xlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gZm9yIGFsbCBkdXBsaWNhdGVkIGNvbW1hbmRzIHJlZ2FyZGxlc3Mgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgbmFtZSBvciBwYWNrYWdlLCBhIGRlZmF1bHQgZm9yCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIGR1cGxpY2F0ZWQgY29tbWFuZHMgcmVnYXJkbGVzcyBvZiB0aGUgcGFja2FnZSwgb3IKKyAgICAgICAgICAgICAgICAgICAgYSBkZWZhdWx0IGZvciBzcGVjaWZpYyBjb21tYW5kcyB0aWVkIHRvIHBhcnRpY3VsYXIgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHRoZSBhdmFpbGFibGUgc3ludGF4IGZvcm1zOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEFMVEVSTkFUSVZFX1RBUkdFVCA9ICI8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4iCisgICAgIEFMVEVSTkFUSVZFX1RBUkdFVFs8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+XSA9ICI8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4iCisgICAgIEFMVEVSTkFUSVZFX1RBUkdFVF88cmVwbGFjZWFibGU+cGtnPC9yZXBsYWNlYWJsZT5bPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPl0gPSAiPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPkFMVEVSTkFUSVZFX1RBUkdFVDwvZmlsZW5hbWU+IGlzIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQsIGl0IGluaGVyaXRzIHRoZSB2YWx1ZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1BTFRFUk5BVElWRV9MSU5LX05BTUUnPjxmaWxlbmFtZT5BTFRFUk5BVElWRV9MSU5LX05BTUU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPkFMVEVSTkFUSVZFX0xJTktfTkFNRTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BTFRFUk5BVElWRV9UQVJHRVQ8L2ZpbGVuYW1lPiBhcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSwgdGhlIHRhcmdldCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QUxURVJOQVRJVkVfVEFSR0VUPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgIjxmaWxlbmFtZT4ue0JQTn08L2ZpbGVuYW1lPiIgYXBwZW5kZWQgdG8gaXQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbmFsbHksIGlmIHRoZSBmaWxlIHJlZmVyZW5jZWQgaGFzIG5vdCBiZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuYW1lZCwgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0gd2lsbCByZW5hbWUgaXQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdm9pZCB0aGUgbmVlZCB0byByZW5hbWUgYWx0ZXJuYXRpdmUgZmlsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzayB3aGlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldGFpbmluZyBzdXBwb3J0IGZvciB0aGUgY29tbWFuZCBpZiBuZWNlc3NhcnkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVwZGF0ZS1hbHRlcm5hdGl2ZXMnPjxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVBQRU5EJz48Z2xvc3N0ZXJtPkFQUEVORDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQVBQRU5EW2RvY10gPSAiQW4gb3ZlcnJpZGUgbGlzdCBvZiBhcHBlbmQgc3RyaW5ncyBmb3IgZWFjaCBMQUJFTC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBbiBvdmVycmlkZSBsaXN0IG9mIGFwcGVuZCBzdHJpbmdzIGZvciBlYWNoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MQUJFTFMnPjxmaWxlbmFtZT5MQUJFTDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ncnViLWVmaSc+PGZpbGVuYW1lPmdydWItZWZpPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIHZhcmlhYmxlIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVInPjxnbG9zc3Rlcm0+QVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFSW2RvY10gPSAiTWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdhcicuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHVzZWQgdG8gcnVuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hcjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFSQ0hJVkVSX01PREUnPjxnbG9zc3Rlcm0+QVJDSElWRVJfTU9ERTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQVJDSElWRVJfTU9ERVtkb2NdID0gIkNvbnRyb2xzIGFyY2hpdmUgY3JlYXRpb24gdXNlZCB3aGVuIHJlbGVhc2luZyBzb3VyY2UgZmlsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2VkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWFyY2hpdmVyJz48ZmlsZW5hbWU+YXJjaGl2ZXI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIGRldGVybWluZXMgdGhlIHR5cGUgb2YgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUKKyAgICAgICAgICAgICAgICAgICAgYSByZWxlYXNlZCBhcmNoaXZlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIHRvIGNyZWF0ZSBhcmNoaXZlcyBvZiBwYXRjaGVkCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgb3JpZ2luYWwgc291cmNlLCBjb25maWd1cmVkIHNvdXJjZSwgYW5kIHNvIGZvcnRoCisgICAgICAgICAgICAgICAgICAgIGJ5IGVtcGxveWluZyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIGZsYWdzICh2YXJmbGFncyk6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQVJDSElWRVJfTU9ERVtzcmNdID0gIm9yaWdpbmFsIiAgICAgICAgICAgICAgICAgIyBVc2VzIG9yaWdpbmFsICh1bnBhY2tlZCkgc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmlsZXMuCisKKyAgICAgQVJDSElWRVJfTU9ERVtzcmNdID0gInBhdGNoZWQiICAgICAgICAgICAgICAgICAgIyBVc2VzIHBhdGNoZWQgc291cmNlIGZpbGVzLiBUaGlzIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIGRlZmF1bHQuCisKKyAgICAgQVJDSElWRVJfTU9ERVtzcmNdID0gImNvbmZpZ3VyZWQiICAgICAgICAgICAgICAgIyBVc2VzIGNvbmZpZ3VyZWQgc291cmNlIGZpbGVzLgorCisgICAgIEFSQ0hJVkVSX01PREVbZGlmZl0gPSAiMSIgICAgICAgICAgICAgICAgICAgICAgICMgVXNlcyBwYXRjaGVzIGJldHdlZW4gZG9fdW5wYWNrIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRvX3BhdGNoLgorCisgICAgIEFSQ0hJVkVSX01PREVbZGlmZi1leGNsdWRlXSA/PSAiPHJlcGxhY2VhYmxlPmZpbGU8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+ZmlsZTwvcmVwbGFjZWFibGU+IC4uLiIgICMgTGlzdHMgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZXhjbHVkZSBmcm9tIGRpZmYuCisKKyAgICAgQVJDSElWRVJfTU9ERVtkdW1wZGF0YV0gPSAiMSIgICAgICAgICAgICAgICAgICAgIyBVc2VzIGVudmlyb25tZW50IGRhdGEuCisKKyAgICAgQVJDSElWRVJfTU9ERVtyZWNpcGVdID0gIjEiICAgICAgICAgICAgICAgICAgICAgIyBVc2VzIHJlY2lwZSBhbmQgaW5jbHVkZSBmaWxlcy4KKworICAgICBBUkNISVZFUl9NT0RFW3NycG1dID0gIjEiICAgICAgICAgICAgICAgICAgICAgICAjIFVzZXMgUlBNIHBhY2thZ2UgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgdmFyaWFibGUgd29ya3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3Nlcy9hcmNoaXZlci5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFTJz48Z2xvc3N0ZXJtPkFTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBBU1tkb2NdID0gIk1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgYXNzZW1ibGVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB1c2VkIHRvIHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgYXNzZW1ibGVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFTU1VNRV9QUk9WSURFRCc+PGdsb3NzdGVybT5BU1NVTUVfUFJPVklERUQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFTU1VNRV9QUk9WSURFRFtkb2NdID0gIkxpc3RzIHJlY2lwZSBuYW1lcyAoUE4gdmFsdWVzKSBCaXRCYWtlIGRvZXMgbm90IGF0dGVtcHQgdG8gYnVpbGQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgcmVjaXBlIG5hbWVzCisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpIEJpdEJha2UgZG9lcyBub3QgYXR0ZW1wdCB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgQml0QmFrZSBhc3N1bWVzIHRoZXNlIHJlY2lwZXMgaGF2ZSBhbHJlYWR5IGJlZW4KKyAgICAgICAgICAgICAgICAgICAgYnVpbHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIE9wZW5FbWJlZGRlZCBDb3JlLCA8ZmlsZW5hbWU+QVNTVU1FX1BST1ZJREVEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbW9zdGx5IHNwZWNpZmllcyBuYXRpdmUgdG9vbHMgdGhhdCBzaG91bGQgbm90IGJlIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBBbiBleGFtcGxlIGlzIDxmaWxlbmFtZT5naXQtbmF0aXZlPC9maWxlbmFtZT4sIHdoaWNoIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkLCBhbGxvd3MgZm9yIHRoZSBHaXQgYmluYXJ5IGZyb20gdGhlIGhvc3QgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgdXNlZCByYXRoZXIgdGhhbiBidWlsZGluZyA8ZmlsZW5hbWU+Z2l0LW5hdGl2ZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFTU1VNRV9TSExJQlMnPjxnbG9zc3Rlcm0+QVNTVU1FX1NITElCUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQVNTVU1FX1NITElCU1tkb2NdID0gUHJvdmlkZXMgYWRkaXRpb25hbCBzaGxpYnMgcHJvdmlkZXIgbWFwcGluZyBpbmZvcm1hdGlvbiwgd2hpY2ggYWRkcyB0byBvciBvdmVyd3JpdGVzIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgYWRkaXRpb25hbCA8ZmlsZW5hbWU+c2hsaWJzPC9maWxlbmFtZT4gcHJvdmlkZXIKKyAgICAgICAgICAgICAgICAgICAgbWFwcGluZyBpbmZvcm1hdGlvbiwgd2hpY2ggYWRkcyB0byBvciBvdmVyd3JpdGVzIHRoZQorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBwcm92aWRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFNlcGFyYXRlIG11bHRpcGxlIGVudHJpZXMgdXNpbmcgc3BhY2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCB1c2UgdGhlIGZvbGxvd2luZyBmb3JtIHRvIGFkZCBhbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2hsaWI8L2ZpbGVuYW1lPiBwcm92aWRlciBvZgorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+c2hsaWJuYW1lPC9yZXBsYWNlYWJsZT4gaW4KKyAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnBhY2thZ2VuYW1lPC9yZXBsYWNlYWJsZT4gd2l0aCB0aGUgb3B0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnZlcnNpb248L3JlcGxhY2VhYmxlPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+c2hsaWJuYW1lOnBhY2thZ2VuYW1lPC9yZXBsYWNlYWJsZT5bXzxyZXBsYWNlYWJsZT52ZXJzaW9uPC9yZXBsYWNlYWJsZT5dCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgYWRkcyBhIHNoYXJlZCBsaWJyYXJ5IG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJFR0wuc28uMTwvZmlsZW5hbWU+IGFzIGJlaW5nIHByb3ZpZGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bGliZWdsLWltcGxlbWVudGF0aW9uPC9maWxlbmFtZT4gcGFja2FnZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBU1NVTUVfU0hMSUJTID0gImxpYkVHTC5zby4xOmxpYmVnbC1pbXBsZW1lbnRhdGlvbiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFVVEhPUic+PGdsb3NzdGVybT5BVVRIT1I8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFVVEhPUltkb2NdID0gIkVtYWlsIGFkZHJlc3MgdXNlZCB0byBjb250YWN0IHRoZSBvcmlnaW5hbCBhdXRob3Igb3IgYXV0aG9ycyBpbiBvcmRlciB0byBzZW5kIHBhdGNoZXMgYW5kIGZvcndhcmQgYnVncy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZW1haWwgYWRkcmVzcyB1c2VkIHRvIGNvbnRhY3QgdGhlIG9yaWdpbmFsIGF1dGhvcgorICAgICAgICAgICAgICAgICAgICBvciBhdXRob3JzIGluIG9yZGVyIHRvIHNlbmQgcGF0Y2hlcyBhbmQgZm9yd2FyZCBidWdzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFVVE9fTElCTkFNRV9QS0dTJz48Z2xvc3N0ZXJtPkFVVE9fTElCTkFNRV9QS0dTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBBVVRPX0xJQk5BTUVfUEtHU1tkb2NdID0gIlNwZWNpZmllcyB3aGljaCBwYWNrYWdlcyBzaG91bGQgYmUgY2hlY2tlZCBmb3IgbGlicmFyaWVzIGFuZCByZW5hbWVkIGFjY29yZGluZyB0byBEZWJpYW4gbGlicmFyeSBwYWNrYWdlIG5hbWluZy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kZWJpYW4nPjxmaWxlbmFtZT5kZWJpYW48L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgaXMgaW5oZXJpdGVkLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkFVVE9fTElCTkFNRV9QS0dTPC9maWxlbmFtZT4gc3BlY2lmaWVzIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIHNob3VsZCBiZSBjaGVja2VkIGZvciBsaWJyYXJpZXMgYW5kIHJlbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIERlYmlhbiBsaWJyYXJ5IHBhY2thZ2UgbmFtaW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiJHtQQUNLQUdFU30iLCB3aGljaCBjYXVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGRlYmlhbiBjbGFzcyB0byBhY3Qgb24gYWxsIHBhY2thZ2VzIHRoYXQgYXJlCisgICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0bHkgZ2VuZXJhdGVkIGJ5IHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVVUT19TWVNMSU5VWE1FTlUnPjxnbG9zc3Rlcm0+QVVUT19TWVNMSU5VWE1FTlU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFVVE9fU1lTTElOVVhNRU5VW2RvY10gPSAiRW5hYmxlcyBjcmVhdGluZyBhbiBhdXRvbWF0aWMgbWVudSBmb3IgdGhlIHN5c2xpbnV4IGJvb3Rsb2FkZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyBjcmVhdGluZyBhbiBhdXRvbWF0aWMgbWVudSBmb3IgdGhlIHN5c2xpbnV4CisgICAgICAgICAgICAgICAgICAgIGJvb3Rsb2FkZXIuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3lzbGludXgnPjxmaWxlbmFtZT5zeXNsaW51eDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBjaGVja3MgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BVVRPUkVWJz48Z2xvc3N0ZXJtPkFVVE9SRVY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFVVE9SRVZbZG9jXSA9ICJXaGVuIFNSQ1JFViBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUsIGl0IHNwZWNpZmllcyB0byB1c2UgdGhlIGxhdGVzdCBzb3VyY2UgcmV2aXNpb24gaW4gdGhlIHJlcG9zaXRvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+U1JDUkVWPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSwgaXQgc3BlY2lmaWVzIHRvIHVzZQorICAgICAgICAgICAgICAgICAgICB0aGUgbGF0ZXN0IHNvdXJjZSByZXZpc2lvbiBpbiB0aGUgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ1JFViA9ICIke0FVVE9SRVZ9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB1c2UgdGhlIHByZXZpb3VzIHN0YXRlbWVudCB0byByZXRyaWV2ZSB0aGUgbGF0ZXN0CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gb2Ygc29mdHdhcmUsIHlvdSBuZWVkIHRvIGJlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1JDUFYnPjxmaWxlbmFtZT5TUkNQVjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYXZlIGEga2VybmVsIHJlY2lwZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIGluaGVyaXRzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1rZXJuZWwnPmtlcm5lbDwvbGluaz4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgYW5kIHlvdSB1c2UgdGhlIHByZXZpb3VzIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCA8ZmlsZW5hbWU+JHtTUkNQVn08L2ZpbGVuYW1lPiBkb2VzIG5vdAorICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGdldCBpbnRvIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBuZWVkIHRvIGNoYW5nZSA8ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIHJlY2lwZSBzbyB0aGF0IGl0IGRvZXMgY29udGFpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtTUkNQVn08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BVkFJTFRVTkVTJz48Z2xvc3N0ZXJtPkFWQUlMVFVORVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFWQUlMVFVORVNbZG9jXSA9ICJUaGUgbGlzdCBvZiBkZWZpbmVkIENQVSBhbmQgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoQUJJKSB0dW5pbmdzIChpLmUuICAidHVuZXMiKSBhdmFpbGFibGUgZm9yIHVzZSBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBvZiBkZWZpbmVkIENQVSBhbmQgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZQorICAgICAgICAgICAgICAgICAgICAoQUJJKSB0dW5pbmdzIChpLmUuICAidHVuZXMiKSBhdmFpbGFibGUgZm9yIHVzZSBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgc2ltcGx5IHByZXNlbnRzIHRoZSB0dW5lcyB0aGF0IGFyZSBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgIE5vdCBhbGwgdHVuZXMgbWF5IGJlIGNvbXBhdGlibGUgd2l0aCBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSBjb25maWd1cmF0aW9uLCBvciB3aXRoIGVhY2ggb3RoZXIgaW4gYQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjb21iaW5pbmctbXVsdGlwbGUtdmVyc2lvbnMtbGlicmFyeS1maWxlcy1pbnRvLW9uZS1pbWFnZSc+TXVsdGlsaWI8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBhZGQgYSB0dW5lIHRvIHRoZSBsaXN0LCBiZSBzdXJlIHRvIGFwcGVuZCBpdCB3aXRoCisgICAgICAgICAgICAgICAgICAgIHNwYWNlcyB1c2luZyB0aGUgIis9IiBCaXRCYWtlIG9wZXJhdG9yLgorICAgICAgICAgICAgICAgICAgICBEbyBub3Qgc2ltcGx5IHJlcGxhY2UgdGhlIGxpc3QgYnkgdXNpbmcgdGhlICI9IiBvcGVyYXRvci4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNiYXNpYy1zeW50YXgnPkJhc2ljIFN5bnRheDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1iJz48dGl0bGU+QjwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CJz48Z2xvc3N0ZXJtPkI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJbZG9jXSA9ICJUaGUgQnVpbGQgRGlyZWN0b3J5LiBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwbGFjZXMgZ2VuZXJhdGVkIG9iamVjdHMgaW50byB0aGUgQnVpbGQgRGlyZWN0b3J5IGR1cmluZyBhIHJlY2lwZSdzIGJ1aWxkIHByb2Nlc3MuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGxhY2VzIGdlbmVyYXRlZAorICAgICAgICAgICAgICAgICAgICBvYmplY3RzIGR1cmluZyBhIHJlY2lwZSdzIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgZGlyZWN0b3J5IGlzIHRoZSBzYW1lIGFzIHRoZSA8bGluayBsaW5rZW5kPSd2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LCB3aGljaCBpcyBkZWZpbmVkIGFzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFMgPSAiJHtXT1JLRElSfS8ke0JQfS8iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXBhcmF0ZSB0aGUgKDxmaWxlbmFtZT5TPC9maWxlbmFtZT4pIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIGRpcmVjdG9yeSBwb2ludGVkIHRvIGJ5IHRoZSA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBNb3N0IEF1dG90b29scy1iYXNlZCByZWNpcGVzIHN1cHBvcnQgc2VwYXJhdGluZyB0aGVzZQorICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBkZWZhdWx0cyB0byB1c2luZyBzZXBhcmF0ZSBkaXJlY3RvcmllcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdjYzwvZmlsZW5hbWU+IGFuZCBzb21lIGtlcm5lbCByZWNpcGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJBRF9SRUNPTU1FTkRBVElPTlMnPjxnbG9zc3Rlcm0+QkFEX1JFQ09NTUVOREFUSU9OUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkFEX1JFQ09NTUVOREFUSU9OU1tkb2NdID0gIkEgbGlzdCBvZiBwYWNrYWdlcyBub3QgdG8gaW5zdGFsbCBkZXNwaXRlIGJlaW5nIHJlY29tbWVuZGVkIGJ5IGEgcmVjaXBlLiBTdXBwb3J0IGZvciB0aGlzIHZhcmlhYmxlIGV4aXN0cyBvbmx5IHdoZW4gdXNpbmcgdGhlIElQSyBwYWNrYWdpbmcgYmFja2VuZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyAicmVjb21tZW5kZWQtb25seSIgcGFja2FnZXMgdG8gbm90IGluc3RhbGwuCisgICAgICAgICAgICAgICAgICAgIFJlY29tbWVuZGVkLW9ubHkgcGFja2FnZXMgYXJlIHBhY2thZ2VzIGluc3RhbGxlZCBvbmx5CisgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHByZXZlbnQgYW55IG9mIHRoZXNlICJyZWNvbW1lbmRlZCIgcGFja2FnZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICBiZWluZyBpbnN0YWxsZWQgYnkgbGlzdGluZyB0aGVtIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQURfUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT4gdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkFEX1JFQ09NTUVOREFUSU9OUyA9ICI8cmVwbGFjZWFibGU+cGFja2FnZV9uYW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnBhY2thZ2VfbmFtZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5wYWNrYWdlX25hbWU8L3JlcGxhY2VhYmxlPiAuLi4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgdGhpcyB2YXJpYWJsZSBnbG9iYWxseSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciB5b3UgY2FuIGF0dGFjaCBpdCB0bworICAgICAgICAgICAgICAgICAgICBhIHNwZWNpZmljIGltYWdlIHJlY2lwZSBieSB1c2luZyB0aGUgcmVjaXBlIG5hbWUgb3ZlcnJpZGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkFEX1JFQ09NTUVOREFUSU9OU19wbi08cmVwbGFjZWFibGU+dGFyZ2V0X2ltYWdlPC9yZXBsYWNlYWJsZT4gPSAiPHJlcGxhY2VhYmxlPnBhY2thZ2VfbmFtZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byByZWFsaXplIHRoYXQgaWYgeW91IGNob29zZSB0byBub3QgaW5zdGFsbAorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyB1c2luZyB0aGlzIHZhcmlhYmxlIGFuZCBzb21lIG90aGVyIHBhY2thZ2VzIGFyZQorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbnQgb24gdGhlbSAoaS5lLiBsaXN0ZWQgaW4gYSByZWNpcGUncworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSksIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGlnbm9yZXMgeW91cgorICAgICAgICAgICAgICAgICAgICByZXF1ZXN0IGFuZCB3aWxsIGluc3RhbGwgdGhlIHBhY2thZ2VzIHRvIGF2b2lkIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGZvciB0aGlzIHZhcmlhYmxlIGV4aXN0cyBvbmx5IHdoZW4gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIElQSyBhbmQgUlBNIHBhY2thZ2luZyBiYWNrZW5kLgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGRvZXMgbm90IGV4aXN0IGZvciBERUIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU5PX1JFQ09NTUVOREFUSU9OUyc+PGZpbGVuYW1lPk5PX1JFQ09NTUVOREFUSU9OUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0VYQ0xVREUnPjxmaWxlbmFtZT5QQUNLQUdFX0VYQ0xVREU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIGZvciByZWxhdGVkIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJBU0VfTElCJz48Z2xvc3N0ZXJtPkJBU0VfTElCPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQVNFX0xJQltkb2NdID0gIlRoZSBsaWJyYXJ5IGRpcmVjdG9yeSBuYW1lIGZvciB0aGUgQ1BVIG9yIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UgKEFCSSkgdHVuZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlicmFyeSBkaXJlY3RvcnkgbmFtZSBmb3IgdGhlIENQVSBvciBBcHBsaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIHR1bmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+QkFTRV9MSUI8L2ZpbGVuYW1lPiBhcHBsaWVzIG9ubHkgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIE11bHRpbGliIGNvbnRleHQuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NvbWJpbmluZy1tdWx0aXBsZS12ZXJzaW9ucy1saWJyYXJ5LWZpbGVzLWludG8tb25lLWltYWdlJz5Db21iaW5pbmcgTXVsdGlwbGUgVmVyc2lvbnMgb2YgTGlicmFyeSBGaWxlcyBpbnRvIE9uZSBJbWFnZTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IKKyAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gb24gTXVsdGlsaWIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+QkFTRV9MSUI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBkZWZpbmVkIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBtYWNoaW5lIGluY2x1ZGUgZmlsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSWYgTXVsdGlsaWIgaXMgbm90IGJlaW5nIHVzZWQsIHRoZSB2YWx1ZSBkZWZhdWx0cyB0byAibGliIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQVNFX1dPUktESVInPjxnbG9zc3Rlcm0+QkFTRV9XT1JLRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQVNFX1dPUktESVJbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGJhc2Ugb2YgdGhlIHdvcmsgZGlyZWN0b3J5IGZvciBhbGwgcmVjaXBlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIGJhc2Ugb2YgdGhlIHdvcmsgZGlyZWN0b3J5IGZvciBhbGwgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgIiR7VE1QRElSfS93b3JrIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9BTExPV0VEX05FVFdPUktTJz48Z2xvc3N0ZXJtPkJCX0FMTE9XRURfTkVUV09SS1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJCX0FMTE9XRURfTkVUV09SS1NbZG9jXSA9ICJBIGxpc3Qgb2YgaG9zdHMgdGhhdCB0aGUgZmV0Y2hlciBpcyBhbGxvd2VkIHRvIHVzZSB0byBvYnRhaW4gdGhlIHJlcXVpcmVkIHNvdXJjZSBjb2RlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgc3BhY2UtZGVsaW1pdGVkIGxpc3Qgb2YgaG9zdHMgdGhhdCB0aGUgZmV0Y2hlcgorICAgICAgICAgICAgICAgICAgICBpcyBhbGxvd2VkIHRvIHVzZSB0byBvYnRhaW4gdGhlIHJlcXVpcmVkIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIGNvbnNpZGVyYXRpb25zIHN1cnJvdW5kaW5nIHRoaXMgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBob3N0IGxpc3QgaXMgb25seSB1c2VkIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCX05PX05FVFdPUks8L2ZpbGVuYW1lPiBpcyBlaXRoZXIgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IG9yIHNldCB0byAiMCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGltaXRlZCBzdXBwb3J0IGZvciB3aWxkY2FyZCBtYXRjaGluZyBhZ2FpbnN0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2lubmluZyBvZiBob3N0IG5hbWVzIGV4aXN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzZXR0aW5nIG1hdGNoZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0LmdudS5vcmc8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZnRwLmdudS5vcmc8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvby5naXQuZ251Lm9yZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfQUxMT1dFRF9ORVRXT1JLUyA9ICIqLmdudS5vcmciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pcnJvcnMgbm90IGluIHRoZSBob3N0IGxpc3QgYXJlIHNraXBwZWQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VkIGluIGRlYnVnLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVtcHRzIHRvIGFjY2VzcyBuZXR3b3JrcyBub3QgaW4gdGhlIGhvc3QgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdXNlIGEgZmFpbHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIFVzaW5nIDxmaWxlbmFtZT5CQl9BTExPV0VEX05FVFdPUktTPC9maWxlbmFtZT4gaW4KKyAgICAgICAgICAgICAgICAgICAgY29uanVuY3Rpb24gd2l0aAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJFTUlSUk9SUyc+PGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgdmVyeSB1c2VmdWwuCisgICAgICAgICAgICAgICAgICAgIEFkZGluZyB0aGUgaG9zdCB5b3Ugd2FudCB0byB1c2UgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPiByZXN1bHRzIGluIHRoZSBzb3VyY2UgY29kZQorICAgICAgICAgICAgICAgICAgICBiZWluZyBmZXRjaGVkIGZyb20gYW4gYWxsb3dlZCBsb2NhdGlvbiBhbmQgYXZvaWRzIHJhaXNpbmcKKyAgICAgICAgICAgICAgICAgICAgYW4gZXJyb3Igd2hlbiBhIGhvc3QgdGhhdCBpcyBub3QgYWxsb3dlZCBpcyBpbiBhCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYmVjYXVzZSB0aGUgZmV0Y2hlciBkb2VzIG5vdCBhdHRlbXB0IHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgaG9zdCBsaXN0ZWQgaW4gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBhZnRlciBhCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWwgZmV0Y2ggZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPiBvY2N1cnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZJz48Z2xvc3N0ZXJtPkJCX0RBTkdMSU5HQVBQRU5EU19XQVJOT05MWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZW2RvY10gPSAiRGVmaW5lcyBob3cgQml0QmFrZSBoYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgYW4gYXBwZW5kIGZpbGUgKC5iYmFwcGVuZCkgaGFzIG5vIGNvcnJlc3BvbmRpbmcgcmVjaXBlIGZpbGUgKC5iYikuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyBob3cgQml0QmFrZSBoYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgYW4gYXBwZW5kCisgICAgICAgICAgICAgICAgICAgIGZpbGUgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikgaGFzIG5vCisgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgcmVjaXBlIGZpbGUgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29uZGl0aW9uIG9mdGVuIG9jY3VycyB3aGVuIGxheWVycyBnZXQgb3V0IG9mIHN5bmMKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPm9lLWNvcmU8L2ZpbGVuYW1lPiBidW1wcyBhCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSB2ZXJzaW9uIGFuZCB0aGUgb2xkIHJlY2lwZSBubyBsb25nZXIgZXhpc3RzIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgbGF5ZXIgaGFzIG5vdCBiZWVuIHVwZGF0ZWQgdG8gdGhlIG5ldyB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZWNpcGUgeWV0KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgZmF0YWwgYmVoYXZpb3IgaXMgc2FmZXN0IGJlY2F1c2UgaXQgaXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIHNhbmUgcmVhY3Rpb24gZ2l2ZW4gc29tZXRoaW5nIGlzIG91dCBvZiBzeW5jLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB3aGVuIHlvdXIgY2hhbmdlcyBhcmUgbm8gbG9uZ2VyCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGFwcGxpZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2hhbmdlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGJ5IHNldHRpbmcgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byAiMSIsICJ5ZXMiLCBvciAidHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9EQU5HTElOR0FQUEVORFNfV0FSTk9OTFkgPSAiMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0RJU0tNT05fRElSUyc+PGdsb3NzdGVybT5CQl9ESVNLTU9OX0RJUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJCX0RJU0tNT05fRElSU1tkb2NdID0gIk1vbml0b3JzIGRpc2sgc3BhY2UgYW5kIGF2YWlsYWJsZSBpbm9kZXMgZHVyaW5nIHRoZSBidWlsZCBhbmQgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSBidWlsZCBiYXNlZCBvbiB0aGVzZSBwYXJhbWV0ZXJzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIE1vbml0b3JzIGRpc2sgc3BhY2UgYW5kIGF2YWlsYWJsZSBpbm9kZXMgZHVyaW5nIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICAgICBhbmQgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSBidWlsZCBiYXNlZCBvbiB0aGVzZQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXNrIHNwYWNlIG1vbml0b3JpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgVG8gZW5hYmxlIG1vbml0b3JpbmcsIGFkZCB0aGUgPGZpbGVuYW1lPkJCX0RJU0tNT05fRElSUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIHlvdXIgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9ESVJTID0gIjxyZXBsYWNlYWJsZT5hY3Rpb248L3JlcGxhY2VhYmxlPiw8cmVwbGFjZWFibGU+ZGlyPC9yZXBsYWNlYWJsZT4sPHJlcGxhY2VhYmxlPnRocmVzaG9sZDwvcmVwbGFjZWFibGU+IFsuLi5dIgorCisgICAgIHdoZXJlOgorCisgICAgICAgIDxyZXBsYWNlYWJsZT5hY3Rpb248L3JlcGxhY2VhYmxlPiBpczoKKyAgICAgICAgICAgQUJPUlQ6ICAgICBJbW1lZGlhdGVseSBhYm9ydCB0aGUgYnVpbGQgd2hlbgorICAgICAgICAgICAgICAgICAgICAgIGEgdGhyZXNob2xkIGlzIGJyb2tlbi4KKyAgICAgICAgICAgU1RPUFRBU0tTOiBTdG9wIHRoZSBidWlsZCBhZnRlciB0aGUgY3VycmVudGx5CisgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW5nIHRhc2tzIGhhdmUgZmluaXNoZWQgd2hlbgorICAgICAgICAgICAgICAgICAgICAgIGEgdGhyZXNob2xkIGlzIGJyb2tlbi4KKyAgICAgICAgICAgV0FSTjogICAgICBJc3N1ZSBhIHdhcm5pbmcgYnV0IGNvbnRpbnVlIHRoZQorICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHdoZW4gYSB0aHJlc2hvbGQgaXMgYnJva2VuLgorICAgICAgICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgd2FybmluZ3MgYXJlIGlzc3VlZCBhcworICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0RJU0tNT05fV0FSTklOVEVSVkFMJz5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvbGluaz4gdmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggbXVzdCBiZSBkZWZpbmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgIGNvbmYvbG9jYWwuY29uZiBmaWxlLgorCisgICAgICAgIDxyZXBsYWNlYWJsZT5kaXI8L3JlcGxhY2VhYmxlPiBpczoKKyAgICAgICAgICAgQW55IGRpcmVjdG9yeSB5b3UgY2hvb3NlLiBZb3UgY2FuIHNwZWNpZnkgb25lIG9yCisgICAgICAgICAgIG1vcmUgZGlyZWN0b3JpZXMgdG8gbW9uaXRvciBieSBzZXBhcmF0aW5nIHRoZQorICAgICAgICAgICBncm91cGluZ3Mgd2l0aCBhIHNwYWNlLiAgSWYgdHdvIGRpcmVjdG9yaWVzIGFyZQorICAgICAgICAgICBvbiB0aGUgc2FtZSBkZXZpY2UsIG9ubHkgdGhlIGZpcnN0IGRpcmVjdG9yeQorICAgICAgICAgICBpcyBtb25pdG9yZWQuCisKKyAgICAgICAgPHJlcGxhY2VhYmxlPnRocmVzaG9sZDwvcmVwbGFjZWFibGU+IGlzOgorICAgICAgICAgICBFaXRoZXIgdGhlIG1pbmltdW0gYXZhaWxhYmxlIGRpc2sgc3BhY2UsCisgICAgICAgICAgIHRoZSBtaW5pbXVtIG51bWJlciBvZiBmcmVlIGlub2Rlcywgb3IKKyAgICAgICAgICAgYm90aC4gIFlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lLiAgVG8KKyAgICAgICAgICAgb21pdCBvbmUgb3IgdGhlIG90aGVyLCBzaW1wbHkgb21pdCB0aGUgdmFsdWUuCisgICAgICAgICAgIFNwZWNpZnkgdGhlIHRocmVzaG9sZCB1c2luZyBHLCBNLCBLIGZvciBHYnl0ZXMsCisgICAgICAgICAgIE1ieXRlcywgYW5kIEtieXRlcywgcmVzcGVjdGl2ZWx5LiBJZiB5b3UgZG8KKyAgICAgICAgICAgbm90IHNwZWNpZnkgRywgTSwgb3IgSywgS2J5dGVzIGlzIGFzc3VtZWQgYnkKKyAgICAgICAgICAgZGVmYXVsdC4gIERvIG5vdCB1c2UgR0IsIE1CLCBvciBLQi4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0RJU0tNT05fRElSUyA9ICJBQk9SVCwke1RNUERJUn0sMUcsMTAwSyBXQVJOLCR7U1NUQVRFX0RJUn0sMUcsMTAwSyIKKyAgICAgQkJfRElTS01PTl9ESVJTID0gIlNUT1BUQVNLUywke1RNUERJUn0sMUciCisgICAgIEJCX0RJU0tNT05fRElSUyA9ICJBQk9SVCwke1RNUERJUn0sLDEwMEsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGV4YW1wbGUgd29ya3Mgb25seSBpZiB5b3UgYWxzbyBwcm92aWRlCisgICAgICAgICAgICAgICAgICAgIHRoZSA8bGluayBsaW5rZW5kPSd2YXItQkJfRElTS01PTl9XQVJOSU5URVJWQUwnPjxmaWxlbmFtZT5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgY2F1c2VzIHRoZSBidWlsZCBzeXN0ZW0gdG8gaW1tZWRpYXRlbHkKKyAgICAgICAgICAgICAgICAgICAgYWJvcnQgd2hlbiBlaXRoZXIgdGhlIGRpc2sgc3BhY2UgaW4gPGZpbGVuYW1lPiR7VE1QRElSfTwvZmlsZW5hbWU+IGRyb3BzCisgICAgICAgICAgICAgICAgICAgIGJlbG93IDEgR2J5dGUgb3IgdGhlIGF2YWlsYWJsZSBmcmVlIGlub2RlcyBkcm9wcyBiZWxvdworICAgICAgICAgICAgICAgICAgICAxMDAgS2J5dGVzLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHR3byBkaXJlY3RvcmllcyBhcmUgcHJvdmlkZWQgd2l0aCB0aGUgdmFyaWFibGUsIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gYWxzbyBpc3N1ZSBhCisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgd2hlbiB0aGUgZGlzayBzcGFjZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7U1NUQVRFX0RJUn08L2ZpbGVuYW1lPiBkaXJlY3RvcnkgZHJvcHMKKyAgICAgICAgICAgICAgICAgICAgYmVsb3cgMSBHYnl0ZSBvciB0aGUgbnVtYmVyIG9mIGZyZWUgaW5vZGVzIGRyb3BzCisgICAgICAgICAgICAgICAgICAgIGJlbG93IDEwMCBLYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgd2FybmluZ3MgYXJlIGlzc3VlZCBkdXJpbmcgaW50ZXJ2YWxzIGFzCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYnkgdGhlIDxmaWxlbmFtZT5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc2Vjb25kIGV4YW1wbGUgc3RvcHMgdGhlIGJ1aWxkIGFmdGVyIGFsbCBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW5nIHRhc2tzIGNvbXBsZXRlIHdoZW4gdGhlIG1pbmltdW0gZGlzayBzcGFjZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPiR7PGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+VE1QRElSPC9saW5rPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgZHJvcHMgYmVsb3cgMSBHYnl0ZS4KKyAgICAgICAgICAgICAgICAgICAgTm8gZGlzayBtb25pdG9yaW5nIG9jY3VycyBmb3IgdGhlIGZyZWUgaW5vZGVzIGluIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIGV4YW1wbGUgaW1tZWRpYXRlbHkgYWJvcnRzIHRoZSBidWlsZCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgZnJlZSBpbm9kZXMgaW4gdGhlIDxmaWxlbmFtZT4ke1RNUERJUn08L2ZpbGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgZHJvcHMgYmVsb3cgMTAwIEtieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgTm8gZGlzayBzcGFjZSBtb25pdG9yaW5nIGZvciB0aGUgZGlyZWN0b3J5IGl0c2VsZiBvY2N1cnMKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0RJU0tNT05fV0FSTklOVEVSVkFMJz48Z2xvc3N0ZXJtPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQl9ESVNLTU9OX1dBUk5JTlRFUlZBTFtkb2NdID0gIkRlZmluZXMgdGhlIGRpc2sgc3BhY2UgYW5kIGZyZWUgaW5vZGUgd2FybmluZyBpbnRlcnZhbHMuIFRvIHNldCB0aGVzZSBpbnRlcnZhbHMsIGRlZmluZSB0aGUgdmFyaWFibGUgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgZGlzayBzcGFjZSBhbmQgZnJlZSBpbm9kZSB3YXJuaW5nIGludGVydmFscy4KKyAgICAgICAgICAgICAgICAgICAgVG8gc2V0IHRoZXNlIGludGVydmFscywgZGVmaW5lIHRoZSB2YXJpYWJsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9maWxlbmFtZT4gdmFyaWFibGUsIHlvdSBtdXN0CisgICAgICAgICAgICAgICAgICAgIGFsc28gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfRElTS01PTl9ESVJTJz48ZmlsZW5hbWU+QkJfRElTS01PTl9ESVJTPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGFuZCBkZWZpbmUgaXRzIGFjdGlvbiBhcyAiV0FSTiIuCisgICAgICAgICAgICAgICAgICAgIER1cmluZyB0aGUgYnVpbGQsIHN1YnNlcXVlbnQgd2FybmluZ3MgYXJlIGlzc3VlZCBlYWNoIHRpbWUKKyAgICAgICAgICAgICAgICAgICAgZGlzayBzcGFjZSBvciBudW1iZXIgb2YgZnJlZSBpbm9kZXMgZnVydGhlciByZWR1Y2VzIGJ5CisgICAgICAgICAgICAgICAgICAgIHRoZSByZXNwZWN0aXZlIGludGVydmFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHByb3ZpZGUgYSA8ZmlsZW5hbWU+QkJfRElTS01PTl9XQVJOSU5URVJWQUw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgeW91IGRvIHVzZSA8ZmlsZW5hbWU+QkJfRElTS01PTl9ESVJTPC9maWxlbmFtZT4gd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgIldBUk4iIGFjdGlvbiwgdGhlIGRpc2sgbW9uaXRvcmluZyBpbnRlcnZhbCBkZWZhdWx0cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMID0gIjUwTSw1SyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNwZWNpZnlpbmcgdGhlIHZhcmlhYmxlIGluIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlLAorICAgICAgICAgICAgICAgICAgICB1c2UgdGhlIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMID0gIjxyZXBsYWNlYWJsZT5kaXNrX3NwYWNlX2ludGVydmFsPC9yZXBsYWNlYWJsZT4sPHJlcGxhY2VhYmxlPmRpc2tfaW5vZGVfaW50ZXJ2YWw8L3JlcGxhY2VhYmxlPiIKKworICAgICB3aGVyZToKKworICAgICAgICA8cmVwbGFjZWFibGU+ZGlza19zcGFjZV9pbnRlcnZhbDwvcmVwbGFjZWFibGU+IGlzOgorICAgICAgICAgICBBbiBpbnRlcnZhbCBvZiBtZW1vcnkgZXhwcmVzc2VkIGluIGVpdGhlcgorICAgICAgICAgICBHLCBNLCBvciBLIGZvciBHYnl0ZXMsIE1ieXRlcywgb3IgS2J5dGVzLAorICAgICAgICAgICByZXNwZWN0aXZlbHkuIFlvdSBjYW5ub3QgdXNlIEdCLCBNQiwgb3IgS0IuCisKKyAgICAgICAgPHJlcGxhY2VhYmxlPmRpc2tfaW5vZGVfaW50ZXJ2YWw8L3JlcGxhY2VhYmxlPiBpczoKKyAgICAgICAgICAgQW4gaW50ZXJ2YWwgb2YgZnJlZSBpbm9kZXMgZXhwcmVzc2VkIGluIGVpdGhlcgorICAgICAgICAgICBHLCBNLCBvciBLIGZvciBHYnl0ZXMsIE1ieXRlcywgb3IgS2J5dGVzLAorICAgICAgICAgICByZXNwZWN0aXZlbHkuIFlvdSBjYW5ub3QgdXNlIEdCLCBNQiwgb3IgS0IuCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0RJU0tNT05fRElSUyA9ICJXQVJOLCR7U1NUQVRFX0RJUn0sMUcsMTAwSyIKKyAgICAgQkJfRElTS01PTl9XQVJOSU5URVJWQUwgPSAiNTBNLDVLIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZXNlIHZhcmlhYmxlcyBjYXVzZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0bworICAgICAgICAgICAgICAgICAgICBpc3N1ZSBzdWJzZXF1ZW50IHdhcm5pbmdzIGVhY2ggdGltZSB0aGUgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgIGRpc2sgc3BhY2UgZnVydGhlciByZWR1Y2VzIGJ5IDUwIE1ieXRlcyBvciB0aGUgbnVtYmVyCisgICAgICAgICAgICAgICAgICAgIG9mIGZyZWUgaW5vZGVzIGZ1cnRoZXIgcmVkdWNlcyBieSA1IEtieXRlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7U1NUQVRFX0RJUn08L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgd2FybmluZ3MgYmFzZWQgb24gdGhlIGludGVydmFsIG9jY3VyIGVhY2ggdGltZQorICAgICAgICAgICAgICAgICAgICBhIHJlc3BlY3RpdmUgaW50ZXJ2YWwgaXMgcmVhY2hlZCBiZXlvbmQgdGhlIGluaXRpYWwgd2FybmluZworICAgICAgICAgICAgICAgICAgICAoaS5lLiAxIEdieXRlcyBhbmQgMTAwIEtieXRlcykuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTJz48Z2xvc3N0ZXJtPkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTW2RvY10gPSAiQ2F1c2VzIHRhcmJhbGxzIG9mIHRoZSBHaXQgcmVwb3NpdG9yaWVzIHRvIGJlIHBsYWNlZCBpbiB0aGUgRExfRElSIGRpcmVjdG9yeS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDYXVzZXMgdGFyYmFsbHMgb2YgdGhlIEdpdCByZXBvc2l0b3JpZXMsIGluY2x1ZGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgR2l0IG1ldGFkYXRhLCB0byBiZSBwbGFjZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgY3JlYXRpbmcgYW5kIHBsYWNpbmcgdGFyYmFsbHMgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIEdpdCByZXBvc2l0b3JpZXMgaXMgbm90IHRoZSBkZWZhdWx0IGFjdGlvbiBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMgPSAiMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBTZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9OVU1CRVJfVEhSRUFEUyc+PGdsb3NzdGVybT5CQl9OVU1CRVJfVEhSRUFEUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJfTlVNQkVSX1RIUkVBRFNbZG9jXSA9ICJUaGUgbWF4aW11bSBudW1iZXIgb2YgdGFza3MgQml0QmFrZSBzaG91bGQgcnVuIGluIHBhcmFsbGVsIGF0IGFueSBvbmUgdGltZS4gVGhpcyB2YXJpYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZWQgdG8gYmUgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBidWlsZCBzeXN0ZW0gY29yZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRhc2tzIEJpdEJha2Ugc2hvdWxkIHJ1biBpbiBwYXJhbGxlbAorICAgICAgICAgICAgICAgICAgICBhdCBhbnkgb25lIHRpbWUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlcworICAgICAgICAgICAgICAgICAgICB0aGlzIHZhcmlhYmxlIHRvIGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgY29yZXMgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgc3lzdGVtIHdpdGggYSBkdWFsIGNvcmUgcHJvY2Vzc29yIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgYWxzbyB1c2VzIGh5cGVyLXRocmVhZGluZyBjYXVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQl9OVU1CRVJfVEhSRUFEUzwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgdG8gIjQiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3Igc2luZ2xlIHNvY2tldCBzeXN0ZW1zIChpLmUuIG9uZSBDUFUpLCB5b3Ugc2hvdWxkIG5vdAorICAgICAgICAgICAgICAgICAgICBoYXZlIHRvIG92ZXJyaWRlIHRoaXMgdmFyaWFibGUgdG8gZ2FpbiBvcHRpbWFsIHBhcmFsbGVsaXNtCisgICAgICAgICAgICAgICAgICAgIGR1cmluZyBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIHZlcnkgbGFyZ2Ugc3lzdGVtcyB0aGF0IGVtcGxveQorICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBwaHlzaWNhbCBDUFVzLCB5b3UgbWlnaHQgd2FudCB0byBtYWtlIHN1cmUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQl9OVU1CRVJfVEhSRUFEUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIG5vdAorICAgICAgICAgICAgICAgICAgICBzZXQgaGlnaGVyIHRoYW4gIjIwIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3BlZWRpbmcgdXAgYnVpbGRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzcGVlZGluZy11cC10aGUtYnVpbGQnPlNwZWVkaW5nIFVwIHRoZSBCdWlsZDwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJDTEFTU0VYVEVORCc+PGdsb3NzdGVybT5CQkNMQVNTRVhURU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQkNMQVNTRVhURU5EW2RvY10gPSAiQWxsb3dzIHlvdSB0byBleHRlbmQgYSByZWNpcGUgc28gdGhhdCBpdCBidWlsZHMgdmFyaWFudHMgb2YgdGhlIHNvZnR3YXJlLiBDb21tb24gdmFyaWFudHMgZm9yIHJlY2lwZXMgYXJlICduYXRpdmUnLCAnY3Jvc3MnLCAnbmF0aXZlc2RrJyBhbmQgbXVsdGlsaWJzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFsbG93cyB5b3UgdG8gZXh0ZW5kIGEgcmVjaXBlIHNvIHRoYXQgaXQgYnVpbGRzIHZhcmlhbnRzIG9mIHRoZSBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICAgICAgQ29tbW9uIHZhcmlhbnRzIGZvciByZWNpcGVzIGV4aXN0IHN1Y2ggYXMgIm5hdGl2ZXMiIGxpa2UgPGZpbGVuYW1lPnF1aWx0LW5hdGl2ZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBhIGNvcHkgb2YgUXVpbHQgYnVpbHQgdG8gcnVuIG9uIHRoZSBidWlsZCBzeXN0ZW07CisgICAgICAgICAgICAgICAgICAgICJjcm9zc2VzIiBzdWNoIGFzIDxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgYSBjb21waWxlciBidWlsdCB0byBydW4gb24gdGhlIGJ1aWxkIG1hY2hpbmUgYnV0IHByb2R1Y2VzIGJpbmFyaWVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgcnVuIG9uIHRoZSB0YXJnZXQgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L2xpbms+OworICAgICAgICAgICAgICAgICAgICAibmF0aXZlc2RrIiwgd2hpY2ggdGFyZ2V0cyB0aGUgU0RLIG1hY2hpbmUgaW5zdGVhZCBvZiA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+OworICAgICAgICAgICAgICAgICAgICBhbmQgIm11bGl0bGlicyIgaW4gdGhlIGZvcm0gIjxmaWxlbmFtZT5tdWx0aWxpYjo8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5tdWx0aWxpYl9uYW1lPC9yZXBsYWNlYWJsZT4iLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBidWlsZCBhIGRpZmZlcmVudCB2YXJpYW50IG9mIHRoZSByZWNpcGUgd2l0aCBhIG1pbmltYWwgYW1vdW50IG9mIGNvZGUsIGl0IHVzdWFsbHkKKyAgICAgICAgICAgICAgICAgICAgaXMgYXMgc2ltcGxlIGFzIGFkZGluZyB0aGUgZm9sbG93aW5nIHRvIHlvdXIgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCQ0xBU1NFWFRFTkQgPSsgIm5hdGl2ZSBuYXRpdmVzZGsiCisgICAgIEJCQ0xBU1NFWFRFTkQgPSsgIm11bHRpbGliOjxyZXBsYWNlYWJsZT5tdWx0aWxpYl9uYW1lPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJGSUxFX0NPTExFQ1RJT05TJz48Z2xvc3N0ZXJtPkJCRklMRV9DT0xMRUNUSU9OUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJGSUxFX0NPTExFQ1RJT05TW2RvY10gPSAiTGlzdHMgdGhlIG5hbWVzIG9mIGNvbmZpZ3VyZWQgbGF5ZXJzLiBUaGVzZSBuYW1lcyBhcmUgdXNlZCB0byBmaW5kIHRoZSBvdGhlciBCQkZJTEVfKiB2YXJpYWJsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgdGhlIG5hbWVzIG9mIGNvbmZpZ3VyZWQgbGF5ZXJzLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBuYW1lcyBhcmUgdXNlZCB0byBmaW5kIHRoZSBvdGhlciA8ZmlsZW5hbWU+QkJGSUxFXyo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgZWFjaCBsYXllciB3aWxsIGFwcGVuZCBpdHMgbmFtZSB0byB0aGlzIHZhcmlhYmxlIGluIGl0cworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkZJTEVfUEFUVEVSTic+PGdsb3NzdGVybT5CQkZJTEVfUEFUVEVSTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJGSUxFX1BBVFRFUk5bZG9jXSA9ICJWYXJpYWJsZSB0aGF0IGV4cGFuZHMgdG8gbWF0Y2ggZmlsZXMgZnJvbSBCQkZJTEVTIGluIGEgcGFydGljdWxhciBsYXllci4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSBsYXllci5jb25mIGZpbGUgYW5kIG11c3QgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiBhIGxheWVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlIHRoYXQgZXhwYW5kcyB0byBtYXRjaCBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVTJz48ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpbiBhIHBhcnRpY3VsYXIgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUgYW5kIG11c3QKKyAgICAgICAgICAgICAgICAgICAgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgc3BlY2lmaWMgbGF5ZXIgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCRklMRV9QQVRURVJOX2VtZW5sb3c8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJGSUxFX1BSSU9SSVRZJz48Z2xvc3N0ZXJtPkJCRklMRV9QUklPUklUWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJGSUxFX1BSSU9SSVRZW2RvY10gPSAiQXNzaWducyB0aGUgcHJpb3JpdHkgZm9yIHJlY2lwZSBmaWxlcyBpbiBlYWNoIGxheWVyLiBTZXR0aW5nIHRoaXMgdmFyaWFibGUgYWxsb3dzIHlvdSB0byBwcmlvcml0aXplIGEgbGF5ZXIgYWdhaW5zdCBvdGhlciBsYXllcnMgdGhhdCBjb250YWluIHRoZSBzYW1lIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBc3NpZ25zIHRoZSBwcmlvcml0eSBmb3IgcmVjaXBlIGZpbGVzIGluIGVhY2ggbGF5ZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZnVsIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHNhbWUgcmVjaXBlIGFwcGVhcnMgaW4KKyAgICAgICAgICAgICAgICAgICAgbW9yZSB0aGFuIG9uZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGlzIHZhcmlhYmxlIGFsbG93cyB5b3UgdG8gcHJpb3JpdGl6ZSBhCisgICAgICAgICAgICAgICAgICAgIGxheWVyIGFnYWluc3Qgb3RoZXIgbGF5ZXJzIHRoYXQgY29udGFpbiB0aGUgc2FtZSByZWNpcGUgLSBlZmZlY3RpdmVseQorICAgICAgICAgICAgICAgICAgICBsZXR0aW5nIHlvdSBjb250cm9sIHRoZSBwcmVjZWRlbmNlIGZvciB0aGUgbXVsdGlwbGUgbGF5ZXJzLgorICAgICAgICAgICAgICAgICAgICBUaGUgcHJlY2VkZW5jZSBlc3RhYmxpc2hlZCB0aHJvdWdoIHRoaXMgdmFyaWFibGUgc3RhbmRzIHJlZ2FyZGxlc3Mgb2YgYQorICAgICAgICAgICAgICAgICAgICByZWNpcGUncyB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZSkuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhIGxheWVyIHRoYXQgaGFzIGEgcmVjaXBlIHdpdGggYSBoaWdoZXIgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gdmFsdWUgYnV0IGZvcgorICAgICAgICAgICAgICAgICAgICB3aGljaCB0aGUgPGZpbGVuYW1lPkJCRklMRV9QUklPUklUWTwvZmlsZW5hbWU+IGlzIHNldCB0byBoYXZlIGEgbG93ZXIgcHJlY2VkZW5jZSBzdGlsbCBoYXMgYQorICAgICAgICAgICAgICAgICAgICBsb3dlciBwcmVjZWRlbmNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIGxhcmdlciB2YWx1ZSBmb3IgdGhlIDxmaWxlbmFtZT5CQkZJTEVfUFJJT1JJVFk8L2ZpbGVuYW1lPiB2YXJpYWJsZSByZXN1bHRzIGluIGEgaGlnaGVyCisgICAgICAgICAgICAgICAgICAgIHByZWNlZGVuY2UuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgdmFsdWUgNiBoYXMgYSBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuIHRoZSB2YWx1ZSA1LgorICAgICAgICAgICAgICAgICAgICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgPGZpbGVuYW1lPkJCRklMRV9QUklPUklUWTwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHNldCBiYXNlZCBvbiBsYXllcgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgKHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1MQVlFUkRFUEVORFMnPkxBWUVSREVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgcHJpb3JpdHksIGlmIHVuc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIGZvciBhIGxheWVyIHdpdGggbm8gZGVwZW5kZW5jaWVzLCBpcyB0aGUgbG93ZXN0IGRlZmluZWQgcHJpb3JpdHkgKyAxCisgICAgICAgICAgICAgICAgICAgIChvciAxIGlmIG5vIHByaW9yaXRpZXMgYXJlIGRlZmluZWQpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8dGlwPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgY29tbWFuZCA8ZmlsZW5hbWU+Yml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnM8L2ZpbGVuYW1lPiB0byBsaXN0CisgICAgICAgICAgICAgICAgICAgIGFsbCBjb25maWd1cmVkIGxheWVycyBhbG9uZyB3aXRoIHRoZWlyIHByaW9yaXRpZXMuCisgICAgICAgICAgICAgICAgPC90aXA+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkZJTEVTJz48Z2xvc3N0ZXJtPkJCRklMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJCRklMRVNbZG9jXSA9ICJMaXN0IG9mIHJlY2lwZSBmaWxlcyB1c2VkIGJ5IEJpdEJha2UgdG8gYnVpbGQgc29mdHdhcmUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiByZWNpcGUgZmlsZXMgdXNlZCBieSBCaXRCYWtlIHRvIGJ1aWxkIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCSU5DTFVERUxPR1MnPjxnbG9zc3Rlcm0+QkJJTkNMVURFTE9HUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJJTkNMVURFTE9HU1tkb2NdID0gIlZhcmlhYmxlIHRoYXQgY29udHJvbHMgaG93IEJpdEJha2UgZGlzcGxheXMgbG9ncyBvbiBidWlsZCBmYWlsdXJlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlIHRoYXQgY29udHJvbHMgaG93IEJpdEJha2UgZGlzcGxheXMgbG9ncyBvbiBidWlsZCBmYWlsdXJlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCSU5DTFVERUxPR1NfTElORVMnPjxnbG9zc3Rlcm0+QkJJTkNMVURFTE9HU19MSU5FUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJJTkNMVURFTE9HU19MSU5FU1tkb2NdID0gIkFtb3VudCBvZiBsb2cgbGluZXMgcHJpbnRlZCBvbiBmYWlsdXJlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElmCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQklOQ0xVREVMT0dTJz48ZmlsZW5hbWU+QkJJTkNMVURFTE9HUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQsIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFzayBsb2cgZmlsZSB0byBwcmludCB3aGVuIHJlcG9ydGluZyBhIGZhaWxlZCB0YXNrLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHNldCA8ZmlsZW5hbWU+QkJJTkNMVURFTE9HU19MSU5FUzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB0aGUgZW50aXJlIGxvZyBpcyBwcmludGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCTEFZRVJTJz48Z2xvc3N0ZXJtPkJCTEFZRVJTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQkxBWUVSU1tkb2NdID0gIkxpc3RzIHRoZSBsYXllcnMgdG8gZW5hYmxlIGR1cmluZyB0aGUgYnVpbGQuIFRoaXMgdmFyaWFibGUgaXMgZGVmaW5lZCBpbiB0aGUgYmJsYXllcnMuY29uZiBjb25maWd1cmF0aW9uIGZpbGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgdGhlIGxheWVycyB0byBlbmFibGUgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBkZWZpbmVkIGluIHRoZSA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBpbiB0aGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTEFZRVJTID0gIiBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEteW9jdG8gXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS15b2N0by1ic3AgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS1teWtlcm5lbCBcCisgICAgICAgIgorCisgICAgIEJCTEFZRVJTX05PTl9SRU1PVkFCTEUgPz0gIiBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEteW9jdG8gXAorICAgICAgICIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCTEFZRVJTX05PTl9SRU1PVkFCTEUnPjxmaWxlbmFtZT5CQkxBWUVSU19OT05fUkVNT1ZBQkxFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBleGlzdHMgb25seSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2hvYic+SG9iPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCB1c2UgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGVuYWJsZXMgZm91ciBsYXllcnMsIG9uZSBvZiB3aGljaCBpcyBhIGN1c3RvbSwgdXNlci1kZWZpbmVkIGxheWVyCisgICAgICAgICAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5tZXRhLW15a2VybmVsPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJMQVlFUlNfTk9OX1JFTU9WQUJMRSc+PGdsb3NzdGVybT5CQkxBWUVSU19OT05fUkVNT1ZBQkxFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQkxBWUVSU19OT05fUkVNT1ZBQkxFW2RvY10gPSAiTGlzdHMgY29yZSBsYXllcnMgdGhhdCBjYW5ub3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBiYmxheWVycy5jb25mIGZpbGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgY29yZSBsYXllcnMgdGhhdCBjYW5ub3QgYmUgcmVtb3ZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgZHVyaW5nIGEgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2hvYic+SG9iPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBhbiBpbWFnZSBvdXRzaWRlIG9mIEhvYiwgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGlnbm9yZXMgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciBmb3IgQml0QmFrZSB0byBidWlsZCB5b3VyIGltYWdlIHVzaW5nIEhvYiwgeW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgbXVzdCBpbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvcmUgbGF5ZXJzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyB0aGVzZSB0d28gbGF5ZXJzIGxpc3RlZCBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPkJCTEFZRVJTX05PTl9SRU1PVkFCTEU8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPSAiIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS15b2N0byBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLXlvY3RvLWJzcCBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLW15a2VybmVsIFwKKyAgICAgICAiCisKKyAgICAgQkJMQVlFUlNfTk9OX1JFTU9WQUJMRSA/PSAiIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS15b2N0byBcCisgICAgICAgIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJNQVNLJz48Z2xvc3N0ZXJtPkJCTUFTSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJNQVNLW2RvY10gPSAiUHJldmVudHMgQml0QmFrZSBmcm9tIHByb2Nlc3Npbmcgc3BlY2lmaWMgcmVjaXBlcyBvciByZWNpcGUgYXBwZW5kIGZpbGVzLiBVc2UgdGhlIEJCTUFTSyB2YXJpYWJsZSBmcm9tIHdpdGhpbiBjb25mL2xvY2FsLmNvbmYuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUHJldmVudHMgQml0QmFrZSBmcm9tIHByb2Nlc3NpbmcgcmVjaXBlcyBhbmQgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+QkJNQVNLPC9maWxlbmFtZT4gdmFyaWFibGUgZnJvbSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kCisgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPkJCTUFTSzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIHRvICJoaWRlIiB0aGVzZSA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBpZ25vcmVzIGFueSByZWNpcGUgb3IgcmVjaXBlIGFwcGVuZCBmaWxlcyB0aGF0CisgICAgICAgICAgICAgICAgICAgIG1hdGNoIHRoZSBleHByZXNzaW9uLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBhcyBpZiBCaXRCYWtlIGRvZXMgbm90IHNlZSB0aGVtIGF0IGFsbC4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBtYXRjaGluZyBmaWxlcyBhcmUgbm90IHBhcnNlZCBvciBvdGhlcndpc2UKKyAgICAgICAgICAgICAgICAgICAgdXNlZCBieSBCaXRCYWtlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIHlvdSBwcm92aWRlIGlzIHBhc3NlZCB0byBQeXRob24ncyByZWd1bGFyCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gY29tcGlsZXIuCisgICAgICAgICAgICAgICAgICAgIFRoZSBleHByZXNzaW9uIGlzIGNvbXBhcmVkIGFnYWluc3QgdGhlIGZ1bGwgcGF0aHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBGb3IgY29tcGxldGUgc3ludGF4IGluZm9ybWF0aW9uLCBzZWUgUHl0aG9uJ3MKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiBhdAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZG9jcy5weXRob24ub3JnL3JlbGVhc2UvMi4zL2xpYi9yZS1zeW50YXguaHRtbCc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSB1c2VzIGEgY29tcGxldGUgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgIHRvIHRlbGwgQml0QmFrZSB0byBpZ25vcmUgYWxsIHJlY2lwZSBhbmQgcmVjaXBlIGFwcGVuZAorICAgICAgICAgICAgICAgICAgICBmaWxlcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtdGkvcmVjaXBlcy1taXNjLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQk1BU0sgPSAibWV0YS10aS9yZWNpcGVzLW1pc2MvIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIG1hc2sgb3V0IG11bHRpcGxlIGRpcmVjdG9yaWVzIG9yIHJlY2lwZXMsCisgICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgdmVydGljYWwgYmFyIHRvIHNlcGFyYXRlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIG5leHQgZXhhbXBsZSBtYXNrcyBvdXQgbXVsdGlwbGUgZGlyZWN0b3JpZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWwgcmVjaXBlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQk1BU0sgPSAibWV0YS10aS9yZWNpcGVzLW1pc2MvfG1ldGEtdGkvcmVjaXBlcy10aS9wYWNrYWdlZ3JvdXAvIgorICAgICBCQk1BU0sgLj0gInwuKm1ldGEtb2UvcmVjaXBlcy1zdXBwb3J0LyIKKyAgICAgQkJNQVNLIC49ICJ8LipvcGVubGRhcCIKKyAgICAgQkJNQVNLIC49ICJ8LipvcGVuY3YiCisgICAgIEJCTUFTSyAuPSAifC4qbHptYSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBOb3RpY2UgaG93IHRoZSB2ZXJ0aWNhbCBiYXIgaXMgdXNlZCB0byBhcHBlbmQgdGhlIGZyYWdtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHNwZWNpZnlpbmcgYSBkaXJlY3RvcnkgbmFtZSwgdXNlIHRoZSB0cmFpbGluZworICAgICAgICAgICAgICAgICAgICAgICAgc2xhc2ggY2hhcmFjdGVyIHRvIGVuc3VyZSB5b3UgbWF0Y2gganVzdCB0aGF0IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCUEFUSCc+PGdsb3NzdGVybT5CQlBBVEg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJCUEFUSFtkb2NdID0gIlVzZWQgYnkgQml0QmFrZSB0byBsb2NhdGUgLmJiY2xhc3MgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoaXMgdmFyaWFibGUgaXMgYW5hbG9nb3VzIHRvIHRoZSBQQVRIIHZhcmlhYmxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFVzZWQgYnkgQml0QmFrZSB0byBsb2NhdGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4gYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgYW5hbG9nb3VzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBydW4gQml0QmFrZSBmcm9tIGEgZGlyZWN0b3J5IG91dHNpZGUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMO2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgbXVzdCBiZSBzdXJlIHRvIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IHRvIHBvaW50IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSB2YXJpYWJsZSBhcyB5b3Ugd291bGQgYW55IGVudmlyb25tZW50IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBydW4gQml0QmFrZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBCQlBBVEggPSAiPHJlcGxhY2VhYmxlPmJ1aWxkX2RpcmVjdG9yeTwvcmVwbGFjZWFibGU+IgorICAgICAkIGV4cG9ydCBCQlBBVEgKKyAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJTRVJWRVInPjxnbG9zc3Rlcm0+QkJTRVJWRVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJCU0VSVkVSW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBzZXJ2ZXIgdGhhdCBydW5zIG1lbW9yeS1yZXNpZGVudCBCaXRCYWtlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgc2VydmVyIHRoYXQgcnVucyBtZW1vcnktcmVzaWRlbnQgQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzZXQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgc2V0dXAgc2NyaXB0IGFuZCBzaG91bGQgbm90IGJlIGhhbmQtZWRpdGVkLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgb25seSB1c2VkIHdoZW4geW91IGVtcGxveSBtZW1vcnktcmVzaWRlbnQKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNldHVwIHNjcmlwdCBleHBvcnRzIHRoZSB2YWx1ZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGV4cG9ydCBCQlNFUlZFUj1sb2NhbGhvc3Q6JHBvcnQKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQlNFUlZFUjwvZmlsZW5hbWU+IGlzIHVzZWQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+IHNjcmlwdCwgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgaXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJJTkNPTkZJRyc+PGdsb3NzdGVybT5CSU5DT05GSUc8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJJTkNPTkZJR1tkb2NdID0gIldoZW4gaW5oZXJpdGluZyB0aGUgYmluY29uZmlnLWRpc2FibGVkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBiaW5hcnkgY29uZmlndXJhdGlvbiBzY3JpcHRzIHRvIGRpc2FibGUgaW4gZmF2b3Igb2YgdXNpbmcgcGtnLWNvbmZpZyB0byBxdWVyeSB0aGUgaW5mb3JtYXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iaW5jb25maWctZGlzYWJsZWQnPjxmaWxlbmFtZT5iaW5jb25maWctZGlzYWJsZWQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGJpbmFyeSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIHNjcmlwdHMgdG8gZGlzYWJsZSBpbiBmYXZvciBvZiB1c2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+IHRvIHF1ZXJ5IHRoZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iaW5jb25maWctZGlzYWJsZWQ8L2ZpbGVuYW1lPiBjbGFzcyB3aWxsCisgICAgICAgICAgICAgICAgICAgIG1vZGlmeSB0aGUgc3BlY2lmaWVkIHNjcmlwdHMgdG8gcmV0dXJuIGFuIGVycm9yIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgY2FsbHMgdG8gdGhlbSBjYW4gYmUgZWFzaWx5IGZvdW5kIGFuZCByZXBsYWNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gYWRkIG11bHRpcGxlIHNjcmlwdHMsIHNlcGFyYXRlIHRoZW0gYnkgc3BhY2VzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUgPGZpbGVuYW1lPmxpYnBuZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2xpYnBuZy1jb25maWcgJHtiaW5kaXJ9L2xpYnBuZzE2LWNvbmZpZyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJJTkNPTkZJR19HTE9CJz48Z2xvc3N0ZXJtPkJJTkNPTkZJR19HTE9CPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCSU5DT05GSUdfR0xPQltkb2NdID0gIldoZW4gaW5oZXJpdGluZyBiaW5jb25maWcuYmJjbGFzcyBmcm9tIGEgcmVjaXBlLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhIHdpbGRjYXJkIGZvciBjb25maWd1cmF0aW9uIHNjcmlwdHMgdGhhdCBuZWVkIGVkaXRpbmcuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iaW5jb25maWcnPjxmaWxlbmFtZT5iaW5jb25maWc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGEgd2lsZGNhcmQgZm9yCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gc2NyaXB0cyB0aGF0IG5lZWQgZWRpdGluZy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNjcmlwdHMgYXJlIGVkaXRlZCB0byBjb3JyZWN0IGFueSBwYXRocyB0aGF0IGhhdmUgYmVlbgorICAgICAgICAgICAgICAgICAgICBzZXQgdXAgZHVyaW5nIGNvbXBpbGF0aW9uIHNvIHRoYXQgdGhleSBhcmUgY29ycmVjdCBmb3IKKyAgICAgICAgICAgICAgICAgICAgdXNlIHdoZW4gaW5zdGFsbGVkIGludG8gdGhlIHN5c3Jvb3QgYW5kIGNhbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgcHJvY2Vzc2VzIG9mIG90aGVyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIHZhcmlhYmxlIHdvcmtzLCBzZWUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3Nlcy9iaW5jb25maWcuYmJjbGFzczwvZmlsZW5hbWU+IGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBmaW5kIGdlbmVyYWwgaW5mb3JtYXRpb24gb24gdGhlIGNsYXNzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYmluY29uZmlnJz48ZmlsZW5hbWU+YmluY29uZmlnLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlAnPjxnbG9zc3Rlcm0+QlA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJQW2RvY10gPSAiVGhlIGJhc2UgcmVjaXBlIG5hbWUgYW5kIHZlcnNpb24gYnV0IHdpdGhvdXQgYW55IHNwZWNpYWwgcmVjaXBlIG5hbWUgc3VmZml4IChpLmUuIC1uYXRpdmUsIGxpYjY0LSwgYW5kIHNvIGZvcnRoKS4gQlAgaXMgY29tcHJpc2VkIG9mICR7QlBOfS0ke1BWfSIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIHJlY2lwZSBuYW1lIGFuZCB2ZXJzaW9uIGJ1dCB3aXRob3V0IGFueSBzcGVjaWFsCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBuYW1lIHN1ZmZpeCAoaS5lLiA8ZmlsZW5hbWU+LW5hdGl2ZTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+bGliNjQtPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CUDwvZmlsZW5hbWU+IGlzIGNvbXByaXNlZCBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0ibW9ub3NwYWNlZCI+CisgICAgICR7QlBOfS0ke1BWfQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlBOJz48Z2xvc3N0ZXJtPkJQTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlBOW2RvY10gPSAiVGhlIGJhcmUgbmFtZSBvZiB0aGUgcmVjaXBlLiBUaGlzIHZhcmlhYmxlIGlzIGEgdmVyc2lvbiBvZiB0aGUgUE4gdmFyaWFibGUgYnV0IHJlbW92ZXMgY29tbW9uIHN1ZmZpeGVzIGFuZCBwcmVmaXhlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgYmFyZSBuYW1lIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgYSB2ZXJzaW9uIG9mIHRoZSA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBidXQgcmVtb3ZlcyBjb21tb24gc3VmZml4ZXMgc3VjaCBhcyAiLW5hdGl2ZSIgYW5kICItY3Jvc3MiIGFzIHdlbGwKKyAgICAgICAgICAgICAgICAgICAgYXMgcmVtb3ZlcyBjb21tb24gcHJlZml4ZXMgc3VjaCBhcyBtdWx0aWxpYidzICJsaWI2NC0iIGFuZCAibGliMzItIi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4YWN0IGxpc3Qgb2Ygc3VmZml4ZXMgcmVtb3ZlZCBpcyBzcGVjaWZpZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUEVDSUFMX1BLR1NVRkZJWCc+PGZpbGVuYW1lPlNQRUNJQUxfUEtHU1VGRklYPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZXhhY3QgbGlzdCBvZiBwcmVmaXhlcyByZW1vdmVkIGlzIHNwZWNpZmllZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1MUFJFRklYJz48ZmlsZW5hbWU+TUxQUkVGSVg8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFByZWZpeGVzIGFyZSByZW1vdmVkIGZvciA8ZmlsZW5hbWU+bXVsdGlsaWI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+IGNhc2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVR1RSQUNLRVInPjxnbG9zc3Rlcm0+QlVHVFJBQ0tFUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVHVFJBQ0tFUltkb2NdID0gIlNwZWNpZmllcyBhIFVSTCBmb3IgYW4gdXBzdHJlYW0gYnVnIHRyYWNraW5nIHdlYnNpdGUgZm9yIGEgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIFVSTCBmb3IgYW4gdXBzdHJlYW0gYnVnIHRyYWNraW5nIHdlYnNpdGUgZm9yCisgICAgICAgICAgICAgICAgICAgIGEgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCB1c2UgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgUmF0aGVyLCB0aGUgdmFyaWFibGUgaXMgYSB1c2VmdWwgcG9pbnRlciBpbiBjYXNlIGEgYnVnCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCBuZWVkcyB0byBiZSBtYW51YWxseSByZXBvcnRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRF9BUkNIJz48Z2xvc3N0ZXJtPkJVSUxEX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX0FSQ0hbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgYnVpbGRpbmcgYXJjaGl0ZWN0dXJlIChlLmcuIGk2ODYpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBidWlsZCBob3N0CisgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5pNjg2PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzZXRzIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QlVJTERfQVJDSDwvZmlsZW5hbWU+IGZyb20gdGhlIG1hY2hpbmUgbmFtZQorICAgICAgICAgICAgICAgICAgICByZXBvcnRlZCBieSB0aGUgPGZpbGVuYW1lPnVuYW1lPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRF9DRkxBR1MnPjxnbG9zc3Rlcm0+QlVJTERfQ0ZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMRF9DRkxBR1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgY29tcGlsZXIgd2hlbiBidWlsZGluZyBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIGNvbXBpbGVyIHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGluIHRoZSA8ZmlsZW5hbWU+LW5hdGl2ZTwvZmlsZW5hbWU+IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DRkxBR1MnPjxmaWxlbmFtZT5DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfQ1BQRkxBR1MnPjxnbG9zc3Rlcm0+QlVJTERfQ1BQRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX0NQUEZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIHByZS1wcm9jZXNzb3IgKGkuZS4gdG8gYm90aCB0aGUgQyBhbmQgdGhlIEMrKyBjb21waWxlcnMpIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBwcmUtcHJvY2Vzc29yCisgICAgICAgICAgICAgICAgICAgIChpLmUuIHRvIGJvdGggdGhlIEMgYW5kIHRoZSBDKysgY29tcGlsZXJzKSB3aGVuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBpbiB0aGUgPGZpbGVuYW1lPm5hdGl2ZTwvZmlsZW5hbWU+IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DUFBGTEFHUyc+PGZpbGVuYW1lPkNQUEZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEX0NYWEZMQUdTJz48Z2xvc3N0ZXJtPkJVSUxEX0NYWEZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMRF9DWFhGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQysrIGNvbXBpbGVyIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQysrIGNvbXBpbGVyIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGluIHRoZSA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4gY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNYWEZMQUdTJz48ZmlsZW5hbWU+Q1hYRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfTERGTEFHUyc+PGdsb3NzdGVybT5CVUlMRF9MREZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMRF9MREZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBsaW5rZXIgd2hlbiBidWlsZGluZyBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBsaW5rZXIgd2hlbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgaW4gdGhlIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4gY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxERkxBR1MnPjxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEX09QVElNSVpBVElPTic+PGdsb3NzdGVybT5CVUlMRF9PUFRJTUlaQVRJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX09QVElNSVpBVElPTltkb2NdID0gIlNwZWNpZmllcyB0aGUgb3B0aW1pemF0aW9uIGZsYWdzIHBhc3NlZCB0byB0aGUgQyBjb21waWxlciB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdCBvciB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgb3B0aW1pemF0aW9uIGZsYWdzIHBhc3NlZCB0byB0aGUgQyBjb21waWxlcgorICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdCBvciB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmxhZ3MgYXJlIHBhc3NlZCB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERfQ0ZMQUdTJz48ZmlsZW5hbWU+QlVJTERfQ0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERTREtfQ0ZMQUdTJz48ZmlsZW5hbWU+QlVJTERTREtfQ0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgdmFsdWVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJVSUxEX09QVElNSVpBVElPTjwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzCisgICAgICAgICAgICAgICAgICAgICItTzIgLXBpcGUiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEX09TJz48Z2xvc3N0ZXJtPkJVSUxEX09TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMRF9PU1tkb2NdID0gIlRoZSBvcGVyYXRpbmcgc3lzdGVtIChpbiBsb3dlciBjYXNlKSBvZiB0aGUgYnVpbGRpbmcgYXJjaGl0ZWN0dXJlIChlLmcuIExpbnV4KS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaW4gdXNlIG9uIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICAgICBob3N0IChlLmcuICJsaW51eCIpLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzZXRzIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QlVJTERfT1M8L2ZpbGVuYW1lPiBmcm9tIHRoZSBPUyByZXBvcnRlZCBieQorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPnVuYW1lPC9maWxlbmFtZT4gY29tbWFuZCAtIHRoZSBmaXJzdCB3b3JkLAorICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgdG8gbG93ZXItY2FzZSBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEX1BSRUZJWCc+PGdsb3NzdGVybT5CVUlMRF9QUkVGSVg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX1BSRUZJWFtkb2NdID0gIlRoZSB0b29sY2hhaW4gYmluYXJ5IHByZWZpeCB1c2VkIGZvciBuYXRpdmUgcmVjaXBlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgdG9vbGNoYWluIGJpbmFyeSBwcmVmaXggdXNlZCBmb3IgbmF0aXZlIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CVUlMRF9QUkVGSVg8L2ZpbGVuYW1lPiB2YWx1ZSB0byBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfUFJFRklYJz48ZmlsZW5hbWU+VEFSR0VUX1BSRUZJWDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciBuYXRpdmUgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRF9TWVMnPjxnbG9zc3Rlcm0+QlVJTERfU1lTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMRF9TWVNbZG9jXSA9ICJUaGUgdG9vbGNoYWluIGJpbmFyeSBwcmVmaXggdXNlZCBmb3IgbmF0aXZlIHJlY2lwZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBzeXN0ZW0sIGluY2x1ZGluZyB0aGUgYXJjaGl0ZWN0dXJlIGFuZAorICAgICAgICAgICAgICAgICAgICB0aGUgb3BlcmF0aW5nIHN5c3RlbSwgdG8gdXNlIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICAgICBob3N0IChpLmUuIHdoZW4gYnVpbGRpbmcgPGZpbGVuYW1lPm5hdGl2ZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5IHNldHMgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERfQVJDSCc+PGZpbGVuYW1lPkJVSUxEX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRF9WRU5ET1InPjxmaWxlbmFtZT5CVUlMRF9WRU5ET1I8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERfT1MnPjxmaWxlbmFtZT5CVUlMRF9PUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBuZWVkIHRvIHNldCB0aGUgPGZpbGVuYW1lPkJVSUxEX1NZUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHlvdXJzZWxmLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEX1ZFTkRPUic+PGdsb3NzdGVybT5CVUlMRF9WRU5ET1I8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgQlVJTERfVkVORE9SW2RvY10gPSAiVGhlIHZlbmRvciBuYW1lIHRvIHVzZSB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHZlbmRvciBuYW1lIHRvIHVzZSB3aGVuIGJ1aWxkaW5nIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYW4gZW1wdHkgc3RyaW5nICgiIikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERESVInPjxnbG9zc3Rlcm0+QlVJTERESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxERElSW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgbG9jYXRpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZGVmaW5lIHRoaXMgZGlyZWN0b3J5IGluZGlyZWN0bHkgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgc2NyaXB0cyBieSBwYXNzaW5nIGluIGEgQnVpbGQgRGlyZWN0b3J5IHBhdGggd2hlbiB5b3UgcnVuCisgICAgICAgICAgICAgICAgICAgIHRoZSBzY3JpcHRzLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgcnVuIHRoZSBzY3JpcHRzIGFuZCBkbyBub3QgcHJvdmlkZSBhIEJ1aWxkIERpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBwYXRoLCB0aGUgPGZpbGVuYW1lPkJVSUxERElSPC9maWxlbmFtZT4gZGVmYXVsdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT4gaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxESElTVE9SWV9DT01NSVQnPjxnbG9zc3Rlcm0+QlVJTERISVNUT1JZX0NPTU1JVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERISVNUT1JZX0NPTU1JVFtkb2NdID0gIldoZW4gaW5oZXJpdGluZyB0aGUgYnVpbGRoaXN0b3J5IGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0byBjb21taXQgdGhlIGJ1aWxkIGhpc3Rvcnkgb3V0cHV0IGluIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1idWlsZGhpc3RvcnknPjxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRvIGNvbW1pdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaGlzdG9yeSBvdXRwdXQgaW4gYSBsb2NhbCBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvICIxIiwgdGhpcyBsb2NhbCByZXBvc2l0b3J5IHdpbGwgYmUgbWFpbnRhaW5lZAorICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgYW5kIGEgY29tbWl0IHdpbGwgYmUgY3JlYXRlZCBvbiBldmVyeQorICAgICAgICAgICAgICAgICAgICBidWlsZCBmb3IgY2hhbmdlcyB0byBlYWNoIHRvcC1sZXZlbCBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGhpc3Rvcnkgb3V0cHV0IChpbWFnZXMsIHBhY2thZ2VzLCBhbmQgc2RrKS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gdHJhY2sgY2hhbmdlcyB0byBidWlsZCBoaXN0b3J5IG92ZXIKKyAgICAgICAgICAgICAgICAgICAgdGltZSwgeW91IHNob3VsZCBzZXQgdGhpcyB2YWx1ZSB0byAiMSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgY29tbWl0IHRoZSBidWlsZCBoaXN0b3J5IG91dHB1dCBpbiBhIGxvY2FsCisgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJVSUxESElTVE9SWV9DT01NSVQgPz0gIjAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMREhJU1RPUllfQ09NTUlUX0FVVEhPUic+PGdsb3NzdGVybT5CVUlMREhJU1RPUllfQ09NTUlUX0FVVEhPUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERISVNUT1JZX0NPTU1JVF9BVVRIT1JbZG9jXSA9ICJXaGVuIGluaGVyaXRpbmcgdGhlIGJ1aWxkaGlzdG9yeSBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGF1dGhvciB0byB1c2UgZm9yIGVhY2ggR2l0IGNvbW1pdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJ1aWxkaGlzdG9yeSc+PGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGF1dGhvciB0byB1c2UgZm9yIGVhY2gKKyAgICAgICAgICAgICAgICAgICAgR2l0IGNvbW1pdC4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgZm9yIHRoZSA8ZmlsZW5hbWU+QlVJTERISVNUT1JZX0NPTU1JVF9BVVRIT1I8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byB3b3JrLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxESElTVE9SWV9DT01NSVQnPjxmaWxlbmFtZT5CVUlMREhJU1RPUllfQ09NTUlUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIG11c3QgYmUgc2V0IHRvICIxIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgR2l0IHJlcXVpcmVzIHRoYXQgdGhlIHZhbHVlIHlvdSBwcm92aWRlIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJVSUxESElTVE9SWV9DT01NSVRfQVVUSE9SPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgdGFrZXMgdGhlIGZvcm0gb2YgIm5hbWUgJmx0O2VtYWlsQGhvc3QmZ3Q7Ii4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkaW5nIGFuIGVtYWlsIGFkZHJlc3Mgb3IgaG9zdCB0aGF0IGlzIG5vdCB2YWxpZCBkb2VzCisgICAgICAgICAgICAgICAgICAgIG5vdCBwcm9kdWNlIGFuIGVycm9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgICAgICAgICAgICAgIHNldHMgdGhlIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQlVJTERISVNUT1JZX0NPTU1JVF9BVVRIT1IgPz0gImJ1aWxkaGlzdG9yeSAmbHQ7YnVpbGRoaXN0b3J5QCR7RElTVFJPfSZndDsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMREhJU1RPUllfRElSJz48Z2xvc3N0ZXJtPkJVSUxESElTVE9SWV9ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxESElTVE9SWV9ESVJbZG9jXSA9ICJXaGVuIGluaGVyaXRpbmcgdGhlIGJ1aWxkaGlzdG9yeSBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBidWlsZCBoaXN0b3J5IGluZm9ybWF0aW9uIGlzIGtlcHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1idWlsZGhpc3RvcnknPjxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaGlzdG9yeSBpbmZvcm1hdGlvbiBpcyBrZXB0LgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdGhlIHZhcmlhYmxlIHdvcmtzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZGhpc3RvcnkuY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICAgICAgICAgICAgICBzZXRzIHRoZSBkaXJlY3RvcnkgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCVUlMREhJU1RPUllfRElSID89ICIke1RPUERJUn0vYnVpbGRoaXN0b3J5IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERISVNUT1JZX0ZFQVRVUkVTJz48Z2xvc3N0ZXJtPkJVSUxESElTVE9SWV9GRUFUVVJFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERISVNUT1JZX0ZFQVRVUkVTW2RvY10gPSAiV2hlbiBpbmhlcml0aW5nIHRoZSBidWlsZGhpc3RvcnkgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBidWlsZCBoaXN0b3J5IGZlYXR1cmVzIHRvIGJlIGVuYWJsZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1idWlsZGhpc3RvcnknPjxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBidWlsZCBoaXN0b3J5IGZlYXR1cmVzCisgICAgICAgICAgICAgICAgICAgIHRvIGJlIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBidWlsZCBoaXN0b3J5IHdvcmtzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdtYWludGFpbmluZy1idWlsZC1vdXRwdXQtcXVhbGl0eSc+TWFpbnRhaW5pbmcgQnVpbGQgT3V0cHV0IFF1YWxpdHk8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgdGhyZWUgZmVhdHVyZXMgaW4gdGhlIGZvcm0gb2YgYQorICAgICAgICAgICAgICAgICAgICBzcGFjZS1zZXBhcmF0ZWQgbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+aW1hZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbmFseXNpcyBvZiB0aGUgY29udGVudHMgb2YgaW1hZ2VzLCB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIHRoZSBsaXN0IG9mIGluc3RhbGxlZCBwYWNrYWdlcyBhbW9uZyBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaW5ncy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cGFja2FnZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5c2lzIG9mIHRoZSBjb250ZW50cyBvZiBpbmRpdmlkdWFsIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zZGs6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbmFseXNpcyBvZiB0aGUgY29udGVudHMgb2YgdGhlIHNvZnR3YXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQga2l0IChTREspLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICAgICAgICAgICAgICBlbmFibGVzIGFsbCB0aHJlZSBmZWF0dXJlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCVUlMREhJU1RPUllfRkVBVFVSRVMgPz0gImltYWdlIHBhY2thZ2Ugc2RrIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERISVNUT1JZX0lNQUdFX0ZJTEVTJz48Z2xvc3N0ZXJtPkJVSUxESElTVE9SWV9JTUFHRV9GSUxFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERISVNUT1JZX0lNQUdFX0ZJTEVTW2RvY10gPSAiV2hlbiBpbmhlcml0aW5nIHRoZSBidWlsZGhpc3RvcnkgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGEgbGlzdCBvZiBwYXRocyB0byBmaWxlcyBjb3BpZWQgZnJvbSB0aGUgaW1hZ2UgY29udGVudHMgaW50byB0aGUgYnVpbGQgaGlzdG9yeSBkaXJlY3RvcnkgdW5kZXIgYW4gImltYWdlLWZpbGVzIiBkaXJlY3RvcnkgaW4gdGhlIGRpcmVjdG9yeSBmb3IgdGhlIGltYWdlLCBzbyB0aGF0IHlvdSBjYW4gdHJhY2sgdGhlIGNvbnRlbnRzIG9mIGVhY2ggZmlsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJ1aWxkaGlzdG9yeSc+PGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYSBsaXN0IG9mIHBhdGhzIHRvIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIGNvcGllZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBpbWFnZSBjb250ZW50cyBpbnRvIHRoZSBidWlsZCBoaXN0b3J5IGRpcmVjdG9yeSB1bmRlcgorICAgICAgICAgICAgICAgICAgICBhbiAiaW1hZ2UtZmlsZXMiIGRpcmVjdG9yeSBpbiB0aGUgZGlyZWN0b3J5IGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgaW1hZ2UsIHNvIHRoYXQgeW91IGNhbiB0cmFjayB0aGUgY29udGVudHMgb2YgZWFjaCBmaWxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyB0byBjb3B5IDxmaWxlbmFtZT4vZXRjL3Bhc3N3ZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+L2V0Yy9ncm91cDwvZmlsZW5hbWU+LCB3aGljaCBhbGxvd3MgeW91IHRvCisgICAgICAgICAgICAgICAgICAgIG1vbml0b3IgZm9yIGNoYW5nZXMgaW4gdXNlciBhbmQgZ3JvdXAgZW50cmllcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBtb2RpZnkgdGhlIGxpc3QgdG8gaW5jbHVkZSBhbnkgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmeWluZyBhbiBpbnZhbGlkIHBhdGggZG9lcyBub3QgcHJvZHVjZSBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgY2FuIGluY2x1ZGUgZmlsZXMgdGhhdCBtaWdodAorICAgICAgICAgICAgICAgICAgICBub3QgYWx3YXlzIGJlIHByZXNlbnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXMgcGF0aHMgdG8gdGhlIGZvbGxvd2luZyBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCVUlMREhJU1RPUllfSU1BR0VfRklMRVMgPz0gIi9ldGMvcGFzc3dkIC9ldGMvZ3JvdXAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMREhJU1RPUllfUFVTSF9SRVBPJz48Z2xvc3N0ZXJtPkJVSUxESElTVE9SWV9QVVNIX1JFUE88L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxESElTVE9SWV9QVVNIX1JFUE9bZG9jXSA9ICJXaGVuIGluaGVyaXRpbmcgdGhlIGJ1aWxkaGlzdG9yeSBjbGFzcywgdGhpcyB2YXJpYWJsZSBvcHRpb25hbGx5IHNwZWNpZmllcyBhIHJlbW90ZSByZXBvc2l0b3J5IHRvIHdoaWNoIGJ1aWxkIGhpc3RvcnkgcHVzaGVzIEdpdCBjaGFuZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYnVpbGRoaXN0b3J5Jz48ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIG9wdGlvbmFsbHkgc3BlY2lmaWVzIGEgcmVtb3RlCisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgdG8gd2hpY2ggYnVpbGQgaGlzdG9yeSBwdXNoZXMgR2l0IGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIGZvciA8ZmlsZW5hbWU+QlVJTERISVNUT1JZX1BVU0hfUkVQTzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRvIHdvcmssCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMREhJU1RPUllfQ09NTUlUJz48ZmlsZW5hbWU+QlVJTERISVNUT1JZX0NPTU1JVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIHNldCB0byAiMSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSByZXBvc2l0b3J5IHNob3VsZCBjb3JyZXNwb25kIHRvIGEgcmVtb3RlCisgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgdGhhdCBzcGVjaWZpZXMgYSByZXBvc2l0b3J5IGFzIHVuZGVyc3Rvb2QgYnkKKyAgICAgICAgICAgICAgICAgICAgR2l0LCBvciBhbHRlcm5hdGl2ZWx5IHRvIGEgcmVtb3RlIG5hbWUgdGhhdCB5b3UgaGF2ZQorICAgICAgICAgICAgICAgICAgICBzZXQgdXAgbWFudWFsbHkgdXNpbmcgPGZpbGVuYW1lPmdpdCByZW1vdGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIGxvY2FsIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgc2V0cyB0aGUgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCVUlMREhJU1RPUllfUFVTSF9SRVBPID89ICIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRFNES19DRkxBR1MnPjxnbG9zc3Rlcm0+QlVJTERTREtfQ0ZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMRFNES19DRkxBR1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgY29tcGlsZXIgd2hlbiBidWlsZGluZyBmb3IgdGhlIFNESy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgY29tcGlsZXIgd2hlbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBpbiB0aGUgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DRkxBR1MnPjxmaWxlbmFtZT5DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERTREtfQ1BQRkxBR1MnPjxnbG9zc3Rlcm0+QlVJTERTREtfQ1BQRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEU0RLX0NQUEZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIHByZS1wcm9jZXNzb3IgKGkuZS4gdG8gYm90aCB0aGUgQyBhbmQgdGhlIEMrKyBjb21waWxlcnMpIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBTREsuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIHByZS1wcm9jZXNzb3IKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gdG8gYm90aCB0aGUgQyBhbmQgdGhlIEMrKyBjb21waWxlcnMpIHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgaW4gdGhlIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ1BQRkxBR1MnPjxmaWxlbmFtZT5DUFBGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRFNES19DWFhGTEFHUyc+PGdsb3NzdGVybT5CVUlMRFNES19DWFhGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERTREtfQ1hYRkxBR1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMrKyBjb21waWxlciB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQysrIGNvbXBpbGVyIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgZm9yIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgaW4gdGhlIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ1hYRkxBR1MnPjxmaWxlbmFtZT5DWFhGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRFNES19MREZMQUdTJz48Z2xvc3N0ZXJtPkJVSUxEU0RLX0xERkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEU0RLX0xERkxBR1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgbGlua2VyIHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgaW4gdGhlIDxmaWxlbmFtZT5uYXRpdmVzZGstPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxERkxBR1MnPjxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEU1RBVFNfQkFTRSc+PGdsb3NzdGVybT5CVUlMRFNUQVRTX0JBU0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEU1RBVFNfQkFTRVtkb2NdID0gIlBvaW50cyB0byB0aGUgbG9jYXRpb24gb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGhvbGRzIGJ1aWxkIHN0YXRpc3RpY3Mgd2hlbiB5b3UgdXNlIGFuZCBlbmFibGUgdGhlIGJ1aWxkc3RhdHMgY2xhc3MuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcyB3aGVuIHlvdSB1c2UgYW5kIGVuYWJsZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYnVpbGRzdGF0cyc+PGZpbGVuYW1lPmJ1aWxkc3RhdHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+QlVJTERTVEFUU19CQVNFPC9maWxlbmFtZT4gZGlyZWN0b3J5IGRlZmF1bHRzCisgICAgICAgICAgICAgICAgICAgIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59L2J1aWxkc3RhdHMvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVTWUJPWF9TUExJVF9TVUlEJz48Z2xvc3N0ZXJtPkJVU1lCT1hfU1BMSVRfU1VJRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVTWUJPWF9TUExJVF9TVUlEW2RvY10gPSAiRm9yIHRoZSBCdXN5Qm94IHJlY2lwZSwgc3BlY2lmaWVzIHdoZXRoZXIgdG8gc3BsaXQgdGhlIG91dHB1dCBleGVjdXRhYmxlIGZpbGUgaW50byB0d28gcGFydHM6IG9uZSBmb3IgZmVhdHVyZXMgdGhhdCByZXF1aXJlIHNldHVpZCByb290LCBhbmQgb25lIGZvciB0aGUgcmVtYWluaW5nIGZlYXR1cmVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgQnVzeUJveCByZWNpcGUsIHNwZWNpZmllcyB3aGV0aGVyIHRvIHNwbGl0IHRoZQorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgZXhlY3V0YWJsZSBmaWxlIGludG8gdHdvIHBhcnRzOiBvbmUgZm9yIGZlYXR1cmVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgcmVxdWlyZSA8ZmlsZW5hbWU+c2V0dWlkIHJvb3Q8L2ZpbGVuYW1lPiwgYW5kIG9uZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgdGhlIHJlbWFpbmluZyBmZWF0dXJlcyAoaS5lLiB0aG9zZSB0aGF0IGRvIG5vdCByZXF1aXJlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZXR1aWQgcm9vdDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5CVVNZQk9YX1NQTElUX1NVSUQ8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byAiMSIsIHdoaWNoIHJlc3VsdHMgaW4gYSBzaW5nbGUgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSB2YXJpYWJsZSB0byAiMCIgdG8gc3BsaXQgdGhlIG91dHB1dCBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1jJz48dGl0bGU+QzwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DQUNIRSc+PGdsb3NzdGVybT5DQUNIRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ0FDSEVbZG9jXSAgPSAiVGhlIGRpcmVjdG9yeSBCaXRCYWtlIHVzZXMgdG8gc3RvcmUgYSBjYWNoZSBvZiB0aGUgbWV0YWRhdGEuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgQml0QmFrZSB1c2VzIHRvIHN0b3JlIGEgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHNvIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyc2VkIGV2ZXJ5IHRpbWUgQml0QmFrZSBpcworICAgICAgICAgICAgICAgICAgICBzdGFydGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNDJz48Z2xvc3N0ZXJtPkNDPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDQ1tkb2NdID0gIk1pbmltdW0gY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgQyBjb21waWxlci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdXNlZCB0byBydW4gdGhlIEMKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ0ZMQUdTJz48Z2xvc3N0ZXJtPkNGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ0ZMQUdTW2RvY10gPSAiRmxhZ3MgcGFzc2VkIHRvIHRoZSBDIGNvbXBpbGVyIGZvciB0aGUgdGFyZ2V0IHN5c3RlbS4gVGhpcyB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gdGhlIHNhbWUgYXMgVEFSR0VUX0NGTEFHUy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgY29tcGlsZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgZXhwb3J0ZWQgdG8gYW4gZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRodXMgbWFkZSB2aXNpYmxlIHRvIHRoZSBzb2Z0d2FyZSBiZWluZworICAgICAgICAgICAgICAgICAgICBidWlsdCBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uIHN0ZXAuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgaW5pdGlhbGl6YXRpb24gZm9yIDxmaWxlbmFtZT5DRkxBR1M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoYXQgaXMgYmVpbmcgYnVpbHQ6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9DRkxBR1MnPjxmaWxlbmFtZT5UQVJHRVRfQ0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRF9DRkxBR1MnPjxmaWxlbmFtZT5CVUlMRF9DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdCAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxEU0RLX0NGTEFHUyc+PGZpbGVuYW1lPkJVSUxEU0RLX0NGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIGFuIFNESyAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGstPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNMQVNTT1ZFUlJJREUnPjxnbG9zc3Rlcm0+Q0xBU1NPVkVSUklERTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ0xBU1NPVkVSUklERVtkb2NdID0gIkFuIGludGVybmFsIHZhcmlhYmxlIHNwZWNpZnlpbmcgdGhlIHNwZWNpYWwgY2xhc3Mgb3ZlcnJpZGUgdGhhdCBzaG91bGQgY3VycmVudGx5IGFwcGx5IChlLmcuICJjbGFzcy10YXJnZXQiLCAiY2xhc3MtbmF0aXZlIiwgYW5kIHNvIGZvcnRoKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBbiBpbnRlcm5hbCB2YXJpYWJsZSBzcGVjaWZ5aW5nIHRoZSBzcGVjaWFsIGNsYXNzIG92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGN1cnJlbnRseSBhcHBseSAoZS5nLiAiY2xhc3MtdGFyZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgImNsYXNzLW5hdGl2ZSIsIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgICAgIFRoZSBjbGFzc2VzIHRoYXQgdXNlIHRoaXMgdmFyaWFibGUgc2V0IGl0IHRvCisgICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlIHZhbHVlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBub3JtYWxseSBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBmb3IgdGhlIDxmaWxlbmFtZT5DTEFTU09WRVJSSURFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZ29lcyBpbnRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPjxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gY2FuIGJlIHVzZWQgYXMgYW4gb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB3aGVyZSAicHl0aG9uLW5hdGl2ZSIgaXMgYWRkZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBidWlsZGluZyBmb3IgdGhlIG5hdGl2ZSBjYXNlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgcHl0aG9uLW5hdGl2ZSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNMRUFOQlJPS0VOJz48Z2xvc3N0ZXJtPkNMRUFOQlJPS0VOPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDTEVBTkJST0tFTltkb2NdID0gIlByZXZlbnRzIHRoZSBidWlsZCBzeXN0ZW0gZnJvbSBydW5uaW5nICdtYWtlIGNsZWFuJyBkdXJpbmcgdGhlIGRvX2NvbmZpZ3VyZSB0YXNrLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElmIHNldCB0byAiMSIgd2l0aGluIGEgcmVjaXBlLAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q0xFQU5CUk9LRU48L2ZpbGVuYW1lPiBzcGVjaWZpZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPm1ha2UgY2xlYW48L2ZpbGVuYW1lPiBjb21tYW5kIGRvZXMKKyAgICAgICAgICAgICAgICAgICAgbm90IHdvcmsgZm9yIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aWxsIG5vdCB0cnkKKyAgICAgICAgICAgICAgICAgICAgdG8gcnVuIDxmaWxlbmFtZT5tYWtlIGNsZWFuPC9maWxlbmFtZT4gZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2ssIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPTUJJTkVEX0ZFQVRVUkVTJz48Z2xvc3N0ZXJtPkNPTUJJTkVEX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT01CSU5FRF9GRUFUVVJFU1tkb2NdID0gIkEgc2V0IG9mIGZlYXR1cmVzIGNvbW1vbiBiZXR3ZWVuIE1BQ0hJTkVfRkVBVFVSRVMgYW5kIERJU1RST19GRUFUVVJFUy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQcm92aWRlcyBhIGxpc3Qgb2YgaGFyZHdhcmUgZmVhdHVyZXMgdGhhdCBhcmUgZW5hYmxlZCBpbgorICAgICAgICAgICAgICAgICAgICBib3RoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0ZFQVRVUkVTJz48ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWxlY3QgbGlzdCBvZiBmZWF0dXJlcyBjb250YWlucyBmZWF0dXJlcyB0aGF0IG1ha2UKKyAgICAgICAgICAgICAgICAgICAgc2Vuc2UgdG8gYmUgY29udHJvbGxlZCBib3RoIGF0IHRoZSBtYWNoaW5lIGFuZCBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBsZXZlbC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSAiYmx1ZXRvb3RoIiBmZWF0dXJlIHJlcXVpcmVzIGhhcmR3YXJlCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgYnV0IHNob3VsZCBhbHNvIGJlIG9wdGlvbmFsIGF0IHRoZSBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgbGV2ZWwsIGluIGNhc2UgdGhlIGhhcmR3YXJlIHN1cHBvcnRzIEJsdWV0b290aCBidXQgeW91CisgICAgICAgICAgICAgICAgICAgIGRvIG5vdCBldmVyIGludGVuZCB0byB1c2UgaXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0ZFQVRVUkVTJz48ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09NTU9OX0xJQ0VOU0VfRElSJz48Z2xvc3N0ZXJtPkNPTU1PTl9MSUNFTlNFX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ09NTU9OX0xJQ0VOU0VfRElSW2RvY10gPSAiUG9pbnRzIHRvIG1ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzIGluIHRoZSBTb3VyY2UgRGlyZWN0b3J5LCB3aGljaCBpcyB3aGVyZSBnZW5lcmljIGxpY2Vuc2UgZmlsZXMgcmVzaWRlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byA8ZmlsZW5hbWU+bWV0YS9maWxlcy9jb21tb24tbGljZW5zZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyB3aGVyZSBnZW5lcmljIGxpY2Vuc2UgZmlsZXMgcmVzaWRlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPTVBBVElCTEVfSE9TVCc+PGdsb3NzdGVybT5DT01QQVRJQkxFX0hPU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPTVBBVElCTEVfSE9TVFtkb2NdID0gIkEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgcmVzb2x2ZXMgdG8gb25lIG9yIG1vcmUgaG9zdHMgKHdoZW4gdGhlIHJlY2lwZSBpcyBuYXRpdmUpIG9yIG9uZSBvciBtb3JlIHRhcmdldHMgKHdoZW4gdGhlIHJlY2lwZSBpcyBub24tbmF0aXZlKSB3aXRoIHdoaWNoIGEgcmVjaXBlIGlzIGNvbXBhdGlibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCByZXNvbHZlcyB0byBvbmUgb3IgbW9yZSBob3N0cworICAgICAgICAgICAgICAgICAgICAod2hlbiB0aGUgcmVjaXBlIGlzIG5hdGl2ZSkgb3Igb25lIG9yIG1vcmUgdGFyZ2V0cyAod2hlbgorICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlIGlzIG5vbi1uYXRpdmUpIHdpdGggd2hpY2ggYSByZWNpcGUgaXMgY29tcGF0aWJsZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBtYXRjaGVkIGFnYWluc3QKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0idmFyLUhPU1RfU1lTIj48ZmlsZW5hbWU+SE9TVF9TWVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSB2YXJpYWJsZSB0byBzdG9wIHJlY2lwZXMgZnJvbSBiZWluZyBidWlsdAorICAgICAgICAgICAgICAgICAgICBmb3IgY2xhc3NlcyBvZiBzeXN0ZW1zIHdpdGggd2hpY2ggdGhlIHJlY2lwZXMgYXJlIG5vdAorICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlLgorICAgICAgICAgICAgICAgICAgICBTdG9wcGluZyB0aGVzZSBidWlsZHMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCB3aXRoIGtlcm5lbHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBhbHNvIGhlbHBzIHRvIGluY3JlYXNlIHBhcnNpbmcgc3BlZWQKKyAgICAgICAgICAgICAgICAgICAgc2luY2UgdGhlIGJ1aWxkIHN5c3RlbSBza2lwcyBwYXJzaW5nIHJlY2lwZXMgbm90CisgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCBzeXN0ZW0uCisgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT01QQVRJQkxFX01BQ0hJTkUnPjxnbG9zc3Rlcm0+Q09NUEFUSUJMRV9NQUNISU5FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT01QQVRJQkxFX01BQ0hJTkVbZG9jXSA9ICJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHJlc29sdmVzIHRvIG9uZSBvciBtb3JlIHRhcmdldCBtYWNoaW5lcyB3aXRoIHdoaWNoIGEgcmVjaXBlIGlzIGNvbXBhdGlibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCByZXNvbHZlcyB0byBvbmUgb3IgbW9yZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgbWFjaGluZXMgd2l0aCB3aGljaCBhIHJlY2lwZSBpcyBjb21wYXRpYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVndWxhciBleHByZXNzaW9uIGlzIG1hdGNoZWQgYWdhaW5zdAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSJ2YXItTUFDSElORU9WRVJSSURFUyI+PGZpbGVuYW1lPk1BQ0hJTkVPVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSB2YXJpYWJsZSB0byBzdG9wIHJlY2lwZXMgZnJvbSBiZWluZyBidWlsdAorICAgICAgICAgICAgICAgICAgICBmb3IgbWFjaGluZXMgd2l0aCB3aGljaCB0aGUgcmVjaXBlcyBhcmUgbm90IGNvbXBhdGlibGUuCisgICAgICAgICAgICAgICAgICAgIFN0b3BwaW5nIHRoZXNlIGJ1aWxkcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHdpdGgga2VybmVscy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGFsc28gaGVscHMgdG8gaW5jcmVhc2UgcGFyc2luZyBzcGVlZAorICAgICAgICAgICAgICAgICAgICBzaW5jZSB0aGUgYnVpbGQgc3lzdGVtIHNraXBzIHBhcnNpbmcgcmVjaXBlcyBub3QKKyAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09NUExFTUVOVEFSWV9HTE9CJz48Z2xvc3N0ZXJtPkNPTVBMRU1FTlRBUllfR0xPQjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ09NUExFTUVOVEFSWV9HTE9CW2RvY10gPSAiRGVmaW5lcyB3aWxkY2FyZHMgdG8gbWF0Y2ggd2hlbiBpbnN0YWxsaW5nIGEgbGlzdCBvZiBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIGZvciBhbGwgdGhlIHBhY2thZ2VzIGluc3RhbGxlZCBpbiBhbiBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHdpbGRjYXJkcyB0byBtYXRjaCB3aGVuIGluc3RhbGxpbmcgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgZm9yIGFsbCB0aGUgcGFja2FnZXMgZXhwbGljaXRseQorICAgICAgICAgICAgICAgICAgICAob3IgaW1wbGljaXRseSkgaW5zdGFsbGVkIGluIGFuIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0aW5nIGxpc3Qgb2YgY29tcGxlbWVudGFyeSBwYWNrYWdlcyBpcyBhc3NvY2lhdGVkCisgICAgICAgICAgICAgICAgICAgIHdpdGggYW4gaXRlbSB0aGF0IGNhbiBiZSBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSB1c2FnZSBvZiB0aGlzIGlzIHRoZSAiZGV2LXBrZ3MiIGl0ZW0gdGhhdCB3aGVuCisgICAgICAgICAgICAgICAgICAgIGFkZGVkIHRvIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IHdpbGwKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAtZGV2IHBhY2thZ2VzIChjb250YWluaW5nIGhlYWRlcnMgYW5kIG90aGVyCisgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IGZpbGVzKSBmb3IgZXZlcnkgcGFja2FnZSBpbiB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBhIG5ldyBmZWF0dXJlIGl0ZW0gcG9pbnRpbmcgdG8gYSB3aWxkY2FyZCwgdXNlIGEKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZmxhZyB0byBzcGVjaWZ5IHRoZSBmZWF0dXJlIGl0ZW0gbmFtZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSB2YWx1ZSB0byBzcGVjaWZ5IHRoZSB3aWxkY2FyZC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENPTVBMRU1FTlRBUllfR0xPQltkZXYtcGtnc10gPSAnKi1kZXYnCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT05GX1ZFUlNJT04nPjxnbG9zc3Rlcm0+Q09ORl9WRVJTSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT05GX1ZFUlNJT05bZG9jXSA9ICJUcmFja3MgdGhlIHZlcnNpb24gb2YgbG9jYWwuY29uZi4gIEluY3JlYXNlZCBlYWNoIHRpbWUgYnVpbGQvY29uZi8gY2hhbmdlcyBpbmNvbXBhdGlibHkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVHJhY2tzIHRoZSB2ZXJzaW9uIG9mIHRoZSBsb2NhbCBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBmb3IgPGZpbGVuYW1lPkNPTkZfVkVSU0lPTjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudHMgZWFjaCB0aW1lIDxmaWxlbmFtZT5idWlsZC9jb25mLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbXBhdGliaWxpdHkgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT05GRklMRVMnPjxnbG9zc3Rlcm0+Q09ORkZJTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT05GRklMRVNbZG9jXSA9ICJJZGVudGlmaWVzIGVkaXRhYmxlIG9yIGNvbmZpZ3VyYWJsZSBmaWxlcyB0aGF0IGFyZSBwYXJ0IG9mIGEgcGFja2FnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVzIGVkaXRhYmxlIG9yIGNvbmZpZ3VyYWJsZSBmaWxlcyB0aGF0IGFyZSBwYXJ0IG9mIGEgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIFBhY2thZ2UgTWFuYWdlbWVudCBTeXN0ZW0gKFBNUykgaXMgYmVpbmcgdXNlZCB0byB1cGRhdGUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgb24gdGhlIHRhcmdldCBzeXN0ZW0sIGl0IGlzIHBvc3NpYmxlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyB5b3UgaGF2ZSBjaGFuZ2VkIGFmdGVyIHRoZSBvcmlnaW5hbCBpbnN0YWxsYXRpb24KKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoYXQgeW91IG5vdyB3YW50IHRvIHJlbWFpbiB1bmNoYW5nZWQgYXJlIG92ZXJ3cml0dGVuLgorICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgZWRpdGFibGUgZmlsZXMgbWlnaHQgZXhpc3QgaW4gdGhlIHBhY2thZ2UgdGhhdCB5b3UgZG8gbm90CisgICAgICAgICAgICAgICAgICAgIHdhbnQgcmVzZXQgYXMgcGFydCBvZiB0aGUgcGFja2FnZSB1cGRhdGUgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5DT05GRklMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSB0byBsaXN0IHRoZSBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSB0aGF0IHlvdSB3aXNoIHRvIHByZXZlbnQgdGhlIFBNUyBmcm9tIG92ZXJ3cml0aW5nIGR1cmluZyB0aGlzIHVwZGF0ZSBwcm9jZXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyB1c2UgdGhlIDxmaWxlbmFtZT5DT05GRklMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgcHJvdmlkZSBhIHBhY2thZ2UgbmFtZQorICAgICAgICAgICAgICAgICAgICBvdmVycmlkZSB0aGF0IGlkZW50aWZpZXMgdGhlIHJlc3VsdGluZyBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGVuLCBwcm92aWRlIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vZmlsZTEgXAorICAgICAgICAke3N5c2NvbmZkaXJ9L2ZpbGUyICR7c3lzY29uZmRpcn0vZmlsZTMiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSByZWxhdGlvbnNoaXAgZXhpc3RzIGJldHdlZW4gdGhlIDxmaWxlbmFtZT5DT05GRklMRVM8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+RklMRVM8L2xpbms+PC9maWxlbmFtZT4gdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZXMgbGlzdGVkIHdpdGhpbiA8ZmlsZW5hbWU+Q09ORkZJTEVTPC9maWxlbmFtZT4gbXVzdCBiZSBhIHN1YnNldCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgZmlsZXMgbGlzdGVkIHdpdGhpbiA8ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyB5b3UgcHJvdmlkZSB3aXRoIDxmaWxlbmFtZT5DT05GRklMRVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhcmUgc2ltcGx5IGJlaW5nIGlkZW50aWZpZWQgc28gdGhhdCB0aGUgUE1TIHdpbGwgbm90IG92ZXJ3cml0ZSB0aGVtLAorICAgICAgICAgICAgICAgICAgICBpdCBtYWtlcyBzZW5zZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHRoZSBmaWxlcyBtdXN0IGFscmVhZHkgYmUgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgcGFja2FnZSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzcGVjaWZ5aW5nIHBhdGhzIGFzIHBhcnQgb2YgdGhlIDxmaWxlbmFtZT5DT05GRklMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgaXQgaXMgZ29vZCBwcmFjdGljZSB0byB1c2UgYXBwcm9wcmlhdGUgcGF0aCB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCA8ZmlsZW5hbWU+JHtzeXNjb25mZGlyfTwvZmlsZW5hbWU+IHJhdGhlciB0aGFuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPiR7YmluZGlyfTwvZmlsZW5hbWU+IHJhdGhlcgorICAgICAgICAgICAgICAgICAgICB0aGFuIDxmaWxlbmFtZT4vdXNyL2JpbjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgYSBsaXN0IG9mIHRoZXNlIHZhcmlhYmxlcyBhdCB0aGUgdG9wIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRSc+PGdsb3NzdGVybT5DT05GSUdfSU5JVFJBTUZTX1NPVVJDRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ09ORklHX0lOSVRSQU1GU19TT1VSQ0VbZG9jXSA9ICJJZGVudGlmaWVzIHRoZSBpbml0aWFsIFJBTSBkaXNrIChpbml0cmFtZnMpIHNvdXJjZSBmaWxlcy4gVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcmVjZWl2ZXMgYW5kIHVzZXMgdGhpcyBrZXJuZWwgS2NvbmZpZyB2YXJpYWJsZSBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVzIHRoZSBpbml0aWFsIFJBTSBkaXNrIChpbml0cmFtZnMpIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcmVjZWl2ZXMgYW5kIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdGhpcyBrZXJuZWwgS2NvbmZpZyB2YXJpYWJsZSBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHZhcmlhYmxlIGlzIHNldCB0byBudWxsICgiIikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Q09ORklHX0lOSVRSQU1GU19TT1VSQ0U8L2ZpbGVuYW1lPiBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgZWl0aGVyIGEgc2luZ2xlIGNwaW8gYXJjaGl2ZSB3aXRoIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jcGlvPC9maWxlbmFtZT4gc3VmZml4IG9yIGEKKyAgICAgICAgICAgICAgICAgICAgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGZvciBidWlsZGluZworICAgICAgICAgICAgICAgICAgICB0aGUgaW5pdHJhbWZzIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBBIGNwaW8gYXJjaGl2ZSBzaG91bGQgY29udGFpbiBhIGZpbGVzeXN0ZW0gYXJjaGl2ZQorICAgICAgICAgICAgICAgICAgICB0byBiZSB1c2VkIGFzIGFuIGluaXRyYW1mcyBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3JpZXMgc2hvdWxkIGNvbnRhaW4gYSBmaWxlc3lzdGVtIGxheW91dCB0byBiZQorICAgICAgICAgICAgICAgICAgICBpbmNsdWRlZCBpbiB0aGUgaW5pdHJhbWZzIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBGaWxlcyBzaG91bGQgY29udGFpbiBlbnRyaWVzIGFjY29yZGluZyB0byB0aGUgZm9ybWF0CisgICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVzci9nZW5faW5pdF9jcGlvPC9maWxlbmFtZT4gcHJvZ3JhbSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAga2VybmVsIHRyZWUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBzcGVjaWZ5IG11bHRpcGxlIGRpcmVjdG9yaWVzIGFuZCBmaWxlcywgdGhlCisgICAgICAgICAgICAgICAgICAgIGluaXRyYW1mcyBpbWFnZSB3aWxsIGJlIHRoZSBhZ2dyZWdhdGUgb2YgYWxsIG9mIHRoZW0uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09ORklHX1NJVEUnPjxnbG9zc3Rlcm0+Q09ORklHX1NJVEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPTkZJR19TSVRFW2RvY10gPSAiQSBsaXN0IG9mIGZpbGVzIHRoYXQgY29udGFpbnMgYXV0b2NvbmYgdGVzdCByZXN1bHRzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IGJ1aWxkLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgYnkgdGhlIEF1dG90b29scyB1dGlsaXRpZXMgd2hlbiBydW5uaW5nIGNvbmZpZ3VyZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgZmlsZXMgdGhhdCBjb250YWlucyA8ZmlsZW5hbWU+YXV0b2NvbmY8L2ZpbGVuYW1lPiB0ZXN0IHJlc3VsdHMgcmVsZXZhbnQKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGN1cnJlbnQgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBieSB0aGUgQXV0b3Rvb2xzIHV0aWxpdGllcyB3aGVuIHJ1bm5pbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmZpZ3VyZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPTkZJR1VSRV9GTEFHUyc+PGdsb3NzdGVybT5DT05GSUdVUkVfRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPTkZJR1VSRV9GTEFHU1tkb2NdID0gIlRoZSBtaW5pbWFsIGFyZ3VtZW50cyBmb3IgR05VIGNvbmZpZ3VyZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWluaW1hbCBhcmd1bWVudHMgZm9yIEdOVSBjb25maWd1cmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTJz48Z2xvc3N0ZXJtPkNPTkZMSUNUX0RJU1RST19GRUFUVVJFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGlkZW50aWZpZXMgZGlzdHJpYnV0aW9uIGZlYXR1cmVzIHRoYXQgd291bGQgYmUgaW4gY29uZmxpY3Qgc2hvdWxkIHRoZSByZWNpcGUgYmUgYnVpbHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kaXN0cm9fZmVhdHVyZXNfY2hlY2snPjxmaWxlbmFtZT5kaXN0cm9fZmVhdHVyZXNfY2hlY2s8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaWRlbnRpZmllcyBkaXN0cmlidXRpb24gZmVhdHVyZXMgdGhhdCB3b3VsZAorICAgICAgICAgICAgICAgICAgICBiZSBpbiBjb25mbGljdCBzaG91bGQgdGhlIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBiZSBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIGlmIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgbGlzdHMgYSBmZWF0dXJlIHRoYXQgYWxzbyBhcHBlYXJzIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPiB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgYW4gZXJyb3Igb2NjdXJzIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3RvcHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09QWV9MSUNfRElSUyc+PGdsb3NzdGVybT5DT1BZX0xJQ19ESVJTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT1BZX0xJQ19ESVJTW2RvY10gPSAiSWYgc2V0IHRvICIxIiBhbG9uZyB3aXRoIHRoZSBDT1BZX0xJQ19NQU5JRkVTVCB2YXJpYWJsZSwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY29waWVzIGludG8gdGhlIGltYWdlIHRoZSBsaWNlbnNlIGZpbGVzLCB3aGljaCBhcmUgbG9jYXRlZCBpbiAvdXNyL3NoYXJlL2NvbW1vbi1saWNlbnNlcywgZm9yIGVhY2ggcGFja2FnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjEiIGFsb25nIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DT1BZX0xJQ19NQU5JRkVTVCc+PGZpbGVuYW1lPkNPUFlfTElDX01BTklGRVNUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjb3BpZXMKKyAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgaW1hZ2UgdGhlIGxpY2Vuc2UgZmlsZXMsIHdoaWNoIGFyZSBsb2NhdGVkIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL3NoYXJlL2NvbW1vbi1saWNlbnNlczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBmb3IgZWFjaCBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgbGljZW5zZSBmaWxlcyBhcmUgcGxhY2VkCisgICAgICAgICAgICAgICAgICAgIGluIGRpcmVjdG9yaWVzIHdpdGhpbiB0aGUgaW1hZ2UgaXRzZWxmLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPUFlfTElDX01BTklGRVNUJz48Z2xvc3N0ZXJtPkNPUFlfTElDX01BTklGRVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT1BZX0xJQ19NQU5JRkVTVFtkb2NdID0gIklmIHNldCB0byAiMSIsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNvcGllcyB0aGUgbGljZW5zZSBtYW5pZmVzdCBmb3IgdGhlIGltYWdlIHRvIC91c3Ivc2hhcmUvY29tbW9uLWxpY2Vuc2VzL2xpY2Vuc2UubWFuaWZlc3Qgd2l0aGluIHRoZSBpbWFnZSBpdHNlbGYuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvICIxIiwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY29waWVzCisgICAgICAgICAgICAgICAgICAgIHRoZSBsaWNlbnNlIG1hbmlmZXN0IGZvciB0aGUgaW1hZ2UgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3Ivc2hhcmUvY29tbW9uLWxpY2Vuc2VzL2xpY2Vuc2UubWFuaWZlc3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIGltYWdlIGl0c2VsZi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEwnPjxnbG9zc3Rlcm0+Q09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTExbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgcGFja2FnZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGltYWdlLiBZb3Ugc2hvdWxkIG9ubHkgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGJlIGFkZGVkIHRvIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBvbmx5IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSBmb3VuZAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSByZXBsYWNlcyA8ZmlsZW5hbWU+UE9LWV9FWFRSQV9JTlNUQUxMPC9maWxlbmFtZT4sIHdoaWNoIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09SRUJBU0UnPjxnbG9zc3Rlcm0+Q09SRUJBU0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPUkVCQVNFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBPcGVuRW1iZWRkZWQgQ29yZSBNZXRhZGF0YSBsYXllciAoaS5lLiBtZXRhKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICBDb3JlIE1ldGFkYXRhIGxheWVyIChpLmUuIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBhbiBpbXBvcnRhbnQgZGlzdGluY3Rpb24gdGhhdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q09SRUJBU0U8L2ZpbGVuYW1lPiBwb2ludHMgdG8gdGhlIHBhcmVudCBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIGxheWVyIGFuZCBub3QgdGhlIGxheWVyIGl0c2VsZi4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgYW4gZXhhbXBsZSB3aGVyZSB5b3UgaGF2ZSBjbG9uZWQgdGhlIFBva3kgR2l0CisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgYW5kIHJldGFpbmVkIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG5hbWUgZm9yIHlvdXIgbG9jYWwgY29weSBvZiB0aGUgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCA8ZmlsZW5hbWU+Q09SRUJBU0U8L2ZpbGVuYW1lPiBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gZm9sZGVyIGJlY2F1c2UgaXQgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIDxmaWxlbmFtZT5wb2t5L21ldGE8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBsYXllci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DUFAnPjxnbG9zc3Rlcm0+Q1BQPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDUFBbZG9jXSA9ICJNaW5pbXVtIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB1c2VkIHRvIHJ1biB0aGUgQworICAgICAgICAgICAgICAgICAgICBwcmVwcm9jZXNzb3IuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ1BQRkxBR1MnPjxnbG9zc3Rlcm0+Q1BQRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENQUEZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIHByZS1wcm9jZXNzb3IgKGkuZS4gdG8gYm90aCB0aGUgQyBhbmQgdGhlIEMrKyBjb21waWxlcnMpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBwcmUtcHJvY2Vzc29yCisgICAgICAgICAgICAgICAgICAgIChpLmUuIHRvIGJvdGggdGhlIEMgYW5kIHRoZSBDKysgY29tcGlsZXJzKS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBleHBvcnRlZCB0byBhbiBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdGh1cyBtYWRlIHZpc2libGUgdG8gdGhlIHNvZnR3YXJlIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0IGR1cmluZyB0aGUgY29tcGlsYXRpb24gc3RlcC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBpbml0aWFsaXphdGlvbiBmb3IgPGZpbGVuYW1lPkNQUEZMQUdTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWVzIGRlcGVuZGluZyBvbiB3aGF0IGlzIGJlaW5nIGJ1aWx0OgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfQ1BQRkxBR1MnPjxmaWxlbmFtZT5UQVJHRVRfQ1BQRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxEX0NQUEZMQUdTJz48ZmlsZW5hbWU+QlVJTERfQ1BQRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdCAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxEU0RLX0NQUEZMQUdTJz48ZmlsZW5hbWU+QlVJTERTREtfQ1BQRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciBhbiBTREsgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlc2RrLTwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DUk9TU19DT01QSUxFJz48Z2xvc3N0ZXJtPkNST1NTX0NPTVBJTEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENST1NTX0NPTVBJTEVbZG9jXSA9ICJUaGUgdG9vbGNoYWluIGJpbmFyeSBwcmVmaXggZm9yIHRoZSB0YXJnZXQgdG9vbHMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSB0b29sY2hhaW4gYmluYXJ5IHByZWZpeCBmb3IgdGhlIHRhcmdldCB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5DUk9TU19DT01QSUxFPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgIHNhbWUgYXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfUFJFRklYJz48ZmlsZW5hbWU+VEFSR0VUX1BSRUZJWDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzZXRzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNST1NTX0NPTVBJTEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBvbmx5IGluCisgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0YWluIGNvbnRleHRzIChlLmcuIHdoZW4gYnVpbGRpbmcgZm9yIGtlcm5lbAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGtlcm5lbCBtb2R1bGUgcmVjaXBlcykuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DVlNESVInPjxnbG9zc3Rlcm0+Q1ZTRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDVlNESVJbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IHdoZXJlIGN2cyBjaGVja291dHMgd2lsbCBiZSBzdG9yZWQgaW4uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBmaWxlcyBjaGVja2VkIG91dCB1bmRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgQ1ZTIHN5c3RlbSBhcmUgc3RvcmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNYWCc+PGdsb3NzdGVybT5DWFg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENYWFtkb2NdID0gIk1pbmltdW0gY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgQysrIGNvbXBpbGVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB1c2VkIHRvIHJ1biB0aGUgQysrCisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNYWEZMQUdTJz48Z2xvc3N0ZXJtPkNYWEZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDWFhGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQysrIGNvbXBpbGVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQysrIGNvbXBpbGVyLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGV4cG9ydGVkIHRvIGFuIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB0aHVzIG1hZGUgdmlzaWJsZSB0byB0aGUgc29mdHdhcmUgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgYnVpbHQgZHVyaW5nIHRoZSBjb21waWxhdGlvbiBzdGVwLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IGluaXRpYWxpemF0aW9uIGZvciA8ZmlsZW5hbWU+Q1hYRkxBR1M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoYXQgaXMgYmVpbmcgYnVpbHQ6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9DWFhGTEFHUyc+PGZpbGVuYW1lPlRBUkdFVF9DWFhGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERfQ1hYRkxBR1MnPjxmaWxlbmFtZT5CVUlMRF9DWFhGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0IChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1uYXRpdmU8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERTREtfQ1hYRkxBR1MnPjxmaWxlbmFtZT5CVUlMRFNES19DWFhGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIGFuIFNESyAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWQnPjx0aXRsZT5EPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUQnPjxnbG9zc3Rlcm0+RDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRFtkb2NdID0gIlRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIGluIHRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHdoZXJlIGNvbXBvbmVudHMgYXJlIGluc3RhbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbG9jYXRpb24gZGVmYXVsdHMgdG86CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtXT1JLRElSfS9pbWFnZQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREFURSc+PGdsb3NzdGVybT5EQVRFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBEQVRFW2RvY10gPSAiVGhlIGRhdGUgdGhlIGJ1aWxkIHdhcyBzdGFydGVkIHVzaW5nIFlNRCBmb3JtYXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRhdGUgdGhlIGJ1aWxkIHdhcyBzdGFydGVkLgorICAgICAgICAgICAgICAgICAgICBEYXRlcyBhcHBlYXIgdXNpbmcgdGhlIHllYXIsIG1vbnRoLCBhbmQgZGF5IChZTUQpIGZvcm1hdAorICAgICAgICAgICAgICAgICAgICAoZS5nLiAiMjAxNTAyMDkiIGZvciBGZWJydWFyeSA5dGgsIDIwMTUpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURBVEVUSU1FJz48Z2xvc3N0ZXJtPkRBVEVUSU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBEQVRFVElNRVtkb2NdID0gIlRoZSBkYXRlIGFuZCB0aW1lIHRoZSBidWlsZCB3YXMgc3RhcnRlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGF0ZSBhbmQgdGltZSBvbiB3aGljaCB0aGUgY3VycmVudCBidWlsZCBzdGFydGVkLgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9ybWF0IGlzIHN1aXRhYmxlIGZvciB0aW1lc3RhbXBzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFQklBTl9OT0FVVE9OQU1FJz48Z2xvc3N0ZXJtPkRFQklBTl9OT0FVVE9OQU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERUJJQU5fTk9BVVRPTkFNRVtkb2NdID0gIlByZXZlbnRzIGEgcGFydGljdWxhciBwYWNrYWdlIGZyb20gYmVpbmcgcmVuYW1lZCBhY2NvcmRpbmcgdG8gRGViaWFuIHBhY2thZ2UgbmFtaW5nLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRlYmlhbic+PGZpbGVuYW1lPmRlYmlhbjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBpcyBpbmhlcml0ZWQsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVCSUFOX05PQVVUT05BTUU8L2ZpbGVuYW1lPiBzcGVjaWZpZXMgYQorICAgICAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIHBhY2thZ2Ugc2hvdWxkIG5vdCBiZSByZW5hbWVkIGFjY29yZGluZyB0bworICAgICAgICAgICAgICAgICAgICBEZWJpYW4gbGlicmFyeSBwYWNrYWdlIG5hbWluZy4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgdXNlIHRoZSBwYWNrYWdlIG5hbWUgYXMgYW4gb3ZlcnJpZGUgd2hlbiB5b3UKKyAgICAgICAgICAgICAgICAgICAgc2V0IHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIHRoZSA8ZmlsZW5hbWU+Zm9udGNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERUJJQU5fTk9BVVRPTkFNRV9mb250Y29uZmlnLXV0aWxzID0gIjEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERUJJQU5OQU1FJz48Z2xvc3N0ZXJtPkRFQklBTk5BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERFQklBTk5BTUVbZG9jXSA9ICJBbGxvd3MgeW91IHRvIG92ZXJyaWRlIHRoZSBsaWJyYXJ5IG5hbWUgZm9yIGFuIGluZGl2aWR1YWwgcGFja2FnZSBmb3IgRGViaWFuIGxpYnJhcnkgcGFja2FnZSByZW5hbWluZy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kZWJpYW4nPjxmaWxlbmFtZT5kZWJpYW48L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgaXMgaW5oZXJpdGVkLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFQklBTk5BTUU8L2ZpbGVuYW1lPiBhbGxvd3MgeW91IHRvIG92ZXJyaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5IG5hbWUgZm9yIGFuIGluZGl2aWR1YWwgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGluZyB0aGUgbGlicmFyeSBuYW1lIGluIHRoZXNlIGNhc2VzIGlzIHJhcmUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHVzZSB0aGUgcGFja2FnZSBuYW1lIGFzIGFuIG92ZXJyaWRlIHdoZW4geW91CisgICAgICAgICAgICAgICAgICAgIHNldCB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUgPGZpbGVuYW1lPmRidXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVCSUFOTkFNRV8ke1BOfSA9ICJkYnVzLTEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERUJVR19CVUlMRCc+PGdsb3NzdGVybT5ERUJVR19CVUlMRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgREVCVUdfQlVJTERbZG9jXSA9ICJTcGVjaWZpZXMgdG8gYnVpbGQgcGFja2FnZXMgd2l0aCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uIFRoaXMgaW5mbHVlbmNlcyB0aGUgdmFsdWUgb2YgdGhlIFNFTEVDVEVEX09QVElNSVpBVElPTiB2YXJpYWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdG8gYnVpbGQgcGFja2FnZXMgd2l0aCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgaW5mbHVlbmNlcyB0aGUgdmFsdWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU0VMRUNURURfT1BUSU1JWkFUSU9OJz5TRUxFQ1RFRF9PUFRJTUlaQVRJT048L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVCVUdfT1BUSU1JWkFUSU9OJz48Z2xvc3N0ZXJtPkRFQlVHX09QVElNSVpBVElPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgREVCVUdfT1BUSU1JWkFUSU9OW2RvY10gPSAiVGhlIG9wdGlvbnMgdG8gcGFzcyBpbiBUQVJHRVRfQ0ZMQUdTIGFuZCBDRkxBR1Mgd2hlbiBjb21waWxpbmcgYSBzeXN0ZW0gZm9yIGRlYnVnZ2luZy4gVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAnLU8gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWcnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBvcHRpb25zIHRvIHBhc3MgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfQ0ZMQUdTJz5UQVJHRVRfQ0ZMQUdTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUNGTEFHUyc+Q0ZMQUdTPC9saW5rPjwvZmlsZW5hbWU+IHdoZW4gY29tcGlsaW5nCisgICAgICAgICAgICAgICAgICAgIGEgc3lzdGVtIGZvciBkZWJ1Z2dpbmcuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgZGVmYXVsdHMgdG8gIi1PIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyICR7REVCVUdfRkxBR1N9IC1waXBlIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERUZBVUxUX1BSRUZFUkVOQ0UnPjxnbG9zc3Rlcm0+REVGQVVMVF9QUkVGRVJFTkNFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERUZBVUxUX1BSRUZFUkVOQ0VbZG9jXSA9ICJTcGVjaWZpZXMgYSB3ZWFrIGJpYXMgZm9yIHJlY2lwZSBzZWxlY3Rpb24gcHJpb3JpdHkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgd2VhayBiaWFzIGZvciByZWNpcGUgc2VsZWN0aW9uIHByaW9yaXR5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbW9zdCBjb21tb24gdXNhZ2Ugb2YgdGhpcyBpcyB2YXJpYWJsZSBpcyB0byBzZXQKKyAgICAgICAgICAgICAgICAgICAgaXQgdG8gIi0xIiB3aXRoaW4gYSByZWNpcGUgZm9yIGEgZGV2ZWxvcG1lbnQgdmVyc2lvbiBvZiBhCisgICAgICAgICAgICAgICAgICAgIHBpZWNlIG9mIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGUgdmFyaWFibGUgaW4gdGhpcyB3YXkgY2F1c2VzIHRoZSBzdGFibGUgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcmVjaXBlIHRvIGJ1aWxkIGJ5IGRlZmF1bHQgaW4gdGhlIGFic2VuY2Ugb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVGRVJSRURfVkVSU0lPTic+UFJFRkVSUkVEX1ZFUlNJT048L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgdXNlZCB0byBidWlsZCB0aGUgZGV2ZWxvcG1lbnQgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJpYXMgcHJvdmlkZWQgYnkgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIHdlYWsgYW5kIGlzIG92ZXJyaWRkZW4gYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVfUFJJT1JJVFknPkJCRklMRV9QUklPUklUWTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpZiB0aGF0IHZhcmlhYmxlIGlzIGRpZmZlcmVudCBiZXR3ZWVuIHR3byBsYXllcnMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBjb250YWluIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgc2FtZSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVGQVVMVFRVTkUnPjxnbG9zc3Rlcm0+REVGQVVMVFRVTkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERFRkFVTFRUVU5FW2RvY10gPSAiVGhlIGRlZmF1bHQgQ1BVIGFuZCBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIHR1bmluZ3MgKGkuZS4gIHRoZSAidHVuZSIpIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgQ1BVIGFuZCBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpCisgICAgICAgICAgICAgICAgICAgIHR1bmluZ3MgKGkuZS4gIHRoZSAidHVuZSIpIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+REVGQVVMVFRVTkU8L2ZpbGVuYW1lPiBoZWxwcyBkZWZpbmUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfRkVBVFVSRVMnPjxmaWxlbmFtZT5UVU5FX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB0dW5lIGlzIGVpdGhlciBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgc2V0CisgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBtYWNoaW5lCisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBzZXR0aW5nIHVzaW5nIGF2YWlsYWJsZSB0dW5lcworICAgICAgICAgICAgICAgICAgICBhcyBkZWZpbmVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUFWQUlMVFVORVMnPjxmaWxlbmFtZT5BVkFJTFRVTkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFUEVORFMnPjxnbG9zc3Rlcm0+REVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgREVQRU5EU1tkb2NdID0gIkxpc3RzIGEgcmVjaXBlJ3MgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgKGkuZS4gb3RoZXIgcmVjaXBlIGZpbGVzKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBhIHJlY2lwZSdzIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIChpLmUuIG90aGVyIHJlY2lwZSBmaWxlcykuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzeXN0ZW0gZW5zdXJlcyB0aGF0IGFsbCB0aGUgZGVwZW5kZW5jaWVzIGxpc3RlZAorICAgICAgICAgICAgICAgICAgICBoYXZlIGJlZW4gYnVpbHQgYW5kIGhhdmUgdGhlaXIgY29udGVudHMgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICAgICAgICAgICAgIHN5c3Jvb3RzIGJlZm9yZSB0aGUgcmVjaXBlJ3MgY29uZmlndXJlIHRhc2sgaXMgZXhlY3V0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoaXMgc2ltcGxlIGV4YW1wbGUgZm9yIHR3byByZWNpcGVzIG5hbWVkICJhIiBhbmQKKyAgICAgICAgICAgICAgICAgICAgImIiIHRoYXQgcHJvZHVjZSBzaW1pbGFybHkgbmFtZWQgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IGFwcGVhcnMgaW4gdGhlICJhIiByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVQRU5EUyA9ICJiIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEhlcmUsIHRoZSBkZXBlbmRlbmN5IGlzIHN1Y2ggdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIGZvciByZWNpcGUgImEiIGRlcGVuZHMgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9zeXNyb290Jz48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIG9mIHJlY2lwZSAiYiIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbWVhbnMgYW55dGhpbmcgdGhhdCByZWNpcGUgImIiIHB1dHMgaW50byBzeXNyb290CisgICAgICAgICAgICAgICAgICAgIGlzIGF2YWlsYWJsZSB3aGVuIHJlY2lwZSAiYSIgaXMgY29uZmlndXJpbmcgaXRzZWxmLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gcnVudGltZSBkZXBlbmRlbmNpZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVQTE9ZX0RJUic+PGdsb3NzdGVybT5ERVBMT1lfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERVBMT1lfRElSW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBnZW5lcmFsIGFyZWEgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRvIHBsYWNlIGltYWdlcywgcGFja2FnZXMsIFNES3MgYW5kIG90aGVyIG91dHB1dCBmaWxlcyB0aGF0IGFyZSByZWFkeSB0byBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIGdlbmVyYWwgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHVzZXMgdG8gcGxhY2UgaW1hZ2VzLCBwYWNrYWdlcywgU0RLcyBhbmQgb3RoZXIgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGZpbGVzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIGRpcmVjdG9yeSByZXNpZGVzIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhcyA8ZmlsZW5hbWU+JHtUTVBESVJ9L2RlcGxveTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgc3RydWN0dXJlIG9mIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnksIHNlZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWJ1aWxkJz5UaGUgQnVpbGQgRGlyZWN0b3J5IC0gPGZpbGVuYW1lPmJ1aWxkLzwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlsIG9uIHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naW1hZ2VzLWRldi1lbnZpcm9ubWVudCc+SW1hZ2VzPC9saW5rPiIsCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYWNrYWdlLWZlZWRzLWRldi1lbnZpcm9ubWVudCc+UGFja2FnZSBGZWVkczwvbGluaz4iLAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1kZXYtZW52aXJvbm1lbnQnPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFNESzwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFUExPWV9ESVJfREVCJz48Z2xvc3N0ZXJtPkRFUExPWV9ESVJfREVCPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERVBMT1lfRElSX0RFQltkb2NdID0gIlBvaW50cyB0byBhIERlYmlhbi1zcGVjaWZpYyBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0byBwbGFjZSBpbWFnZXMsIHBhY2thZ2VzLCBTREtzIGFuZCBvdGhlciBvdXRwdXQgZmlsZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgICAgICAgICB0byBwbGFjZSBEZWJpYW4gcGFja2FnZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCBvdXRzaWRlCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYXBwbGllcyBvbmx5IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjb250YWlucyAicGFja2FnZV9kZWIiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUgaW5pdGlhbGx5IGRlZmluZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVBMT1lfRElSX0RFQjwvZmlsZW5hbWU+IHZhcmlhYmxlIGFzIGEKKyAgICAgICAgICAgICAgICAgICAgc3ViLWZvbGRlciBvZgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUic+PGZpbGVuYW1lPkRFUExPWV9ESVI8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVQTE9ZX0RJUl9ERUIgPSAiJHtERVBMT1lfRElSfS9kZWIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfZGViJz48ZmlsZW5hbWU+cGFja2FnZV9kZWI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFUExPWV9ESVJfREVCPC9maWxlbmFtZT4gdmFyaWFibGUgdG8gbWFrZSBzdXJlCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZV93cml0ZV9kZWInPjxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX2RlYjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIHdyaXRlcyBEZWJpYW4gcGFja2FnZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgZm9sZGVyLgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgcGFja2FnaW5nIHdvcmtzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYWNrYWdlLWZlZWRzLWRldi1lbnZpcm9ubWVudCc+UGFja2FnZSBGZWVkczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVQTE9ZX0RJUl9JTUFHRSc+PGdsb3NzdGVybT5ERVBMT1lfRElSX0lNQUdFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERVBMT1lfRElSX0lNQUdFW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0byBwbGFjZSBpbWFnZXMgYW5kIG90aGVyIGFzc29jaWF0ZWQgb3V0cHV0IGZpbGVzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIGRlcGxveWVkIG9udG8gdGhlIHRhcmdldCBtYWNoaW5lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gcGxhY2UgaW1hZ2VzIGFuZCBvdGhlciBhc3NvY2lhdGVkIG91dHB1dCBmaWxlcyB0aGF0IGFyZQorICAgICAgICAgICAgICAgICAgICByZWFkeSB0byBiZSBkZXBsb3llZCBvbnRvIHRoZSB0YXJnZXQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpcyBtYWNoaW5lLXNwZWNpZmljIGFzIGl0IGNvbnRhaW5zIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtNQUNISU5FfTwvZmlsZW5hbWU+IG5hbWUuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgZGlyZWN0b3J5IHJlc2lkZXMgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFzIDxmaWxlbmFtZT4ke0RFUExPWV9ESVJ9L2ltYWdlcy8ke01BQ0hJTkV9LzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgc3RydWN0dXJlIG9mIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnksIHNlZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWJ1aWxkJz5UaGUgQnVpbGQgRGlyZWN0b3J5IC0gPGZpbGVuYW1lPmJ1aWxkLzwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlsIG9uIHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naW1hZ2VzLWRldi1lbnZpcm9ubWVudCc+SW1hZ2VzPC9saW5rPiIgYW5kCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstZGV2LWVudmlyb25tZW50Jz5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBTREs8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERVBMT1lfRElSX0lQSyc+PGdsb3NzdGVybT5ERVBMT1lfRElSX0lQSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgREVQTE9ZX0RJUl9JUEtbZG9jXSA9ICJQb2ludHMgdG8gYSBJUEstc3BlY2lmaWMgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdG8gcGxhY2UgaW1hZ2VzLCBwYWNrYWdlcywgU0RLcyBhbmQgb3RoZXIgb3V0cHV0IGZpbGVzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gcGxhY2UgSVBLIHBhY2thZ2VzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZSBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGFwcGxpZXMgb25seSB3aGVuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgInBhY2thZ2VfaXBrIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIEJpdEJha2UgY29uZmlndXJhdGlvbiBmaWxlIGluaXRpYWxseSBkZWZpbmVzIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYXMgYSBzdWItZm9sZGVyIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUjwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBMT1lfRElSX0lQSyA9ICIke0RFUExPWV9ESVJ9L2lwayIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZV9pcGsnPjxmaWxlbmFtZT5wYWNrYWdlX2lwazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQTE9ZX0RJUl9JUEs8L2ZpbGVuYW1lPiB2YXJpYWJsZSB0byBtYWtlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX2lwayc+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfaXBrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgd3JpdGVzIElQSyBwYWNrYWdlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBmb2xkZXIuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBwYWNrYWdpbmcgd29ya3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERVBMT1lfRElSX1JQTSc+PGdsb3NzdGVybT5ERVBMT1lfRElSX1JQTTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgREVQTE9ZX0RJUl9SUE1bZG9jXSA9ICJQb2ludHMgdG8gYSBSUE0tc3BlY2lmaWMgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdG8gcGxhY2UgaW1hZ2VzLCBwYWNrYWdlcywgU0RLcyBhbmQgb3RoZXIgb3V0cHV0IGZpbGVzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gcGxhY2UgUlBNIHBhY2thZ2VzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZQorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGFwcGxpZXMgb25seSB3aGVuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgInBhY2thZ2VfcnBtIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIEJpdEJha2UgY29uZmlndXJhdGlvbiBmaWxlIGluaXRpYWxseSBkZWZpbmVzIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYXMgYSBzdWItZm9sZGVyIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUjwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBMT1lfRElSX1JQTSA9ICIke0RFUExPWV9ESVJ9L3JwbSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZV9ycG0nPjxmaWxlbmFtZT5wYWNrYWdlX3JwbTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQTE9ZX0RJUl9SUE08L2ZpbGVuYW1lPiB2YXJpYWJsZSB0byBtYWtlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX3JwbSc+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfcnBtPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgd3JpdGVzIFJQTSBwYWNrYWdlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBmb2xkZXIuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBwYWNrYWdpbmcgd29ya3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERVBMT1lfRElSX1RBUic+PGdsb3NzdGVybT5ERVBMT1lfRElSX1RBUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgREVQTE9ZX0RJUl9UQVJbZG9jXSA9ICJQb2ludHMgdG8gYSB0YXJiYWxsIGFyZWEgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRvIHBsYWNlIGltYWdlcywgcGFja2FnZXMsIFNES3MgYW5kIG90aGVyIG91dHB1dCBmaWxlcyB0aGF0IGFyZSByZWFkeSB0byBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIGFyZWEgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzCisgICAgICAgICAgICAgICAgICAgIHRvIHBsYWNlIHRhcmJhbGxzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZSBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGFwcGxpZXMgb25seSB3aGVuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgInBhY2thZ2VfdGFyIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIEJpdEJha2UgY29uZmlndXJhdGlvbiBmaWxlIGluaXRpYWxseSBkZWZpbmVzIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYXMgYSBzdWItZm9sZGVyIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUjwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBMT1lfRElSX1RBUiA9ICIke0RFUExPWV9ESVJ9L3RhciIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZV90YXInPjxmaWxlbmFtZT5wYWNrYWdlX3RhcjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQTE9ZX0RJUl9UQVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSB0byBtYWtlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX3Rhcic+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfdGFyPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgd3JpdGVzIFRBUiBwYWNrYWdlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBmb2xkZXIuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBwYWNrYWdpbmcgd29ya3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERVBMT1lESVInPjxnbG9zc3Rlcm0+REVQTE9ZRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERVBMT1lESVJbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIGRlcGxveSBjbGFzcywgdGhlIERFUExPWURJUiBwb2ludHMgdG8gYSB0ZW1wb3Jhcnkgd29yayBhcmVhIGZvciBkZXBsb3llZCBmaWxlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRlcGxveSc+PGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhlIDxmaWxlbmFtZT5ERVBMT1lESVI8L2ZpbGVuYW1lPiBwb2ludHMgdG8gYQorICAgICAgICAgICAgICAgICAgICB0ZW1wb3Jhcnkgd29yayBhcmVhIGZvciBkZXBsb3llZCBmaWxlcyB0aGF0IGlzIHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+IGNsYXNzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVQTE9ZRElSID0gIiR7V09SS0RJUn0vZGVwbG95LSR7PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz59IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFJlY2lwZXMgaW5oZXJpdGluZyB0aGUgPGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBjb3B5IGZpbGVzIHRvIGJlIGRlcGxveWVkIGludG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFUExPWURJUjwvZmlsZW5hbWU+LCBhbmQgdGhlIGNsYXNzIHdpbGwgdGFrZQorICAgICAgICAgICAgICAgICAgICBjYXJlIG9mIGNvcHlpbmcgdGhlbSBpbnRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX0lNQUdFJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9JTUFHRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhZnRlcndhcmRzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFU0NSSVBUSU9OJz48Z2xvc3N0ZXJtPkRFU0NSSVBUSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERVNDUklQVElPTltkb2NdID0gIlRoZSBwYWNrYWdlIGRlc2NyaXB0aW9uIHVzZWQgYnkgcGFja2FnZSBtYW5hZ2Vycy4gSWYgbm90IHNldCwgREVTQ1JJUFRJT04gdGFrZXMgdGhlIHZhbHVlIG9mIHRoZSBTVU1NQVJZIHZhcmlhYmxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBwYWNrYWdlIGRlc2NyaXB0aW9uIHVzZWQgYnkgcGFja2FnZSBtYW5hZ2Vycy4KKyAgICAgICAgICAgICAgICAgICAgSWYgbm90IHNldCwgPGZpbGVuYW1lPkRFU0NSSVBUSU9OPC9maWxlbmFtZT4gdGFrZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIHZhbHVlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1VNTUFSWSc+PGZpbGVuYW1lPlNVTU1BUlk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTS19TSUdOQVRVUkUnPjxnbG9zc3Rlcm0+RElTS19TSUdOQVRVUkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERJU0tfU0lHTkFUVVJFW2RvY10gPSAiQSAzMi1iaXQgTUJSIGRpc2sgc2lnbmF0dXJlIHVzZWQgYnkgZGlyZWN0ZGlzayBpbWFnZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSAzMi1iaXQgTUJSIGRpc2sgc2lnbmF0dXJlIHVzZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcmVjdGRpc2s8L2ZpbGVuYW1lPiBpbWFnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBzaWduYXR1cmUgaXMgc2V0IHRvIGFuIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIHJhbmRvbSB2YWx1ZSB0aGF0IGFsbG93cyB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUgYSBib290IGxvYWRlci4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBvdmVycmlkZSB0aGUgc2lnbmF0dXJlIGluIHRoZSBpbWFnZSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgYnkgc2V0dGluZyA8ZmlsZW5hbWU+RElTS19TSUdOQVRVUkU8L2ZpbGVuYW1lPiB0byBhbgorICAgICAgICAgICAgICAgICAgICA4LWRpZ2l0IGhleCBzdHJpbmcuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtaWdodCB3YW50IHRvIG92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ESVNLX1NJR05BVFVSRTwvZmlsZW5hbWU+IGlmIHlvdSB3YW50IHRoZSBkaXNrCisgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSB0byByZW1haW4gY29uc3RhbnQgYmV0d2VlbiBpbWFnZSBidWlsZHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNpbmcgTGludXggMy44IG9yIGxhdGVyLCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTS19TSUdOQVRVUkU8L2ZpbGVuYW1lPiB0byBzcGVjaWZ5IHRoZSByb290CisgICAgICAgICAgICAgICAgICAgIGJ5IFVVSUQgdG8gYWxsb3cgdGhlIGtlcm5lbCB0byBsb2NhdGUgdGhlIHJvb3QgZGV2aWNlCisgICAgICAgICAgICAgICAgICAgIGV2ZW4gaWYgdGhlIGRldmljZSBuYW1lIGNoYW5nZXMgZHVlIHRvIGRpZmZlcmVuY2VzIGluCisgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5TWVNMSU5VWF9ST09UPC9maWxlbmFtZT4gaXMgc2V0CisgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1lTTElOVVhfUk9PVCA9ICJyb290PS9kZXYvc2RhMiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgY2FuIGNoYW5nZSB0aGlzIHRvIGxvY2F0ZSB0aGUgcm9vdCBkZXZpY2UKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIGRpc2sgc2lnbmF0dXJlIGluc3RlYWQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1lTTElOVVhfUk9PVCA9ICJyb290PVBBUlRVVUlEPSR7RElTS19TSUdOQVRVUkV9LTAyIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzIHByZXZpb3VzbHkgbWVudGlvbmVkLCBpdCBpcyBwb3NzaWJsZSB0byBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ESVNLX1NJR05BVFVSRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRvIGEgZml4ZWQKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgaWYgeW91IGRvIG5vdCB3YW50IDxmaWxlbmFtZT5zeXNsaW51eC5jZmc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjaGFuZ2luZyBmb3IgZWFjaCBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IG1pZ2h0IGZpbmQgdGhpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byB1cGdyYWRlIHRoZQorICAgICAgICAgICAgICAgICAgICByb290IGZpbGVzeXN0ZW0gb24gYSBkZXZpY2Ugd2l0aG91dCBoYXZpbmcgdG8gcmVjcmVhdGUgb3IKKyAgICAgICAgICAgICAgICAgICAgbW9kaWZ5IHRoZSBtYXN0ZXIgYm9vdCByZWNvcmQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTVFJPJz48Z2xvc3N0ZXJtPkRJU1RSTzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPW2RvY10gPSAiVGhlIHNob3J0IG5hbWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gSWYgdGhlIHZhcmlhYmxlIGlzIGJsYW5rLCBtZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mIHdpbGwgYmUgdXNlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgc2hvcnQgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGNvcnJlc3BvbmRzIHRvIGEgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSB3aG9zZSByb290IG5hbWUgaXMgdGhlIHNhbWUgYXMgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlJ3MgYXJndW1lbnQgYW5kIHdob3NlIGZpbGVuYW1lIGV4dGVuc2lvbiBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgUG9reSBkaXN0cmlidXRpb24gaXMgbmFtZWQgPGZpbGVuYW1lPnBva3kuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCByZXNpZGVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mL2Rpc3RybzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZgorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaXRoaW4gdGhhdCA8ZmlsZW5hbWU+cG9reS5jb25mPC9maWxlbmFtZT4gZmlsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBzZXQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBESVNUUk8gPSAicG9reSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgbG9jYXRlZCBpbiBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2Rpc3RybzwvZmlsZW5hbWU+IGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbnMgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgZm9yIDxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPiBtdXN0IG5vdCBjb250YWluCisgICAgICAgICAgICAgICAgICAgIHNwYWNlcywgYW5kIGlzIHR5cGljYWxseSBhbGwgbG93ZXItY2FzZS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgPGZpbGVuYW1lPkRJU1RSTzwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIGJsYW5rLCBhIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgb2YgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBhcmUgdXNlZCwgd2hpY2ggYXJlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL2Rpc3Ryby9kZWZhdWx0c2V0dXAuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBhbHNvIGluIHRoZSBTb3VyY2UgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTVFJPX0NPREVOQU1FJz48Z2xvc3N0ZXJtPkRJU1RST19DT0RFTkFNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPX0NPREVOQU1FW2RvY10gPSAiU3BlY2lmaWVzIGEgY29kZW5hbWUgZm9yIHRoZSBkaXN0cmlidXRpb24gYmVpbmcgYnVpbHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgY29kZW5hbWUgZm9yIHRoZSBkaXN0cmlidXRpb24gYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTVFJPX0VYVFJBX1JERVBFTkRTJz48Z2xvc3N0ZXJtPkRJU1RST19FWFRSQV9SREVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPX0VYVFJBX1JERVBFTkRTW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBkaXN0cm8tc3BlY2lmaWMgcGFja2FnZXMgdG8gYWRkIHRvIGFsbCBpbWFnZXMuIFRoZSB2YXJpYWJsZSBvbmx5IGFwcGxpZXMgdG8gdGhlIGltYWdlcyB0aGF0IGluY2x1ZGUgcGFja2FnZWdyb3VwLWJhc2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBkaXN0cm8tc3BlY2lmaWMgcGFja2FnZXMgdG8gYWRkIHRvIGFsbCBpbWFnZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgdGFrZXMgYWZmZWN0IHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1iYXNlPC9maWxlbmFtZT4gc28gdGhlCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIG9ubHkgcmVhbGx5IGFwcGxpZXMgdG8gdGhlIG1vcmUgZnVsbC1mZWF0dXJlZAorICAgICAgICAgICAgICAgICAgICBpbWFnZXMgdGhhdCBpbmNsdWRlIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtYmFzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIHRvIGtlZXAgZGlzdHJvIHBvbGljeSBvdXQgb2YKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJpYyBpbWFnZXMuCisgICAgICAgICAgICAgICAgICAgIEFzIHdpdGggYWxsIG90aGVyIGRpc3RybyB2YXJpYWJsZXMsIHlvdSBzZXQgdGhpcyB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZGlzdHJvIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTJz48Z2xvc3N0ZXJtPkRJU1RST19FWFRSQV9SUkVDT01NRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBkaXN0cm8tc3BlY2lmaWMgcGFja2FnZXMgdG8gYWRkIHRvIGFsbCBpbWFnZXMgaWYgdGhlIHBhY2thZ2VzIGV4aXN0LiBUaGUgbGlzdCBvZiBwYWNrYWdlcyBhcmUgYXV0b21hdGljYWxseSBpbnN0YWxsZWQgYnV0IHlvdSBjYW4gcmVtb3ZlIHRoZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBkaXN0cm8tc3BlY2lmaWMgcGFja2FnZXMgdG8gYWRkIHRvIGFsbCBpbWFnZXMKKyAgICAgICAgICAgICAgICAgICAgaWYgdGhlIHBhY2thZ2VzIGV4aXN0LgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFja2FnZXMgbWlnaHQgbm90IGV4aXN0IG9yIGJlIGVtcHR5IChlLmcuIGtlcm5lbCBtb2R1bGVzKS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgb2YgcGFja2FnZXMgYXJlIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkIGJ1dCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgIHJlbW92ZSB0aGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGdsb3NzdGVybT5ESVNUUk9fRkVBVFVSRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERJU1RST19GRUFUVVJFU1tkb2NdID0gIlRoZSBmZWF0dXJlcyBlbmFibGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzb2Z0d2FyZSBzdXBwb3J0IHlvdSB3YW50IGluIHlvdXIgZGlzdHJpYnV0aW9uIGZvcgorICAgICAgICAgICAgICAgICAgICB2YXJpb3VzIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgZGVmaW5lIHlvdXIgZGlzdHJpYnV0aW9uIGZlYXR1cmVzIGluIHRoZSBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiBtb3N0IGNhc2VzLCB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBhIGZlYXR1cmUgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+IGlzIHRyYW5zbGF0ZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlIG9wdGlvbiBzdXBwbGllZCB0byB0aGUgY29uZmlndXJlIHNjcmlwdAorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBmb3IgcmVjaXBlcyB0aGF0IG9wdGlvbmFsbHkgc3VwcG9ydCB0aGUgZmVhdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHNwZWNpZnlpbmcgIngxMSIgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+LCBjYXVzZXMKKyAgICAgICAgICAgICAgICAgICAgZXZlcnkgcGllY2Ugb2Ygc29mdHdhcmUgYnVpbHQgZm9yIHRoZSB0YXJnZXQgdGhhdCBjYW4KKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxseSBzdXBwb3J0IFgxMSB0byBoYXZlIGl0cyBYMTEgc3VwcG9ydCBlbmFibGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUd28gbW9yZSBleGFtcGxlcyBhcmUgQmx1ZXRvb3RoIGFuZCBORlMgc3VwcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mIGZlYXR1cmVzIHRoYXQgc2hpcHMgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBhbmQgdGhhdCB5b3UgY2FuIHByb3ZpZGUgd2l0aCB0aGlzIHZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtZmVhdHVyZXMtZGlzdHJvJz5EaXN0cm8gRmVhdHVyZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURJU1RST19GRUFUVVJFU19CQUNLRklMTCc+PGdsb3NzdGVybT5ESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTEw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERJU1RST19GRUFUVVJFU19CQUNLRklMTFtkb2NdID0gIkZlYXR1cmVzIHRvIGJlIGFkZGVkIHRvIERJU1RST19GRUFUVVJFUyBpZiBub3QgYWxzbyBwcmVzZW50IGluIERJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVELiBUaGlzIHZhcmlhYmxlIGlzIHNldCBpbiB0aGUgbWV0YS9jb25mL2JpdGJha2UuY29uZiBmaWxlIGFuZCBpdCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlci1jb25maWd1cmFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRmVhdHVyZXMgdG8gYmUgYWRkZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPkRJU1RST19GRUFUVVJFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgYWxzbyBwcmVzZW50IGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQnPkRJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9saW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHNldCBpbiB0aGUgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlci1jb25maWd1cmFibGUuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGJlc3QgdG8ganVzdCByZWZlcmVuY2UgdGhlIHZhcmlhYmxlIHRvIHNlZSB3aGljaCBkaXN0cm8gZmVhdHVyZXMgYXJlCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGJhY2tmaWxsZWQgZm9yIGFsbCBkaXN0cm8gY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgPGxpbmsgbGlua2VuZD0ncmVmLWZlYXR1cmVzLWJhY2tmaWxsJz5GZWF0dXJlIGJhY2tmaWxsaW5nPC9saW5rPiBzZWN0aW9uIGZvcgorICAgICAgICAgICAgICAgICAgICBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEJz48Z2xvc3N0ZXJtPkRJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRFtkb2NdID0gIkZlYXR1cmVzIGZyb20gRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMIHRoYXQgc2hvdWxkIG5vdCBiZSBiYWNrZmlsbGVkIChpLmUuIGFkZGVkIHRvIERJU1RST19GRUFUVVJFUykgZHVyaW5nIHRoZSBidWlsZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGZWF0dXJlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMJz5ESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTEw8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgbm90IGJlIGJhY2tmaWxsZWQgKGkuZS4gYWRkZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPkRJU1RST19GRUFUVVJFUzwvbGluaz48L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0ncmVmLWZlYXR1cmVzLWJhY2tmaWxsJz5GZWF0dXJlIEJhY2tmaWxsaW5nPC9saW5rPiIgc2VjdGlvbiBmb3IKKyAgICAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk9fRkVBVFVSRVNfREVGQVVMVCc+PGdsb3NzdGVybT5ESVNUUk9fRkVBVFVSRVNfREVGQVVMVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPX0ZFQVRVUkVTX0RFRkFVTFRbZG9jXSA9ICJQcm92aWRlcyB0aGUgZGVmYXVsdCBsaXN0IG9mIGRpc3RybyBmZWF0dXJlcyB3aXRoIHRoZSBleGNlcHRpb24gb2YgYW55IGxpYmMtc3BlY2lmaWMgZmVhdHVyZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBjb252ZW5pZW5jZSB2YXJpYWJsZSB0aGF0IGdpdmVzIHlvdSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICBsaXN0IG9mIGRpc3RybyBmZWF0dXJlcyB3aXRoIHRoZSBleGNlcHRpb24gb2YgYW55CisgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHNwZWNpZmljIHRvIHRoZSBDIGxpYnJhcnkKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5saWJjPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGNyZWF0aW5nIGEgY3VzdG9tIGRpc3RyaWJ1dGlvbiwgeW91IG1pZ2h0IGZpbmQgaXQKKyAgICAgICAgICAgICAgICAgICAgdXNlZnVsIHRvIGJlIGFibGUgdG8gcmV1c2UgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvcHRpb25zIHdpdGhvdXQgdGhlIG5lZWQgdG8gd3JpdGUgb3V0IHRoZSBmdWxsIHNldC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgdXNlcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTX0RFRkFVTFQ8L2ZpbGVuYW1lPiBmcm9tIGEKKyAgICAgICAgICAgICAgICAgICAgY3VzdG9tIGRpc3RybyBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRElTVFJPX0ZFQVRVUkVTID89ICIke0RJU1RST19GRUFUVVJFU19ERUZBVUxUfSAke0RJU1RST19GRUFUVVJFU19MSUJDfSBteWZlYXR1cmUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk9fRkVBVFVSRVNfTElCQyc+PGdsb3NzdGVybT5ESVNUUk9fRkVBVFVSRVNfTElCQzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPX0ZFQVRVUkVTX0xJQkNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgZGlzdHJvIGZlYXR1cmVzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBDIGxpYnJhcnkgKGxpYmMpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgY29udmVuaWVuY2UgdmFyaWFibGUgdGhhdCBzcGVjaWZpZXMgdGhlIGxpc3Qgb2YgZGlzdHJvCisgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBDIGxpYnJhcnkKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5saWJjPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHRoZXNlIGZlYXR1cmVzIGFyZSBwcmVmaXhlZCB3aXRoICJsaWJjLSIgYW5kCisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgYXQgZHVyaW5nIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIEMgbGlicmFyeSBpdHNlbGYuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTVFJPX05BTUUnPjxnbG9zc3Rlcm0+RElTVFJPX05BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERJU1RST19OQU1FW2RvY10gPSAiVGhlIGxvbmcgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb25nIG5hbWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk9fVkVSU0lPTic+PGdsb3NzdGVybT5ESVNUUk9fVkVSU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPX1ZFUlNJT05bZG9jXSA9ICJUaGUgdmVyc2lvbiBvZiB0aGUgZGlzdHJpYnV0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2ZXJzaW9uIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTVFJPT1ZFUlJJREVTJz48Z2xvc3N0ZXJtPkRJU1RST09WRVJSSURFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPT1ZFUlJJREVTW2RvY10gPSAiTGlzdHMgb3ZlcnJpZGVzIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IGRpc3RyaWJ1dGlvbi4gQnkgZGVmYXVsdCwgdGhlIHZhcmlhYmxlIGxpc3QgaW5jbHVkZXMgdGhlIHZhbHVlIG9mIHRoZSBESVNUUk8gdmFyaWFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBsaXN0cyBvdmVycmlkZXMgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgdmFyaWFibGUgbGlzdCBpbmNsdWRlcyB0aGUgdmFsdWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRElTVFJPJz5ESVNUUk88L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZXh0ZW5kIHRoZSB2YXJpYWJsZSB0byBhcHBseSBhbnkgdmFyaWFibGUgb3ZlcnJpZGVzCisgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IGFzIHBhcnQgb2YgdGhlIGRpc3RyaWJ1dGlvbiBhbmQgYXJlIG5vdAorICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGluIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgIHNvbWUgb3RoZXIgbWVhbnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRExfRElSJz48Z2xvc3N0ZXJtPkRMX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRExfRElSW2RvY10gPSAiVGhlIGNlbnRyYWwgZG93bmxvYWQgZGlyZWN0b3J5IHVzZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gc3RvcmUgZG93bmxvYWRzLiBCeSBkZWZhdWx0LCB0aGUgZGlyZWN0b3J5IGlzICdkb3dubG9hZHMnIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNlbnRyYWwgZG93bmxvYWQgZGlyZWN0b3J5IHVzZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgdG8KKyAgICAgICAgICAgICAgICAgICAgc3RvcmUgZG93bmxvYWRzLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT4gZ2V0cyBmaWxlcworICAgICAgICAgICAgICAgICAgICBzdWl0YWJsZSBmb3IgbWlycm9yaW5nIGZvciBldmVyeXRoaW5nIGV4Y2VwdCBHaXQKKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0YXJiYWxscyBvZiBHaXQgcmVwb3NpdG9yaWVzLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMnPjxmaWxlbmFtZT5CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoaXMgZGlyZWN0b3J5IGJ5IGRlZmluaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT4gdmFyaWFibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBpcyBzZWxmLW1haW50YWluaW5nIGFuZCB5b3Ugc2hvdWxkIG5vdCBoYXZlCisgICAgICAgICAgICAgICAgICAgIHRvIHRvdWNoIGl0LgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgZGlyZWN0b3J5IGlzIDxmaWxlbmFtZT5kb3dubG9hZHM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjRExfRElSID89ICIke1RPUERJUn0vZG93bmxvYWRzIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgZG93bmxvYWQgZGlyZWN0b3J5LCBzaW1wbHkgcmVtb3ZlCisgICAgICAgICAgICAgICAgICAgIHRoZSBjb21tZW50IGZyb20gdGhlIGxpbmUgYW5kIHByb3ZpZGUgeW91ciBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIER1cmluZyBhIGZpcnN0IGJ1aWxkLCB0aGUgc3lzdGVtIGRvd25sb2FkcyBtYW55IGRpZmZlcmVudAorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgY29kZSB0YXJiYWxscyBmcm9tIHZhcmlvdXMgdXBzdHJlYW0gcHJvamVjdHMuCisgICAgICAgICAgICAgICAgICAgIERvd25sb2FkaW5nIGNhbiB0YWtlIGEgd2hpbGUsIHBhcnRpY3VsYXJseSBpZiB5b3VyIG5ldHdvcmsKKyAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBpcyBzbG93LgorICAgICAgICAgICAgICAgICAgICBUYXJiYWxscyBhcmUgYWxsIHN0b3JlZCBpbiB0aGUgZGlyZWN0b3J5IGRlZmluZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+IGFuZCB0aGUgYnVpbGQgc3lzdGVtIGxvb2tzIHRoZXJlCisgICAgICAgICAgICAgICAgICAgIGZpcnN0IHRvIGZpbmQgc291cmNlIHRhcmJhbGxzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gd2lwaW5nIGFuZCByZWJ1aWxkaW5nLCB5b3UgY2FuIHByZXNlcnZlIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB0byBzcGVlZCB1cCB0aGlzIHBhcnQgb2Ygc3Vic2VxdWVudAorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2FmZWx5IHNoYXJlIHRoaXMgZGlyZWN0b3J5IGJldHdlZW4gbXVsdGlwbGUgYnVpbGRzCisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBzYW1lIGRldmVsb3BtZW50IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgYnVpbGQgcHJvY2VzcyBnZXRzCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcyB3aGVuIHdvcmtpbmcgYmVoaW5kIGEgZmlyZXdhbGwgb3IgcHJveHkgc2VydmVyLAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhpcyBzcGVjaWZpYyBxdWVzdGlvbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2hvdy1kb2VzLXRoZS15b2N0by1wcm9qZWN0LW9idGFpbi1zb3VyY2UtY29kZS1hbmQtd2lsbC1pdC13b3JrLWJlaGluZC1teS1maXJld2FsbC1vci1wcm94eS1zZXJ2ZXInPkZBUTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRE9DX0NPTVBSRVNTJz48Z2xvc3N0ZXJtPkRPQ19DT01QUkVTUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRE9DX0NPTVBSRVNTW2RvY10gPSAiV2hlbiBpbmhlcml0aW5nIHRoZSBjb21wcmVzc19kb2MgY2xhc3MsIHRoaXMgdmFyaWFibGUgc2V0cyB0aGUgY29tcHJlc3Npb24gcG9saWN5IHVzZWQgd2hlbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjb21wcmVzc2VzIG1hbiBwYWdlcyBhbmQgaW5mbyBwYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWNvbXByZXNzX2RvYyc+PGZpbGVuYW1lPmNvbXByZXNzX2RvYzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzZXRzIHRoZSBjb21wcmVzc2lvbiBwb2xpY3kgdXNlZCB3aGVuCisgICAgICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNvbXByZXNzZXMgbWFuIHBhZ2VzIGFuZCBpbmZvCisgICAgICAgICAgICAgICAgICAgIHBhZ2VzLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHVzZWQgaXMgZ3ogKGd6aXApLgorICAgICAgICAgICAgICAgICAgICBPdGhlciBwb2xpY2llcyBhdmFpbGFibGUgYXJlIHh6IGFuZCBiejIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBwb2xpY2llcyBhbmQgb24gaG93IHRvIHVzZSB0aGlzCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBzZWUgdGhlIGNvbW1lbnRzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2NvbXByZXNzX2RvYy5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktZSc+PHRpdGxlPkU8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRUZJX1BST1ZJREVSJz48Z2xvc3N0ZXJtPkVGSV9QUk9WSURFUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRUZJX1BST1ZJREVSW2RvY10gPSAiV2hlbiBidWlsZGluZyBib290YWJsZSBpbWFnZXMgKGkuZS4gd2hlcmUgaGRkaW1nIG9yIHZtZGsgaXMgaW4gSU1BR0VfRlNUWVBFUyksIHRoZSBFRklfUFJPVklERVIgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBFRkkgYm9vdGxvYWRlciB0byB1c2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBib290YWJsZSBpbWFnZXMgKGkuZS4gd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmhkZGltZzwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT52bWRrPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+KSwKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5FRklfUFJPVklERVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBzcGVjaWZpZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIEVGSSBib290bG9hZGVyIHRvIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgImdydWItZWZpIiwgYnV0ICJndW1taWJvb3QiIGNhbiBiZSB1c2VkCisgICAgICAgICAgICAgICAgICAgIGluc3RlYWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZ3VtbWlib290Jz48ZmlsZW5hbWU+Z3VtbWlib290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT04nPjxnbG9zc3Rlcm0+RU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTltkb2NdID0gIkNvbnRyb2xzIHdoaWNoIGxvY2FsZXMgZm9yIGdsaWJjIGFyZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBidWlsZC4gVGhlIHZhcmlhYmxlIGlzIHVzZWZ1bCBpZiB0aGUgdGFyZ2V0IGRldmljZSBoYXMgNjRNYnl0ZXMgb2YgUkFNIG9yIGxlc3MuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUgdGhhdCBjb250cm9scyB3aGljaCBsb2NhbGVzIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPiBhcmUgZ2VuZXJhdGVkIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgKHVzZWZ1bCBpZiB0aGUgdGFyZ2V0IGRldmljZSBoYXMgNjRNYnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgb2YgUkFNIG9yIGxlc3MpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVSUl9SRVBPUlRfRElSJz48Z2xvc3N0ZXJtPkVSUl9SRVBPUlRfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFUlJfUkVQT1JUX0RJUltkb2NdID0gIldoZW4gdXNlZCB3aXRoIHRoZSByZXBvcnQtZXJyb3IgY2xhc3MsIHNwZWNpZmllcyB0aGUgcGF0aCB1c2VkIGZvciBzdG9yaW5nIHRoZSBkZWJ1ZyBmaWxlcyBjcmVhdGVkIGJ5IHRoZSBlcnJvciByZXBvcnRpbmcgdG9vbCwgd2hpY2ggYWxsb3dzIHlvdSB0byBzdWJtaXQgYnVpbGQgZXJyb3JzIHlvdSBlbmNvdW50ZXIgdG8gYSBjZW50cmFsIGRhdGFiYXNlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1yZXBvcnQtZXJyb3InPjxmaWxlbmFtZT5yZXBvcnQtZXJyb3I8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHNwZWNpZmllcyB0aGUgcGF0aCB1c2VkIGZvciBzdG9yaW5nIHRoZSBkZWJ1ZyBmaWxlcworICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZy10aGUtZXJyb3ItcmVwb3J0aW5nLXRvb2wnPmVycm9yIHJlcG9ydGluZyB0b29sPC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGFsbG93cyB5b3UgdG8gc3VibWl0IGJ1aWxkIGVycm9ycyB5b3UgZW5jb3VudGVyIHRvIGEKKyAgICAgICAgICAgICAgICAgICAgY2VudHJhbCBkYXRhYmFzZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTE9HX0RJUic+PGZpbGVuYW1lPkxPR19ESVI8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS9lcnJvci1yZXBvcnQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgPGZpbGVuYW1lPkVSUl9SRVBPUlRfRElSPC9maWxlbmFtZT4gdG8gdGhlIHBhdGgKKyAgICAgICAgICAgICAgICAgICAgeW91IHdhbnQgdGhlIGVycm9yIHJlcG9ydGluZyB0b29sIHRvIHN0b3JlIHRoZSBkZWJ1ZyBmaWxlcworICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVSUl9SRVBPUlRfRElSID0gIjxyZXBsYWNlYWJsZT5wYXRoPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FUlJPUl9RQSc+PGdsb3NzdGVybT5FUlJPUl9RQTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVJST1JfUUFbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHF1YWxpdHkgYXNzdXJhbmNlIGNoZWNrcyB3aG9zZSBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgYXMgZXJyb3JzIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcXVhbGl0eSBhc3N1cmFuY2UgY2hlY2tzIHdob3NlIGZhaWx1cmVzIGFyZQorICAgICAgICAgICAgICAgICAgICByZXBvcnRlZCBhcyBlcnJvcnMgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFlvdSBzZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgdGhlIGNoZWNrcyB5b3UgY2FuIGNvbnRyb2wgd2l0aCB0aGlzIHZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbnNhbmUnPjxmaWxlbmFtZT5pbnNhbmUuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWENMVURFX0ZST01fV09STEQnPjxnbG9zc3Rlcm0+RVhDTFVERV9GUk9NX1dPUkxEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWENMVURFX0ZST01fV09STERbZG9jXSA9ICJEaXJlY3RzIEJpdEJha2UgdG8gZXhjbHVkZSBhIHJlY2lwZSBmcm9tIHdvcmxkIGJ1aWxkcyAoaS5lLiBiaXRiYWtlIHdvcmxkKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEaXJlY3RzIEJpdEJha2UgdG8gZXhjbHVkZSBhIHJlY2lwZSBmcm9tIHdvcmxkIGJ1aWxkcyAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSB3b3JsZDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHdvcmxkIGJ1aWxkcywgQml0QmFrZSBsb2NhdGVzLCBwYXJzZXMgYW5kIGJ1aWxkcyBhbGwKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyBmb3VuZCBpbiBldmVyeSBsYXllciBleHBvc2VkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gZXhjbHVkZSBhIHJlY2lwZSBmcm9tIGEgd29ybGQgYnVpbGQgdXNpbmcgdGhpcyB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgc2V0IHRoZSB2YXJpYWJsZSB0byAiMSIgaW4gdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgUmVjaXBlcyBhZGRlZCB0byA8ZmlsZW5hbWU+RVhDTFVERV9GUk9NX1dPUkxEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbWF5IHN0aWxsIGJlIGJ1aWx0IGR1cmluZyBhIHdvcmxkIGJ1aWxkIGluIG9yZGVyIHRvIHNhdGlzZnkKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIG9mIG90aGVyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIEFkZGluZyBhIHJlY2lwZSB0byA8ZmlsZW5hbWU+RVhDTFVERV9GUk9NX1dPUkxEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb25seSBlbnN1cmVzIHRoYXQgdGhlIHJlY2lwZSBpcyBub3QgZXhwbGljaXRseSBhZGRlZAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgbGlzdCBvZiBidWlsZCB0YXJnZXRzIGluIGEgd29ybGQgYnVpbGQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhURU5EUEUnPjxnbG9zc3Rlcm0+RVhURU5EUEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVEVORFBFW2RvY10gPSAiVXNlZCB3aXRoIGZpbGUgYW5kIHBhdGhuYW1lcyB0byBjcmVhdGUgYSBwcmVmaXggZm9yIGEgcmVjaXBlJ3MgdmVyc2lvbiBiYXNlZCBvbiB0aGUgcmVjaXBlJ3MgUEUgdmFsdWUuIElmIFBFIGlzIHNldCBhbmQgZ3JlYXRlciB0aGFuIHplcm8gZm9yIGEgcmVjaXBlLCBFWFRFTkRQRSBiZWNvbWVzIHRoYXQgdmFsdWUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVXNlZCB3aXRoIGZpbGUgYW5kIHBhdGhuYW1lcyB0byBjcmVhdGUgYSBwcmVmaXggZm9yIGEgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiBiYXNlZCBvbiB0aGUgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBFJz48ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPjwvbGluaz4gdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+IGlzIHNldCBhbmQgZ3JlYXRlciB0aGFuIHplcm8gZm9yIGEgcmVjaXBlLAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPiBiZWNvbWVzIHRoYXQgdmFsdWUgKGUuZyBpZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPiBpcyBlcXVhbCB0byAiMSIgdGhlbiA8ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBiZWNvbWVzICIxXyIpLgorICAgICAgICAgICAgICAgICAgICBJZiBhIHJlY2lwZSdzIDxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+IGlzIG5vdCBzZXQgKHRoZSBkZWZhdWx0KSBvciBpcyBlcXVhbCB0bworICAgICAgICAgICAgICAgICAgICB6ZXJvLCA8ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPiBiZWNvbWVzICIiLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+U2VlIHRoZSA8bGluayBsaW5rZW5kPSd2YXItU1RBTVAnPjxmaWxlbmFtZT5TVEFNUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgYW4gZXhhbXBsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRFTkRQS0dWJz48Z2xvc3N0ZXJtPkVYVEVORFBLR1Y8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVEVORFBLR1ZbZG9jXSA9ICJUaGUgZnVsbCBwYWNrYWdlIHZlcnNpb24gc3BlY2lmaWNhdGlvbiBhcyBpdCBhcHBlYXJzIG9uIHRoZSBmaW5hbCBwYWNrYWdlcyBwcm9kdWNlZCBieSBhIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZnVsbCBwYWNrYWdlIHZlcnNpb24gc3BlY2lmaWNhdGlvbiBhcyBpdCBhcHBlYXJzIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICBmaW5hbCBwYWNrYWdlcyBwcm9kdWNlZCBieSBhIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlJ3MgdmFsdWUgaXMgbm9ybWFsbHkgdXNlZCB0byBmaXggYSBydW50aW1lCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgdG8gdGhlIGV4YWN0IHNhbWUgdmVyc2lvbiBvZiBhbm90aGVyIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHNhbWUgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJERVBFTkRTXyR7UE59LWFkZGl0aW9uYWwtbW9kdWxlID0gIiR7UE59ICg9ICR7RVhURU5EUEtHVn0pIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcHMgYXJlIGludGVuZGVkIHRvIGZvcmNlIHRoZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG1hbmFnZXIgdG8gdXBncmFkZSB0aGVzZSB0eXBlcyBvZiBwYWNrYWdlcyBpbgorICAgICAgICAgICAgICAgICAgICBsb2NrLXN0ZXAuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhURVJOQUxfS0VSTkVMX1RPT0xTJz48Z2xvc3N0ZXJtPkVYVEVSTkFMX0tFUk5FTF9UT09MUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhURVJOQUxfS0VSTkVMX1RPT0xTW2RvY10gPSAiSW5kaWNhdGVzIGtlcm5lbCB0b29scyBhcmUgZXh0ZXJuYWwgdG8gdGhlIHNvdXJjZSB0cmVlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0LCB0aGUgPGZpbGVuYW1lPkVYVEVSTkFMX0tFUk5FTF9UT09MUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluZGljYXRlcyB0aGF0IHRoZXNlIHRvb2xzIGFyZSBub3QgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSB0cmVlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGtlcm5lbCB0b29scyBhcmUgYXZhaWxhYmxlIGluIHRoZSB0cmVlLCB0aGV5IGFyZQorICAgICAgICAgICAgICAgICAgICBwcmVmZXJyZWQgb3ZlciBhbnkgZXh0ZXJuYWxseSBpbnN0YWxsZWQgdG9vbHMuCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhlIDxmaWxlbmFtZT5FWFRFUk5BTF9LRVJORUxfVE9PTFM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0ZWxscyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBwcmVmZXIKKyAgICAgICAgICAgICAgICAgICAgdGhlIGluc3RhbGxlZCBleHRlcm5hbCB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1rZXJuZWwteW9jdG8nPjxmaWxlbmFtZT5rZXJuZWwteW9jdG88L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgaW4gPGZpbGVuYW1lPm1ldGEvY2xhc3NlczwvZmlsZW5hbWU+IHRvIHNlZSBob3cKKyAgICAgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhURVJOQUxTUkMnPjxnbG9zc3Rlcm0+RVhURVJOQUxTUkM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVEVSTkFMU1JDW2RvY10gPSAiSWYgZXh0ZXJuYWxzcmMuYmJjbGFzcyBpcyBpbmhlcml0ZWQsIHRoaXMgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBzb3VyY2UgdHJlZSwgd2hpY2ggaXMgb3V0c2lkZSBvZiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWV4dGVybmFsc3JjJz48ZmlsZW5hbWU+ZXh0ZXJuYWxzcmM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBzb3VyY2UgdHJlZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgb3V0c2lkZSBvZiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXQsIHRoaXMgdmFyaWFibGUgc2V0cyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCBpcyB3aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gbG9jYXRlIHVucGFja2VkIHJlY2lwZSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4dGVybmFsc3JjLmJiY2xhc3M8L2ZpbGVuYW1lPiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZXh0ZXJuYWxzcmMnPjxmaWxlbmFtZT5leHRlcm5hbHNyYy5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZmluZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoaXMgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZGluZy1zb2Z0d2FyZS1mcm9tLWFuLWV4dGVybmFsLXNvdXJjZSc+QnVpbGRpbmcgU29mdHdhcmUgZnJvbSBhbiBFeHRlcm5hbCBTb3VyY2U8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhURVJOQUxTUkNfQlVJTEQnPjxnbG9zc3Rlcm0+RVhURVJOQUxTUkNfQlVJTEQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVEVSTkFMU1JDX0JVSUxEW2RvY10gPSAiSWYgZXh0ZXJuYWxzcmMuYmJjbGFzcyBpcyBpbmhlcml0ZWQsIHRoaXMgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIHJlY2lwZSdzIHNvdXJjZSBjb2RlIGlzIGJ1aWx0LCB3aGljaCBpcyBvdXRzaWRlIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZXh0ZXJuYWxzcmMnPjxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlJ3Mgc291cmNlIGNvZGUgaXMgYnVpbHQsIHdoaWNoIGlzIG91dHNpZGUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0LCB0aGlzIHZhcmlhYmxlIHNldHMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CJz48ZmlsZW5hbWU+QjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgd2hpY2ggaXMgd2hhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzCisgICAgICAgICAgICAgICAgICAgIHRvIGxvY2F0ZSB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXh0ZXJuYWxzcmMuYmJjbGFzczwvZmlsZW5hbWU+LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1leHRlcm5hbHNyYyc+PGZpbGVuYW1lPmV4dGVybmFsc3JjLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBmaW5kIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhpcyB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkaW5nLXNvZnR3YXJlLWZyb20tYW4tZXh0ZXJuYWwtc291cmNlJz5CdWlsZGluZyBTb2Z0d2FyZSBmcm9tIGFuIEV4dGVybmFsIFNvdXJjZTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRSQV9BVVRPUkVDT05GJz48Z2xvc3N0ZXJtPkVYVFJBX0FVVE9SRUNPTkY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVFJBX0FVVE9SRUNPTkZbZG9jXSA9ICJFeHRyYSBvcHRpb25zIHBhc3NlZCB0byB0aGUgYXV0b3JlY29uZiBjb21tYW5kLCB3aGljaCBpcyBleGVjdXRlZCBkdXJpbmcgZG9fY29uZmlndXJlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZvciByZWNpcGVzIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWF1dG90b29scyc+PGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgeW91IGNhbiB1c2UgPGZpbGVuYW1lPkVYVFJBX0FVVE9SRUNPTkY8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGV4dHJhIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9yZWNvbmY8L2ZpbGVuYW1lPiBjb21tYW5kIHRoYXQgaXMKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZWQgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzICItLWV4Y2x1ZGU9YXV0b3BvaW50Ii4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRSQV9JTUFHRV9GRUFUVVJFUyc+PGdsb3NzdGVybT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhUUkFfSU1BR0VfRkVBVFVSRVNbZG9jXSA9ICJUaGUgbGlzdCBvZiBhZGRpdGlvbmFsIGZlYXR1cmVzIHRvIGluY2x1ZGUgaW4gYW4gaW1hZ2UuIENvbmZpZ3VyZSB0aGlzIHZhcmlhYmxlIGluIHRoZSBjb25mL2xvY2FsLmNvbmYgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBhZGRpdGlvbmFsIGZlYXR1cmVzIHRvIGluY2x1ZGUgaW4gYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gbGlzdGluZyBtb3JlIHRoYW4gb25lIGZlYXR1cmUsIHNlcGFyYXRlIHRoZW0gd2l0aAorICAgICAgICAgICAgICAgICAgICBhIHNwYWNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHlvdSBjb25maWd1cmUgdGhpcyB2YXJpYWJsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIEFsdGhvdWdoIHlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgZnJvbSB3aXRoaW4gYSByZWNpcGUsCisgICAgICAgICAgICAgICAgICAgIGJlc3QgcHJhY3RpY2VzIGRpY3RhdGUgdGhhdCB5b3UgZG8gbm90LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGVuYWJsZSBwcmltYXJ5IGZlYXR1cmVzIGZyb20gd2l0aGluIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiBmZWF0dXJlcyB5b3UgY2FuIGFkZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorImRiZy1wa2dzIiAtIEFkZHMgLWRiZyBwYWNrYWdlcyBmb3IgYWxsIGluc3RhbGxlZCBwYWNrYWdlcworICAgICAgICAgICAgIGluY2x1ZGluZyBzeW1ib2wgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZyBhbmQKKyAgICAgICAgICAgICBwcm9maWxpbmcuCisKKyJkZWJ1Zy10d2Vha3MiIC0gTWFrZXMgYW4gaW1hZ2Ugc3VpdGFibGUgZm9yIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGFsbG93cyByb290IGxvZ2lucyB3aXRob3V0CisgICAgICAgICAgICAgICAgIHBhc3N3b3JkcyBhbmQgZW5hYmxlcyBwb3N0LWluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgICBsb2dnaW5nLiBTZWUgdGhlICdhbGxvdy1lbXB0eS1wYXNzd29yZCcKKyAgICAgICAgICAgICAgICAgYW5kICdwb3N0LWluc3RhbGwtbG9nZ2luZycgZmVhdHVyZXMgaW4KKyAgICAgICAgICAgICAgICAgdGhlICI8bGluayBsaW5rZW5kPSdyZWYtZmVhdHVyZXMtaW1hZ2UnPkltYWdlIEZlYXR1cmVzPC9saW5rPiIgc2VjdGlvbiBmb3IKKyAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi4KKworImRldi1wa2dzIiAtIEFkZHMgLWRldiBwYWNrYWdlcyBmb3IgYWxsIGluc3RhbGxlZCBwYWNrYWdlcy4KKyAgICAgICAgICAgICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBkZXZlbG9wIGFnYWluc3QKKyAgICAgICAgICAgICB0aGUgbGlicmFyaWVzIGluIHRoZSBpbWFnZS4KKworInJlYWQtb25seS1yb290ZnMiIC0gQ3JlYXRlcyBhbiBpbWFnZSB3aG9zZSByb290CisgICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtIGlzIHJlYWQtb25seS4gU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NyZWF0aW5nLWEtcmVhZC1vbmx5LXJvb3QtZmlsZXN5c3RlbSc+Q3JlYXRpbmcgYSBSZWFkLU9ubHkgUm9vdCBGaWxlc3lzdGVtPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICBEZXZlbG9wbWVudCBNYW51YWwgZm9yIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uCisKKyJ0b29scy1kZWJ1ZyIgLSBBZGRzIGRlYnVnZ2luZyB0b29scyBzdWNoIGFzIGdkYiBhbmQKKyAgICAgICAgICAgICAgICBzdHJhY2UuCisKKyJ0b29scy1wcm9maWxlIiAtIEFkZHMgcHJvZmlsaW5nIHRvb2xzIHN1Y2ggYXMgb3Byb2ZpbGUsCisgICAgICAgICAgICAgICAgICBleG1hcCwgbHR0bmcgYW5kIHZhbGdyaW5kICh4ODYgb25seSkuCisKKyJ0b29scy1zZGsiIC0gQWRkcyBkZXZlbG9wbWVudCB0b29scyBzdWNoIGFzIGdjYywgbWFrZSwKKyAgICAgICAgICAgICAgcGtnY29uZmlnIGFuZCBzbyBmb3J0aC4KKworInRvb2xzLXRlc3RhcHBzIiAtIEFkZHMgdXNlZnVsIHRlc3RpbmcgdG9vbHMgc3VjaCBhcworICAgICAgICAgICAgICAgICAgIHRzX3ByaW50LCBhcGxheSwgYXJlY29yZCBhbmQgc28KKyAgICAgICAgICAgICAgICAgICBmb3J0aC4KKworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgaW1hZ2UgZmVhdHVyZXMgdGhhdCBzaGlwcyB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSJyZWYtZmVhdHVyZXMtaW1hZ2UiPkltYWdlIEZlYXR1cmVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBob3cgdG8gY3VzdG9taXplIHlvdXIgaW1hZ2UgYnkKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhpcyB2YXJpYWJsZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZS1pbWFnZWZlYXR1cmVzJz5DdXN0b21pemluZyBJbWFnZXMgVXNpbmcgQ3VzdG9tIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRSQV9JTUFHRUNNRCc+PGdsb3NzdGVybT5FWFRSQV9JTUFHRUNNRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhUUkFfSU1BR0VDTURbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgaW1hZ2UgY3JlYXRpb24gY29tbWFuZCB0aGF0IGhhcyBiZWVuIHNwZWNpZmllZCBpbiBJTUFHRV9DTUQuIFdoZW4gc2V0dGluZyB0aGlzIHZhcmlhYmxlLCB5b3Ugc2hvdWxkIHVzZSBhbiBvdmVycmlkZSBmb3IgdGhlIGFzc29jaWF0ZWQgdHlwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gY29tbWFuZCB0aGF0IGhhcyBiZWVuIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfQ01EJz48ZmlsZW5hbWU+SU1BR0VfQ01EPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNldHRpbmcgdGhpcyB2YXJpYWJsZSwgeW91IHNob3VsZAorICAgICAgICAgICAgICAgICAgICB1c2UgYW4gb3ZlcnJpZGUgZm9yIHRoZSBhc3NvY2lhdGVkIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBFWFRSQV9JTUFHRUNNRF9leHQzID89ICItaSA0MDk2IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhUUkFfSU1BR0VERVBFTkRTJz48Z2xvc3N0ZXJtPkVYVFJBX0lNQUdFREVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhUUkFfSU1BR0VERVBFTkRTW2RvY10gPSAiQSBsaXN0IG9mIHJlY2lwZXMgdG8gYnVpbGQgdGhhdCBkbyBub3QgcHJvdmlkZSBwYWNrYWdlcyBmb3IgaW5zdGFsbGluZyBpbnRvIHRoZSByb290IGZpbGVzeXN0ZW0uIFVzZSB0aGlzIHZhcmlhYmxlIHRvIGxpc3QgcmVjaXBlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBidWlsZCB0aGUgZmluYWwgaW1hZ2UsIGJ1dCBub3QgbmVlZGVkIGluIHRoZSByb290IGZpbGVzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHJlY2lwZXMgdG8gYnVpbGQgdGhhdCBkbyBub3QgcHJvdmlkZSBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBmb3IgaW5zdGFsbGluZyBpbnRvIHRoZSByb290IGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNvbWV0aW1lcyBhIHJlY2lwZSBpcyByZXF1aXJlZCB0byBidWlsZCB0aGUgZmluYWwgaW1hZ2UgYnV0IGlzIG5vdAorICAgICAgICAgICAgICAgICAgICBuZWVkZWQgaW4gdGhlIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5FWFRSQV9JTUFHRURFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZSB0bworICAgICAgICAgICAgICAgICAgICBsaXN0IHRoZXNlIHJlY2lwZXMgYW5kIHRodXMgc3BlY2lmeSB0aGUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICBBIHR5cGljYWwgZXhhbXBsZSBpcyBhIHJlcXVpcmVkIGJvb3Rsb2FkZXIgaW4gYSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBwYWNrYWdlcyB0byB0aGUgcm9vdCBmaWxlc3lzdGVtLCBzZWUgdGhlIHZhcmlvdXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPio8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+KjxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+UlJFQ09NTUVORFM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYVFJBX09FQ01BS0UnPjxnbG9zc3Rlcm0+RVhUUkFfT0VDTUFLRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhUUkFfT0VDTUFLRVtkb2NdID0gIkFkZGl0aW9uYWwgY21ha2Ugb3B0aW9ucy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIDxmaWxlbmFtZT5jbWFrZTwvZmlsZW5hbWU+IG9wdGlvbnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhUUkFfT0VDT05GJz48Z2xvc3N0ZXJtPkVYVFJBX09FQ09ORjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhUUkFfT0VDT05GW2RvY10gPSAiQWRkaXRpb25hbCBjb25maWd1cmUgc2NyaXB0IG9wdGlvbnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT4gc2NyaXB0IG9wdGlvbnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhUUkFfT0VNQUtFJz48Z2xvc3N0ZXJtPkVYVFJBX09FTUFLRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhUUkFfT0VNQUtFW2RvY10gPSAiQWRkaXRpb25hbCBHTlUgbWFrZSBvcHRpb25zLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWwgR05VIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gb3B0aW9ucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRSQV9PRVNDT05TJz48Z2xvc3N0ZXJtPkVYVFJBX09FU0NPTlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVFJBX09FU0NPTlNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBzY29ucyBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0byB0aGUgc2NvbnMgY29tbWFuZCBsaW5lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc2NvbnMnPjxmaWxlbmFtZT5zY29uczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjb25zPC9maWxlbmFtZT4gY29tbWFuZCBsaW5lLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYVFJBX1FNQUtFVkFSU19QT1NUJz48Z2xvc3N0ZXJtPkVYVFJBX1FNQUtFVkFSU19QT1NUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRSQV9RTUFLRVZBUlNfUE9TVFtkb2NdID0gIkNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0byBxbWFrZSB3aGVuIHRoZSBhcmd1bWVudHMgbmVlZCB0byBiZSBhZnRlciB0aGUgLnBybyBmaWxlIGxpc3Qgb24gdGhlIGNvbW1hbmQgbGluZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvciBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFtYWtlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIHZhcmlhYmxlIHdoZW4gdGhlIGFyZ3VtZW50cyBuZWVkIHRvIGJlIGFmdGVyIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnBybzwvZmlsZW5hbWU+IGZpbGUgbGlzdCBvbiB0aGUgY29tbWFuZCBsaW5lLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgd2l0aCByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcW1ha2UqJz48ZmlsZW5hbWU+cW1ha2VfYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBvciBvdGhlciBjbGFzc2VzIHRoYXQgaW5oZXJpdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cW1ha2VfYmFzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhUUkFfUU1BS0VWQVJTX1BSRSc+PGdsb3NzdGVybT5FWFRSQV9RTUFLRVZBUlNfUFJFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRSQV9RTUFLRVZBUlNfUFJFW2RvY10gPSAiQ29uZmlndXJhdGlvbiB2YXJpYWJsZXMgb3Igb3B0aW9ucyB5b3Ugd2FudCB0byBwYXNzIHRvIHFtYWtlIHdoZW4gdGhlIGFyZ3VtZW50cyBuZWVkIHRvIGJlIGJlZm9yZSB0aGUgLnBybyBmaWxlIGxpc3Qgb24gdGhlIGNvbW1hbmQgbGluZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvciBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFtYWtlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIHZhcmlhYmxlIHdoZW4gdGhlIGFyZ3VtZW50cyBuZWVkIHRvIGJlIGJlZm9yZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5wcm88L2ZpbGVuYW1lPiBmaWxlIGxpc3Qgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHdpdGggcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXFtYWtlKic+PGZpbGVuYW1lPnFtYWtlX2Jhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3Mgb3Igb3RoZXIgY2xhc3NlcyB0aGF0IGluaGVyaXQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFtYWtlX2Jhc2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRSQV9VU0VSU19QQVJBTVMnPjxnbG9zc3Rlcm0+RVhUUkFfVVNFUlNfUEFSQU1TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRSQV9VU0VSU19QQVJBTVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBleHRyYXVzZXJzIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHByb3ZpZGVzIGltYWdlIGxldmVsIHVzZXIgYW5kIGdyb3VwIG9wZXJhdGlvbnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1leHRyYXVzZXJzJz48ZmlsZW5hbWU+ZXh0cmF1c2VyczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBwcm92aWRlcyBpbWFnZSBsZXZlbCB1c2VyIGFuZCBncm91cAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGEgbW9yZSBnbG9iYWwgbWV0aG9kIG9mIHByb3ZpZGluZyB1c2VyIGFuZCBncm91cAorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGFzIGNvbXBhcmVkIHRvIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy11c2VyYWRkJz48ZmlsZW5hbWU+dXNlcmFkZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgd2hpY2ggdGllcyB1c2VyIGFuZCBncm91cCBjb25maWd1cmF0aW9ucyB0byBhCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNldCBsaXN0IG9mIGNvbW1hbmRzIHlvdSBjYW4gY29uZmlndXJlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RVhUUkFfVVNFUlNfUEFSQU1TPC9maWxlbmFtZT4gaXMgc2hvd24gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leHRyYXVzZXJzPC9maWxlbmFtZT4gY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGNvbW1hbmRzIG1hcCB0byB0aGUgbm9ybWFsIFVuaXggY29tbWFuZHMgb2YgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICAgbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBFWFRSQV9VU0VSU19QQVJBTVMgPSAiXAorICAgICAjIHVzZXJhZGQgLXAgJycgdGVzdGVyOyBcCisgICAgICMgZ3JvdXBhZGQgZGV2ZWxvcGVyczsgXAorICAgICAjIHVzZXJkZWwgbm9ib2R5OyBcCisgICAgICMgZ3JvdXBkZWwgLWcgdmlkZW87IFwKKyAgICAgIyBncm91cG1vZCAtZyAxMDIwIGRldmVsb3BlcnM7IFwKKyAgICAgIyB1c2VybW9kIC1zIC9iaW4vc2ggdGVzdGVyOyBcCisgICAgICMgIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWYnPjx0aXRsZT5GPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZFQVRVUkVfUEFDS0FHRVMnPjxnbG9zc3Rlcm0+RkVBVFVSRV9QQUNLQUdFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRkVBVFVSRV9QQUNLQUdFU1tkb2NdID0gIkRlZmluZXMgb25lIG9yIG1vcmUgcGFja2FnZXMgdG8gaW5jbHVkZSBpbiBhbiBpbWFnZSB3aGVuIGEgc3BlY2lmaWMgaXRlbSBpcyBpbmNsdWRlZCBpbiBJTUFHRV9GRUFUVVJFUy4gV2hlbiBzZXR0aW5nIHRoZSB2YWx1ZSwgRkVBVFVSRV9QQUNLQUdFUyBzaG91bGQgaGF2ZSB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSBpdGVtIGFzIGFuIG92ZXJyaWRlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgb25lIG9yIG1vcmUgcGFja2FnZXMgdG8gaW5jbHVkZSBpbiBhbiBpbWFnZSB3aGVuCisgICAgICAgICAgICAgICAgICAgIGEgc3BlY2lmaWMgaXRlbSBpcyBpbmNsdWRlZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXR0aW5nIHRoZSB2YWx1ZSwgPGZpbGVuYW1lPkZFQVRVUkVfUEFDS0FHRVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzaG91bGQgaGF2ZSB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSBpdGVtIGFzIGFuIG92ZXJyaWRlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRkVBVFVSRV9QQUNLQUdFU193aWRnZXQgPSAiPHJlcGxhY2VhYmxlPnBhY2thZ2UxPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnBhY2thZ2UyPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCBpZiAid2lkZ2V0IiB3ZXJlIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+LCA8cmVwbGFjZWFibGU+cGFja2FnZTE8L3JlcGxhY2VhYmxlPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnBhY2thZ2UyPC9yZXBsYWNlYWJsZT4gd291bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIGluc3RhbGxlZCBieSBmZWF0dXJlcyBkZWZpbmVkIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GRUFUVVJFX1BBQ0tBR0VTPC9maWxlbmFtZT4gYXJlIG9mdGVuIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoaWxlIHNpbWlsYXJseSBuYW1lZCwgeW91IHNob3VsZCBub3QgY29uZnVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GRUFUVVJFX1BBQ0tBR0VTPC9maWxlbmFtZT4gdmFyaWFibGUgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBncm91cHMsIHdoaWNoIGFyZSBkaXNjdXNzZWQgZWxzZXdoZXJlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZFRURfREVQTE9ZRElSX0JBU0VfVVJJJz48Z2xvc3N0ZXJtPkZFRURfREVQTE9ZRElSX0JBU0VfVVJJPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBGRUVEX0RFUExPWURJUl9CQVNFX1VSSVtkb2NdID0gIkFsbG93IHRvIHNlcnZlIGlwayBkZXBsb3kgZGlyZWN0b3J5IGFzIGFuIGFkIGhvYyBmZWVkIChib2dvZmVlZCkuIFNldCB0byBiYXNlIFVSTCBvZiB0aGUgZGlyZWN0b3J5IGFzIGV4cG9ydGVkIGJ5IEhUVFAuIFNldCBvZiBhZCBob2MgZmVlZCBjb25maWdzIHdpbGwgYmUgZ2VuZXJhdGVkIGluIHRoZSBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIGJhc2UgVVJMIG9mIHRoZSBzZXJ2ZXIgYW5kIGxvY2F0aW9uIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICB0aGUgZG9jdW1lbnQtcm9vdCB0aGF0IHByb3ZpZGVzIHRoZSBtZXRhZGF0YSBhbmQKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgcmVxdWlyZWQgYnkgT1BLRyB0byBzdXBwb3J0IHJ1bnRpbWUgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBtYW5hZ2VtZW50IG9mIElQSyBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRkVFRF9ERVBMT1lESVJfQkFTRV9VUkkgPSAiaHR0cDovLzE5Mi4xNjguNy4xL0JPQVJELWRpciIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgYXNzdW1lcyB5b3UgYXJlIHNlcnZpbmcgeW91ciBwYWNrYWdlcyBvdmVyCisgICAgICAgICAgICAgICAgICAgIEhUVFAgYW5kIHlvdXIgZGF0YWJhc2VzIGFyZSBsb2NhdGVkIGluIGEgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5CT0FSRC1kaXI8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgdW5kZXJuZWF0aAorICAgICAgICAgICAgICAgICAgICB5b3VyIEhUVFAgc2VydmVyJ3MgZG9jdW1lbnQtcm9vdC4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBnZW5lcmF0ZXMgYSBzZXQKKyAgICAgICAgICAgICAgICAgICAgb2YgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgeW91IGluIHlvdXIgdGFyZ2V0IHRoYXQgd29yaworICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBmZWVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZJTEVTJz48Z2xvc3N0ZXJtPkZJTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBGSUxFU1tkb2NdID0gIlRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIG9yIGZpbGVzIHRoYXQgYXJlIHBsYWNlZCBpbiBwYWNrYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBvZiBkaXJlY3RvcmllcyBvciBmaWxlcyB0aGF0IGFyZSBwbGFjZWQgaW4gcGFja2FnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSB0aGUgPGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT4gdmFyaWFibGUsIHByb3ZpZGUgYQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUgdGhhdCBpZGVudGlmaWVzIHRoZSByZXN1bHRpbmcgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlbiwgcHJvdmlkZSBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGZpbGVzIG9yIHBhdGhzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgaWRlbnRpZnkgdGhlIGZpbGVzIHlvdSB3YW50IGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdGluZyBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRklMRVNfJHtQTn0gKz0gIiR7YmluZGlyfS9teWRpcjEvICR7YmluZGlyfS9teWRpcjIvbXlmaWxlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyBwYXRocyBhcyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgaXQgaXMgZ29vZCBwcmFjdGljZQorICAgICAgICAgICAgICAgICAgICB0byB1c2UgYXBwcm9wcmlhdGUgcGF0aCB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB1c2UgPGZpbGVuYW1lPiR7c3lzY29uZmRpcn08L2ZpbGVuYW1lPiByYXRoZXIKKyAgICAgICAgICAgICAgICAgICAgdGhhbiA8ZmlsZW5hbWU+L2V0YzwvZmlsZW5hbWU+LCBvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiaW5kaXJ9PC9maWxlbmFtZT4gcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvYmluPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhIGxpc3Qgb2YgdGhlc2UgdmFyaWFibGVzIGF0IHRoZSB0b3Agb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiBzb21lIG9mIHRoZSBmaWxlcyB5b3UgcHJvdmlkZSB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcmUgZWRpdGFibGUgYW5kIHlvdQorICAgICAgICAgICAgICAgICAgICBrbm93IHRoZXkgc2hvdWxkIG5vdCBiZSBvdmVyd3JpdHRlbiBkdXJpbmcgdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHByb2Nlc3MgYnkgdGhlIFBhY2thZ2UgTWFuYWdlbWVudCBTeXN0ZW0gKFBNUyksIHlvdQorICAgICAgICAgICAgICAgICAgICBjYW4gaWRlbnRpZnkgdGhlc2UgZmlsZXMgc28gdGhhdCB0aGUgUE1TIHdpbGwgbm90CisgICAgICAgICAgICAgICAgICAgIG92ZXJ3cml0ZSB0aGVtLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DT05GRklMRVMnPjxmaWxlbmFtZT5DT05GRklMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB0aGVzZSBmaWxlcyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgUE1TLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRVNfU09MSUJTREVWJz48Z2xvc3N0ZXJtPkZJTEVTX1NPTElCU0RFVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRklMRVNfU09MSUJTREVWW2RvY10gPSAiRGVmaW5lcyB0aGUgZnVsbCBwYXRoIG5hbWUgb2YgdGhlIGRldmVsb3BtZW50IHN5bWJvbGljIGxpbmsgKHN5bWxpbmspIGZvciBzaGFyZWQgbGlicmFyaWVzIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgZmlsZSBzcGVjaWZpY2F0aW9uIHRvIG1hdGNoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TT0xJQlNERVYnPjxmaWxlbmFtZT5TT0xJQlNERVY8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCA8ZmlsZW5hbWU+RklMRVNfU09MSUJTREVWPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcyB0aGUgZnVsbCBwYXRoIG5hbWUgb2YgdGhlIGRldmVsb3BtZW50IHN5bWJvbGljIGxpbmsKKyAgICAgICAgICAgICAgICAgICAgKHN5bWxpbmspIGZvciBzaGFyZWQgbGlicmFyaWVzIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgc3RhdGVtZW50IGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBzaG93cyBob3cgaXQgaXMgc2V0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTX1NPTElCU0RFViA/PSAiJHtiYXNlX2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSAke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZJTEVTRVhUUkFQQVRIUyc+PGdsb3NzdGVybT5GSUxFU0VYVFJBUEFUSFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEZJTEVTRVhUUkFQQVRIU1tkb2NdID0gIkV4dGVuZHMgdGhlIHNlYXJjaCBwYXRoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgd2hlbiBsb29raW5nIGZvciBmaWxlcyBhbmQgcGF0Y2hlcyBhcyBpdCBwcm9jZXNzZXMgcmVjaXBlcyBhbmQgYXBwZW5kIGZpbGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEV4dGVuZHMgdGhlIHNlYXJjaCBwYXRoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgd2hlbiBsb29raW5nIGZvciBmaWxlcyBhbmQgcGF0Y2hlcyBhcyBpdCBwcm9jZXNzZXMgcmVjaXBlcworICAgICAgICAgICAgICAgICAgICBhbmQgYXBwZW5kIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBkaXJlY3RvcmllcyBCaXRCYWtlIHVzZXMgd2hlbiBpdCBwcm9jZXNzZXMKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyBhcmUgaW5pdGlhbGx5IGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZXh0ZW5kIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBieSB1c2luZyA8ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlc3QgcHJhY3RpY2VzIGRpY3RhdGUgdGhhdCB5b3UgYWNjb21wbGlzaCB0aGlzIGJ5IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPiBmcm9tIHdpdGhpbiBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGFuZCB0aGF0IHlvdSBwcmVwZW5kCisgICAgICAgICAgICAgICAgICAgIHBhdGhzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBhYm92ZSBleGFtcGxlLCB0aGUgYnVpbGQgc3lzdGVtIGZpcnN0IGxvb2tzIGZvciBmaWxlcworICAgICAgICAgICAgICAgICAgICBpbiBhIGRpcmVjdG9yeSB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPldoZW4gZXh0ZW5kaW5nIDxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlIHN1cmUgdG8gdXNlIHRoZSBpbW1lZGlhdGUgZXhwYW5zaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPjo9PC9maWxlbmFtZT4pIG9wZXJhdG9yLgorICAgICAgICAgICAgICAgICAgICAgICAgSW1tZWRpYXRlIGV4cGFuc2lvbiBtYWtlcyBzdXJlIHRoYXQgQml0QmFrZSBldmFsdWF0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1USElTRElSJz48ZmlsZW5hbWU+VEhJU0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgYXQgdGhlIHRpbWUgdGhlIGRpcmVjdGl2ZSBpcyBlbmNvdW50ZXJlZCByYXRoZXIgdGhhbiBhdAorICAgICAgICAgICAgICAgICAgICAgICAgc29tZSBsYXRlciB0aW1lIHdoZW4gZXhwYW5zaW9uIG1pZ2h0IHJlc3VsdCBpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBmaWxlcyB5b3UgbmVlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFsc28sIGluY2x1ZGUgdGhlIHRyYWlsaW5nIHNlcGFyYXRpbmcgY29sb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciBpZiB5b3UgYXJlIHByZXBlbmRpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdHJhaWxpbmcgY29sb24gY2hhcmFjdGVyIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGRpcmVjdGluZyBCaXRCYWtlIHRvIGV4dGVuZCB0aGUgcGF0aCBieSBwcmVwZW5kaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyB0byB0aGUgc2VhcmNoIHBhdGguPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW5vdGhlciBjb21tb24gdXNlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBidWlsZCBzeXN0ZW0gZXh0ZW5kcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIGluY2x1ZGUgYQorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgbmFtZWQgPGZpbGVuYW1lPmZpbGVzPC9maWxlbmFtZT4gdGhhdCBpcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGNvcnJlc3BvbmRpbmcgYXBwZW5kIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYSBmaW5hbCBleGFtcGxlIHRoYXQgc3BlY2lmaWNhbGx5IGFkZHMgdGhyZWUgcGF0aHM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gInBhdGhfMTpwYXRoXzI6cGF0aF8zOiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBwcmVwZW5kaW5nIHBhdGhzIGluIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlcywgeW91IGFsbG93IG11bHRpcGxlIGFwcGVuZCBmaWxlcyB0aGF0IHJlc2lkZSBpbgorICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgbGF5ZXJzIGJ1dCBhcmUgdXNlZCBmb3IgdGhlIHNhbWUgcmVjaXBlIHRvCisgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RseSBleHRlbmQgdGhlIHBhdGguCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRVNPVkVSUklERVMnPjxnbG9zc3Rlcm0+RklMRVNPVkVSUklERVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEZJTEVTT1ZFUlJJREVTW2RvY10gPSAiQSBzdWJzZXQgb2YgT1ZFUlJJREVTIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZm9yIGNyZWF0aW5nIEZJTEVTUEFUSC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIHN1YnNldCBvZiA8bGluayBsaW5rZW5kPSd2YXItT1ZFUlJJREVTJz48ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZm9yIGNyZWF0aW5nCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBvdmVycmlkZXMgYXJlIGhhbmRsZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsnPkJpdEJha2UgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+RklMRVNPVkVSUklERVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpcyBkZWZpbmVkIGFzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTT1ZFUlJJREVTID0gIiR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH06JHtNQUNISU5FT1ZFUlJJREVTfToke0RJU1RST09WRVJSSURFU30iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKworICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIERvIG5vdCBoYW5kLWVkaXQgdGhlIDxmaWxlbmFtZT5GSUxFU09WRVJSSURFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgbWF0Y2ggdXAgd2l0aCBleHBlY3RlZCBvdmVycmlkZXMgYW5kIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBpbiBhbiBleHBlY3RlZCBtYW5uZXIgYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZJTEVTUEFUSCc+PGdsb3NzdGVybT5GSUxFU1BBVEg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEZJTEVTUEFUSFtkb2NdID0gIlRoZSBkZWZhdWx0IHNldCBvZiBkaXJlY3RvcmllcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gc2VhcmNoaW5nIGZvciBwYXRjaGVzIGFuZCBmaWxlcy4gSXQgaXMgZGVmaW5lZCBpbiB0aGUgYmFzZS5iYmNsYXNzIGNsYXNzIGZvdW5kIGluIG1ldGEvY2xhc3NlcyBpbiB0aGUgU291cmNlIERpcmVjdG9yeS4gRG8gbm90IGhhbmQtZWRpdCB0aGUgRklMRVNQQVRIIHZhcmlhYmxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHNldCBvZiBkaXJlY3RvcmllcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICB1c2VzIHdoZW4gc2VhcmNoaW5nIGZvciBwYXRjaGVzIGFuZCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLCBCaXRCYWtlIHNlYXJjaGVzIGVhY2ggZGlyZWN0b3J5IGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPiBpbiB0aGUgc3BlY2lmaWVkIG9yZGVyIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgbG9va2luZyBmb3IgZmlsZXMgYW5kIHBhdGNoZXMgc3BlY2lmaWVkIGJ5IGVhY2gKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPiBVUkkgaW4gYSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIGRlZmluZWQgaW4gdGhlIDxmaWxlbmFtZT5iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBmb3VuZCBpbiA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU1BBVEggPSAiJHtAYmFzZV9zZXRfZmlsZXNwYXRoKFsiJHtGSUxFX0RJUk5BTUV9LyR7QlB9IiwgXAorICAgICAgICAiJHtGSUxFX0RJUk5BTUV9LyR7QlBOfSIsICIke0ZJTEVfRElSTkFNRX0vZmlsZXMiXSwgZCl9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgRG8gbm90IGhhbmQtZWRpdCB0aGUgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRoZSBidWlsZCBzeXN0ZW0gdG8gbG9vayBpbiBkaXJlY3RvcmllcworICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdHMsIGV4dGVuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZSBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIEJlIGF3YXJlIHRoYXQgdGhlIGRlZmF1bHQgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGRvIG5vdCBtYXAgdG8gZGlyZWN0b3JpZXMgaW4gY3VzdG9tIGxheWVycworICAgICAgICAgICAgICAgICAgICB3aGVyZSBhcHBlbmQgZmlsZXMgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgYXJlIHVzZWQuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRoZSBidWlsZCBzeXN0ZW0gdG8gZmluZCBwYXRjaGVzIG9yIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgcmVzaWRlIHdpdGggeW91ciBhcHBlbmQgZmlsZXMsIHlvdSBuZWVkIHRvIGV4dGVuZAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlIGJ5IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZJTEVTWVNURU1fUEVSTVNfVEFCTEVTJz48Z2xvc3N0ZXJtPkZJTEVTWVNURU1fUEVSTVNfVEFCTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBGSUxFU1lTVEVNX1BFUk1TX1RBQkxFU1tkb2NdID0gIkFsbG93cyB5b3UgdG8gZGVmaW5lIHlvdXIgb3duIGZpbGUgcGVybWlzc2lvbnMgc2V0dGluZ3MgdGFibGUgYXMgcGFydCBvZiB5b3VyIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBwYWNrYWdpbmcgcHJvY2Vzcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBbGxvd3MgeW91IHRvIGRlZmluZSB5b3VyIG93biBmaWxlIHBlcm1pc3Npb25zIHNldHRpbmdzIHRhYmxlIGFzIHBhcnQgb2YKKyAgICAgICAgICAgICAgICAgICAgeW91ciBjb25maWd1cmF0aW9uIGZvciB0aGUgcGFja2FnaW5nIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBuZWVkIGEgY29uc2lzdGVudCBzZXQgb2YgY3VzdG9tIHBlcm1pc3Npb25zIGZvcgorICAgICAgICAgICAgICAgICAgICBhIHNldCBvZiBncm91cHMgYW5kIHVzZXJzIGFjcm9zcyBhbiBlbnRpcmUgd29yayBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBiZXN0IHRvIGRvIHRoaXMgaW4gdGhlIHBhY2thZ2VzIHRoZW1zZWx2ZXMgYnV0IHRoaXMgaXMgbm90IGFsd2F5cworICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgPGZpbGVuYW1lPmZzLXBlcm1zLnR4dDwvZmlsZW5hbWU+LCB3aGljaAorICAgICAgICAgICAgICAgICAgICBpcyBsb2NhdGVkIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9maWxlczwvZmlsZW5hbWU+IGZvbGRlciBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgY3JlYXRlIHlvdXIgb3duIGZpbGUgcGVybWlzc2lvbnMgc2V0dGluZyB0YWJsZSwgeW91IHNob3VsZCBwbGFjZSBpdCBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIGxheWVyIG9yIHRoZSBkaXN0cm8ncyBsYXllci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRlZmluZSB0aGUgPGZpbGVuYW1lPkZJTEVTWVNURU1fUEVSTVNfVEFCTEVTPC9maWxlbmFtZT4gdmFyaWFibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwgdG8KKyAgICAgICAgICAgICAgICAgICAgcG9pbnQgdG8geW91ciBjdXN0b20gPGZpbGVuYW1lPmZzLXBlcm1zLnR4dDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgbW9yZSB0aGFuIGEgc2luZ2xlIGZpbGUgcGVybWlzc2lvbnMgc2V0dGluZyB0YWJsZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGhzIHlvdSBzcGVjaWZ5IHRvIHRoZXNlIGZpbGVzIG11c3QgYmUgZGVmaW5lZCB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBndWlkYW5jZSBvbiBob3cgdG8gY3JlYXRlIHlvdXIgb3duIGZpbGUgcGVybWlzc2lvbnMgc2V0dGluZ3MgdGFibGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgZXhhbWluZSB0aGUgZXhpc3RpbmcgPGZpbGVuYW1lPmZzLXBlcm1zLnR4dDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZPTlRfRVhUUkFfUkRFUEVORFMnPjxnbG9zc3Rlcm0+Rk9OVF9FWFRSQV9SREVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRk9OVF9FWFRSQV9SREVQRU5EU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIGZvbnRjYWNoZSBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgcnVudGltZSBkZXBlbmRlbmNpZXMgZm9yIGZvbnQgcGFja2FnZXMuIFRoaXMgdmFyaWFibGUgZGVmYXVsdHMgdG8gJ2ZvbnRjb25maWctdXRpbHMnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZm9udGNhY2hlJz48ZmlsZW5hbWU+Zm9udGNhY2hlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgcnVudGltZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZvbnQgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+Rk9OVF9FWFRSQV9SREVQRU5EUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byAiZm9udGNvbmZpZy11dGlscyIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRk9OVF9QQUNLQUdFUyc+PGdsb3NzdGVybT5GT05UX1BBQ0tBR0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBGT05UX1BBQ0tBR0VTW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgZm9udGNhY2hlIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGlkZW50aWZpZXMgcGFja2FnZXMgY29udGFpbmluZyBmb250IGZpbGVzIHRoYXQgbmVlZCB0byBiZSBjYWNoZWQgYnkgRm9udGNvbmZpZy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWZvbnRjYWNoZSc+PGZpbGVuYW1lPmZvbnRjYWNoZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBpZGVudGlmaWVzIHBhY2thZ2VzIGNvbnRhaW5pbmcgZm9udAorICAgICAgICAgICAgICAgICAgICBmaWxlcyB0aGF0IG5lZWQgdG8gYmUgY2FjaGVkIGJ5IEZvbnRjb25maWcuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+Zm9udGNhY2hlPC9maWxlbmFtZT4gY2xhc3MgYXNzdW1lcworICAgICAgICAgICAgICAgICAgICB0aGF0IGZvbnRzIGFyZSBpbiB0aGUgcmVjaXBlJ3MgbWFpbiBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgdmFyaWFibGUgaWYgZm9udHMgeW91IG5lZWQgYXJlIGluIGEgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBvdGhlciB0aGFuIHRoYXQgbWFpbiBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZVTExfT1BUSU1JWkFUSU9OJz48Z2xvc3N0ZXJtPkZVTExfT1BUSU1JWkFUSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBGVUxMX09QVElNSVpBVElPTltkb2NdPSAiVGhlIG9wdGlvbnMgdG8gcGFzcyBpbiBUQVJHRVRfQ0ZMQUdTIGFuZCBDRkxBR1Mgd2hlbiBjb21waWxpbmcgYW4gb3B0aW1pemVkIHN5c3RlbS4gVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAnLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucyAtZm9taXQtZnJhbWUtcG9pbnRlciAtZnJlbmFtZS1yZWdpc3RlcnMgLU8yJy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgb3B0aW9ucyB0byBwYXNzIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0NGTEFHUyc+VEFSR0VUX0NGTEFHUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1DRkxBR1MnPkNGTEFHUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB3aGVuIGNvbXBpbGluZyBhbiBvcHRpbWl6ZWQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvCisgICAgICAgICAgICAgICAgICAgICItTzIgLXBpcGUgJHtERUJVR19GTEFHU30iLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktZyc+PHRpdGxlPkc8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItR0RCJz48Z2xvc3N0ZXJtPkdEQjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgR0RCW2RvY10gPSAiVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgR05VIERlYnVnZ2VyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gdGhlIEdOVSBEZWJ1Z2dlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HSVRESVInPjxnbG9zc3Rlcm0+R0lURElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHSVRESVJbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IHdoZXJlIEdpdCBjbG9uZXMgd2lsbCBiZSBzdG9yZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBhIGxvY2FsIGNvcHkgb2YgYSBHaXQgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICBpcyBzdG9yZWQgd2hlbiBpdCBpcyBjbG9uZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItR0xJQkNfR0VORVJBVEVfTE9DQUxFUyc+PGdsb3NzdGVybT5HTElCQ19HRU5FUkFURV9MT0NBTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHTElCQ19HRU5FUkFURV9MT0NBTEVTW2RvY109ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgR0xJQkMgbG9jYWxlcyB0byBnZW5lcmF0ZSBzaG91bGQgeW91IG5vdCB3aXNoIGdlbmVyYXRlIGFsbCBMSUJDIGxvY2Fscywgd2hpY2ggY2FuIGJlIHRpbWUgY29uc3VtaW5nLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbGlzdCBvZiBHTElCQyBsb2NhbGVzIHRvIGdlbmVyYXRlIHNob3VsZCB5b3UKKyAgICAgICAgICAgICAgICAgICAgbm90IHdpc2ggZ2VuZXJhdGUgYWxsIExJQkMgbG9jYWxzLCB3aGljaCBjYW4gYmUgdGltZQorICAgICAgICAgICAgICAgICAgICBjb25zdW1pbmcuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZmljYWxseSByZW1vdmUgdGhlIGxvY2FsZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmVuX1VTLlVURi04PC9maWxlbmFtZT4sIHlvdSBtdXN0IHNldAorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0xJTkdVQVMnPjxmaWxlbmFtZT5JTUFHRV9MSU5HVUFTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZWx5LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IDxmaWxlbmFtZT5HTElCQ19HRU5FUkFURV9MT0NBTEVTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGFsbCBsb2NhbGVzIGFyZSBnZW5lcmF0ZWQuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIEdMSUJDX0dFTkVSQVRFX0xPQ0FMRVMgPSAiZW5fR0IuVVRGLTggZW5fVVMuVVRGLTgiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HUk9VUEFERF9QQVJBTSc+PGdsb3NzdGVybT5HUk9VUEFERF9QQVJBTTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgR1JPVVBBRERfUEFSQU1bZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSB1c2VyYWRkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBmb3IgYSBwYWNrYWdlIHdoYXQgcGFyYW1ldGVycyBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBncm91cGFkZCBjb21tYW5kIGlmIHlvdSB3aXNoIHRvIGFkZCBhIGdyb3VwIHRvIHRoZSBzeXN0ZW0gd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy11c2VyYWRkJz48ZmlsZW5hbWU+dXNlcmFkZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgZm9yIGEgcGFja2FnZSB3aGF0IHBhcmFtZXRlcnMgc2hvdWxkIGJlIHBhc3NlZAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgPGZpbGVuYW1lPmdyb3VwYWRkPC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICBpZiB5b3Ugd2lzaCB0byBhZGQgYSBncm91cCB0byB0aGUgc3lzdGVtIHdoZW4gdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgaXMgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUgPGZpbGVuYW1lPmRidXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAiLXIgbmV0ZGV2IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgc3RhbmRhcmQgTGludXggc2hlbGwgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z3JvdXBhZGQ8L2ZpbGVuYW1lPiwgc2VlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi84L2dyb3VwYWRkJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HUk9VUE1FTVNfUEFSQU0nPjxnbG9zc3Rlcm0+R1JPVVBNRU1TX1BBUkFNPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHUk9VUE1FTVNfUEFSQU1bZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSB1c2VyYWRkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBmb3IgYSBwYWNrYWdlIHdoYXQgcGFyYW1ldGVycyBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBncm91cG1lbXMgY29tbWFuZCBpZiB5b3Ugd2lzaCB0byBtb2RpZnkgdGhlIG1lbWJlcnMgb2YgYSBncm91cCB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVzZXJhZGQnPjxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBmb3IgYSBwYWNrYWdlIHdoYXQgcGFyYW1ldGVycyBzaG91bGQgYmUgcGFzc2VkCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+Z3JvdXBtZW1zPC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICBpZiB5b3Ugd2lzaCB0byBtb2RpZnkgdGhlIG1lbWJlcnMgb2YgYSBncm91cCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGlzIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBzdGFuZGFyZCBMaW51eCBzaGVsbCBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ncm91cG1lbXM8L2ZpbGVuYW1lPiwgc2VlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi84L2dyb3VwbWVtcyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItR1JVQl9HRlhTRVJJQUwnPjxnbG9zc3Rlcm0+R1JVQl9HRlhTRVJJQUw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEdSVUJfR0ZYU0VSSUFMW2RvY10gPSAiQ29uZmlndXJlcyB0aGUgR05VIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciAoR1JVQikgdG8gaGF2ZSBncmFwaGljcyBhbmQgc2VyaWFsIGluIHRoZSBib290IG1lbnUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJlcyB0aGUgR05VIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciAoR1JVQikgdG8gaGF2ZQorICAgICAgICAgICAgICAgICAgICBncmFwaGljcyBhbmQgc2VyaWFsIGluIHRoZSBib290IG1lbnUuCisgICAgICAgICAgICAgICAgICAgIFNldCB0aGlzIHZhcmlhYmxlIHRvICIxIiBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gb3IgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBlbmFibGUgZ3JhcGhpY3MgYW5kIHNlcmlhbAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgbWVudS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ncnViLWVmaSc+PGZpbGVuYW1lPmdydWItZWZpPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIHZhcmlhYmxlIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItR1JVQl9PUFRTJz48Z2xvc3N0ZXJtPkdSVUJfT1BUUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgR1JVQl9PUFRTW2RvY10gPSAiQWRkaXRpb25hbCBvcHRpb25zIHRvIGFkZCB0byB0aGUgR05VIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciAoR1JVQikgY29uZmlndXJhdGlvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIG9wdGlvbnMgdG8gYWRkIHRvIHRoZSBHTlUgR1JhbmQgVW5pZmllZAorICAgICAgICAgICAgICAgICAgICBCb290bG9hZGVyIChHUlVCKSBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBVc2UgYSBzZW1pLWNvbG9uIGNoYXJhY3RlciAoPGZpbGVuYW1lPjs8L2ZpbGVuYW1lPikgdG8KKyAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGUgbXVsdGlwbGUgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5HUlVCX09QVFM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBvcHRpb25hbC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ncnViLWVmaSc+PGZpbGVuYW1lPmdydWItZWZpPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIHZhcmlhYmxlIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItR1JVQl9USU1FT1VUJz48Z2xvc3N0ZXJtPkdSVUJfVElNRU9VVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgR1JVQl9USU1FT1VUW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB0aW1lb3V0IGJlZm9yZSBleGVjdXRpbmcgdGhlIGRlZmF1bHQgTEFCRUwgaW4gdGhlIEdOVSBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIgKEdSVUIpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdGltZW91dCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MQUJFTDwvZmlsZW5hbWU+IGluIHRoZSBHTlUgR1JhbmQgVW5pZmllZAorICAgICAgICAgICAgICAgICAgICBCb290bG9hZGVyIChHUlVCKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5HUlVCX1RJTUVPVVQ8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBvcHRpb25hbC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ncnViLWVmaSc+PGZpbGVuYW1lPmdydWItZWZpPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIHZhcmlhYmxlIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItR1RLSU1NT0RVTEVTX1BBQ0tBR0VTJz48Z2xvc3N0ZXJtPkdUS0lNTU9EVUxFU19QQUNLQUdFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgR1RLSU1NT0RVTEVTX1BBQ0tBR0VTW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBndGstaW1tb2R1bGVzLWNhY2hlIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgcGFja2FnZXMgdGhhdCBjb250YWluIHRoZSBHVEsrIGlucHV0IG1ldGhvZCBtb2R1bGVzIGJlaW5nIGluc3RhbGxlZCB3aGVuIHRoZSBtb2R1bGVzIGFyZSBpbiBwYWNrYWdlcyBvdGhlciB0aGFuIHRoZSBtYWluIHBhY2thZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ndGstaW1tb2R1bGVzLWNhY2hlJz48ZmlsZW5hbWU+Z3RrLWltbW9kdWxlcy1jYWNoZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIHBhY2thZ2VzIHRoYXQgY29udGFpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgR1RLKyBpbnB1dCBtZXRob2QgbW9kdWxlcyBiZWluZyBpbnN0YWxsZWQgd2hlbiB0aGUgbW9kdWxlcworICAgICAgICAgICAgICAgICAgICBhcmUgaW4gcGFja2FnZXMgb3RoZXIgdGhhbiB0aGUgbWFpbiBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUdVTU1JQk9PVF9DRkcnPjxnbG9zc3Rlcm0+R1VNTUlCT09UX0NGRzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgR1VNTUlCT09UX0NGR1tkb2NdID0gIldoZW4gRUZJX1BST1ZJREVSIGlzIHNldCB0byAiZ3VtbWlib290IiwgdGhlIEdVTU1JQk9PVF9DRkcgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCBzaG91bGQgYmUgdXNlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FRklfUFJPVklERVInPjxmaWxlbmFtZT5FRklfUFJPVklERVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvICJndW1taWJvb3QiLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkdVTU1JQk9PVF9DRkc8L2ZpbGVuYW1lPiB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0IHNob3VsZCBiZSB1c2VkLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZ3VtbWlib290Jz48ZmlsZW5hbWU+Z3VtbWlib290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHNldHMgdGhlIDxmaWxlbmFtZT5HVU1NSUJPT1RfQ0ZHPC9maWxlbmFtZT4gYXMKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBHVU1NSUJPT1RfQ0ZHID89ICIkezxsaW5rIGxpbmtlbmQ9J3Zhci1TJz5TPC9saW5rPn0vbG9hZGVyLmNvbmYiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEd1bW1pYm9vdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvZ3VtbWlib290Lyc+R3VtbWlib290IGRvY3VtZW50YXRpb248L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HVU1NSUJPT1RfRU5UUklFUyc+PGdsb3NzdGVybT5HVU1NSUJPT1RfRU5UUklFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgR1VNTUlCT09UX0VOVFJJRVNbZG9jXSA9ICJXaGVuIEVGSV9QUk9WSURFUiBpcyBzZXQgdG8gImd1bW1pYm9vdCIsIHRoZSBHVU1NSUJPT1RfRU5UUklFUyB2YXJpYWJsZSBzcGVjaWZpZXMgYSBsaXN0IG9mIGVudHJ5IGZpbGVzICgqLmNvbmYpIHRvIGJlIGluc3RhbGxlZCBjb250YWluaW5nIG9uZSBib290IGVudHJ5IHBlciBmaWxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVGSV9QUk9WSURFUic+PGZpbGVuYW1lPkVGSV9QUk9WSURFUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gImd1bW1pYm9vdCIsIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+R1VNTUlCT09UX0VOVFJJRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBzcGVjaWZpZXMKKyAgICAgICAgICAgICAgICAgICAgYSBsaXN0IG9mIGVudHJ5IGZpbGVzCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Ki5jb25mPC9maWxlbmFtZT4pIHRvIGJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nIG9uZSBib290IGVudHJ5IHBlciBmaWxlLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZ3VtbWlib290Jz48ZmlsZW5hbWU+Z3VtbWlib290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHNldHMgdGhlIDxmaWxlbmFtZT5HVU1NSUJPT1RfRU5UUklFUzwvZmlsZW5hbWU+IGFzCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgR1VNTUlCT09UX0VOVFJJRVMgPz0gIiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gR3VtbWlib290LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9ndW1taWJvb3QvJz5HdW1taWJvb3QgZG9jdW1lbnRhdGlvbjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUdVTU1JQk9PVF9USU1FT1VUJz48Z2xvc3N0ZXJtPkdVTU1JQk9PVF9USU1FT1VUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHVU1NSUJPT1RfVElNRU9VVFtkb2NdID0gIldoZW4gRUZJX1BST1ZJREVSIGlzIHNldCB0byAiZ3VtbWlib290IiwgdGhlIEdVTU1JQk9PVF9USU1FT1VUIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgYm9vdCBtZW51IHRpbWVvdXQgaW4gc2Vjb25kcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FRklfUFJPVklERVInPjxmaWxlbmFtZT5FRklfUFJPVklERVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvICJndW1taWJvb3QiLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkdVTU1JQk9PVF9USU1FT1VUPC9maWxlbmFtZT4gdmFyaWFibGUgc3BlY2lmaWVzCisgICAgICAgICAgICAgICAgICAgIHRoZSBib290IG1lbnUgdGltZW91dCBpbiBzZWNvbmRzLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZ3VtbWlib290Jz48ZmlsZW5hbWU+Z3VtbWlib290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHNldHMgdGhlIDxmaWxlbmFtZT5HVU1NSUJPT1RfVElNRU9VVDwvZmlsZW5hbWU+IGFzCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgR1VNTUlCT09UX1RJTUVPVVQgPz0gIjEwIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBHdW1taWJvb3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2ZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2d1bW1pYm9vdC8nPkd1bW1pYm9vdCBkb2N1bWVudGF0aW9uPC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWgnPjx0aXRsZT5IPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUhPTUVQQUdFJz48Z2xvc3N0ZXJtPkhPTUVQQUdFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBIT01FUEFHRVtkb2NdID0gIldlYnNpdGUgd2hlcmUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc29mdHdhcmUgdGhlIHJlY2lwZSBpcyBidWlsZGluZyBjYW4gYmUgZm91bmQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2Vic2l0ZSB3aGVyZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzb2Z0d2FyZSB0aGUgcmVjaXBlIGlzIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBmb3VuZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1IT1NUX0FSQ0gnPjxnbG9zc3Rlcm0+SE9TVF9BUkNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBIT1NUX0FSQ0hbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4gTm9ybWFsbHkgc2FtZSBhcyB0aGUgVEFSR0VUX0FSQ0guIgorCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgd2hpY2ggaXMgbm9ybWFsbHkKKyAgICAgICAgICAgICAgICAgICAgdGhlIHNhbWUgYXMKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9BUkNIJz48ZmlsZW5hbWU+VEFSR0VUX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHN1cHBvcnRzIG1hbnkKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbGlzdCBpcyBieSBubyBtZWFucyBjb21wbGV0ZSBhcyB0aGUgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgICAgIGlzIGNvbmZpZ3VyYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBhcm0KKyAgICAgaTU4NgorICAgICB4ODZfNjQKKyAgICAgcG93ZXJwYworICAgICBwb3dlcnBjNjQKKyAgICAgbWlwcworICAgICBtaXBzZWwKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUhPU1RfQ0NfQVJDSCc+PGdsb3NzdGVybT5IT1NUX0NDX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEhPU1RfQ0NfQVJDSFtkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSBob3N0IGFyY2hpdGVjdHVyZS4gTm9ybWFsbHkgc2FtZSBhcyB0aGUgVEFSR0VUX0NDX0FSQ0guIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb21waWxlciBmbGFncyB0aGF0IGFyZQorICAgICAgICAgICAgICAgICAgICBwYXNzZWQgdG8gdGhlIEMgY29tcGlsZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgaW5pdGlhbGl6YXRpb24gZm9yIDxmaWxlbmFtZT5IT1NUX0NDX0FSQ0g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoYXQgaXMgYmVpbmcgYnVpbHQ6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9DQ19BUkNIJz48ZmlsZW5hbWU+VEFSR0VUX0NDX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJVSUxEX0NDX0FSQ0g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0IChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZTwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CVUlMRFNES19DQ19BUkNIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciBhbiBTREsgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUhPU1RfT1MnPjxnbG9zc3Rlcm0+SE9TVF9PUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSE9TVF9PU1tkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgb3BlcmF0aW5nIHN5c3RlbS4gTm9ybWFsbHkgdGhlIHNhbWUgYXMgdGhlIFRBUkdFVF9PUy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHRhcmdldCBvcGVyYXRpbmcgc3lzdGVtLCB3aGljaAorICAgICAgICAgICAgICAgICAgICBpcyBub3JtYWxseSB0aGUgc2FtZSBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9PUyc+PGZpbGVuYW1lPlRBUkdFVF9PUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gImxpbnV4IiBmb3IgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4tYmFzZWQgc3lzdGVtcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgdG8gImxpbnV4LXVjbGliYyIgZm9yIDxmaWxlbmFtZT51Y2xpYmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIEFSTS9FQUJJIHRhcmdldHMsIHRoZXJlIGFyZSBhbHNvICJsaW51eC1nbnVlYWJpIiBhbmQKKyAgICAgICAgICAgICAgICAgICAgImxpbnV4LXVjbGliYy1nbnVlYWJpIiB2YWx1ZXMgcG9zc2libGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSE9TVF9QUkVGSVgnPjxnbG9zc3Rlcm0+SE9TVF9QUkVGSVg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEhPU1RfUFJFRklYW2RvY10gPSAiVGhlIHByZWZpeCBmb3IgdGhlIGNyb3NzIGNvbXBpbGUgdG9vbGNoYWluLiBOb3JtYWxseSBzYW1lIGFzIHRoZSBUQVJHRVRfUFJFRklYLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcHJlZml4IGZvciB0aGUgY3Jvc3MtY29tcGlsZSB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5IT1NUX1BSRUZJWDwvZmlsZW5hbWU+IGlzIG5vcm1hbGx5IHRoZSBzYW1lIGFzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfUFJFRklYJz48ZmlsZW5hbWU+VEFSR0VUX1BSRUZJWDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1IT1NUX1NZUyc+PGdsb3NzdGVybT5IT1NUX1NZUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSE9TVF9TWVNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHN5c3RlbSwgaW5jbHVkaW5nIHRoZSBhcmNoaXRlY3R1cmUgYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtLCBmb3Igd2l0aCB0aGUgYnVpbGQgaXMgb2NjdXJyaW5nIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHN5c3RlbSwgaW5jbHVkaW5nIHRoZSBhcmNoaXRlY3R1cmUgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtLCBmb3Igd2hpY2ggdGhlIGJ1aWxkIGlzIG9jY3VycmluZworICAgICAgICAgICAgICAgICAgICBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGJhc2VkIG9uCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1IT1NUX0FSQ0gnPjxmaWxlbmFtZT5IT1NUX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1IT1NUX1ZFTkRPUic+PGZpbGVuYW1lPkhPU1RfVkVORE9SPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUhPU1RfT1MnPjxmaWxlbmFtZT5IT1NUX09TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgdG8gc2V0IHRoZSB2YXJpYWJsZSB5b3Vyc2VsZi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciB0aGVzZSB0d28gZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2l2ZW4gYSBuYXRpdmUgcmVjaXBlIG9uIGEgMzItYml0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDg2IG1hY2hpbmUgcnVubmluZyBMaW51eCwgdGhlIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImk2ODYtbGludXgiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdpdmVuIGEgcmVjaXBlIGJlaW5nIGJ1aWx0IGZvciBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0dGxlLWVuZGlhbiBNSVBTIHRhcmdldCBydW5uaW5nIExpbnV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB2YWx1ZSBtaWdodCBiZSAibWlwc2VsLWxpbnV4Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSE9TVF9WRU5ET1InPjxnbG9zc3Rlcm0+SE9TVF9WRU5ET1I8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEhPU1RfVkVORE9SW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIHZlbmRvci4gTm9ybWFsbHkgc2FtZSBhcyB0aGUgVEFSR0VUX1ZFTkRPUi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHZlbmRvci4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkhPU1RfVkVORE9SPC9maWxlbmFtZT4gaXMgbm9ybWFsbHkgdGhlIHNhbWUgYXMKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9QUkVGSVgnPjxmaWxlbmFtZT5UQVJHRVRfVkVORE9SPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1pJz48dGl0bGU+STwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JQ0VDQ19ESVNBQkxFRCc+PGdsb3NzdGVybT5JQ0VDQ19ESVNBQkxFRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSUNFQ0NfRElTQUJMRURbZG9jXSA9ICJEaXNhYmxlcyBvciBlbmFibGVzIHRoZSBpY2VjYyAoSWNlY3JlYW0pIGZ1bmN0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERpc2FibGVzIG9yIGVuYWJsZXMgdGhlIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIChJY2VjcmVhbSkgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZnVuY3Rpb24gYW5kIGJlc3QgcHJhY3RpY2VzCisgICAgICAgICAgICAgICAgICAgIGZvciB1c2luZyB0aGlzIHZhcmlhYmxlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pY2VjYyc+PGZpbGVuYW1lPmljZWNjLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byAiMSIgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGRpc2FibGVzIHRoZSBmdW5jdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJQ0VDQ19ESVNBQkxFRCA/Pz0gIjEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVG8gZW5hYmxlIHRoZSBmdW5jdGlvbiwgc2V0IHRoZSB2YXJpYWJsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElDRUNDX0RJU0FCTEVEID0gIiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlDRUNDX0VOVl9FWEVDJz48Z2xvc3N0ZXJtPklDRUNDX0VOVl9FWEVDPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJQ0VDQ19FTlZfRVhFQ1tkb2NdID0gIlBvaW50cyB0byB0aGUgaWNlY2MtY3JlYXRlLWVudiBzY3JpcHQgdGhhdCB5b3UgcHJvdmlkZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIDxmaWxlbmFtZT5pY2VjYy1jcmVhdGUtZW52PC9maWxlbmFtZT4gc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIHRoYXQgeW91IHByb3ZpZGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaWNlY2MnPjxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHBvaW50IHRvIGEgc2NyaXB0IHRoYXQgeW91IHByb3ZpZGUsIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlIGRlZmF1bHQgc2NyaXB0IHByb3ZpZGVkCisgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSA8ZmlsZW5hbWU+aWNlY2MtY3JlYXRlLWVudi5iYjwvZmlsZW5hbWU+IHJlY2lwZSwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgYSBtb2RpZmllZCB2ZXJzaW9uIGFuZCBub3QgdGhlIG9uZSB0aGF0IGNvbWVzIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSUNFQ0NfUEFSQUxMRUxfTUFLRSc+PGdsb3NzdGVybT5JQ0VDQ19QQVJBTExFTF9NQUtFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJQ0VDQ19QQVJBTExFTF9NQUtFW2RvY10gPSAiRXh0cmEgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIG1ha2UgY29tbWFuZCBkdXJpbmcgdGhlIGRvX2NvbXBpbGUgdGFzayB0aGF0IHNwZWNpZnkgcGFyYWxsZWwgY29tcGlsYXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRXh0cmEgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIHRoYXQgc3BlY2lmeSBwYXJhbGxlbCBjb21waWxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSB1c3VhbGx5IHRha2VzIHRoZSBmb3JtIG9mCisgICAgICAgICAgICAgICAgICAgICItaiA8cmVwbGFjZWFibGU+eDwvcmVwbGFjZWFibGU+Iiwgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPng8L3JlcGxhY2VhYmxlPiByZXByZXNlbnRzIHRoZSBtYXhpbXVtCisgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBwYXJhbGxlbCB0aHJlYWRzIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gY2FuCisgICAgICAgICAgICAgICAgICAgIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgb3B0aW9ucyBwYXNzZWQgYWZmZWN0IGJ1aWxkcyBvbiBhbGwgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXMgb24gdGhlIG5ldHdvcmssIHdoaWNoIGFyZSBtYWNoaW5lcyBydW5uaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmljZWNjZDwvZmlsZW5hbWU+IGRhZW1vbi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIGVuYWJsZWQgbWFjaGluZXMgc3VwcG9ydCBtdWx0aXBsZSBjb3JlcywKKyAgICAgICAgICAgICAgICAgICAgY29taW5nIHVwIHdpdGggdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcmFsbGVsIHRocmVhZHMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBnaXZlcyB5b3UgdGhlIGJlc3QgcGVyZm9ybWFuY2UgY291bGQgdGFrZSBzb21lCisgICAgICAgICAgICAgICAgICAgIGV4cGVyaW1lbnRhdGlvbiBzaW5jZSBtYWNoaW5lIHNwZWVkLCBuZXR3b3JrIGxhZywKKyAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIG1lbW9yeSwgYW5kIGV4aXN0aW5nIG1hY2hpbmUgbG9hZHMgY2FuIGFsbAorICAgICAgICAgICAgICAgICAgICBhZmZlY3QgYnVpbGQgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB1bmxpa2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQVJBTExFTF9NQUtFJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgdGhlcmUgaXMgbm8gcnVsZS1vZi10aHVtYiBmb3Igc2V0dGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SUNFQ0NfUEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+IHRvIGFjaGlldmUKKyAgICAgICAgICAgICAgICAgICAgb3B0aW1hbCBwZXJmb3JtYW5jZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBzZXQgPGZpbGVuYW1lPklDRUNDX1BBUkFMTEVMX01BS0U8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCB1c2UgaXQgKGkuZS4gdGhlIHN5c3RlbSBkb2VzCisgICAgICAgICAgICAgICAgICAgIG5vdCBkZXRlY3QgYW5kIGFzc2lnbiB0aGUgbnVtYmVyIG9mIGNvcmVzIGFzIGlzIGRvbmUgd2l0aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JQ0VDQ19QQVRIJz48Z2xvc3N0ZXJtPklDRUNDX1BBVEg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElDRUNDX1BBVEhbZG9jXSA9ICJUaGUgbG9jYXRpb24gb2YgdGhlIGljZWNjIGJpbmFyeS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gb2YgdGhlIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+IGJpbmFyeS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgZG9lcyBub3QgZGVmaW5lCisgICAgICAgICAgICAgICAgICAgIHRoaXMgdmFyaWFibGUsIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pY2VjYyc+PGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGF0dGVtcHRzIHRvIGRlZmluZSBpdCBieSBsb2NhdGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aWNlY2M8L2ZpbGVuYW1lPiB1c2luZyA8ZmlsZW5hbWU+d2hpY2g8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JQ0VDQ19VU0VSX0NMQVNTX0JMJz48Z2xvc3N0ZXJtPklDRUNDX1VTRVJfQ0xBU1NfQkw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElDRUNDX1VTRVJfQ0xBU1NfQkxbZG9jXSA9ICJJZGVudGlmaWVzIHVzZXIgY2xhc3NlcyB0aGF0IHlvdSBkbyBub3Qgd2FudCB0aGUgSWNlY3JlYW0gZGlzdHJpYnV0ZWQgY29tcGlsZSBzdXBwb3J0IHRvIGNvbnNpZGVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXMgdXNlciBjbGFzc2VzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRoZQorICAgICAgICAgICAgICAgICAgICBJY2VjcmVhbSBkaXN0cmlidXRlZCBjb21waWxlIHN1cHBvcnQgdG8gY29uc2lkZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaWNlY2MnPjxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBsaXN0IGNsYXNzZXMgdXNpbmcgdGhpcyB2YXJpYWJsZSwgeW91IGFyZQorICAgICAgICAgICAgICAgICAgICAiYmxhY2tsaXN0aW5nIiB0aGVtIGZyb20gZGlzdHJpYnV0ZWQgY29tcGlsYXRpb24gYWNyb3NzCisgICAgICAgICAgICAgICAgICAgIHJlbW90ZSBob3N0cy4KKyAgICAgICAgICAgICAgICAgICAgQW55IGNsYXNzZXMgeW91IGxpc3Qgd2lsbCBiZSBkaXN0cmlidXRlZCBhbmQgY29tcGlsZWQKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxseS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JQ0VDQ19VU0VSX1BBQ0tBR0VfQkwnPjxnbG9zc3Rlcm0+SUNFQ0NfVVNFUl9QQUNLQUdFX0JMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJQ0VDQ19VU0VSX1BBQ0tBR0VfQkxbZG9jXSA9ICJJZGVudGlmaWVzIHVzZXIgcmVjaXBlcyB0aGF0IHlvdSBkbyBub3Qgd2FudCB0aGUgSWNlY3JlYW0gZGlzdHJpYnV0ZWQgY29tcGlsZSBzdXBwb3J0IHRvIGNvbnNpZGVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXMgdXNlciByZWNpcGVzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRoZQorICAgICAgICAgICAgICAgICAgICBJY2VjcmVhbSBkaXN0cmlidXRlZCBjb21waWxlIHN1cHBvcnQgdG8gY29uc2lkZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaWNlY2MnPjxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBsaXN0IHBhY2thZ2VzIHVzaW5nIHRoaXMgdmFyaWFibGUsIHlvdSBhcmUKKyAgICAgICAgICAgICAgICAgICAgImJsYWNrbGlzdGluZyIgdGhlbSBmcm9tIGRpc3RyaWJ1dGVkIGNvbXBpbGF0aW9uIGFjcm9zcworICAgICAgICAgICAgICAgICAgICByZW1vdGUgaG9zdHMuCisgICAgICAgICAgICAgICAgICAgIEFueSBwYWNrYWdlcyB5b3UgbGlzdCB3aWxsIGJlIGRpc3RyaWJ1dGVkIGFuZCBjb21waWxlZAorICAgICAgICAgICAgICAgICAgICBsb2NhbGx5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlDRUNDX1VTRVJfUEFDS0FHRV9XTCc+PGdsb3NzdGVybT5JQ0VDQ19VU0VSX1BBQ0tBR0VfV0w8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElDRUNDX1VTRVJfUEFDS0FHRV9XTFtkb2NdID0gIklkZW50aWZpZXMgdXNlciByZWNpcGVzIHRoYXQgdXNlIGFuIGVtcHR5IFBBUkFMTEVMX01BS0UgdmFyaWFibGUgdGhhdCB5b3Ugd2FudCB0byBmb3JjZSByZW1vdGUgZGlzdHJpYnV0ZWQgY29tcGlsYXRpb24gb24gdXNpbmcgdGhlIEljZWNyZWFtIGRpc3RyaWJ1dGVkIGNvbXBpbGUgc3VwcG9ydC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVzIHVzZXIgcmVjaXBlcyB0aGF0IHVzZSBhbiBlbXB0eQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFSQUxMRUxfTUFLRSc+PGZpbGVuYW1lPlBBUkFMTEVMX01BS0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdGhhdCB5b3Ugd2FudCB0byBmb3JjZSByZW1vdGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsYXRpb24gb24gdXNpbmcgdGhlIEljZWNyZWFtIGRpc3RyaWJ1dGVkIGNvbXBpbGUKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pY2VjYyc+PGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2V0IHRoaXMgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfQkFTRU5BTUUnPjxnbG9zc3Rlcm0+SU1BR0VfQkFTRU5BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX0JBU0VOQU1FW2RvY10gPSAiVGhlIGJhc2UgbmFtZSBvZiBpbWFnZSBvdXRwdXQgZmlsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2UgbmFtZSBvZiBpbWFnZSBvdXRwdXQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgZGVmYXVsdHMgdG8gdGhlIHJlY2lwZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfQk9PVF9GSUxFUyc+PGdsb3NzdGVybT5JTUFHRV9CT09UX0ZJTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9CT09UX0ZJTEVTW2RvY10gPSAiV2hpdGVzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBmaWxlcyBmcm9tICR7REVQTE9ZX0RJUl9JTUFHRX0gdG8gcGxhY2UgaW4gYm9vdCBwYXJ0aXRpb24uIEVudHJpZXMgd2lsbCBiZSBpbnN0YWxsZWQgdW5kZXIgYSBzYW1lIG5hbWUgYXMgdGhlIHNvdXJjZSBmaWxlLiBUbyBjaGFuZ2UgdGhlIGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgcGFzcyBhIGRlc2lyZWQgbmFtZSBhZnRlciBhIHNlbWljb2xvbiAoZWcuIHUtYm9vdC5pbWc7dWJvb3QpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZXMgaW5zdGFsbGVkIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgIGJvb3QgcGFydGl0aW9uIHdoZW4gcHJlcGFyaW5nIGFuIGltYWdlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gdG9vbCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ym9vdGltZy1wYXJ0aXRpb248L2ZpbGVuYW1lPiBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgcGx1Z2luLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgZmlsZXMgYXJlIGluc3RhbGxlZCB1bmRlcgorICAgICAgICAgICAgICAgICAgICB0aGUgc2FtZSBuYW1lIGFzIHRoZSBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRvIGNoYW5nZSB0aGUgaW5zdGFsbGVkIG5hbWUsIHNlcGFyYXRlIGl0IGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsIG5hbWUgd2l0aCBhIHNlbWktY29sb24gKDspLgorICAgICAgICAgICAgICAgICAgICBTb3VyY2UgZmlsZXMgbmVlZCB0byBiZSBsb2NhdGVkIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX0lNQUdFJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9JTUFHRTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdHdvIGV4YW1wbGVzOgorCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KKyAgICAgSU1BR0VfQk9PVF9GSUxFUyA9ICJ1LWJvb3QuaW1nIHVJbWFnZTtrZXJuZWwiCisgICAgIElNQUdFX0JPT1RfRklMRVMgPSAidS1ib290LiR7VUJPT1RfU1VGRklYfSAke0tFUk5FTF9JTUFHRVRZUEV9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHNvdXJjZSBmaWxlcyBjYW4gYmUgcGlja2VkIHVwIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIGEgZ2xvYiBwYXR0ZXJuLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBkZXN0aW5hdGlvbiBmaWxlCisgICAgICAgICAgICAgICAgICAgIHdpbGwgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBiYXNlIG5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlCisgICAgICAgICAgICAgICAgICAgIHBhdGguCisgICAgICAgICAgICAgICAgICAgIFRvIGluc3RhbGwgZmlsZXMgaW50byBhIGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBsb2NhdGlvbiwgcGFzcyBpdHMgbmFtZSBhZnRlciBhIHNlbWktY29sb24KKyAgICAgICAgICAgICAgICAgICAgKDspLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0d28gZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KKyAgICAgSU1BR0VfQk9PVF9GSUxFUyA9ICJiY20yODM1LWJvb3RmaWxlcy8qIgorICAgICBJTUFHRV9CT09UX0ZJTEVTID0gImJjbTI4MzUtYm9vdGZpbGVzLyo7Ym9vdC8iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGV4YW1wbGUgaW5zdGFsbHMgYWxsIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7REVQTE9ZX0RJUl9JTUFHRX0vYmNtMjgzNS1ib290ZmlsZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSByb290IG9mIHRoZSB0YXJnZXQgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2Vjb25kIGV4YW1wbGUgaW5zdGFsbHMgdGhlIHNhbWUgZmlsZXMgaW50byBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ib290PC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9DTEFTU0VTJz48Z2xvc3N0ZXJtPklNQUdFX0NMQVNTRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX0NMQVNTRVNbZG9jXSA9ICJBIGxpc3Qgb2YgY2xhc3NlcyB0aGF0IGFsbCBpbWFnZXMgc2hvdWxkIGluaGVyaXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGNsYXNzZXMgdGhhdCBhbGwgaW1hZ2VzIHNob3VsZCBpbmhlcml0LgorICAgICAgICAgICAgICAgICAgICBZb3UgdHlwaWNhbGx5IHVzZSB0aGlzIHZhcmlhYmxlIHRvIHNwZWNpZnkgdGhlIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyB0aGF0IHJlZ2lzdGVyIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgaW1hZ2VzCisgICAgICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciA8ZmlsZW5hbWU+SU1BR0VfQ0xBU1NFUzwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbWFnZV90eXBlczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBvciBpbiBhIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3Nlcy9pbWFnZV90eXBlcy5iYmNsYXNzPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9DTUQnPjxnbG9zc3Rlcm0+SU1BR0VfQ01EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9DTURbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBpbWFnZSBmaWxlIGZvciBhIHNwZWNpZmljIGltYWdlIHR5cGUsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSB2YWx1ZSBzZXQgc2V0IGluIElNQUdFX0ZTVFlQRVMsIChlLmcuIGV4dDMsIGJ0cmZzLCBhbmQgc28gZm9ydGgpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgY29tbWFuZCB0byBjcmVhdGUgdGhlIGltYWdlIGZpbGUgZm9yIGEKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgaW1hZ2UgdHlwZSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIHZhbHVlIHNldAorICAgICAgICAgICAgICAgICAgICBzZXQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+ZXh0MzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnRyZnM8L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXR0aW5nIHRoaXMgdmFyaWFibGUsIHlvdSBzaG91bGQgdXNlCisgICAgICAgICAgICAgICAgICAgIGFuIG92ZXJyaWRlIGZvciB0aGUgYXNzb2NpYXRlZCB0eXBlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfQ01EX2pmZnMyID0gIm1rZnMuamZmczIgLS1yb290PSR7SU1BR0VfUk9PVEZTfSBcCisgICAgICAgIC0tZmFrZXRpbWUgLS1vdXRwdXQ9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5qZmZzMiBcCisgICAgICAgICR7RVhUUkFfSU1BR0VDTUR9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSB0eXBpY2FsbHkgZG8gbm90IG5lZWQgdG8gc2V0IHRoaXMgdmFyaWFibGUgdW5sZXNzCisgICAgICAgICAgICAgICAgICAgIHlvdSBhcmUgYWRkaW5nIHN1cHBvcnQgZm9yIGEgbmV3IGltYWdlIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGV4YW1wbGVzIG9uIGhvdyB0byBzZXQgdGhpcyB2YXJpYWJsZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbWFnZV90eXBlcyc+PGZpbGVuYW1lPmltYWdlX3R5cGVzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZpbGUsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXMuYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX0RFVklDRV9UQUJMRVMnPjxnbG9zc3Rlcm0+SU1BR0VfREVWSUNFX1RBQkxFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfREVWSUNFX1RBQkxFU1tkb2NdID0gIlNwZWNpZmllcyBvbmUgb3IgbW9yZSBmaWxlcyB0aGF0IGNvbnRhaW4gY3VzdG9tIGRldmljZSB0YWJsZXMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBtYWtlZGV2cyBjb21tYW5kIGFzIHBhcnQgb2YgY3JlYXRpbmcgYW4gaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIG9uZSBvciBtb3JlIGZpbGVzIHRoYXQgY29udGFpbiBjdXN0b20gZGV2aWNlCisgICAgICAgICAgICAgICAgICAgIHRhYmxlcyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYWtlZGV2czwvZmlsZW5hbWU+IGNvbW1hbmQgYXMgcGFydCBvZiBjcmVhdGluZworICAgICAgICAgICAgICAgICAgICBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgZmlsZXMgbGlzdCBiYXNpYyBkZXZpY2Ugbm9kZXMgdGhhdCBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCB1bmRlciA8ZmlsZW5hbWU+L2RldjwvZmlsZW5hbWU+IHdpdGhpbiB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5JTUFHRV9ERVZJQ0VfVEFCTEVTPC9maWxlbmFtZT4gaXMgbm90IHNldCwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZpbGVzL2RldmljZV90YWJsZS1taW5pbWFsLnR4dDwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgIHVzZWQsIHdoaWNoIGlzIGxvY2F0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGRldGFpbHMgb24gaG93IHlvdSBzaG91bGQgd3JpdGUgZGV2aWNlIHRhYmxlIGZpbGVzLAorICAgICAgICAgICAgICAgICAgICBzZWUgPGZpbGVuYW1lPm1ldGEvZmlsZXMvZGV2aWNlX3RhYmxlLW1pbmltYWwudHh0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYXMgYW4gZXhhbXBsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGdsb3NzdGVybT5JTUFHRV9GRUFUVVJFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfRkVBVFVSRVNbZG9jXSA9ICJUaGUgcHJpbWFyeSBsaXN0IG9mIGZlYXR1cmVzIHRvIGluY2x1ZGUgaW4gYW4gaW1hZ2UuIENvbmZpZ3VyZSB0aGlzIHZhcmlhYmxlIGluIGFuIGltYWdlIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgcHJpbWFyeSBsaXN0IG9mIGZlYXR1cmVzIHRvIGluY2x1ZGUgaW4gYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgeW91IGNvbmZpZ3VyZSB0aGlzIHZhcmlhYmxlIGluIGFuIGltYWdlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggeW91IGNhbiB1c2UgdGhpcyB2YXJpYWJsZSBmcm9tIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYmVzdCBwcmFjdGljZXMgZGljdGF0ZSB0aGF0IHlvdSBkbyBub3QuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gZW5hYmxlIGV4dHJhIGZlYXR1cmVzIGZyb20gb3V0c2lkZSB0aGUgaW1hZ2UgcmVjaXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9JTUFHRV9GRUFUVVJFUyc+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2xpbms+PC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiBpbWFnZSBmZWF0dXJlcyB0aGF0IHNoaXBzIHdpdGggdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgICAgIFByb2plY3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9InJlZi1mZWF0dXJlcy1pbWFnZSI+SW1hZ2UgRmVhdHVyZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGhvdyB0byBjdXN0b21pemUgeW91ciBpbWFnZSBieQorICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGlzIHZhcmlhYmxlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZ3Bva3ktZXh0ZW5kLWN1c3RvbWltYWdlLWltYWdlZmVhdHVyZXMnPkN1c3RvbWl6aW5nIEltYWdlcyBVc2luZyBDdXN0b20gPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxnbG9zc3Rlcm0+SU1BR0VfRlNUWVBFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfRlNUWVBFU1tkb2NdID0gIkZvcm1hdHMgb2Ygcm9vdCBmaWxlc3lzdGVtIGltYWdlcyB0aGF0IHlvdSB3YW50IHRvIGhhdmUgY3JlYXRlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGZvcm1hdHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlIGJ1aWxkIHdoZW4gY3JlYXRpbmcgdGhlIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHNldHRpbmcgPGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzIGNhdXNlcyB0aGUgYnVpbGQgc3lzdGVtIHRvIGNyZWF0ZSByb290CisgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW1zIHVzaW5nIHR3byBmb3JtYXRzOiA8ZmlsZW5hbWU+LmV4dDM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPi50YXIuYnoyPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfRlNUWVBFUyA9ICJleHQzIHRhci5iejIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHN1cHBvcnRlZCBpbWFnZSBmb3JtYXRzIGZyb20gd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBjaG9vc2UsIHNlZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9UWVBFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFkZCAibGl2ZSIgdG8gPGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbnNpZGUgYW4gaW1hZ2UgcmVjaXBlLCBiZSBzdXJlIHRoYXQgeW91IGRvIHNvIHByaW9yIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAiaW5oZXJpdCBpbWFnZSIgbGluZSBvZiB0aGUgcmVjaXBlIG9yIHRoZSBsaXZlIGltYWdlIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgbm90IGJ1aWxkLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBEdWUgdG8gdGhlIHdheSB0aGlzIHZhcmlhYmxlIGlzIHByb2Nlc3NlZCwgaXQgaXMgbm90CisgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlIHRvIHVwZGF0ZSBpdHMgY29udGVudHMgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X3ByZXBlbmQ8L2ZpbGVuYW1lPi4gVG8gYWRkIG9uZSBvciBtb3JlCisgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgb3B0aW9ucyB0byB0aGlzIHZhcmlhYmxlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Kz08L2ZpbGVuYW1lPiBvcGVyYXRvciBtdXN0IGJlIHVzZWQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfSU5TVEFMTCc+PGdsb3NzdGVybT5JTUFHRV9JTlNUQUxMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9JTlNUQUxMW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYWNrYWdlcyB0byBpbnN0YWxsIGludG8gYW4gaW1hZ2UuIEltYWdlIHJlY2lwZXMgc2V0IElNQUdFX0lOU1RBTEwgdG8gc3BlY2lmeSB0aGUgcGFja2FnZXMgdG8gaW5zdGFsbCBpbnRvIGFuIGltYWdlIHRocm91Z2ggaW1hZ2UuYmJjbGFzcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhY2thZ2VzIHRvIGluc3RhbGwgaW50byBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgYQorICAgICAgICAgICAgICAgICAgICBtZWNoYW5pc20gZm9yIGFuIGltYWdlIHJlY2lwZSBhbmQgeW91IHNob3VsZCB1c2UgaXQKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBjYXJlIHRvIGF2b2lkIG9yZGVyaW5nIGlzc3Vlcy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHdvcmtpbmcgd2l0aCBhbgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0naW1hZ2VzLWNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMnPjxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSwgZG8gbm90IHVzZSB0aGUgPGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gc3BlY2lmeSBwYWNrYWdlcyBmb3IgaW5zdGFsbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfSU5TVEFMTCc+PGZpbGVuYW1lPlBBQ0tBR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGFsbG93cyB0aGUgaW5pdGlhbCBSQU0gZGlzayAoaW5pdHJhbWZzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHRvIHVzZSBhIGZpeGVkIHNldCBvZiBwYWNrYWdlcyBhbmQgbm90IGJlCisgICAgICAgICAgICAgICAgICAgICAgICBhZmZlY3RlZCBieSA8ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEltYWdlIHJlY2lwZXMgc2V0IDxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdG8gc3BlY2lmeSB0aGUgcGFja2FnZXMgdG8gaW5zdGFsbCBpbnRvIGFuIGltYWdlIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmltYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCAiaGVscGVyIiBjbGFzc2VzIGV4aXN0LCBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPiwgdGhhdCBjYW4gdGFrZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz5JTUFHRV9GRUFUVVJFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBsaXN0cyBhbmQgdHVybiB0aGVzZSBpbnRvIGF1dG8tZ2VuZXJhdGVkIGVudHJpZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPiBpbiBhZGRpdGlvbiB0byBpdHMKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBjb250ZW50cy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgPGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPiB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Kz08L2ZpbGVuYW1lPiBvcGVyYXRvciBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2NvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3IgZnJvbSB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgYW4gaW1hZ2UgcmVjaXBlIGlzIG5vdCByZWNvbW1lbmRlZCBhcyBpdCBjYW4gY2F1c2Ugb3JkZXJpbmcKKyAgICAgICAgICAgICAgICAgICAgaXNzdWVzLgorICAgICAgICAgICAgICAgICAgICBTaW5jZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS5iYmNsYXNzPC9maWxlbmFtZT4gc2V0cworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+IHRvIGEgZGVmYXVsdCB2YWx1ZSB1c2luZworICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPj89PC9maWxlbmFtZT4gb3BlcmF0b3IsIHVzaW5nIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPis9PC9maWxlbmFtZT4gb3BlcmF0aW9uIGFnYWluc3QKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPiB3aWxsIHJlc3VsdCBpbgorICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkIGJlaGF2aW9yIHdoZW4gdXNlZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGUgc2FtZSBvcGVyYXRpb24gZnJvbSB3aXRoaW4gYW4gaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIG1heSBvciBtYXkgbm90IHN1Y2NlZWQgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYworICAgICAgICAgICAgICAgICAgICBzaXR1YXRpb24uCisgICAgICAgICAgICAgICAgICAgIEluIGJvdGggdGhlc2UgY2FzZXMsIHRoZSBiZWhhdmlvciBpcyBjb250cmFyeSB0byBob3cgbW9zdAorICAgICAgICAgICAgICAgICAgICB1c2VycyBleHBlY3QgdGhlIDxmaWxlbmFtZT4rPTwvZmlsZW5hbWU+IG9wZXJhdG9yIHRvIHdvcmsuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGlzIHZhcmlhYmxlLCBpdCBpcyBiZXN0IHRvIHVzZSBpdCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0lOU1RBTExfYXBwZW5kID0gIiA8cmVwbGFjZWFibGU+cGFja2FnZS1uYW1lPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBpbmNsdWRlIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBxdW90YXRpb24gY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgc3RhcnQgb2YgdGhlIHBhY2thZ2UgbmFtZSBvciBuYW1lcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9MSU5HVUFTJz48Z2xvc3N0ZXJtPklNQUdFX0xJTkdVQVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX0xJTkdVQVNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgbG9jYWxlcyB0byBpbnN0YWxsIGludG8gdGhlIGltYWdlIGR1cmluZyB0aGUgcm9vdCBmaWxlc3lzdGVtIGNvbnN0cnVjdGlvbiBwcm9jZXNzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbGlzdCBvZiBsb2NhbGVzIHRvIGluc3RhbGwgaW50byB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIHRoZSByb290IGZpbGVzeXN0ZW0gY29uc3RydWN0aW9uIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgc3BsaXRzIGxvY2FsZQorICAgICAgICAgICAgICAgICAgICBmaWxlcywgd2hpY2ggYXJlIHVzZWQgZm9yIGxvY2FsaXphdGlvbiwgaW50byBzZXBhcmF0ZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGUgPGZpbGVuYW1lPklNQUdFX0xJTkdVQVM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBlbnN1cmVzIHRoYXQgYW55IGxvY2FsZSBwYWNrYWdlcyB0aGF0IGNvcnJlc3BvbmQgdG8gcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBzZWxlY3RlZCBmb3IgaW5zdGFsbGF0aW9uIGludG8gdGhlIGltYWdlIGFyZSBhbHNvCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0xJTkdVQVMgPSAicHQtYnIgZGUtZGUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgYnVpbGQgc3lzdGVtIGVuc3VyZXMgYW55IEJyYXppbGlhbgorICAgICAgICAgICAgICAgICAgICBQb3J0dWd1ZXNlIGFuZCBHZXJtYW4gbG9jYWxlIGZpbGVzIHRoYXQgY29ycmVzcG9uZCB0bworICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbiB0aGUgaW1hZ2UgYXJlIGluc3RhbGxlZCAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki1sb2NhbGUtcHQtYnI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPiotbG9jYWxlLWRlLWRlPC9maWxlbmFtZT4gYXMgd2VsbCBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki1sb2NhbGUtcHQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPiotbG9jYWxlLWRlPC9maWxlbmFtZT4sIHNpbmNlIHNvbWUgc29mdHdhcmUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgb25seSBwcm92aWRlIGxvY2FsZSBmaWxlcyBieSBsYW5ndWFnZSBhbmQgbm90IGJ5CisgICAgICAgICAgICAgICAgICAgIGNvdW50cnktc3BlY2lmaWMgbGFuZ3VhZ2UpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HTElCQ19HRU5FUkFURV9MT0NBTEVTJz48ZmlsZW5hbWU+R0xJQkNfR0VORVJBVEVfTE9DQUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgaW5mb3JtYXRpb24gb24gZ2VuZXJhdGluZyBHTElCQyBsb2NhbGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX01BTklGRVNUJz48Z2xvc3N0ZXJtPklNQUdFX01BTklGRVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9NQU5JRkVTVFtkb2NdID0gIlRoZSBtYW5pZmVzdCBmaWxlIGZvciB0aGUgaW1hZ2UuIFRoaXMgZmlsZSBsaXN0cyBhbGwgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyB0aGF0IG1ha2UgdXAgdGhlIGltYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtYW5pZmVzdCBmaWxlIGZvciB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBsaXN0cyBhbGwgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyB0aGF0IG1ha2UgdXAKKyAgICAgICAgICAgICAgICAgICAgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZSBjb250YWlucyBwYWNrYWdlIGluZm9ybWF0aW9uIG9uIGEgbGluZS1wZXItcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBiYXNpcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5wYWNrYWdlbmFtZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5wYWNrYWdlYXJjaDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT52ZXJzaW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW1hZ2UnPjxmaWxlbmFtZT5pbWFnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBkZWZpbmVzIHRoZSBtYW5pZmVzdCBmaWxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfTUFOSUZFU1QgPSAiJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5tYW5pZmVzdCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gaXMgZGVyaXZlZCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfSU1BR0UnPjxmaWxlbmFtZT5ERVBMT1lfRElSX0lNQUdFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfTkFNRSc+PGZpbGVuYW1lPklNQUdFX05BTUU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gb24gaG93IHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICBpcyBjcmVhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naW1hZ2UtZ2VuZXJhdGlvbi1kZXYtZW52aXJvbm1lbnQnPkltYWdlIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX05BTUUnPjxnbG9zc3Rlcm0+SU1BR0VfTkFNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfTkFNRVtkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgaW1hZ2UgZmlsZXMgbWludXMgdGhlIGV4dGVuc2lvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgb3V0cHV0IGltYWdlIGZpbGVzIG1pbnVzIHRoZSBleHRlbnNpb24uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgZGVyaXZlZCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0JBU0VOQU1FJz48ZmlsZW5hbWU+SU1BR0VfQkFTRU5BTUU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EQVRFVElNRSc+PGZpbGVuYW1lPkRBVEVUSU1FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9OQU1FID0gIiR7SU1BR0VfQkFTRU5BTUV9LSR7TUFDSElORX0tJHtEQVRFVElNRX0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9PVkVSSEVBRF9GQUNUT1InPjxnbG9zc3Rlcm0+SU1BR0VfT1ZFUkhFQURfRkFDVE9SPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9PVkVSSEVBRF9GQUNUT1JbZG9jXSA9ICJEZWZpbmVzIGEgbXVsdGlwbGllciB0aGF0IHRoZSBidWlsZCBzeXN0ZW0gYXBwbGllcyB0byB0aGUgaW5pdGlhbCBpbWFnZSBzaXplIGZvciBjYXNlcyB3aGVuIHRoZSBtdWx0aXBsaWVyIHRpbWVzIHRoZSByZXR1cm5lZCBkaXNrIHVzYWdlIHZhbHVlIGZvciB0aGUgaW1hZ2UgaXMgZ3JlYXRlciB0aGFuIHRoZSBzdW0gb2YgSU1BR0VfUk9PVEZTX1NJWkUgYW5kIElNQUdFX1JPT1RGU19FWFRSQV9TUEFDRS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIGEgbXVsdGlwbGllciB0aGF0IHRoZSBidWlsZCBzeXN0ZW0gYXBwbGllcyB0byB0aGUgaW5pdGlhbCBpbWFnZQorICAgICAgICAgICAgICAgICAgICBzaXplIGZvciBjYXNlcyB3aGVuIHRoZSBtdWx0aXBsaWVyIHRpbWVzIHRoZSByZXR1cm5lZCBkaXNrIHVzYWdlIHZhbHVlCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgaW1hZ2UgaXMgZ3JlYXRlciB0aGFuIHRoZSBzdW0gb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9ST09URlNfU0laRSc+SU1BR0VfUk9PVEZTX1NJWkU8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFJz5JTUFHRV9ST09URlNfRVhUUkFfU1BBQ0U8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHQgb2YgdGhlIG11bHRpcGxpZXIgYXBwbGllZCB0byB0aGUgaW5pdGlhbCBpbWFnZSBzaXplIGNyZWF0ZXMKKyAgICAgICAgICAgICAgICAgICAgZnJlZSBkaXNrIHNwYWNlIGluIHRoZSBpbWFnZSBhcyBvdmVyaGVhZC4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGJ1aWxkIHByb2Nlc3MgdXNlcyBhIG11bHRpcGxpZXIgb2YgMS4zIGZvciB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGRlZmF1bHQgdmFsdWUgcmVzdWx0cyBpbiAzMCUgZnJlZSBkaXNrIHNwYWNlIGFkZGVkIHRvIHRoZSBpbWFnZSB3aGVuIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBmaW5hbCBnZW5lcmF0ZWQgaW1hZ2Ugc2l6ZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBiZSBhd2FyZSB0aGF0IHBvc3QgaW5zdGFsbCBzY3JpcHRzIGFuZCB0aGUgcGFja2FnZSBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB1c2VzIGRpc2sgc3BhY2UgaW5zaWRlIHRoaXMgb3ZlcmhlYWQgYXJlYS4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGUgbXVsdGlwbGllciBkb2VzIG5vdCBwcm9kdWNlIGFuIGltYWdlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgYWxsIHRoZSB0aGVvcmV0aWNhbCBmcmVlIGRpc2sgc3BhY2UuCisgICAgICAgICAgICAgICAgICAgIFNlZSA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGU19TSVpFJz5JTUFHRV9ST09URlNfU0laRTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRoZSBidWlsZCBzeXN0ZW0gZGV0ZXJtaW5lcyB0aGUgb3ZlcmFsbCBpbWFnZSBzaXplLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCAzMCUgZnJlZSBkaXNrIHNwYWNlIHR5cGljYWxseSBnaXZlcyB0aGUgaW1hZ2UgZW5vdWdoIHJvb20gdG8gYm9vdAorICAgICAgICAgICAgICAgICAgICBhbmQgYWxsb3dzIGZvciBiYXNpYyBwb3N0IGluc3RhbGxzIHdoaWxlIHN0aWxsIGxlYXZpbmcgYSBzbWFsbCBhbW91bnQgb2YKKyAgICAgICAgICAgICAgICAgICAgZnJlZSBkaXNrIHNwYWNlLgorICAgICAgICAgICAgICAgICAgICBJZiAzMCUgZnJlZSBzcGFjZSBpcyBpbmFkZXF1YXRlLCB5b3UgY2FuIGluY3JlYXNlIHRoZSBkZWZhdWx0IHZhbHVlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzZXR0aW5nIGdpdmVzIHlvdSA1MCUgZnJlZSBzcGFjZSBhZGRlZCB0byB0aGUgaW1hZ2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfT1ZFUkhFQURfRkFDVE9SID0gIjEuNSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGVuc3VyZSBhIHNwZWNpZmljIGFtb3VudCBvZiBmcmVlIGRpc2sgc3BhY2UgaXMgYWRkZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGltYWdlIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSc+SU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX1BLR1RZUEUnPjxnbG9zc3Rlcm0+SU1BR0VfUEtHVFlQRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfUEtHVFlQRVtkb2NdID0gIkRlZmluZXMgdGhlIHBhY2thZ2UgdHlwZSAoREVCLCBSUE0sIElQSywgb3IgVEFSKSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIHBhY2thZ2UgdHlwZSAoREVCLCBSUE0sIElQSywgb3IgVEFSKSB1c2VkCisgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgZGVmaW5lZCBhcHByb3ByaWF0ZWx5IGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX2RlYic+PGZpbGVuYW1lPnBhY2thZ2VfZGViPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX3JwbSc+PGZpbGVuYW1lPnBhY2thZ2VfcnBtPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX2lwayc+PGZpbGVuYW1lPnBhY2thZ2VfaXBrPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX3Rhcic+PGZpbGVuYW1lPnBhY2thZ2VfdGFyPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+V2FybmluZzwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnBhY2thZ2VfdGFyPC9maWxlbmFtZT4gY2xhc3MgaXMgYnJva2VuCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgaXMgbm90IHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvIG5vdCB1c2UgaXQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBvcHVsYXRlLXNkay0qJz48ZmlsZW5hbWU+cGFja2FnZV9zZGtfYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW1hZ2UnPjxmaWxlbmFtZT5pbWFnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzc2VzIHVzZSB0aGUgPGZpbGVuYW1lPklNQUdFX1BLR1RZUEU8L2ZpbGVuYW1lPiBmb3IKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnaW5nIHVwIGltYWdlcyBhbmQgU0RLcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBub3Qgc2V0IHRoZSA8ZmlsZW5hbWU+SU1BR0VfUEtHVFlQRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG1hbnVhbGx5LgorICAgICAgICAgICAgICAgICAgICBSYXRoZXIsIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW5kaXJlY3RseSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZV8qPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZSBmaXJzdCBwYWNrYWdlIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gREVCLCBSUE0sIG9yIElQSykgdGhhdCBhcHBlYXJzIHdpdGggdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgRmlsZXMgdXNpbmcgdGhlIDxmaWxlbmFtZT4udGFyPC9maWxlbmFtZT4gZm9ybWF0IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgbmV2ZXIgdXNlZCBhcyBhIHN1YnN0aXR1dGUgcGFja2FnaW5nIGZvcm1hdCBmb3IgREVCLAorICAgICAgICAgICAgICAgICAgICAgICAgUlBNLCBhbmQgSVBLIGZvcm1hdHRlZCBmaWxlcyBmb3IgeW91ciBpbWFnZSBvciBTREsuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EJz48Z2xvc3N0ZXJtPklNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkRbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIG9uY2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIGZpbmFsIGltYWdlIG91dHB1dCBmaWxlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIG9uY2UgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIGZpbmFsIGltYWdlCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IGZ1bmN0aW9ucyBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9uczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EICs9ICI8cmVwbGFjZWFibGU+ZnVuY3Rpb248L3JlcGxhY2VhYmxlPjsgLi4uICIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBwYXNzIHRoZSByb290IGZpbGVzeXN0ZW0gcGF0aCB0byBhIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSBmdW5jdGlvbiwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7SU1BR0VfUk9PVEZTfTwvZmlsZW5hbWU+LCB3aGljaCBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSB0aGF0IGJlY29tZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbWFnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQnPjxnbG9zc3Rlcm0+SU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkRbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGJlZm9yZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgZmluYWwgaW1hZ2Ugb3V0cHV0IGZpbGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYmVmb3JlIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIHRoZSBmaW5hbCBpbWFnZQorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBmdW5jdGlvbnMgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EICs9ICI8cmVwbGFjZWFibGU+ZnVuY3Rpb248L3JlcGxhY2VhYmxlPjsgLi4uICIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBwYXNzIHRoZSByb290IGZpbGVzeXN0ZW0gcGF0aCB0byBhIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSBmdW5jdGlvbiwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7SU1BR0VfUk9PVEZTfTwvZmlsZW5hbWU+LCB3aGljaCBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSB0aGF0IGJlY29tZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbWFnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9ST09URlMnPjxnbG9zc3Rlcm0+SU1BR0VfUk9PVEZTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9ST09URlNbZG9jXSA9ICJUaGUgbG9jYXRpb24gb2YgdGhlIHJvb3QgZmlsZXN5c3RlbSB3aGlsZSBpdCBpcyB1bmRlciBjb25zdHJ1Y3Rpb24gKGkuZS4gZHVyaW5nIGRvX3Jvb3RmcykuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIG9mIHRoZSByb290IGZpbGVzeXN0ZW0gd2hpbGUgaXQgaXMgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0aW9uIChpLmUuIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXJvb3Rmcyc+PGZpbGVuYW1lPmRvX3Jvb3RmczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrKS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBub3QgY29uZmlndXJhYmxlLgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgY2hhbmdlIGl0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX1JPT1RGU19BTElHTk1FTlQnPjxnbG9zc3Rlcm0+SU1BR0VfUk9PVEZTX0FMSUdOTUVOVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfUk9PVEZTX0FMSUdOTUVOVFtkb2NdID0gIlNwZWNpZmllcyB0aGUgYWxpZ25tZW50IGZvciB0aGUgb3V0cHV0IGltYWdlIGZpbGUgaW4gS2J5dGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgYWxpZ25tZW50IGZvciB0aGUgb3V0cHV0IGltYWdlIGZpbGUgaW4KKyAgICAgICAgICAgICAgICAgICAgS2J5dGVzLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgaXMgbm90IGEgbXVsdGlwbGUgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhpcyB2YWx1ZSwgdGhlbiB0aGUgc2l6ZSBpcyByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0CisgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIG9mIHRoZSB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgIjEiLgorICAgICAgICAgICAgICAgICAgICBTZWUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGU19TSVpFJz48ZmlsZW5hbWU+SU1BR0VfUk9PVEZTX1NJWkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFJz48Z2xvc3N0ZXJtPklNQUdFX1JPT1RGU19FWFRSQV9TUEFDRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFW2RvY10gPSAiRGVmaW5lcyBhZGRpdGlvbmFsIGZyZWUgZGlzayBzcGFjZSBjcmVhdGVkIGluIHRoZSBpbWFnZSBpbiBLYnl0ZXMuIEJ5IGRlZmF1bHQsIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvICcwJy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIGFkZGl0aW9uYWwgZnJlZSBkaXNrIHNwYWNlIGNyZWF0ZWQgaW4gdGhlIGltYWdlIGluIEtieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gIjAiLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGZyZWUgZGlzayBzcGFjZSBpcyBhZGRlZCB0byB0aGUgaW1hZ2UgYWZ0ZXIgdGhlIGJ1aWxkIHN5c3RlbSBkZXRlcm1pbmVzCisgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZSBzaXplIGFzIGRlc2NyaWJlZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGU19TSVpFJz5JTUFHRV9ST09URlNfU0laRTwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gZW5zdXJlIHRoYXQgYQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBhbW91bnQgb2YgZnJlZSBkaXNrIHNwYWNlIGlzIGF2YWlsYWJsZSBvbiBhIGRldmljZSBhZnRlciBhbiBpbWFnZQorICAgICAgICAgICAgICAgICAgICBpcyBpbnN0YWxsZWQgYW5kIHJ1bm5pbmcuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0byBiZSBzdXJlIDUgR2J5dGVzIG9mIGZyZWUgZGlzayBzcGFjZSBpcyBhdmFpbGFibGUsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UgPSAiNTI0Mjg4MCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIFlvY3RvIFByb2plY3QgQnVpbGQgQXBwbGlhbmNlIHNwZWNpZmljYWxseSByZXF1ZXN0cyA0MCBHYnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgb2YgZXh0cmEgc3BhY2Ugd2l0aCB0aGUgbGluZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UgPSAiNDE5NDMwNDAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9ST09URlNfU0laRSc+PGdsb3NzdGVybT5JTUFHRV9ST09URlNfU0laRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfUk9PVEZTX1NJWkVbZG9jXSA9ICJEZWZpbmVzIHRoZSBzaXplIGluIEtieXRlcyBmb3IgdGhlIGdlbmVyYXRlZCBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBzaXplIGluIEtieXRlcyBmb3IgdGhlIGdlbmVyYXRlZCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZGV0ZXJtaW5lcyB0aGUgZmluYWwgc2l6ZSBmb3IgdGhlIGdlbmVyYXRlZAorICAgICAgICAgICAgICAgICAgICBpbWFnZSB1c2luZyBhbiBhbGdvcml0aG0gdGhhdCB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGluaXRpYWwgZGlzayBzcGFjZSB1c2VkCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgZ2VuZXJhdGVkIGltYWdlLCBhIHJlcXVlc3RlZCBzaXplIGZvciB0aGUgaW1hZ2UsIGFuZCByZXF1ZXN0ZWQKKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBmcmVlIGRpc2sgc3BhY2UgdG8gYmUgYWRkZWQgdG8gdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBQcm9ncmFtYXRpY2FsbHksIHRoZSBidWlsZCBzeXN0ZW0gZGV0ZXJtaW5lcyB0aGUgZmluYWwgc2l6ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIGltYWdlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBpZiAoaW1hZ2UtZHUgKiBvdmVyaGVhZCkgJmx0OyByb290ZnMtc2l6ZToKKwlpbnRlcm5hbC1yb290ZnMtc2l6ZSA9IHJvb3Rmcy1zaXplICsgeHNwYWNlCisgICAgZWxzZToKKwlpbnRlcm5hbC1yb290ZnMtc2l6ZSA9IChpbWFnZS1kdSAqIG92ZXJoZWFkKSArIHhzcGFjZQorCisgICAgd2hlcmU6CisKKyAgICAgIGltYWdlLWR1ID0gUmV0dXJuZWQgdmFsdWUgb2YgdGhlIGR1IGNvbW1hbmQgb24KKyAgICAgICAgICAgICAgICAgdGhlIGltYWdlLgorCisgICAgICBvdmVyaGVhZCA9IElNQUdFX09WRVJIRUFEX0ZBQ1RPUgorCisgICAgICByb290ZnMtc2l6ZSA9IElNQUdFX1JPT1RGU19TSVpFCisKKyAgICAgIGludGVybmFsLXJvb3Rmcy1zaXplID0gSW5pdGlhbCByb290IGZpbGVzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBiZWZvcmUgYW55IG1vZGlmaWNhdGlvbnMuCisKKyAgICAgIHhzcGFjZSA9IElNQUdFX1JPT1RGU19FWFRSQV9TUEFDRQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX09WRVJIRUFEX0ZBQ1RPUic+PGZpbGVuYW1lPklNQUdFX09WRVJIRUFEX0ZBQ1RPUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSc+PGZpbGVuYW1lPklNQUdFX1JPT1RGU19FWFRSQV9TUEFDRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIHJlbGF0ZWQgaW5mb3JtYXRpb24uCis8IS0tICAgICAgICAgICAgICAgICAgICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgPGZpbGVuYW1lPm92ZXJoZWFkPC9maWxlbmFtZT4gaXMgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9PVkVSSEVBRF9GQUNUT1InPklNQUdFX09WRVJIRUFEX0ZBQ1RPUjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgPGZpbGVuYW1lPnhzcGFjZTwvZmlsZW5hbWU+IGlzIGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFJz5JTUFHRV9ST09URlNfRVhUUkFfU1BBQ0U8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIGFuZCA8ZmlsZW5hbWU+ZHU8L2ZpbGVuYW1lPiBpcyB0aGUgcmVzdWx0cyBvZiB0aGUgZGlzayB1c2FnZSBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBpbml0aWFsbHkgZ2VuZXJhdGVkIGltYWdlLiAtLT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9UWVBFREVQJz48Z2xvc3N0ZXJtPklNQUdFX1RZUEVERVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX1RZUEVERVBbZG9jXSA9ICJTcGVjaWZpZXMgYSBkZXBlbmRlbmN5IGZyb20gb25lIGltYWdlIHR5cGUgb24gYW5vdGhlci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBkZXBlbmRlbmN5IGZyb20gb25lIGltYWdlIHR5cGUgb24gYW5vdGhlci4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWltYWdlLWxpdmUnPjxmaWxlbmFtZT5pbWFnZS1saXZlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX1RZUEVERVBfbGl2ZSA9ICJleHQzIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB0aGUgdmFyaWFibGUgZW5zdXJlcyB0aGF0IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgImxpdmUiIGlzIGxpc3RlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHByb2R1Y2VzIGFuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leHQzPC9maWxlbmFtZT4gaW1hZ2UgZmlyc3Qgc2luY2Ugb25lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzIG9mIHRoZSBsaXZlCisgICAgICAgICAgICAgICAgICAgIGltYWdlIGlzIGFuIDxmaWxlbmFtZT5leHQzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkIHBhcnRpdGlvbiBjb250YWluaW5nIHRoZSByb290CisgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfVFlQRVMnPjxnbG9zc3Rlcm0+SU1BR0VfVFlQRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX1RZUEVTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHN1cHBvcnRlZCBpbWFnZSB0eXBlcyBieSBkZWZhdWx0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgY29tcGxldGUgbGlzdCBvZiBzdXBwb3J0ZWQgaW1hZ2UgdHlwZXMKKyAgICAgICAgICAgICAgICAgICAgYnkgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBqZmZzMgorICAgICBqZmZzMi5zdW0KKyAgICAgY3JhbWZzCisgICAgIGV4dDIKKyAgICAgZXh0Mi5negorICAgICBleHQyLmJ6MgorICAgICBleHQzCisgICAgIGV4dDMuZ3oKKyAgICAgZXh0Mi5sem1hCisgICAgIGJ0cmZzCisgICAgIGxpdmUKKyAgICAgc3F1YXNoZnMKKyAgICAgc3F1YXNoZnMteHoKKyAgICAgdWJpCisgICAgIHViaWZzCisgICAgIHRhcgorICAgICB0YXIuZ3oKKyAgICAgdGFyLmJ6MgorICAgICB0YXIueHoKKyAgICAgY3BpbworICAgICBjcGlvLmd6CisgICAgIGNwaW8ueHoKKyAgICAgY3Bpby5sem1hCisgICAgIHZkaQorICAgICB2bWRrCisgICAgIGVsZgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIHR5cGVzIG9mIGltYWdlcywgc2VlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXMqLmJiY2xhc3M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOQ19QUic+PGdsb3NzdGVybT5JTkNfUFI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOQ19QUltkb2NdID0gIkhlbHBzIGRlZmluZSB0aGUgcmVjaXBlIHJldmlzaW9uIGZvciByZWNpcGVzIHRoYXQgc2hhcmUgYSBjb21tb24gaW5jbHVkZSBmaWxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEhlbHBzIGRlZmluZSB0aGUgcmVjaXBlIHJldmlzaW9uIGZvciByZWNpcGVzIHRoYXQgc2hhcmUKKyAgICAgICAgICAgICAgICAgICAgYSBjb21tb24gPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHRoaW5rIG9mIHRoaXMgdmFyaWFibGUgYXMgcGFydCBvZiB0aGUgcmVjaXBlIHJldmlzaW9uCisgICAgICAgICAgICAgICAgICAgIGFzIHNldCBmcm9tIHdpdGhpbiBhbiBpbmNsdWRlIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFN1cHBvc2UsIGZvciBleGFtcGxlLCB5b3UgaGF2ZSBhIHNldCBvZiByZWNpcGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgYXJlIHVzZWQgYWNyb3NzIHNldmVyYWwgcHJvamVjdHMuCisgICAgICAgICAgICAgICAgICAgIEFuZCwgd2l0aGluIGVhY2ggb2YgdGhvc2UgcmVjaXBlcyB0aGUgcmV2aXNpb24KKyAgICAgICAgICAgICAgICAgICAgKGl0cyA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSkgaXMgc2V0IGFjY29yZGluZ2x5LgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHdoZW4gdGhlIHJldmlzaW9uIG9mIHRob3NlIHJlY2lwZXMgY2hhbmdlcywKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1cmRlbiBpcyBvbiB5b3UgdG8gZmluZCBhbGwgdGhvc2UgcmVjaXBlcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgYmUgc3VyZSB0aGF0IHRoZXkgZ2V0IGNoYW5nZWQgdG8gcmVmbGVjdCB0aGUgdXBkYXRlZAorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgc2NlbmFyaW8sIGl0IGNhbiBnZXQgY29tcGxpY2F0ZWQgd2hlbiByZWNpcGVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgYXJlIHVzZWQgaW4gbWFueSBwbGFjZXMgYW5kIHByb3ZpZGUgY29tbW9uIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgICAgICAgICAgICAgYXJlIHVwZ3JhZGVkIHRvIGEgbmV3IHJldmlzaW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIG1vcmUgZWZmaWNpZW50IHdheSBvZiBkZWFsaW5nIHdpdGggdGhpcyBzaXR1YXRpb24gaXMKKyAgICAgICAgICAgICAgICAgICAgdG8gc2V0IHRoZSA8ZmlsZW5hbWU+SU5DX1BSPC9maWxlbmFtZT4gdmFyaWFibGUgaW5zaWRlCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGZpbGVzIHRoYXQgdGhlIHJlY2lwZXMKKyAgICAgICAgICAgICAgICAgICAgc2hhcmUgYW5kIHRoZW4gZXhwYW5kIHRoZSA8ZmlsZW5hbWU+SU5DX1BSPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgd2l0aGluIHRoZSByZWNpcGVzIHRvIGhlbHAKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lIHRoZSByZWNpcGUgcmV2aXNpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcHJvdmlkZXMgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGhvdyB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5JTkNfUFI8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBnaXZlbiBhIGNvbW1vbiA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGZpbGUgdGhhdAorICAgICAgICAgICAgICAgICAgICBkZWZpbmVzIHRoZSB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgdmFyaWFibGUgaXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBmaWxlLCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gc2V0IHRoZSA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPiB2YWx1ZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgZWFjaCByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSB3aWxsIG5vdGljZSB0aGF0IHdoZW4geW91IHNldCBhIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IHlvdSBjYW4gcHJvdmlkZSBtb3JlIGdyYW51bGFyCisgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uaW5nIGJ5IGFwcGVuZGluZyB2YWx1ZXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTkNfUFI8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1mb250LWNvbW1vbi5pbmM6SU5DX1BSID0gInIyIgorcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZW5jb2RpbmdzXzEuMC40LmJiOlBSID0gIiR7SU5DX1BSfS4xIgorcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC11dGlsXzEuMy4wLmJiOlBSID0gIiR7SU5DX1BSfS4wIgorcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC1hbGlhc18xLjAuMy5iYjpQUiA9ICIke0lOQ19QUn0uMyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgbGluZSBvZiB0aGUgZXhhbXBsZSBlc3RhYmxpc2hlcyB0aGUgYmFzZWxpbmUKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb24gdG8gYmUgdXNlZCBmb3IgYWxsIHJlY2lwZXMgdGhhdCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlbWFpbmluZyBsaW5lcyBpbiB0aGUgZXhhbXBsZSBhcmUgZnJvbSBpbmRpdmlkdWFsCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMgYW5kIHNob3cgaG93IHRoZSA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPiB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBpcyBzZXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5DT01QQVRJQkxFX0xJQ0VOU0UnPjxnbG9zc3Rlcm0+SU5DT01QQVRJQkxFX0xJQ0VOU0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOQ09NUEFUSUJMRV9MSUNFTlNFW2RvY10gPSAiU3BlY2lmaWVzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbGljZW5zZSBuYW1lcyAoYXMgdGhleSB3b3VsZCBhcHBlYXIgaW4gTElDRU5TRSkgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSB0aGUgYnVpbGQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbGljZW5zZSBuYW1lcworICAgICAgICAgICAgICAgICAgICAoYXMgdGhleSB3b3VsZCBhcHBlYXIgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgUmVjaXBlcyB0aGF0IHByb3ZpZGUgbm8gYWx0ZXJuYXRpdmVzIHRvIGxpc3RlZCBpbmNvbXBhdGlibGUKKyAgICAgICAgICAgICAgICAgICAgbGljZW5zZXMgYXJlIG5vdCBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgdGhhdCBhcmUgaW5kaXZpZHVhbGx5IGxpY2Vuc2VkIHdpdGggdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICBpbmNvbXBhdGlibGUgbGljZW5zZXMgd2lsbCBiZSBkZWxldGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgb25seSByZWd1bGFybHkgdGVzdGVkIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgc2V0dGluZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkNPTVBBVElCTEVfTElDRU5TRSA9ICJHUEwtMy4wIExHUEwtMy4wIEFHUEwtMy4wIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFsdGhvdWdoIHlvdSBjYW4gdXNlIG90aGVyIHNldHRpbmdzLCB5b3UgbWlnaHQgYmUgcmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gcmVtb3ZlIGRlcGVuZGVuY2llcyBvbiBvciBwcm92aWRlIGFsdGVybmF0aXZlcyB0bworICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHByb2R1Y2UgYSBmdW5jdGlvbmFsIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTkhJQklUX0RFRkFVTFRfREVQUyc+PGdsb3NzdGVybT5JTkhJQklUX0RFRkFVTFRfREVQUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5ISUJJVF9ERUZBVUxUX0RFUFNbZG9jXSA9ICJQcmV2ZW50cyB0aGUgZGVmYXVsdCBkZXBlbmRlbmNpZXMsIG5hbWVseSB0aGUgQyBjb21waWxlciBhbmQgc3RhbmRhcmQgQyBsaWJyYXJ5IChsaWJjKSwgZnJvbSBiZWluZyBhZGRlZCB0byBERVBFTkRTLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFByZXZlbnRzIHRoZSBkZWZhdWx0IGRlcGVuZGVuY2llcywgbmFtZWx5IHRoZSBDIGNvbXBpbGVyCisgICAgICAgICAgICAgICAgICAgIGFuZCBzdGFuZGFyZCBDIGxpYnJhcnkgKGxpYmMpLCBmcm9tIGJlaW5nIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c3VhbGx5IHVzZWQgd2l0aGluIHJlY2lwZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSBhbnkgY29tcGlsYXRpb24gdXNpbmcgdGhlIEMgY29tcGlsZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldCB0aGUgdmFyaWFibGUgdG8gIjEiIHRvIHByZXZlbnQgdGhlIGRlZmF1bHQgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIGZyb20gYmVpbmcgYWRkZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUJz48Z2xvc3N0ZXJtPklOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5ISUJJVF9QQUNLQUdFX1NUUklQW2RvY10gPSAiSWYgc2V0IHRvICIxIiwgY2F1c2VzIHRoZSBidWlsZCB0byBub3Qgc3RyaXAgYmluYXJpZXMgaW4gcmVzdWx0aW5nIHBhY2thZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFByZXZlbnRzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGZyb20gc3BsaXR0aW5nCisgICAgICAgICAgICAgICAgICAgIG91dCBkZWJ1ZyBpbmZvcm1hdGlvbiBkdXJpbmcgcGFja2FnaW5nLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgYnVpbGQgc3lzdGVtIHNwbGl0cyBvdXQgZGVidWdnaW5nCisgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2UnPjxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBkZWJ1ZyBpbmZvcm1hdGlvbiBpcyBzcGxpdCBvdXQsCisgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUnPjxmaWxlbmFtZT5QQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBwcmV2ZW50IHRoZSBidWlsZCBzeXN0ZW0gZnJvbSBzcGxpdHRpbmcgb3V0CisgICAgICAgICAgICAgICAgICAgIGRlYnVnIGluZm9ybWF0aW9uIGR1cmluZyBwYWNrYWdpbmcsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVDwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUID0gIjEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTkhJQklUX1BBQ0tBR0VfU1RSSVAnPjxnbG9zc3Rlcm0+SU5ISUJJVF9QQUNLQUdFX1NUUklQPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTkhJQklUX1BBQ0tBR0VfU1RSSVBbZG9jXSA9ICJJZiBzZXQgdG8gIjEiLCBjYXVzZXMgdGhlIGJ1aWxkIHRvIG5vdCBzdHJpcCBiaW5hcmllcyBpbiByZXN1bHRpbmcgcGFja2FnZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvICIxIiwgY2F1c2VzIHRoZSBidWlsZCB0byBub3Qgc3RyaXAgYmluYXJpZXMgaW4gcmVzdWx0aW5nIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSEVSSVQnPjxnbG9zc3Rlcm0+SU5IRVJJVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5IRVJJVFtkb2NdID0gIkNhdXNlcyB0aGUgbmFtZWQgY2xhc3MgdG8gYmUgaW5oZXJpdGVkIGF0IHRoaXMgcG9pbnQgZHVyaW5nIHBhcnNpbmcuIFRoZSB2YXJpYWJsZSBpcyBvbmx5IHZhbGlkIGluIGNvbmZpZ3VyYXRpb24gZmlsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBuYW1lZCBjbGFzcyB0byBiZSBpbmhlcml0ZWQgYXQKKyAgICAgICAgICAgICAgICAgICAgdGhpcyBwb2ludCBkdXJpbmcgcGFyc2luZy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlzIG9ubHkgdmFsaWQgaW4gY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTkhFUklUX0RJU1RSTyc+PGdsb3NzdGVybT5JTkhFUklUX0RJU1RSTzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5IRVJJVF9ESVNUUk9bZG9jXSA9ICJMaXN0cyBjbGFzc2VzIHRoYXQgd2lsbCBiZSBpbmhlcml0ZWQgYXQgdGhlIGRpc3RyaWJ1dGlvbiBsZXZlbC4gSXQgaXMgdW5saWtlbHkgdGhhdCB5b3Ugd2FudCB0byBlZGl0IHRoaXMgdmFyaWFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgY2xhc3NlcyB0aGF0IHdpbGwgYmUgaW5oZXJpdGVkIGF0IHRoZQorICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24gbGV2ZWwuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIHVubGlrZWx5IHRoYXQgeW91IHdhbnQgdG8gZWRpdCB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgaXMgc2V0IGFzIGZvbGxvd3MgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUX0RJU1RSTyA/PSAiZGViaWFuIGRldnNoZWxsIHNzdGF0ZSBsaWNlbnNlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5JVFJBTUZTX0ZTVFlQRVMnPjxnbG9zc3Rlcm0+SU5JVFJBTUZTX0ZTVFlQRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOSVRSQU1GU19GU1RZUEVTW2RvY10gPSAiRGVmaW5lcyB0aGUgZm9ybWF0IGZvciB0aGUgb3V0cHV0IGltYWdlIG9mIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyYW1mcyksIHdoaWNoIGlzIHVzZWQgZHVyaW5nIGJvb3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgZm9ybWF0IGZvciB0aGUgb3V0cHV0IGltYWdlIG9mIGFuIGluaXRpYWwKKyAgICAgICAgICAgICAgICAgICAgUkFNIGRpc2sgKGluaXRyYW1mcyksIHdoaWNoIGlzIHVzZWQgZHVyaW5nIGJvb3QuCisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnRlZCBmb3JtYXRzIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBzdXBwb3J0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTklUUkFNRlNfSU1BR0UnPjxnbG9zc3Rlcm0+SU5JVFJBTUZTX0lNQUdFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTklUUkFNRlNfSU1BR0VbZG9jXSA9ICJDYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgYW4gYWRkaXRpb25hbCByZWNpcGUgYXMgYSBkZXBlbmRlbmN5IHRvIHlvdXIgcm9vdCBmaWxlc3lzdGVtIHJlY2lwZSAoZS5nLiBjb3JlLWltYWdlLXNhdG8pLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIENhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBidWlsZCBhbiBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBhcyBhIGRlcGVuZGVuY3kgdG8geW91ciByb290IGZpbGVzeXN0ZW0gcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIFRoZSBhZGRpdGlvbmFsIHJlY2lwZSBpcyB1c2VkIHRvIGNyZWF0ZSBhbiBpbml0aWFsIFJBTSBkaXNrCisgICAgICAgICAgICAgICAgICAgIChpbml0cmFtZnMpIHRoYXQgbWlnaHQgYmUgbmVlZGVkIGR1cmluZyB0aGUgaW5pdGlhbCBib290IG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgc3lzdGVtIHRvIGFjY29tcGxpc2ggc3VjaCB0aGluZ3MgYXMgbG9hZGluZworICAgICAgICAgICAgICAgICAgICBrZXJuZWwgbW9kdWxlcyBwcmlvciB0byBtb3VudGluZyB0aGUgcm9vdCBmaWxlIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3Ugc2V0IHRoZSB2YXJpYWJsZSwgc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW5pdHJhbWZzIHlvdSB3YW50IGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgd2hpY2ggaXMgc2V0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSwgY2F1c2VzCisgICAgICAgICAgICAgICAgICAgIGEgc2VwYXJhdGUgcmVjaXBlIHRvIGJlIGNyZWF0ZWQgdGhhdCByZXN1bHRzIGluIGFuCisgICAgICAgICAgICAgICAgICAgIGluaXRyYW1mcyBpbWFnZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvLWluaXRyYW1mcy5iYjwvZmlsZW5hbWU+IHRvIGJlCisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5JVFJBTUZTX0lNQUdFID0gImNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWtlcm5lbCc+PGZpbGVuYW1lPmtlcm5lbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBzZXRzIHRoaXMgdmFyaWFibGUgdG8gYSBudWxsIHN0cmluZyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSVRSQU1GU19JTUFHRSA9ICIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC9jZ2l0LmNnaS9wb2t5L3RyZWUvbWV0YS15b2N0by9jb25mL2xvY2FsLmNvbmYuc2FtcGxlLmV4dGVuZGVkJz48ZmlsZW5hbWU+bG9jYWwuY29uZi5zYW1wbGUuZXh0ZW5kZWQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyByZWZlcmVuY2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpL3Bva3kvdHJlZS9tZXRhL2NsYXNzZXMva2VybmVsLmJiY2xhc3MnPjxmaWxlbmFtZT5rZXJuZWwuYmJjbGFzczwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSB0byBzZWUgaG93IHRoZSB2YXJpYWJsZSBpcyB1c2VkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSVRSQU1GU19JTUFHRV9CVU5ETEUnPjxnbG9zc3Rlcm0+SU5JVFJBTUZTX0lNQUdFX0JVTkRMRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5JVFJBTUZTX0lNQUdFX0JVTkRMRVtkb2NdID0gIkNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBpbWFnZSByZWNpcGUgc3BlY2lmaWVkIGJ5IElOSVRSQU1GU19JTUFHRSBpcyBydW4gdGhyb3VnaCBhbiBleHRyYSBwYXNzIGR1cmluZyBrZXJuZWwgY29tcGlsYXRpb24gaW4gb3JkZXIgdG8gYnVpbGQgYSBzaW5nbGUgYmluYXJ5IHRoYXQgY29udGFpbnMgYm90aCB0aGUga2VybmVsIGltYWdlIGFuZCB0aGUgaW5pdGlhbCBSQU0gZGlzayAoaW5pdHJhbWZzKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDb250cm9scyB3aGV0aGVyIG9yIG5vdCB0aGUgaW1hZ2UgcmVjaXBlIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5JVFJBTUZTX0lNQUdFJz48ZmlsZW5hbWU+SU5JVFJBTUZTX0lNQUdFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHJ1biB0aHJvdWdoIGFuIGV4dHJhIHBhc3MgZHVyaW5nIGtlcm5lbCBjb21waWxhdGlvbgorICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciB0byBidWlsZCBhIHNpbmdsZSBiaW5hcnkgdGhhdCBjb250YWlucyBib3RoIHRoZQorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgaW1hZ2UgYW5kIHRoZSBpbml0aWFsIFJBTSBkaXNrIChpbml0cmFtZnMpLgorICAgICAgICAgICAgICAgICAgICBVc2luZyBhbiBleHRyYSBjb21waWxhdGlvbiBwYXNzIGVuc3VyZXMgdGhhdCB3aGVuIGEga2VybmVsCisgICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzIHRvIHVzZSBhbiBpbml0cmFtZnMsIGl0IGRvZXMgbm90IGVuY291bnRlcgorICAgICAgICAgICAgICAgICAgICBjaXJjdWxhciBkZXBlbmRlbmNpZXMgc2hvdWxkIHRoZSBpbml0cmFtZnMgaW5jbHVkZSBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvbWJpbmVkIGJpbmFyeSBpcyBkZXBvc2l0ZWQgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9kZXBsb3k8L2ZpbGVuYW1lPiBkaXJlY3RvcnksIHdoaWNoIGlzIHBhcnQKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhlIHZhcmlhYmxlIHRvICIxIiBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZSBjYXVzZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gbWFrZSB0aGUgZXh0cmEgcGFzcyBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAga2VybmVsIGNvbXBpbGF0aW9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSVRSQU1GU19JTUFHRV9CVU5ETEUgPSAiMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMta2VybmVsJz48ZmlsZW5hbWU+a2VybmVsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHNldHMgdGhpcyB2YXJpYWJsZSB0byBhIG51bGwgc3RyaW5nIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5JVFJBTUZTX0lNQUdFX0JVTkRMRSA9ICIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU5JVFJBTUZTX0lNQUdFX0JVTkRMRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGluCisgICAgICAgICAgICAgICAgICAgICAgICBhIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW5ub3Qgc2V0IHRoZSB2YXJpYWJsZSBpbiBhIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kvcG9reS90cmVlL21ldGEteW9jdG8vY29uZi9sb2NhbC5jb25mLnNhbXBsZS5leHRlbmRlZCc+PGZpbGVuYW1lPmxvY2FsLmNvbmYuc2FtcGxlLmV4dGVuZGVkPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBmaWxlIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSVRSRCc+PGdsb3NzdGVybT5JTklUUkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOSVRSRFtkb2NdID0gIkluZGljYXRlcyBhIGxpc3Qgb2YgZmlsZXN5c3RlbSBpbWFnZXMgdG8gY29uY2F0ZW5hdGUgYW5kIHVzZSBhcyBhbiBpbml0aWFsIFJBTSBkaXNrIChpbml0cmQpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyBsaXN0IG9mIGZpbGVzeXN0ZW0gaW1hZ2VzIHRvIGNvbmNhdGVuYXRlIGFuZCB1c2UKKyAgICAgICAgICAgICAgICAgICAgYXMgYW4gaW5pdGlhbCBSQU0gZGlzayAoPGZpbGVuYW1lPmluaXRyZDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5JTklUUkQ8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBhbiBvcHRpb25hbAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB1c2VkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJvb3RpbWcnPjxmaWxlbmFtZT5ib290aW1nPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSVRSRF9JTUFHRSc+PGdsb3NzdGVybT5JTklUUkRfSU1BR0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOSVRSRF9JTUFHRVtkb2NdID0gIldoZW4gYnVpbGRpbmcgYSAibGl2ZSIgYm9vdGFibGUgaW1hZ2UgKGkuZS4gd2hlbiBJTUFHRV9GU1RZUEVTIGNvbnRhaW5zICJsaXZlIiksIElOSVRSRF9JTUFHRSBzcGVjaWZpZXMgdGhlIGltYWdlIHJlY2lwZSB0aGF0IHNob3VsZCBiZSBidWlsdCB0byBwcm92aWRlIHRoZSBpbml0aWFsIFJBTSBkaXNrIGltYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgYSAibGl2ZSIgYm9vdGFibGUgaW1hZ2UgKGkuZS4gd2hlbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgImxpdmUiKSwgPGZpbGVuYW1lPklOSVRSRF9JTUFHRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0aGUgaW1hZ2UgcmVjaXBlIHRoYXQgc2hvdWxkIGJlIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgIHRvIHByb3ZpZGUgdGhlIGluaXRpYWwgUkFNIGRpc2sgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzICJjb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbWFnZS1saXZlJz48ZmlsZW5hbWU+aW1hZ2UtbGl2ZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTklUU0NSSVBUX05BTUUnPjxnbG9zc3Rlcm0+SU5JVFNDUklQVF9OQU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTklUU0NSSVBUX05BTUVbZG9jXSA9ICJUaGUgZmlsZW5hbWUgb2YgdGhlIGluaXRpYWxpemF0aW9uIHNjcmlwdCBhcyBpbnN0YWxsZWQgdG8gJHtzeXNjb25mZGlyfS9pbml0LmQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGVuYW1lIG9mIHRoZSBpbml0aWFsaXphdGlvbiBzY3JpcHQgYXMgaW5zdGFsbGVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke3N5c2NvbmZkaXJ9L2luaXQuZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gcmVjaXBlcyB3aGVuIHVzaW5nIDxmaWxlbmFtZT51cGRhdGUtcmMuZC5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyBtYW5kYXRvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5JVFNDUklQVF9QQUNLQUdFUyc+PGdsb3NzdGVybT5JTklUU0NSSVBUX1BBQ0tBR0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTklUU0NSSVBUX1BBQ0tBR0VTW2RvY10gPSAiQSBsaXN0IG9mIHRoZSBwYWNrYWdlcyB0aGF0IGNvbnRhaW4gaW5pdHNjcmlwdHMuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiByZWNpcGVzIHdoZW4gdXNpbmcgdXBkYXRlLXJjLmQuYmJjbGFzcy4gVGhlIHZhcmlhYmxlIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byB0aGUgUE4gdmFyaWFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHRoZSBwYWNrYWdlcyB0aGF0IGNvbnRhaW4gaW5pdHNjcmlwdHMuCisgICAgICAgICAgICAgICAgICAgIElmIG11bHRpcGxlIHBhY2thZ2VzIGFyZSBzcGVjaWZpZWQsIHlvdSBuZWVkIHRvIGFwcGVuZCB0aGUgcGFja2FnZSBuYW1lCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBvdGhlciA8ZmlsZW5hbWU+SU5JVFNDUklQVF8qPC9maWxlbmFtZT4gYXMgYW4gb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHJlY2lwZXMgd2hlbiB1c2luZyA8ZmlsZW5hbWU+dXBkYXRlLXJjLmQuYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSVRTQ1JJUFRfUEFSQU1TJz48Z2xvc3N0ZXJtPklOSVRTQ1JJUFRfUEFSQU1TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTklUU0NSSVBUX1BBUkFNU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgb3B0aW9ucyB0byBwYXNzIHRvIHVwZGF0ZS1yYy5kLiBUaGUgdmFyaWFibGUgaXMgbWFuZGF0b3J5IGFuZCBpcyB1c2VkIGluIHJlY2lwZXMgd2hlbiB1c2luZyB1cGRhdGUtcmMuZC5iYmNsYXNzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgb3B0aW9ucyB0byBwYXNzIHRvIDxmaWxlbmFtZT51cGRhdGUtcmMuZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTkgNSAyIC4gc3RvcCAyMCAwIDEgNiAuIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIHNjcmlwdCBoYXMgYSBydW5sZXZlbCBvZiA5OSwKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRzIHRoZSBzY3JpcHQgaW4gaW5pdGxldmVscyAyIGFuZCA1LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgc3RvcHMgdGhlIHNjcmlwdCBpbiBsZXZlbHMgMCwgMSBhbmQgNi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlJ3MgZGVmYXVsdCB2YWx1ZSBpcyAiZGVmYXVsdHMiLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVwZGF0ZS1yYy5kJz48ZmlsZW5hbWU+dXBkYXRlLXJjLmQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU5JVFNDUklQVF9QQVJBTVM8L2ZpbGVuYW1lPiBpcyBwYXNzZWQgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgPGZpbGVuYW1lPnVwZGF0ZS1yYy5kPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdmFsaWQgcGFyYW1ldGVycywgcGxlYXNlIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVwZGF0ZS1yYy5kPC9maWxlbmFtZT4gbWFudWFsIHBhZ2UgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy50aW4ub3JnL2Jpbi9tYW4uY2dpP3NlY3Rpb249OCZhbXA7dG9waWM9dXBkYXRlLXJjLmQnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOU0FORV9TS0lQJz48Z2xvc3N0ZXJtPklOU0FORV9TS0lQPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTlNBTkVfU0tJUFtkb2NdID0gIlNwZWNpZmllcyB0aGUgUUEgY2hlY2tzIHRvIHNraXAgZm9yIGEgc3BlY2lmaWMgcGFja2FnZSB3aXRoaW4gYSByZWNpcGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBRQSBjaGVja3MgdG8gc2tpcCBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBhIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIHNraXAgdGhlIGNoZWNrIGZvciBzeW1ib2xpYyBsaW5rCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBmaWxlcyBpbiB0aGUgbWFpbiBwYWNrYWdlIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlLCBhZGQgdGhlIGZvbGxvd2luZyB0byB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFja2FnZSBuYW1lIG92ZXJyaWRlIG11c3QgYmUgdXNlZCwgd2hpY2ggaW4gdGhpcworICAgICAgICAgICAgICAgICAgICBleGFtcGxlIGlzIDxmaWxlbmFtZT4ke1BOfTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtc28iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aW5zYW5lLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGEgbGlzdCBvZiB0aGUgdmFsaWQgUUEgY2hlY2tzIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB1c2luZyB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlQS19GRUVEX1VSSVMnPjxnbG9zc3Rlcm0+SVBLX0ZFRURfVVJJUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSVBLX0ZFRURfVVJJU1tkb2NdID0gIkxpc3Qgb2YgaXBrZyBmZWVkIHJlY29yZHMgdG8gcHV0IGludG8gZ2VuZXJhdGVkIGltYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIElQSyBiYWNrZW5kIGlzIGluIHVzZSBhbmQgcGFja2FnZSBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgIGlzIGVuYWJsZWQgb24gdGhlIHRhcmdldCwgeW91IGNhbiB1c2UgdGhpcyB2YXJpYWJsZSB0bworICAgICAgICAgICAgICAgICAgICBzZXQgdXAgPGZpbGVuYW1lPm9wa2c8L2ZpbGVuYW1lPiBpbiB0aGUgdGFyZ2V0IGltYWdlCisgICAgICAgICAgICAgICAgICAgIHRvIHBvaW50IHRvIHBhY2thZ2UgZmVlZHMgb24gYSBub21pbmF0ZWQgc2VydmVyLgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBmZWVkIGlzIGVzdGFibGlzaGVkLCB5b3UgY2FuIHBlcmZvcm0KKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9ucyBvciB1cGdyYWRlcyB1c2luZyB0aGUgcGFja2FnZSBtYW5hZ2VyCisgICAgICAgICAgICAgICAgICAgIGF0IHJ1bnRpbWUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCis8IS0tCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5URVJDRVBUX0RJUic+PGdsb3NzdGVybT5JTlRFUkNFUFRfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFuIGVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQgZGVmaW5lcyB0aGUgZGlyZWN0b3J5IHdoZXJlCisgICAgICAgICAgICAgICAgICAgIHBvc3QgaW5zdGFsbGF0aW9uIGhvb2tzIGFyZSBpbnN0YWxsZWQgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBwb3N0IGluc3RhbGwgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgZml4ZWQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAke1dPUktESVJ9L2ludGVyY2VwdF9zY3JpcHRzCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgdGFyZ2V0J3Mgcm9vdCBmaWxlc3lzdGVtLAorICAgICAgICAgICAgICAgICAgICBwb3N0IGluc3RhbGxhdGlvbiBzY3JpcHRzLCB3aGljaCBhcmUgZXNzZW50aWFsbHkgYmFzaCBzY3JpcHRzLAorICAgICAgICAgICAgICAgICAgICBhcmUgYWxsIGV4ZWN1dGVkIGp1c3QgYSBzaW5nbGUgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgTGltaXRpbmcgZXhlY3V0aW9uIG9mIHRoZXNlIHNjcmlwdHMgbWluaW1pemVzIGluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgICAgICB0aW1lIHRoYXQgd291bGQgYmUgbGVuZ3RoZW5lZCBkdWUgdG8gIGNlcnRhaW4gcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmluZyByZWR1bmRhbnQgb3BlcmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBpbnN0YWxsYXRpb24gb2YgZm9udCBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBhcyBhIGNvbW1vbiBleGFtcGxlLgorICAgICAgICAgICAgICAgICAgICBXaXRob3V0IGxpbWl0aW5nIHRoZSBleGVjdXRpb24gb2YgcG9zdCBpbnN0YWxsYXRpb24gc2NyaXB0cywKKyAgICAgICAgICAgICAgICAgICAgYWxsIGZvbnQgZGlyZWN0b3JpZXMgd291bGQgYmUgcmVzY2FubmVkIHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgY2FjaGUgYWZ0ZXIgZWFjaCBpbmRpdmlkdWFsIGZvbnQgcGFja2FnZSB3YXMgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgZWRpdCB0aGUgPGZpbGVuYW1lPklOVEVSQ0VQVF9ESVI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CistLT4KKworICAgIDwvZ2xvc3NkaXY+CisKKzwhLS0gICAgICAgICAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1qJz48dGl0bGU+SjwvdGl0bGU+LS0+Cis8IS0tICAgICAgICAgICAgPC9nbG9zc2Rpdj4tLT4KKworICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktayc+PHRpdGxlPks8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0FSQ0gnPjxnbG9zc3Rlcm0+S0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtBUkNIW2RvY10gPSAiRGVmaW5lcyB0aGUga2VybmVsIGFyY2hpdGVjdHVyZSB1c2VkIHdoZW4gYXNzZW1ibGluZyB0aGUgY29uZmlndXJhdGlvbi4gWW91IGRlZmluZSB0aGUgS0FSQ0ggdmFyaWFibGUgaW4gdGhlIEJTUCBEZXNjcmlwdGlvbnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUga2VybmVsIGFyY2hpdGVjdHVyZSB1c2VkIHdoZW4gYXNzZW1ibGluZworICAgICAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgQXJjaGl0ZWN0dXJlcyBzdXBwb3J0ZWQgZm9yIHRoaXMgcmVsZWFzZSBhcmU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcG93ZXJwYworICAgICBpMzg2CisgICAgIHg4Nl82NAorICAgICBhcm0KKyAgICAgcWVtdQorICAgICBtaXBzCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRlZmluZSB0aGUgPGZpbGVuYW1lPktBUkNIPC9maWxlbmFtZT4gdmFyaWFibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNic3AtZGVzY3JpcHRpb25zJz5CU1AgRGVzY3JpcHRpb25zPC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0JSQU5DSCc+PGdsb3NzdGVybT5LQlJBTkNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLQlJBTkNIW2RvY10gPSAiQSByZWd1bGFyIGV4cHJlc3Npb24gdXNlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyB0byBleHBsaWNpdGx5IGlkZW50aWZ5IHRoZSBrZXJuZWwgYnJhbmNoIHRoYXQgaXMgdmFsaWRhdGVkLCBwYXRjaGVkIGFuZCBjb25maWd1cmVkIGR1cmluZyBhIGJ1aWxkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgcmVndWxhciBleHByZXNzaW9uIHVzZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gZXhwbGljaXRseQorICAgICAgICAgICAgICAgICAgICBpZGVudGlmeSB0aGUga2VybmVsIGJyYW5jaCB0aGF0IGlzIHZhbGlkYXRlZCwgcGF0Y2hlZCwKKyAgICAgICAgICAgICAgICAgICAgYW5kIGNvbmZpZ3VyZWQgZHVyaW5nIGEgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGlzIHZhcmlhYmxlIHRvIGVuc3VyZSB0aGUgZXhhY3Qga2VybmVsCisgICAgICAgICAgICAgICAgICAgIGJyYW5jaCB5b3Ugd2FudCBpcyBiZWluZyB1c2VkIGJ5IHRoZSBidWlsZCBwcm9jZXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBWYWx1ZXMgZm9yIHRoaXMgdmFyaWFibGUgYXJlIHNldCBpbiB0aGUga2VybmVsJ3MgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGZpbGUgYW5kIHRoZSBrZXJuZWwncyBhcHBlbmQgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgaXMgYmFzZWQgb24gdGhlIExpbnV4IDMuMTQga2VybmVsLCB0aGUga2VybmVsIHJlY2lwZSBmaWxlCisgICAgICAgICAgICAgICAgICAgIGlzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgZm9yIGEga2VybmVsIHJlY2lwZSBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtCUkFOQ0ggPz0gInN0YW5kYXJkL2Jhc2UiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBhbHNvIHVzZWQgZnJvbSB0aGUga2VybmVsJ3MgYXBwZW5kIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgdG8gaWRlbnRpZnkgdGhlIGtlcm5lbCBicmFuY2ggc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgb3IgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICBUaGUga2VybmVsJ3MgYXBwZW5kIGZpbGUgaXMgbG9jYXRlZCBpbiB0aGUgQlNQIGxheWVyIGZvcgorICAgICAgICAgICAgICAgICAgICBhIGdpdmVuIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUga2VybmVsIGFwcGVuZCBmaWxlIGZvciB0aGUgRW1lbmxvdyBCU1AgaXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkgYW5kIGlzIG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWVtZW5sb3cvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0aGUgcmVsYXRlZCBzdGF0ZW1lbnRzIGZyb20gdGhlIGFwcGVuZCBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENPTVBBVElCTEVfTUFDSElORV9lbWVubG93LW5vZW1nZCA9ICJlbWVubG93LW5vZW1nZCIKKyAgICAgS01BQ0hJTkVfZW1lbmxvdy1ub2VtZ2QgPSAiZW1lbmxvdyIKKyAgICAgS0JSQU5DSF9lbWVubG93LW5vZW1nZCA9ICJzdGFuZGFyZC9iYXNlIgorICAgICBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX2VtZW5sb3ctbm9lbWdkID0gIiBmZWF0dXJlcy9kcm0tZ21hNTAwL2RybS1nbWE1MDAuc2NjIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPktCUkFOQ0g8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgaWRlbnRpZmllcworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGtlcm5lbCBicmFuY2ggdG8gdXNlIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBFbWVubG93CisgICAgICAgICAgICAgICAgICAgICAgICBCU1AuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0JVSUxEX0RFRkNPTkZJRyc+PGdsb3NzdGVybT5LQlVJTERfREVGQ09ORklHPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLQlVJTERfREVGQ09ORklHW2RvY10gPSAiU3BlY2lmaWVzIGFuICJpbi10cmVlIiBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB1c2UgZHVyaW5nIGEga2VybmVsIGJ1aWxkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1rZXJuZWwteW9jdG8nPjxmaWxlbmFtZT5rZXJuZWwteW9jdG88L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHNwZWNpZmllcyBhbiAiaW4tdHJlZSIga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgICAgICAgICBmb3IgdXNlIGR1cmluZyBhIGtlcm5lbCBidWlsZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB3aGVuIHVzaW5nIGEgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBhIGtlcm5lbCBkdXJpbmcgYSBidWlsZCwgeW91IHBsYWNlIHRoZQorICAgICAgICAgICAgICAgICAgICBmaWxlIGluIHlvdXIgbGF5ZXIgaW4gdGhlIHNhbWUgbWFubmVyIGFzIHlvdSB3b3VsZAorICAgICAgICAgICAgICAgICAgICBwYXRjaCBmaWxlcyBhbmQgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlcyAoaS5lLgorICAgICAgICAgICAgICAgICAgICAib3V0LW9mLXRyZWUiKS4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IHdhbnQgdG8gdXNlIGEgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgdGhhdCBpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgdHJlZSAoaS5lLiAiaW4tdHJlZSIpLAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktCVUlMRF9ERUZDT05GSUc8L2ZpbGVuYW1lPiB2YXJpYWJsZSB0byBwb2ludAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSB0aGUgdmFyaWFibGUsIHNldCBpdCBpbiB0aGUgYXBwZW5kIGZpbGUgZm9yIHlvdXIKKyAgICAgICAgICAgICAgICAgICAga2VybmVsIHJlY2lwZSB1c2luZyB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0JVSUxEX0RFRkNPTkZJR188bGluayBsaW5rZW5kPSd2YXItS01BQ0hJTkUnPktNQUNISU5FPC9saW5rPiA/PSA8cmVwbGFjZWFibGU+ZGVmY29uZmlnX2ZpbGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIGEgInJhc3BiZXJyeXBpMiIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT4gYnVpbGQgdGhhdCB1c2VzIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgImJjbTI3MDlfZGVmY29uZmlnIjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLQlVJTERfREVGQ09ORklHX3Jhc3BiZXJyeXBpMiA9ICJiY20yNzA5X2RlZmNvbmZpZyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBhbHRlcm5hdGl2ZSwgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB3aXRoaW4geW91cgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLQlVJTERfREVGQ09ORklHX3BuLWxpbnV4LXlvY3RvID89IDxyZXBsYWNlYWJsZT5kZWZjb25maWdfZmlsZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktCVUlMRF9ERUZDT05GSUc8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I3VzaW5nLWFuLWluLXRyZWUtZGVmY29uZmlnLWZpbGUnPlVzaW5nIGFuICJJbi1UcmVlIiA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gRmlsZTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUtFUk5FTF9DTEFTU0VTJz48Z2xvc3N0ZXJtPktFUk5FTF9DTEFTU0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLRVJORUxfQ0xBU1NFU1tkb2NdID0gIkEgbGlzdCBvZiBjbGFzc2VzIGRlZmluaW5nIGtlcm5lbCBpbWFnZSB0eXBlcyB0aGF0IGtlcm5lbCBjbGFzcyBzaG91bGQgaW5oZXJpdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgY2xhc3NlcyBkZWZpbmluZyBrZXJuZWwgaW1hZ2UgdHlwZXMgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMta2VybmVsJz48ZmlsZW5hbWU+a2VybmVsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHNob3VsZCBpbmhlcml0LgorICAgICAgICAgICAgICAgICAgICBZb3UgdHlwaWNhbGx5IGFwcGVuZCB0aGlzIHZhcmlhYmxlIHRvIGVuYWJsZSBleHRlbmRlZCBpbWFnZQorICAgICAgICAgICAgICAgICAgICB0eXBlcy4KKyAgICAgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSBpcyB0aGUgImtlcm5lbC1maXRpbWFnZSIsIHdoaWNoIGVuYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgZml0SW1hZ2Ugc3VwcG9ydCBhbmQgcmVzaWRlcyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2tlcm5lbC1maXRpbWFnZS5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gcmVnaXN0ZXIgY3VzdG9tIGtlcm5lbCBpbWFnZSB0eXBlcyB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsPC9maWxlbmFtZT4gY2xhc3MgdXNpbmcgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LRVJORUxfRVhUUkFfQVJHUyc+PGdsb3NzdGVybT5LRVJORUxfRVhUUkFfQVJHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgS0VSTkVMX0VYVFJBX0FSR1NbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBtYWtlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGFzc2VzIG9uIHdoZW4gY29tcGlsaW5nIHRoZSBrZXJuZWwuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFkZGl0aW9uYWwgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHBhc3NlcyBvbiB3aGVuIGNvbXBpbGluZyB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUtFUk5FTF9GRUFUVVJFUyc+PGdsb3NzdGVybT5LRVJORUxfRkVBVFVSRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtFUk5FTF9GRUFUVVJFU1tkb2NdID0gIkluY2x1ZGVzIGFkZGl0aW9uYWwgbWV0YWRhdGEgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgR2l0IHJlcG9zaXRvcnkuIFRoZSBtZXRhZGF0YSB5b3UgYWRkIHRocm91Z2ggdGhpcyB2YXJpYWJsZSBpbmNsdWRlcyBjb25maWcgZnJhZ21lbnRzIGFuZCBmZWF0dXJlcyBkZXNjcmlwdGlvbnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSW5jbHVkZXMgYWRkaXRpb25hbCBtZXRhZGF0YSBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0sIHRoZSBkZWZhdWx0IEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHByb3ZpZGVkIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1LTUFDSElORSc+PGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8bGluayBsaW5rZW5kPSd2YXItS0JSQU5DSCc+PGZpbGVuYW1lPktCUkFOQ0g8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIGZ1cnRoZXIKKyAgICAgICAgICAgICAgICAgICAgYWRkIG1ldGFkYXRhIGZvciBhbGwgQlNQcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1ldGFkYXRhIHlvdSBhZGQgdGhyb3VnaCB0aGlzIHZhcmlhYmxlIGluY2x1ZGVzIGNvbmZpZyBmcmFnbWVudHMgYW5kCisgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIGRlc2NyaXB0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggdXN1YWxseSBpbmNsdWRlcyBwYXRjaGVzIGFzIHdlbGwgYXMgY29uZmlnIGZyYWdtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgWW91IHR5cGljYWxseSBvdmVycmlkZSB0aGUgPGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGZvciBhIHNwZWNpZmljIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgd2F5LCB5b3UgY2FuIHByb3ZpZGUgdmFsaWRhdGVkLCBidXQgb3B0aW9uYWwsIHNldHMgb2Yga2VybmVsCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIGFuZCBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgYWRkcyA8ZmlsZW5hbWU+bmV0ZmlsdGVyPC9maWxlbmFtZT4gdG8gYWxsCisgICAgICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbHMgYW5kIGFkZHMgc291bmQgc3VwcG9ydCB0byB0aGUgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgQWRkIG5ldGZpbHRlciB0byBhbGwgbGludXgteW9jdG8ga2VybmVscworICAgICBLRVJORUxfRkVBVFVSRVM9ImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIgorCisgICAgICMgQWRkIHNvdW5kIHN1cHBvcnQgdG8gdGhlIHFlbXV4ODYgbWFjaGluZQorICAgICBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODY9IiBjZmcvc291bmQuc2NjIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0VSTkVMX0lNQUdFX0JBU0VfTkFNRSc+PGdsb3NzdGVybT5LRVJORUxfSU1BR0VfQkFTRV9OQU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLRVJORUxfSU1BR0VfQkFTRV9OQU1FW2RvY10gPSAiVGhlIGJhc2UgbmFtZSBvZiB0aGUga2VybmVsIGltYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIG5hbWUgb2YgdGhlIGtlcm5lbCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWtlcm5lbCc+a2VybmVsPC9saW5rPiBjbGFzcworICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtFUk5FTF9JTUFHRV9CQVNFX05BTUUgPz0gIiR7S0VSTkVMX0lNQUdFVFlQRX0tJHtQS0dFfS0ke1BLR1Z9LSR7UEtHUn0tJHtNQUNISU5FfS0ke0RBVEVUSU1FfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LRVJORUxfSU1BR0VUWVBFJz48ZmlsZW5hbWU+S0VSTkVMX0lNQUdFVFlQRTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR0UnPjxmaWxlbmFtZT5QS0dFPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEtHVic+PGZpbGVuYW1lPlBLR1Y8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dSJz48ZmlsZW5hbWU+UEtHUjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURBVEVUSU1FJz48ZmlsZW5hbWU+REFURVRJTUU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUtFUk5FTF9JTUFHRV9NQVhTSVpFJz48Z2xvc3N0ZXJtPktFUk5FTF9JTUFHRV9NQVhTSVpFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLRVJORUxfSU1BR0VfTUFYU0laRVtkb2NdID0gIlRoZSBtYXhpbXVtIGFsbG93YWJsZSBzaXplIGluIGtpbG9ieXRlcyBvZiB0aGUga2VybmVsIGltYWdlIGZpbGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGtlcm5lbCBpbWFnZSBmaWxlIGluCisgICAgICAgICAgICAgICAgICAgIGtpbG9ieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPktFUk5FTF9JTUFHRV9NQVhTSVpFPC9maWxlbmFtZT4gaXMgc2V0LAorICAgICAgICAgICAgICAgICAgICB0aGUgc2l6ZSBvZiB0aGUga2VybmVsIGltYWdlIGZpbGUgaXMgY2hlY2tlZCBhZ2FpbnN0CisgICAgICAgICAgICAgICAgICAgIHRoZSBzZXQgdmFsdWUgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3Mtc2l6ZWNoZWNrJz48ZmlsZW5hbWU+ZG9fc2l6ZWNoZWNrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgIFRoZSB0YXNrIGZhaWxzIGlmIHRoZSBrZXJuZWwgaW1hZ2UgZmlsZSBpcyBsYXJnZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICB0aGUgc2V0dGluZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktFUk5FTF9JTUFHRV9NQVhTSVpFPC9maWxlbmFtZT4gaXMgdXNlZnVsIGZvcgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgZGV2aWNlcyB0aGF0IGhhdmUgYSBsaW1pdGVkIGFtb3VudCBvZiBzcGFjZSBpbgorICAgICAgICAgICAgICAgICAgICB3aGljaCB0aGUga2VybmVsIGltYWdlIG11c3QgYmUgc3RvcmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHZhcmlhYmxlIGlzIG5vdCBzZXQsIHdoaWNoIG1lYW5zIHRoZQorICAgICAgICAgICAgICAgICAgICBzaXplIG9mIHRoZSBrZXJuZWwgaW1hZ2UgaXMgbm90IGNoZWNrZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0VSTkVMX0lNQUdFVFlQRSc+PGdsb3NzdGVybT5LRVJORUxfSU1BR0VUWVBFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLRVJORUxfSU1BR0VUWVBFW2RvY10gPSAiVGhlIHR5cGUgb2Yga2VybmVsIHRvIGJ1aWxkIGZvciBhIGRldmljZSwgdXN1YWxseSBzZXQgYnkgdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgZGVmYXVsdHMgdG8gJ3pJbWFnZScuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHR5cGUgb2Yga2VybmVsIHRvIGJ1aWxkIGZvciBhIGRldmljZSwgdXN1YWxseSBzZXQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgZGVmYXVsdHMgdG8gInpJbWFnZSIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZAorICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIHRoZSBrZXJuZWwgYW5kIGlzIHBhc3NlZCB0byA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IGFzIHRoZSB0YXJnZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgYnVpbGQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0VSTkVMX01PRFVMRV9BVVRPTE9BRCc+PGdsb3NzdGVybT5LRVJORUxfTU9EVUxFX0FVVE9MT0FEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLRVJORUxfTU9EVUxFX0FVVE9MT0FEW2RvY10gPSAiTGlzdHMga2VybmVsIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIGF1dG8tbG9hZGVkIGR1cmluZyBib290IgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMga2VybmVsIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIGF1dG8tbG9hZGVkIGR1cmluZworICAgICAgICAgICAgICAgICAgICBib290LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgcmVwbGFjZXMgdGhlIGRlcHJlY2F0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1tb2R1bGVfYXV0b2xvYWQnPjxmaWxlbmFtZT5tb2R1bGVfYXV0b2xvYWQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9BVVRPTE9BRDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFueXdoZXJlIHRoYXQgaXQgY2FuIGJlCisgICAgICAgICAgICAgICAgICAgIHJlY29nbml6ZWQgYnkgdGhlIGtlcm5lbCByZWNpcGUgb3IgYnkgYW4gb3V0LW9mLXRyZWUga2VybmVsCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZSByZWNpcGUgKGUuZy4gYSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZSwgYQorICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlLCBhbiBhcHBlbmQgZmlsZSBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSwgb3IgdGhlIHJlY2lwZSBpdHNlbGYpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5IGl0IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0VSTkVMX01PRFVMRV9BVVRPTE9BRCArPSAiPHJlcGxhY2VhYmxlPm1vZHVsZV9uYW1lMTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5tb2R1bGVfbmFtZTI8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+bW9kdWxlX25hbWUzPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW5jbHVkaW5nIDxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX0FVVE9MT0FEPC9maWxlbmFtZT4gY2F1c2VzCisgICAgICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHBvcHVsYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy9tb2R1bGVzLWxvYWQuZC9tb2RuYW1lLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlIHdpdGggdGhlIGxpc3Qgb2YgbW9kdWxlcyB0byBiZSBhdXRvLWxvYWRlZCBvbiBib290LgorICAgICAgICAgICAgICAgICAgICBUaGUgbW9kdWxlcyBhcHBlYXIgb25lLXBlci1saW5lIGluIHRoZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtFUk5FTF9NT0RVTEVfQVVUT0xPQUQgKz0gIjxyZXBsYWNlYWJsZT5tb2R1bGVfbmFtZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gcG9wdWxhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tb2RuYW1lLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1vZHByb2JlLmQ8L2ZpbGVuYW1lPiBzeW50YXggbGluZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9NT0RVTEVfUFJPQkVDT05GJz48ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9QUk9CRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0VSTkVMX01PRFVMRV9QUk9CRUNPTkYnPjxnbG9zc3Rlcm0+S0VSTkVMX01PRFVMRV9QUk9CRUNPTkY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtFUk5FTF9NT0RVTEVfUFJPQkVDT05GW2RvY10gPSAiTGlzdHMga2VybmVsIG1vZHVsZXMgZm9yIHdoaWNoIHRoZSBidWlsZCBzeXN0ZW0gZXhwZWN0cyB0byBmaW5kIG1vZHVsZV9jb25mXyogdmFsdWVzIHRoYXQgc3BlY2lmeSBjb25maWd1cmF0aW9uIGZvciBlYWNoIG9mIHRoZSBtb2R1bGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIGEgbGlzdCBvZiBtb2R1bGVzIGZvciB3aGljaCB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBleHBlY3RzIHRvIGZpbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1vZHVsZV9jb25mXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPm1vZG5hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgdGhhdCBzcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggb2YgdGhlIG1vZHVsZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gcHJvdmlkZSB0aG9zZSBtb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLW1vZHVsZV9jb25mJz48ZmlsZW5hbWU+bW9kdWxlX2NvbmZfKjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LRVJORUxfUEFUSCc+PGdsb3NzdGVybT5LRVJORUxfUEFUSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgS0VSTkVMX1BBVEhbZG9jXSA9ICJUaGUgbG9jYXRpb24gb2YgdGhlIGtlcm5lbCBzb3VyY2VzLiBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIFNUQUdJTkdfS0VSTkVMX0RJUiB3aXRoaW4gdGhlIG1vZHVsZSBjbGFzcyAobW9kdWxlLmJiY2xhc3MpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBvZiB0aGUga2VybmVsIHNvdXJjZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfS0VSTkVMX0RJUic+PGZpbGVuYW1lPlNUQUdJTkdfS0VSTkVMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLW1vZHVsZSc+PGZpbGVuYW1lPm1vZHVsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIHZhcmlhYmxlIGlzIHVzZWQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNpbmNvcnBvcmF0aW5nLW91dC1vZi10cmVlLW1vZHVsZXMnPkluY29ycG9yYXRpbmcgT3V0LW9mLVRyZWUgTW9kdWxlczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBoZWxwIG1heGltaXplIGNvbXBhdGliaWxpdHkgd2l0aCBvdXQtb2YtdHJlZSBkcml2ZXJzCisgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gYnVpbGQgbW9kdWxlcywgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYWxzbworICAgICAgICAgICAgICAgICAgICByZWNvZ25pemVzIGFuZCB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX1NSQyc+PGZpbGVuYW1lPktFUk5FTF9TUkM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGlzIGlkZW50aWNhbCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktFUk5FTF9QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEJvdGggdmFyaWFibGVzIGFyZSBjb21tb24gdmFyaWFibGVzIHVzZWQgYnkgZXh0ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgTWFrZWZpbGVzIHRvIHBvaW50IHRvIHRoZSBrZXJuZWwgc291cmNlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LRVJORUxfU1JDJz48Z2xvc3N0ZXJtPktFUk5FTF9TUkM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtFUk5FTF9TUkNbZG9jXSA9ICJUaGUgbG9jYXRpb24gb2YgdGhlIGtlcm5lbCBzb3VyY2VzLiBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIFNUQUdJTkdfS0VSTkVMX0RJUiB3aXRoaW4gdGhlIG1vZHVsZSBjbGFzcyAobW9kdWxlLmJiY2xhc3MpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBvZiB0aGUga2VybmVsIHNvdXJjZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfS0VSTkVMX0RJUic+PGZpbGVuYW1lPlNUQUdJTkdfS0VSTkVMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLW1vZHVsZSc+PGZpbGVuYW1lPm1vZHVsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIHZhcmlhYmxlIGlzIHVzZWQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNpbmNvcnBvcmF0aW5nLW91dC1vZi10cmVlLW1vZHVsZXMnPkluY29ycG9yYXRpbmcgT3V0LW9mLVRyZWUgTW9kdWxlczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBoZWxwIG1heGltaXplIGNvbXBhdGliaWxpdHkgd2l0aCBvdXQtb2YtdHJlZSBkcml2ZXJzCisgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gYnVpbGQgbW9kdWxlcywgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYWxzbworICAgICAgICAgICAgICAgICAgICByZWNvZ25pemVzIGFuZCB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX1BBVEgnPjxmaWxlbmFtZT5LRVJORUxfUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgd2hpY2ggaXMgaWRlbnRpY2FsIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX1NSQzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBCb3RoIHZhcmlhYmxlcyBhcmUgY29tbW9uIHZhcmlhYmxlcyB1c2VkIGJ5IGV4dGVybmFsCisgICAgICAgICAgICAgICAgICAgIE1ha2VmaWxlcyB0byBwb2ludCB0byB0aGUga2VybmVsIHNvdXJjZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0ZFQVRVUkVfREVTQ1JJUFRJT04nPjxnbG9zc3Rlcm0+S0ZFQVRVUkVfREVTQ1JJUFRJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtGRUFUVVJFX0RFU0NSSVBUSU9OW2RvY10gPSAiUHJvdmlkZXMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiBhIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuIFlvdSB1c2UgdGhpcyB2YXJpYWJsZSBpbiB0aGUgLnNjYyBmaWxlIHRoYXQgZGVzY3JpYmVzIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50LgorICAgICAgICAgICAgICAgICAgICBZb3UgdXNlIHRoaXMgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSB0aGF0IGRlc2NyaWJlcyBhIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgdmFyaWFibGUgdXNlZCBpbiBhIGZpbGUgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNtcC5zY2M8L2ZpbGVuYW1lPiB0byBkZXNjcmliZSBTTVAgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkZWZpbmUgS0ZFQVRVUkVfREVTQ1JJUFRJT04gIkVuYWJsZSBTTVAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LTUFDSElORSc+PGdsb3NzdGVybT5LTUFDSElORTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgS01BQ0hJTkVbZG9jXSA9ICJUaGUgbWFjaGluZSBhcyBrbm93biBieSB0aGUga2VybmVsLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtYWNoaW5lIGFzIGtub3duIGJ5IHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIFNvbWV0aW1lcyB0aGUgbWFjaGluZSBuYW1lIHVzZWQgYnkgdGhlIGtlcm5lbCBkb2VzIG5vdAorICAgICAgICAgICAgICAgICAgICBtYXRjaCB0aGUgbWFjaGluZSBuYW1lIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgbWFjaGluZSBuYW1lIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gdW5kZXJzdGFuZHMgYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUyLTMyLWludGVsLWNvbW1vbjwvZmlsZW5hbWU+IGdvZXMgYnkgYQorICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgbmFtZSBpbiB0aGUgTGludXggWW9jdG8ga2VybmVsLgorICAgICAgICAgICAgICAgICAgICBUaGUga2VybmVsIHVuZGVyc3RhbmRzIHRoYXQgbWFjaGluZSBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW50ZWwtY29yZTItMzI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGNhc2VzIGxpa2UgdGhlc2UsIHRoZSA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBtYXBzIHRoZSBrZXJuZWwgbWFjaGluZSBuYW1lIHRvIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIG1hY2hpbmUgbmFtZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgbWFwcGluZ3MgYmV0d2VlbiBkaWZmZXJlbnQgbmFtZXMgb2NjdXIgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIExpbnV4IEtlcm5lbCdzIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlIHRha2UgYSBsb29rIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJTlVYX1ZFUlNJT05fY29yZTItMzItaW50ZWwtY29tbW9uID0gIjMuMTkuMCIKKyAgICAgQ09NUEFUSUJMRV9NQUNISU5FX2NvcmUyLTMyLWludGVsLWNvbW1vbiA9ICIke01BQ0hJTkV9IgorICAgICBTUkNSRVZfbWV0YV9jb3JlMi0zMi1pbnRlbC1jb21tb24gPSAiODg5N2VmNjhiMzBlNzQyNmJjMWQzOTg5NWU3MWZiMTU1ZDY5NDk3NCIKKyAgICAgU1JDUkVWX21hY2hpbmVfY29yZTItMzItaW50ZWwtY29tbW9uID0gIjQzYjllY2VkOWJhOGE1N2FkZDM2YWYwNzczNjM0NGRjYzM4M2Y3MTEiCisgICAgIEtNQUNISU5FX2NvcmUyLTMyLWludGVsLWNvbW1vbiA9ICJpbnRlbC1jb3JlMi0zMiIKKyAgICAgS0JSQU5DSF9jb3JlMi0zMi1pbnRlbC1jb21tb24gPSAic3RhbmRhcmQvYmFzZSIKKyAgICAgS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9jb3JlMi0zMi1pbnRlbC1jb21tb24gPSAiJHtLRVJORUxfRkVBVFVSRVNfSU5URUxfQ09NTU9OfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT4gc3RhdGVtZW50IHNheXMgdGhhdAorICAgICAgICAgICAgICAgICAgICB0aGUga2VybmVsIHVuZGVyc3RhbmRzIHRoZSBtYWNoaW5lIG5hbWUgYXMKKyAgICAgICAgICAgICAgICAgICAgImludGVsLWNvcmUyLTMyIi4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdW5kZXJzdGFuZHMgdGhlCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgYXMgImNvcmUyLTMyLWludGVsLWNvbW1vbiIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LVFlQRSc+PGdsb3NzdGVybT5LVFlQRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgS1RZUEVbZG9jXSA9ICJEZWZpbmVzIHRoZSBrZXJuZWwgdHlwZSB0byBiZSB1c2VkIGluIGFzc2VtYmxpbmcgdGhlIGNvbmZpZ3VyYXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUga2VybmVsIHR5cGUgdG8gYmUgdXNlZCBpbiBhc3NlbWJsaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgbGludXgteW9jdG8gcmVjaXBlcyBkZWZpbmUgInN0YW5kYXJkIiwgInRpbnkiLAorICAgICAgICAgICAgICAgICAgICBhbmQgInByZWVtcHQtcnQiIGtlcm5lbCB0eXBlcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2tlcm5lbC10eXBlcyc+S2VybmVsIFR5cGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgIE1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBrZXJuZWwgdHlwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBkZWZpbmUgdGhlIDxmaWxlbmFtZT5LVFlQRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjYnNwLWRlc2NyaXB0aW9ucyc+QlNQIERlc2NyaXB0aW9uczwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgeW91IHVzZSBtdXN0IG1hdGNoIHRoZSB2YWx1ZSB1c2VkIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJTlVYX0tFUk5FTF9UWVBFJz48ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgdXNlZCBieSB0aGUga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktbCc+PHRpdGxlPkw8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEFCRUxTJz48Z2xvc3N0ZXJtPkxBQkVMUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTEFCRUxTW2RvY10gPSAiUHJvdmlkZXMgYSBsaXN0IG9mIHRhcmdldHMgZm9yIGF1dG9tYXRpYyBjb25maWd1cmF0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIGEgbGlzdCBvZiB0YXJnZXRzIGZvciBhdXRvbWF0aWMgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ncnViLWVmaSc+PGZpbGVuYW1lPmdydWItZWZpPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIHZhcmlhYmxlIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEFZRVJERVBFTkRTJz48Z2xvc3N0ZXJtPkxBWUVSREVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTEFZRVJERVBFTkRTW2RvY10gPSAiTGlzdHMgdGhlIGxheWVycywgc2VwYXJhdGVkIGJ5IHNwYWNlcywgdXBvbiB3aGljaCB0aGlzIHJlY2lwZSBkZXBlbmRzLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gdGhlIGNvbmYvbGF5ZXIuY29uZiBmaWxlIGFuZCBtdXN0IGJlIHN1ZmZpeGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmljIGxheWVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHRoZSBsYXllcnMgdGhhdCB0aGlzIHJlY2lwZSBkZXBlbmRzIHVwb24sIHNlcGFyYXRlZCBieSBzcGFjZXMuCisgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsbHksIHlvdSBjYW4gc3BlY2lmeSBhIHNwZWNpZmljIGxheWVyIHZlcnNpb24gZm9yIGEgZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgICAgICBieSBhZGRpbmcgaXQgdG8gdGhlIGVuZCBvZiB0aGUgbGF5ZXIgbmFtZSB3aXRoIGEgY29sb24sIChlLmcuICJhbm90aGVybGF5ZXI6MyIKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgY29tcGFyZWQgYWdhaW5zdAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTEFZRVJWRVJTSU9OJz48ZmlsZW5hbWU+TEFZRVJWRVJTSU9OPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPl9hbm90aGVybGF5ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIGNhc2UpLgorICAgICAgICAgICAgICAgICAgICBBbiBlcnJvciB3aWxsIGJlIHByb2R1Y2VkIGlmIGFueSBkZXBlbmRlbmN5IGlzIG1pc3Npbmcgb3IKKyAgICAgICAgICAgICAgICAgICAgdGhlIHZlcnNpb24gbnVtYmVycyBkbyBub3QgbWF0Y2ggZXhhY3RseSAoaWYgc3BlY2lmaWVkKS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICBhbmQgbXVzdCBiZSBzdWZmaXhlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzcGVjaWZpYyBsYXllciAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TEFZRVJERVBFTkRTX215bGF5ZXI8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEFZRVJESVInPjxnbG9zc3Rlcm0+TEFZRVJESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIExBWUVSRElSW2RvY10gPSAiV2hlbiB1c2VkIGluc2lkZSB0aGUgbGF5ZXIuY29uZiBjb25maWd1cmF0aW9uIGZpbGUsIHRoaXMgdmFyaWFibGUgcHJvdmlkZXMgdGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgbGF5ZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2VkIGluc2lkZSB0aGUgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZpbGUsIHRoaXMgdmFyaWFibGUgcHJvdmlkZXMgdGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgbm90IGF2YWlsYWJsZSBvdXRzaWRlIG9mIDxmaWxlbmFtZT5sYXllci5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIHJlZmVyZW5jZXMgYXJlIGV4cGFuZGVkIGltbWVkaWF0ZWx5IHdoZW4gcGFyc2luZyBvZiB0aGUgZmlsZSBjb21wbGV0ZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEFZRVJWRVJTSU9OJz48Z2xvc3N0ZXJtPkxBWUVSVkVSU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTEFZRVJWRVJTSU9OW2RvY10gPSAiT3B0aW9uYWxseSBzcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgYSBsYXllciBhcyBhIHNpbmdsZSBudW1iZXIuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgY29uZi9sYXllci5jb25mIGZpbGUgYW5kIG11c3QgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgc3BlY2lmaWMgbGF5ZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSBzcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgYSBsYXllciBhcyBhIHNpbmdsZSBudW1iZXIuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgd2l0aGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MQVlFUkRFUEVORFMnPjxmaWxlbmFtZT5MQVlFUkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGFub3RoZXIgbGF5ZXIgaW4gb3JkZXIgdG8gZGVwZW5kIG9uIGEgc3BlY2lmaWMgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgYW5kIG11c3QgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgc3BlY2lmaWMgbGF5ZXIgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxBWUVSVkVSU0lPTl9teWxheWVyPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxEJz48Z2xvc3N0ZXJtPkxEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMRFtkb2NdID0gIk1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgbGlua2VyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB1c2VkIHRvIHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgbGlua2VyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxERkxBR1MnPjxnbG9zc3Rlcm0+TERGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTERGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgbGlua2VyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgbGlua2VyLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGV4cG9ydGVkIHRvIGFuIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB0aHVzIG1hZGUgdmlzaWJsZSB0byB0aGUgc29mdHdhcmUgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgYnVpbHQgZHVyaW5nIHRoZSBjb21waWxhdGlvbiBzdGVwLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IGluaXRpYWxpemF0aW9uIGZvciA8ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmllcyBkZXBlbmRpbmcgb24gd2hhdCBpcyBiZWluZyBidWlsdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0xERkxBR1MnPjxmaWxlbmFtZT5UQVJHRVRfTERGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERfTERGTEFHUyc+PGZpbGVuYW1lPkJVSUxEX0xERkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdCAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxEU0RLX0xERkxBR1MnPjxmaWxlbmFtZT5CVUlMRFNES19MREZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgYW4gU0RLIChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkay08L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEVBRF9TT05BTUUnPjxnbG9zc3Rlcm0+TEVBRF9TT05BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIExFQURfU09OQU1FW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsZWFkIChvciBwcmltYXJ5KSBjb21waWxlZCBsaWJyYXJ5IGZpbGUgKC5zbykgdGhhdCB0aGUgZGViaWFuIGNsYXNzIGFwcGxpZXMgaXRzIG5hbWluZyBwb2xpY3kgdG8gZ2l2ZW4gYSByZWNpcGUgdGhhdCBwYWNrYWdlcyBtdWx0aXBsZSBsaWJyYXJpZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsZWFkIChvciBwcmltYXJ5KSBjb21waWxlZCBsaWJyYXJ5IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPikgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGViaWFuJz48ZmlsZW5hbWU+ZGViaWFuPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGFwcGxpZXMgaXRzIG5hbWluZyBwb2xpY3kgdG8gZ2l2ZW4gYSByZWNpcGUgdGhhdAorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBtdWx0aXBsZSBsaWJyYXJpZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgd29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlYmlhbjwvZmlsZW5hbWU+IGNsYXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxJQ19GSUxFU19DSEtTVU0nPjxnbG9zc3Rlcm0+TElDX0ZJTEVTX0NIS1NVTTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTElDX0ZJTEVTX0NIS1NVTVtkb2NdID0gIkNoZWNrc3VtcyBvZiB0aGUgbGljZW5zZSB0ZXh0IGluIHRoZSByZWNpcGUgc291cmNlIGNvZGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQ2hlY2tzdW1zIG9mIHRoZSBsaWNlbnNlIHRleHQgaW4gdGhlIHJlY2lwZSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSB0cmFja3MgY2hhbmdlcyBpbiBsaWNlbnNlIHRleHQgb2YgdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICBjb2RlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGUgbGljZW5zZSB0ZXh0IGlzIGNoYW5nZWQsIGl0IHdpbGwgdHJpZ2dlciBhIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUsIHdoaWNoIGdpdmVzIHRoZSBkZXZlbG9wZXIgYW4gb3Bwb3J0dW5pdHkgdG8gcmV2aWV3IGFueQorICAgICAgICAgICAgICAgICAgICBsaWNlbnNlIGNoYW5nZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBtdXN0IGJlIGRlZmluZWQgZm9yIGFsbCByZWNpcGVzICh1bmxlc3MKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byAiQ0xPU0VEIikuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZ3Bva3ktY29uZmlndXJpbmctTElDX0ZJTEVTX0NIS1NVTSc+CisgICAgICAgICAgICAgICAgICAgIFRyYWNraW5nIExpY2Vuc2UgQ2hhbmdlczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTElDRU5TRSc+PGdsb3NzdGVybT5MSUNFTlNFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMSUNFTlNFW2RvY10gPSAiVGhlIGxpc3Qgb2Ygc291cmNlIGxpY2Vuc2VzIGZvciB0aGUgcmVjaXBlLiBUaGUgbG9naWNhbCBvcGVyYXRvcnMgJmFtcDssICd8JywgYW5kIHBhcmVudGhlc2VzIGNhbiBiZSB1c2VkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG9mIHNvdXJjZSBsaWNlbnNlcyBmb3IgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIHJ1bGVzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvIG5vdCB1c2Ugc3BhY2VzIHdpdGhpbiBpbmRpdmlkdWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGljZW5zZSBuYW1lcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZXBhcmF0ZSBsaWNlbnNlIG5hbWVzIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAocGlwZSkgd2hlbiB0aGVyZSBpcyBhIGNob2ljZSBiZXR3ZWVuIGxpY2Vuc2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlcGFyYXRlIGxpY2Vuc2UgbmFtZXMgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYW1wOyAoYW1wZXJzYW5kKSB3aGVuIG11bHRpcGxlIGxpY2Vuc2VzIGV4aXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBjb3ZlciBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHNvdXJjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3UgY2FuIHVzZSBzcGFjZXMgYmV0d2VlbiBsaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIHN0YW5kYXJkIGxpY2Vuc2VzLCB1c2UgdGhlIG5hbWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGZpbGVzIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNQRFhMSUNFTlNFTUFQJz48ZmlsZW5hbWU+U1BEWExJQ0VOU0VNQVA8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIG5hbWVzIGRlZmluZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL2xpY2Vuc2VzLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElDRU5TRSA9ICJMR1BMdjIuMSB8IEdQTHYzIgorICAgICBMSUNFTlNFID0gIk1QTC0xICZhbXA7IExHUEx2Mi4xIgorICAgICBMSUNFTlNFID0gIkdQTHYyKyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgZXhhbXBsZSBpcyBmcm9tIHRoZSByZWNpcGVzIGZvciBRdCwgd2hpY2ggdGhlIHVzZXIKKyAgICAgICAgICAgICAgICAgICAgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHVuZGVyIGVpdGhlciB0aGUgTEdQTCB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIDIuMSBvciBHUEwgdmVyc2lvbiAzLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2Vjb25kIGV4YW1wbGUgaXMgZnJvbSBDYWlybyB3aGVyZSB0d28gbGljZW5zZXMgY292ZXIKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIGV4YW1wbGUgaXMgZnJvbSA8ZmlsZW5hbWU+c3lzc3RhdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBwcmVzZW50cyBhIHNpbmdsZSBsaWNlbnNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gc3BlY2lmeSBsaWNlbnNlcyBvbiBhIHBlci1wYWNrYWdlIGJhc2lzIHRvCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZSBzaXR1YXRpb25zIHdoZXJlIGNvbXBvbmVudHMgb2YgdGhlIG91dHB1dCBoYXZlCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBsaWNlbnNlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgcGllY2Ugb2Ygc29mdHdhcmUgd2hvc2UgY29kZSBpcworICAgICAgICAgICAgICAgICAgICBsaWNlbnNlZCB1bmRlciBHUEx2MiBidXQgaGFzIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uCisgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgMS4yIGNvdWxkCisgICAgICAgICAgICAgICAgICAgIGJlIHNwZWNpZmllZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ0VOU0UgPSAiR0ZETC0xLjIgJmFtcDsgR1BMdjIiCisgICAgIExJQ0VOU0VfJHtQTn0gPSAiR1BMdjIiCisgICAgIExJQ0VOU0VfJHtQTn0tZG9jID0gIkdGREwtMS4yIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTElDRU5TRV9GTEFHUyc+PGdsb3NzdGVybT5MSUNFTlNFX0ZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMSUNFTlNFX0ZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIGFkZGl0aW9uYWwgZmxhZ3MgZm9yIGEgcmVjaXBlIHlvdSBtdXN0IHdoaXRlbGlzdCB0aHJvdWdoIExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUIGluIG9yZGVyIHRvIGFsbG93IHRoZSByZWNpcGUgdG8gYmUgYnVpbHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFkZGl0aW9uYWwgZmxhZ3MgZm9yIGEgcmVjaXBlIHlvdSBtdXN0CisgICAgICAgICAgICAgICAgICAgIHdoaXRlbGlzdCB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNFTlNFX0ZMQUdTX1dISVRFTElTVCc+PGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGluIG9yZGVyIHRvIGFsbG93IHRoZSByZWNpcGUgdG8gYmUgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gcHJvdmlkaW5nIG11bHRpcGxlIGZsYWdzLCBzZXBhcmF0ZSB0aGVtIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgc3BhY2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhbHVlIGlzIGluZGVwZW5kZW50IG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNFTlNFJz48ZmlsZW5hbWU+TElDRU5TRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgaXMgdHlwaWNhbGx5IHVzZWQgdG8gbWFyayByZWNpcGVzIHRoYXQgbWlnaHQKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSBhZGRpdGlvbmFsIGxpY2Vuc2VzIGluIG9yZGVyIHRvIGJlIHVzZWQgaW4gYQorICAgICAgICAgICAgICAgICAgICBjb21tZXJjaWFsIHByb2R1Y3QuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdlbmFibGluZy1jb21tZXJjaWFsbHktbGljZW5zZWQtcmVjaXBlcyc+RW5hYmxpbmcgQ29tbWVyY2lhbGx5IExpY2Vuc2VkIFJlY2lwZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUJz48Z2xvc3N0ZXJtPkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMSUNFTlNFX0ZMQUdTX1dISVRFTElTVFtkb2NdID0gIkxpc3RzIGxpY2Vuc2UgZmxhZ3MgdGhhdCB3aGVuIHNwZWNpZmllZCBpbiBMSUNFTlNFX0ZMQUdTIHdpdGhpbiBhIHJlY2lwZSBzaG91bGQgbm90IHByZXZlbnQgdGhhdCByZWNpcGUgZnJvbSBiZWluZyBidWlsdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBsaWNlbnNlIGZsYWdzIHRoYXQgd2hlbiBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0VfRkxBR1MnPjxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBhIHJlY2lwZSBzaG91bGQgbm90IHByZXZlbnQgdGhhdCByZWNpcGUgZnJvbSBiZWluZworICAgICAgICAgICAgICAgICAgICBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBwcmFjdGljZSBpcyBvdGhlcndpc2Uga25vd24gYXMgIndoaXRlbGlzdGluZyIKKyAgICAgICAgICAgICAgICAgICAgbGljZW5zZSBmbGFncy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZW5hYmxpbmctY29tbWVyY2lhbGx5LWxpY2Vuc2VkLXJlY2lwZXMnPkVuYWJsaW5nIENvbW1lcmNpYWxseSBMaWNlbnNlZCBSZWNpcGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MSUNFTlNFX1BBVEgnPjxnbG9zc3Rlcm0+TElDRU5TRV9QQVRIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMSUNFTlNFX1BBVEhbZG9jXSA9ICJQYXRoIHRvIGFkZGl0aW9uYWwgbGljZW5zZXMgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBhdGggdG8gYWRkaXRpb25hbCBsaWNlbnNlcyB1c2VkIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgPGZpbGVuYW1lPkNPTU1PTl9MSUNFTlNFX0RJUjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRvIGRlZmluZSB0aGUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgY29tbW9uIGxpY2Vuc2UgdGV4dCB1c2VkIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+TElDRU5TRV9QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgYWxsb3dzIHlvdSB0byBleHRlbmQgdGhhdAorICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiB0byBvdGhlciBhcmVhcyB0aGF0IGhhdmUgYWRkaXRpb25hbCBsaWNlbnNlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFX1BBVEggKz0gIjxyZXBsYWNlYWJsZT5wYXRoLXRvLWFkZGl0aW9uYWwtY29tbW9uLWxpY2Vuc2VzPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MSU5VWF9LRVJORUxfVFlQRSc+PGdsb3NzdGVybT5MSU5VWF9LRVJORUxfVFlQRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTElOVVhfS0VSTkVMX1RZUEVbZG9jXSA9ICJEZWZpbmVzIHRoZSBrZXJuZWwgdHlwZSB0byBiZSB1c2VkIGluIGFzc2VtYmxpbmcgdGhlIGNvbmZpZ3VyYXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUga2VybmVsIHR5cGUgdG8gYmUgdXNlZCBpbiBhc3NlbWJsaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgbGludXgteW9jdG8gcmVjaXBlcyBkZWZpbmUgInN0YW5kYXJkIiwgInRpbnkiLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgInByZWVtcHQtcnQiIGtlcm5lbCB0eXBlcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2tlcm5lbC10eXBlcyc+S2VybmVsIFR5cGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgIE1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBrZXJuZWwgdHlwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+LCBpdCBkZWZhdWx0cyB0bworICAgICAgICAgICAgICAgICAgICAic3RhbmRhcmQiLgorICAgICAgICAgICAgICAgICAgICBUb2dldGhlciB3aXRoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LTUFDSElORSc+PGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPkxJTlVYX0tFUk5FTF9UWVBFPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcyB0aGUgc2VhcmNoCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyB1c2VkIGJ5IHRoZSBrZXJuZWwgdG9vbHMgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gd2l0aGluIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2l0aCB3aGljaCB0byBidWlsZCBvdXQgdGhlIHNvdXJjZXMgYW5kIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxJTlVYX1ZFUlNJT04nPjxnbG9zc3Rlcm0+TElOVVhfVkVSU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTElOVVhfVkVSU0lPTltkb2NdID0gIlRoZSBMaW51eCB2ZXJzaW9uIGZyb20ga2VybmVsLm9yZyBvbiB3aGljaCB0aGUgTGludXgga2VybmVsIGltYWdlIGJlaW5nIGJ1aWx0IHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGlzIGJhc2VkLiBZb3UgZGVmaW5lIHRoaXMgdmFyaWFibGUgaW4gdGhlIGtlcm5lbCByZWNpcGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIExpbnV4IHZlcnNpb24gZnJvbSA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9uIHdoaWNoIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2UgYmVpbmcgYnVpbHQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgYmFzZWQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBkZWZpbmUgdGhpcyB2YXJpYWJsZSBpbiB0aGUga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy40LmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAga2VybmVsIHJlY2lwZSBmb3VuZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMgdGhlIHZhcmlhYmxlcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJTlVYX1ZFUlNJT04gPz0gIjMuNC4yNCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkxJTlVYX1ZFUlNJT048L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyB1c2VkIHRvCisgICAgICAgICAgICAgICAgICAgIGRlZmluZSA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTElOVVhfVkVSU0lPTl9FWFRFTlNJT04nPjxnbG9zc3Rlcm0+TElOVVhfVkVSU0lPTl9FWFRFTlNJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIExJTlVYX1ZFUlNJT05fRVhURU5TSU9OW2RvY10gPSAiQSBzdHJpbmcgZXh0ZW5zaW9uIGNvbXBpbGVkIGludG8gdGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSBMaW51eCBrZXJuZWwgYnVpbHQgd2l0aCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4gWW91IGRlZmluZSB0aGlzIHZhcmlhYmxlIGluIHRoZSBrZXJuZWwgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgc3RyaW5nIGV4dGVuc2lvbiBjb21waWxlZCBpbnRvIHRoZSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIHN0cmluZyBvZiB0aGUgTGludXgga2VybmVsIGJ1aWx0IHdpdGggdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFlvdSBkZWZpbmUgdGhpcyB2YXJpYWJsZSBpbiB0aGUga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBsaW51eC15b2N0byBrZXJuZWwgcmVjaXBlcyBhbGwgZGVmaW5lCisgICAgICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJTlVYX1ZFUlNJT05fRVhURU5TSU9OID89ICIteW9jdG8tJHs8bGluayBsaW5rZW5kPSd2YXItTElOVVhfS0VSTkVMX1RZUEUnPkxJTlVYX0tFUk5FTF9UWVBFPC9saW5rPn0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5pbmcgdGhpcyB2YXJpYWJsZSBlc3NlbnRpYWxseSBzZXRzIHRoZQorICAgICAgICAgICAgICAgICAgICBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbiBpdGVtCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT05GSUdfTE9DQUxWRVJTSU9OPC9maWxlbmFtZT4sIHdoaWNoIGlzIHZpc2libGUKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgPGZpbGVuYW1lPnVuYW1lPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgc2hvd3MgdGhlIGV4dGVuc2lvbiBhc3N1bWluZyBpdAorICAgICAgICAgICAgICAgICAgICB3YXMgc2V0IGFzIHByZXZpb3VzbHkgc2hvd246CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB1bmFtZSAtcgorICAgICAzLjcuMC1yYzgtY3VzdG9tCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MT0dfRElSJz48Z2xvc3N0ZXJtPkxPR19ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIExPR19ESVJbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSB0byB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3cml0ZXMgb3ZlcmFsbCBsb2cgZmlsZXMuIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpcyAke1RNUERJUn0vbG9nIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgdG8gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gd3JpdGVzIG92ZXJhbGwgbG9nIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXMgPGZpbGVuYW1lPiR7VE1QRElSfS9sb2c8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBsb2dzIHNwZWNpZmljIHRvIGVhY2ggdGFzaywKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZSA8bGluayBsaW5rZW5kPSd2YXItVCc+PGZpbGVuYW1lPlQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LW0nPjx0aXRsZT5NPC90aXRsZT4KKworICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NQUNISU5FJz48Z2xvc3N0ZXJtPk1BQ0hJTkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1BQ0hJTkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHRhcmdldCBkZXZpY2UgZm9yIHdoaWNoIHRoZSBpbWFnZSBpcyBidWlsdC4gWW91IGRlZmluZSBNQUNISU5FIGluIHRoZSBjb25mL2xvY2FsLmNvbmYgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdGFyZ2V0IGRldmljZSBmb3Igd2hpY2ggdGhlIGltYWdlIGlzIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBZb3UgZGVmaW5lIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPiBpcyBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgInFlbXV4ODYiLCB3aGljaCBpcyBhbiB4ODYtYmFzZWQgYXJjaGl0ZWN0dXJlIG1hY2hpbmUgdG8KKyAgICAgICAgICAgICAgICAgICAgYmUgZW11bGF0ZWQgdXNpbmcgUUVNVToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBNQUNISU5FID89ICJxZW11eDg2IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBjb3JyZXNwb25kcyB0byBhIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBzYW1lIG5hbWUsIHRocm91Z2ggd2hpY2ggbWFjaGluZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgc2V0LgorICAgICAgICAgICAgICAgICAgICBUaHVzLCB3aGVuIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4gaXMgc2V0IHRvICJxZW11eDg2IiB0aGVyZQorICAgICAgICAgICAgICAgICAgICBleGlzdHMgdGhlIGNvcnJlc3BvbmRpbmcgPGZpbGVuYW1lPnFlbXV4ODYuY29uZjwvZmlsZW5hbWU+IG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlLCB3aGljaCBjYW4gYmUgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgb2YgbWFjaGluZXMgc3VwcG9ydGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IGFzCisgICAgICAgICAgICAgICAgICAgIHNoaXBwZWQgaW5jbHVkZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1BQ0hJTkUgPz0gInFlbXVhcm0iCisgICAgIE1BQ0hJTkUgPz0gInFlbXVhcm02NCIKKyAgICAgTUFDSElORSA/PSAicWVtdW1pcHMiCisgICAgIE1BQ0hJTkUgPz0gInFlbXVtaXBzNjQiCisgICAgIE1BQ0hJTkUgPz0gInFlbXVwcGMiCisgICAgIE1BQ0hJTkUgPz0gInFlbXV4ODYiCisgICAgIE1BQ0hJTkUgPz0gInFlbXV4ODYtNjQiCisgICAgIE1BQ0hJTkUgPz0gImdlbmVyaWN4ODYiCisgICAgIE1BQ0hJTkUgPz0gImdlbmVyaWN4ODYtNjQiCisgICAgIE1BQ0hJTkUgPz0gImJlYWdsZWJvbmUiCisgICAgIE1BQ0hJTkUgPz0gIm1wYzgzMTVlLXJkYiIKKyAgICAgTUFDSElORSA/PSAiZWRnZXJvdXRlciIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgbGFzdCBmaXZlIGFyZSBZb2N0byBQcm9qZWN0IHJlZmVyZW5jZSBoYXJkd2FyZSBib2FyZHMsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIGFyZSBwcm92aWRlZCBpbiB0aGUgPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPkFkZGluZyBhZGRpdGlvbmFsIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBsYXllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHlvdXIgY29uZmlndXJhdGlvbiBhZGRzIG5ldyBwb3NzaWJsZSBzZXR0aW5ncyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1BQ0hJTkVfQVJDSCc+PGdsb3NzdGVybT5NQUNISU5FX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1BQ0hJTkVfQVJDSFtkb2NdID0gIlNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgbWFjaGluZS1zcGVjaWZpYyBhcmNoaXRlY3R1cmUuIFRoaXMgdmFyaWFibGUgaXMgc2V0IGF1dG9tYXRpY2FsbHkgZnJvbSBNQUNISU5FIG9yIFRVTkVfUEtHQVJDSC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIG1hY2hpbmUtc3BlY2lmaWMgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHNldCBhdXRvbWF0aWNhbGx5IGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FX1BLR0FSQ0gnPjxmaWxlbmFtZT5UVU5FX1BLR0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgbm90IGhhbmQtZWRpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1BQ0hJTkVfQVJDSDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFMnPjxnbG9zc3Rlcm0+TUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTW2RvY10gPSAiQSBsaXN0IG9mIHJlcXVpcmVkIG1hY2hpbmUtc3BlY2lmaWMgcGFja2FnZXMgdG8gaW5zdGFsbCBhcyBwYXJ0IG9mIHRoZSBpbWFnZSBiZWluZyBidWlsdC4gQmVjYXVzZSB0aGlzIGlzIGEgJ21hY2hpbmUgZXNzZW50aWFsJyB2YXJpYWJsZSwgdGhlIGxpc3Qgb2YgcGFja2FnZXMgYXJlIGVzc2VudGlhbCBmb3IgdGhlIG1hY2hpbmUgdG8gYm9vdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgcmVxdWlyZWQgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIGltYWdlIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgcHJvY2VzcyBkZXBlbmRzIG9uIHRoZXNlIHBhY2thZ2VzIGJlaW5nIHByZXNlbnQuCisgICAgICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCBiZWNhdXNlIHRoaXMgaXMgYSAibWFjaGluZSBlc3NlbnRpYWwiIHZhcmlhYmxlLCB0aGUgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBhcmUgZXNzZW50aWFsIGZvciB0aGUgbWFjaGluZSB0byBib290LgorICAgICAgICAgICAgICAgICAgICBUaGUgaW1wYWN0IG9mIHRoaXMgdmFyaWFibGUgYWZmZWN0cyBpbWFnZXMgYmFzZWQgb24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jb3JlLWJvb3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gaW1hZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgc2ltaWxhciB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUyc+TUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhlIGltYWdlIGJlaW5nIGJ1aWx0IGhhcyBhIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgb24gdGhlIHZhcmlhYmxlJ3MgbGlzdCBvZiBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBpbWFnZSB3aWxsIG5vdCBidWlsZCBpZiBhIGZpbGUgaW4gdGhpcyBsaXN0IGlzIG5vdCBmb3VuZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSB0aGUgbWFjaGluZSBmb3Igd2hpY2ggeW91IGFyZSBidWlsZGluZyByZXF1aXJlcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXhhbXBsZS1pbml0PC9maWxlbmFtZT4gdG8gYmUgcnVuIGR1cmluZyBib290IHRvIGluaXRpYWxpemUgdGhlIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHlvdSB3b3VsZCB1c2UgdGhlIGZvbGxvd2luZyBpbiB0aGUgbWFjaGluZSdzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyArPSAiZXhhbXBsZS1pbml0IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUyc+PGdsb3NzdGVybT5NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgcmVjb21tZW5kZWQgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlIGltYWdlIGJlaW5nIGJ1aWx0LiBCZWNhdXNlIHRoaXMgaXMgYSAnbWFjaGluZSBlc3NlbnRpYWwnIHZhcmlhYmxlLCB0aGUgbGlzdCBvZiBwYWNrYWdlcyBhcmUgZXNzZW50aWFsIGZvciB0aGUgbWFjaGluZSB0byBib290LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiByZWNvbW1lbmRlZCBtYWNoaW5lLXNwZWNpZmljIHBhY2thZ2VzIHRvIGluc3RhbGwgYXMgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBwcm9jZXNzIGRvZXMgbm90IGRlcGVuZCBvbiB0aGVzZSBwYWNrYWdlcyBiZWluZyBwcmVzZW50LgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBiZWNhdXNlIHRoaXMgaXMgYSAibWFjaGluZSBlc3NlbnRpYWwiIHZhcmlhYmxlLCB0aGUgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBhcmUgZXNzZW50aWFsIGZvciB0aGUgbWFjaGluZSB0byBib290LgorICAgICAgICAgICAgICAgICAgICBUaGUgaW1wYWN0IG9mIHRoaXMgdmFyaWFibGUgYWZmZWN0cyBpbWFnZXMgYmFzZWQgb24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jb3JlLWJvb3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gaW1hZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgc2ltaWxhciB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyc+TUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhlIGltYWdlIGJlaW5nIGJ1aWx0IGRvZXMgbm90IGhhdmUgYSBidWlsZAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IG9uIHRoZSB2YXJpYWJsZSdzIGxpc3Qgb2YgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUgaW1hZ2Ugd2lsbCBzdGlsbCBidWlsZCBpZiBhIHBhY2thZ2UgaW4gdGhpcyBsaXN0IGlzIG5vdCBmb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB0aGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaGFuZGxlIGVzc2VudGlhbCBrZXJuZWwgbW9kdWxlcywgd2hvc2UKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBtYXkgYmUgc2VsZWN0ZWQgdG8gYmUgYnVpbHQgaW50byB0aGUga2VybmVsIHJhdGhlciB0aGFuIGFzIGEgbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICBpbiB3aGljaCBjYXNlIGEgcGFja2FnZSB3aWxsIG5vdCBiZSBwcm9kdWNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgYW4gZXhhbXBsZSB3aGVyZSB5b3UgaGF2ZSBhIGN1c3RvbSBrZXJuZWwgd2hlcmUgYSBzcGVjaWZpYyB0b3VjaHNjcmVlbgorICAgICAgICAgICAgICAgICAgICBkcml2ZXIgaXMgcmVxdWlyZWQgZm9yIHRoZSBtYWNoaW5lIHRvIGJlIHVzYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlIGRyaXZlciBjYW4gYmUgYnVpbHQgYXMgYSBtb2R1bGUgb3IKKyAgICAgICAgICAgICAgICAgICAgaW50byB0aGUga2VybmVsIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBkcml2ZXIgaXMgYnVpbHQgYXMgYSBtb2R1bGUsIHlvdSB3YW50IGl0IHRvIGJlIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgQnV0LCB3aGVuIHRoZSBkcml2ZXIgaXMgYnVpbHQgaW50byB0aGUga2VybmVsLCB5b3Ugc3RpbGwgd2FudCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgdG8gc3VjY2VlZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBzZXRzIHVwIGEgInJlY29tbWVuZHMiIHJlbGF0aW9uc2hpcCBzbyB0aGF0IGluIHRoZSBsYXR0ZXIgY2FzZSwKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHdpbGwgbm90IGZhaWwgZHVlIHRvIHRoZSBtaXNzaW5nIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcywgYXNzdW1pbmcgdGhlIHBhY2thZ2UgZm9yIHRoZSBtb2R1bGUgd2FzIGNhbGxlZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLW1vZHVsZS1hYjEyMzwvZmlsZW5hbWU+LCB5b3Ugd291bGQgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgaW4gdGhlIG1hY2hpbmUncyA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMgKz0gImtlcm5lbC1tb2R1bGUtYWIxMjMiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU29tZSBleGFtcGxlcyBvZiB0aGVzZSBtYWNoaW5lIGVzc2VudGlhbHMgYXJlIGZsYXNoLCBzY3JlZW4sIGtleWJvYXJkLCBtb3VzZSwKKyAgICAgICAgICAgICAgICAgICAgb3IgdG91Y2hzY3JlZW4gZHJpdmVycyAoZGVwZW5kaW5nIG9uIHRoZSBtYWNoaW5lKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUFDSElORV9FWFRSQV9SREVQRU5EUyc+PGdsb3NzdGVybT5NQUNISU5FX0VYVFJBX1JERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNQUNISU5FX0VYVFJBX1JERVBFTkRTW2RvY10gPSAiQSBsaXN0IG9mIG1hY2hpbmUtc3BlY2lmaWMgcGFja2FnZXMgdG8gaW5zdGFsbCBhcyBwYXJ0IG9mIHRoZSBpbWFnZSBiZWluZyBidWlsdCB0aGF0IGFyZSBub3QgZXNzZW50aWFsIGZvciB0aGUgbWFjaGluZSB0byBib290LiBIb3dldmVyLCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgbW9yZSBmdWxseS1mZWF0dXJlZCBpbWFnZXMgZGVwZW5kcyBvbiB0aGUgcGFja2FnZXMgYmVpbmcgcHJlc2VudC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGltYWdlIGJlaW5nIGJ1aWx0IHRoYXQgYXJlIG5vdCBlc3NlbnRpYWwgZm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBidWlsZCBwcm9jZXNzIGZvciBtb3JlIGZ1bGx5LWZlYXR1cmVkIGltYWdlcworICAgICAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIHRoZSBwYWNrYWdlcyBiZWluZyBwcmVzZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGFmZmVjdHMgYWxsIGltYWdlcyBiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWJhc2U8L2ZpbGVuYW1lPiwgd2hpY2ggZG9lcyBub3QgaW5jbHVkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT5jb3JlLWltYWdlLWZ1bGwtY21kbGluZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGltYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlzIHNpbWlsYXIgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyc+TUFDSElORV9FWFRSQV9SUkVDT01NRU5EUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQgaGFzIGEgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBvbiB0aGUgdmFyaWFibGUncyBsaXN0IG9mIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIGltYWdlIHdpbGwgbm90IGJ1aWxkIGlmIGEgZmlsZSBpbiB0aGlzIGxpc3QgaXMgbm90IGZvdW5kLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbiBleGFtcGxlIGlzIGEgbWFjaGluZSB0aGF0IGhhcyBXaUZpIGNhcGFiaWxpdHkgYnV0IGlzIG5vdAorICAgICAgICAgICAgICAgICAgICBlc3NlbnRpYWwgZm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEgbW9yZSBmdWxseS1mZWF0dXJlZCBpbWFnZSwgeW91IHdhbnQgdG8gZW5hYmxlCisgICAgICAgICAgICAgICAgICAgIHRoZSBXaUZpLgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFja2FnZSBjb250YWluaW5nIHRoZSBmaXJtd2FyZSBmb3IgdGhlIFdpRmkgaGFyZHdhcmUgaXMgYWx3YXlzCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkIHRvIGV4aXN0LCBzbyBpdCBpcyBhY2NlcHRhYmxlIGZvciB0aGUgYnVpbGQgcHJvY2VzcyB0byBkZXBlbmQgdXBvbgorICAgICAgICAgICAgICAgICAgICBmaW5kaW5nIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIGFzc3VtaW5nIHRoZSBwYWNrYWdlIGZvciB0aGUgZmlybXdhcmUgd2FzIGNhbGxlZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2lmaWRyaXZlci1maXJtd2FyZTwvZmlsZW5hbWU+LCB5b3Ugd291bGQgdXNlIHRoZSBmb2xsb3dpbmcgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGZpbGUgZm9yIHRoZSBtYWNoaW5lOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1BQ0hJTkVfRVhUUkFfUkRFUEVORFMgKz0gIndpZmlkcml2ZXItZmlybXdhcmUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMnPjxnbG9zc3Rlcm0+TUFDSElORV9FWFRSQV9SUkVDT01NRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTUFDSElORV9FWFRSQV9SUkVDT01NRU5EU1tkb2NdID0gIkEgbGlzdCBvZiBtYWNoaW5lLXNwZWNpZmljIHBhY2thZ2VzIHRvIGluc3RhbGwgYXMgcGFydCBvZiB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQgdGhhdCBhcmUgbm90IGVzc2VudGlhbCBmb3IgYm9vdGluZyB0aGUgbWFjaGluZS4gVGhlIGltYWdlIGJlaW5nIGJ1aWx0IGhhcyBubyBidWlsZCBkZXBlbmRlbmNpZXMgb24gdGhlIHBhY2thZ2VzIGluIHRoaXMgbGlzdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGltYWdlIGJlaW5nIGJ1aWx0IHRoYXQgYXJlIG5vdCBlc3NlbnRpYWwgZm9yIGJvb3RpbmcgdGhlIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBpbWFnZSBiZWluZyBidWlsdCBoYXMgbm8gYnVpbGQgZGVwZW5kZW5jeSBvbiB0aGlzIGxpc3Qgb2YgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYWZmZWN0cyBvbmx5IGltYWdlcyBiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWJhc2U8L2ZpbGVuYW1lPiwgd2hpY2ggZG9lcyBub3QgaW5jbHVkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT5jb3JlLWltYWdlLWZ1bGwtY21kbGluZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGltYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzaW1pbGFyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRVhUUkFfUkRFUEVORFMnPk1BQ0hJTkVfRVhUUkFfUkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhlIGltYWdlIGJlaW5nIGJ1aWx0IGRvZXMgbm90IGhhdmUgYSBidWlsZAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IG9uIHRoZSB2YXJpYWJsZSdzIGxpc3Qgb2YgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUgaW1hZ2Ugd2lsbCBidWlsZCBpZiBhIGZpbGUgaW4gdGhpcyBsaXN0IGlzIG5vdCBmb3VuZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSBpcyBhIG1hY2hpbmUgdGhhdCBoYXMgV2lGaSBjYXBhYmlsaXR5IGJ1dCBpcyBub3QgZXNzZW50aWFsCisgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgbWFjaGluZSB0byBib290IHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IGFyZSBidWlsZGluZyBhIG1vcmUgZnVsbHktZmVhdHVyZWQgaW1hZ2UsIHlvdSB3YW50IHRvIGVuYWJsZQorICAgICAgICAgICAgICAgICAgICBXaUZpLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBwYWNrYWdlIGNvbnRhaW5pbmcgdGhlIFdpRmkga2VybmVsIG1vZHVsZSB3aWxsIG5vdCBiZSBwcm9kdWNlZAorICAgICAgICAgICAgICAgICAgICBpZiB0aGUgV2lGaSBkcml2ZXIgaXMgYnVpbHQgaW50byB0aGUga2VybmVsLCBpbiB3aGljaCBjYXNlIHlvdSBzdGlsbCB3YW50IHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCB0byBzdWNjZWVkIGluc3RlYWQgb2YgZmFpbGluZyBhcyBhIHJlc3VsdCBvZiB0aGUgcGFja2FnZSBub3QgYmVpbmcgZm91bmQuCisgICAgICAgICAgICAgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcywgYXNzdW1pbmcgdGhlIHBhY2thZ2UgZm9yIHRoZSBtb2R1bGUgd2FzIGNhbGxlZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLW1vZHVsZS1leGFtcGxld2lmaTwvZmlsZW5hbWU+LCB5b3Ugd291bGQgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgaW4gdGhlIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGZpbGUgZm9yIHRoZSBtYWNoaW5lOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgKz0gImtlcm5lbC1tb2R1bGUtZXhhbXBsZXdpZmkiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVMnPjxnbG9zc3Rlcm0+TUFDSElORV9GRUFUVVJFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTUFDSElORV9GRUFUVVJFU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgbGlzdCBvZiBoYXJkd2FyZSBmZWF0dXJlcyB0aGUgTUFDSElORSBzdXBwb3J0cy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgaGFyZHdhcmUgZmVhdHVyZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC9saW5rPiBpcyBjYXBhYmxlCisgICAgICAgICAgICAgICAgICAgIG9mIHN1cHBvcnRpbmcuCisgICAgICAgICAgICAgICAgICAgIEZvciByZWxhdGVkIGluZm9ybWF0aW9uIG9uIGVuYWJsaW5nIGZlYXR1cmVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DT01CSU5FRF9GRUFUVVJFUyc+PGZpbGVuYW1lPkNPTUJJTkVEX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYSBsaXN0IG9mIGhhcmR3YXJlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgUHJvamVjdCBhcyBzaGlwcGVkLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtZmVhdHVyZXMtbWFjaGluZSc+TWFjaGluZSBGZWF0dXJlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTEwnPjxnbG9zc3Rlcm0+TUFDSElORV9GRUFUVVJFU19CQUNLRklMTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTUFDSElORV9GRUFUVVJFU19CQUNLRklMTFtkb2NdID0gIkZlYXR1cmVzIHRvIGJlIGFkZGVkIHRvIE1BQ0hJTkVfRkVBVFVSRVMgaWYgbm90IGFsc28gcHJlc2VudCBpbiBNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQuIFRoaXMgdmFyaWFibGUgaXMgc2V0IGluIHRoZSBtZXRhL2NvbmYvYml0YmFrZS5jb25mIGZpbGUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VyLWNvbmZpZ3VyYWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGZWF0dXJlcyB0byBiZSBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVMnPk1BQ0hJTkVfRkVBVFVSRVM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGFsc28gcHJlc2VudCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRCc+TUFDSElORV9GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9saW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHNldCBpbiB0aGUgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlci1jb25maWd1cmFibGUuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGJlc3QgdG8ganVzdCByZWZlcmVuY2UgdGhlIHZhcmlhYmxlIHRvIHNlZSB3aGljaCBtYWNoaW5lIGZlYXR1cmVzIGFyZQorICAgICAgICAgICAgICAgICAgICBiZWluZyBiYWNrZmlsbGVkIGZvciBhbGwgbWFjaGluZSBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0ncmVmLWZlYXR1cmVzLWJhY2tmaWxsJz5GZWF0dXJlIGJhY2tmaWxsaW5nPC9saW5rPiIgc2VjdGlvbiBmb3IKKyAgICAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQnPjxnbG9zc3Rlcm0+TUFDSElORV9GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRURbZG9jXSA9ICJGZWF0dXJlcyBmcm9tIE1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTEwgdGhhdCBzaG91bGQgbm90IGJlIGJhY2tmaWxsZWQgKGkuZS4gYWRkZWQgdG8gTUFDSElORV9GRUFUVVJFUykgZHVyaW5nIHRoZSBidWlsZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGZWF0dXJlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9GRUFUVVJFU19CQUNLRklMTCc+TUFDSElORV9GRUFUVVJFU19CQUNLRklMTDwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBub3QgYmUgYmFja2ZpbGxlZCAoaS5lLiBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVMnPk1BQ0hJTkVfRkVBVFVSRVM8L2xpbms+PC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J3JlZi1mZWF0dXJlcy1iYWNrZmlsbCc+RmVhdHVyZSBiYWNrZmlsbGluZzwvbGluaz4iIHNlY3Rpb24gZm9yCisgICAgICAgICAgICAgICAgICAgIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUFDSElORU9WRVJSSURFUyc+PGdsb3NzdGVybT5NQUNISU5FT1ZFUlJJREVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNQUNISU5FT1ZFUlJJREVTW2RvY10gPSAiTGlzdHMgb3ZlcnJpZGVzIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IG1hY2hpbmUuIEJ5IGRlZmF1bHQsIHRoaXMgbGlzdCBpbmNsdWRlcyB0aGUgdmFsdWUgb2YgTUFDSElORS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBvdmVycmlkZXMgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBsaXN0IGluY2x1ZGVzIHRoZSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBvZiA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPk1BQ0hJTkU8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZXh0ZW5kIHRoZSBsaXN0IHRvIGFwcGx5IHZhcmlhYmxlIG92ZXJyaWRlcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyBvZiBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGFsbCBRRU1VIGVtdWxhdGVkIG1hY2hpbmVzIChlLmcuIHFlbXVhcm0sCisgICAgICAgICAgICAgICAgICAgIHFlbXV4ODYsIGFuZCBzbyBmb3J0aCkgaW5jbHVkZSBhIGNvbW1vbiBmaWxlIG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdGhhdCBwcmVwZW5kcyA8ZmlsZW5hbWU+TUFDSElORU9WRVJSSURFUzwvZmlsZW5hbWU+IHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyB2YXJpYWJsZSBvdmVycmlkZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgIE1BQ0hJTkVPVkVSUklERVMgPS4gInFlbXVhbGw6IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFwcGx5aW5nIGFuIG92ZXJyaWRlIGxpa2UgPGZpbGVuYW1lPnFlbXVhbGw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhZmZlY3RzIGFsbCBRRU1VIGVtdWxhdGVkIG1hY2hpbmVzIGVsc2V3aGVyZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25ubWFuLWNvbmY8L2ZpbGVuYW1lPiByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBTUkNfVVJJX2FwcGVuZF9xZW11YWxsID0gImZpbGU6Ly93aXJlZC5jb25maWcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL3dpcmVkLXNldHVwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUFJTlRBSU5FUic+PGdsb3NzdGVybT5NQUlOVEFJTkVSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNQUlOVEFJTkVSW2RvY10gPSAiVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIGRpc3RyaWJ1dGlvbiBtYWludGFpbmVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSBkaXN0cmlidXRpb24gbWFpbnRhaW5lci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NSVJST1JTJz48Z2xvc3N0ZXJtPk1JUlJPUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1JUlJPUlNbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBwYXRocyBmcm9tIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGdldHMgc291cmNlIGNvZGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFkZGl0aW9uYWwgcGF0aHMgZnJvbSB3aGljaCB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBnZXRzIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBidWlsZCBzeXN0ZW0gc2VhcmNoZXMgZm9yIHNvdXJjZSBjb2RlLCBpdCBmaXJzdAorICAgICAgICAgICAgICAgICAgICB0cmllcyB0aGUgbG9jYWwgZG93bmxvYWQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBJZiB0aGF0IGxvY2F0aW9uIGZhaWxzLCB0aGUgYnVpbGQgc3lzdGVtIHRyaWVzIGxvY2F0aW9ucworICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgdGhlIHVwc3RyZWFtIHNvdXJjZSwgYW5kIHRoZW4gbG9jYXRpb25zIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TUlSUk9SUzwvZmlsZW5hbWU+IGluIHRoYXQgb3JkZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzc3VtaW5nIHlvdXIgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItRElTVFJPJz48ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICBpcyAicG9reSIsIHRoZSBkZWZhdWx0IHZhbHVlIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TUlSUk9SUzwvZmlsZW5hbWU+IGlzIGRlZmluZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2Rpc3Ryby9wb2t5LmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1MUFJFRklYJz48Z2xvc3N0ZXJtPk1MUFJFRklYPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNTFBSRUZJWFtkb2NdID0gIlNwZWNpZmllcyBhIHByZWZpeCBoYXMgYmVlbiBhZGRlZCB0byBQTiB0byBjcmVhdGUgYSBzcGVjaWFsIHZlcnNpb24gb2YgYSByZWNpcGUgb3IgcGFja2FnZSwgc3VjaCBhcyBhIE11bHRpbGliIHZlcnNpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgcHJlZml4IGhhcyBiZWVuIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+IHRvIGNyZWF0ZSBhIHNwZWNpYWwgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBvZiBhIHJlY2lwZSBvciBwYWNrYWdlLCBzdWNoIGFzIGEgTXVsdGlsaWIgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlzIHVzZWQgaW4gcGxhY2VzIHdoZXJlIHRoZSBwcmVmaXggbmVlZHMgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgYWRkZWQgdG8gb3IgcmVtb3ZlZCBmcm9tIGEgdGhlIG5hbWUgKGUuZy4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CUE4nPjxmaWxlbmFtZT5CUE48L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUpLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TUxQUkVGSVg8L2ZpbGVuYW1lPiBnZXRzIHNldCB3aGVuIGEgcHJlZml4IGhhcyBiZWVuCisgICAgICAgICAgICAgICAgICAgIGFkZGVkIHRvIDxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLW1vZHVsZV9hdXRvbG9hZCc+PGdsb3NzdGVybT5tb2R1bGVfYXV0b2xvYWQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIG1vZHVsZV9hdXRvbG9hZFtkb2NdID0gIlRoaXMgdmFyaWFibGUgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIEtFUk5FTF9NT0RVTEVfQVVUT0xPQUQgdmFyaWFibGUuIFlvdSBzaG91bGQgcmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMgb2YgbW9kdWxlX2F1dG9sb2FkIHdpdGggYWRkaXRpb25zIHRvIEtFUk5FTF9NT0RVTEVfQVVUT0xPQUQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktFUk5FTF9NT0RVTEVfQVVUT0xPQUQ8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCByZXBsYWNlIGFsbCBvY2N1cnJlbmNlcyBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bW9kdWxlX2F1dG9sb2FkPC9maWxlbmFtZT4gd2l0aCBhZGRpdGlvbnMgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktFUk5FTF9NT0RVTEVfQVVUT0xPQUQ8L2ZpbGVuYW1lPiwgZm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbW9kdWxlX2F1dG9sb2FkX3JmY29tbSA9ICJyZmNvbW0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIG5vdyBiZSByZXBsYWNlZCB3aXRoOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtFUk5FTF9NT0RVTEVfQVVUT0xPQUQgKz0gInJmY29tbSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LRVJORUxfTU9EVUxFX0FVVE9MT0FEJz48ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9BVVRPTE9BRDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1tb2R1bGVfY29uZic+PGdsb3NzdGVybT5tb2R1bGVfY29uZjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgbW9kdWxlX2NvbmZbZG9jXSA9ICJTcGVjaWZpZXMgbW9kcHJvYmUuZCBzeW50YXggbGluZXMgZm9yIGluY2x1c2lvbiBpbiB0aGUgL2V0Yy9tb2Rwcm9iZS5kL21vZG5hbWUuY29uZiBmaWxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGludXguZGllLm5ldC9tYW4vNS9tb2Rwcm9iZS5kJz48ZmlsZW5hbWU+bW9kcHJvYmUuZDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgc3ludGF4IGxpbmVzIGZvciBpbmNsdXNpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL21vZHByb2JlLmQvbW9kbmFtZS5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyB2YXJpYWJsZSBhbnl3aGVyZSB0aGF0IGl0IGNhbiBiZQorICAgICAgICAgICAgICAgICAgICByZWNvZ25pemVkIGJ5IHRoZSBrZXJuZWwgcmVjaXBlIG9yIG91dC1vZi10cmVlIGtlcm5lbAorICAgICAgICAgICAgICAgICAgICBtb2R1bGUgcmVjaXBlIChlLmcuIGEgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGUsIGEKKyAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZSwgYW4gYXBwZW5kIGZpbGUgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICByZWNpcGUsIG9yIHRoZSByZWNpcGUgaXRzZWxmKS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHVzZSB0aGlzIHZhcmlhYmxlLCB5b3UgbXVzdCBhbHNvIGJlIHN1cmUgdG8gbGlzdAorICAgICAgICAgICAgICAgICAgICB0aGUgbW9kdWxlIG5hbWUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LRVJORUxfTU9EVUxFX0FVVE9MT0FEJz48ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9BVVRPTE9BRDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgZ2VuZXJhbCBzeW50YXg6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbW9kdWxlX2NvbmZfPHJlcGxhY2VhYmxlPm1vZHVsZV9uYW1lPC9yZXBsYWNlYWJsZT4gPSAiPHJlcGxhY2VhYmxlPm1vZHByb2JlLmQtc3ludGF4PC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgdXNlIHRoZSBrZXJuZWwgbW9kdWxlIG5hbWUgb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFJ1biA8ZmlsZW5hbWU+bWFuIG1vZHByb2JlLmQ8L2ZpbGVuYW1lPiBpbiB0aGUgc2hlbGwgdG8KKyAgICAgICAgICAgICAgICAgICAgZmluZCBvdXQgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZXhhY3Qgc3ludGF4CisgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IHRvIHByb3ZpZGUgd2l0aCA8ZmlsZW5hbWU+bW9kdWxlX2NvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW5jbHVkaW5nIDxmaWxlbmFtZT5tb2R1bGVfY29uZjwvZmlsZW5hbWU+IGNhdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBwb3B1bGF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvbW9kcHJvYmUuZC9tb2RuYW1lLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlIHdpdGggPGZpbGVuYW1lPm1vZHByb2JlLmQ8L2ZpbGVuYW1lPiBzeW50YXggbGluZXMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGFkZHMgdGhlIG9wdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFyZzE8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmFyZzI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0byBhIG1vZHVsZSBuYW1lZCA8ZmlsZW5hbWU+bXltb2R1bGU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtb2R1bGVfY29uZl9teW1vZHVsZSA9ICJvcHRpb25zIG15bW9kdWxlIGFyZzE9dmFsMSBhcmcyPXZhbDIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzcGVjaWZ5IGtlcm5lbCBtb2R1bGVzIHRvCisgICAgICAgICAgICAgICAgICAgIGF1dG8tbG9hZCBvbiBib290LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LRVJORUxfTU9EVUxFX0FVVE9MT0FEJz48ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9BVVRPTE9BRDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NT0RVTEVfSU1BR0VfQkFTRV9OQU1FJz48Z2xvc3N0ZXJtPk1PRFVMRV9JTUFHRV9CQVNFX05BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1PRFVMRV9JTUFHRV9CQVNFX05BTUVbZG9jXSA9ICJUaGUgYmFzZSBuYW1lIG9mIHRoZSBrZXJuZWwgbW9kdWxlcyB0YXJiYWxsLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIG5hbWUgb2YgdGhlIGtlcm5lbCBtb2R1bGVzIHRhcmJhbGwuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgc2V0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1rZXJuZWwnPmtlcm5lbDwvbGluaz4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBNT0RVTEVfSU1BR0VfQkFTRV9OQU1FID89ICJtb2R1bGVzLSR7UEtHRX0tJHtQS0dWfS0ke1BLR1J9LSR7TUFDSElORX0tJHtEQVRFVElNRX0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEtHRSc+PGZpbGVuYW1lPlBLR0U8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dWJz48ZmlsZW5hbWU+UEtHVjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR1InPjxmaWxlbmFtZT5QS0dSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREFURVRJTUUnPjxmaWxlbmFtZT5EQVRFVElNRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTU9EVUxFX1RBUkJBTExfREVQTE9ZJz48Z2xvc3N0ZXJtPk1PRFVMRV9UQVJCQUxMX0RFUExPWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTU9EVUxFX1RBUkJBTExfREVQTE9ZW2RvY10gPSAiQ29udHJvbHMgY3JlYXRpb24gb2YgdGhlIG1vZHVsZXMtKi50Z3ogZmlsZS4gU2V0IHRoaXMgdmFyaWFibGUgdG8gIjAiIHRvIGRpc2FibGUgY3JlYXRpb24gb2YgdGhpcyBmaWxlLCB3aGljaCBjb250YWlucyBhbGwgb2YgdGhlIGtlcm5lbCBtb2R1bGVzIHJlc3VsdGluZyBmcm9tIGEga2VybmVsIGJ1aWxkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIGNyZWF0aW9uIG9mIHRoZSA8ZmlsZW5hbWU+bW9kdWxlcy0qLnRnejwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFNldCB0aGlzIHZhcmlhYmxlIHRvICIwIiB0byBkaXNhYmxlIGNyZWF0aW9uIG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgZmlsZSwgd2hpY2ggY29udGFpbnMgYWxsIG9mIHRoZSBrZXJuZWwgbW9kdWxlcyByZXN1bHRpbmcKKyAgICAgICAgICAgICAgICAgICAgZnJvbSBhIGtlcm5lbCBidWlsZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NVUxUSU1BQ0hfVEFSR0VUX1NZUyc+PGdsb3NzdGVybT5NVUxUSU1BQ0hfVEFSR0VUX1NZUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTVVMVElNQUNIX1RBUkdFVF9TWVNbZG9jXSA9ICJTZXBhcmF0ZXMgZmlsZXMgZm9yIGRpZmZlcmVudCBtYWNoaW5lcyBzdWNoIHRoYXQgeW91IGNhbiBidWlsZCBmb3IgbXVsdGlwbGUgdGFyZ2V0IG1hY2hpbmVzIHVzaW5nIHRoZSBzYW1lIG91dHB1dCBkaXJlY3Rvcmllcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTZXBhcmF0ZXMgZmlsZXMgZm9yIGRpZmZlcmVudCBtYWNoaW5lcyBzdWNoIHRoYXQgeW91IGNhbiBidWlsZAorICAgICAgICAgICAgICAgICAgICBmb3IgbXVsdGlwbGUgdGFyZ2V0IG1hY2hpbmVzIHVzaW5nIHRoZSBzYW1lIG91dHB1dCBkaXJlY3Rvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSA8bGluayBsaW5rZW5kPSd2YXItU1RBTVAnPjxmaWxlbmFtZT5TVEFNUDwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBmb3IgYW4gZXhhbXBsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktbic+PHRpdGxlPk48L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTkFUSVZFTFNCU1RSSU5HJz48Z2xvc3N0ZXJtPk5BVElWRUxTQlNUUklORzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTkFUSVZFTFNCU1RSSU5HW2RvY10gPSAiQSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGhvc3QgZGlzdHJpYnV0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBob3N0IGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICAgICAgU3RyaW5ncyBjb25zaXN0IG9mIHRoZSBob3N0IGRpc3RyaWJ1dG9yIElECisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2VkIGJ5IHRoZSByZWxlYXNlLCBhcyByZXBvcnRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxzYl9yZWxlYXNlPC9maWxlbmFtZT4gdG9vbAorICAgICAgICAgICAgICAgICAgICBvciBhcyByZWFkIGZyb20gPGZpbGVuYW1lPi9ldGMvbHNiLXJlbGVhc2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHdoZW4gcnVubmluZyBhIGJ1aWxkIG9uIFVidW50dSAxMi4xMCwgdGhlIHZhbHVlCisgICAgICAgICAgICAgICAgICAgIGlzICJVYnVudHUtMTIuMTAiLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGlzIGluZm9ybWF0aW9uIGlzIHVuYWJsZSB0byBiZSBkZXRlcm1pbmVkLCB0aGUgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXMgdG8gIlVua25vd24iLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgYnkgZGVmYXVsdCB0byBpc29sYXRlIG5hdGl2ZSBzaGFyZWQKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgcGFja2FnZXMgZm9yIGRpZmZlcmVudCBkaXN0cmlidXRpb25zIChlLmcuIHRvIGF2b2lkCisgICAgICAgICAgICAgICAgICAgIHByb2JsZW1zIHdpdGggPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4gdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBpbmNvbXBhdGliaWxpdGllcykuCisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIHZhcmlhYmxlIGlzIGNoZWNrZWQgYWdhaW5zdAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0FOSVRZX1RFU1RFRF9ESVNUUk9TJz48ZmlsZW5hbWU+U0FOSVRZX1RFU1RFRF9ESVNUUk9TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlmIHRoYXQgdmFyaWFibGUgaXMgc2V0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU5NJz48Z2xvc3N0ZXJtPk5NPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBOTVtkb2NdID0gIk1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biAnbm0nLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5tPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTk9fUkVDT01NRU5EQVRJT05TJz48Z2xvc3N0ZXJtPk5PX1JFQ09NTUVOREFUSU9OUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTk9fUkVDT01NRU5EQVRJT05TW2RvY10gPSAiV2hlbiBzZXQgdG8gJzEnLCBubyByZWNvbW1lbmRlZCBwYWNrYWdlcyB3aWxsIGJlIGluc3RhbGxlZC4gUmVhbGl6ZSB0aGF0IHNvbWUgcmVjb21tZW5kZWQgcGFja2FnZXMgbWlnaHQgYmUgcmVxdWlyZWQgZm9yIGNlcnRhaW4gc3lzdGVtIGZ1bmN0aW9uYWxpdHksIHN1Y2ggYXMga2VybmVsLW1vZHVsZXMuIEl0IGlzIHVwIHRvIHRoZSB1c2VyIHRvIGFkZCBwYWNrYWdlcyB0byBJTUFHRV9JTlNUQUxMIGFzIG5lZWRlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQcmV2ZW50cyBpbnN0YWxsYXRpb24gb2YgYWxsICJyZWNvbW1lbmRlZC1vbmx5IiBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgUmVjb21tZW5kZWQtb25seSBwYWNrYWdlcyBhcmUgcGFja2FnZXMgaW5zdGFsbGVkIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUpLgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoZSA8ZmlsZW5hbWU+Tk9fUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgdG8gIjEiIHR1cm5zIHRoaXMgZmVhdHVyZSBvbjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBOT19SRUNPTU1FTkRBVElPTlMgPSAiMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIGdsb2JhbGx5IGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIHlvdSBjYW4gYXR0YWNoIGl0IHRvCisgICAgICAgICAgICAgICAgICAgIGEgc3BlY2lmaWMgaW1hZ2UgcmVjaXBlIGJ5IHVzaW5nIHRoZSByZWNpcGUgbmFtZSBvdmVycmlkZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBOT19SRUNPTU1FTkRBVElPTlNfcG4tPHJlcGxhY2VhYmxlPnRhcmdldF9pbWFnZTwvcmVwbGFjZWFibGU+ID0gIjxyZXBsYWNlYWJsZT5wYWNrYWdlX25hbWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB0aGF0IGlmIHlvdSBjaG9vc2UgdG8gbm90IGluc3RhbGwKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgdXNpbmcgdGhpcyB2YXJpYWJsZSBhbmQgc29tZSBvdGhlciBwYWNrYWdlcyBhcmUKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW50IG9uIHRoZW0gKGkuZS4gbGlzdGVkIGluIGEgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUpLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpZ25vcmVzIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCBhbmQgd2lsbCBpbnN0YWxsIHRoZSBwYWNrYWdlcyB0byBhdm9pZCBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgICAgIGVycm9ycy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBTb21lIHJlY29tbWVuZGVkIHBhY2thZ2VzIG1pZ2h0IGJlIHJlcXVpcmVkIGZvciBjZXJ0YWluCisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gZnVuY3Rpb25hbGl0eSwgc3VjaCBhcyBrZXJuZWwgbW9kdWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHVwIHRvIHlvdSB0byBhZGQgcGFja2FnZXMgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgdGhpcyB2YXJpYWJsZSBleGlzdHMgb25seSB3aGVuIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBJUEsgYW5kIFJQTSBwYWNrYWdpbmcgYmFja2VuZC4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBkb2VzIG5vdCBleGlzdCBmb3IgREVCLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQURfUkVDT01NRU5EQVRJT05TJz48ZmlsZW5hbWU+QkFEX1JFQ09NTUVOREFUSU9OUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0VYQ0xVREUnPjxmaWxlbmFtZT5QQUNLQUdFX0VYQ0xVREU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIGZvciByZWxhdGVkIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU5PSEREJz48Z2xvc3N0ZXJtPk5PSEREPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBOT0hERFtkb2NdID0gIkNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBza2lwIGJ1aWxkaW5nIHRoZSAuaGRkaW1nIGltYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIENhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBza2lwIGJ1aWxkaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmhkZGltZzwvZmlsZW5hbWU+IGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPk5PSEREPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgdXNlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ib290aW1nJz48ZmlsZW5hbWU+Ym9vdGltZzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSB2YXJpYWJsZSB0byAiMSIgdG8gcHJldmVudCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5oZGRpbWc8L2ZpbGVuYW1lPiBpbWFnZSBmcm9tIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU5PSVNPJz48Z2xvc3N0ZXJtPk5PSVNPPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBOT0lTT1tkb2NdID0gIkNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBza2lwIGJ1aWxkaW5nIHRoZSBJU08gaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHNraXAgYnVpbGRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIElTTyBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5OT0lTTzwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHVzZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYm9vdGltZyc+PGZpbGVuYW1lPmJvb3RpbWc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIFNldCB0aGUgdmFyaWFibGUgdG8gIjEiIHRvIHByZXZlbnQgdGhlIElTTyBpbWFnZSBmcm9tCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBUbyBlbmFibGUgYnVpbGRpbmcgYW4gSVNPIGltYWdlLCBzZXQgdGhlIHZhcmlhYmxlIHRvICIwIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktbyc+PHRpdGxlPk88L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItT0JKQ09QWSc+PGdsb3NzdGVybT5PQkpDT1BZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBPQkpDT1BZW2RvY10gPSAiTWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdvYmpjb3B5Jy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vYmpjb3B5PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItT0JKRFVNUCc+PGdsb3NzdGVybT5PQkpEVU1QPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBPQkpEVU1QW2RvY10gPSAiTWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdvYmpkdW1wJy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vYmpkdW1wPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItT0VfQklOQ09ORklHX0VYVFJBX01BTkdMRSc+PGdsb3NzdGVybT5PRV9CSU5DT05GSUdfRVhUUkFfTUFOR0xFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBPRV9CSU5DT05GSUdfRVhUUkFfTUFOR0xFW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgYmluY29uZmlnLmJiY2xhc3MgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGFkZGl0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgInNlZCIgY29tbWFuZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJpbmNvbmZpZyc+PGZpbGVuYW1lPmJpbmNvbmZpZzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYWRkaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSAic2VkIiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2VkIGNvbW1hbmQgYWx0ZXJzIGFueSBwYXRocyBpbiBjb25maWd1cmF0aW9uIHNjcmlwdHMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBoYXZlIGJlZW4gc2V0IHVwIGR1cmluZyBjb21waWxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSW5oZXJpdGluZyB0aGlzIGNsYXNzIHJlc3VsdHMgaW4gYWxsIHBhdGhzIGluIHRoZXNlIHNjcmlwdHMKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgY2hhbmdlZCB0byBwb2ludCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzcm9vdHMvPC9maWxlbmFtZT4gZGlyZWN0b3J5IHNvIHRoYXQgYWxsIGJ1aWxkcworICAgICAgICAgICAgICAgICAgICB0aGF0IHVzZSB0aGUgc2NyaXB0IHdpbGwgdXNlIHRoZSBjb3JyZWN0IGRpcmVjdG9yaWVzCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgY3Jvc3MgY29tcGlsaW5nIGxheW91dC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2JpbmNvbmZpZy5iYmNsYXNzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgZGV0YWlscyBvbiBob3cgdGhpcyBjbGFzcyBhcHBsaWVzIHRoZXNlIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgc2VkIGNvbW1hbmQgYXJndW1lbnRzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpbmNvbmZpZy5iYmNsYXNzPC9maWxlbmFtZT4gY2xhc3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJpbmNvbmZpZyc+QmluYXJ5IENvbmZpZ3VyYXRpb24gU2NyaXB0cyAtIDxmaWxlbmFtZT5iaW5jb25maWcuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1PRV9JTVBPUlRTJz48Z2xvc3N0ZXJtPk9FX0lNUE9SVFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE9FX0lNUE9SVFNbZG9jXSA9ICJBbiBpbnRlcm5hbCB2YXJpYWJsZSB1c2VkIHRvIHRlbGwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2hhdCBQeXRob24gbW9kdWxlcyB0byBpbXBvcnQgZm9yIGV2ZXJ5IFB5dGhvbiBmdW5jdGlvbiBydW4gYnkgdGhlIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBbiBpbnRlcm5hbCB2YXJpYWJsZSB1c2VkIHRvIHRlbGwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gd2hhdCBQeXRob24gbW9kdWxlcyB0byBpbXBvcnQgZm9yIGV2ZXJ5IFB5dGhvbgorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBydW4gYnkgdGhlIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRG8gbm90IHNldCB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItT0VfVEVSTUlOQUwnPjxnbG9zc3Rlcm0+T0VfVEVSTUlOQUw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE9FX1RFUk1JTkFMW2RvY10gPSAiQ29udHJvbHMgaG93IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHNwYXducyBpbnRlcmFjdGl2ZSB0ZXJtaW5hbHMgb24gdGhlIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIGhvdyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzcGF3bnMKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUgdGVybWluYWxzIG9uIHRoZSBob3N0IGRldmVsb3BtZW50IHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAoZS5nLiB1c2luZyB0aGUgQml0QmFrZSBjb21tYW5kIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tYyBkZXZzaGVsbDwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZSBvcHRpb24pLgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGxhdGRldi1hcHBkZXYtZGV2c2hlbGwnPlVzaW5nIGEgRGV2ZWxvcG1lbnQgU2hlbGw8L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+T0VfVEVSTUlOQUw8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBhdXRvCisgICAgIGdub21lCisgICAgIHhmY2UKKyAgICAgcnh2dAorICAgICBzY3JlZW4KKyAgICAga29uc29sZQorICAgICBub25lCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1PRVJPT1QnPjxnbG9zc3Rlcm0+T0VST09UPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBPRVJPT1RbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggdGhlIHRvcC1sZXZlbCBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgaXMgc291cmNlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggdGhlIHRvcC1sZXZlbCBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHQgaXMgc291cmNlZC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgbWFrZXMgdHdvIHRvcC1sZXZlbCBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHRzIGF2YWlsYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHJ1biBvbmUgb2YgdGhlc2Ugc2NyaXB0cywgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5PRVJPT1Q8L2ZpbGVuYW1lPiB2YXJpYWJsZSByZXNvbHZlcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIHNjcmlwdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZCwKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZSBpbml0aWFsaXphdGlvbiBzY3JpcHRzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU9MREVTVF9LRVJORUwnPjxnbG9zc3Rlcm0+T0xERVNUX0tFUk5FTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgT0xERVNUX0tFUk5FTFtkb2NdID0gIkRlY2xhcmVzIHRoZSBvbGRlc3QgdmVyc2lvbiBvZiB0aGUgTGludXgga2VybmVsIHRoYXQgdGhlIHByb2R1Y2VkIGJpbmFyaWVzIG11c3Qgc3VwcG9ydC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWNsYXJlcyB0aGUgb2xkZXN0IHZlcnNpb24gb2YgdGhlIExpbnV4IGtlcm5lbCB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICBwcm9kdWNlZCBiaW5hcmllcyBtdXN0IHN1cHBvcnQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgcGFzc2VkIGludG8gdGhlIGJ1aWxkIG9mIHRoZSBFbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICBHTlUgQyBMaWJyYXJ5ICg8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGZvciB0aGlzIHZhcmlhYmxlIGNvbWVzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgZGVmYXVsdCBieSBzZXR0aW5nIHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbiBhIGN1c3RvbSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU9WRVJSSURFUyc+PGdsb3NzdGVybT5PVkVSUklERVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE9WRVJSSURFU1tkb2NdID0gIkJpdEJha2UgdXNlcyBPVkVSUklERVMgdG8gY29udHJvbCB3aGF0IHZhcmlhYmxlcyBhcmUgb3ZlcnJpZGRlbiBhZnRlciBCaXRCYWtlIHBhcnNlcyByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gdG8gY29udHJvbAorICAgICAgICAgICAgICAgICAgICB3aGF0IHZhcmlhYmxlcyBhcmUgb3ZlcnJpZGRlbiBhZnRlciBCaXRCYWtlIHBhcnNlcworICAgICAgICAgICAgICAgICAgICByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgb3ZlcnJpZGVzIGFyZSBoYW5kbGVkCisgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNjb25kaXRpb25hbC1zeW50YXgtb3ZlcnJpZGVzJz5Db25kaXRpb25hbCBTeW50YXggKE92ZXJyaWRlcyk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXAnPjx0aXRsZT5QPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVAnPjxnbG9zc3Rlcm0+UDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFtkb2NdID0gIlRoZSByZWNpcGUgbmFtZSBhbmQgdmVyc2lvbi4gUCBpcyBjb21wcmlzZWQgb2YgJHtQTn0tJHtQVn0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSBuYW1lIGFuZCB2ZXJzaW9uLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UDwvZmlsZW5hbWU+IGlzIGNvbXByaXNlZCBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7UE59LSR7UFZ9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFX0FSQ0gnPjxnbG9zc3Rlcm0+UEFDS0FHRV9BUkNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFX0FSQ0hbZG9jXSA9ICJUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSByZXN1bHRpbmcgcGFja2FnZSBvciBwYWNrYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSByZXN1bHRpbmcgcGFja2FnZSBvciBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FX1BLR0FSQ0gnPjxmaWxlbmFtZT5UVU5FX1BLR0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgdGhlIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJVSUxEX0FSQ0g8L2ZpbGVuYW1lPiB3aGVuIGJ1aWxkaW5nIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaG9zdCBhbmQgIiR7U0RLX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSIgd2hlbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91ciByZWNpcGUncyBvdXRwdXQgcGFja2FnZXMgYXJlIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIHRvIHRoZSB0YXJnZXQgbWFjaGluZSByYXRoZXIgdGhhbiBnZW5lcmFsIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBtYWNoaW5lLCB5b3Ugc2hvdWxkIHNldAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT4gdG8gdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0FSQ0gnPjxmaWxlbmFtZT5NQUNISU5FX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHJlY2lwZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFX0FSQ0hTJz48Z2xvc3N0ZXJtPlBBQ0tBR0VfQVJDSFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VfQVJDSFNbZG9jXSA9ICJBIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGggdGhlIGdpdmVuIHRhcmdldCBpbiBvcmRlciBvZiBwcmlvcml0eS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGFyY2hpdGVjdHVyZXMgY29tcGF0aWJsZSB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzZXQgYXV0b21hdGljYWxseSBhbmQgc2hvdWxkIG5vdAorICAgICAgICAgICAgICAgICAgICBub3JtYWxseSBiZSBoYW5kLWVkaXRlZC4KKyAgICAgICAgICAgICAgICAgICAgRW50cmllcyBhcmUgc2VwYXJhdGVkIHVzaW5nIHNwYWNlcyBhbmQgbGlzdGVkIGluIG9yZGVyCisgICAgICAgICAgICAgICAgICAgIG9mIHByaW9yaXR5LgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VfQVJDSFM8L2ZpbGVuYW1lPiBpcyAiYWxsIGFueSBub2FyY2gKKyAgICAgICAgICAgICAgICAgICAgJHtQQUNLQUdFX0VYVFJBX0FSQ0hTfSAke01BQ0hJTkVfQVJDSH0iLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VfQkVGT1JFX1BOJz48Z2xvc3N0ZXJtPlBBQ0tBR0VfQkVGT1JFX1BOPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFX0JFRk9SRV9QTltkb2NdID0gIkVuYWJsZXMgZWFzaWx5IGFkZGluZyBwYWNrYWdlcyB0byBQQUNLQUdFUyBiZWZvcmUgJHtQTn0gc28gdGhhdCB0aGUgcGFja2FnZXMgY2FuIHBpY2sgdXAgZmlsZXMgdGhhdCB3b3VsZCBub3JtYWxseSBiZSBpbmNsdWRlZCBpbiB0aGUgZGVmYXVsdCBwYWNrYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEVuYWJsZXMgZWFzaWx5IGFkZGluZyBwYWNrYWdlcyB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz5QQUNLQUdFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBiZWZvcmUgPGZpbGVuYW1lPiR7PGxpbmsgbGlua2VuZD0ndmFyLVBOJz5QTjwvbGluaz59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc28gdGhhdCB0aG9zZSBhZGRlZCBwYWNrYWdlcyBjYW4gcGljayB1cCBmaWxlcyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlCisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVkIGluIHRoZSBkZWZhdWx0IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48Z2xvc3N0ZXJtPlBBQ0tBR0VfQ0xBU1NFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFDS0FHRV9DTEFTU0VTW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIHBhY2thZ2UgbWFuYWdlciB0byB1c2Ugd2hlbiBwYWNrYWdpbmcgZGF0YS4gSXQgaXMgc2V0IGluIHRoZSBjb25mL2xvY2FsLmNvbmYgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUsIHdoaWNoIGlzIHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUgZm91bmQgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZm9sZGVyIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgdGhlIHBhY2thZ2UgbWFuYWdlciB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICB1c2VzIHdoZW4gcGFja2FnaW5nIGRhdGEuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gcHJvdmlkZSBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyBmb3IKKyAgICAgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfQ0xBU1NFUyA/PSAicGFja2FnZV9ycG0gcGFja2FnZV9kZWIgcGFja2FnZV9pcGsgcGFja2FnZV90YXIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPldhcm5pbmc8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgV2hpbGUgaXQgaXMgYSBsZWdhbCBvcHRpb24sIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2VfdGFyPC9maWxlbmFtZT4gY2xhc3MgaXMgYnJva2VuCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgaXMgbm90IHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvIG5vdCB1c2UgaXQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSB1c2VzIG9ubHkgdGhlIGZpcnN0IGFyZ3VtZW50IGluIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgICAgIGFzIHRoZSBwYWNrYWdlIG1hbmFnZXIgd2hlbiBjcmVhdGluZyB5b3VyIGltYWdlIG9yIFNESy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgcGFja2FnZXMgd2lsbCBiZSBjcmVhdGVkIHVzaW5nIGFueSBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2luZyBjbGFzc2VzIHlvdSBzcGVjaWZ5LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IHVzZSB0aGUgZm9sbG93aW5nIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfQ0xBU1NFUyA/PSAicGFja2FnZV9pcGsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgSVBLIHBhY2thZ2UgbWFuYWdlcgorICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgeW91ciBpbWFnZSBvciBTREsuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBwYWNrYWdpbmcgYW5kIGJ1aWxkIHBlcmZvcm1hbmNlIGVmZmVjdHMKKyAgICAgICAgICAgICAgICAgICAgYXMgYSByZXN1bHQgb2YgdGhlIHBhY2thZ2UgbWFuYWdlciBpbiB1c2UsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRSc+PGdsb3NzdGVybT5QQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFW2RvY10gPSAiRGV0ZXJtaW5lcyBob3cgdG8gc3BsaXQgdXAgdGhlIGJpbmFyeSBhbmQgZGVidWcgaW5mb3JtYXRpb24gd2hlbiBjcmVhdGluZyAqLWRiZyBwYWNrYWdlcyB0byBiZSB1c2VkIHdpdGggdGhlIEdOVSBQcm9qZWN0IERlYnVnZ2VyIChHREIpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgaG93IHRvIHNwbGl0IHVwIHRoZSBiaW5hcnkgYW5kIGRlYnVnIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgIHdoZW4gY3JlYXRpbmcgPGZpbGVuYW1lPiotZGJnPC9maWxlbmFtZT4gcGFja2FnZXMgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgdXNlZCB3aXRoIHRoZSBHTlUgUHJvamVjdCBEZWJ1Z2dlciAoR0RCKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBjb250cm9sIHdoZXJlIGRlYnVnIGluZm9ybWF0aW9uLCB3aGljaCBjYW4gaW5jbHVkZQorICAgICAgICAgICAgICAgICAgICBvciBleGNsdWRlIHNvdXJjZSBmaWxlcywgaXMgc3RvcmVkOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuZGVidWciOiBEZWJ1ZyBzeW1ib2wgZmlsZXMgYXJlIHBsYWNlZCBuZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGJpbmFyeSBpbiBhIDxmaWxlbmFtZT4uZGVidWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiBhIGJpbmFyeSBpcyBpbnN0YWxsZWQgaW50bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vYmluPC9maWxlbmFtZT4sIHRoZSBjb3JyZXNwb25kaW5nIGRlYnVnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sIGZpbGVzIGFyZSBpbnN0YWxsZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2Jpbi8uZGVidWc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UgZmlsZXMgYXJlIHBsYWNlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL3NyYy9kZWJ1ZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlYnVnLWZpbGUtZGlyZWN0b3J5IjogRGVidWcgc3ltYm9sIGZpbGVzIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZCB1bmRlciA8ZmlsZW5hbWU+L3Vzci9saWIvZGVidWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSB0YXJnZXQsIGFuZCBzZXBhcmF0ZWQgYnkgdGhlIHBhdGggZnJvbSB3aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBiaW5hcnkgaXMgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiBhIGJpbmFyeSBpcyBpbnN0YWxsZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2JpbjwvZmlsZW5hbWU+LCB0aGUgY29ycmVzcG9uZGluZyBkZWJ1ZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMgYXJlIGluc3RhbGxlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2xpYi9kZWJ1Zy9iaW48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UgZmlsZXMgYXJlIHBsYWNlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL3NyYy9kZWJ1ZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWJ1Zy13aXRob3V0LXNyYyI6IFRoZSBzYW1lIGJlaGF2aW9yIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5kZWJ1ZyIgcHJldmlvdXNseSBkZXNjcmliZWQgd2l0aCB0aGUgZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBubyBzb3VyY2UgZmlsZXMgYXJlIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4uCisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgb3V0IG1vcmUgYWJvdXQgZGVidWdnaW5nIHVzaW5nIEdEQiBieSByZWFkaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGxhdGRldi1nZGItcmVtb3RlZGVidWcnPkRlYnVnZ2luZyBXaXRoIHRoZSBHTlUgUHJvamVjdCBEZWJ1Z2dlciAoR0RCKSBSZW1vdGVseTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFX0VYQ0xVREUnPjxnbG9zc3Rlcm0+UEFDS0FHRV9FWENMVURFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFX0VYQ0xVREVbZG9jXSA9ICJQYWNrYWdlcyB0byBleGNsdWRlIGZyb20gdGhlIGluc3RhbGxhdGlvbi4gSWYgYSBsaXN0ZWQgcGFja2FnZSBpcyByZXF1aXJlZCwgYW4gZXJyb3IgaXMgZ2VuZXJhdGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHBhY2thZ2VzIHRoYXQgc2hvdWxkIG5vdCBiZSBpbnN0YWxsZWQgaW50byBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRV9FWENMVURFID0gIjxyZXBsYWNlYWJsZT5wYWNrYWdlX25hbWU8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+cGFja2FnZV9uYW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnBhY2thZ2VfbmFtZTwvcmVwbGFjZWFibGU+IC4uLiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIGdsb2JhbGx5IGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIHlvdSBjYW4gYXR0YWNoIGl0IHRvCisgICAgICAgICAgICAgICAgICAgIGEgc3BlY2lmaWMgaW1hZ2UgcmVjaXBlIGJ5IHVzaW5nIHRoZSByZWNpcGUgbmFtZSBvdmVycmlkZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFX0VYQ0xVREVfcG4tPHJlcGxhY2VhYmxlPnRhcmdldF9pbWFnZTwvcmVwbGFjZWFibGU+ID0gIjxyZXBsYWNlYWJsZT5wYWNrYWdlX25hbWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgY2hvb3NlIHRvIG5vdCBpbnN0YWxsCisgICAgICAgICAgICAgICAgICAgIGEgcGFja2FnZSB1c2luZyB0aGlzIHZhcmlhYmxlIGFuZCBzb21lIG90aGVyIHBhY2thZ2UgaXMKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW50IG9uIGl0IChpLmUuIGxpc3RlZCBpbiBhIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlKSwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZ2VuZXJhdGVzIGEgZmF0YWwKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIGVycm9yLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBidWlsZCBzeXN0ZW0gaGFsdHMgdGhlIHByb2Nlc3Mgd2l0aCBhIGZhdGFsCisgICAgICAgICAgICAgICAgICAgIGVycm9yLCB5b3UgY2FuIHVzZSB0aGUgdmFyaWFibGUgd2l0aCBhbiBpdGVyYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgcHJvY2VzcyB0byByZW1vdmUgc3BlY2lmaWMgY29tcG9uZW50cyBmcm9tIGEKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGZvciB0aGlzIHZhcmlhYmxlIGV4aXN0cyBvbmx5IHdoZW4gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIElQSyBhbmQgUlBNIHBhY2thZ2luZyBiYWNrZW5kLgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGRvZXMgbm90IGV4aXN0IGZvciBERUIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU5PX1JFQ09NTUVOREFUSU9OUyc+PGZpbGVuYW1lPk5PX1JFQ09NTUVOREFUSU9OUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQURfUkVDT01NRU5EQVRJT05TJz48ZmlsZW5hbWU+QkFEX1JFQ09NTUVOREFUSU9OUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIHJlbGF0ZWQgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRV9FWFRSQV9BUkNIUyc+PGdsb3NzdGVybT5QQUNLQUdFX0VYVFJBX0FSQ0hTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFX0VYVFJBX0FSQ0hTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsaXN0IG9mIGFyY2hpdGVjdHVyZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBkZXZpY2UgQ1BVLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWZ1bCB3aGVuIHlvdSBidWlsZCBmb3Igc2V2ZXJhbCBkaWZmZXJlbnQgZGV2aWNlcyB0aGF0IHVzZSBtaXNjZWxsYW5lb3VzIHByb2Nlc3NvcnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsaXN0IG9mIGFyY2hpdGVjdHVyZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBkZXZpY2UgQ1BVLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWZ1bCB3aGVuIHlvdSBidWlsZCBmb3Igc2V2ZXJhbCBkaWZmZXJlbnQgZGV2aWNlcyB0aGF0IHVzZQorICAgICAgICAgICAgICAgICAgICBtaXNjZWxsYW5lb3VzIHByb2Nlc3NvcnMgc3VjaCBhcyBYU2NhbGUgYW5kIEFSTTkyNi1FSlMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRV9HUk9VUCc+PGdsb3NzdGVybT5QQUNLQUdFX0dST1VQPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFX0dST1VQW2RvY10gPSAiRGVmaW5lcyBvbmUgb3IgbW9yZSBwYWNrYWdlcyB0byBpbmNsdWRlIGluIGFuIGltYWdlIHdoZW4gYSBzcGVjaWZpYyBpdGVtIGlzIGluY2x1ZGVkIGluIElNQUdFX0ZFQVRVUkVTLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UEFDS0FHRV9HUk9VUDwvZmlsZW5hbWU+IHZhcmlhYmxlIGhhcyBiZWVuCisgICAgICAgICAgICAgICAgICAgIHJlbmFtZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZFQVRVUkVfUEFDS0FHRVMnPjxmaWxlbmFtZT5GRUFUVVJFX1BBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIHZhcmlhYmxlIGRlc2NyaXB0aW9uIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RkVBVFVSRV9QQUNLQUdFUzwvZmlsZW5hbWU+IGZvciBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgaWYgeW91IHVzZSB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VfR1JPVVA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXNzdWVzIGEgd2FybmluZworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VfSU5TVEFMTCc+PGdsb3NzdGVybT5QQUNLQUdFX0lOU1RBTEw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VfSU5TVEFMTFtkb2NdID0gIkxpc3Qgb2YgdGhlIHBhY2thZ2VzIHRvIGJlIGluc3RhbGxlZCBpbnRvIHRoZSBpbWFnZS4gVGhlIHZhcmlhYmxlIGlzIGdlbmVyYWxseSBub3QgdXNlci1kZWZpbmVkIGFuZCB1c2VzIElNQUdFX0lOU1RBTEwgYXMgcGFydCBvZiB0aGUgbGlzdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZmluYWwgbGlzdCBvZiBwYWNrYWdlcyBwYXNzZWQgdG8gdGhlIHBhY2thZ2UgbWFuYWdlcgorICAgICAgICAgICAgICAgICAgICBmb3IgaW5zdGFsbGF0aW9uIGludG8gdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBwYWNrYWdlIG1hbmFnZXIgY29udHJvbHMgYWN0dWFsIGluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgICAgICBvZiBhbGwgcGFja2FnZXMsIHRoZSBsaXN0IG9mIHBhY2thZ2VzIHBhc3NlZCB1c2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRV9JTlNUQUxMPC9maWxlbmFtZT4gaXMgbm90IHRoZSBmaW5hbCBsaXN0CisgICAgICAgICAgICAgICAgICAgIG9mIHBhY2thZ2VzIHRoYXQgYXJlIGFjdHVhbGx5IGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBpbnRlcm5hbCB0byB0aGUgaW1hZ2UgY29uc3RydWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaW4gZ2VuZXJhbCwgeW91IHNob3VsZCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBzcGVjaWZ5IHBhY2thZ2VzIGZvciBpbnN0YWxsYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSBleGNlcHRpb24gdG8gdGhpcyBpcyB3aGVuIHdvcmtpbmcgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0naW1hZ2VzLWNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMnPjxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHdvcmtpbmcgd2l0aCBhbiBpbml0aWFsIFJBTSBkaXNrIChpbml0cmFtZnMpCisgICAgICAgICAgICAgICAgICAgIGltYWdlLCB1c2UgdGhlIDxmaWxlbmFtZT5QQUNLQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFknPjxnbG9zc3Rlcm0+UEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFlbZG9jXSA9ICJMaXN0IG9mIHBhY2thZ2VzIGF0dGVtcHRlZCB0byBiZSBpbnN0YWxsZWQgd2hlbiBjcmVhdGluZyBhbiBpbWFnZS4gSWYgYSBsaXN0ZWQgcGFja2FnZSBmYWlscyB0byBpbnN0YWxsLCB0aGUgYnVpbGQgc3lzdGVtIGRvZXMgbm90IGdlbmVyYXRlIGFuIGVycm9yLiBUaGlzIHZhcmlhYmxlIGlzIGdlbmVyYWxseSBub3QgdXNlci1kZWZpbmVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgcGFja2FnZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gYXR0ZW1wdHMgdG8gaW5zdGFsbCB3aGVuIGNyZWF0aW5nIGFuIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBJZiBhIGxpc3RlZCBwYWNrYWdlIGZhaWxzIHRvIGluc3RhbGwsIHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgZ2VuZXJhdGUgYW4gZXJyb3IuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgZ2VuZXJhbGx5IG5vdCB1c2VyLWRlZmluZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTJz48Z2xvc3N0ZXJtPlBBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgcnVuIHRvIHByZS1wcm9jZXNzIHRoZSBQS0dEIGRpcmVjdG9yeSBwcmlvciB0byBzcGxpdHRpbmcgdGhlIGZpbGVzIG91dCB0byBpbmRpdmlkdWFsIHBhY2thZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHJ1biB0byBwcmUtcHJvY2VzcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR0QnPjxmaWxlbmFtZT5QS0dEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBwcmlvciB0byBzcGxpdHRpbmcgdGhlIGZpbGVzIG91dCB0byBpbmRpdmlkdWFsCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VDT05GSUcnPjxnbG9zc3Rlcm0+UEFDS0FHRUNPTkZJRzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFDS0FHRUNPTkZJR1tkb2NdID0gIlRoaXMgdmFyaWFibGUgcHJvdmlkZXMgYSBtZWFucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgZmVhdHVyZXMgb2YgYSByZWNpcGUgb24gYSBwZXItcmVjaXBlIGJhc2lzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgcHJvdmlkZXMgYSBtZWFucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgb2YgYSByZWNpcGUgb24gYSBwZXItcmVjaXBlIGJhc2lzLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRUNPTkZJRzwvZmlsZW5hbWU+IGJsb2NrcyBhcmUgZGVmaW5lZAorICAgICAgICAgICAgICAgICAgICBpbiByZWNpcGVzIHdoZW4geW91IHNwZWNpZnkgZmVhdHVyZXMgYW5kIHRoZW4gYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgZGVmaW5lIGZlYXR1cmUgYmVoYXZpb3JzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBiYXNpYyBibG9jayBzdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRUNPTkZJRyA/Pz0gImYxIGYyIGYzIC4uLiIKKyAgICAgUEFDS0FHRUNPTkZJR1tmMV0gPSAiLS13aXRoLWYxLC0td2l0aG91dC1mMSxidWlsZC1kZXBzLWYxLHJ0LWRlcHMtZjEiCisgICAgIFBBQ0tBR0VDT05GSUdbZjJdID0gIi0td2l0aC1mMiwtLXdpdGhvdXQtZjIsYnVpbGQtZGVwcy1mMixydC1kZXBzLWYyIgorICAgICBQQUNLQUdFQ09ORklHW2YzXSA9ICItLXdpdGgtZjMsLS13aXRob3V0LWYzLGJ1aWxkLWRlcHMtZjMscnQtZGVwcy1mMyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpdHNlbGYgc3BlY2lmaWVzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHRvIGVuYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIHRoZSBmZWF0dXJlcywgeW91IGNhbiBkZXRlcm1pbmUgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgICAgICAgICAgICAgIGVhY2ggZmVhdHVyZSBieSBwcm92aWRpbmcgdXAgdG8gZm91ciBvcmRlci1kZXBlbmRlbnQKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLCB3aGljaCBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBvbWl0IGFueSBhcmd1bWVudCB5b3UgbGlrZSBidXQgbXVzdCByZXRhaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRpbmcgY29tbWFzLgorICAgICAgICAgICAgICAgICAgICBUaGUgb3JkZXIgaXMgaW1wb3J0YW50IGFuZCBzcGVjaWZpZXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4dHJhIGFyZ3VtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfT0VDT05GJz48ZmlsZW5hbWU+RVhUUkFfT0VDT05GPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXh0cmEgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gPGZpbGVuYW1lPkVYVFJBX09FQ09ORjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIGZlYXR1cmUgaXMgZGlzYWJsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkaXRpb25hbCBidWlsZCBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIGFkZGVkIGlmIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkaXRpb25hbCBydW50aW1lIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSBhZGRlZCBpZiB0aGUgZmVhdHVyZSBpcyBlbmFibGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFQ09ORklHPC9maWxlbmFtZT4gYmxvY2sgdGFrZW4gZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYnJzdmc8L2ZpbGVuYW1lPiByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSB0aGUgZmVhdHVyZSBpcyA8ZmlsZW5hbWU+Y3JvY288L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaGFzIHRocmVlIGFyZ3VtZW50cyB0aGF0IGRldGVybWluZSB0aGUgZmVhdHVyZSdzCisgICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VDT05GSUcgPz89ICJjcm9jbyIKKyAgICAgUEFDS0FHRUNPTkZJR1tjcm9jb10gPSAiLS13aXRoLWNyb2NvLC0td2l0aG91dC1jcm9jbyxsaWJjcm9jbyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPi0td2l0aC1jcm9jbzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliY3JvY288L2ZpbGVuYW1lPiBhcmd1bWVudHMgYXBwbHkgb25seSBpZgorICAgICAgICAgICAgICAgICAgICB0aGUgZmVhdHVyZSBpcyBlbmFibGVkLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIDxmaWxlbmFtZT4tLXdpdGgtY3JvY288L2ZpbGVuYW1lPiBpcworICAgICAgICAgICAgICAgICAgICBhZGRlZCB0byB0aGUgY29uZmlndXJlIHNjcmlwdCBhcmd1bWVudCBsaXN0IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliY3JvY288L2ZpbGVuYW1lPiBpcyBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZCBzYXkgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICBhIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGluIGFub3RoZXIgbGF5ZXIsIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIHNlY29uZCBhcmd1bWVudCA8ZmlsZW5hbWU+LS13aXRob3V0LWNyb2NvPC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICAgICAgYWRkZWQgdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0td2l0aC1jcm9jbzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgYmFzaWMgPGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPiBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNseSBkZXNjcmliZWQgaG9sZHMgdHJ1ZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgeW91CisgICAgICAgICAgICAgICAgICAgIGFyZSBjcmVhdGluZyBhIGJsb2NrIG9yIGNoYW5naW5nIGEgYmxvY2suCisgICAgICAgICAgICAgICAgICAgIFdoZW4gY3JlYXRpbmcgYSBibG9jaywgdXNlIHRoZSBzdHJ1Y3R1cmUgaW5zaWRlIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgYW4gZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPiBibG9jaywgeW91IGNhbiBkbyBzbworICAgICAgICAgICAgICAgICAgICBvbmUgb2YgdHdvIHdheXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFwcGVuZCBmaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIGFuIGFwcGVuZCBmaWxlIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnJlY2lwZW5hbWU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgbGF5ZXIgYW5kIG92ZXJyaWRlIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFQ09ORklHPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBlaXRoZXIgY29tcGxldGVseSBvdmVycmlkZSB0aGUgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFQ09ORklHPSJmNCBmNSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3IsIHlvdSBjYW4ganVzdCBhcHBlbmQgdGhlIHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRUNPTkZJR19hcHBlbmQgPSAiIGY0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29uZmlndXJhdGlvbiBmaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgaWRlbnRpY2FsIHRvIGNoYW5naW5nIHRoZSBibG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggYW4gYXBwZW5kIGZpbGUgZXhjZXB0IHlvdSBlZGl0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5teWRpc3RybzwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIHdpdGggYXBwZW5kIGZpbGVzIHByZXZpb3VzbHkgZGVzY3JpYmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gZWl0aGVyIGNvbXBsZXRlbHkgb3ZlcnJpZGUgdGhlIHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRUNPTkZJR19wbi08cmVwbGFjZWFibGU+cmVjaXBlbmFtZTwvcmVwbGFjZWFibGU+PSJmNCBmNSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3IsIHlvdSBjYW4ganVzdCBhbWVuZCB0aGUgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFQ09ORklHX2FwcGVuZF9wbi08cmVwbGFjZWFibGU+cmVjaXBlbmFtZTwvcmVwbGFjZWFibGU+ID0gIiBmNCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VHUk9VUF9ESVNBQkxFX0NPTVBMRU1FTlRBUlknPjxnbG9zc3Rlcm0+UEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWVtkb2NdID0gIlByZXZlbnRzIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiB0aGUgbm9ybWFsIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgc3VjaCBhcyAtZGV2IGFuZCAtZGJnIGluIGEgcGFja2FnZWdyb3VwIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGb3IgcmVjaXBlcyBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlZ3JvdXAnPjxmaWxlbmFtZT5wYWNrYWdlZ3JvdXA8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VHUk9VUF9ESVNBQkxFX0NPTVBMRU1FTlRBUlk8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgICAgICAgICAiMSIgc3BlY2lmaWVzIHRoYXQgdGhlIG5vcm1hbCBjb21wbGVtZW50YXJ5IHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aCkgc2hvdWxkIG5vdCBiZQorICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXA8L2ZpbGVuYW1lPiByZWNpcGUsIHdoaWNoIGlzIHRoZQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGJlaGF2aW9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VTJz48Z2xvc3N0ZXJtPlBBQ0tBR0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFU1tkb2NdID0gIlRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGJlIGNyZWF0ZWQgZnJvbSB0aGUgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGJlIGNyZWF0ZWQgZnJvbSB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7UE59LWRiZyAke1BOfS1zdGF0aWNkZXYgJHtQTn0tZGV2ICR7UE59LWRvYyAke1BOfS1sb2NhbGUgJHtQQUNLQUdFX0JFRk9SRV9QTn0gJHtQTn0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VTX0RZTkFNSUMnPjxnbG9zc3Rlcm0+UEFDS0FHRVNfRFlOQU1JQzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFDS0FHRVNfRFlOQU1JQ1tkb2NdID0gIkEgcHJvbWlzZSB0aGF0IHlvdXIgcmVjaXBlIHNhdGlzZmllcyBydW50aW1lIGRlcGVuZGVuY2llcyBmb3Igb3B0aW9uYWwgbW9kdWxlcyB0aGF0IGFyZSBmb3VuZCBpbiBvdGhlciByZWNpcGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgcHJvbWlzZSB0aGF0IHlvdXIgcmVjaXBlIHNhdGlzZmllcyBydW50aW1lIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICBmb3Igb3B0aW9uYWwgbW9kdWxlcyB0aGF0IGFyZSBmb3VuZCBpbiBvdGhlciByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRVNfRFlOQU1JQzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGFjdHVhbGx5IHNhdGlzZnkgdGhlIGRlcGVuZGVuY2llcywgaXQgb25seSBzdGF0ZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCBiZSBzYXRpc2ZpZWQuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiBhIGhhcmQsIHJ1bnRpbWUgZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgIG9mIGFub3RoZXIgcGFja2FnZSBpcyBzYXRpc2ZpZWQKKyAgICAgICAgICAgICAgICAgICAgYXQgYnVpbGQgdGltZSB0aHJvdWdoIHRoZSA8ZmlsZW5hbWU+UEFDS0FHRVNfRFlOQU1JQzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBidXQgYSBwYWNrYWdlIHdpdGggdGhlIG1vZHVsZSBuYW1lIGlzIG5ldmVyIGFjdHVhbGx5CisgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VkLCB0aGVuIHRoZSBvdGhlciBwYWNrYWdlIHdpbGwgYmUgYnJva2VuLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCBpZiB5b3UgYXR0ZW1wdCB0byBpbmNsdWRlIHRoYXQgcGFja2FnZSBpbiBhbiBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgeW91IHdpbGwgZ2V0IGEgZGVwZW5kZW5jeSBmYWlsdXJlIGZyb20gdGhlIHBhY2thZ2luZyBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3Mtcm9vdGZzJz48ZmlsZW5hbWU+ZG9fcm9vdGZzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgaWYgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBzdWNoIGEgc2l0dWF0aW9uIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhbmQgdGhlIHBhY2thZ2UgdGhhdCBpcyBub3QgY3JlYXRlZCBpcyB2YWxpZAorICAgICAgICAgICAgICAgICAgICB3aXRob3V0IHRoZSBkZXBlbmRlbmN5IGJlaW5nIHNhdGlzZmllZCwgdGhlbiB5b3Ugc2hvdWxkIHVzZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAoYSBzb2Z0IHJ1bnRpbWUgZGVwZW5kZW5jeSkgaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VTX0RZTkFNSUM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB3aGVuIHlvdSBhcmUgc3BsaXR0aW5nIHBhY2thZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNoYW5kbGluZy1vcHRpb25hbC1tb2R1bGUtcGFja2FnaW5nJz5IYW5kbGluZyBPcHRpb25hbCBNb2R1bGUgUGFja2FnaW5nPC91bGluaz4iIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VTUExJVEZVTkNTJz48Z2xvc3N0ZXJtPlBBQ0tBR0VTUExJVEZVTkNTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFU1BMSVRGVU5DU1tkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHJ1biB0byBwZXJmb3JtIGFkZGl0aW9uYWwgc3BsaXR0aW5nIG9mIGZpbGVzIGludG8gaW5kaXZpZHVhbCBwYWNrYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyBydW4gdG8gcGVyZm9ybSBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIHNwbGl0dGluZyBvZiBmaWxlcyBpbnRvIGluZGl2aWR1YWwgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIFJlY2lwZXMgY2FuIGVpdGhlciBwcmVwZW5kIHRvIHRoaXMgdmFyaWFibGUgb3IgcHJlcGVuZAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgPGZpbGVuYW1lPnBvcHVsYXRlX3BhY2thZ2VzPC9maWxlbmFtZT4gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHBhY2thZ2Ugc3BsaXR0aW5nLgorICAgICAgICAgICAgICAgICAgICBJbiBlaXRoZXIgY2FzZSwgdGhlIGZ1bmN0aW9uIHNob3VsZCBzZXQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgb3RoZXIgcGFja2FnaW5nIHZhcmlhYmxlcyBhcHByb3ByaWF0ZWx5IGluIG9yZGVyIHRvCisgICAgICAgICAgICAgICAgICAgIHBlcmZvcm0gdGhlIGRlc2lyZWQgc3BsaXR0aW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBUkFMTEVMX01BS0UnPjxnbG9zc3Rlcm0+UEFSQUxMRUxfTUFLRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFSQUxMRUxfTUFLRVtkb2NdID0gIlNwZWNpZmllcyBleHRyYSBvcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgbWFrZSBjb21tYW5kIGR1cmluZyB0aGUgY29tcGlsZSB0YXNrcy4gVGhpcyB2YXJpYWJsZSBpcyB1c3VhbGx5IGluIHRoZSBmb3JtIC1qIHgsIHdoZXJlIHggcmVwcmVzZW50cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgdGhyZWFkcyBtYWtlIGNhbiBydW4uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRXh0cmEgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIGluIG9yZGVyIHRvIHNwZWNpZnkgcGFyYWxsZWwgY29tcGlsYXRpb24gb24gdGhlIGxvY2FsCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXN1YWxseSBpbiB0aGUgZm9ybSAiLWogPHJlcGxhY2VhYmxlPng8L3JlcGxhY2VhYmxlPiIsCisgICAgICAgICAgICAgICAgICAgIHdoZXJlIDxyZXBsYWNlYWJsZT54PC9yZXBsYWNlYWJsZT4gcmVwcmVzZW50cyB0aGUgbWF4aW11bQorICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgcGFyYWxsZWwgdGhyZWFkcyA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IGNhbgorICAgICAgICAgICAgICAgICAgICBydW4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgc2V0cyB0aGlzIHZhcmlhYmxlIHRvIGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgY29yZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB1c2VzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCBleHBlcmllbmNlcyBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXMgZHVyaW5nIHRoZSA8ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrIHRoYXQgcmVzdWx0IGluIHJhY2UgY29uZGl0aW9ucywgeW91IGNhbiBjbGVhcgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT4gdmFyaWFibGUgd2l0aGluCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlIGFzIGEgd29ya2Fyb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhZGRyZXNzaW5nIHJhY2UgY29uZGl0aW9ucywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2RlYnVnZ2luZy1wYXJhbGxlbC1tYWtlLXJhY2VzJz5EZWJ1Z2dpbmcgUGFyYWxsZWwgTWFrZSBSYWNlczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHNpbmdsZSBzb2NrZXQgc3lzdGVtcyAoaS5lLiBvbmUgQ1BVKSwgeW91IHNob3VsZCBub3QKKyAgICAgICAgICAgICAgICAgICAgaGF2ZSB0byBvdmVycmlkZSB0aGlzIHZhcmlhYmxlIHRvIGdhaW4gb3B0aW1hbCBwYXJhbGxlbGlzbQorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgaGF2ZSB2ZXJ5IGxhcmdlIHN5c3RlbXMgdGhhdCBlbXBsb3kKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgcGh5c2ljYWwgQ1BVcywgeW91IG1pZ2h0IHdhbnQgdG8gbWFrZSBzdXJlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIG5vdAorICAgICAgICAgICAgICAgICAgICBzZXQgaGlnaGVyIHRoYW4gIi1qIDIwIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3BlZWRpbmcgdXAgYnVpbGRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzcGVlZGluZy11cC10aGUtYnVpbGQnPlNwZWVkaW5nIFVwIHRoZSBCdWlsZDwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFSQUxMRUxfTUFLRUlOU1QnPjxnbG9zc3Rlcm0+UEFSQUxMRUxfTUFLRUlOU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBUkFMTEVMX01BS0VJTlNUW2RvY10gPSAiRXh0cmEgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIG1ha2UgaW5zdGFsbCBjb21tYW5kIGR1cmluZyB0aGUgZG9faW5zdGFsbCB0YXNrIGluIG9yZGVyIHRvIHNwZWNpZnkgcGFyYWxsZWwgaW5zdGFsbGF0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEV4dHJhIG9wdGlvbnMgcGFzc2VkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFrZSBpbnN0YWxsPC9maWxlbmFtZT4gY29tbWFuZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIGluIG9yZGVyIHRvIHNwZWNpZnkgcGFyYWxsZWwgaW5zdGFsbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFSQUxMRUxfTUFLRSc+PGZpbGVuYW1lPlBBUkFMTEVMX01BS0U8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IGV4cGVyaWVuY2VzIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlcyBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IHRhc2sgdGhhdCByZXN1bHQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJhY2UgY29uZGl0aW9ucywgeW91IGNhbiBjbGVhciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQVJBTExFTF9NQUtFSU5TVDwvZmlsZW5hbWU+IHZhcmlhYmxlIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlY2lwZSBhcyBhIHdvcmthcm91bmQuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gYWRkcmVzc2luZyByYWNlIGNvbmRpdGlvbnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNkZWJ1Z2dpbmctcGFyYWxsZWwtbWFrZS1yYWNlcyc+RGVidWdnaW5nIFBhcmFsbGVsIE1ha2UgUmFjZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFUQ0hSRVNPTFZFJz48Z2xvc3N0ZXJtPlBBVENIUkVTT0xWRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFUQ0hSRVNPTFZFW2RvY10gPSAiRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJhY3RpdmUgcGF0Y2ggcmVzb2x1dGlvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIHRoZSBhY3Rpb24gdG8gdGFrZSB3aGVuIGEgcGF0Y2ggZmFpbHMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoaXMgdmFyaWFibGUgdG8gb25lIG9mIHR3byB2YWx1ZXM6ICJub29wIiBhbmQKKyAgICAgICAgICAgICAgICAgICAgInVzZXIiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiAibm9vcCIgY2F1c2VzIHRoZSBidWlsZCB0byBzaW1wbHkgZmFpbAorICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNhbm5vdCBzdWNjZXNzZnVsbHkKKyAgICAgICAgICAgICAgICAgICAgYXBwbHkgYSBwYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGUgdmFsdWUgdG8gInVzZXIiIGNhdXNlcyB0aGUgYnVpbGQgc3lzdGVtIHRvCisgICAgICAgICAgICAgICAgICAgIGxhdW5jaCBhIHNoZWxsIGFuZCBwbGFjZXMgeW91IGluIHRoZSByaWdodCBsb2NhdGlvbiBzbyB0aGF0CisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gbWFudWFsbHkgcmVzb2x2ZSB0aGUgY29uZmxpY3RzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQVRDSFRPT0wnPjxnbG9zc3Rlcm0+UEFUQ0hUT09MPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQVRDSFRPT0xbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHV0aWxpdHkgdXNlZCB0byBhcHBseSBwYXRjaGVzIGZvciBhIHJlY2lwZSBkdXJpbmcgZG9fcGF0Y2guIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSB1dGlsaXR5IHVzZWQgdG8gYXBwbHkgcGF0Y2hlcyBmb3IgYSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGF0Y2gnPjxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgb25lIG9mIHRocmVlIHV0aWxpdGllczogInBhdGNoIiwgInF1aWx0Iiwgb3IKKyAgICAgICAgICAgICAgICAgICAgImdpdCIuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHV0aWxpdHkgdXNlZCBpcyAicXVpbHQiIGV4Y2VwdCBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHF1aWx0LW5hdGl2ZSByZWNpcGUgaXRzZWxmLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBxdWlsdCB0b29sIGlzIG5vdCBhdmFpbGFibGUgYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIHRpbWUgcXVpbHQtbmF0aXZlIGlzIGJlaW5nIHBhdGNoZWQsIGl0IHVzZXMgInBhdGNoIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdpc2ggdG8gdXNlIGFuIGFsdGVybmF0aXZlIHBhdGNoaW5nIHRvb2wsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIHJlY2lwZSB1c2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQVRDSFRPT0wgPSAicGF0Y2giCisgICAgIFBBVENIVE9PTCA9ICJxdWlsdCIKKyAgICAgUEFUQ0hUT09MID0gImdpdCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBFJz48Z2xvc3N0ZXJtPlBFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQRVtkb2NdID0gIlRoZSBlcG9jaCBvZiB0aGUgcmVjaXBlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAnMCcuIFRoZSBmaWVsZCBpcyB1c2VkIHRvIG1ha2UgdXBncmFkZXMgcG9zc2libGUgd2hlbiB0aGUgdmVyc2lvbmluZyBzY2hlbWUgY2hhbmdlcyBpbiBzb21lIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgd2F5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBlcG9jaCBvZiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHZhcmlhYmxlIGlzIHVuc2V0LgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgdXNlZCB0byBtYWtlIHVwZ3JhZGVzIHBvc3NpYmxlIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb25pbmcgc2NoZW1lIGNoYW5nZXMgaW4gc29tZSBiYWNrd2FyZHMgaW5jb21wYXRpYmxlCisgICAgICAgICAgICAgICAgICAgIHdheS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QRic+PGdsb3NzdGVybT5QRjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEZbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHJlY2lwZSBvciBwYWNrYWdlIG5hbWUgYW5kIGluY2x1ZGVzIGFsbCB2ZXJzaW9uIGFuZCByZXZpc2lvbiBudW1iZXJzLiBUaGlzIHZhcmlhYmxlIGlzIGNvbXByaXNlZCBvZiAke1BOfS0ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcmVjaXBlIG9yIHBhY2thZ2UgbmFtZSBhbmQgaW5jbHVkZXMgYWxsIHZlcnNpb24gYW5kIHJldmlzaW9uCisgICAgICAgICAgICAgICAgICAgIG51bWJlcnMgKGkuZS4gPGZpbGVuYW1lPmdsaWJjLTIuMTMtcjIwK3N2bnIxNTUwOC88L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2gtNC4yLXIxLzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBjb21wcmlzZWQgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkezxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+UE48L2xpbms+fS0kezxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRFTkRQRSc+RVhURU5EUEU8L2xpbms+fSR7PGxpbmsgbGlua2VuZD0ndmFyLVBWJz5QVjwvbGluaz59LSR7PGxpbmsgbGlua2VuZD0ndmFyLVBSJz5QUjwvbGluaz59CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QSVhCVUZfUEFDS0FHRVMnPjxnbG9zc3Rlcm0+UElYQlVGX1BBQ0tBR0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQSVhCVUZfUEFDS0FHRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBwaXhidWZjYWNoZSBjbGFzcywgdGhpcyB2YXJpYWJsZSBpZGVudGlmaWVzIHBhY2thZ2VzIHRoYXQgY29udGFpbiB0aGUgcGl4YnVmIGxvYWRlcnMgdXNlZCB3aXRoIGdkay1waXhidWYuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1waXhidWZjYWNoZSc+PGZpbGVuYW1lPnBpeGJ1ZmNhY2hlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGlkZW50aWZpZXMgcGFja2FnZXMgdGhhdCBjb250YWluCisgICAgICAgICAgICAgICAgICAgIHRoZSBwaXhidWYgbG9hZGVycyB1c2VkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdkay1waXhidWY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5waXhidWZjYWNoZTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgICAgICAgICAgICAgIGFzc3VtZXMgdGhhdCB0aGUgbG9hZGVycyBhcmUgaW4gdGhlIHJlY2lwZSdzIG1haW4gcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIHZhcmlhYmxlIGlmIHRoZSBsb2FkZXJzIHlvdSBuZWVkIGFyZSBpbiBhIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGhhbiB0aGF0IG1haW4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QS0cnPjxnbG9zc3Rlcm0+UEtHPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQS0dbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgcmVzdWx0aW5nIHBhY2thZ2UgY3JlYXRlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4gV2hlbiB5b3UgdXNlIHRoaXMgdmFyaWFibGUsIHlvdSBtdXN0IHVzZSBhIHBhY2thZ2UgbmFtZSBvdmVycmlkZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcmVzdWx0aW5nIHBhY2thZ2UgY3JlYXRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHVzaW5nIHRoZSA8ZmlsZW5hbWU+UEtHPC9maWxlbmFtZT4gdmFyaWFibGUsIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCB1c2UgYSBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRlYmlhbic+PGZpbGVuYW1lPmRlYmlhbjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyByZW5hbWVzIHRoZSBvdXRwdXQgcGFja2FnZSwgaXQgZG9lcyBzbyBieSBzZXR0aW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QS0dfPHJlcGxhY2VhYmxlPnBhY2thZ2VuYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QS0dfQ09ORklHX1BBVEgnPjxnbG9zc3Rlcm0+UEtHX0NPTkZJR19QQVRIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQS0dfQ09ORklHX1BBVEhbZG9jXSA9ICJQYXRoIHRvIHBrZy1jb25maWcgZmlsZXMgZm9yIHRoZSBjdXJyZW50IGJ1aWxkIGNvbnRleHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggdG8gPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPiBmaWxlcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgYnVpbGQgY29udGV4dC4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPiByZWFkcyB0aGlzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBLR0QnPjxnbG9zc3Rlcm0+UEtHRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEtHRFtkb2NdID0gIlBvaW50cyB0byB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGZvciBmaWxlcyB0byBiZSBwYWNrYWdlZCBiZWZvcmUgdGhleSBhcmUgc3BsaXQgaW50byBpbmRpdmlkdWFsIHBhY2thZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGZvciBmaWxlcyB0byBiZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZCBiZWZvcmUgdGhleSBhcmUgc3BsaXQgaW50byBpbmRpdmlkdWFsIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBkZWZhdWx0cyB0byB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7V09SS0RJUn0vcGFja2FnZQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERvIG5vdCBjaGFuZ2UgdGhpcyBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBLR0RBVEFfRElSJz48Z2xvc3N0ZXJtPlBLR0RBVEFfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQS0dEQVRBX0RJUltkb2NdID0gIlBvaW50cyB0byBhIHNoYXJlZCwgZ2xvYmFsLXN0YXRlIGRpcmVjdG9yeSB0aGF0IGhvbGRzIGRhdGEgZ2VuZXJhdGVkIGR1cmluZyB0aGUgcGFja2FnaW5nIHByb2Nlc3MuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIGEgc2hhcmVkLCBnbG9iYWwtc3RhdGUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgZGF0YQorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBwYWNrYWdpbmcgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBwYWNrYWdpbmcgcHJvY2VzcywgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlZGF0YSc+PGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgcGFja2FnZXMgZGF0YSBmb3IgZWFjaCByZWNpcGUgYW5kIGluc3RhbGxzIGl0IGludG8KKyAgICAgICAgICAgICAgICAgICAgdGhpcyB0ZW1wb3JhcnksIHNoYXJlZCBhcmVhLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBkZWZhdWx0cyB0byB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7U1RBR0lOR19ESVJfSE9TVH0vcGtnZGF0YQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERvIG5vdCBjaGFuZ2UgdGhpcyBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBLR0RFU1QnPjxnbG9zc3Rlcm0+UEtHREVTVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEtHREVTVFtkb2NdID0gIlBvaW50cyB0byB0aGUgcGFyZW50IGRpcmVjdG9yeSBmb3IgZmlsZXMgdG8gYmUgcGFja2FnZWQgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gc3BsaXQgaW50byBpbmRpdmlkdWFsIHBhY2thZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgcGFyZW50IGRpcmVjdG9yeSBmb3IgZmlsZXMgdG8gYmUgcGFja2FnZWQKKyAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gc3BsaXQgaW50byBpbmRpdmlkdWFsIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBkZWZhdWx0cyB0byB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7V09SS0RJUn0vcGFja2FnZXMtc3BsaXQKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVbmRlciB0aGlzIGRpcmVjdG9yeSwgdGhlIGJ1aWxkIHN5c3RlbSBjcmVhdGVzCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGZvciBlYWNoIHBhY2thZ2Ugc3BlY2lmaWVkIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgY2hhbmdlIHRoaXMgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QS0dERVNUV09SSyc+PGdsb3NzdGVybT5QS0dERVNUV09SSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEtHREVTVFdPUktbZG9jXSA9ICJQb2ludHMgdG8gYSB0ZW1wb3Jhcnkgd29yayBhcmVhIHVzZWQgYnkgdGhlIGRvX3BhY2thZ2UgdGFzayB0byB3cml0ZSBvdXRwdXQgZnJvbSB0aGUgZG9fcGFja2FnZWRhdGEgdGFzay4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gYSB0ZW1wb3Jhcnkgd29yayBhcmVhIHVzZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIHRvIHdyaXRlIG91dHB1dCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZWRhdGEnPjxmaWxlbmFtZT5kb19wYWNrYWdlZGF0YTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBLR0RFU1RXT1JLPC9maWxlbmFtZT4gbG9jYXRpb24gZGVmYXVsdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAke1dPUktESVJ9L3BrZ2RhdGEKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT4gdGFzayB0aGVuIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgIHRoZSBkYXRhIGluIHRoZSB0ZW1wb3Jhcnkgd29yayBhcmVhIGFuZCBpbnN0YWxscyBpdCBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgc2hhcmVkIGRpcmVjdG9yeSBwb2ludGVkIHRvIGJ5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dEQVRBX0RJUic+PGZpbGVuYW1lPlBLR0RBVEFfRElSPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgY2hhbmdlIHRoaXMgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QS0dFJz48Z2xvc3N0ZXJtPlBLR0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBLR0VbZG9jXSA9ICJUaGUgZXBvY2ggb2YgdGhlIG91dHB1dCBwYWNrYWdlIGJ1aWx0IGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBlcG9jaCBvZiB0aGUgb3V0cHV0IHBhY2thZ2UgYnVpbHQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5QS0dFPC9maWxlbmFtZT4gaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QRSc+PGZpbGVuYW1lPlBFPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBLR1InPjxnbG9zc3Rlcm0+UEtHUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEtHUltkb2NdID0gIlRoZSByZXZpc2lvbiBvZiB0aGUgb3V0cHV0IHBhY2thZ2UgYnVpbHQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJldmlzaW9uIG9mIHRoZSBvdXRwdXQgcGFja2FnZSBidWlsdCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPlBLR1I8L2ZpbGVuYW1lPiBpcyBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEtHVic+PGdsb3NzdGVybT5QS0dWPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQS0dWW2RvY10gPSAiVGhlIHZlcnNpb24gb2YgdGhlIG91dHB1dCBwYWNrYWdlIGJ1aWx0IGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2ZXJzaW9uIG9mIHRoZSBvdXRwdXQgcGFja2FnZSBidWlsdCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPlBLR1Y8L2ZpbGVuYW1lPiBpcyBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBOJz48Z2xvc3N0ZXJtPlBOPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQTltkb2NdID0gIlBOIHJlZmVycyB0byBhIHJlY2lwZSBuYW1lIGluIHRoZSBjb250ZXh0IG9mIGEgZmlsZSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFzIGlucHV0IHRvIGNyZWF0ZSBhIHBhY2thZ2UuIEl0IHJlZmVycyB0byBhIHBhY2thZ2UgbmFtZSBpbiB0aGUgY29udGV4dCBvZiBhIGZpbGUgY3JlYXRlZCBvciBwcm9kdWNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGNhbiBoYXZlIHR3byBzZXBhcmF0ZSBmdW5jdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0OiBhIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBuYW1lIG9yIGEgcmVzdWx0aW5nIHBhY2thZ2UgbmFtZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gcmVmZXJzIHRvIGEgcmVjaXBlIG5hbWUgaW4gdGhlIGNvbnRleHQgb2YgYSBmaWxlIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXMgaW5wdXQgdG8gY3JlYXRlIGEgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgaXMgbm9ybWFsbHkgZXh0cmFjdGVkIGZyb20gdGhlIHJlY2lwZSBmaWxlIG5hbWUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgcmVjaXBlIGlzIG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leHBhdF8yLjAuMS5iYjwvZmlsZW5hbWU+LCB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgImV4cGF0Ii4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIHJlZmVycyB0byBhIHBhY2thZ2UgbmFtZSBpbiB0aGUgY29udGV4dCBvZiBhIGZpbGUgY3JlYXRlZCBvciBwcm9kdWNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgYXBwbGljYWJsZSwgdGhlIDxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+IHZhcmlhYmxlIGFsc28gY29udGFpbnMgYW55IHNwZWNpYWwKKyAgICAgICAgICAgICAgICAgICAgc3VmZml4IG9yIHByZWZpeC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHVzaW5nIDxmaWxlbmFtZT5iYXNoPC9maWxlbmFtZT4gdG8gYnVpbGQgcGFja2FnZXMgZm9yIHRoZSBuYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSwgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gaXMgPGZpbGVuYW1lPmJhc2gtbmF0aXZlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIDxmaWxlbmFtZT5iYXNoPC9maWxlbmFtZT4gdG8gYnVpbGQgcGFja2FnZXMgZm9yIHRoZSB0YXJnZXQgYW5kIGZvciBNdWx0aWxpYiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gd291bGQgYmUgPGZpbGVuYW1lPmJhc2g8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYjY0LWJhc2g8L2ZpbGVuYW1lPiwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBOQkxBQ0tMSVNUJz48Z2xvc3N0ZXJtPlBOQkxBQ0tMSVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQTkJMQUNLTElTVFtkb2NdID0gIkxpc3RzIHJlY2lwZXMgeW91IGRvIG5vdCB3YW50IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHJlY2lwZXMgeW91IGRvIG5vdCB3YW50IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHRvIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJsYWNrbGlzdCc+PGZpbGVuYW1lPmJsYWNrbGlzdDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgd2hpY2ggdGhlIHJlY2lwZSBtdXN0IGluaGVyaXQgZ2xvYmFsbHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHByZXZlbnQgYSByZWNpcGUgZnJvbSBiZWluZyBidWlsdCwgaW5oZXJpdCB0aGUgY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsbHkgYW5kIHVzZSB0aGUgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHByZXZlbnRzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teXJlY2lwZTwvZmlsZW5hbWU+IGZyb20gYmVpbmcgYnVpbHQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVCArPSAiYmxhY2tsaXN0IgorICAgICBQTkJMQUNLTElTVFtteXJlY2lwZV0gPSAiTm90IHN1cHBvcnRlZCBieSBvdXIgb3JnYW5pemF0aW9uLiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORCc+PGdsb3NzdGVybT5QT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCBob3N0IHBhcnQgb2YgdGhlIFNESy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIG9uY2UgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIGhvc3QgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgZnVuY3Rpb25zIHNlcGFyYXRlZCBieSBzZW1pY29sb25zOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORCArPSAiPHJlcGxhY2VhYmxlPmZ1bmN0aW9uPC9yZXBsYWNlYWJsZT47IC4uLiAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdG8gcGFzcyB0aGUgU0RLIHBhdGggdG8gYSBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBhIGZ1bmN0aW9uLCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtTREtfRElSfTwvZmlsZW5hbWU+LCB3aGljaCBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIHBhcmVudCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB3aGVuIGNyZWF0aW5nIFNESyBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES19ESVInPjxmaWxlbmFtZT5TREtfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EJz48Z2xvc3N0ZXJtPlBPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0YXJnZXQgcGFydCBvZiB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgdGFyZ2V0IHBhcnQgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IGZ1bmN0aW9ucyBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9uczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORCArPSAiPHJlcGxhY2VhYmxlPmZ1bmN0aW9uPC9yZXBsYWNlYWJsZT47IC4uLiAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdG8gcGFzcyB0aGUgU0RLIHBhdGggdG8gYSBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBhIGZ1bmN0aW9uLCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtTREtfRElSfTwvZmlsZW5hbWU+LCB3aGljaCBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIHBhcmVudCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB3aGVuIGNyZWF0aW5nIFNESyBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES19ESVInPjxmaWxlbmFtZT5TREtfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSJz48Z2xvc3N0ZXJtPlBSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQUltkb2NdID0gIlRoZSByZXZpc2lvbiBvZiB0aGUgcmVjaXBlLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyB2YXJpYWJsZSBpcyAncjAnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSByZXZpc2lvbiBvZiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyB2YXJpYWJsZSBpcyAicjAiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSRUZFUlJFRF9QUk9WSURFUic+PGdsb3NzdGVybT5QUkVGRVJSRURfUFJPVklERVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBSRUZFUlJFRF9QUk9WSURFUltkb2NdID0gIklmIG11bHRpcGxlIHJlY2lwZXMgcHJvdmlkZSBhbiBpdGVtLCB0aGlzIHZhcmlhYmxlIGRldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElmIG11bHRpcGxlIHJlY2lwZXMgcHJvdmlkZSBhbiBpdGVtLCB0aGlzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGRldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGFsd2F5cyBzdWZmaXggdGhlIHZhcmlhYmxlIHdpdGggdGhlIG5hbWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIGl0ZW0sIGFuZCB5b3Ugc2hvdWxkIHNldCBpdCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHJlY2lwZSB0byB3aGljaCB5b3Ugd2FudCB0byBnaXZlIHByZWNlZGVuY2UuCisgICAgICAgICAgICAgICAgICAgIFNvbWUgZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJsaW51eC15b2N0byIKKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA9ICJ4c2VydmVyLXhmODYiCisgICAgIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsID89ICJtZXNhIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFJFRkVSUkVEX1ZFUlNJT04nPjxnbG9zc3Rlcm0+UFJFRkVSUkVEX1ZFUlNJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBSRUZFUlJFRF9WRVJTSU9OW2RvY10gPSAiSWYgdGhlcmUgYXJlIG11bHRpcGxlIHZlcnNpb25zIG9mIHJlY2lwZXMgYXZhaWxhYmxlLCB0aGlzIHZhcmlhYmxlIGRldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiByZWNpcGVzIGF2YWlsYWJsZSwgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBkZXRlcm1pbmVzIHdoaWNoIHJlY2lwZSBzaG91bGQgYmUgZ2l2ZW4gcHJlZmVyZW5jZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgYWx3YXlzIHN1ZmZpeCB0aGUgdmFyaWFibGUgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgeW91IHdhbnQgdG8gc2VsZWN0LCBhbmQgeW91IHNob3VsZCBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFjY29yZGluZ2x5IGZvciBwcmVjZWRlbmNlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgIjxmaWxlbmFtZT4lPC9maWxlbmFtZT4iIGNoYXJhY3RlciBhcyBhCisgICAgICAgICAgICAgICAgICAgIHdpbGRjYXJkIHRvIG1hdGNoIGFueSBudW1iZXIgb2YgY2hhcmFjdGVycywgd2hpY2ggY2FuIGJlCisgICAgICAgICAgICAgICAgICAgIHVzZWZ1bCB3aGVuIHNwZWNpZnlpbmcgdmVyc2lvbnMgdGhhdCBjb250YWluIGxvbmcgcmV2aXNpb24KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVycyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGNoYW5nZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdHdvIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRUZFUlJFRF9WRVJTSU9OX3B5dGhvbiA9ICIyLjcuMyIKKyAgICAgUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPSAiMy4xOSUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUkVNSVJST1JTJz48Z2xvc3N0ZXJtPlBSRU1JUlJPUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBSRU1JUlJPUlNbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBwYXRocyBmcm9tIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGdldHMgc291cmNlIGNvZGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFkZGl0aW9uYWwgcGF0aHMgZnJvbSB3aGljaCB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBnZXRzIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBidWlsZCBzeXN0ZW0gc2VhcmNoZXMgZm9yIHNvdXJjZSBjb2RlLCBpdCBmaXJzdAorICAgICAgICAgICAgICAgICAgICB0cmllcyB0aGUgbG9jYWwgZG93bmxvYWQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBJZiB0aGF0IGxvY2F0aW9uIGZhaWxzLCB0aGUgYnVpbGQgc3lzdGVtIHRyaWVzIGxvY2F0aW9ucworICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGJ5IDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4sIHRoZSB1cHN0cmVhbQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UsIGFuZCB0aGVuIGxvY2F0aW9ucyBzcGVjaWZpZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1JUlJPUlMnPjxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGluIHRoYXQgb3JkZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzc3VtaW5nIHlvdXIgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItRElTVFJPJz48ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICBpcyAicG9reSIsIHRoZSBkZWZhdWx0IHZhbHVlIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+IGlzIGRlZmluZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2Rpc3Ryby9wb2t5LmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHlvdSBjb3VsZCBhZGQgYSBzcGVjaWZpYyBzZXJ2ZXIgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gdG8gYXR0ZW1wdCBiZWZvcmUgYW55IG90aGVycyBieSBhZGRpbmcKKyAgICAgICAgICAgICAgICAgICAgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFTUlSUk9SU19wcmVwZW5kID0gIlwKKyAgICAgZ2l0Oi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgZnRwOi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgaHR0cDovLy4qLy4qIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9zb3VyY2VzLyBcbiBcCisgICAgIGh0dHBzOi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGNoYW5nZXMgY2F1c2UgdGhlIGJ1aWxkIHN5c3RlbSB0byBpbnRlcmNlcHQKKyAgICAgICAgICAgICAgICAgICAgR2l0LCBGVFAsIEhUVFAsIGFuZCBIVFRQUyByZXF1ZXN0cyBhbmQgZGlyZWN0IHRoZW0gdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5odHRwOi8vPC9maWxlbmFtZT4gc291cmNlcyBtaXJyb3IuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIDxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4gVVJMcyB0byBwb2ludAorICAgICAgICAgICAgICAgICAgICB0byBsb2NhbCBkaXJlY3RvcmllcyBvciBuZXR3b3JrIHNoYXJlcyBhcyB3ZWxsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSSU9SSVRZJz48Z2xvc3N0ZXJtPlBSSU9SSVRZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQUklPUklUWVtkb2NdID0gIkluZGljYXRlcyB0aGUgaW1wb3J0YW5jZSBvZiBhIHBhY2thZ2UuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAnb3B0aW9uYWwnLiAgT3RoZXIgc3RhbmRhcmQgdmFsdWVzIGFyZSAncmVxdWlyZWQnLCAnc3RhbmRhcmQnIGFuZCAnZXh0cmEnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyB0aGUgaW1wb3J0YW5jZSBvZiBhIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUklPUklUWTwvZmlsZW5hbWU+IGlzIGNvbnNpZGVyZWQgdG8gYmUgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgZGlzdHJpYnV0aW9uIHBvbGljeSBiZWNhdXNlIHRoZSBpbXBvcnRhbmNlIG9mIGFueSBnaXZlbgorICAgICAgICAgICAgICAgICAgICByZWNpcGUgZGVwZW5kcyBvbiB0aGUgcHVycG9zZSBmb3Igd2hpY2ggdGhlIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICBpcyBiZWluZyBwcm9kdWNlZC4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgPGZpbGVuYW1lPlBSSU9SSVRZPC9maWxlbmFtZT4gaXMgbm90IG5vcm1hbGx5IHNldAorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgPGZpbGVuYW1lPlBSSU9SSVRZPC9maWxlbmFtZT4gdG8gInJlcXVpcmVkIiwKKyAgICAgICAgICAgICAgICAgICAgInN0YW5kYXJkIiwgImV4dHJhIiwgYW5kICJvcHRpb25hbCIsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSSVZBVEVfTElCUyc+PGdsb3NzdGVybT5QUklWQVRFX0xJQlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBSSVZBVEVfTElCU1tkb2NdID0gIlNwZWNpZmllcyBsaWJyYXJpZXMgaW5zdGFsbGVkIHdpdGhpbiBhIHJlY2lwZSB0aGF0IHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtJ3Mgc2hhcmVkIGxpYnJhcnkgcmVzb2x2ZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGxpYnJhcmllcyBpbnN0YWxsZWQgd2l0aGluIGEgcmVjaXBlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0ncworICAgICAgICAgICAgICAgICAgICBzaGFyZWQgbGlicmFyeSByZXNvbHZlci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB0eXBpY2FsbHkgdXNlZCB3aGVuIHNvZnR3YXJlIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0IGJ5IGEgcmVjaXBlIGhhcyBpdHMgb3duIHByaXZhdGUgdmVyc2lvbnMgb2YgYQorICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5IG5vcm1hbGx5IHByb3ZpZGVkIGJ5IGFub3RoZXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHlvdSB3b3VsZCBub3Qgd2FudCB0aGUgcGFja2FnZSBjb250YWluaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBwcml2YXRlIGxpYnJhcmllcyB0byBiZSBzZXQgYXMgYSBkZXBlbmRlbmN5IG9uIG90aGVyCisgICAgICAgICAgICAgICAgICAgIHVucmVsYXRlZCBwYWNrYWdlcyB0aGF0IHNob3VsZCBpbnN0ZWFkIGRlcGVuZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBwcm92aWRpbmcgdGhlIHN0YW5kYXJkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIExpYnJhcmllcyBzcGVjaWZpZWQgaW4gdGhpcyB2YXJpYWJsZSBzaG91bGQgYmUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIGJ5IHRoZWlyIGZpbGUgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGZyb20gdGhlIEZpcmVmb3ggcmVjaXBlIGluIG1ldGEtYnJvd3NlcjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUklWQVRFX0xJQlMgPSAibGlibW96anMuc28gXAorICAgICAgICAgICAgICAgICAgICAgbGlieHBjb20uc28gXAorICAgICAgICAgICAgICAgICAgICAgbGlibnNwcjQuc28gXAorICAgICAgICAgICAgICAgICAgICAgbGlieHVsLnNvIFwKKyAgICAgICAgICAgICAgICAgICAgIGxpYm1vemFsbG9jLnNvIFwKKyAgICAgICAgICAgICAgICAgICAgIGxpYnBsYzQuc28gXAorICAgICAgICAgICAgICAgICAgICAgbGlicGxkczQuc28iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUk9WSURFUyc+PGdsb3NzdGVybT5QUk9WSURFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFJPVklERVNbZG9jXSA9ICJBIGxpc3Qgb2YgYWxpYXNlcyB0aGF0IGEgcmVjaXBlIGFsc28gcHJvdmlkZXMuIFRoZXNlIGFsaWFzZXMgYXJlIHVzZWZ1bCBmb3Igc2F0aXNmeWluZyBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIgcmVjaXBlcyBkdXJpbmcgdGhlIGJ1aWxkIGFzIHNwZWNpZmllZCBieSBERVBFTkRTLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBhbGlhc2VzIGJ5IHdoaWNoIGEgcGFydGljdWxhciByZWNpcGUgY2FuIGJlCisgICAgICAgICAgICAgICAgICAgIGtub3duLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBhIHJlY2lwZSdzIG93bgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz5QTjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyBpbXBsaWNpdGx5IGFscmVhZHkgaW4gaXRzIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGxpc3QuCisgICAgICAgICAgICAgICAgICAgIElmIGEgcmVjaXBlIHVzZXMgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4sIHRoZQorICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsIGFsaWFzZXMgYXJlIHN5bm9ueW1zIGZvciB0aGUgcmVjaXBlIGFuZCBjYW4KKyAgICAgICAgICAgICAgICAgICAgYmUgdXNlZnVsIHNhdGlzZnlpbmcgZGVwZW5kZW5jaWVzIG9mIG90aGVyIHJlY2lwZXMgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBhcyBzcGVjaWZpZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz5ERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4gc3RhdGVtZW50IGZyb20gYSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgZmlsZSA8ZmlsZW5hbWU+bGliYXZfMC44LjExLmJiPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJPVklERVMgKz0gImxpYnBvc3Rwcm9jIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgcmVzdWx0cyBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgImxpYmF2IiByZWNpcGUgYWxzbyBiZWluZyBrbm93biBhcyAibGlicG9zdHByb2MiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSU0VSVl9IT1NUJz48Z2xvc3N0ZXJtPlBSU0VSVl9IT1NUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQUlNFUlZfSE9TVFtkb2NdID0gIlRoZSBuZXR3b3JrIGJhc2VkIFBSIHNlcnZpY2UgaG9zdCBhbmQgcG9ydC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbmV0d29yayBiYXNlZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlIGhvc3QgYW5kIHBvcnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mLnNhbXBsZS5leHRlbmRlZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHNob3dzIGhvdyB0aGUgPGZpbGVuYW1lPlBSU0VSVl9IT1NUPC9maWxlbmFtZT4gdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAgc2V0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSU0VSVl9IT1NUID0gImxvY2FsaG9zdDowIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGUgdmFyaWFibGUgaWYgeW91IHdhbnQgdG8gYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICBzdGFydCBhIGxvY2FsCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3dvcmtpbmctd2l0aC1hLXByLXNlcnZpY2UnPlBSIHNlcnZpY2U8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgPGZpbGVuYW1lPlBSU0VSVl9IT1NUPC9maWxlbmFtZT4gdG8gb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzIHRvIHVzZSBhIHJlbW90ZSBQUiBzZXJ2aWNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBURVNUX0VOQUJMRUQnPjxnbG9zc3Rlcm0+UFRFU1RfRU5BQkxFRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFJTRVJWX0hPU1RbZG9jXSA9ICJTcGVjaWZpZXMgd2hldGhlciBvciBub3QgUGFja2FnZSBUZXN0IChwdGVzdCkgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIHdoZW4gYnVpbGRpbmcgYSByZWNpcGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Rlc3RpbmctcGFja2FnZXMtd2l0aC1wdGVzdCc+UGFja2FnZSBUZXN0PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgKHB0ZXN0KSBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgd2hlbiBidWlsZGluZyBhIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBub3Qgc2V0IHRoaXMgdmFyaWFibGUgZGlyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgIEVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgYnVpbGRpbmcgUGFja2FnZSBUZXN0cworICAgICAgICAgICAgICAgICAgICBhdCBidWlsZCB0aW1lIHNob3VsZCBiZSBkb25lIGJ5IGFkZGluZyAicHRlc3QiIHRvIChvcgorICAgICAgICAgICAgICAgICAgICByZW1vdmluZyBpdCBmcm9tKQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QVic+PGdsb3NzdGVybT5QVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFZbZG9jXSA9ICJUaGUgdmVyc2lvbiBvZiB0aGUgcmVjaXBlLiBUaGUgdmVyc2lvbiBpcyBub3JtYWxseSBleHRyYWN0ZWQgZnJvbSB0aGUgcmVjaXBlIGZpbGVuYW1lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2ZXJzaW9uIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2ZXJzaW9uIGlzIG5vcm1hbGx5IGV4dHJhY3RlZCBmcm9tIHRoZSByZWNpcGUgZmlsZW5hbWUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgcmVjaXBlIGlzIG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leHBhdF8yLjAuMS5iYjwvZmlsZW5hbWU+LCB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgIjIuMC4xIi4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gaXMgZ2VuZXJhbGx5IG5vdCBvdmVycmlkZGVuIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICBhIHJlY2lwZSB1bmxlc3MgaXQgaXMgYnVpbGRpbmcgYW4gdW5zdGFibGUgKGkuZS4gZGV2ZWxvcG1lbnQpIHZlcnNpb24gZnJvbSBhIHNvdXJjZSBjb2RlIHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gR2l0IG9yIFN1YnZlcnNpb24pLgorICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QWVRIT05fQUJJJz48Z2xvc3N0ZXJtPlBZVEhPTl9BQkk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBZVEhPTl9BQklbZG9jXSA9ICJXaGVuIHVzZWQgYnkgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIGRpc3R1dGlsczMsIHNldHVwdG9vbHMzLCBkaXN0dXRpbHMsIG9yIHNldHVwdG9vbHMgY2xhc3NlcywgZGVub3RlcyB0aGUgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoQUJJKSBjdXJyZW50bHkgaW4gdXNlIGZvciBQeXRob24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2VkIGJ5IHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kaXN0dXRpbHMzJz48ZmlsZW5hbWU+ZGlzdHV0aWxzMzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc2V0dXB0b29sczMnPjxmaWxlbmFtZT5zZXR1cHRvb2xzMzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGlzdHV0aWxzJz48ZmlsZW5hbWU+ZGlzdHV0aWxzPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zZXR1cHRvb2xzJz48ZmlsZW5hbWU+c2V0dXB0b29sczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLCBkZW5vdGVzIHRoZSBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseSBpbiB1c2UgZm9yIFB5dGhvbi4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIEFCSSBpcyAibSIuCisgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgaGF2ZSB0byBzZXQgdGhpcyB2YXJpYWJsZSBhcyB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBzZXRzIGl0IGZvciB5b3UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlIEFCSSB0byBjb25zdHJ1Y3QKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG5hbWVzIHVzZWQgd2hlbiBpbnN0YWxsaW5nIHRoZSBQeXRob24gaGVhZGVycworICAgICAgICAgICAgICAgICAgICBhbmQgbGlicmFyaWVzIGluIHN5c3Jvb3QKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPi4uLi9weXRob24zLjNtLy4uLjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRpc3R1dGlscyc+PGZpbGVuYW1lPmRpc3R1dGlsczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBkdXJpbmcgY3Jvc3MtYnVpbGRzIGFsc28gdXNlIHRoaXMgdmFyaWFibGUgdG8KKyAgICAgICAgICAgICAgICAgICAgbG9jYXRlIHRoZSBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgb2YgdGhlIGFwcHJvcHJpYXRlIFB5dGhvbgorICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSBleHRlbnNpb24gaXMgdGFyZ2V0aW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBZVEhPTl9QTic+PGdsb3NzdGVybT5QWVRIT05fUE48L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBZVEhPTl9QTltkb2NdID0gIldoZW4gdXNlZCBieSByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgZGlzdHV0aWxzMywgc2V0dXB0b29sczMsIGRpc3R1dGlscywgb3Igc2V0dXB0b29scyBjbGFzc2VzLCBzcGVjaWZpZXMgdGhlIG1ham9yIFB5dGhvbiB2ZXJzaW9uIGJlaW5nIGJ1aWx0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNlZCBieSByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGlzdHV0aWxzMyc+PGZpbGVuYW1lPmRpc3R1dGlsczM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXNldHVwdG9vbHMzJz48ZmlsZW5hbWU+c2V0dXB0b29sczM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRpc3R1dGlscyc+PGZpbGVuYW1lPmRpc3R1dGlsczwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc2V0dXB0b29scyc+PGZpbGVuYW1lPnNldHVwdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcywgc3BlY2lmaWVzIHRoZSBtYWpvciBQeXRob24gdmVyc2lvbiBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIFB5dGhvbiAyLngsIDxmaWxlbmFtZT5QWVRIT05fUE48L2ZpbGVuYW1lPiB3b3VsZAorICAgICAgICAgICAgICAgICAgICBiZSAicHl0aG9uMiIuICBGb3IgUHl0aG9uIDMueCwgdGhlIHZhcmlhYmxlIHdvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgICJweXRob24zIi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBoYXZlIHRvIHNldCB0aGlzIHZhcmlhYmxlIGFzIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgc2V0cyBpdCBmb3IgeW91LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgYWxsb3dzIHJlY2lwZXMgdG8gdXNlIGNvbW1vbiBpbmZyYXN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICBzdWNoIGFzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVQRU5EUyArPSAiJHtQWVRIT05fUE59LW5hdGl2ZSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgdGhlIHZlcnNpb24gb2YgdGhlIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICAgICAgaXMgPGZpbGVuYW1lPlBZVEhPTl9QTjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1xJz48dGl0bGU+UTwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1RTUFLRV9QUk9GSUxFUyc+PGdsb3NzdGVybT5RTUFLRV9QUk9GSUxFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUU1BS0VfUFJPRklMRVNbZG9jXSA9ICJTcGVjaWZpZXMgeW91ciBvd24gc3Vic2V0IG9mIC5wcm8gZmlsZXMgdG8gYmUgYnVpbHQgZm9yIHVzZSB3aXRoIHFtYWtlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB5b3VyIG93biBzdWJzZXQgb2YgPGZpbGVuYW1lPi5wcm88L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlcyB0byBiZSBidWlsdCBmb3IgdXNlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFtYWtlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgc2V0IHRoaXMgdmFyaWFibGUsIGFsbAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnBybzwvZmlsZW5hbWU+IGZpbGVzIGluIHRoZSBkaXJlY3RvcnkgcG9pbnRlZCB0bworICAgICAgICAgICAgICAgICAgICBieSA8bGluayBsaW5rZW5kPSd2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBidWlsdCBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgd2l0aCByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcW1ha2UqJz48ZmlsZW5hbWU+cW1ha2VfYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBvciBvdGhlciBjbGFzc2VzIHRoYXQgaW5oZXJpdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cW1ha2VfYmFzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1yJz48dGl0bGU+UjwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SQU5MSUInPjxnbG9zc3Rlcm0+UkFOTElCPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBSQU5MSUJbZG9jXSA9ICJNaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ3JhbmxpYicuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1bgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmFubGliPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUkNPTkZMSUNUUyc+PGdsb3NzdGVybT5SQ09ORkxJQ1RTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBSQ09ORkxJQ1RTW2RvY10gPSAiVGhlIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBjb25mbGljdCB3aXRoIGFub3RoZXIgcGFja2FnZS4gTm90ZSB0aGF0IHRoZSBwYWNrYWdlIHdpbGwgbm90IGJlIGluc3RhbGxlZCBpZiB0aGUgY29uZmxpY3RpbmcgcGFja2FnZXMgYXJlIG5vdCBmaXJzdCByZW1vdmVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgY29uZmxpY3Qgd2l0aCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHBhY2thZ2VzIHdpbGwgbm90IGJlIGluc3RhbGxlZCBpZiBjb25mbGljdGluZworICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBhcmUgbm90IGZpcnN0IHJlbW92ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgTGlrZSBhbGwgcGFja2FnZS1jb250cm9sbGluZyB2YXJpYWJsZXMsIHlvdSBtdXN0IGFsd2F5cyB1c2UKKyAgICAgICAgICAgICAgICAgICB0aGVtIGluIGNvbmp1bmN0aW9uIHdpdGggYSBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkNPTkZMSUNUU18ke1BOfSA9ICI8cmVwbGFjZWFibGU+YW5vdGhlcl9jb25mbGljdGluZ19wYWNrYWdlX25hbWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UsIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMsIHN1cHBvcnRzCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnlpbmcgdmVyc2lvbmVkIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggdGhlIHN5bnRheCB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSBwYWNrYWdpbmcKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBCaXRCYWtlIGhpZGVzIHRoZXNlIGRpZmZlcmVuY2VzIGZyb20geW91LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBnZW5lcmFsIHN5bnRheCB0byBzcGVjaWZ5IHZlcnNpb25zIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5SQ09ORkxJQ1RTPC9maWxlbmFtZT4gdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkNPTkZMSUNUU18ke1BOfSA9ICI8cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+ICg8cmVwbGFjZWFibGU+b3BlcmF0b3I8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+KSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgPGZpbGVuYW1lPm9wZXJhdG9yPC9maWxlbmFtZT4sIHlvdSBjYW4gc3BlY2lmeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgID0KKyAgICAgJmx0OworICAgICAmZ3Q7CisgICAgICZsdDs9CisgICAgICZndDs9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0cyB1cCBhIGRlcGVuZGVuY3kgb24gdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAxLjIgb3IgZ3JlYXRlciBvZiB0aGUgcGFja2FnZSA8ZmlsZW5hbWU+Zm9vPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkNPTkZMSUNUU18ke1BOfSA9ICJmb28gKD49IDEuMikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SREVQRU5EUyc+PGdsb3NzdGVybT5SREVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUkRFUEVORFNbZG9jXSA9ICJMaXN0cyBhIHBhY2thZ2UncyBydW50aW1lIGRlcGVuZGVuY2llcyAoaS5lLiBvdGhlciBwYWNrYWdlcykgdGhhdCBtdXN0IGJlIGluc3RhbGxlZCBmb3IgdGhlIHBhY2thZ2UgdG8gYmUgYnVpbHQuIFRoZXkgbXVzdCBiZSB0aGUgbmFtZXMgb2Ygb3RoZXIgcGFja2FnZXMgYXMgbGlzdGVkIGluIHRoZSBQQUNLQUdFUyB2YXJpYWJsZSwgbm90IHJlY2lwZSBuYW1lcyAoUE4pLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIGEgcGFja2FnZSdzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHBhY2thZ2VzKQorICAgICAgICAgICAgICAgICAgICB0aGF0IG11c3QgYmUgaW5zdGFsbGVkIGluIG9yZGVyIGZvciB0aGUgYnVpbHQgcGFja2FnZSB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgY29ycmVjdGx5LgorICAgICAgICAgICAgICAgICAgICBJZiBhIHBhY2thZ2UgaW4gdGhpcyBsaXN0IGNhbm5vdCBiZSBmb3VuZCBkdXJpbmcgdGhlIGJ1aWxkLAorICAgICAgICAgICAgICAgICAgICB5b3Ugd2lsbCBnZXQgYSBidWlsZCBlcnJvci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoZSA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbiBhIHJlY2lwZSwgeW91IGFyZSBlc3NlbnRpYWxseSBzdGF0aW5nIHRoYXQgdGhlIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1idWlsZCc+PGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgZGVwZW5kcyBvbiB0aGUgZXhpc3RlbmNlIG9mIGEgc3BlY2lmaWMgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhpcyBzaW1wbGUgZXhhbXBsZSBmb3IgdHdvIHJlY2lwZXMgbmFtZWQgImEiIGFuZAorICAgICAgICAgICAgICAgICAgICAiYiIgdGhhdCBwcm9kdWNlIHNpbWlsYXJseSBuYW1lZCBJUEsgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCBhcHBlYXJzIGluIHRoZSAiYSIgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJERVBFTkRTXyR7UE59ID0gImIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSwgdGhlIGRlcGVuZGVuY3kgaXMgc3VjaCB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPiB0YXNrIGZvciByZWNpcGUgImEiIGRlcGVuZHMKKyAgICAgICAgICAgICAgICAgICAgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX2lwayc+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfaXBrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgb2YgcmVjaXBlICJiIi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZWFucyB0aGUgcGFja2FnZSBmaWxlIGZvciAiYiIgbXVzdCBiZSBhdmFpbGFibGUgd2hlbgorICAgICAgICAgICAgICAgICAgICB0aGUgb3V0cHV0IGZvciByZWNpcGUgImEiIGhhcyBiZWVuIGNvbXBsZXRlbHkgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIE1vcmUgaW1wb3J0YW50bHksIHBhY2thZ2UgImEiIHdpbGwgYmUgbWFya2VkIGFzIGRlcGVuZGluZworICAgICAgICAgICAgICAgICAgICBvbiBwYWNrYWdlICJiIiBpbiBhIG1hbm5lciB0aGF0IGlzIHVuZGVyc3Rvb2QgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWVzIG9mIHRoZSBwYWNrYWdlcyB5b3UgbGlzdCB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gbXVzdCBiZSB0aGUgbmFtZXMgb2Ygb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgLSB0aGV5IGNhbm5vdCBiZSByZWNpcGUgbmFtZXMuCisgICAgICAgICAgICAgICAgICAgIEFsdGhvdWdoIHBhY2thZ2UgbmFtZXMgYW5kIHJlY2lwZSBuYW1lcyB1c3VhbGx5IG1hdGNoLAorICAgICAgICAgICAgICAgICAgICB0aGUgaW1wb3J0YW50IHBvaW50IGhlcmUgaXMgdGhhdCB5b3UgYXJlCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGluZyBwYWNrYWdlIG5hbWVzIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9mIHRoZSBkZWZhdWx0IGxpc3Qgb2YgcGFja2FnZXMgY3JlYXRlZCBmcm9tCisgICAgICAgICAgICAgICAgICAgIGEgcmVjaXBlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcHBsaWVzCisgICAgICAgICAgICAgICAgICAgIHRvIHBhY2thZ2VzIGJlaW5nIGJ1aWx0LCB5b3Ugc2hvdWxkIGFsd2F5cyB1c2UgdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluIGEgZm9ybSB3aXRoIGFuIGF0dGFjaGVkIHBhY2thZ2UgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGFyZSBidWlsZGluZyBhIGRldmVsb3BtZW50IHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBkZXBlbmRzIG9uIHRoZSA8ZmlsZW5hbWU+cGVybDwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IHdvdWxkIHVzZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSREVQRU5EU18ke1BOfS1kZXYgKz0gInBlcmwiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGV4YW1wbGUsIHRoZSBkZXZlbG9wbWVudCBwYWNrYWdlIGRlcGVuZHMgb24KKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5wZXJsPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGhhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UE59LWRldjwvZmlsZW5hbWU+IHBhY2thZ2UgbmFtZSBhcyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhY2thZ2UgbmFtZSB5b3UgYXR0YWNoIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBtdXN0IGFwcGVhcgorICAgICAgICAgICAgICAgICAgICBhcyBpdCB3b3VsZCBpbiB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlIGJlZm9yZSBhbnkgcmVuYW1pbmcgb2YgdGhlIG91dHB1dCBwYWNrYWdlIGJ5CisgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMgbGlrZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kZWJpYW4nPjxmaWxlbmFtZT5kZWJpYW48L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIG1hbnkgY2FzZXMgeW91IGRvIG5vdCBuZWVkIHRvIGV4cGxpY2l0bHkgYWRkCisgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHNpbmNlIHNvbWUgYXV0b21hdGljCisgICAgICAgICAgICAgICAgICAgIGhhbmRsaW5nIG9jY3VyczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnNobGliZGVwczwvZmlsZW5hbWU+PC9lbXBoYXNpcz46ICBJZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcnVudGltZSBwYWNrYWdlIGNvbnRhaW5zIGEgc2hhcmVkIGxpYnJhcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+KSwgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VzIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIGRldGVybWluZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyB0byB3aGljaCBpdCBpcyBkeW5hbWljYWxseSBsaW5rZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHByb2Nlc3MgYWRkcyB0aGVzZSBsaWJyYXJpZXMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB3aGVuIGNyZWF0aW5nIHRoZSBydW50aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBjZGVwczwvZmlsZW5hbWU+PC9lbXBoYXNpcz46ICBJZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwYWNrYWdlIHNoaXBzIGEgPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGZpbGUsIHRoZSBidWlsZCBwcm9jZXNzIHVzZXMgdGhpcyBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYWRkIGl0ZW1zIHRvIHRoZSA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGNyZWF0ZSB0aGUgcnVudGltZSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UsIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMsIHN1cHBvcnRzCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnlpbmcgdmVyc2lvbmVkIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggdGhlIHN5bnRheCB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSBwYWNrYWdpbmcKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBCaXRCYWtlIGhpZGVzIHRoZXNlIGRpZmZlcmVuY2VzIGZyb20geW91LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBnZW5lcmFsIHN5bnRheCB0byBzcGVjaWZ5IHZlcnNpb25zIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJERVBFTkRTXyR7UE59ID0gIjxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT4gKDxyZXBsYWNlYWJsZT5vcGVyYXRvcjwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT52ZXJzaW9uPC9yZXBsYWNlYWJsZT4pIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciA8ZmlsZW5hbWU+b3BlcmF0b3I8L2ZpbGVuYW1lPiwgeW91IGNhbiBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPQorICAgICAmbHQ7CisgICAgICZndDsKKyAgICAgJmx0Oz0KKyAgICAgJmd0Oz0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzZXRzIHVwIGEgZGVwZW5kZW5jeSBvbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIDEuMiBvciBncmVhdGVyIG9mIHRoZSBwYWNrYWdlIDxmaWxlbmFtZT5mb288L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSREVQRU5EU18ke1BOfSA9ICJmb28gKD49IDEuMikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMnPjxnbG9zc3Rlcm0+UkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgY2xhc3MsIHRoaXMgdmFyaWFibGUgaWRlbnRpZmllcyBkaXN0cmlidXRpb24gZmVhdHVyZXMgdGhhdCBtdXN0IGV4aXN0IGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaW4gb3JkZXIgZm9yIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIHRoZSByZWNpcGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kaXN0cm9fZmVhdHVyZXNfY2hlY2snPjxmaWxlbmFtZT5kaXN0cm9fZmVhdHVyZXNfY2hlY2s8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaWRlbnRpZmllcyBkaXN0cmlidXRpb24gZmVhdHVyZXMgdGhhdCBtdXN0CisgICAgICAgICAgICAgICAgICAgIGV4aXN0IGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaW4gb3JkZXIgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCBpZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJFUVVJUkVEX0RJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGxpc3RzIGEgZmVhdHVyZSB0aGF0IGRvZXMgbm90IGFwcGVhciBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT4gd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIGFuIGVycm9yIG9jY3VycyBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN0b3BzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJNX09MRF9JTUFHRSc+PGdsb3NzdGVybT5STV9PTERfSU1BR0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJNX09MRF9JTUFHRVtkb2NdID0gIlJlY2xhaW1zIGRpc2sgc3BhY2UgYnkgcmVtb3ZpbmcgcHJldmlvdXNseSBidWlsdCB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBpbWFnZSBmcm9tIHRoZSBpbWFnZXMgZGlyZWN0b3J5IHBvaW50ZWQgdG8gYnkgdGhlIERFUExPWV9ESVIgdmFyaWFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUmVjbGFpbXMgZGlzayBzcGFjZSBieSByZW1vdmluZyBwcmV2aW91c2x5IGJ1aWx0CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb25zIG9mIHRoZSBzYW1lIGltYWdlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbWFnZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgcG9pbnRlZCB0byBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZXQgdGhpcyB2YXJpYWJsZSB0byAiMSIgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgdG8gcmVtb3ZlIHRoZXNlCisgICAgICAgICAgICAgICAgICAgIGltYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1STV9XT1JLX0VYQ0xVREUnPjxnbG9zc3Rlcm0+Uk1fV09SS19FWENMVURFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBSTV9XT1JLX0VYQ0xVREVbZG9jXSA9ICJXaXRoIHJtX3dvcmsgZW5hYmxlZCwgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYSBsaXN0IG9mIHBhY2thZ2VzIHdob3NlIHdvcmsgZGlyZWN0b3JpZXMgc2hvdWxkIG5vdCBiZSByZW1vdmVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdpdGggPGZpbGVuYW1lPnJtX3dvcms8L2ZpbGVuYW1lPiBlbmFibGVkLCB0aGlzCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNwZWNpZmllcyBhIGxpc3Qgb2YgcmVjaXBlcyB3aG9zZSB3b3JrIGRpcmVjdG9yaWVzCisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBub3QgYmUgcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcm0td29yayc+PGZpbGVuYW1lPnJtX3dvcmsuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJPT1RfSE9NRSc+PGdsb3NzdGVybT5ST09UX0hPTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJPT1RfSE9NRVtkb2NdID0gIkRlZmluZXMgdGhlIHJvb3QgaG9tZSBkaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgcm9vdCBob21lIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBkaXJlY3RvcnkgaXMgc2V0IGFzIGZvbGxvd3MgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgY29uZmlndXJhdGlvbiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJPT1RfSE9NRSA/Pz0gIi9ob21lL3Jvb3QiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRlZmF1bHQgdmFsdWUgaXMgbGlrZWx5IHVzZWQgYmVjYXVzZSBzb21lCisgICAgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlZCBzb2x1dGlvbnMgcHJlZmVyIHRvIGhhdmUgYSByZWFkLW9ubHkgcm9vdAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSBhbmQgcHJlZmVyIHRvIGtlZXAgd3JpdGVhYmxlIGRhdGEgaW4gb25lCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJ5IHNldHRpbmcgdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluIGFueSBsYXllciBvciBpbiB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBkZWZhdWx0IGlzIHNldCB1c2luZyBhICJ3ZWFrIiBhc3NpZ25tZW50CisgICAgICAgICAgICAgICAgICAgIChpLmUuICI/Pz0iKSwgeW91IGNhbiB1c2UgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXMKKyAgICAgICAgICAgICAgICAgICAgdG8gZGVmaW5lIHlvdXIgb3ZlcnJpZGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUk9PVF9IT01FID0gIi9yb290IgorICAgICBST09UX0hPTUUgPz0gIi9yb290IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZXNlIG92ZXJyaWRlIGV4YW1wbGVzIHVzZSA8ZmlsZW5hbWU+L3Jvb3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgcHJvYmFibHkgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ST09URlMnPjxnbG9zc3Rlcm0+Uk9PVEZTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBST09URlNbZG9jXSA9ICJJbmRpY2F0ZXMgYSBmaWxlc3lzdGVtIGltYWdlIHRvIGluY2x1ZGUgYXMgdGhlIHJvb3QgZmlsZXN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgYSBmaWxlc3lzdGVtIGltYWdlIHRvIGluY2x1ZGUgYXMgdGhlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5ST09URlM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBhbiBvcHRpb25hbAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB1c2VkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJvb3RpbWcnPjxmaWxlbmFtZT5ib290aW1nPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJPT1RGU19QT1NUSU5TVEFMTF9DT01NQU5EJz48Z2xvc3N0ZXJtPlJPT1RGU19QT1NUSU5TVEFMTF9DT01NQU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBST09URlNfUE9TVElOU1RBTExfQ09NTUFORFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYWZ0ZXIgaW5zdGFsbGluZyBwYWNrYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGFmdGVyIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBpbnN0YWxsZWQgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBmdW5jdGlvbnMgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUk9PVEZTX1BPU1RJTlNUQUxMX0NPTU1BTkQgKz0gIjxyZXBsYWNlYWJsZT5mdW5jdGlvbjwvcmVwbGFjZWFibGU+OyAuLi4gIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIHBhc3MgdGhlIHJvb3QgZmlsZXN5c3RlbSBwYXRoIHRvIGEgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gYSBmdW5jdGlvbiwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7SU1BR0VfUk9PVEZTfTwvZmlsZW5hbWU+LCB3aGljaCBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSB0aGF0IGJlY29tZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTJz48ZmlsZW5hbWU+SU1BR0VfUk9PVEZTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EJz48Z2xvc3N0ZXJtPlJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBST09URlNfUE9TVFBST0NFU1NfQ09NTUFORFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgcm9vdCBmaWxlc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgZnVuY3Rpb25zIHNlcGFyYXRlZCBieSBzZW1pY29sb25zOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICI8cmVwbGFjZWFibGU+ZnVuY3Rpb248L3JlcGxhY2VhYmxlPjsgLi4uICIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBwYXNzIHRoZSByb290IGZpbGVzeXN0ZW0gcGF0aCB0byBhIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIGEgZnVuY3Rpb24sIHlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0lNQUdFX1JPT1RGU308L2ZpbGVuYW1lPiwgd2hpY2ggcG9pbnRzIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBkaXJlY3RvcnkgdGhhdCBiZWNvbWVzIHRoZSByb290IGZpbGVzeXN0ZW0gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGUyc+PGZpbGVuYW1lPklNQUdFX1JPT1RGUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ST09URlNfUE9TVFVOSU5TVEFMTF9DT01NQU5EJz48Z2xvc3N0ZXJtPlJPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkRbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGFmdGVyIHJlbW92YWwgb2YgdW5uZWVkZWQgcGFja2FnZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBhZnRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgcmVtb3ZlZCB1bm5lY2Vzc2FyeQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBydW50aW1lIHBhY2thZ2UgbWFuYWdlbWVudCBpcyBkaXNhYmxlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UsIHNldmVyYWwgcGFja2FnZXMgYXJlIHJlbW92ZWQgaW5jbHVkaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNlLXBhc3N3ZDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2hhZG93PC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgZnVuY3Rpb25zIHNlcGFyYXRlZCBieSBzZW1pY29sb25zOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkQgKz0gIjxyZXBsYWNlYWJsZT5mdW5jdGlvbjwvcmVwbGFjZWFibGU+OyAuLi4gIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIHBhc3MgdGhlIHJvb3QgZmlsZXN5c3RlbSBwYXRoIHRvIGEgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gYSBmdW5jdGlvbiwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7SU1BR0VfUk9PVEZTfTwvZmlsZW5hbWU+LCB3aGljaCBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSB0aGF0IGJlY29tZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTJz48ZmlsZW5hbWU+SU1BR0VfUk9PVEZTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJPT1RGU19QUkVQUk9DRVNTX0NPTU1BTkQnPjxnbG9zc3Rlcm0+Uk9PVEZTX1BSRVBST0NFU1NfQ09NTUFORDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUk9PVEZTX1BSRVBST0NFU1NfQ09NTUFORFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYmVmb3JlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIHRoZSByb290IGZpbGVzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBiZWZvcmUgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IGZ1bmN0aW9ucyBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9uczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBST09URlNfUFJFUFJPQ0VTU19DT01NQU5EICs9ICI8cmVwbGFjZWFibGU+ZnVuY3Rpb248L3JlcGxhY2VhYmxlPjsgLi4uICIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBwYXNzIHRoZSByb290IGZpbGVzeXN0ZW0gcGF0aCB0byBhIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIGEgZnVuY3Rpb24sIHlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0lNQUdFX1JPT1RGU308L2ZpbGVuYW1lPiwgd2hpY2ggcG9pbnRzIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBkaXJlY3RvcnkgdGhhdCBiZWNvbWVzIHRoZSByb290IGZpbGVzeXN0ZW0gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGUyc+PGZpbGVuYW1lPklNQUdFX1JPT1RGUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SUFJPVklERVMnPjxnbG9zc3Rlcm0+UlBST1ZJREVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBSUFJPVklERVNbZG9jXSA9ICJBIGxpc3Qgb2YgcGFja2FnZSBuYW1lIGFsaWFzZXMgdGhhdCBhIHBhY2thZ2UgYWxzbyBwcm92aWRlcy4gVGhlc2UgYWxpYXNlcyBhcmUgdXNlZnVsIGZvciBzYXRpc2Z5aW5nIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIG9mIG90aGVyIHBhY2thZ2VzIGJvdGggZHVyaW5nIHRoZSBidWlsZCBhbmQgb24gdGhlIHRhcmdldC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgcGFja2FnZSBuYW1lIGFsaWFzZXMgdGhhdCBhIHBhY2thZ2UgYWxzbyBwcm92aWRlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgYWxpYXNlcyBhcmUgdXNlZnVsIGZvciBzYXRpc2Z5aW5nIHJ1bnRpbWUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIG9mIG90aGVyIHBhY2thZ2VzIGJvdGggZHVyaW5nIHRoZSBidWlsZCBhbmQgb24gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAoYXMgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBBIHBhY2thZ2UncyBvd24gbmFtZSBpcyBpbXBsaWNpdGx5IGFscmVhZHkgaW4gaXRzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UlBST1ZJREVTPC9maWxlbmFtZT4gbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgIEFzIHdpdGggYWxsIHBhY2thZ2UtY29udHJvbGxpbmcgdmFyaWFibGVzLCB5b3UgbXVzdCBhbHdheXMKKyAgICAgICAgICAgICAgICAgICB1c2UgdGhlIHZhcmlhYmxlIGluIGNvbmp1bmN0aW9uIHdpdGggYSBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUlBST1ZJREVTXyR7UE59ID0gIndpZGdldC1hYmktMiIKKyAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUlJFQ09NTUVORFMnPjxnbG9zc3Rlcm0+UlJFQ09NTUVORFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJSRUNPTU1FTkRTW2RvY10gPSAiQSBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgZXh0ZW5kcyB0aGUgdXNhYmlsaXR5IG9mIGEgcGFja2FnZSBiZWluZyBidWlsdC4gVGhlIHBhY2thZ2UgYmVpbmcgYnVpbHQgZG9lcyBub3QgZGVwZW5kIG9uIHRoaXMgbGlzdCBvZiBwYWNrYWdlcyBpbiBvcmRlciB0byBzdWNjZXNzZnVsbHkgYnVpbGQsIGJ1dCBuZWVkcyB0aGVtIGZvciB0aGUgZXh0ZW5kZWQgdXNhYmlsaXR5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGV4dGVuZHMgdGhlIHVzYWJpbGl0eSBvZiBhIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBwYWNrYWdlIGJlaW5nIGJ1aWx0IGRvZXMgbm90IGRlcGVuZCBvbiB0aGlzIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW4gb3JkZXIgdG8gc3VjY2Vzc2Z1bGx5IGJ1aWxkLCBidXQgcmF0aGVyCisgICAgICAgICAgICAgICAgICAgIHVzZXMgdGhlbSBmb3IgZXh0ZW5kZWQgdXNhYmlsaXR5LgorICAgICAgICAgICAgICAgICAgICBUbyBzcGVjaWZ5IHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGZvciBwYWNrYWdlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz5SREVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhY2thZ2UgbWFuYWdlciB3aWxsIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT4gbGlzdCBvZiBwYWNrYWdlcyB3aGVuCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxpbmcgdGhlIGJ1aWx0IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gcHJldmVudCBsaXN0ZWQgcGFja2FnZXMgZnJvbSBiZWluZworICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQURfUkVDT01NRU5EQVRJT05TJz48ZmlsZW5hbWU+QkFEX1JFQ09NTUVOREFUSU9OUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU5PX1JFQ09NTUVOREFUSU9OUyc+PGZpbGVuYW1lPk5PX1JFQ09NTUVOREFUSU9OUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0VYQ0xVREUnPjxmaWxlbmFtZT5QQUNLQUdFX0VYQ0xVREU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT4gbmVlZCBub3QgYWN0dWFsbHkgYmUKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjZWQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGEgcmVjaXBlIG11c3QgZXhpc3QgdGhhdCBwcm92aWRlcyBlYWNoIHBhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgIGVpdGhlciB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVNfRFlOQU1JQyc+PGZpbGVuYW1lPlBBQ0tBR0VTX0RZTkFNSUM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIG9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlBST1ZJREVTJz48ZmlsZW5hbWU+UlBST1ZJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBvciBhbiBlcnJvciB3aWxsIG9jY3VyIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIElmIHN1Y2ggYSByZWNpcGUgZG9lcyBleGlzdCBhbmQgdGhlIHBhY2thZ2UgaXMgbm90IHByb2R1Y2VkLAorICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgY29udGludWVzIHdpdGhvdXQgZXJyb3IuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIDxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGFwcGxpZXMgdG8gcGFja2FnZXMgYmVpbmcgYnVpbHQsIHlvdSBzaG91bGQgYWx3YXlzIGF0dGFjaAorICAgICAgICAgICAgICAgICAgICBhbiBvdmVycmlkZSB0byB0aGUgdmFyaWFibGUgdG8gc3BlY2lmeSB0aGUgcGFydGljdWxhcgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIHdob3NlIHVzYWJpbGl0eSBpcyBiZWluZyBleHRlbmRlZC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGFyZSBidWlsZGluZyBhIGRldmVsb3BtZW50IHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBpcyBleHRlbmRlZCB0byBzdXBwb3J0IHdpcmVsZXNzIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IHdvdWxkIHVzZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJSRUNPTU1FTkRTXyR7UE59LWRldiArPSAiPHJlcGxhY2VhYmxlPndpcmVsZXNzX3BhY2thZ2VfbmFtZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBleGFtcGxlLCB0aGUgcGFja2FnZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+JHs8bGluayBsaW5rZW5kPSd2YXItUE4nPlBOPC9saW5rPn0tZGV2PC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgIG11c3QgYXBwZWFyIGFzIGl0IHdvdWxkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz5QQUNLQUdFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2UgYmVmb3JlIGFueSByZW5hbWluZyBvZiB0aGUgb3V0cHV0IHBhY2thZ2UgYnkKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyBzdWNoIGFzIDxmaWxlbmFtZT5kZWJpYW4uYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlLCB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzLCBzdXBwb3J0cworICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5aW5nIHZlcnNpb25lZCByZWNvbW1lbmRzLgorICAgICAgICAgICAgICAgICAgICBBbHRob3VnaCB0aGUgc3ludGF4IHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIHBhY2thZ2luZworICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIEJpdEJha2UgaGlkZXMgdGhlc2UgZGlmZmVyZW5jZXMgZnJvbSB5b3UuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGdlbmVyYWwgc3ludGF4IHRvIHNwZWNpZnkgdmVyc2lvbnMgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT4gdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUlJFQ09NTUVORFNfJHtQTn0gPSAiPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPiAoPHJlcGxhY2VhYmxlPm9wZXJhdG9yPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnZlcnNpb248L3JlcGxhY2VhYmxlPikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIDxmaWxlbmFtZT5vcGVyYXRvcjwvZmlsZW5hbWU+LCB5b3UgY2FuIHNwZWNpZnkgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA9CisgICAgICZsdDsKKyAgICAgJmd0OworICAgICAmbHQ7PQorICAgICAmZ3Q7PQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNldHMgdXAgYSByZWNvbW1lbmQgb24gdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAxLjIgb3IgZ3JlYXRlciBvZiB0aGUgcGFja2FnZSA8ZmlsZW5hbWU+Zm9vPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUlJFQ09NTUVORFNfJHtQTn0gPSAiZm9vICg+PSAxLjIpIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUlJFUExBQ0VTJz48Z2xvc3N0ZXJtPlJSRVBMQUNFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUlJFUExBQ0VTW2RvY10gPSAiQSBsaXN0IG9mIHBhY2thZ2VzIHJlcGxhY2VkIGJ5IGEgcGFja2FnZS4gVGhlIHBhY2thZ2UgbWFuYWdlciB1c2VzIHRoaXMgdmFyaWFibGUgdG8gZGV0ZXJtaW5lIHdoaWNoIHBhY2thZ2Ugc2hvdWxkIGJlIGluc3RhbGxlZCB0byByZXBsYWNlIG90aGVyIHBhY2thZ2UocykgZHVyaW5nIGFuIHVwZ3JhZGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHBhY2thZ2VzIHJlcGxhY2VkIGJ5IGEgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhY2thZ2UgbWFuYWdlciB1c2VzIHRoaXMgdmFyaWFibGUgdG8gZGV0ZXJtaW5lIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2Ugc2hvdWxkIGJlIGluc3RhbGxlZCB0byByZXBsYWNlIG90aGVyIHBhY2thZ2UocykKKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGFuIHVwZ3JhZGUuCisgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIGFsc28gaGF2ZSB0aGUgb3RoZXIgcGFja2FnZShzKSByZW1vdmVkIGF0IHRoZQorICAgICAgICAgICAgICAgICAgICBzYW1lIHRpbWUsIHlvdSBtdXN0IGFkZCB0aGUgbmFtZSBvZiB0aGUgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1SQ09ORkxJQ1RTJz5SQ09ORkxJQ1RTPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgIEFzIHdpdGggYWxsIHBhY2thZ2UtY29udHJvbGxpbmcgdmFyaWFibGVzLCB5b3UgbXVzdCB1c2UKKyAgICAgICAgICAgICAgICAgICB0aGlzIHZhcmlhYmxlIGluIGNvbmp1bmN0aW9uIHdpdGggYSBwYWNrYWdlIG5hbWUKKyAgICAgICAgICAgICAgICAgICBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUkVQTEFDRVNfJHtQTn0gPSAiPHJlcGxhY2VhYmxlPm90aGVyX3BhY2thZ2VfYmVpbmdfcmVwbGFjZWQ8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UsIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMsIHN1cHBvcnRzCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnlpbmcgdmVyc2lvbmVkIHJlcGxhY2VtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggdGhlIHN5bnRheCB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSBwYWNrYWdpbmcKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBCaXRCYWtlIGhpZGVzIHRoZXNlIGRpZmZlcmVuY2VzIGZyb20geW91LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBnZW5lcmFsIHN5bnRheCB0byBzcGVjaWZ5IHZlcnNpb25zIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5SUkVQTEFDRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUkVQTEFDRVNfJHtQTn0gPSAiPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPiAoPHJlcGxhY2VhYmxlPm9wZXJhdG9yPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnZlcnNpb248L3JlcGxhY2VhYmxlPikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIDxmaWxlbmFtZT5vcGVyYXRvcjwvZmlsZW5hbWU+LCB5b3UgY2FuIHNwZWNpZnkgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA9CisgICAgICZsdDsKKyAgICAgJmd0OworICAgICAmbHQ7PQorICAgICAmZ3Q7PQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNldHMgdXAgYSByZXBsYWNlbWVudCB1c2luZworICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIDEuMiBvciBncmVhdGVyIG9mIHRoZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb288L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUkVQTEFDRVNfJHtQTn0gPSAiZm9vICg+PSAxLjIpIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUlNVR0dFU1RTJz48Z2xvc3N0ZXJtPlJTVUdHRVNUUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUlNVR0dFU1RTW2RvY10gPSAiQSBsaXN0IG9mIGFkZGl0aW9uYWwgcGFja2FnZXMgdGhhdCB5b3UgY2FuIHN1Z2dlc3QgZm9yIGluc3RhbGxhdGlvbiBieSB0aGUgcGFja2FnZSBtYW5hZ2VyIGF0IHRoZSB0aW1lIGEgcGFja2FnZSBpcyBpbnN0YWxsZWQuIE5vdCBhbGwgcGFja2FnZSBtYW5hZ2VycyBzdXBwb3J0IHRoaXMgZnVuY3Rpb25hbGl0eS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgYWRkaXRpb25hbCBwYWNrYWdlcyB0aGF0IHlvdSBjYW4gc3VnZ2VzdCBmb3IKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIGJ5IHRoZSBwYWNrYWdlIG1hbmFnZXIgYXQgdGhlIHRpbWUgYSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGlzIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgTm90IGFsbCBwYWNrYWdlIG1hbmFnZXJzIHN1cHBvcnQgdGhpcyBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgIEFzIHdpdGggYWxsIHBhY2thZ2UtY29udHJvbGxpbmcgdmFyaWFibGVzLCB5b3UgbXVzdCBhbHdheXMKKyAgICAgICAgICAgICAgICAgICB1c2UgdGhpcyB2YXJpYWJsZSBpbiBjb25qdW5jdGlvbiB3aXRoIGEgcGFja2FnZSBuYW1lCisgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUlNVR0dFU1RTXyR7UE59ID0gIjxyZXBsYWNlYWJsZT51c2VmdWxfcGFja2FnZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5hbm90aGVyX3BhY2thZ2U8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXMnPjx0aXRsZT5TPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVMnPjxnbG9zc3Rlcm0+UzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1tkb2NdID0gIlRoZSBsb2NhdGlvbiBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IHdoZXJlIHVucGFja2VkIHBhY2thZ2Ugc291cmNlIGNvZGUgcmVzaWRlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2hlcmUgdW5wYWNrZWQgcmVjaXBlIHNvdXJjZSBjb2RlIHJlc2lkZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbG9jYXRpb24gaXMgd2l0aGluIHRoZSB3b3JrIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz5XT1JLRElSPC9saW5rPjwvZmlsZW5hbWU+KSwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgbm90IHN0YXRpYy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHVucGFja2VkIHNvdXJjZSBsb2NhdGlvbiBkZXBlbmRzIG9uIHRoZSByZWNpcGUgbmFtZQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+UE48L2xpbms+PC9maWxlbmFtZT4pIGFuZAorICAgICAgICAgICAgICAgICAgICByZWNpcGUgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+UFY8L2xpbms+PC9maWxlbmFtZT4pIGFzCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtXT1JLRElSfS8ke1BOfS0ke1BWfQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGFzc3VtZSBhCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB0b3AtbGV2ZWwgZm9sZGVyIG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gYW5kIGEKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBCdWlsZCBEaXJlY3RvcnkgYXQgPGZpbGVuYW1lPnBva3kvYnVpbGQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgd29yayBkaXJlY3RvcnkgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzCisgICAgICAgICAgICAgICAgICAgIHRvIGtlZXAgdGhlIHVucGFja2VkIHJlY2lwZSBmb3IgPGZpbGVuYW1lPmRiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwb2t5L2J1aWxkL3RtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9kYi81LjEuMTktcjMvZGItNS4xLjE5CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TQU5JVFlfUkVRVUlSRURfVVRJTElUSUVTJz48Z2xvc3N0ZXJtPlNBTklUWV9SRVFVSVJFRF9VVElMSVRJRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNBTklUWV9SRVFVSVJFRF9VVElMSVRJRVNbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIGNvbW1hbmQtbGluZSB1dGlsaXRpZXMgdGhhdCBzaG91bGQgYmUgY2hlY2tlZCBmb3IgZHVyaW5nIHRoZSBpbml0aWFsIHNhbml0eSBjaGVja2luZyBwcm9jZXNzIHdoZW4gcnVubmluZyBCaXRCYWtlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgY29tbWFuZC1saW5lIHV0aWxpdGllcyB0aGF0IHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICBjaGVja2VkIGZvciBkdXJpbmcgdGhlIGluaXRpYWwgc2FuaXR5IGNoZWNraW5nIHByb2Nlc3Mgd2hlbgorICAgICAgICAgICAgICAgICAgICBydW5uaW5nIEJpdEJha2UuCisgICAgICAgICAgICAgICAgICAgIElmIGFueSBvZiB0aGUgdXRpbGl0aWVzIGFyZSBub3QgaW5zdGFsbGVkIG9uIHRoZSBidWlsZCBob3N0LAorICAgICAgICAgICAgICAgICAgICB0aGVuIEJpdEJha2UgaW1tZWRpYXRlbHkgZXhpdHMgd2l0aCBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TQU5JVFlfVEVTVEVEX0RJU1RST1MnPjxnbG9zc3Rlcm0+U0FOSVRZX1RFU1RFRF9ESVNUUk9TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTQU5JVFlfVEVTVEVEX0RJU1RST1NbZG9jXSA9ICJBIGxpc3Qgb2YgdGhlIGhvc3QgZGlzdHJpYnV0aW9uIGlkZW50aWZpZXJzIHRoYXQgdGhlIGJ1aWxkIHN5c3RlbSBoYXMgYmVlbiB0ZXN0ZWQgYWdhaW5zdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgdGhlIGhvc3QgZGlzdHJpYnV0aW9uIGlkZW50aWZpZXJzIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBoYXMgYmVlbiB0ZXN0ZWQgYWdhaW5zdC4KKyAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllcnMgY29uc2lzdCBvZiB0aGUgaG9zdCBkaXN0cmlidXRvciBJRAorICAgICAgICAgICAgICAgICAgICBmb2xsb3dlZCBieSB0aGUgcmVsZWFzZSwKKyAgICAgICAgICAgICAgICAgICAgYXMgcmVwb3J0ZWQgYnkgdGhlIDxmaWxlbmFtZT5sc2JfcmVsZWFzZTwvZmlsZW5hbWU+IHRvb2wKKyAgICAgICAgICAgICAgICAgICAgb3IgYXMgcmVhZCBmcm9tIDxmaWxlbmFtZT4vZXRjL2xzYi1yZWxlYXNlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFNlcGFyYXRlIHRoZSBsaXN0IGl0ZW1zIHdpdGggZXhwbGljaXQgbmV3bGluZQorICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzICg8ZmlsZW5hbWU+XG48L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5TQU5JVFlfVEVTVEVEX0RJU1RST1M8L2ZpbGVuYW1lPiBpcyBub3QgZW1wdHkKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBjdXJyZW50IHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1OQVRJVkVMU0JTVFJJTkcnPjxmaWxlbmFtZT5OQVRJVkVMU0JTVFJJTkc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgYXBwZWFyIGluIHRoZSBsaXN0LCB0aGVuIHRoZSBidWlsZCBzeXN0ZW0gcmVwb3J0cworICAgICAgICAgICAgICAgICAgICBhIHdhcm5pbmcgdGhhdCBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgaG9zdCBkaXN0cmlidXRpb24gaGFzCisgICAgICAgICAgICAgICAgICAgIG5vdCBiZWVuIHRlc3RlZCBhcyBhIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX0FSQ0gnPjxnbG9zc3Rlcm0+U0RLX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES19BUkNIW2RvY10gPSAiVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgZm9yIHRoZSBTREsuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgZm9yIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgeW91IGRvIG5vdCBkaXJlY3RseSBzZXQgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgdXNlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtNQUNISU5FJz48ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfREVQTE9ZJz48Z2xvc3N0ZXJtPlNES19ERVBMT1k8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES19ERVBMT1lbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IHNldCB1cCBhbmQgdXNlZCBieSB0aGUgcG9wdWxhdGVfc2RrX2Jhc2UgdG8gd2hpY2ggdGhlIFNESyBpcyBkZXBsb3llZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IHNldCB1cCBhbmQgdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcG9wdWxhdGUtc2RrJz48ZmlsZW5hbWU+cG9wdWxhdGVfc2RrX2Jhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdG8gd2hpY2ggdGhlIFNESyBpcyBkZXBsb3llZC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfYmFzZTwvZmlsZW5hbWU+IGNsYXNzIGRlZmluZXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNES19ERVBMT1k8L2ZpbGVuYW1lPiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNES19ERVBMT1kgPSAiJHs8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz5UTVBESVI8L2xpbms+fS9kZXBsb3kvc2RrIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX0RJUic+PGdsb3NzdGVybT5TREtfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfRElSW2RvY10gPSAiVGhlIHBhcmVudCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGVuIGNyZWF0aW5nIFNESyBvdXRwdXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhcmVudCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICB3aGVuIGNyZWF0aW5nIFNESyBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wb3B1bGF0ZS1zZGstKic+PGZpbGVuYW1lPnBvcHVsYXRlX3Nka19iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGRlZmluZXMgdGhlIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU0RLX0RJUiA9ICIkezxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPn0vc2RrIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5TREtfRElSPC9maWxlbmFtZT4gZGlyZWN0b3J5IGlzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBvcmFyeSBkaXJlY3RvcnkgYXMgaXQgaXMgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBvdXRwdXQgZGlyZWN0b3J5IGlzCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX0RFUExPWSc+PGZpbGVuYW1lPlNES19ERVBMT1k8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfSE9TVF9NQU5JRkVTVCc+PGdsb3NzdGVybT5TREtfSE9TVF9NQU5JRkVTVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0RLX0hPU1RfTUFOSUZFU1RbZG9jXSA9ICJUaGUgbWFuaWZlc3QgZmlsZSBmb3IgdGhlIGhvc3QgcGFydCBvZiB0aGUgU0RLLiBUaGlzIGZpbGUgbGlzdHMgYWxsIHRoZSBpbnN0YWxsZWQgcGFja2FnZXMgdGhhdCBtYWtlIHVwIHRoZSBob3N0IHBhcnQgb2YgdGhlIFNESy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWFuaWZlc3QgZmlsZSBmb3IgdGhlIGhvc3QgcGFydCBvZiB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgbGlzdHMgYWxsIHRoZSBpbnN0YWxsZWQgcGFja2FnZXMgdGhhdCBtYWtlIHVwCisgICAgICAgICAgICAgICAgICAgIHRoZSBob3N0IHBhcnQgb2YgU0RLLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZSBjb250YWlucyBwYWNrYWdlIGluZm9ybWF0aW9uIG9uIGEgbGluZS1wZXItcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBiYXNpcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5wYWNrYWdlbmFtZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5wYWNrYWdlYXJjaDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT52ZXJzaW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcG9wdWxhdGUtc2RrLSonPjxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBkZWZpbmVzIHRoZSBtYW5pZmVzdCBmaWxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU0RLX0hPU1RfTUFOSUZFU1QgPSAiJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5ob3N0Lm1hbmlmZXN0IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBpcyBkZXJpdmVkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX0RFUExPWSc+PGZpbGVuYW1lPlNES19ERVBMT1k8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UT09MQ0hBSU5fT1VUUFVUTkFNRSc+PGZpbGVuYW1lPlRPT0xDSEFJTl9PVVRQVVROQU1FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfTkFNRSc+PGdsb3NzdGVybT5TREtfTkFNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0RLX05BTUVbZG9jXSA9ICJUaGUgYmFzZSBuYW1lIGZvciBTREsgb3V0cHV0IGZpbGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIG5hbWUgZm9yIFNESyBvdXRwdXQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIGlzIGRlcml2ZWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RSTyc+PGZpbGVuYW1lPkRJU1RSTzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRDTElCQyc+PGZpbGVuYW1lPlRDTElCQzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES19BUkNIJz48ZmlsZW5hbWU+U0RLX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9CQVNFTkFNRSc+PGZpbGVuYW1lPklNQUdFX0JBU0VOQU1FPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfUEtHQVJDSCc+PGZpbGVuYW1lPlRVTkVfUEtHQVJDSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU0RLX05BTUUgPSAiJHtESVNUUk99LSR7VENMSUJDfS0ke1NES19BUkNIfS0ke0lNQUdFX0JBU0VOQU1FfS0ke1RVTkVfUEtHQVJDSH0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfT1MnPjxnbG9zc3Rlcm0+U0RLX09TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfT1NbZG9jXSA9ICJUaGUgb3BlcmF0aW5nIHN5c3RlbSBmb3Igd2hpY2ggdGhlIFNESyB3aWxsIGJlIGJ1aWx0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSBmb3Igd2hpY2ggdGhlIFNESworICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxEX09TJz48ZmlsZW5hbWU+QlVJTERfT1M8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX09VVFBVVCc+PGdsb3NzdGVybT5TREtfT1VUUFVUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfT1VUUFVUW2RvY10gPSAiVGhlIGxvY2F0aW9uIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2hlbiBjcmVhdGluZyBTREsgb3V0cHV0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgY3JlYXRpbmcgU0RLIG91dHB1dC4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBvcHVsYXRlLXNkay0qJz48ZmlsZW5hbWU+cG9wdWxhdGVfc2RrX2Jhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZGVmaW5lcyB0aGUgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTREtfT1VUUFVUID0gIiR7PGxpbmsgbGlua2VuZD0ndmFyLVNES19ESVInPlNES19ESVI8L2xpbms+fS9pbWFnZSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+U0RLX09VVFBVVDwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpcyBhCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wb3JhcnkgZGlyZWN0b3J5IGFzIGl0IGlzIHBhcnQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT4gYnkgd2F5IG9mCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U0RLX0RJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIG91dHB1dCBkaXJlY3RvcnkgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfREVQTE9ZJz48ZmlsZW5hbWU+U0RLX0RFUExPWTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNES19QQUNLQUdFX0FSQ0hTJz48Z2xvc3N0ZXJtPlNES19QQUNLQUdFX0FSQ0hTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfUEFDS0FHRV9BUkNIU1tkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGggdGhlIFNESyBtYWNoaW5lLiBUaGlzIHZhcmlhYmxlIGlzIHNldCBhdXRvbWF0aWNhbGx5IGFuZCBzaG91bGQgbm90IG5vcm1hbGx5IGJlIGhhbmQtZWRpdGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIFNESyBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHNldCBhdXRvbWF0aWNhbGx5IGFuZCBzaG91bGQgbm90CisgICAgICAgICAgICAgICAgICAgIG5vcm1hbGx5IGJlIGhhbmQtZWRpdGVkLgorICAgICAgICAgICAgICAgICAgICBFbnRyaWVzIGFyZSBzZXBhcmF0ZWQgdXNpbmcgc3BhY2VzIGFuZCBsaXN0ZWQgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgb2YgcHJpb3JpdHkuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U0RLX1BBQ0tBR0VfQVJDSFM8L2ZpbGVuYW1lPiBpcyAiYWxsIGFueSBub2FyY2gKKyAgICAgICAgICAgICAgICAgICAgJHtTREtfQVJDSH0tJHtTREtQS0dTVUZGSVh9Ii4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfUE9TVFBST0NFU1NfQ09NTUFORCc+PGdsb3NzdGVybT5TREtfUE9TVFBST0NFU1NfQ09NTUFORDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0RLX1BPU1RQUk9DRVNTX0NPTU1BTkRbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIG9uY2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIFNESy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIG9uY2UgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IGZ1bmN0aW9ucyBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9uczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTREtfUE9TVFBST0NFU1NfQ09NTUFORCArPSAiPHJlcGxhY2VhYmxlPmZ1bmN0aW9uPC9yZXBsYWNlYWJsZT47IC4uLiAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdG8gcGFzcyBhbiBTREsgcGF0aCB0byBhIGNvbW1hbmQgd2l0aGluIGEKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24sIHlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1NES19ESVJ9PC9maWxlbmFtZT4sIHdoaWNoIHBvaW50cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgcGFyZW50IGRpcmVjdG9yeSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHdoZW4gY3JlYXRpbmcgU0RLIG91dHB1dC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX0RJUic+PGZpbGVuYW1lPlNES19ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX1BSRUZJWCc+PGdsb3NzdGVybT5TREtfUFJFRklYPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfUFJFRklYW2RvY10gPSAiVGhlIHRvb2xjaGFpbiBiaW5hcnkgcHJlZml4IHVzZWQgZm9yIG5hdGl2ZXNkayByZWNpcGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSB0b29sY2hhaW4gYmluYXJ5IHByZWZpeCB1c2VkIGZvciBuYXRpdmVzZGsgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNES19QUkVGSVg8L2ZpbGVuYW1lPiB2YWx1ZSB0byBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfUFJFRklYJz48ZmlsZW5hbWU+VEFSR0VUX1BSRUZJWDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiJHtTREtfU1lTfS0iLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNES19TWVMnPjxnbG9zc3Rlcm0+U0RLX1NZUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0RLX1NZU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgc3lzdGVtLCBpbmNsdWRpbmcgdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0sIGZvciB3aGljaCB0aGUgU0RLIHdpbGwgYmUgYnVpbHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBzeXN0ZW0sIGluY2x1ZGluZyB0aGUgYXJjaGl0ZWN0dXJlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSwgZm9yIHdoaWNoIHRoZSBTREsgd2lsbCBiZSBidWlsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBzZXRzIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYmFzZWQgb24KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES19BUkNIJz48ZmlsZW5hbWU+U0RLX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfVkVORE9SJz48ZmlsZW5hbWU+U0RLX1ZFTkRPUjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfT1MnPjxmaWxlbmFtZT5TREtfT1M8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCB0byBzZXQgdGhlIDxmaWxlbmFtZT5TREtfU1lTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgeW91cnNlbGYuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX1RBUkdFVF9NQU5JRkVTVCc+PGdsb3NzdGVybT5TREtfVEFSR0VUX01BTklGRVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfVEFSR0VUX01BTklGRVNUW2RvY10gPSAiVGhlIG1hbmlmZXN0IGZpbGUgZm9yIHRoZSB0YXJnZXQgcGFydCBvZiB0aGUgU0RLLiBUaGlzIGZpbGUgbGlzdHMgYWxsIHRoZSBpbnN0YWxsZWQgcGFja2FnZXMgdGhhdCBtYWtlIHVwIHRoZSB0YXJnZXQgcGFydCBvZiB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtYW5pZmVzdCBmaWxlIGZvciB0aGUgdGFyZ2V0IHBhcnQgb2YgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWxlIGxpc3RzIGFsbCB0aGUgaW5zdGFsbGVkIHBhY2thZ2VzIHRoYXQgbWFrZSB1cAorICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IHBhcnQgb2YgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGUgY29udGFpbnMgcGFja2FnZSBpbmZvcm1hdGlvbiBvbiBhIGxpbmUtcGVyLXBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgYmFzaXMgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+cGFja2FnZW5hbWU8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+cGFja2FnZWFyY2g8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBvcHVsYXRlLXNkay0qJz48ZmlsZW5hbWU+cG9wdWxhdGVfc2RrX2Jhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZGVmaW5lcyB0aGUgbWFuaWZlc3QgZmlsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNES19UQVJHRVRfTUFOSUZFU1QgPSAiJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS50YXJnZXQubWFuaWZlc3QiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIGlzIGRlcml2ZWQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfREVQTE9ZJz48ZmlsZW5hbWU+U0RLX0RFUExPWTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRPT0xDSEFJTl9PVVRQVVROQU1FJz48ZmlsZW5hbWU+VE9PTENIQUlOX09VVFBVVE5BTUU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNES19WRU5ET1InPjxnbG9zc3Rlcm0+U0RLX1ZFTkRPUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0RLX1ZFTkRPUltkb2NdID0gIlNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgU0RLIHZlbmRvci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIFNESyB2ZW5kb3IuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX1ZFUlNJT04nPjxnbG9zc3Rlcm0+U0RLX1ZFUlNJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES19WRVJTSU9OW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB2ZXJzaW9uIGZvciB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZSAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L21ldGEteW9jdG8vY29uZi9kaXN0cm8vcG9reS5jb25mPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMgdGhlIDxmaWxlbmFtZT5TREtfVkVSU0lPTjwvZmlsZW5hbWU+IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU0RLX1ZFUlNJT04gOj0gIiR7QCcke0RJU1RST19WRVJTSU9OfScucmVwbGFjZSgnc25hcHNob3QtJHtEQVRFfScsJ3NuYXBzaG90Jyl9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fVkVSU0lPTic+PGZpbGVuYW1lPkRJU1RST19WRVJTSU9OPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREFURSc+PGZpbGVuYW1lPkRBVEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNES0lNQUdFX0ZFQVRVUkVTJz48Z2xvc3N0ZXJtPlNES0lNQUdFX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtJTUFHRV9GRUFUVVJFU1tkb2NdID0gIkVxdWl2YWxlbnQgdG8gSU1BR0VfRkVBVFVSRVMuIEhvd2V2ZXIsIHRoaXMgdmFyaWFibGUgYXBwbGllcyB0byB0aGUgU0RLIGdlbmVyYXRlZCBmcm9tIGFuIGltYWdlIHVzaW5nIHRoZSBjb21tYW5kICdiaXRiYWtlIC1jIHBvcHVsYXRlX3NkayBpbWFnZW5hbWUnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEVxdWl2YWxlbnQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+SU1BR0VfRkVBVFVSRVM8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoaXMgdmFyaWFibGUgYXBwbGllcyB0byB0aGUgU0RLIGdlbmVyYXRlZCBmcm9tIGFuCisgICAgICAgICAgICAgICAgICAgIGltYWdlIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWMgcG9wdWxhdGVfc2RrIDxyZXBsYWNlYWJsZT5pbWFnZW5hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLTUFDSElORSc+PGdsb3NzdGVybT5TREtNQUNISU5FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtNQUNISU5FW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBhcmNoaXRlY3R1cmUgKGkuZS4gaTY4NiBvciB4ODZfNjQpIGZvciB3aGljaCB0byBidWlsZCBTREsgYW5kIEFEVCBpdGVtcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWFjaGluZSBmb3Igd2hpY2ggdGhlIEFwcGxpY2F0aW9uIERldmVsb3BtZW50IFRvb2xraXQKKyAgICAgICAgICAgICAgICAgICAgKEFEVCkgb3IgU0RLIGlzIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIFNESyBvciBBRFQgaXMgYnVpbHQgc3VjaCB0aGF0IGl0CisgICAgICAgICAgICAgICAgICAgIHJ1bnMgb24gdGhlIHRhcmdldCB5b3Ugc3BlY2lmeSB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+IHZhbHVlLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgcG9pbnRzIHRvIGEgY29ycmVzcG9uZGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHVuZGVyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL21hY2hpbmUtc2RrLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgImk2ODYiIGFuZCAieDg2XzY0IiBhcyBwb3NzaWJsZSB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgIGZvciB0aGlzIHZhcmlhYmxlLiBUaGUgdmFyaWFibGUgZGVmYXVsdHMgdG8gImk2ODYiCisgICAgICAgICAgICAgICAgICAgICBhbmQgaXMgc2V0IGluIHRoZSBsb2NhbC5jb25mIGZpbGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU0RLTUFDSElORSA/PSAiaTY4NiIKKyAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW5ub3Qgc2V0IHRoZSA8ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4geW91ciBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbywgdGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBub3QgdGFrZSBhZmZlY3QuCisgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLUEFUSCc+PGdsb3NzdGVybT5TREtQQVRIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtQQVRIW2RvY10gPSAiRGVmaW5lcyB0aGUgcGF0aCBvZmZlcmVkIHRvIHRoZSB1c2VyIGZvciBpbnN0YWxsYXRpb24gb2YgdGhlIFNESyB0aGF0IGlzIGdlbmVyYXRlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBwYXRoIG9mZmVyZWQgdG8gdGhlIHVzZXIgZm9yIGluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgU0RLIHRoYXQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCBhcHBlYXJzIGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIGZvciBpbnN0YWxsaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBTREsgd2hlbiB5b3UgcnVuIHRoZSBTREsncyBpbnN0YWxsYXRpb24gc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoZSBvZmZlcmVkIHBhdGggd2hlbiB5b3UgcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICBzY3JpcHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLVEFSR0VUU1lTUk9PVCc+PGdsb3NzdGVybT5TREtUQVJHRVRTWVNST09UPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtUQVJHRVRTWVNST09UW2RvY10gPSAiRnVsbCBwYXRoIHRvIHRoZSBzeXNyb290IHVzZWQgZm9yIGNyb3NzLWNvbXBpbGF0aW9uIHdpdGhpbiBhbiBTREsgYXMgaXQgd2lsbCBiZSB3aGVuIGluc3RhbGxlZCBpbnRvIHRoZSBkZWZhdWx0IFNES1BBVEguIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bGwgcGF0aCB0byB0aGUgc3lzcm9vdCB1c2VkIGZvciBjcm9zcy1jb21waWxhdGlvbgorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gYW4gU0RLIGFzIGl0IHdpbGwgYmUgd2hlbiBpbnN0YWxsZWQgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLUEFUSCc+PGZpbGVuYW1lPlNES1BBVEg8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0VDVElPTic+PGdsb3NzdGVybT5TRUNUSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTRUNUSU9OW2RvY10gPSAiVGhlIHNlY3Rpb24gaW4gd2hpY2ggcGFja2FnZXMgc2hvdWxkIGJlIGNhdGVnb3JpemVkLiBQYWNrYWdlIG1hbmFnZW1lbnQgdXRpbGl0aWVzIGNhbiBtYWtlIHVzZSBvZiB0aGlzIHZhcmlhYmxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWN0aW9uIGluIHdoaWNoIHBhY2thZ2VzIHNob3VsZCBiZSBjYXRlZ29yaXplZC4KKyAgICAgICAgICAgICAgICAgICAgUGFja2FnZSBtYW5hZ2VtZW50IHV0aWxpdGllcyBjYW4gbWFrZSB1c2Ugb2YgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TRUxFQ1RFRF9PUFRJTUlaQVRJT04nPjxnbG9zc3Rlcm0+U0VMRUNURURfT1BUSU1JWkFUSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTRUxFQ1RFRF9PUFRJTUlaQVRJT05bZG9jXSA9ICJUaGUgdmFyaWFibGUgdGFrZXMgdGhlIHZhbHVlIG9mIEZVTExfT1BUSU1JWkFUSU9OIHVubGVzcyBERUJVR19CVUlMRCA9ICcxJy4gSW4gdGhpcyBjYXNlLCB0aGUgdmFsdWUgb2YgREVCVUdfT1BUSU1JWkFUSU9OIGlzIHVzZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBvcHRpbWl6YXRpb24gZmxhZ3MgcGFzc2VkIHRvIHRoZSBDIGNvbXBpbGVyCisgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmbGFncyBhcmUgcGFzc2VkIHRocm91Z2ggdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfQ0ZMQUdTJz48ZmlsZW5hbWU+VEFSR0VUX0NGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5TRUxFQ1RFRF9PUFRJTUlaQVRJT048L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICB0YWtlcyB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1GVUxMX09QVElNSVpBVElPTic+RlVMTF9PUFRJTUlaQVRJT048L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdW5sZXNzIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVCVUdfQlVJTEQnPkRFQlVHX0JVSUxEPC9saW5rPjwvZmlsZW5hbWU+ID0gIjEiLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGF0IGlzIHRoZSBjYXNlLCB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERUJVR19PUFRJTUlaQVRJT04nPkRFQlVHX09QVElNSVpBVElPTjwvbGluaz48L2ZpbGVuYW1lPiBpcyB1c2VkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNFUklBTF9DT05TT0xFJz48Z2xvc3N0ZXJtPlNFUklBTF9DT05TT0xFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTRVJJQUxfQ09OU09MRVtkb2NdID0gIlRoZSBzcGVlZCBhbmQgZGV2aWNlIGZvciB0aGUgc2VyaWFsIHBvcnQgdXNlZCB0byBhdHRhY2ggdGhlIHNlcmlhbCBjb25zb2xlLiBUaGlzIHZhcmlhYmxlIGlzIGdpdmVuIHRvIHRoZSBrZXJuZWwgYXMgdGhlICdjb25zb2xlJyBwYXJhbWV0ZXIuIEFmdGVyIGJvb3Rpbmcgb2NjdXJzLCBnZXR0eSBpcyBzdGFydGVkIG9uIHRoYXQgcG9ydCBzbyByZW1vdGUgbG9naW4gaXMgcG9zc2libGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyBhIHNlcmlhbCBjb25zb2xlIChUVFkpIHRvIGVuYWJsZSB1c2luZyBnZXR0eS4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZSBhIHZhbHVlIHRoYXQgc3BlY2lmaWVzIHRoZSBiYXVkIHJhdGUgZm9sbG93ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgdGhlIFRUWSBkZXZpY2UgbmFtZSBzZXBhcmF0ZWQgYnkgYSBzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbm5vdCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgVFRZIGRldmljZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTRVJJQUxfQ09OU09MRSA9ICIxMTUyMDAgdHR5UzAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNFUklBTF9DT05TT0xFPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIGRlcHJlY2F0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2UgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNFUklBTF9DT05TT0xFUyc+PGZpbGVuYW1lPlNFUklBTF9DT05TT0xFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TRVJJQUxfQ09OU09MRVMnPjxnbG9zc3Rlcm0+U0VSSUFMX0NPTlNPTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTRVJJQUxfQ09OU09MRVNbZG9jXSA9ICJEZWZpbmVzIHRoZSBzZXJpYWwgY29uc29sZXMgKFRUWXMpIHRvIGVuYWJsZSB1c2luZyBnZXR0eS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBzZXJpYWwgY29uc29sZXMgKFRUWXMpIHRvIGVuYWJsZSB1c2luZyBnZXR0eS4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZSBhIHZhbHVlIHRoYXQgc3BlY2lmaWVzIHRoZSBiYXVkIHJhdGUgZm9sbG93ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgdGhlIFRUWSBkZXZpY2UgbmFtZSBzZXBhcmF0ZWQgYnkgYSBzZW1pY29sb24uCisgICAgICAgICAgICAgICAgICAgIFVzZSBzcGFjZXMgdG8gc2VwYXJhdGUgbXVsdGlwbGUgZGV2aWNlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTRVJJQUxfQ09OU09MRVMgPSAiMTE1MjAwO3R0eVMwIDExNTIwMDt0dHlTMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNFUklBTF9DT05TT0xFU19DSEVDSyc+PGdsb3NzdGVybT5TRVJJQUxfQ09OU09MRVNfQ0hFQ0s8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNFUklBTF9DT05TT0xFU19DSEVDS1tkb2NdID0gIlNpbWlsYXIgdG8gU0VSSUFMX0NPTlNPTEVTIGV4Y2VwdCB0aGUgZGV2aWNlIGlzIGNoZWNrZWQgZm9yIGV4aXN0ZW5jZSBiZWZvcmUgYXR0ZW1wdGluZyB0byBlbmFibGUgaXQuIFN1cHBvcnRlZCBvbmx5IGJ5IFN5c1Zpbml0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNpbWlsYXIgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNFUklBTF9DT05TT0xFUyc+PGZpbGVuYW1lPlNFUklBTF9DT05TT0xFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgdGhlIGRldmljZSBpcyBjaGVja2VkIGZvciBleGlzdGVuY2UgYmVmb3JlIGF0dGVtcHRpbmcKKyAgICAgICAgICAgICAgICAgICAgdG8gZW5hYmxlIGl0LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCB3aXRoIFN5c1Zpbml0CisgICAgICAgICAgICAgICAgICAgIChpLmUuIG5vdCB3aXRoIHN5c3RlbWQpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNJR0dFTl9FWENMVURFX1NBRkVfUkVDSVBFX0RFUFMnPjxnbG9zc3Rlcm0+U0lHR0VOX0VYQ0xVREVfU0FGRV9SRUNJUEVfREVQUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0lHR0VOX0VYQ0xVREVfU0FGRV9SRUNJUEVfREVQU1tkb2NdID0gIkEgbGlzdCBvZiByZWNpcGUgZGVwZW5kZW5jaWVzIHRoYXQgc2hvdWxkIG5vdCBiZSB1c2VkIHRvIGRldGVybWluZSBzaWduYXR1cmVzIG9mIHRhc2tzIGZyb20gb25lIHJlY2lwZSB3aGVuIHRoZXkgZGVwZW5kIG9uIHRhc2tzIGZyb20gYW5vdGhlciByZWNpcGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHJlY2lwZSBkZXBlbmRlbmNpZXMgdGhhdCBzaG91bGQgbm90IGJlIHVzZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lIHNpZ25hdHVyZXMgb2YgdGFza3MgZnJvbSBvbmUgcmVjaXBlIHdoZW4gdGhleQorICAgICAgICAgICAgICAgICAgICBkZXBlbmQgb24gdGFza3MgZnJvbSBhbm90aGVyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTICs9ICJpbnRvbmUtPm1wbGF5ZXIyIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgPGZpbGVuYW1lPmludG9uZTwvZmlsZW5hbWU+IGRlcGVuZHMgb24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1wbGF5ZXIyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFVzZSBvZiB0aGlzIHZhcmlhYmxlIGlzIG9uZSBtZWNoYW5pc20gdG8gcmVtb3ZlIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICB0aGF0IGFmZmVjdCB0YXNrIHNpZ25hdHVyZXMgYW5kIHRodXMgZm9yY2UgcmVidWlsZHMgd2hlbiBhCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+Q2F1dGlvbjwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYWRkIGFuIGluYXBwcm9wcmlhdGUgZGVwZW5kZW5jeSBmb3IgYSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uc2hpcCwgdGhlIHNvZnR3YXJlIG1pZ2h0IGJyZWFrIGR1cmluZworICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZSBpZiB0aGUgaW50ZXJmYWNlIG9mIHRoZSBzZWNvbmQgcmVjaXBlIHdhcworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCBhZnRlciB0aGUgZmlyc3QgcmVjaXBlIGhhZCBiZWVuIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkUnPjxnbG9zc3Rlcm0+U0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNJR0dFTl9FWENMVURFUkVDSVBFU19BQklTQUZFW2RvY10gPSAiQSBsaXN0IG9mIHJlY2lwZXMgdGhhdCBhcmUgY29tcGxldGVseSBzdGFibGUgYW5kIHdpbGwgbmV2ZXIgY2hhbmdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiByZWNpcGVzIHRoYXQgYXJlIGNvbXBsZXRlbHkgc3RhYmxlIGFuZCB3aWxsCisgICAgICAgICAgICAgICAgICAgIG5ldmVyIGNoYW5nZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIEFCSSBmb3IgdGhlIHJlY2lwZXMgaW4gdGhlIGxpc3QgYXJlIHByZXNlbnRlZCBieQorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgZnJvbSB0aGUgdGFza3MgcnVuIHRvIGJ1aWxkIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFVzZSBvZiB0aGlzIHZhcmlhYmxlIGlzIG9uZSB3YXkgdG8gcmVtb3ZlIGRlcGVuZGVuY2llcyBmcm9tCisgICAgICAgICAgICAgICAgICAgIG9uZSByZWNpcGUgb24gYW5vdGhlciB0aGF0IGFmZmVjdCB0YXNrIHNpZ25hdHVyZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIHRodXMgZm9yY2UgcmVidWlsZHMgd2hlbiB0aGUgcmVjaXBlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5DYXV0aW9uPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhZGQgYW4gaW5hcHByb3ByaWF0ZSB2YXJpYWJsZSB0byB0aGlzIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc29mdHdhcmUgbWlnaHQgYnJlYWsgYXQgcnVudGltZSBpZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBvZiB0aGUgcmVjaXBlIHdhcyBjaGFuZ2VkIGFmdGVyIHRoZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgaGFkIGJlZW4gYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TSVRFSU5GT19CSVRTJz48Z2xvc3N0ZXJtPlNJVEVJTkZPX0JJVFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNJVEVJTkZPX0JJVFNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBiaXRzIGZvciB0aGUgdGFyZ2V0IHN5c3RlbSBDUFUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYml0cyBmb3IgdGhlIHRhcmdldCBzeXN0ZW0gQ1BVLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgc2hvdWxkIGJlIGVpdGhlciAiMzIiIG9yICI2NCIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0lURUlORk9fRU5ESUFOTkVTUyc+PGdsb3NzdGVybT5TSVRFSU5GT19FTkRJQU5ORVNTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTSVRFSU5GT19FTkRJQU5ORVNTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBlbmRpYW4gYnl0ZSBvcmRlciBvZiB0aGUgdGFyZ2V0IHN5c3RlbS4gVGhlIHZhbHVlIHNob3VsZCBiZSBlaXRoZXIgJ2xlJyBmb3IgJ2xpdHRsZS1lbmRpYW4nIG9yICdiZScgZm9yICdiaWctZW5kaWFuJy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGVuZGlhbiBieXRlIG9yZGVyIG9mIHRoZSB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgc2hvdWxkIGJlIGVpdGhlciAibGUiIGZvciBsaXR0bGUtZW5kaWFuIG9yICJiZSIgZm9yIGJpZy1lbmRpYW4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU09DX0ZBTUlMWSc+PGdsb3NzdGVybT5TT0NfRkFNSUxZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTT0NfRkFNSUxZW2RvY10gPSAiR3JvdXBzIHRvZ2V0aGVyIG1hY2hpbmVzIGJhc2VkIHVwb24gdGhlIHNhbWUgZmFtaWx5IG9mIFNPQyAoU3lzdGVtIE9uIENoaXApLiBZb3UgdHlwaWNhbGx5IHNldCB0aGlzIHZhcmlhYmxlIGluIGEgY29tbW9uIC5pbmMgZmlsZSB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIG9mIGFsbCB0aGUgbWFjaGluZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgR3JvdXBzIHRvZ2V0aGVyIG1hY2hpbmVzIGJhc2VkIHVwb24gdGhlIHNhbWUgZmFtaWx5CisgICAgICAgICAgICAgICAgICAgIG9mIFNPQyAoU3lzdGVtIE9uIENoaXApLgorICAgICAgICAgICAgICAgICAgICBZb3UgdHlwaWNhbGx5IHNldCB0aGlzIHZhcmlhYmxlIGluIGEgY29tbW9uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4gZmlsZSB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIG9mIGFsbCB0aGUgbWFjaGluZXMuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgaW5jbHVkZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbWFjaGluZS9pbmNsdWRlL3NvYy1mYW1pbHkuaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGlzIHZhcmlhYmxlIHRvIGFwcGVhciBpbgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVPVkVSUklERVMnPjxmaWxlbmFtZT5NQUNISU5FT1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU09MSUJTJz48Z2xvc3N0ZXJtPlNPTElCUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU09MSUJTW2RvY10gPSAiRGVmaW5lcyB0aGUgc3VmZml4IGZvciBzaGFyZWQgbGlicmFyaWVzIHVzZWQgb24gdGhlIHRhcmdldCBwbGF0Zm9ybS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBzdWZmaXggZm9yIHNoYXJlZCBsaWJyYXJpZXMgdXNlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IHBsYXRmb3JtLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHN1ZmZpeCBpcyAiLnNvLioiIGZvciBhbGwgTGludXgtYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtcyBhbmQgaXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSB3aWxsIHNlZSB0aGlzIHZhcmlhYmxlIHJlZmVyZW5jZWQgaW4gdGhlIGRlZmF1bHQgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIG9mIDxmaWxlbmFtZT5GSUxFU18ke1BOfTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNPTElCU0RFVic+PGdsb3NzdGVybT5TT0xJQlNERVY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNPTElCU0RFVltkb2NdID0gIkRlZmluZXMgdGhlIHN1ZmZpeCBmb3IgdGhlIGRldmVsb3BtZW50IHN5bWJvbGljIGxpbmsgKHN5bWxpbmspIGZvciBzaGFyZWQgbGlicmFyaWVzIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgc3VmZml4IGZvciB0aGUgZGV2ZWxvcG1lbnQgc3ltYm9saWMgbGluaworICAgICAgICAgICAgICAgICAgICAoc3ltbGluaykgZm9yIHNoYXJlZCBsaWJyYXJpZXMgb24gdGhlIHRhcmdldCBwbGF0Zm9ybS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBzdWZmaXggaXMgIi5zbyIgZm9yIExpbnV4LWJhc2VkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbXMgYW5kIGlzIGRlZmluZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3Ugd2lsbCBzZWUgdGhpcyB2YXJpYWJsZSByZWZlcmVuY2VkIGluIHRoZSBkZWZhdWx0IHZhbHVlcworICAgICAgICAgICAgICAgICAgICBvZiA8ZmlsZW5hbWU+RklMRVNfJHtQTn0tZGV2PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU09VUkNFX01JUlJPUl9GRVRDSCc+PGdsb3NzdGVybT5TT1VSQ0VfTUlSUk9SX0ZFVENIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTT1VSQ0VfTUlSUk9SX0ZFVENIW2RvY10gPSAiU2V0IGFzIHBhcnQgb2YgYSBzb3VyY2UgbWlycm9yIGdlbmVyYXRpb24gc2NyaXB0IHRvIHNraXAgQ09NUEFUSUJMRV9NQUNISU5FIGFuZCBDT01QQVRJQkxFX0hPU1QgY2hlY2tzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IGFyZSBmZXRjaGluZyBmaWxlcyB0byBjcmVhdGUgYSBtaXJyb3Igb2Ygc291cmNlcworICAgICAgICAgICAgICAgICAgICAoaS5lLiBjcmVhdGluZyBhIHNvdXJjZSBtaXJyb3IpLCBzZXR0aW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TT1VSQ0VfTUlSUk9SX0ZFVENIPC9maWxlbmFtZT4gdG8gIjEiIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUgZW5zdXJlcworICAgICAgICAgICAgICAgICAgICB0aGUgc291cmNlIGZvciBhbGwgcmVjaXBlcyBhcmUgZmV0Y2hlZCByZWdhcmRsZXNzIG9mCisgICAgICAgICAgICAgICAgICAgIHdoZXRoZXIgb3Igbm90IGEgcmVjaXBlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgQSByZWNpcGUgaXMgY29uc2lkZXJlZCBpbmNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudGx5CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQgbWFjaGluZSB3aGVuIGVpdGhlciBvciBib3RoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ09NUEFUSUJMRV9NQUNISU5FJz48ZmlsZW5hbWU+Q09NUEFUSUJMRV9NQUNISU5FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ09NUEFUSUJMRV9IT1NUJz48ZmlsZW5hbWU+Q09NUEFUSUJMRV9IT1NUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBzcGVjaWZ5IGNvbXBhdGliaWxpdHkgd2l0aCBhIG1hY2hpbmUgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgdGhhbiB0aGF0IG9mIHRoZSBjdXJyZW50IG1hY2hpbmUgb3IgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPldhcm5pbmc8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgRG8gbm90IHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TT1VSQ0VfTUlSUk9SX0ZFVENIPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHVubGVzcyB5b3UgYXJlIGNyZWF0aW5nIGEgc291cmNlIG1pcnJvci4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCBkbyBub3Qgc2V0IHRoZSB2YXJpYWJsZSBkdXJpbmcgYQorICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU09VUkNFX01JUlJPUl9VUkwnPjxnbG9zc3Rlcm0+U09VUkNFX01JUlJPUl9VUkw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNPVVJDRV9NSVJST1JfVVJMW2RvY10gPSAiVVJMIHRvIHNvdXJjZSBtaXJyb3IgdGhhdCB3aWxsIGJlIHVzZWQgYmVmb3JlIGZldGNoaW5nIGZyb20gb3JpZ2luYWwgU1JDX1VSSS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHlvdXIgb3duCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmcm9tIHdoaWNoIHRvIGZpcnN0IGZldGNoIHNvdXJjZSBiZWZvcmUgYXR0ZW1wdGluZyB0byBmZXRjaAorICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSB1cHN0cmVhbSBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyB1c2UgdGhpcyB2YXJpYWJsZSwgeW91IG11c3QgZ2xvYmFsbHkgaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtb3duLW1pcnJvcnMnPjxmaWxlbmFtZT5vd24tbWlycm9yczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBhbmQgdGhlbiBwcm92aWRlIHRoZSBVUkwgdG8geW91ciBtaXJyb3JzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBnZW5lcmFsIHN5bnRheDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJvd24tbWlycm9ycyIKKyAgICAgU09VUkNFX01JUlJPUl9VUkwgPSAiaHR0cDovLzxyZXBsYWNlYWJsZT5leGFtcGxlPC9yZXBsYWNlYWJsZT4uY29tLzxyZXBsYWNlYWJsZT5teV9zb3VyY2VfbWlycm9yPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgb25seSBhIHNpbmdsZSBVUkwgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TT1VSQ0VfTUlSUk9SX1VSTDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1BEWExJQ0VOU0VNQVAnPjxnbG9zc3Rlcm0+U1BEWExJQ0VOU0VNQVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNQRFhMSUNFTlNFTUFQW2RvY10gPSAiTWFwcyBjb21tb25seSB1c2VkIGxpY2Vuc2UgbmFtZXMgdG8gdGhlaXIgU1BEWCBjb3VudGVycGFydHMgZm91bmQgaW4gbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIE1hcHMgY29tbW9ubHkgdXNlZCBsaWNlbnNlIG5hbWVzIHRvIHRoZWlyIFNQRFggY291bnRlcnBhcnRzCisgICAgICAgICAgICAgICAgICAgIGZvdW5kIGluIDxmaWxlbmFtZT5tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBkZWZhdWx0IDxmaWxlbmFtZT5TUERYTElDRU5TRU1BUDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbGljZW5zZXMuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNFTlNFJz48ZmlsZW5hbWU+TElDRU5TRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TUEVDSUFMX1BLR1NVRkZJWCc+PGdsb3NzdGVybT5TUEVDSUFMX1BLR1NVRkZJWDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1BFQ0lBTF9QS0dTVUZGSVhbZG9jXSA9ICJBIGxpc3Qgb2YgcHJlZml4ZXMgZm9yIFBOIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gY3JlYXRlIHZhcmlhbnRzIG9mIHJlY2lwZXMgb3IgcGFja2FnZXMuIFRoZSBsaXN0IHNwZWNpZmllcyB0aGUgcHJlZml4ZXMgdG8gc3RyaXAgb2ZmIGR1cmluZyBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgc3VjaCBhcyB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgQlBOIHZhcmlhYmxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBwcmVmaXhlcyBmb3IgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4gdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUgdmFyaWFudHMgb2YgcmVjaXBlcyBvciBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgc3BlY2lmaWVzIHRoZSBwcmVmaXhlcyB0byBzdHJpcCBvZmYgZHVyaW5nIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcworICAgICAgICAgICAgICAgICAgICBzdWNoIGFzIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSA8bGluayBsaW5rZW5kPSd2YXItQlBOJz48ZmlsZW5hbWU+QlBOPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNSQ19VUkknPjxnbG9zc3Rlcm0+U1JDX1VSSTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1JDX1VSSVtkb2NdID0gIlRoZSBsaXN0IG9mIHNvdXJjZSBmaWxlcyAtIGxvY2FsIG9yIHJlbW90ZS4gVGhpcyB2YXJpYWJsZSB0ZWxscyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGF0IGJpdHMgdG8gcHVsbCBpbiBmb3IgdGhlIGJ1aWxkIGFuZCBob3cgdG8gcHVsbCB0aGVtIGluLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG9mIHNvdXJjZSBmaWxlcyAtIGxvY2FsIG9yIHJlbW90ZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSB0ZWxscyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGljaCBiaXRzCisgICAgICAgICAgICAgICAgICAgIHRvIHB1bGwgaW4gZm9yIHRoZSBidWlsZCBhbmQgaG93IHRvIHB1bGwgdGhlbSBpbi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSByZWNpcGUgb3IgYXBwZW5kIGZpbGUgb25seSBuZWVkcyB0bworICAgICAgICAgICAgICAgICAgICBmZXRjaCBhIHRhcmJhbGwgZnJvbSB0aGUgSW50ZXJuZXQsIHRoZSByZWNpcGUgb3IKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kIGZpbGUgdXNlcyBhIHNpbmdsZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LgorICAgICAgICAgICAgICAgICAgICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIHJlY2lwZSBvciBhcHBlbmQgZmlsZSBuZWVkcyB0bworICAgICAgICAgICAgICAgICAgICBmZXRjaCBhIHRhcmJhbGwsIGFwcGx5IHR3byBwYXRjaGVzLCBhbmQgaW5jbHVkZSBhIGN1c3RvbQorICAgICAgICAgICAgICAgICAgICBmaWxlLCB0aGUgcmVjaXBlIG9yIGFwcGVuZCBmaWxlIHdvdWxkIGluY2x1ZGUgZm91cgorICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMgb2YgdGhlIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3QgZXhwbGFpbnMgdGhlIGF2YWlsYWJsZSBVUkkgcHJvdG9jb2xzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZldGNoZXMgZmlsZXMsIHdoaWNoIGFyZSB1c3VhbGx5IGZpbGVzIHNoaXBwZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGxvY2FsIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggaXMgcmVsYXRpdmUgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRodXMsIHRoZSBidWlsZCBzeXN0ZW0gc2VhcmNoZXMsIGluIG9yZGVyLCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBkaXJlY3Rvcmllcywgd2hpY2ggYXJlIGFzc3VtZWQgdG8gYmUgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGZpbGUgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPikgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZSAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2lkZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+JHtCUE59PC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSByZWNpcGUgbmFtZSB3aXRob3V0IGFueSBzcGVjaWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXggb3IgdmVyc2lvbiBudW1iZXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPiR7QlB9PC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8bGluayBsaW5rZW5kPSd2YXItQlBOJz5CUE48L2xpbms+fS0ke1BWfTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2UgcmVjaXBlIG5hbWUgYW5kIHZlcnNpb24gYnV0IHdpdGhvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueSBzcGVjaWFsIHBhY2thZ2UgbmFtZSBzdWZmaXguCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5maWxlcyAtPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVzIHdpdGhpbiBhIGRpcmVjdG9yeSwgd2hpY2ggaXMgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5maWxlczwvZmlsZW5hbWU+IGFuZCBpcyBhbHNvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbG9uZ3NpZGUgdGhlIHJlY2lwZSBvciBhcHBlbmQgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0aGUgYnVpbGQgc3lzdGVtIHRvIHBpY2sgdXAgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHRocm91Z2ggYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCBmcm9tIHlvdXIgYXBwZW5kIGZpbGUsIHlvdSBuZWVkIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cmUgdG8gZXh0ZW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYnkgYWxzbyB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmcm9tIHdpdGhpbiB5b3VyIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmJ6cjovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhemFhciByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQ6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHaXQgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+b3NjOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIE9TQyAoT3BlblNVU0UgQnVpbGQgc2VydmljZSkgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cmVwbzovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHJlcG8gKEdpdCkgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmNjcmM6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGZXRjaGVzIGZpbGVzIGZyb20gYSBDbGVhckNhc2UgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmh0dHA6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEludGVybmV0IHVzaW5nIDxmaWxlbmFtZT5odHRwPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5odHRwczovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgSW50ZXJuZXQgdXNpbmcgPGZpbGVuYW1lPmh0dHBzPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5mdHA6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIEludGVybmV0IHVzaW5nIDxmaWxlbmFtZT5mdHA8L2ZpbGVuYW1lPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmN2czovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIENWUyByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5oZzovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIE1lcmN1cmlhbCAoPGZpbGVuYW1lPmhnPC9maWxlbmFtZT4pIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnA0Oi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgUGVyZm9yY2UgKDxmaWxlbmFtZT5wNDwvZmlsZW5hbWU+KSByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zc2g6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzZWN1cmUgc2hlbGwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zdm46Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBTdWJ2ZXJzaW9uICg8ZmlsZW5hbWU+c3ZuPC9maWxlbmFtZT4pIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkIGFuZCByZWNpcGUtc3BlY2lmaWMgb3B0aW9ucyBmb3IgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBleGlzdC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgc3RhbmRhcmQgb3B0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmFwcGx5PC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFdoZXRoZXIgdG8gYXBwbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGF0Y2ggb3Igbm90LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGFjdGlvbiBpcyB0byBhcHBseSB0aGUgcGF0Y2guPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zdHJpcGxldmVsPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBsZXZlbCB0byB1c2Ugd2hlbiBhcHBseWluZyB0aGUgcGF0Y2guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgbGV2ZWwgaXMgMS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBhdGNoZGlyPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIHBhdGNoIHNob3VsZCBiZSBhcHBsaWVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIG9wdGlvbnMgc3BlY2lmaWMgdG8gcmVjaXBlcyBidWlsZGluZyBjb2RlIGZyb20gYSByZXZpc2lvbiBjb250cm9sIHN5c3RlbToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm1pbmRhdGU8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBseSB0aGUgcGF0Y2ggb25seSBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNEQVRFJz48ZmlsZW5hbWU+U1JDREFURTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiA8ZmlsZW5hbWU+bWluZGF0ZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bWF4ZGF0ZTwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGx5IHRoZSBwYXRjaCBvbmx5IGlmIDxmaWxlbmFtZT5TUkNEQVRFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgbGF0ZXIgdGhhbiA8ZmlsZW5hbWU+bWluZGF0ZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bWlucmV2PC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbHkgdGhlIHBhdGNoIG9ubHkgaWYgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDxmaWxlbmFtZT5taW5yZXY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm1heHJldjwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGx5IHRoZSBwYXRjaCBvbmx5IGlmIDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBsYXRlciB0aGFuIDxmaWxlbmFtZT5tYXhyZXY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnJldjwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGx5IHRoZSBwYXRjaCBvbmx5IGlmIDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGVxdWFsIHRvIDxmaWxlbmFtZT5yZXY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm5vdHJldjwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGx5IHRoZSBwYXRjaCBvbmx5IGlmIDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBlcXVhbCB0byA8ZmlsZW5hbWU+cmV2PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGFkZGl0aW9uYWwgb3B0aW9ucyB3b3J0aCBtZW50aW9uaW5nOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dW5wYWNrPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IENvbnRyb2xzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hldGhlciBvciBub3QgdG8gdW5wYWNrIHRoZSBmaWxlIGlmIGl0IGlzIGFuIGFyY2hpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgYWN0aW9uIGlzIHRvIHVucGFjayB0aGUgZmlsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnN1YmRpcjwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBQbGFjZXMgdGhlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgZXh0cmFjdHMgaXRzIGNvbnRlbnRzKSBpbnRvIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgPGxpbmsgbGlua2VuZD0ndmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBmb3IgdW51c3VhbCB0YXJiYWxscyBvciBvdGhlciBhcmNoaXZlcyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gbm90IGhhdmUgdGhlaXIgZmlsZXMgYWxyZWFkeSBpbiBhIHN1YmRpcmVjdG9yeSB3aXRoaW4gdGhlIGFyY2hpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5uYW1lPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFNwZWNpZmllcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSB0byBiZSB1c2VkIGZvciBhc3NvY2lhdGlvbiB3aXRoIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gY2hlY2tzdW1zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIGZpbGUgc3BlY2lmaWVkIGluIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb3dubG9hZGZpbGVuYW1lPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaWxlbmFtZSB1c2VkIHdoZW4gc3RvcmluZyB0aGUgZG93bmxvYWRlZCBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0gnPjxnbG9zc3Rlcm0+U1JDX1VSSV9PVkVSUklERVNfUEFDS0FHRV9BUkNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0hbZG9jXSA9ICJCeSBkZWZhdWx0LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgd2hldGhlciBTUkNfVVJJIGNvbnRhaW5zIGZpbGVzIHRoYXQgYXJlIG1hY2hpbmUtc3BlY2lmaWMuIElmIHNvLCB0aGUgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyBQQUNLQUdFX0FSQ0guIFNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byAnMCcgZGlzYWJsZXMgdGhpcyBiZWhhdmlvci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgd2hldGhlcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPlNSQ19VUkk8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgZmlsZXMgdGhhdCBhcmUgbWFjaGluZS1zcGVjaWZpYy4KKyAgICAgICAgICAgICAgICAgICAgSWYgc28sIHRoZSBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBjaGFuZ2VzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9BUkNIJz5QQUNLQUdFX0FSQ0g8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byAiMCIgZGlzYWJsZXMgdGhpcyBiZWhhdmlvci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TUkNEQVRFJz48Z2xvc3N0ZXJtPlNSQ0RBVEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNSQ0RBVEVbZG9jXSA9ICJUaGUgZGF0ZSBvZiB0aGUgc291cmNlIGNvZGUgdXNlZCB0byBidWlsZCB0aGUgcGFja2FnZS4gVGhpcyB2YXJpYWJsZSBhcHBsaWVzIG9ubHkgaWYgdGhlIHNvdXJjZSB3YXMgZmV0Y2hlZCBmcm9tIGEgU291cmNlIENvZGUgTWFuYWdlciAoU0NNKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGF0ZSBvZiB0aGUgc291cmNlIGNvZGUgdXNlZCB0byBidWlsZCB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBhcHBsaWVzIG9ubHkgaWYgdGhlIHNvdXJjZSB3YXMgZmV0Y2hlZCBmcm9tIGEgU291cmNlIENvZGUgTWFuYWdlciAoU0NNKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TUkNQVic+PGdsb3NzdGVybT5TUkNQVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1JDUFZbZG9jXSA9ICJSZXR1cm5zIHRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgY3VycmVudCBwYWNrYWdlLiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIGhlbHAgZGVmaW5lIHRoZSB2YWx1ZSBvZiBQVi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgY3VycmVudCBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIGhlbHAgZGVmaW5lIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5TUkNQVjwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIGRlZmluZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNQViA9ICIke0BiYi5mZXRjaDIuZ2V0X3NyY3JldihkKX0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUmVjaXBlcyB0aGF0IG5lZWQgdG8gZGVmaW5lIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+IGRvIHNvCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGhlbHAgb2YgdGhlIDxmaWxlbmFtZT5TUkNQVjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5vZm9ubzwvZmlsZW5hbWU+IHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPm9mb25vX2dpdC5iYjwvZmlsZW5hbWU+KSBsb2NhdGVkIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5PC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBEaXJlY3RvcnkgZGVmaW5lcyA8ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPiBhcworICAgICAgICAgICAgICAgICAgICBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBWID0gIjAuMTItZ2l0JHtTUkNQVn0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TUkNSRVYnPjxnbG9zc3Rlcm0+U1JDUkVWPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTUkNSRVZbZG9jXSA9ICJUaGUgcmV2aXNpb24gb2YgdGhlIHNvdXJjZSBjb2RlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuIFRoaXMgdmFyaWFibGUgYXBwbGllcyB0byBTdWJ2ZXJzaW9uLCBHaXQsIE1lcmN1cmlhbCBhbmQgQmF6YWFyIG9ubHkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJldmlzaW9uIG9mIHRoZSBzb3VyY2UgY29kZSB1c2VkIHRvIGJ1aWxkIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGFwcGxpZXMgdG8gU3VidmVyc2lvbiwgR2l0LCBNZXJjdXJpYWwgYW5kCisgICAgICAgICAgICAgICAgICAgIEJhemFhciBvbmx5LgorICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgaWYgeW91IHdhbnQgdG8gYnVpbGQgYSBmaXhlZCByZXZpc2lvbiBhbmQgeW91CisgICAgICAgICAgICAgICAgICAgIHdhbnQgdG8gYXZvaWQgcGVyZm9ybWluZyBhIHF1ZXJ5IG9uIHRoZSByZW1vdGUgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICBldmVyeSB0aW1lIEJpdEJha2UgcGFyc2VzIHlvdXIgcmVjaXBlLCB5b3Ugc2hvdWxkIHNwZWNpZnkKKyAgICAgICAgICAgICAgICAgICAgYSA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4gdGhhdCBpcyBhCisgICAgICAgICAgICAgICAgICAgIGZ1bGwgcmV2aXNpb24gaWRlbnRpZmllciBhbmQgbm90IGp1c3QgYSB0YWcuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBsaW1pdGF0aW9ucyB3aGVuIGluaGVyaXRpbmcgdGhlIGxhdGVzdAorICAgICAgICAgICAgICAgICAgICByZXZpc2lvbiBvZiBzb2Z0d2FyZSB1c2luZyA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUFVVE9SRVYnPjxmaWxlbmFtZT5BVVRPUkVWPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGRlc2NyaXB0aW9uLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNTVEFURV9ESVInPjxnbG9zc3Rlcm0+U1NUQVRFX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1NUQVRFX0RJUltkb2NdID0gIlRoZSBkaXJlY3RvcnkgZm9yIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBmb3IgdGhlIHNoYXJlZCBzdGF0ZSBjYWNoZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TU1RBVEVfTUlSUk9SX0FMTE9XX05FVFdPUksnPjxnbG9zc3Rlcm0+U1NUQVRFX01JUlJPUl9BTExPV19ORVRXT1JLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTU1RBVEVfTUlSUk9SX0FMTE9XX05FVFdPUktbZG9jXSA9ICJJZiBzZXQgdG8gIjEiLCBhbGxvd3MgZmV0Y2hlcyBmcm9tIG1pcnJvcnMgdGhhdCBhcmUgc3BlY2lmaWVkIGluIFNTVEFURV9NSVJST1JTIHRvIHdvcmsgZXZlbiB3aGVuIGZldGNoaW5nIGZyb20gdGhlIG5ldHdvcmsgaGFzIGJlZW4gZGlzYWJsZWQgYnkgc2V0dGluZyBCQl9OT19ORVRXT1JLIHRvICIxIi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjEiLCBhbGxvd3MgZmV0Y2hlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgIG1pcnJvcnMgdGhhdCBhcmUgc3BlY2lmaWVkIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfTUlSUk9SUyc+PGZpbGVuYW1lPlNTVEFURV9NSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRvIHdvcmsgZXZlbiB3aGVuIGZldGNoaW5nIGZyb20gdGhlIG5ldHdvcmsgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQgYnkgc2V0dGluZyA8ZmlsZW5hbWU+QkJfTk9fTkVUV09SSzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRvICIxIi4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TU1RBVEVfTUlSUk9SX0FMTE9XX05FVFdPUks8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpcyB1c2VmdWwgaWYgeW91IGhhdmUgc2V0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TU1RBVEVfTUlSUk9SUzwvZmlsZW5hbWU+IHRvIHBvaW50IHRvIGFuCisgICAgICAgICAgICAgICAgICAgIGludGVybmFsIHNlcnZlciBmb3IgeW91ciBzaGFyZWQgc3RhdGUgY2FjaGUsIGJ1dAorICAgICAgICAgICAgICAgICAgICB5b3Ugd2FudCB0byBkaXNhYmxlIGFueSBvdGhlciBmZXRjaGluZyBmcm9tIHRoZSBuZXR3b3JrLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNTVEFURV9NSVJST1JTJz48Z2xvc3N0ZXJtPlNTVEFURV9NSVJST1JTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTU1RBVEVfTUlSUk9SU1tkb2NdID0gIkNvbmZpZ3VyZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gc2VhcmNoIG90aGVyIG1pcnJvciBsb2NhdGlvbnMgZm9yIHByZWJ1aWx0IGNhY2hlIGRhdGEgb2JqZWN0cyBiZWZvcmUgYnVpbGRpbmcgb3V0IHRoZSBkYXRhLiBZb3UgY2FuIHNwZWNpZnkgYSBmaWxlc3lzdGVtIGRpcmVjdG9yeSBvciBhIHJlbW90ZSBVUkwgc3VjaCBhcyBIVFRQIG9yIEZUUC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDb25maWd1cmVzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHNlYXJjaCBvdGhlcgorICAgICAgICAgICAgICAgICAgICBtaXJyb3IgbG9jYXRpb25zIGZvciBwcmVidWlsdCBjYWNoZSBkYXRhIG9iamVjdHMgYmVmb3JlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5nIG91dCB0aGUgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSB3b3JrcyBsaWtlIGZldGNoZXIKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1JUlJPUlMnPjxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8bGluayBsaW5rZW5kPSd2YXItUFJFTUlSUk9SUyc+PGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIHBvaW50cyB0byB0aGUgY2FjaGUgbG9jYXRpb25zIHRvIGNoZWNrIGZvciB0aGUgc2hhcmVkCisgICAgICAgICAgICAgICAgICAgIG9iamVjdHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBhIGZpbGVzeXN0ZW0gZGlyZWN0b3J5IG9yIGEgcmVtb3RlIFVSTCBzdWNoCisgICAgICAgICAgICAgICAgICAgIGFzIEhUVFAgb3IgRlRQLgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb25zIHlvdSBzcGVjaWZ5IG5lZWQgdG8gY29udGFpbiB0aGUgc2hhcmVkIHN0YXRlCisgICAgICAgICAgICAgICAgICAgIGNhY2hlIChzc3RhdGUtY2FjaGUpIHJlc3VsdHMgZnJvbSBwcmV2aW91cyBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzc3RhdGUtY2FjaGUgeW91IHBvaW50IHRvIGNhbiBhbHNvIGJlIGZyb20gYnVpbGRzIG9uCisgICAgICAgICAgICAgICAgICAgIG90aGVyIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiBhIG1pcnJvciB1c2VzIHRoZSBzYW1lIHN0cnVjdHVyZSBhcworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1NUQVRFX0RJUic+PGZpbGVuYW1lPlNTVEFURV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGFkZAorICAgICAgICAgICAgICAgICAgICAiUEFUSCIgYXQgdGhlIGVuZCBhcyBzaG93biBpbiB0aGUgZXhhbXBsZXMgYmVsb3cuCisgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gc3Vic3RpdHV0ZXMgdGhlIGNvcnJlY3QgcGF0aCB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1NUQVRFX01JUlJPUlMgPz0gIlwKKyAgICAgZmlsZTovLy4qIGh0dHA6Ly88cmVwbGFjZWFibGU+c29tZXNlcnZlcjwvcmVwbGFjZWFibGU+LnRsZC9zaGFyZS9zc3RhdGUvUEFUSCBcbiBcCisgICAgIGZpbGU6Ly8uKiBmaWxlOi8vLzxyZXBsYWNlYWJsZT5zb21lLWxvY2FsLWRpcjwvcmVwbGFjZWFibGU+L3NzdGF0ZS9QQVRIIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19CQVNFX0xJQkRJUl9OQVRJVkUnPjxnbG9zc3Rlcm0+U1RBR0lOR19CQVNFX0xJQkRJUl9OQVRJVkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfQkFTRV9MSUJESVJfTkFUSVZFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSAvbGliIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZCBob3N0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi9saWI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0JBU0VMSUJESVInPjxnbG9zc3Rlcm0+U1RBR0lOR19CQVNFTElCRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0JBU0VMSUJESVJbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIC9saWIgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0IChTVEFHSU5HX0RJUl9IT1NUKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIDxmaWxlbmFtZT4vbGliPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19ESVJfSE9TVCc+PGZpbGVuYW1lPlNUQUdJTkdfRElSX0hPU1Q8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfQklORElSJz48Z2xvc3N0ZXJtPlNUQUdJTkdfQklORElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0JJTkRJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgL3Vzci9iaW4gc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0IChTVEFHSU5HX0RJUl9IT1NUKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2JpbjwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSB0YXJnZXQgZm9yIHdoaWNoIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBpcyBiZWluZyBidWlsdAorICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfRElSX0hPU1QnPjxmaWxlbmFtZT5TVEFHSU5HX0RJUl9IT1NUPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0JJTkRJUl9DUk9TUyc+PGdsb3NzdGVybT5TVEFHSU5HX0JJTkRJUl9DUk9TUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19CSU5ESVJfQ1JPU1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGJpbmFyeSBjb25maWd1cmF0aW9uIHNjcmlwdHMuIFRoZXNlIHNjcmlwdHMgcHJvdmlkZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBvdGhlciBzb2Z0d2FyZSB0aGF0IHdhbnRzIHRvIG1ha2UgdXNlIG9mIGxpYnJhcmllcyBvciBpbmNsdWRlIGZpbGVzIHByb3ZpZGVkIGJ5IHRoZSBzb2Z0d2FyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNjcmlwdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGJpbmFyeQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHNjcmlwdHMuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIHNjcmlwdHMgcHJvdmlkZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvcgorICAgICAgICAgICAgICAgICAgICBvdGhlciBzb2Z0d2FyZSB0aGF0IHdhbnRzIHRvIG1ha2UgdXNlIG9mIGxpYnJhcmllcyBvcgorICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIGZpbGVzIHByb3ZpZGVkIGJ5IHRoZSBzb2Z0d2FyZSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHN0eWxlIG9mIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gbGFyZ2VseQorICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZWQgYnkgPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaWYgPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgaXMgc3VwcG9ydGVkIGJ5IHRoZSBsaWJyYXJ5IHRvIHdoaWNoIHlvdSBhcmUgbGlua2luZywKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IGlzIHJlY29tbWVuZGVkIHlvdSB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4gaW5zdGVhZCBvZiBhCisgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBjb25maWd1cmF0aW9uIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfQklORElSX05BVElWRSc+PGdsb3NzdGVybT5TVEFHSU5HX0JJTkRJUl9OQVRJVkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfQklORElSX05BVElWRVtkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgL3Vzci9iaW4gc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9iaW48L2ZpbGVuYW1lPiBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0RBVEFESVInPjxnbG9zc3Rlcm0+U1RBR0lOR19EQVRBRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0RBVEFESVJbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIC91c3Ivc2hhcmUgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0IChTVEFHSU5HX0RJUl9IT1NUKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi91c3Ivc2hhcmU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgZm9yIHdoaWNoIHRoZSBjdXJyZW50IHJlY2lwZSBpcyBiZWluZyBidWlsdAorICAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFHSU5HX0RJUl9IT1NUJz48ZmlsZW5hbWU+U1RBR0lOR19ESVJfSE9TVDwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19EQVRBRElSX05BVElWRSc+PGdsb3NzdGVybT5TVEFHSU5HX0RBVEFESVJfTkFUSVZFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0RBVEFESVJfTkFUSVZFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSAvdXNyL3NoYXJlIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZCBob3N0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi91c3Ivc2hhcmU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0RJUic+PGdsb3NzdGVybT5TVEFHSU5HX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19ESVJbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIHRvcC1sZXZlbCBzeXNyb290cyBkaXJlY3RvcnkgKGkuZS4gJHtUTVBESVJ9L3N5c3Jvb3RzKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIHRvcC1sZXZlbCBzeXNyb290cyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0vc3lzcm9vdHM8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgUmVjaXBlcyBzaG91bGQgbmV2ZXIgd3JpdGUgZmlsZXMgZGlyZWN0bHkgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgZGlyZWN0b3J5IGJlY2F1c2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZXMgdGhlIGRpcmVjdG9yeSBhdXRvbWF0aWNhbGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgZmlsZXMgc2hvdWxkIGJlIGluc3RhbGxlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRCc+PGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW4geW91ciByZWNpcGUncworICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrIGFuZCB0aGVuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWdlIGEgc3Vic2V0IG9mIHRob3NlIGZpbGVzIGludG8gdGhlIHN5c3Jvb3QuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0RJUl9IT1NUJz48Z2xvc3N0ZXJtPlNUQUdJTkdfRElSX0hPU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfRElSX0hPU1RbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIHByaW1hcnkgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHdoaWNoIHRoZSB0YXJnZXQgaXMgYmVpbmcgYnVpbHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBwcmltYXJ5IHN5c3Jvb3QgZGlyZWN0b3J5IGZvcgorICAgICAgICAgICAgICAgICAgICB3aGljaCB0aGUgdGFyZ2V0IGlzIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgcmVjaXBlIGFuZCB0aGUgYnVpbGQgdGFyZ2V0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlJ3MgdmFsdWUgaXMgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgcmVjaXBlcyBidWlsZGluZyBmb3IgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZSwgdGhlIHZhbHVlIGlzICIke1NUQUdJTkdfRElSfS8ke01BQ0hJTkV9Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMgYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgYnVpbGQgaG9zdCwgdGhlIHZhbHVlIGlzIGVtcHR5IGdpdmVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzdW1wdGlvbiB0aGF0IHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIGhvc3QncyBvd24gZGlyZWN0b3JpZXMgc2hvdWxkIGJlIHVzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzIHRoYXQgYnVpbGQgZm9yIHRoZSBTREssIHRoZSB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7U1RBR0lOR19ESVJ9LyR7TVVMVElNQUNIX0hPU1RfU1lTfSIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19ESVJfTkFUSVZFJz48Z2xvc3N0ZXJtPlNUQUdJTkdfRElSX05BVElWRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19ESVJfTkFUSVZFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19ESVJfVEFSR0VUJz48Z2xvc3N0ZXJtPlNUQUdJTkdfRElSX1RBUkdFVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19ESVJfVEFSR0VUW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgZm9yIHdoaWNoIHRoZSBjdXJyZW50IHJlY2lwZSBpcyBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgSW4gbW9zdCBjYXNlcywgdGhpcyBwYXRoIGlzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19ESVJfSE9TVCc+PGZpbGVuYW1lPlNUQUdJTkdfRElSX0hPU1Q8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNvbWUgcmVjaXBlcyBidWlsZCBiaW5hcmllcyB0aGF0IGNhbiBydW4gb24gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gYnV0IHRob3NlIGJpbmFyaWVzIGluIHR1cm4gZ2VuZXJhdGUgY29kZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgYW5vdGhlciBkaWZmZXJlbnQgc3lzdGVtIChlLmcuIGNyb3NzLWNhbmFkaWFuIHJlY2lwZXMpLgorICAgICAgICAgICAgICAgICAgICBVc2luZyB0ZXJtaW5vbG9neSBmcm9tIEdOVSwgdGhlIHByaW1hcnkgc3lzdGVtIGlzIHJlZmVycmVkCisgICAgICAgICAgICAgICAgICAgIHRvIGFzIHRoZSAiSE9TVCIgYW5kIHRoZSBzZWNvbmRhcnksIG9yIGRpZmZlcmVudCwgc3lzdGVtIGlzCisgICAgICAgICAgICAgICAgICAgIHJlZmVycmVkIHRvIGFzIHRoZSAiVEFSR0VUIi4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIGJpbmFyaWVzIHJ1biBvbiB0aGUgIkhPU1QiIHN5c3RlbSBhbmQKKyAgICAgICAgICAgICAgICAgICAgYW5kIGdlbmVyYXRlIGJpbmFyaWVzIGZvciB0aGUgIlRBUkdFVCIgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1RBR0lOR19ESVJfVEFSR0VUPC9maWxlbmFtZT4gcG9pbnRzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBzeXNyb290IHVzZWQgZm9yIHRoZSAiVEFSR0VUIiBzeXN0ZW0uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19FVENESVJfTkFUSVZFJz48Z2xvc3N0ZXJtPlNUQUdJTkdfRVRDRElSX05BVElWRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19FVENESVJfTkFUSVZFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSAvZXRjIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZCBob3N0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi9ldGM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0VYRUNQUkVGSVhESVInPjxnbG9zc3Rlcm0+U1RBR0lOR19FWEVDUFJFRklYRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0VYRUNQUkVGSVhESVJbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIC91c3Igc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0IChTVEFHSU5HX0RJUl9IT1NUKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIDxmaWxlbmFtZT4vdXNyPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19ESVJfSE9TVCc+PGZpbGVuYW1lPlNUQUdJTkdfRElSX0hPU1Q8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfSU5DRElSJz48Z2xvc3N0ZXJtPlNUQUdJTkdfSU5DRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0lOQ0RJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgL3Vzci9pbmNsdWRlIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSB0YXJnZXQgZm9yIHdoaWNoIHRoZSBjdXJyZW50IHJlY2lwZSBiZWluZyBidWlsdCAoU1RBR0lOR19ESVJfSE9TVCkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9pbmNsdWRlPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19ESVJfSE9TVCc+PGZpbGVuYW1lPlNUQUdJTkdfRElSX0hPU1Q8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfSU5DRElSX05BVElWRSc+PGdsb3NzdGVybT5TVEFHSU5HX0lOQ0RJUl9OQVRJVkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfSU5DRElSX05BVElWRVtkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgL3Vzci9pbmNsdWRlIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZCBob3N0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi91c3IvaW5jbHVkZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfS0VSTkVMX0RJUic+PGdsb3NzdGVybT5TVEFHSU5HX0tFUk5FTF9ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfS0VSTkVMX0RJUltkb2NdID0gIlRoZSBkaXJlY3Rvcnkgd2l0aCBrZXJuZWwgaGVhZGVycyB0aGF0IGFyZSByZXF1aXJlZCB0byBidWlsZCBvdXQtb2YtdHJlZSBtb2R1bGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3Rvcnkgd2l0aCBrZXJuZWwgaGVhZGVycyB0aGF0IGFyZSByZXF1aXJlZCB0byBidWlsZCBvdXQtb2YtdHJlZQorICAgICAgICAgICAgICAgICAgICBtb2R1bGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfTElCRElSJz48Z2xvc3N0ZXJtPlNUQUdJTkdfTElCRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0xJQkRJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgL3Vzci9saWIgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0IChTVEFHSU5HX0RJUl9IT1NUKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIDxmaWxlbmFtZT4vdXNyL2xpYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSB0YXJnZXQgZm9yCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRoZSBjdXJyZW50IHJlY2lwZSBpcyBiZWluZyBidWlsdAorICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfRElSX0hPU1QnPjxmaWxlbmFtZT5TVEFHSU5HX0RJUl9IT1NUPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0xJQkRJUl9OQVRJVkUnPjxnbG9zc3Rlcm0+U1RBR0lOR19MSUJESVJfTkFUSVZFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0xJQkRJUl9OQVRJVkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIC91c3IvbGliIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZCBob3N0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi91c3IvbGliPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBTVAnPjxnbG9zc3Rlcm0+U1RBTVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQU1QW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBiYXNlIHBhdGggdXNlZCB0byBjcmVhdGUgcmVjaXBlIHN0YW1wIGZpbGVzLiBUaGUgcGF0aCB0byBhbiBhY3R1YWwgc3RhbXAgZmlsZSBpcyBjb25zdHJ1Y3RlZCBieSBldmFsdWF0aW5nIHRoaXMgc3RyaW5nIGFuZCB0aGVuIGFwcGVuZGluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgYmFzZSBwYXRoIHVzZWQgdG8gY3JlYXRlIHJlY2lwZSBzdGFtcCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggdG8gYW4gYWN0dWFsIHN0YW1wIGZpbGUgaXMgY29uc3RydWN0ZWQgYnkgZXZhbHVhdGluZyB0aGlzCisgICAgICAgICAgICAgICAgICAgIHN0cmluZyBhbmQgdGhlbiBhcHBlbmRpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgQ3VycmVudGx5LCB0aGUgZGVmYXVsdCBhc3NpZ25tZW50IGZvciA8ZmlsZW5hbWU+U1RBTVA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhcyBzZXQgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICBpczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTVEFNUCA9ICIke1NUQU1QU19ESVJ9LyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9LyR7UE59LyR7RVhURU5EUEV9JHtQVn0tJHtQUn0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFNUFNfRElSJz48ZmlsZW5hbWU+U1RBTVBTX0RJUjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1VTFRJTUFDSF9UQVJHRVRfU1lTJz48ZmlsZW5hbWU+TVVMVElNQUNIX1RBUkdFVF9TWVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRVhURU5EUEUnPjxmaWxlbmFtZT5FWFRFTkRQRTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPiBmb3IgcmVsYXRlZCB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFNUFNfRElSJz48Z2xvc3N0ZXJtPlNUQU1QU19ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQU1QU19ESVJbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGJhc2UgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHBsYWNlcyBzdGFtcHMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBiYXNlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBwbGFjZXMgc3RhbXBzLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7VE1QRElSfS9zdGFtcHM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVFJJUCc+PGdsb3NzdGVybT5TVFJJUDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RSSVBbZG9jXSA9ICJNaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ3N0cmlwJyAoc3RyaXAgc3ltYm9scykuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1bgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RyaXA8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgdXNlZCB0byBzdHJpcAorICAgICAgICAgICAgICAgICAgICBzeW1ib2xzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNVTU1BUlknPjxnbG9zc3Rlcm0+U1VNTUFSWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1VNTUFSWVtkb2NdID0gIlRoZSBzaG9ydCAoODAgY2hhcmFjdGVycyBvciBsZXNzKSBzdW1tYXJ5IG9mIHRoZSBiaW5hcnkgcGFja2FnZSBmb3IgcGFja2FnaW5nIHN5c3RlbXMgc3VjaCBhcyBvcGtnLCBycG0gb3IgZHBrZy4gQnkgZGVmYXVsdCwgU1VNTUFSWSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgREVTQ1JJUFRJT04gdmFyaWFibGUgaWYgREVTQ1JJUFRJT04gaXMgbm90IHNldCBpbiB0aGUgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzaG9ydCAoNzIgY2hhcmFjdGVycyBvciBsZXNzKSBzdW1tYXJ5IG9mIHRoZSBiaW5hcnkgcGFja2FnZSBmb3IgcGFja2FnaW5nCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbXMgc3VjaCBhcyA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+cnBtPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRwa2c8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPlNVTU1BUlk8L2ZpbGVuYW1lPiBpcyB1c2VkIHRvIGRlZmluZQorICAgICAgICAgICAgICAgICAgICB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLURFU0NSSVBUSU9OJz48ZmlsZW5hbWU+REVTQ1JJUFRJT048L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaWYgPGZpbGVuYW1lPkRFU0NSSVBUSU9OPC9maWxlbmFtZT4gaXMgbm90IHNldAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNWTkRJUic+PGdsb3NzdGVybT5TVk5ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNWTkRJUltkb2NdID0gIlRoZSBkaXJlY3Rvcnkgd2hlcmUgU3VidmVyc2lvbiBjaGVja291dHMgd2lsbCBiZSBzdG9yZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBmaWxlcyBjaGVja2VkIG91dCBvZiBhIFN1YnZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGFyZSBzdG9yZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1lTTElOVVhfREVGQVVMVF9DT05TT0xFJz48Z2xvc3N0ZXJtPlNZU0xJTlVYX0RFRkFVTFRfQ09OU09MRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1lTTElOVVhfREVGQVVMVF9DT05TT0xFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBrZXJuZWwgYm9vdCBkZWZhdWx0IGNvbnNvbGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBrZXJuZWwgYm9vdCBkZWZhdWx0IGNvbnNvbGUuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVzZSBhIGNvbnNvbGUgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgc2V0IHRoaXMgdmFyaWFibGUgaW4geW91ciByZWNpcGUgYXMgZm9sbG93cyB3aGVyZSAiWCIgaXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGNvbnNvbGUgbnVtYmVyIHlvdSB3YW50IHRvIHVzZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTWVNMSU5VWF9ERUZBVUxUX0NPTlNPTEUgPSAiY29uc29sZT10dHlYIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zeXNsaW51eCc+PGZpbGVuYW1lPnN5c2xpbnV4PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGluaXRpYWxseSBzZXRzIHRoaXMgdmFyaWFibGUgdG8gbnVsbCBidXQgdGhlbiBjaGVja3MKKyAgICAgICAgICAgICAgICAgICAgZm9yIGEgdmFsdWUgbGF0ZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1lTTElOVVhfT1BUUyc+PGdsb3NzdGVybT5TWVNMSU5VWF9PUFRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNMSU5VWF9PUFRTW2RvY10gPSAiTGlzdHMgYWRkaXRpb25hbCBvcHRpb25zIHRvIGFkZCB0byB0aGUgc3lzbGludXggZmlsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gYWRkIHRvIHRoZSBzeXNsaW51eCBmaWxlLgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gbGlzdCBtdWx0aXBsZSBvcHRpb25zLCBzZXBhcmF0ZSB0aGUgb3B0aW9ucworICAgICAgICAgICAgICAgICAgICB3aXRoIGEgc2VtaWNvbG9uIGNoYXJhY3RlciAoPGZpbGVuYW1lPjs8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zeXNsaW51eCc+PGZpbGVuYW1lPnN5c2xpbnV4PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHVzZXMgdGhpcyB2YXJpYWJsZSB0byBjcmVhdGUgYSBzZXQgb2Ygb3B0aW9ucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNMSU5VWF9TRVJJQUwnPjxnbG9zc3Rlcm0+U1lTTElOVVhfU0VSSUFMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNMSU5VWF9TRVJJQUxbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGFsdGVybmF0ZSBzZXJpYWwgcG9ydCBvciB0dXJucyBpdCBvZmYuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBhbHRlcm5hdGUgc2VyaWFsIHBvcnQgb3IgdHVybnMgaXQgb2ZmLgorICAgICAgICAgICAgICAgICAgICBUbyB0dXJuIG9mZiBzZXJpYWwsIHNldCB0aGlzIHZhcmlhYmxlIHRvIGFuIGVtcHR5IHN0cmluZworICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlJ3MgZGVmYXVsdCB2YWx1ZSBpcyBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXN5c2xpbnV4Jz48ZmlsZW5hbWU+c3lzbGludXg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTWVNMSU5VWF9TRVJJQUwgPz0gIjAgMTE1MjAwIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyBjaGVja3MgZm9yIGFuZCB1c2VzIHRoZSB2YXJpYWJsZSBhcyBuZWVkZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1lTTElOVVhfU1BMQVNIJz48Z2xvc3N0ZXJtPlNZU0xJTlVYX1NQTEFTSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1lTTElOVVhfU1BMQVNIW2RvY10gPSAiQW4gLkxTUyBmaWxlIHVzZWQgYXMgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBWR0EgYm9vdCBtZW51IHdoZW4geW91IGFyZSB1c2luZyB0aGUgYm9vdCBtZW51LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFuIDxmaWxlbmFtZT4uTFNTPC9maWxlbmFtZT4gZmlsZSB1c2VkIGFzIHRoZSBiYWNrZ3JvdW5kCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgVkdBIGJvb3QgbWVudSB3aGVuIHlvdSBhcmUgdXNpbmcgdGhlIGJvb3QgbWVudS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gc2V0IHRoaXMgdmFyaWFibGUgaW4geW91ciByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zeXNsaW51eCc+PGZpbGVuYW1lPnN5c2xpbnV4PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGNoZWNrcyBmb3IgdGhpcyB2YXJpYWJsZSBhbmQgaWYgZm91bmQsIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGluc3RhbGxzIHRoZSBzcGxhc2ggc2NyZWVuLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNZU0xJTlVYX1NFUklBTF9UVFknPjxnbG9zc3Rlcm0+U1lTTElOVVhfU0VSSUFMX1RUWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1lTTElOVVhfU0VSSUFMX1RUWVtkb2NdID0gIlNwZWNpZmllcyB0aGUgYWx0ZXJuYXRlIGNvbnNvbGU9dHR5Li4uIGtlcm5lbCBib290IGFyZ3VtZW50LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgYWx0ZXJuYXRlIGNvbnNvbGU9dHR5Li4uIGtlcm5lbCBib290IGFyZ3VtZW50LgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUncyBkZWZhdWx0IHZhbHVlIGlzIHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3lzbGludXgnPjxmaWxlbmFtZT5zeXNsaW51eDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNZU0xJTlVYX1NFUklBTF9UVFkgPz0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyBjaGVja3MgZm9yIGFuZCB1c2VzIHRoZSB2YXJpYWJsZSBhcyBuZWVkZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTJz48Z2xvc3N0ZXJtPlNZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTW2RvY10gPSAiQSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBleGVjdXRlIGFmdGVyIGZpbGVzIGFyZSBzdGFnZWQgaW50byB0aGUgc3lzcm9vdC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c3VhbGx5IHVzZWQgdG8gYXBwbHkgYWRkaXRpb25hbCBwcm9jZXNzaW5nIG9uIHRoZSBzdGFnZWQgZmlsZXMsIG9yIHRvIHN0YWdlIGFkZGl0aW9uYWwgZmlsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBleGVjdXRlIGFmdGVyIGZpbGVzIGFyZSBzdGFnZWQgaW50bworICAgICAgICAgICAgICAgICAgICB0aGUgc3lzcm9vdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSB1c3VhbGx5IHVzZWQgdG8gYXBwbHkgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nIG9uIHRoZSBzdGFnZWQgZmlsZXMsIG9yIHRvIHN0YWdlIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgZmlsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1lTVEVNRF9BVVRPX0VOQUJMRSc+PGdsb3NzdGVybT5TWVNURU1EX0FVVE9fRU5BQkxFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNURU1EX0FVVE9fRU5BQkxFW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBzeXN0ZW1kIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBzZXJ2aWNlIHlvdSBoYXZlIHNwZWNpZmllZCBpbiBTWVNURU1EX1NFUlZJQ0Ugc2hvdWxkIGJlIHN0YXJ0ZWQgYXV0b21hdGljYWxseSBvciBub3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zeXN0ZW1kJz48ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgd2hldGhlciB0aGUgc2VydmljZSB5b3UgaGF2ZQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNZU1RFTURfU0VSVklDRSc+PGZpbGVuYW1lPlNZU1RFTURfU0VSVklDRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgc3RhcnRlZCBhdXRvbWF0aWNhbGx5IG9yIG5vdC4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHNlcnZpY2UgaXMgZW5hYmxlZCB0byBhdXRvbWF0aWNhbGx5IHN0YXJ0CisgICAgICAgICAgICAgICAgICAgIGF0IGJvb3QgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgc2V0dGluZyBpcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3lzdGVtZCc+PGZpbGVuYW1lPnN5c3RlbWQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTWVNURU1EX0FVVE9fRU5BQkxFID8/PSAiZW5hYmxlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZGlzYWJsZSB0aGUgc2VydmljZSBieSBzZXR0aW5nIHRoZSB2YXJpYWJsZSB0bworICAgICAgICAgICAgICAgICAgICAiZGlzYWJsZSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1lTVEVNRF9QQUNLQUdFUyc+PGdsb3NzdGVybT5TWVNURU1EX1BBQ0tBR0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNURU1EX1BBQ0tBR0VTW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBzeXN0ZW1kIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGxvY2F0ZXMgdGhlIHN5c3RlbWQgdW5pdCBmaWxlcyB3aGVuIHRoZXkgYXJlIG5vdCBmb3VuZCBpbiB0aGUgbWFpbiByZWNpcGUncyBwYWNrYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3lzdGVtZCc+PGZpbGVuYW1lPnN5c3RlbWQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgbG9jYXRlcyB0aGUgc3lzdGVtZCB1bml0IGZpbGVzIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgdGhleSBhcmUgbm90IGZvdW5kIGluIHRoZSBtYWluIHJlY2lwZSdzIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1lTVEVNRF9QQUNLQUdFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHNldAorICAgICAgICAgICAgICAgICAgICBzdWNoIHRoYXQgdGhlIHN5c3RlbWQgdW5pdCBmaWxlcyBhcmUgYXNzdW1lZCB0byByZXNpZGUgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIHJlY2lwZXMgbWFpbiBwYWNrYWdlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNZU1RFTURfUEFDS0FHRVMgPz0gIiR7UE59IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHRoZXNlIHVuaXQgZmlsZXMgYXJlIG5vdCBpbiB0aGlzIHJlY2lwZSdzIG1haW4KKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwgeW91IG5lZWQgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TWVNURU1EX1BBQ0tBR0VTPC9maWxlbmFtZT4gdG8gbGlzdCB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBvciBwYWNrYWdlcyBpbiB3aGljaCB0aGUgYnVpbGQgc3lzdGVtIGNhbiBmaW5kIHRoZSBzeXN0ZW1kCisgICAgICAgICAgICAgICAgICAgIHVuaXQgZmlsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1lTVEVNRF9TRVJWSUNFJz48Z2xvc3N0ZXJtPlNZU1RFTURfU0VSVklDRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1lTVEVNRF9TRVJWSUNFW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBzeXN0ZW1kIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgc3lzdGVtZCBzZXJ2aWNlIG5hbWUgZm9yIGEgcGFja2FnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXN5c3RlbWQnPjxmaWxlbmFtZT5zeXN0ZW1kPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgc3lzdGVtZCBzZXJ2aWNlIG5hbWUgZm9yCisgICAgICAgICAgICAgICAgICAgIGEgcGFja2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3Ugc3BlY2lmeSB0aGlzIGZpbGUgaW4geW91ciByZWNpcGUsIHVzZSBhIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgbmFtZSBvdmVycmlkZSB0byBpbmRpY2F0ZSB0aGUgcGFja2FnZSB0byB3aGljaCB0aGUgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgYXBwbGllcy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlIGNvbm5tYW4gcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJjb25ubWFuLnNlcnZpY2UiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNWSU5JVF9FTkFCTEVEX0dFVFRZUyc+PGdsb3NzdGVybT5TWVNWSU5JVF9FTkFCTEVEX0dFVFRZUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1lTVklOSVRfRU5BQkxFRF9HRVRUWVNbZG9jXSA9ICJTcGVjaWZpZXMgd2hpY2ggdmlydHVhbCB0ZXJtaW5hbHMgc2hvdWxkIGJlIHJ1bm5pbmcgYSBnZXR0eSwgdGhlIGRlZmF1bHQgaXMgJzEnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbmV3LXJlY2lwZS1lbmFibGluZy1zeXN0ZW0tc2VydmljZXMnPlN5c1Zpbml0PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSB2aXJ0dWFsIHRlcm1pbmFscworICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSBydW5uaW5nIGEKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HZXR0eV8lMjhVbml4JTI5Jz5nZXR0eTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIChhbGxvd2luZyBsb2dpbiksIGFzc3VtaW5nCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VfVlQnPjxmaWxlbmFtZT5VU0VfVlQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgbm90IHNldCB0byAiMCIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1lTVklOSVRfRU5BQkxFRF9HRVRUWVM8L2ZpbGVuYW1lPiBpcyAiMSIKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gb25seSBydW4gYSBnZXR0eSBvbiB0aGUgZmlyc3QgdmlydHVhbCB0ZXJtaW5hbCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXQnPjx0aXRsZT5UPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVQnPjxnbG9zc3Rlcm0+VDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVFtkb2NdID0gIlRoaXMgdmFyaWFibGUgcG9pbnRzIHRvIGEgZGlyZWN0b3J5IHdlcmUgQml0QmFrZSBwbGFjZXMgdGVtcG9yYXJ5IGZpbGVzLCB3aGljaCBjb25zaXN0IG1vc3RseSBvZiB0YXNrIGxvZ3MgYW5kIHNjcmlwdHMsIHdoZW4gYnVpbGRpbmcgYSBwYXJ0aWN1bGFyIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHBvaW50cyB0byBhIGRpcmVjdG9yeSB3ZXJlIEJpdEJha2UgcGxhY2VzCisgICAgICAgICAgICAgICAgICAgIHRlbXBvcmFyeSBmaWxlcywgd2hpY2ggY29uc2lzdCBtb3N0bHkgb2YgdGFzayBsb2dzIGFuZAorICAgICAgICAgICAgICAgICAgICBzY3JpcHRzLCB3aGVuIGJ1aWxkaW5nIGEgcGFydGljdWxhciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyB0eXBpY2FsbHkgc2V0IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVCA9ICIke1dPUktESVJ9L3RlbXAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyB0aGUgZGlyZWN0b3J5IGludG8gd2hpY2ggQml0QmFrZSB1bnBhY2tzIGFuZCBidWlsZHMgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUgc2V0cyB0aGlzIHZhcmlhYmxlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIDxmaWxlbmFtZT5UPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHBvaW50cyB0byB0aGUgcm9vdCBvZiB0aGUgZGlyZWN0b3J5IHRyZWUgd2hlcmUgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICBwbGFjZXMgdGhlIG91dHB1dCBvZiBhbiBlbnRpcmUgYnVpbGQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX0FSQ0gnPjxnbG9zc3Rlcm0+VEFSR0VUX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRBUkdFVF9BUkNIW2RvY10gPSAiVGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgZGV2aWNlIGJlaW5nIGJ1aWx0LiBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGFyY2hpdGVjdHVyZXM6IGFybSwgbWlwcywgcHBjLCB4ODYsIHg4Ni02NC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0IG1hY2hpbmUncyBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHN1cHBvcnRzIG1hbnkKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbGlzdCBpcyBieSBubyBtZWFucyBjb21wbGV0ZSBhcyB0aGUgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgICAgIGlzIGNvbmZpZ3VyYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBhcm0KKyAgICAgaTU4NgorICAgICB4ODZfNjQKKyAgICAgcG93ZXJwYworICAgICBwb3dlcnBjNjQKKyAgICAgbWlwcworICAgICBtaXBzZWwKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBtYWNoaW5lIGFyY2hpdGVjdHVyZXMsIHNlZQorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfQVJDSCc+PGZpbGVuYW1lPlRVTkVfQVJDSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UQVJHRVRfQVNfQVJDSCc+PGdsb3NzdGVybT5UQVJHRVRfQVNfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX0FTX0FSQ0hbZG9jXSA9ICJTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGFzc2VtYmxlciBmbGFncyBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhc3NlbWJsZXIgZmxhZ3MgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEFSR0VUX0FTX0FSQ0g8L2ZpbGVuYW1lPiBpcyBpbml0aWFsaXplZCBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FX0FTQVJHUyc+PGZpbGVuYW1lPlRVTkVfQVNBUkdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQgaW4gdGhlIEJpdEJha2UgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+KToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBUQVJHRVRfQVNfQVJDSCA9ICIke1RVTkVfQVNBUkdTfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9DQ19BUkNIJz48Z2xvc3N0ZXJtPlRBUkdFVF9DQ19BUkNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQVJHRVRfQ0NfQVJDSFtkb2NdID0gIlNwZWNpZmllcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgQyBjb21waWxlciBmbGFncyBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBDIGNvbXBpbGVyIGZsYWdzIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRBUkdFVF9DQ19BUkNIPC9maWxlbmFtZT4gaXMgaW5pdGlhbGl6ZWQgZnJvbQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORV9DQ0FSR1MnPjxmaWxlbmFtZT5UVU5FX0NDQVJHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIGEgY29tbW9uIHdvcmthcm91bmQgdG8gYXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTERGTEFHUyc+PGZpbGVuYW1lPkxERkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIDxmaWxlbmFtZT5UQVJHRVRfQ0NfQVJDSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBpbiByZWNpcGVzIHRoYXQgYnVpbGQgc29mdHdhcmUgZm9yIHRoZSB0YXJnZXQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgd291bGQgbm90IG90aGVyd2lzZSByZXNwZWN0IHRoZSBleHBvcnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxERkxBR1M8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9DQ19LRVJORUxfQVJDSCc+PGdsb3NzdGVybT5UQVJHRVRfQ0NfS0VSTkVMX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRBUkdFVF9DQ19LRVJORUxfQVJDSFtkb2NdID0gIlRoaXMgaXMgYSBzcGVjaWZpYyBrZXJuZWwgY29tcGlsZXIgZmxhZyBmb3IgYSBDUFUgb3IgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoQUJJKSB0dW5lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYSBzcGVjaWZpYyBrZXJuZWwgY29tcGlsZXIgZmxhZyBmb3IgYSBDUFUgb3IKKyAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoQUJJKSB0dW5lLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmxhZyBpcyB1c2VkIHJhcmVseSBhbmQgb25seSBmb3IgY2FzZXMgd2hlcmUgYQorICAgICAgICAgICAgICAgICAgICB1c2Vyc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfQ0NBUkdTJz48ZmlsZW5hbWU+VFVORV9DQ0FSR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUga2VybmVsIGNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlRBUkdFVF9DQ19LRVJORUxfQVJDSDwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGFsbG93cyB0aGUga2VybmVsIChhbmQgYXNzb2NpYXRlZCBtb2R1bGVzKSB0byB1c2UgYQorICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdGh1bWIuaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBhbiBleGFtcGxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9DRkxBR1MnPjxnbG9zc3Rlcm0+VEFSR0VUX0NGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX0NGTEFHU1tkb2NdID0gIkZsYWdzIHBhc3NlZCB0byB0aGUgQyBjb21waWxlciBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIFRoaXMgdmFyaWFibGUgZXZhbHVhdGVzIHRvIHRoZSBzYW1lIGFzIENGTEFHUy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgY29tcGlsZXIgd2hlbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBpbiB0aGUgdGFyZ2V0IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DRkxBR1MnPjxmaWxlbmFtZT5DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIFNESydzIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBzZXRzCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ0ZMQUdTJz48ZmlsZW5hbWU+Q0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSBlbnZpcm9ubWVudCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRBUkdFVF9DRkxBR1M8L2ZpbGVuYW1lPiB2YWx1ZSBzbyB0aGF0CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVzIGJ1aWx0IHVzaW5nIHRoZSBTREsgYWxzbyBoYXZlIHRoZSBmbGFncworICAgICAgICAgICAgICAgICAgICBhcHBsaWVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9DUFBGTEFHUyc+PGdsb3NzdGVybT5UQVJHRVRfQ1BQRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRBUkdFVF9DUFBGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBwcmUtcHJvY2Vzc29yIChpLmUuIHRvIGJvdGggdGhlIEMgYW5kIHRoZSBDKysgY29tcGlsZXJzKSB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBwcmUtcHJvY2Vzc29yCisgICAgICAgICAgICAgICAgICAgIChpLmUuIHRvIGJvdGggdGhlIEMgYW5kIHRoZSBDKysgY29tcGlsZXJzKSB3aGVuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGluIHRoZSB0YXJnZXQgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNQUEZMQUdTJz48ZmlsZW5hbWU+Q1BQRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIFNESydzIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBzZXRzCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ1BQRkxBR1MnPjxmaWxlbmFtZT5DUFBGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgZW52aXJvbm1lbnQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UQVJHRVRfQ1BQRkxBR1M8L2ZpbGVuYW1lPiB2YWx1ZSBzbyB0aGF0CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVzIGJ1aWx0IHVzaW5nIHRoZSBTREsgYWxzbyBoYXZlIHRoZSBmbGFncworICAgICAgICAgICAgICAgICAgICBhcHBsaWVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9DWFhGTEFHUyc+PGdsb3NzdGVybT5UQVJHRVRfQ1hYRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRBUkdFVF9DWFhGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQysrIGNvbXBpbGVyIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDKysgY29tcGlsZXIgd2hlbgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZyBmb3IgdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBpbiB0aGUgdGFyZ2V0IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DWFhGTEFHUyc+PGZpbGVuYW1lPkNYWEZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSBTREsncyBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgc2V0cworICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNYWEZMQUdTJz48ZmlsZW5hbWU+Q1hYRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIGVudmlyb25tZW50IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEFSR0VUX0NYWEZMQUdTPC9maWxlbmFtZT4gdmFsdWUgc28gdGhhdAorICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlcyBidWlsdCB1c2luZyB0aGUgU0RLIGFsc28gaGF2ZSB0aGUgZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgYXBwbGllZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UQVJHRVRfRlBVJz48Z2xvc3N0ZXJtPlRBUkdFVF9GUFU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRBUkdFVF9GUFVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIG1ldGhvZCBmb3IgaGFuZGxpbmcgRlBVIGNvZGUuIEZvciBGUFUtbGVzcyB0YXJnZXRzLCB3aGljaCBpbmNsdWRlIG1vc3QgQVJNIENQVXMsIHRoZSB2YXJpYWJsZSBtdXN0IGJlIHNldCB0byAnc29mdCcuIElmIG5vdCwgdGhlIGtlcm5lbCBlbXVsYXRpb24gZ2V0cyB1c2VkLCB3aGljaCByZXN1bHRzIGluIGEgcGVyZm9ybWFuY2UgcGVuYWx0eS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG1ldGhvZCBmb3IgaGFuZGxpbmcgRlBVIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBGUFUtbGVzcyB0YXJnZXRzLCB3aGljaCBpbmNsdWRlIG1vc3QgQVJNIENQVXMsIHRoZSB2YXJpYWJsZSBtdXN0IGJlCisgICAgICAgICAgICAgICAgICAgIHNldCB0byAic29mdCIuCisgICAgICAgICAgICAgICAgICAgIElmIG5vdCwgdGhlIGtlcm5lbCBlbXVsYXRpb24gZ2V0cyB1c2VkLCB3aGljaCByZXN1bHRzIGluIGEgcGVyZm9ybWFuY2UgcGVuYWx0eS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UQVJHRVRfTERfQVJDSCc+PGdsb3NzdGVybT5UQVJHRVRfTERfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX0xEX0FSQ0hbZG9jXSA9ICJTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGxpbmtlciBmbGFncyBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBsaW5rZXIgZmxhZ3MgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEFSR0VUX0xEX0FSQ0g8L2ZpbGVuYW1lPiBpcyBpbml0aWFsaXplZCBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FX0xEQVJHUyc+PGZpbGVuYW1lPlRVTkVfTERBUkdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQgaW4gdGhlIEJpdEJha2UgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+KToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBUQVJHRVRfTERfQVJDSCA9ICIke1RVTkVfTERBUkdTfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9MREZMQUdTJz48Z2xvc3N0ZXJtPlRBUkdFVF9MREZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQVJHRVRfTERGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgbGlua2VyIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBsaW5rZXIgd2hlbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBpbiB0aGUgdGFyZ2V0IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MREZMQUdTJz48ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgU0RLJ3MgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IHNldHMKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MREZMQUdTJz48ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgZW52aXJvbm1lbnQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UQVJHRVRfTERGTEFHUzwvZmlsZW5hbWU+IHZhbHVlIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZXMgYnVpbHQgdXNpbmcgdGhlIFNESyBhbHNvIGhhdmUgdGhlIGZsYWdzCisgICAgICAgICAgICAgICAgICAgIGFwcGxpZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX09TJz48Z2xvc3N0ZXJtPlRBUkdFVF9PUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX09TW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB0YXJnZXQncyBvcGVyYXRpbmcgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdGFyZ2V0J3Mgb3BlcmF0aW5nIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gImxpbnV4IiBmb3IgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4tYmFzZWQgc3lzdGVtcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgdG8gImxpbnV4LXVjbGliYyIgZm9yIDxmaWxlbmFtZT51Y2xpYmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIEFSTS9FQUJJIHRhcmdldHMsIHRoZXJlIGFyZSBhbHNvICJsaW51eC1nbnVlYWJpIiBhbmQKKyAgICAgICAgICAgICAgICAgICAgImxpbnV4LXVjbGliYy1nbnVlYWJpIiB2YWx1ZXMgcG9zc2libGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX1BSRUZJWCc+PGdsb3NzdGVybT5UQVJHRVRfUFJFRklYPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQVJHRVRfUFJFRklYW2RvY10gPSAiVGhlIHByZWZpeCB1c2VkIGZvciB0aGUgdG9vbGNoYWluIGJpbmFyeSB0YXJnZXQgdG9vbHMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwcmVmaXggdXNlZCBmb3IgdGhlIHRvb2xjaGFpbiBiaW5hcnkgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIHRvb2xzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgcmVjaXBlIGFuZCB0aGUgYnVpbGQgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEFSR0VUX1BSRUZJWDwvZmlsZW5hbWU+IGlzIHNldCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciByZWNpcGVzIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0IG1hY2hpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7PGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9TWVMnPlRBUkdFVF9TWVM8L2xpbms+fS0iLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4gcmVjaXBlcywgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHNldHMgdGhlIHZhcmlhYmxlIHRvIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CVUlMRF9QUkVGSVg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+IHJlY2lwZXMsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBzZXRzIHRoZSB2YXJpYWJsZSB0byB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U0RLX1BSRUZJWDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UQVJHRVRfU1lTJz48Z2xvc3N0ZXJtPlRBUkdFVF9TWVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRBUkdFVF9TWVNbZG9jXSA9ICJUaGUgdGFyZ2V0IHN5c3RlbSBpcyBjb21wcmlzZWQgb2YgVEFSR0VUX0FSQ0gsVEFSR0VUX1ZFTkRPUiBhbmQgVEFSR0VUX09TLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgc3lzdGVtLCBpbmNsdWRpbmcgdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGluZyBzeXN0ZW0sIGZvciB3aGljaCB0aGUgYnVpbGQgaXMgb2NjdXJyaW5nIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBzZXRzIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYmFzZWQgb24KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9BUkNIJz48ZmlsZW5hbWU+VEFSR0VUX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfVkVORE9SJz48ZmlsZW5hbWU+VEFSR0VUX1ZFTkRPUjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfT1MnPjxmaWxlbmFtZT5UQVJHRVRfT1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCB0byBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEFSR0VUX1NZUzwvZmlsZW5hbWU+IHZhcmlhYmxlIHlvdXJzZWxmLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoZXNlIHR3byBleGFtcGxlczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHaXZlbiBhIDxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPiByZWNpcGUgb24gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyLWJpdCwgeDg2IG1hY2hpbmUgcnVubmluZyBMaW51eCwgdGhlIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImk2ODYtbGludXgiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdmVuIGEgcmVjaXBlIGJlaW5nIGJ1aWx0IGZvciBhIGxpdHRsZS1lbmRpYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlQUyB0YXJnZXQgcnVubmluZyBMaW51eCwgdGhlIHZhbHVlIG1pZ2h0IGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHNlbC1saW51eCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9WRU5ET1InPjxnbG9zc3Rlcm0+VEFSR0VUX1ZFTkRPUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX1ZFTkRPUltkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgdmVuZG9yLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgdGFyZ2V0IHZlbmRvci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UQ0xJQkNBUFBFTkQnPjxnbG9zc3Rlcm0+VENMSUJDQVBQRU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQ0xJQkNBUFBFTkRbZG9jXSA9ICJTcGVjaWZpZXMgYSBzdWZmaXggYXBwZW5kZWQgdG8gVE1QRElSIHRoYXQgaWRlbnRpZmllcyB0aGUgbGliYyB2YXJpYW50IGZvciB0aGUgYnVpbGQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIG9udG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzdWZmaXggaWRlbnRpZmllcyB0aGUgPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPiB2YXJpYW50CisgICAgICAgICAgICAgICAgICAgIGZvciBidWlsZGluZy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgYXJlIGJ1aWxkaW5nIGZvciBtdWx0aXBsZSB2YXJpYW50cyB3aXRoIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIHRoaXMgbWVjaGFuaXNtIGVuc3VyZXMgdGhhdCBvdXRwdXQgZm9yIGRpZmZlcmVudAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliYzwvZmlsZW5hbWU+IHZhcmlhbnRzIGlzIGtlcHQgc2VwYXJhdGUgdG8KKyAgICAgICAgICAgICAgICAgICAgYXZvaWQgcG90ZW50aWFsIGNvbmZsaWN0cy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIDxmaWxlbmFtZT5kZWZhdWx0c2V0dXAuY29uZjwvZmlsZW5hbWU+IGZpbGUsIHRoZQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IHZhbHVlIG9mIDxmaWxlbmFtZT5UQ0xJQkNBUFBFTkQ8L2ZpbGVuYW1lPiBpcworICAgICAgICAgICAgICAgICAgICAiLSR7VENMSUJDfSIuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGRpc3Ryb3Mgc3VjaCBhcyBwb2t5LCB3aGljaCBub3JtYWxseSBvbmx5IHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgb25lIDxmaWxlbmFtZT5saWJjPC9maWxlbmFtZT4gdmFyaWFudCwgc2V0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UQ0xJQkNBUFBFTkQ8L2ZpbGVuYW1lPiB0byAiIiBpbiB0aGVpciBkaXN0cm8KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIHJlc3VsdGluZyBpbiBubyBzdWZmaXggYmVpbmcgYXBwbGllZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UQ0xJQkMnPjxnbG9zc3Rlcm0+VENMSUJDPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQ0xJQkNbZG9jXSA9ICJTcGVjaWZpZXMgR05VIHN0YW5kYXJkIEMgbGlicmFyeSAobGliYykgdmFyaWFudCB0byB1c2UgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLiBZb3UgY2FuIHNlbGVjdCAnZ2xpYmMnIG9yICd1Y2xpYmMnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgR05VIHN0YW5kYXJkIEMgbGlicmFyeSAoPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFudCB0byB1c2UgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHJlcGxhY2VzIDxmaWxlbmFtZT5QT0tZTElCQzwvZmlsZW5hbWU+LCB3aGljaCBpcyBubyBsb25nZXIKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlbGVjdCAiZ2xpYmMiIG9yICJ1Y2xpYmMiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRDTU9ERSc+PGdsb3NzdGVybT5UQ01PREU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRDTU9ERVtkb2NdID0gIkVuYWJsZXMgYW4gZXh0ZXJuYWwgdG9vbGNoYWluICh3aGVyZSBwcm92aWRlZCBieSBhbiBhZGRpdGlvbmFsIGxheWVyKSBpZiBzZXQgdG8gYSB2YWx1ZSBvdGhlciB0aGFuICdkZWZhdWx0Jy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHRvb2xjaGFpbiBzZWxlY3Rvci4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRDTU9ERTwvZmlsZW5hbWU+IGNvbnRyb2xzIHRoZSBjaGFyYWN0ZXJpc3RpY3MKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGdlbmVyYXRlZCBwYWNrYWdlcyBhbmQgaW1hZ2VzIGJ5IHRlbGxpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2hpY2ggdG9vbGNoYWluIHByb2ZpbGUgdG8gdXNlLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBidWlsZHMgaXRzIG93bgorICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbCB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSdzIGRlZmF1bHQgdmFsdWUgaXMgImRlZmF1bHQiLCB3aGljaCB1c2VzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgaW50ZXJuYWwgdG9vbGNoYWluLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5UQ01PREU8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gYSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGhhbiAiZGVmYXVsdCIsIHRoZW4gaXQgaXMgeW91ciByZXNwb25zaWJpbGl0eQorICAgICAgICAgICAgICAgICAgICAgICAgdG8gZW5zdXJlIHRoYXQgdGhlIHRvb2xjaGFpbiBpcyBjb21wYXRpYmxlIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nIG9sZGVyIG9yIG5ld2VyIHZlcnNpb25zIG9mIHRoZXNlIGNvbXBvbmVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pZ2h0IGNhdXNlIGJ1aWxkIHByb2JsZW1zLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1JFTEVBU0VfTk9URVM7Jz5SZWxlYXNlIE5vdGVzPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgc3BlY2lmaWMgY29tcG9uZW50cyB3aXRoIHdoaWNoIHRoZSB0b29sY2hhaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgY29tcGF0aWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlRDTU9ERTwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHNpbWlsYXIgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRDTElCQyc+PGZpbGVuYW1lPlRDTElCQzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggY29udHJvbHMgdGhlIHZhcmlhbnQgb2YgdGhlIEdOVSBzdGFuZGFyZCBDIGxpYnJhcnkKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5saWJjPC9maWxlbmFtZT4pIHVzZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzOgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+dWNsaWJjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdpdGggYWRkaXRpb25hbCBsYXllcnMsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBhIHByZS1jb21waWxlZAorICAgICAgICAgICAgICAgICAgICBleHRlcm5hbCB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgIE9uZSBleGFtcGxlIGlzIHRoZSBTb3VyY2VyeSBHKysgVG9vbGNoYWluLgorICAgICAgICAgICAgICAgICAgICBUaGUgc3VwcG9ydCBmb3IgdGhpcyB0b29sY2hhaW4gcmVzaWRlcyBpbiB0aGUgc2VwYXJhdGUKKyAgICAgICAgICAgICAgICAgICAgPHRyYWRlbWFyayBjbGFzcz0ncmVnaXN0ZXJlZCc+TWVudG9yIEdyYXBoaWNzPC90cmFkZW1hcms+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXNvdXJjZXJ5PC9maWxlbmFtZT4gbGF5ZXIgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdGh1Yi5jb20vTWVudG9yRW1iZWRkZWQvbWV0YS1zb3VyY2VyeS8nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbGF5ZXIncyA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBjb250YWlucworICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZSBTb3VyY2VyeSBHKysgVG9vbGNoYWluIGFzCisgICAgICAgICAgICAgICAgICAgIGFuIGV4dGVybmFsIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgSW4gc3VtbWFyeSwgeW91IG11c3QgYmUgc3VyZSB0byBhZGQgdGhlIGxheWVyIHRvIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIGZyb250IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGxheWVyIGFuZCB0aGVuIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkVYVEVSTkFMX1RPT0xDSEFJTjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBsb2NhdGlvbiBpbiB3aGljaCB5b3UgaW5zdGFsbGVkIHRoZSB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmdW5kYW1lbnRhbHMgdXNlZCBmb3IgdGhpcyBleGFtcGxlIGFwcGx5IHRvIGFueQorICAgICAgICAgICAgICAgICAgICBleHRlcm5hbCB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIDxmaWxlbmFtZT5tZXRhLXNvdXJjZXJ5PC9maWxlbmFtZT4gYXMgYQorICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSBmb3IgYWRkaW5nIHN1cHBvcnQgZm9yIG90aGVyIGV4dGVybmFsIHRvb2xjaGFpbnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9FWFBPUlRfRElSJz48Z2xvc3N0ZXJtPlRFU1RfRVhQT1JUX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEVTVF9FWFBPUlRfRElSW2RvY10gPSAiVGhlIGxvY2F0aW9uIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdG8gZXhwb3J0IHRlc3RzIHdoZW4gdGhlIFRFU1RfRVhQT1JUX09OTFkgdmFyaWFibGUgaXMgc2V0IHRvICIxIi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0byBleHBvcnQKKyAgICAgICAgICAgICAgICAgICAgdGVzdHMgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRFU1RfRVhQT1JUX09OTFknPjxmaWxlbmFtZT5URVNUX0VYUE9SVF9PTkxZPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIHNldCB0byAiMSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+VEVTVF9FWFBPUlRfRElSPC9maWxlbmFtZT4gdmFyaWFibGUgZGVmYXVsdHMKKyAgICAgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPiIke1RNUERJUn0vdGVzdGltYWdlLyR7UE59IjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfRVhQT1JUX09OTFknPjxnbG9zc3Rlcm0+VEVTVF9FWFBPUlRfT05MWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEVTVF9FWFBPUlRfT05MWVtkb2NdID0gIlNwZWNpZmllcyB0byBleHBvcnQgdGhlIHRlc3RzIG9ubHkuIFNldCB0aGlzIHZhcmlhYmxlIHRvICIxIiBpZiB5b3UgZG8gbm90IHdhbnQgdG8gcnVuIHRoZSB0ZXN0cyBidXQgeW91IHdhbnQgdGhlbSB0byBiZSBleHBvcnRlZCBpbiBhIG1hbm5lciB0aGF0IHlvdSB0byBydW4gdGhlbSBvdXRzaWRlIG9mIHRoZSBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRvIGV4cG9ydCB0aGUgdGVzdHMgb25seS4KKyAgICAgICAgICAgICAgICAgICAgU2V0IHRoaXMgdmFyaWFibGUgdG8gIjEiIGlmIHlvdSBkbyBub3Qgd2FudCB0byBydW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHRlc3RzIGJ1dCB5b3Ugd2FudCB0aGVtIHRvIGJlIGV4cG9ydGVkIGluIGEgbWFubmVyIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgeW91IHRvIHJ1biB0aGVtIG91dHNpZGUgb2YgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1URVNUX0lNQUdFJz48Z2xvc3N0ZXJtPlRFU1RfSU1BR0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRFU1RfSU1BR0VbZG9jXSA9ICJFbmFibGVzIHRlc3QgYm9vdGluZyBvZiB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2VzIHVuZGVyIHRoZSBRRU1VIGVtdWxhdG9yIGFmdGVyIGFueSByb290IGZpbGVzeXN0ZW1zIGFyZSBjcmVhdGVkIGFuZCBydW5zIHRlc3RzIGFnYWluc3QgdGhvc2UgaW1hZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpY2FsbHkgcnVucyB0aGUgc2VyaWVzIG9mIGF1dG9tYXRlZCB0ZXN0cyBmb3IKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VzIHdoZW4gYW4gaW1hZ2UgaXMgc3VjY2Vzc2Z1bGx5IGJ1aWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGVzZSB0ZXN0cyBhcmUgd3JpdHRlbiBpbiBQeXRob24gbWFraW5nIHVzZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVuaXR0ZXN0PC9maWxlbmFtZT4gbW9kdWxlLCBhbmQgdGhlIG1ham9yaXR5IG9mCisgICAgICAgICAgICAgICAgICAgIHRoZW0gcnVuIGNvbW1hbmRzIG9uIHRoZSB0YXJnZXQgc3lzdGVtIG92ZXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNzaDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIHRvICIxIiBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB0byBoYXZlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgcnVuCisgICAgICAgICAgICAgICAgICAgIHRoZXNlIHRlc3RzIGFmdGVyIGFuIGltYWdlIHN1Y2Nlc3NmdWxseSBidWlsZHM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9JTUFHRSA9ICIxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGVuYWJsaW5nLCBydW5uaW5nLCBhbmQgd3JpdGluZworICAgICAgICAgICAgICAgICAgICB0aGVzZSB0ZXN0cywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGVyZm9ybWluZy1hdXRvbWF0ZWQtcnVudGltZS10ZXN0aW5nJz5QZXJmb3JtaW5nIEF1dG9tYXRlZCBSdW50aW1lIFRlc3Rpbmc8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdGVzdGltYWdlJz48ZmlsZW5hbWU+dGVzdGltYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9MT0dfRElSJz48Z2xvc3N0ZXJtPlRFU1RfTE9HX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEVTVF9MT0dfRElSW2RvY10gPSAiSG9sZHMgdGhlIFNTSCBsb2cgYW5kIHRoZSBib290IGxvZyBmb3IgUUVNVSBtYWNoaW5lcy4gVGhlIDxmaWxlbmFtZT5URVNUX0xPR19ESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBkZWZhdWx0cyB0byAiJHtXT1JLRElSfS90ZXN0aW1hZ2UiLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEhvbGRzIHRoZSBTU0ggbG9nIGFuZCB0aGUgYm9vdCBsb2cgZm9yIFFFTVUgbWFjaGluZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+VEVTVF9MT0dfRElSPC9maWxlbmFtZT4gdmFyaWFibGUgZGVmYXVsdHMKKyAgICAgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPiIke1dPUktESVJ9L3Rlc3RpbWFnZSI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBBY3R1YWwgdGVzdCByZXN1bHRzIHJlc2lkZSBpbiB0aGUgdGFzayBsb2cKKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+bG9nLmRvX3Rlc3RpbWFnZTwvZmlsZW5hbWU+KSwgd2hpY2ggaXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+JHtXT1JLRElSfS90ZW1wLzwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfUE9XRVJDT05UUk9MX0NNRCc+PGdsb3NzdGVybT5URVNUX1BPV0VSQ09OVFJPTF9DTUQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRFU1RfUE9XRVJDT05UUk9MX0NNRFtkb2NdID0gIkZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIHRoZSBjb21tYW5kIHRvIHVzZSB0byBjb250cm9sIHRoZSBwb3dlciBvZiB0aGUgdGFyZ2V0IG1hY2hpbmUgdW5kZXIgdGVzdCIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIHRoZSBjb21tYW5kIHRvCisgICAgICAgICAgICAgICAgICAgIHVzZSB0byBjb250cm9sIHRoZSBwb3dlciBvZiB0aGUgdGFyZ2V0IG1hY2hpbmUgdW5kZXIgdGVzdC4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB0aGlzIGNvbW1hbmQgd291bGQgcG9pbnQgdG8gYSBzY3JpcHQgdGhhdAorICAgICAgICAgICAgICAgICAgICBwZXJmb3JtcyB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uIChlLmcuIGludGVyYWN0aW5nCisgICAgICAgICAgICAgICAgICAgIHdpdGggYSB3ZWItZW5hYmxlZCBwb3dlciBzdHJpcCkuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgY29tbWFuZCBzaG91bGQgZXhwZWN0IHRvIHJlY2VpdmUgYXMgdGhlIGxhc3QKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQgIm9mZiIsICJvbiIgb3IgImN5Y2xlIiBzcGVjaWZ5aW5nIHRvIHBvd2VyIG9mZiwKKyAgICAgICAgICAgICAgICAgICAgb24sIG9yIGN5Y2xlIChwb3dlciBvZmYgYW5kIHRoZW4gcG93ZXIgb24pIHRoZSBkZXZpY2UsCisgICAgICAgICAgICAgICAgICAgIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1URVNUX1BPV0VSQ09OVFJPTF9FWFRSQV9BUkdTJz48Z2xvc3N0ZXJtPlRFU1RfUE9XRVJDT05UUk9MX0VYVFJBX0FSR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRFU1RfUE9XRVJDT05UUk9MX0VYVFJBX0FSR1NbZG9jXSA9ICJGb3IgYXV0b21hdGVkIGhhcmR3YXJlIHRlc3RpbmcsIHNwZWNpZmllcyBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGNvbW1hbmQgc3BlY2lmaWVkIGluIFRFU1RfUE9XRVJDT05UUk9MX0NNRCIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgY29tbWFuZCBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRFU1RfUE9XRVJDT05UUk9MX0NNRCc+PGZpbGVuYW1lPlRFU1RfUE9XRVJDT05UUk9MX0NNRDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyA8ZmlsZW5hbWU+VEVTVF9QT1dFUkNPTlRST0xfRVhUUkFfQVJHUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIG9wdGlvbmFsLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBpdCBpZiB5b3Ugd2lzaCwgZm9yIGV4YW1wbGUsIHRvIHNlcGFyYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljIGFuZCBub24tbWFjaGluZS1zcGVjaWZpYyBwYXJ0cyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfUUVNVUJPT1RfVElNRU9VVCc+PGdsb3NzdGVybT5URVNUX1FFTVVCT09UX1RJTUVPVVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRFU1RfUUVNVUJPT1RfVElNRU9VVFtkb2NdID0gIlRoZSB0aW1lIGluIHNlY29uZHMgYWxsb3dlZCBmb3IgYW4gaW1hZ2UgdG8gYm9vdCBiZWZvcmUgYXV0b21hdGVkIHJ1bnRpbWUgdGVzdHMgYmVnaW4gdG8gcnVuIGFnYWluc3QgYW4gaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRpbWUgaW4gc2Vjb25kcyBhbGxvd2VkIGZvciBhbiBpbWFnZSB0byBib290IGJlZm9yZQorICAgICAgICAgICAgICAgICAgICBhdXRvbWF0ZWQgcnVudGltZSB0ZXN0cyBiZWdpbiB0byBydW4gYWdhaW5zdCBhbgorICAgICAgICAgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdGltZW91dCBwZXJpb2QgdG8gYWxsb3cgdGhlIGJvb3QgcHJvY2VzcyB0bworICAgICAgICAgICAgICAgICAgICByZWFjaCB0aGUgbG9naW4gcHJvbXB0IGlzIDUwMCBzZWNvbmRzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgYSBkaWZmZXJlbnQgdmFsdWUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGVzdGluZyBpbWFnZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BlcmZvcm1pbmctYXV0b21hdGVkLXJ1bnRpbWUtdGVzdGluZyc+UGVyZm9ybWluZyBBdXRvbWF0ZWQgUnVudGltZSBUZXN0aW5nPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfU0VSSUFMQ09OVFJPTF9DTUQnPjxnbG9zc3Rlcm0+VEVTVF9TRVJJQUxDT05UUk9MX0NNRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEVTVF9TRVJJQUxDT05UUk9MX0NNRFtkb2NdID0gIkZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIHRoZSBjb21tYW5kIHRvIHVzZSB0byBjb25uZWN0IHRvIHRoZSBzZXJpYWwgY29uc29sZSBvZiB0aGUgdGFyZ2V0IG1hY2hpbmUgdW5kZXIgdGVzdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGb3IgYXV0b21hdGVkIGhhcmR3YXJlIHRlc3RpbmcsIHNwZWNpZmllcyB0aGUgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB0byB1c2UgdG8gY29ubmVjdCB0byB0aGUgc2VyaWFsIGNvbnNvbGUgb2YgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lIHVuZGVyIHRlc3QuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBzaW1wbHkgbmVlZHMgdG8gY29ubmVjdCB0byB0aGUgc2VyaWFsIGNvbnNvbGUKKyAgICAgICAgICAgICAgICAgICAgYW5kIGZvcndhcmQgdGhhdCBjb25uZWN0aW9uIHRvIHN0YW5kYXJkIGlucHV0IGFuZCBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgYXMgYW55IG5vcm1hbCB0ZXJtaW5hbCBwcm9ncmFtIGRvZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0byB1c2UgdGhlIFBpY29jb20gdGVybWluYWwgcHJvZ3JhbSBvbgorICAgICAgICAgICAgICAgICAgICBzZXJpYWwgZGV2aWNlIDxmaWxlbmFtZT4vZGV2L3R0eVVTQjA8L2ZpbGVuYW1lPiBhdAorICAgICAgICAgICAgICAgICAgICAxMTUyMDBicHMsIHlvdSB3b3VsZCBzZXQgdGhlIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9TRVJJQUxDT05UUk9MX0NNRCA9ICJwaWNvY29tIC9kZXYvdHR5VVNCMCAtYiAxMTUyMDAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1URVNUX1NFUklBTENPTlRST0xfRVhUUkFfQVJHUyc+PGdsb3NzdGVybT5URVNUX1NFUklBTENPTlRST0xfRVhUUkFfQVJHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEVTVF9TRVJJQUxDT05UUk9MX0VYVFJBX0FSR1NbZG9jXSA9ICJGb3IgYXV0b21hdGVkIGhhcmR3YXJlIHRlc3RpbmcsIHNwZWNpZmllcyBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGNvbW1hbmQgc3BlY2lmaWVkIGluIFRFU1RfU0VSSUFMQ09OVFJPTF9DTUQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGF1dG9tYXRlZCBoYXJkd2FyZSB0ZXN0aW5nLCBzcGVjaWZpZXMgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSBjb21tYW5kIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEVTVF9TRVJJQUxDT05UUk9MX0NNRCc+PGZpbGVuYW1lPlRFU1RfU0VSSUFMQ09OVFJPTF9DTUQ8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgPGZpbGVuYW1lPlRFU1RfU0VSSUFMQ09OVFJPTF9FWFRSQV9BUkdTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgb3B0aW9uYWwuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGl0IGlmIHlvdSB3aXNoLCBmb3IgZXhhbXBsZSwgdG8gc2VwYXJhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtc3BlY2lmaWMgYW5kIG5vbi1tYWNoaW5lLXNwZWNpZmljIHBhcnRzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfU0VSVkVSX0lQJz48Z2xvc3N0ZXJtPlRFU1RfU0VSVkVSX0lQPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBURVNUX1NFUlZFUl9JUFtkb2NdID0gIlRoZSBJUCBhZGRyZXNzIG9mIHRoZSBidWlsZCBtYWNoaW5lIChob3N0IG1hY2hpbmUpLiBUaGlzIElQIGFkZHJlc3MgaXMgdXN1YWxseSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBJUCBhZGRyZXNzIG9mIHRoZSBidWlsZCBtYWNoaW5lIChob3N0IG1hY2hpbmUpLgorICAgICAgICAgICAgICAgICAgICBUaGlzIElQIGFkZHJlc3MgaXMgdXN1YWxseSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiBkZXRlY3Rpb24gZmFpbHMsIHRoaXMgdmFyaWFibGUgbmVlZHMgdG8gYmUgc2V0CisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBidWlsZCBtYWNoaW5lIChpLmUuIHdoZXJlCisgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBpcyB0YWtpbmcgcGxhY2UpLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+VEVTVF9TRVJWRVJfSVA8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgaXMgb25seSB1c2VkIGZvciBhIHNtYWxsIG51bWJlciBvZiB0ZXN0cyBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgInNtYXJ0IiB0ZXN0IHN1aXRlLCB3aGljaCBuZWVkcyB0byBkb3dubG9hZAorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgZnJvbSA8ZmlsZW5hbWU+REVQTE9ZX0RJUi9ycG08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfVEFSR0VUJz48Z2xvc3N0ZXJtPlRFU1RfVEFSR0VUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBURVNUX1RBUkdFVFtkb2NdID0gIkZvciBhdXRvbWF0ZWQgcnVudGltZSB0ZXN0aW5nLCBzcGVjaWZpZXMgdGhlIG1ldGhvZCBvZiBkZXBsb3lpbmcgdGhlIGltYWdlIGFuZCBydW5uaW5nIHRlc3RzIG9uIHRoZSB0YXJnZXQgbWFjaGluZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHRhcmdldCBjb250cm9sbGVyIHRvIHVzZSB3aGVuIHJ1bm5pbmcgdGVzdHMKKyAgICAgICAgICAgICAgICAgICAgYWdhaW5zdCBhIHRlc3QgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGNvbnRyb2xsZXIgdG8gdXNlIGlzICJxZW11IjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX1RBUkdFVCA9ICJxZW11IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgdGFyZ2V0IGNvbnRyb2xsZXIgaXMgYSBjbGFzcyB0aGF0IGRlZmluZXMgaG93IGFuCisgICAgICAgICAgICAgICAgICAgIGltYWdlIGdldHMgZGVwbG95ZWQgb24gYSB0YXJnZXQgYW5kIGhvdyBhIHRhcmdldCBpcyBzdGFydGVkLgorICAgICAgICAgICAgICAgICAgICBBIGxheWVyIGNhbiBleHRlbmQgdGhlIGNvbnRyb2xsZXJzIGJ5IGFkZGluZyBhIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgbGF5ZXIncyA8ZmlsZW5hbWU+L2xpYi9vZXFhL2NvbnRyb2xsZXJzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCBieSBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QmFzZVRhcmdldDwvZmlsZW5hbWU+IGNsYXNzLCB3aGljaCBpcyBhbiBhYnN0cmFjdAorICAgICAgICAgICAgICAgICAgICBjbGFzcyB0aGF0IGNhbm5vdCBiZSB1c2VkIGFzIGEgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRFU1RfVEFSR0VUPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyB3aXRoCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5URVNUX1RBUkdFVDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4icWVtdSIgYW5kICJRZW11VGFyZ2V0Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb3RzIGEgUUVNVSBpbWFnZSBhbmQgcnVucyB0aGUgdGVzdHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNxZW11LWltYWdlLWVuYWJsaW5nLXRlc3RzJz5FbmFibGluZyBSdW50aW1lIFRlc3RzIG9uIFFFTVU8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4ic2ltcGxlcmVtb3RlIiBhbmQgIlNpbXBsZVJlbW90ZVRhcmdldCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW5zIHRoZSB0ZXN0cyBvbiB0YXJnZXQgaGFyZHdhcmUgdGhhdCBpcyBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAgYW5kIHJ1bm5pbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGhhcmR3YXJlIGNhbiBiZSBvbiB0aGUgbmV0d29yayBvciBpdCBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGRldmljZSBydW5uaW5nIGFuIGltYWdlIG9uIFFFTVUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgYWxzbyBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEVTVF9UQVJHRVRfSVAnPjxmaWxlbmFtZT5URVNUX1RBUkdFVF9JUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4geW91IHVzZSAic2ltcGxlcmVtb3RlIiBvciAiU2ltcGxlUmVtb3RlVGFyZ2V0Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmd1bWVudCBpcyBkZWZpbmVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2xpYi9vZXFhL3RhcmdldGNvbnRyb2wucHk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNtYWxsIGNhcHMgbmFtZXMgYXJlIGtlcHQgZm9yIGNvbXBhdGliaWxpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJHdW1taWJvb3RUYXJnZXQiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljYWxseSBkZXBsb3lzIGFuZCBydW5zIHRlc3RzIG9uIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJLWVuYWJsZWQgbWFjaGluZSB0aGF0IGhhcyBhIG1hc3RlciBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmd1bWVudCBpcyBkZWZpbmVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL21hc3RlcmltYWdlLnB5PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHJ1bm5pbmcgdGVzdHMgb24gaGFyZHdhcmUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2hhcmR3YXJlLWltYWdlLWVuYWJsaW5nLXRlc3RzJz5FbmFibGluZyBSdW50aW1lIFRlc3RzIG9uIEhhcmR3YXJlPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfVEFSR0VUX0lQJz48Z2xvc3N0ZXJtPlRFU1RfVEFSR0VUX0lQPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBURVNUX1RBUkdFVF9JUFtkb2NdID0gIlRoZSBJUCBhZGRyZXNzIG9mIHlvdXIgaGFyZHdhcmUgdW5kZXIgdGVzdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgSVAgYWRkcmVzcyBvZiB5b3VyIGhhcmR3YXJlIHVuZGVyIHRlc3QuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+VEVTVF9UQVJHRVRfSVA8L2ZpbGVuYW1lPiB2YXJpYWJsZSBoYXMgbm8KKyAgICAgICAgICAgICAgICAgICAgZWZmZWN0IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRFU1RfVEFSR0VUJz48ZmlsZW5hbWU+VEVTVF9UQVJHRVQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvICJxZW11Ii4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3Ugc3BlY2lmeSB0aGUgSVAgYWRkcmVzcywgeW91IGNhbiBhbHNvIGluY2x1ZGUgYQorICAgICAgICAgICAgICAgICAgICBwb3J0LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9UQVJHRVRfSVAgPSAiMTkyLjE2OC4xLjQ6MjIwMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5aW5nIGEgcG9ydCBpcyB1c2VmdWwgd2hlbiBTU0ggaXMgc3RhcnRlZCBvbiBhCisgICAgICAgICAgICAgICAgICAgIG5vbi1zdGFuZGFyZCBwb3J0IG9yIGluIGNhc2VzIHdoZW4geW91ciBoYXJkd2FyZSB1bmRlciB0ZXN0CisgICAgICAgICAgICAgICAgICAgIGlzIGJlaGluZCBhIGZpcmV3YWxsIG9yIG5ldHdvcmsgdGhhdCBpcyBub3QgZGlyZWN0bHkKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzaWJsZSBmcm9tIHlvdXIgaG9zdCBhbmQgeW91IG5lZWQgdG8gZG8gcG9ydCBhZGRyZXNzCisgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfU1VJVEVTJz48Z2xvc3N0ZXJtPlRFU1RfU1VJVEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBURVNUX1NVSVRFU1tkb2NdID0gIkFuIG9yZGVyZWQgbGlzdCBvZiB0ZXN0cyAobW9kdWxlcykgdG8gcnVuIGFnYWluc3QgYW4gaW1hZ2Ugd2hlbiBwZXJmb3JtaW5nIGF1dG9tYXRlZCBydW50aW1lIHRlc3RpbmcuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQW4gb3JkZXJlZCBsaXN0IG9mIHRlc3RzIChtb2R1bGVzKSB0byBydW4gYWdhaW5zdAorICAgICAgICAgICAgICAgICAgICBhbiBpbWFnZSB3aGVuIHBlcmZvcm1pbmcgYXV0b21hdGVkIHJ1bnRpbWUgdGVzdGluZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvdmlkZXMgYSBjb3JlIHNldCBvZiB0ZXN0cworICAgICAgICAgICAgICAgICAgICB0aGF0IGNhbiBiZSB1c2VkIGFnYWluc3QgaW1hZ2VzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRseSwgdGhlcmUgaXMgb25seSBzdXBwb3J0IGZvciBydW5uaW5nIHRoZXNlIHRlc3RzCisgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBRRU1VLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIFRlc3RzIGluY2x1ZGUgPGZpbGVuYW1lPnBpbmc8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNzaDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZGY8L2ZpbGVuYW1lPiBhbW9uZworICAgICAgICAgICAgICAgICAgICBvdGhlcnMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWRkIHlvdXIgb3duIHRlc3RzIHRvIHRoZSBsaXN0IG9mIHRlc3RzIGJ5CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZGluZyA8ZmlsZW5hbWU+VEVTVF9TVUlURVM8L2ZpbGVuYW1lPiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFU1RfU1VJVEVTX2FwcGVuZCA9ICIgPHJlcGxhY2VhYmxlPm15dGVzdDwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gcHJvdmlkZSB0aGUgImF1dG8iIG9wdGlvbiB0bworICAgICAgICAgICAgICAgICAgICBoYXZlIGFsbCBhcHBsaWNhYmxlIHRlc3RzIHJ1biBhZ2FpbnN0IHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX1NVSVRFU19hcHBlbmQgPSAiIGF1dG8iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhpcyBvcHRpb24gY2F1c2VzIHRoZSBidWlsZCBzeXN0ZW0gdG8gYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICBydW4gdGVzdHMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRlc3RzIHRoYXQgYXJlIG5vdCBhcHBsaWNhYmxlIGFyZSBza2lwcGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgb3JkZXIgaW4gd2hpY2ggdGVzdHMgYXJlIHJ1biBpcyBpbXBvcnRhbnQuCisgICAgICAgICAgICAgICAgICAgIFRlc3RzIHRoYXQgZGVwZW5kIG9uIGFub3RoZXIgdGVzdCBtdXN0IGFwcGVhciBsYXRlciBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgbGlzdCB0aGFuIHRoZSB0ZXN0IG9uIHdoaWNoIHRoZXkgZGVwZW5kLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFwcGVuZCB0aGUgbGlzdCBvZiB0ZXN0cyB3aXRoIHR3bworICAgICAgICAgICAgICAgICAgICB0ZXN0cyAoPGZpbGVuYW1lPnRlc3RfQTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGVzdF9CPC9maWxlbmFtZT4pIHdoZXJlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50ZXN0X0I8L2ZpbGVuYW1lPiBpcyBkZXBlbmRlbnQgb24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRlc3RfQTwvZmlsZW5hbWU+LCB0aGVuIHlvdSBtdXN0IG9yZGVyIHRoZSB0ZXN0cworICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFU1RfU1VJVEVTID0gIiB0ZXN0X0EgdGVzdF9CIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRlc3RpbmcgaW1hZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwZXJmb3JtaW5nLWF1dG9tYXRlZC1ydW50aW1lLXRlc3RpbmcnPlBlcmZvcm1pbmcgQXV0b21hdGVkIFJ1bnRpbWUgVGVzdGluZzwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1USElTRElSJz48Z2xvc3N0ZXJtPlRISVNESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRISVNESVJbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBmaWxlIEJpdEJha2UgaXMgY3VycmVudGx5IHBhcnNpbmcgaXMgbG9jYXRlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBmaWxlIEJpdEJha2UgaXMgY3VycmVudGx5CisgICAgICAgICAgICAgICAgICAgIHBhcnNpbmcgaXMgbG9jYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgRG8gbm90IG1hbnVhbGx5IHNldCB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRJTUUnPjxnbG9zc3Rlcm0+VElNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVElNRVtkb2NdID0gIlRoZSB0aW1lIHRoZSBidWlsZCB3YXMgc3RhcnRlZCB1c2luZyBITVMgZm9ybWF0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSB0aW1lIHRoZSBidWlsZCB3YXMgc3RhcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgVGltZXMgYXBwZWFyIHVzaW5nIHRoZSBob3VyLCBtaW51dGUsIGFuZCBzZWNvbmQgKEhNUykKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0IChlLmcuICIxNDAxNTkiIGZvciBvbmUgbWludXRlIGFuZCBmaWZ0eS1uaW5lCisgICAgICAgICAgICAgICAgICAgIHNlY29uZHMgcGFzdCAxNDAwIGhvdXJzKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UTVBESVInPjxnbG9zc3Rlcm0+VE1QRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUTVBESVJbZG9jXSA9ICJUaGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gaXQgZG9lcyBpdHMgd29yayBidWlsZGluZyBpbWFnZXMuIEJ5IGRlZmF1bHQsIHRoZSBUTVBESVIgdmFyaWFibGUgaXMgbmFtZWQgdG1wIHdpdGhpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdGhlIGJhc2UgZGlyZWN0b3J5IHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHVzZXMgZm9yIGFsbCBidWlsZCBvdXRwdXQgYW5kIGludGVybWVkaWF0ZQorICAgICAgICAgICAgICAgICAgICBmaWxlcyAob3RoZXIgdGhhbiB0aGUgc2hhcmVkIHN0YXRlIGNhY2hlKS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBwb2ludHMKKyAgICAgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gZXN0YWJsaXNoIHRoaXMgZGlyZWN0b3J5IGluIGEgbG9jYXRpb24gb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgdGhhbiB0aGUgZGVmYXVsdCwgeW91IGNhbiB1bmNvbW1lbnQgYW5kIGVkaXQgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgI1RNUERJUiA9ICIke1RPUERJUn0vdG1wIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgdXNlIGZvciB0aGlzIHNjZW5hcmlvIGlzIHRvIHNldAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gdG8gYSBsb2NhbCBkaXNrLCB3aGljaCBkb2VzCisgICAgICAgICAgICAgICAgICAgIG5vdCB1c2UgTkZTLCB3aGlsZSBoYXZpbmcgdGhlIEJ1aWxkIERpcmVjdG9yeSB1c2UgTkZTLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZXN5c3RlbSB1c2VkIGJ5IDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiBtdXN0CisgICAgICAgICAgICAgICAgICAgIGhhdmUgc3RhbmRhcmQgZmlsZXN5c3RlbSBzZW1hbnRpY3MgKGkuZS4gbWl4ZWQtY2FzZSBmaWxlcworICAgICAgICAgICAgICAgICAgICBhcmUgdW5pcXVlLCBQT1NJWCBmaWxlIGxvY2tpbmcsIGFuZCBwZXJzaXN0ZW50IGlub2RlcykuCisgICAgICAgICAgICAgICAgICAgIER1ZSB0byB2YXJpb3VzIGlzc3VlcyB3aXRoIE5GUyBhbmQgYnVncyBpbiBzb21lCisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucywgTkZTIGRvZXMgbm90IG1lZXQgdGhpcyBtaW5pbXVtCisgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVtZW50LgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiBjYW5ub3QgYmUgb24KKyAgICAgICAgICAgICAgICAgICAgTkZTLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRPT0xDSEFJTl9IT1NUX1RBU0snPjxnbG9zc3Rlcm0+VE9PTENIQUlOX0hPU1RfVEFTSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVE9PTENIQUlOX0hPU1RfVEFTS1tkb2NdID0gIlRoaXMgdmFyaWFibGUgbGlzdHMgcGFja2FnZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB3aGVuIGJ1aWxkaW5nIGFuIFNESywgd2hpY2ggY29udGFpbnMgYSBjcm9zcy1kZXZlbG9wbWVudCBlbnZpcm9ubWVudC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGxpc3RzIHBhY2thZ2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHVzZXMgd2hlbiBidWlsZGluZyBhbiBTREssIHdoaWNoIGNvbnRhaW5zIGEKKyAgICAgICAgICAgICAgICAgICAgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBwYWNrYWdlcyBzcGVjaWZpZWQgYnkgdGhpcyB2YXJpYWJsZSBhcmUgcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluIHNldCB0aGF0IHJ1bnMgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtNQUNISU5FJz48ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIGVhY2ggcGFja2FnZSBzaG91bGQgdXN1YWxseSBoYXZlIHRoZSBwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgIm5hdGl2ZXNkay0iLgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGFuIFNESyB1c2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSAtYyBwb3B1bGF0ZV9zZGsgJmx0O2ltYWdlbmFtZSZndDs8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgYSBkZWZhdWx0IGxpc3Qgb2YgcGFja2FnZXMgaXMgc2V0IGluIHRoaXMgdmFyaWFibGUsIGJ1dAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGFkZCBhZGRpdGlvbmFsIHBhY2thZ2VzIHRvIHRoZSBsaXN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBvbiBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW5zCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50IGVudmlyb25tZW50LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gc2V0dGluZyB1cCBhIGNyb3NzLWRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyNpbnN0YWxsaW5nLXRoZS1hZHQnPkluc3RhbGxpbmcgdGhlIEFEVCBhbmQgVG9vbGNoYWluczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRPT0xDSEFJTl9PVVRQVVROQU1FJz48Z2xvc3N0ZXJtPlRPT0xDSEFJTl9PVVRQVVROQU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUT09MQ0hBSU5fT1VUUFVUTkFNRVtkb2NdID0gIkRlZmluZXMgdGhlIG5hbWUgdXNlZCBmb3IgdGhlIHRvb2xjaGFpbiBvdXRwdXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBkZWZpbmVzIHRoZSBuYW1lIHVzZWQgZm9yIHRoZSB0b29sY2hhaW4KKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcG9wdWxhdGUtc2RrLSonPjxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBzZXRzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VE9PTENIQUlOX09VVFBVVE5BTUU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcworICAgICAgICAgICAgICAgICAgICBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRPT0xDSEFJTl9PVVRQVVROQU1FID89ICIke1NES19OQU1FfS10b29sY2hhaW4tJHtTREtfVkVSU0lPTn0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX05BTUUnPjxmaWxlbmFtZT5TREtfTkFNRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES19WRVJTSU9OJz48ZmlsZW5hbWU+U0RLX1ZFUlNJT048L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRPT0xDSEFJTl9UQVJHRVRfVEFTSyc+PGdsb3NzdGVybT5UT09MQ0hBSU5fVEFSR0VUX1RBU0s8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRPT0xDSEFJTl9UQVJHRVRfVEFTS1tkb2NdID0gIlRoaXMgdmFyaWFibGUgbGlzdHMgcGFja2FnZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB3aGVuIGl0IGNyZWF0ZXMgdGhlIHRhcmdldCBwYXJ0IG9mIGFuIFNESywgd2hpY2ggaW5jbHVkZXMgbGlicmFyaWVzIGFuZCBoZWFkZXJzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgbGlzdHMgcGFja2FnZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgdXNlcyB3aGVuIGl0IGNyZWF0ZXMgdGhlIHRhcmdldCBwYXJ0IG9mIGFuIFNESworICAgICAgICAgICAgICAgICAgICAoaS5lLiB0aGUgcGFydCBidWlsdCBmb3IgdGhlIHRhcmdldCBoYXJkd2FyZSksIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIGxpYnJhcmllcyBhbmQgaGVhZGVycy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGJhY2tncm91bmQgaW5mb3JtYXRpb24gb24gY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucworICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluLWdlbmVyYXRpb24nPkNyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbiBHZW5lcmF0aW9uPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHNldHRpbmcgdXAgYSBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjaW5zdGFsbGluZy10aGUtYWR0Jz5JbnN0YWxsaW5nIHRoZSBBRFQgYW5kIFRvb2xjaGFpbnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UT1BESVInPjxnbG9zc3Rlcm0+VE9QRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUT1BESVJbZG9jXSA9ICJUaGUgQnVpbGQgRGlyZWN0b3J5LiBCaXRCYWtlIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIHZhcmlhYmxlLiBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZSBCdWlsZCBEaXJlY3Rvcnkgd2hlbiBidWlsZGluZyBpbWFnZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRvcC1sZXZlbAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIHZhcmlhYmxlIHdoZW4geW91CisgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemUgeW91ciBidWlsZCBlbnZpcm9ubWVudCB1c2luZyBlaXRoZXIKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UUkFOU0xBVEVEX1RBUkdFVF9BUkNIJz48Z2xvc3N0ZXJtPlRSQU5TTEFURURfVEFSR0VUX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRSQU5TTEFURURfVEFSR0VUX0FSQ0hbZG9jXSA9ICJBIHNhbml0aXplZCB2ZXJzaW9uIG9mIFRBUkdFVF9BUkNILiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgd2hlcmUgdGhlIGFyY2hpdGVjdHVyZSBpcyBuZWVkZWQgaW4gYSB2YWx1ZSB3aGVyZSB1bmRlcnNjb3JlcyBhcmUgbm90IGFsbG93ZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBzYW5pdGl6ZWQgdmVyc2lvbiBvZgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0FSQ0gnPjxmaWxlbmFtZT5UQVJHRVRfQVJDSDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHdoZXJlIHRoZSBhcmNoaXRlY3R1cmUgaXMgbmVlZGVkIGluCisgICAgICAgICAgICAgICAgICAgIGEgdmFsdWUgd2hlcmUgdW5kZXJzY29yZXMgYXJlIG5vdCBhbGxvd2VkLCBmb3IgZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gcGFja2FnZSBmaWxlbmFtZXMuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgZGFzaCBjaGFyYWN0ZXJzIHJlcGxhY2UgYW55IHVuZGVyc2NvcmUKKyAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycyB1c2VkIGluIFRBUkdFVF9BUkNILgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgZWRpdCB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRVTkVfQVJDSCc+PGdsb3NzdGVybT5UVU5FX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRVTkVfQVJDSFtkb2NdID0gIlRoZSBHTlUgY2Fub25pY2FsIGFyY2hpdGVjdHVyZSBmb3IgYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgKGkuZS4gYXJtLCBhcm1lYiwgbWlwcywgbWlwczY0LCBhbmQgc28gZm9ydGgpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBHTlUgY2Fub25pY2FsIGFyY2hpdGVjdHVyZSBmb3IgYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPmFybTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXJtZWI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1pcHM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1pcHM2NDwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGgpLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhpcyB2YWx1ZSB0byBzZXR1cCBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VFVORV9BUkNIPC9maWxlbmFtZT4gZGVmaW5pdGlvbnMgYXJlIHNwZWNpZmljIHRvCisgICAgICAgICAgICAgICAgICAgIGEgZ2l2ZW4gYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmaW5pdGlvbnMgY2FuIGJlIGEgc2luZ2xlIHN0YXRpYyBkZWZpbml0aW9uLCBvcgorICAgICAgICAgICAgICAgICAgICBjYW4gYmUgZHluYW1pY2FsbHkgYWRqdXN0ZWQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIGRldGFpbHMgZm9yIGEgZ2l2ZW4gQ1BVIGZhbWlseSBieSBsb29raW5nIGF0CisgICAgICAgICAgICAgICAgICAgIHRoZSBhcmNoaXRlY3R1cmUncyA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL1JFQURNRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBwcm92aWRlcyBpbmZvcm1hdGlvbiBmb3IgPGZpbGVuYW1lPlRVTkVfQVJDSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIHRvIHRoZSA8ZmlsZW5hbWU+bWlwczwvZmlsZW5hbWU+IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRVTkVfQVJDSDwvZmlsZW5hbWU+IGlzIHRpZWQgY2xvc2VseSB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0FSQ0gnPjxmaWxlbmFtZT5UQVJHRVRfQVJDSDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggZGVmaW5lcyB0aGUgdGFyZ2V0IG1hY2hpbmUncyBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBCaXRCYWtlIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPikgc2V0cworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEFSR0VUX0FSQ0g8L2ZpbGVuYW1lPiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRBUkdFVF9BUkNIID0gIiR7VFVORV9BUkNIfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3QsIHdoaWNoIGlzIGJ5IG5vIG1lYW5zIGNvbXBsZXRlIHNpbmNlCisgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMgYXJlIGNvbmZpZ3VyYWJsZSwgc2hvd3Mgc3VwcG9ydGVkIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBhcm0KKyAgICAgaTU4NgorICAgICB4ODZfNjQKKyAgICAgcG93ZXJwYworICAgICBwb3dlcnBjNjQKKyAgICAgbWlwcworICAgICBtaXBzZWwKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRVTkVfQVNBUkdTJz48Z2xvc3N0ZXJtPlRVTkVfQVNBUkdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUVU5FX0FTQVJHU1tkb2NdID0gIlNwZWNpZmllcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYXNzZW1ibGVyIGZsYWdzIGZvciB0aGUgdGFyZ2V0IHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGFzc2VtYmxlciBmbGFncyBmb3IKKyAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgZmxhZ3MgaXMgYmFzZWQgb24gdGhlIHNlbGVjdGVkIHR1bmUgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UVU5FX0FTQVJHUzwvZmlsZW5hbWU+IGlzIHNldCB1c2luZworICAgICAgICAgICAgICAgICAgICB0aGUgdHVuZSBpbmNsdWRlIGZpbGVzLCB3aGljaCBhcmUgdHlwaWNhbGx5IHVuZGVyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlLzwvZmlsZW5hbWU+IGFuZCBhcmUKKyAgICAgICAgICAgICAgICAgICAgaW5mbHVlbmNlZCB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FX0ZFQVRVUkVTJz48ZmlsZW5hbWU+VFVORV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBkZWZpbmVzIHRoZSBmbGFncyBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBUVU5FX0FTQVJHUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICIteDMyIiwgIiIsIGQpfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpIHNlbGVjdCB0aGUgdHVuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzZWxlY3RlZCB0dW5lLCBpbiB0dXJuLCBhZmZlY3RzIHRoZSB0dW5lIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgdGhlbXNlbHZlcyAoaS5lLiB0aGUgdHVuZSBjYW4gc3VwcGx5IGl0cyBvd24KKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCBvZiBmbGFncykuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UVU5FX0NDQVJHUyc+PGdsb3NzdGVybT5UVU5FX0NDQVJHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVFVORV9DQ0FSR1NbZG9jXSA9ICJTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEMgY29tcGlsZXIgZmxhZ3MgZm9yIHRoZSB0YXJnZXQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgQyBjb21waWxlciBmbGFncyBmb3IKKyAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgZmxhZ3MgaXMgYmFzZWQgb24gdGhlIHNlbGVjdGVkIHR1bmUgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UVU5FX0NDQVJHUzwvZmlsZW5hbWU+IGlzIHNldCB1c2luZworICAgICAgICAgICAgICAgICAgICB0aGUgdHVuZSBpbmNsdWRlIGZpbGVzLCB3aGljaCBhcmUgdHlwaWNhbGx5IHVuZGVyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlLzwvZmlsZW5hbWU+IGFuZCBhcmUKKyAgICAgICAgICAgICAgICAgICAgaW5mbHVlbmNlZCB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FX0ZFQVRVUkVTJz48ZmlsZW5hbWU+VFVORV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1BzKSBzZWxlY3QgdGhlIHR1bmUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc2VsZWN0ZWQgdHVuZSwgaW4gdHVybiwgYWZmZWN0cyB0aGUgdHVuZSB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1zZWx2ZXMgKGkuZS4gdGhlIHR1bmUgY2FuIHN1cHBseSBpdHMgb3duCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQgb2YgZmxhZ3MpLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVFVORV9MREFSR1MnPjxnbG9zc3Rlcm0+VFVORV9MREFSR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRVTkVfTERBUkdTW2RvY10gPSAiU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBsaW5rZXIgZmxhZ3MgZm9yIHRoZSB0YXJnZXQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbGlua2VyIGZsYWdzIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBmbGFncyBpcyBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgdHVuZSBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRVTkVfTERBUkdTPC9maWxlbmFtZT4gaXMgc2V0IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSB0dW5lIGluY2x1ZGUgZmlsZXMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvPC9maWxlbmFtZT4gYW5kIGFyZQorICAgICAgICAgICAgICAgICAgICBpbmZsdWVuY2VkIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfRkVBVFVSRVMnPjxmaWxlbmFtZT5UVU5FX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni9hcmNoLXg4Ni5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlIGRlZmluZXMgdGhlIGZsYWdzIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRVTkVfTERBUkdTICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIi1tIGVsZjMyX3g4Nl82NCIsICIiLCBkKX0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1BzKSBzZWxlY3QgdGhlIHR1bmUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc2VsZWN0ZWQgdHVuZSwgaW4gdHVybiwgYWZmZWN0cyB0aGUgdHVuZSB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1zZWx2ZXMgKGkuZS4gdGhlIHR1bmUgY2FuIHN1cHBseSBpdHMgb3duCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQgb2YgZmxhZ3MpLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVFVORV9GRUFUVVJFUyc+PGdsb3NzdGVybT5UVU5FX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUVU5FX0ZFQVRVUkVTW2RvY10gPSAiRmVhdHVyZXMgdXNlZCB0byAidHVuZSIgYSBjb21waWxlciBmb3Igb3B0aW1hbCB1c2UgZ2l2ZW4gYSBzcGVjaWZpYyBwcm9jZXNzb3IuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRmVhdHVyZXMgdXNlZCB0byAidHVuZSIgYSBjb21waWxlciBmb3Igb3B0aW1hbCB1c2UKKyAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gYSBzcGVjaWZpYyBwcm9jZXNzb3IuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmZWF0dXJlcyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIHR1bmUgZmlsZXMgYW5kIGFsbG93CisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyAoaS5lLiA8ZmlsZW5hbWU+VFVORV8qQVJHUzwvZmlsZW5hbWU+KSB0byBiZQorICAgICAgICAgICAgICAgICAgICBkeW5hbWljYWxseSBnZW5lcmF0ZWQgYmFzZWQgb24gdGhlIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB2ZXJpZmllcyB0aGUgZmVhdHVyZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgc3VyZSB0aGV5IGFyZSBub3QgY29uZmxpY3RpbmcgYW5kIHRoYXQgdGhleSBhcmUKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4pIGRlZmluZXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRVTkVfRkVBVFVSRVM8L2ZpbGVuYW1lPiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRVTkVfRkVBVFVSRVMgPz89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS0ke0RFRkFVTFRUVU5FfX0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVGQVVMVFRVTkUnPjxmaWxlbmFtZT5ERUZBVUxUVFVORTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UVU5FX1BLR0FSQ0gnPjxnbG9zc3Rlcm0+VFVORV9QS0dBUkNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUVU5FX1BLR0FSQ0hbZG9jXSA9ICJUaGUgcGFja2FnZSBhcmNoaXRlY3R1cmUgdW5kZXJzdG9vZCBieSB0aGUgcGFja2FnaW5nIHN5c3RlbSB0byBkZWZpbmUgdGhlIGFyY2hpdGVjdHVyZSwgQUJJLCBhbmQgdHVuaW5nIG9mIG91dHB1dCBwYWNrYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFja2FnZSBhcmNoaXRlY3R1cmUgdW5kZXJzdG9vZCBieSB0aGUgcGFja2FnaW5nCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB0byBkZWZpbmUgdGhlIGFyY2hpdGVjdHVyZSwgQUJJLCBhbmQgdHVuaW5nIG9mCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpZmljIHR1bmUgaXMgZGVmaW5lZCB1c2luZyB0aGUgIl90dW5lIiBvdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRVTkVfUEtHQVJDSF90dW5lLTxyZXBsYWNlYWJsZT50dW5lPC9yZXBsYWNlYWJsZT4gPSAiPHJlcGxhY2VhYmxlPnR1bmU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGVzZSB0dW5lLXNwZWNpZmljIHBhY2thZ2UgYXJjaGl0ZWN0dXJlcyBhcmUgZGVmaW5lZCBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgbWFjaGluZSBpbmNsdWRlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdGhlICJjb3JlMi0zMiIgdHVuaW5nIGFzIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZTIuaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBUVU5FX1BLR0FSQ0hfdHVuZS1jb3JlMi0zMiA9ICJjb3JlMi0zMiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRVTkVBQkknPjxnbG9zc3Rlcm0+VFVORUFCSTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVFVORUFCSVtkb2NdID0gIkFuIHVuZGVybHlpbmcgQUJJIHVzZWQgYnkgYSBwYXJ0aWN1bGFyIHR1bmluZyBpbiBhIGdpdmVuIHRvb2xjaGFpbiBsYXllci4gVGhpcyBmZWF0dXJlIGFsbG93cyBwcm92aWRlcnMgdXNpbmcgcHJlYnVpbHQgbGlicmFyaWVzIHRvIGNoZWNrIGNvbXBhdGliaWxpdHkgb2YgYSB0dW5pbmcgYWdhaW5zdCB0aGVpciBzZWxlY3Rpb24gb2YgbGlicmFyaWVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFuIHVuZGVybHlpbmcgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoQUJJKSB1c2VkIGJ5CisgICAgICAgICAgICAgICAgICAgIGEgcGFydGljdWxhciB0dW5pbmcgaW4gYSBnaXZlbiB0b29sY2hhaW4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVycyB0aGF0IHVzZSBwcmVidWlsdCBsaWJyYXJpZXMgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRVTkVBQkk8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVBQklfT1ZFUlJJREUnPjxmaWxlbmFtZT5UVU5FQUJJX09WRVJSSURFPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVBQklfV0hJVEVMSVNUJz48ZmlsZW5hbWU+VFVORUFCSV9XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIHRvIGNoZWNrIGNvbXBhdGliaWxpdHkgb2YgdHVuaW5ncyBhZ2FpbnN0IHRoZWlyCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiBvZiBsaWJyYXJpZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5UVU5FQUJJPC9maWxlbmFtZT4gaXMgdW5kZWZpbmVkLCB0aGVuIGV2ZXJ5CisgICAgICAgICAgICAgICAgICAgIHR1bmluZyBpcyBhbGxvd2VkLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXNhbml0eSc+PGZpbGVuYW1lPnNhbml0eTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyB0byBzZWUgaG93IHRoZSB2YXJpYWJsZSBpcyB1c2VkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRVTkVBQklfT1ZFUlJJREUnPjxnbG9zc3Rlcm0+VFVORUFCSV9PVkVSUklERTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVFVORUFCSV9PVkVSUklERVtkb2NdID0gIklmIHNldCwgaWdub3JlcyBUVU5FQUJJX1dISVRFTElTVC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQsIHRoZSBPcGVuRW1iZWRkZWQgc3lzdGVtIGlnbm9yZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FQUJJX1dISVRFTElTVCc+PGZpbGVuYW1lPlRVTkVBQklfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBQcm92aWRlcnMgdGhhdCB1c2UgcHJlYnVpbHQgbGlicmFyaWVzIGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UVU5FQUJJX09WRVJSSURFPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UVU5FQUJJX1dISVRFTElTVDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVBQkknPjxmaWxlbmFtZT5UVU5FQUJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB0byBjaGVjayBjb21wYXRpYmlsaXR5IG9mIGEgdHVuaW5nIGFnYWluc3QgdGhlaXIKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uIG9mIGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zYW5pdHknPjxmaWxlbmFtZT5zYW5pdHk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgdG8gc2VlIGhvdyB0aGUgdmFyaWFibGUgaXMgdXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UVU5FQUJJX1dISVRFTElTVCc+PGdsb3NzdGVybT5UVU5FQUJJX1dISVRFTElTVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVFVORUFCSV9XSElURUxJU1RbZG9jXSA9ICJBIHdoaXRlbGlzdCBvZiBwZXJtaXNzaWJsZSBUVU5FQUJJIHZhbHVlcy4gIElmIHRoZSB2YXJpYWJsZSBpcyBub3Qgc2V0LCBhbGwgdmFsdWVzIGFyZSBhbGxvd2VkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgd2hpdGVsaXN0IG9mIHBlcm1pc3NpYmxlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FQUJJJz48ZmlsZW5hbWU+VFVORUFCSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5UVU5FQUJJX1dISVRFTElTVDwvZmlsZW5hbWU+IGlzIG5vdCBzZXQsCisgICAgICAgICAgICAgICAgICAgIGFsbCB0dW5lcyBhcmUgYWxsb3dlZC4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXJzIHRoYXQgdXNlIHByZWJ1aWx0IGxpYnJhcmllcyBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VFVORUFCSV9XSElURUxJU1Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVBQklfT1ZFUlJJREUnPjxmaWxlbmFtZT5UVU5FQUJJX09WRVJSSURFPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPlRVTkVBQkk8L2ZpbGVuYW1lPiB2YXJpYWJsZXMgdG8gY2hlY2sKKyAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJpbGl0eSBvZiBhIHR1bmluZyBhZ2FpbnN0IHRoZWlyIHNlbGVjdGlvbiBvZgorICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc2FuaXR5Jz48ZmlsZW5hbWU+c2FuaXR5PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHRvIHNlZSBob3cgdGhlIHZhcmlhYmxlIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVFVORUNPTkZMSUNUUyc+PGdsb3NzdGVybT5UVU5FQ09ORkxJQ1RTWzxyZXBsYWNlYWJsZT5mZWF0dXJlPC9yZXBsYWNlYWJsZT5dPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUVU5FQ09ORkxJQ1RTW2RvY10gPSAiU3BlY2lmaWVzIENQVSBvciBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIHR1bmluZyBmZWF0dXJlcyB0aGF0IGNvbmZsaWN0IHdpdGggc3BlY2lmaWVkIGZlYXR1cmUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIENQVSBvciBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpCisgICAgICAgICAgICAgICAgICAgIHR1bmluZyBmZWF0dXJlcyB0aGF0IGNvbmZsaWN0IHdpdGggPHJlcGxhY2VhYmxlPmZlYXR1cmU8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgS25vd24gdHVuaW5nIGNvbmZsaWN0cyBhcmUgc3BlY2lmaWVkIGluIHRoZSBtYWNoaW5lIGluY2x1ZGUKKyAgICAgICAgICAgICAgICAgICAgZmlsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvYXJjaC1taXBzLmluYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgZmlsZSB0aGF0IGxpc3RzIHRoZSAibzMyIiBhbmQgIm42NCIgZmVhdHVyZXMgYXMKKyAgICAgICAgICAgICAgICAgICAgY29uZmxpY3Rpbmcgd2l0aCB0aGUgIm4zMiIgZmVhdHVyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBUVU5FQ09ORkxJQ1RTW24zMl0gPSAibzMyIG42NCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRVTkVWQUxJRCc+PGdsb3NzdGVybT5UVU5FVkFMSURbPHJlcGxhY2VhYmxlPmZlYXR1cmU8L3JlcGxhY2VhYmxlPl08L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVFVORVZBTElEW2RvY10gPSAiRGVzY3JpcHRpb25zLCBzdG9yZWQgYXMgZmxhZ3MsIG9mIHZhbGlkIHR1bmluZyBmZWF0dXJlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSB2YWxpZCBDUFUgb3IgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoQUJJKQorICAgICAgICAgICAgICAgICAgICB0dW5pbmcgZmVhdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpZmllZCBmZWF0dXJlIGlzIHN0b3JlZCBhcyBhIGZsYWcuCisgICAgICAgICAgICAgICAgICAgIFZhbGlkIGZlYXR1cmVzIGFyZSBzcGVjaWZpZWQgaW4gdGhlIG1hY2hpbmUgaW5jbHVkZSBmaWxlcworICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm0uaW5jPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGF0IGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVFVORVZBTElEW2JpZ2VuZGlhbl0gPSAiRW5hYmxlIGJpZy1lbmRpYW4gbW9kZS4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBtYWNoaW5lIGluY2x1ZGUgZmlsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgdGhlc2UgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXUnPjx0aXRsZT5VPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVCT09UX0NPTkZJRyc+PGdsb3NzdGVybT5VQk9PVF9DT05GSUc8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVUJPT1RfQ09ORklHW2RvY10gPSAiQ29uZmlndXJlcyB0aGUgVUJPT1RfTUFDSElORSBhbmQgY2FuIGFsc28gZGVmaW5lIElNQUdFX0ZTVFlQRVMgZm9yIGluZGl2aWR1YWwgY2FzZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVCT09UX01BQ0hJTkUnPjxmaWxlbmFtZT5VQk9PVF9NQUNISU5FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCBjYW4gYWxzbyBkZWZpbmUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBpbmRpdmlkdWFsIGNhc2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1mc2wtYXJtPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVUJPT1RfQ09ORklHID8/PSAic2QiCisgICAgIFVCT09UX0NPTkZJR1tzZF0gPSAibXg2cXNhYnJlYXV0b19jb25maWcsc2RjYXJkIgorICAgICBVQk9PVF9DT05GSUdbZWltbm9yXSA9ICJteDZxc2FicmVhdXRvX2VpbW5vcl9jb25maWciCisgICAgIFVCT09UX0NPTkZJR1tuYW5kXSA9ICJteDZxc2FicmVhdXRvX25hbmRfY29uZmlnLHViaWZzIgorICAgICBVQk9PVF9DT05GSUdbc3Bpbm9yXSA9ICJteDZxc2FicmVhdXRvX3NwaW5vcl9jb25maWciCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCAic2QiIGlzIHNlbGVjdGVkIGFzIHRoZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBwb3NzaWJsZSBmb3VyIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlVCT09UX01BQ0hJTkU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlICJzZCIgY29uZmlndXJhdGlvbiBkZWZpbmVzICJteDZxc2FicmVhdXRvX2NvbmZpZyIKKyAgICAgICAgICAgICAgICAgICAgYXMgdGhlIHZhbHVlIGZvciA8ZmlsZW5hbWU+VUJPT1RfTUFDSElORTwvZmlsZW5hbWU+LCB3aGlsZQorICAgICAgICAgICAgICAgICAgICB0aGUgInNkY2FyZCIgc3BlY2lmaWVzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+IHRvIHVzZSBmb3IgdGhlIFUtYm9vdAorICAgICAgICAgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VUJPT1RfQ09ORklHPC9maWxlbmFtZT4gaXMgaGFuZGxlZCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5L3RyZWUvbWV0YS9jbGFzc2VzL3Vib290LWNvbmZpZy5iYmNsYXNzJz48ZmlsZW5hbWU+dWJvb3QtY29uZmlnPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VQk9PVF9FTlRSWVBPSU5UJz48Z2xvc3N0ZXJtPlVCT09UX0VOVFJZUE9JTlQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVUJPT1RfRU5UUllQT0lOVFtkb2NdID0gIlNwZWNpZmllcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBVLUJvb3QgaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIFUtQm9vdCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIFUtQm9vdCBpbWFnZSBjcmVhdGlvbiwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5VQk9PVF9FTlRSWVBPSU5UPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgcGFzc2VkCisgICAgICAgICAgICAgICAgICAgIGFzIGEgY29tbWFuZC1saW5lIHBhcmFtZXRlciB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVib290LW1raW1hZ2U8L2ZpbGVuYW1lPiB1dGlsaXR5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVCT09UX0xPQURBRERSRVNTJz48Z2xvc3N0ZXJtPlVCT09UX0xPQURBRERSRVNTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVCT09UX0xPQURBRERSRVNTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsb2FkIGFkZHJlc3MgZm9yIHRoZSBVLUJvb3QgaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsb2FkIGFkZHJlc3MgZm9yIHRoZSBVLUJvb3QgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIER1cmluZyBVLUJvb3QgaW1hZ2UgY3JlYXRpb24sIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VUJPT1RfTE9BREFERFJFU1M8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBwYXNzZWQKKyAgICAgICAgICAgICAgICAgICAgYXMgYSBjb21tYW5kLWxpbmUgcGFyYW1ldGVyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dWJvb3QtbWtpbWFnZTwvZmlsZW5hbWU+IHV0aWxpdHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVUJPT1RfTE9DQUxWRVJTSU9OJz48Z2xvc3N0ZXJtPlVCT09UX0xPQ0FMVkVSU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVQk9PVF9MT0NBTFZFUlNJT05bZG9jXSA9ICJBcHBlbmRzIGEgc3RyaW5nIHRvIHRoZSBuYW1lIG9mIHRoZSBsb2NhbCB2ZXJzaW9uIG9mIHRoZSBVLUJvb3QgaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQXBwZW5kcyBhIHN0cmluZyB0byB0aGUgbmFtZSBvZiB0aGUgbG9jYWwgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgVS1Cb290IGltYWdlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYXNzdW1pbmcgdGhlIHZlcnNpb24gb2YgdGhlIFUtQm9vdCBpbWFnZQorICAgICAgICAgICAgICAgICAgICBidWlsdCB3YXMgIjIwMTMuMTAsIHRoZSBmdWxsIHZlcnNpb24gc3RyaW5nIHJlcG9ydGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIFUtQm9vdCB3b3VsZCBiZSAiMjAxMy4xMC15b2N0byIgZ2l2ZW4gdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVUJPT1RfTE9DQUxWRVJTSU9OID0gIi15b2N0byIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVCT09UX01BQ0hJTkUnPjxnbG9zc3Rlcm0+VUJPT1RfTUFDSElORTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVQk9PVF9NQUNISU5FW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB2YWx1ZSBwYXNzZWQgb24gdGhlIG1ha2UgY29tbWFuZCBsaW5lIHdoZW4gYnVpbGRpbmcgYSBVLUJvb3QgaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSB2YWx1ZSBwYXNzZWQgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gY29tbWFuZCBsaW5lIHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgYSBVLUJvb3QgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBpbmRpY2F0ZXMgdGhlIHRhcmdldCBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBZb3UgdHlwaWNhbGx5IHNldCB0aGlzIHZhcmlhYmxlIGZyb20gdGhlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIChpLmUuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL21hY2hpbmUvPHJlcGxhY2VhYmxlPm1hY2hpbmVfbmFtZTwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWUgdGhlICJTZWxlY3Rpb24gb2YgUHJvY2Vzc29yIEFyY2hpdGVjdHVyZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgQm9hcmQgVHlwZSIgc2VjdGlvbiBpbiB0aGUgVS1Cb290IFJFQURNRSBmb3IgdmFsaWQgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVCT09UX01BS0VfVEFSR0VUJz48Z2xvc3N0ZXJtPlVCT09UX01BS0VfVEFSR0VUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVCT09UX01BS0VfVEFSR0VUW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB0YXJnZXQgY2FsbGVkIGluIHRoZSBNYWtlZmlsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHRhcmdldCBjYWxsZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NYWtlZmlsZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB0YXJnZXQgaXMgImFsbCIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVUJPT1RfU1VGRklYJz48Z2xvc3N0ZXJtPlVCT09UX1NVRkZJWDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVQk9PVF9TVUZGSVhbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGdlbmVyYXRlZCBVLUJvb3QgZXh0ZW5zaW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgZ2VuZXJhdGVkIFUtQm9vdCBleHRlbnNpb24uCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCA8ZmlsZW5hbWU+dS1ib290LnNiPC9maWxlbmFtZT4gaGFzIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5zYjwvZmlsZW5hbWU+IGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgVS1Cb290IGV4dGVuc2lvbiBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJpbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVUJPT1RfVEFSR0VUJz48Z2xvc3N0ZXJtPlVCT09UX1RBUkdFVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVQk9PVF9UQVJHRVRbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHRhcmdldCB1c2VkIGZvciBidWlsZGluZyBVLUJvb3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSB0YXJnZXQgdXNlZCBmb3IgYnVpbGRpbmcgVS1Cb290LgorICAgICAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0IGlzIHBhc3NlZCBkaXJlY3RseSBhcyBwYXJ0IG9mIHRoZSAibWFrZSIgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAoZS5nLiBTUEwgYW5kIEFJUykuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgc3BlY2lmaWNhbGx5IHNldCB0aGlzIHZhcmlhYmxlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHByb2Nlc3MgcGFzc2VzIGFuZCB1c2VzICJhbGwiIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGR1cmluZyB0aGUgVS1Cb290IGJ1aWxkaW5nIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUJz48Z2xvc3N0ZXJtPlVOS05PV05fQ09ORklHVVJFX1dISVRFTElTVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1RbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIG9wdGlvbnMgdGhhdCwgaWYgcmVwb3J0ZWQgYnkgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYXMgYmVpbmcgaW52YWxpZCwgc2hvdWxkIG5vdCBnZW5lcmF0ZSBhIHdhcm5pbmcgZHVyaW5nIHRoZSBkb19jb25maWd1cmUgdGFzay4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIG9wdGlvbnMgdGhhdCwgaWYgcmVwb3J0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBzY3JpcHQgYXMgYmVpbmcgaW52YWxpZCwgc2hvdWxkIG5vdCBnZW5lcmF0ZSBhCisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgIE5vcm1hbGx5LCBpbnZhbGlkIGNvbmZpZ3VyZSBvcHRpb25zIGFyZSBzaW1wbHkgbm90IHBhc3NlZAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgY29uZmlndXJlIHNjcmlwdCAoZS5nLiBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBjb21tb24gb3B0aW9ucywgZm9yIGV4YW1wbGUsIGV4aXN0IHRoYXQgYXJlIHBhc3NlZAorICAgICAgICAgICAgICAgICAgICB0byBhbGwgY29uZmlndXJlIHNjcmlwdHMgYXQgYSBjbGFzcyBsZXZlbCB0aGF0IG1pZ2h0IG5vdAorICAgICAgICAgICAgICAgICAgICBiZSB2YWxpZCBmb3Igc29tZSBjb25maWd1cmUgc2NyaXB0cy4KKyAgICAgICAgICAgICAgICAgICAgSXQgZm9sbG93cyB0aGF0IG5vIGJlbmVmaXQgZXhpc3RzIGluIHNlZWluZyBhIHdhcm5pbmcgYWJvdXQKKyAgICAgICAgICAgICAgICAgICAgdGhlc2Ugb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB0aGUgb3B0aW9ucyBhcmUgYWRkZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlVOS05PV05fQ09ORklHVVJFX1dISVRFTElTVDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJlIGFyZ3VtZW50cyBjaGVjayB0aGF0IHVzZXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlVOS05PV05fQ09ORklHVVJFX1dISVRFTElTVDwvZmlsZW5hbWU+IGlzIHBhcnQKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBhbmQgaXMgb25seSBlbmFibGVkIGlmIHRoZSByZWNpcGUgaW5oZXJpdHMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWF1dG90b29scyc+PGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VUERBVEVSQ1BOJz48Z2xvc3N0ZXJtPlVQREFURVJDUE48L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVBEQVRFUkNQTltkb2NdID0gIlNwZWNpZmllcyB0aGUgcGFja2FnZSB0aGF0IGNvbnRhaW5zIHRoZSBpbml0c2NyaXB0IHRoYXQgaXMgdG8gYmUgZW5hYmxlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGb3IgcmVjaXBlcyBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy11cGRhdGUtcmMuZCc+PGZpbGVuYW1lPnVwZGF0ZS1yYy5kPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCA8ZmlsZW5hbWU+VVBEQVRFUkNQTjwvZmlsZW5hbWU+IHNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICB0aGUgcGFja2FnZSB0aGF0IGNvbnRhaW5zIHRoZSBpbml0c2NyaXB0IHRoYXQgaXMgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgIiR7UE59Ii4KKyAgICAgICAgICAgICAgICAgICAgR2l2ZW4gdGhhdCBhbG1vc3QgYWxsIHJlY2lwZXMgdGhhdCBpbnN0YWxsIGluaXRzY3JpcHRzCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgdGhlbSBpbiB0aGUgbWFpbiBwYWNrYWdlIGZvciB0aGUgcmVjaXBlLCB5b3UKKyAgICAgICAgICAgICAgICAgICAgcmFyZWx5IG5lZWQgdG8gc2V0IHRoaXMgdmFyaWFibGUgaW4gaW5kaXZpZHVhbCByZWNpcGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVTRV9ERVZGUyc+PGdsb3NzdGVybT5VU0VfREVWRlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVNFX0RFVkZTW2RvY10gPSAiRGV0ZXJtaW5lcyBpZiBkZXZ0bXBmcyBpcyB1c2VkIGZvciAvZGV2IHBvcHVsYXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyBpZiA8ZmlsZW5hbWU+ZGV2dG1wZnM8L2ZpbGVuYW1lPiBpcyB1c2VkIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2RldjwvZmlsZW5hbWU+IHBvcHVsYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIHVzZWQgZm9yIDxmaWxlbmFtZT5VU0VfREVWRlM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyAiMSIgd2hlbiBubyB2YWx1ZSBpcyBzcGVjaWZpY2FsbHkgc2V0LgorICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHlvdSB3b3VsZCBzZXQgPGZpbGVuYW1lPlVTRV9ERVZGUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRvICIwIiBmb3IgYSBzdGF0aWNhbGx5IHBvcHVsYXRlZCA8ZmlsZW5hbWU+L2RldjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc2VsZWN0aW5nLWRldi1tYW5hZ2VyJz5TZWxlY3RpbmcgYSBEZXZpY2UgTWFuYWdlcjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IKKyAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVTRV9WVCc+PGdsb3NzdGVybT5VU0VfVlQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVNFX1ZUW2RvY10gPSAiV2hlbiB1c2luZyBTeXNWaW5pdCwgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0byBydW4gYSBnZXR0eSBvbiBhbnkgdmlydHVhbCB0ZXJtaW5hbHMgaW4gb3JkZXIgdG8gZW5hYmxlIGxvZ2dpbmcgaW4gdGhyb3VnaCB0aG9zZSB0ZXJtaW5hbHMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2luZworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNuZXctcmVjaXBlLWVuYWJsaW5nLXN5c3RlbS1zZXJ2aWNlcyc+U3lzVmluaXQ8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0byBydW4gYQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dldHR5XyUyOFVuaXglMjknPmdldHR5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgb24gYW55IHZpcnR1YWwgdGVybWluYWxzIGluIG9yZGVyIHRvIGVuYWJsZSBsb2dnaW5nIGluCisgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhvc2UgdGVybWluYWxzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSB1c2VkIGZvciA8ZmlsZW5hbWU+VVNFX1ZUPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgIjEiIHdoZW4gbm8gZGVmYXVsdCB2YWx1ZSBpcyBzcGVjaWZpY2FsbHkgc2V0LgorICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHlvdSB3b3VsZCBzZXQgPGZpbGVuYW1lPlVTRV9WVDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRvICIwIiBpbiB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIG1hY2hpbmVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgZG8gbm90IGhhdmUgYSBncmFwaGljYWwgZGlzcGxheSBhdHRhY2hlZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgdGhlcmVmb3JlIGRvIG5vdCBuZWVkIHZpcnR1YWwgdGVybWluYWwgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VU0VSX0NMQVNTRVMnPjxnbG9zc3Rlcm0+VVNFUl9DTEFTU0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVTRVJfQ0xBU1NFU1tkb2NdID0gIkxpc3Qgb2YgYWRkaXRpb25hbCBjbGFzc2VzIHRvIHVzZSB3aGVuIGJ1aWxkaW5nIGltYWdlcyB0aGF0IGVuYWJsZSBleHRyYSBmZWF0dXJlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgY2xhc3NlcyB0byBnbG9iYWxseSBpbmhlcml0LgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBjbGFzc2VzIGFyZSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHRvIGVuYWJsZSBleHRyYSBmZWF0dXJlcyAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGRzdGF0czwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW1hZ2UtbWtsaWJzPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGxpc3QgaXMgc2V0IGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFVTRVJfQ0xBU1NFUyA/PSAiYnVpbGRzdGF0cyBpbWFnZS1ta2xpYnMgaW1hZ2UtcHJlbGluayIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmYvbG9jYWwuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiBpbgorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVTRVJBRERfRVJST1JfRFlOQU1JQyc+PGdsb3NzdGVybT5VU0VSQUREX0VSUk9SX0RZTkFNSUM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVNFUkFERF9FUlJPUl9EWU5BTUlDW2RvY10gPSAiRm9yY2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHByb2R1Y2UgYW4gZXJyb3IgaWYgdGhlIHVzZXIgaWRlbnRpZmljYXRpb24gKHVpZCkgYW5kIGdyb3VwIGlkZW50aWZpY2F0aW9uIChnaWQpIHZhbHVlcyBhcmUgbm90IGRlZmluZWQgaW4gZmlsZXMvcGFzc3dkIGFuZCBmaWxlcy9ncm91cCBmaWxlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGb3JjZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gcHJvZHVjZSBhbiBlcnJvcgorICAgICAgICAgICAgICAgICAgICBpZiB0aGUgdXNlciBpZGVudGlmaWNhdGlvbiAoPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+KSBhbmQKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXAgaWRlbnRpZmljYXRpb24gKDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPikgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIGFyZSBub3QgZGVmaW5lZCBpbiA8ZmlsZW5hbWU+ZmlsZXMvcGFzc3dkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5maWxlcy9ncm91cDwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgdGhlIGJ1aWxkIHN5c3RlbSBpcyB0byBkeW5hbWljYWxseQorICAgICAgICAgICAgICAgICAgICBhcHBseSA8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPiB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdGhlIDxmaWxlbmFtZT5VU0VSQUREX0VSUk9SX0RZTkFNSUM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpcyBieSBkZWZhdWx0IG5vdCBzZXQuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBwbGFuIG9uIHVzaW5nIHN0YXRpY2FsbHkgYXNzaWduZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLCB5b3Ugc2hvdWxkIHNldAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlVTRVJBRERfRVJST1JfRFlOQU1JQzwvZmlsZW5hbWU+IHZhcmlhYmxlIGluCisgICAgICAgICAgICAgICAgICAgIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGFzCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVNFUkFERF9FUlJPUl9EWU5BTUlDID0gIjEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBiZWhhdmlvciBpbXBsaWVzIHlvdSBhcmUgZ29pbmcgdG8KKyAgICAgICAgICAgICAgICAgICAgYWxzbyB0YWtlIHN0ZXBzIHRvIHNldCBzdGF0aWMgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4gdmFsdWVzIHRocm91Z2ggdXNlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFEREVYVEVOU0lPTic+PGZpbGVuYW1lPlVTRVJBRERFWFRFTlNJT048L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSQUREX1VJRF9UQUJMRVMnPjxmaWxlbmFtZT5VU0VSQUREX1VJRF9UQUJMRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFERF9HSURfVEFCTEVTJz48ZmlsZW5hbWU+VVNFUkFERF9HSURfVEFCTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VU0VSQUREX0dJRF9UQUJMRVMnPjxnbG9zc3Rlcm0+VVNFUkFERF9HSURfVEFCTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVTRVJBRERfR0lEX1RBQkxFU1tkb2NdID0gIlNwZWNpZmllcyBhIHBhc3N3b3JkIGZpbGUgdG8gdXNlIGZvciBvYnRhaW5pbmcgc3RhdGljIGdyb3VwIGlkZW50aWZpY2F0aW9uIChnaWQpIHZhbHVlcyB3aGVuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFkZHMgYSBncm91cCB0byB0aGUgc3lzdGVtIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBwYXNzd29yZCBmaWxlIHRvIHVzZSBmb3Igb2J0YWluaW5nIHN0YXRpYworICAgICAgICAgICAgICAgICAgICBncm91cCBpZGVudGlmaWNhdGlvbiAoPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+KSB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhZGRzIGEgZ3JvdXAgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBkdXJpbmcgcGFja2FnZSBpbnN0YWxsYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gYXBwbHlpbmcgc3RhdGljIGdyb3VwIGlkZW50aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4pIHZhbHVlcywgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gbG9va3MgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgYSA8ZmlsZW5hbWU+ZmlsZXMvZ3JvdXA8L2ZpbGVuYW1lPiBmaWxlIGFuZCB0aGVuIGFwcGxpZXMKKyAgICAgICAgICAgICAgICAgICAgdGhvc2UgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSB2YXJpYWJsZSBhcyBmb2xsb3dzIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFVTRVJBRERfR0lEX1RBQkxFUyA9ICJmaWxlcy9ncm91cCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFEREVYVEVOU0lPTic+PGZpbGVuYW1lPlVTRVJBRERFWFRFTlNJT048L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gInVzZXJhZGQtc3RhdGljaWRzIiBjYXVzZXMgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICB0byB1c2Ugc3RhdGljIDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPiB2YWx1ZXMuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVVNFUkFERF9QQUNLQUdFUyc+PGdsb3NzdGVybT5VU0VSQUREX1BBQ0tBR0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVTRVJBRERfUEFDS0FHRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSB1c2VyYWRkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgaW5kaXZpZHVhbCBwYWNrYWdlcyB3aXRoaW4gdGhlIHJlY2lwZSB0aGF0IHJlcXVpcmUgdXNlcnMgYW5kL29yIGdyb3VwcyB0byBiZSBhZGRlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVzZXJhZGQnPjxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0aGUgaW5kaXZpZHVhbCBwYWNrYWdlcyB3aXRoaW4gdGhlIHJlY2lwZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUgdXNlcnMgYW5kL29yIGdyb3VwcyB0byBiZSBhZGRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoaXMgdmFyaWFibGUgaWYgdGhlIHJlY2lwZSBpbmhlcml0cyB0aGUKKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGVuYWJsZXMgYWRkaW5nIGEgdXNlciBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIG1haW4gcGFja2FnZSBpbiBhIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgZm9sbG93cyB0aGF0IGlmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlVTRVJBRERfUEFDS0FHRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIHNldCBvbmUgb3IgbW9yZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSQUREX1BBUkFNJz48ZmlsZW5hbWU+VVNFUkFERF9QQVJBTTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HUk9VUEFERF9QQVJBTSc+PGZpbGVuYW1lPkdST1VQQUREX1BBUkFNPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HUk9VUE1FTVNfUEFSQU0nPjxmaWxlbmFtZT5HUk9VUE1FTVNfUEFSQU08L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVVNFUkFERF9QQVJBTSc+PGdsb3NzdGVybT5VU0VSQUREX1BBUkFNPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVTRVJBRERfUEFSQU1bZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSB1c2VyYWRkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBmb3IgYSBwYWNrYWdlIHdoYXQgcGFyYW1ldGVycyBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSB1c2VyYWRkIGNvbW1hbmQgaWYgeW91IHdpc2ggdG8gYWRkIGEgdXNlciB0byB0aGUgc3lzdGVtIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXNlcmFkZCc+PGZpbGVuYW1lPnVzZXJhZGQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIGZvciBhIHBhY2thZ2Ugd2hhdCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwYXNzZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIDxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICBpZiB5b3Ugd2lzaCB0byBhZGQgYSB1c2VyIHRvIHRoZSBzeXN0ZW0gd2hlbiB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBpcyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIHRoZSA8ZmlsZW5hbWU+ZGJ1czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIC0taG9tZSAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kYnVzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW5vLWNyZWF0ZS1ob21lIC0tc2hlbGwgL2Jpbi9mYWxzZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIG1lc3NhZ2VidXMiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBzdGFuZGFyZCBMaW51eCBzaGVsbCBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT4sIHNlZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGludXguZGllLm5ldC9tYW4vOC91c2VyYWRkJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VU0VSQUREX1VJRF9UQUJMRVMnPjxnbG9zc3Rlcm0+VVNFUkFERF9VSURfVEFCTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVTRVJBRERfVUlEX1RBQkxFU1tkb2NdID0gIlNwZWNpZmllcyBhIHBhc3N3b3JkIGZpbGUgdG8gdXNlIGZvciBvYnRhaW5pbmcgc3RhdGljIHVzZXIgaWRlbnRpZmljYXRpb24gKHVpZCkgdmFsdWVzIHdoZW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYWRkcyBhIHVzZXIgdG8gdGhlIHN5c3RlbSBkdXJpbmcgcGFja2FnZSBpbnN0YWxsYXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgcGFzc3dvcmQgZmlsZSB0byB1c2UgZm9yIG9idGFpbmluZyBzdGF0aWMKKyAgICAgICAgICAgICAgICAgICAgdXNlciBpZGVudGlmaWNhdGlvbiAoPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+KSB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhZGRzIGEgdXNlciB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBhcHBseWluZyBzdGF0aWMgdXNlciBpZGVudGlmaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+KSB2YWx1ZXMsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGxvb2tzIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGEgPGZpbGVuYW1lPmZpbGVzL3Bhc3N3ZDwvZmlsZW5hbWU+IGZpbGUgYW5kIHRoZW4gYXBwbGllcworICAgICAgICAgICAgICAgICAgICB0aG9zZSA8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4gdmFsdWVzLgorICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIHZhcmlhYmxlIGFzIGZvbGxvd3MgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVNFUkFERF9VSURfVEFCTEVTID0gImZpbGVzL3Bhc3N3ZCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFEREVYVEVOU0lPTic+PGZpbGVuYW1lPlVTRVJBRERFWFRFTlNJT048L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gInVzZXJhZGQtc3RhdGljaWRzIiBjYXVzZXMgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICB0byB1c2Ugc3RhdGljIDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPiB2YWx1ZXMuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVVNFUkFEREVYVEVOU0lPTic+PGdsb3NzdGVybT5VU0VSQURERVhURU5TSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVTRVJBRERFWFRFTlNJT05bZG9jXSA9ICJXaGVuIHNldCB0byAidXNlcmFkZC1zdGF0aWNpZHMiLCBjYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYmFzZSBhbGwgdXNlciBhbmQgZ3JvdXAgYWRkaXRpb25zIG9uIGEgc3RhdGljIHBhc3N3ZCBhbmQgZ3JvdXAgZmlsZXMgZm91bmQgaW4gQkJQQVRILiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0IHRvICJ1c2VyYWRkLXN0YXRpY2lkcyIsIGNhdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBiYXNlIGFsbCB1c2VyIGFuZCBncm91cAorICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbnMgb24gYSBzdGF0aWMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhc3N3ZDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z3JvdXA8L2ZpbGVuYW1lPiBmaWxlcyBmb3VuZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyB1c2Ugc3RhdGljIHVzZXIgaWRlbnRpZmljYXRpb24gKDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgYW5kIGdyb3VwIGlkZW50aWZpY2F0aW9uICg8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgIHZhbHVlcywgc2V0IHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFVTRVJBRERFWFRFTlNJT04gPSAidXNlcmFkZC1zdGF0aWNpZHMiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gdXNlIHN0YXRpYworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBjYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gZW1wbG95CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVzZXJhZGQtc3RhdGljaWRzJz48ZmlsZW5hbWU+dXNlcmFkZC1zdGF0aWNpZHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB1c2Ugc3RhdGljIDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+IGluZm9ybWF0aW9uLCB5b3UgbXVzdCBhbHNvCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIDxmaWxlbmFtZT5maWxlcy9wYXNzd2Q8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZpbGVzL2dyb3VwPC9maWxlbmFtZT4gZmlsZXMgYnkgc2V0dGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfVUlEX1RBQkxFUyc+PGZpbGVuYW1lPlVTRVJBRERfVUlEX1RBQkxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfR0lEX1RBQkxFUyc+PGZpbGVuYW1lPlVTRVJBRERfR0lEX1RBQkxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgeW91IHNob3VsZCBhbHNvIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfRVJST1JfRFlOQU1JQyc+PGZpbGVuYW1lPlVTRVJBRERfRVJST1JfRFlOQU1JQzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCis8IS0tICAgICAgICAgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktdic+PHRpdGxlPlY8L3RpdGxlPi0tPgorPCEtLSAgICAgICAgICAgIDwvZ2xvc3NkaXY+LS0+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS13Jz48dGl0bGU+VzwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1XQVJOX1FBJz48Z2xvc3N0ZXJtPldBUk5fUUE8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgV0FSTl9RQVtkb2NdID0gIlNwZWNpZmllcyB0aGUgcXVhbGl0eSBhc3N1cmFuY2UgY2hlY2tzIHdob3NlIGZhaWx1cmVzIGFyZSByZXBvcnRlZCBhcyB3YXJuaW5ncyBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHF1YWxpdHkgYXNzdXJhbmNlIGNoZWNrcyB3aG9zZSBmYWlsdXJlcyBhcmUKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWQgYXMgd2FybmluZ3MgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFlvdSBzZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgdGhlIGNoZWNrcyB5b3UgY2FuIGNvbnRyb2wgd2l0aCB0aGlzIHZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbnNhbmUnPjxmaWxlbmFtZT5pbnNhbmUuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1XT1JLRElSJz48Z2xvc3N0ZXJtPldPUktESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgV09SS0RJUltkb2NdID0gIlRoZSBwYXRobmFtZSBvZiB0aGUgd29ya2luZyBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYnVpbGRzIGEgcmVjaXBlLiBUaGlzIGRpcmVjdG9yeSBpcyBsb2NhdGVkIHdpdGhpbiB0aGUgVE1QRElSIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgYW5kIGNoYW5nZXMgYXMgZGlmZmVyZW50IHBhY2thZ2VzIGFyZSBidWlsdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aG5hbWUgb2YgdGhlIHdvcmsgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGJ1aWxkcyBhIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgaXMgbG9jYXRlZCB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgaXMgc3BlY2lmaWMgdG8gdGhlIHJlY2lwZSBiZWluZworICAgICAgICAgICAgICAgICAgICBidWlsdCBhbmQgdGhlIHN5c3RlbSBmb3Igd2hpY2ggaXQgaXMgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpcyBkZWZpbmVkIGFzCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtUTVBESVJ9L3dvcmsvJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30vJHtQTn0vJHtFWFRFTkRQRX0ke1BWfS0ke1BSfQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBhY3R1YWwgZGlyZWN0b3J5IGRlcGVuZHMgb24gc2V2ZXJhbCB0aGluZ3M6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdG9wLWxldmVsIGJ1aWxkIG91dHB1dCBkaXJlY3Rvcnk8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxsaW5rIGxpbmtlbmQ9J3Zhci1NVUxUSU1BQ0hfVEFSR0VUX1NZUyc+PGZpbGVuYW1lPk1VTFRJTUFDSF9UQVJHRVRfU1lTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJnZXQgc3lzdGVtIGlkZW50aWZpZXI8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgbmFtZTwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PGxpbmsgbGlua2VuZD0ndmFyLUVYVEVORFBFJz48ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGVwb2NoIC0gKGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBFJz48ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3Qgc3BlY2lmaWVkLCB3aGljaCBpcyB1c3VhbGx5IHRoZSBjYXNlIGZvciBtb3N0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcywgdGhlbiA8ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPiBpcyBibGFuayk8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgdmVyc2lvbjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PGxpbmsgbGlua2VuZD0ndmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSByZXZpc2lvbjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBhc3N1bWUgYSBTb3VyY2UgRGlyZWN0b3J5IHRvcC1sZXZlbCBmb2xkZXIKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+LCBhIGRlZmF1bHQgQnVpbGQgRGlyZWN0b3J5IGF0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5L2J1aWxkPC9maWxlbmFtZT4sIGFuZCBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2LXBva3ktbGludXg8L2ZpbGVuYW1lPiBtYWNoaW5lIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCBzdXBwb3NlIHlvdXIgcmVjaXBlIGlzIG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb29fMS4zLjAtcjAuYmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgd29yayBkaXJlY3RvcnkgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzIHRvCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHRoZSBwYWNrYWdlIHdvdWxkIGJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcG9reS9idWlsZC90bXAvd29yay9xZW11eDg2LXBva3ktbGludXgvZm9vLzEuMy4wLXIwCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnkteCc+PHRpdGxlPlg8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItWFNFUlZFUic+PGdsb3NzdGVybT5YU0VSVkVSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFhTRVJWRVJbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhY2thZ2VzIHRoYXQgc2hvdWxkIGJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgdG8gcHJvdmlkZSBhbiBYIHNlcnZlciBhbmQgZHJpdmVycyBmb3IgdGhlIGN1cnJlbnQgbWFjaGluZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhY2thZ2VzIHRoYXQgc2hvdWxkIGJlIGluc3RhbGxlZCB0bworICAgICAgICAgICAgICAgICAgICBwcm92aWRlIGFuIFggc2VydmVyIGFuZCBkcml2ZXJzIGZvciB0aGUgY3VycmVudCBtYWNoaW5lLAorICAgICAgICAgICAgICAgICAgICBhc3N1bWluZyB5b3VyIGltYWdlIGRpcmVjdGx5IGluY2x1ZGVzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY29yZS14MTEteHNlcnZlcjwvZmlsZW5hbWU+IG9yLAorICAgICAgICAgICAgICAgICAgICBwZXJoYXBzIGluZGlyZWN0bHksIGluY2x1ZGVzICJ4MTEtYmFzZSIgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIG9mIDxmaWxlbmFtZT5YU0VSVkVSPC9maWxlbmFtZT4sIGlmIG5vdAorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgaW4gdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbiwgaXMKKyAgICAgICAgICAgICAgICAgICAgInhzZXJ2ZXIteG9yZyB4Zjg2LXZpZGVvLWZiZGV2IHhmODYtaW5wdXQtZXZkZXYiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKzwhLS0gICAgICAgICAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS15Jz48dGl0bGU+WTwvdGl0bGU+LS0+Cis8IS0tICAgICAgICAgICAgPC9nbG9zc2Rpdj4tLT4KKworPCEtLSAgICAgICAgICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXonPjx0aXRsZT5aPC90aXRsZT4tLT4KKzwhLS0gICAgICAgICAgICA8L2dsb3NzZGl2Pi0tPgorCis8L2dsb3NzYXJ5PgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdmFybG9jYWxpdHkueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXZhcmxvY2FsaXR5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2Y4NzMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXZhcmxvY2FsaXR5LnhtbApAQCAtMCwwICsxLDE5NiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3JlZi12YXJsb2NhbGl0eSc+CisgICAgPHRpdGxlPlZhcmlhYmxlIENvbnRleHQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoaWxlIHlvdSBjYW4gdXNlIG1vc3QgdmFyaWFibGVzIGluIGFsbW9zdCBhbnkgY29udGV4dCBzdWNoIGFzCisgICAgICAgIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPiwKKyAgICAgICAgPGZpbGVuYW1lPi5pbmM8L2ZpbGVuYW1lPiwgYW5kIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcywKKyAgICAgICAgc29tZSB2YXJpYWJsZXMgYXJlIG9mdGVuIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgbG9jYWxpdHkgb3IgY29udGV4dC4KKyAgICAgICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyBzb21lIGNvbW1vbiBhc3NvY2lhdGlvbnMuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi12YXJsb2NhbGl0eS1jb25maWd1cmF0aW9uJz4KKyAgICAgICAgPHRpdGxlPkNvbmZpZ3VyYXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucyBwcm92aWRlIGxpc3RzIG9mIHZhcmlhYmxlcyB3aG9zZSBjb250ZXh0IGlzCisgICAgICAgICAgICBjb25maWd1cmF0aW9uOiBkaXN0cmlidXRpb24sIG1hY2hpbmUsIGFuZCBsb2NhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZWYtdmFybG9jYWxpdHktY29uZmlnLWRpc3Rybyc+CisgICAgICAgICAgICA8dGl0bGU+RGlzdHJpYnV0aW9uIChEaXN0cm8pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gbGlzdHMgdmFyaWFibGVzIHdob3NlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBpcyB0aGUKKyAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgb3IgZGlzdHJvLgorICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk8nPkRJU1RSTzwvbGluaz48L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19OQU1FJz5ESVNUUk9fTkFNRTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fVkVSU0lPTic+RElTVFJPX1ZFUlNJT048L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFJTlRBSU5FUic+TUFJTlRBSU5FUjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPlBBQ0tBR0VfQ0xBU1NFUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfT1MnPlRBUkdFVF9PUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfRlBVJz5UQVJHRVRfRlBVPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVRDTU9ERSc+VENNT0RFPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVRDTElCQyc+VENMSUJDPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlZi12YXJsb2NhbGl0eS1jb25maWctbWFjaGluZSc+CisgICAgICAgICAgICA8dGl0bGU+TWFjaGluZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBsaXN0cyB2YXJpYWJsZXMgd2hvc2UgY29uZmlndXJhdGlvbiBjb250ZXh0IGlzIHRoZQorICAgICAgICAgICAgICAgIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0FSQ0gnPlRBUkdFVF9BUkNIPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU0VSSUFMX0NPTlNPTEVTJz5TRVJJQUxfQ09OU09MRVM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0VYVFJBX0FSQ0hTJz5QQUNLQUdFX0VYVFJBX0FSQ0hTPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+SU1BR0VfRlNUWVBFUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVMnPk1BQ0hJTkVfRkVBVFVSRVM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0VYVFJBX1JERVBFTkRTJz5NQUNISU5FX0VYVFJBX1JERVBFTkRTCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpbms+PC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyc+TUFDSElORV9FWFRSQV9SUkVDT01NRU5EUworICAgICAgICAgICAgICAgICAgICAgICAgPC9saW5rPjwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTJz5NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUworICAgICAgICAgICAgICAgICAgICAgICAgPC9saW5rPjwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTJz4KKyAgICAgICAgICAgICAgICAgICAgICAgIE1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTPC9saW5rPjwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVmLXZhcmxvY2FsaXR5LWNvbmZpZy1sb2NhbCc+CisgICAgICAgICAgICA8dGl0bGU+TG9jYWw8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gbGlzdHMgdmFyaWFibGVzIHdob3NlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBpcyB0aGUKKyAgICAgICAgICAgICAgICBsb2NhbCBjb25maWd1cmF0aW9uIHRocm91Z2ggdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURJU1RSTyc+RElTVFJPPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+TUFDSElORTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+RExfRElSPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItQkJGSUxFUyc+QkJGSUxFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX0lNQUdFX0ZFQVRVUkVTJz5FWFRSQV9JTUFHRV9GRUFUVVJFUworICAgICAgICAgICAgICAgICAgICAgICAgPC9saW5rPjwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+UEFDS0FHRV9DTEFTU0VTPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItQkJfTlVNQkVSX1RIUkVBRFMnPkJCX05VTUJFUl9USFJFQURTPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItQkJJTkNMVURFTE9HUyc+QkJJTkNMVURFTE9HUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT04nPgorICAgICAgICAgICAgICAgICAgICAgICAgRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTjwvbGluaz48L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi12YXJsb2NhbGl0eS1yZWNpcGVzJz4KKyAgICAgICAgPHRpdGxlPlJlY2lwZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucyBwcm92aWRlIGxpc3RzIG9mIHZhcmlhYmxlcyB3aG9zZSBjb250ZXh0IGlzCisgICAgICAgICAgICByZWNpcGVzOiByZXF1aXJlZCwgZGVwZW5kZW5jaWVzLCBwYXRoLCBhbmQgZXh0cmEgYnVpbGQgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVmLXZhcmxvY2FsaXR5LXJlY2lwZS1yZXF1aXJlZCc+CisgICAgICAgICAgICA8dGl0bGU+UmVxdWlyZWQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gbGlzdHMgdmFyaWFibGVzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciByZWNpcGVzLgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0UnPkxJQ0VOU0U8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNfRklMRVNfQ0hLU1VNJz5MSUNfRklMRVNfQ0hLU1VNPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+U1JDX1VSSTwvbGluaz48L2ZpbGVuYW1lPiAtIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHJlY2lwZXMgdGhhdCBmZXRjaCBsb2NhbCBvciByZW1vdGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZWYtdmFybG9jYWxpdHktcmVjaXBlLWRlcGVuZGVuY2llcyc+CisgICAgICAgICAgICA8dGl0bGU+RGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGxpc3RzIHZhcmlhYmxlcyB0aGF0IGRlZmluZSByZWNpcGUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPkRFUEVORFM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+UkRFUEVORFM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+UlJFQ09NTUVORFM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1SQ09ORkxJQ1RTJz5SQ09ORkxJQ1RTPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUlJFUExBQ0VTJz5SUkVQTEFDRVM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlZi12YXJsb2NhbGl0eS1yZWNpcGUtcGF0aHMnPgorICAgICAgICAgICAgPHRpdGxlPlBhdGhzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGxpc3RzIHZhcmlhYmxlcyB0aGF0IGRlZmluZSByZWNpcGUgcGF0aHMuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+V09SS0RJUjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVMnPlM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+RklMRVM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlZi12YXJsb2NhbGl0eS1yZWNpcGUtYnVpbGQnPgorICAgICAgICAgICAgPHRpdGxlPkV4dHJhIEJ1aWxkIEluZm9ybWF0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGxpc3RzIHZhcmlhYmxlcyB0aGF0IGRlZmluZSBleHRyYSBidWlsZCBpbmZvcm1hdGlvbiBmb3IgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNNQUtFJz5FWFRSQV9PRUNNQUtFPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRVhUUkFfT0VDT05GJz5FWFRSQV9PRUNPTkY8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRU1BS0UnPkVYVFJBX09FTUFLRTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz5QQUNLQUdFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFRkFVTFRfUFJFRkVSRU5DRSc+REVGQVVMVF9QUkVGRVJFTkNFCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpbms+PC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQgc3BlbGwgc3BlbGxsYW5nPWVuX2diCistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3Jlc291cmNlcy54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZXNvdXJjZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTlmOWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZXNvdXJjZXMueG1sCkBAIC0wLDAgKzEsMTIzIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ncmVzb3VyY2VzJz4KKzx0aXRsZT5Db250cmlidXRpbmcgdG8gdGhlIFlvY3RvIFByb2plY3Q8L3RpdGxlPgorCis8c2VjdGlvbiBpZD0ncmVzb3VyY2VzLWludHJvJz4KKyAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgdGVhbSBpcyBoYXBweSBmb3IgcGVvcGxlIHRvIGV4cGVyaW1lbnQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgQSBudW1iZXIgb2YgcGxhY2VzIGV4aXN0IHRvIGZpbmQgaGVscCBpZiB5b3UgcnVuIGludG8gZGlmZmljdWx0aWVzIG9yIGZpbmQgYnVncy4KKyAgICAgICAgVG8gZmluZCBvdXQgaG93IHRvIGRvd25sb2FkIHNvdXJjZSBjb2RlLAorICAgICAgICBzZWUgdGhlICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNsb2NhbC15cC1yZWxlYXNlJz5Zb2N0byBQcm9qZWN0IFJlbGVhc2U8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVzb3VyY2VzLWJ1Z3RyYWNrZXInPgorICAgIDx0aXRsZT5UcmFja2luZyBCdWdzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgZmluZCBwcm9ibGVtcyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LCB5b3Ugc2hvdWxkIHJlcG9ydCB0aGVtIHVzaW5nIHRoZQorICAgICAgICBCdWd6aWxsYSBhcHBsaWNhdGlvbiBhdCA8dWxpbmsgdXJsPScmWU9DVE9fQlVHWklMTEFfVVJMOyc+PC91bGluaz4uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVzb3VyY2VzLW1haWxpbmdsaXN0Jz4KKyAgICA8dGl0bGU+TWFpbGluZyBsaXN0czwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQSBudW1iZXIgb2YgbWFpbGluZyBsaXN0cyBtYWludGFpbmVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IGV4aXN0CisgICAgICAgIGFzIHdlbGwgYXMgcmVsYXRlZCBPcGVuRW1iZWRkZWQgbWFpbGluZyBsaXN0cyBmb3IgZGlzY3Vzc2lvbiwKKyAgICAgICAgcGF0Y2ggc3VibWlzc2lvbiBhbmQgYW5ub3VuY2VtZW50cy4KKyAgICAgICAgVG8gc3Vic2NyaWJlIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nIG1haWxpbmcgbGlzdHMsIGNsaWNrIG9uIHRoZQorICAgICAgICBhcHByb3ByaWF0ZSBVUkwgaW4gdGhlIGZvbGxvd2luZyBsaXN0IGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9uczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fTElTVFNfVVJMOy9saXN0aW5mby95b2N0byc+PC91bGluaz4gLQorICAgICAgICAgICAgICAgIEdlbmVyYWwgWW9jdG8gUHJvamVjdCBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdC4gPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJk9FX0xJU1RTX1VSTDsvbGlzdGluZm8vb3BlbmVtYmVkZGVkLWNvcmUnPjwvdWxpbms+IC0KKyAgICAgICAgICAgICAgICBEaXNjdXNzaW9uIG1haWxpbmcgbGlzdCBhYm91dCBPcGVuRW1iZWRkZWQtQ29yZSAodGhlIGNvcmUgbWV0YWRhdGEpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZPRV9MSVNUU19VUkw7L2xpc3RpbmZvL29wZW5lbWJlZGRlZC1kZXZlbCc+PC91bGluaz4gLQorICAgICAgICAgICAgICAgIERpc2N1c3Npb24gbWFpbGluZyBsaXN0IGFib3V0IE9wZW5FbWJlZGRlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmT0VfTElTVFNfVVJMOy9saXN0aW5mby9iaXRiYWtlLWRldmVsJz48L3VsaW5rPiAtCisgICAgICAgICAgICAgICAgRGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QgYWJvdXQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4KKyAgICAgICAgICAgICAgICBidWlsZCB0b29sLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvL3Bva3knPjwvdWxpbms+IC0KKyAgICAgICAgICAgICAgICBEaXNjdXNzaW9uIG1haWxpbmcgbGlzdCBhYm91dAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Bva3knPlBva3k8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fTElTVFNfVVJMOy9saXN0aW5mby95b2N0by1hbm5vdW5jZSc+PC91bGluaz4gLQorICAgICAgICAgICAgICAgIE1haWxpbmcgbGlzdCB0byByZWNlaXZlIG9mZmljaWFsIFlvY3RvIFByb2plY3QgcmVsZWFzZSBhbmQgbWlsZXN0b25lCisgICAgICAgICAgICAgICAgYW5ub3VuY2VtZW50cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorICAgIEZvciBtb3JlIFlvY3RvIFByb2plY3QtcmVsYXRlZCBtYWlsaW5nIGxpc3RzLCBzZWUgdGhlIFlvY3RvIFByb2plY3QgY29tbXVuaXR5IG1haWxpbmcgbGlzdHMgcGFnZQorICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL2NvbW11bml0eS9tYWlsaW5nLWxpc3RzJz5oZXJlPC91bGluaz4uCis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZXNvdXJjZXMtaXJjJz4KKyAgICA8dGl0bGU+SW50ZXJuZXQgUmVsYXkgQ2hhdCAoSVJDKTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVHdvIElSQyBjaGFubmVscyBvbiBmcmVlbm9kZSBhcmUgYXZhaWxhYmxlIGZvciB0aGUgWW9jdG8gUHJvamVjdCBhbmQgUG9reSBkaXNjdXNzaW9uczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+I3lvY3RvPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+I3Bva3k8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZXNvdXJjZXMtbGlua3MnPgorICAgIDx0aXRsZT5MaW5rczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSGVyZSBpcyBhIGxpc3Qgb2YgcmVzb3VyY2VzIHlvdSB3aWxsIGZpbmQgaGVscGZ1bDoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+VGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZTwvdWxpbms+OgorICAgICAgICAgICAgICAgIDwvZW1waGFzaXM+IFRoZSBob21lIHNpdGUgZm9yIHRoZSBZb2N0bworICAgICAgICAgICAgICAgIFByb2plY3QuPC9wYXJhPjwvbGlzdGl0ZW0+Cis8IS0tCisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuaW50ZWwuY29tLyc+SW50ZWwgQ29ycG9yYXRpb248L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSBjb21wYW55IHRoYXQgYWNxdWlyZWQgT3BlbmVkSGFuZCBpbiAyMDA4IGFuZCBiZWdhbgorICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IG9uIHRoZSBZb2N0byBQcm9qZWN0LjwvcGFyYT48L2xpc3RpdGVtPgorLS0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZPRV9IT01FX1VSTDsnPk9wZW5FbWJlZGRlZDwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIHVwc3RyZWFtLCBnZW5lcmljLCBlbWJlZGRlZCBkaXN0cmlidXRpb24gdXNlZCBhcyB0aGUgYmFzaXMKKyAgICAgICAgICAgICAgICBmb3IgdGhlIGJ1aWxkIHN5c3RlbSBpbiB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICBQb2t5IGRlcml2ZXMgZnJvbSBhbmQgY29udHJpYnV0ZXMgYmFjayB0byB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgcHJvamVjdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5vcGVuZW1iZWRkZWQub3JnL3dpa2kvQml0QmFrZSc+CisgICAgICAgICAgICAgICAgQml0QmFrZTwvdWxpbms+OjwvZW1waGFzaXM+IFRoZSB0b29sIHVzZWQgdG8gcHJvY2VzcyBtZXRhZGF0YS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIEZvciBtb3JlIGxpbmtzLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNvdGhlci1pbmZvcm1hdGlvbic+T3RoZXIgSW5mb3JtYXRpb248L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVzb3VyY2VzLWNvbnRyaWJ1dGlvbnMnPgorICAgIDx0aXRsZT5Db250cmlidXRpb25zPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBnbGFkbHkgYWNjZXB0cyBjb250cmlidXRpb25zLgorICAgICAgICBZb3UgY2FuIHN1Ym1pdCBjaGFuZ2VzIHRvIHRoZSBwcm9qZWN0IGVpdGhlciBieSBjcmVhdGluZyBhbmQgc2VuZGluZworICAgICAgICBwdWxsIHJlcXVlc3RzLAorICAgICAgICBvciBieSBzdWJtaXR0aW5nIHBhdGNoZXMgdGhyb3VnaCBlbWFpbC4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkbyBib3RoIGFzIHdlbGwgYXMgaW5mb3JtYXRpb24gb24gaG93CisgICAgICAgIHRvIGlkZW50aWZ5IHRoZSBtYWludGFpbmVyIGZvciBlYWNoIGFyZWEgb2YgY29kZSwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjaG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvdGVjaG5pY2FsLWRldGFpbHMueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvdGVjaG5pY2FsLWRldGFpbHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZjM2NTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC90ZWNobmljYWwtZGV0YWlscy54bWwKQEAgLTAsMCArMSwxNDIxIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ndGVjaG5pY2FsLWRldGFpbHMnPgorPHRpdGxlPlRlY2huaWNhbCBEZXRhaWxzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNoYXB0ZXIgcHJvdmlkZXMgdGVjaG5pY2FsIGRldGFpbHMgZm9yIHZhcmlvdXMgcGFydHMgb2YgdGhlCisgICAgICAgIFlvY3RvIFByb2plY3QuCisgICAgICAgIEN1cnJlbnRseSwgdG9waWNzIGluY2x1ZGUgWW9jdG8gUHJvamVjdCBjb21wb25lbnRzLAorICAgICAgICBjcm9zcy10b29sY2hhaW4gZ2VuZXJhdGlvbiwgc2hhcmVkIHN0YXRlIChzc3RhdGUpIGNhY2hlLAorICAgICAgICB4MzIsIFdheWxhbmQgc3VwcG9ydCwgYW5kIExpY2Vuc2VzLgorICAgIDwvcGFyYT4KKworPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1jb21wb25lbnRzJz4KKyAgICA8dGl0bGU+WW9jdG8gUHJvamVjdCBDb21wb25lbnRzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4KKyAgICAgICAgdGFzayBleGVjdXRvciB0b2dldGhlciB3aXRoIHZhcmlvdXMgdHlwZXMgb2YgY29uZmlndXJhdGlvbiBmaWxlcyBmb3JtCisgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgQ29yZS4KKyAgICAgICAgVGhpcyBzZWN0aW9uIG92ZXJ2aWV3cyB0aGVzZSBjb21wb25lbnRzIGJ5IGRlc2NyaWJpbmcgdGhlaXIgdXNlIGFuZAorICAgICAgICBob3cgdGhleSBpbnRlcmFjdC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQml0QmFrZSBoYW5kbGVzIHRoZSBwYXJzaW5nIGFuZCBleGVjdXRpb24gb2YgdGhlIGRhdGEgZmlsZXMuCisgICAgICAgIFRoZSBkYXRhIGl0c2VsZiBpcyBvZiB2YXJpb3VzIHR5cGVzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZWNpcGVzOjwvZW1waGFzaXM+IFByb3ZpZGVzIGRldGFpbHMKKyAgICAgICAgICAgICAgICBhYm91dCBwYXJ0aWN1bGFyIHBpZWNlcyBvZiBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2xhc3MgRGF0YTo8L2VtcGhhc2lzPiBBYnN0cmFjdHMKKyAgICAgICAgICAgICAgICBjb21tb24gYnVpbGQgaW5mb3JtYXRpb24gKGUuZy4gaG93IHRvIGJ1aWxkIGEgTGludXgga2VybmVsKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29uZmlndXJhdGlvbiBEYXRhOjwvZW1waGFzaXM+IERlZmluZXMKKyAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljIHNldHRpbmdzLCBwb2xpY3kgZGVjaXNpb25zLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBkYXRhIGFjdHMgYXMgdGhlIGdsdWUgdG8gYmluZCBldmVyeXRoaW5nCisgICAgICAgICAgICAgICAgdG9nZXRoZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCaXRCYWtlIGtub3dzIGhvdyB0byBjb21iaW5lIG11bHRpcGxlIGRhdGEgc291cmNlcyB0b2dldGhlciBhbmQgcmVmZXJzCisgICAgICAgIHRvIGVhY2ggZGF0YSBzb3VyY2UgYXMgYSBsYXllci4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGxheWVycywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nIGFuZAorICAgICAgICBDcmVhdGluZyBMYXllcnM8L3VsaW5rPiIgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvbGxvd2luZyBhcmUgc29tZSBicmllZiBkZXRhaWxzIG9uIHRoZXNlIGNvcmUgY29tcG9uZW50cy4KKyAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gaG93IHRoZXNlIGNvbXBvbmVudHMgaW50ZXJhY3QgZHVyaW5nCisgICAgICAgIGEgYnVpbGQsIHNlZSB0aGUKKyAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Nsb3Nlci1sb29rJz5BIENsb3NlciBMb29rIGF0IHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50PC9saW5rPiIKKyAgICAgICAgQ2hhcHRlci4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWNvbXBvbmVudHMtYml0YmFrZSc+CisgICAgICAgIDx0aXRsZT5CaXRCYWtlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgaXMgdGhlIHRvb2wgYXQgdGhlIGhlYXJ0IG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICBhbmQgaXMgcmVzcG9uc2libGUgZm9yIHBhcnNpbmcgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPiwKKyAgICAgICAgICAgIGdlbmVyYXRpbmcgYSBsaXN0IG9mIHRhc2tzIGZyb20gaXQsIGFuZCB0aGVuIGV4ZWN1dGluZyB0aG9zZSB0YXNrcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGJyaWVmbHkgaW50cm9kdWNlcyBCaXRCYWtlLgorICAgICAgICAgICAgSWYgeW91IHdhbnQgbW9yZSBpbmZvcm1hdGlvbiBvbiBCaXRCYWtlLCBzZWUgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2JpdGJha2UtdXNlci1tYW51YWwnPkJpdEJha2UgVXNlciBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gc2VlIGEgbGlzdCBvZiB0aGUgb3B0aW9ucyBCaXRCYWtlIHN1cHBvcnRzLCB1c2UgZWl0aGVyIG9mCisgICAgICAgICAgICB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWgKKyAgICAgJCBiaXRiYWtlIC0taGVscAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbW9zdCBjb21tb24gdXNhZ2UgZm9yIEJpdEJha2UgaXMgPGZpbGVuYW1lPmJpdGJha2UgPHJlcGxhY2VhYmxlPnBhY2thZ2VuYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiwgd2hlcmUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlbmFtZTwvZmlsZW5hbWU+IGlzIHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHlvdSB3YW50IHRvIGJ1aWxkCisgICAgICAgICAgICAocmVmZXJyZWQgdG8gYXMgdGhlICJ0YXJnZXQiIGluIHRoaXMgbWFudWFsKS4KKyAgICAgICAgICAgIFRoZSB0YXJnZXQgb2Z0ZW4gZXF1YXRlcyB0byB0aGUgZmlyc3QgcGFydCBvZiBhIHJlY2lwZSdzIGZpbGVuYW1lCisgICAgICAgICAgICAoZS5nLiAiZm9vIiBmb3IgYSByZWNpcGUgbmFtZWQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5mb29fMS4zLjAtcjAuYmI8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICBTbywgdG8gcHJvY2VzcyB0aGUgPGZpbGVuYW1lPm1hdGNoYm94LWRlc2t0b3BfMS4yLjMuYmI8L2ZpbGVuYW1lPiByZWNpcGUgZmlsZSwgeW91CisgICAgICAgICAgICBtaWdodCB0eXBlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBtYXRjaGJveC1kZXNrdG9wCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBTZXZlcmFsIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiA8ZmlsZW5hbWU+bWF0Y2hib3gtZGVza3RvcDwvZmlsZW5hbWU+IG1pZ2h0IGV4aXN0LgorICAgICAgICAgICAgQml0QmFrZSBjaG9vc2VzIHRoZSBvbmUgc2VsZWN0ZWQgYnkgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgWW91IGNhbiBnZXQgbW9yZSBkZXRhaWxzIGFib3V0IGhvdyBCaXRCYWtlIGNob29zZXMgYmV0d2VlbiBkaWZmZXJlbnQKKyAgICAgICAgICAgIHRhcmdldCB2ZXJzaW9ucyBhbmQgcHJvdmlkZXJzIGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjYmItYml0YmFrZS1wcmVmZXJlbmNlcyc+UHJlZmVyZW5jZXM8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIEJpdEJha2UgVXNlciBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgYWxzbyB0cmllcyB0byBleGVjdXRlIGFueSBkZXBlbmRlbnQgdGFza3MgZmlyc3QuCisgICAgICAgICAgICBTbyBmb3IgZXhhbXBsZSwgYmVmb3JlIGJ1aWxkaW5nIDxmaWxlbmFtZT5tYXRjaGJveC1kZXNrdG9wPC9maWxlbmFtZT4sIEJpdEJha2UKKyAgICAgICAgICAgIHdvdWxkIGJ1aWxkIGEgY3Jvc3MgY29tcGlsZXIgYW5kIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+IGlmIHRoZXkgaGFkIG5vdCBhbHJlYWR5CisgICAgICAgICAgICBiZWVuIGJ1aWx0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIHVzZWZ1bCBCaXRCYWtlIG9wdGlvbiB0byBjb25zaWRlciBpcyB0aGUgPGZpbGVuYW1lPi1rPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgIDxmaWxlbmFtZT4tLWNvbnRpbnVlPC9maWxlbmFtZT4gb3B0aW9uLgorICAgICAgICAgICAgVGhpcyBvcHRpb24gaW5zdHJ1Y3RzIEJpdEJha2UgdG8gdHJ5IGFuZCBjb250aW51ZSBwcm9jZXNzaW5nIHRoZSBqb2IKKyAgICAgICAgICAgIGFzIGxvbmcgYXMgcG9zc2libGUgZXZlbiBhZnRlciBlbmNvdW50ZXJpbmcgYW4gZXJyb3IuCisgICAgICAgICAgICBXaGVuIGFuIGVycm9yIG9jY3VycywgdGhlIHRhcmdldCB0aGF0CisgICAgICAgICAgICBmYWlsZWQgYW5kIHRob3NlIHRoYXQgZGVwZW5kIG9uIGl0IGNhbm5vdCBiZSByZW1hZGUuCisgICAgICAgICAgICBIb3dldmVyLCB3aGVuIHlvdSB1c2UgdGhpcyBvcHRpb24gb3RoZXIgZGVwZW5kZW5jaWVzIGNhbiBzdGlsbCBiZQorICAgICAgICAgICAgcHJvY2Vzc2VkLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1jb21wb25lbnRzLW1ldGFkYXRhJz4KKyAgICAgICAgPHRpdGxlPk1ldGFkYXRhIChSZWNpcGVzKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGaWxlcyB0aGF0IGhhdmUgdGhlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBzdWZmaXggYXJlICJyZWNpcGVzIgorICAgICAgICAgICAgZmlsZXMuCisgICAgICAgICAgICBJbiBnZW5lcmFsLCBhIHJlY2lwZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBwaWVjZSBvZgorICAgICAgICAgICAgc29mdHdhcmUuCisgICAgICAgICAgICBUaGlzIGluZm9ybWF0aW9uIGluY2x1ZGVzIHRoZSBsb2NhdGlvbiBmcm9tIHdoaWNoIHRvIGRvd25sb2FkIHRoZQorICAgICAgICAgICAgdW5hbHRlcmVkIHNvdXJjZSwgYW55IHNvdXJjZSBwYXRjaGVzIHRvIGJlIGFwcGxpZWQgdG8gdGhhdCBzb3VyY2UKKyAgICAgICAgICAgIChpZiBuZWVkZWQpLCB3aGljaCBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBhcHBseSwKKyAgICAgICAgICAgIGhvdyB0byBjb21waWxlIHRoZSBzb3VyY2UgZmlsZXMsIGFuZCBob3cgdG8gcGFja2FnZSB0aGUgY29tcGlsZWQKKyAgICAgICAgICAgIG91dHB1dC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHRlcm0gInBhY2thZ2UiIGlzIHNvbWV0aW1lcyB1c2VkIHRvIHJlZmVyIHRvIHJlY2lwZXMuIEhvd2V2ZXIsCisgICAgICAgICAgICBzaW5jZSB0aGUgd29yZCAicGFja2FnZSIgaXMgdXNlZCBmb3IgdGhlIHBhY2thZ2VkIG91dHB1dCBmcm9tIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSAoaS5lLiA8ZmlsZW5hbWU+LmlwazwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT4uZGViPC9maWxlbmFtZT4gZmlsZXMpLAorICAgICAgICAgICAgdGhpcyBkb2N1bWVudCBhdm9pZHMgdXNpbmcgdGhlIHRlcm0gInBhY2thZ2UiIHdoZW4gcmVmZXJyaW5nIHRvIHJlY2lwZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWNvbXBvbmVudHMtY2xhc3Nlcyc+CisgICAgICAgIDx0aXRsZT5DbGFzc2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENsYXNzIGZpbGVzICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikgY29udGFpbiBpbmZvcm1hdGlvbiB0aGF0CisgICAgICAgICAgICBpcyB1c2VmdWwgdG8gc2hhcmUgYmV0d2VlbgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4gZmlsZXMuCisgICAgICAgICAgICBBbiBleGFtcGxlIGlzIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXV0b3Rvb2xzJz48ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcywgd2hpY2ggY29udGFpbnMgY29tbW9uIHNldHRpbmdzIGZvciBhbnkgYXBwbGljYXRpb24gdGhhdAorICAgICAgICAgICAgQXV0b3Rvb2xzIHVzZXMuCisgICAgICAgICAgICBUaGUgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzJz5DbGFzc2VzPC9saW5rPiIgY2hhcHRlciBwcm92aWRlcworICAgICAgICAgICAgZGV0YWlscyBhYm91dCBjbGFzc2VzIGFuZCBob3cgdG8gdXNlIHRoZW0uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWNvbXBvbmVudHMtY29uZmlndXJhdGlvbic+CisgICAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBjb25maWd1cmF0aW9uIGZpbGVzICg8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPikgZGVmaW5lIHZhcmlvdXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAgICAgICAgICAgIHRoYXQgZ292ZXJuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgICAgIFRoZXNlIGZpbGVzIGZhbGwgaW50byBzZXZlcmFsIGFyZWFzIHRoYXQgZGVmaW5lIG1hY2hpbmUgY29uZmlndXJhdGlvbiBvcHRpb25zLAorICAgICAgICAgICAgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgY29tcGlsZXIgdHVuaW5nIG9wdGlvbnMsIGdlbmVyYWwgY29tbW9uIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIG9wdGlvbnMsIGFuZCB1c2VyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+LCB3aGljaCBpcyBmb3VuZAorICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluLWdlbmVyYXRpb24iPgorICAgIDx0aXRsZT5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW4gR2VuZXJhdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgZG9lcyBtb3N0IG9mIHRoZSB3b3JrIGZvciB5b3Ugd2hlbiBpdCBjb21lcyB0bworICAgICAgICBjcmVhdGluZworICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4nPmNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnM8L3VsaW5rPi4KKyAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIHNvbWUgdGVjaG5pY2FsIGJhY2tncm91bmQgb24gaG93CisgICAgICAgIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMgYXJlIGNyZWF0ZWQgYW5kIHVzZWQuCisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRvb2xjaGFpbnMsIHlvdSBjYW4gYWxzbyBzZWUgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEluIHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50IGVudmlyb25tZW50LCBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICB0b29sY2hhaW5zIGFyZSB1c2VkIHRvIGJ1aWxkIHRoZSBpbWFnZSBhbmQgYXBwbGljYXRpb25zIHRoYXQgcnVuIG9uIHRoZQorICAgICAgICB0YXJnZXQgaGFyZHdhcmUuCisgICAgICAgIFdpdGgganVzdCBhIGZldyBjb21tYW5kcywgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY3JlYXRlcworICAgICAgICB0aGVzZSBuZWNlc3NhcnkgdG9vbGNoYWlucyBmb3IgeW91LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyBhIGhpZ2gtbGV2ZWwgYnVpbGQgZW52aXJvbm1lbnQgcmVnYXJkaW5nCisgICAgICAgIHRvb2xjaGFpbiBjb25zdHJ1Y3Rpb24gYW5kIHVzZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbnMucG5nIiB3aWR0aD0iOGluIiBkZXB0aD0iNmluIiBhbGlnbj0iY2VudGVyIiAvPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBNb3N0IG9mIHRoZSB3b3JrIG9jY3VycyBvbiB0aGUgQnVpbGQgSG9zdC4KKyAgICAgICAgVGhpcyBpcyB0aGUgbWFjaGluZSB1c2VkIHRvIGJ1aWxkIGltYWdlcyBhbmQgZ2VuZXJhbGx5IHdvcmsgd2l0aGluIHRoZQorICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBlbnZpcm9ubWVudC4KKyAgICAgICAgV2hlbiB5b3UgcnVuIEJpdEJha2UgdG8gY3JlYXRlIGFuIGltYWdlLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICB1c2VzIHRoZSBob3N0IDxmaWxlbmFtZT5nY2M8L2ZpbGVuYW1lPiBjb21waWxlciB0byBib290c3RyYXAgYQorICAgICAgICBjcm9zcy1jb21waWxlciBuYW1lZCA8ZmlsZW5hbWU+Z2NjLWNyb3NzPC9maWxlbmFtZT4uCisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2NjLWNyb3NzPC9maWxlbmFtZT4gY29tcGlsZXIgaXMgd2hhdCBCaXRCYWtlIHVzZXMgdG8KKyAgICAgICAgY29tcGlsZSBzb3VyY2UgZmlsZXMgd2hlbiBjcmVhdGluZyB0aGUgdGFyZ2V0IGltYWdlLgorICAgICAgICBZb3UgY2FuIHRoaW5rIG9mIDxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPiBzaW1wbHkgYXMgYW4KKyAgICAgICAgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgY3Jvc3MtY29tcGlsZXIgdGhhdCBpcyB1c2VkIGludGVybmFsbHkgd2l0aGluCisgICAgICAgIEJpdEJha2Ugb25seS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNoYWluIG9mIGV2ZW50cyB0aGF0IG9jY3VycyB3aGVuIDxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPiBpcworICAgICAgICBib290c3RyYXBwZWQgaXMgYXMgZm9sbG93czoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBnY2MgLT4gYmludXRpbHMtY3Jvc3MgLT4gZ2NjLWNyb3NzLWluaXRpYWwgLT4gbGludXgtbGliYy1oZWFkZXJzIC0+IGdsaWJjLWluaXRpYWwgLT4gZ2xpYmMgLT4gZ2NjLWNyb3NzIC0+IGdjYy1ydW50aW1lCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIGhvc3QncyBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YmludXRpbHMtY3Jvc3M8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBUaGUgYmFyZSBtaW5pbXVtIGJpbmFyeSB1dGlsaXRpZXMgbmVlZGVkIGluIG9yZGVyIHRvIHJ1bgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Z2NjLWNyb3NzLWluaXRpYWw8L2ZpbGVuYW1lPiBwaGFzZSBvZiB0aGUKKyAgICAgICAgICAgICAgICBib290c3RyYXAgb3BlcmF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nY2MtY3Jvc3MtaW5pdGlhbDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEFuIGVhcmx5IHN0YWdlIG9mIHRoZSBib290c3RyYXAgcHJvY2VzcyBmb3IgY3JlYXRpbmcKKyAgICAgICAgICAgICAgICB0aGUgY3Jvc3MtY29tcGlsZXIuCisgICAgICAgICAgICAgICAgVGhpcyBzdGFnZSBidWlsZHMgZW5vdWdoIG9mIHRoZSA8ZmlsZW5hbWU+Z2NjLWNyb3NzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgdGhlIEMgbGlicmFyeSwgYW5kIG90aGVyIHBpZWNlcyBuZWVkZWQgdG8gZmluaXNoIGJ1aWxkaW5nIHRoZQorICAgICAgICAgICAgICAgIGZpbmFsIGNyb3NzLWNvbXBpbGVyIGluIGxhdGVyIHN0YWdlcy4KKyAgICAgICAgICAgICAgICBUaGlzIHRvb2wgaXMgYSAibmF0aXZlIiBwYWNrYWdlIChpLmUuIGl0IGlzIGRlc2lnbmVkIHRvIHJ1biBvbgorICAgICAgICAgICAgICAgIHRoZSBidWlsZCBob3N0KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+bGludXgtbGliYy1oZWFkZXJzPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgSGVhZGVycyBuZWVkZWQgZm9yIHRoZSBjcm9zcy1jb21waWxlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z2xpYmMtaW5pdGlhbDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEFuIGluaXRpYWwgdmVyc2lvbiBvZiB0aGUgRW1iZWRkZWQgR0xJQkMgbmVlZGVkIHRvIGJvb3RzdHJhcAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBUaGUgZmluYWwgc3RhZ2Ugb2YgdGhlIGJvb3RzdHJhcCBwcm9jZXNzIGZvciB0aGUKKyAgICAgICAgICAgICAgICBjcm9zcy1jb21waWxlci4KKyAgICAgICAgICAgICAgICBUaGlzIHN0YWdlIHJlc3VsdHMgaW4gdGhlIGFjdHVhbCBjcm9zcy1jb21waWxlciB0aGF0CisgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHdoZW4gaXQgYnVpbGRzIGFuIGltYWdlIGZvciBhIHRhcmdldGVkCisgICAgICAgICAgICAgICAgZGV2aWNlLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHJlcGxhY2luZyB0aGlzIGNyb3NzIGNvbXBpbGVyIHRvb2xjaGFpbgorICAgICAgICAgICAgICAgICAgICB3aXRoIGEgY3VzdG9tIHZlcnNpb24sIHlvdSBtdXN0IHJlcGxhY2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdjYy1jcm9zczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBUaGlzIHRvb2wgaXMgYWxzbyBhICJuYXRpdmUiIHBhY2thZ2UgKGkuZS4gaXQgaXMKKyAgICAgICAgICAgICAgICBkZXNpZ25lZCB0byBydW4gb24gdGhlIGJ1aWxkIGhvc3QpLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nY2MtcnVudGltZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIFJ1bnRpbWUgbGlicmFyaWVzIHJlc3VsdGluZyBmcm9tIHRoZSB0b29sY2hhaW4gYm9vdHN0cmFwcGluZworICAgICAgICAgICAgICAgIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgVGhpcyB0b29sIHByb2R1Y2VzIGEgYmluYXJ5IHRoYXQgY29uc2lzdHMgb2YgdGhlCisgICAgICAgICAgICAgICAgcnVudGltZSBsaWJyYXJpZXMgbmVlZCBmb3IgdGhlIHRhcmdldGVkIGRldmljZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIGFuIGluc3RhbGxlciBmb3IKKyAgICAgICAgdGhlIHJlbG9jYXRhYmxlIFNESyB1c2VkIHRvIGRldmVsb3AgYXBwbGljYXRpb25zLgorICAgICAgICBXaGVuIHlvdSBydW4gdGhlIGluc3RhbGxlciwgaXQgaW5zdGFsbHMgdGhlIHRvb2xjaGFpbiwgd2hpY2ggY29udGFpbnMKKyAgICAgICAgdGhlIGRldmVsb3BtZW50IHRvb2xzIChlLmcuLCB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmdjYy1jcm9zcy1jYW5hZGlhbjwvZmlsZW5hbWU+KSwKKyAgICAgICAgPGZpbGVuYW1lPmJpbnV0aWxzLWNyb3NzLWNhbmFkaWFuPC9maWxlbmFtZT4sIGFuZCBvdGhlcgorICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlc2RrLSo8L2ZpbGVuYW1lPiB0b29scyB5b3UgbmVlZCB0byBjcm9zcy1jb21waWxlIGFuZAorICAgICAgICB0ZXN0IHlvdXIgc29mdHdhcmUuCisgICAgICAgIFRoZSBmaWd1cmUgc2hvd3MgdGhlIGNvbW1hbmRzIHlvdSB1c2UgdG8gZWFzaWx5IGJ1aWxkIG91dCB0aGlzCisgICAgICAgIHRvb2xjaGFpbi4KKyAgICAgICAgVGhpcyBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gaXMgYnVpbHQgdG8gZXhlY3V0ZSBvbiB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES01BQ0hJTkUnPjxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICB3aGljaCBtaWdodCBvciBtaWdodCBub3QgYmUgdGhlIHNhbWUKKyAgICAgICAgbWFjaGluZSBhcyB0aGUgQnVpbGQgSG9zdC4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBJZiB5b3VyIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0LAorICAgICAgICAgICAgeW91IGNhbiB0YWtlIGFkdmFudGFnZSBvZiBwcmUtYnVpbHQgaW1hZ2VzIHRoYXQgc2hpcCB3aXRoIHRoZQorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBhbmQgYWxyZWFkeSBjb250YWluIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbgorICAgICAgICAgICAgaW5zdGFsbGVycy4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBIZXJlIGlzIHRoZSBib290c3RyYXAgcHJvY2VzcyBmb3IgdGhlIHJlbG9jYXRhYmxlIHRvb2xjaGFpbjoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBnY2MgLT4gYmludXRpbHMtY3Jvc3NzZGsgLT4gZ2NjLWNyb3Nzc2RrLWluaXRpYWwgLT4gbGludXgtbGliYy1oZWFkZXJzIC0+CisgICAgICAgIGdsaWJjLWluaXRpYWwgLT4gbmF0aXZlc2RrLWdsaWJjIC0+IGdjYy1jcm9zc3NkayAtPiBnY2MtY3Jvc3MtY2FuYWRpYW4KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nY2M8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgaG9zdCdzIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5iaW51dGlscy1jcm9zc3NkazwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIFRoZSBiYXJlIG1pbmltdW0gYmluYXJ5IHV0aWxpdGllcyBuZWVkZWQgaW4gb3JkZXIgdG8gcnVuCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5nY2MtY3Jvc3NzZGstaW5pdGlhbDwvZmlsZW5hbWU+IHBoYXNlIG9mIHRoZQorICAgICAgICAgICAgICAgIGJvb3RzdHJhcCBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdjYy1jcm9zc3Nkay1pbml0aWFsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQW4gZWFybHkgc3RhZ2Ugb2YgdGhlIGJvb3RzdHJhcCBwcm9jZXNzIGZvciBjcmVhdGluZworICAgICAgICAgICAgICAgIHRoZSBjcm9zcy1jb21waWxlci4KKyAgICAgICAgICAgICAgICBUaGlzIHN0YWdlIGJ1aWxkcyBlbm91Z2ggb2YgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdjYy1jcm9zc3NkazwvZmlsZW5hbWU+IGFuZCBzdXBwb3J0aW5nIHBpZWNlcyBzbyB0aGF0CisgICAgICAgICAgICAgICAgdGhlIGZpbmFsIHN0YWdlIG9mIHRoZSBib290c3RyYXAgcHJvY2VzcyBjYW4gcHJvZHVjZSB0aGUKKyAgICAgICAgICAgICAgICBmaW5pc2hlZCBjcm9zcy1jb21waWxlci4KKyAgICAgICAgICAgICAgICBUaGlzIHRvb2wgaXMgYSAibmF0aXZlIiBiaW5hcnkgdGhhdCBydW5zIG9uIHRoZSBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5saW51eC1saWJjLWhlYWRlcnM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBIZWFkZXJzIG5lZWRlZCBmb3IgdGhlIGNyb3NzLWNvbXBpbGVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nbGliYy1pbml0aWFsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQW4gaW5pdGlhbCB2ZXJzaW9uIG9mIHRoZSBFbWJlZGRlZCBHTElCQyBuZWVkZWQgdG8gYm9vdHN0cmFwCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkay1nbGliYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5uYXRpdmVzZGstZ2xpYmM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBUaGUgRW1iZWRkZWQgR0xJQkMgbmVlZGVkIHRvIGJvb3RzdHJhcCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2NjLWNyb3Nzc2RrPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdjYy1jcm9zc3NkazwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBzdGFnZSBvZiB0aGUgYm9vdHN0cmFwIHByb2Nlc3MgZm9yIHRoZQorICAgICAgICAgICAgICAgIHJlbG9jYXRhYmxlIGNyb3NzLWNvbXBpbGVyLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2NjLWNyb3Nzc2RrPC9maWxlbmFtZT4gaXMgYSB0cmFuc2l0b3J5IGNvbXBpbGVyCisgICAgICAgICAgICAgICAgYW5kIG5ldmVyIGxlYXZlcyB0aGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICBJdHMgcHVycG9zZSBpcyB0byBoZWxwIGluIHRoZSBib290c3RyYXAgcHJvY2VzcyB0byBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgZXZlbnR1YWwgcmVsb2NhdGFibGUgPGZpbGVuYW1lPmdjYy1jcm9zcy1jYW5hZGlhbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tcGlsZXIsIHdoaWNoIGlzIHJlbG9jYXRhYmxlLgorICAgICAgICAgICAgICAgIFRoaXMgdG9vbCBpcyBhbHNvIGEgIm5hdGl2ZSIgcGFja2FnZSAoaS5lLiBpdCBpcworICAgICAgICAgICAgICAgIGRlc2lnbmVkIHRvIHJ1biBvbiB0aGUgYnVpbGQgaG9zdCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdjYy1jcm9zcy1jYW5hZGlhbjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIFRoZSBmaW5hbCByZWxvY2F0YWJsZSBjcm9zcy1jb21waWxlci4KKyAgICAgICAgICAgICAgICBXaGVuIHJ1biBvbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLTUFDSElORSc+PGZpbGVuYW1lPlNES01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgdGhpcyB0b29sCisgICAgICAgICAgICAgICAgcHJvZHVjZXMgZXhlY3V0YWJsZSBjb2RlIHRoYXQgcnVucyBvbiB0aGUgdGFyZ2V0IGRldmljZS4KKyAgICAgICAgICAgICAgICBPbmx5IG9uZSBjcm9zcy1jYW5hZGlhbiBjb21waWxlciBpcyBwcm9kdWNlZCBwZXIgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgc2luY2UgdGhleSBjYW4gYmUgdGFyZ2V0ZWQgYXQgZGlmZmVyZW50IHByb2Nlc3NvciBvcHRpbWl6YXRpb25zCisgICAgICAgICAgICAgICAgdXNpbmcgY29uZmlndXJhdGlvbnMgcGFzc2VkIHRvIHRoZSBjb21waWxlciB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIGNvbXBpbGUgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgVGhpcyBjaXJjdW12ZW50cyB0aGUgbmVlZCBmb3IgbXVsdGlwbGUgY29tcGlsZXJzIGFuZCB0aHVzCisgICAgICAgICAgICAgICAgcmVkdWNlcyB0aGUgc2l6ZSBvZiB0aGUgdG9vbGNoYWlucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPG5vdGU+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhZHZhbnRhZ2VzIGdhaW5lZCB3aGVuIGJ1aWxkaW5nIGEKKyAgICAgICAgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluIGluc3RhbGxlciwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjb3B0aW9uYWxseS1idWlsZGluZy1hLXRvb2xjaGFpbi1pbnN0YWxsZXInPk9wdGlvbmFsbHkgQnVpbGRpbmcgYSBUb29sY2hhaW4gSW5zdGFsbGVyPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgPC9ub3RlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ic2hhcmVkLXN0YXRlLWNhY2hlIj4KKyAgICA8dGl0bGU+U2hhcmVkIFN0YXRlIENhY2hlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBCeSBkZXNpZ24sIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGJ1aWxkcyBldmVyeXRoaW5nIGZyb20gc2NyYXRjaCB1bmxlc3MKKyAgICAgICAgQml0QmFrZSBjYW4gZGV0ZXJtaW5lIHRoYXQgcGFydHMgZG8gbm90IG5lZWQgdG8gYmUgcmVidWlsdC4KKyAgICAgICAgRnVuZGFtZW50YWxseSwgYnVpbGRpbmcgZnJvbSBzY3JhdGNoIGlzIGF0dHJhY3RpdmUgYXMgaXQgbWVhbnMgYWxsIHBhcnRzIGFyZQorICAgICAgICBidWlsdCBmcmVzaCBhbmQgdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2Ygc3RhbGUgZGF0YSBjYXVzaW5nIHByb2JsZW1zLgorICAgICAgICBXaGVuIGRldmVsb3BlcnMgaGl0IHByb2JsZW1zLCB0aGV5IHR5cGljYWxseSBkZWZhdWx0IGJhY2sgdG8gYnVpbGRpbmcgZnJvbSBzY3JhdGNoCisgICAgICAgIHNvIHRoZXkga25vdyB0aGUgc3RhdGUgb2YgdGhpbmdzIGZyb20gdGhlIHN0YXJ0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCdWlsZGluZyBhbiBpbWFnZSBmcm9tIHNjcmF0Y2ggaXMgYm90aCBhbiBhZHZhbnRhZ2UgYW5kIGEgZGlzYWR2YW50YWdlIHRvIHRoZSBwcm9jZXNzLgorICAgICAgICBBcyBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIHBhcmFncmFwaCwgYnVpbGRpbmcgZnJvbSBzY3JhdGNoIGVuc3VyZXMgdGhhdAorICAgICAgICBldmVyeXRoaW5nIGlzIGN1cnJlbnQgYW5kIHN0YXJ0cyBmcm9tIGEga25vd24gc3RhdGUuCisgICAgICAgIEhvd2V2ZXIsIGJ1aWxkaW5nIGZyb20gc2NyYXRjaCBhbHNvIHRha2VzIG11Y2ggbG9uZ2VyIGFzIGl0IGdlbmVyYWxseSBtZWFucworICAgICAgICByZWJ1aWxkaW5nIHRoaW5ncyB0aGF0IGRvIG5vdCBuZWNlc3NhcmlseSBuZWVkIHRvIGJlIHJlYnVpbHQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGltcGxlbWVudHMgc2hhcmVkIHN0YXRlIGNvZGUgdGhhdCBzdXBwb3J0cyBpbmNyZW1lbnRhbCBidWlsZHMuCisgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2hhcmVkIHN0YXRlIGNvZGUgYW5zd2VycyB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucyB0aGF0CisgICAgICAgIHdlcmUgZnVuZGFtZW50YWwgcm9hZGJsb2NrcyB3aXRoaW4gdGhlIE9wZW5FbWJlZGRlZCBpbmNyZW1lbnRhbCBidWlsZCBzdXBwb3J0IHN5c3RlbToKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGF0IHBpZWNlcyBvZiB0aGUgc3lzdGVtIGhhdmUgY2hhbmdlZCBhbmQgd2hhdCBwaWVjZXMgaGF2ZQorICAgICAgICAgICAgICAgIG5vdCBjaGFuZ2VkPzwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkhvdyBhcmUgY2hhbmdlZCBwaWVjZXMgb2Ygc29mdHdhcmUgcmVtb3ZlZCBhbmQgcmVwbGFjZWQ/PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SG93IGFyZSBwcmUtYnVpbHQgY29tcG9uZW50cyB0aGF0IGRvIG5vdCBuZWVkIHRvIGJlIHJlYnVpbHQgZnJvbSBzY3JhdGNoCisgICAgICAgICAgICAgICAgdXNlZCB3aGVuIHRoZXkgYXJlIGF2YWlsYWJsZT88L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciB0aGUgZmlyc3QgcXVlc3Rpb24sIHRoZSBidWlsZCBzeXN0ZW0gZGV0ZWN0cyBjaGFuZ2VzIGluIHRoZSAiaW5wdXRzIiB0byBhIGdpdmVuIHRhc2sgYnkKKyAgICAgICAgY3JlYXRpbmcgYSBjaGVja3N1bSAob3Igc2lnbmF0dXJlKSBvZiB0aGUgdGFzaydzIGlucHV0cy4KKyAgICAgICAgSWYgdGhlIGNoZWNrc3VtIGNoYW5nZXMsIHRoZSBzeXN0ZW0gYXNzdW1lcyB0aGUgaW5wdXRzIGhhdmUgY2hhbmdlZCBhbmQgdGhlIHRhc2sgbmVlZHMgdG8gYmUKKyAgICAgICAgcmVydW4uCisgICAgICAgIEZvciB0aGUgc2Vjb25kIHF1ZXN0aW9uLCB0aGUgc2hhcmVkIHN0YXRlIChzc3RhdGUpIGNvZGUgdHJhY2tzIHdoaWNoIHRhc2tzIGFkZCB3aGljaCBvdXRwdXQKKyAgICAgICAgdG8gdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgIFRoaXMgbWVhbnMgdGhlIG91dHB1dCBmcm9tIGEgZ2l2ZW4gdGFzayBjYW4gYmUgcmVtb3ZlZCwgdXBncmFkZWQgb3Igb3RoZXJ3aXNlIG1hbmlwdWxhdGVkLgorICAgICAgICBUaGUgdGhpcmQgcXVlc3Rpb24gaXMgcGFydGx5IGFkZHJlc3NlZCBieSB0aGUgc29sdXRpb24gZm9yIHRoZSBzZWNvbmQgcXVlc3Rpb24KKyAgICAgICAgYXNzdW1pbmcgdGhlIGJ1aWxkIHN5c3RlbSBjYW4gZmV0Y2ggdGhlIHNzdGF0ZSBvYmplY3RzIGZyb20gcmVtb3RlIGxvY2F0aW9ucyBhbmQKKyAgICAgICAgaW5zdGFsbCB0aGVtIGlmIHRoZXkgYXJlIGRlZW1lZCB0byBiZSB2YWxpZC4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZG9lcyBub3QgbWFpbnRhaW4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvbGluaz4gaW5mb3JtYXRpb24KKyAgICAgICAgYXMgcGFydCBvZiB0aGUgc2hhcmVkIHN0YXRlIHBhY2thZ2VzLgorICAgICAgICBDb25zZXF1ZW50bHksIGNvbnNpZGVyYXRpb25zIGV4aXN0IHRoYXQgYWZmZWN0IG1haW50YWluaW5nIHNoYXJlZAorICAgICAgICBzdGF0ZSBmZWVkcy4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICB3b3JrcyB3aXRoIHBhY2thZ2VzIGFuZCBjYW4KKyAgICAgICAgdHJhY2sgaW5jcmVtZW50aW5nIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNpbmNyZW1lbnRpbmctYS1wYWNrYWdlLXJldmlzaW9uLW51bWJlcic+SW5jcmVtZW50aW5nIGEgUGFja2FnZSBSZXZpc2lvbiBOdW1iZXI8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbi4KKyAgICA8L25vdGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIHJlc3Qgb2YgdGhpcyBzZWN0aW9uIGdvZXMgaW50byBkZXRhaWwgYWJvdXQgdGhlIG92ZXJhbGwgaW5jcmVtZW50YWwgYnVpbGQKKyAgICAgICAgYXJjaGl0ZWN0dXJlLCB0aGUgY2hlY2tzdW1zIChzaWduYXR1cmVzKSwgc2hhcmVkIHN0YXRlLCBhbmQgc29tZSB0aXBzIGFuZCB0cmlja3MuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J292ZXJhbGwtYXJjaGl0ZWN0dXJlJz4KKyAgICAgICAgPHRpdGxlPk92ZXJhbGwgQXJjaGl0ZWN0dXJlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gZGV0ZXJtaW5pbmcgd2hhdCBwYXJ0cyBvZiB0aGUgc3lzdGVtIG5lZWQgdG8gYmUgYnVpbHQsIEJpdEJha2UKKyAgICAgICAgICAgIHdvcmtzIG9uIGEgcGVyLXRhc2sgYmFzaXMgcmF0aGVyIHRoYW4gYSBwZXItcmVjaXBlIGJhc2lzLgorICAgICAgICAgICAgWW91IG1pZ2h0IHdvbmRlciB3aHkgdXNpbmcgYSBwZXItdGFzayBiYXNpcyBpcyBwcmVmZXJyZWQgb3ZlciBhIHBlci1yZWNpcGUgYmFzaXMuCisgICAgICAgICAgICBUbyBoZWxwIGV4cGxhaW4sIGNvbnNpZGVyIGhhdmluZyB0aGUgSVBLIHBhY2thZ2luZyBiYWNrZW5kIGVuYWJsZWQgYW5kIHRoZW4gc3dpdGNoaW5nIHRvIERFQi4KKyAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2UnPjxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIG91dHB1dHMgYXJlIHN0aWxsIHZhbGlkLgorICAgICAgICAgICAgSG93ZXZlciwgd2l0aCBhIHBlci1yZWNpcGUgYXBwcm9hY2gsIHRoZSBidWlsZCB3b3VsZCBub3QgaW5jbHVkZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT4uZGViPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSB3b3VsZCBoYXZlIHRvIGludmFsaWRhdGUgdGhlIHdob2xlIGJ1aWxkIGFuZCByZXJ1biBpdC4KKyAgICAgICAgICAgIFJlcnVubmluZyBldmVyeXRoaW5nIGlzIG5vdCB0aGUgYmVzdCBzb2x1dGlvbi4KKyAgICAgICAgICAgIEFsc28sIGluIHRoaXMgY2FzZSwgdGhlIGNvcmUgbXVzdCBiZSAidGF1Z2h0IiBtdWNoIGFib3V0IHNwZWNpZmljIHRhc2tzLgorICAgICAgICAgICAgVGhpcyBtZXRob2RvbG9neSBkb2VzIG5vdCBzY2FsZSB3ZWxsIGFuZCBkb2VzIG5vdCBhbGxvdyB1c2VycyB0byBlYXNpbHkgYWRkIG5ldyB0YXNrcworICAgICAgICAgICAgaW4gbGF5ZXJzIG9yIGFzIGV4dGVybmFsIHJlY2lwZXMgd2l0aG91dCB0b3VjaGluZyB0aGUgcGFja2FnZWQtc3RhZ2luZyBjb3JlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2NoZWNrc3Vtcyc+CisgICAgICAgIDx0aXRsZT5DaGVja3N1bXMgKFNpZ25hdHVyZXMpPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzaGFyZWQgc3RhdGUgY29kZSB1c2VzIGEgY2hlY2tzdW0sIHdoaWNoIGlzIGEgdW5pcXVlIHNpZ25hdHVyZSBvZiBhIHRhc2sncworICAgICAgICAgICAgaW5wdXRzLCB0byBkZXRlcm1pbmUgaWYgYSB0YXNrIG5lZWRzIHRvIGJlIHJ1biBhZ2Fpbi4KKyAgICAgICAgICAgIEJlY2F1c2UgaXQgaXMgYSBjaGFuZ2UgaW4gYSB0YXNrJ3MgaW5wdXRzIHRoYXQgdHJpZ2dlcnMgYSByZXJ1biwgdGhlIHByb2Nlc3MKKyAgICAgICAgICAgIG5lZWRzIHRvIGRldGVjdCBhbGwgdGhlIGlucHV0cyB0byBhIGdpdmVuIHRhc2suCisgICAgICAgICAgICBGb3Igc2hlbGwgdGFza3MsIHRoaXMgdHVybnMgb3V0IHRvIGJlIGZhaXJseSBlYXN5IGJlY2F1c2UKKyAgICAgICAgICAgIHRoZSBidWlsZCBwcm9jZXNzIGdlbmVyYXRlcyBhICJydW4iIHNoZWxsIHNjcmlwdCBmb3IgZWFjaCB0YXNrIGFuZAorICAgICAgICAgICAgaXQgaXMgcG9zc2libGUgdG8gY3JlYXRlIGEgY2hlY2tzdW0gdGhhdCBnaXZlcyB5b3UgYSBnb29kIGlkZWEgb2Ygd2hlbgorICAgICAgICAgICAgdGhlIHRhc2sncyBkYXRhIGNoYW5nZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGNvbXBsaWNhdGUgdGhlIHByb2JsZW0sIHRoZXJlIGFyZSB0aGluZ3MgdGhhdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluCisgICAgICAgICAgICB0aGUgY2hlY2tzdW0uCisgICAgICAgICAgICBGaXJzdCwgdGhlcmUgaXMgdGhlIGFjdHVhbCBzcGVjaWZpYyBidWlsZCBwYXRoIG9mIGEgZ2l2ZW4gdGFzayAtCisgICAgICAgICAgICB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgSXQgZG9lcyBub3QgbWF0dGVyIGlmIHRoZSB3b3JrIGRpcmVjdG9yeSBjaGFuZ2VzIGJlY2F1c2UgaXQgc2hvdWxkIG5vdAorICAgICAgICAgICAgYWZmZWN0IHRoZSBvdXRwdXQgZm9yIHRhcmdldCBwYWNrYWdlcy4KKyAgICAgICAgICAgIEFsc28sIHRoZSBidWlsZCBwcm9jZXNzIGhhcyB0aGUgb2JqZWN0aXZlIG9mIG1ha2luZyBuYXRpdmUgb3IgY3Jvc3MgcGFja2FnZXMgcmVsb2NhdGFibGUuCisgICAgICAgICAgICBUaGUgY2hlY2tzdW0gdGhlcmVmb3JlIG5lZWRzIHRvIGV4Y2x1ZGUgPGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoZSBzaW1wbGlzdGljIGFwcHJvYWNoIGZvciBleGNsdWRpbmcgdGhlIHdvcmsgZGlyZWN0b3J5IGlzIHRvIHNldAorICAgICAgICAgICAgPGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPiB0byBzb21lIGZpeGVkIHZhbHVlIGFuZCBjcmVhdGUgdGhlIGNoZWNrc3VtCisgICAgICAgICAgICBmb3IgdGhlICJydW4iIHNjcmlwdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW5vdGhlciBwcm9ibGVtIHJlc3VsdHMgZnJvbSB0aGUgInJ1biIgc2NyaXB0cyBjb250YWluaW5nIGZ1bmN0aW9ucyB0aGF0CisgICAgICAgICAgICBtaWdodCBvciBtaWdodCBub3QgZ2V0IGNhbGxlZC4KKyAgICAgICAgICAgIFRoZSBpbmNyZW1lbnRhbCBidWlsZCBzb2x1dGlvbiBjb250YWlucyBjb2RlIHRoYXQgZmlndXJlcyBvdXQgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBiZXR3ZWVuIHNoZWxsIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgIFRoaXMgY29kZSBpcyB1c2VkIHRvIHBydW5lIHRoZSAicnVuIiBzY3JpcHRzIGRvd24gdG8gdGhlIG1pbmltdW0gc2V0LAorICAgICAgICAgICAgdGhlcmVieSBhbGxldmlhdGluZyB0aGlzIHByb2JsZW0gYW5kIG1ha2luZyB0aGUgInJ1biIgc2NyaXB0cyBtdWNoIG1vcmUKKyAgICAgICAgICAgIHJlYWRhYmxlIGFzIGEgYm9udXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvIGZhciB3ZSBoYXZlIHNvbHV0aW9ucyBmb3Igc2hlbGwgc2NyaXB0cy4KKyAgICAgICAgICAgIFdoYXQgYWJvdXQgUHl0aG9uIHRhc2tzPworICAgICAgICAgICAgVGhlIHNhbWUgYXBwcm9hY2ggYXBwbGllcyBldmVuIHRob3VnaCB0aGVzZSB0YXNrcyBhcmUgbW9yZSBkaWZmaWN1bHQuCisgICAgICAgICAgICBUaGUgcHJvY2VzcyBuZWVkcyB0byBmaWd1cmUgb3V0IHdoYXQgdmFyaWFibGVzIGEgUHl0aG9uIGZ1bmN0aW9uIGFjY2Vzc2VzCisgICAgICAgICAgICBhbmQgd2hhdCBmdW5jdGlvbnMgaXQgY2FsbHMuCisgICAgICAgICAgICBBZ2FpbiwgdGhlIGluY3JlbWVudGFsIGJ1aWxkIHNvbHV0aW9uIGNvbnRhaW5zIGNvZGUgdGhhdCBmaXJzdCBmaWd1cmVzIG91dAorICAgICAgICAgICAgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBkZXBlbmRlbmNpZXMsIGFuZCB0aGVuIGNyZWF0ZXMgYSBjaGVja3N1bSBmb3IgdGhlIGRhdGEKKyAgICAgICAgICAgIHVzZWQgYXMgdGhlIGlucHV0IHRvIHRoZSB0YXNrLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBMaWtlIHRoZSA8ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+IGNhc2UsIHNpdHVhdGlvbnMgZXhpc3Qgd2hlcmUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBzaG91bGQgYmUgaWdub3JlZC4KKyAgICAgICAgICAgIEZvciB0aGVzZSBjYXNlcywgeW91IGNhbiBpbnN0cnVjdCB0aGUgYnVpbGQgcHJvY2VzcyB0byBpZ25vcmUgYSBkZXBlbmRlbmN5CisgICAgICAgICAgICBieSB1c2luZyBhIGxpbmUgbGlrZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFX0FSQ0hTW3ZhcmRlcHNleGNsdWRlXSA9ICJNQUNISU5FIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIGVuc3VyZXMgdGhhdCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0FSQ0hTJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgZG9lcyBub3QKKyAgICAgICAgICAgIGRlcGVuZCBvbiB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgIGV2ZW4gaWYgaXQgZG9lcyByZWZlcmVuY2UgaXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEVxdWFsbHksIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRvIGFkZCBkZXBlbmRlbmNpZXMgQml0QmFrZSBpcyBub3QgYWJsZSB0byBmaW5kLgorICAgICAgICAgICAgWW91IGNhbiBhY2NvbXBsaXNoIHRoaXMgYnkgdXNpbmcgYSBsaW5lIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIFBBQ0tBR0VfQVJDSFNbdmFyZGVwc10gPSAiTUFDSElORSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBleHBsaWNpdGx5IGFkZHMgdGhlIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4gdmFyaWFibGUgYXMgYQorICAgICAgICAgICAgZGVwZW5kZW5jeSBmb3IgPGZpbGVuYW1lPlBBQ0tBR0VfQVJDSFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29uc2lkZXIgYSBjYXNlIHdpdGggaW4tbGluZSBQeXRob24sIGZvciBleGFtcGxlLCB3aGVyZSBCaXRCYWtlIGlzIG5vdAorICAgICAgICAgICAgYWJsZSB0byBmaWd1cmUgb3V0IGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIFdoZW4gcnVubmluZyBpbiBkZWJ1ZyBtb2RlIChpLmUuIHVzaW5nIDxmaWxlbmFtZT4tREREPC9maWxlbmFtZT4pLCBCaXRCYWtlCisgICAgICAgICAgICBwcm9kdWNlcyBvdXRwdXQgd2hlbiBpdCBkaXNjb3ZlcnMgc29tZXRoaW5nIGZvciB3aGljaCBpdCBjYW5ub3QgZmlndXJlIG91dAorICAgICAgICAgICAgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgdGVhbSBoYXMgY3VycmVudGx5IG5vdCBtYW5hZ2VkIHRvIGNvdmVyIHRob3NlIGRlcGVuZGVuY2llcworICAgICAgICAgICAgaW4gZGV0YWlsIGFuZCBpcyBhd2FyZSBvZiB0aGUgbmVlZCB0byBmaXggdGhpcyBzaXR1YXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRodXMgZmFyLCB0aGlzIHNlY3Rpb24gaGFzIGxpbWl0ZWQgZGlzY3Vzc2lvbiB0byB0aGUgZGlyZWN0IGlucHV0cyBpbnRvIGEgdGFzay4KKyAgICAgICAgICAgIEluZm9ybWF0aW9uIGJhc2VkIG9uIGRpcmVjdCBpbnB1dHMgaXMgcmVmZXJyZWQgdG8gYXMgdGhlICJiYXNlaGFzaCIgaW4gdGhlCisgICAgICAgICAgICBjb2RlLgorICAgICAgICAgICAgSG93ZXZlciwgdGhlcmUgaXMgc3RpbGwgdGhlIHF1ZXN0aW9uIG9mIGEgdGFzaydzIGluZGlyZWN0IGlucHV0cyAtIHRoZQorICAgICAgICAgICAgdGhpbmdzIHRoYXQgd2VyZSBhbHJlYWR5IGJ1aWx0IGFuZCBwcmVzZW50IGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIFRoZSBjaGVja3N1bSAob3Igc2lnbmF0dXJlKSBmb3IgYSBwYXJ0aWN1bGFyIHRhc2sgbmVlZHMgdG8gYWRkIHRoZSBoYXNoZXMKKyAgICAgICAgICAgIG9mIGFsbCB0aGUgdGFza3Mgb24gd2hpY2ggdGhlIHBhcnRpY3VsYXIgdGFzayBkZXBlbmRzLgorICAgICAgICAgICAgQ2hvb3Npbmcgd2hpY2ggZGVwZW5kZW5jaWVzIHRvIGFkZCBpcyBhIHBvbGljeSBkZWNpc2lvbi4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBlZmZlY3QgaXMgdG8gZ2VuZXJhdGUgYSBtYXN0ZXIgY2hlY2tzdW0gdGhhdCBjb21iaW5lcyB0aGUgYmFzZWhhc2gKKyAgICAgICAgICAgIGFuZCB0aGUgaGFzaGVzIG9mIHRoZSB0YXNrJ3MgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBdCB0aGUgY29kZSBsZXZlbCwgdGhlcmUgYXJlIGEgdmFyaWV0eSBvZiB3YXlzIGJvdGggdGhlIGJhc2VoYXNoIGFuZCB0aGUKKyAgICAgICAgICAgIGRlcGVuZGVudCB0YXNrIGhhc2hlcyBjYW4gYmUgaW5mbHVlbmNlZC4KKyAgICAgICAgICAgIFdpdGhpbiB0aGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUsIHdlIGNhbiBnaXZlIEJpdEJha2Ugc29tZSBleHRyYSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgdG8gaGVscCBpdCBjb25zdHJ1Y3QgdGhlIGJhc2VoYXNoLgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQgZWZmZWN0aXZlbHkgcmVzdWx0cyBpbiBhIGxpc3Qgb2YgZ2xvYmFsIHZhcmlhYmxlCisgICAgICAgICAgICBkZXBlbmRlbmN5IGV4Y2x1ZGVzIC0gdmFyaWFibGVzIG5ldmVyIGluY2x1ZGVkIGluIGFueSBjaGVja3N1bToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfSEFTSEJBU0VfV0hJVEVMSVNUID89ICJUTVBESVIgRklMRSBQQVRIIFBXRCBCQl9UQVNLSEFTSCBCQlBBVEggRExfRElSIFwKKyAgICAgICAgIFNTVEFURV9ESVIgVEhJU0RJUiBGSUxFU0VYVFJBUEFUSFMgRklMRV9ESVJOQU1FIEhPTUUgTE9HTkFNRSBTSEVMTCBURVJNIFwKKyAgICAgICAgIFVTRVIgRklMRVNQQVRIIFNUQUdJTkdfRElSX0hPU1QgU1RBR0lOR19ESVJfVEFSR0VUIENPUkVCQVNFIFBSU0VSVl9IT1NUIFwKKyAgICAgICAgIFBSU0VSVl9EVU1QRElSIFBSU0VSVl9EVU1QRklMRSBQUlNFUlZfTE9DS0RPV04gUEFSQUxMRUxfTUFLRSBcCisgICAgICAgICBDQ0FDSEVfRElSIEVYVEVSTkFMX1RPT0xDSEFJTiBDQ0FDSEUgQ0NBQ0hFX0RJU0FCTEUgTElDRU5TRV9QQVRIIFNES1BLR1NVRkZJWCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIGV4Y2x1ZGVzCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHNpbmNlIHRoYXQgdmFyaWFibGUgaXMgYWN0dWFsbHkgY29uc3RydWN0ZWQgYXMgYSBwYXRoIHdpdGhpbgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPiwgd2hpY2ggaXMgb24KKyAgICAgICAgICAgIHRoZSB3aGl0ZWxpc3QuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBydWxlcyBmb3IgZGVjaWRpbmcgd2hpY2ggaGFzaGVzIG9mIGRlcGVuZGVudCB0YXNrcyB0byBpbmNsdWRlIHRocm91Z2gKKyAgICAgICAgICAgIGRlcGVuZGVuY3kgY2hhaW5zIGFyZSBtb3JlIGNvbXBsZXggYW5kIGFyZSBnZW5lcmFsbHkgYWNjb21wbGlzaGVkIHdpdGggYQorICAgICAgICAgICAgUHl0aG9uIGZ1bmN0aW9uLgorICAgICAgICAgICAgVGhlIGNvZGUgaW4gPGZpbGVuYW1lPm1ldGEvbGliL29lL3NzdGF0ZXNpZy5weTwvZmlsZW5hbWU+IHNob3dzIHR3byBleGFtcGxlcworICAgICAgICAgICAgb2YgdGhpcyBhbmQgYWxzbyBpbGx1c3RyYXRlcyBob3cgeW91IGNhbiBpbnNlcnQgeW91ciBvd24gcG9saWN5IGludG8gdGhlIHN5c3RlbQorICAgICAgICAgICAgaWYgc28gZGVzaXJlZC4KKyAgICAgICAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB0d28gYmFzaWMgc2lnbmF0dXJlIGdlbmVyYXRvcnMgPGZpbGVuYW1lPk9FLUNvcmU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdXNlczogICJPRUJhc2ljIiBhbmQgIk9FQmFzaWNIYXNoIi4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZXJlIGlzIGEgZHVtbXkgIm5vb3AiIHNpZ25hdHVyZSBoYW5kbGVyIGVuYWJsZWQgaW4gQml0QmFrZS4KKyAgICAgICAgICAgIFRoaXMgbWVhbnMgdGhhdCBiZWhhdmlvciBpcyB1bmNoYW5nZWQgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucy4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5PRS1Db3JlPC9maWxlbmFtZT4gdXNlcyB0aGUgIk9FQmFzaWNIYXNoIiBzaWduYXR1cmUgaGFuZGxlciBieSBkZWZhdWx0CisgICAgICAgICAgICB0aHJvdWdoIHRoaXMgc2V0dGluZyBpbiB0aGUgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX1NJR05BVFVSRV9IQU5ETEVSID89ICJPRUJhc2ljSGFzaCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSAiT0VCYXNpY0hhc2giIDxmaWxlbmFtZT5CQl9TSUdOQVRVUkVfSEFORExFUjwvZmlsZW5hbWU+IGlzIHRoZSBzYW1lIGFzIHRoZQorICAgICAgICAgICAgIk9FQmFzaWMiIHZlcnNpb24gYnV0IGFkZHMgdGhlIHRhc2sgaGFzaCB0byB0aGUgc3RhbXAgZmlsZXMuCisgICAgICAgICAgICBUaGlzIHJlc3VsdHMgaW4gYW55CisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPgorICAgICAgICAgICAgY2hhbmdlIHRoYXQgY2hhbmdlcyB0aGUgdGFzayBoYXNoLCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICBjYXVzaW5nIHRoZSB0YXNrIHRvIGJlIHJ1biBhZ2Fpbi4KKyAgICAgICAgICAgIFRoaXMgcmVtb3ZlcyB0aGUgbmVlZCB0byBidW1wIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YWx1ZXMsIGFuZCBjaGFuZ2VzIHRvIE1ldGFkYXRhIGF1dG9tYXRpY2FsbHkgcmlwcGxlIGFjcm9zcyB0aGUgYnVpbGQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEl0IGlzIGFsc28gd29ydGggbm90aW5nIHRoYXQgdGhlIGVuZCByZXN1bHQgb2YgdGhlc2Ugc2lnbmF0dXJlIGdlbmVyYXRvcnMgaXMgdG8KKyAgICAgICAgICAgIG1ha2Ugc29tZSBkZXBlbmRlbmN5IGFuZCBoYXNoIGluZm9ybWF0aW9uIGF2YWlsYWJsZSB0byB0aGUgYnVpbGQuCisgICAgICAgICAgICBUaGlzIGluZm9ybWF0aW9uIGluY2x1ZGVzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX0JBU0VIQVNIX3Rhc2stPC9maWxlbmFtZT48cmVwbGFjZWFibGU+dGFza25hbWU8L3JlcGxhY2VhYmxlPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2UgaGFzaGVzIGZvciBlYWNoIHRhc2sgaW4gdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQl9CQVNFSEFTSF88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5maWxlbmFtZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPjo8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBoYXNoZXMgZm9yIGVhY2ggZGVwZW5kZW50IHRhc2suCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJIQVNIREVQU188L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5maWxlbmFtZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPjo8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgdGFzayBkZXBlbmRlbmNpZXMgZm9yIGVhY2ggdGFzay4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQl9UQVNLSEFTSDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgaGFzaCBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzaGFyZWQtc3RhdGUnPgorICAgICAgICA8dGl0bGU+U2hhcmVkIFN0YXRlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENoZWNrc3VtcyBhbmQgZGVwZW5kZW5jaWVzLCBhcyBkaXNjdXNzZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIHNvbHZlIGhhbGYgdGhlCisgICAgICAgICAgICBwcm9ibGVtIG9mIHN1cHBvcnRpbmcgYSBzaGFyZWQgc3RhdGUuCisgICAgICAgICAgICBUaGUgb3RoZXIgcGFydCBvZiB0aGUgcHJvYmxlbSBpcyBiZWluZyBhYmxlIHRvIHVzZSBjaGVja3N1bSBpbmZvcm1hdGlvbiBkdXJpbmcgdGhlIGJ1aWxkCisgICAgICAgICAgICBhbmQgYmVpbmcgYWJsZSB0byByZXVzZSBvciByZWJ1aWxkIHNwZWNpZmljIGNvbXBvbmVudHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3N0YXRlJz48ZmlsZW5hbWU+c3N0YXRlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcyBpcyBhIHJlbGF0aXZlbHkgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBob3cgdG8gImNhcHR1cmUiCisgICAgICAgICAgICBhIHNuYXBzaG90IG9mIGEgZ2l2ZW4gdGFzay4KKyAgICAgICAgICAgIFRoZSBpZGVhIGlzIHRoYXQgdGhlIGJ1aWxkIHByb2Nlc3MgZG9lcyBub3QgY2FyZSBhYm91dCB0aGUgc291cmNlIG9mIGEgdGFzaydzIG91dHB1dC4KKyAgICAgICAgICAgIE91dHB1dCBjb3VsZCBiZSBmcmVzaGx5IGJ1aWx0IG9yIGl0IGNvdWxkIGJlIGRvd25sb2FkZWQgYW5kIHVucGFja2VkIGZyb20KKyAgICAgICAgICAgIHNvbWV3aGVyZSAtIHRoZSBidWlsZCBwcm9jZXNzIGRvZXMgbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgaXRzIG9yaWdpbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBvdXRwdXQsIG9uZSBpcyBqdXN0IGFib3V0IGNyZWF0aW5nIGEgZGlyZWN0b3J5CisgICAgICAgICAgICBpbiA8bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICBBIGdvb2QgZXhhbXBsZSBpcyB0aGUgb3V0cHV0IG9mIGVpdGhlcgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBvcgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2UnPjxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgVGhlIG90aGVyIHR5cGUgb2Ygb3V0cHV0IG9jY3VycyB3aGVuIGEgc2V0IG9mIGRhdGEgaXMgbWVyZ2VkIGludG8gYSBzaGFyZWQgZGlyZWN0b3J5CisgICAgICAgICAgICB0cmVlIHN1Y2ggYXMgdGhlIHN5c3Jvb3QuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHRlYW0gaGFzIHRyaWVkIHRvIGtlZXAgdGhlIGRldGFpbHMgb2YgdGhlCisgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBoaWRkZW4gaW4gPGZpbGVuYW1lPnNzdGF0ZTwvZmlsZW5hbWU+IGNsYXNzLgorICAgICAgICAgICAgRnJvbSBhIHVzZXIncyBwZXJzcGVjdGl2ZSwgYWRkaW5nIHNoYXJlZCBzdGF0ZSB3cmFwcGluZyB0byBhIHRhc2sKKyAgICAgICAgICAgIGlzIGFzIHNpbXBsZSBhcyB0aGlzCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtZGVwbG95Jz48ZmlsZW5hbWU+ZG9fZGVwbG95PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBleGFtcGxlIHRha2VuIGZyb20gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kZXBsb3knPjxmaWxlbmFtZT5kZXBsb3k8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBMT1lESVIgPSAiJHtXT1JLRElSfS9kZXBsb3ktJHtQTn0iCisgICAgIFNTVEFURVRBU0tTICs9ICJkb19kZXBsb3kiCisgICAgIGRvX2RlcGxveVtzc3RhdGUtbmFtZV0gPSAiZGVwbG95IgorICAgICBkb19kZXBsb3lbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtERVBMT1lESVJ9IgorICAgICBkb19kZXBsb3lbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7REVQTE9ZX0RJUl9JTUFHRX0iCisKKyAgICAgcHl0aG9uIGRvX2RlcGxveV9zZXRzY2VuZSAoKSB7CisgICAgICAgICBzc3RhdGVfc2V0c2NlbmUoZCkKKyAgICAgfQorICAgICBhZGR0YXNrIGRvX2RlcGxveV9zZXRzY2VuZQorICAgICBkb19kZXBsb3lbZGlyc10gPSAiJHtERVBMT1lESVJ9ICR7Qn0iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHdlIGFkZCBzb21lIGV4dHJhIGZsYWdzIHRvIHRoZSB0YXNrLCBhIG5hbWUgZmllbGQgKCJkZXBsb3kiKSwgYW4KKyAgICAgICAgICAgIGlucHV0IGRpcmVjdG9yeSB3aGVyZSB0aGUgdGFzayBzZW5kcyBkYXRhLCBhbmQgdGhlIG91dHB1dAorICAgICAgICAgICAgZGlyZWN0b3J5IHdoZXJlIHRoZSBkYXRhIGZyb20gdGhlIHRhc2sgc2hvdWxkIGV2ZW50dWFsbHkgYmUgY29waWVkLgorICAgICAgICAgICAgV2UgYWxzbyBhZGQgYSA8ZmlsZW5hbWU+X3NldHNjZW5lPC9maWxlbmFtZT4gdmFyaWFudCBvZiB0aGUgdGFzayBhbmQgYWRkIHRoZSB0YXNrCisgICAgICAgICAgICBuYW1lIHRvIHRoZSA8ZmlsZW5hbWU+U1NUQVRFVEFTS1M8L2ZpbGVuYW1lPiBsaXN0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgaGF2ZSBhIGRpcmVjdG9yeSB3aG9zZSBjb250ZW50cyB5b3UgbmVlZCB0byBwcmVzZXJ2ZSwgeW91IGNhbiBkbyB0aGlzIHdpdGgKKyAgICAgICAgICAgIGEgbGluZSBsaWtlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX3BhY2thZ2Vbc3N0YXRlLXBsYWluZGlyc10gPSAiJHtQS0dEfSAke1BLR0RFU1R9IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBtZXRob2QsIGFzIHdlbGwgYXMgdGhlIGZvbGxvd2luZyBleGFtcGxlLCBhbHNvIHdvcmtzIGZvciBtdWx0aXBsZSBkaXJlY3Rvcmllcy4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZG9fcGFja2FnZVtzc3RhdGUtaW5wdXRkaXJzXSA9ICIke1BLR0RFU1RXT1JLfSAke1NITElCU1dPUktESVJ9IgorICAgICBkb19wYWNrYWdlW3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke1BLR0RBVEFfRElSfSAke1NITElCU0RJUn0iCisgICAgIGRvX3BhY2thZ2Vbc3N0YXRlLWxvY2tmaWxlXSA9ICIke1BBQ0tBR0VMT0NLfSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZXNlIG1ldGhvZHMgYWxzbyBpbmNsdWRlIHRoZSBhYmlsaXR5IHRvIHRha2UgYSBsb2NrZmlsZSB3aGVuIG1hbmlwdWxhdGluZworICAgICAgICAgICAgc2hhcmVkIHN0YXRlIGRpcmVjdG9yeSBzdHJ1Y3R1cmVzIHNpbmNlIHNvbWUgY2FzZXMgYXJlIHNlbnNpdGl2ZSB0byBmaWxlCisgICAgICAgICAgICBhZGRpdGlvbnMgb3IgcmVtb3ZhbHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlaGluZCB0aGUgc2NlbmVzLCB0aGUgc2hhcmVkIHN0YXRlIGNvZGUgd29ya3MgYnkgbG9va2luZyBpbgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9ESVInPjxmaWxlbmFtZT5TU1RBVEVfRElSPC9maWxlbmFtZT48L2xpbms+IGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9NSVJST1JTJz48ZmlsZW5hbWU+U1NUQVRFX01JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGZvciBzaGFyZWQgc3RhdGUgZmlsZXMuCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNTVEFURV9NSVJST1JTID89ICJcCisgICAgIGZpbGU6Ly8uKiBodHRwOi8vc29tZXNlcnZlci50bGQvc2hhcmUvc3N0YXRlL1BBVEggXG4gXAorICAgICBmaWxlOi8vLiogZmlsZTovLy9zb21lL2xvY2FsL2Rpci9zc3RhdGUvUEFUSCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBzaGFyZWQgc3RhdGUgZGlyZWN0b3J5ICg8ZmlsZW5hbWU+U1NUQVRFX0RJUjwvZmlsZW5hbWU+KSBpcworICAgICAgICAgICAgICAgIG9yZ2FuaXplZCBpbnRvIHR3by1jaGFyYWN0ZXIgc3ViZGlyZWN0b3JpZXMsIHdoZXJlIHRoZSBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBuYW1lcyBhcmUgYmFzZWQgb24gdGhlIGZpcnN0IHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBoYXNoLgorICAgICAgICAgICAgICAgIElmIHRoZSBzaGFyZWQgc3RhdGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgYSBtaXJyb3IgaGFzIHRoZQorICAgICAgICAgICAgICAgIHNhbWUgc3RydWN0dXJlIGFzIDxmaWxlbmFtZT5TU1RBVEVfRElSPC9maWxlbmFtZT4sIHlvdSBtdXN0CisgICAgICAgICAgICAgICAgc3BlY2lmeSAiUEFUSCIgYXMgcGFydCBvZiB0aGUgVVJJIHRvIGVuYWJsZSB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgdG8gbWFwIHRvIHRoZSBhcHByb3ByaWF0ZSBzdWJkaXJlY3RvcnkuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzaGFyZWQgc3RhdGUgcGFja2FnZSB2YWxpZGl0eSBjYW4gYmUgZGV0ZWN0ZWQganVzdCBieSBsb29raW5nIGF0IHRoZQorICAgICAgICAgICAgZmlsZW5hbWUgc2luY2UgdGhlIGZpbGVuYW1lIGNvbnRhaW5zIHRoZSB0YXNrIGNoZWNrc3VtIChvciBzaWduYXR1cmUpIGFzCisgICAgICAgICAgICBkZXNjcmliZWQgZWFybGllciBpbiB0aGlzIHNlY3Rpb24uCisgICAgICAgICAgICBJZiBhIHZhbGlkIHNoYXJlZCBzdGF0ZSBwYWNrYWdlIGlzIGZvdW5kLCB0aGUgYnVpbGQgcHJvY2VzcyBkb3dubG9hZHMgaXQKKyAgICAgICAgICAgIGFuZCB1c2VzIGl0IHRvIGFjY2VsZXJhdGUgdGhlIHRhc2suCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBidWlsZCBwcm9jZXNzZXMgdXNlIHRoZSA8ZmlsZW5hbWU+Kl9zZXRzY2VuZTwvZmlsZW5hbWU+IHRhc2tzCisgICAgICAgICAgICBmb3IgdGhlIHRhc2sgYWNjZWxlcmF0aW9uIHBoYXNlLgorICAgICAgICAgICAgQml0QmFrZSBnb2VzIHRocm91Z2ggdGhpcyBwaGFzZSBiZWZvcmUgdGhlIG1haW4gZXhlY3V0aW9uIGNvZGUgYW5kIHRyaWVzCisgICAgICAgICAgICB0byBhY2NlbGVyYXRlIGFueSB0YXNrcyBmb3Igd2hpY2ggaXQgY2FuIGZpbmQgc2hhcmVkIHN0YXRlIHBhY2thZ2VzLgorICAgICAgICAgICAgSWYgYSBzaGFyZWQgc3RhdGUgcGFja2FnZSBmb3IgYSB0YXNrIGlzIGF2YWlsYWJsZSwgdGhlIHNoYXJlZCBzdGF0ZQorICAgICAgICAgICAgcGFja2FnZSBpcyB1c2VkLgorICAgICAgICAgICAgVGhpcyBtZWFucyB0aGUgdGFzayBhbmQgYW55IHRhc2tzIG9uIHdoaWNoIGl0IGlzIGRlcGVuZGVudCBhcmUgbm90CisgICAgICAgICAgICBleGVjdXRlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgYSByZWFsIHdvcmxkIGV4YW1wbGUsIHRoZSBhaW0gaXMgd2hlbiBidWlsZGluZyBhbiBJUEstYmFzZWQgaW1hZ2UsCisgICAgICAgICAgICBvbmx5IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfaXBrJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV9pcGs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRhc2tzIHdvdWxkIGhhdmUgdGhlaXIKKyAgICAgICAgICAgIHNoYXJlZCBzdGF0ZSBwYWNrYWdlcyBmZXRjaGVkIGFuZCBleHRyYWN0ZWQuCisgICAgICAgICAgICBTaW5jZSB0aGUgc3lzcm9vdCBpcyBub3QgdXNlZCwgaXQgd291bGQgbmV2ZXIgZ2V0IGV4dHJhY3RlZC4KKyAgICAgICAgICAgIFRoaXMgaXMgYW5vdGhlciByZWFzb24gd2h5IGEgdGFzay1iYXNlZCBhcHByb2FjaCBpcyBwcmVmZXJyZWQgb3ZlciBhCisgICAgICAgICAgICByZWNpcGUtYmFzZWQgYXBwcm9hY2gsIHdoaWNoIHdvdWxkIGhhdmUgdG8gaW5zdGFsbCB0aGUgb3V0cHV0IGZyb20gZXZlcnkgdGFzay4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd0aXBzLWFuZC10cmlja3MnPgorICAgICAgICA8dGl0bGU+VGlwcyBhbmQgVHJpY2tzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBjb2RlIGluIHRoZSBidWlsZCBzeXN0ZW0gdGhhdCBzdXBwb3J0cyBpbmNyZW1lbnRhbCBidWlsZHMgaXMgbm90CisgICAgICAgICAgICBzaW1wbGUgY29kZS4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBzb21lIHRpcHMgYW5kIHRyaWNrcyB0aGF0IGhlbHAgeW91IHdvcmsgYXJvdW5kCisgICAgICAgICAgICBpc3N1ZXMgcmVsYXRlZCB0byBzaGFyZWQgc3RhdGUgY29kZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkZWJ1Z2dpbmcnPgorICAgICAgICAgICAgPHRpdGxlPkRlYnVnZ2luZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gdGhpbmdzIGdvIHdyb25nLCBkZWJ1Z2dpbmcgbmVlZHMgdG8gYmUgc3RyYWlnaHRmb3J3YXJkLgorICAgICAgICAgICAgICAgIEJlY2F1c2Ugb2YgdGhpcywgdGhlIFlvY3RvIFByb2plY3QgaW5jbHVkZXMgc3Ryb25nIGRlYnVnZ2luZworICAgICAgICAgICAgICAgIHRvb2xzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGVuZXZlciBhIHNoYXJlZCBzdGF0ZSBwYWNrYWdlIGlzIHdyaXR0ZW4gb3V0LCBzbyBpcyBhCisgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIDxmaWxlbmFtZT4uc2lnaW5mbzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHByYWN0aWNlIHJlc3VsdHMgaW4gYSBwaWNrbGVkIFB5dGhvbiBkYXRhYmFzZSBvZiBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtZXRhZGF0YSB0aGF0IHdlbnQgaW50byBjcmVhdGluZyB0aGUgaGFzaCBmb3IgYSBnaXZlbiBzaGFyZWQgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JZiB5b3UgcnVuIEJpdEJha2Ugd2l0aCB0aGUgPGZpbGVuYW1lPi0tZHVtcC1zaWduYXR1cmVzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIChvciA8ZmlsZW5hbWU+LVM8L2ZpbGVuYW1lPikgb3B0aW9uLCBCaXRCYWtlIGR1bXBzIG91dAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5zaWdpbmZvPC9maWxlbmFtZT4gZmlsZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzdGFtcCBkaXJlY3RvcnkgZm9yIGV2ZXJ5IHRhc2sgaXQgd291bGQgaGF2ZSBleGVjdXRlZCBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGluZyB0aGUgc3BlY2lmaWVkIHRhcmdldCBwYWNrYWdlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlcmUgaXMgYSA8ZmlsZW5hbWU+Yml0YmFrZS1kaWZmc2lnczwvZmlsZW5hbWU+IGNvbW1hbmQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgY2FuIHByb2Nlc3MgPGZpbGVuYW1lPi5zaWdpbmZvPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugc3BlY2lmeSBvbmUgb2YgdGhlc2UgZmlsZXMsIEJpdEJha2UgZHVtcHMgb3V0IHRoZSBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBzcGVjaWZ5IHR3byBmaWxlcywgQml0QmFrZSBjb21wYXJlcyB0aGUgdHdvIGZpbGVzIGFuZCBkdW1wcyBvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB0d28uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1vcmUgZWFzaWx5IGhlbHBzIGFuc3dlciB0aGUgcXVlc3Rpb24gb2YgIldoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgYmV0d2VlbiBYIGFuZCBZPyI8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbnZhbGlkYXRpbmctc2hhcmVkLXN0YXRlJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbnZhbGlkYXRpbmcgU2hhcmVkIFN0YXRlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyBjaGVja3N1bXMgYW5kIHNoYXJlZCBzdGF0ZQorICAgICAgICAgICAgICAgIGNhY2hlIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcmVidWlsZGluZyB0YXNrcy4KKyAgICAgICAgICAgICAgICBDb2xsZWN0aXZlbHksIHRoaXMgc2NoZW1lIGlzIGtub3duIGFzICJzaGFyZWQgc3RhdGUgY29kZS4iCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIHdpdGggYWxsIHNjaGVtZXMsIHRoaXMgb25lIGhhcyBzb21lIGRyYXdiYWNrcy4KKyAgICAgICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0aGF0IHlvdSBjb3VsZCBtYWtlIGltcGxpY2l0IGNoYW5nZXMgdG8geW91cgorICAgICAgICAgICAgICAgIGNvZGUgdGhhdCB0aGUgY2hlY2tzdW0gY2FsY3VsYXRpb25zIGRvIG5vdCB0YWtlIGludG8KKyAgICAgICAgICAgICAgICBhY2NvdW50LgorICAgICAgICAgICAgICAgIFRoZXNlIGltcGxpY2l0IGNoYW5nZXMgYWZmZWN0IGEgdGFzaydzIG91dHB1dCBidXQgZG8gbm90IHRyaWdnZXIKKyAgICAgICAgICAgICAgICB0aGUgc2hhcmVkIHN0YXRlIGNvZGUgaW50byByZWJ1aWxkaW5nIGEgcmVjaXBlLgorICAgICAgICAgICAgICAgIENvbnNpZGVyIGFuIGV4YW1wbGUgZHVyaW5nIHdoaWNoIGEgdG9vbCBjaGFuZ2VzIGl0cyBvdXRwdXQuCisgICAgICAgICAgICAgICAgQXNzdW1lIHRoYXQgdGhlIG91dHB1dCBvZiA8ZmlsZW5hbWU+cnBtZGVwczwvZmlsZW5hbWU+IGNoYW5nZXMuCisgICAgICAgICAgICAgICAgVGhlIHJlc3VsdCBvZiB0aGUgY2hhbmdlIHNob3VsZCBiZSB0aGF0IGFsbCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlX3dyaXRlX3JwbTwvZmlsZW5hbWU+IHNoYXJlZCBzdGF0ZSBjYWNoZQorICAgICAgICAgICAgICAgIGl0ZW1zIGJlY29tZSBpbnZhbGlkLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGJlY2F1c2UgdGhlIGNoYW5nZSB0byB0aGUgb3V0cHV0IGlzCisgICAgICAgICAgICAgICAgZXh0ZXJuYWwgdG8gdGhlIGNvZGUgYW5kIHRoZXJlZm9yZSBpbXBsaWNpdCwKKyAgICAgICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBzaGFyZWQgc3RhdGUgY2FjaGUgaXRlbXMgZG8gbm90IGJlY29tZQorICAgICAgICAgICAgICAgIGludmFsaWRhdGVkLgorICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIGJ1aWxkIHByb2Nlc3MgdXNlcyB0aGUgY2FjaGVkIGl0ZW1zIHJhdGhlcgorICAgICAgICAgICAgICAgIHRoYW4gcnVubmluZyB0aGUgdGFzayBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBPYnZpb3VzbHksIHRoZXNlIHR5cGVzIG9mIGltcGxpY2l0IGNoYW5nZXMgY2FuIGNhdXNlIHByb2JsZW1zLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBhdm9pZCB0aGVzZSBwcm9ibGVtcyBkdXJpbmcgdGhlIGJ1aWxkLCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgIHVuZGVyc3RhbmQgdGhlIGVmZmVjdHMgb2YgYW55IGNoYW5nZXMgeW91IG1ha2UuCisgICAgICAgICAgICAgICAgUmVhbGl6ZSB0aGF0IGNoYW5nZXMgeW91IG1ha2UgZGlyZWN0bHkgdG8gYSBmdW5jdGlvbgorICAgICAgICAgICAgICAgIGFyZSBhdXRvbWF0aWNhbGx5IGZhY3RvcmVkIGludG8gdGhlIGNoZWNrc3VtIGNhbGN1bGF0aW9uLgorICAgICAgICAgICAgICAgIFRodXMsIHRoZXNlIGV4cGxpY2l0IGNoYW5nZXMgaW52YWxpZGF0ZSB0aGUgYXNzb2NpYXRlZCBhcmVhIG9mCisgICAgICAgICAgICAgICAgc2hhcmVkIHN0YXRlIGNhY2hlLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBuZWVkIHRvIGJlIGF3YXJlIG9mIGFueSBpbXBsaWNpdCBjaGFuZ2VzIHRoYXQKKyAgICAgICAgICAgICAgICBhcmUgbm90IG9idmlvdXMgY2hhbmdlcyB0byB0aGUgY29kZSBhbmQgY291bGQgYWZmZWN0IHRoZSBvdXRwdXQKKyAgICAgICAgICAgICAgICBvZiBhIGdpdmVuIHRhc2suCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4geW91IGlkZW50aWZ5IGFuIGltcGxpY2l0IGNoYW5nZSwgeW91IGNhbiBlYXNpbHkgdGFrZSBzdGVwcworICAgICAgICAgICAgICAgIHRvIGludmFsaWRhdGUgdGhlIGNhY2hlIGFuZCBmb3JjZSB0aGUgdGFza3MgdG8gcnVuLgorICAgICAgICAgICAgICAgIFRoZSBzdGVwcyB5b3UgY2FuIHRha2UgYXJlIGFzIHNpbXBsZSBhcyBjaGFuZ2luZyBhIGZ1bmN0aW9uJ3MKKyAgICAgICAgICAgICAgICBjb21tZW50cyBpbiB0aGUgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGludmFsaWRhdGUgcGFja2FnZSBzaGFyZWQgc3RhdGUgZmlsZXMsIGNoYW5nZQorICAgICAgICAgICAgICAgIHRoZSBjb21tZW50IHN0YXRlbWVudHMgb2YKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBvciB0aGUgY29tbWVudHMgb2Ygb25lIG9mIHRoZSBmdW5jdGlvbnMgaXQgY2FsbHMuCisgICAgICAgICAgICAgICAgRXZlbiB0aG91Z2ggdGhlIGNoYW5nZSBpcyBwdXJlbHkgY29zbWV0aWMsIGl0IGNhdXNlcyB0aGUKKyAgICAgICAgICAgICAgICBjaGVja3N1bSB0byBiZSByZWNhbGN1bGF0ZWQgYW5kIGZvcmNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgc3lzdGVtIHRvIHJ1biB0aGUgdGFzayBhZ2Fpbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRm9yIGFuIGV4YW1wbGUgb2YgYSBjb21taXQgdGhhdCBtYWtlcyBhIGNvc21ldGljIGNoYW5nZSB0bworICAgICAgICAgICAgICAgIGludmFsaWRhdGUgc2hhcmVkIHN0YXRlLCBzZWUgdGhpcworICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9wb2t5L2NvbW1pdC9tZXRhL2NsYXNzZXMvcGFja2FnZS5iYmNsYXNzP2lkPTczN2Y4YmJiNGYyN2I0ODM3MDQ3Y2I5YjRmYmZlMDFkZmRlMzZkNTQnPmNvbW1pdDwvdWxpbms+LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0neDMyJz4KKyAgICA8dGl0bGU+eDMyPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICB4MzIgaXMgYSBwcm9jZXNzb3Itc3BlY2lmaWMgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAocHNBQkkpIGZvciB4ODZfNjQuCisgICAgICAgIEFuIEFCSSBkZWZpbmVzIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGJldHdlZW4gZnVuY3Rpb25zIGluIGEgcHJvY2Vzc2luZyBlbnZpcm9ubWVudC4KKyAgICAgICAgVGhlIGludGVyZmFjZSBkZXRlcm1pbmVzIHdoYXQgcmVnaXN0ZXJzIGFyZSB1c2VkIGFuZCB3aGF0IHRoZSBzaXplcyBhcmUgZm9yIHZhcmlvdXMgQyBkYXRhIHR5cGVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBTb21lIHByb2Nlc3NpbmcgZW52aXJvbm1lbnRzIHByZWZlciB1c2luZyAzMi1iaXQgYXBwbGljYXRpb25zIGV2ZW4gd2hlbiBydW5uaW5nCisgICAgICAgIG9uIEludGVsIDY0LWJpdCBwbGF0Zm9ybXMuCisgICAgICAgIENvbnNpZGVyIHRoZSBpMzg2IHBzQUJJLCB3aGljaCBpcyBhIHZlcnkgb2xkIDMyLWJpdCBBQkkgZm9yIEludGVsIDY0LWJpdCBwbGF0Zm9ybXMuCisgICAgICAgIFRoZSBpMzg2IHBzQUJJIGRvZXMgbm90IHByb3ZpZGUgZWZmaWNpZW50IHVzZSBhbmQgYWNjZXNzIG9mIHRoZSBJbnRlbCA2NC1iaXQgcHJvY2Vzc29yIHJlc291cmNlcywKKyAgICAgICAgbGVhdmluZyB0aGUgc3lzdGVtIHVuZGVydXRpbGl6ZWQuCisgICAgICAgIE5vdyBjb25zaWRlciB0aGUgeDg2XzY0IHBzQUJJLgorICAgICAgICBUaGlzIEFCSSBpcyBuZXdlciBhbmQgdXNlcyA2NC1iaXRzIGZvciBkYXRhIHNpemVzIGFuZCBwcm9ncmFtIHBvaW50ZXJzLgorICAgICAgICBUaGUgZXh0cmEgYml0cyBpbmNyZWFzZSB0aGUgZm9vdHByaW50IHNpemUgb2YgdGhlIHByb2dyYW1zLCBsaWJyYXJpZXMsCisgICAgICAgIGFuZCBhbHNvIGluY3JlYXNlcyB0aGUgbWVtb3J5IGFuZCBmaWxlIHN5c3RlbSBzaXplIHJlcXVpcmVtZW50cy4KKyAgICAgICAgRXhlY3V0aW5nIHVuZGVyIHRoZSB4MzIgcHNBQkkgZW5hYmxlcyB1c2VyIHByb2dyYW1zIHRvIHV0aWxpemUgQ1BVIGFuZCBzeXN0ZW0gcmVzb3VyY2VzCisgICAgICAgIG1vcmUgZWZmaWNpZW50bHkgd2hpbGUga2VlcGluZyB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0aGUgYXBwbGljYXRpb25zIGxvdy4KKyAgICAgICAgRXh0cmEgYml0cyBhcmUgdXNlZCBmb3IgcmVnaXN0ZXJzIGJ1dCBub3QgZm9yIGFkZHJlc3NpbmcgbWVjaGFuaXNtcy4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nc3VwcG9ydCc+CisgICAgICAgIDx0aXRsZT5TdXBwb3J0PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgWW9jdG8gUHJvamVjdCByZWxlYXNlIHN1cHBvcnRzIHRoZSBmaW5hbCBzcGVjaWZpY2F0aW9ucyBvZiB4MzIKKyAgICAgICAgICAgIHBzQUJJLgorICAgICAgICAgICAgU3VwcG9ydCBmb3IgeDMyIHBzQUJJIGV4aXN0cyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiBjcmVhdGUgcGFja2FnZXMgYW5kIGltYWdlcyBpbiB4MzIgcHNBQkkgZm9ybWF0IG9uIHg4Nl82NCBhcmNoaXRlY3R1cmUgdGFyZ2V0cy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gc3VjY2Vzc2Z1bGx5IGJ1aWxkIG1hbnkgcmVjaXBlcyB3aXRoIHRoZSB4MzIgdG9vbGNoYWluLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3UgY2FuIGNyZWF0ZSBhbmQgYm9vdCA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBpbWFnZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjb21wbGV0aW5nLXgzMic+CisgICAgICAgIDx0aXRsZT5Db21wbGV0aW5nIHgzMjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGdXR1cmUgUGxhbnMgZm9yIHRoZSB4MzIgcHNBQkkgaW4gdGhlIFlvY3RvIFByb2plY3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RW5oYW5jZSBhbmQgZml4IHRoZSBmZXcgcmVtYWluaW5nIHJlY2lwZXMgc28gdGhleQorICAgICAgICAgICAgICAgICAgICB3b3JrIHdpdGggYW5kIHN1cHBvcnQgeDMyIHRvb2xjaGFpbnMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVuaGFuY2UgUlBNIFBhY2thZ2UgTWFuYWdlciAoUlBNKSBzdXBwb3J0IGZvciB4MzIgYmluYXJpZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN1cHBvcnQgbGFyZ2VyIGltYWdlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXgzMi1yaWdodC1ub3cnPgorICAgICAgICA8dGl0bGU+VXNpbmcgeDMyIFJpZ2h0IE5vdzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gdXNlIHRoZSB4MzIgc3BBQkk6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FbmFibGUgdGhlIHgzMiBwc0FCSSB0dW5pbmcgZmlsZSBmb3IgPGZpbGVuYW1lPng4Nl82NDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVzIGJ5IGVkaXRpbmcgdGhlIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBsaWtlIHRoaXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIE1BQ0hJTkUgPSAicWVtdXg4Ni02NCIKKyAgICAgIERFRkFVTFRUVU5FID0gIng4Ni02NC14MzIiCisgICAgICBiYXNlbGliID0gIiR7QGQuZ2V0VmFyKCdCQVNFX0xJQl90dW5lLScgKyAoZC5nZXRWYXIoJ0RFRkFVTFRUVU5FJywgVHJ1ZSkgXAorICAgICAgICAgb3IgJ0lOVkFMSUQnKSwgVHJ1ZSkgb3IgJ2xpYid9IgorICAgICAgI01BQ0hJTkUgPSAiZ2VuZXJpY3g4NiIKKyAgICAgICNERUZBVUxUVFVORSA9ICJjb3JlMi02NC14MzIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QXMgdXN1YWwsIHVzZSBCaXRCYWtlIHRvIGJ1aWxkIGFuIGltYWdlIHRoYXQgc3VwcG9ydHMgdGhlIHgzMiBwc0FCSS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BcyB1c3VhbCwgcnVuIHlvdXIgaW1hZ2UgdXNpbmcgUUVNVToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgcWVtdXg4Ni02NCBjb3JlLWltYWdlLXNhdG8KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJ3YXlsYW5kIj4KKyAgICA8dGl0bGU+V2F5bGFuZDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XYXlsYW5kXyhkaXNwbGF5X3NlcnZlcl9wcm90b2NvbCknPldheWxhbmQ8L3VsaW5rPgorICAgICAgICBpcyBhIGNvbXB1dGVyIGRpc3BsYXkgc2VydmVyIHByb3RvY29sIHRoYXQKKyAgICAgICAgcHJvdmlkZXMgYSBtZXRob2QgZm9yIGNvbXBvc2l0aW5nIHdpbmRvdyBtYW5hZ2VycyB0byBjb21tdW5pY2F0ZQorICAgICAgICBkaXJlY3RseSB3aXRoIGFwcGxpY2F0aW9ucyBhbmQgdmlkZW8gaGFyZHdhcmUgYW5kIGV4cGVjdHMgdGhlbSB0bworICAgICAgICBjb21tdW5pY2F0ZSB3aXRoIGlucHV0IGhhcmR3YXJlIHVzaW5nIG90aGVyIGxpYnJhcmllcy4KKyAgICAgICAgVXNpbmcgV2F5bGFuZCB3aXRoIHN1cHBvcnRpbmcgdGFyZ2V0cyBjYW4gcmVzdWx0IGluIGJldHRlciBjb250cm9sCisgICAgICAgIG92ZXIgZ3JhcGhpY3MgZnJhbWUgcmVuZGVyaW5nIHRoYW4gYW4gYXBwbGljYXRpb24gbWlnaHQgb3RoZXJ3aXNlCisgICAgICAgIGFjaGlldmUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIHRoZSBXYXlsYW5kIHByb3RvY29sIGxpYnJhcmllcyBhbmQgdGhlCisgICAgICAgIHJlZmVyZW5jZQorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dheWxhbmRfKGRpc3BsYXlfc2VydmVyX3Byb3RvY29sKSNXZXN0b24nPldlc3RvbjwvdWxpbms+CisgICAgICAgIGNvbXBvc2l0b3IgYXMgcGFydCBvZiBpdHMgcmVsZWFzZS4KKyAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB3aGF0IHlvdSBuZWVkIHRvIGRvIHRvIGltcGxlbWVudCBXYXlsYW5kIGFuZAorICAgICAgICB1c2UgdGhlIGNvbXBvc2l0b3Igd2hlbiBidWlsZGluZyBhbiBpbWFnZSBmb3IgYSBzdXBwb3J0aW5nIHRhcmdldC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0id2F5bGFuZC1zdXBwb3J0Ij4KKyAgICAgICAgPHRpdGxlPlN1cHBvcnQ8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFdheWxhbmQgcHJvdG9jb2wgbGlicmFyaWVzIGFuZCB0aGUgcmVmZXJlbmNlIFdlc3RvbiBjb21wb3NpdG9yCisgICAgICAgICAgICBzaGlwIGFzIGludGVncmF0ZWQgcGFja2FnZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gbGF5ZXIKKyAgICAgICAgICAgIG9mIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgU3BlY2lmaWNhbGx5LCB5b3UgY2FuIGZpbmQgdGhlIHJlY2lwZXMgdGhhdCBidWlsZCBib3RoIFdheWxhbmQKKyAgICAgICAgICAgIGFuZCBXZXN0b24gYXQgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gYnVpbGQgYm90aCB0aGUgV2F5bGFuZCBhbmQgV2VzdG9uIHBhY2thZ2VzIGZvciB1c2Ugb25seQorICAgICAgICAgICAgd2l0aCB0YXJnZXRzIHRoYXQgYWNjZXB0IHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2RyaS5mcmVlZGVza3RvcC5vcmcvd2lraS8nPk1lc2EgM0QgYW5kIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmU8L3VsaW5rPiwKKyAgICAgICAgICAgIHdoaWNoIGlzIGFsc28ga25vd24gYXMgTWVzYSBEUkkuCisgICAgICAgICAgICBUaGlzIGltcGxpZXMgdGhhdCB5b3UgY2Fubm90IGJ1aWxkIGFuZCB1c2UgdGhlIHBhY2thZ2VzIGlmIHlvdXIKKyAgICAgICAgICAgIHRhcmdldCB1c2VzLCBmb3IgZXhhbXBsZSwgdGhlCisgICAgICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5JbnRlbDwvdHJhZGVtYXJrPiBFbWJlZGRlZCBNZWRpYSBhbmQKKyAgICAgICAgICAgIEdyYXBoaWNzIERyaXZlciAoPHRyYWRlbWFyayBjbGFzcz0ncmVnaXN0ZXJlZCc+SW50ZWw8L3RyYWRlbWFyaz4KKyAgICAgICAgICAgIEVNR0QpIHRoYXQgb3ZlcnJpZGVzIE1lc2EgRFJJLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBEdWUgdG8gbGFjayBvZiBFR0wgc3VwcG9ydCwgV2VzdG9uIDEuMC4zIHdpbGwgbm90IHJ1biBkaXJlY3RseSBvbgorICAgICAgICAgICAgdGhlIGVtdWxhdGVkIFFFTVUgaGFyZHdhcmUuCisgICAgICAgICAgICBIb3dldmVyLCB0aGlzIHZlcnNpb24gb2YgV2VzdG9uIHdpbGwgcnVuIHVuZGVyIFggZW11bGF0aW9uIHdpdGhvdXQKKyAgICAgICAgICAgIGlzc3Vlcy4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJlbmFibGluZy13YXlsYW5kLWluLWFuLWltYWdlIj4KKyAgICAgICAgPHRpdGxlPkVuYWJsaW5nIFdheWxhbmQgaW4gYW4gSW1hZ2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gZW5hYmxlIFdheWxhbmQsIHlvdSBuZWVkIHRvIGVuYWJsZSBpdCB0byBiZSBidWlsdCBhbmQgZW5hYmxlCisgICAgICAgICAgICBpdCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgaW1hZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0iZW5hYmxlLWJ1aWxkaW5nIj4KKyAgICAgICAgICAgIDx0aXRsZT5CdWlsZGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGNhdXNlIE1lc2EgdG8gYnVpbGQgdGhlIDxmaWxlbmFtZT53YXlsYW5kLWVnbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcGxhdGZvcm0gYW5kIFdlc3RvbiB0byBidWlsZCBXYXlsYW5kIHdpdGggS2VybmVsIE1vZGUKKyAgICAgICAgICAgICAgICBTZXR0aW5nCisgICAgICAgICAgICAgICAgKDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS5hcmNobGludXgub3JnL2luZGV4LnBocC9LZXJuZWxfTW9kZV9TZXR0aW5nJz5LTVM8L3VsaW5rPikKKyAgICAgICAgICAgICAgICBzdXBwb3J0LCBpbmNsdWRlIHRoZSAid2F5bGFuZCIgZmxhZyBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSJ2YXItRElTVFJPX0ZFQVRVUkVTIj48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50IGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRElTVFJPX0ZFQVRVUkVTX2FwcGVuZCA9ICIgd2F5bGFuZCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIElmIFgxMSBoYXMgYmVlbiBlbmFibGVkIGVsc2V3aGVyZSwgV2VzdG9uIHdpbGwgYnVpbGQgV2F5bGFuZAorICAgICAgICAgICAgICAgIHdpdGggWDExIHN1cHBvcnQKKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJlbmFibGUtaW5zdGFsbGF0aW9uLWluLWFuLWltYWdlIj4KKyAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gaW5zdGFsbCB0aGUgV2F5bGFuZCBmZWF0dXJlIGludG8gYW4gaW1hZ2UsIHlvdSBtdXN0CisgICAgICAgICAgICAgICAgaW5jbHVkZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTCc+PGZpbGVuYW1lPkNPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHN0YXRlbWVudCBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTCArPSAid2F5bGFuZCB3ZXN0b24iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InJ1bm5pbmctd2VzdG9uIj4KKyAgICAgICAgPHRpdGxlPlJ1bm5pbmcgV2VzdG9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIHJ1biBXZXN0b24gaW5zaWRlIFgxMSwgZW5hYmxpbmcgaXQgYXMgZGVzY3JpYmVkIGVhcmxpZXIgYW5kCisgICAgICAgICAgICBidWlsZGluZyBhIFNhdG8gaW1hZ2UgaXMgc3VmZmljaWVudC4KKyAgICAgICAgICAgIElmIHlvdSBhcmUgcnVubmluZyB5b3VyIGltYWdlIHVuZGVyIFNhdG8sIGEgV2VzdG9uIExhdW5jaGVyIGFwcGVhcnMKKyAgICAgICAgICAgIGluIHRoZSAiVXRpbGl0eSIgY2F0ZWdvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gcnVuIFdlc3RvbiB0aHJvdWdoIHRoZSBjb21tYW5kLWxpbmUKKyAgICAgICAgICAgIGludGVycHJldG9yIChDTEkpLCB3aGljaCBpcyBiZXR0ZXIgc3VpdGVkIGZvciBkZXZlbG9wbWVudCB3b3JrLgorICAgICAgICAgICAgVG8gcnVuIFdlc3RvbiB1bmRlciB0aGUgQ0xJLCB5b3UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nIGFmdGVyCisgICAgICAgICAgICB5b3VyIGltYWdlIGlzIGJ1aWx0OgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SdW4gdGhlc2UgY29tbWFuZHMgdG8gZXhwb3J0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5YREdfUlVOVElNRV9ESVI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBta2RpciAtcCAvdG1wLyRVU0VSLXdlc3RvbgorICAgICBjaG1vZCAwNzAwIC90bXAvJFVTRVItd2VzdG9uCisgICAgIGV4cG9ydCBYREdfUlVOVElNRV9ESVI9L3RtcC8kVVNFUi13ZXN0b24KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5MYXVuY2ggV2VzdG9uIGluIHRoZSBzaGVsbDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICB3ZXN0b24KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImxpY2Vuc2VzIj4KKyAgICA8dGl0bGU+TGljZW5zZXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIG1lY2hhbmlzbSBieSB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICB0cmFja3MgY2hhbmdlcyB0byBsaWNlbnNpbmcgdGV4dC4KKyAgICAgICAgVGhlIHNlY3Rpb24gYWxzbyBkZXNjcmliZXMgaG93IHRvIGVuYWJsZSBjb21tZXJjaWFsbHkgbGljZW5zZWQgcmVjaXBlcywKKyAgICAgICAgd2hpY2ggYnkgZGVmYXVsdCBhcmUgZGlzYWJsZWQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiB0aGF0IGNhbiBoZWxwIHlvdSBtYWludGFpbiBjb21wbGlhbmNlIHdpdGggdmFyaW91cyBvcGVuCisgICAgICAgIHNvdXJjZSBsaWNlbnNpbmcgZHVyaW5nIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHByb2R1Y3QsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21haW50YWluaW5nLW9wZW4tc291cmNlLWxpY2Vuc2UtY29tcGxpYW5jZS1kdXJpbmcteW91ci1wcm9kdWN0cy1saWZlY3ljbGUnPk1haW50YWluaW5nIE9wZW4gU291cmNlIExpY2Vuc2UgQ29tcGxpYW5jZSBEdXJpbmcgWW91ciBQcm9qZWN0J3MgTGlmZWN5Y2xlPC91bGluaz4iIHNlY3Rpb24KKyAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSJ1c2luZ3Bva3ktY29uZmlndXJpbmctTElDX0ZJTEVTX0NIS1NVTSI+CisgICAgICAgIDx0aXRsZT5UcmFja2luZyBMaWNlbnNlIENoYW5nZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGxpY2Vuc2Ugb2YgYW4gdXBzdHJlYW0gcHJvamVjdCBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgICAgIEluIG9yZGVyIHRvIHByZXZlbnQgdGhlc2UgY2hhbmdlcyBnb2luZyB1bm5vdGljZWQsIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNfRklMRVNfQ0hLU1VNJz5MSUNfRklMRVNfQ0hLU1VNPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICB2YXJpYWJsZSB0cmFja3MgY2hhbmdlcyB0byB0aGUgbGljZW5zZSB0ZXh0LiBUaGUgY2hlY2tzdW1zIGFyZSB2YWxpZGF0ZWQgYXQgdGhlIGVuZCBvZiB0aGUKKyAgICAgICAgICAgIGNvbmZpZ3VyZSBzdGVwLCBhbmQgaWYgdGhlIGNoZWNrc3VtcyBkbyBub3QgbWF0Y2gsIHRoZSBidWlsZCB3aWxsIGZhaWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0idXNpbmdwb2t5LXNwZWNpZnlpbmctTElDX0ZJTEVTX0NIS1NVTSI+CisgICAgICAgICAgICA8dGl0bGU+U3BlY2lmeWluZyB0aGUgPGZpbGVuYW1lPkxJQ19GSUxFU19DSEtTVU08L2ZpbGVuYW1lPiBWYXJpYWJsZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgY29udGFpbnMgY2hlY2tzdW1zIG9mIHRoZSBsaWNlbnNlIHRleHQgaW4gdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGhvdyB0byBzcGVjaWZ5IDxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT14eHh4IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGljZmlsZTEudHh0O2JlZ2lubGluZT01O2VuZGxpbmU9Mjk7bWQ1PXl5eXkgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWNmaWxlMi50eHQ7ZW5kbGluZT01MDttZDU9enp6eiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgLi4uIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUyc+UzwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcworICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IGRpcmVjdG9yeSB3aGVuIHNlYXJjaGluZyBmaWxlcyBsaXN0ZWQgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIGVtcGxveXMgdGhlIGRlZmF1bHQgZGlyZWN0b3J5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDb25zaWRlciB0aGlzIG5leHQgZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy9scy5jO2JlZ2lubGluZT01O2VuZGxpbmU9MTY7XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZDU9YmIxNGVkM2M0Y2RhNTgzYWJjODU0MDEzMDRiNWNkNGUiCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vbGljZW5zZS5odG1sO21kNT01Yzk0NzY3Y2VkYjVkNjk4N2M5MDJhYzg1MGRlZDJjNiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBsaW5lIGxvY2F0ZXMgYSBmaWxlIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7U30vc3JjL2xzLmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgc2Vjb25kIGxpbmUgcmVmZXJzIHRvIGEgZmlsZSBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+V09SS0RJUjwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vdGUgdGhhdCA8ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzCisgICAgICAgICAgICAgICAgbWFuZGF0b3J5IGZvciBhbGwgcmVjaXBlcywgdW5sZXNzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgc2V0IHRvICJDTE9TRUQiLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InVzaW5ncG9reS1MSUNfRklMRVNfQ0hLU1VNLWV4cGxhbmF0aW9uLW9mLXN5bnRheCI+CisgICAgICAgICAgICA8dGl0bGU+RXhwbGFuYXRpb24gb2YgU3ludGF4PC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ19GSUxFU19DSEtTVU08L2ZpbGVuYW1lPiB2YXJpYWJsZSBsaXN0cyBhbGwgdGhlCisgICAgICAgICAgICAgICAgaW1wb3J0YW50IGZpbGVzIHRoYXQgY29udGFpbiB0aGUgbGljZW5zZSB0ZXh0IGZvciB0aGUgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgSXQgaXMgcG9zc2libGUgdG8gc3BlY2lmeSBhIGNoZWNrc3VtIGZvciBhbiBlbnRpcmUgZmlsZSwgb3IgYSBzcGVjaWZpYyBzZWN0aW9uIG9mIGEKKyAgICAgICAgICAgICAgICBmaWxlIChzcGVjaWZpZWQgYnkgYmVnaW5uaW5nIGFuZCBlbmRpbmcgbGluZSBudW1iZXJzIHdpdGggdGhlICJiZWdpbmxpbmUiIGFuZCAiZW5kbGluZSIKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLCByZXNwZWN0aXZlbHkpLgorICAgICAgICAgICAgICAgIFRoZSBsYXR0ZXIgaXMgdXNlZnVsIGZvciBzb3VyY2UgZmlsZXMgd2l0aCBhIGxpY2Vuc2Ugbm90aWNlIGhlYWRlciwKKyAgICAgICAgICAgICAgICBSRUFETUUgZG9jdW1lbnRzLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCB1c2UgdGhlICJiZWdpbmxpbmUiIHBhcmFtZXRlciwgdGhlbiBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHRleHQgYmVnaW5zIG9uIHRoZQorICAgICAgICAgICAgICAgIGZpcnN0IGxpbmUgb2YgdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgU2ltaWxhcmx5LCBpZiB5b3UgZG8gbm90IHVzZSB0aGUgImVuZGxpbmUiIHBhcmFtZXRlciwgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBsaWNlbnNlIHRleHQKKyAgICAgICAgICAgICAgICBlbmRzIHdpdGggdGhlIGxhc3QgbGluZSBvZiB0aGUgZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlICJtZDUiIHBhcmFtZXRlciBzdG9yZXMgdGhlIG1kNSBjaGVja3N1bSBvZiB0aGUgbGljZW5zZSB0ZXh0LgorICAgICAgICAgICAgICAgIElmIHRoZSBsaWNlbnNlIHRleHQgY2hhbmdlcyBpbiBhbnkgd2F5IGFzIGNvbXBhcmVkIHRvIHRoaXMgcGFyYW1ldGVyCisgICAgICAgICAgICAgICAgdGhlbiBhIG1pc21hdGNoIG9jY3Vycy4KKyAgICAgICAgICAgICAgICBUaGlzIG1pc21hdGNoIHRyaWdnZXJzIGEgYnVpbGQgZmFpbHVyZSBhbmQgbm90aWZpZXMgdGhlIGRldmVsb3Blci4KKyAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24gYWxsb3dzIHRoZSBkZXZlbG9wZXIgdG8gcmV2aWV3IGFuZCBhZGRyZXNzIHRoZSBsaWNlbnNlIHRleHQgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICBBbHNvIG5vdGUgdGhhdCBpZiBhIG1pc21hdGNoIG9jY3VycyBkdXJpbmcgdGhlIGJ1aWxkLCB0aGUgY29ycmVjdCBtZDUKKyAgICAgICAgICAgICAgICBjaGVja3N1bSBpcyBwbGFjZWQgaW4gdGhlIGJ1aWxkIGxvZyBhbmQgY2FuIGJlIGVhc2lseSBjb3BpZWQgdG8gdGhlIHJlY2lwZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlcmUgaXMgbm8gbGltaXQgdG8gaG93IG1hbnkgZmlsZXMgeW91IGNhbiBzcGVjaWZ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgR2VuZXJhbGx5LCBob3dldmVyLCBldmVyeSBwcm9qZWN0IHJlcXVpcmVzIGEgZmV3IHNwZWNpZmljYXRpb25zIGZvciBsaWNlbnNlIHRyYWNraW5nLgorICAgICAgICAgICAgICAgIE1hbnkgcHJvamVjdHMgaGF2ZSBhICJDT1BZSU5HIiBmaWxlIHRoYXQgc3RvcmVzIHRoZSBsaWNlbnNlIGluZm9ybWF0aW9uIGZvciBhbGwgdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgIGNvZGUgZmlsZXMuCisgICAgICAgICAgICAgICAgVGhpcyBwcmFjdGljZSBhbGxvd3MgeW91IHRvIGp1c3QgdHJhY2sgdGhlICJDT1BZSU5HIiBmaWxlIGFzIGxvbmcgYXMgaXQgaXMga2VwdCB1cCB0byBkYXRlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8dGlwPgorICAgICAgICAgICAgICAgIElmIHlvdSBzcGVjaWZ5IGFuIGVtcHR5IG9yIGludmFsaWQgIm1kNSIgcGFyYW1ldGVyLCBCaXRCYWtlIHJldHVybnMgYW4gbWQ1IG1pcy1tYXRjaAorICAgICAgICAgICAgICAgIGVycm9yIGFuZCBkaXNwbGF5cyB0aGUgY29ycmVjdCAibWQ1IiBwYXJhbWV0ZXIgdmFsdWUgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICBUaGUgY29ycmVjdCBwYXJhbWV0ZXIgaXMgYWxzbyBjYXB0dXJlZCBpbiB0aGUgYnVpbGQgbG9nLgorICAgICAgICAgICAgPC90aXA+CisKKyAgICAgICAgICAgIDx0aXA+CisgICAgICAgICAgICAgICAgSWYgdGhlIHdob2xlIGZpbGUgY29udGFpbnMgb25seSBsaWNlbnNlIHRleHQsIHlvdSBkbyBub3QgbmVlZCB0byB1c2UgdGhlICJiZWdpbmxpbmUiIGFuZAorICAgICAgICAgICAgICAgICJlbmRsaW5lIiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgPC90aXA+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZW5hYmxpbmctY29tbWVyY2lhbGx5LWxpY2Vuc2VkLXJlY2lwZXMiPgorICAgICAgICA8dGl0bGU+RW5hYmxpbmcgQ29tbWVyY2lhbGx5IExpY2Vuc2VkIFJlY2lwZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZGlzYWJsZXMKKyAgICAgICAgICAgIGNvbXBvbmVudHMgdGhhdCBoYXZlIGNvbW1lcmNpYWwgb3Igb3RoZXIgc3BlY2lhbCBsaWNlbnNpbmcKKyAgICAgICAgICAgIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgIFN1Y2ggcmVxdWlyZW1lbnRzIGFyZSBkZWZpbmVkIG9uIGEKKyAgICAgICAgICAgIHJlY2lwZS1ieS1yZWNpcGUgYmFzaXMgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNFTlNFX0ZMQUdTJz48ZmlsZW5hbWU+TElDRU5TRV9GTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgZGVmaW5pdGlvbiBpbiB0aGUgYWZmZWN0ZWQgcmVjaXBlLgorICAgICAgICAgICAgRm9yIGluc3RhbmNlLCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGx1Z2lucy11Z2x5PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHJlY2lwZSBjb250YWlucyB0aGUgZm9sbG93aW5nIHN0YXRlbWVudDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSGVyZSBpcyBhIHNsaWdodGx5IG1vcmUgY29tcGxpY2F0ZWQgZXhhbXBsZSB0aGF0IGNvbnRhaW5zIGJvdGggYW4KKyAgICAgICAgICAgIGV4cGxpY2l0IHJlY2lwZSBuYW1lIGFuZCB2ZXJzaW9uIChhZnRlciB2YXJpYWJsZSBleHBhbnNpb24pOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFX0ZMQUdTID0gImxpY2Vuc2VfJHtQTn1fJHtQVn0iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisJICAgICAgICBJbiBvcmRlciBmb3IgYSBjb21wb25lbnQgcmVzdHJpY3RlZCBieSBhIDxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTPC9maWxlbmFtZT4KKwkgICAgICAgIGRlZmluaXRpb24gdG8gYmUgZW5hYmxlZCBhbmQgaW5jbHVkZWQgaW4gYW4gaW1hZ2UsIGl0CisJICAgICAgICBuZWVkcyB0byBoYXZlIGEgbWF0Y2hpbmcgZW50cnkgaW4gdGhlIGdsb2JhbAorCSAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUJz48ZmlsZW5hbWU+TElDRU5TRV9GTEFHU19XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCBpcyBhIHZhcmlhYmxlCisJICAgICAgICB0eXBpY2FsbHkgZGVmaW5lZCBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0byBlbmFibGUKKwkgICAgICAgIHRoZSA8ZmlsZW5hbWU+cG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtdWdseTwvZmlsZW5hbWU+CisJICAgICAgICBwYWNrYWdlLCB5b3UgY291bGQgYWRkIGVpdGhlciB0aGUgc3RyaW5nCisJICAgICAgICAiY29tbWVyY2lhbF9nc3QtcGx1Z2lucy11Z2x5IiBvciB0aGUgbW9yZSBnZW5lcmFsIHN0cmluZworCSAgICAgICAgImNvbW1lcmNpYWwiIHRvIDxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTX1dISVRFTElTVDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2xpY2Vuc2UtZmxhZy1tYXRjaGluZyc+TGljZW5zZSBGbGFnIE1hdGNoaW5nPC9saW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgZm9yIGEgZnVsbCBleHBsYW5hdGlvbiBvZiBob3cgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1M8L2ZpbGVuYW1lPiBtYXRjaGluZyB3b3Jrcy4KKyAgICAgICAgICAgIEhlcmUgaXMgdGhlIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUID0gImNvbW1lcmNpYWxfZ3N0LXBsdWdpbnMtdWdseSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKwkgICAgICAgIExpa2V3aXNlLCB0byBhZGRpdGlvbmFsbHkgZW5hYmxlIHRoZSBwYWNrYWdlIGJ1aWx0IGZyb20gdGhlIHJlY2lwZSBjb250YWluaW5nCisJICAgICAgICA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHUyA9ICJsaWNlbnNlXyR7UE59XyR7UFZ9IjwvZmlsZW5hbWU+LCBhbmQgYXNzdW1pbmcKKwkgICAgICAgIHRoYXQgdGhlIGFjdHVhbCByZWNpcGUgbmFtZSB3YXMgPGZpbGVuYW1lPmVtZ2RfMS4xMC5iYjwvZmlsZW5hbWU+LAorCSAgICAgICAgdGhlIGZvbGxvd2luZyBzdHJpbmcgd291bGQgZW5hYmxlIHRoYXQgcGFja2FnZSBhcyB3ZWxsIGFzCisJICAgICAgICB0aGUgb3JpZ2luYWwgPGZpbGVuYW1lPmdzdC1wbHVnaW5zLXVnbHk8L2ZpbGVuYW1lPiBwYWNrYWdlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCA9ICJjb21tZXJjaWFsX2dzdC1wbHVnaW5zLXVnbHkgbGljZW5zZV9lbWdkXzEuMTAiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisJICAgICAgICBBcyBhIGNvbnZlbmllbmNlLCB5b3UgZG8gbm90IG5lZWQgdG8gc3BlY2lmeSB0aGUgY29tcGxldGUgbGljZW5zZSBzdHJpbmcKKwkgICAgICAgIGluIHRoZSB3aGl0ZWxpc3QgZm9yIGV2ZXJ5IHBhY2thZ2UuCisgICAgICAgICAgICBZb3UgY2FuIHVzZSBhbiBhYmJyZXZpYXRlZCBmb3JtLCB3aGljaCBjb25zaXN0cworCSAgICAgICAgb2YganVzdCB0aGUgZmlyc3QgcG9ydGlvbiBvciBwb3J0aW9ucyBvZiB0aGUgbGljZW5zZSBzdHJpbmcgYmVmb3JlCisJICAgICAgICB0aGUgaW5pdGlhbCB1bmRlcnNjb3JlIGNoYXJhY3RlciBvciBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgQSBwYXJ0aWFsIHN0cmluZyB3aWxsIG1hdGNoCisJICAgICAgICBhbnkgbGljZW5zZSB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlbiBzdHJpbmcgYXMgdGhlIGZpcnN0CisJICAgICAgICBwb3J0aW9uIG9mIGl0cyBsaWNlbnNlLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcKKwkgICAgICAgIHdoaXRlbGlzdCBzdHJpbmcgd2lsbCBhbHNvIG1hdGNoIGJvdGggb2YgdGhlIHBhY2thZ2VzCisJICAgICAgICBwcmV2aW91c2x5IG1lbnRpb25lZCBhcyB3ZWxsIGFzIGFueSBvdGhlciBwYWNrYWdlcyB0aGF0IGhhdmUKKwkgICAgICAgIGxpY2Vuc2VzIHN0YXJ0aW5nIHdpdGggImNvbW1lcmNpYWwiIG9yICJsaWNlbnNlIi4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElDRU5TRV9GTEFHU19XSElURUxJU1QgPSAiY29tbWVyY2lhbCBsaWNlbnNlIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9ImxpY2Vuc2UtZmxhZy1tYXRjaGluZyI+CisgICAgICAgICAgICA8dGl0bGU+TGljZW5zZSBGbGFnIE1hdGNoaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisJCSAgICAgICAgTGljZW5zZSBmbGFnIG1hdGNoaW5nIGFsbG93cyB5b3UgdG8gY29udHJvbCB3aGF0IHJlY2lwZXMgdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpbmNsdWRlcyBpbiB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgRnVuZGFtZW50YWxseSwgdGhlIGJ1aWxkIHN5c3RlbSBhdHRlbXB0cyB0byBtYXRjaAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNFTlNFX0ZMQUdTJz48ZmlsZW5hbWU+TElDRU5TRV9GTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHN0cmluZ3MgZm91bmQgaW4gcmVjaXBlcyBhZ2FpbnN0CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUJz48ZmlsZW5hbWU+TElDRU5TRV9GTEFHU19XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBzdHJpbmdzIGZvdW5kIGluIHRoZSB3aGl0ZWxpc3QuCisgICAgICAgICAgICAgICAgQSBtYXRjaCBjYXVzZXMgdGhlIGJ1aWxkIHN5c3RlbSB0byBpbmNsdWRlIGEgcmVjaXBlIGluIHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkLCB3aGlsZSBmYWlsdXJlIHRvIGZpbmQgYSBtYXRjaCBjYXVzZXMgdGhlIGJ1aWxkIHN5c3RlbSB0bworICAgICAgICAgICAgICAgIGV4Y2x1ZGUgYSByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIGdlbmVyYWwsIGxpY2Vuc2UgZmxhZyBtYXRjaGluZyBpcyBzaW1wbGUuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgdW5kZXJzdGFuZGluZyBzb21lIGNvbmNlcHRzIHdpbGwgaGVscCB5b3UKKyAgICAgICAgICAgICAgICBjb3JyZWN0bHkgYW5kIGVmZmVjdGl2ZWx5IHVzZSBtYXRjaGluZy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVmb3JlIGEgZmxhZworICAgICAgICAgICAgICAgIGRlZmluZWQgYnkgYSBwYXJ0aWN1bGFyIHJlY2lwZSBpcyB0ZXN0ZWQgYWdhaW5zdCB0aGUKKyAgICAgICAgICAgICAgICBjb250ZW50cyBvZiB0aGUgd2hpdGVsaXN0LCB0aGUgZXhwYW5kZWQgc3RyaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl8ke1BOfTwvZmlsZW5hbWU+IGlzIGFwcGVuZGVkIHRvIHRoZSBmbGFnLgorICAgICAgICAgICAgICAgIFRoaXMgZXhwYW5zaW9uIG1ha2VzIGVhY2ggPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHZhbHVlIHJlY2lwZS1zcGVjaWZpYy4KKyAgICAgICAgICAgICAgICBBZnRlciBleHBhbnNpb24sIHRoZSBzdHJpbmcgaXMgdGhlbiBtYXRjaGVkIGFnYWluc3QgdGhlCisgICAgICAgICAgICAgICAgd2hpdGVsaXN0LgorICAgICAgICAgICAgICAgIFRodXMsIHNwZWNpZnlpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaW4gcmVjaXBlICJmb28iLCBmb3IgZXhhbXBsZSwgcmVzdWx0cyBpbiB0aGUgc3RyaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiJjb21tZXJjaWFsX2ZvbyI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBBbmQsIHRvIGNyZWF0ZSBhIG1hdGNoLCB0aGF0IHN0cmluZyBtdXN0IGFwcGVhciBpbiB0aGUKKyAgICAgICAgICAgICAgICB3aGl0ZWxpc3QuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEp1ZGljaW91cyB1c2Ugb2YgdGhlIDxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBzdHJpbmdzIGFuZCB0aGUgY29udGVudHMgb2YgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICBhbGxvd3MgeW91IGEgbG90IG9mIGZsZXhpYmlsaXR5IGZvciBpbmNsdWRpbmcgb3IgZXhjbHVkaW5nCisgICAgICAgICAgICAgICAgcmVjaXBlcyBiYXNlZCBvbiBsaWNlbnNpbmcuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gYnJvYWRlbiB0aGUgbWF0Y2hpbmcgY2FwYWJpbGl0aWVzIGJ5CisgICAgICAgICAgICAgICAgdXNpbmcgbGljZW5zZSBmbGFncyBzdHJpbmcgc3Vic2V0cyBpbiB0aGUgd2hpdGVsaXN0LgorICAgICAgICAgICAgICAgIDxub3RlPldoZW4gdXNpbmcgYSBzdHJpbmcgc3Vic2V0LCBiZSBzdXJlIHRvIHVzZSB0aGUgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgZXhwYW5kZWQgc3RyaW5nIHRoYXQgcHJlY2VkZXMgdGhlIGFwcGVuZGVkIHVuZGVyc2NvcmUKKyAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIChlLmcuIDxmaWxlbmFtZT51c2V0aGlzcGFydF8xLjM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVzZXRoaXNwYXJ0XzEuNDwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGgpLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc2ltcGx5IHNwZWNpZnlpbmcgdGhlIHN0cmluZyAiY29tbWVyY2lhbCIgaW4KKyAgICAgICAgICAgICAgICB0aGUgd2hpdGVsaXN0IG1hdGNoZXMgYW55IGV4cGFuZGVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1M8L2ZpbGVuYW1lPiBkZWZpbml0aW9uIHRoYXQgc3RhcnRzIHdpdGgKKyAgICAgICAgICAgICAgICB0aGUgc3RyaW5nICJjb21tZXJjaWFsIiBzdWNoIGFzICJjb21tZXJjaWFsX2ZvbyIgYW5kCisgICAgICAgICAgICAgICAgImNvbW1lcmNpYWxfYmFyIiwgd2hpY2ggYXJlIHRoZSBzdHJpbmdzIHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlcyBmb3IgaHlwb3RoZXRpY2FsIHJlY2lwZXMgbmFtZWQKKyAgICAgICAgICAgICAgICAiZm9vIiBhbmQgImJhciIgYXNzdW1pbmcgdGhvc2UgcmVjaXBlcyBzaW1wbHkgc3BlY2lmeSB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRodXMsIHlvdSBjYW4gY2hvb3NlIHRvIGV4aGF1c3RpdmVseQorICAgICAgICAgICAgICAgIGVudW1lcmF0ZSBlYWNoIGxpY2Vuc2UgZmxhZyBpbiB0aGUgd2hpdGVsaXN0IGFuZAorICAgICAgICAgICAgICAgIGFsbG93IG9ubHkgc3BlY2lmaWMgcmVjaXBlcyBpbnRvIHRoZSBpbWFnZSwgb3IKKyAgICAgICAgICAgICAgICB5b3UgY2FuIHVzZSBhIHN0cmluZyBzdWJzZXQgdGhhdCBjYXVzZXMgYSBicm9hZGVyIHJhbmdlIG9mCisgICAgICAgICAgICAgICAgbWF0Y2hlcyB0byBhbGxvdyBhIHJhbmdlIG9mIHJlY2lwZXMgaW50byB0aGUgaW1hZ2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2NoZW1lIHdvcmtzIGV2ZW4gaWYgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1M8L2ZpbGVuYW1lPiBzdHJpbmcgYWxyZWFkeQorICAgICAgICAgICAgICAgIGhhcyA8ZmlsZW5hbWU+XyR7UE59PC9maWxlbmFtZT4gYXBwZW5kZWQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBidWlsZCBzeXN0ZW0gdHVybnMgdGhlIGxpY2Vuc2UgZmxhZworICAgICAgICAgICAgICAgICJjb21tZXJjaWFsXzEuMl9mb28iIGludG8gImNvbW1lcmNpYWxfMS4yX2Zvb19mb28iIGFuZCB3b3VsZAorICAgICAgICAgICAgICAgIG1hdGNoIGJvdGggdGhlIGdlbmVyYWwgImNvbW1lcmNpYWwiIGFuZCB0aGUgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAiY29tbWVyY2lhbF8xLjJfZm9vIiBzdHJpbmdzIGZvdW5kIGluIHRoZSB3aGl0ZWxpc3QsIGFzCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgb3RoZXIgc2NlbmFyaW9zOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3UgY2FuIHNwZWNpZnkgYSB2ZXJzaW9uZWQgc3RyaW5nIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHN1Y2ggYXMgImNvbW1lcmNpYWxfZm9vXzEuMiIgaW4gYSAiZm9vIiByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGV4cGFuZHMgdGhpcyBzdHJpbmcgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21tZXJjaWFsX2Zvb18xLjJfZm9vIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbWJpbmUgdGhpcyBsaWNlbnNlIGZsYWcgd2l0aCBhIHdoaXRlbGlzdCB0aGF0IGhhcworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN0cmluZyAiY29tbWVyY2lhbCIgYW5kIHlvdSBtYXRjaCB0aGUgZmxhZyBhbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhbnkgb3RoZXIgZmxhZyB0aGF0IHN0YXJ0cyB3aXRoIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21tZXJjaWFsIi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVuZGVyIHRoZSBzYW1lIGNpcmN1bXN0YW5jZXMsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZSAiY29tbWVyY2lhbF9mb28iIGluIHRoZSB3aGl0ZWxpc3QgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIG5vdCBvbmx5IG1hdGNoZXMgImNvbW1lcmNpYWxfZm9vXzEuMiIgYnV0CisgICAgICAgICAgICAgICAgICAgICAgICBhbHNvIG1hdGNoZXMgYW55IGxpY2Vuc2UgZmxhZyB3aXRoIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21tZXJjaWFsX2ZvbyIsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZlcnNpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gYmUgdmVyeSBzcGVjaWZpYyBhbmQgdXNlIGJvdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGFuZCB2ZXJzaW9uIHBhcnRzIGluIHRoZSB3aGl0ZWxpc3QgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21tZXJjaWFsX2Zvb18xLjIiKSB0byBzcGVjaWZpY2FsbHkgbWF0Y2ggYQorICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbmVkIHJlY2lwZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJvdGhlci12YXJpYWJsZXMtcmVsYXRlZC10by1jb21tZXJjaWFsLWxpY2Vuc2VzIj4KKyAgICAgICAgICAgIDx0aXRsZT5PdGhlciBWYXJpYWJsZXMgUmVsYXRlZCB0byBDb21tZXJjaWFsIExpY2Vuc2VzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT3RoZXIgaGVscGZ1bCB2YXJpYWJsZXMgcmVsYXRlZCB0byBjb21tZXJjaWFsCisgICAgICAgICAgICAgICAgbGljZW5zZSBoYW5kbGluZyBleGlzdCBhbmQgYXJlIGRlZmluZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtZGlzdHJvdmFycy5pbmM8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ09NTUVSQ0lBTF9BVURJT19QTFVHSU5TID89ICIiCisgICAgIENPTU1FUkNJQUxfVklERU9fUExVR0lOUyA/PSAiIgorICAgICBDT01NRVJDSUFMX1FUID0gIiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoZXNlIGNvbXBvbmVudHMsIHlvdSBjYW4gZG8gc28gYnkgbWFraW5nIHN1cmUgeW91IGhhdmUKKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnRzIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDT01NRVJDSUFMX0FVRElPX1BMVUdJTlMgPSAiZ3N0LXBsdWdpbnMtdWdseS1tYWQgXAorICAgICAgICBnc3QtcGx1Z2lucy11Z2x5LW1wZWdhdWRpb3BhcnNlIgorICAgICBDT01NRVJDSUFMX1ZJREVPX1BMVUdJTlMgPSAiZ3N0LXBsdWdpbnMtdWdseS1tcGVnMmRlYyBcCisgICAgICAgIGdzdC1wbHVnaW5zLXVnbHktbXBlZ3N0cmVhbSBnc3QtcGx1Z2lucy1iYWQtbXBlZ3ZpZGVvcGFyc2UiCisgICAgIENPTU1FUkNJQUxfUVQgPz0gInFtbXAiCisgICAgIExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUID0gImNvbW1lcmNpYWxfZ3N0LXBsdWdpbnMtdWdseSBjb21tZXJjaWFsX2dzdC1wbHVnaW5zLWJhZCBjb21tZXJjaWFsX3FtbXAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE9mIGNvdXJzZSwgeW91IGNvdWxkIGFsc28gY3JlYXRlIGEgbWF0Y2hpbmcgd2hpdGVsaXN0CisgICAgICAgICAgICAgICAgZm9yIHRob3NlIGNvbXBvbmVudHMgdXNpbmcgdGhlIG1vcmUgZ2VuZXJhbCAiY29tbWVyY2lhbCIKKyAgICAgICAgICAgICAgICBpbiB0aGUgd2hpdGVsaXN0LCBidXQgdGhhdCB3b3VsZCBhbHNvIGVuYWJsZSBhbGwgdGhlCisgICAgICAgICAgICAgICAgb3RoZXIgcGFja2FnZXMgd2l0aAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNFTlNFX0ZMQUdTJz48ZmlsZW5hbWU+TElDRU5TRV9GTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgImNvbW1lcmNpYWwiLCB3aGljaCB5b3UgbWF5IG9yIG1heSBub3Qgd2FudDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUID0gImNvbW1lcmNpYWwiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTcGVjaWZ5aW5nIGF1ZGlvIGFuZCB2aWRlbyBwbHVnLWlucyBhcyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT01NRVJDSUFMX0FVRElPX1BMVUdJTlM8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q09NTUVSQ0lBTF9WSURFT19QTFVHSU5TPC9maWxlbmFtZT4gc3RhdGVtZW50cworICAgICAgICAgICAgICAgIG9yIGNvbW1lcmNpYWwgUXQgY29tcG9uZW50cyBhcyBwYXJ0IG9mCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5DT01NRVJDSUFMX1FUPC9maWxlbmFtZT4gc3RhdGVtZW50IChhbG9uZworICAgICAgICAgICAgICAgIHdpdGggdGhlIGVuYWJsaW5nIDxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTX1dISVRFTElTVDwvZmlsZW5hbWU+KSBpbmNsdWRlcyB0aGUKKyAgICAgICAgICAgICAgICBwbHVnLWlucyBvciBjb21wb25lbnRzIGludG8gYnVpbHQgaW1hZ2VzLCB0aHVzIGFkZGluZworICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIG1lZGlhIGZvcm1hdHMgb3IgY29tcG9uZW50cy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvdXNpbmdwb2t5LnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3VzaW5ncG9reS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E4Nzk2MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3VzaW5ncG9reS54bWwKQEAgLTAsMCArMSwxMDg4IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ndXNpbmdwb2t5Jz4KKzx0aXRsZT5Vc2luZyB0aGUgWW9jdG8gUHJvamVjdDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyBjb21tb24gdXNhZ2UgZm9yIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICBUaGUgaW5mb3JtYXRpb24gaXMgaW50cm9kdWN0b3J5IGluIG5hdHVyZSBhcyBvdGhlciBtYW51YWxzIGluIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgIGRvY3VtZW50YXRpb24gc2V0IHByb3ZpZGUgbW9yZSBkZXRhaWxzIG9uIGhvdyB0byB1c2UgdGhlIFlvY3RvIFByb2plY3QuCisgICAgPC9wYXJhPgorCis8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWJ1aWxkJz4KKyAgICA8dGl0bGU+UnVubmluZyBhIEJ1aWxkPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgYSBzdW1tYXJ5IG9mIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBwcm92aWRlcyBpbmZvcm1hdGlvbgorICAgICAgICBmb3IgbGVzcyBvYnZpb3VzIGFzcGVjdHMgb2YgdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIGhvdyB0byBidWlsZCBhbiBpbWFnZSB1c2luZyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgIHN5c3RlbSwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNxcy1idWlsZGluZy1pbWFnZXMnPkJ1aWxkaW5nIEltYWdlczwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0LgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdidWlsZC1vdmVydmlldyc+CisgICAgICAgIDx0aXRsZT5CdWlsZCBPdmVydmlldzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgeW91IHdpbGwgbmVlZCB0byBidWlsZCBhbiBpbWFnZSB3aGVuZXZlciB5b3UgY2hhbmdlIGhhcmR3YXJlCisgICAgICAgICAgICBzdXBwb3J0LCBhZGQgb3IgY2hhbmdlIHN5c3RlbSBsaWJyYXJpZXMsIG9yIGFkZCBvciBjaGFuZ2Ugc2VydmljZXMgdGhhdCBoYXZlIGRlcGVuZGVuY2llcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvYnVpbGRpbmctYW4taW1hZ2UucG5nIiBmb3JtYXQ9IlBORyIgYWxpZ249J2NlbnRlcicgc2NhbGVmaXQ9JzEnLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgICAgICA8Y2FwdGlvbj4KKyAgICAgICAgICAgICAgICA8cGFyYT5CdWlsZGluZyBhbiBJbWFnZTwvcGFyYT4KKyAgICAgICAgICAgIDwvY2FwdGlvbj4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmaXJzdCB0aGluZyB5b3UgbmVlZCB0byBkbyBpcyBzZXQgdXAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgZW52aXJvbm1lbnQgYnkgc291cmNpbmcgYW4gZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0CisgICAgICAgICAgICAoaS5lLgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG9yCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2UgJk9FX0lOSVRfRklMRTsgWzxyZXBsYWNlYWJsZT5idWlsZF9kaXI8L3JlcGxhY2VhYmxlPl0KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxyZXBsYWNlYWJsZT5idWlsZF9kaXI8L3JlcGxhY2VhYmxlPiBhcmd1bWVudCBpcyBvcHRpb25hbCBhbmQgc3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgdGhlCisgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgZm9yIHRoZSBidWlsZCAtCisgICAgICAgICAgICB0aGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIEJ1aWxkIERpcmVjdG9yeSwgaXQgZGVmYXVsdHMgdG8gYSBkaXJlY3RvcnkKKyAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5idWlsZDwvZmlsZW5hbWU+IGluIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIEEgY29tbW9uIHByYWN0aWNlIGlzIHRvIHVzZSBhIGRpZmZlcmVudCBCdWlsZCBEaXJlY3RvcnkgZm9yIGRpZmZlcmVudCB0YXJnZXRzLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIDxmaWxlbmFtZT5+L2J1aWxkL3g4NjwvZmlsZW5hbWU+IGZvciBhIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHRhcmdldCwgYW5kIDxmaWxlbmFtZT5+L2J1aWxkL2FybTwvZmlsZW5hbWU+IGZvciBhIDxmaWxlbmFtZT5xZW11YXJtPC9maWxlbmFtZT4gdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHRoZSBidWlsZCBlbnZpcm9ubWVudCBpcyBzZXQgdXAsIHlvdSBjYW4gYnVpbGQgYSB0YXJnZXQgdXNpbmc6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSA8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBpcyB0aGUgbmFtZSBvZiB0aGUgcmVjaXBlIHlvdSB3YW50IHRvIGJ1aWxkLgorICAgICAgICAgICAgQ29tbW9uIHRhcmdldHMgYXJlIHRoZSBpbWFnZXMgaW4gPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1jb3JlL2ltYWdlczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1zYXRvL2ltYWdlczwvZmlsZW5hbWU+LCBldGMuIGFsbCBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIE9yLCB0aGUgdGFyZ2V0IGNhbiBiZSB0aGUgbmFtZSBvZiBhIHJlY2lwZSBmb3IgYSBzcGVjaWZpYyBwaWVjZSBvZiBzb2Z0d2FyZSBzdWNoIGFzCisgICAgICAgICAgICBCdXN5Qm94LgorICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgaW1hZ2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHN1cHBvcnRzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0icmVmLWltYWdlcyI+SW1hZ2VzPC9saW5rPiIgY2hhcHRlci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgQnVpbGRpbmcgYW4gaW1hZ2Ugd2l0aG91dCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgICAgICAgICAgICAzIChHUEx2MyksIG9yIHNpbWlsYXJseSBsaWNlbnNlZCwgY29tcG9uZW50cyBpcyBzdXBwb3J0ZWQgZm9yCisgICAgICAgICAgICBvbmx5IG1pbmltYWwgYW5kIGJhc2UgaW1hZ2VzLgorICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0ncmVmLWltYWdlcyc+SW1hZ2VzPC9saW5rPiIgY2hhcHRlciBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdidWlsZGluZy1hbi1pbWFnZS11c2luZy1ncGwtY29tcG9uZW50cyc+CisgICAgICAgIDx0aXRsZT5CdWlsZGluZyBhbiBJbWFnZSBVc2luZyBHUEwgQ29tcG9uZW50czwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGFuIGltYWdlIHVzaW5nIEdQTCBjb21wb25lbnRzLCB5b3UgbmVlZCB0byBtYWludGFpbiB5b3VyIG9yaWdpbmFsCisgICAgICAgICAgICBzZXR0aW5ncyBhbmQgbm90IHN3aXRjaCBiYWNrIGFuZCBmb3J0aCBhcHBseWluZyBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIEdOVQorICAgICAgICAgICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAgICAgICAgICAgIElmIHlvdSByZWJ1aWxkIHVzaW5nIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBHUEwsIGRlcGVuZGVuY3kgZXJyb3JzIG1pZ2h0IG9jY3VyCisgICAgICAgICAgICBkdWUgdG8gc29tZSBjb21wb25lbnRzIG5vdCBiZWluZyByZWJ1aWx0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWluc3RhbGwnPgorICAgIDx0aXRsZT5JbnN0YWxsaW5nIGFuZCBVc2luZyB0aGUgUmVzdWx0PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBPbmNlIGFuIGltYWdlIGhhcyBiZWVuIGJ1aWx0LCBpdCBvZnRlbiBuZWVkcyB0byBiZSBpbnN0YWxsZWQuCisgICAgICAgIFRoZSBpbWFnZXMgYW5kIGtlcm5lbHMgYnVpbHQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXJlIHBsYWNlZCBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiBpbgorICAgICAgICA8ZmlsZW5hbWUgY2xhc3M9ImRpcmVjdG9yeSI+dG1wL2RlcGxveS9pbWFnZXM8L2ZpbGVuYW1lPi4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBydW4gcHJlLWJ1aWx0IGltYWdlcyBzdWNoIGFzIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4KKyAgICAgICAgYW5kIDxmaWxlbmFtZT5xZW11YXJtPC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjdXNpbmctcHJlLWJ1aWx0Jz5FeGFtcGxlIFVzaW5nIFByZS1CdWlsdCBCaW5hcmllcyBhbmQgUUVNVTwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGluc3RhbGwgdGhlc2UgaW1hZ2VzLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHlvdXIKKyAgICAgICAgcGFydGljdWxhciBib2FyZCBvciBtYWNoaW5lLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1kZWJ1Z2dpbmcnPgorICAgIDx0aXRsZT5EZWJ1Z2dpbmcgQnVpbGQgRmFpbHVyZXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBleGFjdCBtZXRob2QgZm9yIGRlYnVnZ2luZyBidWlsZCBmYWlsdXJlcyBkZXBlbmRzIG9uIHRoZSBuYXR1cmUgb2YKKyAgICAgICAgdGhlIHByb2JsZW0gYW5kIG9uIHRoZSBzeXN0ZW0ncyBhcmVhIGZyb20gd2hpY2ggdGhlIGJ1ZyBvcmlnaW5hdGVzLgorICAgICAgICBTdGFuZGFyZCBkZWJ1Z2dpbmcgcHJhY3RpY2VzIHN1Y2ggYXMgY29tcGFyaXNvbiBhZ2FpbnN0IHRoZSBsYXN0CisgICAgICAgIGtub3duIHdvcmtpbmcgdmVyc2lvbiB3aXRoIGV4YW1pbmF0aW9uIG9mIHRoZSBjaGFuZ2VzIGFuZCB0aGUKKyAgICAgICAgcmUtYXBwbGljYXRpb24gb2Ygc3RlcHMgdG8gaWRlbnRpZnkgdGhlIG9uZSBjYXVzaW5nIHRoZSBwcm9ibGVtIGFyZQorICAgICAgICB2YWxpZCBmb3IgdGhlIFlvY3RvIFByb2plY3QganVzdCBhcyB0aGV5IGFyZSBmb3IgYW55IG90aGVyIHN5c3RlbS4KKyAgICAgICAgRXZlbiB0aG91Z2ggaXQgaXMgaW1wb3NzaWJsZSB0byBkZXRhaWwgZXZlcnkgcG9zc2libGUgcG90ZW50aWFsIGZhaWx1cmUsCisgICAgICAgIHRoaXMgc2VjdGlvbiBwcm92aWRlcyBzb21lIGdlbmVyYWwgdGlwcyB0byBhaWQgaW4gZGVidWdnaW5nLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBBIHVzZWZ1bCBmZWF0dXJlIGZvciBkZWJ1Z2dpbmcgaXMgdGhlIGVycm9yIHJlcG9ydGluZyB0b29sLgorICAgICAgICBDb25maWd1cmluZyB0aGUgWW9jdG8gUHJvamVjdCB0byB1c2UgdGhpcyB0b29sIGNhdXNlcyB0aGUKKyAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBwcm9kdWNlIGVycm9yIHJlcG9ydGluZyBjb21tYW5kcyBhcworICAgICAgICBwYXJ0IG9mIHRoZSBjb25zb2xlIG91dHB1dC4KKyAgICAgICAgWW91IGNhbiBlbnRlciB0aGUgY29tbWFuZHMgYWZ0ZXIgdGhlIGJ1aWxkIGNvbXBsZXRlcworICAgICAgICB0byBsb2cgZXJyb3IgaW5mb3JtYXRpb24KKyAgICAgICAgaW50byBhIGNvbW1vbiBkYXRhYmFzZSwgdGhhdCBjYW4gaGVscCB5b3UgZmlndXJlIG91dCB3aGF0IG1pZ2h0IGJlCisgICAgICAgIGdvaW5nIHdyb25nLgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGVuYWJsZSBhbmQgdXNlIHRoaXMgZmVhdHVyZSwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctdGhlLWVycm9yLXJlcG9ydGluZy10b29sJz5Vc2luZyB0aGUgRXJyb3IgUmVwb3J0aW5nIFRvb2w8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBkaXNjdXNzaW9ucyBvbiBkZWJ1Z2dpbmcsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnJz5EZWJ1Z2dpbmcgV2l0aCB0aGUgR05VIFByb2plY3QgRGVidWdnZXIgKEdEQikgUmVtb3RlbHk8L3VsaW5rPiIKKyAgICAgICAgYW5kCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNhZHQtZWNsaXBzZSc+V29ya2luZyB3aXRoaW4gRWNsaXBzZTwvdWxpbms+IgorICAgICAgICBzZWN0aW9ucyBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorCisgICAgPG5vdGU+CisgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIHByZXNlbnRzIG1hbnkgZXhhbXBsZXMgb2YgdGhlCisgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgWW91IGNhbiBsZWFybiBhYm91dCBCaXRCYWtlIGJ5IHJlYWRpbmcgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjYml0YmFrZS11c2VyLW1hbnVhbCc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+LgorICAgIDwvbm90ZT4KKworCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1kZWJ1Z2dpbmctdGFza2ZhaWx1cmVzJz4KKyAgICAgICAgPHRpdGxlPlRhc2sgRmFpbHVyZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPlRoZSBsb2cgZmlsZSBmb3Igc2hlbGwgdGFza3MgaXMgYXZhaWxhYmxlIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHtXT1JLRElSfS90ZW1wL2xvZy5kb188cmVwbGFjZWFibGU+dGFza25hbWU8L3JlcGxhY2VhYmxlPi5waWQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPiB0YXNrIGZvciB0aGUgUUVNVSBtaW5pbWFsIGltYWdlIGZvciB0aGUgeDg2CisgICAgICAgICAgICBtYWNoaW5lICg8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+KSBtaWdodCBiZQorICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3RlbXAvbG9nLmRvX2NvbXBpbGUuMjA4MzA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRvIHNlZSB3aGF0CisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPgorICAgICAgICAgICAgcnVucyB0byBnZW5lcmF0ZSB0aGF0IGxvZywgbG9vayBhdCB0aGUgY29ycmVzcG9uZGluZworICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bi5kb188cmVwbGFjZWFibGU+dGFza25hbWU8L3JlcGxhY2VhYmxlPi5waWQ8L2ZpbGVuYW1lPiBmaWxlIGxvY2F0ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBQcmVzZW50bHksIHRoZSBvdXRwdXQgZnJvbSBQeXRob24gdGFza3MgaXMgc2VudCBkaXJlY3RseSB0byB0aGUgY29uc29sZS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktZGVidWdnaW5nLXRhc2tydW5uaW5nJz4KKyAgICAgICAgPHRpdGxlPlJ1bm5pbmcgU3BlY2lmaWMgVGFza3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW55IGdpdmVuIHBhY2thZ2UgY29uc2lzdHMgb2YgYSBzZXQgb2YgdGFza3MuCisgICAgICAgICAgICBUaGUgc3RhbmRhcmQgQml0QmFrZSBiZWhhdmlvciBpbiBtb3N0IGNhc2VzIGlzOgorICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGF0Y2g8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV8qPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGUgZGVmYXVsdCB0YXNrIGlzIDxmaWxlbmFtZT5kb19idWlsZDwvZmlsZW5hbWU+IGFuZCBhbnkgdGFza3MKKyAgICAgICAgICAgIG9uIHdoaWNoIGl0IGRlcGVuZHMgYnVpbGQgZmlyc3QuCisgICAgICAgICAgICBTb21lIHRhc2tzLCBzdWNoIGFzIDxmaWxlbmFtZT5kb19kZXZzaGVsbDwvZmlsZW5hbWU+LCBhcmUgbm90IHBhcnQKKyAgICAgICAgICAgIG9mIHRoZSBkZWZhdWx0IGJ1aWxkIGNoYWluLgorICAgICAgICAgICAgSWYgeW91IHdpc2ggdG8gcnVuIGEgdGFzayB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZSBkZWZhdWx0IGJ1aWxkCisgICAgICAgICAgICBjaGFpbiwgeW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT4tYzwvZmlsZW5hbWU+IG9wdGlvbiBpbiBCaXRCYWtlLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbWF0Y2hib3gtZGVza3RvcCAtYyBkZXZzaGVsbAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3Ugd2lzaCB0byByZXJ1biBhIHRhc2ssIHVzZSB0aGUgPGZpbGVuYW1lPi1mPC9maWxlbmFtZT4gZm9yY2UKKyAgICAgICAgICAgIG9wdGlvbi4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNlcXVlbmNlIGZvcmNlcyByZWNvbXBpbGF0aW9uIGFmdGVyCisgICAgICAgICAgICBjaGFuZ2luZyBmaWxlcyBpbiB0aGUgd29yayBkaXJlY3RvcnkuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBtYXRjaGJveC1kZXNrdG9wCisgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgICAuCisgICAgICAgIDxyZXBsYWNlYWJsZT5tYWtlIHNvbWUgY2hhbmdlcyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhlIHdvcmsgZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgIC4KKyAgICAgJCBiaXRiYWtlIG1hdGNoYm94LWRlc2t0b3AgLWMgY29tcGlsZSAtZgorICAgICAkIGJpdGJha2UgbWF0Y2hib3gtZGVza3RvcAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlcXVlbmNlIGZpcnN0IGJ1aWxkcyBhbmQgdGhlbiByZWNvbXBpbGVzCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWF0Y2hib3gtZGVza3RvcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIGxhc3QgY29tbWFuZCByZXJ1bnMgYWxsIHRhc2tzIChiYXNpY2FsbHkgdGhlIHBhY2thZ2luZyB0YXNrcykKKyAgICAgICAgICAgIGFmdGVyIHRoZSBjb21waWxlLgorICAgICAgICAgICAgQml0QmFrZSByZWNvZ25pemVzIHRoYXQgdGhlIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHRhc2sgd2FzIHJlcnVuIGFuZCB0aGVyZWZvcmUgdW5kZXJzdGFuZHMgdGhhdCB0aGUgb3RoZXIgdGFza3MKKyAgICAgICAgICAgIGFsc28gbmVlZCB0byBiZSBydW4gYWdhaW4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gdmlldyBhIGxpc3Qgb2YgdGFza3MgaW4gYSBnaXZlbiBwYWNrYWdlIGJ5IHJ1bm5pbmcgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fbGlzdHRhc2tzPC9maWxlbmFtZT4gdGFzayBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbWF0Y2hib3gtZGVza3RvcCAtYyBsaXN0dGFza3MKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSByZXN1bHRzIGFwcGVhciBhcyBvdXRwdXQgdG8gdGhlIGNvbnNvbGUgYW5kIGFyZSBhbHNvIGluIHRoZQorICAgICAgICAgICAgZmlsZSA8ZmlsZW5hbWU+JHtXT1JLRElSfS90ZW1wL2xvZy5kb19saXN0dGFza3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktZGVidWdnaW5nLWRlcGVuZGVuY2llcyc+CisgICAgICAgIDx0aXRsZT5EZXBlbmRlbmN5IEdyYXBoczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTb21ldGltZXMgaXQgY2FuIGJlIGhhcmQgdG8gc2VlIHdoeSBCaXRCYWtlIHdhbnRzIHRvIGJ1aWxkCisgICAgICAgICAgICBvdGhlciBwYWNrYWdlcyBiZWZvcmUgYnVpbGRpbmcgYSBnaXZlbiBwYWNrYWdlIHlvdSBoYXZlIHNwZWNpZmllZC4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Yml0YmFrZSAtZyA8cmVwbGFjZWFibGU+dGFyZ2V0bmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgY3JlYXRlcyB0aGUgPGZpbGVuYW1lPnBuLWJ1aWxkbGlzdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPnBuLWRlcGVuZHMuZG90PC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZS1kZXBlbmRzLmRvdDwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT50YXNrLWRlcGVuZHMuZG90PC9maWxlbmFtZT4gZmlsZXMgaW4gdGhlIGN1cnJlbnQKKyAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFRoZXNlIGZpbGVzIHNob3cgd2hhdCB3aWxsIGJlIGJ1aWx0IGFuZCB0aGUgcGFja2FnZSBhbmQgdGFzaworICAgICAgICAgICAgZGVwZW5kZW5jaWVzLCB3aGljaCBhcmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHJvYmxlbXMuCisgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1nIC11IGRlcGV4cCA8cmVwbGFjZWFibGU+dGFyZ2V0bmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGNvbW1hbmQgdG8gZGlzcGxheSB0aGUgcmVzdWx0cyBpbiBhIG1vcmUgaHVtYW4tcmVhZGFibGUgZm9ybS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktZGVidWdnaW5nLWJpdGJha2UnPgorICAgICAgICA8dGl0bGU+R2VuZXJhbCBCaXRCYWtlIFByb2JsZW1zPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gc2VlIGRlYnVnIG91dHB1dCBmcm9tIEJpdEJha2UgYnkgdXNpbmcgdGhlIDxmaWxlbmFtZT4tRDwvZmlsZW5hbWU+IG9wdGlvbi4KKyAgICAgICAgICAgIFRoZSBkZWJ1ZyBvdXRwdXQgZ2l2ZXMgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IEJpdEJha2UKKyAgICAgICAgICAgIGlzIGRvaW5nIGFuZCB0aGUgcmVhc29uIGJlaGluZCBpdC4KKyAgICAgICAgICAgIEVhY2ggPGZpbGVuYW1lPi1EPC9maWxlbmFtZT4gb3B0aW9uIHlvdSB1c2UgaW5jcmVhc2VzIHRoZSBsb2dnaW5nIGxldmVsLgorICAgICAgICAgICAgVGhlIG1vc3QgY29tbW9uIHVzYWdlIGlzIDxmaWxlbmFtZT4tREREPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBvdXRwdXQgZnJvbSA8ZmlsZW5hbWU+Yml0YmFrZSAtREREIC12PC9maWxlbmFtZT4gPHJlcGxhY2VhYmxlPnRhcmdldG5hbWU8L3JlcGxhY2VhYmxlPiBjYW4gcmV2ZWFsIHdoeQorICAgICAgICAgICAgQml0QmFrZSBjaG9zZSBhIGNlcnRhaW4gdmVyc2lvbiBvZiBhIHBhY2thZ2Ugb3Igd2h5IEJpdEJha2UKKyAgICAgICAgICAgIHBpY2tlZCBhIGNlcnRhaW4gcHJvdmlkZXIuCisgICAgICAgICAgICBUaGlzIGNvbW1hbmQgY291bGQgYWxzbyBoZWxwIHlvdSBpbiBhIHNpdHVhdGlvbiB3aGVyZSB5b3UgdGhpbmsgQml0QmFrZSBkaWQgc29tZXRoaW5nCisgICAgICAgICAgICB1bmV4cGVjdGVkLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2RldmVsb3BtZW50LWhvc3Qtc3lzdGVtLWlzc3Vlcyc+CisgICAgICAgIDx0aXRsZT5EZXZlbG9wbWVudCBIb3N0IFN5c3RlbSBJc3N1ZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU29tZXRpbWVzIGlzc3VlcyBvbiB0aGUgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gY2FuIGNhdXNlIHlvdXIKKyAgICAgICAgICAgIGJ1aWxkIHRvIGZhaWwuCisgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIGtub3duLCBob3N0LXNwZWNpZmljIHByb2JsZW1zLgorICAgICAgICAgICAgQmUgc3VyZSB0byBhbHdheXMgY29uc3VsdCB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19SRUxFQVNFX05PVEVTOyc+UmVsZWFzZSBOb3RlczwvdWxpbms+CisgICAgICAgICAgICBmb3IgYSBsb29rIGF0IGFsbCByZWxlYXNlLXJlbGF0ZWQgaXNzdWVzLgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5nbGliYy1pbml0aWFsPC9maWxlbmFtZT4gZmFpbHMgdG8gYnVpbGQ8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBkZXZlbG9wbWVudCBob3N0IHN5c3RlbSBoYXMgdGhlIHVucGF0Y2hlZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+R05VIE1ha2UgMy44MjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgZmFpbHMgZm9yIDxmaWxlbmFtZT5nbGliYy1pbml0aWFsPC9maWxlbmFtZT4gZHVyaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlR5cGljYWxseSwgZXZlcnkgZGlzdHJpYnV0aW9uIHRoYXQgc2hpcHMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkdOVSBNYWtlIDMuODI8L2ZpbGVuYW1lPiBhcworICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCBhbHJlYWR5IGhhcyB0aGUgcGF0Y2hlZCB2ZXJzaW9uLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBzb21lIGRpc3RyaWJ1dGlvbnMsIHN1Y2ggYXMgRGViaWFuLCBoYXZlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5HTlUgTWFrZSAzLjgyPC9maWxlbmFtZT4gYXMgYW4gb3B0aW9uLCB3aGljaAorICAgICAgICAgICAgICAgICAgICBpcyB1bnBhdGNoZWQuCisgICAgICAgICAgICAgICAgICAgIFlvdSB3aWxsIHNlZSB0aGlzIGVycm9yIG9uIHRoZXNlIHR5cGVzIG9mIGRpc3RyaWJ1dGlvbnMuCisgICAgICAgICAgICAgICAgICAgIFN3aXRjaCB0byA8ZmlsZW5hbWU+R05VIE1ha2UgMy44MTwvZmlsZW5hbWU+IG9yIHBhdGNoCisgICAgICAgICAgICAgICAgICAgIHlvdXIgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiB0byBzb2x2ZSB0aGUgcHJvYmxlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktZGVidWdnaW5nLWJ1aWxkZmlsZSc+CisgICAgICAgIDx0aXRsZT5CdWlsZGluZyB3aXRoIE5vIERlcGVuZGVuY2llczwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gYnVpbGQgYSBzcGVjaWZpYyByZWNpcGUgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlKSwKKyAgICAgICAgICAgIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBmb3JtOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWIgPHJlcGxhY2VhYmxlPnNvbWVwYXRoPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPnNvbWVyZWNpcGU8L3JlcGxhY2VhYmxlPi5iYgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBjb21tYW5kIGZvcm0gZG9lcyBub3QgY2hlY2sgZm9yIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IHNob3VsZCB1c2UgaXQKKyAgICAgICAgICAgIG9ubHkgd2hlbiB5b3Uga25vdyBleGlzdGluZyBkZXBlbmRlbmNpZXMgaGF2ZSBiZWVuIG1ldC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGZyYWdtZW50cyBvZiB0aGUgZmlsZW5hbWUuCisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBCaXRCYWtlIGNoZWNrcyBmb3IgYSB1bmlxdWUgbWF0Y2guCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWRlYnVnZ2luZy12YXJpYWJsZXMnPgorICAgICAgICA8dGl0bGU+VmFyaWFibGVzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPi1lPC9maWxlbmFtZT4gQml0QmFrZSBvcHRpb24gdG8KKyAgICAgICAgICAgIGRpc3BsYXkgdGhlIHBhcnNpbmcgZW52aXJvbm1lbnQgZm9yIGEgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZGlzcGxheXMgdGhlIGdlbmVyYWwgcGFyc2luZyBlbnZpcm9ubWVudDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1lCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIG5leHQgZXhhbXBsZSBzaG93cyB0aGUgcGFyc2luZyBlbnZpcm9ubWVudCBmb3IgYSBzcGVjaWZpYworICAgICAgICAgICAgcmVjaXBlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWUgPHJlcGxhY2VhYmxlPnJlY2lwZW5hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlY2lwZS1sb2dnaW5nLW1lY2hhbmlzbXMnPgorICAgICAgICA8dGl0bGU+UmVjaXBlIExvZ2dpbmcgTWVjaGFuaXNtczwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVzdCBwcmFjdGljZXMgZXhpc3Qgd2hpbGUgd3JpdGluZyByZWNpcGVzIHRoYXQgYm90aCBsb2cgYnVpbGQgcHJvZ3Jlc3MgYW5kCisgICAgICAgICAgICBhY3Qgb24gYnVpbGQgY29uZGl0aW9ucyBzdWNoIGFzIHdhcm5pbmdzIGFuZCBlcnJvcnMuCisgICAgICAgICAgICBCb3RoIFB5dGhvbiBhbmQgQmFzaCBsYW5ndWFnZSBiaW5kaW5ncyBleGlzdCBmb3IgdGhlIGxvZ2dpbmcgbWVjaGFuaXNtOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlB5dGhvbjo8L2VtcGhhc2lzPiBGb3IgUHl0aG9uIGZ1bmN0aW9ucywgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0cyBzZXZlcmFsIGxvZ2xldmVsczogPGZpbGVuYW1lPmJiLmZhdGFsPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5lcnJvcjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YmIud2FybjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIubm90ZTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YmIucGxhaW48L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5iYi5kZWJ1ZzwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QmFzaDo8L2VtcGhhc2lzPiBGb3IgQmFzaCBmdW5jdGlvbnMsIHRoZSBzYW1lIHNldAorICAgICAgICAgICAgICAgICAgICBvZiBsb2dsZXZlbHMgZXhpc3QgYW5kIGFyZSBhY2Nlc3NlZCB3aXRoIGEgc2ltaWxhciBzeW50YXg6CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmZhdGFsPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5iYmVycm9yPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYndhcm48L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmJibm90ZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJwbGFpbjwvZmlsZW5hbWU+LCBhbmQgPGZpbGVuYW1lPmJiZGVidWc8L2ZpbGVuYW1lPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgZ3VpZGFuY2Ugb24gaG93IGxvZ2dpbmcgaXMgaGFuZGxlZCBpbiBib3RoIFB5dGhvbiBhbmQgQmFzaCByZWNpcGVzLCBzZWUgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9nZ2luZy5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXM8L2ZpbGVuYW1lPiBmb2xkZXIgb2YgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbG9nZ2luZy13aXRoLXB5dGhvbic+CisgICAgICAgICAgICA8dGl0bGU+TG9nZ2luZyBXaXRoIFB5dGhvbjwvdGl0bGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIGNyZWF0aW5nIHJlY2lwZXMgdXNpbmcgUHl0aG9uIGFuZCBpbnNlcnRpbmcgY29kZSB0aGF0IGhhbmRsZXMgYnVpbGQgbG9ncywKKyAgICAgICAgICAgICAgICBrZWVwIGluIG1pbmQgdGhlIGdvYWwgaXMgdG8gaGF2ZSBpbmZvcm1hdGl2ZSBsb2dzIHdoaWxlIGtlZXBpbmcgdGhlIGNvbnNvbGUgYXMKKyAgICAgICAgICAgICAgICAic2lsZW50IiBhcyBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICBBbHNvLCBpZiB5b3Ugd2FudCBzdGF0dXMgbWVzc2FnZXMgaW4gdGhlIGxvZywgdXNlIHRoZSAiZGVidWciIGxvZ2xldmVsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSB3cml0dGVuIGluIFB5dGhvbi4KKyAgICAgICAgICAgICAgICBUaGUgY29kZSBoYW5kbGVzIGxvZ2dpbmcgZm9yIGEgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHRoZQorICAgICAgICAgICAgICAgIG51bWJlciBvZiB0YXNrcyBuZWVkZWQgdG8gYmUgcnVuLgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWxpc3R0YXNrcyc+PGZpbGVuYW1lPmRvX2xpc3R0YXNrczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcHl0aG9uIGRvX2xpc3R0YXNrcygpIHsKKyAgICAgICAgIGJiLmRlYnVnKDIsICJTdGFydGluZyB0byBmaWd1cmUgb3V0IHRoZSB0YXNrIGxpc3QiKQorICAgICAgICAgaWYgbm90ZXdvcnRoeV9jb25kaXRpb246CisgICAgICAgICAgICAgYmIubm90ZSgiVGhlcmUgYXJlIDQ3IHRhc2tzIHRvIHJ1biIpCisgICAgICAgICBiYi5kZWJ1ZygyLCAiR290IHRvIHBvaW50IHh5eiIpCisgICAgICAgICBpZiB3YXJuaW5nX3RyaWdnZXI6CisgICAgICAgICAgICAgYmIud2FybigiRGV0ZWN0ZWQgd2FybmluZ190cmlnZ2VyLCB0aGlzIG1pZ2h0IGJlIGEgcHJvYmxlbSBsYXRlci4iKQorICAgICAgICAgaWYgcmVjb3ZlcmFibGVfZXJyb3I6CisgICAgICAgICAgICAgYmIuZXJyb3IoIkhpdCByZWNvdmVyYWJsZV9lcnJvciwgeW91IHJlYWxseSBuZWVkIHRvIGZpeCB0aGlzISIpCisgICAgICAgICBpZiBmYXRhbF9lcnJvcjoKKyAgICAgICAgICAgICBiYi5mYXRhbCgiZmF0YWxfZXJyb3IgZGV0ZWN0ZWQsIHVuYWJsZSB0byBwcmludCB0aGUgdGFzayBsaXN0IikKKyAgICAgICAgIGJiLnBsYWluKCJUaGUgdGFza3MgcHJlc2VudCBhcmUgYWJjIikKKyAgICAgICAgIGJiLmRlYnVnKDIsICJGaW5pc2hlZCBmaWd1cmluZyBvdXQgdGhlIHRhc2tsaXN0IikKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdsb2dnaW5nLXdpdGgtYmFzaCc+CisgICAgICAgICAgICA8dGl0bGU+TG9nZ2luZyBXaXRoIEJhc2g8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiBjcmVhdGluZyByZWNpcGVzIHVzaW5nIEJhc2ggYW5kIGluc2VydGluZyBjb2RlIHRoYXQgaGFuZGxlcyBidWlsZAorICAgICAgICAgICAgICAgIGxvZ3MsIHlvdSBoYXZlIHRoZSBzYW1lIGdvYWxzIC0gaW5mb3JtYXRpdmUgd2l0aCBtaW5pbWFsIGNvbnNvbGUgb3V0cHV0LgorICAgICAgICAgICAgICAgIFRoZSBzeW50YXggeW91IHVzZSBmb3IgcmVjaXBlcyB3cml0dGVuIGluIEJhc2ggaXMgc2ltaWxhciB0byB0aGF0IG9mCisgICAgICAgICAgICAgICAgcmVjaXBlcyB3cml0dGVuIGluIFB5dGhvbiBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHdyaXR0ZW4gaW4gQmFzaC4KKyAgICAgICAgICAgICAgICBUaGUgY29kZSBsb2dzIHRoZSBwcm9ncmVzcyBvZiB0aGUgPGZpbGVuYW1lPmRvX215X2Z1bmN0aW9uPC9maWxlbmFtZT4gZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19teV9mdW5jdGlvbigpIHsKKyAgICAgICAgIGJiZGVidWcgMiAiUnVubmluZyBkb19teV9mdW5jdGlvbiIKKyAgICAgICAgIGlmIFsgZXhjZXB0aW9uYWxfY29uZGl0aW9uIF07IHRoZW4KKyAgICAgICAgICAgICBiYm5vdGUgIkhpdCBleGNlcHRpb25hbF9jb25kaXRpb24iCisgICAgICAgICBmaQorICAgICAgICAgYmJkZWJ1ZyAyICAiR290IHRvIHBvaW50IHh5eiIKKyAgICAgICAgIGlmIFsgd2FybmluZ190cmlnZ2VyIF07IHRoZW4KKyAgICAgICAgICAgICBiYndhcm4gIkRldGVjdGVkIHdhcm5pbmdfdHJpZ2dlciwgdGhpcyBtaWdodCBjYXVzZSBhIHByb2JsZW0gbGF0ZXIuIgorICAgICAgICAgZmkKKyAgICAgICAgIGlmIFsgcmVjb3ZlcmFibGVfZXJyb3IgXTsgdGhlbgorICAgICAgICAgICAgIGJiZXJyb3IgIkhpdCByZWNvdmVyYWJsZV9lcnJvciwgY29ycmVjdGluZyIKKyAgICAgICAgIGZpCisgICAgICAgICBpZiBbIGZhdGFsX2Vycm9yIF07IHRoZW4KKyAgICAgICAgICAgICBiYmZhdGFsICJmYXRhbF9lcnJvciBkZXRlY3RlZCIKKyAgICAgICAgIGZpCisgICAgICAgICBiYmRlYnVnIDIgIkNvbXBsZXRlZCBkb19teV9mdW5jdGlvbiIKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktZGVidWdnaW5nLW90aGVycyc+CisgICAgICAgIDx0aXRsZT5PdGhlciBUaXBzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgb3RoZXIgdGlwcyB0aGF0IHlvdSBtaWdodCBmaW5kIHVzZWZ1bDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZW4gYWRkaW5nIG5ldyBwYWNrYWdlcywgaXQgaXMgd29ydGggd2F0Y2hpbmcgZm9yCisgICAgICAgICAgICAgICAgICAgIHVuZGVzaXJhYmxlIGl0ZW1zIG1ha2luZyB0aGVpciB3YXkgaW50byBjb21waWxlciBjb21tYW5kIGxpbmVzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGRvIG5vdCB3YW50IHJlZmVyZW5jZXMgdG8gbG9jYWwgc3lzdGVtIGZpbGVzIGxpa2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvbGliLzwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT4vdXNyL2luY2x1ZGUvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JZiB5b3Ugd2FudCB0byByZW1vdmUgdGhlIDxmaWxlbmFtZT5wc3BsYXNoPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYm9vdCBzcGxhc2hzY3JlZW4sCisgICAgICAgICAgICAgICAgICAgIGFkZCA8ZmlsZW5hbWU+cHNwbGFzaD1mYWxzZTwvZmlsZW5hbWU+IHRvICB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KKyAgICAgICAgICAgICAgICAgICAgRG9pbmcgc28gcHJldmVudHMgPGZpbGVuYW1lPnBzcGxhc2g8L2ZpbGVuYW1lPiBmcm9tIGxvYWRpbmcKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRodXMgYWxsb3dzIHlvdSB0byBzZWUgdGhlIGNvbnNvbGUuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gc3dpdGNoIG91dCBvZiB0aGUgc3BsYXNoc2NyZWVuIGJ5CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaGluZyB0aGUgdmlydHVhbCBjb25zb2xlIChlLmcuIEZuK0xlZnQgb3IgRm4rUmlnaHQgb24gYSBaYXVydXMpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nbWFpbnRhaW5pbmctYnVpbGQtb3V0cHV0LXF1YWxpdHknPgorICAgIDx0aXRsZT5NYWludGFpbmluZyBCdWlsZCBPdXRwdXQgUXVhbGl0eTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgTWFueSBmYWN0b3JzIGNhbiBpbmZsdWVuY2UgdGhlIHF1YWxpdHkgb2YgYSBidWlsZC4KKyAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB1cGdyYWRlIGEgcmVjaXBlIHRvIHVzZSBhIG5ldyB2ZXJzaW9uIG9mIGFuIHVwc3RyZWFtIHNvZnR3YXJlCisgICAgICAgIHBhY2thZ2Ugb3IgeW91IGV4cGVyaW1lbnQgd2l0aCBzb21lIG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHN1YnRsZSBjaGFuZ2VzCisgICAgICAgIGNhbiBvY2N1ciB0aGF0IHlvdSBtaWdodCBub3QgZGV0ZWN0IHVudGlsIGxhdGVyLgorICAgICAgICBDb25zaWRlciB0aGUgY2FzZSB3aGVyZSB5b3VyIHJlY2lwZSBpcyB1c2luZyBhIG5ld2VyIHZlcnNpb24gb2YgYW4gdXBzdHJlYW0gcGFja2FnZS4KKyAgICAgICAgSW4gdGhpcyBjYXNlLCBhIG5ldyB2ZXJzaW9uIG9mIGEgcGllY2Ugb2Ygc29mdHdhcmUgbWlnaHQgaW50cm9kdWNlIGFuIG9wdGlvbmFsCisgICAgICAgIGRlcGVuZGVuY3kgb24gYW5vdGhlciBsaWJyYXJ5LCB3aGljaCBpcyBhdXRvLWRldGVjdGVkLgorICAgICAgICBJZiB0aGF0IGxpYnJhcnkgaGFzIGFscmVhZHkgYmVlbiBidWlsdCB3aGVuIHRoZSBzb2Z0d2FyZSBpcyBidWlsZGluZywKKyAgICAgICAgdGhlIHNvZnR3YXJlIHdpbGwgbGluayB0byB0aGUgYnVpbHQgbGlicmFyeSBhbmQgdGhhdCBsaWJyYXJ5IHdpbGwgYmUgcHVsbGVkCisgICAgICAgIGludG8geW91ciBpbWFnZSBhbG9uZyB3aXRoIHRoZSBuZXcgc29mdHdhcmUgZXZlbiBpZiB5b3UgZGlkIG5vdCB3YW50IHRoZQorICAgICAgICBsaWJyYXJ5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYnVpbGRoaXN0b3J5Jz48ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzIGV4aXN0cyB0byBoZWxwIHlvdSBtYWludGFpbgorICAgICAgICB0aGUgcXVhbGl0eSBvZiB5b3VyIGJ1aWxkIG91dHB1dC4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlIGNsYXNzIHRvIGhpZ2hsaWdodCB1bmV4cGVjdGVkIGFuZCBwb3NzaWJseSB1bndhbnRlZAorICAgICAgICBjaGFuZ2VzIGluIHRoZSBidWlsZCBvdXRwdXQuCisgICAgICAgIFdoZW4geW91IGVuYWJsZSBidWlsZCBoaXN0b3J5LCBpdCByZWNvcmRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb250ZW50cyBvZgorICAgICAgICBlYWNoIHBhY2thZ2UgYW5kIGltYWdlIGFuZCB0aGVuIGNvbW1pdHMgdGhhdCBpbmZvcm1hdGlvbiB0byBhIGxvY2FsIEdpdAorICAgICAgICByZXBvc2l0b3J5IHdoZXJlIHlvdSBjYW4gZXhhbWluZSB0aGUgaW5mb3JtYXRpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgZm9sbG93aW5nOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SG93IHlvdSBjYW4gZW5hYmxlIGFuZCBkaXNhYmxlCisgICAgICAgICAgICAgICBidWlsZCBoaXN0b3J5PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ib3cgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBidWlsZCBoaXN0b3J5IGNvbnRhaW5zCisgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkhvdyB0byBsaW1pdCB0aGUgaW5mb3JtYXRpb24gdXNlZCBmb3IgYnVpbGQgaGlzdG9yeQorICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ib3cgdG8gZXhhbWluZSB0aGUgYnVpbGQgaGlzdG9yeSBmcm9tIGJvdGggYQorICAgICAgICAgICAgICAgY29tbWFuZC1saW5lIGFuZCB3ZWIgaW50ZXJmYWNlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J2VuYWJsaW5nLWFuZC1kaXNhYmxpbmctYnVpbGQtaGlzdG9yeSc+CisgICAgICAgIDx0aXRsZT5FbmFibGluZyBhbmQgRGlzYWJsaW5nIEJ1aWxkIEhpc3Rvcnk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnVpbGQgaGlzdG9yeSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgICAgICAgICAgVG8gZW5hYmxlIGl0LCBhZGQgdGhlIGZvbGxvd2luZyA8ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+CisgICAgICAgICAgICBzdGF0ZW1lbnQgYW5kIHNldCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMREhJU1RPUllfQ09NTUlUJz48ZmlsZW5hbWU+QlVJTERISVNUT1JZX0NPTU1JVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgdG8gIjEiIGF0IHRoZSBlbmQgb2YgeW91cgorICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgZm91bmQgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJidWlsZGhpc3RvcnkiCisgICAgIEJVSUxESElTVE9SWV9DT01NSVQgPSAiMSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEVuYWJsaW5nIGJ1aWxkIGhpc3RvcnkgYXMgcHJldmlvdXNseSBkZXNjcmliZWQKKyAgICAgICAgICAgIGNhdXNlcyB0aGUgYnVpbGQgcHJvY2VzcyB0byBjb2xsZWN0IGJ1aWxkCisgICAgICAgICAgICBvdXRwdXQgaW5mb3JtYXRpb24gYW5kIGNvbW1pdCBpdCB0byBhIGxvY2FsCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNnaXQnPkdpdDwvdWxpbms+IHJlcG9zaXRvcnkuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBFbmFibGluZyBidWlsZCBoaXN0b3J5IGluY3JlYXNlcyB5b3VyIGJ1aWxkIHRpbWVzIHNsaWdodGx5LAorICAgICAgICAgICAgICAgIHBhcnRpY3VsYXJseSBmb3IgaW1hZ2VzLCBhbmQgaW5jcmVhc2VzIHRoZSBhbW91bnQgb2YgZGlzaworICAgICAgICAgICAgICAgIHNwYWNlIHVzZWQgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBkaXNhYmxlIGJ1aWxkIGhpc3RvcnkgYnkgcmVtb3ZpbmcgdGhlIHByZXZpb3VzIHN0YXRlbWVudHMKKyAgICAgICAgICAgIGZyb20geW91ciA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1bmRlcnN0YW5kaW5nLXdoYXQtdGhlLWJ1aWxkLWhpc3RvcnktY29udGFpbnMnPgorICAgICAgICA8dGl0bGU+VW5kZXJzdGFuZGluZyBXaGF0IHRoZSBCdWlsZCBIaXN0b3J5IENvbnRhaW5zPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJ1aWxkIGhpc3RvcnkgaW5mb3JtYXRpb24gaXMga2VwdCBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVE9QRElSJz48ZmlsZW5hbWU+VE9QRElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0vYnVpbGRoaXN0b3J5PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkgYXMgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMREhJU1RPUllfRElSJz48ZmlsZW5hbWU+QlVJTERISVNUT1JZX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgYWJicmV2aWF0ZWQgbGlzdGluZzoKKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9idWlsZGhpc3RvcnkucG5nIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNmluIiBkZXB0aD0iNGluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBdCB0aGUgdG9wIGxldmVsLCB0aGVyZSBpcyBhIDxmaWxlbmFtZT5tZXRhZGF0YS1yZXZzPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgdGhhdCBsaXN0cyB0aGUgcmV2aXNpb25zIG9mIHRoZSByZXBvc2l0b3JpZXMgZm9yIHRoZSBsYXllcnMgZW5hYmxlZAorICAgICAgICAgICAgd2hlbiB0aGUgYnVpbGQgd2FzIHByb2R1Y2VkLgorICAgICAgICAgICAgVGhlIHJlc3Qgb2YgdGhlIGRhdGEgc3BsaXRzIGludG8gc2VwYXJhdGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlczwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+aW1hZ2VzPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+c2RrPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMsIHRoZSBjb250ZW50cyBvZiB3aGljaCBhcmUKKyAgICAgICAgICAgIGRlc2NyaWJlZCBiZWxvdy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdidWlsZC1oaXN0b3J5LXBhY2thZ2UtaW5mb3JtYXRpb24nPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkIEhpc3RvcnkgUGFja2FnZSBJbmZvcm1hdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBoaXN0b3J5IGZvciBlYWNoIHBhY2thZ2UgY29udGFpbnMgYSB0ZXh0IGZpbGUgdGhhdCBoYXMKKyAgICAgICAgICAgICAgICBuYW1lLXZhbHVlIHBhaXJzIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIDxmaWxlbmFtZT5idWlsZGhpc3RvcnkvcGFja2FnZXMvaTU4Ni1wb2t5LWxpbnV4L2J1c3lib3gvYnVzeWJveC9sYXRlc3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQViA9IDEuMjIuMQorICAgICBQUiA9IHIzMgorICAgICBSUFJPVklERVMgPQorICAgICBSREVQRU5EUyA9IGdsaWJjICg+PSAyLjIwKSB1cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2cKKyAgICAgUlJFQ09NTUVORFMgPSBidXN5Ym94LXN5c2xvZyBidXN5Ym94LXVkaGNwYyB1cGRhdGUtcmMuZAorICAgICBQS0dTSVpFID0gNTQwMTY4CisgICAgIEZJTEVTID0gL3Vzci9iaW4vKiAvdXNyL3NiaW4vKiAvdXNyL2xpYi9idXN5Ym94LyogL3Vzci9saWIvbGliKi5zby4qIFwKKyAgICAgICAgL2V0YyAvY29tIC92YXIgL2Jpbi8qIC9zYmluLyogL2xpYi8qLnNvLiogL2xpYi91ZGV2L3J1bGVzLmQgXAorICAgICAgICAvdXNyL2xpYi91ZGV2L3J1bGVzLmQgL3Vzci9zaGFyZS9idXN5Ym94IC91c3IvbGliL2J1c3lib3gvKiBcCisgICAgICAgIC91c3Ivc2hhcmUvcGl4bWFwcyAvdXNyL3NoYXJlL2FwcGxpY2F0aW9ucyAvdXNyL3NoYXJlL2lkbCBcCisgICAgICAgIC91c3Ivc2hhcmUvb21mIC91c3Ivc2hhcmUvc291bmRzIC91c3IvbGliL2Jvbm9iby9zZXJ2ZXJzCisgICAgIEZJTEVMSVNUID0gL2Jpbi9idXN5Ym94IC9iaW4vYnVzeWJveC5ub3N1aWQgL2Jpbi9idXN5Ym94LnN1aWQgL2Jpbi9zaCBcCisgICAgICAgIC9ldGMvYnVzeWJveC5saW5rcy5ub3N1aWQgL2V0Yy9idXN5Ym94LmxpbmtzLnN1aWQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTW9zdCBvZiB0aGVzZSBuYW1lLXZhbHVlIHBhaXJzIGNvcnJlc3BvbmQgdG8gdmFyaWFibGVzIHVzZWQKKyAgICAgICAgICAgICAgICB0byBwcm9kdWNlIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgIFRoZSBleGNlcHRpb25zIGFyZSA8ZmlsZW5hbWU+RklMRUxJU1Q8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgdGhlCisgICAgICAgICAgICAgICAgYWN0dWFsIGxpc3Qgb2YgZmlsZXMgaW4gdGhlIHBhY2thZ2UsIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QS0dTSVpFPC9maWxlbmFtZT4sIHdoaWNoIGlzIHRoZSB0b3RhbCBzaXplIG9mIGZpbGVzCisgICAgICAgICAgICAgICAgaW4gdGhlIHBhY2thZ2UgaW4gYnl0ZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXJlIGlzIGFsc28gYSBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlY2lwZSBmcm9tIHdoaWNoIHRoZQorICAgICAgICAgICAgICAgIHBhY2thZ2UgY2FtZSAoZS5nLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZGhpc3RvcnkvcGFja2FnZXMvaTU4Ni1wb2t5LWxpbnV4L2J1c3lib3gvbGF0ZXN0PC9maWxlbmFtZT4pOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFYgPSAxLjIyLjEKKyAgICAgUFIgPSByMzIKKyAgICAgREVQRU5EUyA9IGluaXRzY3JpcHRzIGtlcm4tdG9vbHMtbmF0aXZlIHVwZGF0ZS1yYy5kLW5hdGl2ZSBcCisgICAgICAgIHZpcnR1YWwvaTU4Ni1wb2t5LWxpbnV4LWNvbXBpbGVybGlicyB2aXJ0dWFsL2k1ODYtcG9reS1saW51eC1nY2MgXAorICAgICAgICB2aXJ0dWFsL2xpYmMgdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzCisgICAgIFBBQ0tBR0VTID0gYnVzeWJveC1wdGVzdCBidXN5Ym94LWh0dHBkIGJ1c3lib3gtdWRoY3BkIGJ1c3lib3gtdWRoY3BjIFwKKyAgICAgICAgYnVzeWJveC1zeXNsb2cgYnVzeWJveC1tZGV2IGJ1c3lib3gtaHdjbG9jayBidXN5Ym94LWRiZyBcCisgICAgICAgIGJ1c3lib3gtc3RhdGljZGV2IGJ1c3lib3gtZGV2IGJ1c3lib3gtZG9jIGJ1c3lib3gtbG9jYWxlIGJ1c3lib3gKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZpbmFsbHksIGZvciB0aG9zZSByZWNpcGVzIGZldGNoZWQgZnJvbSBhIHZlcnNpb24gY29udHJvbAorICAgICAgICAgICAgICAgIHN5c3RlbSAoZS5nLiwgR2l0KSwgYSBmaWxlIGV4aXN0cyB0aGF0IGxpc3RzIHNvdXJjZSByZXZpc2lvbnMKKyAgICAgICAgICAgICAgICB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIHJlY2lwZSBhbmQgbGlzdHMgdGhlIGFjdHVhbCByZXZpc2lvbnMKKyAgICAgICAgICAgICAgICB1c2VkIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgTGlzdGVkIGFuZCBhY3R1YWwgcmV2aXNpb25zIG1pZ2h0IGRpZmZlciB3aGVuCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGlzIHNldCB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezxsaW5rIGxpbmtlbmQ9J3Zhci1BVVRPUkVWJz5BVVRPUkVWPC9saW5rPn08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgYXNzdW1pbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5L3BhY2thZ2VzL3FlbXV4ODYtcG9reS1saW51eC9saW51eC15b2N0by9sYXRlc3Rfc3JjcmV2PC9maWxlbmFtZT4pOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBTUkNSRVZfbWFjaGluZSA9ICIzOGNkNTYwZDUwMjJlZDJkYmQxYWIwZGNhOTY0MmU0N2M5OGEwYWExIgorICAgICBTUkNSRVZfbWFjaGluZSA9ICIzOGNkNTYwZDUwMjJlZDJkYmQxYWIwZGNhOTY0MmU0N2M5OGEwYWExIgorICAgICAjIFNSQ1JFVl9tZXRhID0gImEyMjdmMjBlZmYwNTZlNTExZDUwNGIyZTQ5MGYzNzc0YWIyNjBkNmYiCisgICAgIFNSQ1JFVl9tZXRhID0gImEyMjdmMjBlZmYwNTZlNTExZDUwNGIyZTQ5MGYzNzc0YWIyNjBkNmYiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5LWNvbGxlY3Qtc3JjcmV2czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tbWFuZCB3aXRoIHRoZSA8ZmlsZW5hbWU+LWE8L2ZpbGVuYW1lPiBvcHRpb24gdG8KKyAgICAgICAgICAgICAgICBjb2xsZWN0IHRoZSBzdG9yZWQgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+IHZhbHVlcworICAgICAgICAgICAgICAgIGZyb20gYnVpbGQgaGlzdG9yeSBhbmQgcmVwb3J0IHRoZW0gaW4gYSBmb3JtYXQgc3VpdGFibGUgZm9yCisgICAgICAgICAgICAgICAgdXNlIGluIGdsb2JhbCBjb25maWd1cmF0aW9uIChlLmcuLAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gb3IgYSBkaXN0cm8gaW5jbHVkZSBmaWxlKSB0bworICAgICAgICAgICAgICAgIG92ZXJyaWRlIGZsb2F0aW5nIDxmaWxlbmFtZT5BVVRPUkVWPC9maWxlbmFtZT4gdmFsdWVzIHRvIGEKKyAgICAgICAgICAgICAgICBmaXhlZCBzZXQgb2YgcmV2aXNpb25zLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgc29tZSBleGFtcGxlIG91dHB1dCBmcm9tIHRoaXMgY29tbWFuZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYnVpbGRoaXN0b3J5LWNvbGxlY3Qtc3JjcmV2cyAtYQorICAgICAjIGk1ODYtcG9reS1saW51eAorICAgICBTUkNSRVZfcG4tZ2xpYmMgPSAiYjgwNzlkZDBkMzYwNjQ4ZTRlOGRlNDg2NTZjNWMzODk3MjYyMTA3MiIKKyAgICAgU1JDUkVWX3BuLWdsaWJjLWluaXRpYWwgPSAiYjgwNzlkZDBkMzYwNjQ4ZTRlOGRlNDg2NTZjNWMzODk3MjYyMTA3MiIKKyAgICAgU1JDUkVWX3BuLW9wa2ctdXRpbHMgPSAiNTMyNzRmMDg3NTY1ZmQ0NWQ4NDUyYzUzNjc5OTdiYTZhNjgyYTM3YSIKKyAgICAgU1JDUkVWX3BuLWttb2QgPSAiZmQ1NjYzOGFlZDNmZTE0NzAxNWJmYTEwZWQ0YTVmNzQ5MTMwM2NiNCIKKyAgICAgIyB4ODZfNjQtbGludXgKKyAgICAgU1JDUkVWX3BuLWd0ay1kb2Mtc3R1Yi1uYXRpdmUgPSAiMWRlYTI2NjU5M2VkYjc2NmQ2ZDg5OGM3OTQ1MWVmMTkzZWIxN2NmYSIKKyAgICAgU1JDUkVWX3BuLWR0Yy1uYXRpdmUgPSAiNjVjYzRkMjc0OGEyYzJlNmYyN2YxY2YzOWUwN2E1ZGJhYmQ4MGViZiIKKyAgICAgU1JDUkVWX3BuLXVwZGF0ZS1yYy5kLW5hdGl2ZSA9ICJlY2E2ODBkZGYyOGQwMjQ5NTQ4OTVmNTlhMjQxYTYyMmRkNTc1YzExIgorICAgICBTUkNSRVZfZ2xpYmNfcG4tY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZSA9ICJiODA3OWRkMGQzNjA2NDhlNGU4ZGU0ODY1NmM1YzM4OTcyNjIxMDcyIgorICAgICBTUkNSRVZfbG9jYWxlZGVmX3BuLWNyb3NzLWxvY2FsZWRlZi1uYXRpdmUgPSAiYzgzMzM2NzM0OGQzOWRhZDdiYTAxODk5MGJmZGFmZmFlYzhlOWVkMyIKKyAgICAgU1JDUkVWX3BuLXByZWxpbmstbmF0aXZlID0gImZhYTA2OWRlZWM5OWJmNjE0MThkMGJhYjgzMWM4M2Q3YzFiNzk3Y2EiCisgICAgIFNSQ1JFVl9wbi1vcGtnLXV0aWxzLW5hdGl2ZSA9ICI1MzI3NGYwODc1NjVmZDQ1ZDg0NTJjNTM2Nzk5N2JhNmE2ODJhMzdhIgorICAgICBTUkNSRVZfcG4ta2Vybi10b29scy1uYXRpdmUgPSAiMjMzNDViODg0NmZlNGJkMTY3ZWZkZjFiZDhhMTIyNGIyYmE5YTVmZiIKKyAgICAgU1JDUkVWX3BuLWttb2QtbmF0aXZlID0gImZkNTY2MzhhZWQzZmUxNDcwMTViZmExMGVkNGE1Zjc0OTEzMDNjYjQiCisgICAgICMgcWVtdXg4Ni1wb2t5LWxpbnV4CisgICAgIFNSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvID0gIjM4Y2Q1NjBkNTAyMmVkMmRiZDFhYjBkY2E5NjQyZTQ3Yzk4YTBhYTEiCisgICAgIFNSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvID0gImEyMjdmMjBlZmYwNTZlNTExZDUwNGIyZTQ5MGYzNzc0YWIyNjBkNmYiCisgICAgICMgYWxsLXBva3ktbGludXgKKyAgICAgU1JDUkVWX3BuLXVwZGF0ZS1yYy5kID0gImVjYTY4MGRkZjI4ZDAyNDk1NDg5NWY1OWEyNDFhNjIyZGQ1NzVjMTEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIG5vdGVzIG9uIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5LWNvbGxlY3Qtc3JjcmV2czwvZmlsZW5hbWU+IGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QnkgZGVmYXVsdCwgb25seSB2YWx1ZXMgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+IHdhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBoYXJkY29kZWQgKHVzdWFsbHkgd2hlbiA8ZmlsZW5hbWU+QVVUT1JFVjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzIHVzZWQpIGFyZSByZXBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT4tYTwvZmlsZW5hbWU+IG9wdGlvbiB0byBzZWUgYWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+IHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgb3V0cHV0IHN0YXRlbWVudHMgbWlnaHQgbm90IGhhdmUgYW55IGVmZmVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG92ZXJyaWRlcyBhcmUgYXBwbGllZCBlbHNld2hlcmUgaW4gdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+LWY8L2ZpbGVuYW1lPiBvcHRpb24gdG8gYWRkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb3JjZXZhcmlhYmxlPC9maWxlbmFtZT4gb3ZlcnJpZGUgdG8gZWFjaCBvdXRwdXQgbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHlvdSBuZWVkIHRvIHdvcmsgYXJvdW5kIHRoaXMgcmVzdHJpY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHNjcmlwdCBkb2VzIGFwcGx5IHNwZWNpYWwgaGFuZGxpbmcgd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5nIGZvciBtdWx0aXBsZSBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgc2NyaXB0IGRvZXMgcGxhY2UgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgYmVmb3JlIGVhY2ggc2V0IG9mIHZhbHVlcyB0aGF0IHNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRyaXBsZXQgdG8gd2hpY2ggdGhleSBiZWxvbmcgYXMgc2hvd24gYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiwgPGZpbGVuYW1lPmk1ODYtcG9reS1saW51eDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2J1aWxkLWhpc3RvcnktaW1hZ2UtaW5mb3JtYXRpb24nPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkIEhpc3RvcnkgSW1hZ2UgSW5mb3JtYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZmlsZXMgcHJvZHVjZWQgZm9yIGVhY2ggaW1hZ2UgYXJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5pbWFnZS1maWxlczo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgQSBkaXJlY3RvcnkgY29udGFpbmluZyBzZWxlY3RlZCBmaWxlcyBmcm9tIHRoZSByb290CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGVzIGFyZSBkZWZpbmVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERISVNUT1JZX0lNQUdFX0ZJTEVTJz48ZmlsZW5hbWU+QlVJTERISVNUT1JZX0lNQUdFX0ZJTEVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YnVpbGQtaWQudHh0OjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBIdW1hbi1yZWFkYWJsZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG1ldGFkYXRhIHNvdXJjZSByZXZpc2lvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGZ1bGwgYnVpbGQgaGVhZGVyIGFzIHByaW50ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IEJpdEJha2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Ki5kb3Q6PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIERlcGVuZGVuY3kgZ3JhcGhzIGZvciB0aGUgaW1hZ2UgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgd2l0aCA8ZmlsZW5hbWU+Z3JhcGh2aXo8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmZpbGVzLWluLWltYWdlLnR4dDo8L2ZpbGVuYW1lPgorIAkgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBmaWxlcyBpbiB0aGUgaW1hZ2Ugd2l0aCBwZXJtaXNzaW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyLCBncm91cCwgc2l6ZSwgYW5kIHN5bWxpbmsgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5pbWFnZS1pbmZvLnR4dDo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgQSB0ZXh0IGZpbGUgY29udGFpbmluZyBuYW1lLXZhbHVlIHBhaXJzIHdpdGggaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGFib3V0IHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgZm9sbG93aW5nIGxpc3RpbmcgZXhhbXBsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmluc3RhbGxlZC1wYWNrYWdlLW5hbWVzLnR4dDo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGluc3RhbGxlZCBwYWNrYWdlcyBieSBuYW1lIG9ubHkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+aW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudHh0OjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzIG9yZGVyZWQgYnkgc2l6ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmluc3RhbGxlZC1wYWNrYWdlcy50eHQ6PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBpbnN0YWxsZWQgcGFja2FnZXMgd2l0aCBmdWxsIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbGVkIHBhY2thZ2UgaW5mb3JtYXRpb24gaXMgYWJsZSB0byBiZSBnYXRoZXJlZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjZWQgZXZlbiBpZiBwYWNrYWdlIG1hbmFnZW1lbnQgaXMgZGlzYWJsZWQgZm9yIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiA8ZmlsZW5hbWU+aW1hZ2UtaW5mby50eHQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERJU1RSTyA9IHBva3kKKyAgICAgRElTVFJPX1ZFUlNJT04gPSAxLjcKKyAgICAgVVNFUl9DTEFTU0VTID0gYnVpbGRzdGF0cyBpbWFnZS1ta2xpYnMgaW1hZ2UtcHJlbGluaworICAgICBJTUFHRV9DTEFTU0VTID0gaW1hZ2VfdHlwZXMKKyAgICAgSU1BR0VfRkVBVFVSRVMgPSBkZWJ1Zy10d2Vha3MKKyAgICAgSU1BR0VfTElOR1VBUyA9CisgICAgIElNQUdFX0lOU1RBTEwgPSBwYWNrYWdlZ3JvdXAtY29yZS1ib290IHJ1bi1wb3N0aW5zdHMKKyAgICAgQkFEX1JFQ09NTUVOREFUSU9OUyA9CisgICAgIE5PX1JFQ09NTUVOREFUSU9OUyA9CisgICAgIFBBQ0tBR0VfRVhDTFVERSA9CisgICAgIFJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EID0gd3JpdGVfcGFja2FnZV9tYW5pZmVzdDsgbGljZW5zZV9jcmVhdGVfbWFuaWZlc3Q7IFwKKyAgICAgICAgd3JpdGVfaW1hZ2VfbWFuaWZlc3QgOyBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWRfaW1hZ2UgOyBcCisgICAgICAgIGJ1aWxkaGlzdG9yeV9nZXRfaW1hZ2VfaW5zdGFsbGVkIDsgc3NoX2FsbG93X2VtcHR5X3Bhc3N3b3JkOyAgXAorICAgICAgICBwb3N0aW5zdF9lbmFibGVfbG9nZ2luZzsgcm9vdGZzX3VwZGF0ZV90aW1lc3RhbXAgOyBzc2hfZGlzYWJsZV9kbnNfbG9va3VwIDsKKyAgICAgSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORCA9ICAgYnVpbGRoaXN0b3J5X2dldF9pbWFnZWluZm8gOworICAgICBJTUFHRVNJWkUgPSA2OTAwCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE90aGVyIHRoYW4gPGZpbGVuYW1lPklNQUdFU0laRTwvZmlsZW5hbWU+LCB3aGljaCBpcyB0aGUKKyAgICAgICAgICAgICAgICB0b3RhbCBzaXplIG9mIHRoZSBmaWxlcyBpbiB0aGUgaW1hZ2UgaW4gS2J5dGVzLCB0aGUKKyAgICAgICAgICAgICAgICBuYW1lLXZhbHVlIHBhaXJzIGFyZSB2YXJpYWJsZXMgdGhhdCBtYXkgaGF2ZSBpbmZsdWVuY2VkIHRoZQorICAgICAgICAgICAgICAgIGNvbnRlbnQgb2YgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIFRoaXMgaW5mb3JtYXRpb24gaXMgb2Z0ZW4gdXNlZnVsIHdoZW4geW91IGFyZSB0cnlpbmcgdG8gZGV0ZXJtaW5lCisgICAgICAgICAgICAgICAgd2h5IGEgY2hhbmdlIGluIHRoZSBwYWNrYWdlIG9yIGZpbGUgbGlzdGluZ3MgaGFzIG9jY3VycmVkLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLWJ1aWxkLWhpc3RvcnktdG8tZ2F0aGVyLWltYWdlLWluZm9ybWF0aW9uLW9ubHknPgorICAgICAgICAgICAgPHRpdGxlPlVzaW5nIEJ1aWxkIEhpc3RvcnkgdG8gR2F0aGVyIEltYWdlIEluZm9ybWF0aW9uIE9ubHk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyB5b3UgY2FuIHNlZSwgYnVpbGQgaGlzdG9yeSBwcm9kdWNlcyBpbWFnZSBpbmZvcm1hdGlvbiwKKyAgICAgICAgICAgICAgICBpbmNsdWRpbmcgZGVwZW5kZW5jeSBncmFwaHMsIHNvIHlvdSBjYW4gc2VlIHdoeSBzb21ldGhpbmcKKyAgICAgICAgICAgICAgICB3YXMgcHVsbGVkIGludG8gdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIElmIHlvdSBhcmUganVzdCBpbnRlcmVzdGVkIGluIHRoaXMgaW5mb3JtYXRpb24gYW5kIG5vdAorICAgICAgICAgICAgICAgIGludGVyZXN0ZWQgaW4gY29sbGVjdGluZyBzcGVjaWZpYyBwYWNrYWdlIG9yIFNESyBpbmZvcm1hdGlvbiwKKyAgICAgICAgICAgICAgICB5b3UgY2FuIGVuYWJsZSB3cml0aW5nIG9ubHkgaW1hZ2UgaW5mb3JtYXRpb24gd2l0aG91dAorICAgICAgICAgICAgICAgIGFueSBoaXN0b3J5IGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIHRvIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVCArPSAiYnVpbGRoaXN0b3J5IgorICAgICBCVUlMREhJU1RPUllfQ09NTUlUID0gIjAiCisgICAgIEJVSUxESElTVE9SWV9GRUFUVVJFUyA9ICJpbWFnZSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSGVyZSwgeW91IHNldCB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERISVNUT1JZX0ZFQVRVUkVTJz48ZmlsZW5hbWU+QlVJTERISVNUT1JZX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gdXNlIHRoZSBpbWFnZSBmZWF0dXJlIG9ubHkuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGQtaGlzdG9yeS1zZGstaW5mb3JtYXRpb24nPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkIEhpc3RvcnkgU0RLIEluZm9ybWF0aW9uPC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJ1aWxkIGhpc3RvcnkgY29sbGVjdHMgc2ltaWxhciBpbmZvcm1hdGlvbiBvbiB0aGUgY29udGVudHMKKyAgICAgICAgICAgICAgICBvZiBTREtzIChlLmcuIDxmaWxlbmFtZT5tZXRhLXRvb2xjaGFpbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPmJpdGJha2UgLWMgcG9wdWxhdGVfc2RrIGltYWdlbmFtZTwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgIGFzIGNvbXBhcmVkIHRvIGluZm9ybWF0aW9uIGl0IGNvbGxlY3RzIGZvciBpbWFnZXMuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHNob3dzIHRoZSBmaWxlcyBwcm9kdWNlZCBmb3IgZWFjaCBTREs6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5maWxlcy1pbi1zZGsudHh0OjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgZmlsZXMgaW4gdGhlIFNESyB3aXRoIHBlcm1pc3Npb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIsIGdyb3VwLCBzaXplLCBhbmQgc3ltbGluayBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbGlzdCBpbmNsdWRlcyBib3RoIHRoZSBob3N0IGFuZCB0YXJnZXQgcGFydHMKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5zZGstaW5mby50eHQ6PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgdGV4dCBmaWxlIGNvbnRhaW5pbmcgbmFtZS12YWx1ZSBwYWlycyB3aXRoIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBhYm91dCB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBmb2xsb3dpbmcgbGlzdGluZyBleGFtcGxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFwcGVhcnMgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggb2YgdGhlIDxmaWxlbmFtZT5ob3N0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+dGFyZ2V0PC9maWxlbmFtZT4gZGlyZWN0b3JpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcG9ydGlvbnMgb2YgdGhlIFNESyB0aGF0IHJ1biBvbiB0aGUgaG9zdCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSB0YXJnZXQsIHJlc3BlY3RpdmVseToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5kZXBlbmRzLmRvdDo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXBlbmRlbmN5IGdyYXBoIGZvciB0aGUgU0RLIHRoYXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSB3aXRoIDxmaWxlbmFtZT5ncmFwaHZpejwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmluc3RhbGxlZC1wYWNrYWdlLW5hbWVzLnR4dDo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzIGJ5IG5hbWUgb25seS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5pbnN0YWxsZWQtcGFja2FnZS1zaXplcy50eHQ6PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGluc3RhbGxlZCBwYWNrYWdlcyBvcmRlcmVkIGJ5IHNpemUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+aW5zdGFsbGVkLXBhY2thZ2VzLnR4dDo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzIHdpdGggZnVsbCBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgPGZpbGVuYW1lPnNkay1pbmZvLnR4dDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRElTVFJPID0gcG9reQorICAgICBESVNUUk9fVkVSU0lPTiA9IDEuMytzbmFwc2hvdC0yMDEzMDMyNworICAgICBTREtfTkFNRSA9IHBva3ktZ2xpYmMtaTY4Ni1hcm0KKyAgICAgU0RLX1ZFUlNJT04gPSAxLjMrc25hcHNob3QKKyAgICAgU0RLTUFDSElORSA9CisgICAgIFNES0lNQUdFX0ZFQVRVUkVTID0gZGV2LXBrZ3MgZGJnLXBrZ3MKKyAgICAgQkFEX1JFQ09NTUVOREFUSU9OUyA9CisgICAgIFNES1NJWkUgPSAzNTI3MTIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT3RoZXIgdGhhbiA8ZmlsZW5hbWU+U0RLU0laRTwvZmlsZW5hbWU+LCB3aGljaCBpcyB0aGUKKyAgICAgICAgICAgICAgICB0b3RhbCBzaXplIG9mIHRoZSBmaWxlcyBpbiB0aGUgU0RLIGluIEtieXRlcywgdGhlCisgICAgICAgICAgICAgICAgbmFtZS12YWx1ZSBwYWlycyBhcmUgdmFyaWFibGVzIHRoYXQgbWlnaHQgaGF2ZSBpbmZsdWVuY2VkIHRoZQorICAgICAgICAgICAgICAgIGNvbnRlbnQgb2YgdGhlIFNESy4KKyAgICAgICAgICAgICAgICBUaGlzIGluZm9ybWF0aW9uIGlzIG9mdGVuIHVzZWZ1bCB3aGVuIHlvdSBhcmUgdHJ5aW5nIHRvCisgICAgICAgICAgICAgICAgZGV0ZXJtaW5lIHdoeSBhIGNoYW5nZSBpbiB0aGUgcGFja2FnZSBvciBmaWxlIGxpc3RpbmdzCisgICAgICAgICAgICAgICAgaGFzIG9jY3VycmVkLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2V4YW1pbmluZy1idWlsZC1oaXN0b3J5LWluZm9ybWF0aW9uJz4KKyAgICAgICAgICAgIDx0aXRsZT5FeGFtaW5pbmcgQnVpbGQgSGlzdG9yeSBJbmZvcm1hdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZXhhbWluZSBidWlsZCBoaXN0b3J5IG91dHB1dCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgb3IKKyAgICAgICAgICAgICAgICBmcm9tIGEgd2ViIGludGVyZmFjZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gc2VlIGFueSBjaGFuZ2VzIHRoYXQgaGF2ZSBvY2N1cnJlZCAoYXNzdW1pbmcgeW91IGhhdmUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERISVNUT1JZX0NPTU1JVCc+PGZpbGVuYW1lPkJVSUxESElTVE9SWV9DT01NSVQgPSAiMSI8L2ZpbGVuYW1lPjwvbGluaz4pLAorICAgICAgICAgICAgICAgIHlvdSBjYW4gc2ltcGx5CisgICAgICAgICAgICAgICAgdXNlIGFueSBHaXQgY29tbWFuZCB0aGF0IGFsbG93cyB5b3UgdG8gdmlldyB0aGUgaGlzdG9yeSBvZgorICAgICAgICAgICAgICAgIGEgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIG9uZSBtZXRob2Q6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgJCBnaXQgbG9nIC1wCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHJlYWxpemUsIGhvd2V2ZXIsIHRoYXQgdGhpcyBtZXRob2QgZG9lcyBzaG93CisgICAgICAgICAgICAgICAgY2hhbmdlcyB0aGF0IGFyZSBub3Qgc2lnbmlmaWNhbnQgKGUuZy4gYSBwYWNrYWdlJ3Mgc2l6ZQorICAgICAgICAgICAgICAgIGNoYW5naW5nIGJ5IGEgZmV3IGJ5dGVzKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBjb21tYW5kLWxpbmUgdG9vbCBjYWxsZWQgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeS1kaWZmPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkb2VzIGV4aXN0LCB0aG91Z2gsIHRoYXQgcXVlcmllcyB0aGUgR2l0IHJlcG9zaXRvcnkgYW5kIHByaW50cyBqdXN0CisgICAgICAgICAgICAgICAgdGhlIGRpZmZlcmVuY2VzIHRoYXQgbWlnaHQgYmUgc2lnbmlmaWNhbnQgaW4gaHVtYW4tcmVhZGFibGUgZm9ybS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIH4vcG9reS9wb2t5L3NjcmlwdHMvYnVpbGRoaXN0b3J5LWRpZmYgLiBIRUFEXgorICAgICBDaGFuZ2VzIHRvIGltYWdlcy9xZW11eDg2XzY0L2dsaWJjL2NvcmUtaW1hZ2UtbWluaW1hbCAoZmlsZXMtaW4taW1hZ2UudHh0KToKKyAgICAgICAgL2V0Yy9hbm90aGVycGtnLmNvbmYgd2FzIGFkZGVkCisgICAgICAgIC9zYmluL2Fub3RoZXJwa2cgd2FzIGFkZGVkCisgICAgICAgICogKGluc3RhbGxlZC1wYWNrYWdlLW5hbWVzLnR4dCk6CisgICAgICAgICogICBhbm90aGVycGtnIHdhcyBhZGRlZAorICAgICBDaGFuZ2VzIHRvIGltYWdlcy9xZW11eDg2XzY0L2dsaWJjL2NvcmUtaW1hZ2UtbWluaW1hbCAoaW5zdGFsbGVkLXBhY2thZ2UtbmFtZXMudHh0KToKKyAgICAgICAgYW5vdGhlcnBrZyB3YXMgYWRkZWQKKyAgICAgcGFja2FnZXMvcWVtdXg4Nl82NC1wb2t5LWxpbnV4L3Y4NmQ6IFBBQ0tBR0VTOiBhZGRlZCAidjg2ZC1leHRyYXMiCisgICAgICAgICogUFIgY2hhbmdlZCBmcm9tICJyMCIgdG8gInIxIgorICAgICAgICAqIFBWIGNoYW5nZWQgZnJvbSAiMC4xLjEwIiB0byAiMC4xLjEyIgorICAgICBwYWNrYWdlcy9xZW11eDg2XzY0LXBva3ktbGludXgvdjg2ZC92ODZkOiBQS0dTSVpFIGNoYW5nZWQgZnJvbSAxMTA1NzkgdG8gMTQ0MzgxICgrMzAlKQorICAgICAgICAqIFBSIGNoYW5nZWQgZnJvbSAicjAiIHRvICJyMSIKKyAgICAgICAgKiBQViBjaGFuZ2VkIGZyb20gIjAuMS4xMCIgdG8gIjAuMS4xMiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHNlZSBjaGFuZ2VzIHRvIHRoZSBidWlsZCBoaXN0b3J5IHVzaW5nIGEgd2ViIGludGVyZmFjZSwgZm9sbG93CisgICAgICAgICAgICAgICAgdGhlIGluc3RydWN0aW9uIGluIHRoZSA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBoZXJlLgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL2J1aWxkaGlzdG9yeS13ZWIvJz48L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBpcyBhIHNhbXBsZSBzY3JlZW5zaG90IG9mIHRoZSBpbnRlcmZhY2U6CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2J1aWxkaGlzdG9yeS13ZWIucG5nIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgd2lkdGg9IjEzMCUiIGNvbnRlbnRkZXB0aD0iMTMwJSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3NwZWVkaW5nLXVwLXRoZS1idWlsZCc+CisgICAgPHRpdGxlPlNwZWVkaW5nIFVwIHRoZSBCdWlsZDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQnVpbGQgdGltZSBjYW4gYmUgYW4gaXNzdWUuCisgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBidWlsZCBzeXN0ZW0gdXNlcyBzaW1wbGUgY29udHJvbHMgdG8gdHJ5IGFuZCBtYXhpbWl6ZQorICAgICAgICBidWlsZCBlZmZpY2llbmN5LgorICAgICAgICBJbiBnZW5lcmFsLCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgYWxsIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzCisgICAgICAgIHJlc3VsdCBpbiB0aGUgbW9zdCBlZmZpY2llbnQgYnVpbGQgdGltZXMgd2hlbiBkZWFsaW5nIHdpdGggc2luZ2xlCisgICAgICAgIHNvY2tldCBzeXN0ZW1zIChpLmUuIGEgc2luZ2xlIENQVSkuCisgICAgICAgIElmIHlvdSBoYXZlIG11bHRpcGxlIENQVXMsIHlvdSBtaWdodCB0cnkgaW5jcmVhc2luZyB0aGUgZGVmYXVsdAorICAgICAgICB2YWx1ZXMgdG8gZ2FpbiBtb3JlIHNwZWVkLgorICAgICAgICBTZWUgdGhlIGRlc2NyaXB0aW9ucyBpbiB0aGUgZ2xvc3NhcnkgZm9yIGVhY2ggdmFyaWFibGUgZm9yIG1vcmUKKyAgICAgICAgaW5mb3JtYXRpb246CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX05VTUJFUl9USFJFQURTJz48ZmlsZW5hbWU+QkJfTlVNQkVSX1RIUkVBRFM8L2ZpbGVuYW1lPjo8L2xpbms+CisgICAgICAgICAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMgQml0QmFrZSBzaW11bHRhbmVvdXNseSBleGVjdXRlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I3Zhci1CQl9OVU1CRVJfUEFSU0VfVEhSRUFEUyc+PGZpbGVuYW1lPkJCX05VTUJFUl9QQVJTRV9USFJFQURTPC9maWxlbmFtZT46PC91bGluaz4KKyAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIHRocmVhZHMgQml0QmFrZSB1c2VzIGR1cmluZyBwYXJzaW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQVJBTExFTF9NQUtFJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+OjwvbGluaz4KKyAgICAgICAgICAgICAgICBFeHRyYSBvcHRpb25zIHBhc3NlZCB0byB0aGUgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHRhc2sgaW4gb3JkZXIgdG8gc3BlY2lmeSBwYXJhbGxlbCBjb21waWxhdGlvbiBvbiB0aGUKKyAgICAgICAgICAgICAgICBsb2NhbCBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQVJBTExFTF9NQUtFSU5TVCc+PGZpbGVuYW1lPlBBUkFMTEVMX01BS0VJTlNUPC9maWxlbmFtZT46PC9saW5rPgorICAgICAgICAgICAgICAgIEV4dHJhIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFzayBpbiBvcmRlciB0byBzcGVjaWZ5IHBhcmFsbGVsIGluc3RhbGxhdGlvbiBvbiB0aGUKKyAgICAgICAgICAgICAgICBsb2NhbCBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgQXMgbWVudGlvbmVkLCB0aGVzZSB2YXJpYWJsZXMgYWxsIHNjYWxlIHRvIHRoZSBudW1iZXIgb2YgcHJvY2Vzc29yCisgICAgICAgIGNvcmVzIGF2YWlsYWJsZSBvbiB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICBGb3Igc2luZ2xlIHNvY2tldCBzeXN0ZW1zLCB0aGlzIGF1dG8tc2NhbGluZyBlbnN1cmVzIHRoYXQgdGhlIGJ1aWxkCisgICAgICAgIHN5c3RlbSBmdW5kYW1lbnRhbGx5IHRha2VzIGFkdmFudGFnZSBvZiBwb3RlbnRpYWwgcGFyYWxsZWwgb3BlcmF0aW9ucworICAgICAgICBkdXJpbmcgdGhlIGJ1aWxkIGJhc2VkIG9uIHRoZSBidWlsZCBtYWNoaW5lJ3MgY2FwYWJpbGl0aWVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb2xsb3dpbmcgYXJlIGFkZGl0aW9uYWwgZmFjdG9ycyB0aGF0IGNhbiBhZmZlY3QgYnVpbGQgc3BlZWQ6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgRmlsZSBzeXN0ZW0gdHlwZToKKyAgICAgICAgICAgICAgICBUaGUgZmlsZSBzeXN0ZW0gdHlwZSB0aGF0IHRoZSBidWlsZCBpcyBiZWluZyBwZXJmb3JtZWQgb24gY2FuCisgICAgICAgICAgICAgICAgYWxzbyBpbmZsdWVuY2UgcGVyZm9ybWFuY2UuCisgICAgICAgICAgICAgICAgVXNpbmcgPGZpbGVuYW1lPmV4dDQ8L2ZpbGVuYW1lPiBpcyByZWNvbW1lbmRlZCBhcyBjb21wYXJlZAorICAgICAgICAgICAgICAgIHRvIDxmaWxlbmFtZT5leHQyPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5leHQzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkdWUgdG8gPGZpbGVuYW1lPmV4dDQ8L2ZpbGVuYW1lPiBpbXByb3ZlZCBmZWF0dXJlcworICAgICAgICAgICAgICAgIHN1Y2ggYXMgZXh0ZW50cy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBEaXNhYmxpbmcgdGhlIHVwZGF0aW5nIG9mIGFjY2VzcyB0aW1lIHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5vYXRpbWU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm5vYXRpbWU8L2ZpbGVuYW1lPiBtb3VudCBvcHRpb24gcHJldmVudHMgdGhlCisgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGZyb20gdXBkYXRpbmcgZmlsZSBhbmQgZGlyZWN0b3J5IGFjY2VzcyB0aW1lcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBTZXR0aW5nIGEgbG9uZ2VyIGNvbW1pdDoKKyAgICAgICAgICAgICAgICBVc2luZyB0aGUgImNvbW1pdD0iIG1vdW50IG9wdGlvbiBpbmNyZWFzZXMgdGhlIGludGVydmFsCisgICAgICAgICAgICAgICAgaW4gc2Vjb25kcyBiZXR3ZWVuIGRpc2sgY2FjaGUgd3JpdGVzLgorICAgICAgICAgICAgICAgIENoYW5naW5nIHRoaXMgaW50ZXJ2YWwgZnJvbSB0aGUgZml2ZSBzZWNvbmQgZGVmYXVsdCB0bworICAgICAgICAgICAgICAgIHNvbWV0aGluZyBsb25nZXIgaW5jcmVhc2VzIHRoZSByaXNrIG9mIGRhdGEgbG9zcyBidXQgZGVjcmVhc2VzCisgICAgICAgICAgICAgICAgdGhlIG5lZWQgdG8gd3JpdGUgdG8gdGhlIGRpc2ssIHRodXMgaW5jcmVhc2luZyB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBDaG9vc2luZyB0aGUgcGFja2FnaW5nIGJhY2tlbmQ6CisgICAgICAgICAgICAgICAgT2YgdGhlIGF2YWlsYWJsZSBwYWNrYWdpbmcgYmFja2VuZHMsIElQSyBpcyB0aGUgZmFzdGVzdC4KKyAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHNlbGVjdGluZyBhIHNpbmd1bGFyIHBhY2thZ2luZyBiYWNrZW5kIGFsc28KKyAgICAgICAgICAgICAgICBoZWxwcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBVc2luZyA8ZmlsZW5hbWU+dG1wZnM8L2ZpbGVuYW1lPiBmb3IKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgYXMgYSB0ZW1wb3JhcnkgZmlsZSBzeXN0ZW06CisgICAgICAgICAgICAgICAgV2hpbGUgdGhpcyBjYW4gaGVscCBzcGVlZCB1cCB0aGUgYnVpbGQsIHRoZSBiZW5lZml0cyBhcmUKKyAgICAgICAgICAgICAgICBsaW1pdGVkIGR1ZSB0byB0aGUgY29tcGlsZXIgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LXBpcGU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGdvZXMgdG8gc29tZSBsZW5ndGhzIHRvIGF2b2lkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN5bmMoKTwvZmlsZW5hbWU+IGNhbGxzIGludG8gdGhlCisgICAgICAgICAgICAgICAgZmlsZSBzeXN0ZW0gb24gdGhlIHByaW5jaXBsZSB0aGF0IGlmIHRoZXJlIHdhcyBhIHNpZ25pZmljYW50CisgICAgICAgICAgICAgICAgZmFpbHVyZSwgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgIGNvbnRlbnRzIGNvdWxkIGVhc2lseSBiZSByZWJ1aWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIEluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcm0td29yayc+PGZpbGVuYW1lPnJtX3dvcms8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBjbGFzczoKKyAgICAgICAgICAgICAgICBJbmhlcml0aW5nIHRoaXMgY2xhc3MgaGFzIHNob3duIHRvIHNwZWVkIHVwIGJ1aWxkcyBkdWUgdG8KKyAgICAgICAgICAgICAgICBzaWduaWZpY2FudGx5IGxvd2VyIGFtb3VudHMgb2YgZGF0YSBzdG9yZWQgaW4gdGhlIGRhdGEKKyAgICAgICAgICAgICAgICBjYWNoZSBhcyB3ZWxsIGFzIG9uIGRpc2suCisgICAgICAgICAgICAgICAgSW5oZXJpdGluZyB0aGlzIGNsYXNzIGFsc28gbWFrZXMgY2xlYW51cCBvZgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBmYXN0ZXIsIGF0IHRoZSBleHBlbnNlIG9mIGJlaW5nIGVhc2lseSBhYmxlIHRvIGRpdmUgaW50byB0aGUKKyAgICAgICAgICAgICAgICBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICBGaWxlIHN5c3RlbSBtYWludGFpbmVycyBoYXZlIHJlY29tbWVuZGVkIHRoYXQgdGhlIGZhc3Rlc3Qgd2F5CisgICAgICAgICAgICAgICAgdG8gY2xlYW4gdXAgbGFyZ2UgbnVtYmVycyBvZiBmaWxlcyBpcyB0byByZWZvcm1hdCBwYXJ0aXRpb25zCisgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gZGVsZXRlIGZpbGVzIGR1ZSB0byB0aGUgbGluZWFyIG5hdHVyZSBvZiBwYXJ0aXRpb25zLgorICAgICAgICAgICAgICAgIFRoaXMsIG9mIGNvdXJzZSwgYXNzdW1lcyB5b3Ugc3RydWN0dXJlIHRoZSBkaXNrIHBhcnRpdGlvbnMgYW5kCisgICAgICAgICAgICAgICAgZmlsZSBzeXN0ZW1zIGluIGEgd2F5IHRoYXQgdGhpcyBpcyBwcmFjdGljYWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICBBc2lkZSBmcm9tIHRoZSBwcmV2aW91cyBsaXN0LCB5b3Ugc2hvdWxkIGtlZXAgc29tZSB0cmFkZSBvZmZzIGluCisgICAgICAgIG1pbmQgdGhhdCBjYW4gaGVscCB5b3Ugc3BlZWQgdXAgdGhlIGJ1aWxkOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFJlbW92ZSBpdGVtcyBmcm9tCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHRoYXQgeW91IG1pZ2h0IG5vdCBuZWVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIEV4Y2x1ZGUgZGVidWcgc3ltYm9scyBhbmQgb3RoZXIgZGVidWcgaW5mb3JtYXRpb246CisgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBuZWVkIHRoZXNlIHN5bWJvbHMgYW5kIG90aGVyIGRlYnVnIGluZm9ybWF0aW9uLAorICAgICAgICAgICAgICAgIGRpc2FibGluZyB0aGUgPGZpbGVuYW1lPiotZGJnPC9maWxlbmFtZT4gcGFja2FnZSBnZW5lcmF0aW9uCisgICAgICAgICAgICAgICAgY2FuIHNwZWVkIHVwIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGRpc2FibGUgdGhpcyBnZW5lcmF0aW9uIGJ5IHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVCc+PGZpbGVuYW1lPklOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvICIxIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBEaXNhYmxlIHN0YXRpYyBsaWJyYXJ5IGdlbmVyYXRpb24gZm9yIHJlY2lwZXMgZGVyaXZlZCBmcm9tCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9jb25mPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPmxpYnRvb2w8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBzaG93aW5nIGhvdyB0byBkaXNhYmxlIHN0YXRpYworICAgICAgICAgICAgICAgIGxpYnJhcmllcyBhbmQgc3RpbGwgcHJvdmlkZSBhbiBvdmVycmlkZSB0byBoYW5kbGUgZXhjZXB0aW9uczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNUQVRJQ0xJQkNPTkYgPSAiLS1kaXNhYmxlLXN0YXRpYyIKKyAgICAgU1RBVElDTElCQ09ORl9zcWxpdGUzLW5hdGl2ZSA9ICIiCisgICAgIEVYVFJBX09FQ09ORiArPSAiJHtTVEFUSUNMSUJDT05GfSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb21lIHJlY2lwZXMgbmVlZCBzdGF0aWMgbGlicmFyaWVzIGluIG9yZGVyIHRvIHdvcmsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0bHkgKGUuZy4gPGZpbGVuYW1lPnBzZXVkby1uYXRpdmU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRzIDxmaWxlbmFtZT5zcWxpdGUzLW5hdGl2ZTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdmVycmlkZXMsIGFzIGluIHRoZSBwcmV2aW91cyBleGFtcGxlLCBhY2NvdW50IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXNlIGtpbmRzIG9mIGV4Y2VwdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29tZSBwYWNrYWdlcyBoYXZlIHBhY2thZ2luZyBjb2RlIHRoYXQgYXNzdW1lcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW5jZSBvZiB0aGUgc3RhdGljIGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBzbywgeW91IG1pZ2h0IG5lZWQgdG8gZXhjbHVkZSB0aGVtIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhLnR0ZiBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhLnR0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGNkNmI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmEudHRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzgyMDQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmEueG1sCkBAIC0wLDAgKzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PGZvbnQtbWV0cmljcyB0eXBlPSJUWVBFMCI+PGZvbnQtbmFtZT5CaXRzdHJlYW1WZXJhU2FuczwvZm9udC1uYW1lPjxlbWJlZC8+PGNhcC1oZWlnaHQ+NzI5PC9jYXAtaGVpZ2h0Pjx4LWhlaWdodD41NDY8L3gtaGVpZ2h0Pjxhc2NlbmRlcj45Mjg8L2FzY2VuZGVyPjxkZXNjZW5kZXI+LTIzNTwvZGVzY2VuZGVyPjxiYm94PjxsZWZ0Pi0xODM8L2xlZnQ+PGJvdHRvbT4tMjM1PC9ib3R0b20+PHJpZ2h0PjEyODc8L3JpZ2h0Pjx0b3A+OTI4PC90b3A+PC9iYm94PjxmbGFncz4zMjwvZmxhZ3M+PHN0ZW12PjA8L3N0ZW12PjxpdGFsaWNhbmdsZT4wPC9pdGFsaWNhbmdsZT48c3VidHlwZT5UWVBFMDwvc3VidHlwZT48bXVsdGlieXRlLWV4dHJhcz48Y2lkLXR5cGU+Q0lERm9udFR5cGUyPC9jaWQtdHlwZT48ZGVmYXVsdC13aWR0aD4wPC9kZWZhdWx0LXdpZHRoPjxiZnJhbmdlcz48YmYgZ2k9IjMiIHVlPSIxMjYiIHVzPSIzMiIvPjxiZiBnaT0iMTcyIiB1ZT0iMTYwIiB1cz0iMTYwIi8+PGJmIGdpPSIxNjMiIHVlPSIxNjEiIHVzPSIxNjEiLz48YmYgZ2k9IjEzMiIgdWU9IjE2MyIgdXM9IjE2MiIvPjxiZiBnaT0iMTg5IiB1ZT0iMTY0IiB1cz0iMTY0Ii8+PGJmIGdpPSIxNTAiIHVlPSIxNjUiIHVzPSIxNjUiLz48YmYgZ2k9IjIzMSIgdWU9IjE2NiIgdXM9IjE2NiIvPjxiZiBnaT0iMTM0IiB1ZT0iMTY3IiB1cz0iMTY3Ii8+PGJmIGdpPSIxNDIiIHVlPSIxNjgiIHVzPSIxNjgiLz48YmYgZ2k9IjEzOSIgdWU9IjE2OSIgdXM9IjE2OSIvPjxiZiBnaT0iMTU3IiB1ZT0iMTcwIiB1cz0iMTcwIi8+PGJmIGdpPSIxNjkiIHVlPSIxNzEiIHVzPSIxNzEiLz48YmYgZ2k9IjE2NCIgdWU9IjE3MiIgdXM9IjE3MiIvPjxiZiBnaT0iMjU2IiB1ZT0iMTczIiB1cz0iMTczIi8+PGJmIGdpPSIxMzgiIHVlPSIxNzQiIHVzPSIxNzQiLz48YmYgZ2k9IjIxNyIgdWU9IjE3NSIgdXM9IjE3NSIvPjxiZiBnaT0iMTMxIiB1ZT0iMTc2IiB1cz0iMTc2Ii8+PGJmIGdpPSIxNDciIHVlPSIxNzciIHVzPSIxNzciLz48YmYgZ2k9IjI0MSIgdWU9IjE3OSIgdXM9IjE3OCIvPjxiZiBnaT0iMTQxIiB1ZT0iMTgwIiB1cz0iMTgwIi8+PGJmIGdpPSIxNTEiIHVlPSIxODEiIHVzPSIxODEiLz48YmYgZ2k9IjEzNiIgdWU9IjE4MiIgdXM9IjE4MiIvPjxiZiBnaT0iMTk1IiB1ZT0iMTgzIiB1cz0iMTgzIi8+PGJmIGdpPSIyMjEiIHVlPSIxODQiIHVzPSIxODQiLz48YmYgZ2k9IjI0MCIgdWU9IjE4NSIgdXM9IjE4NSIvPjxiZiBnaT0iMTU4IiB1ZT0iMTg2IiB1cz0iMTg2Ii8+PGJmIGdpPSIxNzAiIHVlPSIxODciIHVzPSIxODciLz48YmYgZ2k9IjI0MyIgdWU9IjE5MCIgdXM9IjE4OCIvPjxiZiBnaT0iMTYyIiB1ZT0iMTkxIiB1cz0iMTkxIi8+PGJmIGdpPSIxNzMiIHVlPSIxOTIiIHVzPSIxOTIiLz48YmYgZ2k9IjIwMSIgdWU9IjE5MyIgdXM9IjE5MyIvPjxiZiBnaT0iMTk5IiB1ZT0iMTk0IiB1cz0iMTk0Ii8+PGJmIGdpPSIxNzQiIHVlPSIxOTUiIHVzPSIxOTUiLz48YmYgZ2k9Ijk4IiB1ZT0iMTk3IiB1cz0iMTk2Ii8+PGJmIGdpPSIxNDQiIHVlPSIxOTgiIHVzPSIxOTgiLz48YmYgZ2k9IjEwMCIgdWU9IjE5OSIgdXM9IjE5OSIvPjxiZiBnaT0iMjAzIiB1ZT0iMjAwIiB1cz0iMjAwIi8+PGJmIGdpPSIxMDEiIHVlPSIyMDEiIHVzPSIyMDEiLz48YmYgZ2k9IjIwMCIgdWU9IjIwMiIgdXM9IjIwMiIvPjxiZiBnaT0iMjAyIiB1ZT0iMjAzIiB1cz0iMjAzIi8+PGJmIGdpPSIyMDciIHVlPSIyMDQiIHVzPSIyMDQiLz48YmYgZ2k9IjIwNCIgdWU9IjIwNyIgdXM9IjIwNSIvPjxiZiBnaT0iMjMyIiB1ZT0iMjA4IiB1cz0iMjA4Ii8+PGJmIGdpPSIxMDIiIHVlPSIyMDkiIHVzPSIyMDkiLz48YmYgZ2k9IjIxMCIgdWU9IjIxMCIgdXM9IjIxMCIvPjxiZiBnaT0iMjA4IiB1ZT0iMjEyIiB1cz0iMjExIi8+PGJmIGdpPSIxNzUiIHVlPSIyMTMiIHVzPSIyMTMiLz48YmYgZ2k9IjEwMyIgdWU9IjIxNCIgdXM9IjIxNCIvPjxiZiBnaT0iMjM5IiB1ZT0iMjE1IiB1cz0iMjE1Ii8+PGJmIGdpPSIxNDUiIHVlPSIyMTYiIHVzPSIyMTYiLz48YmYgZ2k9IjIxMyIgdWU9IjIxNyIgdXM9IjIxNyIvPjxiZiBnaT0iMjExIiB1ZT0iMjE5IiB1cz0iMjE4Ii8+PGJmIGdpPSIxMDQiIHVlPSIyMjAiIHVzPSIyMjAiLz48YmYgZ2k9IjIzNCIgdWU9IjIyMSIgdXM9IjIyMSIvPjxiZiBnaT0iMjM2IiB1ZT0iMjIyIiB1cz0iMjIyIi8+PGJmIGdpPSIxMzciIHVlPSIyMjMiIHVzPSIyMjMiLz48YmYgZ2k9IjEwNiIgdWU9IjIyNCIgdXM9IjIyNCIvPjxiZiBnaT0iMTA1IiB1ZT0iMjI1IiB1cz0iMjI1Ii8+PGJmIGdpPSIxMDciIHVlPSIyMjYiIHVzPSIyMjYiLz48YmYgZ2k9IjEwOSIgdWU9IjIyNyIgdXM9IjIyNyIvPjxiZiBnaT0iMTA4IiB1ZT0iMjI4IiB1cz0iMjI4Ii8+PGJmIGdpPSIxMTAiIHVlPSIyMjkiIHVzPSIyMjkiLz48YmYgZ2k9IjE2MCIgdWU9IjIzMCIgdXM9IjIzMCIvPjxiZiBnaT0iMTExIiB1ZT0iMjMxIiB1cz0iMjMxIi8+PGJmIGdpPSIxMTMiIHVlPSIyMzIiIHVzPSIyMzIiLz48YmYgZ2k9IjExMiIgdWU9IjIzMyIgdXM9IjIzMyIvPjxiZiBnaT0iMTE0IiB1ZT0iMjM1IiB1cz0iMjM0Ii8+PGJmIGdpPSIxMTciIHVlPSIyMzYiIHVzPSIyMzYiLz48YmYgZ2k9IjExNiIgdWU9IjIzNyIgdXM9IjIzNyIvPjxiZiBnaT0iMTE4IiB1ZT0iMjM5IiB1cz0iMjM4Ii8+PGJmIGdpPSIyMzMiIHVlPSIyNDAiIHVzPSIyNDAiLz48YmYgZ2k9IjEyMCIgdWU9IjI0MSIgdXM9IjI0MSIvPjxiZiBnaT0iMTIyIiB1ZT0iMjQyIiB1cz0iMjQyIi8+PGJmIGdpPSIxMjEiIHVlPSIyNDMiIHVzPSIyNDMiLz48YmYgZ2k9IjEyMyIgdWU9IjI0NCIgdXM9IjI0NCIvPjxiZiBnaT0iMTI1IiB1ZT0iMjQ1IiB1cz0iMjQ1Ii8+PGJmIGdpPSIxMjQiIHVlPSIyNDYiIHVzPSIyNDYiLz48YmYgZ2k9IjE4NCIgdWU9IjI0NyIgdXM9IjI0NyIvPjxiZiBnaT0iMTYxIiB1ZT0iMjQ4IiB1cz0iMjQ4Ii8+PGJmIGdpPSIxMjciIHVlPSIyNDkiIHVzPSIyNDkiLz48YmYgZ2k9IjEyNiIgdWU9IjI1MCIgdXM9IjI1MCIvPjxiZiBnaT0iMTI4IiB1ZT0iMjUyIiB1cz0iMjUxIi8+PGJmIGdpPSIyMzUiIHVlPSIyNTMiIHVzPSIyNTMiLz48YmYgZ2k9IjIzNyIgdWU9IjI1NCIgdXM9IjI1NCIvPjxiZiBnaT0iMTg2IiB1ZT0iMjU1IiB1cz0iMjU1Ii8+PGJmIGdpPSIyNTEiIHVlPSIyNjMiIHVzPSIyNjIiLz48YmYgZ2k9IjI1MyIgdWU9IjI2OSIgdXM9IjI2OCIvPjxiZiBnaT0iMCIgdWU9IjI3MCIgdXM9IjI3MCIvPjxiZiBnaT0iMCIgdWU9IjI3MSIgdXM9IjI3MSIvPjxiZiBnaT0iMCIgdWU9IjI3MiIgdXM9IjI3MiIvPjxiZiBnaT0iMjU1IiB1ZT0iMjczIiB1cz0iMjczIi8+PGJmIGdpPSIyNDYiIHVlPSIyODciIHVzPSIyODYiLz48YmYgZ2k9IjI0OCIgdWU9IjMwNCIgdXM9IjMwNCIvPjxiZiBnaT0iMjE0IiB1ZT0iMzA1IiB1cz0iMzA1Ii8+PGJmIGdpPSIyMjUiIHVlPSIzMjIiIHVzPSIzMjEiLz48YmYgZ2k9IjE3NiIgdWU9IjMzOSIgdXM9IjMzOCIvPjxiZiBnaT0iMjQ5IiB1ZT0iMzUxIiB1cz0iMzUwIi8+PGJmIGdpPSIyMjciIHVlPSIzNTMiIHVzPSIzNTIiLz48YmYgZ2k9IjE4NyIgdWU9IjM3NiIgdXM9IjM3NiIvPjxiZiBnaT0iMjI5IiB1ZT0iMzgyIiB1cz0iMzgxIi8+PGJmIGdpPSIxNjYiIHVlPSI0MDIiIHVzPSI0MDIiLz48YmYgZ2k9IjIxNSIgdWU9IjcxMCIgdXM9IjcxMCIvPjxiZiBnaT0iMjI0IiB1ZT0iNzExIiB1cz0iNzExIi8+PGJmIGdpPSIyMTgiIHVlPSI3MzAiIHVzPSI3MjgiLz48YmYgZ2k9IjIyMyIgdWU9IjczMSIgdXM9IjczMSIvPjxiZiBnaT0iMjE2IiB1ZT0iNzMyIiB1cz0iNzMyIi8+PGJmIGdpPSIyMjIiIHVlPSI3MzMiIHVzPSI3MzMiLz48YmYgZ2k9IjE1OSIgdWU9IjkzNyIgdXM9IjkzNyIvPjxiZiBnaT0iMTU1IiB1ZT0iOTYwIiB1cz0iOTYwIi8+PGJmIGdpPSIxNzgiIHVlPSI4MjEyIiB1cz0iODIxMSIvPjxiZiBnaT0iMCIgdWU9IjgyMTMiIHVzPSI4MjEzIi8+PGJmIGdpPSIwIiB1ZT0iODIxNCIgdXM9IjgyMTQiLz48YmYgZ2k9IjAiIHVlPSI4MjE1IiB1cz0iODIxNSIvPjxiZiBnaT0iMTgyIiB1ZT0iODIxNyIgdXM9IjgyMTYiLz48YmYgZ2k9IjE5NiIgdWU9IjgyMTgiIHVzPSI4MjE4Ii8+PGJmIGdpPSIwIiB1ZT0iODIxOSIgdXM9IjgyMTkiLz48YmYgZ2k9IjE4MCIgdWU9IjgyMjEiIHVzPSI4MjIwIi8+PGJmIGdpPSIxOTciIHVlPSI4MjIyIiB1cz0iODIyMiIvPjxiZiBnaT0iMCIgdWU9IjgyMjMiIHVzPSI4MjIzIi8+PGJmIGdpPSIxMzAiIHVlPSI4MjI0IiB1cz0iODIyNCIvPjxiZiBnaT0iMTk0IiB1ZT0iODIyNSIgdXM9IjgyMjUiLz48YmYgZ2k9IjEzNSIgdWU9IjgyMjYiIHVzPSI4MjI2Ii8+PGJmIGdpPSIwIiB1ZT0iODIyNyIgdXM9IjgyMjciLz48YmYgZ2k9IjAiIHVlPSI4MjI4IiB1cz0iODIyOCIvPjxiZiBnaT0iMCIgdWU9IjgyMjkiIHVzPSI4MjI5Ii8+PGJmIGdpPSIxNzEiIHVlPSI4MjMwIiB1cz0iODIzMCIvPjxiZiBnaT0iMTk4IiB1ZT0iODI0MCIgdXM9IjgyNDAiLz48YmYgZ2k9IjE5MCIgdWU9IjgyNTAiIHVzPSI4MjQ5Ii8+PGJmIGdpPSIyNTgiIHVlPSI4MzY0IiB1cz0iODM2NCIvPjxiZiBnaT0iMTQwIiB1ZT0iODQ4MiIgdXM9Ijg0ODIiLz48YmYgZ2k9IjE1MiIgdWU9Ijg3MDYiIHVzPSI4NzA2Ii8+PGJmIGdpPSIwIiB1ZT0iODcwNyIgdXM9Ijg3MDciLz48YmYgZ2k9IjAiIHVlPSI4NzA4IiB1cz0iODcwOCIvPjxiZiBnaT0iMCIgdWU9Ijg3MDkiIHVzPSI4NzA5Ii8+PGJmIGdpPSIxNjgiIHVlPSI4NzEwIiB1cz0iODcxMCIvPjxiZiBnaT0iMTU0IiB1ZT0iODcxOSIgdXM9Ijg3MTkiLz48YmYgZ2k9IjAiIHVlPSI4NzIwIiB1cz0iODcyMCIvPjxiZiBnaT0iMTUzIiB1ZT0iODcyMSIgdXM9Ijg3MjEiLz48YmYgZ2k9IjIzOCIgdWU9Ijg3MjIiIHVzPSI4NzIyIi8+PGJmIGdpPSIwIiB1ZT0iODcyMyIgdXM9Ijg3MjMiLz48YmYgZ2k9IjAiIHVlPSI4NzI0IiB1cz0iODcyNCIvPjxiZiBnaT0iMTg4IiB1ZT0iODcyNSIgdXM9Ijg3MjUiLz48YmYgZ2k9IjAiIHVlPSI4NzI2IiB1cz0iODcyNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjciIHVzPSI4NzI3Ii8+PGJmIGdpPSIwIiB1ZT0iODcyOCIgdXM9Ijg3MjgiLz48YmYgZ2k9IjI1NyIgdWU9Ijg3MjkiIHVzPSI4NzI5Ii8+PGJmIGdpPSIxNjUiIHVlPSI4NzMwIiB1cz0iODczMCIvPjxiZiBnaT0iMCIgdWU9Ijg3MzEiIHVzPSI4NzMxIi8+PGJmIGdpPSIwIiB1ZT0iODczMiIgdXM9Ijg3MzIiLz48YmYgZ2k9IjAiIHVlPSI4NzMzIiB1cz0iODczMyIvPjxiZiBnaT0iMTQ2IiB1ZT0iODczNCIgdXM9Ijg3MzQiLz48YmYgZ2k9IjE1NiIgdWU9Ijg3NDciIHVzPSI4NzQ3Ii8+PGJmIGdpPSIxNjciIHVlPSI4Nzc2IiB1cz0iODc3NiIvPjxiZiBnaT0iMTQzIiB1ZT0iODgwMCIgdXM9Ijg4MDAiLz48YmYgZ2k9IjAiIHVlPSI4ODAxIiB1cz0iODgwMSIvPjxiZiBnaT0iMCIgdWU9Ijg4MDIiIHVzPSI4ODAyIi8+PGJmIGdpPSIwIiB1ZT0iODgwMyIgdXM9Ijg4MDMiLz48YmYgZ2k9IjE0OCIgdWU9Ijg4MDUiIHVzPSI4ODA0Ii8+PGJmIGdpPSIxODUiIHVlPSI5Njc0IiB1cz0iOTY3NCIvPjxiZiBnaT0iMTkyIiB1ZT0iNjQyNTgiIHVzPSI2NDI1NyIvPjxiZiBnaT0iMCIgdWU9IjY1NTM1IiB1cz0iNjU1MzUiLz48L2JmcmFuZ2VzPjxjaWQtd2lkdGhzIHN0YXJ0LWluZGV4PSIwIj48d3ggdz0iNjAwIi8+PHd4IHc9IjAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjMxNyIvPjx3eCB3PSI0MDAiLz48d3ggdz0iNDU5Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2MzYiLz48d3ggdz0iOTUwIi8+PHd4IHc9Ijc3OSIvPjx3eCB3PSIyNzQiLz48d3ggdz0iMzkwIi8+PHd4IHc9IjM5MCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjMxNyIvPjx3eCB3PSIzNjAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iMzM2Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI1MzAiLz48d3ggdz0iMTAwMCIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjg2Ii8+PHd4IHc9IjY5OCIvPjx3eCB3PSI3NzAiLz48d3ggdz0iNjMxIi8+PHd4IHc9IjU3NSIvPjx3eCB3PSI3NzQiLz48d3ggdz0iNzUxIi8+PHd4IHc9IjI5NCIvPjx3eCB3PSIyOTQiLz48d3ggdz0iNjU1Ii8+PHd4IHc9IjU1NyIvPjx3eCB3PSI4NjIiLz48d3ggdz0iNzQ4Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSI2MDMiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjY5NCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNjEwIi8+PHd4IHc9IjczMSIvPjx3eCB3PSI2ODQiLz48d3ggdz0iOTg4Ii8+PHd4IHc9IjY4NSIvPjx3eCB3PSI2MTAiLz48d3ggdz0iNjg1Ii8+PHd4IHc9IjM5MCIvPjx3eCB3PSIzMzYiLz48d3ggdz0iMzkwIi8+PHd4IHc9IjgzNyIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNTQ5Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI2MTUiLz48d3ggdz0iMzUyIi8+PHd4IHc9IjYzNCIvPjx3eCB3PSI2MzMiLz48d3ggdz0iMjc3Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSI1NzkiLz48d3ggdz0iMjc3Ii8+PHd4IHc9Ijk3NCIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYzNCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNDExIi8+PHd4IHc9IjUyMCIvPjx3eCB3PSIzOTIiLz48d3ggdz0iNjMzIi8+PHd4IHc9IjU5MSIvPjx3eCB3PSI4MTciLz48d3ggdz0iNTkxIi8+PHd4IHc9IjU5MSIvPjx3eCB3PSI1MjQiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjY4NCIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjk4Ii8+PHd4IHc9IjYzMSIvPjx3eCB3PSI3NDgiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjczMSIvPjx3eCB3PSI2MTIiLz48d3ggdz0iNjEyIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI2MTIiLz48d3ggdz0iNjEyIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI1NDkiLz48d3ggdz0iNjE1Ii8+PHd4IHc9IjYxNSIvPjx3eCB3PSI2MTUiLz48d3ggdz0iNjE1Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSIyNzciLz48d3ggdz0iMjc3Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI2MTEiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNjMzIi8+PHd4IHc9IjYzMyIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1ODkiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYyOSIvPjx3eCB3PSIxMDAwIi8+PHd4IHc9IjEwMDAiLz48d3ggdz0iMTAwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjgzNyIvPjx3eCB3PSI5NzQiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjgzMyIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjUxNyIvPjx3eCB3PSI2NzMiLz48d3ggdz0iNzU2Ii8+PHd4IHc9IjU4OCIvPjx3eCB3PSI1MjAiLz48d3ggdz0iNDcxIi8+PHd4IHc9IjQ3MSIvPjx3eCB3PSI3NjQiLz48d3ggdz0iOTgxIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI1MzAiLz48d3ggdz0iNDAwIi8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2MzciLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2NjgiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSIxMDAwIi8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjg0Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSIxMDY5Ii8+PHd4IHc9IjEwMjIiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjEwMDAiLz48d3ggdz0iNTE4Ii8+PHd4IHc9IjUxOCIvPjx3eCB3PSIzMTciLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI0OTQiLz48d3ggdz0iNTkxIi8+PHd4IHc9IjYxMCIvPjx3eCB3PSIxNjYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjM5OSIvPjx3eCB3PSIzOTkiLz48d3ggdz0iNjI5Ii8+PHd4IHc9IjYyOSIvPjx3eCB3PSI1MDAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjMxNyIvPjx3eCB3PSI1MTgiLz48d3ggdz0iMTM0MSIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjMxIi8+PHd4IHc9IjY4NCIvPjx3eCB3PSI2MzEiLz48d3ggdz0iNjMxIi8+PHd4IHc9IjI5NCIvPjx3eCB3PSIyOTQiLz48d3ggdz0iMjk0Ii8+PHd4IHc9IjI5NCIvPjx3eCB3PSI3ODciLz48d3ggdz0iNzg3Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSI3MzEiLz48d3ggdz0iNzMxIi8+PHd4IHc9IjczMSIvPjx3eCB3PSIyNzciLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjU2MiIvPjx3eCB3PSIyODQiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjUyMCIvPjx3eCB3PSI2ODUiLz48d3ggdz0iNTI0Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI3NzQiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMCIvPjx3eCB3PSI1OTEiLz48d3ggdz0iNjA0Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjQwMCIvPjx3eCB3PSI0MDAiLz48d3ggdz0iNDAwIi8+PHd4IHc9Ijk2OSIvPjx3eCB3PSI5NjkiLz48d3ggdz0iOTY5Ii8+PHd4IHc9Ijc3NCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iMjk0Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI1MjAiLz48d3ggdz0iNjk4Ii8+PHd4IHc9IjU0OSIvPjx3eCB3PSI2OTgiLz48d3ggdz0iNTQ5Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSIzNjAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI0MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjwvY2lkLXdpZHRocz48L211bHRpYnl0ZS1leHRyYXM+PGtlcm5pbmcga3B4MT0iMjQ2Ij48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIzNSI+PHBhaXIga2Vybj0iLTE0MiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNDYiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNDMiPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTYiPjxwYWlyIGtlcm49IjM2IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTExOCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIzNiIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iMzYiIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTExOCIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSI1NSIga3B4Mj0iNDUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMjYiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTEyIj48cGFpciBrZXJuPSItMTciIGtweDI9IjkxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEyMyI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjkxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjUxIj48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIxMyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIwOCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE4NyI+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItNzciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTIwMiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMTMiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTQ0Ij48cGFpciBrZXJuPSItNDAiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTkiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTUiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNzMiPjxwYWlyIGtlcm49IjMxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU0Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTYwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xODMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI0OSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMjQiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI5MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE2OSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOSIvPjxwYWlyIGtlcm49IjczIiBrcHgyPSIxNDQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQ1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjAxIj48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNjAiPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0yMDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iODUiPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExMSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgxIi8+PHBhaXIga2Vybj0iNDEiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTUxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijc0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI2MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMzQiPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0yMDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTAwIj48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEyMiI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjkxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNDciPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEwNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjIxMyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMjAyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIyMTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0yNjIiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjEyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iNTciLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI1NiIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMTAiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1OCI+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMjEiIGtweDI9Ijc2Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjgyIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxODYiPjxwYWlyIGtlcm49Ii0xNDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTQ2IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE3NSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIwOSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEwMyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjgxIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iOTgiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMTIiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMjkiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMzgiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTIxIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1NyI+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTg2IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTgxIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMzciPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDkiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTIwIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjQ5Ij48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9Ijk4Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIyNyI+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSI5OCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODYiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgxIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTU1IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xNjAiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjgiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTA0Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNzIiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTk5Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTQiPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iOTgiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTgwIj48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0MyIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xODgiIGtweDI9IjE0NCIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjczIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0MSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI4NSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjM3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMjAiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjUxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI1MyIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTM3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMzMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIzOSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMjM2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0NSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0NiIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1MyI+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItNDAiIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMzciPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMzMiPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyNTMiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjExIj48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNzgiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMzAiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjUyIj48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTI1Ij48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0MiI+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxNzAiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQ1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODkiLz48cGFpciBrZXJuPSItODYiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIzNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjExNSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI5MCI+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTEwNCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjM2Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTUiPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xNTUiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9Ijg2Ii8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii0xNDYiIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMTA5IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xNTUiIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjI1MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xMTgiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjIyOCIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNTEiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xNTEiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTE1NSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMTQiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTAiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI5MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTE1Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjM5Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMzYiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyOSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0NSI+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE3MyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xMjMiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTExIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iODkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE5NyI+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTQ0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjQxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI4MSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xODMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIzNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1MSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjUzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMzciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii05NSIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMzYiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iNDUiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI0NiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iOTIiPjxwYWlyIGtlcm49Ii0xNDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTQ2IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9Ijg5Ij48cGFpciBrZXJuPSItNzciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNDYiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMTA0IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMjEzIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIyMTIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMTA0Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIyMTEiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSI1NiIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxNzQiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1NiI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYxIi8+PC9rZXJuaW5nPjwvZm9udC1tZXRyaWNzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhTW9CZC50dGYgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vQmQudHRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZTY1NDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vQmQudHRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhTW9CZC54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vQmQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMzMxMDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vQmQueG1sCkBAIC0wLDAgKzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PGZvbnQtbWV0cmljcyBtZXRyaWNzLXZlcnNpb249IjIiIHR5cGU9IlRZUEUwIj48Zm9udC1uYW1lPkJpdHN0cmVhbVZlcmFTYW5zTW9uby1Cb2xkPC9mb250LW5hbWU+PGZ1bGwtbmFtZT5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm8gQm9sZDwvZnVsbC1uYW1lPjxmYW1pbHktbmFtZT5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm88L2ZhbWlseS1uYW1lPjxlbWJlZC8+PGNhcC1oZWlnaHQ+NzI5PC9jYXAtaGVpZ2h0Pjx4LWhlaWdodD41NDY8L3gtaGVpZ2h0Pjxhc2NlbmRlcj43NTk8L2FzY2VuZGVyPjxkZXNjZW5kZXI+LTI0MDwvZGVzY2VuZGVyPjxiYm94PjxsZWZ0Pi0xOTwvbGVmdD48Ym90dG9tPi0yMzU8L2JvdHRvbT48cmlnaHQ+NjA1PC9yaWdodD48dG9wPjkyODwvdG9wPjwvYmJveD48ZmxhZ3M+MzQ8L2ZsYWdzPjxzdGVtdj4wPC9zdGVtdj48aXRhbGljYW5nbGU+MDwvaXRhbGljYW5nbGU+PHN1YnR5cGU+VFlQRTA8L3N1YnR5cGU+PG11bHRpYnl0ZS1leHRyYXM+PGNpZC10eXBlPkNJREZvbnRUeXBlMjwvY2lkLXR5cGU+PGRlZmF1bHQtd2lkdGg+MDwvZGVmYXVsdC13aWR0aD48YmZyYW5nZXM+PGJmIGdpPSIzIiB1ZT0iMTI2IiB1cz0iMzIiLz48YmYgZ2k9IjE3MiIgdWU9IjE2MCIgdXM9IjE2MCIvPjxiZiBnaT0iMTYzIiB1ZT0iMTYxIiB1cz0iMTYxIi8+PGJmIGdpPSIxMzIiIHVlPSIxNjMiIHVzPSIxNjIiLz48YmYgZ2k9IjE4OSIgdWU9IjE2NCIgdXM9IjE2NCIvPjxiZiBnaT0iMTUwIiB1ZT0iMTY1IiB1cz0iMTY1Ii8+PGJmIGdpPSIyMzEiIHVlPSIxNjYiIHVzPSIxNjYiLz48YmYgZ2k9IjEzNCIgdWU9IjE2NyIgdXM9IjE2NyIvPjxiZiBnaT0iMTQyIiB1ZT0iMTY4IiB1cz0iMTY4Ii8+PGJmIGdpPSIxMzkiIHVlPSIxNjkiIHVzPSIxNjkiLz48YmYgZ2k9IjE1NyIgdWU9IjE3MCIgdXM9IjE3MCIvPjxiZiBnaT0iMTY5IiB1ZT0iMTcxIiB1cz0iMTcxIi8+PGJmIGdpPSIxNjQiIHVlPSIxNzIiIHVzPSIxNzIiLz48YmYgZ2k9IjI1NiIgdWU9IjE3MyIgdXM9IjE3MyIvPjxiZiBnaT0iMTM4IiB1ZT0iMTc0IiB1cz0iMTc0Ii8+PGJmIGdpPSIyMTciIHVlPSIxNzUiIHVzPSIxNzUiLz48YmYgZ2k9IjEzMSIgdWU9IjE3NiIgdXM9IjE3NiIvPjxiZiBnaT0iMTQ3IiB1ZT0iMTc3IiB1cz0iMTc3Ii8+PGJmIGdpPSIyNDEiIHVlPSIxNzkiIHVzPSIxNzgiLz48YmYgZ2k9IjE0MSIgdWU9IjE4MCIgdXM9IjE4MCIvPjxiZiBnaT0iMTUxIiB1ZT0iMTgxIiB1cz0iMTgxIi8+PGJmIGdpPSIxMzYiIHVlPSIxODIiIHVzPSIxODIiLz48YmYgZ2k9IjE5NSIgdWU9IjE4MyIgdXM9IjE4MyIvPjxiZiBnaT0iMjIxIiB1ZT0iMTg0IiB1cz0iMTg0Ii8+PGJmIGdpPSIyNDAiIHVlPSIxODUiIHVzPSIxODUiLz48YmYgZ2k9IjE1OCIgdWU9IjE4NiIgdXM9IjE4NiIvPjxiZiBnaT0iMTcwIiB1ZT0iMTg3IiB1cz0iMTg3Ii8+PGJmIGdpPSIyNDMiIHVlPSIxOTAiIHVzPSIxODgiLz48YmYgZ2k9IjE2MiIgdWU9IjE5MSIgdXM9IjE5MSIvPjxiZiBnaT0iMTczIiB1ZT0iMTkyIiB1cz0iMTkyIi8+PGJmIGdpPSIyMDEiIHVlPSIxOTMiIHVzPSIxOTMiLz48YmYgZ2k9IjE5OSIgdWU9IjE5NCIgdXM9IjE5NCIvPjxiZiBnaT0iMTc0IiB1ZT0iMTk1IiB1cz0iMTk1Ii8+PGJmIGdpPSI5OCIgdWU9IjE5NyIgdXM9IjE5NiIvPjxiZiBnaT0iMTQ0IiB1ZT0iMTk4IiB1cz0iMTk4Ii8+PGJmIGdpPSIxMDAiIHVlPSIxOTkiIHVzPSIxOTkiLz48YmYgZ2k9IjIwMyIgdWU9IjIwMCIgdXM9IjIwMCIvPjxiZiBnaT0iMTAxIiB1ZT0iMjAxIiB1cz0iMjAxIi8+PGJmIGdpPSIyMDAiIHVlPSIyMDIiIHVzPSIyMDIiLz48YmYgZ2k9IjIwMiIgdWU9IjIwMyIgdXM9IjIwMyIvPjxiZiBnaT0iMjA3IiB1ZT0iMjA0IiB1cz0iMjA0Ii8+PGJmIGdpPSIyMDQiIHVlPSIyMDciIHVzPSIyMDUiLz48YmYgZ2k9IjIzMiIgdWU9IjIwOCIgdXM9IjIwOCIvPjxiZiBnaT0iMTAyIiB1ZT0iMjA5IiB1cz0iMjA5Ii8+PGJmIGdpPSIyMTAiIHVlPSIyMTAiIHVzPSIyMTAiLz48YmYgZ2k9IjIwOCIgdWU9IjIxMiIgdXM9IjIxMSIvPjxiZiBnaT0iMTc1IiB1ZT0iMjEzIiB1cz0iMjEzIi8+PGJmIGdpPSIxMDMiIHVlPSIyMTQiIHVzPSIyMTQiLz48YmYgZ2k9IjIzOSIgdWU9IjIxNSIgdXM9IjIxNSIvPjxiZiBnaT0iMTQ1IiB1ZT0iMjE2IiB1cz0iMjE2Ii8+PGJmIGdpPSIyMTMiIHVlPSIyMTciIHVzPSIyMTciLz48YmYgZ2k9IjIxMSIgdWU9IjIxOSIgdXM9IjIxOCIvPjxiZiBnaT0iMTA0IiB1ZT0iMjIwIiB1cz0iMjIwIi8+PGJmIGdpPSIyMzQiIHVlPSIyMjEiIHVzPSIyMjEiLz48YmYgZ2k9IjIzNiIgdWU9IjIyMiIgdXM9IjIyMiIvPjxiZiBnaT0iMTM3IiB1ZT0iMjIzIiB1cz0iMjIzIi8+PGJmIGdpPSIxMDYiIHVlPSIyMjQiIHVzPSIyMjQiLz48YmYgZ2k9IjEwNSIgdWU9IjIyNSIgdXM9IjIyNSIvPjxiZiBnaT0iMTA3IiB1ZT0iMjI2IiB1cz0iMjI2Ii8+PGJmIGdpPSIxMDkiIHVlPSIyMjciIHVzPSIyMjciLz48YmYgZ2k9IjEwOCIgdWU9IjIyOCIgdXM9IjIyOCIvPjxiZiBnaT0iMTEwIiB1ZT0iMjI5IiB1cz0iMjI5Ii8+PGJmIGdpPSIxNjAiIHVlPSIyMzAiIHVzPSIyMzAiLz48YmYgZ2k9IjExMSIgdWU9IjIzMSIgdXM9IjIzMSIvPjxiZiBnaT0iMTEzIiB1ZT0iMjMyIiB1cz0iMjMyIi8+PGJmIGdpPSIxMTIiIHVlPSIyMzMiIHVzPSIyMzMiLz48YmYgZ2k9IjExNCIgdWU9IjIzNSIgdXM9IjIzNCIvPjxiZiBnaT0iMTE3IiB1ZT0iMjM2IiB1cz0iMjM2Ii8+PGJmIGdpPSIxMTYiIHVlPSIyMzciIHVzPSIyMzciLz48YmYgZ2k9IjExOCIgdWU9IjIzOSIgdXM9IjIzOCIvPjxiZiBnaT0iMjMzIiB1ZT0iMjQwIiB1cz0iMjQwIi8+PGJmIGdpPSIxMjAiIHVlPSIyNDEiIHVzPSIyNDEiLz48YmYgZ2k9IjEyMiIgdWU9IjI0MiIgdXM9IjI0MiIvPjxiZiBnaT0iMTIxIiB1ZT0iMjQzIiB1cz0iMjQzIi8+PGJmIGdpPSIxMjMiIHVlPSIyNDQiIHVzPSIyNDQiLz48YmYgZ2k9IjEyNSIgdWU9IjI0NSIgdXM9IjI0NSIvPjxiZiBnaT0iMTI0IiB1ZT0iMjQ2IiB1cz0iMjQ2Ii8+PGJmIGdpPSIxODQiIHVlPSIyNDciIHVzPSIyNDciLz48YmYgZ2k9IjE2MSIgdWU9IjI0OCIgdXM9IjI0OCIvPjxiZiBnaT0iMTI3IiB1ZT0iMjQ5IiB1cz0iMjQ5Ii8+PGJmIGdpPSIxMjYiIHVlPSIyNTAiIHVzPSIyNTAiLz48YmYgZ2k9IjEyOCIgdWU9IjI1MiIgdXM9IjI1MSIvPjxiZiBnaT0iMjM1IiB1ZT0iMjUzIiB1cz0iMjUzIi8+PGJmIGdpPSIyMzciIHVlPSIyNTQiIHVzPSIyNTQiLz48YmYgZ2k9IjE4NiIgdWU9IjI1NSIgdXM9IjI1NSIvPjxiZiBnaT0iMjUxIiB1ZT0iMjYzIiB1cz0iMjYyIi8+PGJmIGdpPSIyNTMiIHVlPSIyNjkiIHVzPSIyNjgiLz48YmYgZ2k9IjAiIHVlPSIyNzAiIHVzPSIyNzAiLz48YmYgZ2k9IjAiIHVlPSIyNzEiIHVzPSIyNzEiLz48YmYgZ2k9IjAiIHVlPSIyNzIiIHVzPSIyNzIiLz48YmYgZ2k9IjI1NSIgdWU9IjI3MyIgdXM9IjI3MyIvPjxiZiBnaT0iMjQ2IiB1ZT0iMjg3IiB1cz0iMjg2Ii8+PGJmIGdpPSIyNDgiIHVlPSIzMDQiIHVzPSIzMDQiLz48YmYgZ2k9IjIxNCIgdWU9IjMwNSIgdXM9IjMwNSIvPjxiZiBnaT0iMjI1IiB1ZT0iMzIyIiB1cz0iMzIxIi8+PGJmIGdpPSIxNzYiIHVlPSIzMzkiIHVzPSIzMzgiLz48YmYgZ2k9IjI0OSIgdWU9IjM1MSIgdXM9IjM1MCIvPjxiZiBnaT0iMjI3IiB1ZT0iMzUzIiB1cz0iMzUyIi8+PGJmIGdpPSIxODciIHVlPSIzNzYiIHVzPSIzNzYiLz48YmYgZ2k9IjIyOSIgdWU9IjM4MiIgdXM9IjM4MSIvPjxiZiBnaT0iMTY2IiB1ZT0iNDAyIiB1cz0iNDAyIi8+PGJmIGdpPSIyMTUiIHVlPSI3MTAiIHVzPSI3MTAiLz48YmYgZ2k9IjIyNCIgdWU9IjcxMSIgdXM9IjcxMSIvPjxiZiBnaT0iMjE4IiB1ZT0iNzMwIiB1cz0iNzI4Ii8+PGJmIGdpPSIyMjMiIHVlPSI3MzEiIHVzPSI3MzEiLz48YmYgZ2k9IjIxNiIgdWU9IjczMiIgdXM9IjczMiIvPjxiZiBnaT0iMjIyIiB1ZT0iNzMzIiB1cz0iNzMzIi8+PGJmIGdpPSIxNTkiIHVlPSI5MzciIHVzPSI5MzciLz48YmYgZ2k9IjE1NSIgdWU9Ijk2MCIgdXM9Ijk2MCIvPjxiZiBnaT0iMTc4IiB1ZT0iODIxMiIgdXM9IjgyMTEiLz48YmYgZ2k9IjAiIHVlPSI4MjEzIiB1cz0iODIxMyIvPjxiZiBnaT0iMCIgdWU9IjgyMTQiIHVzPSI4MjE0Ii8+PGJmIGdpPSIwIiB1ZT0iODIxNSIgdXM9IjgyMTUiLz48YmYgZ2k9IjE4MiIgdWU9IjgyMTciIHVzPSI4MjE2Ii8+PGJmIGdpPSIxOTYiIHVlPSI4MjE4IiB1cz0iODIxOCIvPjxiZiBnaT0iMCIgdWU9IjgyMTkiIHVzPSI4MjE5Ii8+PGJmIGdpPSIxODAiIHVlPSI4MjIxIiB1cz0iODIyMCIvPjxiZiBnaT0iMTk3IiB1ZT0iODIyMiIgdXM9IjgyMjIiLz48YmYgZ2k9IjAiIHVlPSI4MjIzIiB1cz0iODIyMyIvPjxiZiBnaT0iMTMwIiB1ZT0iODIyNCIgdXM9IjgyMjQiLz48YmYgZ2k9IjE5NCIgdWU9IjgyMjUiIHVzPSI4MjI1Ii8+PGJmIGdpPSIxMzUiIHVlPSI4MjI2IiB1cz0iODIyNiIvPjxiZiBnaT0iMCIgdWU9IjgyMjciIHVzPSI4MjI3Ii8+PGJmIGdpPSIwIiB1ZT0iODIyOCIgdXM9IjgyMjgiLz48YmYgZ2k9IjAiIHVlPSI4MjI5IiB1cz0iODIyOSIvPjxiZiBnaT0iMTcxIiB1ZT0iODIzMCIgdXM9IjgyMzAiLz48YmYgZ2k9IjE5OCIgdWU9IjgyNDAiIHVzPSI4MjQwIi8+PGJmIGdpPSIxOTAiIHVlPSI4MjUwIiB1cz0iODI0OSIvPjxiZiBnaT0iMjU4IiB1ZT0iODM2NCIgdXM9IjgzNjQiLz48YmYgZ2k9IjE0MCIgdWU9Ijg0ODIiIHVzPSI4NDgyIi8+PGJmIGdpPSIxNTIiIHVlPSI4NzA2IiB1cz0iODcwNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MDciIHVzPSI4NzA3Ii8+PGJmIGdpPSIwIiB1ZT0iODcwOCIgdXM9Ijg3MDgiLz48YmYgZ2k9IjAiIHVlPSI4NzA5IiB1cz0iODcwOSIvPjxiZiBnaT0iMTY4IiB1ZT0iODcxMCIgdXM9Ijg3MTAiLz48YmYgZ2k9IjE1NCIgdWU9Ijg3MTkiIHVzPSI4NzE5Ii8+PGJmIGdpPSIwIiB1ZT0iODcyMCIgdXM9Ijg3MjAiLz48YmYgZ2k9IjE1MyIgdWU9Ijg3MjEiIHVzPSI4NzIxIi8+PGJmIGdpPSIyMzgiIHVlPSI4NzIyIiB1cz0iODcyMiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjMiIHVzPSI4NzIzIi8+PGJmIGdpPSIwIiB1ZT0iODcyNCIgdXM9Ijg3MjQiLz48YmYgZ2k9IjE4OCIgdWU9Ijg3MjUiIHVzPSI4NzI1Ii8+PGJmIGdpPSIwIiB1ZT0iODcyNiIgdXM9Ijg3MjYiLz48YmYgZ2k9IjAiIHVlPSI4NzI3IiB1cz0iODcyNyIvPjxiZiBnaT0iMCIgdWU9Ijg3MjgiIHVzPSI4NzI4Ii8+PGJmIGdpPSIyNTciIHVlPSI4NzI5IiB1cz0iODcyOSIvPjxiZiBnaT0iMTY1IiB1ZT0iODczMCIgdXM9Ijg3MzAiLz48YmYgZ2k9IjAiIHVlPSI4NzMxIiB1cz0iODczMSIvPjxiZiBnaT0iMCIgdWU9Ijg3MzIiIHVzPSI4NzMyIi8+PGJmIGdpPSIwIiB1ZT0iODczMyIgdXM9Ijg3MzMiLz48YmYgZ2k9IjE0NiIgdWU9Ijg3MzQiIHVzPSI4NzM0Ii8+PGJmIGdpPSIxNTYiIHVlPSI4NzQ3IiB1cz0iODc0NyIvPjxiZiBnaT0iMTY3IiB1ZT0iODc3NiIgdXM9Ijg3NzYiLz48YmYgZ2k9IjE0MyIgdWU9Ijg4MDAiIHVzPSI4ODAwIi8+PGJmIGdpPSIwIiB1ZT0iODgwMSIgdXM9Ijg4MDEiLz48YmYgZ2k9IjAiIHVlPSI4ODAyIiB1cz0iODgwMiIvPjxiZiBnaT0iMCIgdWU9Ijg4MDMiIHVzPSI4ODAzIi8+PGJmIGdpPSIxNDgiIHVlPSI4ODA1IiB1cz0iODgwNCIvPjxiZiBnaT0iMTg1IiB1ZT0iOTY3NCIgdXM9Ijk2NzQiLz48YmYgZ2k9IjE5MiIgdWU9IjY0MjU4IiB1cz0iNjQyNTciLz48YmYgZ2k9IjAiIHVlPSI2NTUzNSIgdXM9IjY1NTM1Ii8+PC9iZnJhbmdlcz48Y2lkLXdpZHRocyBzdGFydC1pbmRleD0iMCI+PHd4IHc9IjYwMiIvPjx3eCB3PSIwIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PC9jaWQtd2lkdGhzPjwvbXVsdGlieXRlLWV4dHJhcz48L2ZvbnQtbWV0cmljcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vbm8udHRmIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmFNb25vLnR0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzlmMGI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmFNb25vLnR0ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vbm8ueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmFNb25vLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTBhODY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmFNb25vLnhtbApAQCAtMCwwICsxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjxmb250LW1ldHJpY3MgbWV0cmljcy12ZXJzaW9uPSIyIiB0eXBlPSJUWVBFMCI+PGZvbnQtbmFtZT5CaXRzdHJlYW1WZXJhU2Fuc01vbm8tUm9tYW48L2ZvbnQtbmFtZT48ZnVsbC1uYW1lPkJpdHN0cmVhbSBWZXJhIFNhbnMgTW9ubzwvZnVsbC1uYW1lPjxmYW1pbHktbmFtZT5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm88L2ZhbWlseS1uYW1lPjxlbWJlZC8+PGNhcC1oZWlnaHQ+NzI5PC9jYXAtaGVpZ2h0Pjx4LWhlaWdodD41NDY8L3gtaGVpZ2h0Pjxhc2NlbmRlcj43NTk8L2FzY2VuZGVyPjxkZXNjZW5kZXI+LTI0MDwvZGVzY2VuZGVyPjxiYm94PjxsZWZ0Pi00PC9sZWZ0Pjxib3R0b20+LTIzNTwvYm90dG9tPjxyaWdodD42MDU8L3JpZ2h0Pjx0b3A+OTI4PC90b3A+PC9iYm94PjxmbGFncz4zNDwvZmxhZ3M+PHN0ZW12PjA8L3N0ZW12PjxpdGFsaWNhbmdsZT4wPC9pdGFsaWNhbmdsZT48c3VidHlwZT5UWVBFMDwvc3VidHlwZT48bXVsdGlieXRlLWV4dHJhcz48Y2lkLXR5cGU+Q0lERm9udFR5cGUyPC9jaWQtdHlwZT48ZGVmYXVsdC13aWR0aD4wPC9kZWZhdWx0LXdpZHRoPjxiZnJhbmdlcz48YmYgZ2k9IjMiIHVlPSIxMjYiIHVzPSIzMiIvPjxiZiBnaT0iMTcyIiB1ZT0iMTYwIiB1cz0iMTYwIi8+PGJmIGdpPSIxNjMiIHVlPSIxNjEiIHVzPSIxNjEiLz48YmYgZ2k9IjEzMiIgdWU9IjE2MyIgdXM9IjE2MiIvPjxiZiBnaT0iMTg5IiB1ZT0iMTY0IiB1cz0iMTY0Ii8+PGJmIGdpPSIxNTAiIHVlPSIxNjUiIHVzPSIxNjUiLz48YmYgZ2k9IjIzMSIgdWU9IjE2NiIgdXM9IjE2NiIvPjxiZiBnaT0iMTM0IiB1ZT0iMTY3IiB1cz0iMTY3Ii8+PGJmIGdpPSIxNDIiIHVlPSIxNjgiIHVzPSIxNjgiLz48YmYgZ2k9IjEzOSIgdWU9IjE2OSIgdXM9IjE2OSIvPjxiZiBnaT0iMTU3IiB1ZT0iMTcwIiB1cz0iMTcwIi8+PGJmIGdpPSIxNjkiIHVlPSIxNzEiIHVzPSIxNzEiLz48YmYgZ2k9IjE2NCIgdWU9IjE3MiIgdXM9IjE3MiIvPjxiZiBnaT0iMjU2IiB1ZT0iMTczIiB1cz0iMTczIi8+PGJmIGdpPSIxMzgiIHVlPSIxNzQiIHVzPSIxNzQiLz48YmYgZ2k9IjIxNyIgdWU9IjE3NSIgdXM9IjE3NSIvPjxiZiBnaT0iMTMxIiB1ZT0iMTc2IiB1cz0iMTc2Ii8+PGJmIGdpPSIxNDciIHVlPSIxNzciIHVzPSIxNzciLz48YmYgZ2k9IjI0MSIgdWU9IjE3OSIgdXM9IjE3OCIvPjxiZiBnaT0iMTQxIiB1ZT0iMTgwIiB1cz0iMTgwIi8+PGJmIGdpPSIxNTEiIHVlPSIxODEiIHVzPSIxODEiLz48YmYgZ2k9IjEzNiIgdWU9IjE4MiIgdXM9IjE4MiIvPjxiZiBnaT0iMTk1IiB1ZT0iMTgzIiB1cz0iMTgzIi8+PGJmIGdpPSIyMjEiIHVlPSIxODQiIHVzPSIxODQiLz48YmYgZ2k9IjI0MCIgdWU9IjE4NSIgdXM9IjE4NSIvPjxiZiBnaT0iMTU4IiB1ZT0iMTg2IiB1cz0iMTg2Ii8+PGJmIGdpPSIxNzAiIHVlPSIxODciIHVzPSIxODciLz48YmYgZ2k9IjI0MyIgdWU9IjE5MCIgdXM9IjE4OCIvPjxiZiBnaT0iMTYyIiB1ZT0iMTkxIiB1cz0iMTkxIi8+PGJmIGdpPSIxNzMiIHVlPSIxOTIiIHVzPSIxOTIiLz48YmYgZ2k9IjIwMSIgdWU9IjE5MyIgdXM9IjE5MyIvPjxiZiBnaT0iMTk5IiB1ZT0iMTk0IiB1cz0iMTk0Ii8+PGJmIGdpPSIxNzQiIHVlPSIxOTUiIHVzPSIxOTUiLz48YmYgZ2k9Ijk4IiB1ZT0iMTk3IiB1cz0iMTk2Ii8+PGJmIGdpPSIxNDQiIHVlPSIxOTgiIHVzPSIxOTgiLz48YmYgZ2k9IjEwMCIgdWU9IjE5OSIgdXM9IjE5OSIvPjxiZiBnaT0iMjAzIiB1ZT0iMjAwIiB1cz0iMjAwIi8+PGJmIGdpPSIxMDEiIHVlPSIyMDEiIHVzPSIyMDEiLz48YmYgZ2k9IjIwMCIgdWU9IjIwMiIgdXM9IjIwMiIvPjxiZiBnaT0iMjAyIiB1ZT0iMjAzIiB1cz0iMjAzIi8+PGJmIGdpPSIyMDciIHVlPSIyMDQiIHVzPSIyMDQiLz48YmYgZ2k9IjIwNCIgdWU9IjIwNyIgdXM9IjIwNSIvPjxiZiBnaT0iMjMyIiB1ZT0iMjA4IiB1cz0iMjA4Ii8+PGJmIGdpPSIxMDIiIHVlPSIyMDkiIHVzPSIyMDkiLz48YmYgZ2k9IjIxMCIgdWU9IjIxMCIgdXM9IjIxMCIvPjxiZiBnaT0iMjA4IiB1ZT0iMjEyIiB1cz0iMjExIi8+PGJmIGdpPSIxNzUiIHVlPSIyMTMiIHVzPSIyMTMiLz48YmYgZ2k9IjEwMyIgdWU9IjIxNCIgdXM9IjIxNCIvPjxiZiBnaT0iMjM5IiB1ZT0iMjE1IiB1cz0iMjE1Ii8+PGJmIGdpPSIxNDUiIHVlPSIyMTYiIHVzPSIyMTYiLz48YmYgZ2k9IjIxMyIgdWU9IjIxNyIgdXM9IjIxNyIvPjxiZiBnaT0iMjExIiB1ZT0iMjE5IiB1cz0iMjE4Ii8+PGJmIGdpPSIxMDQiIHVlPSIyMjAiIHVzPSIyMjAiLz48YmYgZ2k9IjIzNCIgdWU9IjIyMSIgdXM9IjIyMSIvPjxiZiBnaT0iMjM2IiB1ZT0iMjIyIiB1cz0iMjIyIi8+PGJmIGdpPSIxMzciIHVlPSIyMjMiIHVzPSIyMjMiLz48YmYgZ2k9IjEwNiIgdWU9IjIyNCIgdXM9IjIyNCIvPjxiZiBnaT0iMTA1IiB1ZT0iMjI1IiB1cz0iMjI1Ii8+PGJmIGdpPSIxMDciIHVlPSIyMjYiIHVzPSIyMjYiLz48YmYgZ2k9IjEwOSIgdWU9IjIyNyIgdXM9IjIyNyIvPjxiZiBnaT0iMTA4IiB1ZT0iMjI4IiB1cz0iMjI4Ii8+PGJmIGdpPSIxMTAiIHVlPSIyMjkiIHVzPSIyMjkiLz48YmYgZ2k9IjE2MCIgdWU9IjIzMCIgdXM9IjIzMCIvPjxiZiBnaT0iMTExIiB1ZT0iMjMxIiB1cz0iMjMxIi8+PGJmIGdpPSIxMTMiIHVlPSIyMzIiIHVzPSIyMzIiLz48YmYgZ2k9IjExMiIgdWU9IjIzMyIgdXM9IjIzMyIvPjxiZiBnaT0iMTE0IiB1ZT0iMjM1IiB1cz0iMjM0Ii8+PGJmIGdpPSIxMTciIHVlPSIyMzYiIHVzPSIyMzYiLz48YmYgZ2k9IjExNiIgdWU9IjIzNyIgdXM9IjIzNyIvPjxiZiBnaT0iMTE4IiB1ZT0iMjM5IiB1cz0iMjM4Ii8+PGJmIGdpPSIyMzMiIHVlPSIyNDAiIHVzPSIyNDAiLz48YmYgZ2k9IjEyMCIgdWU9IjI0MSIgdXM9IjI0MSIvPjxiZiBnaT0iMTIyIiB1ZT0iMjQyIiB1cz0iMjQyIi8+PGJmIGdpPSIxMjEiIHVlPSIyNDMiIHVzPSIyNDMiLz48YmYgZ2k9IjEyMyIgdWU9IjI0NCIgdXM9IjI0NCIvPjxiZiBnaT0iMTI1IiB1ZT0iMjQ1IiB1cz0iMjQ1Ii8+PGJmIGdpPSIxMjQiIHVlPSIyNDYiIHVzPSIyNDYiLz48YmYgZ2k9IjE4NCIgdWU9IjI0NyIgdXM9IjI0NyIvPjxiZiBnaT0iMTYxIiB1ZT0iMjQ4IiB1cz0iMjQ4Ii8+PGJmIGdpPSIxMjciIHVlPSIyNDkiIHVzPSIyNDkiLz48YmYgZ2k9IjEyNiIgdWU9IjI1MCIgdXM9IjI1MCIvPjxiZiBnaT0iMTI4IiB1ZT0iMjUyIiB1cz0iMjUxIi8+PGJmIGdpPSIyMzUiIHVlPSIyNTMiIHVzPSIyNTMiLz48YmYgZ2k9IjIzNyIgdWU9IjI1NCIgdXM9IjI1NCIvPjxiZiBnaT0iMTg2IiB1ZT0iMjU1IiB1cz0iMjU1Ii8+PGJmIGdpPSIyNTEiIHVlPSIyNjMiIHVzPSIyNjIiLz48YmYgZ2k9IjI1MyIgdWU9IjI2OSIgdXM9IjI2OCIvPjxiZiBnaT0iMCIgdWU9IjI3MCIgdXM9IjI3MCIvPjxiZiBnaT0iMCIgdWU9IjI3MSIgdXM9IjI3MSIvPjxiZiBnaT0iMCIgdWU9IjI3MiIgdXM9IjI3MiIvPjxiZiBnaT0iMjU1IiB1ZT0iMjczIiB1cz0iMjczIi8+PGJmIGdpPSIyNDYiIHVlPSIyODciIHVzPSIyODYiLz48YmYgZ2k9IjI0OCIgdWU9IjMwNCIgdXM9IjMwNCIvPjxiZiBnaT0iMjE0IiB1ZT0iMzA1IiB1cz0iMzA1Ii8+PGJmIGdpPSIyMjUiIHVlPSIzMjIiIHVzPSIzMjEiLz48YmYgZ2k9IjE3NiIgdWU9IjMzOSIgdXM9IjMzOCIvPjxiZiBnaT0iMjQ5IiB1ZT0iMzUxIiB1cz0iMzUwIi8+PGJmIGdpPSIyMjciIHVlPSIzNTMiIHVzPSIzNTIiLz48YmYgZ2k9IjE4NyIgdWU9IjM3NiIgdXM9IjM3NiIvPjxiZiBnaT0iMjI5IiB1ZT0iMzgyIiB1cz0iMzgxIi8+PGJmIGdpPSIxNjYiIHVlPSI0MDIiIHVzPSI0MDIiLz48YmYgZ2k9IjIxNSIgdWU9IjcxMCIgdXM9IjcxMCIvPjxiZiBnaT0iMjI0IiB1ZT0iNzExIiB1cz0iNzExIi8+PGJmIGdpPSIyMTgiIHVlPSI3MzAiIHVzPSI3MjgiLz48YmYgZ2k9IjIyMyIgdWU9IjczMSIgdXM9IjczMSIvPjxiZiBnaT0iMjE2IiB1ZT0iNzMyIiB1cz0iNzMyIi8+PGJmIGdpPSIyMjIiIHVlPSI3MzMiIHVzPSI3MzMiLz48YmYgZ2k9IjE1OSIgdWU9IjkzNyIgdXM9IjkzNyIvPjxiZiBnaT0iMTU1IiB1ZT0iOTYwIiB1cz0iOTYwIi8+PGJmIGdpPSIxNzgiIHVlPSI4MjEyIiB1cz0iODIxMSIvPjxiZiBnaT0iMCIgdWU9IjgyMTMiIHVzPSI4MjEzIi8+PGJmIGdpPSIwIiB1ZT0iODIxNCIgdXM9IjgyMTQiLz48YmYgZ2k9IjAiIHVlPSI4MjE1IiB1cz0iODIxNSIvPjxiZiBnaT0iMTgyIiB1ZT0iODIxNyIgdXM9IjgyMTYiLz48YmYgZ2k9IjE5NiIgdWU9IjgyMTgiIHVzPSI4MjE4Ii8+PGJmIGdpPSIwIiB1ZT0iODIxOSIgdXM9IjgyMTkiLz48YmYgZ2k9IjE4MCIgdWU9IjgyMjEiIHVzPSI4MjIwIi8+PGJmIGdpPSIxOTciIHVlPSI4MjIyIiB1cz0iODIyMiIvPjxiZiBnaT0iMCIgdWU9IjgyMjMiIHVzPSI4MjIzIi8+PGJmIGdpPSIxMzAiIHVlPSI4MjI0IiB1cz0iODIyNCIvPjxiZiBnaT0iMTk0IiB1ZT0iODIyNSIgdXM9IjgyMjUiLz48YmYgZ2k9IjEzNSIgdWU9IjgyMjYiIHVzPSI4MjI2Ii8+PGJmIGdpPSIwIiB1ZT0iODIyNyIgdXM9IjgyMjciLz48YmYgZ2k9IjAiIHVlPSI4MjI4IiB1cz0iODIyOCIvPjxiZiBnaT0iMCIgdWU9IjgyMjkiIHVzPSI4MjI5Ii8+PGJmIGdpPSIxNzEiIHVlPSI4MjMwIiB1cz0iODIzMCIvPjxiZiBnaT0iMTk4IiB1ZT0iODI0MCIgdXM9IjgyNDAiLz48YmYgZ2k9IjE5MCIgdWU9IjgyNTAiIHVzPSI4MjQ5Ii8+PGJmIGdpPSIyNTgiIHVlPSI4MzY0IiB1cz0iODM2NCIvPjxiZiBnaT0iMTQwIiB1ZT0iODQ4MiIgdXM9Ijg0ODIiLz48YmYgZ2k9IjE1MiIgdWU9Ijg3MDYiIHVzPSI4NzA2Ii8+PGJmIGdpPSIwIiB1ZT0iODcwNyIgdXM9Ijg3MDciLz48YmYgZ2k9IjAiIHVlPSI4NzA4IiB1cz0iODcwOCIvPjxiZiBnaT0iMCIgdWU9Ijg3MDkiIHVzPSI4NzA5Ii8+PGJmIGdpPSIxNjgiIHVlPSI4NzEwIiB1cz0iODcxMCIvPjxiZiBnaT0iMTU0IiB1ZT0iODcxOSIgdXM9Ijg3MTkiLz48YmYgZ2k9IjAiIHVlPSI4NzIwIiB1cz0iODcyMCIvPjxiZiBnaT0iMTUzIiB1ZT0iODcyMSIgdXM9Ijg3MjEiLz48YmYgZ2k9IjIzOCIgdWU9Ijg3MjIiIHVzPSI4NzIyIi8+PGJmIGdpPSIwIiB1ZT0iODcyMyIgdXM9Ijg3MjMiLz48YmYgZ2k9IjAiIHVlPSI4NzI0IiB1cz0iODcyNCIvPjxiZiBnaT0iMTg4IiB1ZT0iODcyNSIgdXM9Ijg3MjUiLz48YmYgZ2k9IjAiIHVlPSI4NzI2IiB1cz0iODcyNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjciIHVzPSI4NzI3Ii8+PGJmIGdpPSIwIiB1ZT0iODcyOCIgdXM9Ijg3MjgiLz48YmYgZ2k9IjI1NyIgdWU9Ijg3MjkiIHVzPSI4NzI5Ii8+PGJmIGdpPSIxNjUiIHVlPSI4NzMwIiB1cz0iODczMCIvPjxiZiBnaT0iMCIgdWU9Ijg3MzEiIHVzPSI4NzMxIi8+PGJmIGdpPSIwIiB1ZT0iODczMiIgdXM9Ijg3MzIiLz48YmYgZ2k9IjAiIHVlPSI4NzMzIiB1cz0iODczMyIvPjxiZiBnaT0iMTQ2IiB1ZT0iODczNCIgdXM9Ijg3MzQiLz48YmYgZ2k9IjE1NiIgdWU9Ijg3NDciIHVzPSI4NzQ3Ii8+PGJmIGdpPSIxNjciIHVlPSI4Nzc2IiB1cz0iODc3NiIvPjxiZiBnaT0iMTQzIiB1ZT0iODgwMCIgdXM9Ijg4MDAiLz48YmYgZ2k9IjAiIHVlPSI4ODAxIiB1cz0iODgwMSIvPjxiZiBnaT0iMCIgdWU9Ijg4MDIiIHVzPSI4ODAyIi8+PGJmIGdpPSIwIiB1ZT0iODgwMyIgdXM9Ijg4MDMiLz48YmYgZ2k9IjE0OCIgdWU9Ijg4MDUiIHVzPSI4ODA0Ii8+PGJmIGdpPSIxODUiIHVlPSI5Njc0IiB1cz0iOTY3NCIvPjxiZiBnaT0iMTkyIiB1ZT0iNjQyNTgiIHVzPSI2NDI1NyIvPjxiZiBnaT0iMCIgdWU9IjY1NTM1IiB1cz0iNjU1MzUiLz48L2JmcmFuZ2VzPjxjaWQtd2lkdGhzIHN0YXJ0LWluZGV4PSIwIj48d3ggdz0iNjAyIi8+PHd4IHc9IjAiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48L2NpZC13aWR0aHM+PC9tdWx0aWJ5dGUtZXh0cmFzPjwvZm9udC1tZXRyaWNzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUyMWQ1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsCkBAIC0wLDAgKzEsMzkgQEAKKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorICB4bWxuczpkPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisgIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSJkIj4KKworICA8eHNsOnRlbXBsYXRlIG5hbWU9ImNvbXBvbmVudC50aXRsZSI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9Ii4iLz4KKworICAgIDx4c2w6dmFyaWFibGUgbmFtZT0ibGV2ZWwiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJhbmNlc3Rvcjo6ZDpzZWN0aW9uIj4KKyAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoYW5jZXN0b3I6OmQ6c2VjdGlvbikrMSIvPgorICAgICAgICA8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OnNlY3Q1Ij42PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImFuY2VzdG9yOjpzZWN0NCI+NTwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJhbmNlc3Rvcjo6c2VjdDMiPjQ8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OnNlY3QyIj4zPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImFuY2VzdG9yOjpzZWN0MSI+MjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDplbGVtZW50IG5hbWU9Imh7JGxldmVsKzF9IiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPnRpdGxlPC94c2w6YXR0cmlidXRlPgorICAgICAgPHhzbDppZiB0ZXN0PSIkZ2VuZXJhdGUuaWQuYXR0cmlidXRlcyA9IDAiPgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYW5jaG9yIj4KKyAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIkbm9kZSIvPgorICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJjb25kaXRpb25hbCIgc2VsZWN0PSIwIi8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICA8L3hzbDppZj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iJG5vZGUiIG1vZGU9Im9iamVjdC50aXRsZS5tYXJrdXAiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iYWxsb3ctYW5jaG9ycyIgc2VsZWN0PSIxIi8+CisgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJG5vZGUiLz4KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC94c2w6ZWxlbWVudD4KKyAgPC94c2w6dGVtcGxhdGU+Cis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9kaXZpc2lvbi50aXRsZS54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyNjU5NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9kaXZpc2lvbi50aXRsZS54c2wKQEAgLTAsMCArMSwyNCBAQAorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zOmQ9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKKyAgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9ImQiPgorICAKKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJkaXZpc2lvbi50aXRsZSI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9Ii4iLz4KKyAgICAKKyAgICA8aDE+CisgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+dGl0bGU8L3hzbDphdHRyaWJ1dGU+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYW5jaG9yIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJG5vZGUiLz4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImNvbmRpdGlvbmFsIiBzZWxlY3Q9IjAiLz4KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IiRub2RlIiBtb2RlPSJvYmplY3QudGl0bGUubWFya3VwIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImFsbG93LWFuY2hvcnMiIHNlbGVjdD0iMSIvPgorICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBlcm1hbGluayI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRub2RlIi8+CisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDwvaDE+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9kcmFmdC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZHJhZnQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMDUxYTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZHJhZnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9lbWJlZGRlZF92aWRlby54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZW1iZWRkZWRfdmlkZW8ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYjMzYzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZW1iZWRkZWRfdmlkZW8ueHNsCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgICB4bWxuczpkPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayI+CisKKyAgIDx4c2w6b3V0cHV0IG1ldGhvZD0iaHRtbCIgLz4KKworICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL2Q6Y2hhcHRlci9kOnNlY3Rpb24vZDptZWRpYW9iamVjdCI+CisgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iLiI+CisgICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZpZF91cmwiPgorICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZDp2aWRlb29iamVjdC9kOnZpZGVvZGF0YS9AZmlsZXJlZiIgLz4KKyAgICAgICAgIDwveHNsOnZhcmlhYmxlPgorICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW46IGF1dG8iPgorICAgICAgICAgICAgPG9iamVjdCB0eXBlPSJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIgd2lkdGg9IjY0MCIgaGVpZ2h0PSI0MjAiIGRhdGE9InskdmlkX3VybH0/Y29sb3IyPUZCRTlFQyZhbXA7c2hvd3NlYXJjaD0wJmFtcDt2ZXJzaW9uPTMmYW1wO21vZGVzdGJyYW5kaW5nPTEmYW1wO2ZzPTEiPgorICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1vdmllIiB2YWx1ZT0ieyR2aWRfdXJsfT9jb2xvcjI9RkJFOUVDJmFtcDtzaG93c2VhcmNoPTAmYW1wO3ZlcnNpb249MyZhbXA7bW9kZXN0YnJhbmRpbmc9MSZhbXA7ZnM9MSIgLz4KKyAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhbGxvd0Z1bGxTY3JlZW4iIHZhbHVlPSJ0cnVlIiAvPgorICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFsbG93c2NyaXB0YWNjZXNzIiB2YWx1ZT0iYWx3YXlzIiAvPgorICAgICAgICAgICAgPC9vYmplY3Q+CisgICAgICAgICA8L2Rpdj4KKyAgICAgIDwveHNsOmZvci1lYWNoPgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZm9wLWNvbmZpZy54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZm9wLWNvbmZpZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDljYzVjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9mb3AtY29uZmlnLnhtbApAQCAtMCwwICsxLDU4IEBACis8Zm9wIHZlcnNpb249IjEuMCI+CisKKyAgPCEtLSBTdHJpY3QgdXNlciBjb25maWd1cmF0aW9uIC0tPgorICA8c3RyaWN0LWNvbmZpZ3VyYXRpb24+dHJ1ZTwvc3RyaWN0LWNvbmZpZ3VyYXRpb24+CisKKyAgPCEtLSBTdHJpY3QgRk8gdmFsaWRhdGlvbiAtLT4KKyAgPHN0cmljdC12YWxpZGF0aW9uPnRydWU8L3N0cmljdC12YWxpZGF0aW9uPgorCisgICA8IS0tCisgICAgU2V0IHRoZSBiYXNlRGlyIHNvIGNvbW1vbi9vcGVuZWRoYW5kLnN2ZyByZWZlcmVuY2VzIGluIHBsYW5zIHN0aWxsCisgICAgd29yayBvay4gTm90ZSwgcmVsYXRpdmUgZmlsZSByZWZlcmVuY2VzIHRvIGN1cnJlbnQgZGlyIHNob3VsZCBzdGlsbCB3b3JrLgorICAgIC0tPgkKKyAgPGJhc2U+Li4vdGVtcGxhdGU8L2Jhc2U+CisgIDxmb250LWJhc2U+Li4vdGVtcGxhdGU8L2ZvbnQtYmFzZT4KKyAKKyAgPCEtLSBTb3VyY2UgcmVzb2x1dGlvbiBpbiBkcGkgKGRvdHMvcGl4ZWxzIHBlciBpbmNoKSBmb3IgZGV0ZXJtaW5pbmcgdGhlCisgICAgICAgc2l6ZSBvZiBwaXhlbHMgaW4gU1ZHIGFuZCBiaXRtYXAgaW1hZ2VzLCBkZWZhdWx0OiA3MmRwaSAtLT4KKyAgPCEtLSA8c291cmNlLXJlc29sdXRpb24+NzI8L3NvdXJjZS1yZXNvbHV0aW9uPiAtLT4KKyAgPCEtLSBUYXJnZXQgcmVzb2x1dGlvbiBpbiBkcGkgKGRvdHMvcGl4ZWxzIHBlciBpbmNoKSBmb3Igc3BlY2lmeWluZyB0aGUKKyAgICAgICB0YXJnZXQgcmVzb2x1dGlvbiBmb3IgZ2VuZXJhdGVkIGJpdG1hcHMsIGRlZmF1bHQ6IDcyZHBpIC0tPgorICA8IS0tIDx0YXJnZXQtcmVzb2x1dGlvbj43MjwvdGFyZ2V0LXJlc29sdXRpb24+IC0tPgorIAorICA8IS0tIGRlZmF1bHQgcGFnZS1oZWlnaHQgYW5kIHBhZ2Utd2lkdGgsIGluIGNhc2UKKyAgICAgICB2YWx1ZSBpcyBzcGVjaWZpZWQgYXMgYXV0byAtLT4KKyAgPGRlZmF1bHQtcGFnZS1zZXR0aW5ncyBoZWlnaHQ9IjExaW4iIHdpZHRoPSI4LjI2aW4iLz4gCisgCisgIDwhLS0gPHVzZS1jYWNoZT5mYWxzZTwvdXNlLWNhY2hlPiAtLT4KKyAKKyAgPHJlbmRlcmVycz4KKyAgICA8cmVuZGVyZXIgbWltZT0iYXBwbGljYXRpb24vcGRmIj4KKyAgICAgIDxmb250cz4KKyAgICAgICAgPGZvbnQgIG1ldHJpY3MtZmlsZT0iVmVyYU1vbm8ueG1sIgorICAgICAgICAgICAgICAga2VybmluZz0ieWVzIiAKKyAgICAgICAgICAgICAgIGVtYmVkLXVybD0iVmVyYU1vbm8udHRmIj4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFtb25vIiBzdHlsZT0ibm9ybWFsIiB3ZWlnaHQ9Im5vcm1hbCIvPgorICAgICAgICA8L2ZvbnQ+CisKKyAgICAgICAgPGZvbnQgIG1ldHJpY3MtZmlsZT0iVmVyYU1vQmQueG1sIgorICAgICAgICAgICAgICAga2VybmluZz0ieWVzIiAKKyAgICAgICAgICAgICAgIGVtYmVkLXVybD0iVmVyYU1vQmQudHRmIj4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFtb25vIiBzdHlsZT0ibm9ybWFsIiB3ZWlnaHQ9ImJvbGQiLz4KKyAgICAgICAgPC9mb250PgorCisgICAgICAgIDxmb250ICBtZXRyaWNzLWZpbGU9IlZlcmEueG1sIgorICAgICAgICAgICAgICAga2VybmluZz0ieWVzIiAKKyAgICAgICAgICAgICAgIGVtYmVkLXVybD0iVmVyYS50dGYiPgorICAgICAgICAgIDxmb250LXRyaXBsZXQgbmFtZT0idmVyYXNhbnMiIHN0eWxlPSJub3JtYWwiIHdlaWdodD0ibm9ybWFsIi8+CisgICAgICAgICAgPGZvbnQtdHJpcGxldCBuYW1lPSJ2ZXJhc2FucyIgc3R5bGU9Im5vcm1hbCIgd2VpZ2h0PSJib2xkIi8+CisgICAgICAgICAgPGZvbnQtdHJpcGxldCBuYW1lPSJ2ZXJhc2FucyIgc3R5bGU9Iml0YWxpYyIgd2VpZ2h0PSJub3JtYWwiLz4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFzYW5zIiBzdHlsZT0iaXRhbGljIiB3ZWlnaHQ9ImJvbGQiLz4KKyAgICAgICAgPC9mb250PgorICAgICAgICAKKyAgICAgICAgPGF1dG8tZGV0ZWN0Lz4KKyAgICAgIDwvZm9udHM+CisgICAgPC9yZW5kZXJlcj4KKyAgPC9yZW5kZXJlcnM+Cis8L2ZvcD4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTVlNjk3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wKQEAgLTAsMCArMSwyMSBAQAorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zOmQ9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKKyAgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9ImQiPgorICAKKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYWwub2JqZWN0LmhlYWRpbmciPgorICAgIDx4c2w6cGFyYW0gbmFtZT0ib2JqZWN0IiBzZWxlY3Q9Ii4iLz4KKyAgICA8eHNsOnBhcmFtIG5hbWU9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iJG9iamVjdCIgbW9kZT0ib2JqZWN0LnRpdGxlLm1hcmt1cCI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJhbGxvdy1hbmNob3JzIiBzZWxlY3Q9IjEiLz4KKyAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICA8L3hzbDpwYXJhbT4KKyAgICA8cCBjbGFzcz0idGl0bGUiPgorICAgICAgPGI+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHRpdGxlIi8+PC9iPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBlcm1hbGluayI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRvYmplY3QiLz4KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC9wPgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZ2xvc3MtcGVybWFsaW5rcy54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZ2xvc3MtcGVybWFsaW5rcy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJmNTgxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9nbG9zcy1wZXJtYWxpbmtzLnhzbApAQCAtMCwwICsxLDE0IEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIg0KKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iDQorICB4bWxuczpkPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayINCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCisNCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Imdsb3NzZW50cnkvZ2xvc3N0ZXJtIj4NCisgICAgPHhzbDphcHBseS1pbXBvcnRzLz4NCisgICAgPHhzbDppZiB0ZXN0PSIkZ2VuZXJhdGUucGVybWFsaW5rICE9IDAiPg0KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwZXJtYWxpbmsiPg0KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iLi4iLz4NCisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPg0KKyAgICA8L3hzbDppZj4NCisgIDwveHNsOnRlbXBsYXRlPg0KKzwveHNsOnN0eWxlc2hlZXQ+DQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL29oYW5kLWNvbG9yLnN2ZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9vaGFuZC1jb2xvci5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyZmY5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9vaGFuZC1jb2xvci5zdmcKQEAgLTAsMCArMSwxNTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPCEtLSBDcmVhdGVkIHdpdGggSW5rc2NhcGUgKGh0dHA6Ly93d3cuaW5rc2NhcGUub3JnLykgLS0+Cis8c3ZnCisgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCisgICB4bWxuczpjYz0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvIgorICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgorICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKKyAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKKyAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKKyAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgorICAgd2lkdGg9IjE0MS4xNzk5OSIKKyAgIGhlaWdodD0iNTUuMzQiCisgICBpZD0ic3ZnMjIwNyIKKyAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCisgICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ1IgorICAgdmVyc2lvbj0iMS4wIgorICAgc29kaXBvZGk6ZG9jbmFtZT0ib2hhbmQtY29sb3Iuc3ZnIgorICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiCisgICBzb2RpcG9kaTpkb2NiYXNlPSIvaG9tZS9tYWxsdW0vUHJvamVjdHMvYWRtaW4vb2gtZG9jLXRvb2xzL2NvbW1vbiIKKyAgIHNvZGlwb2RpOm1vZGlmaWVkPSJ0cnVlIj4KKyAgPGRlZnMKKyAgICAgaWQ9ImRlZnMzIiAvPgorICA8c29kaXBvZGk6bmFtZWR2aWV3CisgICAgIGlkPSJiYXNlIgorICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCisgICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgorICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCisgICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCisgICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCisgICAgIGlua3NjYXBlOnpvb209IjEuMiIKKyAgICAgaW5rc2NhcGU6Y3g9IjE2MCIKKyAgICAgaW5rc2NhcGU6Y3k9IjE0Ni4yMTE4OSIKKyAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIgorICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCisgICAgIGhlaWdodD0iNTUuMzRweCIKKyAgICAgd2lkdGg9IjE0MS4xOHB4IgorICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9Ijc3MiIKKyAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNTgxIgorICAgICBpbmtzY2FwZTp3aW5kb3cteD0iNSIKKyAgICAgaW5rc2NhcGU6d2luZG93LXk9IjQ4IiAvPgorICA8bWV0YWRhdGEKKyAgICAgaWQ9Im1ldGFkYXRhMjIxMSI+CisgICAgPHJkZjpSREY+CisgICAgICA8Y2M6V29yaworICAgICAgICAgcmRmOmFib3V0PSIiPgorICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KKyAgICAgICAgPGRjOnR5cGUKKyAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KKyAgICAgIDwvY2M6V29yaz4KKyAgICA8L3JkZjpSREY+CisgIDwvbWV0YWRhdGE+CisgIDxnCisgICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgorICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgorICAgICBpZD0ibGF5ZXIxIj4KKyAgICA8ZworICAgICAgIGlkPSJnMjA5NCIKKyAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL2hvbWUvbWFsbHVtL0Rlc2t0b3AvZzIxMjYucG5nIgorICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIzMTIuNzE4NDEiCisgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjMxMi43MTg0MSIKKyAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjU5NTQ3NjcsMCwwLDAuNTk1NDc2NywzMS43OTMwNTgsLTE4LjQ3MTA1MikiPgorICAgICAgPGcKKyAgICAgICAgIGlkPSJnMTkiCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIj4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgICAgaWQ9InBhdGgyMSIKKyAgICAgICAgICAgZD0iTSA0OC42OTMsNTAuNjMzIEMgNDAuMjgyLDUwLjYzMyAzMy40MzksNTcuNDc3IDMzLjQzOSw2NS44ODggTCAzMy40MzksODEuMTQyIEwgNDEuMDY2LDgxLjE0MiBMIDQxLjA2Niw2NS44ODggQyA0MS4wNjYsNjEuNjg0IDQ0LjQ4Niw1OC4yNjEgNDguNjkyLDU4LjI2MSBDIDUyLjg5Nyw1OC4yNjEgNTYuMzIsNjEuNjg0IDU2LjMyLDY1Ljg4OCBDIDU2LjMyLDcwLjA5MyA1Mi44OTcsNzMuNTE2IDQ4LjY5Miw3My41MTYgQyA0NS42NzcsNzMuNTE2IDQzLjA2NSw3MS43NTYgNDEuODI4LDY5LjIxMSBMIDQxLjgyOCw3OS41MDQgQyA0My44OTIsODAuNTQ5IDQ2LjIyNCw4MS4xNDIgNDguNjkyLDgxLjE0MiBDIDU3LjEwMyw4MS4xNDIgNjMuOTQ3LDc0LjMgNjMuOTQ3LDY1Ljg4OCBDIDYzLjk0OCw1Ny40NzcgNTcuMTA0LDUwLjYzMyA0OC42OTMsNTAuNjMzIHogIiAvPgorICAgICAgPC9nPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJmaWxsOiM2ZDZkNzA7ZmlsbC1vcGFjaXR5OjEiCisgICAgICAgICBpZD0icGF0aDIzIgorICAgICAgICAgZD0iTSAxOC40ODYsNTAuNTU3IEMgMjYuOTQyLDUwLjU1NyAzMy44MTksNTcuNDM1IDMzLjgxOSw2NS44ODggQyAzMy44MTksNzQuMzQ0IDI2Ljk0Miw4MS4yMjMgMTguNDg2LDgxLjIyMyBDIDEwLjAzMiw4MS4yMjMgMy4xNTIsNzQuMzQ0IDMuMTUyLDY1Ljg4OCBDIDMuMTUyLDU3LjQzNSAxMC4wMzIsNTAuNTU3IDE4LjQ4Niw1MC41NTcgeiBNIDE4LjQ4Niw3My41NTYgQyAyMi43MTMsNzMuNTU2IDI2LjE1Myw3MC4xMTggMjYuMTUzLDY1Ljg4OCBDIDI2LjE1Myw2MS42NjEgMjIuNzEzLDU4LjIyMiAxOC40ODYsNTguMjIyIEMgMTQuMjU4LDU4LjIyMiAxMC44MTksNjEuNjYxIDEwLjgxOSw2NS44ODggQyAxMC44Miw3MC4xMTcgMTQuMjU5LDczLjU1NiAxOC40ODYsNzMuNTU2IHogIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJmaWxsOiM2ZDZkNzA7ZmlsbC1vcGFjaXR5OjEiCisgICAgICAgICBpZD0icGF0aDI1IgorICAgICAgICAgZD0iTSA5NC4wNzQsMTA3LjQ2NSBMIDk0LjA3NCw5Ni4wMTYgQyA5NC4wNzQsODcuNjA1IDg3LjIzMyw4MC43NjMgNzguODIyLDgwLjc2MyBDIDcwLjQxLDgwLjc2MyA2My41NjcsODcuNjA1IDYzLjU2Nyw5Ni4wMTYgQyA2My41NjcsMTA0LjQyNyA3MC40MSwxMTEuMjY5IDc4LjgyMiwxMTEuMjY5IEMgODEuMjg5LDExMS4yNjkgODMuNjIxLDExMC42NzYgODUuNjg1LDEwOS42MzEgTCA4NS42ODUsOTkuMzM5IEMgODQuNDQ4LDEwMS44ODUgODEuODM2LDEwMy42NDQgNzguODIyLDEwMy42NDQgQyA3NC42MTUsMTAzLjY0NCA3MS4xOTQsMTAwLjIyMSA3MS4xOTQsOTYuMDE2IEMgNzEuMTk0LDkxLjgxIDc0LjYxNSw4OC4zODggNzguODIyLDg4LjM4OCBDIDgzLjAyNiw4OC4zODggODYuNDQ4LDkxLjgxIDg2LjQ0OCw5Ni4wMTYgTCA4Ni40NDgsMTA3LjQ1NiBDIDg2LjQ0OCwxMDkuNTYyIDg4LjE1NiwxMTEuMjY4IDkwLjI2MiwxMTEuMjY4IEMgOTIuMzY0LDExMS4yNjkgOTQuMDY4LDEwOS41NjYgOTQuMDc0LDEwNy40NjUgeiAiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoMjciCisgICAgICAgICBkPSJNIDEyNC4xOTcsOTUuODE0IEMgMTI0LjA4OCw4Ny40OTYgMTE3LjI5Myw4MC43NjIgMTA4Ljk0OSw4MC43NjIgQyAxMDAuNTksODAuNzYyIDkzLjc4Myw4Ny41MiA5My42OTcsOTUuODU2IEwgOTMuNjkzLDk1Ljg1NiBMIDkzLjY5NSwxMDcuNDU2IEMgOTMuNjk1LDEwOS41NjIgOTUuNDAyLDExMS4yNjggOTcuNTA5LDExMS4yNjggQyA5OS42MTEsMTExLjI2OCAxMDEuMzE2LDEwOS41NjYgMTAxLjMyMSwxMDcuNDY0IEwgMTAxLjMyMSw5NS45OTQgTCAxMDEuMzIxLDk1Ljk5NCBDIDEwMS4zMzMsOTEuNzk4IDEwNC43NDcsODguMzg4IDEwOC45NDgsODguMzg4IEMgMTEzLjE0Nyw4OC4zODggMTE2LjU2Myw5MS43OTggMTE2LjU3NSw5NS45OTQgTCAxMTYuNTc1LDEwNy40NTYgQyAxMTYuNTc1LDEwOS41NjIgMTE4LjI4MiwxMTEuMjY4IDEyMC4zODcsMTExLjI2OCBDIDEyMi40OTIsMTExLjI2OCAxMjQuMjAxLDEwOS41NjIgMTI0LjIwMSwxMDcuNDU2IEwgMTI0LjIwMSw5NS44MTQgTCAxMjQuMTk3LDk1LjgxNCB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGgyOSIKKyAgICAgICAgIGQ9Ik0gNjMuOTQ2LDk2LjAwNSBMIDYzLjk0Niw5NS44NTQgTCA2My45NDMsOTUuODU0IEwgNjMuOTQzLDk1LjgxNSBMIDYzLjk0Miw5NS44MTUgQyA2My44MzMsODcuNDk3IDU3LjAzNyw4MC43NjEgNDguNjkzLDgwLjc2MSBDIDQ4LjY4Miw4MC43NjEgNDguNjcxLDgwLjc2MyA0OC42NTgsODAuNzYzIEMgNDguMzgyLDgwLjc2MyA0OC4xMDcsODAuNzcyIDQ3LjgzMyw4MC43ODYgQyA0Ny43NSw4MC43OTEgNDcuNjY4LDgwLjc5OSA0Ny41ODYsODAuODA2IEMgNDcuMzc4LDgwLjgyMiA0Ny4xNzIsODAuODM4IDQ2Ljk2OCw4MC44NjIgQyA0Ni44ODQsODAuODczIDQ2LjgwMSw4MC44ODIgNDYuNzE5LDgwLjg5MyBDIDQ2LjUwOCw4MC45MiA0Ni4yOTgsODAuOTUyIDQ2LjA5MSw4MC45ODcgQyA0Ni4wMjQsODAuOTk5IDQ1Ljk1OCw4MS4wMSA0NS44OTEsODEuMDI0IEMgNDUuNjQ5LDgxLjA2OCA0NS40MDYsODEuMTE5IDQ1LjE2OCw4MS4xNzUgQyA0NS4xNCw4MS4xODMgNDUuMTEyLDgxLjE4OSA0NS4wODUsODEuMTk1IEMgNDMuNjU2LDgxLjU0MiA0Mi4zMDYsODIuMDkyIDQxLjA2NSw4Mi44MTIgTCA0MS4wNjUsODAuNzYxIEwgMzMuNDM4LDgwLjc2MSBMIDMzLjQzOCw5NS44NTcgTCAzMy40MzUsOTUuODU3IEwgMzMuNDM1LDEwNy40NTcgQyAzMy40MzUsMTA5LjU2MyAzNS4xNDIsMTExLjI2OSAzNy4yNDgsMTExLjI2OSBDIDM5LjA5MywxMTEuMjY5IDQwLjYzMiwxMDkuOTU4IDQwLjk4NCwxMDguMjE3IEMgNDEuMDM2LDEwNy45NjMgNDEuMDY1LDEwNy43MDIgNDEuMDY1LDEwNy40MzUgTCA0MS4wNjUsOTUuODczIEMgNDEuMDg2LDk0LjczMiA0MS4zNTcsOTMuNjUgNDEuODI4LDkyLjY4NSBMIDQxLjgyOCw5Mi42OTMgQyA0Mi41OTgsOTEuMTA2IDQzLjkwNSw4OS44MjQgNDUuNTExLDg5LjA4NSBDIDQ1LjUxOSw4OS4wOCA0NS41MjksODkuMDc2IDQ1LjUzNiw4OS4wNzMgQyA0NS44NDksODguOTI4IDQ2LjE3NCw4OC44MDcgNDYuNTA4LDg4LjcwNyBDIDQ2LjUyMyw4OC43MDQgNDYuNTM2LDg4LjY5OSA0Ni41NSw4OC42OTYgQyA0Ni42OTksODguNjUxIDQ2Ljg1LDg4LjYxNCA0Ny4wMDQsODguNTc2IEMgNDcuMDI1LDg4LjU3NSA0Ny4wNDYsODguNTY3IDQ3LjA2OSw4OC41NjIgQyA0Ny4yMzQsODguNTI3IDQ3LjQwMiw4OC40OTUgNDcuNTcyLDg4LjQ2OSBDIDQ3LjU4Niw4OC40NjggNDcuNiw4OC40NjYgNDcuNjE1LDg4LjQ2MyBDIDQ3Ljc2Myw4OC40NDMgNDcuOTE2LDg4LjQyNyA0OC4wNjcsODguNDE1IEMgNDguMTA2LDg4LjQxIDQ4LjE0NSw4OC40MDcgNDguMTg2LDg4LjQwNCBDIDQ4LjM1Miw4OC4zOTMgNDguNTIsODguMzg2IDQ4LjY5MSw4OC4zODYgQyA1Mi44ODgsODguMzg3IDU2LjMwNCw5MS43OTcgNTYuMzE2LDk1Ljk5MiBMIDU2LjMxNiwxMDcuNDU0IEMgNTYuMzE2LDEwOS41NiA1OC4wMjMsMTExLjI2NiA2MC4xMywxMTEuMjY2IEMgNjEuOTc2LDExMS4yNjYgNjMuNTE2LDEwOS45NTQgNjMuODY3LDEwOC4yMTEgQyA2My45MTksMTA3Ljk2MyA2My45NDYsMTA3LjcwNiA2My45NDYsMTA3LjQ0MiBMIDYzLjk0Niw5Ni4wMjQgQyA2My45NDYsOTYuMDIxIDYzLjk0Nyw5Ni4wMTggNjMuOTQ3LDk2LjAxNSBDIDYzLjk0OCw5Ni4wMTEgNjMuOTQ2LDk2LjAwOCA2My45NDYsOTYuMDA1IHogIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJmaWxsOiM2ZDZkNzA7ZmlsbC1vcGFjaXR5OjEiCisgICAgICAgICBpZD0icGF0aDMxIgorICAgICAgICAgZD0iTSAxODAuNjQ0LDUwLjYzMyBDIDE3OC41MzksNTAuNjMzIDE3Ni44MzIsNTIuMzQxIDE3Ni44MzIsNTQuNDQ3IEwgMTc2LjgzMiw2NS44ODcgQyAxNzYuODMyLDcwLjA5MiAxNzMuNDEsNzMuNTEzIDE2OS4yMDMsNzMuNTEzIEMgMTY0Ljk5OCw3My41MTMgMTYxLjU3Niw3MC4wOTIgMTYxLjU3Niw2NS44ODcgQyAxNjEuNTc2LDYxLjY4MyAxNjQuOTk4LDU4LjI2IDE2OS4yMDMsNTguMjYgQyAxNzIuMjE5LDU4LjI2IDE3NC44Myw2MC4wMTkgMTc2LjA2OCw2Mi41NjUgTCAxNzYuMDY4LDUyLjI3MSBDIDE3NC4wMDQsNTEuMjI1IDE3MS42NzMsNTAuNjMyIDE2OS4yMDMsNTAuNjMyIEMgMTYwLjc5Myw1MC42MzIgMTUzLjk1MSw1Ny40NzYgMTUzLjk1MSw2NS44ODcgQyAxNTMuOTUxLDc0LjI5OCAxNjAuNzkzLDgxLjE0MSAxNjkuMjAzLDgxLjE0MSBDIDE3Ny42MTUsODEuMTQxIDE4NC40NTksNzQuMjk4IDE4NC40NTksNjUuODg3IEwgMTg0LjQ1OSw1NC40NDcgQyAxODQuNDU4LDUyLjM0MSAxODIuNzUxLDUwLjYzMyAxODAuNjQ0LDUwLjYzMyB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGgzMyIKKyAgICAgICAgIGQ9Ik0gMTI0LjIwMyw3Ny4zMzkgTCAxMjQuMjAzLDY1LjY4NyBMIDEyNC4xOTcsNjUuNjg3IEMgMTI0LjA4OCw1Ny4zNzEgMTE3LjI5Myw1MC42MzMgMTA4Ljk0OSw1MC42MzMgQyAxMDAuNTkyLDUwLjYzMyA5My43ODMsNTcuMzkzIDkzLjY5Nyw2NS43MzEgTCA5My42OTUsNjUuNzMxIEwgOTMuNjk1LDY1Ljg3NyBDIDkzLjY5NSw2NS44ODIgOTMuNjkzLDY1Ljg4NSA5My42OTMsNjUuODg4IEMgOTMuNjkzLDY1Ljg5MSA5My42OTUsNjUuODk2IDkzLjY5NSw2NS44OTkgTCA5My42OTUsNzcuMzMgQyA5My42OTUsNzkuNDM1IDk1LjQwMiw4MS4xNDIgOTcuNTA5LDgxLjE0MiBDIDk5LjYxNCw4MS4xNDIgMTAxLjMyMSw3OS40MzUgMTAxLjMyMSw3Ny4zMyBMIDEwMS4zMjEsNjUuODY4IEMgMTAxLjMzMyw2MS42NzIgMTA0Ljc0Nyw1OC4yNjEgMTA4Ljk0OCw1OC4yNjEgQyAxMTMuMTQ3LDU4LjI2MSAxMTYuNTYzLDYxLjY3MiAxMTYuNTc1LDY1Ljg2OCBMIDExNi41NzUsNjUuODY4IEwgMTE2LjU3NSw3Ny4zMjkgQyAxMTYuNTc1LDc5LjQzNCAxMTguMjgyLDgxLjE0MSAxMjAuMzg5LDgxLjE0MSBDIDEyMi40OTIsODEuMTQyIDEyNC4xOTcsNzkuNDQgMTI0LjIwMyw3Ny4zMzkgeiAiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoMzUiCisgICAgICAgICBkPSJNIDE1MC41MTcsODAuNzYxIEMgMTQ4LjQxLDgwLjc2MSAxNDYuNzAzLDgyLjQ2OSAxNDYuNzAzLDg0LjU3NSBMIDE0Ni43MDMsOTYuMDE1IEMgMTQ2LjcwMywxMDAuMjIgMTQzLjI4MywxMDMuNjQzIDEzOS4wNzYsMTAzLjY0MyBDIDEzNC44NzEsMTAzLjY0MyAxMzEuNDQ5LDEwMC4yMiAxMzEuNDQ5LDk2LjAxNSBDIDEzMS40NDksOTEuODA4IDEzNC44NzEsODguMzg3IDEzOS4wNzYsODguMzg3IEMgMTQyLjA5Miw4OC4zODcgMTQ0LjcwMyw5MC4xNDUgMTQ1Ljk0MSw5Mi42OTIgTCAxNDUuOTQxLDgyLjM5NyBDIDE0My44NzUsODEuMzUzIDE0MS41NDUsODAuNzYgMTM5LjA3Niw4MC43NiBDIDEzMC42NjYsODAuNzYgMTIzLjgyMiw4Ny42MDQgMTIzLjgyMiw5Ni4wMTUgQyAxMjMuODIyLDEwNC40MjYgMTMwLjY2NiwxMTEuMjY4IDEzOS4wNzYsMTExLjI2OCBDIDE0Ny40ODYsMTExLjI2OCAxNTQuMzMsMTA0LjQyNiAxNTQuMzMsOTYuMDE1IEwgMTU0LjMzLDg0LjU3NSBDIDE1NC4zMyw4Mi40NjkgMTUyLjYyMyw4MC43NjEgMTUwLjUxNyw4MC43NjEgeiAiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoMzciCisgICAgICAgICBkPSJNIDgyLjYyNSw3Ny4zNDUgQyA4Mi42MjUsNzUuMjQ3IDgwLjkyMyw3My41NDcgNzguODI2LDczLjU0NyBMIDc4LjgyNiw4MS4xNDIgQyA4MC45MjIsODEuMTQyIDgyLjYyNSw3OS40NDIgODIuNjI1LDc3LjM0NSB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGgzOSIKKyAgICAgICAgIGQ9Ik0gOTAuMjUyLDY5LjY4NSBDIDkyLjM1LDY5LjY4NSA5NC4wNDgsNjcuOTg3IDk0LjA0OCw2NS44ODggTCA4Ni40NTMsNjUuODg4IEMgODYuNDUzLDY3Ljk4NiA4OC4xNTQsNjkuNjg1IDkwLjI1Miw2OS42ODUgeiAiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoNDEiCisgICAgICAgICBkPSJNIDkzLjgzMiw3Ny4zMjkgQyA5My44MzIsNzUuMjIzIDkyLjEyNSw3My41MTYgOTAuMDE4LDczLjUxNiBMIDc4LjgyNSw3My41MTYgQyA3NC42MTksNzMuNTE2IDcxLjE5OSw3MC4wOTMgNzEuMTk5LDY1Ljg4OCBDIDcxLjE5OSw2MS42ODQgNzQuNjE5LDU4LjI2MSA3OC44MjUsNTguMjYxIEMgODMuMDMyLDU4LjI2MSA4Ni40NTMsNjEuNjg0IDg2LjQ1Myw2NS44ODggQyA4Ni40NTMsNjguOTA0IDg0LjY5NCw3MS41MTQgODIuMTQ5LDcyLjc1MiBMIDkyLjQ0Miw3Mi43NTIgQyA5My40ODgsNzAuNjg5IDk0LjA4LDY4LjM1NiA5NC4wOCw2NS44ODggQyA5NC4wOCw1Ny40NzcgODcuMjM3LDUwLjYzMyA3OC44MjYsNTAuNjMzIEMgNzAuNDE1LDUwLjYzMyA2My41NzEsNTcuNDc3IDYzLjU3MSw2NS44ODggQyA2My41NzEsNzQuMyA3MC40MTUsODEuMTQyIDc4LjgyNiw4MS4xNDIgTCA5MC4wMTgsODEuMTQyIEMgOTIuMTI1LDgxLjE0MiA5My44MzIsNzkuNDM1IDkzLjgzMiw3Ny4zMjkgeiAiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoNDMiCisgICAgICAgICBkPSJNIDE0Mi44NjksNzcuMzQ1IEMgMTQyLjg2OSw3NS4yNDcgMTQxLjE2OCw3My41NDcgMTM5LjA3LDczLjU0NyBMIDEzOS4wNyw4MS4xNDIgQyAxNDEuMTY3LDgxLjE0MiAxNDIuODY5LDc5LjQ0MiAxNDIuODY5LDc3LjM0NSB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGg0NSIKKyAgICAgICAgIGQ9Ik0gMTUwLjQ5Niw2OS42ODUgQyAxNTIuNTk0LDY5LjY4NSAxNTQuMjkzLDY3Ljk4NyAxNTQuMjkzLDY1Ljg4OCBMIDE0Ni42OTksNjUuODg4IEMgMTQ2LjY5OSw2Ny45ODYgMTQ4LjM5OCw2OS42ODUgMTUwLjQ5Niw2OS42ODUgeiAiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoNDciCisgICAgICAgICBkPSJNIDE1NC4wNzYsNzcuMzI5IEMgMTU0LjA3Niw3NS4yMjMgMTUyLjM2Nyw3My41MTYgMTUwLjI2Miw3My41MTYgTCAxMzkuMDcsNzMuNTE2IEMgMTM0Ljg2NSw3My41MTYgMTMxLjQ0Myw3MC4wOTMgMTMxLjQ0Myw2NS44ODggQyAxMzEuNDQzLDYxLjY4NCAxMzQuODY1LDU4LjI2MSAxMzkuMDcsNTguMjYxIEMgMTQzLjI3NSw1OC4yNjEgMTQ2LjY5OSw2MS42ODQgMTQ2LjY5OSw2NS44ODggQyAxNDYuNjk5LDY4LjkwNCAxNDQuOTM5LDcxLjUxNCAxNDIuMzkyLDcyLjc1MiBMIDE1Mi42ODcsNzIuNzUyIEMgMTUzLjczLDcwLjY4OSAxNTQuMzI0LDY4LjM1NiAxNTQuMzI0LDY1Ljg4OCBDIDE1NC4zMjQsNTcuNDc3IDE0Ny40OCw1MC42MzMgMTM5LjA3LDUwLjYzMyBDIDEzMC42Niw1MC42MzMgMTIzLjgxNiw1Ny40NzcgMTIzLjgxNiw2NS44ODggQyAxMjMuODE2LDc0LjMgMTMwLjY2LDgxLjE0MiAxMzkuMDcsODEuMTQyIEwgMTUwLjI2MSw4MS4xNDIgQyAxNTIuMzY3LDgxLjE0MiAxNTQuMDc2LDc5LjQzNSAxNTQuMDc2LDc3LjMyOSB6ICIgLz4KKyAgICA8L2c+CisgICAgPGcKKyAgICAgICBpZD0iZzIxMjYiCisgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC43Njc5NTY0LDAsMCwwLjc2Nzk1NjQsLTY2LjUyMDYzMSwxMS40MjkwMykiCisgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMxMi43MTg0MSIKKyAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMzEyLjcxODQxIgorICAgICAgIHN0eWxlPSJmaWxsOiMzNTk5MmE7ZmlsbC1vcGFjaXR5OjEiPgorICAgICAgPGcKKyAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDg2LjMzOTc1LDQuMjM5ODVlLTIpIgorICAgICAgICAgc3R5bGU9ImZpbGw6IzM1OTkyYTtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJnMjExNCI+CisgICAgICAgIDxnCisgICAgICAgICAgIHN0eWxlPSJmaWxsOiMzNTk5MmE7ZmlsbC1vcGFjaXR5OjEiCisgICAgICAgICAgIGlkPSJnMjExNiI+CisgICAgICAgICAgPHBhdGgKKyAgICAgICAgICAgICBpZD0icGF0aDIxMTgiCisgICAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTg2LjMzOTc1LC00LjIzOTkzNGUtMikiCisgICAgICAgICAgICAgZD0iTSA4OS45Njg3NSwwLjAzMTI1IEMgODcuOTYyNzQ4LDAuMDMxMjUwMDAxIDg2LjM0Mzc1LDEuNjgxNTAwMSA4Ni4zNDM3NSwzLjY4NzUgTCA4Ni4zNDM3NSwxNy43MTg3NSBMIDg2LjM0Mzc1LDE5LjY4NzUgTCA4Ni4zNDM3NSwyOC45MDYyNSBDIDg2LjM0Mzc1MiwzOS4wNjgyNSA5NC42MTkyNSw0Ny4zNDM3NSAxMDQuNzgxMjUsNDcuMzQzNzUgTCAxMTMuMzc1LDQ3LjM0Mzc1IEwgMTIzLjE4NzUsNDcuMzQzNzUgTCAxMjcuMTU2MjUsNDcuMzQzNzUgQyAxMjkuMTYzMjUsNDcuMzQzNzQ5IDEzMC44MTI1LDQ1LjcyNDc1IDEzMC44MTI1LDQzLjcxODc1IEMgMTMwLjgxMjUsNDEuNzEyNzUgMTI5LjE2MzI1LDQwLjA5Mzc1IDEyNy4xNTYyNSw0MC4wOTM3NSBMIDEyMy4xODc1LDQwLjA5Mzc1IEwgMTIzLjE4NzUsMTkuNjg3NSBMIDEyMy4xODc1LDE0LjY1NjI1IEwgMTIzLjE4NzUsMy42ODc1IEMgMTIzLjE4NzUsMS42ODE1IDEyMS41Njc1LDAuMDMxMjUgMTE5LjU2MjUsMC4wMzEyNSBDIDExNy41NTU1LDAuMDMxMjUwMDAxIDExNS45Mzc1LDEuNjgxNTAwMSAxMTUuOTM3NSwzLjY4NzUgTCAxMTUuOTM3NSwxNC4yODEyNSBDIDExNS4xMTg1LDEzLjY1NDI1IDExNC4yNjI3NSwxMy4xMDkgMTEzLjM0Mzc1LDEyLjYyNSBMIDExMy4zNDM3NSwzLjY4NzUgQyAxMTMuMzQ0NzUsMS42ODE1IDExMS42OTI1LDAuMDMxMjUgMTA5LjY4NzUsMC4wMzEyNSBDIDEwNy42ODI1LDAuMDMxMjUwMDAxIDEwNi4wNjI1LDEuNjgxNTAwMSAxMDYuMDYyNSwzLjY4NzUgTCAxMDYuMDYyNSwxMC41NjI1IEMgMTA1LjYzMDUsMTAuNTMyNSAxMDUuMjIwMjUsMTAuNSAxMDQuNzgxMjUsMTAuNSBDIDEwNC4zNDEyNSwxMC41IDEwMy45MDA3NSwxMC41MzI1IDEwMy40Njg3NSwxMC41NjI1IEwgMTAzLjQ2ODc1LDMuNjg3NSBDIDEwMy40Njk3NSwxLjY4MTUgMTAxLjg0OTc1LDAuMDMxMjUgOTkuODQzNzUsMC4wMzEyNSBDIDk3LjgzNzc0OSwwLjAzMTI1MDAwMSA5Ni4yMTg3NSwxLjY4MTUwMDEgOTYuMjE4NzUsMy42ODc1IEwgOTYuMjE4NzUsMTIuNjI1IEMgOTUuMjk5NzU0LDEzLjEwOSA5NC40MTM3NSwxMy42NTQyNSA5My41OTM3NSwxNC4yODEyNSBMIDkzLjU5Mzc1LDMuNjg3NSBDIDkzLjU5NDc1LDEuNjgxNSA5MS45NzQ3NSwwLjAzMTI1IDg5Ljk2ODc1LDAuMDMxMjUgeiBNIDEwNC43ODEyNSwxNC4zNDM3NSBDIDExMi44MDgyNSwxNC4zNDM3NSAxMTkuMzEyNSwyMC44NzkyNSAxMTkuMzEyNSwyOC45MDYyNSBDIDExOS4zMTI1LDM2LjkzMzI1IDExMi44MDgyNSw0My40Njg3NSAxMDQuNzgxMjUsNDMuNDY4NzUgQyA5Ni43NTQyNTQsNDMuNDY4NzUgOTAuMjE4NzUsMzYuOTM0MjUgOTAuMjE4NzUsMjguOTA2MjUgQyA5MC4yMTg3NTIsMjAuODc4MjUgOTYuNzUzMjUzLDE0LjM0Mzc1IDEwNC43ODEyNSwxNC4zNDM3NSB6ICIKKyAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMzU5OTJhO2ZpbGwtb3BhY2l0eToxIiAvPgorICAgICAgICA8L2c+CisgICAgICA8L2c+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzM1OTkyYTtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoMjEyMiIKKyAgICAgICAgIGQ9Ik0gMTEyLjA0ODc1LDI4LjkxMzM5OSBDIDExMi4wNDg3NSwyNC44OTkzOTkgMTA4Ljc4Mjc1LDIxLjYzNDM5OSAxMDQuNzY5NzUsMjEuNjM0Mzk5IEMgMTAwLjc1Njc1LDIxLjYzNDM5OSA5Ny40OTA3NTMsMjQuOTAwMzk5IDk3LjQ5MDc1MywyOC45MTMzOTkgQyA5Ny40OTA3NTMsMzIuOTI2Mzk5IDEwMC43NTY3NSwzNi4xOTIzOTkgMTA0Ljc2OTc1LDM2LjE5MjM5OSBDIDEwOC43ODI3NSwzNi4xOTIzOTkgMTEyLjA0ODc1LDMyLjkyNzM5OSAxMTIuMDQ4NzUsMjguOTEzMzk5IHogIiAvPgorICAgIDwvZz4KKyAgPC9nPgorPC9zdmc+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcGVybWFsaW5rcy54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcGVybWFsaW5rcy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhMWMxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbApAQCAtMCwwICsxLDI1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj4KKworICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLnBlcm1hbGluayIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0icGVybWFsaW5rLnRleHQiPsK2PC94c2w6cGFyYW0+CisKKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwZXJtYWxpbmsiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0ibm9kZSIvPgorCisgICAgPHhzbDppZiB0ZXN0PSIkZ2VuZXJhdGUucGVybWFsaW5rICE9ICcwJyI+CisgICAgICA8c3BhbiBjbGFzcz0icGVybWFsaW5rIj4KKyAgICAgICAgPGEgYWx0PSJQZXJtYWxpbmsiIHRpdGxlPSJQZXJtYWxpbmsiPgorICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPgorICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImhyZWYudGFyZ2V0Ij4KKyAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im9iamVjdCIgIHNlbGVjdD0iJG5vZGUiLz4KKyAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgICAgPC94c2w6YXR0cmlidXRlPgorICAgICAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9IiRwZXJtYWxpbmsudGV4dCIvPgorICAgICAgICA8L2E+CisgICAgICA8L3NwYW4+CisgICAgPC94c2w6aWY+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9wb2t5LWRiLXBkZi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcG9reS1kYi1wZGYueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YTNkZjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcG9reS1kYi1wZGYueHNsCkBAIC0wLDAgKzEsNjQgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudC9mby9kb2Nib29rLnhzbCIgLz4KKworICA8IS0tIGNoZWNrIHByb2plY3QtcGxhbi5zaCBmb3IgaG93IHRoaXMgaXMgZ2VuZXJhdGVkLCBuZWVkZWQgdG8gdHdlYWsKKyAgICAgICB0aGUgY292ZXIgcGFnZQorICAgIC0tPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iL3RtcC90aXRsZXBhZ2UueHNsIi8+CisKKyAgPCEtLSBUbyBmb3JjZSBhIHBhZ2UgYnJlYWsgaW4gZG9jdW1lbnQsIGkuZSBwZXIgc2VjdGlvbiBhZGQgYQorICAgICAgPD9oYXJkLXBhZ2VicmVhaz8+IHRhZy4KKyAgLS0+CisgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHJvY2Vzc2luZy1pbnN0cnVjdGlvbignaGFyZC1wYWdlYnJlYWsnKSI+CisgICA8Zm86YmxvY2sgYnJlYWstYmVmb3JlPSdwYWdlJyAvPgorIDwveHNsOnRlbXBsYXRlPgorCisgIDwhLS1GaXggZm9yIGRlZnVhbHQgaW5kZW50IGdldHRpbmcgVE9DIGFsbCB3aWVyZC4uCisgICAgICBTZWUgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9tbC9kb2Nib29rLWFwcHMvMjAwNS1xMS9tc2cwMDQ1NS5odG1sCisgICAgICBGSVhNRTogbXVzdCBiZSBhIGJldHRlciBmaXgKKyAgICAtLT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJib2R5LnN0YXJ0LmluZGVudCIgc2VsZWN0PSInMCciLz4KKyAgPCEtLTx4c2w6cGFyYW0gbmFtZT0idGl0bGUubWFyZ2luLmxlZnQiIHNlbGVjdD0iJzAnIi8+LS0+CisKKyAgPCEtLSBzdG9wIGxvbmctaXNoIGhlYWRlciB0aXRsZXMgZ2V0dGluZyB3cmFwcGVkIC0tPgorICA8eHNsOnBhcmFtIG5hbWU9ImhlYWRlci5jb2x1bW4ud2lkdGhzIj4xIDEwIDE8L3hzbDpwYXJhbT4KKworICA8IS0tIGN1c3RvbWlzZSBoZWFkZXJzIGFuZCBmb290ZXJzIGEgbGl0dGxlIC0tPgorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iaGVhZC5zZXAucnVsZSI+CisgICA8eHNsOmlmIHRlc3Q9IiRoZWFkZXIucnVsZSAhPSAwIj4KKyAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYm9yZGVyLWJvdHRvbS13aWR0aCI+MC41cHQ8L3hzbDphdHRyaWJ1dGU+CisgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImJvcmRlci1ib3R0b20tc3R5bGUiPnNvbGlkPC94c2w6YXR0cmlidXRlPgorICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJib3JkZXItYm90dG9tLWNvbG9yIj4jOTk5OTk5PC94c2w6YXR0cmlidXRlPgorICAgPC94c2w6aWY+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iZm9vdC5zZXAucnVsZSI+CisgICAgPHhzbDppZiB0ZXN0PSIkZm9vdGVyLnJ1bGUgIT0gMCI+CisgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImJvcmRlci10b3Atd2lkdGgiPjAuNXB0PC94c2w6YXR0cmlidXRlPgorICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJib3JkZXItdG9wLXN0eWxlIj5zb2xpZDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYm9yZGVyLXRvcC1jb2xvciI+Izk5OTk5OTwveHNsOmF0dHJpYnV0ZT4KKyAgICA8L3hzbDppZj4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPHhzbDphdHRyaWJ1dGUtc2V0IG5hbWU9ImhlYWRlci5jb250ZW50LnByb3BlcnRpZXMiPgorICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4jOTk5OTk5PC94c2w6YXR0cmlidXRlPgorICA8L3hzbDphdHRyaWJ1dGUtc2V0PgorCisgIDx4c2w6YXR0cmlidXRlLXNldCBuYW1lPSJmb290ZXIuY29udGVudC5wcm9wZXJ0aWVzIj4KKyAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+Izk5OTk5OTwveHNsOmF0dHJpYnV0ZT4KKyAgPC94c2w6YXR0cmlidXRlLXNldD4KKworCisgIDwhLS0gZ2VuZXJhbCBzZXR0aW5ncyAtLT4KKworICA8eHNsOnBhcmFtIG5hbWU9ImZvcDEuZXh0ZW5zaW9ucyIgc2VsZWN0PSIxIj48L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJwYXBlci50eXBlIiBzZWxlY3Q9IidBNCciPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9ImJvZHkuZm9udC5mYW1pbHkiIHNlbGVjdD0iJ3ZlcmFzYW5zJyI+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0idGl0bGUuZm9udC5mYW1pbHkiIHNlbGVjdD0iJ3ZlcmFzYW5zJyI+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0ibW9ub3NwYWNlLmZvbnQuZmFtaWx5IiBzZWxlY3Q9Iid2ZXJhbW9ubyciPjwveHNsOnBhcmFtPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3Bva3ktcmVmLW1hbnVhbC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcG9reS1yZWYtbWFudWFsLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDg1ZWRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3Bva3ktcmVmLW1hbnVhbC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3Bva3kuc3ZnIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3Bva3kuc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZWE1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcG9reS5zdmcKQEAgLTAsMCArMSwxNjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPCEtLSBDcmVhdGVkIHdpdGggSW5rc2NhcGUgKGh0dHA6Ly93d3cuaW5rc2NhcGUub3JnLykgLS0+Cis8c3ZnCisgICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgorICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgorICAgdmVyc2lvbj0iMS4wIgorICAgd2lkdGg9IjE1OC41NjA3NiIKKyAgIGhlaWdodD0iNzkuMjg0NDI0IgorICAgdmlld0JveD0iLTQwLjk4MSAtOTIuNTkyIDMwMCAzMDAiCisgICBpZD0ic3ZnMiIKKyAgIHhtbDpzcGFjZT0icHJlc2VydmUiPgorPGRlZnMKKyAgIGlkPSJkZWZzNCI+Cis8L2RlZnM+Cis8cGF0aAorICAgZD0iTSAtMzYuNTg1Mzc5LDU0LjQxMjU3NiBMIC0zNi41ODUzNzksNTQuNDIxMzA1IEwgLTM2LjU4MjQ2OSw1NC40MjEzMDUgTCAtMzYuNTgyNDY5LDU0LjI0MzgyOSBDIC0zNi41Nzk1Niw1NC4zMDIwMTggLTM2LjU4NTM3OSw1NC4zNTcyOTcgLTM2LjU4NTM3OSw1NC40MTI1NzYgeiAiCisgICBzdHlsZT0iZmlsbDojNmFjN2JkIgorICAgaWQ9InBhdGg2IiAvPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9Imc4Ij4KKwk8ZworICAgaWQ9ImcxMCI+CisJCTxwYXRoCisgICBkPSJNIDI0LjQ4MiwyMy45OTggTCAyNC40ODIsMjMuOTk1IEMgMTAuOTYxLDIzLjk5NCAwLDM0Ljk1NSAwLDQ4LjQ3NiBMIDAuMDAxLDQ4LjQ3OSBMIDAuMDAxLDQ4LjQ4MiBDIDAuMDAzLDYyLjAwMSAxMC45NjIsNzIuOTYgMjQuNDgyLDcyLjk2IEwgMjQuNDgyLDcyLjk2IEwgMCw3Mi45NiBMIDAsOTcuNDQyIEwgMC4wMDMsOTcuNDQyIEMgMTMuNTIzLDk3LjQ0IDI0LjQ4Miw4Ni40OCAyNC40ODIsNzIuOTYxIEwgMjQuNDg1LDcyLjk2MSBDIDM4LjAwNSw3Mi45NTkgNDguOTYzLDYyIDQ4Ljk2Myw0OC40NzkgTCA0OC45NjMsNDguNDc2IEMgNDguOTYyLDM0Ljk1NyAzOC4wMDEsMjMuOTk4IDI0LjQ4MiwyMy45OTggeiBNIDI0LjQ4Miw1MC45MjggQyAyMy4xMyw1MC45MjggMjIuMDM0LDQ5LjgzMiAyMi4wMzQsNDguNDggQyAyMi4wMzQsNDcuMTI4IDIzLjEzLDQ2LjAzMiAyNC40ODIsNDYuMDMyIEMgMjUuODM0LDQ2LjAzMiAyNi45Myw0Ny4xMjggMjYuOTMsNDguNDggQyAyNi45Myw0OS44MzIgMjUuODM0LDUwLjkyOCAyNC40ODIsNTAuOTI4IHogIgorICAgc3R5bGU9ImZpbGw6I2VmNDEyYSIKKyAgIGlkPSJwYXRoMTIiIC8+CisJPC9nPgorPC9nPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9ImcxNCI+CisJPGcKKyAgIGlkPSJnMTYiPgorCQk8cGF0aAorICAgZD0iTSAxMTkuOTYsNDguODQyIEMgMTIwLjAyNCw0Ny41NDggMTIxLjA4Niw0Ni41MTYgMTIyLjM5Nyw0Ni41MTYgQyAxMjMuNzA3LDQ2LjUxNiAxMjQuNzY4LDQ3LjU0OCAxMjQuODMzLDQ4Ljg0MyBDIDEzNy4yMTEsNDcuNjIgMTQ2Ljg3OSwzNy4xODEgMTQ2Ljg3OSwyNC40ODMgTCAxMjIuMzk3LDI0LjQ4MyBDIDEyMi4zOTYsMTAuOTYxIDExMS40MzUsMCA5Ny45MTUsMCBMIDk3LjkxNSwyNC40ODUgQyA5Ny45MTcsMzcuMTgzIDEwNy41ODQsNDcuNjE5IDExOS45Niw0OC44NDIgeiBNIDEyNC44MzMsNDkuMDg0IEMgMTI0Ljc2OSw1MC4zNzkgMTIzLjcwNyw1MS40MTEgMTIyLjM5Nyw1MS40MTEgTCAxMjIuMzk2LDUxLjQxMSBMIDEyMi4zOTYsNzMuNDQ0IEwgMTQ2Ljg3OCw3My40NDQgTCAxNDYuODc4LDczLjQ0MSBDIDE0Ni44NzYsNjAuNzQ1IDEzNy4yMDgsNTAuMzA4IDEyNC44MzMsNDkuMDg0IHogTSAxMTkuOTQ5LDQ4Ljk2MyBMIDk3LjkxNSw0OC45NjMgTCA5Ny45MTUsNzMuNDQyIEwgOTcuOTE1LDczLjQ0MiBDIDExMC42MTMsNzMuNDQyIDEyMS4wNTIsNjMuNzc0IDEyMi4yNzUsNTEuMzk5IEMgMTIwLjk4MSw1MS4zMzQgMTE5Ljk0OSw1MC4yNzQgMTE5Ljk0OSw0OC45NjMgeiAiCisgICBzdHlsZT0iZmlsbDojYTljNTQyIgorICAgaWQ9InBhdGgxOCIgLz4KKwk8L2c+Cis8L2c+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzIwIj4KKwk8ZworICAgaWQ9ImcyMiI+CisJCTxwYXRoCisgICBkPSJNIDE2OC45MTIsNDguOTY3IEMgMTY4LjkxMiw0Ny42NTYgMTY5Ljk0NSw0Ni41OTYgMTcxLjI0LDQ2LjUzMSBDIDE3MC4wMTgsMzQuMTUyIDE1OS41NzksMjQuNDgyIDE0Ni44NzksMjQuNDgyIEwgMTQ2Ljg3OSw0OC45NjMgQyAxNDYuODc5LDYyLjQ4NCAxNTcuODQsNzMuNDQ0IDE3MS4zNjEsNzMuNDQ0IEwgMTcxLjM2MSw1MS40MTQgQyAxNzAuMDA3LDUxLjQxNSAxNjguOTEyLDUwLjMxOSAxNjguOTEyLDQ4Ljk2NyB6IE0gMTk1Ljg0MSw0OC45NzggQyAxOTUuODQxLDQ4Ljk3MyAxOTUuODQyLDQ4Ljk2OSAxOTUuODQyLDQ4Ljk2NCBMIDE5NS44NDIsMjQuNDgyIEwgMTk1LjgzOCwyNC40ODIgQyAxODMuMTQsMjQuNDg0IDE3Mi43MDIsMzQuMTU0IDE3MS40ODIsNDYuNTMxIEMgMTcyLjc3Niw0Ni41OTUgMTczLjgwOCw0Ny42NTYgMTczLjgwOCw0OC45NjcgQyAxNzMuODA4LDUwLjI3OCAxNzIuNzc2LDUxLjMzOSAxNzEuNDgxLDUxLjQwMyBDIDE3Mi42NzksNjMuNTkgMTgyLjgxNCw3My4xNDYgMTk1LjI0NCw3My40NDUgTCAxNzEuMzYxLDczLjQ0NSBMIDE3MS4zNjEsOTcuOTI3IEwgMTcxLjM2NCw5Ny45MjcgQyAxODQuODc5LDk3LjkyNSAxOTUuODM0LDg2Ljk3MyAxOTUuODQyLDczLjQ2IEwgMTk1Ljg0NCw3My40NiBMIDE5NS44NDQsNDguOTc5IEwgMTk1Ljg0MSw0OC45NzggeiBNIDE5NS44MzIsNDguOTY0IEwgMTk1Ljg0Miw0OC45NjQgTCAxOTUuODQyLDQ4Ljk3OCBMIDE5NS44MzIsNDguOTY0IHogIgorICAgc3R5bGU9ImZpbGw6I2Y5Yzc1OSIKKyAgIGlkPSJwYXRoMjQiIC8+CisJPC9nPgorPC9nPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9ImcyNiI+CisJPGcKKyAgIGlkPSJnMjgiPgorCQk8cGF0aAorICAgZD0iTSA3MC45OTQsNDguNDc5IEwgNDguOTYyLDQ4LjQ3OSBMIDQ4Ljk2Miw0OC40ODEgTCA3MC45OTUsNDguNDgxIEMgNzAuOTk1LDQ4LjQ4MSA3MC45OTQsNDguNDggNzAuOTk0LDQ4LjQ3OSB6IE0gNzMuNDQsMjQuMDAxIEwgNzMuNDM3LDI0LjAwMSBMIDczLjQzNyw0Ni4wMzIgQyA3My40MzksNDYuMDMyIDczLjQ0LDQ2LjAzMiA3My40NDIsNDYuMDMyIEMgNzQuNzk0LDQ2LjAzMiA3NS44OSw0Ny4xMjggNzUuODksNDguNDggQyA3NS44OSw0OS44MzIgNzQuNzk0LDUwLjkyOCA3My40NDIsNTAuOTI4IEMgNzIuMDkxLDUwLjkyOCA3MC45OTYsNDkuODM0IDcwLjk5NCw0OC40ODMgTCA0OC45NTgsNDguNDgzIEwgNDguOTU4LDQ4LjQ4NiBDIDQ4Ljk2LDYyLjAwNSA1OS45MTksNzIuOTY0IDczLjQzNyw3Mi45NjQgQyA4Ni45NTUsNzIuOTY0IDk3LjkxNCw2Mi4wMDUgOTcuOTE2LDQ4LjQ4NiBMIDk3LjkxNiw0OC40ODMgQyA5Ny45MTYsMzQuOTYzIDg2Ljk1OCwyNC4wMDMgNzMuNDQsMjQuMDAxIHogIgorICAgc3R5bGU9ImZpbGw6IzZhYzdiZCIKKyAgIGlkPSJwYXRoMzAiIC8+CisJPC9nPgorPC9nPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9ImczMiI+CisJPGcKKyAgIGlkPSJnMzQiPgorCQk8cGF0aAorICAgZD0iTSAyNC40ODIsMjMuOTk4IEwgMjQuNDgyLDIzLjk5NSBDIDEwLjk2MSwyMy45OTQgMCwzNC45NTUgMCw0OC40NzYgTCAyMi4wMzQsNDguNDc2IEMgMjIuMDM2LDQ3LjEyNSAyMy4xMzEsNDYuMDMxIDI0LjQ4Miw0Ni4wMzEgQyAyNS44MzQsNDYuMDMxIDI2LjkzLDQ3LjEyNyAyNi45Myw0OC40NzkgQyAyNi45Myw0OS44MzEgMjUuODM0LDUwLjkyNyAyNC40ODIsNTAuOTI3IEwgMjQuNDgyLDcyLjkzNyBDIDI0LjQ2OSw1OS40MjcgMTMuNTE0LDQ4LjQ3OSAwLDQ4LjQ3OSBMIDAsNzIuOTYgTCAyNC40ODEsNzIuOTYgTCAyNC40ODEsNzIuOTYgTCAwLDcyLjk2IEwgMCw5Ny40NDIgTCAwLjAwMyw5Ny40NDIgQyAxMy41MjMsOTcuNDQgMjQuNDgyLDg2LjQ4IDI0LjQ4Miw3Mi45NjEgTCAyNC40ODUsNzIuOTYxIEMgMzguMDA1LDcyLjk1OSA0OC45NjMsNjIgNDguOTYzLDQ4LjQ3OSBMIDQ4Ljk2Myw0OC40NzYgQyA0OC45NjIsMzQuOTU3IDM4LjAwMSwyMy45OTggMjQuNDgyLDIzLjk5OCB6ICIKKyAgIHN0eWxlPSJmaWxsOiNlZjQxMmEiCisgICBpZD0icGF0aDM2IiAvPgorCTwvZz4KKzwvZz4KKzxnCisgICB0cmFuc2Zvcm09Im1hdHJpeCgyLjkwOTQxOTMsMCwwLDIuOTA5NDE5MywtMTc5LjAzMDU1LC04Ni42MjQ0MzUpIgorICAgc3R5bGU9Im9wYWNpdHk6MC42NSIKKyAgIGlkPSJnMzgiPgorCTxnCisgICBpZD0iZzQwIj4KKwkJPHBhdGgKKyAgIGQ9Ik0gMTIyLjM5Nyw0Ni41MTYgQyAxMjMuNzA3LDQ2LjUxNiAxMjQuNzY4LDQ3LjU0OCAxMjQuODMzLDQ4Ljg0MyBDIDEzNy4yMTEsNDcuNjIgMTQ2Ljg3OSwzNy4xODEgMTQ2Ljg3OSwyNC40ODMgTCAxMjIuMzk3LDI0LjQ4MyBMIDEyMi4zOTcsNDYuNTE2IEwgMTIyLjM5Nyw0Ni41MTYgeiBNIDk3LjkxNSwwIEwgOTcuOTE1LDI0LjQ4MiBMIDEyMi4zOTYsMjQuNDgyIEMgMTIyLjM5NiwxMC45NjEgMTExLjQzNSwwIDk3LjkxNSwwIHogTSAxMjIuMjc1LDQ2LjUyOCBDIDEyMS4wNTIsMzQuMTUxIDExMC42MTMsMjQuNDgyIDk3LjkxNCwyNC40ODIgTCA5Ny45MTQsNDguOTY0IEwgOTcuOTE0LDQ4Ljk2NCBMIDk3LjkxNCw3My40NDMgTCA5Ny45MTQsNzMuNDQzIEMgMTEwLjYxMiw3My40NDMgMTIxLjA1MSw2My43NzUgMTIyLjI3NCw1MS40IEMgMTIwLjk4LDUxLjMzNSAxMTkuOTQ4LDUwLjI3NSAxMTkuOTQ4LDQ4Ljk2NCBDIDExOS45NDksNDcuNjUzIDEyMC45OCw0Ni41OTMgMTIyLjI3NSw0Ni41MjggeiBNIDEyNC44MzMsNDkuMDg0IEMgMTI0Ljc2OSw1MC4zNzkgMTIzLjcwNyw1MS40MTEgMTIyLjM5Nyw1MS40MTEgTCAxMjIuMzk2LDUxLjQxMSBMIDEyMi4zOTYsNzMuNDQ0IEwgMTQ2Ljg3OCw3My40NDQgTCAxNDYuODc4LDczLjQ0MSBDIDE0Ni44NzYsNjAuNzQ1IDEzNy4yMDgsNTAuMzA4IDEyNC44MzMsNDkuMDg0IHogIgorICAgc3R5bGU9ImZpbGw6I2E5YzU0MiIKKyAgIGlkPSJwYXRoNDIiIC8+CisJPC9nPgorPC9nPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9Imc0NCI+CisJPGcKKyAgIGlkPSJnNDYiPgorCQk8cGF0aAorICAgZD0iTSAxNzMuNzk1LDQ5LjEgQyAxNzMuNzI0LDUwLjM4OSAxNzIuNjY2LDUxLjQxNSAxNzEuMzYsNTEuNDE1IEMgMTcwLjAwNiw1MS40MTUgMTY4LjkxMSw1MC4zMTkgMTY4LjkxMSw0OC45NjcgQyAxNjguOTExLDQ3LjY1NiAxNjkuOTQ0LDQ2LjU5NiAxNzEuMjM5LDQ2LjUzMSBDIDE3MC4wMTcsMzQuMTUyIDE1OS41NzgsMjQuNDgyIDE0Ni44NzgsMjQuNDgyIEwgMTQ2Ljg3OCw0OC45NjMgQyAxNDYuODc4LDYyLjQ4NCAxNTcuODM5LDczLjQ0NCAxNzEuMzYsNzMuNDQ0IEwgMTcxLjM2LDk3LjkyNiBMIDE3MS4zNjMsOTcuOTI2IEMgMTg0Ljg3OCw5Ny45MjQgMTk1LjgzMyw4Ni45NzIgMTk1Ljg0MSw3My40NTkgTCAxOTUuODQyLDczLjQ1OSBMIDE5NS44NDIsNzMuNDQzIEwgMTk1Ljg0MSw3My40NDMgQyAxOTUuODMzLDYwLjc1MyAxODYuMTY3LDUwLjMyMiAxNzMuNzk1LDQ5LjEgeiBNIDE5NS44MzgsMjQuNDgyIEMgMTgzLjE0LDI0LjQ4NCAxNzIuNzAyLDM0LjE1NCAxNzEuNDgyLDQ2LjUzMSBDIDE3Mi43NzUsNDYuNTk1IDE3My44MDYsNDcuNjU1IDE3My44MDgsNDguOTY0IEwgMTk1Ljg0MSw0OC45NjQgTCAxOTUuODQxLDQ4Ljk3OSBDIDE5NS44NDEsNDguOTc0IDE5NS44NDIsNDguOTY5IDE5NS44NDIsNDguOTY0IEwgMTk1Ljg0MiwyNC40ODIgTCAxOTUuODM4LDI0LjQ4MiB6ICIKKyAgIHN0eWxlPSJmaWxsOiNmOWM3NTkiCisgICBpZD0icGF0aDQ4IiAvPgorCTwvZz4KKzwvZz4KKzxnCisgICB0cmFuc2Zvcm09Im1hdHJpeCgyLjkwOTQxOTMsMCwwLDIuOTA5NDE5MywtMTc5LjAzMDU1LC04Ni42MjQ0MzUpIgorICAgc3R5bGU9Im9wYWNpdHk6MC42NSIKKyAgIGlkPSJnNTAiPgorCTxnCisgICBpZD0iZzUyIj4KKwkJPHBhdGgKKyAgIGQ9Ik0gNzEuMDA3LDQ4LjM0NyBDIDcxLjA3NSw0Ny4xMDUgNzIuMDYyLDQ2LjExNyA3My4zMDQsNDYuMDQ2IEMgNzIuNTA5LDM4LjAyIDY3Ljg1LDMxLjEzMyA2MS4yMDEsMjcuMjg0IEMgNTcuNjAxLDI1LjIgNTMuNDI0LDI0IDQ4Ljk2NSwyNCBMIDQ4Ljk2MiwyNCBDIDQ4Ljk2MiwyOC40NiA1MC4xNjEsMzIuNjM4IDUyLjI0NSwzNi4yNCBDIDU2LjA5Myw0Mi44OTEgNjIuOTgsNDcuNTUyIDcxLjAwNyw0OC4zNDcgeiBNIDQ4Ljk2Miw0OC40MTggQyA0OC45NjIsNDguNDM4IDQ4Ljk2MSw0OC40NTYgNDguOTYxLDQ4LjQ3NiBMIDQ4Ljk2MSw0OC40NzkgTCA0OC45NjIsNDguNDc5IEwgNDguOTYyLDQ4LjQxOCB6IE0gNzAuOTk1LDQ4LjQ4MiBDIDcwLjk5NSw0OC40ODEgNzAuOTk1LDQ4LjQ4MSA3MC45OTUsNDguNDggTCA0OC45NjIsNDguNDggTCA0OC45NjIsNDguNDgyIEwgNzAuOTk1LDQ4LjQ4MiB6IE0gNzMuNDQsMjQuMDAxIEwgNzMuNDM3LDI0LjAwMSBMIDczLjQzNyw0Ni4wMzIgQyA3My40MzksNDYuMDMyIDczLjQ0LDQ2LjAzMiA3My40NDIsNDYuMDMyIEMgNzQuNzk0LDQ2LjAzMiA3NS44OSw0Ny4xMjggNzUuODksNDguNDggQyA3NS44OSw0OS44MzIgNzQuNzk0LDUwLjkyOCA3My40NDIsNTAuOTI4IEMgNzIuMDkxLDUwLjkyOCA3MC45OTYsNDkuODM0IDcwLjk5NCw0OC40ODMgTCA0OC45NTgsNDguNDgzIEwgNDguOTU4LDQ4LjQ4NiBDIDQ4Ljk2LDYyLjAwNSA1OS45MTksNzIuOTY0IDczLjQzNyw3Mi45NjQgQyA4Ni45NTUsNzIuOTY0IDk3LjkxNCw2Mi4wMDUgOTcuOTE2LDQ4LjQ4NiBMIDk3LjkxNiw0OC40ODMgQyA5Ny45MTYsMzQuOTYzIDg2Ljk1OCwyNC4wMDMgNzMuNDQsMjQuMDAxIHogIgorICAgc3R5bGU9ImZpbGw6IzZhYzdiZCIKKyAgIGlkPSJwYXRoNTQiIC8+CisJPC9nPgorPC9nPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9Imc1NiI+CisJPGcKKyAgIGlkPSJnNTgiPgorCQk8cGF0aAorICAgZD0iTSAyNC40ODIsMjMuOTk4IEwgMjQuNDgyLDIzLjk5NSBDIDEwLjk2MSwyMy45OTQgMCwzNC45NTUgMCw0OC40NzYgTCAyMi4wMzQsNDguNDc2IEMgMjIuMDM2LDQ3LjEyNSAyMy4xMzEsNDYuMDMxIDI0LjQ4Miw0Ni4wMzEgQyAyNS44MzQsNDYuMDMxIDI2LjkzLDQ3LjEyNyAyNi45Myw0OC40NzkgQyAyNi45Myw0OS44MzEgMjUuODM0LDUwLjkyNyAyNC40ODIsNTAuOTI3IEMgMjMuMTcxLDUwLjkyNyAyMi4xMSw0OS44OTQgMjIuMDQ2LDQ4LjYgQyA5LjY2OSw0OS44MjQgMC4wMDEsNjAuMjYyIDAuMDAxLDcyLjk2IEwgMCw3Mi45NiBMIDAsOTcuNDQyIEwgMC4wMDMsOTcuNDQyIEMgMTMuNTIzLDk3LjQ0IDI0LjQ4Miw4Ni40OCAyNC40ODIsNzIuOTYxIEwgMjQuNDg1LDcyLjk2MSBDIDM4LjAwNSw3Mi45NTkgNDguOTYzLDYyIDQ4Ljk2Myw0OC40NzkgTCA0OC45NjMsNDguNDc2IEMgNDguOTYyLDM0Ljk1NyAzOC4wMDEsMjMuOTk4IDI0LjQ4MiwyMy45OTggeiAiCisgICBzdHlsZT0iZmlsbDojZWY0MTJhIgorICAgaWQ9InBhdGg2MCIgLz4KKwk8L2c+Cis8L2c+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzYyIj4KKwk8ZworICAgaWQ9Imc2NCI+CisJCTxwYXRoCisgICBkPSJNIDExOS45NDksNDguOTYzIEMgMTE5Ljk0OSw0Ny42MTEgMTIxLjA0NSw0Ni41MTUgMTIyLjM5Nyw0Ni41MTUgQyAxMjMuNzA3LDQ2LjUxNSAxMjQuNzY4LDQ3LjU0NyAxMjQuODMzLDQ4Ljg0MiBDIDEzNy4yMTEsNDcuNjE5IDE0Ni44NzksMzcuMTggMTQ2Ljg3OSwyNC40ODIgTCAxMjIuMzk3LDI0LjQ4MiBDIDEyMi4zOTYsMTAuOTYxIDExMS40MzUsMCA5Ny45MTUsMCBMIDk3LjkxNSwyNC40ODIgTCAxMjIuMzk0LDI0LjQ4MiBDIDEwOC44NzQsMjQuNDg0IDk3LjkxNiwzNS40NDQgOTcuOTE2LDQ4Ljk2MyBMIDk3LjkxNiw0OC45NjMgTCA5Ny45MTYsNzMuNDQyIEwgOTcuOTE2LDczLjQ0MiBDIDExMC42MTQsNzMuNDQyIDEyMS4wNTMsNjMuNzc0IDEyMi4yNzYsNTEuMzk5IEMgMTIwLjk4MSw1MS4zMzQgMTE5Ljk0OSw1MC4yNzQgMTE5Ljk0OSw0OC45NjMgeiBNIDEyNC44MzMsNDkuMDg0IEMgMTI0Ljc2OSw1MC4zNzkgMTIzLjcwNyw1MS40MTEgMTIyLjM5Nyw1MS40MTEgTCAxMjIuMzk2LDUxLjQxMSBMIDEyMi4zOTYsNzMuNDQ0IEwgMTQ2Ljg3OCw3My40NDQgTCAxNDYuODc4LDczLjQ0MSBDIDE0Ni44NzYsNjAuNzQ1IDEzNy4yMDgsNTAuMzA4IDEyNC44MzMsNDkuMDg0IHogIgorICAgc3R5bGU9ImZpbGw6I2E5YzU0MiIKKyAgIGlkPSJwYXRoNjYiIC8+CisJPC9nPgorPC9nPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9Imc2OCI+CisJPGcKKyAgIGlkPSJnNzAiPgorCQk8cGF0aAorICAgZD0iTSAxOTUuODQxLDQ4Ljk3OSBMIDE5NS44MzUsNDguOTY0IEwgMTk1Ljg0MSw0OC45NjQgTCAxOTUuODQxLDQ4Ljk3OSBDIDE5NS44NDEsNDguOTc0IDE5NS44NDIsNDguOTY5IDE5NS44NDIsNDguOTY0IEwgMTk1Ljg0MiwyNC40ODIgTCAxOTUuODM4LDI0LjQ4MiBDIDE4My4xNCwyNC40ODQgMTcyLjcwMiwzNC4xNTQgMTcxLjQ4Miw0Ni41MzEgQyAxNzIuNzc2LDQ2LjU5NSAxNzMuODA4LDQ3LjY1NiAxNzMuODA4LDQ4Ljk2NyBDIDE3My44MDgsNTAuMzE5IDE3Mi43MTIsNTEuNDE1IDE3MS4zNjEsNTEuNDE1IEMgMTcwLjAwNyw1MS40MTUgMTY4LjkxMiw1MC4zMTkgMTY4LjkxMiw0OC45NjcgQyAxNjguOTEyLDQ3LjY1NiAxNjkuOTQ1LDQ2LjU5NiAxNzEuMjQsNDYuNTMxIEMgMTcwLjAxOCwzNC4xNTIgMTU5LjU3OSwyNC40ODIgMTQ2Ljg3OSwyNC40ODIgTCAxNDYuODc5LDQ4Ljk2MyBDIDE0Ni44NzksNjIuNDg0IDE1Ny44NCw3My40NDQgMTcxLjM2MSw3My40NDQgTCAxNzEuMzYxLDk3LjkyNiBMIDE3MS4zNjQsOTcuOTI2IEMgMTg0Ljg4Myw5Ny45MjQgMTk1Ljg0Myw4Ni45NjMgMTk1Ljg0Myw3My40NDQgTCAxNzEuOTU5LDczLjQ0NCBDIDE4NS4yMDMsNzMuMTI2IDE5NS44NDEsNjIuMjk5IDE5NS44NDEsNDguOTc5IHogIgorICAgc3R5bGU9ImZpbGw6I2Y5Yzc1OSIKKyAgIGlkPSJwYXRoNzIiIC8+CisJPC9nPgorPC9nPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9Imc3NCI+CisJPGcKKyAgIGlkPSJnNzYiPgorCQk8cGF0aAorICAgZD0iTSA3My40NCwyNC4wMDEgTCA3My40MzcsMjQuMDAxIEMgNTkuOTE5LDI0LjAwMyA0OC45NiwzNC45NTkgNDguOTU4LDQ4LjQ3NiBMIDQ4Ljk1OCw0OC40NzkgTCA0OC45NjEsNDguNDc5IEwgNDguOTYxLDQ4LjQ4MSBMIDQ4Ljk1Nyw0OC40ODIgTCA0OC45NTcsNDguNDg1IEMgNDguOTU5LDYyLjAwNCA1OS45MTgsNzIuOTYzIDczLjQzNiw3Mi45NjMgQyA4Ni45NTQsNzIuOTYzIDk3LjkxMyw2Mi4wMDQgOTcuOTE1LDQ4LjQ4NSBMIDk3LjkxNSw0OC40ODIgQyA5Ny45MTYsMzQuOTYzIDg2Ljk1OCwyNC4wMDMgNzMuNDQsMjQuMDAxIHogTSA3My40NDIsNTAuOTI4IEMgNzIuMDksNTAuOTI4IDcwLjk5NCw0OS44MzIgNzAuOTk0LDQ4LjQ4IEMgNzAuOTk0LDQ3LjEyOCA3Mi4wOSw0Ni4wMzIgNzMuNDQyLDQ2LjAzMiBDIDc0Ljc5NCw0Ni4wMzIgNzUuODksNDcuMTI4IDc1Ljg5LDQ4LjQ4IEMgNzUuODksNDkuODMyIDc0Ljc5NCw1MC45MjggNzMuNDQyLDUwLjkyOCB6ICIKKyAgIHN0eWxlPSJmaWxsOiM2YWM3YmQiCisgICBpZD0icGF0aDc4IiAvPgorCTwvZz4KKzwvZz4KKzwvc3ZnPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9xYS1jb2RlLXBlcm1hbGlua3MueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3FhLWNvZGUtcGVybWFsaW5rcy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwOTA5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9xYS1jb2RlLXBlcm1hbGlua3MueHNsCkBAIC0wLDAgKzEsMjMgQEAKKzwhLS0NCitUaGlzIFhTTCBzaGVldCBlbmFibGVzIGNyZWF0aW9uIG9mIHBlcm1hbGlua3MgZm9yIDxwYXJhPjxjb2RlPg0KK2NvbnN0cnVjdHMuICBSaWdodCBub3csIHRoaXMgY29uc3RydWN0IG9jY3VycyBvbmx5IGluIHRoZSByZWYtbWFudWFsDQorYm9vaydzIHFhIGlzc3VlcyBhbmQgd2FybmluZ3MgY2hhcHRlci4gIEhvd2V2ZXIsIGlmIHRoZSBjb25zdHJ1Y3QNCit3ZXJlIHRvIGFwcGVhciBhbnl3aGVyZSBpbiB0aGF0IHJlZi1tYW51YWwsIGEgcGVybWFsaW5rIHdvdWxkIGJlDQorZ2VuZXJhdGVkLiAgSSBkb24ndCBmb3Jlc2VlIGFueSA8cGFyYT48Y29kZT4gY29uc3RydWN0cyBiZWluZyB1c2VkDQoraW4gdGhlIGZ1dHVyZSBidXQgaWYgdGhleSBhcmUgdGhlbiBhIHBlcm1hbGluayB3aXRoIGEgZ2VuZXJpY2FsbHkNCitudW1iZXJlZCBwZXJtYWxpbmsgd291bGQgYmUgZ2VuZXJhdGVkLg0KKy0tPg0KKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiDQorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSINCisgIHhtbG5zOmQ9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIg0KKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KKw0KKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icGFyYS9jb2RlIj4NCisgICAgPHhzbDphcHBseS1pbXBvcnRzLz4NCisgICAgPHhzbDppZiB0ZXN0PSIkZ2VuZXJhdGUucGVybWFsaW5rICE9IDAiPg0KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwZXJtYWxpbmsiPg0KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iLi4iLz4NCisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPg0KKyAgICA8L3hzbDppZj4NCisgIDwveHNsOnRlbXBsYXRlPg0KKzwveHNsOnN0eWxlc2hlZXQ+DQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNmZmOWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wKQEAgLTAsMCArMSw1NSBAQAorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zOmQ9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9ImQiPgorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJzZWN0aW9uIgorICAgICAgc2VsZWN0PSIoYW5jZXN0b3I6OnNlY3Rpb24gfAorICAgICAgICAgICAgICAgYW5jZXN0b3I6OnNpbXBsZXNlY3R8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2VjdDF8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2VjdDJ8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2VjdDN8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2VjdDR8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2VjdDUpW2xhc3QoKV0iLz4KKworICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVuZGVyYXMiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkc2VjdGlvbi9AcmVuZGVyYXMgPSAnc2VjdDEnIj4xPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRzZWN0aW9uL0ByZW5kZXJhcyA9ICdzZWN0MiciPjI8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iJHNlY3Rpb24vQHJlbmRlcmFzID0gJ3NlY3QzJyI+MzwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkc2VjdGlvbi9AcmVuZGVyYXMgPSAnc2VjdDQnIj40PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRzZWN0aW9uL0ByZW5kZXJhcyA9ICdzZWN0NSciPjU8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJyciLz48L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisKKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImxldmVsIj4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iJHJlbmRlcmFzICE9ICcnIj4KKyAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJlbmRlcmFzIi8+CisgICAgICAgIDwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPgorICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLmxldmVsIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRzZWN0aW9uIi8+CisgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorCisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Rpb24uaGVhZGluZyI+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ic2VjdGlvbiIgc2VsZWN0PSIkc2VjdGlvbiIvPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImxldmVsIiBzZWxlY3Q9IiRsZXZlbCIvPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InRpdGxlIj4KKyAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIkc2VjdGlvbiIgbW9kZT0ib2JqZWN0LnRpdGxlLm1hcmt1cCI+CisgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImFsbG93LWFuY2hvcnMiIHNlbGVjdD0iMSIvPgorICAgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgICAgIDx4c2w6aWYgdGVzdD0iJGxldmVsICZndDsgMCI+CisgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBlcm1hbGluayI+CisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIkc2VjdGlvbiIvPgorICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgIDwveHNsOmlmPgorICAgICAgPC94c2w6d2l0aC1wYXJhbT4KKyAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvdGl0bGVwYWdlLnRlbXBsYXRlcy54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvdGl0bGVwYWdlLnRlbXBsYXRlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUzZjE0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS90aXRsZXBhZ2UudGVtcGxhdGVzLnhtbApAQCAtMCwwICsxLDEyMjcgQEAKKzwhRE9DVFlQRSB0OnRlbXBsYXRlcyBbCis8IUVOVElUWSBoc2l6ZTAgIjEwcHQiPgorPCFFTlRJVFkgaHNpemUxICIxMnB0Ij4KKzwhRU5USVRZIGhzaXplMiAiMTQuNHB0Ij4KKzwhRU5USVRZIGhzaXplMyAiMTcuMjhwdCI+Cis8IUVOVElUWSBoc2l6ZTQgIjIwLjczNnB0Ij4KKzwhRU5USVRZIGhzaXplNSAiMjQuODgzMnB0Ij4KKzwhRU5USVRZIGhzaXplMHNwYWNlICI3LjVwdCI+IDwhLS0gMC43NSAqIGhzaXplMCAtLT4KKzwhRU5USVRZIGhzaXplMXNwYWNlICI5cHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTEgLS0+Cis8IUVOVElUWSBoc2l6ZTJzcGFjZSAiMTAuOHB0Ij4gPCEtLSAwLjc1ICogaHNpemUyIC0tPgorPCFFTlRJVFkgaHNpemUzc3BhY2UgIjEyLjk2cHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTMgLS0+Cis8IUVOVElUWSBoc2l6ZTRzcGFjZSAiMTUuNTUycHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTQgLS0+Cis8IUVOVElUWSBoc2l6ZTVzcGFjZSAiMTguNjYyNHB0Ij4gPCEtLSAwLjc1ICogaHNpemU1IC0tPgorXT4KKzx0OnRlbXBsYXRlcyB4bWxuczp0PSJodHRwOi8vbndhbHNoLmNvbS9kb2Nib29rL3hzbC90ZW1wbGF0ZS8xLjAiCisJICAgICB4bWxuczpwYXJhbT0iaHR0cDovL253YWxzaC5jb20vZG9jYm9vay94c2wvdGVtcGxhdGUvMS4wL3BhcmFtIgorICAgICAgICAgICAgIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiCisgICAgICAgICAgICAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPgorCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICRJZDogdGl0bGVwYWdlLnRlbXBsYXRlcy54bWwsdiAxLjIzIDIwMDMvMTIvMTYgMDA6MzA6NDkgYm9ic3RheXRvbiBFeHAgJAorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBEb2NCb29rIFhTTCBTdHlsZXNoZWV0IGRpc3RyaWJ1dGlvbi4KKyAgICAgU2VlIC4uL1JFQURNRSBvciBodHRwOi8vZG9jYm9vay5zZi5uZXQvIGZvciBjb3B5cmlnaHQKKyAgICAgYW5kIG90aGVyIGluZm9ybWF0aW9uLgorCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJhcnRpY2xlIiB0OndyYXBwZXI9ImZvOmJsb2NrIgorICAgICAgICAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ij4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIgorICAgICAgICAgICAgIHRleHQtYWxpZ249ImNlbnRlciI+CisKKyAgICA8bWVkaWFvYmplY3QvPgkgICAgIAorCisgICAgPHRpdGxlIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjphcnRpY2xlWzFdIgorCSAgIGtlZXAtd2l0aC1uZXh0PSJhbHdheXMiCisJICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICBmb250LXdlaWdodD0iYm9sZCIvPgorCisgICAgPHN1YnRpdGxlIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmFydGljbGVbMV0iCisJICAga2VlcC13aXRoLW5leHQ9ImFsd2F5cyIKKwkgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgIGZvbnQtd2VpZ2h0PSJib2xkIgorICAgICAgIHNwYWNlLWFmdGVyPSIwLjhlbSIvPgorCisgICAgPGNvcnBhdXRob3Igc3BhY2UtYmVmb3JlPSIwLjVlbSIKKyAgICAgICAgICAgICAgICBmb250LXNpemU9IiZoc2l6ZTM7Ii8+CisgICAgPGF1dGhvcmdyb3VwIHNwYWNlLWJlZm9yZT0iMC41ZW0iCisgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiLz4KKyAgICA8YXV0aG9yIHNwYWNlLWJlZm9yZT0iMC41ZW0iCisgICAgICAgICAgICBmb250LXNpemU9IiZoc2l6ZTI7IiAKKyAgICAgICAgICAgIHNwYWNlLWFmdGVyPSIwLjhlbSIvPgorCisgICAgPGVtYWlsIGZvbnQtc2l6ZT0iJmhzaXplMjsiLz4KKworICAgIDxvdGhlcmNyZWRpdCBzcGFjZS1iZWZvcmU9IjAuNWVtIi8+CisgICAgPHJlbGVhc2VpbmZvIHNwYWNlLWJlZm9yZT0iMC41ZW0iLz4KKyAgICA8Y29weXJpZ2h0IHNwYWNlLWJlZm9yZT0iMC41ZW0iLz4KKyAgICA8bGVnYWxub3RpY2UgdGV4dC1hbGlnbj0ic3RhcnQiCisgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0PSIwLjVpbiIKKyAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0PSIwLjVpbiIKKyAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk9InskYm9keS5mb250c2V0fSIvPgorICAgIDxwdWJkYXRlIHNwYWNlLWJlZm9yZT0iMC41ZW0iLz4KKwk8cGFyYT48L3BhcmE+CisgICAgPHJldmlzaW9uIHNwYWNlLWJlZm9yZT0iMC41ZW0iLz4KKyAgICA8cmV2aGlzdG9yeSBzcGFjZS1iZWZvcmU9IjAuNWVtIi8+CisgICAgPGFic3RyYWN0IHNwYWNlLWJlZm9yZT0iMC41ZW0iCisJICAgICAgdGV4dC1hbGlnbj0ic3RhcnQiCisJICAgICAgbWFyZ2luLWxlZnQ9IjAuNWluIgorICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ9IjAuNWluIgorICAgICAgICAgICAgICBmb250LWZhbWlseT0ieyRib2R5LmZvbnRzZXR9Ii8+CisKKyAgICA8cGFyYT48L3BhcmE+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2V0IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImRpdmlzaW9uLnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6c2V0WzFdIgorCSAgICAgdGV4dC1hbGlnbj0iY2VudGVyIgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIHNwYWNlLWJlZm9yZT0iJmhzaXplNXNwYWNlOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImJvb2siIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorCisgICAgICA8bWVkaWFvYmplY3QvPgkgICAgIAorCisgICAgICA8c3VidGl0bGUKKwkJdGV4dC1hbGlnbj0iY2VudGVyIgorCQlmb250LXNpemU9IiZoc2l6ZTQ7IgorCQlzcGFjZS1iZWZvcmU9IiZoc2l6ZTRzcGFjZTsiCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgICA8Y29ycGF1dGhvciBmb250LXNpemU9IiZoc2l6ZTM7IgorCQkgIGtlZXAtd2l0aC1uZXh0PSJhbHdheXMiCisJCSAgc3BhY2UtYmVmb3JlPSIyaW4iLz4KKyAgICAgIDxhdXRob3Jncm91cCBzcGFjZS1iZWZvcmU9IjJpbiIvPgorICAgICAgPGF1dGhvciBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgIHNwYWNlLWJlZm9yZT0iJmhzaXplMnNwYWNlOyIKKwkgICAgICBrZWVwLXdpdGgtbmV4dD0iYWx3YXlzIi8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgICAgPGNvcnBhdXRob3IvPgorICAgICAgPGF1dGhvcmdyb3VwIHQ6bmFtZWQtdGVtcGxhdGU9InZlcnNvLmF1dGhvcmdyb3VwIi8+CisgICAgICA8YXV0aG9yLz4KKyAgICAgIDxvdGhlcmNyZWRpdC8+CisgICAgICA8cHViZGF0ZSBzcGFjZS1iZWZvcmU9IjFlbSIvPgorICAgICAgPGNvcHlyaWdodC8+CisgICAgICA8YWJzdHJhY3QvPgorICAgICAgPGxlZ2Fsbm90aWNlIGZvbnQtc2l6ZT0iOHB0Ii8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgICAgPGZvOmJsb2NrIGJyZWFrLWFmdGVyPSJwYWdlIi8+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgICA8Zm86YmxvY2sgYnJlYWstYWZ0ZXI9InBhZ2UiLz4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJwYXJ0IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImRpdmlzaW9uLnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6cGFydFsxXSIKKwkgICAgIHRleHQtYWxpZ249ImNlbnRlciIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBzcGFjZS1iZWZvcmU9IiZoc2l6ZTVzcGFjZTsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgdGV4dC1hbGlnbj0iY2VudGVyIgorCSAgICAgIGZvbnQtc2l6ZT0iJmhzaXplNDsiCisJICAgICAgc3BhY2UtYmVmb3JlPSImaHNpemU0c3BhY2U7IgorCSAgICAgIGZvbnQtd2VpZ2h0PSdib2xkJworCSAgICAgIGZvbnQtc3R5bGU9J2l0YWxpYycKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InBhcnRpbnRybyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIHRleHQtYWxpZ249ImNlbnRlciIKKwkgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgIHNwYWNlLWJlZm9yZT0iMWVtIgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgdGV4dC1hbGlnbj0iY2VudGVyIgorCSAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiCisJICAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICAgZm9udC1zdHlsZT0iaXRhbGljIgorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icmVmZXJlbmNlIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImRpdmlzaW9uLnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6cmVmZXJlbmNlWzFdIgorCSAgICAgdGV4dC1hbGlnbj0iY2VudGVyIgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIHNwYWNlLWJlZm9yZT0iJmhzaXplNXNwYWNlOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJyZWZzeW5vcHNpc2RpdiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icmVmc2VjdGlvbiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icmVmc2VjdDEiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InJlZnNlY3QyIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJyZWZzZWN0MyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJkZWRpY2F0aW9uIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmRlZGljYXRpb25bMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InByZWZhY2UiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6cHJlZmFjZVsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICAgIDxjb3JwYXV0aG9yLz4KKyAgICAgIDxhdXRob3Jncm91cC8+CisgICAgICA8YXV0aG9yLz4KKyAgICAgIDxvdGhlcmNyZWRpdC8+CisgICAgICA8cmVsZWFzZWluZm8vPgorICAgICAgPGNvcHlyaWdodC8+CisgICAgICA8bGVnYWxub3RpY2UvPgorICAgICAgPHB1YmRhdGUvPgorICAgICAgPHJldmlzaW9uLz4KKyAgICAgIDxyZXZoaXN0b3J5Lz4KKyAgICAgIDxhYnN0cmFjdC8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImNoYXB0ZXIiIHQ6d3JhcHBlcj0iZm86YmxvY2siCisgICAgICAgICAgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byIgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9Ij4KKyAgICAgIDx0aXRsZSB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpjaGFwdGVyWzFdIgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisKKyAgICAgIDxzdWJ0aXRsZSBzcGFjZS1iZWZvcmU9IjAuNWVtIgorCQlmb250LXN0eWxlPSJpdGFsaWMiCisJCWZvbnQtc2l6ZT0iJmhzaXplMjsiCisJCWZvbnQtd2VpZ2h0PSJib2xkIi8+CisKKyAgICAgIDxjb3JwYXV0aG9yICBzcGFjZS1iZWZvcmU9IjAuNWVtIgorCSAgICAgICAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiLz4KKworICAgICAgPGF1dGhvcmdyb3VwIHNwYWNlLWJlZm9yZT0iMC41ZW0iCisJICAgICAgICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplPSImaHNpemUyOyIvPgorCisgICAgICA8YXV0aG9yICAgICAgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKwkgICAgICAgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU9IiZoc2l6ZTI7Ii8+CisKKyAgICAgIDxvdGhlcmNyZWRpdC8+CisgICAgICA8cmVsZWFzZWluZm8vPgorICAgICAgPGNvcHlyaWdodC8+CisgICAgICA8bGVnYWxub3RpY2UvPgorICAgICAgPHB1YmRhdGUvPgorICAgICAgPHJldmlzaW9uLz4KKyAgICAgIDxyZXZoaXN0b3J5Lz4KKyAgICAgIDxhYnN0cmFjdC8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImFwcGVuZGl4IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6YXBwZW5kaXhbMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgICA8Y29ycGF1dGhvci8+CisgICAgICA8YXV0aG9yZ3JvdXAvPgorICAgICAgPGF1dGhvci8+CisgICAgICA8b3RoZXJjcmVkaXQvPgorICAgICAgPHJlbGVhc2VpbmZvLz4KKyAgICAgIDxjb3B5cmlnaHQvPgorICAgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICAgIDxwdWJkYXRlLz4KKyAgICAgIDxyZXZpc2lvbi8+CisgICAgICA8cmV2aGlzdG9yeS8+CisgICAgICA8YWJzdHJhY3QvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2VjdGlvbiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2VjdDEiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNlY3QyIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZWN0MyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2VjdDQiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNlY3Q1IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzaW1wbGVzZWN0IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImJpYmxpb2dyYXBoeSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpiaWJsaW9ncmFwaHlbMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImJpYmxpb2RpdiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6YmlibGlvZGl2WzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU0OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJnbG9zc2FyeSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpnbG9zc2FyeVsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iZ2xvc3NkaXYiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6Omdsb3NzZGl2WzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU0OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJpbmRleCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjppbmRleFsxXSIKKyAgICAgICAgICAgICBwYXJhbTpwYWdld2lkZT0iMSIKKwkgICAgIG1hcmdpbi1sZWZ0PSIwcHQiCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDwhLS0gVGhlIGluZGV4ZGl2LnRpdGxlIHRlbXBsYXRlIGlzIHVzZWQgc28gdGhhdCBtYW51YWwgYW5kIC0tPgorICA8IS0tIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGluZGV4ZGl2IHRpdGxlcyBnZXQgdGhlIHNhbWUgLS0+CisgIDwhLS0gZm9ybWF0dGluZy4gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iaW5kZXhkaXYiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJpbmRleGRpdi50aXRsZSIKKwkgICAgIHBhcmFtOnRpdGxlPSJ0aXRsZSIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNldGluZGV4IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OnNldGluZGV4WzFdIgorICAgICAgICAgICAgIHBhcmFtOnBhZ2V3aWRlPSIxIgorCSAgICAgbWFyZ2luLWxlZnQ9IjBwdCIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iY29sb3Bob24iIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6Y29sb3Bob25bMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InRhYmxlLm9mLmNvbnRlbnRzIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImdlbnRleHQiCisJICAgICBwYXJhbTprZXk9IidUYWJsZW9mQ29udGVudHMnIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJsaXN0Lm9mLnRhYmxlcyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJnZW50ZXh0IgorCSAgICAgcGFyYW06a2V5PSInTGlzdG9mVGFibGVzJyIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWluaW11bT0iMWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5vcHRpbXVtPSIxLjVlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWF4aW11bT0iMmVtIgorCSAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemUzOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ibGlzdC5vZi5maWd1cmVzIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImdlbnRleHQiCisJICAgICBwYXJhbTprZXk9IidMaXN0b2ZGaWd1cmVzJyIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWluaW11bT0iMWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5vcHRpbXVtPSIxLjVlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWF4aW11bT0iMmVtIgorCSAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemUzOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ibGlzdC5vZi5leGFtcGxlcyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJnZW50ZXh0IgorCSAgICAgcGFyYW06a2V5PSInTGlzdG9mRXhhbXBsZXMnIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJsaXN0Lm9mLmVxdWF0aW9ucyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJnZW50ZXh0IgorCSAgICAgcGFyYW06a2V5PSInTGlzdG9mRXF1YXRpb25zJyIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWluaW11bT0iMWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5vcHRpbXVtPSIxLjVlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWF4aW11bT0iMmVtIgorCSAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemUzOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ibGlzdC5vZi5wcm9jZWR1cmVzIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImdlbnRleHQiCisJICAgICBwYXJhbTprZXk9IidMaXN0b2ZQcm9jZWR1cmVzJyIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWluaW11bT0iMWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5vcHRpbXVtPSIxLjVlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWF4aW11bT0iMmVtIgorCSAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemUzOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ibGlzdC5vZi51bmtub3ducyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJnZW50ZXh0IgorCSAgICAgcGFyYW06a2V5PSInTGlzdG9mVW5rbm93biciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8L3Q6dGVtcGxhdGVzPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3lvY3RvLXByb2plY3QtcXMucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3lvY3RvLXByb2plY3QtcXMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMzQ0MmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUveW9jdG8tcHJvamVjdC1xcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL2ZpZ3VyZXMvaG9zdGVkLXNlcnZpY2UucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL2ZpZ3VyZXMvaG9zdGVkLXNlcnZpY2UucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZmVhN2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvZmlndXJlcy9ob3N0ZWQtc2VydmljZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL2ZpZ3VyZXMvc2ltcGxlLWNvbmZpZ3VyYXRpb24ucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL2ZpZ3VyZXMvc2ltcGxlLWNvbmZpZ3VyYXRpb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZmNlMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvZmlndXJlcy9zaW1wbGUtY29uZmlndXJhdGlvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL2ZpZ3VyZXMvdG9hc3Rlci10aXRsZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvZmlndXJlcy90b2FzdGVyLXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2VhMzljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL2ZpZ3VyZXMvdG9hc3Rlci10aXRsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ODY5NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IiB2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCistLT4KKworICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvcGVybWFsaW5rcy54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9kaXZpc2lvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2VtYmVkZGVkX3ZpZGVvLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9Iid0b2FzdGVyLW1hbnVhbC1zdHlsZS5jc3MnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIiBzZWxlY3Q9IkEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmlkLmF0dHJpYnV0ZXMiIHNlbGVjdD0iMSIgLz4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1pbnRyby54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtaW50cm8ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkOWUwOGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtaW50cm8ueG1sCkBAIC0wLDAgKzEsMTcyIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ndG9hc3Rlci1tYW51YWwtaW50cm8nPgorPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVG9hc3RlciBpcyBhIHdlYiBpbnRlcmZhY2UgdG8gdGhlIFlvY3RvIFByb2plY3QncworICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1zeXN0ZW0tdGVybSc+T3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbTwvdWxpbms+LgorICAgICAgICBUaGUgaW50ZXJmYWNlIGVuYWJsZXMgeW91IHRvIGNvbmZpZ3VyZSBhbmQgcnVuIHlvdXIgYnVpbGRzLgorICAgICAgICBJbmZvcm1hdGlvbiBhYm91dCBidWlsZHMgaXMgY29sbGVjdGVkIGFuZCBzdG9yZWQgaW4gYSBkYXRhYmFzZS4KKyAgICAgICAgWW91IGNhbiB1c2UgVG9hc3RlciB0byBjb25maWd1cmUgYW5kIHN0YXJ0IGJ1aWxkcyBvbiBtdWx0aXBsZQorICAgICAgICByZW1vdGUgYnVpbGQgc2VydmVycy4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHJlbGVhc2Ugb2YgVG9hc3RlciBkb2VzIGFsbG93IHlvdSB0byBjb25maWd1cmUgYW5kIGluaXRpYXRlCisgICAgICAgICAgICBidWlsZHMuCisgICAgICAgICAgICBIb3dldmVyLCB5b3UgY2Fubm90IHVzZSBUb2FzdGVyIHRvIGN1c3RvbWl6ZSBpbWFnZSByZWNpcGVzLCB3aGljaAorICAgICAgICAgICAgc3RpbGwgbXVzdCBlaXRoZXIgYmUgZG9uZSBieSBoYW5kIG9yIHRocm91Z2gKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2hvYic+SG9iPC91bGluaz4uCisgICAgICAgICAgICBBcyBUb2FzdGVyIG1hdHVyZXMsIGl0IGV2ZW50dWFsbHkgd2lsbCBlcXVhbCBhbmQgc3VycGFzcyBIb2IKKyAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHksIGF0IHdoaWNoIHRpbWUgSG9iIHdpbGwgYmUgZGVwcmVjYXRlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gSG9iLAorICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2ltYWdlLWRldmVsb3BtZW50LXVzaW5nLWhvYic+SW1hZ2UgRGV2ZWxvcG1lbnQgVXNpbmcgSG9iPC91bGluaz4iCisgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgPC9ub3RlPgorCisgICAgPHNlY3Rpb24gaWQ9J2ludHJvLW1vZGVzJz4KKyAgICAgICAgPHRpdGxlPlRvYXN0ZXIgT3BlcmF0aW9uYWwgTW9kZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiB1c2UgVG9hc3RlciBpbiBBbmFseXNpcyBNb2RlIG9yIEJ1aWxkIE1vZGU6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QW5hbHlzaXMgTW9kZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbiBBbmFseXNpcyBNb2RlLCB5b3UgY2FuIHJlY29yZCBidWlsZHMgYW5kIHN0YXRpc3RpY3MuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgTW9kZSwgeW91IGRpcmVjdGx5IGFjY2VzcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kLCB3aGljaCB5b3UgdGhlbiB1c2UgdG8KKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaW1hZ2VzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+QW5hbHlzaXMgTW9kZSByZXF1aXJlcyB5b3UgdG8gaGF2ZSBmaXJzdCBzdGFydGVkCisgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgYW5kIHRoZW4gdG8gaW5pdGlhdGUgeW91ciBidWlsZCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGZyb20gdGhlIHNoZWxsLgorICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIG11c3QgYmUgc3RhcnRlZCBiZWZvcmUgdGhlIGJ1aWxkIG9yIGl0IHdpbGwgbm90CisgICAgICAgICAgICAgICAgICAgIGNvbGxlY3QgYnVpbGQgZGF0YS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRvYXN0ZXIgaGFzIHRoZSBmb2xsb3dpbmcgY2FwYWJpbGl0aWVzIGluCisgICAgICAgICAgICAgICAgICAgIEFuYWx5c2lzIE1vZGU6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHdoYXQgd2FzIGJ1aWx0IChyZWNpcGVzIGFuZCBwYWNrYWdlcykgYW5kIHdoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyB3ZXJlIGluc3RhbGxlZCBpbnRvIHlvdXIgZmluYWwgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJvd3NlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIG9mIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSB2YWx1ZSBvZiBhbGwgdmFyaWFibGVzIGluIHlvdXIgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLCBhbmQgd2hpY2ggZmlsZXMgc2V0IGVhY2ggdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhhbWluZSBlcnJvciwgd2FybmluZyBhbmQgdHJhY2UgbWVzc2FnZXMgdG8gYWlkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gZGVidWdnaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQml0QmFrZSB0YXNrcyBleGVjdXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCByZXVzZWQgZHVyaW5nIHlvdXIgYnVpbGQsIGluY2x1ZGluZyB0aG9zZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBzaGFyZWQgc3RhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHJlY2lwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgYW5kIHRhc2tzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHBlcmZvcm1hbmNlIGluZm9ybWF0aW9uIHN1Y2ggYXMgYnVpbGQgdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrIHRpbWUsIENQVSB1c2FnZSwgYW5kIGRpc2sgSS9PLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCBNb2RlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluIEJ1aWxkIE1vZGUsIFRvYXN0ZXIgaGFuZGxlcyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGluZyBhbmQgZXhlY3V0aW9uLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIG1vZGUsIGFsbCB5b3VyIGludGVyYWN0aW9uIHdpdGggdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICBoYXBwZW5zIHRocm91Z2ggdGhlIHdlYiBpbnRlcmZhY2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Vc2luZyB0aGlzIG1vZGUsIHlvdSBjb25maWd1cmUgYW5kIHN0YXJ0IHlvdXIgYnVpbGRzCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBUb2FzdGVyJ3MgR1VJLgorICAgICAgICAgICAgICAgICAgICBFYWNoIHByb2plY3QgY2FuIGJlIGNvbmZpZ3VyZWQgZm9yIGEgc3BlY2lmaWMgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBBcyBzaGlwcGVkLCBUb2FzdGVyIHN1cHBvcnRzIFlvY3RvIFByb2plY3QgUmVsZWFzZXMgMS43IGFuZAorICAgICAgICAgICAgICAgICAgICBiZXlvbmQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Ub2FzdGVyIGhhcyBhbGwgdGhlIHNhbWUgY2FwYWJpbGl0aWVzIGluIEJ1aWxkIE1vZGUKKyAgICAgICAgICAgICAgICAgICAgYXMgaXQgZG9lcyBpbiBBbmFseXNpcyBNb2RlIHBsdXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcm93c2UgbGF5ZXJzIGxpc3RlZCBpbiB0aGUgdmFyaW91cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2xheWVyLXNvdXJjZSc+bGF5ZXIgc291cmNlczwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGFyZSBhdmFpbGFibGUgaW4geW91ciBwcm9qZWN0IChlLmcuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBNZXRhZGF0YSBJbmRleCBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4Lyc+PC91bGluaz4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltcG9ydCB5b3VyIG93biBsYXllcnMgZm9yIGJ1aWxkaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBhbmQgcmVtb3ZlIGxheWVycyBmcm9tIHlvdXIgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IGEgdGFyZ2V0IG9yIG11bHRpcGxlIHRhcmdldHMgdG8gYnVpbGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnQgeW91ciBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItaW5zdGFsbGF0aW9uLW9wdGlvbnMnPgorICAgICAgICA8dGl0bGU+SW5zdGFsbGF0aW9uIE9wdGlvbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBzZXQgVG9hc3RlciB1cCB0byBydW4gYXMgYSBsb2NhbCBpbnN0YW5jZSBvciBhcyBhIHNoYXJlZAorICAgICAgICAgICAgaG9zdGVkIHNlcnZpY2UuCisgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIGhvdyB5b3Ugc2V0IHVwIFRvYXN0ZXIsIGJvdGggQW5hbHlzaXMgYW5kIEJ1aWxkCisgICAgICAgICAgICBNb2RlcyBhcmUgYXZhaWxhYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIFRvYXN0ZXIgaXMgc2V0IHVwIGFzIGEgbG9jYWwgaW5zdGFuY2UsIGFsbCB0aGUgY29tcG9uZW50cworICAgICAgICAgICAgcmVzaWRlIG9uIGEgc2luZ2xlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICBGdW5kYW1lbnRhbGx5LCBhIGxvY2FsIGluc3RhbmNlIG9mIFRvYXN0ZXIgaXMgc3VpdGVkIGZvciBhIHNpbmdsZQorICAgICAgICAgICAgdXNlciBkZXZlbG9waW5nIG9uIGEgc2luZ2xlIGJ1aWxkIGhvc3QuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9zaW1wbGUtY29uZmlndXJhdGlvbi5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSIxLjVpbiIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG9hc3RlciBhcyBhIGhvc3RlZCBzZXJ2aWNlIGlzIHN1aXRlZCBmb3IgbXVsdGlwbGUgdXNlcnMKKyAgICAgICAgICAgIGRldmVsb3BpbmcgYWNyb3NzIHNldmVyYWwgYnVpbGQgaG9zdHMuCisgICAgICAgICAgICBXaGVuIFRvYXN0ZXIgaXMgc2V0IHVwIGFzIGEgaG9zdGVkIHNlcnZpY2UsIGl0cyBjb21wb25lbnRzIGNhbgorICAgICAgICAgICAgYmUgc3ByZWFkIGFjcm9zcyBzZXZlcmFsIG1hY2hpbmVzOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvaG9zdGVkLXNlcnZpY2UucG5nIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNmluIiBkZXB0aD0iMy41aW4iIC8+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKzwhLS1USElTIEVYVFJBIElORk9STUFUSU9OIFBST0JBQkxZIFdJTEwgR08gQVdBWQorICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBpbnN0YWxsaW5nIGFuZCBydW5uaW5nIFRvYXN0ZXIsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvVG9hc3RlciNJbnN0YWxsYXRpb25fYW5kX1J1bm5pbmcnPkluc3RhbGxhdGlvbiBhbmQgUnVubmluZzwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIG9mIHRoZSAiVG9hc3RlciIgd2lraSBwYWdlLgorICAgICAgICBGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gdGhlIEFQSSBhbmQgaXRzIHNlYXJjaCBvcGVyYXRpb24KKyAgICAgICAgVVJJLCBwYXJhbWV0ZXJzLCBhbmQgcmVzcG9uc2VzLCBzZWUgdGhlCisgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvUkVTVF9BUElfQ29udHJhY3RzJz5SRVNUIEFQSSBDb250cmFjdHM8L3VsaW5rPgorICAgICAgICBXaWtpIHBhZ2UuCisgICAgPC9wYXJhPgorLS0+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtcmVmZXJlbmNlLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1yZWZlcmVuY2UueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOTQwMWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtcmVmZXJlbmNlLnhtbApAQCAtMCwwICsxLDEwNzggQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSd0b2FzdGVyLW1hbnVhbC1yZWZlcmVuY2UnPgorCis8dGl0bGU+Q29uY2VwdHMgYW5kIFJlZmVyZW5jZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSW4gb3JkZXIgdG8gY29uZmlndXJlIGFuZCB1c2UgVG9hc3RlciwgeW91IHNob3VsZCB1bmRlcnN0YW5kIHNvbWUKKyAgICAgICAgY29uY2VwdHMgYW5kIGhhdmUgc29tZSBiYXNpYyBjb21tYW5kIHJlZmVyZW5jZSBtYXRlcmlhbCBhdmFpbGFibGUuCisgICAgICAgIFRoaXMgZmluYWwgY2hhcHRlciBwcm92aWRlcyBjb25jZXB0dWFsIGluZm9ybWF0aW9uIG9uIGxheWVyIHNvdXJjZXMsCisgICAgICAgIHJlbGVhc2VzLCBhbmQgSlNPTiBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICBBbHNvIHByb3ZpZGVkIGlzIGEgcXVpY2sgbG9vayBhdCBzb21lIHVzZWZ1bAorICAgICAgICA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4gY29tbWFuZHMgdGhhdCBhcmUgVG9hc3Rlci1zcGVjaWZpYy4KKyAgICAgICAgSW5mb3JtYXRpb24gb24gPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IGNvbW1hbmRzIGRvZXMgZXhpc3QKKyAgICAgICAgYWNyb3NzIHRoZSBXZWIgYW5kIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIG1hbnVhbCBieSBubyBtZWFucworICAgICAgICBhdHRlbXB0cyB0byBwcm92aWRlIGEgY29tbWFuZCBjb21wcmVoZW5zaXZlIHJlZmVyZW5jZS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nbGF5ZXItc291cmNlJz4KKyAgICAgICAgPHRpdGxlPkxheWVyIFNvdXJjZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiBnZW5lcmFsLCBhICJsYXllciBzb3VyY2UiIGlzIGEgc291cmNlIG9mIGluZm9ybWF0aW9uIGFib3V0CisgICAgICAgICAgICBleGlzdGluZyBsYXllcnMuCisgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB3ZSBhcmUgY29uY2VybmVkIHdpdGggbGF5ZXJzIHRoYXQgeW91IGNhbiB1c2UKKyAgICAgICAgICAgIHdpdGggdGhlIFlvY3RvIFByb2plY3QgYW5kIFRvYXN0ZXIuCisgICAgICAgICAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIGEgcGFydGljdWxhciB0eXBlIG9mIGxheWVyIHNvdXJjZSBjYWxsZWQKKyAgICAgICAgICAgIGEgImxheWVyIGluZGV4LiIKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBsYXllciBpbmRleCBpcyBhIHdlYiBhcHBsaWNhdGlvbiB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uCisgICAgICAgICAgICBhYm91dCBhIHNldCBvZiBjdXN0b20gbGF5ZXJzLgorICAgICAgICAgICAgQSBnb29kIGV4YW1wbGUgb2YgYW4gZXhpc3RpbmcgbGF5ZXIgaW5kZXggaXMgdGhlCisgICAgICAgICAgICBPcGVuRW1iZWRkZWQgTWV0YWRhdGEgSW5kZXguCisgICAgICAgICAgICBBIHB1YmxpYyBpbnN0YW5jZSBvZiB0aGlzIGxheWVyIGluZGV4IGV4aXN0cyBhdAorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnJz48L3VsaW5rPi4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgY29kZSBmb3IgdGhpcyBsYXllciBpbmRleCdzIHdlYiBhcHBsaWNhdGlvbiBhdAorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvbGF5ZXJpbmRleC13ZWIvJz48L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgdGllIGEgbGF5ZXIgc291cmNlIGludG8gVG9hc3RlciwgaXQgY2FuIHF1ZXJ5IHRoZSBsYXllcgorICAgICAgICAgICAgc291cmNlIHRocm91Z2ggYQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SZXByZXNlbnRhdGlvbmFsX3N0YXRlX3RyYW5zZmVyJz5SRVNUPC91bGluaz4KKyAgICAgICAgICAgIEFQSSwgc3RvcmUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsYXllcnMgaW4gdGhlIFRvYXN0ZXIKKyAgICAgICAgICAgIGRhdGFiYXNlLCBhbmQgdGhlbiBzaG93IHRoZSBpbmZvcm1hdGlvbiB0byB1c2Vycy4KKyAgICAgICAgICAgIFVzZXJzIGFyZSB0aGVuIGFibGUgdG8gdmlldyB0aGF0IGluZm9ybWF0aW9uIGFuZCBidWlsZCBsYXllcnMKKyAgICAgICAgICAgIGZyb20gVG9hc3RlciBpdHNlbGYgd2l0aG91dCB3b3JyeWluZyBhYm91dCBjbG9uaW5nIG9yIGVkaXRpbmcKKyAgICAgICAgICAgIHRoZSBCaXRCYWtlIGxheWVycyBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFR5aW5nIGEgbGF5ZXIgc291cmNlIGludG8gVG9hc3RlciBpcyBjb252ZW5pZW50IHdoZW4geW91IGhhdmUKKyAgICAgICAgICAgIG1hbnkgY3VzdG9tIGxheWVycyB0aGF0IG5lZWQgdG8gYmUgYnVpbHQgb24gYSByZWd1bGFyIGJhc2lzIGJ5CisgICAgICAgICAgICBhIGNvbW11bml0eSBvZiBkZXZlbG9wZXJzLgorICAgICAgICAgICAgSW4gZmFjdCwgVG9hc3RlciBjb21lcyBwcmUtY29uZmlndXJlZCB3aXRoIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgIE1ldGFkYXRhIEluZGV4LgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBoYXZlIHRvIHVzZSBhIGxheWVyIHNvdXJjZSB0byB1c2UgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICBUeWluZyBpbnRvIGEgbGF5ZXIgc291cmNlIGlzIG9wdGlvbmFsLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2xheWVyLXNvdXJjZS11c2luZy13aXRoLXRvYXN0ZXInPgorICAgICAgICAgICAgPHRpdGxlPlNldHRpbmcgVXAgYW5kIFVzaW5nIGEgTGF5ZXIgU291cmNlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gdXNlIHlvdXIgb3duIGxheWVyIHNvdXJjZSwgeW91IG5lZWQgdG8gc2V0IHVwIHRoZSBsYXllcgorICAgICAgICAgICAgICAgIHNvdXJjZSBhbmQgdGhlbiB0aWUgaXQgaW50byBUb2FzdGVyLgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIHRpZSBpbnRvIGEgbGF5ZXIgaW5kZXggaW4gYSBtYW5uZXIKKyAgICAgICAgICAgICAgICBzaW1pbGFyIHRvIHRoZSB3YXkgVG9hc3RlciB0aWVzIGludG8gdGhlIE9wZW5FbWJlZGRlZCBNZXRhZGF0YQorICAgICAgICAgICAgICAgIEluZGV4LgorICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSd1bmRlcnN0YW5kaW5nLXlvdXItbGF5ZXJzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+VW5kZXJzdGFuZGluZyBZb3VyIExheWVyczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG9idmlvdXMgZmlyc3Qgc3RlcCBmb3IgdXNpbmcgYSBsYXllciBpbmRleCBpcyB0byBoYXZlCisgICAgICAgICAgICAgICAgICAgIHNldmVyYWwgY3VzdG9tIGxheWVycyB0aGF0IGRldmVsb3BlcnMgYnVpbGQgYW5kIGFjY2VzcyB1c2luZworICAgICAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBvbiBhIHJlZ3VsYXIgYmFzaXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2V0IG9mIGxheWVycyBuZWVkcyB0byBleGlzdCBhbmQgeW91IG5lZWQgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgZmFtaWxpYXIgd2l0aCB3aGVyZSB0aGV5IHJlc2lkZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHdpbGwgbmVlZCB0aGF0IGluZm9ybWF0aW9uIHdoZW4geW91IHNldCB1cCB0aGUKKyAgICAgICAgICAgICAgICAgICAgY29kZSBmb3IgdGhlIHdlYiBhcHBsaWNhdGlvbiB0aGF0ICJob29rcyIgaW50byB5b3VyIHNldCBvZgorICAgICAgICAgICAgICAgICAgICBsYXllcnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIGxheWVycywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIExheWVyczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I3VzaW5nLXRoZS15b2N0by1wcm9qZWN0cy1ic3AtdG9vbHMnPlVzaW5nIHRoZSBZb2N0byBQcm9qZWN0J3MgQlNQIFRvb2xzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKQorICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdjb25maWd1cmluZy10b2FzdGVyLXRvLWhvb2staW50by15b3VyLWxheWVyLXNvdXJjZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIFRvYXN0ZXIgdG8gSG9vayBJbnRvIFlvdXIgTGF5ZXIgSW5kZXg8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IFRvYXN0ZXIgdG8gdXNlIHlvdXIgbGF5ZXIgaW5kZXgsIHlvdSBtdXN0IGhvc3QKKyAgICAgICAgICAgICAgICAgICAgdGhlIHdlYiBhcHBsaWNhdGlvbiBpbiBhIHNlcnZlciB0byB3aGljaCBUb2FzdGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBjb25uZWN0LgorICAgICAgICAgICAgICAgICAgICBZb3UgYWxzbyBuZWVkIHRvIGdpdmUgVG9hc3RlciB0aGUgaW5mb3JtYXRpb24gYWJvdXQgeW91cgorICAgICAgICAgICAgICAgICAgICBsYXllciBpbmRleC4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHlvdSBoYXZlIHRvIGNvbmZpZ3VyZSBUb2FzdGVyIHRvIHVzZSB5b3VyCisgICAgICAgICAgICAgICAgICAgIGxheWVyIGluZGV4LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHR3byBtZXRob2RzIGJ5IHdoaWNoIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIGFuZCB1c2UgeW91ciBsYXllciBpbmRleC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIHRoZSBjb2RlIGZvciB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIE1ldGFkYXRhIEluZGV4IChpLmUuCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZyc+PC91bGluaz4pIHdhcworICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VkLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIGNvZGUsIHdoaWNoIGlzIGF0CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL2xheWVyaW5kZXgtd2ViLyc+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFzIGEgYmFzZSB0byBjcmVhdGUgeW91ciBvd24gbGF5ZXIgaW5kZXguCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3VzZS10aGUtYWRtaW5pc3RyYXRpb24taW50ZXJmYWNlJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlVzZSB0aGUgQWRtaW5pc3RyYXRpb24gSW50ZXJmYWNlPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VzcyB0aGUgYWRtaW5pc3RyYXRpb24gaW50ZXJmYWNlIHRocm91Z2ggYQorICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NlciBieSBlbnRlcmluZyB0aGUgVVJMIG9mIHlvdXIgVG9hc3RlciBpbnN0YW5jZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGluZyAiPGZpbGVuYW1lPi9hZG1pbjwvZmlsZW5hbWU+IiB0byB0aGUgZW5kIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgVVJMLgorICAgICAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgaWYgeW91IGFyZSBydW5uaW5nIFRvYXN0ZXIgbG9jYWxseSwgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIFVSTDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgaHR0cDovLzEyNy4wLjAuMTo4MDAwL2FkbWluCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhZG1pbmlzdHJhdGlvbiBpbnRlcmZhY2UgaGFzIGEgIkxheWVyIHNvdXJjZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIHRoYXQgaW5jbHVkZXMgYW4gIkFkZCBsYXllciBzb3VyY2UiIGJ1dHRvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrIHRoYXQgYnV0dG9uIGFuZCBwcm92aWRlIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE1ha2Ugc3VyZSB5b3Ugc2VsZWN0ICJsYXllcmluZGV4IiBhcyB0aGUgbGF5ZXIgc291cmNlIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nc2VsZWN0LXRoZS10b2FzdGVyY29uZi1qc29uLWZpbGUnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+VXNlIHRoZSA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+IEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCB3YW50IHRvIHVzZSB0aGUgQWRtaW5pc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZSwgeW91IGNhbiBlZGl0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1qc29uLWZpbGVzJz48ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBhbmQgcmVsb2FkIGl0IHRvIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHNldCB1cCBUb2FzdGVyIGluIEJ1aWxkIE1vZGUsIHlvdSBhcmUgcHJvbXB0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHNlbGVjdCBhIFRvYXN0ZXIgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgaXMgdXNlZCB0byBzZXQgdXAgdGhlIGluaXRpYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gdmFsdWVzIHdpdGhpbiB0aGUgVG9hc3RlciBkYXRhYmFzZQorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHRoZSBsYXllciBzb3VyY2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWUgdmVyc2lvbnMgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBleGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgdmVyc2lvbiBvZiB0aGUgZmlsZSBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4gbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZi90b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZlcnNpb24gY29udGFpbnMgdGhlIGRlZmF1bHQgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZvciBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgYXJlIHByb21wdGVkIHRvIHNlbGVjdCB0aGlzIGZpbGUgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIHNldCB1cCBwcm9jZXNzIGlmIHlvdSBoYWQgY2xvbmVkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3k8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNlY29uZCB2ZXJzaW9uIG9mIHRoZSBmaWxlIGlzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wZW5lbWJlZGRlZC1jb3JlPC9maWxlbmFtZT4gbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPm1ldGEvY29uZi90b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZlcnNpb24gY29udGFpbnMgdGhlIGRlZmF1bHQgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZm9yIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhcmUgcHJvbXB0ZWQgdG8gc2VsZWN0IHRoaXMgZmlsZSBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgc2V0IHVwIHByb2Nlc3MgaWYgeW91IGhhZCBjbG9uZWQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcGVuZW1iZWRkZWQtY29yZTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0aGlyZCB2ZXJzaW9uIGlzIGEgc2FtcGxlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZnVsIGZvciB3aGVuIHlvdSB3YW50IHRvIHNldCB1cCBhIGhvc3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlIGluIEJ1aWxkIE1vZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGlzIHZlcnNpb24gb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvRmlsZTpUb2FzdGVyY29uZi5qc29uLnR4dC5wYXRjaCc+RmlsZTpUb2FzdGVyY29uZi5qc29uLnR4dC5wYXRjaDwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdlZGl0LXRoZS1jb25maWd1cmF0aW9uLWZpbGUnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+RWRpdCB0aGUgQ29uZmlndXJhdGlvbiBGaWxlPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEVkaXQgdGhlIHZlcnNpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+IGZpbGUgeW91CisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIHNldCB1cCB5b3VyIFRvYXN0ZXIgaW5zdGFuY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgZmlsZSwgeW91IHdpbGwgZmluZCBhIHNlY3Rpb24gZm9yIGxheWVyIHNvdXJjZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgImxheWVyc291cmNlcyI6IFsKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAibmFtZSI6ICJMb2NhbCBZb2N0byBQcm9qZWN0IiwKKyAgICAgICAgICAgICAic291cmNldHlwZSI6ICJsb2NhbCIsCisgICAgICAgICAgICAgImFwaXVybCI6ICIuLi8uLi8iLAorICAgICAgICAgICAgICJicmFuY2hlcyI6IFsiSEVBRCIsICJtYXN0ZXIiLCAiZmlkbyIsICJkaXp6eSJdLAorICAgICAgICAgICAgICJsYXllcnMiOiBbCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm9wZW5lbWJlZGRlZC1jb3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRoIjogIm1ldGEiLAorICAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgICAgICAgICAiZGlycGF0aCI6ICJtZXRhIgorICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJtZXRhLXlvY3RvIiwKKyAgICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRoIjogIm1ldGEteW9jdG8iLAorICAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgICAgICAgICAiZGlycGF0aCI6ICJtZXRhLXlvY3RvIgorICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJtZXRhLXlvY3RvLWJzcCIsCisgICAgICAgICAgICAgICAgICAgICAibG9jYWxfcGF0aCI6ICJtZXRhLXlvY3RvLWJzcCIsCisgICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgICJkaXJwYXRoIjogIm1ldGEteW9jdG8tYnNwIgorICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICBdCisgICAgICAgICB9LAorICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogIk9wZW5FbWJlZGRlZCIsCisgICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAibGF5ZXJpbmRleCIsCisgICAgICAgICAgICAgImFwaXVybCI6ICJodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9hcGkvIiwKKyAgICAgICAgICAgICAiYnJhbmNoZXMiOiBbIm1hc3RlciIsICJmaWRvIiwgImRpenp5Il0KKyAgICAgICAgIH0sCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAiSW1wb3J0ZWQgbGF5ZXJzIiwKKyAgICAgICAgICAgICAic291cmNldHlwZSI6ICJpbXBvcnRlZCIsCisgICAgICAgICAgICAgImFwaXVybCI6ICIiLAorICAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiLCAiSEVBRCJdCisKKyAgICAgICAgIH0KKyAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgYWRkIHlvdXIgb3duIGxheWVyIHNvdXJjZSB0byB0aGlzIHNlY3Rpb24gYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyB0aGUgc2FtZSBmb3JtYXQgdXNlZCBmb3IgdGhlICJPcGVuRW1iZWRkZWQiCisgICAgICAgICAgICAgICAgICAgICAgICBsYXllciBzb3VyY2Ugc2hvd24gYWJvdmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdpdmUgeW91ciBsYXllciBzb3VyY2UgYSBuYW1lLCBwcm92aWRlIHRoZSBVUkwgb2YgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgc291cmNlIEFQSSwgdXNlIHRoZSBzb3VyY2UgdHlwZSAibGF5ZXJpbmRleCIsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGUgd2hpY2ggYnJhbmNoZXMgZnJvbSB5b3VyIGxheWVyIHNvdXJjZSB5b3Ugd2FudAorICAgICAgICAgICAgICAgICAgICAgICAgdG8gbWFrZSBhdmFpbGFibGUgdGhyb3VnaCBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBPcGVuRW1iZWRkZWQgbGF5ZXIgc291cmNlIG1ha2VzCisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgb25seSBpdHMgIm1hc3RlciIsICJmaWRvIiwgYW5kICJkaXp6eSIKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnJhbmNoZXMgbXVzdCBtYXRjaCB0aGUgYnJhbmNoIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHdoZW4gY29uZmlndXJpbmcgeW91ciByZWxlYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgY29uZmlndXJlIG9uZSByZWxlYXNlIGluIFRvYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHNldHRpbmcgaXRzIGJyYW5jaCB0byAiYnJhbmNoLW9uZSIgYW5kIHlvdSBjb25maWd1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFub3RoZXIgcmVsZWFzZSBpbiBUb2FzdGVyIGJ5IHNldHRpbmcgaXRzIGJyYW5jaCB0bworICAgICAgICAgICAgICAgICAgICAgICAgImJyYW5jaC10d28iLCB0aGUgYnJhbmNoZXMgaW4geW91ciBsYXllciBzb3VyY2Ugc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICBiZSAiYnJhbmNoLW9uZSIgYW5kICJicmFuY2gtdHdvIiBhcyB3ZWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgRG9pbmcgc28gY3JlYXRlcyBhIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgcmVsZWFzZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgbGF5ZXIgaW5mb3JtYXRpb24gZnJvbSB5b3VyIGxheWVyIHNvdXJjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRodXMsIHdoZW4gdXNlcnMgY3JlYXRlIGEgcHJvamVjdCB3aXRoIGEgZ2l2ZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UsIHRoZXkgd2lsbCBzZWUgdGhlIGFwcHJvcHJpYXRlIGxheWVycyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIGxheWVyIHNvdXJjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY29ubmVjdGlvbiBlbnN1cmVzIHRoYXQgb25seSBsYXllcnMgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgd2l0aCB0aGUgc2VsZWN0ZWQgcHJvamVjdCByZWxlYXNlIGNhbiBiZQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgZm9yIGJ1aWxkaW5nLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGFkZGVkIHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+IGZpbGUsIHNhdmUgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gYSB0ZXJtaW5hbCB3aW5kb3csIG5hdmlnYXRlIHRvIHRoZSBkaXJlY3RvcnkgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgdGhlIFRvYXN0ZXIgZGF0YWJhc2UsIHdoaWNoIGJ5IGRlZmF1bHQgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICByb290IG9mIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBhcmUgbG9jYXRlZCBpbiB0aGF0IGRpcmVjdG9yeSwgcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxmaWxlbmFtZT5sb2FkY29uZjwvZmlsZW5hbWU+IiBjb21tYW5kLCB3aGljaCB0YWtlcyBhcworICAgICAgICAgICAgICAgICAgICAgICAgYW4gYXJndW1lbnQgdGhlIGZ1bGwgcGF0aCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gZmlsZSB5b3UganVzdCBlZGl0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGNsb25lZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSBhbmQgeW91IGVkaXRlZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmYvdG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICB5b3Ugd291bGQgdHlwZSBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGxvYWRjb25mIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS15b2N0by9jb25mL3RvYXN0ZXJjb25mLmpzb24KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIGVudGVyaW5nIHRoaXMgY29tbWFuZCwgeW91IG5lZWQgdG8gdXBkYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBkYXRhYmFzZSB3aXRoIHRoZSBpbmZvcm1hdGlvbiBjb21pbmcgZnJvbSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgbGF5ZXIgc291cmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gZG8gdGhhdCwgeW91IHNob3VsZCBydW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGZpbGVuYW1lPmxzdXBkYXRlczwvZmlsZW5hbWU+IiBjb21tYW5kIGZyb20gdGhlIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBjb250YWlucyB0aGUgVG9hc3RlciBkYXRhYmFzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBsc3VwZGF0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIFRvYXN0ZXIgY2FuIHJlYWNoIHRoZSBBUEkgVVJMLCB5b3Ugc2hvdWxkIHNlZSBhIG1lc3NhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbGxpbmcgeW91IHRoYXQgVG9hc3RlciBpcyB1cGRhdGluZyB0aGUgbGF5ZXIgc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgaW5mb3JtYXRpb24gaGFzIGJlZW4gdXBkYXRlZCwgdmVyaWZ5IHRoZSBuZXcgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBieSB1c2luZyB0aGUgVG9hc3RlciB3ZWIgaW50ZXJmYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gZG8gdGhhdCwgdmlzaXQgdGhlICJBbGwgY29tcGF0aWJsZSBsYXllcnMiIHBhZ2UgaW5zaWRlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsYXllcnMgZnJvbSB5b3VyIGxheWVyIHNvdXJjZSBzaG91bGQgYmUgbGlzdGVkIHRoZXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItcmVsZWFzZXMnPgorICAgICAgICA8dGl0bGU+UmVsZWFzZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIGEgVG9hc3RlciBwcm9qZWN0IHVzaW5nIHRoZSB3ZWIgaW50ZXJmYWNlLAorICAgICAgICAgICAgeW91IGFyZSBhc2tlZCB0byBjaG9vc2UgYSAiUmVsZWFzZS4iCisgICAgICAgICAgICBJbiB0aGUgY29udGV4dCBvZiBUb2FzdGVyLCB0aGUgdGVybSAiUmVsZWFzZSIgcmVmZXJzIHRvIGEgc2V0IG9mCisgICAgICAgICAgICBsYXllcnMgYW5kIGEgQml0QmFrZSB2ZXJzaW9uIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgIHRvIGJ1aWxkIHNvbWV0aGluZy4KKyAgICAgICAgICAgIEFzIHNoaXBwZWQsIFRvYXN0ZXIgaXMgcHJlLWNvbmZpZ3VyZWQgd2l0aCByZWxlYXNlcyB0aGF0CisgICAgICAgICAgICBjb3JyZXNwb25kIHRvIFlvY3RvIFByb2plY3QgcmVsZWFzZSBicmFuY2hlcy4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gbW9kaWZ5LCBkZWxldGUsIGFuZCBjcmVhdGUgbmV3IHJlbGVhc2VzCisgICAgICAgICAgICBhY2NvcmRpbmcgdG8geW91ciBuZWVkcy4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBzb21lIGJhY2tncm91bmQgaW5mb3JtYXRpb24gb24gcmVsZWFzZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1yZWxlYXNlcy1zdXBwb3J0ZWQnPgorICAgICAgICAgICAgPHRpdGxlPlByZS1Db25maWd1cmVkIFJlbGVhc2VzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgc2hpcHBlZCwgVG9hc3RlciBpcyBjb25maWd1cmVkIHRvIHVzZSBhIHNwZWNpZmljIHNldCBvZgorICAgICAgICAgICAgICAgIHJlbGVhc2VzLgorICAgICAgICAgICAgICAgIE9mIGNvdXJzZSwgeW91IGNhbiBhbHdheXMgY29uZmlndXJlIFRvYXN0ZXIgdG8gdXNlIGFueQorICAgICAgICAgICAgICAgIHJlbGVhc2UuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBtaWdodCB3YW50IHlvdXIgcHJvamVjdCB0byBidWlsZCBhZ2FpbnN0IGEKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyBjb21taXQgb2YgYW55IG9mIHRoZSAib3V0LW9mLXRoZS1ib3giIHJlbGVhc2VzLgorICAgICAgICAgICAgICAgIE9yLCB5b3UgbWlnaHQgd2FudCB5b3VyIHByb2plY3QgdG8gYnVpbGQgYWdhaW5zdCBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICByZXZpc2lvbnMgb2YgT3BlbkVtYmVkZGVkIGFuZCBCaXRCYWtlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBzaGlwcGVkLCBUb2FzdGVyIGlzIGNvbmZpZ3VyZWQgdG8gd29yayB3aXRoIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICByZWxlYXNlczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPllvY3RvIFByb2plY3QgMS43ICJEaXp6eSIgb3IgT3BlbkVtYmVkZGVkICJEaXp6eSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVsZWFzZSBjYXVzZXMgeW91ciBUb2FzdGVyIHByb2plY3RzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBhZ2FpbnN0IHRoZSBoZWFkIG9mIHRoZSBkaXp6eSBicmFuY2ggYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpL3Bva3kvbG9nLz9oPWRpenp5Jz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS9jb21taXQvP2g9ZGl6enknPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+WW9jdG8gUHJvamVjdCAxLjggIkZpZG8iIG9yIE9wZW5FbWJlZGRlZCAiRmlkbyI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVsZWFzZSBjYXVzZXMgeW91ciBUb2FzdGVyIHByb2plY3RzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBhZ2FpbnN0IHRoZSBoZWFkIG9mIHRoZSBmaWRvIGJyYW5jaCBhdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvP2g9Zmlkbyc+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUvY29tbWl0Lz9oPWZpZG8nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+WW9jdG8gUHJvamVjdCAiTWFzdGVyIiBvciBPcGVuRW1iZWRkZWQgIk1hc3RlciI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVsZWFzZSBjYXVzZXMgeW91ciBUb2FzdGVyIFByb2plY3RzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBhZ2FpbnN0IHRoZSBoZWFkIG9mIHRoZSBtYXN0ZXIgYnJhbmNoLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgYWN0aXZlIGRldmVsb3BtZW50IHRha2VzIHBsYWNlLCBhdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvJz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS9sb2cvJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxvY2FsIFlvY3RvIFByb2plY3Qgb3IgTG9jYWwgT3BlbkVtYmVkZGVkOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHJlbGVhc2UgY2F1c2VzIHlvdXIgVG9hc3RlciBQcm9qZWN0cyB0bworICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgYWdhaW5zdCB0aGUgaGVhZCBvZiB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPm9wZW5lbWJlZGRlZC1jb3JlPC9maWxlbmFtZT4gY2xvbmUgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIGxvY2FsIHRvIHRoZSBtYWNoaW5lIHJ1bm5pbmcgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItcmVsZWFzZXMtY29tcHJpc2VkLW9mJz4KKyAgICAgICAgICAgIDx0aXRsZT5XaGF0IE1ha2VzIFVwIGEgUmVsZWFzZT88L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIHJlbGVhc2UgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk5hbWU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSByZWxlYXNlICg8ZmlsZW5hbWU+bmFtZTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVsZWFzZSBuYW1lIG5ldmVyIGFwcGVhcnMgaW4gdGhlIHRoZSBUb2FzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWIgaW50ZXJmYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBhIHVzZXIgbmV2ZXIgc2VlcyB0aGUgcmVsZWFzZSBuYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGVzY3JpcHRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSByZWxlYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmRlc2NyaXB0aW9uPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBkZXNjcmlwdGlvbiBpcyB3aGF0IHVzZXJzIGVuY291bnRlciB3aGVuIGNyZWF0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0cyB3aXRoIHRoZSBUb2FzdGVyIHdlYiBpbnRlcmZhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBjb25maWd1cmUgeW91ciByZWxlYXNlLCBiZSBzdXJlIHRvIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgYSBkZXNjcmlwdGlvbiB0aGF0IHN1ZmZpY2llbnRseSBkZXNjcmliZXMgYW5kIGlzCisgICAgICAgICAgICAgICAgICAgICAgICB1bmRlcnN0YW5kYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIFRvYXN0ZXIgaGFzIG1vcmUgdGhhbiBvbmUgcmVsZWFzZSBjb25maWd1cmVkLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgZGVzY3JpcHRpb25zIGFwcGVhciBsaXN0ZWQgaW4gYSBkcm9wIGRvd24gbWVudQorICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBhIHVzZXIgY3JlYXRlcyBhIG5ldyBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgVG9hc3RlciBoYXMgb25seSBvbmUgcmVsZWFzZSBjb25maWd1cmVkLCBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RzIGNyZWF0ZWQgdXNpbmcgdGhlIHdlYiBpbnRlcmZhY2UgdGFrZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlIGFuZCB0aGUgZHJvcCBkb3duIG1lbnUgZG9lcyBub3QgZGlzcGxheSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgd2ViIGludGVyZmFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJpdEJha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBCaXRiYWtlIHZlcnNpb24gKDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIGJ1aWxkIGxheWVycyBzZXQgaW4gdGhlIGN1cnJlbnQgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmVyc2lvbiBpcyBkZXNjcmliZWQgYnkgYSBuYW1lLCBhIEdpdCBVUkwsIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCBpbiB0aGUgR2l0IFVSTCwgYW5kIGEgZGlyZWN0b3J5IHBhdGggaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc25pcHBldCBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICBhIFRvYXN0ZXIgSlNPTiBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIEJpdEJha2UgdmVyc2lvbiB1c2VzIHRoZSBtYXN0ZXIgYnJhbmNoIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgcmVwb3NpdG9yeToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgImJpdGJha2UiIDogWworICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogIm1hc3RlciIsCisgICAgICAgICAgICAgImdpdHVybCI6ICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIiwKKyAgICAgICAgICAgICAiYnJhbmNoIjogIm1hc3RlciIsCisgICAgICAgICAgICAgImRpcnBhdGgiOiAiIgorICAgICAgICAgfQorICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIG1vcmUgZGV0YWlsIG9uIGVhY2ggb2YgdGhlIGl0ZW1zIHRoYXQgY29tcHJpc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBCaXRCYWtlIHZlcnNpb246CisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TmFtZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPm5hbWU8L2ZpbGVuYW1lPikgdXNlZCB0byByZWZlciB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdmVyc2lvbiBvZiBCaXRCYWtlIHlvdSBhcmUgdXNpbmcgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG5hbWUgaXMgbmV2ZXIgZXhwb3NlZCB0aHJvdWdoIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2l0IFVSTDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgVVJMICg8ZmlsZW5hbWU+Z2l0dXJsPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgQml0QmFrZSBHaXQgcmVwb3NpdG9yeSBjbG9uZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIFRvYXN0ZXIgcHJvamVjdHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnJhbmNoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBHaXQgYnJhbmNoLCBvciByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5icmFuY2g8L2ZpbGVuYW1lPikgb2YgdGhlIEJpdEJha2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSB1c2VkIHdpdGggVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EaXJlY3RvcnkgUGF0aDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc3ViLWRpcmVjdG9yeSBvZiB0aGUgQml0QmFrZSByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+ZGlycGF0aDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIEdpdCBVUkwgaW5jbHVkZXMgbW9yZSB0aGFuIG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5LCB5b3UgbmVlZCB0byBzZXQgdGhpcyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBVUkwgZG9lcyBub3QgaW5jbHVkZSBtb3JlIHRoYW4gYSBzaW5nbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSwgeW91IGNhbiBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcnBhdGg8L2ZpbGVuYW1lPiB0byBhIG51bGwgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpLmUuICIiKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJyYW5jaDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJyYW5jaCBmb3IgdGhlIGxheWVyIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5icmFuY2g8L2ZpbGVuYW1lPikgdXNlZCB3aXRoIHRoZSByZWxlYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGZvciB0aGUgT3BlbkVtYmVkZGVkIGxheWVyIHNvdXJjZSwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAibWFzdGVyIiwgImZpZG8iLCBhbmQgImRpenp5IiBicmFuY2hlcyBhcmUgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGVmYXVsdCBMYXllcnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgZGVmYXVsdCBsYXllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+ZGVmYXVsdGxheWVyczwvZmlsZW5hbWU+KSBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZCB0byB0aGUgcHJvamVjdCBjb25maWd1cmF0aW9uIHdoZW4gYSBwcm9qZWN0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TGF5ZXIgU291cmNlIFByaW9yaXRpZXM8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQSBzcGVjaWZpY2F0aW9uIG9mCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdsYXllci1zb3VyY2UnPmxheWVyIHNvdXJjZTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXRpZXMgKDxmaWxlbmFtZT5sYXllcnNvdXJjZXByaW9yaXR5PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgZm9yIFRvYXN0ZXIgdG8gd29yayBhcyBpbnRlbmRlZCwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiSW1wb3J0ZWQgbGF5ZXJzIiBsYXllciBzb3VyY2Ugc2hvdWxkIGhhdmUgdGhlIGhpZ2hlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5LCB3aGljaCBtZWFucyB0aGF0IGxheWVycyBtYW51YWxseSBpbXBvcnRlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnMgd2l0aCB0aGUgIkltcG9ydCBsYXllciIgZnVuY3Rpb25hbGl0eSB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgICBhbHdheXMgYmUgdmlzaWJsZSBhbmQgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5IZWxwIFRleHQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlbHAgdGV4dCAoPGZpbGVuYW1lPmhlbHB0ZXh0PC9maWxlbmFtZT4pIHRoYXQgZXhwbGFpbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoYXQgdGhlIHJlbGVhc2UgZG9lcyB3aGVuIHNlbGVjdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBoZWxwIHRleHQgYXBwZWFycyBiZWxvdyB0aGUgcmVsZWFzZSBkcm9wLWRvd24KKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUgd2hlbiB5b3UgY3JlYXRlIGEgVG9hc3RlciBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGhlbHAgdGV4dCBzaG91bGQgYXNzaXN0IHVzZXJzIGluIG1ha2luZyB0aGUgY29ycmVjdAorICAgICAgICAgICAgICAgICAgICAgICAgZGVjaXNpb24gcmVnYXJkaW5nIHRoZSByZWxlYXNlIHRvIHVzZSBmb3IgYSBnaXZlbgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBzdW1tYXJpemUgd2hhdCBjb21wcmlzZXMgYSByZWxlYXNlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgZXhhbXBsZSBmcm9tIGEgVG9hc3RlciBKU09OIGZpbGUuCisgICAgICAgICAgICAgICAgVGhlIGNvbmZpZ3VyYXRpb24gbmFtZXMgdGhlIHJlbGVhc2UgIm1hc3RlciIgYW5kIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgIm1hc3RlciIgYnJhbmNoIHByb3ZpZGVkIGJ5IHRoZSBsYXllciBzb3VyY2Ugb2YgdHlwZQorICAgICAgICAgICAgICAgICJsYXllcmluZGV4Iiwgd2hpY2ggaXMgY2FsbGVkICJPcGVuRW1iZWRkZWQiLCBhbmQgc2V0cworICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+b3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPiBsYXllciBhcyB0aGUgb25lCisgICAgICAgICAgICAgICAgdG8gYmUgYWRkZWQgYnkgZGVmYXVsdCB0byBhbnkgcHJvamVjdHMgY3JlYXRlZCBpbiBUb2FzdGVyLgorICAgICAgICAgICAgICAgIFRoZSBCaXRCYWtlIHZlcnNpb24gdXNlZCB3b3VsZCBiZSBkZWZpbmVkIGFzIHNob3duIGVhcmxpZXIKKyAgICAgICAgICAgICAgICBpbiB0aGUgcHJldmlvdXMgbGlzdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICJyZWxlYXNlcyI6IFsKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAibmFtZSI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPcGVuRW1iZWRkZWQgbWFzdGVyIiwKKyAgICAgICAgICAgICAiYml0YmFrZSI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgICJicmFuY2giOiAibWFzdGVyIiwKKyAgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiBdLAorICAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBPcGVuRW1iZWRkZWQiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKKyAgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB1c2luZyB0aGUgT3BlbkVtYmVkZGVkIG1hc3RlciBicmFuY2gsIHdoZXJlIGFjdGl2ZSBkZXZlbG9wbWVudCB0YWtlcyBwbGFjZS4gVGhpcyBpcyBub3QgYSBzdGFibGUgYnJhbmNoLCBzbyB5b3VyIGJ1aWxkcyBtaWdodCBub3Qgd29yayBhcyBleHBlY3RlZC4iCisgICAgICAgICB9CisgICAgIF0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1qc29uLWZpbGVzJz4KKyAgICAgICAgPHRpdGxlPkpTT04gRmlsZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGFyZSBnb2luZyB0byBiZSB1c2luZyBUb2FzdGVyIGluIEJ1aWxkIE1vZGUsIGl0IG11c3QKKyAgICAgICAgICAgIGJlIGluaXRpYWxseSBjb25maWd1cmVkIGJlZm9yZSB1c2UuCisgICAgICAgICAgICBDb25maWd1cmF0aW9uIGN1c3RvbWl6ZXMgbGF5ZXIgc291cmNlIHNldHRpbmdzIGFuZCBUb2FzdGVyIGRlZmF1bHRzCisgICAgICAgICAgICBmb3IgYWxsIHVzZXJzIGFuZCBpcyBwZXJmb3JtZWQgYnkgdGhlIHBlcnNvbiByZXNwb25zaWJsZSBmb3IKKyAgICAgICAgICAgIFRvYXN0ZXIgQ29uZmlndXJhdGlvbiAoaS5lICB0aGUgVG9hc3RlciBBZG1pbmlzdHJhdG9yKS4KKyAgICAgICAgICAgIFRoZSBUb2FzdGVyIEFkbWluaXN0cmF0b3IgcGVyZm9ybXMgdGhpcyBjb25maWd1cmF0aW9uIHRocm91Z2ggdGhlCisgICAgICAgICAgICBEamFuZ28gYWRtaW5pc3RyYXRpb24gaW50ZXJmYWNlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBtYWtlIGl0IGVhc2llciB0byBpbml0aWFsbHkgc3RhcnQgVG9hc3RlciwgeW91IGNhbiBpbXBvcnQgYQorICAgICAgICAgICAgcHJlLWRlZmluZWQgY29uZmlndXJhdGlvbiBmaWxlIHVzaW5nIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1jb21tYW5kLWxvYWRjb25mJz48ZmlsZW5hbWU+bG9hZGNvbmY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNvbW1hbmQuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBmaWxlIGlzIGEgSlNPTi1mb3JtYXR0ZWQgdGV4dCBmaWxlIHdpdGgKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyBmaWVsZHMgdGhhdCBUb2FzdGVyIHJlY29nbml6ZXMuCisgICAgICAgICAgICAgICAgSXQgaXMgbm90IGEgZGF0YSBkdW1wIGZyb20gdGhlIGRhdGFiYXNlLCBzbyBpdCBjYW5ub3QgYmUKKyAgICAgICAgICAgICAgICBsb2FkZWQgZGlyZWN0bHkgaW4gdGhlIGRhdGFiYXNlLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCeSBjb252ZW50aW9uLCB0aGUgc3VwcGxpZWQgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgbmFtZWQKKyAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGUgVG9hc3RlciBBZG1pbmlzdHJhdG9yIGNhbiBjdXN0b21pemUgdGhlIGZpbGUgcHJpb3IgdG8gbG9hZGluZworICAgICAgICAgICAgaXQgaW50byBUb2FzdGVyLgorICAgICAgICAgICAgV2hlbiB5b3Ugc2V0IHVwIFRvYXN0ZXIgbG9jYWxseSB0byBydW4gaW4gQnVpbGQgTW9kZSwgdGhlIHN5c3RlbQorICAgICAgICAgICAgc3RhcnR1cCBzY3JpcHQgYWN0aXZlbHkgbG9va3MgZm9yIGNvbXBhdGlibGUgY29uZmlndXJhdGlvbiBmaWxlcworICAgICAgICAgICAgYW5kIHByb21wdHMgeW91IHRvIHNlbGVjdCBhIGZpbGUgdG8gbG9hZCBpZiBpdCBkZXRlY3RzIHRoYXQgdGhlCisgICAgICAgICAgICBkYXRhYmFzZSBoYXMgbm90IGJlZW4gY29uZmlndXJlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdqc29uLWZpbGUtY2hvaWNlcyc+CisgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbiBGaWxlIENob2ljZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaHJlZSB2ZXJzaW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGV4aXN0OgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZi90b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QncyA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIGNvbnRhaW5zIHRoZSBkZWZhdWx0IFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZm9yIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgYXJlIHByb21wdGVkIHRvIHNlbGVjdCB0aGlzIGZpbGUgZHVyaW5nIHRoZSBUb2FzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdXAgcHJvY2VzcyBpZiB5b3UgY2xvbmVkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JllPQ1RPX0dJVF9VUkw7L3Bva3k8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvdG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQncyA8ZmlsZW5hbWU+b3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZlcnNpb24gY29udGFpbnMgdGhlIGRlZmF1bHQgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZvciBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGFyZSBwcm9tcHRlZCB0byBzZWxlY3QgdGhpcyBmaWxlIGR1cmluZyB0aGUgVG9hc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHVwIHByb2Nlc3MgaWYgeW91IGhhZCBjbG9uZWQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5Ub2FzdGVyY29uZi5qc29uLnR4dC5wYXRjaDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGVkIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9GaWxlOlRvYXN0ZXJjb25mLmpzb24udHh0LnBhdGNoJz5GaWxlOlRvYXN0ZXJjb25mLmpzb24udHh0LnBhdGNoPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmVyc2lvbiBvZiB0aGUgZmlsZSBpcyB1c2VmdWwgYXMgYSBzYW1wbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZm9yIHdoZW4geW91IHdhbnQgdG8gc2V0IHVwIFRvYXN0ZXIgYXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgaG9zdGVkIHNlcnZpY2UgaW4gQnVpbGQgTW9kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2pzb24tc3RydWN0dXJlJz4KKyAgICAgICAgICAgIDx0aXRsZT5GaWxlIFN0cnVjdHVyZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+IGZpbGUgY29uc2lzdHMgb2YKKyAgICAgICAgICAgICAgICBlYXNpbHkgcmVhZGFibGUgYXJlYXM6IGNvbmZpZ3VyYXRpb24sIGxheWVyIHNvdXJjZXMsIEJpdEJha2UsCisgICAgICAgICAgICAgICAgZGVmYXVsdCByZWxlYXNlLCBhbmQgcmVsZWFzZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdqc29uLWNvbmZpZy1hcmVhJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbiBBcmVhPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgb2YgdGhlIEpTT04gZmlsZSBzZXRzIHdoaWNoIHZhcmlhYmxlcyBhcmUgZXhwb3NlZAorICAgICAgICAgICAgICAgICAgICB0byB1c2VycyB0aHJvdWdoIHRoZSBUb2FzdGVyIHdlYiBpbnRlcmZhY2UuCisgICAgICAgICAgICAgICAgICAgIFVzZXJzIGNhbiBlYXNpbHkgZWRpdCB0aGVzZSB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZXMgeW91IHNldCBoZXJlIGFyZSBkaXNwbGF5ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICJDb25maWd1cmF0aW9uIHZhcmlhYmxlcyIgcGFnZSBpbiBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICBNaW5pbWFsbHksIHlvdSBzaG91bGQgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCBhcHBlYXJzIHRvIHVzZXJzIGFzIHBhcnQgb2YgdGhlIHByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgcGFnZSBpbiBUb2FzdGVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBkZWZhdWx0IDxmaWxlbmFtZT5jb25maWc8L2ZpbGVuYW1lPiBhcmVhOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICJjb25maWciOiB7CisgICAgICAgICAiTUFDSElORSIgICAgICA6ICJxZW11eDg2IiwKKyAgICAgICAgICJESVNUUk8iICAgICAgIDogInBva3kiLAorICAgICAgICAgIklNQUdFX0ZTVFlQRVMiOiAiZXh0MyBqZmZzMiB0YXIuYnoyIiwKKyAgICAgICAgICJJTUFHRV9JTlNUQUxMX2FwcGVuZCI6ICIiLAorICAgICAgICAgIlBBQ0tBR0VfQ0xBU1NFUyI6ICJwYWNrYWdlX3JwbSIsCisgICAgICAgICAiU0RLTUFDSElORSIgICA6ICJ4ODZfNjQiCisgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdqc29uLWxheWVyc291cmNlcy1hcmVhJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+TGF5ZXIgU291cmNlcyBBcmVhPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgb2YgdGhlIEpTT04gZmlsZSBkZWZpbmVzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdsYXllci1zb3VyY2UnPmxheWVyIHNvdXJjZXM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgdXNlcy4KKyAgICAgICAgICAgICAgICAgICAgVG9hc3RlciByZWFkcyBsYXllciBpbmZvcm1hdGlvbiBmcm9tIGxheWVyIHNvdXJjZXMuCisgICAgICAgICAgICAgICAgICAgIFRocmVlIHR5cGVzIG9mIGxheWVyIHNvdXJjZXMgZXhpc3QgdGhhdCBUb2FzdGVyCisgICAgICAgICAgICAgICAgICAgIHJlY29nbml6ZXM6IExvY2FsLCBMYXllckluZGV4LCBhbmQgSW1wb3J0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBMb2NhbCBsYXllciBzb3VyY2UgcmVhZHMgbGF5ZXJzIGZyb20gR2l0IGNsb25lcworICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgb24geW91ciBsb2NhbCBkcml2ZS4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgYSBsb2NhbCBsYXllciBzb3VyY2UgZW5hYmxlcyB5b3UgdG8gZWFzaWx5IHRlc3QKKyAgICAgICAgICAgICAgICAgICAgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHNldHRpbmcgdXAgYSBob3N0ZWQgdmVyc2lvbiBvZiBUb2FzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBoYXZlIGEgbG9jYWwgbGF5ZXIgc291cmNlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBMYXllckluZGV4IGxheWVyIHNvdXJjZSB1c2VzIGEgUkVTVCBBUEkgZXhwb3NlZCBieQorICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMgb2YgdGhlIExheWVyIEluZGV4IGFwcGxpY2F0aW9uIChlLmcgdGhlIHB1YmxpYworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvJz48L3VsaW5rPikKKyAgICAgICAgICAgICAgICAgICAgdG8gcmVhZCBsYXllciBkYXRhLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgSW1wb3J0ZWQgbGF5ZXIgc291cmNlIGlzIHJlc2VydmVkIGZvciBsYXllciBkYXRhCisgICAgICAgICAgICAgICAgICAgIG1hbnVhbGx5IGludHJvZHVjZWQgYnkgdGhlIHVzZXIgb3IgVG9hc3RlciBBZG1pbmlzdHJhdG9yCisgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIEdVSS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBsYXllciBzb3VyY2UgbGV0cyB1c2VycyBpbXBvcnQgdGhlaXIgb3duIGxheWVycworICAgICAgICAgICAgICAgICAgICBhbmQgYnVpbGQgdGhlbSB3aXRoIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgbm90IHJlbW92ZSB0aGUgaW1wb3J0ZWQgbGF5ZXIgc291cmNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBkZWZhdWx0IDxmaWxlbmFtZT5sYXllcnNvdXJjZXM8L2ZpbGVuYW1lPiBhcmVhOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICJsYXllcnNvdXJjZXMiOiBbCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAiTG9jYWwgWW9jdG8gUHJvamVjdCIsCisgICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAibG9jYWwiLAorICAgICAgICAgICAgICJhcGl1cmwiOiAiLi4vLi4vIiwKKyAgICAgICAgICAgICAiYnJhbmNoZXMiOiBbIkhFQUQiLCAibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiXSwKKyAgICAgICAgICAgICAibGF5ZXJzIjogWworICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJvcGVuZW1iZWRkZWQtY29yZSIsCisgICAgICAgICAgICAgICAgICAgICAibG9jYWxfcGF0aCI6ICJtZXRhIiwKKyAgICAgICAgICAgICAgICAgICAgICJ2Y3NfdXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgICAgICAgICAgImRpcnBhdGgiOiAibWV0YSIKKyAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAibWV0YS15b2N0byIsCisgICAgICAgICAgICAgICAgICAgICAibG9jYWxfcGF0aCI6ICJtZXRhLXlvY3RvIiwKKyAgICAgICAgICAgICAgICAgICAgICJ2Y3NfdXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgICAgICAgICAgImRpcnBhdGgiOiAibWV0YS15b2N0byIKKyAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAibWV0YS15b2N0by1ic3AiLAorICAgICAgICAgICAgICAgICAgICAgImxvY2FsX3BhdGgiOiAibWV0YS15b2N0by1ic3AiLAorICAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgICAgICAgICAiZGlycGF0aCI6ICJtZXRhLXlvY3RvLWJzcCIKKyAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgXQorICAgICAgICAgfSwKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAibmFtZSI6ICJPcGVuRW1iZWRkZWQiLAorICAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImxheWVyaW5kZXgiLAorICAgICAgICAgICAgICJhcGl1cmwiOiAiaHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnL2xheWVyaW5kZXgvYXBpLyIsCisgICAgICAgICAgICAgImJyYW5jaGVzIjogWyJtYXN0ZXIiLCAiZmlkbyIsICJkaXp6eSJdCisgICAgICAgICB9LAorICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogIkltcG9ydGVkIGxheWVycyIsCisgICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAiaW1wb3J0ZWQiLAorICAgICAgICAgICAgICJhcGl1cmwiOiAiIiwKKyAgICAgICAgICAgICAiYnJhbmNoZXMiOiBbIm1hc3RlciIsICJmaWRvIiwgImRpenp5IiwgIkhFQUQiXQorCisgICAgICAgICB9CisgICAgIF0sCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdqc29uLWJpdGJha2UtYXJlYSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkJpdEJha2UgQXJlYTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmVhIG9mIHRoZSBKU09OIGZpbGUgZGVmaW5lcyB0aGUgdmVyc2lvbiBvZgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIFRvYXN0ZXIgdXNlcy4KKyAgICAgICAgICAgICAgICAgICAgQXMgc2hpcHBlZCwgVG9hc3RlciBpcyBjb25maWd1cmVkIHRvIHJlY29nbml6ZSBmb3VyCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb25zIG9mIEJpdEJha2U6IG1hc3RlciwgZmlkbywgZGl6enksIGFuZCBIRUFELgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhFQUQgaXMgYSBzcGVjaWFsIG9wdGlvbiB0aGF0IGJ1aWxkcyB3aGF0ZXZlciBpcworICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIG9uIGRpc2ssIHdpdGhvdXQgY2hlY2tpbmcgb3V0IGFueSByZW1vdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgZGVmYXVsdCA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGFyZWE6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgImJpdGJha2UiIDogWworICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogIm1hc3RlciIsCisgICAgICAgICAgICAgImdpdHVybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAiYnJhbmNoIjogIm1hc3RlciIsCisgICAgICAgICAgICAgImRpcnBhdGgiOiAiYml0YmFrZSIKKyAgICAgICAgIH0sCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAiZmlkbyIsCisgICAgICAgICAgICAgImdpdHVybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAiYnJhbmNoIjogImZpZG8iLAorICAgICAgICAgICAgImRpcnBhdGgiOiAiYml0YmFrZSIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogImRpenp5IiwKKyAgICAgICAgICAgICAiZ2l0dXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgICJicmFuY2giOiAiZGl6enkiLAorICAgICAgICAgICAgICJkaXJwYXRoIjogImJpdGJha2UiCisgICAgICAgICB9LAorICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogIkhFQUQiLAorICAgICAgICAgICAgICJnaXR1cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgImJyYW5jaCI6ICJIRUFEIiwKKyAgICAgICAgICAgICAiZGlycGF0aCI6ICJiaXRiYWtlIgorICAgICAgICAgfQorICAgICBdLAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nanNvbi1kZWZhdWx0LWFyZWEnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5EZWZhdWx0IEFyZWE8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgYXJlYSBvZiB0aGUgSlNPTiBmaWxlIGVzdGFibGlzaGVzIGEgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICByZWxlYXNlIHVzZWQgYnkgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgQXMgc2hpcHBlZCwgVG9hc3RlciB1c2VzIHRoZSAibWFzdGVyIiByZWxlYXNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBzdGF0ZW1lbnQgaW4gdGhlIEpTT04gZmlsZSB0aGF0IGVzdGFibGlzaGVzCisgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IHJlbGVhc2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgImRlZmF1bHRyZWxlYXNlIjogIm1hc3RlciIsCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdqc29uLXJlbGVhc2VzLWFyZWEnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5SZWxlYXNlcyBBcmVhPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgb2YgdGhlIEpTT04gZmlsZSBkZWZpbmVzIHRoZSB2ZXJzaW9ucyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBUb2FzdGVyIHJlY29nbml6ZXMuCisgICAgICAgICAgICAgICAgICAgIEFzIHNoaXBwZWQsIFRvYXN0ZXIgaXMgY29uZmlndXJlZCB0byB3b3JrIHdpdGggdGhlIGZvdXIKKyAgICAgICAgICAgICAgICAgICAgcmVsZWFzZXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1yZWxlYXNlcy1zdXBwb3J0ZWQnPlByZS1Db25maWd1cmVkIFJlbGVhc2VzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgZGVmYXVsdCA8ZmlsZW5hbWU+cmVsZWFzZXM8L2ZpbGVuYW1lPiBhcmVhOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICJyZWxlYXNlcyI6IFsKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAibmFtZSI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJZb2N0byBQcm9qZWN0IG1hc3RlciIsCisgICAgICAgICAgICAgImJpdGJha2UiOiAibWFzdGVyIiwKKyAgICAgICAgICAgICAiYnJhbmNoIjogIm1hc3RlciIsCisgICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIsICJtZXRhLXlvY3RvIiwgIm1ldGEteW9jdG8tYnNwIl0sCisgICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIFlvY3RvIFByb2plY3QiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKKyAgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB1c2luZyB0aGUgdGlwIG9mIHRoZSAmbHQ7YSBocmVmPVwiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvXCImZ3Q7WW9jdG8gUHJvamVjdCBtYXN0ZXIgYnJhbmNoJmx0Oy9hJmd0Oywgd2hlcmUgYWN0aXZlIGRldmVsb3BtZW50IHRha2VzIHBsYWNlLiBUaGlzIGlzIG5vdCBhIHN0YWJsZSBicmFuY2gsIHNvIHlvdXIgYnVpbGRzIG1pZ2h0IG5vdCB3b3JrIGFzIGV4cGVjdGVkLiIKKyAgICAgICAgIH0sCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAiZmlkbyIsCisgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIllvY3RvIFByb2plY3QgMS44IEZpZG8iLAorICAgICAgICAgICAgICJiaXRiYWtlIjogImZpZG8iLAorICAgICAgICAgICAgICJicmFuY2giOiAiZmlkbyIsCisgICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIsICJtZXRhLXlvY3RvIiwgIm1ldGEteW9jdG8tYnNwIl0sCisgICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIFlvY3RvIFByb2plY3QiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKKyAgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB0aXAgb2YgdGhlICZsdDthIGhyZWY9XCJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5L2xvZy8/aD1maWRvXCImZ3Q7WW9jdG8gUHJvamVjdCAxLjggXCJGaWRvXCImbHQ7L2EmZ3Q7IGJyYW5jaC4iCisgICAgICAgICB9LAorICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogImRpenp5IiwKKyAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiWW9jdG8gUHJvamVjdCAxLjcgRGl6enkiLAorICAgICAgICAgICAgICJiaXRiYWtlIjogImRpenp5IiwKKyAgICAgICAgICAgICAiYnJhbmNoIjogImRpenp5IiwKKyAgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiwgIm1ldGEteW9jdG8iLCAibWV0YS15b2N0by1ic3AiXSwKKyAgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgWW9jdG8gUHJvamVjdCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHdpdGggdGhlIHRpcCBvZiB0aGUgJmx0O2EgaHJlZj1cImh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3Bva3kvbG9nLz9oPWRpenp5XCImZ3Q7WW9jdG8gUHJvamVjdCAxLjcgXCJEaXp6eVwiJmx0Oy9hJmd0OyBicmFuY2guIgorICAgICAgICAgfSwKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAibmFtZSI6ICJsb2NhbCIsCisgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvY2FsIFlvY3RvIFByb2plY3QiLAorICAgICAgICAgICAgICJiaXRiYWtlIjogIkhFQUQiLAorICAgICAgICAgICAgICJicmFuY2giOiAiSEVBRCIsCisgICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIsICJtZXRhLXlvY3RvIiwgIm1ldGEteW9jdG8tYnNwIl0sCisgICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIFlvY3RvIFByb2plY3QiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKKyAgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB2ZXJzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IHlvdSBoYXZlIGNsb25lZCBvciBkb3dubG9hZGVkIHRvIHlvdXIgY29tcHV0ZXIuIgorICAgICAgICAgfQorICAgICBdCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci11c2VmdWwtY29tbWFuZHMnPgorICAgICAgICA8dGl0bGU+VXNlZnVsIENvbW1hbmRzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIGFkZGl0aW9uIHRvIHRoZSB3ZWIgdXNlciBpbnRlcmZhY2UgYW5kIHRoZSBzY3JpcHRzIHRoYXQgc3RhcnQKKyAgICAgICAgICAgIGFuZCBzdG9wIFRvYXN0ZXIsIGNvbW1hbmQtbGluZSBjb21tYW5kcyBleGlzdCB0aHJvdWdoIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IG1hbmFnZW1lbnQgc2NyaXB0LgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGdlbmVyYWwgZG9jdW1lbnRhdGlvbiBvbgorICAgICAgICAgICAgPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IGF0IHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuLzEuNy90b3BpY3Mvc2V0dGluZ3MvJz5EamFuZ288L3VsaW5rPgorICAgICAgICAgICAgc2l0ZS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHNldmVyYWwgPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IGNvbW1hbmRzIGhhdmUgYmVlbgorICAgICAgICAgICAgY3JlYXRlZCB0aGF0IGFyZSBzcGVjaWZpYyB0byBUb2FzdGVyIGFuZCBhcmUgdXNlZCB0byBjb250cm9sCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGFuZCBiYWNrLWVuZCB0YXNrcy4KKyAgICAgICAgICAgIFlvdSBjYW4gbG9jYXRlIHRoZXNlIGNvbW1hbmRzIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KSBhdAorICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UvbGliL21hbmFnZS5weTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRvY3VtZW50cyB0aG9zZSBjb21tYW5kcy4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHVzaW5nIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiBjb21tYW5kcyBnaXZlbgorICAgICAgICAgICAgICAgICAgICBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgeW91IG11c3QgYmUgc3VyZSB0aGF0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgd29ya2luZyBkaXJlY3RvcnkgaXMgc2V0IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBVc2luZyA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4gY29tbWFuZHMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5IGFsbG93cyBUb2FzdGVyIHRvIGZpbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyLnNxbGl0ZTwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzIGxvY2F0ZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG5vbi1kZWZhdWx0IGRhdGFiYXNlIGNvbmZpZ3VyYXRpb25zLCBpdCBpcyBwb3NzaWJsZQorICAgICAgICAgICAgICAgICAgICB0aGF0IHlvdSBjYW4gdXNlIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiBjb21tYW5kcworICAgICAgICAgICAgICAgICAgICBmcm9tIGEgZGlyZWN0b3J5IG90aGVyIHRoYW4gdGhlIEJ1aWxkIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgVG8gZG8gc28sIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG9hc3Rlcm1haW4vc2V0dGluZ3MucHk8L2ZpbGVuYW1lPiBmaWxlIG11c3QgYmUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZCB0byBwb2ludCB0byB0aGUgY29ycmVjdCBkYXRhYmFzZSBiYWNrZW5kLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWNvbW1hbmQtYnVpbGRzbGlzdCc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkc2xpc3Q8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YnVpbGRzbGlzdDwvZmlsZW5hbWU+IGNvbW1hbmQgbGlzdHMgYWxsIGJ1aWxkcworICAgICAgICAgICAgICAgIHRoYXQgVG9hc3RlciBoYXMgcmVjb3JkZWQuCisgICAgICAgICAgICAgICAgQWNjZXNzIHRoZSBjb21tYW5kIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGJ1aWxkc2xpc3QKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGNvbW1hbmQgcmV0dXJucyBhIGxpc3QsIHdoaWNoIGluY2x1ZGVzIG51bWVyaWMKKyAgICAgICAgICAgICAgICBpZGVudGlmaWNhdGlvbnMsIG9mIHRoZSBidWlsZHMgdGhhdCBUb2FzdGVyIGhhcyByZWNvcmRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICBjdXJyZW50IGRhdGFiYXNlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBydW4gdGhlIDxmaWxlbmFtZT5idWlsZHNsaXN0PC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgIGZpcnN0IHRvIGlkZW50aWZ5IGV4aXN0aW5nIGJ1aWxkcyBpbiB0aGUgZGF0YWJhc2UgYmVmb3JlCisgICAgICAgICAgICAgICAgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1jb21tYW5kLWJ1aWxkZGVsZXRlJz48ZmlsZW5hbWU+YnVpbGRkZWxldGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGFzc3VtZXMgZGVmYXVsdCByZXBvc2l0b3J5IGFuZCBidWlsZAorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBuYW1lczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9wb2t5L2J1aWxkCisgICAgICQgcHl0aG9uIC4uL2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGJ1aWxkc2xpc3QKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgeW91ciBUb2FzdGVyIGRhdGFiYXNlIGhhZCBvbmx5IG9uZSBidWlsZCwgdGhlIGFib3ZlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkc2xpc3Q8L2ZpbGVuYW1lPiBjb21tYW5kIHdvdWxkIHJldHVybiBzb21ldGhpbmcKKyAgICAgICAgICAgICAgICBsaWtlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAxOiBxZW11eDg2IHBva3kgY29yZS1pbWFnZS1taW5pbWFsCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItY29tbWFuZC1idWlsZGRlbGV0ZSc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkZGVsZXRlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJ1aWxkZGVsZXRlPC9maWxlbmFtZT4gY29tbWFuZCBkZWxldGVzIGRhdGEKKyAgICAgICAgICAgICAgICBhc3NvY2lhdGVkIHdpdGggYSBidWlsZC4KKyAgICAgICAgICAgICAgICBBY2Nlc3MgdGhlIGNvbW1hbmQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgYnVpbGRkZWxldGUgPHJlcGxhY2VhYmxlPmJ1aWxkX2lkPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGNvbW1hbmQgZGVsZXRlcyBhbGwgdGhlIGJ1aWxkIGRhdGEgZm9yIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+YnVpbGRfaWQ8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgdXNlZnVsIGZvciByZW1vdmluZyBvbGQgYW5kIHVudXNlZCBkYXRhIGZyb20KKyAgICAgICAgICAgICAgICB0aGUgZGF0YWJhc2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFByaW9yIHRvIHJ1bm5pbmcgdGhlIDxmaWxlbmFtZT5idWlsZGRlbGV0ZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tbWFuZCwgeW91IG5lZWQgdG8gZ2V0IHRoZSBJRCBhc3NvY2lhdGVkIHdpdGggYnVpbGRzCisgICAgICAgICAgICAgICAgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1jb21tYW5kLWJ1aWxkc2xpc3QnPjxmaWxlbmFtZT5idWlsZHNsaXN0PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgY29tbWFuZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWNvbW1hbmQtcGVyZic+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnBlcmY8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+cGVyZjwvZmlsZW5hbWU+IGNvbW1hbmQgbWVhc3VyZXMgVG9hc3RlcgorICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlLgorICAgICAgICAgICAgICAgIEFjY2VzcyB0aGUgY29tbWFuZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBwZXJmCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIGlzIGEgc2FuaXR5IGNoZWNrIHRoYXQgcmV0dXJucyBwYWdlIGxvYWRpbmcKKyAgICAgICAgICAgICAgICB0aW1lcyBpbiBvcmRlciB0byBpZGVudGlmeSBwZXJmb3JtYW5jZSBwcm9ibGVtcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWNvbW1hbmQtY2hlY2tzZXR0aW5ncyc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmNoZWNrc2V0dGluZ3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y2hlY2tzZXR0aW5nczwvZmlsZW5hbWU+IGNvbW1hbmQgdmVyaWZpZXMKKyAgICAgICAgICAgICAgICBleGlzdGluZyBUb2FzdGVyIHNldHRpbmdzLgorICAgICAgICAgICAgICAgIEFjY2VzcyB0aGUgY29tbWFuZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBjaGVja3NldHRpbmdzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIEJ1aWxkIE1vZGUsIFRvYXN0ZXIgdXNlcyBzZXR0aW5ncyB0aGF0IGFyZSBiYXNlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICBkYXRhYmFzZSB0byBjb25maWd1cmUgdGhlIGJ1aWxkaW5nIHRhc2tzLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y2hlY2tzZXR0aW5nczwvZmlsZW5hbWU+IGNvbW1hbmQgdmVyaWZpZXMgdGhhdAorICAgICAgICAgICAgICAgIHRoZSBkYXRhYmFzZSBzZXR0aW5ncyBhcmUgdmFsaWQgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSBoYXZlCisgICAgICAgICAgICAgICAgdGhlIG1pbmltYWwgaW5mb3JtYXRpb24gbmVlZGVkIHRvIHN0YXJ0IGEgYnVpbGQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIG9yZGVyIGZvciB0aGUgPGZpbGVuYW1lPmNoZWNrc2V0dGluZ3M8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgdG8gd29yaywgdGhlIGRhdGFiYXNlIG11c3QgYmUgY29ycmVjdGx5IHNldCB1cCBhbmQgbm90IGhhdmUKKyAgICAgICAgICAgICAgICBleGlzdGluZyBkYXRhLgorICAgICAgICAgICAgICAgIFRvIGJlIHN1cmUgdGhlIGRhdGFiYXNlIGlzIHJlYWR5LCB5b3UgY2FuIHJ1biB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmHigItnZS5weSBzeW5jZGIKKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmHigItnZS5weSBtaWdyYXRlIG9ybQorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYeKAi2dlLnB5IG1pZ3JhdGUgYmxkY29udHJvbAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBZnRlciBydW5uaW5nIHRoZXNlIGNvbW1hbmRzLCB5b3UgY2FuIHJ1biB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2hlY2tzZXR0aW5nczwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1jb21tYW5kLWxvYWRjb25mJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bG9hZGNvbmY8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bG9hZGNvbmY8L2ZpbGVuYW1lPiBjb21tYW5kIGxvYWRzIGFuCisgICAgICAgICAgICAgICAgZXhpc3RpbmcgVG9hc3RlciBjb25maWd1cmF0aW9uIGZpbGUgKEpTT04gZmlsZSkuCisgICAgICAgICAgICAgICAgWW91IG11c3QgcnVuIHRoaXMgb24gYSBuZXcgZGF0YWJhc2UgdGhhdCBkb2VzIG5vdCBoYXZlIGFueQorICAgICAgICAgICAgICAgIGRhdGEuCisgICAgICAgICAgICAgICAgUnVubmluZyB0aGlzIGNvbW1hbmQgb24gYW4gZXhpc3RpbmcgZGF0YWJhc2UgdGhhdCBoYXMgZGF0YQorICAgICAgICAgICAgICAgIHJlc3VsdHMgaW4gZXJyb3JzLgorICAgICAgICAgICAgICAgIEFjY2VzcyB0aGUgY29tbWFuZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBsb2FkY29uZiA8cmVwbGFjZWFibGU+ZmlsZXBhdGg8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmxvYWRjb25mPC9maWxlbmFtZT4gY29tbWFuZCBjb25maWd1cmVzIGEgZGF0YWJhc2UKKyAgICAgICAgICAgICAgICBiYXNlZCBvbiB0aGUgc3VwcGxpZWQgZXhpc3RpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1qc29uLWZpbGVzJz5KU09OIEZpbGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItY29tbWFuZC1ydW5idWlsZHMnPgorICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5ydW5idWlsZHM8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+cnVuYnVpbGRzPC9maWxlbmFtZT4gY29tbWFuZCBsYXVuY2hlcworICAgICAgICAgICAgICAgIHNjaGVkdWxlZCBidWlsZHMuCisgICAgICAgICAgICAgICAgQWNjZXNzIHRoZSBjb21tYW5kIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IHJ1bmJ1aWxkcworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnJ1bmJ1aWxkczwvZmlsZW5hbWU+IGNvbW1hbmQgY2hlY2tzIGlmCisgICAgICAgICAgICAgICAgc2NoZWR1bGVkIGJ1aWxkcyBleGlzdCBpbiB0aGUgZGF0YWJhc2UgYW5kIHRoZW4gbGF1bmNoZXMgdGhlbQorICAgICAgICAgICAgICAgIHBlciBzY2hlZHVsZS4KKyAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCByZXR1cm5zIGFmdGVyIHRoZSBidWlsZHMgc3RhcnQgYnV0IGJlZm9yZSB0aGV5CisgICAgICAgICAgICAgICAgY29tcGxldGUuCisgICAgICAgICAgICAgICAgVGhlIFRvYXN0ZXIgTG9nZ2luZyBJbnRlcmZhY2UgcmVjb3JkcyBhbmQgdXBkYXRlcyB0aGUgZGF0YWJhc2UKKyAgICAgICAgICAgICAgICB3aGVuIHRoZSBidWlsZHMgY29tcGxldGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc2V0dXAtYW5kLXVzZS54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc2V0dXAtYW5kLXVzZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY5ZDI0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zZXR1cC1hbmQtdXNlLnhtbApAQCAtMCwwICsxLDEwMjQgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSd0b2FzdGVyLW1hbnVhbC1zZXR1cC1hbmQtdXNlJz4KKworPHRpdGxlPlNldHRpbmcgVXAgYW5kIFVzaW5nIFRvYXN0ZXI8L3RpdGxlPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXRvYXN0ZXItaW4tYW5hbHlzaXMtbW9kZSc+CisgICAgICAgIDx0aXRsZT5Vc2luZyBUb2FzdGVyIGluIEFuYWx5c2lzIE1vZGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gdXNlIFRvYXN0ZXIgaW4gQW5hbHlzaXMgTW9kZQorICAgICAgICAgICAgYWZ0ZXIgc2V0dGluZyBUb2FzdGVyIHVwIGFzIGEgbG9jYWwgaW5zdGFuY2Ugb3IgYXMgYSBob3N0ZWQKKyAgICAgICAgICAgIHNlcnZpY2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy11cC1sb2NhbGx5LWFuZC1ydW5uaW5nLWluLWFuYWx5c2lzLW1vZGUnPgorICAgICAgICAgICAgPHRpdGxlPlNldHRpbmcgVXAgTG9jYWxseSBhbmQgUnVubmluZyBpbiBBbmFseXNpcyBNb2RlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzIHRvIHNldCB1cCBhIGxvY2FsIGluc3RhbmNlIG9mIFRvYXN0ZXIgYW5kCisgICAgICAgICAgICAgICAgdGhlbiBydW4gaW4gQW5hbHlzaXMgTW9kZToKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHJlcGFyZSB5b3VyIEJ1aWxkIFN5c3RlbTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3VyIHN5c3RlbSBoYXMgdGhlIFRvYXN0ZXIgcmVxdWlyZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICBieSBmb2xsb3dpbmcgdGhlIHN0ZXBzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItZXN0YWJsaXNoaW5nLXRvYXN0ZXItc3lzdGVtLWRlcGVuZGVuY2llcyc+RXN0YWJsaXNoaW5nIFRvYXN0ZXIgU3lzdGVtIERlcGVuZGVuY2llczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2V0IFNldCBVcCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdldCB0aGUgcmVxdWlyZW1lbnRzIHNldCB1cCBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCB0byBidWlsZCBpbWFnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyN5cC1yZXNvdXJjZXMnPlNldHRpbmcgVXAgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0IGZvciBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNvdXJjZSB5b3VyIEJ1aWxkIEVudmlyb25tZW50IFNldHVwIFNjcmlwdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgRnJvbSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5wb2t5L2J1aWxkPC9maWxlbmFtZT4pLCBzb3VyY2UgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCI+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQiPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RhcnQgVG9hc3Rlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgRnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCBUb2FzdGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSB0b2FzdGVyIHN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFydCBZb3VyIEJ1aWxkIFVzaW5nIEJpdEJha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIHN0YXJ0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgYnVpbGRzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IGltYWdlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1taW5pbWFsCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5PcGVuIFlvdXIgQnJvd3Nlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgT3BlbiB5b3VyIGJyb3dzZXIgYW5kIHZpc2l0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aHR0cDovL2hvc3Q6cG9ydC90b2FzdGVyZ3VpPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaG9zdCBhbmQgcG9ydCB2YWx1ZXMsIHNlZSB0aGUgb3V0cHV0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNvdXJjZSB0b2FzdGVyIHN0YXJ0PC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIFRvYXN0ZXIsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy10aGUtdG9hc3Rlci13ZWItaW50ZXJmYWNlJz5Vc2luZyB0aGUgVG9hc3RlciBXZWIgSW50ZXJmYWNlPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctdXAtYS1ob3N0ZWQtc2VydmljZS1hbmQtcnVubmluZy1pbi1hbmFseXNpcy1tb2RlJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIGEgSG9zdGVkIFNlcnZpY2UgYW5kIFJ1bm5pbmcgaW4gQW5hbHlzaXMgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgaG9zdGVkIHNlcnZpY2UgcmVzaWRlcyBvbiBhIHNoYXJlZCBzZXJ2ZXIgYW5kIGFsbG93cworICAgICAgICAgICAgICAgIG11bHRpcGxlIHVzZXJzIHRvIHRha2UgYWR2YW50YWdlIG9mIFRvYXN0ZXIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgeW91IG1pZ2h0IHdhbnQgdG8gaGF2ZSBtdWx0aXBsZQorICAgICAgICAgICAgICAgIGxvY2FsIGluc3RhbmNlcyBvZiB0aGUgVG9hc3RlciBMb2dnaW5nIEludGVyZmFjZSBydW5uaW5nIG9uCisgICAgICAgICAgICAgICAgdmFyaW91cyByZW1vdGUgYnVpbGQgbWFjaGluZXMsIGFuZCBoYXZlIHRob3NlIGxvY2FsIGluc3RhbmNlcworICAgICAgICAgICAgICAgIGFjY2VzcyBhbmQgdXNlIGEgc2luZ2xlIHdlYiBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgVG8gZG8gdGhpcywgeW91IG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBNYWludGFpbiBhIGNvbW1vbiBTUUwgZGF0YWJhc2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHVwIHNlcGFyYXRlIGluc3RhbmNlcyBvZiBCaXRCYWtlIHNlcnZlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBUb2FzdGVyIExvZ2dpbmcgSW50ZXJmYWNlcyBmb3IgZWFjaCBvZiB0aG9zZQorICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGUgQml0QmFrZSBzZXJ2ZXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBjb21tb24gU1FMIGRhdGFiYXNlIGFsbG93cyB0aGUgV2ViIHNlcnZlciB0byBzaG93IGRhdGEgZnJvbQorICAgICAgICAgICAgICAgIGFsbCB0aGUgdmFyaW91cyBCaXRCYWtlIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICBTZXR0aW5nIHRoZSBTUUwgZGF0YWJhc2Ugb3V0c2lkZSBvZiBhbnkKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgbWFpbnRhaW5zIGEgc2VwYXJhdGlvbiBiZXR3ZWVuIHRoZSB2YXJpb3VzIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICBUaGUgQml0QmFrZSBzZXJ2ZXJzLCB0aGUgU1FMIHNlcnZlciwgYW5kIHRoZSBXZWIgc2VydmVyIG9yCisgICAgICAgICAgICAgICAgc2VydmVycyBjYW4gYmUgcnVuIG9uIHNlcGFyYXRlIG1hY2hpbmVzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gc2V0IHVwIGFuZCBydW4gYSBob3N0ZWQgc2VydmljZSBhbmQgcnVuCisgICAgICAgICAgICAgICAgVG9hc3RlciBpbiBBbmFseXNpcyBNb2RlOgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3RlcHMgYXNzdW1lIGEgVG9hc3RlciBpbnN0YWxsYXRpb24gcGF0aCBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L29wdC9iaXRiYWtlLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHJlcGFyZSB5b3VyIEJ1aWxkIFN5c3RlbTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3VyIHN5c3RlbSBoYXMgdGhlIFRvYXN0ZXIgcmVxdWlyZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICBieSBmb2xsb3dpbmcgdGhlIHN0ZXBzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItZXN0YWJsaXNoaW5nLXRvYXN0ZXItc3lzdGVtLWRlcGVuZGVuY2llcyc+RXN0YWJsaXNoaW5nIFRvYXN0ZXIgU3lzdGVtIERlcGVuZGVuY2llczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2V0IFNldCBVcCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdldCB0aGUgcmVxdWlyZW1lbnRzIHNldCB1cCBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCB0byBidWlsZCBpbWFnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyN5cC1yZXNvdXJjZXMnPlNldHRpbmcgVXAgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0IGZvciBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgYW5kIFNldCB1cCB0aGUgRGF0YWJhc2UgU2VydmVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBhbnkgU1FMIHNlcnZlciBvdXQgb2YgdGhlIGJveC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm15c3FsLXNlcnZlcjwvZmlsZW5hbWU+IGJlY2F1c2UgaXQgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYWR2YW50YWdlcyBvZiBhZHZhbmNlZCBTUUwgZmVhdHVyZXMgYWxvbmcgd2l0aCBhCisgICAgICAgICAgICAgICAgICAgICAgICBmYXN0IGFuZCByZWxpYWJsZSBkYXRhYmFzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHNldHRpbmcgdXAgPGZpbGVuYW1lPm15c3FsLXNlcnZlcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBpcyBtb3JlIGNvbXBsZXggYW5kIG1pZ2h0IHJlcXVpcmUgYSBEYXRhYmFzZQorICAgICAgICAgICAgICAgICAgICAgICAgQWRtaW5pc3RyYXRvciB0byB0dW5lIGl0LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFub3RoZXIgc3VwcG9ydGVkIGRhdGFiYXNlIGJhY2tlbmQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zcWxpdGUzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBXaXRoIDxmaWxlbmFtZT5zcWxpdGUzPC9maWxlbmFtZT4sIHlvdSBoYXZlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW50YWdlIG9mIG5vIGNvbmZpZ3VyYXRpb24gYW5kIGFuIGVhc3kgaW5zdGFsbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgVG9hc3RlciBzdGlsbCByZXF1aXJlcyBkaXJlY3QgYWNjZXNzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYmFja2VuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+c3FsaXRlPC9maWxlbmFtZT4gYmFja2VuZCBpcyBhbHNvIHNsb3dlcgorICAgICAgICAgICAgICAgICAgICAgICAgYXMgY29tcGFyZWQgdG8gPGZpbGVuYW1lPm15c3FsLXNlcnZlcjwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhcyBubyB0cmFuc2FjdGlvbmFsIHN1cHBvcnQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IHNob3VsZCBzZXQgdXAgcHJvcGVyIHVzZXJuYW1lIGFuZCBwYXNzd29yZAorICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzIG9uIHRoZSBzaGFyZWQgZGF0YWJhc2UgZm9yIGV2ZXJ5b25lIHRoYXQgd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgYmUgdXNpbmcgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIGFkbWluaXN0cmF0b3IgcmlnaHRzIGZvciB0aGUgcm9vdCBhY2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgbm90IHRoZSBzYW1lIHRoaW5nIGFzIHJvb3QgYWNjZXNzIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGluc3RhbGxzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXlzcWwtc2VydmVyPC9maWxlbmFtZT4gYW5kIHNldHMgdXAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvbWUgdXNlciBhY2NvdW50cyBhbmQgdGhlIGRhdGFiYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGFwdC1nZXQgaW5zdGFsbCBteXNxbC1zZXJ2ZXIKKyAgICAgJCBteXNxbCAtdSByb290CisgICAgIG15c3FsPiBDUkVBVEUgVVNFUiAnbmV3dXNlcidAJ2xvY2FsaG9zdCcgSURFTlRJRklFRCBCWSAncGFzc3dvcmQnOworICAgICBteXNxbD4gR1JBTlQgQUxMIFBSSVZJTEVHRVMgT04gKiAuICogVE8gJ25ld3VzZXInQCdsb2NhbGhvc3QnOworICAgICBteXNxbD4gR1JBTlQgQUxMIFBSSVZJTEVHRVMgT04gKiAuICogVE8gJ25ld3VzZXInQCdsb2NhbGhvc3QnOworICAgICBteXNxbD4gQ1JFQVRFIERBVEFCQVNFICd0b2FzdGVyJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIGEgc2VwYXJhdGUgY2xvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtcmVwb3NpdG9yaWVzJz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgRGF0YWJhc2UgU2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjbG9uZSBpcyBvbmx5IHVzZWQgZm9yIGdldHRpbmcgdGhlIGxhdGVzdCBUb2FzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoaXMgdXAgdXNpbmcgdGhlIGZvbGxvd2luZyBHaXQgY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gc2V0IHVwIHRoZSBkaXJlY3Rvcnkgb3V0c2lkZSBvZiBhbnkKKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgc2VwYXJhdGVseSBjbG9uZWQgdHJlZSBmb3IgdGhlIERhdGFiYXNlIFNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkaXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9zZXR0aW5ncy5weTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIHNvIHRoYXQgdGhlIDxmaWxlbmFtZT5EQVRBQkFTRVM8L2ZpbGVuYW1lPiB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzIHRvIHRoZSBwcmV2aW91c2x5IGNyZWF0ZWQgZGF0YWJhc2Ugc2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZXN0YWJsaXNoZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVhcmxpZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2F0IC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9zZXR0aW5ncy5weQorICAgICAgICAuLi4KKyAgICAgREFUQUJBU0VTID0geworICAgICAgICAgJ2RlZmF1bHQnOiB7CisgICAgICAgICAgICAgJ0VOR0lORSc6ICdkamFuZ28uZGIuYmFja2VuZHMubXlzcWwnLAorICAgICAgICAgICAgICdOQU1FJzogJ3RvYXN0ZXInLAorICAgICAgICAgICAgICdVU0VSJzogJ25ld3VzZXInLAorICAgICAgICAgICAgICdQQVNTV09SRCc6ICdwYXNzd29yZCcsCisgICAgICAgICAgICAgJ0hPU1QnOiAnMTkyLjE2OC4wLjI1JywKKyAgICAgICAgICAgICAnUE9SVCc6ICczMzA2JywKKyAgICAgICAgIH0KKyAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbnN0YWxsIGFuZCBTZXQgVXAgdGhlIFdlYiBTZXJ2ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBpbnN0YWxsIGFuZCBzZXQgdXAgYSBmcm9udC1lbmQgd2ViIHNlcnZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VydmVyIGFsbG93cyBmb3IgbG9hZCBiYWxhbmNpbmcgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aS10aHJlYWRpbmcgb3ZlciBUb2FzdGVyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuLzEuNy9ob3d0by9kZXBsb3ltZW50L3dzZ2kvJz48ZmlsZW5hbWU+ZGphbmdvPC9maWxlbmFtZT4gV1NHSTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgdXNlcyBBcGFjaGUgd2ViIHNlcnZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBhcHQtZ2V0IGluc3RhbGwgYXBhY2hlMiBsaWJhcGFjaGUyLW1vZC13c2dpCisgICAgICQgYTJlbm1vZCB3c2dpCisgICAgICQgY2F0IC9ldGMvYXBhY2hlMi9zaXRlcy1hdmFpbGFibGUvMDAwLWRlZmF1bHQuY29uZgorCisgICAgICAgIC4uLgorCisgICAgICMgdGhlIFdTR0lQeXRob25QYXRoIGlzIGdsb2JhbAorICAgICBXU0dJUHl0aG9uUGF0aCAvb3B0L2JpdGJha2UvbGliL3RvYXN0ZXIvCisKKyAgICAgICAgLi4uCisKKyAgICAgI3NuaXAgLSBpbiBWaXJ0dWFsSG9zdAorICAgICBXU0dJU2NyaXB0QWxpYXMgLyAvb3B0L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vd3NnaS5weQorCisgICAgICZsdDtEaXJlY3RvcnkgLy9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi8mZ3Q7CisgICAgICAgICAmbHQ7RmlsZXMgd3NnaS5weSZndDsKKyAgICAgICAgICAgICBSZXF1aXJlIGFsbCBncmFudGVkCisgICAgICAgICAmbHQ7L0ZpbGVzJmd0OworICAgICAmbHQ7L0RpcmVjdG9yeSZndDsKKworICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGNvbGxlY3Qgc3RhdGljIG1lZGlhIGZyb20gVG9hc3RlciBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGNvbmZpZ3VyaW5nIEFwYWNoZSB0byBzZXJ2ZSB0aGF0IHN0YXRpYworICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWE6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbWtkaXIgL3Zhci93d3cuaHRtbC9zdGF0aWMgJmFtcDsmYW1wOyBjZCAvdmFyL3d3dy5odG1sL3N0YXRpYworICAgICAkIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgY29sbGVjdHN0YXRpYworICAgICAkIGNhdCAvZXRjL2FwYWNoZTIvc2l0ZXMtYXZhaWxhYmxlLzAwMC1kZWZhdWx0LmNvbmYKKworICAgICAgICAuLi4KKworICAgICAjIGluIFZpcnR1YWxIb3N0LCBBSEVBRCBvZiB0aGUgV1NHSVNjcmlwdEFsaWFzIGRlZmluaXRpb24KKyAgICAgQWxpYXMgL3N0YXRpYy8gL3Zhci93d3cuaHRtbC9zdGF0aWMvCisKKyAgICAgJmx0O0RpcmVjdG9yeSAvdmFyL3d3dy5odG1sL3N0YXRpYy8mZ3Q7CisgICAgIFJlcXVpcmUgYWxsIGdyYW50ZWQKKyAgICAgJmx0Oy9EaXJlY3RvcnkmZ3Q7CisKKyAgICAgICAgLi4uCisKKyAgICAgV1NHSVNjcmlwdCBBbGlhcyAvIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi93c2dpLnB5CisKKyAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFydCBUb2FzdGVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTeW5jaHJvbml6ZSB0aGUgZGF0YWJhc2VzIGZvciB0b2FzdGVyLCBhbmQgdGhlbiBzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgdXAgdGhlIHdlYiBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBjb250aW51ZXMgd2l0aCB0aGUgYXNzdW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cyBmcm9tIHRoZSBwcmV2aW91cyBzdGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCAvb3B0L2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IHN5bmNkYgorICAgICAkIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBvcm0KKyAgICAgJCAvb3B0L2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IG1pZ3JhdGUgYmxkY29udHJvbAorCisgICAgICQgc2VydmljZSBhcGFjaGUyIHJlc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBnZW5lcmFsIGRvY3VtZW50YXRpb24gb24KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiBhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8xLjcvcmVmL2RqYW5nby1hZG1pbi8nPkRqYW5nbzwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBzaXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBvbiBUb2FzdGVyLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4gY29tbWFuZHMsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci11c2VmdWwtY29tbWFuZHMnPlVzZWZ1bCBDb21tYW5kczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RW5hYmxlIEJ1aWxkIExvZ2dpbmcgdG8gdGhlIENvbW1vbiBTUUwgU2VydmVyIGZvciBFYWNoIEJ1aWxkIERpcmVjdG9yeSB5b3UgYXJlIFVzaW5nOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLXRvYXN0ZXInPjxmaWxlbmFtZT50b2FzdGVyPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgYW5kIGJ1aWxkIGhpc3RvcnkgYXJlIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGRvbmUgaW4gYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRvYXN0ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUgdGhhdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSB0b2FzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RhcnQ8L2ZpbGVuYW1lPiBjb21tYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoYXQgbGl2ZXMgaW5zaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPi9jb25mL3RvYXN0ZXIuY29uZjwvZmlsZW5hbWU+LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoYXQgZmlsZSBzaG91bGQgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVQgKz0gInRvYXN0ZXIgYnVpbGRoaXN0b3J5IgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGJ1aWxkIGhpc3RvcnksIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNtYWludGFpbmluZy1idWlsZC1vdXRwdXQtcXVhbGl0eSc+TWFpbnRhaW5pbmcgQnVpbGQgT3V0cHV0IFF1YWxpdHk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hbnVhbC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgYWxzbyBuZWVkIHRvIHBvaW50IHRvIHRoZSBkYXRhYmFzZSB0aGF0IHlvdSBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwIGluIHN0ZXAgMy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZG8gdGhpcyBieSBleHBvcnRpbmcgdGhlIDxmaWxlbmFtZT5EQVRBQkFTRV9VUkw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZXhwb3J0IERBVEFCQVNFX1VSTD1teXNxbDovL25ld3VzZXI6cGFzc3dvcmRAMTkyLjE2OC4wLjI1OjMzMDYvdG9hc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGFzc3VtZXMgdGhhdCB5b3UgYXJlIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXlzcWwtc2VydmVyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgSVAgYWRkcmVzcyBzaG91bGQgYmUgdGhlIElQIGFkZHJlc3Mgb2YgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2Ugc2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U291cmNlIHlvdXIgQnVpbGQgRW52aXJvbm1lbnQgU2V0dXAgU2NyaXB0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBGcm9tIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb24gZWFjaCBvZiB0aGUgYnVpbGQgc3lzdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5wb2t5L2J1aWxkPC9maWxlbmFtZT4pLCBzb3VyY2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCI+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQiPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YXJ0IHRoZSBCaXRCYWtlIFNlcnZlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnQgdGhlIEJpdEJha2Ugc2VydmVyIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC0tcG9zdHJlYWQgY29uZi90b2FzdGVyLmNvbmYgLS1zZXJ2ZXItb25seSAtdCB4bWxycGMgLUIgbG9jYWxob3N0OjAgJmFtcDsmYW1wOyBleHBvcnQgQkJTRVJWRVI9bG9jYWxob3N0Oi0xCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFydCB0aGUgTG9nZ2luZyBTZXJ2ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0IHRoZSBUb2FzdGVyIExvZ2dpbmcgSW50ZXJmYWNlIHVzaW5nIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbm9odXAgYml0YmFrZSAtLW9ic2VydmUtb25seSAtdSB0b2FzdGVydWkgPnRvYXN0ZXJfdWkubG9nICZhbXA7CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBoYXJkLWNvZGVkIHBvcnRzIGFyZSB1c2VkIGluIHRoZSBCaXRCYWtlIG9wdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB0aGVyZSBpcyBlbm91Z2ggY29kZSB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b2Rpc2NvdmVyeTwvZmlsZW5hbWU+IGZvciBCaXRCYWtlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9pbmcgc28gcHJldmVudHMgY29sbGlzaW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YXJ0IEJ1aWxkcyBVc2luZyBCaXRCYWtlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCB0byBzdGFydCBhCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBvbiBhIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGJ1aWxkcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBpbWFnZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgYXJlIGZpbmlzaGVkIHdpdGggYSBidWlsZCBpbiBhIGdpdmVuCisgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBEaXJlY3RvcnksIGJlIHN1cmUgdG8gPGZpbGVuYW1lPmtpbGw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEJpdEJha2Ugc2VydmVyIGZvciB0aGF0IGJ1aWxkIGFyZWE6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtbQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIFRvYXN0ZXIgd2ViIGludGVyZmFjZSwKKyAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLXRoZS10b2FzdGVyLXdlYi1pbnRlcmZhY2UnPlVzaW5nIHRoZSBUb2FzdGVyIFdlYiBJbnRlcmZhY2U8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmctdG9hc3Rlci1pbi1idWlsZC1tb2RlJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIFRvYXN0ZXIgaW4gQnVpbGQgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byB1c2UgVG9hc3RlciBpbiBCdWlsZCBNb2RlCisgICAgICAgICAgICBhZnRlciBzZXR0aW5nIFRvYXN0ZXIgdXAgYXMgYSBsb2NhbCBpbnN0YW5jZSBvciBhcyBhIGhvc3RlZAorICAgICAgICAgICAgc2VydmljZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZXR0aW5nLXVwLWxvY2FsbHktYW5kLXJ1bm5pbmctaW4tYnVpbGQtbW9kZSc+CisgICAgICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCBMb2NhbGx5IGFuZCBSdW5uaW5nIGluIEJ1aWxkIE1vZGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gc2V0IHVwIGEgbG9jYWwgaW5zdGFuY2Ugb2YgVG9hc3RlciBhbmQKKyAgICAgICAgICAgICAgICB0aGVuIHJ1biBpbiBCdWlsZCBNb2RlOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwYXJlIHlvdXIgQnVpbGQgU3lzdGVtOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdXIgc3lzdGVtIGhhcyB0aGUgVG9hc3RlciByZXF1aXJlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGZvbGxvd2luZyB0aGUgc3RlcHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1lc3RhYmxpc2hpbmctdG9hc3Rlci1zeXN0ZW0tZGVwZW5kZW5jaWVzJz5Fc3RhYmxpc2hpbmcgVG9hc3RlciBTeXN0ZW0gRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZXQgU2V0IFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgR2V0IHRoZSByZXF1aXJlbWVudHMgc2V0IHVwIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHRvIGJ1aWxkIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3lwLXJlc291cmNlcyc+U2V0dGluZyBVcCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgZm9yIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RhcnQgVG9hc3Rlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgRnJvbSB0aGUgcm9vdCBvZiB0aGUgc291cmNlIGRpcmVjdG9yeSAoZS5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS88L2ZpbGVuYW1lPiksIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZS9iaW4vdG9hc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIGEgU3VwZXJ1c2VyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBEamFuZ28gd2lsbCBhc2sgeW91IGlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIHN1cGVydXNlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGJ1dCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlIGEgc3VwZXJ1c2VyLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIHN1cGVydXNlciB0byBhY2Nlc3MgdGhlIERqYW5nbworICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5pc3RyYXRpb24gaW50ZXJmYWNlIGFuZCBtYWtlIGNoYW5nZXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZWxlY3QgdGhlIEJ1aWxkIExvZyBEaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgYXNrcyB5b3UgdG8gc3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgd2FudCB0byBzdG9yZSB0aGUgYnVpbGQgbG9nIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NpbmcgYSBkaXJlY3RvcnkgZm9yIHRoZXNlIGZpbGVzIG1ha2VzIHN1cmUgdGhleQorICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGFsd2F5cyBhdmFpbGFibGUgdG8geW91LgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBjaG9vc2UgYSBkaXJlY3RvcnksIHRoZSBsb2dzIGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgZGlzYXBwZWFyIChlLmcuIGRlbGV0aW5nIHRoZSBCdWlsZCBEaXJlY3RvcnkpLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPldoZW4gVG9hc3RlciBwcm9tcHRzIHlvdSBmb3IgdGhlIEJ1aWxkIExvZworICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LCB5b3UgY2FuIHNlbGVjdCB0aGUgc3VnZ2VzdGVkIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIHByb3ZpZGUgYSBwYXRoIHRvIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNwZWNpZnkgdGhlIExheWVyIENoZWNrb3V0IERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBhc2tzIHlvdSB0byBzcGVjaWZ5IHRoZSBkaXJlY3RvcnkgaW50byB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzIGFyZSBjaGVja2VkIG91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgY2xvbmVzIGFueSBsYXllcnMgbmVlZGVkIGZvciB5b3VyIGJ1aWxkcworICAgICAgICAgICAgICAgICAgICAgICAgaW5zaWRlIHRoaXMgZGlyZWN0b3J5LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPldoZW4gVG9hc3RlciBwcm9tcHRzIHlvdSBmb3IgdGhlIExheWVyCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja291dCBkaXJlY3RvcnksIHlvdSBjYW4gc2VsZWN0IHRoZSBzdWdnZXN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgb3IgcHJvdmlkZSBhIHBhdGggdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3BlY2lmeSB0aGUgQnVpbGQgRGlyZWN0b3J5IFBhdGg6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgYXNrcyB5b3UgdG8gc3BlY2lmeSB0aGUgcGF0aCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VsZWN0IHRoZSBzdWdnZXN0ZWQgZGVmYXVsdCBvciBwcm92aWRlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2hvb3NlIFdoZXRoZXIgb3Igbm90IHRvIEltcG9ydCBhIERlZmF1bHQgVG9hc3RlciBDb25maWd1cmF0aW9uIEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgYXNrcyB5b3UgaWYgeW91IHdhbnQgdG8gaW1wb3J0IGEgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIGNvbmZpZ3VyYXRpb25zIGFyZSBzdG9yZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEpTT04gZmlsZXMgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEpTT04gZmlsZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0b2FzdGVyLWpzb24tZmlsZXMnPkpTT04gRmlsZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuIHNraXAgaW1wb3J0aW5nIGEgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICBieSBlbnRlcmluZyAiMCIgYXQgdGhlIHByb21wdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGltcG9ydCBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIGxpc3RlZCBkdXJpbmcgdGhpcyBzdGVwLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHdheXMgYW1lbmQgdGhlIGltcG9ydGVkIGNvbmZpZ3VyYXRpb24gZHVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBhIGxhdGVyIHN0YWdlIHRocm91Z2ggdGhlIERqYW5nbyBhZG1pbmlzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIERqYW5nbywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMS43Lyc+ZG9jdW1lbnRhdGlvbjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGZpbmQgaW5mb3JtYXRpb24gb24gVG9hc3Rlci1zcGVjaWZpYworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IGNvbW1hbmRzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItdXNlZnVsLWNvbW1hbmRzJz5Vc2VmdWwgQ29tbWFuZHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9wZW4gdGhlIEJyb3dzZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vIGJyb3dzZXIgd2luZG93IGFwcGVhcnMsIG9wZW4geW91ciBmYXZvcml0ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NlciBhbmQgZW50ZXIgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgaHR0cDovL2xvY2FsaG9zdDo4MDAwL3RvYXN0ZXJndWkKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHVzZSB0aGUgVG9hc3RlciB3ZWIgaW50ZXJmYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZXR0aW5nLXVwLWEtaG9zdGVkLXNlcnZpY2UtYW5kLXJ1bm5pbmctaW4tYnVpbGQtbW9kZSc+CisgICAgICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCBhIEhvc3RlZCBTZXJ2aWNlIGFuZCBSdW5uaW5nIGluIEJ1aWxkIE1vZGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gc2V0IHVwIGEgaG9zdGVkIHNlcnZpY2UgYW5kIHJ1biBUb2FzdGVyCisgICAgICAgICAgICAgICAgaW4gQnVpbGQgTW9kZToKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHJlcGFyZSB5b3VyIEJ1aWxkIFN5c3RlbTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3VyIHN5c3RlbSBoYXMgdGhlIFRvYXN0ZXIgcmVxdWlyZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICBieSBmb2xsb3dpbmcgdGhlIHN0ZXBzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItZXN0YWJsaXNoaW5nLXRvYXN0ZXItc3lzdGVtLWRlcGVuZGVuY2llcyc+RXN0YWJsaXNoaW5nIFRvYXN0ZXIgU3lzdGVtIERlcGVuZGVuY2llczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2V0IFNldCBVcCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdldCB0aGUgcmVxdWlyZW1lbnRzIHNldCB1cCBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCB0byBidWlsZCBpbWFnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyN5cC1yZXNvdXJjZXMnPlNldHRpbmcgVXAgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0IGZvciBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJlIFN1cmUgTWFuYWdlbWVudCBpcyBFbmFibGVkOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHJ1bm5pbmcgVG9hc3RlciB1bmRlciBBcGFjaGUsIHlvdSBuZWVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBiZSBzdXJlIG1hbmFnZW1lbnQgaXMgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGVuYWJsZSBtYW5hZ2VtZW50LCBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NQU5BR0VEPC9maWxlbmFtZT4gdG8gIlRydWUiIGJ5IGFkZGluZworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlL2xpYi90b2FzdGVyL3NldHRpbmdzLnB5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1BTkFHRUQ9IlRydWUiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZXQgVXAgVG9hc3RlciBmb3IgTm9ybWFsIFVzYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBjb25maWd1cmUgZWFjaCBidWlsZCBlbnZpcm9ubWVudCwgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXMsIGFuZCBCaXRCYWtlIHZlcnNpb25zLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlZlcmlmeSB0aGF0IHlvdXIgcmVsZWFzZXMgaGF2ZSBiZWVuIGxvYWRlZCBjb3JyZWN0bHkgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSBUb2FzdGVyIHdlYiBpbnRlcmZhY2UgdG8gY3JlYXRlIGEgbmV3CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2sgdGhlICJSZWxlYXNlcyIgZHJvcGRvd24gbWVudSB0byBiZSBzdXJlIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld2x5IHNwZWNpZmllZCByZWxlYXNlcyBleGlzdC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3Ugd2FudCB0byB1c2UgdGhlIGFkbWluaXN0cmF0aW9uIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgc3RlcCwgaGVyZSBpcyBhIHNldCBvZiBleGFtcGxlIGNvbW1hbmRzCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHNvbWUgZGVzY3JpcHRpb25zIGFzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgQ3JlYXRlIHRoZSB1c2VyIHVuZGVyIHdoaWNoIHRoZSBidWlsZHMgd2lsbCBydW4KKyAgICAgJCBhZGR1c2VyIHBva3kKKworICAgICAjIEJyaW5nIHVwIHRoZSBhZG1pbmlzdHJhdGlvbiBpbnRlcmZhY2UKKyAgICAgJHhkZy1vcGVuIGh0dHA6Ly88cmVwbGFjZWFibGU+c2VydmVyLWFkZHJlc3M8L3JlcGxhY2VhYmxlPi9hZG1pbi8KKworICAgICAjIExvZ2luIHdpdGggdGhlIGFkbWluIHVzZXIgcHJldmlvdXNseSBjcmVhdGVkCisKKyAgICAgIyBHbyB0byB0aGUgQnVpbGRFbnZpcm9ubWVudCBvYmplY3QgaW4gQnVpbGQgRW52aXJvbm1lbnRzIGFuZAorICAgICAjIHNldCBhZGRyZXNzIHRvIGxvY2FsIGhvc3QsIHNvdXJjZWRpciB0byAvaG9tZS9wb2t5LCBhbmQKKyAgICAgIyBidWlsZGRpciB0byAvaG9tZS9wb2t5YnVpbGQuCisgICAgICMKKyAgICAgIyBTYXZlIHlvdXIgY2hhbmdlcyBhbmQgZXhpdAorCisgICAgICMgR28gdG8gSG9tZSwgTGF5ZXIgU291cmNlcyBhbmQgc2VsZWN0IGFkZCBMYXllciBTb3VyY2UKKyAgICAgIyBOYW1lOiBPcGVuRW1iZWRkZWQsIFNvdXJjZXR5cGU6IGxheWVyaW5kZXgsCisgICAgICMgQXBpdXJsOiBodHRwOi8vbGF5ZXJzIG9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9hcGkvCisgICAgICMgU2F2ZSB5b3VyIGNoYW5nZXMgYW5kIGV4aXQKKworICAgICAjIEdvIHRvIEhvbWUsIEJpdGJha2UgVmVyc2lvbnMsIEFkZCBiaXRiYWtlIHZlcnNpb247CisgICAgICMgVGFrZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGZyb206IGh0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlL3JlZnMvaGVhZHMsCisgICAgICMgVGhpcyBleGFtcGxlIGFzc3VtZXMgIm1hc3RlciIgdmVyc2lvbi4KKyAgICAgIyBzZXQgTmFtZTogbWFzdGVyLCBHaXR1cmwgZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZQorICAgICAjIGJyYW5jaCBtYXN0ZXIsIGRpcnBhdGggLworICAgICAjIFNhdmUgeW91ciBjaGFuZ2VzIGFuZCBleGl0CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgYWxzbyBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgcHJvamVjdCByZWxlYXNlcywgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IHZhcmlhYmxlcywgYW5kIHVwZGF0ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgaW5kZXguCisgICAgICAgICAgICAgICAgICAgICAgICBDb250aW51aW5nIHdpdGggdGhlIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgR28gdG8gSG9tZSwgUmVsZWFzZXMsIEFkZCByZWxlYXNlCisgICAgICMgc2V0IE5hbWU6IG1hc3RlciwgRGVzY3JpcHRpb246IEN1cnJlbnQgbWFzdGVyIHJlbGVhc2UsIHNlbGVjdCBCaXRiYWtlIFZlcnNpb24sCisgICAgICMgYW5kIEJyYW5jaDogbWFzdGVyCisgICAgICMgU2F2ZSB5b3VyIGNoYW5nZXMgYW5kIGV4aXQKKworICAgICAjIEdvIHRvIEhvbWUsIFRvYXN0ZXIgU2V0dGluZ3MsIHNlbGVjdCB0aGUgU2V0dGluZyBmb3IgREVGQVVMVF9SRUxFQVNFCisgICAgICMgc2V0IEhlbHB0ZXh0OiBUaGlzIHNlbGVjdHMgdGhlIGRlZmF1bHQgcmVsZWFzZS4sIFZhbHVlOiBtYXN0ZXIKKyAgICAgIyBTYXZlIHlvdXIgY2hhbmdlcyBhbmQgZXhpdAorCisgICAgICMgR28gdG8gSG9tZSwgQml0YmFrZSBWZXJzaW9ucywgQWRkIGJpdGJha2UgdmVyc2lvbjsKKyAgICAgIyB0YWtlIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSA6IGh0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlL3JlZnMvaGVhZHMsCisgICAgICMgdGhpcyBtYW51YWwgYXNzdW1lcyB0aGUgbWFzdGVyIHZlcnNpb24KKyAgICAgIyBzZXQgTmFtZTogbWFzdGVyLCBHaXR1cmwgZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZQorICAgICAjIGJyYW5jaCBtYXN0ZXIsIGRpcnBhdGggLworICAgICAjIFNhdmUgeW91ciBjaGFuZ2VzIGFuZCBleGl0CisKKyAgICAgIyBVcGRhdGUgdGhlIGluZm9ybWF0aW9uCisgICAgICMgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbHN1cGRhdGVzCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcmVmZXJlbmNlIGluZm9ybWF0aW9uIG9uIFRvYXN0ZXItc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiBjb21tYW5kcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItdXNlZnVsLWNvbW1hbmRzJz5Vc2VmdWwgQ29tbWFuZHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgYW5kIFNldCB1cCB0aGUgRGF0YWJhc2UgU2VydmVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBhbnkgU1FMIHNlcnZlciBvdXQgb2YgdGhlIGJveC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm15c3FsLXNlcnZlcjwvZmlsZW5hbWU+IGJlY2F1c2UgaXQgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYWR2YW50YWdlcyBvZiBhZHZhbmNlZCBTUUwgZmVhdHVyZXMgYWxvbmcgd2l0aCBhCisgICAgICAgICAgICAgICAgICAgICAgICBmYXN0IGFuZCByZWxpYWJsZSBkYXRhYmFzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHNldHRpbmcgdXAgPGZpbGVuYW1lPm15c3FsLXNlcnZlcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBpcyBtb3JlIGNvbXBsZXggYW5kIG1pZ2h0IHJlcXVpcmUgYSBEYXRhYmFzZQorICAgICAgICAgICAgICAgICAgICAgICAgQWRtaW5pc3RyYXRvciB0byB0dW5lIGl0LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFub3RoZXIgc3VwcG9ydGVkIGRhdGFiYXNlIGJhY2tlbmQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zcWxpdGUzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBXaXRoIDxmaWxlbmFtZT5zcWxpdGUzPC9maWxlbmFtZT4sIHlvdSBoYXZlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW50YWdlIG9mIG5vIGNvbmZpZ3VyYXRpb24gYW5kIGFuIGVhc3kgaW5zdGFsbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgVG9hc3RlciBzdGlsbCByZXF1aXJlcyBkaXJlY3QgYWNjZXNzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYmFja2VuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+c3FsaXRlPC9maWxlbmFtZT4gYmFja2VuZCBpcyBhbHNvIHNsb3dlcgorICAgICAgICAgICAgICAgICAgICAgICAgYXMgY29tcGFyZWQgdG8gPGZpbGVuYW1lPm15c3FsLXNlcnZlcjwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhcyBubyB0cmFuc2FjdGlvbmFsIHN1cHBvcnQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IHNob3VsZCBzZXQgdXAgcHJvcGVyIHVzZXJuYW1lIGFuZCBwYXNzd29yZAorICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzIG9uIHRoZSBzaGFyZWQgZGF0YWJhc2UgZm9yIGV2ZXJ5b25lIHRoYXQgd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgYmUgdXNpbmcgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIGFkbWluaXN0cmF0b3IgcmlnaHRzIGZvciB0aGUgcm9vdCBhY2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgbm90IHRoZSBzYW1lIHRoaW5nIGFzIHJvb3QgYWNjZXNzIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGluc3RhbGxzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXlzcWwtc2VydmVyPC9maWxlbmFtZT4gYW5kIHNldHMgdXAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvbWUgdXNlciBhY2NvdW50cyBhbmQgdGhlIGRhdGFiYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGFwdC1nZXQgaW5zdGFsbCBteXNxbC1zZXJ2ZXIKKyAgICAgJCBteXNxbCAtdSByb290CisgICAgIG15c3FsPiBDUkVBVEUgVVNFUiAnbmV3dXNlcidAJ2xvY2FsaG9zdCcgSURFTlRJRklFRCBCWSAncGFzc3dvcmQnOworICAgICBteXNxbD4gR1JBTlQgQUxMIFBSSVZJTEVHRVMgT04gKiAuICogVE8gJ25ld3VzZXInQCdsb2NhbGhvc3QnOworICAgICBteXNxbD4gR1JBTlQgQUxMIFBSSVZJTEVHRVMgT04gKiAuICogVE8gJ25ld3VzZXInQCdsb2NhbGhvc3QnOworICAgICBteXNxbD4gQ1JFQVRFIERBVEFCQVNFICd0b2FzdGVyJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIGEgc2VwYXJhdGUgY2xvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtcmVwb3NpdG9yaWVzJz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgRGF0YWJhc2UgU2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjbG9uZSBpcyBvbmx5IHVzZWQgZm9yIGdldHRpbmcgdGhlIGxhdGVzdCBUb2FzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoaXMgdXAgdXNpbmcgdGhlIGZvbGxvd2luZyBHaXQgY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gc2V0IHVwIHRoZSBkaXJlY3Rvcnkgb3V0c2lkZSBvZiBhbnkKKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgc2VwYXJhdGVseSBjbG9uZWQgdHJlZSBmb3IgdGhlIERhdGFiYXNlIFNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkaXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9zZXR0aW5ncy5weTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIHNvIHRoYXQgdGhlIDxmaWxlbmFtZT5EQVRBQkFTRVM8L2ZpbGVuYW1lPiB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzIHRvIHRoZSBwcmV2aW91c2x5IGNyZWF0ZWQgZGF0YWJhc2Ugc2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZXN0YWJsaXNoZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVhcmxpZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2F0IC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9zZXR0aW5ncy5weQorICAgICAgICAuLi4KKyAgICAgREFUQUJBU0VTID0geworICAgICAgICAgJ2RlZmF1bHQnOiB7CisgICAgICAgICAgICAgJ0VOR0lORSc6ICdkamFuZ28uZGIuYmFja2VuZHMubXlzcWwnLAorICAgICAgICAgICAgICdOQU1FJzogJ3RvYXN0ZXInLAorICAgICAgICAgICAgICdVU0VSJzogJ25ld3VzZXInLAorICAgICAgICAgICAgICdQQVNTV09SRCc6ICdwYXNzd29yZCcsCisgICAgICAgICAgICAgJ0hPU1QnOiAnMTkyLjE2OC4wLjI1JywKKyAgICAgICAgICAgICAnUE9SVCc6ICczMzA2JywKKyAgICAgICAgIH0KKyAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgdGhlIERhdGFiYXNlPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvIGNyZWF0ZSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2Ugc3RydWN0dXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IHN5bmNkYgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IG1pZ3JhdGUgb3JtCisgICAgICQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBibGRjb250cm9sCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgaW50ZXJmYWNlIGFza3MgeW91IGlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgICAgICAgICBzdXBlcnVzZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBEbyBub3Qgc2tpcCB0aGlzIHN0ZXAuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugd2lsbCB1c2UgdGhlIHN1cGVydXNlciBhY2NvdW50IHRvIGFjY2VzcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkbWluaXN0cmF0aW9uIGludGVyZmFjZSBhbmQgbWFrZSBjaGFuZ2VzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2VsZWN0IFdoZXJlIHRoZSBCdWlsZCBQcm9jZXNzIFRha2VzIFBsYWNlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBjcmVhdGUgdGhyZWUgZGlyZWN0b3JpZXMgZm9yIHN0b3JpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGFydGlmYWN0cywgZG93bmxvYWRpbmcgc291cmNlcywgYW5kIHJ1bm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFsbCB0aHJlZSBkaXJlY3RvcmllcyBuZWVkIHRvIGJlIHdyaXRhYmxlIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdXNlciwgd2hpY2ggaXMgInBva3kiIGluIHRoaXMgZXhhbXBsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBhcnRpZmFjdHMgZGlyZWN0b3J5IG5lZWRzIHRvIHJlYWRhYmxlIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYXBhY2hlIHVzZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgYWxzbyBuZWVkIGZyZWUgZGlzayBzcGFjZSBpbiB0aGUgcmFuZ2Ugb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIDEwMCBHYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHRocmVlIHN1Z2dlc3RlZCBkaXJlY3RvcmllczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgL2hvbWUvcG9reS9idWlsZGFydGlmYWN0cy8KKyAgICAgL2hvbWUvcG9reS9idWlsZC8KKyAgICAgL2hvbWUvcG9reS9zb3VyY2VzLworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2V0IFVwIHRoZSA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+IEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvRmlsZTpUb2FzdGVyY29uZi5qc29uLnR4dC5wYXRjaCc+RG93bmxvYWQgdGhlIGhvc3RlZCA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+IGZpbGU8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCB3aWtpIGFuZCBlZGl0IGl0IHRvIHN1aXQgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIHJlbGV2YW50IHNlY3Rpb25zIG9mIHRoZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItanNvbi1maWxlcyc+SlNPTiBGaWxlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFmdGVyIGVkaXRpbmcgdGhlIGZpbGUsIGxvYWQgaXQgYnkgcnVubmluZworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBsb2FkY29uZiBwYXRoLXRvLXRvYXN0ZXJjb25mLmpzb24tZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBvbiBUb2FzdGVyLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0b2FzdGVyLXVzZWZ1bC1jb21tYW5kcyc+VXNlZnVsIENvbW1hbmRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DaGVjayB0aGUgVG9hc3RlciBTZXR0aW5nczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJlIHRoZSBidWlsZCBlbnZpcm9ubWVudCBieSBydW5uaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGNoZWNrc2V0dGluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gcHJvbXB0ZWQsIHBhc3RlIGluIHRoZSBkaXJlY3RvcnkgcGF0aHMgY3JlYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNseSBkdXJpbmcgU3RlcCA3LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBvbiBUb2FzdGVyLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0b2FzdGVyLXVzZWZ1bC1jb21tYW5kcyc+VXNlZnVsIENvbW1hbmRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbnN0YWxsIGFuZCBTZXQgVXAgdGhlIFdlYiBTZXJ2ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBpbnN0YWxsIGFuZCBzZXQgdXAgYSBmcm9udC1lbmQgd2ViIHNlcnZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VydmVyIGFsbG93cyBmb3IgbG9hZCBiYWxhbmNpbmcgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aS10aHJlYWRpbmcgb3ZlciBUb2FzdGVyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuLzEuNy9ob3d0by9kZXBsb3ltZW50L3dzZ2kvJz48ZmlsZW5hbWU+ZGphbmdvPC9maWxlbmFtZT4gV1NHSTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgdXNlcyBBcGFjaGUgd2ViIHNlcnZlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBhcHQtZ2V0IGluc3RhbGwgYXBhY2hlMiBsaWJhcGFjaGUyLW1vZC13c2dpCisgICAgICQgYTJlbm1vZCB3c2dpCisgICAgICQgY2F0IC9ldGMvYXBhY2hlMi9zaXRlcy1hdmFpbGFibGUvMDAwLWRlZmF1bHQuY29uZgorCisgICAgICAgIC4uLgorCisgICAgICMgdGhlIFdTR0lQeXRob25QYXRoIGlzIGdsb2JhbAorICAgICBXU0dJUHl0aG9uUGF0aCAvb3B0L2JpdGJha2UvbGliL3RvYXN0ZXIvCisKKyAgICAgICAgLi4uCisKKyAgICAgI3NuaXAgLSBpbiBWaXJ0dWFsSG9zdAorICAgICBXU0dJU2NyaXB0QWxpYXMgLyAvb3B0L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vd3NnaS5weQorCisgICAgICZsdDtEaXJlY3RvcnkgLy9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi8mZ3Q7CisgICAgICAgICAmbHQ7RmlsZXMgd3NnaS5weSZndDsKKyAgICAgICAgICAgICBSZXF1aXJlIGFsbCBncmFudGVkCisgICAgICAgICAmbHQ7L0ZpbGVzJmd0OworICAgICAmbHQ7L0RpcmVjdG9yeSZndDsKKworICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGNvbGxlY3Qgc3RhdGljIG1lZGlhIGZyb20gVG9hc3RlciBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGNvbmZpZ3VyaW5nIEFwYWNoZSB0byBzZXJ2ZSB0aGF0IHN0YXRpYworICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWE6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbWtkaXIgL3Zhci93d3cuaHRtbC9zdGF0aWMgJmFtcDsmYW1wOyBjZCAvdmFyL3d3dy5odG1sL3N0YXRpYworICAgICAkIC9vcHQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgY29sbGVjdHN0YXRpYworICAgICAkIGNhdCAvZXRjL2FwYWNoZTIvc2l0ZXMtYXZhaWxhYmxlLzAwMC1kZWZhdWx0LmNvbmYKKworICAgICAgICAuLi4KKworICAgICAjIGluIFZpcnR1YWxIb3N0LCBBSEVBRCBvZiB0aGUgV1NHSVNjcmlwdEFsaWFzIGRlZmluaXRpb24KKyAgICAgQWxpYXMgL3N0YXRpYy8gL3Zhci93d3cuaHRtbC9zdGF0aWMvCisKKyAgICAgJmx0O0RpcmVjdG9yeSAvdmFyL3d3dy5odG1sL3N0YXRpYy8mZ3Q7CisgICAgIFJlcXVpcmUgYWxsIGdyYW50ZWQKKyAgICAgJmx0Oy9EaXJlY3RvcnkmZ3Q7CisKKyAgICAgICAgLi4uCisKKyAgICAgV1NHSVNjcmlwdCBBbGlhcyAvIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi93c2dpLnB5CisKKyAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFydCBUb2FzdGVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTeW5jaHJvbml6ZSB0aGUgZGF0YWJhc2VzIGZvciBUb2FzdGVyLCBhbmQgdGhlbiBzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgdXAgdGhlIHdlYiBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBjb250aW51ZXMgd2l0aCB0aGUgYXNzdW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cyBmcm9tIHRoZSBwcmV2aW91cyBzdGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCAvb3B0L2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IHN5bmNkYgorICAgICAkIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBvcm0KKyAgICAgJCAvb3B0L2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IG1pZ3JhdGUgYmxkY29udHJvbAorCisgICAgICQgc2VydmljZSBhcGFjaGUyIHJlc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciByZWZlcmVuY2UgaW5mb3JtYXRpb24gb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4gY29tbWFuZHMgdXNlZCBoZXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItdXNlZnVsLWNvbW1hbmRzJz5Vc2VmdWwgQ29tbWFuZHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNldCB1cCBCdWlsZCBDb250cm9sIGFuZCBPcGVuIHRoZSBXZWIgSW50ZXJmYWNlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBydW4gdGhlIGJ1aWxkIGNvbnRyb2wgbWFuYWdlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZG8gdGhpcyBhcyBzaG93biBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgYXMgdGhlICJwb2t5IiB1c2VyLCBzdGFydCB0aGUgcnVuYnVpbGRzIGNvbW1hbmQgaW4gYSBsb29wIChvciBwdXQgaXQgaW4gY3JvbnRhYiEpCisgICAgICQgc3VkbyAtaSAtdSBwb2t5CisgICAgICQgd2hpbGUgdHJ1ZTsgZG8gL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBydW5idWlsZHM7IHNsZWVwIDEwOyBkb25lCisKKyAgICAgIyBvcGVuIHVwIHRoZSB3ZWIgaW50ZXJmYWNlCisgICAgICQgeGRnLW9wZW4gaHR0cDovL1tzZXJ2ZXItYWRkcmVzc10vdG9hc3Rlcmd1aS8KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHN1Z2dlc3RlZCB0aGF0IHlvdSBlbmFibGUgYnVpbGQgY29udHJvbCBieQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZyA8ZmlsZW5hbWU+cnVuYnVpbGRzPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y3JvbnRhYjwvZmlsZW5hbWU+IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY3JvbnRhYiAtbAorICAgICAqICogKiAqICogIC9vcHQvYml0YmFrZS9saXQvdG9hc3Rlci9tYW5hZ2UucHkgcnVuYnVpbGRzCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5PcGVuIHRoZSBCcm93c2VyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBBcGFjaGUgc2VydmVyIGlzIHJ1bm5pbmcsIGNvbm5lY3QgdG8gaXQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBmYXZvcml0ZSBicm93c2VyIGFuZCB2ZXJpZnkgdGhhdCB0aGUgVG9hc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGNvbWVzIHVwOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBodHRwOi8vbG9jYWxob3N0OjgwMDAvdG9hc3Rlcmd1aQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB0cmFjayBhY2Nlc3NlcyBhbmQgZXJyb3JzIGluIHRoZSBBcGFjaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UgbG9ncy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmctdGhlLXRvYXN0ZXItd2ViLWludGVyZmFjZSc+CisgICAgICAgIDx0aXRsZT5Vc2luZyB0aGUgVG9hc3RlciBXZWIgSW50ZXJmYWNlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBUb2FzdGVyIHdlYiBpbnRlcmZhY2UgYWxsb3dzIHlvdSB0byBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJyb3dzZSBwdWJsaXNoZWQgbGF5ZXJzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcnPk9wZW5FbWJlZGRlZCBNZXRhZGF0YSBJbmRleDwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3IgeW91ciBzZWxlY3RlZCB2ZXJzaW9uIG9mIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW1wb3J0IHlvdXIgb3duIGxheWVycyBmb3IgYnVpbGRpbmcuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWRkIGFuZCByZW1vdmUgbGF5ZXJzIGZyb20geW91ciBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWxlY3QgYSB0YXJnZXQgb3IgbXVsdGlwbGUgdGFyZ2V0cyB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTdGFydCB5b3VyIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgd2hhdCB3YXMgYnVpbHQgKHJlY2lwZXMgYW5kIHBhY2thZ2VzKSBhbmQgd2hhdAorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyB3ZXJlIGluc3RhbGxlZCBpbnRvIHlvdXIgZmluYWwgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnJvd3NlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIG9mIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSB2YWx1ZSBvZiBhbGwgdmFyaWFibGVzIGluIHlvdXIgYnVpbGQgY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIHdoaWNoIGZpbGVzIHNldCBlYWNoIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEV4YW1pbmUgZXJyb3IsIHdhcm5pbmcgYW5kIHRyYWNlIG1lc3NhZ2VzIHRvIGFpZCBpbgorICAgICAgICAgICAgICAgICAgICBkZWJ1Z2dpbmcuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBCaXRCYWtlIHRhc2tzIGV4ZWN1dGVkIGFuZAorICAgICAgICAgICAgICAgICAgICByZXVzZWQgZHVyaW5nIHlvdXIgYnVpbGQsIGluY2x1ZGluZyB0aG9zZSB0aGF0IHVzZWQKKyAgICAgICAgICAgICAgICAgICAgc2hhcmVkIHN0YXRlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiByZWNpcGVzLCBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBhbmQgdGFza3MuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHBlcmZvcm1hbmNlIGluZm9ybWF0aW9uIHN1Y2ggYXMgYnVpbGQgdGltZSwgdGFzayB0aW1lLAorICAgICAgICAgICAgICAgICAgICBDUFUgdXNhZ2UsIGFuZCBkaXNrIEkvTy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgc2V2ZXJhbCB2aWRlb3MgdGhhdCBzaG93IGhvdyB0byB1c2UgdGhlIFRvYXN0ZXIgR1VJOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIENvbmZpZ3VyYXRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PXFZZ0RaOFl6VjZ3Jz52aWRlbzwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIG92ZXJ2aWV3cyBhbmQgZGVtb25zdHJhdGVzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VG9hc3RlciBIb21lcGFnZSBhbmQgVGFibGUgQ29udHJvbHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PVFFQVJEbnJSMVh3Jz52aWRlbzwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGdvZXMgb3ZlciB0aGUgVG9hc3RlciBlbnRyeSBwYWdlLCBhbmQgcHJvdmlkZXMKKyAgICAgICAgICAgICAgICAgICAgYW4gb3ZlcnZpZXcgb2YgdGhlIGRhdGEgbWFuaXB1bGF0aW9uIGNhcGFiaWxpdGllcyBvZgorICAgICAgICAgICAgICAgICAgICBUb2FzdGVyLCB3aGljaCBpbmNsdWRlIHNlYXJjaCwgc29ydGluZyBhbmQgZmlsdGVyaW5nIGJ5CisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBjcml0ZXJpYS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCBEYXNoYm9hcmQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUtLcUhZY25wMmdFJz52aWRlbzwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHNob3dzIHlvdSB0aGUgYnVpbGQgZGFzaGJvYXJkLCBhIHBhZ2UgcHJvdmlkaW5nIGFuCisgICAgICAgICAgICAgICAgICAgIG92ZXJ2aWV3IG9mIHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgZm9yIGEgc2VsZWN0ZWQgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW1hZ2UgSW5mb3JtYXRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PVhxWUdGc21BMFJ3Jz52aWRlbzwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHdhbGtzIHRocm91Z2ggdGhlIGluZm9ybWF0aW9uIFRvYXN0ZXIgcHJvdmlkZXMKKyAgICAgICAgICAgICAgICAgICAgYWJvdXQgaW1hZ2VzOiBwYWNrYWdlcyBpbnN0YWxsZWQgYW5kIHJvb3QgZmlsZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29uZmlndXJhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9VVctai1UMlR6SWcnPnZpZGVvPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXMgVG9hc3RlciBidWlsZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRhc2tzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1ENC05dkdTeFF0dyc+dmlkZW88L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBzaG93cyB0aGUgaW5mb3JtYXRpb24gVG9hc3RlciBwcm92aWRlcyBhYm91dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFza3MgcnVuIGJ5IHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmVjaXBlcyBhbmQgUGFja2FnZXMgQnVpbHQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PXgtNmR4NGh1Tm53Jz52aWRlbzwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHNob3dzIHRoZSBpbmZvcm1hdGlvbiBUb2FzdGVyIHByb3ZpZGVzIGFib3V0IHJlY2lwZXMKKyAgICAgICAgICAgICAgICAgICAgYW5kIHBhY2thZ2VzIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBlcmZvcm1hbmNlIERhdGE6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PXFXR01ySm9xdXNRJz52aWRlbzwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHNob3dzIHRoZSBidWlsZCBwZXJmb3JtYW5jZSBkYXRhIHByb3ZpZGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKzwhLS0KKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItZ3VpLXZpZHMtMSc+CisgICAgICAgICAgICA8dGl0bGU+VG9hc3RlciBIb21lcGFnZSBhbmQgVGFibGUgQ29udHJvbHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHZpZGVvIGdvZXMgb3ZlciB0aGUgVG9hc3RlciBlbnRyeSBwYWdlLCBhbmQgcHJvdmlkZXMKKyAgICAgICAgICAgICAgICBhbiBvdmVydmlldyBvZiB0aGUgZGF0YSBtYW5pcHVsYXRpb24gY2FwYWJpbGl0aWVzIG9mIFRvYXN0ZXIsCisgICAgICAgICAgICAgICAgd2hpY2ggaW5jbHVkZSBzZWFyY2gsIHNvcnRpbmcgYW5kIGZpbHRlcmluZyBieSBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICBjcml0ZXJpYS4KKyAgICAgICAgICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICAgICAgICAgIDx2aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb2RhdGEgd2lkdGg9IjY0MCIgaGVpZ2h0PSI0ODAiIGZpbGVyZWY9Imh0dHA6Ly93d3cueW91dHViZS5jb20vdi9RRUFSRG5yUjFYdyI+PC92aWRlb2RhdGE+CisgICAgICAgICAgICAgICAgICAgIDwvdmlkZW9vYmplY3Q+CisgICAgICAgICAgICAgICAgPC9tZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWd1aS12aWRzLTInPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkIERhc2hib2FyZDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgdmlkZW8gc2hvd3MgeW91IHRoZSBidWlsZCBkYXNoYm9hcmQsIGEgcGFnZSBwcm92aWRpbmcgYW4KKyAgICAgICAgICAgICAgICBvdmVydmlldyBvZiB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGZvciBhIHNlbGVjdGVkIGJ1aWxkLgorICAgICAgICAgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgPHZpZGVvb2JqZWN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvZGF0YSB3aWR0aD0iNjQwcHgiIGhlaWdodD0iNDgwcHgiIGZpbGVyZWY9Imh0dHA6Ly93d3cueW91dHViZS5jb20vdi9LS3FIWWNucDJnRSI+PC92aWRlb2RhdGE+CisgICAgICAgICAgICAgICAgICAgIDwvdmlkZW9vYmplY3Q+CisgICAgICAgICAgICAgICAgPC9tZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWd1aS12aWRzLTMnPgorICAgICAgICAgICAgPHRpdGxlPkltYWdlIEluZm9ybWF0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyB2aWRlbyB3YWxrcyB0aHJvdWdoIHRoZSBpbmZvcm1hdGlvbiBUb2FzdGVyIHByb3ZpZGVzCisgICAgICAgICAgICAgICAgYWJvdXQgaW1hZ2VzOiBwYWNrYWdlcyBpbnN0YWxsZWQgYW5kIHJvb3QgZmlsZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgICAgICAgICA8dmlkZW9vYmplY3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW9kYXRhIHdpZHRoPSI2NDBweCIgaGVpZ2h0PSI0ODBweCIgZmlsZXJlZj0iaHR0cDovL3d3dy55b3V0dWJlLmNvbS92L1hxWUdGc21BMFJ3Ij48L3ZpZGVvZGF0YT4KKyAgICAgICAgICAgICAgICAgICAgPC92aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICA8L21lZGlhb2JqZWN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItZ3VpLXZpZHMtNCc+CisgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgdmlkZW8gc2hvd3MgdGhlIGluZm9ybWF0aW9uIFRvYXN0ZXIgcHJvdmlkZXMgYWJvdXQgYnVpbGQKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgPHZpZGVvb2JqZWN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvZGF0YSB3aWR0aD0iNjQwcHgiIGhlaWdodD0iNDgwcHgiIGZpbGVyZWY9Imh0dHA6Ly93d3cueW91dHViZS5jb20vdi9VVy1qLVQyVHpJZyI+PC92aWRlb2RhdGE+CisgICAgICAgICAgICAgICAgICAgIDwvdmlkZW9vYmplY3Q+CisgICAgICAgICAgICAgICAgPC9tZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWd1aS12aWRzLTUnPgorICAgICAgICAgICAgPHRpdGxlPlRhc2tzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyB2aWRlbyBzaG93cyB0aGUgaW5mb3JtYXRpb24gVG9hc3RlciBwcm92aWRlcyBhYm91dCB0aGUKKyAgICAgICAgICAgICAgICB0YXNrcyBydW4gYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICAgICAgICAgIDx2aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb2RhdGEgd2lkdGg9IjY0MHB4IiBoZWlnaHQ9IjQ4MHB4IiBmaWxlcmVmPSJodHRwOi8vd3d3LnlvdXR1YmUuY29tL3YvRDQtOXZHU3hRdHciPjwvdmlkZW9kYXRhPgorICAgICAgICAgICAgICAgICAgICA8L3ZpZGVvb2JqZWN0PgorICAgICAgICAgICAgICAgIDwvbWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1ndWktdmlkcy02Jz4KKyAgICAgICAgICAgIDx0aXRsZT5SZWNpcGVzIGFuZCBQYWNrYWdlcyBCdWlsdDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgdmlkZW8gc2hvd3MgdGhlIGluZm9ybWF0aW9uIFRvYXN0ZXIgcHJvdmlkZXMgYWJvdXQgcmVjaXBlcworICAgICAgICAgICAgICAgIGFuZCBwYWNrYWdlcyBidWlsdC4KKyAgICAgICAgICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICAgICAgICAgIDx2aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb2RhdGEgd2lkdGg9IjY0MHB4IiBoZWlnaHQ9IjQ4MHB4IiBmaWxlcmVmPSJodHRwOi8vd3d3LnlvdXR1YmUuY29tL3YveC02ZHg0aHVObnciPjwvdmlkZW9kYXRhPgorICAgICAgICAgICAgICAgICAgICA8L3ZpZGVvb2JqZWN0PgorICAgICAgICAgICAgICAgIDwvbWVkaWFvYmplY3Q+cVlnRFo4WXpWNncKKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1ndWktdmlkcy03Jz4KKyAgICAgICAgICAgIDx0aXRsZT5QZXJmb3JtYW5jZSBEYXRhPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyB2aWRlbyBzaG93cyB0aGUgYnVpbGQgcGVyZm9ybWFuY2UgZGF0YSBwcm92aWRlZCBieQorICAgICAgICAgICAgICAgIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgICAgICAgICA8dmlkZW9vYmplY3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW9kYXRhIHdpZHRoPSI2NDBweCIgaGVpZ2h0PSI0ODBweCIgZmlsZXJlZj0iaHR0cDovL3d3dy55b3V0dWJlLmNvbS92L3FXR01ySm9xdXNRIj48L3ZpZGVvZGF0YT4KKyAgICAgICAgICAgICAgICAgICAgPC92aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICA8L21lZGlhb2JqZWN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CistLT4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zdGFydC54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc3RhcnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZGI1ZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc3RhcnQueG1sCkBAIC0wLDAgKzEsMTQxIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ndG9hc3Rlci1tYW51YWwtc3RhcnQnPgorCis8dGl0bGU+UHJlcGFyaW5nIHRvIFVzZSBUb2FzdGVyPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIGhvdyB5b3UgbmVlZCB0byBwcmVwYXJlIHlvdXIgc3lzdGVtIGluIG9yZGVyIHRvCisgICAgICAgIHVzZSBUb2FzdGVyLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLXNldHRpbmctdXAtdGhlLWJhc2ljLXN5c3RlbS1yZXF1aXJlbWVudHMnPgorICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCB0aGUgQmFzaWMgU3lzdGVtIFJlcXVpcmVtZW50czwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgZmlyc3QgbmVlZCB0byBiZSBzdXJlIHlvdXIgYnVpbGQgc3lzdGVtIGlzIHNldCB1cCB0byBydW4KKyAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjeXAtcmVzb3VyY2VzJz5TZXR0aW5nIFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBmb3IgaW5mb3JtYXRpb24gb24gaG93CisgICAgICAgICAgICB0byBzZXQgdXAgeW91ciBzeXN0ZW0gZm9yIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItZXN0YWJsaXNoaW5nLXRvYXN0ZXItc3lzdGVtLWRlcGVuZGVuY2llcyc+CisgICAgICAgIDx0aXRsZT5Fc3RhYmxpc2hpbmcgVG9hc3RlciBTeXN0ZW0gRGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvYXN0ZXIgcmVxdWlyZXMgZXh0cmEgUHl0aG9uIGRlcGVuZGVuY2llcyBpbiBvcmRlciB0byBydW4uCisgICAgICAgICAgICBBIFRvYXN0ZXIgcmVxdWlyZW1lbnRzIGZpbGUgbmFtZWQKKyAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyLXJlcXVpcmVtZW50cy50eHQ8L2ZpbGVuYW1lPiBkZWZpbmVzIHRoZQorICAgICAgICAgICAgUHl0aG9uIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIFRoZSByZXF1aXJlbWVudHMgZmlsZSBpcyBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBkaXJlY3RvcnksIHdoaWNoIGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICByb290IGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPnBva3kvYml0YmFrZS90b2FzdGVyLXJlcXVpcmVtZW50cy50eHQ8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICBUaGUgZGVwZW5kZW5jaWVzIGFwcGVhciBpbiBhIDxmaWxlbmFtZT5waXA8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIGluc3RhbGwtY29tcGF0aWJsZSBmb3JtYXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1vcHRpb25hbC12aXJ0dWFsLWVudmlyb25tZW50Jz4KKyAgICAgICAgICAgIDx0aXRsZT5PcHRpb25hbGx5IFNldHRpbmcgVXAgYSBQeXRob24gVmlydHVhbCBFbnZpcm9ubWVudDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgYSBQeXRob24gdmlydHVhbAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHRoYXQgYWxsb3dzIHlvdSB0byBtYWludGFpbiBhIGRlZGljYXRlZCBQeXRob24KKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlIGFuZCBpdHMgb3duIHNldCBvZiBpbnN0YWxsZWQgbW9kdWxlcy4KKyAgICAgICAgICAgICAgICBEb2luZyBzbyBzZXBhcmF0ZXMgdGhlIGV4ZWN1dGFibGUgZnJvbSB0aGUgUHl0aG9uIGFuZCBtb2R1bGVzCisgICAgICAgICAgICAgICAgcHJvdmlkZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gYW5kIHRoZXJlZm9yZSBhdm9pZHMgYW55CisgICAgICAgICAgICAgICAgdmVyc2lvbiBjb25mbGljdHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBzZXQgdXAgeW91ciB2aXJ0dWFsIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIFRoZXNlIHN0ZXBzIGFzc3VtZSBhIFVidW50dSBkaXN0cmlidXRpb246CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgPGZpbGVuYW1lPnZpcnR1YWxlbnY8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbCB0aGUgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cHl0aG9uLXZpcnR1YWxlbnY8L2ZpbGVuYW1lPiBwYWNrYWdlIGZyb20geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIHJhdGhlciB0aGFuIHVzaW5nIDxmaWxlbmFtZT5waXA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCBweXRob24tdmlydHVhbGVudgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIGFuZCBBY3RpdmF0ZSBhIFZpcnR1YWwgRW52aXJvbm1lbnQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB2aXJ0dWFsZW52IHZlbnYKKyAgICAgJCBzb3VyY2UgdmVudi9iaW4vYWN0aXZhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBjaG9vc2UgdG8gc2V0IHVwIGEgdmlydHVhbCBlbnZpcm9ubWVudCBpbgorICAgICAgICAgICAgICAgICAgICB3aGljaCB0byBydW4gVG9hc3RlciwgeW91IG11c3QgaW5pdGlhbGl6ZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgZW52aXJvbm1lbnQgZWFjaCB0aW1lIHlvdSB3YW50IHRvIHN0YXJ0CisgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgZm9sbG93aW5nIHRvIGluaXRpYWxpemUgdGhlIGVudmlyb25tZW50IGp1c3QKKyAgICAgICAgICAgICAgICAgICAgYmVmb3JlIHlvdSBzdGFydCBUb2FzdGVyOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIHZlbnYvYmluL2FjdGl2YXRlCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1sb2FkLXBhY2thZ2VzJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsIFRvYXN0ZXIgUGFja2FnZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBpbnN0YWxsIHRoZSBwYWNrYWdlcyB0aGF0IFRvYXN0ZXIgcmVxdWlyZXMuCisgICAgICAgICAgICAgICAgVXNlIHRoaXMgY29tbWFuZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcGlwIGluc3RhbGwgLXIgYml0YmFrZS90b2FzdGVyLXJlcXVpcmVtZW50cy50eHQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworPCEtLSBDb21tZW50aW5nIHRoaXMgc2VjdGlvbiBvdXQgZm9yIG5vdyBpbiBjYXNlIGl0IG5lZWRzIHRvIGJlIHVzZWQgYWdhaW4uCisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItaW5zdGFsbC1kYWVtb24nPgorICAgICAgICAgICAgPHRpdGxlPkluc3RhbGwgPGZpbGVuYW1lPmRhZW1vbjwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG9hc3RlciBkZXBlbmRzIG9uCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5saWJzbGFjay5vcmcvZGFlbW9uLyc+PGZpbGVuYW1lPmRhZW1vbjwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHlvdXIgZGlzdHJpYnV0aW9uLCBob3cgeW91IGluc3RhbGwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGFlbW9uPC9maWxlbmFtZT4gZGlmZmVyczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRlYmlhbi1CYXNlZCBTeXN0ZW1zOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHJ1bm5pbmcgYSBEZWJpYW4tYmFzZWQgZGlzdHJpYnV0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCA8ZmlsZW5hbWU+ZGFlbW9uPC9maWxlbmFtZT4gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCBkYWVtb27igIsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk5vbi1EZWJpYW4tQmFzZWQgU3lzdGVtczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBub3QgcnVubmluZyBhIERlYmlhbi1iYXNlZCBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIChSZWRoYXQtYmFzZWQgZGlzdHJpYnV0aW9uIHN1Y2ggYXMgRmVkb3JhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGRvd25sb2FkIOKAi3RoZSBmaWxlIHJlbGV2YW50IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlIGFuZCB0aGVuIGluc3RhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kYWVtb248L2ZpbGVuYW1lPiBtYW51YWxseS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgdGhlIGNvbW1hbmRzIGZvciA2NC1iaXQgZGlzdHJpYnV0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3Z2V0IGh0dHA6Ly9saWJzbGFjay5vcmcvZGFlbW9uL2Rvd25sb2FkL2RhZW1vbi0wLjYuNC0xLng4Nl82NC5ycG0KKyAgICAgJCBzdWRvIHJwbSAtaSBkYWVtb24tMC42LjQtMS54ODZfNjQucnBtCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0aGUgY29tbWFuZHMgZm9yIGEgMzItYml0IGRpc3RyaWJ1dGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3Z2V0IGh0dHA6Ly9saWJzbGFjay5vcmcvZGFlbW9uL2Rvd25sb2FkL2RhZW1vbi0wLjYuNC0xLmk2ODYucnBtCisgICAgICQgc3VkbyBycG0gLWkg4oCLZGFlbW9uLTAuNi40LTEuaTY4Ni5ycG3igIsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+IC0tPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zdHlsZS5jc3MgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNmI5ZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc3R5bGUuY3NzCkBAIC0wLDAgKzEsOTg0IEBACisvKgorICAgR2VuZXJpYyBYSFRNTCAvIERvY0Jvb2sgWEhUTUwgQ1NTIFN0eWxlc2hlZXQuCisKKyAgIEJyb3dzZXIgd3JhbmdsaW5nIGFuZCB0eXBvZ3JhcGhpYyBkZXNpZ24gYnkKKyAgICAgIE95dmluZCBLb2xhcyAvIHBpcHBpbkBnaW1wLm9yZworCisgICBDdXN0b21pc2VkIGZvciBQb2t5IGJ5CisgICAgICBNYXR0aGV3IEFsbHVtIC8gbWFsbHVtQG8taGFuZC5jb20KKworICAgVGhhbmtzIHRvOgorICAgICBMaWFtIFIuIEUuIFF1aW4KKyAgICAgV2lsbGlhbSBTa2FnZ3MKKyAgICAgSmFrdWIgU3RlaW5lcgorCisgICBTdHJ1Y3R1cmUKKyAgIC0tLS0tLS0tLQorCisgICBUaGUgc3R5bGVzaGVldCBpcyBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKKworICAgICAgIFBvc2l0aW9uaW5nCisgICAgICAgICAgTWFyZ2lucywgcGFkZGluZ3MsIHdpZHRoLCBmb250LXNpemUsIGNsZWFyaW5nLgorICAgICAgIERlY29yYXRpb25zCisgICAgICAgICAgQm9yZGVycywgc3R5bGUKKyAgICAgICBDb2xvcnMKKyAgICAgICAgICBDb2xvcnMKKyAgICAgICBHcmFwaGljcworICAgICAgICAgIEdyYXBoaWNhbCBiYWNrZ3JvdW5kcworICAgICAgIE5hc3R5IElFIHR3ZWFrcworICAgICAgICAgIFdvcmthcm91bmRzIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgaW4gaW50ZXJuZXQgZXhwbG9yZXIsCisgICAgICAgICAgY3VycmVudGx5IG1ha2VzIHRoZSBzdHlsZXNoZWV0IG5vbiB2YWxpZGF0aW5nLCBidXQgdXAgdW50aWwKKyAgICAgICAgICB0aGlzIHBvaW50IGl0IGlzIHZhbGlkYXRpbmcuCisgICAgICAgTW96aWxsYSBleHRlbnNpb25zCisgICAgICAgICAgVHJhbnNwYXJlbmN5IGZvciBmb290ZXIKKwkgIFJvdW5kZWQgY29ybmVycyBvbiBib3hlcworCisqLworCisKKyAgLyoqKioqKioqKioqKioqKiAvCisgLyAgUG9zaXRpb25pbmcgICAvCisvICoqKioqKioqKioqKioqKi8KKworYm9keSB7CisgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBTYW5zLCBzYW5zLXNlcmlmOworCisgIG1pbi13aWR0aDogNjQwcHg7CisgIHdpZHRoOiA4MCU7CisgIG1hcmdpbjogIDBlbSBhdXRvOworICBwYWRkaW5nOiAyZW0gNWVtIDVlbSA1ZW07CisgIGNvbG9yOiAjMzMzOworfQorCitoMSxoMixoMyxoNCxoNSxoNixoNyB7CisgIGZvbnQtZmFtaWx5OiBBcmlhbCwgU2FuczsKKyAgY29sb3I6ICMwMDU1N0Q7CisgIGNsZWFyOiBib3RoOworfQorCitoMSB7CisgIGZvbnQtc2l6ZTogMmVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMmVtIDBlbSAwZW0gMGVtOworfQorCitoMi5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMC4xMGVtIDBlbSAzLjBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjhlbTsKKyAgcGFkZGluZy1sZWZ0OiAyMCU7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworaDIgeworICBtYXJnaW46IDJlbSAwZW0gMC42NmVtIDBlbTsKKyAgcGFkZGluZzogMC41ZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS41ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMy5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQyLjE0JTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK2gzIHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0MCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNCB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDUgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g2IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLmF1dGhvcmdyb3VwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIHBhZGRpbmctdG9wOiAyNTZweDsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL3RvYXN0ZXItdGl0bGUucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdG9wOworICBtYXJnaW4tdG9wOiAtMjU2cHg7CisgIHBhZGRpbmctcmlnaHQ6IDUwcHg7CisgIG1hcmdpbi1sZWZ0OiAwcHg7CisgIHRleHQtYWxpZ246IHJpZ2h0OworICB3aWR0aDogNzQwcHg7Cit9CisKK2gzLmF1dGhvciB7CisgIG1hcmdpbjogMGVtIDBtZSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgY29sb3I6ICMzMzM7CisgIGNsZWFyOiBib3RoOworfQorCisuYXV0aG9yIHR0LmVtYWlsIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKKy50aXRsZXBhZ2UgaHIgeworICB3aWR0aDogMGVtOworICBjbGVhcjogYm90aDsKK30KKworLnJldmhpc3RvcnkgeworICBwYWRkaW5nLXRvcDogMmVtOworICBjbGVhcjogYm90aDsKK30KKworLnRvYywKKy5saXN0LW9mLXRhYmxlcywKKy5saXN0LW9mLWV4YW1wbGVzLAorLmxpc3Qtb2YtZmlndXJlcyB7CisgIHBhZGRpbmc6IDEuMzNlbSAwZW0gMi41ZW0gMGVtOworICBjb2xvcjogIzAwNTU3RDsKK30KKworLnRvYyBwLAorLmxpc3Qtb2YtdGFibGVzIHAsCisubGlzdC1vZi1maWd1cmVzIHAsCisubGlzdC1vZi1leGFtcGxlcyBwIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDAuM2VtOworICBtYXJnaW46IDEuNWVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIHAgYiwKKy5saXN0LW9mLXRhYmxlcyBwIGIsCisubGlzdC1vZi1maWd1cmVzIHAgYiwKKy5saXN0LW9mLWV4YW1wbGVzIHAgYnsKKyAgZm9udC1zaXplOiAxMDAuMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisudG9jIGRsLAorLmxpc3Qtb2YtdGFibGVzIGRsLAorLmxpc3Qtb2YtZmlndXJlcyBkbCwKKy5saXN0LW9mLWV4YW1wbGVzIGRsIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGR0IHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkZCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMi42ZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2Lmdsb3NzYXJ5IGRsLAorZGl2LnZhcmlhYmxlbGlzdCBkbCB7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHdpZHRoOiAyMGVtOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworLnZhcmlhYmxlbGlzdCBkbCBkdCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworfQorCisuZ2xvc3NhcnkgZGwgZGQsCisudmFyaWFibGVsaXN0IGRsIGRkIHsKKyAgbWFyZ2luLXRvcDogLTFlbTsKKyAgbWFyZ2luLWxlZnQ6IDI1LjVlbTsKK30KKworLmdsb3NzYXJ5IGRkIHAsCisudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCitkaXYgcC5jb3B5cmlnaHQgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCitkaXYubGVnYWxub3RpY2UgcC5sZWdhbG5vdGljZS10aXRsZSB7CisgIG1hcmdpbi1ib3R0b206IDBlbTsKK30KKworcCB7CisgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworCit9CisKK2RsIHsKKyAgcGFkZGluZy10b3A6IDBlbTsKK30KKworaHIgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworCisubWVkaWFvYmplY3QsCisubWVkaWFvYmplY3RjbyB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworaW1nIHsKKyAgYm9yZGVyOiBub25lOworfQorCit1bCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDEuNWVtOworfQorCit1bCBsaSB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKwordWwgbGkgcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK3RhYmxlIHsKKyAgd2lkdGggOjEwMCU7Cit9CisKK3RoIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBmb250LXdlaWdodDogbm9ybWFsOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0ZCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworcCBhW2lkXSB7CisgIG1hcmdpbjogMHB4OworICBwYWRkaW5nOiAwcHg7CisgIGRpc3BsYXk6IGlubGluZTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKK30KKworYSB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBjb2xvcjogIzQ0NDsKK30KKworcHJlIHsKKyAgICBvdmVyZmxvdzogYXV0bzsKK30KKworYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAvKmZvbnQtd2VpZ2h0OiBib2xkOyovCit9CisKKy8qIFRoaXMgc3R5bGUgZGVmaW5lcyBob3cgdGhlIHBlcm1hbGluayBjaGFyYWN0ZXIKKyAgIGFwcGVhcnMgYnkgaXRzZWxmIGFuZCB3aGVuIGhvdmVyZWQgb3ZlciB3aXRoCisgICB0aGUgbW91c2UuICovCisKK1thbHQ9J1Blcm1hbGluayddIHsgY29sb3I6ICNlZWU7IH0KK1thbHQ9J1Blcm1hbGluayddOmhvdmVyIHsgY29sb3I6IGJsYWNrOyB9CisKKworZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlIHsKKyAgbWFyZ2luOiAxZW0gMGVtOworICBwYWRkaW5nOiAxZW07CisgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKK30KKworCitkaXYuaW5mb3JtYWxmaWd1cmUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWx0YWJsZSBwLnRpdGxlIGIsCitkaXYuZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5leGFtcGxlIHAudGl0bGUgYiwKK2Rpdi50YWJsZSBwLnRpdGxlIGJ7CisgICAgcGFkZGluZy10b3A6IDBlbTsKKyAgICBtYXJnaW4tdG9wOiAwZW07CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiwKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiBwICB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmctdG9wOiAwLjVlbTsKKyAgcGFkZGluZy1ib3R0b206IDAuNWVtOworfQorCisuZXBpZ3JhcGggeworICBwYWRkaW5nLWxlZnQ6IDU1JTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZXBpZ3JhcGggcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5lcGlncmFwaCAucXVvdGUgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisuZXBpZ3JhcGggLmF0dHJpYnV0aW9uIHsKKyAgZm9udC1zdHlsZTogbm9ybWFsOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworc3Bhbi5hcHBsaWNhdGlvbiB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnByb2dyYW1saXN0aW5nIHsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgZm9udC1zaXplOiA4MCU7CisgIHdoaXRlLXNwYWNlOiBwcmU7CisgIG1hcmdpbjogMS4zM2VtIDBlbTsKKyAgcGFkZGluZzogMS4zM2VtOworfQorCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgbWFyZ2luLXRvcDogMWVtOworICBtYXJnaW4tYm90dG9tOiAxZW07CisKK30KKworLyogZm9yY2UgZnVsbCB3aWR0aCBvZiB0YWJsZSB3aXRoaW4gZGl2ICovCisudGlwIHRhYmxlLAorLndhcm5pbmcgdGFibGUsCisuY2F1dGlvbiB0YWJsZSwKKy5ub3RlIHRhYmxlIHsKKyAgYm9yZGVyOiBub25lOworICB3aWR0aDogMTAwJTsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgcGFkZGluZzogMC44ZW0gMC4wZW0gMC4wZW0gMC4wZW07CisgIG1hcmdpbiA6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRpcCBwLAorLndhcm5pbmcgcCwKKy5jYXV0aW9uIHAsCisubm90ZSBwIHsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuNWVtOworICBwYWRkaW5nLXJpZ2h0OiAxZW07CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5hY3JvbnltIHsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgcGFkZGluZzogMC4wOWVtIDAuM2VtOworICBtYXJnaW46IDBlbTsKK30KKworLml0ZW1pemVkbGlzdCBsaSB7CisgIGNsZWFyOiBub25lOworfQorCisuZmlsZW5hbWUgeworICBmb250LXNpemU6IG1lZGl1bTsKKyAgZm9udC1mYW1pbHk6IENvdXJpZXIsIG1vbm9zcGFjZTsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAwZW07CisgIHRvcDogMGVtOworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NkZjsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBwb3NpdGlvbjogZml4ZWQ7CisgIGxlZnQ6IDBlbTsKKyAgYm90dG9tOiAwZW07CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIHdpZHRoOiAxMDAlOworfQorCisKK2Rpdi5uYXZoZWFkZXIgdGQsCitkaXYubmF2Zm9vdGVyIHRkIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGggeworICAvKmZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBUaW1lcywgc2VyaWY7Ki8KKyAgLypmb250LXNpemU6IHgtbGFyZ2U7Ki8KKyAgZm9udC1zaXplOiA4MCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLXRvcDogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItYm90dG9tOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGEsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGEgeworICBjb2xvcjogIzc3NzsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisvKiBub3JtYWwgdGV4dCBpbiB0aGUgZm9vdGVyICovCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIHsKKyAgY29sb3I6IGJsYWNrOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6dmlzaXRlZCwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTp2aXNpdGVkIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKKworLyogbGlua3MgaW4gaGVhZGVyIGFuZCBmb290ZXIgKi8KK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTpob3ZlciwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgY29sb3I6ICMzM2E7Cit9CisKK2Rpdi5uYXZoZWFkZXIgaHIsCitkaXYubmF2Zm9vdGVyIGhyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCisucWFuZGFzZXQgdHIucXVlc3Rpb24gdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy5xYW5kYXNldCB0ci5hbnN3ZXIgdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisuYW5zd2VyIHRkIHsKKyAgcGFkZGluZy1ib3R0b206IDEuNWVtOworfQorCisuZW1waGFzaXMgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworCisgIC8qKioqKioqKioqKioqIC8KKyAvIGRlY29yYXRpb25zICAvCisvICoqKioqKioqKioqKiovCisKKy50aXRsZXBhZ2UgeworfQorCisucGFydCAudGl0bGUgeworfQorCisuc3VidGl0bGUgeworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyoKK2gxIHsKKyAgYm9yZGVyOiBub25lOworfQorCitoMiB7CisgIGJvcmRlci10b3A6IHNvbGlkIDAuMmVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2gzIHsKKyAgYm9yZGVyLXRvcDogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g0IHsKKyAgYm9yZGVyOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDUgeworICBib3JkZXI6IDBlbTsKK30KKyovCisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworLnF1ZXN0aW9uIHRkIHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOworfQorCisuYW5zd2VyIHsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBib3JkZXItdG9wOiAxcHggc29saWQ7Cit9CisKKyAgLyoqKioqKioqKiAvCisgLyAgY29sb3JzICAvCisvICoqKioqKioqKi8KKworYm9keSB7CisgIGNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworYSB7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworfQorCithOmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RlZGVkZTsKK30KKworCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoNywKK2g4IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisKK2hyIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCisKKy50aXAsIC53YXJuaW5nLCAuY2F1dGlvbiwgLm5vdGUgeworICBib3JkZXItY29sb3I6ICNmZmY7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7Cit9CisKKworLndhcm5pbmcgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy50aXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisubm90ZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGNvbG9yOiAjMDQ0OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKK3ByZS5wcm9ncmFtbGlzdGluZyB7CisgIGNvbG9yOiBibGFjazsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworICBib3JkZXItd2lkdGg6IDJweDsKK30KKworLmd1aW1lbnUsCisuZ3VpbGFiZWwsCisuZ3VpbWVudWl0ZW0geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGJvcmRlci1jb2xvcjogIzk5OTsKK30KKworCitkaXYubmF2aGVhZGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCitkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCisgIC8qKioqKioqKioqKiAvCisgLyAgZ3JhcGhpY3MgIC8KKy8gKioqKioqKioqKiovCisKKy8qCitib2R5IHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvYm9keV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLm5hdmhlYWRlciwKKy5ub3RlLAorLnRpcCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL25vdGVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy53YXJuaW5nLAorLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy93YXJuaW5nX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisuZmlndXJlLAorLmluZm9ybWFsZmlndXJlLAorLmV4YW1wbGUsCisuaW5mb3JtYWxleGFtcGxlLAorLnRhYmxlLAorLmluZm9ybWFsdGFibGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9maWd1cmVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKyovCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoN3sKK30KKworLyoKK0V4YW1wbGUgb2YgaG93IHRvIHN0aWNrIGFuIGltYWdlIGFzIHBhcnQgb2YgdGhlIHRpdGxlLgorCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvd2hpdGUtb24tYmxhY2sucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworfQorKi8KKworZGl2LnByZWZhY2UgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuY29sb3Bob24gLnRpdGxlLAorZGl2LmNoYXB0ZXIgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworfQorCitkaXYuc2VjdGlvbiBkaXYuc2VjdGlvbiAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5zZWN0MiAudGl0bGVwYWdlIC50aXRsZSB7CisgICAgYmFja2dyb3VuZDogbm9uZTsKK30KKworCitoMS50aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBoZWlnaHQ6IDI1NnB4OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworfQorCitoMi5zdWJ0aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworICB3aWR0aDogMHB4OworICBkaXNwbGF5OiBub25lOworfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gIHBpcHBpbi5naW1wLm9yZyBzcGVjaWZpYyBhbHRlcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIGNvbG9yOiAjNzc3OworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAwOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMHB4OworICBsZWZ0OiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDUwcHg7CisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9oZWFkaW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CisgIGJvcmRlcjogbm9uZTsKK30KKworZGl2LmhlYWRpbmcgYSB7CisgIGNvbG9yOiAjNDQ0OworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlcjogbm9uZTsKKyAgY29sb3I6ICNkZGQ7CisgIGZvbnQtc2l6ZTogODAlOworICB0ZXh0LWFsaWduOnJpZ2h0OworCisgIHdpZHRoOiAxMDAlOworICBwYWRkaW5nLXRvcDogMTBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDBweDsKKyAgbGVmdDogMHB4OworCisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9mb290aW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworfQorKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKiAvCisgLyAgbmFzdHkgaWUgdHdlYWtzICAvCisvICoqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7CisgIG1hcmdpbi1sZWZ0OmV4cHJlc3Npb24oIi01ZW0iKTsKK30KK2JvZHkgeworICBwYWRkaW5nOmV4cHJlc3Npb24oIjRlbSA1ZW0gMGVtIDVlbSIpOworfQorKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyBtb3ppbGxhIHZlbmRvciBzcGVjaWZpYyBjc3MgZXh0ZW5zaW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICAtbW96LW9wYWNpdHk6IDAuOGVtOworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUsCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjVlbTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjNlbTsKK30KKyovCisKK3RhYmxlIHRyIHRkIHRhYmxlIHRyIHRkIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCitociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3RhYmxlIHsKKyAgYm9yZGVyOiAwZW07Cit9CisKKyAucGhvdG8geworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiAgIDEuNWVtOworICBtYXJnaW4tYm90dG9tOiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXgtd2lkdGg6ICAgICAgMTdlbTsKKyAgYm9yZGVyOiAgICAgMXB4IHNvbGlkIGdyYXk7CisgIHBhZGRpbmc6ICAgIDNweDsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisgLnNlcGVyYXRvciB7CisgICBwYWRkaW5nLXRvcDogMmVtOworICAgY2xlYXI6IGJvdGg7CisgIH0KKworICAjdmFsaWRhdG9ycyB7CisgICAgICBtYXJnaW4tdG9wOiA1ZW07CisgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgIGNvbG9yOiAjNzc3OworICB9CisgIEBtZWRpYSBwcmludCB7CisgICAgICBib2R5IHsKKyAgICAgICAgICBmb250LXNpemU6IDhwdDsKKyAgICAgIH0KKyAgICAgIC5ub3ByaW50IHsKKyAgICAgICAgICBkaXNwbGF5OiBub25lOworICAgICAgfQorICB9CisKKworLnRpcCwKKy5ub3RlIHsKKyAgIGJhY2tncm91bmQ6ICNmMGYwZjI7CisgICBjb2xvcjogIzMzMzsKKyAgIHBhZGRpbmc6IDIwcHg7CisgICBtYXJnaW46IDIwcHg7Cit9CisKKy50aXAgaDMsCisubm90ZSBoMyB7CisgICBwYWRkaW5nOiAwZW07CisgICBtYXJnaW46IDBlbTsKKyAgIGZvbnQtc2l6ZTogMmVtOworICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICBjb2xvcjogIzMzMzsKK30KKworLnRpcCBhLAorLm5vdGUgYSB7CisgICBjb2xvcjogIzMzMzsKKyAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuZm9vdG5vdGUgeworICAgZm9udC1zaXplOiBzbWFsbDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisvKiBDaGFuZ2VzIHRoZSBhbm5vdW5jZW1lbnQgdGV4dCAqLworLnRpcCBoMywKKy53YXJuaW5nIGgzLAorLmNhdXRpb24gaDMsCisubm90ZSBoMyB7CisgICBmb250LXNpemU6bGFyZ2U7CisgICBjb2xvcjogIzAwNTU3RDsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYWM2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwueG1sCkBAIC0wLDAgKzEsNzggQEAKKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxib29rIGlkPSd0b2FzdGVyLW1hbnVhbCcgbGFuZz0nZW4nCisgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIKKyAgICAgIHhtbG5zPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgICAgID4KKyAgICA8Ym9va2luZm8+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0nZmlndXJlcy90b2FzdGVyLXRpdGxlLnBuZycKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSdTVkcnCisgICAgICAgICAgICAgICAgICAgIGFsaWduPSdsZWZ0JyBzY2FsZWZpdD0nMScgd2lkdGg9JzEwMCUnLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgIDwvbWVkaWFvYmplY3Q+CisKKyAgICAgICAgPHRpdGxlPgorICAgICAgICAgICAgVG9hc3RlciBVc2VyIE1hbnVhbAorICAgICAgICA8L3RpdGxlPgorCisgICAgICAgIDxhdXRob3Jncm91cD4KKyAgICAgICAgICAgIDxhdXRob3I+CisgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5TY290dDwvZmlyc3RuYW1lPiA8c3VybmFtZT5SaWZlbmJhcms8L3N1cm5hbWU+CisgICAgICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8b3JnbmFtZT5JbnRlbCBDb3Jwb3JhdGlvbjwvb3JnbmFtZT4KKyAgICAgICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgIDxlbWFpbD5zY290dC5tLnJpZmVuYmFya0BpbnRlbC5jb208L2VtYWlsPgorICAgICAgICAgICAgPC9hdXRob3I+CisgICAgICAgIDwvYXV0aG9yZ3JvdXA+CisKKyAgICAgICAgPHJldmhpc3Rvcnk+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjg8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjggUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjk8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICA8L3Jldmhpc3Rvcnk+CisKKyAgICA8Y29weXJpZ2h0PgorICAgICAgPHllYXI+JkNPUFlSSUdIVF9ZRUFSOzwveWVhcj4KKyAgICAgIDxob2xkZXI+TGludXggRm91bmRhdGlvbjwvaG9sZGVyPgorICAgIDwvY29weXJpZ2h0PgorCisgICAgPGxlZ2Fsbm90aWNlPgorICAgICAgPHBhcmE+CisgICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudCB1bmRlcgorICAgICAgICB0aGUgdGVybXMgb2YgdGhlIDx1bGluayB0eXBlPSJodHRwIiB1cmw9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzIuMC91ay8iPkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMi4wIFVLOiBFbmdsYW5kICZhbXA7IFdhbGVzPC91bGluaz4gYXMgcHVibGlzaGVkIGJ5IENyZWF0aXZlIENvbW1vbnMuCisgICAgICA8L3BhcmE+CisgICAgICA8bm90ZT4KKyAgICAgICAgICBGb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbWFudWFsIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlLCBzZWUgdGhlCisgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfVE9BU1RfVVJMOyc+VG9hc3RlciBVc2VyIE1hbnVhbDwvdWxpbms+CisgICAgICAgICAgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCB3ZWJzaXRlLgorICAgICAgPC9ub3RlPgorCisgICAgPC9sZWdhbG5vdGljZT4KKworICAgIDwvYm9va2luZm8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ0b2FzdGVyLW1hbnVhbC1pbnRyby54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InRvYXN0ZXItbWFudWFsLXN0YXJ0LnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0idG9hc3Rlci1tYW51YWwtc2V0dXAtYW5kLXVzZS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InRvYXN0ZXItbWFudWFsLXJlZmVyZW5jZS54bWwiLz4KKworPC9ib29rPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9vbHMvZWNsaXBzZS1oZWxwLnNlZCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b29scy9lY2xpcHNlLWhlbHAuc2VkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NjkwYmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9vbHMvZWNsaXBzZS1oZWxwLnNlZApAQCAtMCwwICsxLDE4IEBACisjIFByb2Nlc3NlcyBwb2t5LXJlZi1tYW51YWwgYW5kIHlvY3RvLXByb2plY3QtcXMgbWFudWFsICg8d29yZD4tPHdvcmQ+LTx3b3JkPiBzdHlsZSkKKyMgRm9yIGV4YW1wbGU6CisjICAgInVsaW5rIiBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjMvcG9reS1yZWYtbWFudWFsL3Bva3ktcmVmLW1hbnVhbC5odG1sI2ZhcSIKKyMgICAtPiAibGluayIgaHJlZj0iLi4vcG9reS1yZWYtbWFudWFsL2ZhcS5odG1sIgorcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC9bXlwvXSpcL1woW2Etel0qLVthLXpdKi1bYS16XSpcKVwvW2Etel0qLVthLXpdKi1bYS16XSouaHRtbCNcKFteXCJdKlwpXCIvXCJsaW5rXCIgaHJlZj1cIlwuXC5cL1wxXC9cMi5odG1sXCIvZworCisjIFByb2Nlc3NlcyBhbGwgb3RoZXIgbWFudWFscyAoPHdvcmQ+LTx3b3JkPiBzdHlsZSkKKyMgRm9yIGV4YW1wbGU6CisjICAgInVsaW5rIiBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjMva2VybmVsLW1hbnVhbC9rZXJuZWwtbWFudWFsLmh0bWwjZmFxIgorIyAgIC0+ICJsaW5rIiBocmVmPSIuLi9rZXJuZWwtbWFudWFsL2ZhcS5odG1sIgorcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC9bXlwvXSpcL1woW2Etel0qLVthLXpdKlwpXC9bYS16XSotW2Etel0qLmh0bWwjXChbXlwiXSpcKVwiL1wibGlua1wiIGhyZWY9XCJcLlwuXC9cMVwvXDIuaHRtbFwiL2cKKworIyBQcm9jZXNzIGNhc2VzIHdoZXJlIGp1c3QgYW4gZXh0ZXJuYWwgbWFudWFsIGlzIHJlZmVyZW5jZWQgd2l0aG91dCBhbiBpZCBhbmNob3IKKyMgRm9yIGV4YW1wbGU6CisjICAgInVsaW5rIiBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjMva2VybmVsLW1hbnVhbC9rZXJuZWwtbWFudWFsLmh0bWwKKyMgICAtPiAibGluayIgaHJlZj0iLi4va2VybmVsLW1hbnVhbC9pbmRleC5odG1sIgorcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC9bXlwvXSpcL1woW2Etel0qLVthLXpdKi1bYS16XSpcKVwvW2Etel0qLVthLXpdKi1bYS16XSouaHRtbFwiL1wibGlua1wiIGhyZWY9XCJcLlwuXC9cMVwvaW5kZXguaHRtbFwiL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvW15cL10qXC9cKFthLXpdKi1bYS16XSpcKVwvW2Etel0qLVthLXpdKi5odG1sXCIvXCJsaW5rXCIgaHJlZj1cIlwuXC5cL1wxXC9pbmRleC5odG1sXCIvZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Rvb2xzL21lZ2EtbWFudWFsLnNlZCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b29scy9tZWdhLW1hbnVhbC5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVjNDBiMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b29scy9tZWdhLW1hbnVhbC5zZWQKQEAgLTAsMCArMSwzMyBAQAorIyBQcm9jZXNzZXMgcG9reS1yZWYtbWFudWFsIGFuZCB5b2N0by1wcm9qZWN0LXFzIG1hbnVhbCAoPHdvcmQ+LTx3b3JkPi08d29yZD4gc3R5bGUpLgorIyBUaGlzIHN0eWxlIGlzIGZvciBtYW51YWwgZm9sZGVycyBsaWtlICJ5b2N0by1wcm9qZWN0LXFzIiBhbmQgInBva3ktcmVmLW1hbnVhbCIuCisjIFRoaXMgaXMgdGhlIG9sZCB3YXkgdGhhdCBkaWQgaXQuICBDYW4ndCBkbyB0aGF0IG5vdyB0aGF0IHdlIGhhdmUgImJpdGJha2UtdXNlci1tYW51YWwiIHN0cmluZ3MKKyMgaW4gdGhlIG1lZ2EtbWFudWFsLgorIyBzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvW2Etel0qLVthLXpdKi1bYS16XSpcL1thLXpdKi1bYS16XSotW2Etel0qLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC95b2N0by1wcm9qZWN0LXFzXC95b2N0by1wcm9qZWN0LXFzLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC9wb2t5LXJlZi1tYW51YWxcL3Bva3ktcmVmLW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCisKKyMgUHJvY2Vzc2VzIGFsbCBvdGhlciBtYW51YWxzICg8d29yZD4tPHdvcmQ+IHN0eWxlKSBleGNlcHQgZm9yIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsIGJlY2F1c2UKKyMgaXQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBtZWdhLW1hbnVhbC4KKyMgVGhpcyBzdHlsZSBpcyBmb3IgbWFudWFsIGZvbGRlcnMgdGhhdCB1c2UgdHdvIHdvcmQsIHdoaWNoIGlzIHRoZSBzdGFuZGFyZCBub3cgKGUuZy4gInJlZi1tYW51YWwiKS4KKyMgVGhpcyB3YXMgdGhlIG9uZS1saW5lciB0aGF0IHdvcmtlZCBiZWZvcmUgd2UgaW50cm9kdWNlZCB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbCwgd2hpY2ggaXMKKyMgbm90IGluIHRoZSBtZWdhLW1hbnVhbC4KKyMgcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL1thLXpdKi1bYS16XSpcL1thLXpdKi1bYS16XSouaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvYWR0LW1hbnVhbFwvYWR0LW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvYnNwLWd1aWRlXC9ic3AtZ3VpZGUuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL2Rldi1tYW51YWxcL2Rldi1tYW51YWwuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL2tlcm5lbC1kZXZcL2tlcm5lbC1kZXYuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL3Byb2ZpbGUtbWFudWFsXC9wcm9maWxlLW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvcmVmLW1hbnVhbFwvcmVmLW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvdG9hc3Rlci1tYW51YWxcL3RvYXN0ZXItbWFudWFsLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC95b2N0by1wcm9qZWN0LXFzXC95b2N0by1wcm9qZWN0LXFzLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKKworIyBQcm9jZXNzIGNhc2VzIHdoZXJlIGp1c3QgYW4gZXh0ZXJuYWwgbWFudWFsIGlzIHJlZmVyZW5jZWQgd2l0aG91dCBhbiBpZCBhbmNob3IKK3MvPGEgY2xhc3M9XCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC95b2N0by1wcm9qZWN0LXFzXC95b2N0by1wcm9qZWN0LXFzLmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+WW9jdG8gUHJvamVjdCBRdWljayBTdGFydDxcL2E+L1lvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQvZworcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL2Rldi1tYW51YWxcL2Rldi1tYW51YWwuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbDxcL2E+L1lvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsL2cKK3MvPGEgY2xhc3M9XCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC9hZHQtbWFudWFsXC9hZHQtbWFudWFsLmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+WW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZTxcL2E+L1lvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUvZworcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL2JzcC1ndWlkZVwvYnNwLWd1aWRlLmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+WW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8XC9hPi9Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZS9nCitzLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvcHJvZmlsZS1tYW51YWxcL3Byb2ZpbGUtbWFudWFsLmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+WW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsPFwvYT4vWW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsL2cKK3MvPGEgY2xhc3M9XCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC9rZXJuZWwtZGV2XC9rZXJuZWwtZGV2Lmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+WW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsPFwvYT4vWW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsL2cKK3MvPGEgY2xhc3M9XCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC9yZWYtbWFudWFsXC9yZWYtbWFudWFsLmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+WW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsPFwvYT4vWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsL2cKK3MvPGEgY2xhc3M9XCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC90b2FzdGVyLW1hbnVhbFwvdG9hc3Rlci1tYW51YWwuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Ub2FzdGVyIFVzZXIgTWFudWFsPFwvYT4vVG9hc3RlciBVc2VyIE1hbnVhbC9nCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9vbHMvcG9reS1kb2Nib29rLXRvLXBkZiBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b29scy9wb2t5LWRvY2Jvb2stdG8tcGRmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1NWZkMjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9vbHMvcG9reS1kb2Nib29rLXRvLXBkZgpAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vc2gKKwkKK2lmIFsgLXogIiQxIiAtbyAteiAiJDIiIF07IHRoZW4KKyAgIGVjaG8gInVzYWdlOiBbLXZdICQwIDxkb2Nib29rIGZpbGU+IDx0ZW1wbGF0ZWRpcj4iCisgICBlY2hvCisgICBlY2hvICIqTk9URSogeW91IG5lZWQgeHNsdHByb2MsIGZvcCBhbmQgbndhbHNoIGRvY2Jvb2sgc3R5bGVzaGVldHMiIAorICAgZWNobyAiICAgICAgIGluc3RhbGxlZCBmb3IgdGhpcyB0byB3b3JrISIKKyAgIGVjaG8KKyAgIGV4aXQgMAorZmkKKworRk89YGVjaG8gJDEgfCBzZWQgcy8ueG1sLy5mby9gIHx8IGV4aXQgMQorUERGPWBlY2hvICQxIHwgc2VkIHMvLnhtbC8ucGRmL2AgfHwgZXhpdCAxCitURU1QTEFURURJUj0kMgorCisjIworIyBUaGVzZSBVUkkgc2hvdWxkIGJlIHJld3JpdHRlbiBieSB5b3VyIGRpc3RyaWJ1dGlvbidzIHhtbCBjYXRhbG9nIHRvCisjIG1hdGNoIHlvdXIgbG9jYWx5IGluc3RhbGxlZCBYU0wgc3R5bGVzaGVldHMuCitYU0xfQkFTRV9VUkk9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50IgorCisjIENyZWF0ZXMgYSB0ZW1wb3JhcnkgWFNMIHN0eWxlc2hlZXQgYmFzZWQgb24gdGl0bGVwYWdlLnhzbAoreHNsdHByb2MgLW8gL3RtcC90aXRsZXBhZ2UueHNsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgLS14aW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICRYU0xfQkFTRV9VUkkvdGVtcGxhdGUvdGl0bGVwYWdlLnhzbCBcCisgICAgICAgICAkVEVNUExBVEVESVIvdGl0bGVwYWdlLnRlbXBsYXRlcy54bWwgfHwgZXhpdCAxCisKKyMgQ3JlYXRlcyB0aGUgZmlsZSBuZWVkZWQgZm9yIEZPUAoreHNsdHByb2MgLS14aW5jbHVkZSAgICAgICAgICAgICAgICAgICAgXAorCSAtLXN0cmluZ3BhcmFtIGh5cGhlbmF0ZSBmYWxzZSBcCisJIC0tc3RyaW5ncGFyYW0gZm9ybWFsLnRpdGxlLnBsYWNlbWVudCAiZmlndXJlIGFmdGVyIiBcCisJIC0tc3RyaW5ncGFyYW0gdWxpbmsuc2hvdyAxIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIGJvZHkuZm9udC5tYXN0ZXIgIDkgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSAgdGl0bGUuZm9udC5tYXN0ZXIgIDExIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gZHJhZnQud2F0ZXJtYXJrLmltYWdlICIkVEVNUExBVEVESVIvZHJhZnQucG5nIiBcCisgICAgICAgICAtLXN0cmluZ3BhcmFtICBjaGFwdGVyLmF1dG9sYWJlbCAxIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIGFwcGVuZGl4LmF1dG9sYWJlbCBBIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIHNlY3Rpb24uYXV0b2xhYmVsIDEgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSAgc2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwgMSBcCisgICAgICAgICAtLW91dHB1dCAkRk8gICAgICAgICAgICAgICBcCisgICAgICAgICAkVEVNUExBVEVESVIvcG9reS1kYi1wZGYueHNsICAgIFwKKwkgJDEgICAgICAgICAgICAgICAgIHx8IGV4aXQgMQorCisjIEludm9rZXMgdGhlIEphdmEgdmVyc2lvbiBvZiBGT1AuICBVc2VzIHRoZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZmlsZSBjb21tb24vZm9wLWNvbmZpZy54bWwKK2ZvcCAtYyAkVEVNUExBVEVESVIvZm9wLWNvbmZpZy54bWwgLWZvICRGTyAtcGRmICRQREYgICAgICAgfHwgZXhpdCAxCisKK3JtIC1mICRGTworcm0gLWYgIC90bXAvdGl0bGVwYWdlLnhzbAorCitlY2hvCitlY2hvICIgIyMjIyBTdWNjZXNzISAkUERGIHJlYWR5LiAjIyMjIgorZWNobwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Rvb2xzL3VwZGF0ZS1kb2N1bWVudGF0aW9uLWNvbmYgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9vbHMvdXBkYXRlLWRvY3VtZW50YXRpb24tY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjhkMjgwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Rvb2xzL3VwZGF0ZS1kb2N1bWVudGF0aW9uLWNvbmYKQEAgLTAsMCArMSwxNjggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIGRvY3VtZW50YXRpb24uY29uZiB1cGRhdGUgc2NyaXB0CisjCisjIEF1dGhvcjogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisjCisjIENvcHlyaWdodCAoQykgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IHJlCitmcm9tIGx4bWwgaW1wb3J0IGV0cmVlCitpbXBvcnQgbG9nZ2luZworCitkZWYgbG9nZ2VyX2NyZWF0ZShuYW1lKToKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihuYW1lKQorICAgIGxvZ2dlcmhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQorICAgIGxvZ2dlcmhhbmRsZXIuc2V0Rm9ybWF0dGVyKGxvZ2dpbmcuRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpKQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGxvZ2dlcmhhbmRsZXIpCisgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICByZXR1cm4gbG9nZ2VyCitsb2dnZXIgPSBsb2dnZXJfY3JlYXRlKCdkb2Njb25mdXBkYXRlcicpCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249ImRvY3VtZW50YXRpb24uY29uZiB1cGRhdGVyIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXNlcGF0aCcsIGhlbHA9J1BhdGggdG8gT0UtQ29yZSBiYXNlIGRpcmVjdG9yeScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXEnLCAnLS1xdWlldCcsIGhlbHA9J1ByaW50IG9ubHkgd2FybmluZ3MvZXJyb3JzJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBhcmdzLnF1aWV0OgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5XQVJOKQorCisgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoYXJncy5iYXNlcGF0aCk6CisgICAgICAgIGxvZ2dlci5lcnJvcignU3BlY2lmaWVkIGJhc2UgcGF0aCAlcyBub3QgZm91bmQnKQorICAgICAgICByZXR1cm4gMQorCisgICAgZG9jX2NvbmYgPSBvcy5wYXRoLmpvaW4oYXJncy5iYXNlcGF0aCwgJ21ldGEnLCAnY29uZicsICdkb2N1bWVudGF0aW9uLmNvbmYnKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkb2NfY29uZik6CisgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIGZpbmQgJXMnICUgZG9jX2NvbmYpCisgICAgICAgIHJldHVybiAxCisKKyAgICBhbGxvd2VkX2ZsYWdzID0gWydkb2MnXQorICAgIGZsYWdfcmUgPSByZS5jb21waWxlKHInXFsoLis/KVxdJykKKworICAgIGluZm9zID0ge30KKyAgICB0cmVlID0gZXRyZWUucGFyc2UoJ3JlZi1tYW51YWwvcmVmLXZhcmlhYmxlcy54bWwnKQorICAgIHJvb3QgPSB0cmVlLmdldHJvb3QoKQorICAgIGZvciBnbG9zc2FyeSBpbiByb290LmZpbmRhbGwoJ2dsb3NzYXJ5Jyk6CisgICAgICAgIGZvciBnbG9zc2RpdiBpbiBnbG9zc2FyeS5maW5kYWxsKCdnbG9zc2RpdicpOgorICAgICAgICAgICAgZm9yIGdsb3NzZW50cnkgaW4gZ2xvc3NkaXYuZmluZGFsbCgnZ2xvc3NlbnRyeScpOgorICAgICAgICAgICAgICAgIGluZm8gPSBnbG9zc2VudHJ5LmZpbmQoJ2luZm8nKQorICAgICAgICAgICAgICAgIGlmIGluZm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGluZm9saW5lID0gJyAnLmpvaW4oaW5mby50ZXh0LnNwbGl0KCkpCisgICAgICAgICAgICAgICAgICAgIGluZm9saW5lc3BsaXQgPSBpbmZvbGluZS5zcGxpdCgnPScsIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihpbmZvbGluZSkgPCAyOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0ludmFsaWQgaW5mbyBsaW5lIChubyA9IGNoYXJhY3RlciksIGlnbm9yaW5nOiAlcycgJSBpbmZvbGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gZmxhZ19yZS5maW5kYWxsKGluZm9saW5lc3BsaXRbMF0pCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmbGFnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCdJbnZhbGlkIGluZm8gbGluZSAobm8gdmFyZmxhZyksIGlnbm9yaW5nOiAlcycgJSBpbmZvbGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGZvciBmbGFnIGluIGZsYWdzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmxhZyBub3QgaW4gYWxsb3dlZF9mbGFnczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignSW52YWxpZCBpbmZvIGxpbmUgKHZhcmZsYWcgJXMgbm90IGluIGFsbG93ZWQgbGlzdCksIGlnbm9yaW5nOiAlcycgJSAoZmxhZywgaW5mb2xpbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGluZm9zW2luZm9saW5lc3BsaXRbMF0ucnN0cmlwKCldID0gaW5mb2xpbmVzcGxpdFsxXS5sc3RyaXAoKQorCisgICAgaWYgbm90IGluZm9zOgorICAgICAgICBsb2dnZXIuZXJyb3IoJ0VSUk9SOiBVbmFibGUgdG8gZmluZCBhbnkgaW5mbyB0YWdzIGluIHRoZSBnbG9zc2FyeScpCisgICAgICAgIHJldHVybiAxCisKKyAgICBkZWYgc29ydGtleShrZXkpOgorICAgICAgICAjIFVuZGVyc2NvcmVzIHNvcnQgdW5kZXNpcmFibHksIHNvIHJlcGxhY2UgdGhlbQorICAgICAgICByZXR1cm4ga2V5LnNwbGl0KCdbJylbMF0ucmVwbGFjZSgnXycsICctJykKKworICAgIGNoYW5nZWQgPSBGYWxzZQorICAgIGxpbmVzID0gW10KKyAgICBpbnZhcnMgPSBGYWxzZQorICAgIGxhc3RsZXR0ZXIgPSBOb25lCisgICAgYWRkZWQgPSBbXQorICAgIHdpdGggb3Blbihkb2NfY29uZiwgJ3InKSBhcyBkY2Y6CisgICAgICAgIGZvciBsaW5lIGluIGRjZjoKKyAgICAgICAgICAgIGlmIG5vdCBpbnZhcnM6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjJykgYW5kICdERVNDUklQVElPTlMgRk9SIFZBUklBQkxFUycgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgaW52YXJzID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiBub3QgbGluZS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgbGluZXNwbGl0ID0gbGluZS5zcGxpdCgnPScsIDEpCisgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmVzcGxpdCkgPiAxOgorICAgICAgICAgICAgICAgICAgICBrZXkgPSBsaW5lc3BsaXRbMF0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgbGFzdGxldHRlciA9IGtleVswXQorICAgICAgICAgICAgICAgICAgICAjIEZpbmQgYW55dGhpbmcgaW4gdGhlIGRpY3QgdGhhdCBzaG91bGQgY29tZSBiZWZvcmUgdGhlIGN1cnJlbnQga2V5CisgICAgICAgICAgICAgICAgICAgIGZvciBka2V5IGluIHNvcnRlZChpbmZvcy5rZXlzKCkpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc29ydGtleShka2V5KSA8IHNvcnRrZXkoa2V5KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyVzID0gJXNcbicgJSAoZGtleSwgaW5mb3NbZGtleV0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkLmFwcGVuZChka2V5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBpbmZvc1tka2V5XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIG5ld3ZhbHVlID0gaW5mb3MuZ2V0KGtleSwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbmV3dmFsdWU6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgaW5mb3Nba2V5XQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbmV3dmFsdWUgIT0gbGluZXNwbGl0WzFdLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCclcyA9ICVzXG4nICUgKGtleSwgbmV3dmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBrZXkgaW4gYWRkZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGFscmVhZHkgYWRkZWQgYSBuZXcgdmFsdWUgZm9yIHRoaXMga2V5LCBzbyBza2lwIGl0CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsaWYgbGFzdGxldHRlcjoKKyAgICAgICAgICAgICAgICAgICAgIyBFbnN1cmUgd2Ugd3JpdGUgb3V0IGFueXRoaW5nIGFueXRoaW5nIGxlZnQgb3ZlciBmb3IgdGhpcyBsZXR0ZXIKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRrZXkgaW4gc29ydGVkKGluZm9zLmtleXMoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBka2V5WzBdID09IGxhc3RsZXR0ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCclcyA9ICVzXG4nICUgKGRrZXksIGluZm9zW2RrZXldKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgaW5mb3NbZGtleV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBka2V5WzBdID4gbGFzdGxldHRlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIExpc3QgaXMgc29ydGVkLCBzbyB3ZSdyZSBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgbGFzdGxldHRlciA9IE5vbmUKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQorCisgICAgaWYgbm90IGludmFyczoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdFUlJPUjogVW5hYmxlIHRvIGZpbmQgdmFyaWFibGVzIHNlY3Rpb24gaW4gZG9jdW1lbnRhdGlvbi5jb25mJykKKyAgICAgICAgcmV0dXJuIDEKKworICAgIGlmIGluZm9zOgorICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorICAgICAgICAjIFdyaXRlIG91dCBhbnl0aGluZyBsZWZ0IG92ZXIKKyAgICAgICAgbGluZXMuYXBwZW5kKCdcblxuJykKKyAgICAgICAgZm9yIGtleSBpbiBzb3J0ZWQoaW5mb3Mua2V5cygpKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJXMgPSAlc1xuJyAlIChrZXksIGluZm9zW2tleV0pKQorCisgICAgaWYgY2hhbmdlZDoKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1VwZGF0aW5nICVzJyAlIGRvY19jb25mKQorICAgICAgICB3aXRoIG9wZW4oZG9jX2NvbmYsICd3JykgYXMgZGNmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgZGNmLndyaXRlKGxpbmUpCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ05vIGNoYW5nZXMgcmVxdWlyZWQnKQorCisgICAgcmV0dXJuIDAKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy9maWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmI3YTU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvZmlndXJlcy95b2N0by1wcm9qZWN0LXRyYW5zcC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy9maWd1cmVzL3lvY3RvLXByb2plY3QtdHJhbnNwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMWQyYjE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvZmlndXJlcy95b2N0by1wcm9qZWN0LXRyYW5zcC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvcXMtc3R5bGUuY3NzIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvcXMtc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNWM4NWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy9xcy1zdHlsZS5jc3MKQEAgLTAsMCArMSw5ODMgQEAKKy8qCisgICBHZW5lcmljIFhIVE1MIC8gRG9jQm9vayBYSFRNTCBDU1MgU3R5bGVzaGVldC4KKworICAgQnJvd3NlciB3cmFuZ2xpbmcgYW5kIHR5cG9ncmFwaGljIGRlc2lnbiBieQorICAgICAgT3l2aW5kIEtvbGFzIC8gcGlwcGluQGdpbXAub3JnCisKKyAgIEN1c3RvbWlzZWQgZm9yIFBva3kgYnkKKyAgICAgIE1hdHRoZXcgQWxsdW0gLyBtYWxsdW1Aby1oYW5kLmNvbQorCisgICBUaGFua3MgdG86CisgICAgIExpYW0gUi4gRS4gUXVpbgorICAgICBXaWxsaWFtIFNrYWdncworICAgICBKYWt1YiBTdGVpbmVyCisKKyAgIFN0cnVjdHVyZQorICAgLS0tLS0tLS0tCisKKyAgIFRoZSBzdHlsZXNoZWV0IGlzIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgorCisgICAgICAgUG9zaXRpb25pbmcKKyAgICAgICAgICBNYXJnaW5zLCBwYWRkaW5ncywgd2lkdGgsIGZvbnQtc2l6ZSwgY2xlYXJpbmcuCisgICAgICAgRGVjb3JhdGlvbnMKKyAgICAgICAgICBCb3JkZXJzLCBzdHlsZQorICAgICAgIENvbG9ycworICAgICAgICAgIENvbG9ycworICAgICAgIEdyYXBoaWNzCisgICAgICAgICAgR3JhcGhpY2FsIGJhY2tncm91bmRzCisgICAgICAgTmFzdHkgSUUgdHdlYWtzCisgICAgICAgICAgV29ya2Fyb3VuZHMgbmVlZGVkIHRvIG1ha2UgaXQgd29yayBpbiBpbnRlcm5ldCBleHBsb3JlciwKKyAgICAgICAgICBjdXJyZW50bHkgbWFrZXMgdGhlIHN0eWxlc2hlZXQgbm9uIHZhbGlkYXRpbmcsIGJ1dCB1cCB1bnRpbAorICAgICAgICAgIHRoaXMgcG9pbnQgaXQgaXMgdmFsaWRhdGluZy4KKyAgICAgICBNb3ppbGxhIGV4dGVuc2lvbnMKKyAgICAgICAgICBUcmFuc3BhcmVuY3kgZm9yIGZvb3RlcgorCSAgUm91bmRlZCBjb3JuZXJzIG9uIGJveGVzCisKKyovCisKKworICAvKioqKioqKioqKioqKioqIC8KKyAvICBQb3NpdGlvbmluZyAgIC8KKy8gKioqKioqKioqKioqKioqLworCitib2R5IHsKKyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIFNhbnMsIHNhbnMtc2VyaWY7CisKKyAgbWluLXdpZHRoOiA2NDBweDsKKyAgd2lkdGg6IDgwJTsKKyAgbWFyZ2luOiAgMGVtIGF1dG87CisgIHBhZGRpbmc6IDJlbSA1ZW0gNWVtIDVlbTsKKyAgY29sb3I6ICMzMzM7Cit9CisKK2gxLGgyLGgzLGg0LGg1LGg2LGg3IHsKKyAgZm9udC1mYW1pbHk6IEFyaWFsLCBTYW5zOworICBjb2xvcjogIzAwNTU3RDsKKyAgY2xlYXI6IGJvdGg7Cit9CisKK2gxIHsKKyAgZm9udC1zaXplOiAyZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAyZW0gMGVtIDBlbSAwZW07Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwLjEwZW0gMGVtIDMuMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuOGVtOworICBwYWRkaW5nLWxlZnQ6IDIwJTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCitoMiB7CisgIG1hcmdpbjogMmVtIDBlbSAwLjY2ZW0gMGVtOworICBwYWRkaW5nOiAwLjVlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjVlbTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gzLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDIuMTQlOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworaDMgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g0IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEyMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNSB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDYgeworICBtYXJnaW46IDFlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisuYXV0aG9yZ3JvdXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgcGFkZGluZy10b3A6IDI1NnB4OworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3A7CisgIG1hcmdpbi10b3A6IC0yNTZweDsKKyAgcGFkZGluZy1yaWdodDogNTBweDsKKyAgbWFyZ2luLWxlZnQ6IDUwcHg7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgd2lkdGg6IDYwMHB4OworfQorCitoMy5hdXRob3IgeworICBtYXJnaW46IDBlbSAwbWUgMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXNpemU6IDEwMCU7CisgIGNvbG9yOiAjMzMzOworICBjbGVhcjogYm90aDsKK30KKworLmF1dGhvciB0dC5lbWFpbCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCisudGl0bGVwYWdlIGhyIHsKKyAgd2lkdGg6IDBlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5yZXZoaXN0b3J5IHsKKyAgcGFkZGluZy10b3A6IDJlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy50b2MsCisubGlzdC1vZi10YWJsZXMsCisubGlzdC1vZi1leGFtcGxlcywKKy5saXN0LW9mLWZpZ3VyZXMgeworICBwYWRkaW5nOiAxLjMzZW0gMGVtIDIuNWVtIDBlbTsKKyAgY29sb3I6ICMwMDU1N0Q7Cit9CisKKy50b2MgcCwKKy5saXN0LW9mLXRhYmxlcyBwLAorLmxpc3Qtb2YtZmlndXJlcyBwLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwLjNlbTsKKyAgbWFyZ2luOiAxLjVlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBwIGIsCisubGlzdC1vZi10YWJsZXMgcCBiLAorLmxpc3Qtb2YtZmlndXJlcyBwIGIsCisubGlzdC1vZi1leGFtcGxlcyBwIGJ7CisgIGZvbnQtc2l6ZTogMTAwLjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLnRvYyBkbCwKKy5saXN0LW9mLXRhYmxlcyBkbCwKKy5saXN0LW9mLWZpZ3VyZXMgZGwsCisubGlzdC1vZi1leGFtcGxlcyBkbCB7CisgIG1hcmdpbjogMGVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkdCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZGQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDIuNmVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5nbG9zc2FyeSBkbCwKK2Rpdi52YXJpYWJsZWxpc3QgZGwgeworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBmb250LXdlaWdodDogbm9ybWFsOworICB3aWR0aDogMjBlbTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy52YXJpYWJsZWxpc3QgZGwgZHQgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKK30KKworLmdsb3NzYXJ5IGRsIGRkLAorLnZhcmlhYmxlbGlzdCBkbCBkZCB7CisgIG1hcmdpbi10b3A6IC0xZW07CisgIG1hcmdpbi1sZWZ0OiAyNS41ZW07Cit9CisKKy5nbG9zc2FyeSBkZCBwLAorLnZhcmlhYmxlbGlzdCBkZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworZGl2IHAuY29weXJpZ2h0IHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworZGl2LmxlZ2Fsbm90aWNlIHAubGVnYWxub3RpY2UtdGl0bGUgeworICBtYXJnaW4tYm90dG9tOiAwZW07Cit9CisKK3AgeworICBsaW5lLWhlaWdodDogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKworfQorCitkbCB7CisgIHBhZGRpbmctdG9wOiAwZW07Cit9CisKK2hyIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKKworLm1lZGlhb2JqZWN0LAorLm1lZGlhb2JqZWN0Y28geworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKK2ltZyB7CisgIGJvcmRlcjogbm9uZTsKK30KKwordWwgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAxLjVlbTsKK30KKwordWwgbGkgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK3VsIGxpIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCit0YWJsZSB7CisgIHdpZHRoIDoxMDAlOworfQorCit0aCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKwordGQgeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3AgYVtpZF0geworICBtYXJnaW46IDBweDsKKyAgcGFkZGluZzogMHB4OworICBkaXNwbGF5OiBpbmxpbmU7CisgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Cit9CisKK2EgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK3ByZSB7CisgICAgb3ZlcmZsb3c6IGF1dG87Cit9CisKK2E6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgLypmb250LXdlaWdodDogYm9sZDsqLworfQorCisvKiBUaGlzIHN0eWxlIGRlZmluZXMgaG93IHRoZSBwZXJtYWxpbmsgY2hhcmFjdGVyCisgICBhcHBlYXJzIGJ5IGl0c2VsZiBhbmQgd2hlbiBob3ZlcmVkIG92ZXIgd2l0aAorICAgdGhlIG1vdXNlLiAqLworCitbYWx0PSdQZXJtYWxpbmsnXSB7IGNvbG9yOiAjZWVlOyB9CitbYWx0PSdQZXJtYWxpbmsnXTpob3ZlciB7IGNvbG9yOiBibGFjazsgfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSB7CisgIG1hcmdpbjogMWVtIDBlbTsKKyAgcGFkZGluZzogMWVtOworICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7Cit9CisKKworZGl2LmluZm9ybWFsZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsdGFibGUgcC50aXRsZSBiLAorZGl2LmZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYudGFibGUgcC50aXRsZSBieworICAgIHBhZGRpbmctdG9wOiAwZW07CisgICAgbWFyZ2luLXRvcDogMGVtOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisubWVkaWFvYmplY3QgLmNhcHRpb24sCisubWVkaWFvYmplY3QgLmNhcHRpb24gcCAgeworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nLXRvcDogMC41ZW07CisgIHBhZGRpbmctYm90dG9tOiAwLjVlbTsKK30KKworLmVwaWdyYXBoIHsKKyAgcGFkZGluZy1sZWZ0OiA1NSU7CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworLmVwaWdyYXBoIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuZXBpZ3JhcGggLnF1b3RlIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorLmVwaWdyYXBoIC5hdHRyaWJ1dGlvbiB7CisgIGZvbnQtc3R5bGU6IG5vcm1hbDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK3NwYW4uYXBwbGljYXRpb24geworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogODAlOworICB3aGl0ZS1zcGFjZTogcHJlOworICBtYXJnaW46IDEuMzNlbSAwZW07CisgIHBhZGRpbmc6IDEuMzNlbTsKK30KKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIG1hcmdpbi10b3A6IDFlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworCit9CisKKy8qIGZvcmNlIGZ1bGwgd2lkdGggb2YgdGFibGUgd2l0aGluIGRpdiAqLworLnRpcCB0YWJsZSwKKy53YXJuaW5nIHRhYmxlLAorLmNhdXRpb24gdGFibGUsCisubm90ZSB0YWJsZSB7CisgIGJvcmRlcjogbm9uZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIHBhZGRpbmc6IDAuOGVtIDAuMGVtIDAuMGVtIDAuMGVtOworICBtYXJnaW4gOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50aXAgcCwKKy53YXJuaW5nIHAsCisuY2F1dGlvbiBwLAorLm5vdGUgcCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKKyAgcGFkZGluZy1yaWdodDogMWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuYWNyb255bSB7CisgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIHBhZGRpbmc6IDAuMDllbSAwLjNlbTsKKyAgbWFyZ2luOiAwZW07Cit9CisKKy5pdGVtaXplZGxpc3QgbGkgeworICBjbGVhcjogbm9uZTsKK30KKworLmZpbGVuYW1lIHsKKyAgZm9udC1zaXplOiBtZWRpdW07CisgIGZvbnQtZmFtaWx5OiBDb3VyaWVyLCBtb25vc3BhY2U7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgbGVmdDogMGVtOworICB0b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7CisgIGJhY2tncm91bmQtY29sb3I6ICNjZGY7CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgcG9zaXRpb246IGZpeGVkOworICBsZWZ0OiAwZW07CisgIGJvdHRvbTogMGVtOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICB3aWR0aDogMTAwJTsKK30KKworCitkaXYubmF2aGVhZGVyIHRkLAorZGl2Lm5hdmZvb3RlciB0ZCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRoIHsKKyAgLypmb250LWZhbWlseTogR2VvcmdpYSwgVGltZXMsIHNlcmlmOyovCisgIC8qZm9udC1zaXplOiB4LWxhcmdlOyovCisgIGZvbnQtc2l6ZTogODAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci10b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhIHsKKyAgY29sb3I6ICM3Nzc7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworLyogbm9ybWFsIHRleHQgaW4gdGhlIGZvb3RlciAqLworZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCB7CisgIGNvbG9yOiBibGFjazsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOnZpc2l0ZWQsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6dmlzaXRlZCB7CisgIGNvbG9yOiAjNDQ0OworfQorCisKKy8qIGxpbmtzIGluIGhlYWRlciBhbmQgZm9vdGVyICovCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6aG92ZXIsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGNvbG9yOiAjMzNhOworfQorCitkaXYubmF2aGVhZGVyIGhyLAorZGl2Lm5hdmZvb3RlciBociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworLnFhbmRhc2V0IHRyLnF1ZXN0aW9uIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisucWFuZGFzZXQgdHIuYW5zd2VyIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorLmFuc3dlciB0ZCB7CisgIHBhZGRpbmctYm90dG9tOiAxLjVlbTsKK30KKworLmVtcGhhc2lzIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKworICAvKioqKioqKioqKioqKiAvCisgLyBkZWNvcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqLworCisudGl0bGVwYWdlIHsKK30KKworLnBhcnQgLnRpdGxlIHsKK30KKworLnN1YnRpdGxlIHsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKy8qCitoMSB7CisgIGJvcmRlcjogbm9uZTsKK30KKworaDIgeworICBib3JkZXItdG9wOiBzb2xpZCAwLjJlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoMyB7CisgIGJvcmRlci10b3A6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNCB7CisgIGJvcmRlcjogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g1IHsKKyAgYm9yZGVyOiAwZW07Cit9CisqLworCisucHJvZ3JhbWxpc3RpbmcgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKy5xdWVzdGlvbiB0ZCB7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsKK30KKworLmFuc3dlciB7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkOworfQorCisgIC8qKioqKioqKiogLworIC8gIGNvbG9ycyAgLworLyAqKioqKioqKiovCisKK2JvZHkgeworICBjb2xvcjogIzMzMzsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisKK2EgeworICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKK30KKworYTpob3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6ICNkZWRlZGU7Cit9CisKKworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDcsCitoOCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworfQorCitociB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworCisudGlwLCAud2FybmluZywgLmNhdXRpb24sIC5ub3RlIHsKKyAgYm9yZGVyLWNvbG9yOiAjZmZmOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmOworfQorCisKKy53YXJuaW5nIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisudGlwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLm5vdGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBjb2xvcjogIzA0NDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCitwcmUucHJvZ3JhbWxpc3RpbmcgeworICBjb2xvcjogYmxhY2s7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKKyAgYm9yZGVyLXdpZHRoOiAycHg7Cit9CisKKy5ndWltZW51LAorLmd1aWxhYmVsLAorLmd1aW1lbnVpdGVtIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICBib3JkZXItY29sb3I6ICM5OTk7Cit9CisKKworZGl2Lm5hdmhlYWRlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworICAvKioqKioqKioqKiogLworIC8gIGdyYXBoaWNzICAvCisvICoqKioqKioqKioqLworCisvKgorYm9keSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2JvZHlfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5uYXZoZWFkZXIsCisubm90ZSwKKy50aXAgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ub3RlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisud2FybmluZywKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvd2FybmluZ19iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLmZpZ3VyZSwKKy5pbmZvcm1hbGZpZ3VyZSwKKy5leGFtcGxlLAorLmluZm9ybWFsZXhhbXBsZSwKKy50YWJsZSwKKy5pbmZvcm1hbHRhYmxlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvZmlndXJlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisqLworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDd7Cit9CisKKy8qCitFeGFtcGxlIG9mIGhvdyB0byBzdGljayBhbiBpbWFnZSBhcyBwYXJ0IG9mIHRoZSB0aXRsZS4KKworZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL3doaXRlLW9uLWJsYWNrLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKK30KKyovCisKK2Rpdi5wcmVmYWNlIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmNvbG9waG9uIC50aXRsZSwKK2Rpdi5jaGFwdGVyIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKK30KKworZGl2LnNlY3Rpb24gZGl2LnNlY3Rpb24gLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuc2VjdDIgLnRpdGxlcGFnZSAudGl0bGUgeworICAgIGJhY2tncm91bmQ6IG5vbmU7Cit9CisKKworaDEudGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgaGVpZ2h0OiAyNTZweDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKK30KKworaDIuc3VidGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKKyAgd2lkdGg6IDBweDsKKyAgZGlzcGxheTogbm9uZTsKK30KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvICBwaXBwaW4uZ2ltcC5vcmcgc3BlY2lmaWMgYWx0ZXJhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICBjb2xvcjogIzc3NzsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmc6IDA7CisgIG1hcmdpbjogMDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDBweDsKKyAgbGVmdDogMHB4OworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiA1MHB4OworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvaGVhZGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworICBib3JkZXI6IG5vbmU7Cit9CisKK2Rpdi5oZWFkaW5nIGEgeworICBjb2xvcjogIzQ0NDsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICBib3JkZXI6IG5vbmU7CisgIGNvbG9yOiAjZGRkOworICBmb250LXNpemU6IDgwJTsKKyAgdGV4dC1hbGlnbjpyaWdodDsKKworICB3aWR0aDogMTAwJTsKKyAgcGFkZGluZy10b3A6IDEwcHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgYm90dG9tOiAwcHg7CisgIGxlZnQ6IDBweDsKKworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvZm9vdGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKK30KKyovCisKKworCisgIC8qKioqKioqKioqKioqKioqKiogLworIC8gIG5hc3R5IGllIHR3ZWFrcyAgLworLyAqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworICBtYXJnaW4tbGVmdDpleHByZXNzaW9uKCItNWVtIik7Cit9Citib2R5IHsKKyAgcGFkZGluZzpleHByZXNzaW9uKCI0ZW0gNWVtIDBlbSA1ZW0iKTsKK30KKyovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gbW96aWxsYSB2ZW5kb3Igc3BlY2lmaWMgY3NzIGV4dGVuc2lvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgLW1vei1vcGFjaXR5OiAwLjhlbTsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlLAorLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC41ZW07Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC4zZW07Cit9CisqLworCit0YWJsZSB0ciB0ZCB0YWJsZSB0ciB0ZCB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworaHIgeworICBkaXNwbGF5OiBub25lOworfQorCit0YWJsZSB7CisgIGJvcmRlcjogMGVtOworfQorCisgLnBob3RvIHsKKyAgZmxvYXQ6IHJpZ2h0OworICBtYXJnaW4tbGVmdDogICAxLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWF4LXdpZHRoOiAgICAgIDE3ZW07CisgIGJvcmRlcjogICAgIDFweCBzb2xpZCBncmF5OworICBwYWRkaW5nOiAgICAzcHg7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorIC5zZXBlcmF0b3IgeworICAgcGFkZGluZy10b3A6IDJlbTsKKyAgIGNsZWFyOiBib3RoOworICB9CisKKyAgI3ZhbGlkYXRvcnMgeworICAgICAgbWFyZ2luLXRvcDogNWVtOworICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICBjb2xvcjogIzc3NzsKKyAgfQorICBAbWVkaWEgcHJpbnQgeworICAgICAgYm9keSB7CisgICAgICAgICAgZm9udC1zaXplOiA4cHQ7CisgICAgICB9CisgICAgICAubm9wcmludCB7CisgICAgICAgICAgZGlzcGxheTogbm9uZTsKKyAgICAgIH0KKyAgfQorCisKKy50aXAsCisubm90ZSB7CisgICBiYWNrZ3JvdW5kOiAjZjBmMGYyOworICAgY29sb3I6ICMzMzM7CisgICBwYWRkaW5nOiAyMHB4OworICAgbWFyZ2luOiAyMHB4OworfQorCisudGlwIGgzLAorLm5vdGUgaDMgeworICAgcGFkZGluZzogMGVtOworICAgbWFyZ2luOiAwZW07CisgICBmb250LXNpemU6IDJlbTsKKyAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgY29sb3I6ICMzMzM7Cit9CisKKy50aXAgYSwKKy5ub3RlIGEgeworICAgY29sb3I6ICMzMzM7CisgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLmZvb3Rub3RlIHsKKyAgIGZvbnQtc2l6ZTogc21hbGw7CisgICBjb2xvcjogIzMzMzsKK30KKworLyogQ2hhbmdlcyB0aGUgYW5ub3VuY2VtZW50IHRleHQgKi8KKy50aXAgaDMsCisud2FybmluZyBoMywKKy5jYXV0aW9uIGgzLAorLm5vdGUgaDMgeworICAgZm9udC1zaXplOmxhcmdlOworICAgY29sb3I6ICMwMDU1N0Q7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLWN1c3RvbWl6YXRpb24ueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2MwMmRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9InlvY3RvLXByb2plY3QtcXMtdGl0bGVwYWdlLnhzbCIvPgorCisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUudG9jIiBzZWxlY3Q9IidhcnRpY2xlIG5vcCciPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSIncXMtc3R5bGUuY3NzJyIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlNjgzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDM0IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldAorCXhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorCXhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiCisJdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQKKwkgIGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9InlvY3RvLXByb2plY3QtcXMtdGl0bGVwYWdlLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmtlci5vdXRwdXQuaW5kZW50IiBzZWxlY3Q9Iid5ZXMnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsucXVpZXRseSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0idXNlLmlkLmFzLmZpbGVuYW1lIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ1bGluay50YXJnZXQiIHNlbGVjdD0iJ19zZWxmJyIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJiYXNlLmRpciIgc2VsZWN0PSInaHRtbC95b2N0by1wcm9qZWN0LXFzLyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5zZWN0aW9uLmRlcHRoIiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJy4uL2Jvb2suY3NzJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImVjbGlwc2UubWFuaWZlc3QiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNyZWF0ZS5wbHVnaW4ueG1sIiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzdXBwcmVzcy5uYXZpZ2F0aW9uIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS5pbmRleCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUudG9jIiBzZWxlY3Q9IidhcnRpY2xlIG5vcCciPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInc3R5bGUuY3NzJyIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLXRpdGxlcGFnZS54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLXRpdGxlcGFnZS54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQzNWFjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMtdGl0bGVwYWdlLnhzbApAQCAtMCwwICsxLDM4MjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorCis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHhtbG5zOmV4c2w9Imh0dHA6Ly9leHNsdC5vcmcvY29tbW9uIiB2ZXJzaW9uPSIxLjAiIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSJleHNsIj4KKworPCEtLSBUaGlzIHN0eWxlc2hlZXQgd2FzIGNyZWF0ZWQgYnkgdGVtcGxhdGUvdGl0bGVwYWdlLnhzbC0tPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImFydGljbGVpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImFydGhlYWRlci90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aGVhZGVyL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iYXJ0aWNsZWluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iYXJ0aGVhZGVyL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aGVhZGVyL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGhlYWRlci9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aGVhZGVyL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aGVhZGVyL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGhlYWRlci9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aGVhZGVyL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aGVhZGVyL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhcnRpY2xlLnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhcnRpY2xlLnRpdGxlcGFnZS5zZXBhcmF0b3IiPjxoci8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhcnRpY2xlLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYXJ0aWNsZS50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhcnRpY2xlLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhcnRpY2xlLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhcnRpY2xlLnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYW5jaG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzLz4KKzwhLS0gb3JpZ25hbGx5IGdlbmVyYXRlZCBjb250ZW50IC0tPgorPCEtLSA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4gLS0+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2V0LnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzZXRpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNldGluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2V0aW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2V0aW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2V0aW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2V0aW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNldGluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2V0aW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2V0aW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYWJzdHJhY3QiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNldC50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2V0LnRpdGxlcGFnZS5zZXBhcmF0b3IiPjxoci8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXQudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXQudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXQudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNldC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2V0LnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2V0LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZXQudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNldC50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNldC50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRpdGxlIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcnBhdXRob3IiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yZ3JvdXAiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im90aGVyY3JlZGl0IiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlbGVhc2VpbmZvIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcHlyaWdodCIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZXQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsZWdhbG5vdGljZSIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZXQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwdWJkYXRlIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmlzaW9uIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmhpc3RvcnkiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYWJzdHJhY3QiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJib29rLnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJib29raW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYm9va2luZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJib29raW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYm9va2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJib29raW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJib29raW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJib29raW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYm9va2luZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJib29raW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJib29raW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJib29rLnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJib29rLnRpdGxlcGFnZS5zZXBhcmF0b3IiPjxoci8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJib29rLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYm9vay50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJib29rLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJib29rLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJib29rLnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9ImJvb2sudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYm9vay50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYm9vay50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYm9vay50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYm9vay50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYm9vay50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImJvb2sudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImJvb2sudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYm9vay50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYm9vay50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2UucmVjdG8iPgorICA8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkaXZpc2lvbi50aXRsZSI+Cis8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSJhbmNlc3Rvci1vci1zZWxmOjpwYXJ0WzFdIi8+Cis8L3hzbDpjYWxsLXRlbXBsYXRlPjwvZGl2PgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0icGFydGluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InBhcnQudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhcnQudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhcnQudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhcnQudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0icGFydC50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcnBhdXRob3IiIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yZ3JvdXAiIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im90aGVyY3JlZGl0IiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlbGVhc2VpbmZvIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcHlyaWdodCIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsZWdhbG5vdGljZSIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwdWJkYXRlIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmlzaW9uIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmhpc3RvcnkiIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYWJzdHJhY3QiIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InBhcnRpbnRyb2luZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGludHJvaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJwYXJ0aW50cm9pbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icGFydGludHJvLnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0aW50cm8udGl0bGVwYWdlLnNlcGFyYXRvciI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0aW50cm8udGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0aW50cm8udGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0aW50cm8udGl0bGVwYWdlIj4KKyAgPGRpdj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhcnRpbnRyby50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFydGludHJvLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYXJ0aW50cm8udGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhcnRpbnRyby50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRpdGxlIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcnBhdXRob3IiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yZ3JvdXAiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im90aGVyY3JlZGl0IiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlbGVhc2VpbmZvIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcHlyaWdodCIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsZWdhbG5vdGljZSIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwdWJkYXRlIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmlzaW9uIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmhpc3RvcnkiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYWJzdHJhY3QiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InJlZmVyZW5jZWluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icmVmZXJlbmNlaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJyZWZlcmVuY2VpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icmVmZXJlbmNlLnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJyZWZlcmVuY2UudGl0bGVwYWdlLnNlcGFyYXRvciI+PGhyLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJlZmVyZW5jZS50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJlZmVyZW5jZS50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJlZmVyZW5jZS50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJyZWZlcmVuY2UudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJlZmVyZW5jZS50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGl0bGUiIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJlZmVudHJ5LnRpdGxlcGFnZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJyZWZlbnRyeS50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icmVmZW50cnkudGl0bGVwYWdlLnNlcGFyYXRvciI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJyZWZlbnRyeS50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJlZmVudHJ5LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icmVmZW50cnkudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJlZmVudHJ5LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJyZWZlbnRyeS50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJlZmVudHJ5LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJyZWZlbnRyeS50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icmVmZW50cnkudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJyZWZlbnRyeS50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InJlZmVudHJ5LnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0byI+CisgIDxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iZGVkaWNhdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNvbXBvbmVudC50aXRsZSI+Cis8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSJhbmNlc3Rvci1vci1zZWxmOjpkZWRpY2F0aW9uWzFdIi8+Cis8L3hzbDpjYWxsLXRlbXBsYXRlPjwvZGl2PgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iZGVkaWNhdGlvbmluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRlZGljYXRpb25pbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlLnNlcGFyYXRvciI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9ImRlZGljYXRpb24udGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iZGVkaWNhdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvIj4KKyAgPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY29tcG9uZW50LnRpdGxlIj4KKzx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9ImFuY2VzdG9yLW9yLXNlbGY6OmFja25vd2xlZGdlbWVudHNbMV0iLz4KKzwveHNsOmNhbGwtdGVtcGxhdGU+PC9kaXY+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJhY2tub3dsZWRnZW1lbnRzaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYWNrbm93bGVkZ2VtZW50c2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8iPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0icHJlZmFjZWluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InByZWZhY2VpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InByZWZhY2VpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwcmVmYWNlaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwcmVmYWNlaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icHJlZmFjZWluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InByZWZhY2VpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwcmVmYWNlaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icHJlZmFjZWluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InByZWZhY2VpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwcmVmYWNlaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icHJlZmFjZWluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InByZWZhY2VpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwcmVmYWNlaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icHJlZmFjZWluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYWJzdHJhY3QiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InByZWZhY2UudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InByZWZhY2UudGl0bGVwYWdlLnNlcGFyYXRvciI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwcmVmYWNlLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icHJlZmFjZS50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InByZWZhY2UudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InByZWZhY2UudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwcmVmYWNlLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwcmVmYWNlLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwcmVmYWNlLnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8iPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iY2hhcHRlcmluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImNoYXB0ZXJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImNoYXB0ZXJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJjaGFwdGVyaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJjaGFwdGVyaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iY2hhcHRlcmluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImNoYXB0ZXJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJjaGFwdGVyaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iY2hhcHRlcmluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImNoYXB0ZXJpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJjaGFwdGVyaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iY2hhcHRlcmluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImNoYXB0ZXJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJjaGFwdGVyaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iY2hhcHRlcmluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYWJzdHJhY3QiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIudGl0bGVwYWdlLnNlcGFyYXRvciI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJjaGFwdGVyLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iY2hhcHRlci50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjaGFwdGVyLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjaGFwdGVyLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjaGFwdGVyLnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImFwcGVuZGl4aW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFwcGVuZGl4aW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJhcHBlbmRpeGluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcHBlbmRpeGluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFwcGVuZGl4aW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXBwZW5kaXhpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcHBlbmRpeGluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFwcGVuZGl4aW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXBwZW5kaXhpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcHBlbmRpeGluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFwcGVuZGl4aW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXBwZW5kaXhpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcHBlbmRpeGluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFwcGVuZGl4aW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXBwZW5kaXhpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYWJzdHJhY3QiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFwcGVuZGl4LnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhcHBlbmRpeC50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFwcGVuZGl4LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYXBwZW5kaXgudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhcHBlbmRpeC50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYXBwZW5kaXgudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYXBwZW5kaXgudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFwcGVuZGl4LnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhcHBlbmRpeC50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8iPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2VjdGlvbmluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Rpb25pbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2VjdGlvbmluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Rpb25pbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdGlvbmluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdGlvbmluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdGlvbmluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Rpb25pbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdGlvbmluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdGlvbmluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZXBhZ2Uuc2VwYXJhdG9yIj48eHNsOmlmIHRlc3Q9ImNvdW50KHBhcmVudDo6Kik9JzAnIj48aHIvPjwveHNsOmlmPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Rpb24udGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZSI+CisgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGl0bGUiIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QxLnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzZWN0MWluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MWluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3QxaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QxaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QxaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QxaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QxaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MWluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QxaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QxaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDEudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QxLnRpdGxlcGFnZS5zZXBhcmF0b3IiPjx4c2w6aWYgdGVzdD0iY291bnQocGFyZW50OjoqKT0nMCciPjxoci8+PC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0MS50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QxLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDEudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QxLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QxLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0MS50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDEudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3QxLnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGl0bGUiIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QyLnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzZWN0MmluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MmluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3QyaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QyaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QyaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QyaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QyaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MmluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QyaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QyaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDIudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QyLnRpdGxlcGFnZS5zZXBhcmF0b3IiPjx4c2w6aWYgdGVzdD0iY291bnQocGFyZW50OjoqKT0nMCciPjxoci8+PC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0Mi50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QyLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDIudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QyLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QyLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0Mi50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDIudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3QyLnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGl0bGUiIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QzLnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzZWN0M2luZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0M2luZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3QzaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QzaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QzaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QzaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QzaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0M2luZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QzaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QzaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDMudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QzLnRpdGxlcGFnZS5zZXBhcmF0b3IiPjx4c2w6aWYgdGVzdD0iY291bnQocGFyZW50OjoqKT0nMCciPjxoci8+PC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0My50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QzLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDMudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QzLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0My50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QzLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0My50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDMudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3QzLnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGl0bGUiIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzZWN0NGluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NGluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3Q0aW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q0aW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q0aW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q0aW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q0aW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NGluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q0aW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q0aW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDQudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Q0LnRpdGxlcGFnZS5zZXBhcmF0b3IiPjx4c2w6aWYgdGVzdD0iY291bnQocGFyZW50OjoqKT0nMCciPjxoci8+PC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0NC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Q0LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDQudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Q0LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Q0LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0NC50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDQudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGl0bGUiIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzZWN0NWluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NWluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3Q1aW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q1aW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q1aW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q1aW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q1aW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NWluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q1aW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q1aW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDUudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Q1LnRpdGxlcGFnZS5zZXBhcmF0b3IiPjx4c2w6aWYgdGVzdD0iY291bnQocGFyZW50OjoqKT0nMCciPjxoci8+PC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0NS50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Q1LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDUudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Q1LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Q1LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0NS50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDUudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGl0bGUiIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNpbXBsZXNlY3RpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaW1wbGVzZWN0aW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzaW1wbGVzZWN0aW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2ltcGxlc2VjdGluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2ltcGxlc2VjdGluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNpbXBsZXNlY3RpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaW1wbGVzZWN0aW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2ltcGxlc2VjdGluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNpbXBsZXNlY3RpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaW1wbGVzZWN0aW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2ltcGxlc2VjdGluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNpbXBsZXNlY3RpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaW1wbGVzZWN0aW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2ltcGxlc2VjdGluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNpbXBsZXNlY3RpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5zZXBhcmF0b3IiPjx4c2w6aWYgdGVzdD0iY291bnQocGFyZW50OjoqKT0nMCciPjxoci8+PC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0byI+CisgIDxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY29tcG9uZW50LnRpdGxlIj4KKzx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9ImFuY2VzdG9yLW9yLXNlbGY6OmJpYmxpb2dyYXBoeVsxXSIvPgorPC94c2w6Y2FsbC10ZW1wbGF0ZT48L2Rpdj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImJpYmxpb2dyYXBoeWluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYmlibGlvZ3JhcGh5aW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJnbG9zc2FyeS50aXRsZXBhZ2UucmVjdG8iPgorICA8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY29tcG9uZW50LnRpdGxlIj4KKzx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9ImFuY2VzdG9yLW9yLXNlbGY6Omdsb3NzYXJ5WzFdIi8+Cis8L3hzbDpjYWxsLXRlbXBsYXRlPjwvZGl2PgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iZ2xvc3NhcnlpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZ2xvc3NhcnlpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJnbG9zc2FyeS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9Imdsb3NzYXJ5LnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJnbG9zc2FyeS50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iZ2xvc3NhcnkudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJnbG9zc2FyeS50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2xvc3NhcnkudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2xvc3NhcnkudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Imdsb3NzYXJ5LnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnbG9zc2FyeS50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImluZGV4LnRpdGxlcGFnZS5yZWN0byI+CisgIDxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iaW5kZXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjb21wb25lbnQudGl0bGUiPgorPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iYW5jZXN0b3Itb3Itc2VsZjo6aW5kZXhbMV0iLz4KKzwveHNsOmNhbGwtdGVtcGxhdGU+PC9kaXY+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmRleGluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iaW5kZXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmRleGluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImluZGV4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iaW5kZXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iaW5kZXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iaW5kZXgudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImluZGV4LnRpdGxlcGFnZS5zZXBhcmF0b3IiPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iaW5kZXgudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJpbmRleC50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImluZGV4LnRpdGxlcGFnZSI+CisgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJpbmRleC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iaW5kZXgudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJpbmRleC50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iaW5kZXgudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImluZGV4LnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iaW5kZXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJpbmRleC50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJpbmRleC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iaW5kZXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iaW5kZXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2V0aW5kZXgudGl0bGVwYWdlLnJlY3RvIj4KKyAgPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNvbXBvbmVudC50aXRsZSI+Cis8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSJhbmNlc3Rvci1vci1zZWxmOjpzZXRpbmRleFsxXSIvPgorPC94c2w6Y2FsbC10ZW1wbGF0ZT48L2Rpdj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNldGluZGV4aW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNldGluZGV4aW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0aW5kZXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXRpbmRleC50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2V0aW5kZXgudGl0bGVwYWdlLnNlcGFyYXRvciI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXRpbmRleC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNldGluZGV4LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2V0aW5kZXgudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNldGluZGV4LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNldGluZGV4LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZXRpbmRleC50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2V0aW5kZXgudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNldGluZGV4LnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InNldGluZGV4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzaWRlYmFyaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2lkZWJhcmluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpZGViYXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpZGViYXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2lkZWJhcmluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNpZGViYXJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlLnNlcGFyYXRvciI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzaWRlYmFyLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2lkZWJhci50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzaWRlYmFyLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzaWRlYmFyLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzaWRlYmFyLnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNpZGViYXIudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImZvcm1hbC5vYmplY3QuaGVhZGluZyI+Cis8eHNsOndpdGgtcGFyYW0gbmFtZT0ib2JqZWN0IiBzZWxlY3Q9ImFuY2VzdG9yLW9yLXNlbGY6OnNpZGViYXJbMV0iLz4KKzwveHNsOmNhbGwtdGVtcGxhdGU+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYTczMTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLnhtbApAQCAtMCwwICsxLDc5NSBAQAorPCFET0NUWVBFIGFydGljbGUgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGFydGljbGUgaWQ9J3lvY3RvLXByb2plY3QtcXMtaW50cm8nPgorICAgIDxhcnRpY2xlaW5mbz4KKyAgICAgICAgPHRpdGxlPllvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQ8L3RpdGxlPgorCisgICAgICAgIDxjb3B5cmlnaHQ+CisgICAgICAgICAgICA8eWVhcj4mQ09QWVJJR0hUX1lFQVI7PC95ZWFyPgorICAgICAgICAgICAgPGhvbGRlcj5MaW51eCBGb3VuZGF0aW9uPC9ob2xkZXI+CisgICAgICAgIDwvY29weXJpZ2h0PgorCisgICAgICAgIDxsZWdhbG5vdGljZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudCB1bmRlcgorICAgICAgICAgICAgICAgIHRoZSB0ZXJtcyBvZiB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiIHVybD0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMi4wL3VrLyI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAyLjAgVUs6IEVuZ2xhbmQgJmFtcDsgV2FsZXM8L3VsaW5rPiBhcyBwdWJsaXNoZWQgYnkgQ3JlYXRpdmUgQ29tbW9ucy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtYW51YWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2UsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7Jz5Zb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0PC91bGluaz4KKyAgICAgICAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvbGVnYWxub3RpY2U+CisKKworICAgICAgICA8YWJzdHJhY3Q+CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMveW9jdG8tcHJvamVjdC10cmFuc3AucG5nIgorICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9IjZpbiIgZGVwdGg9IjFpbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduPSJyaWdodCIgc2NhbGU9IjI1IiAvPgorICAgICAgICA8L2Fic3RyYWN0PgorICAgIDwvYXJ0aWNsZWluZm8+CisKKyAgICA8c2VjdGlvbiBpZD0nd2VsY29tZSc+CisgICAgICAgIDx0aXRsZT5XZWxjb21lITwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2VsY29tZSB0byB0aGUgWW9jdG8gUHJvamVjdCEKKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGlzIGFuIG9wZW4tc291cmNlIGNvbGxhYm9yYXRpb24gcHJvamVjdCB3aG9zZQorICAgICAgICAgICAgZm9jdXMgaXMgZGV2ZWxvcGVycyBvZiBlbWJlZGRlZCBMaW51eCBzeXN0ZW1zLgorICAgICAgICAgICAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIGEgYnVpbGQgaG9zdCBiYXNlZAorICAgICAgICAgICAgb24gdGhlIE9wZW5FbWJlZGRlZCAoT0UpIHByb2plY3QsIHdoaWNoIHVzZXMgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPgorICAgICAgICAgICAgdG9vbCwgdG8gY29uc3RydWN0IGNvbXBsZXRlIExpbnV4IGltYWdlcy4KKyAgICAgICAgICAgIFRoZSBCaXRCYWtlIGFuZCBPRSBjb21wb25lbnRzIGFyZSBjb21iaW5lZCB0b2dldGhlciB0byBmb3JtCisgICAgICAgICAgICBhIHJlZmVyZW5jZSBidWlsZCBob3N0LCBoaXN0b3JpY2FsbHkga25vd24gYXMKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Bva3knPlBva3k8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBoYXZlIGEgc3lzdGVtIHRoYXQgcnVucyBMaW51eCBhbmQgeW91IHdhbnQgdG8gZ2l2ZQorICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgYSB0ZXN0IHJ1biwgeW91IG1pZ2h0IGNvbnNpZGVyIHVzaW5nIHRoZSBZb2N0bworICAgICAgICAgICAgUHJvamVjdCBCdWlsZCBBcHBsaWFuY2UuCisgICAgICAgICAgICBUaGUgQnVpbGQgQXBwbGlhbmNlIGFsbG93cyB5b3UgdG8gYnVpbGQgYW5kIGJvb3QgYSBjdXN0b20gZW1iZWRkZWQKKyAgICAgICAgICAgIExpbnV4IGltYWdlIHdpdGggdGhlIFlvY3RvIFByb2plY3QgdXNpbmcgYSBub24tTGludXggZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2J1aWxkLWFwcGxpYW5jZSc+WW9jdG8gUHJvamVjdCBCdWlsZCBBcHBsaWFuY2U8L3VsaW5rPgorICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgcXVpY2sgc3RhcnQgaXMgd3JpdHRlbiBzbyB0aGF0IHlvdSBjYW4gcXVpY2tseSBnZXQgYSBob3N0CisgICAgICAgICAgICBidWlsZCBob3N0IHNldCB1cCB0byB1c2UgdGhlIFlvY3RvIFByb2plY3QgYW5kIHRoZW4gYnVpbGQgc29tZQorICAgICAgICAgICAgTGludXggaW1hZ2VzLgorICAgICAgICAgICAgUmF0aGVyIHRoYW4gZ28gaW50byBncmVhdCBkZXRhaWwgYWJvdXQgdGhlIFlvY3RvIFByb2plY3QgYW5kIGl0cworICAgICAgICAgICAgbWFueSBjYXBhYmlsaXRpZXMsIHRoaXMgcXVpY2sgc3RhcnQgcHJvdmlkZXMgdGhlIG1pbmltYWwKKyAgICAgICAgICAgIGluZm9ybWF0aW9uIHlvdSBuZWVkIHRvIHRyeSBvdXQgdGhlIFlvY3RvIFByb2plY3QgdXNpbmcgYQorICAgICAgICAgICAgc3VwcG9ydGVkIExpbnV4IGJ1aWxkIGhvc3QuCisgICAgICAgICAgICBSZWFkaW5nIGFuZCB1c2luZyB0aGUgcXVpY2sgc3RhcnQgc2hvdWxkIHJlc3VsdCBpbiB5b3UgaGF2aW5nIGEKKyAgICAgICAgICAgIGJhc2ljIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGUgWW9jdG8gUHJvamVjdCBpcyBhbmQgaG93IHRvIHVzZQorICAgICAgICAgICAgc29tZSBvZiBpdHMgY29yZSBjb21wb25lbnRzLgorICAgICAgICAgICAgWW91IHdpbGwgYWxzbyBoYXZlIHdvcmtlZCB0aHJvdWdoIHN0ZXBzIHRvIHByb2R1Y2UgdHdvIGltYWdlczoKKyAgICAgICAgICAgIG9uZSBzdWl0YWJsZSBmb3IgZW11bGF0aW9uIGFuZCBvbmUgdGhhdCBjYW4gYmUgdXNlZCBvbiBhY3R1YWwKKyAgICAgICAgICAgIGhhcmR3YXJlLgorICAgICAgICAgICAgVGhlIGV4YW1wbGVzIGhpZ2hsaWdodCB0aGUgZWFzZSB3aXRoIHdoaWNoIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCB0byBjcmVhdGUgaW1hZ2VzIGZvciBtdWx0aXBsZSB0eXBlcyBvZiBoYXJkd2FyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIFlvY3RvIFByb2plY3QsIHlvdSBjYW4KKyAgICAgICAgICAgIHJlZmVyZW5jZSB0aGVzZSByZXNvdXJjZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+V2Vic2l0ZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+WW9jdG8gUHJvamVjdCBXZWJzaXRlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXMgdGhlIGxhdGVzdCBidWlsZHMsIGJyZWFraW5nIG5ld3MsIGZ1bGwgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgYW5kIGFjY2VzcyB0byBhIHJpY2ggWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICBEZXZlbG9wbWVudCBDb21tdW5pdHkgaW50byB3aGljaCB5b3UgY2FuIHRhcC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5GQVFzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIGNvbW1vbmx5IGFza2VkIFlvY3RvIFByb2plY3QgcXVlc3Rpb25zIGFuZCBhbnN3ZXJzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdHdvIEZBUXM6CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9GQVEnPllvY3RvIFByb2plY3QgRkFRPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgb24gYSB3aWtpLCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNmYXEnPkZBUTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGV2ZWxvcGVyIFNjcmVlbmNhc3Q6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly92aW1lby5jb20vMzY0NTAzMjEnPkdldHRpbmcgU3RhcnRlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IC0gTmV3IERldmVsb3BlciBTY3JlZW5jYXN0IFR1dG9yaWFsPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXMgYSAzMC1taW51dGUgdmlkZW8gY3JlYXRlZCBmb3IgdXNlcnMgdW5mYW1pbGlhcgorICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IGJ1dCBmYW1pbGlhciB3aXRoIExpbnV4IGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGhvc3RzLgorICAgICAgICAgICAgICAgICAgICBXaGlsZSB0aGlzIHNjcmVlbmNhc3QgaXMgc29tZXdoYXQgZGF0ZWQsIHRoZSBpbnRyb2R1Y3RvcnkKKyAgICAgICAgICAgICAgICAgICAgYW5kIGZ1bmRhbWVudGFsIGNvbmNlcHRzIGFyZSB1c2VmdWwgZm9yIHRoZSBiZWdpbm5lci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd5cC1pbnRybyc+CisgICAgICAgIDx0aXRsZT5JbnRyb2R1Y2luZyB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0aHJvdWdoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHByb3ZpZGVzIGFuCisgICAgICAgICAgICBvcGVuIHNvdXJjZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCB0YXJnZXRpbmcgdGhlIEFSTSwgTUlQUywKKyAgICAgICAgICAgIFBvd2VyUEMsIGFuZCB4ODYgYXJjaGl0ZWN0dXJlcyBmb3IgYSB2YXJpZXR5IG9mIHBsYXRmb3JtcworICAgICAgICAgICAgaW5jbHVkaW5nIHg4Ni02NCBhbmQgZW11bGF0ZWQgb25lcy4KKyAgICAgICAgICAgIFlvdSBjYW4gdXNlIGNvbXBvbmVudHMgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCB0byBkZXNpZ24sIGRldmVsb3AsCisgICAgICAgICAgICBidWlsZCwgZGVidWcsIHNpbXVsYXRlLCBhbmQgdGVzdCB0aGUgY29tcGxldGUgc29mdHdhcmUgc3RhY2sgdXNpbmcKKyAgICAgICAgICAgIExpbnV4LCB0aGUgWCBXaW5kb3cgU3lzdGVtLCBHVEsrIGZyYW1ld29ya3MsIGFuZCBRdCBmcmFtZXdvcmtzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC5wbmciCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0iUE5HIiBhbGlnbj0nY2VudGVyJyBzY2FsZWZpdD0nMScgd2lkdGg9IjEwMCUiLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgICAgICA8Y2FwdGlvbj4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvcGFyYT4KKyAgICAgICAgICAgIDwvY2FwdGlvbj4KKyAgICAgICAgIDwvbWVkaWFvYmplY3Q+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGhpZ2hsaWdodHMgZm9yIHRoZSBZb2N0byBQcm9qZWN0OgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBQcm92aWRlcyBhIHJlY2VudCBMaW51eCBrZXJuZWwgYWxvbmcgd2l0aCBhIHNldCBvZiBzeXN0ZW0KKyAgICAgICAgICAgICAgICBjb21tYW5kcyBhbmQgbGlicmFyaWVzIHN1aXRhYmxlIGZvciB0aGUgZW1iZWRkZWQKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBNYWtlcyBhdmFpbGFibGUgc3lzdGVtIGNvbXBvbmVudHMgc3VjaCBhcyBYMTEsIEdUSyssIFF0LAorICAgICAgICAgICAgICAgIENsdXR0ZXIsIGFuZCBTREwgKGFtb25nIG90aGVycykgc28geW91IGNhbiBjcmVhdGUgYSByaWNoIHVzZXIKKyAgICAgICAgICAgICAgICBleHBlcmllbmNlIG9uIGRldmljZXMgdGhhdCBoYXZlIGRpc3BsYXkgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgRm9yIGRldmljZXMgdGhhdCBkbyBub3QgaGF2ZSBhIGRpc3BsYXkgb3Igd2hlcmUgeW91IHdpc2ggdG8KKyAgICAgICAgICAgICAgICB1c2UgYWx0ZXJuYXRpdmUgVUkgZnJhbWV3b3JrcywgdGhlc2UgY29tcG9uZW50cyBuZWVkIG5vdCBiZQorICAgICAgICAgICAgICAgIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBDcmVhdGVzIGEgZm9jdXNlZCBhbmQgc3RhYmxlIGNvcmUgY29tcGF0aWJsZSB3aXRoIHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBwcm9qZWN0IHdpdGggd2hpY2ggeW91IGNhbiBlYXNpbHkgYW5kIHJlbGlhYmx5CisgICAgICAgICAgICAgICAgYnVpbGQgYW5kIGRldmVsb3AuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgRnVsbHkgc3VwcG9ydHMgYSB3aWRlIHJhbmdlIG9mIGhhcmR3YXJlIGFuZCBkZXZpY2UgZW11bGF0aW9uCisgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFByb3ZpZGVzIGEgbGF5ZXIgbWVjaGFuaXNtIHRoYXQgYWxsb3dzIHlvdSB0byBlYXNpbHkgZXh0ZW5kCisgICAgICAgICAgICAgICAgdGhlIHN5c3RlbSwgbWFrZSBjdXN0b21pemF0aW9ucywgYW5kIGtlZXAgdGhlbSBvcmdhbml6ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIFlvY3RvIFByb2plY3QgdG8gZ2VuZXJhdGUgaW1hZ2VzIGZvciBtYW55IGtpbmRzCisgICAgICAgICAgICBvZiBkZXZpY2VzLgorICAgICAgICAgICAgQXMgbWVudGlvbmVkIGVhcmxpZXIsIHRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRzIGNyZWF0aW9uIG9mCisgICAgICAgICAgICByZWZlcmVuY2UgaW1hZ2VzIHRoYXQgeW91IGNhbiBib290IHdpdGhpbiBhbmQgZW11bGF0ZSB1c2luZyBRRU1VLgorICAgICAgICAgICAgVGhlIHN0YW5kYXJkIGV4YW1wbGUgbWFjaGluZXMgdGFyZ2V0IFFFTVUgZnVsbC1zeXN0ZW0KKyAgICAgICAgICAgIGVtdWxhdGlvbiBmb3IgMzItYml0IGFuZCA2NC1iaXQgdmFyaWFudHMgb2YgeDg2LCBBUk0sIE1JUFMsIGFuZAorICAgICAgICAgICAgUG93ZXJQQyBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgQmV5b25kIGVtdWxhdGlvbiwgeW91IGNhbiB1c2UgdGhlIGxheWVyIG1lY2hhbmlzbSB0byBleHRlbmQKKyAgICAgICAgICAgIHN1cHBvcnQgdG8ganVzdCBhYm91dCBhbnkgcGxhdGZvcm0gdGhhdCBMaW51eCBjYW4gcnVuIG9uIGFuZCB0aGF0CisgICAgICAgICAgICBhIHRvb2xjaGFpbiBjYW4gdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBbm90aGVyIFlvY3RvIFByb2plY3QgZmVhdHVyZSBpcyB0aGUgU2F0byByZWZlcmVuY2UgVXNlcgorICAgICAgICAgICAgSW50ZXJmYWNlLgorICAgICAgICAgICAgVGhpcyBvcHRpb25hbCBVSSB0aGF0IGlzIGJhc2VkIG9uIEdUSysgaXMgaW50ZW5kZWQgZm9yIGRldmljZXMgd2l0aAorICAgICAgICAgICAgcmVzdHJpY3RlZCBzY3JlZW4gc2l6ZXMgYW5kIGlzIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICBPcGVuRW1iZWRkZWQgQ29yZSBsYXllciBzbyB0aGF0IGRldmVsb3BlcnMgY2FuIHRlc3QgcGFydHMgb2YgdGhlCisgICAgICAgICAgICBzb2Z0d2FyZSBzdGFjay4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd5cC1yZXNvdXJjZXMnPgorICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHNob3dzIHdoYXQgeW91IG5lZWQgaW4gb3JkZXIgdG8gdXNlIGEKKyAgICAgICAgICAgIExpbnV4LWJhc2VkIGJ1aWxkIGhvc3QgdG8gdXNlIHRoZSBZb2N0byBQcm9qZWN0IHRvIGJ1aWxkIGltYWdlczoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIEhvc3Q8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEEgYnVpbGQgaG9zdCB3aXRoIGEgbWluaW11bSBvZiA1MCBHYnl0ZXMgb2YgZnJlZSBkaXNrCisgICAgICAgICAgICAgICAgc3BhY2UgdGhhdCBpcyBydW5uaW5nIGEgc3VwcG9ydGVkIExpbnV4IGRpc3RyaWJ1dGlvbiAoaS5lLgorICAgICAgICAgICAgICAgIHJlY2VudCByZWxlYXNlcyBvZiBGZWRvcmEsIG9wZW5TVVNFLCBDZW50T1MsIERlYmlhbiwgb3IKKyAgICAgICAgICAgICAgICBVYnVudHUpLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCBIb3N0IFBhY2thZ2VzPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBcHByb3ByaWF0ZSBwYWNrYWdlcyBpbnN0YWxsZWQgb24gdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRoZSBZb2N0byBQcm9qZWN0PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBIHJlbGVhc2Ugb2YgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0aGUtbGludXgtZGlzdHJvJz4KKyAgICAgICAgICAgIDx0aXRsZT5UaGUgTGludXggRGlzdHJpYnV0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgdGVhbSB2ZXJpZmllcyBlYWNoIHJlbGVhc2UgYWdhaW5zdCByZWNlbnQKKyAgICAgICAgICAgICAgICB2ZXJzaW9ucyBvZiB0aGUgbW9zdCBwb3B1bGFyIExpbnV4IGRpc3RyaWJ1dGlvbnMgdGhhdAorICAgICAgICAgICAgICAgIHByb3ZpZGUgc3RhYmxlIHJlbGVhc2VzLgorICAgICAgICAgICAgICAgIEluIGdlbmVyYWwsIGlmIHlvdSBoYXZlIHRoZSBjdXJyZW50IHJlbGVhc2UgbWludXMgb25lIG9mIHRoZQorICAgICAgICAgICAgICAgIGZvbGxvd2luZyBkaXN0cmlidXRpb25zLCB5b3Ugc2hvdWxkIGhhdmUgbm8gcHJvYmxlbXMuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVWJ1bnR1CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRmVkb3JhCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgb3BlblNVU0UKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBDZW50T1MKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBEZWJpYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIEZvciBhIG1vcmUgZGV0YWlsZWQgbGlzdCBvZiBkaXN0cmlidXRpb25zIHRoYXQgc3VwcG9ydCB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2RldGFpbGVkLXN1cHBvcnRlZC1kaXN0cm9zJz5TdXBwb3J0ZWQgTGludXggRGlzdHJpYnV0aW9uczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc2hvdWxkIGJlIGFibGUgdG8gcnVuIG9uIGFueQorICAgICAgICAgICAgICAgIG1vZGVybiBkaXN0cmlidXRpb24gdGhhdCBoYXMgdGhlIGZvbGxvd2luZyB2ZXJzaW9ucyBmb3IKKyAgICAgICAgICAgICAgICBHaXQsIHRhciwgYW5kIFB5dGhvbi4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBHaXQgMS43Ljggb3IgZ3JlYXRlcgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhciAxLjI0IG9yIGdyZWF0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBQeXRob24gMi43LjMgb3IgZ3JlYXRlciBleGNsdWRpbmcgUHl0aG9uCisgICAgICAgICAgICAgICAgICAgICAgICAzLngsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICBJZiB5b3VyIGJ1aWxkIGhvc3QgZG9lcyBub3QgbWVldCBhbnkgb2YgdGhlc2UgdGhyZWUgbGlzdGVkCisgICAgICAgICAgICAgICAgdmVyc2lvbiByZXF1aXJlbWVudHMsIHlvdSBjYW4gdGFrZSBzdGVwcyB0byBwcmVwYXJlIHRoZQorICAgICAgICAgICAgICAgIHN5c3RlbSBzbyB0aGF0IHlvdSBjYW4gc3RpbGwgdXNlIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVxdWlyZWQtZ2l0LXRhci1hbmQtcHl0aG9uLXZlcnNpb25zJz5SZXF1aXJlZCBHaXQsIHRhciwgYW5kIFB5dGhvbiBWZXJzaW9uczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBmb3IgaW5mb3JtYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncGFja2FnZXMnPgorICAgICAgICAgICAgPHRpdGxlPlRoZSBCdWlsZCBIb3N0IFBhY2thZ2VzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUmVxdWlyZWQgYnVpbGQgaG9zdCBwYWNrYWdlcyB2YXJ5IGRlcGVuZGluZyBvbiB5b3VyCisgICAgICAgICAgICAgICAgYnVpbGQgbWFjaGluZSBhbmQgd2hhdCB5b3Ugd2FudCB0byBkbyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBidWlsZCBhbiBpbWFnZSB0aGF0IGNhbiBydW4KKyAgICAgICAgICAgICAgICBvbiBRRU1VIGluIGdyYXBoaWNhbCBtb2RlIChhIG1pbmltYWwsIGJhc2ljIGJ1aWxkCisgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnQpLCB0aGVuIHRoZSBidWlsZCBob3N0IHBhY2thZ2UgcmVxdWlyZW1lbnRzCisgICAgICAgICAgICAgICAgYXJlIGRpZmZlcmVudCB0aGFuIGlmIHlvdSB3YW50IHRvIGJ1aWxkIGFuIGltYWdlIG9uIGEgaGVhZGxlc3MKKyAgICAgICAgICAgICAgICBzeXN0ZW0gb3IgYnVpbGQgb3V0IHRoZSBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gc2V0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDb2xsZWN0aXZlbHksIHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgcGFja2FnZXMgaXMgbGFyZ2UKKyAgICAgICAgICAgICAgICBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGNvdmVyIGFsbCBjYXNlcy4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSW4gZ2VuZXJhbCwgeW91IG5lZWQgdG8gaGF2ZSByb290IGFjY2VzcyBhbmQgdGhlbiBpbnN0YWxsCisgICAgICAgICAgICAgICAgICAgIHRoZSByZXF1aXJlZCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIGNvbW1hbmRzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiBtYXkgb3IgbWF5CisgICAgICAgICAgICAgICAgICAgIG5vdCB3b3JrIGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB5b3VyIExpbnV4CisgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiBoYXMgPGZpbGVuYW1lPnN1ZG88L2ZpbGVuYW1lPiBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3MgdGhlIHJlcXVpcmVkIHBhY2thZ2VzIG5lZWRlZCB0byBidWlsZAorICAgICAgICAgICAgICAgIGFuIGltYWdlIHRoYXQgcnVucyBvbiBRRU1VIGluIGdyYXBoaWNhbCBtb2RlIChlLmcuIGVzc2VudGlhbAorICAgICAgICAgICAgICAgIHBsdXMgZ3JhcGhpY3Mgc3VwcG9ydCkuCisgICAgICAgICAgICAgICAgRm9yIGxpc3RzIG9mIHJlcXVpcmVkIHBhY2thZ2VzIGZvciBvdGhlciBzY2VuYXJpb3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVxdWlyZWQtcGFja2FnZXMtZm9yLXRoZS1ob3N0LWRldmVsb3BtZW50LXN5c3RlbSc+UmVxdWlyZWQgUGFja2FnZXMgZm9yIHRoZSBIb3N0IERldmVsb3BtZW50IFN5c3RlbTwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVidW50dSBhbmQgRGViaWFuPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCAmVUJVTlRVX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMOyBsaWJzZGwxLjItZGV2IHh0ZXJtCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5GZWRvcmE8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8geXVtIGluc3RhbGwgJkZFRE9SQV9IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTDsgU0RMLWRldmVsIHh0ZXJtCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5PcGVuU1VTRTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyB6eXBwZXIgaW5zdGFsbCAmT1BFTlNVU0VfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUw7IGxpYlNETC1kZXZlbCB4dGVybQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2VudE9TPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHl1bSBpbnN0YWxsICZDRU5UT1NfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUw7IFNETC1kZXZlbCB4dGVybQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2VudE9TIDYueCB1c2VycyBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSByZXF1aXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25zIG9mIEdpdCwgdGFyIGFuZCBQeXRob24gYXJlIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZGV0YWlscywgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXF1aXJlZC1naXQtdGFyLWFuZC1weXRob24tdmVyc2lvbnMnPlJlcXVpcmVkIEdpdCwgdGFyLCBhbmQgUHl0aG9uIFZlcnNpb25zPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVsZWFzZXMnPgorICAgICAgICAgICAgPHRpdGxlPllvY3RvIFByb2plY3QgUmVsZWFzZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBsYXN0IHJlcXVpcmVtZW50IHlvdSBuZWVkIHRvIG1lZXQgYmVmb3JlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgaXMgZ2V0dGluZyBhIFlvY3RvIFByb2plY3QgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBnZXQgdGhlIGxhdGVzdCBZb2N0byBQcm9qZWN0IHJlbGVhc2UKKyAgICAgICAgICAgICAgICBieSBzZXR0aW5nIHVwIChjbG9uaW5nIGluCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiB0ZXJtcykgYQorICAgICAgICAgICAgICAgIGxvY2FsIGNvcHkgb2YgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkgb24KKyAgICAgICAgICAgICAgICB5b3VyIGJ1aWxkIGhvc3QgYW5kIHRoZW4gY2hlY2tpbmcgb3V0IHRoZSBsYXRlc3QgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICBEb2luZyBzbyBhbGxvd3MgeW91IHRvIGVhc2lseSB1cGRhdGUgdG8gbmV3ZXIgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIHJlbGVhc2VzIGFzIHdlbGwgYXMgY29udHJpYnV0ZSBiYWNrIHRvIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSBhbiBVYnVudHUgYnVpbGQgaG9zdCB0aGF0IGNsb25lcyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgYW5kIHRoZW4gY2hlY2tzIG91dCB0aGUKKyAgICAgICAgICAgICAgICBsYXRlc3QgWW9jdG8gUHJvamVjdCBSZWxlYXNlIChpLmUuICZESVNUUk87KToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kKKyAgICAgQ2xvbmluZyBpbnRvICdwb2t5Jy4uLgorICAgICByZW1vdGU6IENvdW50aW5nIG9iamVjdHM6IDIyNjc5MCwgZG9uZS4KKyAgICAgcmVtb3RlOiBDb21wcmVzc2luZyBvYmplY3RzOiAxMDAlICg1NzQ2NS81NzQ2NSksIGRvbmUuCisgICAgIHJlbW90ZTogVG90YWwgMjI2NzkwIChkZWx0YSAxNjUyMTIpLCByZXVzZWQgMjI1ODg3IChkZWx0YSAxNjQzMjcpCisgICAgIFJlY2VpdmluZyBvYmplY3RzOiAxMDAlICgyMjY3OTAvMjI2NzkwKSwgMTAwLjk4IE1pQiB8IDI2MyBLaUIvcywgZG9uZS4KKyAgICAgUmVzb2x2aW5nIGRlbHRhczogMTAwJSAoMTY1MjEyLzE2NTIxMiksIGRvbmUuCisgICAgICQgZ2l0IGNoZWNrb3V0ICZESVNUUk9fTkFNRTsKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGdldCB0aGUgWW9jdG8gUHJvamVjdCBGaWxlcyBieSBkb3dubG9hZGluZworICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSImWU9DVE9fSE9NRV9VUkw7Ij5Zb2N0byBQcm9qZWN0IHdlYnNpdGU8L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZ2V0dGluZyBzZXQgdXAgd2l0aCB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIHJlbGVhc2UsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbG9jYWwteXAtcmVsZWFzZSc+WW9jdG8gUHJvamVjdCBSZWxlYXNlPC91bGluaz4iCisgICAgICAgICAgICAgICAgaXRlbSBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncXMtYnVpbGRpbmctaW1hZ2VzJz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIEltYWdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBOb3cgdGhhdCB5b3UgaGF2ZSB5b3VyIHN5c3RlbSByZXF1aXJlbWVudHMgaW4gb3JkZXIsIHlvdSBjYW4gZ2l2ZQorICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgYSB0cnkuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJlc2VudHMgc3RlcHMgdGhhdCBsZXQgeW91IGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnVpbGQgYSA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+IHJlZmVyZW5jZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICBhbmQgcnVuIGl0IGluIHRoZSBRRU1VIGVtdWxhdG9yLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEVhc2lseSBjaGFuZ2UgY29uZmlndXJhdGlvbnMgc28gdGhhdCB5b3UgY2FuIHF1aWNrbHkKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlIGEgc2Vjb25kIGltYWdlLCB3aGljaCB3b3VsZCBiZSBmb3IgTWlubm93Qm9hcmQKKyAgICAgICAgICAgICAgICAgICAgTUFYLWNvbXBhdGlibGUgYm9hcmRzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIHN0ZXBzIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgcHJvdmlkZSBkZXRhaWwsIGJ1dCByYXRoZXIKKyAgICAgICAgICAgICAgICBwcm92aWRlIG1pbmltYWwsIHdvcmtpbmcgY29tbWFuZHMgYW5kIGV4YW1wbGVzIGRlc2lnbmVkIHRvCisgICAgICAgICAgICAgICAganVzdCBnZXQgeW91IHN0YXJ0ZWQuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSBhcHByb3ByaWF0ZSBtYW51YWxzIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvZG9jdW1lbnRhdGlvbic+WW9jdG8gUHJvamVjdCBtYW51YWwgc2V0PC91bGluaz4uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvIGJ1aWxkIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzIGFuIGVudGlyZSBMaW51eAorICAgICAgICAgICAgZGlzdHJpYnV0aW9uLCBpbmNsdWRpbmcgdGhlIHRvb2xjaGFpbiwgZnJvbSBzb3VyY2UuCisgICAgICAgICAgICA8bm90ZT48dGl0bGU+Tm90ZSBhYm91dCBOZXR3b3JrIFByb3hpZXM8L3RpdGxlPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgYnVpbGQgcHJvY2VzcyBzZWFyY2hlcyBmb3Igc291cmNlIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgYSBwcmUtZGV0ZXJtaW5lZCBvcmRlciB0aHJvdWdoIGEgc2V0IG9mCisgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB3b3JraW5nIGJlaGluZCBhIGZpcmV3YWxsIGFuZCB5b3VyIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGhvc3QgaXMgbm90IHNldCB1cCBmb3IgcHJveGllcywgeW91IGNvdWxkIGVuY291bnRlcgorICAgICAgICAgICAgICAgICAgICBwcm9ibGVtcyB3aXRoIHRoZSBidWlsZCBwcm9jZXNzIHdoZW4gZmV0Y2hpbmcgc291cmNlCisgICAgICAgICAgICAgICAgICAgIGNvZGUgKGUuZy4gZmV0Y2hlciBmYWlsdXJlcyBvciBHaXQgZmFpbHVyZXMpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGtub3cgeW91ciBwcm94eSBzZXR0aW5ncywgY29uc3VsdCB5b3VyCisgICAgICAgICAgICAgICAgICAgIGxvY2FsIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUgcmVzb3VyY2VzIGFuZCBnZXQgdGhhdAorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgQSBnb29kIHN0YXJ0aW5nIHBvaW50IGNvdWxkIGFsc28gYmUgdG8gY2hlY2sgeW91ciB3ZWIKKyAgICAgICAgICAgICAgICAgICAgYnJvd3NlciBzZXR0aW5ncy4KKyAgICAgICAgICAgICAgICAgICAgRmluYWxseSwgeW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgYmVoaW5kIGEgZmlyZXdhbGwgaW4gdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlIE1hbnVhbAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNob3ctZG9lcy10aGUteW9jdG8tcHJvamVjdC1vYnRhaW4tc291cmNlLWNvZGUtYW5kLXdpbGwtaXQtd29yay1iZWhpbmQtbXktZmlyZXdhbGwtb3ItcHJveHktc2VydmVyJz5GQVE8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPSdodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL1dvcmtpbmdfQmVoaW5kX2FfTmV0d29ya19Qcm94eSc+V29ya2luZyBCZWhpbmQgYSBOZXR3b3JrIFByb3h5PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJlIFN1cmUgWW91ciBCdWlsZCBIb3N0IGlzIFNldCBVcDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3RlcHMgdG8gYnVpbGQgYW4gaW1hZ2UgaW4gdGhpcyBzZWN0aW9uIGRlcGVuZCBvbgorICAgICAgICAgICAgICAgICAgICB5b3VyIGJ1aWxkIGhvc3QgYmVpbmcgcHJvcGVybHkgc2V0IHVwLgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdSBoYXZlIHdvcmtlZCB0aHJvdWdoIHRoZSByZXF1aXJlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0neXAtcmVzb3VyY2VzJz5TZXR0aW5nIFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2hlY2sgT3V0IFlvdXIgQnJhbmNoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91IGFyZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pIGFuZCB0aGVuIGNoZWNrIG91dAorICAgICAgICAgICAgICAgICAgICB0aGUgYnJhbmNoIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGF0ZXN0IFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgUmVsZWFzZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4vcG9reQorICAgICAkIGdpdCBjaGVja291dCAtYiAmRElTVFJPX05BTUU7IG9yaWdpbi8mRElTVFJPX05BTUU7CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgR2l0J3MgPGZpbGVuYW1lPmNoZWNrb3V0PC9maWxlbmFtZT4gY29tbWFuZCBjaGVja3Mgb3V0CisgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IFlvY3RvIFByb2plY3QgcmVsZWFzZSBpbnRvIGEgbG9jYWwgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgIHdob3NlIG5hbWUgbWF0Y2hlcyB0aGUgcmVsZWFzZSAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JkRJU1RST19OQU1FOzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2FsIGJyYW5jaCB0cmFja3MgdGhlIHVwc3RyZWFtIGJyYW5jaCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgc2FtZSBuYW1lLgorICAgICAgICAgICAgICAgICAgICBDcmVhdGluZyB5b3VyIG93biBicmFuY2ggYmFzZWQgb24gdGhlIHJlbGVhc2VkCisgICAgICAgICAgICAgICAgICAgIGJyYW5jaCBlbnN1cmVzIHlvdSBhcmUgdXNpbmcgdGhlIGxhdGVzdCBmaWxlcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgdGhhdCByZWxlYXNlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluaXRpYWxpemUgdGhlIEJ1aWxkIEVudmlyb25tZW50OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCB0byBkZWZpbmUgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICBidWlsZCBlbnZpcm9ubWVudCBvbiB5b3VyIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2UgJk9FX0lOSVRfRklMRTsKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoZSBzY3JpcHQgY3JlYXRlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT4gaW4gdGhpcyBjYXNlCisgICAgICAgICAgICAgICAgICAgIGFuZCBpcyBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIEFmdGVyIHRoZSBzY3JpcHQgcnVucywgeW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBMYXRlciwgd2hlbiB0aGUgYnVpbGQgY29tcGxldGVzLCB0aGUgQnVpbGQgRGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIGFsbCB0aGUgZmlsZXMgY3JlYXRlZCBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBydW5uaW5nIGEgbWVtb3J5LXJlc2lkZW50CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN1c2luZ3Bva3ktY29tcG9uZW50cy1iaXRiYWtlJz5CaXRCYWtlPC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXAgc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXhhbWluZSBZb3VyIExvY2FsIENvbmZpZ3VyYXRpb24gRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzZXQgdXAgdGhlIGJ1aWxkIGVudmlyb25tZW50LCBhIGxvY2FsCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGJlY29tZXMgYXZhaWxhYmxlIGluCisgICAgICAgICAgICAgICAgICAgIGEgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgQmVmb3JlIHVzaW5nIEJpdEJha2UgdG8gc3RhcnQgdGhlIGJ1aWxkLCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgIGxvb2sgYXQgdGhpcyBmaWxlIGFuZCBiZSBzdXJlIHlvdXIgZ2VuZXJhbAorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBhcmUgaG93IHlvdSB3YW50IHRoZW06CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gaGVscCBjb25zZXJ2ZSBkaXNrIHNwYWNlIGR1cmluZyBidWlsZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBhZGQgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQgdG8geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QncyBjb25maWd1cmF0aW9uIGZpbGUsIHdoaWNoIGZvciB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5L2J1aWxkL2NvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZGluZyB0aGlzIHN0YXRlbWVudCBkZWxldGVzIHRoZSB3b3JrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHVzZWQgZm9yIGJ1aWxkaW5nIGEgcmVjaXBlIG9uY2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGlzIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVCArPSAicm1fd29yayIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHRhcmdldCBtYWNoaW5lIGZvciB0aGUgYnVpbGQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHByb2R1Y2VzIGFuIGltYWdlIHRoYXQgY2FuIGJlIHVzZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgUUVNVSBlbXVsYXRvciBhbmQgaXMgdGFyZ2V0ZWQgYXQgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5JbnRlbDwvdHJhZGVtYXJrPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyLWJpdCBiYXNlZCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVydGhlciBvbiBpbiB0aGlzIGV4YW1wbGUsIHRoaXMgZGVmYXVsdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhc2lseSBjaGFuZ2VkIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNvIHRoYXQgeW91IGNhbiBxdWlja2x5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgYW4gaW1hZ2UgZm9yIGEgZGlmZmVyZW50IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5vdGhlciBjb25zaWRlcmF0aW9uIGJlZm9yZSB5b3UgYnVpbGQgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBtYW5hZ2VyIHVzZWQgd2hlbiBjcmVhdGluZyB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgc2VsZWN0cyB0aGUgUlBNIHBhY2thZ2UgbWFuYWdlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNvbnRyb2wgdGhpcyBjb25maWd1cmF0aW9uIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlNlbGVjdGlvbiBvZiB0aGUgcGFja2FnZSBtYW5hZ2VyIGlzIHNlcGFyYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB3aGV0aGVyIHBhY2thZ2UgbWFuYWdlbWVudCBpcyB1c2VkIGF0IHJ1bnRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgdGFyZ2V0IGltYWdlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgYWRkaXRpb25hbCBwYWNrYWdlIG1hbmFnZXIgc2VsZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtcGFja2FnZSc+PGZpbGVuYW1lPnBhY2thZ2UqLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RhcnQgdGhlIEJ1aWxkOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENvbnRpbnVlIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGJ1aWxkIGFuIE9TIGltYWdlCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgdGFyZ2V0LCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4gaW4gdGhpcyBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIHByb2Nlc3NvcnMgYW5kIGNvcmVzLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudCBvZiBSQU0sIHRoZSBzcGVlZCBvZiB5b3VyIEludGVybmV0IGNvbm5lY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvdGhlciBmYWN0b3JzLCB0aGUgYnVpbGQgcHJvY2VzcyBjb3VsZCB0YWtlIHNldmVyYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzIHRoZSBmaXJzdCB0aW1lIHlvdSBydW4gaXQuCisgICAgICAgICAgICAgICAgICAgICAgICBTdWJzZXF1ZW50IGJ1aWxkcyBydW4gbXVjaCBmYXN0ZXIgc2luY2UgcGFydHMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBhcmUgY2FjaGVkLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN1c2luZ3Bva3ktY29tcG9uZW50cy1iaXRiYWtlJz5CaXRCYWtlPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCwgb3Igc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNiaXRiYWtlLXVzZXItbWFudWFsLWNvbW1hbmQnPkJpdEJha2UgQ29tbWFuZDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gb3RoZXIgdGFyZ2V0cywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWltYWdlcyc+SW1hZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TaW11bGF0ZSBZb3VyIEltYWdlIFVzaW5nIFFFTVU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB0aGlzIHBhcnRpY3VsYXIgaW1hZ2UgaXMgYnVpbHQsIHlvdSBjYW4gc3RhcnQgUUVNVQorICAgICAgICAgICAgICAgICAgICBhbmQgcnVuIHRoZSBpbWFnZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgcWVtdXg4NgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGxlYXJuIG1vcmUgYWJvdXQgcnVubmluZyBRRU1VLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPSImWU9DVE9fRE9DU19ERVZfVVJMOyNkZXYtbWFudWFsLXFlbXUiPlVzaW5nIHRoZSBRdWljayBFTVVsYXRvciAoUUVNVSk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXhpdCBRRU1VOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEV4aXQgUUVNVSBieSBlaXRoZXIgY2xpY2tpbmcgb24gdGhlIHNodXRkb3duIGljb24gb3IgYnkKKyAgICAgICAgICAgICAgICAgICAgb3BlbmluZyBhIHRlcm1pbmFsLCB0eXBpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBvd2Vyb2ZmPC9maWxlbmFtZT4sIGFuZCB0aGVuIHByZXNzaW5nICJFbnRlciIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdGVwcyBzaG93IGhvdyBlYXN5IGl0IGlzIHRvIHNldCB1cCB0byBidWlsZCBhbgorICAgICAgICAgICAgaW1hZ2UgZm9yIGEgbmV3IG1hY2hpbmUuCisgICAgICAgICAgICBUaGVzZSBzdGVwcyBidWlsZCBhbiBpbWFnZSBmb3IgdGhlIE1pbm5vd0JvYXJkIE1BWCwgd2hpY2ggaXMKKyAgICAgICAgICAgIHN1cHBvcnRlZCBieSB0aGUgWW9jdG8gUHJvamVjdCBhbmQgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IDxmaWxlbmFtZT5pbnRlbC1jb3JlaTctNjQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5pbnRlbC1jb3JlMi0zMjwvZmlsZW5hbWU+IEJvYXJkIFN1cHBvcnQgUGFja2FnZXMKKyAgICAgICAgICAgIChCU1BzKS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBNaW5ub3dCb2FyZCBNQVggc2hpcHMgd2l0aCA2NC1iaXQgZmlybXdhcmUuCisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBib2FyZCBpbiAzMi1iaXQgbW9kZSwgeW91IG11c3QKKyAgICAgICAgICAgICAgICBkb3dubG9hZCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZmlybXdhcmUuaW50ZWwuY29tL3Byb2plY3RzL21pbm5vd2JvYXJkLW1heCc+MzItYml0IGZpcm13YXJlPC91bGluaz4uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSBhIExvY2FsIENvcHkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gUmVwb3NpdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBCdWlsZGluZyBhbiBpbWFnZSBmb3IgdGhlIE1pbm5vd0JvYXJkIE1BWCByZXF1aXJlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+Z2l0IGNsb25lPC9maWxlbmFtZT4gY29tbWFuZCB0byBjcmVhdGUKKyAgICAgICAgICAgICAgICAgICAgYSBsb2NhbCBjb3B5IG9mIHRoZSByZXBvc2l0b3J5OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL21ldGEtaW50ZWwKKyAgICAgQ2xvbmluZyBpbnRvICdtZXRhLWludGVsJy4uLgorICAgICByZW1vdGU6IENvdW50aW5nIG9iamVjdHM6IDEwODI0LCBkb25lLgorICAgICByZW1vdGU6IENvbXByZXNzaW5nIG9iamVjdHM6IDEwMCUgKDM1MDgvMzUwOCksIGRvbmUuCisgICAgIHJlbW90ZTogVG90YWwgMTA4MjQgKGRlbHRhIDYyMTkpLCByZXVzZWQgMTA1ODAgKGRlbHRhIDU5NzUpCisgICAgIFJlY2VpdmluZyBvYmplY3RzOiAxMDAlICgxMDgyNC8xMDgyNCksIDIuNzIgTWlCIHwgNDgyLjAwIEtpQi9zLCBkb25lLgorICAgICBSZXNvbHZpbmcgZGVsdGFzOiAxMDAlICg2MjE5LzYyMTkpLCBkb25lLgorICAgICBDaGVja2luZyBjb25uZWN0aXZpdHkuLi4gZG9uZS4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvbmZpZ3VyZSB0aGUgQnVpbGQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVG8gY29uZmlndXJlIHRoZSBidWlsZCwgeW91IGVkaXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZXMsIGJvdGggb2Ygd2hpY2ggYXJlCisgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgaW4gdGhlIDxmaWxlbmFtZT5idWlsZC9jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SGVyZSBpcyBhIHF1aWNrIHdheSB0byBtYWtlIHRoZSBlZGl0cy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGNvbW1hbmQgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UtbGF5ZXJzIGFkZC1sYXllcjwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgdG8gYWRkIHRoZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGxheWVyLCB3aGljaCBjb250YWlucyB0aGUgPGZpbGVuYW1lPmludGVsLWNvcmUqPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgQlNQcyB0byB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWNvbmQgY29tbWFuZCBzZWxlY3RzIHRoZSBCU1AgYnkgc2V0dGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UtbGF5ZXJzIGFkZC1sYXllciAiJEhPTUUvc291cmNlL3Bva3kvbWV0YS1pbnRlbCIKKyAgICAgJCBlY2hvICdNQUNISU5FID0gImludGVsLWNvcmVpNy02NCInID4+IGNvbmYvbG9jYWwuY29uZgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgYSA2NC1iaXQgYnVpbGQsIHVzZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGVjaG8gJ01BQ0hJTkUgPSAiaW50ZWwtY29yZWk3LTY0IicgPj4gY29uZi9sb2NhbC5jb25mCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IDMyLWJpdCBpbWFnZXMsIHVzZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGVjaG8gJ01BQ0hJTkUgPSAiaW50ZWwtY29yZTItMzIiJyA+PiBjb25mL2xvY2FsLmNvbmYKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgYSBNaW5pbWFsIEltYWdlIGZvciBNaW5ub3dCb2FyZCBNQVg6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBidWlsZCB0aGUgbWluaW1hbCBpbWFnZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgTWlubm93Qm9hcmQgTUFYLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBhcmUgbWluaW1hbCB0byBzZXQgdXAgZm9yCisgICAgICAgICAgICAgICAgICAgIHRoaXMgc2Vjb25kIGJ1aWxkLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4KKyAgICAgICAgICAgICAgICAgICAgcmUtdXNlIGZpbGVzIGZyb20gcHJldmlvdXMgYnVpbGRzIGFzIG11Y2ggYXMgcG9zc2libGUuCisgICAgICAgICAgICAgICAgICAgIFJlLXVzaW5nIGZpbGVzIG1lYW5zIHRoaXMgc2Vjb25kIGJ1aWxkIHdpbGwgYmUgbXVjaCBmYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgdGhhbiBhbiBpbml0aWFsIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBidWlsZCBjb21wbGV0ZXMsIHRoZSByZXN1bHRpbmcgYmFzaWMgY29uc29sZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICBpcyBsb2NhdGVkIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkgaGVyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICB0bXAvZGVwbG95L2ltYWdlcy9pbnRlbC1jb3JlaTctNjQvY29yZS1pbWFnZS1taW5pbWFsLWludGVsLWNvcmVpNy02NC5oZGRpbWcKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPldyaXRlIHRoZSBJbWFnZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHdyaXRlIHRoZSBpbWFnZSB0byBhIFVTQiBrZXksIFNBVEEgZHJpdmUsIG9yIFNECisgICAgICAgICAgICAgICAgICAgIGNhcmQgYnkgdXNpbmcgdGhlIDxmaWxlbmFtZT5ta2VmaWRpc2suc2g8L2ZpbGVuYW1lPiBzY3JpcHQsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGluY2x1ZGVkIGluIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgYXQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvY29udHJpYi9ta2VmaWRpc2suc2g8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gJEhPTUUvc291cmNlL3Bva3kvc2NyaXB0cy9jb250cmliL21rZWZpZGlzay5zaCA8cmVwbGFjZWFibGU+SE9TVF9ERVZJQ0U8L3JlcGxhY2VhYmxlPiBcCisgICAgICAgIHRtcC9kZXBsb3kvaW1hZ2VzL2ludGVsLWNvcmVpNy02NC9jb3JlLWltYWdlLW1pbmltYWwtaW50ZWwtY29yZWk3LTY0LmhkZGltZyA8cmVwbGFjZWFibGU+VEFSR0VUX0RFVklDRTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5IT1NUX0RFVklDRTwvcmVwbGFjZWFibGU+IGlzIHRoZSBkZXZpY2Ugbm9kZQorICAgICAgICAgICAgICAgICAgICBvbiB0aGUgYnVpbGQgaG9zdCAoZS5nLiA8ZmlsZW5hbWU+L2Rldi9zZGM8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2Rldi9tbWNibGswPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+VEFSR0VUX0RFVklDRTwvcmVwbGFjZWFibGU+IGlzIHRoZSBuYW1lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBkZXZpY2UgYXMgdGhlIE1pbm5vd0JvYXJkIE1BWCBzZWVzIGl0IChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZGV2L3NkYTwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZGV2L21tY2JsazA8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Qm9vdCB0aGUgSGFyZHdhcmU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgV2l0aCB0aGUgYm9vdCBkZXZpY2UgcHJvdmlzaW9uZWQsIHlvdSBjYW4gaW5zZXJ0IHRoZQorICAgICAgICAgICAgICAgICAgICBtZWRpYSBpbnRvIHRoZSBNaW5ub3dCb2FyZCBNQVggYW5kIGJvb3QgdGhlIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICBUaGUgYm9hcmQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHRoZSBtZWRpYSBhbmQgYm9vdCB0bworICAgICAgICAgICAgICAgICAgICB0aGUgYm9vdGxvYWRlciBhbmQgc3Vic2VxdWVudGx5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgdGhlIGJvYXJkIGRvZXMgbm90IGJvb3QgYXV0b21hdGljYWxseSwgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICBib290IGl0IG1hbnVhbGx5IGZyb20gdGhlIEVGSSBzaGVsbCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNoZWxsPiBjb25uZWN0IC1yCisgICAgIFNoZWxsPiBtYXAgLXIKKyAgICAgU2hlbGw+IGZzMDoKKyAgICAgU2hlbGw+IGJvb3R4NjQKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhIDMyLWJpdCBpbWFnZSB1c2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU2hlbGw+IGJvb3RpYTMyCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3FzLW5leHQtc3RlcHMnPgorICAgICAgICA8dGl0bGU+TmV4dCBTdGVwczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgY29tcGxldGVkIGFsbCB0aGUgc3RlcHMgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24gdGhlbgorICAgICAgICAgICAgY29uZ3JhdHVsYXRpb25zIHRvIHlvdSEKKyAgICAgICAgICAgIFdoYXQgbm93PworICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEZXBlbmRpbmcgb24gd2hhdCB5b3UgcHJpbWFyeSBpbnRlcmVzdHMgYXJlIHdpdGggdGhlIFlvY3RvIFByb2plY3QsCisgICAgICAgICAgICB5b3UgY291bGQgY29uc2lkZXIgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VmlzaXQgdGhlIFlvY3RvIFByb2plY3QgV2ViIFNpdGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG9mZmljaWFsCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsnPllvY3RvIFByb2plY3Q8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB3ZWIgc2l0ZSBjb250YWlucyBpbmZvcm1hdGlvbiBvbiB0aGUgZW50aXJlIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIFZpc2l0aW5nIHRoaXMgc2l0ZSBpcyBhIGdvb2Qgd2F5IHRvIGZhbWlsaWFyaXplIHlvdXJzZWxmCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIG92ZXJhbGwgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FeHBsb3JlIERldmVsb3BtZW50IE1vZGVsczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2Rldi1tYW51YWwtbW9kZWwnPkNvbW1vbiBEZXZlbG9wbWVudCBNb2RlbHM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwKKyAgICAgICAgICAgICAgICAgICAgdG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIHRoZSB2YXJpb3VzIHdheXMgYnkgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiB1c2UgdGhlIFlvY3RvIFByb2plY3QgdG8gZGV2ZWxvcCBwcm9qZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MZWFybiBTb21lIE9wZW4gU291cmNlIEJhc2ljczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIG5ldyB0byB0aGUgb3BlbiBzb3VyY2UgZW52aXJvbm1lbnQsIHlvdSBtaWdodAorICAgICAgICAgICAgICAgICAgICByZWFkIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2LW1hbnVhbC1uZXdiaWUnPlRoZSBZb2N0byBQcm9qZWN0IE9wZW4gU291cmNlIERldmVsb3BtZW50IEVudmlyb25tZW50PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgb2YgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNoYXB0ZXIgcHJlc2VudHMgb3ZlcnZpZXcgbWF0ZXJpYWwgZm9yIG9wZW4gc291cmNlCisgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IGluIHRoZSBjb250ZXh0IG9mIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxlYXJuIEFib3V0IEFwcGxpY2F0aW9uIERldmVsb3BtZW50OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgcHJpbWFyeSBpbnRlcmVzdHMgbGllIGluIGRldmVsb3BpbmcgYXBwbGljYXRpb25zLAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHJlZmVyZW5jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjYWR0LW1hbnVhbC1pbnRybyc+WW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxlYXJuIEFib3V0IEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGxlYXJuIGFib3V0IEJTUHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwJz5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MZWFybiBBYm91dCBVc2luZyBFY2xpcHNlIFdpdGggdGhlIFlvY3RvIFByb2plY3Q6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBhbiBFY2xpcHNlIHVzZXIsIHlvdSBjYW4gbGVhcm4gYWJvdXQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgaW4gdGhhdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBieSByZWFkaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjd29ya2Zsb3ctdXNpbmctdGhlLWFkdC1hbmQtZWNsaXBzZSc+V29ya2Zsb3cgVXNpbmcgdGhlIEFEVCBhbmQgRWNsaXBzZeKEojwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MZWFybiBBYm91dCBUb2FzdGVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgaXMgYSB3ZWIgaW50ZXJmYWNlIHRvIHRoZSBZb2N0byBQcm9qZWN0J3MKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIHVzaW5nIHRoaXMgdHlwZSBvZiBpbnRlcmZhY2UgdG8KKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlIGltYWdlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19UT0FTVF9VUkw7I3RvYXN0ZXItbWFudWFsLWludHJvJz5Ub2FzdGVyIFVzZXIgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXhwbG9yZSBZb2N0byBQcm9qZWN0IENvbW1vbiBUYXNrcyBhbmQgVGVjaG5pY2FsIERldGFpbHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIGEgbWl4IG9mIGNvbW1vbiB0YXNrcyB0aGF0IGhhdmUgdG8KKyAgICAgICAgICAgICAgICAgICAgZG8gd2l0aCBwcm9qZWN0IGRldmVsb3AgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2V4dGVuZHBva3knPkNvbW1vbiBUYXNrczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgbW9yZSBkZXRhaWwsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLW1hbnVhbC1pbnRybyc+WW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L2FydGljbGU+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9DT1BZSU5HLk1JVCBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9DT1BZSU5HLk1JVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWRlMzU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L0NPUFlJTkcuTUlUCkBAIC0wLDAgKzEsMTcgQEAKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L1JFQURNRSBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFhNmZlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9SRUFETUUKQEAgLTAsMCArMSwzIEBACitUaGlzIGxheWVyIGlzIGludGVuZGVkIGFzIHRlc3QgbGF5ZXIsIHVzZWQgYnkgc2NyaXB0cy9vZS1zZWxmdGVzdAorYW5kIGl0J3MgcHJvYmFibHkgYSBtaXN0YWtlIHRvIGluY2x1ZGUgaXQgaW4geW91ciBidWlsZHMgKHVubGVzcyB5b3UKK3dhbnQgdG8gcnVuIHRoZSBzY3JpcHQpLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2NsYXNzZXMvdGVzdF9ldmVudHMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9jbGFzc2VzL3Rlc3RfZXZlbnRzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUzMjRlYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9jbGFzc2VzL3Rlc3RfZXZlbnRzLmJiY2xhc3MKQEAgLTAsMCArMSwxNiBAQAorcHl0aG9uIHRlc3QxX2V2ZW50aGFuZGxlcigpIHsKKyAgICBiYi5ub3RlKCJUZXN0IGZvciBiYi5ldmVudC5CdWlsZFN0YXJ0ZWQiKQorfQorcHl0aG9uIHRlc3QyX2V2ZW50aGFuZGxlcigpIHsKKyAgICBiYi5ub3RlKCJUZXN0IGZvciBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIpCit9CitweXRob24gdGVzdDNfZXZlbnRoYW5kbGVyKCkgeworICAgIGJiLm5vdGUoIlRlc3QgZm9yIGJiLmV2ZW50LkludmFsaWRFdmVudCIpCit9CisKK2FkZGhhbmRsZXIgdGVzdDFfZXZlbnRoYW5kbGVyCit0ZXN0MV9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQiCithZGRoYW5kbGVyIHRlc3QyX2V2ZW50aGFuZGxlcgordGVzdDJfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQiCithZGRoYW5kbGVyIHRlc3QzX2V2ZW50aGFuZGxlcgordGVzdDNfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuSW52YWxpZEV2ZW50IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2NvbmYvbGF5ZXIuY29uZiBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9jb25mL2xheWVyLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg0N2I3OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9jb25mL2xheWVyLmNvbmYKQEAgLTAsMCArMSwxMCBAQAorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFkZCB0byBCQlBBVEgKK0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisJJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYmFwcGVuZCIKKworQkJGSUxFX0NPTExFQ1RJT05TICs9ICJzZWxmdGVzdCIKK0JCRklMRV9QQVRURVJOX3NlbGZ0ZXN0ID0gIl4ke0xBWUVSRElSfS8iCitCQkZJTEVfUFJJT1JJVFlfc2VsZnRlc3QgPSAiNSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvYXNwZWxsL2FzcGVsbF8wLjAuMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9hc3BlbGwvYXNwZWxsXzAuMC4wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBhMGFiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvYXNwZWxsL2FzcGVsbF8wLjAuMC4xLmJiCkBAIC0wLDAgKzEsMzAgQEAKKyMgVGhpcyByZWNpcGUgaXMgYSBjb3B5IGZyb20gdGhlIG9lLWNvcmUgb25lLgorIyBJdCBoYXMgYSBsb3dlciBhbmQgaW52YWxpZCB2ZXJzaW9uIG51bWJlciBpbiBvcmRlciBub3QgdG8gYmUgYWNjaWRlbnRhbGx5IHVzZWQgYnkgYml0YmFrZS4KKyMgSXQgaXMgdXNlZCBmb3IgdGVzdHMgdGhhdCByZXF1aXJlIG92ZXJsYXllZCByZWNpcGUgZmlsZXMuCisKK1NVTU1BUlkgPSAiR05VIEFzcGVsbCBzcGVsbC1jaGVja2VyIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkxHUEx2MiB8IExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQiCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYXNwZWxsL2FzcGVsbC0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiZTY2YTljOWFmNmE2MGRjNDYxMzRmZGFjZjZjZTk3ZDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjUyNTgzYTgzYTYzNjMzNzAxYzVmNzFkYjNkYzQwYWFiODdiN2Y3NmIyOTcyM2FlYjI3OTQxZWZmNDJkZjZlMSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbY3Vyc2VzXSA9ICItLWVuYWJsZS1jdXJzZXMsLS1kaXNhYmxlLWN1cnNlcyxuY3Vyc2VzIgorCitQQUNLQUdFUyArPSAibGliYXNwZWxsIGxpYnBzcGVsbCBsaWJwc3BlbGwtZGV2IGFzcGVsbC11dGlscyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vYXNwZWxsLTAuNjAvLmRlYnUqIgorRklMRVNfbGliYXNwZWxsID0gIiR7bGliZGlyfS9saWJhc3BlbGwuc28uKiAke2xpYmRpcn0vYXNwZWxsKiIKK0ZJTEVTX2FzcGVsbC11dGlscyA9ICIke2JpbmRpcn0vd29yZC1saXN0LWNvbXByZXNzICR7YmluZGlyfS9hc3BlbGwtaW1wb3J0ICR7YmluZGlyfS9ydW4td2l0aC1hc3BlbGwgJHtiaW5kaXJ9L3ByZSoiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vYXNwZWxsIgorRklMRVNfbGlicHNwZWxsID0gIiR7bGliZGlyfS9saWJwc3BlbGwuc28uKiIKK0ZJTEVTX2xpYnBzcGVsbC1kZXYgPSAiJHtsaWJkaXJ9L2xpYnBzcGVsbCogJHtiaW5kaXJ9L3BzcGVsbC1jb25maWcgJHtpbmNsdWRlZGlyfS9wc3BlbGwiCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgoraW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9hc3BlbGwvYXNwZWxsXzAuNjAuNi4xLmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9hc3BlbGwvYXNwZWxsXzAuNjAuNi4xLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNTcyMDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2FzcGVsbC9hc3BlbGxfMC42MC42LjEuYmJhcHBlbmQKQEAgLTAsMCArMSwyIEBACisjIFRoaXMgYmJhcHBlbmQgaXMgdXNlZCB0byBhbHRlciB0aGUgcmVjaXBlIHVzaW5nIHRoZSB0ZXN0X3JlY2lwZS5pbmMgZmlsZSBjcmVhdGVkIGJ5IHRlc3RzLgoraW5jbHVkZSB0ZXN0X3JlY2lwZS5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9kZXZ0b29sLXVwZ3JhZGVfMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2RldnRvb2wtdXBncmFkZV8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmZmM4OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9kZXZ0b29sLXVwZ3JhZGVfMC4xLmJiCkBAIC0wLDAgKzEsMjUgQEAKKyMKKyMgVGhpcyBmaWxlIHdhcyBkZXJpdmVkIGZyb20gdGhlICdIZWxsbyBXb3JsZCEnIGV4YW1wbGUgcmVjaXBlIGluIHRoZQorIyBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyMKKworREVTQ1JJUFRJT04gPSAiU2ltcGxlIGhlbGxvd29ybGQgYXBwbGljYXRpb24gdXNlZCB0byB0ZXN0IHRoZSBkZXZ0b29sIHVwZ3JhZGUgZmVhdHVyZSIKK1NFQ1RJT04gPSAiZGV2dG9vbCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L01JVDttZDU9MDgzNWFkZTY5OGUwYmNmODUwNmVjZGEyZjdiNGYzMDIiCitQUiA9ICJyMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vJHtUSElTRElSfS9maWxlcy8ke1B9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWhlbGxvd29yZC5jLWV4aXQtd2l0aC1FWElUX1NVQ0NFU1MtaW5zdGVhZC1vZi1hLW1hZ2kucGF0Y2ggXAorICAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS8ke1B9IgorCitkb19jb21waWxlKCkgeworCSAgICAgJHtDQ30gaGVsbG93b3JsZC5jIC1vIGhlbGxvd29ybGQKK30KKworZG9faW5zdGFsbCgpIHsKKwkgICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCSAgICAgaW5zdGFsbCAtbSAwNzU1IGhlbGxvd29ybGQgJHtEfSR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2ZpbGVzLzAwMDEtaGVsbG93b3JkLmMtZXhpdC13aXRoLUVYSVRfU1VDQ0VTUy1pbnN0ZWFkLW9mLWEtbWFnaS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9maWxlcy8wMDAxLWhlbGxvd29yZC5jLWV4aXQtd2l0aC1FWElUX1NVQ0NFU1MtaW5zdGVhZC1vZi1hLW1hZ2kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI5NGEwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9maWxlcy8wMDAxLWhlbGxvd29yZC5jLWV4aXQtd2l0aC1FWElUX1NVQ0NFU1MtaW5zdGVhZC1vZi1hLW1hZ2kucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorRnJvbSAwZjM3YWZmYmM2ZTZjNzE2ODczMDFkOTlkNzI1OWYxOTY4ZTU3YzQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjYgQXVnIDIwMTUgMTI6NDI6MjMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gaGVsbG93b3JkLmM6IGV4aXQgd2l0aCBFWElUX1NVQ0NFU1MgaW5zdGVhZCBvZiBhIG1hZ2ljIG51bWJlcgorCistLS0KKyBoZWxsb3dvcmxkLmMgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2hlbGxvd29ybGQuYyBiL2hlbGxvd29ybGQuYworaW5kZXggNzFmMmU0Ni4uNTRiZjUwYiAxMDA2NDQKKy0tLSBhL2hlbGxvd29ybGQuYworKysrIGIvaGVsbG93b3JsZC5jCitAQCAtMSw4ICsxLDkgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisgCisgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIHsKKyAgICAgcHJpbnRmKCJIZWxsbyBXb3JsZCFcbiIpOworIAorLSAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKyB9CistLSAKKzEuOC40LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2ZpbGVzL2RldnRvb2wtdXBncmFkZS0wLjEudGFyLmd6IGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2ZpbGVzL2RldnRvb2wtdXBncmFkZS0wLjEudGFyLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YTFjNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2RldnRvb2wvZmlsZXMvZGV2dG9vbC11cGdyYWRlLTAuMS50YXIuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2ZpbGVzL2RldnRvb2wtdXBncmFkZS0wLjIudGFyLmd6IGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2ZpbGVzL2RldnRvb2wtdXBncmFkZS0wLjIudGFyLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMGRjZjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2RldnRvb2wvZmlsZXMvZGV2dG9vbC11cGdyYWRlLTAuMi50YXIuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9lbXB0eXRlc3QvZW1wdHl0ZXN0LmJiIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9lbXB0eXRlc3QvZW1wdHl0ZXN0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4N2Y0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2VtcHR5dGVzdC9lbXB0eXRlc3QuYmIKQEAgLTAsMCArMSw1IEBACitpbmNsdWRlIHRlc3RfcmVjaXBlLmluYworCisjIFNldCBMSUNFTlNFIHRvIHNvbWV0aGluZyBzbyB0aGF0IGJpdGJha2UgLXAgdGhhdCBpcyByYW4gYXQgdGhlIGJlZ2lubmluZworIyBpcyBzdWNjZXNzZnVsIHNpbmNlIHRlc3RfcmVjaXBlLmluYyBoYXMgbm90IHlldCBiZWVuIG1vZGlmaWVkLgorTElDRU5TRSA9ICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2ltYWdlcy9vZS1zZWxmdGVzdC1pbWFnZS5iYiBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvaW1hZ2VzL29lLXNlbGZ0ZXN0LWltYWdlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNzA5NGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2ltYWdlcy9vZS1zZWxmdGVzdC1pbWFnZS5iYgpAQCAtMCwwICsxLDkgQEAKK1NVTU1BUlkgPSAiQW4gaW1hZ2UgdXNlZCBkdXJpbmcgb2Utc2VsZnRlc3QgdGVzdHMiCisKK0lNQUdFX0lOU1RBTEwgPSAicGFja2FnZWdyb3VwLWNvcmUtYm9vdCAke1JPT1RGU19QS0dNQU5BR0VfQk9PVFNUUkFQfSBkcm9wYmVhciIKK0lNQUdFX0ZFQVRVUkVTID0gImRlYnVnLXR3ZWFrcyIKKworSU1BR0VfTElOR1VBUyA9ICIgIgorCitpbmhlcml0IGNvcmUtaW1hZ2UKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwuYmIgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzNjNTY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwuYmIKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJBbiBleGFtcGxlIG9mIHBhcnRpdGlvbmVkIGltYWdlLiIKKworSU1BR0VfSU5TVEFMTCA9ICJwYWNrYWdlZ3JvdXAtY29yZS1ib290ICR7Uk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVB9IgorCitJTUFHRV9GU1RZUEVTID0gIndpYy5iejIiCitSTV9PTERfSU1BR0UgPSAiMSIKKworIyBjb3JlLWltYWdlLW1pbmltYWwgaXMgcmVmZXJlbmNlZCBpbiAud2tzLCBzbyB3ZSBuZWVkIGl0cyByb290ZnMKKyMgdG8gYmUgcmVhZHkgYmVmb3JlIG91ciByb290ZnMKK2RvX3Jvb3Rmc1tkZXBlbmRzXSArPSAiY29yZS1pbWFnZS1taW5pbWFsOmRvX3Jvb3RmcyIKKworSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFID0gIjIwMDAiCisKK2luaGVyaXQgaW1hZ2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvaW1hZ2VzL3dpYy1pbWFnZS1taW5pbWFsLndrcyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvaW1hZ2VzL3dpYy1pbWFnZS1taW5pbWFsLndrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWNkOGYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwud2tzCkBAIC0wLDAgKzEsMTAgQEAKKyMgc2hvcnQtZGVzY3JpcHRpb246IEV4YW1wbGUgb2YgcGFydGl0aW9uZWQgaW1hZ2Ugd2l0aCBjb21wbGV4IGxheW91dAorIyBsb25nLWRlc2NyaXB0aW9uOiBUaGlzIGltYWdlIGNvbnRhaW5zIGJvb3QgcGFydGl0aW9uIGFuZCAzIHJvb3RmcyBwYXJ0aXRpb25zCisjIGNyZWF0ZWQgZnJvbSBjb3JlLWltYWdlLW1pbmltYWwgYW5kIHdpYy1pbWFnZS1taW5pbWFsIGltYWdlIHJlY2lwZXMuCisKK3BhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1wY2Jpb3MgLS1vbmRpc2sgc2RhIC0tbGFiZWwgYm9vdCAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKK3BhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDIgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKK3BhcnQgL2NvcmUgLS1zb3VyY2Ugcm9vdGZzIC0tcm9vdGZzLWRpcj1jb3JlLWltYWdlLW1pbmltYWwgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDIgLS1sYWJlbCBjb3JlIC0tYWxpZ24gMTAyNAorcGFydCAvYmFja3VwIC0tc291cmNlIHJvb3RmcyAtLXJvb3Rmcy1kaXI9d2ljLWltYWdlLW1pbmltYWwgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDIgLS1sYWJlbCBiYWNrdXAgLS1hbGlnbiAxMDI0CisKK2Jvb3Rsb2FkZXIgIC0tdGltZW91dD0wICAtLWFwcGVuZD0icm9vdHdhaXQgY29uc29sZT10dHkwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9tNC9tNF8xLjQuMTcuYmJhcHBlbmQgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L200L200XzEuNC4xNy5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDU3MjA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9tNC9tNF8xLjQuMTcuYmJhcHBlbmQKQEAgLTAsMCArMSwyIEBACisjIFRoaXMgYmJhcHBlbmQgaXMgdXNlZCB0byBhbHRlciB0aGUgcmVjaXBlIHVzaW5nIHRoZSB0ZXN0X3JlY2lwZS5pbmMgZmlsZSBjcmVhdGVkIGJ5IHRlc3RzLgoraW5jbHVkZSB0ZXN0X3JlY2lwZS5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvbWFuL21hbi9tYW4tMS41aDEtbWFrZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvbWFuL21hbi9tYW4tMS41aDEtbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGQ1OWI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9tYW4vbWFuL21hbi0xLjVoMS1tYWtlLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK1Rlc3QgcGF0Y2ggaGVyZSEKK1RoaXMgaXMgaW52YWxpZCBwYXRjaCB1c2VkIGJ5IHRlc3RzIGluIHNjcmlwdHMvbGliL3NlbGZ0ZXN0cy4KKworLS0tIG1hbi0xLjVnL21hbi9NYWtlZmlsZS5pbi5taWtlCUZyaSBBcHIgIDkgMTM6MzU6NTQgMTk5OQorKysrIG1hbi0xLjVnL21hbi9NYWtlZmlsZS5pbglGcmkgQXByICA5IDEzOjM2OjQ1IDE5OTkKK0BAIC0xLDggKzEsOCBAQAorICNNQUtFIFRISVMgUEFUQ0ggSU5WQUxJRAorIE1BTjEgPSBtYW4gd2hhdGlzIGFwcm9wb3MKKy1NQU41ID0gbWFuLmNvbmYKKytNQU41ID0gbWFuLmNvbmZpZworIE1BTjggPSBtYWtld2hhdGlzCistQUxMID0gbWFuLjEgd2hhdGlzLjEgYXByb3Bvcy4xIG1hbi5jb25mLjUKKytBTEwgPSBtYW4uMSB3aGF0aXMuMSBhcHJvcG9zLjEgbWFuLmNvbmZpZy41CisgTUFZQkU4ID0gbWFrZXdoYXRpcworIAorIC5TVUZGSVhFUzogLm1hbiAuMSAuNSAuOApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9tYW4vbWFuXzEuNmcuYmJhcHBlbmQgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L21hbi9tYW5fMS42Zy5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDU3MjA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9tYW4vbWFuXzEuNmcuYmJhcHBlbmQKQEAgLTAsMCArMSwyIEBACisjIFRoaXMgYmJhcHBlbmQgaXMgdXNlZCB0byBhbHRlciB0aGUgcmVjaXBlIHVzaW5nIHRoZSB0ZXN0X3JlY2lwZS5pbmMgZmlsZSBjcmVhdGVkIGJ5IHRlc3RzLgoraW5jbHVkZSB0ZXN0X3JlY2lwZS5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9hZGQtZmlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9hZGQtZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGM5OWM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL2FkZC1maWxlLnBhdGNoCkBAIC0wLDAgKzEsOCBAQAorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wNDliNDJlCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwyIEBACisrVGVzdCBmaWxlIDIKKys0NTYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9maWxlMSBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9maWxlMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTcxYWE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL2ZpbGUxCkBAIC0wLDAgKzEsMiBAQAorRmlyc3QgdGVzdCBmaWxlCisxMjMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9pbnN0YWxsc2NyaXB0LnNoIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL2luc3RhbGxzY3JpcHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMzBkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9pbnN0YWxsc2NyaXB0LnNoCkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCitlY2hvICJUaGlyZCBmaWxlIiA+ICQxL3NlbGZ0ZXN0LXJlcGxhY2VtZS1zY3JpcHRlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZnVuYyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1mdW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MDJiYjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZnVuYwpAQCAtMCwwICsxIEBACitBIGZpbGUgaW5zdGFsbGVkIGJ5IGEgZnVuY3Rpb24gY2FsbGVkIGJ5IGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1nbG9iZmlsZSBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1nbG9iZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTYyOThiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWdsb2JmaWxlCkBAIC0wLDAgKzEgQEAKK0EgZmlsZSBtYXRjaGVkIGJ5IGEgZ2xvYiBpbiBkb19pbnN0YWxsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtdG9kaXItZ2xvYmZpbGUgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtdG9kaXItZ2xvYmZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg1YWUzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC10b2Rpci1nbG9iZmlsZQpAQCAtMCwwICsxIEBACitBIGZpbGUgbWF0Y2hlZCBieSBhIGdsb2IgaW4gZG9faW5zdGFsbCB0byBhIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS1vcmlnIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS1vcmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5M2Q2YTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLW9yaWcKQEAgLTAsMCArMSBAQAorU3RyYWlnaHQgdGhyb3VnaCB3aXRoIHNhbWUgbmFtCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLXNyYy1nbG9iZmlsZSBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtc3JjLWdsb2JmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMjBhMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLXNyYy1nbG9iZmlsZQpAQCAtMCwwICsxIEBACitBIGZpbGUgbWF0Y2hlZCBieSBhIGdsb2IgaW4gU1JDX1VSSQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS10b2RpciBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtdG9kaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODViZDVlYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtdG9kaXIKQEAgLTAsMCArMSBAQAorRmlsZSBpbiBTUkNfVVJJIGluc3RhbGxlZCBqdXN0IHRvIGRpcmVjdG9yeSBwYXRoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc3ViZGlyL2ZpbGVpbnN1YmRpciBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zdWJkaXIvZmlsZWluc3ViZGlyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTZiNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc3ViZGlyL2ZpbGVpbnN1YmRpcgpAQCAtMCwwICsxIEBACitBIGZpbGUgaW4gYSBzdWJkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9zZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUuYmIgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMGEwNDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlLmJiCkBAIC0wLDAgKzEsNDIgQEAKK1NVTU1BUlkgPSAiVGVzdCByZWNpcGUgZm9yIHJlY2lwZXRvb2wgYXBwZW5kZmlsZSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L01JVDttZDU9MDgzNWFkZTY5OGUwYmNmODUwNmVjZGEyZjdiNGYzMDIiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK1NSQ19VUkkgPSAiZmlsZTovL2luc3RhbGxzY3JpcHQuc2ggXAorICAgICAgICAgICBmaWxlOi8vc2VsZnRlc3QtcmVwbGFjZW1lLW9yaWcgXAorICAgICAgICAgICBmaWxlOi8vc2VsZnRlc3QtcmVwbGFjZW1lLXRvZGlyIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbGUxIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1maWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3N1YmRpciBcCisgICAgICAgICAgIGZpbGU6Ly9zZWxmdGVzdC1yZXBsYWNlbWUtc3JjLWdsb2IqIFwKKyAgICAgICAgICAgZmlsZTovL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWdsb2JmaWxlIFwKKyAgICAgICAgICAgZmlsZTovL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LXRvZGlyLWdsb2JmaWxlIFwKKyAgICAgICAgICAgZmlsZTovL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWZ1bmMiCisKK2luc3RhbGxfZXh0cmFmdW5jKCkgeworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWZ1bmMgJHtEfSR7ZGF0YWRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZnVuYworfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2VsZnRlc3QtcmVwbGFjZW1lLW9yaWcgJHtEfSR7ZGF0YWRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLW9yaWcKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zZWxmdGVzdC1yZXBsYWNlbWUtdG9kaXIgJHtEfSR7ZGF0YWRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9maWxlMSAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtcmVuYW1lZAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3N1YmRpci9maWxlaW5zdWJkaXIgJHtEfSR7ZGF0YWRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLXN1YmRpcgorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1zcmMtZ2xvYmZpbGUgJHtEfSR7ZGF0YWRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLXNyYy1nbG9iZmlsZQorCWNwICR7V09SS0RJUn0vc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZ2xvYiogJHtEfSR7ZGF0YWRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZ2xvYmZpbGUKKwljcCAke1dPUktESVJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LXRvZGlyLWdsb2IqICR7RH0ke2RhdGFkaXJ9CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDY0NCAke1N9L2ZpbGUyICR7RH0ke3N5c2NvbmZkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1wYXRjaGVkCisJc2ggJHtXT1JLRElSfS9pbnN0YWxsc2NyaXB0LnNoICR7RH0ke2RhdGFkaXJ9CisJaW5zdGFsbF9leHRyYWZ1bmMKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwllY2hvICJUZXN0IGZpbGUgaW5zdGFsbGVkIGJ5IHBvc3RpbnN0IiA+ICREJHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtcG9zdGluc3QKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA1NzIwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiYXBwZW5kCkBAIC0wLDAgKzEsMiBAQAorIyBUaGlzIGJiYXBwZW5kIGlzIHVzZWQgdG8gYWx0ZXIgdGhlIHJlY2lwZSB1c2luZyB0aGUgdGVzdF9yZWNpcGUuaW5jIGZpbGUgY3JlYXRlZCBieSB0ZXN0cy4KK2luY2x1ZGUgdGVzdF9yZWNpcGUuaW5jCmRpZmYgLS1naXQgYS9DT1BZSU5HLk1JVCBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9DT1BZSU5HLk1JVApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIENPUFlJTkcuTUlUCmNvcHkgdG8geW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL0NPUFlJTkcuTUlUCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vY29uZi9sYXllci5jb25mIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL2NvbmYvbGF5ZXIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2ExNjMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL2NvbmYvbGF5ZXIuY29uZgpAQCAtMCwwICsxLDE1IEBACisjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iCisKKyMgV2UgaGF2ZSByZWNpcGVzLSogZGlyZWN0b3JpZXMsIGFkZCB0byBCQkZJTEVTCitCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiICR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmJhcHBlbmQiCisKK0JCRklMRV9DT0xMRUNUSU9OUyArPSAic2tlbGV0b24iCitCQkZJTEVfUEFUVEVSTl9za2VsZXRvbiA9ICJeJHtMQVlFUkRJUn0vIgorQkJGSUxFX1BSSU9SSVRZX3NrZWxldG9uID0gIjEiCisKKyMgVGhpcyBzaG91bGQgb25seSBiZSBpbmNyZW1lbnRlZCBvbiBzaWduaWZpY2FudCBjaGFuZ2VzIHRoYXQgd2lsbAorIyBjYXVzZSBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoIG90aGVyIGxheWVycworTEFZRVJWRVJTSU9OX3NrZWxldG9uID0gIjEiCisKK0xBWUVSREVQRU5EU19za2VsZXRvbiA9ICJjb3JlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL2NvbmYvbXVsdGlsaWItZXhhbXBsZS5jb25mIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL2NvbmYvbXVsdGlsaWItZXhhbXBsZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNmRhN2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vY29uZi9tdWx0aWxpYi1leGFtcGxlLmNvbmYKQEAgLTAsMCArMSwxMyBAQAorIworIyBTYW1wbGUgbXVsdGlsaWIgY29uZmlndXJhdGlvbiB3aGljaCB0aGUgdXNlciBjYW4gZWl0aGVyIGFkZCBpbiBsb2NhbC5jb25mCisjIG9yIHNwZWNpZmljIGluIGFuIGNvbmZpZ3VyYXRpb24gZmlsZSBsaWtlIHRoaXMsIHRoZW4gcmVxdWlyZSBpdC4KKyMKKyMgVGhpcyBjb25maWd1cmF0aW9uIHNwZWNpZmllcyBhbiB4ODYgNjQgYml0IG1hY2hpbmUgYXMgdGhlIG1haW4gbWFjaGluZQorIyB0eXBlIGFuZCB0aGVuIGFkZHMgYSBtdWx0aWxpYiBpbiB0aGUgImxpYjMyIiBkaXJlY3Rvcnkgd2hlcmUgdGhvc2UKKyMgbGlicmFyaWVzIGFyZSBjb21waWxlZCB3aXRoIHRoZSAieDg2IiB0dW5lLgorIworCitNQUNISU5FID0gInFlbXV4ODYtNjQiCityZXF1aXJlIGNvbmYvbXVsdGlsaWIuY29uZgorTVVMVElMSUJTID0gIm11bHRpbGliOmxpYjMyIgorREVGQVVMVFRVTkVfdmlydGNsYXNzLW11bHRpbGliLWxpYjMyID0gIng4NiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9jb25mL211bHRpbGliLWV4YW1wbGUyLmNvbmYgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vY29uZi9tdWx0aWxpYi1leGFtcGxlMi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OTZmNjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vY29uZi9tdWx0aWxpYi1leGFtcGxlMi5jb25mCkBAIC0wLDAgKzEsMTMgQEAKKyMKKyMgU2FtcGxlIG11bHRpbGliIGNvbmZpZ3VyYXRpb24gd2hpY2ggdGhlIHVzZXIgY2FuIGVpdGhlciBhZGQgaW4gbG9jYWwuY29uZgorIyBvciBzcGVjaWZpYyBpbiBhbiBjb25maWd1cmF0aW9uIGZpbGUgbGlrZSB0aGlzLCB0aGVuIHJlcXVpcmUgaXQuCisjCisjIFRoaXMgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgYW4geDg2IDY0IGJpdCBtYWNoaW5lIGFzIHRoZSBtYWluIG1hY2hpbmUKKyMgdHlwZSBhbmQgdGhlbiBhZGRzIGEgbXVsdGlsaWIgaW4gdGhlICJsaWJ4MzIiIGRpcmVjdG9yeSB3aGVyZSB0aG9zZQorIyBsaWJyYXJpZXMgYXJlIGNvbXBpbGVkIHdpdGggdGhlICJ4ODYtNjQteDMyIiB0dW5lLgorIworCitNQUNISU5FID0gInFlbXV4ODYtNjQiCityZXF1aXJlIGNvbmYvbXVsdGlsaWIuY29uZgorTVVMVElMSUJTID0gIm11bHRpbGliOmxpYngzMiIKK0RFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi1saWJ4MzIgPSAieDg2LTY0LXgzMiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L25vX3Jma2lsbC5jZmcgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9ub19yZmtpbGwuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NDBlY2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9ub19yZmtpbGwuY2ZnCkBAIC0wLDAgKzEgQEAKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF8lLmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfJS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGNkZWZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfJS5iYmFwcGVuZApAQCAtMCwwICsxLDEyIEBACisjIEV4YW1wbGUgdXNlIG9mIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIGZvciBidXN5Ym94LCB3aGljaCB1c2VzIHRoZSBzYW1lCisjIG1lY2hhbmlzbSBhcyB0aGUgbGludXgteW9jdG8ga2VybmVsIHJlY2lwZS4KKyMKKyMgVGhlIGVudHJpZXMgaGVyZSB3aWxsIG92ZXJyaWRlIGFueSBlbnRyaWVzIGluIHRoZSBiYXNlIGJ1c3lib3ggcmVjaXBlCisjCisjIE1vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4gdGhlIEtlcm5lbCBEZXYgTWFudWFsCisjIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2N1cnJlbnQva2VybmVsLWRldi9rZXJuZWwtZGV2Lmh0bWwjY2hhbmdpbmctdGhlLWNvbmZpZ3VyYXRpb24KK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKKworU1JDX1VSSSArPSAiIFwKKwkgICAgZmlsZTovL25vX3Jma2lsbC5jZmcgXAorICAgICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvaGVsbG8tbW9kL2ZpbGVzL0NPUFlJTkcgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvaGVsbG8tbW9kL2ZpbGVzL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0NTUxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvZmlsZXMvQ09QWUlORwpAQCAtMCwwICsxLDM0MCBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgICAgICAgICAgICAgICAgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvZmlsZXMvTWFrZWZpbGUgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvaGVsbG8tbW9kL2ZpbGVzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZWQzNWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvaGVsbG8tbW9kL2ZpbGVzL01ha2VmaWxlCkBAIC0wLDAgKzEsMTQgQEAKK29iai1tIDo9IGhlbGxvLm8KKworU1JDIDo9ICQoc2hlbGwgcHdkKQorCithbGw6CisJJChNQUtFKSAtQyAkKEtFUk5FTF9TUkMpIE09JChTUkMpCisKK21vZHVsZXNfaW5zdGFsbDoKKwkkKE1BS0UpIC1DICQoS0VSTkVMX1NSQykgTT0kKFNSQykgbW9kdWxlc19pbnN0YWxsCisKK2NsZWFuOgorCXJtIC1mICoubyAqfiBjb3JlIC5kZXBlbmQgLiouY21kICoua28gKi5tb2QuYworCXJtIC1mIE1vZHVsZS5tYXJrZXJzIE1vZHVsZS5zeW12ZXJzIG1vZHVsZXMub3JkZXIKKwlybSAtcmYgLnRtcF92ZXJzaW9ucyBNb2R1bGVzLnN5bXZlcnMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvZmlsZXMvaGVsbG8uYyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvZmlsZXMvaGVsbG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2MwZDM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2hlbGxvLW1vZC9maWxlcy9oZWxsby5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAxMSAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyAqICAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworaW50IGluaXRfbW9kdWxlKHZvaWQpCit7CisJcHJpbnRrKCJIZWxsbyBXb3JsZCFcbiIpOworCXJldHVybiAwOworfQorCit2b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcHJpbnRrKCJHb29kYnllIENydWVsIFdvcmxkIVxuIik7Cit9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvaGVsbG8tbW9kXzAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvaGVsbG8tbW9kXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTQwYjBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2hlbGxvLW1vZC9oZWxsby1tb2RfMC4xLmJiCkBAIC0wLDAgKzEsMTUgQEAKK1NVTU1BUlkgPSAiRXhhbXBsZSBvZiBob3cgdG8gYnVpbGQgYW4gZXh0ZXJuYWwgTGludXgga2VybmVsIG1vZHVsZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSIKKworaW5oZXJpdCBtb2R1bGUKKworU1JDX1VSSSA9ICJmaWxlOi8vTWFrZWZpbGUgXAorICAgICAgICAgICBmaWxlOi8vaGVsbG8uYyBcCisgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HIFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfSIKKworIyBUaGUgaW5oZXJpdCBvZiBtb2R1bGUuYmJjbGFzcyB3aWxsIGF1dG9tYXRpY2FsbHkgbmFtZSBtb2R1bGUgcGFja2FnZXMgd2l0aAorIyAia2VybmVsLW1vZHVsZS0iIHByZWZpeCBhcyByZXF1aXJlZCBieSB0aGUgb2UtY29yZSBidWlsZCBlbnZpcm9ubWVudC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20uYmIgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZTQ0ZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tLmJiCkBAIC0wLDAgKzEsNzIgQEAKKyMgbGludXgteW9jdG8tY3VzdG9tLmJiOgorIworIyAgIEFuIGV4YW1wbGUga2VybmVsIHJlY2lwZSB0aGF0IHVzZXMgdGhlIGxpbnV4LXlvY3RvIGFuZCBvZS1jb3JlCisjICAga2VybmVsIGNsYXNzZXMgdG8gYXBwbHkgYSBzdWJzZXQgb2YgeW9jdG8ga2VybmVsIG1hbmFnZW1lbnQgdG8gZ2l0CisjICAgbWFuYWdlZCBrZXJuZWwgcmVwb3NpdG9yaWVzLgorIworIyAgIFRvIHVzZSBsaW51eC15b2N0by1jdXN0b20gaW4geW91ciBsYXllciwgY29weSB0aGlzIHJlY2lwZSAob3B0aW9uYWxseQorIyAgIHJlbmFtZSBpdCBhcyB3ZWxsKSBhbmQgbW9kaWZ5IGl0IGFwcHJvcHJpYXRlbHkgZm9yIHlvdXIgbWFjaGluZS4gaS5lLjoKKyMKKyMgICAgIENPTVBBVElCTEVfTUFDSElORV95b3VybWFjaGluZSA9ICJ5b3VybWFjaGluZSIKKyMKKyMgICBZb3UgbXVzdCBhbHNvIHByb3ZpZGUgYSBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIG1vc3QgZGlyZWN0CisjICAgbWV0aG9kIGlzIHRvIGNvcHkgeW91ciAuY29uZmlnIHRvIGZpbGVzL2RlZmNvbmZpZyBpbiB5b3VyIGxheWVyLAorIyAgIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgY29weSAoYW5kIHJlbmFtZSkgb2YgdGhpcyByZWNpcGUgYW5kCisjICAgYWRkIGZpbGU6Ly9kZWZjb25maWcgdG8geW91ciBTUkNfVVJJLgorIworIyAgIFRvIHVzZSB0aGUgeW9jdG8ga2VybmVsIHRvb2xpbmcgdG8gZ2VuZXJhdGUgYSBCU1AgY29uZmlndXJhdGlvbgorIyAgIHVzaW5nIG1vZHVsYXIgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIHNlZSB0aGUgeW9jdG8tYnNwIGFuZAorIyAgIHlvY3RvLWtlcm5lbCB0b29scyBkb2N1bWVudGF0aW9uLgorIworIyBXYXJuaW5nOgorIworIyAgIEJ1aWxkaW5nIHRoaXMgZXhhbXBsZSB3aXRob3V0IHByb3ZpZGluZyBhIGRlZmNvbmZpZyBvciBCU1AKKyMgICBjb25maWd1cmF0aW9uIHdpbGwgcmVzdWx0IGluIGJ1aWxkIG9yIGJvb3QgZXJyb3JzLiBUaGlzIGlzIG5vdCBhCisjICAgYnVnLgorIworIworIyBOb3RlczoKKyMKKyMgICBwYXRjaGVzOiBwYXRjaGVzIGNhbiBiZSBtZXJnZWQgaW50byB0byB0aGUgc291cmNlIGdpdCB0cmVlIGl0c2VsZiwKKyMgICAgICAgICAgICBhZGRlZCB2aWEgdGhlIFNSQ19VUkksIG9yIGNvbnRyb2xsZWQgdmlhIGEgQlNQCisjICAgICAgICAgICAgY29uZmlndXJhdGlvbi4KKyMKKyMgICBkZWZjb25maWc6IFdoZW4gYSBkZWZjb25maWcgaXMgcHJvdmlkZWQsIHRoZSBsaW51eC15b2N0byBjb25maWd1cmF0aW9uCisjICAgICAgICAgICAgICB1c2VzIHRoZSBmaWxlbmFtZSBhcyBhIHRyaWdnZXIgdG8gdXNlIGEgJ2FsbG5vY29uZmlnJyBiYXNlbGluZQorIyAgICAgICAgICAgICAgYmVmb3JlIG1lcmdpbmcgdGhlIGRlZmNvbmZpZyBpbnRvIHRoZSBidWlsZC4gCisjCisjICAgICAgICAgICAgICBJZiB0aGUgZGVmY29uZmlnIGZpbGUgd2FzIGNyZWF0ZWQgd2l0aCBtYWtlX3NhdmVkZWZjb25maWcsIAorIyAgICAgICAgICAgICAgbm90IGFsbCBvcHRpb25zIGFyZSBzcGVjaWZpZWQsIGFuZCBzaG91bGQgYmUgcmVzdG9yZWQgd2l0aCB0aGVpcgorIyAgICAgICAgICAgICAgZGVmYXVsdHMsIG5vdCBzZXQgdG8gJ24nLiBUbyBwcm9wZXJseSBleHBhbmQgYSBkZWZjb25maWcgbGlrZQorIyAgICAgICAgICAgICAgdGhpcywgc3BlY2lmeTogS0NPTkZJR19NT0RFPSItLWFsbGRlZmNvbmZpZyIgaW4gdGhlIGtlcm5lbAorIyAgICAgICAgICAgICAgcmVjaXBlLgorIyAgIAorIyAgIGV4YW1wbGUgY29uZmlndXJhdGlvbiBhZGRpdGlvbjoKKyMgICAgICAgICAgICBTUkNfVVJJICs9ICJmaWxlOi8vc21wLmNmZyIKKyMgICBleGFtcGxlIHBhdGNoIGFkZGl0aW9uIChmb3Iga2VybmVsIHYzLjQgb25seSk6CisjICAgICAgICAgICAgU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtbGludXgtdmVyc2lvbi10d2Vhay5wYXRjaAorIyAgIGV4YW1wbGUgZmVhdHVyZSBhZGRpdGlvbiAoZm9yIGtlcm5lbCB2My40IG9ubHkpOgorIyAgICAgICAgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9mZWF0dXJlLnNjYyIKKyMKKworaW5oZXJpdCBrZXJuZWwKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKKyMgT3ZlcnJpZGUgU1JDX1VSSSBpbiBhIGNvcHkgb2YgdGhpcyByZWNpcGUgdG8gcG9pbnQgYXQgYSBkaWZmZXJlbnQgc291cmNlCisjIHRyZWUgaWYgeW91IGRvIG5vdCB3YW50IHRvIGJ1aWxkIGZyb20gTGludXMnIHRyZWUuCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC5naXQ7cHJvdG9jb2w9Z2l0O25vY2hlY2tvdXQ9MTtuYW1lPW1hY2hpbmUiCisKK0xJTlVYX1ZFUlNJT04gPz0gIjMuNCIKK0xJTlVYX1ZFUlNJT05fRVhURU5TSU9OID89ICItY3VzdG9tIgorCisjIE1vZGlmeSBTUkNSRVYgdG8gYSBkaWZmZXJlbnQgY29tbWl0IGhhc2ggaW4gYSBjb3B5IG9mIHRoaXMgcmVjaXBlIHRvCisjIGJ1aWxkIGEgZGlmZmVyZW50IHJlbGVhc2Ugb2YgdGhlIExpbnV4IGtlcm5lbC4KKyMgdGFnOiB2My40IDc2ZTEwZDE1OGVmYjZkNDUxNjAxODg0NmY2MGMyYWI1NTAxOTAwYmMKK1NSQ1JFVl9tYWNoaW5lPSI3NmUxMGQxNThlZmI2ZDQ1MTYwMTg4NDZmNjBjMmFiNTUwMTkwMGJjIgorCitQUiA9ICJyMSIKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKKyMgT3ZlcnJpZGUgQ09NUEFUSUJMRV9NQUNISU5FIHRvIGluY2x1ZGUgeW91ciBtYWNoaW5lIGluIGEgY29weSBvZiB0aGlzIHJlY2lwZQorIyBmaWxlLiBMZWF2aW5nIGl0IGVtcHR5IGhlcmUgZW5zdXJlcyBhbiBlYXJseSBleHBsaWNpdCBidWlsZCBmYWlsdXJlLgorQ09NUEFUSUJMRV9NQUNISU5FID0gIiheJCkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tLzAwMDEtbGludXgtdmVyc2lvbi10d2Vhay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vMDAwMS1saW51eC12ZXJzaW9uLXR3ZWFrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NTYyZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tLzAwMDEtbGludXgtdmVyc2lvbi10d2Vhay5wYXRjaApAQCAtMCwwICsxLDI2IEBACitGcm9tIDVhNTU5NDNhNmJiYjEwYTc5OTk0YTBiMTgwNzFiMjQyN2RmZmIxNWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMTEgSnVuIDIwMTIgMTU6MzE6NDIgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gbGludXg6IHZlcnNpb24gdHdlYWsKKworU2lnbmVkLW9mZi1ieTogQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZSB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IGE2ODc5NjMuLmY1YjFhYzMgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0yLDcgKzIsNyBAQCBWRVJTSU9OID0gMworIFBBVENITEVWRUwgPSA0CisgU1VCTEVWRUwgPSAwCisgRVhUUkFWRVJTSU9OID0KKy1OQU1FID0gU2FiZXItdG9vdGhlZCBTcXVpcnJlbAorK05BTUUgPSBTYWJlci10b290aGVkIFNxdWlycmVsLWN1c3RvbQorIAorICMgKkRPQ1VNRU5UQVRJT04qCisgIyBUbyBzZWUgYSBsaXN0IG9mIHR5cGljYWwgdGFyZ2V0cyBleGVjdXRlICJtYWtlIGhlbHAiCistLSAKKzEuNy41LjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9mZWF0dXJlLnNjYyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vZmVhdHVyZS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFkNWFmNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vZmVhdHVyZS5zY2MKQEAgLTAsMCArMSBAQAorcGF0Y2ggMDAwMS1saW51eC12ZXJzaW9uLXR3ZWFrLnBhdGNoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL3NtcC5jZmcgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL3NtcC5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMyNmE4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vc21wLmNmZwpAQCAtMCwwICsxIEBACisjIENPTkZJR19TTVAgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtbXVsdGlsaWIvaW1hZ2VzL2NvcmUtaW1hZ2UtbXVsdGlsaWItZXhhbXBsZS5iYiBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLW11bHRpbGliL2ltYWdlcy9jb3JlLWltYWdlLW11bHRpbGliLWV4YW1wbGUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEzMTg2ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLW11bHRpbGliL2ltYWdlcy9jb3JlLWltYWdlLW11bHRpbGliLWV4YW1wbGUuYmIKQEAgLTAsMCArMSwxMyBAQAorIworIyBBbiBleGFtcGxlIG9mIGEgbXVsdGlsaWIgaW1hZ2UKKyMKKyMgVGhpcyBleGFtcGxlIGluY2x1ZGVzIGEgbGliMzIgdmVyc2lvbiBvZiBiYXNoIGludG8gYW4gb3RoZXJ3aXNlIHN0YW5kYXJkCisjIHNhdG8gaW1hZ2UuIEl0IGFzc3VtZXMgYSAibGliMzIiIG11bHRpbGliIGhhcyBiZWVuIGVuYWJsZWQgaW4gdGhlIHVzZXIncworIyBjb25maWd1cmF0aW9uIChzZWUgdGhlIGV4YW1wbGUgY29uZiBmaWxlcyBmb3IgZXhhbXBsZXMgb2YgdGhpcy4pCisjCisKKyMgRmlyc3QgaW5jbHVkZSBhIGJhc2UgaW1hZ2UgdG8gYmFzZSB0aGluZ3Mgb2ZmCityZXF1aXJlIHJlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLmJiCisKKyMgTm93IGFkZCB0aGUgbXVsdGlsaWIgcGFja2FnZXMgd2Ugd2FudCB0byBpbnN0YWxsCitJTUFHRV9JTlNUQUxMICs9ICJsaWIzMi1iYXNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vc2VydmljZS9zZXJ2aWNlL0NPUFlSSUdIVCBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3NlcnZpY2Uvc2VydmljZS9DT1BZUklHSFQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMzZTE3MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3NlcnZpY2Uvc2VydmljZS9DT1BZUklHSFQKQEAgLTAsMCArMSwxNSBAQAorU3lzdmluaXQgaXMgQ29weXJpZ2h0IChDKSAxOTkxLTIwMDQgTWlxdWVsIHZhbiBTbW9vcmVuYnVyZworCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxIFVTQQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vc2VydmljZS9zZXJ2aWNlL3NrZWxldG9uIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vc2VydmljZS9zZXJ2aWNlL3NrZWxldG9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZWRjOWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi9zZXJ2aWNlL3NlcnZpY2Uvc2tlbGV0b24KQEAgLTAsMCArMSwxOTMgQEAKKyMhIC9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHNrZWxldG9uCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkbG9jYWxfZnMKKyMgU2hvdWxkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOiAgICAgJGxvY2FsX2ZzCisjIFNob3VsZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IEV4YW1wbGUgaW5pdHNjcmlwdAorIyBEZXNjcmlwdGlvbjogICAgICAgVGhpcyBmaWxlIHNob3VsZCBiZSB1c2VkIHRvIGNvbnN0cnVjdCBzY3JpcHRzIHRvIGJlCisjICAgICAgICAgICAgICAgICAgICBwbGFjZWQgaW4gL2V0Yy9pbml0LmQKKyMjIyBFTkQgSU5JVCBJTkZPCisKKyMgVGhlIGRlZmluaXRpb24gb2YgYWN0aW9uczogKEZyb20gTFNCIDMuMS4wKQorIyBzdGFydCAgICAgICAgIHN0YXJ0IHRoZSBzZXJ2aWNlCisjIHN0b3AgICAgICAgICAgc3RvcCB0aGUgc2VydmljZQorIyByZXN0YXJ0ICAgICAgIHN0b3AgYW5kIHJlc3RhcnQgdGhlIHNlcnZpY2UgaWYgdGhlIHNlcnZpY2UgaXMgYWxyZWFkeSBydW5uaW5nLAorIyAgICAgICAgICAgICAgIG90aGVyd2lzZSBzdGFydCB0aGUgc2VydmljZQorIyB0cnktcmVzdGFydAlyZXN0YXJ0IHRoZSBzZXJ2aWNlIGlmIHRoZSBzZXJ2aWNlIGlzIGFscmVhZHkgcnVubmluZworIyByZWxvYWQJY2F1c2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNlcnZpY2UgdG8gYmUgcmVsb2FkZWQgd2l0aG91dAorIyAgICAgICAgICAgICAgIGFjdHVhbGx5IHN0b3BwaW5nIGFuZCByZXN0YXJ0aW5nIHRoZSBzZXJ2aWNlCisjIGZvcmNlLXJlbG9hZAljYXVzZSB0aGUgY29uZmlndXJhdGlvbiB0byBiZSByZWxvYWRlZCBpZiB0aGUgc2VydmljZSBzdXBwb3J0cworIyAgICAgICAgICAgICAgIHRoaXMsIG90aGVyd2lzZSByZXN0YXJ0IHRoZSBzZXJ2aWNlIGlmIGl0IGlzIHJ1bm5pbmcKKyMgc3RhdHVzCXByaW50IHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgc2VydmljZQorCisjIFRoZSBzdGFydCwgc3RvcCwgcmVzdGFydCwgZm9yY2UtcmVsb2FkLCBhbmQgc3RhdHVzIGFjdGlvbnMgc2hhbGwgYmUgc3VwcG9ydGVkCisjIGJ5IGFsbCBpbml0IHNjcmlwdHM7IHRoZSByZWxvYWQgYW5kIHRoZSB0cnktcmVzdGFydCBhY3Rpb25zIGFyZSBvcHRpb25hbAorCisjIENvbW1vbiBzdGVwcyB0byBjb252ZXJ0IHRoaXMgc2tlbGV0b24gaW50byBhIHJlYWwgaW5pdCBzY3JpcHQKKyMgMSkgY3Agc2tlbGV0b24gPHRoZV9yZWFsX25hbWU+CisjIDIpIFNldCBERVNDIGFuZCBOQU1FCisjIDMpIENoZWNrIHdoZXRoZXIgdGhlIGRhZW1vbiBhcHAgaXMgL3Vzci9zYmluLyROQU1FLCBpZiBub3QsIHNldCBpdC4KKyMgNCkgU2V0IERBRU1PTl9BUkdTIGlmIHRoZXJlIGlzIGFueQorIyA1KSBSZW1vdmUgdGhlIHVzZWxlc3MgY29kZQorCisjIE5PVEU6IFRoZSBza2VsZXRvbiBkb2Vzbid0IHN1cHBvcnQgdGhlIGRhZW1vbiB3aGljaCBpcyBhIHNjcmlwdCB1bmxlc3MgdGhlCisjICAgICAgIHBpZG9mIHN1cHBvcnRzICIteCIgb3B0aW9uLCBwbGVhc2Ugc2VlIG1vcmUgY29tbWVudHMgZm9yIHBpZG9mcHJvYyAoKQorIyAgICAgICBpbiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworIyBQQVRIIHNob3VsZCBvbmx5IGluY2x1ZGUgL3Vzci8qIGlmIGl0IHJ1bnMgYWZ0ZXIgdGhlIG1vdW50bmZzLnNoIHNjcmlwdAorUEFUSD0vc2JpbjovdXNyL3NiaW46L2JpbjovdXNyL2JpbgorCitERVNDPSJza2VsZXRvbiIKK05BTUU9InNrZWxldG9uLXRlc3QiCitEQUVNT049L3Vzci9zYmluLyROQU1FCitEQUVNT05fQVJHUz0iIgorUElERklMRT0vdmFyL3J1bi8kTkFNRS5waWQKKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMgfHwgZXhpdCAxCisKKyMgRXhpdCBpZiB0aGUgcGFja2FnZSBpcyBub3QgaW5zdGFsbGVkCitbIC14ICIkREFFTU9OIiBdIHx8IGV4aXQgMAorCisjIFJlYWQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBmaWxlIGlmIGl0IGlzIHByZXNlbnQKK1sgLXIgL2V0Yy9kZWZhdWx0LyROQU1FIF0gJiYgLiAvZXRjL2RlZmF1bHQvJE5BTUUKKworIworIyBGdW5jdGlvbiB0aGF0IHN0YXJ0cyB0aGUgZGFlbW9uL3NlcnZpY2UKKyMKK2RvX3N0YXJ0KCkgeworCWxvY2FsIHN0YXR1cyBwaWQKKworCXN0YXR1cz0wCisJcGlkPWBwaWRvZnByb2MgJE5BTUVgIHx8IHN0YXR1cz0kPworCWNhc2UgJHN0YXR1cyBpbgorCTApCisJCWVjaG8gIiRERVNDIGFscmVhZHkgcnVubmluZyAoJHBpZCkuIgorCQlleGl0IDEKKwkJOzsKKwkqKQorCQllY2hvICJTdGFydGluZyAkREVTQyAuLi4iCisJCWV4ZWMgJERBRU1PTiAkREFFTU9OX0FSR1MgPi9kZXYvbnVsbCAyPiYxIHx8IHN0YXR1cz0kPworCQllY2hvICJFUlJPUjogRmFpbGVkIHRvIHN0YXJ0ICRERVNDLiIKKwkJZXhpdCAkc3RhdHVzCisJCTs7CisJZXNhYworCisJIyBBZGQgY29kZSBoZXJlLCBpZiBuZWNlc3NhcnksIHRoYXQgd2FpdHMgZm9yIHRoZSBwcm9jZXNzIHRvIGJlIHJlYWR5CisJIyB0byBoYW5kbGUgcmVxdWVzdHMgZnJvbSBzZXJ2aWNlcyBzdGFydGVkIHN1YnNlcXVlbnRseSB3aGljaCBkZXBlbmQKKwkjIG9uIHRoaXMgb25lLiAgQXMgYSBsYXN0IHJlc29ydCwgc2xlZXAgZm9yIHNvbWUgdGltZS4KK30KKworIworIyBGdW5jdGlvbiB0aGF0IHN0b3BzIHRoZSBkYWVtb24vc2VydmljZQorIworZG9fc3RvcCgpIHsKKwlsb2NhbCBwaWQgc3RhdHVzCisKKwlzdGF0dXM9MAorCXBpZD1gcGlkb2Zwcm9jICROQU1FYCB8fCBzdGF0dXM9JD8KKwljYXNlICRzdGF0dXMgaW4KKwkwKQorCQkjIEV4aXQgd2hlbiBmYWlsIHRvIHN0b3AsIHRoZSBraWxsIHdvdWxkIGNvbXBsYWluIHdoZW4gZmFpbAorCQlraWxsIC1zIDE1ICRwaWQgPi9kZXYvbnVsbCAmJiBybSAtZiAkUElERklMRSAmJiBcCisJCQllY2hvICJTdG9wcGVkICRERVNDICgkcGlkKS4iIHx8IGV4aXQgJD8KKwkJOzsKKwkqKQorCQllY2hvICIkREVTQyBpcyBub3QgcnVubmluZzsgbm9uZSBraWxsZWQuIiA+JjIKKwkJOzsKKwllc2FjCisKKwkjIFdhaXQgZm9yIGNoaWxkcmVuIHRvIGZpbmlzaCB0b28gaWYgdGhpcyBpcyBhIGRhZW1vbiB0aGF0IGZvcmtzCisJIyBhbmQgaWYgdGhlIGRhZW1vbiBpcyBvbmx5IGV2ZXIgcnVuIGZyb20gdGhpcyBpbml0c2NyaXB0LgorCSMgSWYgdGhlIGFib3ZlIGNvbmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQgdGhlbiBhZGQgc29tZSBvdGhlciBjb2RlCisJIyB0aGF0IHdhaXRzIGZvciB0aGUgcHJvY2VzcyB0byBkcm9wIGFsbCByZXNvdXJjZXMgdGhhdCBjb3VsZCBiZQorCSMgbmVlZGVkIGJ5IHNlcnZpY2VzIHN0YXJ0ZWQgc3Vic2VxdWVudGx5LiAgQSBsYXN0IHJlc29ydCBpcyB0bworCSMgc2xlZXAgZm9yIHNvbWUgdGltZS4KKwlyZXR1cm4gJHN0YXR1cworfQorCisjCisjIEZ1bmN0aW9uIHRoYXQgc2VuZHMgYSBTSUdIVVAgdG8gdGhlIGRhZW1vbi9zZXJ2aWNlCisjCitkb19yZWxvYWQoKSB7CisJbG9jYWwgcGlkIHN0YXR1cworCisJc3RhdHVzPTAKKyAgICAgICAgIyBJZiB0aGUgZGFlbW9uIGNhbiByZWxvYWQgaXRzIGNvbmZpZ3VyYXRpb24gd2l0aG91dAorICAgICAgICAjIHJlc3RhcnRpbmcgKGZvciBleGFtcGxlLCB3aGVuIGl0IGlzIHNlbnQgYSBTSUdIVVApLAorICAgICAgICAjIHRoZW4gaW1wbGVtZW50IHRoYXQgaGVyZS4KKwlwaWQ9YHBpZG9mcHJvYyAkTkFNRWAgfHwgc3RhdHVzPSQ/CisJY2FzZSAkc3RhdHVzIGluCisJMCkKKwkJZWNobyAiUmVsb2FkaW5nICRERVNDIC4uLiIKKwkJa2lsbCAtcyAxICRwaWQgfHwgZXhpdCAkPworCQk7OworCSopCisJCWVjaG8gIiRERVNDIGlzIG5vdCBydW5uaW5nOyBub25lIHJlbG9hZGVkLiIgPiYyCisJCTs7CisJZXNhYworCWV4aXQgJHN0YXR1cworfQorCisKKyMKKyMgRnVuY3Rpb24gdGhhdCBzaG93cyB0aGUgZGFlbW9uL3NlcnZpY2Ugc3RhdHVzCisjCitzdGF0dXNfb2ZfcHJvYyAoKSB7CisJbG9jYWwgcGlkIHN0YXR1cworCisJc3RhdHVzPTAKKwkjIHBpZG9mIG91dHB1dCBudWxsIHdoZW4gbm8gcHJvZ3JhbSBpcyBydW5uaW5nLCBzbyBubyAiMj4vZGV2L251bGwiLgorCXBpZD1gcGlkb2Zwcm9jICROQU1FYCB8fCBzdGF0dXM9JD8KKwljYXNlICRzdGF0dXMgaW4KKwkwKQorCQllY2hvICIkREVTQyBpcyBydW5uaW5nICgkcGlkKS4iCisJCWV4aXQgMAorCQk7OworCSopCisJCWVjaG8gIiRERVNDIGlzIG5vdCBydW5uaW5nLiIgPiYyCisJCWV4aXQgJHN0YXR1cworCQk7OworCWVzYWMKK30KKworY2FzZSAiJDEiIGluCitzdGFydCkKKwlkb19zdGFydAorCTs7CitzdG9wKQorCWRvX3N0b3AgfHwgZXhpdCAkPworCTs7CitzdGF0dXMpCisJc3RhdHVzX29mX3Byb2MKKwk7OworcmVzdGFydCkKKwkjIEFsd2F5cyBzdGFydCB0aGUgc2VydmljZSByZWdhcmRsZXNzIHRoZSBzdGF0dXMgb2YgZG9fc3RvcAorCWRvX3N0b3AKKwlkb19zdGFydAorCTs7Cit0cnktcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJIyBmb3JjZS1yZWxvYWQgaXMgdGhlIHNhbWUgYXMgcmVsb2FkIG9yIHRyeS1yZXN0YXJ0IGFjY29yZGluZworCSMgdG8gaXRzIGRlZmluaXRpb24sIHRoZSByZWxvYWQgaXMgbm90IGltcGxlbWVudGVkIGhlcmUsIHNvCisJIyBmb3JjZS1yZWxvYWQgaXMgdGhlIGFsaWFzIG9mIHRyeS1yZXN0YXJ0IGhlcmUsIGJ1dCBpdCBzaG91bGQKKwkjIGJlIHRoZSBhbGlhcyBvZiByZWxvYWQgaWYgcmVsb2FkIGlzIGltcGxlbWVudGVkLgorCSMKKwkjIE9ubHkgc3RhcnQgdGhlIHNlcnZpY2Ugd2hlbiBkb19zdG9wIHN1Y2NlZWRzCisJZG9fc3RvcCAmJiBkb19zdGFydAorCTs7CisjcmVsb2FkKQorCSMgSWYgdGhlICJyZWxvYWQiIGFjdGlvbiBpcyBpbXBsZW1lbnRlZCBwcm9wZXJseSwgdGhlbiBsZXQgdGhlCisJIyBmb3JjZS1yZWxvYWQgYmUgdGhlIGFsaWFzIG9mIHJlbG9hZCwgYW5kIHJlbW92ZSBpdCBmcm9tCisJIyB0cnktcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJIworCSNkb19yZWxvYWQKKwkjOzsKKyopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fHRyeS1yZXN0YXJ0fGZvcmNlLXJlbG9hZH0iID4mMgorCWV4aXQgMworCTs7Citlc2FjCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3NlcnZpY2Uvc2VydmljZS9za2VsZXRvbl90ZXN0LmMgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi9zZXJ2aWNlL3NlcnZpY2Uvc2tlbGV0b25fdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YzY3YWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi9zZXJ2aWNlL3NlcnZpY2Uvc2tlbGV0b25fdGVzdC5jCkBAIC0wLDAgKzEsMTIgQEAKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyogVGhpcyBkZW1vIGRvZXMgbm90aGluZyBleGNlcHQgZm9yIHRlc3RpbmcgL2V0Yy9pbml0LmQvc2tlbGV0b24gKi8KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlkYWVtb24oMCwgMCk7CisJd2hpbGUgKDEpIHsKKwkJc2xlZXAoMSk7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vc2VydmljZS9zZXJ2aWNlXzAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3NlcnZpY2Uvc2VydmljZV8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVjZDdhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3NlcnZpY2Uvc2VydmljZV8wLjEuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJUaGUgY2Fub25pY2FsIGV4YW1wbGUgb2YgaW5pdCBzY3JpcHRzIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vQ09QWVJJR0hUO21kNT0zNDljODcyZTAwNjYxNTVlMTgxOGI3ODY5Mzg4NzZhNCIKKworU1JDX1VSSSA9ICJmaWxlOi8vc2tlbGV0b24gXAorCSAgIGZpbGU6Ly9za2VsZXRvbl90ZXN0LmMgXAorCSAgIGZpbGU6Ly9DT1BZUklHSFQgXAorCSAgICIKKworZG9fY29tcGlsZSAoKSB7CisJJHtDQ30gJHtXT1JLRElSfS9za2VsZXRvbl90ZXN0LmMgLW8gJHtXT1JLRElSfS9za2VsZXRvbi10ZXN0Cit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJY2F0ICR7V09SS0RJUn0vc2tlbGV0b24gfCBcCisJICBzZWQgLWUgJ3MsL2V0Yywke3N5c2NvbmZkaXJ9LGcnIFwKKwkgICAgICAtZSAncywvdXNyL3NiaW4sJHtzYmluZGlyfSxnJyBcCisJICAgICAgLWUgJ3MsL3Zhciwke2xvY2Fsc3RhdGVkaXJ9LGcnIFwKKwkgICAgICAtZSAncywvdXNyL2Jpbiwke2JpbmRpcn0sZycgXAorCSAgICAgIC1lICdzLC91c3IsJHtwcmVmaXh9LGcnID4gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3NrZWxldG9uCisJY2htb2QgYSt4ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9za2VsZXRvbgorCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3NrZWxldG9uLXRlc3QgJHtEfSR7c2JpbmRpcn0vCit9CisKK1JERVBFTkRTXyR7UE59ID0gImluaXRzY3JpcHRzIgorCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL3NrZWxldG9uIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUuYmIgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2MwMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUuYmIKQEAgLTAsMCArMSw3NiBAQAorU1VNTUFSWSA9ICJFeGFtcGxlIHJlY2lwZSBmb3IgdXNpbmcgaW5oZXJpdCB1c2VyYWRkIgorREVTQ1JJUFRJT04gPSAiVGhpcyByZWNpcGUgc2VydmVzIGFzIGFuIGV4YW1wbGUgZm9yIHVzaW5nIGZlYXR1cmVzIGZyb20gdXNlcmFkZC5iYmNsYXNzIgorU0VDVElPTiA9ICJleGFtcGxlcyIKK1BSID0gInIxIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vZmlsZTEgXAorICAgICAgICAgICBmaWxlOi8vZmlsZTIgXAorICAgICAgICAgICBmaWxlOi8vZmlsZTMgXAorICAgICAgICAgICBmaWxlOi8vZmlsZTQiCisKK1MgPSAiJHtXT1JLRElSfSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXVzZXIzIgorCitpbmhlcml0IHVzZXJhZGQKKworIyBZb3UgbXVzdCBzZXQgVVNFUkFERF9QQUNLQUdFUyB3aGVuIHlvdSBpbmhlcml0IHVzZXJhZGQuIFRoaXMKKyMgbGlzdHMgd2hpY2ggb3V0cHV0IHBhY2thZ2VzIHdpbGwgaW5jbHVkZSB0aGUgdXNlci9ncm91cAorIyBjcmVhdGlvbiBjb2RlLgorVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSAke1BOfS11c2VyMyIKKworIyBZb3UgbXVzdCBhbHNvIHNldCBVU0VSQUREX1BBUkFNIGFuZC9vciBHUk9VUEFERF9QQVJBTSB3aGVuCisjIHlvdSBpbmhlcml0IHVzZXJhZGQuCisKKyMgVVNFUkFERF9QQVJBTSBzcGVjaWZpZXMgY29tbWFuZCBsaW5lIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUKKyMgdXNlcmFkZCBjb21tYW5kLiBNdWx0aXBsZSB1c2VycyBjYW4gYmUgY3JlYXRlZCBieSBzZXBhcmF0aW5nCisjIHRoZSBjb21tYW5kcyB3aXRoIGEgc2VtaWNvbG9uLiBIZXJlIHdlJ2xsIGNyZWF0ZSB0d28gdXNlcnMsCisjIHVzZXIxIGFuZCB1c2VyMjoKK1VTRVJBRERfUEFSQU1fJHtQTn0gPSAiLXUgMTIwMCAtZCAvaG9tZS91c2VyMSAtciAtcyAvYmluL2Jhc2ggdXNlcjE7IC11IDEyMDEgLWQgL2hvbWUvdXNlcjIgLXIgLXMgL2Jpbi9iYXNoIHVzZXIyIgorCisjIHVzZXIzIHdpbGwgYmUgbWFuYWdlZCBpbiB0aGUgdXNlcmFkZC1leGFtcGxlLXVzZXIzIHBhY2FrZ2U6CisjIEFzIGFuIGV4YW1wbGUsIHdlIHVzZSB0aGUgLVAgb3B0aW9uIHRvIHNldCBjbGVhciB0ZXh0IHBhc3N3b3JkIGZvciB1c2VyMworVVNFUkFERF9QQVJBTV8ke1BOfS11c2VyMyA9ICItdSAxMjAyIC1kIC9ob21lL3VzZXIzIC1yIC1zIC9iaW4vYmFzaCAtUCAndXNlcjMnIHVzZXIzIgorCisjIEdST1VQQUREX1BBUkFNIHdvcmtzIHRoZSBzYW1lIHdheSwgd2hpY2ggeW91IHNldCB0byB0aGUgb3B0aW9ucworIyB5b3UnZCBub3JtYWxseSBwYXNzIHRvIHRoZSBncm91cGFkZCBjb21tYW5kLiBUaGlzIHdpbGwgY3JlYXRlCisjIGdyb3VwcyBncm91cDEgYW5kIGdyb3VwMjoKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi1nIDg4MCBncm91cDE7IC1nIDg5MCBncm91cDIiCisKKyMgTGlrZXdpc2UsIHdlJ2xsIG1hbmFnZSBncm91cDMgaW4gdGhlIHVzZXJhZGQtZXhhbXBsZS11c2VyMyBwYWNrYWdlOgorR1JPVVBBRERfUEFSQU1fJHtQTn0tdXNlcjMgPSAiLWcgOTAwIGdyb3VwMyIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAtbSA3NTUgJHtEfSR7ZGF0YWRpcn0vdXNlcjEKKwlpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHtkYXRhZGlyfS91c2VyMgorCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke2RhdGFkaXJ9L3VzZXIzCisKKwlpbnN0YWxsIC1wIC1tIDY0NCBmaWxlMSAke0R9JHtkYXRhZGlyfS91c2VyMS8KKwlpbnN0YWxsIC1wIC1tIDY0NCBmaWxlMiAke0R9JHtkYXRhZGlyfS91c2VyMS8KKworCWluc3RhbGwgLXAgLW0gNjQ0IGZpbGUyICR7RH0ke2RhdGFkaXJ9L3VzZXIyLworCWluc3RhbGwgLXAgLW0gNjQ0IGZpbGUzICR7RH0ke2RhdGFkaXJ9L3VzZXIyLworCisJaW5zdGFsbCAtcCAtbSA2NDQgZmlsZTMgJHtEfSR7ZGF0YWRpcn0vdXNlcjMvCisJaW5zdGFsbCAtcCAtbSA2NDQgZmlsZTQgJHtEfSR7ZGF0YWRpcn0vdXNlcjMvCisKKwkjIFRoZSBuZXcgdXNlcnMgYW5kIGdyb3VwcyBhcmUgY3JlYXRlZCBiZWZvcmUgdGhlIGRvX2luc3RhbGwKKwkjIHN0ZXAsIHNvIHlvdSBhcmUgbm93IGZyZWUgdG8gbWFrZSB1c2Ugb2YgdGhlbToKKwljaG93biAtUiB1c2VyMSAke0R9JHtkYXRhZGlyfS91c2VyMQorCWNob3duIC1SIHVzZXIyICR7RH0ke2RhdGFkaXJ9L3VzZXIyCisJY2hvd24gLVIgdXNlcjMgJHtEfSR7ZGF0YWRpcn0vdXNlcjMKKworCWNoZ3JwIC1SIGdyb3VwMSAke0R9JHtkYXRhZGlyfS91c2VyMQorCWNoZ3JwIC1SIGdyb3VwMiAke0R9JHtkYXRhZGlyfS91c2VyMgorCWNoZ3JwIC1SIGdyb3VwMyAke0R9JHtkYXRhZGlyfS91c2VyMworfQorCitGSUxFU18ke1BOfSA9ICIke2RhdGFkaXJ9L3VzZXIxLyogJHtkYXRhZGlyfS91c2VyMi8qIgorRklMRVNfJHtQTn0tdXNlcjMgPSAiJHtkYXRhZGlyfS91c2VyMy8qIgorCisjIFByZXZlbnRzIGRvX3BhY2thZ2UgZmFpbHVyZXMgd2l0aDoKKyMgZGVidWdzb3VyY2VzLmxpc3Q6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6CitJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQgPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlL2ZpbGUxIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUvZmlsZTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlL2ZpbGUxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS9maWxlMiBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlL2ZpbGUyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS9maWxlMgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUvZmlsZTMgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS9maWxlMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUvZmlsZTMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlL2ZpbGU0IGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUvZmlsZTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlL2ZpbGU0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbGF5ZXIuY29uZiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9sYXllci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZGJjYTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbGF5ZXIuY29uZgpAQCAtMCwwICsxLDExIEBACisjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iCisKKyMgV2UgaGF2ZSByZWNpcGVzLSogZGlyZWN0b3JpZXMsIGFkZCB0byBCQkZJTEVTCitCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiIFwKKyAgICAgICAgICAgICR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmJhcHBlbmQiCisKK0JCRklMRV9DT0xMRUNUSU9OUyArPSAieW9jdG9ic3AiCitCQkZJTEVfUEFUVEVSTl95b2N0b2JzcCA9ICJeJHtMQVlFUkRJUn0vIgorQkJGSUxFX1BSSU9SSVRZX3lvY3RvYnNwID0gIjUiCitMQVlFUlZFUlNJT05feW9jdG9ic3AgPSAiMyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2JlYWdsZWJvbmUuY29uZiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2JlYWdsZWJvbmUuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGFlYmYzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvYmVhZ2xlYm9uZS5jb25mCkBAIC0wLDAgKzEsMzkgQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBCZWFnbGVib25lIG1hY2hpbmUKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3IgaHR0cDovL2JlYWdsZWJvYXJkLm9yZy9ib25lIGFuZCBodHRwOi8vYmVhZ2xlYm9hcmQub3JnL2JsYWNrIGJvYXJkcworCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitYU0VSVkVSID89ICJ4c2VydmVyLXhvcmcgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1tb3VzZSBcCisgICAgICAgICAgIHhmODYtdmlkZW8tZmJkZXYgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWtleWJvYXJkIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID0gIiBrZXJuZWwtbW9kdWxlcyBrZXJuZWwtZGV2aWNldHJlZSIKKworRVhUUkFfSU1BR0VERVBFTkRTICs9ICJ1LWJvb3QiCisKK0RFRkFVTFRUVU5FID89ICJjb3J0ZXhhOGhmLW5lb24iCitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTguaW5jCisKK0lNQUdFX0ZTVFlQRVMgKz0gInRhci5iejIgamZmczIiCitFWFRSQV9JTUFHRUNNRF9qZmZzMiA9ICItbG5wICIKKworU0VSSUFMX0NPTlNPTEUgPSAiMTE1MjAwIHR0eU8wIgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gImxpbnV4LXlvY3RvIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPz0gIjMuMTklIgorCitLRVJORUxfSU1BR0VUWVBFID0gInpJbWFnZSIKK0tFUk5FTF9ERVZJQ0VUUkVFID0gImFtMzM1eC1ib25lLmR0YiBhbTMzNXgtYm9uZWJsYWNrLmR0YiIKK0tFUk5FTF9FWFRSQV9BUkdTICs9ICJMT0FEQUREUj0ke1VCT09UX0VOVFJZUE9JTlR9IgorCitTUExfQklOQVJZID0gIk1MTyIKK1VCT09UX1NVRkZJWCA9ICJpbWciCitVQk9PVF9NQUNISU5FID0gImFtMzM1eF9ldm1fY29uZmlnIgorVUJPT1RfRU5UUllQT0lOVCA9ICIweDgwMDA4MDAwIgorVUJPT1RfTE9BREFERFJFU1MgPSAiMHg4MDAwODAwMCIKKworTUFDSElORV9GRUFUVVJFUyA9ICJ1c2JnYWRnZXQgdXNiaG9zdCB2ZmF0IGFsc2EiCisKK0lNQUdFX0JPT1RfRklMRVMgPz0gInUtYm9vdC4ke1VCT09UX1NVRkZJWH0gTUxPIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZWRnZXJvdXRlci5jb25mIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZWRnZXJvdXRlci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZWYyMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9lZGdlcm91dGVyLmNvbmYKQEAgLTAsMCArMSwyMiBAQAorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IEVkZ2Vyb3V0ZXIKKyNAREVTQ1JJUFRJT046IEVkZ2Vyb3V0ZXIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHM2NC5pbmMKKworTUFDSElORV9GRUFUVVJFUyA9ICJwY2kgZXh0MiBleHQzIHNlcmlhbCIKKworS0VSTkVMX0lNQUdFVFlQRSA9ICJ2bWxpbnV4IgorS0VSTkVMX0FMVF9JTUFHRVRZUEUgPSAidm1saW51eC5iaW4iCitLRVJORUxfSU1BR0VfU1RSSVBfRVhUUkFfU0VDVElPTlMgID0gIi5jb21tZW50IgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gImxpbnV4LXlvY3RvIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPz0gIjMuMTklIgorCitTRVJJQUxfQ09OU09MRSA9ICIxMTUyMDAgdHR5UzAiCitVU0VfVlQgPz0gIjAiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPSAiIGtlcm5lbC1tb2R1bGVzIgorCitJTUFHRV9GU1RZUEVTID89ICJqZmZzMiB0YXIuYnoyIgorSkZGUzJfRVJBU0VCTE9DSyA9ICIweDEwMDAwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZ2VuZXJpY3g4Ni02NC5jb25mIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZ2VuZXJpY3g4Ni02NC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NmUzNWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9nZW5lcmljeDg2LTY0LmNvbmYKQEAgLTAsMCArMSw4IEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogR2VuZXJpYyBYODZfNjQuCisKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3IgZ2VuZXJpYyBYODZfNjQgKDY0LWJpdCkgUENzIGFuZCBzZXJ2ZXJzLiBTdXBwb3J0cyBhIG1vZGVyYXRlbHkgd2lkZSByYW5nZSBvZiBkcml2ZXJzIHRoYXQgc2hvdWxkIGJvb3QgYW5kIGJlIHVzYWJsZSBvbiAidHlwaWNhbCIgaGFyZHdhcmUuCisKK0RFRkFVTFRUVU5FID89ICJjb3JlMi02NCIKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvZ2VuZXJpY3g4Ni1jb21tb24uaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9nZW5lcmljeDg2LmNvbmYgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9nZW5lcmljeDg2LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY0MmNhYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2dlbmVyaWN4ODYuY29uZgpAQCAtMCwwICsxLDggQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBHZW5lcmljIFg4Ni4KKworI0BERVNDUklQVElPTjogTWFjaGluZSBjb25maWd1cmF0aW9uIGZvciBnZW5lcmljIFg4NiAoMzItYml0KSBQQ3MuIFN1cHBvcnRzIGEgbW9kZXJhdGVseSB3aWRlIHJhbmdlIG9mIGRyaXZlcnMgdGhhdCBzaG91bGQgYm9vdCBhbmQgYmUgdXNhYmxlIG9uICJ0eXBpY2FsIiBoYXJkd2FyZS4KKworREVGQVVMVFRVTkUgPz0gImNvcmUyLTMyIgorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9nZW5lcmljeDg2LWNvbW1vbi5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2luY2x1ZGUvZ2VuZXJpY3g4Ni1jb21tb24uaW5jIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvaW5jbHVkZS9nZW5lcmljeDg2LWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MxMGI1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2luY2x1ZGUvZ2VuZXJpY3g4Ni1jb21tb24uaW5jCkBAIC0wLDAgKzEsMjAgQEAKK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2LWJhc2UuaW5jCitNQUNISU5FX0ZFQVRVUkVTICs9ICJ3aWZpIGVmaSBwY2Jpb3MiCisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAibGludXgteW9jdG8iCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA/PSAiNC4xJSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1hTRVJWRVIgPz0gIiR7WFNFUlZFUl9YODZfQkFTRX0gXAorICAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9FWFR9IFwKKyAgICAgICAgICAgICR7WFNFUlZFUl9YODZfSTkxNX0gXAorICAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9JOTY1fSBcCisgICAgICAgICAgICAke1hTRVJWRVJfWDg2X0ZCREVWfSBcCisgICAgICAgICAgICAke1hTRVJWRVJfWDg2X1ZFU0F9IFwKKyAgICAgICAgICAgICR7WFNFUlZFUl9YODZfTU9ERVNFVFRJTkd9IFwKKyAgICAgICAgICAgIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTICs9ICJsaW51eC1maXJtd2FyZSB2ODZkIGVlZS1hY3BpLXNjcmlwdHMiCisKK0dMSUJDX0FERE9OUyA9ICJucHRsIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX3BuLW1hdGNoYm94LXBhbmVsLTIgPSAiIC0td2l0aC1iYXR0ZXJ5PWFjcGkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9tcGM4MzE1ZS1yZGIuY29uZiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL21wYzgzMTVlLXJkYi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZWVmNDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9tcGM4MzE1ZS1yZGIuY29uZgpAQCAtMCwwICsxLDMzIEBACisjQFRZUEU6IE1hY2hpbmUKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3IgcnVubmluZyAKKworVEFSR0VUX0ZQVSA9ICIiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlMzAwYzMuaW5jCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAidUltYWdlIgorCitFWFRSQV9JTUFHRURFUEVORFMgKz0gInUtYm9vdCIKK1VCT09UX01BQ0hJTkVfbXBjODMxNWUtcmRiID0gIk1QQzgzMTVFUkRCX2NvbmZpZyIKKworU0VSSUFMX0NPTlNPTEUgPSAiMTE1MjAwIHR0eVMwIgorCitNQUNISU5FX0ZFQVRVUkVTID0gImtleWJvYXJkIHBjaSBleHQyIGV4dDMgc2VyaWFsIgorCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA/PSAiMy4xOSUiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPSAibGludXgteW9jdG8iCisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1hTRVJWRVIgPz0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgIHhmODYtdmlkZW8tZmJkZXYiCisKK1BSRUZFUlJFRF9WRVJTSU9OX3UtYm9vdCA/PSAidjIwMTMuMDclIgorVUJPT1RfRU5UUllQT0lOVCA9ICIweDAwMDAwMDAwIgorCitLRVJORUxfREVWSUNFVFJFRSA9ICJtcGM4MzE1ZXJkYi5kdGIiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPSAiIGtlcm5lbC1tb2R1bGVzIgorCitJTUFHRV9GU1RZUEVTID89ICJqZmZzMiB0YXIuYnoyIgorSkZGUzJfRVJBU0VCTE9DSyA9ICIweDQwMDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9iZWFnbGVib25ldGFyZ2V0LnB5IGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9iZWFnbGVib25ldGFyZ2V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMWFlYjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzL2JlYWdsZWJvbmV0YXJnZXQucHkKQEAgLTAsMCArMSw5OCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IHRvIHRlc3RpbWFnZS5iYmNsYXNzIHRvIGRlcGxveSBpbWFnZXMgYW5kIHJ1bgorIyB0ZXN0cyBvbiBhIEJlYWdsZUJvbmUgKG9yaWdpbmFsICJ3aGl0ZSIgb3IgQmxhY2sgbW9kZWxzKS4gVGhlIGRldmljZSBtdXN0CisjIGJlIHNldCB1cCBhcyBwZXIgUkVBRE1FLmhhcmR3YXJlIGFuZCB0aGUgbWFzdGVyIGltYWdlIHNob3VsZCBiZSBkZXBsb3llZAorIyBvbnRvIHRoZSBjYXJkIHNvIHRoYXQgaXQgYm9vdHMgaW50byBpdCBieSBkZWZhdWx0LiBGb3IgYm9vdGluZyBpbnRvIHRoZQorIyBpbWFnZSB1bmRlciB0ZXN0IHdlIGludGVyYWN0IHdpdGggdS1ib290IG92ZXIgc2VyaWFsLCBzbyBmb3IgdGhlCisjIEJlYWdsZUJvbmUgQmxhY2sgeW91IHdpbGwgbmVlZCBhbiBhZGRpdGlvbmFsIFRUTCBzZXJpYWwgY2FibGUgc2luY2UgYQorIyBzZXJpYWwgaW50ZXJmYWNlIGlzbid0IGF1dG9tYXRpY2FsbHkgcHJvdmlkZWQgb3ZlciB0aGUgVVNCIGNvbm5lY3Rpb24gYXMKKyMgaXQgaXMgb24gdGhlIG9yaWdpbmFsIEJlYWdsZUJvbmUgKCJ3aGl0ZSIpIHZlcnNpb24uIFRoZSBzZXBhcmF0ZSBleHQzCisjIHBhcnRpdGlvbiB0aGF0IHdpbGwgY29udGFpbiB0aGUgaW1hZ2UgdG8gYmUgdGVzdGVkIG11c3QgYmUgbGFiZWxsZWQKKyMgInRlc3Ryb290ZnMiIHNvIHRoYXQgdGhlIGRlcGxveW1lbnQgY29kZSBiZWxvdyBjYW4gZmluZCBpdC4KKyMKKyMgTk9URTogZm9yIHRoZSBCZWFnbGVCb25lICJ3aGl0ZSIgKG9yaWdpbmFsIHZlcnNpb24pIHlvdSBtYXkgbmVlZCB0byB1c2UKKyMgYSBzY3JpcHQgd2hpY2ggaGFuZGxlcyB0aGUgc2VyaWFsIGRldmljZSBkaXNhcHBlYXJpbmcgb24gcG93ZXIgZG93biwgc3VjaAorIyBhcyBzY3JpcHRzL2NvbnRyaWIvc2VyZGV2dHJ5IGluIE9FLUNvcmUuCisKK2ltcG9ydCBvcworaW1wb3J0IGJiCitpbXBvcnQgdGltZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBwZXhwZWN0CisKK2ltcG9ydCBvZXFhLnV0aWxzLnNzaGNvbnRyb2wgYXMgc3NoY29udHJvbAorZnJvbSBvZXFhLmNvbnRyb2xsZXJzLm1hc3RlcmltYWdlIGltcG9ydCBNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0CisKKworY2xhc3MgQmVhZ2xlQm9uZVRhcmdldChNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0KToKKworICAgIGR0YnMgPSB7J3VJbWFnZS1hbTMzNXgtYm9uZS5kdGInOiAnYW0zMzV4LWJvbmUuZHRiJywgJ3VJbWFnZS1hbTMzNXgtYm9uZWJsYWNrLmR0Yic6ICdhbTMzNXgtYm9uZWJsYWNrLmR0Yid9CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZ2V0X2V4dHJhX2ZpbGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gbGlzdChzZWxmLmR0YnMua2V5cygpKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzdXBlcihCZWFnbGVCb25lVGFyZ2V0LCBzZWxmKS5fX2luaXRfXyhkKQorCisgICAgICAgIHNlbGYuaW1hZ2VfZnN0eXBlID0gc2VsZi5nZXRfaW1hZ2VfZnN0eXBlKGQpCisgICAgICAgIHNlbGYuZGVwbG95X2NtZHMgPSBbCisgICAgICAgICAgICAgICAgJ21rZGlyIC1wIC9tbnQvdGVzdHJvb3RmcycsCisgICAgICAgICAgICAgICAgJ21vdW50IC1MIHRlc3Ryb290ZnMgL21udC90ZXN0cm9vdGZzJywKKyAgICAgICAgICAgICAgICAncm0gLXJmIC9tbnQvdGVzdHJvb3Rmcy8qJywKKyAgICAgICAgICAgICAgICAndGFyIHh2ZiB+L3Rlc3Qtcm9vdGZzLiVzIC1DIC9tbnQvdGVzdHJvb3RmcycgJSBzZWxmLmltYWdlX2ZzdHlwZSwKKyAgICAgICAgICAgICAgICAnWyAtZSAvbW50L3Rlc3Ryb290ZnMvYm9vdC91SW1hZ2UgXSB8fCBbIC1MIC9tbnQvdGVzdHJvb3Rmcy9ib290L3VJbWFnZSBdIHx8IGNwIH4vdGVzdC1rZXJuZWwgL21udC90ZXN0cm9vdGZzL2Jvb3QvdUltYWdlJywKKyAgICAgICAgICAgICAgICBdCisKKyAgICAgICAgZm9yIF8sIGR0YmZuIGluIHNlbGYuZHRicy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICMgS2VybmVsIGFuZCBkdGIgZmlsZXMgbWF5IG5vdCBiZSBpbiB0aGUgaW1hZ2UsIHNvIGNvcHkgdGhlbSBpZiBub3QKKyAgICAgICAgICAgIHNlbGYuZGVwbG95X2NtZHMuYXBwZW5kKCdbIC1lIC9tbnQvdGVzdHJvb3Rmcy9ib290L3swfSBdIHx8IGNwIH4vezB9IC9tbnQvdGVzdHJvb3Rmcy9ib290LycuZm9ybWF0KGR0YmZuKSkKKworICAgICAgICBpZiBub3Qgc2VsZi5zZXJpYWxjb250cm9sX2NtZDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJUaGlzIFRFU1RfVEFSR0VUIG5lZWRzIGEgVEVTVF9TRVJJQUxDT05UUk9MX0NNRCBkZWZpbmVkIGluIGxvY2FsLmNvbmYuIikKKworCisgICAgZGVmIF9kZXBsb3koc2VsZik6CisgICAgICAgIHNlbGYubWFzdGVyLnJ1bigidW1vdW50IC9ib290OyB1bW91bnQgL21udC90ZXN0cm9vdGZzOyIpCisgICAgICAgIHNlbGYubWFzdGVyLmlnbm9yZV9zdGF0dXMgPSBGYWxzZQorICAgICAgICAjIEtlcm5lbCBhbmQgZHRiIGZpbGVzIG1heSBub3QgYmUgaW4gdGhlIGltYWdlLCBzbyBjb3B5IHRoZW0ganVzdCBpbiBjYXNlCisgICAgICAgIHNlbGYubWFzdGVyLmNvcHlfdG8oc2VsZi5rZXJuZWwsICJ+L3Rlc3Qta2VybmVsIikKKyAgICAgICAga2VybmVscGF0aCA9IG9zLnBhdGguZGlybmFtZShzZWxmLmtlcm5lbCkKKyAgICAgICAgZm9yIGR0Ym9yaWcsIGR0YmZuIGluIHNlbGYuZHRicy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGR0YmZpbGUgPSBvcy5wYXRoLmpvaW4oa2VybmVscGF0aCwgZHRib3JpZykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGR0YmZpbGUpOgorICAgICAgICAgICAgICAgIHNlbGYubWFzdGVyLmNvcHlfdG8oZHRiZmlsZSwgIn4vJXMiICUgZHRiZm4pCisgICAgICAgIHNlbGYubWFzdGVyLmNvcHlfdG8oc2VsZi5yb290ZnMsICJ+L3Rlc3Qtcm9vdGZzLiVzIiAlIHNlbGYuaW1hZ2VfZnN0eXBlKQorICAgICAgICBmb3IgY21kIGluIHNlbGYuZGVwbG95X2NtZHM6CisgICAgICAgICAgICBzZWxmLm1hc3Rlci5ydW4oY21kKQorCisgICAgZGVmIF9zdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIHNlbGYucG93ZXJfY3ljbGUoc2VsZi5tYXN0ZXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlcmlhbGNvbm4gPSBwZXhwZWN0LnNwYXduKHNlbGYuc2VyaWFsY29udHJvbF9jbWQsIGVudj1zZWxmLm9yaWdlbnYsIGxvZ2ZpbGU9c3lzLnN0ZG91dCkKKyAgICAgICAgICAgICMgV2UnZCB3YWl0IGZvciAiVS1Cb290IiBoZXJlIGJ1dCBzb21ldGltZXMgd2UgY29ubmVjdCB0b28gbGF0ZSBvbiBCZWFnbGVCb25lIHdoaXRlIHRvIHNlZSBpdAorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoIk5BTkQ6IikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJNTUM6IikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uc2VuZGxpbmUoImEiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoIlUtQm9vdCMiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5zZW5kbGluZSgic2V0ZW52IGJvb3RwYXJ0IDA6MyIpCisgICAgICAgICAgICBzZXJpYWxjb25uLmV4cGVjdCgiVS1Cb290IyIpCisgICAgICAgICAgICBzZXJpYWxjb25uLnNlbmRsaW5lKCJzZXRlbnYgbW1jcm9vdCAvZGV2L21tY2JsazBwMyBybyIpCisgICAgICAgICAgICBzZXJpYWxjb25uLmV4cGVjdCgiVS1Cb290IyIpCisgICAgICAgICAgICBzZXJpYWxjb25uLnNlbmRsaW5lKCJib290IikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJsb2dpbjoiLCB0aW1lb3V0PTEyMCkKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uY2xvc2UoKQorICAgICAgICBleGNlcHQgcGV4cGVjdC5FeGNlcHRpb25QZXhwZWN0IGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgnU2VyaWFsIGludGVyYWN0aW9uIGZhaWxlZDogJXMnICUgc3RyKGUpKQorCisgICAgZGVmIF93YWl0X3VudGlsX2Jvb3RlZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VyaWFsY29ubiA9IHBleHBlY3Quc3Bhd24oc2VsZi5zZXJpYWxjb250cm9sX2NtZCwgZW52PXNlbGYub3JpZ2VudiwgbG9nZmlsZT1zeXMuc3Rkb3V0KQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoImxvZ2luOiIsIHRpbWVvdXQ9MTIwKQorICAgICAgICAgICAgc2VyaWFsY29ubi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBwZXhwZWN0LkV4Y2VwdGlvblBleHBlY3QgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCdTZXJpYWwgaW50ZXJhY3Rpb24gZmFpbGVkOiAlcycgJSBzdHIoZSkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzL2VkZ2Vyb3V0ZXJ0YXJnZXQucHkgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzL2VkZ2Vyb3V0ZXJ0YXJnZXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMzMzhjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvY29udHJvbGxlcnMvZWRnZXJvdXRlcnRhcmdldC5weQpAQCAtMCwwICsxLDkwIEBACisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgdG8gdGVzdGltYWdlLmJiY2xhc3MgdG8gZGVwbG95IGltYWdlcyBhbmQgcnVuCisjIHRlc3RzIG9uIGEgVWJpcXVpdGkgTmV0d29ya3MgRWRnZVJvdXRlciBMaXRlLiBUaGUgZGV2aWNlIG11c3QgYmUgc2V0IHVwCisjIHRvIGJvb3QgaW50byB0aGUgbWFzdGVyIGltYWdlIGFscmVhZHkgLSB0aGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhhdCBpcyBhcworIyBmb2xsb3dzOgorIworIyAxLiBUYWtlIG91dCB0aGUgaW50ZXJuYWwgVVNCIGRyaXZlIGFuZCBwbHVnIGl0IGludG8geW91ciBQQworIyAyLiBSZXBhcnRpdGlvbiB0aGUgVVNCIGRyaXZlIHNvIHRoYXQgeW91IGhhdmUgdGhyZWUgcGFydGl0aW9ucyBpbiB0aGlzCisjICAgIG9yZGVyOgorIyAgICAgIDE6IHZmYXQsIGxhYmVsbGVkICJib290IiAoaXQgd2lsbCBuZWVkIHRvIGJlIGZvcm1hdHRlZCB3aXRoIG1rZnMudmZhdAorIyAgICAgICAgIGZvciB0aGlzIHRvIGJlIHBvc3NpYmxlLCBzaW5jZSBGQVQgcGFydGl0aW9ucyBmb3JtYXR0ZWQgdW5kZXIKKyMgICAgICAgICBET1MvV2luZG93cyB3aWxsIG9ubHkgc3VwcG9ydCB1cHBlcmNhc2UgbGFiZWxzKQorIyAgICAgIDI6IGV4dDMgKGZvciBtYXN0ZXIgaW1hZ2UpIGxhYmVsbGVkICJ0ZXN0bWFzdGVyIgorIyAgICAgIDM6IGV4dDMgKGZvciBpbWFnZSB1bmRlciB0ZXN0KSBsYWJlbGxlZCAidGVzdHJvb3RmcyIKKyMgMy4gQ29weSB0aGUga2VybmVsIHRvIGJlIHVzZWQgYnkgdGhlIG1hc3RlciBpbWFnZSB0byB0aGUgRkFUIHBhcnRpdGlvbgorIyAgICAoaXQgc2hvdWxkIGJlIG5hbWVkICJ2bWxpbnV4LjY0IiB3aXRoIHRoZSBmYWN0b3J5IHUtYm9vdCBjb25maWd1cmF0aW9uKQorIyA0LiBJbnN0YWxsIHRoZSBtYXN0ZXIgaW1hZ2Ugb250byB0aGUgInRlc3RtYXN0ZXIiIGV4dDMgcGFydGl0aW9uLiBJZgorIyAgICB5b3UgZG8gdGhpcyBieSBqdXN0IGV4dHJhY3RpbmcgdGhlIGNvbnRlbnRzIG9mIGFuIGltYWdlIG9udG8gdGhlCisjICAgIHBhcnRpdGlvbiwgeW91IHdpbGwgYWxzbyBsaWtlbHkgbmVlZCB0byBjcmVhdGUgdGhlIG1hc3RlciBpbWFnZSBtYXJrZXIKKyMgICAgZmlsZSAvZXRjL21hc3RlcmltYWdlIHdpdGhpbiB0aGlzIHBhcnRpdGlvbiBzbyB0aGF0IHdlIGNhbiB0ZWxsIHdoZW4KKyMgICAgd2UncmUgYm9vdGVkIGludG8gaXQgdGhhdCBpdCBpcyB0aGUgbWFzdGVyIGltYWdlLgorIyA1LiBQdXQgdGhlIFVTQiBkcml2ZSBiYWNrIGludG8gdGhlIGRldmljZSwgYW5kIGVuc3VyZSB0aGUgY29uc29sZSBwb3J0CisjICAgIGFuZCBmaXJzdCBldGhlcm5ldCBwb3J0IGFyZSBjb25uZWN0ZWQgYmVmb3JlIHBvd2VyaW5nIG9uCisjCisjIFRFU1RfU0VSSUFMQ09OVFJPTF9DTUQgd2lsbCBuZWVkIHRvIGJlIHNldCBpbiBsb2NhbC5jb25mIHNvIHRoYXQgd2UgY2FuCisjIGludGVyYWN0IHdpdGggdS1ib290IG92ZXIgdGhlIHNlcmlhbCBjb25zb2xlIHBvcnQuCisKK2ltcG9ydCBvcworaW1wb3J0IGJiCitpbXBvcnQgdGltZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBwZXhwZWN0CisKK2ltcG9ydCBvZXFhLnV0aWxzLnNzaGNvbnRyb2wgYXMgc3NoY29udHJvbAorZnJvbSBvZXFhLmNvbnRyb2xsZXJzLm1hc3RlcmltYWdlIGltcG9ydCBNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0CisKKworY2xhc3MgRWRnZVJvdXRlclRhcmdldChNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc3VwZXIoRWRnZVJvdXRlclRhcmdldCwgc2VsZikuX19pbml0X18oZCkKKworCXNlbGYuaW1hZ2VfZnN0eXBlID0gc2VsZi5nZXRfaW1hZ2VfZnN0eXBlKGQpCisgICAgICAgIHNlbGYuZGVwbG95X2NtZHMgPSBbCisgICAgICAgICAgICAgICAgJ21vdW50IC1MIGJvb3QgL2Jvb3QnLAorICAgICAgICAgICAgICAgICdta2RpciAtcCAvbW50L3Rlc3Ryb290ZnMnLAorICAgICAgICAgICAgICAgICdtb3VudCAtTCB0ZXN0cm9vdGZzIC9tbnQvdGVzdHJvb3RmcycsCisgICAgICAgICAgICAgICAgJ2NwIH4vdGVzdC1rZXJuZWwgL2Jvb3QnLAorICAgICAgICAgICAgICAgICdybSAtcmYgL21udC90ZXN0cm9vdGZzLyonLAorICAgICAgICAgICAgICAgICd0YXIgeHZmIH4vdGVzdC1yb290ZnMuJXMgLUMgL21udC90ZXN0cm9vdGZzJyAlIHNlbGYuaW1hZ2VfZnN0eXBlCisgICAgICAgICAgICAgICAgXQorICAgICAgICBpZiBub3Qgc2VsZi5zZXJpYWxjb250cm9sX2NtZDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJUaGlzIFRFU1RfVEFSR0VUIG5lZWRzIGEgVEVTVF9TRVJJQUxDT05UUk9MX0NNRCBkZWZpbmVkIGluIGxvY2FsLmNvbmYuIikKKworCisgICAgZGVmIF9kZXBsb3koc2VsZik6CisgICAgICAgIHNlbGYubWFzdGVyLnJ1bigidW1vdW50IC9tbnQvdGVzdHJvb3RmczsiKQorICAgICAgICBzZWxmLm1hc3Rlci5pZ25vcmVfc3RhdHVzID0gRmFsc2UKKyAgICAgICAgc2VsZi5tYXN0ZXIuY29weV90byhzZWxmLmtlcm5lbCwgIn4vdGVzdC1rZXJuZWwiKQorICAgICAgICBzZWxmLm1hc3Rlci5jb3B5X3RvKHNlbGYucm9vdGZzLCAifi90ZXN0LXJvb3Rmcy4lcyIgJSBzZWxmLmltYWdlX2ZzdHlwZSkKKyAgICAgICAgZm9yIGNtZCBpbiBzZWxmLmRlcGxveV9jbWRzOgorICAgICAgICAgICAgc2VsZi5tYXN0ZXIucnVuKGNtZCkKKworICAgIGRlZiBfc3RhcnQoc2VsZiwgcGFyYW1zPU5vbmUpOgorICAgICAgICBzZWxmLnBvd2VyX2N5Y2xlKHNlbGYubWFzdGVyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXJpYWxjb25uID0gcGV4cGVjdC5zcGF3bihzZWxmLnNlcmlhbGNvbnRyb2xfY21kLCBlbnY9c2VsZi5vcmlnZW52LCBsb2dmaWxlPXN5cy5zdGRvdXQpCisgICAgICAgICAgICBzZXJpYWxjb25uLmV4cGVjdCgiVS1Cb290IikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uc2VuZGxpbmUoImEiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoIk9jdGVvbiB1Ym50X2UxMDAjIikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uc2VuZGxpbmUoImZhdGxvYWQgdXNiIDA6MSAkbG9hZGFkZHIgdGVzdC1rZXJuZWwiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoIiBieXRlcyByZWFkIikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJPY3Rlb24gdWJudF9lMTAwIyIpCisgICAgICAgICAgICBzZXJpYWxjb25uLnNlbmRsaW5lKCJib290b2N0bGludXggJGxvYWRhZGRyIGNvcmVtYXNrPTB4MyByb290PS9kZXYvc2RhMyBydyByb290d2FpdCBtdGRwYXJ0cz1waHlzX21hcHBlZF9mbGFzaDo1MTJrKGJvb3QwKSw1MTJrKGJvb3QxKSw2NGtAMzA3MmsoZWVwcm9tKSIpCisgICAgICAgICAgICBzZXJpYWxjb25uLmV4cGVjdCgibG9naW46IiwgdGltZW91dD0xMjApCisgICAgICAgICAgICBzZXJpYWxjb25uLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IHBleHBlY3QuRXhjZXB0aW9uUGV4cGVjdCBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoJ1NlcmlhbCBpbnRlcmFjdGlvbiBmYWlsZWQ6ICVzJyAlIHN0cihlKSkKKworICAgIGRlZiBfd2FpdF91bnRpbF9ib290ZWQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlcmlhbGNvbm4gPSBwZXhwZWN0LnNwYXduKHNlbGYuc2VyaWFsY29udHJvbF9jbWQsIGVudj1zZWxmLm9yaWdlbnYsIGxvZ2ZpbGU9c3lzLnN0ZG91dCkKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJsb2dpbjoiLCB0aW1lb3V0PTEyMCkKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uY2xvc2UoKQorICAgICAgICBleGNlcHQgcGV4cGVjdC5FeGNlcHRpb25QZXhwZWN0IGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgnU2VyaWFsIGludGVyYWN0aW9uIGZhaWxlZDogJXMnICUgc3RyKGUpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9ncnVidGFyZ2V0LnB5IGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9ncnVidGFyZ2V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYzgwN2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzL2dydWJ0YXJnZXQucHkKQEAgLTAsMCArMSw3MSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IHRvIHRlc3RpbWFnZS5iYmNsYXNzIHRvIGRlcGxveSBpbWFnZXMgYW5kIHJ1bgorIyB0ZXN0cyBvbiBhIEdlbmVyaWMgUEMgdGhhdCBib290cyB1c2luZyBncnViIGJvb3Rsb2FkZXIuIFRoZSBkZXZpY2UgbXVzdAorIyBiZSBzZXQgdXAgYXMgcGVyIFJFQURNRS5oYXJkd2FyZSBhbmQgdGhlIG1hc3RlciBpbWFnZSBzaG91bGQgYmUgZGVwbG95ZWQKKyMgb250byB0aGUgaGFyZGRpc2sgc28gdGhhdCBpdCBib290cyBpbnRvIGl0IGJ5IGRlZmF1bHQuRm9yIGJvb3RpbmcgaW50byB0aGUKKyMgaW1hZ2UgdW5kZXIgdGVzdCB3ZSBpbnRlcmFjdCB3aXRoIGdydWIgb3ZlciBzZXJpYWwsIHNvIGZvciB0aGUKKyMgR2VuZXJpYyBQQyB5b3Ugd2lsbCBuZWVkIGFuIGFkZGl0aW9uYWwgc2VyaWFsIGNhYmxlIGFuZCBkZXZpY2UgdW5kZXIgdGVzdAorIyBuZWVkcyB0byBoYXZlIGEgc2VyaWFsIGludGVyZmFjZS4gVGhlIHNlcGFyYXRlIGV4dDMKKyMgcGFydGl0aW9uIHRoYXQgd2lsbCBjb250YWluIHRoZSBpbWFnZSB0byBiZSB0ZXN0ZWQgbXVzdCBiZSBsYWJlbGxlZAorIyAidGVzdHJvb3RmcyIgc28gdGhhdCB0aGUgZGVwbG95bWVudCBjb2RlIGJlbG93IGNhbiBmaW5kIGl0LgorCitpbXBvcnQgb3MKK2ltcG9ydCBiYgoraW1wb3J0IHRpbWUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgcGV4cGVjdAorCitpbXBvcnQgb2VxYS51dGlscy5zc2hjb250cm9sIGFzIHNzaGNvbnRyb2wKK2Zyb20gb2VxYS5jb250cm9sbGVycy5tYXN0ZXJpbWFnZSBpbXBvcnQgTWFzdGVySW1hZ2VIYXJkd2FyZVRhcmdldAorCitjbGFzcyBHcnViVGFyZ2V0KE1hc3RlckltYWdlSGFyZHdhcmVUYXJnZXQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzdXBlcihHcnViVGFyZ2V0LCBzZWxmKS5fX2luaXRfXyhkKQorICAgICAgICBzZWxmLmRlcGxveV9jbWRzID0gWworICAgICAgICAgICAgICAgICdtb3VudCAtTCBib290IC9ib290JywKKyAgICAgICAgICAgICAgICAnbWtkaXIgLXAgL21udC90ZXN0cm9vdGZzJywKKyAgICAgICAgICAgICAgICAnbW91bnQgLUwgdGVzdHJvb3RmcyAvbW50L3Rlc3Ryb290ZnMnLAorICAgICAgICAgICAgICAgICdjcCB+L3Rlc3Qta2VybmVsIC9ib290JywKKyAgICAgICAgICAgICAgICAncm0gLXJmIC9tbnQvdGVzdHJvb3Rmcy8qJywKKyAgICAgICAgICAgICAgICAndGFyIHh2ZiB+L3Rlc3Qtcm9vdGZzLiVzIC1DIC9tbnQvdGVzdHJvb3RmcycgJSBzZWxmLmltYWdlX2ZzdHlwZSwKKyAgICAgICAgICAgICAgICBdCisKKyAgICAgICAgaWYgbm90IHNlbGYuc2VyaWFsY29udHJvbF9jbWQ6CisgICAgICAgICAgICBiYi5mYXRhbCgiVGhpcyBURVNUX1RBUkdFVCBuZWVkcyBhIFRFU1RfU0VSSUFMQ09OVFJPTF9DTUQgZGVmaW5lZCBpbiBsb2NhbC5jb25mLiIpCisKKworICAgIGRlZiBfZGVwbG95KHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSB0aGVzZSBhcmVuJ3QgbW91bnRlZAorICAgICAgICBzZWxmLm1hc3Rlci5ydW4oInVtb3VudCAvYm9vdDsgdW1vdW50IC9tbnQvdGVzdHJvb3RmczsiKQorICAgICAgICBzZWxmLm1hc3Rlci5pZ25vcmVfc3RhdHVzID0gRmFsc2UKKyAgICAgICAgIyBLZXJuZWwgZmlsZXMgbWF5IG5vdCBiZSBpbiB0aGUgaW1hZ2UsIHNvIGNvcHkgdGhlbSBqdXN0IGluIGNhc2UKKyAgICAgICAgc2VsZi5tYXN0ZXIuY29weV90byhzZWxmLnJvb3RmcywgIn4vdGVzdC1yb290ZnMuIiArIHNlbGYuaW1hZ2VfZnN0eXBlKQorICAgICAgICBzZWxmLm1hc3Rlci5jb3B5X3RvKHNlbGYua2VybmVsLCAifi90ZXN0LWtlcm5lbCIpCisgICAgICAgIGZvciBjbWQgaW4gc2VsZi5kZXBsb3lfY21kczoKKyAgICAgICAgICAgIHNlbGYubWFzdGVyLnJ1bihjbWQpCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgc2VsZi5wb3dlcl9jeWNsZShzZWxmLm1hc3RlcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VyaWFsY29ubiA9IHBleHBlY3Quc3Bhd24oc2VsZi5zZXJpYWxjb250cm9sX2NtZCwgZW52PXNlbGYub3JpZ2VudiwgbG9nZmlsZT1zeXMuc3Rkb3V0KQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoIkdOVSBHUlVCICB2ZXJzaW9uIDIuMDAiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoIkxpbnV4IikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uc2VuZGxpbmUoIngiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoImxvZ2luOiIsIHRpbWVvdXQ9MTIwKQorICAgICAgICAgICAgc2VyaWFsY29ubi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBwZXhwZWN0LkV4Y2VwdGlvblBleHBlY3QgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCdTZXJpYWwgaW50ZXJhY3Rpb24gZmFpbGVkOiAlcycgJSBzdHIoZSkpCisKKyAgICBkZWYgX3dhaXRfdW50aWxfYm9vdGVkKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXJpYWxjb25uID0gcGV4cGVjdC5zcGF3bihzZWxmLnNlcmlhbGNvbnRyb2xfY21kLCBlbnY9c2VsZi5vcmlnZW52LCBsb2dmaWxlPXN5cy5zdGRvdXQpCisgICAgICAgICAgICBzZXJpYWxjb25uLmV4cGVjdCgibG9naW46IiwgdGltZW91dD0xMjApCisgICAgICAgICAgICBzZXJpYWxjb25uLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IHBleHBlY3QuRXhjZXB0aW9uUGV4cGVjdCBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoJ1NlcmlhbCBpbnRlcmFjdGlvbiBmYWlsZWQ6ICVzJyAlIHN0cihlKSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9zZWxmdGVzdC9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvc2VsZnRlc3QvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvc2VsZnRlc3QvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvc2VsZnRlc3QvZ3VtbWlib290LnB5IGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9zZWxmdGVzdC9ndW1taWJvb3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBhYTM2ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvc2VsZnRlc3QvZ3VtbWlib290LnB5CkBAIC0wLDAgKzEsODMgQEAKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgcnVucWVtdQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCitpbXBvcnQgcmUKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKKworCitjbGFzcyBHdW1taWJvb3Qob2VTZWxmVGVzdCk6CisKKyAgICBkZWYgX2NvbW1vbl9zZXR1cChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbW1vbiBzZXR1cCBmb3IgdGVzdCBjYXNlczogMTEwMSwgMTEwMworICAgICAgICAiIiIKKworICAgICAgICAjIFNldCBFRklfUFJPVklERVIgPSAiZ3VtbWlib290IiBhbmQgTUFDSElORSA9ICJnZW5lcmljeDg2LTY0IiBpbiBjb25mL2xvY2FsLmNvbmYKKyAgICAgICAgZmVhdHVyZXMgPSAnRUZJX1BST1ZJREVSID0gImd1bW1pYm9vdCJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ01BQ0hJTkUgPSAiZ2VuZXJpY3g4Ni02NCInCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhmZWF0dXJlcykKKworICAgIGRlZiBfY29tbW9uX2J1aWxkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29tbW9uIGJ1aWxkIGZvciB0ZXN0IGNhc2VzOiAxMTAxLCAxMTAzCisgICAgICAgICIiIgorCisgICAgICAgICMgQnVpbGQgYSBnZW5lcmljeDg2LTY0L2VmaSBndW1taWJvb3QgaW1hZ2UKKyAgICAgICAgYml0YmFrZSgnc3lzbGludXggc3lzbGludXgtbmF0aXZlIHBhcnRlZC1uYXRpdmUgZG9zZnN0b29scy1uYXRpdmUgbXRvb2xzLW5hdGl2ZSBjb3JlLWltYWdlLW1pbmltYWwnKQorCisKKyAgICBAdGVzdGNhc2UoMTEwMSkKKyAgICBkZWYgdGVzdF9lZmlfZ3VtbWlib290X2ltYWdlc19jYW5fYmVfYnVpbHQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgaWYgZWZpL2d1bW1pYm9vdCBpbWFnZXMgY2FuIGJlIGJ1aWx0CisgICAgICAgIEV4cGVjdGVkOiAgICAxLiBGaWxlIGd1bW1pYm9vdHg2NC5lZmkgc2hvdWxkIGJlIGF2YWlsYWJsZSBpbiBidWlsZC90bXAvZGVwbG95L2ltYWdlcy9nZW5lcmljeDg2LTY0CisgICAgICAgICAgICAgICAgICAgICAyLiBFZmkvZ3VtbWlib290IGltYWdlcyBjYW4gYmUgYnVpbHQKKyAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgIElvbnV0IENoaXNhbm92aWNpIDxpb251dHguY2hpc2Fub3ZpY2lAaW50ZWwuY29tPgorICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICAjIFdlJ2QgdXNlIERFUExPWV9ESVJfSU1BR0UgaGVyZSwgZXhjZXB0IHRoYXQgd2UgbmVlZCBpdHMgdmFsdWUgZm9yCisgICAgICAgICMgTUFDSElORT0iZ2VuZXJpY3g4Ni02NCB3aGljaCBpcyBwcm9iYWJseSBub3QgdGhlIG9uZSBjb25maWd1cmVkCisgICAgICAgIGd1bW1pYm9vdGZpbGUgPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignREVQTE9ZX0RJUicpLCAnaW1hZ2VzJywgJ2dlbmVyaWN4ODYtNjQnLCAnZ3VtbWlib290eDY0LmVmaScpCisKKyAgICAgICAgc2VsZi5fY29tbW9uX3NldHVwKCkKKworICAgICAgICAjIEVuc3VyZSB3ZSdyZSBhY3R1YWxseSB0ZXN0aW5nIHRoYXQgdGhpcyBnZXRzIGJ1aWx0IGFuZCBub3QgdGhhdAorICAgICAgICAjIGl0IHdhcyBhcm91bmQgZnJvbSBhbiBlYXJsaWVyIGJ1aWxkCisgICAgICAgIGJpdGJha2UoJy1jIGNsZWFuc3N0YXRlIGd1bW1pYm9vdCcpCisgICAgICAgIHJ1bkNtZCgncm0gLWYgJXMnICUgZ3VtbWlib290ZmlsZSkKKworICAgICAgICBzZWxmLl9jb21tb25fYnVpbGQoKQorCisgICAgICAgIGZvdW5kID0gb3MucGF0aC5pc2ZpbGUoZ3VtbWlib290ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kLCAnR3VtbWlib290IGZpbGUgJXMgbm90IGZvdW5kJyAlIGd1bW1pYm9vdGZpbGUpCisKKyAgICBAdGVzdGNhc2UoMTEwMykKKyAgICBkZWYgdGVzdF93aWNfY29tbWFuZF9jYW5fY3JlYXRlX2VmaV9ndW1taWJvb3RfaW5zdGFsbGF0aW9uX2ltYWdlcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6ICAgICBDaGVjayB0aGF0IHdpYyBjb21tYW5kIGNhbiBjcmVhdGUgZWZpL2d1bW1pYm9vdCBpbnN0YWxsYXRpb24gaW1hZ2VzCisgICAgICAgIEV4cGVjdGVkOiAgICBBIC5kaXJlY3QgZmlsZSBpbiBmb2xkZXIgL3Zhci90bXAvd2ljLyBtdXN0IGJlIGNyZWF0ZWQuCisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBJb251dCBDaGlzYW5vdmljaSA8aW9udXR4LmNoaXNhbm92aWNpQGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fY29tbW9uX3NldHVwKCkKKyAgICAgICAgc2VsZi5fY29tbW9uX2J1aWxkKCkKKworICAgICAgICAjIENyZWF0ZSBlZmkvZ3VtbWlib290IGluc3RhbGxhdGlvbiBpbWFnZXMKKyAgICAgICAgd2ljX2NyZWF0ZV9jbWQgPSAnd2ljIGNyZWF0ZSBta2d1bW1pZGlzayAtZSBjb3JlLWltYWdlLW1pbmltYWwnCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCh3aWNfY3JlYXRlX2NtZCkKKworICAgICAgICAjIEZpbmQgZmlsZSB3cml0dGVuIGJ5IHdpYyBmcm9tIG91dHB1dAorICAgICAgICByZXMgPSByZS5zZWFyY2goJygvdmFyL3RtcC93aWMvLipcLmRpcmVjdCknLCByZXN1bHQub3V0cHV0KQorICAgICAgICBpZiByZXM6CisgICAgICAgICAgICBkaXJlY3RfZmlsZSA9IHJlcy5ncm91cCgxKQorICAgICAgICAgICAgIyBDaGVjayBpdCBhY3R1YWxseSBleGlzdHMKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXJlY3RfZmlsZSk6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCd3aWMgcmVwb3J0ZWQgZGlyZWN0IGZpbGUgIiVzIiBkb2VzIG5vdCBleGlzdDsgd2ljIG91dHB1dDpcbiVzJyAlIChkaXJlY3RfZmlsZSwgcmVzdWx0Lm91dHB1dCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ05vIC5kaXJlY3QgZmlsZSByZXBvcnRlZCBpbiB3aWMgb3V0cHV0OlxuJXMnICUgcmVzdWx0Lm91dHB1dCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkOTkxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLmJiYXBwZW5kCkBAIC0wLDAgKzEgQEAKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2JlYWdsZWJvYXJkL2Fzb3VuZC5zdGF0ZSBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2JlYWdsZWJvYXJkL2Fzb3VuZC5zdGF0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTI0NDkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYmVhZ2xlYm9hcmQvYXNvdW5kLnN0YXRlCkBAIC0wLDAgKzEsNjU2IEBACitzdGF0ZS5vbWFwM2JlYWdsZSB7CisJY29udHJvbC4xIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBFTlVNRVJBVEVECisJCWNvbW1lbnQuY291bnQgMQorCQljb21tZW50Lml0ZW0uMCAnT3B0aW9uIDIgKHZvaWNlL2F1ZGlvKScKKwkJY29tbWVudC5pdGVtLjEgJ09wdGlvbiAxIChhdWRpbyknCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0NvZGVjIE9wZXJhdGlvbiBNb2RlJworCQl2YWx1ZSAnT3B0aW9uIDEgKGF1ZGlvKScKKwl9CisJY29udHJvbC4yIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gNjMnCisJCWNvbW1lbnQuZGJtaW4gLTYzMDAKKwkJY29tbWVudC5kYm1heCAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0RBQzEgRGlnaXRhbCBGaW5lIFBsYXliYWNrIFZvbHVtZScKKwkJdmFsdWUuMCAwCisJCXZhbHVlLjEgMAorCX0KKwljb250cm9sLjMgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAyCisJCWNvbW1lbnQucmFuZ2UgJzAgLSA2MycKKwkJY29tbWVudC5kYm1pbiAtNjMwMAorCQljb21tZW50LmRibWF4IDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnREFDMiBEaWdpdGFsIEZpbmUgUGxheWJhY2sgVm9sdW1lJworCQl2YWx1ZS4wIDUwCisJCXZhbHVlLjEgNTAKKwl9CisJY29udHJvbC40IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gMicKKwkJY29tbWVudC5kYm1pbiAwCisJCWNvbW1lbnQuZGJtYXggMTIwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdEQUMxIERpZ2l0YWwgQ29hcnNlIFBsYXliYWNrIFZvbHVtZScKKwkJdmFsdWUuMCAwCisJCXZhbHVlLjEgMAorCX0KKwljb250cm9sLjUgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAyCisJCWNvbW1lbnQucmFuZ2UgJzAgLSAyJworCQljb21tZW50LmRibWluIDAKKwkJY29tbWVudC5kYm1heCAxMjAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0RBQzIgRGlnaXRhbCBDb2Fyc2UgUGxheWJhY2sgVm9sdW1lJworCQl2YWx1ZS4wIDIKKwkJdmFsdWUuMSAyCisJfQorCWNvbnRyb2wuNiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgSU5URUdFUgorCQljb21tZW50LmNvdW50IDIKKwkJY29tbWVudC5yYW5nZSAnMCAtIDE4JworCQljb21tZW50LmRibWluIC0yNDAwCisJCWNvbW1lbnQuZGJtYXggMTIwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdEQUMxIEFuYWxvZyBQbGF5YmFjayBWb2x1bWUnCisJCXZhbHVlLjAgMAorCQl2YWx1ZS4xIDAKKwl9CisJY29udHJvbC43IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gMTgnCisJCWNvbW1lbnQuZGJtaW4gLTI0MDAKKwkJY29tbWVudC5kYm1heCAxMjAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0RBQzIgQW5hbG9nIFBsYXliYWNrIFZvbHVtZScKKwkJdmFsdWUuMCAxNQorCQl2YWx1ZS4xIDE1CisJfQorCWNvbnRyb2wuOCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDIKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnREFDMSBBbmFsb2cgUGxheWJhY2sgU3dpdGNoJworCQl2YWx1ZS4wIGZhbHNlCisJCXZhbHVlLjEgZmFsc2UKKwl9CisJY29udHJvbC45IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMgorCQlpZmFjZSBNSVhFUgorCQluYW1lICdEQUMyIEFuYWxvZyBQbGF5YmFjayBTd2l0Y2gnCisJCXZhbHVlLjAgdHJ1ZQorCQl2YWx1ZS4xIHRydWUKKwl9CisJY29udHJvbC4xMCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgSU5URUdFUgorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5yYW5nZSAnMCAtIDQ5JworCQljb21tZW50LmRibWluIC0zNzAwCisJCWNvbW1lbnQuZGJtYXggMTIwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdEQUMgVm9pY2UgRGlnaXRhbCBEb3dubGluayBWb2x1bWUnCisJCXZhbHVlIDAKKwl9CisJY29udHJvbC4xMSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgSU5URUdFUgorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5yYW5nZSAnMCAtIDE4JworCQljb21tZW50LmRibWluIC0yNDAwCisJCWNvbW1lbnQuZGJtYXggMTIwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdEQUMgVm9pY2UgQW5hbG9nIERvd25saW5rIFZvbHVtZScKKwkJdmFsdWUgMTgKKwl9CisJY29udHJvbC4xMiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnREFDIFZvaWNlIEFuYWxvZyBEb3dubGluayBTd2l0Y2gnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuMTMgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAyCisJCWNvbW1lbnQucmFuZ2UgJzAgLSAzJworCQljb21tZW50LmRibWluIC0xMjAwCisJCWNvbW1lbnQuZGJtYXggNjAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1ByZURyaXYgUGxheWJhY2sgVm9sdW1lJworCQl2YWx1ZS4wIDAKKwkJdmFsdWUuMSAwCisJfQorCWNvbnRyb2wuMTQgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAyCisJCWNvbW1lbnQucmFuZ2UgJzAgLSAzJworCQljb21tZW50LmRibWluIC0xMjAwCisJCWNvbW1lbnQuZGJtYXggNjAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0hlYWRzZXQgUGxheWJhY2sgVm9sdW1lJworCQl2YWx1ZS4wIDMKKwkJdmFsdWUuMSAzCisJfQorCWNvbnRyb2wuMTUgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAyCisJCWNvbW1lbnQucmFuZ2UgJzAgLSAzJworCQljb21tZW50LmRibWluIC0xMjAwCisJCWNvbW1lbnQuZGJtYXggNjAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0NhcmtpdCBQbGF5YmFjayBWb2x1bWUnCisJCXZhbHVlLjAgMAorCQl2YWx1ZS4xIDAKKwl9CisJY29udHJvbC4xNiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgSU5URUdFUgorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5yYW5nZSAnMCAtIDMnCisJCWNvbW1lbnQuZGJtaW4gLTYwMAorCQljb21tZW50LmRibWF4IDEyMDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnRWFycGllY2UgUGxheWJhY2sgVm9sdW1lJworCQl2YWx1ZSAwCisJfQorCWNvbnRyb2wuMTcgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAyCisJCWNvbW1lbnQucmFuZ2UgJzAgLSAzMScKKwkJY29tbWVudC5kYm1pbiAwCisJCWNvbW1lbnQuZGJtYXggMzEwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdUWDEgRGlnaXRhbCBDYXB0dXJlIFZvbHVtZScKKwkJdmFsdWUuMCAxMgorCQl2YWx1ZS4xIDEyCisJfQorCWNvbnRyb2wuMTggeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAyCisJCWNvbW1lbnQucmFuZ2UgJzAgLSAzMScKKwkJY29tbWVudC5kYm1pbiAwCisJCWNvbW1lbnQuZGJtYXggMzEwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdUWDIgRGlnaXRhbCBDYXB0dXJlIFZvbHVtZScKKwkJdmFsdWUuMCAwCisJCXZhbHVlLjEgMAorCX0KKwljb250cm9sLjE5IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gNScKKwkJY29tbWVudC5kYm1pbiAwCisJCWNvbW1lbnQuZGJtYXggMzAwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdBbmFsb2cgQ2FwdHVyZSBWb2x1bWUnCisJCXZhbHVlLjAgMAorCQl2YWx1ZS4xIDAKKwl9CisJY29udHJvbC4yMCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgJ1ZvaWNlIGhpZ2ggcHJpb3JpdHknCisJCWNvbW1lbnQuaXRlbS4xICdIaUZpIGhpZ2ggcHJpb3JpdHknCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0FWQURDIENsb2NrIFByaW9yaXR5JworCQl2YWx1ZSAnVm9pY2UgaGlnaCBwcmlvcml0eScKKwl9CisJY29udHJvbC4yMSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgJzI3LzIwLzE0IG1zJworCQljb21tZW50Lml0ZW0uMSAnNTUvNDAvMjcgbXMnCisJCWNvbW1lbnQuaXRlbS4yICcxMDkvODEvNTUgbXMnCisJCWNvbW1lbnQuaXRlbS4zICcyMTgvMTYxLzEwOSBtcycKKwkJY29tbWVudC5pdGVtLjQgJzQzNy8zMjMvMjE4IG1zJworCQljb21tZW50Lml0ZW0uNSAnODc0LzY0NS80MzcgbXMnCisJCWNvbW1lbnQuaXRlbS42ICcxNzQ4LzEyOTEvODc0IG1zJworCQljb21tZW50Lml0ZW0uNyAnMzQ5NS8yNTgxLzE3NDggbXMnCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0hTIHJhbXAgZGVsYXknCisJCXZhbHVlICcyNy8yMC8xNCBtcycKKwl9CisJY29udHJvbC4yMiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgJ1ZpYnJhIEgtYnJpZGdlIGRpcmVjdGlvbicKKwkJY29tbWVudC5pdGVtLjEgJ0F1ZGlvIGRhdGEgTVNCJworCQlpZmFjZSBNSVhFUgorCQluYW1lICdWaWJyYSBILWJyaWRnZSBtb2RlJworCQl2YWx1ZSAnVmlicmEgSC1icmlkZ2UgZGlyZWN0aW9uJworCX0KKwljb250cm9sLjIzIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBFTlVNRVJBVEVECisJCWNvbW1lbnQuY291bnQgMQorCQljb21tZW50Lml0ZW0uMCAnUG9zaXRpdmUgcG9sYXJpdHknCisJCWNvbW1lbnQuaXRlbS4xICdOZWdhdGl2ZSBwb2xhcml0eScKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnVmlicmEgSC1icmlkZ2UgZGlyZWN0aW9uJworCQl2YWx1ZSAnUG9zaXRpdmUgcG9sYXJpdHknCisJfQorCWNvbnRyb2wuMjQgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0FuYWxvZyBSaWdodCBTdWIgTWljIENhcHR1cmUgU3dpdGNoJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjI1IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdBbmFsb2cgUmlnaHQgQVVYUiBDYXB0dXJlIFN3aXRjaCcKKwkJdmFsdWUgdHJ1ZQorCX0KKwljb250cm9sLjI2IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdBbmFsb2cgTGVmdCBNYWluIE1pYyBDYXB0dXJlIFN3aXRjaCcKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC4yNyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnQW5hbG9nIExlZnQgSGVhZHNldCBNaWMgQ2FwdHVyZSBTd2l0Y2gnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuMjggeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0FuYWxvZyBMZWZ0IEFVWEwgQ2FwdHVyZSBTd2l0Y2gnCisJCXZhbHVlIHRydWUKKwl9CisJY29udHJvbC4yOSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnQW5hbG9nIExlZnQgQ2Fya2l0IE1pYyBDYXB0dXJlIFN3aXRjaCcKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC4zMCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgQW5hbG9nCisJCWNvbW1lbnQuaXRlbS4xIERpZ2ltaWMxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1RYMiBDYXB0dXJlIFJvdXRlJworCQl2YWx1ZSBBbmFsb2cKKwl9CisJY29udHJvbC4zMSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgQW5hbG9nCisJCWNvbW1lbnQuaXRlbS4xIERpZ2ltaWMwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1RYMSBDYXB0dXJlIFJvdXRlJworCQl2YWx1ZSBBbmFsb2cKKwl9CisJY29udHJvbC4zMiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgJ0xvY2FsIHZpYnJhdG9yJworCQljb21tZW50Lml0ZW0uMSBBdWRpbworCQlpZmFjZSBNSVhFUgorCQluYW1lICdWaWJyYSBSb3V0ZScKKwkJdmFsdWUgJ0xvY2FsIHZpYnJhdG9yJworCX0KKwljb250cm9sLjMzIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBFTlVNRVJBVEVECisJCWNvbW1lbnQuY291bnQgMQorCQljb21tZW50Lml0ZW0uMCBBdWRpb0wxCisJCWNvbW1lbnQuaXRlbS4xIEF1ZGlvUjEKKwkJY29tbWVudC5pdGVtLjIgQXVkaW9MMgorCQljb21tZW50Lml0ZW0uMyBBdWRpb1IyCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1ZpYnJhIE11eCcKKwkJdmFsdWUgQXVkaW9MMQorCX0KKwljb250cm9sLjM0IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdIYW5kc2ZyZWVSIFN3aXRjaCcKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC4zNSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgVm9pY2UKKwkJY29tbWVudC5pdGVtLjEgQXVkaW9SMQorCQljb21tZW50Lml0ZW0uMiBBdWRpb1IyCisJCWNvbW1lbnQuaXRlbS4zIEF1ZGlvTDIKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnSGFuZHNmcmVlUiBNdXgnCisJCXZhbHVlIFZvaWNlCisJfQorCWNvbnRyb2wuMzYgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0hhbmRzZnJlZUwgU3dpdGNoJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjM3IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBFTlVNRVJBVEVECisJCWNvbW1lbnQuY291bnQgMQorCQljb21tZW50Lml0ZW0uMCBWb2ljZQorCQljb21tZW50Lml0ZW0uMSBBdWRpb0wxCisJCWNvbW1lbnQuaXRlbS4yIEF1ZGlvTDIKKwkJY29tbWVudC5pdGVtLjMgQXVkaW9SMgorCQlpZmFjZSBNSVhFUgorCQluYW1lICdIYW5kc2ZyZWVMIE11eCcKKwkJdmFsdWUgVm9pY2UKKwl9CisJY29udHJvbC4zOCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnQ2Fya2l0UiBNaXhlciBWb2ljZScKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC4zOSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnQ2Fya2l0UiBNaXhlciBBdWRpb1IxJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjQwIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdDYXJraXRSIE1peGVyIEF1ZGlvUjInCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNDEgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0NhcmtpdEwgTWl4ZXIgVm9pY2UnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNDIgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0NhcmtpdEwgTWl4ZXIgQXVkaW9MMScKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC40MyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnQ2Fya2l0TCBNaXhlciBBdWRpb0wyJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjQ0IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdIZWFkc2V0UiBNaXhlciBWb2ljZScKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC40NSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnSGVhZHNldFIgTWl4ZXIgQXVkaW9SMScKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC40NiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnSGVhZHNldFIgTWl4ZXIgQXVkaW9SMicKKwkJdmFsdWUgdHJ1ZQorCX0KKwljb250cm9sLjQ3IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdIZWFkc2V0TCBNaXhlciBWb2ljZScKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC40OCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnSGVhZHNldEwgTWl4ZXIgQXVkaW9MMScKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC40OSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnSGVhZHNldEwgTWl4ZXIgQXVkaW9MMicKKwkJdmFsdWUgdHJ1ZQorCX0KKwljb250cm9sLjUwIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdQcmVkcml2ZVIgTWl4ZXIgVm9pY2UnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNTEgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1ByZWRyaXZlUiBNaXhlciBBdWRpb1IxJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjUyIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdQcmVkcml2ZVIgTWl4ZXIgQXVkaW9SMicKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC41MyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnUHJlZHJpdmVSIE1peGVyIEF1ZGlvTDInCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNTQgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1ByZWRyaXZlTCBNaXhlciBWb2ljZScKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC41NSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnUHJlZHJpdmVMIE1peGVyIEF1ZGlvTDEnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNTYgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1ByZWRyaXZlTCBNaXhlciBBdWRpb0wyJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjU3IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdQcmVkcml2ZUwgTWl4ZXIgQXVkaW9SMicKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC41OCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnRWFycGllY2UgTWl4ZXIgVm9pY2UnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNTkgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0VhcnBpZWNlIE1peGVyIEF1ZGlvTDEnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNjAgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0VhcnBpZWNlIE1peGVyIEF1ZGlvTDInCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNjEgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0VhcnBpZWNlIE1peGVyIEF1ZGlvUjEnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNjIgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQucmFuZ2UgJzAgLSA0MScKKwkJY29tbWVudC5kYm1pbiAtNTEwMAorCQljb21tZW50LmRibWF4IC0xMDAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1ZvaWNlIERpZ2l0YWwgTG9vcGJhY2sgVm9sdW1lJworCQl2YWx1ZSAwCisJfQorCWNvbnRyb2wuNjMgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQucmFuZ2UgJzAgLSA3JworCQljb21tZW50LmRibWluIC0yNDAwCisJCWNvbW1lbnQuZGJtYXggMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdSaWdodCBEaWdpdGFsIExvb3BiYWNrIFZvbHVtZScKKwkJdmFsdWUgMAorCX0KKwljb250cm9sLjY0IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMQorCQljb21tZW50LnJhbmdlICcwIC0gNycKKwkJY29tbWVudC5kYm1pbiAtMjQwMAorCQljb21tZW50LmRibWF4IDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnTGVmdCBEaWdpdGFsIExvb3BiYWNrIFZvbHVtZScKKwkJdmFsdWUgMAorCX0KKwljb250cm9sLjY1IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdWb2ljZSBBbmFsb2cgTG9vcGJhY2sgU3dpdGNoJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjY2IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdMZWZ0MiBBbmFsb2cgTG9vcGJhY2sgU3dpdGNoJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjY3IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdSaWdodDIgQW5hbG9nIExvb3BiYWNrIFN3aXRjaCcKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC42OCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnTGVmdDEgQW5hbG9nIExvb3BiYWNrIFN3aXRjaCcKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC42OSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnUmlnaHQxIEFuYWxvZyBMb29wYmFjayBTd2l0Y2gnCisJCXZhbHVlIGZhbHNlCisJfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvYmVhZ2xlYm9hcmQvbWFjaGNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2JlYWdsZWJvYXJkL21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTQ2ODU5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2JlYWdsZWJvYXJkL21hY2hjb25maWcKQEAgLTAsMCArMSwzIEBACisjIEFzc3VtZSBhIFVTQiBtb3VzZSBhbmQgdG91Y2hzY3JlZW4gYXJlIGNvbm5lY3RlZAorSEFWRV9UT1VDSFNDUkVFTj0wCitIQVZFX0tFWUJPQVJEPTEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2dlbmVyaWN4ODYtNjQvbWFjaGNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2dlbmVyaWN4ODYtNjQvbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODFhMjNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvZ2VuZXJpY3g4Ni02NC9tYWNoY29uZmlnCkBAIC0wLDAgKzEsNiBAQAorSEFWRV9UT1VDSFNDUkVFTj0wCitIQVZFX0tFWUJPQVJEPTEKKworRElTUExBWV9DQU5fUk9UQVRFPTAKK0RJU1BMQVlfT1JJRU5UQVRJT049MAorRElTUExBWV9EUEk9MTMzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9nZW5lcmljeDg2L21hY2hjb25maWcgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9nZW5lcmljeDg2L21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgxYTIzYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2dlbmVyaWN4ODYvbWFjaGNvbmZpZwpAQCAtMCwwICsxLDYgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MAorSEFWRV9LRVlCT0FSRD0xCisKK0RJU1BMQVlfQ0FOX1JPVEFURT0wCitESVNQTEFZX09SSUVOVEFUSU9OPTAKK0RJU1BMQVlfRFBJPTEzMwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZDk5MWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvcl8wLjAuYmJhcHBlbmQKQEAgLTAsMCArMSBAQAorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlLmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NjU5NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXByb2ZpbGUuYmJhcHBlbmQKQEAgLTAsMCArMSwyIEBACitSREVQRU5EU18ke1BOfV9hcHBlbmRfZ2VuZXJpY3g4NiA9ICIgbHR0bmctdXN0IHN5c3RlbXRhcCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy9nZW5lcmljeDg2LTY0L3VDbGliYy5tYWNoaW5lIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy9nZW5lcmljeDg2LTY0L3VDbGliYy5tYWNoaW5lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNWRjNjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjL2dlbmVyaWN4ODYtNjQvdUNsaWJjLm1hY2hpbmUKQEAgLTAsMCArMSw2OSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBGcmkgTm92IDIzIDE1OjQ5OjMzIDIwMDcKKyMKKyMgVEFSR0VUX2FscGhhIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2FybSBpcyBub3Qgc2V0CisjIFRBUkdFVF9iZmluIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2NyaXMgaXMgbm90IHNldAorIyBUQVJHRVRfZTEgaXMgbm90IHNldAorIyBUQVJHRVRfZnJ2IGlzIG5vdCBzZXQKKyMgVEFSR0VUX2g4MzAwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2hwcGEgaXMgbm90IHNldAorIyBUQVJHRVRfaTM4Nj15CisjIFRBUkdFVF9pOTYwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2lhNjQgaXMgbm90IHNldAorIyBUQVJHRVRfbTY4ayBpcyBub3Qgc2V0CisjIFRBUkdFVF9taWNyb2JsYXplIGlzIG5vdCBzZXQKKyMgVEFSR0VUX21pcHMgaXMgbm90IHNldAorIyBUQVJHRVRfbmlvcyBpcyBub3Qgc2V0CisjIFRBUkdFVF9uaW9zMiBpcyBub3Qgc2V0CisjIFRBUkdFVF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3NoIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3NoNjQgaXMgbm90IHNldAorIyBUQVJHRVRfc3BhcmMgaXMgbm90IHNldAorIyBUQVJHRVRfdjg1MCBpcyBub3Qgc2V0CisjIFRBUkdFVF92YXggaXMgbm90IHNldAorVEFSR0VUX3g4Nl82ND15CisKKyMKKyMgVGFyZ2V0IEFyY2hpdGVjdHVyZSBGZWF0dXJlcyBhbmQgT3B0aW9ucworIworVEFSR0VUX0FSQ0g9Ing4Nl82NCIKK0ZPUkNFX09QVElPTlNfRk9SX0FSQ0g9eQorIyBDT05GSUdfR0VORVJJQ18zODYgaXMgbm90IHNldAorIyBDT05GSUdfMzg2IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR181ODYgaXMgbm90IHNldAorIyBDT05GSUdfNTg2TU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHXzY4NiBpcyBub3Qgc2V0CisjIENPTkZJR19QRU5USVVNSUkgaXMgbm90IHNldAorIyBDT05GSUdfUEVOVElVTUlJSSBpcyBub3Qgc2V0CisjIENPTkZJR19QRU5USVVNNCBpcyBub3Qgc2V0CisjIENPTkZJR19LNiBpcyBub3Qgc2V0CisjIENPTkZJR19LNyBpcyBub3Qgc2V0CisjIENPTkZJR19FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSVVNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU5DSElQQzYgaXMgbm90IHNldAorIyBDT05GSUdfV0lOQ0hJUDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1lSSVhJSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkVIRU1JQUggaXMgbm90IHNldAorVEFSR0VUX1NVQkFSQ0g9IiIKKworIworIyBVc2luZyBFTEYgZmlsZSBmb3JtYXQKKyMKK0FSQ0hfTElUVExFX0VORElBTj15CisKKyMKKyMgVXNpbmcgTGl0dGxlIEVuZGlhbgorIworQVJDSF9IQVNfTU1VPXkKK0FSQ0hfVVNFX01NVT15CitVQ0xJQkNfSEFTX0ZMT0FUUz15CitVQ0xJQkNfSEFTX0ZQVT15CitET19DOTlfTUFUSD15CitLRVJORUxfSEVBREVSUz0iL3Vzci9pbmNsdWRlIgorSEFWRV9ET1RfQ09ORklHPXkKKworVUNMSUJDX0hBU19GRU5WPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMvZ2VuZXJpY3g4Ni91Q2xpYmMubWFjaGluZSBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMvZ2VuZXJpY3g4Ni91Q2xpYmMubWFjaGluZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGYxNWY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy9nZW5lcmljeDg2L3VDbGliYy5tYWNoaW5lCkBAIC0wLDAgKzEsNjkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgRnJpIE5vdiAyMyAxNTo0OTozMyAyMDA3CisjCisjIFRBUkdFVF9hbHBoYSBpcyBub3Qgc2V0CisjIFRBUkdFVF9hcm0gaXMgbm90IHNldAorIyBUQVJHRVRfYmZpbiBpcyBub3Qgc2V0CisjIFRBUkdFVF9jcmlzIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2UxIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2ZydiBpcyBub3Qgc2V0CisjIFRBUkdFVF9oODMwMCBpcyBub3Qgc2V0CisjIFRBUkdFVF9ocHBhIGlzIG5vdCBzZXQKK1RBUkdFVF9pMzg2PXkKKyMgVEFSR0VUX2k5NjAgaXMgbm90IHNldAorIyBUQVJHRVRfaWE2NCBpcyBub3Qgc2V0CisjIFRBUkdFVF9tNjhrIGlzIG5vdCBzZXQKKyMgVEFSR0VUX21pY3JvYmxhemUgaXMgbm90IHNldAorIyBUQVJHRVRfbWlwcyBpcyBub3Qgc2V0CisjIFRBUkdFVF9uaW9zIGlzIG5vdCBzZXQKKyMgVEFSR0VUX25pb3MyIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3Bvd2VycGMgaXMgbm90IHNldAorIyBUQVJHRVRfc2ggaXMgbm90IHNldAorIyBUQVJHRVRfc2g2NCBpcyBub3Qgc2V0CisjIFRBUkdFVF9zcGFyYyBpcyBub3Qgc2V0CisjIFRBUkdFVF92ODUwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3ZheCBpcyBub3Qgc2V0CisjIFRBUkdFVF94ODZfNjQgaXMgbm90IHNldAorCisjCisjIFRhcmdldCBBcmNoaXRlY3R1cmUgRmVhdHVyZXMgYW5kIE9wdGlvbnMKKyMKK1RBUkdFVF9BUkNIPSJpMzg2IgorRk9SQ0VfT1BUSU9OU19GT1JfQVJDSD15CitDT05GSUdfR0VORVJJQ18zODY9eQorIyBDT05GSUdfMzg2IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR181ODYgaXMgbm90IHNldAorIyBDT05GSUdfNTg2TU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHXzY4NiBpcyBub3Qgc2V0CisjIENPTkZJR19QRU5USVVNSUkgaXMgbm90IHNldAorIyBDT05GSUdfUEVOVElVTUlJSSBpcyBub3Qgc2V0CisjIENPTkZJR19QRU5USVVNNCBpcyBub3Qgc2V0CisjIENPTkZJR19LNiBpcyBub3Qgc2V0CisjIENPTkZJR19LNyBpcyBub3Qgc2V0CisjIENPTkZJR19FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSVVNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU5DSElQQzYgaXMgbm90IHNldAorIyBDT05GSUdfV0lOQ0hJUDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1lSSVhJSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkVIRU1JQUggaXMgbm90IHNldAorVEFSR0VUX1NVQkFSQ0g9IiIKKworIworIyBVc2luZyBFTEYgZmlsZSBmb3JtYXQKKyMKK0FSQ0hfTElUVExFX0VORElBTj15CisKKyMKKyMgVXNpbmcgTGl0dGxlIEVuZGlhbgorIworQVJDSF9IQVNfTU1VPXkKK0FSQ0hfVVNFX01NVT15CitVQ0xJQkNfSEFTX0ZMT0FUUz15CitVQ0xJQkNfSEFTX0ZQVT15CitET19DOTlfTUFUSD15CitLRVJORUxfSEVBREVSUz0iL3Vzci9pbmNsdWRlIgorSEFWRV9ET1RfQ09ORklHPXkKKworVUNMSUJDX0hBU19GRU5WPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmNfZ2l0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliY19naXQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkOTkxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmNfZ2l0LmJiYXBwZW5kCkBAIC0wLDAgKzEgQEAKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9nZW5lcmljeDg2LTY0L3hvcmcuY29uZiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9nZW5lcmljeDg2LTY0L3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL2dlbmVyaWN4ODYtNjQveG9yZy5jb25mCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvZ2VuZXJpY3g4Ni94b3JnLmNvbmYgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvZ2VuZXJpY3g4Ni94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9nZW5lcmljeDg2L3hvcmcuY29uZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkOTkxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQKQEAgLTAsMCArMSBAQAorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZmQwN2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwxMSBAQAorS0JSQU5DSF9nZW5lcmljeDg2ICA9ICJzdGFuZGFyZC9jb21tb24tcGMvYmFzZSIKK0tCUkFOQ0hfZ2VuZXJpY3g4Ni02NCAgPSAic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiCisKK0tNQUNISU5FX2dlbmVyaWN4ODYgPz0gImNvbW1vbi1wYyIKK0tNQUNISU5FX2dlbmVyaWN4ODYtNjQgPz0gImNvbW1vbi1wYy02NCIKKworU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4NiA/PSAiYmRhMTc1OTY2MDA5ZDVhOTQxMDM1NTllNmU2YWU1MTI3OTk1MmYzOSIKK1NSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYtNjQgPz0gImJkYTE3NTk2NjAwOWQ1YTk0MTAzNTU5ZTZlNmFlNTEyNzk5NTJmMzkiCisKK0NPTVBBVElCTEVfTUFDSElORV9nZW5lcmljeDg2ID0gImdlbmVyaWN4ODYiCitDT01QQVRJQkxFX01BQ0hJTkVfZ2VuZXJpY3g4Ni02NCA9ICJnZW5lcmljeDg2LTY0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OWVjZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwyMCBAQAorS0JSQU5DSF9nZW5lcmljeDg2ICA9ICJzdGFuZGFyZC9jb21tb24tcGMvYmFzZSIKK0tCUkFOQ0hfZ2VuZXJpY3g4Ni02NCAgPSAic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiCitLQlJBTkNIX2VkZ2Vyb3V0ZXIgPSAic3RhbmRhcmQvZWRnZXJvdXRlciIKK0tCUkFOQ0hfYmVhZ2xlYm9uZSA9ICJzdGFuZGFyZC9iZWFnbGVib25lIgorS0JSQU5DSF9tcGM4MzE1ZS1yZGIgPSAic3RhbmRhcmQvZnNsLW1wYzgzMTVlLXJkYiIKKworS01BQ0hJTkVfZ2VuZXJpY3g4NiA/PSAiY29tbW9uLXBjIgorS01BQ0hJTkVfZ2VuZXJpY3g4Ni02NCA/PSAiY29tbW9uLXBjLTY0IgorCitTUkNSRVZfbWFjaGluZV9nZW5lcmljeDg2ID89ICJhZjFmN2Y1ODZiZDMyZDM5YzA1N2YxNzYwNjk5MWI4ODdlYWRiMzg5IgorU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4Ni02NCA/PSAiNTc4NjAyYTcyMmRiZmIyNjA4MDFmM2IzN2M2ZWFmZDJhYmIyMzQwZCIKK1NSQ1JFVl9tYWNoaW5lX2VkZ2Vyb3V0ZXIgPz0gIjU3ODYwMmE3MjJkYmZiMjYwODAxZjNiMzdjNmVhZmQyYWJiMjM0MGQiCitTUkNSRVZfbWFjaGluZV9iZWFnbGVib25lID89ICI1Nzg2MDJhNzIyZGJmYjI2MDgwMWYzYjM3YzZlYWZkMmFiYjIzNDBkIgorU1JDUkVWX21hY2hpbmVfbXBjODMxNWUtcmRiID89ICIxY2IxYmJhZjYzY2VjYzkxOGNmMzZjODk4MTlhNzQ2NGFmNGM0YjEzIgorCitDT01QQVRJQkxFX01BQ0hJTkVfZ2VuZXJpY3g4NiA9ICJnZW5lcmljeDg2IgorQ09NUEFUSUJMRV9NQUNISU5FX2dlbmVyaWN4ODYtNjQgPSAiZ2VuZXJpY3g4Ni02NCIKK0NPTVBBVElCTEVfTUFDSElORV9lZGdlcm91dGVyID0gImVkZ2Vyb3V0ZXIiCitDT01QQVRJQkxFX01BQ0hJTkVfYmVhZ2xlYm9uZSA9ICJiZWFnbGVib25lIgorQ09NUEFUSUJMRV9NQUNISU5FX21wYzgzMTVlLXJkYiA9ICJtcGM4MzE1ZS1yZGIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg3Zjg0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDIwIEBACitLQlJBTkNIX2dlbmVyaWN4ODYgID0gInN0YW5kYXJkL2NvbW1vbi1wYyIKK0tCUkFOQ0hfZ2VuZXJpY3g4Ni02NCAgPSAic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiCitLQlJBTkNIX2VkZ2Vyb3V0ZXIgPSAic3RhbmRhcmQvZWRnZXJvdXRlciIKK0tCUkFOQ0hfYmVhZ2xlYm9uZSA9ICJzdGFuZGFyZC9iZWFnbGVib25lIgorS0JSQU5DSF9tcGM4MzE1ZS1yZGIgPSAic3RhbmRhcmQvZnNsLW1wYzgzMTVlLXJkYiIKKworS01BQ0hJTkVfZ2VuZXJpY3g4NiA/PSAiY29tbW9uLXBjIgorS01BQ0hJTkVfZ2VuZXJpY3g4Ni02NCA/PSAiY29tbW9uLXBjLTY0IgorCitTUkNSRVZfbWFjaGluZV9nZW5lcmljeDg2ID89ICJlMTUyMzQ5ZGU1OWI0M2IyYTc1ZjJjMzMyYjQ0MTcxZGY0NjFkNWEwIgorU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4Ni02NCA/PSAiZTE1MjM0OWRlNTliNDNiMmE3NWYyYzMzMmI0NDE3MWRmNDYxZDVhMCIKK1NSQ1JFVl9tYWNoaW5lX2VkZ2Vyb3V0ZXIgPz0gImUxNTIzNDlkZTU5YjQzYjJhNzVmMmMzMzJiNDQxNzFkZjQ2MWQ1YTAiCitTUkNSRVZfbWFjaGluZV9iZWFnbGVib25lID89ICJlMTUyMzQ5ZGU1OWI0M2IyYTc1ZjJjMzMyYjQ0MTcxZGY0NjFkNWEwIgorU1JDUkVWX21hY2hpbmVfbXBjODMxNWUtcmRiID89ICIyODkzZjNlOGVjZTcyZjZmNDczMjk3MTRkNmFmZTRjOWM1NDViYmY5IgorCitDT01QQVRJQkxFX01BQ0hJTkVfZ2VuZXJpY3g4NiA9ICJnZW5lcmljeDg2IgorQ09NUEFUSUJMRV9NQUNISU5FX2dlbmVyaWN4ODYtNjQgPSAiZ2VuZXJpY3g4Ni02NCIKK0NPTVBBVElCTEVfTUFDSElORV9lZGdlcm91dGVyID0gImVkZ2Vyb3V0ZXIiCitDT01QQVRJQkxFX01BQ0hJTkVfYmVhZ2xlYm9uZSA9ICJiZWFnbGVib25lIgorQ09NUEFUSUJMRV9NQUNISU5FX21wYzgzMTVlLXJkYiA9ICJtcGM4MzE1ZS1yZGIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZmUwZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYmFwcGVuZApAQCAtMCwwICsxLDExIEBACitLQlJBTkNIX2dlbmVyaWN4ODYgID0gInN0YW5kYXJkL2Jhc2UiCitLQlJBTkNIX2dlbmVyaWN4ODYtNjQgID0gInN0YW5kYXJkL2Jhc2UiCisKK0tNQUNISU5FX2dlbmVyaWN4ODYgPz0gImNvbW1vbi1wYyIKK0tNQUNISU5FX2dlbmVyaWN4ODYtNjQgPz0gImNvbW1vbi1wYy02NCIKKworU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4NiA/PSAiNGUzMGU2NGM0NGRmOWU1OWJkMTMyMzk5NTFiYjhkMmI1YjI3NmU2ZiIKK1NSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYtNjQgPz0gIjRlMzBlNjRjNDRkZjllNTliZDEzMjM5OTUxYmI4ZDJiNWIyNzZlNmYiCisKK0NPTVBBVElCTEVfTUFDSElORV9nZW5lcmljeDg2ID0gImdlbmVyaWN4ODYiCitDT01QQVRJQkxFX01BQ0hJTkVfZ2VuZXJpY3g4Ni02NCA9ICJnZW5lcmljeDg2LTY0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NsYXNzZXMvcG9reS1zYW5pdHkuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jbGFzc2VzL3Bva3ktc2FuaXR5LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdjMjY2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jbGFzc2VzL3Bva3ktc2FuaXR5LmJiY2xhc3MKQEAgLTAsMCArMSwyOCBAQAorIyBQcm92aWRlIHNvbWUgZXh0ZW5zaW9ucyB0byBzYW5pdHkuYmJjbGFzcyB0byBoYW5kbGUgcG9reS1zcGVjaWZpYyBjb25mIGZpbGUgdXBncmFkZXMKKworcHl0aG9uIHBva3lfdXBkYXRlX2JibGF5ZXJzY29uZigpIHsKKyAgICBjdXJyZW50X3ZlcnNpb24gPSBpbnQoZC5nZXRWYXIoJ0xDT05GX1ZFUlNJT04nLCBUcnVlKSBvciAtMSkKKyAgICBsYXRlc3RfdmVyc2lvbiA9IGludChkLmdldFZhcignTEFZRVJfQ09ORl9WRVJTSU9OJywgVHJ1ZSkgb3IgLTEpCisKKyAgICBiYmxheWVyc19mbiA9IGJibGF5ZXJzX2NvbmZfZmlsZShkKQorICAgIGxpbmVzID0gc2FuaXR5X2NvbmZfcmVhZChiYmxheWVyc19mbikKKworICAgIGlmIGN1cnJlbnRfdmVyc2lvbiA9PSA1IGFuZCBsYXRlc3RfdmVyc2lvbiA+IDU6CisgICAgICAgICMgSGFuZGxlIHNwbGl0IG91dCBvZiBtZXRhLXlvY3RvLWJzcCBmcm9tIG1ldGEteW9jdG8KKyAgICAgICAgaWYgJy9tZXRhLXlvY3RvLWJzcCcgbm90IGluIGQuZ2V0VmFyKCdCQkxBWUVSUycsIFRydWUpOgorICAgICAgICAgICAgaW5kZXgsIG1ldGFfeW9jdG9fbGluZSA9IHNhbml0eV9jb25mX2ZpbmRfbGluZSgnbWV0YS15b2N0b1xzKlxcXFxcXG4nLCBsaW5lcykKKyAgICAgICAgICAgIGlmIG1ldGFfeW9jdG9fbGluZToKKyAgICAgICAgICAgICAgICBsaW5lcy5pbnNlcnQoaW5kZXggKyAxLCBtZXRhX3lvY3RvX2xpbmUucmVwbGFjZSgnbWV0YS15b2N0bycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21ldGEteW9jdG8tYnNwJykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN5cy5leGl0KCkKKworICAgICAgICBjdXJyZW50X3ZlcnNpb24gKz0gMQorICAgICAgICBzYW5pdHlfY29uZl91cGRhdGUoYmJsYXllcnNfZm4sIGxpbmVzLCAnTENPTkZfVkVSU0lPTicsIGN1cnJlbnRfdmVyc2lvbikKKyAgICAgICAgcmV0dXJuCisKKyAgICBzeXMuZXhpdCgpCit9CisKKyMgUHJlcGVuZCB0byBlbnN1cmUgb3VyIGZ1bmN0aW9uIHJ1bnMgYmVmb3JlIHRoZSBPRS1Db3JlIG9uZQorQkJMQVlFUlNfQ09ORl9VUERBVEVfRlVOQ1MgPSsgInBva3lfdXBkYXRlX2JibGF5ZXJzY29uZiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2JibGF5ZXJzLmNvbmYuc2FtcGxlIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvYmJsYXllcnMuY29uZi5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkYTU2NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2JibGF5ZXJzLmNvbmYuc2FtcGxlCkBAIC0wLDAgKzEsMTYgQEAKKyMgTEFZRVJfQ09ORl9WRVJTSU9OIGlzIGluY3JlYXNlZCBlYWNoIHRpbWUgYnVpbGQvY29uZi9iYmxheWVycy5jb25mCisjIGNoYW5nZXMgaW5jb21wYXRpYmx5CitMQ09ORl9WRVJTSU9OID0gIjYiCisKK0JCUEFUSCA9ICIke1RPUERJUn0iCitCQkZJTEVTID89ICIiCisKK0JCTEFZRVJTID89ICIgXAorICAjI09FUk9PVCMjL21ldGEgXAorICAjI09FUk9PVCMjL21ldGEteW9jdG8gXAorICAjI09FUk9PVCMjL21ldGEteW9jdG8tYnNwIFwKKyAgIgorQkJMQVlFUlNfTk9OX1JFTU9WQUJMRSA/PSAiIFwKKyAgIyNPRVJPT1QjIy9tZXRhIFwKKyAgIyNPRVJPT1QjIy9tZXRhLXlvY3RvIFwKKyAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvY29uZi1ub3Rlcy50eHQgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9jb25mLW5vdGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmU2MzE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvY29uZi1ub3Rlcy50eHQKQEAgLTAsMCArMSw4IEBACitDb21tb24gdGFyZ2V0cyBhcmU6CisgICAgY29yZS1pbWFnZS1taW5pbWFsCisgICAgY29yZS1pbWFnZS1zYXRvCisgICAgbWV0YS10b29sY2hhaW4KKyAgICBhZHQtaW5zdGFsbGVyCisgICAgbWV0YS1pZGUtc3VwcG9ydAorCitZb3UgY2FuIGFsc28gcnVuIGdlbmVyYXRlZCBxZW11IGltYWdlcyB3aXRoIGEgY29tbWFuZCBsaWtlICdydW5xZW11IHFlbXV4ODYnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9kaXN0cm8vaW5jbHVkZS9tYWludGFpbmVycy5pbmMgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9kaXN0cm8vaW5jbHVkZS9tYWludGFpbmVycy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4YjY0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9pbmNsdWRlL21haW50YWluZXJzLmluYwpAQCAtMCwwICsxLDc2MSBAQAorIyBZb2N0byBQcm9qZWN0IC8gT3BlbkVtYmVkZGVkLUNvcmUgKE9FLUNvcmUpIE1haW50YWluZXJzIEZpbGUKKyMKKyMgVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiByZWNpcGUgbWFpbnRhaW5lcnMuCisjCisjIFBsZWFzZSBzdWJtaXQgYW55IHBhdGNoZXMgYWdhaW5zdCByZWNpcGVzIGluIG1ldGEgdG8gdGhlIAorIyBPRS1Db3JlIG1haWwgbGlzdCAob3BlbmVtYmVkZGVkLWNvcmVAbGlzdHMub3BlbmVtYmVkZGVkLm9yZykKKyMgRm9yIHJlY2lwZXMgaW4gbWV0YS15b2N0byBwbGVhc2UgdXNlIHRoZSBQb2t5IGxpc3QgKHBva3lAeW9jdG9wcm9qZWN0Lm9yZykKKyMKKyMgSWYgeW91IGhhdmUgcHJvYmxlbXMgd2l0aCBvciBxdWVzdGlvbnMgYWJvdXQgYSBwYXJ0aWN1bGFyIHJlY2lwZSwgZmVlbAorIyBmcmVlIHRvIGNvbnRhY3QgdGhlIG1haW50YWluZXIgZGlyZWN0bHkgKGNjOmluZyB0aGUgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0CisjIHB1dHMgaXQgaW4gdGhlIGFyY2hpdmUgYW5kIGhlbHBzIG90aGVyIHBlb3BsZSB3aG8gbWlnaHQgaGF2ZSB0aGUgc2FtZQorIyBxdWVzdGlvbnMgaW4gdGhlIGZ1dHVyZSksIGJ1dCBwbGVhc2UgdHJ5IHRvIGRvIHRoZSBmb2xsb3dpbmcgZmlyc3Q6CisjCisjICAtIGxvb2sgaW4gdGhlIFlvY3RvIFByb2plY3QgQnVnemlsbGEKKyMgICAgKGh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLykgdG8gc2VlIGlmIGEgcHJvYmxlbSBoYXMKKyMgICAgYWxyZWFkeSBiZWVuIHJlcG9ydGVkCisjCisjIC0gbG9vayB0aHJvdWdoIHJlY2VudCBlbnRyaWVzIG9mIHRoZSBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMKKyMgICAoaHR0cDovL2xpc3RzLmxpbnV4dG9nby5vcmcvcGlwZXJtYWlsL29wZW5lbWJlZGRlZC1jb3JlIG9yCisjICAgIGh0dHBzOi8vbGlzdHMueW9jdG9wcm9qZWN0Lm9yZy9waXBlcm1haWwvcG9reS8pIHRvIHNlZSBpZiBvdGhlcgorIyAgIHBlb3BsZSBoYXZlIHJ1biBpbnRvIHNpbWlsYXIgcHJvYmxlbXMgb3IgaGFkIHNpbWlsYXIgcXVlc3Rpb25zCisjICAgYW5zd2VyZWQuCisjCisjIFRoZSBmb3JtYXQgaXMgYXMgYSBiaXRiYWtlIHZhcmlhYmxlIG92ZXJyaWRlIGZvciBlYWNoIHJlY2lwZQorIworIwlSRUNJUEVfTUFJTlRBSU5FUl9wbi08cmVjaXBlIG5hbWU+ID0gIkZ1bGwgTmFtZSA8YWRkcmVzc0Bkb21haW4+IgorIworIyBQbGVhc2Uga2VlcCB0aGlzIGxpc3QgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgorIworUkVDSVBFX01BSU5UQUlORVJfcG4tYWNsID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hY3BpZCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hZHQtaW5zdGFsbGVyID0gIkplc3NpY2EgWmhhbmcgPGplc3NpY2EuemhhbmdAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFkd2FpdGEtaWNvbi10aGVtZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFsc2EtbGliID0gIlRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFsc2EtcGx1Z2lucyA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hbHNhLXN0YXRlID0gIlRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFsc2EtdG9vbHMgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYWxzYS11dGlscyA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hbHNhLXV0aWxzLXNjcmlwdHMgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXBtZCA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFwciA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXByLXV0aWwgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFwdCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hc3BlbGwgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXRrID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXQgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF0LXNwaTItYXRrID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXQtc3BpMi1jb3JlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXR0ciA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXVnZWFzID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF1dG9jb25mID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF1dG9nZW4gPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXV0b21ha2UgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXZhaGktdWkgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXZhaGkgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYmFiZWx0cmFjZSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJhc2UtZmlsZXMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iYXNlLXBhc3N3ZCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJhc2ggPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJjID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJkd2djID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJlZWNyeXB0ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iaWdyZXFzcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmp1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iaW5kID0gIkthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJpbnV0aWxzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJpc29uID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ibGt0b29sID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJsa3RyYWNlID0gIlRvbSBaYW51c3NpIDx0b20uemFudXNzaUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYmx1ZXo1ID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYm9vc3QgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1idHJmcy10b29scyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1idWlsZC1hcHBsaWFuY2UtaW1hZ2UgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1idWlsZC1jb21wYXJlID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYnVpbGRlciA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJ1c3lib3ggPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJ5YWNjID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iemlwMiA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2EtY2VydGlmaWNhdGVzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2Fpcm8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jYWxpYnJhdGVwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNjYWNoZSA9ICJXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jZHJ0b29scyA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jaGtjb25maWcgPSAiV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2hrY29uZmlnLWFsdGVybmF0aXZlcy1uYXRpdmUgPSAiV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2hycGF0aCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jbHV0dGVyLWdzdC0zLjAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jbHV0dGVyLWd0ay0xLjAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jbHV0dGVyLTEuMCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNtYWtlLW5hdGl2ZSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jbWFrZSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb2dsLTEuMCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvbXBvc2l0ZXByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29ubm1hbiA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvbm5tYW4tZ25vbWUgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb25zb2xla2l0ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb25zb2xlLXRvb2xzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLWJhc2UgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLWNsdXR0ZXIgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLWRpcmVjdGZiID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1mdWxsLWNtZGxpbmUgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLWxzYi1kZXYgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLWxzYiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2UtbHNiLXNkayA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2UtbWluaW1hbC1kZXYgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1taW5pbWFsLW10ZHV0aWxzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1taW5pbWFsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1ydCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2UtcnQtc2RrID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1zYXRvLWRldiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2Utc2F0byA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2Utc2F0by1zZGsgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLXgxMSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmV1dGlscyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY3BpbyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY3JhY2tsaWIgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNyZWF0ZXJlcG8gPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNyb25pZSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jcm9zcy1sb2NhbGVkZWYtbmF0aXZlID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY3VwcyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY3VybCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY3dhdXRvbWFjcm9zID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGFtYWdlcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kYiA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRidXMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRidXMtZ2xpYiA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGJ1cy10ZXN0ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kYnVzLXdhaXQgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRlc2t0b3AtZmlsZS11dGlscy1uYXRpdmUgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kaGNwID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kaWZmc3RhdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGlmZnV0aWxzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kaXJlY3RmYi1leGFtcGxlcyA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGlyZWN0ZmIgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRpc3RjYyA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGlzdGNjLWNvbmZpZyA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kbXhwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvY2Jvb2stZHNzc2wtc3R5bGVzaGVldCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzLW5hdGl2ZSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kb2Nib29rLXNnbWwtZHRkLTMuMS1uYXRpdmUgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZG9jYm9vay1zZ21sLWR0ZC00LjEtbmF0aXZlID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvY2Jvb2stc2dtbC1kdGQtNC41LW5hdGl2ZSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kb2Nib29rLXNnbWwtZHRkID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvY2Jvb2stdXRpbHMgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZG9zZnN0b29scyA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kcGtnID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRyaTJwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRyaTNwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRyb3BiZWFyID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWR0YyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWUyZnNwcm9ncyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1lZCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWVlZS1hY3BpLXNjcmlwdHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1lbGZ1dGlscyA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZW5jaGFudCA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWVuY29kaW5ncyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWVwaXBoYW55ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZXRodG9vbCA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWV4cGF0ID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWZpbGUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZmluZHV0aWxzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1maXhlc3Byb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZmxhYyA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1mbGV4ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1mb250LWFsaWFzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZm9udGNvbmZpZyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWZvbnRzcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1mb250LXV0aWwgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1mb29tYXRpYy1maWx0ZXJzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1mb3JtZmFjdG9yID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZm90b3dhbGwgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZnJlZXR5cGUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1mc3Rlc3RzID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdha3UgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nYXdrID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY2MgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NjLXNvdXJjZSA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY2NtYWtlZGVwID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdjYy1ydW50aW1lID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdjb25mID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NyID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2RiID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdkYm0gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nZGstcGl4YnVmID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2VuZXh0MmZzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdldHRleHQtbWluaW1hbC1uYXRpdmUgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdldHRleHQgPSAiV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2hvc3RzY3JpcHQgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdpZmxpYiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdpdCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbGV3ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2xpYi0yLjAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbGliYyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbGliLW5ldHdvcmtpbmcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbHByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ21wID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLWNvbW1vbiA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbm9tZS1kZXNrdG9wID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLWRlc2t0b3AtdGVzdGluZyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLWRlc2t0b3AzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ25vbWUtZG9jLXV0aWxzID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLW1pbWUtZGF0YSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbnUtY29uZmlnID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdudS1lZmkgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ251cGcgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdudXRscyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdwZXJmID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3BnbWUgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3JlcCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3JvZmYgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdydWIgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3RyZWFtZXIxLjAgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3RyZWFtZXIxLjAtbGliYXYgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZCA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHkgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3QtcGxheWVyID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3RrLWRvYy1zdHViID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3RrLWRvYyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0ay1lbmdpbmVzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3RrLXNhdG8tZW5naW5lID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3RrLXRoZW1lLXRvcnR1cmVyID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3RrLWljb24tdXRpbHMtbmF0aXZlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3RrKyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0ayszID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3VpbGUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3VpbHQtbmF0aXZlID0gIkJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd1bW1pYm9vdCA9ICJEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nemlwID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1oYXJmYnV6eiA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWhkcGFybSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1oZWxwMm1hbi1uYXRpdmUgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWhpY29sb3ItaWNvbi10aGVtZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWhvc3RhcC1jb25mID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taG9zdGFwLXV0aWxzID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taHdsYXRkZXRlY3QgPSAiRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taWNlY2MtY3JlYXRlLWVudi1uYXRpdmUgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pY3UgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbml0cmFtZnMtYm9vdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWluaXRyYW1mcy1mcmFtZXdvcmsgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbml0cmFtZnMtbGl2ZS1ib290ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmkgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbml0cmFtZnMtbGl2ZS1pbnN0YWxsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdHNjcmlwdHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbnB1dHByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW5zc2VydiA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbnRsdG9vbCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pcHJvdXRlMiA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWlwdGFibGVzID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taXB1dGlscyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pcmRhLXV0aWxzID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taXNvLWNvZGVzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tanBlZyA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1qc29uLWdsaWIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1rYmQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1rYnByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta2NvbmZpZy1mcm9udGVuZHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1rZXJuZWxzaGFyayA9ICJEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1rZXJuLXRvb2xzLW5hdGl2ZSA9ICJCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1rZXhlYy10b29scyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1rZXltYXBzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta21vZCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGFtZSA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sYXRlbmN5dG9wID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxkY29uZmlnLW5hdGl2ZSA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxlYWZwYWQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sZXNzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmE1MiA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhY3BpID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmFpbyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmFyY2hpdmUgPSAiUGF1bCBCYXJrZXIgPHBhdWxAcGF1bGJhcmtlci5tZS51az4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhcnQtbGdwbCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmFzc3VhbiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmF0b21pY3Mtb3BzID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliYXYgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliYnNkID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmNhcCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJjZ3JvdXAgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJjaGVjayA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJjbGFzcy1pc2EtcGVybCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmNvbnZlcnQtYXNuMS1wZXJsID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY3JvY28gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJkYWVtb24gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJkbXggPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmp1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJkcm0gPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZHVtcHZhbHVlLXBlcmwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJlbnYtcGVybCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmVwb3h5ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZXJhdGlvbi1mb250cyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmV2ZGV2ID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmV2ZW50ID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmV4aWYgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJmYWtla2V5ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZmZpICA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmZpbGUtY2hlY2t0cmVlLXBlcmwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJmbSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmZvbnRlbmMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJnY2MgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZ2NyeXB0ID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJnZm9ydHJhbiA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJnbGFkZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmdsdSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmdwZy1lcnJvciA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJpMThuLWNvbGxhdGUtcGVybCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmljYWwgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJpY2UgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJpY29udiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmlkM3RhZyA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJpZG4gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJpbnB1dCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmpzb24gPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlia3NiYSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm1hZCA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJtYXRjaGJveCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm1wYyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJuZXd0ID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJuZXd0LXB5dGhvbiA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlibmZzaWRtYXAgPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJubCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm5vdGlmeSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm5zcy1tZG5zID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlib2dnID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlib2lsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlib214aWwgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJvd2wtYXYgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJvd2wgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwYW0gPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwY2FwID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicGNpYWNjZXNzID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBjcmUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicGZtNCA9ICJNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBuZyA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBuZzEyID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicG9kLXBsYWluZXItcGVybCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnByb3h5ID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicHRocmVhZC1zdHVicyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnJzdmcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzYW1wbGVyYXRlMCA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzZGwgPSAiS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlic2RsMiA9ICJLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzZWNyZXQgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzbSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnNuZGZpbGUxID0gIlRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnNvdXAtMi40ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidGFzbjEgPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ0ZWxlcGF0aHkgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ0aGVvcmEgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ0aW1lZGF0ZS1wZXJsID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidGlycGMgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ0b29sID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnVuaXN0cmluZyA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnVyY3UgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1cmktcGVybCA9ICJLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1c2IxID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnVzYi1jb21wYXQgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidXNlciA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ2b3JiaXMgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlid2VicCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnduY2szID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieDExLWRpZXQgPSAiS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieDExID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGF1ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGNhbGlicmF0ZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhjYiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhjb21wb3NpdGUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4Y3Vyc29yID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGRhbWFnZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhkbWNwID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGV4dCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhmaXhlcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhmb250ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGZ0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGluZXJhbWEgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4aSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhrYmNvbW1vbiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhrYmZpbGUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bWwyID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bWwtbmFtZXNwYWNlc3VwcG9ydC1wZXJsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sLXBhcnNlci1wZXJsID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bWwtcGVybCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhtbC1zYXgtcGVybCA9ICJLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bWwtc2ltcGxlLXBlcmwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bXUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4cG0gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4cCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhyYW5kciA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhyZW5kZXIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4cmVzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHNjcm5zYXZlciA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhzZXR0aW5ncy1jbGllbnQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4c2htZmVuY2UgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4c2x0ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4dHN0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHZtYyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnh2ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHhmODZkZ2EgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4eGY4Nm1pc2MgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4eGY4NnZtID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieWFtbCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpZ2h0dHBkID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXhkb2MtdG9vbHMgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXgtZHVtbXkgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saW51eC1maXJtd2FyZSA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LWxpYmMtaGVhZGVycyA9ICJCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saW51eC1saWJjLWhlYWRlcnMteW9jdG8gPSAiQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXgteW9jdG8gPSAiRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXgteW9jdG8tZGV2ID0gIkRhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LXlvY3RvLXJ0ID0gIkRhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LXlvY3RvLXRpbnkgPSAiRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbG9ncm90YXRlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxyenN6ID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHNiaW5pdHNjcmlwdHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sc2J0ZXN0ID0gIllpIFpoYW8gPHlpLnpoYW9Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sc2IgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxzb2YgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHRwID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWx0dG5nLW1vZHVsZXMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHR0bmctdG9vbHMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHR0bmctdXN0ID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWx6b3AgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sem8gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sejQgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyODA4QGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tNCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYWlseCA9ICJLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYWtlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ha2VkZXBlbmQgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWFrZWRldnMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hbi1wYWdlcyA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWFuID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC1jb25maWctZ3RrID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWF0Y2hib3gtZGVza3RvcC1zYXRvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWF0Y2hib3gtZGVza3RvcCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LWtleWJvYXJkID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWF0Y2hib3gtcGFuZWwtMiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LXNlc3Npb24tc2F0byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LXNlc3Npb24gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC10ZXJtaW5hbCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LXRoZW1lLXNhdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC13bSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1jID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1kYWRtID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWVudS1jYWNoZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1lc2EgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tZXNhLWRlbW9zID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWVzYS1nbCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ldGEtaWRlLXN1cHBvcnQgPSAiSmVzc2ljYSBaaGFuZyA8amVzc2ljYS56aGFuZ0BpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWV0YS10b29sY2hhaW4tcXRlID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ldGEtdG9vbGNoYWluID0gIkplc3NpY2EgWmhhbmcgPGplc3NpY2EuemhhbmdAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1pbmdldHR5ID0gIkthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1pbmljb20gPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1taW5pLXgtc2Vzc2lvbiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1rZWxmaW1hZ2UgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ta2ZvbnRkaXIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmp1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ta2ZvbnRzY2FsZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1rbGlicy1uYXRpdmUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWt0ZW1wID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mbyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1vZHV0aWxzLWluaXRzY3JpcHRzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1wZWcyZGVjID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbXBmciA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tc210cCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW10ZGV2ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbXRkLXV0aWxzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbXRvb2xzID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbXgtMS4wID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmFzbSA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4taG9zdCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uYXRpdmVzZGstcWVtdS1oZWxwZXIgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uYXRpdmVzZGstcXQ0LXRvb2xzID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5jdXJzZXMgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5lYXJkID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmVvbiA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5ldGJhc2UgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uZXR0bGUgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyODA4QGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uZXQtdG9vbHMgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uZnMtZXhwb3J0LXJvb3QgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmZzLXV0aWxzID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5wdGggPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uc3ByID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbnNzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb2NmLWxpbnV4ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb2Zvbm8gPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vaC1wdXp6bGVzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3BlbmphZGUgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3BlbnNwID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wZW5zc2ggPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3BlbnNzbCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wa2ctY29sbGF0ZXJhbCA9ICJQYXVsIEJhcmtlciA8cGF1bEBwYXVsYmFya2VyLm1lLnVrPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wa2ctY29uZmlnLWJhc2UgPSAiUGF1bCBCYXJrZXIgPHBhdWxAcGF1bGJhcmtlci5tZS51az4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vcGtnID0gIlBhdWwgQmFya2VyIDxwYXVsQHBhdWxiYXJrZXIubWUudWs+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3BrZy11dGlscyA9ICJQYXVsIEJhcmtlciA8cGF1bEBwYXVsYmFya2VyLm1lLnVrPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wcm9maWxlID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wcm9maWxldWkgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3Byb2ZpbGV1aS1zZXJ2ZXIgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vc3NwLXV1aWQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vd2wtdmlkZW8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wMTEta2l0ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWJhc2UgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1ib290ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtYnVpbGRlc3NlbnRpYWwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtZGV2aWNlLWRldmVsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1sc2IgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1uZnMgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtcXQ0ZSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1xdCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1zZGsgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1zc2gtZHJvcGJlYXIgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXRlc3RhcHBzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUteDExLWJhc2UgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0byA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXgxMSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXgxMS14c2VydmVyID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4tdGFyZ2V0ID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2UtaW5kZXggPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYW5nbyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhcnRlZCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGF0Y2ggPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBheC11dGlscyA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGF4ID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wY2l1dGlscyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGNtYW5mbSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wY21jaWF1dGlscyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wZXJmID0gIkJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBlcmwgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBpZ2xpdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBpZ3ogPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBpbmVudHJ5ID0gIkFybWluIEt1c3RlciA8YWt1c3RlcjgwOEBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGl4bWFuID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGtnY29uZmlnID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBtLXV0aWxzID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcG9pbnRlcmNhbCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBvbmctY2xvY2sgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wb3B0ID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBvcnRtYXAgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcG93ZXJ0b3AgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHBwID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wcHAtZGlhbGluID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wcmVsaW5rID0gIk1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wcmVzZW50cHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wcm9jcHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wc2V1ZG8gPSAiTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBzbWlzYyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBzcGxhc2ggPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHRoID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHVsc2VhdWRpbyA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wdXp6bGVzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1hc3luYyA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1kYnVzID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1kaXN0cmlidXRlID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1kb2N1dGlscyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tZ2l0ID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1naXRkYiA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24taW1hZ2luZyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tbWFrbyA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1ub3NlID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLW51bXB5ID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXB5Y2Fpcm8gPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXB5Y3VybCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tcHlnb2JqZWN0ID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1weWd0ayA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tcHlyZXggPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXNjb25zID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1zZXR1cHRvb2xzID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1zbWFydHBtID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1zbW1hcCA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbjMtZGlzdHJpYnV0ZSA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXFlbXUtaGVscGVyLW5hdGl2ZSA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXFlbXUgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1xbW1wID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1xdDRlLWRlbW8taW1hZ2UgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcXQ0LWVtYmVkZGVkID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXF0NC1ncmFwaGljcy1zeXN0ZW0gPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcXQ0LW5hdGl2ZSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1xdDQteDExLWZyZWUgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcXQtZGVtby1pbml0ID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXF1aWNreSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1xdWlsdCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1xdW90YSA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJhbmRycHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1yZWFkbGluZSA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcmVjb3JkcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1yZW1ha2UgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcmVuZGVycHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1yZXNvbHZjb25mID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1yZXNvdXJjZXByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcmdiID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcnBjYmluZCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcnBtID0gIk1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ycG1yZXNvbHZlID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJzeW5jID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJ0LXRlc3RzID0gIkRhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJ1YnkgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ydW4tcG9zdGluc3RzID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcnh2dC11bmljb2RlID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2F0by1pY29uLXRoZW1lID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNhdG8tc2NyZWVuc2hvdCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNiYyA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zY3JlZW4gPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2NybnNhdmVycHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zZWQgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNldHNlcmlhbCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zZXR0aW5ncy1kYWVtb24gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zZ21sLWNvbW1vbiA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zZ21sc3BsID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNoYWRvdyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2hhZG93LXNlY3VyZXR0eSA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2hhZG93LXN5c3Jvb3QgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNoYXJlZC1taW1lLWluZm8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zaHV0ZG93bi1kZXNrdG9wID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2xhbmcgPSAiS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc29jYXQgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNwZWV4ID0gIlRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNwZWV4ZHNwID0gIlRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNxbGl0ZTMgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3F1YXNoZnMtdG9vbHMgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3RhcnR1cC1ub3RpZmljYXRpb24gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zdGF0ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zdHJhY2UgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3VidmVyc2lvbiA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zdWRvID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zd2FiYmVyLW5hdGl2ZSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c2ZzdXRpbHMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c2tsb2dkID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXNsaW51eCA9ICJEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXNwcm9mID0gIlRvbSBaYW51c3NpIDx0b20uemFudXNzaUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzc3RhdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtZCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtdGFwID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtdGFwLXVwcm9iZXMgPSAiVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXN2aW5pdC1pbml0dGFiID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdmluaXQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10YWdsaWIgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10YXItcmVwbGFjZW1lbnQtbmF0aXZlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRhciA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGNmLWFnZW50ID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGNsID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRjcC13cmFwcGVycyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10Y3Atd3JhcHBlcnMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10ZWxlcGF0aHktZ2xpYiA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRlbGVwYXRoeS1pZGxlID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGVsZXBhdGh5LW1pc3Npb24tY29udHJvbCA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRlbGVwYXRoeS1weXRob24gPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10ZXhpMmh0bWwgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGV4aW5mbyA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10aWZmID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGltZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10aW55LWluaXQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10cmFjZS1jbWQgPSAiRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdHJlbW9yID0gIlRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRzbGliID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXR0Zi1iaXRzdHJlYW0tdmVyYSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10emNvZGUtbmF0aXZlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXR6ZGF0YSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11LWJvb3QgPSAiRGVueXMgRG15dHJpeWVua28gPGRlbmlzQGRlbml4Lm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11LWJvb3QtZnctdXRpbHMgPSAiRGVueXMgRG15dHJpeWVua28gPGRlbmlzQGRlbml4Lm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11LWJvb3QtbWtpbWFnZSA9ICJEZW55cyBEbXl0cml5ZW5rbyA8ZGVuaXNAZGVuaXgub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXVib290Y2hhcnQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11Y2xpYmMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11ZGV2LWV4dHJhY29uZiA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11ZGV2ID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXVuaWZkZWYgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdW56aXAgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdXBkYXRlLXJjLmQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11c2Jpbml0ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdXNidXRpbHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11bmZzMyA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXV0aWwtbGludXggPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXV0aWwtbWFjcm9zID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdjg2ZCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi12YWxhID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdmFsZ3JpbmQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi12aWRlb3Byb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdnRlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2FmZmxlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2F0Y2hkb2cgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi13YXlsYW5kID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2Via2l0Z3RrID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2ViLXdlYmtpdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXdlc3RvbiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXdnZXQgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2hpY2ggPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2lyZWxlc3MtdG9vbHMgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi13cGEtc3VwcGxpY2FudCA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXgxMS1jb21tb24gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14MTFwZXJmID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXgxMXZuYyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14MjY0ID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhhdXRoID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGNiLXByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGNiLXV0aWwtaW1hZ2UgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Y2ItdXRpbC1rZXlzeW1zID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGNiLXV0aWwgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Y2ItdXRpbC1yZW5kZXJ1dGlsID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGNiLXV0aWwtd20gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Y21pc2Nwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14ZGctdXRpbHMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14ZHB5aW5mbyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhldiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhleHRwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhleWVzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4NmRnYXByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4NmRyaXByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni1pbnB1dC1ldmRldiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtaW5wdXQta2V5Ym9hcmQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LWlucHV0LW1vdXNlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni1pbnB1dC1zeW5hcHRpY3MgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LWlucHV0LXZtbW91c2UgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2bWlzY3Byb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni12aWRlby1jaXJydXMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLWZiZGV2ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni12aWRlby1pbnRlbCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtdmlkZW8tbW9kZXNldHRpbmcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLW9tYXBmYiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtdmlkZW8tb21hcCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtdmlkZW8tdmVzYSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtdmlkZW8tdm13YXJlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4NnZpZG1vZGVwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhob3N0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGluZXJhbWFwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhpbmV0ZCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14aW5pdCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhpbnB1dCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhpbnB1dC1jYWxpYnJhdG9yID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGtiY29tcCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhrZXlib2FyZC1jb25maWcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14bWx0byA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teG1vZG1hcCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhvcmctbWluaW1hbC1mb250cyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhwcm9wID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teHByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teHJhbmRyID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhyZXN0b3AgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14c2VydmVyLW5vZG0taW5pdCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhzZXJ2ZXIteGY4Ni1jb25maWcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14c2VydmVyLXhvcmcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14c2V0ID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXh0cmFucyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXh0c2NhbCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXh2aWRlby10ZXN0cyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXh2aW5mbyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXh3aW5pbmZvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teHogPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXlhc20gPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4temF1cnVzZCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi16aXAgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXpsaWIgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9pbmNsdWRlL3Bva3ktZmxvYXRpbmctcmV2aXNpb25zLmluYyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9pbmNsdWRlL3Bva3ktZmxvYXRpbmctcmV2aXNpb25zLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTFmMmNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL2luY2x1ZGUvcG9reS1mbG9hdGluZy1yZXZpc2lvbnMuaW5jCkBAIC0wLDAgKzEsNzMgQEAKKyMKKyMgUGFja2FnZSBWZXJzaW9ucyBmb3IgY3V0dGluZyBlZGdlIHRlc3Rpbmc6CisjCisKKyNTUkNSRVZfcG4tb3BrZy1uYXRpdmUgPz0gIiR7QVVUT1JFVn0iCisjU1JDUkVWX3BuLW9wa2ctc2RrID89ICIke0FVVE9SRVZ9IgorI1NSQ1JFVl9wbi1vcGtnID89ICIke0FVVE9SRVZ9IgorI1NSQ1JFVl9wbi1vcGtnLXV0aWxzLW5haXR2ZSA/PSAiJHtBVVRPUkVWfSIKKyNTUkNSRVZfcG4tb3BrZy11dGlscyA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1nY29uZi1kYnVzID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LWNvbW1vbiA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1tYXRjaGJveC1jb25maWctZ3RrID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LWRlc2t0b3AgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gta2V5Ym9hcmQgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtcGFuZWwgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtcGFuZWwtMiA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1tYXRjaGJveC10aGVtZXMtZXh0cmEgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtdGVybWluYWwgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtd20gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtd20tMiA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1zZXR0aW5ncy1kYWVtb24gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tc2NyZWVuc2hvdCA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1saWJmYWtla2V5ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW9wcm9maWxldWkgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4temF1cnVzZCA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1saWJvd2wtYXYgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tb3dsLXZpZGVvID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLXBzcGxhc2ggPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tZXhtYXAtY29uc29sZSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1ndGstc2F0by1lbmdpbmUgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtdGhlbWUtc2F0byA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1tYXRjaGJveC10aGVtZS1zYXRvLTIgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tc2F0by1pY29uLXRoZW1lID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LWRlc2t0b3Atc2F0byA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1vaC1wdXp6bGVzID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLWxpYm93bCA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1tYXRjaGJveC1hcHBsZXQtbGlnaHQgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tZnN0ZXN0cyA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi14dmlkZW8tdGVzdHMgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tY2x1dHRlciA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1jbHV0dGVyLWdzdCA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1nYWt1ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLWd5cHN5ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLWFhaW5hID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLWNsdXR0ZXItY2Fpcm8gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tdGFibGUgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbGlibWF0Y2hib3ggPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tdGFza3MgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tb2Zvbm8gPz0gIiR7QVVUT1JFVn0iCisKK1NSQ1JFVl9wbi1kcmkycHJvdG8gPSAiJHtBVVRPUkVWfSIKKyNQUkVGRVJSRURfVkVSU0lPTl9kcmkycHJvdG8gPz0gIjEuOTkuMStnaXQlIgorU1JDUkVWX3BuLWxpYmRybSA9ICIke0FVVE9SRVZ9IgorI1BSRUZFUlJFRF9WRVJTSU9OX2xpYmRybSA/PSAiMi40LjArZ2l0JSIKK1NSQ1JFVl9wbi1saWJ4Y2IgPSAiJHtBVVRPUkVWfSIKKyNQUkVGRVJSRURfVkVSU0lPTl9saWJ4Y2IgPz0gIjEuMS45MC4xK2dpdHIlIgorU1JDUkVWX3BuLWxpYi1wcm90byA9ICIke0FVVE9SRVZ9IgorI1BSRUZFUlJFRF9WRVJTSU9OX3hjYi1wcm90byA/PSAiMS4yK2dpdHIlIgorU1JDUkVWX3BuLWxpYnhjYi1zZGsgPSAiJHtBVVRPUkVWfSIKKyNQUkVGRVJSRURfVkVSU0lPTl9saWJ4Y2Itc2RrID89ICIxLjEuOTAuMStnaXRyJSIKK1NSQ1JFVl9wbi14Zjg2LWlucHV0LWV2ZGV2ID0gIiR7QVVUT1JFVn0iCisjUFJFRkVSUkVEX1ZFUlNJT05feGY4Ni1pbnB1dC1ldmRldiA/PSAiMi4wLjQiCitTUkNSRVZfcG4teGY4Ni1pbnB1dC1tb3VzZSA9ICIke0FVVE9SRVZ9IgorI1BSRUZFUlJFRF9WRVJTSU9OX3hmODYtaW5wdXQtbW91c2UgPz0gIjEuMy4wK2dpdCUiCitTUkNSRVZfcG4teGY4Ni1pbnB1dC1rZXlib2FyZCA9ICIke0FVVE9SRVZ9IgorI1BSRUZFUlJFRF9WRVJTSU9OX3hmODYtaW5wdXQta2V5Ym9hcmQgPz0gIjEuMy4xK2dpdCUiCitTUkNSRVZfcG4teGY4Ni1pbnB1dC1zeW5hcHRpY3MgPSAiJHtBVVRPUkVWfSIKKyNQUkVGRVJSRURfVkVSU0lPTl94Zjg2LWlucHV0LXN5bmFwdGljcyA/PSAiMC4xNS4yK2dpdCUiCisKKyNTUkNEQVRFX29wcm9maWxlID89ICIke0RBVEV9IgorCitQUkVGRVJSRURfVkVSU0lPTl9vcHJvZmlsZSA/PSAiMC45LjQrY3ZzJHtTUkNEQVRFX29wcm9maWxlfSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3ktYmxlZWRpbmcuY29uZiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LWJsZWVkaW5nLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQzZTA0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LWJsZWVkaW5nLmNvbmYKQEAgLTAsMCArMSwxMSBAQAorUFJFRkVSUkVEX1ZFUlNJT05fZ2xpYi0yLjAgPz0gIjIuMTcuNCIKK1BSRUZFUlJFRF9WRVJTSU9OX2dsaWItMi4wLW5hdGl2ZSA/PSAiMi4xNy40IgorUFJFRkVSUkVEX1ZFUlNJT05fYXRrID89ICIxLjIyLjAiCitQUkVGRVJSRURfVkVSU0lPTl9wYW5nbyA/PSAiMS4yMS4yIgorUFJFRkVSUkVEX1ZFUlNJT05fZ3RrKyA/PSAiMi4xMy4zIgorCityZXF1aXJlIGNvbmYvZGlzdHJvL2luY2x1ZGUvcG9reS1mbG9hdGluZy1yZXZpc2lvbnMuaW5jCityZXF1aXJlIGNvbmYvZGlzdHJvL3Bva3kuY29uZgorCitESVNUUk8gPSAicG9reS1ibGVlZGluZyIKK0RJU1RST09WRVJSSURFUyA9ICJwb2t5IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3ktbHNiLmNvbmYgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9kaXN0cm8vcG9reS1sc2IuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjJiZTgwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3ktbHNiLmNvbmYKQEAgLTAsMCArMSwxNSBAQAorCityZXF1aXJlIGNvbmYvZGlzdHJvL3Bva3kuY29uZgorcmVxdWlyZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3NlY3VyaXR5X2ZsYWdzLmluYworCitESVNUUk8gPSAicG9reS1sc2IiCitESVNUUk9PVkVSUklERVMgPSAicG9reTpsaW51eHN0ZGJhc2UiCisKK0RJU1RST19GRUFUVVJFU19hcHBlbmQgPSAiIHBhbSBsYXJnZWZpbGUgb3BlbmdsIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGlieDExID0gImxpYngxMSIKKworIyBFbnN1cmUgdGhlIGtlcm5lbCBuZnMgc2VydmVyIGlzIGVuYWJsZWQKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcG4tbGludXgteW9jdG8gPSAiIGZlYXR1cmVzL25mc2QvbmZzZC1lbmFibGUuc2NjIgorCisjIFVzZSB0aGUgTFRTSSBLZXJuZWwgZm9yIExTQiBUZXN0aW5nCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19saW51eHN0ZGJhc2UgPz0gIjMuMTQlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3ktdGlueS5jb25mIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3ktdGlueS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMjI3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9kaXN0cm8vcG9reS10aW55LmNvbmYKQEAgLTAsMCArMSwxNDQgQEAKKyMgRGlzdHJpYnV0aW9uIGRlZmluaXRpb24gZm9yOiBwb2t5LXRpbnkKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBhcyBkZXNjcmliZWQgaW4KKyMgLi4vbWV0YS9DT1BZSU5HLk1JVC4KKyMKKyMgUG9reS10aW55IGlzIGludGVuZGVkIHRvIGRlZmluZSBhIHRpbnkgTGludXggc3lzdGVtIGNvbXByaXNlZCBvZiBhCisjIExpbnV4IGtlcm5lbCB0YWlsb3JlZCB0byBzdXBwb3J0IGVhY2ggc3BlY2lmaWMgTUFDSElORSBhbmQgYnVzeWJveC4KKyMgUG9reS10aW55IHNldHMgc29tZSBiYXNpYyBwb2xpY3kgdG8gZW5zdXJlIGEgdXNhYmxlIHN5c3RlbSB3aGlsZSBzdGlsbAorIyBrZWVwaW5nIHRoZSByb290ZnMgYW5kIGtlcm5lbCBpbWFnZSBhcyBzbWFsbCBhcyBwb3NzaWJsZS4KKyMKKyMgVGhlIHBvbGljaWVzIGRlZmluZWQgYXJlIGludGVuZGVkIHRvIG1lZXQgdGhlIGZvbGxvd2luZyBnb2FsczoKKyMgbyBTZXJpYWwgY29uc29sZXMgb25seSAobm8gZnJhbWVidWZmZXIgb3IgVkdBIGNvbnNvbGUpCisjIG8gQmFzaWMgc3VwcG9ydCBmb3IgSVBWNCBuZXR3b3JraW5nCisjIG8gU2luZ2xlIHVzZXIgYXNoIHNoZWxsCisjIG8gU3RhdGljIGltYWdlcyAobm8gc3VwcG9ydCBmb3IgYWRkaW5nIHBhY2thZ2VzIG9yIGxpYnJhcmllcyBsYXRlcikKKyMgbyBSZWFkLW9ubHkgb3IgUkFNRlMgcm9vdCBmaWxlc3lzdGVtCisjIG8gQ29tYmluZWQgTGludXgga2VybmVsICsgcm9vdGZzIGluIHVuZGVyIDRNQgorIyBvIEFsbG93IHRoZSB1c2VyIHRvIHNlbGVjdCBiZXR3ZWVuIGVnbGliYyBvciB1Y2xpYmMgd2l0aCB0aGUgVENMSUJDIHZhcmlhYmxlCisjCisjIFRoaXMgaXMgY3VycmVudGx5IGEgcGFydGlhbCBkZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHRhc2tzIHJlbWFpbjoKKyMgWyBdIEludGVncmF0ZSBsaW51eC15b2N0by10aW55IGt0eXBlIGludG8gbGludXgteW9jdG8KKyMgWyBdIERlZmluZSBsaW51eC15b2N0by10aW55IGNvbmZpZ3MgZm9yIGFsbCBzdXBwb3J0ZWQgQlNQcworIyBbIF0gRHJvcCBsZGNvbmZpZyBmcm9tIHRoZSBpbnN0YWxsYXRpb24KKyMgWyBdIE1vZGlmeSB0aGUgcnVucWVtdSBzY3JpcHRzIHRvIHdvcmsgd2l0aCBleHQyIHBhcmFtZXRlcjoKKyMgICAgIHJ1bnFlbXUgcWVtdXg4NiBxZW11cGFyYW1zPSItbm9ncmFwaGljIiBib290cGFyYW1zPSJjb25zb2xlPXR0eVMwLDExNTIwMCByb290PTA4MDAiIAorIyBbIF0gTW9kaWZ5IGJ1c3lib3ggdG8gYWxsb3cgZm9yIERJU1RST19GRUFUVVJFUy1saWtlIGNvbmZpcnVyYXRpb24KKworcmVxdWlyZSBjb25mL2Rpc3Ryby9wb2t5LmNvbmYKK0RJU1RSTyA9ICJwb2t5LXRpbnkiCisKKyMgRklYTUU6IGNvbnNpZGVyIGFkZGluZyBhIG5ldyAidGlueSIgZmVhdHVyZQorI0RJU1RST19GRUFUVVJFU19hcHBlbmQgPSAiIHRpbnkiCisKKyMgRGlzdHJvIGNvbmZpZyBpcyBldmFsdWF0ZWQgYWZ0ZXIgdGhlIG1hY2hpbmUgY29uZmlnLCBzbyB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkKKyMgc2V0IHRoZSBrZXJuZWwgcHJvdmlkZXIgdG8gb3ZlcnJpZGUgYSBtYWNoaW5lIGNvbmZpZy4KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA9ICJsaW51eC15b2N0by10aW55IgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8tdGlueSA/PSAiMy4xOSUiCisKKyMgV2UgY2FuIHVzZSBwYWNrYWdlZ3JvdXAtY29yZS1ib290LCBidXQgaW4gdGhlIGZ1dHVyZSB3ZSBtYXkgbmVlZCBhIG5ldyBwYWNrYWdlZ3JvdXAtY29yZS10aW55CisjUE9LWV9ERUZBVUxUX0VYVFJBX1JERVBFTkRTICs9ICJwYWNrYWdlZ3JvdXAtY29yZS1ib290IgorIyBEcm9wIGtlcm5lbC1tb2R1bGUtYWYtcGFja2V0IGZyb20gUlJFQ09NTUVORFMKK1BPS1lfREVGQVVMVF9FWFRSQV9SUkVDT01NRU5EUyA9ICIiCisKKyMgRklYTUU6IHdoYXQgc2hvdWxkIHdlIGRvIHdpdGggdGhpcz8KK1RDTElCQ0FQUEVORCA9ICIiCisKKyMgRGlzYWJsZSB3aWRlIGNoYXIgc3VwcG9ydCBmb3IgbmN1cnNlcyBhcyB3ZSBkb24ndCBpbmNsdWRlIGl0IGluCisjIGluIHRoZSBMSUJDIGZlYXR1cmVzIGJlbG93LgorIyBMZWF2ZSBuYXRpdmUgZW5hYmxlIHRvIGF2b2lkIGJ1aWxkIGZhaWx1cmVzCitFTkFCTEVfV0lERUMgPSAiZmFsc2UiCitFTkFCTEVfV0lERUNfY2xhc3MtbmF0aXZlID0gInRydWUiCisKKyMgRHJvcCBuYXRpdmUgbGFuZ3VhZ2Ugc3VwcG9ydC4gVGhpcyByZW1vdmVzIHRoZQorIyBlZ2xpYmMtPmJhc2gtPmdldHRleHQtPmxpYmMtcG9zaXgtY2xhbmctd2NoYXIgZGVwZW5kZW5jeS4KK1VTRV9OTFM9Im5vIgorCisjIFJlY29uZmlndXJlIGVnbGliYyBmb3IgYSBzbWFsbGVyIGluc3RhbGxhdGlvbgorIyBDb21tZW50IG91dCBhbnkgb2YgdGhlIGxpbmVzIGJlbG93IHRvIGRpc2FibGUgdGhlbSBpbiB0aGUgYnVpbGQKK0RJU1RST19GRUFUVVJFU19MSUJDX1RJTlkgPSAibGliYy1saWJtIGxpYmMtY3J5cHQiCitESVNUUk9fRkVBVFVSRVNfTElCQ19USU5ZX2FwcGVuZF94ODYtNjQgPSAiIGxpYmMtbGlibS1iaWciCisKKyMgUmVxdWlyZWQgZm9yICJ3aG8iCitESVNUUk9fRkVBVFVSRVNfTElCQ19NSU5JTUFMID0gImxpYmMtdXRtcCBsaWJjLXV0bXB4IGxpYmMtZ2V0bG9naW4iCitESVNUUk9fRkVBVFVSRVNfTElCQ19SRUdFWCA9ICJsaWJjLXBvc2l4LXJlZ2V4cCIKK0RJU1RST19GRUFUVVJFU19MSUJDX05FVCA9ICJsaWJjLWluZXQgbGliYy1uaXMiCisKK0RJU1RST19GRUFUVVJFU19MSUJDID0gIiR7RElTVFJPX0ZFQVRVUkVTX0xJQkNfVElOWX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtESVNUUk9fRkVBVFVSRVNfTElCQ19NSU5JTUFMfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAke0RJU1RST19GRUFUVVJFU19MSUJDX1JFR0VYfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAke0RJU1RST19GRUFUVVJFU19MSUJDX05FVH0gXAorICAgICAgICAgICAgICAgICAgICAgICAiCisKKyMgQ29tbWVudCBvdXQgYW55IG9mIHRoZSBsaW5lcyBiZWxvdyB0byBkaXNhYmxlIHRoZW0gaW4gdGhlIGJ1aWxkCisjIERJU1RST19GRUFUVVJFUyBvcHRpb25zOgorIyBhbHNhIGJsdWV0b290aCBleHQyIGlyZGEgcGNtY2lhIHVzYmdhZGdldCB1c2Job3N0IHdpZmkgbmZzIHplcm9jb25mIHBjaQorRElTVFJPX0ZFQVRVUkVTX1RJTlkgPSAicGNpIgorRElTVFJPX0ZFQVRVUkVTX05FVCA9ICJpcHY0IgorRElTVFJPX0ZFQVRVUkVTX1VTQiA9ICJ1c2Job3N0IgorI0RJU1RST19GRUFUVVJFU19VU0JHQURHRVQgPSAidXNiZ2FkZ2V0IgorI0RJU1RST19GRUFUVVJFU19XSUZJID0gIndpZmkiCisKK0RJU1RST19GRUFUVVJFUyA9ICIke0RJU1RST19GRUFUVVJFU19USU5ZfSBcCisgICAgICAgICAgICAgICAgICAgJHtESVNUUk9fRkVBVFVSRVNfTkVUfSBcCisgICAgICAgICAgICAgICAgICAgJHtESVNUUk9fRkVBVFVSRVNfVVNCfSBcCisgICAgICAgICAgICAgICAgICAgJHtESVNUUk9fRkVBVFVSRVNfVVNCR0FER0VUfSBcCisgICAgICAgICAgICAgICAgICAgJHtESVNUUk9fRkVBVFVSRVNfV0lGSX0gXAorICAgICAgICAgICAgICAgICAgICR7RElTVFJPX0ZFQVRVUkVTX0xJQkN9IFwKKyAgICAgICAgICAgICAgICAgICIKKworIyBFbmFibGUgTEZTIC0gc2VlIGJ1ZyBZT0NUTyAjNTg2NQorRElTVFJPX0ZFQVRVUkVTX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgbGFyZ2VmaWxlIgorCitESVNUUk9fRkVBVFVSRVNfY2xhc3MtbmF0aXZlID0gIiR7RElTVFJPX0ZFQVRVUkVTX0RFRkFVTFR9ICR7RElTVFJPX0ZFQVRVUkVTX0xJQkN9ICR7UE9LWV9ERUZBVUxUX0RJU1RST19GRUFUVVJFU30iCisKKyMgVXNlIHRtcGRldmZzIGFuZCB0aGUgYnVzeWJveCBydW50aW1lIHNlcnZpY2VzCitWSVJUVUFMLVJVTlRJTUVfZGV2X21hbmFnZXIgPSAiIgorVklSVFVBTC1SVU5USU1FX2xvZ2luX21hbmFnZXIgPSAiIgorVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciA9ICJ0aW55LWluaXQiCitWSVJUVUFMLVJVTlRJTUVfa2V5bWFwcyA9ICIiCisKKyMgRklYTUU6IENvbnNpZGVyIGFkZGluZyAibW9kdWxlcyIgdG8gTUFDSElORV9GRUFUVVJFUyBhbmQgdXNpbmcgdGhhdCBpbgorIyBwYWNrYWdlZ3JvdXAtY29yZS1iYXNlIHRvIHNlbGVjdCBtb2R1dGlscy1pbml0c2NyaXB0cyBvciBub3QuICBTaW1pbGFyIHdpdGggIm5ldCIgYW5kCisjIG5ldGJhc2UuCisKKyMgQnkgZGVmYXVsdCB3ZSBvbmx5IHN1cHBvcnQgaW5pdHJhbWZzLiBXZSBkb24ndCBidWlsZCBsaXZlIGFzIHRoYXQKKyMgcHVsbHMgaW4gYSBsb3Qgb2YgZGVwZW5kZW5jaWVzIGZvciB0aGUgbGl2ZSBpbWFnZSBhbmQgdGhlIGluc3RhbGxlciwgbGlrZQorIyB1ZGV2LCBncnViLCBldGMuICBUaGVzZSBwdWxsIGluIGdldHRleHQsIHdoaWNoIGZhaWxzIHRvIGJ1aWxkIHdpdGggd2lkZQorIyBjaGFyYWN0ZXIgc3VwcG9ydC4KK0lNQUdFX0ZTVFlQRVMgPSAiY3Bpby5neiIKKworIyBEcm9wIHY4NmQgZnJvbSBxZW11IGRlcGVuZGVuY3kgbGlzdCAod2Ugc3VwcG9ydCBzZXJpYWwpCisjIERyb3AgZ3J1YiBmcm9tIG1ldGEtaW50ZWwgQlNQcworIyBGSVhNRTogQSBkaWZmZXJlbnQgbWVjaGFuaXNtIGlzIG5lZWRlZCBoZXJlLiBXZSBjb3VsZCBkZWZpbmUgLXRpbnkKKyMgICAgICAgIHZhcmlhbnRzIG9mIGFsbCBjb21wYXRpYmxlIG1hY2hpbmVzLCBidXQgdGhhdCBsZWFkcyB0byBhIGxvdAorIyAgICAgICAgbW9yZSBtYWNoaW5lIGNvbmZpZ3MgdG8gbWFpbnRhaW4gbG9uZyB0ZXJtLgorTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFMgPSAiIgorCisjIFRoZSBtdHJhY2Ugc2NyaXB0IGluY2x1ZGVkIGJ5IGVnbGliYyBpcyBhIHBlcmwgc2NyaXB0LiBUaGlzIG1lYW5zIHRoZSBzeXN0ZW0KKyMgd2lsbCBidWlsZCBwZXJsIGluIGNhc2UgdGhpcyBwYWNrYWdlIGlzIGluc3RhbGxlZC4gU2luY2Ugd2UgZG9uJ3QgY2FyZSBhYm91dAorIyB0aGlzIHNjcmlwdCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRpbnksIHJlbW92ZSB0aGUgZGVwZW5kZW5jeSBmcm9tIGhlcmUuCitSREVQRU5EU18ke1BOfS1tdHJhY2VfcG4tZWdsaWJjID0gIiIKKworUE5CTEFDS0xJU1RbYnVpbGQtYXBwbGlhbmNlLWltYWdlXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1iYXNlXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1jbHV0dGVyXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1kaXJlY3RmYl0gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW2NvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1sc2JdID0gIm5vdCBidWlsZGFibGUgd2l0aCBwb2t5LXRpbnkiCitQTkJMQUNLTElTVFtjb3JlLWltYWdlLWxzYi1kZXZdID0gIm5vdCBidWlsZGFibGUgd2l0aCBwb2t5LXRpbnkiCitQTkJMQUNLTElTVFtjb3JlLWltYWdlLWxzYi1zZGtdID0gIm5vdCBidWlsZGFibGUgd2l0aCBwb2t5LXRpbnkiCitQTkJMQUNLTElTVFtjb3JlLWltYWdlLXJ0XSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1ydC1zZGtdID0gIm5vdCBidWlsZGFibGUgd2l0aCBwb2t5LXRpbnkiCitQTkJMQUNLTElTVFtjb3JlLWltYWdlLXNhdG9dID0gIm5vdCBidWlsZGFibGUgd2l0aCBwb2t5LXRpbnkiCitQTkJMQUNLTElTVFtjb3JlLWltYWdlLXNhdG8tZGV2XSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1zYXRvLXNka10gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW2NvcmUtaW1hZ2UteDExXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbcXQ0ZS1kZW1vLWltYWdlXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS13ZXN0b25dID0gIm5vdCBidWlsZGFibGUgd2l0aCBwb2t5LXRpbnkiCisKKyMgRGlzYWJsZSBweXRob24gdXNhZ2UgaW4gb3BrZy11dGlscyBzaW5jZSBpdCB3b24ndCBidWlsZCB3aXRoIHRpbnkgY29uZmlnCitQQUNLQUdFQ09ORklHX3BuLW9wa2ctdXRpbHMgPSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3kuY29uZiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjMTdmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LmNvbmYKQEAgLTAsMCArMSwxMDQgQEAKK0RJU1RSTyA9ICJwb2t5IgorRElTVFJPX05BTUUgPSAiUG9reSAoWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgRGlzdHJvKSIKK0RJU1RST19WRVJTSU9OID0gIjEuOCtzbmFwc2hvdC0ke0RBVEV9IgorRElTVFJPX0NPREVOQU1FID0gIm1hc3RlciIKK1NES19WRU5ET1IgPSAiLXBva3lzZGsiCitTREtfVkVSU0lPTiA6PSAiJHtAJyR7RElTVFJPX1ZFUlNJT059Jy5yZXBsYWNlKCdzbmFwc2hvdC0ke0RBVEV9Jywnc25hcHNob3QnKX0iCisKK01BSU5UQUlORVIgPSAiUG9reSA8cG9reUB5b2N0b3Byb2plY3Qub3JnPiIKKworVEFSR0VUX1ZFTkRPUiA9ICItcG9reSIKKworTE9DQUxDT05GX1ZFUlNJT04gPSAiMSIKKworIyBPdmVycmlkZSB0aGVzZSBpbiBwb2t5IGJhc2VkIGRpc3Ryb3MKK1BPS1lfREVGQVVMVF9ESVNUUk9fRkVBVFVSRVMgPSAibGFyZ2VmaWxlIG9wZW5nbCBwdGVzdCBtdWx0aWFyY2ggd2F5bGFuZCIKK1BPS1lfREVGQVVMVF9FWFRSQV9SREVQRU5EUyA9ICJwYWNrYWdlZ3JvdXAtY29yZS1ib290IgorUE9LWV9ERUZBVUxUX0VYVFJBX1JSRUNPTU1FTkRTID0gImtlcm5lbC1tb2R1bGUtYWYtcGFja2V0IgorCitESVNUUk9fRkVBVFVSRVMgPz0gIiR7RElTVFJPX0ZFQVRVUkVTX0RFRkFVTFR9ICR7RElTVFJPX0ZFQVRVUkVTX0xJQkN9ICR7UE9LWV9ERUZBVUxUX0RJU1RST19GRUFUVVJFU30iCisKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID89ICI0LjElIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdXg4NiA/PSAiNC4xJSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvX3FlbXV4ODYtNjQgPz0gIjQuMSUiCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19xZW11YXJtID89ICI0LjElIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdW1pcHMgPz0gIjQuMSUiCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19xZW11bWlwczY0ID89ICI0LjElIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdXBwYyA/PSAiNC4xJSIKKworU0RLX05BTUUgPSAiJHtESVNUUk99LSR7VENMSUJDfS0ke1NES19BUkNIfS0ke0lNQUdFX0JBU0VOQU1FfS0ke1RVTkVfUEtHQVJDSH0iCitTREtQQVRIID0gIi9vcHQvJHtESVNUUk99LyR7U0RLX1ZFUlNJT059IgorCitESVNUUk9fRVhUUkFfUkRFUEVORFMgKz0gIiAke1BPS1lfREVGQVVMVF9FWFRSQV9SREVQRU5EU30iCitESVNUUk9fRVhUUkFfUlJFQ09NTUVORFMgKz0gIiAke1BPS1lfREVGQVVMVF9FWFRSQV9SUkVDT01NRU5EU30iCisKK1BPS1lRRU1VREVQUyA9ICIke0BiYi51dGlscy5jb250YWlucygiSU5DT01QQVRJQkxFX0xJQ0VOU0UiLCAiR1BMLTMuMCIsICIiLCAicGFja2FnZWdyb3VwLWNvcmUtZGV2aWNlLWRldmVsIixkKX0iCitESVNUUk9fRVhUUkFfUkRFUEVORFNfYXBwZW5kX3FlbXVhcm0gPSAiICR7UE9LWVFFTVVERVBTfSIKK0RJU1RST19FWFRSQV9SREVQRU5EU19hcHBlbmRfcWVtdWFybTY0ID0gIiAke1BPS1lRRU1VREVQU30iCitESVNUUk9fRVhUUkFfUkRFUEVORFNfYXBwZW5kX3FlbXVtaXBzID0gIiAke1BPS1lRRU1VREVQU30iCitESVNUUk9fRVhUUkFfUkRFUEVORFNfYXBwZW5kX3FlbXVwcGMgPSAiICR7UE9LWVFFTVVERVBTfSIKK0RJU1RST19FWFRSQV9SREVQRU5EU19hcHBlbmRfcWVtdXg4NiA9ICIgJHtQT0tZUUVNVURFUFN9IgorRElTVFJPX0VYVFJBX1JERVBFTkRTX2FwcGVuZF9xZW11eDg2LTY0ID0gIiAke1BPS1lRRU1VREVQU30iCisKK1RDTElCQ0FQUEVORCA9ICIiCisKK1FFTVVfVEFSR0VUUyA/PSAiYXJtIGFhcmNoNjQgaTM4NiBtaXBzIG1pcHNlbCBtaXBzNjQgcHBjIHg4Nl82NCIKKyMgT3RoZXIgUUVNVV9UQVJHRVRTICJtaXBzNjRlbCBzaDQiCisKK1BSRU1JUlJPUlMgPz89ICJcCitienI6Ly8uKi8uKiAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorY3ZzOi8vLiovLiogICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK2dpdDovLy4qLy4qICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitnaXRzbTovLy4qLy4qIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAoraGc6Ly8uKi8uKiAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK29zYzovLy4qLy4qICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitwNDovLy4qLy4qICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorc3ZuOi8vLiovLiogICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIgorCitNSVJST1JTID0rICJcCitmdHA6Ly8uKi8uKiAgICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAoraHR0cDovLy4qLy4qICAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK2h0dHBzOi8vLiovLiogICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiIKKworIyBUaGUgQ09OTkVDVElWSVRZX0NIRUNLX1VSSSdzIGFyZSB1c2VkIHRvIHRlc3Qgd2hldGhlciB3ZSBjYW4gc3VjY2VzZnVsbHkKKyMgZmV0Y2ggZnJvbSB0aGUgbmV0d29yayAoYW5kIHdhcm4geW91IGlmIG5vdCkuIFRvIGRpc2FibGUgdGhlIHRlc3Qgc2V0CisjIHRoZSB2YXJpYWJsZSB0byBiZSBlbXB0eS4KKyMgR2l0IGV4YW1wbGUgdXJsOiBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1maXJld2FsbC10ZXN0O3Byb3RvY29sPWdpdDtyZXY9bWFzdGVyCisKK0NPTk5FQ1RJVklUWV9DSEVDS19VUklTID89ICIgXAorICAgICAgICAgICAgIGh0dHBzOi8vZXVsYS1kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9pbmRleC5waHAgXAorICAgICAgICAgICAgIGh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3JlcG9ydC5jZ2kiCisKK1NBTklUWV9URVNURURfRElTVFJPUyA/PSAiIFwKKyAgICAgICAgICAgIHBva3ktMS43IFxuIFwKKyAgICAgICAgICAgIHBva3ktMS44IFxuIFwKKyAgICAgICAgICAgIFVidW50dS0xNC4wNCBcbiBcCisgICAgICAgICAgICBVYnVudHUtMTQuMTAgXG4gXAorICAgICAgICAgICAgVWJ1bnR1LTE1LjA0IFxuIFwKKyAgICAgICAgICAgIEZlZG9yYS0yMSBcbiBcCisgICAgICAgICAgICBDZW50T1MtNi4qIFxuIFwKKyAgICAgICAgICAgIENlbnRPUy03LiogXG4gXAorICAgICAgICAgICAgRGViaWFuLTcuKiBcbiBcCisgICAgICAgICAgICBEZWJpYW4tOC4qIFxuIFwKKyAgICAgICAgICAgIG9wZW5TVVNFLXByb2plY3QtMTMuMiBcbiBcCisgICAgICAgICAgICAiCisKKyMgRGVmYXVsdCBoYXNoIHBvbGljeSBmb3IgZGlzdHJvCitCQl9TSUdOQVRVUkVfSEFORExFUiA/PSAnT0VCYXNpY0hhc2gnCisjCisjIE9FTEFZT1VUX0FCSSBhbGxvd3MgdXMgdG8gbm90aWZ5IHVzZXJzIHdoZW4gdGhlIGZvcm1hdCBvZiBUTVBESVIgY2hhbmdlcyBpbiAKKyMgYW4gaW5jb21wYXRpYmxlIHdheS4gU3VjaCBjaGFuZ2VzIHNob3VsZCB1c3VhbGx5IGJlIGRldGFpbGVkIGluIHRoZSBjb21taXQKKyMgdGhhdCBicmVha3MgdGhlIGZvcm1hdCBhbmQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgZGlzY3Vzc2VkIG9uIHRoZSBtYWlsaW5nIGxpc3QgCisjIHdpdGggZ2VuZXJhbCBhZ3JlZW1lbnQgZnJvbSB0aGUgY29yZSB0ZWFtLgorIworT0VMQVlPVVRfQUJJID0gIjExIgorCisjIGFkZCBwb2t5IHNhbml0eSBiYmNsYXNzCitJTkhFUklUICs9ICJwb2t5LXNhbml0eSIKKworIyBRQSBjaGVjayBzZXR0aW5ncyAtIGEgbGl0dGxlIHN0cmljdGVyIHRoYW4gdGhlIE9FLUNvcmUgZGVmYXVsdHMKK1dBUk5fVE9fRVJST1JfUUEgPSAiYWxyZWFkeS1zdHJpcHBlZCBjb21waWxlLWhvc3QtcGF0aCBpbnN0YWxsLWhvc3QtcGF0aCBcCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZC12cy1zaGlwcGVkIGxkZmxhZ3MgcG4tb3ZlcnJpZGVzIHJwYXRocyBzdGF0aWNkZXYgXAorICAgICAgICAgICAgICAgICAgICB1c2VsZXNzLXJwYXRocyIKK1dBUk5fUUFfcmVtb3ZlID0gIiR7V0FSTl9UT19FUlJPUl9RQX0iCitFUlJPUl9RQV9hcHBlbmQgPSAiICR7V0FSTl9UT19FUlJPUl9RQX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9sYXllci5jb25mIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvbGF5ZXIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTQyYjUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvbGF5ZXIuY29uZgpAQCAtMCwwICsxLDE2IEBACisjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorQkJQQVRIID0uICIke0xBWUVSRElSfToiCisKKyMgV2UgaGF2ZSByZWNpcGVzLSogZGlyZWN0b3JpZXMsIGFkZCB0byBCQkZJTEVTCitCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiIFwKKyAgICAgICAgICAgICR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmJhcHBlbmQiCisKK0JCRklMRV9DT0xMRUNUSU9OUyArPSAieW9jdG8iCitCQkZJTEVfUEFUVEVSTl95b2N0byA9ICJeJHtMQVlFUkRJUn0vIgorQkJGSUxFX1BSSU9SSVRZX3lvY3RvID0gIjUiCisKKyMgVGhpcyBzaG91bGQgb25seSBiZSBpbmNyZW1lbnRlZCBvbiBzaWduaWZpY2FudCBjaGFuZ2VzIHRoYXQgd2lsbAorIyBjYXVzZSBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoIG90aGVyIGxheWVycworTEFZRVJWRVJTSU9OX3lvY3RvID0gIjIiCisKK0xBWUVSREVQRU5EU195b2N0byA9ICJjb3JlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvbG9jYWwuY29uZi5zYW1wbGUgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9sb2NhbC5jb25mLnNhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzEzNDlkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvbG9jYWwuY29uZi5zYW1wbGUKQEAgLTAsMCArMSwyMzYgQEAKKyMKKyMgVGhpcyBmaWxlIGlzIHlvdXIgbG9jYWwgY29uZmlndXJhdGlvbiBmaWxlIGFuZCBpcyB3aGVyZSBhbGwgbG9jYWwgdXNlciBzZXR0aW5ncworIyBhcmUgcGxhY2VkLiBUaGUgY29tbWVudHMgaW4gdGhpcyBmaWxlIGdpdmUgc29tZSBndWlkZSB0byB0aGUgb3B0aW9ucyBhIG5ldyB1c2VyCisjIHRvIHRoZSBzeXN0ZW0gbWlnaHQgd2FudCB0byBjaGFuZ2UgYnV0IHByZXR0eSBtdWNoIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbiBjYW4KKyMgYmUgc2V0IGluIHRoaXMgZmlsZS4gTW9yZSBhZHZlbnR1cm91cyB1c2VycyBjYW4gbG9vayBhdCBsb2NhbC5jb25mLmV4dGVuZGVkIAorIyB3aGljaCBjb250YWlucyBvdGhlciBleGFtcGxlcyBvZiBjb25maWd1cmF0aW9uIHdoaWNoIGNhbiBiZSBwbGFjZWQgaW4gdGhpcyBmaWxlCisjIGJ1dCBuZXcgdXNlcnMgbGlrZWx5IHdvbid0IG5lZWQgYW55IG9mIHRoZW0gaW5pdGlhbGx5LgorIworIyBMaW5lcyBzdGFydGluZyB3aXRoIHRoZSAnIycgY2hhcmFjdGVyIGFyZSBjb21tZW50ZWQgb3V0IGFuZCBpbiBzb21lIGNhc2VzIHRoZSAKKyMgZGVmYXVsdCB2YWx1ZXMgYXJlIHByb3ZpZGVkIGFzIGNvbW1lbnRzIHRvIHNob3cgcGVvcGxlIGV4YW1wbGUgc3ludGF4LiBFbmFibGluZworIyB0aGUgb3B0aW9uIGlzIGEgcXVlc3Rpb24gb2YgcmVtb3ZpbmcgdGhlICMgY2hhcmFjdGVyIGFuZCBtYWtpbmcgYW55IGNoYW5nZSB0byB0aGUKKyMgdmFyaWFibGUgYXMgcmVxdWlyZWQuCisKKyMKKyMgTWFjaGluZSBTZWxlY3Rpb24KKyMKKyMgWW91IG5lZWQgdG8gc2VsZWN0IGEgc3BlY2lmaWMgbWFjaGluZSB0byB0YXJnZXQgdGhlIGJ1aWxkIHdpdGguIFRoZXJlIGFyZSBhIHNlbGVjdGlvbgorIyBvZiBlbXVsYXRlZCBtYWNoaW5lcyBhdmFpbGFibGUgd2hpY2ggY2FuIGJvb3QgYW5kIHJ1biBpbiB0aGUgUUVNVSBlbXVsYXRvcjoKKyMKKyNNQUNISU5FID89ICJxZW11YXJtIgorI01BQ0hJTkUgPz0gInFlbXVhcm02NCIKKyNNQUNISU5FID89ICJxZW11bWlwcyIKKyNNQUNISU5FID89ICJxZW11cHBjIgorI01BQ0hJTkUgPz0gInFlbXV4ODYiCisjTUFDSElORSA/PSAicWVtdXg4Ni02NCIKKyMKKyMgVGhlcmUgYXJlIGFsc28gdGhlIGZvbGxvd2luZyBoYXJkd2FyZSBib2FyZCB0YXJnZXQgbWFjaGluZXMgaW5jbHVkZWQgZm9yIAorIyBkZW1vbnN0cmF0aW9uIHB1cnBvc2VzOgorIworI01BQ0hJTkUgPz0gImJlYWdsZWJvbmUiCisjTUFDSElORSA/PSAiZ2VuZXJpY3g4NiIKKyNNQUNISU5FID89ICJnZW5lcmljeDg2LTY0IgorI01BQ0hJTkUgPz0gIm1wYzgzMTVlLXJkYiIKKyNNQUNISU5FID89ICJlZGdlcm91dGVyIgorIworIyBUaGlzIHNldHMgdGhlIGRlZmF1bHQgbWFjaGluZSB0byBiZSBxZW11eDg2IGlmIG5vIG90aGVyIG1hY2hpbmUgaXMgc2VsZWN0ZWQ6CitNQUNISU5FID8/PSAicWVtdXg4NiIKKworIworIyBXaGVyZSB0byBwbGFjZSBkb3dubG9hZHMKKyMKKyMgRHVyaW5nIGEgZmlyc3QgYnVpbGQgdGhlIHN5c3RlbSB3aWxsIGRvd25sb2FkIG1hbnkgZGlmZmVyZW50IHNvdXJjZSBjb2RlIHRhcmJhbGxzCisjIGZyb20gdmFyaW91cyB1cHN0cmVhbSBwcm9qZWN0cy4gVGhpcyBjYW4gdGFrZSBhIHdoaWxlLCBwYXJ0aWN1bGFybHkgaWYgeW91ciBuZXR3b3JrCisjIGNvbm5lY3Rpb24gaXMgc2xvdy4gVGhlc2UgYXJlIGFsbCBzdG9yZWQgaW4gRExfRElSLiBXaGVuIHdpcGluZyBhbmQgcmVidWlsZGluZyB5b3UKKyMgY2FuIHByZXNlcnZlIHRoaXMgZGlyZWN0b3J5IHRvIHNwZWVkIHVwIHRoaXMgcGFydCBvZiBzdWJzZXF1ZW50IGJ1aWxkcy4gVGhpcyBkaXJlY3RvcnkKKyMgaXMgc2FmZSB0byBzaGFyZSBiZXR3ZWVuIG11bHRpcGxlIGJ1aWxkcyBvbiB0aGUgc2FtZSBtYWNoaW5lIHRvby4KKyMKKyMgVGhlIGRlZmF1bHQgaXMgYSBkb3dubG9hZHMgZGlyZWN0b3J5IHVuZGVyIFRPUERJUiB3aGljaCBpcyB0aGUgYnVpbGQgZGlyZWN0b3J5LgorIworI0RMX0RJUiA/PSAiJHtUT1BESVJ9L2Rvd25sb2FkcyIKKworIworIyBXaGVyZSB0byBwbGFjZSBzaGFyZWQtc3RhdGUgZmlsZXMKKyMKKyMgQml0QmFrZSBoYXMgdGhlIGNhcGFiaWxpdHkgdG8gYWNjZWxlcmF0ZSBidWlsZHMgYmFzZWQgb24gcHJldmlvdXNseSBidWlsdCBvdXRwdXQuCisjIFRoaXMgaXMgZG9uZSB1c2luZyAic2hhcmVkIHN0YXRlIiBmaWxlcyB3aGljaCBjYW4gYmUgdGhvdWdodCBvZiBhcyBjYWNoZSBvYmplY3RzCisjIGFuZCB0aGlzIG9wdGlvbiBkZXRlcm1pbmVzIHdoZXJlIHRob3NlIGZpbGVzIGFyZSBwbGFjZWQuCisjCisjIFlvdSBjYW4gd2lwZSBvdXQgVE1QRElSIGxlYXZpbmcgdGhpcyBkaXJlY3RvcnkgaW50YWN0IGFuZCB0aGUgYnVpbGQgd291bGQgcmVnZW5lcmF0ZQorIyBmcm9tIHRoZXNlIGZpbGVzIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlIHRvIHRoZSBjb25maWd1cmF0aW9uLiBJZiBjaGFuZ2VzIHdlcmUgbWFkZQorIyB0byB0aGUgY29uZmlndXJhdGlvbiwgb25seSBzaGFyZWQgc3RhdGUgZmlsZXMgd2hlcmUgdGhlIHN0YXRlIHdhcyBzdGlsbCB2YWxpZCB3b3VsZAorIyBiZSB1c2VkIChkb25lIHVzaW5nIGNoZWNrc3VtcykuCisjCisjIFRoZSBkZWZhdWx0IGlzIGEgc3N0YXRlLWNhY2hlIGRpcmVjdG9yeSB1bmRlciBUT1BESVIuCisjCisjU1NUQVRFX0RJUiA/PSAiJHtUT1BESVJ9L3NzdGF0ZS1jYWNoZSIKKworIworIyBXaGVyZSB0byBwbGFjZSB0aGUgYnVpbGQgb3V0cHV0CisjCisjIFRoaXMgb3B0aW9uIHNwZWNpZmllcyB3aGVyZSB0aGUgYnVsayBvZiB0aGUgYnVpbGRpbmcgd29yayBzaG91bGQgYmUgZG9uZSBhbmQKKyMgd2hlcmUgQml0QmFrZSBzaG91bGQgcGxhY2UgaXRzIHRlbXBvcmFyeSBmaWxlcyBhbmQgb3V0cHV0LiBLZWVwIGluIG1pbmQgdGhhdAorIyB0aGlzIGluY2x1ZGVzIHRoZSBleHRyYWN0aW9uIGFuZCBjb21waWxhdGlvbiBvZiBtYW55IGFwcGxpY2F0aW9ucyBhbmQgdGhlIHRvb2xjaGFpbgorIyB3aGljaCBjYW4gdXNlIEdpZ2FieXRlcyBvZiBoYXJkIGRpc2sgc3BhY2UuCisjCisjIFRoZSBkZWZhdWx0IGlzIGEgdG1wIGRpcmVjdG9yeSB1bmRlciBUT1BESVIuCisjCisjVE1QRElSID0gIiR7VE9QRElSfS90bXAiCisKKyMKKyMgRGVmYXVsdCBwb2xpY3kgY29uZmlnCisjCisjIFRoZSBkaXN0cmlidXRpb24gc2V0dGluZyBjb250cm9scyB3aGljaCBwb2xpY3kgc2V0dGluZ3MgYXJlIHVzZWQgYXMgZGVmYXVsdHMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGZpbmUgZm9yIGdlbmVyYWwgWW9jdG8gcHJvamVjdCB1c2UsIGF0IGxlYXN0IGluaXRpYWxseS4KKyMgVWx0aW1hdGVseSB3aGVuIGNyZWF0aW5nIGN1c3RvbSBwb2xpY3ksIHBlb3BsZSB3aWxsIGxpa2VseSBlbmQgdXAgc3ViY2xhc3NpbmcgCisjIHRoZXNlIGRlZmF1bHRzLgorIworRElTVFJPID89ICJwb2t5IgorIyBBcyBhbiBleGFtcGxlIG9mIGEgc3ViY2xhc3MgdGhlcmUgaXMgYSAiYmxlZWRpbmciIGVkZ2UgcG9saWN5IGNvbmZpZ3VyYXRpb24KKyMgd2hlcmUgbWFueSB2ZXJzaW9ucyBhcmUgc2V0IHRvIHRoZSBhYnNvbHV0ZSBsYXRlc3QgY29kZSBmcm9tIHRoZSB1cHN0cmVhbSAKKyMgc291cmNlIGNvbnRyb2wgc3lzdGVtcy4gVGhpcyBpcyBqdXN0IG1lbnRpb25lZCBoZXJlIGFzIGFuIGV4YW1wbGUsIGl0cyBub3QKKyMgdXNlZnVsIHRvIG1vc3QgbmV3IHVzZXJzLgorIyBESVNUUk8gPz0gInBva3ktYmxlZWRpbmciCisKKyMKKyMgUGFja2FnZSBNYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24KKyMKKyMgVGhpcyB2YXJpYWJsZSBsaXN0cyB3aGljaCBwYWNrYWdpbmcgZm9ybWF0cyB0byBlbmFibGUuIE11bHRpcGxlIHBhY2thZ2UgYmFja2VuZHMgCisjIGNhbiBiZSBlbmFibGVkIGF0IG9uY2UgYW5kIHRoZSBmaXJzdCBpdGVtIGxpc3RlZCBpbiB0aGUgdmFyaWFibGUgd2lsbCBiZSB1c2VkIAorIyB0byBnZW5lcmF0ZSB0aGUgcm9vdCBmaWxlc3lzdGVtcy4KKyMgT3B0aW9ucyBhcmU6CisjICAtICdwYWNrYWdlX2RlYicgZm9yIGRlYmlhbiBzdHlsZSBkZWIgZmlsZXMKKyMgIC0gJ3BhY2thZ2VfaXBrJyBmb3IgaXBrIGZpbGVzIGFyZSB1c2VkIGJ5IG9wa2cgKGEgZGViaWFuIHN0eWxlIGVtYmVkZGVkIHBhY2thZ2UgbWFuYWdlcikKKyMgIC0gJ3BhY2thZ2VfcnBtJyBmb3IgcnBtIHN0eWxlIHBhY2thZ2VzCisjIEUuZy46IFBBQ0tBR0VfQ0xBU1NFUyA/PSAicGFja2FnZV9ycG0gcGFja2FnZV9kZWIgcGFja2FnZV9pcGsiCisjIFdlIGRlZmF1bHQgdG8gcnBtOgorUEFDS0FHRV9DTEFTU0VTID89ICJwYWNrYWdlX3JwbSIKKworIworIyBTREsvQURUIHRhcmdldCBhcmNoaXRlY3R1cmUKKyMKKyMgVGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGFyY2hpdGVjdHVyZSB0byBidWlsZCBTREsvQURUIGl0ZW1zIGZvciBhbmQgbWVhbnMKKyMgeW91IGNhbiBidWlsZCB0aGUgU0RLIHBhY2thZ2VzIGZvciBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIG1hY2hpbmUgeW91IGFyZSAKKyMgcnVubmluZyB0aGUgYnVpbGQgb24gKGkuZS4gYnVpbGRpbmcgaTY4NiBwYWNrYWdlcyBvbiBhbiB4ODZfNjQgaG9zdCkuCisjIFN1cHBvcnRlZCB2YWx1ZXMgYXJlIGk2ODYgYW5kIHg4Nl82NAorI1NES01BQ0hJTkUgPz0gImk2ODYiCisKKyMKKyMgRXh0cmEgaW1hZ2UgY29uZmlndXJhdGlvbiBkZWZhdWx0cworIworIyBUaGUgRVhUUkFfSU1BR0VfRkVBVFVSRVMgdmFyaWFibGUgYWxsb3dzIGV4dHJhIHBhY2thZ2VzIHRvIGJlIGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgCisjIGltYWdlcy4gU29tZSBvZiB0aGVzZSBvcHRpb25zIGFyZSBhZGRlZCB0byBjZXJ0YWluIGltYWdlIHR5cGVzIGF1dG9tYXRpY2FsbHkuIFRoZQorIyB2YXJpYWJsZSBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisjICAiZGJnLXBrZ3MiICAgICAgIC0gYWRkIC1kYmcgcGFja2FnZXMgZm9yIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMKKyMgICAgICAgICAgICAgICAgICAgICAoYWRkcyBzeW1ib2wgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZy9wcm9maWxpbmcpCisjICAiZGV2LXBrZ3MiICAgICAgIC0gYWRkIC1kZXYgcGFja2FnZXMgZm9yIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMKKyMgICAgICAgICAgICAgICAgICAgICAodXNlZnVsIGlmIHlvdSB3YW50IHRvIGRldmVsb3AgYWdhaW5zdCBsaWJzIGluIHRoZSBpbWFnZSkKKyMgICJwdGVzdC1wa2dzIiAgICAgLSBhZGQgLXB0ZXN0IHBhY2thZ2VzIGZvciBhbGwgcHRlc3QtZW5hYmxlZCBwYWNrYWdlcworIyAgICAgICAgICAgICAgICAgICAgICh1c2VmdWwgaWYgeW91IHdhbnQgdG8gcnVuIHRoZSBwYWNrYWdlIHRlc3Qgc3VpdGVzKQorIyAgInRvb2xzLXNkayIgICAgICAtIGFkZCBkZXZlbG9wbWVudCB0b29scyAoZ2NjLCBtYWtlLCBwa2djb25maWcgZXRjLikKKyMgICJ0b29scy1kZWJ1ZyIgICAgLSBhZGQgZGVidWdnaW5nIHRvb2xzIChnZGIsIHN0cmFjZSkKKyMgICJlY2xpcHNlLWRlYnVnIiAgLSBhZGQgRWNsaXBzZSByZW1vdGUgZGVidWdnaW5nIHN1cHBvcnQKKyMgICJ0b29scy1wcm9maWxlIiAgLSBhZGQgcHJvZmlsaW5nIHRvb2xzIChvcHJvZmlsZSwgZXhtYXAsIGx0dG5nLCB2YWxncmluZCkKKyMgICJ0b29scy10ZXN0YXBwcyIgLSBhZGQgdXNlZnVsIHRlc3RpbmcgdG9vbHMgKHRzX3ByaW50LCBhcGxheSwgYXJlY29yZCBldGMuKQorIyAgImRlYnVnLXR3ZWFrcyIgICAtIG1ha2UgYW4gaW1hZ2Ugc3VpdGFibGUgZm9yIGRldmVsb3BtZW50CisjICAgICAgICAgICAgICAgICAgICAgZS5nLiBzc2ggcm9vdCBhY2Nlc3MgaGFzIGEgYmxhbmsgcGFzc3dvcmQKKyMgVGhlcmUgYXJlIG90aGVyIGFwcGxpY2F0aW9uIHRhcmdldHMgdGhhdCBjYW4gYmUgdXNlZCBoZXJlIHRvbywgc2VlCisjIG1ldGEvY2xhc3Nlcy9pbWFnZS5iYmNsYXNzIGFuZCBtZXRhL2NsYXNzZXMvY29yZS1pbWFnZS5iYmNsYXNzIGZvciBtb3JlIGRldGFpbHMuCisjIFdlIGRlZmF1bHQgdG8gZW5hYmxpbmcgdGhlIGRlYnVnZ2luZyB0d2Vha3MuCitFWFRSQV9JTUFHRV9GRUFUVVJFUyA9ICJkZWJ1Zy10d2Vha3MiCisKKyMKKyMgQWRkaXRpb25hbCBpbWFnZSBmZWF0dXJlcworIworIyBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBhZGRpdGlvbmFsIGNsYXNzZXMgdG8gdXNlIHdoZW4gYnVpbGRpbmcgaW1hZ2VzIHdoaWNoCisjIGVuYWJsZSBleHRyYSBmZWF0dXJlcy4gU29tZSBhdmFpbGFibGUgb3B0aW9ucyB3aGljaCBjYW4gYmUgaW5jbHVkZWQgaW4gdGhpcyB2YXJpYWJsZSAKKyMgYXJlOgorIyAgIC0gJ2J1aWxkc3RhdHMnIGNvbGxlY3QgYnVpbGQgc3RhdGlzdGljcworIyAgIC0gJ2ltYWdlLW1rbGlicycgdG8gcmVkdWNlIHNoYXJlZCBsaWJyYXJ5IGZpbGVzIHNpemUgZm9yIGFuIGltYWdlCisjICAgLSAnaW1hZ2UtcHJlbGluaycgaW4gb3JkZXIgdG8gcHJlbGluayB0aGUgZmlsZXN5c3RlbSBpbWFnZQorIyAgIC0gJ2ltYWdlLXN3YWInIHRvIHBlcmZvcm0gaG9zdCBzeXN0ZW0gaW50cnVzaW9uIGRldGVjdGlvbgorIyBOT1RFOiBpZiBsaXN0aW5nIG1rbGlicyAmIHByZWxpbmsgYm90aCwgdGhlbiBtYWtlIHN1cmUgbWtsaWJzIGlzIGJlZm9yZSBwcmVsaW5rCisjIE5PVEU6IG1rbGlicyBhbHNvIG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgZW5hYmxlZCBmb3IgYSBnaXZlbiBpbWFnZSwgc2VlIGxvY2FsLmNvbmYuZXh0ZW5kZWQKK1VTRVJfQ0xBU1NFUyA/PSAiYnVpbGRzdGF0cyBpbWFnZS1ta2xpYnMgaW1hZ2UtcHJlbGluayIKKworIworIyBSdW50aW1lIHRlc3Rpbmcgb2YgaW1hZ2VzCisjCisjIFRoZSBidWlsZCBzeXN0ZW0gY2FuIHRlc3QgYm9vdGluZyB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2VzIHVuZGVyIHFlbXUgKGFuIGVtdWxhdG9yKQorIyBhZnRlciBhbnkgcm9vdCBmaWxlc3lzdGVtcyBhcmUgY3JlYXRlZCBhbmQgcnVuIHRlc3RzIGFnYWluc3QgdGhvc2UgaW1hZ2VzLiBUbworIyBlbmFibGUgdGhpcyB1bmNvbW1lbnQgdGhpcyBsaW5lLiBTZWUgY2xhc3Nlcy90ZXN0aW1hZ2UoLWF1dG8pLmJiY2xhc3MgZm9yCisjIGZ1cnRoZXIgZGV0YWlscy4KKyNURVNUX0lNQUdFID0gIjEiCisjCisjIEludGVyYWN0aXZlIHNoZWxsIGNvbmZpZ3VyYXRpb24KKyMKKyMgVW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzIHRoZSBzeXN0ZW0gbWF5IG5lZWQgaW5wdXQgZnJvbSB5b3UgYW5kIHRvIGRvIHRoaXMgaXQgCisjIGNhbiBsYXVuY2ggYW4gaW50ZXJhY3RpdmUgc2hlbGwuIEl0IG5lZWRzIHRvIGRvIHRoaXMgc2luY2UgdGhlIGJ1aWxkIGlzIAorIyBtdWx0aXRocmVhZGVkIGFuZCBuZWVkcyB0byBiZSBhYmxlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtb3JlIHRoYW4gb25lIHBhcmFsbGVsCisjIHByb2Nlc3MgbWF5IHJlcXVpcmUgdGhlIHVzZXIncyBhdHRlbnRpb24uIFRoZSBkZWZhdWx0IGlzIGl0ZXJhdGUgb3ZlciB0aGUgYXZhaWxhYmxlCisjIHRlcm1pbmFsIHR5cGVzIHRvIGZpbmQgb25lIHRoYXQgd29ya3MuCisjCisjIEV4YW1wbGVzIG9mIHRoZSBvY2Nhc2lvbnMgdGhpcyBtYXkgaGFwcGVuIGFyZSB3aGVuIHJlc29sdmluZyBwYXRjaGVzIHdoaWNoIGNhbm5vdAorIyBiZSBhcHBsaWVkLCB0byB1c2UgdGhlIGRldnNoZWxsIG9yIHRoZSBrZXJuZWwgbWVudWNvbmZpZworIworIyBTdXBwb3J0ZWQgdmFsdWVzIGFyZSBhdXRvLCBnbm9tZSwgeGZjZSwgcnh2dCwgc2NyZWVuLCBrb25zb2xlIChLREUgMy54IG9ubHkpLCBub25lCisjIE5vdGU6IGN1cnJlbnRseSwgS29uc29sZSBzdXBwb3J0IG9ubHkgd29ya3MgZm9yIEtERSAzLnggZHVlIHRvIHRoZSB3YXkKKyMgbmV3ZXIgS29uc29sZSB2ZXJzaW9ucyBiZWhhdmUKKyNPRV9URVJNSU5BTCA9ICJhdXRvIgorIyBCeSBkZWZhdWx0IGRpc2FibGUgaW50ZXJhY3RpdmUgcGF0Y2ggcmVzb2x1dGlvbiAodGFza3Mgd2lsbCBqdXN0IGZhaWwgaW5zdGVhZCk6CitQQVRDSFJFU09MVkUgPSAibm9vcCIKKworIworIyBEaXNrIFNwYWNlIE1vbml0b3JpbmcgZHVyaW5nIHRoZSBidWlsZAorIworIyBNb25pdG9yIHRoZSBkaXNrIHNwYWNlIGR1cmluZyB0aGUgYnVpbGQuIElmIHRoZXJlIGlzIGxlc3MgdGhhdCAxR0Igb2Ygc3BhY2Ugb3IgbGVzcworIyB0aGFuIDEwMEsgaW5vZGVzIGluIGFueSBrZXkgYnVpbGQgbG9jYXRpb24gKFRNUERJUiwgRExfRElSLCBTU1RBVEVfRElSKSwgZ3JhY2VmdWxseQorIyBzaHV0ZG93biB0aGUgYnVpbGQuIElmIHRoZXJlIGlzIGxlc3MgdGhhdCAxMDBNQiBvciAxSyBpbm9kZXMsIHBlcmZvcm0gYSBoYXJkIGFib3J0CisjIG9mIHRoZSBidWlsZC4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHJ1bm5pbmcgY29tcGxldGVseSBvdXQgb2Ygc3BhY2UgY2FuIGNvcnJ1cHQKKyMgZmlsZXMgYW5kIGRhbWFnZXMgdGhlIGJ1aWxkIGluIHdheXMgd2hpY2ggbWF5IG5vdCBiZSBlYXNpbHkgcmVjb3ZlcmFibGUuCisjIEl0J3MgbmVjZXNhcnkgdG8gbW9uaXRvciAvdG1wLCBpZiB0aGVyZSBpcyBubyBzcGFjZSBsZWZ0IHRoZSBidWlsZCB3aWxsIGZhaWwKKyMgd2l0aCB2ZXJ5IGV4b3RpYyBlcnJvcnMuCitCQl9ESVNLTU9OX0RJUlMgPSAiXAorICAgIFNUT1BUQVNLUywke1RNUERJUn0sMUcsMTAwSyBcCisgICAgU1RPUFRBU0tTLCR7RExfRElSfSwxRywxMDBLIFwKKyAgICBTVE9QVEFTS1MsJHtTU1RBVEVfRElSfSwxRywxMDBLIFwKKyAgICBTVE9QVEFTS1MsL3RtcCwxMDBNLDEwMEsgXAorICAgIEFCT1JULCR7VE1QRElSfSwxMDBNLDFLIFwKKyAgICBBQk9SVCwke0RMX0RJUn0sMTAwTSwxSyBcCisgICAgQUJPUlQsJHtTU1RBVEVfRElSfSwxMDBNLDFLIFwKKyAgICBBQk9SVCwvdG1wLDEwTSwxSyIKKworIworIyBTaGFyZWQtc3RhdGUgZmlsZXMgZnJvbSBvdGhlciBsb2NhdGlvbnMKKyMKKyMgQXMgbWVudGlvbmVkIGFib3ZlLCBzaGFyZWQgc3RhdGUgZmlsZXMgYXJlIHByZWJ1aWx0IGNhY2hlIGRhdGEgb2JqZWN0cyB3aGljaCBjYW4gCisjIHVzZWQgdG8gYWNjZWxlcmF0ZSBidWlsZCB0aW1lLiBUaGlzIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgc3lzdGVtCisjIHRvIHNlYXJjaCBvdGhlciBtaXJyb3IgbG9jYXRpb25zIGZvciB0aGVzZSBvYmplY3RzIGJlZm9yZSBpdCBidWlsZHMgdGhlIGRhdGEgaXRzZWxmLgorIworIyBUaGlzIGNhbiBiZSBhIGZpbGVzeXN0ZW0gZGlyZWN0b3J5LCBvciBhIHJlbW90ZSB1cmwgc3VjaCBhcyBodHRwIG9yIGZ0cC4gVGhlc2UKKyMgd291bGQgY29udGFpbiB0aGUgc3N0YXRlLWNhY2hlIHJlc3VsdHMgZnJvbSBwcmV2aW91cyBidWlsZHMgKHBvc3NpYmx5IGZyb20gb3RoZXIgCisjIG1hY2hpbmVzKS4gVGhpcyB2YXJpYWJsZSB3b3JrcyBsaWtlIGZldGNoZXIgTUlSUk9SUy9QUkVNSVJST1JTIGFuZCBwb2ludHMgdG8gdGhlIAorIyBjYWNoZSBsb2NhdGlvbnMgdG8gY2hlY2sgZm9yIHRoZSBzaGFyZWQgb2JqZWN0cy4KKyMgTk9URTogaWYgdGhlIG1pcnJvciB1c2VzIHRoZSBzYW1lIHN0cnVjdHVyZSBhcyBTU1RBVEVfRElSLCB5b3UgbmVlZCB0byBhZGQgUEFUSAorIyBhdCB0aGUgZW5kIGFzIHNob3duIGluIHRoZSBleGFtcGxlcyBiZWxvdy4gVGhpcyB3aWxsIGJlIHN1YnN0aXR1dGVkIHdpdGggdGhlCisjIGNvcnJlY3QgcGF0aCB3aXRoaW4gdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCisjU1NUQVRFX01JUlJPUlMgPz0gIlwKKyNmaWxlOi8vLiogaHR0cDovL3NvbWVzZXJ2ZXIudGxkL3NoYXJlL3NzdGF0ZS9QQVRIO2Rvd25sb2FkZmlsZW5hbWU9UEFUSCBcbiBcCisjZmlsZTovLy4qIGZpbGU6Ly8vc29tZS9sb2NhbC9kaXIvc3N0YXRlL1BBVEgiCisKKworIworIyBRZW11IGNvbmZpZ3VyYXRpb24KKyMKKyMgQnkgZGVmYXVsdCBxZW11IHdpbGwgYnVpbGQgd2l0aCBhIGJ1aWx0aW4gVk5DIHNlcnZlciB3aGVyZSBncmFwaGljYWwgb3V0cHV0IGNhbiBiZQorIyBzZWVuLiBUaGUgdHdvIGxpbmVzIGJlbG93IGVuYWJsZSB0aGUgU0RMIGJhY2tlbmQgdG9vLiBUaGlzIGFzc3VtZXMgdGhlcmUgaXMgYQorIyBsaWJzZGwgbGlicmFyeSBhdmFpbGFibGUgb24geW91ciBidWlsZCBzeXN0ZW0uCitQQUNLQUdFQ09ORklHX2FwcGVuZF9wbi1xZW11LW5hdGl2ZSA9ICIgc2RsIgorUEFDS0FHRUNPTkZJR19hcHBlbmRfcG4tbmF0aXZlc2RrLXFlbXUgPSAiIHNkbCIKK0FTU1VNRV9QUk9WSURFRCArPSAibGlic2RsLW5hdGl2ZSIKKworCisjIENPTkZfVkVSU0lPTiBpcyBpbmNyZWFzZWQgZWFjaCB0aW1lIGJ1aWxkL2NvbmYvIGNoYW5nZXMgaW5jb21wYXRpYmx5IGFuZCBpcyB1c2VkIHRvCisjIHRyYWNrIHRoZSB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB3aGVuIGl0IHdhcyBnZW5lcmF0ZWQuIFRoaXMgY2FuIHNhZmVseSBiZSBpZ25vcmVkIGlmCisjIHRoaXMgZG9lc24ndCBtZWFuIGFueXRoaW5nIHRvIHlvdS4KK0NPTkZfVkVSU0lPTiA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvbG9jYWwuY29uZi5zYW1wbGUuZXh0ZW5kZWQgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9sb2NhbC5jb25mLnNhbXBsZS5leHRlbmRlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2RkMzI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvbG9jYWwuY29uZi5zYW1wbGUuZXh0ZW5kZWQKQEAgLTAsMCArMSwzNzQgQEAKKyMgQkJNQVNLIGlzIGEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVsbCBCaXRCYWtlIHRvIGlnbm9yZQorIyBjZXJ0YWluIHJlY2lwZXMuCisjQkJNQVNLID0gIiIKKworIworIyBQYXJhbGxlbGlzbSBPcHRpb25zCisjCisjIFRoZXNlIHR3byBvcHRpb25zIGNvbnRyb2wgaG93IG11Y2ggcGFyYWxsZWxpc20gQml0QmFrZSBzaG91bGQgdXNlLiBUaGUgZmlyc3QKKyMgb3B0aW9uIGRldGVybWluZXMgaG93IG1hbnkgdGFza3MgYml0YmFrZSBzaG91bGQgcnVuIGluIHBhcmFsbGVsOgorIworI0JCX05VTUJFUl9USFJFQURTID89ICI0IgorIworIyBEZWZhdWx0IHRvIHNldHRpbmcgYXV0b21hdGljYWxseSBiYXNlZCBvbiBjcHUgY291bnQKKyNCQl9OVU1CRVJfVEhSRUFEUyA/PSAiJHtAb2UudXRpbHMuY3B1X2NvdW50KCl9IgorIworIyBUaGUgc2Vjb25kIG9wdGlvbiBjb250cm9scyBob3cgbWFueSBwcm9jZXNzZXMgbWFrZSBzaG91bGQgcnVuIGluIHBhcmFsbGVsIHdoZW4KKyMgcnVubmluZyBjb21waWxlIHRhc2tzOgorIworI1BBUkFMTEVMX01BS0UgPz0gIi1qIDQiCisjCisjIERlZmF1bHQgdG8gc2V0dGluZyBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIGNwdSBjb3VudAorI1BBUkFMTEVMX01BS0UgPz0gIi1qICR7QG9lLnV0aWxzLmNwdV9jb3VudCgpfSIKKyMKKyMgRm9yIGEgcXVhZC1jb3JlIG1hY2hpbmUsIEJCX05VTUJFUl9USFJFQURTID0gIjQiLCBQQVJBTExFTF9NQUtFID0gIi1qIDQiIHdvdWxkCisjIGJlIGFwcHJvcHJpYXRlIGZvciBleGFtcGxlLgorCisKKyMgZ2xpYmMgY29uZmlndXJhYmlsaXR5IGlzIHVzZWQgdG8gcmVkdWNlIG1pbmltYWwgaW1hZ2UncyBzaXplLgorIyB0aGUgYWxsIHN1cHBvcnRlZCBnbGliYyBvcHRpb25zIGFyZSBsaXN0ZWQgaW4gRElTVFJPX0ZFQVRVUkVTX0xJQkMKKyMgYW5kIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFVuY29tbWVudCBhbmQgY29weSB0aGUgRElTVFJPX0ZFQVRVUkVTX0xJQkMKKyMgYW5kIERJU1RST19GRUFUVVJFUyBkZWZpbml0aW9ucyB0byBsb2NhbC5jb25mIHRvIGVuYWJsZSB0aGUgb3B0aW9ucy4KKyNESVNUUk9fRkVBVFVSRVNfTElCQyA9ICJpcHY2IGxpYmMtYmFja3RyYWNlIGxpYmMtYmlnLW1hY3JvcyBsaWJjLWJzZCBsaWJjLWN4eC10ZXN0cyBsaWJjLWNhdGdldHMgbGliYy1jaGFyc2V0cyBsaWJjLWNyeXB0IFwKKyMgICAgICAgICAgICAgICBsaWJjLWNyeXB0LXVmYyBsaWJjLWRiLWFsaWFzZXMgbGliYy1lbnZ6IGxpYmMtZmN2dCBsaWJjLWZtdG1zZyBsaWJjLWZzdGFiIGxpYmMtZnRyYXZlcnNlIFwKKyMgICAgICAgICAgICAgICBsaWJjLWdldGxvZ2luIGxpYmMtaWRuIGxpYmMtaW5ldCBsaWJjLWluZXQtYW5sIGxpYmMtbGlibSBsaWJjLWxvY2FsZXMgbGliYy1sb2NhbGUtY29kZSBcCisjICAgICAgICAgICAgICAgbGliYy1tZW11c2FnZSBsaWJjLW5pcyBsaWJjLW5zc3dpdGNoIGxpYmMtcmNtZCBsaWJjLXJ0bGQtZGVidWcgbGliYy1zcGF3biBsaWJjLXN0cmVhbXMgbGliYy1zdW5ycGMgXAorIyAgICAgICAgICAgICAgIGxpYmMtdXRtcCBsaWJjLXV0bXB4IGxpYmMtd29yZGV4cCBsaWJjLXBvc2l4LWNsYW5nLXdjaGFyIGxpYmMtcG9zaXgtcmVnZXhwIGxpYmMtcG9zaXgtcmVnZXhwLWdsaWJjIFwKKyMgICAgICAgICAgICAgICBsaWJjLXBvc2l4LXdjaGFyLWlvIgorCisjRElTVFJPX0ZFQVRVUkVTID0gImFsc2EgYmx1ZXRvb3RoIGV4dDIgaXJkYSBwY21jaWEgdXNiZ2FkZ2V0IHVzYmhvc3Qgd2lmaSBuZnMgemVyb2NvbmYgcGNpICR7RElTVFJPX0ZFQVRVUkVTX0xJQkN9IgorCisjIElmIHlvdSB3YW50IHRvIGdldCBhbiBpbWFnZSBiYXNlZCBvbiBkaXJlY3RmYiB3aXRob3V0IHgxMSwgUGxlYXNlIGNvcHkgdGhpcyB2YXJpYWJsZSB0byBidWlsZC9jb25mL2xvY2FsLmNvbmYKKyNESVNUUk9fRkVBVFVSRVMgPSAiYWxzYSBhcmdwIGJsdWV0b290aCBleHQyIGlyZGEgbGFyZ2VmaWxlIHBjbWNpYSB1c2JnYWRnZXQgdXNiaG9zdCB3aWZpIHhhdHRyIG5mcyB6ZXJvY29uZiBwY2kgM2cgZGlyZWN0ZmIgJHtESVNUUk9fRkVBVFVSRVNfTElCQ30iCisKKyMgRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTiBjb250cm9scyB0aGUgZ2VuZXJhdGlvbiBvZiBiaW5hcnkgbG9jYWxlCisjIHBhY2thZ2VzIGF0IGJ1aWxkIHRpbWUgdXNpbmcgcWVtdS1uYXRpdmUuIERpc2FibGluZyBpdCAoYnkgc2V0dGluZyBpdCB0byAwKQorIyB3aWxsIHNhdmUgc29tZSBidWlsZCB0aW1lIGF0IHRoZSBleHBlbnNlIG9mIGJyZWFraW5nIGkxOG4gb24gZGV2aWNlcyB3aXRoCisjIGxlc3MgdGhhbiAxMjhNQiBSQU0uCisjRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTiA9ICIxIgorCisjIFNldCBHTElCQ19HRU5FUkFURV9MT0NBTEVTIHRvIHRoZSBsb2NhbGVzIHlvdSB3aXNoIHRvIGdlbmVyYXRlIHNob3VsZCB5b3Ugbm90CisjIHdpc2ggdG8gcGVyZm9ybSB0aGUgdGltZS1jb25zdW1pbmcgc3RlcCBvZiBnZW5lcmF0aW5nIGFsbCBMSUJDIGxvY2FsZXMuCisjIE5PVEU6IElmIHJlbW92aW5nIGVuX1VTLlVURi04IHlvdSB3aWxsIGFsc28gbmVlZCB0byB1bmNvbW1lbnQsIGFuZCBzZXQKKyMgYXBwcm9wcmlhdGUgdmFsdWUgZm9yIElNQUdFX0xJTkdVQVMuCisjIFdBUk5JTkc6IHRoaXMgbWF5IGJyZWFrIGxvY2FsaXNhdGlvbiEKKyNHTElCQ19HRU5FUkFURV9MT0NBTEVTID0gImVuX0dCLlVURi04IGVuX1VTLlVURi04IgorI0lNQUdFX0xJTkdVQVMgPz0gImVuLWdiIgorCisjIFRoZSBmb2xsb3dpbmcgYXJlIHVzZWQgdG8gY29udHJvbCBvcHRpb25zIHJlbGF0ZWQgdG8gZGVidWdnaW5nLgorIworIyBVbmNvbW1lbnQgdGhpcyB0byBjaGFuZ2UgdGhlIG9wdGltaXphdGlvbiB0byBtYWtlIGRlYnVnZ2luZyBlYXNlciwgYXQgdGhlIAorIyBwb3NzaWJsZSBjb3N0IG9mIHBlcmZvcm1hbmNlLgorIyBERUJVR19CVUlMRCA9ICIxIgorIworIyBVbmNvbW1lbnQgdGhpcyB0byBkaXNhYmxlIHRoZSBzdHJpcHBpbmcgb2YgdGhlIGluc3RhbGxlZCBiaW5hcmllcworIyBJTkhJQklUX1BBQ0tBR0VfU1RSSVAgPSAiMSIKKyMKKyMgVW5jb21tZW50IHRoaXMgdG8gZGlzYWJsZSB0aGUgc3BsaXQgb2YgdGhlIGRlYnVnIGluZm9ybWF0aW9uIGludG8gLWRiZyBmaWxlcworIyBJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQgPSAiMSIKKyMKKyMgV2hlbiBzcGxpdHRpbmcgZGVidWcgaW5mb3JtYXRpb24sIHRoZSBmb2xsb3dpbmcgY29udHJvbHMgdGhlIHJlc3VsdHMgb2YgdGhlCisjIGZpbGUgc3BsaXR0aW5nLgorIworIyAgLmRlYnVnIChkZWZhdWx0KToKKyMgICAgV2hlbiBzcGxpdHRpbmcgdGhlIGRlYnVnIGluZm9ybWF0aW9uIHdpbGwgYmUgcGxhY2VkIGludG8KKyMgICAgYSAuZGVidWcgZGlyZWN0b3J5IGluIHRoZSBzYW1lIGRpcm5hbWUgb2YgdGhlIGJpbmFyeSBwcm9kdWNlZDoKKyMgICAgICAvYmluL2ZvbyAtPiAvYmluLy5kZWJ1Zy9mb28KKyMKKyMgIGRlYnVnLWZpbGUtZGlyZWN0b3J5OgorIyAgICBXaGVuIHNwbGl0dGluZyB0aGUgZGVidWcgaW5mb3JtYXRpb24gd2lsbCBiZSBwbGFjZWQgaW50bworIyAgICBhIGNlbnRyYWwgZGVidWctZmlsZS1kaXJlY3RvcnksIC91c3IvbGliL2RlYnVnOgorIyAgICAgIC9iaW4vZm9vIC0+IC91c3IvbGliL2RlYnVnL2Jpbi9mb28uZGVidWcKKyMKKyMgICAgQW55IHNvdXJjZSBjb2RlIHJlZmVyZW5jZWQgaW4gdGhlIGRlYnVnIHN5bWJvbHMgd2lsbCBiZSBjb3BpZWQKKyMgICAgYW5kIG1hZGUgYXZhaWxhYmxlIHdpdGhpbiB0aGUgL3Vzci9zcmMvZGVidWcgZGlyZWN0b3J5CisjCisjUEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRSA9ICcuZGVidWcnCisjIFBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUgPSAnZGVidWctZmlsZS1kaXJlY3RvcnknCisKKyMgVW5jb21tZW50IHRoZXNlIHRvIGJ1aWxkIGEgcGFja2FnZSBzdWNoIHRoYXQgeW91IGNhbiB1c2UgZ3Byb2YgdG8gcHJvZmlsZSBpdC4KKyMgTk9URTogVGhpcyB3aWxsIG9ubHkgd29yayB3aXRoICdsaW51eCcgdGFyZ2V0cywgbm90CisjICdsaW51eC11Y2xpYmMnLCBhcyB1Q2xpYmMgZG9lc24ndCBwcm92aWRlIHRoZSBuZWNlc3NhcnkKKyMgb2JqZWN0IGZpbGVzLiAgQWxzbywgZG9uJ3QgYnVpbGQgZ2xpYmMgaXRzZWxmIHdpdGggdGhlc2UKKyMgZmxhZ3MsIG9yIGl0J2xsIGZhaWwgdG8gYnVpbGQuCisjCisjIFBST0ZJTEVfT1BUSU1JWkFUSU9OID0gIi1wZyIKKyMgU0VMRUNURURfT1BUSU1JWkFUSU9OID0gIiR7UFJPRklMRV9PUFRJTUlaQVRJT059IgorIyBMREZMQUdTID0rICItcGciCisKKyMgVENNT0RFIGNvbnRyb2xzIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGdlbmVyYXRlZCBwYWNrYWdlcy9pbWFnZXMgYnkKKyMgdGVsbGluZyBwb2t5IHdoaWNoIHRvb2xjaGFpbiAncHJvZmlsZScgdG8gdXNlLgorIworIyBUaGUgZGVmYXVsdCBpcyAiZGVmYXVsdCIgd2hpY2ggdXNlcyB0aGUgaW50ZXJuYWwgdG9vbGNoYWluLiBXaXRoCisjIGFkZGl0aW9uYWwgbGF5ZXJzLCBpdCBpcyBwb3NzaWJsZSB0byBzZXQgdGhpcyB0byB1c2UgYSBwcmVjb21waWxlZAorIyBleHRlcm5hbCB0b29sY2hhaW4uIE9uZSBleGFtcGxlIGlzIHRoZSBTb3VyY2VyeSBHKysgVG9vbGNoYWluLCBzdXBwb3J0CisjIGZvciB3aGljaCBpcyBub3cgaW4gdGhlIHNlcGFyYXRlIG1ldGEtc291cmNlcnkgbGF5ZXI6CisjCisjICBodHRwOi8vZ2l0aHViLmNvbS9NZW50b3JFbWJlZGRlZC9tZXRhLXNvdXJjZXJ5LworIworIyBtZXRhLXNvdXJjZXJ5IGNhbiBiZSB1c2VkIGFzIGEgdGVtcGxhdGUgZm9yIGFkZGluZyBzdXBwb3J0IGZvciBvdGhlcgorIyBleHRlcm5hbCB0b29sY2hhaW5zLiBTZWUgdGhlIGxpbmsgYWJvdmUgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKyMKKyMgVENNT0RFIHBvaW50cyB0aGUgc3lzdGVtIHRvIGEgZmlsZSBpbiBjb25mL2Rpc3Ryby9pbmNsdWRlL3RjbW9kZS0ke1RDTU9ERX0uaW5jLAorIyBzbyBmb3IgbWV0YS1zb3VyY2VyeSB3aGljaCBoYXMgY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtZXh0ZXJuYWwtc291cmNlcnkuaW5jCisjIHlvdSB3b3VsZCBzZXQgaXQgYXMgZm9sbG93czoKKyMKKyMgVENNT0RFID89ICJleHRlcm5hbC1zb3VyY2VyeSIKKworIyBta2xpYnMgbGlicmFyeSBzaXplIG9wdGltaXphdGlvbiBpcyBtb3JlIHVzZWZ1bCB0byBzbWFsbGVyIGltYWdlcywKKyMgYW5kIGxlc3MgdXNlZnVsIGZvciBiaWdnZXIgaW1hZ2VzLiBBbHNvIG1rbGlicyBsaWJyYXJ5IG9wdGltaXphdGlvbgorIyBjYW4gYnJlYWsgdGhlIEFCSSBjb21wYXRpYmlsaXR5LCBzbyBzaG91bGQgbm90IGJlIGFwcGxpZWQgdG8gdGhlCisjIGltYWdlcyB3aGljaCBhcmUgdG8gYmUgZXh0ZW5kZWQgb3IgdXBncmFkZWQgbGF0ZXIuCisjVGhpcyBlbmFibGVkIG1rbGlicyBsaWJyYXJ5IHNpemUgb3B0aW1pemF0aW9uIGp1c3QgZm9yIHRoZSBzcGVjaWZpZWQgaW1hZ2UuCisjTUtMSUJTX09QVElNSVpFRF9JTUFHRVMgPz0gImNvcmUtaW1hZ2UtbWluaW1hbCIKKyNUaGlzIGVuYWJsZSBta2xpYnMgbGlicmFyeSBzaXplIG9wdGltaXphdGlvbiB3aWxsIGJlIGZvciBhbGwgdGhlIGltYWdlcy4KKyNNS0xJQlNfT1BUSU1JWkVEX0lNQUdFUyA/PSAiYWxsIgorCisjIFVuY29tbWVudCB0aGlzIGlmIHlvdXIgaG9zdCBkaXN0cmlidXRpb24gcHJvdmlkZXMgdGhlIGhlbHAybWFuIHRvb2wuCisjQVNTVU1FX1BST1ZJREVEICs9ICJoZWxwMm1hbi1uYXRpdmUiCisKKyMgVGhpcyB2YWx1ZSBpcyBjdXJyZW50bHkgdXNlZCBieSBwc2V1ZG8gdG8gZGV0ZXJtaW5lIGlmIHRoZSByZWNpcGUgc2hvdWxkCisjIGJ1aWxkIGJvdGggdGhlIDMyLWJpdCBhbmQgNjQtYml0IHdyYXBwZXIgbGlicmFyaWVzIG9uIGEgNjQtYml0IGJ1aWxkIHN5c3RlbS4KKyMKKyMgUHNldWRvIHdpbGwgYXR0ZW1wdCB0byBkZXRlcm1pbmUgaWYgYSAzMi1iaXQgd3JhcHBlciBpcyBuZWNlc3NhcnksIGJ1dAorIyBpdCBkb2Vzbid0IGFsd2F5cyBndWVzcyBwcm9wZXJseS4gIElmIHlvdSBoYXZlIDMyLWJpdCBleGVjdXRhYmxlcyBvbiAKKyMgeW91ciA2NC1iaXQgYnVpbGQgc3lzdGVtLCB5b3UgbGlrZWx5IHdhbnQgdG8gc2V0IHRoaXMgdG8gIjAiLCAKKyMgb3RoZXJ3aXNlIHlvdSBjb3VsZCBlbmQgdXAgd2l0aCBpbmNvcnJlY3QgZmlsZSBhdHRyaWJ1dGVzIG9uIHRoZSAKKyMgdGFyZ2V0IGZpbGVzeXN0ZW0uCisjCisjIERlZmF1bHQgaXMgdG8gbm90IGJ1aWxkIDMyIGJpdCBsaWJzIG9uIDY0IGJpdCBzeXN0ZW1zLCB1bmNvbW1lbnQgdGhpcworIyBpZiB5b3UgbmVlZCB0aGUgMzIgYml0cyBsaWJzCisjTk8zMkxJQlMgPSAiMCIKKworIyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byBlbmFibGUgbXVsdGlsaWIgYnVpbGRzCisjcmVxdWlyZSBjb25mL211bHRpbGliLmNvbmYKKyNNVUxUSUxJQlMgPSAibXVsdGlsaWI6bGliMzIiCisjREVGQVVMVFRVTkVfdmlydGNsYXNzLW11bHRpbGliLWxpYjMyID0gIng4NiIKKworIyBTZXQgUlBNX1BSRUZFUl9FTEZfQVJDSCB0byBjb25maWd1cmUgcHJlZmVycmVkIEFCSSB3aGVuIHVzaW5nIHJwbSBwYWNrYWdpbmcKKyMgYmFja2VuZCB0byBnZW5lcmF0ZSBhIHJvb3RmcywgY2hvaWNlcyBhcmU6CisjIDE6IEVMRjMyIHdpbnMKKyMgMjogRUxGNjQgd2lucworIyA0OiBFTEY2NCBOMzIgd2lucyAoZm9yIG1pcHM2NCBvciBtaXBzNjRlbCBvbmx5KQorI1JQTV9QUkVGRVJfRUxGX0FSQ0ggPz0gIjIiCisKKyMgVGhlIG5ldHdvcmsgYmFzZWQgUFIgc2VydmljZSBob3N0IGFuZCBwb3J0CisjIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIGVuYWJsZSBQUnNlcnZpY2UuCisjIFNldCBQUlNFUlZfSE9TVCB0byAnbG9jYWxob3N0OjAnIHRvIGF1dG9tYXRpY2FsbHkKKyMgc3RhcnQgbG9jYWwgUFJTZXJ2aWNlLgorIyBTZXQgdG8gb3RoZXIgdmFsdWVzIHRvIHVzZSByZW1vdGUgUFJTZXJ2aWNlLgorI1BSU0VSVl9IT1NUID0gImxvY2FsaG9zdDowIgorCisjIEFkZGl0aW9uYWwgaW1hZ2UgZ2VuZXJhdGlvbiBmZWF0dXJlcworIworIyBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBjbGFzc2VzIHRvIGltcG9ydCB0byB1c2UgaW4gdGhlIGdlbmVyYXRpb24gb2YgaW1hZ2VzCisjIGN1cnJlbnRseSBhbiBleGFtcGxlIGNsYXNzIGlzIGltYWdlX3R5cGVzX3Vib290CisjIElNQUdFX0NMQVNTRVMgPSAiIGltYWdlX3R5cGVzX3Vib290IgorCisjIEluY3JlbWVudGFsIHJwbSBpbWFnZSBnZW5lcmF0aW9uLCB0aGUgcm9vdGZzIHdvdWxkIGJlIHRvdGFsbHkgcmVtb3ZlZAorIyBhbmQgcmUtY3JlYXRlZCBpbiB0aGUgc2Vjb25kIGdlbmVyYXRpb24gYnkgZGVmYXVsdCwgYnV0IHdpdGgKKyMgSU5DX1JQTV9JTUFHRV9HRU4gPSAiMSIsIHRoZSBycG0gYmFzZWQgcm9vdGZzIHdvdWxkIGJlIGtlcHQsIGFuZCB3aWxsCisjIGRvIHVwZGF0ZShyZW1vdmUvYWRkIHNvbWUgcGtncykgb24gaXQuICBOT1RFOiBUaGlzIGlzIG5vdCBzdWdnZXN0ZWQKKyMgd2hlbiB5b3Ugd2FudCB0byBjcmVhdGUgYSBwcm9kdWN0aXZlIHJvb3RmcworI0lOQ19SUE1fSU1BR0VfR0VOID0gIjEiCisKKyMgVGhpcyBpcyBhIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCByZXF1aXJlIGEgY29tbWVyY2lhbCBsaWNlbnNlIHRvIHNoaXAKKyMgcHJvZHVjdC4gSWYgc2hpcHBlZCBhcyBwYXJ0IG9mIGFuIGltYWdlIHRoZXNlIHBhY2thZ2VzIG1heSBoYXZlCisjIGltcGxpY2F0aW9ucyBzbyB0aGV5IGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LiAgVG8gZW5hYmxlIHRoZW0sCisjIHVuLWNvbW1lbnQgdGhlIGJlbG93IGFzIGFwcHJvcHJpYXRlLgorI0xJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUID0gImNvbW1lcmNpYWxfZ3N0LWZsdWVuZG8tbXAzIFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZXJjaWFsX2dzdC1vcGVubWF4IFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZXJjaWFsX2dzdC1wbHVnaW5zLXVnbHkgXAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lcmNpYWxfbGFtZSBcCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVyY2lhbF9saWJtYWQgXAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lcmNpYWxfbGlib214aWwgXAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lcmNpYWxfbXBlZzJkZWMgXAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lcmNpYWxfcW1tcCIKKworCisjCisjIERpc2sgc3BhY2UgbW9uaXRvciwgdGFrZSBhY3Rpb24gd2hlbiB0aGUgZGlzayBzcGFjZSBvciB0aGUgYW1vdW50IG9mCisjIGlub2RlIGlzIHJ1bm5pbmcgbG93LCBpdCBpcyBlbmFibGVkIHdoZW4gQkJfRElTS01PTl9ESVJTIGlzIHNldC4KKyMKKyMgU2V0IHRoZSBkaXJlY3RvcnkgZm9yIHRoZSBtb25pdG9yLCB0aGUgZm9ybWF0IGlzOgorIyAiYWN0aW9uLGRpcmVjdG9yeSxtaW5pbXVtX3NwYWNlLG1pbmltdW1fZnJlZV9pbm9kZSIKKyMKKyMgVGhlICJhY3Rpb24iIG11c3QgYmUgc2V0IGFuZCBzaG91bGQgYmUgb25lIG9mOgorIyBBQk9SVDogSW1tZWRpYXRlbHkgYWJvcnQKKyMgU1RPUFRBU0tTOiBUaGUgbmV3IHRhc2tzIGNhbid0IGJlIGV4ZWN1dGVkIGFueSBtb3JlLCB3aWxsIHN0b3AgdGhlIGJ1aWxkCisjICAgICAgICAgICB3aGVuIHRoZSBydW5uaW5nIHRhc2tzIGhhdmUgYmVlbiBkb25lLgorIyBXQVJOOiBzaG93IHdhcm5pbmdzIChzZWUgQkJfRElTS01PTl9XQVJOSU5URVJWQUwgZm9yIG1vcmUgaW5mb3JtYXRpb24pCisjCisjIFRoZSAiZGlyZWN0b3J5IiBtdXN0IGJlIHNldCwgYW55IGRpcmVjdG9yeSBpcyBPSy4KKyMKKyMgRWl0aGVyICJtaW5pbXVtX3NwYWNlIiBvciAibWluaW11bV9mcmVlX2lub2RlIiAob3IgYm90aCBvZiB0aGVtKQorIyBzaG91bGQgYmUgc2V0LCBvdGhlcndpc2UgdGhlIG1vbml0b3Igd291bGQgbm90IGJlIGVuYWJsZWQsCisjIHRoZSB1bml0IGNhbiBiZSBHLCBNLCBLIG9yIG5vbmUsIGJ1dCBkbyBOT1QgdXNlIEdCLCBNQiBvciBLQgorIyAoQiBpcyBub3QgbmVlZGVkKS4KKyNCQl9ESVNLTU9OX0RJUlMgPSAiU1RPUFRBU0tTLCR7VE1QRElSfSwxRywxMDBLIFdBUk4sJHtTU1RBVEVfRElSfSwxRywxMDBLIgorIworIyBTZXQgZGlzayBzcGFjZSBhbmQgaW5vZGUgaW50ZXJ2YWwgKG9ubHkgd29ya3Mgd2hlbiB0aGUgYWN0aW9uIGlzICJXQVJOIiwKKyMgdGhlIHVuaXQgY2FuIGJlIEcsIE0sIG9yIEssIGJ1dCBkbyBOT1QgdXNlIHRoZSBHQiwgTUIgb3IgS0IKKyMgKEIgaXMgbm90IG5lZWRlZCksIHRoZSBmb3JtYXQgaXM6CisjICJkaXNrX3NwYWNlX2ludGVydmFsLGRpc2tfaW5vZGVfaW50ZXJ2YWwiLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcworIyAiNTBNLDVLIiB3aGljaCBtZWFucyB0aGF0IGl0IHdvdWxkIHdhcm4gd2hlbiB0aGUgZnJlZSBzcGFjZSBpcworIyBsb3dlciB0aGFuIHRoZSBtaW5pbXVtIHNwYWNlKG9yIGlub2RlKSwgYW5kIHdvdWxkIHJlcGVhdCB0aGUgd2FybmluZworIyB3aGVuIHRoZSBkaXNrIHNwYWNlIHJlZHVjZXMgNTBNIChvciB0aGUgYW1vdW50IG9mIGlub2RlIHJlZHVjZXMgNWspLgorI0JCX0RJU0tNT05fV0FSTklOVEVSVkFMID0gIjUwTSw1SyIKKworIyBBcmNoaXZlIHRoZSBzb3VyY2UgYW5kIHB1dCB0aGVtIHRvICR7REVQTE9ZX0RJUn0vc291cmNlcy8uCisjCisjSU5IRVJJVCArPSAiYXJjaGl2ZXIiCisjCisjIFRoZSB0YXJiYWxsIGZvciB0aGUgcGF0Y2hlZCBzb3VyY2Ugd2lsbCBiZSBjcmVhdGVkIGJ5IGRlZmF1bHQsIGFuZCB5b3UKKyMgY2FuIGNvbmZpZ3VyZSB0aGUgYXJjaGl2ZXIgYXMgZm9sbG93OgorIworIyBDcmVhdGUgYXJjaGl2ZSBmb3I6CisjIDEpIG9yaWdpbmFsIChvciB1bnBhY2tlZCkgc291cmNlOgorI0FSQ0hJVkVSX01PREVbc3JjXSA9ICJvcmlnaW5hbCIKKyMgMikgcGF0Y2hlZCBzb3VyY2U6IChkZWZhdWx0KQorI0FSQ0hJVkVSX01PREVbc3JjXSA9ICJwYXRjaGVkIgorIyAzKSBjb25maWd1cmVkIHNvdXJjZToKKyNBUkNISVZFUl9NT0RFW3NyY10gPSAiY29uZmlndXJlZCIKKyMKKyMgNCkgdGhlIHBhdGNoZXMgYmV0d2VlbiBkb191bnBhY2sgYW5kIGRvX3BhdGNoOgorI0FSQ0hJVkVSX01PREVbZGlmZl0gPSAiMSIKKyMgc2V0IHRoZSBmaWxlcyB0aGF0IHlvdSdkIGxpa2UgdG8gZXhjbHVkZSBmcm9tIHRoZSBkaWZmOgorI0FSQ0hJVkVSX01PREVbZGlmZi1leGNsdWRlXSA/PSAiLnBjIGF1dG9tNHRlLmNhY2hlIHBhdGNoZXMiCisjCisjIDUpIHRoZSBlbnZpcm9ubWVudCBkYXRhLCBzaW1pbGFyIHRvICdiaXRiYWtlIC1lIHJlY2lwZSc6CisjQVJDSElWRVJfTU9ERVtkdW1wZGF0YV0gPSAiMSIKKyMKKyMgNikgdGhlIHJlY2lwZSAoLmJiIGFuZCAuaW5jKToKKyNBUkNISVZFUl9NT0RFW3JlY2lwZV0gPSAiMSIKKyMKKyMgNykgV2hldGhlciBvdXRwdXQgdGhlIC5zcmMucnBtIHBhY2thZ2U6CisjQVJDSElWRVJfTU9ERVtzcnBtXSA9ICIxIgorIworIyA4KSBGaWx0ZXIgdGhlIGxpY2Vuc2UsIHRoZSByZWNpcGUgd2hvc2UgbGljZW5zZSBpbgorIyAgICBDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREUgd2lsbCBiZSBpbmNsdWRlZCwgYW5kIGluCisjICAgIENPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERSB3aWxsIGJlIGV4Y2x1ZGVkLgorI0NPUFlMRUZUX0xJQ0VOU0VfSU5DTFVERSA9ICdHUEwqIExHUEwqJworI0NPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERSA9ICdDTE9TRUQgUHJvcHJpZXRhcnknCisjCisjIDkpIENvbmZpZyB0aGUgcmVjaXBlIHR5cGUgdGhhdCB3aWxsIGJlIGFyY2hpdmVkLCB0aGUgdHlwZSBjYW4gYmUKKyMgICAgdGFyZ2V0LCBuYXRpdmUsIG5hdGl2ZXNkaywgY3Jvc3MsIGNyb3Nzc2RrIGFuZCBjcm9zcy1jYW5hZGlhbiwKKyMgICAgeW91IGNhbiBzZXQgb25lIG9yIG1vcmUgdHlwZXMuIEFyY2hpdmUgYWxsIHR5cGVzIGJ5IGRlZmF1bHQuCisjQ09QWUxFRlRfUkVDSVBFX1RZUEVTID0gJ3RhcmdldCcKKyMKKworIyBSZW1vdmUgdGhlIG9sZCBpbWFnZSBiZWZvcmUgdGhlIG5ldyBvbmUgZ2VuZXJhdGVkIHRvIHNhdmUgZGlzayBzcGFjZQorI1JNX09MRF9JTUFHRSA9ICIxIgorCisjCisjIEdDQy9MRCBGTEFHUyB0byBlbmFibGUgbW9yZSBzZWN1cmUgY29kZSBnZW5lcmF0aW9uCisjIAorIyBCeSBpbmNsdWRpbmcgdGhlIHNlY3VyaXR5X2ZsYWdzIGluY2x1ZGUgZmlsZSB5b3UgZW5hYmxlIGZsYWdzCisjIHRvIHRoZSBjb21waWxlciBhbmQgbGlua2VyIHRoYXQgY2F1c2UgdGhlbSB0byBnZW5lcmF0ZSBtb3JlIHNlY3VyZQorIyBjb2RlLCB0aGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUgcG9reS1sc2IgZGlzdHJvLgorIyBUaGlzIGRvZXMgYWZmZWN0IGNvbXBpbGUgc3BlZWQgc2xpZ2h0bHkuCisjCisjIFVzZSB0aGUgZm9sbG93aW5nIGxpbmUgdG8gZW5hYmxlIHRoZSBzZWN1cml0eSBjb21waWxlciBhbmQgbGlua2VyIGZsYWdzIHRvIHlvdXIgYnVpbGQKKyNyZXF1aXJlIGNvbmYvZGlzdHJvL2luY2x1ZGUvc2VjdXJpdHlfZmxhZ3MuaW5jCisKKyMgSW1hZ2UgbGV2ZWwgdXNlci9ncm91cCBjb25maWd1cmF0aW9uLgorIyBJbmhlcml0IGV4dHJhdXNlcnMgdG8gbWFrZSB0aGUgc2V0dGluZyBvZiBFWFRSQV9VU0VSU19QQVJBTVMgZWZmZWN0aXZlLgorI0lOSEVSSVQgKz0gImV4dHJhdXNlcnMiCisjIFVzZXIgLyBncm91cCBzZXR0aW5ncworIyBUaGUgc2V0dGluZ3MgYXJlIHNwZXJhdGVkIGJ5IHRoZSA7IGNoYXJhY3Rlci4KKyMgRWFjaCBzZXR0aW5nIGlzIGFjdHVhbGx5IGEgY29tbWFuZC4gVGhlIHN1cHBvcnRlZCBjb21tYW5kcyBhcmUgdXNlcmFkZCwKKyMgZ3JvdXBhZGQsIHVzZXJkZWwsIGdyb3VwZGVsLCB1c2VybW9kIGFuZCBncm91cG1vZC4KKyNFWFRSQV9VU0VSU19QQVJBTVMgPSAiXAorI3VzZXJhZGQgLXAgJycgdGVzdGVyOyBcCisjZ3JvdXBhZGQgZGV2ZWxvcGVyczsgXAorI3VzZXJkZWwgbm9ib2R5OyBcCisjZ3JvdXBkZWwgdmlkZW87IFwKKyNncm91cG1vZCAtZyAxMDIwIGRldmVsb3BlcnM7IFwKKyN1c2VybW9kIC1zIC9iaW4vc2ggdGVzdGVyOyBcCisjIgorCisjIFZhcmlvdXMgcGFja2FnZXMgZHluYW1pY2FsbHkgYWRkIHVzZXJzIGFuZCBncm91cHMgdG8gdGhlIHN5c3RlbSBhdCBwYWNrYWdlCisjIGluc3RhbGwgdGltZS4gIEZvciBwcm9ncmFtcyB0aGF0IGRvIG5vdCBjYXJlIHdoYXQgdGhlIHVpZC9naWQgaXMgb2YgdGhlCisjIHJlc3VsdGluZyB1c2Vycy9ncm91cHMsIHRoZSBvcmRlciBvZiB0aGUgaW5zdGFsbCB3aWxsIGRldGVybWluZSB0aGUgZmluYWwKKyMgdWlkL2dpZC4gIFRoaXMgY2FuIGxlYWQgdG8gbm9uLWRldGVybWluaXN0aWMgdWlkL2dpZCB2YWx1ZXMgZnJvbSBvbmUgYnVpbGQKKyMgdG8gYW5vdGhlci4gIFVzZSB0aGUgZm9sbG93aW5nIHNldHRpbmdzIHRvIHNwZWNpZnkgdGhhdCBhbGwgdXNlci9ncm91cCBhZGRzCisjIHNob3VsZCBiZSBjcmVhdGVkIGJhc2VkIG9uIGEgc3RhdGljIHBhc3N3ZC9ncm91cCBmaWxlLgorIworIyBOb3RlLCBpZiB5b3UgZW5hYmxlIG9yIGRpc2FibGUgdGhlIHVzZXJhZGQtc3RhdGljaWRzIGluIGEgY29uZmlndXJlZCBzeXN0ZW0sCisjIHRoZSBUTVBESVIgbWF5IGNvbnRhaW4gaW5jb3JyZWN0IHVpZC9naWQgdmFsdWVzLiAgQ2xlYXJpbmcgdGhlIFRNUERJUgorIyB3aWxsIGNvcnJlY3QgdGhpcyBjb25kaXRpb24uCisjCisjIEJ5IGRlZmF1bHQgdGhlIHN5c3RlbSBsb29rcyBpbiB0aGUgQkJQQVRIIGZvciBmaWxlcy9wYXNzd2QgYW5kIGZpbGVzL2dyb3VwCisjIHRoZSBkZWZhdWx0IGNhbiBiZSBvdmVycmlkZW4gYnkgc3BlZnlpbmcgVVNFUkFERF9VSUQvR0lEX1RBQkxFUy4KKyMKKyNVU0VSQURERVhURU5TSU9OID0gInVzZXJhZGQtc3RhdGljaWRzIgorI1VTRVJBRERfVUlEX1RBQkxFUyA9ICJmaWxlcy9wYXNzd2QiCisjVVNFUkFERF9HSURfVEFCTEVTID0gImZpbGVzL2dyb3VwIgorIworIyBJbiBvcmRlciB0byBwcmV2ZW50IGdlbmVyYXRpbmcgYSBzeXN0ZW0gd2hlcmUgYSBkeW5hbWljbHkgYXNzaWduZWQgdWlkL2dpZAorIyBjYW4gZXhpc3QsIHlvdSBzaG91bGQgZW5hYmxlIHRoZSBmb2xsb3dpbmcgc2V0dGluZy4gIFRoaXMgd2lsbCBmb3JjZSB0aGUKKyMgc3lzdGVtIHRvIGVycm9yIG91dCBpZiB0aGUgdXNlci9ncm91cCBuYW1lIGlzIG5vdCBkZWZpbmVkIGluIHRoZQorIyBmaWxlcy9wYXNzd2Qgb3IgZmlsZXMvZ3JvdXAgKG9yIHNwZWNpZmllZCByZXBsYWNlbWVudHMuKQorI1VTRVJBRERfRVJST1JfRFlOQU1JQyA9ICIxIgorCisjIEVuYWJsaW5nIEZPUlRSQU4KKyMgTm90ZSB0aGlzIGlzIG5vdCBvZmZpY2lhbGx5IHN1cHBvcnRlZCBhbmQgaXMganVzdCBpbGx1c3RyYXRlZCBoZXJlIHRvCisjIHNob3cgYW4gZXhhbXBsZSBvZiBob3cgaXQgY2FuIGJlIGRvbmUKKyMgWW91J2xsIGFsc28gbmVlZCB5b3VyIGZvcnRyYW4gcmVjaXBlIHRvIGRlcGVuZCBvbiBsaWJnZm9ydHJhbgorI0ZPUlRSQU5fZm9yY2V2YXJpYWJsZSA9ICIsZm9ydHJhbiIKKyNSVU5USU1FVEFSR0VUX2FwcGVuZF9wbi1nY2MtcnVudGltZSA9ICIgbGlicXVhZG1hdGgiCisKKyMKKyMgS2VybmVsIGltYWdlIGZlYXR1cmVzCisjCisjIFRoZSBJTklUUkFNRlNfSU1BR0UgaW1hZ2UgdmFyaWFibGUgd2lsbCBjYXVzZSBhbiBhZGRpdGlvbmFsIHJlY2lwZSB0bworIyBiZSBidWlsdCBhcyBhIGRlcGVuZGVuY3kgdG8gdGhlIHdoYXQgZXZlciByb290ZnMgcmVjaXBlIHlvdSBtaWdodCBiZQorIyB1c2luZyBzdWNoIGFzIGNvcmUtaW1hZ2Utc2F0by4gIFRoZSBpbml0cmFtZnMgbWlnaHQgYmUgbmVlZGVkIGZvcgorIyB0aGUgaW5pdGlhbCBib290IG9mIG9mIHRoZSB0YXJnZXQgc3lzdGVtIHN1Y2ggYXMgdG8gbG9hZCBrZXJuZWwKKyMgbW9kdWxlcyBwcmlvciB0byBtb3VudGluZyB0aGUgcm9vdCBmaWxlIHN5c3RlbS4KKyMKKyMgSU5JVFJBTUZTX0lNQUdFX0JVTkRMRSB2YXJpYWJsZSBjb250cm9scyBpZiB0aGUgaW1hZ2UgcmVjaXBlCisjIHNwZWNpZmllZCBieSB0aGUgSU5JVFJBTUZTX0lNQUdFIHdpbGwgYmUgcnVuIHRocm91Z2ggYW4gZXh0cmEgcGFzcworIyB0aHJvdWdoIHRoZSBrZXJuZWwgY29tcGlsYXRpb24gaW4gb3JkZXIgdG8gYnVpbGQgYSBzaW5nbGUgYmluYXJ5CisjIHdoaWNoIGNvbnRhaW5zIGJvdGggdGhlIGtlcm5lbCBpbWFnZSBhbmQgdGhlIGluaXRyYW1mcy4gIFRoZQorIyBjb21iaW5lZCBiaW5hcnkgd2lsbCBiZSBkZXBvc2l0ZWQgaW50byB0aGUgdG1wL2RlcGxveSBkaXJlY3RvcnkuCisjIE5PVEU6IFlvdSBjYW4gc2V0IElOSVRSQU1GU19JTUFHRSBpbiBhbiBpbWFnZSByZWNpcGUsIGJ1dAorIyAgICAgICBJTklUUkFNRlNfSU1BR0VfQlVORExFIGNhbiBvbmx5IGJlIHNldCBpbiBhIGNvbmYgZmlsZS4KKyMKKyNJTklUUkFNRlNfSU1BR0UgPSAiY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyIKKyNJTklUUkFNRlNfSU1BR0VfQlVORExFID0gIjEiCisKKyMKKyMgSVBLIEhpZXJhcmNoaWNhbCBmZWVkCisjCisjIEluIHNvbWUgY2FzZXMgaXQgbWF5IGJlIGRlc2lyYWJsZSBub3QgdG8gaGF2ZSBhbGwgcGFja2FnZSBmaWxlcyBpbiB0aGUgc2FtZQorIyBkaXJlY3RvcnkuIEFuIGV4YW1wbGUgd291bGQgYmUgd2hlbiBwYWNrYWdlIGZlZWRzIGFyZSB0byBiZSB1cGxvYWRlZCB0byBhCisjIHNoYXJlZCB3ZWJob3N0aW5nIHNlcnZpY2Ugb3IgdHJhbnNmZXJyZWQgdG8gYSBXaW5kb3dzIG1hY2hpbmUgd2hpY2ggbWF5IGhhdmUKKyMgcHJvYmxlbXMgd2l0aCBkaXJlY3RvcmllcyBjb250YWluaW5nIG11bHRpcGxlIHRob3VzYW5kcyBvZiBmaWxlcy4KKyMKKyMgSWYgdGhlIElQS19ISUVSQVJDSElDQUxfRkVFRCB2YXJpYWJsZSBpcyBzZXQgdG8gIjEiLCBwYWNrYWdlcyB3aWxsIGJlIHNwbGl0CisjIGJldHdlZW4gc3ViZGlyZWN0b3JpZXMgaW4gYSBzaW1pbGFyIHdheSB0byBob3cgRGViaWFuIHBhY2thZ2UgZmVlZHMgYXJlCisjIG9yZ2FuaXNlZC4gSW4gdGhlIGhpZXJhcmNoaWNhbCBmZWVkLCBwYWNrYWdlIGZpbGVzIGFyZSB3cml0dGVuIHRvCisjIDxvdXRkaXI+LzxhcmNoPi88cGtnX3ByZWZpeD4vPHBrZ19zdWJkaXI+LCB3aGVyZSBwa2dfcHJlZml4IGlzIHRoZSBmaXJzdAorIyBsZXR0ZXIgb2YgdGhlIHBhY2thZ2UgZmlsZSBuYW1lIGZvciBub24tbGliIHBhY2thZ2VzIG9yICJsaWIiIHBsdXMgdGhlIDR0aAorIyBsZXR0ZXIgb2YgdGhlIHBhY2thZ2UgZmlsZSBuYW1lIGZvciBsaWIgcGFja2FnZXMgKGVnLCAnbCcgZm9yIGxlc3MsICdsaWJjJyBmb3IKKyMgbGliYzYpLiAgcGtnX3N1YmRpciBpcyB0aGUgcm9vdCBvZiB0aGUgcGFja2FnZSBmaWxlIG5hbWUsIGRpc2NhcmRpbmcgdGhlCisjIHZlcnNpb24gYW5kIGFyY2hpdGVjdHVyZSBwYXJ0cyBhbmQgdGhlIGNvbW1vbiBzdWZmaXhlcyAnLWRiZycsICctZGV2JywgJy1kb2MnLAorIyAnLXN0YXRpY2RldicsICctbG9jYWxlJyBhbmQgJy1sb2NhbGUtKicgd2hpY2ggYXJlIGxpc3RlZCBpbgorIyBtZXRhL2NvbmYvYml0YmFrZS5jb25mLgorIworIyBJZiBJUEtfSElFUkFSQ0hJQ0FMX0ZFRUQgaXMgdW5zZXQgb3Igc2V0IHRvIGFueSBvdGhlciB2YWx1ZSwgdGhlIHRyYWRpdGlvbmFsCisjIGZlZWQgbGF5b3V0IGlzIHVzZWQgd2hlcmUgcGFja2FnZSBmaWxlcyBhcmUgcGxhY2VkIGluIDxvdXRkaXI+LzxhcmNoPi8uCisjCisjSVBLX0hJRVJBUkNISUNBTF9GRUVEID0gIjEiCisjCisKKyMgVXNpbmcgUlBNNAorIworIyBDdXJyZW50bHkgdGhlIHJvb3Rmc19ycG0gY29kZSBoYXMgYSBoYXJkIGRlcGVuZHMgb24gcnBtcmVzb2x2ZTpkb19wb3B1bGF0ZV9zeXNyb290LAorIyB3aGVuIHVzaW5nIHJwbTQgdGhlIHJwbXJlc29sdmUgY29kZSB3aWxsIG5vdCBjb21waWxlIGR1ZSB0byBhIG1pc3NpbmcgaGVhZGVyIGZpbGUuCisjIFRoYXQgZGVwZW5kZW5jeSBuZWVkcyB0byBiZSByZW1vdmVkIHdoZW4gdXNpbmcgUlBNNCwgYWxzbyB0aGUgUFJFRlJSRURfVkVSU0lPTiBuZWVkcworIyB0byBiZSBzZXQuIFRoaXMgZXhhbXBsZSBzaG93cyBob3cgdG8gZW5hYmxlIHJwbTQKKyMgUFJFRkVSUkVEX1ZFUlNJT05fcnBtID0gIjQuMTEuMiIKKyMgUFJFRkVSUkVEX1ZFUlNJT05fcnBtLW5hdGl2ZSA9ICI0LjExLjIiCisjIFJQTVJPT1RGU0RFUEVORFNfcmVtb3ZlID0gInJwbXJlc29sdmUtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9zaXRlLmNvbmYuc2FtcGxlIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvc2l0ZS5jb25mLnNhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTUxZThmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvc2l0ZS5jb25mLnNhbXBsZQpAQCAtMCwwICsxLDMxIEBACisjCisjIGxvY2FsLmNvbmYgY292ZXJzIHVzZXIgc2V0dGluZ3MsIHNpdGUuY29uZiBjb3ZlcnMgc2l0ZSBzcGVjaWZpYyBpbmZvcm1hdGlvbgorIyBzdWNoIGFzIHByb3h5IHNlcnZlciBhZGRyZXNzZXMgYW5kIG9wdGlvbmFsbHkgYW55IHNoYXJlZCBkb3dubG9hZCBsb2NhdGlvbgorIworIyBTSVRFX0NPTkZfVkVSU0lPTiBpcyBpbmNyZWFzZWQgZWFjaCB0aW1lIGJ1aWxkL2NvbmYvc2l0ZS5jb25mCisjIGNoYW5nZXMgaW5jb21wYXRpYmx5CitTQ09ORl9WRVJTSU9OID0gIjEiCisKKyMgVW5jb21tZW50IHRvIGNhdXNlIENWUyB0byB1c2UgdGhlIHByb3h5IGhvc3Qgc3BlY2lmaWVkCisjQ1ZTX1BST1hZX0hPU1QgPSAicHJveHkuZXhhbXBsZS5jb20iCisjQ1ZTX1BST1hZX1BPUlQgPSAiODEiCisKKyMgRm9yIHN2biwgeW91IG5lZWQgdG8gY3JlYXRlIH4vLnN1YnZlcnNpb24vc2VydmVycyBjb250YWluaW5nOgorI1tnbG9iYWxdCisjaHR0cC1wcm94eS1ob3N0ID0gcHJveHkuZXhhbXBsZS5jb20KKyNodHRwLXByb3h5LXBvcnQgPSA4MQorIworCisjIFRvIHVzZSBnaXQgd2l0aCBhIHByb3h5LCB5b3UgbXVzdCB1c2UgYW4gZXh0ZXJuYWwgZ2l0IHByb3h5IGNvbW1hbmQsIHN1Y2ggYXMKKyMgdGhlIG9uZSBwcm92aWRlZCBieSBzY3JpcHRzL29lLWdpdC1wcm94eS5zaC4gVG8gdXNlIHRoaXMgc2NyaXB0LCBjb3B5IGl0IHRvCisjIHlvdXIgUEFUSCBhbmQgdW5jb21tZW50IHRoZSBmb2xsb3dpbmc6CisjR0lUX1BST1hZX0NPTU1BTkQgPz0gIm9lLWdpdC1wcm94eSIKKyNBTExfUFJPWFkgPz0gInNvY2tzOi8vc29ja3MuZXhhbXBsZS5jb206MTA4MCIKKyNvcgorI0FMTF9QUk9YWSA/PSAiaHR0cHM6Ly9wcm94eS5leGFtcGxlLmNvbTo4MDgwIgorIyBJZiB5b3Ugd2lzaCB0byB1c2UgY2VydGFpbiBob3N0cyB3aXRob3V0IHRoZSBwcm94eSwgc3BlY2lmeSB0aGVtIGluIE5PX1BST1hZLgorIyBTZWUgdGhlIHNjcmlwdCBmb3IgZGV0YWlscyBvbiBzeW50YXguCisKKyMgVW5jb21tZW50IHRoaXMgdG8gdXNlIGEgc2hhcmVkIGRvd25sb2FkIGRpcmVjdG9yeQorI0RMX0RJUiA9ICIvc29tZS9zaGFyZWQvZG93bmxvYWQvZGlyZWN0b3J5LyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvdG9hc3RlcmNvbmYuanNvbiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL3RvYXN0ZXJjb25mLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ1NTI3NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL3RvYXN0ZXJjb25mLmpzb24KQEAgLTAsMCArMSwxMTkgQEAKK3sKKyAgICAiY29uZmlnIjogeworICAgICAgICAiTUFDSElORSIgICAgICA6ICJxZW11eDg2IiwKKyAgICAgICAgIkRJU1RSTyIgICAgICAgOiAicG9reSIsCisgICAgICAgICJJTUFHRV9GU1RZUEVTIjogImV4dDMgamZmczIgdGFyLmJ6MiIsCisgICAgICAgICJJTUFHRV9JTlNUQUxMX2FwcGVuZCI6ICIiLAorICAgICAgICAiUEFDS0FHRV9DTEFTU0VTIjogInBhY2thZ2VfcnBtIiwKKyAgICAgICAgIlNES01BQ0hJTkUiICAgOiAieDg2XzY0IgorICAgIH0sCisgICAgImxheWVyc291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiTG9jYWwgWW9jdG8gUHJvamVjdCIsCisgICAgICAgICAgICAic291cmNldHlwZSI6ICJsb2NhbCIsCisgICAgICAgICAgICAiYXBpdXJsIjogIi4uLy4uLyIsCisgICAgICAgICAgICAiYnJhbmNoZXMiOiBbIkhFQUQiLCAibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiXSwKKyAgICAgICAgICAgICJsYXllcnMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJvcGVuZW1iZWRkZWQtY29yZSIsCisgICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRoIjogIm1ldGEiLAorICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgImRpcnBhdGgiOiAibWV0YSIKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAibWV0YS15b2N0byIsCisgICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRoIjogIm1ldGEteW9jdG8iLAorICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgImRpcnBhdGgiOiAibWV0YS15b2N0byIKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAibWV0YS15b2N0by1ic3AiLAorICAgICAgICAgICAgICAgICAgICAibG9jYWxfcGF0aCI6ICJtZXRhLXlvY3RvLWJzcCIsCisgICAgICAgICAgICAgICAgICAgICJ2Y3NfdXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgICAgICAgICAiZGlycGF0aCI6ICJtZXRhLXlvY3RvLWJzcCIKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiT3BlbkVtYmVkZGVkIiwKKyAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImxheWVyaW5kZXgiLAorICAgICAgICAgICAgImFwaXVybCI6ICJodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9hcGkvIiwKKyAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJJbXBvcnRlZCBsYXllcnMiLAorICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAiaW1wb3J0ZWQiLAorICAgICAgICAgICAgImFwaXVybCI6ICIiLAorICAgICAgICAgICAgImJyYW5jaGVzIjogWyJtYXN0ZXIiLCAiZmlkbyIsICJkaXp6eSIsICJIRUFEIl0KKworICAgICAgICB9CisgICAgXSwKKyAgICAiYml0YmFrZSIgOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIm1hc3RlciIsCisgICAgICAgICAgICAiZ2l0dXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgImJyYW5jaCI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgImRpcnBhdGgiOiAiYml0YmFrZSIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZmlkbyIsCisgICAgICAgICAgICAiZ2l0dXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgImJyYW5jaCI6ICJmaWRvIiwKKyAgICAgICAgICAgICJkaXJwYXRoIjogImJpdGJha2UiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpenp5IiwKKyAgICAgICAgICAgICJnaXR1cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAiYnJhbmNoIjogImRpenp5IiwKKyAgICAgICAgICAgICJkaXJwYXRoIjogImJpdGJha2UiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkhFQUQiLAorICAgICAgICAgICAgImdpdHVybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICJicmFuY2giOiAiSEVBRCIsCisgICAgICAgICAgICAiZGlycGF0aCI6ICJiaXRiYWtlIgorICAgICAgICB9CisgICAgXSwKKworICAgICJkZWZhdWx0cmVsZWFzZSI6ICJtYXN0ZXIiLAorCisgICAgInJlbGVhc2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIllvY3RvIFByb2plY3QgbWFzdGVyIiwKKyAgICAgICAgICAgICJiaXRiYWtlIjogIm1hc3RlciIsCisgICAgICAgICAgICAiYnJhbmNoIjogIm1hc3RlciIsCisgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiwgIm1ldGEteW9jdG8iLCAibWV0YS15b2N0by1ic3AiXSwKKyAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBZb2N0byBQcm9qZWN0IiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCisgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB1c2luZyB0aGUgdGlwIG9mIHRoZSA8YSBocmVmPVwiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvXCI+WW9jdG8gUHJvamVjdCBtYXN0ZXIgYnJhbmNoPC9hPiwgd2hlcmUgYWN0aXZlIGRldmVsb3BtZW50IHRha2VzIHBsYWNlLiBUaGlzIGlzIG5vdCBhIHN0YWJsZSBicmFuY2gsIHNvIHlvdXIgYnVpbGRzIG1pZ2h0IG5vdCB3b3JrIGFzIGV4cGVjdGVkLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZmlkbyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiWW9jdG8gUHJvamVjdCAxLjggRmlkbyIsCisgICAgICAgICAgICAiYml0YmFrZSI6ICJmaWRvIiwKKyAgICAgICAgICAgICJicmFuY2giOiAiZmlkbyIsCisgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiwgIm1ldGEteW9jdG8iLCAibWV0YS15b2N0by1ic3AiXSwKKyAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBZb2N0byBQcm9qZWN0IiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCisgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB0aXAgb2YgdGhlIDxhIGhyZWY9XCJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5L2xvZy8/aD1maWRvXCI+WW9jdG8gUHJvamVjdCAxLjggXCJGaWRvXCI8L2E+IGJyYW5jaC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpenp5IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJZb2N0byBQcm9qZWN0IDEuNyBEaXp6eSIsCisgICAgICAgICAgICAiYml0YmFrZSI6ICJkaXp6eSIsCisgICAgICAgICAgICAiYnJhbmNoIjogImRpenp5IiwKKyAgICAgICAgICAgICJkZWZhdWx0bGF5ZXJzIjogWyAib3BlbmVtYmVkZGVkLWNvcmUiLCAibWV0YS15b2N0byIsICJtZXRhLXlvY3RvLWJzcCJdLAorICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIFlvY3RvIFByb2plY3QiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKKyAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHdpdGggdGhlIHRpcCBvZiB0aGUgPGEgaHJlZj1cImh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3Bva3kvbG9nLz9oPWRpenp5XCI+WW9jdG8gUHJvamVjdCAxLjcgXCJEaXp6eVwiPC9hPiBicmFuY2guIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2NhbCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9jYWwgWW9jdG8gUHJvamVjdCIsCisgICAgICAgICAgICAiYml0YmFrZSI6ICJIRUFEIiwKKyAgICAgICAgICAgICJicmFuY2giOiAiSEVBRCIsCisgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiwgIm1ldGEteW9jdG8iLCAibWV0YS15b2N0by1ic3AiXSwKKyAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBZb2N0byBQcm9qZWN0IiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCisgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB2ZXJzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IHlvdSBoYXZlIGNsb25lZCBvciBkb3dubG9hZGVkIHRvIHlvdXIgY29tcHV0ZXIuIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvcG9reS10aW55L2RlZmNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3Bva3ktdGlueS9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1ZDVjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3Bva3ktdGlueS9kZWZjb25maWcKQEAgLTAsMCArMSwxMDA5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIEJ1c3lib3ggdmVyc2lvbjogMS4xOS4zCisjIFdlZCBOb3YgMzAgMDk6MzM6MTYgMjAxMQorIworQ09ORklHX0hBVkVfRE9UX0NPTkZJRz15CisKKyMKKyMgQnVzeWJveCBTZXR0aW5ncworIworCisjCisjIEdlbmVyYWwgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfREVTS1RPUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFRSQV9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5DTFVERV9TVVN2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfUE9SVEFCTEVfQ09ERSBpcyBub3Qgc2V0CitDT05GSUdfUExBVEZPUk1fTElOVVg9eQorQ09ORklHX0ZFQVRVUkVfQlVGRkVSU19VU0VfTUFMTE9DPXkKKyMgQ09ORklHX0ZFQVRVUkVfQlVGRkVSU19HT19PTl9TVEFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JVRkZFUlNfR09fSU5fQlNTIGlzIG5vdCBzZXQKK0NPTkZJR19TSE9XX1VTQUdFPXkKKyMgQ09ORklHX0ZFQVRVUkVfVkVSQk9TRV9VU0FHRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9DT01QUkVTU19VU0FHRT15CisjIENPTkZJR19GRUFUVVJFX0lOU1RBTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX05PX1VTUiBpcyBub3Qgc2V0CitDT05GSUdfTE9DQUxFX1NVUFBPUlQ9eQorIyBDT05GSUdfVU5JQ09ERV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSUNPREVfVVNJTkdfTE9DQUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hFQ0tfVU5JQ09ERV9JTl9FTlYgaXMgbm90IHNldAorQ09ORklHX1NVQlNUX1dDSEFSPTAKK0NPTkZJR19MQVNUX1NVUFBPUlRFRF9XQ0hBUj0wCisjIENPTkZJR19VTklDT0RFX0NPTUJJTklOR19XQ0hBUlMgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9XSURFX1dDSEFSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFX0JJRElfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFX05FVVRSQUxfVEFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9QUkVTRVJWRV9CUk9LRU4gaXMgbm90IHNldAorQ09ORklHX0xPTkdfT1BUUz15CitDT05GSUdfRkVBVFVSRV9ERVZQVFM9eQorIyBDT05GSUdfRkVBVFVSRV9DTEVBTl9VUCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9VVE1QPXkKKyMgQ09ORklHX0ZFQVRVUkVfV1RNUCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9QSURGSUxFPXkKK0NPTkZJR19GRUFUVVJFX1NVSUQ9eQorQ09ORklHX0ZFQVRVUkVfU1VJRF9DT05GSUc9eQorQ09ORklHX0ZFQVRVUkVfU1VJRF9DT05GSUdfUVVJRVQ9eQorIyBDT05GSUdfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BSRUZFUl9BUFBMRVRTIGlzIG5vdCBzZXQKK0NPTkZJR19CVVNZQk9YX0VYRUNfUEFUSD0iL3Byb2Mvc2VsZi9leGUiCitDT05GSUdfRkVBVFVSRV9TWVNMT0c9eQorQ09ORklHX0ZFQVRVUkVfSEFWRV9SUEM9eQorCisjCisjIEJ1aWxkIE9wdGlvbnMKKyMKKyMgQ09ORklHX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSUUgaXMgbm90IHNldAorIyBDT05GSUdfTk9NTVUgaXMgbm90IHNldAorIyBDT05GSUdfQlVJTERfTElCQlVTWUJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORElWSURVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSEFSRURfQlVTWUJPWCBpcyBub3Qgc2V0CitDT05GSUdfTEZTPXkKK0NPTkZJR19DUk9TU19DT01QSUxFUl9QUkVGSVg9IiIKK0NPTkZJR19FWFRSQV9DRkxBR1M9IiIKKworIworIyBEZWJ1Z2dpbmcgT3B0aW9ucworIworIyBDT05GSUdfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEVTU0lNSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfTk9fREVCVUdfTElCPXkKKyMgQ09ORklHX0RNQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfRUZFTkNFIGlzIG5vdCBzZXQKKworIworIyBJbnN0YWxsYXRpb24gT3B0aW9ucyAoIm1ha2UgaW5zdGFsbCIgYmVoYXZpb3IpCisjCitDT05GSUdfSU5TVEFMTF9BUFBMRVRfU1lNTElOS1M9eQorIyBDT05GSUdfSU5TVEFMTF9BUFBMRVRfSEFSRExJTktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfQVBQTEVUX1NDUklQVF9XUkFQUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX0FQUExFVF9ET05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfU0hfQVBQTEVUX1NZTUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9TSF9BUFBMRVRfSEFSRExJTksgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9TSF9BUFBMRVRfU0NSSVBUX1dSQVBQRVIgaXMgbm90IHNldAorQ09ORklHX1BSRUZJWD0iLi9faW5zdGFsbCIKKworIworIyBCdXN5Ym94IExpYnJhcnkgVHVuaW5nCisjCitDT05GSUdfRkVBVFVSRV9TWVNURU1EPXkKK0NPTkZJR19GRUFUVVJFX1JUTUlOTUFYPXkKK0NPTkZJR19QQVNTV09SRF9NSU5MRU49NgorQ09ORklHX01ENV9TSVpFX1ZTX1NQRUVEPTIKK0NPTkZJR19GRUFUVVJFX0ZBU1RfVE9QPXkKKyMgQ09ORklHX0ZFQVRVUkVfRVRDX05FVFdPUktTIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1VTRV9URVJNSU9TPXkKK0NPTkZJR19GRUFUVVJFX0VESVRJTkc9eQorQ09ORklHX0ZFQVRVUkVfRURJVElOR19NQVhfTEVOPTEwMjQKKyMgQ09ORklHX0ZFQVRVUkVfRURJVElOR19WSSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9FRElUSU5HX0hJU1RPUlk9MTUKK0NPTkZJR19GRUFUVVJFX0VESVRJTkdfU0FWRUhJU1RPUlk9eQorIyBDT05GSUdfRkVBVFVSRV9SRVZFUlNFX1NFQVJDSCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9UQUJfQ09NUExFVElPTj15CitDT05GSUdfRkVBVFVSRV9VU0VSTkFNRV9DT01QTEVUSU9OPXkKK0NPTkZJR19GRUFUVVJFX0VESVRJTkdfRkFOQ1lfUFJPTVBUPXkKKyMgQ09ORklHX0ZFQVRVUkVfRURJVElOR19BU0tfVEVSTUlOQUwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfTk9OX1BPU0lYX0NQPXkKKyMgQ09ORklHX0ZFQVRVUkVfVkVSQk9TRV9DUF9NRVNTQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0NPUFlCVUZfS0I9NAorQ09ORklHX0ZFQVRVUkVfU0tJUF9ST09URlM9eQorQ09ORklHX01PTk9UT05JQ19TWVNDQUxMPXkKK0NPTkZJR19JT0NUTF9IRVgyU1RSX0VSUk9SPXkKK0NPTkZJR19GRUFUVVJFX0hXSUI9eQorCisjCisjIEFwcGxldHMKKyMKKworIworIyBBcmNoaXZhbCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0ZFQVRVUkVfU0VBTUxFU1NfWFogaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfU0VBTUxFU1NfTFpNQT15CitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19CWjI9eQorQ09ORklHX0ZFQVRVUkVfU0VBTUxFU1NfR1o9eQorQ09ORklHX0ZFQVRVUkVfU0VBTUxFU1NfWj15CitDT05GSUdfQVI9eQorIyBDT05GSUdfRkVBVFVSRV9BUl9MT05HX0ZJTEVOQU1FUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0FSX0NSRUFURSBpcyBub3Qgc2V0CitDT05GSUdfQlVOWklQMj15CisjIENPTkZJR19CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfQ1BJTz15CisjIENPTkZJR19GRUFUVVJFX0NQSU9fTyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NQSU9fUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUEtHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RQS0dfREVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRFBLR19ERUJfRVhUUkFDVF9PTkxZIGlzIG5vdCBzZXQKK0NPTkZJR19HVU5aSVA9eQorQ09ORklHX0daSVA9eQorIyBDT05GSUdfRkVBVFVSRV9HWklQX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19MWk9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xaT1BfQ09NUFJfSElHSCBpcyBub3Qgc2V0CisjIENPTkZJR19SUE0yQ1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19SUE0gaXMgbm90IHNldAorQ09ORklHX1RBUj15CitDT05GSUdfRkVBVFVSRV9UQVJfQ1JFQVRFPXkKK0NPTkZJR19GRUFUVVJFX1RBUl9BVVRPREVURUNUPXkKK0NPTkZJR19GRUFUVVJFX1RBUl9GUk9NPXkKK0NPTkZJR19GRUFUVVJFX1RBUl9PTERHTlVfQ09NUEFUSUJJTElUWT15CisjIENPTkZJR19GRUFUVVJFX1RBUl9PTERTVU5fQ09NUEFUSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9UQVJfR05VX0VYVEVOU0lPTlM9eQorIyBDT05GSUdfRkVBVFVSRV9UQVJfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX1RPX0NPTU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UQVJfVU5BTUVfR05BTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UQVJfTk9QUkVTRVJWRV9USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfVU5DT01QUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTkxaTUEgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MWk1BX0ZBU1QgaXMgbm90IHNldAorIyBDT05GSUdfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlhaIGlzIG5vdCBzZXQKKyMgQ09ORklHX1haIGlzIG5vdCBzZXQKK0NPTkZJR19VTlpJUD15CisKKyMKKyMgQ29yZXV0aWxzCisjCitDT05GSUdfQkFTRU5BTUU9eQorQ09ORklHX0NBVD15CitDT05GSUdfREFURT15CisjIENPTkZJR19GRUFUVVJFX0RBVEVfSVNPRk1UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfREFURV9OQU5PIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0RBVEVfQ09NUEFUPXkKK0NPTkZJR19JRD15CitDT05GSUdfR1JPVVBTPXkKK0NPTkZJR19URVNUPXkKK0NPTkZJR19GRUFUVVJFX1RFU1RfNjQ9eQorQ09ORklHX1RPVUNIPXkKK0NPTkZJR19UUj15CitDT05GSUdfRkVBVFVSRV9UUl9DTEFTU0VTPXkKKyMgQ09ORklHX0ZFQVRVUkVfVFJfRVFVSVYgaXMgbm90IHNldAorIyBDT05GSUdfQkFTRTY0IGlzIG5vdCBzZXQKK0NPTkZJR19XSE89eQorQ09ORklHX1VTRVJTPXkKKyMgQ09ORklHX0NBTCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVRWIGlzIG5vdCBzZXQKK0NPTkZJR19DSEdSUD15CitDT05GSUdfQ0hNT0Q9eQorQ09ORklHX0NIT1dOPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ0hPV05fTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJPT1Q9eQorIyBDT05GSUdfQ0tTVU0gaXMgbm90IHNldAorIyBDT05GSUdfQ09NTSBpcyBub3Qgc2V0CitDT05GSUdfQ1A9eQorIyBDT05GSUdfRkVBVFVSRV9DUF9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0NVVD15CitDT05GSUdfREQ9eQorQ09ORklHX0ZFQVRVUkVfRERfU0lHTkFMX0hBTkRMSU5HPXkKKyMgQ09ORklHX0ZFQVRVUkVfRERfVEhJUkRfU1RBVFVTX0xJTkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9ERF9JQlNfT0JTIGlzIG5vdCBzZXQKK0NPTkZJR19ERj15CisjIENPTkZJR19GRUFUVVJFX0RGX0ZBTkNZIGlzIG5vdCBzZXQKK0NPTkZJR19ESVJOQU1FPXkKKyMgQ09ORklHX0RPUzJVTklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVgyRE9TIGlzIG5vdCBzZXQKK0NPTkZJR19EVT15CitDT05GSUdfRkVBVFVSRV9EVV9ERUZBVUxUX0JMT0NLU0laRV8xSz15CitDT05GSUdfRUNITz15CitDT05GSUdfRkVBVFVSRV9GQU5DWV9FQ0hPPXkKK0NPTkZJR19FTlY9eQorQ09ORklHX0ZFQVRVUkVfRU5WX0xPTkdfT1BUSU9OUz15CisjIENPTkZJR19FWFBBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9FWFBBTkRfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19FWFBSPXkKK0NPTkZJR19FWFBSX01BVEhfU1VQUE9SVF82ND15CitDT05GSUdfRkFMU0U9eQorIyBDT05GSUdfRk9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19GU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfSEVBRD15CisjIENPTkZJR19GRUFUVVJFX0ZBTkNZX0hFQUQgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNUQUxMX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTE49eQorQ09ORklHX0xPR05BTUU9eQorQ09ORklHX0xTPXkKK0NPTkZJR19GRUFUVVJFX0xTX0ZJTEVUWVBFUz15CitDT05GSUdfRkVBVFVSRV9MU19GT0xMT1dMSU5LUz15CitDT05GSUdfRkVBVFVSRV9MU19SRUNVUlNJVkU9eQorQ09ORklHX0ZFQVRVUkVfTFNfU09SVEZJTEVTPXkKK0NPTkZJR19GRUFUVVJFX0xTX1RJTUVTVEFNUFM9eQorQ09ORklHX0ZFQVRVUkVfTFNfVVNFUk5BTUU9eQorQ09ORklHX0ZFQVRVUkVfTFNfQ09MT1I9eQorIyBDT05GSUdfRkVBVFVSRV9MU19DT0xPUl9JU19ERUZBVUxUIGlzIG5vdCBzZXQKK0NPTkZJR19NRDVTVU09eQorQ09ORklHX01LRElSPXkKK0NPTkZJR19GRUFUVVJFX01LRElSX0xPTkdfT1BUSU9OUz15CitDT05GSUdfTUtGSUZPPXkKK0NPTkZJR19NS05PRD15CitDT05GSUdfTVY9eQorIyBDT05GSUdfRkVBVFVSRV9NVl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTklDRSBpcyBub3Qgc2V0CitDT05GSUdfTk9IVVA9eQorQ09ORklHX09EPXkKKyMgQ09ORklHX1BSSU5URU5WIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEY9eQorQ09ORklHX1BXRD15CitDT05GSUdfUkVBRExJTks9eQorQ09ORklHX0ZFQVRVUkVfUkVBRExJTktfRk9MTE9XPXkKK0NPTkZJR19SRUFMUEFUSD15CitDT05GSUdfUk09eQorQ09ORklHX1JNRElSPXkKKyMgQ09ORklHX0ZFQVRVUkVfUk1ESVJfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19TRVE9eQorIyBDT05GSUdfU0hBMVNVTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSEEyNTZTVU0gaXMgbm90IHNldAorIyBDT05GSUdfU0hBNTEyU1VNIGlzIG5vdCBzZXQKK0NPTkZJR19TTEVFUD15CitDT05GSUdfRkVBVFVSRV9GQU5DWV9TTEVFUD15CisjIENPTkZJR19GRUFUVVJFX0ZMT0FUX1NMRUVQIGlzIG5vdCBzZXQKK0NPTkZJR19TT1JUPXkKK0NPTkZJR19GRUFUVVJFX1NPUlRfQklHPXkKKyMgQ09ORklHX1NQTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU1BMSVRfRkFOQ1kgaXMgbm90IHNldAorIyBDT05GSUdfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NUQVRfRk9STUFUIGlzIG5vdCBzZXQKK0NPTkZJR19TVFRZPXkKKyMgQ09ORklHX1NVTSBpcyBub3Qgc2V0CitDT05GSUdfU1lOQz15CisjIENPTkZJR19UQUMgaXMgbm90IHNldAorQ09ORklHX1RBSUw9eQorQ09ORklHX0ZFQVRVUkVfRkFOQ1lfVEFJTD15CitDT05GSUdfVEVFPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEVFX1VTRV9CTE9DS19JTyBpcyBub3Qgc2V0CitDT05GSUdfVFJVRT15CitDT05GSUdfVFRZPXkKK0NPTkZJR19VTkFNRT15CisjIENPTkZJR19VTkVYUEFORCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1VORVhQQU5EX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfVU5JUT15CitDT05GSUdfVVNMRUVQPXkKKyMgQ09ORklHX1VVREVDT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VVRU5DT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19XQz15CisjIENPTkZJR19GRUFUVVJFX1dDX0xBUkdFIGlzIG5vdCBzZXQKK0NPTkZJR19XSE9BTUk9eQorQ09ORklHX1lFUz15CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIGNwIGFuZCBtdgorIworIyBDT05GSUdfRkVBVFVSRV9QUkVTRVJWRV9IQVJETElOS1MgaXMgbm90IHNldAorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciBscywgbW9yZSBhbmQgdGVsbmV0CisjCitDT05GSUdfRkVBVFVSRV9BVVRPV0lEVEg9eQorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciBkZiwgZHUsIGxzCisjCitDT05GSUdfRkVBVFVSRV9IVU1BTl9SRUFEQUJMRT15CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIG1kNXN1bSwgc2hhMXN1bSwgc2hhMjU2c3VtLCBzaGE1MTJzdW0KKyMKK0NPTkZJR19GRUFUVVJFX01ENV9TSEExX1NVTV9DSEVDSz15CisKKyMKKyMgQ29uc29sZSBVdGlsaXRpZXMKKyMKK0NPTkZJR19DSFZUPXkKKyMgQ09ORklHX0ZHQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfQ0xFQVI9eQorQ09ORklHX0RFQUxMT0NWVD15CitDT05GSUdfRFVNUEtNQVA9eQorIyBDT05GSUdfS0JEX01PREUgaXMgbm90IHNldAorQ09ORklHX0xPQURGT05UPXkKK0NPTkZJR19MT0FES01BUD15CitDT05GSUdfT1BFTlZUPXkKK0NPTkZJR19SRVNFVD15CisjIENPTkZJR19SRVNJWkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9SRVNJWkVfUFJJTlQgaXMgbm90IHNldAorQ09ORklHX1NFVENPTlNPTEU9eQorIyBDT05GSUdfRkVBVFVSRV9TRVRDT05TT0xFX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRGT05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0VURk9OVF9URVhUVUFMX01BUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRVRGT05UX0RJUj0iIgorIyBDT05GSUdfU0VUS0VZQ09ERVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VUTE9HQ09OUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSE9XS0VZIGlzIG5vdCBzZXQKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgbG9hZGZvbnQgYW5kIHNldGZvbnQKKyMKKyMgQ09ORklHX0ZFQVRVUkVfTE9BREZPTlRfUFNGMiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xPQURGT05UX1JBVyBpcyBub3Qgc2V0CisKKyMKKyMgRGViaWFuIFV0aWxpdGllcworIworQ09ORklHX01LVEVNUD15CisjIENPTkZJR19QSVBFX1BST0dSRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19SVU5fUEFSVFM9eQorQ09ORklHX0ZFQVRVUkVfUlVOX1BBUlRTX0xPTkdfT1BUSU9OUz15CisjIENPTkZJR19GRUFUVVJFX1JVTl9QQVJUU19GQU5DWSBpcyBub3Qgc2V0CitDT05GSUdfU1RBUlRfU1RPUF9EQUVNT049eQorQ09ORklHX0ZFQVRVUkVfU1RBUlRfU1RPUF9EQUVNT05fRkFOQ1k9eQorQ09ORklHX0ZFQVRVUkVfU1RBUlRfU1RPUF9EQUVNT05fTE9OR19PUFRJT05TPXkKK0NPTkZJR19XSElDSD15CisKKyMKKyMgRWRpdG9ycworIworQ09ORklHX1BBVENIPXkKK0NPTkZJR19WST15CitDT05GSUdfRkVBVFVSRV9WSV9NQVhfTEVOPTEwMjQKK0NPTkZJR19GRUFUVVJFX1ZJXzhCSVQ9eQorQ09ORklHX0ZFQVRVUkVfVklfQ09MT049eQorQ09ORklHX0ZFQVRVUkVfVklfWUFOS01BUks9eQorQ09ORklHX0ZFQVRVUkVfVklfU0VBUkNIPXkKKyMgQ09ORklHX0ZFQVRVUkVfVklfUkVHRVhfU0VBUkNIIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1ZJX1VTRV9TSUdOQUxTPXkKKyMgQ09ORklHX0ZFQVRVUkVfVklfRE9UX0NNRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZJX1JFQURPTkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVklfU0VUT1BUUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZJX1NFVCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9WSV9XSU5fUkVTSVpFPXkKKyMgQ09ORklHX0ZFQVRVUkVfVklfQVNLX1RFUk1JTkFMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1ZJX09QVElNSVpFX0NVUlNPUj15CitDT05GSUdfQVdLPXkKKyMgQ09ORklHX0ZFQVRVUkVfQVdLX0xJQk0gaXMgbm90IHNldAorQ09ORklHX0NNUD15CitDT05GSUdfRElGRj15CisjIENPTkZJR19GRUFUVVJFX0RJRkZfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0RJRkZfRElSPXkKKyMgQ09ORklHX0VEIGlzIG5vdCBzZXQKK0NPTkZJR19TRUQ9eQorQ09ORklHX0ZFQVRVUkVfQUxMT1dfRVhFQz15CisKKyMKKyMgRmluZGluZyBVdGlsaXRpZXMKKyMKK0NPTkZJR19GSU5EPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUFJJTlQwPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTVRJTUU9eQorQ09ORklHX0ZFQVRVUkVfRklORF9NTUlOPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUEVSTT15CitDT05GSUdfRkVBVFVSRV9GSU5EX1RZUEU9eQorQ09ORklHX0ZFQVRVUkVfRklORF9YREVWPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTUFYREVQVEg9eQorQ09ORklHX0ZFQVRVUkVfRklORF9ORVdFUj15CisjIENPTkZJR19GRUFUVVJFX0ZJTkRfSU5VTSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9GSU5EX0VYRUM9eQorQ09ORklHX0ZFQVRVUkVfRklORF9VU0VSPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfR1JPVVA9eQorQ09ORklHX0ZFQVRVUkVfRklORF9OT1Q9eQorQ09ORklHX0ZFQVRVUkVfRklORF9ERVBUSD15CitDT05GSUdfRkVBVFVSRV9GSU5EX1BBUkVOPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfU0laRT15CitDT05GSUdfRkVBVFVSRV9GSU5EX1BSVU5FPXkKKyMgQ09ORklHX0ZFQVRVUkVfRklORF9ERUxFVEUgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRklORF9QQVRIPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUkVHRVg9eQorIyBDT05GSUdfRkVBVFVSRV9GSU5EX0NPTlRFWFQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9GSU5EX0xJTktTIGlzIG5vdCBzZXQKK0NPTkZJR19HUkVQPXkKK0NPTkZJR19GRUFUVVJFX0dSRVBfRUdSRVBfQUxJQVM9eQorQ09ORklHX0ZFQVRVUkVfR1JFUF9GR1JFUF9BTElBUz15CitDT05GSUdfRkVBVFVSRV9HUkVQX0NPTlRFWFQ9eQorQ09ORklHX1hBUkdTPXkKKyMgQ09ORklHX0ZFQVRVUkVfWEFSR1NfU1VQUE9SVF9DT05GSVJNQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9YQVJHU19TVVBQT1JUX1FVT1RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfVEVSTU9QVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfWkVST19URVJNIGlzIG5vdCBzZXQKKworIworIyBJbml0IFV0aWxpdGllcworIworIyBDT05GSUdfQk9PVENIQVJURCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JPT1RDSEFSVERfQkxPQVRFRF9IRUFERVIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CT09UQ0hBUlREX0NPTkZJR19GSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19IQUxUPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ0FMTF9URUxJTklUIGlzIG5vdCBzZXQKK0NPTkZJR19URUxJTklUX1BBVEg9IiIKKyMgQ09ORklHX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9VU0VfSU5JVFRBQiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0tJTExfUkVNT1ZFRCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9LSUxMX0RFTEFZPTAKKyMgQ09ORklHX0ZFQVRVUkVfSU5JVF9TQ1RUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOSVRfU1lTTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRVhUUkFfUVVJRVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTklUX0NPUkVEVU1QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfSU5JVF9URVJNSU5BTF9UWVBFPSIiCisjIENPTkZJR19NRVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTUVTR19FTkFCTEVfT05MWV9HUk9VUCBpcyBub3Qgc2V0CisKKyMKKyMgTG9naW4vUGFzc3dvcmQgTWFuYWdlbWVudCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0FERF9TSEVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRU1PVkVfU0hFTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSEFET1dQQVNTV0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9CQl9QV0RfR1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9CQl9TSEFET1cgaXMgbm90IHNldAorQ09ORklHX1VTRV9CQl9DUllQVD15CisjIENPTkZJR19VU0VfQkJfQ1JZUFRfU0hBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FERFVTRVIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BRERVU0VSX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIRUNLX05BTUVTIGlzIG5vdCBzZXQKK0NPTkZJR19GSVJTVF9TWVNURU1fSUQ9MAorQ09ORklHX0xBU1RfU1lTVEVNX0lEPTAKKyMgQ09ORklHX0FEREdST1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQURER1JPVVBfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQUREVVNFUl9UT19HUk9VUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUxVU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFTEdST1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfREVMX1VTRVJfRlJPTV9HUk9VUCBpcyBub3Qgc2V0CisjIENPTkZJR19HRVRUWSBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQU0gaXMgbm90IHNldAorIyBDT05GSUdfTE9HSU5fU0NSSVBUUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX05PTE9HSU4gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TRUNVUkVUVFkgaXMgbm90IHNldAorIyBDT05GSUdfUEFTU1dEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUEFTU1dEX1dFQUtfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRQVyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFBBU1NXRCBpcyBub3Qgc2V0CisjIENPTkZJR19TVSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NVX1NZU0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NVX0NIRUNLU19TSEVMTFMgaXMgbm90IHNldAorIyBDT05GSUdfU1VMT0dJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WTE9DSyBpcyBub3Qgc2V0CisKKyMKKyMgTGludXggRXh0MiBGUyBQcm9ncworIworQ09ORklHX0NIQVRUUj15CitDT05GSUdfRlNDSz15CisjIENPTkZJR19MU0FUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVFVORTJGUyBpcyBub3Qgc2V0CisKKyMKKyMgTGludXggTW9kdWxlIFV0aWxpdGllcworIworIyBDT05GSUdfTU9ESU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RQUk9CRV9TTUFMTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PRFBST0JFX1NNQUxMX09QVElPTlNfT05fQ01ETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PRFBST0JFX1NNQUxMX0NIRUNLX0FMUkVBRFlfTE9BREVEIGlzIG5vdCBzZXQKK0NPTkZJR19JTlNNT0Q9eQorQ09ORklHX1JNTU9EPXkKK0NPTkZJR19MU01PRD15CisjIENPTkZJR19GRUFUVVJFX0xTTU9EX1BSRVRUWV8yXzZfT1VUUFVUIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RQUk9CRT15CisjIENPTkZJR19GRUFUVVJFX01PRFBST0JFX0JMQUNLTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVBNT0QgaXMgbm90IHNldAorCisjCisjIE9wdGlvbnMgY29tbW9uIHRvIG11bHRpcGxlIG1vZHV0aWxzCisjCisjIENPTkZJR19GRUFUVVJFXzJfNF9NT0RVTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX1RSWV9NTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX1ZFUlNJT05fQ0hFQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNNT0RfS1NZTU9PUFNfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9MT0FESU5LTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX0xPQURfTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX0xPQURfTUFQX0ZVTEwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQ0hFQ0tfVEFJTlRFRF9NT0RVTEU9eQorQ09ORklHX0ZFQVRVUkVfTU9EVVRJTFNfQUxJQVM9eQorQ09ORklHX0ZFQVRVUkVfTU9EVVRJTFNfU1lNQk9MUz15CitDT05GSUdfREVGQVVMVF9NT0RVTEVTX0RJUj0iL2xpYi9tb2R1bGVzIgorQ09ORklHX0RFRkFVTFRfREVQTU9EX0ZJTEU9Im1vZHVsZXMuZGVwIgorCisjCisjIExpbnV4IFN5c3RlbSBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0JMT0NLREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFViBpcyBub3Qgc2V0CisjIENPTkZJR19BQ1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0FDUElEX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JMS0lEX1RZUEUgaXMgbm90IHNldAorQ09ORklHX0RNRVNHPXkKK0NPTkZJR19GRUFUVVJFX0RNRVNHX1BSRVRUWT15CitDT05GSUdfRkJTRVQ9eQorQ09ORklHX0ZFQVRVUkVfRkJTRVRfRkFOQ1k9eQorQ09ORklHX0ZFQVRVUkVfRkJTRVRfUkVBRE1PREU9eQorIyBDT05GSUdfRkRGTFVTSCBpcyBub3Qgc2V0CisjIENPTkZJR19GREZPUk1BVCBpcyBub3Qgc2V0CitDT05GSUdfRkRJU0s9eQorIyBDT05GSUdfRkRJU0tfU1VQUE9SVF9MQVJHRV9ESVNLUyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9GRElTS19XUklUQUJMRT15CisjIENPTkZJR19GRUFUVVJFX0FJWF9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NHSV9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NVTl9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX09TRl9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0dQVF9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZESVNLX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJTkRGUyBpcyBub3Qgc2V0CitDT05GSUdfRkxPQ0s9eQorIyBDT05GSUdfRlJFRVJBTURJU0sgaXMgbm90IHNldAorQ09ORklHX0ZTQ0tfTUlOSVg9eQorIyBDT05GSUdfTUtGU19FWFQyIGlzIG5vdCBzZXQKK0NPTkZJR19NS0ZTX01JTklYPXkKK0NPTkZJR19GRUFUVVJFX01JTklYMj15CisjIENPTkZJR19NS0ZTX1JFSVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19NS0ZTX1ZGQVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VUT1BUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfR0VUT1BUX0xPTkcgaXMgbm90IHNldAorQ09ORklHX0hFWERVTVA9eQorIyBDT05GSUdfRkVBVFVSRV9IRVhEVU1QX1JFVkVSU0UgaXMgbm90IHNldAorIyBDT05GSUdfSEQgaXMgbm90IHNldAorQ09ORklHX0hXQ0xPQ0s9eQorQ09ORklHX0ZFQVRVUkVfSFdDTE9DS19MT05HX09QVElPTlM9eQorQ09ORklHX0ZFQVRVUkVfSFdDTE9DS19BREpUSU1FX0ZIUz15CisjIENPTkZJR19JUENSTSBpcyBub3Qgc2V0CisjIENPTkZJR19JUENTIGlzIG5vdCBzZXQKK0NPTkZJR19MT1NFVFVQPXkKKyMgQ09ORklHX0xTUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NREVWX0NPTkYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NREVWX1JFTkFNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01ERVZfUkVOQU1FX1JFR0VYUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01ERVZfRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01ERVZfTE9BRF9GSVJNV0FSRSBpcyBub3Qgc2V0CitDT05GSUdfTUtTV0FQPXkKKyMgQ09ORklHX0ZFQVRVUkVfTUtTV0FQX1VVSUQgaXMgbm90IHNldAorQ09ORklHX01PUkU9eQorQ09ORklHX01PVU5UPXkKKyMgQ09ORklHX0ZFQVRVUkVfTU9VTlRfRkFLRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PVU5UX1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NT1VOVF9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTU9VTlRfTEFCRUwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfTU9VTlRfTkZTPXkKKyMgQ09ORklHX0ZFQVRVUkVfTU9VTlRfQ0lGUyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9NT1VOVF9GTEFHUz15CitDT05GSUdfRkVBVFVSRV9NT1VOVF9GU1RBQj15CitDT05GSUdfUElWT1RfUk9PVD15CitDT05GSUdfUkRBVEU9eQorIyBDT05GSUdfUkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFEUFJPRklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENXQUtFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDUklQVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1JJUFRSRVBMQVkgaXMgbm90IHNldAorIyBDT05GSUdfU0VUQVJDSCBpcyBub3Qgc2V0CitDT05GSUdfU1dBUE9OT0ZGPXkKKyMgQ09ORklHX0ZFQVRVUkVfU1dBUE9OX1BSSSBpcyBub3Qgc2V0CitDT05GSUdfU1dJVENIX1JPT1Q9eQorQ09ORklHX1VNT1VOVD15CitDT05GSUdfRkVBVFVSRV9VTU9VTlRfQUxMPXkKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgbW91bnQvdW1vdW50CisjCitDT05GSUdfRkVBVFVSRV9NT1VOVF9MT09QPXkKK0NPTkZJR19GRUFUVVJFX01PVU5UX0xPT1BfQ1JFQVRFPXkKKyMgQ09ORklHX0ZFQVRVUkVfTVRBQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZPTFVNRUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfQlRSRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9SRUlTRVJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0ZBVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0pGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX05URlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9JU085NjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfVURGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTFVLUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0xJTlVYU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1JPTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfU1lTViBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX09DRlMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTElOVVhSQUlEIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFV0aWxpdGllcworIworIyBDT05GSUdfQ09OU1BZIGlzIG5vdCBzZXQKK0NPTkZJR19MRVNTPXkKK0NPTkZJR19GRUFUVVJFX0xFU1NfTUFYTElORVM9OTk5OTk5OQorQ09ORklHX0ZFQVRVUkVfTEVTU19CUkFDS0VUUz15CitDT05GSUdfRkVBVFVSRV9MRVNTX0ZMQUdTPXkKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19NQVJLUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xFU1NfUkVHRVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19XSU5DSCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xFU1NfQVNLX1RFUk1JTkFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19EQVNIQ01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19MSU5FTlVNUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQU5EV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkFORERVTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VUU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSUFUVEFDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VQklERVRBQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVUJJTUtWT0wgaXMgbm90IHNldAorIyBDT05GSUdfVUJJUk1WT0wgaXMgbm90IHNldAorIyBDT05GSUdfVUJJUlNWT0wgaXMgbm90IHNldAorIyBDT05GSUdfVUJJVVBEQVRFVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FESlRJTUVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JCQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ09NUFJFU1NfQkJDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfQkVFUCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9CRUVQX0ZSRVE9MAorQ09ORklHX0ZFQVRVUkVfQkVFUF9MRU5HVEhfTVM9MAorIyBDT05GSUdfQ0hBVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfTk9GQUlMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9UVFlfSElGSSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfSU1QTElDSVRfQ1IgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEFUX1NXQUxMT1dfT1BUUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfU0VORF9FU0NBUEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9WQVJfQUJPUlRfTEVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9DTFJfQUJPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NST05EX0QgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DUk9ORF9DQUxMX1NFTkRNQUlMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0NST05EX0RJUj0iIgorIyBDT05GSUdfQ1JPTlRBQiBpcyBub3Qgc2V0CitDT05GSUdfREM9eQorIyBDT05GSUdfRkVBVFVSRV9EQ19MSUJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVkZTRCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZGU0RfTU9ETE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZGU0RfRkdfTlAgaXMgbm90IHNldAorIyBDT05GSUdfREVWRlNEX1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9ERVZGUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZNRU0gaXMgbm90IHNldAorIyBDT05GSUdfRUpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9FSkVDVF9TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCU1BMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZMQVNIQ1AgaXMgbm90IHNldAorIyBDT05GSUdfRkxBU0hfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19GTEFTSF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfRkxBU0hfRVJBU0VBTEwgaXMgbm90IHNldAorIyBDT05GSUdfSU9OSUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRllEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MQVNUX1NNQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEFTVF9GQU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19IRFBBUk0gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fR0VUX0lERU5USVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSERQQVJNX0hESU9fU0NBTl9IV0lGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSERQQVJNX0hESU9fVU5SRUdJU1RFUl9IV0lGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSERQQVJNX0hESU9fRFJJVkVfUkVTRVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19UUklTVEFURV9IV0lGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSERQQVJNX0hESU9fR0VUU0VUX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUtFREVWUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01BS0VERVZTX0xFQUYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NQUtFREVWU19UQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQU4gaXMgbm90IHNldAorQ09ORklHX01JQ1JPQ09NPXkKKyMgQ09ORklHX01PVU5UUE9JTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVQgaXMgbm90IHNldAorIyBDT05GSUdfUkFJREFVVE9SVU4gaXMgbm90IHNldAorIyBDT05GSUdfUkVBREFIRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5MRVZFTCBpcyBub3Qgc2V0CisjIENPTkZJR19SWCBpcyBub3Qgc2V0CitDT05GSUdfU0VUU0lEPXkKK0NPTkZJR19TVFJJTkdTPXkKKyMgQ09ORklHX1RBU0tTRVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UQVNLU0VUX0ZBTkNZIGlzIG5vdCBzZXQKK0NPTkZJR19USU1FPXkKKyMgQ09ORklHX1RJTUVPVVQgaXMgbm90IHNldAorIyBDT05GSUdfVFRZU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19WT0xOQU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTEwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcgVXRpbGl0aWVzCisjCisjIENPTkZJR19OQU1FSUYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9OQU1FSUZfRVhURU5ERUQgaXMgbm90IHNldAorIyBDT05GSUdfTkJEQ0xJRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19OQz15CisjIENPTkZJR19OQ19TRVJWRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkNfRVhUUkEgaXMgbm90IHNldAorIyBDT05GSUdfTkNfMTEwX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfUElORz15CitDT05GSUdfUElORzY9eQorQ09ORklHX0ZFQVRVUkVfRkFOQ1lfUElORz15CisjIENPTkZJR19XSE9JUyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9JUFY2PXkKKyMgQ09ORklHX0ZFQVRVUkVfVU5JWF9MT0NBTCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9QUkVGRVJfSVBWNF9BRERSRVNTPXkKKyMgQ09ORklHX1ZFUkJPU0VfUkVTT0xVVElPTl9FUlJPUlMgaXMgbm90IHNldAorIyBDT05GSUdfQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUElORyBpcyBub3Qgc2V0CisjIENPTkZJR19CUkNUTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JSQ1RMX0ZBTkNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQlJDVExfU0hPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ETlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSEVSX1dBS0UgaXMgbm90IHNldAorIyBDT05GSUdfRkFLRUlERU5URCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRlRQX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRlRQRF9BQ0NFUFRfQlJPS0VOX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRQR0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUFBVVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZUUEdFVFBVVF9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0hPU1ROQU1FPXkKKyMgQ09ORklHX0hUVFBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfUkFOR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfVVNFX1NFTkRGSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfU0VUVUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfQkFTSUNfQVVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0FVVEhfTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfQ0dJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfQ09ORklHX1dJVEhfU0NSSVBUX0lOVEVSUFIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9TRVRfUkVNT1RFX1BPUlRfVE9fRU5WIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfRU5DT0RFX1VSTF9TVFIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9FUlJPUl9QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX1BST1hZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfR1pJUCBpcyBub3Qgc2V0CitDT05GSUdfSUZDT05GSUc9eQorQ09ORklHX0ZFQVRVUkVfSUZDT05GSUdfU1RBVFVTPXkKKyMgQ09ORklHX0ZFQVRVUkVfSUZDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lGQ09ORklHX01FTVNUQVJUX0lPQUREUl9JUlEgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfSUZDT05GSUdfSFc9eQorIyBDT05GSUdfRkVBVFVSRV9JRkNPTkZJR19CUk9BRENBU1RfUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JRkVOU0xBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSUZQTFVHRCBpcyBub3Qgc2V0CitDT05GSUdfSUZVUERPV049eQorQ09ORklHX0lGVVBET1dOX0lGU1RBVEVfUEFUSD0iL3Zhci9ydW4vaWZzdGF0ZSIKKyMgQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9JUF9CVUlMVElOIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lGQ09ORklHX0JVSUxUSU49eQorQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBWND15CitDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9JUFY2PXkKK0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX01BUFBJTkc9eQorIyBDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9FWFRFUk5BTF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfU1VQUE9SVF9CVUlMVElOX0VDSE8gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9TVVBQT1JUX0JVSUxUSU5fRElTQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1NVUFBPUlRfQlVJTFRJTl9USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfU1VQUE9SVF9CVUlMVElOX0RBWVRJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9TVVBQT1JUX0JVSUxUSU5fQ0hBUkdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1JQQyBpcyBub3Qgc2V0CitDT05GSUdfSVA9eQorQ09ORklHX0ZFQVRVUkVfSVBfQUREUkVTUz15CitDT05GSUdfRkVBVFVSRV9JUF9MSU5LPXkKK0NPTkZJR19GRUFUVVJFX0lQX1JPVVRFPXkKK0NPTkZJR19GRUFUVVJFX0lQX1RVTk5FTD15CisjIENPTkZJR19GRUFUVVJFX0lQX1JVTEUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JUF9TSE9SVF9GT1JNUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lQX1JBUkVfUFJPVE9DT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQUREUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUExJTksgaXMgbm90IHNldAorIyBDT05GSUdfSVBST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFRVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFJVTEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBDQUxDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSVBDQUxDX0ZBTkNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSVBDQUxDX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUU1RBVD15CisjIENPTkZJR19GRUFUVVJFX05FVFNUQVRfV0lERSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX05FVFNUQVRfUFJHIGlzIG5vdCBzZXQKK0NPTkZJR19OU0xPT0tVUD15CisjIENPTkZJR19OVFBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTlRQRF9TRVJWRVIgaXMgbm90IHNldAorIyBDT05GSUdfUFNDQU4gaXMgbm90IHNldAorQ09ORklHX1JPVVRFPXkKKyMgQ09ORklHX1NMQVRUQUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUFNWRCBpcyBub3Qgc2V0CitDT05GSUdfVEVMTkVUPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEVMTkVUX1RUWVBFIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1RFTE5FVF9BVVRPTE9HSU49eQorIyBDT05GSUdfVEVMTkVURCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RFTE5FVERfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RFTE5FVERfSU5FVERfV0FJVCBpcyBub3Qgc2V0CitDT05GSUdfVEZUUD15CisjIENPTkZJR19URlRQRCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIHRmdHAvdGZ0cGQKKyMKK0NPTkZJR19GRUFUVVJFX1RGVFBfR0VUPXkKK0NPTkZJR19GRUFUVVJFX1RGVFBfUFVUPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEZUUF9CTE9DS1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9URlRQX1BST0dSRVNTX0JBUiBpcyBub3Qgc2V0CisjIENPTkZJR19URlRQX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFDRVJPVVRFPXkKKyMgQ09ORklHX1RSQUNFUk9VVEU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVFJBQ0VST1VURV9WRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVFJBQ0VST1VURV9TT1VSQ0VfUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UUkFDRVJPVVRFX1VTRV9JQ01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTkNUTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RVTkNUTF9VRyBpcyBub3Qgc2V0CitDT05GSUdfVURIQ1BEPXkKKyMgQ09ORklHX0RIQ1BSRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfRFVNUExFQVNFUz15CisjIENPTkZJR19GRUFUVVJFX1VESENQRF9XUklURV9MRUFTRVNfRUFSTFkgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9VREhDUERfQkFTRV9JUF9PTl9NQUMgaXMgbm90IHNldAorQ09ORklHX0RIQ1BEX0xFQVNFU19GSUxFPSIvdmFyL2xpYi9taXNjL3VkaGNwZC5sZWFzZXMiCitDT05GSUdfVURIQ1BDPXkKK0NPTkZJR19GRUFUVVJFX1VESENQQ19BUlBJTkc9eQorIyBDT05GSUdfRkVBVFVSRV9VREhDUF9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VREhDUF9ERUJVRz0wCisjIENPTkZJR19GRUFUVVJFX1VESENQX1JGQzMzOTcgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9VREhDUF84MDIxUSBpcyBub3Qgc2V0CitDT05GSUdfVURIQ1BDX0RFRkFVTFRfU0NSSVBUPSIvdXNyL3NoYXJlL3VkaGNwYy9kZWZhdWx0LnNjcmlwdCIKK0NPTkZJR19VREhDUENfU0xBQ0tfRk9SX0JVR0dZX1NFUlZFUlM9ODAKK0NPTkZJR19JRlVQRE9XTl9VREhDUENfQ01EX09QVElPTlM9Ii1SIC1uIgorIyBDT05GSUdfVURQU1ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1dHRVQ9eQorQ09ORklHX0ZFQVRVUkVfV0dFVF9TVEFUVVNCQVI9eQorQ09ORklHX0ZFQVRVUkVfV0dFVF9BVVRIRU5USUNBVElPTj15CitDT05GSUdfRkVBVFVSRV9XR0VUX0xPTkdfT1BUSU9OUz15CitDT05GSUdfRkVBVFVSRV9XR0VUX1RJTUVPVVQ9eQorIyBDT05GSUdfWkNJUCBpcyBub3Qgc2V0CisKKyMKKyMgUHJpbnQgVXRpbGl0aWVzCisjCisjIENPTkZJR19MUEQgaXMgbm90IHNldAorIyBDT05GSUdfTFBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xQUSBpcyBub3Qgc2V0CisKKyMKKyMgTWFpbCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX01BS0VNSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX01JTUVfQ0hBUlNFVD0iIgorIyBDT05GSUdfUE9QTUFJTERJUiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BPUE1BSUxESVJfREVMSVZFUlkgaXMgbm90IHNldAorIyBDT05GSUdfUkVGT1JNSU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUkVGT1JNSU1FX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5ETUFJTCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2VzcyBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0lPU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NUFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfTk1FVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQVAgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUFNUUkVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BXRFggaXMgbm90IHNldAorIyBDT05GSUdfU01FTUNBUCBpcyBub3Qgc2V0CitDT05GSUdfVVBUSU1FPXkKKyMgQ09ORklHX0ZFQVRVUkVfVVBUSU1FX1VUTVBfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRlJFRT15CitDT05GSUdfRlVTRVI9eQorQ09ORklHX0tJTEw9eQorQ09ORklHX0tJTExBTEw9eQorIyBDT05GSUdfS0lMTEFMTDUgaXMgbm90IHNldAorIyBDT05GSUdfUEdSRVAgaXMgbm90IHNldAorQ09ORklHX1BJRE9GPXkKKyMgQ09ORklHX0ZFQVRVUkVfUElET0ZfU0lOR0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUElET0ZfT01JVCBpcyBub3Qgc2V0CisjIENPTkZJR19QS0lMTCBpcyBub3Qgc2V0CitDT05GSUdfUFM9eQorQ09ORklHX0ZFQVRVUkVfUFNfV0lERT15CisjIENPTkZJR19GRUFUVVJFX1BTX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9QU19BRERJVElPTkFMX0NPTFVNTlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9QU19VTlVTVUFMX1NZU1RFTVMgaXMgbm90IHNldAorQ09ORklHX1JFTklDRT15CitDT05GSUdfQkJfU1lTQ1RMPXkKK0NPTkZJR19UT1A9eQorQ09ORklHX0ZFQVRVUkVfVE9QX0NQVV9VU0FHRV9QRVJDRU5UQUdFPXkKK0NPTkZJR19GRUFUVVJFX1RPUF9DUFVfR0xPQkFMX1BFUkNFTlRTPXkKKyMgQ09ORklHX0ZFQVRVUkVfVE9QX1NNUF9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UT1BfREVDSU1BTFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UT1BfU01QX1BST0NFU1MgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UT1BNRU0gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSE9XX1RIUkVBRFMgaXMgbm90IHNldAorQ09ORklHX1dBVENIPXkKKworIworIyBSdW5pdCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX1JVTlNWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlNWRElSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUlVOU1ZESVJfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NWIGlzIG5vdCBzZXQKK0NPTkZJR19TVl9ERUZBVUxUX1NFUlZJQ0VfRElSPSIiCisjIENPTkZJR19TVkxPR0QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hQU1QgaXMgbm90IHNldAorIyBDT05GSUdfU0VUVUlER0lEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOVlVJREdJRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTlZESVIgaXMgbm90IHNldAorIyBDT05GSUdfU09GVExJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hDT05fTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFVEVORk9SQ0UgaXMgbm90IHNldAorIyBDT05GSUdfR0VUU0VCT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQURfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BVENIUEFUSENPTiBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNUT1JFQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTkNPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1JVTkNPTl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VMSU5VWEVOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VURU5GT1JDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRGSUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NFVEZJTEVTX0NIRUNLX09QVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRTRUJPT0wgaXMgbm90IHNldAorIyBDT05GSUdfU0VTVEFUVVMgaXMgbm90IHNldAorCisjCisjIFNoZWxscworIworQ09ORklHX0FTSD15CitDT05GSUdfQVNIX0JBU0hfQ09NUEFUPXkKKyMgQ09ORklHX0FTSF9JRExFX1RJTUVPVVQgaXMgbm90IHNldAorQ09ORklHX0FTSF9KT0JfQ09OVFJPTD15CitDT05GSUdfQVNIX0FMSUFTPXkKK0NPTkZJR19BU0hfR0VUT1BUUz15CitDT05GSUdfQVNIX0JVSUxUSU5fRUNITz15CitDT05GSUdfQVNIX0JVSUxUSU5fUFJJTlRGPXkKK0NPTkZJR19BU0hfQlVJTFRJTl9URVNUPXkKKyMgQ09ORklHX0FTSF9DTURDTUQgaXMgbm90IHNldAorIyBDT05GSUdfQVNIX01BSUwgaXMgbm90IHNldAorQ09ORklHX0FTSF9PUFRJTUlaRV9GT1JfU0laRT15CisjIENPTkZJR19BU0hfUkFORE9NX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0FTSF9FWFBBTkRfUFJNVD15CitDT05GSUdfQ1RUWUhBQ0s9eQorIyBDT05GSUdfSFVTSCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0JBU0hfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfQlJBQ0VfRVhQQU5TSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfSEVMUCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0lOVEVSQUNUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfU0FWRUhJU1RPUlkgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9KT0IgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9USUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfSUYgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9MT09QUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0NBU0UgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9GVU5DVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9MT0NBTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX1JBTkRPTV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfRVhQT1JUX04gaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9NT0RFX1ggaXMgbm90IHNldAorIyBDT05GSUdfTVNIIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1NIX0lTX0FTSD15CisjIENPTkZJR19GRUFUVVJFX1NIX0lTX0hVU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSF9JU19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQkFTSF9JU19BU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CQVNIX0lTX0hVU0ggaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQkFTSF9JU19OT05FPXkKK0NPTkZJR19TSF9NQVRIX1NVUFBPUlQ9eQorIyBDT05GSUdfU0hfTUFUSF9TVVBQT1JUXzY0IGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1NIX0VYVFJBX1FVSUVUPXkKKyMgQ09ORklHX0ZFQVRVUkVfU0hfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NIX05PRk9SSyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9TSF9ISVNURklMRVNJWkU9eQorCisjCisjIFN5c3RlbSBMb2dnaW5nIFV0aWxpdGllcworIworQ09ORklHX1NZU0xPR0Q9eQorQ09ORklHX0ZFQVRVUkVfUk9UQVRFX0xPR0ZJTEU9eQorQ09ORklHX0ZFQVRVUkVfUkVNT1RFX0xPRz15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX0RVUD15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX0NGRz15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX1JFQURfQlVGRkVSX1NJWkU9MjU2CitDT05GSUdfRkVBVFVSRV9JUENfU1lTTE9HPXkKK0NPTkZJR19GRUFUVVJFX0lQQ19TWVNMT0dfQlVGRkVSX1NJWkU9MTYKK0NPTkZJR19MT0dSRUFEPXkKK0NPTkZJR19GRUFUVVJFX0xPR1JFQURfUkVEVUNFRF9MT0NLSU5HPXkKK0NPTkZJR19LTE9HRD15CitDT05GSUdfRkVBVFVSRV9LTE9HRF9LTE9HQ1RMPXkKK0NPTkZJR19MT0dHRVI9eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfJS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94XyUuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwNTc4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94XyUuYmJhcHBlbmQKQEAgLTAsMCArMSwyIEBACitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke0JQTn06IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvcHNwbGFzaC1wb2t5LWltZy5oIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtcG9reS1pbWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODRkYWM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtcG9reS1pbWcuaApAQCAtMCwwICsxLDkxNCBAQAorLyogWW9jdG8gUHJvamVjdCBsb2dvIGZvciBwc3BsYXNoCisgKgorICogQ3JlYXRlZCB1c2luZyBtYWtlLWltYWdlLWhlYWRlci5zaCAoZGlzdHJpYnV0ZWQgd2l0aCBwc3BsYXNoKQorICovCisKKy8qIEdka1BpeGJ1ZiBSR0JBIEMtU291cmNlIGltYWdlIGR1bXAgMS1ieXRlLXJ1bi1sZW5ndGgtZW5jb2RlZCAqLworCisjZGVmaW5lIFBPS1lfSU1HX1JPV1NUUklERSAoMTcwOCkKKyNkZWZpbmUgUE9LWV9JTUdfV0lEVEggKDQyNykKKyNkZWZpbmUgUE9LWV9JTUdfSEVJR0hUICgyMTQpCisjZGVmaW5lIFBPS1lfSU1HX0JZVEVTX1BFUl9QSVhFTCAoNCkgLyogMzpSR0IsIDQ6UkdCQSAqLworI2RlZmluZSBQT0tZX0lNR19STEVfUElYRUxfREFUQSAoKHVpbnQ4KikgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMjM3XDM1MFwzNTRcMzQwXDM3N1wxXDM1MFwzNTRcMzQyXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMlwyNDFcMjQzIiBcCisgICJcMjQ0XDM3NztBQ1wzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDJcMjc1XDI3N1wyNzdcMzc3TFFSXDM3N1wyMDIuNDZcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjUwXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDJcMzIxXDMyMlwzMjNcMzc3XWFjXDM3N1wyMDQuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjQ2XDM1MFwzNTRcMzQwXDM3N1wzXDM0NlwzNDdcMzQ3XDM3NyIgXAorICAid3t8XDM3Ny81N1wzNzdcMjA1LjQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDI0NVwzNTBcMzU0XDM0MFwzNzdcMlwyMjNcMjI2XDIyN1wzNzc1Oz1cMzc3XDIwNy40NiIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDMiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMlwyNTNcMjU1XDI1NlwzNzdCSEpcMzc3XDIxMS40NlwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDFcMzUwXDM1NFwzNDBcMzc3XDJcMzA0IiBcCisgICJcMzA2XDMwNlwzNzdQVVdcMzc3XDIxMy40NlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3XDFcMzA2XDMxMFwzMTFcMzc3XDIxNS40NlwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDBcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI0MFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMjQwXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDMiIFwKKyAgIlwzMDRcMzc3XDIxNS40NlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDI0MFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI0MFwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3NyIgXAorICAiXDIxNS40NlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwyNDBcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwMyIgXAorICAiXDMwNFwzNzdcMjE1LjQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDMwNVwzNTBcMzU0XDM0MFwzNzdcMVwzNDZcMzQ3IiBcCisgICJcMzQ3XDM3N1wyNTZcMzUwXDM1NFwzNDBcMzc3XDFcMzQxXDM0MlwzNDNcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjUyIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMDQiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcM1wyMjBcMjIzXDIyNFwzNzc1Oz1cMzc3XDI0NFwyNDdcMjUwXDM3N1wyNTRcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcNFwzMDJcMzAzXDMwNFwzNzcxNzlcMzc3XDIwNVwyMTBcMjEyXDM3N1wzNTBcMzU0XDM0MlwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzAyXDM1MFwzNTRcMzQwXDM3N1wyXDI1MFwyNTNcMjUzXDM3Nz5ERlwzNzdcMjAyLjQ2IiBcCisgICJcMzc3XDFARkdcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMVleYFwzNzdcMjAyLjQ2XDM3N1wyO0FDXDM3N1wyNDFcMjQzIiBcCisgICJcMjQ0XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI0N1wzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1IiBcCisgICIuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzAwXDM1MFwzNTRcMzQwXDM3N1wyXDMwM1wzMDVcMzA1XDM3N1BVVyIgXAorICAiXDM3N1wyMDUuNDZcMzc3XDFcMjMwXDIzM1wyMzRcMzc3XDI1MlwzNTBcMzU0XDM0MFwzNzdcMVwzMDNcMzA1XDMwNVwzNzciIFwKKyAgIlwyMDUuNDZcMzc3XDJMUVJcMzc3XDI3NVwyNzdcMjc3XDM3N1wyNDRcMzUwXDM1NFwzNDBcMzc3XDE2XDM1MFwzNTJcMzUxIiBcCisgICJcMzc3XDMxM1wzMTRcMzE1XDM3N1wyNTRcMjU3XDI1N1wzNzdcMjI0XDIyN1wyMzBcMzc3XDIxNFwyMjBcMjIxXDM3NyIgXAorICAiXDIwMlwyMDVcMjA2XDM3N3d7fFwzNzd1eXtcMzc3XDIwMlwyMDVcMjA2XDM3N1wyMTNcMjE2XDIxN1wzNzdcMjIzXDIyNiIgXAorICAiXDIyN1wzNzdcMjUzXDI1NVwyNTZcMzc3XDMxMFwzMTJcMzEyXDM3N1wzNDZcMzQ2XDM0N1wzNzdcMzYyXDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjY3XDM1MFwzNTRcMzQwXDM3N1wxNlwzNTJcMzU0IiBcCisgICJcMzQ1XDM3N1wzMTVcMzE2XDMxN1wzNzdcMjU3XDI2MlwyNjNcMzc3XDIyNVwyMzBcMjMxXDM3N1wyMTZcMjIxXDIyMiIgXAorICAiXDM3N1wyMDJcMjA1XDIwNlwzNzd4fH1cMzc3dHh5XDM3N1wyMDJcMjA1XDIwNlwzNzdcMjExXDIxNFwyMTVcMzc3XDIyMSIgXAorICAiXDIyNFwyMjVcMzc3XDI0N1wyNTJcMjUzXDM3N1wzMDVcMzA2XDMwN1wzNzdcMzQyXDM0M1wzNDNcMzc3XDM3MFwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDMyN1wzMzBcMzMwXDM3N2JnaFwzNzdcMjA3LjQ2XDM3N1wxIiI5XDc3QVwzNzdcMjUyXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFdYWNcMzc3XDIwNy40NlwzNzdcMmJnaFwzNzdcMzI3XDMzMFwzMzBcMzc3XDIzNlwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1w0XDMyM1wzMjRcMzI0XDM3N1wyMzdcMjQyXDI0M1wzNzdrb3BcMzc3OT5AXDM3N1wyMTYuNDZcMzc3XDQiIFwKKyAgIjc9XDc3XDM3N2ZqbFwzNzdcMjMyXDIzNVwyMzZcMzc3XDMxNlwzMTdcMzIwXDM3N1wzMDNcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcN1wzNTJcMzU0XDM0NlwzNzdcMzMyXDMzM1wzMzRcMzc3XDMwM1wzMDVcMzA1XDM3N1wyNzFcMjczXDI3NFwzNzdcMjYzIiBcCisgICJcMjY1XDI2NlwzNzdcMjUzXDI1NlwyNTdcMzc3XDI0N1wyNTJcMjUzXDM3N1wyNDRcMjM1XDI0MFwyNDFcMzc3XDF9XDIwMCIgXAorICAiXDIwMlwzNzdcMjE1LjQ2XDM3N1wxXDIyN1wyMzJcMjMzXDM3N1wyMjFcMjM1XDI0MFwyNDFcMzc3XDFcMzM1XDMzNlwzMzYiIFwKKyAgIlwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3N1w0XDMzMFwzMzJcMzMyXDM3N1wyNDRcMjQ3XDI1MFwzNzdwdHVcMzc3PkNFIiBcCisgICJcMzc3XDIxNi40NlwzNzdcNCIiNDo8XDM3N19kZVwzNzdcMjI0XDIzMFwyMzFcMzc3XDMxMVwzMTJcMzEzXDM3N1wzNjIiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcM1wzNTJcMzUzXDM0N1wzNzd+XDIwMlwyMDNcMzc3MDY4XDM3N1wyMTEuNDZcMzc3XDFcMjE2IiBcCisgICJcMjIxXDIyMlwzNzdcMjUwXDM1MFwzNTRcMzQwXDM3N1wxXDMwNlwzMTBcMzExXDM3N1wyMTEuNDZcMzc3XDMiIjA2OCIgXAorICAiXDM3N35cMjAyXDIwM1wzNzdcMzUyXDM1M1wzNDdcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcM1wzMzJcMzMzXDMzNFwzNzciIFwKKyAgIlwyMTRcMjIwXDIyMVwzNzdDSUpcMzc3XDIyNi40NlwzNzdcMz5DRVwzNzdcMjA3XDIxMlwyMTNcMzc3XDMyMVwzMjJcMzIzIiBcCisgICJcMzc3XDI3MlwzNTBcMzU0XDM0MFwzNzdcNlwzMjRcMzI1XDMyNVwzNzdcMjU3XDI2MVwyNjJcMzc3XDIxM1wyMTdcMjIwIiBcCisgICJcMzc3Z2tsXDM3N0ZLTVwzNzcyODpcMzc3XDMxMy40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjM1XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDNcMzQxXDM0MlwzNDJcMzc3XDIyNFwyMzBcMjMxXDM3N0pPUVwzNzdcMjI2LjQ2XDM3N1wzIiI5XDc3QVwzNzciIFwKKyAgIn1cMjAwXDIwMlwzNzdcMzEyXDMxM1wzMTRcMzc3XDM1NlwzNTBcMzU0XDM0MFwzNzdcMlwyMjVcMjMwXDIzMVwzNzc4IiBcCisgICI+XDc3XDM3N1wyMTMuNDZcMzc3XDIiIjU7PVwzNzdcMzUwXDM1MlwzNTFcMzc3XDI0N1wzNTBcMzU0XDM0MFwzNzdcMSIgXAorICAiX2RlXDM3N1wyMTMuNDZcMzc3XDIiIjg+XDc3XDM3N1wyMzJcMjM1XDIzNlwzNzdcMjI2XDM1MFwzNTRcMzQwXDM3N1wyIiBcCisgICJcMjY0XDI2NlwyNjZcMzc3VltdXDM3N1wyMzQuNDZcMzc3XDJQVVZcMzc3XDI1M1wyNTZcMjU3XDM3N1wyNjRcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcNFwzMjJcMzIzXDMyNFwzNzdcMjM1XDIzN1wyNDBcMzc3Z2tsXDM3NzY8PlwzNzdcMzIxLjQ2XDM3N1wxIiBcCisgICJcMjY1XDI2N1wyNzBcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMlwyNzdcMzAxXDMwMlwzNzdgZWZcMzc3XDIzNC40NiIgXAorICAiXDM3N1wyR01OXDM3N1wyNDBcMjQzXDI0NFwzNzdcMzU0XDM1MFwzNTRcMzQwXDM3N1wxQkhKXDM3N1wyMTUuNDZcMzc3IiBcCisgICJcMVwyMDJcMjA1XDIwNlwzNzdcMjQ2XDM1MFwzNTRcMzQwXDM3N1wxXDMxMVwzMTJcMzEzXDM3N1wyMTUuNDZcMzc3XDEiIFwKKyAgIkNJSlwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wyXDI0MVwyNDNcMjQ0XDM3N0ZLTVwzNzdcMjQwLjQ2XDM3N1wyQEZHIiBcCisgICJcMzc3XDIzMVwyMzNcMjM0XDM3N1wyNTdcMzUwXDM1NFwzNDBcMzc3XDNcMzI1XDMyNlwzMjdcMzc3XDIxNFwyMjBcMjIxIiBcCisgICJcMzc3RUpMXDM3N1wzMjUuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMlwyNTVcMjU3IiBcCisgICJcMjYwXDM3N05TVVwzNzdcMjQwLjQ2XDM3N1wzIiI5XDc3QVwzNzdcMjIwXDIyM1wyMjRcMzc3XDM1MFwzNTRcMzQyXDM3NyIgXAorICAiXDM1MVwzNTBcMzU0XDM0MFwzNzdcMVwyNTFcMjUzXDI1NFwzNzdcMjE1LjQ2XDM3N1wyIiIxNzlcMzc3XDM0MVwzNDIiIFwKKyAgIlwzNDNcMzc3XDI0NVwzNTBcMzU0XDM0MFwzNzdcMWJmaFwzNzdcMjE1LjQ2XDM3N1wxXDI0NFwyNDdcMjUwXDM3N1wyMjIiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMlwyNzVcMjc3XDI3N1wzNzdMUVJcMzc3XDI0NC40NlwzNzdcMkJISlwzNzdcMjY0XDI2NyIgXAorICAiXDI2N1wzNzdcMjUzXDM1MFwzNTRcMzQwXDM3N1wyXDI1M1wyNTZcMjU3XDM3N1BVVlwzNzdcMzMwLjQ2XDM3N1wxXDI2NSIgXAorICAiXDI2N1wyNzBcMzc3XDIyN1wzNTBcMzU0XDM0MFwzNzdcMlwzMTNcMzE0XDMxNVwzNzdVWVtcMzc3XDI0NC40NlwzNzciIFwKKyAgIlwyO0FDXDM3N1wyNDdcMjUyXDI1M1wzNzdcMzUxXDM1MFwzNTRcMzQwXDM3N1wxTFFTXDM3N1wyMTUuNDZcMzc3XDF4IiBcCisgICJ8fVwzNzdcMjQ0XDM1MFwzNTRcMzQwXDM3N1wxXDMxNFwzMTZcMzE2XDM3N1wyMTUuNDZcMzc3XDFCR0lcMzc3XDIyMSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyXDM0NlwzNDdcMzQ3XDM3N2htblwzNzdcMjUwLjQ2XDM3N1wyXWFjXDM3N1wzNDBcMzQxIiBcCisgICJcMzQxXDM3N1wyNDdcMzUwXDM1NFwzNDBcMzc3XDJcMjM1XDIzN1wyNDBcMzc3QkdJXDM3N1wzMzIuNDZcMzc3XDFcMjY1IiBcCisgICJcMjY3XDI3MFwzNzdcMjI1XDM1MFwzNTRcMzQwXDM3N1wyXDM1MFwzNTRcMzQyXDM3N3R4elwzNzdcMjUwLjQ2XDM3NyIgXAorICAiXDJQVVdcMzc3XDMyNFwzMjZcMzI2XDM3N1wzNDdcMzUwXDM1NFwzNDBcMzc3XDFcMjcwXDI3MlwyNzJcMzc3XDIxNS4iIFwKKyAgIjQ2XDM3N1wyIiIwNjhcMzc3XDMzMFwzMzJcMzMyXDM3N1wyNDNcMzUwXDM1NFwzNDBcMzc3XDFlaWtcMzc3XDIxNS40IiBcCisgICI2XDM3N1wxXDI0MlwyNDRcMjQ1XDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDJcMjc1XDI3N1wyNzdcMzc3PUJEXDM3NyIgXAorICAiXDI1Mi40NlwzNzdcMiIiOD5cNzdcMzc3XDI2MVwyNjNcMjY0XDM3N1wyNDRcMzUwXDM1NFwzNDBcMzc3XDJcMjY1XDI2NyIgXAorICAiXDI3MFwzNzdCSEpcMzc3XDMzNC40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wyXDMxMyIgXAorICAiXDMxNVwzMTVcMzc3RUpMXDM3N1wyNTIuNDZcMzc3XDIiIjI4OlwzNzdcMjQwXDI0M1wyNDRcMzc3XDM0N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxVltdXDM3N1wyMTUuNDZcMzc3XDFrcHFcMzc3XDI0MlwzNTBcMzU0XDM0MFwzNzdcMVwzMTZcMzE3XDMyMCIgXAorICAiXDM3N1wyMTUuNDZcMzc3XDFARkdcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMVwyMTBcMjE0XDIxNVwzNzdcMjU2LjQiIFwKKyAgIjZcMzc3XDF5fVwxNzdcMzc3XDI0MVwzNTBcMzU0XDM0MFwzNzdcMlwzMzZcMzM3XDMzN1wzNzdhZWdcMzc3XDMzNi40IiBcCisgICI2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDJcMjMxXDIzNFwyMzVcMzc3MDY4XDM3NyIgXAorICAiXDI1NS40NlwzNzdcMWltb1wzNzdcMzQ2XDM1MFwzNTRcMzQwXDM3N1wxXDMwNFwzMDZcMzA2XDM3N1wyMTYuNDZcMzc3IiBcCisgICJcMVwzMTdcMzIxXDMyMVwzNzdcMjQxXDM1MFwzNTRcMzQwXDM3N1wxZ2xtXDM3N1wyMTUuNDZcMzc3XDFcMjM2XDI0MSIgXAorICAiXDI0MlwzNzdcMjE3XDM1MFwzNTRcMzQwXDM3N1wxcHR1XDM3N1wyNjAuNDZcMzc3XDFjaGlcMzc3XDIzN1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wyXDI2NFwyNjdcMjY3XDM3Nzg+XDc3XDM3N1wzMzcuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIyMiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDIwMlwyMDVcMjA2XDM3N1wyNjAuNDZcMzc3XDJUWVpcMzc3XDM1MlwzNTNcMzQ3XDM3NyIgXAorICAiXDM0NVwzNTBcMzU0XDM0MFwzNzdcMWNoaVwzNzdcMjE1LjQ2XDM3N1wxYmZoXDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwzMjFcMzIyXDMyM1wzNzdcMjE1LjQ2XDM3N1wxPkRGXDM3N1wyMTdcMzUwXDM1NFwzNDBcMzc3XDFfZGVcMzc3XDI2MiIgXAorICAiLjQ2XDM3N1wyVFlaXDM3N1wzNTJcMzUzXDM0N1wzNzdcMjM0XDM1MFwzNTRcMzQwXDM3N1wxXDIwMlwyMDVcMjA2XDM3NyIgXAorICAiXDM0MS40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxcHR2XDM3N1wyNjIuNDZcMzc3IiBcCisgICJcMkhNT1wzNzdcMzM3XDM0MFwzNDBcMzc3XDM0NFwzNTBcMzU0XDM0MFwzNzdcMlwzMjJcMzIzXDMyNFwzNzcvNTdcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wxXDMwNFwzMDZcMzA2XDM3N1wyMzdcMzUwXDM1NFwzNDBcMzc3XDFrb3BcMzc3XDIxNS40NlwzNzciIFwKKyAgIlwxXDIzNFwyMzdcMjQwXDM3N1wyMTZcMzUwXDM1NFwzNDBcMzc3XDFhZWdcMzc3XDI2NC40NlwzNzdcMVNYWVwzNzdcMjMzIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFmamxcMzc3XDM0Mi40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjIwXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFwdHVcMzc3XDI2NC40NlwzNzdcMkVKTFwzNzdcMzUwXDM1MVwzNTFcMzc3XDM0NFwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxcHR2XDM3N1wyMTUuNDZcMzc3XDFWW11cMzc3XDIzNlwzNTBcMzU0XDM0MFwzNzdcMVwzMjRcMzI2XDMyNlwzNzdcMjE1IiBcCisgICIuNDZcMzc3XDE9QkRcMzc3XDIxNlwzNTBcMzU0XDM0MFwzNzdcMW5yc1wzNzdcMjI2LjQ2XDM3N1wxMj1CRFwzNzdgZSIgXAorICAiZlwzNzdcMjAwXDIwNFwyMDVcMzc3XDIyMFwyMjNcMjI0XDM3N1wyMzNcMjM2XDIzN1wzNzdcMjM0XDIzN1wyNDBcMzc3IiBcCisgICJcMjIwXDIyM1wyMjRcMzc3XDIwMlwyMDVcMjA2XDM3N2JnaFwzNzc+REZcMzc3XDIyNi40NlwzNzdcMWRpalwzNzdcMjMxIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFfZGVcMzc3XDIzMS40NlwzNzdcMyIiMzk7XDM3N0VKTFwzNzdZXmBcMzc3XDIwMmZqbCIgXAorICAiXDM3N1wxc3d4XDM3N1wyNDR0eHlcMzc3XDFfZGVcMzc3XDIxNS40NlwzNzdcMXB0dVwzNzdcMjIxdHh5XDM3N1wxXDMxNiIgXAorICAiXDMxN1wzMjBcMzc3XDIxN1wzNTBcMzU0XDM0MFwzNzdcMVwyMDRcMjEwXDIxMVwzNzdcMjI2LjQ2XDM3N1wxMiIiOVw3NyIgXAorICAiQVwzNzdbYGFcMzc3fVwyMDBcMjAyXDM3N1wyMjBcMjIzXDIyNFwzNzdcMjMxXDIzNFwyMzVcMzc3XDIzNVwyNDBcMjQxIiBcCisgICJcMzc3XDIyMFwyMjNcMjI0XDM3N1wyMDVcMjEwXDIxMlwzNzdmamxcMzc3QkhKXDM3N1wyMjYuNDZcMzc3XDFTWFlcMzc3IiBcCisgICJcMzQ0XDM1MFwzNTRcMzQwXDM3N1wyXDMzNVwzMzZcMzM2XDM3NzA2OFwzNzdcMjE1LjQ2XDM3N1wxXDI3MVwyNzNcMjc0IiBcCisgICJcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzdcMWxxclwzNzdcMjE1LjQ2XDM3N1wxXDIzMVwyMzNcMjM0XDM3N1wyMTVcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwyMDdcMjEzXDIxNFwzNzdcMjI0LjQ2XDM3N1wzUFVXXDM3N1wyMzRcMjM3XDI0MFwzNzdcMzI3IiBcCisgICJcMzMwXDMzMFwzNzdcMjEyXDM1MFwzNTRcMzQwXDM3N1wzXDMzMlwzMzNcMzM0XDM3N1wyMzZcMjQxXDI0MlwzNzdQVSIgXAorICAiVlwzNzdcMjI0LjQ2XDM3N1wxeHx9XDM3N1wyMjdcMzUwXDM1NFwzNDBcMzc3XDFbYGFcMzc3XDIyNS40NlwzNzdcNUsiIFwKKyAgIlBSXDM3N1wxNzdcMjAzXDIwNFwzNzdcMjQ3XDI1MlwyNTNcMzc3XDMxMVwzMTJcMzEzXDM3N1wzNTJcMzU0XDM0NlwzNzciIFwKKyAgIlwyNTJcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjQxXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMjM3XDI0MlwyNDNcMzc3XDIyNC40NlwzNzdcM0pPUVwzNzdcMjI2XDIzMVwyMzJcMzc3XDMyMFwzMjJcMzIyXDM3NyIgXAorICAiXDIxMlwzNTBcMzU0XDM0MFwzNzdcM1wzMzZcMzM3XDMzN1wzNzdcMjQyXDI0NVwyNDZcMzc3WV1fXDM3N1wyMjQuNDYiIFwKKyAgIlwzNzdcMWVpa1wzNzdcMzQ0XDM1MFwzNTRcMzQwXDM3N1wxflwyMDFcMjAyXDM3N1wyMTUuNDZcMzc3XDFPVFZcMzc3IiBcCisgICJcMjM0XDM1MFwzNTRcMzQwXDM3N1wyXDMyNlwzMjdcMzMwXDM3Ny81N1wzNzdcMjE0LjQ2XDM3N1wxO0FDXDM3N1wyMTUiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyNzFcMjczXDI3NFwzNzdcMjIyLjQ2XDM3N1wzLzU3XDM3N3B0dVwzNzdcMzE0XDMxNiIgXAorICAiXDMxNlwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wyXDMxMlwzMTNcMzE0XDM3N2pucFwzNzdcMjIzLjQ2XDM3N1wxXDI1NCIgXAorICAiXDI1N1wyNTdcMzc3XDIyNVwzNTBcMzU0XDM0MFwzNzdcMXl8flwzNzdcMjIyLjQ2XDM3N1w0LzU3XDM3N11hY1wzNzciIFwKKyAgIlwyNDdcMjUyXDI1M1wzNzdcMzQ2XDM0N1wzNDdcMzc3XDI1N1wzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDI0MFwzNTBcMzU0XDM0MFwzNzdcMlwzMTZcMzE3XDMyMFwzNzcwNjhcMzc3XDIyMi40NlwzNzdcMiIgXAorICAiZmpsXDM3N1wzMDVcMzA2XDMwN1wzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wzXDMyM1wzMjRcMzI0XDM3N3R4eVwzNzciIFwKKyAgIjA2OFwzNzdcMjIyLjQ2XDM3N1wxXDIyNVwyMzBcMjMxXDM3N1wzNDNcMzUwXDM1NFwzNDBcMzc3XDJcMzQ3XDM1MFwzNTAiIFwKKyAgIlwzNzc1OjxcMzc3XDIxNS40NlwzNzdcMVwyNTZcMjYwXDI2MVwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wxcHR1XDM3NyIgXAorICAiXDIxNS40NlwzNzdcMVwyMjZcMjMxXDIzMlwzNzdcMjE0XDM1MFwzNTRcMzQwXDM3N1wyXDM0NFwzNDVcMzQ1XDM3NzoiIFwKKyAgIkBCXDM3N1wyMjEuNDZcMzc3XDJna2xcMzc3XDMzMlwzMzNcMzM0XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDJcMzI0IiBcCisgICJcMzI2XDMyNlwzNzdeY2VcMzc3XDIyMS40NlwzNzdcMiIiNjw+XDM3N1wzMzVcMzM2XDMzN1wzNzdcMjIzXDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMjM1XDI0MFwyNDFcMzc3XDIyMS40NlwzNzdcMyIiMzk7XDM3N1wxNzdcMjAzXDIwNFwzNzdcMzQxIiBcCisgICJcMzQyXDM0MlwzNzdcMjYyXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzN1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDM1MFwzNTRcMzQyXDM3N0ZLTVwzNzdcMjIxLjQ2XDM3N1wyW2BhXDM3N1wzMjFcMzIyXDMyMyIgXAorICAiXDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDJcMzM1XDMzNlwzMzdcMzc3a29wXDM3N1wyMjEuNDZcMzc3XDIiIjA2OFwzNzciIFwKKyAgIlwzMTRcMzE2XDMxNlwzNzdcMzQzXDM1MFwzNTRcMzQwXDM3N1wxXDIxM1wyMTdcMjIwXDM3N1wyMTUuNDZcMzc3XDFGIiBcCisgICJLTVwzNzdcMjMyXDM1MFwzNTRcMzQwXDM3N1wyXDMzMVwzMzJcMzMzXDM3Ny81N1wzNzdcMjE0LjQ2XDM3N1wxOkBCXDM3NyIgXAorICAiXDIxNVwzNTBcMzU0XDM0MFwzNzdcMV5jZVwzNzdcMjIwLjQ2XDM3N1wyO0FDXDM3N1wyNjVcMjY3XDI3MFwzNzdcMjMwIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDJcMjUxXDI1M1wyNTRcMzc3NTs9XDM3N1wyMjAuNDZcMzc3XDFZXV9cMzc3XDIyMlwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDMyNVwzMjZcMzI3XDM3NzA2OFwzNzdcMjIwLjQ2XDM3N1wycHR1XDM3N1wzNDZcMzQ2XDM0NyIgXAorICAiXDM3N1wyNjRcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjM3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDF0eHpcMzc3XDIyMC40NlwzNzdcMiIiNjw+XDM3N1wyNTBcMjUzXDI1M1wzNzdcMjMwXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDJcMjcwXDI3MlwyNzJcMzc3PEJDXDM3N1wyMjAuNDZcMzc3XDFHTU5cMzc3XDM0M1wzNTBcMzU0XDM0MFwzNzdcMlwzNTAiIFwKKyAgIlwzNTRcMzQyXDM3NzlcNzdBXDM3N1wyMTUuNDZcMzc3XDFcMjQ0XDI0N1wyNTBcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxcnZ3XDM3N1wyMTUuNDZcMzc3XDFcMjIzXDIyNlwyMjdcMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzdcMVwyNjFcMjYzIiBcCisgICJcMjY0XDM3N1wyMjAuNDZcMzc3XDJYXV5cMzc3XDM0NFwzNDVcMzQ1XDM3N1wyMzJcMzUwXDM1NFwzNDBcMzc3XDJcMzI3IiBcCisgICJcMzMwXDMzMFwzNzdITU9cMzc3XDIyMC40NlwzNzdcMVwyNTVcMjU3XDI2MFwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFVWVtcMzc3XDIxNy40NlwzNzdcMjxCQ1wzNzdcMjc0XDI3NlwyNzZcMzc3XDI2NlwzNTBcMzU0XDM0MFwzNzdcMVwzMDIiIFwKKyAgIlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzNlwzNTBcMzU0XDM0MFwzNzdcMVwzMTFcMzEyXDMxM1wzNzdcMjIwLjQ2IiBcCisgICJcMzc3XDJMUVNcMzc3XDMzMFwzMzJcMzMyXDM3N1wyMzJcMzUwXDM1NFwzNDBcMzc3XDJcMzQyXDM0M1wzNDNcMzc3UyIgXAorICAiWFlcMzc3XDIyMC40NlwzNzdcMVwyMjRcMjMwXDIzMVwzNzdcMzQzXDM1MFwzNTRcMzQwXDM3N1wxXDIzMFwyMzNcMjM0IiBcCisgICJcMzc3XDIxNS40NlwzNzdcMUBGR1wzNzdcMjMwXDM1MFwzNTRcMzQwXDM3N1wyXDMzMlwzMzNcMzM0XDM3NzA2OFwzNzciIFwKKyAgIlwyMTQuNDZcMzc3XDEiIjk+QFwzNzdcMjE1XDM1MFwzNTRcMzQwXDM3N1wxQUZIXDM3N1wyMTcuNDZcMzc3XDFna2xcMzc3IiBcCisgICJcMjM1XDM1MFwzNTRcMzQwXDM3N1wyXDM1MlwzNTNcMzQ3XDM3N09UVlwzNzdcMjE3LjQ2XDM3N1wxXDc3RUdcMzc3XDIyMCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDIzMlwyMzVcMjM2XDM3N1wyMTcuNDZcMzc3XDJNUlRcMzc3XDM0MFwzNDFcMzQxXDM3NyIgXAorICAiXDI2N1wzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMU9UVlwzNzdcMjE3LjQ2XDM3N1wyV1xcXVwzNzdcMzUwXDM1NFwzNDJcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzdcMSIgXAorICAiXFxhYlwzNzdcMjE3LjQ2XDM3N1wyIiI1OjxcMzc3XDM0NlwzNDZcMzQ3XDM3N1wzNDNcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIkFGSFwzNzdcMjE1LjQ2XDM3N1wxXDIzMFwyMzNcMjM0XDM3N1wyMjdcMzUwXDM1NFwzNDBcMzc3XDF1eXtcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxXDIyMFwyMjRcMjI1XDM3N1wyMTRcMzUwXDM1NFwzNDBcMzc3XDFcMjE3XDIyMlwyMjNcMzc3XDIxNy4iIFwKKyAgIjQ2XDM3N1wxaW1vXDM3N1wyMzdcMzUwXDM1NFwzNDBcMzc3XDJcMzUyXDM1NFwzNDZcMzc3TFFSXDM3N1wyMTcuNDZcMzc3IiBcCisgICJcMVwyMjBcMjI0XDIyNVwzNzdcMjE3XDM1MFwzNTRcMzQwXDM3N1wxIiI5PkBcMzc3XDIxNi40NlwzNzdcMk9UVlwzNzciIFwKKyAgIlwzNTFcMzU0XDM0M1wzNzdcMjcwXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzNSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDI0NlwyNTFcMjUyXDM3N1wyMTcuNDZcMzc3XDFbYGFcMzc3XDI0MFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxW2BhXDM3N1wyMTcuNDZcMzc3XDF7XDE3N1wyMDBcMzc3XDM0M1wzNTBcMzU0XDM0MFwzNzdcMVwyNDZcMjUxIiBcCisgICJcMjUyXDM3N1wyMTUuNDZcMzc3XDIiIjlcNzdBXDM3N1wzNTBcMzU0XDM0MlwzNzdcMjI1XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDJcMzM1XDMzNlwzMzdcMzc3MDY4XDM3N1wyMTQuNDZcMzc3XDIiIjg+XDc3XDM3N1wzNTFcMzU0XDM0M1wzNzdcMjE0IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDEiIjk+QFwzNzdcMjE2LjQ2XDM3N1wxUVZYXDM3N1wyNDFcMzUwXDM1NFwzNDBcMzc3XDIiIFwKKyAgIlwzNDFcMzQyXDM0M1wzNzdcNzdFR1wzNzdcMjE2LjQ2XDM3N1wxO0FDXDM3N1wyMTZcMzUwXDM1NFwzNDBcMzc3XDFcMjI0IiBcCisgICJcMjMwXDIzMVwzNzdcMjE2LjQ2XDM3N1wyR0xOXDM3N1wzNTBcMzUxXDM1MVwzNzdcMjcxXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjM1XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMTYuNDZcMzc3IiBcCisgICJcMkVKTFwzNzdcMzUwXDM1MVwzNTFcMzc3XDI0MFwzNTBcMzU0XDM0MFwzNzdcMlwzNTFcMzU0XDM0M1wzNzdKT1FcMzc3IiBcCisgICJcMjE2LjQ2XDM3N1wyIiIxNzlcMzc3XDM0NlwzNDdcMzQ3XDM3N1wzNDNcMzUwXDM1NFwzNDBcMzc3XDFJTlBcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxXDIxNlwyMjFcMjIyXDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDF4fH1cMzc3XDIxNS40NlwzNzdcMVwyMTYiIFwKKyAgIlwyMjFcMjIyXDM3N1wyMTRcMzUwXDM1NFwzNDBcMzc3XDFcMjMwXDIzM1wyMzRcMzc3XDIxNi40NlwzNzdcMiIiNz1cNzciIFwKKyAgIlwzNzdcMzM3XDM0MFwzNDBcMzc3XDI0MlwzNTBcMzU0XDM0MFwzNzdcMlwzMTJcMzEzXDMxNFwzNzcwNjhcMzc3XDIxNiIgXAorICAiLjQ2XDM3N1wxXDI0MlwyNDRcMjQ1XDM3N1wyMTVcMzUwXDM1NFwzNDBcMzc3XDE7QUNcMzc3XDIxNS40NlwzNzdcMiIiMCIgXAorICAiNjhcMzc3XDMxNlwzMTdcMzIwXDM3N1wyNzJcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzciIFwKKyAgIlwyMzRcMzUwXDM1NFwzNDBcMzc3XDFcMjU3XDI2MVwyNjJcMzc3XDIxNi40NlwzNzdcMiIiMDY4XDM3N1wzMTdcMzIwIiBcCisgICJcMzIwXDM3N1wyNDJcMzUwXDM1NFwzNDBcMzc3XDJcMzMwXDMzMlwzMzJcMzc3NTo8XDM3N1wyMTYuNDZcMzc3XDFcMjEzIiBcCisgICJcMjE2XDIxN1wzNzdcMzQzXDM1MFwzNTRcMzQwXDM3N1wxXDI2NFwyNjZcMjY2XDM3N1wyMTUuNDZcMzc3XDIiIjU7PSIgXAorICAiXDM3N1wzNTBcMzUyXDM1MVwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wyXDMzN1wzNDBcMzQwXDM3NzA2OFwzNzdcMjE0IiBcCisgICIuNDZcMzc3XDIiIjY8PlwzNzdcMzUyXDM1NFwzNDZcMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzdcMT5ERlwzNzdcMjE2LiIgXAorICAiNDZcMzc3XDFcMjQ2XDI1MFwyNTFcMzc3XDI0NFwzNTBcMzU0XDM0MFwzNzdcMVwyMTZcMjIxXDIyMlwzNzdcMjE2LjQiIFwKKyAgIjZcMzc3XDFHTE5cMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzdcMVwyNDZcMjUxXDI1MlwzNzdcMjE2LjQ2XDM3N1wxXDIyMyIgXAorICAiXDIyNlwyMjdcMzc3XDI3M1wzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzRcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMU9UVlwzNzdcMjE2LjQ2XDM3N1wxXDIyMFwyMjNcMjI0XDM3N1wyNDRcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwyNDRcMjQ3XDI1MFwzNzdcMjE2LjQ2XDM3N1wxIiI4Plw3N1wzNzdcMzQ0XDM1MFwzNTRcMzQwXDM3N1wxVVlbXDM3NyIgXAorICAiXDIxNS40NlwzNzdcMVwyMDJcMjA1XDIwNlwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxen5cMTc3XDM3N1wyMTUuNDYiIFwKKyAgIlwzNzdcMVwyMTNcMjE2XDIxN1wzNzdcMjE0XDM1MFwzNTRcMzQwXDM3N1wxXDI3MVwyNzNcMjc0XDM3N1wyMTYuNDZcMzc3IiBcCisgICJcMVpfYVwzNzdcMjQ2XDM1MFwzNTRcMzQwXDM3N1wxSk9RXDM3N1wyMTYuNDZcMzc3XDFcMzEwXDMxMlwzMTJcMzc3XDIxMyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxW2BhXDM3N1wyMTUuNDZcMzc3XDFCSEpcMzc3XDI3NFwzNTBcMzU0XDM0MFwzNzdcMVwzMDIiIFwKKyAgIlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMVwzMjBcMzIyXDMyMlwzNzdcMjE2LjQ2IiBcCisgICJcMzc3XDFITU9cMzc3XDI0NlwzNTBcMzU0XDM0MFwzNzdcMVxcYWJcMzc3XDIxNi40NlwzNzdcMVwyNjBcMjYzXDI2MyIgXAorICAiXDM3N1wzNDNcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMiIiMTc5XDM3N1wzNDEiIFwKKyAgIlwzNDJcMzQyXDM3N1wyMjFcMzUwXDM1NFwzNDBcMzc3XDJcMzQxXDM0MlwzNDNcMzc3MTc5XDM3N1wyMTQuNDZcMzc3IiBcCisgICJcMiIiNTs9XDM3N1wzNTJcMzUzXDM0N1wzNzdcMjE0XDM1MFwzNTRcMzQwXDM3N1wxbnJzXDM3N1wyMTYuNDZcMzc3XDEiIFwKKyAgIlwzMTZcMzE3XDMyMFwzNzdcMjQ2XDM1MFwzNTRcMzQwXDM3N1wxXDI3M1wyNzVcMjc2XDM3N1wyMTYuNDZcMzc3XDF8IiBcCisgICJcMjAwXDIwMVwzNzdcMjEyXDM1MFwzNTRcMzQwXDM3N1wxXDM0MVwzNDJcMzQzXDM3N1wyMTYuNDZcMzc3XDFcMjUzXDI1NSIgXAorICAiXDI1NlwzNzdcMjc0XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzM1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDIwNFwyMTBcMjExXDM3N1wyMTYuNDZcMzc3XDFcMjcwXDI3MlwyNzJcMzc3XDI0NlwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wyXDMyMVwzMjJcMzIzXDM3Ny81N1wzNzdcMjE1LjQ2XDM3N1wxZWlrXDM3N1wzNDRcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMV9kZVwzNzdcMjE1LjQ2XDM3N1wxeHx9XDM3N1wyMjFcMzUwXDM1NFwzNDBcMzc3XDF+XDIwMVwyMDJcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxXDIxMFwyMTRcMjE1XDM3N1wyMTRcMzUwXDM1NFwzNDBcMzc3XDJcMzUwXDM1NFwzNDJcMzc3Mjg6XDM3NyIgXAorICAiXDIxNS40NlwzNzdcMWhtblwzNzdcMjUwXDM1MFwzNTRcMzQwXDM3N1wxWF1eXDM3N1wyMTUuNDZcMzc3XDEiIjk+QFwzNzciIFwKKyAgIlwyMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjMxXDIzNFwyMzVcMzc3XDIxNS40NlwzNzdcMTtBQ1wzNzdcMjc1XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wxPUJEXDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMVBVV1wzNzdcMjUwXDM1MFwzNTRcMzQwXDM3N1wxb3N0XDM3N1wyMTUuNDZcMzc3XDIiIjA2OFwzNzdcMzUxIiBcCisgICJcMzUyXDM1MFwzNzdcMzQzXDM1MFwzNTRcMzQwXDM3N1wxXDMxNlwzMTdcMzIwXDM3N1wyMTUuNDZcMzc3XDIiIjA2OCIgXAorICAiXDM3N1wzMzBcMzMyXDMzMlwzNzdcMjE3XDM1MFwzNTRcMzQwXDM3N1wyXDM0M1wzNDRcMzQ0XDM3NzE3OVwzNzdcMjE0IiBcCisgICIuNDZcMzc3XDIiIjQ6PFwzNzdcMzUwXDM1MlwzNTFcMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzdcMVwyNjVcMjY3XDI3MCIgXAorICAiXDM3N1wyMTYuNDZcMzc3XDFcMzA1XDMwNlwzMDdcMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcMVwyNzFcMjczXDI3M1wzNzciIFwKKyAgIlwyMTYuNDZcMzc3XDFcMzAzXDMwNVwzMDVcMzc3XDIxMVwzNTBcMzU0XDM0MFwzNzdcMWVpa1wzNzdcMjE1LjQ2XDM3NyIgXAorICAiXDFcMjA3XDIxMlwyMTNcMzc3XDI3NVwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzIiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwzMTNcMzE0XDMxNVwzNzdcMjE2LjQ2XDM3N1wxXDI2MFwyNjNcMjYzXDM3N1wyNTBcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwzMTdcMzIwXDMyMFwzNzdcMjE2LjQ2XDM3N1wxXDI1NFwyNTdcMjU3XDM3N1wzNDRcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMW5yc1wzNzdcMjE1LjQ2XDM3N1wxa3BxXDM3N1wyMTdcMzUwXDM1NFwzNDBcMzc3XDFcMjAwXDIwNFwyMDUiIFwKKyAgIlwzNzdcMjE1LjQ2XDM3N1wxXDIwNVwyMTBcMjEyXDM3N1wyMTVcMzUwXDM1NFwzNDBcMzc3XDFcMjAxXDIwNFwyMDZcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wxTVJUXDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFCSEpcMzc3XDIxNS40NlwzNzdcMVwyMTdcMjIyIiBcCisgICJcMjIzXDM3N1wyMTFcMzUwXDM1NFwzNDBcMzc3XDEiIjY8PlwzNzdcMjE1LjQ2XDM3N1wxXDMxMlwzMTNcMzE0XDM3NyIgXAorICAiXDI3NVwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzJcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwyMjZcMjMxXDIzMlwzNzdcMjE1LjQ2XDM3N1wxPUJEXDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFXXFxdXDM3NyIgXAorICAiXDIxNS40NlwzNzdcMXh8fVwzNzdcMzQ0XDM1MFwzNTRcMzQwXDM3N1wyXDMzM1wzMzRcMzM0XDM3NzA2OFwzNzdcMjE1IiBcCisgICIuNDZcMzc3XDFcMzE3XDMyMFwzMjBcMzc3XDIxNVwzNTBcMzU0XDM0MFwzNzdcMlwzNDVcMzQ2XDM0NlwzNzczOTtcMzc3IiBcCisgICJcMjE0LjQ2XDM3N1wyIiIzOTtcMzc3XDM0N1wzNTBcMzUwXDM3N1wyMTVcMzUwXDM1NFwzNDBcMzc3XDFMUVJcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxXDIyNVwyMzBcMjMxXDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFcMjExXDIxNFwyMTVcMzc3XDIxNS4iIFwKKyAgIjQ2XDM3N1wxXFxhYlwzNzdcMjEwXDM1MFwzNTRcMzQwXDM3N1wxXDMyMVwzMjJcMzIzXDM3N1wyMTUuNDZcMzc3XDE6IiBcCisgICJAQlwzNzdcMjc2XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzMlwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxYmdoXDM3N1wyMTUuNDZcMzc3XDFcMTc3XDIwM1wyMDRcMzc3XDI1MlwzNTBcMzU0XDM0MFwzNzdcMVwyMzciIFwKKyAgIlwyNDJcMjQzXDM3N1wyMTUuNDZcMzc3XDFESUtcMzc3XDM0NVwzNTBcMzU0XDM0MFwzNzdcMXp+XDE3N1wzNzdcMjE1IiBcCisgICIuNDZcMzc3XDFiZmhcMzc3XDIxNVwzNTBcMzU0XDM0MFwzNzdcMVwyMDNcMjA3XDIxMFwzNzdcMjE1LjQ2XDM3N1wxXDIwMyIgXAorICAiXDIwN1wyMTBcMzc3XDIxNVwzNTBcMzU0XDM0MFwzNzdcMVwzNTJcMzU0XDM0NlwzNzdcMjE2LjQ2XDM3N1wxXDMzNVwzMzYiIFwKKyAgIlwzMzZcMzc3XDI1MlwzNTBcMzU0XDM0MFwzNzdcMVwzMTZcMzE3XDMyMFwzNzdcMjE1LjQ2XDM3N1wxIiIxNzlcMzc3IiBcCisgICJcMjEwXDM1MFwzNTRcMzQwXDM3N1wxXDI0NlwyNTFcMjUyXDM3N1wyMTUuNDZcMzc3XDFpbW9cMzc3XDI3NlwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzMlwzNTBcMzU0XDM0MFwzNzdcMSIiNTo8XDM3NyIgXAorICAiXDIxNS40NlwzNzdcMVwzMDZcMzEwXDMxMVwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wxXDM0NFwzNDVcMzQ1XDM3N1wyMTYiIFwKKyAgIi40NlwzNzdcMVwzNDRcMzQ1XDM0NVwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1w1XDMwNFwzMzZcMzczXDM3N1wyMzZcMzExIiBcCisgICJcMzcwXDM3N1wyMjBcMzAxXDM2N1wzNzdcMjM0XDMxMFwzNzBcMzc3XDI3M1wzMzFcMzcyXDM3N1wyNjVcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMlwzNDRcMzQ1XDM0NVwzNzczOTtcMzc3XDIxNS40NlwzNzdcMVwzMDRcMzA2XDMwNlwzNzdcMjEzXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDJcMzQ3XDM1MFwzNTBcMzc3Mzk7XDM3N1wyMTQuNDZcMzc3XDIiIjI4OlwzNzdcMzQ1XDM0NlwzNDYiIFwKKyAgIlwzNzdcMjE1XDM1MFwzNTRcMzQwXDM3N1wxXDMxM1wzMTVcMzE1XDM3N1wyMTUuNDZcMzc3XDFARkdcMzc3XDI1NFwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxIiI2PD5cMzc3XDIxNS40NlwzNzdcMVwzMzFcMzMyXDMzM1wzNzdcMjA3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjEyXDIxNVwyMTZcMzc3XDIxNS40NlwzNzdcMVwyMjJcMjI1XDIyNlwzNzdcMjc2XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wxXDM0MVwzNDJcMzQzXDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMSIiMjg6XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFITU9cMzc3XDIxNS40NlwzNzdcMVwzMDJcMzA0IiBcCisgICJcMzA1XDM3N1wyNTBcMzUwXDM1NFwzNDBcMzc3XDJcMjYyXDMyNFwzNzFcMzc3W1wyNDRcMzYzXDM3N1wyMDVPXDIzNSIgXAorICAiXDM2MlwzNzdcMlVcMjQwXDM2MlwzNzdcMjM2XDMxMVwzNzBcMzc3XDI2NFwzNTBcMzU0XDM0MFwzNzdcMVwyMTFcMjE0IiBcCisgICJcMjE1XDM3N1wyMTUuNDZcMzc3XDFWW11cMzc3XDIxM1wzNTBcMzU0XDM0MFwzNzdcMVwyMDVcMjEwXDIxMlwzNzdcMjE1IiBcCisgICIuNDZcMzc3XDFcMjAwXDIwNFwyMDVcMzc3XDIxNlwzNTBcMzU0XDM0MFwzNzdcMVwyNTNcMjU2XDI1N1wzNzdcMjE1LiIgXAorICAiNDZcMzc3XDFxdXdcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMWNoaVwzNzdcMjE1LjQ2XDM3N1wxXDI3NVwyNzdcMjc3IiBcCisgICJcMzc3XDIwN1wzNTBcMzU0XDM0MFwzNzdcMW1xc1wzNzdcMjE1LjQ2XDM3N1wxXDI3MFwyNzJcMjcyXDM3N1wyNzZcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwNCIgXAorICAiXDMwNVwzNzdcMjE1LjQ2XDM3N1wxW2BhXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDF5fVwxNzdcMzc3XDIxNS40NlwzNzciIFwKKyAgIlwxXDI0NlwyNTBcMjUxXDM3N1wyNDdcMzUwXDM1NFwzNDBcMzc3XDFcMjE0XDI3N1wzNjZcMzc3XDIxMU9cMjM1XDM2MiIgXAorICAiXDM3N1wxdVwyNjJcMzY1XDM3N1wyNjNcMzUwXDM1NFwzNDBcMzc3XDJcMzUyXDM1NFwzNDVcMzc3OT5AXDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMVwyNzFcMjczXDI3M1wzNzdcMjExXDM1MFwzNTRcMzQwXDM3N1wyXDM1MFwzNTJcMzUxXDM3NzU6PFwzNzciIFwKKyAgIlwyMTQuNDZcMzc3XDIiIjE3OVwzNzdcMzQzXDM0NFwzNDRcMzc3XDIxNlwzNTBcMzU0XDM0MFwzNzdcMVwyMTdcMjIyIiBcCisgICJcMjIzXDM3N1wyMTUuNDZcMzc3XDFcMjMxXDIzM1wyMzRcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwyMTJcMjE1XDIxNiIgXAorICAiXDM3N1wyMTUuNDZcMzc3XDFcMjM1XDI0MFwyNDFcMzc3XDIwN1wzNTBcMzU0XDM0MFwzNzdcMVFWWFwzNzdcMjE1LjQiIFwKKyAgIjZcMzc3XDFcMzIwXDMyMlwzMjJcMzc3XDI3NlwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2IiBcCisgICJcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMVwyNDZcMjUwXDI1MVwzNzdcMjE1LjQ2XDM3N1wxXDIwMlwyMDVcMjA2XDM3NyIgXAorICAiXDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwyMzdcMjQyXDI0M1wzNzdcMjE1LjQ2XDM3N1wxXDIwN1wyMTJcMjEzXDM3N1wyNDYiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyMzZcMzExXDM3MFwzNzdcMjEzT1wyMzVcMzYyXDM3N1wxXDE3N1wyNzBcMzY2XDM3NyIgXAorICAiXDI2M1wzNTBcMzU0XDM0MFwzNzdcMVwyMjVcMjMwXDIzMVwzNzdcMjE1LjQ2XDM3N1wxT1RWXDM3N1wyMTFcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwyMTBcMjE0XDIxNVwzNzdcMjE1LjQ2XDM3N1wxfVwyMDBcMjAyXDM3N1wyMTdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMXl8flwzNzdcMjE1LjQ2XDM3N1wxXDI2NFwyNjdcMjY3XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMjQ2IiBcCisgICJcMjUxXDI1MlwzNzdcMjE1LjQ2XDM3N1wxXDIwNlwyMTFcMjEyXDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDE7QUNcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wxXDM0N1wzNTBcMzUwXDM3N1wyNzZcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDFcMjE2XDIyMVwyMjJcMzc3XDIxNS40NlwzNzdcMVwyMzVcMjQwXDI0MSIgXAorICAiXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMjc0XDI3NlwyNzZcMzc3XDIxNS40NlwzNzdcMW5yc1wzNzdcMjQ1XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDJcMzQyXDM1N1wzNzVcMzc3UVwyMzZcMzYyXDM3N1wyMTRPXDIzNVwzNjJcMzc3XDFcMzA0XDMzNiIgXAorICAiXDM3M1wzNzdcMjYzXDM1MFwzNTRcMzQwXDM3N1wxPkRGXDM3N1wyMTUuNDZcMzc3XDFcMjU2XDI2MFwyNjFcMzc3XDIwNyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyXDM1MlwzNTNcMzQ3XDM3NzU7PVwzNzdcMjE0LjQ2XDM3N1wyIiIxNzlcMzc3XDM0MVwzNDIiIFwKKyAgIlwzNDJcMzc3XDIxN1wzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjE1LjQ2XDM3N1wxXDMxM1wzMTVcMzE1XDM3N1wyNTQiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyNzZcMzAwXDMwMVwzNzdcMjE1LjQ2XDM3N1wxe1wxNzdcMjAwXDM3N1wyMDdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMSIiMTc5XDM3N1wyMTUuNDZcMzc3XDI3N1wzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNCIgXAorICAiXDM3N1wyMTUuNDZcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMVwyMDRcMjEwXDIxMVwzNzdcMjE1LjQ2XDM3N1wxXDI2NyIgXAorICAiXDI3MVwyNzJcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwzMjZcMzI3XDMzMFwzNzdcMjE1LjQ2XDM3N1wxZWlrXDM3NyIgXAorICAiXDI0NVwzNTBcMzU0XDM0MFwzNzdcMVwyMzJcMzA3XDM3MFwzNzdcMjE1T1wyMzVcMzYyXDM3N1wxelwyNjVcMzY1XDM3NyIgXAorICAiXDI2M1wzNTBcMzU0XDM0MFwzNzdcMVwyNDNcMjQ2XDI0N1wzNzdcMjE1LjQ2XDM3N1wxRktNXDM3N1wyMDdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwyMTNcMjE2XDIxN1wzNzdcMjE1LjQ2XDM3N1wxeX1cMTc3XDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMWJnaFwzNzdcMjE1LjQ2XDM3N1wxXDMzMlwzMzNcMzM0XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMzE0XDMxNiIgXAorICAiXDMxNlwzNzdcMjE1LjQ2XDM3N1wxcXV3XDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDIxNi40NlwzNzdcMjc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wxeXx+XDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxXDM0MVwzNDJcMzQzXDM3N1wyMTUuIiBcCisgICI0NlwzNzdcMVtgYVwzNzdcMjQ1XDM1MFwzNTRcMzQwXDM3N1wxaVwyNTRcMzY0XDM3N1wyMTVPXDIzNVwzNjJcMzc3XDEiIFwKKyAgIlFcMjM2XDM2MlwzNzdcMjY0XDM1MFwzNTRcMzQwXDM3N1wxR01OXDM3N1wyMTUuNDZcMzc3XDFcMjQzXDI0NlwyNDdcMzc3IiBcCisgICJcMjA1XDM1MFwzNTRcMzQwXDM3N1wyXDM1MlwzNTRcMzQ2XDM3NzY8PlwzNzdcMjE0LjQ2XDM3N1wyIiIwNjhcMzc3XDMzNyIgXAorICAiXDM0MFwzNDBcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMVleYFwzNzdcMjE1LjQ2XDM3N1wxXDM0MVwzNDJcMzQzXDM3NyIgXAorICAiXDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwzMjRcMzI2XDMyNlwzNzdcMjE1LjQ2XDM3N1wxaG1uXDM3N1wyMDdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMjE1LjQ2XDM3N1wxIiI4Plw3N1wzNzdcMjc3XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3NyIgXAorICAiXDIxNS40NlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wxcHR1XDM3N1wyMTUuNDZcMzc3XDFcMzE0XDMxNlwzMTZcMzc3IiBcCisgICJcMjU0XDM1MFwzNTRcMzQwXDM3N1wxXDM1MVwzNTJcMzUwXDM3N1wyMTUuNDZcMzc3XDFRVlhcMzc3XDI0NVwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxVVwyNDBcMzYyXDM3N1wyMTZPXDIzNVwzNjJcMzc3XDFcMzQ0XDM2MFwzNzVcMzc3XDI2M1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDI2MFwyNjNcMjYzXDM3N1wyMTUuNDZcMzc3XDFARkdcMzc3XDIwNVwzNTBcMzU0XDM0MFwzNzdcMSIgXAorICAiXDIxNlwyMjFcMjIyXDM3N1wyMTUuNDZcMzc3XDF3e3xcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzdcMVldX1wzNzdcMjE1IiBcCisgICIuNDZcMzc3XDFcMzQyXDM0M1wzNDNcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwzMjVcMzI2XDMyN1wzNzdcMjE1LiIgXAorICAiNDZcMzc3XDFnbG1cMzc3XDIwNlwzNTBcMzU0XDM0MFwzNzdcMVwzNTFcMzUyXDM1MFwzNzdcMjE1LjQ2XDM3N1wxIiI1IiBcCisgICI7PVwzNzdcMjc3XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzMVwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxcHR1XDM3N1wyMTUuNDZcMzc3XDFcMzE1XDMxNlwzMTdcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwzNTIiIFwKKyAgIlwzNTNcMzQ3XDM3N1wyMTUuNDZcMzc3XDFRVlhcMzc3XDI0NVwzNTBcMzU0XDM0MFwzNzdcMVVcMjQwXDM2MlwzNzdcMjE2IiBcCisgICJPXDIzNVwzNjJcMzc3XDFcMzQ1XDM2MVwzNzVcMzc3XDI2NFwzNTBcMzU0XDM0MFwzNzdcMVBVV1wzNzdcMjE1LjQ2XDM3NyIgXAorICAiXDFcMjMwXDIzM1wyMzRcMzc3XDIwM1wzNTBcMzU0XDM0MFwzNzdcMlwzNTFcMzU0XDM0M1wzNzc4Plw3N1wzNzdcMjE0IiBcCisgICIuNDZcMzc3XDIiIjA2OFwzNzdcMzM1XDMzNlwzMzZcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzdcMWJmaFwzNzdcMjE1LiIgXAorICAiNDZcMzc3XDFcMzMyXDMzM1wzMzRcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwzMTRcMzE2XDMxNlwzNzdcMjE1LjQiIFwKKyAgIjZcMzc3XDFxdXdcMzc3XDIwN1wzNTBcMzU0XDM0MFwzNzdcMjE2LjQ2XDM3N1wyNzdcMzUwXDM1NFwzNDBcMzc3XDFcMzAyIiBcCisgICJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDF4fH1cMzc3XDIxNS40NlwzNzdcMVwzMDIiIFwKKyAgIlwzMDNcMzA0XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMzQxXDM0MlwzNDNcMzc3XDIxNS40NlwzNzdcMVpfYVwzNzciIFwKKyAgIlwyNDVcMzUwXDM1NFwzNDBcMzc3XDFsXDI1NVwzNjRcMzc3XDIxNU9cMjM1XDM2MlwzNzdcMVJcMjM3XDM2MlwzNzdcMjY1IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjc1XDI3N1wzMDBcMzc3XDIxNS40NlwzNzdcMiIiOVw3N0FcMzc3XDM1MFwzNTRcMzQyIiBcCisgICJcMzc3XDIwMlwzNTBcMzU0XDM0MFwzNzdcMVwyMjBcMjI0XDIyNVwzNzdcMjE1LjQ2XDM3N1wxdHh6XDM3N1wyMjJcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjE1LjQ2XDM3N1wxXDMxNFwzMTZcMzE2XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwyNzdcMzAxXDMwMlwzNzdcMjE1LjQ2XDM3N1wxen5cMTc3XDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDIxNi40NiIgXAorICAiXDM3N1wxXDM1MlwzNTRcMzQ1XDM3N1wyNzZcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzciIFwKKyAgIlwyMzFcMzUwXDM1NFwzNDBcMzc3XDFcMjA0XDIxMFwyMTFcMzc3XDIxNS40NlwzNzdcMVwyNzFcMjczXDI3M1wzNzdcMjU0IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMzI3XDMzMFwzMzBcMzc3XDIxNS40NlwzNzdcMWRpalwzNzdcMjQ1XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjM2XDMxMVwzNzBcMzc3XDIxNU9cMjM1XDM2MlwzNzdcMVwxNzdcMjcwXDM2NlwzNzdcMjY2XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFdYWNcMzc3XDIxNS40NlwzNzdcNFwyMTVcMjIwXDIyMVwzNzdcMzUwXDM1NFwzNDBcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDJcMzc3OT5AXDM3N1wyMTQuNDZcMzc3XDIvNTdcMzc3XDMzMlwzMzNcMzM0XDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMXd7fFwzNzdcMjE1LjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMjUwXDI1MyIgXAorICAiXDI1M1wzNzdcMjE1LjQ2XDM3N1wxXDIwNVwyMTBcMjEyXDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDEiIjA2OFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDFcMzQxXDM0MlwzNDJcMzc3XDI3NlwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1IiBcCisgICIuNDZcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMVwyMTVcMjIwXDIyMVwzNzdcMjE1LjQ2XDM3N1wxXDIzN1wyNDJcMjQzIiBcCisgICJcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwyNzZcMzAwXDMwMVwzNzdcMjE1LjQ2XDM3N1wxbXFzXDM3N1wyNDVcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMlwzNTBcMzYyXDM3NVwzNzdTXDIzN1wzNjJcMzc3XDIxNE9cMjM1XDM2MlwzNzdcMVwzMTVcMzQzIiBcCisgICJcMzczXDM3N1wyNjZcMzUwXDM1NFwzNDBcMzc3XDFcMzEzXDMxNVwzMTVcMzc3XDIxNS40NlwzNzdcMyIiNTs9XDM3NyIgXAorICAiXDM1MFwzNTJcMzUxXDM3N1wyMjNcMjI2XDIyN1wzNzdcMjE1LjQ2XDM3N1wxcXV3XDM3N1wyMjNcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVwyMTZcMjIxXDIyMlwzNzdcMjE1LjQ2XDM3N1wxXDIzMVwyMzRcMjM1XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwyMTRcMjIwXDIyMVwzNzdcMjE1LjQ2XDM3N1wxXDIzNFwyMzdcMjQwXDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIkFGSFwzNzdcMjE1LjQ2XDM3N1wxXDMyMVwzMjJcMzIzXDM3N1wyNzZcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDQiIFwKKyAgIlwzNzdcMjE1LjQ2XDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDFcMjQ0XDI0N1wyNTBcMzc3XDIxNS40NlwzNzdcMVwyMDMiIFwKKyAgIlwyMDdcMjEwXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMjQxXDI0M1wyNDRcMzc3XDIxNS40NlwzNzdcMVwyMDVcMjEwIiBcCisgICJcMjEyXDM3N1wyNDZcMzUwXDM1NFwzNDBcMzc3XDFcMjUzXDMyMFwzNzFcMzc3XDIxM09cMjM1XDM2MlwzNzdcMVwyMTQiIFwKKyAgIlwyNzdcMzY2XDM3N1wyNzBcMzUwXDM1NFwzNDBcMzc3XDFpbW9cMzc3XDIxNS40NlwzNzdcMnV5e1wzNzc6QEJcMzc3IiBcCisgICJcMjE0LjQ2XDM3N1wyLzU3XDM3N1wzMzBcMzMyXDMzMlwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxXDI1MlwyNTRcMjU1IiBcCisgICJcMzc3XDIxNS40NlwzNzdcMXR4eVwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxZ2tsXDM3N1wyMTUuNDZcMzc3XDFcMjcyIiBcCisgICJcMjc0XDI3NVwzNzdcMjA3XDM1MFwzNTRcMzQwXDM3N1wxV1xcXVwzNzdcMjE1LjQ2XDM3N1wxXDI1MVwyNTNcMjU0XDM3NyIgXAorICAiXDI3NlwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwzMDFcMzAyXDMwM1wzNzdcMjE1LjQ2XDM3N1wxXmNlXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDF9XDIwMFwyMDIiIFwKKyAgIlwzNzdcMjE1LjQ2XDM3N1wxXDI0M1wyNDZcMjQ3XDM3N1wyNDdcMzUwXDM1NFwzNDBcMzc3XDFcMjMxXDMwNlwzNjdcMzc3IiBcCisgICJcMjExT1wyMzVcMzYyXDM3N1wxXDIwMFwyNzBcMzY2XDM3N1wyNzFcMzUwXDM1NFwzNDBcMzc3XDJcMzI3XDMzMFwzMzAiIFwKKyAgIlwzNzcwNjhcMzc3XDIzMi40NlwzNzdcMW5yc1wzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxXDMxMVwzMTJcMzEzXDM3NyIgXAorICAiXDIxNS40NlwzNzdcMUNJSlwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxIiI4Plw3N1wzNzdcMjE1LjQ2XDM3N1wxXDMzMCIgXAorICAiXDMzMVwzMzFcMzc3XDIwN1wzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjE1LjQ2XDM3N1wxXDE3N1wyMDNcMjA0XDM3NyIgXAorICAiXDI3NlwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwzMzdcMzQwXDM0MFwzNzdcMjE1LjQ2XDM3N1wxIiI0OjxcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMUxRUlwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDFcMzAxXDMwMlwzMDNcMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcMlwzMDNcMzM2XDM3M1wzNzdkIiBcCisgICJcMjUxXDM2NFwzNzdcMjA1T1wyMzVcMzYyXDM3N1wyWlwyNDNcMzYzXDM3N1wyNjBcMzIzXDM3MVwzNzdcMjczXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDF4fH1cMzc3XDIzMS40NlwzNzdcMi81N1wzNzdcMzI1XDMyNlwzMjdcMzc3XDIyNFwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDM1MVwzNTJcMzUwXDM3N1wyMTYuNDZcMzc3XDFcMzQwXDM0MVwzNDFcMzc3XDI1MlwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXDMyMVwzMjJcMzIzXDM3N1wyMTUuNDZcMzc3XDEiIjA2OFwzNzdcMjEwXDM1MFwzNTRcMzQwXDM3N1wxXDIxMyIgXAorICAiXDIxN1wyMjBcMzc3XDIxNS40NlwzNzdcMVZbXVwzNzdcMjc2XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3NyIgXAorICAiXDIxNS40NlwzNzdcMjMyXDM1MFwzNTRcMzQwXDM3N1wxIiIzOTtcMzc3XDIxNS40NlwzNzdcMVwzMTJcMzEzXDMxNFwzNzciIFwKKyAgIlwyNTJcMzUwXDM1NFwzNDBcMzc3XDFcMzUwXDM1MVwzNTFcMzc3XDIxNi40NlwzNzdcMVwzNDFcMzQyXDM0MlwzNzdcMjUyIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDVcMzIzXDM0NlwzNzRcMzc3XDI1NVwzMjFcMzcxXDM3N1wyMzZcMzExXDM3MFwzNzdcMjUxIiBcCisgICJcMzE3XDM3MVwzNzdcMzEzXDM0MlwzNzNcMzc3XDI3NVwzNTBcMzU0XDM0MFwzNzdcMlwzNDJcMzQzXDM0M1wzNzcyOCIgXAorICAiOlwzNzdcMjMwLjQ2XDM3N1wxa3BxXDM3N1wyMjZcMzUwXDM1NFwzNDBcMzc3XDFJTlBcMzc3XDIxNS40NlwzNzdcMVwyMzIiIFwKKyAgIlwyMzVcMjM2XDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFcMjE0XDIyMFwyMjFcMzc3XDIxNS40NlwzNzdcMVhdXlwzNzciIFwKKyAgIlwyMTBcMzUwXDM1NFwzNDBcMzc3XDFcMjYxXDI2M1wyNjRcMzc3XDIxNS40NlwzNzdcMSIiMTc5XDM3N1wyNzZcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzJcMzUwXDM1NFwzNDBcMzc3XDFfZGVcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wxXDIwNFwyMTBcMjExXDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFcMjQzXDI0NlwyNDdcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxQkdJXDM3N1wzNTZcMzUwXDM1NFwzNDBcMzc3XDFcMjA0XDIxMFwyMTFcMzc3XDIzMC40NlwzNzdcMVwzMjMiIFwKKyAgIlwzMjRcMzI0XDM3N1wyMjZcMzUwXDM1NFwzNDBcMzc3XDF9XDIwMFwyMDJcMzc3XDIxNS40NlwzNzdcMVFWWFwzNzdcMjUyIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIxNS40NlwzNzdcMVwyMTRcMjIwXDIyMVwzNzdcMjEwXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMzMwXDMzMVwzMzFcMzc3XDIxNi40NlwzNzdcMVwyNTNcMjU2XDI1N1wzNzdcMjc1XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMyXDM1MFwzNTRcMzQwXDM3N1wxXDIyNFwyMjdcMjMwXDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMVw3N0VHXDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFbYGFcMzc3XDIxNS40NlwzNzdcMXR4elwzNzdcMzU2IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDJcMzUyXDM1M1wzNDdcMzc3Njw+XDM3N1wyMjYuNDZcMzc3XDFpbW9cMzc3XDIyN1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxXDI2MlwyNjRcMjY1XDM3N1wyMTYuNDZcMzc3XDFcMzEzXDMxNFwzMTVcMzc3XDI1MFwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDI3NlwzMDBcMzAxXDM3N1wyMTYuNDZcMzc3XDFcMzAwXDMwMlwzMDJcMzc3XDIxMVwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxO0FDXDM3N1wyMTUuNDZcMzc3XDFfZGVcMzc3XDI3NVwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDIzMlwzNTBcMzU0XDM0MFwzNzdcMVwzMDZcMzEwXDMxMVwzNzdcMjE2LjQ2XDM3N1wxXDI2NVwyNjciIFwKKyAgIlwyNzBcMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcMVwzMjRcMzI1XDMyNVwzNzdcMjE2LjQ2XDM3N1wxXDI1MVwyNTNcMjU0IiBcCisgICJcMzc3XDM1N1wzNTBcMzU0XDM0MFwzNzdcMVwyMjNcMjI2XDIyN1wzNzdcMjI2LjQ2XDM3N1wxXDMyMFwzMjJcMzIyXDM3NyIgXAorICAiXDIyN1wzNTBcMzU0XDM0MFwzNzdcMlwzNTJcMzU0XDM1MFwzNzcxNzlcMzc3XDIxNS40NlwzNzdcMW9zdFwzNzdcMjUwIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFdYWNcMzc3XDIxNS40NlwzNzdcMSIiNjw+XDM3N1wyMTJcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIm1xc1wzNzdcMjE1LjQ2XDM3N1wyLzU3XDM3N1wzNDFcMzQyXDM0M1wzNzdcMjc0XDM1MFwzNTRcMzQwXDM3N1wxXDMwMiIgXAorICAiXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wxIiI5XDc3QVwzNzdcMjE1LjQ2XDM3N1wxIiBcCisgICJWW11cMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcMXR4elwzNzdcMjE1LjQ2XDM3N1wyLzU3XDM3N1wzNDZcMzQ2XDM0NyIgXAorICAiXDM3N1wzNjBcMzUwXDM1NFwzNDBcMzc3XDE9QkRcMzc3XDIyNC40NlwzNzdcMWZqbFwzNzdcMjMxXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFpbW9cMzc3XDIxNS40NlwzNzdcMi81N1wzNzdcMzI0XDMyNVwzMjVcMzc3XDI0NlwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxXDMwM1wzMDVcMzA1XDM3N1wyMTYuNDZcMzc3XDF4fH1cMzc3XDIxMlwzNTBcMzU0XDM0MFwzNzdcMVwyNDZcMjUxIiBcCisgICJcMjUyXDM3N1wyMTYuNDZcMzc3XDF5fVwxNzdcMzc3XDI3NFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMVwyMDBcMjA0XDIwNVwzNzdcMjE2LjQ2XDM3N1wxXDI3NlwzMDAiIFwKKyAgIlwzMDFcMzc3XDI0NlwzNTBcMzU0XDM0MFwzNzdcMlwzMzBcMzMxXDMzMVwzNzcwNjhcMzc3XDIxNS40NlwzNzdcMWBlIiBcCisgICJmXDM3N1wzNjFcMzUwXDM1NFwzNDBcMzc3XDFcMjM3XDI0MlwyNDNcMzc3XDIyNC40NlwzNzdcMVwzMTZcMzE3XDMyMCIgXAorICAiXDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDFcMjY0XDI2N1wyNjdcMzc3XDIxNi40NlwzNzdcMWFlZ1wzNzdcMjQ2XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFPVFZcMzc3XDIxNi40NlwzNzdcMVwzMDNcMzA1XDMwNVwzNzdcMjEyXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDJcMzUxXDM1MlwzNTBcMzc3MDY4XDM3N1wyMTUuNDZcMzc3XDIvNTdcMzc3XDMyM1wzMjRcMzI0XDM3N1wyNzNcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzNcMzUwXDM1NFwzNDBcMzc3XDFcMzEzXDMxNSIgXAorICAiXDMxNVwzNzdcMjE2LjQ2XDM3N1wxTlNVXDM3N1wyNDZcMzUwXDM1NFwzNDBcMzc3XDFjaGlcMzc3XDIxNi40NlwzNzciIFwKKyAgIlwxXDI1M1wyNTZcMjU3XDM3N1wzNjJcMzUwXDM1NFwzNDBcMzc3XDFESUtcMzc3XDIyMi40NlwzNzdcMWNoaVwzNzdcMjMzIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDE7QUNcMzc3XDIxNi40NlwzNzdcMVwyNTdcMjYyXDI2M1wzNzdcMjQ0XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjMwXDIzM1wyMzRcMzc3XDIxNi40NlwzNzdcMUJISlwzNzdcMjE0XDM1MFwzNTRcMzQwXDM3N1wxYWVnXDM3NyIgXAorICAiXDIxNi40NlwzNzdcMV1hY1wzNzdcMjczXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3IiBcCisgICJcMjM0XDM1MFwzNTRcMzQwXDM3N1wxSk9RXDM3N1wyMTYuNDZcMzc3XDFcMjMxXDIzM1wyMzRcMzc3XDI0NFwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDI1NlwyNjBcMjYxXDM3N1wyMTYuNDZcMzc3XDEiIjU7PVwzNzdcMzYzXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMjU2XDI2MFwyNjFcMzc3XDIyMi40NlwzNzdcMVwzMTNcMzE0XDMxNVwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJcMjI0XDIyN1wyMzBcMzc3XDIxNi40NlwzNzdcMjpAQlwzNzdcMzQ2XDM0NlwzNDdcMzc3XDI0MlwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wyXDMyMlwzMjNcMzI0XDM3NzE3OVwzNzdcMjE2LjQ2XDM3N1wxXDIzNVwyNDBcMjQxXDM3N1wyMTRcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwyNjJcMjY0XDI2NVwzNzdcMjE3LjQ2XDM3N1wxXDIyMFwyMjNcMjI0XDM3N1wyNzJcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzRcMzUwXDM1NFwzNDBcMzc3XDFcMjUyXDI1NFwyNTVcMzc3IiBcCisgICJcMjE2LjQ2XDM3N1wyIiIzOTtcMzc3XDMyNlwzMjdcMzMwXDM3N1wyNDJcMzUwXDM1NFwzNDBcMzc3XDJcMzQwXDM0MSIgXAorICAiXDM0MVwzNzc4Plw3N1wzNzdcMjE2LjQ2XDM3N1wxXDIwN1wyMTJcMjEzXDM3N1wzNjRcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIk9UVlwzNzdcMjIwLjQ2XDM3N1wxYGVmXDM3N1wyMzRcMzUwXDM1NFwzNDBcMzc3XDJcMzUwXDM1NFwzNDJcMzc3OD5cNzciIFwKKyAgIlwzNzdcMjE2LjQ2XDM3N1wxWV1fXDM3N1wyNDFcMzUwXDM1NFwzNDBcMzc3XDJcMzUwXDM1MVwzNTFcMzc3RUpMXDM3NyIgXAorICAiXDIxNi40NlwzNzdcMTtBQ1wzNzdcMjE2XDM1MFwzNTRcMzQwXDM3N1wxQkhKXDM3N1wyMTYuNDZcMzc3XDIvNTdcMzc3IiBcCisgICJcMjY0XDI2N1wyNjdcMzc3XDI3MVwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzUiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMUVKTFwzNzdcMjE2LjQ2XDM3N1wyS1BSXDM3N1wzNTFcMzU0XDM0M1wzNzdcMjQxXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFOU1VcMzc3XDIxNi40NlwzNzdcMiIiMTc5XDM3N1wzNDZcMzQ2XDM0N1wzNzdcMzY0XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMjcyXDI3NFwyNzVcMzc3XDIyMC40NlwzNzdcMVwzMDdcMzExXDMxMVwzNzdcMjM1XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjIwXDIyM1wyMjRcMzc3XDIxNy40NlwzNzdcMXN3eFwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3NyIgXAorICAiXDIxNy40NlwzNzdcMVwyMjBcMjI0XDIyNVwzNzdcMjE2XDM1MFwzNTRcMzQwXDM3N1wxXDIzM1wyMzZcMjM3XDM3N1wyMTciIFwKKyAgIi40NlwzNzdcMiIiNjw+XDM3N1wzMDFcMzAyXDMwM1wzNzdcMjcwXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0IiBcCisgICJcMzc3XDIxNS40NlwzNzdcMVwzNTJcMzU0XDM1MFwzNzdcMjM0XDM1MFwzNTRcMzQwXDM3N1wxXDI0NlwyNTFcMjUyXDM3NyIgXAorICAiXDIxNy40NlwzNzdcMWJmaFwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3N1wxY2hpXDM3N1wyMTcuNDZcMzc3XDF6flwxNzciIFwKKyAgIlwzNzdcMzY2XDM1MFwzNTRcMzQwXDM3N1wxWV1fXDM3N1wyMTYuNDZcMzc3XDFeY2VcMzc3XDIzN1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxQkdJXDM3N1wyMTcuNDZcMzc3XDFscXJcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzdcMlwzNTJcMzU0XDM1MFwzNzciIFwKKyAgIlNYWVwzNzdcMjE3LjQ2XDM3N1wxQkdJXDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDFARkdcMzc3XDIxNy40NlwzNzdcMiIgXAorICAiMDY4XDM3N1wyNDZcMjUxXDI1MlwzNzdcMjY3XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDYiIFwKKyAgIlwzNzdcMVwzMzVcMzM2XDMzN1wzNzdcMjM1XDM1MFwzNTRcMzQwXDM3N1wxUVZYXDM3N1wyMTcuNDZcMzc3XDFcXGFiIiBcCisgICJcMzc3XDIzNlwzNTBcMzU0XDM0MFwzNzdcMV9kZVwzNzdcMjE3LjQ2XDM3N1wyIiI2PD5cMzc3XDM0NlwzNDdcMzQ3XDM3NyIgXAorICAiXDM2NlwzNTBcMzU0XDM0MFwzNzdcMVwzMTFcMzEyXDMxM1wzNzdcMjE2LjQ2XDM3N1wxXDMwNFwzMDZcMzA2XDM3N1wyMzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjIwLjQ2XDM3N1wyV1xcXVwzNzdcMzQ0XDM0NVwzNDVcMzc3IiBcCisgICJcMjMyXDM1MFwzNTRcMzQwXDM3N1wyXDMyNlwzMjdcMzMwXDM3N0hNT1wzNzdcMjIwLjQ2XDM3N1wxXDI2MVwyNjNcMjY0IiBcCisgICJcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMVwyNDdcMjUyXDI1M1wzNzdcMjIxLjQ2XDM3N1wxXDIwMlwyMDZcMjA3XDM3NyIgXAorICAiXDI0MlwzNTBcMzU0XDM0MFwzNzdcMlwyNjRcMjY3XDI2N1wzNzdcMjc2XDMwMFwzMDFcMzc3XDIyMlwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXDMxMFwzMTJcMzEyXDM3N1wyMTUuNDZcMzc3XDFcMjY3XDI3MVwyNzJcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwyXDMxNFwzMTZcMzE2XDM3Ny81N1wzNzdcMjE3LjQ2XDM3N1wyTFFTXDM3N1wzMzBcMzMxXDMzMVwzNzdcMjMyXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDJcMzQxXDM0MlwzNDJcMzc3U1hZXDM3N1wyMjAuNDZcMzc3XDFcMjMxXDIzM1wyMzRcMzc3XDM2NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyXDM0MVwzNDJcMzQzXDM3NzA2OFwzNzdcMjE0LjQ2XDM3N1wxW2BhXDM3N1wyNDFcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMWVpa1wzNzdcMjIwLjQ2XDM3N1wyO0FDXDM3N1wyNjNcMjY1XDI2NlwzNzdcMjMwXDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDJcMjQ2XDI1MVwyNTJcMzc3NTo8XDM3N1wyMjAuNDZcMzc3XDFdYWNcMzc3XDIyMlwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxWV1fXDM3N1wyMjEuNDZcMzc3XDJCSEpcMzc3XDI2NFwyNjdcMjY3XDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcNVwzMzFcMzMyXDMzM1wzNzdcMjA3XDIxM1wyMTRcMzc3PUJEXDM3Ny40NlwzNzdGS01cMzc3XDIyMlwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXDMyN1wzMzBcMzMwXDM3N1wyMTUuNDZcMzc3XDF1eXtcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMVwzNTAiIFwKKyAgIlwzNTRcMzQyXDM3N1wyMTVcMzUwXDM1NFwzNDBcMzc3XDF8XDIwMFwyMDFcMzc3XDIyMC40NlwzNzdcMiIiNTo8XDM3NyIgXAorICAiXDI0NVwyNDdcMjUwXDM3N1wyMzBcMzUwXDM1NFwzNDBcMzc3XDJcMjY1XDI2N1wyNzBcMzc3O0FDXDM3N1wyMjAuNDYiIFwKKyAgIlwzNzdcMUtQUlwzNzdcMzcwXDM1MFwzNTRcMzQwXDM3N1wxXDIwNVwyMTBcMjEyXDM3N1wyMTUuNDZcMzc3XDFcMzAyIiBcCisgICJcMzAzXDMwNFwzNzdcMjQxXDM1MFwzNTRcMzQwXDM3N1wyXDM1MFwzNTFcMzUxXDM3Nz5ERlwzNzdcMjIxLjQ2XDM3NyIgXAorICAiXDJmamxcMzc3XDMzNVwzMzZcMzM2XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDJcMzI3XDMzMFwzMzBcMzc3XmJkXDM3NyIgXAorICAiXDIyMS40NlwzNzdcMiIiOVw3N0FcMzc3XDM0MlwzNDNcMzQzXDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3XDJcMzMyXDMzMyIgXAorICAiXDMzNFwzNzczOTtcMzc3XDIyMi40NlwzNzdcMldcXF1cMzc3XDI1N1wyNjJcMjYzXDM3N1wyMzBcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcM1wzMjBcMzIyXDMyMlwzNzdcMjE3XDIyMlwyMjNcMzc3TVJUXDM3N1wyMDUuNDZcMzc3XDFcMjQ2XDI1MFwyNTEiIFwKKyAgIlwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxXDM0N1wzNTBcMzUwXDM3N1wyMTUuNDZcMzc3XDIiIjE3OVwzNzdcMzI0IiBcCisgICJcMzI2XDMyNlwzNzdcMjE1XDM1MFwzNTRcMzQwXDM3N1wzXDIzNVwyNDBcMjQxXDM3N0NJSlwzNzd0eHpcMzc3XDIxNiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxS1BSXDM3N1wyMjEuNDZcMzc3XDJbYGFcMzc3XDMyNFwzMjVcMzI1XDM3N1wyMjRcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMlwzNDFcMzQyXDM0MlwzNzdrb3BcMzc3XDIyMS40NlwzNzdcMiIiMzk7XDM3N1wzMjNcMzI0XDMyNCIgXAorICAiXDM3N1wzNjdcMzUwXDM1NFwzNDBcMzc3XDJcMzUwXDM1NFwzNDJcMzc3NTs9XDM3N1wyMTQuNDZcMzc3XDFZXV9cMzc3IiBcCisgICJcMjQzXDM1MFwzNTRcMzQwXDM3N1wyXDMwM1wzMDVcMzA1XDM3Ny81N1wzNzdcMjIxLjQ2XDM3N1wzIiIwNjhcMzc3eyIgXAorICAiXDE3N1wyMDBcMzc3XDMzMlwzMzNcMzM0XDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDNcMzI1XDMyNlwzMjdcMzc3dHgiIFwKKyAgInpcMzc3LzU3XDM3N1wyMjIuNDZcMzc3XDFcMjcwXDI3MlwyNzJcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMVwyNDRcMjQ3IiBcCisgICJcMjUwXDM3N1wyMjQuNDZcMzc3XDM+REZcMzc3XDIwNlwyMTFcMjEyXDM3N1wyNzdcMzAxXDMwMlwzNzdcMjIxXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDRcMzI1XDMyNlwzMjdcMzc3XDI0NVwyNDdcMjUwXDM3N3R4eVwzNzdCR0lcMzc3XDIxMC40NlwzNzciIFwKKyAgIlwxQkdJXDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3XDEvNTdcMzc3XDIxNS40NlwzNzdcMkNJSlwzNzdcMzMwXDMzMlwzMzIiIFwKKyAgIlwzNzdcMjExXDM1MFwzNTRcMzQwXDM3N1wzXDMwMlwzMDRcMzA1XDM3N3xcMjAwXDIwMVwzNzc3PVw3N1wzNzdcMjAyIiBcCisgICIuNDZcMzc3XDIiIjA2OFwzNzdcMzMyXDMzM1wzMzRcMzc3XDIxNVwzNTBcMzU0XDM0MFwzNzdcMlwzMjZcMzI3XDMzMCIgXAorICAiXDM3NzQ6PFwzNzdcMjIxLjQ2XDM3N1wzLzU3XDM3N3B0dlwzNzdcMzIwXDMyMlwzMjJcMzc3XDIyMFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzXDMzNlwzMzdcMzM3XDM3N1wyMDFcMjA0XDIwNlwzNzcxNzlcMzc3XDIyMi40NlwzNzdcMVwyMzdcMjQyXDI0MyIgXAorICAiXDM3N1wzNzBcMzUwXDM1NFwzNDBcMzc3XDFcMjI0XDIyN1wyMzBcMzc3XDIxNS40NlwzNzdcMVwyNzdcMzAxXDMwMlwzNzciIFwKKyAgIlwyNDRcMzUwXDM1NFwzNDBcMzc3XDFcMjI0XDIyN1wyMzBcMzc3XDIyNC40NlwzNzdcM1RZWlwzNzdcMjMyXDIzNVwyMzYiIFwKKyAgIlwzNzdcMzE3XDMyMFwzMjBcMzc3XDIxMlwzNTBcMzU0XDM0MFwzNzdcM1wzMjFcMzIyXDMyM1wzNzdcMjMyXDIzNVwyMzYiIFwKKyAgIlwzNzdTWFlcMzc3XDIyNC40NlwzNzdcMVwyMDdcMjEyXDIxM1wzNzdcMjI2XDM1MFwzNTRcMzQwXDM3N1wxdnp7XDM3NyIgXAorICAiXDIyNi40NlwzNzdcMjEiIjE3OVwzNzdcXGFiXDM3N35cMjAxXDIwMlwzNzdcMjMzXDIzNlwyMzdcMzc3XDI3MlwyNzQiIFwKKyAgIlwyNzVcMzc3XDMxM1wzMTVcMzE1XDM3N1wzMjVcMzI2XDMyN1wzNzdcMzMzXDMzNFwzMzRcMzc3XDM0M1wzNDRcMzQ0IiBcCisgICJcMzc3XDMzMVwzMzJcMzMzXDM3N1wzMTVcMzE2XDMxN1wzNzdcMzAxXDMwMlwzMDNcMzc3XDI2NFwyNjZcMjY2XDM3NyIgXAorICAiXDIyNFwyMzBcMjMxXDM3N3V5e1wzNzdWW11cMzc3Njw+XDM3N1wyMTUuNDZcMzc3XDFcMjM2XDI0MVwyNDJcMzc3XDIyMSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxUFVXXDM3N1wyMTYuNDZcMzc3XDEyIiIxNzlcMzc3eX1cMTc3XDM3N1wyNzRcMjc2XDI3NiIgXAorICAiXDM3N1wzMzdcMzQwXDM0MFwzNzdcMzQzXDM0NFwzNDRcMzc3XDMzMlwzMzNcMzM0XDM3N1wzMDVcMzA2XDMwN1wzNzciIFwKKyAgIlwyMzVcMjM3XDI0MFwzNzdydndcMzc3PEJDXDM3N1wyMDYuNDZcMzc3XDFxdXdcMzc3XDIxNlwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxXDI1M1wyNTZcMjU3XDM3N1wyMjQuNDZcMzc3XDNOU1VcMzc3XDIyM1wyMjZcMjI3XDM3N1wzMTJcMzEzXDMxNFwzNzciIFwKKyAgIlwyMTJcMzUwXDM1NFwzNDBcMzc3XDNcMzI3XDMzMFwzMzBcMzc3XDI0MVwyNDNcMjQ0XDM3N11hY1wzNzdcMjI0LjQ2IiBcCisgICJcMzc3XDFwdHVcMzc3XDM3MVwzNTBcMzU0XDM0MFwzNzdcMT1CRFwzNzdcMjE0LjQ2XDM3N1wxVltdXDM3N1wyNDZcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMXxcMjAwXDIwMVwzNzdcMjI2LjQ2XDM3N1wxMiIiMzk7XDM3N1BVVlwzNzducnNcMzc3flwyMDEiIFwKKyAgIlwyMDJcMzc3XDIwN1wyMTJcMjEzXDM3N1wyMTBcMjE0XDIxNVwzNzd+XDIwMlwyMDNcMzc3b3N0XDM3N1JXWVwzNzc0IiBcCisgICI6PFwzNzdcMjI2LjQ2XDM3N1wxbnJzXDM3N1wyMzBcMzUwXDM1NFwzNDBcMzc3XDFhZWdcMzc3XDI2My40NlwzNzdcMSIgXAorICAiPkNFXDM3N1wyMjFcMzUwXDM1NFwzNDBcMzc3XDFcMjA0XDIxMFwyMTFcMzc3XDIzNi40NlwzNzdcMi81N1wzNzdcMzMwIiBcCisgICJcMzMxXDMzMVwzNzdcMjE2XDM1MFwzNTRcMzQwXDM3N1wxXDIyMFwyMjRcMjI1XDM3N1wyMjYuNDZcMzc3XDEyIiIyOCIgXAorICAiOlwzNzdMUVNcMzc3a29wXDM3N3xcMjAwXDIwMVwzNzdcMjA1XDIxMFwyMTJcMzc3XDIxMVwyMTRcMjE1XDM3N1wyMDAiIFwKKyAgIlwyMDRcMjA1XDM3N3B0dlwzNzdVWlxcXDM3NzY8PlwzNzdcMjI2LjQ2XDM3N1wxW2BhXDM3N1wzNzFcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVwyMjVcMjMwXDIzMVwzNzdcMjE1LjQ2XDM3N1wxXDI3NFwyNzZcMjc2XDM3N1wyNDdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMW5yc1wzNzdcMjY0LjQ2XDM3N1wxW2BhXDM3N1wyMzJcMzUwXDM1NFwzNDBcMzc3XDFVWlxcXDM3N1wyNjMuNDZcMzc3IiBcCisgICJcMVwyMzFcMjMzXDIzNFwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxXDI3MFwyNzJcMjcyXDM3N1wyMzcuNDZcMzc3XDEiIFwKKyAgIm9zdFwzNzdcMjE3XDM1MFwzNTRcMzQwXDM3N1wxXDIwNFwyMTBcMjExXDM3N1wyNjQuNDZcMzc3XDJQVVdcMzc3XDM1MSIgXAorICAiXDM1NFwzNDNcMzc3XDM3MFwzNTBcMzU0XDM0MFwzNzdcMlwzNTBcMzU0XDM0MlwzNzc5PkBcMzc3XDIxNC40NlwzNzciIFwKKyAgIlwxVFlaXDM3N1wyNTFcMzUwXDM1NFwzNDBcMzc3XDFucnNcMzc3XDI2Mi40NlwzNzdcMWJmaFwzNzdcMjM0XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFfZGVcMzc3XDI2Mi40NlwzNzdcMTpAQlwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxQkhKXDM3N1wyMzYiIFwKKyAgIi40NlwzNzdcMi81N1wzNzdcMzI2XDMyN1wzMzBcMzc3XDIxN1wzNTBcMzU0XDM0MFwzNzdcMVwxNzdcMjAzXDIwNFwzNzciIFwKKyAgIlwyNjIuNDZcMzc3XDJTWFlcMzc3XDM1MVwzNTJcMzUwXDM3N1wzNzFcMzUwXDM1NFwzNDBcMzc3XDFcMjEzXDIxN1wyMjAiIFwKKyAgIlwzNzdcMjE1LjQ2XDM3N1wxXDI3MVwyNzNcMjc0XDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFcMTc3XDIwM1wyMDRcMzc3IiBcCisgICJcMjYwLjQ2XDM3N1wxcXV3XDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFydndcMzc3XDI2Mi40NlwzNzdcMVwyMjJcMjI1IiBcCisgICJcMjI2XDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDFcMjMxXDIzNFwyMzVcMzc3XDIzNy40NlwzNzdcMW1xc1wzNzdcMjIwIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjI0XDIyN1wyMzBcMzc3XDI2MC40NlwzNzdcMWJmaFwzNzdcMzcyXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDJcMzUwXDM1MlwzNTFcMzc3NTo8XDM3N1wyMTQuNDZcMzc3XDFRVlhcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwyXDIzMVwyMzNcMjM0XDM3NzA2OFwzNzdcMjU0LjQ2XDM3N1wyLzU3XDM3N1wyMTRcMjIwXDIyMVwzNzdcMjQwXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDJcMjM3XDI0MlwyNDNcMzc3MDY4XDM3N1wyNjAuNDZcMzc3XDIiIjc9XDc3XDM3N1wzNTJcMzU0IiBcCisgICJcMzQ1XDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDFCSEpcMzc3XDIzNy40NlwzNzdcMVwzMjNcMzI0XDMyNFwzNzdcMjIwIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDJcMjUzXDI1NlwyNTdcMzc3NDo8XDM3N1wyNTUuNDZcMzc3XDF5fH5cMzc3XDM3M1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxXDIwMlwyMDVcMjA2XDM3N1wyMTUuNDZcMzc3XDFcMjY2XDI3MFwyNzFcMzc3XDI1NVwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wyXDMxMlwzMTNcMzE0XDM3N0NJSlwzNzdcMjUyLjQ2XDM3N1wyPkNFXDM3N1wyNzdcMzAxXDMwMlwzNzciIFwKKyAgIlwyNDJcMzUwXDM1NFwzNDBcMzc3XDJcMzIyXDMyM1wzMjRcMzc3UFVWXDM3N1wyNjAuNDZcMzc3XDFcMjEzXDIxNlwyMTciIFwKKyAgIlwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wyXDMwN1wzMTFcMzExXDM3Ny81N1wzNzdcMjM2LjQ2XDM3N1wxam5wXDM3NyIgXAorICAiXDIyMVwzNTBcMzU0XDM0MFwzNzdcMlwzMzBcMzMxXDMzMVwzNzdMUVNcMzc3XDI1Mi40NlwzNzdcMiIiNjw+XDM3N1wyNTciIFwKKyAgIlwyNjJcMjYzXDM3N1wzNzNcMzUwXDM1NFwzNDBcMzc3XDJcMzQyXDM0M1wzNDNcMzc3MTc5XDM3N1wyMTQuNDZcMzc3IiBcCisgICJcMU5TVVwzNzdcMjU3XDM1MFwzNTRcMzQwXDM3N1wyXDM1MVwzNTRcMzQzXDM3N3F1d1wzNzdcMjUwLjQ2XDM3N1wyZiIgXAorICAiamxcMzc3XDM0NlwzNDdcMzQ3XDM3N1wyNDVcMzUwXDM1NFwzNDBcMzc3XDJcMjI0XDIzMFwyMzFcMzc3NTs9XDM3N1wyNTUiIFwKKyAgIi40NlwzNzdcMldcXF1cMzc3XDI2NVwyNjdcMjcwXDM3N1wyMjFcMzUwXDM1NFwzNDBcMzc3XDFcMjI3XDIzMlwyMzNcMzc3IiBcCisgICJcMjM3LjQ2XDM3N1wxXDMyMVwzMjJcMzIzXDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3XDJcMjAwXDIwNFwyMDVcMzc3LyIgXAorICAiNTdcMzc3XDI0Ny40NlwzNzdcMlleYFwzNzdcMzM1XDMzNlwzMzZcMzc3XDM3NFwzNTBcMzU0XDM0MFwzNzdcMXB0dVwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDFcMjY0XDI2N1wyNjdcMzc3XDI2MVwzNTBcMzU0XDM0MFwzNzdcMlwzMDRcMzA2XDMwNlwzNzdMIiBcCisgICJRUlwzNzdcMjQ0LjQ2XDM3N1wyRktNXDM3N1wyNzFcMjczXDI3NFwzNzdcMjUwXDM1MFwzNTRcMzQwXDM3N1wzXDM0NiIgXAorICAiXDM0N1wzNDdcMzc3fFwyMDBcMjAxXDM3NzI4OlwzNzdcMjUwLjQ2XDM3N1wzIiIyODpcMzc3dnp7XDM3N1wzMTdcMzIxIiBcCisgICJcMzIxXDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIzNC40NlwzNzdcMy81N1wzNzdxdSIgXAorICAid1wzNzdcMzQxXDM0MlwzNDJcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMlwzMjFcMzIyXDMyM1wzNzdWW11cMzc3XDI0NCIgXAorICAiLjQ2XDM3N1wyPkRGXDM3N1wyNTNcMjU2XDI1N1wzNzdcMzc1XDM1MFwzNTRcMzQwXDM3N1wxXDMwNlwzMDdcMzEwXDM3NyIgXAorICAiXDIxNS40NlwzNzdcMU1SVFwzNzdcMjY0XDM1MFwzNTRcMzQwXDM3N1wyXDI0MlwyNDVcMjQ2XDM3N0NJSlwzNzdcMjQwIiBcCisgICIuNDZcMzc3XDI+Q0VcMzc3XDIzMVwyMzNcMjM0XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDNcMzQ2XDM0NlwzNDdcMzc3IiBcCisgICJcMjA3XDIxM1wyMTRcMzc3OkBCXDM3N1wyNDMuNDZcMzc3XDQvNTdcMzc3WV5gXDM3N1wyMzVcMjQwXDI0MVwzNzdcMzUyIiBcCisgICJcMzUzXDM0N1wzNzdcMjI3XDM1MFwzNTRcMzQwXDM3N1wyXDI2NlwyNzBcMjcxXDM3Nz5DRVwzNzdcMjMwLjQ2XDM3NyIgXAorICAiXDMiIjE3OVwzNzdxdXdcMzc3XDMyNFwzMjZcMzI2XDM3N1wyMjdcMzUwXDM1NFwzNDBcMzc3XDJcMjU1XDI1N1wyNjAiIFwKKyAgIlwzNzdLUFJcMzc3XDI0MC40NlwzNzdcMyIiOT5AXDM3N1wyMTVcMjIwXDIyMVwzNzdcMzUwXDM1NFwzNDJcMzc3XDM3NiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxT1RWXDM3N1wyMTUuNDZcMzc3XDFcMjYyXDI2NFwyNjVcMzc3XDI2NlwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wyXDI1MlwyNTRcMjU1XDM3N0tQUlwzNzdcMjM0LjQ2XDM3N1wyRElLXDM3N1wyNDJcMjQ0XDI0NVwzNzdcMjYxIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDNcMjU2XDI2MFwyNjFcMzc3ZGlqXDM3NzA2OFwzNzdcMjM1LjQ2XDM3N1w0IiIwNjhcMzc3IiBcCisgICJgZWZcMzc3XDI0M1wyNDZcMjQ3XDM3N1wzNDZcMzQ3XDM0N1wzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wzXDM1MlwzNTQiIFwKKyAgIlwzNDVcMzc3en5cMTc3XDM3NzI4OlwzNzdcMjI0LjQ2XDM3N1wzSE1PXDM3N1wyMjRcMjMwXDIzMVwzNzdcMzUwXDM1MSIgXAorICAiXDM1MVwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wyXDI2NVwyNjdcMjcwXDM3N1NYWVwzNzdcMjM0LjQ2XDM3N1wyPkMiIFwKKyAgIkVcMzc3XDIyNlwyMzFcMjMyXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDJcMzUwXDM1NFwzNDBcMzc3XDIyN1wyMzJcMjMzIiBcCisgICJcMzc3XDIxNS40NlwzNzdcMVBVV1wzNzdcMjcxXDM1MFwzNTRcMzQwXDM3N1wzXDMxN1wzMjBcMzIwXDM3N1wyMTBcMjE0IiBcCisgICJcMjE1XDM3N0JISlwzNzdcMjI2LjQ2XDM3N1wzPkNFXDM3N1wyMDFcMjA0XDIwNlwzNzdcMzEyXDMxM1wzMTRcMzc3XDI2NSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1w0XDM1MFwzNTRcMzQyXDM3N1wyNTdcMjYxXDI2MlwzNzd4fH1cMzc3QkhKXDM3N1wyMjYiIFwKKyAgIi40NlwzNzdcNSIiNjw+XDM3N2BlZlwzNzdcMjIwXDIyM1wyMjRcMzc3XDI3N1wzMDFcMzAyXDM3N1wzNTBcMzU0XDM0MiIgXAorICAiXDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3XDNcMzQ3XDM1MFwzNTBcMzc3XDIyMFwyMjNcMjI0XDM3N0hNT1wzNzdcMjE2IiBcCisgICIuNDZcMzc3XDQiIjE3OVwzNzdbYGFcMzc3XDIyNFwyMjdcMjMwXDM3N1wzMjZcMzI3XDMzMFwzNzdcMjQwXDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDNcMzMwXDMzMVwzMzFcMzc3XDIyMFwyMjNcMjI0XDM3N0hNT1wzNzdcMjI2LjQ2XDM3N1wzIiI5PkBcMzc3IiBcCisgICJ6flwxNzdcMzc3XDMwMVwzMDJcMzAzXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIwMlwzNTBcMzU0XDM0MFwzNzdcMiIgXAorICAiXDMzMlwzMzNcMzM0XDM3NzM5O1wzNzdcMjE1LjQ2XDM3N1wxXDI3NVwyNzdcMjc3XDM3N1wyNzRcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcNFwzMjZcMzI3XDMzMFwzNzdcMjQ0XDI0N1wyNTBcMzc3c3d4XDM3N0NJSlwzNzdcMjE2LjQ2XDM3N1w0QEZHIiBcCisgICJcMzc3bnJzXDM3N1wyNDBcMjQzXDI0NFwzNzdcMzIxXDMyMlwzMjNcMzc3XDI3NFwzNTBcMzU0XDM0MFwzNzdcN1wzNTAiIFwKKyAgIlwzNTJcMzUxXDM3N1wzMDZcMzA3XDMxMFwzNzdcMjQyXDI0NFwyNDVcMzc3XDE3N1wyMDNcMjA0XDM3N1leYFwzNzdCIiBcCisgICJISlwzNzc1Oz1cMzc3XDIxMS40NlwzNzdcNkNJSlwzNzdfZGVcMzc3en5cMTc3XDM3N1wyMjZcMjMxXDIzMlwzNzdcMjYyIiBcCisgICJcMjY0XDI2NVwzNzdcMzI1XDMyNlwzMjdcMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcNlwzMzZcMzM3XDMzN1wzNzdcMjQ2IiBcCisgICJcMjUxXDI1MlwzNzdcMjA1XDIxMFwyMTJcMzc3ZmpsXDM3N0xRU1wzNzdESUtcMzc3XDIwMjxCQ1wzNzdcNkdMTlwzNzciIFwKKyAgIlNYWVwzNzdlaWtcMzc3XDIwNFwyMTBcMjExXDM3N1wyNDJcMjQ1XDI0NlwzNzdcMzExXDMxMlwzMTNcMzc3XDI0N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1w0XDMzM1wzMzRcMzM0XDM3N1wyNTFcMjUzXDI1NFwzNzd4fH1cMzc3SE1PXDM3N1wyMTYuNDZcMzc3IiBcCisgICJcNDtBQ1wzNzdpbW9cMzc3XDIzMlwyMzVcMjM2XDM3N1wzMTRcMzE2XDMxNlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDIwNVwzNTBcMzU0XDM0MFwzNzdcMVVaXFxcMzc3XDIxNS40NlwzNzdcMVxcYWJcMzc3XDMwMlwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxNFwzMzBcMzMxXDMzMVwzNzdcMjc0XDI3NlwyNzZcMzc3XDI0NFwyNDdcMjUwXDM3N1wyMzVcMjM3XDI0MFwzNzdcMjIwIiBcCisgICJcMjIzXDIyNFwzNzdcMjEwXDIxNFwyMTVcMzc3XDIwN1wyMTJcMjEzXDM3N1wyMjBcMjIzXDIyNFwzNzdcMjM0XDIzNyIgXAorICAiXDI0MFwzNzdcMjQzXDI0NlwyNDdcMzc3XDI3MVwyNzNcMjczXDM3N1wzMjZcMzI3XDMzMFwzNzdcMzExXDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDVcMzUyXDM1NFwzNDVcMzc3XDM0MFwzNDFcMzQxXDM3N1wzMjVcMzI2XDMyN1wzNzdcMzQxXDM0MlwzNDIiIFwKKyAgIlwzNzdcMzQzXDM0NFwzNDRcMzc3XDM1M1wzNTBcMzU0XDM0MFwzNzdcMTVcMzMzXDMzNFwzMzRcMzc3XDI3NlwzMDBcMzAxIiBcCisgICJcMzc3XDI0NlwyNTBcMjUxXDM3N1wyMzVcMjQwXDI0MVwzNzdcMjIwXDIyNFwyMjVcMzc3XDIxMVwyMTRcMjE1XDM3NyIgXAorICAiXDIwNVwyMTBcMjEyXDM3N1wyMjBcMjIzXDIyNFwzNzdcMjMyXDIzNVwyMzZcMzc3XDI0MlwyNDRcMjQ1XDM3N1wyNjUiIFwKKyAgIlwyNjdcMjcwXDM3N1wzMjNcMzI0XDMyNFwzNzdcMzUwXDM1NFwzNDJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjEwIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjA1XDIxMFwyMTJcMzc3XDIxNi40NlwzNzdcMVwzMTNcMzE1XDMxNVwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMzVcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVwyNjRcMjY3XDI2N1wzNzdcMjE2LjQ2XDM3N1wxdHh6XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzdcMlwzMjJcMzIzXDMyNFwzNzciIFwKKyAgIjU6PFwzNzdcMjE1LjQ2XDM3N1wyIiI5PkBcMzc3XDM1MFwzNTJcMzUxXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIzNFwzNTBcMzU0XDM0MFwzNzdcMlwzMzRcMzM1XDMzNSIgXAorICAiXDM3N1w3N0VHXDM3N1wyMTYuNDZcMzc3XDFcMjQzXDI0NlwyNDdcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjM0XDM1MFwzNTRcMzQwXDM3N1wyXDMzNVwzMzZcMzM3XDM3NyIgXAorICAiQEZHXDM3N1wyMTYuNDZcMzc3XDFWW11cMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMjM0XDM1MFwzNTRcMzQwXDM3N1wyXDMzNlwzMzdcMzM3XDM3N0JHSVwzNzdcMjE2LjQ2IiBcCisgICJcMzc3XDIiIjY8PlwzNzdcMzM1XDMzNlwzMzZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wyXDMzM1wzMzRcMzM0XDM3N0JISlwzNzdcMjE3IiBcCisgICIuNDZcMzc3XDFcMjUyXDI1NFwyNTVcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wyXDI3N1wzMDFcMzAyXDM3Nzk+QFwzNzdcMjE3LjQ2IiBcCisgICJcMzc3XDFwdHVcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wyXDIxNVwyMjBcMjIxXDM3Ny81N1wzNzdcMjE3LjQ2XDM3N1wxTFFTXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIzMlwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDMwNFwzMDZcMzA2XDM3N1BVV1wzNzdcMjIwLjQ2XDM3N1wyXDc3RUdcMzc3XDM0MVwzNDJcMzQzIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIzMCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyXDMzNVwzMzZcMzM2XDM3N2ltb1wzNzdcMjIxLjQ2XDM3N1wyIiI1OjxcMzc3XDMyMlwzMjMiIFwKKyAgIlwzMjRcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMjI3XDM1MFwzNTRcMzQwXDM3N1wzXDMxMlwzMTNcMzE0XDM3N3Z6e1wzNzcxNzlcMzc3XDIyMS40NlwzNzdcMiIiMiIgXAorICAiODpcMzc3XDI3NVwyNzdcMjc3XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDIyNVwzNTBcMzU0XDM0MFwzNzdcM1wzNDFcMzQyXDM0M1wzNzdcMjM3XDI0MlwyNDNcMzc3TVIiIFwKKyAgIlRcMzc3XDIyMy40NlwzNzdcMiIiMDY4XDM3N1wyNzFcMjczXDI3NFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDNcMzEwXDMxMlwzMTJcMzc3IiBcCisgICJcMjE1XDIyMFwyMjFcMzc3T1RWXDM3N1wyMjUuNDZcMzc3XDIiIjA2OFwzNzdcMjY0XDI2N1wyNjdcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjIxXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDNcMjE3XDIyMlwyMjNcMzc3WV5gXDM3NzE3OVwzNzdcMjI3LjQ2XDM3N1wyIiI1OjxcMzc3XDI3NVwyNzdcMzAwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIyMiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDIwMVwyMDRcMjA2XDM3N1wyMzAuNDZcMzc3XDI7QUNcMzc3XDMxM1wzMTVcMzE1XDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIyM1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDM0MVwzNDJcMzQzXDM3NzE3OVwzNzdcMjI2LjQ2XDM3N1wyTlNVXDM3N1wzMzVcMzM2XDMzNyIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMjUiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMXh8fVwzNzdcMjI1LjQ2XDM3N1wxcHR1XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIyN1wzNTBcMzU0XDM0MFwzNzdcMlwzMzNcMzM0XDMzNCIgXAorICAiXDM3Ny81N1wzNzdcMjIyLjQ2XDM3N1wyIiI5PkBcMzc3XDI1MlwyNTRcMjU1XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMXB0dVwzNzciIFwKKyAgIlwyMjEuNDZcMzc3XDJlaWtcMzc3XDM0NFwzNDVcMzQ1XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIzMlwzNTBcMzU0XDM0MFwzNzdcMVwzMjRcMzI1XDMyNVwzNzdcMjE3IiBcCisgICIuNDZcMzc3XDJQVVdcMzc3XDI3NVwyNzdcMjc3XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzdcMWdrbFwzNzdcMjE0LjQ2XDM3N1wyTFEiIFwKKyAgIlNcMzc3XDI2MFwyNjNcMjYzXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDIzN1wzNTBcMzU0XDM0MFwzNzdcMVwzMTNcMzE1XDMxNVwzNzdcMjExLjQ2XDM3N1wzIiIwNjgiIFwKKyAgIlwzNzdqbnBcMzc3XDI3NVwyNzdcMjc3XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDI0MlwzNTBcMzU0XDM0MFwzNzdcMV5jZVwzNzdcMjA1LjQ2XDM3N1w0IiI4Plw3N1wzNzciIFwKKyAgImtwcVwzNzdcMjUzXDI1NVwyNTZcMzc3XDM1MFwzNTJcMzUxXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI0NFwzNTBcMzU0XDM0MFwzNzdcNlwzMDJcMzA0XDMwNVwzNzcuNCIgXAorICAiNlwzNzc7QUNcMzc3YmdoXDM3N1wyMjRcMjMwXDIzMVwzNzdcMzE0XDMxNlwzMTZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjUxXDM1MFwzNTRcMzQwXDM3N1wxXDM0NVwzNDYiIFwKKyAgIlwzNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMzM3XDM1MFwzNTRcMzQwXDM3N1wxXDM1MlwzNTRcMzUwXDM3N1wyMTBcMzI1XDMyNlwzMjdcMzc3XDFcMzQxIiBcCisgICJcMzQyXDM0MlwzNzdcMjMyXDM1MFwzNTRcMzQwXDM3N1wxXDM0MVwzNDJcMzQzXDM3N1wyMDdcMzI1XDMyNlwzMjdcMzc3IiBcCisgICJcMVwzNDNcMzQ0XDM0NFwzNzdcMjQ0XDM1MFwzNTRcMzQwXDM3N1wyXDMxNFwzMTZcMzE2XDM3N1wyNjdcMjcxXDI3MiIgXAorICAiXDM3N1wyMDJcMjQ0XDI0N1wyNTBcMzc3XDJcMjY3XDI3MVwyNzJcMzc3XDMxNVwzMTZcMzE3XDM3N1wyMzZcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwzNTBcMzUxXDM1MVwzNzdcMjA0XDM0M1wzNDRcMzQ0XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIlwzMzJcMzMzXDMzNFwzNzdcMjE3XDMyNVwzMjZcMzI3XDM3N1wyMzJcMzUwXDM1NFwzNDBcMzc3XDNcMzAwXDMwMlwzMDIiIFwKKyAgIlwzNzdcMjM1XDIzN1wyNDBcMzc3XDIwNlwyMTFcMjEyXDM3N1wyMDJcMjAyXDIwNVwyMDZcMzc3XDNcMjEyXDIxNVwyMTYiIFwKKyAgIlwzNzdcMjQyXDI0NVwyNDZcMzc3XDMwN1wzMTFcMzExXDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDFcMzQ0XDM0NVwzNDUiIFwKKyAgIlwzNzdcMjIzXDMyNVwzMjZcMzI3XDM3N1wxXDMzNVwzMzZcMzM2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDMwMlwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMTIuNDZcMzc3XDNLUFJcMzc3XDIxM1wyMTZcMjE3XDM3N1wzMzUiIFwKKyAgIlwzMzZcMzM3XDM3N1wyMjZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIxMS40NlwzNzdcM0JHSVwzNzd0eHlcMzc3IiBcCisgICJcMjcxXDI3M1wyNzNcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzdcM1wyNjVcMjY3XDI3MFwzNzdscXJcMzc3Njw+XDM3NyIgXAorICAiXDIwNi40NlwzNzdcMyIiNjw+XDM3N25yc1wzNzdcMjcwXDI3MlwyNzJcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMVMiIFwKKyAgIlhZXDM3N1wyMDQuNDZcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjE3LjQ2XDM3N1wxXDMzMVwzMzJcMzMzIiBcCisgICJcMzc3XDIyNlwzNTBcMzU0XDM0MFwzNzdcM1wyNjdcMjcxXDI3MlwzNzdmamxcMzc3MDY4XDM3N1wyMTAuNDZcMzc3XDQiIFwKKyAgIjA2OFwzNzdhZWdcMzc3XDI0NlwyNTFcMjUyXDM3N1wzNTBcMzU0XDM0MlwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJ4fH1cMzc3XDIyMy40NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMDJcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIlwyMzVcMjM3XDI0MFwzNzdcMjE0LjQ2XDM3N1wyIiIxNzlcMzc3XDIxM1wyMTdcMjIwXDM3N1wyMjVcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMWtwcVwzNzdcMjE0LjQ2XDM3N1wyUFVXXDM3N1wzMjZcMzI3XDMzMFwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDJcMjc1XDI3N1wzMDBcMzc3UFVWXDM3N1wyMTQuNDZcMzc3XDJSV1lcMzc3XDI3N1wzMDFcMzAyXDM3N1wyMzFcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIxNy40NiIgXAorICAiXDM3N1wxXDMzMlwzMzNcMzM0XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDJcMzEyXDMxM1wzMTRcMzc3UVZYXDM3N1wyMTYiIFwKKyAgIi40NlwzNzdcMiIiNjw+XDM3N1wyMDdcMjEzXDIxNFwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxdHh6XDM3N1wyMjMuIiBcCisgICI0NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMDJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDAiIFwKKyAgIlwzNzdcMjE2LjQ2XDM3N1wxc3d4XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIxNS40NlwzNzdcMiIiNyIgXAorICAiPVw3N1wzNzdcMzE3XDMyMVwzMjFcMzc3XDIyN1wzNTBcMzU0XDM0MFwzNzdcMVwyMTBcMjE0XDIxNVwzNzdcMjIwLjQiIFwKKyAgIjZcMzc3XDFcMjExXDIxNFwyMTVcMzc3XDIzMFwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjE3LjQ2XDM3N1wxXDMzNFwzMzVcMzM1XDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMlwyMjVcMjMwXDIzMVwzNzcwNjhcMzc3XDIyMC40NlwzNzdcMUpPUVwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxayIgXAorICAicHFcMzc3XDIyMy40NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMDJcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIlwyMzVcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxQEZHXDM3N1wyMDJKT1FcMzc3XDJGS01cMzc3MDY4XDM3N1wyMDYuIiBcCisgICI0NlwzNzdcMVwyNTdcMjYxXDI2MlwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFHTCIgXAorICAiTlwzNzdcMjAySk9RXDM3N1wxQUZIXDM3N1wyMDYuNDZcMzc3XDFHTU5cMzc3XDIyNlwzNTBcMzU0XDM0MFwzNzdcMWciIFwKKyAgImxtXDM3N1wyMDcuNDZcMzc3XDQ8QkNcMzc3UVZYXDM3N1JXWVwzNzc+Q0VcMzc3XDIwNy40NlwzNzdcMWdsbVwzNzdcMjI3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMDMiIFwKKyAgIi40NlwzNzdcMS81N1wzNzdcMjEzPEJDXDM3N1wxXDM1MFwzNTFcMzUxXDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3XDFcMjA0IiBcCisgICJcMjEwXDIxMVwzNzdcMjA3LjQ2XDM3N1w2SU5QXDM3N2ZqbFwzNzd0eHlcMzc3aW1vXDM3N1FWWFwzNzcyODpcMzc3XDIwNSIgXAorICAiLjQ2XDM3N1wxXDI1NVwyNTdcMjYwXDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDF1eXtcMzc3XDIwNjxCQ1wzNzdcMTsiIFwKKyAgIkFDXDM3N1wyMDQuNDZcMzc3XDEiIjA2OFwzNzdcMjA3PEJDXDM3N1wxXmNlXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzAyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIwNCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyXDI1MFwyNTNcMjUzXDM3NzY8PlwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wyMjNcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjA0LjQ2XDM3N1wxXDM0NlwzNDdcMzQ3XDM3N1wyMDNcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMlwzNTJcMzU0XDM0NVwzNzdcMjA3XDIxM1wyMTRcMzc3XDIwNS40NlwzNzdcMVwyNzFcMjczXDI3NFwzNzdcMjI0XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDF6flwxNzdcMzc3XDIwNS40NlwzNzdcMyIiNTs9XDM3N1wyMTNcMjE3XDIyMFwzNzdcMzI3XDMzMCIgXAorICAiXDMzMFwzNzdcMjA0XDM1MFwzNTRcMzQwXDM3N1wzXDMzNFwzMzVcMzM1XDM3N1wyMjNcMjI2XDIyN1wzNzc4Plw3N1wzNzciIFwKKyAgIlwyMDUuNDZcMzc3XDF5fH5cMzc3XDIyNlwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzLjQ2XDM3N1wxOkBCXDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3XDFcMjQwXDI0MyIgXAorICAiXDI0NFwzNzdcMjA1LjQ2XDM3N1wzOkBCXDM3N1wyMjRcMjMwXDIzMVwzNzdcMzQ0XDM0NVwzNDVcMzc3XDIwNlwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1w1XDMwNlwzMDdcMzEwXDM3N1wyMDJcMjA1XDIwNlwzNzc6QEJcMzc3LjQ2XDM3N0dNTlwzNzdcMjMxIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDIwNC40NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMDVcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVwyNTVcMjU3XDI2MFwzNzdcMjA1LjQ2XDM3N1wxXDM1MVwzNTRcMzQzXDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMWtwcVwzNzdcMjA0LjQ2XDM3N1wxXDM0NlwzNDdcMzQ3XDM3N1wyMDVcMzUwXDM1NFwzNDBcMzc3XDF6flwxNzdcMzc3IiBcCisgICJcMjA0LjQ2XDM3N1wxXDIxMFwyMTRcMjE1XDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDFcMjU3XDI2MlwyNjNcMzc3XDIwNSIgXAorICAiLjQ2XDM3N1wyXmJkXDM3N1wzNTBcMzUyXDM1MVwzNzdcMjEwXDM1MFwzNTRcMzQwXDM3N1wyXDM1MVwzNTRcMzQzXDM3NyIgXAorICAiZ2xtXDM3N1wyMDUuNDZcMzc3XDFcMjUzXDI1NlwyNTdcMzc3XDIyNVwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0IiBcCisgICIuNDZcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzLjQ2XDM3N1wxOkBCXDM3N1wyMzRcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMlwzMzJcMzMzXDMzNFwzNzcyODpcMzc3XDIwNC40NlwzNzdcMltgYVwzNzdcMzQ3XDM1MFwzNTBcMzc3IiBcCisgICJcMjEzXDM1MFwzNTRcMzQwXDM3N1wyXDIzN1wyNDJcMjQzXDM3N1wyNjRcMjY2XDI2NlwzNzdcMjMxXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDIwNC40NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1IiBcCisgICJcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMDZcMzUwXDM1NFwzNDBcMzc3XDIwNS40NiIgXAorICAiXDM3N1wxXDMzMFwzMzFcMzMxXDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDYiIFwKKyAgIlwzNDdcMzQ3XDM3N1wyMDVcMzUwXDM1NFwzNDBcMzc3XDFcMzEwXDMxMlwzMTJcMzc3XDIwNC40NlwzNzdcMXF1d1wzNzciIFwKKyAgIlwyMjNcMzUwXDM1NFwzNDBcMzc3XDFCR0lcMzc3XDIwNC40NlwzNzdcMWdrbFwzNzdcMjE0XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDF0eHlcMzc3XDIwNC40NlwzNzdcMUFGSFwzNzdcMjI1XDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3N1wyMDQuNDZcMzc3IiBcCisgICJcMjI0XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMDMuNDZcMzc3XDE6QEJcMzc3XDIzNFwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxam5wXDM3N1wyMDQuNDZcMzc3XDFVWlxcXDM3N1wyNTBcMzUwXDM1NFwzNDBcMzc3XDIwNC40NlwzNzdcMVNYWVwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDMxMlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3NyIgXAorICAiXDFcMjY1XDI2N1wyNzBcMzc3XDIwNVwzNTBcMzU0XDM0MFwzNzdcMVwzNTJcMzU0XDM0NVwzNzdcMjA1LjQ2XDM3N1wxIiBcCisgICJcMzQwXDM0MVwzNDFcMzc3XDIyMlwzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjA0LjQ2XDM3N1wxXDM0NlwzNDdcMzQ3IiBcCisgICJcMzc3XDIwNVwzNTBcMzU0XDM0MFwzNzdcMVwyNzFcMjczXDI3M1wzNzdcMjA0LjQ2XDM3N1wxXDIwMVwyMDRcMjA2XDM3NyIgXAorICAiXDIyMlwzNTBcMzU0XDM0MFwzNzdcMVwyMzRcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxQ0lKXDM3N1wyMTZcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVBVVlwzNzdcMjA0LjQ2XDM3N1wxXDIzM1wyMzZcMjM3XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIlNYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwMy40NlwzNzdcMTpAQlwzNzdcMjMzIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMzQxXDM0MlwzNDJcMzc3XDIwNC40NlwzNzdcMiIiMTc5XDM3N1wzMzVcMzM2XDMzNyIgXAorICAiXDM3N1wyNTBcMzUwXDM1NFwzNDBcMzc3XDIwNC40NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTIiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMDVcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwyMjJcMjI1XDIyNlwzNzdcMjA0LjQ2XDM3N1wxIiIwNjhcMzc3XDIyM1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2XDM0N1wzNDdcMzc3XDIwNVwzNTBcMzU0XDM0MFwzNzdcMWJmaFwzNzciIFwKKyAgIlwyMDQuNDZcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIyMlwzNTBcMzU0XDM0MFwzNzdcMVZbXVwzNzdcMjA0LjQ2XDM3NyIgXAorICAiXDFcMjUzXDI1NlwyNTdcMzc3XDIxNlwzNTBcMzU0XDM0MFwzNzdcMVwyNzNcMjc1XDI3NlwzNzdcMjA0LjQ2XDM3N1wxIiBcCisgICJUWVpcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIkdMTlwzNzdcMjAzLjQ2XDM3N1wxOkBCXDM3N1wyMzNcMzUwXDM1NFwzNDBcMzc3XDFcMjMxXDIzM1wyMzRcMzc3XDIwNCIgXAorICAiLjQ2XDM3N1wxeX1cMTc3XDM3N1wyNTFcMzUwXDM1NFwzNDBcMzc3XDIwNC40NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDMxMlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxXDI2NVwyNjdcMjcwIiBcCisgICJcMzc3XDIwM1wzNTBcMzU0XDM0MFwzNzdcM1wzNDVcMzQ2XDM0NlwzNzdcMjA2XDIxMVwyMTJcMzc3LzU3XDM3N1wyMDQiIFwKKyAgIi40NlwzNzdcMVtgYVwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2XDM0N1wzNDciIFwKKyAgIlwzNzdcMjAzXDM1MFwzNTRcMzQwXDM3N1wyXDMyM1wzMjRcMzI0XDM3N2ZqbFwzNzdcMjA0LjQ2XDM3N1wyLzU3XDM3NyIgXAorICAiXDMzNlwzMzdcMzM3XDM3N1wyMjFcMzUwXDM1NFwzNDBcMzc3XDFcMzQ1XDM0NlwzNDZcMzc3XDIwNC40NlwzNzdcMSIiOSIgXAorICAiXDc3QVwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxQkhKXDM3N1wyMDQuNDZcMzc3XDFcMzQxXDM0MlwzNDJcMzc3XDIyMyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3N1wyMDQuNDZcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzIiBcCisgICIuNDZcMzc3XDE6QEJcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMWdrbFwzNzdcMjA0LjQ2XDM3N1wxXDMwMFwzMDJcMzAyIiBcCisgICJcMzc3XDI1MVwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDMxMiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQuNDZcMzc3XDEiIjc9XDc3XDM3N1wyMDM8QkNcMzc3IiBcCisgICJcMS81N1wzNzdcMjA2LjQ2XDM3N1wxXDI1N1wyNjJcMjYzXDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNCIgXAorICAiLjQ2XDM3N1wxOkBCXDM3N1wyMDI8QkNcMzc3XDEiIjk+QFwzNzdcMjA2LjQ2XDM3N1wxXDIwMFwyMDRcMjA1XDM3N1wyMjIiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjA0LjQ2XDM3N1wxcnZ3XDM3N1wyMjBcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMX5cMjAyXDIwM1wzNzdcMjA0LjQ2XDM3N1wxXDI3NFwyNzZcMjc2XDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVNYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwMy40NlwzNzdcMSIiMTc5XDM3NyIgXAorICAiXDIxMWZqbFwzNzdcMVwzMTFcMzEyXDMxM1wzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxQEZHXDM3N1wyMDQuNDZcMzc3IiBcCisgICJcMVwzNTJcMzU0XDM0NVwzNzdcMjUxXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIxNi40NlwzNzdcMWVpa1wzNzdcMjI0IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIxNS40NlwzNzdcMXB0dlwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxXDI1NiIgXAorICAiXDI2MFwyNjFcMzc3XDIwNC40NlwzNzdcMVwyMTdcMjIyXDIyM1wzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzciIFwKKyAgIlwyNDBcMzc3XDIwNC40NlwzNzdcMVwyNDZcMjUwXDI1MVwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3N1wyMDQiIFwKKyAgIi40NlwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMTUuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIyMSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxIiIxNzlcMzc3XDIwMy40NlwzNzdcMSIiMzk7XDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDMxMlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3IiBcCisgICJcMjQwXDM3N1wyMTUuNDZcMzc3XDFwdHVcMzc3XDIyNVwzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjEzLjQ2XDM3NyIgXAorICAiXDI6QEJcMzc3XDI1NVwyNTdcMjYwXDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFcMjM2XDI0MVwyNDJcMzc3XDIwNC4iIFwKKyAgIjQ2XDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDFcMjUxXDI1M1wyNTRcMzc3XDIwNC40IiBcCisgICI2XDM3N1wxXDIzMVwyMzNcMjM0XDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIxNS40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDIwNC40NlwzNzdcMTpAQlwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIxMi40NlwzNzdcMyIiOD5cNzciIFwKKyAgIlwzNzdvc3RcMzc3XDMxMFwzMTJcMzEyXDM3N1wyMjZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIxMy40NlwzNzdcMiIgXAorICAiNz1cNzdcMzc3XDM1MlwzNTRcMzUwXDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFcMjU3XDI2MlwyNjNcMzc3XDIwNC4iIFwKKyAgIjQ2XDM3N1wxXDIxNFwyMjBcMjIxXDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDFcMjMxXDIzNFwyMzVcMzc3XDIwNC40IiBcCisgICI2XDM3N1wxXDI1MVwyNTNcMjU0XDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIxNS40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDEiIjU7PVwzNzdcMjAzLjQ2XDM3N1wxIiIwNjhcMzc3XDI1MlwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1giIFwKKyAgIllcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQuIiBcCisgICI0NlwzNzdcMXh8fVwzNzdcMjAyXDI1M1wyNTZcMjU3XDM3N1wzXDI1NFwyNTdcMjU3XDM3N1wzMDBcMzAyXDMwMlwzNzciIFwKKyAgIlwzMjZcMzI3XDMzMFwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzAyXDMwM1wzMDQiIFwKKyAgIlwzNzdcMjAyXDMyNVwzMjZcMzI3XDM3N1wxXDIwNFwyMTBcMjExXDM3N1wyMDQuNDZcMzc3XDFcMjAyXDIwNlwyMDdcMzc3IiBcCisgICJcMjI0XDM1MFwzNTRcMzQwXDM3N1wxXDMwNFwzMDZcMzA2XDM3N1wyMDQuNDZcMzc3XDFrcHFcMzc3XDIyMFwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxen5cMTc3XDM3N1wyMDQuNDZcMzc3XDFcMjc1XDI3N1wyNzdcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxU1hZXDM3N1wyMDQuNDZcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzLjQ2XDM3N1wxIiI2PD5cMzc3IiBcCisgICJcMjExXDI3MVwyNzNcMjc0XDM3N1wxXDM0NlwzNDdcMzQ3XDM3N1wyMjFcMzUwXDM1NFwzNDBcMzc3XDFJTlBcMzc3XDIwNCIgXAorICAiLjQ2XDM3N1wxXDMzMVwzMzJcMzMzXDM3N1wyNTFcMzUwXDM1NFwzNDBcMzc3XDIwNC40NlwzNzdcMVNYWVwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDMxMlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxXDI1MSIgXAorICAiXDI1M1wyNTRcMzc3XDIzNlwzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjA0LjQ2XDM3N1wxXDM0NlwzNDdcMzQ3XDM3NyIgXAorICAiXDIwMlwzNTBcMzU0XDM0MFwzNzdcMlwzNTBcMzU0XDM0MlwzNzc5XDc3QVwzNzdcMjAzLjQ2XDM3N1wyIiIxNzlcMzc3IiBcCisgICJcMzM2XDMzN1wzMzdcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMlwzNTFcMzUyXDM1MFwzNzcwNjhcMzc3XDIwMy40NiIgXAorICAiXDM3N1wxIiI1Oz1cMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMT1CRFwzNzdcMjAzLjQ2XDM3N1wyLzU3XDM3N1wzNDciIFwKKyAgIlwzNTBcMzUwXDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFHTE5cMzc3XDIwMy40NlwzNzdcMTpAQlwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wxc3d4XDM3N1wyMDQuNCIgXAorICAiNlwzNzdcMVwyMzVcMjQwXDI0MVwzNzdcMjUxXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNTFcMjUzIiBcCisgICJcMjU0XDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDZcMzQ3XDM0N1wzNzdcMjAzIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjI0XDIzMFwyMzFcMzc3XDIwNC40NlwzNzdcMXB0dVwzNzdcMjI0XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcXGFiXDM3N1wyMDQuNDZcMzc3XDFcMjQyXDI0NFwyNDVcMzc3XDIxNlwzNTBcMzU0XDM0MFwzNzdcMVwyNjAiIFwKKyAgIlwyNjNcMjYzXDM3N1wyMDQuNDZcMzc3XDFZXmBcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0LjQ2IiBcCisgICJcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzLjQ2XDM3N1wxOkBCXDM3N1wyMzNcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVwyNTBcMjUzXDI1M1wzNzdcMjA0LjQ2XDM3N1wxSE1PXDM3N1wyNTFcMzUwXDM1NFwzNDBcMzc3XDIwNC40IiBcCisgICI2XDM3N1wxU1hZXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDMxMlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MCIgXAorICAiXDM3N1wyMDQuNDZcMzc3XDFcMjUxXDI1M1wyNTRcMzc3XDIzNlwzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjA0LjQiIFwKKyAgIjZcMzc3XDFcMzQ2XDM0N1wzNDdcMzc3XDIwNFwzNTBcMzU0XDM0MFwzNzdcMTxCQ1wzNzdcMjA0LjQ2XDM3N1wxXDMxNyIgXAorICAiXDMyMFwzMjBcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMVwyNDVcMjQ3XDI1MFwzNzdcMjA0LjQ2XDM3N1wyPEJDXDM3NyIgXAorICAiXDM0NlwzNDdcMzQ3XDM3N1wyMTRcMzUwXDM1NFwzNDBcMzc3XDJcMzUxXDM1NFwzNDNcMzc3RktNXDM3N1wyMDQuNDYiIFwKKyAgIlwzNzdcMVwyNDNcMjQ2XDI0N1wzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3N1wyMDQuNDZcMzc3XDIyNFwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMDMuNDZcMzc3XDE6QEJcMzc3XDIzNFwzNTBcMzU0XDM0MFwzNzdcMSIiNTo8IiBcCisgICJcMzc3XDIwNC40NlwzNzdcMVwyMzBcMjMzXDIzNFwzNzdcMjUwXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWCIgXAorICAiWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC4iIFwKKyAgIjQ2XDM3N1wxXDI1MVwyNTNcMjU0XDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDYiIFwKKyAgIlwzNDdcMzQ3XDM3N1wyMDRcMzUwXDM1NFwzNDBcMzc3XDFcMjMzXDIzNlwyMzdcMzc3XDIwNC40NlwzNzdcMV5iZFwzNzciIFwKKyAgIlwyMjRcMzUwXDM1NFwzNDBcMzc3XDFJTlBcMzc3XDIwNC40NlwzNzdcMVdcXF1cMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxY2hpXDM3N1wyMDQuNDZcMzc3XDFITU9cMzc3XDIyNVwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0LjQ2XDM3NyIgXAorICAiXDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzLjQ2XDM3N1wxOkBCXDM3N1wyMzRcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwyMDVcMjEwXDIxMlwzNzdcMjA0LjQ2XDM3N1wyIiIwNjhcMzc3XDI2N1wyNzFcMjcyXDM3N1wyMTVcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwzMzBcMzMyXDMzMlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNTEiIFwKKyAgIlwyNTNcMjU0XDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDZcMzQ3XDM0N1wzNzciIFwKKyAgIlwyMDVcMzUwXDM1NFwzNDBcMzc3XDFARkdcMzc3XDIwNC40NlwzNzdcMVwyNzRcMjc2XDI3NlwzNzdcMjIzXDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMjc0XDI3NlwyNzZcMzc3XDIwNS40NlwzNzdcMk1SVFwzNzdcMzI3XDMzMFwzMzBcMzc3XDIxMFwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDMzNVwzMzZcMzM2XDM3N1VZW1wzNzdcMjA1LjQ2XDM3N1wxXDI3MlwyNzRcMjc1XDM3N1wyMjUiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMT1CRFwzNzdcMjAzLjQ2XDM3N1wxIiI2PD5cMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMSIgXAorICAiR0xOXDM3N1wyMDMuNDZcMzc3XDE6QEJcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzdcMUFGSFwzNzdcMjA0LjQ2XDM3N1wyIiBcCisgICIvNTdcMzc3XDIxN1wyMjJcMjIzXDM3N1wyMTJcMzUwXDM1NFwzNDBcMzc3XDRcMjc0XDI3NlwyNzZcMzc3YmdoXDM3NyIgXAorICAiLjQ2XDM3N1wzMjdcMzMwXDMzMFwzNzdcMjMwXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNTFcMjUzIiBcCisgICJcMjU0XDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDZcMzQ3XDM0N1wzNzdcMjA1IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjQwXDI0M1wyNDRcMzc3XDIwNC40NlwzNzdcMU1SVFwzNzdcMjI0XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjIwXDIyNFwyMjVcMzc3XDIwNS40NlwzNzdcMyIiMDY4XDM3N3l9XDE3N1wzNzdcMzAyXDMwNFwzMDVcMzc3IiBcCisgICJcMjA0XDM1MFwzNTRcMzQwXDM3N1wzXDMwNlwzMDdcMzEwXDM3N1wyMDBcMjA0XDIwNVwzNzcxNzlcMzc3XDIwNS40NiIgXAorICAiXDM3N1wxXDIyMFwyMjNcMjI0XDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDNcMzA2XDMwN1wzMTBcMzc3XDI1N1wyNjEiIFwKKyAgIlwyNjJcMzc3aG1uXDM3N1wyMDQuNDZcMzc3XDFfZGVcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzIiBcCisgICIuNDZcMzc3XDEiIjk+QFwzNzdcMjEzXDM0M1wzNDRcMzQ0XDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3XDJcMzEzXDMxNSIgXAorICAiXDMxNVwzNzczOTtcMzc3XDIwNS40NlwzNzdcMTJARkdcMzc3XDIxMlwyMTVcMjE2XDM3N1wzMDJcMzAzXDMwNFwzNzciIFwKKyAgIlwzNDFcMzQyXDM0MlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM0N1wzNTBcMzUwXDM3N1wzMjBcMzIyXDMyMlwzNzdcMjUzIiBcCisgICJcMjU2XDI1N1wzNzd3e3xcMzc3PUJEXDM3N1wyMDMuNDZcMzc3XDFcMjEyXDIxNVwyMTZcMzc3XDIzMFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNSIgXAorICAiXDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNjRcMjY2XDI2NlwzNzdcMjM2XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3NyIgXAorICAiXDIwNC40NlwzNzdcMVwzNDZcMzQ3XDM0N1wzNzdcMjA2XDM1MFwzNTRcMzQwXDM3N1wxQkhKXDM3N1wyMDQuNDZcMzc3IiBcCisgICJcMVwyNTFcMjUzXDI1NFwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxdHh6XDM3N1wyMTAuNDZcMzc3XDIiIjc9XDc3XDM3NyIgXAorICAiOD5cNzdcMzc3XDIxMC40NlwzNzdcMXR4elwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3N1wyMDYuNDZcMzc3IiBcCisgICJcMVwyNTFcMjUzXDI1NFwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMTcuNDZcMzc3XDFcMzIwXDMyMiIgXAorICAiXDMyMlwzNzdcMjIyXDM1MFwzNTRcMzQwXDM3N1wyXDI3NlwzMDBcMzAxXDM3NzU7PVwzNzdcMjIxLjQ2XDM3N1wxQEYiIFwKKyAgIkdcMzc3XDIzMFwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDMxMiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIzNlwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2XDM0N1wzNDdcMzc3XDIwNlwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxXDI0NlwyNTFcMjUyXDM3N1wyMDQuNDZcMzc3XDFBRkhcMzc3XDIyNVwzNTBcMzU0XDM0MFwzNzdcMlwyMzJcMjM1IiBcCisgICJcMjM2XDM3NzA2OFwzNzdcMjE2LjQ2XDM3N1wyIiIwNjhcMzc3XDIzMlwyMzVcMjM2XDM3N1wyMjVcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVhdXlwzNzdcMjA1LjQ2XDM3N1wxTFFTXDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIxNy40IiBcCisgICI2XDM3N1wxXDMxNlwzMTdcMzIwXDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDJcMzI0XDMyNVwzMjVcMzc3TlNVXDM3NyIgXAorICAiXDIyMC40NlwzNzdcMiIiMDY4XDM3N1wzMjFcMzIyXDMyM1wzNzdcMjI3XDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3IiBcCisgICJcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNCIgXAorICAiLjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDYiIFwKKyAgIlwzNDdcMzQ3XDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwNC40NlwzNzdcMVwyMjZcMjMxXDIzMlwzNzciIFwKKyAgIlwyMjVcMzUwXDM1NFwzNDBcMzc3XDJcMzE3XDMyMFwzMjBcMzc3YGVmXDM3N1wyMTQuNDZcMzc3XDJiZ2hcMzc3XDMxNyIgXAorICAiXDMyMVwzMjFcMzc3XDIyNlwzNTBcMzU0XDM0MFwzNzdcMV9kZVwzNzdcMjA0LjQ2XDM3N1wyOkBCXDM3N1wzMzJcMzMzIiBcCisgICJcMzM0XDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIxNy40NlwzNzdcMVwzMTZcMzE3XDMyMFwzNzdcMjI1IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDJcMjM2XDI0MVwyNDJcMzc3QkdJXDM3N1wyMTQuNDZcMzc3XDMiIjg+XDc3XDM3N35cMjAxIiBcCisgICJcMjAyXDM3N1wzMzVcMzM2XDMzN1wzNzdcMjMwXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNjUiIFwKKyAgIlwyNjdcMjcwXDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDZcMzQ3XDM0N1wzNzciIFwKKyAgIlwyMDdcMzUwXDM1NFwzNDBcMzc3XDFcMjU0XDI1N1wyNTdcMzc3XDIwNC40NlwzNzdcMiIiOD5cNzdcMzc3XDM1MlwzNTQiIFwKKyAgIlwzNTBcMzc3XDIyNlwzNTBcMzU0XDM0MFwzNzdcM1wzMTFcMzEyXDMxM1wzNzdcMjAwXDIwNFwyMDVcMzc3RUpMXDM3NyIgXAorICAiXDIwNi40NlwzNzdcM0VKTFwzNzdcMjAzXDIwN1wyMTBcMzc3XDMxM1wzMTRcMzE1XDM3N1wyMzBcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMV9kZVwzNzdcMjAyLjQ2XDM3N1wzLzU3XDM3N2ZqbFwzNzdcMzQyXDM0M1wzNDNcMzc3XDIyNlwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxU1hZXDM3N1wyMTc8QkNcMzc3XDFcMzA3XDMxMVwzMTFcMzc3XDIyN1wzNTBcMzU0XDM0MFwzNzdcNCIgXAorICAiXDI3NVwyNzdcMzAwXDM3N35cMjAxXDIwMlwzNzdPVFZcMzc3MDY4XDM3N1wyMDQuNDZcMzc3XDQiIjM5O1wzNzdRVlgiIFwKKyAgIlwzNzdcMjAxXDIwNFwyMDZcMzc3XDI3MFwyNzJcMjcyXDM3N1wyMzNcMzUwXDM1NFwzNDBcMzc3XDIwNC40NlwzNzdcMSIgXAorICAiU1hZXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjM0XDM1MFwzNTRcMzQwXDM3N1wyIiBcCisgICJcMzQ1XDM0NlwzNDZcMzc3XDMxN1wzMjFcMzIxXDM3N1wyMDJcMjc1XDI3N1wzMDBcMzc3XDJcMzE3XDMyMVwzMjFcMzc3IiBcCisgICJcMzQ1XDM0NlwzNDZcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcNFwzMDJcMzA0XDMwNVwzNzdcMjU1XDI1N1wyNjBcMzc3IiBcCisgICJcMzAxXDMwMlwzMDNcMzc3XDM0NlwzNDZcMzQ3XDM3N1wzMDRcMzUwXDM1NFwzNDBcMzc3XDRcMzQ2XDM0N1wzNDdcMzc3IiBcCisgICJcMzI3XDMzMFwzMzBcMzc3XDMzNVwzMzZcMzM3XDM3N1wzNDdcMzUwXDM1MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI0NlwzNTBcMzU0XDM0MFwzNzciKQorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvcHNwbGFzaC9wc3BsYXNoX2dpdC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvcHNwbGFzaC9wc3BsYXNoX2dpdC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzNlZjY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS9wc3BsYXNoL3BzcGxhc2hfZ2l0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMiBAQAorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmRfcG9reSA6PSAiJHtUSElTRElSfS9maWxlczoiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvdGlueS1pbml0L2ZpbGVzL2luaXQgYi95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3RpbnktaW5pdC9maWxlcy9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNDBlOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3RpbnktaW5pdC9maWxlcy9pbml0CkBAIC0wLDAgKzEsMjYgQEAKKyMhL2Jpbi9zaAorCisjIE1vdW50IHRoZSBMaW51eCBrZXJuZWwgdmlydHVhbCBmaWxlc3lzdGVtcworbW91bnQgbm9uZSAtdCBwcm9jIC9wcm9jCittb3VudCBub25lIC10IHN5c2ZzIC9zeXMKKworIyBFbnN1cmUgZGV2dG1wZnMgaXMgbW91bnRlZCwgaXQgbXVzdCBiZSBkb25lIG1hbnVhbGx5IHdpdGggaW5pdHJhbWZzCittb3VudCBub25lIC10IGRldnRtcGZzIC9kZXYKKworIyBTZXR1cCBQVFkgaW5mcmFzdHJ1Y3R1cmUKK21rZGlyIC9kZXYvcHRzCittb3VudCBub25lIC10IGRldnB0cyAvZGV2L3B0cworCitpZnVwIGxvCisKKyMgQWxsb3cgZm9yIGRpc3RybyBvciBsb2NhbCBjdXN0b21pemF0aW9ucworaWYgWyAtZiAvZXRjL3JjLmxvY2FsIF0gOyB0aGVuCisJLiAvZXRjL3JjLmxvY2FsCitmaQorCisjIEJlY29tZSBzZXNzaW9uIGxlYWRlciBhbmQgdHJ5IHRvIGZpbmQgYSByZWFsIHR0eSAoZS5nLiB0dHlTMCkKK3doaWxlIHRydWU7IGRvCisJc2V0c2lkIGN0dHloYWNrIHNoCisJZWNobyAiQ29uc29sZSBzaCBleGl0ZWQgd2l0aCAkPywgcmVzcGF3bmluZy4uLiIKKwlzbGVlcCAxCitkb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3RpbnktaW5pdC9maWxlcy9yYy5sb2NhbC5zYW1wbGUgYi95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3RpbnktaW5pdC9maWxlcy9yYy5sb2NhbC5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllMTk4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvdGlueS1pbml0L2ZpbGVzL3JjLmxvY2FsLnNhbXBsZQpAQCAtMCwwICsxLDIzIEBACisjIS9iaW4vc2gKKworIyBTdGFydCBzZXJ2aWNlcyBhbmQgY3VzdG9taXplIHRoZSBib290IHByb2Nlc3MgaGVyZS4KK2VjaG8gIlJ1bm5pbmcgL2V0Yy9yYy5sb2NhbC4uLiIKKworIyBVc2UgaW5pdCBzY3JpcHRzIGluY2x1ZGVkIHdpdGggcGFja2FnZXMgc3VjaCBhcyBkcm9wYmVhcgorIy9ldGMvaW5pdC5kL2Ryb3BiZWFyIHN0YXJ0CisKKyMgU3Bhd24gYSBnZXR0eSBtYW51YWxseQorI3NldHNpZCAvc2Jpbi9nZXR0eSAxMTUyMDAgdHR5UzIKKworIyBQcmludCBhIGJhbm5lcgorI2VjaG8gIllvdSBhcmUgcnVubmluZyBhIHBva3ktdGlueSBpbWFnZSBicm91Z2h0IHRvIHlvdSBieSB0aGUgWW9jdG8gUHJvamVjdC4iCisKKyMgU2V0dXAgYSBkZWJ1Z2dpbmcgZW52aXJvbm1lbnQKKyNta2RpciAvZGVidWdmcworI21vdW50IG5vbmUgLXQgZGVidWdmcyAvZGVidWdmcworCisjIExvYWQgbW9kdWxlcyAobm90ZTogbGludXgteW9jdG8tdGlueSBkb2VzIG5vdCBoYXZlIG1vZHVsZSBzdXBwb3J0IGJ5IGRlZmF1bHQpCisjbW9kcHJvYmUgeW91cmRyaXZlcgorCisjIERPIE5PVCBydW4gYW55IGxvbmcgcnVubmluZyB0YXNrcyBvciBsb29wcyBhcyB0aGVzZSB3aWxsIGRlbGF5CisjIHRoZSAvaW5pdCBzY3JpcHQgYW5kIHRoZSBjb25zb2xlIHNoZWxsLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS90aW55LWluaXQvdGlueS1pbml0LmJiIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS90aW55LWluaXQvdGlueS1pbml0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNGUzNGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3RpbnktaW5pdC90aW55LWluaXQuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJQb2t5LXRpbnkgaW5pdCIKK0RFU0NSSVBUSU9OID0gIkJhc2ljIGluaXQgc3lzdGVtIGZvciBwb2t5LXRpbnkiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitQUiA9ICJyMiIKKworUkRFUEVORFNfJHtQTn0gPSAiYnVzeWJveCIKKworU1JDX1VSSSA9ICJmaWxlOi8vaW5pdCBcCisJICAgZmlsZTovL3JjLmxvY2FsLnNhbXBsZSBcCisJICAiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9fY29uZmlndXJlKCkgeworCToKK30KKworZG9fY29tcGlsZSgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfQorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3JjLmxvY2FsLnNhbXBsZSAke0R9JHtzeXNjb25mZGlyfQorfQorCitGSUxFU18ke1BOfSA9ICIvaW5pdCAke3N5c2NvbmZkaXJ9L3JjLmxvY2FsLnNhbXBsZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9DT1BZSU5HLkdQTHYyIGIveW9jdG8tcG9reS9tZXRhL0NPUFlJTkcuR1BMdjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxMTkwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9DT1BZSU5HLkdQTHYyCkBAIC0wLDAgKzEsMzM5IEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL0NPUFlJTkcuTUlUIGIveW9jdG8tcG9reS9tZXRhL0NPUFlJTkcuTUlUCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gQ09QWUlORy5NSVQKY29weSB0byB5b2N0by1wb2t5L21ldGEvQ09QWUlORy5NSVQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2FsbGFyY2guYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2FsbGFyY2guYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmVhN2MwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYWxsYXJjaC5iYmNsYXNzCkBAIC0wLDAgKzEsNDMgQEAKKyMKKyMgVGhpcyBjbGFzcyBpcyB1c2VkIGZvciBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQgcmVjaXBlcy9kYXRhIGZpbGVzICh1c2FsbHkgc2NyaXB0cykKKyMKKworIyBFeHBhbmQgU1RBR0lOR19ESVJfSE9TVCBzaW5jZSBmb3IgY3Jvc3MtY2FuYWRpYW4vbmF0aXZlL25hdGl2ZXNkaywgdGhpcyB3aWxsCisjIHBvaW50IGVsc2V3aGVyZSBhZnRlciB0aGVzZSBjaGFuZ2VzLgorU1RBR0lOR19ESVJfSE9TVCA6PSAiJHtTVEFHSU5HX0RJUl9IT1NUfSIKKworUEFDS0FHRV9BUkNIID0gImFsbCIKKworcHl0aG9uICgpIHsKKyAgICAjIEFsbG93IHRoaXMgY2xhc3MgdG8gYmUgaW5jbHVkZWQgYnV0IG92ZXJyaWRkZW4gLSBvbmx5IHNldAorICAgICMgdGhlIHZhbHVlcyBpZiB3ZSdyZSBzdGlsbCAiYWxsIiBwYWNrYWdlIGFyY2guCisgICAgaWYgZC5nZXRWYXIoIlBBQ0tBR0VfQVJDSCIsIFRydWUpID09ICJhbGwiOgorICAgICAgICAjIE5vIG5lZWQgZm9yIHZpcnR1YWwvbGliYyBvciBhIGNyb3NzIGNvbXBpbGVyCisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX0RFRkFVTFRfREVQUyIsIjEiKQorCisgICAgICAgICMgU2V0IHRoZXNlIHRvIGEgY29tbW9uIHNldCBvZiB2YWx1ZXMsIHdlIHNob3VsZG4ndCBiZSB1c2luZyB0aGVtIG90aGVyIHRoYXQgZm9yIFdPUktESVIgZGlyZWN0b3J5CisgICAgICAgICMgbmFtaW5nIGFueXdheQorICAgICAgICBkLnNldFZhcigiVEFSR0VUX0FSQ0giLCAiYWxsYXJjaCIpCisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfT1MiLCAibGludXgiKQorICAgICAgICBkLnNldFZhcigiVEFSR0VUX0NDX0FSQ0giLCAibm9uZSIpCisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfTERfQVJDSCIsICJub25lIikKKyAgICAgICAgZC5zZXRWYXIoIlRBUkdFVF9BU19BUkNIIiwgIm5vbmUiKQorICAgICAgICBkLnNldFZhcigiVEFSR0VUX0ZQVSIsICIiKQorICAgICAgICBkLnNldFZhcigiVEFSR0VUX1BSRUZJWCIsICIiKQorICAgICAgICBkLnNldFZhcigiUEFDS0FHRV9FWFRSQV9BUkNIUyIsICIiKQorICAgICAgICBkLnNldFZhcigiU0RLX0FSQ0giLCAibm9uZSIpCisgICAgICAgIGQuc2V0VmFyKCJTREtfQ0NfQVJDSCIsICJub25lIikKKworICAgICAgICAjIEF2b2lkIHRoaXMgYmVpbmcgdW5uZWNlc3NhcmlseSBkaWZmZXJlbnQgZHVlIHRvIG51YW5jZXMgb2YKKyAgICAgICAgIyB0aGUgdGFyZ2V0IG1hY2hpbmUgdGhhdCBhcmVuJ3QgaW1wb3J0YW50IGZvciAiYWxsIiBhcmNoCisgICAgICAgICMgcGFja2FnZXMuCisgICAgICAgIGQuc2V0VmFyKCJMREZMQUdTIiwgIiIpCisKKyAgICAgICAgIyBObyBuZWVkIHRvIGRvIHNoYXJlZCBsaWJyYXJ5IHByb2Nlc3Npbmcgb3IgZGVidWcgc3ltYm9sIGhhbmRsaW5nCisgICAgICAgIGQuc2V0VmFyKCJFWENMVURFX0ZST01fU0hMSUJTIiwgIjEiKQorICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUIiwgIjEiKQorICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9QQUNLQUdFX1NUUklQIiwgIjEiKQorICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygncGFja2FnZWdyb3VwJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKToKKyAgICAgICAgYmIuZXJyb3IoIlBsZWFzZSBlbnN1cmUgcmVjaXBlICVzIHNldHMgUEFDS0FHRV9BUkNIIGJlZm9yZSBpbmhlcml0IHBhY2thZ2Vncm91cCIgJSBkLmdldFZhcigiRklMRSIsIFRydWUpKQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hcmNoaXZlci5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYXJjaGl2ZXIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODlkNzA3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYXJjaGl2ZXIuYmJjbGFzcwpAQCAtMCwwICsxLDM4NSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgVGhpcyBiYmNsYXNzIGlzIHVzZWQgZm9yIGNyZWF0aW5nIGFyY2hpdmUgZm9yOgorIyAxKSBvcmlnaW5hbCAob3IgdW5wYWNrZWQpIHNvdXJjZTogQVJDSElWRVJfTU9ERVtzcmNdID0gIm9yaWdpbmFsIgorIyAyKSBwYXRjaGVkIHNvdXJjZTogQVJDSElWRVJfTU9ERVtzcmNdID0gInBhdGNoZWQiIChkZWZhdWx0KQorIyAzKSBjb25maWd1cmVkIHNvdXJjZTogQVJDSElWRVJfTU9ERVtzcmNdID0gImNvbmZpZ3VyZWQiCisjIDQpIFRoZSBwYXRjaGVzIGJldHdlZW4gZG9fdW5wYWNrIGFuZCBkb19wYXRjaDoKKyMgICAgQVJDSElWRVJfTU9ERVtkaWZmXSA9ICIxIgorIyAgICBBbmQgeW91IGNhbiBzZXQgdGhlIG9uZSB0aGF0IHlvdSdkIGxpa2UgdG8gZXhjbHVkZSBmcm9tIHRoZSBkaWZmOgorIyAgICBBUkNISVZFUl9NT0RFW2RpZmYtZXhjbHVkZV0gPz0gIi5wYyBhdXRvbTR0ZS5jYWNoZSBwYXRjaGVzIgorIyA1KSBUaGUgZW52aXJvbm1lbnQgZGF0YSwgc2ltaWxhciB0byAnYml0YmFrZSAtZSByZWNpcGUnOgorIyAgICBBUkNISVZFUl9NT0RFW2R1bXBkYXRhXSA9ICIxIgorIyA2KSBUaGUgcmVjaXBlICguYmIgYW5kIC5pbmMpOiBBUkNISVZFUl9NT0RFW3JlY2lwZV0gPSAiMSIKKyMgNykgV2hldGhlciBvdXRwdXQgdGhlIC5zcmMucnBtIHBhY2thZ2U6CisjICAgIEFSQ0hJVkVSX01PREVbc3JwbV0gPSAiMSIKKyMgOCkgRmlsdGVyIHRoZSBsaWNlbnNlLCB0aGUgcmVjaXBlIHdob3NlIGxpY2Vuc2UgaW4KKyMgICAgQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFIHdpbGwgYmUgaW5jbHVkZWQsIGFuZCBpbgorIyAgICBDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREUgd2lsbCBiZSBleGNsdWRlZC4KKyMgICAgQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFID0gJ0dQTCogTEdQTConCisjICAgIENPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERSA9ICdDTE9TRUQgUHJvcHJpZXRhcnknCisjIDkpIFRoZSByZWNpcGUgdHlwZSB0aGF0IHdpbGwgYmUgYXJjaGl2ZWQ6CisjICAgIENPUFlMRUZUX1JFQ0lQRV9UWVBFUyA9ICd0YXJnZXQnCisjCisKKyMgRG9uJ3QgZmlsdGVyIHRoZSBsaWNlbnNlIGJ5IGRlZmF1bHQKK0NPUFlMRUZUX0xJQ0VOU0VfSU5DTFVERSA/PSAnJworQ09QWUxFRlRfTElDRU5TRV9FWENMVURFID89ICcnCisjIENyZWF0ZSBhcmNoaXZlIGZvciBhbGwgdGhlIHJlY2lwZSB0eXBlcworQ09QWUxFRlRfUkVDSVBFX1RZUEVTID89ICd0YXJnZXQgbmF0aXZlIG5hdGl2ZXNkayBjcm9zcyBjcm9zc3NkayBjcm9zcy1jYW5hZGlhbicKK2luaGVyaXQgY29weWxlZnRfZmlsdGVyCisKK0FSQ0hJVkVSX01PREVbc3JwbV0gPz0gIjAiCitBUkNISVZFUl9NT0RFW3NyY10gPz0gInBhdGNoZWQiCitBUkNISVZFUl9NT0RFW2RpZmZdID89ICIwIgorQVJDSElWRVJfTU9ERVtkaWZmLWV4Y2x1ZGVdID89ICIucGMgYXV0b200dGUuY2FjaGUgcGF0Y2hlcyIKK0FSQ0hJVkVSX01PREVbZHVtcGRhdGFdID89ICIwIgorQVJDSElWRVJfTU9ERVtyZWNpcGVdID89ICIwIgorCitERVBMT1lfRElSX1NSQyA/PSAiJHtERVBMT1lfRElSfS9zb3VyY2VzIgorQVJDSElWRVJfVE9QRElSID89ICIke1dPUktESVJ9L2RlcGxveS1zb3VyY2VzIgorQVJDSElWRVJfT1VURElSID0gIiR7QVJDSElWRVJfVE9QRElSfS8ke1RBUkdFVF9TWVN9LyR7UEZ9LyIKK0FSQ0hJVkVSX1dPUktESVIgPSAiJHtXT1JLRElSfS9hcmNoaXZlci13b3JrLyIKKworZG9fZHVtcGRhdGFbZGlyc10gPSAiJHtBUkNISVZFUl9PVVRESVJ9IgorZG9fYXJfcmVjaXBlW2RpcnNdID0gIiR7QVJDSElWRVJfT1VURElSfSIKK2RvX2FyX29yaWdpbmFsW2RpcnNdID0gIiR7QVJDSElWRVJfT1VURElSfSAke0FSQ0hJVkVSX1dPUktESVJ9IgorZG9fZGVwbG95X2FyY2hpdmVzW2RpcnNdID0gIiR7V09SS0RJUn0iCitkb19kZXBsb3lfYWxsX2FyY2hpdmVzW2RpcnNdID0gIiR7V09SS0RJUn0iCisKKyMgVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZvciB0aGUgc2hlbGwgc2NyaXB0IHRvIHVzZSBpdAorCisKK3B5dGhvbiAoKSB7CisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgaW5jbHVkZWQsIHJlYXNvbiA9IGNvcHlsZWZ0X3Nob3VsZF9pbmNsdWRlKGQpCisgICAgaWYgbm90IGluY2x1ZGVkOgorICAgICAgICBiYi5kZWJ1ZygxLCAnYXJjaGl2ZXI6ICVzIGlzIGV4Y2x1ZGVkOiAlcycgJSAocG4sIHJlYXNvbikpCisgICAgICAgIHJldHVybgorICAgIGVsc2U6CisgICAgICAgIGJiLmRlYnVnKDEsICdhcmNoaXZlcjogJXMgaXMgaW5jbHVkZWQ6ICVzJyAlIChwbiwgcmVhc29uKSkKKworICAgIGFyX3NyYyA9IGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcmMnLCBUcnVlKQorICAgIGFyX2R1bXBkYXRhID0gZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ2R1bXBkYXRhJywgVHJ1ZSkKKyAgICBhcl9yZWNpcGUgPSBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAncmVjaXBlJywgVHJ1ZSkKKworICAgIGlmIGFyX3NyYyA9PSAib3JpZ2luYWwiOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RlcGxveV9hcmNoaXZlcycsICdkZXBlbmRzJywgJyAlczpkb19hcl9vcmlnaW5hbCcgJSBwbikKKyAgICBlbGlmIGFyX3NyYyA9PSAicGF0Y2hlZCI6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZGVwbG95X2FyY2hpdmVzJywgJ2RlcGVuZHMnLCAnICVzOmRvX2FyX3BhdGNoZWQnICUgcG4pCisgICAgZWxpZiBhcl9zcmMgPT0gImNvbmZpZ3VyZWQiOgorICAgICAgICAjIFdlIGNhbid0IHVzZSAiYWRkdGFzayBkb19hcl9jb25maWd1cmVkIGFmdGVyIGRvX2NvbmZpZ3VyZSIgc2luY2UgaXQKKyAgICAgICAgIyB3aWxsIGNhdXNlIHRoZSBkZXB0YXNrIG9mIGRvX3BvcHVsYXRlX3N5c3Jvb3QgdG8gcnVuIG5vdCBtYXR0ZXIgd2hhdAorICAgICAgICAjIGFyY2hpdmVzIHdlIG5lZWQsIHNvIHdlIGFkZCB0aGUgZGVwZW5kcyBoZXJlLgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2FyX2NvbmZpZ3VyZWQnLCAnZGVwZW5kcycsICcgJXM6ZG9fY29uZmlndXJlJyAlIHBuKQorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RlcGxveV9hcmNoaXZlcycsICdkZXBlbmRzJywgJyAlczpkb19hcl9jb25maWd1cmVkJyAlIHBuKQorICAgIGVsaWYgYXJfc3JjOgorICAgICAgICBiYi5mYXRhbCgiSW52YWxpZCBBUkNISVZFUl9NT0RFW3NyY106ICVzIiAlIGFyX3NyYykKKworICAgIGlmIGFyX2R1bXBkYXRhID09ICIxIjoKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19kZXBsb3lfYXJjaGl2ZXMnLCAnZGVwZW5kcycsICcgJXM6ZG9fZHVtcGRhdGEnICUgcG4pCisKKyAgICBpZiBhcl9yZWNpcGUgPT0gIjEiOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RlcGxveV9hcmNoaXZlcycsICdkZXBlbmRzJywgJyAlczpkb19hcl9yZWNpcGUnICUgcG4pCisKKyAgICAjIE91dHB1dCB0aGUgc3JwbSBwYWNrYWdlCisgICAgYXJfc3JwbSA9IGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcnBtJywgVHJ1ZSkKKyAgICBpZiBhcl9zcnBtID09ICIxIjoKKyAgICAgICAgaWYgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgIT0gJycgYW5kIGQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkgPT0gJ3JwbSc6CisgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RlcGxveV9hcmNoaXZlcycsICdkZXBlbmRzJywgJyAlczpkb19wYWNrYWdlX3dyaXRlX3JwbScgJSBwbikKKyAgICAgICAgICAgIGlmIGFyX2R1bXBkYXRhID09ICIxIjoKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RlcGVuZHMnLCAnICVzOmRvX2R1bXBkYXRhJyAlIHBuKQorICAgICAgICAgICAgaWYgYXJfcmVjaXBlID09ICIxIjoKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RlcGVuZHMnLCAnICVzOmRvX2FyX3JlY2lwZScgJSBwbikKKyAgICAgICAgICAgIGlmIGFyX3NyYyA9PSAib3JpZ2luYWwiOgorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZGVwZW5kcycsICcgJXM6ZG9fYXJfb3JpZ2luYWwnICUgcG4pCisgICAgICAgICAgICBlbGlmIGFyX3NyYyA9PSAicGF0Y2hlZCI6CisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkZXBlbmRzJywgJyAlczpkb19hcl9wYXRjaGVkJyAlIHBuKQorICAgICAgICAgICAgZWxpZiBhcl9zcmMgPT0gImNvbmZpZ3VyZWQiOgorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZGVwZW5kcycsICcgJXM6ZG9fYXJfY29uZmlndXJlZCcgJSBwbikKKworICAgICMgVGhlIGdjYyBzdGFmZiB1c2VzIHNoYXJlZCBzb3VyY2UKKyAgICBmbGFnID0gZC5nZXRWYXJGbGFnKCJkb191bnBhY2siLCAic3RhbXAtYmFzZSIsIFRydWUpCisgICAgaWYgZmxhZzoKKyAgICAgICAgaWYgYXJfc3JjIGluIFsgJ29yaWdpbmFsJywgJ3BhdGNoZWQnIF06CisgICAgICAgICAgICBhcl9vdXRkaXIgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0FSQ0hJVkVSX1RPUERJUicsIFRydWUpLCAnd29yay1zaGFyZWQnKQorICAgICAgICAgICAgZC5zZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIGFyX291dGRpcikKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19hcl9vcmlnaW5hbCcsICdzdGFtcC1iYXNlJywgZmxhZykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19hcl9wYXRjaGVkJywgJ3N0YW1wLWJhc2UnLCBmbGFnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3VucGFja19hbmRfcGF0Y2gnLCAnc3RhbXAtYmFzZScsIGZsYWcpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fYXJfb3JpZ2luYWwnLCAndmFyZGVwc2V4Y2x1ZGUnLCAnUE4gUEYgQVJDSElWRVJfT1VURElSIFdPUktESVInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3VucGFja19hbmRfcGF0Y2gnLCAndmFyZGVwc2V4Y2x1ZGUnLCAnUE4gUEYgQVJDSElWRVJfT1VURElSIFdPUktESVInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2FyX3BhdGNoZWQnLCAndmFyZGVwc2V4Y2x1ZGUnLCAnUE4gUEYgQVJDSElWRVJfT1VURElSIFdPUktESVInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2NyZWF0ZV9kaWZmX2d6JywgJ3ZhcmRlcHNleGNsdWRlJywgJ1BGJykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdjcmVhdGVfdGFyYmFsbCcsICd2YXJkZXBzZXhjbHVkZScsICdQRicpCisKKyAgICAgICAgZmxhZ19jbGVhbiA9IGQuZ2V0VmFyRmxhZygnZG9fdW5wYWNrJywgJ3N0YW1wLWJhc2UtY2xlYW4nLCBUcnVlKQorICAgICAgICBpZiBmbGFnX2NsZWFuOgorICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19hcl9vcmlnaW5hbCcsICdzdGFtcC1iYXNlLWNsZWFuJywgZmxhZ19jbGVhbikKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fYXJfcGF0Y2hlZCcsICdzdGFtcC1iYXNlLWNsZWFuJywgZmxhZ19jbGVhbikKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fdW5wYWNrX2FuZF9wYXRjaCcsICdzdGFtcC1iYXNlLWNsZWFuJywgZmxhZ19jbGVhbikKK30KKworIyBUYWtlIGFsbCB0aGUgc291cmNlcyBmb3IgYSByZWNpcGUgYW5kIHB1dHMgdGhlbSBpbiBXT1JLRElSL2FyY2hpdmVyLXdvcmsvLgorIyBGaWxlcyBpbiBTUkNfVVJJIGFyZSBjb3BpZWQgZGlyZWN0bHksIGFueXRoaW5nIHRoYXQncyBhIGRpcmVjdG9yeQorIyAoZS5nLiBnaXQgcmVwb3NpdG9yaWVzKSBpcyAidW5wYWNrZWQiIGFuZCB0aGVuIHB1dCBpbnRvIGEgdGFyYmFsbC4KK3B5dGhvbiBkb19hcl9vcmlnaW5hbCgpIHsKKworICAgIGltcG9ydCBzaHV0aWwsIHRhcmZpbGUsIHRlbXBmaWxlCisKKyAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnc3JjJywgVHJ1ZSkgIT0gIm9yaWdpbmFsIjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBhcl9vdXRkaXIgPSBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkKKyAgICBiYi5ub3RlKCdBcmNoaXZpbmcgdGhlIG9yaWdpbmFsIHNvdXJjZS4uLicpCisgICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goW10sIGQpCisgICAgZm9yIHVybCBpbiBmZXRjaC51cmxzOgorICAgICAgICBsb2NhbCA9IGZldGNoLmxvY2FscGF0aCh1cmwpLnJzdHJpcCgiLyIpOworICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShsb2NhbCk6CisgICAgICAgICAgICBzaHV0aWwuY29weShsb2NhbCwgYXJfb3V0ZGlyKQorICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIobG9jYWwpOgorICAgICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGxvY2FsKQorCisgICAgICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj1kLmdldFZhcignQVJDSElWRVJfV09SS0RJUicsIFRydWUpKQorICAgICAgICAgICAgZmV0Y2gudW5wYWNrKHRtcGRpciwgKHVybCwpKQorCisgICAgICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgICAgICAjIFdlIGVsaW1pbmF0ZSBhbnkgQVVUT0lOQysgaW4gdGhlIHJldmlzaW9uLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNyY19yZXYgPSBiYi5mZXRjaDIuZ2V0X3NyY3JldihkKS5yZXBsYWNlKCdBVVRPSU5DKycsJycpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc3JjX3JldiA9ICdOT1JFVicKKyAgICAgICAgICAgIHRhcm5hbWUgPSBvcy5wYXRoLmpvaW4oYXJfb3V0ZGlyLCBiYXNlbmFtZSArICcuJyArIHNyY19yZXYgKyAnLnRhci5neicpCisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGFybmFtZSwgJ3c6Z3onKQorICAgICAgICAgICAgdGFyLmFkZCgnLicpCisgICAgICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgIyBFbWl0IHBhdGNoIHNlcmllcyBmaWxlcyBmb3IgJ29yaWdpbmFsJworICAgIGJiLm5vdGUoJ1dyaXRpbmcgcGF0Y2ggc2VyaWVzIGZpbGVzLi4uJykKKyAgICBmb3IgcGF0Y2ggaW4gc3JjX3BhdGNoZXMoZCk6CisgICAgICAgIF8sIF8sIGxvY2FsLCBfLCBfLCBwYXJtID0gYmIuZmV0Y2guZGVjb2RldXJsKHBhdGNoKQorICAgICAgICBwYXRjaGRpciA9IHBhcm0uZ2V0KCdwYXRjaGRpcicpCisgICAgICAgIGlmIHBhdGNoZGlyOgorICAgICAgICAgICAgc2VyaWVzID0gb3MucGF0aC5qb2luKGFyX291dGRpciwgJ3Nlcmllcy5zdWJkaXIuJXMnICUgcGF0Y2hkaXIucmVwbGFjZSgnLycsICdfJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZXJpZXMgPSBvcy5wYXRoLmpvaW4oYXJfb3V0ZGlyLCAnc2VyaWVzJykKKworICAgICAgICB3aXRoIG9wZW4oc2VyaWVzLCAnYScpIGFzIHM6CisgICAgICAgICAgICBzLndyaXRlKCclcyAtcCVzXG4nICUgKG9zLnBhdGguYmFzZW5hbWUobG9jYWwpLCBwYXJtWydzdHJpcGxldmVsJ10pKQorfQorCitweXRob24gZG9fYXJfcGF0Y2hlZCgpIHsKKworICAgIGlmIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcmMnLCBUcnVlKSAhPSAncGF0Y2hlZCc6CisgICAgICAgIHJldHVybgorCisgICAgIyBHZXQgdGhlIEFSQ0hJVkVSX09VVERJUiBiZWZvcmUgd2UgcmVzZXQgdGhlIFdPUktESVIKKyAgICBhcl9vdXRkaXIgPSBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkKKyAgICBiYi5ub3RlKCdBcmNoaXZpbmcgdGhlIHBhdGNoZWQgc291cmNlLi4uJykKKyAgICBkLnNldFZhcignV09SS0RJUicsIGQuZ2V0VmFyKCdBUkNISVZFUl9XT1JLRElSJywgVHJ1ZSkpCisgICAgIyBUaGUgZ2NjIHN0YWZmIHVzZXMgc2hhcmVkIHNvdXJjZQorICAgIGZsYWcgPSBkLmdldFZhckZsYWcoJ2RvX3VucGFjaycsICdzdGFtcC1iYXNlJywgVHJ1ZSkKKyAgICBpZiBmbGFnOgorICAgICAgICBjcmVhdGVfdGFyYmFsbChkLCBkLmdldFZhcignUycsIFRydWUpLCAncGF0Y2hlZCcsIGFyX291dGRpciwgJ2djYycpCisgICAgZWxzZToKKyAgICAgICAgY3JlYXRlX3RhcmJhbGwoZCwgZC5nZXRWYXIoJ1MnLCBUcnVlKSwgJ3BhdGNoZWQnLCBhcl9vdXRkaXIpCit9CisKK3B5dGhvbiBkb19hcl9jb25maWd1cmVkKCkgeworICAgIGltcG9ydCBzaHV0aWwKKworICAgIGFyX291dGRpciA9IGQuZ2V0VmFyKCdBUkNISVZFUl9PVVRESVInLCBUcnVlKQorICAgIGlmIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcmMnLCBUcnVlKSA9PSAnY29uZmlndXJlZCc6CisgICAgICAgIGJiLm5vdGUoJ0FyY2hpdmluZyB0aGUgY29uZmlndXJlZCBzb3VyY2UuLi4nKQorICAgICAgICAjIFRoZSBsaWJ0b29sLW5hdGl2ZSdzIGRvX2NvbmZpZ3VyZSB3aWxsIHJlbW92ZSB0aGUKKyAgICAgICAgIyAke1NUQUdJTkdfREFUQURJUn0vYWNsb2NhbC9saWJ0b29sLm00LCBzbyB3ZSBjYW4ndCByZS1ydW4gdGhlCisgICAgICAgICMgZG9fY29uZmlndXJlLCB3ZSBhcmNoaXZlIHRoZSBhbHJlYWR5IGNvbmZpZ3VyZWQgJHtTfSB0bworICAgICAgICAjIGluc3RlYWQgb2YuCisgICAgICAgIGlmIGQuZ2V0VmFyKCdQTicsIFRydWUpICE9ICdsaWJ0b29sLW5hdGl2ZSc6CisgICAgICAgICAgICAjIENoYW5nZSB0aGUgV09SS0RJUiB0byBtYWtlIGRvX2NvbmZpZ3VyZSBydW4gaW4gYW5vdGhlciBkaXIuCisgICAgICAgICAgICBkLnNldFZhcignV09SS0RJUicsIGQuZ2V0VmFyKCdBUkNISVZFUl9XT1JLRElSJywgVHJ1ZSkpCisgICAgICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwteW9jdG8nLCBkKToKKyAgICAgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX2tlcm5lbF9jb25maWdtZScsIGQpCisgICAgICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjbWFrZScsIGQpOgorICAgICAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fZ2VuZXJhdGVfdG9vbGNoYWluX2ZpbGUnLCBkKQorICAgICAgICAgICAgcHJlZnVuY3MgPSBkLmdldFZhckZsYWcoJ2RvX2NvbmZpZ3VyZScsICdwcmVmdW5jcycsIFRydWUpCisgICAgICAgICAgICBmb3IgZnVuYyBpbiAocHJlZnVuY3Mgb3IgJycpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgZnVuYyAhPSAic3lzcm9vdF9jbGVhbnNzdGF0ZSI6CisgICAgICAgICAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmdW5jLCBkKQorICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19jb25maWd1cmUnLCBkKQorICAgICAgICAgICAgcG9zdGZ1bmNzID0gZC5nZXRWYXJGbGFnKCdkb19jb25maWd1cmUnLCAncG9zdGZ1bmNzJywgVHJ1ZSkKKyAgICAgICAgICAgIGZvciBmdW5jIGluIChwb3N0ZnVuY3Mgb3IgJycpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgZnVuYyAhPSAiZG9fcWFfY29uZmlndXJlIjoKKyAgICAgICAgICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGZ1bmMsIGQpCisgICAgICAgIHNyY2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICAgICAgYnVpbGRkaXIgPSBkLmdldFZhcignQicsIFRydWUpCisgICAgICAgIGlmIHNyY2RpciAhPSBidWlsZGRpcjoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGJ1aWxkZGlyKToKKyAgICAgICAgICAgICAgICBvZS5wYXRoLmNvcHl0cmVlKGJ1aWxkZGlyLCBvcy5wYXRoLmpvaW4oc3JjZGlyLCBcCisgICAgICAgICAgICAgICAgICAgICdidWlsZC4lcy5hcl9jb25maWd1cmVkJyAlIGQuZ2V0VmFyKCdQRicsIFRydWUpKSkKKyAgICAgICAgY3JlYXRlX3RhcmJhbGwoZCwgc3JjZGlyLCAnY29uZmlndXJlZCcsIGFyX291dGRpcikKK30KKworZGVmIGNyZWF0ZV90YXJiYWxsKGQsIHNyY2Rpciwgc3VmZml4LCBhcl9vdXRkaXIsIHBmPU5vbmUpOgorICAgICIiIgorICAgIGNyZWF0ZSB0aGUgdGFyYmFsbCBmcm9tIHNyY2RpcgorICAgICIiIgorICAgIGltcG9ydCB0YXJmaWxlCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoYXJfb3V0ZGlyKQorICAgIGlmIHBmOgorICAgICAgICB0YXJuYW1lID0gb3MucGF0aC5qb2luKGFyX291dGRpciwgJyVzLSVzLnRhci5neicgJSAocGYsIHN1ZmZpeCkpCisgICAgZWxzZToKKyAgICAgICAgdGFybmFtZSA9IG9zLnBhdGguam9pbihhcl9vdXRkaXIsICclcy0lcy50YXIuZ3onICUgXAorICAgICAgICAgICAgKGQuZ2V0VmFyKCdQRicsIFRydWUpLCBzdWZmaXgpKQorCisgICAgc3JjZGlyID0gc3JjZGlyLnJzdHJpcCgnLycpCisgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShzcmNkaXIpCisgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNyY2RpcikKKyAgICBvcy5jaGRpcihkaXJuYW1lKQorICAgIGJiLm5vdGUoJ0NyZWF0aW5nICVzJyAlIHRhcm5hbWUpCisgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRhcm5hbWUsICd3Omd6JykKKyAgICB0YXIuYWRkKGJhc2VuYW1lKQorICAgIHRhci5jbG9zZSgpCisKKyMgY3JlYXRpbmcgLmRpZmYuZ3ogYmV0d2VlbiBzb3VyY2Uub3JpZyBhbmQgc291cmNlCitkZWYgY3JlYXRlX2RpZmZfZ3ooZCwgc3JjX29yaWcsIHNyYywgYXJfb3V0ZGlyKToKKworICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzcmMpIG9yIG5vdCBvcy5wYXRoLmlzZGlyKHNyY19vcmlnKToKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIFRoZSBkaWZmIC0tZXhjbHVkZSBjYW4ndCBleGNsdWRlIHRoZSBmaWxlIHdpdGggcGF0aCwgc28gd2UgY29weQorICAgICMgdGhlIHBhdGNoZWQgc291cmNlLCBhbmQgcmVtb3ZlIHRoZSBmaWxlcyB0aGF0IHdlJ2QgbGlrZSB0bworICAgICMgZXhjbHVkZS4KKyAgICBzcmNfcGF0Y2hlZCA9IHNyYyArICcucGF0Y2hlZCcKKyAgICBvZS5wYXRoLmNvcHloYXJkbGlua3RyZWUoc3JjLCBzcmNfcGF0Y2hlZCkKKyAgICBmb3IgaSBpbiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnZGlmZi1leGNsdWRlJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzcmNfb3JpZywgaSksIHJlY3Vyc2U9VHJ1ZSkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzcmNfcGF0Y2hlZCwgaSksIHJlY3Vyc2U9VHJ1ZSkKKworICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUoc3JjKQorICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzcmMpCisgICAgb3MuY2hkaXIoZGlybmFtZSkKKyAgICBvdXRfZmlsZSA9IG9zLnBhdGguam9pbihhcl9vdXRkaXIsICclcy1kaWZmLmd6JyAlIGQuZ2V0VmFyKCdQRicsIFRydWUpKQorICAgIGRpZmZfY21kID0gJ2RpZmYgLU5hdXIgJXMub3JpZyAlcy5wYXRjaGVkIHwgZ3ppcCAtYyA+ICVzJyAlIChiYXNlbmFtZSwgYmFzZW5hbWUsIG91dF9maWxlKQorICAgIHN1YnByb2Nlc3MuY2FsbChkaWZmX2NtZCwgc2hlbGw9VHJ1ZSkKKyAgICBiYi51dGlscy5yZW1vdmUoc3JjX3BhdGNoZWQsIHJlY3Vyc2U9VHJ1ZSkKKworIyBSdW4gZG9fdW5wYWNrIGFuZCBkb19wYXRjaAorcHl0aG9uIGRvX3VucGFja19hbmRfcGF0Y2goKSB7CisgICAgaWYgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NyYycsIFRydWUpIG5vdCBpbiBcCisgICAgICAgICAgICBbICdwYXRjaGVkJywgJ2NvbmZpZ3VyZWQnXSBhbmQgXAorICAgICAgICAgICAgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ2RpZmYnLCBUcnVlKSAhPSAnMSc6CisgICAgICAgIHJldHVybgorCisgICAgYXJfb3V0ZGlyID0gZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpCisKKyAgICAjIENoYW5nZSB0aGUgV09SS0RJUiB0byBtYWtlIGRvX3VucGFjayBkb19wYXRjaCBydW4gaW4gYW5vdGhlciBkaXIuCisgICAgZC5zZXRWYXIoJ1dPUktESVInLCBkLmdldFZhcignQVJDSElWRVJfV09SS0RJUicsIFRydWUpKQorCisgICAgIyBUaGUgY2hhbmdlZCAnV09SS0RJUicgYWxzbyBjYXN1ZWQgJ0InIGNoYW5nZWQsIGNyZWF0ZSBkaXIgJ0InIGZvciB0aGUKKyAgICAjIHBvc3NpYmx5IHJlcXVpcmluZyBvZiB0aGUgZm9sbG93aW5nIHRhc2tzIChzdWNoIGFzIHNvbWUgcmVjaXBlcydzCisgICAgIyBkb19wYXRjaCByZXF1aXJlZCAnQicgZXhpc3RlZCkuCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGQuZ2V0VmFyKCdCJywgVHJ1ZSkpCisKKyAgICAjIFRoZSBrZXJuZWwgc291cmNlIGlzIHJlYWR5IGFmdGVyIGRvX3ZhbGlkYXRlX2JyYW5jaGVzCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsLXlvY3RvJywgZCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fdW5wYWNrJywgZCkKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19rZXJuZWxfY2hlY2tvdXQnLCBkKQorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX3ZhbGlkYXRlX2JyYW5jaGVzJywgZCkKKyAgICBlbHNlOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX3VucGFjaycsIGQpCisKKyAgICAjIFNhdmUgdGhlIG9yaWdpbmFsIHNvdXJjZSBmb3IgY3JlYXRpbmcgdGhlIHBhdGNoZXMKKyAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnZGlmZicsIFRydWUpID09ICcxJzoKKyAgICAgICAgc3JjID0gZC5nZXRWYXIoJ1MnLCBUcnVlKS5yc3RyaXAoJy8nKQorICAgICAgICBzcmNfb3JpZyA9ICclcy5vcmlnJyAlIHNyYworICAgICAgICBvZS5wYXRoLmNvcHl0cmVlKHNyYywgc3JjX29yaWcpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19wYXRjaCcsIGQpCisgICAgIyBDcmVhdGUgdGhlIHBhdGNoZXMKKyAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnZGlmZicsIFRydWUpID09ICcxJzoKKyAgICAgICAgYmIubm90ZSgnQ3JlYXRpbmcgZGlmZiBnei4uLicpCisgICAgICAgIGNyZWF0ZV9kaWZmX2d6KGQsIHNyY19vcmlnLCBzcmMsIGFyX291dGRpcikKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNyY19vcmlnLCByZWN1cnNlPVRydWUpCit9CisKK3B5dGhvbiBkb19hcl9yZWNpcGUgKCkgeworICAgICIiIgorICAgIGFyY2hpdmUgdGhlIHJlY2lwZSwgaW5jbHVkaW5nIC5iYiBhbmQgLmluYy4KKyAgICAiIiIKKyAgICBpbXBvcnQgcmUKKyAgICBpbXBvcnQgc2h1dGlsCisKKyAgICByZXF1aXJlX3JlID0gcmUuY29tcGlsZSggciJyZXF1aXJlXHMrKC4rKSIgKQorICAgIGluY2x1ZGVfcmUgPSByZS5jb21waWxlKCByImluY2x1ZGVccysoLispIiApCisgICAgYmJmaWxlID0gZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQorICAgIG91dGRpciA9IG9zLnBhdGguam9pbihkLmdldFZhcignV09SS0RJUicsIFRydWUpLCBcCisgICAgICAgICAgICAnJXMtcmVjaXBlJyAlIGQuZ2V0VmFyKCdQRicsIFRydWUpKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihvdXRkaXIpCisgICAgc2h1dGlsLmNvcHkoYmJmaWxlLCBvdXRkaXIpCisKKyAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKGJiZmlsZSkKKyAgICBiYnBhdGggPSAnJXM6JXMnICUgKGRpcm5hbWUsIGQuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKSkKKyAgICBmID0gb3BlbihiYmZpbGUsICdyJykKKyAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICBpbmNmaWxlID0gTm9uZQorICAgICAgICBpZiByZXF1aXJlX3JlLm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgaW5jZmlsZSA9IHJlcXVpcmVfcmUubWF0Y2gobGluZSkuZ3JvdXAoMSkKKyAgICAgICAgZWxpZiBpbmNsdWRlX3JlLm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgaW5jZmlsZSA9IGluY2x1ZGVfcmUubWF0Y2gobGluZSkuZ3JvdXAoMSkKKyAgICAgICAgaWYgaW5jZmlsZToKKyAgICAgICAgICAgIGluY2ZpbGUgPSBiYi5kYXRhLmV4cGFuZChpbmNmaWxlLCBkKQorICAgICAgICAgICAgaW5jZmlsZSA9IGJiLnV0aWxzLndoaWNoKGJicGF0aCwgaW5jZmlsZSkKKyAgICAgICAgICAgIGlmIGluY2ZpbGU6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkoaW5jZmlsZSwgb3V0ZGlyKQorCisgICAgY3JlYXRlX3RhcmJhbGwoZCwgb3V0ZGlyLCAncmVjaXBlJywgZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpKQorICAgIGJiLnV0aWxzLnJlbW92ZShvdXRkaXIsIHJlY3Vyc2U9VHJ1ZSkKK30KKworcHl0aG9uIGRvX2R1bXBkYXRhICgpIHsKKyAgICAiIiIKKyAgICBkdW1wIGVudmlyb25tZW50IGRhdGEgdG8gJHtQRn0tc2hvd2RhdGEuZHVtcAorICAgICIiIgorCisgICAgZHVtcGZpbGUgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpLCBcCisgICAgICAgICclcy1zaG93ZGF0YS5kdW1wJyAlIGQuZ2V0VmFyKCdQRicsIFRydWUpKQorICAgIGJiLm5vdGUoJ0R1bXBpbmcgbWV0YWRhdGEgaW50byAlcycgJSBkdW1wZmlsZSkKKyAgICBmID0gb3BlbihkdW1wZmlsZSwgJ3cnKQorICAgICMgZW1pdCB2YXJpYWJsZXMgYW5kIHNoZWxsIGZ1bmN0aW9ucworICAgIGJiLmRhdGEuZW1pdF9lbnYoZiwgZCwgVHJ1ZSkKKyAgICAjIGVtaXQgdGhlIG1ldGFkYXRhIHdoaWNoIGlzbid0IHZhbGlkIHNoZWxsCisgICAgZm9yIGUgaW4gZC5rZXlzKCk6CisgICAgICAgIGlmIGJiLmRhdGEuZ2V0VmFyRmxhZyhlLCAncHl0aG9uJywgZCk6CisgICAgICAgICAgICBmLndyaXRlKCJcbnB5dGhvbiAlcyAoKSB7XG4lc31cbiIgJSAoZSwgYmIuZGF0YS5nZXRWYXIoZSwgZCwgVHJ1ZSkpKQorICAgIGYuY2xvc2UoKQorfQorCitTU1RBVEVUQVNLUyArPSAiZG9fZGVwbG95X2FyY2hpdmVzIgorZG9fZGVwbG95X2FyY2hpdmVzICgpIHsKKyAgICBlY2hvICJEZXBsb3lpbmcgc291cmNlIGFyY2hpdmUgZmlsZXMgLi4uIgorfQorcHl0aG9uIGRvX2RlcGxveV9hcmNoaXZlc19zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9Citkb19kZXBsb3lfYXJjaGl2ZXNbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtBUkNISVZFUl9UT1BESVJ9IgorZG9fZGVwbG95X2FyY2hpdmVzW3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke0RFUExPWV9ESVJfU1JDfSIKKworYWRkdGFzayBkb19hcl9vcmlnaW5hbCBhZnRlciBkb191bnBhY2sKK2FkZHRhc2sgZG9fdW5wYWNrX2FuZF9wYXRjaCBhZnRlciBkb19wYXRjaAorYWRkdGFzayBkb19hcl9wYXRjaGVkIGFmdGVyIGRvX3VucGFja19hbmRfcGF0Y2gKK2FkZHRhc2sgZG9fYXJfY29uZmlndXJlZCBhZnRlciBkb191bnBhY2tfYW5kX3BhdGNoCithZGR0YXNrIGRvX2R1bXBkYXRhCithZGR0YXNrIGRvX2FyX3JlY2lwZQorYWRkdGFzayBkb19kZXBsb3lfYXJjaGl2ZXMgYmVmb3JlIGRvX2J1aWxkCisKK2FkZHRhc2sgZG9fZGVwbG95X2FsbF9hcmNoaXZlcyBhZnRlciBkb19kZXBsb3lfYXJjaGl2ZXMKK2RvX2RlcGxveV9hbGxfYXJjaGl2ZXNbcmVjcmRlcHRhc2tdID0gImRvX2RlcGxveV9hcmNoaXZlcyIKK2RvX2RlcGxveV9hbGxfYXJjaGl2ZXNbcmVjaWRlcHRhc2tdID0gImRvXyR7QkJfREVGQVVMVF9UQVNLfSIKK2RvX2RlcGxveV9hbGxfYXJjaGl2ZXMoKSB7CisgICAgICAgIDoKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2F1dG90b29scy1icm9rZW5zZXAuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2F1dG90b29scy1icm9rZW5zZXAuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWNmOTdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYXV0b3Rvb2xzLWJyb2tlbnNlcC5iYmNsYXNzCkBAIC0wLDAgKzEsNSBAQAorIyBBdXRvdG9vbHMgY2xhc3MgZm9yIHJlY2lwZXMgd2hlcmUgc2VwYXJhdGUgYnVpbGQgZGlyIGRvZXNuJ3Qgd29yaworIyBJZGVhbGx5IHdlIHNob3VsZCBmaXggc29mdHdhcmUgc28gaXQgZG9lcyB3b3JrLiBTdGFuZGFyZCBhdXRvdG9vbHMgc3VwcG9ydHMKKyMgdGhpcy4KK2luaGVyaXQgYXV0b3Rvb2xzCitCID0gIiR7U30iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hdXRvdG9vbHMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2F1dG90b29scy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljY2Q3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hdXRvdG9vbHMuYmJjbGFzcwpAQCAtMCwwICsxLDMxMiBAQAorZGVmIGF1dG90b29sc19kZXBfcHJlcGVuZChkKToKKyAgICBpZiBkLmdldFZhcignSU5ISUJJVF9BVVRPVE9PTFNfREVQUycsIFRydWUpOgorICAgICAgICByZXR1cm4gJycKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBkZXBzID0gJycKKworICAgIGlmIHBuIGluIFsnYXV0b2NvbmYtbmF0aXZlJywgJ2F1dG9tYWtlLW5hdGl2ZScsICdoZWxwMm1hbi1uYXRpdmUnXToKKyAgICAgICAgcmV0dXJuIGRlcHMKKyAgICBkZXBzICs9ICdhdXRvY29uZi1uYXRpdmUgYXV0b21ha2UtbmF0aXZlICcKKworICAgIGlmIG5vdCBwbiBpbiBbJ2xpYnRvb2wnLCAnbGlidG9vbC1uYXRpdmUnXSBhbmQgbm90IHBuLmVuZHN3aXRoKCJsaWJ0b29sLWNyb3NzIik6CisgICAgICAgIGRlcHMgKz0gJ2xpYnRvb2wtbmF0aXZlICcKKyAgICAgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgZC5nZXRWYXIoJ0lOSElCSVRfREVGQVVMVF9ERVBTJywgVHJ1ZSk6CisgICAgICAgICAgICBkZXBzICs9ICdsaWJ0b29sLWNyb3NzICcKKworICAgIHJldHVybiBkZXBzICsgJ2dudS1jb25maWctbmF0aXZlICcKKworRVhUUkFfT0VNQUtFID0gIiIKKworREVQRU5EU19wcmVwZW5kID0gIiR7QGF1dG90b29sc19kZXBfcHJlcGVuZChkKX0gIgorCitpbmhlcml0IHNpdGVpbmZvCisKKyMgU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2Ygc2hlbGwgc2NyaXB0cyB3aXRoIHZhcmlhYmxlcyBkZWZpbmVkIHRvIHN1cHBseSB0ZXN0CisjIHJlc3VsdHMgZm9yIGF1dG9jb25mIHRlc3RzIHdlIGNhbm5vdCBydW4gYXQgYnVpbGQgdGltZS4KK2V4cG9ydCBDT05GSUdfU0lURSA9ICIke0BzaXRlaW5mb19nZXRfZmlsZXMoZCwgRmFsc2UpfSIKKworYWNwYXRocyA9ICJkZWZhdWx0IgorRVhUUkFfQVVUT1JFQ09ORiA9ICItLWV4Y2x1ZGU9YXV0b3BvaW50IgorCitleHBvcnQgbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgPSAiJHtsaWJkaXJ9ICR7YmFzZV9saWJkaXJ9IgorCisjIFdoZW4gYnVpbGRpbmcgdG9vbHMgZm9yIHVzZSBhdCBidWlsZC10aW1lIGl0J3MgcmVjb21tZW5kZWQgZm9yIHRoZSBidWlsZAorIyBzeXN0ZW0gdG8gdXNlIHRoZXNlIHZhcmlhYmxlcyB3aGVuIGNyb3NzLWNvbXBpbGluZy4KKyMgKGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vYXV0b2Jvb2svYXV0b2Jvb2svYXV0b2Jvb2tfMjcwLmh0bWwpCitleHBvcnQgQ1BQX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NQUH0iCitleHBvcnQgQ1BQRkxBR1NfRk9SX0JVSUxEID0gIiR7QlVJTERfQ1BQRkxBR1N9IgorCitleHBvcnQgQ0NfRk9SX0JVSUxEID0gIiR7QlVJTERfQ0N9IgorZXhwb3J0IENGTEFHU19GT1JfQlVJTEQgPSAiJHtCVUlMRF9DRkxBR1N9IgorCitleHBvcnQgQ1hYX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NYWH0iCitleHBvcnQgQ1hYRkxBR1NfRk9SX0JVSUxEPSIke0JVSUxEX0NYWEZMQUdTfSIKKworZXhwb3J0IExEX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0xEfSIKK2V4cG9ydCBMREZMQUdTX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0xERkxBR1N9IgorCitkZWYgYXBwZW5kX2xpYnRvb2xfc3lzcm9vdChkKToKKyAgICAjIE9ubHkgc3VwcGx5IGxpYnRvb2wgc3lzcm9vdCBvcHRpb24gZm9yIG5vbi1uYXRpdmUgcGFja2FnZXMKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCk6CisgICAgICAgIHJldHVybiAnLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9JworICAgIHJldHVybiAiIgorCitDT05GSUdVUkVPUFRTID0gIiAtLWJ1aWxkPSR7QlVJTERfU1lTfSBcCisJCSAgLS1ob3N0PSR7SE9TVF9TWVN9IFwKKwkJICAtLXRhcmdldD0ke1RBUkdFVF9TWVN9IFwKKwkJICAtLXByZWZpeD0ke3ByZWZpeH0gXAorCQkgIC0tZXhlY19wcmVmaXg9JHtleGVjX3ByZWZpeH0gXAorCQkgIC0tYmluZGlyPSR7YmluZGlyfSBcCisJCSAgLS1zYmluZGlyPSR7c2JpbmRpcn0gXAorCQkgIC0tbGliZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9IFwKKwkJICAtLWRhdGFkaXI9JHtkYXRhZGlyfSBcCisJCSAgLS1zeXNjb25mZGlyPSR7c3lzY29uZmRpcn0gXAorCQkgIC0tc2hhcmVkc3RhdGVkaXI9JHtzaGFyZWRzdGF0ZWRpcn0gXAorCQkgIC0tbG9jYWxzdGF0ZWRpcj0ke2xvY2Fsc3RhdGVkaXJ9IFwKKwkJICAtLWxpYmRpcj0ke2xpYmRpcn0gXAorCQkgIC0taW5jbHVkZWRpcj0ke2luY2x1ZGVkaXJ9IFwKKwkJICAtLW9sZGluY2x1ZGVkaXI9JHtvbGRpbmNsdWRlZGlyfSBcCisJCSAgLS1pbmZvZGlyPSR7aW5mb2Rpcn0gXAorCQkgIC0tbWFuZGlyPSR7bWFuZGlyfSBcCisJCSAgLS1kaXNhYmxlLXNpbGVudC1ydWxlcyBcCisJCSAgJHtDT05GSUdVUkVPUFRfREVQVFJBQ0t9IFwKKwkJICAke0BhcHBlbmRfbGlidG9vbF9zeXNyb290KGQpfSIKK0NPTkZJR1VSRU9QVF9ERVBUUkFDSyA/PSAiLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmciCisKKworb2VfcnVuY29uZiAoKSB7CisJY2Znc2NyaXB0PSIke1N9L2NvbmZpZ3VyZSIKKwlpZiBbIC14ICIkY2Znc2NyaXB0IiBdIDsgdGhlbgorCQliYm5vdGUgIlJ1bm5pbmcgJGNmZ3NjcmlwdCAke0NPTkZJR1VSRU9QVFN9ICR7RVhUUkFfT0VDT05GfSAkQCIKKwkJc2V0ICtlCisJCSR7Q0FDSEVEX0NPTkZJR1VSRVZBUlN9ICRjZmdzY3JpcHQgJHtDT05GSUdVUkVPUFRTfSAke0VYVFJBX09FQ09ORn0gIiRAIgorCQlpZiBbICIkPyIgIT0gIjAiIF07IHRoZW4KKwkJCWVjaG8gIkNvbmZpZ3VyZSBmYWlsZWQuIFRoZSBjb250ZW50cyBvZiBhbGwgY29uZmlnLmxvZyBmaWxlcyBmb2xsb3dzIHRvIGFpZCBkZWJ1Z2dpbmciCisJCQlmaW5kICR7U30gLWlnbm9yZV9yZWFkZGlyX3JhY2UgLW5hbWUgY29uZmlnLmxvZyAtcHJpbnQgLWV4ZWMgY2F0IHt9IFw7CisJCQlkaWUgIm9lX3J1bmNvbmYgZmFpbGVkIgorCQlmaQorCQlzZXQgLWUKKwllbHNlCisJCWJiZmF0YWwgIm5vIGNvbmZpZ3VyZSBzY3JpcHQgZm91bmQgYXQgJGNmZ3NjcmlwdCIKKwlmaQorfQorCitBVVRPVE9PTFNfQVVYRElSID89ICIke1N9IgorCitDT05GSUdVUkVTVEFNUEZJTEUgPSAiJHtXT1JLRElSfS9jb25maWd1cmUuc3N0YXRlIgorCithdXRvdG9vbHNfcHJlY29uZmlndXJlKCkgeworCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgLWEgLWUgIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQlpZiBbICJgY2F0ICR7Q09ORklHVVJFU1RBTVBGSUxFfWAiICE9ICIke0JCX1RBU0tIQVNIfSIgXTsgdGhlbgorCQkJaWYgWyAiJHtTfSIgIT0gIiR7Qn0iIF07IHRoZW4KKwkJCQllY2hvICJQcmV2aW91c2x5IGNvbmZpZ3VyZWQgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IGRldGVjdGVkLCBjbGVhbmluZyAke0J9IgorCQkJCXJtIC1yZiAke0J9CisJCQkJbWtkaXIgJHtCfQorCQkJZWxzZQorCQkJCSMgQXQgbGVhc3QgcmVtb3ZlIHRoZSAubGEgZmlsZXMgc2luY2UgYXV0b21ha2Ugd29uJ3QgYXV0b21hdGljYWxseQorCQkJCSMgcmVnZW5lcmF0ZSB0aGVtIGV2ZW4gaWYgQ0ZMQUdTL0xERkxBR1MgYXJlIGRpZmZlcmVudAorCQkJCWNkICR7U30KKwkJCQlpZiBbICIke0NMRUFOQlJPS0VOfSIgIT0gIjEiIC1hIFwoIC1lIE1ha2VmaWxlIC1vIC1lIG1ha2VmaWxlIC1vIC1lIEdOVW1ha2VmaWxlIFwpIF07IHRoZW4KKwkJCQkJZWNobyAiUnVubmluZyBcIiR7TUFLRX0gY2xlYW5cIiBpbiAke1N9IgorCQkJCQkke01BS0V9IGNsZWFuCisJCQkJZmkKKwkJCQlmaW5kICR7U30gLWlnbm9yZV9yZWFkZGlyX3JhY2UgLW5hbWUgXCoubGEgLWRlbGV0ZQorCQkJZmkKKwkJZmkKKwlmaQorfQorCithdXRvdG9vbHNfcG9zdGNvbmZpZ3VyZSgpeworCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQllY2hvICR7QkJfVEFTS0hBU0h9ID4gJHtDT05GSUdVUkVTVEFNUEZJTEV9CisJZmkKK30KKworRVhUUkFDT05GRlVOQ1MgPz89ICIiCisKK2RvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gImF1dG90b29sc19wcmVjb25maWd1cmUgYXV0b3Rvb2xzX2NvcHlfYWNsb2NhbHMgJHtFWFRSQUNPTkZGVU5DU30iCitkb19jb25maWd1cmVbcG9zdGZ1bmNzXSArPSAiYXV0b3Rvb2xzX3Bvc3Rjb25maWd1cmUiCisKK0FDTE9DQUxESVIgPSAiJHtCfS9hY2xvY2FsLWNvcHkiCisKK3B5dGhvbiBhdXRvdG9vbHNfY29weV9hY2xvY2FscyAoKSB7CisgICAgcyA9IGQuZ2V0VmFyKCJTIiwgVHJ1ZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocyArICIvY29uZmlndXJlLmluIikgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhzICsgIi9jb25maWd1cmUuYWMiKToKKyAgICAgICAgaWYgbm90IGQuZ2V0VmFyKCJBVVRPVE9PTFNfQ09QWUFDTE9DQUwiLCBGYWxzZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgIHRhc2tkZXBkYXRhID0gZC5nZXRWYXIoIkJCX1RBU0tERVBEQVRBIiwgRmFsc2UpCisgICAgI2JiLndhcm4oc3RyKHRhc2tkZXBkYXRhKSkKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgYWNsb2NhbGRpciA9IGQuZ2V0VmFyKCJBQ0xPQ0FMRElSIiwgVHJ1ZSkKKyAgICBvZS5wYXRoLnJlbW92ZShhY2xvY2FsZGlyKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihhY2xvY2FsZGlyKQorICAgIHN0YXJ0ID0gTm9uZQorICAgIGNvbmZpZ3VyZWRlcHMgPSBbXQorCisgICAgZm9yIGRlcCBpbiB0YXNrZGVwZGF0YToKKyAgICAgICAgZGF0YSA9IHRhc2tkZXBkYXRhW2RlcF0KKyAgICAgICAgaWYgZGF0YVsxXSA9PSAiZG9fY29uZmlndXJlIiBhbmQgZGF0YVswXSA9PSBwbjoKKyAgICAgICAgICAgIHN0YXJ0ID0gZGVwCisgICAgICAgICAgICBicmVhaworICAgIGlmIHN0YXJ0IGlzIE5vbmU6CisgICAgICAgIGJiLmZhdGFsKCJDb3VsZG4ndCBmaW5kIG91cnNlbGYgaW4gQkJfVEFTS0RFUERBVEE/IikKKworICAgICMgV2UgbmVlZCB0byBmaW5kIGNvbmZpZ3VyZSB0YXNrcyB3aGljaCBhcmUgZWl0aGVyIGZyb20gPHRhcmdldD4gLT4gPHRhcmdldD4KKyAgICAjIG9yIDxuYXRpdmU+IC0+IDxuYXRpdmU+IGJ1dCBub3QgPHRhcmdldD4gLT4gPG5hdGl2ZT4gdW5sZXNzIHRoZXkncmUgZGlyZWN0CisgICAgIyBkZXBlbmRlbmNpZXMuIFRoaXMgbWlycm9ycyB3aGF0IHdvdWxkIGdldCByZXN0b3JlZCBmcm9tIHNzdGF0ZS4KKyAgICBkb25lID0gW2RlcF0KKyAgICBuZXh0ID0gW2RlcF0KKyAgICB3aGlsZSBuZXh0OgorICAgICAgICBuZXcgPSBbXQorICAgICAgICBmb3IgZGVwIGluIG5leHQ6CisgICAgICAgICAgICBkYXRhID0gdGFza2RlcGRhdGFbZGVwXQorICAgICAgICAgICAgZm9yIGRhdGFkZXAgaW4gZGF0YVszXToKKyAgICAgICAgICAgICAgICBpZiBkYXRhZGVwIGluIGRvbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoZGF0YWRlcCkKKyAgICAgICAgICAgICAgICBpZiAobm90IGRhdGFbMF0uZW5kc3dpdGgoIi1uYXRpdmUiKSkgYW5kIHRhc2tkZXBkYXRhW2RhdGFkZXBdWzBdLmVuZHN3aXRoKCItbmF0aXZlIikgYW5kIGRlcCAhPSBzdGFydDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBuZXcuYXBwZW5kKGRhdGFkZXApCisgICAgICAgICAgICAgICAgaWYgdGFza2RlcGRhdGFbZGF0YWRlcF1bMV0gPT0gImRvX2NvbmZpZ3VyZSI6CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWRlcHMuYXBwZW5kKHRhc2tkZXBkYXRhW2RhdGFkZXBdWzBdKQorICAgICAgICBuZXh0ID0gbmV3CisKKyAgICAjY29uZmlndXJlZGVwczIgPSBbXQorICAgICNmb3IgZGVwIGluIHRhc2tkZXBkYXRhOgorICAgICMgICAgZGF0YSA9IHRhc2tkZXBkYXRhW2RlcF0KKyAgICAjICAgIGlmIGRhdGFbMV0gPT0gImRvX2NvbmZpZ3VyZSIgYW5kIGRhdGFbMF0gIT0gcG46CisgICAgIyAgICAgICAgY29uZmlndXJlZGVwczIuYXBwZW5kKGRhdGFbMF0pCisgICAgI2NvbmZpZ3VyZWRlcHMuc29ydCgpCisgICAgI2NvbmZpZ3VyZWRlcHMyLnNvcnQoKQorICAgICNiYi53YXJuKHN0cihjb25maWd1cmVkZXBzKSkKKyAgICAjYmIud2FybihzdHIoY29uZmlndXJlZGVwczIpKQorCisgICAgY3AgPSBbXQorICAgIHNpdGVjb25mID0gW10gICAgCisgICAgZm9yIGMgaW4gY29uZmlndXJlZGVwczoKKyAgICAgICAgaWYgYy5lbmRzd2l0aCgiLW5hdGl2ZSIpOgorICAgICAgICAgICAgbWFuaWZlc3QgPSBkLmV4cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RTfS9tYW5pZmVzdC0ke0JVSUxEX0FSQ0h9LSVzLnBvcHVsYXRlX3N5c3Jvb3QiICUgYykKKyAgICAgICAgZWxpZiBjLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKToKKyAgICAgICAgICAgIG1hbmlmZXN0ID0gZC5leHBhbmQoIiR7U1NUQVRFX01BTklGRVNUU30vbWFuaWZlc3QtJHtTREtfQVJDSH1fJHtTREtfT1N9LSVzLnBvcHVsYXRlX3N5c3Jvb3QiICUgYykKKyAgICAgICAgZWxpZiAiLWNyb3NzLSIgaW4gYyBvciAiLWNyb3Nzc2RrIiBpbiBjOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hbmlmZXN0ID0gZC5leHBhbmQoIiR7U1NUQVRFX01BTklGRVNUU30vbWFuaWZlc3QtJHtNQUNISU5FfS0lcy5wb3B1bGF0ZV9zeXNyb290IiAlIGMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBvcGVuKG1hbmlmZXN0LCAiciIpCisgICAgICAgICAgICBmb3IgbCBpbiBmOgorICAgICAgICAgICAgICAgIGlmICIvYWNsb2NhbC8iIGluIGwgYW5kIGwuc3RyaXAoKS5lbmRzd2l0aCgiLm00Iik6CisgICAgICAgICAgICAgICAgICAgIGNwLmFwcGVuZChsLnN0cmlwKCkpCisgICAgICAgICAgICAgICAgZWxpZiAiY29uZmlnX3NpdGUuZC8iIGluIGw6CisgICAgICAgICAgICAgICAgICAgIGNwLmFwcGVuZChsLnN0cmlwKCkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGJiLndhcm4oIiVzIG5vdCBmb3VuZCIgJSBtYW5pZmVzdCkKKworICAgIGZvciBjIGluIGNwOgorICAgICAgICB0ID0gb3MucGF0aC5qb2luKGFjbG9jYWxkaXIsIG9zLnBhdGguYmFzZW5hbWUoYykpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0KToKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoYywgdCkKKyAgICAgICAgICAgIAorICAgIGQuc2V0VmFyKCJDT05GSUdfU0lURSIsIHNpdGVpbmZvX2dldF9maWxlcyhkLCBGYWxzZSkpCit9CithdXRvdG9vbHNfY29weV9hY2xvY2Fsc1t2YXJkZXBzZXhjbHVkZV0gKz0gIk1BQ0hJTkUgU0RLX0FSQ0ggQlVJTERfQVJDSCBTREtfT1MgQkJfVEFTS0RFUERBVEEiCisKK2F1dG90b29sc19kb19jb25maWd1cmUoKSB7CisJIyBXQVJOSU5HOiBncm9zcyBoYWNrIGZvbGxvd3M6CisJIyBBbiBhdXRvdG9vbHMgYnVpbHQgcGFja2FnZSBnZW5lcmFsbHkgbmVlZHMgdGhlc2Ugc2NyaXB0cywgaG93ZXZlciBvbmx5CisJIyBhdXRvbWFrZSBvciBsaWJ0b29saXplIGFjdHVhbGx5IGluc3RhbGwgdGhlIGN1cnJlbnQgdmVyc2lvbnMgb2YgdGhlbS4KKwkjIFRoaXMgaXMgYSBwcm9ibGVtIGluIGJ1aWxkcyB0aGF0IGRvIG5vdCB1c2UgbGlidG9vbCBvciBhdXRvbWFrZSwgaW4gdGhlIGNhc2UKKwkjIHdoZXJlIHdlIC1uZWVkLSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlc2Ugc2NyaXB0cy4gIGUuZy4gcnVubmluZyBhIGJ1aWxkCisJIyBmb3IgYSBwYWNrYWdlIHdob3NlIGF1dG90b29scyBhcmUgb2xkLCBvbiBhbiB4ODZfNjQgbWFjaGluZSwgd2hpY2ggdGhlIG9sZAorCSMgY29uZmlnLnN1YiBkb2VzIG5vdCBzdXBwb3J0LiAgV29yayBhcm91bmQgdGhpcyBieSBpbnN0YWxsaW5nIHRoZW0gbWFudWFsbHkKKwkjIHJlZ2FyZGxlc3MuCisJKCBmb3IgYWMgaW4gYGZpbmQgJHtTfSAtaWdub3JlX3JlYWRkaXJfcmFjZSAtbmFtZSBjb25maWd1cmUuaW4gLW8gLW5hbWUgY29uZmlndXJlLmFjYDsgZG8KKwkJcm0gLWYgYGRpcm5hbWUgJGFjYC9jb25maWd1cmUKKwkJZG9uZSApCisJaWYgWyAtZSAke1N9L2NvbmZpZ3VyZS5pbiAtbyAtZSAke1N9L2NvbmZpZ3VyZS5hYyBdOyB0aGVuCisJCW9sZGRpcj1gcHdkYAorCQljZCAke1N9CisJCUFDTE9DQUw9ImFjbG9jYWwgLS1zeXN0ZW0tYWNkaXI9JHtBQ0xPQ0FMRElSfS8iCisJCWlmIFsgeCIke2FjcGF0aHN9IiA9IHhkZWZhdWx0IF07IHRoZW4KKwkJCWFjcGF0aHM9CisJCQlmb3IgaSBpbiBgZmluZCAke1N9IC1pZ25vcmVfcmVhZGRpcl9yYWNlIC1tYXhkZXB0aCAyIC1uYW1lIFwqLm00fGdyZXAgLXYgJ2FjbG9jYWwubTQnfCBcCisJCQkJZ3JlcCAtdiAnYWNpbmNsdWRlLm00JyB8IGdyZXAgLXYgJ2FjbG9jYWwtY29weScgfCBzZWQgLWUgJ3MsXCguKi9cKS4qJCxcMSwnfHNvcnQgLXVgOyBkbworCQkJCWFjcGF0aHM9IiRhY3BhdGhzIC1JICRpIgorCQkJZG9uZQorCQllbHNlCisJCQlhY3BhdGhzPSIke2FjcGF0aHN9IgorCQlmaQorCQlBVVRPVj1gYXV0b21ha2UgLS12ZXJzaW9uIHwgc2VkIC1lICcxe3MvLiogLy87cy9cLlswLTldXCskLy99O3EnYAorCQlhdXRvbWFrZSAtLXZlcnNpb24KKwkJZWNobyAiQVVUT1YgaXMgJEFVVE9WIgorCQlpZiBbIC1kICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vYWNsb2NhbC0kQVVUT1YgXTsgdGhlbgorCQkJQUNMT0NBTD0iJEFDTE9DQUwgLS1hdXRvbWFrZS1hY2Rpcj0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2FjbG9jYWwtJEFVVE9WIgorCQlmaQorCQkjIGF1dG9yZWNvbmYgaXMgdG9vIHNoeSB0byBvdmVyd3JpdGUgYWNsb2NhbC5tNCBpZiBpdCBkb2Vzbid0IGxvb2sKKwkJIyBsaWtlIGl0IHdhcyBhdXRvLWdlbmVyYXRlZC4gIFdvcmsgYXJvdW5kIHRoaXMgYnkgYmxvd2luZyBpdCBhd2F5CisJCSMgYnkgaGFuZCwgdW5sZXNzIHRoZSBwYWNrYWdlIHNwZWNpZmljYWxseSBhc2tlZCBub3QgdG8gcnVuIGFjbG9jYWwuCisJCWlmICEgZWNobyAke0VYVFJBX0FVVE9SRUNPTkZ9IHwgZ3JlcCAtcSAiYWNsb2NhbCI7IHRoZW4KKwkJCXJtIC1mIGFjbG9jYWwubTQKKwkJZmkKKwkJaWYgWyAtZSBjb25maWd1cmUuaW4gXTsgdGhlbgorCQkJQ09ORklHVVJFX0FDPWNvbmZpZ3VyZS5pbgorCQllbHNlCisJCQlDT05GSUdVUkVfQUM9Y29uZmlndXJlLmFjCisJCWZpCisJCWlmIGdyZXAgIl5bWzpzcGFjZTpdXSpBTV9HTElCX0dOVV9HRVRURVhUIiAkQ09ORklHVVJFX0FDID4vZGV2L251bGw7IHRoZW4KKwkJCWlmIGdyZXAgInNlZC4qUE9URklMRVMiICRDT05GSUdVUkVfQUMgPi9kZXYvbnVsbDsgdGhlbgorCQkJCTogZG8gbm90aGluZyAtLSB3ZSBzdGlsbCBoYXZlIGFuIG9sZCB1bm1vZGlmaWVkIGNvbmZpZ3VyZS5hYworCSAgICAJCWVsc2UKKwkJCQliYm5vdGUgRXhlY3V0aW5nIGdsaWItZ2V0dGV4dGl6ZSAtLWZvcmNlIC0tY29weQorCQkJCWVjaG8gIm5vIiB8IGdsaWItZ2V0dGV4dGl6ZSAtLWZvcmNlIC0tY29weQorCQkJZmkKKwkJZWxzZSBpZiBncmVwICJeW1s6c3BhY2U6XV0qQU1fR05VX0dFVFRFWFQiICRDT05GSUdVUkVfQUMgPi9kZXYvbnVsbDsgdGhlbgorCQkJIyBXZSdkIGNhbGwgZ2V0dGV4dGl6ZSBoZXJlIGlmIGl0IHdhc24ndCBzbyBicm9rZW4uLi4KKwkJCQljcCAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dldHRleHQvY29uZmlnLnJwYXRoICR7QVVUT1RPT0xTX0FVWERJUn0vCisJCQkJaWYgWyAtZCAke1N9L3BvLyBdOyB0aGVuCisJCQkJCWNwIC1mICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiAke1N9L3BvLworCQkJCQlpZiBbICEgLWUgJHtTfS9wby9yZW1vdmUtcG90Y2RhdGUuc2luIF07IHRoZW4KKwkJCQkJCWNwICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9yZW1vdmUtcG90Y2RhdGUuc2luICR7U30vcG8vCisJCQkJCWZpCisJCQkJZmkKKwkJCQlmb3IgaSBpbiBnZXR0ZXh0Lm00IGljb252Lm00IGxpYi1sZC5tNCBsaWItbGluay5tNCBsaWItcHJlZml4Lm00IG5scy5tNCBwby5tNCBwcm9ndGVzdC5tNDsgZG8KKwkJCQkJZm9yIGogaW4gYGZpbmQgJHtTfSAtaWdub3JlX3JlYWRkaXJfcmFjZSAtbmFtZSAkaSB8IGdyZXAgLXYgYWNsb2NhbC1jb3B5YDsgZG8KKwkJCQkJCXJtICRqCisJCQkJCWRvbmUKKwkJCQlkb25lCisJCQlmaQorCQlmaQorCQlta2RpciAtcCBtNAorCQlpZiBncmVwICJeW1s6c3BhY2U6XV0qW0FJXVtDVF1fUFJPR19JTlRMVE9PTCIgJENPTkZJR1VSRV9BQyA+L2Rldi9udWxsOyB0aGVuCisJCQliYm5vdGUgRXhlY3V0aW5nIGludGx0b29saXplIC0tY29weSAtLWZvcmNlIC0tYXV0b21ha2UKKwkJCWludGx0b29saXplIC0tY29weSAtLWZvcmNlIC0tYXV0b21ha2UKKwkJZmkKKwkJYmJub3RlIEV4ZWN1dGluZyBBQ0xPQ0FMPVwiJEFDTE9DQUxcIiBhdXRvcmVjb25mIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAke0VYVFJBX0FVVE9SRUNPTkZ9ICRhY3BhdGhzCisJCUFDTE9DQUw9IiRBQ0xPQ0FMIiBhdXRvcmVjb25mIC1XY3Jvc3MgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlICR7RVhUUkFfQVVUT1JFQ09ORn0gJGFjcGF0aHMgfHwgZGllICJhdXRvcmVjb25mIGV4ZWN1dGlvbiBmYWlsZWQuIgorCQljZCAkb2xkZGlyCisJZmkKKwlpZiBbIC1lICR7U30vY29uZmlndXJlIF07IHRoZW4KKwkJb2VfcnVuY29uZgorCWVsc2UKKwkJYmJub3RlICJub3RoaW5nIHRvIGNvbmZpZ3VyZSIKKwlmaQorfQorCithdXRvdG9vbHNfZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKwkjIEluZm8gZGlyIGxpc3RpbmcgaXNuJ3QgaW50ZXJlc3RpbmcgYXQgdGhpcyBwb2ludCBzbyByZW1vdmUgaXQgaWYgaXQgZXhpc3RzLgorCWlmIFsgLWUgIiR7RH0ke2luZm9kaXJ9L2RpciIgXTsgdGhlbgorCQlybSAtZiAke0R9JHtpbmZvZGlyfS9kaXIKKwlmaQorfQorCitpbmhlcml0IHNpdGVjb25maWcKKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb25maWd1cmUgZG9faW5zdGFsbAorCitCID0gIiR7V09SS0RJUn0vYnVpbGQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hdXRvdG9vbHNfc3RhZ2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2F1dG90b29sc19zdGFnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYzQxZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hdXRvdG9vbHNfc3RhZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDIgQEAKK2luaGVyaXQgYXV0b3Rvb2xzCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jhc2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDc4MDAxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsNjI5IEBACitCQl9ERUZBVUxUX1RBU0sgPz0gImJ1aWxkIgorQ0xBU1NPVkVSUklERSA/PSAiY2xhc3MtdGFyZ2V0IgorCitpbmhlcml0IHBhdGNoCitpbmhlcml0IHN0YWdpbmcKKworaW5oZXJpdCBtaXJyb3JzCitpbmhlcml0IHV0aWxzCitpbmhlcml0IHV0aWxpdHktdGFza3MKK2luaGVyaXQgbWV0YWRhdGFfc2NtCitpbmhlcml0IGxvZ2dpbmcKKworT0VfSU1QT1JUUyArPSAib3Mgc3lzIHRpbWUgb2UucGF0aCBvZS51dGlscyBvZS5kYXRhIG9lLnBhY2thZ2Ugb2UucGFja2FnZWdyb3VwIG9lLnNzdGF0ZXNpZyBvZS5sc2Igb2UuY2FjaGVkcGF0aCIKK09FX0lNUE9SVFNbdHlwZV0gPSAibGlzdCIKKworZGVmIG9lX2ltcG9ydChkKToKKyAgICBpbXBvcnQgc3lzCisKKyAgICBiYnBhdGggPSBkLmdldFZhcigiQkJQQVRIIiwgVHJ1ZSkuc3BsaXQoIjoiKQorICAgIHN5cy5wYXRoWzA6MF0gPSBbb3MucGF0aC5qb2luKGRpciwgImxpYiIpIGZvciBkaXIgaW4gYmJwYXRoXQorCisgICAgZGVmIGluamVjdChuYW1lLCB2YWx1ZSk6CisgICAgICAgICIiIk1ha2UgYSBweXRob24gb2JqZWN0IGFjY2Vzc2libGUgZnJvbSB0aGUgbWV0YWRhdGEiIiIKKyAgICAgICAgaWYgaGFzYXR0cihiYi51dGlscywgIl9jb250ZXh0Iik6CisgICAgICAgICAgICBiYi51dGlscy5fY29udGV4dFtuYW1lXSA9IHZhbHVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfX2J1aWx0aW5zX19bbmFtZV0gPSB2YWx1ZQorCisgICAgaW1wb3J0IG9lLmRhdGEKKyAgICBmb3IgdG9pbXBvcnQgaW4gb2UuZGF0YS50eXBlZF92YWx1ZSgiT0VfSU1QT1JUUyIsIGQpOgorICAgICAgICBpbXBvcnRlZCA9IF9faW1wb3J0X18odG9pbXBvcnQpCisgICAgICAgIGluamVjdCh0b2ltcG9ydC5zcGxpdCgiLiIsIDEpWzBdLCBpbXBvcnRlZCkKKworICAgIHJldHVybiAiIgorCisjIFdlIG5lZWQgdGhlIG9lIG1vZHVsZSBuYW1lIHNwYWNlIGVhcmx5IChiZWZvcmUgSU5IRVJJVHMgZ2V0IGFkZGVkKQorT0VfSU1QT1JURUQgOj0gIiR7QG9lX2ltcG9ydChkKX0iCisKK2RlZiBsc2JfZGlzdHJvX2lkZW50aWZpZXIoZCk6CisgICAgYWRqdXN0ID0gZC5nZXRWYXIoJ0xTQl9ESVNUUk9fQURKVVNUJywgVHJ1ZSkKKyAgICBhZGp1c3RfZnVuYyA9IE5vbmUKKyAgICBpZiBhZGp1c3Q6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFkanVzdF9mdW5jID0gZ2xvYmFscygpW2FkanVzdF0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgIHJldHVybiBvZS5sc2IuZGlzdHJvX2lkZW50aWZpZXIoYWRqdXN0X2Z1bmMpCisKK2RpZSgpIHsKKwliYmZhdGFsX2xvZyAiJCoiCit9CisKK29lX3J1bm1ha2VfY2FsbCgpIHsKKwliYm5vdGUgJHtNQUtFfSAke0VYVFJBX09FTUFLRX0gIiRAIgorCSR7TUFLRX0gJHtFWFRSQV9PRU1BS0V9ICIkQCIKK30KKworb2VfcnVubWFrZSgpIHsKKwlvZV9ydW5tYWtlX2NhbGwgIiRAIiB8fCBkaWUgIm9lX3J1bm1ha2UgZmFpbGVkIgorfQorCisKK2RlZiBiYXNlX2RlcF9wcmVwZW5kKGQpOgorICAgICMKKyAgICAjIElkZWFsbHkgdGhpcyB3aWxsIGNoZWNrIGEgZmxhZyBzbyB3ZSB3aWxsIG9wZXJhdGUgcHJvcGVybHkgaW4KKyAgICAjIHRoZSBjYXNlIHdoZXJlIGhvc3QgPT0gYnVpbGQgPT0gdGFyZ2V0LCBmb3Igbm93IHdlIGRvbid0IHdvcmsgaW4KKyAgICAjIHRoYXQgY2FzZSB0aG91Z2guCisgICAgIworCisgICAgZGVwcyA9ICIiCisgICAgIyBJTkhJQklUX0RFRkFVTFRfREVQUyBkb2Vzbid0IGFwcGx5IHRvIHRoZSBwYXRjaCBjb21tYW5kLiAgV2hldGhlciBvciAgbm90CisgICAgIyB3ZSBuZWVkIHRoYXQgYnVpbHQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBwYXRjaCBmdW5jdGlvbiAvIGNsYXNzLCBub3QKKyAgICAjIHRoZSBhcHBsaWNhdGlvbi4KKyAgICBpZiBub3QgZC5nZXRWYXIoJ0lOSElCSVRfREVGQVVMVF9ERVBTJywgRmFsc2UpOgorICAgICAgICBpZiAoZC5nZXRWYXIoJ0hPU1RfU1lTJywgVHJ1ZSkgIT0gZC5nZXRWYXIoJ0JVSUxEX1NZUycsIFRydWUpKToKKyAgICAgICAgICAgIGRlcHMgKz0gIiB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzIHZpcnR1YWwvbGliYyAiCisgICAgcmV0dXJuIGRlcHMKKworQkFTRURFUEVORFMgPSAiJHtAYmFzZV9kZXBfcHJlcGVuZChkKX0iCisKK0RFUEVORFNfcHJlcGVuZD0iJHtCQVNFREVQRU5EU30gIgorCitGSUxFU1BBVEggPSAiJHtAYmFzZV9zZXRfZmlsZXNwYXRoKFsiJHtGSUxFX0RJUk5BTUV9LyR7QlB9IiwgIiR7RklMRV9ESVJOQU1FfS8ke0JQTn0iLCAiJHtGSUxFX0RJUk5BTUV9L2ZpbGVzIl0sIGQpfSIKKyMgVEhJU0RJUiBvbmx5IHdvcmtzIHByb3Blcmx5IHdpdGggaW1lZGlhdGUgZXhwYW5zaW9uIGFzIGl0IGhhcyB0byBydW4KKyMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxvY2F0aW9uIGl0cyB1c2VkICg6PSkKK1RISVNESVIgPSAiJHtAb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkpfSIKKworZGVmIGV4dHJhX3BhdGhfZWxlbWVudHMoZCk6CisgICAgcGF0aCA9ICIiCisgICAgZWxlbWVudHMgPSAoZC5nZXRWYXIoJ0VYVFJBTkFUSVZFUEFUSCcsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgZm9yIGUgaW4gZWxlbWVudHM6CisgICAgICAgIHBhdGggPSBwYXRoICsgIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8iICsgZSArICI6IgorICAgIHJldHVybiBwYXRoCisKK1BBVEhfcHJlcGVuZCA9ICIke0BleHRyYV9wYXRoX2VsZW1lbnRzKGQpfSIKKworZGVmIGdldF9saWNfY2hlY2tzdW1fZmlsZV9saXN0KGQpOgorICAgIGZpbGVsaXN0ID0gW10KKyAgICBsaWNfZmlsZXMgPSBkLmdldFZhcigiTElDX0ZJTEVTX0NIS1NVTSIsIFRydWUpIG9yICcnCisgICAgdG1wZGlyID0gZC5nZXRWYXIoIlRNUERJUiIsIFRydWUpCisKKyAgICB1cmxzID0gbGljX2ZpbGVzLnNwbGl0KCkKKyAgICBmb3IgdXJsIGluIHVybHM6CisgICAgICAgICMgV2Ugb25seSBjYXJlIGFib3V0IGl0ZW1zIHRoYXQgYXJlIGFic29sdXRlIHBhdGhzIHNpbmNlCisgICAgICAgICMgYW55IG90aGVycyBzaG91bGQgYmUgY292ZXJlZCBieSBTUkNfVVJJLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXRoID0gYmIuZmV0Y2guZGVjb2RldXJsKHVybClbMl0KKyAgICAgICAgICAgIGlmIHBhdGhbMF0gPT0gJy8nOgorICAgICAgICAgICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aCh0bXBkaXIpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZpbGVsaXN0LmFwcGVuZChwYXRoICsgIjoiICsgc3RyKG9zLnBhdGguZXhpc3RzKHBhdGgpKSkKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoLk1hbGZvcm1lZFVybDoKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoZC5nZXRWYXIoJ1BOJywgVHJ1ZSkgKyAiOiBMSUNfRklMRVNfQ0hLU1VNIGNvbnRhaW5zIGFuIGludmFsaWQgVVJMOiAiICsgdXJsKQorICAgIHJldHVybiAiICIuam9pbihmaWxlbGlzdCkKKworYWRkdGFzayBmZXRjaAorZG9fZmV0Y2hbZGlyc10gPSAiJHtETF9ESVJ9IgorZG9fZmV0Y2hbZmlsZS1jaGVja3N1bXNdID0gIiR7QGJiLmZldGNoLmdldF9jaGVja3N1bV9maWxlX2xpc3QoZCl9IgorZG9fZmV0Y2hbZmlsZS1jaGVja3N1bXNdICs9ICIgJHtAZ2V0X2xpY19jaGVja3N1bV9maWxlX2xpc3QoZCl9IgorZG9fZmV0Y2hbdmFyZGVwc10gKz0gIlNSQ1JFViIKK3B5dGhvbiBiYXNlX2RvX2ZldGNoKCkgeworCisgICAgc3JjX3VyaSA9IChkLmdldFZhcignU1JDX1VSSScsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbGVuKHNyY191cmkpID09IDA6CisgICAgICAgIHJldHVybgorCisgICAgdHJ5OgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKHNyY191cmksIGQpCisgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKGUpCit9CisKK2FkZHRhc2sgdW5wYWNrIGFmdGVyIGRvX2ZldGNoCitkb191bnBhY2tbZGlyc10gPSAiJHtXT1JLRElSfSIKK3B5dGhvbiBiYXNlX2RvX3VucGFjaygpIHsKKyAgICBzcmNfdXJpID0gKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBsZW4oc3JjX3VyaSkgPT0gMDoKKyAgICAgICAgcmV0dXJuCisKKyAgICByb290ZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorCisgICAgIyBFbnN1cmUgdGhhdCB3ZSBjbGVhbnVwICR7U30vcGF0Y2hlcworICAgICMgVE9ETzogSW52ZXN0aWdhdGUgaWYgd2UgY2FuIHJlbW92ZQorICAgICMgdGhlIGVudGlyZSAke1N9IGluIHRoaXMgY2FzZS4KKyAgICBzX2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICBwX2RpciA9IG9zLnBhdGguam9pbihzX2RpciwgJ3BhdGNoZXMnKQorICAgIGJiLnV0aWxzLnJlbW92ZShwX2RpciwgVHJ1ZSkKKworICAgIHRyeToKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChzcmNfdXJpLCBkKQorICAgICAgICBmZXRjaGVyLnVucGFjayhyb290ZGlyKQorICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKGUpCit9CisKK2RlZiBwa2dhcmNoX21hcHBpbmcoZCk6CisgICAgIyBDb21wYXRpYmlsaXR5IG1hcHBpbmdzIG9mIFRVTkVfUEtHQVJDSCAob3B0IGluKQorICAgIGlmIGQuZ2V0VmFyKCJQS0dBUkNIQ09NUEFUX0FSTVY3QSIsIFRydWUpOgorICAgICAgICBpZiBkLmdldFZhcigiVFVORV9QS0dBUkNIIiwgVHJ1ZSkgPT0gImFybXY3YS12ZnAtbmVvbiI6CisgICAgICAgICAgICBkLnNldFZhcigiVFVORV9QS0dBUkNIIiwgImFybXY3YSIpCisKK2RlZiBnZXRfbGF5ZXJzX2JyYW5jaF9yZXYoZCk6CisgICAgbGF5ZXJzID0gKGQuZ2V0VmFyKCJCQkxBWUVSUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgbGF5ZXJzX2JyYW5jaF9yZXYgPSBbIiUtMTdzID0gXCIlczolc1wiIiAlIChvcy5wYXRoLmJhc2VuYW1lKGkpLCBcCisgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9icmFuY2goaSwgTm9uZSkuc3RyaXAoKSwgXAorICAgICAgICBiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24oaSwgTm9uZSkpIFwKKyAgICAgICAgICAgIGZvciBpIGluIGxheWVyc10KKyAgICBpID0gbGVuKGxheWVyc19icmFuY2hfcmV2KS0xCisgICAgcDEgPSBsYXllcnNfYnJhbmNoX3JldltpXS5maW5kKCI9IikKKyAgICBzMSA9IGxheWVyc19icmFuY2hfcmV2W2ldW3AxOl0KKyAgICB3aGlsZSBpID4gMDoKKyAgICAgICAgcDIgPSBsYXllcnNfYnJhbmNoX3JldltpLTFdLmZpbmQoIj0iKQorICAgICAgICBzMj0gbGF5ZXJzX2JyYW5jaF9yZXZbaS0xXVtwMjpdCisgICAgICAgIGlmIHMxID09IHMyOgorICAgICAgICAgICAgbGF5ZXJzX2JyYW5jaF9yZXZbaS0xXSA9IGxheWVyc19icmFuY2hfcmV2W2ktMV1bMDpwMl0KKyAgICAgICAgICAgIGkgLT0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaSAtPSAxCisgICAgICAgICAgICBwMSA9IGxheWVyc19icmFuY2hfcmV2W2ldLmZpbmQoIj0iKQorICAgICAgICAgICAgczE9IGxheWVyc19icmFuY2hfcmV2W2ldW3AxOl0KKyAgICByZXR1cm4gbGF5ZXJzX2JyYW5jaF9yZXYKKworCitCVUlMRENGR19GVU5DUyA/Pz0gImJ1aWxkY2ZnX3ZhcnMgZ2V0X2xheWVyc19icmFuY2hfcmV2IGJ1aWxkY2ZnX25lZWRlZHZhcnMiCitCVUlMRENGR19GVU5DU1t0eXBlXSA9ICJsaXN0IgorCitkZWYgYnVpbGRjZmdfdmFycyhkKToKKyAgICBzdGF0dXN2YXJzID0gb2UuZGF0YS50eXBlZF92YWx1ZSgnQlVJTERDRkdfVkFSUycsIGQpCisgICAgZm9yIHZhciBpbiBzdGF0dXN2YXJzOgorICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB5aWVsZCAnJS0xN3MgPSAiJXMiJyAlICh2YXIsIHZhbHVlKQorCitkZWYgYnVpbGRjZmdfbmVlZGVkdmFycyhkKToKKyAgICBuZWVkZWRfdmFycyA9IG9lLmRhdGEudHlwZWRfdmFsdWUoIkJVSUxEQ0ZHX05FRURFRFZBUlMiLCBkKQorICAgIHBlc3RlcnVzZXIgPSBbXQorICAgIGZvciB2IGluIG5lZWRlZF92YXJzOgorICAgICAgICB2YWwgPSBkLmdldFZhcih2LCBUcnVlKQorICAgICAgICBpZiBub3QgdmFsIG9yIHZhbCA9PSAnSU5WQUxJRCc6CisgICAgICAgICAgICBwZXN0ZXJ1c2VyLmFwcGVuZCh2KQorCisgICAgaWYgcGVzdGVydXNlcjoKKyAgICAgICAgYmIuZmF0YWwoJ1RoZSBmb2xsb3dpbmcgdmFyaWFibGUocykgd2VyZSBub3Qgc2V0OiAlc1xuUGxlYXNlIHNldCB0aGVtIGRpcmVjdGx5LCBvciBjaG9vc2UgYSBNQUNISU5FIG9yIERJU1RSTyB0aGF0IHNldHMgdGhlbS4nICUgJywgJy5qb2luKHBlc3RlcnVzZXIpKQorCithZGRoYW5kbGVyIGJhc2VfZXZlbnRoYW5kbGVyCitiYXNlX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkNvbmZpZ1BhcnNlZCBiYi5ldmVudC5CdWlsZFN0YXJ0ZWQgYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UgYmIucnVucXVldWUuc2NlbmVRdWV1ZUNvbXBsZXRlIgorcHl0aG9uIGJhc2VfZXZlbnRoYW5kbGVyKCkgeworICAgIGltcG9ydCBiYi5ydW5xdWV1ZQorCisgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5Db25maWdQYXJzZWQpOgorICAgICAgICBpZiBub3QgZS5kYXRhLmdldFZhcigiTkFUSVZFTFNCU1RSSU5HIiwgRmFsc2UpOgorICAgICAgICAgICAgZS5kYXRhLnNldFZhcigiTkFUSVZFTFNCU1RSSU5HIiwgbHNiX2Rpc3Ryb19pZGVudGlmaWVyKGUuZGF0YSkpCisgICAgICAgIGUuZGF0YS5zZXRWYXIoJ0JCX1ZFUlNJT04nLCBiYi5fX3ZlcnNpb25fXykKKyAgICAgICAgcGtnYXJjaF9tYXBwaW5nKGUuZGF0YSkKKyAgICAgICAgb2UudXRpbHMuZmVhdHVyZXNfYmFja2ZpbGwoIkRJU1RST19GRUFUVVJFUyIsIGUuZGF0YSkKKyAgICAgICAgb2UudXRpbHMuZmVhdHVyZXNfYmFja2ZpbGwoIk1BQ0hJTkVfRkVBVFVSRVMiLCBlLmRhdGEpCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShlLmRhdGEpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICBzdGF0dXNsaW5lcyA9IFtdCisgICAgICAgIGZvciBmdW5jIGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ0JVSUxEQ0ZHX0ZVTkNTJywgbG9jYWxkYXRhKToKKyAgICAgICAgICAgIGcgPSBnbG9iYWxzKCkKKyAgICAgICAgICAgIGlmIGZ1bmMgbm90IGluIGc6CisgICAgICAgICAgICAgICAgYmIud2FybigiQnVpbGQgY29uZmlndXJhdGlvbiBmdW5jdGlvbiAnJXMnIGRvZXMgbm90IGV4aXN0IiAlIGZ1bmMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZsaW5lcyA9IGdbZnVuY10obG9jYWxkYXRhKQorICAgICAgICAgICAgICAgIGlmIGZsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzbGluZXMuZXh0ZW5kKGZsaW5lcykKKworICAgICAgICBzdGF0dXNoZWFkZXIgPSBlLmRhdGEuZ2V0VmFyKCdCVUlMRENGR19IRUFERVInLCBUcnVlKQorICAgICAgICBiYi5wbGFpbignXG4lc1xuJXNcbicgJSAoc3RhdHVzaGVhZGVyLCAnXG4nLmpvaW4oc3RhdHVzbGluZXMpKSkKKworICAgICMgVGhpcyBjb2RlIGlzIHRvIHNpbGVuY2Ugd2FybmluZ3Mgd2hlcmUgdGhlIFNESyB2YXJpYWJsZXMgb3ZlcndyaXRlIHRoZSAKKyAgICAjIHRhcmdldCBvbmVzIGFuZCB3ZSdkIHNlZSBkdWxwaWNhdGUga2V5IG5hbWVzIG92ZXJ3cml0aW5nIGVhY2ggb3RoZXIKKyAgICAjIGZvciB2YXJpb3VzIFBSRUZFUlJFRF9QUk9WSURFUlMKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlKToKKyAgICAgICAgaWYgZS5kYXRhLmdldFZhcigiVEFSR0VUX1BSRUZJWCIsIFRydWUpID09IGUuZGF0YS5nZXRWYXIoIlNES19QUkVGSVgiLCBUcnVlKToKKyAgICAgICAgICAgIGUuZGF0YS5kZWxWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscyIpCisgICAgICAgICAgICBlLmRhdGEuZGVsVmFyKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRpYWwiKQorICAgICAgICAgICAgZS5kYXRhLmRlbFZhcigiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyIpCisgICAgICAgICAgICBlLmRhdGEuZGVsVmFyKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9ZysrIikKKyAgICAgICAgICAgIGUuZGF0YS5kZWxWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnMiKQorCisgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlQ29tcGxldGUpOgorICAgICAgICBjb21wbGV0aW9ucyA9IGUuZGF0YS5leHBhbmQoIiR7U1RBR0lOR19ESVJ9L3NzdGF0ZWNvbXBsZXRpb25zIikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29tcGxldGlvbnMpOgorICAgICAgICAgICAgY21kcyA9IHNldCgpCisgICAgICAgICAgICB3aXRoIG9wZW4oY29tcGxldGlvbnMsICJyIikgYXMgZjoKKyAgICAgICAgICAgICAgICBjbWRzID0gc2V0KGYpCisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJjb21wbGV0aW9uX2Z1bmN0aW9uIiwgIlxuIi5qb2luKGNtZHMpKQorICAgICAgICAgICAgZS5kYXRhLnNldFZhckZsYWcoImNvbXBsZXRpb25fZnVuY3Rpb24iLCAiZnVuYyIsICIxIikKKyAgICAgICAgICAgIGJiLmRlYnVnKDEsICJFeGVjdXRpbmcgU2NlbmVRdWV1ZSBDb21wbGV0aW9uIGNvbW1hbmRzOiAlcyIgJSAiXG4iLmpvaW4oY21kcykpCisgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoImNvbXBsZXRpb25fZnVuY3Rpb24iLCBlLmRhdGEpCisgICAgICAgICAgICBvcy5yZW1vdmUoY29tcGxldGlvbnMpCit9CisKK0NPTkZJR1VSRVNUQU1QRklMRSA9ICIke1dPUktESVJ9L2NvbmZpZ3VyZS5zc3RhdGUiCitDTEVBTkJST0tFTiA9ICIwIgorCithZGR0YXNrIGNvbmZpZ3VyZSBhZnRlciBkb19wYXRjaAorZG9fY29uZmlndXJlW2RpcnNdID0gIiR7Qn0iCitkb19jb25maWd1cmVbZGVwdGFza10gPSAiZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2Jhc2VfZG9fY29uZmlndXJlKCkgeworCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgLWEgLWUgIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQlpZiBbICJgY2F0ICR7Q09ORklHVVJFU1RBTVBGSUxFfWAiICE9ICIke0JCX1RBU0tIQVNIfSIgXTsgdGhlbgorCQkJY2QgJHtCfQorCQkJaWYgWyAiJHtDTEVBTkJST0tFTn0iICE9ICIxIiAtYSBcKCAtZSBNYWtlZmlsZSAtbyAtZSBtYWtlZmlsZSAtbyAtZSBHTlVtYWtlZmlsZSBcKSBdOyB0aGVuCisJCQkJb2VfcnVubWFrZSBjbGVhbgorCQkJZmkKKwkJCWZpbmQgJHtCfSAtaWdub3JlX3JlYWRkaXJfcmFjZSAtbmFtZSBcKi5sYSAtZGVsZXRlCisJCWZpCisJZmkKKwlpZiBbIC1uICIke0NPTkZJR1VSRVNUQU1QRklMRX0iIF07IHRoZW4KKwkJZWNobyAke0JCX1RBU0tIQVNIfSA+ICR7Q09ORklHVVJFU1RBTVBGSUxFfQorCWZpCit9CisKK2FkZHRhc2sgY29tcGlsZSBhZnRlciBkb19jb25maWd1cmUKK2RvX2NvbXBpbGVbZGlyc10gPSAiJHtCfSIKK2Jhc2VfZG9fY29tcGlsZSgpIHsKKwlpZiBbIC1lIE1ha2VmaWxlIC1vIC1lIG1ha2VmaWxlIC1vIC1lIEdOVW1ha2VmaWxlIF07IHRoZW4KKwkJb2VfcnVubWFrZSB8fCBkaWUgIm1ha2UgZmFpbGVkIgorCWVsc2UKKwkJYmJub3RlICJub3RoaW5nIHRvIGNvbXBpbGUiCisJZmkKK30KKworYWRkdGFzayBpbnN0YWxsIGFmdGVyIGRvX2NvbXBpbGUKK2RvX2luc3RhbGxbZGlyc10gPSAiJHtEfSAke0J9IgorIyBSZW1vdmUgYW5kIHJlLWNyZWF0ZSAke0R9IHNvIHRoYXQgaXMgaXQgZ3VhcmFudGVlZCB0byBiZSBlbXB0eQorZG9faW5zdGFsbFtjbGVhbmRpcnNdID0gIiR7RH0iCisKK2Jhc2VfZG9faW5zdGFsbCgpIHsKKwk6Cit9CisKK2Jhc2VfZG9fcGFja2FnZSgpIHsKKwk6Cit9CisKK2FkZHRhc2sgYnVpbGQgYWZ0ZXIgZG9fcG9wdWxhdGVfc3lzcm9vdAorZG9fYnVpbGRbbm9leGVjXSA9ICIxIgorZG9fYnVpbGRbcmVjcmRlcHRhc2tdICs9ICJkb19kZXBsb3kiCitkb19idWlsZCAoKSB7CisJOgorfQorCitkZWYgc2V0X3BhY2thZ2V0cmlwbGV0KGQpOgorICAgIGFyY2hzID0gW10KKyAgICB0b3MgPSBbXQorICAgIHR2cyA9IFtdCisKKyAgICBhcmNocy5hcHBlbmQoZC5nZXRWYXIoIlBBQ0tBR0VfQVJDSFMiLCBUcnVlKS5zcGxpdCgpKQorICAgIHRvcy5hcHBlbmQoZC5nZXRWYXIoIlRBUkdFVF9PUyIsIFRydWUpKQorICAgIHR2cy5hcHBlbmQoZC5nZXRWYXIoIlRBUkdFVF9WRU5ET1IiLCBUcnVlKSkKKworICAgIGRlZiBzZXR0cmlwbGV0KGQsIHZhcm5hbWUsIGFyY2hzLCB0b3MsIHR2cyk6CisgICAgICAgIHRyaXBsZXRzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGFyY2hzKSk6CisgICAgICAgICAgICBmb3IgYXJjaCBpbiBhcmNoc1tpXToKKyAgICAgICAgICAgICAgICB0cmlwbGV0cy5hcHBlbmQoYXJjaCArIHR2c1tpXSArICItIiArIHRvc1tpXSkKKyAgICAgICAgdHJpcGxldHMucmV2ZXJzZSgpCisgICAgICAgIGQuc2V0VmFyKHZhcm5hbWUsICIgIi5qb2luKHRyaXBsZXRzKSkKKworICAgIHNldHRyaXBsZXQoZCwgIlBLR1RSSVBMRVRTIiwgYXJjaHMsIHRvcywgdHZzKQorCisgICAgdmFyaWFudHMgPSBkLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKSBvciAiIgorICAgIGZvciBpdGVtIGluIHZhcmlhbnRzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgaXRlbQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBvdmVycmlkZXMpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGFyY2hzLmFwcGVuZChsb2NhbGRhdGEuZ2V0VmFyKCJQQUNLQUdFX0FSQ0hTIiwgVHJ1ZSkuc3BsaXQoKSkKKyAgICAgICAgdG9zLmFwcGVuZChsb2NhbGRhdGEuZ2V0VmFyKCJUQVJHRVRfT1MiLCBUcnVlKSkKKyAgICAgICAgdHZzLmFwcGVuZChsb2NhbGRhdGEuZ2V0VmFyKCJUQVJHRVRfVkVORE9SIiwgVHJ1ZSkpCisKKyAgICBzZXR0cmlwbGV0KGQsICJQS0dNTFRSSVBMRVRTIiwgYXJjaHMsIHRvcywgdHZzKQorCitweXRob24gKCkgeworICAgIGltcG9ydCBzdHJpbmcsIHJlCisKKyAgICAjIEhhbmRsZSBQQUNLQUdFQ09ORklHCisgICAgIworICAgICMgVGhlc2UgdGFrZSB0aGUgZm9ybToKKyAgICAjCisgICAgIyBQQUNLQUdFQ09ORklHID8/PSAiPGRlZmF1bHQgb3B0aW9ucz4iCisgICAgIyBQQUNLQUdFQ09ORklHW2Zvb10gPSAiLS1lbmFibGUtZm9vLC0tZGlzYWJsZS1mb28sZm9vX2RlcGVuZHMsZm9vX3J1bnRpbWVfZGVwZW5kcyIKKyAgICBwa2djb25maWdmbGFncyA9IGQuZ2V0VmFyRmxhZ3MoIlBBQ0tBR0VDT05GSUciKSBvciB7fQorICAgIGlmIHBrZ2NvbmZpZ2ZsYWdzOgorICAgICAgICBwa2djb25maWcgPSAoZC5nZXRWYXIoJ1BBQ0tBR0VDT05GSUcnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisKKyAgICAgICAgbWxwcmVmaXggPSBkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKQorCisgICAgICAgIGRlZiBleHBhbmRGaWx0ZXIoYXBwZW5kcywgZXh0ZW5zaW9uLCBwcmVmaXgpOgorICAgICAgICAgICAgYXBwZW5kcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmV4cGFuZCgiICIuam9pbihhcHBlbmRzKSkpCisgICAgICAgICAgICBuZXdhcHBlbmRzID0gW10KKyAgICAgICAgICAgIGZvciBhIGluIGFwcGVuZHM6CisgICAgICAgICAgICAgICAgaWYgYS5lbmRzd2l0aCgiLW5hdGl2ZSIpIG9yICgiLWNyb3NzLSIgaW4gYSk6CisgICAgICAgICAgICAgICAgICAgIG5ld2FwcGVuZHMuYXBwZW5kKGEpCisgICAgICAgICAgICAgICAgZWxpZiBhLnN0YXJ0c3dpdGgoInZpcnR1YWwvIik6CisgICAgICAgICAgICAgICAgICAgIHN1YnMgPSBhLnNwbGl0KCIvIiwgMSlbMV0KKyAgICAgICAgICAgICAgICAgICAgbmV3YXBwZW5kcy5hcHBlbmQoInZpcnR1YWwvIiArIHByZWZpeCArIHN1YnMgKyBleHRlbnNpb24pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgYS5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdhcHBlbmRzLmFwcGVuZChhICsgZXh0ZW5zaW9uKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3YXBwZW5kcy5hcHBlbmQocHJlZml4ICsgYSArIGV4dGVuc2lvbikKKyAgICAgICAgICAgIHJldHVybiBuZXdhcHBlbmRzCisKKyAgICAgICAgZGVmIGFwcGVuZFZhcih2YXJuYW1lLCBhcHBlbmRzKToKKyAgICAgICAgICAgIGlmIG5vdCBhcHBlbmRzOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgdmFybmFtZS5maW5kKCJERVBFTkRTIikgIT0gLTE6CisgICAgICAgICAgICAgICAgaWYgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRzID0gZXhwYW5kRmlsdGVyKGFwcGVuZHMsICIiLCAibmF0aXZlc2RrLSIpCisgICAgICAgICAgICAgICAgaWYgcG4uZW5kc3dpdGgoIi1uYXRpdmUiKToKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kcyA9IGV4cGFuZEZpbHRlcihhcHBlbmRzLCAiLW5hdGl2ZSIsICIiKQorICAgICAgICAgICAgICAgIGlmIG1scHJlZml4OgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRzID0gZXhwYW5kRmlsdGVyKGFwcGVuZHMsICIiLCBtbHByZWZpeCkKKyAgICAgICAgICAgIHZhcm5hbWUgPSBkLmV4cGFuZCh2YXJuYW1lKQorICAgICAgICAgICAgZC5hcHBlbmRWYXIodmFybmFtZSwgIiAiICsgIiAiLmpvaW4oYXBwZW5kcykpCisKKyAgICAgICAgZXh0cmFkZXBzID0gW10KKyAgICAgICAgZXh0cmFyZGVwcyA9IFtdCisgICAgICAgIGV4dHJhY29uZiA9IFtdCisgICAgICAgIGZvciBmbGFnLCBmbGFndmFsIGluIHNvcnRlZChwa2djb25maWdmbGFncy5pdGVtcygpKToKKyAgICAgICAgICAgIGl0ZW1zID0gZmxhZ3ZhbC5zcGxpdCgiLCIpCisgICAgICAgICAgICBudW0gPSBsZW4oaXRlbXMpCisgICAgICAgICAgICBpZiBudW0gPiA0OgorICAgICAgICAgICAgICAgIGJiLmVycm9yKCJPbmx5IGVuYWJsZSxkaXNhYmxlLGRlcGVuZCxyZGVwZW5kIGNhbiBiZSBzcGVjaWZpZWQhIikKKworICAgICAgICAgICAgaWYgZmxhZyBpbiBwa2djb25maWc6CisgICAgICAgICAgICAgICAgaWYgbnVtID49IDMgYW5kIGl0ZW1zWzJdOgorICAgICAgICAgICAgICAgICAgICBleHRyYWRlcHMuYXBwZW5kKGl0ZW1zWzJdKQorICAgICAgICAgICAgICAgIGlmIG51bSA+PSA0IGFuZCBpdGVtc1szXToKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFyZGVwcy5hcHBlbmQoaXRlbXNbM10pCisgICAgICAgICAgICAgICAgaWYgbnVtID49IDEgYW5kIGl0ZW1zWzBdOgorICAgICAgICAgICAgICAgICAgICBleHRyYWNvbmYuYXBwZW5kKGl0ZW1zWzBdKQorICAgICAgICAgICAgZWxpZiBudW0gPj0gMiBhbmQgaXRlbXNbMV06CisgICAgICAgICAgICAgICAgICAgIGV4dHJhY29uZi5hcHBlbmQoaXRlbXNbMV0pCisgICAgICAgIGFwcGVuZFZhcignREVQRU5EUycsIGV4dHJhZGVwcykKKyAgICAgICAgYXBwZW5kVmFyKCdSREVQRU5EU18ke1BOfScsIGV4dHJhcmRlcHMpCisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2NtYWtlJywgZCk6CisgICAgICAgICAgICBhcHBlbmRWYXIoJ0VYVFJBX09FQ01BS0UnLCBleHRyYWNvbmYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcHBlbmRWYXIoJ0VYVFJBX09FQ09ORicsIGV4dHJhY29uZikKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBsaWNlbnNlID0gZC5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorICAgIGlmIGxpY2Vuc2UgPT0gIklOVkFMSUQiOgorICAgICAgICBiYi5mYXRhbCgnVGhpcyByZWNpcGUgZG9lcyBub3QgaGF2ZSB0aGUgTElDRU5TRSBmaWVsZCBzZXQgKCVzKScgJSBwbikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2xpY2Vuc2UnLCBkKToKKyAgICAgICAgY2hlY2tfbGljZW5zZV9mb3JtYXQoZCkKKyAgICAgICAgdW5tYXRjaGVkX2xpY2Vuc2VfZmxhZyA9IGNoZWNrX2xpY2Vuc2VfZmxhZ3MoZCkKKyAgICAgICAgaWYgdW5tYXRjaGVkX2xpY2Vuc2VfZmxhZzoKKyAgICAgICAgICAgIGJiLmRlYnVnKDEsICJTa2lwcGluZyAlcyBiZWNhdXNlIGl0IGhhcyBhIHJlc3RyaWN0ZWQgbGljZW5zZSBub3QiCisgICAgICAgICAgICAgICAgICIgd2hpdGVsaXN0ZWQgaW4gTElDRU5TRV9GTEFHU19XSElURUxJU1QiICUgcG4pCisgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiYmVjYXVzZSBpdCBoYXMgYSByZXN0cmljdGVkIGxpY2Vuc2Ugbm90IgorICAgICAgICAgICAgICAgICAiIHdoaXRlbGlzdGVkIGluIExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUIikKKworICAgICMgSWYgd2UncmUgYnVpbGRpbmcgYSB0YXJnZXQgcGFja2FnZSB3ZSBuZWVkIHRvIHVzZSBmYWtlcm9vdCAocHNldWRvKQorICAgICMgaW4gb3JkZXIgdG8gY2FwdHVyZSBwZXJtaXNzaW9ucywgb3duZXJzLCBncm91cHMgYW5kIHNwZWNpYWwgZmlsZXMKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3VucGFjaycsICd1bWFzaycsICcwMjInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2NvbmZpZ3VyZScsICd1bWFzaycsICcwMjInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2NvbXBpbGUnLCAndW1hc2snLCAnMDIyJykKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19pbnN0YWxsJywgJ2RlcGVuZHMnLCAnIHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2luc3RhbGwnLCAnZmFrZXJvb3QnLCAxKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2luc3RhbGwnLCAndW1hc2snLCAnMDIyJykKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlJywgJ2RlcGVuZHMnLCAnIHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2UnLCAnZmFrZXJvb3QnLCAxKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2UnLCAndW1hc2snLCAnMDIyJykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19wYWNrYWdlX3NldHNjZW5lJywgJ2Zha2Vyb290JywgMSkKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3NldHNjZW5lJywgJ2RlcGVuZHMnLCAnIHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2RldnNoZWxsJywgJ2Zha2Vyb290JywgMSkKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19kZXZzaGVsbCcsICdkZXBlbmRzJywgJyB2aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKyAgICBzb3VyY2VfbWlycm9yX2ZldGNoID0gZC5nZXRWYXIoJ1NPVVJDRV9NSVJST1JfRkVUQ0gnLCAwKQorICAgIGlmIG5vdCBzb3VyY2VfbWlycm9yX2ZldGNoOgorICAgICAgICBuZWVkX2hvc3QgPSBkLmdldFZhcignQ09NUEFUSUJMRV9IT1NUJywgVHJ1ZSkKKyAgICAgICAgaWYgbmVlZF9ob3N0OgorICAgICAgICAgICAgaW1wb3J0IHJlCisgICAgICAgICAgICB0aGlzX2hvc3QgPSBkLmdldFZhcignSE9TVF9TWVMnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHJlLm1hdGNoKG5lZWRfaG9zdCwgdGhpc19ob3N0KToKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiaW5jb21wYXRpYmxlIHdpdGggaG9zdCAlcyAobm90IGluIENPTVBBVElCTEVfSE9TVCkiICUgdGhpc19ob3N0KQorCisgICAgICAgIG5lZWRfbWFjaGluZSA9IGQuZ2V0VmFyKCdDT01QQVRJQkxFX01BQ0hJTkUnLCBUcnVlKQorICAgICAgICBpZiBuZWVkX21hY2hpbmU6CisgICAgICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgICAgIGNvbXBhdF9tYWNoaW5lcyA9IChkLmdldFZhcignTUFDSElORU9WRVJSSURFUycsIFRydWUpIG9yICIiKS5zcGxpdCgiOiIpCisgICAgICAgICAgICBmb3IgbSBpbiBjb21wYXRfbWFjaGluZXM6CisgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2gobmVlZF9tYWNoaW5lLCBtKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImluY29tcGF0aWJsZSB3aXRoIG1hY2hpbmUgJXMgKG5vdCBpbiBDT01QQVRJQkxFX01BQ0hJTkUpIiAlIGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkpCisKKworICAgICAgICBiYWRfbGljZW5zZXMgPSAoZC5nZXRWYXIoJ0lOQ09NUEFUSUJMRV9MSUNFTlNFJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgICAgICBjaGVja19saWNlbnNlID0gRmFsc2UgaWYgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpIGVsc2UgVHJ1ZQorICAgICAgICBmb3IgdCBpbiBbIi1uYXRpdmUiLCAiLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IiwgIi1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IiwKKyAgICAgICAgICAgICAgIi1jcm9zc3Nkay0ke1NES19BUkNIfSIsICItY3Jvc3NzZGstaW5pdGlhbC0ke1NES19BUkNIfSIsCisgICAgICAgICAgICAgICItY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSJdOgorICAgICAgICAgICAgaWYgcG4uZW5kc3dpdGgoZC5leHBhbmQodCkpOgorICAgICAgICAgICAgICAgIGNoZWNrX2xpY2Vuc2UgPSBGYWxzZQorICAgICAgICBpZiBwbi5zdGFydHN3aXRoKCJnY2Mtc291cmNlLSIpOgorICAgICAgICAgICAgY2hlY2tfbGljZW5zZSA9IEZhbHNlCisKKyAgICAgICAgaWYgY2hlY2tfbGljZW5zZSBhbmQgYmFkX2xpY2Vuc2VzOgorICAgICAgICAgICAgYmFkX2xpY2Vuc2VzID0gZXhwYW5kX3dpbGRjYXJkX2xpY2Vuc2VzKGQsIGJhZF9saWNlbnNlcykKKworICAgICAgICAgICAgd2hpdGVsaXN0ID0gW10KKyAgICAgICAgICAgIGluY29tcGF0d2wgPSBbXQorICAgICAgICAgICAgaHRpbmNvbXBhdHdsID0gW10KKyAgICAgICAgICAgIGZvciBsaWMgaW4gYmFkX2xpY2Vuc2VzOgorICAgICAgICAgICAgICAgIHNwZHhfbGljZW5zZSA9IHJldHVybl9zcGR4KGQsIGxpYykKKyAgICAgICAgICAgICAgICBmb3IgdyBpbiBbIkhPU1RUT09MU19XSElURUxJU1RfIiwgIkxHUEx2Ml9XSElURUxJU1RfIiwgIldISVRFTElTVF8iXToKKyAgICAgICAgICAgICAgICAgICAgd2hpdGVsaXN0LmV4dGVuZCgoZC5nZXRWYXIodyArIGxpYywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgICAgICAgICAgICAgIGlmIHNwZHhfbGljZW5zZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlbGlzdC5leHRlbmQoKGQuZ2V0VmFyKHcgKyBzcGR4X2xpY2Vuc2UsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICAnJycKKyAgICAgICAgICAgICAgICAgICAgV2UgbmVlZCB0byB0cmFjayB3aGF0IHdlIGFyZSB3aGl0ZWxpc3RpbmcgYW5kIHdoeS4gSWYgcG4gaXMgCisgICAgICAgICAgICAgICAgICAgIGluY29tcGF0aWJsZSBhbmQgaXMgbm90IEhPU1RUT09MU19XSElURUxJU1RfIHdlIG5lZWQgdG8gYmUgCisgICAgICAgICAgICAgICAgICAgIGFibGUgdG8gbm90ZSB0aGF0IHRoZSBpbWFnZSB0aGF0IGlzIGNyZWF0ZWQgbWF5IGluZmFjdCAKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbiBpbmNvbXBhdGlibGUgbGljZW5zZXMgZGVzcGl0ZSBJTkNPTVBBVElCTEVfTElDRU5TRSAKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgc2V0LgorICAgICAgICAgICAgICAgICAgICAnJycKKyAgICAgICAgICAgICAgICAgICAgaWYgIkhPU1RUT09MUyIgaW4gdzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0aW5jb21wYXR3bC5leHRlbmQoKGQuZ2V0VmFyKHcgKyBsaWMsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3BkeF9saWNlbnNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0aW5jb21wYXR3bC5leHRlbmQoKGQuZ2V0VmFyKHcgKyBzcGR4X2xpY2Vuc2UsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21wYXR3bC5leHRlbmQoKGQuZ2V0VmFyKHcgKyBsaWMsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3BkeF9saWNlbnNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY29tcGF0d2wuZXh0ZW5kKChkLmdldFZhcih3ICsgc3BkeF9saWNlbnNlLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKworICAgICAgICAgICAgaWYgbm90IHBuIGluIHdoaXRlbGlzdDoKKyAgICAgICAgICAgICAgICByZWNpcGVfbGljZW5zZSA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBwa2dzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICAgICAgICAgIHNraXBwZWRfcGtncyA9IFtdCisgICAgICAgICAgICAgICAgdW5za2lwcGVkX3BrZ3MgPSBbXQorICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgICAgICAgICAgICAgaWYgaW5jb21wYXRpYmxlX2xpY2Vuc2UoZCwgYmFkX2xpY2Vuc2VzLCBwa2cpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2tpcHBlZF9wa2dzLmFwcGVuZChwa2cpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNraXBwZWRfcGtncy5hcHBlbmQocGtnKQorICAgICAgICAgICAgICAgIGFsbF9za2lwcGVkID0gc2tpcHBlZF9wa2dzIGFuZCBub3QgdW5za2lwcGVkX3BrZ3MKKyAgICAgICAgICAgICAgICBpZiB1bnNraXBwZWRfcGtnczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBza2lwcGVkX3BrZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiU0tJUFBJTkcgdGhlIHBhY2thZ2UgIiArIHBrZyArICIgYXQgZG9fcm9vdGZzIGJlY2F1c2UgaXQncyAiICsgcmVjaXBlX2xpY2Vuc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkLnNldFZhcignTElDRU5TRV9FWENMVVNJT04tJyArIHBrZywgMSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiB1bnNraXBwZWRfcGtnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJJTkNMVURJTkcgdGhlIHBhY2thZ2UgIiArIHBrZykKKyAgICAgICAgICAgICAgICBlbGlmIGFsbF9za2lwcGVkIG9yIGluY29tcGF0aWJsZV9saWNlbnNlKGQsIGJhZF9saWNlbnNlcyk6CisgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJTS0lQUElORyByZWNpcGUgJXMgYmVjYXVzZSBpdCdzICVzIiAlIChwbiwgcmVjaXBlX2xpY2Vuc2UpKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiaW5jb21wYXRpYmxlIHdpdGggbGljZW5zZSAlcyIgJSByZWNpcGVfbGljZW5zZSkKKyAgICAgICAgICAgIGVsaWYgcG4gaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgICAgIGlmIHBuIGluIGluY29tcGF0d2w6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIklOQ0xVRElORyAiICsgcG4gKyAiIGFzIGJ1aWxkYWJsZSBkZXNwaXRlIElOQ09NUEFUSUJMRV9MSUNFTlNFIGJlY2F1c2UgaXQgaGFzIGJlZW4gd2hpdGVsaXN0ZWQiKQorICAgICAgICAgICAgICAgIGVsaWYgcG4gaW4gaHRpbmNvbXBhdHdsOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJJTkNMVURJTkcgIiArIHBuICsgIiBhcyBidWlsZGFibGUgZGVzcGl0ZSBJTkNPTVBBVElCTEVfTElDRU5TRSBiZWNhdXNlIGl0IGhhcyBiZWVuIHdoaXRlbGlzdGVkIGZvciBIT1NUVE9PTFMiKQorCisgICAgc3JjdXJpID0gZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKQorICAgICMgU3ZuIHBhY2thZ2VzIHNob3VsZCBERVBFTkQgb24gc3VidmVyc2lvbi1uYXRpdmUKKyAgICBpZiAic3ZuOi8vIiBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZmV0Y2gnLCAnZGVwZW5kcycsICcgc3VidmVyc2lvbi1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICAjIEdpdCBwYWNrYWdlcyBzaG91bGQgREVQRU5EIG9uIGdpdC1uYXRpdmUKKyAgICBpZiAiZ2l0Oi8vIiBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZmV0Y2gnLCAnZGVwZW5kcycsICcgZ2l0LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgICMgTWVyY3VyaWFsIHBhY2thZ2VzIHNob3VsZCBERVBFTkQgb24gbWVyY3VyaWFsLW5hdGl2ZQorICAgIGVsaWYgImhnOi8vIiBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZmV0Y2gnLCAnZGVwZW5kcycsICcgbWVyY3VyaWFsLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgICMgT1NDIHBhY2thZ2VzIHNob3VsZCBERVBFTkQgb24gb3NjLW5hdGl2ZQorICAgIGVsaWYgIm9zYzovLyIgaW4gc3JjdXJpOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2ZldGNoJywgJ2RlcGVuZHMnLCAnIG9zYy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICAjICoubHo0IHNob3VsZCBkZXBlbmRzIG9uIGx6NC1uYXRpdmUgZm9yIHVucGFja2luZworICAgICMgTm90IGVuZHN3aXRoIGJlY2F1c2Ugb2YgIioucGF0Y2gubHo0O3BhdGNoPTEiLiBOZWVkIGJiLmZldGNoLmRlY29kZXVybCBpbiBmdXR1cmUKKyAgICBpZiAnLmx6NCcgaW4gc3JjdXJpOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3VucGFjaycsICdkZXBlbmRzJywgJyBsejQtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorCisgICAgIyAqLnh6IHNob3VsZCBkZXBlbmRzIG9uIHh6LW5hdGl2ZSBmb3IgdW5wYWNraW5nCisgICAgIyBOb3QgZW5kc3dpdGggYmVjYXVzZSBvZiAiKi5wYXRjaC54ejtwYXRjaD0xIi4gTmVlZCBiYi5mZXRjaC5kZWNvZGV1cmwgaW4gZnV0dXJlCisgICAgaWYgJy54eicgaW4gc3JjdXJpOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3VucGFjaycsICdkZXBlbmRzJywgJyB4ei1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICAjIHVuemlwLW5hdGl2ZSBzaG91bGQgYWxyZWFkeSBiZSBzdGFnZWQgYmVmb3JlIHVucGFja2luZyBaSVAgcmVjaXBlcworICAgIGlmICIuemlwIiBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fdW5wYWNrJywgJ2RlcGVuZHMnLCAnIHVuemlwLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgICMgZmlsZSBpcyBuZWVkZWQgYnkgcnBtMmNwaW8uc2gKKyAgICBpZiAiLnNyYy5ycG0iIGluIHNyY3VyaToKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb191bnBhY2snLCAnZGVwZW5kcycsICcgZmlsZS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICBzZXRfcGFja2FnZXRyaXBsZXQoZCkKKworICAgICMgJ211bHRpbWFjaGluZScgaGFuZGxpbmcKKyAgICBtYWNoX2FyY2ggPSBkLmdldFZhcignTUFDSElORV9BUkNIJywgVHJ1ZSkKKyAgICBwa2dfYXJjaCA9IGQuZ2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCBUcnVlKQorCisgICAgaWYgKHBrZ19hcmNoID09IG1hY2hfYXJjaCk6CisgICAgICAgICMgQWxyZWFkeSBtYWNoaW5lIHNwZWNpZmljIC0gbm90aGluZyBmdXJ0aGVyIHRvIGRvCisgICAgICAgIHJldHVybgorCisgICAgIworICAgICMgV2UgYWx3YXlzIHRyeSB0byBzY2FuIFNSQ19VUkkgZm9yIHVybHMgd2l0aCBtYWNoaW5lIG92ZXJyaWRlcworICAgICMgdW5sZXNzIHRoZSBwYWNrYWdlIHNldHMgU1JDX1VSSV9PVkVSUklERVNfUEFDS0FHRV9BUkNIPTAKKyAgICAjCisgICAgb3ZlcnJpZGUgPSBkLmdldFZhcignU1JDX1VSSV9PVkVSUklERVNfUEFDS0FHRV9BUkNIJywgVHJ1ZSkKKyAgICBpZiBvdmVycmlkZSAhPSAnMCc6CisgICAgICAgIHBhdGhzID0gW10KKyAgICAgICAgZnBhdGhzID0gKGQuZ2V0VmFyKCdGSUxFU1BBVEgnLCBUcnVlKSBvciAnJykuc3BsaXQoJzonKQorICAgICAgICBtYWNoaW5lID0gZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKQorICAgICAgICBmb3IgcCBpbiBmcGF0aHM6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKHApID09IG1hY2hpbmUgYW5kIG9zLnBhdGguaXNkaXIocCk6CisgICAgICAgICAgICAgICAgcGF0aHMuYXBwZW5kKHApCisKKyAgICAgICAgaWYgbGVuKHBhdGhzKSAhPSAwOgorICAgICAgICAgICAgZm9yIHMgaW4gc3JjdXJpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgbm90IHMuc3RhcnRzd2l0aCgiZmlsZTovLyIpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goW3NdLCBkKQorICAgICAgICAgICAgICAgIGxvY2FsID0gZmV0Y2hlci5sb2NhbHBhdGgocykKKyAgICAgICAgICAgICAgICBmb3IgbXAgaW4gcGF0aHM6CisgICAgICAgICAgICAgICAgICAgIGlmIGxvY2FsLnN0YXJ0c3dpdGgobXApOgorICAgICAgICAgICAgICAgICAgICAgICAgI2JiLm5vdGUoIm92ZXJyaWRpbmcgUEFDS0FHRV9BUkNIIGZyb20gJXMgdG8gJXMgZm9yICVzIiAlIChwa2dfYXJjaCwgbWFjaF9hcmNoLCBwbikpCisgICAgICAgICAgICAgICAgICAgICAgICBkLnNldFZhcignUEFDS0FHRV9BUkNIJywgIiR7TUFDSElORV9BUkNIfSIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIHBrZ2FyY2ggPSBkLmdldFZhcigiUEFDS0FHRV9BUkNIXyVzIiAlIHBrZywgVHJ1ZSkKKworICAgICAgICAjIFdlIGNvdWxkIGxvb2sgZm9yICE9IFBBQ0tBR0VfQVJDSCBoZXJlIGJ1dCBob3cgdG8gY2hvb3NlCisgICAgICAgICMgaWYgbXVsdGlwbGUgZGlmZmVyZW5jZXMgYXJlIHByZXNlbnQ/CisgICAgICAgICMgTG9vayB0aHJvdWdoIFBBQ0tBR0VfQVJDSFMgZm9yIHRoZSBwcmlvcml0eSBvcmRlcj8KKyAgICAgICAgaWYgcGtnYXJjaCBhbmQgcGtnYXJjaCA9PSBtYWNoX2FyY2g6CisgICAgICAgICAgICBkLnNldFZhcignUEFDS0FHRV9BUkNIJywgIiR7TUFDSElORV9BUkNIfSIpCisgICAgICAgICAgICBiYi53YXJuKCJSZWNpcGUgJXMgaXMgbWFya2VkIGFzIG9ubHkgYmVpbmcgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGJ1dCBzZWVtcyB0byBoYXZlIG1hY2hpbmUgc3BlY2lmaWMgcGFja2FnZXM/ISBUaGUgcmVjaXBlIG1heSBhcyB3ZWxsIG1hcmsgaXRzZWxmIGFzIG1hY2hpbmUgc3BlY2lmaWMgZGlyZWN0bHkuIiAlIGQuZ2V0VmFyKCJQTiIsIFRydWUpKQorfQorCithZGR0YXNrIGNsZWFuc3N0YXRlIGFmdGVyIGRvX2NsZWFuCitweXRob24gZG9fY2xlYW5zc3RhdGUoKSB7CisgICAgICAgIHNzdGF0ZV9jbGVhbl9jYWNoZWZpbGVzKGQpCit9CisKK2FkZHRhc2sgY2xlYW5hbGwgYWZ0ZXIgZG9fY2xlYW5zc3RhdGUKK3B5dGhvbiBkb19jbGVhbmFsbCgpIHsKKyAgICBzcmNfdXJpID0gKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBsZW4oc3JjX3VyaSkgPT0gMDoKKyAgICAgICAgcmV0dXJuCisKKyAgICB0cnk6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goc3JjX3VyaSwgZCkKKyAgICAgICAgZmV0Y2hlci5jbGVhbigpCisgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uLCBlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKGUpCit9Citkb19jbGVhbmFsbFtub3N0YW1wXSA9ICIxIgorCisKK0VYUE9SVF9GVU5DVElPTlMgZG9fZmV0Y2ggZG9fdW5wYWNrIGRvX2NvbmZpZ3VyZSBkb19jb21waWxlIGRvX2luc3RhbGwgZG9fcGFja2FnZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmluX3BhY2thZ2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jpbl9wYWNrYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUyYjc1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jpbl9wYWNrYWdlLmJiY2xhc3MKQEAgLTAsMCArMSwzNiBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29tbW9uIHZhcmlhYmxlIGFuZCB0YXNrIGZvciB0aGUgYmluYXJ5IHBhY2thZ2UgcmVjaXBlLgorIyBCYXNpYyBwcmluY2lwbGU6CisjICogVGhlIGZpbGVzIGhhdmUgYmVlbiB1bnBhY2tlZCB0byAke1N9IGJ5IGJhc2UuYmJjbGFzcworIyAqIFNraXAgZG9fY29uZmlndXJlIGFuZCBkb19jb21waWxlCisjICogVXNlIGRvX2luc3RhbGwgdG8gaW5zdGFsbCB0aGUgZmlsZXMgdG8gJHtEfQorIworIyBOb3RlOgorIyBUaGUgInN1YmRpciIgcGFyYW1ldGVyIGluIHRoZSBTUkNfVVJJIGlzIHVzZWZ1bCB3aGVuIHRoZSBpbnB1dCBwYWNrYWdlCisjIGlzIHJwbSwgaXBrLCBkZWIgYW5kIHNvIG9uLCBmb3IgZXhhbXBsZToKKyMKKyMgU1JDX1VSSSA9ICJodHRwOi8vZm9vLmNvbS9mb28tMS4wLXIxLmk1ODYucnBtO3N1YmRpcj1mb28tMS4wIgorIworIyBUaGVuIHRoZSBmaWxlcyB3b3VsZCBiZSB1bnBhY2tlZCB0byAke1dPUktESVJ9L2Zvby0xLjAsIG90aGVyd2lzZQorIyB0aGV5IHdvdWxkIGJlIGluICR7V09SS0RJUn0uCisjCisKKyMgU2tpcCB0aGUgdW53YW50ZWQgc3RlcHMKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKKworIyBJbnN0YWxsIHRoZSBmaWxlcyB0byAke0R9CitiaW5fcGFja2FnZV9kb19pbnN0YWxsICgpIHsKKyAgICAjIERvIGl0IGNhcmVmdWxseQorICAgIFsgLWQgIiR7U30iIF0gfHwgZXhpdCAxCisgICAgY2QgJHtTfSB8fCBleGl0IDEKKyAgICB0YXIgLS1uby1zYW1lLW93bmVyIC0tZXhjbHVkZT0nLi9wYXRjaGVzJyAtLWV4Y2x1ZGU9Jy4vLnBjJyAtY3BmIC0gLiBcCisgICAgICAgIHwgdGFyIC0tbm8tc2FtZS1vd25lciAteHBmIC0gLUMgJHtEfQorfQorCitGSUxFU18ke1BOfSA9ICIvIgorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2JpbmNvbmZpZy1kaXNhYmxlZC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmluY29uZmlnLWRpc2FibGVkLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAyYTY2OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2JpbmNvbmZpZy1kaXNhYmxlZC5iYmNsYXNzCkBAIC0wLDAgKzEsMjkgQEAKKyMKKyMgQ2xhc3MgdG8gZGlzYWJsZSBiaW5jb25maWcgZmlsZXMgaW5zdGVhZCBvZiBpbnN0YWxsaW5nIHRoZW0KKyMKKworIyBUaGUgbGlzdCBvZiBzY3JpcHRzIHdoaWNoIHNob3VsZCBiZSBkaXNhYmxlZC4KK0JJTkNPTkZJRyA/PSAiIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS8qLWNvbmZpZyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWZvciB4IGluICR7QklOQ09ORklHfTsgZG8KKwkJIyBNYWtlIHRoZSBkaXNhYmxlZCBzY3JpcHQgZW1pdCBpbnZhbGlkIHBhcmFtZXRlcnMgZm9yIHRob3NlIGNvbmZpZ3VyZQorCQkjIHNjcmlwdHMgd2hpY2ggY2FsbCBpdCB3aXRob3V0IGNoZWNraW5nIHRoZSByZXR1cm4gY29kZS4KKwkJZWNobyAiIyEvYmluL3NoIiA+ICR7RH0keAorCQllY2hvICJlY2hvICdFUlJPUjogJHggc2hvdWxkIG5vdCBiZSB1c2VkLCB1c2UgYW4gYWx0ZXJuYXRpdmUgc3VjaCBhcyBwa2ctY29uZmlnJyA+JjIiID4+ICR7RH0keAorCQllY2hvICJlY2hvICctLXNob3VsZC1ub3QtaGF2ZS11c2VkLSR4JyIgPj4gJHtEfSR4CisJCWVjaG8gImV4aXQgMSIgPj4gJHtEfSR4CisJZG9uZQorfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImJpbmNvbmZpZ19kaXNhYmxlZF9zeXNyb290X3ByZXByb2Nlc3MiCisKK2JpbmNvbmZpZ19kaXNhYmxlZF9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCWZvciB4IGluICR7QklOQ09ORklHfTsgZG8KKwkJY29uZmlnbmFtZT1gYmFzZW5hbWUgJHhgCisJCWluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorCQlpbnN0YWxsICR7RH0keCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9CisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmluY29uZmlnLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9iaW5jb25maWcuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmM0MTczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmluY29uZmlnLmJiY2xhc3MKQEAgLTAsMCArMSw2MyBAQAorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vKi1jb25maWciCisgCisjIFRoZSBuYW1lc3BhY2VzIGNhbiBjbGFzaCBoZXJlIGhlbmNlIHRoZSB0d28gc3RlcCByZXBsYWNlCitkZWYgZ2V0X2JpbmNvbmZpZ19tYW5nbGUoZCk6CisgICAgcyA9ICItZSAnJyIKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCk6CisgICAgICAgIG9wdGlvbmFsX3F1b3RlID0gciJcKFwiXD9cKSIKKyAgICAgICAgcyArPSAiIC1lICdzOj0lcyR7YmFzZV9saWJkaXJ9Oj1cXDFPRUJBU0VMSUJESVI6OyciICUgb3B0aW9uYWxfcXVvdGUKKyAgICAgICAgcyArPSAiIC1lICdzOj0lcyR7bGliZGlyfTo9XFwxT0VMSUJESVI6OyciICUgb3B0aW9uYWxfcXVvdGUKKyAgICAgICAgcyArPSAiIC1lICdzOj0lcyR7aW5jbHVkZWRpcn06PVxcMU9FSU5DRElSOjsnIiAlIG9wdGlvbmFsX3F1b3RlCisgICAgICAgIHMgKz0gIiAtZSAnczo9JXMke2RhdGFkaXJ9Oj1cXDFPRURBVEFESVI6JyIgJSBvcHRpb25hbF9xdW90ZQorICAgICAgICBzICs9ICIgLWUgJ3M6PSVzJHtwcmVmaXh9Lzo9XFwxT0VQUkVGSVgvOiciICUgb3B0aW9uYWxfcXVvdGUKKyAgICAgICAgcyArPSAiIC1lICdzOj0lcyR7ZXhlY19wcmVmaXh9Lzo9XFwxT0VFWEVDUFJFRklYLzonIiAlIG9wdGlvbmFsX3F1b3RlCisgICAgICAgIHMgKz0gIiAtZSAnczotTCR7bGliZGlyfTotTE9FTElCRElSOjsnIgorICAgICAgICBzICs9ICIgLWUgJ3M6LUkke2luY2x1ZGVkaXJ9Oi1JT0VJTkNESVI6OyciCisgICAgICAgIHMgKz0gIiAtZSAnczpPRUJBU0VMSUJESVI6JHtTVEFHSU5HX0JBU0VMSUJESVJ9OjsnIgorICAgICAgICBzICs9ICIgLWUgJ3M6T0VMSUJESVI6JHtTVEFHSU5HX0xJQkRJUn06OyciCisgICAgICAgIHMgKz0gIiAtZSAnczpPRUlOQ0RJUjoke1NUQUdJTkdfSU5DRElSfTo7JyIKKyAgICAgICAgcyArPSAiIC1lICdzOk9FREFUQURJUjoke1NUQUdJTkdfREFUQURJUn06JyIKKyAgICAgICAgcyArPSAiIC1lICdzOk9FUFJFRklYOiR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH06JyIKKyAgICAgICAgcyArPSAiIC1lICdzOk9FRVhFQ1BSRUZJWDoke1NUQUdJTkdfRElSX0hPU1R9JHtleGVjX3ByZWZpeH06JyIKKyAgICAgICAgcyArPSAiIC1lICdzOi1JJHtXT1JLRElSfTotSSR7U1RBR0lOR19JTkNESVJ9OiciCisgICAgICAgIHMgKz0gIiAtZSAnczotTCR7V09SS0RJUn06LUwke1NUQUdJTkdfTElCRElSfTonIgorICAgICAgICBpZiBiYi5kYXRhLmdldFZhcigiT0VfQklOQ09ORklHX0VYVFJBX01BTkdMRSIsIGQpOgorICAgICAgICAgICAgcyArPSBiYi5kYXRhLmdldFZhcigiT0VfQklOQ09ORklHX0VYVFJBX01BTkdMRSIsIGQpCisKKyAgICByZXR1cm4gcworCitCSU5DT05GSUdfR0xPQiA/PSAiKi1jb25maWciCisKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAiYmluY29uZmlnX3BhY2thZ2VfcHJlcHJvY2VzcyIKKworYmluY29uZmlnX3BhY2thZ2VfcHJlcHJvY2VzcyAoKSB7CisJZm9yIGNvbmZpZyBpbiBgZmluZCAke1BLR0R9IC1uYW1lICcke0JJTkNPTkZJR19HTE9CfSdgOyBkbworCQlzZWQgLWkgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0JBU0VMSUJESVJ9OiR7YmFzZV9saWJkaXJ9Omc7JyBcCisJCSAgICAtZSAnczoke1NUQUdJTkdfTElCRElSfToke2xpYmRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19JTkNESVJ9OiR7aW5jbHVkZWRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19EQVRBRElSfToke2RhdGFkaXJ9OicgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fToke3ByZWZpeH06JyBcCisgICAgICAgICAgICAgICAgICAgICRjb25maWcKKwlkb25lCisJZm9yIGxhZmlsZSBpbiBgZmluZCAke1BLR0R9IC1uYW1lICIqLmxhImAgOyBkbworCQlzZWQgLWkgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0JBU0VMSUJESVJ9OiR7YmFzZV9saWJkaXJ9Omc7JyBcCisJCSAgICAtZSAnczoke1NUQUdJTkdfTElCRElSfToke2xpYmRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19JTkNESVJ9OiR7aW5jbHVkZWRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19EQVRBRElSfToke2RhdGFkaXJ9OicgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fToke3ByZWZpeH06JyBcCisJCSAgICAkbGFmaWxlCisJZG9uZQkgICAgCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiYmluY29uZmlnX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworYmluY29uZmlnX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJZm9yIGNvbmZpZyBpbiBgZmluZCAke1N9IC1uYW1lICcke0JJTkNPTkZJR19HTE9CfSdgIGBmaW5kICR7Qn0gLW5hbWUgJyR7QklOQ09ORklHX0dMT0J9J2A7IGRvCisJCWNvbmZpZ25hbWU9YGJhc2VuYW1lICRjb25maWdgCisJCWluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorCQlzZWQgJHtAZ2V0X2JpbmNvbmZpZ19tYW5nbGUoZCl9ICRjb25maWcgPiAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LyRjb25maWduYW1lCisJCWNobW9kIHUreCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LyRjb25maWduYW1lCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmxhY2tsaXN0LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ibGFja2xpc3QuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDE0MWE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmxhY2tsaXN0LmJiY2xhc3MKQEAgLTAsMCArMSw0NSBAQAorIyBhbm9ueW1vdXMgc3VwcG9ydCBjbGFzcyBmcm9tIG9yaWdpbmFsbHkgZnJvbSBhbmdzdHJvbQorIyAKKyMgVG8gdXNlIHRoZSBibGFja2xpc3QsIGEgZGlzdHJpYnV0aW9uIHNob3VsZCBpbmNsdWRlIHRoaXMKKyMgY2xhc3MgaW4gdGhlIElOSEVSSVRfRElTVFJPCisjCisjIE5vIGxvbmdlciB1c2UgQU5HU1RST01fQkxBQ0tMSVNULCBpbnN0ZWFkIHVzZSBhIHRhYmxlIG9mCisjIHJlY2lwZXMgaW4gUE5CTEFDS0xJU1QKKyMKKyMgRmVhdHVyZXM6CisjCisjICogVG8gYWRkIGEgcGFja2FnZSB0byB0aGUgYmxhY2tsaXN0LCBzZXQ6CisjICAgUE5CTEFDS0xJU1RbcG5dID0gIm1lc3NhZ2UiCisjCisKKyMgQ29wZSB3aXRoIFBOQkxBQ0tMSVNUIGZsYWdzIGZvciBtdWx0aWxpYiBjYXNlCithZGRoYW5kbGVyIGJsYWNrbGlzdF9tdWx0aWxpYl9ldmVudGhhbmRsZXIKK2JsYWNrbGlzdF9tdWx0aWxpYl9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5Db25maWdQYXJzZWQiCitweXRob24gYmxhY2tsaXN0X211bHRpbGliX2V2ZW50aGFuZGxlcigpIHsKKyAgICBtdWx0aWxpYnMgPSBlLmRhdGEuZ2V0VmFyKCdNVUxUSUxJQlMnLCBUcnVlKQorICAgIGlmIG5vdCBtdWx0aWxpYnM6CisgICAgICAgIHJldHVybgorCisgICAgIyB0aGlzIGJsb2NrIGhhcyBiZWVuIGNvcGllZCBmcm9tIGJhc2UuYmJjbGFzcyBzbyBrZWVwIGl0IGluIHN5bmMKKyAgICBwcmVmaXhlcyA9IFtdCisgICAgZm9yIGV4dCBpbiBtdWx0aWxpYnMuc3BsaXQoKToKKyAgICAgICAgZWV4dCA9IGV4dC5zcGxpdCgnOicpCisgICAgICAgIGlmIGxlbihlZXh0KSA+IDEgYW5kIGVleHRbMF0gPT0gJ211bHRpbGliJzoKKyAgICAgICAgICAgIHByZWZpeGVzLmFwcGVuZChlZXh0WzFdKQorCisgICAgYmxhY2tsaXN0cyA9IGUuZGF0YS5nZXRWYXJGbGFncygnUE5CTEFDS0xJU1QnKSBvciB7fQorICAgIGZvciBwa2csIHJlYXNvbiBpbiBibGFja2xpc3RzLml0ZW1zKCk6CisgICAgICAgIGlmIHBrZy5lbmRzd2l0aCgoIi1uYXRpdmUiLCAiLWNyb3Nzc2RrIikpIG9yIHBrZy5zdGFydHN3aXRoKCgibmF0aXZlc2RrLSIsICJ2aXJ0dWFsL25hdGl2ZXNkay0iKSkgb3IgJ2Nyb3NzLWNhbmFkaWFuJyBpbiBwa2c6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgcCBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgIG5ld3BrZyA9IHAgKyAiLSIgKyBwa2cKKyAgICAgICAgICAgIGlmIG5vdCBlLmRhdGEuZ2V0VmFyRmxhZygnUE5CTEFDS0xJU1QnLCBuZXdwa2csIFRydWUpOgorICAgICAgICAgICAgICAgIGUuZGF0YS5zZXRWYXJGbGFnKCdQTkJMQUNLTElTVCcsIG5ld3BrZywgcmVhc29uKQorfQorCitweXRob24gKCkgeworICAgIGJsYWNrbGlzdCA9IGQuZ2V0VmFyRmxhZygnUE5CTEFDS0xJU1QnLCBkLmdldFZhcignUE4nLCBUcnVlKSwgVHJ1ZSkKKworICAgIGlmIGJsYWNrbGlzdDoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIlJlY2lwZSBpcyBibGFja2xpc3RlZDogJXMiICUgKGJsYWNrbGlzdCkpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ibHVldG9vdGguYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2JsdWV0b290aC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OGI0YWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ibHVldG9vdGguYmJjbGFzcwpAQCAtMCwwICsxLDE0IEBACisjIEF2b2lkIGNvZGUgZHVwbGljYXRpb24gaW4gYmx1ZXRvb3RoLWRlcGVuZGVudCByZWNpcGVzLgorCisjIERlZmluZSBhIHZhcmlhYmxlIHRoYXQgZXhwYW5kcyB0byB0aGUgcmVjaXBlIChwYWNrYWdlKSBwcm92aWRpbmcgY29yZQorIyBibHVldG9vdGggc3VwcG9ydCBvbiB0aGUgcGxhdGZvcm06CisjICIiIGlmIGJsdWV0b290aCBpcyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTCisjIGVsc2UgImJsdWV6NSIgaWYgYmx1ZXo1IGlzIGluIERJU1RST19GRUFUVVJFUworIyBlbHNlICJibHVlejQiCisKKyMgVXNlIHRoaXMgd2l0aDoKKyMgIGluaGVyaXQgYmx1ZXRvb3RoCisjICBQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnJHtCTFVFWn0nLCAnJywgZCl9CisjICBQQUNLQUdFQ09ORklHW2JsdWV6NF0gPSAiLS1lbmFibGUtYmx1ZXo0LC0tZGlzYWJsZS1ibHVlejQsYmx1ZXo0IgorCitCTFVFWiA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV6NScsICdibHVlejUnLCAnYmx1ZXo0JywgZCksICcnLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ib290LWRpcmVjdGRpc2suYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jvb3QtZGlyZWN0ZGlzay5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMGUyMWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ib290LWRpcmVjdGRpc2suYmJjbGFzcwpAQCAtMCwwICsxLDE5NCBAQAorIyBib290LWRpcmVjdGRpc2suYmJjbGFzcworIyAobG9vc2x5IGJhc2VkIG9mZiBib290aW1nLmJiY2xhc3MgQ29weXJpZ2h0IChDKSAyMDA0LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuKQorIworIyBDcmVhdGUgYW4gaW1hZ2Ugd2hpY2ggY2FuIGJlIHBsYWNlZCBkaXJlY3RseSBvbnRvIGEgaGFyZGRpc2sgdXNpbmcgZGQgYW5kIHRoZW4KKyMgYm9vdGVkLgorIworIyBUaGlzIHVzZXMgc3lzbGludXguIGV4dGxpbnV4IHdvdWxkIGhhdmUgYmVlbiBuaWNlIGJ1dCByZXF1aXJlZCB0aGUgZXh0Mi8zIAorIyBwYXJ0aXRpb24gdG8gYmUgbW91bnRlZC4gZ3J1YiByZXF1aXJlcyB0byBydW4gaXRzZWxmIGFzIHBhcnQgb2YgdGhlIGluc3RhbGwgCisjIHByb2Nlc3MuCisjCisjIFRoZSBlbmQgcmVzdWx0IGlzIGEgNTEyIGJvb3Qgc2VjdG9yIHBvcHVsYXRlZCB3aXRoIGFuIE1CUiBhbmQgcGFydGl0aW9uIHRhYmxlCisjIGZvbGxvd2VkIGJ5IGFuIG1zZG9zIGZhdDE2IHBhcnRpdGlvbiBjb250YWluaW5nIHN5c2xpbnV4IGFuZCBhIGxpbnV4IGtlcm5lbAorIyBjb21wbGV0ZWQgYnkgdGhlIGV4dDIvMyByb290ZnMuCisjCisjIFdlIGhhdmUgdG8gcHVzaCB0aGUgbXNkb3MgcGFyaXRpb24gdGFibGUgc2l6ZSA+IDE2TUIgc28gZmF0IDE2IGlzIHVzZWQgYXMgcGFydGVkCisjIHdvbid0IHRvdWNoIGZhdDEyIHBhcnRpdGlvbnMuCisKKyMgRXh0ZXJuYWwgdmFyaWFibGVzIG5lZWRlZAorCisjICR7Uk9PVEZTfSAtIHRoZSByb290ZnMgaW1hZ2UgdG8gaW5jb3Jwb3JhdGUKKworZG9fYm9vdGRpcmVjdGRpc2tbZGVwZW5kc10gKz0gImRvc2ZzdG9vbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwva2VybmVsOmRvX2RlcGxveSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzbGludXg6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzbGludXgtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRlZC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290ICIKKworUEFDS0FHRVMgPSAiICIKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorCitCT09URERfVk9MVU1FX0lEICAgPz0gImJvb3QiCitCT09URERfRVhUUkFfU1BBQ0UgPz0gIjE2Mzg0IgorCitFRkkgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiZWZpIiwgIjEiLCAiMCIsIGQpfSIKK0VGSV9QUk9WSURFUiA/PSAiZ3J1Yi1lZmkiCitFRklfQ0xBU1MgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiZWZpIiwgIiR7RUZJX1BST1ZJREVSfSIsICIiLCBkKX0iCisKKyMgSW5jbHVkZSBsZWdhY3kgYm9vdCBpZiBNQUNISU5FX0ZFQVRVUkVTIGluY2x1ZGVzICJwY2Jpb3MiIG9yIGlmIGl0IGRvZXMgbm90CisjIGNvbnRhaW4gImVmaSIuIFRoaXMgd2F5IGxlZ2FjeSBpcyBzdXBwb3J0ZWQgYnkgZGVmYXVsdCBpZiBuZWl0aGVyIGlzCisjIHNwZWNpZmllZCwgbWFpbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGJlaGF2aW9yLgorZGVmIHBjYmlvcyhkKToKKyAgICBwY2Jpb3MgPSBiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJwY2Jpb3MiLCAiMSIsICIwIiwgZCkKKyAgICBpZiBwY2Jpb3MgPT0gIjAiOgorICAgICAgICBwY2Jpb3MgPSBiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiMCIsICIxIiwgZCkKKyAgICByZXR1cm4gcGNiaW9zCisKK2RlZiBwY2Jpb3NfY2xhc3MoZCk6CisgICAgaWYgZC5nZXRWYXIoIlBDQklPUyIsIFRydWUpID09ICIxIjoKKyAgICAgICAgcmV0dXJuICJzeXNsaW51eCIKKyAgICByZXR1cm4gIiIKKworUENCSU9TID0gIiR7QHBjYmlvcyhkKX0iCitQQ0JJT1NfQ0xBU1MgPSAiJHtAcGNiaW9zX2NsYXNzKGQpfSIKKworaW5oZXJpdCAke1BDQklPU19DTEFTU30KK2luaGVyaXQgJHtFRklfQ0xBU1N9CisKKyMgR2V0IHRoZSBidWlsZF9zeXNsaW51eF9jZmcoKSBmdW5jdGlvbiBmcm9tIHRoZSBzeXNsaW51eCBjbGFzcworCitBVVRPX1NZU0xJTlVYQ0ZHID0gIjEiCitESVNLX1NJR05BVFVSRSA/PSAiJHtESVNLX1NJR05BVFVSRV9HRU5FUkFURUR9IgorU1lTTElOVVhfUk9PVCA/PSAicm9vdD0vZGV2L3NkYTIiCitTWVNMSU5VWF9USU1FT1VUID89ICIxMCIKKworSVNfVk0gPSAnJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCJJTUFHRV9GU1RZUEVTIiwgWyJ2bWRrIiwgInZkaSIsICJxY293MiJdLCAidHJ1ZSIsICJmYWxzZSIsIGQpfScKKworYm9vdF9kaXJlY3RfcG9wdWxhdGUoKSB7CisJZGVzdD0kMQorCWluc3RhbGwgLWQgJGRlc3QKKworCSMgSW5zdGFsbCBiekltYWdlLCBpbml0cmQsIGFuZCByb290ZnMuaW1nIGluIERFU1QgZm9yIGFsbCBsb2FkZXJzIHRvIHVzZS4KKwlpZiBbIC1lICR7REVQTE9ZX0RJUl9JTUFHRX0vYnpJbWFnZSBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDY0NCAke0RFUExPWV9ESVJfSU1BR0V9L2J6SW1hZ2UgJGRlc3Qvdm1saW51egorCWZpCisKKwkjIGluaXRyZCBpcyBtYWRlIG9mIGNvbmNhdGVuYXRpb24gb2YgbXVsdGlwbGUgZmlsZXN5c3RlbSBpbWFnZXMKKwlpZiBbIC1uICIke0lOSVRSRH0iIF07IHRoZW4KKwkJcm0gLWYgJGRlc3QvaW5pdHJkCisJCWZvciBmcyBpbiAke0lOSVRSRH0KKwkJZG8KKwkJCWlmIFsgLXMgIiR7ZnN9IiBdOyB0aGVuCisJCQkJY2F0ICR7ZnN9ID4+ICRkZXN0L2luaXRyZAorCQkJZWxzZQorCQkJCWJiZmF0YWwgIiR7ZnN9IGlzIGludmFsaWQuIGluaXRyZCBpbWFnZSBjcmVhdGlvbiBmYWlsZWQuIgorCQkJZmkKKwkJZG9uZQorCQljaG1vZCAwNjQ0ICRkZXN0L2luaXRyZAorCWZpCit9CisKK2J1aWxkX2Jvb3RfZGQoKSB7CisJSERERElSPSIke1N9L2hkZC9ib290IgorCUhERElNRz0iJHtTfS9oZGQuaW1hZ2UiCisJSU1BR0U9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmhkZGRpcmVjdAorCisJYm9vdF9kaXJlY3RfcG9wdWxhdGUgJEhERERJUgorCisJaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdOyB0aGVuCisJCXN5c2xpbnV4X2hkZGltZ19wb3B1bGF0ZSAkSERERElSCisJZmkKKwlpZiBbICIke0VGSX0iID0gIjEiIF07IHRoZW4KKwkJZWZpX2hkZGltZ19wb3B1bGF0ZSAkSERERElSCisJZmkKKworCWlmIFsgIiR7SVNfVk19IiA9ICJ0cnVlIiBdOyB0aGVuCisJCWlmIFsgIngke0FVVE9fU1lTTElOVVhNRU5VfSIgPSAieDEiIF0gOyB0aGVuCisJCQlpbnN0YWxsIC1tIDA2NDQgJHtTVEFHSU5HX0RJUn0vJHtNQUNISU5FfS91c3Ivc2hhcmUvc3lzbGludXgvdmVzYW1lbnUuYzMyICRIRERESVIvJHtTWVNMSU5VWERJUn0vCisJCQlpZiBbICJ4JHtTWVNMSU5VWF9TUExBU0h9IiAhPSAieCIgXSA7IHRoZW4KKwkJCQlpbnN0YWxsIC1tIDA2NDQgJHtTWVNMSU5VWF9TUExBU0h9ICRIRERESVIvJHtTWVNMSU5VWERJUn0vc3BsYXNoLmxzcworCQkJZmkKKwkJZmkKKwlmaQorCisJQkxPQ0tTPWBkdSAtYmtzICRIRERESVIgfCBjdXQgLWYgMWAKKwlCTE9DS1M9YGV4cHIgJEJMT0NLUyArICR7Qk9PVEREX0VYVFJBX1NQQUNFfWAKKworCSMgRW5zdXJlIHRvdGFsIHNlY3RvcnMgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHNlY3RvcnMgcGVyCisJIyB0cmFjayBvciBtY29weSB3aWxsIGNvbXBsYWluLiBTZWN0b3JzIGFyZSA1MTIgYnl0ZXMsIGFuZCB3ZQorCSMgZ2VuZXJhdGUgaW1hZ2VzIHdpdGggMzIgc2VjdG9ycyBwZXIgdHJhY2suIFRoaXMgY2FsY3VsYXRpb24gaXMKKwkjIGRvbmUgaW4gYmxvY2tzLCB0aHVzIHRoZSBtb2QgYnkgMTYgaW5zdGVhZCBvZiAzMi4KKwlCTE9DS1M9JChleHByICRCTE9DS1MgKyAkKGV4cHIgMTYgLSAkKGV4cHIgJEJMT0NLUyAlIDE2KSkpCisKKwlta2Rvc2ZzIC1uICR7Qk9PVEREX1ZPTFVNRV9JRH0gLVMgNTEyIC1DICRIRERJTUcgJEJMT0NLUyAKKwltY29weSAtaSAkSERESU1HIC1zICRIRERESVIvKiA6Oi8KKworCWlmIFsgIiR7UENCSU9TfSIgPSAiMSIgXTsgdGhlbgorCQlzeXNsaW51eF9oZGRkaXJlY3RfaW5zdGFsbCAkSERESU1HCisJZmkJCisJY2htb2QgNjQ0ICRIRERJTUcKKworCVJPT1RGU0JMT0NLUz1gZHUgLUxia3MgJHtST09URlN9IHwgY3V0IC1mIDFgCisJVE9UQUxTSVpFPWBleHByICRCTE9DS1MgKyAkUk9PVEZTQkxPQ0tTYAorCUVORDE9YGV4cHIgJEJMT0NLUyBcKiAxMDI0YAorCUVORDI9YGV4cHIgJEVORDEgKyA1MTJgCisJRU5EMz1gZXhwciBcKCAkUk9PVEZTQkxPQ0tTIFwqIDEwMjQgXCkgKyAkRU5EMWAKKworCWVjaG8gJFJPT1RGU0JMT0NLUyAkVE9UQUxTSVpFICRFTkQxICRFTkQyICRFTkQzCisJcm0gLXJmICRJTUFHRQorCWRkIGlmPS9kZXYvemVybyBvZj0kSU1BR0UgYnM9MTAyNCBzZWVrPSRUT1RBTFNJWkUgY291bnQ9MQorCisJcGFydGVkICRJTUFHRSBta2xhYmVsIG1zZG9zCisJcGFydGVkICRJTUFHRSBta3BhcnQgcHJpbWFyeSBmYXQxNiAwICR7RU5EMX1CCisJcGFydGVkICRJTUFHRSB1bml0IEIgbWtwYXJ0IHByaW1hcnkgZXh0MiAke0VORDJ9QiAke0VORDN9QgorCXBhcnRlZCAkSU1BR0Ugc2V0IDEgYm9vdCBvbiAKKworCXBhcnRlZCAkSU1BR0UgcHJpbnQKKworCWF3ayAiQkVHSU4geyBwcmludGYgXCIkKGVjaG8gJHtESVNLX1NJR05BVFVSRX0gfCBmb2xkIC13IDIgfCB0YWMgfCBwYXN0ZSAtc2QgJycgfCBzZWQgJ3MvXCguLlwpL1xceCYvZycpXCIgfSIgfCBcCisJCWRkIG9mPSRJTUFHRSBicz0xIHNlZWs9NDQwIGNvbnY9bm90cnVuYworCisJT0ZGU0VUPWBleHByICRFTkQyIC8gNTEyYAorCWlmIFsgIiR7UENCSU9TfSIgPSAiMSIgXTsgdGhlbgorCQlkZCBpZj0ke1NUQUdJTkdfREFUQURJUn0vc3lzbGludXgvbWJyLmJpbiBvZj0kSU1BR0UgY29udj1ub3RydW5jCisJZmkKKworCWRkIGlmPSRIRERJTUcgb2Y9JElNQUdFIGNvbnY9bm90cnVuYyBzZWVrPTEgYnM9NTEyCisJZGQgaWY9JHtST09URlN9IG9mPSRJTUFHRSBjb252PW5vdHJ1bmMgc2Vlaz0kT0ZGU0VUIGJzPTUxMgorCisJY2QgJHtERVBMT1lfRElSX0lNQUdFfQorCXJtIC1mICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmhkZGRpcmVjdAorCWxuIC1zICR7SU1BR0VfTkFNRX0uaGRkZGlyZWN0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmhkZGRpcmVjdAorfSAKKworcHl0aG9uIGRvX2Jvb3RkaXJlY3RkaXNrKCkgeworICAgIHZhbGlkYXRlX2Rpc2tfc2lnbmF0dXJlKGQpCisgICAgaWYgZC5nZXRWYXIoIlBDQklPUyIsIFRydWUpID09ICIxIjoKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdidWlsZF9zeXNsaW51eF9jZmcnLCBkKQorICAgIGlmIGQuZ2V0VmFyKCJFRkkiLCBUcnVlKSA9PSAiMSI6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnYnVpbGRfZWZpX2NmZycsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdidWlsZF9ib290X2RkJywgZCkKK30KKworZGVmIGdlbmVyYXRlX2Rpc2tfc2lnbmF0dXJlKCk6CisgICAgaW1wb3J0IHV1aWQKKworICAgIHNpZ25hdHVyZSA9IHN0cih1dWlkLnV1aWQ0KCkpWzo4XQorCisgICAgaWYgc2lnbmF0dXJlICE9ICcwMDAwMDAwMCc6CisgICAgICAgIHJldHVybiBzaWduYXR1cmUKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gJ2ZmZmZmZmZmJworCitkZWYgdmFsaWRhdGVfZGlza19zaWduYXR1cmUoZCk6CisgICAgaW1wb3J0IHJlCisKKyAgICBkaXNrX3NpZ25hdHVyZSA9IGQuZ2V0VmFyKCJESVNLX1NJR05BVFVSRSIsIFRydWUpCisKKyAgICBpZiBub3QgcmUubWF0Y2gocideWzAtOWEtZkEtRl17OH0kJywgZGlza19zaWduYXR1cmUpOgorICAgICAgICBiYi5mYXRhbCgiRElTS19TSUdOQVRVUkUgJyVzJyBtdXN0IGJlIGFuIDggZGlnaXQgaGV4IHN0cmluZyIgJSBkaXNrX3NpZ25hdHVyZSkKKworRElTS19TSUdOQVRVUkVfR0VORVJBVEVEIDo9ICIke0BnZW5lcmF0ZV9kaXNrX3NpZ25hdHVyZSgpfSIKKworYWRkdGFzayBib290ZGlyZWN0ZGlzayBiZWZvcmUgZG9fYnVpbGQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jvb3RpbWcuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jvb3RpbWcuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzlkMGI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYm9vdGltZy5iYmNsYXNzCkBAIC0wLDAgKzEsMzAzIEBACisjIENvcHlyaWdodCAoQykgMjAwNCwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQorCisjIENyZWF0ZXMgYSBib290YWJsZSBpbWFnZSB1c2luZyBzeXNsaW51eCwgeW91ciBrZXJuZWwgYW5kIGFuIG9wdGlvbmFsCisjIGluaXRyZAorCisjCisjIEVuZCByZXN1bHQgaXMgdHdvIHRoaW5nczoKKyMKKyMgMS4gQSAuaGRkaW1nIGZpbGUgd2hpY2ggaXMgYW4gbXNkb3MgZmlsZXN5c3RlbSBjb250YWluaW5nIHN5c2xpbnV4LCBhIGtlcm5lbCwKKyMgYW4gaW5pdHJkIGFuZCBhIHJvb3RmcyBpbWFnZS4gVGhlc2UgY2FuIGJlIHdyaXR0ZW4gdG8gaGFyZGRpc2tzIGRpcmVjdGx5IGFuZAorIyBhbHNvIGJvb3RlZCBvbiBVU0IgZmxhc2ggZGlza3MgKHdyaXRlIHRoZW0gdGhlcmUgd2l0aCBkZCkuCisjCisjIDIuIEEgQ0QgLmlzbyBpbWFnZQorCisjIEJvb3QgcHJvY2VzcyBpcyB0aGF0IHRoZSBpbml0cmQgd2lsbCBib290IGFuZCBwcm9jZXNzIHdoaWNoIGxhYmVsIHdhcyBzZWxlY3RlZAorIyBpbiBzeXNsaW51eC4gQWN0aW9ucyBiYXNlZCBvbiB0aGUgbGFiZWwgYXJlIHRoZW4gcGVyZm9ybWVkIChlLmcuIGluc3RhbGxpbmcgdG8KKyMgYW4gaGRkKQorCisjIEV4dGVybmFsIHZhcmlhYmxlcyAoYWxzbyB1c2VkIGJ5IHN5c2xpbnV4LmJiY2xhc3MpCisjICR7SU5JVFJEfSAtIGluZGljYXRlcyBhIGxpc3Qgb2YgZmlsZXN5c3RlbSBpbWFnZXMgdG8gY29uY2F0ZW5hdGUgYW5kIHVzZSBhcyBhbiBpbml0cmQgKG9wdGlvbmFsKQorIyAke0NPTVBSRVNTSVNPfSAtIFRyYW5zcGFyZW50IGNvbXByZXNzIElTTywgcmVkdWNlIHNpemUgfjQwJSBpZiBzZXQgdG8gMQorIyAke05PSVNPfSAgLSBza2lwIGJ1aWxkaW5nIHRoZSBJU08gaW1hZ2UgaWYgc2V0IHRvIDEKKyMgJHtOT0hERH0gIC0gc2tpcCBidWlsZGluZyB0aGUgSEREIGltYWdlIGlmIHNldCB0byAxCisjICR7SERESU1HX0lEfSAtIEZBVCBpbWFnZSB2b2x1bWUtaWQKKyMgJHtST09URlN9IC0gaW5kaWNhdGVzIGEgZmlsZXN5c3RlbSBpbWFnZSB0byBpbmNsdWRlIGFzIHRoZSByb290IGZpbGVzeXN0ZW0gKG9wdGlvbmFsKQorCitkb19ib290aW1nW2RlcGVuZHNdICs9ICJkb3Nmc3Rvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG10b29scy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICBjZHJ0b29scy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsL2tlcm5lbDpkb19kZXBsb3kgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtAb2UudXRpbHMuaWZlbHNlKGQuZ2V0VmFyKCdDT01QUkVTU0lTTycsIEZhbHNlKSwnemlzb2ZzLXRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JywnJyl9IgorCitQQUNLQUdFUyA9ICIgIgorRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK0hERERJUiA9ICIke1N9L2hkZGltZyIKK0lTT0RJUiA9ICIke1N9L2lzbyIKK0VGSUlNR0RJUiA9ICIke1N9L2VmaV9pbWciCitDT01QQUNUX0lTT0RJUiA9ICIke1N9L2lzby56IgorQ09NUFJFU1NJU08gPz0gIjAiCisKK0JPT1RJTUdfVk9MVU1FX0lEICAgPz0gImJvb3QiCitCT09USU1HX0VYVFJBX1NQQUNFID89ICI1MTIiCisKK0VGSSA9ICIke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiMSIsICIwIiwgZCl9IgorRUZJX1BST1ZJREVSID89ICJncnViLWVmaSIKK0VGSV9DTEFTUyA9ICIke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiJHtFRklfUFJPVklERVJ9IiwgIiIsIGQpfSIKKworS0VSTkVMX0lNQUdFVFlQRSA/Pz0gImJ6SW1hZ2UiCisKKyMgSW5jbHVkZSBsZWdhY3kgYm9vdCBpZiBNQUNISU5FX0ZFQVRVUkVTIGluY2x1ZGVzICJwY2Jpb3MiIG9yIGlmIGl0IGRvZXMgbm90CisjIGNvbnRhaW4gImVmaSIuIFRoaXMgd2F5IGxlZ2FjeSBpcyBzdXBwb3J0ZWQgYnkgZGVmYXVsdCBpZiBuZWl0aGVyIGlzCisjIHNwZWNpZmllZCwgbWFpbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGJlaGF2aW9yLgorZGVmIHBjYmlvcyhkKToKKyAgICBwY2Jpb3MgPSBiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJwY2Jpb3MiLCAiMSIsICIwIiwgZCkKKyAgICBpZiBwY2Jpb3MgPT0gIjAiOgorICAgICAgICBwY2Jpb3MgPSBiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiMCIsICIxIiwgZCkKKyAgICByZXR1cm4gcGNiaW9zCisKK1BDQklPUyA9ICIke0BwY2Jpb3MoZCl9IgorCisjIFRoZSBzeXNsaW51eCBpcyByZXF1aXJlZCBmb3IgdGhlIGlzb2h5YnJpZCBjb21tYW5kIGFuZCBib290IGNhdGFsb2cKK2luaGVyaXQgc3lzbGludXgKK2luaGVyaXQgJHtFRklfQ0xBU1N9CisKK3BvcHVsYXRlKCkgeworCURFU1Q9JDEKKwlpbnN0YWxsIC1kICR7REVTVH0KKworCSMgSW5zdGFsbCBrZXJuZWwsIGluaXRyZCwgYW5kIHJvb3Rmcy5pbWcgaW4gREVTVCBmb3IgYWxsIGxvYWRlcnMgdG8gdXNlLgorCWluc3RhbGwgLW0gMDY0NCAke0RFUExPWV9ESVJfSU1BR0V9LyR7S0VSTkVMX0lNQUdFVFlQRX0gJHtERVNUfS92bWxpbnV6CisJCisJIyBpbml0cmQgaXMgbWFkZSBvZiBjb25jYXRlbmF0aW9uIG9mIG11bHRpcGxlIGZpbGVzeXN0ZW0gaW1hZ2VzCisJaWYgWyAtbiAiJHtJTklUUkR9IiBdOyB0aGVuCisJCXJtIC1mICR7REVTVH0vaW5pdHJkCisJCWZvciBmcyBpbiAke0lOSVRSRH0KKwkJZG8KKwkJCWlmIFsgLXMgIiR7ZnN9IiBdOyB0aGVuCisJCQkJY2F0ICR7ZnN9ID4+ICR7REVTVH0vaW5pdHJkCisJCQllbHNlCisJCQkJYmJmYXRhbCAiJHtmc30gaXMgaW52YWxpZC4gaW5pdHJkIGltYWdlIGNyZWF0aW9uIGZhaWxlZC4iCisJCQlmaQorCQlkb25lCisJCWNobW9kIDA2NDQgJHtERVNUfS9pbml0cmQKKwlmaQorCisJaWYgWyAtbiAiJHtST09URlN9IiBdICYmIFsgLXMgIiR7Uk9PVEZTfSIgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgJHtST09URlN9ICR7REVTVH0vcm9vdGZzLmltZworCWZpCisKK30KKworYnVpbGRfaXNvKCkgeworCSMgT25seSBjcmVhdGUgYW4gSVNPIGlmIHdlIGhhdmUgYW4gSU5JVFJEIGFuZCBOT0lTTyB3YXMgbm90IHNldAorCWlmIFsgLXogIiR7SU5JVFJEfSIgXSB8fCBbICIke05PSVNPfSIgPSAiMSIgXTsgdGhlbgorCQliYm5vdGUgIklTTyBpbWFnZSB3aWxsIG5vdCBiZSBjcmVhdGVkLiIKKwkJcmV0dXJuCisJZmkKKwkjICR7SU5JVFJEfSBpcyBhIGxpc3Qgb2YgbXVsdGlwbGUgZmlsZXN5c3RlbSBpbWFnZXMKKwlmb3IgZnMgaW4gJHtJTklUUkR9CisJZG8KKwkJaWYgWyAhIC1zICIke2ZzfSIgXTsgdGhlbgorCQkJYmJub3RlICJJU08gaW1hZ2Ugd2lsbCBub3QgYmUgY3JlYXRlZC4gJHtmc30gaXMgaW52YWxpZC4iCisJCQlyZXR1cm4KKwkJZmkKKwlkb25lCisKKworCXBvcHVsYXRlICR7SVNPRElSfQorCisJaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdOyB0aGVuCisJCXN5c2xpbnV4X2lzb19wb3B1bGF0ZSAke0lTT0RJUn0KKwlmaQorCWlmIFsgIiR7RUZJfSIgPSAiMSIgXTsgdGhlbgorCQllZmlfaXNvX3BvcHVsYXRlICR7SVNPRElSfQorCQlidWlsZF9mYXRfaW1nICR7RUZJSU1HRElSfSAke0lTT0RJUn0vZWZpLmltZworCWZpCisKKwkjIEVGSSBvbmx5CisJaWYgWyAiJHtQQ0JJT1N9IiAhPSAiMSIgXSAmJiBbICIke0VGSX0iID0gIjEiIF0gOyB0aGVuCisJCSMgV29yayBhcm91bmQgYnVnIGluIGlzb2h5YnJpZCB3aGVyZSBpdCByZXF1aXJlcyBpc29saW51eC5iaW4KKwkJIyBJbiB0aGUgYm9vdCBjYXRhbG9nLCBldmVuIHRob3VnaCBpdCBpcyBub3QgdXNlZAorCQlta2RpciAtcCAke0lTT0RJUn0vJHtJU09MSU5VWERJUn0KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC9pc29saW51eC5iaW4gJHtJU09ESVJ9JHtJU09MSU5VWERJUn0KKwlmaQorCisJaWYgWyAiJHtDT01QUkVTU0lTT30iID0gIjEiIF0gOyB0aGVuCisJCSMgY3JlYXRlIGNvbXBhY3QgZGlyZWN0b3J5LCBjb21wcmVzcyBpc28KKwkJbWtkaXIgLXAgJHtDT01QQUNUX0lTT0RJUn0KKwkJbWt6ZnRyZWUgLXogOSAtcCA0IC1GICR7SVNPRElSfS9yb290ZnMuaW1nICR7Q09NUEFDVF9JU09ESVJ9L3Jvb3Rmcy5pbWcKKworCQkjIG1vdmUgY29tcGFjdCBpc28gdG8gaXNvLCB0aGVuIHJlbW92ZSBjb21wYWN0IGRpcmVjdG9yeQorCQltdiAke0NPTVBBQ1RfSVNPRElSfS9yb290ZnMuaW1nICR7SVNPRElSfS9yb290ZnMuaW1nCisJCXJtIC1SZiAke0NPTVBBQ1RfSVNPRElSfQorCQlta2lzb2ZzX2NvbXByZXNzX29wdHM9Ii1SIC16IC1EIC1sIgorCWVsc2UKKwkJbWtpc29mc19jb21wcmVzc19vcHRzPSItciIKKwlmaQorCisJIyBDaGVjayB0aGUgc2l6ZSBvZiAke0lTT0RJUn0vcm9vdGZzLmltZywgdXNlIG1raXNvZnMgLWlzby1sZXZlbCAzCisJIyB3aGVuIGl0IGV4Y2VlZHMgMy44R0IsIHRoZSBzcGVjaWZpY2F0aW9uIGlzIDRHIC0gMSBieXRlcywgd2UgbmVlZAorCSMgbGVhdmUgYSBmZXcgc3BhY2UgZm9yIG90aGVyIGZpbGVzLgorCW1raXNvZnNfaXNvX2xldmVsPSIiCisKKyAgICAgICAgaWYgWyAtbiAiJHtST09URlN9IiBdICYmIFsgLXMgIiR7Uk9PVEZTfSIgXTsgdGhlbgorCQlyb290ZnNfaW1nX3NpemU9YHN0YXQgLWMgJyVzJyAke0lTT0RJUn0vcm9vdGZzLmltZ2AKKwkJIyA0MDgwMjE4OTMxID0gMy44ICogMTAyNCAqIDEwMjQgKiAxMDI0CisJCWlmIFsgJHJvb3Rmc19pbWdfc2l6ZSAtZ3QgNDA4MDIxODkzMSBdOyB0aGVuCisJCQliYm5vdGUgIiR7SVNPRElSfS9yb290ZnMuaW1nIGV4ZWNlZWRzIDMuOEdCLCB1c2luZyAnLWlzby1sZXZlbCAzJyBmb3IgbWtpc29mcyIKKwkJCW1raXNvZnNfaXNvX2xldmVsPSItaXNvLWxldmVsIDMiCisJCWZpCisJZmkKKworCWlmIFsgIiR7UENCSU9TfSIgPSAiMSIgXSAmJiBbICIke0VGSX0iICE9ICIxIiBdIDsgdGhlbgorCQkjIFBDQklPUyBvbmx5IG1lZGlhCisJCW1raXNvZnMgLVYgJHtCT09USU1HX1ZPTFVNRV9JRH0gXAorCQkgICAgICAgIC1vICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5pc28gXAorCQkJLWIgJHtJU09fQk9PVElNR30gLWMgJHtJU09fQk9PVENBVH0gXAorCQkJJG1raXNvZnNfY29tcHJlc3Nfb3B0cyBcCisJCQkke01LSVNPRlNfT1BUSU9OU30gJG1raXNvZnNfaXNvX2xldmVsICR7SVNPRElSfQorCWVsc2UKKwkJIyBFRkkgb25seSBPUiBFRkkrUENCSU9TCisJCW1raXNvZnMgLUEgJHtCT09USU1HX1ZPTFVNRV9JRH0gLVYgJHtCT09USU1HX1ZPTFVNRV9JRH0gXAorCQkgICAgICAgIC1vICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5pc28gXAorCQkJLWIgJHtJU09fQk9PVElNR30gLWMgJHtJU09fQk9PVENBVH0gXAorCQkJJG1raXNvZnNfY29tcHJlc3Nfb3B0cyAke01LSVNPRlNfT1BUSU9OU30gJG1raXNvZnNfaXNvX2xldmVsIFwKKwkJCS1lbHRvcml0by1hbHQtYm9vdCAtZWx0b3JpdG8tcGxhdGZvcm0gZWZpIFwKKwkJCS1iIGVmaS5pbWcgLW5vLWVtdWwtYm9vdCBcCisJCQkke0lTT0RJUn0KKwkJaXNvaHlicmlkX2FyZ3M9Ii11IgorCWZpCisKKwlpc29oeWJyaWQgJGlzb2h5YnJpZF9hcmdzICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5pc28KKworCWNkICR7REVQTE9ZX0RJUl9JTUFHRX0KKwlybSAtZiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS5pc28KKwlsbiAtcyAke0lNQUdFX05BTUV9LmlzbyAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS5pc28KK30KKworYnVpbGRfZmF0X2ltZygpIHsKKwlGQVRTT1VSQ0VESVI9JDEKKwlGQVRJTUc9JDIKKworCSMgQ2FsY3VsYXRlIHRoZSBzaXplIHJlcXVpcmVkIGZvciB0aGUgZmluYWwgaW1hZ2UgaW5jbHVkaW5nIHRoZQorCSMgZGF0YSBhbmQgZmlsZXN5c3RlbSBvdmVyaGVhZC4KKwkjIFNlY3RvcnM6IDUxMiBieXRlcworCSMgIEJsb2NrczogMTAyNCBieXRlcworCisJIyBEZXRlcm1pbmUgdGhlIHNlY3RvciBjb3VudCBqdXN0IGZvciB0aGUgZGF0YQorCVNFQ1RPUlM9JChleHByICQoZHUgLS1hcHBhcmVudC1zaXplIC1rcyAke0ZBVFNPVVJDRURJUn0gfCBjdXQgLWYgMSkgXCogMikKKworCSMgQWNjb3VudCBmb3IgdGhlIGZpbGVzeXN0ZW0gb3ZlcmhlYWQuIFRoaXMgaW5jbHVkZXMgZGlyZWN0b3J5CisJIyBlbnRyaWVzIGluIHRoZSBjbHVzdGVycyBhcyB3ZWxsIGFzIHRoZSBGQVQgaXRzZWxmLgorCSMgQXNzdW1wdGlvbnM6CisJIyAgIEZBVDMyICgxMiBvciAxNiBtYXkgYmUgc2VsZWN0ZWQgYnkgbWtkb3NmcywgYnV0IHRoZSBleHRyYQorCSMgICBwYWRkaW5nIHdpbGwgYmUgbWluaW1hbCBvbiB0aG9zZSBzbWFsbGVyIGltYWdlcyBhbmQgbm90CisJIyAgIHdvcnRoIHRoZSBsb2dpYyBoZXJlIHRvIGNhY2x1bGF0ZSB0aGUgc21hbGxlciBGQVQgc2l6ZXMpCisJIyAgIDwgMTYgZW50cmllcyBwZXIgZGlyZWN0b3J5CisJIyAgIDguMyBmaWxlbmFtZXMgb25seQorCisJIyAzMiBieXRlcyBwZXIgZGlyIGVudHJ5CisJRElSX0JZVEVTPSQoZXhwciAkKGZpbmQgJHtGQVRTT1VSQ0VESVJ9IHwgdGFpbCAtbiArMiB8IHdjIC1sKSBcKiAzMikKKwkjIDMyIGJ5dGVzIGZvciBldmVyeSBlbmQtb2YtZGlyZWN0b3J5IGRpciBlbnRyeQorCURJUl9CWVRFUz0kKGV4cHIgJERJUl9CWVRFUyArICQoZXhwciAkKGZpbmQgJHtGQVRTT1VSQ0VESVJ9IC10eXBlIGQgfCB0YWlsIC1uICsyIHwgd2MgLWwpIFwqIDMyKSkKKwkjIDQgYnl0ZXMgcGVyIEZBVCBlbnRyeSBwZXIgc2VjdG9yIG9mIGRhdGEKKwlGQVRfQllURVM9JChleHByICRTRUNUT1JTIFwqIDQpCisJIyA0IGJ5dGVzIHBlciBGQVQgZW50cnkgcGVyIGVuZC1vZi1jbHVzdGVyIGxpc3QKKwlGQVRfQllURVM9JChleHByICRGQVRfQllURVMgKyAkKGV4cHIgJChmaW5kICR7RkFUU09VUkNFRElSfSAtdHlwZSBkIHwgdGFpbCAtbiArMiB8IHdjIC1sKSBcKiA0KSkKKworCSMgVXNlIGEgY2VpbGluZyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgRlMgb3ZlcmhlYWQgaW4gc2VjdG9ycworCURJUl9TRUNUT1JTPSQoZXhwciAkKGV4cHIgJERJUl9CWVRFUyArIDUxMSkgLyA1MTIpCisJIyBUaGVyZSBhcmUgdHdvIEZBVHMgb24gdGhlIGltYWdlCisJRkFUX1NFQ1RPUlM9JChleHByICQoZXhwciAkKGV4cHIgJEZBVF9CWVRFUyArIDUxMSkgLyA1MTIpIFwqIDIpCisJU0VDVE9SUz0kKGV4cHIgJFNFQ1RPUlMgKyAkKGV4cHIgJERJUl9TRUNUT1JTICsgJEZBVF9TRUNUT1JTKSkKKworCSMgRGV0ZXJtaW5lIHRoZSBmaW5hbCBzaXplIGluIGJsb2NrcyBhY2NvdW50aW5nIGZvciBzb21lIHBhZGRpbmcKKwlCTE9DS1M9JChleHByICQoZXhwciAkU0VDVE9SUyAvIDIpICsgJHtCT09USU1HX0VYVFJBX1NQQUNFfSkKKworCSMgRW5zdXJlIHRvdGFsIHNlY3RvcnMgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHNlY3RvcnMgcGVyCisJIyB0cmFjayBvciBtY29weSB3aWxsIGNvbXBsYWluLiBTZWN0b3JzIGFyZSA1MTIgYnl0ZXMsIGFuZCB3ZQorCSMgZ2VuZXJhdGUgaW1hZ2VzIHdpdGggMzIgc2VjdG9ycyBwZXIgdHJhY2suIFRoaXMgY2FsY3VsYXRpb24gaXMKKwkjIGRvbmUgaW4gYmxvY2tzLCB0aHVzIHRoZSBtb2QgYnkgMTYgaW5zdGVhZCBvZiAzMi4KKwlCTE9DS1M9JChleHByICRCTE9DS1MgKyAkKGV4cHIgMTYgLSAkKGV4cHIgJEJMT0NLUyAlIDE2KSkpCisKKwkjIG1rZG9zZnMgd2lsbCBzb21ldGltZXMgdXNlIEZBVDE2IHdoZW4gaXQgaXMgbm90IGFwcHJvcHJpYXRlLAorCSMgcmVzdWx0aW5nIGluIGEgYm9vdCBmYWlsdXJlIGZyb20gU1lTTElOVVguIFVzZSBGQVQzMiBmb3IKKwkjIGltYWdlcyBsYXJnZXIgdGhhbiA1MTJNQiwgb3RoZXJ3aXNlIGxldCBta2Rvc2ZzIGRlY2lkZS4KKwlpZiBbICQoZXhwciAkQkxPQ0tTIC8gMTAyNCkgLWd0IDUxMiBdOyB0aGVuCisJCUZBVFNJWkU9Ii1GIDMyIgorCWZpCisKKwkjIG1rZG9zZnMgd2lsbCBmYWlsIGlmICR7RkFUSU1HfSBleGlzdHMuIFNpbmNlIHdlIGFyZSBjcmVhdGluZyBhbgorCSMgbmV3IGltYWdlLCBpdCBpcyBzYWZlIHRvIGRlbGV0ZSBhbnkgcHJldmlvdXMgaW1hZ2UuCisJaWYgWyAtZSAke0ZBVElNR30gXTsgdGhlbgorCQlybSAke0ZBVElNR30KKwlmaQorCisJaWYgWyAteiAiJHtIRERJTUdfSUR9IiBdOyB0aGVuCisJCW1rZG9zZnMgJHtGQVRTSVpFfSAtbiAke0JPT1RJTUdfVk9MVU1FX0lEfSAtUyA1MTIgLUMgJHtGQVRJTUd9IFwKKwkJCSR7QkxPQ0tTfQorCWVsc2UKKwkJbWtkb3NmcyAke0ZBVFNJWkV9IC1uICR7Qk9PVElNR19WT0xVTUVfSUR9IC1TIDUxMiAtQyAke0ZBVElNR30gXAorCQkke0JMT0NLU30gLWkgJHtIRERJTUdfSUR9CisJZmkKKworCSMgQ29weSBGQVRTT1VSQ0VESVIgcmVjdXJzaXZlbHkgaW50byB0aGUgaW1hZ2UgZmlsZSBkaXJlY3RseQorCW1jb3B5IC1pICR7RkFUSU1HfSAtcyAke0ZBVFNPVVJDRURJUn0vKiA6Oi8KK30KKworYnVpbGRfaGRkaW1nKCkgeworCSMgQ3JlYXRlIGFuIEhERCBpbWFnZQorCWlmIFsgIiR7Tk9IRER9IiAhPSAiMSIgXSA7IHRoZW4KKwkJcG9wdWxhdGUgJHtIRERESVJ9CisKKwkJaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdOyB0aGVuCisJCQlzeXNsaW51eF9oZGRpbWdfcG9wdWxhdGUgJHtIRERESVJ9CisJCWZpCisJCWlmIFsgIiR7RUZJfSIgPSAiMSIgXTsgdGhlbgorCQkJZWZpX2hkZGltZ19wb3B1bGF0ZSAke0hERERJUn0KKwkJZmkKKworCQkjIENoZWNrIHRoZSBzaXplIG9mICR7SERERElSfS9yb290ZnMuaW1nLCBlcnJvciBvdXQgaWYgaXQKKwkJIyBleGNlZWRzIDRHQiwgaXQgaXMgdGhlIHNpbmdsZSBmaWxlJ3MgbWF4IHNpemUgb2YgRkFUIGZzLgorCQlpZiBbIC1mICR7SERERElSfS9yb290ZnMuaW1nIF07IHRoZW4KKwkJCXJvb3Rmc19pbWdfc2l6ZT1gc3RhdCAtYyAnJXMnICR7SERERElSfS9yb290ZnMuaW1nYAorCQkJbWF4X3NpemU9YGV4cHIgNCBcKiAxMDI0IFwqIDEwMjQgXCogMTAyNGAKKwkJCWlmIFsgJHJvb3Rmc19pbWdfc2l6ZSAtZ3QgJG1heF9zaXplIF07IHRoZW4KKwkJCQliYmVycm9yICIke0hERERJUn0vcm9vdGZzLmltZyBleGVjZWVkcyA0R0IsIgorCQkJCWJiZXJyb3IgInRoaXMgZG9lc24ndCB3b3JrIG9uIEZBVCBmaWxlc3lzdGVtLCB5b3UgY2FuIHRyeSBlaXRoZXIgb2Y6IgorCQkJCWJiZXJyb3IgIjEpIFJlZHVjZSB0aGUgc2l6ZSBvZiByb290ZnMuaW1nIgorCQkJCWJiZmF0YWwgIjIpIFVzZSBpc28sIHZtZGsgb3IgdmRpIHRvIGluc3RlYWQgb2YgaGRkaW1nXG4iCisJCQlmaQorCQlmaQorCisJCWJ1aWxkX2ZhdF9pbWcgJHtIRERESVJ9ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5oZGRpbWcKKworCQlpZiBbICIke1BDQklPU30iID0gIjEiIF07IHRoZW4KKwkJCXN5c2xpbnV4X2hkZGltZ19pbnN0YWxsCisJCWZpCisKKwkJY2htb2QgNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5oZGRpbWcKKworCQljZCAke0RFUExPWV9ESVJfSU1BR0V9CisJCXJtIC1mICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmhkZGltZworCQlsbiAtcyAke0lNQUdFX05BTUV9LmhkZGltZyAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS5oZGRpbWcKKwlmaQorfQorCitweXRob24gZG9fYm9vdGltZygpIHsKKyAgICBpZiBkLmdldFZhcigiUENCSU9TIiwgVHJ1ZSkgPT0gIjEiOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2J1aWxkX3N5c2xpbnV4X2NmZycsIGQpCisgICAgaWYgZC5nZXRWYXIoIkVGSSIsIFRydWUpID09ICIxIjoKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdidWlsZF9lZmlfY2ZnJywgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2J1aWxkX2hkZGltZycsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdidWlsZF9pc28nLCBkKQorfQorCitJTUFHRV9UWVBFREVQX2lzbyA9ICJleHQ0IgorSU1BR0VfVFlQRURFUF9oZGRpbWcgPSAiZXh0NCIKK0lNQUdFX1RZUEVTX01BU0tFRCArPSAiaXNvIGhkZGltZyIKKworYWRkdGFzayBib290aW1nIGJlZm9yZSBkb19idWlsZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYnVnemlsbGEuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1Z3ppbGxhLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZjODk1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1Z3ppbGxhLmJiY2xhc3MKQEAgLTAsMCArMSwxODcgQEAKKyMKKyMgU21hbGwgZXZlbnQgaGFuZGxlciB0byBhdXRvbWF0aWNhbGx5IG9wZW4gVVJMcyBhbmQgZmlsZQorIyBidWcgcmVwb3J0cyBhdCBhIGJ1Z3ppbGxhIG9mIHlvdXIgY2hvaWNoZQorIyBpdCB1c2VzIFhNTC1SUEMgaW50ZXJmYWNlLCBzbyB5b3UgbXVzdCBoYXZlIGl0IGVuYWJsZWQKKyMKKyMgQmVmb3JlIHVzaW5nIHlvdSBtdXN0IGRlZmluZSBCVUdaSUxMQV9VU0VSLCBCVUdaSUxMQV9QQVNTIGNyZWRlbnRpYWxzLAorIyBCVUdaSUxMQV9YTUxSUEMgLSB1cmkgb2YgeG1scnBjLmNnaSwKKyMgQlVHWklMTEFfUFJPRFVDVCwgQlVHWklMTEFfQ09NUE9ORU5UIC0gYSBwbGFjZSBpbiBCVFMgZm9yIGJ1aWxkIGJ1Z3MKKyMgQlVHWklMTEFfVkVSU0lPTiAtIHZlcnNpb24gYWdhaW5zdCB3aGljaCB0byByZXBvcnQgbmV3IGJ1Z3MKKyMKKworZGVmIGJ1Z3ppbGxhX2ZpbmRfYnVnX3JlcG9ydChkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MsIGJ1Z25hbWUpOgorICAgIGFyZ3NbJ3N1bW1hcnknXSA9IGJ1Z25hbWUKKyAgICBidWdzID0gc2VydmVyLkJ1Zy5zZWFyY2goYXJncykKKyAgICBpZiBsZW4oYnVnc1snYnVncyddKSA9PSAwOgorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiQnVncyBub3QgZm91bmQiCisgICAgICAgIHJldHVybiAoRmFsc2UsTm9uZSkKKyAgICBlbHNlOiAjIHNpbGVudGx5IHBpY2sgdGhlIGZpcnN0IHJlc3VsdAorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiUmVzdWx0IG9mIGJ1ZyBzZWFyY2ggaXMgIgorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCBidWdzCisgICAgICAgIHN0YXR1cyA9IGJ1Z3NbJ2J1Z3MnXVswXVsnc3RhdHVzJ10KKyAgICAgICAgaWQgPSBidWdzWydidWdzJ11bMF1bJ2lkJ10KKyAgICAgICAgcmV0dXJuIChub3Qgc3RhdHVzIGluIFsiQ0xPU0VEIiwgIlJFU09MVkVEIiwgIlZFUklGSUVEIl0saWQpCisKK2RlZiBidWd6aWxsYV9maWxlX2J1ZyhkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MsIG5hbWUsIHRleHQsIHZlcnNpb24pOgorICAgIGFyZ3NbJ3N1bW1hcnknXSA9IG5hbWUKKyAgICBhcmdzWydjb21tZW50J10gPSB0ZXh0CisgICAgYXJnc1sndmVyc2lvbiddID0gdmVyc2lvbgorICAgIGFyZ3NbJ29wX3N5cyddID0gJ0xpbnV4JworICAgIGFyZ3NbJ3BsYXRmb3JtJ10gPSAnT3RoZXInCisgICAgYXJnc1snc2V2ZXJpdHknXSA9ICdub3JtYWwnCisgICAgYXJnc1sncHJpb3JpdHknXSA9ICdOb3JtYWwnCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gc2VydmVyLkJ1Zy5jcmVhdGUoYXJncylbJ2lkJ10KKyAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCByZXByKGUpCisgICAgICAgIHJldHVybiBOb25lCisKK2RlZiBidWd6aWxsYV9yZW9wZW5fYnVnKGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncywgYnVnX251bWJlcik6CisgICAgYXJnc1snaWRzJ10gPSBbYnVnX251bWJlcl0KKyAgICBhcmdzWydzdGF0dXMnXSA9ICJDT05GSVJNRUQiCisgICAgdHJ5OgorICAgICAgICBzZXJ2ZXIuQnVnLnVwZGF0ZShhcmdzKQorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsIHJlcHIoZSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBidWd6aWxsYV9jcmVhdGVfYXR0YWNobWVudChkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MsIGJ1Z19udW1iZXIsIHRleHQsIGZpbGVfbmFtZSwgbG9nLCBsb2dkZXNjcmlwdGlvbik6CisgICAgYXJnc1snaWRzJ10gPSBbYnVnX251bWJlcl0KKyAgICBhcmdzWydmaWxlX25hbWUnXSA9IGZpbGVfbmFtZQorICAgIGFyZ3NbJ3N1bW1hcnknXSA9IGxvZ2Rlc2NyaXB0aW9uCisgICAgYXJnc1snY29udGVudF90eXBlJ10gPSAidGV4dC9wbGFpbiIKKyAgICBhcmdzWydkYXRhJ10gPSBsb2cKKyAgICBhcmdzWydjb21tZW50J10gPSB0ZXh0CisgICAgdHJ5OgorICAgICAgICBzZXJ2ZXIuQnVnLmFkZF9hdHRhY2htZW50KGFyZ3MpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgcmVwcihlKQorICAgICAgICByZXR1cm4gRmFsc2UKKworZGVmIGJ1Z3ppbGxhX2FkZF9jb21tZW50KGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncywgYnVnX251bWJlciwgdGV4dCk6CisgICAgYXJnc1snaWQnXSA9IGJ1Z19udW1iZXIKKyAgICBhcmdzWydjb21tZW50J10gPSB0ZXh0CisgICAgdHJ5OgorICAgICAgICBzZXJ2ZXIuQnVnLmFkZF9jb21tZW50KGFyZ3MpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgcmVwcihlKQorICAgICAgICByZXR1cm4gRmFsc2UKKworYWRkaGFuZGxlciBidWd6aWxsYV9ldmVudGhhbmRsZXIKK2J1Z3ppbGxhX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50Lk1zZ05vdGUgYmIuYnVpbGQuVGFza0ZhaWxlZCIKK3B5dGhvbiBidWd6aWxsYV9ldmVudGhhbmRsZXIoKSB7CisgICAgaW1wb3J0IGdsb2IKKyAgICBpbXBvcnQgeG1scnBjbGliLCBodHRwbGliCisKKyAgICBjbGFzcyBQcm94aWVkVHJhbnNwb3J0KHhtbHJwY2xpYi5UcmFuc3BvcnQpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJveHksIHVzZV9kYXRldGltZSA9IDApOgorICAgICAgICAgICAgeG1scnBjbGliLlRyYW5zcG9ydC5fX2luaXRfXyhzZWxmLCB1c2VfZGF0ZXRpbWUpCisgICAgICAgICAgICBzZWxmLnByb3h5ID0gcHJveHkKKyAgICAgICAgICAgIHNlbGYudXNlciA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYucGFzc3dvcmQgPSBOb25lCisKKyAgICAgICAgZGVmIHNldF91c2VyKHNlbGYsIHVzZXIpOgorICAgICAgICAgICAgc2VsZi51c2VyID0gdXNlcgorCisgICAgICAgIGRlZiBzZXRfcGFzc3dvcmQoc2VsZiwgcGFzc3dvcmQpOgorICAgICAgICAgICAgc2VsZi5wYXNzd29yZCA9IHBhc3N3b3JkCisKKyAgICAgICAgZGVmIG1ha2VfY29ubmVjdGlvbihzZWxmLCBob3N0KToKKyAgICAgICAgICAgIHNlbGYucmVhbGhvc3QgPSBob3N0CisgICAgICAgICAgICByZXR1cm4gaHR0cGxpYi5IVFRQKHNlbGYucHJveHkpCisKKyAgICAgICAgZGVmIHNlbmRfcmVxdWVzdChzZWxmLCBjb25uZWN0aW9uLCBoYW5kbGVyLCByZXF1ZXN0X2JvZHkpOgorICAgICAgICAgICAgY29ubmVjdGlvbi5wdXRyZXF1ZXN0KCJQT1NUIiwgJ2h0dHA6Ly8lcyVzJyAlIChzZWxmLnJlYWxob3N0LCBoYW5kbGVyKSkKKyAgICAgICAgICAgIGlmIHNlbGYudXNlciAhPSBOb25lOgorICAgICAgICAgICAgICAgIGlmIHNlbGYucGFzc3dvcmQgIT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgYXV0aCA9ICIlczolcyIgJSAoc2VsZi51c2VyLCBzZWxmLnBhc3N3b3JkKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGF1dGggPSBzZWxmLnVzZXIKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnB1dGhlYWRlcigiUHJveHktYXV0aG9yaXphdGlvbiIsICJCYXNpYyAiICsgYmFzZTY0LmVuY29kZXN0cmluZyhhdXRoKSkKKworICAgIGV2ZW50ID0gZQorICAgIGRhdGEgPSBlLmRhdGEKKyAgICBuYW1lID0gYmIuZXZlbnQuZ2V0TmFtZShldmVudCkKKyAgICBpZiBuYW1lID09ICJNc2dOb3RlIjoKKyAgICAgICAgIyBhdm9pZCByZWN1cnNpb24KKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBuYW1lID09ICJUYXNrRmFpbGVkIjoKKyAgICAgICAgeG1scnBjICA9IGRhdGEuZ2V0VmFyKCJCVUdaSUxMQV9YTUxSUEMiLCBUcnVlKQorICAgICAgICB1c2VyICAgID0gZGF0YS5nZXRWYXIoIkJVR1pJTExBX1VTRVIiLCBUcnVlKQorICAgICAgICBwYXNzdyAgID0gZGF0YS5nZXRWYXIoIkJVR1pJTExBX1BBU1MiLCBUcnVlKQorICAgICAgICBwcm9kdWN0ID0gZGF0YS5nZXRWYXIoIkJVR1pJTExBX1BST0RVQ1QiLCBUcnVlKQorICAgICAgICBjb21wb24gID0gZGF0YS5nZXRWYXIoIkJVR1pJTExBX0NPTVBPTkVOVCIsIFRydWUpCisgICAgICAgIHZlcnNpb24gPSBkYXRhLmdldFZhcigiQlVHWklMTEFfVkVSU0lPTiIsIFRydWUpCisKKyAgICAgICAgcHJveHkgICA9IGRhdGEuZ2V0VmFyKCdodHRwX3Byb3h5JywgVHJ1ZSApCisgICAgICAgIGlmIChwcm94eSk6CisgICAgICAgICAgICBpbXBvcnQgdXJsbGliMgorICAgICAgICAgICAgcywgdSwgcCwgaG9zdHBvcnQgPSB1cmxsaWIyLl9wYXJzZV9wcm94eShwcm94eSkKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IFByb3hpZWRUcmFuc3BvcnQoaG9zdHBvcnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cmFuc3BvcnQgPSBOb25lCisKKyAgICAgICAgc2VydmVyID0geG1scnBjbGliLlNlcnZlclByb3h5KHhtbHJwYywgdHJhbnNwb3J0PXRyYW5zcG9ydCwgdmVyYm9zZT0wKQorICAgICAgICBhcmdzID0geworICAgICAgICAgICAgJ0J1Z3ppbGxhX2xvZ2luJzogdXNlciwKKyAgICAgICAgICAgICdCdWd6aWxsYV9wYXNzd29yZCc6IHBhc3N3LAorICAgICAgICAgICAgJ3Byb2R1Y3QnOiBwcm9kdWN0LAorICAgICAgICAgICAgJ2NvbXBvbmVudCc6IGNvbXBvbn0KKworICAgICAgICAjIGV2aWwgaGFjayB0byBmaWd1cmUgb3V0IHdoYXQgaXMgZ29pbmcgb24KKyAgICAgICAgZGVidWdfZmlsZSA9IG9wZW4ob3MucGF0aC5qb2luKGRhdGEuZ2V0VmFyKCJUTVBESVIiLCBUcnVlKSwiLi4iLCJidWd6aWxsYS1sb2ciKSwiYSIpCisKKyAgICAgICAgZmlsZSA9IE5vbmUKKyAgICAgICAgYnVnbmFtZSA9ICIlKHBhY2thZ2Upcy0lKHB2KXMtYXV0b2J1aWxkIiAlIHsgInBhY2thZ2UiIDogZGF0YS5nZXRWYXIoIlBOIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdiIgICAgICA6IGRhdGEuZ2V0VmFyKCJQViIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIGxvZ19maWxlID0gZ2xvYi5nbG9iKCIlcy9sb2cuJXMuKiIgJSAoZXZlbnQuZGF0YS5nZXRWYXIoJ1QnLCBUcnVlKSwgZXZlbnQudGFzaykpCisgICAgICAgIHRleHQgICAgID0gIlRoZSAlcyBzdGVwIGluICVzIGZhaWxlZCBhdCAlcyBmb3IgbWFjaGluZSAlcyIgJSAoZS50YXNrLCBkYXRhLmdldFZhcigiUE4iLCBUcnVlKSwgZGF0YS5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSksIGRhdGEuZ2V0VmFyKCAnTUFDSElORScsIFRydWUgKSApCisgICAgICAgIGlmIGxlbihsb2dfZmlsZSkgIT0gMDoKKyAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJBZGRpbmcgbG9nIGZpbGUgJXMiICUgbG9nX2ZpbGVbMF0KKyAgICAgICAgICAgIGZpbGUgPSBvcGVuKGxvZ19maWxlWzBdLCAncicpCisgICAgICAgICAgICBsb2cgPSBmaWxlLnJlYWQoKQorICAgICAgICAgICAgZmlsZS5jbG9zZSgpOworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIk5vIGxvZyBmaWxlIGZvdW5kIGZvciB0aGUgZ2xvYiIKKyAgICAgICAgICAgIGxvZyA9IE5vbmUKKworICAgICAgICAoYnVnX29wZW4sIGJ1Z19udW1iZXIpID0gYnVnemlsbGFfZmluZF9idWdfcmVwb3J0KGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncy5jb3B5KCksIGJ1Z25hbWUpCisgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJCdWcgaXMgb3BlbjogJXMgYW5kIGJ1ZyBudW1iZXI6ICVzIiAlIChidWdfb3BlbiwgYnVnX251bWJlcikKKworICAgICAgICAjIFRoZSBidWcgaXMgcHJlc2VudCBhbmQgc3RpbGwgb3BlbiwgYXR0YWNoIGFuIGVycm9yIGxvZworICAgICAgICBpZiBub3QgYnVnX251bWJlcjoKKyAgICAgICAgICAgIGJ1Z19udW1iZXIgPSBidWd6aWxsYV9maWxlX2J1ZyhkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MuY29weSgpLCBidWduYW1lLCB0ZXh0LCB2ZXJzaW9uKQorICAgICAgICAgICAgaWYgbm90IGJ1Z19udW1iZXI6CisgICAgICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIkNvdWxkbid0IGFjcXVpcmUgYSBuZXcgYnVnX251bWVyLCBmaWxpbmcgYSBidWdyZXBvcnQgZmFpbGVkIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiVGhlIG5ldyBidWdfbnVtYmVyOiAnJXMnIiAlIGJ1Z19udW1iZXIKKyAgICAgICAgZWxpZiBub3QgYnVnX29wZW46CisgICAgICAgICAgICBpZiBub3QgYnVnemlsbGFfcmVvcGVuX2J1ZyhkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MuY29weSgpLCBidWdfbnVtYmVyKToKKyAgICAgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiRmFpbGVkIHRvIHJlb3BlbiB0aGUgYnVnICMlcyIgJSBidWdfbnVtYmVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJSZW9wZW5lZCB0aGUgYnVnICMlcyIgJSBidWdfbnVtYmVyCisKKyAgICAgICAgaWYgYnVnX251bWJlciBhbmQgbG9nOgorICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIlRoZSBidWcgaXMga25vd24gYXMgJyVzJyIgJSBidWdfbnVtYmVyCisgICAgICAgICAgICBkZXNjID0gIkJ1aWxkIGxvZyBmb3IgbWFjaGluZSAlcyIgJSAoZGF0YS5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKSkKKyAgICAgICAgICAgIGlmIG5vdCBidWd6aWxsYV9jcmVhdGVfYXR0YWNobWVudChkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MuY29weSgpLCBidWdfbnVtYmVyLCB0ZXh0LCBsb2dfZmlsZVswXSwgbG9nLCBkZXNjKToKKyAgICAgICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIkZhaWxlZCB0byBhdHRhY2ggdGhlIGJ1aWxkIGxvZyBmb3IgYnVnICMlcyIgJSBidWdfbnVtYmVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiQ3JlYXRlZCBhbiBhdHRhY2htZW50IGZvciAnJXMnICclcycgJyVzJyIgJSAocHJvZHVjdCwgY29tcG9uLCBidWdfbnVtYmVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIk5vdCB0cnlpbmcgdG8gY3JlYXRlIGFuIGF0dGFjaG1lbnQgZm9yIGJ1ZyAjJXMiICUgYnVnX251bWJlcgorICAgICAgICAgICAgaWYgbm90IGJ1Z3ppbGxhX2FkZF9jb21tZW50KGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncy5jb3B5KCksIGJ1Z19udW1iZXIsIHRleHQsICk6CisgICAgICAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJGYWlsZWQgdG8gY3JlYXRlIGEgY29tbWVudCB0aGUgYnVpbGQgbG9nIGZvciBidWcgIyVzIiAlIGJ1Z19udW1iZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJDcmVhdGVkIGFuIGF0dGFjaG1lbnQgZm9yICclcycgJyVzJyAnJXMnIiAlIChwcm9kdWN0LCBjb21wb24sIGJ1Z19udW1iZXIpCisKKyAgICAgICAgIyBzdG9yZSBidWcgbnVtYmVyIGZvciBvZXN0YXRzLWNsaWVudAorICAgICAgICBpZiBidWdfbnVtYmVyOgorICAgICAgICAgICAgZGF0YS5zZXRWYXIoJ09FU1RBVFNfQlVHX05VTUJFUicsIGJ1Z19udW1iZXIpCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkaGlzdG9yeS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYnVpbGRoaXN0b3J5LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRiMDQ0MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkaGlzdG9yeS5iYmNsYXNzCkBAIC0wLDAgKzEsNzY1IEBACisjCisjIFJlY29yZHMgaGlzdG9yeSBvZiBidWlsZCBvdXRwdXQgaW4gb3JkZXIgdG8gZGV0ZWN0IHJlZ3Jlc3Npb25zCisjCisjIEJhc2VkIGluIHBhcnQgb24gdGVzdGxhYi5iYmNsYXNzIGFuZCBwYWNrYWdlaGlzdG9yeS5iYmNsYXNzCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDE0IEludGVsIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDExIEtvZW4gS29vaSA8a29lbkBvcGVuZW1iZWRkZWQub3JnPgorIworCitCVUlMREhJU1RPUllfRkVBVFVSRVMgPz0gImltYWdlIHBhY2thZ2Ugc2RrIgorQlVJTERISVNUT1JZX0RJUiA/PSAiJHtUT1BESVJ9L2J1aWxkaGlzdG9yeSIKK0JVSUxESElTVE9SWV9ESVJfSU1BR0UgPSAiJHtCVUlMREhJU1RPUllfRElSfS9pbWFnZXMvJHtNQUNISU5FX0FSQ0h9LyR7VENMSUJDfS8ke0lNQUdFX0JBU0VOQU1FfSIKK0JVSUxESElTVE9SWV9ESVJfUEFDS0FHRSA9ICIke0JVSUxESElTVE9SWV9ESVJ9L3BhY2thZ2VzLyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9LyR7UE59IgorQlVJTERISVNUT1JZX0RJUl9TREsgPSAiJHtCVUlMREhJU1RPUllfRElSfS9zZGsvJHtTREtfTkFNRX0vJHtJTUFHRV9CQVNFTkFNRX0iCitCVUlMREhJU1RPUllfSU1BR0VfRklMRVMgPz0gIi9ldGMvcGFzc3dkIC9ldGMvZ3JvdXAiCitCVUlMREhJU1RPUllfQ09NTUlUID89ICIwIgorQlVJTERISVNUT1JZX0NPTU1JVF9BVVRIT1IgPz0gImJ1aWxkaGlzdG9yeSA8YnVpbGRoaXN0b3J5QCR7RElTVFJPfT4iCitCVUlMREhJU1RPUllfUFVTSF9SRVBPID89ICIiCisKK1NTVEFURVBPU1RJTlNURlVOQ1NfYXBwZW5kID0gIiBidWlsZGhpc3RvcnlfZW1pdF9wa2doaXN0b3J5IgorIyBXZSB3YW50IHRvIGF2b2lkIGluZmx1ZW5jZSB0aGUgc2lnbmF0dXJlcyBvZiBzc3RhdGUgdGFza3MgLSBmaXJzdCB0aGUgZnVuY3Rpb24gaXRzZWxmOgorc3N0YXRlX2luc3RhbGxbdmFyZGVwc2V4Y2x1ZGVdICs9ICJidWlsZGhpc3RvcnlfZW1pdF9wa2doaXN0b3J5IgorIyB0aGVuIHRoZSB2YWx1ZSBhZGRlZCB0byBTU1RBVEVQT1NUSU5TVEZVTkNTOgorU1NUQVRFUE9TVElOU1RGVU5DU1t2YXJkZXB2YWx1ZWV4Y2x1ZGVdIC49ICJ8IGJ1aWxkaGlzdG9yeV9lbWl0X3BrZ2hpc3RvcnkiCisKKyMKKyMgV3JpdGUgb3V0IG1ldGFkYXRhIGFib3V0IHRoaXMgcGFja2FnZSBmb3IgY29tcGFyaXNpb24gd2hlbiB3cml0aW5nIGZ1dHVyZSBwYWNrYWdlcworIworcHl0aG9uIGJ1aWxkaGlzdG9yeV9lbWl0X3BrZ2hpc3RvcnkoKSB7CisgICAgaWYgbm90IGQuZ2V0VmFyKCdCQl9DVVJSRU5UVEFTSycsIFRydWUpIGluIFsncGFja2FnZWRhdGEnLCAncGFja2FnZWRhdGFfc2V0c2NlbmUnXToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGlmIG5vdCAicGFja2FnZSIgaW4gKGQuZ2V0VmFyKCdCVUlMREhJU1RPUllfRkVBVFVSRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGltcG9ydCByZQorICAgIGltcG9ydCBqc29uCisgICAgaW1wb3J0IGVycm5vCisKKyAgICBwa2doaXN0ZGlyID0gZC5nZXRWYXIoJ0JVSUxESElTVE9SWV9ESVJfUEFDS0FHRScsIFRydWUpCisKKyAgICBjbGFzcyBSZWNpcGVJbmZvOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgICAgICBzZWxmLnBlID0gIjAiCisgICAgICAgICAgICBzZWxmLnB2ID0gIjAiCisgICAgICAgICAgICBzZWxmLnByID0gInIwIgorICAgICAgICAgICAgc2VsZi5kZXBlbmRzID0gIiIKKyAgICAgICAgICAgIHNlbGYucGFja2FnZXMgPSAiIgorICAgICAgICAgICAgc2VsZi5zcmNyZXYgPSAiIgorCisKKyAgICBjbGFzcyBQYWNrYWdlSW5mbzoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICAgICAgc2VsZi5wZSA9ICIwIgorICAgICAgICAgICAgc2VsZi5wdiA9ICIwIgorICAgICAgICAgICAgc2VsZi5wciA9ICJyMCIKKyAgICAgICAgICAgICMgcGtnL3BrZ2UvcGtndi9wa2dyIHNob3VsZCBiZSBlbXB0eSBiZWNhdXNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBkZWZhdWx0IHRoZW0KKyAgICAgICAgICAgIHNlbGYucGtnID0gIiIKKyAgICAgICAgICAgIHNlbGYucGtnZSA9ICIiCisgICAgICAgICAgICBzZWxmLnBrZ3YgPSAiIgorICAgICAgICAgICAgc2VsZi5wa2dyID0gIiIKKyAgICAgICAgICAgIHNlbGYuc2l6ZSA9IDAKKyAgICAgICAgICAgIHNlbGYuZGVwZW5kcyA9ICIiCisgICAgICAgICAgICBzZWxmLnJwcm92aWRlcyA9ICIiCisgICAgICAgICAgICBzZWxmLnJkZXBlbmRzID0gIiIKKyAgICAgICAgICAgIHNlbGYucnJlY29tbWVuZHMgPSAiIgorICAgICAgICAgICAgc2VsZi5yc3VnZ2VzdHMgPSAiIgorICAgICAgICAgICAgc2VsZi5ycmVwbGFjZXMgPSAiIgorICAgICAgICAgICAgc2VsZi5yY29uZmxpY3RzID0gIiIKKyAgICAgICAgICAgIHNlbGYuZmlsZXMgPSAiIgorICAgICAgICAgICAgc2VsZi5maWxlbGlzdCA9ICIiCisgICAgICAgICAgICAjIFZhcmlhYmxlcyB0aGF0IG5lZWQgdG8gYmUgd3JpdHRlbiB0byB0aGVpciBvd24gc2VwYXJhdGUgZmlsZQorICAgICAgICAgICAgc2VsZi5maWxldmFycyA9IGRpY3QuZnJvbWtleXMoWydwa2dfcHJlaW5zdCcsICdwa2dfcG9zdGluc3QnLCAncGtnX3ByZXJtJywgJ3BrZ19wb3N0cm0nXSkKKworICAgICMgU2hvdWxkIGNoZWNrIFBBQ0tBR0VTIGhlcmUgdG8gc2VlIGlmIGFueXRoaW5nIHJlbW92ZWQKKworICAgIGRlZiByZWFkUGFja2FnZUluZm8ocGtnLCBoaXN0ZmlsZSk6CisgICAgICAgIHBrZ2luZm8gPSBQYWNrYWdlSW5mbyhwa2cpCisgICAgICAgIHdpdGggb3BlbihoaXN0ZmlsZSwgInIiKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBsbnMgPSBsaW5lLnNwbGl0KCc9JykKKyAgICAgICAgICAgICAgICBuYW1lID0gbG5zWzBdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGxuc1sxXS5zdHJpcCgiIFx0XHJcbiIpLnN0cmlwKCciJykKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJQRSI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucGUgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUFYiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnB2ID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlBSIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5wciA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJQS0ciOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnBrZyA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJQS0dFIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5wa2dlID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlBLR1YiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnBrZ3YgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUEtHUiI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucGtnciA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJSUFJPVklERVMiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnJwcm92aWRlcyA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJSREVQRU5EUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucmRlcGVuZHMgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUlJFQ09NTUVORFMiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnJyZWNvbW1lbmRzID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlJTVUdHRVNUUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucnN1Z2dlc3RzID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlJSRVBMQUNFUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucnJlcGxhY2VzID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlJDT05GTElDVFMiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnJjb25mbGljdHMgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUEtHU0laRSI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8uc2l6ZSA9IGxvbmcodmFsdWUpCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJGSUxFUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8uZmlsZXMgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiRklMRUxJU1QiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLmZpbGVsaXN0ID0gdmFsdWUKKyAgICAgICAgIyBBcHBseSBkZWZhdWx0cworICAgICAgICBpZiBub3QgcGtnaW5mby5wa2c6CisgICAgICAgICAgICBwa2dpbmZvLnBrZyA9IHBrZ2luZm8ubmFtZQorICAgICAgICBpZiBub3QgcGtnaW5mby5wa2dlOgorICAgICAgICAgICAgcGtnaW5mby5wa2dlID0gcGtnaW5mby5wZQorICAgICAgICBpZiBub3QgcGtnaW5mby5wa2d2OgorICAgICAgICAgICAgcGtnaW5mby5wa2d2ID0gcGtnaW5mby5wdgorICAgICAgICBpZiBub3QgcGtnaW5mby5wa2dyOgorICAgICAgICAgICAgcGtnaW5mby5wa2dyID0gcGtnaW5mby5wcgorICAgICAgICByZXR1cm4gcGtnaW5mbworCisgICAgZGVmIGdldGxhc3Rwa2d2ZXJzaW9uKHBrZyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGhpc3RmaWxlID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsIHBrZywgImxhdGVzdCIpCisgICAgICAgICAgICByZXR1cm4gcmVhZFBhY2thZ2VJbmZvKHBrZywgaGlzdGZpbGUpCisgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzb3J0cGtnbGlzdChzdHJpbmcpOgorICAgICAgICBwa2dpdGVyID0gcmUuZmluZGl0ZXIocidbYS16QS1aMC05ListXSsoIFwoWz48PV0rIFteICldK1wpKT8nLCBzdHJpbmcsIDApCisgICAgICAgIHBrZ2xpc3QgPSBbcC5ncm91cCgwKSBmb3IgcCBpbiBwa2dpdGVyXQorICAgICAgICBwa2dsaXN0LnNvcnQoKQorICAgICAgICByZXR1cm4gJyAnLmpvaW4ocGtnbGlzdCkKKworICAgIGRlZiBzb3J0bGlzdChzdHJpbmcpOgorICAgICAgICBpdGVtcyA9IHN0cmluZy5zcGxpdCgnICcpCisgICAgICAgIGl0ZW1zLnNvcnQoKQorICAgICAgICByZXR1cm4gJyAnLmpvaW4oaXRlbXMpCisKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgcGUgPSBkLmdldFZhcignUEUnLCBUcnVlKSBvciAiMCIKKyAgICBwdiA9IGQuZ2V0VmFyKCdQVicsIFRydWUpCisgICAgcHIgPSBkLmdldFZhcignUFInLCBUcnVlKQorCisgICAgcGtnZGF0YV9kaXIgPSBkLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKQorICAgIHBhY2thZ2VzID0gIiIKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocGtnZGF0YV9kaXIsIHBuKSkgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdQQUNLQUdFUzogJyk6CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzID0gb2UudXRpbHMuc3F1YXNoc3BhY2VzKGxpbmUuc3BsaXQoJzogJywgMSlbMV0pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAjIFByb2JhYmx5IGEgLWNyb3NzIHJlY2lwZSwganVzdCBpZ25vcmUKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZQorCisgICAgcGFja2FnZWxpc3QgPSBwYWNrYWdlcy5zcGxpdCgpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBrZ2hpc3RkaXIpOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGtnaGlzdGRpcikKKyAgICBlbHNlOgorICAgICAgICAjIFJlbW92ZSBmaWxlcyBmb3IgcGFja2FnZXMgdGhhdCBubyBsb25nZXIgZXhpc3QKKyAgICAgICAgZm9yIGl0ZW0gaW4gb3MubGlzdGRpcihwa2doaXN0ZGlyKToKKyAgICAgICAgICAgIGlmIGl0ZW0gIT0gImxhdGVzdCIgYW5kIGl0ZW0gIT0gImxhdGVzdF9zcmNyZXYiOgorICAgICAgICAgICAgICAgIGlmIGl0ZW0gbm90IGluIHBhY2thZ2VsaXN0OgorICAgICAgICAgICAgICAgICAgICBpdGVtcGF0aCA9IG9zLnBhdGguam9pbihwa2doaXN0ZGlyLCBpdGVtKQorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGl0ZW1wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdWJmaWxlIGluIG9zLmxpc3RkaXIoaXRlbXBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4oaXRlbXBhdGgsIHN1YmZpbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoaXRlbXBhdGgpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoaXRlbXBhdGgpCisKKyAgICByY3BpbmZvID0gUmVjaXBlSW5mbyhwbikKKyAgICByY3BpbmZvLnBlID0gcGUKKyAgICByY3BpbmZvLnB2ID0gcHYKKyAgICByY3BpbmZvLnByID0gcHIKKyAgICByY3BpbmZvLmRlcGVuZHMgPSBzb3J0bGlzdChvZS51dGlscy5zcXVhc2hzcGFjZXMoZC5nZXRWYXIoJ0RFUEVORFMnLCBUcnVlKSBvciAiIikpCisgICAgcmNwaW5mby5wYWNrYWdlcyA9IHBhY2thZ2VzCisgICAgd3JpdGVfcmVjaXBlaGlzdG9yeShyY3BpbmZvLCBkKQorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VsaXN0OgorICAgICAgICBwa2dkYXRhID0ge30KKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihwa2dkYXRhX2RpciwgJ3J1bnRpbWUnLCBwa2cpKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBpdGVtID0gbGluZS5yc3RyaXAoJ1xuJykuc3BsaXQoJzogJywgMSkKKyAgICAgICAgICAgICAgICBrZXkgPSBpdGVtWzBdCisgICAgICAgICAgICAgICAgaWYga2V5LmVuZHN3aXRoKCdfJyArIHBrZyk6CisgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleVs6LWxlbihwa2cpLTFdCisgICAgICAgICAgICAgICAgcGtnZGF0YVtrZXldID0gaXRlbVsxXS5kZWNvZGUoJ3V0Zi04JykuZGVjb2RlKCdzdHJpbmdfZXNjYXBlJykKKworICAgICAgICBwa2dlID0gcGtnZGF0YS5nZXQoJ1BLR0UnLCAnMCcpCisgICAgICAgIHBrZ3YgPSBwa2dkYXRhWydQS0dWJ10KKyAgICAgICAgcGtnciA9IHBrZ2RhdGFbJ1BLR1InXQorICAgICAgICAjCisgICAgICAgICMgRmluZCBvdXQgd2hhdCB0aGUgbGFzdCB2ZXJzaW9uIHdhcworICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgdmVyc2lvbiBkaWQgbm90IGRlY3JlYXNlCisgICAgICAgICMKKyAgICAgICAgbGFzdHZlcnNpb24gPSBnZXRsYXN0cGtndmVyc2lvbihwa2cpCisgICAgICAgIGlmIGxhc3R2ZXJzaW9uOgorICAgICAgICAgICAgbGFzdF9wa2dlID0gbGFzdHZlcnNpb24ucGtnZQorICAgICAgICAgICAgbGFzdF9wa2d2ID0gbGFzdHZlcnNpb24ucGtndgorICAgICAgICAgICAgbGFzdF9wa2dyID0gbGFzdHZlcnNpb24ucGtncgorICAgICAgICAgICAgciA9IGJiLnV0aWxzLnZlcmNtcCgocGtnZSwgcGtndiwgcGtnciksIChsYXN0X3BrZ2UsIGxhc3RfcGtndiwgbGFzdF9wa2dyKSkKKyAgICAgICAgICAgIGlmIHIgPCAwOgorICAgICAgICAgICAgICAgIG1zZyA9ICJQYWNrYWdlIHZlcnNpb24gZm9yIHBhY2thZ2UgJXMgd2VudCBiYWNrd2FyZHMgd2hpY2ggd291bGQgYnJlYWsgcGFja2FnZSBmZWVkcyBmcm9tICglczolcy0lcyB0byAlczolcy0lcykiICUgKHBrZywgbGFzdF9wa2dlLCBsYXN0X3BrZ3YsIGxhc3RfcGtnciwgcGtnZSwgcGtndiwgcGtncikKKyAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigidmVyc2lvbi1nb2luZy1iYWNrd2FyZHMiLCBtc2csIGQpCisKKyAgICAgICAgcGtnaW5mbyA9IFBhY2thZ2VJbmZvKHBrZykKKyAgICAgICAgIyBBcHBhcmVudGx5IHRoZSB2ZXJzaW9uIGNhbiBiZSBkaWZmZXJlbnQgb24gYSBwZXItcGFja2FnZSBiYXNpcyAoc2VlIFB5dGhvbikKKyAgICAgICAgcGtnaW5mby5wZSA9IHBrZ2RhdGEuZ2V0KCdQRScsICcwJykKKyAgICAgICAgcGtnaW5mby5wdiA9IHBrZ2RhdGFbJ1BWJ10KKyAgICAgICAgcGtnaW5mby5wciA9IHBrZ2RhdGFbJ1BSJ10KKyAgICAgICAgcGtnaW5mby5wa2cgPSBwa2dkYXRhWydQS0cnXQorICAgICAgICBwa2dpbmZvLnBrZ2UgPSBwa2dlCisgICAgICAgIHBrZ2luZm8ucGtndiA9IHBrZ3YKKyAgICAgICAgcGtnaW5mby5wa2dyID0gcGtncgorICAgICAgICBwa2dpbmZvLnJwcm92aWRlcyA9IHNvcnRwa2dsaXN0KG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhwa2dkYXRhLmdldCgnUlBST1ZJREVTJywgIiIpKSkKKyAgICAgICAgcGtnaW5mby5yZGVwZW5kcyA9IHNvcnRwa2dsaXN0KG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhwa2dkYXRhLmdldCgnUkRFUEVORFMnLCAiIikpKQorICAgICAgICBwa2dpbmZvLnJyZWNvbW1lbmRzID0gc29ydHBrZ2xpc3Qob2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdSUkVDT01NRU5EUycsICIiKSkpCisgICAgICAgIHBrZ2luZm8ucnN1Z2dlc3RzID0gc29ydHBrZ2xpc3Qob2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdSU1VHR0VTVFMnLCAiIikpKQorICAgICAgICBwa2dpbmZvLnJyZXBsYWNlcyA9IHNvcnRwa2dsaXN0KG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhwa2dkYXRhLmdldCgnUlJFUExBQ0VTJywgIiIpKSkKKyAgICAgICAgcGtnaW5mby5yY29uZmxpY3RzID0gc29ydHBrZ2xpc3Qob2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdSQ09ORkxJQ1RTJywgIiIpKSkKKyAgICAgICAgcGtnaW5mby5maWxlcyA9IG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhwa2dkYXRhLmdldCgnRklMRVMnLCAiIikpCisgICAgICAgIGZvciBmaWxldmFyIGluIHBrZ2luZm8uZmlsZXZhcnM6CisgICAgICAgICAgICBwa2dpbmZvLmZpbGV2YXJzW2ZpbGV2YXJdID0gcGtnZGF0YS5nZXQoZmlsZXZhciwgIiIpCisKKyAgICAgICAgIyBHYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgcGFja2FnZWQgZmlsZXMKKyAgICAgICAgdmFsID0gcGtnZGF0YS5nZXQoJ0ZJTEVTX0lORk8nLCAnJykKKyAgICAgICAgZGljdHZhbCA9IGpzb24ubG9hZHModmFsKQorICAgICAgICBmaWxlbGlzdCA9IGRpY3R2YWwua2V5cygpCisgICAgICAgIGZpbGVsaXN0LnNvcnQoKQorICAgICAgICBwa2dpbmZvLmZpbGVsaXN0ID0gIiAiLmpvaW4oZmlsZWxpc3QpCisKKyAgICAgICAgcGtnaW5mby5zaXplID0gaW50KHBrZ2RhdGFbJ1BLR1NJWkUnXSkKKworICAgICAgICB3cml0ZV9wa2doaXN0b3J5KHBrZ2luZm8sIGQpCisKKyAgICAjIENyZWF0ZSBmaWxlcy1pbi08cGFja2FnZS1uYW1lPi50eHQgZmlsZXMgY29udGFpbmluZyBhIGxpc3Qgb2YgZmlsZXMgb2YgZWFjaCByZWNpcGUncyBwYWNrYWdlCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJidWlsZGhpc3RvcnlfbGlzdF9wa2dfZmlsZXMiLCBkKQorfQorCisKK2RlZiB3cml0ZV9yZWNpcGVoaXN0b3J5KHJjcGluZm8sIGQpOgorICAgIGltcG9ydCBjb2RlY3MKKworICAgIGJiLmRlYnVnKDIsICJXcml0aW5nIHJlY2lwZSBoaXN0b3J5IikKKworICAgIHBrZ2hpc3RkaXIgPSBkLmdldFZhcignQlVJTERISVNUT1JZX0RJUl9QQUNLQUdFJywgVHJ1ZSkKKworICAgIGluZm9maWxlID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsICJsYXRlc3QiKQorICAgIHdpdGggY29kZWNzLm9wZW4oaW5mb2ZpbGUsICJ3IiwgZW5jb2Rpbmc9J3V0ZjgnKSBhcyBmOgorICAgICAgICBpZiByY3BpbmZvLnBlICE9ICIwIjoKKyAgICAgICAgICAgIGYud3JpdGUodSJQRSA9ICVzXG4iICUgIHJjcGluZm8ucGUpCisgICAgICAgIGYud3JpdGUodSJQViA9ICVzXG4iICUgIHJjcGluZm8ucHYpCisgICAgICAgIGYud3JpdGUodSJQUiA9ICVzXG4iICUgIHJjcGluZm8ucHIpCisgICAgICAgIGYud3JpdGUodSJERVBFTkRTID0gJXNcbiIgJSAgcmNwaW5mby5kZXBlbmRzKQorICAgICAgICBmLndyaXRlKHUiUEFDS0FHRVMgPSAlc1xuIiAlICByY3BpbmZvLnBhY2thZ2VzKQorCisKK2RlZiB3cml0ZV9wa2doaXN0b3J5KHBrZ2luZm8sIGQpOgorICAgIGltcG9ydCBjb2RlY3MKKworICAgIGJiLmRlYnVnKDIsICJXcml0aW5nIHBhY2thZ2UgaGlzdG9yeSBmb3IgcGFja2FnZSAlcyIgJSBwa2dpbmZvLm5hbWUpCisKKyAgICBwa2doaXN0ZGlyID0gZC5nZXRWYXIoJ0JVSUxESElTVE9SWV9ESVJfUEFDS0FHRScsIFRydWUpCisKKyAgICBwa2dwYXRoID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsIHBrZ2luZm8ubmFtZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGtncGF0aCk6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwa2dwYXRoKQorCisgICAgaW5mb2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtncGF0aCwgImxhdGVzdCIpCisgICAgd2l0aCBjb2RlY3Mub3BlbihpbmZvZmlsZSwgInciLCBlbmNvZGluZz0ndXRmOCcpIGFzIGY6CisgICAgICAgIGlmIHBrZ2luZm8ucGUgIT0gIjAiOgorICAgICAgICAgICAgZi53cml0ZSh1IlBFID0gJXNcbiIgJSAgcGtnaW5mby5wZSkKKyAgICAgICAgZi53cml0ZSh1IlBWID0gJXNcbiIgJSAgcGtnaW5mby5wdikKKyAgICAgICAgZi53cml0ZSh1IlBSID0gJXNcbiIgJSAgcGtnaW5mby5wcikKKworICAgICAgICBwa2d2YXJzID0ge30KKyAgICAgICAgcGtndmFyc1snUEtHJ10gPSBwa2dpbmZvLnBrZyBpZiBwa2dpbmZvLnBrZyAhPSBwa2dpbmZvLm5hbWUgZWxzZSAnJworICAgICAgICBwa2d2YXJzWydQS0dFJ10gPSBwa2dpbmZvLnBrZ2UgaWYgcGtnaW5mby5wa2dlICE9IHBrZ2luZm8ucGUgZWxzZSAnJworICAgICAgICBwa2d2YXJzWydQS0dWJ10gPSBwa2dpbmZvLnBrZ3YgaWYgcGtnaW5mby5wa2d2ICE9IHBrZ2luZm8ucHYgZWxzZSAnJworICAgICAgICBwa2d2YXJzWydQS0dSJ10gPSBwa2dpbmZvLnBrZ3IgaWYgcGtnaW5mby5wa2dyICE9IHBrZ2luZm8ucHIgZWxzZSAnJworICAgICAgICBmb3IgcGtndmFyIGluIHBrZ3ZhcnM6CisgICAgICAgICAgICB2YWwgPSBwa2d2YXJzW3BrZ3Zhcl0KKyAgICAgICAgICAgIGlmIHZhbDoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHUiJXMgPSAlc1xuIiAlIChwa2d2YXIsIHZhbCkpCisKKyAgICAgICAgZi53cml0ZSh1IlJQUk9WSURFUyA9ICVzXG4iICUgIHBrZ2luZm8ucnByb3ZpZGVzKQorICAgICAgICBmLndyaXRlKHUiUkRFUEVORFMgPSAlc1xuIiAlICBwa2dpbmZvLnJkZXBlbmRzKQorICAgICAgICBmLndyaXRlKHUiUlJFQ09NTUVORFMgPSAlc1xuIiAlICBwa2dpbmZvLnJyZWNvbW1lbmRzKQorICAgICAgICBpZiBwa2dpbmZvLnJzdWdnZXN0czoKKyAgICAgICAgICAgIGYud3JpdGUodSJSU1VHR0VTVFMgPSAlc1xuIiAlICBwa2dpbmZvLnJzdWdnZXN0cykKKyAgICAgICAgaWYgcGtnaW5mby5ycmVwbGFjZXM6CisgICAgICAgICAgICBmLndyaXRlKHUiUlJFUExBQ0VTID0gJXNcbiIgJSAgcGtnaW5mby5ycmVwbGFjZXMpCisgICAgICAgIGlmIHBrZ2luZm8ucmNvbmZsaWN0czoKKyAgICAgICAgICAgIGYud3JpdGUodSJSQ09ORkxJQ1RTID0gJXNcbiIgJSAgcGtnaW5mby5yY29uZmxpY3RzKQorICAgICAgICBmLndyaXRlKHUiUEtHU0laRSA9ICVkXG4iICUgIHBrZ2luZm8uc2l6ZSkKKyAgICAgICAgZi53cml0ZSh1IkZJTEVTID0gJXNcbiIgJSAgcGtnaW5mby5maWxlcykKKyAgICAgICAgZi53cml0ZSh1IkZJTEVMSVNUID0gJXNcbiIgJSAgcGtnaW5mby5maWxlbGlzdCkKKworICAgIGZvciBmaWxldmFyIGluIHBrZ2luZm8uZmlsZXZhcnM6CisgICAgICAgIGZpbGV2YXJwYXRoID0gb3MucGF0aC5qb2luKHBrZ3BhdGgsICJsYXRlc3QuJXMiICUgZmlsZXZhcikKKyAgICAgICAgdmFsID0gcGtnaW5mby5maWxldmFyc1tmaWxldmFyXQorICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKGZpbGV2YXJwYXRoLCAidyIsIGVuY29kaW5nPSd1dGY4JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHZhbCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGV2YXJwYXRoKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZXZhcnBhdGgpCisKKyMKKyMgcm9vdGZzX3R5cGUgY2FuIGJlOiBpbWFnZSwgc2RrX3RhcmdldCwgc2RrX2hvc3QKKyMKK2RlZiBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWQoZCwgcm9vdGZzX3R5cGU9ImltYWdlIik6CisgICAgZnJvbSBvZS5yb290ZnMgaW1wb3J0IGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzCisgICAgZnJvbSBvZS5zZGsgaW1wb3J0IHNka19saXN0X2luc3RhbGxlZF9wYWNrYWdlcworCisgICAgcHJvY2Vzc19saXN0ID0gWygnZmlsZScsICdiaF9pbnN0YWxsZWRfcGtncy50eHQnKSxcCisgICAgICAgICAgICAgICAgICAgICgnZGVwcycsICdiaF9pbnN0YWxsZWRfcGtnc19kZXBzLnR4dCcpXQorCisgICAgZm9yIG91dHB1dF90eXBlLCBvdXRwdXRfZmlsZSBpbiBwcm9jZXNzX2xpc3Q6CisgICAgICAgIG91dHB1dF9maWxlX2Z1bGwgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwgb3V0cHV0X2ZpbGUpCisKKyAgICAgICAgd2l0aCBvcGVuKG91dHB1dF9maWxlX2Z1bGwsICd3JykgYXMgb3V0cHV0OgorICAgICAgICAgICAgaWYgcm9vdGZzX3R5cGUgPT0gImltYWdlIjoKKyAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGUoaW1hZ2VfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMoZCwgb3V0cHV0X3R5cGUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGUoc2RrX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQsIHJvb3Rmc190eXBlID09ICJzZGtfdGFyZ2V0Iiwgb3V0cHV0X3R5cGUpKQorCitweXRob24gYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkX2ltYWdlKCkgeworICAgIGJ1aWxkaGlzdG9yeV9saXN0X2luc3RhbGxlZChkKQorfQorCitweXRob24gYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkX3Nka190YXJnZXQoKSB7CisgICAgYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkKGQsICJzZGtfdGFyZ2V0IikKK30KKworcHl0aG9uIGJ1aWxkaGlzdG9yeV9saXN0X2luc3RhbGxlZF9zZGtfaG9zdCgpIHsKKyAgICBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWQoZCwgInNka19ob3N0IikKK30KKworYnVpbGRoaXN0b3J5X2dldF9pbnN0YWxsZWQoKSB7CisJbWtkaXIgLXAgJDEKKworCSMgR2V0IGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzCisJcGtnY2FjaGU9IiQxL2luc3RhbGxlZC1wYWNrYWdlcy50bXAiCisJY2F0ICR7V09SS0RJUn0vYmhfaW5zdGFsbGVkX3BrZ3MudHh0IHwgc29ydCA+ICRwa2djYWNoZSAmJiBybSAke1dPUktESVJ9L2JoX2luc3RhbGxlZF9wa2dzLnR4dAorCisJY2F0ICRwa2djYWNoZSB8IGF3ayAneyBwcmludCAkMSB9JyA+ICQxL2luc3RhbGxlZC1wYWNrYWdlLW5hbWVzLnR4dAorCWlmIFsgLXMgJHBrZ2NhY2hlIF0gOyB0aGVuCisJCWNhdCAkcGtnY2FjaGUgfCBhd2sgJ3sgcHJpbnQgJDIgfScgfCB4YXJncyAtbjEgYmFzZW5hbWUgPiAkMS9pbnN0YWxsZWQtcGFja2FnZXMudHh0CisJZWxzZQorCQlwcmludGYgIiIgPiAkMS9pbnN0YWxsZWQtcGFja2FnZXMudHh0CisJZmkKKworCSMgUHJvZHVjZSBkZXBlbmRlbmN5IGdyYXBoCisJIyBGaXJzdCwgcXVvdGUgZWFjaCBuYW1lIHRvIGhhbmRsZSBjaGFyYWN0ZXJzIHRoYXQgY2F1c2UgaXNzdWVzIGZvciBkb3QKKwlzZWQgJ3M6XChbXnwgXSpcKToiXDEiOmcnICR7V09SS0RJUn0vYmhfaW5zdGFsbGVkX3BrZ3NfZGVwcy50eHQgPiAkMS9kZXBlbmRzLnRtcCAmJiBcCisJCXJtICR7V09SS0RJUn0vYmhfaW5zdGFsbGVkX3BrZ3NfZGVwcy50eHQKKwkjIENoYW5nZSBkZWxpbWl0ZXIgZnJvbSBwaXBlIHRvIC0+IGFuZCBzZXQgc3R5bGUgZm9yIHJlY29tbWVuZCBsaW5lcworCXNlZCAtaSAtZSAnczp8OiAtPiA6JyAtZSAnczoiXFtSRUNcXSI6W3N0eWxlPWRvdHRlZF06JyAtZSAnczokOjs6JyAkMS9kZXBlbmRzLnRtcAorCSMgQWRkIGhlYWRlciwgc29ydGVkIGFuZCBkZS1kdXBlZCBjb250ZW50cyBhbmQgZm9vdGVyIGFuZCB0aGVuIGRlbGV0ZSB0aGUgdGVtcCBmaWxlCisJcHJpbnRmICJkaWdyYXBoIGRlcGVuZHMge1xuICAgIG5vZGUgW3NoYXBlPXBsYWludGV4dF1cbiIgPiAkMS9kZXBlbmRzLmRvdAorCWNhdCAkMS9kZXBlbmRzLnRtcCB8IHNvcnQgfCB1bmlxID4+ICQxL2RlcGVuZHMuZG90CisJZWNobyAifSIgPj4gICQxL2RlcGVuZHMuZG90CisJcm0gJDEvZGVwZW5kcy50bXAKKworCSMgUHJvZHVjZSBpbnN0YWxsZWQgcGFja2FnZSBzaXplcyBsaXN0CisJcHJpbnRmICIiID4gJDEvaW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudG1wCisJY2F0ICRwa2djYWNoZSB8IHdoaWxlIHJlYWQgcGtnIHBrZ2ZpbGUgcGtnYXJjaAorCWRvCisJCXNpemU9YG9lLXBrZ2RhdGEtdXRpbCAtcCAke1BLR0RBVEFfRElSfSByZWFkLXZhbHVlICJQS0dTSVpFIiAke3BrZ31fJHtwa2dhcmNofWAKKwkJaWYgWyAiJHNpemUiICE9ICIiIF0gOyB0aGVuCisJCQllY2hvICIkc2l6ZSAkcGtnIiA+PiAkMS9pbnN0YWxsZWQtcGFja2FnZS1zaXplcy50bXAKKwkJZmkKKwlkb25lCisJY2F0ICQxL2luc3RhbGxlZC1wYWNrYWdlLXNpemVzLnRtcCB8IHNvcnQgLW4gLXIgfCBhd2sgJ3twcmludCAkMSAiXHRLaUIgIiAkMn0nID4gJDEvaW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudHh0CisJcm0gJDEvaW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudG1wCisKKwkjIFdlJ3JlIG5vdyBkb25lIHdpdGggdGhlIGNhY2hlLCBkZWxldGUgaXQKKwlybSAkcGtnY2FjaGUKKworCWlmIFsgIiQyIiAhPSAic2RrIiBdIDsgdGhlbgorCQkjIFByb2R1Y2Ugc29tZSBjdXQtZG93biBncmFwaHMgKGZvciByZWFkYWJpbGl0eSkKKwkJZ3JlcCAtdiBrZXJuZWxfaW1hZ2UgJDEvZGVwZW5kcy5kb3QgfCBncmVwIC12IGtlcm5lbC0yIHwgZ3JlcCAtdiBrZXJuZWwtMyA+ICQxL2RlcGVuZHMtbm9rZXJuZWwuZG90CisJCWdyZXAgLXYgbGliYzYgJDEvZGVwZW5kcy1ub2tlcm5lbC5kb3QgfCBncmVwIC12IGxpYmdjYyA+ICQxL2RlcGVuZHMtbm9rZXJuZWwtbm9saWJjLmRvdAorCQlncmVwIC12IHVwZGF0ZS0gJDEvZGVwZW5kcy1ub2tlcm5lbC1ub2xpYmMuZG90ID4gJDEvZGVwZW5kcy1ub2tlcm5lbC1ub2xpYmMtbm91cGRhdGUuZG90CisJCWdyZXAgLXYga2VybmVsLW1vZHVsZSAkMS9kZXBlbmRzLW5va2VybmVsLW5vbGliYy1ub3VwZGF0ZS5kb3QgPiAkMS9kZXBlbmRzLW5va2VybmVsLW5vbGliYy1ub3VwZGF0ZS1ub21vZHVsZXMuZG90CisJZmkKKworCSMgYWRkIGNvbXBsZW1lbnRhcnkgcGFja2FnZSBpbmZvcm1hdGlvbgorCWlmIFsgLWUgJHtXT1JLRElSfS9jb21wbGVtZW50YXJ5X3BrZ3MudHh0IF07IHRoZW4KKwkJY3AgJHtXT1JLRElSfS9jb21wbGVtZW50YXJ5X3BrZ3MudHh0ICQxCisJZmkKK30KKworYnVpbGRoaXN0b3J5X2dldF9pbWFnZV9pbnN0YWxsZWQoKSB7CisJIyBBbnl0aGluZyByZXF1aXJpbmcgdGhlIHVzZSBvZiB0aGUgcGFja2FnaW5nIHN5c3RlbSBzaG91bGQgYmUgZG9uZSBpbiBoZXJlCisJIyBpbiBjYXNlIHRoZSBwYWNrYWdpbmcgZmlsZXMgYXJlIGdvaW5nIHRvIGJlIHJlbW92ZWQgZm9yIHRoaXMgaW1hZ2UKKworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdCVUlMREhJU1RPUllfRkVBVFVSRVMnLCAnaW1hZ2UnLCAnMScsICcwJywgZCl9IiA9ICIwIiBdIDsgdGhlbgorCQlyZXR1cm4KKwlmaQorCisJYnVpbGRoaXN0b3J5X2dldF9pbnN0YWxsZWQgJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfQorfQorCitidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWQoKSB7CisJIyBBbnl0aGluZyByZXF1aXJpbmcgdGhlIHVzZSBvZiB0aGUgcGFja2FnaW5nIHN5c3RlbSBzaG91bGQgYmUgZG9uZSBpbiBoZXJlCisJIyBpbiBjYXNlIHRoZSBwYWNrYWdpbmcgZmlsZXMgYXJlIGdvaW5nIHRvIGJlIHJlbW92ZWQgZm9yIHRoaXMgU0RLCisKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnQlVJTERISVNUT1JZX0ZFQVRVUkVTJywgJ3NkaycsICcxJywgJzAnLCBkKX0iID0gIjAiIF0gOyB0aGVuCisJCXJldHVybgorCWZpCisKKwlidWlsZGhpc3RvcnlfZ2V0X2luc3RhbGxlZCAke0JVSUxESElTVE9SWV9ESVJfU0RLfS8kMSBzZGsKK30KKworYnVpbGRoaXN0b3J5X2dldF9zZGtfaW5zdGFsbGVkX2hvc3QoKSB7CisJYnVpbGRoaXN0b3J5X2dldF9zZGtfaW5zdGFsbGVkIGhvc3QKK30KKworYnVpbGRoaXN0b3J5X2dldF9zZGtfaW5zdGFsbGVkX3RhcmdldCgpIHsKKwlidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWQgdGFyZ2V0Cit9CisKK2J1aWxkaGlzdG9yeV9saXN0X2ZpbGVzKCkgeworCSMgTGlzdCB0aGUgZmlsZXMgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnksIGJ1dCBleGNsdWRlIGRhdGUvdGltZSBldGMuCisJIyBUaGlzIGF3ayBzY3JpcHQgaXMgc29tZXdoYXQgbWVzc3ksIGJ1dCBoYW5kbGVzIHdoZXJlIHRoZSBzaXplIGlzIG5vdCBwcmludGVkIGZvciBkZXZpY2UgZmlsZXMgdW5kZXIgcHNldWRvCisJaWYgWyAiJDMiID0gImZha2Vyb290IiBdIDsgdGhlbgorCQkoIGNkICQxICYmICR7RkFLRVJPT1RFTlZ9ICR7RkFLRVJPT1RDTUR9IGZpbmQgLiAhIC1wYXRoIC4gLXByaW50ZiAiJU0gJS0xMHUgJS0xMGcgJTEwcyAlcCAtPiAlbFxuIiB8IHNvcnQgLWs1IHwgc2VkICdzLyAqIC0+ICQvLycgPiAkMiApCisJZWxzZQorCQkoIGNkICQxICYmIGZpbmQgLiAhIC1wYXRoIC4gLXByaW50ZiAiJU0gJS0xMHUgJS0xMGcgJTEwcyAlcCAtPiAlbFxuIiB8IHNvcnQgLWs1IHwgc2VkICdzLyAqIC0+ICQvLycgPiAkMiApCisJZmkKK30KKworYnVpbGRoaXN0b3J5X2xpc3RfcGtnX2ZpbGVzKCkgeworCSMgQ3JlYXRlIGluZGl2aWR1YWwgZmlsZXMtaW4tcGFja2FnZSBmb3IgZWFjaCByZWNpcGUncyBwYWNrYWdlCisJZm9yIHBrZ2RpciBpbiAkKGZpbmQgJHtQS0dERVNUfS8qIC1tYXhkZXB0aCAwIC10eXBlIGQpOyBkbworCQlwa2duYW1lPSQoYmFzZW5hbWUgJHBrZ2RpcikKKwkJb3V0Zm9sZGVyPSIke0JVSUxESElTVE9SWV9ESVJfUEFDS0FHRX0vJHBrZ25hbWUiCisJCW91dGZpbGU9IiRvdXRmb2xkZXIvZmlsZXMtaW4tcGFja2FnZS50eHQiCisJCSMgTWFrZSBzdXJlIHRoZSBvdXRwdXQgZm9sZGVyIGV4aXN0cyBzbyB3ZSBjYW4gY3JlYXRlIHRoZSBmaWxlCisJCWlmIFsgISAtZCAkb3V0Zm9sZGVyIF0gOyB0aGVuCisJCQliYmRlYnVnIDIgIkZvbGRlciAkb3V0Zm9sZGVyIGRvZXMgbm90IGV4aXN0LCBmaWxlICRvdXRmaWxlIG5vdCBjcmVhdGVkIgorCQkJY29udGludWUKKwkJZmkKKwkJYnVpbGRoaXN0b3J5X2xpc3RfZmlsZXMgJHBrZ2RpciAkb3V0ZmlsZSBmYWtlcm9vdAorCWRvbmUKK30KKworYnVpbGRoaXN0b3J5X2dldF9pbWFnZWluZm8oKSB7CisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0JVSUxESElTVE9SWV9GRUFUVVJFUycsICdpbWFnZScsICcxJywgJzAnLCBkKX0iID0gIjAiIF0gOyB0aGVuCisJCXJldHVybgorCWZpCisKKwlidWlsZGhpc3RvcnlfbGlzdF9maWxlcyAke0lNQUdFX1JPT1RGU30gJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfS9maWxlcy1pbi1pbWFnZS50eHQKKworCSMgQ29sbGVjdCBmaWxlcyByZXF1ZXN0ZWQgaW4gQlVJTERISVNUT1JZX0lNQUdFX0ZJTEVTCisJcm0gLXJmICR7QlVJTERISVNUT1JZX0RJUl9JTUFHRX0vaW1hZ2UtZmlsZXMKKwlmb3IgZiBpbiAke0JVSUxESElTVE9SWV9JTUFHRV9GSUxFU307IGRvCisJCWlmIFsgLWYgJHtJTUFHRV9ST09URlN9LyRmIF0gOyB0aGVuCisJCQlta2RpciAtcCAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2ltYWdlLWZpbGVzL2BkaXJuYW1lICRmYAorCQkJY3AgJHtJTUFHRV9ST09URlN9LyRmICR7QlVJTERISVNUT1JZX0RJUl9JTUFHRX0vaW1hZ2UtZmlsZXMvJGYKKwkJZmkKKwlkb25lCisKKwkjIFJlY29yZCBzb21lIG1hY2hpbmUtcmVhZGFibGUgbWV0YS1pbmZvcm1hdGlvbiBhYm91dCB0aGUgaW1hZ2UKKwlwcmludGYgIiIgID4gJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfS9pbWFnZS1pbmZvLnR4dAorCWNhdCA+PiAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2ltYWdlLWluZm8udHh0IDw8RU5ECiske0BidWlsZGhpc3RvcnlfZ2V0X2ltYWdldmFycyhkKX0KK0VORAorCWltYWdlc2l6ZT1gZHUgLWtzICR7SU1BR0VfUk9PVEZTfSB8IGF3ayAneyBwcmludCAkMSB9J2AKKwllY2hvICJJTUFHRVNJWkUgPSAkaW1hZ2VzaXplIiA+PiAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2ltYWdlLWluZm8udHh0CisKKwkjIEFkZCBzb21lIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KKwllY2hvICIke01BQ0hJTkV9OiAke0lNQUdFX0JBU0VOQU1FfSBjb25maWd1cmVkIGZvciAke0RJU1RST30gJHtESVNUUk9fVkVSU0lPTn0iID4gJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfS9idWlsZC1pZC50eHQKKworCWNhdCA+PiAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2J1aWxkLWlkLnR4dCA8PEVORAorJHtAYnVpbGRoaXN0b3J5X2dldF9idWlsZF9pZChkKX0KK0VORAorfQorCitidWlsZGhpc3RvcnlfZ2V0X3Nka2luZm8oKSB7CisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0JVSUxESElTVE9SWV9GRUFUVVJFUycsICdzZGsnLCAnMScsICcwJywgZCl9IiA9ICIwIiBdIDsgdGhlbgorCQlyZXR1cm4KKwlmaQorCisJYnVpbGRoaXN0b3J5X2xpc3RfZmlsZXMgJHtTREtfT1VUUFVUfSAke0JVSUxESElTVE9SWV9ESVJfU0RLfS9maWxlcy1pbi1zZGsudHh0CisKKwkjIFJlY29yZCBzb21lIG1hY2hpbmUtcmVhZGFibGUgbWV0YS1pbmZvcm1hdGlvbiBhYm91dCB0aGUgU0RLCisJcHJpbnRmICIiICA+ICR7QlVJTERISVNUT1JZX0RJUl9TREt9L3Nkay1pbmZvLnR4dAorCWNhdCA+PiAke0JVSUxESElTVE9SWV9ESVJfU0RLfS9zZGstaW5mby50eHQgPDxFTkQKKyR7QGJ1aWxkaGlzdG9yeV9nZXRfc2RrdmFycyhkKX0KK0VORAorCXNka3NpemU9YGR1IC1rcyAke1NES19PVVRQVVR9IHwgYXdrICd7IHByaW50ICQxIH0nYAorCWVjaG8gIlNES1NJWkUgPSAkc2Rrc2l6ZSIgPj4gJHtCVUlMREhJU1RPUllfRElSX1NES30vc2RrLWluZm8udHh0Cit9CisKKyMgQnkgdXNpbmcgUk9PVEZTX1BPU1RVTklOU1RBTExfQ09NTUFORCB3ZSBnZXQgaW4gYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YKKyMgdW5uZWVkZWQgcGFja2FnZXMgYnV0IGJlZm9yZSB0aGUgcmVtb3ZhbCBvZiBwYWNrYWdpbmcgZmlsZXMKK1JPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkQgKz0gIiBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWRfaW1hZ2UgO1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRoaXN0b3J5X2dldF9pbWFnZV9pbnN0YWxsZWQgOyAiCisKK0lNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gIiBidWlsZGhpc3RvcnlfZ2V0X2ltYWdlaW5mbyA7ICIKKworIyBXZSB3YW50IHRoZXNlIHRvIGJlIHRoZSBsYXN0IHJ1biBzbyB0aGF0IHdlIGdldCBjYWxsZWQgYWZ0ZXIgY29tcGxlbWVudGFyeSBwYWNrYWdlIGluc3RhbGxhdGlvbgorUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkRfYXBwZW5kID0gIiBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWRfc2RrX3RhcmdldCA7XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWRfdGFyZ2V0IDsgIgorUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EX2FwcGVuZCA9ICIgYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkX3Nka19ob3N0IDtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWRfaG9zdCA7ICIKKworU0RLX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gImJ1aWxkaGlzdG9yeV9nZXRfc2RraW5mbyA7ICIKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfYnVpbGRfaWQoZCk6CisgICAgaWYgZC5nZXRWYXIoJ0JCX1dPUktFUkNPTlRFWFQnLCBUcnVlKSAhPSAnMSc6CisgICAgICAgIHJldHVybiAiIgorICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgIHN0YXR1c2xpbmVzID0gW10KKyAgICBmb3IgZnVuYyBpbiBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdCVUlMRENGR19GVU5DUycsIGxvY2FsZGF0YSk6CisgICAgICAgIGcgPSBnbG9iYWxzKCkKKyAgICAgICAgaWYgZnVuYyBub3QgaW4gZzoKKyAgICAgICAgICAgIGJiLndhcm4oIkJ1aWxkIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24gJyVzJyBkb2VzIG5vdCBleGlzdCIgJSBmdW5jKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmxpbmVzID0gZ1tmdW5jXShsb2NhbGRhdGEpCisgICAgICAgICAgICBpZiBmbGluZXM6CisgICAgICAgICAgICAgICAgc3RhdHVzbGluZXMuZXh0ZW5kKGZsaW5lcykKKworICAgIHN0YXR1c2hlYWRlciA9IGQuZ2V0VmFyKCdCVUlMRENGR19IRUFERVInLCBUcnVlKQorICAgIHJldHVybignXG4lc1xuJXNcbicgJSAoc3RhdHVzaGVhZGVyLCAnXG4nLmpvaW4oc3RhdHVzbGluZXMpKSkKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfbWV0YWRhdGFfcmV2cyhkKToKKyAgICAjIFdlIHdhbnQgYW4gZWFzaWx5IG1hY2hpbmUtcmVhZGFibGUgZm9ybWF0IGhlcmUsIHNvIGdldF9sYXllcnNfYnJhbmNoX3JldiBpc24ndCBxdWl0ZSB3aGF0IHdlIHdhbnQKKyAgICBsYXllcnMgPSAoZC5nZXRWYXIoIkJCTEFZRVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBtZWRhZGF0YV9yZXZzID0gWyIlLTE3cyA9ICVzOiVzIiAlIChvcy5wYXRoLmJhc2VuYW1lKGkpLCBcCisgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9icmFuY2goaSwgTm9uZSkuc3RyaXAoKSwgXAorICAgICAgICBiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24oaSwgTm9uZSkpIFwKKyAgICAgICAgICAgIGZvciBpIGluIGxheWVyc10KKyAgICByZXR1cm4gJ1xuJy5qb2luKG1lZGFkYXRhX3JldnMpCisKK2RlZiBvdXRwdXR2YXJzKHZhcnMsIGxpc3R2YXJzLCBkKToKKyAgICB2YXJzID0gdmFycy5zcGxpdCgpCisgICAgbGlzdHZhcnMgPSBsaXN0dmFycy5zcGxpdCgpCisgICAgcmV0ID0gIiIKKyAgICBmb3IgdmFyIGluIHZhcnM6CisgICAgICAgIHZhbHVlID0gZC5nZXRWYXIodmFyLCBUcnVlKSBvciAiIgorICAgICAgICBpZiB2YXIgaW4gbGlzdHZhcnM6CisgICAgICAgICAgICAjIFNxdWFzaCBvdXQgc3BhY2VzCisgICAgICAgICAgICB2YWx1ZSA9IG9lLnV0aWxzLnNxdWFzaHNwYWNlcyh2YWx1ZSkKKyAgICAgICAgcmV0ICs9ICIlcyA9ICVzXG4iICUgKHZhciwgdmFsdWUpCisgICAgcmV0dXJuIHJldC5yc3RyaXAoJ1xuJykKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfaW1hZ2V2YXJzKGQpOgorICAgIGlmIGQuZ2V0VmFyKCdCQl9XT1JLRVJDT05URVhUJywgVHJ1ZSkgIT0gJzEnOgorICAgICAgICByZXR1cm4gIiIKKyAgICBpbWFnZXZhcnMgPSAiRElTVFJPIERJU1RST19WRVJTSU9OIFVTRVJfQ0xBU1NFUyBJTUFHRV9DTEFTU0VTIElNQUdFX0ZFQVRVUkVTIElNQUdFX0xJTkdVQVMgSU1BR0VfSU5TVEFMTCBCQURfUkVDT01NRU5EQVRJT05TIE5PX1JFQ09NTUVOREFUSU9OUyBQQUNLQUdFX0VYQ0xVREUgUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORCIKKyAgICBsaXN0dmFycyA9ICJVU0VSX0NMQVNTRVMgSU1BR0VfQ0xBU1NFUyBJTUFHRV9GRUFUVVJFUyBJTUFHRV9MSU5HVUFTIElNQUdFX0lOU1RBTEwgQkFEX1JFQ09NTUVOREFUSU9OUyBQQUNLQUdFX0VYQ0xVREUiCisgICAgcmV0dXJuIG91dHB1dHZhcnMoaW1hZ2V2YXJzLCBsaXN0dmFycywgZCkKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfc2RrdmFycyhkKToKKyAgICBpZiBkLmdldFZhcignQkJfV09SS0VSQ09OVEVYVCcsIFRydWUpICE9ICcxJzoKKyAgICAgICAgcmV0dXJuICIiCisgICAgc2RrdmFycyA9ICJESVNUUk8gRElTVFJPX1ZFUlNJT04gU0RLX05BTUUgU0RLX1ZFUlNJT04gU0RLTUFDSElORSBTREtJTUFHRV9GRUFUVVJFUyBCQURfUkVDT01NRU5EQVRJT05TIE5PX1JFQ09NTUVOREFUSU9OUyBQQUNLQUdFX0VYQ0xVREUiCisgICAgbGlzdHZhcnMgPSAiU0RLSU1BR0VfRkVBVFVSRVMgQkFEX1JFQ09NTUVOREFUSU9OUyBQQUNLQUdFX0VYQ0xVREUiCisgICAgcmV0dXJuIG91dHB1dHZhcnMoc2RrdmFycywgbGlzdHZhcnMsIGQpCisKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfY21kbGluZShkKToKKyAgICBpZiBzeXMuYXJndlswXS5lbmRzd2l0aCgnYmluL2JpdGJha2UnKToKKyAgICAgICAgYmluY21kID0gJ2JpdGJha2UnCisgICAgZWxzZToKKyAgICAgICAgYmluY21kID0gc3lzLmFyZ3ZbMF0KKyAgICByZXR1cm4gJyVzICVzJyAlIChiaW5jbWQsICcgJy5qb2luKHN5cy5hcmd2WzE6XSkpCisKKworYnVpbGRoaXN0b3J5X3NpbmdsZV9jb21taXQoKSB7CisJaWYgWyAiJDMiID0gIiIgXSA7IHRoZW4KKwkJY29tbWl0b3B0cz0iJHtCVUlMREhJU1RPUllfRElSfS8gLS1hbGxvdy1lbXB0eSIKKwkJaXRlbT0iTm8gY2hhbmdlcyIKKwllbHNlCisJCWNvbW1pdG9wdHM9IiQzIG1ldGFkYXRhLXJldnMiCisJCWl0ZW09IiQzIgorCWZpCisJaWYgWyAiJHtCVUlMREhJU1RPUllfQlVJTERfRkFJTFVSRVN9IiA9ICIwIiBdIDsgdGhlbgorCQlyZXN1bHQ9InN1Y2NlZWRlZCIKKwllbHNlCisJCXJlc3VsdD0iZmFpbGVkIgorCWZpCisJY2FzZSAke0JVSUxESElTVE9SWV9CVUlMRF9JTlRFUlJVUFRFRH0gaW4KKwkJMSkKKwkJCXJlc3VsdD0iJHJlc3VsdCAoaW50ZXJydXB0ZWQpIgorCQkJOzsKKwkJMikKKwkJCXJlc3VsdD0iJHJlc3VsdCAoZm9yY2UgaW50ZXJydXB0ZWQpIgorCQkJOzsKKwllc2FjCisJY29tbWl0bXNnZmlsZT1gbWt0ZW1wYAorCWNhdCA+ICRjb21taXRtc2dmaWxlIDw8IEVORAorJGl0ZW06IEJ1aWxkICR7QlVJTEROQU1FfSBvZiAke0RJU1RST30gJHtESVNUUk9fVkVSU0lPTn0gZm9yIG1hY2hpbmUgJHtNQUNISU5FfSBvbiAkMgorCitjbWQ6ICQxCisKK3Jlc3VsdDogJHJlc3VsdAorCittZXRhZGF0YSByZXZpc2lvbnM6CitFTkQKKwljYXQgJHtCVUlMREhJU1RPUllfRElSfS9tZXRhZGF0YS1yZXZzID4+ICRjb21taXRtc2dmaWxlCisJZ2l0IGNvbW1pdCAkY29tbWl0b3B0cyAtRiAkY29tbWl0bXNnZmlsZSAtLWF1dGhvciAiJHtCVUlMREhJU1RPUllfQ09NTUlUX0FVVEhPUn0iID4gL2Rldi9udWxsCisJcm0gJGNvbW1pdG1zZ2ZpbGUKK30KKworYnVpbGRoaXN0b3J5X2NvbW1pdCgpIHsKKwlpZiBbICEgLWQgJHtCVUlMREhJU1RPUllfRElSfSBdIDsgdGhlbgorCQkjIENvZGUgYWJvdmUgdGhhdCBjcmVhdGVzIHRoaXMgZGlyIG5ldmVyIGV4ZWN1dGVkLCBzbyB0aGVyZSBjYW4ndCBiZSBhbnl0aGluZyB0byBjb21taXQKKwkJcmV0dXJuCisJZmkKKworCSMgQ3JlYXRlIGEgbWFjaGluZS1yZWFkYWJsZSBsaXN0IG9mIG1ldGFkYXRhIHJldmlzaW9ucyBmb3IgZWFjaCBsYXllcgorCWNhdCA+ICR7QlVJTERISVNUT1JZX0RJUn0vbWV0YWRhdGEtcmV2cyA8PEVORAorJHtAYnVpbGRoaXN0b3J5X2dldF9tZXRhZGF0YV9yZXZzKGQpfQorRU5ECisKKwkoIGNkICR7QlVJTERISVNUT1JZX0RJUn0vCisJCSMgSW5pdGlhbGlzZSB0aGUgcmVwbyBpZiBuZWNlc3NhcnkKKwkJaWYgWyAhIC1kIC5naXQgXSA7IHRoZW4KKwkJCWdpdCBpbml0IC1xCisJCWVsc2UKKwkJCWdpdCB0YWcgLWYgYnVpbGQtbWludXMtMyBidWlsZC1taW51cy0yID4gL2Rldi9udWxsIDI+JjEgfHwgdHJ1ZQorCQkJZ2l0IHRhZyAtZiBidWlsZC1taW51cy0yIGJ1aWxkLW1pbnVzLTEgPiAvZGV2L251bGwgMj4mMSB8fCB0cnVlCisJCQlnaXQgdGFnIC1mIGJ1aWxkLW1pbnVzLTEgPiAvZGV2L251bGwgMj4mMSB8fCB0cnVlCisJCWZpCisJCSMgSWYgdGhlIHVzZXIgaGFzbid0IHNldCB1cCB0aGVpciBuYW1lL2VtYWlsLCBzZXQgc29tZSBkZWZhdWx0cworCQkjIGp1c3QgZm9yIHRoaXMgcmVwbyAob3RoZXJ3aXNlIHRoZSBjb21taXQgd2lsbCBmYWlsIHdpdGggb2xkZXIKKwkJIyB2ZXJzaW9ucyBvZiBnaXQpCisJCWlmICEgZ2l0IGNvbmZpZyB1c2VyLmVtYWlsID4gL2Rldi9udWxsIDsgdGhlbgorCQkJZ2l0IGNvbmZpZyAtLWxvY2FsIHVzZXIuZW1haWwgImJ1aWxkaGlzdG9yeUAke0RJU1RST30iCisJCWZpCisJCWlmICEgZ2l0IGNvbmZpZyB1c2VyLm5hbWUgPiAvZGV2L251bGwgOyB0aGVuCisJCQlnaXQgY29uZmlnIC0tbG9jYWwgdXNlci5uYW1lICJidWlsZGhpc3RvcnkiCisJCWZpCisJCSMgQ2hlY2sgaWYgdGhlcmUgYXJlIG5ldy9jaGFuZ2VkIGZpbGVzIHRvIGNvbW1pdCAob3RoZXIgdGhhbiBtZXRhZGF0YS1yZXZzKQorCQlyZXBvc3RhdHVzPWBnaXQgc3RhdHVzIC0tcG9yY2VsYWluIHwgZ3JlcCAtdiAiIG1ldGFkYXRhLXJldnMkImAKKwkJSE9TVE5BTUU9YGhvc3RuYW1lIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKwkJQ01ETElORT0iJHtAYnVpbGRoaXN0b3J5X2dldF9jbWRsaW5lKGQpfSIKKwkJaWYgWyAiJHJlcG9zdGF0dXMiICE9ICIiIF0gOyB0aGVuCisJCQlnaXQgYWRkIC1BIC4KKwkJCSMgcG9yY2VsYWluIG91dHB1dCBsb29rcyBsaWtlICI/PyBwYWNrYWdlcy9mb28vYmFyIgorCQkJIyBFbnN1cmUgd2UgY29tbWl0IG1ldGFkYXRhLXJldnMgd2l0aCB0aGUgZmlyc3QgY29tbWl0CisJCQlmb3IgZW50cnkgaW4gYGVjaG8gIiRyZXBvc3RhdHVzIiB8IGF3ayAne3ByaW50ICQyfScgfCBhd2sgLUYvICd7cHJpbnQgJDF9JyB8IHNvcnQgfCB1bmlxYCA7IGRvCisJCQkJYnVpbGRoaXN0b3J5X3NpbmdsZV9jb21taXQgIiRDTURMSU5FIiAiJEhPU1ROQU1FIiAiJGVudHJ5IgorCQkJZG9uZQorCQkJZ2l0IGdjIC0tYXV0byAtLXF1aWV0CisJCWVsc2UKKwkJCWJ1aWxkaGlzdG9yeV9zaW5nbGVfY29tbWl0ICIkQ01ETElORSIgIiRIT1NUTkFNRSIKKwkJZmkKKwkJaWYgWyAiJHtCVUlMREhJU1RPUllfUFVTSF9SRVBPfSIgIT0gIiIgXSA7IHRoZW4KKwkJCWdpdCBwdXNoIC1xICR7QlVJTERISVNUT1JZX1BVU0hfUkVQT30KKwkJZmkpIHx8IHRydWUKK30KKworcHl0aG9uIGJ1aWxkaGlzdG9yeV9ldmVudGhhbmRsZXIoKSB7CisgICAgaWYgZS5kYXRhLmdldFZhcignQlVJTERISVNUT1JZX0ZFQVRVUkVTJywgVHJ1ZSkuc3RyaXAoKToKKyAgICAgICAgaWYgZS5kYXRhLmdldFZhcigiQlVJTERISVNUT1JZX0NPTU1JVCIsIFRydWUpID09ICIxIjoKKyAgICAgICAgICAgIGJiLm5vdGUoIldyaXRpbmcgYnVpbGRoaXN0b3J5IikKKyAgICAgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShlLmRhdGEpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdCVUlMREhJU1RPUllfQlVJTERfRkFJTFVSRVMnLCBzdHIoZS5fZmFpbHVyZXMpKQorICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBnZXRhdHRyKGUsICdfaW50ZXJydXB0ZWQnLCAwKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignQlVJTERISVNUT1JZX0JVSUxEX0lOVEVSUlVQVEVEJywgc3RyKGludGVycnVwdGVkKSkKKyAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiYnVpbGRoaXN0b3J5X2NvbW1pdCIsIGxvY2FsZGF0YSkKK30KKworYWRkaGFuZGxlciBidWlsZGhpc3RvcnlfZXZlbnRoYW5kbGVyCitidWlsZGhpc3RvcnlfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQiCisKKworIyBGSVhNRSB0aGlzIG91Z2h0IHRvIGJlIG1vdmVkIGludG8gdGhlIGZldGNoZXIKK2RlZiBfZ2V0X3NyY3Jldl92YWx1ZXMoZCk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSB2ZXJzaW9uIHN0cmluZ3MgZm9yIHRoZSBjdXJyZW50IHJlY2lwZQorICAgICIiIgorCisgICAgc2NtcyA9IFtdCisgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkuc3BsaXQoKSwgZCkKKyAgICB1cmxkYXRhID0gZmV0Y2hlci51ZAorICAgIGZvciB1IGluIHVybGRhdGE6CisgICAgICAgIGlmIHVybGRhdGFbdV0ubWV0aG9kLnN1cHBvcnRzX3NyY3JldigpOgorICAgICAgICAgICAgc2Ntcy5hcHBlbmQodSkKKworICAgIGF1dG9pbmNfdGVtcGwgPSAnQVVUT0lOQysnCisgICAgZGljdF9zcmNyZXZzID0ge30KKyAgICBkaWN0X3RhZ19zcmNyZXZzID0ge30KKyAgICBmb3Igc2NtIGluIHNjbXM6CisgICAgICAgIHVkID0gdXJsZGF0YVtzY21dCisgICAgICAgIGZvciBuYW1lIGluIHVkLm5hbWVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldiA9IHVkLm1ldGhvZC5zb3J0YWJsZV9yZXZpc2lvbih1ZCwgZCwgbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBzdXBwb3J0IG9sZCBiaXRiYWtlIHZlcnNpb25zCisgICAgICAgICAgICAgICAgcmV2ID0gdWQubWV0aG9kLnNvcnRhYmxlX3JldmlzaW9uKHNjbSwgdWQsIGQsIG5hbWUpCisgICAgICAgICAgICAjIENsZWFuIHRoaXMgdXAgd2hlbiB3ZSBuZXh0IGJ1bXAgYml0YmFrZSB2ZXJzaW9uCisgICAgICAgICAgICBpZiB0eXBlKHJldikgIT0gc3RyOgorICAgICAgICAgICAgICAgIGF1dG9pbmMsIHJldiA9IHJldgorICAgICAgICAgICAgZWxpZiByZXYuc3RhcnRzd2l0aChhdXRvaW5jX3RlbXBsKToKKyAgICAgICAgICAgICAgICByZXYgPSByZXZbbGVuKGF1dG9pbmNfdGVtcGwpOl0KKyAgICAgICAgICAgIGRpY3Rfc3JjcmV2c1tuYW1lXSA9IHJldgorICAgICAgICAgICAgaWYgJ3RhZycgaW4gdWQucGFybToKKyAgICAgICAgICAgICAgICB0YWcgPSB1ZC5wYXJtWyd0YWcnXTsKKyAgICAgICAgICAgICAgICBrZXkgPSBuYW1lKydfJyt0YWcKKyAgICAgICAgICAgICAgICBkaWN0X3RhZ19zcmNyZXZzW2tleV0gPSByZXYKKyAgICByZXR1cm4gKGRpY3Rfc3JjcmV2cywgZGljdF90YWdfc3JjcmV2cykKKworZG9fZmV0Y2hbcG9zdGZ1bmNzXSArPSAid3JpdGVfc3JjcmV2IgorZG9fZmV0Y2hbdmFyZGVwc2V4Y2x1ZGVdICs9ICJ3cml0ZV9zcmNyZXYiCitweXRob24gd3JpdGVfc3JjcmV2KCkgeworICAgIHBrZ2hpc3RkaXIgPSBkLmdldFZhcignQlVJTERISVNUT1JZX0RJUl9QQUNLQUdFJywgVHJ1ZSkKKyAgICBzcmNyZXZmaWxlID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsICdsYXRlc3Rfc3JjcmV2JykKKworICAgIHNyY3JldnMsIHRhZ19zcmNyZXZzID0gX2dldF9zcmNyZXZfdmFsdWVzKGQpCisgICAgaWYgc3JjcmV2czoKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBrZ2hpc3RkaXIpOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBrZ2hpc3RkaXIpCisgICAgICAgIG9sZF90YWdfc3JjcmV2cyA9IHt9CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNyY3JldmZpbGUpOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNyY3JldmZpbGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjIHRhZ18nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgdmFsdWUgPSBsaW5lLnNwbGl0KCI9IiwgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5yZXBsYWNlKCcjIHRhZ18nLCAnJykuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCciJywgJycpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZF90YWdfc3JjcmV2c1trZXldID0gdmFsdWUKKyAgICAgICAgd2l0aCBvcGVuKHNyY3JldmZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIG9yaWdfc3JjcmV2ID0gZC5nZXRWYXIoJ1NSQ1JFVicsIEZhbHNlKSBvciAnSU5WQUxJRCcKKyAgICAgICAgICAgIGlmIG9yaWdfc3JjcmV2ICE9ICdJTlZBTElEJzoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCcjIFNSQ1JFViA9ICIlcyJcbicgJSBvcmlnX3NyY3JldikKKyAgICAgICAgICAgIGlmIGxlbihzcmNyZXZzKSA+IDE6CisgICAgICAgICAgICAgICAgZm9yIG5hbWUsIHNyY3JldiBpbiBzcmNyZXZzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIG9yaWdfc3JjcmV2ID0gZC5nZXRWYXIoJ1NSQ1JFVl8lcycgJSBuYW1lLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgb3JpZ19zcmNyZXY6CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCcjIFNSQ1JFVl8lcyA9ICIlcyJcbicgJSAobmFtZSwgb3JpZ19zcmNyZXYpKQorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCdTUkNSRVZfJXMgPSAiJXMiXG4nICUgKG5hbWUsIHNyY3JldikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ1NSQ1JFViA9ICIlcyJcbicgJSBzcmNyZXZzLml0ZXJ2YWx1ZXMoKS5uZXh0KCkpCisgICAgICAgICAgICBpZiBsZW4odGFnX3NyY3JldnMpID4gMDoKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSwgc3JjcmV2IGluIHRhZ19zcmNyZXZzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyMgdGFnXyVzID0gIiVzIlxuJyAlIChuYW1lLCBzcmNyZXYpKQorICAgICAgICAgICAgICAgICAgICBpZiBuYW1lIGluIG9sZF90YWdfc3JjcmV2cyBhbmQgb2xkX3RhZ19zcmNyZXZzW25hbWVdICE9IHNyY3JldjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZyA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJSZXZpc2lvbiBmb3IgdGFnICVzIGluIHBhY2thZ2UgJXMgd2FzIGNoYW5nZWQgc2luY2UgbGFzdCBidWlsZCAoZnJvbSAlcyB0byAlcykiICUgKG5hbWUsIHBrZywgb2xkX3RhZ19zcmNyZXZzW25hbWVdLCBzcmNyZXYpKQorCisgICAgZWxzZToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3JjcmV2ZmlsZSk6CisgICAgICAgICAgICBvcy5yZW1vdmUoc3JjcmV2ZmlsZSkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMtc3VtbWFyeS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYnVpbGRzdGF0cy1zdW1tYXJ5LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlYWQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMtc3VtbWFyeS5iYmNsYXNzCkBAIC0wLDAgKzEsMzcgQEAKKyMgU3VtbWFyaXplIHNzdGF0ZSB1c2FnZSBhdCB0aGUgZW5kIG9mIHRoZSBidWlsZAorcHl0aG9uIGJ1aWxkc3RhdHNfc3VtbWFyeSAoKSB7CisgICAgaW1wb3J0IGNvbGxlY3Rpb25zCisgICAgaW1wb3J0IG9zLnBhdGgKKworICAgIGJuID0gZ2V0X2JuKGUpCisgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhic2Rpcik6CisgICAgICAgIHJldHVybgorCisgICAgc3N0YXRldGFza3MgPSAoZS5kYXRhLmdldFZhcignU1NUQVRFVEFTS1MnLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgIGJ1aWx0ID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGFtYmRhOiBbc2V0KCksIHNldCgpXSkKKyAgICBmb3IgcGYgaW4gb3MubGlzdGRpcihic2Rpcik6CisgICAgICAgIHRhc2tkaXIgPSBvcy5wYXRoLmpvaW4oYnNkaXIsIHBmKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcih0YXNrZGlyKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgdGFza3MgPSBvcy5saXN0ZGlyKHRhc2tkaXIpCisgICAgICAgIGZvciB0IGluIHNzdGF0ZXRhc2tzOgorICAgICAgICAgICAgbm9fc3N0YXRlLCBzc3RhdGUgPSBidWlsdFt0XQorICAgICAgICAgICAgaWYgdCBpbiB0YXNrczoKKyAgICAgICAgICAgICAgICBub19zc3RhdGUuYWRkKHBmKQorICAgICAgICAgICAgZWxpZiB0ICsgJ19zZXRzY2VuZScgaW4gdGFza3M6CisgICAgICAgICAgICAgICAgc3N0YXRlLmFkZChwZikKKworICAgIGhlYWRlcl9wcmludGVkID0gRmFsc2UKKyAgICBmb3IgdCBpbiBzc3RhdGV0YXNrczoKKyAgICAgICAgbm9fc3N0YXRlLCBzc3RhdGUgPSBidWlsdFt0XQorICAgICAgICBpZiBub19zc3RhdGUgfCBzc3RhdGU6CisgICAgICAgICAgICBpZiBub3QgaGVhZGVyX3ByaW50ZWQ6CisgICAgICAgICAgICAgICAgaGVhZGVyX3ByaW50ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgYmIubm90ZSgiQnVpbGQgY29tcGxldGlvbiBzdW1tYXJ5OiIpCisKKyAgICAgICAgICAgIGJiLm5vdGUoIiAgezB9OiB7MX0lIHNzdGF0ZSByZXVzZSAoezJ9IHNldHNjZW5lLCB7M30gc2NyYXRjaCkiLmZvcm1hdCh0LCAxMDAqbGVuKHNzdGF0ZSkvKGxlbihzc3RhdGUpK2xlbihub19zc3RhdGUpKSwgbGVuKHNzdGF0ZSksIGxlbihub19zc3RhdGUpKSkKK30KK2FkZGhhbmRsZXIgYnVpbGRzdGF0c19zdW1tYXJ5CitidWlsZHN0YXRzX3N1bW1hcnlbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmVjNTcxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYnVpbGRzdGF0cy5iYmNsYXNzCkBAIC0wLDAgKzEsMjcwIEBACitCVUlMRFNUQVRTX0JBU0UgPSAiJHtUTVBESVJ9L2J1aWxkc3RhdHMvIgorQlVJTERTVEFUU19CTkZJTEUgPSAiJHtCVUlMRFNUQVRTX0JBU0V9Ly5idWlsZG5hbWUiCitCVUlMRFNUQVRTX0RFVkZJTEUgPSAiJHtCVUlMRFNUQVRTX0JBU0V9Ly5kZXZpY2UiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJ1aWxkIHN0YXRpc3RpY3MgZ2F0aGVyaW5nLgorIworIyBUaGUgQ1BVIGFuZCBUaW1lIGdhdGhlcmluZy90cmFja2luZyBmdW5jdGlvbnMgYW5kIGJiZXZlbnQgaW5zcGlyYXRpb24KKyMgd2VyZSB3cml0dGVuIGJ5IENocmlzdG9waGVyIExhcnNvbiBhbmQgY2FuIGJlIHNlZW4gaGVyZToKKyMgaHR0cDovL2tlcmdvdGgucGFzdGV5Lm5ldC8xNDI4MTMKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZiBnZXRfcHJvY2Vzc19jcHV0aW1lKHBpZCk6CisgICAgd2l0aCBvcGVuKCIvcHJvYy8lZC9zdGF0IiAlIHBpZCwgInIiKSBhcyBmOgorICAgICAgICBmaWVsZHMgPSBmLnJlYWRsaW5lKCkucnN0cmlwKCkuc3BsaXQoKQorICAgICMgMTM6IHV0aW1lLCAxNDogc3RpbWUsIDE1OiBjdXRpbWUsIDE2OiBjc3RpbWUKKyAgICByZXR1cm4gc3VtKGludChmaWVsZCkgZm9yIGZpZWxkIGluIGZpZWxkc1sxMzoxNl0pCisKK2RlZiBnZXRfY3B1dGltZSgpOgorICAgIHdpdGggb3BlbigiL3Byb2Mvc3RhdCIsICJyIikgYXMgZjoKKyAgICAgICAgZmllbGRzID0gZi5yZWFkbGluZSgpLnJzdHJpcCgpLnNwbGl0KClbMTpdCisgICAgcmV0dXJuIHN1bShpbnQoZmllbGQpIGZvciBmaWVsZCBpbiBmaWVsZHMpCisKK2RlZiBzZXRfYm4oZSk6CisgICAgYm4gPSBlLmdldFBrZ3MoKVswXSArICItIiArIGUuZGF0YS5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKQorICAgIHRyeToKKyAgICAgICAgb3MucmVtb3ZlKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQk5GSUxFJywgVHJ1ZSkpCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisgICAgd2l0aCBvcGVuKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQk5GSUxFJywgVHJ1ZSksICJ3IikgYXMgZjoKKyAgICAgICAgZi53cml0ZShvcy5wYXRoLmpvaW4oYm4sIGUuZGF0YS5nZXRWYXIoJ0JVSUxETkFNRScsIFRydWUpKSkKKworZGVmIGdldF9ibihlKToKKyAgICB3aXRoIG9wZW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CTkZJTEUnLCBUcnVlKSkgYXMgZjoKKyAgICAgICAgYm4gPSBmLnJlYWRsaW5lKCkKKyAgICByZXR1cm4gYm4KKworZGVmIHNldF9kZXZpY2UoZSk6CisgICAgdG1wZGlyID0gZS5kYXRhLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICBkZXZmaWxlID0gZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19ERVZGSUxFJywgVHJ1ZSkKKyAgICB0cnk6CisgICAgICAgIG9zLnJlbW92ZShkZXZmaWxlKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIFdlIGxvb2sgZm9yIHRoZSB2b2x1bWUgVE1QRElSIGxpdmVzIG9uLiBUbyBkbyBhbGwgZGlza3Mgd291bGQgbWFrZSBsaXR0bGUKKyAgICAjIHNlbnNlIGFuZCBub3QgZ2l2ZSB1cyBhbnkgcGFydGljdWxhcmx5IHVzZWZ1bCBkYXRhLiBJbiB0aGVvcnkgd2UgY291bGQgZG8KKyAgICAjIHNvbWV0aGluZyBsaWtlIHN0aWNrIERMX0RJUiBvbiBhIGRpZmZlcmVudCBwYXJ0aXRpb24gYW5kIHRoaXMgd291bGQKKyAgICAjIHRocm93IHN0YXRzIGdhdGhlcmluZyBvZmYuIFRoZSBzYW1lIGdvZXMgd2l0aCBTU1RBVEVfRElSLiBIb3dldmVyLCBsZXQncworICAgICMgZ2V0IHRoZSBiYXNpY3MgaW4gaGVyZSBhbmQgd29yayBvbiB0aGUgY29ybmVyY2FzZXMgbGF0ZXIuCisgICAgIyBBIG5vdGUuIC9wcm9jL2Rpc2tzdGF0cyBkb2VzIG5vdCBjb250YWluIGluZm8gb24gZW5jcnlwdGZzLCB0bXBmcywgZXRjLgorICAgICMgSWYgd2UgZW5kIHVwIGhpdHRpbmcgb25lIG9mIHRoZXNlIGZzLCB3ZSdsbCBqdXN0IHNraXAgZGlza3N0YXRzIGNvbGxlY3Rpb24uCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgIGRldmljZSA9IG9zLnN0YXQodG1wZGlyKQorICAgIG1ham9yZGV2ID0gb3MubWFqb3IobG9uZyhkZXZpY2Uuc3RfZGV2KSkKKyAgICBtaW5vcmRldiA9IG9zLm1pbm9yKGxvbmcoZGV2aWNlLnN0X2RldikpCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQnVnIDE3MDA6CisgICAgIyBCZWNhdXNlIHRtcGZzL2VuY3J5cHRmcy9yYW1mcyBldGMgaW5zZXJ0cyBubyBlbnRyeSBpbiAvcHJvYy9kaXNrc3RhdHMKKyAgICAjIHdlIHNldCByZGV2IHRvIE5vTG9naWNhbERldmljZSBhbmQgc2VhcmNoIGZvciBpdCBsYXRlci4gSWYgd2UgZmluZCBOTEQKKyAgICAjIHdlIGRvIG5vdCBjb2xsZWN0IGRpc2tzdGF0cyBhcyB0aGUgbWV0aG9kIHRvIGNvbGxlY3QgbWVhbmluZ2Z1bCBzdGF0aXN0aWNzCisgICAgIyBmb3IgdGhlc2UgZnMgdHlwZXMgcmVxdWlyZXMgYSBiaXQgbW9yZSByZXNlYXJjaC4KKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgcmRldiA9ICJOb0xvZ2ljYWxEZXZpY2UiCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oIi9wcm9jL2Rpc2tzdGF0cyIsICJyIikgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgaWYgbWFqb3JkZXYgPT0gaW50KGxpbmUuc3BsaXQoKVswXSkgYW5kIG1pbm9yZGV2ID09IGludChsaW5lLnNwbGl0KClbMV0pOgorICAgICAgICAgICAgICAgICAgICByZGV2ID0gbGluZS5zcGxpdCgpWzJdCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisgICAgd2l0aCBvcGVuKGRldmZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgZi53cml0ZShyZGV2KQorCitkZWYgZ2V0X2RldmljZShlKToKKyAgICB3aXRoIG9wZW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19ERVZGSUxFJywgVHJ1ZSkpIGFzIGY6CisgICAgICAgIGRldmljZSA9IGYucmVhZGxpbmUoKQorICAgIHJldHVybiBkZXZpY2UKKworZGVmIGdldF9kaXNrc3RhdHMoZGV2KToKKyAgICBpbXBvcnQgaXRlcnRvb2xzCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgRm9yIGluZm8gb24gd2hhdCB0aGVzZSBhcmUsIHNlZSBrZXJuZWwgZG9jIGZpbGUgaW9zdGF0cy50eHQKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgRFNUQVRfS0VZUyA9IFsnUmVhZHNDb21wJywgJ1JlYWRzTWVyZ2VkJywgJ1NlY3RSZWFkJywgJ1RpbWVSZWFkcycsICdXcml0ZXNDb21wJywgJ1NlY3RXcml0ZScsICdUaW1lV3JpdGUnLCAnSU9pblByb2dyZXNzJywgJ1RpbWVJTycsICdXVGltZUlPJ10KKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbigiL3Byb2MvZGlza3N0YXRzIiwgInIiKSBhcyBmOgorICAgICAgICAgICAgZm9yIHggaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBkZXYgaW4geDoKKyAgICAgICAgICAgICAgICAgICAgZGlza3N0YXRzX3ZhbCA9IHgucnN0cmlwKCkuc3BsaXQoKVs0Ol0KKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICByZXR1cm4KKyAgICBkaXNrc3RhdHMgPSBkaWN0KGl0ZXJ0b29scy5pemlwKERTVEFUX0tFWVMsIGRpc2tzdGF0c192YWwpKQorICAgIHJldHVybiBkaXNrc3RhdHMKKworZGVmIHNldF9kaXNrZGF0YSh2YXIsIGRldiwgZGF0YSk6CisgICAgZGF0YS5zZXRWYXIodmFyLCBnZXRfZGlza3N0YXRzKGRldikpCisKK2RlZiBnZXRfZGlza2RhdGEodmFyLCBkZXYsIGRhdGEpOgorICAgIG9sZGRpc2tkYXRhID0gZGF0YS5nZXRWYXIodmFyLCBGYWxzZSkKKyAgICBkaXNrZGF0YSA9IHt9CisgICAgaWYgb2xkZGlza2RhdGEgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuCisgICAgbmV3ZGlza2RhdGEgPSBnZXRfZGlza3N0YXRzKGRldikKKyAgICBmb3Iga2V5IGluIG9sZGRpc2tkYXRhLml0ZXJrZXlzKCk6CisgICAgICAgIGRpc2tkYXRhWyJTdGFydCIra2V5XSA9IHN0cihpbnQob2xkZGlza2RhdGFba2V5XSkpCisgICAgICAgIGRpc2tkYXRhWyJFbmQiK2tleV0gPSBzdHIoaW50KG5ld2Rpc2tkYXRhW2tleV0pKQorICAgIHJldHVybiBkaXNrZGF0YQorCitkZWYgc2V0X3RpbWVkYXRhKHZhciwgZGF0YSwgc2VydmVyX3RpbWU9Tm9uZSk6CisgICAgaW1wb3J0IHRpbWUKKyAgICBpZiBzZXJ2ZXJfdGltZToKKyAgICAgICAgdGltZSA9IHNlcnZlcl90aW1lCisgICAgZWxzZToKKyAgICAgICAgdGltZSA9IHRpbWUudGltZSgpCisgICAgY3B1dGltZSA9IGdldF9jcHV0aW1lKCkKKyAgICBwcm9jdGltZSA9IGdldF9wcm9jZXNzX2NwdXRpbWUob3MuZ2V0cGlkKCkpCisgICAgZGF0YS5zZXRWYXIodmFyLCAodGltZSwgY3B1dGltZSwgcHJvY3RpbWUpKQorCitkZWYgZ2V0X3RpbWVkYXRhKHZhciwgZGF0YSwgc2VydmVyX3RpbWU9Tm9uZSk6CisgICAgaW1wb3J0IHRpbWUKKyAgICB0aW1lZGF0YSA9IGRhdGEuZ2V0VmFyKHZhciwgRmFsc2UpCisgICAgaWYgdGltZWRhdGEgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuCisgICAgb2xkdGltZSwgb2xkY3B1LCBvbGRwcm9jID0gdGltZWRhdGEKKyAgICBwcm9jZGlmZiA9IGdldF9wcm9jZXNzX2NwdXRpbWUob3MuZ2V0cGlkKCkpIC0gb2xkcHJvYworICAgIGNwdWRpZmYgPSBnZXRfY3B1dGltZSgpIC0gb2xkY3B1CisgICAgaWYgc2VydmVyX3RpbWU6CisgICAgICAgIGVuZF90aW1lID0gc2VydmVyX3RpbWUKKyAgICBlbHNlOgorICAgICAgICBlbmRfdGltZSA9IHRpbWUudGltZSgpCisgICAgdGltZWRpZmYgPSBlbmRfdGltZSAtIG9sZHRpbWUKKyAgICBpZiBjcHVkaWZmID4gMDoKKyAgICAgICAgY3B1cGVyYyA9IGZsb2F0KHByb2NkaWZmKSAqIDEwMCAvIGNwdWRpZmYKKyAgICBlbHNlOgorICAgICAgICBjcHVwZXJjID0gTm9uZQorICAgIHJldHVybiB0aW1lZGlmZiwgY3B1cGVyYworCitkZWYgd3JpdGVfdGFza19kYXRhKHN0YXR1cywgbG9nZmlsZSwgZGV2LCBlKToKKyAgICBibiA9IGdldF9ibihlKQorICAgIGJzZGlyID0gb3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBibikKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGxvZ2ZpbGUpLCAiYSIpIGFzIGY6CisgICAgICAgIHRpbWVkYXRhID0gZ2V0X3RpbWVkYXRhKCJfX3RpbWVkYXRhX3Rhc2siLCBlLmRhdGEsIGUudGltZSkKKyAgICAgICAgaWYgdGltZWRhdGE6CisgICAgICAgICAgICBlbGFwc2VkdGltZSwgY3B1ID0gdGltZWRhdGEKKyAgICAgICAgICAgIGYud3JpdGUoYmIuZGF0YS5leHBhbmQoIiR7UEZ9OiAlczogRWxhcHNlZCB0aW1lOiAlMC4yZiBzZWNvbmRzIFxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS50YXNrLCBlbGFwc2VkdGltZSksIGUuZGF0YSkpCisgICAgICAgICAgICBpZiBjcHU6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiQ1BVIHVzYWdlOiAlMC4xZiUlIFxuIiAlIGNwdSkKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIEhlcmUgd2UgZ2F0aGVyIHVwIGRpc2sgZGF0YS4gSW4gYW4gZWZmb3J0IHRvIGF2b2lkIGx5aW5nIHdpdGggc3RhdHMKKyAgICAgICAgIyBJIGRvIGEgYmFyZSBtaW5pbXVtIG9mIGFuYWx5c2lzIG9mIGNvbGxlY3RlZCBkYXRhLgorICAgICAgICAjIFRoZSBzaW1wbGUgZmFjdCBpcywgZG9pbmcgZGlzayBpbyBjb2xsZWN0aW9uIG9uIGEgcGVyIHByb2Nlc3MgYmFzaXMKKyAgICAgICAgIyB3aXRob3V0IGVmZmVjdGluZyBidWlsZCB0aW1lIHdvdWxkIGJlIGRpZmZpY3VsdC4KKyAgICAgICAgIyBGb3IgdGhlIGJlc3QgaW5mb3JtYXRpb24sIHJ1bm5pbmcgdGhpbmdzIHdpdGggQkJfVE9UQUxfVEhSRUFEUyA9ICIxIgorICAgICAgICAjIHdvdWxkIHJldHVybiBhY2N1cmF0ZSBwZXIgdGFzayByZXN1bHRzLgorICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgIGlmIGRldiAhPSAiTm9Mb2dpY2FsRGV2aWNlIjoKKyAgICAgICAgICAgIGRpc2tkYXRhID0gZ2V0X2Rpc2tkYXRhKCJfX2Rpc2tkYXRhX3Rhc2siLCBkZXYsIGUuZGF0YSkKKyAgICAgICAgICAgIGlmIGRpc2tkYXRhOgorICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gc29ydGVkKGRpc2tkYXRhLml0ZXJrZXlzKCkpOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGtleSArICI6ICIgKyBkaXNrZGF0YVtrZXldICsgIlxuIikKKyAgICAgICAgaWYgc3RhdHVzIGlzICJwYXNzZWQiOgorICAgICAgICAgICAgZi53cml0ZSgiU3RhdHVzOiBQQVNTRUQgXG4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZi53cml0ZSgiU3RhdHVzOiBGQUlMRUQgXG4iKQorICAgICAgICBmLndyaXRlKCJFbmRlZDogJTAuMmYgXG4iICUgZS50aW1lKQorCitweXRob24gcnVuX2J1aWxkc3RhdHMgKCkgeworICAgIGltcG9ydCBiYi5idWlsZAorICAgIGltcG9ydCBiYi5ldmVudAorICAgIGltcG9ydCBiYi5kYXRhCisgICAgaW1wb3J0IHRpbWUsIHN1YnByb2Nlc3MsIHBsYXRmb3JtCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCk6CisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIGF0IGZpcnN0IHBhc3MgbWFrZSB0aGUgYnVpbGRzdGF0cyBoZXJpYXJjaHkgYW5kIHRoZW4KKyAgICAgICAgIyBzZXQgdGhlIGJ1aWxkbmFtZQorICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpKQorICAgICAgICBzZXRfYm4oZSkKKyAgICAgICAgYm4gPSBnZXRfYm4oZSkKKyAgICAgICAgc2V0X2RldmljZShlKQorICAgICAgICBkZXZpY2UgPSBnZXRfZGV2aWNlKGUpCisKKyAgICAgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoYnNkaXIpCisgICAgICAgIGlmIGRldmljZSAhPSAiTm9Mb2dpY2FsRGV2aWNlIjoKKyAgICAgICAgICAgIHNldF9kaXNrZGF0YSgiX19kaXNrZGF0YV9idWlsZCIsIGRldmljZSwgZS5kYXRhKQorICAgICAgICBzZXRfdGltZWRhdGEoIl9fdGltZWRhdGFfYnVpbGQiLCBlLmRhdGEpCisgICAgICAgIGJ1aWxkX3RpbWUgPSBvcy5wYXRoLmpvaW4oYnNkaXIsICJidWlsZF9zdGF0cyIpCisgICAgICAgICMgd3JpdGUgc3RhcnQgb2YgYnVpbGQgaW50byBidWlsZF90aW1lCisgICAgICAgIHdpdGggb3BlbihidWlsZF90aW1lLCAiYSIpIGFzIGY6CisgICAgICAgICAgICBob3N0X2luZm8gPSBwbGF0Zm9ybS51bmFtZSgpCisgICAgICAgICAgICBmLndyaXRlKCJIb3N0IEluZm86ICIpCisgICAgICAgICAgICBmb3IgeCBpbiBob3N0X2luZm86CisgICAgICAgICAgICAgICAgaWYgeDoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSh4ICsgIiAiKQorICAgICAgICAgICAgZi53cml0ZSgiXG4iKQorICAgICAgICAgICAgZi53cml0ZSgiQnVpbGQgU3RhcnRlZDogJTAuMmYgXG4iICUgdGltZS50aW1lKCkpCisKKyAgICBlbGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQpOgorICAgICAgICBibiA9IGdldF9ibihlKQorICAgICAgICBkZXZpY2UgPSBnZXRfZGV2aWNlKGUpCisgICAgICAgIGJzZGlyID0gb3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBibikKKyAgICAgICAgYnVpbGRfdGltZSA9IG9zLnBhdGguam9pbihic2RpciwgImJ1aWxkX3N0YXRzIikKKyAgICAgICAgd2l0aCBvcGVuKGJ1aWxkX3RpbWUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgICAgIyBXcml0ZSBidWlsZCBzdGF0aXN0aWNzIGZvciB0aGUgYnVpbGQKKyAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgICAgdGltZWRhdGEgPSBnZXRfdGltZWRhdGEoIl9fdGltZWRhdGFfYnVpbGQiLCBlLmRhdGEpCisgICAgICAgICAgICBpZiB0aW1lZGF0YToKKyAgICAgICAgICAgICAgICB0aW1lLCBjcHUgPSB0aW1lZGF0YQorICAgICAgICAgICAgICAgICMgd3JpdGUgZW5kIG9mIGJ1aWxkIGFuZCBjcHUgdXNlZCBpbnRvIGJ1aWxkX3RpbWUKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJFbGFwc2VkIHRpbWU6ICUwLjJmIHNlY29uZHMgXG4iICUgKHRpbWUpKQorICAgICAgICAgICAgICAgIGlmIGNwdToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiQ1BVIHVzYWdlOiAlMC4xZiUlIFxuIiAlIGNwdSkKKyAgICAgICAgICAgIGlmIGRldmljZSAhPSAiTm9Mb2dpY2FsRGV2aWNlIjoKKyAgICAgICAgICAgICAgICBkaXNraW8gPSBnZXRfZGlza2RhdGEoIl9fZGlza2RhdGFfYnVpbGQiLCBkZXZpY2UsIGUuZGF0YSkKKyAgICAgICAgICAgICAgICBpZiBkaXNraW86CisgICAgICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gc29ydGVkKGRpc2tpby5pdGVya2V5cygpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoa2V5ICsgIjogIiArIGRpc2tpb1trZXldICsgIlxuIikKKworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuYnVpbGQuVGFza1N0YXJ0ZWQpOgorICAgICAgICBibiA9IGdldF9ibihlKQorICAgICAgICBkZXZpY2UgPSBnZXRfZGV2aWNlKGUpCisgICAgICAgIGJzZGlyID0gb3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBibikKKyAgICAgICAgdGFza2RpciA9IG9zLnBhdGguam9pbihic2RpciwgZS5kYXRhLmdldFZhcignUEYnLCBUcnVlKSkKKyAgICAgICAgaWYgZGV2aWNlICE9ICJOb0xvZ2ljYWxEZXZpY2UiOgorICAgICAgICAgICAgc2V0X2Rpc2tkYXRhKCJfX2Rpc2tkYXRhX3Rhc2siLCBkZXZpY2UsIGUuZGF0YSkKKyAgICAgICAgc2V0X3RpbWVkYXRhKCJfX3RpbWVkYXRhX3Rhc2siLCBlLmRhdGEsIGUudGltZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHRhc2tkaXIpCisgICAgICAgICMgd3JpdGUgaW50byB0aGUgdGFzayBldmVudCBmaWxlIHRoZSBuYW1lIGFuZCBzdGFydCB0aW1lCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4odGFza2RpciwgZS50YXNrKSwgImEiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiRXZlbnQ6ICVzIFxuIiAlIGJiLmV2ZW50LmdldE5hbWUoZSkpCisgICAgICAgICAgICBmLndyaXRlKCJTdGFydGVkOiAlMC4yZiBcbiIgJSBlLnRpbWUpCisKKyAgICBlbGlmIGlzaW5zdGFuY2UoZSwgYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCk6CisgICAgICAgIGJuID0gZ2V0X2JuKGUpCisgICAgICAgIGRldmljZSA9IGdldF9kZXZpY2UoZSkKKyAgICAgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgICAgICB0YXNrZGlyID0gb3MucGF0aC5qb2luKGJzZGlyLCBlLmRhdGEuZ2V0VmFyKCdQRicsIFRydWUpKQorICAgICAgICB3cml0ZV90YXNrX2RhdGEoInBhc3NlZCIsIG9zLnBhdGguam9pbih0YXNrZGlyLCBlLnRhc2spLCBkZXZpY2UsIGUpCisgICAgICAgIGlmIGUudGFzayA9PSAiZG9fcm9vdGZzIjoKKyAgICAgICAgICAgIGJzID0gb3MucGF0aC5qb2luKGJzZGlyLCAiYnVpbGRfc3RhdHMiKQorICAgICAgICAgICAgd2l0aCBvcGVuKGJzLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICAgcm9vdGZzID0gZS5kYXRhLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICByb290ZnNfc2l6ZSA9IHN1YnByb2Nlc3MuUG9wZW4oWyJkdSIsICItc2giLCByb290ZnNdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiVW5jb21wcmVzc2VkIFJvb3RmcyBzaXplOiAlcyIgJSByb290ZnNfc2l6ZSkKKworICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5idWlsZC5UYXNrRmFpbGVkKToKKyAgICAgICAgYm4gPSBnZXRfYm4oZSkKKyAgICAgICAgZGV2aWNlID0gZ2V0X2RldmljZShlKQorICAgICAgICBic2RpciA9IG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgYm4pCisgICAgICAgIHRhc2tkaXIgPSBvcy5wYXRoLmpvaW4oYnNkaXIsIGUuZGF0YS5nZXRWYXIoJ1BGJywgVHJ1ZSkpCisgICAgICAgIHdyaXRlX3Rhc2tfZGF0YSgiZmFpbGVkIiwgb3MucGF0aC5qb2luKHRhc2tkaXIsIGUudGFzayksIGRldmljZSwgZSkKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgTGV0cyBtYWtlIHRoaW5ncyBlYXNpZXIgYW5kIHRlbGwgcGVvcGxlIHdoZXJlIHRoZSBidWlsZCBmYWlsZWQgaW4KKyAgICAgICAgIyBidWlsZF9zdGF0dXMuIFdlIGRvIHRoaXMgaGVyZSBiZWNhdXNlIEJ1aWxkQ29tcGxldGVkIHRyaWdnZXJzIG5vCisgICAgICAgICMgbWF0dGVyIHdoYXQgdGhlIHN0YXR1cyBvZiB0aGUgYnVpbGQgYWN0dWFsbHkgaXMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgIGJ1aWxkX3N0YXR1cyA9IG9zLnBhdGguam9pbihic2RpciwgImJ1aWxkX3N0YXRzIikKKyAgICAgICAgd2l0aCBvcGVuKGJ1aWxkX3N0YXR1cywgImEiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShlLmRhdGEuZXhwYW5kKCJGYWlsZWQgYXQ6ICR7UEZ9IGF0IHRhc2s6ICVzIFxuIiAlIGUudGFzaykpCit9CisKK2FkZGhhbmRsZXIgcnVuX2J1aWxkc3RhdHMKK3J1bl9idWlsZHN0YXRzW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRTdGFydGVkIGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkIGJiLmJ1aWxkLlRhc2tTdGFydGVkIGJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQgYmIuYnVpbGQuVGFza0ZhaWxlZCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY2NhY2hlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jY2FjaGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2RjZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY2NhY2hlLmJiY2xhc3MKQEAgLTAsMCArMSw4IEBACitDQ0FDSEUgPSAiJHtAYmIudXRpbHMud2hpY2goZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKSwgJ2NjYWNoZScpIGFuZCAnY2NhY2hlICd9IgorZXhwb3J0IENDQUNIRV9ESVIgPz0gIiR7VE1QRElSfS9jY2FjaGUvJHtNVUxUSU1BQ0hfSE9TVF9TWVN9LyR7UE59IgorQ0NBQ0hFX0RJU0FCTEVbdW5leHBvcnRdID0gIjEiCisKK2RvX2NvbmZpZ3VyZVtkaXJzXSA9KyAiJHtDQ0FDSEVfRElSfSIKK2RvX2tlcm5lbF9jb25maWdtZVtkaXJzXSA9KyAiJHtDQ0FDSEVfRElSfSIKKworZG9fY2xlYW5bY2xlYW5kaXJzXSArPSAiJHtDQ0FDSEVfRElSfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NocnBhdGguYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NocnBhdGguYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTE2MGFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY2hycGF0aC5iYmNsYXNzCkBAIC0wLDAgKzEsMTE3IEBACitDSFJQQVRIX0JJTiA/PSAiY2hycGF0aCIKK1BSRVBST0NFU1NfUkVMT0NBVEVfRElSUyA/PSAiIgorCitkZWYgcHJvY2Vzc19maWxlX2xpbnV4KGNtZCwgZnBhdGgsIHJvb3RkaXIsIGJhc2VwcmVmaXgsIHRtcGRpciwgZCk6CisgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3ViCisKKyAgICBwID0gc3ViLlBvcGVuKFtjbWQsICctbCcsIGZwYXRoXSxzdGRvdXQ9c3ViLlBJUEUsc3RkZXJyPXN1Yi5QSVBFKQorICAgIGVyciwgb3V0ID0gcC5jb21tdW5pY2F0ZSgpCisgICAgIyBJZiByZXR1cm5lZCBzdWNjZXNmdWxseSwgcHJvY2VzcyBzdGRlcnIgZm9yIHJlc3VsdHMKKyAgICBpZiBwLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIEhhbmRsZSBSVU5QQVRIIGFzIHdlbGwgYXMgUlBBVEgKKyAgICBlcnIgPSBlcnIucmVwbGFjZSgiUlVOUEFUSD0iLCJSUEFUSD0iKQorICAgICMgVGhyb3cgYXdheSBldmVyeXRoaW5nIG90aGVyIHRoYW4gdGhlIHJwYXRoIGxpc3QKKyAgICBjdXJyX3JwYXRoID0gZXJyLnBhcnRpdGlvbigiUlBBVEg9IilbMl0KKyAgICAjYmIubm90ZSgiQ3VycmVudCBycGF0aCBmb3IgJXMgaXMgJXMiICUgKGZwYXRoLCBjdXJyX3JwYXRoLnN0cmlwKCkpKQorICAgIHJwYXRocyA9IGN1cnJfcnBhdGguc3BsaXQoIjoiKQorICAgIG5ld19ycGF0aHMgPSBbXQorICAgIG1vZGlmaWVkID0gRmFsc2UKKyAgICBmb3IgcnBhdGggaW4gcnBhdGhzOgorICAgICAgICAjIElmIHJwYXRoIGlzIGFscmVhZHkgZHluYW1pYyBjb3B5IGl0IHRvIG5ld19ycGF0aCBhbmQgY29udGludWUKKyAgICAgICAgaWYgcnBhdGguZmluZCgiJE9SSUdJTiIpICE9IC0xOgorICAgICAgICAgICAgbmV3X3JwYXRocy5hcHBlbmQocnBhdGguc3RyaXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHJwYXRoID0gIG9zLnBhdGgubm9ybXBhdGgocnBhdGgpCisgICAgICAgIGlmIGJhc2VwcmVmaXggbm90IGluIHJwYXRoIGFuZCB0bXBkaXIgbm90IGluIHJwYXRoOgorICAgICAgICAgICAgbmV3X3JwYXRocy5hcHBlbmQocnBhdGguc3RyaXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIG5ld19ycGF0aHMuYXBwZW5kKCIkT1JJR0lOLyIgKyBvcy5wYXRoLnJlbHBhdGgocnBhdGguc3RyaXAoKSwgb3MucGF0aC5kaXJuYW1lKGZwYXRoLnJlcGxhY2Uocm9vdGRpciwgIi8iKSkpKQorICAgICAgICBtb2RpZmllZCA9IFRydWUKKworICAgICMgaWYgd2UgaGF2ZSBtb2RpZmllZCBzb21lIHJwYXRocyBjYWxsIGNocnBhdGggdG8gdXBkYXRlIHRoZSBiaW5hcnkKKyAgICBpZiBtb2RpZmllZDoKKyAgICAgICAgYXJncyA9ICI6Ii5qb2luKG5ld19ycGF0aHMpCisgICAgICAgICNiYi5ub3RlKCJTZXR0aW5nIHJwYXRoIGZvciAlcyB0byAlcyIgJShmcGF0aCwgYXJncykpCisgICAgICAgIHAgPSBzdWIuUG9wZW4oW2NtZCwgJy1yJywgYXJncywgZnBhdGhdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIGlmIHAucmV0dXJuY29kZSAhPSAwOgorICAgICAgICAgICAgYmIuZXJyb3IoIiVzOiBjaHJwYXRoIGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVkOlxuJXMlcyIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHAucmV0dXJuY29kZSwgb3V0LCBlcnIpKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZAorCitkZWYgcHJvY2Vzc19maWxlX2RhcndpbihjbWQsIGZwYXRoLCByb290ZGlyLCBiYXNlcHJlZml4LCB0bXBkaXIsIGQpOgorICAgIGltcG9ydCBzdWJwcm9jZXNzIGFzIHN1YgorCisgICAgcCA9IHN1Yi5Qb3BlbihbZC5leHBhbmQoIiR7SE9TVF9QUkVGSVh9b3Rvb2wiKSwgJy1MJywgZnBhdGhdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgZXJyLCBvdXQgPSBwLmNvbW11bmljYXRlKCkKKyAgICAjIElmIHJldHVybmVkIHN1Y2Nlc2Z1bGx5LCBwcm9jZXNzIHN0ZGVyciBmb3IgcmVzdWx0cworICAgIGlmIHAucmV0dXJuY29kZSAhPSAwOgorICAgICAgICByZXR1cm4KKyAgICBmb3IgbCBpbiBlcnIuc3BsaXQoIlxuIik6CisgICAgICAgIGlmICIoY29tcGF0aWJpbGl0eSIgbm90IGluIGw6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBycGF0aCA9IGwucGFydGl0aW9uKCIoY29tcGF0aWJpbGl0eSIpWzBdLnN0cmlwKCkKKyAgICAgICAgaWYgYmFzZXByZWZpeCBub3QgaW4gcnBhdGg6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIG5ld3BhdGggPSAiQGxvYWRlcl9wYXRoLyIgKyBvcy5wYXRoLnJlbHBhdGgocnBhdGgsIG9zLnBhdGguZGlybmFtZShmcGF0aC5yZXBsYWNlKHJvb3RkaXIsICIvIikpKQorICAgICAgICBwID0gc3ViLlBvcGVuKFtkLmV4cGFuZCgiJHtIT1NUX1BSRUZJWH1pbnN0YWxsX25hbWVfdG9vbCIpLCAnLWNoYW5nZScsIHJwYXRoLCBuZXdwYXRoLCBmcGF0aF0sc3Rkb3V0PXN1Yi5QSVBFLHN0ZGVycj1zdWIuUElQRSkKKyAgICAgICAgZXJyLCBvdXQgPSBwLmNvbW11bmljYXRlKCkKKworZGVmIHByb2Nlc3NfZGlyIChyb290ZGlyLCBkaXJlY3RvcnksIGQpOgorICAgIGltcG9ydCBzdGF0CisKKyAgICByb290ZGlyID0gb3MucGF0aC5ub3JtcGF0aChyb290ZGlyKQorICAgIGNtZCA9IGQuZXhwYW5kKCcke0NIUlBBVEhfQklOfScpCisgICAgdG1wZGlyID0gb3MucGF0aC5ub3JtcGF0aChkLmdldFZhcignVE1QRElSJywgRmFsc2UpKQorICAgIGJhc2VwcmVmaXggPSBvcy5wYXRoLm5vcm1wYXRoKGQuZXhwYW5kKCcke2Jhc2VfcHJlZml4fScpKQorICAgIGhvc3RvcyA9IGQuZ2V0VmFyKCJIT1NUX09TIiwgVHJ1ZSkKKworICAgICNiYi5kZWJ1ZygiQ2hlY2tpbmcgJXMgZm9yIGJpbmFyaWVzIHRvIHByb2Nlc3MiICUgZGlyZWN0b3J5KQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXJlY3RvcnkpOgorICAgICAgICByZXR1cm4KKworICAgIGlmICJsaW51eCIgaW4gaG9zdG9zOgorICAgICAgICBwcm9jZXNzX2ZpbGUgPSBwcm9jZXNzX2ZpbGVfbGludXgKKyAgICBlbGlmICJkYXJ3aW4iIGluIGhvc3RvczoKKyAgICAgICAgcHJvY2Vzc19maWxlID0gcHJvY2Vzc19maWxlX2RhcndpbgorICAgIGVsc2U6CisgICAgICAgICMgUmVsb2NhdGlvbnMgbm90IHN1cHBvcnRlZAorICAgICAgICByZXR1cm4KKworICAgIGRpcnMgPSBvcy5saXN0ZGlyKGRpcmVjdG9yeSkKKyAgICBmb3IgZmlsZSBpbiBkaXJzOgorICAgICAgICBmcGF0aCA9IGRpcmVjdG9yeSArICIvIiArIGZpbGUKKyAgICAgICAgZnBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKGZwYXRoKQorICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmcGF0aCk6CisgICAgICAgICAgICAjIFNraXAgc3ltbGlua3MKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmcGF0aCk6CisgICAgICAgICAgICBwcm9jZXNzX2Rpcihyb290ZGlyLCBmcGF0aCwgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICNiYi5ub3RlKCJUZXN0aW5nICVzIGZvciByZWxvY2F0YWJpbGl0eSIgJSBmcGF0aCkKKworICAgICAgICAgICAgIyBXZSBuZWVkIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zIGZvciBjaHJwYXRoLCBpZiB3ZSBkb24ndCBoYXZlCisgICAgICAgICAgICAjIHRoZW0gdGhlbiBzZXQgdGhlbSB0ZW1wb3JhcmlseS4gVGFrZSBhIGNvcHkgb2YgdGhlIGZpbGVzCisgICAgICAgICAgICAjIHBlcm1pc3Npb25zIHNvIHRoYXQgd2UgY2FuIHJlc3RvcmUgdGhlbSBhZnRlcndhcmRzLgorICAgICAgICAgICAgcGVybXMgPSBvcy5zdGF0KGZwYXRoKVtzdGF0LlNUX01PREVdCisgICAgICAgICAgICBpZiBvcy5hY2Nlc3MoZnBhdGgsIG9zLldfT0t8b3MuUl9PSyk6CisgICAgICAgICAgICAgICAgcGVybXMgPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVGVtcG9yYXJpbHkgbWFrZSB0aGUgZmlsZSB3cml0ZWFibGUgc28gd2UgY2FuIGNocnBhdGggaXQKKyAgICAgICAgICAgICAgICBvcy5jaG1vZChmcGF0aCwgcGVybXN8c3RhdC5TX0lSV1hVKQorICAgICAgICAgICAgcHJvY2Vzc19maWxlKGNtZCwgZnBhdGgsIHJvb3RkaXIsIGJhc2VwcmVmaXgsIHRtcGRpciwgZCkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIHBlcm1zOgorICAgICAgICAgICAgICAgIG9zLmNobW9kKGZwYXRoLCBwZXJtcykKKworZGVmIHJwYXRoX3JlcGxhY2UgKHBhdGgsIGQpOgorICAgIGJpbmRpcnMgPSBkLmV4cGFuZCgiJHtiaW5kaXJ9ICR7c2JpbmRpcn0gJHtiYXNlX3NiaW5kaXJ9ICR7YmFzZV9iaW5kaXJ9ICR7bGliZGlyfSAke2Jhc2VfbGliZGlyfSAke2xpYmV4ZWNkaXJ9ICR7UFJFUFJPQ0VTU19SRUxPQ0FURV9ESVJTfSIpLnNwbGl0KCkKKworICAgIGZvciBiaW5kaXIgaW4gYmluZGlyczoKKyAgICAgICAgI2JiLm5vdGUgKCJQcm9jZXNzaW5nIGRpcmVjdG9yeSAiICsgYmluZGlyKQorICAgICAgICBkaXJlY3RvcnkgPSBwYXRoICsgIi8iICsgYmluZGlyCisgICAgICAgIHByb2Nlc3NfZGlyIChwYXRoLCBkaXJlY3RvcnksIGQpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NsdXR0ZXIuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NsdXR0ZXIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjc0MDdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY2x1dHRlci5iYmNsYXNzCkBAIC0wLDAgKzEsMjIgQEAKKworZGVmIGdldF9taW5vcl9kaXIodik6CisgICAgaW1wb3J0IHJlCisgICAgbSA9IHJlLm1hdGNoKCJeKFswLTldKylcLihbMC05XSspIiwgdikKKyAgICByZXR1cm4gIiVzLiVzIiAlIChtLmdyb3VwKDEpLCBtLmdyb3VwKDIpKQorCitkZWYgZ2V0X3JlYWxfbmFtZShuKToKKyAgICBpbXBvcnQgcmUKKyAgICBtID0gcmUubWF0Y2goIl4oW2Etel0rKC1bYS16XSspPykoLVswLTldK1wuWzAtOV0rKT8iLCBuKQorICAgIHJldHVybiAiJXMiICUgKG0uZ3JvdXAoMSkpCisKK1ZFUk1JTk9SID0gIiR7QGdldF9taW5vcl9kaXIoIiR7UFZ9Iil9IgorUkVBTE5BTUUgPSAiJHtAZ2V0X3JlYWxfbmFtZSgiJHtCUE59Iil9IgorCitDTFVUVEVSX1NSQ19GVFAgPSAiJHtHTk9NRV9NSVJST1J9LyR7UkVBTE5BTUV9LyR7VkVSTUlOT1J9LyR7UkVBTE5BTUV9LSR7UFZ9LnRhci54ejtuYW1lPWFyY2hpdmUiCisKK0NMVVRURVJfU1JDX0dJVCA9ICJnaXQ6Ly9naXQuZ25vbWUub3JnLyR7UkVBTE5BTUV9IgorCitTUkNfVVJJID0gIiR7Q0xVVFRFUl9TUkNfRlRQfSIKK1MgPSAiJHtXT1JLRElSfS8ke1JFQUxOQU1FfS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGd0ay1kb2MgZ2V0dGV4dApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY21ha2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NtYWtlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUzY2MwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NtYWtlLmJiY2xhc3MKQEAgLTAsMCArMSwxMzggQEAKKyMgUGF0aCB0byB0aGUgQ01ha2UgZmlsZSB0byBwcm9jZXNzLgorT0VDTUFLRV9TT1VSQ0VQQVRIID89ICIke1N9IgorCitERVBFTkRTX3ByZXBlbmQgPSAiY21ha2UtbmF0aXZlICIKK0IgPSAiJHtXT1JLRElSfS9idWlsZCIKKworIyBXZSBuZWVkIHRvIHVuc2V0IENDQUNIRSBvdGhlcndpc2UgY21ha2UgZ2V0cyB0b28gY29uZnVzZWQKK0NDQUNIRSA9ICIiCisKKyMgV2Ugd2FudCB0aGUgc3RhZ2luZyBhbmQgaW5zdGFsbGluZyBmdW5jdGlvbnMgZnJvbSBhdXRvdG9vbHMKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgQy9DKysgQ29tcGlsZXIgKHdpdGhvdXQgY3B1IGFyY2gvdHVuZSBhcmd1bWVudHMpCitPRUNNQUtFX0NfQ09NUElMRVIgPz0gImBlY2hvICR7Q0N9IHwgc2VkICdzL15cKFteIF0qXCkuKi9cMS8nYCIKK09FQ01BS0VfQ1hYX0NPTVBJTEVSID89ICJgZWNobyAke0NYWH0gfCBzZWQgJ3MvXlwoW14gXSpcKS4qL1wxLydgIgorT0VDTUFLRV9BUiA/PSAiJHtBUn0iCisKKyMgQ29tcGlsZXIgZmxhZ3MKK09FQ01BS0VfQ19GTEFHUyA/PSAiJHtIT1NUX0NDX0FSQ0h9ICR7VE9PTENIQUlOX09QVElPTlN9ICR7Q0ZMQUdTfSIKK09FQ01BS0VfQ1hYX0ZMQUdTID89ICIke0hPU1RfQ0NfQVJDSH0gJHtUT09MQ0hBSU5fT1BUSU9OU30gJHtDWFhGTEFHU30iCitPRUNNQUtFX0NfRkxBR1NfUkVMRUFTRSA/PSAiJHtTRUxFQ1RFRF9PUFRJTUlaQVRJT059ICR7Q0ZMQUdTfSAtRE5ERUJVRyIKK09FQ01BS0VfQ1hYX0ZMQUdTX1JFTEVBU0UgPz0gIiR7U0VMRUNURURfT1BUSU1JWkFUSU9OfSAke0NYWEZMQUdTfSAtRE5ERUJVRyIKK09FQ01BS0VfQ19MSU5LX0ZMQUdTID89ICIke0hPU1RfQ0NfQVJDSH0gJHtUT09MQ0hBSU5fT1BUSU9OU30gJHtDUFBGTEFHU30gJHtMREZMQUdTfSIKK09FQ01BS0VfQ1hYX0xJTktfRkxBR1MgPz0gIiR7SE9TVF9DQ19BUkNIfSAke1RPT0xDSEFJTl9PUFRJT05TfSAke0NYWEZMQUdTfSAke0xERkxBR1N9IgorCitPRUNNQUtFX1JQQVRIID89ICIiCitPRUNNQUtFX1BFUkxOQVRJVkVfRElSID8/PSAiIgorT0VDTUFLRV9FWFRSQV9ST09UX1BBVEggPz0gIiIKKworT0VDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU0gPSAiT05MWSIKK09FQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QUk9HUkFNX2NsYXNzLW5hdGl2ZSA9ICJCT1RIIgorCisjIENNYWtlIGV4cGVjdHMgdGFyZ2V0IGFyY2hpdGVjdHVyZXMgaW4gdGhlIGZvcm1hdCBvZiB1bmFtZSgyKSwKKyMgd2hpY2ggZG8gbm90IGFsd2F5cyBtYXRjaCBUQVJHRVRfQVJDSCwgc28gYWxsIHRoZSBuZWNlc3NhcnkKKyMgY29udmVyc2lvbnMgc2hvdWxkIGhhcHBlbiBoZXJlLgorZGVmIG1hcF90YXJnZXRfYXJjaF90b191bmFtZV9hcmNoKHRhcmdldF9hcmNoKToKKyAgICBpZiB0YXJnZXRfYXJjaCA9PSAicG93ZXJwYyI6CisgICAgICAgIHJldHVybiAicHBjIgorICAgIGlmIHRhcmdldF9hcmNoID09ICJwb3dlcnBjNjQiOgorICAgICAgICByZXR1cm4gInBwYzY0IgorICAgIHJldHVybiB0YXJnZXRfYXJjaAorCitjbWFrZV9kb19nZW5lcmF0ZV90b29sY2hhaW5fZmlsZSgpIHsKKwljYXQgPiAke1dPUktESVJ9L3Rvb2xjaGFpbi5jbWFrZSA8PEVPRgorIyBDTWFrZSBzeXN0ZW0gbmFtZSBtdXN0IGJlIHNvbWV0aGluZyBsaWtlICJMaW51eCIuCisjIFRoaXMgaXMgaW1wb3J0YW50IGZvciBjcm9zcy1jb21waWxpbmcuCitzZXQoIENNQUtFX1NZU1RFTV9OQU1FIGBlY2hvICR7VEFSR0VUX09TfSB8IHNlZCAtZSAncy9eLi9cdSYvJyAtZSAncy9eXChMaW51eFwpLiovXDEvJ2AgKQorc2V0KCBDTUFLRV9TWVNURU1fUFJPQ0VTU09SICR7QG1hcF90YXJnZXRfYXJjaF90b191bmFtZV9hcmNoKGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpKX0gKQorc2V0KCBDTUFLRV9DX0NPTVBJTEVSICR7T0VDTUFLRV9DX0NPTVBJTEVSfSApCitzZXQoIENNQUtFX0NYWF9DT01QSUxFUiAke09FQ01BS0VfQ1hYX0NPTVBJTEVSfSApCitzZXQoIENNQUtFX0FTTV9DT01QSUxFUiAke09FQ01BS0VfQ19DT01QSUxFUn0gKQorc2V0KCBDTUFLRV9BUiAke09FQ01BS0VfQVJ9IENBQ0hFIEZJTEVQQVRIICJBcmNoaXZlciIgKQorc2V0KCBDTUFLRV9DX0ZMQUdTICIke09FQ01BS0VfQ19GTEFHU30iIENBQ0hFIFNUUklORyAiQ0ZMQUdTIiApCitzZXQoIENNQUtFX0NYWF9GTEFHUyAiJHtPRUNNQUtFX0NYWF9GTEFHU30iIENBQ0hFIFNUUklORyAiQ1hYRkxBR1MiICkKK3NldCggQ01BS0VfQVNNX0ZMQUdTICIke09FQ01BS0VfQ19GTEFHU30iIENBQ0hFIFNUUklORyAiQVNNIEZMQUdTIiApCitzZXQoIENNQUtFX0NfRkxBR1NfUkVMRUFTRSAiJHtPRUNNQUtFX0NfRkxBR1NfUkVMRUFTRX0iIENBQ0hFIFNUUklORyAiQ0ZMQUdTIGZvciByZWxlYXNlIiApCitzZXQoIENNQUtFX0NYWF9GTEFHU19SRUxFQVNFICIke09FQ01BS0VfQ1hYX0ZMQUdTX1JFTEVBU0V9IiBDQUNIRSBTVFJJTkcgIkNYWEZMQUdTIGZvciByZWxlYXNlIiApCitzZXQoIENNQUtFX0FTTV9GTEFHU19SRUxFQVNFICIke09FQ01BS0VfQ19GTEFHU19SRUxFQVNFfSIgQ0FDSEUgU1RSSU5HICJBU00gRkxBR1MgZm9yIHJlbGVhc2UiICkKK3NldCggQ01BS0VfQ19MSU5LX0ZMQUdTICIke09FQ01BS0VfQ19MSU5LX0ZMQUdTfSIgQ0FDSEUgU1RSSU5HICJMREZMQUdTIiApCitzZXQoIENNQUtFX0NYWF9MSU5LX0ZMQUdTICIke09FQ01BS0VfQ1hYX0xJTktfRkxBR1N9IiBDQUNIRSBTVFJJTkcgIkxERkxBR1MiICkKKworIyBvbmx5IHNlYXJjaCBpbiB0aGUgcGF0aHMgcHJvdmlkZWQgc28gY21ha2UgZG9lc250IHBpY2sKKyMgdXAgbGlicmFyaWVzIGFuZCB0b29scyBmcm9tIHRoZSBuYXRpdmUgYnVpbGQgbWFjaGluZQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSCAke1NUQUdJTkdfRElSX0hPU1R9ICR7U1RBR0lOR19ESVJfTkFUSVZFfSAke0NST1NTX0RJUn0gJHtPRUNNQUtFX1BFUkxOQVRJVkVfRElSfSAke09FQ01BS0VfRVhUUkFfUk9PVF9QQVRIfSAke0VYVEVSTkFMX1RPT0xDSEFJTn0pCitzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfUEFDS0FHRSBPTkxZICkKK3NldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QUk9HUkFNICR7T0VDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU19ICkKK3NldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9MSUJSQVJZIE9OTFkgKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX0lOQ0xVREUgT05MWSApCisKKyMgVXNlIHF0LmNvbmYgc2V0dGluZ3MKK3NldCggRU5We1FUX0NPTkZfUEFUSH0gJHtXT1JLRElSfS9xdC5jb25mICkKKworIyBXZSBuZWVkIHRvIHNldCB0aGUgcnBhdGggdG8gdGhlIGNvcnJlY3QgZGlyZWN0b3J5IGFzIGNtYWtlIGRvZXMgbm90IHByb3ZpZGUgYW55CisjIGRpcmVjdG9yeSBhcyBycGF0aCBieSBkZWZhdWx0CitzZXQoIENNQUtFX0lOU1RBTExfUlBBVEggJHtPRUNNQUtFX1JQQVRIfSApCisKKyMgVXNlIG5hdGl2ZSBjbWFrZSBtb2R1bGVzCitsaXN0KEFQUEVORCBDTUFLRV9NT0RVTEVfUEFUSCAiJHtTVEFHSU5HX0RBVEFESVJ9L2NtYWtlL01vZHVsZXMvIikKKworIyBhZGQgZm9yIG5vbiAvdXNyL2xpYiBsaWJkaXIsIGUuZy4gL3Vzci9saWI2NAorc2V0KCBDTUFLRV9MSUJSQVJZX1BBVEggJHtsaWJkaXJ9ICR7YmFzZV9saWJkaXJ9KQorCitFT0YKK30KKworYWRkdGFzayBnZW5lcmF0ZV90b29sY2hhaW5fZmlsZSBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fY29uZmlndXJlCisKK2NtYWtlX2RvX2NvbmZpZ3VyZSgpIHsKKwlpZiBbICIke09FQ01BS0VfQlVJTERQQVRIfSIgXTsgdGhlbgorCQliYm5vdGUgImNtYWtlLmJiY2xhc3Mgbm8gbG9uZ2VyIHVzZXMgT0VDTUFLRV9CVUlMRFBBVEguICBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgbm93IG91dC1vZi10cmVlIGJ1aWxkcyB3aXRoIEI9V09SS0RJUi9idWlsZC4iCisJZmkKKworCWlmIFsgIiR7U30iICE9ICIke0J9IiBdOyB0aGVuCisJCXJtIC1yZiAke0J9CisJCW1rZGlyIC1wICR7Qn0KKwkJY2QgJHtCfQorCWVsc2UKKwkJZmluZCAke0J9IC1uYW1lIENNYWtlRmlsZXMgLW9yIC1uYW1lIE1ha2VmaWxlIC1vciAtbmFtZSBjbWFrZV9pbnN0YWxsLmNtYWtlIC1vciAtbmFtZSBDTWFrZUNhY2hlLnR4dCAtZGVsZXRlCisJZmkKKworCSMgSnVzdCBsaWtlIGF1dG90b29scyBjbWFrZSBjYW4gdXNlIGEgc2l0ZSBmaWxlIHRvIGNhY2hlIHJlc3VsdCB0aGF0IG5lZWQgZ2VuZXJhdGVkIGJpbmFyaWVzIHRvIHJ1bgorCWlmIFsgLWUgJHtXT1JLRElSfS9zaXRlLWZpbGUuY21ha2UgXSA7IHRoZW4KKwkJT0VDTUFLRV9TSVRFRklMRT0iIC1DICR7V09SS0RJUn0vc2l0ZS1maWxlLmNtYWtlIgorCWVsc2UKKwkJT0VDTUFLRV9TSVRFRklMRT0iIgorCWZpCisKKwljbWFrZSBcCisJICAke09FQ01BS0VfU0lURUZJTEV9IFwKKwkgICR7T0VDTUFLRV9TT1VSQ0VQQVRIfSBcCisJICAtRENNQUtFX0lOU1RBTExfUFJFRklYOlBBVEg9JHtwcmVmaXh9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9CSU5ESVI6UEFUSD0ke2JpbmRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX1NCSU5ESVI6UEFUSD0ke3NiaW5kaXJ9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9MSUJFWEVDRElSOlBBVEg9JHtsaWJleGVjZGlyfSBcCisJICAtRENNQUtFX0lOU1RBTExfU1lTQ09ORkRJUjpQQVRIPSR7c3lzY29uZmRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX1NIQVJFRFNUQVRFRElSOlBBVEg9JHtzaGFyZWRzdGF0ZWRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX0xPQ0FMU1RBVEVESVI6UEFUSD0ke2xvY2Fsc3RhdGVkaXJ9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9MSUJESVI6UEFUSD0ke2xpYmRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX0lOQ0xVREVESVI6UEFUSD0ke2luY2x1ZGVkaXJ9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9EQVRBUk9PVERJUjpQQVRIPSR7ZGF0YWRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX1NPX05PX0VYRT0wIFwKKwkgIC1EQ01BS0VfVE9PTENIQUlOX0ZJTEU9JHtXT1JLRElSfS90b29sY2hhaW4uY21ha2UgXAorCSAgLURDTUFLRV9WRVJCT1NFX01BS0VGSUxFPTEgXAorCSAgJHtFWFRSQV9PRUNNQUtFfSBcCisJICAtV25vLWRldgorfQorCitjbWFrZV9kb19jb21waWxlKCkgIHsKKwljZCAke0J9CisJYmFzZV9kb19jb21waWxlCit9CisKK2NtYWtlX2RvX2luc3RhbGwoKSB7CisJY2QgJHtCfQorCWF1dG90b29sc19kb19pbnN0YWxsCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9faW5zdGFsbCBkb19nZW5lcmF0ZV90b29sY2hhaW5fZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY21sMS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY21sMS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Y2Y1ODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jbWwxLmJiY2xhc3MKQEAgLTAsMCArMSw3NSBAQAorY21sMV9kb19jb25maWd1cmUoKSB7CisJc2V0IC1lCisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MKKwlvZV9ydW5tYWtlIG9sZGNvbmZpZworfQorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2NvbmZpZ3VyZQorYWRkdGFzayBjb25maWd1cmUgYWZ0ZXIgZG9fdW5wYWNrIGRvX3BhdGNoIGJlZm9yZSBkb19jb21waWxlCisKK2luaGVyaXQgdGVybWluYWwKKworT0VfVEVSTUlOQUxfRVhQT1JUUyArPSAiSE9TVF9FWFRSQUNGTEFHUyBIT1NUTERGTEFHUyBURVJNSU5GTyBDUk9TU19DVVJTRVNfTElCIENST1NTX0NVUlNFU19JTkMiCitIT1NUX0VYVFJBQ0ZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IgorSE9TVExERkxBR1MgPSAiJHtCVUlMRF9MREZMQUdTfSIKK0NST1NTX0NVUlNFU19MSUIgPSAiLWxuY3Vyc2VzIC1sdGluZm8iCitDUk9TU19DVVJTRVNfSU5DID0gJy1EQ1VSU0VTX0xPQz0iPGN1cnNlcy5oPiInCitURVJNSU5GTyA9ICIke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L3Rlcm1pbmZvIgorCitLQ09ORklHX0NPTkZJR19DT01NQU5EID8/PSAibWVudWNvbmZpZyIKK3B5dGhvbiBkb19tZW51Y29uZmlnKCkgeworICAgIGltcG9ydCBzaHV0aWwKKworICAgIHRyeToKKyAgICAgICAgbXRpbWUgPSBvcy5wYXRoLmdldG10aW1lKCIuY29uZmlnIikKKyAgICAgICAgc2h1dGlsLmNvcHkoIi5jb25maWciLCAiLmNvbmZpZy5vcmlnIikKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgbXRpbWUgPSAwCisKKyAgICBvZV90ZXJtaW5hbCgiJHtTSEVMTH0gLWMgXCJtYWtlICR7S0NPTkZJR19DT05GSUdfQ09NTUFORH07IGlmIFsgXCQ/IC1uZSAwIF07IHRoZW4gZWNobyAnQ29tbWFuZCBmYWlsZWQuJzsgcHJpbnRmICdQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlLi4uICc7IHJlYWQgcjsgZmlcIiIsICcke1BOfSBDb25maWd1cmF0aW9uJywgZCkKKworICAgICMgRklYTUUgdGhpcyBjaGVjayBjYW4gYmUgcmVtb3ZlZCB3aGVuIHRoZSBtaW5pbXVtIGJpdGJha2UgdmVyc2lvbiBoYXMgYmVlbiBidW1wZWQKKyAgICBpZiBoYXNhdHRyKGJiLmJ1aWxkLCAnd3JpdGVfdGFpbnQnKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmV3bXRpbWUgPSBvcy5wYXRoLmdldG10aW1lKCIuY29uZmlnIikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBuZXdtdGltZSA9IDAKKworICAgICAgICBpZiBuZXdtdGltZSA+IG10aW1lOgorICAgICAgICAgICAgYmIubm90ZSgiQ29uZmlndXJhdGlvbiBjaGFuZ2VkLCByZWNvbXBpbGUgd2lsbCBiZSBmb3JjZWQiKQorICAgICAgICAgICAgYmIuYnVpbGQud3JpdGVfdGFpbnQoJ2RvX2NvbXBpbGUnLCBkKQorfQorZG9fbWVudWNvbmZpZ1tkZXBlbmRzXSArPSAibmN1cnNlcy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX21lbnVjb25maWdbbm9zdGFtcF0gPSAiMSIKK2FkZHRhc2sgbWVudWNvbmZpZyBhZnRlciBkb19jb25maWd1cmUKKworcHl0aG9uIGRvX2RpZmZjb25maWcoKSB7CisgICAgaW1wb3J0IHNodXRpbAorICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIGZyYWdtZW50ID0gd29ya2RpciArICcvZnJhZ21lbnQuY2ZnJworICAgIGNvbmZpZ29yaWcgPSAnLmNvbmZpZy5vcmlnJworICAgIGNvbmZpZyA9ICcuY29uZmlnJworCisgICAgdHJ5OgorICAgICAgICBtZDVuZXdjb25maWcgPSBiYi51dGlscy5tZDVfZmlsZShjb25maWdvcmlnKQorICAgICAgICBtZDVjb25maWcgPSBiYi51dGlscy5tZDVfZmlsZShjb25maWcpCisgICAgICAgIGlzZGlmZiA9IG1kNW5ld2NvbmZpZyAhPSBtZDVjb25maWcKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBiYi5mYXRhbCgiTm8gY29uZmlnIGZpbGVzIGZvdW5kLiBEaWQgeW91IGRvIG1lbnVjb25maWcgP1xuJXMiICUgZSkKKworICAgIGlmIGlzZGlmZjoKKyAgICAgICAgc3RhdGVtZW50ID0gJ2RpZmYgLS11bmNoYW5nZWQtbGluZS1mb3JtYXQ9IC0tb2xkLWxpbmUtZm9ybWF0PSAtLW5ldy1saW5lLWZvcm1hdD0iJUwiICcgKyBjb25maWdvcmlnICsgJyAnICsgY29uZmlnICsgJz4nICsgZnJhZ21lbnQKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHN0YXRlbWVudCwgc2hlbGw9VHJ1ZSkKKworICAgICAgICBzaHV0aWwuY29weShjb25maWdvcmlnLCBjb25maWcpCisKKyAgICAgICAgYmIucGxhaW4oIkNvbmZpZyBmcmFnbWVudCBoYXMgYmVlbiBkdW1wZWQgaW50bzpcbiAlcyIgJSBmcmFnbWVudCkKKyAgICBlbHNlOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmcmFnbWVudCk6CisgICAgICAgICAgICBvcy51bmxpbmsoZnJhZ21lbnQpCit9CisKK2RvX2RpZmZjb25maWdbbm9zdGFtcF0gPSAiMSIKK2FkZHRhc2sgZGlmZmNvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29tcHJlc3NfZG9jLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jb21wcmVzc19kb2MuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjU4ZDgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29tcHJlc3NfZG9jLmJiY2xhc3MKQEAgLTAsMCArMSwyNjAgQEAKKyMgQ29tcHJlc3MgbWFuIHBhZ2VzIGluICR7bWFuZGlyfSBhbmQgaW5mbyBwYWdlcyBpbiAke2luZm9kaXJ9CisjCisjIDEuIFRoZSBkb2Mgd2lsbCBiZSBjb21wcmVzc2VkIHRvIGd6IGZvcm1hdCBieSBkZWZhdWx0LgorIworIyAyLiBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgY29ycmVjdCB0aGUgY29tcHJlc3NlZCBkb2Mgd2hpY2ggaXMgbm90CisjIGluICR7RE9DX0NPTVBSRVNTfSBidXQgaW4gJHtET0NfQ09NUFJFU1NfTElTVH0gdG8gdGhlIGZvcm1hdAorIyBvZiAke0RPQ19DT01QUkVTU30gcG9saWN5CisjCisjIDMuIEl0IGlzIGVhc3kgdG8gYWRkIGEgbmV3IHR5cGUgY29tcHJlc3Npb24gYnkgZWRpdGluZworIyBsb2NhbC5jb25mLCBzdWNoIGFzOgorIyBET0NfQ09NUFJFU1NfTElTVF9hcHBlbmQgPSAnIGFiYycKKyMgRE9DX0NPTVBSRVNTID0gJ2FiYycKKyMgRE9DX0NPTVBSRVNTX0NNRFthYmNdID0gJ2FiYyBjb21wcmVzcyBjbWQgKioqJworIyBET0NfREVDT01QUkVTU19DTURbYWJjXSA9ICdhYmMgZGVjb21wcmVzcyBjbWQgKioqJworCisjIEFsbCBzdXBwb3J0ZWQgY29tcHJlc3Npb24gcG9saWN5CitET0NfQ09NUFJFU1NfTElTVCA/PSAiZ3ogeHogYnoyIgorCisjIENvbXByZXNzaW9uIHBvbGljeSwgbXVzdCBiZSBvbmUgb2YgJHtET0NfQ09NUFJFU1NfTElTVH0KK0RPQ19DT01QUkVTUyA/PSAiZ3oiCisKKyMgQ29tcHJlc3Npb24gc2hlbGwgY29tbWFuZAorRE9DX0NPTVBSRVNTX0NNRFtnel0gPz0gJ2d6aXAgLXYgLTkgLW4nCitET0NfQ09NUFJFU1NfQ01EW2J6Ml0gPz0gImJ6aXAyIC12IC05IgorRE9DX0NPTVBSRVNTX0NNRFt4el0gPz0gInh6IC12IgorCisjIERlY29tcHJlc3Npb24gc2hlbGwgY29tbWFuZAorRE9DX0RFQ09NUFJFU1NfQ01EW2d6XSA/PSAnZ3VuemlwIC12JworRE9DX0RFQ09NUFJFU1NfQ01EW2J6Ml0gPz0gImJ1bnppcDIgLXYiCitET0NfREVDT01QUkVTU19DTURbeHpdID89ICJ1bnh6IC12IgorCitQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgKz0gInBhY2thZ2VfZG9fY29tcHJlc3NfZG9jIGNvbXByZXNzX2RvY191cGRhdGVhbHRlcm5hdGl2ZXMiCitweXRob24gcGFja2FnZV9kb19jb21wcmVzc19kb2MoKSB7CisgICAgY29tcHJlc3NfbW9kZSA9IGQuZ2V0VmFyKCdET0NfQ09NUFJFU1MnLCBUcnVlKQorICAgIGNvbXByZXNzX2xpc3QgPSAoZC5nZXRWYXIoJ0RPQ19DT01QUkVTU19MSVNUJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKyAgICBpZiBjb21wcmVzc19tb2RlIG5vdCBpbiBjb21wcmVzc19saXN0OgorICAgICAgICBiYi5mYXRhbCgnQ29tcHJlc3Npb24gcG9saWN5ICVzIG5vdCBzdXBwb3J0ZWQgKG5vdCBsaXN0ZWQgaW4gJXMpXG4nICUgKGNvbXByZXNzX21vZGUsIGNvbXByZXNzX2xpc3QpKQorCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBjb21wcmVzc19jbWRzID0ge30KKyAgICBkZWNvbXByZXNzX2NtZHMgPSB7fQorICAgIGZvciBtb2RlIGluIGNvbXByZXNzX2xpc3Q6CisgICAgICAgIGNvbXByZXNzX2NtZHNbbW9kZV0gPSBkLmdldFZhckZsYWcoJ0RPQ19DT01QUkVTU19DTUQnLCBtb2RlKQorICAgICAgICBkZWNvbXByZXNzX2NtZHNbbW9kZV0gPSBkLmdldFZhckZsYWcoJ0RPQ19ERUNPTVBSRVNTX0NNRCcsIG1vZGUpCisKKyAgICBtYW5kaXIgPSBvcy5wYXRoLmFic3BhdGgoZHZhciArIG9zLnNlcCArIGQuZ2V0VmFyKCJtYW5kaXIiLCBUcnVlKSkKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhtYW5kaXIpOgorICAgICAgICAjIERlY29tcHJlc3MgZG9jIGZpbGVzIHdoaWNoIGZvcm1hdCBpcyBub3QgY29tcHJlc3NfbW9kZQorICAgICAgICBkZWNvbXByZXNzX2RvYyhtYW5kaXIsIGNvbXByZXNzX21vZGUsIGRlY29tcHJlc3NfY21kcykKKyAgICAgICAgY29tcHJlc3NfZG9jKG1hbmRpciwgY29tcHJlc3NfbW9kZSwgY29tcHJlc3NfY21kcykKKworICAgIGluZm9kaXIgPSBvcy5wYXRoLmFic3BhdGgoZHZhciArIG9zLnNlcCArIGQuZ2V0VmFyKCJpbmZvZGlyIiwgVHJ1ZSkpCisgICAgaWYgb3MucGF0aC5leGlzdHMoaW5mb2Rpcik6CisgICAgICAgICMgRGVjb21wcmVzcyBkb2MgZmlsZXMgd2hpY2ggZm9ybWF0IGlzIG5vdCBjb21wcmVzc19tb2RlCisgICAgICAgIGRlY29tcHJlc3NfZG9jKGluZm9kaXIsIGNvbXByZXNzX21vZGUsIGRlY29tcHJlc3NfY21kcykKKyAgICAgICAgY29tcHJlc3NfZG9jKGluZm9kaXIsIGNvbXByZXNzX21vZGUsIGNvbXByZXNzX2NtZHMpCit9CisKK2RlZiBfZ2V0X2NvbXByZXNzX2Zvcm1hdChmaWxlLCBjb21wcmVzc19mb3JtYXRfbGlzdCk6CisgICAgZm9yIGNvbXByZXNzX2Zvcm1hdCBpbiBjb21wcmVzc19mb3JtYXRfbGlzdDoKKyAgICAgICAgY29tcHJlc3Nfc3VmZml4ID0gJy4nICsgY29tcHJlc3NfZm9ybWF0CisgICAgICAgIGlmIGZpbGUuZW5kc3dpdGgoY29tcHJlc3Nfc3VmZml4KToKKyAgICAgICAgICAgIHJldHVybiBjb21wcmVzc19mb3JtYXQKKworICAgIHJldHVybiAnJworCisjIENvbGxlY3QgaGFyZGxpbmtzIHRvIGRpY3QsIGVhY2ggZWxlbWVudCBpbiBkaWN0IGxpc3RzIGhhcmRsaW5rcworIyB3aGljaCBwb2ludHMgdG8gdGhlIHNhbWUgZG9jIGZpbGUuCisjIHtoYXJkbGluazEwOiBbaGFyZGxpbmsxMSwgaGFyZGxpbmsxMl0sLCx9CisjIFRoZSBoYXJkbGluazEwLCBoYXJkbGluazExIGFuZCBoYXJkbGluazEyIGFyZSB0aGUgc2FtZSBmaWxlLgorZGVmIF9jb2xsZWN0X2hhcmRsaW5rKGhhcmRsaW5rX2RpY3QsIGZpbGUpOgorICAgIGZvciBoYXJkbGluayBpbiBoYXJkbGlua19kaWN0OgorICAgICAgICAjIEFkZCB0byB0aGUgZXhpc3RlZCBoYXJkbGluaworICAgICAgICBpZiBvcy5wYXRoLnNhbWVmaWxlKGhhcmRsaW5rLCBmaWxlKToKKyAgICAgICAgICAgIGhhcmRsaW5rX2RpY3RbaGFyZGxpbmtdLmFwcGVuZChmaWxlKQorICAgICAgICAgICAgcmV0dXJuIGhhcmRsaW5rX2RpY3QKKworICAgIGhhcmRsaW5rX2RpY3RbZmlsZV0gPSBbXQorICAgIHJldHVybiBoYXJkbGlua19kaWN0CisKK2RlZiBfcHJvY2Vzc19oYXJkbGluayhoYXJkbGlua19kaWN0LCBjb21wcmVzc19tb2RlLCBzaGVsbF9jbWRzLCBkZWNvbXByZXNzPUZhbHNlKToKKyAgICBmb3IgdGFyZ2V0IGluIGhhcmRsaW5rX2RpY3Q6CisgICAgICAgIGlmIGRlY29tcHJlc3M6CisgICAgICAgICAgICBjb21wcmVzc19mb3JtYXQgPSBfZ2V0X2NvbXByZXNzX2Zvcm1hdCh0YXJnZXQsIHNoZWxsX2NtZHMua2V5cygpKQorICAgICAgICAgICAgY21kID0gIiVzIC1mICVzIiAlIChzaGVsbF9jbWRzW2NvbXByZXNzX2Zvcm1hdF0sIHRhcmdldCkKKyAgICAgICAgICAgIGJiLm5vdGUoJ2RlY29tcHJlc3MgaGFyZGxpbmsgJXMnICUgdGFyZ2V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kID0gIiVzIC1mICVzIiAlIChzaGVsbF9jbWRzW2NvbXByZXNzX21vZGVdLCB0YXJnZXQpCisgICAgICAgICAgICBiYi5ub3RlKCdjb21wcmVzcyBoYXJkbGluayAlcycgJSB0YXJnZXQpCisgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICBiYi53YXJuKCJkZS9jb21wcmVzcyBmaWxlIGZhaWxlZCAlcyAoY21kIHdhcyAlcyklcyIgJSAocmV0dmFsLCBjbWQsICI6XG4lcyIgJSBvdXRwdXQgaWYgb3V0cHV0IGVsc2UgIiIpKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZm9yIGhhcmRsaW5rX2R1cCBpbiBoYXJkbGlua19kaWN0W3RhcmdldF06CisgICAgICAgICAgICBpZiBkZWNvbXByZXNzOgorICAgICAgICAgICAgICAgICMgUmVtb3ZlIGNvbXByZXNzIHN1ZmZpeAorICAgICAgICAgICAgICAgIGNvbXByZXNzX3N1ZmZpeCA9ICcuJyArIGNvbXByZXNzX2Zvcm1hdAorICAgICAgICAgICAgICAgIG5ld19oYXJkbGluayA9IGhhcmRsaW5rX2R1cFs6LWxlbihjb21wcmVzc19zdWZmaXgpXQorICAgICAgICAgICAgICAgIG5ld190YXJnZXQgPSB0YXJnZXRbOi1sZW4oY29tcHJlc3Nfc3VmZml4KV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBBcHBlbmQgY29tcHJlc3Mgc3VmZml4CisgICAgICAgICAgICAgICAgY29tcHJlc3Nfc3VmZml4ID0gJy4nICsgY29tcHJlc3NfbW9kZQorICAgICAgICAgICAgICAgIG5ld19oYXJkbGluayA9IGhhcmRsaW5rX2R1cCArIGNvbXByZXNzX3N1ZmZpeAorICAgICAgICAgICAgICAgIG5ld190YXJnZXQgPSB0YXJnZXQgKyBjb21wcmVzc19zdWZmaXgKKworICAgICAgICAgICAgYmIubm90ZSgnaGFyZGxpbmsgJXMtLT4lcycgJSAobmV3X2hhcmRsaW5rLCBuZXdfdGFyZ2V0KSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhuZXdfaGFyZGxpbmspOgorICAgICAgICAgICAgICAgIG9zLmxpbmsobmV3X3RhcmdldCwgbmV3X2hhcmRsaW5rKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoaGFyZGxpbmtfZHVwKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoaGFyZGxpbmtfZHVwKQorCitkZWYgX3Byb2Nlc3Nfc3ltbGluayhmaWxlLCBjb21wcmVzc19mb3JtYXQsIGRlY29tcHJlc3M9RmFsc2UpOgorICAgIGNvbXByZXNzX3N1ZmZpeCA9ICcuJyArIGNvbXByZXNzX2Zvcm1hdAorICAgIGlmIGRlY29tcHJlc3M6CisgICAgICAgICMgUmVtb3ZlIGNvbXByZXNzIHN1ZmZpeAorICAgICAgICBuZXdfbGlua25hbWUgPSBmaWxlWzotbGVuKGNvbXByZXNzX3N1ZmZpeCldCisgICAgICAgIG5ld19zb3VyY2UgPSBvcy5yZWFkbGluayhmaWxlKVs6LWxlbihjb21wcmVzc19zdWZmaXgpXQorICAgIGVsc2U6CisgICAgICAgICMgQXBwZW5kIGNvbXByZXNzIHN1ZmZpeAorICAgICAgICBuZXdfbGlua25hbWUgPSBmaWxlICsgY29tcHJlc3Nfc3VmZml4CisgICAgICAgIG5ld19zb3VyY2UgPSBvcy5yZWFkbGluayhmaWxlKSArIGNvbXByZXNzX3N1ZmZpeAorCisgICAgYmIubm90ZSgnc3ltbGluayAlcy0tPiVzJyAlIChuZXdfbGlua25hbWUsIG5ld19zb3VyY2UpKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhuZXdfbGlua25hbWUpOgorICAgICAgICBvcy5zeW1saW5rKG5ld19zb3VyY2UsIG5ld19saW5rbmFtZSkKKworICAgIG9zLnVubGluayhmaWxlKQorCitkZWYgX2lzX2luZm8oZmlsZSk6CisgICAgZmxhZ3MgPSAnLmluZm8gLmluZm8tJy5zcGxpdCgpCisgICAgZm9yIGZsYWcgaW4gZmxhZ3M6CisgICAgICAgIGlmIGZsYWcgaW4gb3MucGF0aC5iYXNlbmFtZShmaWxlKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIF9pc19tYW4oZmlsZSk6CisgICAgaW1wb3J0IHJlCisKKyAgICAjIEl0IHJlZmVycyBNQU5TRUNULXZhciBpbiBtYW4oMS42ZykncyBtYW4uY29uZmlnCisgICAgIyAiLjE6LjFwOi44Oi4yOi4zOi4zcDouNDouNTouNjouNzouOTouMHA6LnRjbDoubjoubDoucDoubyIKKyAgICAjIE5vdCBzdGFydCB3aXRoICcuJywgYW5kIGNvbnRhaW4gdGhlIGFib3ZlIGNvbG9uLXNlcGVyYXRlIGVsZW1lbnQKKyAgICBwID0gcmUuY29tcGlsZShyJ1teXC5dK1wuKFsxLTlsbm9wXXwwcHx0Y2wpJykKKyAgICBpZiBwLnNlYXJjaChmaWxlKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHJldHVybiBGYWxzZQorCitkZWYgX2lzX2NvbXByZXNzX2RvYyhmaWxlLCBjb21wcmVzc19mb3JtYXRfbGlzdCk6CisgICAgY29tcHJlc3NfZm9ybWF0ID0gX2dldF9jb21wcmVzc19mb3JtYXQoZmlsZSwgY29tcHJlc3NfZm9ybWF0X2xpc3QpCisgICAgY29tcHJlc3Nfc3VmZml4ID0gJy4nICsgY29tcHJlc3NfZm9ybWF0CisgICAgaWYgZmlsZS5lbmRzd2l0aChjb21wcmVzc19zdWZmaXgpOgorICAgICAgICAjIFJlbW92ZSB0aGUgY29tcHJlc3Mgc3VmZml4CisgICAgICAgIHVuY29tcHJlc3NfZmlsZSA9IGZpbGVbOi1sZW4oY29tcHJlc3Nfc3VmZml4KV0KKyAgICAgICAgaWYgX2lzX2luZm8odW5jb21wcmVzc19maWxlKSBvciBfaXNfbWFuKHVuY29tcHJlc3NfZmlsZSk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZSwgY29tcHJlc3NfZm9ybWF0CisKKyAgICByZXR1cm4gRmFsc2UsICcnCisKK2RlZiBjb21wcmVzc19kb2ModG9wZGlyLCBjb21wcmVzc19tb2RlLCBjb21wcmVzc19jbWRzKToKKyAgICBoYXJkbGlua19kaWN0ID0ge30KKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh0b3BkaXIpOgorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZmlsZSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgX2lzX2luZm8oZmlsZSkgb3IgX2lzX21hbihmaWxlKToKKyAgICAgICAgICAgICAgICAjIFN5bWxpbmsKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgX3Byb2Nlc3Nfc3ltbGluayhmaWxlLCBjb21wcmVzc19tb2RlKQorICAgICAgICAgICAgICAgICMgSGFyZGxpbmsKKyAgICAgICAgICAgICAgICBlbGlmIG9zLmxzdGF0KGZpbGUpLnN0X25saW5rID4gMToKKyAgICAgICAgICAgICAgICAgICAgX2NvbGxlY3RfaGFyZGxpbmsoaGFyZGxpbmtfZGljdCwgZmlsZSkKKyAgICAgICAgICAgICAgICAjIE5vcm1hbCBmaWxlCisgICAgICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZmlsZShmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgY21kID0gIiVzICVzIiAlIChjb21wcmVzc19jbWRzW2NvbXByZXNzX21vZGVdLCBmaWxlKQorICAgICAgICAgICAgICAgICAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcmV0dmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiY29tcHJlc3MgZmFpbGVkICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCdjb21wcmVzcyBmaWxlICVzJyAlIGZpbGUpCisKKyAgICBfcHJvY2Vzc19oYXJkbGluayhoYXJkbGlua19kaWN0LCBjb21wcmVzc19tb2RlLCBjb21wcmVzc19jbWRzKQorCisjIERlY29tcHJlc3MgZG9jIGZpbGVzIHdoaWNoIGZvcm1hdCBpcyBub3QgY29tcHJlc3NfbW9kZQorZGVmIGRlY29tcHJlc3NfZG9jKHRvcGRpciwgY29tcHJlc3NfbW9kZSwgZGVjb21wcmVzc19jbWRzKToKKyAgICBoYXJkbGlua19kaWN0ID0ge30KKyAgICBkZWNvbXByZXNzID0gVHJ1ZQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHRvcGRpcik6CisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBmKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmaWxlKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICByZXMsIGNvbXByZXNzX2Zvcm1hdCA9IF9pc19jb21wcmVzc19kb2MoZmlsZSwgZGVjb21wcmVzc19jbWRzLmtleXMoKSkKKyAgICAgICAgICAgICMgRGVjb21wcmVzcyBmaWxlcyB3aGljaCBmb3JtYXQgaXMgbm90IGNvbXByZXNzX21vZGUKKyAgICAgICAgICAgIGlmIHJlcyBhbmQgY29tcHJlc3NfbW9kZSE9Y29tcHJlc3NfZm9ybWF0OgorICAgICAgICAgICAgICAgICMgU3ltbGluaworICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICBfcHJvY2Vzc19zeW1saW5rKGZpbGUsIGNvbXByZXNzX2Zvcm1hdCwgZGVjb21wcmVzcykKKyAgICAgICAgICAgICAgICAjIEhhcmRsaW5rCisgICAgICAgICAgICAgICAgZWxpZiBvcy5sc3RhdChmaWxlKS5zdF9ubGluayA+IDE6CisgICAgICAgICAgICAgICAgICAgIF9jb2xsZWN0X2hhcmRsaW5rKGhhcmRsaW5rX2RpY3QsIGZpbGUpCisgICAgICAgICAgICAgICAgIyBOb3JtYWwgZmlsZQorICAgICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2ZpbGUoZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIGNtZCA9ICIlcyAlcyIgJSAoZGVjb21wcmVzc19jbWRzW2NvbXByZXNzX2Zvcm1hdF0sIGZpbGUpCisgICAgICAgICAgICAgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICAgICAgICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJkZWNvbXByZXNzIGZhaWxlZCAlcyAoY21kIHdhcyAlcyklcyIgJSAocmV0dmFsLCBjbWQsICI6XG4lcyIgJSBvdXRwdXQgaWYgb3V0cHV0IGVsc2UgIiIpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgnZGVjb21wcmVzcyBmaWxlICVzJyAlIGZpbGUpCisKKyAgICBfcHJvY2Vzc19oYXJkbGluayhoYXJkbGlua19kaWN0LCBjb21wcmVzc19tb2RlLCBkZWNvbXByZXNzX2NtZHMsIGRlY29tcHJlc3MpCisKK3B5dGhvbiBjb21wcmVzc19kb2NfdXBkYXRlYWx0ZXJuYXRpdmVzICgpIHsKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygndXBkYXRlLWFsdGVybmF0aXZlcycsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIG1hbmRpciA9IGQuZ2V0VmFyKCJtYW5kaXIiLCBUcnVlKQorICAgIGluZm9kaXIgPSBkLmdldFZhcigiaW5mb2RpciIsIFRydWUpCisgICAgY29tcHJlc3NfbW9kZSA9IGQuZ2V0VmFyKCdET0NfQ09NUFJFU1MnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBvbGRfbmFtZXMgPSAoZC5nZXRWYXIoJ0FMVEVSTkFUSVZFXyVzJyAlIHBrZywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgbmV3X25hbWVzID0gW10KKyAgICAgICAgZm9yIG9sZF9uYW1lIGluIG9sZF9uYW1lczoKKyAgICAgICAgICAgIG9sZF9saW5rICAgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgb2xkX25hbWUsIFRydWUpCisgICAgICAgICAgICBvbGRfdGFyZ2V0ICAgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIG9sZF9uYW1lLCBUcnVlKSBvciBcCisgICAgICAgICAgICAgICAgZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBvbGRfbmFtZSwgVHJ1ZSkgb3IgXAorICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBUcnVlKSBvciBcCisgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIFRydWUpIG9yIFwKKyAgICAgICAgICAgICAgICBvbGRfbGluaworICAgICAgICAgICAgIyBTb21ldGltZXMgb2xkX3RhcmdldCBpcyBzcGVjaWZpZWQgYXMgcmVsYXRpdmUgdG8gdGhlIGxpbmsgbmFtZS4KKyAgICAgICAgICAgIG9sZF90YXJnZXQgICA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob2xkX2xpbmspLCBvbGRfdGFyZ2V0KQorCisgICAgICAgICAgICAjIFRoZSB1cGRhdGVhbHRlcm5hdGl2ZXMgdXNlZCBmb3IgY29tcHJlc3MgZG9jCisgICAgICAgICAgICBpZiBtYW5kaXIgaW4gb2xkX3RhcmdldCBvciBpbmZvZGlyIGluIG9sZF90YXJnZXQ6CisgICAgICAgICAgICAgICAgbmV3X25hbWUgPSBvbGRfbmFtZSArICcuJyArIGNvbXByZXNzX21vZGUKKyAgICAgICAgICAgICAgICBuZXdfbGluayA9IG9sZF9saW5rICsgJy4nICsgY29tcHJlc3NfbW9kZQorICAgICAgICAgICAgICAgIG5ld190YXJnZXQgPSBvbGRfdGFyZ2V0ICsgJy4nICsgY29tcHJlc3NfbW9kZQorICAgICAgICAgICAgICAgIGQuZGVsVmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgb2xkX25hbWUpCisgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBuZXdfbmFtZSwgbmV3X2xpbmspCisgICAgICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBvbGRfbmFtZSwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgICAgIGQuZGVsVmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgb2xkX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgbmV3X25hbWUsIG5ld190YXJnZXQpCisgICAgICAgICAgICAgICAgZWxpZiBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIG9sZF9uYW1lLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgZC5kZWxWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBvbGRfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBuZXdfbmFtZSwgbmV3X3RhcmdldCkKKyAgICAgICAgICAgICAgICBlbGlmIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIG5ld190YXJnZXQpCisgICAgICAgICAgICAgICAgZWxpZiBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUJywgb2xkX25hbWUsIFRydWUpOgorICAgICAgICAgICAgICAgICAgICBkLnNldFZhcignQUxURVJOQVRJVkVfVEFSR0VUJywgbmV3X3RhcmdldCkKKworICAgICAgICAgICAgICAgIG5ld19uYW1lcy5hcHBlbmQobmV3X25hbWUpCisKKyAgICAgICAgaWYgbmV3X25hbWVzOgorICAgICAgICAgICAgZC5zZXRWYXIoJ0FMVEVSTkFUSVZFXyVzJyAlIHBrZywgJyAnLmpvaW4obmV3X25hbWVzKSkKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29weWxlZnRfY29tcGxpYW5jZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29weWxlZnRfY29tcGxpYW5jZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwN2MxODMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jb3B5bGVmdF9jb21wbGlhbmNlLmJiY2xhc3MKQEAgLTAsMCArMSw2NCBAQAorIyBEZXBsb3kgc291cmNlcyBmb3IgcmVjaXBlcyBmb3IgY29tcGxpYW5jZSB3aXRoIGNvcHlsZWZ0LXN0eWxlIGxpY2Vuc2VzCisjIERlZmF1bHRzIHRvIHVzaW5nIHN5bWxpbmtzLCBhcyBpdCdzIGEgcXVpY2sgb3BlcmF0aW9uLCBhbmQgb25lIGNhbiBlYXNpbHkKKyMgZm9sbG93IHRoZSBsaW5rcyB3aGVuIG1ha2luZyB1c2Ugb2YgdGhlIGZpbGVzIChlLmcuIHRhciB3aXRoIHRoZSAtaCBhcmcpLgorIworIyB2aTpzdHM9NDpzdz00OmV0CisKK2luaGVyaXQgY29weWxlZnRfZmlsdGVyCisKK0NPUFlMRUZUX1NPVVJDRVNfRElSID89ICcke0RFUExPWV9ESVJ9L2NvcHlsZWZ0X3NvdXJjZXMnCisKK3B5dGhvbiBkb19wcmVwYXJlX2NvcHlsZWZ0X3NvdXJjZXMgKCkgeworICAgICIiIlBvcHVsYXRlIGEgdHJlZSBvZiB0aGUgcmVjaXBlIHNvdXJjZXMgYW5kIGVtaXQgcGF0Y2ggc2VyaWVzIGZpbGVzIiIiCisgICAgaW1wb3J0IG9zLnBhdGgKKyAgICBpbXBvcnQgc2h1dGlsCisKKyAgICBwID0gZC5nZXRWYXIoJ1AnLCBUcnVlKQorICAgIGluY2x1ZGVkLCByZWFzb24gPSBjb3B5bGVmdF9zaG91bGRfaW5jbHVkZShkKQorICAgIGlmIG5vdCBpbmNsdWRlZDoKKyAgICAgICAgYmIuZGVidWcoMSwgJ2NvcHlsZWZ0OiAlcyBpcyBleGNsdWRlZDogJXMnICUgKHAsIHJlYXNvbikpCisgICAgICAgIHJldHVybgorICAgIGVsc2U6CisgICAgICAgIGJiLmRlYnVnKDEsICdjb3B5bGVmdDogJXMgaXMgaW5jbHVkZWQ6ICVzJyAlIChwLCByZWFzb24pKQorCisgICAgc291cmNlc19kaXIgPSBkLmdldFZhcignQ09QWUxFRlRfU09VUkNFU19ESVInLCBUcnVlKQorICAgIGRsX2RpciA9IGQuZ2V0VmFyKCdETF9ESVInLCBUcnVlKQorICAgIHNyY191cmkgPSBkLmdldFZhcignU1JDX1VSSScsIFRydWUpLnNwbGl0KCkKKyAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChzcmNfdXJpLCBkKQorICAgIHVkID0gZmV0Y2gudWQKKworICAgIHBmID0gZC5nZXRWYXIoJ1BGJywgVHJ1ZSkKKyAgICBkZXN0ID0gb3MucGF0aC5qb2luKHNvdXJjZXNfZGlyLCBwZikKKyAgICBzaHV0aWwucm10cmVlKGRlc3QsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZGVzdCkKKworICAgIGZvciB1IGluIHVkLnZhbHVlcygpOgorICAgICAgICBsb2NhbCA9IG9zLnBhdGgubm9ybXBhdGgoZmV0Y2gubG9jYWxwYXRoKHUudXJsKSkKKyAgICAgICAgaWYgbG9jYWwuZW5kc3dpdGgoJy5iYicpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxpZiBsb2NhbC5lbmRzd2l0aCgnLycpOgorICAgICAgICAgICAgbG9jYWwgPSBsb2NhbFs6LTFdCisKKyAgICAgICAgaWYgdS5taXJyb3J0YXJiYWxsOgorICAgICAgICAgICAgdGFyYmFsbF9wYXRoID0gb3MucGF0aC5qb2luKGRsX2RpciwgdS5taXJyb3J0YXJiYWxsKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModGFyYmFsbF9wYXRoKToKKyAgICAgICAgICAgICAgICBsb2NhbCA9IHRhcmJhbGxfcGF0aAorCisgICAgICAgIG9lLnBhdGguc3ltbGluayhsb2NhbCwgb3MucGF0aC5qb2luKGRlc3QsIG9zLnBhdGguYmFzZW5hbWUobG9jYWwpKSwgZm9yY2U9VHJ1ZSkKKworICAgIHBhdGNoZXMgPSBzcmNfcGF0Y2hlcyhkKQorICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgorICAgICAgICBfLCBfLCBsb2NhbCwgXywgXywgcGFybSA9IGJiLmZldGNoLmRlY29kZXVybChwYXRjaCkKKyAgICAgICAgcGF0Y2hkaXIgPSBwYXJtLmdldCgncGF0Y2hkaXInKQorICAgICAgICBpZiBwYXRjaGRpcjoKKyAgICAgICAgICAgIHNlcmllcyA9IG9zLnBhdGguam9pbihkZXN0LCAnc2VyaWVzLnN1YmRpci4lcycgJSBwYXRjaGRpci5yZXBsYWNlKCcvJywgJ18nKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlcmllcyA9IG9zLnBhdGguam9pbihkZXN0LCAnc2VyaWVzJykKKworICAgICAgICB3aXRoIG9wZW4oc2VyaWVzLCAnYScpIGFzIHM6CisgICAgICAgICAgICBzLndyaXRlKCclcyAtcCVzXG4nICUgKG9zLnBhdGguYmFzZW5hbWUobG9jYWwpLCBwYXJtWydzdHJpcGxldmVsJ10pKQorfQorCithZGR0YXNrIHByZXBhcmVfY29weWxlZnRfc291cmNlcyBhZnRlciBkb19mZXRjaCBiZWZvcmUgZG9fYnVpbGQKK2RvX3ByZXBhcmVfY29weWxlZnRfc291cmNlc1tkaXJzXSA9ICIke1dPUktESVJ9IgorZG9fYnVpbGRbcmVjcmRlcHRhc2tdICs9ICdkb19wcmVwYXJlX2NvcHlsZWZ0X3NvdXJjZXMnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jb3B5bGVmdF9maWx0ZXIuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NvcHlsZWZ0X2ZpbHRlci5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YmU3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jb3B5bGVmdF9maWx0ZXIuYmJjbGFzcwpAQCAtMCwwICsxLDc5IEBACisjIEZpbHRlciB0aGUgbGljZW5zZSwgdGhlIGNvcHlsZWZ0X3Nob3VsZF9pbmNsdWRlIHJldHVybnMgVHJ1ZSBmb3IgdGhlCisjIENPUFlMRUZUX0xJQ0VOU0VfSU5DTFVERSByZWNpcGUsIGFuZCBGYWxzZSBmb3IgdGhlCisjIENPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERS4KKyMKKyMgQnkgZGVmYXVsdCwgaW5jbHVkZXMgYWxsIEdQTCBhbmQgTEdQTCwgYW5kIGV4Y2x1ZGVzIENMT1NFRCBhbmQgUHJvcHJpZXRhcnkuCisjCisjIHZpOnN0cz00OnN3PTQ6ZXQKKworQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFID89ICdHUEwqIExHUEwqJworQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFW3R5cGVdID0gJ2xpc3QnCitDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREVbZG9jXSA9ICdTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBnbG9icyB3aGljaCBpbmNsdWRlIGxpY2Vuc2VzJworCitDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREUgPz0gJ0NMT1NFRCBQcm9wcmlldGFyeScKK0NPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERVt0eXBlXSA9ICdsaXN0JworQ09QWUxFRlRfTElDRU5TRV9FWENMVURFW2RvY10gPSAnU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgZ2xvYnMgd2hpY2ggZXhjbHVkZSBsaWNlbnNlcycKKworQ09QWUxFRlRfUkVDSVBFX1RZUEUgPz0gJyR7QGNvcHlsZWZ0X3JlY2lwZV90eXBlKGQpfScKK0NPUFlMRUZUX1JFQ0lQRV9UWVBFW2RvY10gPSAnVGhlICJ0eXBlIiBvZiB0aGUgY3VycmVudCByZWNpcGUgKGUuZy4gdGFyZ2V0LCBuYXRpdmUsIGNyb3NzKScKKworQ09QWUxFRlRfUkVDSVBFX1RZUEVTID89ICd0YXJnZXQnCitDT1BZTEVGVF9SRUNJUEVfVFlQRVNbdHlwZV0gPSAnbGlzdCcKK0NPUFlMRUZUX1JFQ0lQRV9UWVBFU1tkb2NdID0gJ1NwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHJlY2lwZSB0eXBlcyB0byBpbmNsdWRlJworCitDT1BZTEVGVF9BVkFJTEFCTEVfUkVDSVBFX1RZUEVTID0gJ3RhcmdldCBuYXRpdmUgbmF0aXZlc2RrIGNyb3NzIGNyb3Nzc2RrIGNyb3NzLWNhbmFkaWFuJworQ09QWUxFRlRfQVZBSUxBQkxFX1JFQ0lQRV9UWVBFU1t0eXBlXSA9ICdsaXN0JworQ09QWUxFRlRfQVZBSUxBQkxFX1JFQ0lQRV9UWVBFU1tkb2NdID0gJ1NwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGF2YWlsYWJsZSByZWNpcGUgdHlwZXMnCisKK0NPUFlMRUZUX1BOX0lOQ0xVREUgPz0gJycKK0NPUFlMRUZUX1BOX0lOQ0xVREVbdHlwZV0gPSAnbGlzdCcKK0NPUFlMRUZUX1BOX0lOQ0xVREVbZG9jXSA9ICdTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiByZWNpcGUgbmFtZXMgdG8gaW5jbHVkZScKKworQ09QWUxFRlRfUE5fRVhDTFVERSA/PSAnJworQ09QWUxFRlRfUE5fRVhDTFVERVt0eXBlXSA9ICdsaXN0JworQ09QWUxFRlRfUE5fRVhDTFVERVtkb2NdID0gJ1NwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHJlY2lwZSBuYW1lcyB0byBleGNsdWRlJworCitkZWYgY29weWxlZnRfcmVjaXBlX3R5cGUoZCk6CisgICAgZm9yIHJlY2lwZV90eXBlIGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ0NPUFlMRUZUX0FWQUlMQUJMRV9SRUNJUEVfVFlQRVMnLCBkKToKKyAgICAgICAgaWYgb2UudXRpbHMuaW5oZXJpdHMoZCwgcmVjaXBlX3R5cGUpOgorICAgICAgICAgICAgcmV0dXJuIHJlY2lwZV90eXBlCisgICAgcmV0dXJuICd0YXJnZXQnCisKK2RlZiBjb3B5bGVmdF9zaG91bGRfaW5jbHVkZShkKToKKyAgICAiIiIKKyAgICBEZXRlcm1pbmUgaWYgdGhpcyByZWNpcGUncyBzb3VyY2VzIHNob3VsZCBiZSBkZXBsb3llZCBmb3IgY29tcGxpYW5jZQorICAgICIiIgorICAgIGltcG9ydCBhc3QKKyAgICBpbXBvcnQgb2UubGljZW5zZQorICAgIGZyb20gZm5tYXRjaCBpbXBvcnQgZm5tYXRjaGNhc2UgYXMgZm5tYXRjaAorCisgICAgaW5jbHVkZWQsIG1vdGl2ZSA9IEZhbHNlLCAncmVjaXBlIGRpZCBub3QgbWF0Y2ggYW55dGhpbmcnCisKKyAgICByZWNpcGVfdHlwZSA9IGQuZ2V0VmFyKCdDT1BZTEVGVF9SRUNJUEVfVFlQRScsIFRydWUpCisgICAgaWYgcmVjaXBlX3R5cGUgbm90IGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ0NPUFlMRUZUX1JFQ0lQRV9UWVBFUycsIGQpOgorICAgICAgICBpbmNsdWRlLCBtb3RpdmUgPSBGYWxzZSwgJ3JlY2lwZSB0eXBlICIlcyIgaXMgZXhjbHVkZWQnICUgcmVjaXBlX3R5cGUKKworICAgIGluY2x1ZGUgPSBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREUnLCBkKQorICAgIGV4Y2x1ZGUgPSBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREUnLCBkKQorCisgICAgdHJ5OgorICAgICAgICBpc19pbmNsdWRlZCwgcmVhc29uID0gb2UubGljZW5zZS5pc19pbmNsdWRlZChkLmdldFZhcignTElDRU5TRScsIFRydWUpLCBpbmNsdWRlLCBleGNsdWRlKQorICAgIGV4Y2VwdCBvZS5saWNlbnNlLkxpY2Vuc2VFcnJvciBhcyBleGM6CisgICAgICAgIGJiLmZhdGFsKCclczogJXMnICUgKGQuZ2V0VmFyKCdQRicsIFRydWUpLCBleGMpKQorICAgIGVsc2U6CisgICAgICAgIGlmIGlzX2luY2x1ZGVkOgorICAgICAgICAgICAgaWYgcmVhc29uOgorICAgICAgICAgICAgICAgIGluY2x1ZGVkLCBtb3RpdmUgPSBUcnVlLCAncmVjaXBlIGhhcyBpbmNsdWRlZCBsaWNlbnNlczogJXMnICUgJywgJy5qb2luKHJlYXNvbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5jbHVkZWQsIG1vdGl2ZSA9IEZhbHNlLCAncmVjaXBlIGRvZXMgbm90IGluY2x1ZGUgYSBjb3B5bGVmdCBsaWNlbnNlJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5jbHVkZWQsIG1vdGl2ZSA9IEZhbHNlLCAncmVjaXBlIGhhcyBleGNsdWRlZCBsaWNlbnNlczogJXMnICUgJywgJy5qb2luKHJlYXNvbikKKworICAgIGlmIGFueShmbm1hdGNoKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBuYW1lKSBcCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdDT1BZTEVGVF9QTl9JTkNMVURFJywgZCkpOgorICAgICAgICBpbmNsdWRlZCwgbW90aXZlID0gIFRydWUsICdyZWNpcGUgaW5jbHVkZWQgYnkgbmFtZScKKyAgICBpZiBhbnkoZm5tYXRjaChkLmdldFZhcignUE4nLCBUcnVlKSwgbmFtZSkgXAorICAgICAgICAgICAgZm9yIG5hbWUgaW4gb2UuZGF0YS50eXBlZF92YWx1ZSgnQ09QWUxFRlRfUE5fRVhDTFVERScsIGQpKToKKyAgICAgICAgaW5jbHVkZWQsIG1vdGl2ZSA9IEZhbHNlLCAncmVjaXBlIGV4Y2x1ZGVkIGJ5IG5hbWUnCisKKyAgICByZXR1cm4gaW5jbHVkZWQsIG1vdGl2ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29yZS1pbWFnZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29yZS1pbWFnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMzQwZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jb3JlLWltYWdlLmJiY2xhc3MKQEAgLTAsMCArMSw3MyBAQAorIyBDb21tb24gY29kZSBmb3IgZ2VuZXJhdGluZyBjb3JlIHJlZmVyZW5jZSBpbWFnZXMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgTGludXggRm91bmRhdGlvbgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworIyBJTUFHRV9GRUFUVVJFUyBjb250cm9sIGNvbnRlbnQgb2YgdGhlIGNvcmUgcmVmZXJlbmNlIGltYWdlcworIyAKKyMgQnkgZGVmYXVsdCB3ZSBpbnN0YWxsIHBhY2thZ2Vncm91cC1jb3JlLWJvb3QgYW5kIHBhY2thZ2Vncm91cC1iYXNlLWV4dGVuZGVkIHBhY2thZ2VzOworIyB0aGlzIGdpdmVzIHVzIHdvcmtpbmcgKGNvbnNvbGUgb25seSkgcm9vdGZzLgorIworIyBBdmFpbGFibGUgSU1BR0VfRkVBVFVSRVM6CisjCisjIC0geDExICAgICAgICAgICAgICAgICAtIFggc2VydmVyCisjIC0geDExLWJhc2UgICAgICAgICAgICAtIFggc2VydmVyIHdpdGggbWluaW1hbCBlbnZpcm9ubWVudAorIyAtIHgxMS1zYXRvICAgICAgICAgICAgLSBPcGVuZWRIYW5kIFNhdG8gZW52aXJvbm1lbnQKKyMgLSB0b29scy1kZWJ1ZyAgICAgICAgIC0gZGVidWdnaW5nIHRvb2xzCisjIC0gZWNsaXBzZS1kZWJ1ZyAgICAgICAtIEVjbGlwc2UgcmVtb3RlIGRlYnVnZ2luZyBzdXBwb3J0CisjIC0gdG9vbHMtcHJvZmlsZSAgICAgICAtIHByb2ZpbGluZyB0b29scworIyAtIHRvb2xzLXRlc3RhcHBzICAgICAgLSB0b29scyB1c2FibGUgdG8gbWFrZSBzb21lIGRldmljZSB0ZXN0cworIyAtIHRvb2xzLXNkayAgICAgICAgICAgLSBTREsgKEMvQysrIGNvbXBpbGVyLCBhdXRvdG9vbHMsIGV0Yy4pCisjIC0gbmZzLXNlcnZlciAgICAgICAgICAtIE5GUyBzZXJ2ZXIKKyMgLSBuZnMtY2xpZW50ICAgICAgICAgIC0gTkZTIGNsaWVudAorIyAtIHNzaC1zZXJ2ZXItZHJvcGJlYXIgLSBTU0ggc2VydmVyIChkcm9wYmVhcikKKyMgLSBzc2gtc2VydmVyLW9wZW5zc2ggIC0gU1NIIHNlcnZlciAob3BlbnNzaCkKKyMgLSBxdDQtcGtncyAgICAgICAgICAgIC0gUXQ0L1gxMSBhbmQgZGVtbyBhcHBsaWNhdGlvbnMKKyMgLSBod2NvZGVjcyAgICAgICAgICAgIC0gSW5zdGFsbCBoYXJkd2FyZSBhY2NlbGVyYXRpb24gY29kZWNzCisjIC0gcGFja2FnZS1tYW5hZ2VtZW50ICAtIGluc3RhbGxzIHBhY2thZ2UgbWFuYWdlbWVudCB0b29scyBhbmQgcHJlc2VydmVzIHRoZSBwYWNrYWdlIG1hbmFnZXIgZGF0YWJhc2UKKyMgLSBkZWJ1Zy10d2Vha3MgICAgICAgIC0gbWFrZXMgYW4gaW1hZ2Ugc3VpdGFibGUgZm9yIGRldmVsb3BtZW50LCBlLmcuIGFsbG93aW5nIHBhc3N3b3JkbGVzcyByb290IGxvZ2lucworIyAtIGRldi1wa2dzICAgICAgICAgICAgLSBkZXZlbG9wbWVudCBwYWNrYWdlcyAoaGVhZGVycywgZXRjLikgZm9yIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMgaW4gdGhlIHJvb3RmcworIyAtIGRiZy1wa2dzICAgICAgICAgICAgLSBkZWJ1ZyBzeW1ib2wgcGFja2FnZXMgZm9yIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMgaW4gdGhlIHJvb3RmcworIyAtIGRvYy1wa2dzICAgICAgICAgICAgLSBkb2N1bWVudGF0aW9uIHBhY2thZ2VzIGZvciBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzIGluIHRoZSByb290ZnMKKyMgLSBwdGVzdC1wa2dzICAgICAgICAgIC0gcHRlc3QgcGFja2FnZXMgZm9yIGFsbCBwdGVzdC1lbmFibGVkIHJlY2lwZXMKKyMgLSByZWFkLW9ubHktcm9vdGZzICAgIC0gdHdlYWtzIGFuIGltYWdlIHRvIHN1cHBvcnQgcmVhZC1vbmx5IHJvb3RmcworIworRkVBVFVSRV9QQUNLQUdFU194MTEgPSAicGFja2FnZWdyb3VwLWNvcmUteDExIgorRkVBVFVSRV9QQUNLQUdFU194MTEtYmFzZSA9ICJwYWNrYWdlZ3JvdXAtY29yZS14MTEtYmFzZSIKK0ZFQVRVUkVfUEFDS0FHRVNfeDExLXNhdG8gPSAicGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8iCitGRUFUVVJFX1BBQ0tBR0VTX3Rvb2xzLWRlYnVnID0gInBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnIgorRkVBVFVSRV9QQUNLQUdFU19lY2xpcHNlLWRlYnVnID0gInBhY2thZ2Vncm91cC1jb3JlLWVjbGlwc2UtZGVidWciCitGRUFUVVJFX1BBQ0tBR0VTX3Rvb2xzLXByb2ZpbGUgPSAicGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZSIKK0ZFQVRVUkVfUEFDS0FHRVNfdG9vbHMtdGVzdGFwcHMgPSAicGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMiCitGRUFUVVJFX1BBQ0tBR0VTX3Rvb2xzLXNkayA9ICJwYWNrYWdlZ3JvdXAtY29yZS1zZGsgcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0IgorRkVBVFVSRV9QQUNLQUdFU19uZnMtc2VydmVyID0gInBhY2thZ2Vncm91cC1jb3JlLW5mcy1zZXJ2ZXIiCitGRUFUVVJFX1BBQ0tBR0VTX25mcy1jbGllbnQgPSAicGFja2FnZWdyb3VwLWNvcmUtbmZzLWNsaWVudCIKK0ZFQVRVUkVfUEFDS0FHRVNfc3NoLXNlcnZlci1kcm9wYmVhciA9ICJwYWNrYWdlZ3JvdXAtY29yZS1zc2gtZHJvcGJlYXIiCitGRUFUVVJFX1BBQ0tBR0VTX3NzaC1zZXJ2ZXItb3BlbnNzaCA9ICJwYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaCIKK0ZFQVRVUkVfUEFDS0FHRVNfcXQ0LXBrZ3MgPSAicGFja2FnZWdyb3VwLWNvcmUtcXQtZGVtb2FwcHMiCitGRUFUVVJFX1BBQ0tBR0VTX2h3Y29kZWNzID0gIiR7TUFDSElORV9IV0NPREVDU30iCisKKworIyBJTUFHRV9GRUFUVVJFU19SRVBMQUNFU19mb28gPSAnYmFyMSBiYXIyJworIyBJbmNsdWRpbmcgaW1hZ2UgZmVhdHVyZSBmb28gd291bGQgcmVwbGFjZSB0aGUgaW1hZ2UgZmVhdHVyZXMgYmFyMSBhbmQgYmFyMgorSU1BR0VfRkVBVFVSRVNfUkVQTEFDRVNfc3NoLXNlcnZlci1vcGVuc3NoID0gInNzaC1zZXJ2ZXItZHJvcGJlYXIiCisKKyMgSU1BR0VfRkVBVFVSRVNfQ09ORkxJQ1RTX2ZvbyA9ICdiYXIxIGJhcjInCisjIEFuIGVycm9yIGV4Y2VwdGlvbiB3b3VsZCBiZSByYWlzZWQgaWYgYm90aCBpbWFnZSBmZWF0dXJlcyBmb28gYW5kIGJhcjEob3IgYmFyMikgYXJlIGluY2x1ZGVkCisKK01BQ0hJTkVfSFdDT0RFQ1MgPz89ICIiCisKK0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMID0gJ1wKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1ib290IFwKKyAgICBwYWNrYWdlZ3JvdXAtYmFzZS1leHRlbmRlZCBcCisgICAgXAorICAgICR7Q09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMfSBcCisgICAgJworCitDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEwgPz0gIiIKKworSU1BR0VfSU5TVEFMTCA/PSAiJHtDT1JFX0lNQUdFX0JBU0VfSU5TVEFMTH0iCisKK2luaGVyaXQgaW1hZ2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NwYW4tYmFzZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY3Bhbi1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk4MTdiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NwYW4tYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsNTUgQEAKKyMKKyMgY3Bhbi1iYXNlIHByb3ZpZGVycyB2YXJpb3VzIHBlcmwgcmVsYXRlZCBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIGJ1aWxkaW5nCisjIGNwYW4gbW9kdWxlcworIworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9wZXJsICR7ZGF0YWRpcn0vcGVybCIKKworREVQRU5EUyAgKz0gIiR7QFsicGVybCIsICJwZXJsLW5hdGl2ZSJdWyhiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSldfSIKK1JERVBFTkRTXyR7UE59ICs9ICIke0BbInBlcmwiLCAiIl1bKGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpKV19IgorCitQRVJMX09XTl9ESVIgPSAiJHtAWyIiLCAiL3BlcmwtbmF0aXZlIl1bKGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpKV19IgorCisjIERldGVybWluZSB0aGUgc3RhZ2VkIHZlcnNpb24gb2YgcGVybCBmcm9tIHRoZSBwZXJsIGNvbmZpZ3VyYXRpb24gZmlsZQorIyBBc3NpZ24gdmFyZGVwdmFsdWUsIGJlY2F1c2Ugb3RoZXJ3aXNlIHNpZ25hdHVyZSBpcyBjaGFuZ2VkIGJlZm9yZSBhbmQgYWZ0ZXIKKyMgcGVybCBpcyBidWlsdCAoZnJvbSBOb25lIHRvIHJlYWwgdmVyc2lvbiBpbiBjb25maWcuc2gpLgorZ2V0X3BlcmxfdmVyc2lvblt2YXJkZXB2YWx1ZV0gPSAiJHtQRVJMX09XTl9ESVJ9IgorZGVmIGdldF9wZXJsX3ZlcnNpb24oZCk6CisgICAgaW1wb3J0IHJlCisgICAgY2ZnID0gZC5leHBhbmQoJyR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvY29uZmlnLnNoJykKKyAgICB0cnk6CisgICAgICAgIGYgPSBvcGVuKGNmZywgJ3InKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIGwgPSBmLnJlYWRsaW5lcygpOworICAgIGYuY2xvc2UoKTsKKyAgICByID0gcmUuY29tcGlsZSgiXnZlcnNpb249JyhcZCpcLlxkKlwuXGQqKSciKQorICAgIGZvciBzIGluIGw6CisgICAgICAgIG0gPSByLm1hdGNoKHMpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICByZXR1cm4gbS5ncm91cCgxKQorICAgIHJldHVybiBOb25lCisKKyMgRGV0ZXJtaW5lIHdoZXJlIHRoZSBsaWJyYXJ5IGRpcmVjdG9yaWVzIGFyZQorZGVmIHBlcmxfZ2V0X2xpYmRpcnMoZCk6CisgICAgbGliZGlyID0gZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpCisgICAgaWYgaXNfdGFyZ2V0KGQpID09ICJubyI6CisgICAgICAgIGxpYmRpciArPSAnL3BlcmwtbmF0aXZlJworICAgIGxpYmRpciArPSAnL3BlcmwnCisgICAgcmV0dXJuIGxpYmRpcgorCitkZWYgaXNfdGFyZ2V0KGQpOgorICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKToKKyAgICAgICAgcmV0dXJuICJ5ZXMiCisgICAgcmV0dXJuICJubyIKKworUEVSTExJQkRJUlMgOj0gIiR7QHBlcmxfZ2V0X2xpYmRpcnMoZCl9IgorUEVSTFZFUlNJT04gOj0gIiR7QGdldF9wZXJsX3ZlcnNpb24oZCl9IgorUEVSTFZFUlNJT05bdmFyZGVwdmFsdWVdID0gIiIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke1BFUkxMSUJESVJTfS9hdXRvLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQRVJMTElCRElSU30vYXV0by8qLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQRVJMTElCRElSU30vYXV0by8qLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke1BFUkxMSUJESVJTfS92ZW5kb3JfcGVybC8ke1BFUkxWRVJTSU9OfS9hdXRvLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQRVJMTElCRElSU30vdmVuZG9yX3BlcmwvJHtQRVJMVkVSU0lPTn0vYXV0by8qLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQRVJMTElCRElSU30vdmVuZG9yX3BlcmwvJHtQRVJMVkVSU0lPTn0vYXV0by8qLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcGFuLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcGFuLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJiYmQyZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NwYW4uYmJjbGFzcwpAQCAtMCwwICsxLDU1IEBACisjCisjIFRoaXMgaXMgZm9yIHBlcmwgbW9kdWxlcyB0aGF0IHVzZSB0aGUgb2xkIE1ha2VmaWxlLlBMIGJ1aWxkIHN5c3RlbQorIworaW5oZXJpdCBjcGFuLWJhc2UgcGVybG5hdGl2ZQorCitFWFRSQV9DUEFORkxBR1MgPz0gIiIKK0VYVFJBX1BFUkxGTEFHUyA/PSAiIgorCisjIEVudiB2YXIgd2hpY2ggdGVsbHMgcGVybCBpZiBpdCBzaG91bGQgdXNlIGhvc3QgKG5vKSBvciB0YXJnZXQgKHllcykgc2V0dGluZ3MKK2V4cG9ydCBQRVJMQ09ORklHVEFSR0VUID0gIiR7QGlzX3RhcmdldChkKX0iCisKKyMgRW52IHZhciB3aGljaCB0ZWxscyBwZXJsIHdoZXJlIHRoZSBwZXJsIGluY2x1ZGUgZmlsZXMgYXJlCitleHBvcnQgUEVSTF9JTkMgPSAiJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfS9DT1JFIgorZXhwb3J0IFBFUkxfTElCID0gIiR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0iCitleHBvcnQgUEVSTF9BUkNITElCID0gIiR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0iCitleHBvcnQgUEVSTEhPU1RMSUIgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3BlcmwvJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0vIgorCitjcGFuX2RvX2NvbmZpZ3VyZSAoKSB7CisJZXhwb3J0IFBFUkw1TElCPSIke1BFUkxfQVJDSExJQn0iCisJeWVzICcnIHwgcGVybCAke0VYVFJBX1BFUkxGTEFHU30gTWFrZWZpbGUuUEwgJHtFWFRSQV9DUEFORkxBR1N9CisKKwkjIE1ha2VmaWxlLlBMcyBjYW4gZXhpdCB3aXRoIHN1Y2Nlc3Mgd2l0aG91dCBnZW5lcmF0aW5nIGEKKwkjIE1ha2VmaWxlLCBlLmcuIGluIGNhc2VzIG9mIG1pc3NpbmcgY29uZmlndXJlIHRpbWUKKwkjIGRlcGVuZGVuY2llcy4gVGhpcyBpcyBjb25zaWRlcmVkIGEgYmVzdCBwcmFjdGljZSBieQorCSMgY3BhbnRlc3RlcnMub3JnLiBTZWU6CisJIyAgKiBodHRwOi8vd2lraS5jcGFudGVzdGVycy5vcmcvd2lraS9DUEFOQXV0aG9yTm90ZXMKKwkjICAqIGh0dHA6Ly93d3cubm50cC5wZXJsLm9yZy9ncm91cC9wZXJsLnFhLzIwMDgvMDgvbXNnMTEyMzYuaHRtbAorCVsgLWUgTWFrZWZpbGUgXSB8fCBiYmZhdGFsICJObyBNYWtlZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IE1ha2VmaWxlLlBMIgorCisJaWYgWyAiJHtCVUlMRF9TWVN9IiAhPSAiJHtIT1NUX1NZU30iIF07IHRoZW4KKwkJLiAke1NUQUdJTkdfTElCRElSfSR7UEVSTF9PV05fRElSfS9wZXJsL2NvbmZpZy5zaAorCQkjIFVzZSBmaW5kIHNpbmNlIHRoZXJlIGNhbiBiZSBhIE1ha2VmaWxlIGdlbmVyYXRlZCBmb3IgZWFjaCBNYWtlZmlsZS5QTAorCQlmb3IgZiBpbiBgZmluZCAtbmFtZSBNYWtlZmlsZS5QTGA7IGRvCisJCQlmMj1gZWNobyAkZiB8IHNlZCAtZSAncy8uUEwvLydgCisJCQl0ZXN0IC1mICRmMiB8fCBjb250aW51ZQorCQkJc2VkIC1pIC1lICJzOlwoUEVSTF9BUkNITElCID0gXCkuKjpcMSR7UEVSTF9BUkNITElCfToiIFwKKwkJCQktZSAncy9wZXJsLnJlYWwvcGVybC8nIFwKKwkJCQktZSAic3xeXChDQ0ZMQUdTID0uKlwpfFwxICR7Q0ZMQUdTfXwiIFwKKwkJCQkkZjIKKwkJZG9uZQorCWZpCit9CisKK2NwYW5fZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSBQQVNUSFJVX0lOQz0iJHtDRkxBR1N9IiBMRD0iJHtDQ0xEfSIKK30KKworY3Bhbl9kb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIERFU1RESVI9IiR7RH0iIGluc3RhbGxfdmVuZG9yCisJZm9yIFBFUkxTQ1JJUFQgaW4gYGdyZXAgLXJJRWwgJyMhICoke2JpbmRpcn0vcGVybC1uYXRpdmUuKi9wZXJsJyAke0R9YDsgZG8KKwkJc2VkIC1pIC1lICdzfCR7YmluZGlyfS9wZXJsLW5hdGl2ZS4qL3Blcmx8L3Vzci9iaW4vZW52IG5hdGl2ZXBlcmx8JyAkUEVSTFNDUklQVAorCWRvbmUKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb25maWd1cmUgZG9fY29tcGlsZSBkb19pbnN0YWxsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcGFuX2J1aWxkLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcGFuX2J1aWxkLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY2NDhhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NwYW5fYnVpbGQuYmJjbGFzcwpAQCAtMCwwICsxLDM3IEBACisjCisjIFRoaXMgaXMgZm9yIHBlcmwgbW9kdWxlcyB0aGF0IHVzZSB0aGUgbmV3IEJ1aWxkLlBMIGJ1aWxkIHN5c3RlbQorIworaW5oZXJpdCBjcGFuLWJhc2UgcGVybG5hdGl2ZQorCitFWFRSQV9DUEFOX0JVSUxEX0ZMQUdTID89ICIiCisKKyMgRW52IHZhciB3aGljaCB0ZWxscyBwZXJsIGlmIGl0IHNob3VsZCB1c2UgaG9zdCAobm8pIG9yIHRhcmdldCAoeWVzKSBzZXR0aW5ncworZXhwb3J0IFBFUkxDT05GSUdUQVJHRVQgPSAiJHtAaXNfdGFyZ2V0KGQpfSIKK2V4cG9ydCBQRVJMX0FSQ0hMSUIgPSAiJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfSIKK2V4cG9ydCBMRCA9ICIke0NDTER9IgorCitjcGFuX2J1aWxkX2RvX2NvbmZpZ3VyZSAoKSB7CisJaWYgWyAiJHtAaXNfdGFyZ2V0KGQpfSIgPSAieWVzIiBdOyB0aGVuCisJCSMgYnVpbGQgZm9yIHRhcmdldAorCQkuICR7U1RBR0lOR19MSUJESVJ9L3BlcmwvY29uZmlnLnNoCisJZmkKKworCXBlcmwgQnVpbGQuUEwgLS1pbnN0YWxsZGlycyB2ZW5kb3IgXAorCQkJCS0tZGVzdGRpciAke0R9IFwKKwkJCQktLWluc3RhbGxfcGF0aCBhcmNoPSIke2xpYmRpcn0vcGVybCIgXAorCQkJCS0taW5zdGFsbF9wYXRoIHNjcmlwdD0ke2JpbmRpcn0gXAorCQkJCS0taW5zdGFsbF9wYXRoIGJpbj0ke2JpbmRpcn0gXAorCQkJCS0taW5zdGFsbF9wYXRoIGJpbmRvYz0ke21hbmRpcn0vbWFuMSBcCisJCQkJLS1pbnN0YWxsX3BhdGggbGliZG9jPSR7bWFuZGlyfS9tYW4zIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtFWFRSQV9DUEFOX0JVSUxEX0ZMQUdTfQorfQorCitjcGFuX2J1aWxkX2RvX2NvbXBpbGUgKCkgeworICAgICAgICBwZXJsIEJ1aWxkCit9CisKK2NwYW5fYnVpbGRfZG9faW5zdGFsbCAoKSB7CisJcGVybCBCdWlsZCBpbnN0YWxsCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY3Jvc3MtY2FuYWRpYW4uYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Nyb3NzLWNhbmFkaWFuLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwYTE2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Nyb3NzLWNhbmFkaWFuLmJiY2xhc3MKQEAgLTAsMCArMSwxODUgQEAKKyMKKyMgTk9URSAtIFdoZW4gdXNpbmcgdGhpcyBjbGFzcyB0aGUgdXNlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdAorIyBUUkFOU0xBVEVEX1RBUkdFVF9BUkNIIGlzIGFkZGVkIGludG8gUE4uIFRoaXMgZW5zdXJlcyB0aGF0IGlmIHRoZSBUQVJHRVRfQVJDSAorIyBpcyBjaGFuZ2VkLCBhbm90aGVyIG5hdGl2ZXNkayB4eHgtY2FuYWRpYW4tY3Jvc3MgY2FuIGJlIGluc3RhbGxlZAorIworCisKKyMgU0RLIHBhY2thZ2VzIGFyZSBidWlsdCBlaXRoZXIgZXhwbGljaXRseSBieSB0aGUgdXNlciwKKyMgb3IgaW5kaXJlY3RseSB2aWEgZGVwZW5kZW5jeS4gIE5vIG5lZWQgdG8gYmUgaW4gJ3dvcmxkJy4KK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorQ0xBU1NPVkVSUklERSA9ICJjbGFzcy1jcm9zcy1jYW5hZGlhbiIKK1NUQUdJTkdfQklORElSX1RPT0xDSEFJTiA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7U0RLX0FSQ0h9JHtTREtfVkVORE9SfS0ke1NES19PU306JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJfbmF0aXZlfS8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgorCisjCisjIFVwZGF0ZSBCQVNFX1BBQ0tBR0VfQVJDSCBhbmQgUEFDS0FHRV9BUkNIUworIworUEFDS0FHRV9BUkNIID0gIiR7U0RLX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSIKK0NBTkFESUFORVhUUkFPUyA9ICJsaW51eC11Y2xpYmMgbGludXgtbXVzbCIKK0NBTkFESUFORVhUUkFWRU5ET1IgPSAiIgorTU9ESUZZVE9TID8/PSAiMSIKK3B5dGhvbiAoKSB7CisgICAgYXJjaHMgPSBkLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpLnNwbGl0KCkKKyAgICBzZGthcmNocyA9IFtdCisgICAgZm9yIGFyY2ggaW4gYXJjaHM6CisgICAgICAgIHNka2FyY2hzLmFwcGVuZChhcmNoICsgJy0ke1NES1BLR1NVRkZJWH0nKQorICAgIGQuc2V0VmFyKCdQQUNLQUdFX0FSQ0hTJywgIiAiLmpvaW4oc2RrYXJjaHMpKQorCisgICAgIyBBbGxvdyB0aGUgZm9sbG93aW5nIGNvZGUgc2VnbWVudCB0byBiZSBkaXNhYmxlZCwgZS5nLiBtZXRhLWVudmlyb25tZW50CisgICAgaWYgZC5nZXRWYXIoIk1PRElGWVRPUyIsIFRydWUpICE9ICIxIjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBkLmdldFZhcigiVENMSUJDIiwgVHJ1ZSkgPT0gImJhcmVtZXRhbCI6CisgICAgICAgIHJldHVybgorCisgICAgdG9zID0gZC5nZXRWYXIoIlRBUkdFVF9PUyIsIFRydWUpCisgICAgd2hpdGVsaXN0ID0gW10KKyAgICBmb3IgdmFyaWFudCBpbiBbIiIsICJzcGUiLCAieDMyIiwgImVhYmkiLCAibjMyIl06CisgICAgICAgIGZvciBsaWJjIGluIFsiIiwgInVjbGliYyIsICJtdXNsIl06CisgICAgICAgICAgICBlbnRyeSA9ICJsaW51eCIKKyAgICAgICAgICAgIGlmIHZhcmlhbnQgYW5kIGxpYmM6CisgICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyeSArICItIiArIGxpYmMgKyB2YXJpYW50CisgICAgICAgICAgICBlbGlmIHZhcmlhbnQ6CisgICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyeSArICItZ251IiArIHZhcmlhbnQKKyAgICAgICAgICAgIGVsaWYgbGliYzoKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGVudHJ5ICsgIi0iICsgbGliYworICAgICAgICAgICAgd2hpdGVsaXN0LmFwcGVuZChlbnRyeSkKKyAgICBpZiB0b3Mgbm90IGluIHdoaXRlbGlzdDoKKyAgICAgICAgYmIuZmF0YWwoIkJ1aWxkaW5nIGNyb3NzLWNhbmRpYW4gZm9yIGFuIHVua25vd24gVEFSR0VUX1NZUyAoJXMpLCBwbGVhc2UgdXBkYXRlIGNyb3NzLWNhbmFkaWFuLmJiY2xhc3MiICUgZC5nZXRWYXIoIlRBUkdFVF9TWVMiLCBUcnVlKSkKKworICAgIGZvciBuIGluIFsiUFJPVklERVMiLCAiREVQRU5EUyJdOgorICAgICAgICBkLnNldFZhcihuLCBkLmdldFZhcihuLCBUcnVlKSkKKyAgICBkLnNldFZhcigiU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOIiwgZC5nZXRWYXIoIlNUQUdJTkdfQklORElSX1RPT0xDSEFJTiIsIFRydWUpKQorICAgIGZvciBwcmVmaXggaW4gWyJBUiIsICJBUyIsICJETExUT09MIiwgIkNDIiwgIkNYWCIsICJHQ0MiLCAiTEQiLCAiTElQTyIsICJOTSIsICJPQkpEVU1QIiwgIlJBTkxJQiIsICJTVFJJUCIsICJXSU5EUkVTIl06CisgICAgICAgIG4gPSBwcmVmaXggKyAiX0ZPUl9UQVJHRVQiCisgICAgICAgIGQuc2V0VmFyKG4sIGQuZ2V0VmFyKG4sIFRydWUpKQorICAgICMgVGhpcyBpcyBhIGJpdCB1Z2x5LiBXZSBuZWVkIHRvIHplcm8gTElCQy9BQkkgZXh0ZW5zaW9uIHdoaWNoIHdpbGwgY2hhbmdlIFRBUkdFVF9PUworICAgICMgaG93ZXZlciB3ZSBuZWVkIHRoZSBvbGQgdmFsdWUgaW4gc29tZSB2YXJpYWJsZXMuIFdlIGV4cGFuZCB0aG9zZSBoZXJlIGZpcnN0LgorICAgIHRhcmNoID0gZC5nZXRWYXIoIlRBUkdFVF9BUkNIIiwgVHJ1ZSkKKyAgICBpZiB0YXJjaCA9PSAieDg2XzY0IjoKKyAgICAgICAgZC5zZXRWYXIoIkxJQkNFWFRFTlNJT04iLCAiIikKKyAgICAgICAgZC5zZXRWYXIoIkFCSUVYVEVOU0lPTiIsICIiKQorICAgICAgICBkLmFwcGVuZFZhcigiQ0FOQURJQU5FWFRSQU9TIiwgIiBsaW51eC1nbnV4MzIgbGludXgtdWNsaWJjeDMyIGxpbnV4LW11c2x4MzIiKQorICAgIGVsaWYgdGFyY2ggPT0gInBvd2VycGMiOgorICAgICAgICAjIFBvd2VyUEMgY2FuIGJ1aWxkICJsaW51eCIgYW5kICJsaW51eC1nbnVzcGUiCisgICAgICAgIGQuc2V0VmFyKCJMSUJDRVhURU5TSU9OIiwgIiIpCisgICAgICAgIGQuc2V0VmFyKCJBQklFWFRFTlNJT04iLCAiIikKKyAgICAgICAgZC5hcHBlbmRWYXIoIkNBTkFESUFORVhUUkFPUyIsICIgbGludXgtZ251c3BlIGxpbnV4LXVjbGliY3NwZSBsaW51eC1tdXNsc3BlIikKKyAgICBlbGlmIHRhcmNoID09ICJtaXBzNjQiOgorICAgICAgICBkLmFwcGVuZFZhcigiQ0FOQURJQU5FWFRSQU9TIiwgIiBsaW51eC1nbnVuMzIgbGludXgtdWNsaWJjbjMyIGxpbnV4LW11c2xuMzIiKQorICAgIGlmIHRhcmNoID09ICJhcm0iOgorICAgICAgICBkLnNldFZhcigiVEFSR0VUX09TIiwgImxpbnV4LWdudWVhYmkiKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfT1MiLCAibGludXgiKQorCisgICAgIyBBbHNvIG5lZWQgdG8gaGFuZGxlIG11bHRpbGliIHRhcmdldCB2ZW5kb3JzCisgICAgdmVuZG9ycyA9IGQuZ2V0VmFyKCJDQU5BRElBTkVYVFJBVkVORE9SIiwgVHJ1ZSkKKyAgICBpZiBub3QgdmVuZG9yczoKKyAgICAgICAgdmVuZG9ycyA9IGFsbF9tdWx0aWxpYl90dW5lX3ZhbHVlcyhkLCAnVEFSR0VUX1ZFTkRPUicpCisgICAgb3JpZ3ZlbmRvciA9IGQuZ2V0VmFyKCJUQVJHRVRfVkVORE9SX01VTFRJTElCX09SSUdJTkFMIiwgVHJ1ZSkKKyAgICBpZiBvcmlndmVuZG9yOgorICAgICAgICBkLnNldFZhcigiVEFSR0VUX1ZFTkRPUiIsIG9yaWd2ZW5kb3IpCisgICAgICAgIGlmIG9yaWd2ZW5kb3Igbm90IGluIHZlbmRvcnMuc3BsaXQoKToKKyAgICAgICAgICAgIHZlbmRvcnMgPSBvcmlndmVuZG9yICsgIiAiICsgdmVuZG9ycworICAgIGQuc2V0VmFyKCJDQU5BRElBTkVYVFJBVkVORE9SIiwgdmVuZG9ycykKK30KK01VTFRJTUFDSF9UQVJHRVRfU1lTID0gIiR7UEFDS0FHRV9BUkNIfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK1NUQUdJTkdfRElSX0hPU1QgPSAiJHtTVEFHSU5HX0RJUn0vJHtIT1NUX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK1RPT0xDSEFJTl9PUFRJT05TID0gIiAtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUn0vJHtIT1NUX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK1BBVEhfYXBwZW5kID0gIjoke1RNUERJUn0vc3lzcm9vdHMvJHtIT1NUX0FSQ0h9LyR7YmluZGlyX2Nyb3NzfSIKK1BLR0hJU1RfRElSID0gIiR7VE1QRElSfS9wa2doaXN0b3J5LyR7SE9TVF9BUkNIfS0ke1NES1BLR1NVRkZJWH0ke0hPU1RfVkVORE9SfS0ke0hPU1RfT1N9LyIKKworSE9TVF9BUkNIID0gIiR7U0RLX0FSQ0h9IgorSE9TVF9WRU5ET1IgPSAiJHtTREtfVkVORE9SfSIKK0hPU1RfT1MgPSAiJHtTREtfT1N9IgorSE9TVF9QUkVGSVggPSAiJHtTREtfUFJFRklYfSIKK0hPU1RfQ0NfQVJDSCA9ICIke1NES19DQ19BUkNIfSIKK0hPU1RfTERfQVJDSCA9ICIke1NES19MRF9BUkNIfSIKK0hPU1RfQVNfQVJDSCA9ICIke1NES19BU19BUkNIfSIKKworI2Fzc2lnbiBEUEtHX0FSQ0gKK0RQS0dfQVJDSCA9ICIke1NES19BUkNIfSIKKworQ1BQRkxBR1MgPSAiJHtCVUlMRFNES19DUFBGTEFHU30iCitDRkxBR1MgPSAiJHtCVUlMRFNES19DRkxBR1N9IgorQ1hYRkxBR1MgPSAiJHtCVUlMRFNES19DRkxBR1N9IgorTERGTEFHUyA9ICIke0JVSUxEU0RLX0xERkxBR1N9IFwKKyAgICAgICAgICAgLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKyAgICAgICAgICAgLVdsLC1ycGF0aCwke2xpYmRpcn0vLi4gIgorCitERVBFTkRTX0dFVFRFWFQgPSAiZ2V0dGV4dC1uYXRpdmUgbmF0aXZlc2RrLWdldHRleHQiCisKKyMKKyMgV2UgbmVlZCBjaHJwYXRoID49IDAuMTQgdG8gZW5zdXJlIHdlIGNhbiBkZWFsIHdpdGggMzIgYW5kIDY0IGJpdAorIyBiaW5hcmllcworIworREVQRU5EU19hcHBlbmQgPSAiIGNocnBhdGgtcmVwbGFjZW1lbnQtbmF0aXZlIgorRVhUUkFOQVRJVkVQQVRIICs9ICJjaHJwYXRoLW5hdGl2ZSIKKworIyBQYXRoIG1hbmdsaW5nIG5lZWRlZCBieSB0aGUgY3Jvc3MgcGFja2FnaW5nCisjIE5vdGUgdGhhdCB3ZSB1c2UgOj0gaGVyZSB0byBlbnN1cmUgdGhhdCBsaWJkaXIgYW5kIGluY2x1ZGVkaXIgYXJlCisjIHRhcmdldCBwYXRocy4KK3RhcmdldF9iYXNlX3ByZWZpeCA6PSAiJHtiYXNlX3ByZWZpeH0iCit0YXJnZXRfcHJlZml4IDo9ICIke3ByZWZpeH0iCit0YXJnZXRfZXhlY19wcmVmaXggOj0gIiR7ZXhlY19wcmVmaXh9IgordGFyZ2V0X2Jhc2VfbGliZGlyID0gIiR7dGFyZ2V0X2Jhc2VfcHJlZml4fS8ke2Jhc2VsaWJ9IgordGFyZ2V0X2xpYmRpciA9ICIke3RhcmdldF9leGVjX3ByZWZpeH0vJHtiYXNlbGlifSIKK3RhcmdldF9pbmNsdWRlZGlyIDo9ICIke2luY2x1ZGVkaXJ9IgorCisjIENoYW5nZSB0byBwbGFjZSBmaWxlcyBpbiBTREtQQVRICitiYXNlX3ByZWZpeCA9ICIke1NES1BBVEhOQVRJVkV9IgorcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9IgorZXhlY19wcmVmaXggPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30iCitiaW5kaXIgPSAiJHtleGVjX3ByZWZpeH0vYmluLyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCitzYmluZGlyID0gIiR7YmluZGlyfSIKK2Jhc2VfYmluZGlyID0gIiR7YmluZGlyfSIKK2Jhc2Vfc2JpbmRpciA9ICIke2JpbmRpcn0iCitsaWJkaXIgPSAiJHtleGVjX3ByZWZpeH0vbGliLyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCitsaWJleGVjZGlyID0gIiR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMvJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKKworRklMRVNfJHtQTn0gPSAiJHtwcmVmaXh9IgorRklMRVNfJHtQTn0tZGJnICs9ICIke3ByZWZpeH0vLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtwcmVmaXh9L2Jpbi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICIKKworZXhwb3J0IFBLR19DT05GSUdfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2xheW91dF9saWJkaXJ9L3BrZ2NvbmZpZyIKK2V4cG9ydCBQS0dfQ09ORklHX1NZU1JPT1RfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0iCisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorZG9fcGFja2FnZWRhdGFbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorCitVU0VfTkxTID0gIiR7U0RLVVNFX05MU30iCisKKyMgV2UgaGF2ZSB0byB1cyBUQVJHRVRfQVJDSCBidXQgd2UgY2FyZSBhYm91dCB0aGUgYWJzb2x1dGUgdmFsdWUKKyMgYW5kIG5vdCBhbnkgcGFydGljdWxhciB0dW5lIHRoYXQgaXMgZW5hYmxlZC4KK1RBUkdFVF9BUkNIW3ZhcmRlcHNleGNsdWRlXSA9ICJUVU5FX0FSQ0giCisKKyMgSWYgTUxQUkVGSVggaXMgc2V0IGJ5IG11bHRpbGliIGNvZGUsIHNobGlicworIyBwb2ludHMgdG8gdGhlIHdyb25nIHBsYWNlIHNvIGZvcmNlIGl0CitTSExJQlNESVJTID0gIiR7UEtHREFUQV9ESVJ9L25hdGl2ZXNkay1zaGxpYnMyIgorU0hMSUJTV09SS0RJUiA9ICIke1BLR0RBVEFfRElSfS9uYXRpdmVzZGstc2hsaWJzMiIKKworY3Jvc3NfY2FuYWRpYW5fYmluZGlybGlua3MgKCkgeworCWZvciBpIGluIGxpbnV4ICR7Q0FOQURJQU5FWFRSQU9TfQorCWRvCisJCWZvciB2IGluICR7Q0FOQURJQU5FWFRSQVZFTkRPUn0KKwkJZG8KKwkJCWQ9JHtEfSR7YmluZGlyfS8uLi8ke1RBUkdFVF9BUkNIfSR2LSRpCisJCQlpZiBbIC1kICRkIF07CisJCQl0aGVuCisJCQkgICAgY29udGludWUKKwkJCWZpCisJCQlpbnN0YWxsIC1kICRkCisJCQlmb3IgaiBpbiBgbHMgJHtEfSR7YmluZGlyfWAKKwkJCWRvCisJCQkJcD0ke1RBUkdFVF9BUkNIfSR2LSRpLWBlY2hvICRqIHwgc2VkIC1lIHMsJHtUQVJHRVRfUFJFRklYfSwsYAorCQkJCWxuIC1zIC4uLyR7VEFSR0VUX1NZU30vJGogJGQvJHAKKwkJCWRvbmUKKwkJZG9uZQorICAgICAgIGRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Nyb3NzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcm9zcy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYWI1YjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcm9zcy5iYmNsYXNzCkBAIC0wLDAgKzEsNzcgQEAKK2luaGVyaXQgcmVsb2NhdGFibGUKKworIyBDcm9zcyBwYWNrYWdlcyBhcmUgYnVpbHQgaW5kaXJlY3RseSB2aWEgZGVwZW5kZW5jeSwKKyMgbm8gbmVlZCBmb3IgdGhlbSB0byBiZSBhIGRpcmVjdCB0YXJnZXQgb2YgJ3dvcmxkJworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK0NMQVNTT1ZFUlJJREUgPSAiY2xhc3MtY3Jvc3MiCitQQUNLQUdFUyA9ICIiCitQQUNLQUdFU19EWU5BTUlDID0gIiIKK1BBQ0tBR0VTX0RZTkFNSUNfY2xhc3MtbmF0aXZlID0gIiIKKworSE9TVF9BUkNIID0gIiR7QlVJTERfQVJDSH0iCitIT1NUX1ZFTkRPUiA9ICIke0JVSUxEX1ZFTkRPUn0iCitIT1NUX09TID0gIiR7QlVJTERfT1N9IgorSE9TVF9QUkVGSVggPSAiJHtCVUlMRF9QUkVGSVh9IgorSE9TVF9DQ19BUkNIID0gIiR7QlVJTERfQ0NfQVJDSH0iCitIT1NUX0xEX0FSQ0ggPSAiJHtCVUlMRF9MRF9BUkNIfSIKK0hPU1RfQVNfQVJDSCA9ICIke0JVSUxEX0FTX0FSQ0h9IgorCitTVEFHSU5HX0RJUl9IT1NUID0gIiR7U1RBR0lOR19ESVJ9LyR7SE9TVF9BUkNIfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK1BBQ0tBR0VfQVJDSCA9ICIke0JVSUxEX0FSQ0h9IgorCitNVUxUSU1BQ0hfVEFSR0VUX1NZUyA9ICIke1BBQ0tBR0VfQVJDSH0ke0JVSUxEX1ZFTkRPUn0tJHtCVUlMRF9PU30iCisKK2V4cG9ydCBQS0dfQ09ORklHX0RJUiA9ICIke2V4ZWNfcHJlZml4fS9saWIvcGtnY29uZmlnIgorZXhwb3J0IFBLR19DT05GSUdfU1lTUk9PVF9ESVIgPSAiIgorCitDUFBGTEFHUyA9ICIke0JVSUxEX0NQUEZMQUdTfSIKK0NGTEFHUyA9ICIke0JVSUxEX0NGTEFHU30iCitDWFhGTEFHUyA9ICIke0JVSUxEX0NGTEFHU30iCitMREZMQUdTID0gIiR7QlVJTERfTERGTEFHU30iCitMREZMQUdTX2J1aWxkLWRhcndpbiA9ICItTCR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSIKKworVE9PTENIQUlOX09QVElPTlMgPSAiIgorCitERVBFTkRTX0dFVFRFWFQgPSAiZ2V0dGV4dC1uYXRpdmUiCisKKyMgUGF0aCBtYW5nbGluZyBuZWVkZWQgYnkgdGhlIGNyb3NzIHBhY2thZ2luZworIyBOb3RlIHRoYXQgd2UgdXNlIDo9IGhlcmUgdG8gZW5zdXJlIHRoYXQgbGliZGlyIGFuZCBpbmNsdWRlZGlyIGFyZQorIyB0YXJnZXQgcGF0aHMuCit0YXJnZXRfYmFzZV9wcmVmaXggOj0gIiR7YmFzZV9wcmVmaXh9IgordGFyZ2V0X3ByZWZpeCA6PSAiJHtwcmVmaXh9IgordGFyZ2V0X2V4ZWNfcHJlZml4IDo9ICIke2V4ZWNfcHJlZml4fSIKK3RhcmdldF9iYXNlX2xpYmRpciA9ICIke3RhcmdldF9iYXNlX3ByZWZpeH0vJHtiYXNlbGlifSIKK3RhcmdldF9saWJkaXIgPSAiJHt0YXJnZXRfZXhlY19wcmVmaXh9LyR7YmFzZWxpYn0iCit0YXJnZXRfaW5jbHVkZWRpciA6PSAiJHtpbmNsdWRlZGlyfSIKKworIyBPdmVycmlkZXMgZm9yIHBhdGhzCitDUk9TU19UQVJHRVRfU1lTX0RJUiA9ICIke1RBUkdFVF9TWVN9IgorcHJlZml4ID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0iCitiYXNlX3ByZWZpeCA9ICIke1NUQUdJTkdfRElSX05BVElWRX0iCitleGVjX3ByZWZpeCA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9IgorYmluZGlyID0gIiR7ZXhlY19wcmVmaXh9L2Jpbi8ke0NST1NTX1RBUkdFVF9TWVNfRElSfSIKK3NiaW5kaXIgPSAiJHtiaW5kaXJ9IgorYmFzZV9iaW5kaXIgPSAiJHtiaW5kaXJ9IgorYmFzZV9zYmluZGlyID0gIiR7YmluZGlyfSIKK2xpYmRpciA9ICIke2V4ZWNfcHJlZml4fS9saWIvJHtDUk9TU19UQVJHRVRfU1lTX0RJUn0iCitsaWJleGVjZGlyID0gIiR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMvJHtDUk9TU19UQVJHRVRfU1lTX0RJUn0iCisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtTWVNST09UX0RFU1RESVJ9LyR7U1RBR0lOR19ESVJfTkFUSVZFfS8iCitkb19wb3B1bGF0ZV9zeXNyb290W3N0YW1wLWV4dHJhLWluZm9dID0gIiIKK2RvX3BhY2thZ2VkYXRhW3N0YW1wLWV4dHJhLWluZm9dID0gIiIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCit9CisKK1VTRV9OTFMgPSAibm8iCisKK2RlbHRhc2sgcGFja2FnZQorZGVsdGFzayBwYWNrYWdlZGF0YQorZGVsdGFzayBwYWNrYWdlX3FhCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfaXBrCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfZGViCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfcnBtCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Nyb3Nzc2RrLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcm9zc3Nkay5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZDVjZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcm9zc3Nkay5iYmNsYXNzCkBAIC0wLDAgKzEsMzYgQEAKK2luaGVyaXQgY3Jvc3MKKworQ0xBU1NPVkVSUklERSA9ICJjbGFzcy1jcm9zc3NkayIKK01BQ0hJTkVPVkVSUklERVMgPSAiIgorUEFDS0FHRV9BUkNIID0gIiR7U0RLX0FSQ0h9IgorcHl0aG9uICgpIHsKKwkjIHNldCBUVU5FX1BLR0FSQ0ggdG8gU0RLX0FSQ0gKKwlkLnNldFZhcignVFVORV9QS0dBUkNIJywgZC5nZXRWYXIoJ1NES19BUkNIJywgVHJ1ZSkpCit9CisKK1NUQUdJTkdfRElSX1RBUkdFVCA9ICIke1NUQUdJTkdfRElSfS8ke1NES19BUkNIfS0ke1NES1BLR1NVRkZJWH0ke1NES19WRU5ET1J9LSR7U0RLX09TfSIKK1NUQUdJTkdfQklORElSX1RPT0xDSEFJTiA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCisKK1RBUkdFVF9BUkNIID0gIiR7U0RLX0FSQ0h9IgorVEFSR0VUX1ZFTkRPUiA9ICIke1NES19WRU5ET1J9IgorVEFSR0VUX09TID0gIiR7U0RLX09TfSIKK1RBUkdFVF9QUkVGSVggPSAiJHtTREtfUFJFRklYfSIKK1RBUkdFVF9DQ19BUkNIID0gIiR7U0RLX0NDX0FSQ0h9IgorVEFSR0VUX0xEX0FSQ0ggPSAiJHtTREtfTERfQVJDSH0iCitUQVJHRVRfQVNfQVJDSCA9ICIke1NES19BU19BUkNIfSIKK1RBUkdFVF9GUFUgPSAiIgorCit0YXJnZXRfbGliZGlyID0gIiR7U0RLUEFUSE5BVElWRX0ke2xpYmRpcl9uYXRpdmVzZGt9IgordGFyZ2V0X2luY2x1ZGVkaXIgPSAiJHtTREtQQVRITkFUSVZFfSR7aW5jbHVkZWRpcl9uYXRpdmVzZGt9IgordGFyZ2V0X2Jhc2VfbGliZGlyID0gIiR7U0RLUEFUSE5BVElWRX0ke2Jhc2VfbGliZGlyX25hdGl2ZXNka30iCit0YXJnZXRfcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9IgordGFyZ2V0X2V4ZWNfcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9IgorYmFzZWxpYiA9ICJsaWIiCisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorZG9fcGFja2FnZWRhdGFbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorCisjIE5lZWQgdG8gZm9yY2UgdGhpcyB0byBlbnN1cmUgY29uc2l0ZW5jeSBhY2Nyb3NzIGFyY2hpdGVjdHVyZXMKK0VYVFJBX09FQ09ORl9HQ0NfRkxPQVQgPSAiIgorCitVU0VfTkxTID0gIm5vIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGViaWFuLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kZWJpYW4uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjY5NzlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGViaWFuLmJiY2xhc3MKQEAgLTAsMCArMSwxNDEgQEAKKyMgRGViaWFuIHBhY2thZ2UgcmVuYW1pbmcgb25seSBvY2N1cnMgd2hlbiBhIHBhY2thZ2UgaXMgYnVpbHQKKyMgV2UgdGhlcmVmb3JlIGhhdmUgdG8gbWFrZSBzdXJlIHdlIGJ1aWxkIGFsbCBydW50aW1lIHBhY2thZ2VzCisjIGJlZm9yZSBidWlsZGluZyB0aGUgY3VycmVudCBwYWNrYWdlIHRvIG1ha2UgdGhlIHBhY2thZ2VzIHJ1bnRpbWUKKyMgZGVwZW5kcyBhcmUgY29ycmVjdAorIworIyBDdXN0b20gbGlicmFyeSBwYWNrYWdlIG5hbWVzIGNhbiBiZSBkZWZpbmVkIHNldHRpbmcKKyMgREVCSUFOTkFNRV8gKyBwa2duYW1lIHRvIHRoZSBkZXNpcmVkIG5hbWUuCisjCisjIEJldHRlciBleHByZXNzZWQgYXMgZW5zdXJlIGFsbCBSREVQRU5EUyBwYWNrYWdlIGJlZm9yZSB3ZSBwYWNrYWdlCisjIFRoaXMgbWVhbnMgd2UgY2FuJ3QgaGF2ZSBjaXJjdWxhciBSREVQRU5EUy9SUkVDT01NRU5EUworCitBVVRPX0xJQk5BTUVfUEtHUyA9ICIke1BBQ0tBR0VTfSIKKworaW5oZXJpdCBwYWNrYWdlCisKK0RFQklBTlJERVAgPSAiZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX2lwa1tyZGVwdGFza10gPSAiJHtERUJJQU5SREVQfSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW3JkZXB0YXNrXSA9ICIke0RFQklBTlJERVB9IgorZG9fcGFja2FnZV93cml0ZV90YXJbcmRlcHRhc2tdID0gIiR7REVCSUFOUkRFUH0iCitkb19wYWNrYWdlX3dyaXRlX3JwbVtyZGVwdGFza10gPSAiJHtERUJJQU5SREVQfSIKKworcHl0aG9uICgpIHsKKyAgICBpZiBub3QgZC5nZXRWYXIoIlBBQ0tBR0VTIiwgVHJ1ZSk6CisgICAgICAgIGQuc2V0VmFyKCJERUJJQU5SREVQIiwgIiIpCit9CisKK3B5dGhvbiBkZWJpYW5fcGFja2FnZV9uYW1lX2hvb2sgKCkgeworICAgIGltcG9ydCBnbG9iLCBjb3B5LCBzdGF0LCBlcnJubywgcmUKKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGJpbl9yZSA9IHJlLmNvbXBpbGUoIi4qL3M/IiArIG9zLnBhdGguYmFzZW5hbWUoZC5nZXRWYXIoImJpbmRpciIsIFRydWUpKSArICIkIikKKyAgICBsaWJfcmUgPSByZS5jb21waWxlKCIuKi8iICsgb3MucGF0aC5iYXNlbmFtZShkLmdldFZhcigibGliZGlyIiwgVHJ1ZSkpICsgIiQiKQorICAgIHNvX3JlID0gcmUuY29tcGlsZSgibGliLipcLnNvIikKKworICAgIGRlZiBzb2NydW5jaChzKToKKyAgICAgICAgcyA9IHMubG93ZXIoKS5yZXBsYWNlKCdfJywgJy0nKQorICAgICAgICBtID0gcmUubWF0Y2goIl4oLiopKC4pXC5zb1wuKC4qKSQiLCBzKQorICAgICAgICBpZiBtIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpZiBtLmdyb3VwKDIpIGluICcwMTIzNDU2Nzg5JzoKKyAgICAgICAgICAgIGJpbiA9ICclcyVzLSVzJyAlIChtLmdyb3VwKDEpLCBtLmdyb3VwKDIpLCBtLmdyb3VwKDMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmluID0gbS5ncm91cCgxKSArIG0uZ3JvdXAoMikgKyBtLmdyb3VwKDMpCisgICAgICAgIGRldiA9IG0uZ3JvdXAoMSkgKyBtLmdyb3VwKDIpCisgICAgICAgIHJldHVybiAoYmluLCBkZXYpCisKKyAgICBkZWYgaXNleGVjKHBhdGgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gb3Muc3RhdChwYXRoKQorICAgICAgICBleGNlcHQgKG9zLmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICByZXR1cm4gKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JRVhFQykKKworICAgIGRlZiBhZGRfcnByb3ZpZGVzKHBrZywgZCk6CisgICAgICAgIG5ld3BrZyA9IGQuZ2V0VmFyKCdQS0dfJyArIHBrZywgRmFsc2UpCisgICAgICAgIGlmIG5ld3BrZyBhbmQgbmV3cGtnICE9IHBrZzoKKyAgICAgICAgICAgIHByb3ZzID0gKGQuZ2V0VmFyKCdSUFJPVklERVNfJyArIHBrZywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgICAgIGlmIHBrZyBub3QgaW4gcHJvdnM6CisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ1JQUk9WSURFU18nICsgcGtnLCAiICIgKyBwa2cgKyAiICg9IiArIGQuZ2V0VmFyKCJQS0dWIiwgVHJ1ZSkgKyAiKSIpCisKKyAgICBkZWYgYXV0b19saWJuYW1lKHBhY2thZ2VzLCBvcmlnX3BrZyk6CisgICAgICAgIHNvbmFtZXMgPSBbXQorICAgICAgICBoYXNfYmlucyA9IDAKKyAgICAgICAgaGFzX2xpYnMgPSAwCisgICAgICAgIGZvciBmaWxlIGluIHBrZ2ZpbGVzW29yaWdfcGtnXToKKyAgICAgICAgICAgIHJvb3QgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZSkKKyAgICAgICAgICAgIGlmIGJpbl9yZS5tYXRjaChyb290KToKKyAgICAgICAgICAgICAgICBoYXNfYmlucyA9IDEKKyAgICAgICAgICAgIGlmIGxpYl9yZS5tYXRjaChyb290KToKKyAgICAgICAgICAgICAgICBoYXNfbGlicyA9IDEKKyAgICAgICAgICAgICAgICBpZiBzb19yZS5tYXRjaChvcy5wYXRoLmJhc2VuYW1lKGZpbGUpKToKKyAgICAgICAgICAgICAgICAgICAgY21kID0gKGQuZ2V0VmFyKCdUQVJHRVRfUFJFRklYJywgVHJ1ZSkgb3IgIiIpICsgIm9iamR1bXAgLXAgIiArIGZpbGUgKyAiIDI+L2Rldi9udWxsIgorICAgICAgICAgICAgICAgICAgICBmZCA9IG9zLnBvcGVuKGNtZCkKKyAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBmZC5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJccytTT05BTUVccysoW15cc10qKSIsIGwpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtIGFuZCBub3QgbS5ncm91cCgxKSBpbiBzb25hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbmFtZXMuYXBwZW5kKG0uZ3JvdXAoMSkpCisKKyAgICAgICAgYmIuZGVidWcoMSwgJ0xJQk5BTUVTOiBwa2cgJXMgbGlicyAlZCBiaW5zICVkIHNvbmFtZXMgJXMnICUgKG9yaWdfcGtnLCBoYXNfbGlicywgaGFzX2JpbnMsIHNvbmFtZXMpKQorICAgICAgICBzb25hbWUgPSBOb25lCisgICAgICAgIGlmIGxlbihzb25hbWVzKSA9PSAxOgorICAgICAgICAgICAgc29uYW1lID0gc29uYW1lc1swXQorICAgICAgICBlbGlmIGxlbihzb25hbWVzKSA+IDE6CisgICAgICAgICAgICBsZWFkID0gZC5nZXRWYXIoJ0xFQURfU09OQU1FJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGxlYWQ6CisgICAgICAgICAgICAgICAgciA9IHJlLmNvbXBpbGUobGVhZCkKKyAgICAgICAgICAgICAgICBmaWx0ZXJlZCA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHMgaW4gc29uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgaWYgci5tYXRjaChzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLmFwcGVuZChzKQorICAgICAgICAgICAgICAgIGlmIGxlbihmaWx0ZXJlZCkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgc29uYW1lID0gZmlsdGVyZWRbMF0KKyAgICAgICAgICAgICAgICBlbGlmIGxlbihmaWx0ZXJlZCkgPiAxOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJNdWx0aXBsZSBtYXRjaGVzICglcykgZm9yIExFQURfU09OQU1FICclcyciICUgKCIsICIuam9pbihmaWx0ZXJlZCksIGxlYWQpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIk11bHRpcGxlIGxpYnJhcmllcyAoJXMpIGZvdW5kLCBidXQgTEVBRF9TT05BTUUgJyVzJyBkb2Vzbid0IG1hdGNoIGFueSBvZiB0aGVtIiAlICgiLCAiLmpvaW4oc29uYW1lcyksIGxlYWQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJNdWx0aXBsZSBsaWJyYXJpZXMgKCVzKSBmb3VuZCBhbmQgTEVBRF9TT05BTUUgbm90IGRlZmluZWQiICUgIiwgIi5qb2luKHNvbmFtZXMpKQorCisgICAgICAgIGlmIGhhc19saWJzIGFuZCBub3QgaGFzX2JpbnMgYW5kIHNvbmFtZToKKyAgICAgICAgICAgIHNvbmFtZV9yZXN1bHQgPSBzb2NydW5jaChzb25hbWUpCisgICAgICAgICAgICBpZiBzb25hbWVfcmVzdWx0OgorICAgICAgICAgICAgICAgIChwa2duYW1lLCBkZXZuYW1lKSA9IHNvbmFtZV9yZXN1bHQKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIChkLmdldFZhcignUEtHXycgKyBwa2csIEZhbHNlKSBvciBkLmdldFZhcignREVCSUFOX05PQVVUT05BTUVfJyArIHBrZywgRmFsc2UpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9ycHJvdmlkZXMocGtnLCBkKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZGViaWFuX3BuID0gZC5nZXRWYXIoJ0RFQklBTk5BTUVfJyArIHBrZywgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIGlmIGRlYmlhbl9wbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BrZyA9IGRlYmlhbl9wbgorICAgICAgICAgICAgICAgICAgICBlbGlmIHBrZyA9PSBvcmlnX3BrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BrZyA9IHBrZ25hbWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BrZyA9IHBrZy5yZXBsYWNlKG9yaWdfcGtnLCBkZXZuYW1lLCAxKQorICAgICAgICAgICAgICAgICAgICBtbHByZT1kLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBpZiBtbHByZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdwa2cuZmluZChtbHByZSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdwa2cgPSBtbHByZSArIG5ld3BrZworICAgICAgICAgICAgICAgICAgICBpZiBuZXdwa2cgIT0gcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoJ1BLR18nICsgcGtnLCBuZXdwa2cpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRfcnByb3ZpZGVzKHBrZywgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZF9ycHJvdmlkZXMob3JpZ19wa2csIGQpCisKKyAgICAjIHJldmVyc2VkIHNvcnQgaXMgbmVlZGVkIHdoZW4gc29tZSBwYWNrYWdlIGlzIHN1YnN0cmluZyBvZiBhbm90aGVyCisgICAgIyBpZSBpbiBuY3Vyc2VzIHdlIGdldCB3aXRob3V0IHJldmVyc2Ugc29ydDogCisgICAgIyBERUJVRzogTElCTkFNRVM6IHBrZ25hbWUgbGlidGljNSBkZXZuYW1lIGxpYnRpYyBwa2cgbmN1cnNlcy1saWJ0aWMgb3JpZ19wa2cgbmN1cnNlcy1saWJ0aWMgZGViaWFuX3BuIE5vbmUgbmV3cGtnIGxpYnRpYzUKKyAgICAjIGFuZCBsYXRlcgorICAgICMgREVCVUc6IExJQk5BTUVTOiBwa2duYW1lIGxpYnRpYzUgZGV2bmFtZSBsaWJ0aWMgcGtnIG5jdXJzZXMtbGlidGljdyBvcmlnX3BrZyBuY3Vyc2VzLWxpYnRpYyBkZWJpYW5fcG4gTm9uZSBuZXdwa2cgbGlidGljdworICAgICMgc28gd2UgbmVlZCB0byBoYW5kbGUgbmN1cnNlcy1saWJ0aWN3LT5saWJ0aWN3NSBiZWZvcmUgbmN1cnNlcy1saWJ0aWMtPmxpYnRpYzUKKyAgICBmb3IgcGtnIGluIHNvcnRlZCgoZC5nZXRWYXIoJ0FVVE9fTElCTkFNRV9QS0dTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCksIHJldmVyc2U9VHJ1ZSk6CisgICAgICAgIGF1dG9fbGlibmFtZShwYWNrYWdlcywgcGtnKQorfQorCitFWFBPUlRfRlVOQ1RJT05TIHBhY2thZ2VfbmFtZV9ob29rCisKK0RFQklBTl9OQU1FUyA9ICIxIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kZXBsb3kuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2RlcGxveS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZjVlNGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kZXBsb3kuYmJjbGFzcwpAQCAtMCwwICsxLDEwIEBACitERVBMT1lESVIgPSAiJHtXT1JLRElSfS9kZXBsb3ktJHtQTn0iCitTU1RBVEVUQVNLUyArPSAiZG9fZGVwbG95IgorZG9fZGVwbG95W3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7REVQTE9ZRElSfSIKK2RvX2RlcGxveVtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtERVBMT1lfRElSX0lNQUdFfSIKKworcHl0aG9uIGRvX2RlcGxveV9zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX2RlcGxveV9zZXRzY2VuZQorZG9fZGVwbG95W2RpcnNdID0gIiR7REVQTE9ZRElSfSAke0J9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGV2c2hlbGwuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2RldnNoZWxsLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ1MTQzNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2RldnNoZWxsLmJiY2xhc3MKQEAgLTAsMCArMSwxNTYgQEAKK2luaGVyaXQgdGVybWluYWwKKworREVWU0hFTEwgPSAiJHtTSEVMTH0iCisKK3B5dGhvbiBkb19kZXZzaGVsbCAoKSB7CisgICAgaWYgZC5nZXRWYXJGbGFnKCJkb19kZXZzaGVsbCIsICJtYW51YWxmYWtlcm9vdCIpOgorICAgICAgIGQucHJlcGVuZFZhcigiREVWU0hFTEwiLCAicHNldWRvICIpCisgICAgICAgZmFrZWVudiA9IGQuZ2V0VmFyKCJGQUtFUk9PVEVOViIsIFRydWUpLnNwbGl0KCkKKyAgICAgICBmb3IgZiBpbiBmYWtlZW52OgorICAgICAgICAgICAgayA9IGYuc3BsaXQoIj0iKQorICAgICAgICAgICAgZC5zZXRWYXIoa1swXSwga1sxXSkgICAgICAgICAgIAorICAgICAgICAgICAgZC5hcHBlbmRWYXIoIk9FX1RFUk1JTkFMX0VYUE9SVFMiLCAiICIgKyBrWzBdKQorICAgICAgIGQuZGVsVmFyRmxhZygiZG9fZGV2c2hlbGwiLCAiZmFrZXJvb3QiKQorCisgICAgb2VfdGVybWluYWwoZC5nZXRWYXIoJ0RFVlNIRUxMJywgVHJ1ZSksICdPcGVuRW1iZWRkZWQgRGV2ZWxvcGVyIFNoZWxsJywgZCkKK30KKworYWRkdGFzayBkZXZzaGVsbCBhZnRlciBkb19wYXRjaAorCisjIFRoZSBkaXJlY3RvcnkgdGhhdCB0aGUgdGVybWluYWwgc3RhcnRzIGluCitERVZTSEVMTF9TVEFSVERJUiA/PSAiJHtTfSIKK2RvX2RldnNoZWxsW2RpcnNdID0gIiR7REVWU0hFTExfU1RBUlRESVJ9IgorZG9fZGV2c2hlbGxbbm9zdGFtcF0gPSAiMSIKKworIyBkZXZzaGVsbCBhbmQgZmFrZXJvb3QvcHNldWRvIG5lZWQgY2FyZWZ1bCBoYW5kbGluZyBzaW5jZSBvbmx5IHRoZSBmaW5hbAorIyBjb21tYW5kIHNob3VsZCBydW4gdW5kZXIgZmFrZXJvb3QgZW11bGF0aW9uLCBhbnkgWCBjb25uZWN0aW9uIHNob3VsZAorIyBiZSBkb25lIGFzIHRoZSBub3JtYWwgdXNlci4gV2UgdGhlcmZvcmUgY2FyZWZ1bGx5IGNvbnN0cnVjdCB0aGUgZW52aW9ubWVudAorIyBtYW51YWxseQorcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhckZsYWcoImRvX2RldnNoZWxsIiwgImZha2Vyb290Iik6CisgICAgICAgIyBXZSBuZWVkIHRvIHNpZ25hbCBvdXIgY29kZSB0aGF0IHdlIHdhbnQgZmFrZXJvb3QgaG93ZXZlciB3ZQorICAgICAgICMgY2FuJ3QgbWFuaXB1bGF0ZSB0aGUgZW52aXJvbm1lbnQgYW5kIHZhcmlhYmxlcyBoZXJlIHlldCAoc2VlIFlPQ1RPICM0Nzk1KQorICAgICAgIGQuc2V0VmFyRmxhZygiZG9fZGV2c2hlbGwiLCAibWFudWFsZmFrZXJvb3QiLCAiMSIpCisgICAgICAgZC5kZWxWYXJGbGFnKCJkb19kZXZzaGVsbCIsICJmYWtlcm9vdCIpCit9IAorCitkZWYgZGV2cHlzaGVsbChkKToKKworICAgIGltcG9ydCBjb2RlCisgICAgaW1wb3J0IHNlbGVjdAorICAgIGltcG9ydCBzaWduYWwKKyAgICBpbXBvcnQgdGVybWlvcworCisgICAgbSwgcyA9IG9zLm9wZW5wdHkoKQorICAgIHNuYW1lID0gb3MudHR5bmFtZShzKQorCisgICAgZGVmIG5vZWNob2ljYW5vbihmZCk6CisgICAgICAgIG9sZCA9IHRlcm1pb3MudGNnZXRhdHRyKGZkKQorICAgICAgICBvbGRbM10gPSBvbGRbM10gJn4gdGVybWlvcy5FQ0hPICZ+IHRlcm1pb3MuSUNBTk9OCisgICAgICAgICMgJn4gdGVybWlvcy5JU0lHCisgICAgICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0ZXJtaW9zLlRDU0FEUkFJTiwgb2xkKQorICAgIAorICAgICMgTm8gZWNobyBvciBidWZmZXJpbmcgb3ZlciB0aGUgcHR5CisgICAgbm9lY2hvaWNhbm9uKHMpCisKKyAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICBpZiBwaWQ6CisgICAgICAgIG9zLmNsb3NlKG0pCisgICAgICAgIG9lX3Rlcm1pbmFsKCJvZXB5ZGV2c2hlbGwtaW50ZXJuYWwucHkgJXMgJWQiICUgKHNuYW1lLCBwaWQpLCAnT3BlbkVtYmVkZGVkIERldmVsb3BlciBQeVNoZWxsJywgZCkKKyAgICAgICAgb3MuX2V4aXQoMCkKKyAgICBlbHNlOgorICAgICAgICBvcy5jbG9zZShzKQorCisgICAgICAgIG9zLmR1cDIobSwgc3lzLnN0ZGluLmZpbGVubygpKQorICAgICAgICBvcy5kdXAyKG0sIHN5cy5zdGRvdXQuZmlsZW5vKCkpCisgICAgICAgIG9zLmR1cDIobSwgc3lzLnN0ZGVyci5maWxlbm8oKSkKKworICAgICAgICBzeXMuc3Rkb3V0ID0gb3MuZmRvcGVuKHN5cy5zdGRvdXQuZmlsZW5vKCksICd3JywgMCkKKyAgICAgICAgc3lzLnN0ZGluID0gb3MuZmRvcGVuKHN5cy5zdGRpbi5maWxlbm8oKSwgJ3InLCAwKQorCisgICAgICAgIGJiLnV0aWxzLm5vbmJsb2NraW5nZmQoc3lzLnN0ZG91dCkKKyAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZChzeXMuc3RkZXJyKQorICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKHN5cy5zdGRpbikKKworICAgICAgICBfY29udGV4dCA9IHsKKyAgICAgICAgICAgICJvcyI6IG9zLAorICAgICAgICAgICAgImJiIjogYmIsCisgICAgICAgICAgICAidGltZSI6IHRpbWUsCisgICAgICAgICAgICAiZCI6IGQsCisgICAgICAgIH0KKworICAgICAgICBwczEgPSAicHlkZXZzaGVsbD4gIgorICAgICAgICBwczIgPSAiLi4uICIKKyAgICAgICAgYnVmID0gW10KKyAgICAgICAgbW9yZSA9IEZhbHNlCisKKyAgICAgICAgaSA9IGNvZGUuSW50ZXJhY3RpdmVJbnRlcnByZXRlcihsb2NhbHM9X2NvbnRleHQpCisgICAgICAgIHByaW50KCJPRSBQeVNoZWxsIChQTiA9ICVzKVxuIiAlIGQuZ2V0VmFyKCJQTiIsIFRydWUpKQorCisgICAgICAgIGRlZiBwcm9tcHQobW9yZSk6CisgICAgICAgICAgICBpZiBtb3JlOgorICAgICAgICAgICAgICAgIHByb21wdCA9IHBzMgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcm9tcHQgPSBwczEKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUocHJvbXB0KQorCisgICAgICAgICMgUmVzdG9yZSBDdHJsK0Mgc2luY2UgYml0YmFrZSBtYXNrcyB0aGlzCisgICAgICAgIGRlZiBzaWduYWxfaGFuZGxlcihzaWduYWwsIGZyYW1lKToKKyAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0CisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgc2lnbmFsX2hhbmRsZXIpCisKKyAgICAgICAgY2hpbGQgPSBOb25lCisKKyAgICAgICAgcHJvbXB0KG1vcmUpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAociwgXywgXykgPSBzZWxlY3Quc2VsZWN0KFtzeXMuc3RkaW5dLCBbXSwgW10sIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHN5cy5zdGRpbi5yZWFkbGluZSgpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHQobW9yZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gMTE6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IDU6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY2hpbGQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGludChsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSAiXG4iLmpvaW4oYnVmKQorICAgICAgICAgICAgICAgICAgICBtb3JlID0gaS5ydW5zb3VyY2Uoc291cmNlLCAiPHB5c2hlbGw+IikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG1vcmU6CisgICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBbXQorICAgICAgICAgICAgICAgICAgICBwcm9tcHQobW9yZSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICBpLndyaXRlKCJcbktleWJvYXJkSW50ZXJydXB0XG4iKQorICAgICAgICAgICAgICAgIGJ1ZiA9IFtdCisgICAgICAgICAgICAgICAgbW9yZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgcHJvbXB0KG1vcmUpCisgICAgICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgICAgICAjIEVhc2llc3Qgd2F5IHRvIGVuc3VyZSBldmVyeXRoaW5nIGV4aXRzCisgICAgICAgICAgICAgICAgb3Mua2lsbChjaGlsZCwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICAgICAgYnJlYWsKKworcHl0aG9uIGRvX2RldnB5c2hlbGwoKSB7CisgICAgaW1wb3J0IHNpZ25hbAorCisgICAgdHJ5OgorICAgICAgICBkZXZweXNoZWxsKGQpCisgICAgZXhjZXB0IFN5c3RlbUV4aXQ6CisgICAgICAgICMgU3RvcCB0aGUgU0lHVEVSTSBhYm92ZSBjYXVzaW5nIGFuIGVycm9yIGV4aXQgY29kZSAgICAKKyAgICAgICAgcmV0dXJuCisgICAgZmluYWxseToKKyAgICAgICAgcmV0dXJuCit9CithZGR0YXNrIGRldnB5c2hlbGwgYWZ0ZXIgZG9fcGF0Y2gKKworZG9fZGV2cHlzaGVsbFtub3N0YW1wXSA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHJvX2ZlYXR1cmVzX2NoZWNrLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0cm9fZmVhdHVyZXNfY2hlY2suYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTkxZGJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHJvX2ZlYXR1cmVzX2NoZWNrLmJiY2xhc3MKQEAgLTAsMCArMSwzNyBAQAorIyBBbGxvdyBjaGVja2luZyBvZiByZXF1aXJlZCBhbmQgY29uZmxpY3RpbmcgRElTVFJPX0ZFQVRVUkVTCisjCisjIEFOWV9PRl9ESVNUUk9fRkVBVFVSRVM6ICAgZW5zdXJlIGF0IGxlYXN0IG9uZSBpdGVtIG9uIHRoaXMgbGlzdCBpcyBpbmNsdWRlZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIERJU1RST19GRUFUVVJFUy4KKyMgUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTOiBlbnN1cmUgZXZlcnkgaXRlbSBvbiB0aGlzIGxpc3QgaXMgaW5jbHVkZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBESVNUUk9fRkVBVFVSRVMuCisjIENPTkZMSUNUX0RJU1RST19GRUFUVVJFUzogZW5zdXJlIG5vIGl0ZW0gaW4gdGhpcyBsaXN0IGlzIGluY2x1ZGVkIGluCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgRElTVFJPX0ZFQVRVUkVTLgorIworIyBDb3B5cmlnaHQgMjAxMyAoQykgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisKK3B5dGhvbiAoKSB7CisgICAgIyBBc3N1bWUgYXQgbGVhc3Qgb25lIHZhciBpcyBzZXQuCisgICAgZGlzdHJvX2ZlYXR1cmVzID0gKGQuZ2V0VmFyKCdESVNUUk9fRkVBVFVSRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgYW55X29mX2Rpc3Ryb19mZWF0dXJlcyA9IGQuZ2V0VmFyKCdBTllfT0ZfRElTVFJPX0ZFQVRVUkVTJywgVHJ1ZSkKKyAgICBpZiBhbnlfb2ZfZGlzdHJvX2ZlYXR1cmVzOgorICAgICAgICBhbnlfb2ZfZGlzdHJvX2ZlYXR1cmVzID0gYW55X29mX2Rpc3Ryb19mZWF0dXJlcy5zcGxpdCgpCisgICAgICAgIGlmIHNldC5pc2Rpc2pvaW50KHNldChhbnlfb2ZfZGlzdHJvX2ZlYXR1cmVzKSxzZXQoZGlzdHJvX2ZlYXR1cmVzKSk6CisgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgib25lIG9mICclcycgbmVlZHMgdG8gYmUgaW4gRElTVFJPX0ZFQVRVUkVTIiAlIGFueV9vZl9kaXN0cm9fZmVhdHVyZXMpCisKKyAgICByZXF1aXJlZF9kaXN0cm9fZmVhdHVyZXMgPSBkLmdldFZhcignUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTJywgVHJ1ZSkKKyAgICBpZiByZXF1aXJlZF9kaXN0cm9fZmVhdHVyZXM6CisgICAgICAgIHJlcXVpcmVkX2Rpc3Ryb19mZWF0dXJlcyA9IHJlcXVpcmVkX2Rpc3Ryb19mZWF0dXJlcy5zcGxpdCgpCisgICAgICAgIGZvciBmIGluIHJlcXVpcmVkX2Rpc3Ryb19mZWF0dXJlczoKKyAgICAgICAgICAgIGlmIGYgaW4gZGlzdHJvX2ZlYXR1cmVzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJtaXNzaW5nIHJlcXVpcmVkIGRpc3RybyBmZWF0dXJlICclcycgKG5vdCBpbiBESVNUUk9fRkVBVFVSRVMpIiAlIGYpCisKKyAgICBjb25mbGljdF9kaXN0cm9fZmVhdHVyZXMgPSBkLmdldFZhcignQ09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTJywgVHJ1ZSkKKyAgICBpZiBjb25mbGljdF9kaXN0cm9fZmVhdHVyZXM6CisgICAgICAgIGNvbmZsaWN0X2Rpc3Ryb19mZWF0dXJlcyA9IGNvbmZsaWN0X2Rpc3Ryb19mZWF0dXJlcy5zcGxpdCgpCisgICAgICAgIGZvciBmIGluIGNvbmZsaWN0X2Rpc3Ryb19mZWF0dXJlczoKKyAgICAgICAgICAgIGlmIGYgaW4gZGlzdHJvX2ZlYXR1cmVzOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJjb25mbGljdGluZyBkaXN0cm8gZmVhdHVyZSAnJXMnIChpbiBESVNUUk9fRkVBVFVSRVMpIiAlIGYpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0cm9kYXRhLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0cm9kYXRhLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE2OGU0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3Ryb2RhdGEuYmJjbGFzcwpAQCAtMCwwICsxLDQ3NCBAQAoraW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3BhY2thZ2VfcmVnZXguaW5jCitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvdXBzdHJlYW1fdHJhY2tpbmcuaW5jCitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvZGlzdHJvX2FsaWFzLmluYworaW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL21haW50YWluZXJzLmluYworCithZGRoYW5kbGVyIGRpc3Ryb19ldmVudGhhbmRsZXIKK2Rpc3Ryb19ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQiCitweXRob24gZGlzdHJvX2V2ZW50aGFuZGxlcigpIHsKKyAgICBpbXBvcnQgb2UuZGlzdHJvX2NoZWNrIGFzIGRjCisgICAgaW1wb3J0IGNzdgorICAgIGxvZ2ZpbGUgPSBkYy5jcmVhdGVfbG9nX2ZpbGUoZS5kYXRhLCAiZGlzdHJvZGF0YS5jc3YiKQorCisgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBsb2dmaWxlKQorICAgIHdpdGggb3Blbihsb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZikKKyAgICAgICAgd3JpdGVyLndyaXRlcm93KFsnUGFja2FnZScsICdEZXNjcmlwdGlvbicsICdPd25lcicsICdMaWNlbnNlJywgCisgICAgICAgICAgICAnVmVyTWF0Y2gnLCAnVmVyc2lvbicsICdVcHN0cmVhbScsICdSZWFzb24nLCAnUmVjaXBlIFN0YXR1cycsCisgICAgICAgICAgICAnRGlzdHJvIDEnLCAnRGlzdHJvIDInLCAnRGlzdHJvIDMnXSkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKworICAgIHJldHVybgorfQorCithZGR0YXNrIGRpc3Ryb2RhdGFfbnAKK2RvX2Rpc3Ryb2RhdGFfbnBbbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19kaXN0cm9kYXRhX25wKCkgeworICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgICAgICBiYi5ub3RlKCJQYWNrYWdlIE5hbWU6ICVzIiAlIHBuKQorCisgICAgICAgIGltcG9ydCBvZS5kaXN0cm9fY2hlY2sgYXMgZGlzdF9jaGVjaworICAgICAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICAgICAgZGlzdHJvX2NoZWNrX2RpciA9IG9zLnBhdGguam9pbih0bXBkaXIsICJkaXN0cm9fY2hlY2siKQorICAgICAgICBkYXRldGltZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkKKyAgICAgICAgZGlzdF9jaGVjay51cGRhdGVfZGlzdHJvX2RhdGEoZGlzdHJvX2NoZWNrX2RpciwgZGF0ZXRpbWUpCisKKyAgICAgICAgaWYgcG4uZmluZCgiLW5hdGl2ZSIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItbmF0aXZlIikKKyAgICAgICAgICAgIGJiLm5vdGUoIk5hdGl2ZSBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGlmIHBuLmZpbmQoIi1jcm9zcyIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItY3Jvc3MiKQorICAgICAgICAgICAgYmIubm90ZSgiY3Jvc3MgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbi5maW5kKCItY3Jvc3NzZGsiKSAhPSAtMToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLWNyb3Nzc2RrIikKKyAgICAgICAgICAgIGJiLm5vdGUoImNyb3NzIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnJlcGxhY2UoIm5hdGl2ZXNkay0iLCAiIikKKyAgICAgICAgICAgIGJiLm5vdGUoIk5hdGl2ZVNESyBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZCArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisKKyAgICAgICAgaWYgcG4uZmluZCgiLWluaXRpYWwiKSAhPSAtMToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLWluaXRpYWwiKQorICAgICAgICAgICAgYmIubm90ZSgiaW5pdGlhbCBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgICIiImdlbmVyYXRlIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbSAuYmIgZmlsZSIiIgorICAgICAgICBwbmFtZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgcGN1cnZlciA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICAgICAgcGRlc2MgPSBsb2NhbGRhdGEuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpCisgICAgICAgIGlmIHBkZXNjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHBkZXNjID0gcGRlc2MucmVwbGFjZSgnLCcsJycpCisgICAgICAgICAgICAgICAgcGRlc2MgPSBwZGVzYy5yZXBsYWNlKCdcbicsJycpCisKKyAgICAgICAgcGdycCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NFQ1RJT04nLCBUcnVlKQorICAgICAgICBwbGljZW5zZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKS5yZXBsYWNlKCcsJywnXycpCisKKyAgICAgICAgcnN0YXR1cyA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9DT0xPUicsIFRydWUpCisgICAgICAgIGlmIHJzdGF0dXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcnN0YXR1cyA9IHJzdGF0dXMucmVwbGFjZSgnLCcsJycpCisKKyAgICAgICAgcHVwdmVyID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX1VQU1RSRUFNX1ZFUlNJT04nLCBUcnVlKQorICAgICAgICBpZiBwY3VydmVyID09IHB1cHZlcjoKKyAgICAgICAgICAgICAgICB2ZXJtYXRjaD0iMSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2ZXJtYXRjaD0iMCIKKyAgICAgICAgbm91cGRhdGVfcmVhc29uID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX05PX1VQREFURV9SRUFTT04nLCBUcnVlKQorICAgICAgICBpZiBub3VwZGF0ZV9yZWFzb24gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBub3VwZGF0ZT0iMCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBub3VwZGF0ZT0iMSIKKyAgICAgICAgICAgICAgICBub3VwZGF0ZV9yZWFzb24gPSBub3VwZGF0ZV9yZWFzb24ucmVwbGFjZSgnLCcsJycpCisKKyAgICAgICAgbWFpbnRhaW5lciA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9NQUlOVEFJTkVSJywgVHJ1ZSkKKyAgICAgICAgcmxyZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9VUFNUUkVBTV9EQVRFJywgVHJ1ZSkKKyAgICAgICAgcmVzdWx0ID0gZGlzdF9jaGVjay5jb21wYXJlX2luX2Rpc3Ryb19wYWNrYWdlc19saXN0KGRpc3Ryb19jaGVja19kaXIsIGxvY2FsZGF0YSkKKworICAgICAgICBiYi5ub3RlKCJESVNUUk86ICVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzXG4iICUgXAorICAgICAgICAgICAgICAgICAgKHBuYW1lLCBwZGVzYywgbWFpbnRhaW5lciwgcGxpY2Vuc2UsIHZlcm1hdGNoLCBwY3VydmVyLCBwdXB2ZXIsIG5vdXBkYXRlX3JlYXNvbiwgcnN0YXR1cykpCisgICAgICAgIGxpbmUgPSBwbgorICAgICAgICBmb3IgaSBpbiByZXN1bHQ6CisgICAgICAgICAgICBsaW5lID0gbGluZSArICIsIiArIGkKKyAgICAgICAgYmIubm90ZSgiJXNcbiIgJSBsaW5lKQorfQorCithZGR0YXNrIGRpc3Ryb2RhdGEKK2RvX2Rpc3Ryb2RhdGFbbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19kaXN0cm9kYXRhKCkgeworICAgICAgICBpbXBvcnQgY3N2CisgICAgICAgIGxvZ3BhdGggPSBkLmdldFZhcignTE9HX0RJUicsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dwYXRoKQorICAgICAgICBsb2dmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJkaXN0cm9kYXRhLmNzdiIpCisKKyAgICAgICAgaW1wb3J0IG9lLmRpc3Ryb19jaGVjayBhcyBkaXN0X2NoZWNrCisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICAgICAgZGlzdHJvX2NoZWNrX2RpciA9IG9zLnBhdGguam9pbih0bXBkaXIsICJkaXN0cm9fY2hlY2siKQorICAgICAgICBkYXRldGltZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkKKyAgICAgICAgZGlzdF9jaGVjay51cGRhdGVfZGlzdHJvX2RhdGEoZGlzdHJvX2NoZWNrX2RpciwgZGF0ZXRpbWUpCisKKyAgICAgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgICAgICBiYi5ub3RlKCJQYWNrYWdlIE5hbWU6ICVzIiAlIHBuKQorCisgICAgICAgIGlmIHBuLmZpbmQoIi1uYXRpdmUiKSAhPSAtMToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLW5hdGl2ZSIpCisgICAgICAgICAgICBiYi5ub3RlKCJOYXRpdmUgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbi5zdGFydHN3aXRoKCJuYXRpdmVzZGstIik6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG4ucmVwbGFjZSgibmF0aXZlc2RrLSIsICIiKQorICAgICAgICAgICAgYmIubm90ZSgiTmF0aXZlU0RLIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG4uZmluZCgiLWNyb3NzIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIi1jcm9zcyIpCisgICAgICAgICAgICBiYi5ub3RlKCJjcm9zcyBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGlmIHBuLmZpbmQoIi1jcm9zc3NkayIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItY3Jvc3NzZGsiKQorICAgICAgICAgICAgYmIubm90ZSgiY3Jvc3MgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbi5maW5kKCItaW5pdGlhbCIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItaW5pdGlhbCIpCisgICAgICAgICAgICBiYi5ub3RlKCJpbml0aWFsIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgIiIiZ2VuZXJhdGUgcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tIC5iYiBmaWxlIiIiCisgICAgICAgIHBuYW1lID0gbG9jYWxkYXRhLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBwY3VydmVyID0gbG9jYWxkYXRhLmdldFZhcignUFYnLCBUcnVlKQorICAgICAgICBwZGVzYyA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkKKyAgICAgICAgaWYgcGRlc2MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcGRlc2MgPSBwZGVzYy5yZXBsYWNlKCcsJywnJykKKyAgICAgICAgICAgICAgICBwZGVzYyA9IHBkZXNjLnJlcGxhY2UoJ1xuJywnJykKKworICAgICAgICBwZ3JwID0gbG9jYWxkYXRhLmdldFZhcignU0VDVElPTicsIFRydWUpCisgICAgICAgIHBsaWNlbnNlID0gbG9jYWxkYXRhLmdldFZhcignTElDRU5TRScsIFRydWUpLnJlcGxhY2UoJywnLCdfJykKKworICAgICAgICByc3RhdHVzID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX0NPTE9SJywgVHJ1ZSkKKyAgICAgICAgaWYgcnN0YXR1cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByc3RhdHVzID0gcnN0YXR1cy5yZXBsYWNlKCcsJywnJykKKworICAgICAgICBwdXB2ZXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdSRUNJUEVfVVBTVFJFQU1fVkVSU0lPTicsIFRydWUpCisgICAgICAgIGlmIHBjdXJ2ZXIgPT0gcHVwdmVyOgorICAgICAgICAgICAgICAgIHZlcm1hdGNoPSIxIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZlcm1hdGNoPSIwIgorCisgICAgICAgIG5vdXBkYXRlX3JlYXNvbiA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9OT19VUERBVEVfUkVBU09OJywgVHJ1ZSkKKyAgICAgICAgaWYgbm91cGRhdGVfcmVhc29uIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbm91cGRhdGU9IjAiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbm91cGRhdGU9IjEiCisgICAgICAgICAgICAgICAgbm91cGRhdGVfcmVhc29uID0gbm91cGRhdGVfcmVhc29uLnJlcGxhY2UoJywnLCcnKQorCisgICAgICAgIG1haW50YWluZXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdSRUNJUEVfTUFJTlRBSU5FUicsIFRydWUpCisgICAgICAgIHJscmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdSRUNJUEVfVVBTVFJFQU1fREFURScsIFRydWUpCisgICAgICAgICMgZG8gdGhlIGNvbXBhcmlzb24KKyAgICAgICAgcmVzdWx0ID0gZGlzdF9jaGVjay5jb21wYXJlX2luX2Rpc3Ryb19wYWNrYWdlc19saXN0KGRpc3Ryb19jaGVja19kaXIsIGxvY2FsZGF0YSkKKworICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKCIlcy5sb2NrIiAlIGxvZ2ZpbGUpCisgICAgICAgIHdpdGggb3Blbihsb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgICAgICByb3cgPSBbcG5hbWUsIHBkZXNjLCBtYWludGFpbmVyLCBwbGljZW5zZSwgdmVybWF0Y2gsIHBjdXJ2ZXIsIHB1cHZlciwgbm91cGRhdGVfcmVhc29uLCByc3RhdHVzXQorICAgICAgICAgICAgcm93LmV4dGVuZChyZXN1bHQpCisKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZikKKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhyb3cpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKK30KKworYWRkdGFzayBkaXN0cm9kYXRhYWxsIGFmdGVyIGRvX2Rpc3Ryb2RhdGEKK2RvX2Rpc3Ryb2RhdGFhbGxbcmVjcmRlcHRhc2tdID0gImRvX2Rpc3Ryb2RhdGFhbGwgZG9fZGlzdHJvZGF0YSIKK2RvX2Rpc3Ryb2RhdGFhbGxbcmVjaWRlcHRhc2tdID0gImRvXyR7QkJfREVGQVVMVF9UQVNLfSIKK2RvX2Rpc3Ryb2RhdGFhbGxbbm9zdGFtcF0gPSAiMSIKK2RvX2Rpc3Ryb2RhdGFhbGwoKSB7CisgICAgICAgIDoKK30KKworYWRkaGFuZGxlciBjaGVja3BrZ19ldmVudGhhbmRsZXIKK2NoZWNrcGtnX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIKK3B5dGhvbiBjaGVja3BrZ19ldmVudGhhbmRsZXIoKSB7CisgICAgaW1wb3J0IGNzdgorCisgICAgZGVmIHBhcnNlX2Nzdl9maWxlKGZpbGVuYW1lKToKKyAgICAgICAgcGFja2FnZV9kaWN0ID0ge30KKworICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyIikgYXMgZjoKKyAgICAgICAgICAgIHJlYWRlciA9IGNzdi5yZWFkZXIoZiwgZGVsaW1pdGVyPSdcdCcpCisgICAgICAgICAgICBmb3Igcm93IGluIHJlYWRlcjoKKyAgICAgICAgICAgICAgICBwbiA9IHJvd1swXQorCisgICAgICAgICAgICAgICAgaWYgcmVhZGVyLmxpbmVfbnVtID09IDE6CisgICAgICAgICAgICAgICAgICAgIGhlYWRlciA9IHJvdworICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbm90IHBuIGluIHBhY2thZ2VfZGljdC5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfZGljdFtwbl0gPSByb3cKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInciKSBhcyBmOgorICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmLCBkZWxpbWl0ZXI9J1x0JykKKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhoZWFkZXIpCisgICAgICAgICAgICBmb3IgcG4gaW4gcGFja2FnZV9kaWN0LmtleXMoKToKKyAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3cocGFja2FnZV9kaWN0W3BuXSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGRlbCBwYWNrYWdlX2RpY3QKKworICAgIGlmIGJiLmV2ZW50LmdldE5hbWUoZSkgPT0gIkJ1aWxkU3RhcnRlZCI6CisgICAgICAgIGltcG9ydCBvZS5kaXN0cm9fY2hlY2sgYXMgZGMKKyAgICAgICAgbG9nZmlsZSA9IGRjLmNyZWF0ZV9sb2dfZmlsZShlLmRhdGEsICJjaGVja3BrZy5jc3YiKQorCisgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoIiVzLmxvY2siICUgbG9nZmlsZSkKKyAgICAgICAgd2l0aCBvcGVuKGxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZiwgZGVsaW1pdGVyPSdcdCcpCisgICAgICAgICAgICBoZWFkZXJzID0gWydQYWNrYWdlJywgJ1ZlcnNpb24nLCAnVXB2ZXInLCAnTGljZW5zZScsICdTZWN0aW9uJywKKyAgICAgICAgICAgICAgICAnSG9tZScsICdSZWxlYXNlJywgJ0RlcGVuZHMnLCAnQnVnVHJhY2tlcicsICdQRScsICdEZXNjcmlwdGlvbicsCisgICAgICAgICAgICAgICAgJ1N0YXR1cycsICdUcmFja2luZycsICdVUkknLCAnTUFJTlRBSU5FUicsICdOb1VwUmVhc29uJ10KKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhoZWFkZXJzKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgZWxpZiBiYi5ldmVudC5nZXROYW1lKGUpID09ICJCdWlsZENvbXBsZXRlZCI6CisgICAgICAgIGltcG9ydCBvcworICAgICAgICBmaWxlbmFtZSA9ICJ0bXAvbG9nL2NoZWNrcGtnLmNzdiIKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUpOgorICAgICAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIlZmlsZW5hbWUpCisgICAgICAgICAgICBwYXJzZV9jc3ZfZmlsZShmaWxlbmFtZSkKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgcmV0dXJuCit9CisKK2FkZHRhc2sgY2hlY2twa2cKK2RvX2NoZWNrcGtnW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fY2hlY2twa2coKSB7CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBpbXBvcnQgY3N2CisgICAgICAgIGltcG9ydCByZQorICAgICAgICBpbXBvcnQgdGVtcGZpbGUKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisgICAgICAgIGZyb20gYmIudXRpbHMgaW1wb3J0IHZlcmNtcF9zdHJpbmcKKyAgICAgICAgZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoRXJyb3IsIE5vTWV0aG9kRXJyb3IsIGRlY29kZXVybAorCisgICAgICAgICIiImZpcnN0IGNoZWNrIHdoZXRoZXIgYSB1cmkgaXMgcHJvdmlkZWQiIiIKKyAgICAgICAgc3JjX3VyaSA9IGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHNyY191cmk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHVyaV90eXBlLCBfLCBfLCBfLCBfLCBfID0gZGVjb2RldXJsKHNyY191cmkpCisKKyAgICAgICAgIiIiaW5pdGlhbGl6ZSBsb2cgZmlsZXMuIiIiCisgICAgICAgIGxvZ3BhdGggPSBkLmdldFZhcignTE9HX0RJUicsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dwYXRoKQorICAgICAgICBsb2dmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJjaGVja3BrZy5jc3YiKQorCisgICAgICAgICIiImdlbmVyYXRlIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbSAuYmIgZmlsZSIiIgorICAgICAgICBwbmFtZSA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICAgICAgaWYgcG5hbWUuZmluZCgiLW5hdGl2ZSIpICE9IC0xOgorICAgICAgICAgICAgaWYgZC5nZXRWYXIoJ0JCQ0xBU1NFWFRFTkQnLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG5hbWUuc3BsaXQoIi1uYXRpdmUiKQorICAgICAgICAgICAgYmIubm90ZSgiTmF0aXZlIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG5hbWUuc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICAgICAgaWYgZC5nZXRWYXIoJ0JCQ0xBU1NFWFRFTkQnLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG5hbWUucmVwbGFjZSgibmF0aXZlc2RrLSIsICIiKQorICAgICAgICAgICAgYmIubm90ZSgiTmF0aXZlU0RLIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG5hbWUuZmluZCgiLWNyb3NzIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG5hbWUuc3BsaXQoIi1jcm9zcyIpCisgICAgICAgICAgICBiYi5ub3RlKCJjcm9zcyBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGlmIHBuYW1lLmZpbmQoIi1pbml0aWFsIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG5hbWUuc3BsaXQoIi1pbml0aWFsIikKKyAgICAgICAgICAgIGJiLm5vdGUoImluaXRpYWwgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBwZGVzYyA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkKKyAgICAgICAgcGdycCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NFQ1RJT04nLCBUcnVlKQorICAgICAgICBwdmVyc2lvbiA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICAgICAgcGxpY2Vuc2UgPSBsb2NhbGRhdGEuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKyAgICAgICAgcHNlY3Rpb24gPSBsb2NhbGRhdGEuZ2V0VmFyKCdTRUNUSU9OJywgVHJ1ZSkKKyAgICAgICAgcGhvbWUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdIT01FUEFHRScsIFRydWUpCisgICAgICAgIHByZWxlYXNlID0gbG9jYWxkYXRhLmdldFZhcignUFInLCBUcnVlKQorICAgICAgICBwZGVwZW5kcyA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFUEVORFMnLCBUcnVlKQorICAgICAgICBwYnVndHJhY2tlciA9IGxvY2FsZGF0YS5nZXRWYXIoJ0JVR1RSQUNLRVInLCBUcnVlKQorICAgICAgICBwcGUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQRScsIFRydWUpCisgICAgICAgIHBzcmN1cmkgPSBsb2NhbGRhdGEuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkKKyAgICAgICAgbWFpbnRhaW5lciA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9NQUlOVEFJTkVSJywgVHJ1ZSkKKworICAgICAgICAiIiIgR2V0IHVwc3RyZWFtIHZlcnNpb24gdmVyc2lvbiAiIiIKKyAgICAgICAgcHVwdmVyID0gIiIKKyAgICAgICAgcHN0YXR1cyA9ICIiCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdXYgPSBvZS5yZWNpcGV1dGlscy5nZXRfcmVjaXBlX3Vwc3RyZWFtX3ZlcnNpb24obG9jYWxkYXRhKQorCisgICAgICAgICAgICBwdXB2ZXIgPSB1dlsndmVyc2lvbiddCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGlmIGUgaXMgRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgICAgICBwc3RhdHVzID0gIkVyckFjY2VzcyIKKyAgICAgICAgICAgIGVsaWYgZSBpcyBOb01ldGhvZEVycm9yOgorICAgICAgICAgICAgICAgIHBzdGF0dXMgPSAiRXJyVW5zdXBwb3J0ZWRQcm90byIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHN0YXR1cyA9ICJFcnJVbmtub3duIgorCisgICAgICAgICIiIlNldCB1cHN0cmVhbSB2ZXJzaW9uIHN0YXR1cyIiIgorICAgICAgICBpZiBub3QgcHVwdmVyOgorICAgICAgICAgICAgcHVwdmVyID0gIk4vQSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHB2LCBfLCBfID0gb2UucmVjaXBldXRpbHMuZ2V0X3JlY2lwZV9wdl93aXRob3V0X3NyY3B2KHB2ZXJzaW9uLCB1cmlfdHlwZSkKKyAgICAgICAgICAgIHVwdiwgXywgXyA9IG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfcHZfd2l0aG91dF9zcmNwdihwdXB2ZXIsIHVyaV90eXBlKQorCisgICAgICAgICAgICBjbXAgPSB2ZXJjbXBfc3RyaW5nKHB2LCB1cHYpCisgICAgICAgICAgICBpZiBjbXAgPT0gLTE6CisgICAgICAgICAgICAgICAgcHN0YXR1cyA9ICJVUERBVEUiCisgICAgICAgICAgICBlbGlmIGNtcCA9PSAwOgorICAgICAgICAgICAgICAgIHBzdGF0dXMgPSAiTUFUQ0giCisKKyAgICAgICAgcHNyY3VyaSA9IHBzcmN1cmkuc3BsaXQoKVswXQorICAgICAgICBwZGVwZW5kcyA9ICIiLmpvaW4ocGRlcGVuZHMuc3BsaXQoIlx0IikpCisgICAgICAgIHBkZXNjID0gIiIuam9pbihwZGVzYy5zcGxpdCgiXHQiKSkKKyAgICAgICAgbm9fdXBncl9yZWFzb24gPSBkLmdldFZhcignUkVDSVBFX05PX1VQREFURV9SRUFTT04nLCBUcnVlKQorICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKCIlcy5sb2NrIiAlIGxvZ2ZpbGUpCisgICAgICAgIHdpdGggb3Blbihsb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGYsIGRlbGltaXRlcj0nXHQnKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KFtwbmFtZSwgcHZlcnNpb24sIHB1cHZlciwgcGxpY2Vuc2UsIHBzZWN0aW9uLCBwaG9tZSwgCisgICAgICAgICAgICAgICAgcHJlbGVhc2UsIHBkZXBlbmRzLCBwYnVndHJhY2tlciwgcHBlLCBwZGVzYywgcHN0YXR1cywgcHVwdmVyLAorICAgICAgICAgICAgICAgIHBzcmN1cmksIG1haW50YWluZXIsIG5vX3VwZ3JfcmVhc29uXSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorfQorCithZGR0YXNrIGNoZWNrcGtnYWxsIGFmdGVyIGRvX2NoZWNrcGtnCitkb19jaGVja3BrZ2FsbFtyZWNyZGVwdGFza10gPSAiZG9fY2hlY2twa2dhbGwgZG9fY2hlY2twa2ciCitkb19jaGVja3BrZ2FsbFtyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fY2hlY2twa2dhbGxbbm9zdGFtcF0gPSAiMSIKK2RvX2NoZWNrcGtnYWxsKCkgeworICAgICAgICA6Cit9CisKK2FkZGhhbmRsZXIgZGlzdHJvX2NoZWNrX2V2ZW50aGFuZGxlcgorZGlzdHJvX2NoZWNrX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCIKK3B5dGhvbiBkaXN0cm9fY2hlY2tfZXZlbnRoYW5kbGVyKCkgeworICAgICIiImluaXRpYWxpemUgbG9nIGZpbGVzLiIiIgorICAgIGltcG9ydCBvZS5kaXN0cm9fY2hlY2sgYXMgZGMKKyAgICByZXN1bHRfZmlsZSA9IGRjLmNyZWF0ZV9sb2dfZmlsZShlLmRhdGEsICJkaXN0cm9jaGVjay5jc3YiKQorICAgIHJldHVybgorfQorCithZGR0YXNrIGRpc3Ryb19jaGVjaworZG9fZGlzdHJvX2NoZWNrW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fZGlzdHJvX2NoZWNrKCkgeworICAgICIiImNoZWNrcyBpZiB0aGUgcGFja2FnZSBpcyBwcmVzZW50IGluIG90aGVyIHB1YmxpYyBMaW51eCBkaXN0cm9zIiIiCisgICAgaW1wb3J0IG9lLmRpc3Ryb19jaGVjayBhcyBkYworICAgIGltcG9ydCBzaHV0aWwKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3NkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJyxkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICBkaXN0cm9fY2hlY2tfZGlyID0gb3MucGF0aC5qb2luKHRtcGRpciwgImRpc3Ryb19jaGVjayIpCisgICAgbG9ncGF0aCA9IGQuZ2V0VmFyKCdMT0dfRElSJywgVHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIobG9ncGF0aCkKKyAgICByZXN1bHRfZmlsZSA9IG9zLnBhdGguam9pbihsb2dwYXRoLCAiZGlzdHJvY2hlY2suY3N2IikKKyAgICBkYXRldGltZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkKKyAgICBkYy51cGRhdGVfZGlzdHJvX2RhdGEoZGlzdHJvX2NoZWNrX2RpciwgZGF0ZXRpbWUpCisKKyAgICAjIGRvIHRoZSBjb21wYXJpc29uCisgICAgcmVzdWx0ID0gZGMuY29tcGFyZV9pbl9kaXN0cm9fcGFja2FnZXNfbGlzdChkaXN0cm9fY2hlY2tfZGlyLCBkKQorCisgICAgIyBzYXZlIHRoZSByZXN1bHRzCisgICAgZGMuc2F2ZV9kaXN0cm9fY2hlY2tfcmVzdWx0KHJlc3VsdCwgZGF0ZXRpbWUsIHJlc3VsdF9maWxlLCBkKQorfQorCithZGR0YXNrIGRpc3Ryb19jaGVja2FsbCBhZnRlciBkb19kaXN0cm9fY2hlY2sKK2RvX2Rpc3Ryb19jaGVja2FsbFtyZWNyZGVwdGFza10gPSAiZG9fZGlzdHJvX2NoZWNrYWxsIGRvX2Rpc3Ryb19jaGVjayIKK2RvX2Rpc3Ryb19jaGVja2FsbFtyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fZGlzdHJvX2NoZWNrYWxsW25vc3RhbXBdID0gIjEiCitkb19kaXN0cm9fY2hlY2thbGwoKSB7CisgICAgICAgIDoKK30KKyMKKyNDaGVjayBNaXNzaW5nIExpY2Vuc2UgVGV4dC4KKyNVc2UgdGhpcyB0YXNrIHRvIGdlbmVyYXRlIHRoZSBtaXNzaW5nIGxpY2Vuc2UgdGV4dCBkYXRhIGZvciBwa2ctcmVwb3J0IHN5c3RlbSwKKyN0aGVuIHdlIGNhbiBzZWFyY2ggdGhvc2UgcmVjaXBlcyB3aGljaCBsaWNlbnNlIHRleHQgaXNuJ3QgZXhzaXQgaW4gY29tbW9uLWxpY2Vuc2VzIGRpcmVjdG9yeQorIworYWRkaGFuZGxlciBjaGVja2xpY2Vuc2VfZXZlbnRoYW5kbGVyCitjaGVja2xpY2Vuc2VfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRTdGFydGVkIgorcHl0aG9uIGNoZWNrbGljZW5zZV9ldmVudGhhbmRsZXIoKSB7CisgICAgIiIiaW5pdGlhbGl6ZSBsb2cgZmlsZXMuIiIiCisgICAgaW1wb3J0IGNzdgorICAgIGltcG9ydCBvZS5kaXN0cm9fY2hlY2sgYXMgZGMKKyAgICBsb2dmaWxlID0gZGMuY3JlYXRlX2xvZ19maWxlKGUuZGF0YSwgIm1pc3NpbmdsaWNlbnNlLmNzdiIpCisgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBsb2dmaWxlKQorICAgIHdpdGggb3Blbihsb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZiwgZGVsaW1pdGVyPSdcdCcpCisgICAgICAgIHdyaXRlci53cml0ZXJvdyhbJ1BhY2thZ2UnLCAnTGljZW5zZScsICdNaXNzaW5nTGljZW5zZSddKQorICAgICAgICBmLmNsb3NlKCkKKyAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgIHJldHVybgorfQorCithZGR0YXNrIGNoZWNrbGljZW5zZQorZG9fY2hlY2tsaWNlbnNlW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fY2hlY2tsaWNlbnNlKCkgeworICAgIGltcG9ydCBjc3YKKyAgICBpbXBvcnQgc2h1dGlsCisgICAgbG9ncGF0aCA9IGQuZ2V0VmFyKCdMT0dfRElSJywgVHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIobG9ncGF0aCkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgbG9nZmlsZSA9IG9zLnBhdGguam9pbihsb2dwYXRoLCAibWlzc2luZ2xpY2Vuc2UuY3N2IikKKyAgICBnZW5lcmljX2RpcmVjdG9yeSA9IGQuZ2V0VmFyKCdDT01NT05fTElDRU5TRV9ESVInLCBUcnVlKQorICAgIGxpY2Vuc2VfdHlwZXMgPSBkLmdldFZhcignTElDRU5TRScsIFRydWUpCisgICAgZm9yIGxpY2Vuc2VfdHlwZSBpbiAoKGxpY2Vuc2VfdHlwZXMucmVwbGFjZSgnKycsICcnKS5yZXBsYWNlKCd8JywgJyYnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnKCcsICcnKS5yZXBsYWNlKCcpJywgJycpLnJlcGxhY2UoJzsnLCAnJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJywnLCAnJykucmVwbGFjZSgiICIsICIiKS5zcGxpdCgiJiIpKSk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZ2VuZXJpY19kaXJlY3RvcnksIGxpY2Vuc2VfdHlwZSkpOgorICAgICAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBsb2dmaWxlKQorICAgICAgICAgICAgd2l0aCBvcGVuKGxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGYsIGRlbGltaXRlcj0nXHQnKQorICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhbcG4sIGxpY2Vuc2VfdHlwZXMsIGxpY2Vuc2VfdHlwZV0pCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgIHJldHVybgorfQorCithZGR0YXNrIGNoZWNrbGljZW5zZWFsbCBhZnRlciBkb19jaGVja2xpY2Vuc2UKK2RvX2NoZWNrbGljZW5zZWFsbFtyZWNyZGVwdGFza10gPSAiZG9fY2hlY2tsaWNlbnNlYWxsIGRvX2NoZWNrbGljZW5zZSIKK2RvX2NoZWNrbGljZW5zZWFsbFtyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fY2hlY2tsaWNlbnNlYWxsW25vc3RhbXBdID0gIjEiCitkb19jaGVja2xpY2Vuc2VhbGwoKSB7CisgICAgICAgIDoKK30KKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtYmFzZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLWJhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTE4ZThiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLWJhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDQgQEAKK0RFUEVORFMgICs9ICIke0BbIiR7UFlUSE9OX1BOfS1uYXRpdmUgJHtQWVRIT05fUE59IiwgIiJdWyhkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSA9PSAnJyldfSIKK1JERVBFTkRTXyR7UE59ICs9ICIke0BbJycsICcke1BZVEhPTl9QTn0tY29yZSddWycke0NMQVNTT1ZFUlJJREV9JyA9PSAnY2xhc3MtdGFyZ2V0J119IgorCitpbmhlcml0IGRpc3R1dGlscy1jb21tb24tYmFzZSBweXRob25uYXRpdmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy1jb21tb24tYmFzZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLWNvbW1vbi1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI3Mjc1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy1jb21tb24tYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsMjQgQEAKK2luaGVyaXQgcHl0aG9uLWRpcgorCitFWFRSQV9PRU1BS0UgPSAiIgorCitleHBvcnQgU1RBR0lOR19JTkNESVIKK2V4cG9ydCBTVEFHSU5HX0xJQkRJUgorCitQQUNLQUdFUyA9ICIke1BOfS1zdGF0aWNkZXYgJHtQTn0tZGV2ICR7UE59LWRiZyAke1BOfS1kb2MgJHtQTn0iCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vKiAke2xpYmRpcn0vJHtQWVRIT05fRElSfS8qIgorCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIlwKKyAgJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKi5hIFwKKyIKK0ZJTEVTXyR7UE59LWRldiArPSAiXAorICAke2RhdGFkaXJ9L3BrZ2NvbmZpZyBcCisgICR7bGliZGlyfS9wa2djb25maWcgXAorICAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qLmxhIFwKKyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiXAorICAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8uZGVidWcgXAorICAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qLy5kZWJ1ZyBcCisgICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyovKi8uZGVidWcgXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLW5hdGl2ZS1iYXNlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtbmF0aXZlLWJhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDljYjk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLW5hdGl2ZS1iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSwzIEBACitpbmhlcml0IGRpc3R1dGlscy1jb21tb24tYmFzZQorCitERVBFTkRTICArPSAiJHtAWyIke1BZVEhPTl9QTn0tbmF0aXZlIiwgIiJdWyhkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSA9PSAnJyldfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy10b29scy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLXRvb2xzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQzNDUwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy10b29scy5iYmNsYXNzCkBAIC0wLDAgKzEsNzcgQEAKK0RJU1RVVElMU19CVUlMRF9BUkdTID89ICIiCitESVNUVVRJTFNfU1RBR0VfSEVBREVSU19BUkdTID89ICItLWluc3RhbGwtZGlyPSR7U1RBR0lOR19JTkNESVJ9LyR7UFlUSE9OX0RJUn0iCitESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7U1RBR0lOR19EQVRBRElSfSIKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7RH0vJHtwcmVmaXh9IFwKKyAgICAtLWluc3RhbGwtZGF0YT0ke0R9LyR7ZGF0YWRpcn0iCisKK2Rpc3R1dGlsc19kb19jb21waWxlKCkgeworICAgICAgICAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisgICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgYnVpbGQgJHtESVNUVVRJTFNfQlVJTERfQVJHU30gfHwgXAorICAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGJ1aWxkX2V4dCBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzX3N0YWdlX2hlYWRlcnMoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzICR7RElTVFVUSUxTX1NUQUdFX0hFQURFUlNfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHNfc3RhZ2VfYWxsKCkgeworICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgaW5zdGFsbCAtZCAke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgUFlUSE9OUEFUSD0ke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgJHtESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgKHN0YWdlKSBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzX2RvX2luc3RhbGwoKSB7CisgICAgICAgIGVjaG8gIkJlZ2lubmluZyAke1BOfSBJbnN0YWxsIC4uLiIKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgZWNobyAiU3RlcCAyIG9mICR7UE59IEluc3RhbGwgLi4uIgorICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgUFlUSE9OUEFUSD0ke0R9LyR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IFwKKyAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsIC0taW5zdGFsbC1saWI9JHtEfS8ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSAke0RJU1RVVElMU19JTlNUQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgZXhlY3V0aW9uIGZhaWxlZC4iCisKKyAgICAgICAgZWNobyAiU3RlcCAzIG9mICR7UE59IEluc3RhbGwgLi4uIgorICAgICAgICAjIHN1cHBvcnQgZmlsZW5hbWVzIHdpdGggKnNwYWNlcyoKKyAgICAgICAgZmluZCAke0R9IC1uYW1lICIqLnB5IiAtcHJpbnQwIHwgd2hpbGUgcmVhZCAtZCAkJ1wwJyBpIDsgZG8gXAorICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtEfTo6ZyAkaQorICAgICAgICBkb25lCisKKyAgICAgICAgZWNobyAiU3RlcCA0IG9mICR7UE59IEluc3RhbGwgLi4uIgorICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke2JpbmRpcn0gOyB0aGVuCQorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7YmluZGlyfS8qIDsgZG8gXAorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfToke2JpbmRpcn06ZyAkaQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorCisgICAgICAgIGVjaG8gIlN0ZXAgNCBvZiAke1BOfSBJbnN0YWxsIC4uLiIKKyAgICAgICAgaWYgdGVzdCAtZSAke0R9JHtzYmluZGlyfTsgdGhlbgorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7c2JpbmRpcn0vKiA7IGRvIFwKKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgczoke1NUQUdJTkdfQklORElSX05BVElWRX06JHtiaW5kaXJ9OmcgJGkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKworICAgICAgICBlY2hvICJTdGVwIDUgb2YgJHtQTn0gSW5zdGFsbCAuLi4iCisgICAgICAgIHJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9lYXN5LWluc3RhbGwucHRoCisgICAgICAgIAorICAgICAgICAjCisgICAgICAgICMgRklYTUU6IEJhbmRhaWQgYWdhaW5zdCB3cm9uZyBkYXRhZGlyIGNvbXB1dGF0aW9uCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAtZSAke0R9JHtkYXRhZGlyfS9zaGFyZTsgdGhlbgorICAgICAgICAgICAgbXYgLWYgJHtEfSR7ZGF0YWRpcn0vc2hhcmUvKiAke0R9JHtkYXRhZGlyfS8KKyAgICAgICAgZmkKK30KKworI0VYUE9SVF9GVU5DVElPTlMgZG9fY29tcGlsZSBkb19pbnN0YWxsCisKK2V4cG9ydCBMRFNIQVJFRD0iJHtDQ0xEfSAtc2hhcmVkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDA2NzEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLmJiY2xhc3MKQEAgLTAsMCArMSw4NiBAQAoraW5oZXJpdCBkaXN0dXRpbHMtYmFzZQorCitESVNUVVRJTFNfQlVJTERfQVJHUyA/PSAiIgorRElTVFVUSUxTX1NUQUdFX0hFQURFUlNfQVJHUyA/PSAiLS1pbnN0YWxsLWRpcj0ke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9IgorRElTVFVUSUxTX1NUQUdFX0FMTF9BUkdTID89ICItLXByZWZpeD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IFwKKyAgICAtLWluc3RhbGwtZGF0YT0ke1NUQUdJTkdfREFUQURJUn0iCitESVNUVVRJTFNfSU5TVEFMTF9BUkdTID89ICItLXByZWZpeD0ke0R9LyR7cHJlZml4fSBcCisgICAgLS1pbnN0YWxsLWRhdGE9JHtEfS8ke2RhdGFkaXJ9IgorCitkaXN0dXRpbHNfZG9fY29tcGlsZSgpIHsKKyAgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGJ1aWxkICR7RElTVFVUSUxTX0JVSUxEX0FSR1N9IHx8IFwKKyAgICAgICAgIGJiZmF0YWwgIiR7UFlUSE9OX1BOfSBzZXR1cC5weSBidWlsZCBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzX3N0YWdlX2hlYWRlcnMoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzICR7RElTVFVUSUxTX1NUQUdFX0hFQURFUlNfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHNfc3RhZ2VfYWxsKCkgeworICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgaW5zdGFsbCAtZCAke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgUFlUSE9OUEFUSD0ke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgJHtESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgKHN0YWdlKSBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzX2RvX2luc3RhbGwoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICBQWVRIT05QQVRIPSR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAtLWluc3RhbGwtbGliPSR7RH0vJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gJHtESVNUVVRJTFNfSU5TVEFMTF9BUkdTfSB8fCBcCisgICAgICAgIGJiZmF0YWwgIiR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsIGV4ZWN1dGlvbiBmYWlsZWQuIgorCisgICAgICAgICMgc3VwcG9ydCBmaWxlbmFtZXMgd2l0aCAqc3BhY2VzKgorICAgICAgICAjIG9ubHkgbW9kaWZ5IGZpbGUgaWYgaXQgY29udGFpbnMgcGF0aCAgYW5kIHJlY29tcGlsZSBpdAorICAgICAgICBmaW5kICR7RH0gLW5hbWUgIioucHkiIC1leGVjIGdyZXAgLXEgJHtEfSB7fSBcOyAtZXhlYyBzZWQgLWkgLWUgczoke0R9OjpnIHt9IFw7IC1leGVjICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiAtbWNvbXBpbGVhbGwge30gXDsKKworICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke2JpbmRpcn0gOyB0aGVuCQorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7YmluZGlyfS8qIDsgZG8gXAorICAgICAgICAgICAgICAgIGlmIFsgJHtQTn0gIT0gIiR7QlBOfS1uYXRpdmUiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAJc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uOiR7YmluZGlyfS9lbnZcIHB5dGhvbjpnICRpCisJCWZpCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OiR7YmluZGlyfTpnICRpCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKyAgICAgICAgaWYgdGVzdCAtZSAke0R9JHtzYmluZGlyfTsgdGhlbgorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7c2JpbmRpcn0vKiA7IGRvIFwKKyAgICAgICAgICAgICAgICBpZiBbICR7UE59ICE9ICIke0JQTn0tbmF0aXZlIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgCXNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbjoke2JpbmRpcn0vZW52XCBweXRob246ZyAkaQorCQlmaQorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfToke2JpbmRpcn06ZyAkaQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorCisgICAgICAgIHJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9lYXN5LWluc3RhbGwucHRoCisgICAgICAgIHJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zaXRlLnB5KgorICAgICAgICAKKyAgICAgICAgIworICAgICAgICAjIEZJWE1FOiBCYW5kYWlkIGFnYWluc3Qgd3JvbmcgZGF0YWRpciBjb21wdXRhdGlvbgorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgLWUgJHtEfSR7ZGF0YWRpcn0vc2hhcmU7IHRoZW4KKyAgICAgICAgICAgIG12IC1mICR7RH0ke2RhdGFkaXJ9L3NoYXJlLyogJHtEfSR7ZGF0YWRpcn0vCisgICAgICAgICAgICBybWRpciAke0R9JHtkYXRhZGlyfS9zaGFyZQorICAgICAgICBmaQorCisJIyBGaXggYmFja3BvcnQgbW9kdWxlcworCWlmIHRlc3QgLWUgJHtTVEFHSU5HX0xJQkRJUn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzL2JhY2twb3J0cy9fX2luaXRfXy5weSAmJiB0ZXN0IC1lICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9iYWNrcG9ydHMvX19pbml0X18ucHk7IHRoZW4KKwkgICBybSAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vYmFja3BvcnRzL19faW5pdF9fLnB5OworCSAgIHJtICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9iYWNrcG9ydHMvX19pbml0X18ucHljOworCWZpCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29tcGlsZSBkb19pbnN0YWxsCisKK2V4cG9ydCBMRFNIQVJFRD0iJHtDQ0xEfSAtc2hhcmVkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1iYXNlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLWJhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjNhYTAwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSw4IEBACitERVBFTkRTICArPSAiJHtAWyIke1BZVEhPTl9QTn0tbmF0aXZlICR7UFlUSE9OX1BOfSIsICIiXVsoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgPT0gJycpXX0iCitSREVQRU5EU18ke1BOfSArPSAiJHtAWycnLCAnJHtQWVRIT05fUE59LWNvcmUnXVsnJHtDTEFTU09WRVJSSURFfScgPT0gJ2NsYXNzLXRhcmdldCddfSIKKworUFlUSE9OX0JBU0VWRVJTSU9OID0gIjMuNCIKK1BZVEhPTl9BQkkgPSAibSIKKworaW5oZXJpdCBkaXN0dXRpbHMtY29tbW9uLWJhc2UgcHl0aG9uM25hdGl2ZQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLW5hdGl2ZS1iYXNlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLW5hdGl2ZS1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTExNzEwMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlsczMtbmF0aXZlLWJhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDQgQEAKK1BZVEhPTl9CQVNFVkVSU0lPTiA9ICIzLjQiCitQWVRIT05fQUJJID0gIm0iCisKK2luaGVyaXQgZGlzdHV0aWxzLW5hdGl2ZS1iYXNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkwOWVmNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlsczMuYmJjbGFzcwpAQCAtMCwwICsxLDk2IEBACitpbmhlcml0IGRpc3R1dGlsczMtYmFzZQorCitESVNUVVRJTFNfQlVJTERfQVJHUyA/PSAiIgorRElTVFVUSUxTX0JVSUxEX0VYVF9BUkdTID89ICIiCitESVNUVVRJTFNfU1RBR0VfSEVBREVSU19BUkdTID89ICItLWluc3RhbGwtZGlyPSR7U1RBR0lOR19JTkNESVJ9LyR7UFlUSE9OX0RJUn0iCitESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7U1RBR0lOR19EQVRBRElSfSIKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7RH0vJHtwcmVmaXh9IFwKKyAgICAtLWluc3RhbGwtZGF0YT0ke0R9LyR7ZGF0YWRpcn0iCisKK2Rpc3R1dGlsczNfZG9fY29tcGlsZSgpIHsKKyAgICAgICAgaWYgWyAke0JVSUxEX1NZU30gIT0gJHtIT1NUX1NZU30gXTsgdGhlbgorICAgICAgICAgICAgICAgIFNZUz0ke01BQ0hJTkV9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBTWVM9JHtIT1NUX1NZU30KKyAgICAgICAgZmkKKyAgICAgICAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtTWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IFwKKyAgICAgICAgYnVpbGQgJHtESVNUVVRJTFNfQlVJTERfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgYnVpbGRfZXh0IGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHMzX3N0YWdlX2hlYWRlcnMoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIGlmIFsgJHtCVUlMRF9TWVN9ICE9ICR7SE9TVF9TWVN9IF07IHRoZW4KKyAgICAgICAgICAgICAgICBTWVM9JHtNQUNISU5FfQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgU1lTPSR7SE9TVF9TWVN9CisgICAgICAgIGZpCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtTWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGxfaGVhZGVycyAke0RJU1RVVElMU19TVEFHRV9IRUFERVJTX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGxfaGVhZGVycyBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzM19zdGFnZV9hbGwoKSB7CisgICAgICAgIGlmIFsgJHtCVUlMRF9TWVN9ICE9ICR7SE9TVF9TWVN9IF07IHRoZW4KKyAgICAgICAgICAgICAgICBTWVM9JHtNQUNISU5FfQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgU1lTPSR7SE9TVF9TWVN9CisgICAgICAgIGZpCisgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICBpbnN0YWxsIC1kICR7U1RBR0lOR19ESVJfSE9TVH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorICAgICAgICBQWVRIT05QQVRIPSR7U1RBR0lOR19ESVJfSE9TVH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtTWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgJHtESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgKHN0YWdlKSBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzM19kb19pbnN0YWxsKCkgeworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorICAgICAgICBpZiBbICR7QlVJTERfU1lTfSAhPSAke0hPU1RfU1lTfSBdOyB0aGVuCisgICAgICAgICAgICAgICAgU1lTPSR7TUFDSElORX0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFNZUz0ke0hPU1RfU1lTfQorICAgICAgICBmaQorICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgUFlUSE9OUEFUSD0ke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7U1lTfSBcCisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsIC0taW5zdGFsbC1saWI9JHtEfS8ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSAke0RJU1RVVElMU19JTlNUQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgZXhlY3V0aW9uIGZhaWxlZC4iCisKKyAgICAgICAgIyBzdXBwb3J0IGZpbGVuYW1lcyB3aXRoICpzcGFjZXMqCisgICAgICAgIGZpbmQgJHtEfSAtbmFtZSAiKi5weSIgLWV4ZWMgZ3JlcCAtcSAke0R9IHt9IFw7IC1leGVjIHNlZCAtaSAtZSBzOiR7RH06Omcge30gXDsKKworICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke2JpbmRpcn0gOyB0aGVuCQorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7YmluZGlyfS8qIDsgZG8gXAorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfToke2JpbmRpcn0vZW52XCAke1BZVEhPTl9QTn06ZyAkaQorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfToke2JpbmRpcn06ZyAkaQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorCisgICAgICAgIGlmIHRlc3QgLWUgJHtEfSR7c2JpbmRpcn07IHRoZW4KKyAgICAgICAgICAgIGZvciBpIGluICR7RH0ke3NiaW5kaXJ9LyogOyBkbyBcCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi0ke1BZVEhPTl9QTn0vJHtQWVRIT05fUE59OiR7YmluZGlyfS9lbnZcICR7UFlUSE9OX1BOfTpnICRpCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OiR7YmluZGlyfTpnICRpCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKyAgICAgICAgcm0gLWYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2Vhc3ktaW5zdGFsbC5wdGgKKyAgICAgICAgCisgICAgICAgICMKKyAgICAgICAgIyBGSVhNRTogQmFuZGFpZCBhZ2FpbnN0IHdyb25nIGRhdGFkaXIgY29tcHV0YXRpb24KKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke2RhdGFkaXJ9L3NoYXJlOyB0aGVuCisgICAgICAgICAgICBtdiAtZiAke0R9JHtkYXRhZGlyfS9zaGFyZS8qICR7RH0ke2RhdGFkaXJ9LworICAgICAgICAgICAgcm1kaXIgJHtEfSR7ZGF0YWRpcn0vc2hhcmUKKyAgICAgICAgZmkKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb21waWxlIGRvX2luc3RhbGwKKworZXhwb3J0IExEU0hBUkVEPSIke0NDTER9IC1zaGFyZWQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9leHRlcm5hbHNyYy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZXh0ZXJuYWxzcmMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmE1ODE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZXh0ZXJuYWxzcmMuYmJjbGFzcwpAQCAtMCwwICsxLDkyIEBACisjIENvcHlyaWdodCAoQykgMjAxMiBMaW51eCBGb3VuZGF0aW9uCisjIEF1dGhvcjogUmljaGFyZCBQdXJkaWUKKyMgU29tZSBjb2RlIGFuZCBpbmZsdWVuY2UgdGFrZW4gZnJvbSBzcmN0cmVlLmJiY2xhc3M6CisjIENvcHlyaWdodCAoQykgMjAwOSBDaHJpcyBMYXJzb24gPGNsYXJzb25Aa2VyZ290aC5jb20+CisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCisjCisjIGV4dGVybmFsc3JjLmJiY2xhc3MgZW5hYmxlcyB1c2Ugb2YgYW4gZXhpc3Rpbmcgc291cmNlIHRyZWUsIHVzdWFsbHkgZXh0ZXJuYWwgdG8gCisjIHRoZSBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgYSBwaWVjZSBvZiBzb2Z0d2FyZSByYXRoZXIgdGhhbiB0aGUgdXN1YWwgZmV0Y2gvdW5wYWNrL3BhdGNoCisjIHByb2Nlc3MuCisjCisjIFRvIHVzZSwgYWRkIGV4dGVybmFsc3JjIHRvIHRoZSBnbG9iYWwgaW5oZXJpdCBhbmQgc2V0IEVYVEVSTkFMU1JDIHRvIHBvaW50IGF0IHRoZQorIyBkaXJlY3RvcnkgeW91IHdhbnQgdG8gdXNlIGNvbnRhaW5pbmcgdGhlIHNvdXJjZXMgZS5nLiBmcm9tIGxvY2FsLmNvbmYgZm9yIGEgcmVjaXBlCisjIGNhbGxlZCAibXlyZWNpcGUiIHlvdSB3b3VsZCBkbzoKKyMKKyMgSU5IRVJJVCArPSAiZXh0ZXJuYWxzcmMiCisjIEVYVEVSTkFMU1JDX3BuLW15cmVjaXBlID0gIi9wYXRoL3RvL215L3NvdXJjZS90cmVlIgorIworIyBJbiBvcmRlciB0byBtYWtlIHRoaXMgY2xhc3Mgd29yayBmb3IgYm90aCB0YXJnZXQgYW5kIG5hdGl2ZSB2ZXJzaW9ucyAob3Igd2l0aAorIyBtdWx0aWxpYnMvY3Jvc3Mgb3Igb3RoZXIgQkJDTEFTU0VYVEVORCB2YXJpYW50cyksIEIgaXMgc2V0IHRvIHBvaW50IHRvIGEgc2VwYXJhdGUKKyMgZGlyZWN0b3J5IHVuZGVyIHRoZSB3b3JrIGRpcmVjdG9yeSAoc3BsaXQgc291cmNlIGFuZCBidWlsZCBkaXJlY3RvcmllcykuIFRoaXMgaXMKKyMgdGhlIGRlZmF1bHQsIGJ1dCB0aGUgYnVpbGQgZGlyZWN0b3J5IGNhbiBiZSBzZXQgdG8gdGhlIHNvdXJjZSBkaXJlY3RvcnkgaWYKKyMgY2lyY3Vtc3RhbmNlcyBkaWN0YXRlIGJ5IHNldHRpbmcgRVhURVJOQUxTUkNfQlVJTEQgdG8gdGhlIHNhbWUgdmFsdWUsIGUuZy46CisjCisjIEVYVEVSTkFMU1JDX0JVSUxEX3BuLW15cmVjaXBlID0gIi9wYXRoL3RvL215L3NvdXJjZS90cmVlIgorIworCitTUkNUUkVFQ09WRVJFRFRBU0tTID89ICJkb19wYXRjaCBkb191bnBhY2sgZG9fZmV0Y2giCisKK3B5dGhvbiAoKSB7CisgICAgZXh0ZXJuYWxzcmMgPSBkLmdldFZhcignRVhURVJOQUxTUkMnLCBUcnVlKQorICAgIGlmIGV4dGVybmFsc3JjOgorICAgICAgICBkLnNldFZhcignUycsIGV4dGVybmFsc3JjKQorICAgICAgICBleHRlcm5hbHNyY2J1aWxkID0gZC5nZXRWYXIoJ0VYVEVSTkFMU1JDX0JVSUxEJywgVHJ1ZSkKKyAgICAgICAgaWYgZXh0ZXJuYWxzcmNidWlsZDoKKyAgICAgICAgICAgIGQuc2V0VmFyKCdCJywgZXh0ZXJuYWxzcmNidWlsZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdCJywgJyR7V09SS0RJUn0vJHtCUE59LSR7UFZ9LycpCisKKyAgICAgICAgbG9jYWxfc3JjdXJpID0gW10KKyAgICAgICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCksIGQpCisgICAgICAgIGZvciB1cmwgaW4gZmV0Y2gudXJsczoKKyAgICAgICAgICAgIHVybF9kYXRhID0gZmV0Y2gudWRbdXJsXQorICAgICAgICAgICAgcGFybSA9IHVybF9kYXRhLnBhcm0KKyAgICAgICAgICAgIGlmICh1cmxfZGF0YS50eXBlID09ICdmaWxlJyBvcgorICAgICAgICAgICAgICAgICAgICAndHlwZScgaW4gcGFybSBhbmQgcGFybVsndHlwZSddID09ICdrbWV0YScpOgorICAgICAgICAgICAgICAgIGxvY2FsX3NyY3VyaS5hcHBlbmQodXJsKQorCisgICAgICAgIGQuc2V0VmFyKCdTUkNfVVJJJywgJyAnLmpvaW4obG9jYWxfc3JjdXJpKSkKKworICAgICAgICBpZiAne1NSQ1BWfScgaW4gZC5nZXRWYXIoJ1BWJywgRmFsc2UpOgorICAgICAgICAgICAgIyBEdW1teSB2YWx1ZSBiZWNhdXNlIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIGNhbid0IGJlIGNhbGxlZCB3aXRoIGJsYW5rIFNSQ19VUkkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdTUkNQVicsICc5OTknKQorCisgICAgICAgIHRhc2tzID0gZmlsdGVyKGxhbWJkYSBrOiBkLmdldFZhckZsYWcoaywgInRhc2siKSwgZC5rZXlzKCkpCisKKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiB0YXNrLmVuZHN3aXRoKCJfc2V0c2NlbmUiKToKKyAgICAgICAgICAgICAgICAjIHNzdGF0ZSBpcyBuZXZlciBnb2luZyB0byB3b3JrIGZvciBleHRlcm5hbCBzb3VyY2UgdHJlZXMsIGRpc2FibGUgaXQKKyAgICAgICAgICAgICAgICBiYi5idWlsZC5kZWx0YXNrKHRhc2ssIGQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgU2luY2UgY29uZmlndXJlIHdpbGwgbGlrZWx5IHRvdWNoICR7U30sIGVuc3VyZSBvbmx5IHdlIGxvY2sgc28gb25lIHRhc2sgaGFzIGFjY2VzcyBhdCBhIHRpbWUKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcodGFzaywgImxvY2tmaWxlcyIsICIgJHtTfS9zaW5nbGV0YXNrLmxvY2siKQorCisgICAgICAgICAgICAjIFdlIGRvIG5vdCB3YW50IG91ciBzb3VyY2UgdG8gYmUgd2lwZWQgb3V0LCBldmVyIChrZXJuZWwuYmJjbGFzcyBkb2VzIHRoaXMgZm9yIGRvX2NsZWFuKQorICAgICAgICAgICAgY2xlYW5kaXJzID0gKGQuZ2V0VmFyRmxhZyh0YXNrLCAnY2xlYW5kaXJzJywgRmFsc2UpIG9yICcnKS5zcGxpdCgpCisgICAgICAgICAgICBzZXR2YWx1ZSA9IEZhbHNlCisgICAgICAgICAgICBmb3IgY2xlYW5kaXIgaW4gY2xlYW5kaXJzWzpdOgorICAgICAgICAgICAgICAgIGlmIGQuZXhwYW5kKGNsZWFuZGlyKSA9PSBleHRlcm5hbHNyYzoKKyAgICAgICAgICAgICAgICAgICAgY2xlYW5kaXJzLnJlbW92ZShjbGVhbmRpcikKKyAgICAgICAgICAgICAgICAgICAgc2V0dmFsdWUgPSBUcnVlCisgICAgICAgICAgICBpZiBzZXR2YWx1ZToKKyAgICAgICAgICAgICAgICBkLnNldFZhckZsYWcodGFzaywgJ2NsZWFuZGlycycsICcgJy5qb2luKGNsZWFuZGlycykpCisKKyAgICAgICAgZmV0Y2hfdGFza3MgPSBbJ2RvX2ZldGNoJywgJ2RvX3VucGFjayddCisgICAgICAgICMgSWYgd2UgZGVsdGFzayBkb19wYXRjaCwgdGhlcmUncyBubyBkZXBlbmRlbmN5IHRvIGVuc3VyZSBkb191bnBhY2sgZ2V0cyBydW4sIHNvIGFkZCBvbmUKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19jb25maWd1cmUnLCAnZGVwcycsIFsnZG9fdW5wYWNrJ10pCisKKyAgICAgICAgZm9yIHRhc2sgaW4gZC5nZXRWYXIoIlNSQ1RSRUVDT1ZFUkVEVEFTS1MiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgbG9jYWxfc3JjdXJpIGFuZCB0YXNrIGluIGZldGNoX3Rhc2tzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBiYi5idWlsZC5kZWx0YXNrKHRhc2ssIGQpCisKKyAgICAgICAgZC5wcmVwZW5kVmFyRmxhZygnZG9fY29tcGlsZScsICdwcmVmdW5jcycsICJleHRlcm5hbHNyY19jb21waWxlX3ByZWZ1bmMgIikKKworICAgICAgICAjIEVuc3VyZSBjb21waWxhdGlvbiBoYXBwZW5zIGV2ZXJ5IHRpbWUKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19jb21waWxlJywgJ25vc3RhbXAnLCAnMScpCit9CisKK3B5dGhvbiBleHRlcm5hbHNyY19jb21waWxlX3ByZWZ1bmMoKSB7CisgICAgIyBNYWtlIGl0IG9idmlvdXMgdGhhdCB0aGlzIGlzIGhhcHBlbmluZywgc2luY2UgZm9yZ2V0dGluZyBhYm91dCBpdCBjb3VsZCBsZWFkIHRvIG11Y2ggY29uZnVzaW9uCisgICAgYmIud2FybignQ29tcGlsaW5nICVzIGZyb20gZXh0ZXJuYWwgc291cmNlICVzJyAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgZC5nZXRWYXIoJ0VYVEVSTkFMU1JDJywgVHJ1ZSkpKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZXh0cmF1c2Vycy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZXh0cmF1c2Vycy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZjU3YjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9leHRyYXVzZXJzLmJiY2xhc3MKQEAgLTAsMCArMSw2NSBAQAorIyBUaGlzIGJiY2xhc3MgaXMgbWFpbmx5IHVzZWQgZm9yIGltYWdlIGxldmVsIHVzZXIvZ3JvdXAgY29uZmlndXJhdGlvbi4KKyMgSW5oZXJpdCB0aGlzIGNsYXNzIGlmIHlvdSB3YW50IHRvIG1ha2UgRVhUUkFfVVNFUlNfUEFSQU1TIGVmZmVjdGl2ZS4KKworIyBCZWxvdyBpcyBhbiBleGFtcGxlIHNob3dpbmcgaG93IHRvIHVzZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCisjIElOSEVSSVQgKz0gImV4dHJhdXNlcnMiCisjIEVYVFJBX1VTRVJTX1BBUkFNUyA9ICJcCisjIHVzZXJhZGQgLXAgJycgdGVzdGVyOyBcCisjIGdyb3VwYWRkIGRldmVsb3BlcnM7IFwKKyMgdXNlcmRlbCBub2JvZHk7IFwKKyMgZ3JvdXBkZWwgLWcgdmlkZW87IFwKKyMgZ3JvdXBtb2QgLWcgMTAyMCBkZXZlbG9wZXJzOyBcCisjIHVzZXJtb2QgLXMgL2Jpbi9zaCB0ZXN0ZXI7IFwKKyMgIgorCisKK2luaGVyaXQgdXNlcmFkZF9iYXNlCisKK0lNQUdFX0lOU1RBTExfYXBwZW5kID0gIiAke0BbJycsICdiYXNlLXBhc3N3ZCBzaGFkb3cnXVtib29sKGQuZ2V0VmFyKCdFWFRSQV9VU0VSU19QQVJBTVMnLCBUcnVlKSldfSIKKworIyBJbWFnZSBsZXZlbCB1c2VyIC8gZ3JvdXAgc2V0dGluZ3MKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EX2FwcGVuZCA9ICIgc2V0X3VzZXJfZ3JvdXA7IgorCisjIEltYWdlIGxldmVsIHVzZXIgLyBncm91cCBzZXR0aW5ncworc2V0X3VzZXJfZ3JvdXAgKCkgeworCXVzZXJfZ3JvdXBfc2V0dGluZ3M9IiR7RVhUUkFfVVNFUlNfUEFSQU1TfSIKKwlleHBvcnQgUFNFVURPPSIke0ZBS0VST09URU5WfSAke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcn0vcHNldWRvIgorCXNldHRpbmc9YGVjaG8gJHVzZXJfZ3JvdXBfc2V0dGluZ3MgfCBjdXQgLWQgJzsnIC1mMWAKKwlyZW1haW5pbmc9YGVjaG8gJHVzZXJfZ3JvdXBfc2V0dGluZ3MgfCBjdXQgLWQgJzsnIC1mMi1gCisJd2hpbGUgdGVzdCAieCRzZXR0aW5nIiAhPSAieCI7IGRvCisJCWNtZD1gZWNobyAkc2V0dGluZyB8IGN1dCAtZCAnICcgLWYxYAorCQlvcHRzPWBlY2hvICRzZXR0aW5nIHwgY3V0IC1kICcgJyAtZjItYAorCQkjIERpZmZlcmVudCBmcm9tIHVzZXJhZGQuYmJjbGFzcywgdGhlcmUncyBubyBmaWxlIGxvY2tpbmcgaXNzdWUgaGVyZSwgYXMKKwkJIyB0aGlzIHNldHRpbmcgaXMgYWN0dWFsbHkgYSBzZXJpYWwgcHJvY2Vzcy4gU28gd2Ugb25seSByZXRyeSBvbmNlLgorCQljYXNlICRjbWQgaW4KKwkJCXVzZXJhZGQpCisJCQkJcGVyZm9ybV91c2VyYWRkICIke0lNQUdFX1JPT1RGU30iICItUiAke0lNQUdFX1JPT1RGU30gJG9wdHMiIDEKKwkJCQk7OworCQkJZ3JvdXBhZGQpCisJCQkJcGVyZm9ybV9ncm91cGFkZCAiJHtJTUFHRV9ST09URlN9IiAiLVIgJHtJTUFHRV9ST09URlN9ICRvcHRzIiAxCisJCQkJOzsKKwkJCXVzZXJkZWwpCisJCQkJcGVyZm9ybV91c2VyZGVsICIke0lNQUdFX1JPT1RGU30iICItUiAke0lNQUdFX1JPT1RGU30gJG9wdHMiIDEKKwkJCQk7OworCQkJZ3JvdXBkZWwpCisJCQkJcGVyZm9ybV9ncm91cGRlbCAiJHtJTUFHRV9ST09URlN9IiAiLVIgJHtJTUFHRV9ST09URlN9ICRvcHRzIiAxCisJCQkJOzsKKwkJCXVzZXJtb2QpCisJCQkJcGVyZm9ybV91c2VybW9kICIke0lNQUdFX1JPT1RGU30iICItUiAke0lNQUdFX1JPT1RGU30gJG9wdHMiIDEKKwkJCQk7OworCQkJZ3JvdXBtb2QpCisJCQkJcGVyZm9ybV9ncm91cG1vZCAiJHtJTUFHRV9ST09URlN9IiAiLVIgJHtJTUFHRV9ST09URlN9ICRvcHRzIiAxCisJCQkJOzsKKwkJCSopCisJCQkJYmJmYXRhbCAiSW52YWxpZCBjb21tYW5kIGluIEVYVFJBX1VTRVJTX1BBUkFNUzogJGNtZCIKKwkJCQk7OworCQllc2FjCisJCSMgQXZvaWQgaW5maW5pdGUgbG9vcCBpZiB0aGUgbGFzdCBwYXJhbWV0ZXIgZG9lc24ndCBlbmQgd2l0aCAnOycKKwkJaWYgWyAiJHNldHRpbmciID0gIiRyZW1haW5pbmciIF07IHRoZW4KKwkJCWJyZWFrCisJCWZpCisJCSMgaXRlcmF0ZSB0byB0aGUgbmV4dCBzZXR0aW5nCisJCXNldHRpbmc9YGVjaG8gJHJlbWFpbmluZyB8IGN1dCAtZCAnOycgLWYxYAorCQlyZW1haW5pbmc9YGVjaG8gJHJlbWFpbmluZyB8IGN1dCAtZCAnOycgLWYyLWAKKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9mb250Y2FjaGUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ZvbnRjYWNoZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMjIzODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9mb250Y2FjaGUuYmJjbGFzcwpAQCAtMCwwICsxLDQ1IEBACisjCisjIFRoaXMgY2xhc3Mgd2lsbCBnZW5lcmF0ZSB0aGUgcHJvcGVyIHBvc3RpbnN0L3Bvc3RybSBzY3JpcHRsZXRzIGZvciBmb250CisjIHBhY2thZ2VzLgorIworCitERVBFTkRTICs9ICJxZW11LW5hdGl2ZSIKK2luaGVyaXQgcWVtdQorCitGT05UX1BBQ0tBR0VTID8/PSAiJHtQTn0iCitGT05UX0VYVFJBX1JERVBFTkRTID89ICJmb250Y29uZmlnLXV0aWxzIgorRk9OVENPTkZJR19DQUNIRV9ESVIgPz0gIiR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvZm9udGNvbmZpZyIKK2ZvbnRjYWNoZV9jb21tb24oKSB7CitpZiBbICJ4JEQiICE9ICJ4IiBdIDsgdGhlbgorCSRJTlRFUkNFUFRfRElSL3Bvc3RpbnN0X2ludGVyY2VwdCB1cGRhdGVfZm9udF9jYWNoZSAke1BLR30gbWxwcmVmaXg9JHtNTFBSRUZJWH0gYmluZGlyPSR7YmluZGlyfSBcCisJCWxpYmRpcj0ke2xpYmRpcn0gYmFzZV9saWJkaXI9JHtiYXNlX2xpYmRpcn0gZm9udGNvbmZpZ2NhY2hlZGlyPSR7Rk9OVENPTkZJR19DQUNIRV9ESVJ9CitlbHNlCisJZmMtY2FjaGUKK2ZpCit9CisKK3B5dGhvbiAoKSB7CisgICAgZm9udF9wa2dzID0gZC5nZXRWYXIoJ0ZPTlRfUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgZGVwcyA9IGQuZ2V0VmFyKCJGT05UX0VYVFJBX1JERVBFTkRTIiwgVHJ1ZSkKKworICAgIGZvciBwa2cgaW4gZm9udF9wa2dzOgorICAgICAgICBpZiBkZXBzOiBkLmFwcGVuZFZhcignUkRFUEVORFNfJyArIHBrZywgJyAnK2RlcHMpCit9CisKK3B5dGhvbiBhZGRfZm9udGNhY2hlX3Bvc3RpbnN0cygpIHsKKyAgICBmb3IgcGtnIGluIGQuZ2V0VmFyKCdGT05UX1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgYmIubm90ZSgiYWRkaW5nIGZvbnRzIHBvc3RpbnN0IGFuZCBwb3N0cm0gc2NyaXB0cyB0byAlcyIgJSBwa2cpCisgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdwa2dfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdGluc3QgKz0gZC5nZXRWYXIoJ2ZvbnRjYWNoZV9jb21tb24nLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcigncGtnX3Bvc3RybScsIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0cm06CisgICAgICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHBvc3RybSArPSBkLmdldFZhcignZm9udGNhY2hlX2NvbW1vbicsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorfQorCitQQUNLQUdFRlVOQ1MgPSsgImFkZF9mb250Y2FjaGVfcG9zdGluc3RzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZnMtdXVpZC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZnMtdXVpZC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMjYxM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9mcy11dWlkLmJiY2xhc3MKQEAgLTAsMCArMSwyNCBAQAorIyBFeHRyYWN0IFVVSUQgZnJvbSAke1JPT1RGU30sIHdoaWNoIG11c3QgaGF2ZSBiZWVuIGJ1aWx0CisjIGJ5IHRoZSB0aW1lIHRoYXQgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZC4gT25seSB3b3JrcworIyBvbiBleHQgZmlsZSBzeXN0ZW1zIGFuZCBkZXBlbmRzIG9uIHR1bmUyZnMuCitkZWYgZ2V0X3Jvb3Rmc191dWlkKGQpOgorICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgcm9vdGZzID0gZC5nZXRWYXIoJ1JPT1RGUycsIFRydWUpCisgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyd0dW5lMmZzJywgJy1sJywgcm9vdGZzXSkKKyAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnRmlsZXN5c3RlbSBVVUlEOicpOgorICAgICAgICAgICAgdXVpZCA9IGxpbmUuc3BsaXQoKVstMV0KKyAgICAgICAgICAgIGJiLm5vdGUoJ1VVSUQgb2YgJXM6ICVzJyAlIChyb290ZnMsIHV1aWQpKQorICAgICAgICAgICAgcmV0dXJuIHV1aWQKKyAgICBiYi5mYXRhbCgnQ291bGQgbm90IGRldGVybWluZSBmaWxlc3lzdGVtIFVVSUQgb2YgJXMnICUgcm9vdGZzKQorCisjIFJlcGxhY2UgdGhlIHNwZWNpYWwgPDx1dWlkLW9mLXJvb3Rmcz4+IGluc2lkZSBhIHN0cmluZyAobGlrZSB0aGUKKyMgcm9vdD0gQVBQRU5EIHN0cmluZyBpbiBhIHN5c2xpbnV4LmNmZyBvciBndW1taWJvb3QgZW50cnkpIHdpdGggdGhlCisjIGFjdHVhbCBVVUlEIG9mIHRoZSByb290ZnMuIERvZXMgbm90aGluZyBpZiB0aGUgc3BlY2lhbCBzdHJpbmcKKyMgaXMgbm90IHVzZWQuCitkZWYgcmVwbGFjZV9yb290ZnNfdXVpZChkLCBzdHJpbmcpOgorICAgIFVVSURfUExBQ0VIT0xERVIgPSAnPDx1dWlkLW9mLXJvb3Rmcz4+JworICAgIGlmIFVVSURfUExBQ0VIT0xERVIgaW4gc3RyaW5nOgorICAgICAgICB1dWlkID0gZ2V0X3Jvb3Rmc191dWlkKGQpCisgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKFVVSURfUExBQ0VIT0xERVIsIHV1aWQpCisgICAgcmV0dXJuIHN0cmluZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ2NvbmYuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2djb25mLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdhZmE3MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2djb25mLmJiY2xhc3MKQEAgLTAsMCArMSw3MCBAQAorREVQRU5EUyArPSAiZ2NvbmYgZ2NvbmYtbmF0aXZlIgorCisjIFRoZXNlIGFyZSBmb3Igd2hlbiBnY29uZnRvb2wgaXMgdXNlZCBuYXRpdmVseSBhbmQgdGhlIHByZWZpeCBpc24ndCBuZWNlc3NhcmlseQorIyB0aGUgc3lzcm9vdC4gIFRPRE86IHJlcGxpY2F0ZSB0aGUgcG9zdGluc3QgbG9naWMgZm9yIC1uYXRpdmUgcGFja2FnZXMgZ29pbmcKKyMgaW50byBzeXNyb290IGFzIHRoZXkgd29uJ3QgYmUgcnVubmluZyB0aGVpciBvd24gaW5zdGFsbC10aW1lIHNjaGVtYQorIyByZWdpc3RyYXRpb24gKGRpc2FibGVkIGJlbG93KSBub3IgdGhlIHBvc3RpbnN0IHNjcmlwdCAoYXMgdGhleSBkb24ndCBoYXBwZW4pLgorZXhwb3J0IEdDT05GX1NDSEVNQV9JTlNUQUxMX1NPVVJDRSA9ICJ4bWw6bWVyZ2VkOiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7c3lzY29uZmRpcn0vZ2NvbmYvZ2NvbmYueG1sLmRlZmF1bHRzIgorZXhwb3J0IEdDT05GX0JBQ0tFTkRfRElSID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9HQ29uZi8yIgorCisjIERpc2FibGUgaW5zdGFsbC10aW1lIHNjaGVtYSByZWdpc3RyYXRpb24gYXMgd2UncmUgYSBwYWNrYWdpbmcgc3lzdGVtIHNvIHRoaXMKKyMgaGFwcGVucyBpbiB0aGUgcG9zdGluc3Qgc2NyaXB0LCBub3QgYXQgaW5zdGFsbCB0aW1lLiAgU2V0IGJvdGggdGhlIGNvbmZpZ3VyZQorIyBzY3JpcHQgb3B0aW9uIGFuZCB0aGUgdHJhZGl0aW9uYWwgZW52aW9ubWVudCB2YXJpYWJsZSBqdXN0IHRvIG1ha2Ugc3VyZS4KK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXNjaGVtYXMtaW5zdGFsbCIKK2V4cG9ydCBHQ09ORl9ESVNBQkxFX01BS0VGSUxFX1NDSEVNQV9JTlNUQUxMID0gIjEiCisKK2djb25mX3Bvc3RpbnN0KCkgeworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorCWV4cG9ydCBHQ09ORl9DT05GSUdfU09VUkNFPSJ4bWw6OiREJHtzeXNjb25mZGlyfS9nY29uZi9nY29uZi54bWwuZGVmYXVsdHMiCitlbHNlCisJZXhwb3J0IEdDT05GX0NPTkZJR19TT1VSQ0U9YGdjb25mdG9vbC0yIC0tZ2V0LWRlZmF1bHQtc291cmNlYAorZmkKKworU0NIRU1BX0xPQ0FUSU9OPSREL2V0Yy9nY29uZi9zY2hlbWFzCitmb3IgU0NIRU1BIGluICR7U0NIRU1BX0ZJTEVTfTsgZG8KKwlpZiBbIC1lICRTQ0hFTUFfTE9DQVRJT04vJFNDSEVNQSBdOyB0aGVuCisJCUhPTUU9JEQvcm9vdCBnY29uZnRvb2wtMiBcCisJCQktLW1ha2VmaWxlLWluc3RhbGwtcnVsZSAkU0NIRU1BX0xPQ0FUSU9OLyRTQ0hFTUEgPiAvZGV2L251bGwKKwlmaQorZG9uZQorfQorCitnY29uZl9wcmVybSgpIHsKK1NDSEVNQV9MT0NBVElPTj0vZXRjL2djb25mL3NjaGVtYXMKK2ZvciBTQ0hFTUEgaW4gJHtTQ0hFTUFfRklMRVN9OyBkbworCWlmIFsgLWUgJFNDSEVNQV9MT0NBVElPTi8kU0NIRU1BIF07IHRoZW4KKwkJSE9NRT0vcm9vdCBHQ09ORl9DT05GSUdfU09VUkNFPWBnY29uZnRvb2wtMiAtLWdldC1kZWZhdWx0LXNvdXJjZWAgXAorCQkJZ2NvbmZ0b29sLTIgXAorCQkJLS1tYWtlZmlsZS11bmluc3RhbGwtcnVsZSAkU0NIRU1BX0xPQ0FUSU9OLyRTQ0hFTUEgPiAvZGV2L251bGwKKwlmaQorZG9uZQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfYXBwZW5kICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBwa2dkZXN0ID0gIGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICAKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBzY2hlbWFfZGlyID0gJyVzLyVzL2V0Yy9nY29uZi9zY2hlbWFzJyAlIChwa2dkZXN0LCBwa2cpCisgICAgICAgIHNjaGVtYXMgPSBbXQorICAgICAgICBzY2hlbWFfcmUgPSByZS5jb21waWxlKCIuKlwuc2NoZW1hcyQiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzY2hlbWFfZGlyKToKKyAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIoc2NoZW1hX2Rpcik6CisgICAgICAgICAgICAgICAgaWYgc2NoZW1hX3JlLm1hdGNoKGYpOgorICAgICAgICAgICAgICAgICAgICBzY2hlbWFzLmFwcGVuZChmKQorICAgICAgICBpZiBzY2hlbWFzICE9IFtdOgorICAgICAgICAgICAgYmIubm90ZSgiYWRkaW5nIGdjb25mIHBvc3RpbnN0IGFuZCBwcmVybSBzY3JpcHRzIHRvICVzIiAlIHBrZykKKyAgICAgICAgICAgIGQuc2V0VmFyKCdTQ0hFTUFfRklMRVMnLCAiICIuam9pbihzY2hlbWFzKSkKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignZ2NvbmZfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorICAgICAgICAgICAgcHJlcm0gPSBkLmdldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBwcmVybToKKyAgICAgICAgICAgICAgICBwcmVybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHByZXJtICs9IGQuZ2V0VmFyKCdnY29uZl9wcmVybScsIFRydWUpCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgcHJlcm0pCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiUkRFUEVORFNfJXMiICUgcGtnLCAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyAnZ2NvbmYnKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ2V0dGV4dC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ2V0dGV4dC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYjg5YjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nZXR0ZXh0LmJiY2xhc3MKQEAgLTAsMCArMSwxOSBAQAorZGVmIGdldHRleHRfZGVwZW5kZW5jaWVzKGQpOgorICAgIGlmIGQuZ2V0VmFyKCdJTkhJQklUX0RFRkFVTFRfREVQUycsIFRydWUpIGFuZCBub3Qgb2UudXRpbHMuaW5oZXJpdHMoZCwgJ2Nyb3NzLWNhbmFkaWFuJyk6CisgICAgICAgIHJldHVybiAiIgorICAgIGlmIGQuZ2V0VmFyKCdVU0VfTkxTJywgVHJ1ZSkgPT0gJ25vJzoKKyAgICAgICAgcmV0dXJuICJnZXR0ZXh0LW1pbmltYWwtbmF0aXZlIgorICAgIHJldHVybiBkLmdldFZhcignREVQRU5EU19HRVRURVhUJywgRmFsc2UpCisKK2RlZiBnZXR0ZXh0X29lY29uZihkKToKKyAgICBpZiBkLmdldFZhcignVVNFX05MUycsIFRydWUpID09ICdubyc6CisgICAgICAgIHJldHVybiAnLS1kaXNhYmxlLW5scycKKyAgICAjIFJlbW92ZSB0aGUgTkxTIGJpdHMgaWYgVVNFX05MUyBpcyBubyBvciBJTkhJQklUX0RFRkFVTFRfREVQUyBpcyBzZXQKKyAgICBpZiBkLmdldFZhcignSU5ISUJJVF9ERUZBVUxUX0RFUFMnLCBUcnVlKSBhbmQgbm90IG9lLnV0aWxzLmluaGVyaXRzKGQsICdjcm9zcy1jYW5hZGlhbicpOgorICAgICAgICByZXR1cm4gJy0tZGlzYWJsZS1ubHMnCisgICAgcmV0dXJuICItLWVuYWJsZS1ubHMiCisKK0RFUEVORFNfR0VUVEVYVCA/Pz0gInZpcnR1YWwvZ2V0dGV4dCBnZXR0ZXh0LW5hdGl2ZSIKKworQkFTRURFUEVORFMgPSsgIiR7QGdldHRleHRfZGVwZW5kZW5jaWVzKGQpfSIKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiICR7QGdldHRleHRfb2Vjb25mKGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dub21lLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nbm9tZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MjAyYmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nbm9tZS5iYmNsYXNzCkBAIC0wLDAgKzEgQEAKK2luaGVyaXQgZ25vbWViYXNlIGd0ay1pY29uLWNhY2hlIGdjb25mIG1pbWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dub21lYmFzZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ25vbWViYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIyYmE1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dub21lYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsMzMgQEAKK2RlZiBnbm9tZV92ZXJkaXIodik6CisgICAgcmV0dXJuIG9lLnV0aWxzLnRyaW1fdmVyc2lvbih2LCAyKQorCitHTk9NRV9DT01QUkVTU19UWVBFID89ICJ4eiIKK1NFQ1RJT04gPz0gIngxMS9nbm9tZSIKK0dOT01FQk4gPz0gIiR7QlBOfSIKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7R05PTUVCTn0vJHtAZ25vbWVfdmVyZGlyKCIke1BWfSIpfS8ke0dOT01FQk59LSR7UFZ9LnRhci4ke0dOT01FX0NPTVBSRVNTX1RZUEV9O25hbWU9YXJjaGl2ZSIKKworREVQRU5EUyArPSAiZ25vbWUtY29tbW9uLW5hdGl2ZSIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYXBwbGljYXRpb24tcmVnaXN0cnkgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21pbWUtaW5mbyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9taW1lL3BhY2thZ2VzIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21pbWUvYXBwbGljYXRpb24gXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ25vbWUtMi4wIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3BvbGtpdCogXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vR0NvbmYgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ2xpYi0yLjAvc2NoZW1hcyBcCisiCisKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkYXRhZGlyfS9kZXZoZWxwIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9zY3JvbGxrZWVwZXIvKgorCXJtIC1yZiAke0R9JHtsb2NhbHN0YXRlZGlyfS9zY3JvbGxrZWVwZXIvKgorCXJtIC1mICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8qLmNhY2hlCit9CisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCisKK1VOS05PV05fQ09ORklHVVJFX1dISVRFTElTVCArPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ncnViLWVmaS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3J1Yi1lZmkuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGRjMmJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3J1Yi1lZmkuYmJjbGFzcwpAQCAtMCwwICsxLDE0NSBAQAorIyBncnViLWVmaS5iYmNsYXNzCisjIENvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCisKKyMgUHJvdmlkZSBncnViLWVmaSBzcGVjaWZpYyBmdW5jdGlvbnMgZm9yIGJ1aWxkaW5nIGJvb3RhYmxlIGltYWdlcy4KKworIyBFeHRlcm5hbCB2YXJpYWJsZXMKKyMgJHtJTklUUkR9IC0gaW5kaWNhdGVzIGEgbGlzdCBvZiBmaWxlc3lzdGVtIGltYWdlcyB0byBjb25jYXRlbmF0ZSBhbmQgdXNlIGFzIGFuIGluaXRyZCAob3B0aW9uYWwpCisjICR7Uk9PVEZTfSAtIGluZGljYXRlcyBhIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gaW5jbHVkZSBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtIChvcHRpb25hbCkKKyMgJHtHUlVCX0dGWFNFUklBTH0gLSBzZXQgdGhpcyB0byAxIHRvIGhhdmUgZ3JhcGhpY3MgYW5kIHNlcmlhbCBpbiB0aGUgYm9vdCBtZW51CisjICR7TEFCRUxTfSAtIGEgbGlzdCBvZiB0YXJnZXRzIGZvciB0aGUgYXV0b21hdGljIGNvbmZpZworIyAke0FQUEVORH0gLSBhbiBvdmVycmlkZSBsaXN0IG9mIGFwcGVuZCBzdHJpbmdzIGZvciBlYWNoIGxhYmVsCisjICR7R1JVQl9PUFRTfSAtIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBhZGQgdG8gdGhlIGNvbmZpZywgJzsnIGRlbGltaXRlZCAjIChvcHRpb25hbCkKKyMgJHtHUlVCX1RJTUVPVVR9IC0gdGltZW91dCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBkZWF1bHQgbGFiZWwgKG9wdGlvbmFsKQorCitkb19ib290aW1nW2RlcGVuZHNdICs9ICIke01MUFJFRklYfWdydWItZWZpOmRvX2RlcGxveSIKK2RvX2Jvb3RkaXJlY3RkaXNrW2RlcGVuZHNdICs9ICIke01MUFJFRklYfWdydWItZWZpOmRvX2RlcGxveSIKKworR1JVQl9TRVJJQUwgPz0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIgorR1JVQkNGRyA9ICIke1N9L2dydWIuY2ZnIgorR1JVQl9USU1FT1VUID89ICIxMCIKKyNGSVhNRTogYnVpbGQgdGhpcyBmcm9tIHRoZSBtYWNoaW5lIGNvbmZpZworR1JVQl9PUFRTID89ICJzZXJpYWwgLS11bml0PTAgLS1zcGVlZD0xMTUyMDAgLS13b3JkPTggLS1wYXJpdHk9bm8gLS1zdG9wPTEiCisKK0VGSURJUiA9ICIvRUZJL0JPT1QiCisKKyMgTmVlZCBVVUlEIHV0aWxpdHkgY29kZS4KK2luaGVyaXQgZnMtdXVpZAorCitlZmlfcG9wdWxhdGUoKSB7CisJIyBERVNUIG11c3QgYmUgdGhlIHJvb3Qgb2YgdGhlIGltYWdlIHNvIHRoYXQgRUZJRElSIGlzIG5vdAorCSMgbmVzdGVkIHVuZGVyIGEgdG9wIGxldmVsIGRpcmVjdG9yeS4KKwlERVNUPSQxCisKKwlpbnN0YWxsIC1kICR7REVTVH0ke0VGSURJUn0KKworCUdSVUJfSU1BR0U9ImJvb3RpYTMyLmVmaSIKKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiBdOyB0aGVuCisJCUdSVUJfSU1BR0U9ImJvb3R4NjQuZWZpIgorCWZpCisJaW5zdGFsbCAtbSAwNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtHUlVCX0lNQUdFfSAke0RFU1R9JHtFRklESVJ9CisKKwlpbnN0YWxsIC1tIDA2NDQgJHtHUlVCQ0ZHfSAke0RFU1R9JHtFRklESVJ9L2dydWIuY2ZnCit9CisKK2VmaV9pc29fcG9wdWxhdGUoKSB7CisJaXNvX2Rpcj0kMQorCWVmaV9wb3B1bGF0ZSAkaXNvX2RpcgorCSMgQnVpbGQgYSBFRkkgZGlyZWN0b3J5IHRvIGNyZWF0ZSBlZmkuaW1nCisJbWtkaXIgLXAgJHtFRklJTUdESVJ9LyR7RUZJRElSfQorCWNwICRpc29fZGlyLyR7RUZJRElSfS8qICR7RUZJSU1HRElSfSR7RUZJRElSfQorCWNwICRpc29fZGlyL3ZtbGludXogJHtFRklJTUdESVJ9CisJZWNobyAiJHtHUlVCX0lNQUdFfSIgPiAke0VGSUlNR0RJUn0vc3RhcnR1cC5uc2gKKwlpZiBbIC1mICIkaXNvX2Rpci9pbml0cmQiIF0gOyB0aGVuCisJCWNwICRpc29fZGlyL2luaXRyZCAke0VGSUlNR0RJUn0KKwlmaQorfQorCitlZmlfaGRkaW1nX3BvcHVsYXRlKCkgeworCWVmaV9wb3B1bGF0ZSAkMQorfQorCitweXRob24gYnVpbGRfZWZpX2NmZygpIHsKKyAgICBpbXBvcnQgc3lzCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIGlmIG5vdCB3b3JrZGlyOgorICAgICAgICBiYi5lcnJvcigiV09SS0RJUiBub3QgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIGdmeHNlcmlhbCA9IGQuZ2V0VmFyKCdHUlVCX0dGWFNFUklBTCcsIFRydWUpIG9yICIiCisKKyAgICBsYWJlbHMgPSBkLmdldFZhcignTEFCRUxTJywgVHJ1ZSkKKyAgICBpZiBub3QgbGFiZWxzOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTEFCRUxTIG5vdCBkZWZpbmVkLCBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBsYWJlbHMgPT0gW106CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBsYWJlbHMsIG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKworICAgIGNmaWxlID0gZC5nZXRWYXIoJ0dSVUJDRkcnLCBUcnVlKQorICAgIGlmIG5vdCBjZmlsZToKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnVW5hYmxlIHRvIHJlYWQgR1JVQkNGRycpCisKKyAgICB0cnk6CisgICAgICAgICBjZmdmaWxlID0gZmlsZShjZmlsZSwgJ3cnKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICByYWlzZSBiYi5idWlsZC5mdW5jRmFpbGVkKCdVbmFibGUgdG8gb3BlbiAlcycgJSAoY2ZpbGUpKQorCisgICAgY2ZnZmlsZS53cml0ZSgnIyBBdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgT0VcbicpCisKKyAgICBvcHRzID0gZC5nZXRWYXIoJ0dSVUJfT1BUUycsIFRydWUpCisgICAgaWYgb3B0czoKKyAgICAgICAgZm9yIG9wdCBpbiBvcHRzLnNwbGl0KCc7Jyk6CisgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCclc1xuJyAlIG9wdCkKKworICAgIGNmZ2ZpbGUud3JpdGUoJ2RlZmF1bHQ9JXNcbicgJSAobGFiZWxzLnNwbGl0KClbMF0pKQorCisgICAgdGltZW91dCA9IGQuZ2V0VmFyKCdHUlVCX1RJTUVPVVQnLCBUcnVlKQorICAgIGlmIHRpbWVvdXQ6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ3RpbWVvdXQ9JXNcbicgJSB0aW1lb3V0KQorICAgIGVsc2U6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ3RpbWVvdXQ9NTBcbicpCisKKyAgICBpZiBnZnhzZXJpYWwgPT0gIjEiOgorICAgICAgICBidHlwZXMgPSBbIFsgIiBncmFwaGljcyBjb25zb2xlIiwgIiIgXSwKKyAgICAgICAgICAgIFsgIiBzZXJpYWwgY29uc29sZSIsIGQuZ2V0VmFyKCdHUlVCX1NFUklBTCcsIFRydWUpIG9yICIiIF0gXQorICAgIGVsc2U6CisgICAgICAgIGJ0eXBlcyA9IFsgWyAiIiwgIiIgXSBdCisKKyAgICBmb3IgbGFiZWwgaW4gbGFiZWxzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGQuY3JlYXRlQ29weSgpCisKKyAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IG92ZXJyaWRlczoKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoJ09WRVJSSURFUyBub3QgZGVmaW5lZCcpCisKKyAgICAgICAgZm9yIGJ0eXBlIGluIGJ0eXBlczoKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIGxhYmVsICsgJzonICsgb3ZlcnJpZGVzKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1xubWVudWVudHJ5IFwnJXMlc1wne1xuJyAlIChsYWJlbCwgYnR5cGVbMF0pKQorICAgICAgICAgICAgbGIgPSBsYWJlbAorICAgICAgICAgICAgaWYgbGFiZWwgPT0gImluc3RhbGwiOgorICAgICAgICAgICAgICAgIGxiID0gImluc3RhbGwtZWZpIgorICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnbGludXggL3ZtbGludXogTEFCRUw9JXMnICUgKGxiKSkKKworICAgICAgICAgICAgYXBwZW5kID0gbG9jYWxkYXRhLmdldFZhcignQVBQRU5EJywgVHJ1ZSkKKyAgICAgICAgICAgIGluaXRyZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ0lOSVRSRCcsIFRydWUpCisKKyAgICAgICAgICAgIGlmIGFwcGVuZDoKKyAgICAgICAgICAgICAgICBhcHBlbmQgPSByZXBsYWNlX3Jvb3Rmc191dWlkKGQsIGFwcGVuZCkKKyAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCclcycgJSAoYXBwZW5kKSkKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJyAlcycgJSBidHlwZVsxXSkKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1xuJykKKworICAgICAgICAgICAgaWYgaW5pdHJkOgorICAgICAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ2luaXRyZCAvaW5pdHJkJykKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1xufVxuJykKKworICAgIGNmZ2ZpbGUuY2xvc2UoKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3NldHRpbmdzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nc2V0dGluZ3MuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWM1YWJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3NldHRpbmdzLmJiY2xhc3MKQEAgLTAsMCArMSwzNyBAQAorIyBBIGJiY2xhc3MgdG8gaGFuZGxlIGluc3RhbGxlZCBHU2V0dGluZ3MgKGdsaWIpIHNjaGVtYXMsIHVwZGF0ZWQgdGhlIGNvbXBpbGVkCisjIGZvcm0gb24gcGFja2FnZSBpbnN0YWxsIGFuZCByZW1vdmUuCisjCisjIFRoZSBjb21waWxlZCBzY2hlbWFzIGFyZSBwbGF0Zm9ybS1hZ25vc3RpYywgc28gd2UgY2FuIGRlcGVuZCBvbgorIyBnbGliLTIuMC1uYXRpdmUgZm9yIHRoZSBuYXRpdmUgdG9vbCBhbmQgcnVuIHRoZSBwb3N0aW5zdCBzY3JpcHQgd2hlbiB0aGUKKyMgcm9vdGZzIGJ1aWxkcyB0byBzYXZlIGEgbGl0dGxlIHRpbWUgb24gZmlyc3QgYm9vdC4KKworIyBUT0RPIHVzZSBhIHRyaWdnZXIgc28gdGhhdCB0aGlzIHJ1bnMgb25jZSBwZXIgcGFja2FnZSBvcGVyYXRpb24gcnVuCisKK0RFUEVORFMgKz0gImdsaWItMi4wLW5hdGl2ZSIKKworUkRFUEVORFNfJHtQTn0gKz0gImdsaWItMi4wLXV0aWxzIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9nbGliLTIuMC9zY2hlbWFzIgorCitnc2V0dGluZ3NfcG9zdGluc3RybSAoKSB7CisJZ2xpYi1jb21waWxlLXNjaGVtYXMgJEQke2RhdGFkaXJ9L2dsaWItMi4wL3NjaGVtYXMKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX2FwcGVuZCAoKSB7CisgICAgcGtnID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBiYi5ub3RlKCJhZGRpbmcgZ3NldHRpbmdzIHBvc3RpbnN0IHNjcmlwdHMgdG8gJXMiICUgcGtnKQorCisgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdCcsIFRydWUpCisgICAgaWYgbm90IHBvc3RpbnN0OgorICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICBwb3N0aW5zdCArPSBkLmdldFZhcignZ3NldHRpbmdzX3Bvc3RpbnN0cm0nLCBUcnVlKQorICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKworICAgIGJiLm5vdGUoImFkZGluZyBnc2V0dGluZ3MgcG9zdHJtIHNjcmlwdHMgdG8gJXMiICUgcGtnKQorCisgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcigncGtnX3Bvc3RybScsIFRydWUpCisgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgcG9zdHJtID0gJyMhL2Jpbi9zaFxuJworICAgIHBvc3RybSArPSBkLmdldFZhcignZ3NldHRpbmdzX3Bvc3RpbnN0cm0nLCBUcnVlKQorICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWRvYy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWRvYy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMmY5OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ndGstZG9jLmJiY2xhc3MKQEAgLTAsMCArMSwyNSBAQAorIyBIZWxwZXIgY2xhc3MgdG8gcHVsbCBpbiB0aGUgcmlnaHQgZ3RrLWRvYyBkZXBlbmRlbmNpZXMgYW5kIGRpc2FibGUKKyMgZ3RrLWRvYy4KKyMKKyMgTG9uZy10ZXJtIGl0IHdvdWxkIGJlIGdyZWF0IGlmIHRoaXMgY2xhc3MgY291bGQgYmUgdG9nZ2xlZCBiZXR3ZWVuCisjIGd0ay1kb2Mtc3R1Yi1uYXRpdmUgYW5kIHRoZSByZWFsIGd0ay1kb2MtbmF0aXZlLCB3aGljaCB3b3VsZCBlbmFibGUKKyMgcmUtZ2VuZXJhdGlvbiBvZiBkb2N1bWVudGF0aW9uLiAgRm9yIG5vdywgd2UnbGwgbWFrZSBkbyB3aXRoIHRoaXMgd2hpY2gKKyMgcGFja2FnZXMgdXAgYW55IGV4aXN0aW5nIGRvY3VtZW50YXRpb24gKHNvIGZyb20gdGFyYmFsbCBidWlsZHMpLgorCisjIFRoZSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeSwgd2hlcmUgdGhlIGluZnJhc3RydWN0dXJlIHdpbGwgYmUgY29waWVkLgorIyBndGtkb2NpemUgaGFzIGEgZGVmYXVsdCBvZiAiLiIgc28gdG8gaGFuZGxlIG91dC1vZi10cmVlIGJ1aWxkcyBzZXQgdGhpcyB0byAkUy4KK0dUS0RPQ19ET0NESVIgPz0gIiR7U30iCisKK0RFUEVORFNfYXBwZW5kID0gIiBndGstZG9jLXN0dWItbmF0aXZlIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIlwKKyAgLS1kaXNhYmxlLWd0ay1kb2MgXAorICAtLWRpc2FibGUtZ3RrLWRvYy1odG1sIFwKKyAgLS1kaXNhYmxlLWd0ay1kb2MtcGRmIFwKKyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSggY2QgJHtTfTsgZ3RrZG9jaXplIC0tZG9jZGlyICR7R1RLRE9DX0RPQ0RJUn0gKQorfQorCitpbmhlcml0IHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWljb24tY2FjaGUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d0ay1pY29uLWNhY2hlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIzNThlMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d0ay1pY29uLWNhY2hlLmJiY2xhc3MKQEAgLTAsMCArMSw2MiBAQAorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vaWNvbnMvaGljb2xvciIKKworREVQRU5EUyArPSAiJHtAWydoaWNvbG9yLWljb24tdGhlbWUnLCAnJ11bJyR7QlBOfScgPT0gJ2hpY29sb3ItaWNvbi10aGVtZSddfSBndGstaWNvbi11dGlscy1uYXRpdmUiCisKK2d0a19pY29uX2NhY2hlX3Bvc3RpbnN0KCkgeworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorCSRJTlRFUkNFUFRfRElSL3Bvc3RpbnN0X2ludGVyY2VwdCB1cGRhdGVfaWNvbl9jYWNoZSAke1BLR30gbWxwcmVmaXg9JHtNTFBSRUZJWH0gbGliZGlyPSR7bGliZGlyfSBcCisJCWJhc2VfbGliZGlyPSR7YmFzZV9saWJkaXJ9CitlbHNlCisKKwkjIFVwZGF0ZSB0aGUgcGl4YnVmIGxvYWRlcnMgaW4gY2FzZSB0aGV5IGhhdmVuJ3QgYmVlbiByZWdpc3RlcmVkIHlldAorCUdES19QSVhCVUZfTU9EVUxFRElSPSR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8yLjEwLjAvbG9hZGVycyBnZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgLS11cGRhdGUtY2FjaGUKKworCWZvciBpY29uZGlyIGluIC91c3Ivc2hhcmUvaWNvbnMvKiA7IGRvCisJCWlmIFsgLWQgJGljb25kaXIgXSA7IHRoZW4KKwkJCWd0ay11cGRhdGUtaWNvbi1jYWNoZSAtZnF0ICAkaWNvbmRpcgorCQlmaQorCWRvbmUKK2ZpCit9CisKK2d0a19pY29uX2NhY2hlX3Bvc3RybSgpIHsKK2lmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKwkkSU5URVJDRVBUX0RJUi9wb3N0aW5zdF9pbnRlcmNlcHQgdXBkYXRlX2ljb25fY2FjaGUgJHtQS0d9IG1scHJlZml4PSR7TUxQUkVGSVh9IGxpYmRpcj0ke2xpYmRpcn0gXAorCQliYXNlX2xpYmRpcj0ke2Jhc2VfbGliZGlyfQorZWxzZQorCWZvciBpY29uZGlyIGluIC91c3Ivc2hhcmUvaWNvbnMvKiA7IGRvCisJCWlmIFsgLWQgJGljb25kaXIgXSA7IHRoZW4KKwkJCWd0ay11cGRhdGUtaWNvbi1jYWNoZSAtcXQgICRpY29uZGlyCisJCWZpCisJZG9uZQorZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX2FwcGVuZCAoKSB7CisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgcGtnZGVzdCA9ICBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgaWNvbl9kaXIgPSAnJXMvJXMvJXMvaWNvbnMnICUgKHBrZ2Rlc3QsIHBrZywgZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGljb25fZGlyKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgYmIubm90ZSgiYWRkaW5nIGhpY29sb3ItaWNvbi10aGVtZSBkZXBlbmRlbmN5IHRvICVzIiAlIHBrZykKKyAgICAgICAgcmRlcGVuZHMgPSAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyAiaGljb2xvci1pY29uLXRoZW1lIgorICAgICAgICBkLmFwcGVuZFZhcignUkRFUEVORFNfJXMnICUgcGtnLCByZGVwZW5kcykKKyAgICAKKyAgICAgICAgYmIubm90ZSgiYWRkaW5nIGd0ay1pY29uLWNhY2hlIHBvc3RpbnN0IGFuZCBwb3N0cm0gc2NyaXB0cyB0byAlcyIgJSBwa2cpCisgICAgICAgIAorICAgICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdGluc3QgKz0gZC5nZXRWYXIoJ2d0a19pY29uX2NhY2hlX3Bvc3RpbnN0JywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorCisgICAgICAgIHBvc3RybSA9IGQuZ2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgICAgIHBvc3RybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdHJtICs9IGQuZ2V0VmFyKCdndGtfaWNvbl9jYWNoZV9wb3N0cm0nLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIHBvc3RybSkKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWltbW9kdWxlcy1jYWNoZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWltbW9kdWxlcy1jYWNoZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNjMxNmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ndGstaW1tb2R1bGVzLWNhY2hlLmJiY2xhc3MKQEAgLTAsMCArMSw4MyBAQAorIyBUaGlzIGNsYXNzIHdpbGwgdXBkYXRlIHRoZSBpbnB1dG1ldGhvZCBtb2R1bGUgY2FjaGUgZm9yIHZpcnR1YWwga2V5Ym9hcmRzCisjCisjIFVzYWdlOiBTZXQgR1RLSU1NT0RVTEVTX1BBQ0tBR0VTIHRvIHRoZSBwYWNrYWdlcyB0aGF0IG5lZWRzIHRvIHVwZGF0ZSB0aGUgaW5wdXRtZXRob2QgbW9kdWxlcworCitERVBFTkRTID0rICJxZW11LW5hdGl2ZSIKKworaW5oZXJpdCBxZW11CisKK0dUS0lNTU9EVUxFU19QQUNLQUdFUyA/PSAiJHtQTn0iCisKK2d0a19pbW1vZHVsZV9jYWNoZV9wb3N0aW5zdCgpIHsKK2lmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKyAgICBmb3IgbWFqX3ZlciBpbiAyIDM7IGRvCisgICAgICAgIGlmIFsgLXggJEQke2JpbmRpcn0vZ3RrLXF1ZXJ5LWltbW9kdWxlcy0kbWFqX3Zlci4wIF07IHRoZW4KKyAgICAgICAgICAgIElNRklMRVM9JChscyAkRCR7bGliZGlyfS9ndGstJG1hal92ZXIuMC8qL2ltbW9kdWxlcy8qLnNvKQorICAgICAgICAgICAgJHtAcWVtdV9ydW5fYmluYXJ5KGQsICckRCcsICcke2JpbmRpcn0vZ3RrLXF1ZXJ5LWltbW9kdWxlcy0kbWFqX3Zlci4wJyl9IFwKKyAgICAgICAgICAgICAgICAkSU1GSUxFUyA+ICREL2V0Yy9ndGstJG1hal92ZXIuMC9ndGsuaW1tb2R1bGVzIDI+L2Rldi9udWxsICYmCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lICJzOiREOjoiICREL2V0Yy9ndGstJG1hal92ZXIuMC9ndGsuaW1tb2R1bGVzCisKKyAgICAgICAgICAgIFsgJD8gLW5lIDAgXSAmJiBleGl0IDEKKyAgICAgICAgZmkKKyAgICBkb25lCisKKyAgICBleGl0IDAKK2ZpCitpZiBbICEgLXogYHdoaWNoIGd0ay1xdWVyeS1pbW1vZHVsZXMtMi4wYCBdOyB0aGVuCisgICAgZ3RrLXF1ZXJ5LWltbW9kdWxlcy0yLjAgPiAvZXRjL2d0ay0yLjAvZ3RrLmltbW9kdWxlcworZmkKK2lmIFsgISAteiBgd2hpY2ggZ3RrLXF1ZXJ5LWltbW9kdWxlcy0zLjBgIF07IHRoZW4KKyAgICBndGstcXVlcnktaW1tb2R1bGVzLTMuMCA+IC9ldGMvZ3RrLTMuMC9ndGsuaW1tb2R1bGVzCitmaQorfQorCitndGtfaW1tb2R1bGVfY2FjaGVfcG9zdHJtKCkgeworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorICAgIGZvciBtYWpfdmVyIGluIDIgMzsgZG8KKyAgICAgICAgaWYgWyAteCAkRCR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLSRtYWpfdmVyLjAgXTsgdGhlbgorICAgICAgICAgICAgSU1GSUxFUz0kKGxzICREJHtsaWJkaXJ9L2d0ay0kbWFqX3Zlci4wLyovaW1tb2R1bGVzLyouc28pCisgICAgICAgICAgICAke0BxZW11X3J1bl9iaW5hcnkoZCwgJyREJywgJyR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLSRtYWpfdmVyLjAnKX0gXAorICAgICAgICAgICAgICAgICRJTUZJTEVTID4gJEQvZXRjL2d0ay0kbWFqX3Zlci4wL2d0ay5pbW1vZHVsZXMgMj4vZGV2L251bGwgJiYKKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgInM6JEQ6OiIgJEQvZXRjL2d0ay0kbWFqX3Zlci4wL2d0ay5pbW1vZHVsZXMKKworICAgICAgICAgICAgWyAkPyAtbmUgMCBdICYmIGV4aXQgMQorICAgICAgICBmaQorICAgIGRvbmUKKworICAgIGV4aXQgMAorZmkKK2lmIFsgISAteiBgd2hpY2ggZ3RrLXF1ZXJ5LWltbW9kdWxlcy0yLjBgIF07IHRoZW4KKyAgICBndGstcXVlcnktaW1tb2R1bGVzLTIuMCA+IC9ldGMvZ3RrLTIuMC9ndGsuaW1tb2R1bGVzCitmaQoraWYgWyAhIC16IGB3aGljaCBndGstcXVlcnktaW1tb2R1bGVzLTMuMGAgXTsgdGhlbgorICAgIGd0ay1xdWVyeS1pbW1vZHVsZXMtMy4wID4gL2V0Yy9ndGstMy4wL2d0ay5pbW1vZHVsZXMKK2ZpCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19hcHBlbmQgKCkgeworICAgIGd0a2ltbW9kdWxlc19wa2dzID0gZC5nZXRWYXIoJ0dUS0lNTU9EVUxFU19QQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKworICAgIGZvciBwa2cgaW4gZ3RraW1tb2R1bGVzX3BrZ3M6CisgICAgICAgICAgICBiYi5ub3RlKCJhZGRpbmcgZ3RrLWltbW9kdWxlLWNhY2hlIHBvc3RpbnN0IGFuZCBwb3N0cm0gc2NyaXB0cyB0byAlcyIgJSBwa2cpCisKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignZ3RrX2ltbW9kdWxlX2NhY2hlX3Bvc3RpbnN0JywgVHJ1ZSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKworICAgICAgICAgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0cm0gKz0gZC5nZXRWYXIoJ2d0a19pbW1vZHVsZV9jYWNoZV9wb3N0cm0nLCBUcnVlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBwb3N0cm0pCit9CisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBndGtpbW1vZHVsZXNfY2hlY2sgPSBkLmdldFZhcignR1RLSU1NT0RVTEVTX1BBQ0tBR0VTJywgRmFsc2UpCisgICAgICAgIGlmIG5vdCBndGtpbW1vZHVsZXNfY2hlY2s6CisgICAgICAgICAgICBiYl9maWxlbmFtZSA9IGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJFUlJPUjogJXMgaW5oZXJpdHMgZ3RrLWltbW9kdWxlcy1jYWNoZSBidXQgZG9lc24ndCBzZXQgR1RLSU1NT0RVTEVTX1BBQ0tBR0VTIiAlIGJiX2ZpbGVuYW1lKQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ndW1taWJvb3QuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d1bW1pYm9vdC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkOWMwOGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ndW1taWJvb3QuYmJjbGFzcwpAQCAtMCwwICsxLDExOCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgZ3VtbWlib290LmJiY2xhc3MgLSBlcXVpdmFsZW50IG9mIGdydWItZWZpLmJiY2xhc3MKKyMgU2V0IEVGSV9QUk9WSURFUiA9ICJndW1taWJvb3QiIHRvIHVzZSBndW1taWJvb3Qgb24geW91ciBsaXZlIGltYWdlcyBpbnN0ZWFkIG9mIGdydWItZWZpCisjIChpbWFnZXMgYnVpbHQgYnkgYm9vdGltYWdlLmJiY2xhc3Mgb3IgYm9vdC1kaXJlY3RkaXNrLmJiY2xhc3MpCisKK2RvX2Jvb3RpbWdbZGVwZW5kc10gKz0gIiR7TUxQUkVGSVh9Z3VtbWlib290OmRvX2RlcGxveSIKK2RvX2Jvb3RkaXJlY3RkaXNrW2RlcGVuZHNdICs9ICIke01MUFJFRklYfWd1bW1pYm9vdDpkb19kZXBsb3kiCisKK0VGSURJUiA9ICIvRUZJL0JPT1QiCisKK0dVTU1JQk9PVF9DRkcgPz0gIiR7U30vbG9hZGVyLmNvbmYiCitHVU1NSUJPT1RfRU5UUklFUyA/PSAiIgorR1VNTUlCT09UX1RJTUVPVVQgPz0gIjEwIgorCisjIE5lZWQgVVVJRCB1dGlsaXR5IGNvZGUuCitpbmhlcml0IGZzLXV1aWQKKworZWZpX3BvcHVsYXRlKCkgeworICAgICAgICBERVNUPSQxCisKKyAgICAgICAgRUZJX0lNQUdFPSJndW1taWJvb3RpYTMyLmVmaSIKKyAgICAgICAgREVTVF9FRklfSU1BR0U9ImJvb3RpYTMyLmVmaSIKKyAgICAgICAgaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgXTsgdGhlbgorICAgICAgICAgICAgRUZJX0lNQUdFPSJndW1taWJvb3R4NjQuZWZpIgorICAgICAgICAgICAgREVTVF9FRklfSU1BR0U9ImJvb3R4NjQuZWZpIgorICAgICAgICBmaQorCisgICAgICAgIGluc3RhbGwgLWQgJHtERVNUfSR7RUZJRElSfQorICAgICAgICAjIGd1bW1pYm9vdCByZXF1aXJlcyB0aGVzZSBwYXRocyBmb3IgY29uZmlndXJhdGlvbiBmaWxlcworICAgICAgICAjIHRoZXkgYXJlIG5vdCBjdXN0b21pemFibGUgc28gbm8gcG9pbnQgaW4gbmV3IHZhcnMKKyAgICAgICAgaW5zdGFsbCAtZCAke0RFU1R9L2xvYWRlcgorICAgICAgICBpbnN0YWxsIC1kICR7REVTVH0vbG9hZGVyL2VudHJpZXMKKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtFRklfSU1BR0V9ICR7REVTVH0ke0VGSURJUn0vJHtERVNUX0VGSV9JTUFHRX0KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7R1VNTUlCT09UX0NGR30gJHtERVNUfS9sb2FkZXIvbG9hZGVyLmNvbmYKKyAgICAgICAgZm9yIGkgaW4gJHtHVU1NSUJPT1RfRU5UUklFU307IGRvCisgICAgICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtpfSAke0RFU1R9L2xvYWRlci9lbnRyaWVzCisgICAgICAgIGRvbmUKK30KKworZWZpX2lzb19wb3B1bGF0ZSgpIHsKKyAgICAgICAgaXNvX2Rpcj0kMQorICAgICAgICBlZmlfcG9wdWxhdGUgJGlzb19kaXIKKyAgICAgICAgbWtkaXIgLXAgJHtFRklJTUdESVJ9LyR7RUZJRElSfQorICAgICAgICBjcCAkaXNvX2Rpci8ke0VGSURJUn0vKiAke0VGSUlNR0RJUn0ke0VGSURJUn0KKyAgICAgICAgY3AgJGlzb19kaXIvdm1saW51eiAke0VGSUlNR0RJUn0KKyAgICAgICAgZWNobyAiJHtERVNUX0VGSV9JTUFHRX0iID4gJHtFRklJTUdESVJ9L3N0YXJ0dXAubnNoCisgICAgICAgIGlmIFsgLWYgIiRpc29fZGlyL2luaXRyZCIgXSA7IHRoZW4KKyAgICAgICAgICAgIGNwICRpc29fZGlyL2luaXRyZCAke0VGSUlNR0RJUn0KKyAgICAgICAgZmkKK30KKworZWZpX2hkZGltZ19wb3B1bGF0ZSgpIHsKKyAgICAgICAgZWZpX3BvcHVsYXRlICQxCit9CisKK3B5dGhvbiBidWlsZF9lZmlfY2ZnKCkgeworICAgIHMgPSBkLmdldFZhcigiUyIsIFRydWUpCisgICAgbGFiZWxzID0gZC5nZXRWYXIoJ0xBQkVMUycsIFRydWUpCisgICAgaWYgbm90IGxhYmVsczoKKyAgICAgICAgYmIuZGVidWcoMSwgIkxBQkVMUyBub3QgZGVmaW5lZCwgbm90aGluZyB0byBkbyIpCisgICAgICAgIHJldHVybgorCisgICAgaWYgbGFiZWxzID09IFtdOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gbGFiZWxzLCBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBjZmlsZSA9IGQuZ2V0VmFyKCdHVU1NSUJPT1RfQ0ZHJywgVHJ1ZSkKKyAgICB0cnk6CisgICAgICAgICBjZmdmaWxlID0gb3BlbihjZmlsZSwgJ3cnKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICByYWlzZSBiYi5idWlsZC5mdW5jRmFpbGVkKCdVbmFibGUgdG8gb3BlbiAlcycgJSAoY2ZpbGUpKQorCisgICAgY2ZnZmlsZS53cml0ZSgnIyBBdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgT0VcbicpCisgICAgY2ZnZmlsZS53cml0ZSgnZGVmYXVsdCAlc1xuJyAlIChsYWJlbHMuc3BsaXQoKVswXSkpCisgICAgdGltZW91dCA9IGQuZ2V0VmFyKCdHVU1NSUJPT1RfVElNRU9VVCcsIFRydWUpCisgICAgaWYgdGltZW91dDoKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgndGltZW91dCAlc1xuJyAlIHRpbWVvdXQpCisgICAgZWxzZToKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgndGltZW91dCAxMFxuJykKKyAgICBjZmdmaWxlLmNsb3NlKCkKKworICAgIGZvciBsYWJlbCBpbiBsYWJlbHMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gZC5jcmVhdGVDb3B5KCkKKworICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKQorICAgICAgICBpZiBub3Qgb3ZlcnJpZGVzOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnT1ZFUlJJREVTIG5vdCBkZWZpbmVkJykKKworICAgICAgICBlbnRyeWZpbGUgPSAiJXMvJXMuY29uZiIgJSAocywgbGFiZWwpCisgICAgICAgIGQuYXBwZW5kVmFyKCJHVU1NSUJPT1RfRU5UUklFUyIsICIgIiArIGVudHJ5ZmlsZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZW50cnljZmcgPSBvcGVuKGVudHJ5ZmlsZSwgInciKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLmZ1bmNGYWlsZWQoJ1VuYWJsZSB0byBvcGVuICVzJyAlIChlbnRyeWZpbGUpKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBsYWJlbCArICc6JyArIG92ZXJyaWRlcykKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgZW50cnljZmcud3JpdGUoJ3RpdGxlICVzXG4nICUgbGFiZWwpCisgICAgICAgIGVudHJ5Y2ZnLndyaXRlKCdsaW51eCAvdm1saW51elxuJykKKworICAgICAgICBhcHBlbmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdBUFBFTkQnLCBUcnVlKQorICAgICAgICBpbml0cmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdJTklUUkQnLCBUcnVlKQorCisgICAgICAgIGlmIGluaXRyZDoKKyAgICAgICAgICAgIGVudHJ5Y2ZnLndyaXRlKCdpbml0cmQgL2luaXRyZFxuJykKKyAgICAgICAgbGIgPSBsYWJlbAorICAgICAgICBpZiBsYWJlbCA9PSAiaW5zdGFsbCI6CisgICAgICAgICAgICBsYiA9ICJpbnN0YWxsLWVmaSIKKyAgICAgICAgZW50cnljZmcud3JpdGUoJ29wdGlvbnMgTEFCRUw9JXMgJyAlIGxiKQorICAgICAgICBpZiBhcHBlbmQ6CisgICAgICAgICAgICBhcHBlbmQgPSByZXBsYWNlX3Jvb3Rmc191dWlkKGQsIGFwcGVuZCkKKyAgICAgICAgICAgIGVudHJ5Y2ZnLndyaXRlKCclcycgJSBhcHBlbmQpCisgICAgICAgIGVudHJ5Y2ZnLndyaXRlKCdcbicpCisgICAgICAgIGVudHJ5Y2ZnLmNsb3NlKCkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d6aXBuYXRpdmUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d6aXBuYXRpdmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjZjYmJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3ppcG5hdGl2ZS5iYmNsYXNzCkBAIC0wLDAgKzEsNSBAQAorRVhUUkFOQVRJVkVQQVRIICs9ICJwaWd6LW5hdGl2ZSBnemlwLW5hdGl2ZSIKK0RFUEVORFMgKz0gImd6aXAtbmF0aXZlIgorCisjIHRhciBtYXkgZ2V0IHJ1biBieSBkb191bnBhY2sgb3IgZG9fcG9wdWxhdGVfbGljIHdoaWNoIGNvdWxkIGNhbGwgZ3ppcAorZG9fdW5wYWNrW2RlcGVuZHNdICs9ICJnemlwLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaWNlY2MuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ljZWNjLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFiOGJiMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ljZWNjLmJiY2xhc3MKQEAgLTAsMCArMSwzMzMgQEAKKyMgSWNlQ3JlYW0gZGlzdHJpYnV0ZWQgY29tcGlsaW5nIHN1cHBvcnQKKyMKKyMgU3RhZ2VzIGRpcmVjdG9yaWVzIHdpdGggc3ltbGlua3MgZnJvbSBnY2MvZysrIHRvIGljZWNjLCBmb3IgYm90aAorIyBuYXRpdmUgYW5kIGNyb3NzIGNvbXBpbGVycy4gRGVwZW5kaW5nIG9uIGVhY2ggY29uZmlndXJlIG9yIGNvbXBpbGUsCisjIHRoZSBkaXJlY3RvcmllcyBhcmUgYWRkZWQgYXQgdGhlIGhlYWQgb2YgdGhlIFBBVEggbGlzdCBhbmQgSUNFQ0NfQ1hYCisjIGFuZCBJQ0VDX0NDIGFyZSBzZXQuCisjCisjIEZvciB0aGUgY3Jvc3MgY29tcGlsZXIsIGNyZWF0ZXMgYSB0YXIuZ3ogb2Ygb3VyIHRvb2xjaGFpbiBhbmQgc2V0cworIyBJQ0VDQ19WRVJTSU9OIGFjY29yZGluZ2x5LgorIworIyBUaGUgY2xhc3Mgbm93IGhhbmRsZXMgYWxsIDMgZGlmZmVyZW50IGNvbXBpbGUgJ3N0YWdlcycgKGkuZSBuYXRpdmUgLGNyb3NzLWtlcm5lbCBhbmQgdGFyZ2V0KSBjcmVhdGluZyB0aGUKKyMgbmVjZXNzYXJ5IGVudmlyb25tZW50IHRhci5neiBmaWxlIHRvIGJlIHVzZWQgYnkgdGhlIHJlbW90ZSBtYWNoaW5lcy4KKyMgSXQgYWxzbyBzdXBwb3J0cyBtZXRhLXRvb2xjaGFpbiBnZW5lcmF0aW9uCisjCisjIElmIElDRUNDX1BBVEggaXMgbm90IHNldCBpbiBsb2NhbC5jb25mIHRoZW4gdGhlIGNsYXNzIHdpbGwgdHJ5IHRvIGxvY2F0ZSBpdCB1c2luZyAnYmIudXRpbHMud2hpY2gnCisjIGJ1dCBub3RoaW5nIGlzIHN1cmUgOykKKyMKKyMgSWYgSUNFQ0NfRU5WX0VYRUMgaXMgc2V0IGluIGxvY2FsLmNvbmYsIHRoZW4gaXQgc2hvdWxkIHBvaW50IHRvIHRoZSBpY2VjYy1jcmVhdGUtZW52IHNjcmlwdCBwcm92aWRlZCBieSB0aGUgdXNlcgorIyBvciB0aGUgZGVmYXVsdCBvbmUgcHJvdmlkZWQgYnkgaWNlY2MtY3JlYXRlLWVudi5iYiB3aWxsIGJlIHVzZWQKKyMgKE5PVEUgdGhhdCB0aGlzIGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgc2NyaXB0IG5lZWQgaXQgYW5kICpub3QgdGhlIG9uZSB0aGF0IGNvbWVzIHdpdGggaWNlY2MqCisjCisjIFVzZXIgY2FuIHNwZWNpZnkgaWYgc3BlY2lmaWMgcGFja2FnZXMgb3IgcGFja2FnZXMgYmVsb25naW5nIHRvIGNsYXNzIHNob3VsZCBub3QgdXNlIGljZWNjIHRvIGRpc3RyaWJ1dGUKKyMgY29tcGlsZSBqb2JzIHRvIHJlbW90ZSBtYWNoaW5lcywgYnV0IGhhbmRsZWQgbG9jYWxseSwgYnkgZGVmaW5pbmcgSUNFQ0NfVVNFUl9DTEFTU19CTCBhbmQgSUNFQ0NfVVNFUl9QQUNLQUdFX0JMCisjIHdpdGggdGhlIGFwcHJvcHJpYXRlIHZhbHVlcyBpbiBsb2NhbC5jb25mLiBJbiBhZGRpdGlvbiB0aGUgdXNlciBjYW4gZm9yY2UgdG8gZW5hYmxlIGljZWNjIGZvciBwYWNrYWdlcworIyB3aGljaCBzZXQgYW4gZW1wdHkgUEFSQUxMRUxfTUFLRSB2YXJpYWJsZSBieSBkZWZpbmluZyBJQ0VDQ19VU0VSX1BBQ0tBR0VfV0wuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworI0Vycm9yIGNoZWNraW5nIGlzIGtlcHQgdG8gbWluaW11bSBzbyBkb3VibGUgY2hlY2sgYW55IHBhcmFtZXRlcnMgeW91IHBhc3MgdG8gdGhlIGNsYXNzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0JCX0hBU0hCQVNFX1dISVRFTElTVCArPSAiSUNFQ0NfUEFSQUxMRUxfTUFLRSBJQ0VDQ19ESVNBQkxFRCBJQ0VDQ19VU0VSX1BBQ0tBR0VfQkwgSUNFQ0NfVVNFUl9DTEFTU19CTCBJQ0VDQ19VU0VSX1BBQ0tBR0VfV0wgSUNFQ0NfUEFUSCBJQ0VDQ19FTlZfRVhFQyIKKworSUNFQ0NfRU5WX0VYRUMgPz0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9pY2VjYy1jcmVhdGUtZW52IgorCitkZWYgaWNlY2NfZGVwX3ByZXBlbmQoZCk6CisgICAgIyBJTkhJQklUX0RFRkFVTFRfREVQUyBkb2Vzbid0IGFwcGx5IHRvIHRoZSBwYXRjaCBjb21tYW5kLiAgV2hldGhlciBvciAgbm90CisgICAgIyB3ZSBuZWVkIHRoYXQgYnVpbHQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBwYXRjaCBmdW5jdGlvbiAvIGNsYXNzLCBub3QKKyAgICAjIHRoZSBhcHBsaWNhdGlvbi4KKyAgICBpZiBub3QgZC5nZXRWYXIoJ0lOSElCSVRfREVGQVVMVF9ERVBTJywgRmFsc2UpOgorICAgICAgICByZXR1cm4gImljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlIgorICAgIHJldHVybiAiIgorCitERVBFTkRTX3ByZXBlbmQgKz0gIiR7QGljZWNjX2RlcF9wcmVwZW5kKGQpfSAiCisKK2RlZiBnZXRfY3Jvc3Nfa2VybmVsX2NjKGJiLGQpOgorICAgIGtlcm5lbF9jYyA9IGQuZ2V0VmFyKCdLRVJORUxfQ0MnLCBGYWxzZSkKKworICAgICMgZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYnkgdGhlIHNoZWxsIGlmIG5lY2Vzc2FyeQorICAgIGlmICdgJyBpbiBrZXJuZWxfY2Mgb3IgJyQoJyBpbiBrZXJuZWxfY2M6CisgICAgICAgIGtlcm5lbF9jYyA9IG9zLnBvcGVuKCJlY2hvICVzIiAlIGtlcm5lbF9jYykucmVhZCgpWzotMV0KKworICAgIGtlcm5lbF9jYyA9IGQuZXhwYW5kKGtlcm5lbF9jYykKKyAgICBrZXJuZWxfY2MgPSBrZXJuZWxfY2MucmVwbGFjZSgnY2NhY2hlJywgJycpLnN0cmlwKCkKKyAgICBrZXJuZWxfY2MgPSBrZXJuZWxfY2Muc3BsaXQoJyAnKVswXQorICAgIGtlcm5lbF9jYyA9IGtlcm5lbF9jYy5zdHJpcCgpCisgICAgcmV0dXJuIGtlcm5lbF9jYworCitkZWYgZ2V0X2ljZWNjKGQpOgorICAgIHJldHVybiBkLmdldFZhcignSUNFQ0NfUEFUSCcsIEZhbHNlKSBvciBiYi51dGlscy53aGljaChvcy5nZXRlbnYoIlBBVEgiKSwgImljZWNjIikKKworZGVmIGNyZWF0ZV9wYXRoKGNvbXBpbGVycywgYmIsIGQpOgorICAgICIiIgorICAgIENyZWF0ZSBTeW1saW5rcyBmb3IgdGhlIGljZWNjIGluIHRoZSBzdGFnaW5nIGRpcmVjdG9yeQorICAgICIiIgorICAgIHN0YWdpbmcgPSBvcy5wYXRoLmpvaW4oZC5leHBhbmQoJyR7U1RBR0lOR19CSU5ESVJ9JyksICJpY2UiKQorICAgIGlmIGljY19pc19rZXJuZWwoYmIsIGQpOgorICAgICAgICBzdGFnaW5nICs9ICIta2VybmVsIgorCisgICAgI2NoZWNrIGlmIHRoZSBpY2VjYyBwYXRoIGlzIHNldCBieSB0aGUgdXNlcgorICAgIGljZWNjID0gZ2V0X2ljZWNjKGQpCisKKyAgICAjIENyZWF0ZSB0aGUgZGlyIGlmIG5lY2Vzc2FyeQorICAgIHRyeToKKyAgICAgICAgb3Muc3RhdChzdGFnaW5nKQorICAgIGV4Y2VwdDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MubWFrZWRpcnMoc3RhZ2luZykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgZm9yIGNvbXBpbGVyIGluIGNvbXBpbGVyczoKKyAgICAgICAgZ2NjX3BhdGggPSBvcy5wYXRoLmpvaW4oc3RhZ2luZywgY29tcGlsZXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnN0YXQoZ2NjX3BhdGgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKGljZWNjLCBnY2NfcGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICByZXR1cm4gc3RhZ2luZworCitkZWYgdXNlX2ljYyhiYixkKToKKyAgICBpZiBkLmdldFZhcignSUNFQ0NfRElTQUJMRUQnLCBGYWxzZSkgPT0gIjEiOgorICAgICAgICAjIGRvbid0IGV2ZW4gdHJ5IGl0LCB3aGVuIGV4cGxpY2l0bHkgZGlzYWJsZWQKKyAgICAgICAgcmV0dXJuICJubyIKKworICAgICMgYWxsYXJjaCByZWNpcGVzIGRvbid0IHVzZSBjb21waWxlcgorICAgIGlmIGljY19pc19hbGxhcmNoKGJiLCBkKToKKyAgICAgICAgcmV0dXJuICJubyIKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgIHN5c3RlbV9jbGFzc19ibGFja2xpc3QgPSBbXQorICAgIHVzZXJfY2xhc3NfYmxhY2tsaXN0ID0gKGQuZ2V0VmFyKCdJQ0VDQ19VU0VSX0NMQVNTX0JMJywgRmFsc2UpIG9yICJub25lIikuc3BsaXQoKQorICAgIHBhY2thZ2VfY2xhc3NfYmxhY2tsaXN0ID0gc3lzdGVtX2NsYXNzX2JsYWNrbGlzdCArIHVzZXJfY2xhc3NfYmxhY2tsaXN0CisKKyAgICBmb3IgYmxhY2sgaW4gcGFja2FnZV9jbGFzc19ibGFja2xpc3Q6CisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoYmxhY2ssIGQpOgorICAgICAgICAgICAgYmIuZGVidWcoMSwgIiVzOiBjbGFzcyAlcyBmb3VuZCBpbiBibGFja2xpc3QsIGRpc2FibGUgaWNlY2MiICUgKHBuLCBibGFjaykpCisgICAgICAgICAgICByZXR1cm4gIm5vIgorCisgICAgIyAic3lzdGVtIiByZWNpcGUgYmxhY2tsaXN0IGNvbnRhaW5zIGEgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGNhbiBub3QgZGlzdHJpYnV0ZSBjb21waWxlIHRhc2tzCisgICAgIyBmb3Igb25lIHJlYXNvbiBvciB0aGUgb3RoZXIKKyAgICAjIHRoaXMgaXMgdGhlIG9sZCBsaXN0ICh3aGljaCBkb2Vzbid0IHNlZW0gdG8gYmUgdmFsaWQgYW55bW9yZSwgYmVjYXVzZSBJIHdhcyBhYmxlIHRvIGJ1aWxkCisgICAgIyBhbGwgdGhlc2Ugd2l0aCBpY2VjYyBlbmFibGVkKQorICAgICMgc3lzdGVtX3BhY2thZ2VfYmxhY2tsaXN0ID0gWyAidWNsaWJjIiwgImdsaWJjIiwgImdjYyIsICJiaW5kIiwgInUtYm9vdCIsICJkaGNwLWZvcndhcmRlciIsICJlbmNoYW50IiwgImNvbm5tYW4iLCAib3JiaXQyIiBdCisgICAgIyB3aGVuIGFkZGluZyBuZXcgZW50cnksIHBsZWFzZSBkb2N1bWVudCB3aHkgKGhvdyBpdCBmYWlsZWQpIHNvIHRoYXQgd2UgY2FuIHJlLWV2YWx1YXRlIGl0IGxhdGVyCisgICAgIyBlLmcuIHdoZW4gdGhlcmUgaXMgbmV3IHZlcnNpb24KKyAgICAjIGJ1aWxkaW5nIGxpYmdjYy1pbml0aWFsIHdpdGggaWNlY2MgZmFpbHMgd2l0aCBDUFAgc2FuaXR5IGNoZWNrIGVycm9yIGlmIGhvc3Qgc3lzcm9vdCBjb250YWlucyBjcm9zcyBnY2MgYnVpbHQgZm9yIGFub3RoZXIgdGFyZ2V0IHR1bmUvdmFyaWFudAorICAgIHN5c3RlbV9wYWNrYWdlX2JsYWNrbGlzdCA9IFsibGliZ2NjLWluaXRpYWwiXQorICAgIHVzZXJfcGFja2FnZV9ibGFja2xpc3QgPSAoZC5nZXRWYXIoJ0lDRUNDX1VTRVJfUEFDS0FHRV9CTCcsIEZhbHNlKSBvciAiIikuc3BsaXQoKQorICAgIHVzZXJfcGFja2FnZV93aGl0ZWxpc3QgPSAoZC5nZXRWYXIoJ0lDRUNDX1VTRVJfUEFDS0FHRV9XTCcsIEZhbHNlKSBvciAiIikuc3BsaXQoKQorICAgIHBhY2thZ2VfYmxhY2tsaXN0ID0gc3lzdGVtX3BhY2thZ2VfYmxhY2tsaXN0ICsgdXNlcl9wYWNrYWdlX2JsYWNrbGlzdAorCisgICAgaWYgcG4gaW4gcGFja2FnZV9ibGFja2xpc3Q6CisgICAgICAgIGJiLmRlYnVnKDEsICIlczogZm91bmQgaW4gYmxhY2tsaXN0LCBkaXNhYmxlIGljZWNjIiAlIHBuKQorICAgICAgICByZXR1cm4gIm5vIgorCisgICAgaWYgcG4gaW4gdXNlcl9wYWNrYWdlX3doaXRlbGlzdDoKKyAgICAgICAgYmIuZGVidWcoMSwgIiVzOiBmb3VuZCBpbiB3aGl0ZWxpc3QsIGVuYWJsZSBpY2VjYyIgJSBwbikKKyAgICAgICAgcmV0dXJuICJ5ZXMiCisKKyAgICBpZiBkLmdldFZhcignUEFSQUxMRUxfTUFLRScsIEZhbHNlKSA9PSAiIjoKKyAgICAgICAgYmIuZGVidWcoMSwgIiVzOiBoYXMgZW1wdHkgUEFSQUxMRUxfTUFLRSwgZGlzYWJsZSBpY2VjYyIgJSBwbikKKyAgICAgICAgcmV0dXJuICJubyIKKworICAgIHJldHVybiAieWVzIgorCitkZWYgaWNjX2lzX2FsbGFyY2goYmIsIGQpOgorICAgIHJldHVybiBkLmdldFZhcigiUEFDS0FHRV9BUkNIIiwgRmFsc2UpID09ICJhbGwiCisKK2RlZiBpY2NfaXNfa2VybmVsKGJiLCBkKToKKyAgICByZXR1cm4gXAorICAgICAgICBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJrZXJuZWwiLCBkKTsKKworZGVmIGljY19pc19uYXRpdmUoYmIsIGQpOgorICAgIHJldHVybiBcCisgICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoImNyb3NzIiwgZCkgb3IgXAorICAgICAgICBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJuYXRpdmUiLCBkKTsKKworIyBEb24ndCBwb2xsdXRlIGFsbGFyY2ggc2lnbmF0dXJlcyB3aXRoIFRBUkdFVF9GUFUKK2ljY192ZXJzaW9uW3ZhcmRlcHNleGNsdWRlXSArPSAiVEFSR0VUX0ZQVSIKK2RlZiBpY2NfdmVyc2lvbihiYiwgZCk6CisgICAgaWYgdXNlX2ljYyhiYiwgZCkgPT0gIm5vIjoKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBwYXJhbGxlbCA9IGQuZ2V0VmFyKCdJQ0VDQ19QQVJBTExFTF9NQUtFJywgRmFsc2UpIG9yICIiCisgICAgaWYgbm90IGQuZ2V0VmFyKCdQQVJBTExFTF9NQUtFJywgRmFsc2UpID09ICIiIGFuZCBwYXJhbGxlbDoKKyAgICAgICAgZC5zZXRWYXIoIlBBUkFMTEVMX01BS0UiLCBwYXJhbGxlbCkKKworICAgIGlmIGljY19pc19uYXRpdmUoYmIsIGQpOgorICAgICAgICBhcmNoaXZlX25hbWUgPSAibG9jYWwtaG9zdC1lbnYiCisgICAgZWxpZiBkLmV4cGFuZCgnJHtIT1NUX1BSRUZJWH0nKSA9PSAiIjoKKyAgICAgICAgYmIuZmF0YWwoZC5leHBhbmQoIiR7UE59IiksICIgTlVMTCBwcmVmaXgiKQorICAgIGVsc2U6CisgICAgICAgIHByZWZpeCA9IGQuZXhwYW5kKCcke0hPU1RfUFJFRklYfScgKQorICAgICAgICBkaXN0cm8gPSBkLmV4cGFuZCgnJHtESVNUUk99JykKKyAgICAgICAgdGFyZ2V0X3N5cyA9IGQuZXhwYW5kKCcke1RBUkdFVF9TWVN9JykKKyAgICAgICAgZmxvYXQgPSBkLmdldFZhcignVEFSR0VUX0ZQVScsIEZhbHNlKSBvciAiaGFyZCIKKyAgICAgICAgYXJjaGl2ZV9uYW1lID0gcHJlZml4ICsgZGlzdHJvICsgIi0iICAgICAgICArIHRhcmdldF9zeXMgKyAiLSIgKyBmbG9hdAorICAgICAgICBpZiBpY2NfaXNfa2VybmVsKGJiLCBkKToKKyAgICAgICAgICAgIGFyY2hpdmVfbmFtZSArPSAiLWtlcm5lbCIKKworICAgIGltcG9ydCBzb2NrZXQKKyAgICBpY2VfZGlyID0gZC5leHBhbmQoJyR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0nKQorICAgIHRhcl9maWxlID0gb3MucGF0aC5qb2luKGljZV9kaXIsICdpY2UnLCBhcmNoaXZlX25hbWUgKyAiLUBWRVJTSU9OQC0iICsgc29ja2V0LmdldGhvc3RuYW1lKCkgKyAnLnRhci5neicpCisKKyAgICByZXR1cm4gdGFyX2ZpbGUKKworZGVmIGljY19wYXRoKGJiLGQpOgorICAgIGlmIHVzZV9pY2MoYmIsIGQpID09ICJubyI6CisgICAgICAgICMgZG9uJ3QgY3JlYXRlIHVubmVjZXNzYXJ5IGRpcmVjdG9yaWVzIHdoZW4gaWNlY2MgaXMgZGlzYWJsZWQKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBpY2NfaXNfa2VybmVsKGJiLCBkKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZV9wYXRoKCBbZ2V0X2Nyb3NzX2tlcm5lbF9jYyhiYixkKSwgXSwgYmIsIGQpCisKKyAgICBlbHNlOgorICAgICAgICBwcmVmaXggPSBkLmV4cGFuZCgnJHtIT1NUX1BSRUZJWH0nKQorICAgICAgICByZXR1cm4gY3JlYXRlX3BhdGgoIFtwcmVmaXgrImdjYyIsIHByZWZpeCsiZysrIl0sIGJiLCBkKQorCitkZWYgaWNjX2dldF9leHRlcm5hbF90b29sKGJiLCBkLCB0b29sKToKKyAgICBleHRlcm5hbF90b29sY2hhaW5fYmluZGlyID0gZC5leHBhbmQoJyR7RVhURVJOQUxfVE9PTENIQUlOfSR7YmluZGlyX2Nyb3NzfScpCisgICAgdGFyZ2V0X3ByZWZpeCA9IGQuZXhwYW5kKCcke1RBUkdFVF9QUkVGSVh9JykKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGV4dGVybmFsX3Rvb2xjaGFpbl9iaW5kaXIsICclcyVzJyAlICh0YXJnZXRfcHJlZml4LCB0b29sKSkKKworIyBEb24ndCBwb2xsdXRlIG5hdGl2ZSBzaWduYXR1cmVzIHdpdGggdGFyZ2V0IFRVTkVfUEtHQVJDSCB0aHJvdWdoIFNUQUdJTkdfQklORElSX1RPT0xDSEFJTgoraWNjX2dldF90b29sW3ZhcmRlcHNleGNsdWRlXSArPSAiU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOIgorZGVmIGljY19nZXRfdG9vbChiYiwgZCwgdG9vbCk6CisgICAgaWYgaWNjX2lzX25hdGl2ZShiYiwgZCk6CisgICAgICAgIHJldHVybiBiYi51dGlscy53aGljaChvcy5nZXRlbnYoIlBBVEgiKSwgdG9vbCkKKyAgICBlbGlmIGljY19pc19rZXJuZWwoYmIsIGQpOgorICAgICAgICByZXR1cm4gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCJQQVRIIiksIGdldF9jcm9zc19rZXJuZWxfY2MoYmIsIGQpKQorICAgIGVsc2U6CisgICAgICAgIGljZV9kaXIgPSBkLmV4cGFuZCgnJHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59JykKKyAgICAgICAgdGFyZ2V0X3N5cyA9IGQuZXhwYW5kKCcke1RBUkdFVF9TWVN9JykKKyAgICAgICAgdG9vbF9iaW4gPSBvcy5wYXRoLmpvaW4oaWNlX2RpciwgIiVzLSVzIiAlICh0YXJnZXRfc3lzLCB0b29sKSkKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUodG9vbF9iaW4pOgorICAgICAgICAgICAgcmV0dXJuIHRvb2xfYmluCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleHRlcm5hbF90b29sX2JpbiA9IGljY19nZXRfZXh0ZXJuYWxfdG9vbChiYiwgZCwgdG9vbCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGV4dGVybmFsX3Rvb2xfYmluKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZXh0ZXJuYWxfdG9vbF9iaW4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICIiCisKK2RlZiBpY2NfZ2V0X2FuZF9jaGVja190b29sKGJiLCBkLCB0b29sKToKKyAgICAjIENoZWNrIHRoYXQgZysrIG9yIGdjYyBpcyBub3QgYSBzeW1ib2xpYyBsaW5rIHRvIGljZWNjIGJpbmFyeSBpbgorICAgICMgUEFUSCBvciBpY2VjYy1jcmVhdGUtZW52IHNjcmlwdCB3aWxsIHNpbGVudGx5IGNyZWF0ZSBhbiBpbnZhbGlkCisgICAgIyBjb21waWxlciBlbnZpcm9ubWVudCBwYWNrYWdlLgorICAgIHQgPSBpY2NfZ2V0X3Rvb2woYmIsIGQsIHRvb2wpCisgICAgaWYgdCBhbmQgb3MucG9wZW4oInJlYWRsaW5rIC1mICVzIiAlIHQpLnJlYWQoKVs6LTFdID09IGdldF9pY2VjYyhkKToKKyAgICAgICAgYmIuZXJyb3IoIiVzIGlzIGEgc3ltbGluayB0byAlcyBpbiBQQVRIIGFuZCB0aGlzIHByZXZlbnRzIGljZWNjIGZyb20gd29ya2luZyIgJSAodCwgZ2V0X2ljZWNjKGQpKSkKKyAgICAgICAgcmV0dXJuICIiCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHQKKword2FpdF9mb3JfZmlsZSgpIHsKKyAgICBsb2NhbCBUSU1FX0VMQVBTRUQ9MAorICAgIGxvY2FsIEZJTEVfVE9fVEVTVD0kMQorICAgIGxvY2FsIFRJTUVPVVQ9JDIKKyAgICB1bnRpbCBbIC1mICIkRklMRV9UT19URVNUIiBdCisgICAgZG8KKyAgICAgICAgVElNRV9FTEFQU0VEPWBleHByICRUSU1FX0VMQVBTRUQgKyAxYAorICAgICAgICBpZiBbICRUSU1FX0VMQVBTRUQgLWd0ICRUSU1FT1VUIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZmkKKyAgICAgICAgc2xlZXAgMQorICAgIGRvbmUKK30KKworZGVmIHNldF9pY2VjY19lbnYoKToKKyAgICAjIGR1bW15IHB5dGhvbiB2ZXJzaW9uIG9mIHNldF9pY2VjY19lbnYKKyAgICByZXR1cm4KKworc2V0X2ljZWNjX2VudigpIHsKKyAgICBpZiBbICIke0B1c2VfaWNjKGJiLCBkKX0iID0gIm5vIiBdCisgICAgdGhlbgorICAgICAgICByZXR1cm4KKyAgICBmaQorICAgIElDRUNDX1ZFUlNJT049IiR7QGljY192ZXJzaW9uKGJiLCBkKX0iCisgICAgaWYgWyAieCR7SUNFQ0NfVkVSU0lPTn0iID0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGJid2FybiAiQ2Fubm90IHVzZSBpY2VjYzogY291bGQgbm90IGdldCBJQ0VDQ19WRVJTSU9OIgorICAgICAgICByZXR1cm4KKyAgICBmaQorCisgICAgSUNFX1BBVEg9IiR7QGljY19wYXRoKGJiLCBkKX0iCisgICAgaWYgWyAieCR7SUNFX1BBVEh9IiA9ICJ4IiBdCisgICAgdGhlbgorICAgICAgICBiYndhcm4gIkNhbm5vdCB1c2UgaWNlY2M6IGNvdWxkIG5vdCBnZXQgSUNFX1BBVEgiCisgICAgICAgIHJldHVybgorICAgIGZpCisKKyAgICBJQ0VDQ19DQz0iJHtAaWNjX2dldF9hbmRfY2hlY2tfdG9vbChiYiwgZCwgImdjYyIpfSIKKyAgICBJQ0VDQ19DWFg9IiR7QGljY19nZXRfYW5kX2NoZWNrX3Rvb2woYmIsIGQsICJnKysiKX0iCisgICAgIyBjYW5ub3QgdXNlIGljY19nZXRfYW5kX2NoZWNrX3Rvb2wgaGVyZSBiZWNhdXNlIGl0IGFzc3VtZXMgYXMgd2l0aG91dCB0YXJnZXRfc3lzIHByZWZpeAorICAgIElDRUNDX1dISUNIX0FTPSIke0BiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgJ2FzJyl9IgorICAgIGlmIFsgISAteCAiJHtJQ0VDQ19DQ30iIC1vICEgLXggIiR7SUNFQ0NfQ1hYfSIgXQorICAgIHRoZW4KKyAgICAgICAgYmJ3YXJuICJDYW5ub3QgdXNlIGljZWNjOiBjb3VsZCBub3QgZ2V0IElDRUNDX0NDIG9yIElDRUNDX0NYWCIKKyAgICAgICAgcmV0dXJuCisgICAgZmkKKworICAgIElDRV9WRVJTSU9OPWAkSUNFQ0NfQ0MgLWR1bXB2ZXJzaW9uYAorICAgIElDRUNDX1ZFUlNJT049YGVjaG8gJHtJQ0VDQ19WRVJTSU9OfSB8IHNlZCAtZSAicy9AVkVSU0lPTkAvJElDRV9WRVJTSU9OL2ciYAorICAgIGlmIFsgISAteCAiJHtJQ0VDQ19FTlZfRVhFQ30iIF0KKyAgICB0aGVuCisgICAgICAgIGJid2FybiAiQ2Fubm90IHVzZSBpY2VjYzogaW52YWxpZCBJQ0VDQ19FTlZfRVhFQyIKKyAgICAgICAgcmV0dXJuCisgICAgZmkKKworICAgIElDRUNDX0FTPSJgJHtJQ0VDQ19DQ30gLXByaW50LXByb2ctbmFtZT1hc2AiCisgICAgIyBmb3IgdGFyZ2V0IHJlY2lwZXMgc2hvdWxkIHJldHVybiBzb21ldGhpbmcgbGlrZToKKyAgICAjIC9PRS90bXAtZWdsaWJjL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliZXhlYy9hcm05MjB0dC1vZS1saW51eC1nbnVlYWJpL2djYy9hcm0tb2UtbGludXgtZ251ZWFiaS80LjguMi9hcworICAgICMgYW5kIGp1c3QgImFzIiBmb3IgbmF0aXZlLCBpZiBpdCByZXR1cm5zICJhcyIgaW4gY3VycmVudCBkaXJlY3RvcnkgKGZvciB3aGF0ZXZlciByZWFzb24pIHVzZSAiYXMiIGZyb20gUEFUSAorICAgIGlmIFsgImBkaXJuYW1lICIke0lDRUNDX0FTfSJgIiA9ICIuIiBdCisgICAgdGhlbgorICAgICAgICBJQ0VDQ19BUz0iJHtJQ0VDQ19XSElDSF9BU30iCisgICAgZmkKKworICAgIGlmIFsgISAtZiAiJHtJQ0VDQ19WRVJTSU9OfS5kb25lIiBdCisgICAgdGhlbgorICAgICAgICBta2RpciAtcCAiYGRpcm5hbWUgIiR7SUNFQ0NfVkVSU0lPTn0iYCIKKworICAgICAgICAjIHRoZSBJQ0VDQ19WRVJTSU9OIGdlbmVyYXRpb24gc3RlcCBtdXN0IGJlIGxvY2tlZCBieSBhIG11dGV4CisgICAgICAgICMgaW4gb3JkZXIgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMKKyAgICAgICAgaWYgZmxvY2sgLW4gIiR7SUNFQ0NfVkVSU0lPTn0ubG9jayIgXAorICAgICAgICAgICAgJHtJQ0VDQ19FTlZfRVhFQ30gIiR7SUNFQ0NfQ0N9IiAiJHtJQ0VDQ19DWFh9IiAiJHtJQ0VDQ19BU30iICIke0lDRUNDX1ZFUlNJT059IgorICAgICAgICB0aGVuCisgICAgICAgICAgICB0b3VjaCAiJHtJQ0VDQ19WRVJTSU9OfS5kb25lIgorICAgICAgICBlbGlmIFsgISB3YWl0X2Zvcl9maWxlICIke0lDRUNDX1ZFUlNJT059LmRvbmUiIDMwIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgIyBsb2NraW5nIGZhaWxlZCBzbyB3YWl0IGZvciAke0lDRUNDX1ZFUlNJT059LmRvbmUgdG8gYXBwZWFyCisgICAgICAgICAgICBiYndhcm4gIlRpbWVvdXQgd2FpdGluZyBmb3IgJHtJQ0VDQ19WRVJTSU9OfS5kb25lIgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGZpCisgICAgZmkKKworICAgIGV4cG9ydCBJQ0VDQ19WRVJTSU9OIElDRUNDX0NDIElDRUNDX0NYWAorICAgIGV4cG9ydCBQQVRIPSIkSUNFX1BBVEg6JFBBVEgiCisgICAgZXhwb3J0IENDQUNIRV9QQVRIPSIkUEFUSCIKKworICAgIGJibm90ZSAiVXNpbmcgaWNlY2MiCit9CisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNldF9pY2VjY19lbnYKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgIHNldF9pY2VjY19lbnYKK30KKworZG9fY29tcGlsZV9rZXJuZWxtb2R1bGVzX3ByZXBlbmQoKSB7CisgICAgc2V0X2ljZWNjX2VudgorfQorCitkb19pbnN0YWxsX3ByZXBlbmQoKSB7CisgICAgc2V0X2ljZWNjX2VudgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtYnVpbGRpbmZvLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1idWlsZGluZm8uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTE3Y2M4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtYnVpbGRpbmZvLmJiY2xhc3MKQEAgLTAsMCArMSw2OSBAQAorIworIyBXcml0ZXMgYnVpbGQgaW5mb3JtYXRpb24gdG8gdGFyZ2V0IGZpbGVzeXN0ZW0gb24gL2V0Yy9idWlsZAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMgQXV0aG9yOiBBbGVqYW5kcm8gRW5lZGlubyBIZXJuYW5kZXogU2FtYW5pZWdvIDxhbGVqYW5kcm8uaGVybmFuZGV6QGludGVsLmNvbT4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLCBzZWUgQ09QWUlORy5NSVQgZm9yIGRldGFpbHMKKyMKKyMgVXNhZ2U6IGFkZCBJTkhFUklUICs9ICJpbWFnZS1idWlsZGluZm8iIHRvIHlvdXIgY29uZiBmaWxlCisjCisKKyMgRGVzaXJlZCB2YXJpYWJsZXMgdG8gZGlzcGxheSAKK0lNQUdFX0JVSUxESU5GT19WQVJTID89ICJESVNUUk8gRElTVFJPX1ZFUlNJT04iCisKKyMgRnJvbSBidWlsZGhpc3RvcnkuYmJjbGFzcworZGVmIGltYWdlX2J1aWxkaW5mb19vdXRwdXR2YXJzKHZhcnMsIGxpc3R2YXJzLCBkKTogCisgICAgdmFycyA9IHZhcnMuc3BsaXQoKQorICAgIGxpc3R2YXJzID0gbGlzdHZhcnMuc3BsaXQoKQorICAgIHJldCA9ICIiCisgICAgZm9yIHZhciBpbiB2YXJzOgorICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgaWYgKGQuZ2V0VmFyRmxhZyh2YXIsICd0eXBlJykgPT0gImxpc3QiKToKKyAgICAgICAgICAgIHZhbHVlID0gb2UudXRpbHMuc3F1YXNoc3BhY2VzKHZhbHVlKQorICAgICAgICByZXQgKz0gIiVzID0gJXNcbiIgJSAodmFyLCB2YWx1ZSkKKyAgICByZXR1cm4gcmV0LnJzdHJpcCgnXG4nKQorCisjIEdldHMgZ2l0IGJyYW5jaCdzIHN0YXR1cyAoY2xlYW4gb3IgZGlydHkpCitkZWYgZ2V0X2xheWVyX2dpdF9zdGF0dXMocGF0aCk6CisgICAgZiA9IG9zLnBvcGVuKCJjZCAlczsgZ2l0IGRpZmYgLS1zdGF0IDI+JjEgfCB0YWlsIC1uIDEiICUgcGF0aCkKKyAgICBkYXRhID0gZi5yZWFkKCkKKyAgICBpZiBmLmNsb3NlKCkgaXMgTm9uZToKKyAgICAgICAgaWYgbGVuKGRhdGEpICE9IDA6CisgICAgICAgICAgICByZXR1cm4gIi0tIG1vZGlmaWVkIgorICAgIHJldHVybiAiIgorCisjIFJldHVybnMgbGF5ZXIgcmV2aXNpb25zIGFsb25nIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSBzdGF0dXMKK2RlZiBnZXRfbGF5ZXJfcmV2cyhkKToKKyAgICBsYXllcnMgPSAoZC5nZXRWYXIoIkJCTEFZRVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBtZWRhZGF0YV9yZXZzID0gWyIlLTE3cyA9ICVzOiVzICVzIiAlIChvcy5wYXRoLmJhc2VuYW1lKGkpLCBcCisgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9icmFuY2goaSwgTm9uZSkuc3RyaXAoKSwgXAorICAgICAgICBiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24oaSwgTm9uZSksIFwKKyAgICAgICAgZ2V0X2xheWVyX2dpdF9zdGF0dXMoaSkpIFwKKyAgICAgICAgICAgIGZvciBpIGluIGxheWVyc10KKyAgICByZXR1cm4gJ1xuJy5qb2luKG1lZGFkYXRhX3JldnMpCisKK2RlZiBidWlsZGluZm9fdGFyZ2V0KGQpOgorICAgICAgICAjIEdldCBjb250ZXh0CisgICAgICAgIGlmIGQuZ2V0VmFyKCdCQl9XT1JLRVJDT05URVhUJywgVHJ1ZSkgIT0gJzEnOgorICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICAjIFNpbmdsZSBhbmQgbGlzdCB2YXJpYWJsZXMgdG8gYmUgcmVhZAorICAgICAgICB2YXJzID0gKGQuZ2V0VmFyKCJJTUFHRV9CVUlMRElORk9fVkFSUyIsIFRydWUpIG9yICIiKQorICAgICAgICBsaXN0dmFycyA9IChkLmdldFZhcigiSU1BR0VfQlVJTERJTkZPX0xWQVJTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIHJldHVybiBpbWFnZV9idWlsZGluZm9fb3V0cHV0dmFycyh2YXJzLCBsaXN0dmFycywgZCkKKworIyBXcml0ZSBidWlsZCBpbmZvcm1hdGlvbiB0byB0YXJnZXQgZmlsZXN5c3RlbQorYnVpbGRpbmZvICgpIHsKK2NhdCA+ICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vYnVpbGQgPDwgRU5ECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQnVpbGQgQ29uZmlndXJhdGlvbjogIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiske0BidWlsZGluZm9fdGFyZ2V0KGQpfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xheWVyIFJldmlzaW9uczogICAgICB8ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJHtAZ2V0X2xheWVyX3JldnMoZCl9CitFTkQKK30KKworSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EICs9ICJidWlsZGluZm87IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtbGl2ZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtbGl2ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhN2ExMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1saXZlLmJiY2xhc3MKQEAgLTAsMCArMSwxOCBAQAorCitBVVRPX1NZU0xJTlVYQ0ZHID0gIjEiCitJTklUUkRfSU1BR0UgPz0gImNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMiCitJTklUUkQgPz0gIiR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTklUUkRfSU1BR0V9LSR7TUFDSElORX0uY3Bpby5neiIKK1NZU0xJTlVYX1JPT1QgPSAicm9vdD0vZGV2L3JhbTAiCitTWVNMSU5VWF9USU1FT1VUID89ICI1MCIKK1NZU0xJTlVYX0xBQkVMUyA/PSAiYm9vdCBpbnN0YWxsIgorTEFCRUxTX2FwcGVuZCA9ICIgJHtTWVNMSU5VWF9MQUJFTFN9ICIKKworUk9PVEZTID89ICIke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfQkFTRU5BTUV9LSR7TUFDSElORX0uZXh0NCIKKworZG9fYm9vdGltZ1tkZXBlbmRzXSArPSAiJHtJTklUUkRfSU1BR0V9OmRvX3Jvb3RmcyIKK2RvX2Jvb3RpbWdbZGVwZW5kc10gKz0gIiR7UE59OmRvX3Jvb3RmcyIKKworaW5oZXJpdCBib290aW1nCisKK0lNQUdFX1RZUEVERVBfbGl2ZSA9ICJleHQ0IgorSU1BR0VfVFlQRVNfTUFTS0VEICs9ICJsaXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtbWtsaWJzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1ta2xpYnMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDU1YThlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtbWtsaWJzLmJiY2xhc3MKQEAgLTAsMCArMSw3MSBAQAorZG9fcm9vdGZzW2RlcGVuZHNdICs9ICJta2xpYnMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK0lNQUdFX1BSRVBST0NFU1NfQ09NTUFORCArPSAibWtsaWJzX29wdGltaXplX2ltYWdlOyAiCisKK21rbGlic19vcHRpbWl6ZV9pbWFnZV9kb2l0KCkgeworCXJtIC1yZiAke1dPUktESVJ9L21rbGlicworCW1rZGlyIC1wICR7V09SS0RJUn0vbWtsaWJzL2Rlc3QKKwljZCAke0lNQUdFX1JPT1RGU30KKwlkdSAtYnMgPiAke1dPUktESVJ9L21rbGlicy9kdS5iZWZvcmUubWtsaWJzLnR4dAorCWZvciBpIGluIGBmaW5kIC5gOyBkbyBmaWxlICRpOyBkb25lIFwKKwkJfCBncmVwIEVMRiBcCisJCXwgZ3JlcCAiTFNCICpleGVjdXRhYmxlIiBcCisJCXwgZ3JlcCAiZHluYW1pY2FsbHkgbGlua2VkIiBcCisJCXwgc2VkICJzLzouKi8vIiBcCisJCXwgc2VkICJzK15cLi8rKyIgXAorCQk+ICR7V09SS0RJUn0vbWtsaWJzL2V4ZWN1dGFibGVzLmxpc3QKKworCWNhc2UgJHtUQVJHRVRfQVJDSH0gaW4KKwkJcG93ZXJwYyB8IG1pcHMgfCBtaXBzZWwgfCBtaWNyb2JsYXplICkKKwkJCWR5bmFtaWNfbG9hZGVyPSIke2Jhc2VfbGliZGlyfS9sZC5zby4xIgorCQkJOzsKKwkJcG93ZXJwYzY0KQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkNjQuc28uMSIKKwkJCTs7CisJCXg4Nl82NCkKKwkJCWR5bmFtaWNfbG9hZGVyPSIke2Jhc2VfbGliZGlyfS9sZC1saW51eC14ODYtNjQuc28uMiIKKwkJCTs7CisJCWk1ODYgKQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkLWxpbnV4LnNvLjIiCisJCQk7OworCQlhcm0gKQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkLWxpbnV4LnNvLjMiCisJCQk7OworCQkqICkKKwkJCWR5bmFtaWNfbG9hZGVyPSIvdW5rbm93bl9keW5hbWljX2xpbmtlciIKKwkJCTs7CisJZXNhYworCisJbWtsaWJzIC12IFwKKwkJLS1sZGxpYiAke2R5bmFtaWNfbG9hZGVyfSBcCisJCS0tbGliZGlyICR7YmFzZWxpYn0gXAorCQktLXN5c3Jvb3QgJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfSBcCisJCS0tZ2NjLW9wdGlvbnMgIi0tc3lzcm9vdD0ke1BLR19DT05GSUdfU1lTUk9PVF9ESVJ9IiBcCisJCS0tcm9vdCAke0lNQUdFX1JPT1RGU30gXAorCQktLXRhcmdldCBgZWNobyAke1RBUkdFVF9QUkVGSVh9IHwgc2VkICdzLy0kLy8nIGAgXAorCQktZCAke1dPUktESVJ9L21rbGlicy9kZXN0IFwKKwkJYGNhdCAke1dPUktESVJ9L21rbGlicy9leGVjdXRhYmxlcy5saXN0YAorCisJY2QgJHtXT1JLRElSfS9ta2xpYnMvZGVzdAorCWZvciBpIGluICoKKwlkbworCQljcCAkaSBgZmluZCAke0lNQUdFX1JPT1RGU30gLW5hbWUgJGlgCisJZG9uZQorCisJY2QgJHtJTUFHRV9ST09URlN9CisJZHUgLWJzID4gJHtXT1JLRElSfS9ta2xpYnMvZHUuYWZ0ZXIubWtsaWJzLnR4dAorCisJZWNobyByb290ZnMgc2l6ZSBiZWZvcmUgbWtsaWJzIG9wdGltaXphdGlvbjogYGNhdCAke1dPUktESVJ9L21rbGlicy9kdS5iZWZvcmUubWtsaWJzLnR4dGAKKwllY2hvIHJvb3RmcyBzaXplIGFmdGVyIG1rbGlicyBvcHRpbWl6YXRpb246IGBjYXQgJHtXT1JLRElSfS9ta2xpYnMvZHUuYWZ0ZXIubWtsaWJzLnR4dGAKK30KKworbWtsaWJzX29wdGltaXplX2ltYWdlKCkgeworCWZvciBpbWcgaW4gJHtNS0xJQlNfT1BUSU1JWkVEX0lNQUdFU30KKwlkbworCQlpZiBbICIke2ltZ30iID0gIiR7UE59IiBdIHx8IFsgIiR7aW1nfSIgPSAiYWxsIiBdCisJCXRoZW4KKwkJCW1rbGlic19vcHRpbWl6ZV9pbWFnZV9kb2l0CisJCQlicmVhaworCQlmaQorCWRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLXByZWxpbmsuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLXByZWxpbmsuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGJiM2FlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtcHJlbGluay5iYmNsYXNzCkBAIC0wLDAgKzEsMzMgQEAKK2RvX3Jvb3Rmc1tkZXBlbmRzXSArPSAicHJlbGluay1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EICs9ICJwcmVsaW5rX2ltYWdlOyAiCisKK3ByZWxpbmtfaW1hZ2UgKCkgeworIwlleHBvcnQgUFNFVURPX0RFQlVHPTQKKyMJL2Jpbi9lbnYgfCAvYmluL2dyZXAgUFNFVURPCisjCWVjaG8gIkxEX0xJQlJBUllfUEFUSD0kTERfTElCUkFSWV9QQVRIIgorIwllY2hvICJMRF9QUkVMT0FEPSRMRF9QUkVMT0FEIgorCisJcHJlX3ByZWxpbmtfc2l6ZT1gZHUgLWtzICR7SU1BR0VfUk9PVEZTfSB8IGF3ayAne3NpemUgPSAkMSA7IHByaW50IHNpemUgfSdgCisJZWNobyAiU2l6ZSBiZWZvcmUgcHJlbGlua2luZyAkcHJlX3ByZWxpbmtfc2l6ZS4iCisKKwkjIFdlIG5lZWQgYSBwcmVsaW5rIGNvbmYgb24gdGhlIGZpbGVzeXN0ZW0sIGFkZCBvbmUgaWYgaXQncyBtaXNzaW5nCisJaWYgWyAhIC1lICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mIF07IHRoZW4KKwkJY3AgJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzeXNjb25mZGlyX25hdGl2ZX0vcHJlbGluay5jb25mIFwKKwkJCSR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mCisJCWR1bW15X3ByZWxpbmtfY29uZj10cnVlOworCWVsc2UKKwkJZHVtbXlfcHJlbGlua19jb25mPWZhbHNlOworCWZpCisKKwkjIHByZWxpbmshCisJJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzYmluZGlyX25hdGl2ZX0vcHJlbGluayAtLXJvb3QgJHtJTUFHRV9ST09URlN9IC1hbVIgLU4gLWMgJHtzeXNjb25mZGlyfS9wcmVsaW5rLmNvbmYKKworCSMgUmVtb3ZlIHRoZSBwcmVsaW5rLmNvbmYgaWYgd2UgaGFkIHRvIGFkZCBpdC4KKwlpZiBbICIkZHVtbXlfcHJlbGlua19jb25mIiA9ICJ0cnVlIiBdOyB0aGVuCisJCXJtIC1mICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mCisJZmkKKworCXByZV9wcmVsaW5rX3NpemU9YGR1IC1rcyAke0lNQUdFX1JPT1RGU30gfCBhd2sgJ3tzaXplID0gJDEgOyBwcmludCBzaXplIH0nYAorCWVjaG8gIlNpemUgYWZ0ZXIgcHJlbGlua2luZyAkcHJlX3ByZWxpbmtfc2l6ZS4iCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1zd2FiLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1zd2FiLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkzMTg1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLXN3YWIuYmJjbGFzcwpAQCAtMCwwICsxLDk0IEBACitIT1NUX0RBVEEgPz0gIiR7VE1QRElSfS9ob3N0LWNvbnRhbWluYXRpb24tZGF0YS8iCitTV0FCQkVSX1JFUE9SVCA/PSAiJHtMT0dfRElSfS9zd2FiYmVyLyIKK1NXQUJCRVJfTE9HUyA/PSAiJHtMT0dfRElSfS9jb250YW1pbmF0aW9uLWxvZ3MiCitUUkFDRV9MT0dESVIgPz0gIiR7U1dBQkJFUl9MT0dTfS8ke1BBQ0tBR0VfQVJDSH0iCitUUkFDRV9MT0dGSUxFID0gIiR7VFJBQ0VfTE9HRElSfS8ke1BOfS0ke1BWfSIKKworU1dBQl9PUklHX1RBU0sgOj0gIiR7QkJfREVGQVVMVF9UQVNLfSIKK0JCX0RFRkFVTFRfVEFTSyA9ICJnZW5lcmF0ZV9zd2FiYmVyX3JlcG9ydCIKKworIyBTZXZlcmFsIHJlY2lwZXMgZG9uJ3QgYnVpbGQgd2l0aCBwYXJhbGxlbCBtYWtlIHdoZW4gcnVuIHVuZGVyIHN0cmFjZQorIyBJZGVhbGx5IHRoZXNlIHNob3VsZCBiZSBmaXhlZCBidXQgYXMgYSB0ZW1wb3JhcnkgbWVhc3VyZSBkaXNhYmxlIHBhcmFsbGVsCisjIGJ1aWxkcyBmb3IgdHJvdWJsZXNvbWUgcmVjaXBlcworUEFSQUxMRUxfTUFLRV9wbi1vcGVuc3NsID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tZ2xpYmMgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1nbGliLTIuMCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWxpYnhtbDIgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1yZWFkbGluZSA9ICIiCitQQVJBTExFTF9NQUtFX3BuLXV0aWwtbGludXggPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1iaW51dGlscyA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWJpc29uID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tY21ha2UgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1lbGZ1dGlscyA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWdjYyA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWdjYy1ydW50aW1lID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tbTQgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1vcGtnID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tcGtnY29uZmlnID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tcHJlbGluayA9ICIiCitQQVJBTExFTF9NQUtFX3BuLXJwbSA9ICIiCitQQVJBTExFTF9NQUtFX3BuLXRjbCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWJlZWNyeXB0ID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tY3VybCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWdtcCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWxpYm1wYyA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWxpYnhzbHQgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1sem8gPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1wb3B0ID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tbGludXgtd3JzID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tbGliZ2NyeXB0ID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tZ3BnbWUgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi11ZGV2ID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tZ251dGxzID0gIiIKKworcHl0aG9uKCkgeworICAgICMgTk9URTogSXQgbWlnaHQgYmUgdXNlZnVsIHRvIGRldGVjdCBob3N0IGluZmVjdGlvbiBvbiBuYXRpdmUgYW5kIGNyb3NzCisgICAgIyBwYWNrYWdlcyBidXQgYXMgaXQgdHVybnMgb3V0IHRvIGJlIHByZXR0eSBoYXJkIHRvIGRvIHRoaXMgZm9yIGFsbCBuYXRpdmUKKyAgICAjIGFuZCBjcm9zcyBwYWNrYWdlcyB3aGljaCBhcmVuJ3Qgc3dhYmJlci1uYXRpdmUgb3Igb25lIG9mIGl0cyBkZXBlbmRlbmNpZXMKKyAgICAjIEkgaGF2ZSBpZ25vcmVkIHRoZW0gZm9yIG5vdy4uLgorICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKToKKyAgICAgICAgZGVwcyA9IChkLmdldFZhckZsYWcoJ2RvX3NldHNjZW5lJywgJ2RlcGVuZHMnKSBvciAiIikuc3BsaXQoKQorICAgICAgICBkZXBzLmFwcGVuZCgnc3RyYWNlLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19zZXRzY2VuZScsICdkZXBlbmRzJywgIiAiLmpvaW4oZGVwcykpCisgICAgICAgIGxvZ2RpciA9IGQuZXhwYW5kKCIke1RSQUNFX0xPR0RJUn0iKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobG9nZGlyKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyKCdTVFJBQ0VGVU5DJywgJycpCit9CisKK1NUUkFDRVBJRCA9ICIke0Bvcy5nZXRwaWQoKX0iCitTVFJBQ0VGVU5DID0gImltYWdlc3dhYl9hdHRhY2hzdHJhY2UiCisKK2RvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gIiR7U1RSQUNFRlVOQ30iCitkb19jb21waWxlW3ByZWZ1bmNzXSArPSAiJHtTVFJBQ0VGVU5DfSIKKworaW1hZ2Vzd2FiX2F0dGFjaHN0cmFjZSAoKSB7CisJU1RSQUNFPWB3aGljaCBzdHJhY2VgCisKKwlpZiBbIC14ICIkU1RSQUNFIiBdOyB0aGVuCisJCXN3YWJiZXItc3RyYWNlLWF0dGFjaCAiJFNUUkFDRSAtZiAtbyAke1RSQUNFX0xPR0ZJTEV9LSR7QkJfQ1VSUkVOVFRBU0t9LmxvZyAtZSB0cmFjZT1vcGVuLGV4ZWN2ZSAtcCAke1NUUkFDRVBJRH0iICIke1RSQUNFX0xPR0ZJTEV9LXRyYWNlYXR0YWNoLSR7QkJfQ1VSUkVOVFRBU0t9LmxvZyIKKwlmaQorfQorCitkb19nZW5lcmF0ZV9zd2FiYmVyX3JlcG9ydCAoKSB7CisKKwl1cGRhdGVfZGlzdHJvICR7SE9TVF9EQVRBfQorCisJIyBTd2FiYmVyIGNhbid0IGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGZvciB1cworCW1rZGlyIC1wICR7U1dBQkJFUl9SRVBPUlR9CisKKwlSRVBPUlRTVEFNUD0ke1NXQUJfT1JJR19UQVNLfS1gZGF0ZSArJTJtJTJkJTJIJTJNJVlgCisKKwlpZiBbIGB3aGljaCBjY2FjaGVgIF0gOyB0aGVuCisJCUNDQUNIRV9ESVI9YCggY2NhY2hlIC1zIHwgZ3JlcCAiY2FjaGUgZGlyZWN0b3J5IiB8IGdyZXAgLW8gJ1teIF0qJCcgMj4gL2Rldi9udWxsIClgCisgCWZpCisKKwlpZiBbICIkKGxzIC1BICR7SE9TVF9EQVRBfSkiIF07IHRoZW4KKwkJZWNobyAiR2VuZXJhdGluZyBzd2FiYmVyIHJlcG9ydCIKKwkJc3dhYmJlciAtZCAke0hPU1RfREFUQX0gLWwgJHtTV0FCQkVSX0xPR1N9IC1vICR7U1dBQkJFUl9SRVBPUlR9L3JlcG9ydC0ke1JFUE9SVFNUQU1QfS50eHQgLXIgJHtTV0FCQkVSX1JFUE9SVH0vZXh0cmFfcmVwb3J0LSR7UkVQT1JUU1RBTVB9LnR4dCAtYyBhbGwgLXAgJHtUT1BESVJ9IC1mICR7T0VST09UfS9tZXRhL2NvbmYvc3dhYmJlciAke1RPUERJUn0gJHtPRVJPT1R9ICR7Q0NBQ0hFX0RJUn0KKwllbHNlCisJCWVjaG8gIk5vIGhvc3QgZGF0YSwgY2Fubm90IGdlbmVyYXRlIHN3YWJiZXIgcmVwb3J0LiIKKwlmaQorfQorYWRkdGFzayBnZW5lcmF0ZV9zd2FiYmVyX3JlcG9ydCBhZnRlciBkb18ke1NXQUJfT1JJR19UQVNLfQorZG9fZ2VuZXJhdGVfc3dhYmJlcl9yZXBvcnRbZGVwZW5kc10gPSAic3dhYmJlci1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLXZtLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS12bS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MzI2NjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS12bS5iYmNsYXNzCkBAIC0wLDAgKzEsNDkgQEAKKworU1lTTElOVVhfUFJPTVBUID89ICIwIgorU1lTTElOVVhfTEFCRUxTID0gImJvb3QiCitMQUJFTFNfYXBwZW5kID0gIiAke1NZU0xJTlVYX0xBQkVMU30gIgorCisjIFVzaW5nIGFuIGluaXRyYW1mcyBpcyBvcHRpb25hbC4gRW5hYmxlIGl0IGJ5IHNldHRpbmcgSU5JVFJEX0lNQUdFLgorSU5JVFJEX0lNQUdFID89ICIiCitJTklUUkQgPz0gIiR7QCcke0RFUExPWV9ESVJfSU1BR0V9LyR7SU5JVFJEX0lNQUdFfS0ke01BQ0hJTkV9LmNwaW8uZ3onIGlmICcke0lOSVRSRF9JTUFHRX0nIGVsc2UgJyd9IgorZG9fYm9vdGRpcmVjdGRpc2tbZGVwZW5kc10gKz0gIiR7QCcke0lOSVRSRF9JTUFHRX06ZG9fcm9vdGZzJyBpZiAnJHtJTklUUkRfSU1BR0V9JyBlbHNlICcnfSIKKworIyBuZWVkIHRvIGRlZmluZSB0aGUgZGVwZW5kZW5jeSBhbmQgdGhlIFJPT1RGUyBmb3IgZGlyZWN0ZGlzaworZG9fYm9vdGRpcmVjdGRpc2tbZGVwZW5kc10gKz0gIiR7UE59OmRvX3Jvb3RmcyIKK1JPT1RGUyA/PSAiJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0JBU0VOQU1FfS0ke01BQ0hJTkV9LmV4dDQiCisKKyMgY3JlYXRpbmcgVk0gaW1hZ2VzIHJlbGllcyBvbiBoYXZpbmcgYSBoZGRpbWcgc28gZW5zdXJlIHdlIGluaGVyaXQgaXQgaGVyZS4KK2luaGVyaXQgYm9vdC1kaXJlY3RkaXNrCisKK0lNQUdFX1RZUEVERVBfdm1kayA9ICJleHQ0IgorSU1BR0VfVFlQRURFUF92ZGkgPSAiZXh0NCIKK0lNQUdFX1RZUEVERVBfcWNvdzIgPSAiZXh0NCIKK0lNQUdFX1RZUEVTX01BU0tFRCArPSAidm1kayB2ZGkgcWNvdzIiCisKK2NyZWF0ZV92bWRrX2ltYWdlICgpIHsKKyAgICBxZW11LWltZyBjb252ZXJ0IC1PIHZtZGsgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmhkZGRpcmVjdCAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0udm1kaworICAgIGxuIC1zZiAke0lNQUdFX05BTUV9LnZtZGsgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0udm1kaworfQorCitjcmVhdGVfdmRpX2ltYWdlICgpIHsKKyAgICBxZW11LWltZyBjb252ZXJ0IC1PIHZkaSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uaGRkZGlyZWN0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS52ZGkKKyAgICBsbiAtc2YgJHtJTUFHRV9OQU1FfS52ZGkgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0udmRpCit9CisKK2NyZWF0ZV9xY293Ml9pbWFnZSAoKSB7CisgICAgcWVtdS1pbWcgY29udmVydCAtTyBxY293MiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uaGRkZGlyZWN0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5xY293MgorICAgIGxuIC1zZiAke0lNQUdFX05BTUV9LnFjb3cyICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LnFjb3cyCit9CisKK3B5dGhvbiBkb192bWltZygpIHsKKyAgICBpZiAndm1kaycgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdjcmVhdGVfdm1ka19pbWFnZScsIGQpCisgICAgaWYgJ3ZkaScgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdjcmVhdGVfdmRpX2ltYWdlJywgZCkKKyAgICBpZiAncWNvdzInIGluIGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnY3JlYXRlX3Fjb3cyX2ltYWdlJywgZCkKK30KKworYWRkdGFzayB2bWltZyBhZnRlciBkb19ib290ZGlyZWN0ZGlzayBiZWZvcmUgZG9fYnVpbGQKK2RvX3ZtaW1nW2RlcGVuZHNdICs9ICJxZW11LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzdkNjRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDUwNCBAQAoraW5oZXJpdCByb290ZnNfJHtJTUFHRV9QS0dUWVBFfQorCitpbmhlcml0IHBvcHVsYXRlX3Nka19leHQKKworVE9PTENIQUlOX1RBUkdFVF9UQVNLICs9ICIke1BBQ0tBR0VfSU5TVEFMTH0iCitUT09MQ0hBSU5fVEFSR0VUX1RBU0tfQVRURU1QVE9OTFkgKz0gIiR7UEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZfSIKK1BPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EICs9ICJyb290ZnNfc3lzcm9vdF9yZWxhdGl2ZWxpbmtzOyAiCisKK2luaGVyaXQgZ3ppcG5hdGl2ZQorCitMSUNFTlNFID0gIk1JVCIKK1BBQ0tBR0VTID0gIiIKK0RFUEVORFMgKz0gIiR7TUxQUkVGSVh9cWVtdXdyYXBwZXItY3Jvc3MgJHtNTFBSRUZJWH1kZXBtb2R3cmFwcGVyLWNyb3NzIgorUkRFUEVORFMgKz0gIiR7UEFDS0FHRV9JTlNUQUxMfSAke0xJTkdVQVNfSU5TVEFMTH0iCitSUkVDT01NRU5EUyArPSAiJHtQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFl9IgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitURVNUSU1BR0VDTEFTUyA9ICIke0BiYXNlX2NvbmRpdGlvbmFsKCdURVNUX0lNQUdFJywgJzEnLCAndGVzdGltYWdlLWF1dG8nLCAnJywgZCl9IgoraW5oZXJpdCAke1RFU1RJTUFHRUNMQVNTfQorCisjIElNQUdFX0ZFQVRVUkVTIG1heSBjb250YWluIGFueSBhdmFpbGFibGUgcGFja2FnZSBncm91cAorSU1BR0VfRkVBVFVSRVMgPz0gIiIKK0lNQUdFX0ZFQVRVUkVTW3R5cGVdID0gImxpc3QiCitJTUFHRV9GRUFUVVJFU1t2YWxpZGl0ZW1zXSArPSAiZGVidWctdHdlYWtzIHJlYWQtb25seS1yb290ZnMgZW1wdHktcm9vdC1wYXNzd29yZCBhbGxvdy1lbXB0eS1wYXNzd29yZCBwb3N0LWluc3RhbGwtbG9nZ2luZyIKKworIyBHZW5lcmF0ZSBjb21wYW5pb24gZGVidWdmcz8KK0lNQUdFX0dFTl9ERUJVR0ZTID89ICIwIgorCisjIHJvb3RmcyBib290c3RyYXAgaW5zdGFsbAorUk9PVEZTX0JPT1RTVFJBUF9JTlNUQUxMID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJJTUFHRV9GRUFUVVJFUyIsICJwYWNrYWdlLW1hbmFnZW1lbnQiLCAiIiwgIiR7Uk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVB9IixkKX0iCisKKyMgcGFja2FnZXMgdG8gaW5zdGFsbCBmcm9tIGZlYXR1cmVzCitGRUFUVVJFX0lOU1RBTEwgPSAiJHtAJyAnLmpvaW4ob2UucGFja2FnZWdyb3VwLnJlcXVpcmVkX3BhY2thZ2VzKG9lLmRhdGEudHlwZWRfdmFsdWUoJ0lNQUdFX0ZFQVRVUkVTJywgZCksIGQpKX0iCitGRUFUVVJFX0lOU1RBTExbdmFyZGVwdmFsdWVdID0gIiR7RkVBVFVSRV9JTlNUQUxMfSIKK0ZFQVRVUkVfSU5TVEFMTF9PUFRJT05BTCA9ICIke0AnICcuam9pbihvZS5wYWNrYWdlZ3JvdXAub3B0aW9uYWxfcGFja2FnZXMob2UuZGF0YS50eXBlZF92YWx1ZSgnSU1BR0VfRkVBVFVSRVMnLCBkKSwgZCkpfSIKK0ZFQVRVUkVfSU5TVEFMTF9PUFRJT05BTFt2YXJkZXB2YWx1ZV0gPSAiJHtGRUFUVVJFX0lOU1RBTExfT1BUSU9OQUx9IgorCisjIERlZmluZSBzb21lIHZlcnkgYmFzaWMgZmVhdHVyZSBwYWNrYWdlIGdyb3VwcworRkVBVFVSRV9QQUNLQUdFU19wYWNrYWdlLW1hbmFnZW1lbnQgPSAiJHtST09URlNfUEtHTUFOQUdFfSIKK1NQTEFTSCA/PSAicHNwbGFzaCIKK0ZFQVRVUkVfUEFDS0FHRVNfc3BsYXNoID0gIiR7U1BMQVNIfSIKKworSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZID0gJyR7QGNvbXBsZW1lbnRhcnlfZ2xvYnMoIklNQUdFX0ZFQVRVUkVTIiwgZCl9JworCitkZWYgY2hlY2tfaW1hZ2VfZmVhdHVyZXMoZCk6CisgICAgdmFsaWRfZmVhdHVyZXMgPSAoZC5nZXRWYXJGbGFnKCdJTUFHRV9GRUFUVVJFUycsICd2YWxpZGl0ZW1zJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICB2YWxpZF9mZWF0dXJlcyArPSBkLmdldFZhckZsYWdzKCdDT01QTEVNRU5UQVJZX0dMT0InKS5rZXlzKCkKKyAgICBmb3IgdmFyIGluIGQ6CisgICAgICAgaWYgdmFyLnN0YXJ0c3dpdGgoIlBBQ0tBR0VfR1JPVVBfIik6CisgICAgICAgICAgIGJiLndhcm4oIlBBQ0tBR0VfR1JPVVAgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBGRUFUVVJFX1BBQ0tBR0VTIGluc3RlYWQiKQorICAgICAgICAgICB2YWxpZF9mZWF0dXJlcy5hcHBlbmQodmFyWzE0Ol0pCisgICAgICAgZWxpZiB2YXIuc3RhcnRzd2l0aCgiRkVBVFVSRV9QQUNLQUdFU18iKToKKyAgICAgICAgICAgdmFsaWRfZmVhdHVyZXMuYXBwZW5kKHZhclsxNzpdKQorICAgIHZhbGlkX2ZlYXR1cmVzLnNvcnQoKQorCisgICAgZmVhdHVyZXMgPSBzZXQob2UuZGF0YS50eXBlZF92YWx1ZSgnSU1BR0VfRkVBVFVSRVMnLCBkKSkKKyAgICBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgaWYgZmVhdHVyZSBub3QgaW4gdmFsaWRfZmVhdHVyZXM6CisgICAgICAgICAgICBpZiBiYi51dGlscy5jb250YWlucygnRVhUUkFfSU1BR0VfRkVBVFVSRVMnLCBmZWF0dXJlLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFJlY2lwZSgiJyVzJyBpbiBJTUFHRV9GRUFUVVJFUyAoYWRkZWQgdmlhIEVYVFJBX0lNQUdFX0ZFQVRVUkVTKSBpcyBub3QgYSB2YWxpZCBpbWFnZSBmZWF0dXJlLiBWYWxpZCBmZWF0dXJlczogJXMiICUgKGZlYXR1cmUsICcgJy5qb2luKHZhbGlkX2ZlYXR1cmVzKSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBSZWNpcGUoIiclcycgaW4gSU1BR0VfRkVBVFVSRVMgaXMgbm90IGEgdmFsaWQgaW1hZ2UgZmVhdHVyZS4gVmFsaWQgZmVhdHVyZXM6ICVzIiAlIChmZWF0dXJlLCAnICcuam9pbih2YWxpZF9mZWF0dXJlcykpKQorCitJTUFHRV9JTlNUQUxMID89ICIiCitJTUFHRV9JTlNUQUxMW3R5cGVdID0gImxpc3QiCitleHBvcnQgUEFDS0FHRV9JTlNUQUxMID89ICIke0lNQUdFX0lOU1RBTEx9ICR7Uk9PVEZTX0JPT1RTVFJBUF9JTlNUQUxMfSAke0ZFQVRVUkVfSU5TVEFMTH0iCitQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFkgPz0gIiR7RkVBVFVSRV9JTlNUQUxMX09QVElPTkFMfSIKKworIyBJbWFnZXMgYXJlIGdlbmVyYWxseSBidWlsdCBleHBsaWNpdGx5LCBkbyBub3QgbmVlZCB0byBiZSBwYXJ0IG9mIHdvcmxkLgorRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK1VTRV9ERVZGUyA/PSAiMSIKK1VTRV9ERVBNT0QgPz0gIjEiCisKK1BJRCA9ICIke0Bvcy5nZXRwaWQoKX0iCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK0xEQ09ORklHREVQRU5EID89ICJsZGNvbmZpZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK0xEQ09ORklHREVQRU5EX2xpYmMtdWNsaWJjID0gIiIKK0xEQ09ORklHREVQRU5EX2xpYmMtbXVzbCA9ICIiCisKKyMgVGhpcyBpcyBuZWVkZWQgdG8gaGF2ZSBkZXBtb2QgZGF0YSBpbiBQS0dEQVRBX0RJUiwKKyMgYnV0IGlmIHlvdSdyZSBidWlsZGluZyBzbWFsbCBpbml0cmFtZnMgaW1hZ2UKKyMgZS5nLiB0byBpbmNsdWRlIGl0IGluIHlvdXIga2VybmVsLCB5b3UgcHJvYmFibHkKKyMgZG9uJ3Qgd2FudCB0aGlzIGRlcGVuZGVuY3ksIHdoaWNoIGlzIGNhdXNpbmcgZGVwZW5kZW5jeSBsb29wCitLRVJORUxERVBNT0RERVBFTkQgPz0gInZpcnR1YWwva2VybmVsOmRvX3BhY2thZ2VkYXRhIgorCitkb19yb290ZnNbZGVwZW5kc10gKz0gIiBcCisgICAgbWFrZWRldnMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgdmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCAke0xEQ09ORklHREVQRU5EfSBcCisgICAgdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IHVwZGF0ZS1yYy5kLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICAke0tFUk5FTERFUE1PRERFUEVORH0gXAorIgorZG9fcm9vdGZzW3JlY3JkZXB0YXNrXSArPSAiZG9fcGFja2FnZWRhdGEiCisKK2RlZiBjb21tYW5kX3ZhcmlhYmxlcyhkKToKKyAgICByZXR1cm4gWydST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCcsJ1JPT1RGU19QUkVQUk9DRVNTX0NPTU1BTkQnLCdST09URlNfUE9TVElOU1RBTExfQ09NTUFORCcsJ09QS0dfUFJFUFJPQ0VTU19DT01NQU5EUycsJ09QS0dfUE9TVFBST0NFU1NfQ09NTUFORFMnLCdJTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EJywKKyAgICAgICAgICAgICdJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQnLCdST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCcsJ1BPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORCcsJ1BPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EJywnU0RLX1BPU1RQUk9DRVNTX0NPTU1BTkQnLCdSUE1fUFJFUFJPQ0VTU19DT01NQU5EUycsICAgICAgICAgCisgICAgICAgICAgICAnUlBNX1BPU1RQUk9DRVNTX0NPTU1BTkRTJ10KKworcHl0aG9uICgpIHsKKyAgICB2YXJpYWJsZXMgPSBjb21tYW5kX3ZhcmlhYmxlcyhkKQorICAgIGZvciB2YXIgaW4gdmFyaWFibGVzOgorICAgICAgICBpZiBkLmdldFZhcih2YXIsIEZhbHNlKToKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZyh2YXIsICdmdW5jJywgJzEnKQorfQorCitkZWYgcm9vdGZzX3ZhcmlhYmxlcyhkKToKKyAgICBmcm9tIG9lLnJvb3RmcyBpbXBvcnQgdmFyaWFibGVfZGVwZW5kcworICAgIHZhcmlhYmxlcyA9IFsnSU1BR0VfREVWSUNFX1RBQkxFUycsJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywnSU1BR0VfVFlQRURFUF8nLCdJTUFHRV9UWVBFU19NQVNLRUQnLCdJTUFHRV9ST09URlNfQUxJR05NRU5UJywnSU1BR0VfT1ZFUkhFQURfRkFDVE9SJywnSU1BR0VfUk9PVEZTX1NJWkUnLCdJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UnLAorICAgICAgICAgICAgICAgICAnSU1BR0VfUk9PVEZTX01BWFNJWkUnLCdJTUFHRV9OQU1FJywnSU1BR0VfTElOS19OQU1FJywnSU1BR0VfTUFOSUZFU1QnLCdERVBMT1lfRElSX0lNQUdFJywnUk1fT0xEX0lNQUdFJywnSU1BR0VfRlNUWVBFUycsJ0lNQUdFX0lOU1RBTExfQ09NUExFTUVOVEFSWScsJ0lNQUdFX0xJTkdVQVMnLCdTREtfT1MnLAorICAgICAgICAgICAgICAgICAnU0RLX09VVFBVVCcsJ1NES1BBVEhOQVRJVkUnLCdTREtUQVJHRVRTWVNST09UJywnU0RLX0RJUicsJ1NES19WRU5ET1InLCdTREtJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlknLCdTREtfUEFDS0FHRV9BUkNIUycsJ1NES19PVVRQVVQnLCdTREtUQVJHRVRTWVNST09UJywnTVVMVElMSUJSRV9BTExPV19SRVAnLAorICAgICAgICAgICAgICAgICAnTVVMVElMSUJfVEVNUF9ST09URlMnLCdNVUxUSUxJQl9WQVJJQU5UUycsJ01VTFRJTElCUycsJ0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTJywnTVVMVElMSUJfR0xPQkFMX1ZBUklBTlRTJywnQkFEX1JFQ09NTUVOREFUSU9OUycsJ05PX1JFQ09NTUVOREFUSU9OUycsJ1BBQ0tBR0VfQVJDSFMnLAorICAgICAgICAgICAgICAgICAnUEFDS0FHRV9DTEFTU0VTJywnVEFSR0VUX1ZFTkRPUicsJ1RBUkdFVF9WRU5ET1InLCdUQVJHRVRfQVJDSCcsJ1RBUkdFVF9PUycsJ09WRVJSSURFUycsJ0JCRVhURU5EVkFSSUFOVCcsJ0ZFRURfREVQTE9ZRElSX0JBU0VfVVJJJywnSU5URVJDRVBUX0RJUicsJ1VTRV9ERVZGUycsCisgICAgICAgICAgICAgICAgICdDT01QUkVTU0lPTlRZUEVTJywgJ0lNQUdFX0dFTl9ERUJVR0ZTJ10KKyAgICB2YXJpYWJsZXMuZXh0ZW5kKGNvbW1hbmRfdmFyaWFibGVzKGQpKQorICAgIHZhcmlhYmxlcy5leHRlbmQodmFyaWFibGVfZGVwZW5kcyhkKSkKKyAgICByZXR1cm4gIiAiLmpvaW4odmFyaWFibGVzKQorCitkb19yb290ZnNbdmFyZGVwc10gKz0gIiR7QHJvb3Rmc192YXJpYWJsZXMoZCl9IgorCitkb19idWlsZFtkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fZGVwbG95IgorCitkZWYgYnVpbGRfbGl2ZShkKToKKyAgICBpZiBiYi51dGlscy5jb250YWlucygiSU1BR0VfRlNUWVBFUyIsICJsaXZlIiwgImxpdmUiLCAiMCIsIGQpID09ICIwIjogIyBsaXZlIGlzIG5vdCBzZXQgYnV0IGhvYiBtaWdodCBzZXQgaXNvIG9yIGhkZGltZworICAgICAgICBkLnNldFZhcignTk9JU08nLCBiYi51dGlscy5jb250YWlucygnSU1BR0VfRlNUWVBFUycsICJpc28iLCAiMCIsICIxIiwgZCkpCisgICAgICAgIGQuc2V0VmFyKCdOT0hERCcsIGJiLnV0aWxzLmNvbnRhaW5zKCdJTUFHRV9GU1RZUEVTJywgImhkZGltZyIsICIwIiwgIjEiLCBkKSkKKyAgICAgICAgaWYgZC5nZXRWYXIoJ05PSVNPJywgVHJ1ZSkgPT0gIjAiIG9yIGQuZ2V0VmFyKCdOT0hERCcsIFRydWUpID09ICIwIjoKKyAgICAgICAgICAgIHJldHVybiAiaW1hZ2UtbGl2ZSIKKyAgICAgICAgcmV0dXJuICIiCisgICAgcmV0dXJuICJpbWFnZS1saXZlIgorCitJTUFHRV9UWVBFX2xpdmUgPSAiJHtAYnVpbGRfbGl2ZShkKX0iCitpbmhlcml0ICR7SU1BR0VfVFlQRV9saXZlfQorCitJTUFHRV9UWVBFX3ZtID0gJyR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiSU1BR0VfRlNUWVBFUyIsIFsidm1kayIsICJ2ZGkiLCAicWNvdzIiXSwgImltYWdlLXZtIiwgIiIsIGQpfScKK2luaGVyaXQgJHtJTUFHRV9UWVBFX3ZtfQorCitweXRob24gKCkgeworICAgIGRlcHMgPSAiICIgKyBpbWFnZXR5cGVzX2dldGRlcGVuZHMoZCkKKyAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3Jvb3RmcycsICdkZXBlbmRzJywgZGVwcykKKworICAgIGRlcHMgPSAiIgorICAgIGZvciBkZXAgaW4gKGQuZ2V0VmFyKCdFWFRSQV9JTUFHRURFUEVORFMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgZGVwcyArPSAiICVzOmRvX3BvcHVsYXRlX3N5c3Jvb3QiICUgZGVwCisgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19idWlsZCcsICdkZXBlbmRzJywgZGVwcykKKworICAgICNwcm9jZXNzIElNQUdFX0ZFQVRVUkVTLCB3ZSBtdXN0IGRvIHRoaXMgYmVmb3JlIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUKKyAgICAjQ2hlY2sgZm9yIHJlcGxhY2VzIGltYWdlIGZlYXR1cmVzCisgICAgZmVhdHVyZXMgPSBzZXQob2UuZGF0YS50eXBlZF92YWx1ZSgnSU1BR0VfRkVBVFVSRVMnLCBkKSkKKyAgICByZW1haW5fZmVhdHVyZXMgPSBmZWF0dXJlcy5jb3B5KCkKKyAgICBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgcmVwbGFjZXMgPSBzZXQoKGQuZ2V0VmFyKCJJTUFHRV9GRUFUVVJFU19SRVBMQUNFU18lcyIgJSBmZWF0dXJlLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICAgICAgcmVtYWluX2ZlYXR1cmVzIC09IHJlcGxhY2VzCisKKyAgICAjQ2hlY2sgZm9yIGNvbmZsaWN0IGltYWdlIGZlYXR1cmVzCisgICAgZm9yIGZlYXR1cmUgaW4gcmVtYWluX2ZlYXR1cmVzOgorICAgICAgICBjb25mbGljdHMgPSBzZXQoKGQuZ2V0VmFyKCJJTUFHRV9GRUFUVVJFU19DT05GTElDVFNfJXMiICUgZmVhdHVyZSwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgIHRlbXAgPSBjb25mbGljdHMgJiByZW1haW5fZmVhdHVyZXMKKyAgICAgICAgaWYgdGVtcDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCIlcyBjb250YWlucyBjb25mbGljdGluZyBJTUFHRV9GRUFUVVJFUyAlcyAlcyIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGZlYXR1cmUsICcgJy5qb2luKGxpc3QodGVtcCkpKSkKKworICAgIGQuc2V0VmFyKCdJTUFHRV9GRUFUVVJFUycsICcgJy5qb2luKGxpc3QocmVtYWluX2ZlYXR1cmVzKSkpCisKKyAgICBjaGVja19pbWFnZV9mZWF0dXJlcyhkKQorICAgIGluaXRyYW1mc19pbWFnZSA9IGQuZ2V0VmFyKCdJTklUUkFNRlNfSU1BR0UnLCBUcnVlKSBvciAiIgorICAgIGlmIGluaXRyYW1mc19pbWFnZSAhPSAiIjoKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19idWlsZCcsICdkZXBlbmRzJywgIiAlczpkb19idW5kbGVfaW5pdHJhbWZzIiAlICBkLmdldFZhcignUE4nLCBUcnVlKSkKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19idW5kbGVfaW5pdHJhbWZzJywgJ2RlcGVuZHMnLCAiICVzOmRvX3Jvb3RmcyIgJSBpbml0cmFtZnNfaW1hZ2UpCit9CisKK0lNQUdFX0NMQVNTRVMgKz0gImltYWdlX3R5cGVzIgoraW5oZXJpdCAke0lNQUdFX0NMQVNTRVN9CisKK0lNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQgPz0gIiIKKworIyBaYXAgdGhlIHJvb3QgcGFzc3dvcmQgaWYgZGVidWctdHdlYWtzIGZlYXR1cmUgaXMgbm90IGVuYWJsZWQKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICcke0BiYi51dGlscy5jb250YWluc19hbnkoIklNQUdFX0ZFQVRVUkVTIiwgWyAnZGVidWctdHdlYWtzJywgJ2VtcHR5LXJvb3QtcGFzc3dvcmQnIF0sICIiLCAiemFwX2VtcHR5X3Jvb3RfcGFzc3dvcmQgOyAiLGQpfScKKworIyBBbGxvdyBkcm9wYmVhci9vcGVuc3NoIHRvIGFjY2VwdCBsb2dpbnMgZnJvbSBhY2NvdW50cyB3aXRoIGFuIGVtcHR5IHBhc3N3b3JkIHN0cmluZyBpZiBkZWJ1Zy10d2Vha3MgaXMgZW5hYmxlZAorUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gJyR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiSU1BR0VfRkVBVFVSRVMiLCBbICdkZWJ1Zy10d2Vha3MnLCAnYWxsb3ctZW1wdHktcGFzc3dvcmQnIF0sICJzc2hfYWxsb3dfZW1wdHlfcGFzc3dvcmQ7ICIsICIiLGQpfScKKworIyBFbmFibGUgcG9zdGluc3QgbG9nZ2luZyBpZiBkZWJ1Zy10d2Vha3MgaXMgZW5hYmxlZAorUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gJyR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiSU1BR0VfRkVBVFVSRVMiLCBbICdkZWJ1Zy10d2Vha3MnLCAncG9zdC1pbnN0YWxsLWxvZ2dpbmcnIF0sICJwb3N0aW5zdF9lbmFibGVfbG9nZ2luZzsgIiwgIiIsZCl9JworCisjIENyZWF0ZSAvZXRjL3RpbWVzdGFtcCBkdXJpbmcgaW1hZ2UgY29uc3RydWN0aW9uIHRvIGdpdmUgYSByZWFzb25hYmx5IHNhbmUgZGVmYXVsdCB0aW1lIHNldHRpbmcKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICJyb290ZnNfdXBkYXRlX3RpbWVzdGFtcCA7ICIKKworIyBUd2VhayB0aGUgbW91bnQgb3B0aW9ucyBmb3Igcm9vdGZzIGluIC9ldGMvZnN0YWIgaWYgcmVhZC1vbmx5LXJvb3RmcyBpcyBlbmFibGVkCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAnJHtAYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgInJlYWQtb25seS1yb290ZnMiLCAicmVhZF9vbmx5X3Jvb3Rmc19ob29rOyAiLCAiIixkKX0nCisKKyMgV3JpdGUgbWFuaWZlc3QKK0lNQUdFX01BTklGRVNUID0gIiR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMubWFuaWZlc3QiCitST09URlNfUE9TVFVOSU5TVEFMTF9DT01NQU5EID0rICJ3cml0ZV9pbWFnZV9tYW5pZmVzdCA7ICIKKyMgU2V0IGRlZmF1bHQgcG9zdGluc3QgbG9nIGZpbGUKK1BPU1RJTlNUX0xPR0ZJTEUgPz0gIiR7bG9jYWxzdGF0ZWRpcn0vbG9nL3Bvc3RpbnN0YWxsLmxvZyIKKyMgU2V0IGRlZmF1bHQgdGFyZ2V0IGZvciBzeXN0ZW1kIGltYWdlcworU1lTVEVNRF9ERUZBVUxUX1RBUkdFVCA/PSAnJHtAYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgIngxMS1iYXNlIiwgImdyYXBoaWNhbC50YXJnZXQiLCAibXVsdGktdXNlci50YXJnZXQiLCBkKX0nCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAnJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJzeXN0ZW1kIiwgInNldF9zeXN0ZW1kX2RlZmF1bHRfdGFyZ2V0OyAiLCAiIiwgZCl9JworCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAnZW1wdHlfdmFyX3ZvbGF0aWxlOycKKworIyBzb21lIGRlZmF1bHQgbG9jYWxlcworSU1BR0VfTElOR1VBUyA/PSAiZGUtZGUgZnItZnIgZW4tZ2IiCisKK0xJTkdVQVNfSU5TVEFMTCA/PSAiJHtAIiAiLmpvaW4obWFwKGxhbWJkYSBzOiAibG9jYWxlLWJhc2UtJXMiICUgcywgZC5nZXRWYXIoJ0lNQUdFX0xJTkdVQVMnLCBUcnVlKS5zcGxpdCgpKSl9IgorCisjIFByZWZlciBpbWFnZSwgYnV0IHVzZSB0aGUgZmFsbGJhY2sgZmlsZXMgZm9yIGxvb2t1cHMgaWYgdGhlIGltYWdlIG9uZXMKKyMgYXJlbid0IHlldCBhdmFpbGFibGUuCitQU0VVRE9fUEFTU1dEID0gIiR7SU1BR0VfUk9PVEZTfToke1NUQUdJTkdfRElSX05BVElWRX0iCisKK2RvX3Jvb3Rmc1tkaXJzXSA9ICIke1RPUERJUn0iCitkb19yb290ZnNbbG9ja2ZpbGVzXSArPSAiJHtJTUFHRV9ST09URlN9LmxvY2siCitkb19yb290ZnNbY2xlYW5kaXJzXSArPSAiJHtTfSIKKworIyBNdXN0IGNhbGwgcmVhbF9kb19yb290ZnMoKSBmcm9tIGluc2lkZSBoZXJlLCByYXRoZXIgdGhhbiBhcyBhIHNlcGFyYXRlCisjIHRhc2ssIHNvIHRoYXQgd2UgaGF2ZSBhIHNpbmdsZSBmYWtlcm9vdCBjb250ZXh0IGZvciB0aGUgd2hvbGUgcHJvY2Vzcy4KK2RvX3Jvb3Rmc1t1bWFza10gPSAiMDIyIgorCisjIEEgaG9vayBmdW5jdGlvbiB0byBzdXBwb3J0IHJlYWQtb25seS1yb290ZnMgSU1BR0VfRkVBVFVSRVMKK3JlYWRfb25seV9yb290ZnNfaG9vayAoKSB7CisJIyBUd2VhayB0aGUgbW91bnQgb3B0aW9uIGFuZCBmc19wYXNzbm8gZm9yIHJvb3RmcyBpbiBmc3RhYgorCXNlZCAtaSAtZSAnL15bI1s6c3BhY2U6XV0qXC9kZXZcL3Jvb3Qve3MvZGVmYXVsdHMvcm8vO3MvXChbWzpzcGFjZTpdXSpbWzpkaWdpdDpdXVwpXChbWzpzcGFjZTpdXSpcKVtbOmRpZ2l0Ol1dJC9cMVwyMC99JyAke0lNQUdFX1JPT1RGU30vZXRjL2ZzdGFiCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgInN5c3Zpbml0IiwgInRydWUiLCAiZmFsc2UiLCBkKX07IHRoZW4KKwkJIyBDaGFuZ2UgdGhlIHZhbHVlIG9mIFJPT1RGU19SRUFEX09OTFkgaW4gL2V0Yy9kZWZhdWx0L3JjUyB0byB5ZXMKKwkJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30vZXRjL2RlZmF1bHQvcmNTIF07IHRoZW4KKwkJCXNlZCAtaSAncy9ST09URlNfUkVBRF9PTkxZPW5vL1JPT1RGU19SRUFEX09OTFk9eWVzLycgJHtJTUFHRV9ST09URlN9L2V0Yy9kZWZhdWx0L3JjUworCQlmaQorCQkjIFJ1biBwb3B1bGF0ZS12b2xhdGlsZS5zaCBhdCByb290ZnMgdGltZSB0byBzZXQgdXAgYmFzaWMgZmlsZXMKKwkJIyBhbmQgZGlyZWN0b3JpZXMgdG8gc3VwcG9ydCByZWFkLW9ubHkgcm9vdGZzLgorCQlpZiBbIC14ICR7SU1BR0VfUk9PVEZTfS9ldGMvaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIF07IHRoZW4KKwkJCSR7SU1BR0VfUk9PVEZTfS9ldGMvaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoCisJCWZpCisJCSMgSWYgd2UncmUgdXNpbmcgb3BlbnNzaCBhbmQgdGhlIC9ldGMvc3NoIGRpcmVjdG9yeSBoYXMgbm8gcHJlLWdlbmVyYXRlZCBrZXlzLAorCQkjIHdlIHNob3VsZCBjb25maWd1cmUgb3BlbnNzaCB0byB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSAvZXRjL3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCQkjIGFuZCB0aGUga2V5cyB1bmRlciAvdmFyL3J1bi9zc2guCisJCWlmIFsgLWQgJHtJTUFHRV9ST09URlN9L2V0Yy9zc2ggXTsgdGhlbgorCQkJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30vZXRjL3NzaC9zc2hfaG9zdF9yc2Ffa2V5IF07IHRoZW4KKwkJCQllY2hvICJTWVNDT05GRElSPS9ldGMvc3NoIiA+PiAke0lNQUdFX1JPT1RGU30vZXRjL2RlZmF1bHQvc3NoCisJCQkJZWNobyAiU1NIRF9PUFRTPSIgPj4gJHtJTUFHRV9ST09URlN9L2V0Yy9kZWZhdWx0L3NzaAorCQkJZWxzZQorCQkJCWVjaG8gIlNZU0NPTkZESVI9L3Zhci9ydW4vc3NoIiA+PiAke0lNQUdFX1JPT1RGU30vZXRjL2RlZmF1bHQvc3NoCisJCQkJZWNobyAiU1NIRF9PUFRTPSctZiAvZXRjL3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seSciID4+ICR7SU1BR0VfUk9PVEZTfS9ldGMvZGVmYXVsdC9zc2gKKwkJCWZpCisJCWZpCisJZmkKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAic3lzdGVtZCIsICJ0cnVlIiwgImZhbHNlIiwgZCl9OyB0aGVuCisJICAgICMgVXBkYXRlIHVzZXIgZGF0YWJhc2UgZmlsZXMgc28gdGhhdCBzZXJ2aWNlcyBkb24ndCBmYWlsIGZvciBhIHJlYWQtb25seSBzeXN0ZW1kIHN5c3RlbQorCSAgICBmb3IgY29uZmZpbGUgaW4gJHtJTUFHRV9ST09URlN9L3Vzci9saWIvc3lzdXNlcnMuZC9zeXN0ZW1kLmNvbmYgJHtJTUFHRV9ST09URlN9L3Vzci9saWIvc3lzdXNlcnMuZC9zeXN0ZW1kLXJlbW90ZS5jb25mOyBkbworCQlbIC1lICRjb25mZmlsZSBdIHx8IGNvbnRpbnVlCisJCWdyZXAgLXYgIl4jIiAkY29uZmZpbGUgfCBzZWQgLWUgJy9eJC9kJyB8IHdoaWxlIHJlYWQgdHlwZSBuYW1lIGlkIGNvbW1lbnQ7IGRvCisJCSAgICBpZiBbICIkdHlwZSIgPSAidSIgXTsgdGhlbgorCQkJdXNlcmFkZF9wYXJhbXM9IiIKKwkJCVsgIiRpZCIgIT0gIi0iIF0gJiYgdXNlcmFkZF9wYXJhbXM9IiR1c2VyYWRkX3BhcmFtcyAtLXVpZCAkaWQiCisJCQlbICIkY29tbWVudCIgIT0gIi0iIF0gJiYgdXNlcmFkZF9wYXJhbXM9IiR1c2VyYWRkX3BhcmFtcyAtLWNvbW1lbnQgJGNvbW1lbnQiCisJCQl1c2VyYWRkX3BhcmFtcz0iJHVzZXJhZGRfcGFyYW1zIC0tc3lzdGVtICRuYW1lIgorCQkJZXZhbCB1c2VyYWRkIC0tcm9vdCAke0lNQUdFX1JPT1RGU30gJHVzZXJhZGRfcGFyYW1zIHx8IHRydWUKKwkJICAgIGVsaWYgWyAiJHR5cGUiID0gImciIF07IHRoZW4KKwkJCWdyb3VwYWRkX3BhcmFtcz0iIgorCQkJWyAiJGlkIiAhPSAiLSIgXSAmJiBncm91cGFkZF9wYXJhbXM9IiRncm91cGFkZF9wYXJhbXMgLS1naWQgJGlkIgorCQkJZ3JvdXBhZGRfcGFyYW1zPSIkZ3JvdXBhZGRfcGFyYW1zIC0tc3lzdGVtICRuYW1lIgorCQkJZXZhbCBncm91cGFkZCAtLXJvb3QgJHtJTUFHRV9ST09URlN9ICRncm91cGFkZF9wYXJhbXMgfHwgdHJ1ZQorCQkgICAgZmkKKwkJZG9uZQorCSAgICBkb25lCisJZmkKK30KKworUEFDS0FHRV9FWENMVURFID8/PSAiIgorUEFDS0FHRV9FWENMVURFW3R5cGVdID0gImxpc3QiCisKK3B5dGhvbiByb290ZnNfcHJvY2Vzc19pZ25vcmUoKSB7CisgICAgZXhjbF9wa2dzID0gZC5nZXRWYXIoIlBBQ0tBR0VfRVhDTFVERSIsIFRydWUpLnNwbGl0KCkKKyAgICBpbnN0X3BrZ3MgPSBkLmdldFZhcigiUEFDS0FHRV9JTlNUQUxMIiwgVHJ1ZSkuc3BsaXQoKQorICAgIGluc3RfYXR0ZW1wdF9wa2dzID0gZC5nZXRWYXIoIlBBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWSIsIFRydWUpLnNwbGl0KCkKKworICAgIGQuc2V0VmFyKCdQQUNLQUdFX0lOU1RBTExfT1JJRycsICcgJy5qb2luKGluc3RfcGtncykpCisgICAgZC5zZXRWYXIoJ1BBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWScsICcgJy5qb2luKGluc3RfYXR0ZW1wdF9wa2dzKSkKKworICAgIGZvciBwa2cgaW4gZXhjbF9wa2dzOgorICAgICAgICBpZiBwa2cgaW4gaW5zdF9wa2dzOgorICAgICAgICAgICAgYmIud2FybigiUGFja2FnZSAlcywgc2V0IHRvIGJlIGV4Y2x1ZGVkLCBpcyBpbiAlcyBQQUNLQUdFX0lOU1RBTEwgKCVzKS4gIEl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LiIgJSAocGtnLCBkLmdldFZhcignUE4nLCBUcnVlKSwgaW5zdF9wa2dzKSkKKyAgICAgICAgICAgIGluc3RfcGtncy5yZW1vdmUocGtnKQorCisgICAgICAgIGlmIHBrZyBpbiBpbnN0X2F0dGVtcHRfcGtnczoKKyAgICAgICAgICAgIGJiLndhcm4oIlBhY2thZ2UgJXMsIHNldCB0byBiZSBleGNsdWRlZCwgaXMgaW4gJXMgUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZICglcykuICBJdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4iICUgKHBrZywgZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGluc3RfcGtncykpCisgICAgICAgICAgICBpbnN0X2F0dGVtcHRfcGtncy5yZW1vdmUocGtnKQorCisgICAgZC5zZXRWYXIoIlBBQ0tBR0VfSU5TVEFMTCIsICcgJy5qb2luKGluc3RfcGtncykpCisgICAgZC5zZXRWYXIoIlBBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWSIsICcgJy5qb2luKGluc3RfYXR0ZW1wdF9wa2dzKSkKK30KK2RvX3Jvb3Rmc1twcmVmdW5jc10gKz0gInJvb3Rmc19wcm9jZXNzX2lnbm9yZSIKKworIyBXZSBoYXZlIHRvIGRlbGF5IHRoZSBydW50aW1lX21hcHBpbmdfcmVuYW1lIHVudGlsIGp1c3QgYmVmb3JlIHJvb3RmcyBydW5zCisjIG90aGVyd2lzZSwgdGhlIG11bHRpbGliIHJlbmFtaW5nIGNvdWxkIHN0ZXAgaW4gYW5kIHNxdWFzaCBhbnkgZml4dXBzIHRoYXQKKyMgbWF5IGhhdmUgb2NjdXJyZWQuCitweXRob24gcm9vdGZzX3J1bnRpbWVfbWFwcGluZygpIHsKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiUEFDS0FHRV9JTlNUQUxMIiwgcG4sIGQpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZIiwgcG4sIGQpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiQkFEX1JFQ09NTUVOREFUSU9OUyIsIHBuLCBkKQorfQorZG9fcm9vdGZzW3ByZWZ1bmNzXSArPSAicm9vdGZzX3J1bnRpbWVfbWFwcGluZyIKKworZmFrZXJvb3QgcHl0aG9uIGRvX3Jvb3RmcyAoKSB7CisgICAgZnJvbSBvZS5yb290ZnMgaW1wb3J0IGNyZWF0ZV9yb290ZnMKKyAgICBmcm9tIG9lLmltYWdlIGltcG9ydCBjcmVhdGVfaW1hZ2UKKyAgICBmcm9tIG9lLm1hbmlmZXN0IGltcG9ydCBjcmVhdGVfbWFuaWZlc3QKKworICAgICMgZ2VuZXJhdGUgdGhlIGluaXRpYWwgbWFuaWZlc3QKKyAgICBjcmVhdGVfbWFuaWZlc3QoZCkKKworICAgICMgZ2VuZXJhdGUgcm9vdGZzCisgICAgY3JlYXRlX3Jvb3RmcyhkKQorCisgICAgIyBnZW5lcmF0ZSBmaW5hbCBpbWFnZXMKKyAgICBjcmVhdGVfaW1hZ2UoZCkKK30KKworaW5zZXJ0X2ZlZWRfdXJpcyAoKSB7CisJCisJZWNobyAiQnVpbGRpbmcgZmVlZHMgZm9yIFske0RJU1RST31dLi4iCisKKwlmb3IgbGluZSBpbiAke0ZFRURfVVJJU30KKwlkbworCQkjIHN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcy90YWJzLCB0aGVuIHNwbGl0IGludG8gbmFtZSBhbmQgdXJpCisJCWxpbmVfY2xlYW49ImBlY2hvICIkbGluZSJ8c2VkICdzL15bIFx0XSovLztzL1sgXHRdKiQvLydgIgorCQlmZWVkX25hbWU9ImBlY2hvICIkbGluZV9jbGVhbiIgfCBzZWQgLW4gJ3MvXCguKlwpIyNcKC4qXCkvXDEvcCdgIgorCQlmZWVkX3VyaT0iYGVjaG8gIiRsaW5lX2NsZWFuIiB8IHNlZCAtbiAncy9cKC4qXCkjI1woLipcKS9cMi9wJ2AiCisJCQorCQllY2hvICJBZGRlZCAkZmVlZF9uYW1lIGZlZWQgd2l0aCBVUkwgJGZlZWRfdXJpIgorCQkKKwkJIyBpbnNlcnQgbmV3IGZlZWQtc291cmNlcworCQllY2hvICJzcmMvZ3ogJGZlZWRfbmFtZSAkZmVlZF91cmkiID4+ICR7SU1BR0VfUk9PVEZTfS9ldGMvb3BrZy8ke2ZlZWRfbmFtZX0tZmVlZC5jb25mCisJZG9uZQorfQorCitNVUxUSUxJQlJFX0FMTE9XX1JFUCA9LiAiJHtiYXNlX2JpbmRpcn18JHtiYXNlX3NiaW5kaXJ9fCR7YmluZGlyfXwke3NiaW5kaXJ9fCR7bGliZXhlY2Rpcn18JHtzeXNjb25mZGlyfXwke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXZ8L2xpYi9tb2R1bGVzL1teL10qL21vZHVsZXMuKnwiCitNVUxUSUxJQl9DSEVDS19GSUxFID0gIiR7V09SS0RJUn0vbXVsdGlsaWJfY2hlY2sucHkiCitNVUxUSUxJQl9URU1QX1JPT1RGUyA9ICIke1dPUktESVJ9L211bHRpbGliIgorCisjIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gZGlzYWxsb3cgZW1wdHkgcm9vdCBwYXNzd29yZCBpZiAnZGVidWctdHdlYWtzJyBpcyBub3QgaW4gSU1BR0VfRkVBVFVSRVMuCit6YXBfZW1wdHlfcm9vdF9wYXNzd29yZCAoKSB7CisJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30vZXRjL3NoYWRvdyBdOyB0aGVuCisJCXNlZCAtaSAncyVecm9vdDo6JXJvb3Q6KjolJyAke0lNQUdFX1JPT1RGU30vZXRjL3NoYWRvdworICAgICAgICBmaQorCWlmIFsgLWUgJHtJTUFHRV9ST09URlN9L2V0Yy9wYXNzd2QgXTsgdGhlbgorCQlzZWQgLWkgJ3MlXnJvb3Q6OiVyb290Oio6JScgJHtJTUFHRV9ST09URlN9L2V0Yy9wYXNzd2QKKwlmaQorfSAKKworIyBhbGxvdyBkcm9wYmVhci9vcGVuc3NoIHRvIGFjY2VwdCByb290IGxvZ2lucyBhbmQgbG9naW5zIGZyb20gYWNjb3VudHMgd2l0aCBhbiBlbXB0eSBwYXNzd29yZCBzdHJpbmcKK3NzaF9hbGxvd19lbXB0eV9wYXNzd29yZCAoKSB7CisJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZyBdOyB0aGVuCisJCXNlZCAtaSAncy9eWyNbOnNwYWNlOl1dKlBlcm1pdFJvb3RMb2dpbi4qL1Blcm1pdFJvb3RMb2dpbiB5ZXMvJyAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZworCQlzZWQgLWkgJ3MvXlsjWzpzcGFjZTpdXSpQZXJtaXRFbXB0eVBhc3N3b3Jkcy4qL1Blcm1pdEVtcHR5UGFzc3dvcmRzIHllcy8nICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnCisJZmkKKworCWlmIFsgLWUgJHtJTUFHRV9ST09URlN9JHtzYmluZGlyfS9kcm9wYmVhciBdIDsgdGhlbgorCQlpZiBncmVwIC1xIERST1BCRUFSX0VYVFJBX0FSR1MgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2Ryb3BiZWFyIDI+L2Rldi9udWxsIDsgdGhlbgorCQkJaWYgISBncmVwIC1xICJEUk9QQkVBUl9FWFRSQV9BUkdTPS4qLUIiICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9kcm9wYmVhciA7IHRoZW4KKwkJCQlzZWQgLWkgJ3MvXkRST1BCRUFSX0VYVFJBX0FSR1M9IipcKFteIl0qXCkiKi9EUk9QQkVBUl9FWFRSQV9BUkdTPSJcMSAtQiIvJyAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvZHJvcGJlYXIKKwkJCWZpCisJCWVsc2UKKwkJCXByaW50ZiAnXG5EUk9QQkVBUl9FWFRSQV9BUkdTPSItQiJcbicgPj4gJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2Ryb3BiZWFyCisJCWZpCisJZmkKKworCWlmIFsgLWQgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9wYW0uZCBdIDsgdGhlbgorCQlzZWQgLWkgJ3MvbnVsbG9rX3NlY3VyZS9udWxsb2svJyAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3BhbS5kLyoKKwlmaQorfQorCisjIERpc2FibGUgRE5TIGxvb2t1cHMsIHRoZSBTU0hfRElTQUJMRV9ETlNfTE9PS1VQIGNhbiBiZSBvdmVycmlkZGVuIHRvIGFsbG93CisjIGRpc3Ryb3MgdG8gY2hvb3NlIG5vdCB0byB0YWtlIHRoaXMgY2hhbmdlCitTU0hfRElTQUJMRV9ETlNfTE9PS1VQID89ICIgc3NoX2Rpc2FibGVfZG5zX2xvb2t1cCA7ICIKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EX2FwcGVuZF9xZW11YWxsID0gIiR7U1NIX0RJU0FCTEVfRE5TX0xPT0tVUH0iCitzc2hfZGlzYWJsZV9kbnNfbG9va3VwICgpIHsKKwlpZiBbIC1lICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnIF07IHRoZW4KKwkJc2VkIC1pIC1lICdzOiNVc2VETlMgeWVzOlVzZUROUyBubzonICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnCisJZmkKK30KKworIyBFbmFibGUgcG9zdGluc3QgbG9nZ2luZyBpZiBkZWJ1Zy10d2Vha3MgaXMgZW5hYmxlZAorcG9zdGluc3RfZW5hYmxlX2xvZ2dpbmcgKCkgeworCW1rZGlyIC1wICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorCWVjaG8gIlBPU1RJTlNUX0xPR0dJTkc9MSIgPj4gJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3Bvc3RpbnN0CisJZWNobyAiTE9HRklMRT0ke1BPU1RJTlNUX0xPR0ZJTEV9IiA+PiAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvcG9zdGluc3QKK30KKworIyBNb2RpZnkgc3lzdGVtZCBkZWZhdWx0IHRhcmdldAorc2V0X3N5c3RlbWRfZGVmYXVsdF90YXJnZXQgKCkgeworCWlmIFsgLWQgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9zeXN0ZW1kL3N5c3RlbSAtYSAtZSAke0lNQUdFX1JPT1RGU30ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyR7U1lTVEVNRF9ERUZBVUxUX1RBUkdFVH0gXTsgdGhlbgorCQlsbiAtc2YgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8ke1NZU1RFTURfREVGQVVMVF9UQVJHRVR9ICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0vZGVmYXVsdC50YXJnZXQKKwlmaQorfQorCisjIElmIC92YXIvdm9sYXRpbGUgaXMgbm90IGVtcHR5LCB3ZSBoYXZlIHNlZW4gcHJvYmxlbXMgd2hlcmUgcHJvZ3JhbXMgc3VjaCBhcyB0aGUKKyMgam91cm5hbCBtYWtlIGFzc3VtcHRpb25zIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZiAvdmFyL3ZvbGF0aWxlLiBUaGUgam91cm5hbAorIyB3b3VsZCB0aGVuIHdyaXRlIHRvIC92YXIvdm9sYXRpbGUgYmVmb3JlIGl0IHdhcyBtb3VudGVkLCB0aHVzIGhpZGluZyB0aGUKKyMgaXRlbXMgcHJldmlvdXNseSB3cml0dGVuLgorIworIyBUaGlzIGNoYW5nZSBpcyB0byBhdHRlbXB0IHRvIGZpeCB0aG9zZSB0eXBlcyBvZiBpc3N1ZXMgaW4gYSB3YXkgdGhhdCBkb2Vzbid0CisjIGFmZmVjdCB1c2VycyB0aGF0IG1heSBub3QgYmUgdXNpbmcgL3Zhci92b2xhdGlsZS4KK2VtcHR5X3Zhcl92b2xhdGlsZSAoKSB7CisJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30vZXRjL2ZzdGFiIF07IHRoZW4KKwkJbWF0Y2g9YGF3ayAnJDEgIX4gIiMiICYmICQyIH4gL1wvdmFyXC92b2xhdGlsZS97cHJpbnQgJDJ9JyAke0lNQUdFX1JPT1RGU30vZXRjL2ZzdGFiIDI+IC9kZXYvbnVsbGAKKwkJaWYgWyAtbiAiJG1hdGNoIiBdOyB0aGVuCisJCQlmaW5kICR7SU1BR0VfUk9PVEZTfS92YXIvdm9sYXRpbGUgLW1pbmRlcHRoIDEgLWRlbGV0ZQorCQlmaQorCWZpCit9CisKKyMgVHVybiBhbnkgc3ltYm9saWMgL3NiaW4vaW5pdCBsaW5rIGludG8gYSBmaWxlCityZW1vdmVfaW5pdF9saW5rICgpIHsKKwlpZiBbIC1oICR7SU1BR0VfUk9PVEZTfS9zYmluL2luaXQgXTsgdGhlbgorCQlMSU5LRklMRT0ke0lNQUdFX1JPT1RGU31gcmVhZGxpbmsgJHtJTUFHRV9ST09URlN9L3NiaW4vaW5pdGAKKwkJcm0gJHtJTUFHRV9ST09URlN9L3NiaW4vaW5pdAorCQljcCAkTElOS0ZJTEUgJHtJTUFHRV9ST09URlN9L3NiaW4vaW5pdAorCWZpCit9CisKK21ha2VfemltYWdlX3N5bWxpbmtfcmVsYXRpdmUgKCkgeworCWlmIFsgLUwgJHtJTUFHRV9ST09URlN9L2Jvb3QvekltYWdlIF07IHRoZW4KKwkJKGNkICR7SU1BR0VfUk9PVEZTfS9ib290LyAmJiBmb3IgaSBpbiBgbHMgekltYWdlLSogfCBzb3J0YDsgZG8gbG4gLXNmICRpIHpJbWFnZTsgZG9uZSkKKwlmaQorfQorCitweXRob24gd3JpdGVfaW1hZ2VfbWFuaWZlc3QgKCkgeworICAgIGZyb20gb2Uucm9vdGZzIGltcG9ydCBpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcworICAgIHdpdGggb3BlbihkLmdldFZhcignSU1BR0VfTUFOSUZFU1QnLCBUcnVlKSwgJ3crJykgYXMgaW1hZ2VfbWFuaWZlc3Q6CisgICAgICAgIGltYWdlX21hbmlmZXN0LndyaXRlKGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQsICd2ZXInKSkKKyAgICAgICAgaW1hZ2VfbWFuaWZlc3Qud3JpdGUoIlxuIikKK30KKworIyBDYW4gYmUgdXNlIHRvIGNyZWF0ZSAvZXRjL3RpbWVzdGFtcCBkdXJpbmcgaW1hZ2UgY29uc3RydWN0aW9uIHRvIGdpdmUgYSByZWFzb25hYmx5IAorIyBzYW5lIGRlZmF1bHQgdGltZSBzZXR0aW5nCityb290ZnNfdXBkYXRlX3RpbWVzdGFtcCAoKSB7CisJZGF0ZSAtdSArJTRZJTJtJTJkJTJIJTJNJTJTID4ke0lNQUdFX1JPT1RGU30vZXRjL3RpbWVzdGFtcAorfQorCisjIFByZXZlbnQgWCBmcm9tIGJlaW5nIHN0YXJ0ZWQKK3Jvb3Rmc19ub194X3N0YXJ0dXAgKCkgeworCWlmIFsgLWYgJHtJTUFHRV9ST09URlN9L2V0Yy9pbml0LmQveHNlcnZlci1ub2RtIF07IHRoZW4KKwkJY2htb2QgYS14ICR7SU1BR0VfUk9PVEZTfS9ldGMvaW5pdC5kL3hzZXJ2ZXItbm9kbQorCWZpCit9CisKK3Jvb3Rmc190cmltX3NjaGVtYXMgKCkgeworCWZvciBzY2hlbWEgaW4gJHtJTUFHRV9ST09URlN9L2V0Yy9nY29uZi9zY2hlbWFzLyouc2NoZW1hcworCWRvCisJCSMgTmVlZCB0aGlzIGluIGNhc2Ugbm8gZmlsZXMgZXhpc3QKKwkJaWYgWyAtZSAkc2NoZW1hIF07IHRoZW4KKwkJCW9lLXRyaW0tc2NoZW1hcyAkc2NoZW1hID4gJHNjaGVtYS5uZXcKKwkJCW12ICRzY2hlbWEubmV3ICRzY2hlbWEKKwkJZmkKKwlkb25lCit9CisKK3Jvb3Rmc19jaGVja19ob3N0X3VzZXJfY29udGFtaW5hdGVkICgpIHsKKwljb250YW1pbmF0ZWQ9IiR7V09SS0RJUn0vaG9zdC11c2VyLWNvbnRhbWluYXRlZC50eHQiCisJSE9TVF9VU0VSX1VJRD0iJChQU0VVRE9fVU5MT0FEPTEgaWQgLXUpIgorCUhPU1RfVVNFUl9HSUQ9IiQoUFNFVURPX1VOTE9BRD0xIGlkIC1nKSIKKworCWZpbmQgIiR7SU1BR0VfUk9PVEZTfSIgLXdob2xlbmFtZSAiJHtJTUFHRV9ST09URlN9L2hvbWUiIC1wcnVuZSBcCisJICAgIC11c2VyICIkSE9TVF9VU0VSX1VJRCIgLW8gLWdyb3VwICIkSE9TVF9VU0VSX0dJRCIgPiIkY29udGFtaW5hdGVkIgorCisJaWYgWyAtcyAiJGNvbnRhbWluYXRlZCIgXTsgdGhlbgorCQllY2hvICJXQVJOSU5HOiBQYXRocyBpbiB0aGUgcm9vdGZzIGFyZSBvd25lZCBieSB0aGUgc2FtZSB1c2VyIG9yIGdyb3VwIGFzIHRoZSB1c2VyIHJ1bm5pbmcgYml0YmFrZS4gU2VlIHRoZSBsb2dmaWxlIGZvciB0aGUgc3BlY2lmaWMgcGF0aHMuIgorCQljYXQgIiRjb250YW1pbmF0ZWQiIHwgc2VkICJzLF4sICAsIgorCWZpCit9CisKKyMgTWFrZSBhbnkgYWJzb2x1dGUgbGlua3MgaW4gYSBzeXNyb290IHJlbGF0aXZlCityb290ZnNfc3lzcm9vdF9yZWxhdGl2ZWxpbmtzICgpIHsKKwlzeXNyb290LXJlbGF0aXZlbGlua3MucHkgJHtTREtfT1VUUFVUfS8ke1NES1RBUkdFVFNZU1JPT1R9Cit9CisKK2RvX2ZldGNoW25vZXhlY10gPSAiMSIKK2RvX3VucGFja1tub2V4ZWNdID0gIjEiCitkb19wYXRjaFtub2V4ZWNdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCitkb19pbnN0YWxsW25vZXhlY10gPSAiMSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlX3FhW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2VkYXRhW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW25vZXhlY10gPSAiMSIKKworYWRkdGFzayByb290ZnMgYmVmb3JlIGRvX2J1aWxkCisjIEFsbG93IHRoZSBrZXJuZWwgdG8gYmUgcmVwYWNrZWQgd2l0aCB0aGUgaW5pdHJhbWZzIGFuZCBib290IGltYWdlIGZpbGUgYXMgYSBzaW5nbGUgZmlsZQorZG9fYnVuZGxlX2luaXRyYW1mc1tkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fYnVuZGxlX2luaXRyYW1mcyIKK2RvX2J1bmRsZV9pbml0cmFtZnNbbm9zdGFtcF0gPSAiMSIKK2RvX2J1bmRsZV9pbml0cmFtZnNbbm9leGVjXSA9ICIxIgorZG9fYnVuZGxlX2luaXRyYW1mcyAoKSB7CisJOgorfQorYWRkdGFzayBidW5kbGVfaW5pdHJhbWZzIGFmdGVyIGRvX3Jvb3RmcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA2NDAzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzLmJiY2xhc3MKQEAgLTAsMCArMSwyNjAgQEAKKworIyBUaGUgZGVmYXVsdCBhbGlnbWVudCBvZiB0aGUgc2l6ZSBvZiB0aGUgcm9vdGZzIGlzIHNldCB0byAxS2lCLiBJbiBjYXNlCisjIHlvdSdyZSB1c2luZyB0aGUgU0QgY2FyZCBlbXVsYXRpb24gb2YgYSBRRU1VIHN5c3RlbSBzaW11bGF0b3IgeW91IG1heQorIyBzZXQgdGhpcyB2YWx1ZSB0byAyMDQ4ICgyTWlCIGFsaWdubWVudCkuCitJTUFHRV9ST09URlNfQUxJR05NRU5UID89ICIxIgorCitkZWYgaW1hZ2V0eXBlc19nZXRkZXBlbmRzKGQpOgorICAgIGRlZiBhZGRkZXAoZGVwc3RyLCBkZXBzKToKKyAgICAgICAgZm9yIGkgaW4gKGRlcHN0ciBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGkgbm90IGluIGRlcHM6CisgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoaSkKKworICAgIGRlcHMgPSBbXQorICAgIGN0eXBlcyA9IGQuZ2V0VmFyKCdDT01QUkVTU0lPTlRZUEVTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGZvciB0eXBlIGluIChkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBpZiB0eXBlIGluIFsidm1kayIsICJ2ZGkiLCAicWNvdzIiLCAibGl2ZSIsICJpc28iLCAiaGRkaW1nIl06CisgICAgICAgICAgICB0eXBlID0gImV4dDQiCisgICAgICAgIGJhc2V0eXBlID0gdHlwZQorICAgICAgICBmb3IgY3R5cGUgaW4gY3R5cGVzOgorICAgICAgICAgICAgaWYgdHlwZS5lbmRzd2l0aCgiLiIgKyBjdHlwZSk6CisgICAgICAgICAgICAgICAgYmFzZXR5cGUgPSB0eXBlWzotbGVuKCIuIiArIGN0eXBlKV0KKyAgICAgICAgICAgICAgICBhZGRkZXAoZC5nZXRWYXIoIkNPTVBSRVNTX0RFUEVORFNfJXMiICUgY3R5cGUsIFRydWUpLCBkZXBzKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGZvciB0eXBlZGVwZW5kcyBpbiAoZC5nZXRWYXIoIklNQUdFX1RZUEVERVBfJXMiICUgYmFzZXR5cGUsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgYWRkZGVwKGQuZ2V0VmFyKCdJTUFHRV9ERVBFTkRTXyVzJyAlIHR5cGVkZXBlbmRzLCBUcnVlKSAsIGRlcHMpCisgICAgICAgIGFkZGRlcChkLmdldFZhcignSU1BR0VfREVQRU5EU18lcycgJSBiYXNldHlwZSwgVHJ1ZSkgLCBkZXBzKQorCisgICAgZGVwc3RyID0gIiIKKyAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgIGRlcHN0ciArPSAiICIgKyBkZXAgKyAiOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisgICAgcmV0dXJuIGRlcHN0cgorCisKK1haX0NPTVBSRVNTSU9OX0xFVkVMID89ICItZSAtNiIKK1haX0lOVEVHUklUWV9DSEVDSyA/PSAiY3JjMzIiCitYWl9USFJFQURTID89ICItVCAwIgorCitKRkZTMl9TVU1fRVhUUkFfQVJHUyA/PSAiIgorSU1BR0VfQ01EX2pmZnMyID0gIm1rZnMuamZmczIgLS1yb290PSR7SU1BR0VfUk9PVEZTfSAtLWZha2V0aW1lIC0tb3V0cHV0PSR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuamZmczIgJHtFWFRSQV9JTUFHRUNNRH0iCisKK0lNQUdFX0NNRF9jcmFtZnMgPSAibWtmcy5jcmFtZnMgJHtJTUFHRV9ST09URlN9ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuY3JhbWZzICR7RVhUUkFfSU1BR0VDTUR9IgorCitvZV9ta2V4dDIzNGZzICgpIHsKKwlmc3R5cGU9JDEKKwlleHRyYV9pbWFnZWNtZD0iIgorCisJaWYgWyAkIyAtZ3QgMSBdOyB0aGVuCisJCXNoaWZ0CisJCWV4dHJhX2ltYWdlY21kPSRACisJZmkKKworCSMgSWYgZ2VuZXJhdGluZyBhbiBlbXB0eSBpbWFnZSB0aGUgc2l6ZSBvZiB0aGUgc3BhcnNlIGJsb2NrIHNob3VsZCBiZSBsYXJnZQorCSMgZW5vdWdoIHRvIGFsbG9jYXRlIGFuIGV4dDQgZmlsZXN5c3RlbSB1c2luZyA0MDk2IGJ5dGVzIHBlciBpbm9kZSwgdGhpcyBpcworCSMgYWJvdXQgNjBLLCBzbyBkZCBuZWVkcyBhIG1pbmltdW0gY291bnQgb2YgNjAsIHdpdGggYnM9MTAyNCAoYnl0ZXMgcGVyIElPKQorCWV2YWwgbG9jYWwgQ09VTlQ9XCIwXCIKKwlldmFsIGxvY2FsIE1JTl9DT1VOVD1cIjYwXCIKKwlpZiBbICRST09URlNfU0laRSAtbHQgJE1JTl9DT1VOVCBdOyB0aGVuCisJCWV2YWwgQ09VTlQ9XCIkTUlOX0NPVU5UXCIKKwlmaQorCSMgQ3JlYXRlIGEgc3BhcnNlIGltYWdlIGJsb2NrCisJZGQgaWY9L2Rldi96ZXJvIG9mPSR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuJGZzdHlwZSBzZWVrPSRST09URlNfU0laRSBjb3VudD0kQ09VTlQgYnM9MTAyNAorCW1rZnMuJGZzdHlwZSAtRiAkZXh0cmFfaW1hZ2VjbWQgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy4kZnN0eXBlIC1kICR7SU1BR0VfUk9PVEZTfQorfQorCitJTUFHRV9DTURfZXh0MiA9ICJvZV9ta2V4dDIzNGZzIGV4dDIgJHtFWFRSQV9JTUFHRUNNRH0iCitJTUFHRV9DTURfZXh0MyA9ICJvZV9ta2V4dDIzNGZzIGV4dDMgJHtFWFRSQV9JTUFHRUNNRH0iCitJTUFHRV9DTURfZXh0NCA9ICJvZV9ta2V4dDIzNGZzIGV4dDQgJHtFWFRSQV9JTUFHRUNNRH0iCisKK01JTl9CVFJGU19TSVpFID89ICIxNjM4NCIKK0lNQUdFX0NNRF9idHJmcyAoKSB7CisJaWYgWyAke1JPT1RGU19TSVpFfSAtZ3QgJHtNSU5fQlRSRlNfU0laRX0gXTsgdGhlbgorCQlkZCBpZj0vZGV2L3plcm8gb2Y9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5idHJmcyBjb3VudD0ke1JPT1RGU19TSVpFfSBicz0xMDI0CisJCW1rZnMuYnRyZnMgJHtFWFRSQV9JTUFHRUNNRH0gLXIgJHtJTUFHRV9ST09URlN9ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuYnRyZnMKKwllbHNlCisJCWJiZmF0YWwgIlJvb3RmcyBpcyB0b28gc21hbGwgZm9yIEJUUkZTIChSb290ZnMgQWN0dWFsIFNpemU6ICR7Uk9PVEZTX1NJWkV9LCBCVFJGUyBNaW5pbXVtIFNpemU6ICR7TUlOX0JUUkZTX1NJWkV9KSIKKwlmaQorfQorCitJTUFHRV9DTURfc3F1YXNoZnMgPSAibWtzcXVhc2hmcyAke0lNQUdFX1JPT1RGU30gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5zcXVhc2hmcyAke0VYVFJBX0lNQUdFQ01EfSAtbm9hcHBlbmQiCitJTUFHRV9DTURfc3F1YXNoZnMteHogPSAibWtzcXVhc2hmcyAke0lNQUdFX1JPT1RGU30gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5zcXVhc2hmcy14eiAke0VYVFJBX0lNQUdFQ01EfSAtbm9hcHBlbmQgLWNvbXAgeHoiCitJTUFHRV9DTURfc3F1YXNoZnMtbHpvID0gIm1rc3F1YXNoZnMgJHtJTUFHRV9ST09URlN9ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuc3F1YXNoZnMtbHpvICR7RVhUUkFfSU1BR0VDTUR9IC1ub2FwcGVuZCAtY29tcCBsem8iCisKKyMgQnkgZGVmYXVsdCwgdGFyIGZyb20gdGhlIGhvc3QgaXMgdXNlZCwgd2hpY2ggY2FuIGJlIHF1aXRlIG9sZC4gSWYKKyMgeW91IG5lZWQgc3BlY2lhbCBwYXJhbWV0ZXJzIChsaWtlIC0teGF0dHJzKSB3aGljaCBhcmUgb25seSBzdXBwb3J0ZWQKKyMgYnkgR05VIHRhciB1cHN0cmVhbSA+PSAxLjI3LCB0aGVuIG92ZXJyaWRlIHRoYXQgZGVmYXVsdDoKKyMgSU1BR0VfQ01EX1RBUiA9ICJ0YXIgLS14YXR0cnMgLS14YXR0cnMtaW5jbHVkZT0qIgorIyBJTUFHRV9ERVBFTkRTX3Rhcl9hcHBlbmQgPSAiIHRhci1yZXBsYWNlbWVudC1uYXRpdmUiCisjIEVYVFJBTkFUSVZFUEFUSCArPSAidGFyLW5hdGl2ZSIKKyMKKyMgVGhlIEdOVSBkb2N1bWVudGF0aW9uIGRvZXMgbm90IHNwZWNpZnkgd2hldGhlciAtLXhhdHRycy1pbmNsdWRlIGlzIG5lY2Vzc2FyeS4KKyMgSW4gcHJhY3RpY2UsIGl0IHR1cm5lZCBvdXQgdG8gYmUgbm90IG5lZWRlZCB3aGVuIGNyZWF0aW5nIGFyY2hpdmVzIGFuZAorIyByZXF1aXJlZCB3aGVuIGV4dHJhY3RpbmcsIGJ1dCBpdCBzZWVtcyBwcnVkZW50IHRvIHVzZSBpdCBpbiBib3RoIGNhc2VzLgorSU1BR0VfQ01EX1RBUiA/PSAidGFyIgorSU1BR0VfQ01EX3RhciA9ICIke0lNQUdFX0NNRF9UQVJ9IC1jdmYgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy50YXIgLUMgJHtJTUFHRV9ST09URlN9IC4iCisKK2RvX3Jvb3Rmc1tjbGVhbmRpcnNdICs9ICIke1dPUktESVJ9L2NwaW9fYXBwZW5kIgorSU1BR0VfQ01EX2NwaW8gKCkgeworCShjZCAke0lNQUdFX1JPT1RGU30gJiYgZmluZCAuIHwgY3BpbyAtbyAtSCBuZXdjID4ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmNwaW8pCisJaWYgWyAhIC1MICR7SU1BR0VfUk9PVEZTfS9pbml0IC1hICEgLWUgJHtJTUFHRV9ST09URlN9L2luaXQgXTsgdGhlbgorCQlpZiBbIC1MICR7SU1BR0VfUk9PVEZTfS9zYmluL2luaXQgLW8gLWUgJHtJTUFHRV9ST09URlN9L3NiaW4vaW5pdCBdOyB0aGVuCisJCQlsbiAtc2YgL3NiaW4vaW5pdCAke1dPUktESVJ9L2NwaW9fYXBwZW5kL2luaXQKKwkJZWxzZQorCQkJdG91Y2ggJHtXT1JLRElSfS9jcGlvX2FwcGVuZC9pbml0CisJCWZpCisJCShjZCAgJHtXT1JLRElSfS9jcGlvX2FwcGVuZCAmJiBlY2hvIC4vaW5pdCB8IGNwaW8gLW9BIC1IIG5ld2MgLUYgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5jcGlvKQorCWZpCit9CisKK0VMRl9LRVJORUwgPz0gIiR7U1RBR0lOR19ESVJfSE9TVH0vdXNyL3NyYy9rZXJuZWwvJHtLRVJORUxfSU1BR0VUWVBFfSIKK0VMRl9BUFBFTkQgPz0gInJhbWRpc2tfc2l6ZT0zMjc2OCByb290PS9kZXYvcmFtMCBydyBjb25zb2xlPSIKKworSU1BR0VfQ01EX2VsZiAoKSB7CisJdGVzdCAtZiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmVsZiAmJiBybSAtZiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmVsZgorCW1rZWxmSW1hZ2UgLS1rZXJuZWw9JHtFTEZfS0VSTkVMfSAtLWluaXRyZD0ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmNwaW8uZ3ogLS1vdXRwdXQ9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5lbGYgLS1hcHBlbmQ9JyR7RUxGX0FQUEVORH0nICR7RVhUUkFfSU1BR0VDTUR9Cit9CitJTUFHRV9UWVBFREVQX2VsZiA9ICJjcGlvLmd6IgorCitVQklfVk9MTkFNRSA/PSAiJHtNQUNISU5FfS1yb290ZnMiCisKK211bHRpdWJpX21rZnMoKSB7CisJbG9jYWwgbWt1Ymlmc19hcmdzPSIkMSIKKwlsb2NhbCB1YmluaXplX2FyZ3M9IiQyIgorCWlmIFsgLXogIiQzIiBdOyB0aGVuCisJCWxvY2FsIHZuYW1lPSIiCisJZWxzZQorCQlsb2NhbCB2bmFtZT0iXyQzIgorCWZpCisKKwllY2hvIFxbdWJpZnNcXSA+IHViaW5pemUke3ZuYW1lfS5jZmcKKwllY2hvIG1vZGU9dWJpID4+IHViaW5pemUke3ZuYW1lfS5jZmcKKwllY2hvIGltYWdlPSR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfSR7dm5hbWV9LnJvb3Rmcy51YmlmcyA+PiB1YmluaXplJHt2bmFtZX0uY2ZnCisJZWNobyB2b2xfaWQ9MCA+PiB1YmluaXplJHt2bmFtZX0uY2ZnCisJZWNobyB2b2xfdHlwZT1keW5hbWljID4+IHViaW5pemUke3ZuYW1lfS5jZmcKKwllY2hvIHZvbF9uYW1lPSR7VUJJX1ZPTE5BTUV9ID4+IHViaW5pemUke3ZuYW1lfS5jZmcKKwllY2hvIHZvbF9mbGFncz1hdXRvcmVzaXplID4+IHViaW5pemUke3ZuYW1lfS5jZmcKKwlta2ZzLnViaWZzIC1yICR7SU1BR0VfUk9PVEZTfSAtbyAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ke3ZuYW1lfS5yb290ZnMudWJpZnMgJHtta3ViaWZzX2FyZ3N9CisJdWJpbml6ZSAtbyAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ke3ZuYW1lfS5yb290ZnMudWJpICR7dWJpbml6ZV9hcmdzfSB1YmluaXplJHt2bmFtZX0uY2ZnCisKKwkjIENsZWFudXAgY2ZnIGZpbGUKKwltdiB1YmluaXplJHt2bmFtZX0uY2ZnICR7REVQTE9ZX0RJUl9JTUFHRX0vCisKKwkjIENyZWF0ZSBvd24gc3ltbGluaworCWNkICR7REVQTE9ZX0RJUl9JTUFHRX0KKwlpZiBbIC1lICR7SU1BR0VfTkFNRX0ke3ZuYW1lfS5yb290ZnMudWJpZnMgXTsgdGhlbgorCQlsbiAtc2YgJHtJTUFHRV9OQU1FfSR7dm5hbWV9LnJvb3Rmcy51YmlmcyBcCisJCSR7SU1BR0VfTElOS19OQU1FfSR7dm5hbWV9LnViaWZzCisJZmkKKwlpZiBbIC1lICR7SU1BR0VfTkFNRX0ke3ZuYW1lfS5yb290ZnMudWJpIF07IHRoZW4KKwkJbG4gLXNmICR7SU1BR0VfTkFNRX0ke3ZuYW1lfS5yb290ZnMudWJpIFwKKwkJJHtJTUFHRV9MSU5LX05BTUV9JHt2bmFtZX0udWJpCisJZmkKKwljZCAtCit9CisKK0lNQUdFX0NNRF9tdWx0aXViaSAoKSB7CisJIyBTcGxpdCBNS1VCSUZTX0FSR1NfPG5hbWU+IGFuZCBVQklOSVpFX0FSR1NfPG5hbWU+CisJZm9yIG5hbWUgaW4gJHtNVUxUSVVCSV9CVUlMRH07IGRvCisJCWV2YWwgbG9jYWwgbWt1Ymlmc19hcmdzPVwiXCRNS1VCSUZTX0FSR1NfJHtuYW1lfVwiCisJCWV2YWwgbG9jYWwgdWJpbml6ZV9hcmdzPVwiXCRVQklOSVpFX0FSR1NfJHtuYW1lfVwiCisKKwkJbXVsdGl1YmlfbWtmcyAiJHtta3ViaWZzX2FyZ3N9IiAiJHt1YmluaXplX2FyZ3N9IiAiJHtuYW1lfSIKKwlkb25lCit9CisKK0lNQUdFX0NNRF91YmkgKCkgeworCW11bHRpdWJpX21rZnMgIiR7TUtVQklGU19BUkdTfSIgIiR7VUJJTklaRV9BUkdTfSIKK30KKworSU1BR0VfQ01EX3ViaWZzID0gIm1rZnMudWJpZnMgLXIgJHtJTUFHRV9ST09URlN9IC1vICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMudWJpZnMgJHtNS1VCSUZTX0FSR1N9IgorCitJTUFHRV9DTURfd2ljICgpIHsKKwlvdXQ9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9CisJd2tzPSR7RklMRV9ESVJOQU1FfS8ke0lNQUdFX0JBU0VOQU1FfS4ke01BQ0hJTkV9LndrcworCVsgLWUgJHdrcyBdIHx8IHdrcz0ke0ZJTEVfRElSTkFNRX0vJHtJTUFHRV9CQVNFTkFNRX0ud2tzCisJWyAtZSAkd2tzIF0gfHwgYmJmYXRhbCAiS2lza3N0YXJ0IGZpbGUgJHdrcyBkb2Vzbid0IGV4aXN0IgorCUJVSUxERElSPSR7VE9QRElSfSB3aWMgY3JlYXRlICR3a3MgLS12YXJzICR7U1RBR0lOR19ESVJfVEFSR0VUfS9pbWdkYXRhLyAtZSAke0lNQUdFX0JBU0VOQU1FfSAtbyAkb3V0LworCW12ICRvdXQvYnVpbGQvJHtJTUFHRV9CQVNFTkFNRX0qLmRpcmVjdCAkb3V0LnJvb3Rmcy53aWMKKwlybSAtcmYgJG91dC8KK30KKworRVhUUkFfSU1BR0VDTUQgPSAiIgorCitpbmhlcml0IHNpdGVpbmZvCitKRkZTMl9FTkRJQU5ORVNTID89ICIke0BiYXNlX2NvbmRpdGlvbmFsKCdTSVRFSU5GT19FTkRJQU5ORVNTJywgJ2xlJywgJy1sJywgJy1iJywgZCl9IgorSkZGUzJfRVJBU0VCTE9DSyA/PSAiMHg0MDAwMCIKK0VYVFJBX0lNQUdFQ01EX2pmZnMyID89ICItLXBhZCAke0pGRlMyX0VORElBTk5FU1N9IC0tZXJhc2VibG9jaz0ke0pGRlMyX0VSQVNFQkxPQ0t9IC0tbm8tY2xlYW5tYXJrZXJzIgorCisjIENoYW5nZSB0aGVzZSBpZiB5b3Ugd2FudCBkZWZhdWx0IG1rZnMgYmVoYXZpb3IgKGkuZS4gY3JlYXRlIG1pbmltYWwgaW5vZGUgbnVtYmVyKQorRVhUUkFfSU1BR0VDTURfZXh0MiA/PSAiLWkgNDA5NiIKK0VYVFJBX0lNQUdFQ01EX2V4dDMgPz0gIi1pIDQwOTYiCitFWFRSQV9JTUFHRUNNRF9leHQ0ID89ICItaSA0MDk2IgorRVhUUkFfSU1BR0VDTURfYnRyZnMgPz0gIiIKK0VYVFJBX0lNQUdFQ01EX2VsZiA/PSAiIgorCitJTUFHRV9ERVBFTkRTID0gIiIKK0lNQUdFX0RFUEVORFNfamZmczIgPSAibXRkLXV0aWxzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfY3JhbWZzID0gInV0aWwtbGludXgtbmF0aXZlIgorSU1BR0VfREVQRU5EU19leHQyID0gImUyZnNwcm9ncy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX2V4dDMgPSAiZTJmc3Byb2dzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfZXh0NCA9ICJlMmZzcHJvZ3MtbmF0aXZlIgorSU1BR0VfREVQRU5EU19idHJmcyA9ICJidHJmcy10b29scy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX3NxdWFzaGZzID0gInNxdWFzaGZzLXRvb2xzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfc3F1YXNoZnMteHogPSAic3F1YXNoZnMtdG9vbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU19zcXVhc2hmcy1sem8gPSAic3F1YXNoZnMtdG9vbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU19lbGYgPSAidmlydHVhbC9rZXJuZWwgbWtlbGZpbWFnZS1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX3ViaSA9ICJtdGQtdXRpbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU191YmlmcyA9ICJtdGQtdXRpbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU19tdWx0aXViaSA9ICJtdGQtdXRpbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU193aWMgPSAicGFydGVkLW5hdGl2ZSIKKworIyBUaGlzIHZhcmlhYmxlIGlzIGF2YWlsYWJsZSB0byByZXF1ZXN0IHdoaWNoIHZhbHVlcyBhcmUgc3VpdGFibGUgZm9yIElNQUdFX0ZTVFlQRVMKK0lNQUdFX1RZUEVTID0gIiBcCisgICAgamZmczIgamZmczIuc3VtIFwKKyAgICBjcmFtZnMgXAorICAgIGV4dDIgZXh0Mi5neiBleHQyLmJ6MiBleHQyLmx6bWEgXAorICAgIGV4dDMgZXh0My5neiBcCisgICAgZXh0NCBleHQ0Lmd6IFwKKyAgICBidHJmcyBcCisgICAgaXNvIFwKKyAgICBoZGRpbWcgXAorICAgIHNxdWFzaGZzIHNxdWFzaGZzLXh6IHNxdWFzaGZzLWx6byBcCisgICAgdWJpIHViaWZzIG11bHRpdWJpIFwKKyAgICB0YXIgdGFyLmd6IHRhci5iejIgdGFyLnh6IHRhci5sejQgXAorICAgIGNwaW8gY3Bpby5neiBjcGlvLnh6IGNwaW8ubHptYSBjcGlvLmx6NCBcCisgICAgdm1kayBcCisgICAgdmRpIFwKKyAgICBxY293MiBcCisgICAgZWxmIFwKKyAgICB3aWMgd2ljLmd6IHdpYy5iejIgd2ljLmx6bWEgXAorIgorCitDT01QUkVTU0lPTlRZUEVTID0gImd6IGJ6MiBsem1hIHh6IGx6NCBzdW0iCitDT01QUkVTU19DTURfbHptYSA9ICJsem1hIC1rIC1mIC03ICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0iCitDT01QUkVTU19DTURfZ3ogPSAiZ3ppcCAtZiAtOSAtYyAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9ID4gJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS5neiIKK0NPTVBSRVNTX0NNRF9iejIgPSAicGJ6aXAyIC1mIC1rICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0iCitDT01QUkVTU19DTURfeHogPSAieHogLWYgLWsgLWMgJHtYWl9DT01QUkVTU0lPTl9MRVZFTH0gJHtYWl9USFJFQURTfSAtLWNoZWNrPSR7WFpfSU5URUdSSVRZX0NIRUNLfSAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9ID4gJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS54eiIKK0NPTVBSRVNTX0NNRF9sejQgPSAibHo0YyAtOSAtYyAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9ID4gJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS5sejQiCitDT01QUkVTU19DTURfc3VtID0gInN1bXRvb2wgLWkgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfSAtbyAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9LnN1bSAke0pGRlMyX1NVTV9FWFRSQV9BUkdTfSIKK0NPTVBSRVNTX0RFUEVORFNfbHptYSA9ICJ4ei1uYXRpdmUiCitDT01QUkVTU19ERVBFTkRTX2d6ID0gIiIKK0NPTVBSRVNTX0RFUEVORFNfYnoyID0gInBiemlwMi1uYXRpdmUiCitDT01QUkVTU19ERVBFTkRTX3h6ID0gInh6LW5hdGl2ZSIKK0NPTVBSRVNTX0RFUEVORFNfbHo0ID0gImx6NC1uYXRpdmUiCitDT01QUkVTU19ERVBFTkRTX3N1bSA9ICJtdGQtdXRpbHMtbmF0aXZlIgorCitSVU5OQUJMRV9JTUFHRV9UWVBFUyA/PSAiZXh0MiBleHQzIGV4dDQiCitSVU5OQUJMRV9NQUNISU5FX1BBVFRFUk5TID89ICJxZW11IgorCitERVBMT1lBQkxFX0lNQUdFX1RZUEVTID89ICJoZGRpbWcgaXNvIiAKKworIyBVc2UgSU1BR0VfRVhURU5TSU9OX3h4eCB0byBtYXAgaW1hZ2UgdHlwZSAneHh4JyB3aXRoIHJlYWwgaW1hZ2UgZmlsZSBleHRlbnNpb24gbmFtZShzKSBmb3IgSG9iCitJTUFHRV9FWFRFTlNJT05fbGl2ZSA9ICJoZGRpbWcgaXNvIgorCisjIFRoZSBJTUFHRV9UWVBFU19NQVNLRUQgdmFyaWFibGUgd2lsbCBiZSB1c2VkIHRvIG1hc2sgb3V0IGZyb20gdGhlIElNQUdFX0ZTVFlQRVMsCisjIGltYWdlcyB0aGF0IHdpbGwgbm90IGJlIGJ1aWx0IGF0IGRvX3Jvb3RmcyB0aW1lOiB2bWRrLCB2ZGksIHFjb3cyLCBoZGRpbWcsIGlzbywgZXRjLgorSU1BR0VfVFlQRVNfTUFTS0VEID89ICIiCisKKyMgVGhlIFdJQ1ZBUlMgdmFyaWFibGUgaXMgdXNlZCB0byBkZWZpbmUgbGlzdCBvZiBiaXRiYWtlIHZhcmlhYmxlcyB1c2VkIGluIHdpYyBjb2RlCisjIHZhcmlhYmxlcyBmcm9tIHRoaXMgbGlzdCBpcyB3cml0dGVuIHRvIDxpbWFnZT4uZW52IGZpbGUKK1dJQ1ZBUlMgPz0gIkJCTEFZRVJTIERFUExPWV9ESVJfSU1BR0UgSERERElSIElNQUdFX0JBU0VOQU1FIElNQUdFX0JPT1RfRklMRVMgSU1BR0VfTElOS19OQU1FIElNQUdFX1JPT1RGUyBJTklUUkFNRlNfRlNUWVBFUyBJTklUUkQgSVNPRElSIE1BQ0hJTkVfQVJDSCBST09URlNfU0laRSBTVEFHSU5HX0RBVEFESVIgU1RBR0lOR19ESVJfTkFUSVZFIFNUQUdJTkdfTElCRElSIFRBUkdFVF9TWVMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZV90eXBlc191Ym9vdC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXNfdWJvb3QuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODFiY2EyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXNfdWJvb3QuYmJjbGFzcwpAQCAtMCwwICsxLDI2IEBACitpbmhlcml0IGltYWdlX3R5cGVzIGtlcm5lbC1hcmNoCisKK29lX21raW1hZ2UgKCkgeworICAgIG1raW1hZ2UgLUEgJHtVQk9PVF9BUkNIfSAtTyBsaW51eCAtVCByYW1kaXNrIC1DICQyIC1uICR7SU1BR0VfTkFNRX0gXAorICAgICAgICAtZCAke0RFUExPWV9ESVJfSU1BR0V9LyQxICR7REVQTE9ZX0RJUl9JTUFHRX0vJDEudS1ib290CisgICAgaWYgWyB4JDMgPSB4ImNsZWFuIiBdOyB0aGVuCisgICAgICAgIHJtICQxCisgICAgZmkKK30KKworQ09NUFJFU1NJT05UWVBFUyArPSAiZ3oudS1ib290IGJ6Mi51LWJvb3QgbHptYS51LWJvb3QgdS1ib290IgorCitDT01QUkVTU19ERVBFTkRTX3UtYm9vdCA9ICJ1LWJvb3QtbWtpbWFnZS1uYXRpdmUiCitDT01QUkVTU19DTURfdS1ib290ICAgICAgPSAib2VfbWtpbWFnZSAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9IG5vbmUiCisKK0NPTVBSRVNTX0RFUEVORFNfZ3oudS1ib290ID0gInUtYm9vdC1ta2ltYWdlLW5hdGl2ZSIKK0NPTVBSRVNTX0NNRF9nei51LWJvb3QgICAgICA9ICIke0NPTVBSRVNTX0NNRF9nen07IG9lX21raW1hZ2UgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS5neiBnemlwIGNsZWFuIgorCitDT01QUkVTU19ERVBFTkRTX2J6Mi51LWJvb3QgPSAidS1ib290LW1raW1hZ2UtbmF0aXZlIgorQ09NUFJFU1NfQ01EX2J6Mi51LWJvb3QgICAgICA9ICIke0NPTVBSRVNTX0NNRF9iejJ9OyBvZV9ta2ltYWdlICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0uYnoyIGJ6aXAyIGNsZWFuIgorCitDT01QUkVTU19ERVBFTkRTX2x6bWEudS1ib290ID0gInUtYm9vdC1ta2ltYWdlLW5hdGl2ZSIKK0NPTVBSRVNTX0NNRF9sem1hLnUtYm9vdCAgICAgID0gIiR7Q09NUFJFU1NfQ01EX2x6bWF9OyBvZV9ta2ltYWdlICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0ubHptYSBsem1hIGNsZWFuIgorCitJTUFHRV9UWVBFUyArPSAiZXh0Mi51LWJvb3QgZXh0Mi5nei51LWJvb3QgZXh0Mi5iejIudS1ib290IGV4dDIubHptYS51LWJvb3QgZXh0My5nei51LWJvb3QgZXh0NC5nei51LWJvb3QiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2luc2FuZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW5zYW5lLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM4NjI5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2luc2FuZS5iYmNsYXNzCkBAIC0wLDAgKzEsMTI4MCBAQAorIyBCQiBDbGFzcyBpbnNwaXJlZCBieSBlYnVpbGQuc2gKKyMKKyMgVGhpcyBjbGFzcyB3aWxsIHRlc3QgZmlsZXMgYWZ0ZXIgaW5zdGFsbGF0aW9uIGZvciBjZXJ0YWluCisjIHNlY3VyaXR5IGlzc3VlcyBhbmQgb3RoZXIga2luZCBvZiBpc3N1ZXMuCisjCisjIENoZWNrcyB3ZSBkbzoKKyMgIC1DaGVjayB0aGUgb3duZXJzaGlwIGFuZCBwZXJtaXNzaW9ucworIyAgLUNoZWNrIHRoZSBSVU5USU1FIHBhdGggZm9yIHRoZSAkVE1QRElSCisjICAtQ2hlY2sgaWYgLmxhIGZpbGVzIHdyb25nbHkgcG9pbnQgdG8gd29ya2RpcgorIyAgLUNoZWNrIGlmIC5wYyBmaWxlcyB3cm9uZ2x5IHBvaW50IHRvIHdvcmtkaXIKKyMgIC1DaGVjayBpZiBwYWNrYWdlcyBjb250YWlucyAuZGVidWcgZGlyZWN0b3JpZXMgb3IgLnNvIGZpbGVzCisjICAgd2hlcmUgdGhleSBzaG91bGQgYmUgaW4gLWRldiBvciAtZGJnCisjICAtQ2hlY2sgaWYgY29uZmlnLmxvZyBjb250YWlucyB0cmFjZXMgdG8gYnJva2VuIGF1dG9jb25mIHRlc3RzCisjICAtQ2hlY2sgaW52YWxpZCBjaGFyYWN0ZXJzIChub24tdXRmOCkgb24gc29tZSBwYWNrYWdlIG1ldGFkYXRhCisjICAtRW5zdXJlIHRoYXQgYmluYXJpZXMgaW4gYmFzZV9bYmluZGlyfHNiaW5kaXJ8bGliZGlyXSBkbyBub3QgbGluaworIyAgIGludG8gZXhlY19wcmVmaXgKKyMgIC1DaGVjayB0aGF0IHNjcmlwdHMgaW4gYmFzZV9bYmluZGlyfHNiaW5kaXJ8bGliZGlyXSBkbyBub3QgcmVmZXJlbmNlCisjICAgZmlsZXMgdW5kZXIgZXhlY19wcmVmaXgKKworCisjIHVuc2FmZS1yZWZlcmVuY2VzLWluLWJpbmFyaWVzIHJlcXVpcmVzIHByZWxpbmstcnRsZCBmcm9tCisjIHByZWxpbmstbmF0aXZlLCBidXQgd2UgZG9uJ3Qgd2FudCB0aGlzIERFUEVORFMgZm9yIC1uYXRpdmUgYnVpbGRzCitRQURFUEVORFMgPSAicHJlbGluay1uYXRpdmUiCitRQURFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKK1FBREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAiIgorUUFfU0FORSA9ICJUcnVlIgorCisjIEVsZWN0IHdoZXRoZXIgYSBnaXZlbiB0eXBlIG9mIGVycm9yIGlzIGEgd2FybmluZyBvciBlcnJvciwgdGhleSBtYXkKKyMgaGF2ZSBiZWVuIHNldCBieSBvdGhlciBmaWxlcy4KK1dBUk5fUUEgPz0gImxkZmxhZ3MgdXNlbGVzcy1ycGF0aHMgcnBhdGhzIHN0YXRpY2RldiBsaWJkaXIgeG9yZy1kcml2ZXItYWJpIFwKKyAgICAgICAgICAgIHRleHRyZWwgYWxyZWFkeS1zdHJpcHBlZCBpbmNvbXBhdGlibGUtbGljZW5zZSBmaWxlcy1pbnZhbGlkIFwKKyAgICAgICAgICAgIGluc3RhbGxlZC12cy1zaGlwcGVkIGNvbXBpbGUtaG9zdC1wYXRoIGluc3RhbGwtaG9zdC1wYXRoIFwKKyAgICAgICAgICAgIHBuLW92ZXJyaWRlcyBpbmZvZGlyIGJ1aWxkLWRlcHMgZmlsZS1yZGVwcyBcCisgICAgICAgICAgICB1bmtub3duLWNvbmZpZ3VyZS1vcHRpb24gc3ltbGluay10by1zeXNyb290IG11bHRpbGliIFwKKyAgICAgICAgICAgIGludmFsaWQtcGtnY29uZmlnIGhvc3QtdXNlci1jb250YW1pbmF0ZWQgXAorICAgICAgICAgICAgIgorRVJST1JfUUEgPz0gImRldi1zbyBkZWJ1Zy1kZXBzIGRldi1kZXBzIGRlYnVnLWZpbGVzIGFyY2ggcGtnY29uZmlnIGxhIFwKKyAgICAgICAgICAgIHBlcm1zIGRlcC1jbXAgcGtndmFyY2hlY2sgcGVybS1jb25maWcgcGVybS1saW5lIHBlcm0tbGluayBcCisgICAgICAgICAgICBzcGxpdC1zdHJpcCBwYWNrYWdlcy1saXN0IHBrZ3YtdW5kZWZpbmVkIHZhci11bmRlZmluZWQgXAorICAgICAgICAgICAgdmVyc2lvbi1nb2luZy1iYWNrd2FyZHMgZXhwYW5kZWQtZCBpbnZhbGlkLWNoYXJzIFwKKyAgICAgICAgICAgICIKK0ZBS0VST09UX1FBID0gImhvc3QtdXNlci1jb250YW1pbmF0ZWQiCitGQUtFUk9PVF9RQVtkb2NdID0gIlFBIHRlc3RzIHdoaWNoIG5lZWQgdG8gcnVuIHVuZGVyIGZha2Vyb290LiBJZiBhbnkgXAorZW5hYmxlZCB0ZXN0cyBhcmUgbGlzdGVkIGhlcmUsIHRoZSBkb19wYWNrYWdlX3FhIHRhc2sgd2lsbCBydW4gdW5kZXIgZmFrZXJvb3QuIgorCitBTExfUUEgPSAiJHtXQVJOX1FBfSAke0VSUk9SX1FBfSIKKworVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUID89ICItLWVuYWJsZS1ubHMgLS1kaXNhYmxlLW5scyAtLWRpc2FibGUtc2lsZW50LXJ1bGVzIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIC0td2l0aC1saWJ0b29sLXN5c3Jvb3QiCisKKyMKKyMgZGljdGlvbmFyeSBmb3IgZWxmIGhlYWRlcnMKKyMKKyMgZmVlbCBmcmVlIHRvIGFkZCBhbmQgY29ycmVjdC4KKyMKKyMgICAgICAgICAgIFRBUkdFVF9PUyAgVEFSR0VUX0FSQ0ggICBNQUNISU5FLCBPU0FCSSwgQUJJVkVSU0lPTiwgTGl0dGxlIEVuZGlhbiwgMzJiaXQ/CitkZWYgcGFja2FnZV9xYV9nZXRfbWFjaGluZV9kaWN0KCk6CisgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICJkYXJ3aW45IiA6IHsgCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImVhYmkiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgImFybSIgOiAgICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJlbGYiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgImk1ODYiIDogICAgICAoMywgICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAieDg2XzY0IjogICAgICg2MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJlcGlwaGFueSI6ICAgKDQ2NDMsICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgiIDogeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICJhYXJjaDY0IiA6ICAgKDE4MywgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFhcmNoNjRfYmUiIDooMTgzLCAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICg0MCwgICAgOTcsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm1lYiI6ICAgICAgKDQwLCAgICA5NywgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwYzY0IjogICgyMSwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpMzg2IjogICAgICAgKCAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImk0ODYiOiAgICAgICAoIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTU4NiI6ICAgICAgICggMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNjg2IjogICAgICAgKCAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIng4Nl82NCI6ICAgICAoNjIsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiaWE2NCI6ICAgICAgICg1MCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhbHBoYSI6ICAgICAgKDM2OTAyLCAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgImhwcGEiOiAgICAgICAoMTUsICAgICAzLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibTY4ayI6ICAgICAgICggNCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzIjogICAgICAgKCA4LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHNlbCI6ICAgICAoIDgsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwczY0IjogICAgICggOCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjRlbCI6ICAgKCA4LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgInMzOTAiOiAgICAgICAoMjIsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAic2g0IjogICAgICAgICg0MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzcGFyYyI6ICAgICAgKCAyLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pY3JvYmxhemUiOiAgKDE4OSwgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWljcm9ibGF6ZWViIjooMTg5LCAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaWNyb2JsYXplZWwiOigxODksICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtdWNsaWJjIiA6IHsgCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICggIDQwLCAgICA5NywgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFybWViIjogICAgICAoICA0MCwgICAgOTcsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjIjogICAgKCAgMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTM4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImk0ODYiOiAgICAgICAoICAgMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNTg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTY4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIng4Nl82NCI6ICAgICAoICA2MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzIjogICAgICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwc2VsIjogICAgICggICA4LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NCI6ICAgICAoICAgOCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjRlbCI6ICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXZyMzIiOiAgICAgICg2MzE3LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgInNoNCI6ICAgICAgICAoNDIsICAgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKworICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtbXVzbCIgOiB7IAorICAgICAgICAgICAgICAgICAgICAgICAgImFhcmNoNjQiIDogICAoMTgzLCAgICAwLCAgICAwLCAgICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhYXJjaDY0X2JlIiA6KDE4MywgICAgMCwgICAgMCwgICAgICAgICAgICBGYWxzZSwgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICggIDQwLCAgICA5NywgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFybWViIjogICAgICAoICA0MCwgICAgOTcsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjIjogICAgKCAgMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTM4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImk0ODYiOiAgICAgICAoICAgMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNTg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTY4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIng4Nl82NCI6ICAgICAoICA2MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzIjogICAgICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwc2VsIjogICAgICggICA4LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NCI6ICAgICAoICAgOCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjRlbCI6ICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJ1Y2xpbnV4LXVjbGliYyIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiYmZpbiI6ICAgICAgICggMTA2LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwgCisgICAgICAgICAgICAibGludXgtZ251ZWFiaSIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm1lYiIgOiAgICAgKDQwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtbXVzbGVhYmkiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgImFybSIgOiAgICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtZWIiIDogICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LXVjbGliY2VhYmkiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgImFybSIgOiAgICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtZWIiIDogICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LWdudXNwZSIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwYyI6ICAgICgyMCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LW11c2xzcGUiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eC11Y2xpYmNzcGUiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eC1nbnUiIDogICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAic2g0IjogICAgICAgICg0MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LWdudXgzMiIgOiAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAieDg2XzY0IjogICAgICg2MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LWdudW4zMiIgOiAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAibWlwczY0IjogICAgICAgKCA4LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NGVsIjogICAgICggOCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICB9CisKKworZGVmIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpOgorICAgICIiIiBSZW1vdmUgdGhlIGNvbW1vbiBwcmVmaXggZnJvbSB0aGUgcGF0aC4gSW4gdGhpcyBjYXNlIGl0IGlzIHRoZSBUTVBESVIiIiIKKyAgICByZXR1cm4gcGF0aC5yZXBsYWNlKGQuZ2V0VmFyKCdUTVBESVInLFRydWUpLCIiKQorCitkZWYgcGFja2FnZV9xYV93cml0ZV9lcnJvcih0eXBlLCBlcnJvciwgZCk6CisgICAgbG9nZmlsZSA9IGQuZ2V0VmFyKCdRQV9MT0dGSUxFJywgVHJ1ZSkKKyAgICBpZiBsb2dmaWxlOgorICAgICAgICBwID0gZC5nZXRWYXIoJ1AnLCBUcnVlKQorICAgICAgICBmID0gZmlsZSggbG9nZmlsZSwgImErIikKKyAgICAgICAgcHJpbnQgPj4gZiwgIiVzOiAlcyBbJXNdIiAlIChwLCBlcnJvciwgdHlwZSkKKyAgICAgICAgZi5jbG9zZSgpCisKK2RlZiBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcihlcnJvcl9jbGFzcywgZXJyb3JfbXNnLCBkKToKKyAgICBwYWNrYWdlX3FhX3dyaXRlX2Vycm9yKGVycm9yX2NsYXNzLCBlcnJvcl9tc2csIGQpCisgICAgaWYgZXJyb3JfY2xhc3MgaW4gKGQuZ2V0VmFyKCJFUlJPUl9RQSIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBiYi5lcnJvcigiUUEgSXNzdWU6ICVzIFslc10iICUgKGVycm9yX21zZywgZXJyb3JfY2xhc3MpKQorICAgICAgICBkLnNldFZhcigiUUFfU0FORSIsIEZhbHNlKQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBlbGlmIGVycm9yX2NsYXNzIGluIChkLmdldFZhcigiV0FSTl9RQSIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBiYi53YXJuKCJRQSBJc3N1ZTogJXMgWyVzXSIgJSAoZXJyb3JfbXNnLCBlcnJvcl9jbGFzcykpCisgICAgZWxzZToKKyAgICAgICAgYmIubm90ZSgiUUEgSXNzdWU6ICVzIFslc10iICUgKGVycm9yX21zZywgZXJyb3JfY2xhc3MpKQorICAgIHJldHVybiBUcnVlCisKK1FBUEFUSFRFU1RbbGliZXhlY10gPSAicGFja2FnZV9xYV9jaGVja19saWJleGVjIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfbGliZXhlYyhwYXRoLG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorCisgICAgIyBTa2lwIHRoZSBjYXNlIHdoZXJlIHRoZSBkZWZhdWx0IGlzIGV4cGxpY2l0bHkgL3Vzci9saWJleGVjCisgICAgbGliZXhlYyA9IGQuZ2V0VmFyKCdsaWJleGVjZGlyJywgVHJ1ZSkKKyAgICBpZiBsaWJleGVjID09ICIvdXNyL2xpYmV4ZWMiOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgaWYgJ2xpYmV4ZWMnIGluIHBhdGguc3BsaXQob3MucGF0aC5zZXApOgorICAgICAgICBtZXNzYWdlc1sibGliZXhlYyJdID0gIiVzOiAlcyBpcyB1c2luZyBsaWJleGVjIHBsZWFzZSByZWxvY2F0ZSB0byAlcyIgJSAobmFtZSwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsIGQpLCBsaWJleGVjKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHJldHVybiBUcnVlCisKK1FBUEFUSFRFU1RbcnBhdGhzXSA9ICJwYWNrYWdlX3FhX2NoZWNrX3JwYXRoIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfcnBhdGgoZmlsZSxuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayBmb3IgZGFuZ2Vyb3VzIFJQQVRIcworICAgICIiIgorICAgIGlmIG5vdCBlbGY6CisgICAgICAgIHJldHVybgorCisgICAgaWYgb3MucGF0aC5pc2xpbmsoZmlsZSk6CisgICAgICAgIHJldHVybgorCisgICAgYmFkX2RpcnMgPSBbZC5nZXRWYXIoJ0JBU0VfV09SS0RJUicsIFRydWUpLCBkLmdldFZhcignU1RBR0lOR19ESVJfVEFSR0VUJywgVHJ1ZSldCisKKyAgICBwaGRycyA9IGVsZi5ydW5fb2JqZHVtcCgiLXAiLCBkKQorCisgICAgaW1wb3J0IHJlCisgICAgcnBhdGhfcmUgPSByZS5jb21waWxlKCJccytSUEFUSFxzKyguKikiKQorICAgIGZvciBsaW5lIGluIHBoZHJzLnNwbGl0KCJcbiIpOgorICAgICAgICBtID0gcnBhdGhfcmUubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHJwYXRoID0gbS5ncm91cCgxKQorICAgICAgICAgICAgZm9yIGRpciBpbiBiYWRfZGlyczoKKyAgICAgICAgICAgICAgICBpZiBkaXIgaW4gcnBhdGg6CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzWyJycGF0aHMiXSA9ICJwYWNrYWdlICVzIGNvbnRhaW5zIGJhZCBSUEFUSCAlcyBpbiBmaWxlICVzIiAlIChuYW1lLCBycGF0aCwgZmlsZSkKKworUUFQQVRIVEVTVFt1c2VsZXNzLXJwYXRoc10gPSAicGFja2FnZV9xYV9jaGVja191c2VsZXNzX3JwYXRocyIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3VzZWxlc3NfcnBhdGhzKGZpbGUsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGZvciBSUEFUSHMgdGhhdCBhcmUgdXNlbGVzcyBidXQgbm90IGRhbmdlcm91cworICAgICIiIgorICAgIGRlZiBycGF0aF9lcShhLCBiKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGgubm9ybXBhdGgoYSkgPT0gb3MucGF0aC5ub3JtcGF0aChiKQorCisgICAgaWYgbm90IGVsZjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBvcy5wYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBsaWJkaXIgPSBkLmdldFZhcigibGliZGlyIiwgVHJ1ZSkKKyAgICBiYXNlX2xpYmRpciA9IGQuZ2V0VmFyKCJiYXNlX2xpYmRpciIsIFRydWUpCisKKyAgICBwaGRycyA9IGVsZi5ydW5fb2JqZHVtcCgiLXAiLCBkKQorCisgICAgaW1wb3J0IHJlCisgICAgcnBhdGhfcmUgPSByZS5jb21waWxlKCJccytSUEFUSFxzKyguKikiKQorICAgIGZvciBsaW5lIGluIHBoZHJzLnNwbGl0KCJcbiIpOgorICAgICAgICBtID0gcnBhdGhfcmUubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHJwYXRoID0gbS5ncm91cCgxKQorICAgICAgICAgICAgaWYgcnBhdGhfZXEocnBhdGgsIGxpYmRpcikgb3IgcnBhdGhfZXEocnBhdGgsIGJhc2VfbGliZGlyKToKKyAgICAgICAgICAgICAgICAjIFRoZSBkeW5hbWljIGxpbmtlciBzZWFyY2hlcyBib3RoIHRoZXNlIHBsYWNlcyBhbnl3YXkuICBUaGVyZSBpcyBubyBwb2ludCBpbgorICAgICAgICAgICAgICAgICMgbG9va2luZyB0aGVyZSBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBtZXNzYWdlc1sidXNlbGVzcy1ycGF0aHMiXSA9ICIlczogJXMgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIICVzIiAlIChuYW1lLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgoZmlsZSwgZCksIHJwYXRoKQorCitRQVBBVEhURVNUW2Rldi1zb10gPSAicGFja2FnZV9xYV9jaGVja19kZXYiCitkZWYgcGFja2FnZV9xYV9jaGVja19kZXYocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yICIuc28iIGxpYnJhcnkgc3ltbGlua3MgaW4gbm9uLWRldiBwYWNrYWdlcworICAgICIiIgorCisgICAgaWYgbm90IG5hbWUuZW5kc3dpdGgoIi1kZXYiKSBhbmQgbm90IG5hbWUuZW5kc3dpdGgoIi1kYmciKSBhbmQgbm90IG5hbWUuZW5kc3dpdGgoIi1wdGVzdCIpIGFuZCBub3QgbmFtZS5zdGFydHN3aXRoKCJuYXRpdmVzZGstIikgYW5kIHBhdGguZW5kc3dpdGgoIi5zbyIpIGFuZCBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgbWVzc2FnZXNbImRldi1zbyJdID0gIm5vbiAtZGV2Ly1kYmcvbmF0aXZlc2RrLSBwYWNrYWdlIGNvbnRhaW5zIHN5bWxpbmsgLnNvOiAlcyBwYXRoICclcyciICUgXAorICAgICAgICAgICAgICAgICAobmFtZSwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkpCisKK1FBUEFUSFRFU1Rbc3RhdGljZGV2XSA9ICJwYWNrYWdlX3FhX2NoZWNrX3N0YXRpY2RldiIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3N0YXRpY2RldihwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayBmb3IgIi5hIiBsaWJyYXJ5IGluIG5vbi1zdGF0aWNkZXYgcGFja2FnZXMKKyAgICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGUsIC1waWMgcGFja2FnZXMgY2FuIGNvbnRhaW4KKyAgICBzdGF0aWMgbGlicmFyaWVzLCB0aGUgX25vbnNoYXJlZC5hIGJlbG9uZyB3aXRoIHRoZWlyIC1kZXYgcGFja2FnZXMgYW5kCisgICAgbGliZ2NjLmEsIGxpYmdjb3YuYSB3aWxsIGJlIHNraXBwZWQgaW4gdGhlaXIgcGFja2FnZXMKKyAgICAiIiIKKworICAgIGlmIG5vdCBuYW1lLmVuZHN3aXRoKCItcGljIikgYW5kIG5vdCBuYW1lLmVuZHN3aXRoKCItc3RhdGljZGV2IikgYW5kIG5vdCBuYW1lLmVuZHN3aXRoKCItcHRlc3QiKSBhbmQgcGF0aC5lbmRzd2l0aCgiLmEiKSBhbmQgbm90IHBhdGguZW5kc3dpdGgoIl9ub25zaGFyZWQuYSIpOgorICAgICAgICBtZXNzYWdlc1sic3RhdGljZGV2Il0gPSAibm9uIC1zdGF0aWNkZXYgcGFja2FnZSBjb250YWlucyBzdGF0aWMgLmEgbGlicmFyeTogJXMgcGF0aCAnJXMnIiAlIFwKKyAgICAgICAgICAgICAgICAgKG5hbWUsIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpKQorCitkZWYgcGFja2FnZV9xYV9jaGVja19saWJkaXIoZCk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yIHdyb25nIGxpYnJhcnkgaW5zdGFsbGF0aW9uIHBhdGhzLiBGb3IgaW5zdGFuY2UsIGNhdGNoCisgICAgcmVjaXBlcyBpbnN0YWxsaW5nIC9saWIvYmFyLnNvIHdoZW4gJHtiYXNlX2xpYmRpcn09ImxpYjMyIiBvcgorICAgIGluc3RhbGxpbmcgaW4gL3Vzci9saWI2NCB3aGVuICR7bGliZGlyfT0iL3Vzci9saWIiCisgICAgIiIiCisgICAgaW1wb3J0IHJlCisKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGJhc2VfbGliZGlyID0gZC5nZXRWYXIoImJhc2VfbGliZGlyIixUcnVlKSArIG9zLnNlcAorICAgIGxpYmRpciA9IGQuZ2V0VmFyKCJsaWJkaXIiLCBUcnVlKSArIG9zLnNlcAorICAgIGV4ZWNfcHJlZml4ID0gZC5nZXRWYXIoImV4ZWNfcHJlZml4IiwgVHJ1ZSkgKyBvcy5zZXAKKworICAgIG1lc3NhZ2VzID0gW10KKworICAgIGxpYl9yZSA9IHJlLmNvbXBpbGUoIl4vbGliLitcLnNvKFwuLispPyQiKQorICAgIGV4ZWNfcmUgPSByZS5jb21waWxlKCJeJXMuKi9saWIuK1wuc28oXC4uKyk/JCIgJSBleGVjX3ByZWZpeCkKKworICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBrZ2Rlc3QpOgorICAgICAgICBpZiByb290ID09IHBrZ2Rlc3Q6CisgICAgICAgICAgICAjIFNraXAgc3ViZGlyZWN0b3JpZXMgZm9yIGFueSBwYWNrYWdlcyB3aXRoIGxpYmRpciBpbiBJTlNBTkVfU0tJUAorICAgICAgICAgICAgc2tpcHBhY2thZ2VzID0gW10KKyAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIGRpcnM6CisgICAgICAgICAgICAgICAgaWYgJ2xpYmRpcicgaW4gKGQuZ2V0VmFyKCdJTlNBTkVfU0tJUF8nICsgcGFja2FnZSwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIlBhY2thZ2UgJXMgc2tpcHBpbmcgbGliZGlyIFFBIHRlc3QiICUgKHBhY2thZ2UpKQorICAgICAgICAgICAgICAgICAgICBza2lwcGFja2FnZXMuYXBwZW5kKHBhY2thZ2UpCisgICAgICAgICAgICBmb3IgcGFja2FnZSBpbiBza2lwcGFja2FnZXM6CisgICAgICAgICAgICAgICAgZGlycy5yZW1vdmUocGFja2FnZSkKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZSkKKyAgICAgICAgICAgIHJlbF9wYXRoID0gb3MucGF0aC5yZWxwYXRoKGZ1bGxfcGF0aCwgcGtnZGVzdCkKKyAgICAgICAgICAgIGlmIG9zLnNlcCBpbiByZWxfcGF0aDoKKyAgICAgICAgICAgICAgICBwYWNrYWdlLCByZWxfcGF0aCA9IHJlbF9wYXRoLnNwbGl0KG9zLnNlcCwgMSkKKyAgICAgICAgICAgICAgICByZWxfcGF0aCA9IG9zLnNlcCArIHJlbF9wYXRoCisgICAgICAgICAgICAgICAgaWYgbGliX3JlLm1hdGNoKHJlbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgYmFzZV9saWJkaXIgbm90IGluIHJlbF9wYXRoOgorICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXMuYXBwZW5kKCIlczogZm91bmQgbGlicmFyeSBpbiB3cm9uZyBsb2NhdGlvbjogJXMiICUgKHBhY2thZ2UsIHJlbF9wYXRoKSkKKyAgICAgICAgICAgICAgICBpZiBleGVjX3JlLm1hdGNoKHJlbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbGliZGlyIG5vdCBpbiByZWxfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzLmFwcGVuZCgiJXM6IGZvdW5kIGxpYnJhcnkgaW4gd3JvbmcgbG9jYXRpb246ICVzIiAlIChwYWNrYWdlLCByZWxfcGF0aCkpCisKKyAgICBpZiBtZXNzYWdlczoKKyAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImxpYmRpciIsICJcbiIuam9pbihtZXNzYWdlcyksIGQpCisKK1FBUEFUSFRFU1RbZGVidWctZmlsZXNdID0gInBhY2thZ2VfcWFfY2hlY2tfZGJnIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfZGJnKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGZvciAiLmRlYnVnIiBmaWxlcyBvciBkaXJlY3RvcmllcyBvdXRzaWRlIG9mIHRoZSBkYmcgcGFja2FnZQorICAgICIiIgorCisgICAgaWYgbm90ICItZGJnIiBpbiBuYW1lIGFuZCBub3QgIi1wdGVzdCIgaW4gbmFtZToKKyAgICAgICAgaWYgJy5kZWJ1ZycgaW4gcGF0aC5zcGxpdChvcy5wYXRoLnNlcCk6CisgICAgICAgICAgICBtZXNzYWdlc1siZGVidWctZmlsZXMiXSA9ICJub24gZGVidWcgcGFja2FnZSBjb250YWlucyAuZGVidWcgZGlyZWN0b3J5OiAlcyBwYXRoICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgIChuYW1lLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCxkKSkKKworUUFQQVRIVEVTVFtwZXJtc10gPSAicGFja2FnZV9xYV9jaGVja19wZXJtIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfcGVybShwYXRoLG5hbWUsZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgdGhlIHBlcm1pc3Npb24gb2YgZmlsZXMKKyAgICAiIiIKKyAgICByZXR1cm4KKworUUFQQVRIVEVTVFt1bnNhZmUtcmVmZXJlbmNlcy1pbi1iaW5hcmllc10gPSAicGFja2FnZV9xYV9jaGVja191bnNhZmVfcmVmZXJlbmNlc19pbl9iaW5hcmllcyIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3Vuc2FmZV9yZWZlcmVuY2VzX2luX2JpbmFyaWVzKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIEVuc3VyZSBiaW5hcmllcyBpbiBiYXNlX1tiaW5kaXJ8c2JpbmRpcnxsaWJkaXJdIGRvIG5vdCBsaW5rIHRvIGZpbGVzIHVuZGVyIGV4ZWNfcHJlZml4CisgICAgIiIiCisgICAgaWYgdW5zYWZlX3JlZmVyZW5jZXNfc2tpcHBhYmxlKHBhdGgsIG5hbWUsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIGlmIGVsZjoKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3ViCisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgICAgICBleGVjX3ByZWZpeCA9IGQuZ2V0VmFyKCdleGVjX3ByZWZpeCcsIFRydWUpCisgICAgICAgIHN5c3Jvb3RfcGF0aCA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9UQVJHRVQnLCBUcnVlKQorICAgICAgICBzeXNyb290X3BhdGhfdXNyID0gc3lzcm9vdF9wYXRoICsgZXhlY19wcmVmaXgKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsZGRfb3V0cHV0ID0gYmIucHJvY2Vzcy5Qb3BlbihbInByZWxpbmstcnRsZCIsICItLXJvb3QiLCBzeXNyb290X3BhdGgsIHBhdGhdLCBzdGRvdXQ9c3ViLlBJUEUpLnN0ZG91dC5yZWFkKCkKKyAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuQ21kRXJyb3I6CisgICAgICAgICAgICBlcnJvcl9tc2cgPSBwbiArICI6IHByZWxpbmstcnRsZCBhYm9ydGVkIHdoZW4gcHJvY2Vzc2luZyAlcyIgJSBwYXRoCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigidW5zYWZlLXJlZmVyZW5jZXMtaW4tYmluYXJpZXMiLCBlcnJvcl9tc2csIGQpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBzeXNyb290X3BhdGhfdXNyIGluIGxkZF9vdXRwdXQ6CisgICAgICAgICAgICBsZGRfb3V0cHV0ID0gbGRkX291dHB1dC5yZXBsYWNlKHN5c3Jvb3RfcGF0aCwgIiIpCisKKyAgICAgICAgICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgICAgICAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisKKyAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgc2hvcnRfcGF0aCA9IHBhdGgucmVwbGFjZSgnJXMvJXMnICUgKHBrZ2Rlc3QsIHBhY2thZ2UpLCAiIiwgMSkKKyAgICAgICAgICAgICAgICBpZiAoc2hvcnRfcGF0aCAhPSBwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgYmFzZV9lcnIgPSBwbiArICI6ICVzLCBpbnN0YWxsZWQgaW4gdGhlIGJhc2VfcHJlZml4LCByZXF1aXJlcyBhIHNoYXJlZCBsaWJyYXJ5IHVuZGVyIGV4ZWNfcHJlZml4ICglcykiICUgKHNob3J0X3BhdGgsIGV4ZWNfcHJlZml4KQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGRkX291dHB1dC5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBpZiBleGVjX3ByZWZpeCBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXM6ICVzIiAlIChiYXNlX2VyciwgbGluZS5zdHJpcCgpKQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigidW5zYWZlLXJlZmVyZW5jZXMtaW4tYmluYXJpZXMiLCBlcnJvcl9tc2csIGQpCisKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCitRQVBBVEhURVNUW3Vuc2FmZS1yZWZlcmVuY2VzLWluLXNjcmlwdHNdID0gInBhY2thZ2VfcWFfY2hlY2tfdW5zYWZlX3JlZmVyZW5jZXNfaW5fc2NyaXB0cyIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3Vuc2FmZV9yZWZlcmVuY2VzX2luX3NjcmlwdHMocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgV2FybiBpZiBzY3JpcHRzIGluIGJhc2VfW2JpbmRpcnxzYmluZGlyfGxpYmRpcl0gcmVmZXJlbmNlIGZpbGVzIHVuZGVyIGV4ZWNfcHJlZml4CisgICAgIiIiCisgICAgaWYgdW5zYWZlX3JlZmVyZW5jZXNfc2tpcHBhYmxlKHBhdGgsIG5hbWUsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIGlmIG5vdCBlbGY6CisgICAgICAgIGltcG9ydCBzdGF0CisgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgICAgICAjIEVuc3VyZSB3ZSdyZSBjaGVja2luZyBhbiBleGVjdXRhYmxlIHNjcmlwdAorICAgICAgICBzdGF0aW5mbyA9IG9zLnN0YXQocGF0aCkKKyAgICAgICAgaWYgYm9vbChzdGF0aW5mby5zdF9tb2RlICYgc3RhdC5TX0lYVVNSKToKKyAgICAgICAgICAgICMgZ3JlcCBzaGVsbCBzY3JpcHRzIGZvciBwb3NzaWJsZSByZWZlcmVuY2VzIHRvIC9leGVjX3ByZWZpeC8KKyAgICAgICAgICAgIGV4ZWNfcHJlZml4ID0gZC5nZXRWYXIoJ2V4ZWNfcHJlZml4JywgVHJ1ZSkKKyAgICAgICAgICAgIHN0YXRlbWVudCA9ICJncmVwIC1lICclcy8nICVzID4gL2Rldi9udWxsIiAlIChleGVjX3ByZWZpeCwgcGF0aCkKKyAgICAgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChzdGF0ZW1lbnQsIHNoZWxsPVRydWUpID09IDA6CisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gcG4gKyAiOiBGb3VuZCBhIHJlZmVyZW5jZSB0byAlcy8gaW4gJXMiICUgKGV4ZWNfcHJlZml4LCBwYXRoKQorICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJ1bnNhZmUtcmVmZXJlbmNlcy1pbi1zY3JpcHRzIiwgZXJyb3JfbXNnLCBkKQorICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICJTaGVsbCBzY3JpcHRzIGluIGJhc2VfYmluZGlyIGFuZCBiYXNlX3NiaW5kaXIgc2hvdWxkIG5vdCByZWZlcmVuY2UgYW55dGhpbmcgaW4gZXhlY19wcmVmaXgiCisgICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInVuc2FmZS1yZWZlcmVuY2VzLWluLXNjcmlwdHMiLCBlcnJvcl9tc2csIGQpCisKK2RlZiB1bnNhZmVfcmVmZXJlbmNlc19za2lwcGFibGUocGF0aCwgbmFtZSwgZCk6CisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiAiLWRiZyIgaW4gbmFtZSBvciAiLWRldiIgaW4gbmFtZToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgT3RoZXIgcGFja2FnZSBuYW1lcyB0byBza2lwOgorICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgia2VybmVsLW1vZHVsZS0iKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgU2tpcCBzeW1saW5rcworICAgIGlmIG9zLnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBTa2lwIHVudXN1YWwgcm9vdGZzIGxheW91dHMgd2hpY2ggbWFrZSB0aGVzZSB0ZXN0cyBpcnJlbGV2YW50CisgICAgZXhlY19wcmVmaXggPSBkLmdldFZhcignZXhlY19wcmVmaXgnLCBUcnVlKQorICAgIGlmIGV4ZWNfcHJlZml4ID09ICIiOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBwa2dkZXN0ID0gcGtnZGVzdCArICIvIiArIG5hbWUKKyAgICBwa2dkZXN0ID0gb3MucGF0aC5hYnNwYXRoKHBrZ2Rlc3QpCisgICAgYmFzZV9iaW5kaXIgPSBwa2dkZXN0ICsgZC5nZXRWYXIoJ2Jhc2VfYmluZGlyJywgVHJ1ZSkKKyAgICBiYXNlX3NiaW5kaXIgPSBwa2dkZXN0ICsgZC5nZXRWYXIoJ2Jhc2Vfc2JpbmRpcicsIFRydWUpCisgICAgYmFzZV9saWJkaXIgPSBwa2dkZXN0ICsgZC5nZXRWYXIoJ2Jhc2VfbGliZGlyJywgVHJ1ZSkKKyAgICBiaW5kaXIgPSBwa2dkZXN0ICsgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpCisgICAgc2JpbmRpciA9IHBrZ2Rlc3QgKyBkLmdldFZhcignc2JpbmRpcicsIFRydWUpCisgICAgbGliZGlyID0gcGtnZGVzdCArIGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKQorCisgICAgaWYgYmFzZV9iaW5kaXIgPT0gYmluZGlyIGFuZCBiYXNlX3NiaW5kaXIgPT0gc2JpbmRpciBhbmQgYmFzZV9saWJkaXIgPT0gbGliZGlyOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBTa2lwIGZpbGVzIG5vdCBpbiBiYXNlX1tiaW5kaXJ8c2JpbmRpcnxsaWJkaXJdCisgICAgcGF0aCA9IG9zLnBhdGguYWJzcGF0aChwYXRoKQorICAgIGlmIG5vdCAoYmFzZV9iaW5kaXIgaW4gcGF0aCBvciBiYXNlX3NiaW5kaXIgaW4gcGF0aCBvciBiYXNlX2xpYmRpciBpbiBwYXRoKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHJldHVybiBGYWxzZQorCitRQVBBVEhURVNUW2FyY2hdID0gInBhY2thZ2VfcWFfY2hlY2tfYXJjaCIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2FyY2gocGF0aCxuYW1lLGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGlmIGFyY2hzIGFyZSBjb21wYXRpYmxlCisgICAgIiIiCisgICAgaWYgbm90IGVsZjoKKyAgICAgICAgcmV0dXJuCisKKyAgICB0YXJnZXRfb3MgICA9IGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKQorICAgIHRhcmdldF9hcmNoID0gZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkKKyAgICBwcm92aWRlcyA9IGQuZ2V0VmFyKCdQUk9WSURFUycsIFRydWUpCisgICAgYnBuID0gZC5nZXRWYXIoJ0JQTicsIFRydWUpCisKKyAgICBpZiB0YXJnZXRfYXJjaCA9PSAiYWxsYXJjaCI6CisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgbWVzc2FnZXNbImFyY2giXSA9IHBuICsgIjogUmVjaXBlIGluaGVyaXRzIHRoZSBhbGxhcmNoIGNsYXNzLCBidXQgaGFzIHBhY2thZ2VkIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBiaW5hcmllcyIKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIEZJWE1FOiBDcm9zcyBwYWNrYWdlIGNvbmZ1c2UgdGhpcyBjaGVjaywgc28ganVzdCBza2lwIHRoZW0KKyAgICBmb3IgcyBpbiBbJ2Nyb3NzJywgJ25hdGl2ZXNkaycsICdjcm9zcy1jYW5hZGlhbiddOgorICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKHMsIGQpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAjIGF2b2lkIGZvbGxvd2luZyBsaW5rcyB0byAvdXNyL2JpbiAoZS5nLiBvbiB1ZGV2IGJ1aWxkcykKKyAgICAjIHdlIHdpbGwgY2hlY2sgdGhlIGZpbGVzIHBvaW50ZWQgdG8gYW55d2F5Li4uCisgICAgaWYgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgIHJldHVybgorCisgICAgI2lmIHRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24sIHRoZW4gZml4IHRoZSBkaWN0IGFib3ZlCisgICAgKG1hY2hpbmUsIG9zYWJpLCBhYml2ZXJzaW9uLCBsaXR0bGVlbmRpYW4sIGJpdHMpIFwKKyAgICAgICAgPSBwYWNrYWdlX3FhX2dldF9tYWNoaW5lX2RpY3QoKVt0YXJnZXRfb3NdW3RhcmdldF9hcmNoXQorCisgICAgIyBDaGVjayB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBlbmRpYW5uZXMgb2YgdGhlIGJpbmFyeQorICAgIGlmIG5vdCAoKG1hY2hpbmUgPT0gZWxmLm1hY2hpbmUoKSkgb3IgXAorICAgICAgICAoKCgidmlydHVhbC9rZXJuZWwiIGluIHByb3ZpZGVzKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJtb2R1bGUiLCBkKSApIGFuZCAodGFyZ2V0X29zID09ICJsaW51eC1nbnV4MzIiIG9yIHRhcmdldF9vcyA9PSAibGludXgtZ251bjMyIikpKToKKyAgICAgICAgbWVzc2FnZXNbImFyY2giXSA9ICJBcmNoaXRlY3R1cmUgZGlkIG5vdCBtYXRjaCAoJWQgdG8gJWQpIG9uICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgKG1hY2hpbmUsIGVsZi5tYWNoaW5lKCksIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpKQorICAgIGVsaWYgbm90ICgoYml0cyA9PSBlbGYuYWJpU2l6ZSgpKSBvciAgXAorICAgICAgICAoKCgidmlydHVhbC9rZXJuZWwiIGluIHByb3ZpZGVzKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJtb2R1bGUiLCBkKSApIGFuZCAodGFyZ2V0X29zID09ICJsaW51eC1nbnV4MzIiIG9yIHRhcmdldF9vcyA9PSAibGludXgtZ251bjMyIikpKToKKyAgICAgICAgbWVzc2FnZXNbImFyY2giXSA9ICJCaXQgc2l6ZSBkaWQgbm90IG1hdGNoICglZCB0byAlZCkgJXMgb24gJXMiICUgXAorICAgICAgICAgICAgICAgICAoYml0cywgZWxmLmFiaVNpemUoKSwgYnBuLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCxkKSkKKyAgICBlbGlmIG5vdCBsaXR0bGVlbmRpYW4gPT0gZWxmLmlzTGl0dGxlRW5kaWFuKCk6CisgICAgICAgIG1lc3NhZ2VzWyJhcmNoIl0gPSAiRW5kaWFubmVzIGRpZCBub3QgbWF0Y2ggKCVkIHRvICVkKSBvbiAlcyIgJSBcCisgICAgICAgICAgICAgICAgIChsaXR0bGVlbmRpYW4sIGVsZi5pc0xpdHRsZUVuZGlhbigpLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCxkKSkKKworUUFQQVRIVEVTVFtkZXNrdG9wXSA9ICJwYWNrYWdlX3FhX2NoZWNrX2Rlc2t0b3AiCitkZWYgcGFja2FnZV9xYV9jaGVja19kZXNrdG9wKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIFJ1biBhbGwgZGVza3RvcCBmaWxlcyB0aHJvdWdoIGRlc2t0b3AtZmlsZS12YWxpZGF0ZS4KKyAgICAiIiIKKyAgICBpZiBwYXRoLmVuZHN3aXRoKCIuZGVza3RvcCIpOgorICAgICAgICBkZXNrdG9wX2ZpbGVfdmFsaWRhdGUgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ1NUQUdJTkdfQklORElSX05BVElWRScsVHJ1ZSksJ2Rlc2t0b3AtZmlsZS12YWxpZGF0ZScpCisgICAgICAgIG91dHB1dCA9IG9zLnBvcGVuKCIlcyAlcyIgJSAoZGVza3RvcF9maWxlX3ZhbGlkYXRlLCBwYXRoKSkKKyAgICAgICAgIyBUaGlzIG9ubHkgcHJvZHVjZXMgb3V0cHV0IG9uIGVycm9ycworICAgICAgICBmb3IgbCBpbiBvdXRwdXQ6CisgICAgICAgICAgICBtZXNzYWdlc1siZGVza3RvcCJdID0gIkRlc2t0b3AgZmlsZSBpc3N1ZTogIiArIGwuc3RyaXAoKQorCitRQVBBVEhURVNUW3RleHRyZWxdID0gInBhY2thZ2VfcWFfdGV4dHJlbCIKK2RlZiBwYWNrYWdlX3FhX3RleHRyZWwocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgaWYgdGhlIGJpbmFyeSBjb250YWlucyByZWxvY2F0aW9ucyBpbiAudGV4dAorICAgICIiIgorCisgICAgaWYgbm90IGVsZjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBwaGRycyA9IGVsZi5ydW5fb2JqZHVtcCgiLXAiLCBkKQorICAgIHNhbmUgPSBUcnVlCisKKyAgICBpbXBvcnQgcmUKKyAgICB0ZXh0cmVsX3JlID0gcmUuY29tcGlsZSgiXHMrVEVYVFJFTFxzKyIpCisgICAgZm9yIGxpbmUgaW4gcGhkcnMuc3BsaXQoIlxuIik6CisgICAgICAgIGlmIHRleHRyZWxfcmUubWF0Y2gobGluZSk6CisgICAgICAgICAgICBzYW5lID0gRmFsc2UKKworICAgIGlmIG5vdCBzYW5lOgorICAgICAgICBtZXNzYWdlc1sidGV4dHJlbCJdID0gIkVMRiBiaW5hcnkgJyVzJyBoYXMgcmVsb2NhdGlvbnMgaW4gLnRleHQiICUgcGF0aAorCitRQVBBVEhURVNUW2xkZmxhZ3NdID0gInBhY2thZ2VfcWFfaGFzaF9zdHlsZSIKK2RlZiBwYWNrYWdlX3FhX2hhc2hfc3R5bGUocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgaWYgdGhlIGJpbmFyeSBoYXMgdGhlIHJpZ2h0IGhhc2ggc3R5bGUuLi4KKyAgICAiIiIKKworICAgIGlmIG5vdCBlbGY6CisgICAgICAgIHJldHVybgorCisgICAgaWYgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgIHJldHVybgorCisgICAgZ251X2hhc2ggPSAiLS1oYXNoLXN0eWxlPWdudSIgaW4gZC5nZXRWYXIoJ0xERkxBR1MnLCBUcnVlKQorICAgIGlmIG5vdCBnbnVfaGFzaDoKKyAgICAgICAgZ251X2hhc2ggPSAiLS1oYXNoLXN0eWxlPWJvdGgiIGluIGQuZ2V0VmFyKCdMREZMQUdTJywgVHJ1ZSkKKyAgICBpZiBub3QgZ251X2hhc2g6CisgICAgICAgIHJldHVybgorCisgICAgc2FuZSA9IEZhbHNlCisgICAgaGFzX3N5bXMgPSBGYWxzZQorCisgICAgcGhkcnMgPSBlbGYucnVuX29iamR1bXAoIi1wIiwgZCkKKworICAgICMgSWYgdGhpcyBiaW5hcnkgaGFzIHN5bWJvbHMsIHdlIGV4cGVjdCBpdCB0byBoYXZlIEdOVV9IQVNIIHRvby4KKyAgICBmb3IgbGluZSBpbiBwaGRycy5zcGxpdCgiXG4iKToKKyAgICAgICAgaWYgIlNZTVRBQiIgaW4gbGluZToKKyAgICAgICAgICAgIGhhc19zeW1zID0gVHJ1ZQorICAgICAgICBpZiAiR05VX0hBU0giIGluIGxpbmU6CisgICAgICAgICAgICBzYW5lID0gVHJ1ZQorICAgICAgICBpZiAiW21pcHMzMl0iIGluIGxpbmUgb3IgIlttaXBzNjRdIiBpbiBsaW5lOgorICAgICAgICAgICAgc2FuZSA9IFRydWUKKworICAgIGlmIGhhc19zeW1zIGFuZCBub3Qgc2FuZToKKyAgICAgICAgbWVzc2FnZXNbImxkZmxhZ3MiXSA9ICJObyBHTlVfSEFTSCBpbiB0aGUgZWxmIGJpbmFyeTogJyVzJyIgJSBwYXRoCisKKworUUFQQVRIVEVTVFtidWlsZHBhdGhzXSA9ICJwYWNrYWdlX3FhX2NoZWNrX2J1aWxkcGF0aHMiCitkZWYgcGFja2FnZV9xYV9jaGVja19idWlsZHBhdGhzKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGZvciBidWlsZCBwYXRocyBpbnNpZGUgdGFyZ2V0IGZpbGVzIGFuZCBlcnJvciBpZiBub3QgZm91bmQgaW4gdGhlIHdoaXRlbGlzdAorICAgICIiIgorICAgICMgSWdub3JlIC5kZWJ1ZyBmaWxlcywgbm90IGludGVyZXN0aW5nCisgICAgaWYgcGF0aC5maW5kKCIuZGVidWciKSAhPSAtMToKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIElnbm9yZSBzeW1saW5rcworICAgIGlmIG9zLnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICByZXR1cm4KKworICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgIHdpdGggb3BlbihwYXRoKSBhcyBmOgorICAgICAgICBmaWxlX2NvbnRlbnQgPSBmLnJlYWQoKQorICAgICAgICBpZiB0bXBkaXIgaW4gZmlsZV9jb250ZW50OgorICAgICAgICAgICAgbWVzc2FnZXNbImJ1aWxkcGF0aHMiXSA9ICJGaWxlICVzIGluIHBhY2thZ2UgY29udGFpbmVkIHJlZmVyZW5jZSB0byB0bXBkaXIiICUgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkKKworCitRQVBBVEhURVNUW3hvcmctZHJpdmVyLWFiaV0gPSAicGFja2FnZV9xYV9jaGVja194b3JnX2RyaXZlcl9hYmkiCitkZWYgcGFja2FnZV9xYV9jaGVja194b3JnX2RyaXZlcl9hYmkocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgdGhhdCBhbGwgcGFja2FnZXMgY29udGFpbmluZyBYb3JnIGRyaXZlcnMgaGF2ZSBBQkkgZGVwZW5kZW5jaWVzCisgICAgIiIiCisKKyAgICAjIFNraXAgZGV2LCBkYmcgb3IgbmF0aXZlc2RrIHBhY2thZ2VzCisgICAgaWYgbmFtZS5lbmRzd2l0aCgiLWRldiIpIG9yIG5hbWUuZW5kc3dpdGgoIi1kYmciKSBvciBuYW1lLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkcml2ZXJkaXIgPSBkLmV4cGFuZCgiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9kcml2ZXJzLyIpCisgICAgaWYgZHJpdmVyZGlyIGluIHBhdGggYW5kIHBhdGguZW5kc3dpdGgoIi5zbyIpOgorICAgICAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICcnCisgICAgICAgIGZvciByZGVwIGluIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZhcignUkRFUEVORFNfJyArIG5hbWUsIFRydWUpIG9yICIiKToKKyAgICAgICAgICAgIGlmIHJkZXAuc3RhcnRzd2l0aCgiJXN4b3JnLWFiaS0iICUgbWxwcmVmaXgpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBtZXNzYWdlc1sieG9yZy1kcml2ZXItYWJpIl0gPSAiUGFja2FnZSAlcyBjb250YWlucyBYb3JnIGRyaXZlciAoJXMpIGJ1dCBubyB4b3JnLWFiaS0gZGVwZW5kZW5jaWVzIiAlIChuYW1lLCBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpKQorCitRQVBBVEhURVNUW2luZm9kaXJdID0gInBhY2thZ2VfcWFfY2hlY2tfaW5mb2RpciIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2luZm9kaXIocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgdGhhdCAvdXNyL3NoYXJlL2luZm8vZGlyIGlzbid0IHNoaXBwZWQgaW4gYSBwYXJ0aWN1bGFyIHBhY2thZ2UKKyAgICAiIiIKKyAgICBpbmZvZGlyID0gZC5leHBhbmQoIiR7aW5mb2Rpcn0vZGlyIikKKworICAgIGlmIGluZm9kaXIgaW4gcGF0aDoKKyAgICAgICAgbWVzc2FnZXNbImluZm9kaXIiXSA9ICJUaGUgL3Vzci9zaGFyZS9pbmZvL2RpciBmaWxlIGlzIG5vdCBtZWFudCB0byBiZSBzaGlwcGVkIGluIGEgcGFydGljdWxhciBwYWNrYWdlLiIKKworUUFQQVRIVEVTVFtzeW1saW5rLXRvLXN5c3Jvb3RdID0gInBhY2thZ2VfcWFfY2hlY2tfc3ltbGlua190b19zeXNyb290IgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfc3ltbGlua190b19zeXNyb290KHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIHRoYXQgdGhlIHBhY2thZ2UgZG9lc24ndCBjb250YWluIGFueSBhYnNvbHV0ZSBzeW1saW5rcyB0byB0aGUgc3lzcm9vdC4KKyAgICAiIiIKKyAgICBpZiBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgdGFyZ2V0ID0gb3MucmVhZGxpbmsocGF0aCkKKyAgICAgICAgaWYgb3MucGF0aC5pc2Ficyh0YXJnZXQpOgorICAgICAgICAgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisgICAgICAgICAgICBpZiB0YXJnZXQuc3RhcnRzd2l0aCh0bXBkaXIpOgorICAgICAgICAgICAgICAgIHRyaW1tZWQgPSBwYXRoLnJlcGxhY2Uob3MucGF0aC5qb2luIChkLmdldFZhcigiUEtHREVTVCIsIFRydWUpLCBuYW1lKSwgIiIpCisgICAgICAgICAgICAgICAgbWVzc2FnZXNbInN5bWxpbmstdG8tc3lzcm9vdCJdID0gIlN5bWxpbmsgJXMgaW4gJXMgcG9pbnRzIHRvIFRNUERJUiIgJSAodHJpbW1lZCwgbmFtZSkKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2xpY2Vuc2Uod29ya2RpciwgZCk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yIGNoYW5nZXMgaW4gdGhlIGxpY2Vuc2UgZmlsZXMgCisgICAgIiIiCisgICAgaW1wb3J0IHRlbXBmaWxlCisgICAgc2FuZSA9IFRydWUKKworICAgIGxpY19maWxlcyA9IGQuZ2V0VmFyKCdMSUNfRklMRVNfQ0hLU1VNJywgVHJ1ZSkKKyAgICBsaWMgPSBkLmdldFZhcignTElDRU5TRScsIFRydWUpCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgaWYgbGljID09ICJDTE9TRUQiOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgaWYgbm90IGxpY19maWxlczoKKyAgICAgICAgYmIuZXJyb3IocG4gKyAiOiBSZWNpcGUgZmlsZSBkb2VzIG5vdCBoYXZlIGxpY2Vuc2UgZmlsZSBpbmZvcm1hdGlvbiAoTElDX0ZJTEVTX0NIS1NVTSkiKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHNyY2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKworICAgIGZvciB1cmwgaW4gbGljX2ZpbGVzLnNwbGl0KCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICh0eXBlLCBob3N0LCBwYXRoLCB1c2VyLCBwc3dkLCBwYXJtKSA9IGJiLmZldGNoLmRlY29kZXVybCh1cmwpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaC5NYWxmb3JtZWRVcmw6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCBwbiArICI6IExJQ19GSUxFU19DSEtTVU0gY29udGFpbnMgYW4gaW52YWxpZCBVUkw6ICIgKyB1cmwpCisgICAgICAgIHNyY2xpY2ZpbGUgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCBwYXRoKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc3JjbGljZmlsZSk6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCBwbiArICI6IExJQ19GSUxFU19DSEtTVU0gcG9pbnRzIHRvIGFuIGludmFsaWQgZmlsZTogIiArIHNyY2xpY2ZpbGUpCisKKyAgICAgICAgcmVjaXBlbWQ1ID0gcGFybS5nZXQoJ21kNScsICcnKQorICAgICAgICBiZWdpbmxpbmUsIGVuZGxpbmUgPSAwLCAwCisgICAgICAgIGlmICdiZWdpbmxpbmUnIGluIHBhcm06CisgICAgICAgICAgICBiZWdpbmxpbmUgPSBpbnQocGFybVsnYmVnaW5saW5lJ10pCisgICAgICAgIGlmICdlbmRsaW5lJyBpbiBwYXJtOgorICAgICAgICAgICAgZW5kbGluZSA9IGludChwYXJtWydlbmRsaW5lJ10pCisKKyAgICAgICAgaWYgKG5vdCBiZWdpbmxpbmUpIGFuZCAobm90IGVuZGxpbmUpOgorICAgICAgICAgICAgbWQ1Y2hrc3VtID0gYmIudXRpbHMubWQ1X2ZpbGUoc3JjbGljZmlsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpID0gb3BlbihzcmNsaWNmaWxlLCAncmInKQorICAgICAgICAgICAgZm8gPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUobW9kZT0nd2InLCBwcmVmaXg9J3Bva3kuJywgc3VmZml4PScudG1wJywgZGVsZXRlPUZhbHNlKQorICAgICAgICAgICAgdG1wbGljZmlsZSA9IGZvLm5hbWU7CisgICAgICAgICAgICBsaW5lbm8gPSAwCisgICAgICAgICAgICBsaW5lc291dCA9IDAKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGZpOgorICAgICAgICAgICAgICAgIGxpbmVubyArPSAxCisgICAgICAgICAgICAgICAgaWYgKGxpbmVubyA+PSBiZWdpbmxpbmUpOiAKKyAgICAgICAgICAgICAgICAgICAgaWYgKChsaW5lbm8gPD0gZW5kbGluZSkgb3Igbm90IGVuZGxpbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm8ud3JpdGUobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzb3V0ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmby5mbHVzaCgpCisgICAgICAgICAgICBmby5jbG9zZSgpCisgICAgICAgICAgICBmaS5jbG9zZSgpCisgICAgICAgICAgICBtZDVjaGtzdW0gPSBiYi51dGlscy5tZDVfZmlsZSh0bXBsaWNmaWxlKQorICAgICAgICAgICAgb3MudW5saW5rKHRtcGxpY2ZpbGUpCisKKyAgICAgICAgaWYgcmVjaXBlbWQ1ID09IG1kNWNoa3N1bToKKyAgICAgICAgICAgIGJiLm5vdGUgKHBuICsgIjogbWQ1IGNoZWNrc3VtIG1hdGNoZWQgZm9yICIsIHVybCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHJlY2lwZW1kNToKKyAgICAgICAgICAgICAgICBiYi5lcnJvcihwbiArICI6IG1kNSBkYXRhIGlzIG5vdCBtYXRjaGluZyBmb3IgIiwgdXJsKQorICAgICAgICAgICAgICAgIGJiLmVycm9yKHBuICsgIjogVGhlIG5ldyBtZDUgY2hlY2tzdW0gaXMgIiwgbWQ1Y2hrc3VtKQorICAgICAgICAgICAgICAgIGlmIGJlZ2lubGluZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZW5kbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY2ZpbGVkZXNjID0gIiVzIChsaW5lcyAlZCB0aHJvdWdoIHRvICVkKSIgJSAoc3JjbGljZmlsZSwgYmVnaW5saW5lLCBlbmRsaW5lKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3JjZmlsZWRlc2MgPSAiJXMgKGJlZ2lubmluZyBvbiBsaW5lICVkKSIgJSAoc3JjbGljZmlsZSwgYmVnaW5saW5lKQorICAgICAgICAgICAgICAgIGVsaWYgZW5kbGluZToKKyAgICAgICAgICAgICAgICAgICAgc3JjZmlsZWRlc2MgPSAiJXMgKGVuZGluZyBvbiBsaW5lICVkKSIgJSAoc3JjbGljZmlsZSwgZW5kbGluZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzcmNmaWxlZGVzYyA9IHNyY2xpY2ZpbGUKKyAgICAgICAgICAgICAgICBiYi5lcnJvcihwbiArICI6IENoZWNrIGlmIHRoZSBsaWNlbnNlIGluZm9ybWF0aW9uIGhhcyBjaGFuZ2VkIGluICVzIHRvIHZlcmlmeSB0aGF0IHRoZSBMSUNFTlNFIHZhbHVlIFwiJXNcIiByZW1haW5zIHZhbGlkIiAlIChzcmNmaWxlZGVzYywgbGljKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IocG4gKyAiOiBtZDUgY2hlY2tzdW0gaXMgbm90IHNwZWNpZmllZCBmb3IgIiwgdXJsKQorICAgICAgICAgICAgICAgIGJiLmVycm9yKHBuICsgIjogVGhlIG1kNSBjaGVja3N1bSBpcyAiLCBtZDVjaGtzdW0pCisgICAgICAgICAgICBzYW5lID0gRmFsc2UKKworICAgIHJldHVybiBzYW5lCisKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3N0YWdlZChwYXRoLGQpOgorICAgICIiIgorICAgIENoZWNrIHN0YWdlZCBsYSBhbmQgcGMgZmlsZXMgZm9yIHNhbml0eQorICAgICAgLWUuZy4gaW5zdGFsbGVkIGJlaW5nIGZhbHNlCisKKyAgICAgICAgQXMgdGhpcyBpcyBydW4gYWZ0ZXIgZXZlcnkgc3RhZ2Ugd2Ugc2hvdWxkIGJlIGFibGUKKyAgICAgICAgdG8gZmluZCB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciB0aGUgZXJyb3JzIGVhc2lseSBldmVuCisgICAgICAgIGlmIHdlIGxvb2sgYXQgZXZlcnkgLnBjIGFuZCAubGEgZmlsZQorICAgICIiIgorCisgICAgc2FuZSA9IFRydWUKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICB3b3JrZGlyID0gb3MucGF0aC5qb2luKHRtcGRpciwgIndvcmsiKQorCisgICAgaW5zdGFsbGVkID0gImluc3RhbGxlZD15ZXMiCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygibmF0aXZlIiwgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygiY3Jvc3MiLCBkKToKKyAgICAgICAgcGtnY29uZmlnY2hlY2sgPSB3b3JrZGlyCisgICAgZWxzZToKKyAgICAgICAgcGtnY29uZmlnY2hlY2sgPSB0bXBkaXIKKworICAgICMgZmluZCBhbGwgLmxhIGFuZCAucGMgZmlsZXMKKyAgICAjIHJlYWQgdGhlIGNvbnRlbnQKKyAgICAjIGFuZCBjaGVjayBmb3Igc3R1ZmYgdGhhdCBsb29rcyB3cm9uZworICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgpOgorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCxmaWxlKQorICAgICAgICAgICAgaWYgZmlsZS5lbmRzd2l0aCgiLmxhIik6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZpbGVfY29udGVudCA9IGYucmVhZCgpCisgICAgICAgICAgICAgICAgICAgIGlmIHdvcmtkaXIgaW4gZmlsZV9jb250ZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzIGZhaWxlZCBzYW5pdHkgdGVzdCAod29ya2RpcikgaW4gcGF0aCAlcyIgJSAoZmlsZSxyb290KQorICAgICAgICAgICAgICAgICAgICAgICAgc2FuZSA9IHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJsYSIsIGVycm9yX21zZywgZCkKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgiLnBjIik6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZpbGVfY29udGVudCA9IGYucmVhZCgpCisgICAgICAgICAgICAgICAgICAgIGlmIHBrZ2NvbmZpZ2NoZWNrIGluIGZpbGVfY29udGVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlcyBmYWlsZWQgc2FuaXR5IHRlc3QgKHRtcGRpcikgaW4gcGF0aCAlcyIgJSAoZmlsZSxyb290KQorICAgICAgICAgICAgICAgICAgICAgICAgc2FuZSA9IHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJwa2djb25maWciLCBlcnJvcl9tc2csIGQpCisKKyAgICByZXR1cm4gc2FuZQorCisjIFdhbGsgb3ZlciBhbGwgZmlsZXMgaW4gYSBkaXJlY3RvcnkgYW5kIGNhbGwgZnVuYworZGVmIHBhY2thZ2VfcWFfd2FsayhwYXRoLCB3YXJuZnVuY3MsIGVycm9yZnVuY3MsIHNraXAsIHBhY2thZ2UsIGQpOgorICAgIGltcG9ydCBvZS5xYQorCisgICAgI2lmIHRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24sIHRoZW4gZml4IHRoZSBkaWN0IGFib3ZlCisgICAgdGFyZ2V0X29zICAgPSBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkKKyAgICB0YXJnZXRfYXJjaCA9IGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpCisKKyAgICB3YXJuaW5ncyA9IHt9CisgICAgZXJyb3JzID0ge30KKyAgICBmb3IgcGF0aCBpbiBwa2dmaWxlc1twYWNrYWdlXToKKyAgICAgICAgICAgIGVsZiA9IG9lLnFhLkVMRkZpbGUocGF0aCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBlbGYub3BlbigpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgZWxmID0gTm9uZQorICAgICAgICAgICAgZm9yIGZ1bmMgaW4gd2FybmZ1bmNzOgorICAgICAgICAgICAgICAgIGZ1bmMocGF0aCwgcGFja2FnZSwgZCwgZWxmLCB3YXJuaW5ncykKKyAgICAgICAgICAgIGZvciBmdW5jIGluIGVycm9yZnVuY3M6CisgICAgICAgICAgICAgICAgZnVuYyhwYXRoLCBwYWNrYWdlLCBkLCBlbGYsIGVycm9ycykKKworICAgIGZvciB3IGluIHdhcm5pbmdzOgorICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcih3LCB3YXJuaW5nc1t3XSwgZCkKKyAgICBmb3IgZSBpbiBlcnJvcnM6CisgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKGUsIGVycm9yc1tlXSwgZCkKKworICAgIHJldHVybiBsZW4oZXJyb3JzKSA9PSAwCisKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3JkZXBlbmRzKHBrZywgcGtnZGVzdCwgc2tpcCwgdGFza2RlcHMsIHBhY2thZ2VzLCBkKToKKyAgICAjIERvbid0IGRvIHRoaXMgY2hlY2sgZm9yIGtlcm5lbC9tb2R1bGUgcmVjaXBlcywgdGhlcmUgYXJlbid0IHRvbyBtYW55IGRlYnVnL2RldmVsb3BtZW50CisgICAgIyBwYWNrYWdlcyBhbmQgeW91IGNhbiBnZXQgZmFsc2UgcG9zaXRpdmVzIGUuZy4gb24ga2VybmVsLW1vZHVsZS1saXJjLWRldgorICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoImtlcm5lbCIsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoIm1vZHVsZS1iYXNlIiwgZCk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBzYW5lID0gVHJ1ZQorICAgIGlmIG5vdCAiLWRiZyIgaW4gcGtnIGFuZCBub3QgInBhY2thZ2Vncm91cC0iIGluIHBrZyBhbmQgbm90ICItaW1hZ2UiIGluIHBrZzoKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIHBrZykKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgIyBOb3cgY2hlY2sgdGhlIFJERVBFTkRTCisgICAgICAgIHJkZXBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBzKGxvY2FsZGF0YS5nZXRWYXIoJ1JERVBFTkRTJywgVHJ1ZSkgb3IgIiIpCisKKyAgICAgICAgIyBOb3cgZG8gdGhlIHNhbml0eSBjaGVjayEhIQorICAgICAgICBpZiAiYnVpbGQtZGVwcyIgbm90IGluIHNraXA6CisgICAgICAgICAgICBmb3IgcmRlcGVuZCBpbiByZGVwZW5kczoKKyAgICAgICAgICAgICAgICBpZiAiLWRiZyIgaW4gcmRlcGVuZCBhbmQgImRlYnVnLWRlcHMiIG5vdCBpbiBza2lwOgorICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXMgcmRlcGVuZHMgb24gJXMiICUgKHBrZyxyZGVwZW5kKQorICAgICAgICAgICAgICAgICAgICBzYW5lID0gcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImRlYnVnLWRlcHMiLCBlcnJvcl9tc2csIGQpCisgICAgICAgICAgICAgICAgaWYgKG5vdCAiLWRldiIgaW4gcGtnIGFuZCBub3QgIi1zdGF0aWNkZXYiIGluIHBrZykgYW5kIHJkZXBlbmQuZW5kc3dpdGgoIi1kZXYiKSBhbmQgImRldi1kZXBzIiBub3QgaW4gc2tpcDoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzIHJkZXBlbmRzIG9uICVzIiAlIChwa2csIHJkZXBlbmQpCisgICAgICAgICAgICAgICAgICAgIHNhbmUgPSBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiZGV2LWRlcHMiLCBlcnJvcl9tc2csIGQpCisgICAgICAgICAgICAgICAgaWYgcmRlcGVuZCBub3QgaW4gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgICAgIHJkZXBfZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfc3VicGtnZGF0YShyZGVwZW5kLCBkKQorICAgICAgICAgICAgICAgICAgICBpZiByZGVwX2RhdGEgYW5kICdQTicgaW4gcmRlcF9kYXRhIGFuZCByZGVwX2RhdGFbJ1BOJ10gaW4gdGFza2RlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmRlcF9kYXRhIG9yIG5vdCAnUE4nIGluIHJkZXBfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ2RhdGFfZGlyID0gZC5nZXRWYXIoIlBLR0RBVEFfRElSIiwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZXMgPSBvcy5saXN0ZGlyKCIlcy9ydW50aW1lLXJwcm92aWRlcy8lcy8iICUgKHBrZ2RhdGFfZGlyLCByZGVwZW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlcyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBwb3NzaWJsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRlcF9kYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhKHAsIGQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmRlcF9kYXRhIGFuZCAnUE4nIGluIHJkZXBfZGF0YSBhbmQgcmRlcF9kYXRhWydQTiddIGluIHRhc2tkZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiByZGVwX2RhdGEgYW5kICdQTicgaW4gcmRlcF9kYXRhIGFuZCByZGVwX2RhdGFbJ1BOJ10gaW4gdGFza2RlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXMgcmRlcGVuZHMgb24gJXMsIGJ1dCBpdCBpc24ndCBhIGJ1aWxkIGRlcGVuZGVuY3k/IiAlIChwa2csIHJkZXBlbmQpCisgICAgICAgICAgICAgICAgICAgIHNhbmUgPSBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiYnVpbGQtZGVwcyIsIGVycm9yX21zZywgZCkKKworICAgICAgICBpZiAiZmlsZS1yZGVwcyIgbm90IGluIHNraXA6CisgICAgICAgICAgICBpZ25vcmVkX2ZpbGVfcmRlcHMgPSBzZXQoWycvYmluL3NoJywgJy91c3IvYmluL2VudicsICdydGxkKEdOVV9IQVNIKSddKQorICAgICAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCk6CisgICAgICAgICAgICAgICAgaWdub3JlZF9maWxlX3JkZXBzIHw9IHNldChbJy9iaW4vYmFzaCcsICcvdXNyL2Jpbi9wZXJsJ10pCisgICAgICAgICAgICAjIEZvciBTYXZpbmcgdGhlIEZJTEVSREVQRU5EUworICAgICAgICAgICAgZmlsZXJkZXBlbmRzID0ge30KKyAgICAgICAgICAgIHJkZXBfZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfc3VicGtnZGF0YShwa2csIGQpCisgICAgICAgICAgICBmb3Iga2V5IGluIHJkZXBfZGF0YToKKyAgICAgICAgICAgICAgICBpZiBrZXkuc3RhcnRzd2l0aCgiRklMRVJERVBFTkRTXyIpOgorICAgICAgICAgICAgICAgICAgICBmb3Igc3Via2V5IGluIHJkZXBfZGF0YVtrZXldLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzdWJrZXkgbm90IGluIGlnbm9yZWRfZmlsZV9yZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGFscmVhZHkga25vdyBpdCBzdGFydHMgd2l0aCBGSUxFUkRFUEVORFNfCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXJkZXBlbmRzW3N1YmtleV0gPSBrZXlbMTM6XQorCisgICAgICAgICAgICBpZiBmaWxlcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgbmV4dCA9IHJkZXBlbmRzCisgICAgICAgICAgICAgICAgZG9uZSA9IHJkZXBlbmRzWzpdCisgICAgICAgICAgICAgICAgIyBGaW5kIGFsbCB0aGUgcmRlcGVuZHMgb24gdGhlIGRlcGVuZGVuY3kgY2hhaW4KKyAgICAgICAgICAgICAgICB3aGlsZSBuZXh0OgorICAgICAgICAgICAgICAgICAgICBuZXcgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3IgcmRlcCBpbiBuZXh0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmRlcF9kYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhKHJkZXAsIGQpCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJfcmRlcHMgPSByZGVwX2RhdGEuZ2V0KCJSREVQRU5EU18iICsgcmRlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdWJfcmRlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdWJfcmRlcCBpbiBzdWJfcmRlcHMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzdWJfcmRlcCBpbiBkb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdWJfcmRlcC5zdGFydHN3aXRoKCcoJykgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lLnBhY2thZ2VkYXRhLmhhc19zdWJwa2dkYXRhKHN1Yl9yZGVwLCBkKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJdCdzIGEgbmV3IHJkZXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3ViX3JkZXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldy5hcHBlbmQoc3ViX3JkZXApCisgICAgICAgICAgICAgICAgICAgIG5leHQgPSBuZXcKKworICAgICAgICAgICAgICAgICMgQWRkIHRoZSBycHJvdmlkZXMgb2YgaXRzZWxmCisgICAgICAgICAgICAgICAgaWYgcGtnIG5vdCBpbiBkb25lOgorICAgICAgICAgICAgICAgICAgICBkb25lLmluc2VydCgwLCBwa2cpCisKKyAgICAgICAgICAgICAgICAjIFRoZSBweXRob24gaXMgbm90IGEgcGFja2FnZSwgYnV0IHB5dGhvbi1jb3JlIHByb3ZpZGVzIGl0LCBzbworICAgICAgICAgICAgICAgICMgc2tpcCBjaGVja2luZyAvdXNyL2Jpbi9weXRob24gaWYgcHl0aG9uIGlzIGluIHRoZSByZGVwcywgaW4KKyAgICAgICAgICAgICAgICAjIGNhc2UgdGhlcmUgaXMgYSBSREVQRU5EU19wa2cgPSAicHl0aG9uIiBpbiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIGZvciBweSBpbiBbIGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpICsgInB5dGhvbiIsICJweXRob24iIF06CisgICAgICAgICAgICAgICAgICAgIGlmIHB5IGluIGRvbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcmRlcGVuZHMucG9wKCIvdXNyL2Jpbi9weXRob24iLE5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lLnJlbW92ZShweSkKKyAgICAgICAgICAgICAgICBmb3IgcmRlcCBpbiBkb25lOgorICAgICAgICAgICAgICAgICAgICAjIEZvciBTYXZpbmcgdGhlIEZJTEVSUFJPVklERVMsIFJQUk9WSURFUyBhbmQgRklMRVNfSU5GTworICAgICAgICAgICAgICAgICAgICByZGVwX2RhdGEgPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3N1YnBrZ2RhdGEocmRlcCwgZCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGtleSBpbiByZGVwX2RhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrZXkuc3RhcnRzd2l0aCgiRklMRVJQUk9WSURFU18iKSBvciBrZXkuc3RhcnRzd2l0aCgiUlBST1ZJREVTXyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdWJrZXkgaW4gcmRlcF9kYXRhW2tleV0uc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXJkZXBlbmRzLnBvcChzdWJrZXksTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIHRoZSBmaWxlcyBsaXN0IHRvIHRoZSBycHJvdmlkZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtleSA9PSAiRklMRVNfSU5GTyI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2UgZXZhbCgpIHRvIG1ha2UgaXQgYXMgYSBkaWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN1YmtleSBpbiBldmFsKHJkZXBfZGF0YVtrZXldKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXJkZXBlbmRzLnBvcChzdWJrZXksTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZpbGVyZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQnJlYWsgaWYgYWxsIHRoZSBmaWxlIHJkZXBlbmRzIGFyZSBtZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBmaWxlcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBmaWxlcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlcyBjb250YWluZWQgaW4gcGFja2FnZSAlcyByZXF1aXJlcyAlcywgYnV0IG5vIHByb3ZpZGVycyBmb3VuZCBpbiBpdHMgUkRFUEVORFMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlcmRlcGVuZHNba2V5XSxwa2csIGtleSkKKyAgICAgICAgICAgICAgICBzYW5lID0gcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImZpbGUtcmRlcHMiLCBlcnJvcl9tc2csIGQpCisKKyAgICByZXR1cm4gc2FuZQorCitkZWYgcGFja2FnZV9xYV9jaGVja19kZXBzKHBrZywgcGtnZGVzdCwgc2tpcCwgZCk6CisgICAgc2FuZSA9IFRydWUKKworICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIHBrZykKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgIGRlZiBjaGVja192YWxpZF9kZXBzKHZhcik6CisgICAgICAgIHNhbmUgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ2YXIgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcih2YXIsIFRydWUpIG9yICIiKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIiVzXyVzOiAlcyIgJSAodmFyLCBwa2csIGUpKQorICAgICAgICBmb3IgZGVwIGluIHJ2YXI6CisgICAgICAgICAgICBmb3IgdiBpbiBydmFyW2RlcF06CisgICAgICAgICAgICAgICAgaWYgdiBhbmQgbm90IHYuc3RhcnRzd2l0aCgoJzwgJywgJz0gJywgJz4gJywgJzw9ICcsICc+PScpKToKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzXyVzIGlzIGludmFsaWQ6ICVzICglcykgICBvbmx5IGNvbXBhcmlzb25zIDwsID0sID4sIDw9LCBhbmQgPj0gYXJlIGFsbG93ZWQiICUgKHZhciwgcGtnLCBkZXAsIHYpCisgICAgICAgICAgICAgICAgICAgIHNhbmUgPSBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiZGVwLWNtcCIsIGVycm9yX21zZywgZCkKKyAgICAgICAgcmV0dXJuIHNhbmUKKworICAgIHNhbmUgPSBUcnVlCisgICAgaWYgbm90IGNoZWNrX3ZhbGlkX2RlcHMoJ1JERVBFTkRTJyk6CisgICAgICAgIHNhbmUgPSBGYWxzZQorICAgIGlmIG5vdCBjaGVja192YWxpZF9kZXBzKCdSUkVDT01NRU5EUycpOgorICAgICAgICBzYW5lID0gRmFsc2UKKyAgICBpZiBub3QgY2hlY2tfdmFsaWRfZGVwcygnUlNVR0dFU1RTJyk6CisgICAgICAgIHNhbmUgPSBGYWxzZQorICAgIGlmIG5vdCBjaGVja192YWxpZF9kZXBzKCdSUFJPVklERVMnKToKKyAgICAgICAgc2FuZSA9IEZhbHNlCisgICAgaWYgbm90IGNoZWNrX3ZhbGlkX2RlcHMoJ1JSRVBMQUNFUycpOgorICAgICAgICBzYW5lID0gRmFsc2UKKyAgICBpZiBub3QgY2hlY2tfdmFsaWRfZGVwcygnUkNPTkZMSUNUUycpOgorICAgICAgICBzYW5lID0gRmFsc2UKKworICAgIHJldHVybiBzYW5lCisKK1FBUEFUSFRFU1RbZXhwYW5kZWQtZF0gPSAicGFja2FnZV9xYV9jaGVja19leHBhbmRlZF9kIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfZXhwYW5kZWRfZChwYXRoLG5hbWUsZCxlbGYsbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGZvciB0aGUgZXhwYW5kZWQgRCAoJHtEfSkgdmFsdWUgaW4gcGtnXyogYW5kIEZJTEVTCisgICAgdmFyaWFibGVzLCB3YXJuIHRoZSB1c2VyIHRvIHVzZSBpdCBjb3JyZWN0bHkuCisgICAgIiIiCisKKyAgICBzYW5lID0gVHJ1ZQorICAgIGV4cGFuZGVkX2QgPSBkLmdldFZhcignRCcsVHJ1ZSkKKworICAgICMgR2V0IHBhY2thZ2VzIGZvciBjdXJyZW50IHJlY2lwZSBhbmQgaXRlcmF0ZQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoIiAiKQorICAgIGZvciBwYWsgaW4gcGFja2FnZXM6CisgICAgIyBHbyB0aHJvdWdoIGFsbCB2YXJpYWJsZXMgYW5kIGNoZWNrIGlmIGV4cGFuZGVkIEQgaXMgZm91bmQsIHdhcm4gdGhlIHVzZXIgYWNjb3JkaW5nbHkKKyAgICAgICAgZm9yIHZhciBpbiAnRklMRVMnLCdwa2dfcHJlaW5zdCcsICdwa2dfcG9zdGluc3QnLCAncGtnX3ByZXJtJywgJ3BrZ19wb3N0cm0nOgorICAgICAgICAgICAgYmJ2YXIgPSBkLmdldFZhcih2YXIgKyAiXyIgKyBwYWssIEZhbHNlKQorICAgICAgICAgICAgaWYgYmJ2YXI6CisgICAgICAgICAgICAgICAgIyBCaXRiYWtlIGV4cGFuZHMgJHtEfSB3aXRoaW4gYmJ2YXIgZHVyaW5nIHRoZSBwcmV2aW91cyBzdGVwLCBzbyB3ZSBjaGVjayBmb3IgaXRzIGV4cGFuZGVkIHZhbHVlCisgICAgICAgICAgICAgICAgaWYgZXhwYW5kZWRfZCBpbiBiYnZhcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFyID09ICdGSUxFUyc6CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlc1siZXhwYW5kZWQtZCJdID0gIkZJTEVTIGluICVzIHJlY2lwZSBzaG91bGQgbm90IGNvbnRhaW4gdGhlICR7RH0gdmFyaWFibGUgYXMgaXQgcmVmZXJlbmNlcyB0aGUgbG9jYWwgYnVpbGQgZGlyZWN0b3J5IG5vdCB0aGUgdGFyZ2V0IGZpbGVzeXN0ZW0sIGJlc3Qgc29sdXRpb24gaXMgdG8gcmVtb3ZlIHRoZSAke0R9IHJlZmVyZW5jZSIgJSBwYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhbmUgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXNbImV4cGFuZGVkLWQiXSA9ICIlcyBpbiAlcyByZWNpcGUgY29udGFpbnMgJHtEfSwgaXQgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5ICREIGluc3RlYWQiICUgKHZhciwgcGFrKQorICAgICAgICAgICAgICAgICAgICAgICAgc2FuZSA9IEZhbHNlCisgICAgcmV0dXJuIHNhbmUKKworZGVmIHBhY2thZ2VfcWFfY2hlY2tfZW5jb2Rpbmcoa2V5cywgZW5jb2RlLCBkKToKKyAgICBkZWYgY2hlY2tfZW5jb2Rpbmcoa2V5LGVuYyk6CisgICAgICAgIHNhbmUgPSBUcnVlCisgICAgICAgIHZhbHVlID0gZC5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICBpZiB2YWx1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzID0gdW5pY29kZSh2YWx1ZSwgZW5jKQorICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlcyBoYXMgbm9uICVzIGNoYXJhY3RlcnMiICUgKGtleSxlbmMpCisgICAgICAgICAgICAgICAgc2FuZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImludmFsaWQtY2hhcnMiLCBlcnJvcl9tc2csIGQpCisgICAgICAgIHJldHVybiBzYW5lCisKKyAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgIHNhbmUgPSBjaGVja19lbmNvZGluZyhrZXksIGVuY29kZSkKKyAgICAgICAgaWYgbm90IHNhbmU6CisgICAgICAgICAgICBicmVhaworCitIT1NUX1VTRVJfVUlEIDo9ICIke0Bvcy5nZXR1aWQoKX0iCitIT1NUX1VTRVJfR0lEIDo9ICIke0Bvcy5nZXRnaWQoKX0iCisKK1FBUEFUSFRFU1RbaG9zdC11c2VyLWNvbnRhbWluYXRlZF0gPSAicGFja2FnZV9xYV9jaGVja19ob3N0X3VzZXIiCitkZWYgcGFja2FnZV9xYV9jaGVja19ob3N0X3VzZXIocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiQ2hlY2sgZm9yIHBhdGhzIG91dHNpZGUgb2YgL2hvbWUgd2hpY2ggYXJlIG93bmVkIGJ5IHRoZSB1c2VyIHJ1bm5pbmcgYml0YmFrZS4iIiIKKworICAgIGlmIG5vdCBvcy5wYXRoLmxleGlzdHMocGF0aCk6CisgICAgICAgIHJldHVybgorCisgICAgZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBob21lID0gb3MucGF0aC5qb2luKGRlc3QsICdob21lJykKKyAgICBpZiBwYXRoID09IGhvbWUgb3IgcGF0aC5zdGFydHN3aXRoKGhvbWUgKyBvcy5zZXApOgorICAgICAgICByZXR1cm4KKworICAgIHRyeToKKyAgICAgICAgc3RhdCA9IG9zLmxzdGF0KHBhdGgpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICBpbXBvcnQgZXJybm8KKyAgICAgICAgaWYgZXhjLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgZWxzZToKKyAgICAgICAgY2hlY2tfdWlkID0gaW50KGQuZ2V0VmFyKCdIT1NUX1VTRVJfVUlEJywgVHJ1ZSkpCisgICAgICAgIGlmIHN0YXQuc3RfdWlkID09IGNoZWNrX3VpZDoKKyAgICAgICAgICAgIG1lc3NhZ2VzWyJob3N0LXVzZXItY29udGFtaW5hdGVkIl0gPSAiJXMgaXMgb3duZWQgYnkgdWlkICVkLCB3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgdXNlciBydW5uaW5nIGJpdGJha2UuIFRoaXMgbWF5IGJlIGR1ZSB0byBob3N0IGNvbnRhbWluYXRpb24iICUgKHBhdGgsIGNoZWNrX3VpZCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGNoZWNrX2dpZCA9IGludChkLmdldFZhcignSE9TVF9VU0VSX0dJRCcsIFRydWUpKQorICAgICAgICBpZiBzdGF0LnN0X2dpZCA9PSBjaGVja19naWQ6CisgICAgICAgICAgICBtZXNzYWdlc1siaG9zdC11c2VyLWNvbnRhbWluYXRlZCJdID0gIiVzIGlzIG93bmVkIGJ5IGdpZCAlZCwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIHVzZXIgcnVubmluZyBiaXRiYWtlLiBUaGlzIG1heSBiZSBkdWUgdG8gaG9zdCBjb250YW1pbmF0aW9uIiAlIChwYXRoLCBjaGVja19naWQpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCisjIFRoZSBQQUNLQUdFIEZVTkMgdG8gc2NhbiBlYWNoIHBhY2thZ2UKK3B5dGhvbiBkb19wYWNrYWdlX3FhICgpIHsKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIGltcG9ydCBvZS5wYWNrYWdlZGF0YQorCisgICAgYmIubm90ZSgiRE8gUEFDS0FHRSBRQSIpCisKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoInJlYWRfc3VicGFja2FnZV9tZXRhZGF0YSIsIGQpCisKKyAgICAjIENoZWNrIG5vbiBVVEYtOCBjaGFyYWN0ZXJzIG9uIHJlY2lwZSdzIG1ldGFkYXRhCisgICAgcGFja2FnZV9xYV9jaGVja19lbmNvZGluZyhbJ0RFU0NSSVBUSU9OJywgJ1NVTU1BUlknLCAnTElDRU5TRScsICdTRUNUSU9OJ10sICd1dGYtOCcsIGQpCisKKyAgICBsb2dkaXIgPSBkLmdldFZhcignVCcsIFRydWUpCisgICAgcGtnID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgICMgQ2hlY2sgdGhlIGNvbXBpbGUgbG9nIGZvciBob3N0IGNvbnRhbWluYXRpb24KKyAgICBjb21waWxlbG9nID0gb3MucGF0aC5qb2luKGxvZ2RpciwibG9nLmRvX2NvbXBpbGUiKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMoY29tcGlsZWxvZyk6CisgICAgICAgIHN0YXRlbWVudCA9ICJncmVwIC1lICdDUk9TUyBDT01QSUxFIEJhZG5lc3M6JyAtZSAnaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbicgJXMgPiAvZGV2L251bGwiICUgY29tcGlsZWxvZworICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoc3RhdGVtZW50LCBzaGVsbD1UcnVlKSA9PSAwOgorICAgICAgICAgICAgbXNnID0gIiVzOiBUaGUgY29tcGlsZSBsb2cgaW5kaWNhdGVzIHRoYXQgaG9zdCBpbmNsdWRlIGFuZC9vciBsaWJyYXJ5IHBhdGhzIHdlcmUgdXNlZC5cbiBcCisgICAgICAgIFBsZWFzZSBjaGVjayB0aGUgbG9nICclcycgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAlIChwa2csIGNvbXBpbGVsb2cpCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiY29tcGlsZS1ob3N0LXBhdGgiLCBtc2csIGQpCisKKyAgICAjIENoZWNrIHRoZSBpbnN0YWxsIGxvZyBmb3IgaG9zdCBjb250YW1pbmF0aW9uCisgICAgaW5zdGFsbGxvZyA9IG9zLnBhdGguam9pbihsb2dkaXIsImxvZy5kb19pbnN0YWxsIikKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKGluc3RhbGxsb2cpOgorICAgICAgICBzdGF0ZW1lbnQgPSAiZ3JlcCAtZSAnQ1JPU1MgQ09NUElMRSBCYWRuZXNzOicgLWUgJ2lzIHVuc2FmZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24nICVzID4gL2Rldi9udWxsIiAlIGluc3RhbGxsb2cKKyAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKHN0YXRlbWVudCwgc2hlbGw9VHJ1ZSkgPT0gMDoKKyAgICAgICAgICAgIG1zZyA9ICIlczogVGhlIGluc3RhbGwgbG9nIGluZGljYXRlcyB0aGF0IGhvc3QgaW5jbHVkZSBhbmQvb3IgbGlicmFyeSBwYXRocyB3ZXJlIHVzZWQuXG4gXAorICAgICAgICBQbGVhc2UgY2hlY2sgdGhlIGxvZyAnJXMnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgJSAocGtnLCBpbnN0YWxsbG9nKQorICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImluc3RhbGwtaG9zdC1wYXRoIiwgbXNnLCBkKQorCisgICAgIyBTY2FuIHRoZSBwYWNrYWdlcy4uLgorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgcGFja2FnZXMgPSBzZXQoKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICcnKS5zcGxpdCgpKQorCisgICAgY3BhdGggPSBvZS5jYWNoZWRwYXRoLkNhY2hlZFBhdGgoKQorICAgIGdsb2JhbCBwa2dmaWxlcworICAgIHBrZ2ZpbGVzID0ge30KKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBwa2dmaWxlc1twa2ddID0gW10KKyAgICAgICAgZm9yIHdhbGtyb290LCBkaXJzLCBmaWxlcyBpbiBjcGF0aC53YWxrKHBrZ2Rlc3QgKyAiLyIgKyBwa2cpOgorICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgcGtnZmlsZXNbcGtnXS5hcHBlbmQod2Fsa3Jvb3QgKyBvcy5zZXAgKyBmaWxlKQorCisgICAgIyBubyBwYWNrYWdlcyBzaG91bGQgYmUgc2Nhbm5lZAorICAgIGlmIG5vdCBwYWNrYWdlczoKKyAgICAgICAgcmV0dXJuCisKKyAgICB0ZXN0bWF0cml4ID0gZC5nZXRWYXJGbGFncygiUUFQQVRIVEVTVCIpCisgICAgaW1wb3J0IHJlCisgICAgIyBUaGUgcGFja2FnZSBuYW1lIG1hdGNoZXMgdGhlIFthLXowLTkuKy1dKyByZWd1bGFyIGV4cHJlc3Npb24KKyAgICBwa2duYW1lX3BhdHRlcm4gPSByZS5jb21waWxlKCJeW2EtejAtOS4rLV0rJCIpCisKKyAgICB0YXNrZGVwZGF0YSA9IGQuZ2V0VmFyKCJCQl9UQVNLREVQREFUQSIsIEZhbHNlKQorICAgIHRhc2tkZXBzID0gc2V0KCkKKyAgICBmb3IgZGVwIGluIHRhc2tkZXBkYXRhOgorICAgICAgICB0YXNrZGVwcy5hZGQodGFza2RlcGRhdGFbZGVwXVswXSkKKworICAgIGcgPSBnbG9iYWxzKCkKKyAgICB3YWxrX3NhbmUgPSBUcnVlCisgICAgcmRlcGVuZHNfc2FuZSA9IFRydWUKKyAgICBkZXBzX3NhbmUgPSBUcnVlCisgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgIHNraXAgPSAoZC5nZXRWYXIoJ0lOU0FORV9TS0lQXycgKyBwYWNrYWdlLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBpZiBza2lwOgorICAgICAgICAgICAgYmIubm90ZSgiUGFja2FnZSAlcyBza2lwcGluZyBRQSB0ZXN0czogJXMiICUgKHBhY2thZ2UsIHN0cihza2lwKSkpCisgICAgICAgIHdhcm5jaGVja3MgPSBbXQorICAgICAgICBmb3IgdyBpbiAoZC5nZXRWYXIoIldBUk5fUUEiLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIHcgaW4gc2tpcDoKKyAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiB3IGluIHRlc3RtYXRyaXggYW5kIHRlc3RtYXRyaXhbd10gaW4gZzoKKyAgICAgICAgICAgICAgICB3YXJuY2hlY2tzLmFwcGVuZChnW3Rlc3RtYXRyaXhbd11dKQorICAgICAgICBlcnJvcmNoZWNrcyA9IFtdCisgICAgICAgIGZvciBlIGluIChkLmdldFZhcigiRVJST1JfUUEiLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGUgaW4gc2tpcDoKKyAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBlIGluIHRlc3RtYXRyaXggYW5kIHRlc3RtYXRyaXhbZV0gaW4gZzoKKyAgICAgICAgICAgICAgICBlcnJvcmNoZWNrcy5hcHBlbmQoZ1t0ZXN0bWF0cml4W2VdXSkKKworICAgICAgICBiYi5ub3RlKCJDaGVja2luZyBQYWNrYWdlOiAlcyIgJSBwYWNrYWdlKQorICAgICAgICAjIENoZWNrIHBhY2thZ2UgbmFtZQorICAgICAgICBpZiBub3QgcGtnbmFtZV9wYXR0ZXJuLm1hdGNoKHBhY2thZ2UpOgorICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBrZ25hbWUiLAorICAgICAgICAgICAgICAgICAgICAiJXMgZG9lc24ndCBtYXRjaCB0aGUgW2EtejAtOS4rLV0rIHJlZ2V4XG4iICUgcGFja2FnZSwgZCkKKworICAgICAgICBwYXRoID0gIiVzLyVzIiAlIChwa2dkZXN0LCBwYWNrYWdlKQorICAgICAgICBpZiBub3QgcGFja2FnZV9xYV93YWxrKHBhdGgsIHdhcm5jaGVja3MsIGVycm9yY2hlY2tzLCBza2lwLCBwYWNrYWdlLCBkKToKKyAgICAgICAgICAgIHdhbGtfc2FuZSAgPSBGYWxzZQorICAgICAgICBpZiBub3QgcGFja2FnZV9xYV9jaGVja19yZGVwZW5kcyhwYWNrYWdlLCBwa2dkZXN0LCBza2lwLCB0YXNrZGVwcywgcGFja2FnZXMsIGQpOgorICAgICAgICAgICAgcmRlcGVuZHNfc2FuZSA9IEZhbHNlCisgICAgICAgIGlmIG5vdCBwYWNrYWdlX3FhX2NoZWNrX2RlcHMocGFja2FnZSwgcGtnZGVzdCwgc2tpcCwgZCk6CisgICAgICAgICAgICBkZXBzX3NhbmUgPSBGYWxzZQorCisKKyAgICBpZiAnbGliZGlyJyBpbiBkLmdldFZhcigiQUxMX1FBIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgcGFja2FnZV9xYV9jaGVja19saWJkaXIoZCkKKworICAgIHFhX3NhbmUgPSBkLmdldFZhcigiUUFfU0FORSIsIFRydWUpCisgICAgaWYgbm90IHdhbGtfc2FuZSBvciBub3QgcmRlcGVuZHNfc2FuZSBvciBub3QgZGVwc19zYW5lIG9yIG5vdCBxYV9zYW5lOgorICAgICAgICBiYi5mYXRhbCgiUUEgcnVuIGZvdW5kIGZhdGFsIGVycm9ycy4gUGxlYXNlIGNvbnNpZGVyIGZpeGluZyB0aGVtLiIpCisgICAgYmIubm90ZSgiRE9ORSB3aXRoIFBBQ0tBR0UgUUEiKQorfQorCitkb19wYWNrYWdlX3FhW3JkZXB0YXNrXSA9ICJkb19wYWNrYWdlZGF0YSIKK2FkZHRhc2sgZG9fcGFja2FnZV9xYSBhZnRlciBkb19wYWNrYWdlZGF0YSBkb19wYWNrYWdlIGJlZm9yZSBkb19idWlsZAorCitTU1RBVEVUQVNLUyArPSAiZG9fcGFja2FnZV9xYSIKK2RvX3BhY2thZ2VfcWFbc3N0YXRlLWlucHV0ZGlyc10gPSAiIgorZG9fcGFja2FnZV9xYVtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiIgorcHl0aG9uIGRvX3BhY2thZ2VfcWFfc2V0c2NlbmUgKCkgeworICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorfQorYWRkdGFzayBkb19wYWNrYWdlX3FhX3NldHNjZW5lCisKK3B5dGhvbiBkb19xYV9zdGFnaW5nKCkgeworICAgIGJiLm5vdGUoIlFBIGNoZWNraW5nIHN0YWdpbmciKQorCisgICAgaWYgbm90IHBhY2thZ2VfcWFfY2hlY2tfc3RhZ2VkKGQuZXhwYW5kKCcke1NZU1JPT1RfREVTVERJUn0ke1NUQUdJTkdfTElCRElSfScpLCBkKToKKyAgICAgICAgYmIuZmF0YWwoIlFBIHN0YWdpbmcgd2FzIGJyb2tlbiBieSB0aGUgcGFja2FnZSBidWlsdCBhYm92ZSIpCit9CisKK3B5dGhvbiBkb19xYV9jb25maWd1cmUoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQ2hlY2sgY29uZmlnLmxvZyBmb3IgY3Jvc3MgY29tcGlsZSBpc3N1ZXMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgIGNvbmZpZ3MgPSBbXQorICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgYmIubm90ZSgiQ2hlY2tpbmcgYXV0b3Rvb2xzIGVudmlyb25tZW50IGZvciBjb21tb24gbWlzY29uZmlndXJhdGlvbiIpCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsod29ya2Rpcik6CisgICAgICAgIHN0YXRlbWVudCA9ICJncmVwIC1lICdDUk9TUyBDT01QSUxFIEJhZG5lc3M6JyAtZSAnaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbicgJXMgPiAvZGV2L251bGwiICUgXAorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocm9vdCwiY29uZmlnLmxvZyIpCisgICAgICAgIGlmICJjb25maWcubG9nIiBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChzdGF0ZW1lbnQsIHNoZWxsPVRydWUpID09IDA6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIiIiVGhpcyBhdXRvY29uZiBsb2cgaW5kaWNhdGVzIGVycm9ycywgaXQgbG9va2VkIGF0IGhvc3QgaW5jbHVkZSBhbmQvb3IgbGlicmFyeSBwYXRocyB3aGlsZSBkZXRlcm1pbmluZyBzeXN0ZW0gY2FwYWJpbGl0aWVzLgorUmVydW4gY29uZmlndXJlIHRhc2sgYWZ0ZXIgZml4aW5nIHRoaXMuIFRoZSBwYXRoIHdhcyAnJXMnIiIiICUgcm9vdCkKKworICAgICAgICBpZiAiY29uZmlndXJlLmFjIiBpbiBmaWxlczoKKyAgICAgICAgICAgIGNvbmZpZ3MuYXBwZW5kKG9zLnBhdGguam9pbihyb290LCJjb25maWd1cmUuYWMiKSkKKyAgICAgICAgaWYgImNvbmZpZ3VyZS5pbiIgaW4gZmlsZXM6CisgICAgICAgICAgICBjb25maWdzLmFwcGVuZChvcy5wYXRoLmpvaW4ocm9vdCwgImNvbmZpZ3VyZS5pbiIpKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBDaGVjayBnZXR0ZXh0IGNvbmZpZ3VyYXRpb24gYW5kIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdAorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgY25mID0gZC5nZXRWYXIoJ0VYVFJBX09FQ09ORicsIFRydWUpIG9yICIiCisgICAgaWYgImdldHRleHQiIG5vdCBpbiBkLmdldFZhcignUCcsIFRydWUpIGFuZCAiZ2NjLXJ1bnRpbWUiIG5vdCBpbiBkLmdldFZhcignUCcsIFRydWUpIGFuZCAiLS1kaXNhYmxlLW5scyIgbm90IGluIGNuZjoKKyAgICAgICAgbWwgPSBkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKSBvciAiIgorICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCk6CisgICAgICAgICAgICBndCA9ICJnZXR0ZXh0LW5hdGl2ZSIKKyAgICAgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGQpOgorICAgICAgICAgICAgZ3QgPSAibmF0aXZlc2RrLWdldHRleHQiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBndCA9ICJ2aXJ0dWFsLyIgKyBtbCArICJnZXR0ZXh0IgorICAgICAgICBkZXBzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBzKGQuZ2V0VmFyKCdERVBFTkRTJywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGlmIGd0IG5vdCBpbiBkZXBzOgorICAgICAgICAgICAgZm9yIGNvbmZpZyBpbiBjb25maWdzOgorICAgICAgICAgICAgICAgIGdudSA9ICJncmVwIFwiXltbOnNwYWNlOl1dKkFNX0dOVV9HRVRURVhUXCIgJXMgPi9kZXYvbnVsbCIgJSBjb25maWcKKyAgICAgICAgICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoZ251LCBzaGVsbD1UcnVlKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiIiIlcyByZXF1aXJlZCBidXQgbm90IGluIERFUEVORFMgZm9yIGZpbGUgJXMuCitNaXNzaW5nIGluaGVyaXQgZ2V0dGV4dD8iIiIgJSAoZ3QsIGNvbmZpZykpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIENoZWNrIGxpY2Vuc2UgdmFyaWFibGVzCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICBpZiBub3QgcGFja2FnZV9xYV9jaGVja19saWNlbnNlKHdvcmtkaXIsIGQpOgorICAgICAgICBiYi5mYXRhbCgiTGljZW5zaW5nIEVycm9yOiBMSUNfRklMRVNfQ0hLU1VNIGRvZXMgbm90IG1hdGNoLCBwbGVhc2UgZml4IikKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQ2hlY2sgdW5yZWNvZ25pc2VkIGNvbmZpZ3VyZSBvcHRpb25zICh3aXRoIGEgd2hpdGUgbGlzdCkKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJhdXRvdG9vbHMiLCBkKToKKyAgICAgICAgYmIubm90ZSgiQ2hlY2tpbmcgY29uZmlndXJlIG91dHB1dCBmb3IgdW5yZWNvZ25pc2VkIG9wdGlvbnMiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmbGFnID0gIldBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiIKKyAgICAgICAgICAgIGxvZyA9IG9zLnBhdGguam9pbihkLmdldFZhcignQicsIFRydWUpLCAnY29uZmlnLmxvZycpCisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2dyZXAnLCAnLUYnLCBmbGFnLCBsb2ddKS5yZXBsYWNlKCcsICcsICcgJykKKyAgICAgICAgICAgIG9wdGlvbnMgPSBzZXQoKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICBvcHRpb25zIHw9IHNldChsaW5lLnBhcnRpdGlvbihmbGFnKVsyXS5zcGxpdCgpKQorICAgICAgICAgICAgd2hpdGVsaXN0ID0gc2V0KGQuZ2V0VmFyKCJVTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1QiLCBUcnVlKS5zcGxpdCgpKQorICAgICAgICAgICAgb3B0aW9ucyAtPSB3aGl0ZWxpc3QKKyAgICAgICAgICAgIGlmIG9wdGlvbnM6CisgICAgICAgICAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICAgICAgICAgIGVycm9yX21zZyA9IHBuICsgIjogY29uZmlndXJlIHdhcyBwYXNzZWQgdW5yZWNvZ25pc2VkIG9wdGlvbnM6ICIgKyAiICIuam9pbihvcHRpb25zKQorICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJ1bmtub3duLWNvbmZpZ3VyZS1vcHRpb24iLCBlcnJvcl9tc2csIGQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICMgQ2hlY2sgaW52YWxpZCBQQUNLQUdFQ09ORklHCisgICAgcGtnY29uZmlnID0gKGQuZ2V0VmFyKCJQQUNLQUdFQ09ORklHIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBwa2djb25maWc6CisgICAgICAgIHBrZ2NvbmZpZ2ZsYWdzID0gZC5nZXRWYXJGbGFncygiUEFDS0FHRUNPTkZJRyIpIG9yIHt9CisgICAgICAgIGZvciBwY29uZmlnIGluIHBrZ2NvbmZpZzoKKyAgICAgICAgICAgIGlmIHBjb25maWcgbm90IGluIHBrZ2NvbmZpZ2ZsYWdzOgorICAgICAgICAgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXM6IGludmFsaWQgUEFDS0FHRUNPTkZJRzogJXMiICUgKHBuLCBwY29uZmlnKQorICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJpbnZhbGlkLXBrZ2NvbmZpZyIsIGVycm9yX21zZywgZCkKK30KKworcHl0aG9uIGRvX3FhX3VucGFjaygpIHsKKyAgICBiYi5ub3RlKCJDaGVja2luZyBoYXMgJHtTfSBiZWVuIGNyZWF0ZWQiKQorCisgICAgc19kaXIgPSBkLmdldFZhcignUycsIFRydWUpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNfZGlyKToKKyAgICAgICAgYmIud2FybignJXM6IHRoZSBkaXJlY3RvcnkgJXMgKCVzKSBwb2ludGVkIHRvIGJ5IHRoZSBTIHZhcmlhYmxlIGRvZXNuXCd0IGV4aXN0IC0gcGxlYXNlIHNldCBTIHdpdGhpbiB0aGUgcmVjaXBlIHRvIHBvaW50IHRvIHdoZXJlIHRoZSBzb3VyY2UgaGFzIGJlZW4gdW5wYWNrZWQgdG8nICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBkLmdldFZhcignUycsIEZhbHNlKSwgc19kaXIpKQorfQorCisjIFRoZSBTdGFnaW5nIEZ1bmMsIHRvIGNoZWNrIGFsbCBzdGFnaW5nCisjYWRkdGFzayBxYV9zdGFnaW5nIGFmdGVyIGRvX3BvcHVsYXRlX3N5c3Jvb3QgYmVmb3JlIGRvX2J1aWxkCitkb19wb3B1bGF0ZV9zeXNyb290W3Bvc3RmdW5jc10gKz0gImRvX3FhX3N0YWdpbmcgIgorCisjIENoZWNrIGJyb2tlbiBjb25maWcubG9nIGZpbGVzLCBmb3IgcGFja2FnZXMgcmVxdWlyaW5nIEdldHRleHQgd2hpY2ggZG9uJ3QKKyMgaGF2ZSBpdCBpbiBERVBFTkRTIGFuZCBmb3IgY29ycmVjdCBMSUNfRklMRVNfQ0hLU1VNCisjYWRkdGFzayBxYV9jb25maWd1cmUgYWZ0ZXIgZG9fY29uZmlndXJlIGJlZm9yZSBkb19jb21waWxlCitkb19jb25maWd1cmVbcG9zdGZ1bmNzXSArPSAiZG9fcWFfY29uZmlndXJlICIKKworIyBDaGVjayBkb2VzIFMgZXhpc3QuCitkb191bnBhY2tbcG9zdGZ1bmNzXSArPSAiZG9fcWFfdW5wYWNrIgorCitweXRob24gKCkgeworICAgIHRlc3RzID0gZC5nZXRWYXIoJ0FMTF9RQScsIFRydWUpLnNwbGl0KCkKKyAgICBpZiAiZGVza3RvcCIgaW4gdGVzdHM6CisgICAgICAgIGQuYXBwZW5kVmFyKCJQQUNLQUdFX0RFUEVORFMiLCAiIGRlc2t0b3AtZmlsZS11dGlscy1uYXRpdmUiKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBDaGVjayB2YXJpb3VzIHZhcmlhYmxlcworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyBDaGVja2luZyAke0ZJTEVTRVhUUkFQQVRIU30KKyAgICBleHRyYXBhdGhzID0gKGQuZ2V0VmFyKCJGSUxFU0VYVFJBUEFUSFMiLCBUcnVlKSBvciAiIikKKyAgICBpZiAnX19kZWZhdWx0JyBub3QgaW4gZXh0cmFwYXRocy5zcGxpdCgiOiIpOgorICAgICAgICBtc2cgPSAiRklMRVNFWFRSQVBBVEhTLXZhcmlhYmxlLCBtdXN0IGFsd2F5cyB1c2UgX3ByZXBlbmQgKG9yIF9hcHBlbmQpXG4iCisgICAgICAgIG1zZyArPSAidHlwZSBvZiBhc3NpZ25tZW50LCBhbmQgZG9uJ3QgZm9yZ2V0IHRoZSBjb2xvbi5cbiIKKyAgICAgICAgbXNnICs9ICJQbGVhc2UgYXNzaWduIGl0IHdpdGggdGhlIGZvcm1hdCBvZjpcbiIKKyAgICAgICAgbXNnICs9ICIgIEZJTEVTRVhUUkFQQVRIU19hcHBlbmQgOj0gXCI6JHtUSElTRElSfS9Zb3VyX0ZpbGVzX1BhdGhcIiBvclxuIgorICAgICAgICBtc2cgKz0gIiAgRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gXCIke1RISVNESVJ9L1lvdXJfRmlsZXNfUGF0aDpcIlxuIgorICAgICAgICBtc2cgKz0gImluIHlvdXIgYmJhcHBlbmQgZmlsZVxuXG4iCisgICAgICAgIG1zZyArPSAiWW91ciBpbmNvcnJlY3QgYXNzaWdubWVudCBpczpcbiIKKyAgICAgICAgbXNnICs9ICIlc1xuIiAlIGV4dHJhcGF0aHMKKyAgICAgICAgYmIud2Fybihtc2cpCisKKyAgICBpZiBkLmdldFZhcignZG9fc3RhZ2UnLCBUcnVlKSBpcyBub3QgTm9uZToKKyAgICAgICAgYmIuZmF0YWwoIkxlZ2FjeSBzdGFnaW5nIGZvdW5kIGZvciAlcyBhcyBpdCBoYXMgYSBkb19zdGFnZSBmdW5jdGlvbi4gVGhpcyB3aWxsIG5lZWQgY29udmVyc2lvbiB0byBhIGRvX2luc3RhbGwgb3Igb2Z0ZW4gc2ltcGx5IHJlbW92YWwgdG8gd29yayB3aXRoIE9FLWNvcmUiICUgZC5nZXRWYXIoIkZJTEUiLCBUcnVlKSkKKworICAgIG92ZXJyaWRlcyA9IGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKS5zcGxpdCgnOicpCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGlmIHBuIGluIG92ZXJyaWRlczoKKyAgICAgICAgbXNnID0gJ1JlY2lwZSAlcyBoYXMgUE4gb2YgIiVzIiB3aGljaCBpcyBpbiBPVkVSUklERVMsIHRoaXMgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2aW91ci4nICUgKGQuZ2V0VmFyKCJGSUxFIiwgVHJ1ZSksIHBuKQorICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicG4tb3ZlcnJpZGVzIiwgbXNnLCBkKQorCisgICAgaXNzdWVzID0gW10KKyAgICBpZiAoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgIGZvciBkZXAgaW4gKGQuZ2V0VmFyKCdRQURFUEVORFMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV9xYScsICdkZXBlbmRzJywgIiAlczpkb19wb3B1bGF0ZV9zeXNyb290IiAlIGRlcCkKKyAgICAgICAgZm9yIHZhciBpbiAnUkRFUEVORFMnLCAnUlJFQ09NTUVORFMnLCAnUlNVR0dFU1RTJywgJ1JDT05GTElDVFMnLCAnUlBST1ZJREVTJywgJ1JSRVBMQUNFUycsICdGSUxFUycsICdwa2dfcHJlaW5zdCcsICdwa2dfcG9zdGluc3QnLCAncGtnX3ByZXJtJywgJ3BrZ19wb3N0cm0nLCAnQUxMT1dfRU1QVFknOgorICAgICAgICAgICAgaWYgZC5nZXRWYXIodmFyLCBGYWxzZSk6CisgICAgICAgICAgICAgICAgaXNzdWVzLmFwcGVuZCh2YXIpCisKKyAgICAgICAgZmFrZXJvb3RfdGVzdHMgPSBkLmdldFZhcignRkFLRVJPT1RfUUEnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgIGlmIHNldCh0ZXN0cykgJiBzZXQoZmFrZXJvb3RfdGVzdHMpOgorICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19wYWNrYWdlX3FhJywgJ2Zha2Vyb290JywgJzEnKQorICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3FhJywgJ2RlcGVuZHMnLCAnIHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZV9xYScsICdyZGVwdGFzaycsICcnKQorICAgIGZvciBpIGluIGlzc3VlczoKKyAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBrZ3ZhcmNoZWNrIiwgIiVzOiBWYXJpYWJsZSAlcyBpcyBzZXQgYXMgbm90IGJlaW5nIHBhY2thZ2Ugc3BlY2lmaWMsIHBsZWFzZSBmaXggdGhpcy4iICUgKGQuZ2V0VmFyKCJGSUxFIiwgVHJ1ZSksIGkpLCBkKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLWFyY2guYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1hcmNoLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjExYjcyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1hcmNoLmJiY2xhc3MKQEAgLTAsMCArMSw1OSBAQAorIworIyBzZXQgdGhlIEFSQ0ggZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIGtlcm5lbCBjb21waWxhdGlvbiAoaW5jbHVkaW5nCisjIG1vZHVsZXMpLiByZXR1cm4gdmFsdWUgbXVzdCBtYXRjaCBvbmUgb2YgdGhlIGFyY2hpdGVjdHVyZSBkaXJlY3RvcmllcworIyBpbiB0aGUga2VybmVsIHNvdXJjZSAiYXJjaCIgZGlyZWN0b3J5CisjCisKK3ZhbGlkX2FyY2hzID0gImFscGhhIGNyaXMgaWE2NCBcCisgICAgICAgICAgICAgICBpMzg2IHg4NiBcCisgICAgICAgICAgICAgICBtNjhrbm9tbXUgbTY4ayBwcGMgcG93ZXJwYyBwb3dlcnBjNjQgcHBjNjQgIFwKKyAgICAgICAgICAgICAgIHNwYXJjIHNwYXJjNjQgXAorICAgICAgICAgICAgICAgYXJtIGFhcmNoNjQgXAorICAgICAgICAgICAgICAgbTMyciBtaXBzIFwKKyAgICAgICAgICAgICAgIHNoIHNoNjQgdW0gaDgzMDAgICBcCisgICAgICAgICAgICAgICBwYXJpc2MgczM5MCAgdjg1MCBcCisgICAgICAgICAgICAgICBhdnIzMiBibGFja2ZpbiBcCisgICAgICAgICAgICAgICBtaWNyb2JsYXplIgorCitkZWYgbWFwX2tlcm5lbF9hcmNoKGEsIGQpOgorICAgIGltcG9ydCByZQorCisgICAgdmFsaWRfYXJjaHMgPSBkLmdldFZhcigndmFsaWRfYXJjaHMnLCBUcnVlKS5zcGxpdCgpCisKKyAgICBpZiAgIHJlLm1hdGNoKCcoaS44NnxhdGhsb258eDg2LjY0KSQnLCBhKTogIHJldHVybiAneDg2JworICAgIGVsaWYgcmUubWF0Y2goJ2FybWViJCcsIGEpOiAgICAgICAgICAgICAgICAgcmV0dXJuICdhcm0nCisgICAgZWxpZiByZS5tYXRjaCgnYWFyY2g2NCQnLCBhKTogICAgICAgICAgICAgICByZXR1cm4gJ2FybTY0JworICAgIGVsaWYgcmUubWF0Y2goJ2FhcmNoNjRfYmUkJywgYSk6ICAgICAgICAgICAgcmV0dXJuICdhcm02NCcKKyAgICBlbGlmIHJlLm1hdGNoKCdtaXBzKGVsfDY0fDY0ZWwpJCcsIGEpOiAgICAgIHJldHVybiAnbWlwcycKKyAgICBlbGlmIHJlLm1hdGNoKCdwKHBjfG93ZXJwYykofDY0KScsIGEpOiAgICAgIHJldHVybiAncG93ZXJwYycKKyAgICBlbGlmIHJlLm1hdGNoKCdzaCgzfDQpJCcsIGEpOiAgICAgICAgICAgICAgIHJldHVybiAnc2gnCisgICAgZWxpZiByZS5tYXRjaCgnYmZpbicsIGEpOiAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2JsYWNrZmluJworICAgIGVsaWYgcmUubWF0Y2goJ21pY3JvYmxhemVlW2JsXScsIGEpOiAgICAgICAgcmV0dXJuICdtaWNyb2JsYXplJworICAgIGVsaWYgYSBpbiB2YWxpZF9hcmNoczogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEKKyAgICBlbHNlOgorICAgICAgICBiYi5lcnJvcigiY2Fubm90IG1hcCAnJXMnIHRvIGEgbGludXgga2VybmVsIGFyY2hpdGVjdHVyZSIgJSBhKQorCitleHBvcnQgQVJDSCA9ICIke0BtYXBfa2VybmVsX2FyY2goZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSksIGQpfSIKKworZGVmIG1hcF91Ym9vdF9hcmNoKGEsIGQpOgorICAgIGltcG9ydCByZQorCisgICAgaWYgICByZS5tYXRjaCgncChwY3xvd2VycGMpKHw2NCknLCBhKTogcmV0dXJuICdwcGMnCisgICAgZWxpZiByZS5tYXRjaCgnaS44NiQnLCBhKTogcmV0dXJuICd4ODYnCisgICAgcmV0dXJuIGEKKworZXhwb3J0IFVCT09UX0FSQ0ggPSAiJHtAbWFwX3Vib290X2FyY2goZC5nZXRWYXIoJ0FSQ0gnLCBUcnVlKSwgZCl9IgorCisjIFNldCBUQVJHRVRfPz9fS0VSTkVMX0FSQ0ggaW4gdGhlIG1hY2hpbmUgLmNvbmYgdG8gc2V0IGFyY2hpdGVjdHVyZQorIyBzcGVjaWZpYyBvcHRpb25zIG5lY2Vzc2FyeSBmb3IgYnVpbGRpbmcgdGhlIGtlcm5lbCBhbmQgbW9kdWxlcy4KK1RBUkdFVF9DQ19LRVJORUxfQVJDSCA/PSAiIgorSE9TVF9DQ19LRVJORUxfQVJDSCA/PSAiJHtUQVJHRVRfQ0NfS0VSTkVMX0FSQ0h9IgorVEFSR0VUX0xEX0tFUk5FTF9BUkNIID89ICIiCitIT1NUX0xEX0tFUk5FTF9BUkNIID89ICIke1RBUkdFVF9MRF9LRVJORUxfQVJDSH0iCitUQVJHRVRfQVJfS0VSTkVMX0FSQ0ggPz0gIiIKK0hPU1RfQVJfS0VSTkVMX0FSQ0ggPz0gIiR7VEFSR0VUX0FSX0tFUk5FTF9BUkNIfSIKKworS0VSTkVMX0NDID0gIiR7Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9Z2NjICR7SE9TVF9DQ19LRVJORUxfQVJDSH0gLWZ1c2UtbGQ9YmZkIgorS0VSTkVMX0xEID0gIiR7Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9bGQuYmZkICR7SE9TVF9MRF9LRVJORUxfQVJDSH0iCitLRVJORUxfQVIgPSAiJHtDQ0FDSEV9JHtIT1NUX1BSRUZJWH1hciAke0hPU1RfQVJfS0VSTkVMX0FSQ0h9IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtZml0aW1hZ2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1maXRpbWFnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNTZhNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtZml0aW1hZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDIzNCBAQAoraW5oZXJpdCBrZXJuZWwtdWJvb3QKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBrZXJuZWx0eXBlID0gZC5nZXRWYXIoJ0tFUk5FTF9JTUFHRVRZUEUnLCBUcnVlKQorICAgIGlmIGtlcm5lbHR5cGUgPT0gJ2ZpdEltYWdlJzoKKyAgICAgICAgZGVwZW5kcyA9IGQuZ2V0VmFyKCJERVBFTkRTIiwgVHJ1ZSkKKyAgICAgICAgZGVwZW5kcyA9ICIlcyB1LWJvb3QtbWtpbWFnZS1uYXRpdmUgZHRjLW5hdGl2ZSIgJSBkZXBlbmRzCisgICAgICAgIGQuc2V0VmFyKCJERVBFTkRTIiwgZGVwZW5kcykKKworCSMgT3ZlcnJpZGUgS0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRSB2YXJpYWJsZSwgd2hpY2ggaXMgaW50ZXJuYWwKKwkjIHRvIGtlcm5lbC5iYmNsYXNzIC4gV2UgaGF2ZSB0byBvdmVycmlkZSBpdCwgc2luY2Ugd2UgcGFjayB6SW1hZ2UKKwkjIChhdCBsZWFzdCBmb3Igbm93KSBpbnRvIHRoZSBmaXRJbWFnZSAuCisgICAgICAgIGQuc2V0VmFyKCJLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFIiwgInpJbWFnZSIpCisKKyAgICAgICAgaW1hZ2UgPSBkLmdldFZhcignSU5JVFJBTUZTX0lNQUdFJywgVHJ1ZSkKKyAgICAgICAgaWYgaW1hZ2U6CisgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2Fzc2VtYmxlX2ZpdGltYWdlJywgJ2RlcGVuZHMnLCAnICR7SU5JVFJBTUZTX0lNQUdFfTpkb19yb290ZnMnKQorfQorCisjCisjIEVtaXQgdGhlIGZpdEltYWdlIElUUyBoZWFkZXIKKyMKK2ZpdGltYWdlX2VtaXRfZml0X2hlYWRlcigpIHsKKwljYXQgPDwgRU9GID4+IGZpdC1pbWFnZS5pdHMKKy9kdHMtdjEvOworCisvIHsKKyAgICAgICAgZGVzY3JpcHRpb24gPSAiVS1Cb290IGZpdEltYWdlIGZvciAke0RJU1RST19OQU1FfS8ke1BWfS8ke01BQ0hJTkV9IjsKKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CitFT0YKK30KKworIworIyBFbWl0IHRoZSBmaXRJbWFnZSBzZWN0aW9uIGJpdHMKKyMKKyMgJDEgLi4uIFNlY3Rpb24gYml0IHR5cGU6IGltYWdlc3RhcnQgLSBpbWFnZSBzZWN0aW9uIHN0YXJ0CisjICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mc3RhcnQgIC0gY29uZmlndXJhdGlvbiBzZWN0aW9uIHN0YXJ0CisjICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0ZW5kICAgIC0gc2VjdGlvbiBlbmQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIGZpdGVuZCAgICAgLSBmaXRpbWFnZSBlbmQKKyMKK2ZpdGltYWdlX2VtaXRfc2VjdGlvbl9tYWludCgpIHsKKwljYXNlICQxIGluCisJaW1hZ2VzdGFydCkKKwkJY2F0IDw8IEVPRiA+PiBmaXQtaW1hZ2UuaXRzCisKKyAgICAgICAgaW1hZ2VzIHsKK0VPRgorCTs7CisJY29uZnN0YXJ0KQorCQljYXQgPDwgRU9GID4+IGZpdC1pbWFnZS5pdHMKKworICAgICAgICBjb25maWd1cmF0aW9ucyB7CitFT0YKKwk7OworCXNlY3RlbmQpCisJCWNhdCA8PCBFT0YgPj4gZml0LWltYWdlLml0cworCX07CitFT0YKKwk7OworCWZpdGVuZCkKKwkJY2F0IDw8IEVPRiA+PiBmaXQtaW1hZ2UuaXRzCit9OworRU9GCisJOzsKKwllc2FjCit9CisKKyMKKyMgRW1pdCB0aGUgZml0SW1hZ2UgSVRTIGtlcm5lbCBzZWN0aW9uCisjCisjICQxIC4uLiBJbWFnZSBjb3VudGVyCisjICQyIC4uLiBQYXRoIHRvIGtlcm5lbCBpbWFnZQorIyAkMyAuLi4gQ29tcHJlc3Npb24gdHlwZQorZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2tlcm5lbCgpIHsKKworCWtlcm5lbF9jc3VtPSJzaGExIgorCisJRU5UUllQT0lOVD0ke1VCT09UX0VOVFJZUE9JTlR9CisJaWYgdGVzdCAtbiAiJHtVQk9PVF9FTlRSWVNZTUJPTH0iOyB0aGVuCisJCUVOVFJZUE9JTlQ9YCR7SE9TVF9QUkVGSVh9bm0gJHtTfS92bWxpbnV4IHwgXAorCQkJYXdrICckMz09IiR7VUJPT1RfRU5UUllTWU1CT0x9IiB7cHJpbnQgJDF9J2AKKwlmaQorCisJY2F0IDw8IEVPRiA+PiBmaXQtaW1hZ2UuaXRzCisgICAgICAgICAgICAgICAga2VybmVsQCR7MX0geworICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiTGludXgga2VybmVsIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSAvaW5jYmluLygiJHsyfSIpOworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJrZXJuZWwiOworICAgICAgICAgICAgICAgICAgICAgICAgYXJjaCA9ICIke1VCT09UX0FSQ0h9IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zID0gImxpbnV4IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uID0gIiR7M30iOworICAgICAgICAgICAgICAgICAgICAgICAgbG9hZCA9IDwke1VCT09UX0xPQURBRERSRVNTfT47CisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IDwke0VOVFJZUE9JTlR9PjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hAMSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZ28gPSAiJHtrZXJuZWxfY3N1bX0iOworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9OworRU9GCit9CisKKyMKKyMgRW1pdCB0aGUgZml0SW1hZ2UgSVRTIERUQiBzZWN0aW9uCisjCisjICQxIC4uLiBJbWFnZSBjb3VudGVyCisjICQyIC4uLiBQYXRoIHRvIERUQiBpbWFnZQorZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2R0YigpIHsKKworCWR0Yl9jc3VtPSJzaGExIgorCisJY2F0IDw8IEVPRiA+PiBmaXQtaW1hZ2UuaXRzCisgICAgICAgICAgICAgICAgZmR0QCR7MX0geworICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiRmxhdHRlbmVkIERldmljZSBUcmVlIGJsb2IiOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IC9pbmNiaW4vKCIkezJ9Iik7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gImZsYXRfZHQiOworICAgICAgICAgICAgICAgICAgICAgICAgYXJjaCA9ICIke1VCT09UX0FSQ0h9IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uID0gIm5vbmUiOworICAgICAgICAgICAgICAgICAgICAgICAgaGFzaEAxIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnbyA9ICIke2R0Yl9jc3VtfSI7CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH07CitFT0YKK30KKworIworIyBFbWl0IHRoZSBmaXRJbWFnZSBJVFMgY29uZmlndXJhdGlvbiBzZWN0aW9uCisjCisjICQxIC4uLiBMaW51eCBrZXJuZWwgSUQKKyMgJDIgLi4uIERUQiBpbWFnZSBJRAorZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2NvbmZpZygpIHsKKworCWNvbmZfY3N1bT0ic2hhMSIKKworCSMgVGVzdCBpZiB3ZSBoYXZlIGFueSBEVEJzIGF0IGFsbAorCWlmIFsgLXogIiR7Mn0iIF0gOyB0aGVuCisJCWNvbmZfZGVzYz0iQm9vdCBMaW51eCBrZXJuZWwiCisJCWZkdF9saW5lPSIiCisJZWxzZQorCQljb25mX2Rlc2M9IkJvb3QgTGludXgga2VybmVsIHdpdGggRkRUIGJsb2IiCisJCWZkdF9saW5lPSJmZHQgPSBcImZkdEAkezJ9XCI7IgorCWZpCisJa2VybmVsX2xpbmU9Imtlcm5lbCA9IFwia2VybmVsQCR7MX1cIjsiCisKKwljYXQgPDwgRU9GID4+IGZpdC1pbWFnZS5pdHMKKyAgICAgICAgICAgICAgICBkZWZhdWx0ID0gImNvbmZAMSI7CisgICAgICAgICAgICAgICAgY29uZkAxIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gIiR7Y29uZl9kZXNjfSI7CisJCQkke2tlcm5lbF9saW5lfQorCQkJJHtmZHRfbGluZX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hAMSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZ28gPSAiJHtjb25mX2NzdW19IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfTsKK0VPRgorfQorCitkb19hc3NlbWJsZV9maXRpbWFnZSgpIHsKKwlpZiB0ZXN0ICJ4JHtLRVJORUxfSU1BR0VUWVBFfSIgPSAieGZpdEltYWdlIiA7IHRoZW4KKwkJa2VybmVsY291bnQ9MQorCQlkdGJjb3VudD0iIgorCQlybSAtZiBmaXQtaW1hZ2UuaXRzCisKKwkJZml0aW1hZ2VfZW1pdF9maXRfaGVhZGVyCisKKwkJIworCQkjIFN0ZXAgMTogUHJlcGFyZSBhIGtlcm5lbCBpbWFnZSBzZWN0aW9uLgorCQkjCisJCWZpdGltYWdlX2VtaXRfc2VjdGlvbl9tYWludCBpbWFnZXN0YXJ0CisKKwkJdWJvb3RfcHJlcF9raW1hZ2UKKwkJZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2tlcm5lbCAiJHtrZXJuZWxjb3VudH0iIGxpbnV4LmJpbiAiJHtsaW51eF9jb21wfSIKKworCQkjCisJCSMgU3RlcCAyOiBQcmVwYXJlIGEgRFRCIGltYWdlIHNlY3Rpb24KKwkJIworCQlpZiB0ZXN0IC1uICIke0tFUk5FTF9ERVZJQ0VUUkVFfSI7IHRoZW4KKwkJCWR0YmNvdW50PTEKKwkJCWZvciBEVEIgaW4gJHtLRVJORUxfREVWSUNFVFJFRX07IGRvCisJCQkJaWYgZWNobyAke0RUQn0gfCBncmVwIC1xICcvZHRzLyc7IHRoZW4KKwkJCQkJYmJ3YXJuICIke0RUQn0gY29udGFpbnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgdGhlIGR0cyBmaWxlLCBidXQgb25seSB0aGUgZHRiIG5hbWUgc2hvdWxkIGJlIHVzZWQuIgorCQkJCQlEVEI9YGJhc2VuYW1lICR7RFRCfSB8IHNlZCAncyxcLmR0cyQsLmR0YixnJ2AKKwkJCQlmaQorCQkJCURUQl9QQVRIPSJhcmNoLyR7QVJDSH0vYm9vdC9kdHMvJHtEVEJ9IgorCQkJCWlmIFsgISAtZSAiJHtEVEJfUEFUSH0iIF07IHRoZW4KKwkJCQkJRFRCX1BBVEg9ImFyY2gvJHtBUkNIfS9ib290LyR7RFRCfSIKKwkJCQlmaQorCisJCQkJZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2R0YiAke2R0YmNvdW50fSAke0RUQl9QQVRIfQorCQkJCWR0YmNvdW50PWBleHByICR7ZHRiY291bnR9ICsgMWAKKwkJCWRvbmUKKwkJZmkKKworCQlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fbWFpbnQgc2VjdGVuZAorCisJCSMgRm9yY2UgdGhlIGZpcnN0IEtlcm5lbCBhbmQgRFRCIGluIHRoZSBkZWZhdWx0IGNvbmZpZworCQlrZXJuZWxjb3VudD0xCisJCWR0YmNvdW50PTEKKworCQkjCisJCSMgU3RlcCAzOiBQcmVwYXJlIGEgY29uZmlndXJhdGlvbnMgc2VjdGlvbgorCQkjCisJCWZpdGltYWdlX2VtaXRfc2VjdGlvbl9tYWludCBjb25mc3RhcnQKKworCQlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fY29uZmlnICR7a2VybmVsY291bnR9ICR7ZHRiY291bnR9CisKKwkJZml0aW1hZ2VfZW1pdF9zZWN0aW9uX21haW50IHNlY3RlbmQKKworCQlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fbWFpbnQgZml0ZW5kCisKKwkJIworCQkjIFN0ZXAgNDogQXNzZW1ibGUgdGhlIGltYWdlCisJCSMKKwkJdWJvb3QtbWtpbWFnZSAtZiBmaXQtaW1hZ2UuaXRzIGFyY2gvJHtBUkNIfS9ib290L2ZpdEltYWdlCisJZmkKK30KKworYWRkdGFzayBhc3NlbWJsZV9maXRpbWFnZSBiZWZvcmUgZG9faW5zdGFsbCBhZnRlciBkb19jb21waWxlCisKK2tlcm5lbF9kb19kZXBsb3lfYXBwZW5kKCkgeworCSMgVXBkYXRlIGRlcGxveSBkaXJlY3RvcnkKKwlpZiB0ZXN0ICJ4JHtLRVJORUxfSU1BR0VUWVBFfSIgPSAieGZpdEltYWdlIiA7IHRoZW4KKwkJY2QgJHtCfQorCQllY2hvICJDb3B5aW5nIGZpdC1pbWFnZS5pdHMgc291cmNlIGZpbGUuLi4iCisJCWl0c19iYXNlX25hbWU9IiR7S0VSTkVMX0lNQUdFVFlQRX0taXRzLSR7UFZ9LSR7UFJ9LSR7TUFDSElORX0tJHtEQVRFVElNRX0iCisJCWl0c19zeW1saW5rX25hbWU9JHtLRVJORUxfSU1BR0VUWVBFfS1pdHMtJHtNQUNISU5FfQorCQlpbnN0YWxsIC1tIDA2NDQgZml0LWltYWdlLml0cyAke0RFUExPWURJUn0vJHtpdHNfYmFzZV9uYW1lfS5pdHMKKwkJbGludXhfYmluX2Jhc2VfbmFtZT0iJHtLRVJORUxfSU1BR0VUWVBFfS1saW51eC5iaW4tJHtQVn0tJHtQUn0tJHtNQUNISU5FfS0ke0RBVEVUSU1FfSIKKwkJbGludXhfYmluX3N5bWxpbmtfbmFtZT0ke0tFUk5FTF9JTUFHRVRZUEV9LWxpbnV4LmJpbi0ke01BQ0hJTkV9CisJCWluc3RhbGwgLW0gMDY0NCBsaW51eC5iaW4gJHtERVBMT1lESVJ9LyR7bGludXhfYmluX2Jhc2VfbmFtZX0uYmluCisKKwkJY2QgJHtERVBMT1lESVJ9CisJCWxuIC1zZiAke2l0c19iYXNlX25hbWV9Lml0cyAke2l0c19zeW1saW5rX25hbWV9Lml0cworCQlsbiAtc2YgJHtsaW51eF9iaW5fYmFzZV9uYW1lfS5iaW4gJHtsaW51eF9iaW5fc3ltbGlua19uYW1lfS5iaW4KKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLWdydWIuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1ncnViLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYzZjQ4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1ncnViLmJiY2xhc3MKQEAgLTAsMCArMSw5MSBAQAorIworIyBXaGlsZSBpbnN0YWxsaW5nIGEgcnBtIHRvIHVwZGF0ZSBrZXJuZWwgb24gYSBkZXBsb3llZCB0YXJnZXQsIGl0IHdpbGwgdXBkYXRlCisjIHRoZSBib290IGFyZWEgYW5kIHRoZSBib290IG1lbnUgd2l0aCB0aGUga2VybmVsIGFzIHRoZSBwcmlvcml0eSBidXQgYWxsb3cKKyMgeW91IHRvIGZhbGwgYmFjayB0byB0aGUgb3JpZ2luYWwga2VybmVsIGFzIHdlbGwuCisjCisjIC0gSW4ga2VybmVsLWltYWdlJ3MgcHJlaW5zdGFsbCBzY3JpcHRsZXQsIGl0IGJhY2tzIHVwIG9yaWdpbmFsIGtlcm5lbCB0byBhdm9pZAorIyAgIHByb2JhYmxlIGNvbmZsaWN0aW9uIHdpdGggdGhlIG5ldyBvbmUuCisjCisjIC0gSW4ga2VybmVsLWltYWdlJ3MgcG9zdGluc3RhbGwgc2NyaXB0bGV0LCBpdCBtb2RpZmllcyBncnViJ3MgY29uZmlnIGZpbGUgdG8KKyMgICB1cGRhdGVzIHRoZSBuZXcga2VybmVsIGFzIHRoZSBib290IHByaW9yaXR5LgorIworCitwa2dfcHJlaW5zdF9rZXJuZWwtaW1hZ2VfYXBwZW5kICgpIHsKKwkjIFBhcnNpbmcgY29uZmxpY3Rpb24KKwlbIC1mICIkRC9ib290L2dydWIvbWVudS5saXN0IiBdICYmIGdydWJjZmc9IiREL2Jvb3QvZ3J1Yi9tZW51Lmxpc3QiCisJWyAtZiAiJEQvYm9vdC9ncnViL2dydWIuY2ZnIiBdICYmIGdydWJjZmc9IiREL2Jvb3QvZ3J1Yi9ncnViLmNmZyIKKwlpZiBbIC1uICIkZ3J1YmNmZyIgXTsgdGhlbgorCQkjIERlcmVmZXJlbmNlIHN5bWxpbmsgdG8gYXZvaWQgY29uZmxpY3Rpb24gd2l0aCBuZXcga2VybmVsIG5hbWUuCisJCWlmIGdyZXAgLXEgIi8ke0tFUk5FTF9JTUFHRVRZUEV9IFwrcm9vdD0iICRncnViY2ZnOyB0aGVuCisJCQlpZiBbIC1MICIkRC9ib290LyR7S0VSTkVMX0lNQUdFVFlQRX0iIF07IHRoZW4KKwkJCQlraW1hZ2U9YHJlYWxwYXRoICREL2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfSAyPi9kZXYvbnVsbGAKKwkJCQlpZiBbIC1mICIkRCRraW1hZ2UiIF07IHRoZW4KKwkJCQkJc2VkIC1pICJzOiR7S0VSTkVMX0lNQUdFVFlQRX0gXCtyb290PToke2tpbWFnZSMjKi99IHJvb3Q9OiIgJGdydWJjZmcKKwkJCQlmaQorCQkJZmkKKwkJZmkKKworCQkjIFJlbmFtZSBvbGQga2VybmVsIGlmIGl0IGNvbmZsaWN0cyB3aXRoIG5ldyBrZXJuZWwgbmFtZS4KKwkJaWYgZ3JlcCAtcSAiLyR7S0VSTkVMX0lNQUdFVFlQRX0tJHtLRVJORUxfVkVSU0lPTn0gXCtyb290PSIgJGdydWJjZmc7IHRoZW4KKwkJCWlmIFsgLWYgIiREL2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfSIgXTsgdGhlbgorCQkJCXRpbWVzdGFtcD1gZGF0ZSArJXNgCisJCQkJa2ltYWdlPSIkRC9ib290LyR7S0VSTkVMX0lNQUdFVFlQRX0tJHtLRVJORUxfVkVSU0lPTn0tJHRpbWVzdGFtcC1iYWNrIgorCQkJCXNlZCAtaSAiczoke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059IFwrcm9vdD06JHtraW1hZ2UjIyovfSByb290PToiICRncnViY2ZnCisJCQkJbXYgIiREL2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfSIgIiRraW1hZ2UiCisJCQlmaQorCQlmaQorCWZpCit9CisKK3BrZ19wb3N0aW5zdF9rZXJuZWwtaW1hZ2VfcHJlcGVuZCAoKSB7CisJZ2V0X25ld19ncnViX2NmZygpIHsKKwkJZ3J1YmNmZz0iJDEiCisJCW9sZF9pbWFnZT0iJDIiCisJCXRpdGxlPSJVcGRhdGUgJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfS0ke1BWfSIKKwkJaWYgWyAiJHtncnViY2ZnIyMqL30iID0gImdydWIuY2ZnIiBdOyB0aGVuCisJCQlyb290ZnM9YGdyZXAgIiAqbGludXggXCtbXiBdXCsgXCtyb290PSIgJGdydWJjZmcgLW0gMSB8IFwKKwkJCQkgc2VkICJzIyR7b2xkX2ltYWdlfSMke29sZF9pbWFnZSUvKn0vJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfSMiYAorCisJCQllY2hvICJtZW51ZW50cnkgXCIkdGl0bGVcIiB7IgorCQkJZWNobyAiICAgIHNldCByb290PShoZDAsMSkiCisJCQllY2hvICIkcm9vdGZzIgorCQkJZWNobyAifSIKKwkJZWxpZiBbICIke2dydWJjZmcjIyovfSIgPSAibWVudS5saXN0IiBdOyB0aGVuCisJCQlyb290ZnM9YGdyZXAgImtlcm5lbCBcK1teIF1cKyBcK3Jvb3Q9IiAkZ3J1YmNmZyAtbSAxIHwgXAorCQkJCSBzZWQgInMjJHtvbGRfaW1hZ2V9IyR7b2xkX2ltYWdlJS8qfS8ke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059IyJgCisKKwkJCWVjaG8gImRlZmF1bHQgMCIKKwkJCWVjaG8gInRpbWVvdXQgMzAiCisJCQllY2hvICJ0aXRsZSAkdGl0bGUiCisJCQllY2hvICJyb290ICAoaGQwLDApIgorCQkJZWNobyAiJHJvb3RmcyIKKwkJZmkKKwl9CisKKwlnZXRfb2xkX2dydWJfY2ZnKCkgeworCQlncnViY2ZnPSIkMSIKKwkJaWYgWyAiJHtncnViY2ZnIyMqL30iID0gImdydWIuY2ZnIiBdOyB0aGVuCisJCQljYXQgIiRncnViY2ZnIgorCQllbGlmIFsgIiR7Z3J1YmNmZyMjKi99IiA9ICJtZW51Lmxpc3QiIF07IHRoZW4KKwkJCXNlZCAtZSAnL15kZWZhdWx0L2QnIC1lICcvXnRpbWVvdXQvZCcgIiRncnViY2ZnIgorCQlmaQorCX0KKworCWlmIFsgLWYgIiREL2Jvb3QvZ3J1Yi9ncnViLmNmZyIgXTsgdGhlbgorCQlncnViY2ZnPSIkRC9ib290L2dydWIvZ3J1Yi5jZmciCisJCW9sZF9pbWFnZT1gZ3JlcCAnICpsaW51eCBcK1teIF1cKyBcK3Jvb3Q9JyAtbSAxICIkZ3J1YmNmZyIgfCBhd2sgJ3twcmludCAkMn0nYAorCWVsaWYgWyAtZiAiJEQvYm9vdC9ncnViL21lbnUubGlzdCIgXTsgdGhlbgorCQlncnViY2ZnPSIkRC9ib290L2dydWIvbWVudS5saXN0IgorCQlvbGRfaW1hZ2U9YGdyZXAgJ15rZXJuZWwgXCtbXiBdXCsgXCtyb290PScgLW0gMSAiJGdydWJjZmciIHwgYXdrICd7cHJpbnQgJDJ9J2AKKwlmaQorCisJIyBEb24ndCB1cGRhdGUgZ3J1YmNmZyBhdCBmaXJzdCBpbnN0YWxsIHdoaWxlIG9sZCBiekltYWdlIGRvZXNuJ3QgZXhpc3QuCisJaWYgWyAtZiAiJEQvYm9vdC8ke29sZF9pbWFnZSMjKi99IiBdOyB0aGVuCisJCWdydWJjZmd0bXA9IiRncnViY2ZnLnRtcCIKKwkJZ2V0X25ld19ncnViX2NmZyAiJGdydWJjZmciICIkb2xkX2ltYWdlIiAgPiAkZ3J1YmNmZ3RtcAorCQlnZXRfb2xkX2dydWJfY2ZnICIkZ3J1YmNmZyIgPj4gJGdydWJjZmd0bXAKKwkJbXYgJGdydWJjZmd0bXAgJGdydWJjZmcKKwkJZWNobyAiQ2F1dGlvbiEgVXBkYXRlIGtlcm5lbCBtYXkgYWZmZWN0IGtlcm5lbC1tb2R1bGUhIgorCWZpCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1tb2R1bGUtc3BsaXQuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1tb2R1bGUtc3BsaXQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWE3MGU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLW1vZHVsZS1zcGxpdC5iYmNsYXNzCkBAIC0wLDAgKzEsMjAzIEBACitwa2dfcG9zdGluc3RfbW9kdWxlcyAoKSB7CitpZiBbIC16ICIkRCIgXTsgdGhlbgorCWRlcG1vZCAtYSAke0tFUk5FTF9WRVJTSU9OfQorZWxzZQorCSMgaW1hZ2UuYmJjbGFzcyB3aWxsIGNhbGwgZGVwbW9kd3JhcHBlciBhZnRlciBldmVyeXRoaW5nIGlzIGluc3RhbGxlZCwKKwkjIG5vIG5lZWQgdG8gZG8gaXQgaGVyZSBhcyB3ZWxsCisJOgorZmkKK30KKworcGtnX3Bvc3RybV9tb2R1bGVzICgpIHsKK2lmIFsgLXogIiREIiBdOyB0aGVuCisJZGVwbW9kIC1hICR7S0VSTkVMX1ZFUlNJT059CitlbHNlCisJZGVwbW9kd3JhcHBlciAtYSAtYiAkRCAke0tFUk5FTF9WRVJTSU9OfQorZmkKK30KKworYXV0b2xvYWRfcG9zdGluc3RfZnJhZ21lbnQoKSB7CitpZiBbIHgiJEQiID0gIngiIF07IHRoZW4KKwltb2Rwcm9iZSAlcyB8fCB0cnVlCitmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L21vZHVsZXMtbG9hZC5kLyAke0R9JHtzeXNjb25mZGlyfS9tb2Rwcm9iZS5kLworfQorCitQQUNLQUdFU1BMSVRGVU5DU19wcmVwZW5kID0gInNwbGl0X2tlcm5lbF9tb2R1bGVfcGFja2FnZXMgIgorCitLRVJORUxfTU9EVUxFU19NRVRBX1BBQ0tBR0UgPz0gImtlcm5lbC1tb2R1bGVzIgorCitweXRob24gc3BsaXRfa2VybmVsX21vZHVsZV9wYWNrYWdlcyAoKSB7CisgICAgaW1wb3J0IHJlCisKKyAgICBtb2RpbmZvZXhwID0gcmUuY29tcGlsZSgiKFtePV0rKT0oLiopIikKKyAgICBrZXJ2ZXJyZXhwID0gcmUuY29tcGlsZSgnXiguKi1oaC4qKVtcLlwrXS4qJCcpCisgICAgZGVwbW9kcGF0MCA9IHJlLmNvbXBpbGUoIl4oLipcLms/byk6Li4qJCIpCisgICAgZGVwbW9kcGF0MSA9IHJlLmNvbXBpbGUoIl4oLipcLms/byk6XHMqKC4qXC5rP28pXHMqJCIpCisgICAgZGVwbW9kcGF0MiA9IHJlLmNvbXBpbGUoIl4oLipcLms/byk6XHMqKC4qXC5rP28pXHMqXFxcJCIpCisgICAgZGVwbW9kcGF0MyA9IHJlLmNvbXBpbGUoIl5cdCguKlwuaz9vKVxzKlxcXCQiKQorICAgIGRlcG1vZHBhdDQgPSByZS5jb21waWxlKCJeXHQoLipcLms/bylccyokIikKKworICAgIGRlZiBleHRyYWN0X21vZGluZm8oZmlsZSk6CisgICAgICAgIGltcG9ydCB0ZW1wZmlsZSwgc3VicHJvY2VzcworICAgICAgICB0ZW1wZmlsZS50ZW1wZGlyID0gZC5nZXRWYXIoIldPUktESVIiLCBUcnVlKQorICAgICAgICB0ZiA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICB0bXBmaWxlID0gdGZbMV0KKyAgICAgICAgY21kID0gIiVzb2JqY29weSAtaiAubW9kaW5mbyAtTyBiaW5hcnkgJXMgJXMiICUgKGQuZ2V0VmFyKCJIT1NUX1BSRUZJWCIsIFRydWUpIG9yICIiLCBmaWxlLCB0bXBmaWxlKQorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKQorICAgICAgICBmID0gb3Blbih0bXBmaWxlKQorICAgICAgICBsID0gZi5yZWFkKCkuc3BsaXQoIlwwMDAiKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgb3MuY2xvc2UodGZbMF0pCisgICAgICAgIG9zLnVubGluayh0bXBmaWxlKQorICAgICAgICB2YWxzID0ge30KKyAgICAgICAgZm9yIGkgaW4gbDoKKyAgICAgICAgICAgIG0gPSBtb2RpbmZvZXhwLm1hdGNoKGkpCisgICAgICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdmFsc1ttLmdyb3VwKDEpXSA9IG0uZ3JvdXAoMikKKyAgICAgICAgcmV0dXJuIHZhbHMKKworICAgIGRlZiBwYXJzZV9kZXBtb2QoKToKKworICAgICAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorCisgICAgICAgIGtlcm5lbHZlciA9IGQuZ2V0VmFyKCdLRVJORUxfVkVSU0lPTicsIFRydWUpCisgICAgICAgIGtlcm5lbHZlcl9zdHJpcHBlZCA9IGtlcm5lbHZlcgorICAgICAgICBtID0ga2VydmVycmV4cC5tYXRjaChrZXJuZWx2ZXIpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBrZXJuZWx2ZXJfc3RyaXBwZWQgPSBtLmdyb3VwKDEpCisgICAgICAgIHN0YWdpbmdfa2VybmVsX2RpciA9IGQuZ2V0VmFyKCJTVEFHSU5HX0tFUk5FTF9CVUlMRERJUiIsIFRydWUpCisgICAgICAgIHN5c3RlbV9tYXBfZmlsZSA9ICIlcy9ib290L1N5c3RlbS5tYXAtJXMiICUgKGR2YXIsIGtlcm5lbHZlcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHN5c3RlbV9tYXBfZmlsZSk6CisgICAgICAgICAgICBzeXN0ZW1fbWFwX2ZpbGUgPSAiJXMvU3lzdGVtLm1hcC0lcyIgJSAoc3RhZ2luZ19rZXJuZWxfZGlyLCBrZXJuZWx2ZXIpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3lzdGVtX21hcF9maWxlKToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiU3lzdGVtLm1hcC0lcyBkb2VzIG5vdCBleGlzdCBpbiAnJXMvYm9vdCcgbm9yIFNUQUdJTkdfS0VSTkVMX0JVSUxERElSICclcyciICUgKGtlcm5lbHZlciwgZHZhciwgc3RhZ2luZ19rZXJuZWxfZGlyKSkKKworICAgICAgICBjbWQgPSAiZGVwbW9kIC1uIC1hIC1iICVzIC1GICVzICVzIiAlIChkdmFyLCBzeXN0ZW1fbWFwX2ZpbGUsIGtlcm5lbHZlcl9zdHJpcHBlZCkKKyAgICAgICAgZiA9IG9zLnBvcGVuKGNtZCwgJ3InKQorCisgICAgICAgIGRlcHMgPSB7fQorICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgIHdoaWxlIGxpbmU6CisgICAgICAgICAgICBpZiBub3QgZGVwbW9kcGF0MC5tYXRjaChsaW5lKToKKyAgICAgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG0xID0gZGVwbW9kcGF0MS5tYXRjaChsaW5lKQorICAgICAgICAgICAgaWYgbTE6CisgICAgICAgICAgICAgICAgZGVwc1ttMS5ncm91cCgxKV0gPSBtMS5ncm91cCgyKS5zcGxpdCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG0yID0gZGVwbW9kcGF0Mi5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG0yOgorICAgICAgICAgICAgICAgICAgICBkZXBzW20yLmdyb3VwKDEpXSA9IG0yLmdyb3VwKDIpLnNwbGl0KCkKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICBtMyA9IGRlcG1vZHBhdDMubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgbTM6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBzW20yLmdyb3VwKDEpXS5leHRlbmQobTMuZ3JvdXAoMSkuc3BsaXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG0zID0gZGVwbW9kcGF0My5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgICAgICBtNCA9IGRlcG1vZHBhdDQubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICAgICAgZGVwc1ttMi5ncm91cCgxKV0uZXh0ZW5kKG00Lmdyb3VwKDEpLnNwbGl0KCkpCisgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICByZXR1cm4gZGVwcworCisgICAgZGVmIGdldF9kZXBlbmRlbmNpZXMoZmlsZSwgcGF0dGVybiwgZm9ybWF0KToKKyAgICAgICAgIyBmaWxlIG5vIGxvbmdlciBpbmNsdWRlcyBQS0dECisgICAgICAgIGZpbGUgPSBmaWxlLnJlcGxhY2UoZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKSBvciAnJywgJycsIDEpCisgICAgICAgICMgaW5zdGVhZCBpcyBwcmVmaXhlZCB3aXRoIC9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfQorICAgICAgICBmaWxlID0gZmlsZS5yZXBsYWNlKCIvbGliL21vZHVsZXMvJXMvIiAlIGQuZ2V0VmFyKCdLRVJORUxfVkVSU0lPTicsIFRydWUpIG9yICcnLCAnJywgMSkKKworICAgICAgICBpZiBmaWxlIGluIG1vZHVsZV9kZXBzOgorICAgICAgICAgICAgZGVwZW5kZW5jaWVzID0gW10KKyAgICAgICAgICAgIGZvciBpIGluIG1vZHVsZV9kZXBzW2ZpbGVdOgorICAgICAgICAgICAgICAgIG0gPSByZS5tYXRjaChwYXR0ZXJuLCBvcy5wYXRoLmJhc2VuYW1lKGkpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIG9uID0gbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobS5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmN5X3BrZyA9IGZvcm1hdCAlIG9uCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChkZXBlbmRlbmN5X3BrZykKKyAgICAgICAgICAgIHJldHVybiBkZXBlbmRlbmNpZXMKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBkZWYgZnJvYl9tZXRhZGF0YShmaWxlLCBwa2csIHBhdHRlcm4sIGZvcm1hdCwgYmFzZW5hbWUpOgorICAgICAgICB2YWxzID0gZXh0cmFjdF9tb2RpbmZvKGZpbGUpCisKKyAgICAgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKworICAgICAgICAjIElmIGF1dG9sb2FkaW5nIGlzIHJlcXVlc3RlZCwgb3V0cHV0IC9ldGMvbW9kdWxlcy1sb2FkLmQvPG5hbWU+LmNvbmYgYW5kIGFwcGVuZAorICAgICAgICAjIGFwcHJvcHJpYXRlIG1vZHByb2JlIGNvbW1hbmRzIHRvIHRoZSBwb3N0aW5zdAorICAgICAgICBhdXRvbG9hZGxpc3QgPSAoZC5nZXRWYXIoIktFUk5FTF9NT0RVTEVfQVVUT0xPQUQiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBhdXRvbG9hZCA9IGQuZ2V0VmFyKCdtb2R1bGVfYXV0b2xvYWRfJXMnICUgYmFzZW5hbWUsIFRydWUpCisgICAgICAgIGlmIGF1dG9sb2FkIGFuZCBhdXRvbG9hZCA9PSBiYXNlbmFtZToKKyAgICAgICAgICAgIGJiLndhcm4oIm1vZHVsZV9hdXRvbG9hZF8lcyB3YXMgcmVwbGFjZWQgYnkgS0VSTkVMX01PRFVMRV9BVVRPTE9BRCBmb3IgY2FzZXMgd2hlcmUgYmFzZW5hbWUgPT0gbW9kdWxlIG5hbWUsIHBsZWFzZSBkcm9wIGl0IiAlIGJhc2VuYW1lKQorICAgICAgICBpZiBhdXRvbG9hZCBhbmQgYmFzZW5hbWUgbm90IGluIGF1dG9sb2FkbGlzdDoKKyAgICAgICAgICAgIGJiLndhcm4oIm1vZHVsZV9hdXRvbG9hZF8lcyBpcyBkZWZpbmVkIGJ1dCAnJXMnIGlzbid0IGluY2x1ZGVkIGluIEtFUk5FTF9NT0RVTEVfQVVUT0xPQUQsIHBsZWFzZSBhZGQgaXQgdGhlcmUiICUgKGJhc2VuYW1lLCBiYXNlbmFtZSkpCisgICAgICAgIGlmIGJhc2VuYW1lIGluIGF1dG9sb2FkbGlzdDoKKyAgICAgICAgICAgIG5hbWUgPSAnJXMvZXRjL21vZHVsZXMtbG9hZC5kLyVzLmNvbmYnICUgKGR2YXIsIGJhc2VuYW1lKQorICAgICAgICAgICAgZiA9IG9wZW4obmFtZSwgJ3cnKQorICAgICAgICAgICAgaWYgYXV0b2xvYWQ6CisgICAgICAgICAgICAgICAgZm9yIG0gaW4gYXV0b2xvYWQuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnJXNcbicgJSBtKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLndyaXRlKCclc1xuJyAlIGJhc2VuYW1lKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHBvc3RpbnN0OgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJwa2dfcG9zdGluc3RfJXMgbm90IGRlZmluZWQiICUgcGtnKQorICAgICAgICAgICAgcG9zdGluc3QgKz0gZC5nZXRWYXIoJ2F1dG9sb2FkX3Bvc3RpbnN0X2ZyYWdtZW50JywgVHJ1ZSkgJSAoYXV0b2xvYWQgb3IgYmFzZW5hbWUpCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgIyBXcml0ZSBvdXQgYW55IG1vZGNvbmYgZnJhZ21lbnQKKyAgICAgICAgbW9kY29uZmxpc3QgPSAoZC5nZXRWYXIoIktFUk5FTF9NT0RVTEVfUFJPQkVDT05GIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgbW9kY29uZiA9IGQuZ2V0VmFyKCdtb2R1bGVfY29uZl8lcycgJSBiYXNlbmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgbW9kY29uZiBhbmQgYmFzZW5hbWUgaW4gbW9kY29uZmxpc3Q6CisgICAgICAgICAgICBuYW1lID0gJyVzL2V0Yy9tb2Rwcm9iZS5kLyVzLmNvbmYnICUgKGR2YXIsIGJhc2VuYW1lKQorICAgICAgICAgICAgZiA9IG9wZW4obmFtZSwgJ3cnKQorICAgICAgICAgICAgZi53cml0ZSgiJXNcbiIgJSBtb2Rjb25mKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGVsaWYgbW9kY29uZjoKKyAgICAgICAgICAgIGJiLmVycm9yKCJQbGVhc2UgZW5zdXJlIG1vZHVsZSAlcyBpcyBsaXN0ZWQgaW4gS0VSTkVMX01PRFVMRV9QUk9CRUNPTkYgc2luY2UgbW9kdWxlX2NvbmZfJXMgaXMgc2V0IiAlIChiYXNlbmFtZSwgYmFzZW5hbWUpKQorCisgICAgICAgIGZpbGVzID0gZC5nZXRWYXIoJ0ZJTEVTXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgZmlsZXMgPSAiJXMgL2V0Yy9tb2R1bGVzLWxvYWQuZC8lcy5jb25mIC9ldGMvbW9kcHJvYmUuZC8lcy5jb25mIiAlIChmaWxlcywgYmFzZW5hbWUsIGJhc2VuYW1lKQorICAgICAgICBkLnNldFZhcignRklMRVNfJXMnICUgcGtnLCBmaWxlcykKKworICAgICAgICBpZiAiZGVzY3JpcHRpb24iIGluIHZhbHM6CisgICAgICAgICAgICBvbGRfZGVzYyA9IGQuZ2V0VmFyKCdERVNDUklQVElPTl8nICsgcGtnLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgZC5zZXRWYXIoJ0RFU0NSSVBUSU9OXycgKyBwa2csIG9sZF9kZXNjICsgIjsgIiArIHZhbHNbImRlc2NyaXB0aW9uIl0pCisKKyAgICAgICAgcmRlcGVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZC5nZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIFRydWUpIG9yICIiKQorICAgICAgICBmb3IgZGVwIGluIGdldF9kZXBlbmRlbmNpZXMoZmlsZSwgcGF0dGVybiwgZm9ybWF0KToKKyAgICAgICAgICAgIGlmIG5vdCBkZXAgaW4gcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgcmRlcGVuZHNbZGVwXSA9IFtdCisgICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCBiYi51dGlscy5qb2luX2RlcHMocmRlcGVuZHMsIGNvbW1hc2VwPUZhbHNlKSkKKworICAgICAgICAjIEF2b2lkIGF1dG9tYXRpYyAtZGV2IHJlY29tbWVuZGF0aW9ucyBmb3IgbW9kdWxlcyBlbmRpbmcgd2l0aCAtZGV2LgorICAgICAgICBkLnNldFZhckZsYWcoJ1JSRUNPTU1FTkRTXycgKyBwa2csICdub2RlcHJyZWNzJywgMSkKKworICAgIG1vZHVsZV9kZXBzID0gcGFyc2VfZGVwbW9kKCkKKyAgICBtb2R1bGVfcmVnZXggPSAnXiguKilcLms/byQnCisgICAgbW9kdWxlX3BhdHRlcm4gPSAna2VybmVsLW1vZHVsZS0lcycKKworICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF9tb2R1bGVzJywgVHJ1ZSkKKyAgICBwb3N0cm0gPSBkLmdldFZhcigncGtnX3Bvc3RybV9tb2R1bGVzJywgVHJ1ZSkKKworICAgIG1vZHVsZXMgPSBkb19zcGxpdF9wYWNrYWdlcyhkLCByb290PScvbGliL21vZHVsZXMnLCBmaWxlX3JlZ2V4PW1vZHVsZV9yZWdleCwgb3V0cHV0X3BhdHRlcm49bW9kdWxlX3BhdHRlcm4sIGRlc2NyaXB0aW9uPSclcyBrZXJuZWwgbW9kdWxlJywgcG9zdGluc3Q9cG9zdGluc3QsIHBvc3RybT1wb3N0cm0sIHJlY3Vyc2l2ZT1UcnVlLCBob29rPWZyb2JfbWV0YWRhdGEsIGV4dHJhX2RlcGVuZHM9J2tlcm5lbC0lcycgJSAoZC5nZXRWYXIoIktFUk5FTF9WRVJTSU9OIiwgVHJ1ZSkpKQorICAgIGlmIG1vZHVsZXM6CisgICAgICAgIG1ldGFwa2cgPSBkLmdldFZhcignS0VSTkVMX01PRFVMRVNfTUVUQV9QQUNLQUdFJywgVHJ1ZSkKKyAgICAgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTXycgKyBtZXRhcGtnLCAnICcrJyAnLmpvaW4obW9kdWxlcykpCisKKyAgICAjIElmIG1vZHVsZXMtbG9hZC5kIGFuZCBtb2Rwcm9iZS5kIGFyZSBlbXB0eSBhdCB0aGlzIHBvaW50LCByZW1vdmUgdGhlbSB0bworICAgICMgYXZvaWQgd2FybmluZ3MuIHJlbW92ZWRpcnMgb25seSByYWlzZXMgYW4gT1NFcnJvciBpZiBhbiBlbXB0eQorICAgICMgZGlyZWN0b3J5IGNhbm5vdCBiZSByZW1vdmVkLgorICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgZm9yIGRpciBpbiBbIiVzL2V0Yy9tb2Rwcm9iZS5kIiAlIChkdmFyKSwgIiVzL2V0Yy9tb2R1bGVzLWxvYWQuZCIgJSAoZHZhciksICIlcy9ldGMiICUgKGR2YXIpXToKKyAgICAgICAgaWYgbGVuKG9zLmxpc3RkaXIoZGlyKSkgPT0gMDoKKyAgICAgICAgICAgIG9zLnJtZGlyKGRpcikKK30KKworZG9fcGFja2FnZVt2YXJkZXBzXSArPSAnJHtAIiAiLmpvaW4obWFwKGxhbWJkYSBzOiAibW9kdWxlX2NvbmZfIiArIHMsIChkLmdldFZhcigiS0VSTkVMX01PRFVMRV9QUk9CRUNPTkYiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkpfScKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC11Ym9vdC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLXVib290LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ1ZTdmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC11Ym9vdC5iYmNsYXNzCkBAIC0wLDAgKzEsMjAgQEAKK3Vib290X3ByZXBfa2ltYWdlKCkgeworCWlmIHRlc3QgLWUgYXJjaC8ke0FSQ0h9L2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4IDsgdGhlbgorCQl2bWxpbnV4X3BhdGg9ImFyY2gvJHtBUkNIfS9ib290L2NvbXByZXNzZWQvdm1saW51eCIKKwkJbGludXhfc3VmZml4PSIiCisJCWxpbnV4X2NvbXA9Im5vbmUiCisJZWxzZQorCQl2bWxpbnV4X3BhdGg9InZtbGludXgiCisJCWxpbnV4X3N1ZmZpeD0iLmd6IgorCQlsaW51eF9jb21wPSJnemlwIgorCWZpCisKKwkke09CSkNPUFl9IC1PIGJpbmFyeSAtUiAubm90ZSAtUiAuY29tbWVudCAtUyAiJHt2bWxpbnV4X3BhdGh9IiBsaW51eC5iaW4KKworCWlmIFsgIiR7bGludXhfY29tcH0iICE9ICJub25lIiBdIDsgdGhlbgorCQlnemlwIC05IGxpbnV4LmJpbgorCQltdiAtZiAibGludXguYmluJHtsaW51eF9zdWZmaXh9IiBsaW51eC5iaW4KKwlmaQorCisJZWNobyAiJHtsaW51eF9jb21wfSIKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC11aW1hZ2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC11aW1hZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzM5NjViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLXVpbWFnZS5iYmNsYXNzCkBAIC0wLDAgKzEsMzYgQEAKK2luaGVyaXQga2VybmVsLXVib290CisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAga2VybmVsdHlwZSA9IGQuZ2V0VmFyKCdLRVJORUxfSU1BR0VUWVBFJywgVHJ1ZSkKKyAgICBpZiBrZXJuZWx0eXBlID09ICd1SW1hZ2UnOgorICAgICAgICBkZXBlbmRzID0gZC5nZXRWYXIoIkRFUEVORFMiLCBUcnVlKQorICAgICAgICBkZXBlbmRzID0gIiVzIHUtYm9vdC1ta2ltYWdlLW5hdGl2ZSIgJSBkZXBlbmRzCisgICAgICAgIGQuc2V0VmFyKCJERVBFTkRTIiwgZGVwZW5kcykKKworCSMgT3ZlcnJpZGUgS0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRSB2YXJpYWJsZSwgd2hpY2ggaXMgaW50ZXJuYWwKKwkjIHRvIGtlcm5lbC5iYmNsYXNzIC4gV2Ugb3ZlcnJpZGUgdGhlIHZhcmlhYmxlIGhlcmUsIHNpbmNlIHdlIG5lZWQKKwkjIHRvIGJ1aWxkIHVJbWFnZSB1c2luZyB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBpZiBhbmQgb25seSBpZgorCSMgS0VFUFVJTUFHRSA9PSB5ZXMuIE90aGVyd2lzZSwgd2UgcGFjayBjb21wcmVzc2VkIHZtbGludXggaW50bworCSMgdGhlIHVJbWFnZSAuCisJaWYgZC5nZXRWYXIoIktFRVBVSU1BR0UiLCBUcnVlKSAhPSAneWVzJzoKKyAgICAgICAgICAgIGQuc2V0VmFyKCJLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFIiwgInpJbWFnZSIpCit9CisKK2RvX3Vib290X21raW1hZ2UoKSB7CisJaWYgdGVzdCAieCR7S0VSTkVMX0lNQUdFVFlQRX0iID0gInh1SW1hZ2UiIDsgdGhlbgorCQlpZiB0ZXN0ICJ4JHtLRUVQVUlNQUdFfSIgIT0gInh5ZXMiIDsgdGhlbgorCQkJdWJvb3RfcHJlcF9raW1hZ2UKKworCQkJRU5UUllQT0lOVD0ke1VCT09UX0VOVFJZUE9JTlR9CisJCQlpZiB0ZXN0IC1uICIke1VCT09UX0VOVFJZU1lNQk9MfSI7IHRoZW4KKwkJCQlFTlRSWVBPSU5UPWAke0hPU1RfUFJFRklYfW5tICR7U30vdm1saW51eCB8IFwKKwkJCQkJYXdrICckMz09IiR7VUJPT1RfRU5UUllTWU1CT0x9IiB7cHJpbnQgJDF9J2AKKwkJCWZpCisKKwkJCXVib290LW1raW1hZ2UgLUEgJHtVQk9PVF9BUkNIfSAtTyBsaW51eCAtVCBrZXJuZWwgLUMgIiR7bGludXhfY29tcH0iIC1hICR7VUJPT1RfTE9BREFERFJFU1N9IC1lICRFTlRSWVBPSU5UIC1uICIke0RJU1RST19OQU1FfS8ke1BWfS8ke01BQ0hJTkV9IiAtZCBsaW51eC5iaW4gYXJjaC8ke0FSQ0h9L2Jvb3QvdUltYWdlCisJCQlybSAtZiBsaW51eC5iaW4KKwkJZmkKKwlmaQorfQorCithZGR0YXNrIHVib290X21raW1hZ2UgYmVmb3JlIGRvX2luc3RhbGwgYWZ0ZXIgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLXlvY3RvLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwteW9jdG8uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjVmOTRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLXlvY3RvLmJiY2xhc3MKQEAgLTAsMCArMSwzNjggQEAKKyMgcmVtb3ZlIHRhc2tzIHRoYXQgbW9kaWZ5IHRoZSBzb3VyY2UgdHJlZSBpbiBjYXNlIGV4dGVybmFsc3JjIGlzIGluaGVyaXRlZAorU1JDVFJFRUNPVkVSRURUQVNLUyArPSAiZG9fa2VybmVsX2xpbmtfdm1saW51eCBkb19rZXJuZWxfY29uZmlnbWUgZG9fdmFsaWRhdGVfYnJhbmNoZXMgZG9fa2VybmVsX2NvbmZpZ2NoZWNrIGRvX2tlcm5lbF9jaGVja291dCBkb19zaGFyZWRfd29ya2RpciBkb19mZXRjaCBkb191bnBhY2sgZG9fcGF0Y2giCisKKyMgcmV0dXJucyBsb2NhbCAoYWJzb2x1dGUpIHBhdGggbmFtZXMgZm9yIGFsbCB2YWxpZCBwYXRjaGVzIGluIHRoZQorIyBzcmNfdXJpCitkZWYgZmluZF9wYXRjaGVzKGQpOgorICAgIHBhdGNoZXMgPSBzcmNfcGF0Y2hlcyhkKQorICAgIHBhdGNoX2xpc3Q9W10KKyAgICBmb3IgcCBpbiBwYXRjaGVzOgorICAgICAgICBfLCBfLCBsb2NhbCwgXywgXywgXyA9IGJiLmZldGNoLmRlY29kZXVybChwKQorICAgICAgICBwYXRjaF9saXN0LmFwcGVuZChsb2NhbCkKKworICAgIHJldHVybiBwYXRjaF9saXN0CisKKyMgcmV0dXJucyBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhlIHNyYyB1cmkgdGhhdCBhcmUgLnNjYyBmaWxlcworZGVmIGZpbmRfc2NjcyhkKToKKyAgICBzb3VyY2VzPXNyY19wYXRjaGVzKGQsIFRydWUpCisgICAgc291cmNlc19saXN0PVtdCisgICAgZm9yIHMgaW4gc291cmNlczoKKyAgICAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHMpKQorICAgICAgICBpZiBleHQgYW5kIGV4dCBpbiBbIi5zY2MiLCAiLmNmZyJdOgorICAgICAgICAgICAgc291cmNlc19saXN0LmFwcGVuZChzKQorICAgICAgICBlbGlmIGJhc2UgYW5kIGJhc2UgaW4gJ2RlZmNvbmZpZyc6CisgICAgICAgICAgICBzb3VyY2VzX2xpc3QuYXBwZW5kKHMpCisKKyAgICByZXR1cm4gc291cmNlc19saXN0CisKKyMgY2hlY2sgdGhlIFNSQ19VUkkgZm9yICJrbWV0YSIgdHlwZSdkIGdpdCByZXBvc2l0b3JpZXMuIFJldHVybiB0aGUgbmFtZSBvZgorIyB0aGUgcmVwb3NpdG9yeSBhcyBpdCB3aWxsIGJlIGZvdW5kIGluIFdPUktESVIKK2RlZiBmaW5kX2tlcm5lbF9mZWF0dXJlX2RpcnMoZCk6CisgICAgZmVhdHVyZV9kaXJzPVtdCisgICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goW10sIGQpCisgICAgZm9yIHVybCBpbiBmZXRjaC51cmxzOgorICAgICAgICB1cmxkYXRhID0gZmV0Y2gudWRbdXJsXQorICAgICAgICBwYXJtID0gdXJsZGF0YS5wYXJtCisgICAgICAgIHR5cGU9IiIKKyAgICAgICAgaWYgInR5cGUiIGluIHBhcm06CisgICAgICAgICAgICB0eXBlID0gcGFybVsidHlwZSJdCisgICAgICAgIGlmICJkZXN0c3VmZml4IiBpbiBwYXJtOgorICAgICAgICAgICAgZGVzdGRpciA9IHBhcm1bImRlc3RzdWZmaXgiXQorICAgICAgICAgICAgaWYgdHlwZSA9PSAia21ldGEiOgorICAgICAgICAgICAgICAgIGZlYXR1cmVfZGlycy5hcHBlbmQoZGVzdGRpcikKKwkgICAgCisgICAgcmV0dXJuIGZlYXR1cmVfZGlycworCisjIGZpbmQgdGhlIG1hc3Rlci9tYWNoaW5lIHNvdXJjZSBicmFuY2guIEluIHRoZSBzYW1lIHdheSB0aGF0IHRoZSBmZXRjaGVyIHByb2Nlc2VzCisjIGdpdCByZXBvc2l0b3JpZXMgaW4gdGhlIFNSQ19VUkkgd2UgdGFrZSB0aGUgZmlyc3QgcmVwbyBmb3VuZCwgZmlyc3QgYnJhbmNoLgorZGVmIGdldF9tYWNoaW5lX2JyYW5jaChkLCBkZWZhdWx0KToKKyAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChbXSwgZCkKKyAgICBmb3IgdXJsIGluIGZldGNoLnVybHM6CisgICAgICAgIHVybGRhdGEgPSBmZXRjaC51ZFt1cmxdCisgICAgICAgIHBhcm0gPSB1cmxkYXRhLnBhcm0KKyAgICAgICAgaWYgImJyYW5jaCIgaW4gcGFybToKKyAgICAgICAgICAgIGJyYW5jaGVzID0gdXJsZGF0YS5wYXJtLmdldCgiYnJhbmNoIikuc3BsaXQoJywnKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaGVzWzBdCisJICAgIAorICAgIHJldHVybiBkZWZhdWx0CisKK2RvX2tlcm5lbF9tZXRhZGF0YSgpIHsKKwlzZXQgK2UKKwljZCAke1N9CisJZXhwb3J0IEtNRVRBPSR7S01FVEF9CisKKwkjIGlmIGtlcm5lbCB0b29scyBhcmUgYXZhaWxhYmxlIGluLXRyZWUsIHRoZXkgYXJlIHByZWZlcnJlZAorCSMgYW5kIGFyZSBwbGFjZWQgb24gdGhlIHBhdGggYmVmb3JlIGFueSBleHRlcm5hbCB0b29scy4gVW5sZXNzCisJIyB0aGUgZXh0ZXJuYWwgdG9vbHMgZmxhZyBpcyBzZXQsIGluIHRoYXQgY2FzZSB3ZSBkbyBub3RoaW5nLgorCWlmIFsgLWYgIiR7U30vc2NyaXB0cy91dGlsL2NvbmZpZ21lIiBdOyB0aGVuCisJCWlmIFsgLXogIiR7RVhURVJOQUxfS0VSTkVMX1RPT0xTfSIgXTsgdGhlbgorCQkJUEFUSD0ke1N9L3NjcmlwdHMvdXRpbDoke1BBVEh9CisJCWZpCisJZmkKKworCW1hY2hpbmVfYnJhbmNoPSIke0AgZ2V0X21hY2hpbmVfYnJhbmNoKGQsICIke0tCUkFOQ0h9IiApfSIKKwltYWNoaW5lX3NyY3Jldj0iJHtTUkNSRVZfbWFjaGluZX0iCisJaWYgWyAteiAiJHttYWNoaW5lX3NyY3Jldn0iIF07IHRoZW4KKwkJIyBmYWxsYmFjayB0byBTUkNSRVYgaWYgYSBub24gbWFjaGluZV9tZXRhIHRyZWUgaXMgYmVpbmcgYnVpbHQKKwkJbWFjaGluZV9zcmNyZXY9IiR7U1JDUkVWfSIKKwlmaQorCisJIyBJbiBhIHNpbWlsYXIgbWFubmVyIHRvIHRoZSBrZXJuZWwgaXRzZWxmOgorCSMKKwkjICAgZGVmY29uZmlnOiAkKG9iaikvY29uZgorCSMgICBpZmVxICgkKEtCVUlMRF9ERUZDT05GSUcpLCkKKwkjCSQ8IC0tZGVmY29uZmlnICQoS2NvbmZpZykKKwkjICAgZWxzZQorCSMJQGVjaG8gIioqKiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMgYmFzZWQgb24gJyQoS0JVSUxEX0RFRkNPTkZJRyknIgorCSMJJChRKSQ8IC0tZGVmY29uZmlnPWFyY2gvJChTUkNBUkNIKS9jb25maWdzLyQoS0JVSUxEX0RFRkNPTkZJRykgJChLY29uZmlnKQorCSMgICBlbmRpZgorCSMKKwkjIElmIGEgZGVmY29uZmlnIGlzIHNwZWNpZmllZCB2aWEgdGhlIEtCVUlMRF9ERUZDT05GSUcgdmFyaWFibGUsIHdlIGNvcHkgaXQKKwkjIGZyb20gdGhlIHNvdXJjZSB0cmVlLCBpbnRvIGEgY29tbW9uIGxvY2F0aW9uIGFuZCBub3JtYWxpemVkICJkZWZjb25maWciIG5hbWUsCisJIyB3aGVyZSB0aGUgcmVzdCBvZiB0aGUgcHJvY2VzcyB3aWxsIGluY2x1ZGUgYW5kIGluY29yb3BvcmF0ZSBpdCBpbnRvIHRoZSBidWlsZAorCSMKKwkjIElmIHRoZSBmZXRjaGVyIGhhcyBhbHJlYWR5IHBsYWNlZCBhIGRlZmNvbmZpZyBpbiBXT1JLRElSIChmcm9tIHRoZSBTUkNfVVJJKSwKKwkjIHdlIGRvbid0IG92ZXJ3cml0ZSBpdCwgYnV0IGluc3RlYWQgd2FybiB0aGUgdXNlciB0aGF0IFNSQ19VUkkgZGVmY29uZmlncyB0YWtlCisJIyBwcmVjZW5kZW5jZS4KKwkjCisJaWYgWyAtbiAiJHtLQlVJTERfREVGQ09ORklHfSIgXTsgdGhlbgorCQlpZiBbIC1mICIke1N9L2FyY2gvJHtBUkNIfS9jb25maWdzLyR7S0JVSUxEX0RFRkNPTkZJR30iIF07IHRoZW4KKwkJCWlmIFsgLWYgIiR7V09SS0RJUn0vZGVmY29uZmlnIiBdOyB0aGVuCisJCQkJIyBJZiB0aGUgdHdvIGRlZmNvbmZpZydzIGFyZSBkaWZmZXJlbnQsIHdhcm4gdGhhdCB3ZSBkaWRuJ3Qgb3ZlcndyaXRlIHRoZQorCQkJCSMgb25lIGFscmVhZHkgcGxhY2VkIGluIFdPUktESVIgYnkgdGhlIGZldGNoZXIuCisJCQkJY21wICIke1dPUktESVJ9L2RlZmNvbmZpZyIgIiR7U30vYXJjaC8ke0FSQ0h9L2NvbmZpZ3MvJHtLQlVJTERfREVGQ09ORklHfSIKKwkJCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCQkJYmJ3YXJuICJkZWZjb25maWcgZGV0ZWN0ZWQgaW4gV09SS0RJUi4gJHtLQlVJTERfREVGQ09ORklHfSBza2lwcGVkIgorCQkJCWZpCisJCQllbHNlCisJCQkJY3AgLWYgJHtTfS9hcmNoLyR7QVJDSH0vY29uZmlncy8ke0tCVUlMRF9ERUZDT05GSUd9ICR7V09SS0RJUn0vZGVmY29uZmlnCisJCQkJc2Njcz0iJHtXT1JLRElSfS9kZWZjb25maWciCisJCQlmaQorCQllbHNlCisJCQliYmZhdGFsICJBIEtCVUlMRF9ERUNPTkZJRyAnJHtLQlVJTERfREVGQ09ORklHfScgd2FzIHNwZWNpZmllZCwgYnV0IG5vdCBwcmVzZW50IGluIHRoZSBzb3VyY2UgdHJlZSIKKwkJZmkKKwlmaQorCisJc2Njcz0iJHNjY3MgJHtAIiAiLmpvaW4oZmluZF9zY2NzKGQpKX0iCisJcGF0Y2hlcz0iJHtAIiAiLmpvaW4oZmluZF9wYXRjaGVzKGQpKX0iCisJZmVhdF9kaXJzPSIke0AiICIuam9pbihmaW5kX2tlcm5lbF9mZWF0dXJlX2RpcnMoZCkpfSIKKworCSMgYWRkIGFueSBleHBsaWNpdGx5IHJlZmVyZW5jZWQgZmVhdHVyZXMgb250byB0aGUgZW5kIG9mIHRoZSBmZWF0dXJlCisJIyBsaXN0IHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBrZXJuZWwgYnVpbGQgc2NyaXB0cy4KKwlpZiBbIC1uICIke0tFUk5FTF9GRUFUVVJFU30iIF07IHRoZW4KKwkJZm9yIGZlYXQgaW4gJHtLRVJORUxfRkVBVFVSRVN9OyBkbworCQkJYWRkb25fZmVhdHVyZXM9IiRhZGRvbl9mZWF0dXJlcyAtLWZlYXR1cmUgJGZlYXQiCisJCWRvbmUKKwlmaQorCisJIyBjaGVjayBmb3IgZmVhdHVyZSBkaXJlY3Rvcmllcy9yZXBvcy9icmFuY2hlcyB0aGF0IHdlcmUgcGFydCBvZiB0aGUKKwkjIFNSQ19VUkkuIElmIHRoZXkgd2VyZSBzdXBwbGllZCwgd2UgY29udmVydCB0aGVtIGludG8gaW5jbHVkZSBkaXJlY3RpdmVzCisJIyBmb3IgdGhlIHVwZGF0ZSBwYXJ0IG9mIHRoZSBwcm9jZXNzCisJaWYgWyAtbiAiJHtmZWF0X2RpcnN9IiBdOyB0aGVuCisJICAgIGZvciBmIGluICR7ZmVhdF9kaXJzfTsgZG8KKwkJaWYgWyAtZCAiJHtXT1JLRElSfS8kZi9tZXRhIiBdOyB0aGVuCisJCSAgICBpbmNsdWRlcz0iJGluY2x1ZGVzIC1JJHtXT1JLRElSfS8kZi9tZXRhIgorCQllbGlmIFsgLWQgIiR7V09SS0RJUn0vJGYiIF07IHRoZW4KKwkJICAgIGluY2x1ZGVzPSIkaW5jbHVkZXMgLUkke1dPUktESVJ9LyRmIgorCQlmaQorCSAgICBkb25lCisJZmkKKworCSMgdXBkYXRlcyBvciBnZW5lcmF0ZXMgdGhlIHRhcmdldCBkZXNjcmlwdGlvbgorCXVwZGF0ZW1lICR7dXBkYXRlbWVfZmxhZ3N9IC1ES0RFU0M9JHtLTUFDSElORX06JHtMSU5VWF9LRVJORUxfVFlQRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZXN9ICR7YWRkb25fZmVhdHVyZXN9ICR7QVJDSH0gJHtLTUFDSElORX0gJHtzY2NzfSAke3BhdGNoZXN9CisJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCWJiZmF0YWxfbG9nICJDb3VsZCBub3QgdXBkYXRlICR7bWFjaGluZV9icmFuY2h9IgorCWZpCit9CisKK2RvX3BhdGNoKCkgeworCWNkICR7U30KKworCSMgZXhlY3V0ZXMgYW5kIG1vZGlmaWVzIHRoZSBzb3VyY2UgdHJlZSBhcyByZXF1aXJlZAorCXBhdGNobWUgJHtLTUFDSElORX0KKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJYmJlcnJvciAiQ291bGQgbm90IGFwcGx5IHBhdGNoZXMgZm9yICR7S01BQ0hJTkV9LiIKKwkJYmJmYXRhbF9sb2cgIlBhdGNoIGZhaWx1cmVzIGNhbiBiZSByZXNvbHZlZCBpbiB0aGUgbGludXggc291cmNlIGRpcmVjdG9yeSAke1N9KSIKKwlmaQorCisJIyBjaGVjayB0byBzZWUgaWYgdGhlIHNwZWNpZmllZCBTUkNSRVYgaXMgcmVhY2hhYmxlIGZyb20gdGhlIGZpbmFsIGJyYW5jaC4KKwkjIGlmIGl0IHdhc24ndCBzb21ldGhpbmcgd3JvbmcgaGFzIGhhcHBlbmVkLCBhbmQgd2Ugc2hvdWxkIGVycm9yLgorCW1hY2hpbmVfc3JjcmV2PSIke1NSQ1JFVl9tYWNoaW5lfSIKKwlpZiBbIC16ICIke21hY2hpbmVfc3JjcmV2fSIgXTsgdGhlbgorCQkjIGZhbGxiYWNrIHRvIFNSQ1JFViBpZiBhIG5vbiBtYWNoaW5lX21ldGEgdHJlZSBpcyBiZWluZyBidWlsdAorCQltYWNoaW5lX3NyY3Jldj0iJHtTUkNSRVZ9IgorCQkjIGlmIFNSQ1JFViBjYW5ub3QgYmUgcmVhY2hlZCBzb21ldGhpbmcgaXMgd3JvbmcuCisJCWlmIFsgLXogIiR7bWFjaGluZV9zcmNyZXZ9IiBdOyB0aGVuCisJCQliYmZhdGFsICJOZWl0aGVyIFNSQ1JFVl9tYWNoaW5lIG9yIFNSQ1JFViB3YXMgc3BlY2lmaWVkISIKKwkJZmkKKwlmaQorCisJaWYgWyAiJHttYWNoaW5lX3NyY3Jldn0iICE9ICJBVVRPSU5DIiBdOyB0aGVuCisJCWlmICEgWyAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICR7bWFjaGluZV9zcmNyZXZ9fjApIiA9ICIkKGdpdCBtZXJnZS1iYXNlICR7bWFjaGluZV9zcmNyZXZ9IEhFQUQpIiBdOyB0aGVuCisJCQliYmVycm9yICJTUkNSRVYgJHttYWNoaW5lX3NyY3Jldn0gd2FzIHNwZWNpZmllZCwgYnV0IGlzIG5vdCByZWFjaGFibGUiCisJCQliYmZhdGFsICJDaGVjayB0aGUgQlNQIGRlc2NyaXB0aW9uIGZvciBpbmNvcnJlY3QgYnJhbmNoIHNlbGVjdGlvbiwgb3Igb3RoZXIgZXJyb3JzLiIKKwkJZmkKKwlmaQorfQorCitkb19rZXJuZWxfY2hlY2tvdXQoKSB7CisJc2V0ICtlCisKKwlzb3VyY2VfZGlyPWBlY2hvICR7U30gfCBzZWQgJ3MlLyQlJSdgCisJc291cmNlX3dvcmtkaXI9IiR7V09SS0RJUn0vZ2l0IgorCWlmIFsgLWQgIiR7V09SS0RJUn0vZ2l0LyIgXTsgdGhlbgorCQkjIGNhc2U6IGdpdCByZXBvc2l0b3J5IChiYXJlIG9yIG5vbi1iYXJlKQorCQkjIGlmIFMgaXMgV09SS0RJUi9naXQsIHRoZW4gd2Ugc2hvdWxkbid0IGJlIG1vdmluZyBvciBkZWxldGluZyB0aGUgdHJlZS4KKwkJaWYgWyAiJHtzb3VyY2VfZGlyfSIgIT0gIiR7c291cmNlX3dvcmtkaXJ9IiBdOyB0aGVuCisJCQlybSAtcmYgJHtTfQorCQkJbXYgJHtXT1JLRElSfS9naXQgJHtTfQorCQlmaQorCQljZCAke1N9CisJZWxzZQorCQkjIGNhc2U6IHdlIGhhdmUgbm8gZ2l0IHJlcG9zaXRvcnkgYXQgYWxsLiAKKwkJIyBUbyBzdXBwb3J0IGxvdyBiYW5kd2lkdGggb3B0aW9ucyBmb3IgYnVpbGRpbmcgdGhlIGtlcm5lbCwgd2UnbGwganVzdCAKKwkJIyBjb252ZXJ0IHRoZSB0cmVlIHRvIGEgZ2l0IHJlcG8gYW5kIGxldCB0aGUgcmVzdCBvZiB0aGUgcHJvY2VzcyB3b3JrIHVuY2hhbmdlZAorCQkKKwkJIyBpZiAke1N9IGhhc24ndCBiZWVuIHNldCB0byB0aGUgcHJvcGVyIHN1YmRpcmVjdG9yeSBhIGRlZmF1bHQgb2YgImxpbnV4IiBpcyAKKwkJIyB1c2VkLCBidXQgd2UgY2FuJ3QgaW5pdGlhbGl6ZSB0aGF0IGVtcHR5IGRpcmVjdG9yeS4gU28gY2hlY2sgaXQgYW5kIHRocm93IGEKKwkJIyBjbGVhciBlcnJvcgorCisJICAgICAgICBjZCAke1N9CisJCWlmIFsgISAtZiAiTWFrZWZpbGUiIF07IHRoZW4KKwkJCWJiZXJyb3IgIlMgaXMgbm90IHNldCB0byB0aGUgbGludXggc291cmNlIGRpcmVjdG9yeS4gQ2hlY2sgIgorCQkJYmJmYXRhbCAidGhlIHJlY2lwZSBhbmQgc2V0IFMgdG8gdGhlIHByb3BlciBleHRyYWN0ZWQgc3ViZGlyZWN0b3J5IgorCQlmaQorCQlybSAtZiAuZ2l0aWdub3JlCisJCWdpdCBpbml0CisJCWdpdCBhZGQgLgorCQlnaXQgY29tbWl0IC1xIC1tICJiYXNlbGluZSBjb21taXQ6IGNyZWF0aW5nIHJlcG8gZm9yICR7UE59LSR7UFZ9IgorCQlnaXQgY2xlYW4gLWQgLWYKKwlmaQorCisJIyBjb252ZXJ0IGFueSByZW1vdGUgYnJhbmNoZXMgdG8gbG9jYWwgdHJhY2tpbmcgb25lcworCWZvciBpIGluIGBnaXQgYnJhbmNoIC1hIC0tbm8tY29sb3IgfCBncmVwIHJlbW90ZXMgfCBncmVwIC12IEhFQURgOyBkbworCQliPWBlY2hvICRpIHwgY3V0IC1kJyAnIC1mMiB8IHNlZCAncyVyZW1vdGVzL29yaWdpbi8lJSdgOworCQlnaXQgc2hvdy1yZWYgLS1xdWlldCAtLXZlcmlmeSAtLSAicmVmcy9oZWFkcy8kYiIKKwkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCQlnaXQgYnJhbmNoICRiICRpID4gL2Rldi9udWxsCisJCWZpCisJZG9uZQorCisJIyBDcmVhdGUgYSB3b3JraW5nIHRyZWUgY29weSBvZiB0aGUga2VybmVsIGJ5IGNoZWNraW5nIG91dCBhIGJyYW5jaAorCW1hY2hpbmVfYnJhbmNoPSIke0AgZ2V0X21hY2hpbmVfYnJhbmNoKGQsICIke0tCUkFOQ0h9IiApfSIKKworCSMgY2hlY2tvdXQgYW5kIGNsb2JiZXIgYW55IHVuaW1wb3J0YW50IGZpbGVzCisJZ2l0IGNoZWNrb3V0IC1mICR7bWFjaGluZV9icmFuY2h9Cit9Citkb19rZXJuZWxfY2hlY2tvdXRbZGlyc10gPSAiJHtTfSIKKworYWRkdGFzayBrZXJuZWxfY2hlY2tvdXQgYmVmb3JlIGRvX2tlcm5lbF9tZXRhZGF0YSBhZnRlciBkb191bnBhY2sKK2FkZHRhc2sga2VybmVsX21ldGFkYXRhIGFmdGVyIGRvX3ZhbGlkYXRlX2JyYW5jaGVzIGRvX3VucGFjayBiZWZvcmUgZG9fcGF0Y2gKK2RvX2tlcm5lbF9tZXRhZGF0YVtkZXBlbmRzXSA9ICJrZXJuLXRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitkb19rZXJuZWxfY29uZmlnbWVbZGlyc10gKz0gIiR7U30gJHtCfSIKK2RvX2tlcm5lbF9jb25maWdtZSgpIHsKKwliYm5vdGUgImtlcm5lbCBjb25maWdtZSIKKwlleHBvcnQgS01FVEE9JHtLTUVUQX0KKworCWlmIFsgLW4gIiR7S0NPTkZJR19NT0RFfSIgXTsgdGhlbgorCQljb25maWdtZWZsYWdzPSR7S0NPTkZJR19NT0RFfQorCWVsc2UKKwkJIyBJZiBhIGRlZmNvbmZpZyB3YXMgcGFzc2VkLCB1c2UgPW4gYXMgdGhlIGJhc2VsaW5lLCB3aGljaCBpcyBhY2hpZXZlZAorCQkjIHZpYSAtLWFsbG5vY29uZmlnCisJCWlmIFsgLWYgJHtXT1JLRElSfS9kZWZjb25maWcgXTsgdGhlbgorCQkJY29uZmlnbWVmbGFncz0iLS1hbGxub2NvbmZpZyIKKwkJZmkKKwlmaQorCisJY2QgJHtTfQorCVBBVEg9JHtQQVRIfToke1N9L3NjcmlwdHMvdXRpbAorCWNvbmZpZ21lICR7Y29uZmlnbWVmbGFnc30gLS1yZWNvbmZpZyAtLW91dHB1dCAke0J9ICR7TElOVVhfS0VSTkVMX1RZUEV9ICR7S01BQ0hJTkV9CisJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCWJiZmF0YWxfbG9nICJDb3VsZCBub3QgY29uZmlndXJlICR7S01BQ0hJTkV9LSR7TElOVVhfS0VSTkVMX1RZUEV9IgorCWZpCisJCisJZWNobyAiIyBHbG9iYWwgc2V0dGluZ3MgZnJvbSBsaW51eCByZWNpcGUiID4+ICR7Qn0vLmNvbmZpZworCWVjaG8gIkNPTkZJR19MT0NBTFZFUlNJT049IlwiJHtMSU5VWF9WRVJTSU9OX0VYVEVOU0lPTn1cIiA+PiAke0J9Ly5jb25maWcKK30KKworYWRkdGFzayBrZXJuZWxfY29uZmlnbWUgYmVmb3JlIGRvX2NvbmZpZ3VyZSBhZnRlciBkb19wYXRjaAorCitweXRob24gZG9fa2VybmVsX2NvbmZpZ2NoZWNrKCkgeworICAgIGltcG9ydCByZSwgc3RyaW5nLCBzeXMKKworICAgICMgaWYgS01FVEEgaXNuJ3Qgc2V0IGdsb2JhbGx5IGJ5IGEgcmVjaXBlIHVzaW5nIHRoaXMgcm91dGluZSwgd2UgbmVlZCB0bworICAgICMgc2V0IHRoZSBkZWZhdWx0IHRvICdtZXRhJy4gT3RoZXJ3aXNlLCBrY29uZl9jaGVjayBpcyBub3QgcGFzc2VkIGEgdmFsaWQKKyAgICAjIG1ldGEtc2VyaWVzIGZvciBwcm9jZXNzaW5nCisgICAga21ldGEgPSBkLmdldFZhciggIktNRVRBIiwgVHJ1ZSApIG9yICJtZXRhIgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhrbWV0YSk6CisgICAgICAgIGttZXRhID0gIi4iICsga21ldGEKKworICAgIHBhdGhwcmVmaXggPSAiZXhwb3J0IFBBVEg9JXM6JXM7ICIgJSAoZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKSwgIiR7U30vc2NyaXB0cy91dGlsLyIpCisgICAgY21kID0gZC5leHBhbmQoImNkICR7U307IGtjb25mX2NoZWNrIC1jb25maWcgJXMvbWV0YS1zZXJpZXMgJHtTfSAke0J9IiAlIGttZXRhKQorICAgIHJldCwgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCIlcyVzIiAlIChwYXRocHJlZml4LCBjbWQpKQorCisgICAgY29uZmlnX2NoZWNrX3Zpc2liaWxpdHkgPSBpbnQoZC5nZXRWYXIoICJLQ09ORl9BVURJVF9MRVZFTCIsIFRydWUgKSBvciAwKQorICAgIGJzcF9jaGVja192aXNpYmlsaXR5ID0gaW50KGQuZ2V0VmFyKCAiS0NPTkZfQlNQX0FVRElUX0xFVkVMIiwgVHJ1ZSApIG9yIDApCisKKyAgICAjIGlmIGNvbmZpZyBjaGVjayB2aXNpYmlsaXR5IGlzIG5vbi16ZXJvLCByZXBvcnQgZHJvcHBlZCBjb25maWd1cmF0aW9uIHZhbHVlcworICAgIG1pc21hdGNoX2ZpbGUgPSAiJHtTfS8iICsga21ldGEgKyAiLyIgKyAibWlzbWF0Y2guY2ZnIgorICAgIGlmIG9zLnBhdGguZXhpc3RzKG1pc21hdGNoX2ZpbGUpOgorICAgICAgICBpZiBjb25maWdfY2hlY2tfdmlzaWJpbGl0eToKKyAgICAgICAgICAgIHdpdGggb3BlbiAobWlzbWF0Y2hfZmlsZSwgInIiKSBhcyBteWZpbGU6CisgICAgICAgICAgICAgICAgcmVzdWx0cyA9IG15ZmlsZS5yZWFkKCkKKyAgICAgICAgICAgICAgICBiYi53YXJuKCAiW2tlcm5lbCBjb25maWddOiBzcGVjaWZpZWQgdmFsdWVzIGRpZCBub3QgbWFrZSBpdCBpbnRvIHRoZSBrZXJuZWwncyBmaW5hbCBjb25maWd1cmF0aW9uOlxuXG4lcyIgJSByZXN1bHRzKQorCisgICAgIyBpZiBjb25maWcgY2hlY2sgdmlzaWJpbGl0eSBpcyBsZXZlbCAyIG9yIGhpZ2hlciwgcmVwb3J0IG5vbi1oYXJkd2FyZSBvcHRpb25zCisgICAgbm9uaHdfZmlsZSA9ICIke1N9LyIgKyBrbWV0YSArICIvIiArICJub25od19yZXBvcnQuY2ZnIgorICAgIGlmIG9zLnBhdGguZXhpc3RzKG5vbmh3X2ZpbGUpOgorICAgICAgICBpZiBjb25maWdfY2hlY2tfdmlzaWJpbGl0eSA+IDE6CisgICAgICAgICAgICB3aXRoIG9wZW4gKG5vbmh3X2ZpbGUsICJyIikgYXMgbXlmaWxlOgorICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBteWZpbGUucmVhZCgpCisgICAgICAgICAgICAgICAgYmIud2FybiggIltrZXJuZWwgY29uZmlnXTogQlNQIHNwZWNpZmllZCBub24taHcgY29uZmlndXJhdGlvbjpcblxuJXMiICUgcmVzdWx0cykKKworICAgIGJzcF9kZXNjID0gIiR7U30vIiArIGttZXRhICsgIi8iICsgInRvcF90Z3QiCisgICAgaWYgb3MucGF0aC5leGlzdHMoYnNwX2Rlc2MpIGFuZCBic3BfY2hlY2tfdmlzaWJpbGl0eSA+IDE6CisgICAgICAgIHdpdGggb3BlbiAoYnNwX2Rlc2MsICJyIikgYXMgbXlmaWxlOgorICAgICAgICAgICAgYnNwX3RndCA9IG15ZmlsZS5yZWFkKCkKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgiXiguKilzY3JhdGNoLm9iaiguKikkIiwgYnNwX3RndCkKKyAgICAgICAgICAgIGlmIG5vdCBtIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgYmIud2FybiggIltrZXJuZWxdOiBBbiBhdXRvIGdlbmVyYXRlZCBCU1AgZGVzY3JpcHRpb24gd2FzIHVzZWQsIHRoaXMgbm9ybWFsbHkgaW5kaWNhdGVzIGEgbWlzY29uZmlndXJhdGlvbi5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICJDaGVjayB0aGF0IHlvdXIgbWFjaGluZSAoJXMpIGhhcyBhbiBhc3NvY2lhdGVkIGtlcm5lbCBkZXNjcmlwdGlvbi4iICUgIiR7TUFDSElORX0iICkKK30KKworIyBFbnN1cmUgdGhhdCB0aGUgYnJhbmNoZXMgKEJTUCBhbmQgbWV0YSkgYXJlIG9uIHRoZSBsb2NhdGlvbnMgc3BlY2lmaWVkIGJ5CisjIHRoZWlyIFNSQ1JFViB2YWx1ZXMuIElmIHRoZXkgYXJlIE5PVCBvbiB0aGUgcmlnaHQgY29tbWl0cywgdGhlIGJyYW5jaGVzCisjIGFyZSBjb3JyZWN0ZWQgdG8gdGhlIHByb3BlciBjb21taXQuCitkb192YWxpZGF0ZV9icmFuY2hlcygpIHsKKwlzZXQgK2UKKwljZCAke1N9CisKKwltYWNoaW5lX2JyYW5jaD0iJHtAIGdldF9tYWNoaW5lX2JyYW5jaChkLCAiJHtLQlJBTkNIfSIgKX0iCisJbWFjaGluZV9zcmNyZXY9IiR7U1JDUkVWX21hY2hpbmV9IgorCisJIyBpZiBTUkNSRVYgaXMgQVVUT1JFViBpdCBzaG93cyB1cCBhcyBBVVRPSU5DIHRoZXJlJ3Mgbm90aGluZyB0bworCSMgY2hlY2sgYW5kIHdlIGNhbiBleGl0IGVhcmx5CisJaWYgWyAiJHttYWNoaW5lX3NyY3Jldn0iID0gIkFVVE9JTkMiIF07IHRoZW4KKwkJYmJub3RlICJTUkNSRVYgdmFsaWRhdGlvbiBpcyBub3QgcmVxdWlyZWQgZm9yIEFVVE9SRVYiCisJZWxpZiBbICIke21hY2hpbmVfc3JjcmV2fSIgPSAiIiBdOyB0aGVuCisJCWlmIFsgIiR7U1JDUkVWfSIgIT0gIkFVVE9JTkMiIF0gJiYgWyAiJHtTUkNSRVZ9IiAhPSAiSU5WQUxJRCIgXTsgdGhlbgorCQkgICAgICAgIyBTUkNSRVZfbWFjaGluZV88TUFDSElORT4gd2FzIG5vdCBzZXQuIFRoaXMgbWVhbnMgdGhhdCBhIGN1c3RvbSByZWNpcGUKKwkJICAgICAgICMgdGhhdCBkb2Vzbid0IHVzZSB0aGUgU1JDUkVWX0ZPUk1BVCAibWFjaGluZV9tZXRhIiBpcyBiZWluZyBidWlsdC4gSW4KKwkJICAgICAgICMgdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIHJlc2V0IHRvIHRoZSBnaXZlIFNSQ1JFViBiZWZvcmUgaGVhZGluZyB0byBwYXRjaGluZworCQkgICAgICAgYmJub3RlICJjdXN0b20gcmVjaXBlIGlzIGJlaW5nIGJ1aWx0LCBmb3JjaW5nIFNSQ1JFViB0byAke1NSQ1JFVn0iCisJCSAgICAgICBmb3JjZV9zcmNyZXY9IiR7U1JDUkVWfSIKKwkJZmkKKwllbHNlCisJCWdpdCBjYXQtZmlsZSAtdCAke21hY2hpbmVfc3JjcmV2fSA+IC9kZXYvbnVsbAorCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCWJiZXJyb3IgIiR7bWFjaGluZV9zcmNyZXZ9IGlzIG5vdCBhIHZhbGlkIGNvbW1pdCBJRC4iCisJCQliYmZhdGFsX2xvZyAiVGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBtYXkgYmUgb3V0IG9mIHN5bmMiCisJCWZpCisJCWZvcmNlX3NyY3Jldj0ke21hY2hpbmVfc3JjcmV2fQorCWZpCisKKwlnaXQgY2hlY2tvdXQgLXEgLWYgJHttYWNoaW5lX2JyYW5jaH0KKwlpZiBbIC1uICIke2ZvcmNlX3NyY3Jldn0iIF07IHRoZW4KKwkJIyBzZWUgaWYgdGhlIGJyYW5jaCB3ZSBhcmUgYWJvdXQgdG8gcGF0Y2ggaGFzIGJlZW4gcHJvcGVybHkgcmVzZXQgdG8gdGhlIGRlZmluZWQKKwkJIyBTUkNSRVYgLi4gaWYgbm90LCB3ZSByZXNldCBpdC4KKwkJYnJhbmNoX2hlYWQ9YGdpdCByZXYtcGFyc2UgSEVBRGAKKwkJaWYgWyAiJHtmb3JjZV9zcmNyZXZ9IiAhPSAiJHticmFuY2hfaGVhZH0iIF07IHRoZW4KKwkJCWN1cnJlbnRfYnJhbmNoPWBnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEYAorCQkJZ2l0IGJyYW5jaCAiJGN1cnJlbnRfYnJhbmNoLW9yaWciCisJCQlnaXQgcmVzZXQgLS1oYXJkICR7Zm9yY2Vfc3JjcmV2fQorCQlmaQorCWZpCit9CisKKyMgTWFueSBzY3JpcHRzIHdhbnQgdG8gbG9vayBpbiBhcmNoLyRhcmNoL2Jvb3QgZm9yIHRoZSBib290YWJsZQorIyBpbWFnZS4gVGhpcyBwb3NlcyBhIHByb2JsZW0gZm9yIHZtbGludXggYmFzZWQgYm9vdGluZy4gVGhpcyAKKyMgdGFzayBhcnJhbmdlcyB0byBoYXZlIHZtbGludXggYXBwZWFyIGluIHRoZSBub3JtYWxpemVkIGRpcmVjdG9yeQorIyBsb2NhdGlvbi4KK2RvX2tlcm5lbF9saW5rX3ZtbGludXgoKSB7CisJaWYgWyAhIC1kICIke0J9L2FyY2gvJHtBUkNIfS9ib290IiBdOyB0aGVuCisJCW1rZGlyICR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QKKwlmaQorCWNkICR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QKKwlsbiAtc2YgLi4vLi4vLi4vdm1saW51eAorfQorCitPRV9URVJNSU5BTF9FWFBPUlRTICs9ICJLQlVJTERfT1VUUFVUIgorS0JVSUxEX09VVFBVVCA9ICIke0J9IgorCitweXRob24gKCkgeworICAgICMgSWYgZGlmZmNvbmZpZyBpcyBhdmFpbGFibGUsIGVuc3VyZSBpdCBydW5zIGFmdGVyIGtlcm5lbF9jb25maWdtZQorICAgIGlmICdkb19kaWZmY29uZmlnJyBpbiBkOgorICAgICAgICBiYi5idWlsZC5hZGR0YXNrKCdkb19kaWZmY29uZmlnJywgTm9uZSwgJ2RvX2tlcm5lbF9jb25maWdtZScsIGQpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYmRmZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwuYmJjbGFzcwpAQCAtMCwwICsxLDQ5MCBAQAoraW5oZXJpdCBsaW51eC1rZXJuZWwtYmFzZSBrZXJuZWwtbW9kdWxlLXNwbGl0CisKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL2tlcm5lbCIKK0RFUEVORFMgKz0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyBrbW9kLW5hdGl2ZSBkZXBtb2R3cmFwcGVyLWNyb3NzIGJjLW5hdGl2ZSIKKworUyA9ICIke1NUQUdJTkdfS0VSTkVMX0RJUn0iCitCID0gIiR7V09SS0RJUn0vYnVpbGQiCitLQlVJTERfT1VUUFVUID0gIiR7Qn0iCitPRV9URVJNSU5BTF9FWFBPUlRTICs9ICJLQlVJTERfT1VUUFVUIgorCisjIHdlIGluY2x1ZGUgZ2NjIGFib3ZlLCB3ZSBkb250IG5lZWQgdmlydHVhbC9saWJjCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitLRVJORUxfSU1BR0VUWVBFID89ICJ6SW1hZ2UiCitJTklUUkFNRlNfSU1BR0UgPz0gIiIKK0lOSVRSQU1GU19UQVNLID89ICIiCitJTklUUkFNRlNfSU1BR0VfQlVORExFID89ICIiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgaW1wb3J0IHJlCisKKyAgICBrZXJuZWx0eXBlID0gZC5nZXRWYXIoJ0tFUk5FTF9JTUFHRVRZUEUnLCBUcnVlKQorCisgICAgZC5zZXRWYXIoIktFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0UiLCByZS5zdWIocidcLmd6JCcsICcnLCBrZXJuZWx0eXBlKSkKKworICAgIGltYWdlID0gZC5nZXRWYXIoJ0lOSVRSQU1GU19JTUFHRScsIFRydWUpCisgICAgaWYgaW1hZ2U6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fYnVuZGxlX2luaXRyYW1mcycsICdkZXBlbmRzJywgJyAke0lOSVRSQU1GU19JTUFHRX06ZG9fcm9vdGZzJykKKworICAgICMgTk9URTogc2V0dGluZyBJTklUUkFNRlNfVEFTSyBpcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eQorICAgICMgICAgICAgVGhlIHByZWZlcnJlZCBtZXRob2QgaXMgdG8gc2V0IElOSVRSQU1GU19JTUFHRSwgYmVjYXVzZQorICAgICMgICAgICAgdGhpcyBJTklUUkFNRlNfVEFTSyBoYXMgY2lyY3VsYXIgZGVwZW5kZW5jeSBwcm9ibGVtcworICAgICMgICAgICAgaWYgdGhlIGluaXRyYW1mcyByZXF1aXJlcyBrZXJuZWwgbW9kdWxlcworICAgIGltYWdlX3Rhc2sgPSBkLmdldFZhcignSU5JVFJBTUZTX1RBU0snLCBUcnVlKQorICAgIGlmIGltYWdlX3Rhc2s6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fY29uZmlndXJlJywgJ2RlcGVuZHMnLCAnICR7SU5JVFJBTUZTX1RBU0t9JykKK30KKworIyBIZXJlIHdlIHB1bGwgaW4gYWxsIHZhcmlvdXMga2VybmVsIGltYWdlIHR5cGVzIHdoaWNoIHdlIHN1cHBvcnQuCisjCisjIEluIGNhc2UgeW91J3JlIHdvbmRlcmluZyB3aHkga2VybmVsLmJiY2xhc3MgaW5oZXJpdHMgdGhlIG90aGVyIGltYWdlCisjIHR5cGVzIGluc3RlYWQgb2YgdGhlIG90aGVyIHdheSBhcm91bmQsIHRoZSByZWFzb24gZm9yIHRoYXQgaXMgdG8KKyMgbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoIHZhcmlvdXMgY3VycmVudGx5IGV4aXN0aW5nIG1ldGEtbGF5ZXJzLgorIyBCeSBwdWxsaW5nIGluIHRoZSB2YXJpb3VzIGtlcm5lbCBpbWFnZSB0eXBlcyBoZXJlLCB3ZSByZXRhaW4gdGhlCisjIG9yaWdpbmFsIGJlaGF2aW9yIG9mIGtlcm5lbC5iYmNsYXNzLCBzbyBubyBtZXRhLWxheWVycyBzaG91bGQgZ2V0CisjIGJyb2tlbi4KKyMKKyMgS0VSTkVMX0NMQVNTRVMgYnkgZGVmYXVsdCBwdWxscyBpbiBrZXJuZWwtdWltYWdlLmJiY2xhc3MsIHNpbmNlIHRoaXMKKyMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aGVuIG9ubHkgdUltYWdlIHdhcyBzdXBwb3J0ZWQuIFRoaXMKKyMgdmFyaWFibGUgY2FuIGJlIGFwcGVuZGVkIGJ5IHVzZXJzIHdobyBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgbmV3IGtlcm5lbAorIyBpbWFnZSB0eXBlcy4KKworS0VSTkVMX0NMQVNTRVMgPz0gIiBrZXJuZWwtdWltYWdlICIKK2luaGVyaXQgJHtLRVJORUxfQ0xBU1NFU30KKworIyBPbGQgc3R5bGUga2VybmVscyBtYXkgc2V0ICR7U30gPSAke1dPUktESVJ9L2dpdCBmb3IgZXhhbXBsZQorIyBXZSBuZWVkIHRvIG1vdmUgdGhlc2Ugb3ZlciB0byBTVEFHSU5HX0tFUk5FTF9ESVIuIFdlIGNhbid0IGp1c3QKKyMgY3JlYXRlIHRoZSBzeW1saW5rIGluIGFkdmFuY2UgYXMgdGhlIGdpdCBmZXRjaGVyIGNhbid0IGNvcGUgd2l0aAorIyB0aGUgc3ltbGluay4KK2RvX3VucGFja1tjbGVhbmRpcnNdICs9ICIgJHtTfSAke1NUQUdJTkdfS0VSTkVMX0RJUn0gJHtCfSAke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSIKK2RvX2NsZWFuW2NsZWFuZGlyc10gKz0gIiAke1N9ICR7U1RBR0lOR19LRVJORUxfRElSfSAke0J9ICR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9IgorYmFzZV9kb191bnBhY2tfYXBwZW5kICgpIHsKKyAgICBzID0gZC5nZXRWYXIoIlMiLCBUcnVlKQorICAgIGlmIHNbLTFdID09ICcvJzoKKyAgICAgICAgIyBkcm9wIHRyYWlsaW5nIHNsYXNoLCBzbyB0aGF0IG9zLnN5bWxpbmsoa2VybnNyYywgcykgZG9lc24ndCB1c2UgcyBhcyBkaXJlY3RvcnkgbmFtZSBhbmQgZmFpbAorICAgICAgICBzPXNbOi0xXQorICAgIGtlcm5zcmMgPSBkLmdldFZhcigiU1RBR0lOR19LRVJORUxfRElSIiwgVHJ1ZSkKKyAgICBpZiBzICE9IGtlcm5zcmM6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihrZXJuc3JjKQorICAgICAgICBiYi51dGlscy5yZW1vdmUoa2VybnNyYywgcmVjdXJzZT1UcnVlKQorICAgICAgICBpZiBkLmdldFZhcigiRVhURVJOQUxTUkMiLCBUcnVlKToKKyAgICAgICAgICAgICMgV2l0aCBFWFRFUk5BTFNSQyBTIHdpbGwgbm90IGJlIHdpcGVkIHNvIHdlIGNhbiBzeW1saW5rIHRvIGl0CisgICAgICAgICAgICBvcy5zeW1saW5rKHMsIGtlcm5zcmMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbXBvcnQgc2h1dGlsCisgICAgICAgICAgICBzaHV0aWwubW92ZShzLCBrZXJuc3JjKQorICAgICAgICAgICAgb3Muc3ltbGluayhrZXJuc3JjLCBzKQorfQorCitpbmhlcml0IGtlcm5lbC1hcmNoIGRlcGxveQorCitQQUNLQUdFU19EWU5BTUlDICs9ICJea2VybmVsLW1vZHVsZS0uKiIKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5rZXJuZWwtaW1hZ2UtLioiCitQQUNLQUdFU19EWU5BTUlDICs9ICJea2VybmVsLWZpcm13YXJlLS4qIgorCitleHBvcnQgT1MgPSAiJHtUQVJHRVRfT1N9IgorZXhwb3J0IENST1NTX0NPTVBJTEUgPSAiJHtUQVJHRVRfUFJFRklYfSIKKworS0VSTkVMX1BSSU9SSVRZID89ICIke0BpbnQoZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLScpWzBdLnNwbGl0KCcrJylbMF0uc3BsaXQoJy4nKVswXSkgKiAxMDAwMCArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50KGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy0nKVswXS5zcGxpdCgnKycpWzBdLnNwbGl0KCcuJylbMV0pICogMTAwICsgXAorICAgICAgICAgICAgICAgICAgICAgICBpbnQoZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLScpWzBdLnNwbGl0KCcrJylbMF0uc3BsaXQoJy4nKVstMV0pfSIKKworS0VSTkVMX1JFTEVBU0UgPz0gIiR7S0VSTkVMX1ZFUlNJT059IgorCisjIFdoZXJlIGJ1aWx0IGtlcm5lbCBsaWVzIGluIHRoZSBrZXJuZWwgdHJlZQorS0VSTkVMX09VVFBVVCA/PSAiYXJjaC8ke0FSQ0h9L2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfSIKK0tFUk5FTF9JTUFHRURFU1QgPSAiYm9vdCIKKworIworIyBjb25maWd1cmF0aW9uCisjCitleHBvcnQgQ01ETElORV9DT05TT0xFID0gImNvbnNvbGU9JHtAZC5nZXRWYXIoIktFUk5FTF9DT05TT0xFIiwxKSBvciAidHR5UzAifSIKKworS0VSTkVMX1ZFUlNJT04gPSAiJHtAZ2V0X2tlcm5lbHZlcnNpb25faGVhZGVycygnJHtCfScpfSIKKworS0VSTkVMX0xPQ0FMVkVSU0lPTiA/PSAiIgorCisjIGtlcm5lbHMgYXJlIGdlbmVyYWxseSBtYWNoaW5lIHNwZWNpZmljCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCisjIFUtQm9vdCBzdXBwb3J0CitVQk9PVF9FTlRSWVBPSU5UID89ICIyMDAwODAwMCIKK1VCT09UX0xPQURBRERSRVNTID89ICIke1VCT09UX0VOVFJZUE9JTlR9IgorCisjIFNvbWUgTGludXgga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIG9uIHRoZSBjb21tYW5kIGxpbmUKK0tFUk5FTF9FWFRSQV9BUkdTID89ICIiCisKKyMgRm9yIHRoZSBrZXJuZWwsIHdlIGRvbid0IHdhbnQgdGhlICctZSBNQUtFRkxBR1M9JyBpbiBFWFRSQV9PRU1BS0UuCisjIFdlIGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUga2VybmVsIE1ha2VmaWxlIHZhcmlhYmxlcyBmcm9tIHRoZSBlbnZpcm9ubWVudAorRVhUUkFfT0VNQUtFID0gIiIKKworS0VSTkVMX0FMVF9JTUFHRVRZUEUgPz89ICIiCisKKyMgRGVmaW5lIHdoZXJlIHRoZSBrZXJuZWwgaGVhZGVycyBhcmUgaW5zdGFsbGVkIG9uIHRoZSB0YXJnZXQgYXMgd2VsbCBhcyB3aGVyZQorIyB0aGV5IGFyZSBzdGFnZWQuCitLRVJORUxfU1JDX1BBVEggPSAiL3Vzci9zcmMva2VybmVsIgorCitjb3B5X2luaXRyYW1mcygpIHsKKwllY2hvICJDb3B5aW5nIGluaXRyYW1mcyBpbnRvIC4vdXNyIC4uLiIKKwkjIEluIGNhc2UgdGhlIGRpcmVjdG9yeSBpcyBub3QgY3JlYXRlZCB5ZXQgZnJvbSB0aGUgZmlyc3QgcGFzcyBjb21waWxlOgorCW1rZGlyIC1wICR7Qn0vdXNyCisJIyBGaW5kIGFuZCB1c2UgdGhlIGZpcnN0IGluaXRyYW1mcyBpbWFnZSBhcmNoaXZlIHR5cGUgd2UgZmluZAorCXJtIC1mICR7Qn0vdXNyLyR7SU5JVFJBTUZTX0lNQUdFfS0ke01BQ0hJTkV9LmNwaW8KKwlmb3IgaW1nIGluIGNwaW8uZ3ogY3Bpby5sejQgY3Bpby5sem8gY3Bpby5sem1hIGNwaW8ueHo7IGRvCisJCWlmIFsgLWUgIiR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uJGltZyIgXTsgdGhlbgorCQkJY3AgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS4kaW1nICR7Qn0vdXNyLy4KKwkJCWNhc2UgJGltZyBpbgorCQkJKmd6KQorCQkJCWVjaG8gImd6aXAgZGVjb21wcmVzc2luZyBpbWFnZSIKKwkJCQlndW56aXAgLWYgJHtCfS91c3IvJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uJGltZworCQkJCWJyZWFrCisJCQkJOzsKKwkJCSpsejQpCisJCQkJZWNobyAibHo0IGRlY29tcHJlc3NpbmcgaW1hZ2UiCisJCQkJbHo0IC1kZiAke0J9L3Vzci8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS4kaW1nCisJCQkJYnJlYWsKKwkJCQk7OworCQkJKmx6bykKKwkJCQllY2hvICJsem8gZGVjb21wcmVzc2luZyBpbWFnZSIKKwkJCQlsem9wIC1kZiAke0J9L3Vzci8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS4kaW1nCisJCQkJYnJlYWsKKwkJCQk7OworCQkJKmx6bWEpCisJCQkJZWNobyAibHptYSBkZWNvbXByZXNzaW5nIGltYWdlIgorCQkJCWx6bWEgLWRmICR7Qn0vdXNyLyR7SU5JVFJBTUZTX0lNQUdFfS0ke01BQ0hJTkV9LiRpbWcKKwkJCQlicmVhaworCQkJCTs7CisJCQkqeHopCisJCQkJZWNobyAieHogZGVjb21wcmVzc2luZyBpbWFnZSIKKwkJCQl4eiAtZGYgJHtCfS91c3IvJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uJGltZworCQkJCWJyZWFrCisJCQkJOzsKKwkJCWVzYWMKKwkJZmkKKwlkb25lCisJZWNobyAiRmluaXNoZWQgY29weSBvZiBpbml0cmFtZnMgaW50byAuL3VzciIKK30KKworSU5JVFJBTUZTX0JBU0VfTkFNRSA9ICIke0tFUk5FTF9JTUFHRVRZUEV9LWluaXRyYW1mcy0ke1BWfS0ke1BSfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgorSU5JVFJBTUZTX0JBU0VfTkFNRVt2YXJkZXBzZXhjbHVkZV0gPSAiREFURVRJTUUiCitkb19idW5kbGVfaW5pdHJhbWZzICgpIHsKKwlpZiBbICEgLXogIiR7SU5JVFJBTUZTX0lNQUdFfSIgLWEgeCIke0lOSVRSQU1GU19JTUFHRV9CVU5ETEV9IiA9IHgxIF07IHRoZW4KKwkJZWNobyAiQ3JlYXRpbmcgYSBrZXJuZWwgaW1hZ2Ugd2l0aCBhIGJ1bmRsZWQgaW5pdHJhbWZzLi4uIgorCQljb3B5X2luaXRyYW1mcworCQlpZiBbIC1lICR7S0VSTkVMX09VVFBVVH0gXSA7IHRoZW4KKwkJCW12IC1mICR7S0VSTkVMX09VVFBVVH0gJHtLRVJORUxfT1VUUFVUfS5iYWsKKwkJZmkKKwkJdXNlX2FsdGVybmF0ZV9pbml0cmQ9Q09ORklHX0lOSVRSQU1GU19TT1VSQ0U9JHtCfS91c3IvJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uY3BpbworCQlrZXJuZWxfZG9fY29tcGlsZQorCQltdiAtZiAke0tFUk5FTF9PVVRQVVR9ICR7S0VSTkVMX09VVFBVVH0uaW5pdHJhbWZzCisJCW12IC1mICR7S0VSTkVMX09VVFBVVH0uYmFrICR7S0VSTkVMX09VVFBVVH0KKwkJIyBVcGRhdGUgaW5zdGFsbCBhcmVhCisJCWVjaG8gIlRoZXJlIGlzIGtlcm5lbCBpbWFnZSBidW5kbGVkIHdpdGggaW5pdHJhbWZzOiAke0J9LyR7S0VSTkVMX09VVFBVVH0uaW5pdHJhbWZzIgorCQlpbnN0YWxsIC1tIDA2NDQgJHtCfS8ke0tFUk5FTF9PVVRQVVR9LmluaXRyYW1mcyAke0R9L2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfS1pbml0cmFtZnMtJHtNQUNISU5FfS5iaW4KKwkJZWNobyAiJHtCfS8ke0tFUk5FTF9PVVRQVVR9LmluaXRyYW1mcyIKKwlmaQorfQorCitweXRob24gZG9fZGV2c2hlbGxfcHJlcGVuZCAoKSB7CisgICAgb3MuZW52aXJvblsiTERGTEFHUyJdID0gJycKK30KKworYWRkdGFzayBidW5kbGVfaW5pdHJhbWZzIGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX2RlcGxveQorCitrZXJuZWxfZG9fY29tcGlsZSgpIHsKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUyBNQUNISU5FCisJIyBUaGUgJHVzZV9hbHRlcm5hdGVfaW5pdHJkIGlzIG9ubHkgc2V0IGZyb20KKwkjIGRvX2J1bmRsZV9pbml0cmFtZnMoKSBUaGlzIHZhcmlhYmxlIGlzIHNwZWNpZmljYWxseSBmb3IgdGhlCisJIyBjYXNlIHdoZXJlIHdlIGFyZSBtYWtpbmcgYSBzZWNvbmQgcGFzcyBhdCB0aGUga2VybmVsCisJIyBjb21waWxhdGlvbiBhbmQgd2Ugd2FudCB0byBmb3JjZSB0aGUga2VybmVsIGJ1aWxkIHRvIHVzZSBhCisJIyBkaWZmZXJlbnQgaW5pdHJhbWZzIGltYWdlLiAgVGhlIHdheSB0byBkbyB0aGF0IGluIHRoZSBrZXJuZWwKKwkjIGlzIHRvIHNwZWNpZnk6CisJIyBtYWtlIC4uLmFyZ3MuLi4gQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9c29tZV9vdGhlcl9pbml0cmFtZnMuY3BpbworCWlmIFsgIiR1c2VfYWx0ZXJuYXRlX2luaXRyZCIgPSAiIiBdICYmIFsgIiR7SU5JVFJBTUZTX1RBU0t9IiAhPSAiIiBdIDsgdGhlbgorCQkjIFRoZSBvbGQgc3R5bGUgd2F5IG9mIGNvcHlpbmcgYW4gcHJlYnVpbHQgaW1hZ2UgYW5kIGJ1aWxkaW5nIGl0CisJCSMgaXMgdHVybmVkIG9uIHZpYSBJTlRJUkFNRlNfVEFTSyAhPSAiIgorCQljb3B5X2luaXRyYW1mcworCQl1c2VfYWx0ZXJuYXRlX2luaXRyZD1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0ke0J9L3Vzci8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS5jcGlvCisJZmkKKwlvZV9ydW5tYWtlICR7S0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRX0gJHtLRVJORUxfQUxUX0lNQUdFVFlQRX0gQ0M9IiR7S0VSTkVMX0NDfSIgTEQ9IiR7S0VSTkVMX0xEfSIgJHtLRVJORUxfRVhUUkFfQVJHU30gJHVzZV9hbHRlcm5hdGVfaW5pdHJkCisJaWYgdGVzdCAiJHtLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFfS5neiIgPSAiJHtLRVJORUxfSU1BR0VUWVBFfSI7IHRoZW4KKwkJZ3ppcCAtOWMgPCAiJHtLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFfSIgPiAiJHtLRVJORUxfT1VUUFVUfSIKKwlmaQorfQorCitkb19jb21waWxlX2tlcm5lbG1vZHVsZXMoKSB7CisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MgTUFDSElORQorCWlmIChncmVwIC1xIC1pIC1lICdeQ09ORklHX01PRFVMRVM9eSQnICR7Qn0vLmNvbmZpZyk7IHRoZW4KKwkJb2VfcnVubWFrZSAtQyAke0J9ICR7UEFSQUxMRUxfTUFLRX0gbW9kdWxlcyBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiAke0tFUk5FTF9FWFRSQV9BUkdTfQorCWVsc2UKKwkJYmJub3RlICJubyBtb2R1bGVzIHRvIGNvbXBpbGUiCisJZmkKK30KK2FkZHRhc2sgY29tcGlsZV9rZXJuZWxtb2R1bGVzIGFmdGVyIGRvX2NvbXBpbGUgYmVmb3JlIGRvX3N0cmlwCisKK2tlcm5lbF9kb19pbnN0YWxsKCkgeworCSMKKwkjIEZpcnN0IGluc3RhbGwgdGhlIG1vZHVsZXMKKwkjCisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MgTUFDSElORQorCWlmIChncmVwIC1xIC1pIC1lICdeQ09ORklHX01PRFVMRVM9eSQnIC5jb25maWcpOyB0aGVuCisJCW9lX3J1bm1ha2UgREVQTU9EPWVjaG8gSU5TVEFMTF9NT0RfUEFUSD0iJHtEfSIgbW9kdWxlc19pbnN0YWxsCisJCXJtICIke0R9L2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059L2J1aWxkIgorCQlybSAiJHtEfS9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfS9zb3VyY2UiCisJCSMgSWYgdGhlIGtlcm5lbC8gZGlyZWN0b3J5IGlzIGVtcHR5IHJlbW92ZSBpdCB0byBwcmV2ZW50IFFBIGlzc3VlcworCQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAiJHtEfS9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfS9rZXJuZWwiCisJZWxzZQorCQliYm5vdGUgIm5vIG1vZHVsZXMgdG8gaW5zdGFsbCIKKwlmaQorCisJIworCSMgSW5zdGFsbCB2YXJpb3VzIGtlcm5lbCBvdXRwdXQgKHpJbWFnZSwgbWFwIGZpbGUsIGNvbmZpZywgbW9kdWxlIHN1cHBvcnQgZmlsZXMpCisJIworCWluc3RhbGwgLWQgJHtEfS8ke0tFUk5FTF9JTUFHRURFU1R9CisJaW5zdGFsbCAtZCAke0R9L2Jvb3QKKwlpbnN0YWxsIC1tIDA2NDQgJHtLRVJORUxfT1VUUFVUfSAke0R9LyR7S0VSTkVMX0lNQUdFREVTVH0vJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfQorCWluc3RhbGwgLW0gMDY0NCBTeXN0ZW0ubWFwICR7RH0vYm9vdC9TeXN0ZW0ubWFwLSR7S0VSTkVMX1ZFUlNJT059CisJaW5zdGFsbCAtbSAwNjQ0IC5jb25maWcgJHtEfS9ib290L2NvbmZpZy0ke0tFUk5FTF9WRVJTSU9OfQorCWluc3RhbGwgLW0gMDY0NCB2bWxpbnV4ICR7RH0vYm9vdC92bWxpbnV4LSR7S0VSTkVMX1ZFUlNJT059CisJWyAtZSBNb2R1bGUuc3ltdmVycyBdICYmIGluc3RhbGwgLW0gMDY0NCBNb2R1bGUuc3ltdmVycyAke0R9L2Jvb3QvTW9kdWxlLnN5bXZlcnMtJHtLRVJORUxfVkVSU0lPTn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L21vZHVsZXMtbG9hZC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9tb2Rwcm9iZS5kCit9Citkb19pbnN0YWxsW3ByZWZ1bmNzXSArPSAicGFja2FnZV9nZXRfYXV0b19wciIKKworYWRkdGFzayBzaGFyZWRfd29ya2RpciBhZnRlciBkb19jb21waWxlIGJlZm9yZSBkb19jb21waWxlX2tlcm5lbG1vZHVsZXMKK2FkZHRhc2sgc2hhcmVkX3dvcmtkaXJfc2V0c2NlbmUKKworZG9fc2hhcmVkX3dvcmtkaXJfc2V0c2NlbmUgKCkgeworCWV4aXQgMQorfQorCitlbWl0X2RlcG1vZF9wa2dkYXRhKCkgeworCSMgU3Rhc2ggZGF0YSBmb3IgZGVwbW9kCisJaW5zdGFsbCAtZCAke1BLR0RFU1RXT1JLfS9rZXJuZWwtZGVwbW9kLworCWVjaG8gIiR7S0VSTkVMX1ZFUlNJT059IiA+ICR7UEtHREVTVFdPUkt9L2tlcm5lbC1kZXBtb2Qva2VybmVsLWFiaXZlcnNpb24KKwljcCAke0J9L1N5c3RlbS5tYXAgJHtQS0dERVNUV09SS30va2VybmVsLWRlcG1vZC9TeXN0ZW0ubWFwLSR7S0VSTkVMX1ZFUlNJT059Cit9CisKK1BBQ0tBR0VGVU5DUyArPSAiZW1pdF9kZXBtb2RfcGtnZGF0YSIKKworZG9fc2hhcmVkX3dvcmtkaXIgKCkgeworCWNkICR7Qn0KKworCWtlcm5lbGRpcj0ke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfQorCWluc3RhbGwgLWQgJGtlcm5lbGRpcgorCisJIworCSMgU3RvcmUgdGhlIGtlcm5lbCB2ZXJzaW9uIGluIHN5c3Jvb3RzIGZvciBtb2R1bGUtYmFzZS5iYmNsYXNzCisJIworCisJZWNobyAiJHtLRVJORUxfVkVSU0lPTn0iID4gJGtlcm5lbGRpci9rZXJuZWwtYWJpdmVyc2lvbgorCisJIyBDb3B5IGZpbGVzIHJlcXVpcmVkIGZvciBtb2R1bGUgYnVpbGRzCisJY3AgU3lzdGVtLm1hcCAka2VybmVsZGlyL1N5c3RlbS5tYXAtJHtLRVJORUxfVkVSU0lPTn0KKwljcCBNb2R1bGUuc3ltdmVycyAka2VybmVsZGlyLworCWNwIC5jb25maWcgJGtlcm5lbGRpci8KKwlta2RpciAtcCAka2VybmVsZGlyL2luY2x1ZGUvY29uZmlnCisJY3AgaW5jbHVkZS9jb25maWcva2VybmVsLnJlbGVhc2UgJGtlcm5lbGRpci9pbmNsdWRlL2NvbmZpZy9rZXJuZWwucmVsZWFzZQorCisJIyBXZSBjYW4gYWxzbyBjb3B5IG92ZXIgYWxsIHRoZSBnZW5lcmF0ZWQgZmlsZXMgYW5kIGF2b2lkIHNwZWNpYWwgY2FzZXMKKwkjIGxpa2UgdmVyc2lvbi5oLCBidXQgd2UndmUgb3B0ZWQgdG8ga2VlcCB0aGlzIHNtYWxsIHVudGlsIGZpbGUgY3JlZXAgc3RhcnRzCisJIyB0byBoYXBwZW4KKwlpZiBbIC1lIGluY2x1ZGUvbGludXgvdmVyc2lvbi5oIF07IHRoZW4KKwkJbWtkaXIgLXAgJGtlcm5lbGRpci9pbmNsdWRlL2xpbnV4CisJCWNwIGluY2x1ZGUvbGludXgvdmVyc2lvbi5oICRrZXJuZWxkaXIvaW5jbHVkZS9saW51eC92ZXJzaW9uLmgKKwlmaQorCisJIyBBcyBvZiBMaW51eCBrZXJuZWwgdmVyc2lvbiAzLjAuMSwgdGhlIGNsZWFuIHRhcmdldCByZW1vdmVzCisJIyBhcmNoL3Bvd2VycGMvbGliL2NydHNhdnJlcy5vIHdoaWNoIGlzIHByZXNlbnQgaW4KKwkjIEtCVUlMRF9MREZMQUdTX01PRFVMRSwgbWFraW5nIGl0IHJlcXVpcmVkIHRvIGJ1aWxkIGV4dGVybmFsIG1vZHVsZXMuCisJaWYgWyAke0FSQ0h9ID0gInBvd2VycGMiIF07IHRoZW4KKwkJbWtkaXIgLXAgJGtlcm5lbGRpci9hcmNoL3Bvd2VycGMvbGliLworCQljcCBhcmNoL3Bvd2VycGMvbGliL2NydHNhdnJlcy5vICRrZXJuZWxkaXIvYXJjaC9wb3dlcnBjL2xpYi9jcnRzYXZyZXMubworCWZpCisKKwlpZiBbIC1kIGluY2x1ZGUvZ2VuZXJhdGVkIF07IHRoZW4KKwkJbWtkaXIgLXAgJGtlcm5lbGRpci9pbmNsdWRlL2dlbmVyYXRlZC8KKwkJY3AgLWZSIGluY2x1ZGUvZ2VuZXJhdGVkLyogJGtlcm5lbGRpci9pbmNsdWRlL2dlbmVyYXRlZC8KKwlmaQorCisJaWYgWyAtZCBhcmNoLyR7QVJDSH0vaW5jbHVkZS9nZW5lcmF0ZWQgXTsgdGhlbgorCQlta2RpciAtcCAka2VybmVsZGlyL2FyY2gvJHtBUkNIfS9pbmNsdWRlL2dlbmVyYXRlZC8KKwkJY3AgLWZSIGFyY2gvJHtBUkNIfS9pbmNsdWRlL2dlbmVyYXRlZC8qICRrZXJuZWxkaXIvYXJjaC8ke0FSQ0h9L2luY2x1ZGUvZ2VuZXJhdGVkLworCWZpCit9CisKKyMgV2UgZG9uJ3QgbmVlZCB0byBzdGFnZSBhbnl0aGluZywgbm90IHRoZSBtb2R1bGVzL2Zpcm13YXJlIHNpbmNlIHRob3NlIHdvdWxkIGNsYXNoIHdpdGggbGludXgtZmlybXdhcmUKK3N5c3Jvb3Rfc3RhZ2VfYWxsICgpIHsKKwk6Cit9CisKK0tFUk5FTF9DT05GSUdfQ09NTUFORCA/PSAib2VfcnVubWFrZV9jYWxsIC1DICR7U30gTz0ke0J9IG9sZG5vY29uZmlnIHx8IHllcyAnJyB8IG9lX3J1bm1ha2UgLUMgJHtTfSBPPSR7Qn0gb2xkY29uZmlnIgorCitrZXJuZWxfZG9fY29uZmlndXJlKCkgeworCSMgZml4ZXMgZXh0cmEgKyBpbiAvbGliL21vZHVsZXMvMi42LjM3KworCSMgJCBzY3JpcHRzL3NldGxvY2FsdmVyc2lvbiAuID0+ICsKKwkjICQgbWFrZSBrZXJuZWx2ZXJzaW9uID0+IDIuNi4zNworCSMgJCBtYWtlIGtlcm5lbHJlbGVhc2UgPT4gMi42LjM3KworCXRvdWNoICR7Qn0vLnNjbXZlcnNpb24gJHtTfS8uc2NtdmVyc2lvbgorCisJaWYgWyAiJHtTfSIgIT0gIiR7Qn0iIF0gJiYgWyAtZiAiJHtTfS8uY29uZmlnIiBdICYmIFsgISAtZiAiJHtCfS8uY29uZmlnIiBdOyB0aGVuCisJCW12ICIke1N9Ly5jb25maWciICIke0J9Ly5jb25maWciCisJZmkKKworCSMgQ29weSBkZWZjb25maWcgdG8gLmNvbmZpZyBpZiAuY29uZmlnIGRvZXMgbm90IGV4aXN0LiBUaGlzIGFsbG93cworCSMgcmVjaXBlcyB0byBtYW5hZ2UgdGhlIC5jb25maWcgdGhlbXNlbHZlcyBpbiBkb19jb25maWd1cmVfcHJlcGVuZCgpLgorCWlmIFsgLWYgIiR7V09SS0RJUn0vZGVmY29uZmlnIiBdICYmIFsgISAtZiAiJHtCfS8uY29uZmlnIiBdOyB0aGVuCisJCWNwICIke1dPUktESVJ9L2RlZmNvbmZpZyIgIiR7Qn0vLmNvbmZpZyIKKwlmaQorCWV2YWwgJHtLRVJORUxfQ09ORklHX0NPTU1BTkR9Cit9CisKK2RvX3NhdmVkZWZjb25maWcoKSB7CisJb2VfcnVubWFrZSAtQyAke0J9IHNhdmVkZWZjb25maWcKK30KK2RvX3NhdmVkZWZjb25maWdbbm9zdGFtcF0gPSAiMSIKK2FkZHRhc2sgc2F2ZWRlZmNvbmZpZyBhZnRlciBkb19jb25maWd1cmUKKworaW5oZXJpdCBjbWwxCisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29tcGlsZSBkb19pbnN0YWxsIGRvX2NvbmZpZ3VyZQorCisjIGtlcm5lbC1iYXNlIGJlY29tZXMga2VybmVsLSR7S0VSTkVMX1ZFUlNJT059CisjIGtlcm5lbC1pbWFnZSBiZWNvbWVzIGtlcm5lbC1pbWFnZS0ke0tFUk5FTF9WRVJJU09OfQorUEFDS0FHRVMgPSAia2VybmVsIGtlcm5lbC1iYXNlIGtlcm5lbC12bWxpbnV4IGtlcm5lbC1pbWFnZSBrZXJuZWwtZGV2IGtlcm5lbC1tb2R1bGVzIgorRklMRVNfJHtQTn0gPSAiIgorRklMRVNfa2VybmVsLWJhc2UgPSAiL2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059L21vZHVsZXMub3JkZXIgL2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059L21vZHVsZXMuYnVpbHRpbiIKK0ZJTEVTX2tlcm5lbC1pbWFnZSA9ICIvYm9vdC8ke0tFUk5FTF9JTUFHRVRZUEV9KiIKK0ZJTEVTX2tlcm5lbC1kZXYgPSAiL2Jvb3QvU3lzdGVtLm1hcCogL2Jvb3QvTW9kdWxlLnN5bXZlcnMqIC9ib290L2NvbmZpZyogJHtLRVJORUxfU1JDX1BBVEh9IC9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfS9idWlsZCIKK0ZJTEVTX2tlcm5lbC12bWxpbnV4ID0gIi9ib290L3ZtbGludXgqIgorRklMRVNfa2VybmVsLW1vZHVsZXMgPSAiIgorUkRFUEVORFNfa2VybmVsID0gImtlcm5lbC1iYXNlIgorIyBBbGxvdyBtYWNoaW5lcyB0byBvdmVycmlkZSB0aGlzIGRlcGVuZGVuY3kgaWYga2VybmVsIGltYWdlIGZpbGVzIGFyZSAKKyMgbm90IHdhbnRlZCBpbiBpbWFnZXMgYXMgc3RhbmRhcmQKK1JERVBFTkRTX2tlcm5lbC1iYXNlID89ICJrZXJuZWwtaW1hZ2UiCitQS0dfa2VybmVsLWltYWdlID0gImtlcm5lbC1pbWFnZS0ke0BsZWdpdGltaXplX3BhY2thZ2VfbmFtZSgnJHtLRVJORUxfVkVSU0lPTn0nKX0iCitSREVQRU5EU19rZXJuZWwtaW1hZ2UgKz0gIiR7QGJhc2VfY29uZGl0aW9uYWwoJ0tFUk5FTF9JTUFHRVRZUEUnLCAndm1saW51eCcsICdrZXJuZWwtdm1saW51eCcsICcnLCBkKX0iCitQS0dfa2VybmVsLWJhc2UgPSAia2VybmVsLSR7QGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKCcke0tFUk5FTF9WRVJTSU9OfScpfSIKK1JQUk9WSURFU19rZXJuZWwtYmFzZSArPSAia2VybmVsLSR7S0VSTkVMX1ZFUlNJT059IgorQUxMT1dfRU1QVFlfa2VybmVsID0gIjEiCitBTExPV19FTVBUWV9rZXJuZWwtYmFzZSA9ICIxIgorQUxMT1dfRU1QVFlfa2VybmVsLWltYWdlID0gIjEiCitBTExPV19FTVBUWV9rZXJuZWwtbW9kdWxlcyA9ICIxIgorREVTQ1JJUFRJT05fa2VybmVsLW1vZHVsZXMgPSAiS2VybmVsIG1vZHVsZXMgbWV0YSBwYWNrYWdlIgorCitwa2dfcG9zdGluc3Rfa2VybmVsLWJhc2UgKCkgeworCWlmIFsgISAtZSAiJEQvbGliL21vZHVsZXMvJHtLRVJORUxfVkVSU0lPTn0iIF07IHRoZW4KKwkJbWtkaXIgLXAgJEQvbGliL21vZHVsZXMvJHtLRVJORUxfVkVSU0lPTn0KKwlmaQorCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCWRlcG1vZHdyYXBwZXIgLWEgLWIgJEQgJHtLRVJORUxfVkVSU0lPTn0KKwllbHNlCisJCWRlcG1vZCAtYSAke0tFUk5FTF9WRVJTSU9OfQorCWZpCit9CisKK3BrZ19wb3N0aW5zdF9rZXJuZWwtaW1hZ2UgKCkgeworCXVwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1pbnN0YWxsIC8ke0tFUk5FTF9JTUFHRURFU1R9LyR7S0VSTkVMX0lNQUdFVFlQRX0gJHtLRVJORUxfSU1BR0VUWVBFfSAvJHtLRVJORUxfSU1BR0VERVNUfS8ke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059ICR7S0VSTkVMX1BSSU9SSVRZfSB8fCB0cnVlCit9CisKK3BrZ19wb3N0cm1fa2VybmVsLWltYWdlICgpIHsKKwl1cGRhdGUtYWx0ZXJuYXRpdmVzIC0tcmVtb3ZlICR7S0VSTkVMX0lNQUdFVFlQRX0gJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfSB8fCB0cnVlCit9CisKK1BBQ0tBR0VTUExJVEZVTkNTX3ByZXBlbmQgPSAic3BsaXRfa2VybmVsX3BhY2thZ2VzICIKKworcHl0aG9uIHNwbGl0X2tlcm5lbF9wYWNrYWdlcyAoKSB7CisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcm9vdD0nL2xpYi9maXJtd2FyZScsIGZpbGVfcmVnZXg9J14oLiopXC4oYmlufGZ3fGNpc3xkc3ApJCcsIG91dHB1dF9wYXR0ZXJuPSdrZXJuZWwtZmlybXdhcmUtJXMnLCBkZXNjcmlwdGlvbj0nRmlybXdhcmUgZm9yICVzJywgcmVjdXJzaXZlPVRydWUsIGV4dHJhX2RlcGVuZHM9JycpCit9CisKK2RvX3N0cmlwKCkgeworCWlmIFsgLW4gIiR7S0VSTkVMX0lNQUdFX1NUUklQX0VYVFJBX1NFQ1RJT05TfSIgXTsgdGhlbgorCQlpZiBbICIke0tFUk5FTF9JTUFHRVRZUEV9IiAhPSAidm1saW51eCIgXTsgdGhlbgorCQkJYmJ3YXJuICJpbWFnZSB0eXBlIHdpbGwgbm90IGJlIHN0cmlwcGVkIChub3Qgc3VwcG9ydGVkKTogJHtLRVJORUxfSU1BR0VUWVBFfSIKKwkJCXJldHVybgorCQlmaQorCisJCWNkICR7Qn0KKwkJaGVhZGVycz1gIiRDUk9TU19DT01QSUxFInJlYWRlbGYgLVMgJHtLRVJORUxfT1VUUFVUfSB8IFwKKwkJCSAgZ3JlcCAiXiBcezEsXH1cW1swLTkgXVx7MSxcfVxdIFteIF0iIHwgXAorCQkJICBzZWQgInMvXiBcezEsXH1cW1swLTkgXVx7MSxcfVxdIC8vIiB8IFwKKwkJCSAgZ2F3ayAne3ByaW50ICQxfSdgCisKKwkJZm9yIHN0ciBpbiAke0tFUk5FTF9JTUFHRV9TVFJJUF9FWFRSQV9TRUNUSU9OU307IGRvIHsKKwkJCWlmIFsgIiRoZWFkZXJzIiAhPSAqIiRzdHIiKiBdOyB0aGVuCisJCQkJYmJ3YXJuICJTZWN0aW9uIG5vdCBmb3VuZDogJHN0ciI7CisJCQlmaQorCisJCQkiJENST1NTX0NPTVBJTEUic3RyaXAgLXMgLVIgJHN0ciAke0tFUk5FTF9PVVRQVVR9CisJCX07IGRvbmUKKworCQliYm5vdGUgIktFUk5FTF9JTUFHRV9TVFJJUF9FWFRSQV9TRUNUSU9OUyBpcyBzZXQsIHN0cmlwcGluZyBzZWN0aW9uczoiIFwKKwkJCSIke0tFUk5FTF9JTUFHRV9TVFJJUF9FWFRSQV9TRUNUSU9OU30iCisJZmk7Cit9Citkb19zdHJpcFtkaXJzXSA9ICIke0J9IgorCithZGR0YXNrIGRvX3N0cmlwIGJlZm9yZSBkb19zaXplY2hlY2sgYWZ0ZXIgZG9fa2VybmVsX2xpbmtfdm1saW51eAorCisjIFN1cHBvcnQgY2hlY2tpbmcgdGhlIGtlcm5lbCBzaXplIHNpbmNlIHNvbWUga2VybmVscyBuZWVkIHRvIHJlc2lkZSBpbiBwYXJ0aXRpb25zCisjIHdpdGggYSBmaXhlZCBsZW5ndGggb3IgdGhlcmUgaXMgYSBsaW1pdCBpbiB0cmFuc2ZlcnJpbmcgdGhlIGtlcm5lbCB0byBtZW1vcnkKK2RvX3NpemVjaGVjaygpIHsKKwlpZiBbICEgLXogIiR7S0VSTkVMX0lNQUdFX01BWFNJWkV9IiBdOyB0aGVuCisJCWludmFsaWQ9YGVjaG8gJHtLRVJORUxfSU1BR0VfTUFYU0laRX0gfCBzZWQgJ3MvWzAtOV0vL2cnYAorCQlpZiBbIC1uICIkaW52YWxpZCIgXTsgdGhlbgorCQkJZGllICJJbnZhbGlkIEtFUk5FTF9JTUFHRV9NQVhTSVpFOiAke0tFUk5FTF9JTUFHRV9NQVhTSVpFfSwgc2hvdWxkIGJlIGFuIGludGVnZXJ4IChUaGUgdW5pdCBpcyBLYnl0ZXMpIgorCQlmaQorCQlzaXplPWBkdSAta3MgJHtCfS8ke0tFUk5FTF9PVVRQVVR9IHwgYXdrICd7IHByaW50ICQxfSdgCisJCWlmIFsgJHNpemUgLWdlICR7S0VSTkVMX0lNQUdFX01BWFNJWkV9IF07IHRoZW4KKwkJCWRpZSAiVGhpcyBrZXJuZWwgKHNpemU9JHNpemUoSykgPiAke0tFUk5FTF9JTUFHRV9NQVhTSVpFfShLKSkgaXMgdG9vIGJpZyBmb3IgeW91ciBkZXZpY2UuIFBsZWFzZSByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGtlcm5lbCBieSBtYWtpbmcgbW9yZSBvZiBpdCBtb2R1bGFyLiIKKwkJZmkKKwlmaQorfQorZG9fc2l6ZWNoZWNrW2RpcnNdID0gIiR7Qn0iCisKK2FkZHRhc2sgc2l6ZWNoZWNrIGJlZm9yZSBkb19pbnN0YWxsIGFmdGVyIGRvX3N0cmlwCisKK0tFUk5FTF9JTUFHRV9CQVNFX05BTUUgPz0gIiR7S0VSTkVMX0lNQUdFVFlQRX0tJHtQS0dFfS0ke1BLR1Z9LSR7UEtHUn0tJHtNQUNISU5FfS0ke0RBVEVUSU1FfSIKKyMgRG9uJ3QgaW5jbHVkZSB0aGUgREFURVRJTUUgdmFyaWFibGUgaW4gdGhlIHNzdGF0ZSBwYWNrYWdlIHNpZ25hdHVyZXMKK0tFUk5FTF9JTUFHRV9CQVNFX05BTUVbdmFyZGVwc2V4Y2x1ZGVdID0gIkRBVEVUSU1FIgorS0VSTkVMX0lNQUdFX1NZTUxJTktfTkFNRSA/PSAiJHtLRVJORUxfSU1BR0VUWVBFfS0ke01BQ0hJTkV9IgorTU9EVUxFX0lNQUdFX0JBU0VfTkFNRSA/PSAibW9kdWxlcy0ke1BLR0V9LSR7UEtHVn0tJHtQS0dSfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgorTU9EVUxFX0lNQUdFX0JBU0VfTkFNRVt2YXJkZXBzZXhjbHVkZV0gPSAiREFURVRJTUUiCitNT0RVTEVfVEFSQkFMTF9CQVNFX05BTUUgPz0gIiR7TU9EVUxFX0lNQUdFX0JBU0VfTkFNRX0udGd6IgorIyBEb24ndCBpbmNsdWRlIHRoZSBEQVRFVElNRSB2YXJpYWJsZSBpbiB0aGUgc3N0YXRlIHBhY2thZ2Ugc2lnbmF0dXJlcworTU9EVUxFX1RBUkJBTExfU1lNTElOS19OQU1FID89ICJtb2R1bGVzLSR7TUFDSElORX0udGd6IgorTU9EVUxFX1RBUkJBTExfREVQTE9ZID89ICIxIgorCitrZXJuZWxfZG9fZGVwbG95KCkgeworCWluc3RhbGwgLW0gMDY0NCAke0tFUk5FTF9PVVRQVVR9ICR7REVQTE9ZRElSfS8ke0tFUk5FTF9JTUFHRV9CQVNFX05BTUV9LmJpbgorCWlmIFsgJHtNT0RVTEVfVEFSQkFMTF9ERVBMT1l9ID0gIjEiIF0gJiYgKGdyZXAgLXEgLWkgLWUgJ15DT05GSUdfTU9EVUxFUz15JCcgLmNvbmZpZyk7IHRoZW4KKwkJbWtkaXIgLXAgJHtEfS9saWIKKwkJdGFyIC1jdnpmICR7REVQTE9ZRElSfS8ke01PRFVMRV9UQVJCQUxMX0JBU0VfTkFNRX0gLUMgJHtEfSBsaWIKKwkJbG4gLXNmICR7TU9EVUxFX1RBUkJBTExfQkFTRV9OQU1FfSAke0RFUExPWURJUn0vJHtNT0RVTEVfVEFSQkFMTF9TWU1MSU5LX05BTUV9CisJZmkKKworCWxuIC1zZiAke0tFUk5FTF9JTUFHRV9CQVNFX05BTUV9LmJpbiAke0RFUExPWURJUn0vJHtLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FfS5iaW4KKwlsbiAtc2YgJHtLRVJORUxfSU1BR0VfQkFTRV9OQU1FfS5iaW4gJHtERVBMT1lESVJ9LyR7S0VSTkVMX0lNQUdFVFlQRX0KKworCWNwICR7Q09SRUJBU0V9L21ldGEvZmlsZXMvZGVwbG95ZGlyX3JlYWRtZS50eHQgJHtERVBMT1lESVJ9L1JFQURNRV8tX0RPX05PVF9ERUxFVEVfRklMRVNfSU5fVEhJU19ESVJFQ1RPUlkudHh0CisKKwljZCAke0J9CisJIyBVcGRhdGUgZGVwbG95IGRpcmVjdG9yeQorCWlmIFsgLWUgIiR7S0VSTkVMX09VVFBVVH0uaW5pdHJhbWZzIiBdOyB0aGVuCisJCWVjaG8gIkNvcHlpbmcgZGVwbG95IGtlcm5lbC1pbml0cmFtZnMgaW1hZ2UgYW5kIHNldHRpbmcgdXAgbGlua3MuLi4iCisJCWluaXRyYW1mc19iYXNlX25hbWU9JHtJTklUUkFNRlNfQkFTRV9OQU1FfQorCQlpbml0cmFtZnNfc3ltbGlua19uYW1lPSR7S0VSTkVMX0lNQUdFVFlQRX0taW5pdHJhbWZzLSR7TUFDSElORX0KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7S0VSTkVMX09VVFBVVH0uaW5pdHJhbWZzICR7REVQTE9ZRElSfS8ke2luaXRyYW1mc19iYXNlX25hbWV9LmJpbgorCQljZCAke0RFUExPWURJUn0KKwkJbG4gLXNmICR7aW5pdHJhbWZzX2Jhc2VfbmFtZX0uYmluICR7aW5pdHJhbWZzX3N5bWxpbmtfbmFtZX0uYmluCisJZmkKK30KK2RvX2RlcGxveVtkaXJzXSA9ICIke0RFUExPWURJUn0gJHtCfSIKK2RvX2RlcGxveVtwcmVmdW5jc10gKz0gInBhY2thZ2VfZ2V0X2F1dG9fcHIiCisKK2FkZHRhc2sgZGVwbG95IGFmdGVyIGRvX3BvcHVsYXRlX3N5c3Jvb3QKKworRVhQT1JUX0ZVTkNUSU9OUyBkb19kZXBsb3kKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsc3JjLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWxzcmMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWZkNDZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsc3JjLmJiY2xhc3MKQEAgLTAsMCArMSwxMCBAQAorUyA9ICIke1NUQUdJTkdfS0VSTkVMX0RJUn0iCitkb19mZXRjaFtub2V4ZWNdID0gIjEiCitkb191bnBhY2tbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3BhdGNoIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2VbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitLRVJORUxfVkVSU0lPTiA9ICIke0BnZXRfa2VybmVsdmVyc2lvbl9maWxlKCIke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSIpfSIKKworaW5oZXJpdCBsaW51eC1rZXJuZWwtYmFzZQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saWJfcGFja2FnZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGliX3BhY2thZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODQ5ZjU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGliX3BhY2thZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDcgQEAKKyMKKyMgJHtQTn0tYmluIGlzIGRlZmluZWQgaW4gYml0YmFrZS5jb25mCisjCisjIFdlIG5lZWQgdG8gYWxsb3cgdGhlIG90aGVyIHBhY2thZ2VzIHRvIGJlIGdyZWVkeSB3aXRoIHdoYXQgdGhleQorIyB3YW50IG91dCBvZiAvdXNyL2JpbiBhbmQgL3Vzci9zYmluIGJlZm9yZSAke1BOfS1iaW4gZ2V0cyBncmVlZHkuCisjIAorUEFDS0FHRV9CRUZPUkVfUE4gPSAiJHtQTn0tYmluIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGliYy1jb21tb24uYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpYmMtY29tbW9uLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjODAxNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpYmMtY29tbW9uLmJiY2xhc3MKQEAgLTAsMCArMSw0MyBAQAorZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGxfcm9vdD0ke0R9IGluc3RhbGwKKwlmb3IgciBpbiAke3JwY3N2Y307IGRvCisJCWg9YGVjaG8gJHJ8c2VkIC1lJ3MsXC54JCwuaCwnYAorCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9zdW5ycGMvcnBjc3ZjLyRoICR7RH0vJHtpbmNsdWRlZGlyfS9ycGNzdmMvCisJZG9uZQorCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9LyAKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ldGMvbGQuc28uY29uZiAke0R9LyR7c3lzY29uZmRpcn0vCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbGVkaXJ9CisJbWFrZSAtZiAke1dPUktESVJ9L2dlbmVyYXRlLXN1cHBvcnRlZC5tayBJTj0iJHtTfS9sb2NhbGVkYXRhL1NVUFBPUlRFRCIgT1VUPSIke1dPUktESVJ9L1NVUFBPUlRFRCIKKwkjIGdldCByaWQgb2Ygc29tZSBicm9rZW4gZmlsZXMuLi4KKwlmb3IgaSBpbiAke0dMSUJDX0JST0tFTl9MT0NBTEVTfTsgZG8KKwkJZ3JlcCAtdiAkaSAke1dPUktESVJ9L1NVUFBPUlRFRCA+ICR7V09SS0RJUn0vU1VQUE9SVEVELnRtcAorCQltdiAke1dPUktESVJ9L1NVUFBPUlRFRC50bXAgJHtXT1JLRElSfS9TVVBQT1JURUQKKwlkb25lCisJcm0gLWYgJHtEfSR7c3lzY29uZmRpcn0vcnBjCisJcm0gLXJmICR7RH0ke2RhdGFkaXJ9L3pvbmVpbmZvCisJcm0gLXJmICR7RH0ke2xpYmV4ZWNkaXJ9L2dldGNvbmYKK30KKworZGVmIGdldF9saWJjX2ZwdV9zZXR0aW5nKGJiLCBkKToKKyAgICBpZiBkLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpIGluIFsgJ3NvZnQnLCAncHBjLWVmZCcgXToKKyAgICAgICAgcmV0dXJuICItLXdpdGhvdXQtZnAiCisgICAgcmV0dXJuICIiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBpZiBkLmdldFZhcignREVCSUFOX05BTUVTJywgVHJ1ZSk6CisgICAgICAgIHBrZ3MgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgIGJwbiA9IGQuZ2V0VmFyKCdCUE4nLCBUcnVlKQorICAgICAgICBwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAiIgorICAgICAgICAjIFNldCB0aGUgYmFzZSBwYWNrYWdlLi4uCisgICAgICAgIGQuc2V0VmFyKCdQS0dfJyArIHByZWZpeCArIGJwbiwgcHJlZml4ICsgJ2xpYmM2JykKKyAgICAgICAgbGliY3ByZWZpeCA9IHByZWZpeCArIGJwbiArICctJworICAgICAgICBmb3IgcCBpbiBwa2dzOgorICAgICAgICAgICAgIyBBbmQgYWxsIHRoZSBzdWJwYWNrYWdlcy4KKyAgICAgICAgICAgIGlmIHAuc3RhcnRzd2l0aChsaWJjcHJlZml4KToKKyAgICAgICAgICAgICAgICByZW5hbWVkID0gcC5yZXBsYWNlKGJwbiwgJ2xpYmM2JywgMSkKKyAgICAgICAgICAgICAgICBkLnNldFZhcignUEtHXycgKyBwLCByZW5hbWVkKQorICAgICAgICAjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkIC1kYmcgcGFja2FnZQorICAgICAgICBkLmFwcGVuZFZhcignUlBST1ZJREVTXycgKyBsaWJjcHJlZml4ICsgJ2RiZycsICcgJyArIHByZWZpeCArICdsaWJjLWRiZycpCisgICAgICAgIGQuYXBwZW5kVmFyKCdSQ09ORkxJQ1RTXycgKyBsaWJjcHJlZml4ICsgJ2RiZycsICcgJyArIHByZWZpeCArICdsaWJjLWRiZycpCisgICAgICAgIGQuYXBwZW5kVmFyKCdSUkVQTEFDRVNfJyArIGxpYmNwcmVmaXggKyAnZGJnJywgJyAnICsgcHJlZml4ICsgJ2xpYmMtZGJnJykKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpYmMtcGFja2FnZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGliYy1wYWNrYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiZTY5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpYmMtcGFja2FnZS5iYmNsYXNzCkBAIC0wLDAgKzEsMzg4IEBACisjCisjIFRoaXMgY2xhc3Mga25vd3MgaG93IHRvIHBhY2thZ2UgdXAgW2VdZ2xpYmMuIEl0cyBzaGFyZWQgc2luY2UgcHJlYnVpbGQgYmluYXJ5IHRvb2xjaGFpbnMKKyMgbWF5IG5lZWQgcGFja2FnaW5nIGFuZCBpdHMgcG9pbnRsZXNzIHRvIGR1cGxpY2F0ZSB0aGlzIGNvZGUuCisjCisjIENhbGxlciBzaG91bGQgc2V0IEdMSUJDX0lOVEVSTkFMX1VTRV9CSU5BUllfTE9DQUxFIHRvIG9uZSBvZjoKKyMgICJjb21waWxlIiAtIFVzZSBRRU1VIHRvIGdlbmVyYXRlIHRoZSBiaW5hcnkgbG9jYWxlIGZpbGVzCisjICAicHJlY29tcGlsZWQiIC0gVGhlIGJpbmFyeSBsb2NhbGUgZmlsZXMgYXJlIHByZWdlbmVyYXRlZCBhbmQgYWxyZWFkeSBwcmVzZW50CisjICAib25kZXZpY2UiIC0gVGhlIGRldmljZSB3aWxsIGJ1aWxkIHRoZSBsb2NhbGUgZmlsZXMgdXBvbiBmaXJzdCBib290IHRocm91Z2ggdGhlIHBvc3RpbnN0CisKK0dMSUJDX0lOVEVSTkFMX1VTRV9CSU5BUllfTE9DQUxFID89ICJvbmRldmljZSIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBlbmFibGVkID0gZC5nZXRWYXIoIkVOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT04iLCBUcnVlKQorCisgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGlmIHBuLmVuZHN3aXRoKCItaW5pdGlhbCIpOgorICAgICAgICBlbmFibGVkID0gRmFsc2UKKworICAgIGlmIGVuYWJsZWQgYW5kIGludChlbmFibGVkKToKKyAgICAgICAgaW1wb3J0IHJlCisKKyAgICAgICAgdGFyZ2V0X2FyY2ggPSBkLmdldFZhcigiVEFSR0VUX0FSQ0giLCBUcnVlKQorICAgICAgICBiaW5hcnlfYXJjaGVzID0gZC5nZXRWYXIoIkJJTkFSWV9MT0NBTEVfQVJDSEVTIiwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgdXNlX2Nyb3NzX2xvY2FsZWRlZiA9IGQuZ2V0VmFyKCJMT0NBTEVfR0VORVJBVElPTl9XSVRIX0NST1NTLUxPQ0FMRURFRiIsIFRydWUpIG9yICIiCisKKyAgICAgICAgZm9yIHJlZ2V4cCBpbiBiaW5hcnlfYXJjaGVzLnNwbGl0KCIgIik6CisgICAgICAgICAgICByID0gcmUuY29tcGlsZShyZWdleHApCisKKyAgICAgICAgICAgIGlmIHIubWF0Y2godGFyZ2V0X2FyY2gpOgorICAgICAgICAgICAgICAgIGRlcGVuZHMgPSBkLmdldFZhcigiREVQRU5EUyIsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgdXNlX2Nyb3NzX2xvY2FsZWRlZiA9PSAiMSIgOgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRzID0gIiVzIGNyb3NzLWxvY2FsZWRlZi1uYXRpdmUiICUgZGVwZW5kcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMgPSAiJXMgcWVtdS1uYXRpdmUiICUgZGVwZW5kcworICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJERVBFTkRTIiwgZGVwZW5kcykKKyAgICAgICAgICAgICAgICBkLnNldFZhcigiR0xJQkNfSU5URVJOQUxfVVNFX0JJTkFSWV9MT0NBTEUiLCAiY29tcGlsZSIpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICMgdHJ5IHRvIGZpeCBkaXNhYmxlIGNoYXJzZXRzL2xvY2FsZXMvbG9jYWxlLWNvZGUgY29tcGlsZSBmYWlsCisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWNoYXJzZXRzJywgVHJ1ZSwgRmFsc2UsIGQpIGFuZCBcCisgICAgICAgICAgICBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbG9jYWxlcycsIFRydWUsIEZhbHNlLCBkKSBhbmQgXAorICAgICAgICAgICAgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWxvY2FsZS1jb2RlJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBkLnNldFZhcignUEFDS0FHRV9OT19HQ09OVicsICcwJykKKyAgICBlbHNlOgorICAgICAgICBkLnNldFZhcignUEFDS0FHRV9OT19HQ09OVicsICcxJykKK30KKworT1ZFUlJJREVTX2FwcGVuZCA9ICI6JHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9IgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAgICAgaWYgWyAtZSAke1N9L2VsZi9sZGQuYmFzaC5pbiBdOyB0aGVuCisgICAgICAgICAgICAgICAgc2VkIC1lICJzI0BCQVNIQCMvYmluL3NoIyIgLWkgJHtTfS9lbGYvbGRkLmJhc2guaW4KKyAgICAgICAgZmkKK30KKworCisKKyMgaW5kZW50YXRpb24gcmVtb3ZlZCBvbiBwdXJwb3NlCitsb2NhbGVfYmFzZV9wb3N0aW5zdCgpIHsKKyMhL2Jpbi9zaAorCitpZiBbICJ4JEQiICE9ICJ4IiBdOyB0aGVuCisJZXhpdCAxCitmaQorCitybSAtcmYgJHtUTVBfTE9DQUxFfQorbWtkaXIgLXAgJHtUTVBfTE9DQUxFfQoraWYgWyAtZiAke2xvY2FsZWRpcn0vbG9jYWxlLWFyY2hpdmUgXTsgdGhlbgorICAgICAgICBjcCAke2xvY2FsZWRpcn0vbG9jYWxlLWFyY2hpdmUgJHtUTVBfTE9DQUxFfS8KK2ZpCitsb2NhbGVkZWYgLS1pbnB1dGZpbGU9JHtkYXRhZGlyfS9pMThuL2xvY2FsZXMvJXMgLS1jaGFybWFwPSVzIC0tcHJlZml4PS90bXAvbG9jYWxlICVzCitta2RpciAtcCAke2xvY2FsZWRpcn0vCittdiAke1RNUF9MT0NBTEV9L2xvY2FsZS1hcmNoaXZlICR7bG9jYWxlZGlyfS8KK3JtIC1yZiAke1RNUF9MT0NBTEV9Cit9CisKKyMgaW5kZW50YXRpb24gcmVtb3ZlZCBvbiBwdXJwb3NlCitsb2NhbGVfYmFzZV9wb3N0cm0oKSB7CisjIS9iaW4vc2gKKworcm0gLXJmICR7VE1QX0xPQ0FMRX0KK21rZGlyIC1wICR7VE1QX0xPQ0FMRX0KK2lmIFsgLWYgJHtsb2NhbGVkaXJ9L2xvY2FsZS1hcmNoaXZlIF07IHRoZW4KKwljcCAke2xvY2FsZWRpcn0vbG9jYWxlLWFyY2hpdmUgJHtUTVBfTE9DQUxFfS8KK2ZpCitsb2NhbGVkZWYgLS1kZWxldGUtZnJvbS1hcmNoaXZlIC0taW5wdXRmaWxlPSR7ZGF0YWRpcn0vbG9jYWxlcy8lcyAtLWNoYXJtYXA9JXMgLS1wcmVmaXg9L3RtcC9sb2NhbGUgJXMKK212ICR7VE1QX0xPQ0FMRX0vbG9jYWxlLWFyY2hpdmUgJHtsb2NhbGVkaXJ9Lworcm0gLXJmICR7VE1QX0xPQ0FMRX0KK30KKworCitUTVBfTE9DQUxFPSIvdG1wL2xvY2FsZSR7bG9jYWxlZGlyfSIKK0xPQ0FMRVRSRUVTUkMgPz0gIiR7UEtHRH0iCisKK2RvX3ByZXBfbG9jYWxlX3RyZWUoKSB7CisJdHJlZWRpcj0ke1dPUktESVJ9L2xvY2FsZS10cmVlCisJcm0gLXJmICR0cmVlZGlyCisJbWtkaXIgLXAgJHRyZWVkaXIvJHtiYXNlX2JpbmRpcn0gJHRyZWVkaXIvJHtiYXNlX2xpYmRpcn0gJHRyZWVkaXIvJHtkYXRhZGlyfSAkdHJlZWRpci8ke2xvY2FsZWRpcn0KKwl0YXIgLWNmIC0gLUMgJHtMT0NBTEVUUkVFU1JDfSR7ZGF0YWRpcn0gLXAgaTE4biB8IHRhciAteGYgLSAtQyAkdHJlZWRpci8ke2RhdGFkaXJ9CisJIyB1bnppcCB0byBhdm9pZCBwYXJzaW5nIGVycm9ycworCWZvciBpIGluICR0cmVlZGlyLyR7ZGF0YWRpcn0vaTE4bi9jaGFybWFwcy8qZ3o7IGRvIAorCQlndW56aXAgJGkKKwlkb25lCisJdGFyIC1jZiAtIC1DICR7TE9DQUxFVFJFRVNSQ30ke2Jhc2VfbGliZGlyfSAtcCAuIHwgdGFyIC14ZiAtIC1DICR0cmVlZGlyLyR7YmFzZV9saWJkaXJ9CisJaWYgWyAtZiAke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L2xpYi9saWJnY2Nfcy4qIF07IHRoZW4KKwkJdGFyIC1jZiAtIC1DICR7U1RBR0lOR19ESVJfTkFUSVZFfS8ke3ByZWZpeF9uYXRpdmV9LyR7YmFzZV9saWJkaXJ9IC1wIGxpYmdjY19zLiogfCB0YXIgLXhmIC0gLUMgJHRyZWVkaXIvJHtiYXNlX2xpYmRpcn0KKwlmaQorCWluc3RhbGwgLW0gMDc1NSAke0xPQ0FMRVRSRUVTUkN9JHtiaW5kaXJ9L2xvY2FsZWRlZiAkdHJlZWRpci8ke2Jhc2VfYmluZGlyfQorfQorCitkb19jb2xsZWN0X2JpbnNfZnJvbV9sb2NhbGVfdHJlZSgpIHsKKwl0cmVlZGlyPSR7V09SS0RJUn0vbG9jYWxlLXRyZWUKKworCXBhcmVudD0kKGRpcm5hbWUgJHtsb2NhbGVkaXJ9KQorCW1rZGlyIC1wICR7UEtHRH0vJHBhcmVudAorCXRhciAtY2YgLSAtQyAkdHJlZWRpci8kcGFyZW50IC1wICQoYmFzZW5hbWUgJHtsb2NhbGVkaXJ9KSB8IHRhciAteGYgLSAtQyAke1BLR0R9JHBhcmVudAorfQorCitpbmhlcml0IHFlbXUKKworcHl0aG9uIHBhY2thZ2VfZG9fc3BsaXRfZ2NvbnZzICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICBpZiAoZC5nZXRWYXIoJ1BBQ0tBR0VfTk9fR0NPTlYnLCBUcnVlKSA9PSAnMScpOgorICAgICAgICBiYi5ub3RlKCJwYWNrYWdlIHJlcXVlc3RlZCBub3Qgc3BsaXR0aW5nIGdjb252cyIpCisgICAgICAgIHJldHVybgorCisgICAgaWYgbm90IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpOgorICAgICAgICByZXR1cm4KKworICAgIG1scHJlZml4ID0gZC5nZXRWYXIoIk1MUFJFRklYIiwgVHJ1ZSkgb3IgIiIKKworICAgIGJwbiA9IGQuZ2V0VmFyKCdCUE4nLCBUcnVlKQorICAgIGxpYmRpciA9IGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKQorICAgIGlmIG5vdCBsaWJkaXI6CisgICAgICAgIGJiLmVycm9yKCJsaWJkaXIgbm90IGRlZmluZWQiKQorICAgICAgICByZXR1cm4KKyAgICBkYXRhZGlyID0gZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKQorICAgIGlmIG5vdCBkYXRhZGlyOgorICAgICAgICBiYi5lcnJvcigiZGF0YWRpciBub3QgZGVmaW5lZCIpCisgICAgICAgIHJldHVybgorCisgICAgZ2NvbnZfbGliZGlyID0gYmFzZV9wYXRoX2pvaW4obGliZGlyLCAiZ2NvbnYiKQorICAgIGNoYXJtYXBfZGlyID0gYmFzZV9wYXRoX2pvaW4oZGF0YWRpciwgImkxOG4iLCAiY2hhcm1hcHMiKQorICAgIGxvY2FsZXNfZGlyID0gYmFzZV9wYXRoX2pvaW4oZGF0YWRpciwgImkxOG4iLCAibG9jYWxlcyIpCisgICAgYmluYXJ5X2xvY2FsZXNfZGlyID0gZC5nZXRWYXIoJ2xvY2FsZWRpcicsIFRydWUpCisKKyAgICBkZWYgY2FsY19nY29udl9kZXBzKGZuLCBwa2csIGZpbGVfcmVnZXgsIG91dHB1dF9wYXR0ZXJuLCBncm91cCk6CisgICAgICAgIGRlcHMgPSBbXQorICAgICAgICBmID0gb3BlbihmbiwgInJiIikKKyAgICAgICAgY19yZSA9IHJlLmNvbXBpbGUoJ15jb3B5ICIoLiopIicpCisgICAgICAgIGlfcmUgPSByZS5jb21waWxlKCdeaW5jbHVkZSAiKFx3KykiLionKQorICAgICAgICBmb3IgbCBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgbSA9IGNfcmUubWF0Y2gobCkgb3IgaV9yZS5tYXRjaChsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBkcCA9IGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKCclcyVzLWdjb252LSVzJyAlIChtbHByZWZpeCwgYnBuLCBtLmdyb3VwKDEpKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZHAgaW4gZGVwczoKKyAgICAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoZHApCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBpZiBkZXBzICE9IFtdOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXyVzJyAlIHBrZywgIiAiLmpvaW4oZGVwcykpCisgICAgICAgIGlmIGJwbiAhPSAnZ2xpYmMnOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1JQUk9WSURFU18lcycgJSBwa2csIHBrZy5yZXBsYWNlKGJwbiwgJ2dsaWJjJykpCisKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBnY29udl9saWJkaXIsIGZpbGVfcmVnZXg9J14oLiopXC5zbyQnLCBvdXRwdXRfcGF0dGVybj1icG4rJy1nY29udi0lcycsIFwKKyAgICAgICAgZGVzY3JpcHRpb249J2djb252IG1vZHVsZSBmb3IgY2hhcmFjdGVyIHNldCAlcycsIGhvb2s9Y2FsY19nY29udl9kZXBzLCBcCisgICAgICAgIGV4dHJhX2RlcGVuZHM9YnBuKyctZ2NvbnYnKQorCisgICAgZGVmIGNhbGNfY2hhcm1hcF9kZXBzKGZuLCBwa2csIGZpbGVfcmVnZXgsIG91dHB1dF9wYXR0ZXJuLCBncm91cCk6CisgICAgICAgIGRlcHMgPSBbXQorICAgICAgICBmID0gb3BlbihmbiwgInJiIikKKyAgICAgICAgY19yZSA9IHJlLmNvbXBpbGUoJ15jb3B5ICIoLiopIicpCisgICAgICAgIGlfcmUgPSByZS5jb21waWxlKCdeaW5jbHVkZSAiKFx3KykiLionKQorICAgICAgICBmb3IgbCBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgbSA9IGNfcmUubWF0Y2gobCkgb3IgaV9yZS5tYXRjaChsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBkcCA9IGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKCclcyVzLWNoYXJtYXAtJXMnICUgKG1scHJlZml4LCBicG4sIG0uZ3JvdXAoMSkpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChkcCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGlmIGRlcHMgIT0gW106CisgICAgICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJXMnICUgcGtnLCAiICIuam9pbihkZXBzKSkKKyAgICAgICAgaWYgYnBuICE9ICdnbGliYyc6CisgICAgICAgICAgICBkLnNldFZhcignUlBST1ZJREVTXyVzJyAlIHBrZywgcGtnLnJlcGxhY2UoYnBuLCAnZ2xpYmMnKSkKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGNoYXJtYXBfZGlyLCBmaWxlX3JlZ2V4PSdeKC4qKVwuZ3okJywgb3V0cHV0X3BhdHRlcm49YnBuKyctY2hhcm1hcC0lcycsIFwKKyAgICAgICAgZGVzY3JpcHRpb249J2NoYXJhY3RlciBtYXAgZm9yICVzIGVuY29kaW5nJywgaG9vaz1jYWxjX2NoYXJtYXBfZGVwcywgZXh0cmFfZGVwZW5kcz0nJykKKworICAgIGRlZiBjYWxjX2xvY2FsZV9kZXBzKGZuLCBwa2csIGZpbGVfcmVnZXgsIG91dHB1dF9wYXR0ZXJuLCBncm91cCk6CisgICAgICAgIGRlcHMgPSBbXQorICAgICAgICBmID0gb3BlbihmbiwgInJiIikKKyAgICAgICAgY19yZSA9IHJlLmNvbXBpbGUoJ15jb3B5ICIoLiopIicpCisgICAgICAgIGlfcmUgPSByZS5jb21waWxlKCdeaW5jbHVkZSAiKFx3KykiLionKQorICAgICAgICBmb3IgbCBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgbSA9IGNfcmUubWF0Y2gobCkgb3IgaV9yZS5tYXRjaChsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBkcCA9IGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKG1scHJlZml4K2JwbisnLWxvY2FsZWRhdGEtJXMnICUgbS5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZHAgaW4gZGVwczoKKyAgICAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoZHApCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBpZiBkZXBzICE9IFtdOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXyVzJyAlIHBrZywgIiAiLmpvaW4oZGVwcykpCisgICAgICAgIGlmIGJwbiAhPSAnZ2xpYmMnOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1JQUk9WSURFU18lcycgJSBwa2csIHBrZy5yZXBsYWNlKGJwbiwgJ2dsaWJjJykpCisKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsb2NhbGVzX2RpciwgZmlsZV9yZWdleD0nKC4qKScsIG91dHB1dF9wYXR0ZXJuPWJwbisnLWxvY2FsZWRhdGEtJXMnLCBcCisgICAgICAgIGRlc2NyaXB0aW9uPSdsb2NhbGUgZGVmaW5pdGlvbiBmb3IgJXMnLCBob29rPWNhbGNfbG9jYWxlX2RlcHMsIGV4dHJhX2RlcGVuZHM9JycpCisgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgRmFsc2UpICsgJyAnICsgZC5nZXRWYXIoJ01MUFJFRklYJywgRmFsc2UpICsgYnBuICsgJy1nY29udicpCisKKyAgICB1c2VfYmluID0gZC5nZXRWYXIoIkdMSUJDX0lOVEVSTkFMX1VTRV9CSU5BUllfTE9DQUxFIiwgVHJ1ZSkKKworICAgIGRvdF9yZSA9IHJlLmNvbXBpbGUoIiguKilcLiguKikiKQorCisgICAgIyBSZWFkIGluIHN1cHBvcnRlZCBsb2NhbGVzIGFuZCBhc3NvY2lhdGVkIGVuY29kaW5ncworICAgIHN1cHBvcnRlZCA9IHt9CisgICAgd2l0aCBvcGVuKGJhc2VfcGF0aF9qb2luKGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSksICJTVVBQT1JURUQiKSkgYXMgZjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsb2NhbGUsIGNoYXJzZXQgPSBsaW5lLnJzdHJpcCgpLnNwbGl0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzdXBwb3J0ZWRbbG9jYWxlXSA9IGNoYXJzZXQKKworICAgICMgR0xJQkNfR0VORVJBVEVfTE9DQUxFUyB2YXIgc3BlY2lmaWVzIHdoaWNoIGxvY2FsZXMgdG8gYmUgZ2VuZXJhdGVkLiBlbXB0eSBvciAiYWxsIiBtZWFucyBhbGwgbG9jYWxlcworICAgIHRvX2dlbmVyYXRlID0gZC5nZXRWYXIoJ0dMSUJDX0dFTkVSQVRFX0xPQ0FMRVMnLCBUcnVlKQorICAgIGlmIG5vdCB0b19nZW5lcmF0ZSBvciB0b19nZW5lcmF0ZSA9PSAnYWxsJzoKKyAgICAgICAgdG9fZ2VuZXJhdGUgPSBzdXBwb3J0ZWQua2V5cygpCisgICAgZWxzZToKKyAgICAgICAgdG9fZ2VuZXJhdGUgPSB0b19nZW5lcmF0ZS5zcGxpdCgpCisgICAgICAgIGZvciBsb2NhbGUgaW4gdG9fZ2VuZXJhdGU6CisgICAgICAgICAgICBpZiBsb2NhbGUgbm90IGluIHN1cHBvcnRlZDoKKyAgICAgICAgICAgICAgICBpZiAnLicgaW4gbG9jYWxlOgorICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gbG9jYWxlLnNwbGl0KCcuJylbMV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gJ1VURi04JworICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJVbnN1cHBvcnRlZCBsb2NhbGUgJyVzJywgYXNzdW1pbmcgZW5jb2RpbmcgJyVzJyIgJSAobG9jYWxlLCBjaGFyc2V0KSkKKyAgICAgICAgICAgICAgICBzdXBwb3J0ZWRbbG9jYWxlXSA9IGNoYXJzZXQKKworICAgIGRlZiBvdXRwdXRfbG9jYWxlX3NvdXJjZShuYW1lLCBwa2duYW1lLCBsb2NhbGUsIGVuY29kaW5nKToKKyAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXyVzJyAlIHBrZ25hbWUsICdsb2NhbGVkZWYgJXMtbG9jYWxlZGF0YS0lcyAlcy1jaGFybWFwLSVzJyAlIFwKKyAgICAgICAgKG1scHJlZml4K2JwbiwgbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobG9jYWxlKSwgbWxwcmVmaXgrYnBuLCBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShlbmNvZGluZykpKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZ25hbWUsIGQuZ2V0VmFyKCdsb2NhbGVfYmFzZV9wb3N0aW5zdCcsIFRydWUpIFwKKyAgICAgICAgJSAobG9jYWxlLCBlbmNvZGluZywgbG9jYWxlKSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnbmFtZSwgZC5nZXRWYXIoJ2xvY2FsZV9iYXNlX3Bvc3RybScsIFRydWUpICUgXAorICAgICAgICAobG9jYWxlLCBlbmNvZGluZywgbG9jYWxlKSkKKworICAgIGRlZiBvdXRwdXRfbG9jYWxlX2JpbmFyeV9yZGVwZW5kcyhuYW1lLCBwa2duYW1lLCBsb2NhbGUsIGVuY29kaW5nKToKKyAgICAgICAgbSA9IHJlLm1hdGNoKCIoLiopXC4oLiopIiwgbmFtZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIGxpYmNfbmFtZSA9ICIlcy4lcyIgJSAobS5ncm91cCgxKSwgbS5ncm91cCgyKS5sb3dlcigpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGliY19uYW1lID0gbmFtZQorICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJXMnICUgcGtnbmFtZSwgbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUoJyVzLWJpbmFyeS1sb2NhbGVkYXRhLSVzJyBcCisgICAgICAgICAgICAlIChtbHByZWZpeCticG4sIGxpYmNfbmFtZSkpKQorCisgICAgY29tbWFuZHMgPSB7fQorCisgICAgZGVmIG91dHB1dF9sb2NhbGVfYmluYXJ5KG5hbWUsIHBrZ25hbWUsIGxvY2FsZSwgZW5jb2RpbmcpOgorICAgICAgICB0cmVlZGlyID0gYmFzZV9wYXRoX2pvaW4oZC5nZXRWYXIoIldPUktESVIiLCBUcnVlKSwgImxvY2FsZS10cmVlIikKKyAgICAgICAgbGRsaWJkaXIgPSBiYXNlX3BhdGhfam9pbih0cmVlZGlyLCBkLmdldFZhcigiYmFzZV9saWJkaXIiLCBUcnVlKSkKKyAgICAgICAgcGF0aCA9IGQuZ2V0VmFyKCJQQVRIIiwgVHJ1ZSkKKyAgICAgICAgaTE4bnBhdGggPSBiYXNlX3BhdGhfam9pbih0cmVlZGlyLCBkYXRhZGlyLCAiaTE4biIpCisgICAgICAgIGdjb252cGF0aCA9IGJhc2VfcGF0aF9qb2luKHRyZWVkaXIsICJpY29udmRhdGEiKQorICAgICAgICBvdXRwdXRwYXRoID0gYmFzZV9wYXRoX2pvaW4odHJlZWRpciwgYmluYXJ5X2xvY2FsZXNfZGlyKQorCisgICAgICAgIHVzZV9jcm9zc19sb2NhbGVkZWYgPSBkLmdldFZhcigiTE9DQUxFX0dFTkVSQVRJT05fV0lUSF9DUk9TUy1MT0NBTEVERUYiLCBUcnVlKSBvciAiMCIKKyAgICAgICAgaWYgdXNlX2Nyb3NzX2xvY2FsZWRlZiA9PSAiMSI6CisgICAgICAgICAgICB0YXJnZXRfYXJjaCA9IGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpCisgICAgICAgICAgICBsb2NhbGVfYXJjaF9vcHRpb25zID0geyBcCisgICAgICAgICAgICAgICAgImFybSI6ICAgICAiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIsIFwKKyAgICAgICAgICAgICAgICAiYXJtZWIiOiAgICIgLS11aW50MzItYWxpZ249NCAtLWJpZy1lbmRpYW4gIiwgICAgXAorICAgICAgICAgICAgICAgICJhYXJjaDY0IjogIiAtLXVpbnQzMi1hbGlnbj00IC0tbGl0dGxlLWVuZGlhbiAiLCAgICBcCisgICAgICAgICAgICAgICAgImFhcmNoNjRfYmUiOiAiIC0tdWludDMyLWFsaWduPTQgLS1iaWctZW5kaWFuICIsICAgIFwKKyAgICAgICAgICAgICAgICAic2g0IjogICAgICIgLS11aW50MzItYWxpZ249NCAtLWJpZy1lbmRpYW4gIiwgICAgXAorICAgICAgICAgICAgICAgICJwb3dlcnBjIjogIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgICBcCisgICAgICAgICAgICAgICAgInBvd2VycGM2NCI6ICIgLS11aW50MzItYWxpZ249NCAtLWJpZy1lbmRpYW4gIiwgIFwKKyAgICAgICAgICAgICAgICAibWlwcyI6ICAgICIgLS11aW50MzItYWxpZ249NCAtLWJpZy1lbmRpYW4gIiwgICAgXAorICAgICAgICAgICAgICAgICJtaXBzNjQiOiAgIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgICBcCisgICAgICAgICAgICAgICAgIm1pcHNlbCI6ICAiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIsIFwKKyAgICAgICAgICAgICAgICAibWlwczY0ZWwiOiIgLS11aW50MzItYWxpZ249NCAtLWxpdHRsZS1lbmRpYW4gIiwgXAorICAgICAgICAgICAgICAgICJpNTg2IjogICAgIiAtLXVpbnQzMi1hbGlnbj00IC0tbGl0dGxlLWVuZGlhbiAiLCBcCisgICAgICAgICAgICAgICAgImk2ODYiOiAgICAiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIsIFwKKyAgICAgICAgICAgICAgICAieDg2XzY0IjogICIgLS11aW50MzItYWxpZ249NCAtLWxpdHRsZS1lbmRpYW4gIiAgfQorCisgICAgICAgICAgICBpZiB0YXJnZXRfYXJjaCBpbiBsb2NhbGVfYXJjaF9vcHRpb25zOgorICAgICAgICAgICAgICAgIGxvY2FsZWRlZl9vcHRzID0gbG9jYWxlX2FyY2hfb3B0aW9uc1t0YXJnZXRfYXJjaF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IoImxvY2FsZV9hcmNoX29wdGlvbnMgbm90IGZvdW5kIGZvciB0YXJnZXRfYXJjaD0iICsgdGFyZ2V0X2FyY2gpCisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5rbm93biBhcmNoOiIgKyB0YXJnZXRfYXJjaCArICIgZm9yIGxvY2FsZV9hcmNoX29wdGlvbnMiKQorCisgICAgICAgICAgICBsb2NhbGVkZWZfb3B0cyArPSAiIC0tZm9yY2UgLS1vbGQtc3R5bGUgLS1uby1hcmNoaXZlIC0tcHJlZml4PSVzIFwKKyAgICAgICAgICAgICAgICAtLWlucHV0ZmlsZT0lcy8lcy9pMThuL2xvY2FsZXMvJXMgLS1jaGFybWFwPSVzICVzLyVzIiBcCisgICAgICAgICAgICAgICAgJSAodHJlZWRpciwgdHJlZWRpciwgZGF0YWRpciwgbG9jYWxlLCBlbmNvZGluZywgb3V0cHV0cGF0aCwgbmFtZSkKKworICAgICAgICAgICAgY21kID0gIlBBVEg9XCIlc1wiIEkxOE5QQVRIPVwiJXNcIiBHQ09OVl9QQVRIPVwiJXNcIiBjcm9zcy1sb2NhbGVkZWYgJXMiICUgXAorICAgICAgICAgICAgICAgIChwYXRoLCBpMThucGF0aCwgZ2NvbnZwYXRoLCBsb2NhbGVkZWZfb3B0cykKKyAgICAgICAgZWxzZTogIyBlYXJsaWVyIHNsb3dlciBxZW11IHdheSAKKyAgICAgICAgICAgIHFlbXUgPSBxZW11X3RhcmdldF9iaW5hcnkoZCkgCisgICAgICAgICAgICBsb2NhbGVkZWZfb3B0cyA9ICItLWZvcmNlIC0tb2xkLXN0eWxlIC0tbm8tYXJjaGl2ZSAtLXByZWZpeD0lcyBcCisgICAgICAgICAgICAgICAgLS1pbnB1dGZpbGU9JXMvaTE4bi9sb2NhbGVzLyVzIC0tY2hhcm1hcD0lcyAlcyIgXAorICAgICAgICAgICAgICAgICUgKHRyZWVkaXIsIGRhdGFkaXIsIGxvY2FsZSwgZW5jb2RpbmcsIG5hbWUpCisKKyAgICAgICAgICAgIHFlbXVfb3B0aW9ucyA9IGQuZ2V0VmFyKCdRRU1VX09QVElPTlMnLCBUcnVlKQorCisgICAgICAgICAgICBjbWQgPSAiUFNFVURPX1JFTE9BREVEPVlFUyBQQVRIPVwiJXNcIiBJMThOUEFUSD1cIiVzXCIgJXMgLUwgJXMgXAorICAgICAgICAgICAgICAgIC1FIExEX0xJQlJBUllfUEFUSD0lcyAlcyAlcy9iaW4vbG9jYWxlZGVmICVzIiAlIFwKKyAgICAgICAgICAgICAgICAocGF0aCwgaTE4bnBhdGgsIHFlbXUsIHRyZWVkaXIsIGxkbGliZGlyLCBxZW11X29wdGlvbnMsIHRyZWVkaXIsIGxvY2FsZWRlZl9vcHRzKQorCisgICAgICAgIGNvbW1hbmRzWyIlcy8lcyIgJSAob3V0cHV0cGF0aCwgbmFtZSldID0gY21kCisKKyAgICAgICAgYmIubm90ZSgiZ2VuZXJhdGluZyBsb2NhbGUgJXMgKCVzKSIgJSAobG9jYWxlLCBlbmNvZGluZykpCisKKyAgICBkZWYgb3V0cHV0X2xvY2FsZShuYW1lLCBsb2NhbGUsIGVuY29kaW5nKToKKyAgICAgICAgcGtnbmFtZSA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIEZhbHNlKSArICdsb2NhbGUtYmFzZS0nICsgbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobmFtZSkKKyAgICAgICAgZC5zZXRWYXIoJ0FMTE9XX0VNUFRZXyVzJyAlIHBrZ25hbWUsICcxJykKKyAgICAgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgJyVzICVzJyAlIChwa2duYW1lLCBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSkpCisgICAgICAgIHJwcm92aWRlcyA9ICcgJXN2aXJ0dWFsLWxvY2FsZS0lcycgJSAobWxwcmVmaXgsIGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKG5hbWUpKQorICAgICAgICBtID0gcmUubWF0Y2goIiguKilfKC4qKSIsIG5hbWUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBycHJvdmlkZXMgKz0gJyAlc3ZpcnR1YWwtbG9jYWxlLSVzJyAlIChtbHByZWZpeCwgbS5ncm91cCgxKSkKKyAgICAgICAgZC5zZXRWYXIoJ1JQUk9WSURFU18lcycgJSBwa2duYW1lLCBycHJvdmlkZXMpCisKKyAgICAgICAgaWYgdXNlX2JpbiA9PSAiY29tcGlsZSI6CisgICAgICAgICAgICBvdXRwdXRfbG9jYWxlX2JpbmFyeV9yZGVwZW5kcyhuYW1lLCBwa2duYW1lLCBsb2NhbGUsIGVuY29kaW5nKQorICAgICAgICAgICAgb3V0cHV0X2xvY2FsZV9iaW5hcnkobmFtZSwgcGtnbmFtZSwgbG9jYWxlLCBlbmNvZGluZykKKyAgICAgICAgZWxpZiB1c2VfYmluID09ICJwcmVjb21waWxlZCI6CisgICAgICAgICAgICBvdXRwdXRfbG9jYWxlX2JpbmFyeV9yZGVwZW5kcyhuYW1lLCBwa2duYW1lLCBsb2NhbGUsIGVuY29kaW5nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0cHV0X2xvY2FsZV9zb3VyY2UobmFtZSwgcGtnbmFtZSwgbG9jYWxlLCBlbmNvZGluZykKKworICAgIGlmIHVzZV9iaW4gPT0gImNvbXBpbGUiOgorICAgICAgICBiYi5ub3RlKCJwcmVwYXJpbmcgdHJlZSBmb3IgYmluYXJ5IGxvY2FsZSBnZW5lcmF0aW9uIikKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJkb19wcmVwX2xvY2FsZV90cmVlIiwgZCkKKworICAgIHV0Zjhfb25seSA9IGludChkLmdldFZhcignTE9DQUxFX1VURjhfT05MWScsIFRydWUpIG9yIDApCisgICAgZW5jb2RpbmdzID0ge30KKyAgICBmb3IgbG9jYWxlIGluIHRvX2dlbmVyYXRlOgorICAgICAgICBjaGFyc2V0ID0gc3VwcG9ydGVkW2xvY2FsZV0KKyAgICAgICAgaWYgdXRmOF9vbmx5IGFuZCBjaGFyc2V0ICE9ICdVVEYtOCc6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIG0gPSBkb3RfcmUubWF0Y2gobG9jYWxlKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgYmFzZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJhc2UgPSBsb2NhbGUKKworICAgICAgICAjIFByZWNvbXBpbGVkIGxvY2FsZXMgYXJlIGtlcHQgYXMgaXMsIG9iZXlpbmcgU1VQUE9SVEVELCB3aGlsZQorICAgICAgICAjIG90aGVycyBhcmUgYWRqdXN0ZWQsIGVuc3VyaW5nIHRoYXQgdGhlIG5vbi1zdWZmaXhlZCBsb2NhbGVzCisgICAgICAgICMgYXJlIHV0Zi04LCB3aGlsZSB0aGUgc3VmZml4ZWQgYXJlIG5vdC4KKyAgICAgICAgaWYgdXNlX2JpbiA9PSAicHJlY29tcGlsZWQiOgorICAgICAgICAgICAgb3V0cHV0X2xvY2FsZShsb2NhbGUsIGJhc2UsIGNoYXJzZXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBjaGFyc2V0ID09ICdVVEYtOCc6CisgICAgICAgICAgICAgICAgb3V0cHV0X2xvY2FsZShiYXNlLCBiYXNlLCBjaGFyc2V0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRwdXRfbG9jYWxlKCclcy4lcycgJSAoYmFzZSwgY2hhcnNldCksIGJhc2UsIGNoYXJzZXQpCisKKyAgICBpZiB1c2VfYmluID09ICJjb21waWxlIjoKKyAgICAgICAgbWFrZWZpbGUgPSBiYXNlX3BhdGhfam9pbihkLmdldFZhcigiV09SS0RJUiIsIFRydWUpLCAibG9jYWxlLXRyZWUiLCAiTWFrZWZpbGUiKQorICAgICAgICBtID0gb3BlbihtYWtlZmlsZSwgInciKQorICAgICAgICBtLndyaXRlKCJhbGw6ICVzXG5cbiIgJSAiICIuam9pbihjb21tYW5kcy5rZXlzKCkpKQorICAgICAgICBmb3IgY21kIGluIGNvbW1hbmRzOgorICAgICAgICAgICAgbS53cml0ZShjbWQgKyAiOlxuIikKKyAgICAgICAgICAgIG0ud3JpdGUoIlx0IiArIGNvbW1hbmRzW2NtZF0gKyAiXG5cbiIpCisgICAgICAgIG0uY2xvc2UoKQorICAgICAgICBkLnNldFZhcigiRVhUUkFfT0VNQUtFIiwgIi1DICVzICR7UEFSQUxMRUxfTUFLRX0iICUgKG9zLnBhdGguZGlybmFtZShtYWtlZmlsZSkpKQorICAgICAgICBiYi5ub3RlKCJFeGVjdXRpbmcgYmluYXJ5IGxvY2FsZSBnZW5lcmF0aW9uIG1ha2VmaWxlIikKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJvZV9ydW5tYWtlIiwgZCkKKyAgICAgICAgYmIubm90ZSgiY29sbGVjdGluZyBiaW5hcnkgbG9jYWxlcyBmcm9tIGxvY2FsZSB0cmVlIikKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJkb19jb2xsZWN0X2JpbnNfZnJvbV9sb2NhbGVfdHJlZSIsIGQpCisgICAgICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGJpbmFyeV9sb2NhbGVzX2RpciwgZmlsZV9yZWdleD0nKC4qKScsIFwKKyAgICAgICAgICAgIG91dHB1dF9wYXR0ZXJuPWJwbisnLWJpbmFyeS1sb2NhbGVkYXRhLSVzJywgXAorICAgICAgICAgICAgZGVzY3JpcHRpb249J2JpbmFyeSBsb2NhbGUgZGVmaW5pdGlvbiBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnLCBhbGxvd19kaXJzPVRydWUpCisgICAgZWxpZiB1c2VfYmluID09ICJwcmVjb21waWxlZCI6CisgICAgICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGJpbmFyeV9sb2NhbGVzX2RpciwgZmlsZV9yZWdleD0nKC4qKScsIFwKKyAgICAgICAgICAgIG91dHB1dF9wYXR0ZXJuPWJwbisnLWJpbmFyeS1sb2NhbGVkYXRhLSVzJywgXAorICAgICAgICAgICAgZGVzY3JpcHRpb249J2JpbmFyeSBsb2NhbGUgZGVmaW5pdGlvbiBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnLCBhbGxvd19kaXJzPVRydWUpCisgICAgZWxzZToKKyAgICAgICAgYmIubm90ZSgiZ2VuZXJhdGlvbiBvZiBiaW5hcnkgbG9jYWxlcyBkaXNhYmxlZC4gdGhpcyBtYXkgYnJlYWsgaTE4biEiKQorCit9CisKKyMgV2Ugd2FudCB0byBkbyB0aGlzIGluZGlyZWN0aW9uIHNvIHRoYXQgd2UgY2FuIHNhZmVseSAncmV0dXJuJworIyBmcm9tIHRoZSBjYWxsZWQgZnVuY3Rpb24gZXZlbiB0aG91Z2ggd2UncmUgcHJlcGVuZGluZworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygncGFja2FnZV9kb19zcGxpdF9nY29udnMnLCBkKQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saWNlbnNlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saWNlbnNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYxNmEyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpY2Vuc2UuYmJjbGFzcwpAQCAtMCwwICsxLDQ4MyBAQAorIyBQb3B1bGF0ZXMgTElDRU5TRV9ESVJFQ1RPUlkgYXMgc2V0IGluIGRpc3RybyBjb25maWcgd2l0aCB0aGUgbGljZW5zZSBmaWxlcyBhcyBzZXQgYnkKKyMgTElDX0ZJTEVTX0NIS1NVTS4KKyMgVE9ETzoKKyMgLSBUaGVyZSBpcyBhIHJlYWwgaXNzdWUgcmV2b2x2aW5nIGFyb3VuZCBsaWNlbnNlIG5hbWluZyBzdGFuZGFyZHMuCisKK0xJQ0VOU0VfRElSRUNUT1JZID8/PSAiJHtERVBMT1lfRElSfS9saWNlbnNlcyIKK0xJQ1NTVEFURURJUiA9ICIke1dPUktESVJ9L2xpY2Vuc2UtZGVzdGRpci8iCisKKyMgQ3JlYXRlIGV4dHJhIHBhY2thZ2Ugd2l0aCBsaWNlbnNlIHRleHRzIGFuZCBhZGQgaXQgdG8gUlJFQ09NTUVORFNfJHtQTn0KK0xJQ0VOU0VfQ1JFQVRFX1BBQ0tBR0VbdHlwZV0gPSAiYm9vbGVhbiIKK0xJQ0VOU0VfQ1JFQVRFX1BBQ0tBR0UgPz89ICIwIgorTElDRU5TRV9QQUNLQUdFX1NVRkZJWCA/Pz0gIi1saWMiCitMSUNFTlNFX0ZJTEVTX0RJUkVDVE9SWSA/Pz0gIiR7ZGF0YWRpcn0vbGljZW5zZXMvIgorCithZGR0YXNrIHBvcHVsYXRlX2xpYyBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fYnVpbGQKK2RvX3BvcHVsYXRlX2xpY1tkaXJzXSA9ICIke0xJQ1NTVEFURURJUn0vJHtQTn0iCitkb19wb3B1bGF0ZV9saWNbY2xlYW5kaXJzXSA9ICIke0xJQ1NTVEFURURJUn0iCisKK3B5dGhvbiB3cml0ZV9wYWNrYWdlX21hbmlmZXN0KCkgeworICAgICMgR2V0IGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzCisgICAgbGljZW5zZV9pbWFnZV9kaXIgPSBkLmV4cGFuZCgnJHtMSUNFTlNFX0RJUkVDVE9SWX0vJHtJTUFHRV9OQU1FfScpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGxpY2Vuc2VfaW1hZ2VfZGlyKQorICAgIGZyb20gb2Uucm9vdGZzIGltcG9ydCBpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcworICAgIG9wZW4ob3MucGF0aC5qb2luKGxpY2Vuc2VfaW1hZ2VfZGlyLCAncGFja2FnZS5tYW5pZmVzdCcpLAorICAgICAgICAndysnKS53cml0ZShpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkKSkKK30KKworcHl0aG9uIGxpY2Vuc2VfY3JlYXRlX21hbmlmZXN0KCkgeworICAgIGltcG9ydCByZQorICAgIGltcG9ydCBvZS5wYWNrYWdlZGF0YQorICAgIGZyb20gb2Uucm9vdGZzIGltcG9ydCBpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcworCisgICAgYmFkX2xpY2Vuc2VzID0gKGQuZ2V0VmFyKCJJTkNPTVBBVElCTEVfTElDRU5TRSIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgYmFkX2xpY2Vuc2VzID0gbWFwKGxhbWJkYSBsOiBjYW5vbmljYWxfbGljZW5zZShkLCBsKSwgYmFkX2xpY2Vuc2VzKQorICAgIGJhZF9saWNlbnNlcyA9IGV4cGFuZF93aWxkY2FyZF9saWNlbnNlcyhkLCBiYWRfbGljZW5zZXMpCisKKyAgICBidWlsZF9pbWFnZXNfZnJvbV9mZWVkcyA9IGQuZ2V0VmFyKCdCVUlMRF9JTUFHRVNfRlJPTV9GRUVEUycsIFRydWUpCisgICAgaWYgYnVpbGRfaW1hZ2VzX2Zyb21fZmVlZHMgPT0gIjEiOgorICAgICAgICByZXR1cm4gMAorCisgICAgcGtnX2RpYyA9IHt9CisgICAgZm9yIHBrZyBpbiBpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkKS5zcGxpdGxpbmVzKCk6CisgICAgICAgIHBrZ19pbmZvID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVudGltZS1yZXZlcnNlJywgcGtnKQorICAgICAgICBwa2dfbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUob3MucmVhZGxpbmsocGtnX2luZm8pKQorCisgICAgICAgIHBrZ19kaWNbcGtnX25hbWVdID0gb2UucGFja2FnZWRhdGEucmVhZF9wa2dkYXRhZmlsZShwa2dfaW5mbykKKyAgICAgICAgaWYgbm90ICJMSUNFTlNFIiBpbiBwa2dfZGljW3BrZ19uYW1lXS5rZXlzKCk6CisgICAgICAgICAgICBwa2dfbGljX25hbWUgPSAiTElDRU5TRV8iICsgcGtnX25hbWUKKyAgICAgICAgICAgIHBrZ19kaWNbcGtnX25hbWVdWyJMSUNFTlNFIl0gPSBwa2dfZGljW3BrZ19uYW1lXVtwa2dfbGljX25hbWVdCisKKyAgICBsaWNlbnNlX21hbmlmZXN0ID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdMSUNFTlNFX0RJUkVDVE9SWScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ0lNQUdFX05BTUUnLCBUcnVlKSwgJ2xpY2Vuc2UubWFuaWZlc3QnKQorICAgIHdpdGggb3BlbihsaWNlbnNlX21hbmlmZXN0LCAidyIpIGFzIGxpY2Vuc2VfZmlsZToKKyAgICAgICAgZm9yIHBrZyBpbiBzb3J0ZWQocGtnX2RpYyk6CisgICAgICAgICAgICBpZiBiYWRfbGljZW5zZXM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAocGtnX2RpY1twa2ddWyJMSUNFTlNFIl0sIHBrZ19kaWNbcGtnXVsiTElDRU5TRVMiXSkgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICBvZS5saWNlbnNlLm1hbmlmZXN0X2xpY2Vuc2VzKHBrZ19kaWNbcGtnXVsiTElDRU5TRSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgYmFkX2xpY2Vuc2VzLCBjYW5vbmljYWxfbGljZW5zZSwgZCkKKyAgICAgICAgICAgICAgICBleGNlcHQgb2UubGljZW5zZS5MaWNlbnNlRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgnJXM6ICVzJyAlIChkLmdldFZhcignUCcsIFRydWUpLCBleGMpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dfZGljW3BrZ11bIkxJQ0VOU0VTIl0gPSByZS5zdWIoJ1t8JigpKl0nLCAnJywgcGtnX2RpY1twa2ddWyJMSUNFTlNFIl0pCisgICAgICAgICAgICAgICAgcGtnX2RpY1twa2ddWyJMSUNFTlNFUyJdID0gcmUuc3ViKCcgIConLCAnICcsIHBrZ19kaWNbcGtnXVsiTElDRU5TRVMiXSkKKyAgICAgICAgICAgICAgICBwa2dfZGljW3BrZ11bIkxJQ0VOU0VTIl0gPSBwa2dfZGljW3BrZ11bIkxJQ0VOU0VTIl0uc3BsaXQoKQorCisgICAgICAgICAgICBsaWNlbnNlX2ZpbGUud3JpdGUoIlBBQ0tBR0UgTkFNRTogJXNcbiIgJSBwa2cpCisgICAgICAgICAgICBsaWNlbnNlX2ZpbGUud3JpdGUoIlBBQ0tBR0UgVkVSU0lPTjogJXNcbiIgJSBwa2dfZGljW3BrZ11bIlBWIl0pCisgICAgICAgICAgICBsaWNlbnNlX2ZpbGUud3JpdGUoIlJFQ0lQRSBOQU1FOiAlc1xuIiAlIHBrZ19kaWNbcGtnXVsiUE4iXSkKKyAgICAgICAgICAgIGxpY2Vuc2VfZmlsZS53cml0ZSgiTElDRU5TRTogJXNcblxuIiAlIHBrZ19kaWNbcGtnXVsiTElDRU5TRSJdKQorCisgICAgICAgICAgICAjIElmIHRoZSBwYWNrYWdlIGRvZXNuJ3QgY29udGFpbiBhbnkgZmlsZSwgdGhhdCBpcywgaXRzIHNpemUgaXMgMCwgdGhlIGxpY2Vuc2UKKyAgICAgICAgICAgICMgaXNuJ3QgcmVsZXZhbnQgYXMgZmFyIGFzIHRoZSBmaW5hbCBpbWFnZSBpcyBjb25jZXJuZWQuIFNvIGRvaW5nIGxpY2Vuc2UgY2hlY2sKKyAgICAgICAgICAgICMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UsIHNraXAgaXQuCisgICAgICAgICAgICBpZiBwa2dfZGljW3BrZ11bIlBLR1NJWkVfJXMiICUgcGtnXSA9PSAiMCI6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZm9yIGxpYyBpbiBwa2dfZGljW3BrZ11bIkxJQ0VOU0VTIl06CisgICAgICAgICAgICAgICAgbGljX2ZpbGUgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0xJQ0VOU0VfRElSRUNUT1JZJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnX2RpY1twa2ddWyJQTiJdLCAiZ2VuZXJpY18lcyIgJSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZS5zdWIoJ1wrJywgJycsIGxpYykpCisgICAgICAgICAgICAgICAgIyBhZGQgZXhwbGljaXR5IGF2b2lkIG9mIENMT1NFRCBsaWNlbnNlIGJlY2F1c2UgaXNuJ3QgZ2VuZXJpYworICAgICAgICAgICAgICAgIGlmIGxpYyA9PSAiQ0xPU0VEIjoKKyAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxpY19maWxlKToKKyAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJUaGUgbGljZW5zZSBsaXN0ZWQgJXMgd2FzIG5vdCBpbiB0aGUgIlwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpY2Vuc2VzIGNvbGxlY3RlZCBmb3IgcmVjaXBlICVzIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChsaWMsIHBrZ19kaWNbcGtnXVsiUE4iXSkpCisKKyAgICAjIFR3byBvcHRpb25zIGhlcmU6CisgICAgIyAtIEp1c3QgY29weSB0aGUgbWFuaWZlc3QKKyAgICAjIC0gQ29weSB0aGUgbWFuaWZlc3QgYW5kIHRoZSBsaWNlbnNlIGRpcmVjdG9yaWVzCisgICAgIyBXaXRoIGJvdGggb3B0aW9ucyBzZXQgd2Ugc2VlIGEgLjUgTSBpbmNyZWFzZSBpbiBjb3JlLWltYWdlLW1pbmltYWwKKyAgICBjb3B5X2xpY19tYW5pZmVzdCA9IGQuZ2V0VmFyKCdDT1BZX0xJQ19NQU5JRkVTVCcsIFRydWUpCisgICAgY29weV9saWNfZGlycyA9IGQuZ2V0VmFyKCdDT1BZX0xJQ19ESVJTJywgVHJ1ZSkKKyAgICBpZiBjb3B5X2xpY19tYW5pZmVzdCA9PSAiMSI6CisgICAgICAgIHJvb3Rmc19saWNlbnNlX2RpciA9IG9zLnBhdGguam9pbihkLmdldFZhcignSU1BR0VfUk9PVEZTJywgJ1RydWUnKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1c3InLCAnc2hhcmUnLCAnY29tbW9uLWxpY2Vuc2VzJykKKyAgICAgICAgb3MubWFrZWRpcnMocm9vdGZzX2xpY2Vuc2VfZGlyKQorICAgICAgICByb290ZnNfbGljZW5zZV9tYW5pZmVzdCA9IG9zLnBhdGguam9pbihyb290ZnNfbGljZW5zZV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGljZW5zZS5tYW5pZmVzdCcpCisgICAgICAgIG9zLmxpbmsobGljZW5zZV9tYW5pZmVzdCwgcm9vdGZzX2xpY2Vuc2VfbWFuaWZlc3QpCisKKyAgICAgICAgaWYgY29weV9saWNfZGlycyA9PSAiMSI6CisgICAgICAgICAgICBmb3IgcGtnIGluIHNvcnRlZChwa2dfZGljKToKKyAgICAgICAgICAgICAgICBwa2dfcm9vdGZzX2xpY2Vuc2VfZGlyID0gb3MucGF0aC5qb2luKHJvb3Rmc19saWNlbnNlX2RpciwgcGtnKQorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHBrZ19yb290ZnNfbGljZW5zZV9kaXIpCisgICAgICAgICAgICAgICAgcGtnX2xpY2Vuc2VfZGlyID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdMSUNFTlNFX0RJUkVDVE9SWScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dfZGljW3BrZ11bIlBOIl0pIAorICAgICAgICAgICAgICAgIGxpY2Vuc2VzID0gb3MubGlzdGRpcihwa2dfbGljZW5zZV9kaXIpCisgICAgICAgICAgICAgICAgZm9yIGxpYyBpbiBsaWNlbnNlczoKKyAgICAgICAgICAgICAgICAgICAgcm9vdGZzX2xpY2Vuc2UgPSBvcy5wYXRoLmpvaW4ocm9vdGZzX2xpY2Vuc2VfZGlyLCBsaWMpCisgICAgICAgICAgICAgICAgICAgIHBrZ19saWNlbnNlID0gb3MucGF0aC5qb2luKHBrZ19saWNlbnNlX2RpciwgbGljKQorICAgICAgICAgICAgICAgICAgICBwa2dfcm9vdGZzX2xpY2Vuc2UgPSBvcy5wYXRoLmpvaW4ocGtnX3Jvb3Rmc19saWNlbnNlX2RpciwgbGljKQorCisgICAgICAgICAgICAgICAgICAgIGlmIHJlLm1hdGNoKCJeZ2VuZXJpY18uKiQiLCBsaWMpOgorICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY19saWMgPSByZS5zZWFyY2goIl5nZW5lcmljXyguKikkIiwgbGljKS5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb2UubGljZW5zZS5saWNlbnNlX29rKGNhbm9uaWNhbF9saWNlbnNlKGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY19saWMpLCBiYWRfbGljZW5zZXMpID09IEZhbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhyb290ZnNfbGljZW5zZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MubGluayhwa2dfbGljZW5zZSwgcm9vdGZzX2xpY2Vuc2UpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsob3MucGF0aC5qb2luKCcuLicsIGxpYyksIHBrZ19yb290ZnNfbGljZW5zZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9lLmxpY2Vuc2UubGljZW5zZV9vayhjYW5vbmljYWxfbGljZW5zZShkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYyksIGJhZF9saWNlbnNlcykgPT0gRmFsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICAgICAgb3MubGluayhwa2dfbGljZW5zZSwgcGtnX3Jvb3Rmc19saWNlbnNlKQorfQorCitweXRob24gZG9fcG9wdWxhdGVfbGljKCkgeworICAgICIiIgorICAgIFBvcHVsYXRlIExJQ0VOU0VfRElSRUNUT1JZIHdpdGggbGljZW5zZXMuCisgICAgIiIiCisgICAgbGljX2ZpbGVzX3BhdGhzID0gZmluZF9saWNlbnNlX2ZpbGVzKGQpCisKKyAgICAjIFRoZSBiYXNlIGRpcmVjdG9yeSB3ZSB3cmFuZ2xlIGxpY2Vuc2VzIHRvCisgICAgZGVzdGRpciA9IG9zLnBhdGguam9pbihkLmdldFZhcignTElDU1NUQVRFRElSJywgVHJ1ZSksIGQuZ2V0VmFyKCdQTicsIFRydWUpKQorICAgIGNvcHlfbGljZW5zZV9maWxlcyhsaWNfZmlsZXNfcGF0aHMsIGRlc3RkaXIpCit9CisKKyMgaXQgd291bGQgYmUgYmV0dGVyIHRvIGNvcHkgdGhlbSBpbiBkb19pbnN0YWxsX2FwcGVuZCwgYnV0IGZpbmRfbGljZW5zZV9maWxlc2EgaXMgcHl0aG9uCitweXRob24gcGVyZm9ybV9wYWNrYWdlY29weV9wcmVwZW5kICgpIHsKKyAgICBlbmFibGVkID0gb2UuZGF0YS50eXBlZF92YWx1ZSgnTElDRU5TRV9DUkVBVEVfUEFDS0FHRScsIGQpCisgICAgaWYgZC5nZXRWYXIoJ0NMQVNTT1ZFUlJJREUnLCBUcnVlKSA9PSAnY2xhc3MtdGFyZ2V0JyBhbmQgZW5hYmxlZDoKKyAgICAgICAgbGljX2ZpbGVzX3BhdGhzID0gZmluZF9saWNlbnNlX2ZpbGVzKGQpCisKKyAgICAgICAgIyBMSUNFTlNFX0ZJTEVTX0RJUkVDVE9SWSBzdGFydHMgd2l0aCAnLycgc28gb3MucGF0aC5qb2luIGNhbm5vdCBiZSB1c2VkIHRvIGpvaW4gRCBhbmQgTElDRU5TRV9GSUxFU19ESVJFQ1RPUlkKKyAgICAgICAgZGVzdGRpciA9IGQuZ2V0VmFyKCdEJywgVHJ1ZSkgKyBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0xJQ0VOU0VfRklMRVNfRElSRUNUT1JZJywgVHJ1ZSksIGQuZ2V0VmFyKCdQTicsIFRydWUpKQorICAgICAgICBjb3B5X2xpY2Vuc2VfZmlsZXMobGljX2ZpbGVzX3BhdGhzLCBkZXN0ZGlyKQorICAgICAgICBhZGRfcGFja2FnZV9hbmRfZmlsZXMoZCkKK30KKworZGVmIGFkZF9wYWNrYWdlX2FuZF9maWxlcyhkKToKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgZmlsZXMgPSBkLmdldFZhcignTElDRU5TRV9GSUxFU19ESVJFQ1RPUlknLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBwbl9saWMgPSAiJXMlcyIgJSAocG4sIGQuZ2V0VmFyKCdMSUNFTlNFX1BBQ0tBR0VfU1VGRklYJywgRmFsc2UpKQorICAgIGlmIHBuX2xpYyBpbiBwYWNrYWdlczoKKyAgICAgICAgYmIud2FybigiJXMgcGFja2FnZSBhbHJlYWR5IGV4aXN0ZWQgaW4gJXMuIiAlIChwbl9saWMsIHBuKSkKKyAgICBlbHNlOgorICAgICAgICAjIGZpcnN0IGluIFBBQ0tBR0VTIHRvIGJlIHN1cmUgdGhhdCBub3RoaW5nIGVsc2UgZ2V0cyBMSUNFTlNFX0ZJTEVTX0RJUkVDVE9SWQorICAgICAgICBkLnNldFZhcignUEFDS0FHRVMnLCAiJXMgJXMiICUgKHBuX2xpYywgcGFja2FnZXMpKQorICAgICAgICBkLnNldFZhcignRklMRVNfJyArIHBuX2xpYywgZmlsZXMpCisgICAgICAgIHJyZWNvbW1lbmRzX3BuID0gZC5nZXRWYXIoJ1JSRUNPTU1FTkRTXycgKyBwbiwgVHJ1ZSkKKyAgICAgICAgaWYgcnJlY29tbWVuZHNfcG46CisgICAgICAgICAgICBkLnNldFZhcignUlJFQ09NTUVORFNfJyArIHBuLCAiJXMgJXMiICUgKHBuX2xpYywgcnJlY29tbWVuZHNfcG4pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1JSRUNPTU1FTkRTXycgKyBwbiwgIiVzIiAlIChwbl9saWMpKQorCitkZWYgY29weV9saWNlbnNlX2ZpbGVzKGxpY19maWxlc19wYXRocywgZGVzdGRpcik6CisgICAgaW1wb3J0IHNodXRpbAorCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGRlc3RkaXIpCisgICAgZm9yIChiYXNlbmFtZSwgcGF0aCkgaW4gbGljX2ZpbGVzX3BhdGhzOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzcmMgPSBwYXRoCisgICAgICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgYmFzZW5hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkc3QpOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShkc3QpCisgICAgICAgICAgICBpZiBvcy5hY2Nlc3Moc3JjLCBvcy5XX09LKSBhbmQgKG9zLnN0YXQoc3JjKS5zdF9kZXYgPT0gb3Muc3RhdChkZXN0ZGlyKS5zdF9kZXYpOgorICAgICAgICAgICAgICAgIG9zLmxpbmsoc3JjLCBkc3QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzcmMsIGRzdCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgYmIud2FybigiQ291bGQgbm90IGNvcHkgbGljZW5zZSBmaWxlICVzIHRvICVzOiAlcyIgJSAoc3JjLCBkc3QsIGUpKQorCitkZWYgZmluZF9saWNlbnNlX2ZpbGVzKGQpOgorICAgICIiIgorICAgIENyZWF0ZXMgbGlzdCBvZiBmaWxlcyB1c2VkIGluIExJQ19GSUxFU19DSEtTVU0gYW5kIGdlbmVyaWMgTElDRU5TRSBmaWxlcy4KKyAgICAiIiIKKyAgICBpbXBvcnQgc2h1dGlsCisgICAgaW1wb3J0IG9lLmxpY2Vuc2UKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBmb3IgcGFja2FnZSBpbiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKToKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0xJQ0VOU0VfJyArIHBhY2thZ2UsIFRydWUpOgorICAgICAgICAgICAgbGljZW5zZV90eXBlcyA9IGxpY2Vuc2VfdHlwZXMgKyAnICYgJyArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignTElDRU5TRV8nICsgcGFja2FnZSwgVHJ1ZSkKKworICAgICNJZiB3ZSBnZXQgaGVyZSB3aXRoIG5vIGxpY2Vuc2UgdHlwZXMsIHRoZW4gdGhhdCBtZWFucyB3ZSBoYXZlIGEgcmVjaXBlIAorICAgICNsZXZlbCBsaWNlbnNlLiBJZiBzbywgd2UgZ3JhYiBvbmx5IHRob3NlLgorICAgIHRyeToKKyAgICAgICAgbGljZW5zZV90eXBlcworICAgIGV4Y2VwdCBOYW1lRXJyb3I6ICAgICAgICAKKyAgICAgICAgIyBBbGwgdGhlIGxpY2Vuc2UgdHlwZXMgYXQgdGhlIHJlY2lwZSBsZXZlbAorICAgICAgICBsaWNlbnNlX3R5cGVzID0gZC5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorIAorICAgICMgQWxsIHRoZSBsaWNlbnNlIGZpbGVzIGZvciB0aGUgcGFja2FnZQorICAgIGxpY19maWxlcyA9IGQuZ2V0VmFyKCdMSUNfRklMRVNfQ0hLU1VNJywgVHJ1ZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgIyBUaGUgbGljZW5zZSBmaWxlcyBhcmUgbG9jYXRlZCBpbiBTL0xJQ19GSUxFX0NIRUNLU1VNLgorICAgIHNyY2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICAjIERpcmVjdG9yeSB3ZSBzdG9yZSB0aGUgZ2VuZXJpYyBsaWNlbnNlcyBhcyBzZXQgaW4gdGhlIGRpc3RybyBjb25maWd1cmF0aW9uCisgICAgZ2VuZXJpY19kaXJlY3RvcnkgPSBkLmdldFZhcignQ09NTU9OX0xJQ0VOU0VfRElSJywgVHJ1ZSkKKyAgICAjIExpc3Qgb2YgYmFzZW5hbWUsIHBhdGggdHVwbGVzCisgICAgbGljX2ZpbGVzX3BhdGhzID0gW10KKyAgICBsaWNlbnNlX3NvdXJjZV9kaXJzID0gW10KKyAgICBsaWNlbnNlX3NvdXJjZV9kaXJzLmFwcGVuZChnZW5lcmljX2RpcmVjdG9yeSkKKyAgICB0cnk6CisgICAgICAgIGFkZGl0aW9uYWxfbGljX2RpcnMgPSBkLmdldFZhcignTElDRU5TRV9QQVRIJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBmb3IgbGljX2RpciBpbiBhZGRpdGlvbmFsX2xpY19kaXJzOgorICAgICAgICAgICAgbGljZW5zZV9zb3VyY2VfZGlycy5hcHBlbmQobGljX2RpcikKKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKworICAgIGNsYXNzIEZpbmRWaXNpdG9yKG9lLmxpY2Vuc2UuTGljZW5zZVZpc2l0b3IpOgorICAgICAgICBkZWYgdmlzaXRfU3RyKHNlbGYsIG5vZGUpOgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBVbnRpbCBJIGZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoCisgICAgICAgICAgICAjIHRoZSB0d28gbW9kaWZpZXJzIEkgc3VwcG9ydCAob3IgZ3JlYXRlciA9ICsKKyAgICAgICAgICAgICMgYW5kICJ3aXRoIGV4Y2VwdGlvbnMiIGJlaW5nICoKKyAgICAgICAgICAgICMgd2UnbGwganVzdCBzdHJpcCBvdXQgdGhlIG1vZGlmaWVyIGFuZCBwdXQKKyAgICAgICAgICAgICMgdGhlIGJhc2UgbGljZW5zZS4KKyAgICAgICAgICAgIGZpbmRfbGljZW5zZShub2RlLnMucmVwbGFjZSgiKyIsICIiKS5yZXBsYWNlKCIqIiwgIiIpKQorICAgICAgICAgICAgc2VsZi5nZW5lcmljX3Zpc2l0KG5vZGUpCisKKyAgICBkZWYgZmluZF9saWNlbnNlKGxpY2Vuc2VfdHlwZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihnZW5fbGljX2Rlc3QpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc3BkeF9nZW5lcmljID0gTm9uZQorICAgICAgICBsaWNlbnNlX3NvdXJjZSA9IE5vbmUKKyAgICAgICAgIyBJZiB0aGUgZ2VuZXJpYyBkb2VzIG5vdCBleGlzdCB3ZSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBTUERYIG1hcHBpbmcgdG8gaXQsCisgICAgICAgICMgdW5sZXNzIE5PX0dFTkVSSUNfTElDRU5TRSBpcyBzZXQuCisKKyAgICAgICAgZm9yIGxpY19kaXIgaW4gbGljZW5zZV9zb3VyY2VfZGlyczoKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4obGljX2RpciwgbGljZW5zZV90eXBlKSk6CisgICAgICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdTUERYTElDRU5TRU1BUCcsIGxpY2Vuc2VfdHlwZSkgIT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBHcmVhdCwgdGhlcmUgaXMgYW4gU1BEWExJQ0VOU0VNQVAuIFdlIGNhbiBjb3B5IQorICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiV2UgbmVlZCB0byB1c2UgYSBTUERYTElDRU5TRU1BUCBmb3IgJXMiICUgKGxpY2Vuc2VfdHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHNwZHhfZ2VuZXJpYyA9IGQuZ2V0VmFyRmxhZygnU1BEWExJQ0VOU0VNQVAnLCBsaWNlbnNlX3R5cGUpCisgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2Vfc291cmNlID0gbGljX2RpcgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4obGljX2RpciwgbGljZW5zZV90eXBlKSk6CisgICAgICAgICAgICAgICAgc3BkeF9nZW5lcmljID0gbGljZW5zZV90eXBlCisgICAgICAgICAgICAgICAgbGljZW5zZV9zb3VyY2UgPSBsaWNfZGlyCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBzcGR4X2dlbmVyaWMgYW5kIGxpY2Vuc2Vfc291cmNlOgorICAgICAgICAgICAgIyB3ZSByZWFsbHkgc2hvdWxkIGNvcHkgdG8gZ2VuZXJpY18gKyBzcGR4X2dlbmVyaWMsIGhvd2V2ZXIsIHRoYXQgZW5kcyB1cCBtZXNzaW5nIHRoZSBtYW5pZmVzdAorICAgICAgICAgICAgIyBhdWRpdCB1cC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgaW4gZW1pdF9wa2dkYXRhIChvciwgd2UgYWN0dWFsbHkgZ290IGFuZCBmaXggYWxsIHRoZSByZWNpcGVzKQorCisgICAgICAgICAgICBsaWNfZmlsZXNfcGF0aHMuYXBwZW5kKCgiZ2VuZXJpY18iICsgbGljZW5zZV90eXBlLCBvcy5wYXRoLmpvaW4obGljZW5zZV9zb3VyY2UsIHNwZHhfZ2VuZXJpYykpKQorCisgICAgICAgICAgICAjIFRoZSB1c2VyIG1heSBhdHRlbXB0IHRvIHVzZSBOT19HRU5FUklDX0xJQ0VOU0UgZm9yIGEgZ2VuZXJpYyBsaWNlbnNlIHdoaWNoIGRvZXNuJ3QgbWFrZSBzZW5zZQorICAgICAgICAgICAgIyBhbmQgc2hvdWxkIG5vdCBiZSBhbGxvd2VkLCB3YXJuIHRoZSB1c2VyIGluIHRoaXMgY2FzZS4KKyAgICAgICAgICAgIGlmIGQuZ2V0VmFyRmxhZygnTk9fR0VORVJJQ19MSUNFTlNFJywgbGljZW5zZV90eXBlKToKKyAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogJXMgaXMgYSBnZW5lcmljIGxpY2Vuc2UsIHBsZWFzZSBkb24ndCB1c2UgTk9fR0VORVJJQ19MSUNFTlNFIGZvciBpdC4iICUgKHBuLCBsaWNlbnNlX3R5cGUpKQorCisgICAgICAgIGVsaWYgZC5nZXRWYXJGbGFnKCdOT19HRU5FUklDX0xJQ0VOU0UnLCBsaWNlbnNlX3R5cGUpOgorICAgICAgICAgICAgIyBpZiBOT19HRU5FUklDX0xJQ0VOU0UgaXMgc2V0LCB3ZSBjb3B5IHRoZSBsaWNlbnNlIGZpbGVzIGZyb20gdGhlIGZldGNoZWQgc291cmNlCisgICAgICAgICAgICAjIG9mIHRoZSBwYWNrYWdlIHJhdGhlciB0aGFuIHRoZSBsaWNlbnNlX3NvdXJjZV9kaXJzLgorICAgICAgICAgICAgZm9yIChiYXNlbmFtZSwgcGF0aCkgaW4gbGljX2ZpbGVzX3BhdGhzOgorICAgICAgICAgICAgICAgIGlmIGQuZ2V0VmFyRmxhZygnTk9fR0VORVJJQ19MSUNFTlNFJywgbGljZW5zZV90eXBlKSA9PSBiYXNlbmFtZToKKyAgICAgICAgICAgICAgICAgICAgbGljX2ZpbGVzX3BhdGhzLmFwcGVuZCgoImdlbmVyaWNfIiArIGxpY2Vuc2VfdHlwZSwgcGF0aCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEFkZCBleHBsaWNpdHkgYXZvaWQgb2YgQ0xPU0VEIGxpY2Vuc2UgYmVjYXVzZSB0aGlzIGlzbid0IGdlbmVyaWMKKyAgICAgICAgICAgIGlmIGxpY2Vuc2VfdHlwZSAhPSAnQ0xPU0VEJzoKKyAgICAgICAgICAgICAgICAjIEFuZCBoZXJlIGlzIHdoZXJlIHdlIHdhcm4gcGVvcGxlIHRoYXQgdGhlaXIgbGljZW5zZXMgYXJlIGxvdXN5CisgICAgICAgICAgICAgICAgYmIud2FybigiJXM6IE5vIGdlbmVyaWMgbGljZW5zZSBmaWxlIGV4aXN0cyBmb3I6ICVzIGluIGFueSBwcm92aWRlciIgJSAocG4sIGxpY2Vuc2VfdHlwZSkpCisgICAgICAgICAgICBwYXNzCisKKyAgICBpZiBub3QgZ2VuZXJpY19kaXJlY3Rvcnk6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIkNPTU1PTl9MSUNFTlNFX0RJUiBpcyB1bnNldC4gUGxlYXNlIHNldCB0aGlzIGluIHlvdXIgZGlzdHJvIGNvbmZpZyIpCisKKyAgICBpZiBub3QgbGljX2ZpbGVzOgorICAgICAgICAjIE5vIHJlY2lwZSBzaG91bGQgaGF2ZSBhbiBpbnZhbGlkIGxpY2Vuc2UgZmlsZS4gVGhpcyBpcyBjaGVja2VkIGVsc2UKKyAgICAgICAgIyB3aGVyZSwgYnV0IGxldCdzIGJlIHBlZGFudGljCisgICAgICAgIGJiLm5vdGUocG4gKyAiOiBSZWNpcGUgZmlsZSBkb2VzIG5vdCBoYXZlIGxpY2Vuc2UgZmlsZSBpbmZvcm1hdGlvbi4iKQorICAgICAgICByZXR1cm4gbGljX2ZpbGVzX3BhdGhzCisKKyAgICBmb3IgdXJsIGluIGxpY19maWxlcy5zcGxpdCgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAodHlwZSwgaG9zdCwgcGF0aCwgdXNlciwgcHN3ZCwgcGFybSkgPSBiYi5mZXRjaC5kZWNvZGV1cmwodXJsKQorICAgICAgICBleGNlcHQgYmIuZmV0Y2guTWFsZm9ybWVkVXJsOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXM6IExJQ19GSUxFU19DSEtTVU0gY29udGFpbnMgYW4gaW52YWxpZCBVUkw6ICAlcyIgJSAoZC5nZXRWYXIoJ1BGJywgVHJ1ZSksIHVybCkpCisgICAgICAgICMgV2Ugd2FudCB0aGUgbGljZW5zZSBmaWxlbmFtZSBhbmQgcGF0aAorICAgICAgICBzcmNsaWNmaWxlID0gb3MucGF0aC5qb2luKHNyY2RpciwgcGF0aCkKKyAgICAgICAgbGljX2ZpbGVzX3BhdGhzLmFwcGVuZCgob3MucGF0aC5iYXNlbmFtZShwYXRoKSwgc3JjbGljZmlsZSkpCisKKyAgICB2ID0gRmluZFZpc2l0b3IoKQorICAgIHRyeToKKyAgICAgICAgdi52aXNpdF9zdHJpbmcobGljZW5zZV90eXBlcykKKyAgICBleGNlcHQgb2UubGljZW5zZS5JbnZhbGlkTGljZW5zZSBhcyBleGM6CisgICAgICAgIGJiLmZhdGFsKCclczogJXMnICUgKGQuZ2V0VmFyKCdQRicsIFRydWUpLCBleGMpKQorICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgYmIud2FybigiJXM6IEZhaWxlZCB0byBwYXJzZSBpdCdzIExJQ0VOU0UgZmllbGQuIiAlIChkLmdldFZhcignUEYnLCBUcnVlKSkpCisKKyAgICByZXR1cm4gbGljX2ZpbGVzX3BhdGhzCisKK2RlZiByZXR1cm5fc3BkeChkLCBsaWNlbnNlKToKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNwZHggbWFwcGluZyBvZiBhIGxpY2Vuc2UgaWYgaXQgZXhpc3RzLgorICAgICAiIiIKKyAgICByZXR1cm4gZC5nZXRWYXJGbGFnKCdTUERYTElDRU5TRU1BUCcsIGxpY2Vuc2UsIFRydWUpCisKK2RlZiBjYW5vbmljYWxfbGljZW5zZShkLCBsaWNlbnNlKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIGNhbm9uaWNhbCAoU1BEWCkgZm9ybSBvZiB0aGUgbGljZW5zZSBpZiBhdmFpbGFibGUgKHNvIEdQTHYzCisgICAgYmVjb21lcyBHUEwtMy4wKSwgZm9yIHRoZSBsaWNlbnNlIG5hbWVkICdYKycsIHJldHVybiBjYW5vbmljYWwgZm9ybSBvZgorICAgICdYJyBpZiBhdmFpbGFiZWwgYW5kIHRoZSB0YWlsaW5nICcrJyAoc28gR1BMdjMrIGJlY29tZXMgR1BMLTMuMCspLCAKKyAgICBvciB0aGUgcGFzc2VkIGxpY2Vuc2UgaWYgdGhlcmUgaXMgbm8gY2Fub25pY2FsIGZvcm0uCisgICAgIiIiCisgICAgbGljID0gZC5nZXRWYXJGbGFnKCdTUERYTElDRU5TRU1BUCcsIGxpY2Vuc2UsIFRydWUpIG9yICIiCisgICAgaWYgbm90IGxpYyBhbmQgbGljZW5zZS5lbmRzd2l0aCgnKycpOgorICAgICAgICBsaWMgPSBkLmdldFZhckZsYWcoJ1NQRFhMSUNFTlNFTUFQJywgbGljZW5zZS5yc3RyaXAoJysnKSwgVHJ1ZSkKKyAgICAgICAgaWYgbGljOgorICAgICAgICAgICAgbGljICs9ICcrJworICAgIHJldHVybiBsaWMgb3IgbGljZW5zZQorCitkZWYgZXhwYW5kX3dpbGRjYXJkX2xpY2Vuc2VzKGQsIHdpbGRjYXJkX2xpY2Vuc2VzKToKKyAgICAiIiIKKyAgICBSZXR1cm4gYWN0dWFsIHNwZHggZm9ybWF0IGxpY2Vuc2UgbmFtZXMgaWYgd2lsZGNhcmQgdXNlZC4gV2UgZXhwYW5kCisgICAgd2lsZGNhcmRzIGZyb20gU1BEWExJQ0VOU0VNQVAgZmxhZ3MgYW5kIFNSQ19ESVNUUklCVVRFX0xJQ0VOU0VTIHZhbHVlcy4KKyAgICAiIiIKKyAgICBpbXBvcnQgZm5tYXRjaAorICAgIGxpY2Vuc2VzID0gW10KKyAgICBzcGR4bWFwa2V5cyA9IGQuZ2V0VmFyRmxhZ3MoJ1NQRFhMSUNFTlNFTUFQJykua2V5cygpCisgICAgZm9yIHdsZF9saWMgaW4gd2lsZGNhcmRfbGljZW5zZXM6CisgICAgICAgIHNwZHhmbGFncyA9IGZubWF0Y2guZmlsdGVyKHNwZHhtYXBrZXlzLCB3bGRfbGljKQorICAgICAgICBsaWNlbnNlcyArPSBbZC5nZXRWYXJGbGFnKCdTUERYTElDRU5TRU1BUCcsIGZsYWcpIGZvciBmbGFnIGluIHNwZHhmbGFnc10KKworICAgIHNwZHhfbGljcyA9IChkLmdldFZhcignU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMnLCBGYWxzZSkgb3IgJycpLnNwbGl0KCkKKyAgICBmb3Igd2xkX2xpYyBpbiB3aWxkY2FyZF9saWNlbnNlczoKKyAgICAgICAgbGljZW5zZXMgKz0gZm5tYXRjaC5maWx0ZXIoc3BkeF9saWNzLCB3bGRfbGljKQorCisgICAgbGljZW5zZXMgPSBsaXN0KHNldChsaWNlbnNlcykpCisgICAgcmV0dXJuIGxpY2Vuc2VzCisKK2RlZiBpbmNvbXBhdGlibGVfbGljZW5zZV9jb250YWlucyhsaWNlbnNlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIGxpY2Vuc2UgPSBjYW5vbmljYWxfbGljZW5zZShkLCBsaWNlbnNlKQorICAgIGJhZF9saWNlbnNlcyA9IChkLmdldFZhcignSU5DT01QQVRJQkxFX0xJQ0VOU0UnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGJhZF9saWNlbnNlcyA9IGV4cGFuZF93aWxkY2FyZF9saWNlbnNlcyhkLCBiYWRfbGljZW5zZXMpCisgICAgcmV0dXJuIHRydWV2YWx1ZSBpZiBsaWNlbnNlIGluIGJhZF9saWNlbnNlcyBlbHNlIGZhbHNldmFsdWUKKworZGVmIGluY29tcGF0aWJsZV9saWNlbnNlKGQsIGRvbnRfd2FudF9saWNlbnNlcywgcGFja2FnZT1Ob25lKToKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIHJlY2lwZSBoYXMgb25seSBpbmNvbXBhdGlibGUgbGljZW5zZXMuIEl0IGFsc28KKyAgICB0YWtlIGludG8gY29uc2lkZXJhdGlvbiAnb3InIG9wZXJhbmQuICBkb250X3dhbnRfbGljZW5zZXMgc2hvdWxkIGJlIHBhc3NlZAorICAgIGFzIGNhbm9uaWNhbCAoU1BEWCkgbmFtZXMuCisgICAgIiIiCisgICAgaW1wb3J0IG9lLmxpY2Vuc2UKKyAgICBsaWNlbnNlID0gZC5nZXRWYXIoIkxJQ0VOU0VfJXMiICUgcGFja2FnZSwgVHJ1ZSkgaWYgcGFja2FnZSBlbHNlIE5vbmUKKyAgICBpZiBub3QgbGljZW5zZToKKyAgICAgICAgbGljZW5zZSA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKworICAgICMgSGFuZGxlcyBhbiAib3IiIG9yIHR3byBsaWNlbnNlIHNldHMgcHJvdmlkZWQgYnkKKyAgICAjIGZsYXR0ZW5lZF9saWNlbnNlcygpLCBwaWNrIG9uZSB0aGF0IHdvcmtzIGlmIHBvc3NpYmxlLgorICAgIGRlZiBjaG9vc2VfbGljX3NldChhLCBiKToKKyAgICAgICAgcmV0dXJuIGEgaWYgYWxsKG9lLmxpY2Vuc2UubGljZW5zZV9vayhjYW5vbmljYWxfbGljZW5zZShkLCBsaWMpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb250X3dhbnRfbGljZW5zZXMpIGZvciBsaWMgaW4gYSkgZWxzZSBiCisKKyAgICB0cnk6CisgICAgICAgIGxpY2Vuc2VzID0gb2UubGljZW5zZS5mbGF0dGVuZWRfbGljZW5zZXMobGljZW5zZSwgY2hvb3NlX2xpY19zZXQpCisgICAgZXhjZXB0IG9lLmxpY2Vuc2UuTGljZW5zZUVycm9yIGFzIGV4YzoKKyAgICAgICAgYmIuZmF0YWwoJyVzOiAlcycgJSAoZC5nZXRWYXIoJ1AnLCBUcnVlKSwgZXhjKSkKKyAgICByZXR1cm4gYW55KG5vdCBvZS5saWNlbnNlLmxpY2Vuc2Vfb2soY2Fub25pY2FsX2xpY2Vuc2UoZCwgbCksIFwKKwkJZG9udF93YW50X2xpY2Vuc2VzKSBmb3IgbCBpbiBsaWNlbnNlcykKKworZGVmIGNoZWNrX2xpY2Vuc2VfZmxhZ3MoZCk6CisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgYSByZWNpcGUgaGFzIGFueSBMSUNFTlNFX0ZMQUdTIHRoYXQKKyAgICBhcmVuJ3Qgd2hpdGVsaXN0ZWQuCisKKyAgICBJZiBpdCBkb2VzLCBpdCByZXR1cm5zIHRoZSBmaXJzdCBMSUNFTlNFX0ZMQUdTIGl0ZW0gbWlzc2luZyBmcm9tIHRoZQorICAgIHdoaXRlbGlzdCwgb3IgYWxsIG9mIHRoZSBMSUNFTlNFX0ZMQUdTIGlmIHRoZXJlIGlzIG5vIHdoaXRlbGlzdC4KKworICAgIElmIGV2ZXJ5dGhpbmcgaXMgaXMgcHJvcGVybHkgd2hpdGVsaXN0ZWQsIGl0IHJldHVybnMgTm9uZS4KKyAgICAiIiIKKworICAgIGRlZiBsaWNlbnNlX2ZsYWdfbWF0Y2hlcyhmbGFnLCB3aGl0ZWxpc3QsIHBuKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBUcnVlIGlmIGZsYWcgbWF0Y2hlcyBzb21ldGhpbmcgaW4gd2hpdGVsaXN0LCBOb25lIGlmIG5vdC4KKworICAgICAgICBCZWZvcmUgd2UgdGVzdCBhIGZsYWcgYWdhaW5zdCB0aGUgd2hpdGVsaXN0LCB3ZSBhcHBlbmQgXyR7UE59CisgICAgICAgIHRvIGl0LiAgV2UgdGhlbiB0cnkgdG8gbWF0Y2ggdGhhdCBzdHJpbmcgYWdhaW5zdCB0aGUKKyAgICAgICAgd2hpdGVsaXN0LiAgVGhpcyBjb3ZlcnMgdGhlIG5vcm1hbCBjYXNlLCB3aGVyZSB3ZSBleHBlY3QKKyAgICAgICAgTElDRU5TRV9GTEFHUyB0byBiZSBhIHNpbXBsZSBzdHJpbmcgbGlrZSAnY29tbWVyY2lhbCcsIHdoaWNoCisgICAgICAgIHRoZSB1c2VyIHR5cGljYWxseSBtYXRjaGVzIGV4YWN0bHkgaW4gdGhlIHdoaXRlbGlzdCBieQorICAgICAgICBleHBsaWNpdGx5IGFwcGVuZGluZyB0aGUgcGFja2FnZSBuYW1lIGUuZyAnY29tbWVyY2lhbF9mb28nLgorICAgICAgICBJZiB3ZSBmYWlsIHRoZSBtYXRjaCBob3dldmVyLCB3ZSB0aGVuIHNwbGl0IHRoZSBmbGFnIGFjcm9zcworICAgICAgICAnXycgYW5kIGFwcGVuZCBlYWNoIGZyYWdtZW50IGFuZCB0ZXN0IHVudGlsIHdlIGVpdGhlciBtYXRjaCBvcgorICAgICAgICBydW4gb3V0IG9mIGZyYWdtZW50cy4KKyAgICAgICAgIiIiCisgICAgICAgIGZsYWdfcG4gPSAoIiVzXyVzIiAlIChmbGFnLCBwbikpCisgICAgICAgIGZvciBjYW5kaWRhdGUgaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgaWYgZmxhZ19wbiA9PSBjYW5kaWRhdGU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZmxhZ19jdXIgPSAiIgorICAgICAgICBmbGFnbWVudHMgPSBmbGFnX3BuLnNwbGl0KCJfIikKKyAgICAgICAgZmxhZ21lbnRzLnBvcCgpICMgd2UndmUgYWxyZWFkeSB0ZXN0ZWQgdGhlIGZ1bGwgc3RyaW5nCisgICAgICAgIGZvciBmbGFnbWVudCBpbiBmbGFnbWVudHM6CisgICAgICAgICAgICBpZiBmbGFnX2N1cjoKKyAgICAgICAgICAgICAgICBmbGFnX2N1ciArPSAiXyIKKyAgICAgICAgICAgIGZsYWdfY3VyICs9IGZsYWdtZW50CisgICAgICAgICAgICBmb3IgY2FuZGlkYXRlIGluIHdoaXRlbGlzdDoKKyAgICAgICAgICAgICAgICBpZiBmbGFnX2N1ciA9PSBjYW5kaWRhdGU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGFsbF9saWNlbnNlX2ZsYWdzX21hdGNoKGxpY2Vuc2VfZmxhZ3MsIHdoaXRlbGlzdCk6CisgICAgICAgICIiIiBSZXR1cm4gZmlyc3QgdW5tYXRjaGVkIGZsYWcsIE5vbmUgaWYgYWxsIGZsYWdzIG1hdGNoICIiIgorICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIHNwbGl0X3doaXRlbGlzdCA9IHdoaXRlbGlzdC5zcGxpdCgpCisgICAgICAgIGZvciBmbGFnIGluIGxpY2Vuc2VfZmxhZ3Muc3BsaXQoKToKKyAgICAgICAgICAgIGlmIG5vdCBsaWNlbnNlX2ZsYWdfbWF0Y2hlcyhmbGFnLCBzcGxpdF93aGl0ZWxpc3QsIHBuKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmxhZworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgbGljZW5zZV9mbGFncyA9IGQuZ2V0VmFyKCdMSUNFTlNFX0ZMQUdTJywgVHJ1ZSkKKyAgICBpZiBsaWNlbnNlX2ZsYWdzOgorICAgICAgICB3aGl0ZWxpc3QgPSBkLmdldFZhcignTElDRU5TRV9GTEFHU19XSElURUxJU1QnLCBUcnVlKQorICAgICAgICBpZiBub3Qgd2hpdGVsaXN0OgorICAgICAgICAgICAgcmV0dXJuIGxpY2Vuc2VfZmxhZ3MKKyAgICAgICAgdW5tYXRjaGVkX2ZsYWcgPSBhbGxfbGljZW5zZV9mbGFnc19tYXRjaChsaWNlbnNlX2ZsYWdzLCB3aGl0ZWxpc3QpCisgICAgICAgIGlmIHVubWF0Y2hlZF9mbGFnOgorICAgICAgICAgICAgcmV0dXJuIHVubWF0Y2hlZF9mbGFnCisgICAgcmV0dXJuIE5vbmUKKworZGVmIGNoZWNrX2xpY2Vuc2VfZm9ybWF0KGQpOgorICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIExJQ0VOU0UgaXMgd2VsbCBkZWZpbmVkLAorICAgICAgICBWYWxpZGF0ZSBvcGVyYXRvcnMgaW4gTElDRU5TRVMuCisgICAgICAgIE5vIHNwYWNlcyBhcmUgYWxsb3dlZCBiZXR3ZWVuIExJQ0VOU0VTLgorICAgICIiIgorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBsaWNlbnNlcyA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKyAgICBmcm9tIG9lLmxpY2Vuc2UgaW1wb3J0IGxpY2Vuc2Vfb3BlcmF0b3IsIGxpY2Vuc2Vfb3BlcmF0b3JfY2hhcnMsIGxpY2Vuc2VfcGF0dGVybgorCisgICAgZWxlbWVudHMgPSBmaWx0ZXIobGFtYmRhIHg6IHguc3RyaXAoKSwgbGljZW5zZV9vcGVyYXRvci5zcGxpdChsaWNlbnNlcykpCisgICAgZm9yIHBvcywgZWxlbWVudCBpbiBlbnVtZXJhdGUoZWxlbWVudHMpOgorICAgICAgICBpZiBsaWNlbnNlX3BhdHRlcm4ubWF0Y2goZWxlbWVudCk6CisgICAgICAgICAgICBpZiBwb3MgPiAwIGFuZCBsaWNlbnNlX3BhdHRlcm4ubWF0Y2goZWxlbWVudHNbcG9zIC0gMV0pOgorICAgICAgICAgICAgICAgIGJiLndhcm4oJyVzOiBMSUNFTlNFIHZhbHVlICIlcyIgaGFzIGFuIGludmFsaWQgZm9ybWF0IC0gbGljZW5zZSBuYW1lcyAnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICdtdXN0IGJlIHNlcGFyYXRlZCBieSB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgdG8gaW5kaWNhdGUgJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAndGhlIGxpY2Vuc2Ugc2VsZWN0aW9uOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgKHBuLCBsaWNlbnNlcywgbGljZW5zZV9vcGVyYXRvcl9jaGFycykpCisgICAgICAgIGVsaWYgbm90IGxpY2Vuc2Vfb3BlcmF0b3IubWF0Y2goZWxlbWVudCk6CisgICAgICAgICAgICBiYi53YXJuKCclczogTElDRU5TRSB2YWx1ZSAiJXMiIGhhcyBhbiBpbnZhbGlkIHNlcGFyYXRvciAiJXMiIHRoYXQgaXMgbm90ICcgXAorICAgICAgICAgICAgICAgICAgICAnaW4gdGhlIHZhbGlkIGxpc3Qgb2Ygc2VwYXJhdG9ycyAoJXMpJyAlCisgICAgICAgICAgICAgICAgICAgIChwbiwgbGljZW5zZXMsIGVsZW1lbnQsIGxpY2Vuc2Vfb3BlcmF0b3JfY2hhcnMpKQorCitTU1RBVEVUQVNLUyArPSAiZG9fcG9wdWxhdGVfbGljIgorZG9fcG9wdWxhdGVfbGljW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7TElDU1NUQVRFRElSfSIKK2RvX3BvcHVsYXRlX2xpY1tzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtMSUNFTlNFX0RJUkVDVE9SWX0vIgorCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORF9wcmVwZW5kID0gIndyaXRlX3BhY2thZ2VfbWFuaWZlc3Q7IGxpY2Vuc2VfY3JlYXRlX21hbmlmZXN0OyAiCisKK2RvX3BvcHVsYXRlX2xpY19zZXRzY2VuZVtkaXJzXSA9ICIke0xJQ1NTVEFURURJUn0vJHtQTn0iCitkb19wb3B1bGF0ZV9saWNfc2V0c2NlbmVbY2xlYW5kaXJzXSA9ICIke0xJQ1NTVEFURURJUn0iCitweXRob24gZG9fcG9wdWxhdGVfbGljX3NldHNjZW5lICgpIHsKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fcG9wdWxhdGVfbGljX3NldHNjZW5lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saW51eC1rZXJuZWwtYmFzZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGludXgta2VybmVsLWJhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWNlNzE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGludXgta2VybmVsLWJhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDQxIEBACisjIHBhcnNlIGtlcm5lbCBBQkkgdmVyc2lvbiBvdXQgb2YgPGxpbnV4L3ZlcnNpb24uaD4KK2RlZiBnZXRfa2VybmVsdmVyc2lvbl9oZWFkZXJzKHApOgorICAgIGltcG9ydCByZQorCisgICAgZm4gPSBwICsgJy9pbmNsdWRlL2xpbnV4L3V0c3JlbGVhc2UuaCcKKyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZm4pOgorICAgICAgICAjIGFmdGVyIDIuNi4zMy1yYzEKKyAgICAgICAgZm4gPSBwICsgJy9pbmNsdWRlL2dlbmVyYXRlZC91dHNyZWxlYXNlLmgnCisgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGZuKToKKyAgICAgICAgZm4gPSBwICsgJy9pbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCcKKworICAgIHRyeToKKyAgICAgICAgZiA9IG9wZW4oZm4sICdyJykKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGwgPSBmLnJlYWRsaW5lcygpCisgICAgZi5jbG9zZSgpCisgICAgciA9IHJlLmNvbXBpbGUoIiNkZWZpbmUgVVRTX1JFTEVBU0UgXCIoLiopXCIiKQorICAgIGZvciBzIGluIGw6CisgICAgICAgIG0gPSByLm1hdGNoKHMpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICByZXR1cm4gbS5ncm91cCgxKQorICAgIHJldHVybiBOb25lCisKKworZGVmIGdldF9rZXJuZWx2ZXJzaW9uX2ZpbGUocCk6CisgICAgZm4gPSBwICsgJy9rZXJuZWwtYWJpdmVyc2lvbicKKworICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgICAgICByZXR1cm4gZi5yZWFkbGluZXMoKVswXS5zdHJpcCgpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCisKK2RlZiBsaW51eF9tb2R1bGVfcGFja2FnZXMocywgZCk6CisJc3VmZml4ID0gIiIKKwlyZXR1cm4gIiAiLmpvaW4obWFwKGxhbWJkYSBzOiAia2VybmVsLW1vZHVsZS0lcyVzIiAlIChzLmxvd2VyKCkucmVwbGFjZSgnXycsICctJykucmVwbGFjZSgnQCcsICcrJyksIHN1ZmZpeCksIHMuc3BsaXQoKSkpCisKKyMgdGhhdCdzIGFsbAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9sb2dnaW5nLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9sb2dnaW5nLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjN2MzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xvZ2dpbmcuYmJjbGFzcwpAQCAtMCwwICsxLDEwMSBAQAorIyBUaGUgZm9sbG93aW5nIGxvZ2dpbmcgbWVjaGFuaXNtcyBhcmUgdG8gYmUgdXNlZCBpbiBiYXNoIGZ1bmN0aW9ucyBvZiByZWNpcGVzLgorIyBUaGV5IGFyZSBpbnRlbmRlZCB0byBtYXAgb25lIHRvIG9uZSBpbiBpbnRlbnRpb24gYW5kIG91dHB1dCBmb3JtYXQgd2l0aCB0aGUKKyMgcHl0aG9uIHJlY2lwZSBsb2dnaW5nIGZ1bmN0aW9ucyBvZiBhIHNpbWlsYXIgbmFtaW5nIGNvbnZlbnRpb246IGJiLnBsYWluKCksCisjIGJiLm5vdGUoKSwgZXRjLgorCitMT0dGSUZPID0gIiR7VH0vZmlmby4ke0Bvcy5nZXRwaWQoKX0iCisKKyMgUHJpbnQgdGhlIG91dHB1dCBleGFjdGx5IGFzIGl0IGlzIHBhc3NlZCBpbi4gVHlwaWNhbGx5IHVzZWQgZm9yIG91dHB1dCBvZgorIyB0YXNrcyB0aGF0IHNob3VsZCBiZSBzZWVuIG9uIHRoZSBjb25zb2xlLiBVc2Ugc3BhcmluZ2x5LgorIyBPdXRwdXQ6IGxvZ3MgY29uc29sZQorYmJwbGFpbigpIHsKKwlpZiBbIC1wICR7TE9HRklGT30gXSA7IHRoZW4KKwkJcHJpbnRmICIlYlwwIiAiYmJwbGFpbiAkKiIgPiAke0xPR0ZJRk99CisJZWxzZQorCQllY2hvICIkKiIKKwlmaQorfQorCisjIE5vdGlmeSB0aGUgdXNlciBvZiBhIG5vdGV3b3J0aHkgY29uZGl0aW9uLiAKKyMgT3V0cHV0OiBsb2dzCitiYm5vdGUoKSB7CisJaWYgWyAtcCAke0xPR0ZJRk99IF0gOyB0aGVuCisJCXByaW50ZiAiJWJcMCIgImJibm90ZSAkKiIgPiAke0xPR0ZJRk99CisJZWxzZQorCQllY2hvICJOT1RFOiAkKiIKKwlmaQorfQorCisjIFByaW50IGEgd2FybmluZyB0byB0aGUgbG9nLiBXYXJuaW5ncyBhcmUgbm9uLWZhdGFsLCBhbmQgZG8gbm90CisjIGluZGljYXRlIGEgYnVpbGQgZmFpbHVyZS4KKyMgT3V0cHV0OiBsb2dzIGNvbnNvbGUKK2Jid2FybigpIHsKKwlpZiBbIC1wICR7TE9HRklGT30gXSA7IHRoZW4KKwkJcHJpbnRmICIlYlwwIiAiYmJ3YXJuICQqIiA+ICR7TE9HRklGT30KKwllbHNlCisJCWVjaG8gIldBUk5JTkc6ICQqIgorCWZpCit9CisKKyMgUHJpbnQgYW4gZXJyb3IgdG8gdGhlIGxvZy4gRXJyb3JzIGFyZSBub24tZmF0YWwgaW4gdGhhdCB0aGUgYnVpbGQgY2FuCisjIGNvbnRpbnVlLCBidXQgdGhleSBkbyBpbmRpY2F0ZSBhIGJ1aWxkIGZhaWx1cmUuCisjIE91dHB1dDogbG9ncyBjb25zb2xlCitiYmVycm9yKCkgeworCWlmIFsgLXAgJHtMT0dGSUZPfSBdIDsgdGhlbgorCQlwcmludGYgIiViXDAiICJiYmVycm9yICQqIiA+ICR7TE9HRklGT30KKwllbHNlCisJCWVjaG8gIkVSUk9SOiAkKiIKKwlmaQorfQorCisjIFByaW50IGEgZmF0YWwgZXJyb3IgdG8gdGhlIGxvZy4gRmF0YWwgZXJyb3JzIGluZGljYXRlIGJ1aWxkIGZhaWx1cmUKKyMgYW5kIGhhbHQgdGhlIGJ1aWxkLCBleGl0aW5nIHdpdGggYW4gZXJyb3IgY29kZS4KKyMgT3V0cHV0OiBsb2dzIGNvbnNvbGUKK2JiZmF0YWwoKSB7CisJaWYgWyAtcCAke0xPR0ZJRk99IF0gOyB0aGVuCisJCXByaW50ZiAiJWJcMCIgImJiZmF0YWwgJCoiID4gJHtMT0dGSUZPfQorCWVsc2UKKwkJZWNobyAiRVJST1I6ICQqIgorCWZpCisJZXhpdCAxCit9CisKKyMgTGlrZSBiYmZhdGFsLCBleGNlcHQgcHJldmVudHMgdGhlIHN1cHByZXNzaW9uIG9mIHRoZSBlcnJvciBsb2cgYnkKKyMgYml0YmFrZSdzIFVJLgorIyBPdXRwdXQ6IGxvZ3MgY29uc29sZQorYmJmYXRhbF9sb2coKSB7CisJaWYgWyAtcCAke0xPR0ZJRk99IF0gOyB0aGVuCisJCXByaW50ZiAiJWJcMCIgImJiZmF0YWxfbG9nICQqIiA+ICR7TE9HRklGT30KKwllbHNlCisJCWVjaG8gIkVSUk9SOiAkKiIKKwlmaQorCWV4aXQgMQorfQorCisjIFByaW50IGRlYnVnIG1lc3NhZ2VzLiBUaGVzZSBhcmUgYXBwcm9wcmlhdGUgZm9yIHByb2dyZXNzIGNoZWNrcG9pbnQKKyMgbWVzc2FnZXMgdG8gdGhlIGxvZ3MuIERlcGVuZGluZyBvbiB0aGUgZGVidWcgbG9nIGxldmVsLCB0aGV5IG1heSBhbHNvCisjIGdvIHRvIHRoZSBjb25zb2xlLgorIyBPdXRwdXQ6IGxvZ3MgY29uc29sZQorIyBVc2FnZTogYmJkZWJ1ZyAxICJmaXJzdCBsZXZlbCBkZWJ1ZyBtZXNzYWdlIgorIyAgICAgICAgYmJkZWJ1ZyAyICJzZWNvbmQgbGV2ZWwgZGVidWcgbWVzc2FnZSIKK2JiZGVidWcoKSB7CisJVVNBR0U9J1VzYWdlOiBiYmRlYnVnIFsxMjNdICJtZXNzYWdlIicKKwlpZiBbICQjIC1sdCAyIF07IHRoZW4KKwkJYmJmYXRhbCAiJFVTQUdFIgorCWZpCisJCisJIyBTdHJpcCBvZmYgdGhlIGRlYnVnIGxldmVsIGFuZCBlbnN1cmUgaXQgaXMgYW4gaW50ZWdlcgorCURCR0xWTD0kMTsgc2hpZnQKKwlOT05ESUdJVFM9JChlY2hvICIkREJHTFZMIiB8IHRyIC1kIFs6ZGlnaXQ6XSkKKwlpZiBbICIkTk9ORElHSVRTIiBdOyB0aGVuCisJCWJiZmF0YWwgIiRVU0FHRSIKKwlmaQorCisJIyBBbGwgZGVidWcgb3V0cHV0IGlzIHByaW50ZWQgdG8gdGhlIGxvZ3MKKwlpZiBbIC1wICR7TE9HRklGT30gXSA7IHRoZW4KKwkJcHJpbnRmICIlYlwwIiAiYmJkZWJ1ZyAkREJHTFZMICQqIiA+ICR7TE9HRklGT30KKwllbHNlCisJCWVjaG8gIkRFQlVHOiAkKiIKKwlmaQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tZXRhLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tZXRhLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU2ODkwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21ldGEuYmJjbGFzcwpAQCAtMCwwICsxLDQgQEAKKworUEFDS0FHRVMgPSAiIgorCitkb19idWlsZFtyZWNyZGVwdGFza10gPSAiZG9fYnVpbGQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tZXRhZGF0YV9zY20uYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21ldGFkYXRhX3NjbS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzN2U2MTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tZXRhZGF0YV9zY20uYmJjbGFzcwpAQCAtMCwwICsxLDgyIEBACitNRVRBREFUQV9CUkFOQ0ggPz0gIiR7QGJhc2VfZGV0ZWN0X2JyYW5jaChkKX0iCitNRVRBREFUQV9SRVZJU0lPTiA/PSAiJHtAYmFzZV9kZXRlY3RfcmV2aXNpb24oZCl9IgorCitkZWYgYmFzZV9kZXRlY3RfcmV2aXNpb24oZCk6CisgICAgcGF0aCA9IGJhc2VfZ2V0X3NjbWJhc2VwYXRoKGQpCisKKyAgICBzY21zID0gW2Jhc2VfZ2V0X21ldGFkYXRhX2dpdF9yZXZpc2lvbiwgXAorICAgICAgICAgICAgYmFzZV9nZXRfbWV0YWRhdGFfc3ZuX3JldmlzaW9uXQorCisgICAgZm9yIHNjbSBpbiBzY21zOgorICAgICAgICByZXYgPSBzY20ocGF0aCwgZCkKKyAgICAgICAgaWYgcmV2ICE9ICI8dW5rbm93bj4iOgorICAgICAgICAgICAgcmV0dXJuIHJldgorCisgICAgcmV0dXJuICI8dW5rbm93bj4iCisKK2RlZiBiYXNlX2RldGVjdF9icmFuY2goZCk6CisgICAgcGF0aCA9IGJhc2VfZ2V0X3NjbWJhc2VwYXRoKGQpCisKKyAgICBzY21zID0gW2Jhc2VfZ2V0X21ldGFkYXRhX2dpdF9icmFuY2hdCisKKyAgICBmb3Igc2NtIGluIHNjbXM6CisgICAgICAgIHJldiA9IHNjbShwYXRoLCBkKQorICAgICAgICBpZiByZXYgIT0gIjx1bmtub3duPiI6CisgICAgICAgICAgICByZXR1cm4gcmV2LnN0cmlwKCkKKworICAgIHJldHVybiAiPHVua25vd24+IgorCitkZWYgYmFzZV9nZXRfc2NtYmFzZXBhdGgoZCk6CisgICAgcmV0dXJuIGQuZ2V0VmFyKCAnQ09SRUJBU0UnLCBUcnVlKQorCitkZWYgYmFzZV9nZXRfbWV0YWRhdGFfbW9ub3RvbmVfYnJhbmNoKHBhdGgsIGQpOgorICAgIG1vbm90b25lX2JyYW5jaCA9ICI8dW5rbm93bj4iCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oIiVzL19NVE4vb3B0aW9ucyIgJSBwYXRoKSBhcyBmOgorICAgICAgICAgICAgbW9ub3RvbmVfYnJhbmNoID0gZi5yZWFkKCkuc3RyaXAoKQorICAgICAgICAgICAgaWYgbW9ub3RvbmVfYnJhbmNoLnN0YXJ0c3dpdGgoICJkYXRhYmFzZSIgKToKKyAgICAgICAgICAgICAgICBtb25vdG9uZV9icmFuY2hfd29yZHMgPSBtb25vdG9uZV9icmFuY2guc3BsaXQoKQorICAgICAgICAgICAgICAgIG1vbm90b25lX2JyYW5jaCA9IG1vbm90b25lX2JyYW5jaF93b3Jkc1sgbW9ub3RvbmVfYnJhbmNoX3dvcmRzLmluZGV4KCAiYnJhbmNoIiApKzFdWzE6LTFdCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisgICAgcmV0dXJuIG1vbm90b25lX2JyYW5jaAorCitkZWYgYmFzZV9nZXRfbWV0YWRhdGFfbW9ub3RvbmVfcmV2aXNpb24ocGF0aCwgZCk6CisgICAgbW9ub3RvbmVfcmV2aXNpb24gPSAiPHVua25vd24+IgorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKCIlcy9fTVROL3JldmlzaW9uIiAlIHBhdGgpIGFzIGY6CisgICAgICAgICAgICBtb25vdG9uZV9yZXZpc2lvbiA9IGYucmVhZCgpLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG1vbm90b25lX3JldmlzaW9uLnN0YXJ0c3dpdGgoICJmb3JtYXRfdmVyc2lvbiIgKToKKyAgICAgICAgICAgICAgICBtb25vdG9uZV9yZXZpc2lvbl93b3JkcyA9IG1vbm90b25lX3JldmlzaW9uLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBtb25vdG9uZV9yZXZpc2lvbiA9IG1vbm90b25lX3JldmlzaW9uX3dvcmRzWyBtb25vdG9uZV9yZXZpc2lvbl93b3Jkcy5pbmRleCggIm9sZF9yZXZpc2lvbiIgKSsxXVsxOi0xXQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBwYXNzCisgICAgcmV0dXJuIG1vbm90b25lX3JldmlzaW9uCisKK2RlZiBiYXNlX2dldF9tZXRhZGF0YV9zdm5fcmV2aXNpb24ocGF0aCwgZCk6CisgICAgIyBUaGlzIG9ubHkgd29ya3Mgd2l0aCBvbGRlciBzdWJ2ZXJzaW9uLiBGb3IgbmV3ZXIgdmVyc2lvbnMgCisgICAgIyB0aGlzIGZ1bmN0aW9uIHdpbGwgbmVlZCB0byBiZSBmaXhlZCBieSBzb21lb25lIGludGVyZXN0ZWQKKyAgICByZXZpc2lvbiA9ICI8dW5rbm93bj4iCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oIiVzLy5zdm4vZW50cmllcyIgJSBwYXRoKSBhcyBmOgorICAgICAgICAgICAgcmV2aXNpb24gPSBmLnJlYWRsaW5lcygpWzNdLnN0cmlwKCkKKyAgICBleGNlcHQgKElPRXJyb3IsIEluZGV4RXJyb3IpOgorICAgICAgICBwYXNzCisgICAgcmV0dXJuIHJldmlzaW9uCisKK2RlZiBiYXNlX2dldF9tZXRhZGF0YV9naXRfYnJhbmNoKHBhdGgsIGQpOgorICAgIGJyYW5jaCA9IG9zLnBvcGVuKCdjZCAlczsgZ2l0IGJyYW5jaCAyPiYxIHwgZ3JlcCAiXiogIiB8IHRyIC1kICIqICInICUgcGF0aCkucmVhZCgpCisKKyAgICBpZiBsZW4oYnJhbmNoKSAhPSAwOgorICAgICAgICByZXR1cm4gYnJhbmNoCisgICAgcmV0dXJuICI8dW5rbm93bj4iCisKK2RlZiBiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24ocGF0aCwgZCk6CisgICAgZiA9IG9zLnBvcGVuKCJjZCAlczsgZ2l0IGxvZyAtbiAxIC0tcHJldHR5PW9uZWxpbmUgLS0gMj4mMSIgJSBwYXRoKQorICAgIGRhdGEgPSBmLnJlYWQoKQorICAgIGlmIGYuY2xvc2UoKSBpcyBOb25lOiAgICAgICAgCisgICAgICAgIHJldiA9IGRhdGEuc3BsaXQoIiAiKVswXQorICAgICAgICBpZiBsZW4ocmV2KSAhPSAwOgorICAgICAgICAgICAgcmV0dXJuIHJldgorICAgIHJldHVybiAiPHVua25vd24+IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9taWdyYXRlX2xvY2FsY291bnQuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21pZ3JhdGVfbG9jYWxjb3VudC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMGRmOGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9taWdyYXRlX2xvY2FsY291bnQuYmJjbGFzcwpAQCAtMCwwICsxLDQ2IEBACitQUlNFUlZfRFVNUERJUiA/Pz0gIiR7TE9HX0RJUn0vZGIiCitMT0NBTENPVU5UX0RVTVBGSUxFID8/PSAiJHtQUlNFUlZfRFVNUERJUn0vcHJzZXJ2LWxvY2FsY291bnQtZXhwb3J0cy5pbmMiCisKK3B5dGhvbiBtaWdyYXRlX2xvY2FsY291bnRfaGFuZGxlciAoKSB7CisgICAgaW1wb3J0IGJiLmV2ZW50CisgICAgaWYgbm90IGUuZGF0YToKKyAgICAgICAgcmV0dXJuCisKKyAgICBwdiA9IGUuZGF0YS5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICBpZiBub3QgJ0FVVE9JTkMnIGluIHB2OgorICAgICAgICByZXR1cm4KKworICAgIGxvY2FsY291bnRzID0gYmIucGVyc2lzdF9kYXRhLnBlcnNpc3QoJ0JCX1VSSV9MT0NBTENPVU5UJywgZS5kYXRhKQorICAgIHBuID0gZS5kYXRhLmdldFZhcignUE4nLCBUcnVlKQorICAgIHJldnMgPSBsb2NhbGNvdW50cy5nZXRfYnlfcGF0dGVybignJSUtJXNfcmV2JyAlIHBuKQorICAgIGNvdW50cyA9IGxvY2FsY291bnRzLmdldF9ieV9wYXR0ZXJuKCclJS0lc19jb3VudCcgJSBwbikKKyAgICBpZiBub3QgcmV2cyBvciBub3QgY291bnRzOgorICAgICAgICByZXR1cm4KKworICAgIGlmIGxlbihyZXZzKSAhPSBsZW4oY291bnRzKToKKyAgICAgICAgYmIud2FybigiVGhlIG51bWJlciBvZiByZXZzIGFuZCBsb2NhbGNvdW50cyBkb24ndCBtYXRjaCBpbiAlcyIgJSBwbikKKyAgICAgICAgcmV0dXJuCisKKyAgICB2ZXJzaW9uID0gZS5kYXRhLmdldFZhcignUFJBVVRPSU5YJywgVHJ1ZSkKKyAgICBzcmNyZXYgPSBiYi5mZXRjaDIuZ2V0X3NyY3JldihlLmRhdGEpCisgICAgYmFzZV92ZXIgPSAnQVVUT0lOQy0lcycgJSB2ZXJzaW9uWzp2ZXJzaW9uLmZpbmQoc3JjcmV2KV0KKyAgICBwa2dhcmNoID0gZS5kYXRhLmdldFZhcignUEFDS0FHRV9BUkNIJywgVHJ1ZSkKKyAgICB2YWx1ZSA9IG1heChpbnQoY291bnQpIGZvciBjb3VudCBpbiBjb3VudHMpCisKKyAgICBpZiBsZW4ocmV2cykgPT0gMToKKyAgICAgICAgaWYgc3JjcmV2ICE9ICgnQVVUT0lOQyslcycgJSByZXZzWzBdKToKKyAgICAgICAgICAgIHZhbHVlICs9IDEKKyAgICBlbHNlOgorICAgICAgICB2YWx1ZSArPSAxCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZS5kYXRhLmdldFZhcignUFJTRVJWX0RVTVBESVInLCBUcnVlKSkKKyAgICBkZiA9IGUuZGF0YS5nZXRWYXIoJ0xPQ0FMQ09VTlRfRFVNUEZJTEUnLCBUcnVlKQorICAgIGZsb2NrID0gYmIudXRpbHMubG9ja2ZpbGUoIiVzLmxvY2siICUgZGYpCisgICAgd2l0aCBvcGVuKGRmLCAnYScpIGFzIGZkOgorICAgICAgICBmZC53cml0ZSgnUFJBVVRPJCVzJCVzJCVzID0gIiVzIlxuJyAlCisgICAgICAgICAgICAgICAgKGJhc2VfdmVyLCBwa2dhcmNoLCBzcmNyZXYsIHN0cih2YWx1ZSkpKQorICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUoZmxvY2spCit9CisKK2FkZGhhbmRsZXIgbWlncmF0ZV9sb2NhbGNvdW50X2hhbmRsZXIKK21pZ3JhdGVfbG9jYWxjb3VudF9oYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuUmVjaXBlUGFyc2VkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbWltZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbWltZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMWM3M2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9taW1lLmJiY2xhc3MKQEAgLTAsMCArMSw1NiBAQAorREVQRU5EUyArPSAic2hhcmVkLW1pbWUtaW5mby1uYXRpdmUgc2hhcmVkLW1pbWUtaW5mbyIKKworbWltZV9wb3N0aW5zdCgpIHsKK2lmIFsgIiQxIiA9IGNvbmZpZ3VyZSBdOyB0aGVuCisJVVBEQVRFTUlNRURCPWB3aGljaCB1cGRhdGUtbWltZS1kYXRhYmFzZWAKKwlpZiBbIC14ICIkVVBEQVRFTUlNRURCIiBdIDsgdGhlbgorCQllY2hvICJVcGRhdGluZyBNSU1FIGRhdGFiYXNlLi4uIHRoaXMgbWF5IHRha2UgYSB3aGlsZS4iCisJCSRVUERBVEVNSU1FREIgJEQke2RhdGFkaXJ9L21pbWUKKwllbHNlCisJCWVjaG8gIk1pc3NpbmcgdXBkYXRlLW1pbWUtZGF0YWJhc2UsIHVwZGF0ZSBvZiBtaW1lIGRhdGFiYXNlIGZhaWxlZCEiCisJCWV4aXQgMQorCWZpCitmaQorfQorCittaW1lX3Bvc3RybSgpIHsKK2lmIFsgIiQxIiA9IHJlbW92ZSBdIHx8IFsgIiQxIiA9IHVwZ3JhZGUgXTsgdGhlbgorCVVQREFURU1JTUVEQj1gd2hpY2ggdXBkYXRlLW1pbWUtZGF0YWJhc2VgCisJaWYgWyAteCAiJFVQREFURU1JTUVEQiIgXSA7IHRoZW4KKwkJZWNobyAiVXBkYXRpbmcgTUlNRSBkYXRhYmFzZS4uLiB0aGlzIG1heSB0YWtlIGEgd2hpbGUuIgorCQkkVVBEQVRFTUlNRURCICREJHtkYXRhZGlyfS9taW1lCisJZWxzZQorCQllY2hvICJNaXNzaW5nIHVwZGF0ZS1taW1lLWRhdGFiYXNlLCB1cGRhdGUgb2YgbWltZSBkYXRhYmFzZSBmYWlsZWQhIgorCQlleGl0IDEKKwlmaQorZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX2FwcGVuZCAoKSB7CisgICAgaW1wb3J0IHJlCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgcGtnZGVzdCA9ICBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBtaW1lX2RpciA9ICclcy8lcy91c3Ivc2hhcmUvbWltZS9wYWNrYWdlcycgJSAocGtnZGVzdCwgcGtnKQorICAgICAgICBtaW1lcyA9IFtdCisgICAgICAgIG1pbWVfcmUgPSByZS5jb21waWxlKCIuKlwueG1sJCIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG1pbWVfZGlyKToKKyAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIobWltZV9kaXIpOgorICAgICAgICAgICAgICAgIGlmIG1pbWVfcmUubWF0Y2goZik6CisgICAgICAgICAgICAgICAgICAgIG1pbWVzLmFwcGVuZChmKQorICAgICAgICBpZiBtaW1lczoKKyAgICAgICAgICAgIGJiLm5vdGUoImFkZGluZyBtaW1lIHBvc3RpbnN0IGFuZCBwb3N0cm0gc2NyaXB0cyB0byAlcyIgJSBwa2cpCisgICAgICAgICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHBvc3RpbnN0OgorICAgICAgICAgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgICAgICAgICAgcG9zdGluc3QgKz0gZC5nZXRWYXIoJ21pbWVfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorICAgICAgICAgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0cm0gKz0gZC5nZXRWYXIoJ21pbWVfcG9zdHJtJywgVHJ1ZSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorICAgICAgICAgICAgYmIubm90ZSgiYWRkaW5nIHNoYXJlZC1taW1lLWluZm8tZGF0YSBkZXBlbmRlbmN5IHRvICVzIiAlIHBrZykKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU18nICsgcGtnLCAiIHNoYXJlZC1taW1lLWluZm8tZGF0YSIpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9taXJyb3JzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9taXJyb3JzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk2YzA3MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21pcnJvcnMuYmJjbGFzcwpAQCAtMCwwICsxLDY3IEBACitNSVJST1JTICs9ICJcCiske0RFQklBTl9NSVJST1J9CWh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLWFyY2hpdmUvMjAxMjAzMjhUMDkyNzUyWi9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLWFyY2hpdmUvMjAxMTAxMjdUMDg0MjU3Wi9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLWFyY2hpdmUvMjAwOTA4MDJUMDA0MTUzWi9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmF1LmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuY2wuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5oci5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmZpLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuaGsuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5odS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmllLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuaXQuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5qcC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLm5vLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAucGwuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5yby5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLnNpLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuZXMuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5zZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLnRyLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtHTlVfTUlSUk9SfQlmdHA6Ly9taXJyb3JzLmtlcm5lbC5vcmcvZ251IFxuIFwKKyR7S0VSTkVMT1JHX01JUlJPUn0JaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1YiBcbiBcCitmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8gICAgIGZ0cDovL2Z0cC5mcmFua2VuLmRlL3B1Yi9jcnlwdC9taXJyb3IvZnRwLmdudXBnLm9yZy9nY3J5cHQvIFxuIFwKK2Z0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyAgICAgZnRwOi8vZnRwLnN1cmZuZXQubmwvcHViL3NlY3VyaXR5L2dudXBnLyBcbiBcCitmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8gICAgIGh0dHA6Ly9ndWx1cy5VU2hlcmJyb29rZS5jYS9wdWIvYXBwbC9HbnVQRy8gXG4gXAorZnRwOi8vZGFudGUuY3Rhbi5vcmcvdGV4LWFyY2hpdmUgZnRwOi8vZnRwLmZ1LWJlcmxpbi5kZS90ZXgvQ1RBTiBcbiBcCitmdHA6Ly9kYW50ZS5jdGFuLm9yZy90ZXgtYXJjaGl2ZSBodHRwOi8vc3Vuc2l0ZS5zdXQuYWMuanAvcHViL2FyY2hpdmVzL2N0YW4vIFxuIFwKK2Z0cDovL2RhbnRlLmN0YW4ub3JnL3RleC1hcmNoaXZlIGh0dHA6Ly9jdGFuLnVuc3cuZWR1LmF1LyBcbiBcCitmdHA6Ly9mdHAuZ251dGxzLm9yZy9nY3J5cHQvZ251dGxzIGZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0L2dudXRscy8gXG4gXAoraHR0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvc3JjLyBodHRwOi8vbWlycm9yLnN3aXRjaC5jaC9mdHAvbWlycm9yL2luZm96aXAvc3JjLyBcbiBcCitodHRwOi8vZnRwLmluZm8temlwLm9yZy9wdWIvaW5mb3ppcC9zcmMvIGZ0cDovL3N1bnNpdGUuaWNtLmVkdS5wbC9wdWIvdW5peC9hcmNoaXZpbmcvaW5mby16aXAvc3JjLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLmNlcmlhcy5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L3N5c3V0aWxzL2xzb2YvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAudGF1LmFjLmlsL3B1Yi91bml4L2FkbWluLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLmNlcnQuZGZuLmRlL3B1Yi90b29scy9hZG1pbi9sc29mLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLmZ1LWJlcmxpbi5kZS9wdWIvdW5peC90b29scy9sc29mLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLmthaXpvLm9yZy9wdWIvbHNvZi8gXG4gXAorZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC50dS1kYXJtc3RhZHQuZGUvcHViL3N5c2FkbWluL2xzb2YvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAudHV4Lm9yZy9wdWIvc2l0ZXMvdmljLmNjLnB1cmR1ZS5lZHUvdG9vbHMvdW5peC9sc29mLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZ2QudHV3aWVuLmFjLmF0L3V0aWxzL2FkbWluLXRvb2xzL2xzb2YvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9zdW5zaXRlLnVhbGJlcnRhLmNhL3B1Yi9NaXJyb3IvbHNvZi8gXG4gXAorZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL3RoZS53aXJldGFwcGVkLm5ldC9wdWIvc2VjdXJpdHkvaG9zdC1zZWN1cml0eS9sc29mLyBcbiBcCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvZGlzdCAgaHR0cDovL2FyY2hpdmUuYXBhY2hlLm9yZy9kaXN0IFxuIFwKK2h0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3dhdGNoZG9nLyBodHRwOi8vZm9zc2llcy5vcmcvbGludXgvbWlzYy8gXG4gXAorJHtTQVZBTk5BSF9HTlVfTUlSUk9SfSBodHRwOi8vZG93bmxvYWQtbWlycm9yLnNhdmFubmFoLmdudS5vcmcvcmVsZWFzZXMgXG4gXAorJHtTQVZBTk5BSF9OT05HTlVfTUlSUk9SfSBodHRwOi8vZG93bmxvYWQtbWlycm9yLnNhdmFubmFoLm5vbmdudS5vcmcvcmVsZWFzZXMgXG4gXAorY3ZzOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorc3ZuOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorZ2l0Oi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAoraGc6Ly8uKi8uKiAgICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorYnpyOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorcDQ6Ly8uKi8uKiAgICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorb3NjOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAoraHR0cHM/JDovLy4qLy4qIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorZnRwOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorY3ZzOi8vLiovLiogICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIFwKK3N2bjovLy4qLy4qICAgICBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBcCitnaXQ6Ly8uKi8uKiAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gXAoraGc6Ly8uKi8uKiAgICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIFwKK2J6cjovLy4qLy4qICAgICBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBcCitwNDovLy4qLy4qICAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gXAorb3NjOi8vLiovLiogICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIFwKK2h0dHBzPyQ6Ly8uKi8uKiBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBcCitmdHA6Ly8uKi8uKiAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gXAorJHtDUEFOX01JUlJPUn0gIGh0dHA6Ly9jcGFuLm1ldGFjcGFuLm9yZy8gXG4gXAorJHtDUEFOX01JUlJPUn0gIGh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi8gXG4gXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbW9kdWxlLWJhc2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21vZHVsZS1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJlMjZjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21vZHVsZS1iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSwyNyBAQAoraW5oZXJpdCBrZXJuZWwtYXJjaAorCisjIFRoaXMgaXMgaW5zdGVhZCBvZiBERVBFTkRTID0gInZpcnR1YWwva2VybmVsIgorZG9fY29uZmlndXJlW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19zaGFyZWRfd29ya2RpciIKKworZXhwb3J0IE9TID0gIiR7VEFSR0VUX09TfSIKK2V4cG9ydCBDUk9TU19DT01QSUxFID0gIiR7VEFSR0VUX1BSRUZJWH0iCisKKyMgVGhpcyBwb2ludHMgdG8gdGhlIGJ1aWxkIGFydGVmYWN0cyBmcm9tIHRoZSBtYWluIGtlcm5lbCBidWlsZAorIyBzdWNoIGFzIC5jb25maWcgYW5kIFN5c3RlbS5tYXAKKyMgQ29uZnVzaW5nbHkgaXQgaXMgbm90IHRoZSBtb2R1bGUgYnVpbGQgb3V0cHV0ICh3aGljaCBpcyAke0J9KSBidXQKKyMgd2UgZGlkbid0IHBpY2sgdGhlIG5hbWUuCitleHBvcnQgS0JVSUxEX09VVFBVVCA9ICIke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSIKKworZXhwb3J0IEtFUk5FTF9WRVJTSU9OID0gIiR7QGJhc2VfcmVhZF9maWxlKCcke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfS9rZXJuZWwtYWJpdmVyc2lvbicpfSIKK0tFUk5FTF9PQkpFQ1RfU1VGRklYID0gIi5rbyIKKworIyBrZXJuZWwgbW9kdWxlcyBhcmUgZ2VuZXJhbGx5IG1hY2hpbmUgc3BlY2lmaWMKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKKyMgRnVuY3Rpb24gdG8gZW5zdXJlIHRoZSBrZXJuZWwgc2NyaXB0cyBhcmUgY3JlYXRlZC4gRXhwZWN0ZWQgdG8KKyMgYmUgY2FsbGVkIGJlZm9yZSBkb19jb21waWxlLiBTZWUgbW9kdWxlLmJiY2xhc3MgZm9yIGFuIGV4bWFwbGUuCitkb19tYWtlX3NjcmlwdHMoKSB7CisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MgCisJbWFrZSBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiBBUj0iJHtLRVJORUxfQVJ9IiBcCisJICAgICAgICAgICAtQyAke1NUQUdJTkdfS0VSTkVMX0RJUn0gTz0ke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSBzY3JpcHRzCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tb2R1bGUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21vZHVsZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NTJjMGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tb2R1bGUuYmJjbGFzcwpAQCAtMCwwICsxLDMyIEBACitpbmhlcml0IG1vZHVsZS1iYXNlIGtlcm5lbC1tb2R1bGUtc3BsaXQKKworYWRkdGFzayBtYWtlX3NjcmlwdHMgYWZ0ZXIgZG9fcGF0Y2ggYmVmb3JlIGRvX2NvbXBpbGUKK2RvX21ha2Vfc2NyaXB0c1tsb2NrZmlsZXNdID0gIiR7VE1QRElSfS9rZXJuZWwtc2NyaXB0cy5sb2NrIgorZG9fbWFrZV9zY3JpcHRzW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19zaGFyZWRfd29ya2RpciIKKworRVhUUkFfT0VNQUtFICs9ICJLRVJORUxfU1JDPSR7U1RBR0lOR19LRVJORUxfRElSfSIKKworbW9kdWxlX2RvX2NvbXBpbGUoKSB7CisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MKKwlvZV9ydW5tYWtlIEtFUk5FTF9QQVRIPSR7U1RBR0lOR19LRVJORUxfRElSfSAgIFwKKwkJICAgS0VSTkVMX1ZFUlNJT049JHtLRVJORUxfVkVSU0lPTn0gICAgXAorCQkgICBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiBcCisJCSAgIEFSPSIke0tFUk5FTF9BUn0iIFwKKwkgICAgICAgICAgIE89JHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0gXAorCQkgICAke01BS0VfVEFSR0VUU30KK30KKworbW9kdWxlX2RvX2luc3RhbGwoKSB7CisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MKKwlvZV9ydW5tYWtlIERFUE1PRD1lY2hvIElOU1RBTExfTU9EX1BBVEg9IiR7RH0iIFwKKwkgICAgICAgICAgIENDPSIke0tFUk5FTF9DQ30iIExEPSIke0tFUk5FTF9MRH0iIFwKKwkgICAgICAgICAgIE89JHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0gXAorCSAgICAgICAgICAgbW9kdWxlc19pbnN0YWxsCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29tcGlsZSBkb19pbnN0YWxsCisKKyMgYWRkIGFsbCBzcGxpdHRlZCBtb2R1bGVzIHRvIFBOIFJERVBFTkRTLCBQTiBjYW4gYmUgZW1wdHkgbm93CitLRVJORUxfTU9EVUxFU19NRVRBX1BBQ0tBR0UgPSAiJHtQTn0iCitGSUxFU18ke1BOfSA9ICIiCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbXVsdGlsaWIuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL211bHRpbGliLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY2MWQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL211bHRpbGliLmJiY2xhc3MKQEAgLTAsMCArMSwxNTEgQEAKK3B5dGhvbiBtdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlciAoKSB7CisgICAgY2xzID0gZS5kYXRhLmdldFZhcigiQkJFWFRFTkRDVVJSIiwgVHJ1ZSkKKyAgICB2YXJpYW50ID0gZS5kYXRhLmdldFZhcigiQkJFWFRFTkRWQVJJQU5UIiwgVHJ1ZSkKKyAgICBpZiBjbHMgIT0gIm11bHRpbGliIiBvciBub3QgdmFyaWFudDoKKyAgICAgICAgcmV0dXJuCisKKyAgICBlLmRhdGEuc2V0VmFyKCdTVEFHSU5HX0tFUk5FTF9ESVInLCBlLmRhdGEuZ2V0VmFyKCdTVEFHSU5HX0tFUk5FTF9ESVInLCBUcnVlKSkKKworICAgICMgVGhlcmUgc2hvdWxkIG9ubHkgYmUgb25lIGtlcm5lbCBpbiBtdWx0aWxpYiBjb25maWdzCisgICAgIyBXZSBhbHNvIHNraXAgbXVsdGlsaWIgc2V0dXAgZm9yIG1vZHVsZSBwYWNrYWdlcy4KKyAgICBwcm92aWRlcyA9IChlLmRhdGEuZ2V0VmFyKCJQUk9WSURFUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgInZpcnR1YWwva2VybmVsIiBpbiBwcm92aWRlcyBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdtb2R1bGUtYmFzZScsIGUuZGF0YSk6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJXZSBzaG91bGRuJ3QgaGF2ZSBtdWx0aWxpYiB2YXJpYW50cyBmb3IgdGhlIGtlcm5lbCIpCisKKyAgICBzYXZlX3Zhcl9uYW1lPWUuZGF0YS5nZXRWYXIoIk1VTFRJTElCX1NBVkVfVkFSTkFNRSIsIFRydWUpIG9yICIiCisgICAgZm9yIG5hbWUgaW4gc2F2ZV92YXJfbmFtZS5zcGxpdCgpOgorICAgICAgICB2YWw9ZS5kYXRhLmdldFZhcihuYW1lLCBUcnVlKQorICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKG5hbWUgKyAiX01VTFRJTElCX09SSUdJTkFMIiwgdmFsKQorCisgICAgb3ZlcnJpZGVzID0gZS5kYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpCisgICAgcG4gPSBlLmRhdGEuZ2V0VmFyKCJQTiIsIEZhbHNlKQorICAgIG92ZXJyaWRlcyA9IG92ZXJyaWRlcy5yZXBsYWNlKCJwbi0ke1BOfSIsICJwbi0ke1BOfTpwbi0iICsgcG4pCisgICAgZS5kYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgb3ZlcnJpZGVzKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnaW1hZ2UnLCBlLmRhdGEpOgorICAgICAgICBlLmRhdGEuc2V0VmFyKCJNTFBSRUZJWCIsIHZhcmlhbnQgKyAiLSIpCisgICAgICAgIGUuZGF0YS5zZXRWYXIoIlBOIiwgdmFyaWFudCArICItIiArIGUuZGF0YS5nZXRWYXIoIlBOIiwgRmFsc2UpKQorICAgICAgICB0YXJnZXRfdmVuZG9yID0gZS5kYXRhLmdldFZhcigiVEFSR0VUX1ZFTkRPUl8iICsgInZpcnRjbGFzcy1tdWx0aWxpYi0iICsgdmFyaWFudCwgRmFsc2UpCisgICAgICAgIGlmIHRhcmdldF92ZW5kb3I6CisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJUQVJHRVRfVkVORE9SIiwgdGFyZ2V0X3ZlbmRvcikKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGUuZGF0YSk6CisgICAgICAgIGUuZGF0YS5zZXRWYXIoIk1MUFJFRklYIiwgdmFyaWFudCArICItIikKKyAgICAgICAgb3ZlcnJpZGUgPSAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgdmFyaWFudAorICAgICAgICBlLmRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBlLmRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyBvdmVycmlkZSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShlLmRhdGEpCisgICAgICAgIHJldHVybgorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZS5kYXRhKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIldlIGNhbid0IGV4dGVuZCBuYXRpdmUgcmVjaXBlcyIpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBlLmRhdGEpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZS5kYXRhKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIldlIGNhbid0IGV4dGVuZCBuYXRpdmVzZGsgcmVjaXBlcyIpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdhbGxhcmNoJywgZS5kYXRhKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BhY2thZ2Vncm91cCcsIGUuZGF0YSk6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJEb24ndCBleHRlbmQgYWxsYXJjaCByZWNpcGVzIHdoaWNoIGFyZSBub3QgcGFja2FnZWdyb3VwcyIpCisKKworICAgICMgRXhwYW5kIHRoaXMgc2luY2UgdGhpcyB3b24ndCB3b3JrIGNvcnJlY3RseSBvbmNlIHdlIHNldCBhIG11bHRpbGliIGludG8gcGxhY2UKKyAgICBlLmRhdGEuc2V0VmFyKCJBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUyIsIGUuZGF0YS5nZXRWYXIoIkFMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTIiwgVHJ1ZSkpCisgCisgICAgb3ZlcnJpZGUgPSAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgdmFyaWFudAorCisgICAgZS5kYXRhLnNldFZhcigiTUxQUkVGSVgiLCB2YXJpYW50ICsgIi0iKQorICAgIGUuZGF0YS5zZXRWYXIoIlBOIiwgdmFyaWFudCArICItIiArIGUuZGF0YS5nZXRWYXIoIlBOIiwgRmFsc2UpKQorICAgIGUuZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIGUuZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArIG92ZXJyaWRlKQorCisgICAgIyBFeHBhbmQgdGhlIFdISVRFTElTVHMgd2l0aCBtdWx0aWxpYiBwcmVmaXgKKyAgICBmb3Igd2hpdGVsaXN0IGluIFsiSE9TVFRPT0xTX1dISVRFTElTVF9HUEwtMy4wIiwgIldISVRFTElTVF9HUEwtMy4wIiwgIkxHUEx2Ml9XSElURUxJU1RfR1BMLTMuMCJdOgorICAgICAgICBwa2dzID0gZS5kYXRhLmdldFZhcih3aGl0ZWxpc3QsIFRydWUpCisgICAgICAgIGZvciBwa2cgaW4gcGtncy5zcGxpdCgpOgorICAgICAgICAgICAgcGtncyArPSAiICIgKyB2YXJpYW50ICsgIi0iICsgcGtnCisgICAgICAgIGUuZGF0YS5zZXRWYXIod2hpdGVsaXN0LCBwa2dzKQorCisgICAgIyBERUZBVUxUVFVORSBjYW4gY2hhbmdlIFRBUkdFVF9BUkNIIG92ZXJyaWRlIHNvIGV4cGFuZCB0aGlzIG5vdyBiZWZvcmUgdXBkYXRlX2RhdGEKKyAgICBuZXd0dW5lID0gZS5kYXRhLmdldFZhcigiREVGQVVMVFRVTkVfIiArICJ2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHZhcmlhbnQsIEZhbHNlKQorICAgIGlmIG5ld3R1bmU6CisgICAgICAgIGUuZGF0YS5zZXRWYXIoIkRFRkFVTFRUVU5FIiwgbmV3dHVuZSkKKyAgICAgICAgZS5kYXRhLnNldFZhcignREVGQVVMVFRVTkVfTUxfJXMnICUgdmFyaWFudCwgbmV3dHVuZSkKK30KKworYWRkaGFuZGxlciBtdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcgorbXVsdGlsaWJfdmlydGNsYXNzX2hhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5SZWNpcGVQcmVGaW5hbGlzZSIKKworU1RBR0lOR0NDX3ByZXBlbmQgPSAiJHtCQkVYVEVORFZBUklBTlR9LSIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICB2YXJpYW50ID0gZC5nZXRWYXIoIkJCRVhURU5EVkFSSUFOVCIsIFRydWUpCisKKyAgICBpbXBvcnQgb2UuY2xhc3NleHRlbmQKKworICAgIGNsc2V4dGVuZCA9IG9lLmNsYXNzZXh0ZW5kLkNsYXNzRXh0ZW5kZXIodmFyaWFudCwgZCkKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2ltYWdlJywgZCk6CisgICAgICAgIGNsc2V4dGVuZC5tYXBfZGVwZW5kc192YXJpYWJsZSgiUEFDS0FHRV9JTlNUQUxMIikKKyAgICAgICAgY2xzZXh0ZW5kLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJMSU5HVUFTX0lOU1RBTEwiKQorICAgICAgICBjbHNleHRlbmQubWFwX2RlcGVuZHNfdmFyaWFibGUoIlJERVBFTkRTIikKKyAgICAgICAgcGluc3RhbGwgPSBkLmdldFZhcigiTElOR1VBU19JTlNUQUxMIiwgVHJ1ZSkgKyAiICIgKyBkLmdldFZhcigiUEFDS0FHRV9JTlNUQUxMIiwgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VfSU5TVEFMTCIsIHBpbnN0YWxsKQorICAgICAgICBkLnNldFZhcigiTElOR1VBU19JTlNUQUxMIiwgIiIpCisgICAgICAgICMgRklYTUUsIHdlIG5lZWQgdG8gbWFwIHRoaXMgdG8gc29tZXRoaW5nLCBub3QgZGVsZXRlIGl0IQorICAgICAgICBkLnNldFZhcigiUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZIiwgIiIpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdwb3B1bGF0ZV9zZGtfYmFzZScsIGQpOgorICAgICAgICBjbHNleHRlbmQubWFwX2RlcGVuZHNfdmFyaWFibGUoIlRPT0xDSEFJTl9UQVJHRVRfVEFTSyIpCisgICAgICAgIGNsc2V4dGVuZC5tYXBfZGVwZW5kc192YXJpYWJsZSgiVE9PTENIQUlOX1RBUkdFVF9UQVNLX0FUVEVNUFRPTkxZIikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2ltYWdlJywgZCk6CisgICAgICAgIHJldHVybgorCisgICAgY2xzZXh0ZW5kLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJERVBFTkRTIikKKyAgICBjbHNleHRlbmQubWFwX3ZhcmlhYmxlKCJQUk9WSURFUyIpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIGNsc2V4dGVuZC5yZW5hbWVfcGFja2FnZXMoKQorICAgIGNsc2V4dGVuZC5yZW5hbWVfcGFja2FnZV92YXJpYWJsZXMoKGQuZ2V0VmFyKCJQQUNLQUdFVkFSUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorCisgICAgY2xzZXh0ZW5kLm1hcF9wYWNrYWdldmFycygpCisgICAgY2xzZXh0ZW5kLm1hcF9yZWdleHBfdmFyaWFibGUoIlBBQ0tBR0VTX0RZTkFNSUMiKQorICAgIGNsc2V4dGVuZC5tYXBfdmFyaWFibGUoIlBBQ0tBR0VfSU5TVEFMTCIpCisgICAgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiSU5JVFNDUklQVF9QQUNLQUdFUyIpCisgICAgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiVVNFUkFERF9QQUNLQUdFUyIpCisgICAgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiU1lTVEVNRF9QQUNLQUdFUyIpCit9CisKK1BBQ0tBR0VGVU5DU19hcHBlbmQgPSAiIGRvX3BhY2thZ2VfcWFfbXVsdGlsaWIiCisKK3B5dGhvbiBkb19wYWNrYWdlX3FhX211bHRpbGliKCkgeworCisgICAgZGVmIGNoZWNrX21scHJlZml4KHBrZywgdmFyLCBtbHByZWZpeCk6CisgICAgICAgIHZhbHVlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZhcignJXNfJXMnICUgKHZhciwgcGtnKSwgVHJ1ZSkgb3IgZC5nZXRWYXIodmFyLCBUcnVlKSBvciAiIikKKyAgICAgICAgY2FuZGlkYXRlcyA9IFtdCisgICAgICAgIGZvciBpIGluIHZhbHVlczoKKyAgICAgICAgICAgIGlmIGkuc3RhcnRzd2l0aCgndmlydHVhbC8nKToKKyAgICAgICAgICAgICAgICBpID0gaVtsZW4oJ3ZpcnR1YWwvJyk6XQorICAgICAgICAgICAgaWYgKG5vdCBpLnN0YXJ0c3dpdGgoJ2tlcm5lbC1tb2R1bGUnKSkgYW5kIChub3QgaS5zdGFydHN3aXRoKG1scHJlZml4KSkgYW5kIFwKKyAgICAgICAgICAgICAgICAobm90ICdjcm9zcy1jYW5hZGlhbicgaW4gaSkgYW5kIChub3QgaS5zdGFydHN3aXRoKCJuYXRpdmVzZGstIikpIGFuZCBcCisgICAgICAgICAgICAgICAgKG5vdCBpLnN0YXJ0c3dpdGgoInJ0bGQiKSkgYW5kIChub3QgaS5zdGFydHN3aXRoKCdrZXJuZWwtdm1saW51eCcpKToKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChpKQorICAgICAgICBpZiBsZW4oY2FuZGlkYXRlcykgPiAwOgorICAgICAgICAgICAgbXNnID0gIiVzIHBhY2thZ2UgJXMgLSBzdXNwaWNpb3VzIHZhbHVlcyAnJXMnIGluICVzIiBcCisgICAgICAgICAgICAgICAgICAgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHBrZywgJyAnLmpvaW4oY2FuZGlkYXRlcyksIHZhcikKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJtdWx0aWxpYiIsIG1zZywgZCkKKworICAgIG1sID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkKKyAgICBpZiBub3QgbWw6CisgICAgICAgIHJldHVybgorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgY2hlY2tfbWxwcmVmaXgocGtnLCAnUkRFUEVORFMnLCBtbCkKKyAgICAgICAgY2hlY2tfbWxwcmVmaXgocGtnLCAnUlBST1ZJREVTJywgbWwpCisgICAgICAgIGNoZWNrX21scHJlZml4KHBrZywgJ1JSRUNPTU1FTkRTJywgbWwpCisgICAgICAgIGNoZWNrX21scHJlZml4KHBrZywgJ1JTVUdHRVNUUycsIG1sKQorICAgICAgICBjaGVja19tbHByZWZpeChwa2csICdSUkVQTEFDRVMnLCBtbCkKKyAgICAgICAgY2hlY2tfbWxwcmVmaXgocGtnLCAnUkNPTkZMSUNUUycsIG1sKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbXVsdGlsaWJfZ2xvYmFsLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tdWx0aWxpYl9nbG9iYWwuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTJjZmI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbXVsdGlsaWJfZ2xvYmFsLmJiY2xhc3MKQEAgLTAsMCArMSwxNjIgQEAKK2RlZiBwcmVmZXJyZWRfbWxfdXBkYXRlcyhkKToKKyAgICAjIElmIGFueSBQUkVGRVJSRURfUFJPVklERVIgb3IgUFJFRkVSUkVEX1ZFUlNJT04gYXJlIHNldCwKKyAgICAjIHdlIG5lZWQgdG8gbWlycm9yIHRoZXNlIHZhcmlhYmxlcyBpbiB0aGUgbXVsdGlsaWIgY2FzZTsKKyAgICBtdWx0aWxpYnMgPSBkLmdldFZhcignTVVMVElMSUJTJywgVHJ1ZSkgb3IgIiIKKyAgICBpZiBub3QgbXVsdGlsaWJzOgorICAgICAgICByZXR1cm4KKworICAgIHByZWZpeGVzID0gW10KKyAgICBmb3IgZXh0IGluIG11bHRpbGlicy5zcGxpdCgpOgorICAgICAgICBlZXh0ID0gZXh0LnNwbGl0KCc6JykKKyAgICAgICAgaWYgbGVuKGVleHQpID4gMSBhbmQgZWV4dFswXSA9PSAnbXVsdGlsaWInOgorICAgICAgICAgICAgcHJlZml4ZXMuYXBwZW5kKGVleHRbMV0pCisKKyAgICB2ZXJzaW9ucyA9IFtdCisgICAgcHJvdmlkZXJzID0gW10KKyAgICBmb3IgdiBpbiBkLmtleXMoKToKKyAgICAgICAgaWYgdi5zdGFydHN3aXRoKCJQUkVGRVJSRURfVkVSU0lPTl8iKToKKyAgICAgICAgICAgIHZlcnNpb25zLmFwcGVuZCh2KQorICAgICAgICBpZiB2LnN0YXJ0c3dpdGgoIlBSRUZFUlJFRF9QUk9WSURFUl8iKToKKyAgICAgICAgICAgIHByb3ZpZGVycy5hcHBlbmQodikKKworICAgIGZvciB2IGluIHZlcnNpb25zOgorICAgICAgICB2YWwgPSBkLmdldFZhcih2LCBGYWxzZSkKKyAgICAgICAgcGtnID0gdi5yZXBsYWNlKCJQUkVGRVJSRURfVkVSU0lPTl8iLCAiIikKKyAgICAgICAgaWYgcGtnLmVuZHN3aXRoKCItbmF0aXZlIikgb3IgIi1jcm9zc3Nkay0iIGluIHBrZyBvciBwa2cuc3RhcnRzd2l0aCgoIm5hdGl2ZXNkay0iLCAidmlydHVhbC9uYXRpdmVzZGstIikpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgJy1jcm9zcy0nIGluIHBrZyBhbmQgJyR7JyBpbiBwa2c6CisgICAgICAgICAgICBmb3IgcCBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgICAgICAgICBvdmVycmlkZSA9ICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyBwCisgICAgICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgbG9jYWxkYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgb3ZlcnJpZGUpCisgICAgICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgICAgICAgICAgaWYgIi1jYW5hZGlhbi0iIGluIHBrZzoKKyAgICAgICAgICAgICAgICAgICAgbmV3bmFtZSA9IGxvY2FsZGF0YS5leHBhbmQodikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBuZXduYW1lID0gbG9jYWxkYXRhLmV4cGFuZCh2KS5yZXBsYWNlKCJQUkVGRVJSRURfVkVSU0lPTl8iLCAiUFJFRkVSUkVEX1ZFUlNJT05fIiArIHAgKyAnLScpCisgICAgICAgICAgICAgICAgaWYgbmV3bmFtZSAhPSB2OgorICAgICAgICAgICAgICAgICAgICBuZXd2YWwgPSBsb2NhbGRhdGEuZXhwYW5kKHZhbCkKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIobmV3bmFtZSwgbmV3dmFsKQorICAgICAgICAgICAgIyBBdm9pZCBmdXR1cmUgdmFyaWFibGUga2V5IGV4cGFuc2lvbgorICAgICAgICAgICAgdmV4cCA9IGQuZXhwYW5kKHYpCisgICAgICAgICAgICBpZiB2ICE9IHZleHAgYW5kIGQuZ2V0VmFyKHYsIEZhbHNlKToKKyAgICAgICAgICAgICAgICBkLnJlbmFtZVZhcih2LCB2ZXhwKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZm9yIHAgaW4gcHJlZml4ZXM6CisgICAgICAgICAgICBuZXduYW1lID0gIlBSRUZFUlJFRF9WRVJTSU9OXyIgKyBwICsgIi0iICsgcGtnCisgICAgICAgICAgICBpZiBub3QgZC5nZXRWYXIobmV3bmFtZSwgRmFsc2UpOgorICAgICAgICAgICAgICAgIGQuc2V0VmFyKG5ld25hbWUsIHZhbCkKKworICAgIGZvciBwcm92IGluIHByb3ZpZGVyczoKKyAgICAgICAgdmFsID0gZC5nZXRWYXIocHJvdiwgRmFsc2UpCisgICAgICAgIHBrZyA9IHByb3YucmVwbGFjZSgiUFJFRkVSUkVEX1BST1ZJREVSXyIsICIiKQorICAgICAgICBpZiBwa2cuZW5kc3dpdGgoIi1uYXRpdmUiKSBvciAiLWNyb3Nzc2RrLSIgaW4gcGtnIG9yIHBrZy5zdGFydHN3aXRoKCgibmF0aXZlc2RrLSIsICJ2aXJ0dWFsL25hdGl2ZXNkay0iKSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiAnY3Jvc3MtY2FuYWRpYW4nIGluIHBrZzoKKyAgICAgICAgICAgIGZvciBwIGluIHByZWZpeGVzOgorICAgICAgICAgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICAgICAgICAgIG92ZXJyaWRlID0gIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHAKKyAgICAgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyBvdmVycmlkZSkKKyAgICAgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgICAgICAgICBuZXduYW1lID0gbG9jYWxkYXRhLmV4cGFuZChwcm92KQorICAgICAgICAgICAgICAgIGlmIG5ld25hbWUgIT0gcHJvdjoKKyAgICAgICAgICAgICAgICAgICAgbmV3dmFsID0gbG9jYWxkYXRhLmV4cGFuZCh2YWwpCisgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKG5ld25hbWUsIG5ld3ZhbCkKKyAgICAgICAgICAgICMgQXZvaWQgZnV0dXJlIHZhcmlhYmxlIGtleSBleHBhbnNpb24KKyAgICAgICAgICAgIHByb3ZleHAgPSBkLmV4cGFuZChwcm92KQorICAgICAgICAgICAgaWYgcHJvdiAhPSBwcm92ZXhwIGFuZCBkLmdldFZhcihwcm92LCBGYWxzZSk6CisgICAgICAgICAgICAgICAgZC5yZW5hbWVWYXIocHJvdiwgcHJvdmV4cCkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHZpcnQgPSAiIgorICAgICAgICBpZiBwa2cuc3RhcnRzd2l0aCgidmlydHVhbC8iKToKKyAgICAgICAgICAgIHBrZyA9IHBrZy5yZXBsYWNlKCJ2aXJ0dWFsLyIsICIiKQorICAgICAgICAgICAgdmlydCA9ICJ2aXJ0dWFsLyIKKyAgICAgICAgZm9yIHAgaW4gcHJlZml4ZXM6CisgICAgICAgICAgICBpZiBwa2cgIT0gImtlcm5lbCI6CisgICAgICAgICAgICAgICAgbmV3dmFsID0gcCArICItIiArIHZhbAorCisgICAgICAgICAgICAjIGltcGxlbWVudCB2YXJpYWJsZSBrZXlzCisgICAgICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgICAgIG92ZXJyaWRlID0gIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHAKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIGxvY2FsZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArIG92ZXJyaWRlKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgICAgICBuZXduYW1lID0gbG9jYWxkYXRhLmV4cGFuZChwcm92KQorICAgICAgICAgICAgaWYgbmV3bmFtZSAhPSBwcm92IGFuZCBub3QgZC5nZXRWYXIobmV3bmFtZSwgRmFsc2UpOgorICAgICAgICAgICAgICAgIGQuc2V0VmFyKG5ld25hbWUsIGxvY2FsZGF0YS5leHBhbmQobmV3dmFsKSkKKworICAgICAgICAgICAgIyBpbXBsZW1lbnQgYWx0ZXJuYXRpdmUgbXVsdGlsaWIgbmFtZQorICAgICAgICAgICAgbmV3bmFtZSA9IGxvY2FsZGF0YS5leHBhbmQoIlBSRUZFUlJFRF9QUk9WSURFUl8iICsgdmlydCArIHAgKyAiLSIgKyBwa2cpCisgICAgICAgICAgICBpZiBub3QgZC5nZXRWYXIobmV3bmFtZSwgRmFsc2UpOgorICAgICAgICAgICAgICAgIGQuc2V0VmFyKG5ld25hbWUsIGxvY2FsZGF0YS5leHBhbmQobmV3dmFsKSkKKyAgICAgICAgIyBBdm9pZCBmdXR1cmUgdmFyaWFibGUga2V5IGV4cGFuc2lvbgorICAgICAgICBwcm92ZXhwID0gZC5leHBhbmQocHJvdikKKyAgICAgICAgaWYgcHJvdiAhPSBwcm92ZXhwIGFuZCBkLmdldFZhcihwcm92LCBGYWxzZSk6CisgICAgICAgICAgICBkLnJlbmFtZVZhcihwcm92LCBwcm92ZXhwKQorCisKKyAgICBtcCA9IChkLmdldFZhcigiTVVMVElfUFJPVklERVJfV0hJVEVMSVNUIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBleHRyYW1wID0gW10KKyAgICBmb3IgcCBpbiBtcDoKKyAgICAgICAgaWYgcC5lbmRzd2l0aCgiLW5hdGl2ZSIpIG9yICItY3Jvc3NzZGstIiBpbiBwIG9yIHAuc3RhcnRzd2l0aCgoIm5hdGl2ZXNkay0iLCAidmlydHVhbC9uYXRpdmVzZGstIikpIG9yICdjcm9zcy1jYW5hZGlhbicgaW4gcDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHZpcnQgPSAiIgorICAgICAgICBpZiBwLnN0YXJ0c3dpdGgoInZpcnR1YWwvIik6CisgICAgICAgICAgICBwID0gcC5yZXBsYWNlKCJ2aXJ0dWFsLyIsICIiKQorICAgICAgICAgICAgdmlydCA9ICJ2aXJ0dWFsLyIKKyAgICAgICAgZm9yIHByZWYgaW4gcHJlZml4ZXM6CisgICAgICAgICAgICBleHRyYW1wLmFwcGVuZCh2aXJ0ICsgcHJlZiArICItIiArIHApCisgICAgZC5zZXRWYXIoIk1VTFRJX1BST1ZJREVSX1dISVRFTElTVCIsICIgIi5qb2luKG1wICsgZXh0cmFtcCkpCisKK3B5dGhvbiBtdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcl92ZW5kb3IgKCkgeworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQ29uZmlnUGFyc2VkKToKKyAgICAgICAgZm9yIHYgaW4gZS5kYXRhLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgZS5kYXRhLmdldFZhcigiVEFSR0VUX1ZFTkRPUl92aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHYsIEZhbHNlKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGUuZGF0YS5zZXRWYXIoIlRBUkdFVF9WRU5ET1JfdmlydGNsYXNzLW11bHRpbGliLSIgKyB2LCBlLmRhdGEuZ2V0VmFyKCJUQVJHRVRfVkVORE9SIiwgRmFsc2UpICsgIm1sIiArIHYpCisgICAgICAgIHByZWZlcnJlZF9tbF91cGRhdGVzKGUuZGF0YSkKK30KK2FkZGhhbmRsZXIgbXVsdGlsaWJfdmlydGNsYXNzX2hhbmRsZXJfdmVuZG9yCittdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcl92ZW5kb3JbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5Db25maWdQYXJzZWQiCisKK3B5dGhvbiBtdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcl9nbG9iYWwgKCkgeworICAgIGlmIG5vdCBlLmRhdGE6CisgICAgICAgIHJldHVybgorCisgICAgdmFyaWFudCA9IGUuZGF0YS5nZXRWYXIoIkJCRVhURU5EVkFSSUFOVCIsIFRydWUpCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LlJlY2lwZVBhcnNlZCkgYW5kIG5vdCB2YXJpYW50OgorICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwnLCBlLmRhdGEpIG9yIFwKKyAgICAgICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ21vZHVsZS1iYXNlJywgZS5kYXRhKSBvciBcCisgICAgICAgICAgICAoYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYWxsYXJjaCcsIGUuZGF0YSkgYW5kXAorICAgICAgICAgICAgIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdwYWNrYWdlZ3JvdXAnLCBlLmRhdGEpKToKKyAgICAgICAgICAgIHZhcmlhbnRzID0gKGUuZGF0YS5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgICAgICAgICAgaW1wb3J0IG9lLmNsYXNzZXh0ZW5kCisgICAgICAgICAgICBjbHNleHRlbmRzID0gW10KKyAgICAgICAgICAgIGZvciB2YXJpYW50IGluIHZhcmlhbnRzOgorICAgICAgICAgICAgICAgIGNsc2V4dGVuZHMuYXBwZW5kKG9lLmNsYXNzZXh0ZW5kLkNsYXNzRXh0ZW5kZXIodmFyaWFudCwgZS5kYXRhKSkKKworICAgICAgICAgICAgIyBQcm9jZXNzIFBST1ZJREVTCisgICAgICAgICAgICBvcmlncHJvdnMgPSBwcm92cyA9IGUuZGF0YS5nZXRWYXIoIlBST1ZJREVTIiwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgIGZvciBjbHNleHRlbmQgaW4gY2xzZXh0ZW5kczoKKyAgICAgICAgICAgICAgICBwcm92cyA9IHByb3ZzICsgIiAiICsgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiUFJPVklERVMiLCBzZXR2YXI9RmFsc2UpCisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJQUk9WSURFUyIsIHByb3ZzKQorCisgICAgICAgICAgICAjIFByb2Nlc3MgUlBST1ZJREVTCisgICAgICAgICAgICBvcmlncnByb3ZzID0gcnByb3ZzID0gZS5kYXRhLmdldFZhcigiUlBST1ZJREVTIiwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgIGZvciBjbHNleHRlbmQgaW4gY2xzZXh0ZW5kczoKKyAgICAgICAgICAgICAgICBycHJvdnMgPSBycHJvdnMgKyAiICIgKyBjbHNleHRlbmQubWFwX3ZhcmlhYmxlKCJSUFJPVklERVMiLCBzZXR2YXI9RmFsc2UpCisgICAgICAgICAgICBpZiBycHJvdnMuc3RyaXAoKToKKyAgICAgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJSUFJPVklERVMiLCBycHJvdnMpCisKKwkgICAgIyBQcm9jZXNzIFJQUk9WSURFU18ke1BOfS4uLgorICAgICAgICAgICAgZm9yIHBrZyBpbiAoZS5kYXRhLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBvcmlncnByb3ZzID0gcnByb3ZzID0gZS5kYXRhLmdldFZhcigiUlBST1ZJREVTXyVzIiAlIHBrZywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgICAgICBmb3IgY2xzZXh0ZW5kIGluIGNsc2V4dGVuZHM6CisgICAgICAgICAgICAgICAgICAgIHJwcm92cyA9IHJwcm92cyArICIgIiArIGNsc2V4dGVuZC5tYXBfdmFyaWFibGUoIlJQUk9WSURFU18lcyIgJSBwa2csIHNldHZhcj1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgcnByb3ZzID0gcnByb3ZzICsgIiAiICsgY2xzZXh0ZW5kLmV4dG5hbWUgKyAiLSIgKyBwa2cKKyAgICAgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJSUFJPVklERVNfJXMiICUgcGtnLCBycHJvdnMpCit9CisKK2FkZGhhbmRsZXIgbXVsdGlsaWJfdmlydGNsYXNzX2hhbmRsZXJfZ2xvYmFsCittdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcl9nbG9iYWxbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5SZWNpcGVQcmVGaW5hbGlzZSBiYi5ldmVudC5SZWNpcGVQYXJzZWQiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL211bHRpbGliX2hlYWRlci5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbXVsdGlsaWJfaGVhZGVyLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVlMGEyZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL211bHRpbGliX2hlYWRlci5iYmNsYXNzCkBAIC0wLDAgKzEsNTQgQEAKK2luaGVyaXQgc2l0ZWluZm8KKworIyBJZiBhcHBsaWNhYmxlIG9uIHRoZSBhcmNoaXRlY3R1cmUsIHRoaXMgcm91dGluZSB3aWxsIHJlbmFtZSB0aGUgaGVhZGVyIGFuZAorIyBhZGQgYSB1bmlxdWUgaWRlbnRpZmllciB0byB0aGUgbmFtZSBmb3IgdGhlIEFCSS9iaXRzaXplIHRoYXQgaXMgYmVpbmcgdXNlZC4KKyMgQSB3cmFwcGVyIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB0aGUgYXJjaGl0ZWN0dXJlIHRoYXQga25vd3MgaG93IHRvIGNhbGwKKyMgYWxsIG9mIHRoZSBBQkkgdmFyaWFudHMgZm9yIHRoYXQgZ2l2ZW4gYXJjaGl0ZWN0dXJlLgorIworb2VfbXVsdGlsaWJfaGVhZGVyKCkgeworCisJY2FzZSAke0hPU1RfT1N9IGluCisJKi1tdXNsKikKKwkJcmV0dXJuCisJCTs7CisJKikKKwllc2FjCisgICAgICAgICMgV2UgdXNlCisgICAgICAgICMgRm9yIEFSTTogV2UgZG9uJ3Qgc3VwcG9ydCBtdWx0aWxpYiBidWlsZHMuCisgICAgICAgICMgRm9yIE1JUFM6ICJuMzIiIGlzIGEgc3BlY2lhbCBjYXNlLCB3aGljaCBuZWVkcyB0byBiZQorICAgICAgICAjIGRpc3RpbmN0IGZyb20gYm90aCA2NC1iaXQgYW5kIDMyLWJpdC4KKyAgICAgICAgY2FzZSAke1RBUkdFVF9BUkNIfSBpbgorICAgICAgICBhcm0qKSAgIHJldHVybgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIG1pcHMqKSAgY2FzZSAiJHtNSVBTUEtHU0ZYX0FCSX0iIGluCisgICAgICAgICAgICAgICAgIi1uMzIiKQorICAgICAgICAgICAgICAgICAgICAgICBpZGVudD1uMzIgICAKKyAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAqKSAgICAgCisgICAgICAgICAgICAgICAgICAgICAgIGlkZW50PSR7U0lURUlORk9fQklUU30KKyAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgKikgICAgICBpZGVudD0ke1NJVEVJTkZPX0JJVFN9CisgICAgICAgIGVzYWMKKwlpZiBlY2hvICR7VEFSR0VUX0FSQ0h9IHwgZ3JlcCAtcSBhcm07IHRoZW4KKwkgICAgcmV0dXJuCisJZmkKKwlmb3IgZWFjaF9oZWFkZXIgaW4gIiRAIiA7IGRvCisJICAgaWYgWyAhIC1mICIke0R9LyR7aW5jbHVkZWRpcn0vJGVhY2hfaGVhZGVyIiBdOyB0aGVuCisJICAgICAgYmJlcnJvciAib2VfbXVsdGlsaWJfaGVhZGVyOiBVbmFibGUgdG8gZmluZCBoZWFkZXIgJGVhY2hfaGVhZGVyLiIKKwkgICAgICBjb250aW51ZQorCSAgIGZpCisJICAgc3RlbT0kKGVjaG8gJGVhY2hfaGVhZGVyIHwgc2VkICdzI1wuaCQjIycpCisJICAgIyBpZiBtaXBzNjQvbjMyIHNldCBpZGVudCB0byBuMzIKKwkgICBtdiAke0R9LyR7aW5jbHVkZWRpcn0vJGVhY2hfaGVhZGVyICR7RH0vJHtpbmNsdWRlZGlyfS8ke3N0ZW19LSR7aWRlbnR9LmgKKworCSAgIHNlZCAtZSAicyNFTlRFUl9IRUFERVJfRklMRU5BTUVfSEVSRSMke3N0ZW19I2ciICR7Q09SRUJBU0V9L3NjcmlwdHMvbXVsdGlsaWJfaGVhZGVyX3dyYXBwZXIuaCA+ICR7RH0vJHtpbmNsdWRlZGlyfS8kZWFjaF9oZWFkZXIKKwlkb25lCit9CisKKyMgRGVwZW5kZW5jaWVzIG9uIGFyY2ggdmFyaWFibGVzIGxpa2UgTUlQU1BLR1NGWF9BQkkgY2FuIGJlIHByb2JsZW1hdGljLgorIyBXZSBkb24ndCBuZWVkIG11bHRpbGliIGhlYWRlcnMgZm9yIG5hdGl2ZSBidWlsZHMgc28gYnJ1dGUgZm9yY2UgdGhpbmdzLgorb2VfbXVsdGlsaWJfaGVhZGVyX2NsYXNzLW5hdGl2ZSAoKSB7CisJcmV0dXJuCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9uYXRpdmUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL25hdGl2ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYmNkNjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9uYXRpdmUuYmJjbGFzcwpAQCAtMCwwICsxLDE4MyBAQAorIyBXZSB3YW50IG5hdGl2ZSBwYWNrYWdlcyB0byBiZSByZWxvY2F0YWJsZQoraW5oZXJpdCByZWxvY2F0YWJsZQorCisjIE5hdGl2ZSBwYWNrYWdlcyBhcmUgYnVpbHQgaW5kaXJlY3RseSB2aWEgZGVwZW5kZW5jeSwKKyMgbm8gbmVlZCBmb3IgdGhlbSB0byBiZSBhIGRpcmVjdCB0YXJnZXQgb2YgJ3dvcmxkJworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK1BBQ0tBR0VTID0gIiIKK1BBQ0tBR0VTX2NsYXNzLW5hdGl2ZSA9ICIiCitQQUNLQUdFU19EWU5BTUlDID0gIiIKK1BBQ0tBR0VTX0RZTkFNSUNfY2xhc3MtbmF0aXZlID0gIiIKK1BBQ0tBR0VfQVJDSCA9ICIke0JVSUxEX0FSQ0h9IgorCisjIHVzZWQgYnkgY21ha2UgY2xhc3MKK09FQ01BS0VfUlBBVEggPSAiJHtsaWJkaXJ9IgorT0VDTUFLRV9SUEFUSF9jbGFzcy1uYXRpdmUgPSAiJHtsaWJkaXJ9IgorCisjIFdoZW4gdGhpcyBjbGFzcyBoYXMgcGFja2FnaW5nIGVuYWJsZWQsIHNldHRpbmcgCisjIFJQUk9WSURFUyBiZWNvbWVzIHVubmVjZXNzYXJ5LgorUlBST1ZJREVTID0gIiR7UE59IgorCitUQVJHRVRfQVJDSCA9ICIke0JVSUxEX0FSQ0h9IgorVEFSR0VUX09TID0gIiR7QlVJTERfT1N9IgorVEFSR0VUX1ZFTkRPUiA9ICIke0JVSUxEX1ZFTkRPUn0iCitUQVJHRVRfUFJFRklYID0gIiR7QlVJTERfUFJFRklYfSIKK1RBUkdFVF9DQ19BUkNIID0gIiR7QlVJTERfQ0NfQVJDSH0iCitUQVJHRVRfTERfQVJDSCA9ICIke0JVSUxEX0xEX0FSQ0h9IgorVEFSR0VUX0FTX0FSQ0ggPSAiJHtCVUlMRF9BU19BUkNIfSIKK1RBUkdFVF9DUFBGTEFHUyA9ICIke0JVSUxEX0NQUEZMQUdTfSIKK1RBUkdFVF9DRkxBR1MgPSAiJHtCVUlMRF9DRkxBR1N9IgorVEFSR0VUX0NYWEZMQUdTID0gIiR7QlVJTERfQ1hYRkxBR1N9IgorVEFSR0VUX0xERkxBR1MgPSAiJHtCVUlMRF9MREZMQUdTfSIKK1RBUkdFVF9GUFUgPSAiIgorCitIT1NUX0FSQ0ggPSAiJHtCVUlMRF9BUkNIfSIKK0hPU1RfT1MgPSAiJHtCVUlMRF9PU30iCitIT1NUX1ZFTkRPUiA9ICIke0JVSUxEX1ZFTkRPUn0iCitIT1NUX1BSRUZJWCA9ICIke0JVSUxEX1BSRUZJWH0iCitIT1NUX0NDX0FSQ0ggPSAiJHtCVUlMRF9DQ19BUkNIfSIKK0hPU1RfTERfQVJDSCA9ICIke0JVSUxEX0xEX0FSQ0h9IgorSE9TVF9BU19BUkNIID0gIiR7QlVJTERfQVNfQVJDSH0iCisKK0NQUEZMQUdTID0gIiR7QlVJTERfQ1BQRkxBR1N9IgorQ0ZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSIKK0NYWEZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSIKK0xERkxBR1MgPSAiJHtCVUlMRF9MREZMQUdTfSIKK0xERkxBR1NfYnVpbGQtZGFyd2luID0gIi1MJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9ICIKKworU1RBR0lOR19CSU5ESVIgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IgorU1RBR0lOR19CSU5ESVJfQ1JPU1MgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IgorCisjIG5hdGl2ZSBwa2cgZG9lc24ndCBuZWVkIHRoZSBUT09MQ0hBSU5fT1BUSU9OUy4KK1RPT0xDSEFJTl9PUFRJT05TID0gIiIKKworREVQRU5EU19HRVRURVhUID0gImdldHRleHQtbmF0aXZlIgorCisjIERvbid0IGJ1aWxkIHB0ZXN0IG5hdGl2ZWx5CitQVEVTVF9FTkFCTEVEID0gIjAiCisKKyMgRG9uJ3QgdXNlIHNpdGUgZmlsZXMgZm9yIG5hdGl2ZSBidWlsZHMKK2V4cG9ydCBDT05GSUdfU0lURSA9ICIke0NPUkVCQVNFfS9tZXRhL3NpdGUvbmF0aXZlIgorCisjIHNldCB0aGUgY29tcGlsZXIgYXMgd2VsbC4gSXQgY291bGQgaGF2ZSBiZWVuIHNldCB0byBzb21ldGhpbmcgZWxzZQorZXhwb3J0IENDID0gIiR7QlVJTERfQ0N9IgorZXhwb3J0IENYWCA9ICIke0JVSUxEX0NYWH0iCitleHBvcnQgRkMgPSAiJHtCVUlMRF9GQ30iCitleHBvcnQgQ1BQID0gIiR7QlVJTERfQ1BQfSIKK2V4cG9ydCBMRCA9ICIke0JVSUxEX0xEfSIKK2V4cG9ydCBDQ0xEID0gIiR7QlVJTERfQ0NMRH0iCitleHBvcnQgQVIgPSAiJHtCVUlMRF9BUn0iCitleHBvcnQgQVMgPSAiJHtCVUlMRF9BU30iCitleHBvcnQgUkFOTElCID0gIiR7QlVJTERfUkFOTElCfSIKK2V4cG9ydCBTVFJJUCA9ICIke0JVSUxEX1NUUklQfSIKK2V4cG9ydCBOTSA9ICIke0JVSUxEX05NfSIKKworIyBQYXRoIHByZWZpeGVzCitiYXNlX3ByZWZpeCA9ICIke1NUQUdJTkdfRElSX05BVElWRX0iCitwcmVmaXggPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfSIKK2V4ZWNfcHJlZml4ID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0iCisKK2JpbmRpciA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0iCitzYmluZGlyID0gIiR7U1RBR0lOR19TQklORElSX05BVElWRX0iCitsaWJkaXIgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IgoraW5jbHVkZWRpciA9ICIke1NUQUdJTkdfSU5DRElSX05BVElWRX0iCitzeXNjb25mZGlyID0gIiR7U1RBR0lOR19FVENESVJfTkFUSVZFfSIKK2RhdGFkaXIgPSAiJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfSIKKworYmFzZWxpYiA9ICJsaWIiCisKKyMgTGlidG9vbCdzIGRlZmF1bHQgcGF0aHMgYXJlIGNvcnJlY3QgZm9yIHRoZSBuYXRpdmUgbWFjaGluZQorbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNbdW5leHBvcnRdID0gIjEiCisKK05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYID89ICIiCitiaW5kaXIgLj0gIiR7TkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVh9IgorbGliZGlyIC49ICIke05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYfSIKK2xpYmV4ZWNkaXIgLj0gIiR7TkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVh9IgorCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7U1lTUk9PVF9ERVNURElSfS8ke1NUQUdJTkdfRElSX05BVElWRX0vIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9LyIKKworIyBTaW5jZSB3ZSBhY3R1YWxseSBpbnN0YWxsIHRoZXNlIGludG8gc2l0dSB0aGVyZSBpcyBubyBzdGFnaW5nIHByZWZpeAorU1RBR0lOR19ESVJfSE9TVCA9ICIiCitTVEFHSU5HX0RJUl9UQVJHRVQgPSAiIgorUEtHX0NPTkZJR19ESVIgPSAiJHtsaWJkaXJ9L3BrZ2NvbmZpZyIKKworRVhUUkFfTkFUSVZFX1BLR0NPTkZJR19QQVRIID89ICIiCitQS0dfQ09ORklHX1BBVEggLj0gIiR7RVhUUkFfTkFUSVZFX1BLR0NPTkZJR19QQVRIfSIKK1BLR19DT05GSUdfU1lTUk9PVF9ESVIgPSAiIgorCisjIHdlIGRvbnQgd2FudCBsaWJjLXVjbGliYyBvciBsaWJjLWdsaWJjIHRvIGtpY2sgaW4gZm9yIG5hdGl2ZSByZWNpcGVzCitMSUJDT1ZFUlJJREUgPSAiIgorQ0xBU1NPVkVSUklERSA9ICJjbGFzcy1uYXRpdmUiCitNQUNISU5FT1ZFUlJJREVTID0gIiIKKworUEFUSF9wcmVwZW5kID0gIiR7Q09SRUJBU0V9L3NjcmlwdHMvbmF0aXZlLWludGVyY2VwdDoiCisKK3B5dGhvbiBuYXRpdmVfdmlydGNsYXNzX2hhbmRsZXIgKCkgeworICAgIGNsYXNzZXh0ZW5kID0gZS5kYXRhLmdldFZhcignQkJDTEFTU0VYVEVORCcsIFRydWUpIG9yICIiCisgICAgaWYgIm5hdGl2ZSIgbm90IGluIGNsYXNzZXh0ZW5kOgorICAgICAgICByZXR1cm4KKworICAgIHBuID0gZS5kYXRhLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGlmIG5vdCBwbi5lbmRzd2l0aCgiLW5hdGl2ZSIpOgorICAgICAgICByZXR1cm4KKworICAgIGRlZiBtYXBfZGVwZW5kZW5jaWVzKHZhcm5hbWUsIGQsIHN1ZmZpeCA9ICIiKToKKyAgICAgICAgaWYgc3VmZml4OgorICAgICAgICAgICAgdmFybmFtZSA9IHZhcm5hbWUgKyAiXyIgKyBzdWZmaXgKKyAgICAgICAgZGVwcyA9IGQuZ2V0VmFyKHZhcm5hbWUsIFRydWUpCisgICAgICAgIGlmIG5vdCBkZXBzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGRlcHMgPSBiYi51dGlscy5leHBsb2RlX2RlcHMoZGVwcykKKyAgICAgICAgbmV3ZGVwcyA9IFtdCisgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgIGlmIGRlcCA9PSBwbjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxpZiAiLWNyb3NzLSIgaW4gZGVwOgorICAgICAgICAgICAgICAgIG5ld2RlcHMuYXBwZW5kKGRlcC5yZXBsYWNlKCItY3Jvc3MiLCAiLW5hdGl2ZSIpKQorICAgICAgICAgICAgZWxpZiBub3QgZGVwLmVuZHN3aXRoKCItbmF0aXZlIik6CisgICAgICAgICAgICAgICAgbmV3ZGVwcy5hcHBlbmQoZGVwICsgIi1uYXRpdmUiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdkZXBzLmFwcGVuZChkZXApCisgICAgICAgIGQuc2V0VmFyKHZhcm5hbWUsICIgIi5qb2luKG5ld2RlcHMpKQorCisgICAgZS5kYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgZS5kYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjp2aXJ0Y2xhc3MtbmF0aXZlIikKKworICAgIG1hcF9kZXBlbmRlbmNpZXMoIkRFUEVORFMiLCBlLmRhdGEpCisgICAgZm9yIHBrZyBpbiBbZS5kYXRhLmdldFZhcigiUE4iLCBUcnVlKSwgIiIsICIke1BOfSJdOgorICAgICAgICBtYXBfZGVwZW5kZW5jaWVzKCJSREVQRU5EUyIsIGUuZGF0YSwgcGtnKQorICAgICAgICBtYXBfZGVwZW5kZW5jaWVzKCJSUkVDT01NRU5EUyIsIGUuZGF0YSwgcGtnKQorICAgICAgICBtYXBfZGVwZW5kZW5jaWVzKCJSU1VHR0VTVFMiLCBlLmRhdGEsIHBrZykKKyAgICAgICAgbWFwX2RlcGVuZGVuY2llcygiUlBST1ZJREVTIiwgZS5kYXRhLCBwa2cpCisgICAgICAgIG1hcF9kZXBlbmRlbmNpZXMoIlJSRVBMQUNFUyIsIGUuZGF0YSwgcGtnKQorCisgICAgcHJvdmlkZXMgPSBlLmRhdGEuZ2V0VmFyKCJQUk9WSURFUyIsIFRydWUpCisgICAgbnByb3ZpZGVzID0gW10KKyAgICBmb3IgcHJvdiBpbiBwcm92aWRlcy5zcGxpdCgpOgorICAgICAgICBpZiBwcm92LmZpbmQocG4pICE9IC0xOgorICAgICAgICAgICAgbnByb3ZpZGVzLmFwcGVuZChwcm92KQorICAgICAgICBlbGlmIG5vdCBwcm92LmVuZHN3aXRoKCItbmF0aXZlIik6CisgICAgICAgICAgICBucHJvdmlkZXMuYXBwZW5kKHByb3YucmVwbGFjZShwcm92LCBwcm92ICsgIi1uYXRpdmUiKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5wcm92aWRlcy5hcHBlbmQocHJvdikKKyAgICBlLmRhdGEuc2V0VmFyKCJQUk9WSURFUyIsICcgJy5qb2luKG5wcm92aWRlcykpCisKKworfQorCithZGRoYW5kbGVyIG5hdGl2ZV92aXJ0Y2xhc3NfaGFuZGxlcgorbmF0aXZlX3ZpcnRjbGFzc19oYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UiCisKK2RlbHRhc2sgcGFja2FnZQorZGVsdGFzayBwYWNrYWdlZGF0YQorZGVsdGFzayBwYWNrYWdlX3FhCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfaXBrCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfZGViCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfcnBtCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGUKKworZG9fcGFja2FnZWRhdGFbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtzdGFtcC1leHRyYS1pbmZvXSA9ICIiCisKK1VTRV9OTFMgPSAibm8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9uYXRpdmVzZGsuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL25hdGl2ZXNkay5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NGRhNjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9uYXRpdmVzZGsuYmJjbGFzcwpAQCAtMCwwICsxLDk3IEBACisjIFNESyBwYWNrYWdlcyBhcmUgYnVpbHQgZWl0aGVyIGV4cGxpY2l0bHkgYnkgdGhlIHVzZXIsCisjIG9yIGluZGlyZWN0bHkgdmlhIGRlcGVuZGVuY3kuICBObyBuZWVkIHRvIGJlIGluICd3b3JsZCcuCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0vJHtTREtfQVJDSH0ke1NES19WRU5ET1J9LSR7U0RLX09TfSIKKworIyBsaWJjIGZvciB0aGUgU0RLIGNhbiBiZSBkaWZmZXJlbnQgdG8gdGhhdCBvZiB0aGUgdGFyZ2V0CitOQVRJVkVTREtMSUJDID89ICJsaWJjLWdsaWJjIgorTElCQ09WRVJSSURFID0gIjoke05BVElWRVNES0xJQkN9IgorQ0xBU1NPVkVSUklERSA9ICJjbGFzcy1uYXRpdmVzZGsiCitNQUNISU5FT1ZFUlJJREVTID0gIiIKKworIworIyBVcGRhdGUgUEFDS0FHRV9BUkNIIGFuZCBQQUNLQUdFX0FSQ0hTCisjCitQQUNLQUdFX0FSQ0ggPSAiJHtTREtfQVJDSH0tJHtTREtQS0dTVUZGSVh9IgorUEFDS0FHRV9BUkNIUyA9ICIke1NES19QQUNLQUdFX0FSQ0hTfSIKKworIworIyBXZSBuZWVkIGNocnBhdGggPj0gMC4xNCB0byBlbnN1cmUgd2UgY2FuIGRlYWwgd2l0aCAzMiBhbmQgNjQgYml0CisjIGJpbmFyaWVzCisjCitERVBFTkRTX2FwcGVuZCA9ICIgY2hycGF0aC1yZXBsYWNlbWVudC1uYXRpdmUiCitFWFRSQU5BVElWRVBBVEggKz0gImNocnBhdGgtbmF0aXZlIgorCitTVEFHSU5HX0RJUl9IT1NUID0gIiR7U1RBR0lOR19ESVJ9LyR7TVVMVElNQUNIX0hPU1RfU1lTfSIKK1NUQUdJTkdfRElSX1RBUkdFVCA9ICIke1NUQUdJTkdfRElSfS8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfSIKK1BLR0RBVEFfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0vcGtnZGF0YSIKKworSE9TVF9BUkNIID0gIiR7U0RLX0FSQ0h9IgorSE9TVF9WRU5ET1IgPSAiJHtTREtfVkVORE9SfSIKK0hPU1RfT1MgPSAiJHtTREtfT1N9IgorSE9TVF9QUkVGSVggPSAiJHtTREtfUFJFRklYfSIKK0hPU1RfQ0NfQVJDSCA9ICIke1NES19DQ19BUkNIfSIKK0hPU1RfTERfQVJDSCA9ICIke1NES19MRF9BUkNIfSIKK0hPU1RfQVNfQVJDSCA9ICIke1NES19BU19BUkNIfSIKKyNIT1NUX1NZUyA9ICIke0hPU1RfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK1RBUkdFVF9BUkNIID0gIiR7U0RLX0FSQ0h9IgorVEFSR0VUX1ZFTkRPUiA9ICIke1NES19WRU5ET1J9IgorVEFSR0VUX09TID0gIiR7U0RLX09TfSIKK1RBUkdFVF9QUkVGSVggPSAiJHtTREtfUFJFRklYfSIKK1RBUkdFVF9DQ19BUkNIID0gIiR7U0RLX0NDX0FSQ0h9IgorVEFSR0VUX0xEX0FSQ0ggPSAiJHtTREtfTERfQVJDSH0iCitUQVJHRVRfQVNfQVJDSCA9ICIke1NES19BU19BUkNIfSIKK1RBUkdFVF9GUFUgPSAiIgorRVhUUkFfT0VDT05GX0dDQ19GTE9BVCA9ICIiCisKK0NQUEZMQUdTID0gIiR7QlVJTERTREtfQ1BQRkxBR1N9IgorQ0ZMQUdTID0gIiR7QlVJTERTREtfQ0ZMQUdTfSIKK0NYWEZMQUdTID0gIiR7QlVJTERTREtfQ0ZMQUdTfSIKK0xERkxBR1MgPSAiJHtCVUlMRFNES19MREZMQUdTfSIKKworIyBDaGFuZ2UgdG8gcGxhY2UgZmlsZXMgaW4gU0RLUEFUSAorYmFzZV9wcmVmaXggPSAiJHtTREtQQVRITkFUSVZFfSIKK3ByZWZpeCA9ICIke1NES1BBVEhOQVRJVkV9JHtwcmVmaXhfbmF0aXZlc2RrfSIKK2V4ZWNfcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9IgorYmFzZWxpYiA9ICJsaWIiCitzYmluZGlyID0gIiR7YmluZGlyfSIKKworZXhwb3J0IFBLR19DT05GSUdfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2xpYmRpcn0vcGtnY29uZmlnIgorZXhwb3J0IFBLR19DT05GSUdfU1lTUk9PVF9ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSIKKworcHl0aG9uIG5hdGl2ZXNka192aXJ0Y2xhc3NfaGFuZGxlciAoKSB7CisgICAgcG4gPSBlLmRhdGEuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgaWYgbm90IChwbi5lbmRzd2l0aCgiLW5hdGl2ZXNkayIpIG9yIHBuLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKSk6CisgICAgICAgIHJldHVybgorCisgICAgZS5kYXRhLnNldFZhcigiTUxQUkVGSVgiLCAibmF0aXZlc2RrLSIpCisgICAgZS5kYXRhLnNldFZhcigiUE4iLCAibmF0aXZlc2RrLSIgKyBlLmRhdGEuZ2V0VmFyKCJQTiIsIFRydWUpLnJlcGxhY2UoIi1uYXRpdmVzZGsiLCAiIikucmVwbGFjZSgibmF0aXZlc2RrLSIsICIiKSkKKyAgICBlLmRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBlLmRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOnZpcnRjbGFzcy1uYXRpdmVzZGsiKQorfQorCitweXRob24gKCkgeworICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBpZiBub3QgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICByZXR1cm4KKworICAgIGltcG9ydCBvZS5jbGFzc2V4dGVuZAorCisgICAgY2xzZXh0ZW5kID0gb2UuY2xhc3NleHRlbmQuTmF0aXZlc2RrQ2xhc3NFeHRlbmRlcigibmF0aXZlc2RrIiwgZCkKKyAgICBjbHNleHRlbmQucmVuYW1lX3BhY2thZ2VzKCkKKyAgICBjbHNleHRlbmQucmVuYW1lX3BhY2thZ2VfdmFyaWFibGVzKChkLmdldFZhcigiUEFDS0FHRVZBUlMiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKworICAgIGNsc2V4dGVuZC5tYXBfZGVwZW5kc192YXJpYWJsZSgiREVQRU5EUyIpCisgICAgY2xzZXh0ZW5kLm1hcF9wYWNrYWdldmFycygpCisgICAgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiUFJPVklERVMiKQorICAgIGNsc2V4dGVuZC5tYXBfcmVnZXhwX3ZhcmlhYmxlKCJQQUNLQUdFU19EWU5BTUlDIikKK30KKworYWRkaGFuZGxlciBuYXRpdmVzZGtfdmlydGNsYXNzX2hhbmRsZXIKK25hdGl2ZXNka192aXJ0Y2xhc3NfaGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlIgorCitkb19wb3B1bGF0ZV9zeXNyb290W3N0YW1wLWV4dHJhLWluZm9dID0gIiIKK2RvX3BhY2thZ2VkYXRhW3N0YW1wLWV4dHJhLWluZm9dID0gIiIKKworVVNFX05MUyA9ICIke1NES1VTRV9OTFN9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvb2VsaW50LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9vZWxpbnQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjA1MWNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvb2VsaW50LmJiY2xhc3MKQEAgLTAsMCArMSw4NCBAQAorYWRkdGFzayBsaW50IGJlZm9yZSBkb19idWlsZAorZG9fbGludFtub3N0YW1wXSA9ICIxIgorcHl0aG9uIGRvX2xpbnQoKSB7CisgICAgcGtnbmFtZSA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIFRlc3QgdGhhdCBERVNDUklQVElPTiBleGlzdHMKKyAgICAjCisgICAgZGVzY3JpcHRpb24gPSBkLmdldFZhcigiREVTQ1JJUFRJT04iLCBGYWxzZSkKKyAgICBpZiBkZXNjcmlwdGlvblsxOjEwXSA9PSAne1NVTU1BUll9JzoKKyAgICAgICAgYmIud2FybigiJXM6IERFU0NSSVBUSU9OIGlzIG5vdCBzZXQiICUgcGtnbmFtZSkKKworCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBUZXN0IHRoYXQgSE9NRVBBR0UgZXhpc3RzCisgICAgIworICAgIGhvbWVwYWdlID0gZC5nZXRWYXIoIkhPTUVQQUdFIiwgRmFsc2UpCisgICAgaWYgaG9tZXBhZ2UgPT0gJyc6CisgICAgICAgIGJiLndhcm4oIiVzOiBIT01FUEFHRSBpcyBub3Qgc2V0IiAlIHBrZ25hbWUpCisgICAgZWxpZiBub3QgaG9tZXBhZ2Uuc3RhcnRzd2l0aCgiaHR0cDovLyIpIGFuZCBub3QgaG9tZXBhZ2Uuc3RhcnRzd2l0aCgiaHR0cHM6Ly8iKToKKyAgICAgICAgYmIud2FybigiJXM6IEhPTUVQQUdFIGRvZXNuJ3Qgc3RhcnQgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vIiAlIHBrZ25hbWUpCisKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgVGVzdCBmb3IgdmFsaWQgU0VDVElPTgorICAgICMKKyAgICBzZWN0aW9uID0gZC5nZXRWYXIoIlNFQ1RJT04iLCBGYWxzZSkKKyAgICBpZiBzZWN0aW9uID09ICcnOgorICAgICAgICBiYi53YXJuKCIlczogU0VDVElPTiBpcyBub3Qgc2V0IiAlIHBrZ25hbWUpCisgICAgZWxpZiBub3Qgc2VjdGlvbi5pc2xvd2VyKCk6CisgICAgICAgIGJiLndhcm4oIiVzOiBTRUNUSU9OIHNob3VsZCBvbmx5IHVzZSBsb3dlciBjYXNlIiAlIHBrZ25hbWUpCisKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQ2hlY2sgdGhhdCBhbGwgcGF0Y2hlcyBoYXZlIFNpZ25lZC1vZmYtYnkgYW5kIFVwc3RyZWFtLVN0YXR1cworICAgICMKKyAgICBzcmN1cmkgPSBkLmdldFZhcigiU1JDX1VSSSIsIEZhbHNlKS5zcGxpdCgpCisgICAgZnBhdGhzID0gKGQuZ2V0VmFyKCdGSUxFU1BBVEgnLCBUcnVlKSBvciAnJykuc3BsaXQoJzonKQorCisgICAgZGVmIGZpbmRQYXRjaChwYXRjaG5hbWUpOgorICAgICAgICBmb3IgZGlyIGluIGZwYXRoczoKKyAgICAgICAgICAgIHBhdGNocGF0aCA9IGRpciArIHBhdGNobmFtZQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0Y2hwYXRoKToKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHBhdGNocGF0aAorCisgICAgZGVmIGZpbmRLZXkocGF0aCwga2V5KToKKyAgICAgICAgcmV0ID0gVHJ1ZQorICAgICAgICBmID0gZmlsZSgnJXMnICUgcGF0aCwgbW9kZSA9ICdyJykKKyAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICB3aGlsZSBsaW5lOgorICAgICAgICAgICAgaWYgbGluZS5maW5kKGtleSkgIT0gLTE6CisgICAgICAgICAgICAgICAgcmV0ID0gRmFsc2UKKyAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHJldHVybiByZXQKKworICAgIGRlZiBjaGVja1BOKHBrZ25hbWUsIHZhcm5hbWUsIHN0cik6CisgICAgICAgIGlmIHN0ci5maW5kKCJ7UE59IikgIT0gLTE6CisgICAgICAgICAgICBiYi53YXJuKCIlczogc2hvdWxkIHVzZSBCUE4gaW5zdGVhZCBvZiBQTiBpbiAlcyIgJSAocGtnbmFtZSwgdmFybmFtZSkpCisgICAgICAgIGlmIHN0ci5maW5kKCJ7UH0iKSAhPSAtMToKKyAgICAgICAgICAgIGJiLndhcm4oIiVzOiBzaG91bGQgdXNlIEJQIGluc3RlYWQgb2YgUCBpbiAlcyIgJSAocGtnbmFtZSwgdmFybmFtZSkpCisKKyAgICBsZW5ndGggPSBsZW4oImZpbGU6Ly8iKQorICAgIGZvciBpdGVtIGluIHNyY3VyaToKKyAgICAgICAgaWYgaXRlbS5zdGFydHN3aXRoKCJmaWxlOi8vIik6CisgICAgICAgICAgICBpdGVtID0gaXRlbVtsZW5ndGg6XQorICAgICAgICAgICAgaWYgaXRlbS5lbmRzd2l0aCgiLnBhdGNoIikgb3IgaXRlbS5lbmRzd2l0aCgiLmRpZmYiKToKKyAgICAgICAgICAgICAgICBwYXRoID0gZmluZFBhdGNoKGl0ZW0pCisgICAgICAgICAgICAgICAgaWYgZmluZEtleShwYXRoLCAiU2lnbmVkLW9mZi1ieSIpOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogJXMgZG9lc24ndCBoYXZlIFNpZ25lZC1vZmYtYnkiICUgKHBrZ25hbWUsIGl0ZW0pKQorICAgICAgICAgICAgICAgIGlmIGZpbmRLZXkocGF0aCwgIlVwc3RyZWFtLVN0YXR1cyIpOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogJXMgZG9lc24ndCBoYXZlIFVwc3RyZWFtLVN0YXR1cyIgJSAocGtnbmFtZSwgaXRlbSkpCisKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQ2hlY2sgZm9yICR7UE59IG9yICR7UH0gdXNhZ2UgaW4gU1JDX1VSSSBvciBTCisgICAgIyBTaG91bGQgdXNlICR7QlBOfSBvciAke0JQfSBpbnN0ZWFkIHRvIGF2b2lkIGJyZWFraW5nIG11bHRpbGliCisgICAgIworICAgIGZvciBzIGluIHNyY3VyaToKKyAgICAgICAgaWYgbm90IHMuc3RhcnRzd2l0aCgiZmlsZTovLyIpOgorICAgICAgICAgICAgY2hlY2tQTihwa2duYW1lLCAnU1JDX1VSSScsIHMpCisKKyAgICBjaGVja1BOKHBrZ25hbWUsICdTJywgZC5nZXRWYXIoJ1MnLCBGYWxzZSkpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9vd24tbWlycm9ycy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvb3duLW1pcnJvcnMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjM1MjI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvb3duLW1pcnJvcnMuYmJjbGFzcwpAQCAtMCwwICsxLDEyIEBACitQUkVNSVJST1JTKCkgeworY3ZzOi8vLiovLiogICAgICR7U09VUkNFX01JUlJPUl9VUkx9Citzdm46Ly8uKi8uKiAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK2dpdDovLy4qLy4qICAgICAke1NPVVJDRV9NSVJST1JfVVJMfQorZ2l0c206Ly8uKi8uKiAgICR7U09VUkNFX01JUlJPUl9VUkx9CitoZzovLy4qLy4qICAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK2J6cjovLy4qLy4qICAgICAke1NPVVJDRV9NSVJST1JfVVJMfQorcDQ6Ly8uKi8uKiAgICAgICR7U09VUkNFX01JUlJPUl9VUkx9Citvc2M6Ly8uKi8uKiAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK2h0dHBzPyQ6Ly8uKi8uKiAke1NPVVJDRV9NSVJST1JfVVJMfQorZnRwOi8vLiovLiogICAgICR7U09VUkNFX01JUlJPUl9VUkx9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q5MmJlYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDIwODYgQEAKKyMKKyMgUGFja2FnaW5nIHByb2Nlc3MKKyMKKyMgRXhlY3V0aXZlIHN1bW1hcnk6IFRoaXMgY2xhc3MgaXRlcmF0ZXMgb3ZlciB0aGUgZnVuY3Rpb25zIGxpc3RlZCBpbiBQQUNLQUdFRlVOQ1MKKyMgVGFraW5nIEQgYW5kIHNwbGl0dGluZyBpdCB1cCBpbnRvIHRoZSBwYWNrYWdlcyBsaXN0ZWQgaW4gUEFDS0FHRVMsIHBsYWNpbmcgdGhlCisjIHJlc3VsdGluZyBvdXRwdXQgaW4gUEtHREVTVC4KKyMKKyMgVGhlcmUgYXJlIHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBzdGVwcyBidXQgUEFDS0FHRUZVTkNTIGNhbiBiZSBleHRlbmRlZDoKKyMKKyMgYSkgcGFja2FnZV9nZXRfYXV0b19wciAtIGdldCBQUkFVVE8gZnJvbSByZW1vdGUgUFIgc2VydmljZQorIworIyBiKSBwZXJmb3JtX3BhY2thZ2Vjb3B5IC0gQ29weSBEIGludG8gUEtHRAorIworIyBjKSBwYWNrYWdlX2RvX3NwbGl0X2xvY2FsZXMgLSBTcGxpdCBvdXQgdGhlIGxvY2FsZSBmaWxlcywgdXBkYXRlcyBGSUxFUyBhbmQgUEFDS0FHRVMKKyMKKyMgZCkgc3BsaXRfYW5kX3N0cmlwX2ZpbGVzIC0gc3BsaXQgdGhlIGZpbGVzIGludG8gcnVudGltZSBhbmQgZGVidWcgYW5kIHN0cmlwIHRoZW0uCisjICAgIERlYnVnIGZpbGVzIGluY2x1ZGUgZGVidWcgaW5mbyBzcGxpdCwgYW5kIGFzc29jaWF0ZWQgc291cmNlcyB0aGF0IGVuZCB1cCBpbiAtZGJnIHBhY2thZ2VzCisjCisjIGUpIGZpeHVwX3Blcm1zIC0gRml4IHVwIHBlcm1pc3Npb25zIGluIHRoZSBwYWNrYWdlIGJlZm9yZSB3ZSBzcGxpdCBpdC4KKyMKKyMgZikgcG9wdWxhdGVfcGFja2FnZXMgLSBTcGxpdCB0aGUgZmlsZXMgaW4gUEtHRCBpbnRvIHNlcGFyYXRlIHBhY2thZ2VzIGluIFBLR0RFU1QvPHBrZ25hbWU+CisjICAgIEFsc28gdHJpZ2dlcnMgdGhlIGJpbmFyeSBzdHJpcHBpbmcgY29kZSB0byBwdXQgZmlsZXMgaW4gLWRiZyBwYWNrYWdlcy4KKyMKKyMgZykgcGFja2FnZV9kb19maWxlZGVwcyAtIENvbGxlY3QgcGVyZmlsZSBydW4tdGltZSBkZXBlbmRlbmN5IG1ldGFkYXRhCisjICAgIFRoZSBkYXRhIGlzIHN0b3JlcyBpbiBGSUxFUntQUk9WSURFUyxERVBFTkRTfV9maWxlX3BrZyB2YXJpYWJsZXMgd2l0aAorIyAgICBhIGxpc3Qgb2YgYWZmZWN0ZWQgZmlsZXMgaW4gRklMRVJ7UFJPVklERVMsREVQRU5EU31GTElTVF9wa2cKKyMKKyMgaCkgcGFja2FnZV9kb19zaGxpYnMgLSBMb29rIGF0IHRoZSBzaGFyZWQgbGlicmFyaWVzIGdlbmVyYXRlZCBhbmQgYXV0b3RtYXRpY2FsbHkgYWRkIGFueQorIyAgICBkZXBlbmVkZW5jaWVzIGZvdW5kLiBBbHNvIHN0b3JlcyB0aGUgcGFja2FnZSBuYW1lIHNvIGFueW9uZSBlbHNlIHVzaW5nIHRoaXMgbGlicmFyeQorIyAgICBrbm93cyB3aGljaCBwYWNrYWdlIHRvIGRlcGVuZCBvbi4KKyMKKyMgaSkgcGFja2FnZV9kb19wa2djb25maWcgLSBLZWVwIHRyYWNrIG9mIHdoaWNoIHBhY2thZ2VzIG5lZWQgYW5kIHByb3ZpZGUgd2hpY2ggLnBjIGZpbGVzCisjCisjIGopIHJlYWRfc2hsaWJkZXBzIC0gUmVhZHMgdGhlIHN0b3JlZCBzaGxpYnMgaW5mb3JtYXRpb24gaW50byB0aGUgbWV0YWRhdGEKKyMKKyMgaykgcGFja2FnZV9kZXBjaGFpbnMgLSBBZGRzIGF1dG9tYXRpYyBkZXBlbmRlbmNpZXMgdG8gLWRiZyBhbmQgLWRldiBwYWNrYWdlcworIworIyBsKSBlbWl0X3BrZ2RhdGEgLSBzYXZlcyB0aGUgcGFja2FnaW5nIGRhdGEgaW50byBQS0dEQVRBX0RJUiBmb3IgdXNlIGluIGxhdGVyCisjICAgIHBhY2thZ2luZyBzdGVwcworCitpbmhlcml0IHBhY2thZ2VkYXRhCitpbmhlcml0IHByc2VydgoraW5oZXJpdCBjaHJwYXRoCisKKyMgTmVlZCB0aGUgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoKSBpbiBpbnNhbmUuYmJjbGFzcworaW5oZXJpdCBpbnNhbmUKKworUEtHRCAgICA9ICIke1dPUktESVJ9L3BhY2thZ2UiCitQS0dERVNUID0gIiR7V09SS0RJUn0vcGFja2FnZXMtc3BsaXQiCisKK0xPQ0FMRV9TRUNUSU9OID89ICcnCisKK0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTID0gIiR7QGFsbF9tdWx0aWxpYl90dW5lX3ZhbHVlcyhkLCAnUEFDS0FHRV9BUkNIUycpfSIKKworIyBycG0gaXMgdXNlZCBmb3IgdGhlIHBlci1maWxlIGRlcGVuZGVuY3kgaWRlbnRpZmljYXRpb24KK1BBQ0tBR0VfREVQRU5EUyArPSAicnBtLW5hdGl2ZSIKKworZGVmIGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKHMpOgorICAgICIiIgorICAgIE1ha2Ugc3VyZSBwYWNrYWdlIG5hbWVzIGFyZSBsZWdpdGltYXRlIHN0cmluZ3MKKyAgICAiIiIKKyAgICBpbXBvcnQgcmUKKworICAgIGRlZiBmaXh1dGYobSk6CisgICAgICAgIGNwID0gbS5ncm91cCgxKQorICAgICAgICBpZiBjcDoKKyAgICAgICAgICAgIHJldHVybiAoJ1x1JXMnICUgY3ApLmRlY29kZSgndW5pY29kZV9lc2NhcGUnKS5lbmNvZGUoJ3V0Zi04JykKKworICAgICMgSGFuZGxlIHVuaWNvZGUgY29kZXBvaW50cyBlbmNvZGVkIGFzIDxVMDEyMz4sIGFzIGluIGdsaWJjIGxvY2FsZSBmaWxlcy4KKyAgICBzID0gcmUuc3ViKCc8VShbMC05QS1GYS1mXXsxLDR9KT4nLCBmaXh1dGYsIHMpCisKKyAgICAjIFJlbWFpbmluZyBwYWNrYWdlIG5hbWUgdmFsaWRpdHkgZml4ZXMKKyAgICByZXR1cm4gcy5sb3dlcigpLnJlcGxhY2UoJ18nLCAnLScpLnJlcGxhY2UoJ0AnLCAnKycpLnJlcGxhY2UoJywnLCAnKycpLnJlcGxhY2UoJy8nLCAnLScpCisKK2RlZiBkb19zcGxpdF9wYWNrYWdlcyhkLCByb290LCBmaWxlX3JlZ2V4LCBvdXRwdXRfcGF0dGVybiwgZGVzY3JpcHRpb24sIHBvc3RpbnN0PU5vbmUsIHJlY3Vyc2l2ZT1GYWxzZSwgaG9vaz1Ob25lLCBleHRyYV9kZXBlbmRzPU5vbmUsIGF1eF9maWxlc19wYXR0ZXJuPU5vbmUsIHBvc3RybT1Ob25lLCBhbGxvd19kaXJzPUZhbHNlLCBwcmVwZW5kPUZhbHNlLCBtYXRjaF9wYXRoPUZhbHNlLCBhdXhfZmlsZXNfcGF0dGVybl92ZXJiYXRpbT1Ob25lLCBhbGxvd19saW5rcz1GYWxzZSwgc3VtbWFyeT1Ob25lKToKKyAgICAiIiIKKyAgICBVc2VkIGluIC5iYiBmaWxlcyB0byBzcGxpdCB1cCBkeW5hbWljYWxseSBnZW5lcmF0ZWQgc3VicGFja2FnZXMgb2YgYQorICAgIGdpdmVuIHBhY2thZ2UsIHVzdWFsbHkgcGx1Z2lucyBvciBtb2R1bGVzLgorCisgICAgQXJndW1lbnRzOgorICAgIHJvb3QgICAgICAgICAgIC0tIHRoZSBwYXRoIGluIHdoaWNoIHRvIHNlYXJjaAorICAgIGZpbGVfcmVnZXggICAgIC0tIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBzZWFyY2hlZCBmaWxlcy4gVXNlCisgICAgICAgICAgICAgICAgICAgICAgcGFyZW50aGVzZXMgKCkgdG8gbWFyayB0aGUgcGFydCBvZiB0aGlzIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGRlcml2ZSB0aGUgbW9kdWxlIG5hbWUgKHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgc3Vic3RpdHV0ZWQgd2hlcmUgJXMgaXMgdXNlZCBpbiBvdGhlciBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyBhcyBub3RlZCBiZWxvdykKKyAgICBvdXRwdXRfcGF0dGVybiAtLSBwYXR0ZXJuIHRvIHVzZSBmb3IgdGhlIHBhY2thZ2UgbmFtZXMuIE11c3QgaW5jbHVkZSAlcy4KKyAgICBkZXNjcmlwdGlvbiAgICAtLSBkZXNjcmlwdGlvbiB0byBzZXQgZm9yIGVhY2ggcGFja2FnZS4gTXVzdCBpbmNsdWRlICVzLgorICAgIHBvc3RpbnN0ICAgICAgIC0tIHBvc3RpbnN0YWxsIHNjcmlwdCB0byB1c2UgZm9yIGFsbCBwYWNrYWdlcyAoYXMgYQorICAgICAgICAgICAgICAgICAgICAgIHN0cmluZykKKyAgICByZWN1cnNpdmUgICAgICAtLSBUcnVlIHRvIHBlcmZvcm0gYSByZWN1cnNpdmUgc2VhcmNoIC0gZGVmYXVsdCBGYWxzZQorICAgIGhvb2sgICAgICAgICAgIC0tIGEgaG9vayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIGV2ZXJ5IG1hdGNoLiBUaGUKKyAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgKGluIHRoZSBvcmRlciBsaXN0ZWQpOgorICAgICAgICAgICAgICAgICAgICAgICAgZjogZnVsbCBwYXRoIHRvIHRoZSBmaWxlL2RpcmVjdG9yeSBtYXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgcGtnOiB0aGUgcGFja2FnZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3JlZ2V4OiBhcyBhYm92ZQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm46IGFzIGFib3ZlCisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVuYW1lOiB0aGUgbW9kdWxlIG5hbWUgZGVyaXZlZCB1c2luZyBmaWxlX3JlZ2V4CisgICAgZXh0cmFfZGVwZW5kcyAgLS0gZXh0cmEgcnVudGltZSBkZXBlbmRlbmNpZXMgKFJERVBFTkRTKSB0byBiZSBzZXQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgYWxsIHBhY2thZ2VzLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBOb25lIGNhdXNlcyBhCisgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBvbiB0aGUgbWFpbiBwYWNrYWdlICgke1BOfSkgLSBpZiB5b3UgZG8KKyAgICAgICAgICAgICAgICAgICAgICBub3Qgd2FudCB0aGlzLCBwYXNzICcnIGZvciB0aGlzIHBhcmFtZXRlci4KKyAgICBhdXhfZmlsZXNfcGF0dGVybiAtLSBleHRyYSBpdGVtKHMpIHRvIGJlIGFkZGVkIHRvIEZJTEVTIGZvciBlYWNoCisgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS4gQ2FuIGJlIGEgc2luZ2xlIHN0cmluZyBpdGVtIG9yIGEgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3MgZm9yIG11bHRpcGxlIGl0ZW1zLiAgTXVzdCBpbmNsdWRlICVzLgorICAgIHBvc3RybSAgICAgICAgIC0tIHBvc3RybSBzY3JpcHQgdG8gdXNlIGZvciBhbGwgcGFja2FnZXMgKGFzIGEgc3RyaW5nKQorICAgIGFsbG93X2RpcnMgICAgIC0tIFRydWUgYWxsb3cgZGlyZWN0b3JpZXMgdG8gYmUgbWF0Y2hlZCAtIGRlZmF1bHQgRmFsc2UKKyAgICBwcmVwZW5kICAgICAgICAtLSBpZiBUcnVlLCBwcmVwZW5kIGNyZWF0ZWQgcGFja2FnZXMgdG8gUEFDS0FHRVMgaW5zdGVhZAorICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBkZWZhdWx0IEZhbHNlIHdoaWNoIGFwcGVuZHMgdGhlbQorICAgIG1hdGNoX3BhdGggICAgIC0tIG1hdGNoIGZpbGVfcmVnZXggb24gdGhlIHdob2xlIHJlbGF0aXZlIHBhdGggdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgcm9vdCByYXRoZXIgdGhhbiBqdXN0IHRoZSBmaWxlIG5hbWUKKyAgICBhdXhfZmlsZXNfcGF0dGVybl92ZXJiYXRpbSAtLSBleHRyYSBpdGVtKHMpIHRvIGJlIGFkZGVkIHRvIEZJTEVTIGZvcgorICAgICAgICAgICAgICAgICAgICAgIGVhY2ggcGFja2FnZSwgdXNpbmcgdGhlIGFjdHVhbCBkZXJpdmVkIG1vZHVsZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gY29udmVydGluZyBpdCB0byBzb21ldGhpbmcgbGVnYWwgZm9yIGEKKyAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG5hbWUuIENhbiBiZSBhIHNpbmdsZSBzdHJpbmcgaXRlbSBvciBhIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgICBvZiBzdHJpbmdzIGZvciBtdWx0aXBsZSBpdGVtcy4gTXVzdCBpbmNsdWRlICVzLgorICAgIGFsbG93X2xpbmtzICAgIC0tIFRydWUgdG8gYWxsb3cgc3ltbGlua3MgdG8gYmUgbWF0Y2hlZCAtIGRlZmF1bHQgRmFsc2UKKyAgICBzdW1tYXJ5ICAgICAgICAtLSBTdW1tYXJ5IHRvIHNldCBmb3IgZWFjaCBwYWNrYWdlLiBNdXN0IGluY2x1ZGUgJXM7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHMgdG8gZGVzY3JpcHRpb24gaWYgbm90IHNldC4KKworICAgICIiIgorCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKworICAgICMgSWYgdGhlIHJvb3QgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsIGRvbid0IGVycm9yIG91dCBsYXRlciBidXQgc2lsZW50bHkgZG8KKyAgICAjIG5vIHNwbGl0dGluZy4KKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZHZhciArIHJvb3QpOgorICAgICAgICByZXR1cm4gW10KKworICAgIG1sID0gZC5nZXRWYXIoIk1MUFJFRklYIiwgVHJ1ZSkKKyAgICBpZiBtbDoKKyAgICAgICAgaWYgbm90IG91dHB1dF9wYXR0ZXJuLnN0YXJ0c3dpdGgobWwpOgorICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm4gPSBtbCArIG91dHB1dF9wYXR0ZXJuCisKKyAgICAgICAgbmV3ZGVwcyA9IFtdCisgICAgICAgIGZvciBkZXAgaW4gKGV4dHJhX2RlcGVuZHMgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBkZXAuc3RhcnRzd2l0aChtbCk6CisgICAgICAgICAgICAgICAgbmV3ZGVwcy5hcHBlbmQoZGVwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdkZXBzLmFwcGVuZChtbCArIGRlcCkKKyAgICAgICAgaWYgbmV3ZGVwczoKKyAgICAgICAgICAgIGV4dHJhX2RlcGVuZHMgPSAiICIuam9pbihuZXdkZXBzKQorCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBzcGxpdF9wYWNrYWdlcyA9IFtdCisKKyAgICBpZiBwb3N0aW5zdDoKKyAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nICsgcG9zdGluc3QgKyAnXG4nCisgICAgaWYgcG9zdHJtOgorICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nICsgcG9zdHJtICsgJ1xuJworICAgIGlmIG5vdCByZWN1cnNpdmU6CisgICAgICAgIG9ianMgPSBvcy5saXN0ZGlyKGR2YXIgKyByb290KQorICAgIGVsc2U6CisgICAgICAgIG9ianMgPSBbXQorICAgICAgICBmb3Igd2Fsa3Jvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZHZhciArIHJvb3QpOgorICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgcmVscGF0aCA9IG9zLnBhdGguam9pbih3YWxrcm9vdCwgZmlsZSkucmVwbGFjZShkdmFyICsgcm9vdCArICcvJywgJycsIDEpCisgICAgICAgICAgICAgICAgaWYgcmVscGF0aDoKKyAgICAgICAgICAgICAgICAgICAgb2Jqcy5hcHBlbmQocmVscGF0aCkKKworICAgIGlmIGV4dHJhX2RlcGVuZHMgPT0gTm9uZToKKyAgICAgICAgZXh0cmFfZGVwZW5kcyA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisKKyAgICBpZiBub3Qgc3VtbWFyeToKKyAgICAgICAgc3VtbWFyeSA9IGRlc2NyaXB0aW9uCisKKyAgICBmb3IgbyBpbiBzb3J0ZWQob2Jqcyk6CisgICAgICAgIGltcG9ydCByZSwgc3RhdAorICAgICAgICBpZiBtYXRjaF9wYXRoOgorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKGZpbGVfcmVnZXgsIG8pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtID0gcmUubWF0Y2goZmlsZV9yZWdleCwgb3MucGF0aC5iYXNlbmFtZShvKSkKKworICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4oZHZhciArIHJvb3QsIG8pCisgICAgICAgIG1vZGUgPSBvcy5sc3RhdChmKS5zdF9tb2RlCisgICAgICAgIGlmIG5vdCAoc3RhdC5TX0lTUkVHKG1vZGUpIG9yIChhbGxvd19saW5rcyBhbmQgc3RhdC5TX0lTTE5LKG1vZGUpKSBvciAoYWxsb3dfZGlycyBhbmQgc3RhdC5TX0lTRElSKG1vZGUpKSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBvbiA9IGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKG0uZ3JvdXAoMSkpCisgICAgICAgIHBrZyA9IG91dHB1dF9wYXR0ZXJuICUgb24KKyAgICAgICAgc3BsaXRfcGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgaWYgbm90IHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgIGlmIHByZXBlbmQ6CisgICAgICAgICAgICAgICAgcGFja2FnZXMgPSBbcGtnXSArIHBhY2thZ2VzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhY2thZ2VzLmFwcGVuZChwa2cpCisgICAgICAgIG9sZGZpbGVzID0gZC5nZXRWYXIoJ0ZJTEVTXycgKyBwa2csIFRydWUpCisgICAgICAgIG5ld2ZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgbykKKyAgICAgICAgIyBUaGVzZSBuYW1lcyB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoIGdsb2IoKSBzbyBpZiB0aGUgZmlsZW5hbWUgYWN0dWFsbHkKKyAgICAgICAgIyBjb250YWlucyAqIG9yID8gKHJhcmUsIGJ1dCBwb3NzaWJsZSkgd2UgbmVlZCB0byBoYW5kbGUgdGhhdCBzcGVjaWFsbHkKKyAgICAgICAgbmV3ZmlsZSA9IG5ld2ZpbGUucmVwbGFjZSgnKicsICdbKl0nKQorICAgICAgICBuZXdmaWxlID0gbmV3ZmlsZS5yZXBsYWNlKCc/JywgJ1s/XScpCisgICAgICAgIGlmIG5vdCBvbGRmaWxlczoKKyAgICAgICAgICAgIHRoZV9maWxlcyA9IFtuZXdmaWxlXQorICAgICAgICAgICAgaWYgYXV4X2ZpbGVzX3BhdHRlcm46CisgICAgICAgICAgICAgICAgaWYgdHlwZShhdXhfZmlsZXNfcGF0dGVybikgaXMgbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZwIGluIGF1eF9maWxlc19wYXR0ZXJuOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlX2ZpbGVzLmFwcGVuZChmcCAlIG9uKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRoZV9maWxlcy5hcHBlbmQoYXV4X2ZpbGVzX3BhdHRlcm4gJSBvbikKKyAgICAgICAgICAgIGlmIGF1eF9maWxlc19wYXR0ZXJuX3ZlcmJhdGltOgorICAgICAgICAgICAgICAgIGlmIHR5cGUoYXV4X2ZpbGVzX3BhdHRlcm5fdmVyYmF0aW0pIGlzIGxpc3Q6CisgICAgICAgICAgICAgICAgICAgIGZvciBmcCBpbiBhdXhfZmlsZXNfcGF0dGVybl92ZXJiYXRpbToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZV9maWxlcy5hcHBlbmQoZnAgJSBtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRoZV9maWxlcy5hcHBlbmQoYXV4X2ZpbGVzX3BhdHRlcm5fdmVyYmF0aW0gJSBtLmdyb3VwKDEpKQorICAgICAgICAgICAgZC5zZXRWYXIoJ0ZJTEVTXycgKyBwa2csICIgIi5qb2luKHRoZV9maWxlcykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkLnNldFZhcignRklMRVNfJyArIHBrZywgb2xkZmlsZXMgKyAiICIgKyBuZXdmaWxlKQorICAgICAgICBpZiBleHRyYV9kZXBlbmRzICE9ICcnOgorICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTXycgKyBwa2csICcgJyArIGV4dHJhX2RlcGVuZHMpCisgICAgICAgIGlmIG5vdCBkLmdldFZhcignREVTQ1JJUFRJT05fJyArIHBrZywgVHJ1ZSk6CisgICAgICAgICAgICBkLnNldFZhcignREVTQ1JJUFRJT05fJyArIHBrZywgZGVzY3JpcHRpb24gJSBvbikKKyAgICAgICAgaWYgbm90IGQuZ2V0VmFyKCdTVU1NQVJZXycgKyBwa2csIFRydWUpOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1NVTU1BUllfJyArIHBrZywgc3VtbWFyeSAlIG9uKQorICAgICAgICBpZiBwb3N0aW5zdDoKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJyArIHBrZywgcG9zdGluc3QpCisgICAgICAgIGlmIHBvc3RybToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXycgKyBwa2csIHBvc3RybSkKKyAgICAgICAgaWYgY2FsbGFibGUoaG9vayk6CisgICAgICAgICAgICBob29rKGYsIHBrZywgZmlsZV9yZWdleCwgb3V0cHV0X3BhdHRlcm4sIG0uZ3JvdXAoMSkpCisKKyAgICBkLnNldFZhcignUEFDS0FHRVMnLCAnICcuam9pbihwYWNrYWdlcykpCisgICAgcmV0dXJuIHNwbGl0X3BhY2thZ2VzCisKK1BBQ0tBR0VfREVQRU5EUyArPSAiZmlsZS1uYXRpdmUiCisKK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgIT0gJyc6CisgICAgICAgIGRlcHMgPSAiIgorICAgICAgICBmb3IgZGVwIGluIChkLmdldFZhcignUEFDS0FHRV9ERVBFTkRTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBkZXBzICs9ICIgJXM6ZG9fcG9wdWxhdGVfc3lzcm9vdCIgJSBkZXAKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlJywgJ2RlcGVuZHMnLCBkZXBzKQorCisgICAgICAgICMgc2hsaWJzIHJlcXVpcmVzIGFueSBERVBFTkRTIHRvIGhhdmUgYWxyZWFkeSBwYWNrYWdlZCBmb3IgdGhlICoubGlzdCBmaWxlcworICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2UnLCAnZGVwdGFzaycsICIgZG9fcGFja2FnZWRhdGEiKQorfQorCisjIEdldCBhIGxpc3Qgb2YgZmlsZXMgZnJvbSBmaWxlIHZhcnMgYnkgc2VhcmNoaW5nIGZpbGVzIHVuZGVyIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKyMgVGhlIGxpc3QgY29udGFpbnMgc3ltbGlua3MsIGRpcmVjdG9yaWVzIGFuZCBub3JtYWwgZmlsZXMuCitkZWYgZmlsZXNfZnJvbV9maWxldmFycyhmaWxldmFycyk6CisgICAgaW1wb3J0IG9zLGdsb2IKKyAgICBjcGF0aCA9IG9lLmNhY2hlZHBhdGguQ2FjaGVkUGF0aCgpCisgICAgZmlsZXMgPSBbXQorICAgIGZvciBmIGluIGZpbGV2YXJzOgorICAgICAgICBpZiBvcy5wYXRoLmlzYWJzKGYpOgorICAgICAgICAgICAgZiA9ICcuJyArIGYKKyAgICAgICAgaWYgbm90IGYuc3RhcnRzd2l0aCgiLi8iKToKKyAgICAgICAgICAgIGYgPSAnLi8nICsgZgorICAgICAgICBnbG9iYmVkID0gZ2xvYi5nbG9iKGYpCisgICAgICAgIGlmIGdsb2JiZWQ6CisgICAgICAgICAgICBpZiBbIGYgXSAhPSBnbG9iYmVkOgorICAgICAgICAgICAgICAgIGZpbGVzICs9IGdsb2JiZWQKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmaWxlcy5hcHBlbmQoZikKKworICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICBpZiBub3QgY3BhdGguaXNsaW5rKGYpOgorICAgICAgICAgICAgaWYgY3BhdGguaXNkaXIoZik6CisgICAgICAgICAgICAgICAgbmV3ZmlsZXMgPSBbIG9zLnBhdGguam9pbihmLHgpIGZvciB4IGluIG9zLmxpc3RkaXIoZikgXQorICAgICAgICAgICAgICAgIGlmIG5ld2ZpbGVzOgorICAgICAgICAgICAgICAgICAgICBmaWxlcyArPSBuZXdmaWxlcworCisgICAgcmV0dXJuIGZpbGVzCisKKyMgQ2FsbGVkIGluIHBhY2thZ2VfPHJwbSxpcGssZGViPi5iYmNsYXNzIHRvIGdldCB0aGUgY29ycmVjdCBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMKK2RlZiBnZXRfY29uZmZpbGVzKHBrZywgZCk6CisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICByb290ID0gb3MucGF0aC5qb2luKHBrZ2Rlc3QsIHBrZykKKyAgICBjd2QgPSBvcy5nZXRjd2QoKQorICAgIG9zLmNoZGlyKHJvb3QpCisKKyAgICBjb25mZmlsZXMgPSBkLmdldFZhcignQ09ORkZJTEVTXyVzJyAlIHBrZywgVHJ1ZSk7CisgICAgaWYgY29uZmZpbGVzID09IE5vbmU6CisgICAgICAgIGNvbmZmaWxlcyA9IGQuZ2V0VmFyKCdDT05GRklMRVMnLCBUcnVlKQorICAgIGlmIGNvbmZmaWxlcyA9PSBOb25lOgorICAgICAgICBjb25mZmlsZXMgPSAiIgorICAgIGNvbmZmaWxlcyA9IGNvbmZmaWxlcy5zcGxpdCgpCisgICAgY29uZl9vcmlnX2xpc3QgPSBmaWxlc19mcm9tX2ZpbGV2YXJzKGNvbmZmaWxlcykKKworICAgICMgUmVtb3ZlIGxpbmtzIGFuZCBkaXJlY3RvcmllcyBmcm9tIGNvbmZfb3JpZ19saXN0IHRvIGdldCBjb25mX2xpc3Qgd2hpY2ggb25seSBjb250YWlucyBub3JtYWwgZmlsZXMKKyAgICBjb25mX2xpc3QgPSBbXQorICAgIGZvciBmIGluIGNvbmZfb3JpZ19saXN0OgorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGYpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZik6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZik6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBjb25mX2xpc3QuYXBwZW5kKGYpCisKKyAgICAjIFJlbW92ZSB0aGUgbGVhZGluZyAnLi8nCisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGNvbmZfbGlzdCkpOgorICAgICAgICBjb25mX2xpc3RbaV0gPSBjb25mX2xpc3RbaV1bMTpdCisKKyAgICBvcy5jaGRpcihjd2QpCisgICAgcmV0dXJuIGNvbmZfbGlzdAorCitkZWYgc3BsaXRkZWJ1Z2luZm8oZmlsZSwgZGVidWdmaWxlLCBkZWJ1Z3NyY2Rpciwgc291cmNlZmlsZSwgZCk6CisgICAgIyBGdW5jdGlvbiB0byBzcGxpdCBhIHNpbmdsZSBmaWxlIGludG8gdHdvIGNvbXBvbmVudHMsIG9uZSBpcyB0aGUgc3RyaXBwZWQKKyAgICAjIHRhcmdldCBzeXN0ZW0gYmluYXJ5LCB0aGUgb3RoZXIgY29udGFpbnMgYW55IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gVGhlCisgICAgIyB0d28gZmlsZXMgYXJlIGxpbmtlZCB0byByZWZlcmVuY2UgZWFjaCBvdGhlci4KKyAgICAjCisgICAgIyBzb3VyY2VmaWxlIGlzIGFsc28gZ2VuZXJhdGVkIGNvbnRhaW5pbmcgYSBsaXN0IG9mIGRlYnVnc291cmNlcworCisgICAgaW1wb3J0IHN0YXQKKworICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgb2JqY29weSA9IGQuZ2V0VmFyKCJPQkpDT1BZIiwgVHJ1ZSkKKyAgICBkZWJ1Z2VkaXQgPSBkLmV4cGFuZCgiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbS9iaW4vZGVidWdlZGl0IikKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoIldPUktESVIiLCBUcnVlKQorICAgIHdvcmtwYXJlbnRkaXIgPSBkLmdldFZhcigiREVCVUdTUkNfT1ZFUlJJREVfUEFUSCIsIFRydWUpIG9yIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUod29ya2RpcikpCisKKyAgICAjIFdlIGlnbm9yZSBrZXJuZWwgbW9kdWxlcywgd2UgZG9uJ3QgZ2VuZXJhdGUgZGVidWcgaW5mbyBmaWxlcy4KKyAgICBpZiBmaWxlLmZpbmQoIi9saWIvbW9kdWxlcy8iKSAhPSAtMSBhbmQgZmlsZS5lbmRzd2l0aCgiLmtvIik6CisgICAgICAgIHJldHVybiAxCisKKyAgICBuZXdtb2RlID0gTm9uZQorICAgIGlmIG5vdCBvcy5hY2Nlc3MoZmlsZSwgb3MuV19PSykgb3Igb3MuYWNjZXNzKGZpbGUsIG9zLlJfT0spOgorICAgICAgICBvcmlnbW9kZSA9IG9zLnN0YXQoZmlsZSlbc3RhdC5TVF9NT0RFXQorICAgICAgICBuZXdtb2RlID0gb3JpZ21vZGUgfCBzdGF0LlNfSVdSSVRFIHwgc3RhdC5TX0lSRUFECisgICAgICAgIG9zLmNobW9kKGZpbGUsIG5ld21vZGUpCisKKyAgICAjIFdlIG5lZWQgdG8gZXh0cmFjdCB0aGUgZGVidWcgc3JjIGluZm9ybWF0aW9uIGhlcmUuLi4KKyAgICBpZiBkZWJ1Z3NyY2RpcjoKKyAgICAgICAgY21kID0gIiclcycgLWIgJyVzJyAtZCAnJXMnIC1pIC1sICclcycgJyVzJyIgJSAoZGVidWdlZGl0LCB3b3JrcGFyZW50ZGlyLCBkZWJ1Z3NyY2Rpciwgc291cmNlZmlsZSwgZmlsZSkKKyAgICAgICAgKHJldHZhbCwgb3V0cHV0KSA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgICAgIGlmIHJldHZhbDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJkZWJ1Z2VkaXQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGRlYnVnZmlsZSkpCisKKyAgICBjbWQgPSAiJyVzJyAtLW9ubHkta2VlcC1kZWJ1ZyAnJXMnICclcyciICUgKG9iamNvcHksIGZpbGUsIGRlYnVnZmlsZSkKKyAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICBpZiByZXR2YWw6CisgICAgICAgIGJiLmZhdGFsKCJvYmpjb3B5IGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlcyAoY21kIHdhcyAlcyklcyIgJSAocmV0dmFsLCBjbWQsICI6XG4lcyIgJSBvdXRwdXQgaWYgb3V0cHV0IGVsc2UgIiIpKQorCisgICAgIyBTZXQgdGhlIGRlYnVnbGluayB0byBoYXZlIHRoZSB2aWV3IG9mIHRoZSBmaWxlIHBhdGggb24gdGhlIHRhcmdldAorICAgIGNtZCA9ICInJXMnIC0tYWRkLWdudS1kZWJ1Z2xpbms9JyVzJyAnJXMnIiAlIChvYmpjb3B5LCBkZWJ1Z2ZpbGUsIGZpbGUpCisgICAgKHJldHZhbCwgb3V0cHV0KSA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgaWYgcmV0dmFsOgorICAgICAgICBiYi5mYXRhbCgib2JqY29weSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJXMgKGNtZCB3YXMgJXMpJXMiICUgKHJldHZhbCwgY21kLCAiOlxuJXMiICUgb3V0cHV0IGlmIG91dHB1dCBlbHNlICIiKSkKKworICAgIGlmIG5ld21vZGU6CisgICAgICAgIG9zLmNobW9kKGZpbGUsIG9yaWdtb2RlKQorCisgICAgcmV0dXJuIDAKKworZGVmIGNvcHlkZWJ1Z3NvdXJjZXMoZGVidWdzcmNkaXIsIGQpOgorICAgICMgVGhlIGRlYnVnIHNyYyBpbmZvcm1hdGlvbiB3cml0dGVuIG91dCB0byBzb3VyY2VmaWxlIGlzIGZ1cnRoZXIgcHJvY2VjZXNzZWQKKyAgICAjIGFuZCBjb3BpZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGhlcmUuCisKKyAgICBpbXBvcnQgc3RhdAorCisgICAgc291cmNlZmlsZSA9IGQuZXhwYW5kKCIke1dPUktESVJ9L2RlYnVnc291cmNlcy5saXN0IikKKyAgICBpZiBkZWJ1Z3NyY2RpciBhbmQgb3MucGF0aC5pc2ZpbGUoc291cmNlZmlsZSk6CisgICAgICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgICAgIHN0cmlwID0gZC5nZXRWYXIoIlNUUklQIiwgVHJ1ZSkKKyAgICAgICAgb2JqY29weSA9IGQuZ2V0VmFyKCJPQkpDT1BZIiwgVHJ1ZSkKKyAgICAgICAgZGVidWdlZGl0ID0gZC5leHBhbmQoIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ycG0vYmluL2RlYnVnZWRpdCIpCisgICAgICAgIHdvcmtkaXIgPSBkLmdldFZhcigiV09SS0RJUiIsIFRydWUpCisgICAgICAgIHdvcmtwYXJlbnRkaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHdvcmtkaXIpKQorICAgICAgICB3b3JrYmFzZWRpciA9IG9zLnBhdGguYmFzZW5hbWUob3MucGF0aC5kaXJuYW1lKHdvcmtkaXIpKSArICIvIiArIG9zLnBhdGguYmFzZW5hbWUod29ya2RpcikKKworICAgICAgICBub3N1Y2hkaXIgPSBbXQorICAgICAgICBiYXNlcGF0aCA9IGR2YXIKKyAgICAgICAgZm9yIHAgaW4gZGVidWdzcmNkaXIuc3BsaXQoIi8iKToKKyAgICAgICAgICAgIGJhc2VwYXRoID0gYmFzZXBhdGggKyAiLyIgKyBwCisgICAgICAgICAgICBpZiBub3QgY3BhdGguZXhpc3RzKGJhc2VwYXRoKToKKyAgICAgICAgICAgICAgICBub3N1Y2hkaXIuYXBwZW5kKGJhc2VwYXRoKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoYmFzZXBhdGgpCisgICAgICAgIGNwYXRoLnVwZGF0ZWNhY2hlKGJhc2VwYXRoKQorCisgICAgICAgIHByb2Nlc3NkZWJ1Z3NyYyA9ICAiTENfQUxMPUMgOyBzb3J0IC16IC11ICclcycgfCBlZ3JlcCAtdiAteiAnKDxpbnRlcm5hbD58PGJ1aWx0LWluPikkJyB8ICIKKyAgICAgICAgIyBXZSBuZWVkIHRvIGlnbm9yZSBmaWxlcyB0aGF0IGFyZSBub3QgYWN0dWFsbHkgb3VycworICAgICAgICAjIHdlIGRvIHRoaXMgYnkgb25seSBwYXlpbmcgYXR0ZW50aW9uIHRvIGl0ZW1zIGZyb20gdGhpcyBwYWNrYWdlCisgICAgICAgIHByb2Nlc3NkZWJ1Z3NyYyArPSAiZmdyZXAgLXp3ICclcycgfCAiCisgICAgICAgIHByb2Nlc3NkZWJ1Z3NyYyArPSAiKGNkICclcycgOyBjcGlvIC1wZDBtbEwgLS1uby1wcmVzZXJ2ZS1vd25lciAnJXMlcycgMj4vZGV2L251bGwpIgorCisgICAgICAgIGNtZCA9IHByb2Nlc3NkZWJ1Z3NyYyAlIChzb3VyY2VmaWxlLCB3b3JrYmFzZWRpciwgd29ya3BhcmVudGRpciwgZHZhciwgZGVidWdzcmNkaXIpCisgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICAjIENhbiAiZmFpbCIgaWYgaW50ZXJuYWwgaGVhZGVycy90cmFuc2llbnQgc291cmNlcyBhcmUgYXR0ZW1wdGVkCisgICAgICAgICNpZiByZXR2YWw6CisgICAgICAgICMgICAgYmIuZmF0YWwoImRlYnVnIHNvdXJjZSBjb3B5IGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlcyAoY21kIHdhcyAlcykiICUgKHJldHZhbCwgY21kKSkKKworICAgICAgICAjIGNwaW8gc2VlbXMgdG8gaGF2ZSBhIGJ1ZyB3aXRoIC1sTCB0b2dldGhlciBhbmQgc3ltYm9saWMgbGlua3MgYXJlIGp1c3QgY29waWVkLCBub3QgZGVyZWZlcmVuY2VkLgorICAgICAgICAjIFdvcmsgYXJvdW5kIHRoaXMgYnkgbWFudWFsbHkgZmluZGluZyBhbmQgY29weWluZyBhbnkgc3ltYm9saWMgbGlua3MgdGhhdCBtYWRlIGl0IHRocm91Z2guCisgICAgICAgIGNtZCA9ICJmaW5kICVzJXMgLXR5cGUgbCAtcHJpbnQwIC1kZWxldGUgfCBzZWQgcyMlcyVzLyMjZyB8IChjZCAnJXMnIDsgY3BpbyAtcGQwbUwgLS1uby1wcmVzZXJ2ZS1vd25lciAnJXMlcycgMj4vZGV2L251bGwpIiAlIChkdmFyLCBkZWJ1Z3NyY2RpciwgZHZhciwgZGVidWdzcmNkaXIsIHdvcmtwYXJlbnRkaXIsIGR2YXIsIGRlYnVnc3JjZGlyKQorICAgICAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICAgICAgaWYgcmV0dmFsOgorICAgICAgICAgICAgYmIuZmF0YWwoImRlYnVnc3JjIHN5bWxpbmsgZml4dXAgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzIChjbWQgd2FzICVzKSIgJSAocmV0dmFsLCBjbWQpKQorCisgICAgICAgICMgVGhlIGNvcHkgYnkgY3BpbyBtYXkgaGF2ZSByZXN1bHRlZCBpbiBzb21lIGVtcHR5IGRpcmVjdG9yaWVzISAgUmVtb3ZlIHRoZXNlCisgICAgICAgIGNtZCA9ICJmaW5kICVzJXMgLWVtcHR5IC10eXBlIGQgLWRlbGV0ZSIgJSAoZHZhciwgZGVidWdzcmNkaXIpCisgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICBiYi5mYXRhbCgiZW1wdHkgZGlyZWN0b3J5IHJlbW92YWwgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisKKyAgICAgICAgIyBBbHNvIHJlbW92ZSBkZWJ1Z3NyY2RpciBpZiBpdHMgZW1wdHkKKyAgICAgICAgZm9yIHAgaW4gbm9zdWNoZGlyWzo6LTFdOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocCkgYW5kIG5vdCBvcy5saXN0ZGlyKHApOgorICAgICAgICAgICAgICAgIG9zLnJtZGlyKHApCisKKyMKKyMgUGFja2FnZSBkYXRhIGhhbmRsaW5nIHJvdXRpbmVzCisjCisKK2RlZiBnZXRfcGFja2FnZV9tYXBwaW5nIChwa2csIGJhc2Vwa2csIGQpOgorICAgIGltcG9ydCBvZS5wYWNrYWdlZGF0YQorCisgICAgZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfc3VicGtnZGF0YShwa2csIGQpCisgICAga2V5ID0gIlBLR18lcyIgJSBwa2cKKworICAgIGlmIGtleSBpbiBkYXRhOgorICAgICAgICAjIEhhdmUgdG8gYXZvaWQgdW5kb2luZyB0aGUgd3JpdGVfZXh0cmFfcGtncyhnbG9iYWxfdmFyaWFudHMuLi4pCisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FsbGFyY2gnLCBkKSBhbmQgZGF0YVtrZXldID09IGJhc2Vwa2c6CisgICAgICAgICAgICByZXR1cm4gcGtnCisgICAgICAgIHJldHVybiBkYXRhW2tleV0KKworICAgIHJldHVybiBwa2cKKworZGVmIGdldF9wYWNrYWdlX2FkZGl0aW9uYWxfbWV0YWRhdGEgKHBrZ190eXBlLCBkKToKKyAgICBiYXNlX2tleSA9ICJQQUNLQUdFX0FERF9NRVRBREFUQSIKKyAgICBmb3Iga2V5IGluICgiJXNfJXMiICUgKGJhc2Vfa2V5LCBwa2dfdHlwZS51cHBlcigpKSwgYmFzZV9rZXkpOgorICAgICAgICBpZiBkLmdldFZhcihrZXksIEZhbHNlKSBpcyBOb25lOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZC5zZXRWYXJGbGFnKGtleSwgInR5cGUiLCAibGlzdCIpCisgICAgICAgIGlmIGQuZ2V0VmFyRmxhZyhrZXksICJzZXBhcmF0b3IiKSBpcyBOb25lOgorICAgICAgICAgICAgZC5zZXRWYXJGbGFnKGtleSwgInNlcGFyYXRvciIsICJcXG4iKQorICAgICAgICBtZXRhZGF0YV9maWVsZHMgPSBbZmllbGQuc3RyaXAoKSBmb3IgZmllbGQgaW4gb2UuZGF0YS50eXBlZF92YWx1ZShrZXksIGQpXQorICAgICAgICByZXR1cm4gIlxuIi5qb2luKG1ldGFkYXRhX2ZpZWxkcykuc3RyaXAoKQorCitkZWYgcnVudGltZV9tYXBwaW5nX3JlbmFtZSAodmFybmFtZSwgcGtnLCBkKToKKyAgICAjYmIubm90ZSgiJXMgYmVmb3JlOiAlcyIgJSAodmFybmFtZSwgZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkpKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygncGFja2FnZWdyb3VwJywgZCk6CisgICAgICAgIHJldHVybgorCisgICAgbmV3X2RlcGVuZHMgPSB7fQorICAgIGRlcHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkgb3IgIiIpCisgICAgZm9yIGRlcGVuZCBpbiBkZXBzOgorICAgICAgICBuZXdfZGVwZW5kID0gZ2V0X3BhY2thZ2VfbWFwcGluZyhkZXBlbmQsIHBrZywgZCkKKyAgICAgICAgbmV3X2RlcGVuZHNbbmV3X2RlcGVuZF0gPSBkZXBzW2RlcGVuZF0KKworICAgIGQuc2V0VmFyKHZhcm5hbWUsIGJiLnV0aWxzLmpvaW5fZGVwcyhuZXdfZGVwZW5kcywgY29tbWFzZXA9RmFsc2UpKQorCisgICAgI2JiLm5vdGUoIiVzIGFmdGVyOiAlcyIgJSAodmFybmFtZSwgZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkpKQorCisjCisjIFBhY2thZ2UgZnVuY3Rpb25zIHN1aXRhYmxlIGZvciBpbmNsdXNpb24gaW4gUEFDS0FHRUZVTkNTCisjCisKK3B5dGhvbiBwYWNrYWdlX2dldF9hdXRvX3ByKCkgeworICAgIGltcG9ydCBvZS5wcnNlcnZpY2UKKyAgICBpbXBvcnQgcmUKKworICAgICMgU3VwcG9ydCBwZXIgcmVjaXBlIFBSU0VSVl9IT1NUCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGhvc3QgPSBkLmdldFZhcigiUFJTRVJWX0hPU1RfIiArIHBuLCBUcnVlKQorICAgIGlmIG5vdCAoaG9zdCBpcyBOb25lKToKKyAgICAgICAgZC5zZXRWYXIoIlBSU0VSVl9IT1NUIiwgaG9zdCkKKworICAgIHBrZ3YgPSBkLmdldFZhcigiUEtHViIsIFRydWUpCisKKyAgICAjIFBSIFNlcnZlciBub3QgYWN0aXZlLCBoYW5kbGUgQVVUT0lOQworICAgIGlmIG5vdCBkLmdldFZhcignUFJTRVJWX0hPU1QnLCBUcnVlKToKKyAgICAgICAgaWYgJ0FVVE9JTkMnIGluIHBrZ3Y6CisgICAgICAgICAgICBkLnNldFZhcigiUEtHViIsIHBrZ3YucmVwbGFjZSgiQVVUT0lOQyIsICIwIikpCisgICAgICAgIHJldHVybgorCisgICAgYXV0b19wciA9IE5vbmUKKyAgICBwdiA9IGQuZ2V0VmFyKCJQViIsIFRydWUpCisgICAgdmVyc2lvbiA9IGQuZ2V0VmFyKCJQUkFVVE9JTlgiLCBUcnVlKQorICAgIHBrZ2FyY2ggPSBkLmdldFZhcigiUEFDS0FHRV9BUkNIIiwgVHJ1ZSkKKyAgICBjaGVja3N1bSA9IGQuZ2V0VmFyKCJCQl9UQVNLSEFTSCIsIFRydWUpCisKKyAgICBpZiBkLmdldFZhcignUFJTRVJWX0xPQ0tET1dOJywgVHJ1ZSk6CisgICAgICAgIGF1dG9fcHIgPSBkLmdldFZhcignUFJBVVRPXycgKyB2ZXJzaW9uICsgJ18nICsgcGtnYXJjaCwgVHJ1ZSkgb3IgZC5nZXRWYXIoJ1BSQVVUT18nICsgdmVyc2lvbiwgVHJ1ZSkgb3IgTm9uZQorICAgICAgICBpZiBhdXRvX3ByIGlzIE5vbmU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ2FuIE5PVCBnZXQgUFJBVVRPIGZyb20gbG9ja2Rvd24gZXhwb3J0ZWQgZmlsZSIpCisgICAgICAgIGQuc2V0VmFyKCdQUkFVVE8nLHN0cihhdXRvX3ByKSkKKyAgICAgICAgcmV0dXJuCisKKyAgICB0cnk6CisgICAgICAgIGNvbm4gPSBkLmdldFZhcigiX19QUlNFUlZfQ09OTiIsIFRydWUpCisgICAgICAgIGlmIGNvbm4gaXMgTm9uZToKKyAgICAgICAgICAgIGNvbm4gPSBvZS5wcnNlcnZpY2UucHJzZXJ2X21ha2VfY29ubihkKQorICAgICAgICBpZiBjb25uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgIkFVVE9JTkMiIGluIHBrZ3Y6CisgICAgICAgICAgICAgICAgc3JjcHYgPSBiYi5mZXRjaDIuZ2V0X3NyY3JldihkKQorICAgICAgICAgICAgICAgIGJhc2VfdmVyID0gIkFVVE9JTkMtJXMiICUgdmVyc2lvbls6dmVyc2lvbi5maW5kKHNyY3B2KV0KKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvbm4uZ2V0UFIoYmFzZV92ZXIsIHBrZ2FyY2gsIHNyY3B2KQorICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJQS0dWIiwgcGtndi5yZXBsYWNlKCJBVVRPSU5DIiwgc3RyKHZhbHVlKSkpCisKKyAgICAgICAgICAgIGF1dG9fcHIgPSBjb25uLmdldFBSKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgYmIuZmF0YWwoIkNhbiBOT1QgZ2V0IFBSQVVUTywgZXhjZXB0aW9uICVzIiAlICBzdHIoZSkpCisgICAgaWYgYXV0b19wciBpcyBOb25lOgorICAgICAgICBiYi5mYXRhbCgiQ2FuIE5PVCBnZXQgUFJBVVRPIGZyb20gcmVtb3RlIFBSIHNlcnZpY2UiKQorICAgIGQuc2V0VmFyKCdQUkFVVE8nLHN0cihhdXRvX3ByKSkKK30KKworTE9DQUxFQkFTRVBOID8/PSAiJHtQTn0iCisKK3B5dGhvbiBwYWNrYWdlX2RvX3NwbGl0X2xvY2FsZXMoKSB7CisgICAgaWYgKGQuZ2V0VmFyKCdQQUNLQUdFX05PX0xPQ0FMRScsIFRydWUpID09ICcxJyk6CisgICAgICAgIGJiLmRlYnVnKDEsICJwYWNrYWdlIHJlcXVlc3RlZCBub3Qgc3BsaXR0aW5nIGxvY2FsZXMiKQorICAgICAgICByZXR1cm4KKworICAgIHBhY2thZ2VzID0gKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICBkYXRhZGlyID0gZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKQorICAgIGlmIG5vdCBkYXRhZGlyOgorICAgICAgICBiYi5ub3RlKCJkYXRhZGlyIG5vdCBkZWZpbmVkIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ0xPQ0FMRUJBU0VQTicsIFRydWUpCisKKyAgICBpZiBwbiArICctbG9jYWxlJyBpbiBwYWNrYWdlczoKKyAgICAgICAgcGFja2FnZXMucmVtb3ZlKHBuICsgJy1sb2NhbGUnKQorCisgICAgbG9jYWxlZGlyID0gb3MucGF0aC5qb2luKGR2YXIgKyBkYXRhZGlyLCAnbG9jYWxlJykKKworICAgIGlmIG5vdCBjcGF0aC5pc2Rpcihsb2NhbGVkaXIpOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gbG9jYWxlIGZpbGVzIGluIHRoaXMgcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgbG9jYWxlcyA9IG9zLmxpc3RkaXIobG9jYWxlZGlyKQorCisgICAgc3VtbWFyeSA9IGQuZ2V0VmFyKCdTVU1NQVJZJywgVHJ1ZSkgb3IgcG4KKyAgICBkZXNjcmlwdGlvbiA9IGQuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpIG9yICIiCisgICAgbG9jYWxlX3NlY3Rpb24gPSBkLmdldFZhcignTE9DQUxFX1NFQ1RJT04nLCBUcnVlKQorICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgIiIKKyAgICBmb3IgbCBpbiBzb3J0ZWQobG9jYWxlcyk6CisgICAgICAgIGxuID0gbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobCkKKyAgICAgICAgcGtnID0gcG4gKyAnLWxvY2FsZS0nICsgbG4KKyAgICAgICAgcGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgZC5zZXRWYXIoJ0ZJTEVTXycgKyBwa2csIG9zLnBhdGguam9pbihkYXRhZGlyLCAnbG9jYWxlJywgbCkpCisgICAgICAgIGQuc2V0VmFyKCdSUkVDT01NRU5EU18nICsgcGtnLCAnJXN2aXJ0dWFsLWxvY2FsZS0lcycgJSAobWxwcmVmaXgsIGxuKSkKKyAgICAgICAgZC5zZXRWYXIoJ1JQUk9WSURFU18nICsgcGtnLCAnJXMtbG9jYWxlICVzJXMtdHJhbnNsYXRpb24nICUgKHBuLCBtbHByZWZpeCwgbG4pKQorICAgICAgICBkLnNldFZhcignU1VNTUFSWV8nICsgcGtnLCAnJXMgLSAlcyB0cmFuc2xhdGlvbnMnICUgKHN1bW1hcnksIGwpKQorICAgICAgICBkLnNldFZhcignREVTQ1JJUFRJT05fJyArIHBrZywgJyVzICBUaGlzIHBhY2thZ2UgY29udGFpbnMgbGFuZ3VhZ2UgdHJhbnNsYXRpb24gZmlsZXMgZm9yIHRoZSAlcyBsb2NhbGUuJyAlIChkZXNjcmlwdGlvbiwgbCkpCisgICAgICAgIGlmIGxvY2FsZV9zZWN0aW9uOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1NFQ1RJT05fJyArIHBrZywgbG9jYWxlX3NlY3Rpb24pCisKKyAgICBkLnNldFZhcignUEFDS0FHRVMnLCAnICcuam9pbihwYWNrYWdlcykpCisKKyAgICAjIERpc2FibGVkIGJ5IFJQIDE4LzA2LzA3CisgICAgIyBXaWxkY2FyZHMgYXJlbid0IHN1cHBvcnRlZCBpbiBkZWJpYW4KKyAgICAjIFRoZXkgYnJlYWsgd2l0aCBpcGtnIHNpbmNlIGdsaWJjLWxvY2FsZSogd2lsbCBtZWFuIHRoYXQKKyAgICAjIGdsaWJjLWxvY2FsZWRhdGEtdHJhbnNsaXQqIHdvbid0IGluc3RhbGwgYXMgYSBkZXBlbmRlbmN5CisgICAgIyBmb3Igc29tZSBvdGhlciBwYWNrYWdlIHdoaWNoIGJyZWFrcyBtZXRhLXRvb2xjaGFpbgorICAgICMgUHJvYmFibHkgYnJlYWtzIHNpbmNlIHZpcnR1YWwtbG9jYWxlLSBpc24ndCBwcm92aWRlZCBhbnl3aGVyZQorICAgICNyZGVwID0gKGQuZ2V0VmFyKCdSREVQRU5EU18lcycgJSBwbiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAjcmRlcC5hcHBlbmQoJyVzLWxvY2FsZSonICUgcG4pCisgICAgI2Quc2V0VmFyKCdSREVQRU5EU18lcycgJSBwbiwgJyAnLmpvaW4ocmRlcCkpCit9CisKK3B5dGhvbiBwZXJmb3JtX3BhY2thZ2Vjb3B5ICgpIHsKKyAgICBkZXN0ID0gZC5nZXRWYXIoJ0QnLCBUcnVlKQorICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisKKyAgICAjIFN0YXJ0IGJ5IHBhY2thZ2UgcG9wdWxhdGlvbiBieSB0YWtpbmcgYSBjb3B5IG9mIHRoZSBpbnN0YWxsZWQKKyAgICAjIGZpbGVzIHRvIG9wZXJhdGUgb24KKyAgICAjIFByZXNlcnZlIHNwYXJzZSBmaWxlcyBhbmQgaGFyZCBsaW5rcworICAgIGNtZCA9ICd0YXIgLWNmIC0gLUMgJXMgLXAgLiB8IHRhciAteGYgLSAtQyAlcycgJSAoZGVzdCwgZHZhcikKKyAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICBpZiByZXR2YWw6CisgICAgICAgIGJiLmZhdGFsKCJmaWxlIGNvcHkgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisKKyAgICAjIHJlcGxhY2UgUlBBVEhzIGZvciB0aGUgbmF0aXZlc2RrIGJpbmFyaWVzLCB0byBtYWtlIHRoZW0gcmVsb2NhdGFibGUKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGQpOgorICAgICAgICBycGF0aF9yZXBsYWNlIChkdmFyLCBkKQorfQorcGVyZm9ybV9wYWNrYWdlY29weVtjbGVhbmRpcnNdID0gIiR7UEtHRH0iCitwZXJmb3JtX3BhY2thZ2Vjb3B5W2RpcnNdID0gIiR7UEtHRH0iCisKKyMgV2UgZ2VuZXJhdGUgYSBtYXN0ZXIgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBwcm9jZXNzLCB3ZSBzdGFydCBieQorIyBzZWVkaW5nIHRoaXMgbGlzdCB3aXRoIHJlYXNvbmFibGUgZGVmYXVsdHMsIHRoZW4gbG9hZCBmcm9tCisjIHRoZSBmcy1wZXJtcy50eHQgZmlsZXMKK3B5dGhvbiBmaXh1cF9wZXJtcyAoKSB7CisgICAgaW1wb3J0IHB3ZCwgZ3JwCisKKyAgICAjIGluaXQgdXNpbmcgYSBzdHJpbmcgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMgYSBsaW5lIGFzIGRvY3VtZW50ZWQgaW4KKyAgICAjIHRoZSBmcy1wZXJtcy50eHQgZmlsZQorICAgICMgPHBhdGg+IDxtb2RlPiA8dWlkPiA8Z2lkPiA8d2Fsaz4gPGZtb2RlPiA8ZnVpZD4gPGZnaWQ+CisgICAgIyA8cGF0aD4gbGluayA8bGluayB0YXJnZXQ+CisgICAgIworICAgICMgX19zdHJfXyBjYW4gYmUgdXNlZCB0byBwcmludCBvdXQgYW4gZW50cnkgaW4gdGhlIGlucHV0IGZvcm1hdAorICAgICMKKyAgICAjIGlmIGZzX3Blcm1zX2VudHJ5LnBhdGggaXMgTm9uZToKKyAgICAjICAgIGFuIGVycm9yIG9jY3VyZWQKKyAgICAjIGlmIGZzX3Blcm1zX2VudHJ5LmxpbmssIHlvdSBjYW4gcmV0cmlldmU6CisgICAgIyAgICBmc19wZXJtc19lbnRyeS5wYXRoID0gcGF0aAorICAgICMgICAgZnNfcGVybXNfZW50cnkubGluayA9IHRhcmdldCBvZiBsaW5rCisgICAgIyBpZiBub3QgZnNfcGVybXNfZW50cnkubGluaywgeW91IGNhbiByZXRyaWV2ZToKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5LnBhdGggPSBwYXRoCisgICAgIyAgICBmc19wZXJtc19lbnRyeS5tb2RlID0gZXhwZWN0ZWQgZGlyIG1vZGUgb3IgTm9uZQorICAgICMgICAgZnNfcGVybXNfZW50cnkudWlkID0gZXhwZWN0ZWQgdWlkIG9yIC0xCisgICAgIyAgICBmc19wZXJtc19lbnRyeS5naWQgPSBleHBlY3RlZCBnaWQgb3IgLTEKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5LndhbGsgPSAndHJ1ZScgb3Igc29tZXRoaW5nIGVsc2UKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5LmZtb2RlID0gZXhwZWN0ZWQgZmlsZSBtb2RlIG9yIE5vbmUKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5LmZ1aWQgPSBleHBlY3RlZCBmaWxlIHVpZCBvciAtMQorICAgICMgICAgZnNfcGVybXNfZW50cnlfZmdpZCA9IGV4cGVjdGVkIGZpbGUgZ2lkIG9yIC0xCisgICAgY2xhc3MgZnNfcGVybXNfZW50cnkoKToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmUpOgorICAgICAgICAgICAgbHNwbGl0ID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICBpZiBsZW4obHNwbGl0KSA9PSAzIGFuZCBsc3BsaXRbMV0ubG93ZXIoKSA9PSAibGluayI6CisgICAgICAgICAgICAgICAgc2VsZi5fc2V0bGluayhsc3BsaXRbMF0sIGxzcGxpdFsyXSkKKyAgICAgICAgICAgIGVsaWYgbGVuKGxzcGxpdCkgPT0gODoKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXRkaXIobHNwbGl0WzBdLCBsc3BsaXRbMV0sIGxzcGxpdFsyXSwgbHNwbGl0WzNdLCBsc3BsaXRbNF0sIGxzcGxpdFs1XSwgbHNwbGl0WzZdLCBsc3BsaXRbN10pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZyA9ICJGaXh1cCBQZXJtczogaW52YWxpZCBjb25maWcgbGluZSAlcyIgJSBsaW5lCisgICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBlcm0tY29uZmlnIiwgbXNnLCBkKQorICAgICAgICAgICAgICAgIHNlbGYucGF0aCA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLmxpbmsgPSBOb25lCisKKyAgICAgICAgZGVmIF9zZXRkaXIoc2VsZiwgcGF0aCwgbW9kZSwgdWlkLCBnaWQsIHdhbGssIGZtb2RlLCBmdWlkLCBmZ2lkKToKKyAgICAgICAgICAgIHNlbGYucGF0aCA9IG9zLnBhdGgubm9ybXBhdGgocGF0aCkKKyAgICAgICAgICAgIHNlbGYubGluayA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYubW9kZSA9IHNlbGYuX3Byb2Ntb2RlKG1vZGUpCisgICAgICAgICAgICBzZWxmLnVpZCAgPSBzZWxmLl9wcm9jdWlkKHVpZCkKKyAgICAgICAgICAgIHNlbGYuZ2lkICA9IHNlbGYuX3Byb2NnaWQoZ2lkKQorICAgICAgICAgICAgc2VsZi53YWxrID0gd2Fsay5sb3dlcigpCisgICAgICAgICAgICBzZWxmLmZtb2RlID0gc2VsZi5fcHJvY21vZGUoZm1vZGUpCisgICAgICAgICAgICBzZWxmLmZ1aWQgPSBzZWxmLl9wcm9jdWlkKGZ1aWQpCisgICAgICAgICAgICBzZWxmLmZnaWQgPSBzZWxmLl9wcm9jZ2lkKGZnaWQpCisKKyAgICAgICAgZGVmIF9zZXRsaW5rKHNlbGYsIHBhdGgsIGxpbmspOgorICAgICAgICAgICAgc2VsZi5wYXRoID0gb3MucGF0aC5ub3JtcGF0aChwYXRoKQorICAgICAgICAgICAgc2VsZi5saW5rID0gbGluaworCisgICAgICAgIGRlZiBfcHJvY21vZGUoc2VsZiwgbW9kZSk6CisgICAgICAgICAgICBpZiBub3QgbW9kZSBvciAobW9kZSBhbmQgbW9kZSA9PSAiLSIpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQobW9kZSw4KQorCisgICAgICAgICMgTm90ZSB1aWQvZ2lkIC0xIGhhcyBzcGVjaWFsIHNpZ25pZmljYW5jZSBpbiBvcy5sY2hvd24KKyAgICAgICAgZGVmIF9wcm9jdWlkKHNlbGYsIHVpZCk6CisgICAgICAgICAgICBpZiB1aWQgaXMgTm9uZSBvciB1aWQgPT0gIi0iOgorICAgICAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICAgICAgZWxpZiB1aWQuaXNkaWdpdCgpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQodWlkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcHdkLmdldHB3bmFtKHVpZCkucHdfdWlkCisKKyAgICAgICAgZGVmIF9wcm9jZ2lkKHNlbGYsIGdpZCk6CisgICAgICAgICAgICBpZiBnaWQgaXMgTm9uZSBvciBnaWQgPT0gIi0iOgorICAgICAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICAgICAgZWxpZiBnaWQuaXNkaWdpdCgpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQoZ2lkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gZ3JwLmdldGdybmFtKGdpZCkuZ3JfZ2lkCisKKyAgICAgICAgIyBVc2UgZm9yIGRlYnVnZ2luZyB0aGUgZW50cmllcworICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYubGluazoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiVzIGxpbmsgJXMiICUgKHNlbGYucGF0aCwgc2VsZi5saW5rKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtb2RlID0gIi0iCisgICAgICAgICAgICAgICAgaWYgc2VsZi5tb2RlOgorICAgICAgICAgICAgICAgICAgICBtb2RlID0gIjAlbyIgJSBzZWxmLm1vZGUKKyAgICAgICAgICAgICAgICBmbW9kZSA9ICItIgorICAgICAgICAgICAgICAgIGlmIHNlbGYuZm1vZGU6CisgICAgICAgICAgICAgICAgICAgIGZtb2RlID0gIjAlbyIgJSBzZWxmLmZtb2RlCisgICAgICAgICAgICAgICAgdWlkID0gc2VsZi5fbWFwdWdpZChzZWxmLnVpZCkKKyAgICAgICAgICAgICAgICBnaWQgPSBzZWxmLl9tYXB1Z2lkKHNlbGYuZ2lkKQorICAgICAgICAgICAgICAgIGZ1aWQgPSBzZWxmLl9tYXB1Z2lkKHNlbGYuZnVpZCkKKyAgICAgICAgICAgICAgICBmZ2lkID0gc2VsZi5fbWFwdWdpZChzZWxmLmZnaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuICIlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyIgJSAoc2VsZi5wYXRoLCBtb2RlLCB1aWQsIGdpZCwgc2VsZi53YWxrLCBmbW9kZSwgZnVpZCwgZmdpZCkKKworICAgICAgICBkZWYgX21hcHVnaWQoc2VsZiwgaWQpOgorICAgICAgICAgICAgaWYgaWQgaXMgTm9uZSBvciBpZCA9PSAtMToKKyAgICAgICAgICAgICAgICByZXR1cm4gIi0iCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAiJWQiICUgaWQKKworICAgICMgRml4IHRoZSBwZXJtaXNzaW9uLCBvd25lciBhbmQgZ3JvdXAgb2YgcGF0aAorICAgIGRlZiBmaXhfcGVybXMocGF0aCwgbW9kZSwgdWlkLCBnaWQsIGRpcik6CisgICAgICAgIGlmIG1vZGUgYW5kIG5vdCBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgICAgICNiYi5ub3RlKCJGaXh1cCBQZXJtczogY2htb2QgMCVvICVzIiAlIChtb2RlLCBkaXIpKQorICAgICAgICAgICAgb3MuY2htb2QocGF0aCwgbW9kZSkKKyAgICAgICAgIyAtMSBpcyBhIHNwZWNpYWwgdmFsdWUgdGhhdCBtZWFucyBkb24ndCBjaGFuZ2UgdGhlIHVpZC9naWQKKyAgICAgICAgIyBpZiB0aGV5IGFyZSBCT1RIIC0xLCBkb24ndCBib3RoZXIgdG8gbGNob3duCisgICAgICAgIGlmIG5vdCAodWlkID09IC0xIGFuZCBnaWQgPT0gLTEpOgorICAgICAgICAgICAgI2JiLm5vdGUoIkZpeHVwIFBlcm1zOiBsY2hvd24gJWQ6JWQgJXMiICUgKHVpZCwgZ2lkLCBkaXIpKQorICAgICAgICAgICAgb3MubGNob3duKHBhdGgsIHVpZCwgZ2lkKQorCisgICAgIyBSZXR1cm4gYSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMgYmFzZWQgb24gZWl0aGVyIHRoZSBkZWZhdWx0CisgICAgIyBmaWxlcy9mcy1wZXJtcy50eHQgb3IgdGhlIGNvbnRlbnRzIG9mIEZJTEVTWVNURU1fUEVSTVNfVEFCTEVTCisgICAgIyBwYXRocyBhcmUgcmVzb2x2ZWQgdmlhIEJCUEFUSAorICAgIGRlZiBnZXRfZnNfcGVybXNfbGlzdChkKToKKyAgICAgICAgc3RyID0gIiIKKyAgICAgICAgYmJwYXRoID0gZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpCisgICAgICAgIGZzX3Blcm1zX3RhYmxlcyA9IGQuZ2V0VmFyKCdGSUxFU1lTVEVNX1BFUk1TX1RBQkxFUycsIFRydWUpCisgICAgICAgIGlmIG5vdCBmc19wZXJtc190YWJsZXM6CisgICAgICAgICAgICBmc19wZXJtc190YWJsZXMgPSAnZmlsZXMvZnMtcGVybXMudHh0JworICAgICAgICBmb3IgY29uZl9maWxlIGluIGZzX3Blcm1zX3RhYmxlcy5zcGxpdCgpOgorICAgICAgICAgICAgc3RyICs9ICIgJXMiICUgYmIudXRpbHMud2hpY2goYmJwYXRoLCBjb25mX2ZpbGUpCisgICAgICAgIHJldHVybiBzdHIKKworCisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorCisgICAgZnNfcGVybXNfdGFibGUgPSB7fQorCisgICAgIyBCeSBkZWZhdWx0IGFsbCBvZiB0aGUgc3RhbmRhcmQgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGluCisgICAgIyBiaXRiYWtlLmNvbmYgd2lsbCBnZXQgMDc1NSByb290OnJvb3QuCisgICAgdGFyZ2V0X3BhdGhfdmFycyA9IFsgICAgJ2Jhc2VfcHJlZml4JywKKyAgICAgICAgICAgICAgICAncHJlZml4JywKKyAgICAgICAgICAgICAgICAnZXhlY19wcmVmaXgnLAorICAgICAgICAgICAgICAgICdiYXNlX2JpbmRpcicsCisgICAgICAgICAgICAgICAgJ2Jhc2Vfc2JpbmRpcicsCisgICAgICAgICAgICAgICAgJ2Jhc2VfbGliZGlyJywKKyAgICAgICAgICAgICAgICAnZGF0YWRpcicsCisgICAgICAgICAgICAgICAgJ3N5c2NvbmZkaXInLAorICAgICAgICAgICAgICAgICdzZXJ2aWNlZGlyJywKKyAgICAgICAgICAgICAgICAnc2hhcmVkc3RhdGVkaXInLAorICAgICAgICAgICAgICAgICdsb2NhbHN0YXRlZGlyJywKKyAgICAgICAgICAgICAgICAnaW5mb2RpcicsCisgICAgICAgICAgICAgICAgJ21hbmRpcicsCisgICAgICAgICAgICAgICAgJ2RvY2RpcicsCisgICAgICAgICAgICAgICAgJ2JpbmRpcicsCisgICAgICAgICAgICAgICAgJ3NiaW5kaXInLAorICAgICAgICAgICAgICAgICdsaWJleGVjZGlyJywKKyAgICAgICAgICAgICAgICAnbGliZGlyJywKKyAgICAgICAgICAgICAgICAnaW5jbHVkZWRpcicsCisgICAgICAgICAgICAgICAgJ29sZGluY2x1ZGVkaXInIF0KKworICAgIGZvciBwYXRoIGluIHRhcmdldF9wYXRoX3ZhcnM6CisgICAgICAgIGRpciA9IGQuZ2V0VmFyKHBhdGgsIFRydWUpIG9yICIiCisgICAgICAgIGlmIGRpciA9PSAiIjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZzX3Blcm1zX3RhYmxlW2Rpcl0gPSBmc19wZXJtc19lbnRyeShiYi5kYXRhLmV4cGFuZCgiJXMgMDc1NSByb290IHJvb3QgZmFsc2UgLSAtIC0iICUgKGRpciksIGQpKQorCisgICAgIyBOb3cgd2UgYWN0dWFsbHkgbG9hZCBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzCisgICAgZm9yIGNvbmYgaW4gZ2V0X2ZzX3Blcm1zX2xpc3QoZCkuc3BsaXQoKToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29uZik6CisgICAgICAgICAgICBmID0gb3Blbihjb25mKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBsc3BsaXQgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBpZiBsZW4obHNwbGl0KSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGxlbihsc3BsaXQpICE9IDggYW5kIG5vdCAobGVuKGxzcGxpdCkgPT0gMyBhbmQgbHNwbGl0WzFdLmxvd2VyKCkgPT0gImxpbmsiKToKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gIkZpeHVwIHBlcm1zOiAlcyBpbnZhbGlkIGxpbmU6ICVzIiAlIChjb25mLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicGVybS1saW5lIiwgbXNnLCBkKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVudHJ5ID0gZnNfcGVybXNfZW50cnkoZC5leHBhbmQobGluZSkpCisgICAgICAgICAgICAgICAgaWYgZW50cnkgYW5kIGVudHJ5LnBhdGg6CisgICAgICAgICAgICAgICAgICAgIGZzX3Blcm1zX3RhYmxlW2VudHJ5LnBhdGhdID0gZW50cnkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgIyBEZWJ1ZyAtLSBsaXN0IG91dCBpbi1tZW1vcnkgdGFibGUKKyAgICAjZm9yIGRpciBpbiBmc19wZXJtc190YWJsZToKKyAgICAjICAgIGJiLm5vdGUoIkZpeHVwIFBlcm1zOiAlczogJXMiICUgKGRpciwgc3RyKGZzX3Blcm1zX3RhYmxlW2Rpcl0pKSkKKworICAgICMgV2UgcHJvY2VzcyBsaW5rcyBmaXJzdCwgc28gd2UgY2FuIGdvIGJhY2sgYW5kIGZpeHVwIGRpcmVjdG9yeSBvd25lcnNoaXAKKyAgICAjIGZvciBhbnkgbmV3bHkgY3JlYXRlZCBkaXJlY3RvcmllcworICAgIGZvciBkaXIgaW4gZnNfcGVybXNfdGFibGU6CisgICAgICAgIGlmIG5vdCBmc19wZXJtc190YWJsZVtkaXJdLmxpbms6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIG9yaWdpbiA9IGR2YXIgKyBkaXIKKyAgICAgICAgaWYgbm90IChjcGF0aC5leGlzdHMob3JpZ2luKSBhbmQgY3BhdGguaXNkaXIob3JpZ2luKSBhbmQgbm90IGNwYXRoLmlzbGluayhvcmlnaW4pKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgbGluayA9IGZzX3Blcm1zX3RhYmxlW2Rpcl0ubGluaworICAgICAgICBpZiBsaW5rWzBdID09ICIvIjoKKyAgICAgICAgICAgIHRhcmdldCA9IGR2YXIgKyBsaW5rCisgICAgICAgICAgICBwdGFyZ2V0ID0gbGluaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFyZ2V0ID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcmlnaW4pLCBsaW5rKQorICAgICAgICAgICAgcHRhcmdldCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoZGlyKSwgbGluaykKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHModGFyZ2V0KToKKyAgICAgICAgICAgIG1zZyA9ICJGaXh1cCBQZXJtczogVW5hYmxlIHRvIGNvcnJlY3QgZGlyZWN0b3J5IGxpbmssIHRhcmdldCBhbHJlYWR5IGV4aXN0czogJXMgLT4gJXMiICUgKGRpciwgcHRhcmdldCkKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJwZXJtLWxpbmsiLCBtc2csIGQpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICMgQ3JlYXRlIHBhdGggdG8gbW92ZSBkaXJlY3RvcnkgdG8sIG1vdmUgaXQsIGFuZCB0aGVuIHNldHVwIHRoZSBzeW1saW5rCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUodGFyZ2V0KSkKKyAgICAgICAgI2JiLm5vdGUoIkZpeHVwIFBlcm1zOiBSZW5hbWUgJXMgLT4gJXMiICUgKGRpciwgcHRhcmdldCkpCisgICAgICAgIG9zLnJlbmFtZShvcmlnaW4sIHRhcmdldCkKKyAgICAgICAgI2JiLm5vdGUoIkZpeHVwIFBlcm1zOiBMaW5rICVzIC0+ICVzIiAlIChkaXIsIGxpbmspKQorICAgICAgICBvcy5zeW1saW5rKGxpbmssIG9yaWdpbikKKworICAgIGZvciBkaXIgaW4gZnNfcGVybXNfdGFibGU6CisgICAgICAgIGlmIGZzX3Blcm1zX3RhYmxlW2Rpcl0ubGluazoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgb3JpZ2luID0gZHZhciArIGRpcgorICAgICAgICBpZiBub3QgKGNwYXRoLmV4aXN0cyhvcmlnaW4pIGFuZCBjcGF0aC5pc2RpcihvcmlnaW4pKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgZml4X3Blcm1zKG9yaWdpbiwgZnNfcGVybXNfdGFibGVbZGlyXS5tb2RlLCBmc19wZXJtc190YWJsZVtkaXJdLnVpZCwgZnNfcGVybXNfdGFibGVbZGlyXS5naWQsIGRpcikKKworICAgICAgICBpZiBmc19wZXJtc190YWJsZVtkaXJdLndhbGsgPT0gJ3RydWUnOgorICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsob3JpZ2luKToKKyAgICAgICAgICAgICAgICBmb3IgZHIgaW4gZGlyczoKKyAgICAgICAgICAgICAgICAgICAgZWFjaF9kaXIgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZHIpCisgICAgICAgICAgICAgICAgICAgIGZpeF9wZXJtcyhlYWNoX2RpciwgZnNfcGVybXNfdGFibGVbZGlyXS5tb2RlLCBmc19wZXJtc190YWJsZVtkaXJdLnVpZCwgZnNfcGVybXNfdGFibGVbZGlyXS5naWQsIGRpcikKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgZWFjaF9maWxlID0gb3MucGF0aC5qb2luKHJvb3QsIGYpCisgICAgICAgICAgICAgICAgICAgIGZpeF9wZXJtcyhlYWNoX2ZpbGUsIGZzX3Blcm1zX3RhYmxlW2Rpcl0uZm1vZGUsIGZzX3Blcm1zX3RhYmxlW2Rpcl0uZnVpZCwgZnNfcGVybXNfdGFibGVbZGlyXS5mZ2lkLCBkaXIpCit9CisKK3B5dGhvbiBzcGxpdF9hbmRfc3RyaXBfZmlsZXMgKCkgeworICAgIGltcG9ydCBzdGF0LCBlcnJubworCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICAjIFdlIGRlZmF1bHQgdG8gJy5kZWJ1Zycgc3R5bGUKKyAgICBpZiBkLmdldFZhcignUEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRScsIFRydWUpID09ICdkZWJ1Zy1maWxlLWRpcmVjdG9yeSc6CisgICAgICAgICMgU2luZ2xlIGRlYnVnLWZpbGUtZGlyZWN0b3J5IHN0eWxlIGRlYnVnIGluZm8KKyAgICAgICAgZGVidWdhcHBlbmQgPSAiLmRlYnVnIgorICAgICAgICBkZWJ1Z2RpciA9ICIiCisgICAgICAgIGRlYnVnbGliZGlyID0gIi91c3IvbGliL2RlYnVnIgorICAgICAgICBkZWJ1Z3NyY2RpciA9ICIvdXNyL3NyYy9kZWJ1ZyIKKyAgICBlbGlmIGQuZ2V0VmFyKCdQQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFJywgVHJ1ZSkgPT0gJ2RlYnVnLXdpdGhvdXQtc3JjJzoKKyAgICAgICAgIyBPcmlnaW5hbCBPRS1jb3JlLCBhLmsuYS4gIi5kZWJ1ZyIsIHN0eWxlIGRlYnVnIGluZm8sIGJ1dCB3aXRob3V0IHNvdXJjZXMgaW4gL3Vzci9zcmMvZGVidWcKKyAgICAgICAgZGVidWdhcHBlbmQgPSAiIgorICAgICAgICBkZWJ1Z2RpciA9ICIvLmRlYnVnIgorICAgICAgICBkZWJ1Z2xpYmRpciA9ICIiCisgICAgICAgIGRlYnVnc3JjZGlyID0gIiIKKyAgICBlbHNlOgorICAgICAgICAjIE9yaWdpbmFsIE9FLWNvcmUsIGEuay5hLiAiLmRlYnVnIiwgc3R5bGUgZGVidWcgaW5mbworICAgICAgICBkZWJ1Z2FwcGVuZCA9ICIiCisgICAgICAgIGRlYnVnZGlyID0gIi8uZGVidWciCisgICAgICAgIGRlYnVnbGliZGlyID0gIiIKKyAgICAgICAgZGVidWdzcmNkaXIgPSAiL3Vzci9zcmMvZGVidWciCisKKyAgICBzb3VyY2VmaWxlID0gZC5leHBhbmQoIiR7V09SS0RJUn0vZGVidWdzb3VyY2VzLmxpc3QiKQorICAgIGJiLnV0aWxzLnJlbW92ZShzb3VyY2VmaWxlKQorCisgICAgb3MuY2hkaXIoZHZhcikKKworICAgICMgUmV0dXJuIHR5cGUgKGJpdHMpOgorICAgICMgMCAtIG5vdCBlbGYKKyAgICAjIDEgLSBFTEYKKyAgICAjIDIgLSBzdHJpcHBlZAorICAgICMgNCAtIGV4ZWN1dGFibGUKKyAgICAjIDggLSBzaGFyZWQgbGlicmFyeQorICAgICMgMTYgLSBrZXJuZWwgbW9kdWxlCisgICAgZGVmIGlzRUxGKHBhdGgpOgorICAgICAgICB0eXBlID0gMAorICAgICAgICByZXQsIHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgiZmlsZSBcIiVzXCIiICUgcGF0aC5yZXBsYWNlKCJcIiIsICJcXFwiIikpCisKKyAgICAgICAgaWYgcmV0OgorICAgICAgICAgICAgbXNnID0gInNwbGl0X2FuZF9zdHJpcF9maWxlczogJ2ZpbGUgJXMnIGZhaWxlZCIgJSBwYXRoCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigic3BsaXQtc3RyaXAiLCBtc2csIGQpCisgICAgICAgICAgICByZXR1cm4gdHlwZQorCisgICAgICAgICMgTm90IHN0cmlwcGVkCisgICAgICAgIGlmICJFTEYiIGluIHJlc3VsdDoKKyAgICAgICAgICAgIHR5cGUgfD0gMQorICAgICAgICAgICAgaWYgIm5vdCBzdHJpcHBlZCIgbm90IGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICB0eXBlIHw9IDIKKyAgICAgICAgICAgIGlmICJleGVjdXRhYmxlIiBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgdHlwZSB8PSA0CisgICAgICAgICAgICBpZiAic2hhcmVkIiBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgdHlwZSB8PSA4CisgICAgICAgIHJldHVybiB0eXBlCisKKworICAgICMKKyAgICAjIEZpcnN0IGxldHMgZmlndXJlIG91dCBhbGwgb2YgdGhlIGZpbGVzIHdlIG1heSBoYXZlIHRvIHByb2Nlc3MgLi4uIGRvIHRoaXMgb25seSBvbmNlIQorICAgICMKKyAgICBlbGZmaWxlcyA9IHt9CisgICAgc3ltbGlua3MgPSB7fQorICAgIGtlcm5tb2RzID0gW10KKyAgICBpbm9kZXMgPSB7fQorICAgIGxpYmRpciA9IG9zLnBhdGguYWJzcGF0aChkdmFyICsgb3Muc2VwICsgZC5nZXRWYXIoImxpYmRpciIsIFRydWUpKQorICAgIGJhc2VsaWJkaXIgPSBvcy5wYXRoLmFic3BhdGgoZHZhciArIG9zLnNlcCArIGQuZ2V0VmFyKCJiYXNlX2xpYmRpciIsIFRydWUpKQorICAgIGlmIChkLmdldFZhcignSU5ISUJJVF9QQUNLQUdFX1NUUklQJywgVHJ1ZSkgIT0gJzEnKToKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIGNwYXRoLndhbGsoZHZhcik6CisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBmaWxlID0gb3MucGF0aC5qb2luKHJvb3QsIGYpCisgICAgICAgICAgICAgICAgaWYgZmlsZS5lbmRzd2l0aCgiLmtvIikgYW5kIGZpbGUuZmluZCgiL2xpYi9tb2R1bGVzLyIpICE9IC0xOgorICAgICAgICAgICAgICAgICAgICBrZXJubW9kcy5hcHBlbmQoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICMgU2tpcCBkZWJ1ZyBmaWxlcworICAgICAgICAgICAgICAgIGlmIGRlYnVnYXBwZW5kIGFuZCBmaWxlLmVuZHN3aXRoKGRlYnVnYXBwZW5kKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBkZWJ1Z2RpciBhbmQgZGVidWdkaXIgaW4gb3MucGF0aC5kaXJuYW1lKGZpbGVbbGVuKGR2YXIpOl0pOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsdGFyZ2V0ID0gY3BhdGgucmVhbHBhdGgoZmlsZSwgZHZhciwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHMgPSBjcGF0aC5sc3RhdChsdGFyZ2V0KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIChlcnIsIHN0cmVycm9yKSA9IGUuYXJncworICAgICAgICAgICAgICAgICAgICBpZiBlcnIgIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgIyBTa2lwIGJyb2tlbiBzeW1saW5rcworICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICMgQ2hlY2sgaXRzIGFuIGV4Y3V0YWJsZQorICAgICAgICAgICAgICAgIGlmIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhVU1IpIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhHUlApIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhPVEgpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yICgoZmlsZS5zdGFydHN3aXRoKGxpYmRpcikgb3IgZmlsZS5zdGFydHN3aXRoKGJhc2VsaWJkaXIpKSBhbmQgIi5zbyIgaW4gZik6CisgICAgICAgICAgICAgICAgICAgICMgSWYgaXQncyBhIHN5bWxpbmssIGFuZCBwb2ludHMgdG8gYW4gRUxGIGZpbGUsIHdlIGNhcHR1cmUgdGhlIHJlYWRsaW5rIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBpZiBjcGF0aC5pc2xpbmsoZmlsZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBvcy5yZWFkbGluayhmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNFTEYobHRhcmdldCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2JiLm5vdGUoIlN5bTogJXMgKCVkKSIgJSAobHRhcmdldCwgaXNFTEYobHRhcmdldCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzW2ZpbGVdID0gdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgICMgSXQncyBhIGZpbGUgKG9yIGhhcmRsaW5rKSwgbm90IGEgbGluaworICAgICAgICAgICAgICAgICAgICAjIC4uLmJ1dCBpcyBpdCBFTEYsIGFuZCBpcyBpdCBhbHJlYWR5IHN0cmlwcGVkPworICAgICAgICAgICAgICAgICAgICBlbGZfZmlsZSA9IGlzRUxGKGZpbGUpCisgICAgICAgICAgICAgICAgICAgIGlmIGVsZl9maWxlICYgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVsZl9maWxlICYgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAnYWxyZWFkeS1zdHJpcHBlZCcgaW4gKGQuZ2V0VmFyKCdJTlNBTkVfU0tJUF8nICsgcG4sIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJTa2lwcGluZyBmaWxlICVzIGZyb20gJXMgZm9yIGFscmVhZHktc3RyaXBwZWQgUUEgdGVzdCIgJSAoZmlsZVtsZW4oZHZhcik6XSwgcG4pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJGaWxlICclcycgZnJvbSAlcyB3YXMgYWxyZWFkeSBzdHJpcHBlZCwgdGhpcyB3aWxsIHByZXZlbnQgZnV0dXJlIGRlYnVnZ2luZyEiICUgKGZpbGVbbGVuKGR2YXIpOl0sIHBuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiYWxyZWFkeS1zdHJpcHBlZCIsIG1zZywgZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbiB1bnN0cmlwcGVkIGVsZiBmaWxlLiBXZSBuZWVkIHRvOgorICAgICAgICAgICAgICAgICAgICAgICAgIyAgYSkgTWFrZSBzdXJlIGFueSBmaWxlIHdlIHN0cmlwIGlzIG5vdCBoYXJkbGlua2VkIHRvIGFueXRoaW5nIGVsc2Ugb3V0c2lkZSB0aGlzIHRyZWUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgIGIpIE9ubHkgc3RyaXAgYW55IGhhcmRsaW5rZWQgZmlsZSBvbmNlIChubyByYWNlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICMgIGMpIFRyYWNrIGFueSBoYXJkbGlua3MgYmV0d2VlbiBmaWxlcyBzbyB0aGF0IHdlIGNhbiByZWNvbnN0cnVjdCBtYXRjaGluZyBkZWJ1ZyBmaWxlIGhhcmRsaW5rcworCisgICAgICAgICAgICAgICAgICAgICAgICAjIFVzZSBhIHJlZmVyZW5jZSBvZiBkZXZpY2UgSUQgYW5kIGlub2RlIG51bWJlciB0byBpbmRlbnRpZnkgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcmVmZXJlbmNlID0gIiVkXyVkIiAlIChzLnN0X2Rldiwgcy5zdF9pbm8pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmaWxlX3JlZmVyZW5jZSBpbiBpbm9kZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MubGluayhpbm9kZXNbZmlsZV9yZWZlcmVuY2VdWzBdLCBmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlub2Rlc1tmaWxlX3JlZmVyZW5jZV0uYXBwZW5kKGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlub2Rlc1tmaWxlX3JlZmVyZW5jZV0gPSBbZmlsZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJyZWFrIGhhcmRsaW5rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMuY29weWZpbGUoZmlsZSwgZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGZmaWxlc1tmaWxlXSA9IGVsZl9maWxlCisgICAgICAgICAgICAgICAgICAgICAgICAjIE1vZGlmaWVkIHRoZSBmaWxlIHNvIGNsZWFyIHRoZSBjYWNoZQorICAgICAgICAgICAgICAgICAgICAgICAgY3BhdGgudXBkYXRlY2FjaGUoZmlsZSkKKworICAgICMKKyAgICAjIEZpcnN0IGxldHMgcHJvY2VzcyBkZWJ1ZyBzcGxpdHRpbmcKKyAgICAjCisgICAgaWYgKGQuZ2V0VmFyKCdJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQnLCBUcnVlKSAhPSAnMScpOgorICAgICAgICBmb3IgZmlsZSBpbiBlbGZmaWxlczoKKyAgICAgICAgICAgIHNyYyA9IGZpbGVbbGVuKGR2YXIpOl0KKyAgICAgICAgICAgIGRlc3QgPSBkZWJ1Z2xpYmRpciArIG9zLnBhdGguZGlybmFtZShzcmMpICsgZGVidWdkaXIgKyAiLyIgKyBvcy5wYXRoLmJhc2VuYW1lKHNyYykgKyBkZWJ1Z2FwcGVuZAorICAgICAgICAgICAgZnBhdGggPSBkdmFyICsgZGVzdAorCisgICAgICAgICAgICAjIFNwbGl0IHRoZSBmaWxlLi4uCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGZwYXRoKSkKKyAgICAgICAgICAgICNiYi5ub3RlKCJTcGxpdCAlcyAtPiAlcyIgJSAoZmlsZSwgZnBhdGgpKQorICAgICAgICAgICAgIyBPbmx5IHN0b3JlIG9mZiB0aGUgaGFyZCBsaW5rIHJlZmVyZW5jZSBpZiB3ZSBzdWNjZXNzZnVsbHkgc3BsaXQhCisgICAgICAgICAgICBzcGxpdGRlYnVnaW5mbyhmaWxlLCBmcGF0aCwgZGVidWdzcmNkaXIsIHNvdXJjZWZpbGUsIGQpCisKKyAgICAgICAgIyBIYXJkbGluayBvdXIgZGVidWcgc3ltYm9scyB0byB0aGUgb3RoZXIgaGFyZGxpbmsgY29waWVzCisgICAgICAgIGZvciByZWYgaW4gaW5vZGVzOgorICAgICAgICAgICAgaWYgbGVuKGlub2Rlc1tyZWZdKSA9PSAxOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmb3IgZmlsZSBpbiBpbm9kZXNbcmVmXVsxOl06CisgICAgICAgICAgICAgICAgc3JjID0gZmlsZVtsZW4oZHZhcik6XQorICAgICAgICAgICAgICAgIGRlc3QgPSBkZWJ1Z2xpYmRpciArIG9zLnBhdGguZGlybmFtZShzcmMpICsgZGVidWdkaXIgKyAiLyIgKyBvcy5wYXRoLmJhc2VuYW1lKHNyYykgKyBkZWJ1Z2FwcGVuZAorICAgICAgICAgICAgICAgIGZwYXRoID0gZHZhciArIGRlc3QKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBpbm9kZXNbcmVmXVswXVtsZW4oZHZhcik6XQorICAgICAgICAgICAgICAgIGZ0YXJnZXQgPSBkdmFyICsgZGVidWdsaWJkaXIgKyBvcy5wYXRoLmRpcm5hbWUodGFyZ2V0KSArIGRlYnVnZGlyICsgIi8iICsgb3MucGF0aC5iYXNlbmFtZSh0YXJnZXQpICsgZGVidWdhcHBlbmQKKyAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGZwYXRoKSkKKyAgICAgICAgICAgICAgICAjYmIubm90ZSgiTGluayAlcyAtPiAlcyIgJSAoZnBhdGgsIGZ0YXJnZXQpKQorICAgICAgICAgICAgICAgIG9zLmxpbmsoZnRhcmdldCwgZnBhdGgpCisKKyAgICAgICAgIyBDcmVhdGUgc3ltbGlua3MgZm9yIGFsbCBjYXNlcyB3ZSB3ZXJlIGFibGUgdG8gc3BsaXQgc3ltYm9scworICAgICAgICBmb3IgZmlsZSBpbiBzeW1saW5rczoKKyAgICAgICAgICAgIHNyYyA9IGZpbGVbbGVuKGR2YXIpOl0KKyAgICAgICAgICAgIGRlc3QgPSBkZWJ1Z2xpYmRpciArIG9zLnBhdGguZGlybmFtZShzcmMpICsgZGVidWdkaXIgKyAiLyIgKyBvcy5wYXRoLmJhc2VuYW1lKHNyYykgKyBkZWJ1Z2FwcGVuZAorICAgICAgICAgICAgZnBhdGggPSBkdmFyICsgZGVzdAorICAgICAgICAgICAgIyBTa2lwIGl0IGlmIHRoZSB0YXJnZXQgZG9lc24ndCBleGlzdAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSBvcy5zdGF0KGZwYXRoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAoZXJyLCBzdHJlcnJvcikgPSBlLmFyZ3MKKyAgICAgICAgICAgICAgICBpZiBlcnIgIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGx0YXJnZXQgPSBzeW1saW5rc1tmaWxlXQorICAgICAgICAgICAgbHBhdGggPSBvcy5wYXRoLmRpcm5hbWUobHRhcmdldCkKKyAgICAgICAgICAgIGxiYXNlID0gb3MucGF0aC5iYXNlbmFtZShsdGFyZ2V0KQorICAgICAgICAgICAgZnRhcmdldCA9ICIiCisgICAgICAgICAgICBpZiBscGF0aCBhbmQgbHBhdGggIT0gIi4iOgorICAgICAgICAgICAgICAgIGZ0YXJnZXQgKz0gbHBhdGggKyBkZWJ1Z2RpciArICIvIgorICAgICAgICAgICAgZnRhcmdldCArPSBsYmFzZSArIGRlYnVnYXBwZW5kCisgICAgICAgICAgICBpZiBscGF0aC5zdGFydHN3aXRoKCIuLiIpOgorICAgICAgICAgICAgICAgIGZ0YXJnZXQgPSBvcy5wYXRoLmpvaW4oIi4uIiwgZnRhcmdldCkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZnBhdGgpKQorICAgICAgICAgICAgI2JiLm5vdGUoIlN5bWxpbmsgJXMgLT4gJXMiICUgKGZwYXRoLCBmdGFyZ2V0KSkKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoZnRhcmdldCwgZnBhdGgpCisKKyAgICAgICAgIyBQcm9jZXNzIHRoZSBkZWJ1Z3NyY2RpciBpZiByZXF1ZXN0ZWQuLi4KKyAgICAgICAgIyBUaGlzIGNvcGllcyBhbmQgcGxhY2VzIHRoZSByZWZlcmVuY2VkIHNvdXJjZXMgZm9yIGxhdGVyIGRlYnVnZ2luZy4uLgorICAgICAgICBjb3B5ZGVidWdzb3VyY2VzKGRlYnVnc3JjZGlyLCBkKQorICAgICMKKyAgICAjIEVuZCBvZiBkZWJ1ZyBzcGxpdHRpbmcKKyAgICAjCisKKyAgICAjCisgICAgIyBOb3cgbGV0cyBnbyBiYWNrIG92ZXIgdGhpbmdzIGFuZCBzdHJpcCB0aGVtCisgICAgIworICAgIGlmIChkLmdldFZhcignSU5ISUJJVF9QQUNLQUdFX1NUUklQJywgVHJ1ZSkgIT0gJzEnKToKKyAgICAgICAgc3RyaXAgPSBkLmdldFZhcigiU1RSSVAiLCBUcnVlKQorICAgICAgICBzZmlsZXMgPSBbXQorICAgICAgICBmb3IgZmlsZSBpbiBlbGZmaWxlczoKKyAgICAgICAgICAgIGVsZl9maWxlID0gaW50KGVsZmZpbGVzW2ZpbGVdKQorICAgICAgICAgICAgI2JiLm5vdGUoIlN0cmlwICVzIiAlIGZpbGUpCisgICAgICAgICAgICBzZmlsZXMuYXBwZW5kKChmaWxlLCBlbGZfZmlsZSwgc3RyaXApKQorICAgICAgICBmb3IgZiBpbiBrZXJubW9kczoKKyAgICAgICAgICAgIHNmaWxlcy5hcHBlbmQoKGYsIDE2LCBzdHJpcCkpCisKKyAgICAgICAgb2UudXRpbHMubXVsdGlwcm9jZXNzX2V4ZWMoc2ZpbGVzLCBvZS5wYWNrYWdlLnJ1bnN0cmlwKQorCisgICAgIworICAgICMgRW5kIG9mIHN0cmlwCisgICAgIworfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXMgKCkgeworICAgIGltcG9ydCBnbG9iLCByZQorCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBvdXRkaXIgPSBkLmdldFZhcignREVQTE9ZX0RJUicsIFRydWUpCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG91dGRpcikKKyAgICBvcy5jaGRpcihkdmFyKQorCisgICAgIyBTYW5pdHkgY2hlY2sgUEFDS0FHRVMgZm9yIGR1cGxpY2F0ZXMKKyAgICAjIFNhbml0eSBzaG91bGQgYmUgbW92ZWQgdG8gc2FuaXR5LmJiY2xhc3Mgb25jZSB3ZSBoYXZlIHRoZSBpbmZyYXN0dWN0dXJlCisgICAgcGFja2FnZV9saXN0ID0gW10KKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgaWYgcGtnIGluIHBhY2thZ2VfbGlzdDoKKyAgICAgICAgICAgIG1zZyA9ICIlcyBpcyBsaXN0ZWQgaW4gUEFDS0FHRVMgbXVsdGlwbGUgdGltZXMsIHRoaXMgbGVhZHMgdG8gcGFja2FnaW5nIGVycm9ycy4iICUgcGtnCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicGFja2FnZXMtbGlzdCIsIG1zZywgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhY2thZ2VfbGlzdC5hcHBlbmQocGtnKQorICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsICcgJy5qb2luKHBhY2thZ2VfbGlzdCkpCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIHNlZW4gPSBbXQorCisgICAgIyBvcy5ta2RpciBtYXNrcyB0aGUgcGVybWlzc2lvbnMgd2l0aCB1bWFzayBzbyB3ZSBoYXZlIHRvIHVuc2V0IGl0IGZpcnN0CisgICAgb2xkdW1hc2sgPSBvcy51bWFzaygwKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlX2xpc3Q6CisgICAgICAgIHJvb3QgPSBvcy5wYXRoLmpvaW4ocGtnZGVzdCwgcGtnKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocm9vdCkKKworICAgICAgICBmaWxlc3ZhciA9IGQuZ2V0VmFyKCdGSUxFU18lcycgJSBwa2csIFRydWUpIG9yICIiCisgICAgICAgIGlmICIvLyIgaW4gZmlsZXN2YXI6CisgICAgICAgICAgICBtc2cgPSAiRklMRVMgdmFyaWFibGUgZm9yIHBhY2thZ2UgJXMgY29udGFpbnMgJy8vJyB3aGljaCBpcyBpbnZhbGlkLiBBdHRlbXB0aW5nIHRvIGZpeCB0aGlzIGJ1dCB5b3Ugc2hvdWxkIGNvcnJlY3QgdGhlIG1ldGFkYXRhLlxuIiAlIHBrZworICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImZpbGVzLWludmFsaWQiLCBtc2csIGQpCisgICAgICAgICAgICBmaWxlc3Zhci5yZXBsYWNlKCIvLyIsICIvIikKKworICAgICAgICBvcmlnZmlsZXMgPSBmaWxlc3Zhci5zcGxpdCgpCisgICAgICAgIGZpbGVzID0gZmlsZXNfZnJvbV9maWxldmFycyhvcmlnZmlsZXMpCisKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBpZiAobm90IGNwYXRoLmlzbGluayhmaWxlKSkgYW5kIChub3QgY3BhdGguZXhpc3RzKGZpbGUpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZmlsZSBpbiBzZWVuOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWVuLmFwcGVuZChmaWxlKQorCisgICAgICAgICAgICBkZWYgbWtkaXIoc3JjLCBkZXN0LCBwKToKKyAgICAgICAgICAgICAgICBzcmMgPSBvcy5wYXRoLmpvaW4oc3JjLCBwKQorICAgICAgICAgICAgICAgIGRlc3QgPSBvcy5wYXRoLmpvaW4oZGVzdCwgcCkKKyAgICAgICAgICAgICAgICBmc3RhdCA9IGNwYXRoLnN0YXQoc3JjKQorICAgICAgICAgICAgICAgIG9zLm1rZGlyKGRlc3QsIGZzdGF0LnN0X21vZGUpCisgICAgICAgICAgICAgICAgb3MuY2hvd24oZGVzdCwgZnN0YXQuc3RfdWlkLCBmc3RhdC5zdF9naWQpCisgICAgICAgICAgICAgICAgaWYgcCBub3QgaW4gc2VlbjoKKyAgICAgICAgICAgICAgICAgICAgc2Vlbi5hcHBlbmQocCkKKyAgICAgICAgICAgICAgICBjcGF0aC51cGRhdGVjYWNoZShkZXN0KQorCisgICAgICAgICAgICBkZWYgbWtkaXJfcmVjdXJzZShzcmMsIGRlc3QsIHBhdGhzKToKKyAgICAgICAgICAgICAgICBpZiBjcGF0aC5leGlzdHMoZGVzdCArICcvJyArIHBhdGhzKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgd2hpbGUgcGF0aHMuc3RhcnRzd2l0aCgiLi8iKToKKyAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBwYXRoc1syOl0KKyAgICAgICAgICAgICAgICBwID0gIi4iCisgICAgICAgICAgICAgICAgZm9yIGMgaW4gcGF0aHMuc3BsaXQoIi8iKToKKyAgICAgICAgICAgICAgICAgICAgcCA9IG9zLnBhdGguam9pbihwLCBjKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY3BhdGguZXhpc3RzKG9zLnBhdGguam9pbihkZXN0LCBwKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBta2RpcihzcmMsIGRlc3QsIHApCisKKyAgICAgICAgICAgIGlmIGNwYXRoLmlzZGlyKGZpbGUpIGFuZCBub3QgY3BhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICAgICAgICAgIG1rZGlyX3JlY3Vyc2UoZHZhciwgcm9vdCwgZmlsZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBta2Rpcl9yZWN1cnNlKGR2YXIsIHJvb3QsIG9zLnBhdGguZGlybmFtZShmaWxlKSkKKyAgICAgICAgICAgIGZwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsZmlsZSkKKyAgICAgICAgICAgIGlmIG5vdCBjcGF0aC5pc2xpbmsoZmlsZSk6CisgICAgICAgICAgICAgICAgb3MubGluayhmaWxlLCBmcGF0aCkKKyAgICAgICAgICAgICAgICBmc3RhdCA9IGNwYXRoLnN0YXQoZmlsZSkKKyAgICAgICAgICAgICAgICBvcy5jaG1vZChmcGF0aCwgZnN0YXQuc3RfbW9kZSkKKyAgICAgICAgICAgICAgICBvcy5jaG93bihmcGF0aCwgZnN0YXQuc3RfdWlkLCBmc3RhdC5zdF9naWQpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHJldCA9IGJiLnV0aWxzLmNvcHlmaWxlKGZpbGUsIGZwYXRoKQorICAgICAgICAgICAgaWYgcmV0IGlzIEZhbHNlIG9yIHJldCA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIkZpbGUgcG9wdWxhdGlvbiBmYWlsZWQiKQorCisgICAgb3MudW1hc2sob2xkdW1hc2spCisgICAgb3MuY2hkaXIod29ya2RpcikKKworICAgICMgSGFuZGxlIExJQ0VOU0VfRVhDTFVTSU9OCisgICAgcGFja2FnZV9saXN0ID0gW10KKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGlmIGQuZ2V0VmFyKCdMSUNFTlNFX0VYQ0xVU0lPTi0nICsgcGtnLCBUcnVlKToKKyAgICAgICAgICAgIG1zZyA9ICIlcyBoYXMgYW4gaW5jb21wYXRpYmxlIGxpY2Vuc2UuIEV4Y2x1ZGluZyBmcm9tIHBhY2thZ2luZy4iICUgcGtnCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiaW5jb21wYXRpYmxlLWxpY2Vuc2UiLCBtc2csIGQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYWNrYWdlX2xpc3QuYXBwZW5kKHBrZykKKyAgICBkLnNldFZhcignUEFDS0FHRVMnLCAnICcuam9pbihwYWNrYWdlX2xpc3QpKQorCisgICAgdW5zaGlwcGVkID0gW10KKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gY3BhdGgud2FsayhkdmFyKToKKyAgICAgICAgZGlyID0gcm9vdFtsZW4oZHZhcik6XQorICAgICAgICBpZiBub3QgZGlyOgorICAgICAgICAgICAgZGlyID0gb3Muc2VwCisgICAgICAgIGZvciBmIGluIChmaWxlcyArIGRpcnMpOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihkaXIsIGYpCisgICAgICAgICAgICBpZiAoJy4nICsgcGF0aCkgbm90IGluIHNlZW46CisgICAgICAgICAgICAgICAgdW5zaGlwcGVkLmFwcGVuZChwYXRoKQorCisgICAgaWYgdW5zaGlwcGVkICE9IFtdOgorICAgICAgICBtc2cgPSBwbiArICI6IEZpbGVzL2RpcmVjdG9yaWVzIHdlcmUgaW5zdGFsbGVkIGJ1dCBub3Qgc2hpcHBlZCBpbiBhbnkgcGFja2FnZToiCisgICAgICAgIGlmICJpbnN0YWxsZWQtdnMtc2hpcHBlZCIgaW4gKGQuZ2V0VmFyKCdJTlNBTkVfU0tJUF8nICsgcG4sIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgYmIubm90ZSgiUGFja2FnZSAlcyBza2lwcGluZyBRQSB0ZXN0czogaW5zdGFsbGVkLXZzLXNoaXBwZWQiICUgcG4pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgZiBpbiB1bnNoaXBwZWQ6CisgICAgICAgICAgICAgICAgbXNnID0gbXNnICsgIlxuICAiICsgZgorICAgICAgICAgICAgbXNnID0gbXNnICsgIlxuUGxlYXNlIHNldCBGSUxFUyBzdWNoIHRoYXQgdGhlc2UgaXRlbXMgYXJlIHBhY2thZ2VkLiBBbHRlcm5hdGl2ZWx5IGlmIHRoZXkgYXJlIHVubmVlZGVkLCBhdm9pZCBpbnN0YWxsaW5nIHRoZW0gb3IgZGVsZXRlIHRoZW0gd2l0aGluIGRvX2luc3RhbGwuIgorICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImluc3RhbGxlZC12cy1zaGlwcGVkIiwgbXNnLCBkKQorfQorcG9wdWxhdGVfcGFja2FnZXNbZGlyc10gPSAiJHtEfSIKKworcHl0aG9uIHBhY2thZ2VfZml4c3ltbGlua3MgKCkgeworICAgIGltcG9ydCBlcnJubworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgcGFja2FnZXMgPSBkLmdldFZhcigiUEFDS0FHRVMiLCBGYWxzZSkuc3BsaXQoKQorCisgICAgZGFuZ2xpbmdfbGlua3MgPSB7fQorICAgIHBrZ19maWxlcyA9IHt9CisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgZGFuZ2xpbmdfbGlua3NbcGtnXSA9IFtdCisgICAgICAgIHBrZ19maWxlc1twa2ddID0gW10KKyAgICAgICAgaW5zdF9yb290ID0gb3MucGF0aC5qb2luKHBrZ2Rlc3QsIHBrZykKKyAgICAgICAgZm9yIHBhdGggaW4gcGtnZmlsZXNbcGtnXToKKyAgICAgICAgICAgICAgICBycGF0aCA9IHBhdGhbbGVuKGluc3Rfcm9vdCk6XQorICAgICAgICAgICAgICAgIHBrZ19maWxlc1twa2ddLmFwcGVuZChycGF0aCkKKyAgICAgICAgICAgICAgICBydGFyZ2V0ID0gY3BhdGgucmVhbHBhdGgocGF0aCwgaW5zdF9yb290LCBUcnVlLCBhc3N1bWVfZGlyID0gVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgY3BhdGgubGV4aXN0cyhydGFyZ2V0KToKKyAgICAgICAgICAgICAgICAgICAgZGFuZ2xpbmdfbGlua3NbcGtnXS5hcHBlbmQob3MucGF0aC5ub3JtcGF0aChydGFyZ2V0W2xlbihpbnN0X3Jvb3QpOl0pKQorCisgICAgbmV3cmRlcGVuZHMgPSB7fQorICAgIGZvciBwa2cgaW4gZGFuZ2xpbmdfbGlua3M6CisgICAgICAgIGZvciBsIGluIGRhbmdsaW5nX2xpbmtzW3BrZ106CisgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiJXMgY29udGFpbnMgZGFuZ2xpbmcgbGluayAlcyIgJSAocGtnLCBsKSkKKyAgICAgICAgICAgIGZvciBwIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgICAgIGlmIGwgaW4gcGtnX2ZpbGVzW3BdOgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAidGFyZ2V0IGZvdW5kIGluICVzIiAlIHApCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwID09IHBrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGtnIG5vdCBpbiBuZXdyZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZGVwZW5kc1twa2ddID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3JkZXBlbmRzW3BrZ10uYXBwZW5kKHApCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgZm91bmQgPT0gRmFsc2U6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiJXMgY29udGFpbnMgZGFuZ2xpbmcgc3ltbGluayB0byAlcyIgJSAocGtnLCBsKSkKKworICAgIGZvciBwa2cgaW4gbmV3cmRlcGVuZHM6CisgICAgICAgIHJkZXBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGQuZ2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCBUcnVlKSBvciAiIikKKyAgICAgICAgZm9yIHAgaW4gbmV3cmRlcGVuZHNbcGtnXToKKyAgICAgICAgICAgIGlmIHAgbm90IGluIHJkZXBlbmRzOgorICAgICAgICAgICAgICAgIHJkZXBlbmRzW3BdID0gW10KKyAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIGJiLnV0aWxzLmpvaW5fZGVwcyhyZGVwZW5kcywgY29tbWFzZXA9RmFsc2UpKQorfQorCisKK3B5dGhvbiBwYWNrYWdlX3BhY2thZ2VfbmFtZV9ob29rKCkgeworICAgICIiIgorICAgIEEgcGFja2FnZV9uYW1lX2hvb2sgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcmV3cml0ZSB0aGUgcGFja2FnZSBuYW1lcyBieQorICAgIGNoYW5naW5nIFBLRy4gIEZvciBhbiBleGFtcGxlLCBzZWUgZGViaWFuLmJiY2xhc3MuCisgICAgIiIiCisgICAgcGFzcworfQorCitFWFBPUlRfRlVOQ1RJT05TIHBhY2thZ2VfbmFtZV9ob29rCisKKworUEtHREVTVFdPUksgPSAiJHtXT1JLRElSfS9wa2dkYXRhIgorCitweXRob24gZW1pdF9wa2dkYXRhKCkgeworICAgIGZyb20gZ2xvYiBpbXBvcnQgZ2xvYgorICAgIGltcG9ydCBqc29uCisKKyAgICBkZWYgd3JpdGVfaWZfZXhpc3RzKGYsIHBrZywgdmFyKToKKyAgICAgICAgZGVmIGVuY29kZShzdHIpOgorICAgICAgICAgICAgaW1wb3J0IGNvZGVjcworICAgICAgICAgICAgYyA9IGNvZGVjcy5nZXRlbmNvZGVyKCJzdHJpbmdfZXNjYXBlIikKKyAgICAgICAgICAgIHJldHVybiBjKHN0cilbMF0KKworICAgICAgICB2YWwgPSBkLmdldFZhcignJXNfJXMnICUgKHZhciwgcGtnKSwgVHJ1ZSkKKyAgICAgICAgaWYgdmFsOgorICAgICAgICAgICAgZi53cml0ZSgnJXNfJXM6ICVzXG4nICUgKHZhciwgcGtnLCBlbmNvZGUodmFsKSkpCisgICAgICAgICAgICByZXR1cm4gdmFsCisgICAgICAgIHZhbCA9IGQuZ2V0VmFyKCclcycgJSAodmFyKSwgVHJ1ZSkKKyAgICAgICAgaWYgdmFsOgorICAgICAgICAgICAgZi53cml0ZSgnJXM6ICVzXG4nICUgKHZhciwgZW5jb2RlKHZhbCkpKQorICAgICAgICByZXR1cm4gdmFsCisKKyAgICBkZWYgd3JpdGVfZXh0cmFfcGtncyh2YXJpYW50cywgcG4sIHBhY2thZ2VzLCBwa2dkYXRhZGlyKToKKyAgICAgICAgZm9yIHZhcmlhbnQgaW4gdmFyaWFudHM6CisgICAgICAgICAgICB3aXRoIG9wZW4oIiVzLyVzLSVzIiAlIChwa2dkYXRhZGlyLCB2YXJpYW50LCBwbiksICd3JykgYXMgZmQ6CisgICAgICAgICAgICAgICAgZmQud3JpdGUoIlBBQ0tBR0VTOiAlc1xuIiAlICcgJy5qb2luKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChsYW1iZGEgcGtnOiAnJXMtJXMnICUgKHZhcmlhbnQsIHBrZyksIHBhY2thZ2VzLnNwbGl0KCkpKSkKKworICAgIGRlZiB3cml0ZV9leHRyYV9ydW50aW1lX3BrZ3ModmFyaWFudHMsIHBhY2thZ2VzLCBwa2dkYXRhZGlyKToKKyAgICAgICAgZm9yIHZhcmlhbnQgaW4gdmFyaWFudHM6CisgICAgICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgbWxfcGtnID0gIiVzLSVzIiAlICh2YXJpYW50LCBwa2cpCisgICAgICAgICAgICAgICAgc3ViZGF0YV9maWxlID0gIiVzL3J1bnRpbWUvJXMiICUgKHBrZ2RhdGFkaXIsIG1sX3BrZykKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc3ViZGF0YV9maWxlLCAndycpIGFzIGZkOgorICAgICAgICAgICAgICAgICAgICBmZC53cml0ZSgiUEtHXyVzOiAlcyIgJSAobWxfcGtnLCBwa2cpKQorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgcGtnZGF0YWRpciA9IGQuZ2V0VmFyKCdQS0dERVNUV09SSycsIFRydWUpCisKKyAgICAjIFRha2Ugc2hhcmVkIGxvY2sgc2luY2Ugd2UncmUgb25seSByZWFkaW5nLCBub3Qgd3JpdGluZworICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoZC5leHBhbmQoIiR7UEFDS0FHRUxPQ0t9IiksIFRydWUpCisKKyAgICBkYXRhX2ZpbGUgPSBwa2dkYXRhZGlyICsgZC5leHBhbmQoIi8ke1BOfSIgKQorICAgIGYgPSBvcGVuKGRhdGFfZmlsZSwgJ3cnKQorICAgIGYud3JpdGUoIlBBQ0tBR0VTOiAlc1xuIiAlIHBhY2thZ2VzKQorICAgIGYuY2xvc2UoKQorCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGdsb2JhbF92YXJpYW50cyA9IChkLmdldFZhcignTVVMVElMSUJfR0xPQkFMX1ZBUklBTlRTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICB2YXJpYW50cyA9IChkLmdldFZhcignTVVMVElMSUJfVkFSSUFOVFMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbW9kdWxlLWJhc2UnLCBkKToKKyAgICAgICAgd3JpdGVfZXh0cmFfcGtncyh2YXJpYW50cywgcG4sIHBhY2thZ2VzLCBwa2dkYXRhZGlyKQorCisgICAgaWYgKGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FsbGFyY2gnLCBkKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BhY2thZ2Vncm91cCcsIGQpKToKKyAgICAgICAgd3JpdGVfZXh0cmFfcGtncyhnbG9iYWxfdmFyaWFudHMsIHBuLCBwYWNrYWdlcywgcGtnZGF0YWRpcikKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIHBrZ3ZhbCA9IGQuZ2V0VmFyKCdQS0dfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBwa2d2YWwgaXMgTm9uZToKKyAgICAgICAgICAgIHBrZ3ZhbCA9IHBrZworICAgICAgICAgICAgZC5zZXRWYXIoJ1BLR18lcycgJSBwa2csIHBrZykKKworICAgICAgICBwa2dkZXN0cGtnID0gb3MucGF0aC5qb2luKHBrZ2Rlc3QsIHBrZykKKyAgICAgICAgZmlsZXMgPSB7fQorICAgICAgICB0b3RhbF9zaXplID0gMAorICAgICAgICBmb3IgZiBpbiBwa2dmaWxlc1twa2ddOgorICAgICAgICAgICAgcmVscHRoID0gb3MucGF0aC5yZWxwYXRoKGYsIHBrZ2Rlc3Rwa2cpCisgICAgICAgICAgICBmc3RhdCA9IG9zLmxzdGF0KGYpCisgICAgICAgICAgICB0b3RhbF9zaXplICs9IGZzdGF0LnN0X3NpemUKKyAgICAgICAgICAgIGZpbGVzW29zLnNlcCArIHJlbHB0aF0gPSBmc3RhdC5zdF9zaXplCisgICAgICAgIGQuc2V0VmFyKCdGSUxFU19JTkZPJywganNvbi5kdW1wcyhmaWxlcykpCisKKyAgICAgICAgc3ViZGF0YV9maWxlID0gcGtnZGF0YWRpciArICIvcnVudGltZS8lcyIgJSBwa2cKKyAgICAgICAgc2YgPSBvcGVuKHN1YmRhdGFfZmlsZSwgJ3cnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1BOJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdQRScpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUFYnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1BSJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdQS0dFJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdQS0dWJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdQS0dSJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdMSUNFTlNFJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdERVNDUklQVElPTicpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnU1VNTUFSWScpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUkRFUEVORFMnKQorICAgICAgICBycHJvdiA9IHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUlBST1ZJREVTJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdSUkVDT01NRU5EUycpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUlNVR0dFU1RTJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdSUkVQTEFDRVMnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1JDT05GTElDVFMnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1NFQ1RJT04nKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1BLRycpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnQUxMT1dfRU1QVFknKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ0ZJTEVTJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdwa2dfcG9zdGluc3QnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ3BrZ19wb3N0cm0nKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ3BrZ19wcmVpbnN0JykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdwa2dfcHJlcm0nKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ0ZJTEVSUFJPVklERVNGTElTVCcpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnRklMRVNfSU5GTycpCisgICAgICAgIGZvciBkZmlsZSBpbiAoZC5nZXRWYXIoJ0ZJTEVSUFJPVklERVNGTElTVF8nICsgcGtnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnRklMRVJQUk9WSURFU18nICsgZGZpbGUpCisKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdGSUxFUkRFUEVORFNGTElTVCcpCisgICAgICAgIGZvciBkZmlsZSBpbiAoZC5nZXRWYXIoJ0ZJTEVSREVQRU5EU0ZMSVNUXycgKyBwa2csIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdGSUxFUkRFUEVORFNfJyArIGRmaWxlKQorCisgICAgICAgIHNmLndyaXRlKCclc18lczogJWRcbicgJSAoJ1BLR1NJWkUnLCBwa2csIHRvdGFsX3NpemUpKQorICAgICAgICBzZi5jbG9zZSgpCisKKyAgICAgICAgIyBTeW1saW5rcyBuZWVkZWQgZm9yIHJwcm92aWRlcyBsb29rdXAKKyAgICAgICAgaWYgcnByb3Y6CisgICAgICAgICAgICBmb3IgcCBpbiBycHJvdi5zdHJpcCgpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgc3ViZGF0YV9zeW0gPSBwa2dkYXRhZGlyICsgIi9ydW50aW1lLXJwcm92aWRlcy8lcy8lcyIgJSAocCwgcGtnKQorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoc3ViZGF0YV9zeW0pKQorICAgICAgICAgICAgICAgIG9lLnBhdGguc3ltbGluaygiLi4vLi4vcnVudGltZS8lcyIgJSBwa2csIHN1YmRhdGFfc3ltLCBUcnVlKQorCisgICAgICAgIGFsbG93X2VtcHR5ID0gZC5nZXRWYXIoJ0FMTE9XX0VNUFRZXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IGFsbG93X2VtcHR5OgorICAgICAgICAgICAgYWxsb3dfZW1wdHkgPSBkLmdldFZhcignQUxMT1dfRU1QVFknLCBUcnVlKQorICAgICAgICByb290ID0gIiVzLyVzIiAlIChwa2dkZXN0LCBwa2cpCisgICAgICAgIG9zLmNoZGlyKHJvb3QpCisgICAgICAgIGcgPSBnbG9iKCcqJykKKyAgICAgICAgaWYgZyBvciBhbGxvd19lbXB0eSA9PSAiMSI6CisgICAgICAgICAgICAjIFN5bWxpbmtzIG5lZWRlZCBmb3IgcmV2ZXJzZSBsb29rdXBzIChmcm9tIHRoZSBmaW5hbCBwYWNrYWdlIG5hbWUpCisgICAgICAgICAgICBzdWJkYXRhX3N5bSA9IHBrZ2RhdGFkaXIgKyAiL3J1bnRpbWUtcmV2ZXJzZS8lcyIgJSBwa2d2YWwKKyAgICAgICAgICAgIG9lLnBhdGguc3ltbGluaygiLi4vcnVudGltZS8lcyIgJSBwa2csIHN1YmRhdGFfc3ltLCBUcnVlKQorCisgICAgICAgICAgICBwYWNrYWdlZGZpbGUgPSBwa2dkYXRhZGlyICsgJy9ydW50aW1lLyVzLnBhY2thZ2VkJyAlIHBrZworICAgICAgICAgICAgb3BlbihwYWNrYWdlZGZpbGUsICd3JykuY2xvc2UoKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbW9kdWxlLWJhc2UnLCBkKToKKyAgICAgICAgd3JpdGVfZXh0cmFfcnVudGltZV9wa2dzKHZhcmlhbnRzLCBwYWNrYWdlcywgcGtnZGF0YWRpcikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FsbGFyY2gnLCBkKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BhY2thZ2Vncm91cCcsIGQpOgorICAgICAgICB3cml0ZV9leHRyYV9ydW50aW1lX3BrZ3MoZ2xvYmFsX3ZhcmlhbnRzLCBwYWNrYWdlcywgcGtnZGF0YWRpcikKKworICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCit9CitlbWl0X3BrZ2RhdGFbZGlyc10gPSAiJHtQS0dERVNUV09SS30vcnVudGltZSAke1BLR0RFU1RXT1JLfS9ydW50aW1lLXJldmVyc2UgJHtQS0dERVNUV09SS30vcnVudGltZS1ycHJvdmlkZXMiCisKK2xkY29uZmlnX3Bvc3RpbnN0X2ZyYWdtZW50KCkgeworaWYgWyB4IiREIiA9ICJ4IiBdOyB0aGVuCisJaWYgWyAteCAvc2Jpbi9sZGNvbmZpZyBdOyB0aGVuIC9zYmluL2xkY29uZmlnIDsgZmkKK2ZpCit9CisKK1JQTURFUFMgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbS9iaW4vcnBtZGVwcy1vZWNvcmUgLS1tYWNyb3MgJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbS9tYWNyb3MgLS1kZWZpbmUgJ19ycG1mY19tYWdpY19wYXRoICR7U1RBR0lOR19ESVJfTkFUSVZFfSR7ZGF0YWRpcl9uYXRpdmV9L21pc2MvbWFnaWMubWdjJyAtLXJwbXBvcHQgJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbS9ycG1wb3B0IgorCisjIENvbGxlY3QgcGVyZmlsZSBydW4tdGltZSBkZXBlbmRlbmN5IG1ldGFkYXRhCisjIE91dHB1dDoKKyMgIEZJTEVSUFJPVklERVNGTElTVF9wa2cgLSBsaXN0IG9mIGFsbCBmaWxlcyB3LyBkZXBzCisjICBGSUxFUlBST1ZJREVTX2ZpbGVwYXRoX3BrZyAtIHBlciBmaWxlIGRlcAorIworIyAgRklMRVJERVBFTkRTRkxJU1RfcGtnIC0gbGlzdCBvZiBhbGwgZmlsZXMgdy8gZGVwcworIyAgRklMRVJERVBFTkRTX2ZpbGVwYXRoX3BrZyAtIHBlciBmaWxlIGRlcAorCitweXRob24gcGFja2FnZV9kb19maWxlZGVwcygpIHsKKyAgICBpZiBkLmdldFZhcignU0tJUF9GSUxFREVQUycsIFRydWUpID09ICcxJzoKKyAgICAgICAgcmV0dXJuCisKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBycG1kZXBzID0gZC5nZXRWYXIoJ1JQTURFUFMnLCBUcnVlKQorCisgICAgZGVmIGNodW5rcyhmaWxlcywgbik6CisgICAgICAgIHJldHVybiBbZmlsZXNbaTppK25dIGZvciBpIGluIHJhbmdlKDAsIGxlbihmaWxlcyksIG4pXQorCisgICAgcGtnbGlzdCA9IFtdCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBpZiBkLmdldFZhcignU0tJUF9GSUxFREVQU18nICsgcGtnLCBUcnVlKSA9PSAnMSc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBwa2cuZW5kc3dpdGgoJy1kYmcnKSBvciBwa2cuZW5kc3dpdGgoJy1kb2MnKSBvciBwa2cuZmluZCgnLWxvY2FsZS0nKSAhPSAtMSBvciBwa2cuZmluZCgnLWxvY2FsZWRhdGEtJykgIT0gLTEgb3IgcGtnLmZpbmQoJy1nY29udi0nKSAhPSAtMSBvciBwa2cuZmluZCgnLWNoYXJtYXAtJykgIT0gLTEgb3IgcGtnLnN0YXJ0c3dpdGgoJ2tlcm5lbC1tb2R1bGUtJyk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgZmlsZXMgaW4gY2h1bmtzKHBrZ2ZpbGVzW3BrZ10sIDEwMCk6CisgICAgICAgICAgICBwa2dsaXN0LmFwcGVuZCgocGtnLCBmaWxlcywgcnBtZGVwcywgcGtnZGVzdCkpCisKKyAgICBwcm9jZXNzZWQgPSBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyggcGtnbGlzdCwgb2UucGFja2FnZS5maWxlZGVwcnVubmVyKQorCisgICAgcHJvdmlkZXNfZmlsZXMgPSB7fQorICAgIHJlcXVpcmVzX2ZpbGVzID0ge30KKworICAgIGZvciByZXN1bHQgaW4gcHJvY2Vzc2VkOgorICAgICAgICAocGtnLCBwcm92aWRlcywgcmVxdWlyZXMpID0gcmVzdWx0CisKKyAgICAgICAgaWYgcGtnIG5vdCBpbiBwcm92aWRlc19maWxlczoKKyAgICAgICAgICAgIHByb3ZpZGVzX2ZpbGVzW3BrZ10gPSBbXQorICAgICAgICBpZiBwa2cgbm90IGluIHJlcXVpcmVzX2ZpbGVzOgorICAgICAgICAgICAgcmVxdWlyZXNfZmlsZXNbcGtnXSA9IFtdCisKKyAgICAgICAgZm9yIGZpbGUgaW4gcHJvdmlkZXM6CisgICAgICAgICAgICBwcm92aWRlc19maWxlc1twa2ddLmFwcGVuZChmaWxlKQorICAgICAgICAgICAga2V5ID0gIkZJTEVSUFJPVklERVNfIiArIGZpbGUgKyAiXyIgKyBwa2cKKyAgICAgICAgICAgIGQuc2V0VmFyKGtleSwgIiAiLmpvaW4ocHJvdmlkZXNbZmlsZV0pKQorCisgICAgICAgIGZvciBmaWxlIGluIHJlcXVpcmVzOgorICAgICAgICAgICAgcmVxdWlyZXNfZmlsZXNbcGtnXS5hcHBlbmQoZmlsZSkKKyAgICAgICAgICAgIGtleSA9ICJGSUxFUkRFUEVORFNfIiArIGZpbGUgKyAiXyIgKyBwa2cKKyAgICAgICAgICAgIGQuc2V0VmFyKGtleSwgIiAiLmpvaW4ocmVxdWlyZXNbZmlsZV0pKQorCisgICAgZm9yIHBrZyBpbiByZXF1aXJlc19maWxlczoKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVSREVQRU5EU0ZMSVNUXyIgKyBwa2csICIgIi5qb2luKHJlcXVpcmVzX2ZpbGVzW3BrZ10pKQorICAgIGZvciBwa2cgaW4gcHJvdmlkZXNfZmlsZXM6CisgICAgICAgIGQuc2V0VmFyKCJGSUxFUlBST1ZJREVTRkxJU1RfIiArIHBrZywgIiAiLmpvaW4ocHJvdmlkZXNfZmlsZXNbcGtnXSkpCit9CisKK1NITElCU0RJUlMgPSAiJHtQS0dEQVRBX0RJUn0vJHtNTFBSRUZJWH1zaGxpYnMyIgorU0hMSUJTV09SS0RJUiA9ICIke1BLR0RFU1RXT1JLfS8ke01MUFJFRklYfXNobGliczIiCisKK3B5dGhvbiBwYWNrYWdlX2RvX3NobGlicygpIHsKKyAgICBpbXBvcnQgcmUsIHBpcGVzCisgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3ViCisKKyAgICBleGNsdWRlX3NobGlicyA9IGQuZ2V0VmFyKCdFWENMVURFX0ZST01fU0hMSUJTJywgMCkKKyAgICBpZiBleGNsdWRlX3NobGliczoKKyAgICAgICAgYmIubm90ZSgibm90IGdlbmVyYXRpbmcgc2hsaWJzIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBsaWJfcmUgPSByZS5jb21waWxlKCJeLipcLnNvIikKKyAgICBsaWJkaXJfcmUgPSByZS5jb21waWxlKCIuKi8lcyQiICUgZC5nZXRWYXIoJ2Jhc2VsaWInLCBUcnVlKSkKKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICB0YXJnZXRvcyA9IGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKQorCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKworICAgIHZlciA9IGQuZ2V0VmFyKCdQS0dWJywgVHJ1ZSkKKyAgICBpZiBub3QgdmVyOgorICAgICAgICBtc2cgPSAiUEtHViBub3QgZGVmaW5lZCIKKyAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBrZ3YtdW5kZWZpbmVkIiwgbXNnLCBkKQorICAgICAgICByZXR1cm4KKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisKKyAgICBzaGxpYnN3b3JrX2RpciA9IGQuZ2V0VmFyKCdTSExJQlNXT1JLRElSJywgVHJ1ZSkKKworICAgICMgVGFrZSBzaGFyZWQgbG9jayBzaW5jZSB3ZSdyZSBvbmx5IHJlYWRpbmcsIG5vdCB3cml0aW5nCisgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZShkLmV4cGFuZCgiJHtQQUNLQUdFTE9DS30iKSkKKworICAgIGRlZiBsaW51eF9zbyhmaWxlLCBuZWVkZWQsIHNvbmFtZXMsIHJlbmFtZXMsIHBrZ3Zlcik6CisgICAgICAgIG5lZWRzX2xkY29uZmlnID0gRmFsc2UKKyAgICAgICAgbGRpciA9IG9zLnBhdGguZGlybmFtZShmaWxlKS5yZXBsYWNlKHBrZ2Rlc3QgKyAiLyIgKyBwa2csICcnKQorICAgICAgICBjbWQgPSBkLmdldFZhcignT0JKRFVNUCcsIFRydWUpICsgIiAtcCAiICsgcGlwZXMucXVvdGUoZmlsZSkgKyAiIDI+L2Rldi9udWxsIgorICAgICAgICBmZCA9IG9zLnBvcGVuKGNtZCkKKyAgICAgICAgbGluZXMgPSBmZC5yZWFkbGluZXMoKQorICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgIHJwYXRoID0gW10KKyAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICBtID0gcmUubWF0Y2goIlxzK1JQQVRIXHMrKFteXHNdKikiLCBsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBycGF0aHMgPSBtLmdyb3VwKDEpLnJlcGxhY2UoIiRPUklHSU4iLCBsZGlyKS5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgcnBhdGggPSBtYXAob3MucGF0aC5ub3JtcGF0aCwgcnBhdGhzKQorICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgiXHMrTkVFREVEXHMrKFteXHNdKikiLCBsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBkZXAgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiBuZWVkZWRbcGtnXToKKyAgICAgICAgICAgICAgICAgICAgbmVlZGVkW3BrZ10uYXBwZW5kKChkZXAsIGZpbGUsIHJwYXRoKSkKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgiXHMrU09OQU1FXHMrKFteXHNdKikiLCBsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICB0aGlzX3NvbmFtZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBwcm92ID0gKHRoaXNfc29uYW1lLCBsZGlyLCBwa2d2ZXIpCisgICAgICAgICAgICAgICAgaWYgbm90IHByb3YgaW4gc29uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgIyBpZiBsaWJyYXJ5IGlzIHByaXZhdGUgKG9ubHkgdXNlZCBieSBwYWNrYWdlKSB0aGVuIGRvIG5vdCBidWlsZCBzaGxpYiBmb3IgaXQKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHByaXZhdGVfbGlicyBvciB0aGlzX3NvbmFtZSBub3QgaW4gcHJpdmF0ZV9saWJzOgorICAgICAgICAgICAgICAgICAgICAgICAgc29uYW1lcy5hcHBlbmQocHJvdikKKyAgICAgICAgICAgICAgICBpZiBsaWJkaXJfcmUubWF0Y2gob3MucGF0aC5kaXJuYW1lKGZpbGUpKToKKyAgICAgICAgICAgICAgICAgICAgbmVlZHNfbGRjb25maWcgPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgc25hcF9zeW1saW5rcyBhbmQgKG9zLnBhdGguYmFzZW5hbWUoZmlsZSkgIT0gdGhpc19zb25hbWUpOgorICAgICAgICAgICAgICAgICAgICByZW5hbWVzLmFwcGVuZCgoZmlsZSwgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShmaWxlKSwgdGhpc19zb25hbWUpKSkKKyAgICAgICAgcmV0dXJuIG5lZWRzX2xkY29uZmlnCisKKyAgICBkZWYgZGFyd2luX3NvKGZpbGUsIG5lZWRlZCwgc29uYW1lcywgcmVuYW1lcywgcGtndmVyKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGUpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGxkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZSkucmVwbGFjZShwa2dkZXN0ICsgIi8iICsgcGtnLCAnJykKKworICAgICAgICBkZWYgZ2V0X2NvbWJpbmF0aW9ucyhiYXNlKToKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgR2l2ZW4gYSBiYXNlIGxpYnJhcnkgbmFtZSwgZmluZCBhbGwgY29tYmluYXRpb25zIG9mIHRoaXMgc3BsaXQgYnkgIi4iIGFuZCAiLSIKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIGNvbWJvcyA9IFtdCisgICAgICAgICAgICBvcHRpb25zID0gYmFzZS5zcGxpdCgiLiIpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4ob3B0aW9ucykgKyAxKToKKyAgICAgICAgICAgICAgICBjb21ib3MuYXBwZW5kKCIuIi5qb2luKG9wdGlvbnNbMDppXSkpCisgICAgICAgICAgICBvcHRpb25zID0gYmFzZS5zcGxpdCgiLSIpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4ob3B0aW9ucykgKyAxKToKKyAgICAgICAgICAgICAgICBjb21ib3MuYXBwZW5kKCItIi5qb2luKG9wdGlvbnNbMDppXSkpCisgICAgICAgICAgICByZXR1cm4gY29tYm9zCisKKyAgICAgICAgaWYgKGZpbGUuZW5kc3dpdGgoJy5keWxpYicpIG9yIGZpbGUuZW5kc3dpdGgoJy5zbycpKSBhbmQgbm90IHBrZy5lbmRzd2l0aCgnLWRldicpIGFuZCBub3QgcGtnLmVuZHN3aXRoKCctZGJnJyk6CisgICAgICAgICAgICAjIERyb3Agc3VmZml4CisgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5iYXNlbmFtZShmaWxlKS5yc3BsaXQoIi4iLDEpWzBdCisgICAgICAgICAgICAjIEZpbmQgYWxsIGNvbWJpbmF0aW9ucworICAgICAgICAgICAgY29tYm9zID0gZ2V0X2NvbWJpbmF0aW9ucyhuYW1lKQorICAgICAgICAgICAgZm9yIGNvbWJvIGluIGNvbWJvczoKKyAgICAgICAgICAgICAgICBpZiBub3QgY29tYm8gaW4gc29uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgcHJvdiA9IChjb21ibywgbGRpciwgcGtndmVyKQorICAgICAgICAgICAgICAgICAgICBzb25hbWVzLmFwcGVuZChwcm92KQorICAgICAgICBpZiBmaWxlLmVuZHN3aXRoKCcuZHlsaWInKSBvciBmaWxlLmVuZHN3aXRoKCcuc28nKToKKyAgICAgICAgICAgIHJwYXRoID0gW10KKyAgICAgICAgICAgIHAgPSBzdWIuUG9wZW4oW2QuZXhwYW5kKCIke0hPU1RfUFJFRklYfW90b29sIiksICctbCcsIGZpbGVdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgICAgICAgICBlcnIsIG91dCA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgIyBJZiByZXR1cm5lZCBzdWNjZXNmdWxseSwgcHJvY2VzcyBzdGRlcnIgZm9yIHJlc3VsdHMKKyAgICAgICAgICAgIGlmIHAucmV0dXJuY29kZSA9PSAwOgorICAgICAgICAgICAgICAgIGZvciBsIGluIGVyci5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgICAgICAgICAgbCA9IGwuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBpZiBsLnN0YXJ0c3dpdGgoJ3BhdGggJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBycGF0aC5hcHBlbmQobC5zcGxpdCgpWzFdKQorCisgICAgICAgIHAgPSBzdWIuUG9wZW4oW2QuZXhwYW5kKCIke0hPU1RfUFJFRklYfW90b29sIiksICctTCcsIGZpbGVdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgICAgIGVyciwgb3V0ID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgICMgSWYgcmV0dXJuZWQgc3VjY2VzZnVsbHksIHByb2Nlc3Mgc3RkZXJyIGZvciByZXN1bHRzCisgICAgICAgIGlmIHAucmV0dXJuY29kZSA9PSAwOgorICAgICAgICAgICAgZm9yIGwgaW4gZXJyLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgIGwgPSBsLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgbCBvciBsLmVuZHN3aXRoKCI6Iik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgImlzIG5vdCBhbiBvYmplY3QgZmlsZSIgaW4gbDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5iYXNlbmFtZShsLnNwbGl0KClbMF0pLnJzcGxpdCgiLiIsIDEpWzBdCisgICAgICAgICAgICAgICAgaWYgbmFtZSBhbmQgbmFtZSBub3QgaW4gbmVlZGVkW3BrZ106CisgICAgICAgICAgICAgICAgICAgICBuZWVkZWRbcGtnXS5hcHBlbmQoKG5hbWUsIGZpbGUsIFtdKSkKKworICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFX1NOQVBfTElCX1NZTUxJTktTJywgVHJ1ZSkgPT0gIjEiOgorICAgICAgICBzbmFwX3N5bWxpbmtzID0gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIHNuYXBfc3ltbGlua3MgPSBGYWxzZQorCisgICAgaWYgKGQuZ2V0VmFyKCdVU0VfTERDT05GSUcnLCBUcnVlKSBvciAiMSIpID09ICIxIjoKKyAgICAgICAgdXNlX2xkY29uZmlnID0gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIHVzZV9sZGNvbmZpZyA9IEZhbHNlCisKKyAgICBuZWVkZWQgPSB7fQorICAgIHNobGliX3Byb3ZpZGVyID0gb2UucGFja2FnZS5yZWFkX3NobGliX3Byb3ZpZGVycyhkKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBwcml2YXRlX2xpYnMgPSBkLmdldFZhcignUFJJVkFURV9MSUJTXycgKyBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdQUklWQVRFX0xJQlMnLCBUcnVlKSBvciAiIgorICAgICAgICBwcml2YXRlX2xpYnMgPSBwcml2YXRlX2xpYnMuc3BsaXQoKQorICAgICAgICBuZWVkc19sZGNvbmZpZyA9IEZhbHNlCisgICAgICAgIGJiLmRlYnVnKDIsICJjYWxjdWxhdGluZyBzaGxpYiBwcm92aWRlcyBmb3IgJXMiICUgcGtnKQorCisgICAgICAgIHBrZ3ZlciA9IGQuZ2V0VmFyKCdQS0dWXycgKyBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwa2d2ZXI6CisgICAgICAgICAgICBwa2d2ZXIgPSBkLmdldFZhcignUFZfJyArIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBrZ3ZlcjoKKyAgICAgICAgICAgIHBrZ3ZlciA9IHZlcgorCisgICAgICAgIG5lZWRlZFtwa2ddID0gW10KKyAgICAgICAgc29uYW1lcyA9IGxpc3QoKQorICAgICAgICByZW5hbWVzID0gbGlzdCgpCisgICAgICAgIGZvciBmaWxlIGluIHBrZ2ZpbGVzW3BrZ106CisgICAgICAgICAgICAgICAgc29uYW1lID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIGNwYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiB0YXJnZXRvcyA9PSAiZGFyd2luIiBvciB0YXJnZXRvcyA9PSAiZGFyd2luOCI6CisgICAgICAgICAgICAgICAgICAgIGRhcndpbl9zbyhmaWxlLCBuZWVkZWQsIHNvbmFtZXMsIHJlbmFtZXMsIHBrZ3ZlcikKKyAgICAgICAgICAgICAgICBlbGlmIG9zLmFjY2VzcyhmaWxlLCBvcy5YX09LKSBvciBsaWJfcmUubWF0Y2goZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIGxkY29uZmlnID0gbGludXhfc28oZmlsZSwgbmVlZGVkLCBzb25hbWVzLCByZW5hbWVzLCBwa2d2ZXIpCisgICAgICAgICAgICAgICAgICAgIG5lZWRzX2xkY29uZmlnID0gbmVlZHNfbGRjb25maWcgb3IgbGRjb25maWcKKyAgICAgICAgZm9yIChvbGQsIG5ldykgaW4gcmVuYW1lczoKKyAgICAgICAgICAgIGJiLm5vdGUoIlJlbmFtaW5nICVzIHRvICVzIiAlIChvbGQsIG5ldykpCisgICAgICAgICAgICBvcy5yZW5hbWUob2xkLCBuZXcpCisgICAgICAgICAgICBwa2dmaWxlc1twa2ddLnJlbW92ZShvbGQpCisJICAgIAorICAgICAgICBzaGxpYnNfZmlsZSA9IG9zLnBhdGguam9pbihzaGxpYnN3b3JrX2RpciwgcGtnICsgIi5saXN0IikKKyAgICAgICAgaWYgbGVuKHNvbmFtZXMpOgorICAgICAgICAgICAgZmQgPSBvcGVuKHNobGlic19maWxlLCAndycpCisgICAgICAgICAgICBmb3IgcyBpbiBzb25hbWVzOgorICAgICAgICAgICAgICAgIGlmIHNbMF0gaW4gc2hsaWJfcHJvdmlkZXIgYW5kIHNbMV0gaW4gc2hsaWJfcHJvdmlkZXJbc1swXV06CisgICAgICAgICAgICAgICAgICAgIChvbGRfcGtnLCBvbGRfcGtndmVyKSA9IHNobGliX3Byb3ZpZGVyW3NbMF1dW3NbMV1dCisgICAgICAgICAgICAgICAgICAgIGlmIG9sZF9wa2cgIT0gcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybignJXMtJXMgd2FzIHJlZ2lzdGVyZWQgYXMgc2hsaWIgcHJvdmlkZXIgZm9yICVzLCBjaGFuZ2luZyBpdCB0byAlcy0lcyBiZWNhdXNlIGl0IHdhcyBidWlsdCBsYXRlcicgJSAob2xkX3BrZywgb2xkX3BrZ3Zlciwgc1swXSwgcGtnLCBwa2d2ZXIpKQorICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICdyZWdpc3RlcmluZyAlcy0lcyBhcyBzaGxpYiBwcm92aWRlciBmb3IgJXMnICUgKHBrZywgcGtndmVyLCBzWzBdKSkKKyAgICAgICAgICAgICAgICBmZC53cml0ZShzWzBdICsgJzonICsgc1sxXSArICc6JyArIHNbMl0gKyAnXG4nKQorICAgICAgICAgICAgICAgIGlmIHNbMF0gbm90IGluIHNobGliX3Byb3ZpZGVyOgorICAgICAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcltzWzBdXSA9IHt9CisgICAgICAgICAgICAgICAgc2hsaWJfcHJvdmlkZXJbc1swXV1bc1sxXV0gPSAocGtnLCBwa2d2ZXIpCisgICAgICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgIGlmIG5lZWRzX2xkY29uZmlnIGFuZCB1c2VfbGRjb25maWc6CisgICAgICAgICAgICBiYi5kZWJ1ZygxLCAnYWRkaW5nIGxkY29uZmlnIGNhbGwgdG8gcG9zdGluc3QgZm9yICVzJyAlIHBrZykKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignbGRjb25maWdfcG9zdGluc3RfZnJhZ21lbnQnLCBUcnVlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorICAgICAgICBiYi5kZWJ1ZygxLCAnTElCTkFNRVM6IHBrZyAlcyBzb25hbWVzICVzJyAlIChwa2csIHNvbmFtZXMpKQorCisgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKworICAgIGFzc3VtZWRfbGlicyA9IGQuZ2V0VmFyKCdBU1NVTUVfU0hMSUJTJywgVHJ1ZSkKKyAgICBpZiBhc3N1bWVkX2xpYnM6CisgICAgICAgIGxpYmRpciA9IGQuZ2V0VmFyKCJsaWJkaXIiLCBUcnVlKQorICAgICAgICBmb3IgZSBpbiBhc3N1bWVkX2xpYnMuc3BsaXQoKToKKyAgICAgICAgICAgIGwsIGRlcF9wa2cgPSBlLnNwbGl0KCI6IikKKyAgICAgICAgICAgIGxpYl92ZXIgPSBOb25lCisgICAgICAgICAgICBkZXBfcGtnID0gZGVwX3BrZy5yc3BsaXQoIl8iLCAxKQorICAgICAgICAgICAgaWYgbGVuKGRlcF9wa2cpID09IDI6CisgICAgICAgICAgICAgICAgbGliX3ZlciA9IGRlcF9wa2dbMV0KKyAgICAgICAgICAgIGRlcF9wa2cgPSBkZXBfcGtnWzBdCisgICAgICAgICAgICBpZiBsIG5vdCBpbiBzaGxpYl9wcm92aWRlcjoKKyAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcltsXSA9IHt9CisgICAgICAgICAgICBzaGxpYl9wcm92aWRlcltsXVtsaWJkaXJdID0gKGRlcF9wa2csIGxpYl92ZXIpCisKKyAgICBsaWJzZWFyY2hwYXRoID0gW2QuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2Jhc2VfbGliZGlyJywgVHJ1ZSldCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGJiLmRlYnVnKDIsICJjYWxjdWxhdGluZyBzaGxpYiByZXF1aXJlbWVudHMgZm9yICVzIiAlIHBrZykKKworICAgICAgICBkZXBzID0gbGlzdCgpCisgICAgICAgIGZvciBuIGluIG5lZWRlZFtwa2ddOgorICAgICAgICAgICAgIyBpZiBuIGlzIGluIHByaXZhdGUgbGlicmFyaWVzLCBkb24ndCB0cnkgdG8gc2VhcmNoIHByb3ZpZGVyIGZvciBpdAorICAgICAgICAgICAgIyB0aGlzIGNvdWxkIGNhdXNlIHByb2JsZW0gaW4gY2FzZSBzb21lIGFiYy5iYiBwcm92aWRlcyBwcml2YXRlCisgICAgICAgICAgICAjIC9vcHQvYWJjL2xpYi9saWJmb28uc28uMSBhbmQgY29udGFpbnMgL3Vzci9iaW4vYWJjIGRlcGVuZGluZyBvbiBzeXN0ZW0gbGlicmFyeSBsaWJmb28uc28uMQorICAgICAgICAgICAgIyBidXQgc2tpcHBpbmcgaXQgaXMgc3RpbGwgYmV0dGVyIGFsdGVybmF0aXZlIHRoYW4gcHJvdmlkaW5nIG93bgorICAgICAgICAgICAgIyB2ZXJzaW9uIGFuZCB0aGVuIGFkZGluZyBydW50aW1lIGRlcGVuZGVuY3kgZm9yIHRoZSBzYW1lIHN5c3RlbSBsaWJyYXJ5CisgICAgICAgICAgICBpZiBwcml2YXRlX2xpYnMgYW5kIG5bMF0gaW4gcHJpdmF0ZV9saWJzOgorICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICclczogRGVwZW5kZW5jeSAlcyBjb3ZlcmVkIGJ5IFBSSVZBVEVfTElCUycgJSAocGtnLCBuWzBdKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgblswXSBpbiBzaGxpYl9wcm92aWRlci5rZXlzKCk6CisgICAgICAgICAgICAgICAgc2hsaWJfcHJvdmlkZXJfcGF0aCA9IGxpc3QoKQorICAgICAgICAgICAgICAgIGZvciBrIGluIHNobGliX3Byb3ZpZGVyW25bMF1dLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgc2hsaWJfcHJvdmlkZXJfcGF0aC5hcHBlbmQoaykKKyAgICAgICAgICAgICAgICBtYXRjaCA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBuWzJdICsgc2hsaWJfcHJvdmlkZXJfcGF0aCArIGxpYnNlYXJjaHBhdGg6CisgICAgICAgICAgICAgICAgICAgIGlmIHAgaW4gc2hsaWJfcHJvdmlkZXJbblswXV06CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIChkZXBfcGtnLCB2ZXJfbmVlZGVkKSA9IHNobGliX3Byb3ZpZGVyW25bMF1dW21hdGNoXQorCisgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICclczogRGVwZW5kZW5jeSAlcyByZXF1aXJlcyBwYWNrYWdlICVzICh1c2VkIGJ5IGZpbGVzOiAlcyknICUgKHBrZywgblswXSwgZGVwX3BrZywgblsxXSkpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwX3BrZyA9PSBwa2c6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgIGlmIHZlcl9uZWVkZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXAgPSAiJXMgKD49ICVzKSIgJSAoZGVwX3BrZywgdmVyX25lZWRlZCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcCA9IGRlcF9wa2cKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoZGVwKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYmIubm90ZSgiQ291bGRuJ3QgZmluZCBzaGFyZWQgbGlicmFyeSBwcm92aWRlciBmb3IgJXMsIHVzZWQgYnkgZmlsZXM6ICVzIiAlIChuWzBdLCBuWzFdKSkKKworICAgICAgICBkZXBzX2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnZGVzdCwgcGtnICsgIi5zaGxpYmRlcHMiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZXBzX2ZpbGUpOgorICAgICAgICAgICAgb3MucmVtb3ZlKGRlcHNfZmlsZSkKKyAgICAgICAgaWYgbGVuKGRlcHMpOgorICAgICAgICAgICAgZmQgPSBvcGVuKGRlcHNfZmlsZSwgJ3cnKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgIGZkLndyaXRlKGRlcCArICdcbicpCisgICAgICAgICAgICBmZC5jbG9zZSgpCit9CisKK3B5dGhvbiBwYWNrYWdlX2RvX3BrZ2NvbmZpZyAoKSB7CisgICAgaW1wb3J0IHJlCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorCisgICAgc2hsaWJzX2RpcnMgPSBkLmdldFZhcignU0hMSUJTRElSUycsIFRydWUpLnNwbGl0KCkKKyAgICBzaGxpYnN3b3JrX2RpciA9IGQuZ2V0VmFyKCdTSExJQlNXT1JLRElSJywgVHJ1ZSkKKworICAgIHBjX3JlID0gcmUuY29tcGlsZSgnKC4qKVwucGMkJykKKyAgICB2YXJfcmUgPSByZS5jb21waWxlKCcoLiopPSguKiknKQorICAgIGZpZWxkX3JlID0gcmUuY29tcGlsZSgnKC4qKTogKC4qKScpCisKKyAgICBwa2djb25maWdfcHJvdmlkZWQgPSB7fQorICAgIHBrZ2NvbmZpZ19uZWVkZWQgPSB7fQorICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgcGtnY29uZmlnX3Byb3ZpZGVkW3BrZ10gPSBbXQorICAgICAgICBwa2djb25maWdfbmVlZGVkW3BrZ10gPSBbXQorICAgICAgICBmb3IgZmlsZSBpbiBwa2dmaWxlc1twa2ddOgorICAgICAgICAgICAgICAgIG0gPSBwY19yZS5tYXRjaChmaWxlKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIHBkID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgcGtnY29uZmlnX3Byb3ZpZGVkW3BrZ10uYXBwZW5kKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5hY2Nlc3MoZmlsZSwgb3MuUl9PSyk6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBmID0gb3BlbihmaWxlLCAncicpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBtID0gdmFyX3JlLm1hdGNoKGwpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gbS5ncm91cCgyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkLnNldFZhcihuYW1lLCBwZC5leHBhbmQodmFsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGZpZWxkX3JlLm1hdGNoKGwpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkciA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHAgPSBiYi5kYXRhLmV4cGFuZChtLmdyb3VwKDIpLCBwZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBoZHIgPT0gJ1JlcXVpcmVzJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnY29uZmlnX25lZWRlZFtwa2ddICs9IGV4cC5yZXBsYWNlKCcsJywgJyAnKS5zcGxpdCgpCisKKyAgICAjIFRha2Ugc2hhcmVkIGxvY2sgc2luY2Ugd2UncmUgb25seSByZWFkaW5nLCBub3Qgd3JpdGluZworICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoZC5leHBhbmQoIiR7UEFDS0FHRUxPQ0t9IikpCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIHBrZ3NfZmlsZSA9IG9zLnBhdGguam9pbihzaGxpYnN3b3JrX2RpciwgcGtnICsgIi5wY2xpc3QiKQorICAgICAgICBpZiBwa2djb25maWdfcHJvdmlkZWRbcGtnXSAhPSBbXToKKyAgICAgICAgICAgIGYgPSBvcGVuKHBrZ3NfZmlsZSwgJ3cnKQorICAgICAgICAgICAgZm9yIHAgaW4gcGtnY29uZmlnX3Byb3ZpZGVkW3BrZ106CisgICAgICAgICAgICAgICAgZi53cml0ZSgnJXNcbicgJSBwKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAjIEdvIGZyb20gbGVhc3QgdG8gbW9zdCBzcGVjaWZpYyBzaW5jZSB0aGUgbGFzdCBvbmUgZm91bmQgd2lucworICAgIGZvciBkaXIgaW4gcmV2ZXJzZWQoc2hsaWJzX2RpcnMpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGlyKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZvciBmaWxlIGluIG9zLmxpc3RkaXIoZGlyKToKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgnXiguKilcLnBjbGlzdCQnLCBmaWxlKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBwa2cgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgZmQgPSBvcGVuKG9zLnBhdGguam9pbihkaXIsIGZpbGUpKQorICAgICAgICAgICAgICAgIGxpbmVzID0gZmQucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgICAgICAgICAgcGtnY29uZmlnX3Byb3ZpZGVkW3BrZ10gPSBbXQorICAgICAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICBwa2djb25maWdfcHJvdmlkZWRbcGtnXS5hcHBlbmQobC5yc3RyaXAoKSkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgZGVwcyA9IFtdCisgICAgICAgIGZvciBuIGluIHBrZ2NvbmZpZ19uZWVkZWRbcGtnXToKKyAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBrIGluIHBrZ2NvbmZpZ19wcm92aWRlZC5rZXlzKCk6CisgICAgICAgICAgICAgICAgaWYgbiBpbiBwa2djb25maWdfcHJvdmlkZWRba106CisgICAgICAgICAgICAgICAgICAgIGlmIGsgIT0gcGtnIGFuZCBub3QgKGsgaW4gZGVwcyk6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChrKQorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgIGlmIGZvdW5kID09IEZhbHNlOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoImNvdWxkbid0IGZpbmQgcGtnY29uZmlnIG1vZHVsZSAnJXMnIGluIGFueSBwYWNrYWdlIiAlIG4pCisgICAgICAgIGRlcHNfZmlsZSA9IG9zLnBhdGguam9pbihwa2dkZXN0LCBwa2cgKyAiLnBjZGVwcyIpCisgICAgICAgIGlmIGxlbihkZXBzKToKKyAgICAgICAgICAgIGZkID0gb3BlbihkZXBzX2ZpbGUsICd3JykKKyAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgICAgICBmZC53cml0ZShkZXAgKyAnXG4nKQorICAgICAgICAgICAgZmQuY2xvc2UoKQorCisgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKK30KKworZGVmIHJlYWRfbGliZGVwX2ZpbGVzKGQpOgorICAgIHBrZ2xpYmRlcHMgPSB7fQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIHBrZ2xpYmRlcHNbcGtnXSA9IHt9CisgICAgICAgIGZvciBleHRlbnNpb24gaW4gIi5zaGxpYmRlcHMiLCAiLnBjZGVwcyIsICIuY2xpbGliZGVwcyI6CisgICAgICAgICAgICBkZXBzZmlsZSA9IGQuZXhwYW5kKCIke1BLR0RFU1R9LyIgKyBwa2cgKyBleHRlbnNpb24pCisgICAgICAgICAgICBpZiBvcy5hY2Nlc3MoZGVwc2ZpbGUsIG9zLlJfT0spOgorICAgICAgICAgICAgICAgIGZkID0gb3BlbihkZXBzZmlsZSkKKyAgICAgICAgICAgICAgICBsaW5lcyA9IGZkLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgZmQuY2xvc2UoKQorICAgICAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICBsLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGRlcHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRlcCBpbiBwa2dsaWJkZXBzW3BrZ106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnbGliZGVwc1twa2ddW2RlcF0gPSBkZXBzW2RlcF0KKyAgICByZXR1cm4gcGtnbGliZGVwcworCitweXRob24gcmVhZF9zaGxpYmRlcHMgKCkgeworICAgIHBrZ2xpYmRlcHMgPSByZWFkX2xpYmRlcF9maWxlcyhkKQorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgcmRlcGVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZC5nZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIFRydWUpIG9yICIiKQorICAgICAgICBmb3IgZGVwIGluIHBrZ2xpYmRlcHNbcGtnXToKKyAgICAgICAgICAgICMgQWRkIHRoZSBkZXAgaWYgaXQncyBub3QgYWxyZWFkeSB0aGVyZSwgb3IgaWYgbm8gY29tcGFyaXNvbiBpcyBzZXQKKyAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgcmRlcGVuZHNbZGVwXSA9IFtdCisgICAgICAgICAgICBmb3IgdiBpbiBwa2dsaWJkZXBzW3BrZ11bZGVwXToKKyAgICAgICAgICAgICAgICBpZiB2IG5vdCBpbiByZGVwZW5kc1tkZXBdOgorICAgICAgICAgICAgICAgICAgICByZGVwZW5kc1tkZXBdLmFwcGVuZCh2KQorICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJyArIHBrZywgYmIudXRpbHMuam9pbl9kZXBzKHJkZXBlbmRzLCBjb21tYXNlcD1GYWxzZSkpCit9CisKK3B5dGhvbiBwYWNrYWdlX2RlcGNoYWlucygpIHsKKyAgICAiIiIKKyAgICBGb3IgYSBnaXZlbiBzZXQgb2YgcHJlZml4IGFuZCBwb3N0Zml4IG1vZGlmaWVycywgbWFrZSB0aG9zZSBwYWNrYWdlcworICAgIFJSRUNPTU1FTkRTIG9uIHRoZSBjb3JyZXNwb25kaW5nIHBhY2thZ2VzIGZvciBpdHMgUkRFUEVORFMuCisKKyAgICBFeGFtcGxlOiAgSWYgcGFja2FnZSBBIGRlcGVuZHMgdXBvbiBwYWNrYWdlIEIsIGFuZCBBJ3MgLmJiIGVtaXRzIGFuCisgICAgQS1kZXYgcGFja2FnZSwgdGhpcyB3b3VsZCBtYWtlIEEtZGV2IFJlY29tbWVuZHM6IEItZGV2LgorCisgICAgSWYgb25seSBvbmUgb2YgYSBnaXZlbiBzdWZmaXggaXMgc3BlY2lmaWVkLCBpdCB3aWxsIHRha2UgdGhlIFJSRUNPTU1FTkRTCisgICAgYmFzZWQgb24gdGhlIFJERVBFTkRTIG9mICphbGwqIG90aGVyIHBhY2thZ2VzLiBJZiBtb3JlIHRoYW4gb25lIG9mIGEgZ2l2ZW4KKyAgICBzdWZmaXggaXMgc3BlY2lmaWVkLCBpdHMgd2lsbCBvbmx5IHVzZSB0aGUgUkRFUEVORFMgb2YgdGhlIHNpbmdsZSBwYXJlbnQKKyAgICBwYWNrYWdlLgorICAgICIiIgorCisgICAgcGFja2FnZXMgID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBwb3N0Zml4ZXMgPSAoZC5nZXRWYXIoJ0RFUENIQUlOX1BPU1QnLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgIHByZWZpeGVzICA9IChkLmdldFZhcignREVQQ0hBSU5fUFJFJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKworICAgIGRlZiBwa2dfYWRkZGVwcnJlY3MocGtnLCBiYXNlLCBzdWZmaXgsIGdldG5hbWUsIGRlcGVuZHMsIGQpOgorCisgICAgICAgICNiYi5ub3RlKCdkZXBlbmRzIGZvciAlcyBpcyAlcycgJSAoYmFzZSwgZGVwZW5kcykpCisgICAgICAgIHJyZWNsaXN0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGQuZ2V0VmFyKCdSUkVDT01NRU5EU18nICsgcGtnLCBUcnVlKSBvciAiIikKKworICAgICAgICBmb3IgZGVwZW5kIGluIGRlcGVuZHM6CisgICAgICAgICAgICBpZiBkZXBlbmQuZmluZCgnLW5hdGl2ZScpICE9IC0xIG9yIGRlcGVuZC5maW5kKCctY3Jvc3MnKSAhPSAtMSBvciBkZXBlbmQuc3RhcnRzd2l0aCgndmlydHVhbC8nKToKKyAgICAgICAgICAgICAgICAjYmIubm90ZSgiU2tpcHBpbmcgJXMiICUgZGVwZW5kKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBkZXBlbmQuZW5kc3dpdGgoJy1kZXYnKToKKyAgICAgICAgICAgICAgICBkZXBlbmQgPSBkZXBlbmRbOi00XQorICAgICAgICAgICAgaWYgZGVwZW5kLmVuZHN3aXRoKCctZGJnJyk6CisgICAgICAgICAgICAgICAgZGVwZW5kID0gZGVwZW5kWzotNF0KKyAgICAgICAgICAgIHBrZ25hbWUgPSBnZXRuYW1lKGRlcGVuZCwgc3VmZml4KQorICAgICAgICAgICAgI2JiLm5vdGUoIkFkZGluZyAlcyBmb3IgJXMiICUgKHBrZ25hbWUsIGRlcGVuZCkpCisgICAgICAgICAgICBpZiBwa2duYW1lIG5vdCBpbiBycmVjbGlzdCBhbmQgcGtnbmFtZSAhPSBwa2c6CisgICAgICAgICAgICAgICAgcnJlY2xpc3RbcGtnbmFtZV0gPSBbXQorCisgICAgICAgICNiYi5ub3RlKCdzZXR0aW5nOiBSUkVDT01NRU5EU18lcz0lcycgJSAocGtnLCAnICcuam9pbihycmVjbGlzdCkpKQorICAgICAgICBkLnNldFZhcignUlJFQ09NTUVORFNfJXMnICUgcGtnLCBiYi51dGlscy5qb2luX2RlcHMocnJlY2xpc3QsIGNvbW1hc2VwPUZhbHNlKSkKKworICAgIGRlZiBwa2dfYWRkcnJlY3MocGtnLCBiYXNlLCBzdWZmaXgsIGdldG5hbWUsIHJkZXBlbmRzLCBkKToKKworICAgICAgICAjYmIubm90ZSgncmRlcGVuZHMgZm9yICVzIGlzICVzJyAlIChiYXNlLCByZGVwZW5kcykpCisgICAgICAgIHJyZWNsaXN0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGQuZ2V0VmFyKCdSUkVDT01NRU5EU18nICsgcGtnLCBUcnVlKSBvciAiIikKKworICAgICAgICBmb3IgZGVwZW5kIGluIHJkZXBlbmRzOgorICAgICAgICAgICAgaWYgZGVwZW5kLmZpbmQoJ3ZpcnR1YWwtbG9jYWxlLScpICE9IC0xOgorICAgICAgICAgICAgICAgICNiYi5ub3RlKCJTa2lwcGluZyAlcyIgJSBkZXBlbmQpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGRlcGVuZC5lbmRzd2l0aCgnLWRldicpOgorICAgICAgICAgICAgICAgIGRlcGVuZCA9IGRlcGVuZFs6LTRdCisgICAgICAgICAgICBpZiBkZXBlbmQuZW5kc3dpdGgoJy1kYmcnKToKKyAgICAgICAgICAgICAgICBkZXBlbmQgPSBkZXBlbmRbOi00XQorICAgICAgICAgICAgcGtnbmFtZSA9IGdldG5hbWUoZGVwZW5kLCBzdWZmaXgpCisgICAgICAgICAgICAjYmIubm90ZSgiQWRkaW5nICVzIGZvciAlcyIgJSAocGtnbmFtZSwgZGVwZW5kKSkKKyAgICAgICAgICAgIGlmIHBrZ25hbWUgbm90IGluIHJyZWNsaXN0IGFuZCBwa2duYW1lICE9IHBrZzoKKyAgICAgICAgICAgICAgICBycmVjbGlzdFtwa2duYW1lXSA9IFtdCisKKyAgICAgICAgI2JiLm5vdGUoJ3NldHRpbmc6IFJSRUNPTU1FTkRTXyVzPSVzJyAlIChwa2csICcgJy5qb2luKHJyZWNsaXN0KSkpCisgICAgICAgIGQuc2V0VmFyKCdSUkVDT01NRU5EU18lcycgJSBwa2csIGJiLnV0aWxzLmpvaW5fZGVwcyhycmVjbGlzdCwgY29tbWFzZXA9RmFsc2UpKQorCisgICAgZGVmIGFkZF9kZXAobGlzdCwgZGVwKToKKyAgICAgICAgaWYgZGVwIG5vdCBpbiBsaXN0OgorICAgICAgICAgICAgbGlzdC5hcHBlbmQoZGVwKQorCisgICAgZGVwZW5kcyA9IFtdCisgICAgZm9yIGRlcCBpbiBiYi51dGlscy5leHBsb2RlX2RlcHMoZC5nZXRWYXIoJ0RFUEVORFMnLCBUcnVlKSBvciAiIik6CisgICAgICAgIGFkZF9kZXAoZGVwZW5kcywgZGVwKQorCisgICAgcmRlcGVuZHMgPSBbXQorICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgZm9yIGRlcCBpbiBiYi51dGlscy5leHBsb2RlX2RlcHMoZC5nZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIFRydWUpIG9yICIiKToKKyAgICAgICAgICAgIGFkZF9kZXAocmRlcGVuZHMsIGRlcCkKKworICAgICNiYi5ub3RlKCdyZGVwZW5kcyBpcyAlcycgJSByZGVwZW5kcykKKworICAgIGRlZiBwb3N0X2dldG5hbWUobmFtZSwgc3VmZml4KToKKyAgICAgICAgcmV0dXJuICclcyVzJyAlIChuYW1lLCBzdWZmaXgpCisgICAgZGVmIHByZV9nZXRuYW1lKG5hbWUsIHN1ZmZpeCk6CisgICAgICAgIHJldHVybiAnJXMlcycgJSAoc3VmZml4LCBuYW1lKQorCisgICAgcGtncyA9IHt9CisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBmb3IgcG9zdGZpeCBpbiBwb3N0Zml4ZXM6CisgICAgICAgICAgICBpZiBwa2cuZW5kc3dpdGgocG9zdGZpeCk6CisgICAgICAgICAgICAgICAgaWYgbm90IHBvc3RmaXggaW4gcGtnczoKKyAgICAgICAgICAgICAgICAgICAgcGtnc1twb3N0Zml4XSA9IHt9CisgICAgICAgICAgICAgICAgcGtnc1twb3N0Zml4XVtwa2ddID0gKHBrZ1s6LWxlbihwb3N0Zml4KV0sIHBvc3RfZ2V0bmFtZSkKKworICAgICAgICBmb3IgcHJlZml4IGluIHByZWZpeGVzOgorICAgICAgICAgICAgaWYgcGtnLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgICAgICAgICBpZiBub3QgcHJlZml4IGluIHBrZ3M6CisgICAgICAgICAgICAgICAgICAgIHBrZ3NbcHJlZml4XSA9IHt9CisgICAgICAgICAgICAgICAgcGtnc1twcmVmaXhdW3BrZ10gPSAocGtnWzotbGVuKHByZWZpeCldLCBwcmVfZ2V0bmFtZSkKKworICAgIGlmICItZGJnIiBpbiBwa2dzOgorICAgICAgICBwa2dsaWJkZXBzID0gcmVhZF9saWJkZXBfZmlsZXMoZCkKKyAgICAgICAgcGtnbGliZGVwbGlzdCA9IFtdCisgICAgICAgIGZvciBwa2cgaW4gcGtnbGliZGVwczoKKyAgICAgICAgICAgIGZvciBrIGluIHBrZ2xpYmRlcHNbcGtnXToKKyAgICAgICAgICAgICAgICBhZGRfZGVwKHBrZ2xpYmRlcGxpc3QsIGspCisgICAgICAgICMgRklYTUUgdGhpcyBzaG91bGQgbm90IGxvb2sgYXQgUE4gb25jZSBhbGwgdGFzayByZWNpcGVzIGluaGVyaXQgZnJvbSB0YXNrLmJiY2xhc3MKKyAgICAgICAgZGJnZGVmYXVsdGRlcHMgPSAoKGQuZ2V0VmFyKCdERVBDSEFJTl9EQkdERUZBVUxUREVQUycsIFRydWUpID09ICcxJykgb3IgKGQuZ2V0VmFyKCdQTicsIFRydWUpIG9yICcnKS5zdGFydHN3aXRoKCdwYWNrYWdlZ3JvdXAtJykpCisKKyAgICBmb3Igc3VmZml4IGluIHBrZ3M6CisgICAgICAgIGZvciBwa2cgaW4gcGtnc1tzdWZmaXhdOgorICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdSUkVDT01NRU5EU18nICsgcGtnLCAnbm9kZXBycmVjcycpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAoYmFzZSwgZnVuYykgPSBwa2dzW3N1ZmZpeF1bcGtnXQorICAgICAgICAgICAgaWYgc3VmZml4ID09ICItZGV2IjoKKyAgICAgICAgICAgICAgICBwa2dfYWRkZGVwcnJlY3MocGtnLCBiYXNlLCBzdWZmaXgsIGZ1bmMsIGRlcGVuZHMsIGQpCisgICAgICAgICAgICBlbGlmIHN1ZmZpeCA9PSAiLWRiZyI6CisgICAgICAgICAgICAgICAgaWYgbm90IGRiZ2RlZmF1bHRkZXBzOgorICAgICAgICAgICAgICAgICAgICBwa2dfYWRkcnJlY3MocGtnLCBiYXNlLCBzdWZmaXgsIGZ1bmMsIHBrZ2xpYmRlcGxpc3QsIGQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsZW4ocGtnc1tzdWZmaXhdKSA9PSAxOgorICAgICAgICAgICAgICAgIHBrZ19hZGRycmVjcyhwa2csIGJhc2UsIHN1ZmZpeCwgZnVuYywgcmRlcGVuZHMsIGQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJkZXBzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZhcignUkRFUEVORFNfJyArIGJhc2UsIFRydWUpIG9yICIiKToKKyAgICAgICAgICAgICAgICAgICAgYWRkX2RlcChyZGVwcywgZGVwKQorICAgICAgICAgICAgICAgIHBrZ19hZGRycmVjcyhwa2csIGJhc2UsIHN1ZmZpeCwgZnVuYywgcmRlcHMsIGQpCit9CisKKyMgU2luY2UgYml0YmFrZSBjYW4ndCBkZXRlcm1pbmUgd2hpY2ggdmFyaWFibGVzIGFyZSBhY2Nlc3NlZCBkdXJpbmcgcGFja2FnZQorIyBpdGVyYXRpb24sIHdlIG5lZWQgdG8gbGlzdCB0aGVtIGhlcmU6CitQQUNLQUdFVkFSUyA9ICJGSUxFUyBSREVQRU5EUyBSUkVDT01NRU5EUyBTVU1NQVJZIERFU0NSSVBUSU9OIFJTVUdHRVNUUyBSUFJPVklERVMgUkNPTkZMSUNUUyBQS0cgQUxMT1dfRU1QVFkgcGtnX3Bvc3RpbnN0IHBrZ19wb3N0cm0gSU5JVFNDUklQVF9OQU1FIElOSVRTQ1JJUFRfUEFSQU1TIERFQklBTl9OT0FVVE9OQU1FIEFMVEVSTkFUSVZFIFBLR0UgUEtHViBQS0dSIFVTRVJBRERfUEFSQU0gR1JPVVBBRERfUEFSQU0gQ09ORkZJTEVTIFNZU1RFTURfU0VSVklDRSBMSUNFTlNFIFNFQ1RJT04gcGtnX3ByZWluc3QgcGtnX3ByZXJtIFJSRVBMQUNFUyBHUk9VUE1FTVNfUEFSQU0gU1lTVEVNRF9BVVRPX0VOQUJMRSIKKworZGVmIGdlbl9wYWNrYWdldmFyKGQpOgorICAgIHJldCA9IFtdCisgICAgcGtncyA9IChkLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIHZhcnMgPSAoZC5nZXRWYXIoIlBBQ0tBR0VWQVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBmb3IgcCBpbiBwa2dzOgorICAgICAgICBmb3IgdiBpbiB2YXJzOgorICAgICAgICAgICAgcmV0LmFwcGVuZCh2ICsgIl8iICsgcCkKKworICAgICAgICAjIEVuc3VyZSB0aGF0IGNoYW5nZXMgdG8gSU5DT01QQVRJQkxFX0xJQ0VOU0UgcmUtcnVuIGRvX3BhY2thZ2UgZm9yCisgICAgICAgICMgYWZmZWN0ZWQgcmVjaXBlcy4KKyAgICAgICAgcmV0LmFwcGVuZCgnTElDRU5TRV9FWENMVVNJT04tJXMnICUgcCkKKyAgICByZXR1cm4gIiAiLmpvaW4ocmV0KQorCitQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgPz0gIiIKKyMgRnVuY3Rpb25zIGZvciBzZXR0aW5nIHVwIFBLR0QKK1BBQ0tBR0VCVUlMRFBLR0QgPz0gIiBcCisgICAgICAgICAgICAgICAgcGVyZm9ybV9wYWNrYWdlY29weSBcCisgICAgICAgICAgICAgICAgJHtQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1N9IFwKKyAgICAgICAgICAgICAgICBzcGxpdF9hbmRfc3RyaXBfZmlsZXMgXAorICAgICAgICAgICAgICAgIGZpeHVwX3Blcm1zIFwKKyAgICAgICAgICAgICAgICAiCisjIEZ1bmN0aW9ucyB3aGljaCBzcGxpdCBQS0dEIHVwIGludG8gc2VwYXJhdGUgcGFja2FnZXMKK1BBQ0tBR0VTUExJVEZVTkNTID89ICIgXAorICAgICAgICAgICAgICAgIHBhY2thZ2VfZG9fc3BsaXRfbG9jYWxlcyBcCisgICAgICAgICAgICAgICAgcG9wdWxhdGVfcGFja2FnZXMiCisjIEZ1bmN0aW9ucyB3aGljaCBwcm9jZXNzIG1ldGFkYXRhIGJhc2VkIG9uIHNwbGl0IHBhY2thZ2VzCitQQUNLQUdFRlVOQ1MgKz0gIiBcCisgICAgICAgICAgICAgICAgcGFja2FnZV9maXhzeW1saW5rcyBcCisgICAgICAgICAgICAgICAgcGFja2FnZV9uYW1lX2hvb2sgXAorICAgICAgICAgICAgICAgIHBhY2thZ2VfZG9fZmlsZWRlcHMgXAorICAgICAgICAgICAgICAgIHBhY2thZ2VfZG9fc2hsaWJzIFwKKyAgICAgICAgICAgICAgICBwYWNrYWdlX2RvX3BrZ2NvbmZpZyBcCisgICAgICAgICAgICAgICAgcmVhZF9zaGxpYmRlcHMgXAorICAgICAgICAgICAgICAgIHBhY2thZ2VfZGVwY2hhaW5zIFwKKyAgICAgICAgICAgICAgICBlbWl0X3BrZ2RhdGEiCisKK3B5dGhvbiBkb19wYWNrYWdlICgpIHsKKyAgICAjIENoYW5nZSB0aGUgZm9sbG93aW5nIHZlcnNpb24gdG8gY2F1c2Ugc3N0YXRlIHRvIGludmFsaWRhdGUgdGhlIHBhY2thZ2UKKyAgICAjIGNhY2hlLiAgVGhpcyBpcyB1c2VmdWwgaWYgYW4gaXRlbSB0aGlzIGNsYXNzIGRlcGVuZHMgb24gY2hhbmdlcyBpbiBhCisgICAgIyB3YXkgdGhhdCB0aGUgb3V0cHV0IG9mIHRoaXMgY2xhc3MgY2hhbmdlcy4gIHJwbWRlcHMgaXMgYSBnb29kIGV4YW1wbGUKKyAgICAjIGFzIGFueSBjaGFuZ2UgdG8gcnBtZGVwcyByZXF1aXJlcyB0aGlzIHRvIGJlIHJlcnVuLgorICAgICMgUEFDS0FHRV9CQkNMQVNTX1ZFUlNJT04gPSAiMSIKKworICAgICMgSW5pdCBjYWNoZWRwYXRoCisgICAgZ2xvYmFsIGNwYXRoCisgICAgY3BhdGggPSBvZS5jYWNoZWRwYXRoLkNhY2hlZFBhdGgoKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBTYW5pdHkgdGVzdCB0aGUgc2V0dXAKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgIHBhY2thZ2VzID0gKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbGVuKHBhY2thZ2VzKSA8IDE6CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBwYWNrYWdlcyB0byBidWlsZCwgc2tpcHBpbmcgZG9fcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBvdXRkaXIgPSBkLmdldFZhcignREVQTE9ZX0RJUicsIFRydWUpCisgICAgZGVzdCA9IGQuZ2V0VmFyKCdEJywgVHJ1ZSkKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgIGlmIG5vdCB3b3JrZGlyIG9yIG5vdCBvdXRkaXIgb3Igbm90IGRlc3Qgb3Igbm90IGR2YXIgb3Igbm90IHBuOgorICAgICAgICBtc2cgPSAiV09SS0RJUiwgREVQTE9ZX0RJUiwgRCwgUE4gYW5kIFBLR0QgYWxsIG11c3QgYmUgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiCisgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJ2YXItdW5kZWZpbmVkIiwgbXNnLCBkKQorICAgICAgICByZXR1cm4KKworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygicGFja2FnZV9nZXRfYXV0b19wciIsIGQpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIE9wdGltaXNhdGlvbnMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgQ29udGludWFsbHkgZXhwYW5kaW5nIGNvbXBsZXggZXhwcmVzc2lvbnMgaXMgaW5lZmZpY2llbnQsIHBhcnRpY3VsYXJseQorICAgICMgd2hlbiB3ZSB3cml0ZSB0byB0aGUgZGF0YXN0b3JlIGFuZCBpbnZhbGlkYXRlIHRoZSBleHBhbnNpb24gY2FjaGUuIFRoaXMKKyAgICAjIGNvZGUgcHJlLWV4cGFuZHMgc29tZSBmcmVxdWVudGx5IHVzZWQgdmFyaWFibGVzCisKKyAgICBkZWYgZXhwYW5kVmFyKHgsIGQpOgorICAgICAgICBkLnNldFZhcih4LCBkLmdldFZhcih4LCBUcnVlKSkKKworICAgIGZvciB4IGluICdQTicsICdQVicsICdCUE4nLCAnVEFSR0VUX1NZUycsICdFWFRFTkRQUkFVVE8nOgorICAgICAgICBleHBhbmRWYXIoeCwgZCkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgU2V0dXAgUEtHRCAoZnJvbSBEKQorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgZm9yIGYgaW4gKGQuZ2V0VmFyKCdQQUNLQUdFQlVJTERQS0dEJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmLCBkKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBTcGxpdCB1cCBQS0dEIGludG8gUEtHREVTVAorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgY3BhdGggPSBvZS5jYWNoZWRwYXRoLkNhY2hlZFBhdGgoKQorCisgICAgZm9yIGYgaW4gKGQuZ2V0VmFyKCdQQUNLQUdFU1BMSVRGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZiwgZCkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgUHJvY2VzcyBQS0dERVNUCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjIEJ1aWxkIGdsb2JhbCBsaXN0IG9mIGZpbGVzIGluIGVhY2ggc3BsaXQgcGFja2FnZQorICAgIGdsb2JhbCBwa2dmaWxlcworICAgIHBrZ2ZpbGVzID0ge30KKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIHBrZ2ZpbGVzW3BrZ10gPSBbXQorICAgICAgICBmb3Igd2Fsa3Jvb3QsIGRpcnMsIGZpbGVzIGluIGNwYXRoLndhbGsocGtnZGVzdCArICIvIiArIHBrZyk6CisgICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBwa2dmaWxlc1twa2ddLmFwcGVuZCh3YWxrcm9vdCArIG9zLnNlcCArIGZpbGUpCisKKyAgICBmb3IgZiBpbiAoZC5nZXRWYXIoJ1BBQ0tBR0VGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZiwgZCkKK30KKworZG9fcGFja2FnZVtkaXJzXSA9ICIke1NITElCU1dPUktESVJ9ICR7UEtHREVTVFdPUkt9ICR7RH0iCitkb19wYWNrYWdlW3ZhcmRlcHNdICs9ICIke1BBQ0tBR0VCVUlMRFBLR0R9ICR7UEFDS0FHRVNQTElURlVOQ1N9ICR7UEFDS0FHRUZVTkNTfSAke0BnZW5fcGFja2FnZXZhcihkKX0iCithZGR0YXNrIHBhY2thZ2UgYWZ0ZXIgZG9faW5zdGFsbAorCitQQUNLQUdFTE9DSyA9ICIke1NUQUdJTkdfRElSfS9wYWNrYWdlLW91dHB1dC5sb2NrIgorU1NUQVRFVEFTS1MgKz0gImRvX3BhY2thZ2UiCitkb19wYWNrYWdlW2NsZWFuZGlyc10gPSAiJHtQS0dERVNUfSAke1BLR0RFU1RXT1JLfSIKK2RvX3BhY2thZ2Vbc3N0YXRlLXBsYWluZGlyc10gPSAiJHtQS0dEfSAke1BLR0RFU1R9ICR7UEtHREVTVFdPUkt9IgorZG9fcGFja2FnZVtzc3RhdGUtbG9ja2ZpbGUtc2hhcmVkXSA9ICIke1BBQ0tBR0VMT0NLfSIKK2RvX3BhY2thZ2Vfc2V0c2NlbmVbZGlyc10gPSAiJHtTVEFHSU5HX0RJUn0iCisKK3B5dGhvbiBkb19wYWNrYWdlX3NldHNjZW5lICgpIHsKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fcGFja2FnZV9zZXRzY2VuZQorCitkb19wYWNrYWdlZGF0YSAoKSB7CisJOgorfQorCithZGR0YXNrIHBhY2thZ2VkYXRhIGJlZm9yZSBkb19idWlsZCBhZnRlciBkb19wYWNrYWdlCisKK1NTVEFURVRBU0tTICs9ICJkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2VkYXRhW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7UEtHREVTVFdPUkt9IgorZG9fcGFja2FnZWRhdGFbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7UEtHREFUQV9ESVJ9IgorZG9fcGFja2FnZWRhdGFbc3N0YXRlLWxvY2tmaWxlLXNoYXJlZF0gPSAiJHtQQUNLQUdFTE9DS30iCitkb19wYWNrYWdlZGF0YVtzdGFtcC1leHRyYS1pbmZvXSA9ICIke01BQ0hJTkV9IgorCitweXRob24gZG9fcGFja2FnZWRhdGFfc2V0c2NlbmUgKCkgeworICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorfQorYWRkdGFzayBkb19wYWNrYWdlZGF0YV9zZXRzY2VuZQorCisjCisjIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBwYWNrYWdlIHdyaXRpbmcgY2xhc3NlcworIworCitkZWYgbWFwcGluZ19yZW5hbWVfaG9vayhkKToKKyAgICAiIiIKKyAgICBSZXdyaXRlIHZhcmlhYmxlcyB0byBhY2NvdW50IGZvciBwYWNrYWdlIHJlbmFtaW5nIGluIHRoaW5ncworICAgIGxpa2UgZGViaWFuLmJiY2xhc3Mgb3IgbWFudWFsIFBLRyB2YXJpYWJsZSBuYW1lIGNoYW5nZXMKKyAgICAiIiIKKyAgICBwa2cgPSBkLmdldFZhcigiUEtHIiwgVHJ1ZSkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJSREVQRU5EUyIsIHBrZywgZCkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJSUkVDT01NRU5EUyIsIHBrZywgZCkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJSU1VHR0VTVFMiLCBwa2csIGQpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfZGViLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX2RlYi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZmVhNGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX2RlYi5iYmNsYXNzCkBAIC0wLDAgKzEsMzM4IEBACisjCisjIENvcHlyaWdodCAyMDA2LTIwMDggT3BlbmVkSGFuZCBMdGQuCisjCisKK2luaGVyaXQgcGFja2FnZQorCitJTUFHRV9QS0dUWVBFID89ICJkZWIiCisKK0RQS0dfQVJDSCA/PSAiJHtUQVJHRVRfQVJDSH0iIAorCitQS0dXUklURURJUkRFQiA9ICIke1dPUktESVJ9L2RlcGxveS1kZWJzIgorCitBUFRDT05GX1RBUkdFVCA9ICIke1dPUktESVJ9IgorCitBUFRfQVJHUyA9ICIke0BbJycsICctLW5vLWluc3RhbGwtcmVjb21tZW5kcyddW2QuZ2V0VmFyKCJOT19SRUNPTU1FTkRBVElPTlMiLCBUcnVlKSA9PSAiMSJdfSIKKworIworIyBpbnN0YWxsIGEgYnVuY2ggb2YgcGFja2FnZXMgdXNpbmcgYXB0CisjIHRoZSBmb2xsb3dpbmcgc2hlbGwgdmFyaWFibGVzIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmM6CisjIElOU1RBTExfUk9PVEZTX0RFQiAtIGluc3RhbGwgcm9vdCBkaXIKKyMgSU5TVEFMTF9CQVNFQVJDSF9ERUIgLSBpbnN0YWxsIGJhc2UgYXJjaGl0ZWN1dHJlCisjIElOU1RBTExfQVJDSFNfREVCIC0gbGlzdCBvZiBhdmFpbGFibGUgYXJjaHMKKyMgSU5TVEFMTF9QQUNLQUdFU19OT1JNQUxfREVCIC0gcGFja2FnZXMgdG8gYmUgaW5zdGFsbGVkCisjIElOU1RBTExfUEFDS0FHRVNfQVRURU1QVE9OTFlfREVCIC0gcGFja2FnZXMgYXR0ZW1wZWQgdG8gYmUgaW5zdGFsbGVkIG9ubHkKKyMgSU5TVEFMTF9QQUNLQUdFU19MSU5HVUFTX0RFQiAtIGFkZGl0aW9uYWwgcGFja2FnZXMgZm9yIHVjbGliYworIyBJTlNUQUxMX1RBU0tfREVCIC0gdGFzayBuYW1lCisKK3B5dGhvbiBkb19wYWNrYWdlX2RlYiAoKSB7CisgICAgaW1wb3J0IHJlLCBjb3B5CisgICAgaW1wb3J0IHRleHR3cmFwCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgaWYgbm90IHdvcmtkaXI6CisgICAgICAgIGJiLmVycm9yKCJXT1JLRElSIG5vdCBkZWZpbmVkLCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgb3V0ZGlyID0gZC5nZXRWYXIoJ1BLR1dSSVRFRElSREVCJywgVHJ1ZSkKKyAgICBpZiBub3Qgb3V0ZGlyOgorICAgICAgICBiYi5lcnJvcigiUEtHV1JJVEVESVJERUIgbm90IGRlZmluZWQsIHVuYWJsZSB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgaWYgbm90IHBhY2thZ2VzOgorICAgICAgICBiYi5kZWJ1ZygxLCAiUEFDS0FHRVMgbm90IGRlZmluZWQsIG5vdGhpbmcgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisKKyAgICBpZiBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKHRtcGRpciwgInN0YW1wcyIsICJERUJfUEFDS0FHRV9JTkRFWF9DTEVBTiIpLG9zLlJfT0spOgorICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKHRtcGRpciwgInN0YW1wcyIsICJERUJfUEFDS0FHRV9JTkRFWF9DTEVBTiIpKQorCisgICAgaWYgcGFja2FnZXMgPT0gW106CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBwYWNrYWdlczsgbm90aGluZyB0byBkbyIpCisgICAgICAgIHJldHVybgorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIGRlZiBjbGVhbnVwY29udHJvbChyb290KToKKyAgICAgICAgZm9yIHAgaW4gWydDT05UUk9MJywgJ0RFQklBTiddOgorICAgICAgICAgICAgcCA9IG9zLnBhdGguam9pbihyb290LCBwKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocCk6CisgICAgICAgICAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIocCkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIHJvb3QgPSAiJXMvJXMiICUgKHBrZ2Rlc3QsIHBrZykKKworICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKHJvb3QgKyAiLmxvY2siKQorCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1JPT1QnLCAnJykKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUk9PVF8lcycgJSBwa2csIHJvb3QpCisgICAgICAgIHBrZ25hbWUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcGtnbmFtZToKKyAgICAgICAgICAgIHBrZ25hbWUgPSBwa2cKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUEtHJywgcGtnbmFtZSkKKworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBkLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjoiICsgcGtnKQorCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShyb290KSkKKworICAgICAgICBwa2dvdXRkaXIgPSBvcy5wYXRoLmpvaW4ob3V0ZGlyLCBsb2NhbGRhdGEuZ2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCBUcnVlKSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBrZ291dGRpcikKKworICAgICAgICBvcy5jaGRpcihyb290KQorICAgICAgICBjbGVhbnVwY29udHJvbChyb290KQorICAgICAgICBmcm9tIGdsb2IgaW1wb3J0IGdsb2IKKyAgICAgICAgZyA9IGdsb2IoJyonKQorICAgICAgICBpZiBub3QgZyBhbmQgbG9jYWxkYXRhLmdldFZhcignQUxMT1dfRU1QVFknLCBGYWxzZSkgIT0gIjEiOgorICAgICAgICAgICAgYmIubm90ZSgiTm90IGNyZWF0aW5nIGVtcHR5IGFyY2hpdmUgZm9yICVzLSVzLSVzIiAlIChwa2csIGxvY2FsZGF0YS5nZXRWYXIoJ1BLR1YnLCBUcnVlKSwgbG9jYWxkYXRhLmdldFZhcignUEtHUicsIFRydWUpKSkKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGNvbnRyb2xkaXIgPSBvcy5wYXRoLmpvaW4ocm9vdCwgJ0RFQklBTicpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihjb250cm9sZGlyKQorICAgICAgICBvcy5jaG1vZChjb250cm9sZGlyLCAwNzU1KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgY29kZWNzCisgICAgICAgICAgICBjdHJsZmlsZSA9IGNvZGVjcy5vcGVuKG9zLnBhdGguam9pbihjb250cm9sZGlyLCAnY29udHJvbCcpLCAndycsICd1dGYtOCcpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuIGNvbnRyb2wgZmlsZSBmb3Igd3JpdGluZy4iKQorCisgICAgICAgIGZpZWxkcyA9IFtdCisgICAgICAgIHBlID0gZC5nZXRWYXIoJ1BLR0UnLCBUcnVlKQorICAgICAgICBpZiBwZSBhbmQgaW50KHBlKSA+IDA6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKFsiVmVyc2lvbjogJXM6JXMtJXNcbiIsIFsnUEtHRScsICdQS0dWJywgJ1BLR1InXV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKFsiVmVyc2lvbjogJXMtJXNcbiIsIFsnUEtHVicsICdQS0dSJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiRGVzY3JpcHRpb246ICVzXG4iLCBbJ0RFU0NSSVBUSU9OJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiU2VjdGlvbjogJXNcbiIsIFsnU0VDVElPTiddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIlByaW9yaXR5OiAlc1xuIiwgWydQUklPUklUWSddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIk1haW50YWluZXI6ICVzXG4iLCBbJ01BSU5UQUlORVInXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJBcmNoaXRlY3R1cmU6ICVzXG4iLCBbJ0RQS0dfQVJDSCddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIk9FOiAlc1xuIiwgWydQTiddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIlBhY2thZ2VBcmNoOiAlc1xuIiwgWydQQUNLQUdFX0FSQ0gnXV0pCisgICAgICAgIGlmIGQuZ2V0VmFyKCdIT01FUEFHRScsIFRydWUpOgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZChbIkhvbWVwYWdlOiAlc1xuIiwgWydIT01FUEFHRSddXSkKKworICAgICAgICAjIFBhY2thZ2UsIFZlcnNpb24sIE1haW50YWluZXIsIERlc2NyaXB0aW9uIC0gbWFuZGF0b3J5CisgICAgICAgICMgU2VjdGlvbiwgUHJpb3JpdHksIEVzc2VudGlhbCwgQXJjaGl0ZWN0dXJlLCBTb3VyY2UsIERlcGVuZHMsIFByZS1EZXBlbmRzLCBSZWNvbW1lbmRzLCBTdWdnZXN0cywgQ29uZmxpY3RzLCBSZXBsYWNlcywgUHJvdmlkZXMgLSBPcHRpb25hbAorCisKKyAgICAgICAgZGVmIHB1bGxEYXRhKGwsIGQpOgorICAgICAgICAgICAgbDIgPSBbXQorICAgICAgICAgICAgZm9yIGkgaW4gbDoKKyAgICAgICAgICAgICAgICBkYXRhID0gZC5nZXRWYXIoaSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKGYpCisgICAgICAgICAgICAgICAgaWYgaSA9PSAnRFBLR19BUkNIJyBhbmQgZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSCcsIFRydWUpID09ICdhbGwnOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gJ2FsbCcKKyAgICAgICAgICAgICAgICBlbGlmIGkgPT0gJ1BBQ0tBR0VfQVJDSCcgb3IgaSA9PSAnRFBLR19BUkNIJzoKKyAgICAgICAgICAgICAgICAgICAjIFRoZSBwYXJhbXMgaW4gZGViIHBhY2thZ2UgY29udHJvbCBkb24ndCBhbGxvdyBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAjIGBfJywgc28gY2hhbmdlIHRoZSBhcmNoJ3MgYF8nIHRvIGAtJy4gU3VjaCBhcyBgeDg2XzY0JworICAgICAgICAgICAgICAgICAgICMgLS0+YHg4Ni02NCcKKyAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKCdfJywgJy0nKQorICAgICAgICAgICAgICAgIGwyLmFwcGVuZChkYXRhKQorICAgICAgICAgICAgcmV0dXJuIGwyCisKKyAgICAgICAgY3RybGZpbGUud3JpdGUoIlBhY2thZ2U6ICVzXG4iICUgcGtnbmFtZSkKKyAgICAgICAgIyBjaGVjayBmb3IgcmVxdWlyZWQgZmllbGRzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciAoYywgZnMpIGluIGZpZWxkczoKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmczoKKyAgICAgICAgICAgICAgICAgICAgIGlmIGxvY2FsZGF0YS5nZXRWYXIoZiwgRmFsc2UpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoZikKKyAgICAgICAgICAgICAgICAjIFNwZWNpYWwgYmVoYXZpb3IgZm9yIGRlc2NyaXB0aW9uLi4uCisgICAgICAgICAgICAgICAgaWYgJ0RFU0NSSVBUSU9OJyBpbiBmczoKKyAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkgPSBsb2NhbGRhdGEuZ2V0VmFyKCdTVU1NQVJZJywgVHJ1ZSkgb3IgbG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIKKyAgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCdEZXNjcmlwdGlvbjogJXNcbicgJSB1bmljb2RlKHN1bW1hcnksJ3V0Zi04JykpCisgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkgb3IgIi4iCisgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHRleHR3cmFwLmRlZGVudChkZXNjcmlwdGlvbikuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgaWYgJ1xcbicgaW4gZGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgIyBNYW51YWxseSBpbmRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiBkZXNjcmlwdGlvbi5zcGxpdCgnXFxuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgZG9uJ3QgbGltaXQgdGhlIHdpZHRoIHdoZW4gbWFudWFsbHkgaW5kZW50LCBidXQgd2UgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBuZWVkIHRoZSB0ZXh0d3JhcC5maWxsKCkgdG8gc2V0IHRoZSBpbml0aWFsX2luZGVudCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdWJzZXF1ZW50X2luZGVudCwgc28gc2V0IGEgbGFyZ2Ugd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoJyVzXG4nICUgdW5pY29kZSh0ZXh0d3JhcC5maWxsKHQsIHdpZHRoPTEwMDAwMCwgaW5pdGlhbF9pbmRlbnQ9JyAnLCBzdWJzZXF1ZW50X2luZGVudD0nICcpLCd1dGYtOCcpKQorICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAjIEF1dG8gaW5kZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoJyVzXG4nICUgdW5pY29kZSh0ZXh0d3JhcC5maWxsKGRlc2NyaXB0aW9uLnN0cmlwKCksIHdpZHRoPTc0LCBpbml0aWFsX2luZGVudD0nICcsIHN1YnNlcXVlbnRfaW5kZW50PScgJyksJ3V0Zi04JykpCisKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUodW5pY29kZShjICUgdHVwbGUocHVsbERhdGEoZnMsIGxvY2FsZGF0YSkpLCd1dGYtOCcpKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICAodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIGN0cmxmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIk1pc3NpbmcgZmllbGQgZm9yIGRlYiBnZW5lcmF0aW9uOiAlcyIgJSB2YWx1ZSkKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICBjdHJsZmlsZS5jbG9zZSgpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJOb24gVVRGLTggY2hhcmFjdGVycyBmb3VuZCBpbiBvbmUgb2YgdGhlIGZpZWxkcyIpCisKKyAgICAgICAgIyBtb3JlIGZpZWxkcworCisgICAgICAgIGN1c3RvbV9maWVsZHNfY2h1bmsgPSBnZXRfcGFja2FnZV9hZGRpdGlvbmFsX21ldGFkYXRhKCJkZWIiLCBsb2NhbGRhdGEpCisgICAgICAgIGlmIGN1c3RvbV9maWVsZHNfY2h1bmsgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSh1bmljb2RlKGN1c3RvbV9maWVsZHNfY2h1bmspKQorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlxuIikKKworICAgICAgICBtYXBwaW5nX3JlbmFtZV9ob29rKGxvY2FsZGF0YSkKKworICAgICAgICBkZWYgZGViaWFuX2NtcF9yZW1hcCh2YXIpOgorICAgICAgICAgICAgIyBkcGtnIGRvZXMgbm90IGFsbG93IGZvciAnKCcgb3IgJyknIGluIGEgZGVwZW5kZW5jeSBuYW1lCisgICAgICAgICAgICAjIHJlcGxhY2UgdGhlc2UgaW5zdGFuY2VzIHdpdGggJ19fJyBhbmQgJ19fJworICAgICAgICAgICAgIworICAgICAgICAgICAgIyBJbiBkZWJpYW4gJz4nIGFuZCAnPCcgZG8gbm90IG1lYW4gd2hhdCBpdCBhcHBlYXJzIHRoZXkgbWVhbgorICAgICAgICAgICAgIyAgICc8JyA9IGxlc3Mgb3IgZXF1YWwKKyAgICAgICAgICAgICMgICAnPicgPSBncmVhdGVyIG9yIGVxdWFsCisgICAgICAgICAgICAjIGFkanVzdCB0aGVzZSB0byB0aGUgJzw8JyBhbmQgJz4+JyBlcXVpdmFsZW50cworICAgICAgICAgICAgIworICAgICAgICAgICAgZm9yIGRlcCBpbiB2YXI6CisgICAgICAgICAgICAgICAgaWYgJygnIGluIGRlcDoKKyAgICAgICAgICAgICAgICAgICAgbmV3ZGVwID0gZGVwLnJlcGxhY2UoJygnLCAnX18nKQorICAgICAgICAgICAgICAgICAgICBuZXdkZXAgPSBuZXdkZXAucmVwbGFjZSgnKScsICdfXycpCisgICAgICAgICAgICAgICAgICAgIGlmIG5ld2RlcCAhPSBkZXA6CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJbbmV3ZGVwXSA9IHZhcltkZXBdCisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgdmFyW2RlcF0KKyAgICAgICAgICAgIGZvciBkZXAgaW4gdmFyOgorICAgICAgICAgICAgICAgIGZvciBpLCB2IGluIGVudW1lcmF0ZSh2YXJbZGVwXSk6CisgICAgICAgICAgICAgICAgICAgIGlmICh2IG9yICIiKS5zdGFydHN3aXRoKCI8ICIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyW2RlcF1baV0gPSB2YXJbZGVwXVtpXS5yZXBsYWNlKCI8ICIsICI8PCAiKQorICAgICAgICAgICAgICAgICAgICBlbGlmICh2IG9yICIiKS5zdGFydHN3aXRoKCI+ICIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyW2RlcF1baV0gPSB2YXJbZGVwXVtpXS5yZXBsYWNlKCI+ICIsICI+PiAiKQorCisgICAgICAgIHJkZXBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJERVBFTkRTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocmRlcGVuZHMpCisgICAgICAgIGZvciBkZXAgaW4gcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgaWYgJyonIGluIGRlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCByZGVwZW5kc1tkZXBdCisgICAgICAgIHJyZWNvbW1lbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJSRUNPTU1FTkRTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocnJlY29tbWVuZHMpCisgICAgICAgIGZvciBkZXAgaW4gcnJlY29tbWVuZHM6CisgICAgICAgICAgICAgICAgaWYgJyonIGluIGRlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBycmVjb21tZW5kc1tkZXBdCisgICAgICAgIHJzdWdnZXN0cyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSU1VHR0VTVFMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChyc3VnZ2VzdHMpCisgICAgICAgICMgRGVsaWJlcmF0ZWx5IGRyb3AgdmVyc2lvbiBpbmZvcm1hdGlvbiBoZXJlLCBub3Qgd2FudGVkL3N1cHBvcnRlZCBieSBkZWIKKyAgICAgICAgcnByb3ZpZGVzID0gZGljdC5mcm9ta2V5cyhiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUlBST1ZJREVTIiwgVHJ1ZSkgb3IgIiIpLCBbXSkKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycHJvdmlkZXMpCisgICAgICAgIHJyZXBsYWNlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSUkVQTEFDRVMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycmVwbGFjZXMpCisgICAgICAgIHJjb25mbGljdHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUkNPTkZMSUNUUyIsIFRydWUpIG9yICIiKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJjb25mbGljdHMpCisgICAgICAgIGlmIHJkZXBlbmRzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIkRlcGVuZHM6ICVzXG4iICUgdW5pY29kZShiYi51dGlscy5qb2luX2RlcHMocmRlcGVuZHMpKSkKKyAgICAgICAgaWYgcnN1Z2dlc3RzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlN1Z2dlc3RzOiAlc1xuIiAlIHVuaWNvZGUoYmIudXRpbHMuam9pbl9kZXBzKHJzdWdnZXN0cykpKQorICAgICAgICBpZiBycmVjb21tZW5kczoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJSZWNvbW1lbmRzOiAlc1xuIiAlIHVuaWNvZGUoYmIudXRpbHMuam9pbl9kZXBzKHJyZWNvbW1lbmRzKSkpCisgICAgICAgIGlmIHJwcm92aWRlczoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJQcm92aWRlczogJXNcbiIgJSB1bmljb2RlKGJiLnV0aWxzLmpvaW5fZGVwcyhycHJvdmlkZXMpKSkKKyAgICAgICAgaWYgcnJlcGxhY2VzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlJlcGxhY2VzOiAlc1xuIiAlIHVuaWNvZGUoYmIudXRpbHMuam9pbl9kZXBzKHJyZXBsYWNlcykpKQorICAgICAgICBpZiByY29uZmxpY3RzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIkNvbmZsaWN0czogJXNcbiIgJSB1bmljb2RlKGJiLnV0aWxzLmpvaW5fZGVwcyhyY29uZmxpY3RzKSkpCisgICAgICAgIGN0cmxmaWxlLmNsb3NlKCkKKworICAgICAgICBmb3Igc2NyaXB0IGluIFsicHJlaW5zdCIsICJwb3N0aW5zdCIsICJwcmVybSIsICJwb3N0cm0iXToKKyAgICAgICAgICAgIHNjcmlwdHZhciA9IGxvY2FsZGF0YS5nZXRWYXIoJ3BrZ18lcycgJSBzY3JpcHQsIFRydWUpCisgICAgICAgICAgICBpZiBub3Qgc2NyaXB0dmFyOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzY3JpcHR2YXIgPSBzY3JpcHR2YXIuc3RyaXAoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNjcmlwdGZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihjb250cm9sZGlyLCBzY3JpcHQpLCAndycpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuICVzIHNjcmlwdCBmaWxlIGZvciB3cml0aW5nLiIgJSBzY3JpcHQpCisKKyAgICAgICAgICAgIGlmIHNjcmlwdHZhci5zdGFydHN3aXRoKCIjISIpOgorICAgICAgICAgICAgICAgIHBvcyA9IHNjcmlwdHZhci5maW5kKCJcbiIpICsgMQorICAgICAgICAgICAgICAgIHNjcmlwdGZpbGUud3JpdGUoc2NyaXB0dmFyWzpwb3NdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwb3MgPSAwCisgICAgICAgICAgICAgICAgc2NyaXB0ZmlsZS53cml0ZSgiIyEvYmluL3NoXG4iKQorCisgICAgICAgICAgICAjIFByZXZlbnQgdGhlIHByZXJtL3Bvc3RybSBzY3JpcHRzIGZyb20gYmVpbmcgcnVuIGR1cmluZyBhbiB1cGdyYWRlCisgICAgICAgICAgICBpZiBzY3JpcHQgaW4gKCdwcmVybScsICdwb3N0cm0nKToKKyAgICAgICAgICAgICAgICBzY3JpcHRmaWxlLndyaXRlKCdbICIkMSIgIT0gInVwZ3JhZGUiIF0gfHwgZXhpdCAwXG4nKQorCisgICAgICAgICAgICBzY3JpcHRmaWxlLndyaXRlKHNjcmlwdHZhcltwb3M6XSkKKyAgICAgICAgICAgIHNjcmlwdGZpbGUud3JpdGUoJ1xuJykKKyAgICAgICAgICAgIHNjcmlwdGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsIHNjcmlwdCksIDA3NTUpCisKKyAgICAgICAgY29uZmZpbGVzX3N0ciA9ICcgJy5qb2luKGdldF9jb25mZmlsZXMocGtnLCBkKSkKKyAgICAgICAgaWYgY29uZmZpbGVzX3N0cjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb25mZmlsZXMgPSBvcGVuKG9zLnBhdGguam9pbihjb250cm9sZGlyLCAnY29uZmZpbGVzJyksICd3JykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gY29uZmZpbGVzIGZvciB3cml0aW5nLiIpCisgICAgICAgICAgICBmb3IgZiBpbiBjb25mZmlsZXNfc3RyLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob2UucGF0aC5qb2luKHJvb3QsIGYpKToKKyAgICAgICAgICAgICAgICAgICAgY29uZmZpbGVzLndyaXRlKCclc1xuJyAlIGYpCisgICAgICAgICAgICBjb25mZmlsZXMuY2xvc2UoKQorCisgICAgICAgIG9zLmNoZGlyKGJhc2VkaXIpCisgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgiUEFUSD1cIiVzXCIgZHBrZy1kZWIgLWIgJXMgJXMiICUgKGxvY2FsZGF0YS5nZXRWYXIoIlBBVEgiLCBUcnVlKSwgcm9vdCwgcGtnb3V0ZGlyKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgaWYgcmV0ICE9IDA6CisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiZHBrZy1kZWIgZXhlY3V0aW9uIGZhaWxlZCIpCisKKyAgICAgICAgY2xlYW51cGNvbnRyb2wocm9vdCkKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKK30KKyMgT3RoZXJ3aXNlIGFsbGFyY2ggcGFja2FnZXMgbWF5IGNoYW5nZSBkZXBlbmRpbmcgb24gb3ZlcnJpZGUgY29uZmlndXJhdGlvbgorZG9fcGFja2FnZV9kZWJbdmFyZGVwc2V4Y2x1ZGVdID0gIk9WRVJSSURFUyIKKworCitTU1RBVEVUQVNLUyArPSAiZG9fcGFja2FnZV93cml0ZV9kZWIiCitkb19wYWNrYWdlX3dyaXRlX2RlYltzc3RhdGUtaW5wdXRkaXJzXSA9ICIke1BLR1dSSVRFRElSREVCfSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke0RFUExPWV9ESVJfREVCfSIKKworcHl0aG9uIGRvX3BhY2thZ2Vfd3JpdGVfZGViX3NldHNjZW5lICgpIHsKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKworICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIkRFQl9QQUNLQUdFX0lOREVYX0NMRUFOIiksb3MuUl9PSyk6CisgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIkRFQl9QQUNLQUdFX0lOREVYX0NMRUFOIikpCisKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fcGFja2FnZV93cml0ZV9kZWJfc2V0c2NlbmUKKworcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSAhPSAnJzoKKyAgICAgICAgZGVwcyA9ICcgZHBrZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCB2aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JworICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2RlcGVuZHMnLCBkZXBzKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2Zha2Vyb290JywgIjEiKQorCisgICAgIyBNYXAgVEFSR0VUX0FSQ0ggdG8gRGViaWFuJ3MgaWRlYXMgYWJvdXQgYXJjaGl0ZWN0dXJlcworICAgIGRhcmNoID0gZC5nZXRWYXIoJ0RQS0dfQVJDSCcsIFRydWUpCisgICAgaWYgZGFyY2ggaW4gWyJ4ODYiLCAiaTQ4NiIsICJpNTg2IiwgImk2ODYiLCAicGVudGl1bSJdOgorICAgICAgICAgZC5zZXRWYXIoJ0RQS0dfQVJDSCcsICdpMzg2JykKKyAgICBlbGlmIGRhcmNoID09ICJ4ODZfNjQiOgorICAgICAgICAgZC5zZXRWYXIoJ0RQS0dfQVJDSCcsICdhbWQ2NCcpCisgICAgZWxpZiBkYXJjaCA9PSAiYXJtIjoKKyAgICAgICAgIGQuc2V0VmFyKCdEUEtHX0FSQ0gnLCAnYXJtZWwnKQorfQorCitweXRob24gZG9fcGFja2FnZV93cml0ZV9kZWIgKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygicmVhZF9zdWJwYWNrYWdlX21ldGFkYXRhIiwgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoImRvX3BhY2thZ2VfZGViIiwgZCkKK30KK2RvX3BhY2thZ2Vfd3JpdGVfZGViW2RpcnNdID0gIiR7UEtHV1JJVEVESVJERUJ9IgorZG9fcGFja2FnZV93cml0ZV9kZWJbY2xlYW5kaXJzXSA9ICIke1BLR1dSSVRFRElSREVCfSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW3VtYXNrXSA9ICIwMjIiCithZGR0YXNrIHBhY2thZ2Vfd3JpdGVfZGViIGFmdGVyIGRvX3BhY2thZ2VkYXRhIGRvX3BhY2thZ2UKKworCitQQUNLQUdFSU5ERVhERVBTICs9ICJkcGtnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorUEFDS0FHRUlOREVYREVQUyArPSAiYXB0LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitkb19idWlsZFtyZWNyZGVwdGFza10gKz0gImRvX3BhY2thZ2Vfd3JpdGVfZGViIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV9pcGsuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfaXBrLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRkN2E3ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfaXBrLmJiY2xhc3MKQEAgLTAsMCArMSwyODkgQEAKK2luaGVyaXQgcGFja2FnZQorCitJTUFHRV9QS0dUWVBFID89ICJpcGsiCisKK0lQS0dDT05GX1RBUkdFVCA9ICIke1dPUktESVJ9L29wa2cuY29uZiIKK0lQS0dDT05GX1NESyA9ICAiJHtXT1JLRElSfS9vcGtnLXNkay5jb25mIgorCitQS0dXUklURURJUklQSyA9ICIke1dPUktESVJ9L2RlcGxveS1pcGtzIgorCisjIFByb2dyYW0gdG8gYmUgdXNlZCB0byBidWlsZCBvcGtnIHBhY2thZ2VzCitPUEtHQlVJTERDTUQgPz89ICJvcGtnLWJ1aWxkIgorCitPUEtHX0FSR1MgPSAiLS1mb3JjZV9wb3N0aW5zdGFsbCAtLXByZWZlci1hcmNoLXRvLXZlcnNpb24iCitPUEtHX0FSR1MgKz0gIiR7QFsnJywgJy0tbm8taW5zdGFsbC1yZWNvbW1lbmRzJ11bZC5nZXRWYXIoIk5PX1JFQ09NTUVOREFUSU9OUyIsIFRydWUpID09ICIxIl19IgorT1BLR19BUkdTICs9ICIke0BbJycsICctLWFkZC1leGNsdWRlICcgKyAnIC0tYWRkLWV4Y2x1ZGUgJy5qb2luKChkLmdldFZhcignUEFDS0FHRV9FWENMVURFJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpXVsoZC5nZXRWYXIoIlBBQ0tBR0VfRVhDTFVERSIsIFRydWUpIG9yICIiKSAhPSAiIl19IgorCitPUEtHTElCRElSID0gIiR7bG9jYWxzdGF0ZWRpcn0vbGliIgorCitweXRob24gZG9fcGFja2FnZV9pcGsgKCkgeworICAgIGltcG9ydCByZSwgY29weQorICAgIGltcG9ydCB0ZXh0d3JhcAorICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIG91dGRpciA9IGQuZ2V0VmFyKCdQS0dXUklURURJUklQSycsIFRydWUpCisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBpZiBub3Qgd29ya2RpciBvciBub3Qgb3V0ZGlyIG9yIG5vdCB0bXBkaXI6CisgICAgICAgIGJiLmVycm9yKCJWYXJpYWJsZXMgaW5jb3JyZWN0bHkgc2V0LCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGlmIG5vdCBwYWNrYWdlcyBvciBwYWNrYWdlcyA9PSAnJzoKKyAgICAgICAgYmIuZGVidWcoMSwgIk5vIHBhY2thZ2VzOyBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIFdlJ3JlIGFib3V0IHRvIGFkZCBuZXcgcGFja2FnZXMgc28gdGhlIGluZGV4IG5lZWRzIHRvIGJlIGNoZWNrZWQKKyAgICAjIHNvIHJlbW92ZSB0aGUgYXBwcm9wcmlhdGUgc3RhbXAgZmlsZS4KKyAgICBpZiBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKHRtcGRpciwgInN0YW1wcyIsICJJUEtfUEFDS0FHRV9JTkRFWF9DTEVBTiIpLCBvcy5SX09LKToKKyAgICAgICAgb3MudW5saW5rKG9zLnBhdGguam9pbih0bXBkaXIsICJzdGFtcHMiLCAiSVBLX1BBQ0tBR0VfSU5ERVhfQ0xFQU4iKSkKKworICAgIGRlZiBjbGVhbnVwY29udHJvbChyb290KToKKyAgICAgICAgZm9yIHAgaW4gWydDT05UUk9MJywgJ0RFQklBTiddOgorICAgICAgICAgICAgcCA9IG9zLnBhdGguam9pbihyb290LCBwKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocCk6CisgICAgICAgICAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIocCkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIHJvb3QgPSAiJXMvJXMiICUgKHBrZ2Rlc3QsIHBrZykKKworICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKHJvb3QgKyAiLmxvY2siKQorCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1JPT1QnLCAnJykKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUk9PVF8lcycgJSBwa2csIHJvb3QpCisgICAgICAgIHBrZ25hbWUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcGtnbmFtZToKKyAgICAgICAgICAgIHBrZ25hbWUgPSBwa2cKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUEtHJywgcGtnbmFtZSkKKworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBkLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjoiICsgcGtnKQorCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShyb290KSkKKyAgICAgICAgYXJjaCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BBQ0tBR0VfQVJDSCcsIFRydWUpCisKKyAgICAgICAgaWYgbG9jYWxkYXRhLmdldFZhcignSVBLX0hJRVJBUkNISUNBTF9GRUVEJywgRmFsc2UpID09ICIxIjoKKyAgICAgICAgICAgICMgU3ByZWFkIHBhY2thZ2VzIGFjcm9zcyBzdWJkaXJlY3RvcmllcyBzbyBlYWNoIGlzbid0IHRvbyBjcm93ZGVkCisgICAgICAgICAgICBpZiBwa2duYW1lLnN0YXJ0c3dpdGgoJ2xpYicpOgorICAgICAgICAgICAgICAgIHBrZ19wcmVmaXggPSAnbGliJyArIHBrZ25hbWVbM10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtnX3ByZWZpeCA9IHBrZ25hbWVbMF0KKworICAgICAgICAgICAgIyBLZWVwIC1kYmcsIC1kZXYsIC1kb2MsIC1zdGF0aWNkZXYsIC1sb2NhbGUgYW5kIC1sb2NhbGUtKiBwYWNrYWdlcworICAgICAgICAgICAgIyB0b2dldGhlci4gVGhlc2UgcGFja2FnZSBzdWZmaXhlcyBhcmUgdGFrZW4gZnJvbSB0aGUgZGVmaW5pdGlvbnMgb2YKKyAgICAgICAgICAgICMgUEFDS0FHRVMgYW5kIFBBQ0tBR0VTX0RZTkFNSUMgaW4gbWV0YS9jb25mL2JpdGJha2UuY29uZgorICAgICAgICAgICAgaWYgcGtnbmFtZVstNDpdIGluICgnLWRiZycsICctZGV2JywgJy1kb2MnKToKKyAgICAgICAgICAgICAgICBwa2dfc3ViZGlyID0gcGtnbmFtZVs6LTRdCisgICAgICAgICAgICBlbGlmIHBrZ25hbWUuZW5kc3dpdGgoJy1zdGF0aWNkZXYnKToKKyAgICAgICAgICAgICAgICBwa2dfc3ViZGlyID0gcGtnbmFtZVs6LTEwXQorICAgICAgICAgICAgZWxpZiBwa2duYW1lLmVuZHN3aXRoKCctbG9jYWxlJyk6CisgICAgICAgICAgICAgICAgcGtnX3N1YmRpciA9IHBrZ25hbWVbOi03XQorICAgICAgICAgICAgZWxpZiAnLWxvY2FsZS0nIGluIHBrZ25hbWU6CisgICAgICAgICAgICAgICAgcGtnX3N1YmRpciA9IHBrZ25hbWVbOnBrZ25hbWUuZmluZCgnLWxvY2FsZS0nKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtnX3N1YmRpciA9IHBrZ25hbWUKKworICAgICAgICAgICAgcGtnb3V0ZGlyID0gIiVzLyVzLyVzLyVzIiAlIChvdXRkaXIsIGFyY2gsIHBrZ19wcmVmaXgsIHBrZ19zdWJkaXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwa2dvdXRkaXIgPSAiJXMvJXMiICUgKG91dGRpciwgYXJjaCkKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGtnb3V0ZGlyKQorICAgICAgICBvcy5jaGRpcihyb290KQorICAgICAgICBjbGVhbnVwY29udHJvbChyb290KQorICAgICAgICBmcm9tIGdsb2IgaW1wb3J0IGdsb2IKKyAgICAgICAgZyA9IGdsb2IoJyonKQorICAgICAgICBpZiBub3QgZyBhbmQgbG9jYWxkYXRhLmdldFZhcignQUxMT1dfRU1QVFknLCBGYWxzZSkgIT0gIjEiOgorICAgICAgICAgICAgYmIubm90ZSgiTm90IGNyZWF0aW5nIGVtcHR5IGFyY2hpdmUgZm9yICVzLSVzLSVzIiAlIChwa2csIGxvY2FsZGF0YS5nZXRWYXIoJ1BLR1YnLCBUcnVlKSwgbG9jYWxkYXRhLmdldFZhcignUEtHUicsIFRydWUpKSkKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGNvbnRyb2xkaXIgPSBvcy5wYXRoLmpvaW4ocm9vdCwgJ0NPTlRST0wnKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoY29udHJvbGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3RybGZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihjb250cm9sZGlyLCAnY29udHJvbCcpLCAndycpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuIGNvbnRyb2wgZmlsZSBmb3Igd3JpdGluZy4iKQorCisgICAgICAgIGZpZWxkcyA9IFtdCisgICAgICAgIHBlID0gZC5nZXRWYXIoJ1BLR0UnLCBUcnVlKQorICAgICAgICBpZiBwZSBhbmQgaW50KHBlKSA+IDA6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKFsiVmVyc2lvbjogJXM6JXMtJXNcbiIsIFsnUEtHRScsICdQS0dWJywgJ1BLR1InXV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKFsiVmVyc2lvbjogJXMtJXNcbiIsIFsnUEtHVicsICdQS0dSJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiRGVzY3JpcHRpb246ICVzXG4iLCBbJ0RFU0NSSVBUSU9OJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiU2VjdGlvbjogJXNcbiIsIFsnU0VDVElPTiddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIlByaW9yaXR5OiAlc1xuIiwgWydQUklPUklUWSddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIk1haW50YWluZXI6ICVzXG4iLCBbJ01BSU5UQUlORVInXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJMaWNlbnNlOiAlc1xuIiwgWydMSUNFTlNFJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiQXJjaGl0ZWN0dXJlOiAlc1xuIiwgWydQQUNLQUdFX0FSQ0gnXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJPRTogJXNcbiIsIFsnUE4nXV0pCisgICAgICAgIGlmIGQuZ2V0VmFyKCdIT01FUEFHRScsIFRydWUpOgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZChbIkhvbWVwYWdlOiAlc1xuIiwgWydIT01FUEFHRSddXSkKKworICAgICAgICBkZWYgcHVsbERhdGEobCwgZCk6CisgICAgICAgICAgICBsMiA9IFtdCisgICAgICAgICAgICBmb3IgaSBpbiBsOgorICAgICAgICAgICAgICAgIGwyLmFwcGVuZChkLmdldFZhcihpLCBUcnVlKSkKKyAgICAgICAgICAgIHJldHVybiBsMgorCisgICAgICAgIGN0cmxmaWxlLndyaXRlKCJQYWNrYWdlOiAlc1xuIiAlIHBrZ25hbWUpCisgICAgICAgICMgY2hlY2sgZm9yIHJlcXVpcmVkIGZpZWxkcworICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgKGMsIGZzKSBpbiBmaWVsZHM6CisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGxvY2FsZGF0YS5nZXRWYXIoZiwgRmFsc2UpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihmKQorICAgICAgICAgICAgICAgICMgU3BlY2lhbCBiZWhhdmlvciBmb3IgZGVzY3JpcHRpb24uLi4KKyAgICAgICAgICAgICAgICBpZiAnREVTQ1JJUFRJT04nIGluIGZzOgorICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5ID0gbG9jYWxkYXRhLmdldFZhcignU1VNTUFSWScsIFRydWUpIG9yIGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkgb3IgIi4iCisgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCdEZXNjcmlwdGlvbjogJXNcbicgJSBzdW1tYXJ5KQorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkgb3IgIi4iCisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGV4dHdyYXAuZGVkZW50KGRlc2NyaXB0aW9uKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGlmICdcXG4nIGluIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBNYW51YWxseSBpbmRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0IGluIGRlc2NyaXB0aW9uLnNwbGl0KCdcXG4nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGRvbid0IGxpbWl0IHRoZSB3aWR0aCB3aGVuIG1hbnVhbGx5IGluZGVudCwgYnV0IHdlIGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBuZWVkIHRoZSB0ZXh0d3JhcC5maWxsKCkgdG8gc2V0IHRoZSBpbml0aWFsX2luZGVudCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN1YnNlcXVlbnRfaW5kZW50LCBzbyBzZXQgYSBsYXJnZSB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCclc1xuJyAlIHRleHR3cmFwLmZpbGwodC5zdHJpcCgpLCB3aWR0aD0xMDAwMDAsIGluaXRpYWxfaW5kZW50PScgJywgc3Vic2VxdWVudF9pbmRlbnQ9JyAnKSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQXV0byBpbmRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCclc1xuJyAlIHRleHR3cmFwLmZpbGwoZGVzY3JpcHRpb24sIHdpZHRoPTc0LCBpbml0aWFsX2luZGVudD0nICcsIHN1YnNlcXVlbnRfaW5kZW50PScgJykpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoYyAlIHR1cGxlKHB1bGxEYXRhKGZzLCBsb2NhbGRhdGEpKSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGN0cmxmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJNaXNzaW5nIGZpZWxkIGZvciBpcGsgZ2VuZXJhdGlvbjogJXMiICUgdmFsdWUpCisgICAgICAgICMgbW9yZSBmaWVsZHMKKworICAgICAgICBjdXN0b21fZmllbGRzX2NodW5rID0gZ2V0X3BhY2thZ2VfYWRkaXRpb25hbF9tZXRhZGF0YSgiaXBrIiwgbG9jYWxkYXRhKQorICAgICAgICBpZiBjdXN0b21fZmllbGRzX2NodW5rIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoY3VzdG9tX2ZpZWxkc19jaHVuaykKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJcbiIpCisKKyAgICAgICAgbWFwcGluZ19yZW5hbWVfaG9vayhsb2NhbGRhdGEpCisKKyAgICAgICAgZGVmIGRlYmlhbl9jbXBfcmVtYXAodmFyKToKKyAgICAgICAgICAgICMgSW4gZGViaWFuICc+JyBhbmQgJzwnIGRvIG5vdCBtZWFuIHdoYXQgaXQgYXBwZWFycyB0aGV5IG1lYW4KKyAgICAgICAgICAgICMgICAnPCcgPSBsZXNzIG9yIGVxdWFsCisgICAgICAgICAgICAjICAgJz4nID0gZ3JlYXRlciBvciBlcXVhbAorICAgICAgICAgICAgIyBhZGp1c3QgdGhlc2UgdG8gdGhlICc8PCcgYW5kICc+PicgZXF1aXZhbGVudHMKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIGZvciBkZXAgaW4gdmFyOgorICAgICAgICAgICAgICAgIGZvciBpLCB2IGluIGVudW1lcmF0ZSh2YXJbZGVwXSk6CisgICAgICAgICAgICAgICAgICAgIGlmICh2IG9yICIiKS5zdGFydHN3aXRoKCI8ICIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyW2RlcF1baV0gPSB2YXJbZGVwXVtpXS5yZXBsYWNlKCI8ICIsICI8PCAiKQorICAgICAgICAgICAgICAgICAgICBlbGlmICh2IG9yICIiKS5zdGFydHN3aXRoKCI+ICIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyW2RlcF1baV0gPSB2YXJbZGVwXVtpXS5yZXBsYWNlKCI+ICIsICI+PiAiKQorCisgICAgICAgIHJkZXBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJERVBFTkRTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocmRlcGVuZHMpCisgICAgICAgIHJyZWNvbW1lbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJSRUNPTU1FTkRTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocnJlY29tbWVuZHMpCisgICAgICAgIHJzdWdnZXN0cyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSU1VHR0VTVFMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChyc3VnZ2VzdHMpCisgICAgICAgICMgRGVsaWJlcmF0ZWx5IGRyb3AgdmVyc2lvbiBpbmZvcm1hdGlvbiBoZXJlLCBub3Qgd2FudGVkL3N1cHBvcnRlZCBieSBpcGsKKyAgICAgICAgcnByb3ZpZGVzID0gZGljdC5mcm9ta2V5cyhiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUlBST1ZJREVTIiwgVHJ1ZSkgb3IgIiIpLCBbXSkKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycHJvdmlkZXMpCisgICAgICAgIHJyZXBsYWNlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSUkVQTEFDRVMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycmVwbGFjZXMpCisgICAgICAgIHJjb25mbGljdHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUkNPTkZMSUNUUyIsIFRydWUpIG9yICIiKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJjb25mbGljdHMpCisKKyAgICAgICAgaWYgcmRlcGVuZHM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiRGVwZW5kczogJXNcbiIgJSBiYi51dGlscy5qb2luX2RlcHMocmRlcGVuZHMpKQorICAgICAgICBpZiByc3VnZ2VzdHM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiU3VnZ2VzdHM6ICVzXG4iICUgYmIudXRpbHMuam9pbl9kZXBzKHJzdWdnZXN0cykpCisgICAgICAgIGlmIHJyZWNvbW1lbmRzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlJlY29tbWVuZHM6ICVzXG4iICUgYmIudXRpbHMuam9pbl9kZXBzKHJyZWNvbW1lbmRzKSkKKyAgICAgICAgaWYgcnByb3ZpZGVzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlByb3ZpZGVzOiAlc1xuIiAlIGJiLnV0aWxzLmpvaW5fZGVwcyhycHJvdmlkZXMpKQorICAgICAgICBpZiBycmVwbGFjZXM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiUmVwbGFjZXM6ICVzXG4iICUgYmIudXRpbHMuam9pbl9kZXBzKHJyZXBsYWNlcykpCisgICAgICAgIGlmIHJjb25mbGljdHM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiQ29uZmxpY3RzOiAlc1xuIiAlIGJiLnV0aWxzLmpvaW5fZGVwcyhyY29uZmxpY3RzKSkKKyAgICAgICAgc3JjX3VyaSA9IGxvY2FsZGF0YS5nZXRWYXIoIlNSQ19VUkkiLCBUcnVlKS5zdHJpcCgpIG9yICJOb25lIgorICAgICAgICBpZiBzcmNfdXJpOgorICAgICAgICAgICAgc3JjX3VyaSA9IHJlLnN1YigiXHMrIiwgIiAiLCBzcmNfdXJpKQorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlNvdXJjZTogJXNcbiIgJSAiICIuam9pbihzcmNfdXJpLnNwbGl0KCkpKQorICAgICAgICBjdHJsZmlsZS5jbG9zZSgpCisKKyAgICAgICAgZm9yIHNjcmlwdCBpbiBbInByZWluc3QiLCAicG9zdGluc3QiLCAicHJlcm0iLCAicG9zdHJtIl06CisgICAgICAgICAgICBzY3JpcHR2YXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdwa2dfJXMnICUgc2NyaXB0LCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHNjcmlwdHZhcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNjcmlwdGZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihjb250cm9sZGlyLCBzY3JpcHQpLCAndycpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuICVzIHNjcmlwdCBmaWxlIGZvciB3cml0aW5nLiIgJSBzY3JpcHQpCisgICAgICAgICAgICBzY3JpcHRmaWxlLndyaXRlKHNjcmlwdHZhcikKKyAgICAgICAgICAgIHNjcmlwdGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsIHNjcmlwdCksIDA3NTUpCisKKyAgICAgICAgY29uZmZpbGVzX3N0ciA9ICcgJy5qb2luKGdldF9jb25mZmlsZXMocGtnLCBkKSkKKyAgICAgICAgaWYgY29uZmZpbGVzX3N0cjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb25mZmlsZXMgPSBvcGVuKG9zLnBhdGguam9pbihjb250cm9sZGlyLCAnY29uZmZpbGVzJyksICd3JykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gY29uZmZpbGVzIGZvciB3cml0aW5nLiIpCisgICAgICAgICAgICBmb3IgZiBpbiBjb25mZmlsZXNfc3RyLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob2UucGF0aC5qb2luKHJvb3QsIGYpKToKKyAgICAgICAgICAgICAgICAgICAgY29uZmZpbGVzLndyaXRlKCclc1xuJyAlIGYpCisgICAgICAgICAgICBjb25mZmlsZXMuY2xvc2UoKQorCisgICAgICAgIG9zLmNoZGlyKGJhc2VkaXIpCisgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgiUEFUSD1cIiVzXCIgJXMgJXMgJXMiICUgKGxvY2FsZGF0YS5nZXRWYXIoIlBBVEgiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcigiT1BLR0JVSUxEQ01EIiwxKSwgcGtnLCBwa2dvdXRkaXIpLCBzaGVsbD1UcnVlKQorICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJvcGtnLWJ1aWxkIGV4ZWN1dGlvbiBmYWlsZWQiKQorCisgICAgICAgIGNsZWFudXBjb250cm9sKHJvb3QpCisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisKK30KKyMgT3RoZXJ3aXNlIGFsbGFyY2ggcGFja2FnZXMgbWF5IGNoYW5nZSBkZXBlbmRpbmcgb24gb3ZlcnJpZGUgY29uZmlndXJhdGlvbgorZG9fcGFja2FnZV9pcGtbdmFyZGVwc2V4Y2x1ZGVdID0gIk9WRVJSSURFUyIKKworU1NUQVRFVEFTS1MgKz0gImRvX3BhY2thZ2Vfd3JpdGVfaXBrIgorZG9fcGFja2FnZV93cml0ZV9pcGtbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtQS0dXUklURURJUklQS30iCitkb19wYWNrYWdlX3dyaXRlX2lwa1tzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtERVBMT1lfRElSX0lQS30iCisKK3B5dGhvbiBkb19wYWNrYWdlX3dyaXRlX2lwa19zZXRzY2VuZSAoKSB7CisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisKKyAgICBpZiBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKHRtcGRpciwgInN0YW1wcyIsICJJUEtfUEFDS0FHRV9JTkRFWF9DTEVBTiIpLCBvcy5SX09LKToKKyAgICAgICAgb3MudW5saW5rKG9zLnBhdGguam9pbih0bXBkaXIsICJzdGFtcHMiLCAiSVBLX1BBQ0tBR0VfSU5ERVhfQ0xFQU4iKSkKKworICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorfQorYWRkdGFzayBkb19wYWNrYWdlX3dyaXRlX2lwa19zZXRzY2VuZQorCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpICE9ICcnOgorICAgICAgICBkZXBzID0gJyBvcGtnLXV0aWxzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnCisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9pcGsnLCAnZGVwZW5kcycsIGRlcHMpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9pcGsnLCAnZmFrZXJvb3QnLCAiMSIpCit9CisKK3B5dGhvbiBkb19wYWNrYWdlX3dyaXRlX2lwayAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJyZWFkX3N1YnBhY2thZ2VfbWV0YWRhdGEiLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiZG9fcGFja2FnZV9pcGsiLCBkKQorfQorZG9fcGFja2FnZV93cml0ZV9pcGtbZGlyc10gPSAiJHtQS0dXUklURURJUklQS30iCitkb19wYWNrYWdlX3dyaXRlX2lwa1tjbGVhbmRpcnNdID0gIiR7UEtHV1JJVEVESVJJUEt9IgorZG9fcGFja2FnZV93cml0ZV9pcGtbdW1hc2tdID0gIjAyMiIKK2FkZHRhc2sgcGFja2FnZV93cml0ZV9pcGsgYWZ0ZXIgZG9fcGFja2FnZWRhdGEgZG9fcGFja2FnZQorCitQQUNLQUdFSU5ERVhERVBTICs9ICJvcGtnLXV0aWxzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorUEFDS0FHRUlOREVYREVQUyArPSAib3BrZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworZG9fYnVpbGRbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlX3dyaXRlX2lwayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfcnBtLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX3JwbS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYTE2MzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX3JwbS5iYmNsYXNzCkBAIC0wLDAgKzEsNzc0IEBACitpbmhlcml0IHBhY2thZ2UKKworSU1BR0VfUEtHVFlQRSA/PSAicnBtIgorCitSUE09InJwbSIKK1JQTUJVSUxEPSJycG1idWlsZCIKKworUEtHV1JJVEVESVJSUE0gPSAiJHtXT1JLRElSfS9kZXBsb3ktcnBtcyIKKworIyBNYWludGFpbmluZyB0aGUgcGVyZmlsZSBkZXBlbmRlbmNpZXMgaGFzIHNpbmdpZmljYW50IG92ZXJoZWFkIHdoZW4gd3JpdGluZyB0aGUgCisjIHBhY2thZ2VzLiBXaGVuIHNldCwgdGhpcyB2YWx1ZSBtZXJnZXMgdGhlbSBmb3IgZWZmaWNpZW5jeS4KK01FUkdFUEVSRklMRURFUFMgPSAiMSIKKworIyBDb25zdHJ1Y3QgcGVyIGZpbGUgZGVwZW5kZW5jaWVzIGZpbGUKK2RlZiB3cml0ZV9ycG1fcGVyZmlsZWRhdGEoc3JjbmFtZSwgZCk6CisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgcGtnZCA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKworICAgIGRlZiBkdW1wX2ZpbGVyZGVwcyh2YXJuYW1lLCBvdXRmaWxlLCBkKToKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgiIyEvdXNyL2Jpbi9lbnYgcHl0aG9uXG5cbiIpCisgICAgICAgIG91dGZpbGUud3JpdGUoIiMgRGVwZW5kZW5jeSB0YWJsZVxuIikKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgnZGVwcyA9IHtcbicpCisgICAgICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgICAgIGRlcGVuZHNmbGlzdF9rZXkgPSAnRklMRScgKyB2YXJuYW1lICsgJ0ZMSVNUJyArICJfIiArIHBrZworICAgICAgICAgICAgZGVwZW5kc2ZsaXN0ID0gKGQuZ2V0VmFyKGRlcGVuZHNmbGlzdF9rZXksIFRydWUpIG9yICIiKQorICAgICAgICAgICAgZm9yIGRmaWxlIGluIGRlcGVuZHNmbGlzdC5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGtleSA9ICJGSUxFIiArIHZhcm5hbWUgKyAiXyIgKyBkZmlsZSArICJfIiArIHBrZworICAgICAgICAgICAgICAgIGRlcGVuZHNfZGljdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zKGQuZ2V0VmFyKGtleSwgVHJ1ZSkgb3IgIiIpCisgICAgICAgICAgICAgICAgZmlsZSA9IGRmaWxlLnJlcGxhY2UoIkB1bmRlcnNjb3JlQCIsICJfIikKKyAgICAgICAgICAgICAgICBmaWxlID0gZmlsZS5yZXBsYWNlKCJAY2xvc2VicmFjZUAiLCAiXSIpCisgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZSgiQG9wZW5icmFjZUAiLCAiWyIpCisgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZSgiQHRhYkAiLCAiXHQiKQorICAgICAgICAgICAgICAgIGZpbGUgPSBmaWxlLnJlcGxhY2UoIkBzcGFjZUAiLCAiICIpCisgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZSgiQGF0QCIsICJAIikKKyAgICAgICAgICAgICAgICBvdXRmaWxlLndyaXRlKCciJyArIHBrZ2QgKyBmaWxlICsgJyIgOiAiJykKKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIGRlcGVuZHNfZGljdDoKKyAgICAgICAgICAgICAgICAgICAgdmVyID0gZGVwZW5kc19kaWN0W2RlcF0KKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwIGFuZCB2ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXIgPSB2ZXIucmVwbGFjZSgiKCIsIiIpCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXIgPSB2ZXIucmVwbGFjZSgiKSIsIiIpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRmaWxlLndyaXRlKGRlcCArICIgIiArIHZlciArICIgIikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGZpbGUud3JpdGUoZGVwICsgIiAiKQorICAgICAgICAgICAgICAgIG91dGZpbGUud3JpdGUoJyIsXG4nKQorICAgICAgICBvdXRmaWxlLndyaXRlKCd9XG5cbicpCisgICAgICAgIG91dGZpbGUud3JpdGUoImltcG9ydCBzeXNcbiIpCisgICAgICAgIG91dGZpbGUud3JpdGUoIndoaWxlIDE6XG4iKQorICAgICAgICBvdXRmaWxlLndyaXRlKCJcdGxpbmUgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKS5zdHJpcCgpXG4iKQorICAgICAgICBvdXRmaWxlLndyaXRlKCJcdGlmIG5vdCBsaW5lOlxuIikKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgiXHRcdHN5cy5leGl0KDApXG4iKQorICAgICAgICBvdXRmaWxlLndyaXRlKCJcdGlmIGxpbmUgaW4gZGVwczpcbiIpCisgICAgICAgIG91dGZpbGUud3JpdGUoIlx0XHRwcmludChkZXBzW2xpbmVdICsgJ1xcbicpXG4iKQorCisgICAgIyBPRS1jb3JlIGRlcGVuZGVuY2llcyBhLmsuYS4gUlBNIHJlcXVpcmVzCisgICAgb3V0ZGVwZW5kcyA9IHdvcmtkaXIgKyAiLyIgKyBzcmNuYW1lICsgIi5yZXF1aXJlcyIKKworICAgIHRyeToKKyAgICAgICAgZGVwZW5kc2ZpbGUgPSBvcGVuKG91dGRlcGVuZHMsICd3JykKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gc3BlYyBmaWxlIGZvciB3cml0aW5nLiIpCisKKyAgICBkdW1wX2ZpbGVyZGVwcygnUkRFUEVORFMnLCBkZXBlbmRzZmlsZSwgZCkKKworICAgIGRlcGVuZHNmaWxlLmNsb3NlKCkKKyAgICBvcy5jaG1vZChvdXRkZXBlbmRzLCAwNzU1KQorCisgICAgIyBPRS1jb3JlIC8gUlBNIFByb3ZpZGVzCisgICAgb3V0cHJvdmlkZXMgPSB3b3JrZGlyICsgIi8iICsgc3JjbmFtZSArICIucHJvdmlkZXMiCisKKyAgICB0cnk6CisgICAgICAgIHByb3ZpZGVzZmlsZSA9IG9wZW4ob3V0cHJvdmlkZXMsICd3JykKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gc3BlYyBmaWxlIGZvciB3cml0aW5nLiIpCisKKyAgICBkdW1wX2ZpbGVyZGVwcygnUlBST1ZJREVTJywgcHJvdmlkZXNmaWxlLCBkKQorCisgICAgcHJvdmlkZXNmaWxlLmNsb3NlKCkKKyAgICBvcy5jaG1vZChvdXRwcm92aWRlcywgMDc1NSkKKworICAgIHJldHVybiAob3V0ZGVwZW5kcywgb3V0cHJvdmlkZXMpCisKKworcHl0aG9uIHdyaXRlX3NwZWNmaWxlICgpIHsKKyAgICBpbXBvcnQgb2UucGFja2FnZWRhdGEKKworICAgICMgYXBwZW5kIGluZm9ybWF0aW9uIGZvciBsb2dzIGFuZCBwYXRjaGVzIHRvICVwcmVwCisgICAgZGVmIGFkZF9wcmVwKGQsc3BlY19maWxlc19ib3R0b20pOgorICAgICAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnc3JwbScsIFRydWUpID09ICcxJyBhbmQgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYXJjaGl2ZXInLCBkKToKKyAgICAgICAgICAgIHNwZWNfZmlsZXNfYm90dG9tLmFwcGVuZCgnJSVwcmVwIC1uICVzJyAlIGQuZ2V0VmFyKCdQTicsIFRydWUpICkKKyAgICAgICAgICAgIHNwZWNfZmlsZXNfYm90dG9tLmFwcGVuZCgnJXMnICUgImVjaG8gXCJpbmNsdWRlIGxvZ3MgYW5kIHBhdGNoZXMsIFBsZWFzZSBjaGVjayB0aGVtIGluIFNPVVJDRVNcIiIpCisgICAgICAgICAgICBzcGVjX2ZpbGVzX2JvdHRvbS5hcHBlbmQoJycpCisKKyAgICAjIGFwcGVuZCB0aGUgbmFtZSBvZiB0YXJiYWxsIHRvIGtleSB3b3JkICdTT1VSQ0UnIGluIHh4eC5zcGVjLgorICAgIGRlZiB0YWlsX3NvdXJjZShkKToKKyAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NycG0nLCBUcnVlKSA9PSAnMScgYW5kIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FyY2hpdmVyJywgZCk6CisgICAgICAgICAgICBhcl9vdXRkaXIgPSBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcl9vdXRkaXIpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc291cmNlX2xpc3QgPSBvcy5saXN0ZGlyKGFyX291dGRpcikKKyAgICAgICAgICAgIHNvdXJjZV9udW1iZXIgPSAwCisgICAgICAgICAgICBmb3Igc291cmNlIGluIHNvdXJjZV9saXN0OgorICAgICAgICAgICAgICAgICMgVGhlIHJwbWJ1aWxkIGRvZXNuJ3QgbmVlZCB0aGUgcm9vdCBwZXJtaXNzaW9uLCBidXQgaXQgbmVlZHMKKyAgICAgICAgICAgICAgICAjIHRvIGtub3cgdGhlIGZpbGUncyB1c2VyIGFuZCBncm91cCBuYW1lLCB0aGUgb25seSB1c2VyIGFuZAorICAgICAgICAgICAgICAgICMgZ3JvdXAgaW4gZmFrZXJvb3QgaXMgInJvb3QiIHdoZW4gd29ya2luZyBpbiBmYWtlcm9vdC4KKyAgICAgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKGFyX291dGRpciwgc291cmNlKQorICAgICAgICAgICAgICAgIG9zLmNob3duKGYsIDAsIDApCisgICAgICAgICAgICAgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdTb3VyY2UlczogJXMnICUgKHNvdXJjZV9udW1iZXIsIHNvdXJjZSkpCisgICAgICAgICAgICAgICAgc291cmNlX251bWJlciArPSAxCisgICAgIyBXZSBuZWVkIGEgc2ltcGxlIHdheSB0byByZW1vdmUgdGhlIE1MUFJFRklYIGZyb20gdGhlIHBhY2thZ2UgbmFtZSwKKyAgICAjIGFuZCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLi4uCisgICAgZGVmIHN0cmlwX211bHRpbGliKG5hbWUsIGQpOgorICAgICAgICBtdWx0aWxpYnMgPSBkLmdldFZhcignTVVMVElMSUJTJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgZm9yIGV4dCBpbiBtdWx0aWxpYnMuc3BsaXQoKToKKyAgICAgICAgICAgIGVleHQgPSBleHQuc3BsaXQoJzonKQorICAgICAgICAgICAgaWYgbGVuKGVleHQpID4gMSBhbmQgZWV4dFswXSA9PSAnbXVsdGlsaWInIGFuZCBuYW1lIGFuZCBuYW1lLmZpbmQoZWV4dFsxXSArICctJykgPj0gMDoKKyAgICAgICAgICAgICAgICBuYW1lID0gIiIuam9pbihuYW1lLnNwbGl0KGVleHRbMV0gKyAnLScpKQorICAgICAgICByZXR1cm4gbmFtZQorCisgICAgZGVmIHN0cmlwX211bHRpbGliX2RlcHMoZGVwcywgZCk6CisgICAgICAgIGRlcGVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZGVwcyBvciAiIikKKyAgICAgICAgbmV3ZGVwcyA9IHt9CisgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kczoKKyAgICAgICAgICAgIG5ld2RlcHNbc3RyaXBfbXVsdGlsaWIoZGVwLCBkKV0gPSBkZXBlbmRzW2RlcF0KKyAgICAgICAgcmV0dXJuIGJiLnV0aWxzLmpvaW5fZGVwcyhuZXdkZXBzKQorCisjICAgICAgICBtbCA9IGQuZ2V0VmFyKCJNTFBSRUZJWCIsIFRydWUpCisjICAgICAgICBpZiBtbCBhbmQgbmFtZSBhbmQgbGVuKG1sKSAhPSAwIGFuZCBuYW1lLmZpbmQobWwpID09IDA6CisjICAgICAgICAgICAgcmV0dXJuIG1sLmpvaW4obmFtZS5zcGxpdChtbCwgMSlbMTpdKQorIyAgICAgICAgcmV0dXJuIG5hbWUKKworICAgICMgSW4gUlBNLCBkZXBlbmRlbmNpZXMgYXJlIG9mIHRoZSBmb3JtYXQ6IHBrZyA8Pj0gRXBvY2g6VmVyc2lvbi1SZWxlYXNlCisgICAgIyBUaGlzIGZvcm1hdCBpcyBzaW1pbGFyIHRvIE9FLCBob3dldmVyIHRoZXJlIGFyZSByZXN0cmljdGlvbnMgb24gdGhlCisgICAgIyBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIGluIGEgZmllbGQuICBJbiB0aGUgVmVyc2lvbiBmaWVsZCwgIi0iCisgICAgIyBjaGFyYWN0ZXJzIGFyZSBub3QgYWxsb3dlZC4gICItIiBpcyBhbGxvd2VkIGluIHRoZSBSZWxlYXNlIGZpZWxkLgorICAgICMKKyAgICAjIFdlIHRyYW5zbGF0ZSB0aGUgIi0iIGluIHRoZSB2ZXJzaW9uIHRvIGEgIisiLCBieSBsb2FkaW5nIHRoZSBQS0dWCisgICAgIyBmcm9tIHRoZSBkZXBlbmRlbnQgcmVjaXBlLCByZXBsYWNpbmcgdGhlIC0gd2l0aCBhICssIGFuZCB0aGVuIHVzaW5nCisgICAgIyB0aGF0IHZhbHVlIHRvIGRvIGEgcmVwbGFjZSBpbnNpZGUgb2YgdGhpcyByZWNpcGUncyBkZXBlbmRlbmNpZXMuCisgICAgIyBUaGlzIHByZXNlcnZlcyB0aGUgIi0iIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSB2ZXJzaW9uIGFuZCByZWxlYXNlLCBhcworICAgICMgd2VsbCBhcyBhbnkgIi0iIGNoYXJhY3RlcnMgaW5zaWRlIG9mIHRoZSByZWxlYXNlIGZpZWxkLgorICAgICMKKyAgICAjIEFsbCBvZiB0aGlzIGhhcyB0byBoYXBwZW4gQkVGT1JFIHRoZSBtYXBwaW5nX3JlbmFtZV9ob29rIGFzCisgICAgIyBhZnRlciByZW5hbWluZyB3ZSBjYW5ub3QgbG9vayB1cCB0aGUgZGVwZW5kZW5jaWVzIGluIHRoZSBwYWNrYWdlZGF0YQorICAgICMgc3RvcmUuCisgICAgZGVmIHRyYW5zbGF0ZV92ZXJzKHZhcm5hbWUsIGQpOgorICAgICAgICBkZXBlbmRzID0gZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgZGVwZW5kczoKKyAgICAgICAgICAgIGRlcGVuZHNfZGljdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkZXBlbmRzKQorICAgICAgICAgICAgbmV3ZGVwc19kaWN0ID0ge30KKyAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kc19kaWN0OgorICAgICAgICAgICAgICAgIHZlcmxpc3QgPSBbXQorICAgICAgICAgICAgICAgIGZvciB2ZXIgaW4gZGVwZW5kc19kaWN0W2RlcF06CisgICAgICAgICAgICAgICAgICAgIGlmICctJyBpbiB2ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICBzdWJkID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhX2RpY3QoZGVwLCBkKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ1BLR1YnIGluIHN1YmQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHYgPSBzdWJkWydQViddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtndiA9IHN1YmRbJ1BLR1YnXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHB2ID0gcGtndi5yZXBsYWNlKCctJywgJysnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlciA9IHZlci5yZXBsYWNlKHB2LCByZXBwdikucmVwbGFjZShwa2d2LCByZXBwdikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICdQS0dSJyBpbiBzdWJkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIFBLR1IgcmF0aGVyIHRoYW4gUFIgaW4gdmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHIgPSAnLScgKyBzdWJkWydQUiddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnciA9ICctJyArIHN1YmRbJ1BLR1InXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBrZ3Igbm90IGluIHZlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyID0gdmVyLnJlcGxhY2UocHIsIHBrZ3IpCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJsaXN0LmFwcGVuZCh2ZXIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJsaXN0LmFwcGVuZCh2ZXIpCisgICAgICAgICAgICAgICAgbmV3ZGVwc19kaWN0W2RlcF0gPSB2ZXJsaXN0CisgICAgICAgICAgICBkZXBlbmRzID0gYmIudXRpbHMuam9pbl9kZXBzKG5ld2RlcHNfZGljdCkKKyAgICAgICAgICAgIGQuc2V0VmFyKHZhcm5hbWUsIGRlcGVuZHMuc3RyaXAoKSkKKworICAgICMgV2UgbmVlZCB0byBjaGFuZ2UgdGhlIHN0eWxlIHRoZSBkZXBlbmRlbmN5IGZyb20gQkIgdG8gUlBNCisgICAgIyBUaGlzIG5lZWRzIHRvIGhhcHBlbiBBRlRFUiB0aGUgbWFwcGluZ19yZW5hbWVfaG9vaworICAgIGRlZiBwcmludF9kZXBzKHZhcmlhYmxlLCB0YWcsIGFycmF5LCBkKToKKyAgICAgICAgZGVwZW5kcyA9IHZhcmlhYmxlCisgICAgICAgIGlmIGRlcGVuZHM6CisgICAgICAgICAgICBkZXBlbmRzX2RpY3QgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZGVwZW5kcykKKyAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kc19kaWN0OgorICAgICAgICAgICAgICAgIGZvciB2ZXIgaW4gZGVwZW5kc19kaWN0W2RlcF06CisgICAgICAgICAgICAgICAgICAgIHZlciA9IHZlci5yZXBsYWNlKCcoJywgJycpCisgICAgICAgICAgICAgICAgICAgIHZlciA9IHZlci5yZXBsYWNlKCcpJywgJycpCisgICAgICAgICAgICAgICAgICAgIGFycmF5LmFwcGVuZCgiJXM6ICVzICVzIiAlICh0YWcsIGRlcCwgdmVyKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgbGVuKGRlcGVuZHNfZGljdFtkZXBdKToKKyAgICAgICAgICAgICAgICAgICAgYXJyYXkuYXBwZW5kKCIlczogJXMiICUgKHRhZywgZGVwKSkKKworICAgIGRlZiB3YWxrX2ZpbGVzKHdhbGtwYXRoLCB0YXJnZXQsIGNvbmZmaWxlcywgZGlyZmlsZXMpOgorICAgICAgICAjIFdlIGNhbiByYWNlIGFnYWluc3QgdGhlIGlway9kZWIgYmFja2VuZHMgd2hpY2ggY3JlYXRlIENPTlRST0wgb3IgREVCSUFOIGRpcmVjdG9yaWVzCisgICAgICAgICMgd2hlbiBwYWNrYWdpbmcuIFdlIGp1c3QgaWdub3JlIHRoZXNlIGZpbGVzIHdoaWNoIGFyZSBjcmVhdGVkIGluIAorICAgICAgICAjIHBhY2thZ2VzLXNwbGl0LyBhbmQgbm90IHBhY2thZ2UvCisgICAgICAgICMgV2UgaGF2ZSB0aGUgb2RkIHNpdHVhdGlvbiB3aGVyZSB0aGUgQ09OVFJPTC9ERUJJQU4gZGlyZWN0b3J5IGNhbiBiZSByZW1vdmVkIGluIHRoZSBtaWRkbGUgb2YKKyAgICAgICAgIyBvZiB0aGUgd2FsaywgdGhlIGlzZGlyKCkgdGVzdCB3b3VsZCB0aGVuIGZhaWwgYW5kIHRoZSB3YWxrIGNvZGUgd291bGQgYXNzdW1lIGl0cyBhIGZpbGUKKyAgICAgICAgIyBoZW5jZSB3ZSBjaGVjayBmb3IgdGhlIG5hbWVzIGluIGZpbGVzIHRvby4KKyAgICAgICAgZm9yIHJvb3RwYXRoLCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHdhbGtwYXRoKToKKyAgICAgICAgICAgIHBhdGggPSByb290cGF0aC5yZXBsYWNlKHdhbGtwYXRoLCAiIikKKyAgICAgICAgICAgIGlmIHBhdGguZW5kc3dpdGgoIkRFQklBTiIpIG9yIHBhdGguZW5kc3dpdGgoIkNPTlRST0wiKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgiJSIsICIlJSUlJSUlJSIpCisKKyAgICAgICAgICAgICMgVHJlYXQgYWxsIHN5bWxpbmtzIHRvIGRpcmVjdG9yaWVzIGFzIG5vcm1hbCBmaWxlcy4KKyAgICAgICAgICAgICMgb3Mud2FsaygpIGxpc3RzIHRoZW0gYXMgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICBkZWYgbW92ZV90b19maWxlcyhkaXIpOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKG9zLnBhdGguam9pbihyb290cGF0aCwgZGlyKSk6CisgICAgICAgICAgICAgICAgICAgIGZpbGVzLmFwcGVuZChkaXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBkaXJzWzpdID0gW2RpciBmb3IgZGlyIGluIGRpcnMgaWYgbm90IG1vdmVfdG9fZmlsZXMoZGlyKV0KKworICAgICAgICAgICAgIyBEaXJlY3RvcnkgaGFuZGxpbmcgY2FuIGhhcHBlbiBpbiB0d28gd2F5cywgZWl0aGVyIERJUkZJTEVTIGlzIG5vdCBzZXQgYXQgYWxsCisgICAgICAgICAgICAjIGluIHdoaWNoIGNhc2Ugd2UgZmFsbCBiYWNrIHRvIHRoZSBvbGRlciBiZWhhdmlvdXIgb2YgcGFja2FnZXMgb3duaW5nIGFsbCB0aGVpcgorICAgICAgICAgICAgIyBkaXJlY3RvcmllcworICAgICAgICAgICAgaWYgZGlyZmlsZXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBmb3IgZGlyIGluIGRpcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGRpciA9PSAiQ09OVFJPTCIgb3IgZGlyID09ICJERUJJQU4iOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZGlyID0gZGlyLnJlcGxhY2UoIiUiLCAiJSUlJSUlJSUiKQorICAgICAgICAgICAgICAgICAgICAjIEFsbCBwYWNrYWdlcyBvd24gdGhlIGRpcmVjdG9yaWVzIHRoZWlyIGZpbGVzIGFyZSBpbi4uLgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQuYXBwZW5kKCclZGlyICInICsgcGF0aCArICcvJyArIGRpciArICciJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBwYWNrYWdlcyBvd24gb25seSBlbXB0eSBkaXJlY3RvcmllcyBvciBleHBsaWN0IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAjIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSBvdmVybGFwcGluZyBvZiBzZWN1cml0eSBwZXJtaXNzaW9uLgorICAgICAgICAgICAgICAgIGlmIHBhdGggYW5kIG5vdCBmaWxlcyBhbmQgbm90IGRpcnM6CisgICAgICAgICAgICAgICAgICAgIHRhcmdldC5hcHBlbmQoJyVkaXIgIicgKyBwYXRoICsgJyInKQorICAgICAgICAgICAgICAgIGVsaWYgcGF0aCBhbmQgcGF0aCBpbiBkaXJmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZCgnJWRpciAiJyArIHBhdGggKyAnIicpCisKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGlmIGZpbGUgPT0gIkNPTlRST0wiIG9yIGZpbGUgPT0gIkRFQklBTiI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZSgiJSIsICIlJSUlJSUlJSIpCisgICAgICAgICAgICAgICAgaWYgY29uZmZpbGVzLmNvdW50KHBhdGggKyAnLycgKyBmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZCgnJWNvbmZpZyAiJyArIHBhdGggKyAnLycgKyBmaWxlICsgJyInKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRhcmdldC5hcHBlbmQoJyInICsgcGF0aCArICcvJyArIGZpbGUgKyAnIicpCisKKyAgICAjIFByZXZlbnQgdGhlIHByZXJtL3Bvc3RybSBzY3JpcHRzIGZyb20gYmVpbmcgcnVuIGR1cmluZyBhbiB1cGdyYWRlCisgICAgZGVmIHdyYXBfdW5pbnN0YWxsKHNjcmlwdHZhcik6CisgICAgICAgIHNjciA9IHNjcmlwdHZhci5zdHJpcCgpCisgICAgICAgIGlmIHNjci5zdGFydHN3aXRoKCIjISIpOgorICAgICAgICAgICAgcG9zID0gc2NyLmZpbmQoIlxuIikgKyAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwb3MgPSAwCisgICAgICAgIHNjciA9IHNjcls6cG9zXSArICdpZiBbICIkMSIgPSAiMCIgXSA7IHRoZW5cbicgKyBzY3JbcG9zOl0gKyAnXG5maScKKyAgICAgICAgcmV0dXJuIHNjcgorCisgICAgZGVmIGdldF9wZXJmaWxlKHZhcm5hbWUsIHBrZywgZCk6CisgICAgICAgIGRlcHMgPSBbXQorICAgICAgICBkZXBlbmRzZmxpc3Rfa2V5ID0gJ0ZJTEUnICsgdmFybmFtZSArICdGTElTVCcgKyAiXyIgKyBwa2cKKyAgICAgICAgZGVwZW5kc2ZsaXN0ID0gKGQuZ2V0VmFyKGRlcGVuZHNmbGlzdF9rZXksIFRydWUpIG9yICIiKQorICAgICAgICBmb3IgZGZpbGUgaW4gZGVwZW5kc2ZsaXN0LnNwbGl0KCk6CisgICAgICAgICAgICBrZXkgPSAiRklMRSIgKyB2YXJuYW1lICsgIl8iICsgZGZpbGUgKyAiXyIgKyBwa2cKKyAgICAgICAgICAgIGRlcGVuZHMgPSBkLmdldFZhcihrZXksIFRydWUpCisgICAgICAgICAgICBpZiBkZXBlbmRzOgorICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKGRlcGVuZHMpCisgICAgICAgIHJldHVybiAiICIuam9pbihkZXBzKQorCisgICAgZGVmIGFwcGVuZF9kZXNjcmlwdGlvbihzcGVjX3ByZWFtYmxlLCB0ZXh0KToKKyAgICAgICAgIiIiCisgICAgICAgIEFkZCB0aGUgZGVzY3JpcHRpb24gdG8gdGhlIHNwZWMgZmlsZS4KKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCB0ZXh0d3JhcAorICAgICAgICBkZWRlbnRfdGV4dCA9IHRleHR3cmFwLmRlZGVudCh0ZXh0KS5zdHJpcCgpCisgICAgICAgICMgQml0YmFrZSBzYXZlcyAiXG4iIGFzICJcXG4iCisgICAgICAgIGlmICdcXG4nIGluIGRlZGVudF90ZXh0OgorICAgICAgICAgICAgZm9yIHQgaW4gZGVkZW50X3RleHQuc3BsaXQoJ1xcbicpOgorICAgICAgICAgICAgICAgIHNwZWNfcHJlYW1ibGUuYXBwZW5kKHQuc3RyaXAoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNwZWNfcHJlYW1ibGUuYXBwZW5kKCclcycgJSB0ZXh0d3JhcC5maWxsKGRlZGVudF90ZXh0LCB3aWR0aD03NSkpCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgaWYgbm90IHBhY2thZ2VzIG9yIHBhY2thZ2VzID09ICcnOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gcGFja2FnZXM7IG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgaWYgbm90IHBrZ2Rlc3Q6CisgICAgICAgIGJiLmZhdGFsKCJObyBQS0dERVNUIikKKworICAgIG91dHNwZWNmaWxlID0gZC5nZXRWYXIoJ09VVFNQRUNGSUxFJywgVHJ1ZSkKKyAgICBpZiBub3Qgb3V0c3BlY2ZpbGU6CisgICAgICAgIGJiLmZhdGFsKCJObyBPVVRTUEVDRklMRSIpCisKKyAgICAjIENvbnN0cnVjdCB0aGUgU1BFQyBmaWxlLi4uCisgICAgc3JjbmFtZSAgICA9IHN0cmlwX211bHRpbGliKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBkKQorICAgIHNyY3N1bW1hcnkgPSAoZC5nZXRWYXIoJ1NVTU1BUlknLCBUcnVlKSBvciBkLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIpCisgICAgc3JjdmVyc2lvbiA9IGQuZ2V0VmFyKCdQS0dWJywgVHJ1ZSkucmVwbGFjZSgnLScsICcrJykKKyAgICBzcmNyZWxlYXNlID0gZC5nZXRWYXIoJ1BLR1InLCBUcnVlKQorICAgIHNyY2Vwb2NoICAgPSAoZC5nZXRWYXIoJ1BLR0UnLCBUcnVlKSBvciAiIikKKyAgICBzcmNsaWNlbnNlID0gZC5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorICAgIHNyY3NlY3Rpb24gPSBkLmdldFZhcignU0VDVElPTicsIFRydWUpCisgICAgc3JjbWFpbnRhaW5lciAgPSBkLmdldFZhcignTUFJTlRBSU5FUicsIFRydWUpCisgICAgc3JjaG9tZXBhZ2UgICAgPSBkLmdldFZhcignSE9NRVBBR0UnLCBUcnVlKQorICAgIHNyY2Rlc2NyaXB0aW9uID0gZC5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkgb3IgIi4iCisgICAgc3JjY3VzdG9tdGFnc2NodW5rID0gZ2V0X3BhY2thZ2VfYWRkaXRpb25hbF9tZXRhZGF0YSgicnBtIiwgZCkKKworICAgIHNyY2RlcGVuZHMgICAgID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhkLmdldFZhcignREVQRU5EUycsIFRydWUpLCBkKQorICAgIHNyY3JkZXBlbmRzICAgID0gW10KKyAgICBzcmNycmVjb21tZW5kcyA9IFtdCisgICAgc3JjcnN1Z2dlc3RzICAgPSBbXQorICAgIHNyY3Jwcm92aWRlcyAgID0gW10KKyAgICBzcmNycmVwbGFjZXMgICA9IFtdCisgICAgc3JjcmNvbmZsaWN0cyAgPSBbXQorICAgIHNyY3JvYnNvbGV0ZXMgID0gW10KKworICAgIHNyY3JwcmVpbnN0ICA9IFtdCisgICAgc3JjcnBvc3RpbnN0ID0gW10KKyAgICBzcmNycHJlcm0gICAgPSBbXQorICAgIHNyY3Jwb3N0cm0gICA9IFtdCisKKyAgICBzcGVjX3ByZWFtYmxlX3RvcCA9IFtdCisgICAgc3BlY19wcmVhbWJsZV9ib3R0b20gPSBbXQorCisgICAgc3BlY19zY3JpcHRsZXRzX3RvcCA9IFtdCisgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbSA9IFtdCisKKyAgICBzcGVjX2ZpbGVzX3RvcCA9IFtdCisgICAgc3BlY19maWxlc19ib3R0b20gPSBbXQorCisgICAgcGVyZmlsZWRlcHMgPSAoZC5nZXRWYXIoIk1FUkdFUEVSRklMRURFUFMiLCBUcnVlKSBvciAiMCIpID09ICIwIgorICAgIGV4dHJhX3BrZ2RhdGEgPSAoZC5nZXRWYXIoIlJQTV9FWFRSQV9QS0dEQVRBIiwgVHJ1ZSkgb3IgIjAiKSA9PSAiMSIKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisKKyAgICAgICAgcm9vdCA9ICIlcy8lcyIgJSAocGtnZGVzdCwgcGtnKQorCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1JPT1QnLCAnJykKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUk9PVF8lcycgJSBwa2csIHJvb3QpCisgICAgICAgIHBrZ25hbWUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcGtnbmFtZToKKyAgICAgICAgICAgIHBrZ25hbWUgPSBwa2cKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUEtHJywgcGtnbmFtZSkKKworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBkLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjoiICsgcGtnKQorCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGNvbmZmaWxlcyA9IGdldF9jb25mZmlsZXMocGtnLCBkKQorICAgICAgICBkaXJmaWxlcyA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RJUkZJTEVTJywgVHJ1ZSkKKyAgICAgICAgaWYgZGlyZmlsZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkaXJmaWxlcyA9IGRpcmZpbGVzLnNwbGl0KCkKKworICAgICAgICBzcGxpdG5hbWUgICAgPSBzdHJpcF9tdWx0aWxpYihwa2duYW1lLCBkKQorCisgICAgICAgIHNwbGl0c3VtbWFyeSA9IChsb2NhbGRhdGEuZ2V0VmFyKCdTVU1NQVJZJywgVHJ1ZSkgb3IgbG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIpCisgICAgICAgIHNwbGl0dmVyc2lvbiA9IChsb2NhbGRhdGEuZ2V0VmFyKCdQS0dWJywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoJy0nLCAnKycpCisgICAgICAgIHNwbGl0cmVsZWFzZSA9IChsb2NhbGRhdGEuZ2V0VmFyKCdQS0dSJywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIHNwbGl0ZXBvY2ggICA9IChsb2NhbGRhdGEuZ2V0VmFyKCdQS0dFJywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIHNwbGl0bGljZW5zZSA9IChsb2NhbGRhdGEuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIHNwbGl0c2VjdGlvbiA9IChsb2NhbGRhdGEuZ2V0VmFyKCdTRUNUSU9OJywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIHNwbGl0ZGVzY3JpcHRpb24gPSAobG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIpCisgICAgICAgIHNwbGl0Y3VzdG9tdGFnc2NodW5rID0gZ2V0X3BhY2thZ2VfYWRkaXRpb25hbF9tZXRhZGF0YSgicnBtIiwgbG9jYWxkYXRhKQorCisgICAgICAgIHRyYW5zbGF0ZV92ZXJzKCdSREVQRU5EUycsIGxvY2FsZGF0YSkKKyAgICAgICAgdHJhbnNsYXRlX3ZlcnMoJ1JSRUNPTU1FTkRTJywgbG9jYWxkYXRhKQorICAgICAgICB0cmFuc2xhdGVfdmVycygnUlNVR0dFU1RTJywgbG9jYWxkYXRhKQorICAgICAgICB0cmFuc2xhdGVfdmVycygnUlBST1ZJREVTJywgbG9jYWxkYXRhKQorICAgICAgICB0cmFuc2xhdGVfdmVycygnUlJFUExBQ0VTJywgbG9jYWxkYXRhKQorICAgICAgICB0cmFuc2xhdGVfdmVycygnUkNPTkZMSUNUUycsIGxvY2FsZGF0YSkKKworICAgICAgICAjIE1hcCB0aGUgZGVwZW5kZW5jaWVzIGludG8gdGhlaXIgZmluYWwgZm9ybQorICAgICAgICBtYXBwaW5nX3JlbmFtZV9ob29rKGxvY2FsZGF0YSkKKworICAgICAgICBzcGxpdHJkZXBlbmRzICAgID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSREVQRU5EUycsIFRydWUpLCBkKQorICAgICAgICBzcGxpdHJyZWNvbW1lbmRzID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSUkVDT01NRU5EUycsIFRydWUpLCBkKQorICAgICAgICBzcGxpdHJzdWdnZXN0cyAgID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSU1VHR0VTVFMnLCBUcnVlKSwgZCkKKyAgICAgICAgc3BsaXRycHJvdmlkZXMgICA9IHN0cmlwX211bHRpbGliX2RlcHMobG9jYWxkYXRhLmdldFZhcignUlBST1ZJREVTJywgVHJ1ZSksIGQpCisgICAgICAgIHNwbGl0cnJlcGxhY2VzICAgPSBzdHJpcF9tdWx0aWxpYl9kZXBzKGxvY2FsZGF0YS5nZXRWYXIoJ1JSRVBMQUNFUycsIFRydWUpLCBkKQorICAgICAgICBzcGxpdHJjb25mbGljdHMgID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSQ09ORkxJQ1RTJywgVHJ1ZSksIGQpCisgICAgICAgIHNwbGl0cm9ic29sZXRlcyAgPSBbXQorCisgICAgICAgIHNwbGl0cnByZWluc3QgID0gbG9jYWxkYXRhLmdldFZhcigncGtnX3ByZWluc3QnLCBUcnVlKQorICAgICAgICBzcGxpdHJwb3N0aW5zdCA9IGxvY2FsZGF0YS5nZXRWYXIoJ3BrZ19wb3N0aW5zdCcsIFRydWUpCisgICAgICAgIHNwbGl0cnByZXJtICAgID0gbG9jYWxkYXRhLmdldFZhcigncGtnX3ByZXJtJywgVHJ1ZSkKKyAgICAgICAgc3BsaXRycG9zdHJtICAgPSBsb2NhbGRhdGEuZ2V0VmFyKCdwa2dfcG9zdHJtJywgVHJ1ZSkKKworCisgICAgICAgIGlmIG5vdCBwZXJmaWxlZGVwczoKKyAgICAgICAgICAgICMgQWRkIGluIHN1bW1hcnkgb2YgcGVyIGZpbGUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBzcGxpdHJkZXBlbmRzID0gc3BsaXRyZGVwZW5kcyArICIgIiArIGdldF9wZXJmaWxlKCdSREVQRU5EUycsIHBrZywgZCkKKyAgICAgICAgICAgIHNwbGl0cnByb3ZpZGVzID0gc3BsaXRycHJvdmlkZXMgKyAiICIgKyBnZXRfcGVyZmlsZSgnUlBST1ZJREVTJywgcGtnLCBkKQorCisgICAgICAgICMgR2F0aGVyIHNwZWNpYWwgc3JjL2ZpcnN0IHBhY2thZ2UgZGF0YQorICAgICAgICBpZiBzcmNuYW1lID09IHNwbGl0bmFtZToKKyAgICAgICAgICAgIHNyY3JkZXBlbmRzICAgID0gc3BsaXRyZGVwZW5kcworICAgICAgICAgICAgc3JjcnJlY29tbWVuZHMgPSBzcGxpdHJyZWNvbW1lbmRzCisgICAgICAgICAgICBzcmNyc3VnZ2VzdHMgICA9IHNwbGl0cnN1Z2dlc3RzCisgICAgICAgICAgICBzcmNycHJvdmlkZXMgICA9IHNwbGl0cnByb3ZpZGVzCisgICAgICAgICAgICBzcmNycmVwbGFjZXMgICA9IHNwbGl0cnJlcGxhY2VzCisgICAgICAgICAgICBzcmNyY29uZmxpY3RzICA9IHNwbGl0cmNvbmZsaWN0cworCisgICAgICAgICAgICBzcmNycHJlaW5zdCAgICA9IHNwbGl0cnByZWluc3QKKyAgICAgICAgICAgIHNyY3Jwb3N0aW5zdCAgID0gc3BsaXRycG9zdGluc3QKKyAgICAgICAgICAgIHNyY3JwcmVybSAgICAgID0gc3BsaXRycHJlcm0KKyAgICAgICAgICAgIHNyY3Jwb3N0cm0gICAgID0gc3BsaXRycG9zdHJtCisKKyAgICAgICAgICAgIGZpbGVfbGlzdCA9IFtdCisgICAgICAgICAgICB3YWxrX2ZpbGVzKHJvb3QsIGZpbGVfbGlzdCwgY29uZmZpbGVzLCBkaXJmaWxlcykKKyAgICAgICAgICAgIGlmIG5vdCBmaWxlX2xpc3QgYW5kIGxvY2FsZGF0YS5nZXRWYXIoJ0FMTE9XX0VNUFRZJywgRmFsc2UpICE9ICIxIjoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJOb3QgY3JlYXRpbmcgZW1wdHkgUlBNIHBhY2thZ2UgZm9yICVzIiAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiQ3JlYXRpbmcgUlBNIHBhY2thZ2UgZm9yICVzIiAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgICAgICBzcGVjX2ZpbGVzX3RvcC5hcHBlbmQoJyVmaWxlcycpCisgICAgICAgICAgICAgICAgaWYgZXh0cmFfcGtnZGF0YToKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9ycG1fZXh0cmFfcGtnZGF0YShzcGxpdG5hbWUsIHNwZWNfZmlsZXNfdG9wLCBsb2NhbGRhdGEpCisgICAgICAgICAgICAgICAgc3BlY19maWxlc190b3AuYXBwZW5kKCclZGVmYXR0cigtLC0sLSwtKScpCisgICAgICAgICAgICAgICAgaWYgZmlsZV9saXN0OgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGluZyBSUE0gcGFja2FnZSBmb3IgJXMiICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgICAgICAgICBzcGVjX2ZpbGVzX3RvcC5leHRlbmQoZmlsZV9saXN0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIkNyZWF0aW5nIEVNUFRZIFJQTSBQYWNrYWdlIGZvciAlcyIgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICAgICAgc3BlY19maWxlc190b3AuYXBwZW5kKCcnKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAjIFByb2Nlc3Mgc3VicGFja2FnZSBkYXRhCisgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnJSVwYWNrYWdlIC1uICVzJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCdTdW1tYXJ5OiAlcycgJSBzcGxpdHN1bW1hcnkpCisgICAgICAgIGlmIHNyY3ZlcnNpb24gIT0gc3BsaXR2ZXJzaW9uOgorICAgICAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCdWZXJzaW9uOiAlcycgJSBzcGxpdHZlcnNpb24pCisgICAgICAgIGlmIHNyY3JlbGVhc2UgIT0gc3BsaXRyZWxlYXNlOgorICAgICAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCdSZWxlYXNlOiAlcycgJSBzcGxpdHJlbGVhc2UpCisgICAgICAgIGlmIHNyY2Vwb2NoICE9IHNwbGl0ZXBvY2g6CisgICAgICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJ0Vwb2NoOiAlcycgJSBzcGxpdGVwb2NoKQorICAgICAgICBpZiBzcmNsaWNlbnNlICE9IHNwbGl0bGljZW5zZToKKyAgICAgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnTGljZW5zZTogJXMnICUgc3BsaXRsaWNlbnNlKQorICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJ0dyb3VwOiAlcycgJSBzcGxpdHNlY3Rpb24pCisKKyAgICAgICAgaWYgc3JjY3VzdG9tdGFnc2NodW5rICE9IHNwbGl0Y3VzdG9tdGFnc2NodW5rOgorICAgICAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKHNwbGl0Y3VzdG9tdGFnc2NodW5rKQorCisgICAgICAgICMgUmVwbGFjZXMgPT0gT2Jzb2xldGVzICYmIFByb3ZpZGVzCisgICAgICAgIHJvYnNvbGV0ZXMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoc3BsaXRyb2Jzb2xldGVzIG9yICIiKQorICAgICAgICBycHJvdmlkZXMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoc3BsaXRycHJvdmlkZXMgb3IgIiIpCisgICAgICAgIHJyZXBsYWNlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcGxpdHJyZXBsYWNlcyBvciAiIikKKyAgICAgICAgZm9yIGRlcCBpbiBycmVwbGFjZXM6CisgICAgICAgICAgICBpZiBub3QgZGVwIGluIHJvYnNvbGV0ZXM6CisgICAgICAgICAgICAgICAgcm9ic29sZXRlc1tkZXBdID0gcnJlcGxhY2VzW2RlcF0KKyAgICAgICAgICAgIGlmIG5vdCBkZXAgaW4gcnByb3ZpZGVzOgorICAgICAgICAgICAgICAgIHJwcm92aWRlc1tkZXBdID0gcnJlcGxhY2VzW2RlcF0KKyAgICAgICAgc3BsaXRyb2Jzb2xldGVzID0gYmIudXRpbHMuam9pbl9kZXBzKHJvYnNvbGV0ZXMsIGNvbW1hc2VwPUZhbHNlKQorICAgICAgICBzcGxpdHJwcm92aWRlcyA9IGJiLnV0aWxzLmpvaW5fZGVwcyhycHJvdmlkZXMsIGNvbW1hc2VwPUZhbHNlKQorCisgICAgICAgIHByaW50X2RlcHMoc3BsaXRyZGVwZW5kcywgIlJlcXVpcmVzIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCisgICAgICAgIGlmIHNwbGl0cnByZWluc3Q6CisgICAgICAgICAgICBwcmludF9kZXBzKHNwbGl0cmRlcGVuZHMsICJSZXF1aXJlcyhwcmUpIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCisgICAgICAgIGlmIHNwbGl0cnBvc3RpbnN0OgorICAgICAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJkZXBlbmRzLCAiUmVxdWlyZXMocG9zdCkiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKyAgICAgICAgaWYgc3BsaXRycHJlcm06CisgICAgICAgICAgICBwcmludF9kZXBzKHNwbGl0cmRlcGVuZHMsICJSZXF1aXJlcyhwcmV1bikiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKyAgICAgICAgaWYgc3BsaXRycG9zdHJtOgorICAgICAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJkZXBlbmRzLCAiUmVxdWlyZXMocG9zdHVuKSIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorCisgICAgICAgICMgU3VnZ2VzdHMgaW4gUlBNIGFyZSBsaWtlIHJlY29tbWVuZHMgaW4gT0UtY29yZSEKKyAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJyZWNvbW1lbmRzLCAiU3VnZ2VzdHMiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKyAgICAgICAgIyBXaGlsZSB0aGVyZSBpcyBubyBhbmFsb2cgZm9yIHN1Z2dlc3RzLi4uIChTbyBjYWxsIHRoZW0gcmVjb21tZW5kcyBmb3Igbm93KQorICAgICAgICBwcmludF9kZXBzKHNwbGl0cnN1Z2dlc3RzLCAgIlJlY29tbWVuZHMiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKyAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJwcm92aWRlcywgICJQcm92aWRlcyIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorICAgICAgICBwcmludF9kZXBzKHNwbGl0cm9ic29sZXRlcywgIk9ic29sZXRlcyIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorCisgICAgICAgICMgY29uZmxpY3RzIGNhbiBub3QgYmUgaW4gYSBwcm92aWRlISAgV2Ugd2lsbCBuZWVkIHRvIGZpbHRlciBpdC4KKyAgICAgICAgaWYgc3BsaXRyY29uZmxpY3RzOgorICAgICAgICAgICAgZGVwZW5kc19kaWN0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHNwbGl0cmNvbmZsaWN0cykKKyAgICAgICAgICAgIG5ld2RlcHNfZGljdCA9IHt9CisgICAgICAgICAgICBmb3IgZGVwIGluIGRlcGVuZHNfZGljdDoKKyAgICAgICAgICAgICAgICBpZiBkZXAgbm90IGluIHNwbGl0cnByb3ZpZGVzOgorICAgICAgICAgICAgICAgICAgICBuZXdkZXBzX2RpY3RbZGVwXSA9IGRlcGVuZHNfZGljdFtkZXBdCisgICAgICAgICAgICBpZiBuZXdkZXBzX2RpY3Q6CisgICAgICAgICAgICAgICAgc3BsaXRyY29uZmxpY3RzID0gYmIudXRpbHMuam9pbl9kZXBzKG5ld2RlcHNfZGljdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3BsaXRyY29uZmxpY3RzID0gIiIKKworICAgICAgICBwcmludF9kZXBzKHNwbGl0cmNvbmZsaWN0cywgICJDb25mbGljdHMiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKworICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJycpCisKKyAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCclJWRlc2NyaXB0aW9uIC1uICVzJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgYXBwZW5kX2Rlc2NyaXB0aW9uKHNwZWNfcHJlYW1ibGVfYm90dG9tLCBzcGxpdGRlc2NyaXB0aW9uKQorCisgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnJykKKworICAgICAgICAjIE5vdyBwcm9jZXNzIHNjcmlwdGxldHMKKyAgICAgICAgaWYgc3BsaXRycHJlaW5zdDoKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCclJXByZSAtbiAlcycgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnIyAlcyAtIHByZWluc3QnICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoc3BsaXRycHJlaW5zdCkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcnKQorICAgICAgICBpZiBzcGxpdHJwb3N0aW5zdDoKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCclJXBvc3QgLW4gJXMnICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJyMgJXMgLSBwb3N0aW5zdCcgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZChzcGxpdHJwb3N0aW5zdCkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcnKQorICAgICAgICBpZiBzcGxpdHJwcmVybToKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCclJXByZXVuIC1uICVzJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcjICVzIC0gcHJlcm0nICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgc2NyaXB0dmFyID0gd3JhcF91bmluc3RhbGwoc3BsaXRycHJlcm0pCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZChzY3JpcHR2YXIpCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnJykKKyAgICAgICAgaWYgc3BsaXRycG9zdHJtOgorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJyUlcG9zdHVuIC1uICVzJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcjICVzIC0gcG9zdHJtJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIHNjcmlwdHZhciA9IHdyYXBfdW5pbnN0YWxsKHNwbGl0cnBvc3RybSkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKHNjcmlwdHZhcikKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcnKQorCisgICAgICAgICMgTm93IHByb2Nlc3MgZmlsZXMKKyAgICAgICAgZmlsZV9saXN0ID0gW10KKyAgICAgICAgd2Fsa19maWxlcyhyb290LCBmaWxlX2xpc3QsIGNvbmZmaWxlcywgZGlyZmlsZXMpCisgICAgICAgIGlmIG5vdCBmaWxlX2xpc3QgYW5kIGxvY2FsZGF0YS5nZXRWYXIoJ0FMTE9XX0VNUFRZJywgRmFsc2UpICE9ICIxIjoKKyAgICAgICAgICAgIGJiLm5vdGUoIk5vdCBjcmVhdGluZyBlbXB0eSBSUE0gcGFja2FnZSBmb3IgJXMiICUgc3BsaXRuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3BlY19maWxlc19ib3R0b20uYXBwZW5kKCclJWZpbGVzIC1uICVzJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIGlmIGV4dHJhX3BrZ2RhdGE6CisgICAgICAgICAgICAgICAgcGFja2FnZV9ycG1fZXh0cmFfcGtnZGF0YShzcGxpdG5hbWUsIHNwZWNfZmlsZXNfYm90dG9tLCBsb2NhbGRhdGEpCisgICAgICAgICAgICBzcGVjX2ZpbGVzX2JvdHRvbS5hcHBlbmQoJyVkZWZhdHRyKC0sLSwtLC0pJykKKyAgICAgICAgICAgIGlmIGZpbGVfbGlzdDoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGluZyBSUE0gcGFja2FnZSBmb3IgJXMiICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgICAgIHNwZWNfZmlsZXNfYm90dG9tLmV4dGVuZChmaWxlX2xpc3QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIkNyZWF0aW5nIEVNUFRZIFJQTSBQYWNrYWdlIGZvciAlcyIgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBzcGVjX2ZpbGVzX2JvdHRvbS5hcHBlbmQoJycpCisKKyAgICAgICAgZGVsIGxvY2FsZGF0YQorICAgIAorICAgIGFkZF9wcmVwKGQsc3BlY19maWxlc19ib3R0b20pCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdTdW1tYXJ5OiAlcycgJSBzcmNzdW1tYXJ5KQorICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnTmFtZTogJXMnICUgc3JjbmFtZSkKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ1ZlcnNpb246ICVzJyAlIHNyY3ZlcnNpb24pCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdSZWxlYXNlOiAlcycgJSBzcmNyZWxlYXNlKQorICAgIGlmIHNyY2Vwb2NoIGFuZCBzcmNlcG9jaC5zdHJpcCgpICE9ICIiOgorICAgICAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ0Vwb2NoOiAlcycgJSBzcmNlcG9jaCkKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ0xpY2Vuc2U6ICVzJyAlIHNyY2xpY2Vuc2UpCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdHcm91cDogJXMnICUgc3Jjc2VjdGlvbikKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ1BhY2thZ2VyOiAlcycgJSBzcmNtYWludGFpbmVyKQorICAgIGlmIHNyY2hvbWVwYWdlOgorICAgICAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ1VSTDogJXMnICUgc3JjaG9tZXBhZ2UpCisgICAgaWYgc3JjY3VzdG9tdGFnc2NodW5rOgorICAgICAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoc3JjY3VzdG9tdGFnc2NodW5rKQorICAgIHRhaWxfc291cmNlKGQpCisKKyAgICAjIFJlcGxhY2VzID09IE9ic29sZXRlcyAmJiBQcm92aWRlcworICAgIHJvYnNvbGV0ZXMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoc3Jjcm9ic29sZXRlcyBvciAiIikKKyAgICBycHJvdmlkZXMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoc3JjcnByb3ZpZGVzIG9yICIiKQorICAgIHJyZXBsYWNlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcmNycmVwbGFjZXMgb3IgIiIpCisgICAgZm9yIGRlcCBpbiBycmVwbGFjZXM6CisgICAgICAgIGlmIG5vdCBkZXAgaW4gcm9ic29sZXRlczoKKyAgICAgICAgICAgIHJvYnNvbGV0ZXNbZGVwXSA9IHJyZXBsYWNlc1tkZXBdCisgICAgICAgIGlmIG5vdCBkZXAgaW4gcnByb3ZpZGVzOgorICAgICAgICAgICAgcnByb3ZpZGVzW2RlcF0gPSBycmVwbGFjZXNbZGVwXQorICAgIHNyY3JvYnNvbGV0ZXMgPSBiYi51dGlscy5qb2luX2RlcHMocm9ic29sZXRlcywgY29tbWFzZXA9RmFsc2UpCisgICAgc3JjcnByb3ZpZGVzID0gYmIudXRpbHMuam9pbl9kZXBzKHJwcm92aWRlcywgY29tbWFzZXA9RmFsc2UpCisKKyAgICBwcmludF9kZXBzKHNyY2RlcGVuZHMsICJCdWlsZFJlcXVpcmVzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgcHJpbnRfZGVwcyhzcmNyZGVwZW5kcywgIlJlcXVpcmVzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgaWYgc3JjcnByZWluc3Q6CisgICAgICAgIHByaW50X2RlcHMoc3JjcmRlcGVuZHMsICJSZXF1aXJlcyhwcmUpIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgaWYgc3JjcnBvc3RpbnN0OgorICAgICAgICBwcmludF9kZXBzKHNyY3JkZXBlbmRzLCAiUmVxdWlyZXMocG9zdCkiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICBpZiBzcmNycHJlcm06CisgICAgICAgIHByaW50X2RlcHMoc3JjcmRlcGVuZHMsICJSZXF1aXJlcyhwcmV1bikiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICBpZiBzcmNycG9zdHJtOgorICAgICAgICBwcmludF9kZXBzKHNyY3JkZXBlbmRzLCAiUmVxdWlyZXMocG9zdHVuKSIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorCisgICAgIyBTdWdnZXN0cyBpbiBSUE0gYXJlIGxpa2UgcmVjb21tZW5kcyBpbiBPRS1jb3JlIQorICAgIHByaW50X2RlcHMoc3JjcnJlY29tbWVuZHMsICJTdWdnZXN0cyIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorICAgICMgV2hpbGUgdGhlcmUgaXMgbm8gYW5hbG9nIGZvciBzdWdnZXN0cy4uLiAoU28gY2FsbCB0aGVtIHJlY29tbWVuZHMgZm9yIG5vdykKKyAgICBwcmludF9kZXBzKHNyY3JzdWdnZXN0cywgIlJlY29tbWVuZHMiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICBwcmludF9kZXBzKHNyY3Jwcm92aWRlcywgIlByb3ZpZGVzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgcHJpbnRfZGVwcyhzcmNyb2Jzb2xldGVzLCAiT2Jzb2xldGVzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgCisgICAgIyBjb25mbGljdHMgY2FuIG5vdCBiZSBpbiBhIHByb3ZpZGUhICBXZSB3aWxsIG5lZWQgdG8gZmlsdGVyIGl0LgorICAgIGlmIHNyY3Jjb25mbGljdHM6CisgICAgICAgIGRlcGVuZHNfZGljdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcmNyY29uZmxpY3RzKQorICAgICAgICBuZXdkZXBzX2RpY3QgPSB7fQorICAgICAgICBmb3IgZGVwIGluIGRlcGVuZHNfZGljdDoKKyAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gc3JjcnByb3ZpZGVzOgorICAgICAgICAgICAgICAgIG5ld2RlcHNfZGljdFtkZXBdID0gZGVwZW5kc19kaWN0W2RlcF0KKyAgICAgICAgaWYgbmV3ZGVwc19kaWN0OgorICAgICAgICAgICAgc3JjcmNvbmZsaWN0cyA9IGJiLnV0aWxzLmpvaW5fZGVwcyhuZXdkZXBzX2RpY3QpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcmNyY29uZmxpY3RzID0gIiIKKworICAgIHByaW50X2RlcHMoc3JjcmNvbmZsaWN0cywgIkNvbmZsaWN0cyIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCcnKQorCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCclZGVzY3JpcHRpb24nKQorICAgIGFwcGVuZF9kZXNjcmlwdGlvbihzcGVjX3ByZWFtYmxlX3RvcCwgc3JjZGVzY3JpcHRpb24pCisKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJycpCisKKyAgICBpZiBzcmNycHJlaW5zdDoKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyVwcmUnKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnIyAlcyAtIHByZWluc3QnICUgc3JjbmFtZSkKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoc3JjcnByZWluc3QpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcnKQorICAgIGlmIHNyY3Jwb3N0aW5zdDoKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyVwb3N0JykKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyMgJXMgLSBwb3N0aW5zdCcgJSBzcmNuYW1lKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZChzcmNycG9zdGluc3QpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcnKQorICAgIGlmIHNyY3JwcmVybToKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyVwcmV1bicpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcjICVzIC0gcHJlcm0nICUgc3JjbmFtZSkKKyAgICAgICAgc2NyaXB0dmFyID0gd3JhcF91bmluc3RhbGwoc3JjcnByZXJtKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZChzY3JpcHR2YXIpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcnKQorICAgIGlmIHNyY3Jwb3N0cm06CisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCclcG9zdHVuJykKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyMgJXMgLSBwb3N0cm0nICUgc3JjbmFtZSkKKyAgICAgICAgc2NyaXB0dmFyID0gd3JhcF91bmluc3RhbGwoc3JjcnBvc3RybSkKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoc2NyaXB0dmFyKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnJykKKworICAgICMgV3JpdGUgdGhlIFNQRUMgZmlsZQorICAgIHRyeToKKyAgICAgICAgc3BlY2ZpbGUgPSBvcGVuKG91dHNwZWNmaWxlLCAndycpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuIHNwZWMgZmlsZSBmb3Igd3JpdGluZy4iKQorCisgICAgIyBSUE1TUEVDX1BSRUFNQkxFIGlzIGEgd2F5IHRvIGFkZCBhcmJpdHJhcnkgdGV4dCB0byB0aGUgdG9wCisgICAgIyBvZiB0aGUgZ2VuZXJhdGVkIHNwZWMgZmlsZQorICAgIGV4dGVybmFsX3ByZWFtYmxlID0gZC5nZXRWYXIoIlJQTVNQRUNfUFJFQU1CTEUiLCBUcnVlKQorICAgIGlmIGV4dGVybmFsX3ByZWFtYmxlOgorICAgICAgICBzcGVjZmlsZS53cml0ZShleHRlcm5hbF9wcmVhbWJsZSArICJcbiIpCisKKyAgICBmb3IgbGluZSBpbiBzcGVjX3ByZWFtYmxlX3RvcDoKKyAgICAgICAgc3BlY2ZpbGUud3JpdGUobGluZSArICJcbiIpCisKKyAgICBmb3IgbGluZSBpbiBzcGVjX3ByZWFtYmxlX2JvdHRvbToKKyAgICAgICAgc3BlY2ZpbGUud3JpdGUobGluZSArICJcbiIpCisKKyAgICBmb3IgbGluZSBpbiBzcGVjX3NjcmlwdGxldHNfdG9wOgorICAgICAgICBzcGVjZmlsZS53cml0ZShsaW5lICsgIlxuIikKKworICAgIGZvciBsaW5lIGluIHNwZWNfc2NyaXB0bGV0c19ib3R0b206CisgICAgICAgIHNwZWNmaWxlLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgZm9yIGxpbmUgaW4gc3BlY19maWxlc190b3A6CisgICAgICAgIHNwZWNmaWxlLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgZm9yIGxpbmUgaW4gc3BlY19maWxlc19ib3R0b206CisgICAgICAgIHNwZWNmaWxlLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgc3BlY2ZpbGUuY2xvc2UoKQorfQorIyBPdGhlcndpc2UgYWxsYXJjaCBwYWNrYWdlcyBtYXkgY2hhbmdlIGRlcGVuZGluZyBvbiBvdmVycmlkZSBjb25maWd1cmF0aW9uCit3cml0ZV9zcGVjZmlsZVt2YXJkZXBzZXhjbHVkZV0gPSAiT1ZFUlJJREVTIgorCitweXRob24gZG9fcGFja2FnZV9ycG0gKCkgeworICAgICMgV2UgbmVlZCBhIHNpbXBsZSB3YXkgdG8gcmVtb3ZlIHRoZSBNTFBSRUZJWCBmcm9tIHRoZSBwYWNrYWdlIG5hbWUsCisgICAgIyBhbmQgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbi4uLgorICAgIGRlZiBzdHJpcF9tdWx0aWxpYihuYW1lLCBkKToKKyAgICAgICAgbWwgPSBkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKQorICAgICAgICBpZiBtbCBhbmQgbmFtZSBhbmQgbGVuKG1sKSAhPSAwIGFuZCBuYW1lLmZpbmQobWwpID49IDA6CisgICAgICAgICAgICByZXR1cm4gIiIuam9pbihuYW1lLnNwbGl0KG1sKSkKKyAgICAgICAgcmV0dXJuIG5hbWUKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisgICAgcGtnZCA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGlmIG5vdCB3b3JrZGlyIG9yIG5vdCBwa2dkIG9yIG5vdCB0bXBkaXI6CisgICAgICAgIGJiLmVycm9yKCJWYXJpYWJsZXMgaW5jb3JyZWN0bHkgc2V0LCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGlmIG5vdCBwYWNrYWdlcyBvciBwYWNrYWdlcyA9PSAnJzoKKyAgICAgICAgYmIuZGVidWcoMSwgIk5vIHBhY2thZ2VzOyBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIENvbnN0cnVjdCB0aGUgc3BlYyBmaWxlLi4uCisgICAgIyBJZiB0aGUgc3BlYyBmaWxlIGFscmVhZHkgZXhpc3QsIGFuZCBoYXMgbm90IGJlZW4gc3RvcmVkIGludG8gCisgICAgIyBwc2V1ZG8ncyBmaWxlcy5kYiwgaXQgbWF5YmUgY2F1c2UgcnBtYnVpbGQgc3JjLnJwbSBmYWlsLAorICAgICMgc28gcmVtb3ZlIGl0IGJlZm9yZSBkb2luZyBycG1idWlsZCBzcmMucnBtLgorICAgIHNyY25hbWUgICAgPSBzdHJpcF9tdWx0aWxpYihkLmdldFZhcignUE4nLCBUcnVlKSwgZCkKKyAgICBvdXRzcGVjZmlsZSA9IHdvcmtkaXIgKyAiLyIgKyBzcmNuYW1lICsgIi5zcGVjIgorICAgIGlmIG9zLnBhdGguaXNmaWxlKG91dHNwZWNmaWxlKToKKyAgICAgICAgb3MucmVtb3ZlKG91dHNwZWNmaWxlKQorICAgIGQuc2V0VmFyKCdPVVRTUEVDRklMRScsIG91dHNwZWNmaWxlKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnd3JpdGVfc3BlY2ZpbGUnLCBkKQorCisgICAgcGVyZmlsZWRlcHMgPSAoZC5nZXRWYXIoIk1FUkdFUEVSRklMRURFUFMiLCBUcnVlKSBvciAiMCIpID09ICIwIgorICAgIGlmIHBlcmZpbGVkZXBzOgorICAgICAgICBvdXRkZXBlbmRzLCBvdXRwcm92aWRlcyA9IHdyaXRlX3JwbV9wZXJmaWxlZGF0YShzcmNuYW1lLCBkKQorCisgICAgIyBTZXR1cCB0aGUgcnBtYnVpbGQgYXJndW1lbnRzLi4uCisgICAgcnBtYnVpbGQgPSBkLmdldFZhcignUlBNQlVJTEQnLCBUcnVlKQorICAgIHRhcmdldHN5cyA9IGQuZ2V0VmFyKCdUQVJHRVRfU1lTJywgVHJ1ZSkKKyAgICB0YXJnZXR2ZW5kb3IgPSBkLmdldFZhcignSE9TVF9WRU5ET1InLCBUcnVlKQorICAgIHBhY2thZ2VfYXJjaCA9IChkLmdldFZhcignUEFDS0FHRV9BUkNIJywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoIi0iLCAiXyIpCisgICAgc2RrcGtnc3VmZml4ID0gKGQuZ2V0VmFyKCdTREtQS0dTVUZGSVgnLCBUcnVlKSBvciAibmF0aXZlc2RrIikucmVwbGFjZSgiLSIsICJfIikKKyAgICBpZiBwYWNrYWdlX2FyY2ggbm90IGluICJhbGwgYW55IG5vYXJjaCIuc3BsaXQoKSBhbmQgbm90IHBhY2thZ2VfYXJjaC5lbmRzd2l0aChzZGtwa2dzdWZmaXgpOgorICAgICAgICBtbF9wcmVmaXggPSAoZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoIi0iLCAiXyIpCisgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFX0FSQ0hfRVhURU5EJywgbWxfcHJlZml4ICsgcGFja2FnZV9hcmNoKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFX0FSQ0hfRVhURU5EJywgcGFja2FnZV9hcmNoKQorICAgIHBrZ3dyaXRlZGlyID0gZC5leHBhbmQoJyR7UEtHV1JJVEVESVJSUE19LyR7UEFDS0FHRV9BUkNIX0VYVEVORH0nKQorICAgIGQuc2V0VmFyKCdSUE1fUEtHV1JJVEVESVInLCBwa2d3cml0ZWRpcikKKyAgICBiYi5kZWJ1ZygxLCAnUEtHV1JJVEVESVI6ICVzJyAlIGQuZ2V0VmFyKCdSUE1fUEtHV1JJVEVESVInLCBUcnVlKSkKKyAgICBwa2dhcmNoID0gZC5leHBhbmQoJyR7UEFDS0FHRV9BUkNIX0VYVEVORH0ke0hPU1RfVkVORE9SfS0ke0hPU1RfT1N9JykKKyAgICBtYWdpY2ZpbGUgPSBkLmV4cGFuZCgnJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtkYXRhZGlyX25hdGl2ZX0vbWlzYy9tYWdpYy5tZ2MnKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihwa2d3cml0ZWRpcikKKyAgICBvcy5jaG1vZChwa2d3cml0ZWRpciwgMDc1NSkKKworICAgIGNtZCA9IHJwbWJ1aWxkCisgICAgY21kID0gY21kICsgIiAtLW5vZGVwcyAtLXNob3J0LWNpcmN1aXQgLS10YXJnZXQgIiArIHBrZ2FyY2ggKyAiIC0tYnVpbGRyb290ICIgKyBwa2dkCisgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX3RvcGRpciAiICsgd29ya2RpciArICInIC0tZGVmaW5lICdfcnBtZGlyICIgKyBwa2d3cml0ZWRpciArICInIgorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19idWlsZGRpciAiICsgZC5nZXRWYXIoJ1MnLCBUcnVlKSArICInIgorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19idWlsZF9uYW1lX2ZtdCAlJXtOQU1FfS0lJXtWRVJTSU9OfS0lJXtSRUxFQVNFfS4lJXtBUkNIfS5ycG0nIgorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ191c2VfaW50ZXJuYWxfZGVwZW5kZW5jeV9nZW5lcmF0b3IgMCciCisgICAgaWYgcGVyZmlsZWRlcHM6CisgICAgICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19fZmluZF9yZXF1aXJlcyAiICsgb3V0ZGVwZW5kcyArICInIgorICAgICAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfX2ZpbmRfcHJvdmlkZXMgIiArIG91dHByb3ZpZGVzICsgIiciCisgICAgZWxzZToKKyAgICAgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX19maW5kX3JlcXVpcmVzICV7bmlsfSciCisgICAgICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19fZmluZF9wcm92aWRlcyAle25pbH0nIgorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ191bnBhY2thZ2VkX2ZpbGVzX3Rlcm1pbmF0ZV9idWlsZCAwJyIKKyAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdkZWJ1Z19wYWNrYWdlICV7bmlsfSciCisgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX3JwbWZjX21hZ2ljX3BhdGggIiArIG1hZ2ljZmlsZSArICInIgorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ190bXBwYXRoICIgKyB3b3JrZGlyICsgIiciCisgICAgaWYgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NycG0nLCBUcnVlKSA9PSAnMScgYW5kIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FyY2hpdmVyJywgZCk6CisgICAgICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19zb3VyY2VkaXIgIiArIGQuZ2V0VmFyKCdBUkNISVZFUl9PVVRESVInLCBUcnVlKSArICInIgorICAgICAgICBjbWRzcnBtID0gY21kICsgIiAtLWRlZmluZSAnX3NyY3JwbWRpciAiICsgZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpICsgIiciCisgICAgICAgIGNtZHNycG0gPSBjbWRzcnBtICsgIiAtYnMgIiArIG91dHNwZWNmaWxlCisgICAgICAgICMgQnVpbGQgdGhlIC5zcmMucnBtCisgICAgICAgIGQuc2V0VmFyKCdTQlVJTERTUEVDJywgY21kc3JwbSArICJcbiIpCisgICAgICAgIGQuc2V0VmFyRmxhZygnU0JVSUxEU1BFQycsICdmdW5jJywgJzEnKQorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ1NCVUlMRFNQRUMnLCBkKQorICAgIGNtZCA9IGNtZCArICIgLWJiICIgKyBvdXRzcGVjZmlsZQorCisgICAgIyBCdWlsZCB0aGUgcnBtIHBhY2thZ2UhCisgICAgZC5zZXRWYXIoJ0JVSUxEU1BFQycsIGNtZCArICJcbiIpCisgICAgZC5zZXRWYXJGbGFnKCdCVUlMRFNQRUMnLCAnZnVuYycsICcxJykKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ0JVSUxEU1BFQycsIGQpCisKKyAgICBpZiBkLmdldFZhcignUlBNX1NJR05fUEFDS0FHRVMnLCBUcnVlKSA9PSAnMSc6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygic2lnbl9ycG0iLCBkKQorfQorCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpICE9ICcnOgorICAgICAgICBkZXBzID0gJyBycG0tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgdmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkZXBlbmRzJywgZGVwcykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdmYWtlcm9vdCcsIDEpCit9CisKK1NTVEFURVRBU0tTICs9ICJkb19wYWNrYWdlX3dyaXRlX3JwbSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7UEtHV1JJVEVESVJSUE19IgorZG9fcGFja2FnZV93cml0ZV9ycG1bc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7REVQTE9ZX0RJUl9SUE19IgorIyBUYWtlIGEgc2hhcmVkIGxvY2ssIHdlIGNhbiB3cml0ZSBtdWx0aXBsZSBwYWNrYWdlcyBhdCB0aGUgc2FtZSB0aW1lLi4uCisjIGJ1dCB3ZSBuZWVkIHRvIHN0b3AgdGhlIHJvb3Rmcy9zb2x2ZXIgZnJvbSBydW5uaW5nIHdoaWxlIHdlIGRvLi4uCitkb19wYWNrYWdlX3dyaXRlX3JwbVtzc3RhdGUtbG9ja2ZpbGUtc2hhcmVkXSArPSAiJHtERVBMT1lfRElSX1JQTX0vcnBtLmxvY2siCisKK3B5dGhvbiBkb19wYWNrYWdlX3dyaXRlX3JwbV9zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfcnBtX3NldHNjZW5lCisKK3B5dGhvbiBkb19wYWNrYWdlX3dyaXRlX3JwbSAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJyZWFkX3N1YnBhY2thZ2VfbWV0YWRhdGEiLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiZG9fcGFja2FnZV9ycG0iLCBkKQorfQorCitkb19wYWNrYWdlX3dyaXRlX3JwbVtkaXJzXSA9ICIke1BLR1dSSVRFRElSUlBNfSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW2NsZWFuZGlyc10gPSAiJHtQS0dXUklURURJUlJQTX0iCitkb19wYWNrYWdlX3dyaXRlX3JwbVt1bWFza10gPSAiMDIyIgorYWRkdGFzayBwYWNrYWdlX3dyaXRlX3JwbSBhZnRlciBkb19wYWNrYWdlZGF0YSBkb19wYWNrYWdlCisKK1BBQ0tBR0VJTkRFWERFUFMgKz0gInJwbS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK1BBQ0tBR0VJTkRFWERFUFMgKz0gImNyZWF0ZXJlcG8tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK2RvX2J1aWxkW3JlY3JkZXB0YXNrXSArPSAiZG9fcGFja2FnZV93cml0ZV9ycG0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX3Rhci5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV90YXIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWUyMjkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV90YXIuYmJjbGFzcwpAQCAtMCwwICsxLDY5IEBACitpbmhlcml0IHBhY2thZ2UKKworSU1BR0VfUEtHVFlQRSA/PSAidGFyIgorCitweXRob24gZG9fcGFja2FnZV90YXIgKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBpZiBub3Qgd29ya2RpcjoKKyAgICAgICAgYmIuZXJyb3IoIldPUktESVIgbm90IGRlZmluZWQsIHVuYWJsZSB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBvdXRkaXIgPSBkLmdldFZhcignREVQTE9ZX0RJUl9UQVInLCBUcnVlKQorICAgIGlmIG5vdCBvdXRkaXI6CisgICAgICAgIGJiLmVycm9yKCJERVBMT1lfRElSX1RBUiBub3QgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIGR2YXIgPSBkLmdldFZhcignRCcsIFRydWUpCisgICAgaWYgbm90IGR2YXI6CisgICAgICAgIGJiLmVycm9yKCJEIG5vdCBkZWZpbmVkLCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGlmIG5vdCBwYWNrYWdlczoKKyAgICAgICAgYmIuZGVidWcoMSwgIlBBQ0tBR0VTIG5vdCBkZWZpbmVkLCBub3RoaW5nIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3V0ZGlyKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkdmFyKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgcm9vdCA9ICIlcy8lcyIgJSAocGtnZGVzdCwgcGtnKQorCisgICAgICAgIG92ZXJyaWRlcyA9IGxvY2FsZGF0YS5nZXRWYXIoJ09WRVJSSURFUycsIEZhbHNlKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAnJXM6JXMnICUgKG92ZXJyaWRlcywgcGtnKSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHJvb3QpCisgICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmRpcm5hbWUocm9vdCkKKyAgICAgICAgdGFyZm4gPSBsb2NhbGRhdGEuZXhwYW5kKCIke0RFUExPWV9ESVJfVEFSfS8ke1BLR30tJHtQS0dWfS0ke1BLR1J9LnRhci5neiIpCisgICAgICAgIG9zLmNoZGlyKHJvb3QpCisgICAgICAgIGRsaXN0ID0gb3MubGlzdGRpcihyb290KQorICAgICAgICBpZiBub3QgZGxpc3Q6CisgICAgICAgICAgICBiYi5ub3RlKCJOb3QgY3JlYXRpbmcgZW1wdHkgYXJjaGl2ZSBmb3IgJXMtJXMtJXMiICUgKHBrZywgbG9jYWxkYXRhLmdldFZhcignUEtHVicsIFRydWUpLCBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dSJywgVHJ1ZSkpKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgYXJncyA9ICJ0YXIgLWN6IC0tZXhjbHVkZT1DT05UUk9MIC0tZXhjbHVkZT1ERUJJQU4gLWYiLnNwbGl0KCkKKyAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKGFyZ3MgKyBbdGFyZm5dICsgZGxpc3QpCisgICAgICAgIGlmIHJldCAhPSAwOgorICAgICAgICAgICAgYmIuZXJyb3IoIkNyZWF0aW9uIG9mIHRhciAlcyBmYWlsZWQuIiAlIHRhcmZuKQorfQorCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpICE9ICcnOgorICAgICAgICBkZXBzID0gKGQuZ2V0VmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV90YXInLCAnZGVwZW5kcycpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGRlcHMuYXBwZW5kKCd0YXItbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICBkZXBzLmFwcGVuZCgndmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV90YXInLCAnZGVwZW5kcycsICIgIi5qb2luKGRlcHMpKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfdGFyJywgJ2Zha2Vyb290JywgIjEiKQorfQorCisKK3B5dGhvbiBkb19wYWNrYWdlX3dyaXRlX3RhciAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJyZWFkX3N1YnBhY2thZ2VfbWV0YWRhdGEiLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiZG9fcGFja2FnZV90YXIiLCBkKQorfQorZG9fcGFja2FnZV93cml0ZV90YXJbZGlyc10gPSAiJHtEfSIKK2FkZHRhc2sgcGFja2FnZV93cml0ZV90YXIgYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX3BhY2thZ2VkYXRhIGRvX3BhY2thZ2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VkYXRhLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlZGF0YS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOTdmMWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlZGF0YS5iYmNsYXNzCkBAIC0wLDAgKzEsMzQgQEAKK3B5dGhvbiByZWFkX3N1YnBhY2thZ2VfbWV0YWRhdGEgKCkgeworICAgIGltcG9ydCBvZS5wYWNrYWdlZGF0YQorCisgICAgdmFycyA9IHsKKyAgICAgICAgIlBOIiA6IGQuZ2V0VmFyKCdQTicsIFRydWUpLCAKKyAgICAgICAgIlBFIiA6IGQuZ2V0VmFyKCdQRScsIFRydWUpLCAKKyAgICAgICAgIlBWIiA6IGQuZ2V0VmFyKCdQVicsIFRydWUpLAorICAgICAgICAiUFIiIDogZC5nZXRWYXIoJ1BSJywgVHJ1ZSksCisgICAgfQorCisgICAgZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfcGtnZGF0YSh2YXJzWyJQTiJdLCBkKQorCisgICAgZm9yIGtleSBpbiBkYXRhLmtleXMoKToKKyAgICAgICAgZC5zZXRWYXIoa2V5LCBkYXRhW2tleV0pCisKKyAgICBmb3IgcGtnIGluIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIHNkYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhKHBrZywgZCkKKyAgICAgICAgZm9yIGtleSBpbiBzZGF0YS5rZXlzKCk6CisgICAgICAgICAgICBpZiBrZXkgaW4gdmFyczoKKyAgICAgICAgICAgICAgICBpZiBzZGF0YVtrZXldICE9IHZhcnNba2V5XToKKyAgICAgICAgICAgICAgICAgICAgaWYga2V5ID09ICJQTiI6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiUmVjaXBlICVzIGlzIHRyeWluZyB0byBjcmVhdGUgcGFja2FnZSAlcyB3aGljaCB3YXMgYWxyZWFkeSB3cml0dGVuIGJ5IHJlY2lwZSAlcy4gVGhpcyB3aWxsIGNhdXNlIGNvcnJ1cHRpb24sIHBsZWFzZSByZXNvbHZlIHRoaXMgYW5kIG9ubHkgcHJvdmlkZSB0aGUgcGFja2FnZSBmcm9tIG9uZSByZWNpcGUgb3IgdGhlIG90aGVyIG9yIG9ubHkgYnVpbGQgb25lIG9mIHRoZSByZWNpcGVzLiIgJSAodmFyc1trZXldLCBwa2csIHNkYXRhW2tleV0pKQorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiUmVjaXBlICVzIGlzIHRyeWluZyB0byBjaGFuZ2UgJXMgZnJvbSAnJXMnIHRvICclcycuIFRoaXMgd2lsbCBjYXVzZSBkb19wYWNrYWdlX3dyaXRlXyogZmFpbHVyZXMgc2luY2UgdGhlIGluY29ycmVjdCBkYXRhIHdpbGwgYmUgdXNlZCBhbmQgdGhleSB3aWxsIGJlIHVuYWJsZSB0byBmaW5kIHRoZSByaWdodCB3b3JrZGlyLiIgJSAodmFyc1siUE4iXSwga2V5LCB2YXJzW2tleV0sIHNkYXRhW2tleV0pKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIElmIHdlIHNldCB1bnN1ZmZpeGVkIHZhcmlhYmxlcyBoZXJlIHRoZXJlIGlzIGEgY2hhbmNlIHRoZXkgY291bGQgY2xvYmJlciBvdmVycmlkZSB2ZXJzaW9ucworICAgICAgICAgICAgIyBvZiB0aGF0IHZhcmlhYmxlLCBlLmcuIERFU0NSSVBUSU9OIGNvdWxkIGNsb2JiZXIgREVTQ1JJUFRJT05fPHBrZ25hbWU+CisgICAgICAgICAgICAjIFdlIHRoZXJlZm9yZSBkb24ndCBjbG9iYmVyIGZvciB0aGUgdW5zdWZmaXhlZCB2YXJpYWJsZSB2ZXJzaW9ucworICAgICAgICAgICAgIworICAgICAgICAgICAgaWYga2V5LmVuZHN3aXRoKCJfIiArIHBrZyk6CisgICAgICAgICAgICAgICAgZC5zZXRWYXIoa2V5LCBzZGF0YVtrZXldKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkLnNldFZhcihrZXksIHNkYXRhW2tleV0sIHBhcnNpbmc9VHJ1ZSkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2Vncm91cC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZWdyb3VwLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZjZmVhZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2Vncm91cC5iYmNsYXNzCkBAIC0wLDAgKzEsNTIgQEAKKyMgQ2xhc3MgZm9yIHBhY2thZ2Vncm91cCAocGFja2FnZSBncm91cCkgcmVjaXBlcworCisjIEJ5IGRlZmF1bHQsIG9ubHkgdGhlIHBhY2thZ2Vncm91cCBwYWNrYWdlIGl0c2VsZiBpcyBpbiBQQUNLQUdFUy4KKyMgLWRiZyBhbmQgLWRldiBmbGF2b3VycyBhcmUgaGFuZGxlZCBieSB0aGUgYW5vbmZ1bmMgYmVsb3cuCisjIFRoaXMgbWVhbnMgdGhhdCBwYWNrYWdlZ3JvdXAgcmVjaXBlcyB1c2VkIHRvIGJ1aWxkIG11bHRpcGxlIHBhY2thZ2Vncm91cAorIyBwYWNrYWdlcyBoYXZlIHRvIG1vZGlmeSBQQUNLQUdFUyBhZnRlciBpbmhlcml0aW5nIHBhY2thZ2Vncm91cC5iYmNsYXNzLgorUEFDS0FHRVMgPSAiJHtQTn0iCisKKyMgQnkgZGVmYXVsdCwgcGFja2FnZWdyb3VwIHBhY2thZ2VzIGRvIG5vdCBkZXBlbmQgb24gYSBjZXJ0YWluIGFyY2hpdGVjdHVyZS4KKyMgT25seSBpZiBkZXBlbmRlbmNpZXMgYXJlIG1vZGlmaWVkIGJ5IE1BQ0hJTkVfRkVBVFVSRVMsIHBhY2thZ2VzCisjIG5lZWQgdG8gYmUgc2V0IHRvIE1BQ0hJTkVfQVJDSCBhZnRlciBpbmhlcml0aW5nIHBhY2thZ2Vncm91cC5iYmNsYXNzCitQQUNLQUdFX0FSQ0ggPz0gImFsbCIKKworIyBGdWxseSBleHBhbmRlZCAtIHNvIGl0IGFwcGxpZXMgdGhlIG92ZXJyaWRlcyBhcyB3ZWxsCitQQUNLQUdFX0FSQ0hfRVhQQU5ERUQgOj0gIiR7UEFDS0FHRV9BUkNIfSIKKworaW5oZXJpdCAke0BvZS51dGlscy5pZmVsc2UoZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSF9FWFBBTkRFRCcsIFRydWUpID09ICdhbGwnLCAnYWxsYXJjaCcsICcnKX0KKworIyBUaGlzIGF1dG9tYXRpY2FsbHkgYWRkcyAtZGJnIGFuZCAtZGV2IGZsYXZvdXJzIG9mIGFsbCBQQUNLQUdFUworIyB0byB0aGUgbGlzdC4gVGhlaXIgZGVwZW5kZW5jaWVzIChSUkVDT01NRU5EUykgYXJlIGhhbmRsZWQgYXMgdXN1YWwKKyMgYnkgcGFja2FnZV9kZXBjaGFpbnMgaW4gYSBmb2xsb3dpbmcgc3RlcC4KKyMgQWxzbyBtYXJrIGFsbCBwYWNrYWdlcyBhcyBBTExPV19FTVBUWQorcHl0aG9uICgpIHsKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBnZW5wYWNrYWdlcyA9IFtdCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgZC5zZXRWYXIoIkFMTE9XX0VNUFRZXyVzIiAlIHBrZywgIjEiKQorICAgICAgICBmb3IgcG9zdGZpeCBpbiBbJy1kYmcnLCAnLWRldicsICctcHRlc3QnXToKKyAgICAgICAgICAgIGdlbnBhY2thZ2VzLmFwcGVuZChwa2crcG9zdGZpeCkKKyAgICBpZiBkLmdldFZhcignUEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWScsIFRydWUpICE9ICcxJzoKKyAgICAgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgJyAnLmpvaW4ocGFja2FnZXMrZ2VucGFja2FnZXMpKQorfQorCisjIFdlIGRvbid0IHdhbnQgdG8gbG9vayBhdCBzaGFyZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMgZm9yIHRoZQorIyBkYmcgcGFja2FnZXMKK0RFUENIQUlOX0RCR0RFRkFVTFRERVBTID0gIjEiCisKKyMgV2Ugb25seSBuZWVkIHRoZSBwYWNrYWdpbmcgdGFza3MgLSBkaXNhYmxlIHRoZSByZXN0Citkb19mZXRjaFtub2V4ZWNdID0gIjEiCitkb191bnBhY2tbbm9leGVjXSA9ICIxIgorZG9fcGF0Y2hbbm9leGVjXSA9ICIxIgorZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorZG9faW5zdGFsbFtub2V4ZWNdID0gIjEiCitkb19wb3B1bGF0ZV9zeXNyb290W25vZXhlY10gPSAiMSIKKworcHl0aG9uICgpIHsKKyAgICBpbml0bWFuID0gZC5nZXRWYXIoIlZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIiLCBUcnVlKQorICAgIGlmIGluaXRtYW4gYW5kIGluaXRtYW4gaW4gWydzeXN2aW5pdCcsICdzeXN0ZW1kJ10gYW5kIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgaW5pdG1hbiwgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBiYi5mYXRhbCgiUGxlYXNlIGVuc3VyZSB0aGF0IHlvdXIgc2V0dGluZyBvZiBWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyICglcykgbWF0Y2hlcyB0aGUgZW50cmllcyBlbmFibGVkIGluIERJU1RST19GRUFUVVJFUyIgJSBpbml0bWFuKQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlaW5mby5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZWluZm8uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDYwYWNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZWluZm8uYmJjbGFzcwpAQCAtMCwwICsxLDIyIEBACitweXRob24gcGFja2FnZWluZm9faGFuZGxlciAoKSB7CisgICAgaW1wb3J0IG9lLnBhY2thZ2VkYXRhCisgICAgcGtnaW5mb2xpc3QgPSBbXQorCisgICAgcGtnZGF0YV9kaXIgPSBlLmRhdGEuZ2V0VmFyKCJQS0dEQVRBX0RJUiIsIFRydWUpICsgJy9ydW50aW1lLycKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhwa2dkYXRhX2Rpcik6CisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBrZ2RhdGFfZGlyKToKKyAgICAgICAgICAgIGZvciBwa2duYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGlmIHBrZ25hbWUuZW5kc3dpdGgoJy5wYWNrYWdlZCcpOgorICAgICAgICAgICAgICAgICAgICBwa2duYW1lID0gcGtnbmFtZVs6LTldCisgICAgICAgICAgICAgICAgICAgIHBrZ2RhdGFmaWxlID0gcm9vdCArIHBrZ25hbWUKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2RhdGEgPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3BrZ2RhdGFmaWxlKHBrZ2RhdGFmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2RhdGFbJ1BLRyddID0gcGtnbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgcGtnaW5mb2xpc3QuYXBwZW5kKHNkYXRhKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJGYWlsZWQgdG8gcmVhZCBwa2dkYXRhIGZpbGUgJXM6ICVzOiAlcyIgJSAocGtnZGF0YWZpbGUsIGUuX19jbGFzc19fLCBzdHIoZSkpKQorICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuUGFja2FnZUluZm8ocGtnaW5mb2xpc3QpLCBlLmRhdGEpCit9CisKK2FkZGhhbmRsZXIgcGFja2FnZWluZm9faGFuZGxlcgorcGFja2FnZWluZm9faGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LlJlcXVlc3RQYWNrYWdlSW5mbyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhdGNoLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYXRjaC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMmFhYjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYXRjaC5iYmNsYXNzCkBAIC0wLDAgKzEsMTg4IEBACisjIENvcHlyaWdodCAoQykgMjAwNiAgT3BlbmVkSGFuZCBMVEQKKworIyBQb2ludCB0byBhbiBlbXB0eSBmaWxlIHNvIGFueSB1c2VyJ3MgY3VzdG9tIHNldHRpbmdzIGRvbid0IGJyZWFrIHRoaW5ncworUVVJTFRSQ0ZJTEUgPz0gIiR7U1RBR0lOR19FVENESVJfTkFUSVZFfS9xdWlsdHJjIgorCitQQVRDSERFUEVOREVOQ1kgPSAiJHtQQVRDSFRPT0x9LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitpbmhlcml0IHRlcm1pbmFsCisKK2RlZiBzcmNfcGF0Y2hlcyhkLCBhbGwgPSBGYWxzZSApOgorICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goW10sIGQpCisgICAgcGF0Y2hlcyA9IFtdCisgICAgc291cmNlcyA9IFtdCisgICAgZm9yIHVybCBpbiBmZXRjaC51cmxzOgorICAgICAgICBsb2NhbCA9IHBhdGNoX3BhdGgodXJsLCBmZXRjaCwgd29ya2RpcikKKyAgICAgICAgaWYgbm90IGxvY2FsOgorICAgICAgICAgICAgaWYgYWxsOgorICAgICAgICAgICAgICAgIGxvY2FsID0gZmV0Y2gubG9jYWxwYXRoKHVybCkKKyAgICAgICAgICAgICAgICBzb3VyY2VzLmFwcGVuZChsb2NhbCkKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgdXJsZGF0YSA9IGZldGNoLnVkW3VybF0KKyAgICAgICAgcGFybSA9IHVybGRhdGEucGFybQorICAgICAgICBwYXRjaG5hbWUgPSBwYXJtLmdldCgncG5hbWUnKSBvciBvcy5wYXRoLmJhc2VuYW1lKGxvY2FsKQorCisgICAgICAgIGFwcGx5LCByZWFzb24gPSBzaG91bGRfYXBwbHkocGFybSwgZCkKKyAgICAgICAgaWYgbm90IGFwcGx5OgorICAgICAgICAgICAgaWYgcmVhc29uOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIlBhdGNoICVzICVzIiAlIChwYXRjaG5hbWUsIHJlYXNvbikpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHBhdGNocGFybSA9IHsncGF0Y2huYW1lJzogcGF0Y2huYW1lfQorICAgICAgICBpZiAic3RyaXBsZXZlbCIgaW4gcGFybToKKyAgICAgICAgICAgIHN0cmlwbGV2ZWwgPSBwYXJtWyJzdHJpcGxldmVsIl0KKyAgICAgICAgZWxpZiAicG51bSIgaW4gcGFybToKKyAgICAgICAgICAgICNiYi5tc2cud2FybihOb25lLCAiRGVwcmVjYXRlZCB1c2FnZSBvZiAncG51bScgdXJsIHBhcmFtZXRlciBpbiAnJXMnLCBwbGVhc2UgdXNlICdzdHJpcGxldmVsJyIgJSB1cmwpCisgICAgICAgICAgICBzdHJpcGxldmVsID0gcGFybVsicG51bSJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdHJpcGxldmVsID0gJzEnCisgICAgICAgIHBhdGNocGFybVsnc3RyaXBsZXZlbCddID0gc3RyaXBsZXZlbAorCisgICAgICAgIHBhdGNoZGlyID0gcGFybS5nZXQoJ3BhdGNoZGlyJykKKyAgICAgICAgaWYgcGF0Y2hkaXI6CisgICAgICAgICAgICBwYXRjaHBhcm1bJ3BhdGNoZGlyJ10gPSBwYXRjaGRpcgorCisgICAgICAgIGxvY2FsdXJsID0gYmIuZmV0Y2guZW5jb2RldXJsKCgnZmlsZScsICcnLCBsb2NhbCwgJycsICcnLCBwYXRjaHBhcm0pKQorICAgICAgICBwYXRjaGVzLmFwcGVuZChsb2NhbHVybCkKKworICAgIGlmIGFsbDoKKyAgICAgICAgcmV0dXJuIHNvdXJjZXMKKworICAgIHJldHVybiBwYXRjaGVzCisKK2RlZiBwYXRjaF9wYXRoKHVybCwgZmV0Y2gsIHdvcmtkaXIpOgorICAgICIiIlJldHVybiB0aGUgbG9jYWwgcGF0aCBvZiBhIHBhdGNoLCBvciBOb25lIGlmIHRoaXMgaXNuJ3QgYSBwYXRjaCIiIgorCisgICAgbG9jYWwgPSBmZXRjaC5sb2NhbHBhdGgodXJsKQorICAgIGJhc2UsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShsb2NhbCkpCisgICAgaWYgZXh0IGluICgnLmd6JywgJy5iejInLCAnLlonKToKKyAgICAgICAgbG9jYWwgPSBvcy5wYXRoLmpvaW4od29ya2RpciwgYmFzZSkKKyAgICAgICAgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChiYXNlKVsxXQorCisgICAgdXJsZGF0YSA9IGZldGNoLnVkW3VybF0KKyAgICBpZiAiYXBwbHkiIGluIHVybGRhdGEucGFybToKKyAgICAgICAgYXBwbHkgPSBvZS50eXBlcy5ib29sZWFuKHVybGRhdGEucGFybVsiYXBwbHkiXSkKKyAgICAgICAgaWYgbm90IGFwcGx5OgorICAgICAgICAgICAgcmV0dXJuCisgICAgZWxpZiBleHQgbm90IGluICgiLmRpZmYiLCAiLnBhdGNoIik6CisgICAgICAgIHJldHVybgorCisgICAgcmV0dXJuIGxvY2FsCisKK2RlZiBzaG91bGRfYXBwbHkocGFybSwgZCk6CisgICAgIiIiRGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBhcHBseSB0aGUgZ2l2ZW4gcGF0Y2giIiIKKworICAgIGlmICJtaW5kYXRlIiBpbiBwYXJtIG9yICJtYXhkYXRlIiBpbiBwYXJtOgorICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIHNyY2RhdGUgPSBkLmdldFZhcignU1JDREFURV8lcycgJSBwbiwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHNyY2RhdGU6CisgICAgICAgICAgICBzcmNkYXRlID0gZC5nZXRWYXIoJ1NSQ0RBVEUnLCBUcnVlKQorCisgICAgICAgIGlmIHNyY2RhdGUgPT0gIm5vdyI6CisgICAgICAgICAgICBzcmNkYXRlID0gZC5nZXRWYXIoJ0RBVEUnLCBUcnVlKQorCisgICAgICAgIGlmICJtYXhkYXRlIiBpbiBwYXJtIGFuZCBwYXJtWyJtYXhkYXRlIl0gPCBzcmNkYXRlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAnaXMgb3V0ZGF0ZWQnCisKKyAgICAgICAgaWYgIm1pbmRhdGUiIGluIHBhcm0gYW5kIHBhcm1bIm1pbmRhdGUiXSA+IHNyY2RhdGU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICdpcyBwcmVkYXRlZCcKKworCisgICAgaWYgIm1pbnJldiIgaW4gcGFybToKKyAgICAgICAgc3JjcmV2ID0gZC5nZXRWYXIoJ1NSQ1JFVicsIFRydWUpCisgICAgICAgIGlmIHNyY3JldiBhbmQgc3JjcmV2IDwgcGFybVsibWlucmV2Il06CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICdhcHBsaWVzIHRvIGxhdGVyIHJldmlzaW9ucycKKworICAgIGlmICJtYXhyZXYiIGluIHBhcm06CisgICAgICAgIHNyY3JldiA9IGQuZ2V0VmFyKCdTUkNSRVYnLCBUcnVlKQorICAgICAgICBpZiBzcmNyZXYgYW5kIHNyY3JldiA+IHBhcm1bIm1heHJldiJdOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAnYXBwbGllcyB0byBlYXJsaWVyIHJldmlzaW9ucycKKworICAgIGlmICJyZXYiIGluIHBhcm06CisgICAgICAgIHNyY3JldiA9IGQuZ2V0VmFyKCdTUkNSRVYnLCBUcnVlKQorICAgICAgICBpZiBzcmNyZXYgYW5kIHBhcm1bInJldiJdIG5vdCBpbiBzcmNyZXY6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICJkb2Vzbid0IGFwcGx5IHRvIHJldmlzaW9uIgorCisgICAgaWYgIm5vdHJldiIgaW4gcGFybToKKyAgICAgICAgc3JjcmV2ID0gZC5nZXRWYXIoJ1NSQ1JFVicsIFRydWUpCisgICAgICAgIGlmIHNyY3JldiBhbmQgcGFybVsibm90cmV2Il0gaW4gc3JjcmV2OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAiZG9lc24ndCBhcHBseSB0byByZXZpc2lvbiIKKworICAgIHJldHVybiBUcnVlLCBOb25lCisKK3Nob3VsZF9hcHBseVt2YXJkZXBzZXhjbHVkZV0gPSAiREFURSBTUkNEQVRFIgorCitweXRob24gcGF0Y2hfZG9fcGF0Y2goKSB7CisgICAgaW1wb3J0IG9lLnBhdGNoCisKKyAgICBwYXRjaHNldG1hcCA9IHsKKyAgICAgICAgInBhdGNoIjogb2UucGF0Y2guUGF0Y2hUcmVlLAorICAgICAgICAicXVpbHQiOiBvZS5wYXRjaC5RdWlsdFRyZWUsCisgICAgICAgICJnaXQiOiBvZS5wYXRjaC5HaXRBcHBseVRyZWUsCisgICAgfQorCisgICAgY2xzID0gcGF0Y2hzZXRtYXBbZC5nZXRWYXIoJ1BBVENIVE9PTCcsIFRydWUpIG9yICdxdWlsdCddCisKKyAgICByZXNvbHZlcm1hcCA9IHsKKyAgICAgICAgIm5vb3AiOiBvZS5wYXRjaC5OT09QUmVzb2x2ZXIsCisgICAgICAgICJ1c2VyIjogb2UucGF0Y2guVXNlclJlc29sdmVyLAorICAgIH0KKworICAgIHJjbHMgPSByZXNvbHZlcm1hcFtkLmdldFZhcignUEFUQ0hSRVNPTFZFJywgVHJ1ZSkgb3IgJ3VzZXInXQorCisgICAgY2xhc3NlcyA9IHt9CisKKyAgICBzID0gZC5nZXRWYXIoJ1MnLCBUcnVlKQorCisgICAgcGF0aCA9IG9zLmdldGVudignUEFUSCcpCisgICAgb3MucHV0ZW52KCdQQVRIJywgZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKSkKKworICAgICMgV2UgbXVzdCB1c2Ugb25lIFRNUERJUiBwZXIgcHJvY2VzcyBzbyB0aGF0IHRoZSAicGF0Y2giIHByb2Nlc3NlcworICAgICMgZG9uJ3QgZ2VuZXJhdGUgdGhlIHNhbWUgdGVtcCBmaWxlIG5hbWUuCisKKyAgICBpbXBvcnQgdGVtcGZpbGUKKyAgICBwcm9jZXNzX3RtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgIG9zLmVudmlyb25bJ1RNUERJUiddID0gcHJvY2Vzc190bXBkaXIKKworICAgIGZvciBwYXRjaCBpbiBzcmNfcGF0Y2hlcyhkKToKKyAgICAgICAgXywgXywgbG9jYWwsIF8sIF8sIHBhcm0gPSBiYi5mZXRjaC5kZWNvZGV1cmwocGF0Y2gpCisKKyAgICAgICAgaWYgInBhdGNoZGlyIiBpbiBwYXJtOgorICAgICAgICAgICAgcGF0Y2hkaXIgPSBwYXJtWyJwYXRjaGRpciJdCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhwYXRjaGRpcik6CisgICAgICAgICAgICAgICAgcGF0Y2hkaXIgPSBvcy5wYXRoLmpvaW4ocywgcGF0Y2hkaXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXRjaGRpciA9IHMKKworICAgICAgICBpZiBub3QgcGF0Y2hkaXIgaW4gY2xhc3NlczoKKyAgICAgICAgICAgIHBhdGNoc2V0ID0gY2xzKHBhdGNoZGlyLCBkKQorICAgICAgICAgICAgcmVzb2x2ZXIgPSByY2xzKHBhdGNoc2V0LCBvZV90ZXJtaW5hbCkKKyAgICAgICAgICAgIGNsYXNzZXNbcGF0Y2hkaXJdID0gKHBhdGNoc2V0LCByZXNvbHZlcikKKyAgICAgICAgICAgIHBhdGNoc2V0LkNsZWFuKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhdGNoc2V0LCByZXNvbHZlciA9IGNsYXNzZXNbcGF0Y2hkaXJdCisKKyAgICAgICAgYmIubm90ZSgiQXBwbHlpbmcgcGF0Y2ggJyVzJyAoJXMpIiAlIChwYXJtWydwYXRjaG5hbWUnXSwgb2UucGF0aC5mb3JtYXRfZGlzcGxheShsb2NhbCwgZCkpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXRjaHNldC5JbXBvcnQoeyJmaWxlIjpsb2NhbCwgInN0cmlwcGF0aCI6IHBhcm1bJ3N0cmlwbGV2ZWwnXX0sIFRydWUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHByb2Nlc3NfdG1wZGlyLCBUcnVlKQorICAgICAgICAgICAgYmIuZmF0YWwoc3RyKGV4YykpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc29sdmVyLlJlc29sdmUoKQorICAgICAgICBleGNlcHQgYmIuQkJIYW5kbGVkRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUocHJvY2Vzc190bXBkaXIsIFRydWUpCisgICAgICAgICAgICBiYi5mYXRhbChzdHIoZSkpCisKKyAgICBiYi51dGlscy5yZW1vdmUocHJvY2Vzc190bXBkaXIsIFRydWUpCisgICAgZGVsIG9zLmVudmlyb25bJ1RNUERJUiddCit9CitwYXRjaF9kb19wYXRjaFt2YXJkZXBzZXhjbHVkZV0gPSAiUEFUQ0hSRVNPTFZFIgorCithZGR0YXNrIHBhdGNoIGFmdGVyIGRvX3VucGFjaworZG9fcGF0Y2hbZGlyc10gPSAiJHtXT1JLRElSfSIKK2RvX3BhdGNoW2RlcGVuZHNdID0gIiR7UEFUQ0hERVBFTkRFTkNZfSIKKworRVhQT1JUX0ZVTkNUSU9OUyBkb19wYXRjaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGVybG5hdGl2ZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGVybG5hdGl2ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOGRlOGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wZXJsbmF0aXZlLmJiY2xhc3MKQEAgLTAsMCArMSwzIEBACitFWFRSQU5BVElWRVBBVEggKz0gInBlcmwtbmF0aXZlIgorREVQRU5EUyArPSAicGVybC1uYXRpdmUiCitPRUNNQUtFX1BFUkxOQVRJVkVfRElSID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BpeGJ1ZmNhY2hlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9waXhidWZjYWNoZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0OTk2N2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9waXhidWZjYWNoZS5iYmNsYXNzCkBAIC0wLDAgKzEsNjcgQEAKKyMKKyMgVGhpcyBjbGFzcyB3aWxsIGdlbmVyYXRlIHRoZSBwcm9wZXIgcG9zdGluc3QvcG9zdHJtIHNjcmlwdGxldHMgZm9yIHBpeGJ1ZgorIyBwYWNrYWdlcy4KKyMKKworREVQRU5EUyArPSAicWVtdS1uYXRpdmUiCitpbmhlcml0IHFlbXUKKworUElYQlVGX1BBQ0tBR0VTID8/PSAiJHtQTn0iCisKK3BpeGJ1ZmNhY2hlX2NvbW1vbigpIHsKK2lmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKwkkSU5URVJDRVBUX0RJUi9wb3N0aW5zdF9pbnRlcmNlcHQgdXBkYXRlX3BpeGJ1Zl9jYWNoZSAke1BLR30gbWxwcmVmaXg9JHtNTFBSRUZJWH0gbGliZGlyPSR7bGliZGlyfSBcCisJCWJpbmRpcj0ke2JpbmRpcn0gYmFzZV9saWJkaXI9JHtiYXNlX2xpYmRpcn0KK2Vsc2UKKworCSMgVXBkYXRlIHRoZSBwaXhidWYgbG9hZGVycyBpbiBjYXNlIHRoZXkgaGF2ZW4ndCBiZWVuIHJlZ2lzdGVyZWQgeWV0CisJR0RLX1BJWEJVRl9NT0RVTEVESVI9JHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLzIuMTAuMC9sb2FkZXJzIGdkay1waXhidWYtcXVlcnktbG9hZGVycyAtLXVwZGF0ZS1jYWNoZQorCisJaWYgWyAteCAke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIF0gJiYgWyAtZCAke2RhdGFkaXJ9L2ljb25zIF07IHRoZW4KKwkJZm9yIGljb25kaXIgaW4gL3Vzci9zaGFyZS9pY29ucy8qOyBkbworCQkJaWYgWyAtZCAke2ljb25kaXJ9IF07IHRoZW4KKwkJCQlndGstdXBkYXRlLWljb24tY2FjaGUgLXQgLXEgJHtpY29uZGlyfQorCQkJZmkKKwkJZG9uZQorCWZpCitmaQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfYXBwZW5kKCkgeworICAgIHBpeGJ1Zl9wa2dzID0gZC5nZXRWYXIoJ1BJWEJVRl9QQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKworICAgIGZvciBwa2cgaW4gcGl4YnVmX3BrZ3M6CisgICAgICAgIGJiLm5vdGUoImFkZGluZyBwaXhidWYgcG9zdGluc3QgYW5kIHBvc3RybSBzY3JpcHRzIHRvICVzIiAlIHBrZykKKyAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdCcsIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcigncGl4YnVmY2FjaGVfY29tbW9uJywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorCisgICAgICAgIHBvc3RybSA9IGQuZ2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ3BrZ19wb3N0cm0nLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdHJtOgorICAgICAgICAgICAgcG9zdHJtID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0cm0gKz0gZC5nZXRWYXIoJ3BpeGJ1ZmNhY2hlX2NvbW1vbicsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorfQorCitnZGtwaXhidWZfY29tcGxldGUoKSB7CisJR0RLX1BJWEJVRl9GQVRBTF9MT0FERVI9MSAke1NUQUdJTkdfQklORElSX05BVElWRX0vZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIC0tdXBkYXRlLWNhY2hlIHx8IGV4aXQgMQorfQorCisjCisjIEFkZCBhbiBzc3RhdGUgcG9zdGluc3QgaG9vayB0byB1cGRhdGUgdGhlIGNhY2hlIGZvciBuYXRpdmUgcGFja2FnZXMuCisjIEFuIGVycm9yIGV4aXQgZHVyaW5nIHBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgYWxsb3dzIGJpdGJha2UgdG8KKyMgdHJ5IHRvIHJlY292ZXIgYnkgcmUtYnVpbGRpbmcgdGhlIHBhY2thZ2UuCisjCitTU1RBVEVQT1NUSU5TVEZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIHBpeGJ1ZmNhY2hlX3NzdGF0ZV9wb3N0aW5zdCIKKworIyBTZWUgYmFzZS5iYmNsYXNzIGZvciB0aGUgb3RoZXIgaGFsZiBvZiB0aGlzCitwaXhidWZjYWNoZV9zc3RhdGVfcG9zdGluc3QoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIF07IHRoZW4KKwkJJHtnZGtwaXhidWZfY29tcGxldGV9CisJZWxpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXTsgdGhlbgorCQllY2hvICIke2dka3BpeGJ1Zl9jb21wbGV0ZX0iID4+ICR7U1RBR0lOR19ESVJ9L3NzdGF0ZWNvbXBsZXRpb25zCisJZmkKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGtnY29uZmlnLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wa2djb25maWcuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDFmODRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGtnY29uZmlnLmJiY2xhc3MKQEAgLTAsMCArMSwyIEBACitERVBFTkRTX3ByZXBlbmQgPSAicGtnY29uZmlnLW5hdGl2ZSAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nkay5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY0YTkxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nkay5iYmNsYXNzCkBAIC0wLDAgKzEsNyBAQAorIyBUaGUgbWFqb3JpdHkgb2YgcG9wdWxhdGVfc2RrIGlzIGxvY2F0ZWQgaW4gcG9wdWxhdGVfc2RrX2Jhc2UKKyMgVGhpcyBjaHVuayBzaW1wbHkgZmFjaWxpdGF0ZXMgY29tcGF0aWJpbGl0eSB3aXRoIFNESyBvbmx5IHJlY2lwZXMuCisKK2luaGVyaXQgcG9wdWxhdGVfc2RrX2Jhc2UKKworYWRkdGFzayBwb3B1bGF0ZV9zZGsgYWZ0ZXIgZG9faW5zdGFsbCBiZWZvcmUgZG9fYnVpbGQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2Jhc2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nka19iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE3YTlhNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nka19iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSwyMDMgQEAKK2luaGVyaXQgbWV0YQorCisjIFdpbGRjYXJkcyBzcGVjaWZ5aW5nIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgdG8gaW5zdGFsbCBmb3IgZXZlcnkgcGFja2FnZSB0aGF0IGhhcyBiZWVuIGV4cGxpY2l0bHkKKyMgaW5zdGFsbGVkIGludG8gdGhlIHJvb3RmcworQ09NUExFTUVOVEFSWV9HTE9CW2Rldi1wa2dzXSA9ICcqLWRldicKK0NPTVBMRU1FTlRBUllfR0xPQltzdGF0aWNkZXYtcGtnc10gPSAnKi1zdGF0aWNkZXYnCitDT01QTEVNRU5UQVJZX0dMT0JbZG9jLXBrZ3NdID0gJyotZG9jJworQ09NUExFTUVOVEFSWV9HTE9CW2RiZy1wa2dzXSA9ICcqLWRiZycKK0NPTVBMRU1FTlRBUllfR0xPQltwdGVzdC1wa2dzXSA9ICcqLXB0ZXN0JworCitkZWYgY29tcGxlbWVudGFyeV9nbG9icyhmZWF0dXJldmFyLCBkKToKKyAgICBhbGxfZ2xvYnMgPSBkLmdldFZhckZsYWdzKCdDT01QTEVNRU5UQVJZX0dMT0InKQorICAgIGdsb2JzID0gW10KKyAgICBmZWF0dXJlcyA9IHNldCgoZC5nZXRWYXIoZmVhdHVyZXZhciwgVHJ1ZSkgb3IgJycpLnNwbGl0KCkpCisgICAgZm9yIG5hbWUsIGdsb2IgaW4gYWxsX2dsb2JzLml0ZW1zKCk6CisgICAgICAgIGlmIG5hbWUgaW4gZmVhdHVyZXM6CisgICAgICAgICAgICBnbG9icy5hcHBlbmQoZ2xvYikKKyAgICByZXR1cm4gJyAnLmpvaW4oZ2xvYnMpCisKK1NES0lNQUdFX0ZFQVRVUkVTID8/PSAiZGV2LXBrZ3MgZGJnLXBrZ3MiCitTREtJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlkgPSAnJHtAY29tcGxlbWVudGFyeV9nbG9icygiU0RLSU1BR0VfRkVBVFVSRVMiLCBkKX0nCisKK2luaGVyaXQgcm9vdGZzXyR7SU1BR0VfUEtHVFlQRX0KKworU0RLX0RJUiA9ICIke1dPUktESVJ9L3NkayIKK1NES19PVVRQVVQgPSAiJHtTREtfRElSfS9pbWFnZSIKK1NES19ERVBMT1kgPSAiJHtERVBMT1lfRElSfS9zZGsiCisKK0JfdGFzay1wb3B1bGF0ZS1zZGsgPSAiJHtTREtfRElSfSIKKworU0RLVEFSR0VUU1lTUk9PVCA9ICIke1NES1BBVEh9L3N5c3Jvb3RzLyR7UkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZU30iCisKK1RPT0xDSEFJTl9IT1NUX1RBU0sgPz0gIm5hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QgcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLSR7TUFDSElORX0iCitUT09MQ0hBSU5fSE9TVF9UQVNLX0FUVEVNUFRPTkxZID89ICIiCitUT09MQ0hBSU5fVEFSR0VUX1RBU0sgPz0gIiBcCisgICAgJHtAbXVsdGlsaWJfcGtnX2V4dGVuZChkLCAncGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0Jyl9IFwKKyAgICAke0BtdWx0aWxpYl9wa2dfZXh0ZW5kKGQsICdwYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQtZGJnJyl9IFwKKyAgICAiCitUT09MQ0hBSU5fVEFSR0VUX1RBU0tfQVRURU1QVE9OTFkgPz0gIiIKK1RPT0xDSEFJTl9PVVRQVVROQU1FID89ICIke1NES19OQU1FfS10b29sY2hhaW4tJHtTREtfVkVSU0lPTn0iCisKK1NES19SREVQRU5EUyA9ICIke1RPT0xDSEFJTl9UQVJHRVRfVEFTS30gJHtUT09MQ0hBSU5fSE9TVF9UQVNLfSIKK1NES19ERVBFTkRTID0gInZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlIHBiemlwMi1uYXRpdmUiCisKKyMgV2Ugd2FudCB0aGUgTVVMVElBUkNIX1RBUkdFVF9TWVMgdG8gcG9pbnQgdG8gdGhlIFRVTkVfUEtHQVJDSCwgbm90IFBBQ0tBR0VfQVJDSCBhcyBpdAorIyBjb3VsZCBiZSBzZXQgdG8gdGhlIE1BQ0hJTkVfQVJDSAorUkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZUyA9ICIke1RVTkVfUEtHQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKKworUElEID0gIiR7QG9zLmdldHBpZCgpfSIKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK1NES19QQUNLQUdJTkdfRlVOQyA/PSAiY3JlYXRlX3NoYXIiCitTREtfUFJFX0lOU1RBTExfQ09NTUFORCA/PSAiIgorU0RLX1BPU1RfSU5TVEFMTF9DT01NQU5EID89ICIiCitTREtfUkVMT0NBVEVfQUZURVJfSU5TVEFMTCA/PSAiMSIKKworU0RLRVhUUEFUSCA/PSAifi8ke0BkLmdldFZhcignRElTVFJPJywgVHJ1ZSl9X3NkayIKK1NES19USVRMRSA/PSAiJHtAZC5nZXRWYXIoJ0RJU1RST19OQU1FJywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ0RJU1RSTycsIFRydWUpfSBTREsiCisKK1NES19UQVJHRVRfTUFOSUZFU1QgPSAiJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS50YXJnZXQubWFuaWZlc3QiCitTREtfSE9TVF9NQU5JRkVTVCA9ICIke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9Lmhvc3QubWFuaWZlc3QiCitweXRob24gd3JpdGVfdGFyZ2V0X3Nka19tYW5pZmVzdCAoKSB7CisgICAgZnJvbSBvZS5zZGsgaW1wb3J0IHNka19saXN0X2luc3RhbGxlZF9wYWNrYWdlcworICAgIHNka21hbmlmZXN0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFyKCJTREtfVEFSR0VUX01BTklGRVNUIiwgVHJ1ZSkpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNka21hbmlmZXN0ZGlyKToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNka21hbmlmZXN0ZGlyKQorICAgIHdpdGggb3BlbihkLmdldFZhcignU0RLX1RBUkdFVF9NQU5JRkVTVCcsIFRydWUpLCAndycpIGFzIG91dHB1dDoKKyAgICAgICAgb3V0cHV0LndyaXRlKHNka19saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkLCBUcnVlLCAndmVyJykpCit9CisKK3B5dGhvbiB3cml0ZV9ob3N0X3Nka19tYW5pZmVzdCAoKSB7CisgICAgZnJvbSBvZS5zZGsgaW1wb3J0IHNka19saXN0X2luc3RhbGxlZF9wYWNrYWdlcworICAgIHNka21hbmlmZXN0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFyKCJTREtfSE9TVF9NQU5JRkVTVCIsIFRydWUpKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZGttYW5pZmVzdGRpcik6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZGttYW5pZmVzdGRpcikKKyAgICB3aXRoIG9wZW4oZC5nZXRWYXIoJ1NES19IT1NUX01BTklGRVNUJywgVHJ1ZSksICd3JykgYXMgb3V0cHV0OgorICAgICAgICBvdXRwdXQud3JpdGUoc2RrX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQsIEZhbHNlLCAndmVyJykpCit9CisKK1BPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EX2FwcGVuZCA9ICIgd3JpdGVfdGFyZ2V0X3Nka19tYW5pZmVzdCA7ICIKK1BPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORF9hcHBlbmQgPSAiIHdyaXRlX2hvc3Rfc2RrX21hbmlmZXN0OyAiCisKKyMgU29tZSBhcmNocyBvdmVycmlkZSB0aGlzLCB3ZSBuZWVkIHRoZSBuYXRpdmVzZGsgdmVyc2lvbgorIyB0dXJucyBvdXQgdGhpcyBpcyBoYXJkIHRvIGdldCBmcm9tIHRoZSBkYXRhc3RvcmUgZHVlIHRvIFRSQU5TTEFURURfVEFSR0VUX0FSQ0gKKyMgbWFuaXB1bGF0aW9uLgorU0RLX09MREVTVF9LRVJORUwgPSAiMi42LjMyIgorCitmYWtlcm9vdCBweXRob24gZG9fcG9wdWxhdGVfc2RrKCkgeworICAgIGZyb20gb2Uuc2RrIGltcG9ydCBwb3B1bGF0ZV9zZGsKKyAgICBmcm9tIG9lLm1hbmlmZXN0IGltcG9ydCBjcmVhdGVfbWFuaWZlc3QsIE1hbmlmZXN0CisKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiVE9PTENIQUlOX1RBUkdFVF9UQVNLIiwgcG4sIGQpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiVE9PTENIQUlOX1RBUkdFVF9UQVNLX0FUVEVNUFRPTkxZIiwgcG4sIGQpCisKKyAgICBsZCA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGxkLnNldFZhcigiUEtHREFUQV9ESVIiLCAiJHtTVEFHSU5HX0RJUn0vJHtTREtfQVJDSH0tJHtTREtQS0dTVUZGSVh9JHtTREtfVkVORE9SfS0ke1NES19PU30vcGtnZGF0YSIpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiVE9PTENIQUlOX0hPU1RfVEFTSyIsIHBuLCBsZCkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJUT09MQ0hBSU5fSE9TVF9UQVNLX0FUVEVNUFRPTkxZIiwgcG4sIGxkKQorICAgIGQuc2V0VmFyKCJUT09MQ0hBSU5fSE9TVF9UQVNLIiwgbGQuZ2V0VmFyKCJUT09MQ0hBSU5fSE9TVF9UQVNLIiwgVHJ1ZSkpCisgICAgZC5zZXRWYXIoIlRPT0xDSEFJTl9IT1NUX1RBU0tfQVRURU1QVE9OTFkiLCBsZC5nZXRWYXIoIlRPT0xDSEFJTl9IT1NUX1RBU0tfQVRURU1QVE9OTFkiLCBUcnVlKSkKKyAgICAKKyAgICAjIGNyZWF0ZSB0YXJnZXQvaG9zdCBTREsgbWFuaWZlc3RzCisgICAgY3JlYXRlX21hbmlmZXN0KGQsIG1hbmlmZXN0X2Rpcj1kLmdldFZhcignU0RLX0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdF90eXBlPU1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX0hPU1QpCisgICAgY3JlYXRlX21hbmlmZXN0KGQsIG1hbmlmZXN0X2Rpcj1kLmdldFZhcignU0RLX0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdF90eXBlPU1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX1RBUkdFVCkKKworICAgIHBvcHVsYXRlX3NkayhkKQorCisgICAgIyBQcm9jZXNzIERFRkFVTFRUVU5FCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJjcmVhdGVfc2RrX2ZpbGVzIiwgZCkKKworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygidGFyX3NkayIsIGQpCisKKyAgICBzZGtfcGFja2FnaW5nX2Z1bmMgPSBkLmdldFZhcigiU0RLX1BBQ0tBR0lOR19GVU5DIiwgVHJ1ZSkgb3IgIiIKKyAgICBpZiBzZGtfcGFja2FnaW5nX2Z1bmMuc3RyaXAoKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGQuZ2V0VmFyKCJTREtfUEFDS0FHSU5HX0ZVTkMiLCBUcnVlKSwgZCkKK30KKworZmFrZXJvb3QgY3JlYXRlX3Nka19maWxlcygpIHsKKwljcCAke0NPUkVCQVNFfS9zY3JpcHRzL3JlbG9jYXRlX3Nkay5weSAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vCisKKwkjIFJlcGxhY2UgdGhlICMjREVGQVVMVF9JTlNUQUxMX0RJUiMjIHdpdGggdGhlIGNvcnJlY3QgcGF0dGVybi4KKwkjIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSAnKycgYW5kICcuJyBpbiB0aGUgU0RLUEFUSAorCWVzY2FwZWRfc2RrcGF0aD0kKGVjaG8gJHtTREtQQVRIfSB8c2VkIC1lICJzOltcK1wuXTpcXFxcXFxcXFwwOmciKQorCXNlZCAtaSAtZSAiczojI0RFRkFVTFRfSU5TVEFMTF9ESVIjIzokZXNjYXBlZF9zZGtwYXRoOiIgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3JlbG9jYXRlX3Nkay5weQorfQorCitTREtUQVJPUFRTID0gIi0tb3duZXI9cm9vdCAtLWdyb3VwPXJvb3QiCisKK2Zha2Vyb290IHRhcl9zZGsoKSB7CisJIyBQYWNrYWdlIGl0IHVwCisJbWtkaXIgLXAgJHtTREtfREVQTE9ZfQorCWNkICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfQorCXRhciAke1NES1RBUk9QVFN9IC1jZiAtIC4gfCBwYnppcDIgPiAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnRhci5iejIKK30KKworZmFrZXJvb3QgY3JlYXRlX3NoYXIoKSB7CisJIyBjb3B5IGluIHRoZSB0ZW1wbGF0ZSBzaGFyIGV4dHJhY3RvciBzY3JpcHQKKwljcCAke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLWV4dHJhY3Quc2ggJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaAorCisJcm0gLWYgJHtUfS9wcmVfaW5zdGFsbF9jb21tYW5kICR7VH0vcG9zdF9pbnN0YWxsX2NvbW1hbmQKKworCWlmIFsgJHtTREtfUkVMT0NBVEVfQUZURVJfSU5TVEFMTH0gLWVxIDEgXSA7IHRoZW4KKwkJY3AgJHtDT1JFQkFTRX0vbWV0YS9maWxlcy90b29sY2hhaW4tc2hhci1yZWxvY2F0ZS5zaCAke1R9L3Bvc3RfaW5zdGFsbF9jb21tYW5kCisJZmkKKwljYXQgPDwgIkVPRiIgPj4gJHtUfS9wcmVfaW5zdGFsbF9jb21tYW5kCiske1NES19QUkVfSU5TVEFMTF9DT01NQU5EfQorRU9GCisKKwljYXQgPDwgIkVPRiIgPj4gJHtUfS9wb3N0X2luc3RhbGxfY29tbWFuZAorJHtTREtfUE9TVF9JTlNUQUxMX0NPTU1BTkR9CitFT0YKKwlzZWQgLWkgLWUgJy9AU0RLX1BSRV9JTlNUQUxMX0NPTU1BTkRAL3IgJHtUfS9wcmVfaW5zdGFsbF9jb21tYW5kJyBcCisJCS1lICcvQFNES19QT1NUX0lOU1RBTExfQ09NTUFOREAvciAke1R9L3Bvc3RfaW5zdGFsbF9jb21tYW5kJyBcCisJCSR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKworCSMgc3Vic3RpdHV0ZSB2YXJpYWJsZXMKKwlzZWQgLWkgLWUgJ3MjQFNES19BUkNIQCMke1NES19BUkNIfSNnJyBcCisJCS1lICdzI0BTREtQQVRIQCMke1NES1BBVEh9I2cnIFwKKwkJLWUgJ3MjQFNES0VYVFBBVEhAIyR7U0RLRVhUUEFUSH0jZycgXAorCQktZSAncyNAT0xERVNUX0tFUk5FTEAjJHtTREtfT0xERVNUX0tFUk5FTH0jZycgXAorCQktZSAncyNAUkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZU0AjJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfSNnJyBcCisJCS1lICdzI0BTREtfVElUTEVAIyR7U0RLX1RJVExFfSNnJyBcCisJCS1lICdzI0BTREtfVkVSU0lPTkAjJHtTREtfVkVSU0lPTn0jZycgXAorCQktZSAnL0BTREtfUFJFX0lOU1RBTExfQ09NTUFOREAvZCcgXAorCQktZSAnL0BTREtfUE9TVF9JTlNUQUxMX0NPTU1BTkRAL2QnIFwKKwkJJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaAorCisJIyBhZGQgZXhlY3V0aW9uIHBlcm1pc3Npb24KKwljaG1vZCAreCAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCisKKwkjIGFwcGVuZCB0aGUgU0RLIHRhcmJhbGwKKwljYXQgJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS50YXIuYnoyID4+ICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKworCSMgZGVsZXRlIHRoZSBvbGQgdGFyYmFsbCwgd2UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlCisJcm0gJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS50YXIuYnoyCit9CisKK3BvcHVsYXRlX3Nka19sb2dfY2hlY2soKSB7CisJZm9yIHRhcmdldCBpbiAkKgorCWRvCisJCWxmX3BhdGg9ImBkaXJuYW1lICR7QkJfTE9HRklMRX1gL2xvZy5kb18kdGFyZ2V0LiR7UElEfSIKKworCQllY2hvICJsb2dfY2hlY2s6IFVzaW5nICRsZl9wYXRoIGFzIGxvZ2ZpbGUiCisKKwkJaWYgdGVzdCAtZSAiJGxmX3BhdGgiCisJCXRoZW4KKwkJCSR7SU1BR0VfUEtHVFlQRX1fbG9nX2NoZWNrICR0YXJnZXQgJGxmX3BhdGgKKwkJZWxzZQorCQkJZWNobyAiQ2Fubm90IGZpbmQgbG9nZmlsZSBbJGxmX3BhdGhdIgorCQlmaQorCQllY2hvICJMb2dmaWxlIGlzIGNsZWFuIgorCWRvbmUKK30KKworZG9fcG9wdWxhdGVfc2RrW2RpcnNdID0gIiR7VE9QRElSfSIKK2RvX3BvcHVsYXRlX3Nka1tkZXBlbmRzXSArPSAiJHtAJyAnLmpvaW4oW3ggKyAnOmRvX3BvcHVsYXRlX3N5c3Jvb3QnIGZvciB4IGluIGQuZ2V0VmFyKCdTREtfREVQRU5EUycsIFRydWUpLnNwbGl0KCldKX0gICR7QGQuZ2V0VmFyRmxhZygnZG9fcm9vdGZzJywgJ2RlcGVuZHMnLCBGYWxzZSl9IgorZG9fcG9wdWxhdGVfc2RrW3JkZXBlbmRzXSA9ICIke0AnICcuam9pbihbeCArICc6ZG9fcG9wdWxhdGVfc3lzcm9vdCcgZm9yIHggaW4gZC5nZXRWYXIoJ1NES19SREVQRU5EUycsIFRydWUpLnNwbGl0KCldKX0iCitkb19wb3B1bGF0ZV9zZGtbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlZGF0YSBkb19wYWNrYWdlX3dyaXRlX3JwbSBkb19wYWNrYWdlX3dyaXRlX2lwayBkb19wYWNrYWdlX3dyaXRlX2RlYiIKK2FkZHRhc2sgcG9wdWxhdGVfc2RrCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wb3B1bGF0ZV9zZGtfZXh0LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wb3B1bGF0ZV9zZGtfZXh0LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVmODgzOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nka19leHQuYmJjbGFzcwpAQCAtMCwwICsxLDI3NSBAQAorIyBFeHRlbnNpYmxlIFNESworCitpbmhlcml0IHBvcHVsYXRlX3Nka19iYXNlCisKKyMgTk9URTogbm9ybWFsbHkgeW91IGNhbm5vdCB1c2UgdGFzayBvdmVycmlkZXMgZm9yIHRoaXMga2luZCBvZiB0aGluZyAtIHRoaXMKKyMgb25seSB3b3JrcyBiZWNhdXNlIG9mIGdldF9zZGtfZXh0X3JkZXBlbmRzKCkKKworVE9PTENIQUlOX0hPU1RfVEFTS190YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiIFwKKyAgICBtZXRhLWVudmlyb25tZW50LWV4dHNkay0ke01BQ0hJTkV9IFwKKyAgICAiCisKK1RPT0xDSEFJTl9UQVJHRVRfVEFTS190YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiIgorCitTREtfUkRFUEVORFNfYXBwZW5kX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIgJHtTREtfVEFSR0VUU30iCisKK1NES19SRUxPQ0FURV9BRlRFUl9JTlNUQUxMX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIwIgorCitTREtfTE9DQUxfQ09ORl9XSElURUxJU1QgPz0gIiIKK1NES19MT0NBTF9DT05GX0JMQUNLTElTVCA/PSAiQ09ORl9WRVJTSU9OIEJCX05VTUJFUl9USFJFQURTIFBBUkFMTEVMX01BS0UgUFJTRVJWX0hPU1QiCitTREtfSU5IRVJJVF9CTEFDS0xJU1QgPz0gImJ1aWxkaGlzdG9yeSBpY2VjYyIKK1NES19VUERBVEVfVVJMID89ICIiCisKK1NES19UQVJHRVRTID89ICIke1BOfSIKK09FX0lOSVRfRU5WX1NDUklQVCA/PSAib2UtaW5pdC1idWlsZC1lbnYiCisKKyMgVGhlIGZpbGVzIGZyb20gQ09SRUJBU0UgdGhhdCB5b3Ugd2FudCBwcmVzZXJ2ZWQgaW4gdGhlIENPUkVCQVNFIGNvcGllZAorIyBpbnRvIHRoZSBzZGsuIFRoaXMgYWxsb3dzIHNvbWVvbmUgdG8gaGF2ZSB0aGVpciBvd24gc2V0dXAgc2NyaXB0cyBpbgorIyBDT1JFQkFTRSBiZSBwcmVzZXJ2ZWQgYXMgd2VsbCBhcyB1bnRyYWNrZWQgZmlsZXMuCitDT1JFQkFTRV9GSUxFUyA/PSAiIFwKKyAgICBvZS1pbml0LWJ1aWxkLWVudiBcCisgICAgb2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzIFwKKyAgICBzY3JpcHRzIFwKKyAgICBMSUNFTlNFIFwKKyAgICAudGVtcGxhdGVjb25mIFwKKyIKKworU0RLX0RJUl90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiJHtXT1JLRElSfS9zZGstZXh0IgorQl90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiJHtTREtfRElSfSIKK1RPT0xDSEFJTl9PVVRQVVROQU1FX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIke1NES19OQU1FfS10b29sY2hhaW4tZXh0LSR7U0RLX1ZFUlNJT059IgorCitTREtfVElUTEVfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gIiR7QGQuZ2V0VmFyKCdESVNUUk9fTkFNRScsIFRydWUpIG9yIGQuZ2V0VmFyKCdESVNUUk8nLCBUcnVlKX0gRXh0ZW5zaWJsZSBTREsiCisKK3B5dGhvbiBjb3B5X2J1aWxkc3lzdGVtICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICBpbXBvcnQgb2UuY29weV9idWlsZHN5c3RlbQorCisgICAgb2VfaW5pdF9lbnZfc2NyaXB0ID0gZC5nZXRWYXIoJ09FX0lOSVRfRU5WX1NDUklQVCcsIFRydWUpCisKKyAgICBjb25mX2JicGF0aCA9ICcnCisgICAgY29uZl9pbml0cGF0aCA9ICcnCisgICAgY29yZV9tZXRhX3N1YmRpciA9ICcnCisKKyAgICAjIENvcHkgaW4gYWxsIG1ldGFkYXRhIGxheWVycyArIGJpdGJha2UgKGFzIHJlcG9zaXRvcmllcykKKyAgICBidWlsZHN5c3RlbSA9IG9lLmNvcHlfYnVpbGRzeXN0ZW0uQnVpbGRTeXN0ZW0oZCkKKyAgICBiYXNlb3V0cGF0aCA9IGQuZ2V0VmFyKCdTREtfT1VUUFVUJywgVHJ1ZSkgKyAnLycgKyBkLmdldFZhcignU0RLUEFUSCcsIFRydWUpCisgICAgbGF5ZXJzX2NvcGllZCA9IGJ1aWxkc3lzdGVtLmNvcHlfYml0YmFrZV9hbmRfbGF5ZXJzKGJhc2VvdXRwYXRoICsgJy9sYXllcnMnKQorCisgICAgc2RrYmJsYXllcnMgPSBbXQorICAgIGNvcmViYXNlID0gb3MucGF0aC5iYXNlbmFtZShkLmdldFZhcignQ09SRUJBU0UnLCBUcnVlKSkKKyAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzX2NvcGllZDoKKyAgICAgICAgaWYgY29yZWJhc2UgPT0gb3MucGF0aC5iYXNlbmFtZShsYXllcik6CisgICAgICAgICAgICBjb25mX2JicGF0aCA9IG9zLnBhdGguam9pbignbGF5ZXJzJywgbGF5ZXIsICdiaXRiYWtlJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNka2JibGF5ZXJzLmFwcGVuZChsYXllcikKKworICAgIGZvciBwYXRoIGluIG9zLmxpc3RkaXIoYmFzZW91dHBhdGggKyAnL2xheWVycycpOgorICAgICAgICByZWxwYXRoID0gb3MucGF0aC5qb2luKCdsYXllcnMnLCBwYXRoLCBvZV9pbml0X2Vudl9zY3JpcHQpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihiYXNlb3V0cGF0aCwgcmVscGF0aCkpOgorICAgICAgICAgICAgY29uZl9pbml0cGF0aCA9IHJlbHBhdGgKKworICAgICAgICByZWxwYXRoID0gb3MucGF0aC5qb2luKCdsYXllcnMnLCBwYXRoLCAnc2NyaXB0cycsICdkZXZ0b29sJykKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGJhc2VvdXRwYXRoLCByZWxwYXRoKSk6CisgICAgICAgICAgICBzY3JpcHRyZWxwYXRoID0gb3MucGF0aC5kaXJuYW1lKHJlbHBhdGgpCisKKyAgICAgICAgcmVscGF0aCA9IG9zLnBhdGguam9pbignbGF5ZXJzJywgcGF0aCwgJ21ldGEnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oYmFzZW91dHBhdGgsIHJlbHBhdGgsICdsaWInLCAnb2UnKSk6CisgICAgICAgICAgICBjb3JlX21ldGFfc3ViZGlyID0gcmVscGF0aAorCisgICAgZC5zZXRWYXIoJ29lX2luaXRfYnVpbGRfZW52X3BhdGgnLCBjb25mX2luaXRwYXRoKQorICAgIGQuc2V0VmFyKCdzY3JpcHRyZWxwYXRoJywgc2NyaXB0cmVscGF0aCkKKworICAgICMgV3JpdGUgb3V0IGNvbmZpZyBmaWxlIGZvciBkZXZ0b29sCisgICAgaW1wb3J0IENvbmZpZ1BhcnNlcgorICAgIGNvbmZpZyA9IENvbmZpZ1BhcnNlci5TYWZlQ29uZmlnUGFyc2VyKCkKKyAgICBjb25maWcuYWRkX3NlY3Rpb24oJ0dlbmVyYWwnKQorICAgIGNvbmZpZy5zZXQoJ0dlbmVyYWwnLCAnYml0YmFrZV9zdWJkaXInLCBjb25mX2JicGF0aCkKKyAgICBjb25maWcuc2V0KCdHZW5lcmFsJywgJ2luaXRfcGF0aCcsIGNvbmZfaW5pdHBhdGgpCisgICAgY29uZmlnLnNldCgnR2VuZXJhbCcsICdjb3JlX21ldGFfc3ViZGlyJywgY29yZV9tZXRhX3N1YmRpcikKKyAgICBjb25maWcuYWRkX3NlY3Rpb24oJ1NESycpCisgICAgY29uZmlnLnNldCgnU0RLJywgJ3Nka190YXJnZXRzJywgZC5nZXRWYXIoJ1NES19UQVJHRVRTJywgVHJ1ZSkpCisgICAgdXBkYXRldXJsID0gZC5nZXRWYXIoJ1NES19VUERBVEVfVVJMJywgVHJ1ZSkKKyAgICBpZiB1cGRhdGV1cmw6CisgICAgICAgIGNvbmZpZy5zZXQoJ1NESycsICd1cGRhdGVzZXJ2ZXInLCB1cGRhdGV1cmwpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbihiYXNlb3V0cGF0aCwgJ2NvbmYnKSkKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGJhc2VvdXRwYXRoLCAnY29uZicsICdkZXZ0b29sLmNvbmYnKSwgJ3cnKSBhcyBmOgorICAgICAgICBjb25maWcud3JpdGUoZikKKworICAgICMgQ3JlYXRlIGEgbGF5ZXIgZm9yIG5ldyByZWNpcGVzIC8gYXBwZW5kcworICAgIGJicGF0aCA9IGQuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKQorICAgIGJiLnByb2Nlc3MucnVuKFsnZGV2dG9vbCcsICctLWJicGF0aCcsIGJicGF0aCwgJy0tYmFzZXBhdGgnLCBiYXNlb3V0cGF0aCwgJ2NyZWF0ZS13b3Jrc3BhY2UnLCAnLS1jcmVhdGUtb25seScsIG9zLnBhdGguam9pbihiYXNlb3V0cGF0aCwgJ3dvcmtzcGFjZScpXSkKKworICAgICMgQ3JlYXRlIGJibGF5ZXJzLmNvbmYKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoYmFzZW91dHBhdGggKyAnL2NvbmYnKQorICAgIHdpdGggb3BlbihiYXNlb3V0cGF0aCArICcvY29uZi9iYmxheWVycy5jb25mJywgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCcjIFdBUk5JTkc6IHRoaXMgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBhbmQgaW5cbicpCisgICAgICAgIGYud3JpdGUoJyMgbW9zdCBjYXNlcyBzaG91bGQgbm90IGJlIGVkaXRlZC4gSWYgeW91IG5lZWQgbW9yZSBmbGV4aWJpbGl0eSB0aGFuXG4nKQorICAgICAgICBmLndyaXRlKCcjIHRoaXMgY29uZmlndXJhdGlvbiBwcm92aWRlcywgaXQgaXMgc3Ryb25nbHkgc3VnZ2VzdGVkIHRoYXQgeW91IHNldFxuJykKKyAgICAgICAgZi53cml0ZSgnIyB1cCBhIHByb3BlciBpbnN0YW5jZSBvZiB0aGUgZnVsbCBidWlsZCBzeXN0ZW0gYW5kIHVzZSB0aGF0IGluc3RlYWQuXG5cbicpCisKKyAgICAgICAgZi53cml0ZSgnTENPTkZfVkVSU0lPTiA9ICIlcyJcblxuJyAlIGQuZ2V0VmFyKCdMQ09ORl9WRVJTSU9OJywgRmFsc2UpKQorICAgICAgICBmLndyaXRlKCdCQlBBVEggPSAiJCcgKyAne1RPUERJUn0iXG4nKQorICAgICAgICBmLndyaXRlKCdTREtCQVNFTUVUQVBBVEggPSAiJCcgKyAne1RPUERJUn0iXG4nKQorICAgICAgICBmLndyaXRlKCdCQkxBWUVSUyA6PSAiIFxcXG4nKQorICAgICAgICBmb3IgbGF5ZXJyZWxwYXRoIGluIHNka2JibGF5ZXJzOgorICAgICAgICAgICAgZi53cml0ZSgnICAgICQnICsgJ3tTREtCQVNFTUVUQVBBVEh9L2xheWVycy8lcyBcXFxuJyAlIGxheWVycmVscGF0aCkKKyAgICAgICAgZi53cml0ZSgnICAgICQnICsgJ3tTREtCQVNFTUVUQVBBVEh9L3dvcmtzcGFjZSBcXFxuJykKKyAgICAgICAgZi53cml0ZSgnICAgICJcbicpCisKKyAgICAjIENyZWF0ZSBsb2NhbC5jb25mCisgICAgbG9jYWxfY29uZl93aGl0ZWxpc3QgPSAoZC5nZXRWYXIoJ1NES19MT0NBTF9DT05GX1dISVRFTElTVCcsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgbG9jYWxfY29uZl9ibGFja2xpc3QgPSAoZC5nZXRWYXIoJ1NES19MT0NBTF9DT05GX0JMQUNLTElTVCcsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgZGVmIGhhbmRsZV92YXIodmFybmFtZSwgb3JpZ3ZhbHVlLCBvcCwgbmV3bGluZXMpOgorICAgICAgICBpZiB2YXJuYW1lIGluIGxvY2FsX2NvbmZfYmxhY2tsaXN0IG9yIChvcmlndmFsdWUuc3RyaXAoKS5zdGFydHN3aXRoKCcvJykgYW5kIG5vdCB2YXJuYW1lIGluIGxvY2FsX2NvbmZfd2hpdGVsaXN0KToKKyAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnIyBSZW1vdmVkIG9yaWdpbmFsIHNldHRpbmcgb2YgJXNcbicgJSB2YXJuYW1lKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIG9wLCAwLCBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gb3JpZ3ZhbHVlLCBvcCwgMCwgVHJ1ZQorICAgIHZhcmxpc3QgPSBbJ1teIz0rIF0qJ10KKyAgICBidWlsZGRpciA9IGQuZ2V0VmFyKCdUT1BESVInLCBUcnVlKQorICAgIHdpdGggb3BlbihidWlsZGRpciArICcvY29uZi9sb2NhbC5jb25mJywgJ3InKSBhcyBmOgorICAgICAgICBvbGRsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAodXBkYXRlZCwgbmV3bGluZXMpID0gYmIudXRpbHMuZWRpdF9tZXRhZGF0YShvbGRsaW5lcywgdmFybGlzdCwgaGFuZGxlX3ZhcikKKworICAgIHdpdGggb3BlbihiYXNlb3V0cGF0aCArICcvY29uZi9sb2NhbC5jb25mJywgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCcjIFdBUk5JTkc6IHRoaXMgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBhbmQgaW5cbicpCisgICAgICAgIGYud3JpdGUoJyMgbW9zdCBjYXNlcyBzaG91bGQgbm90IGJlIGVkaXRlZC4gSWYgeW91IG5lZWQgbW9yZSBmbGV4aWJpbGl0eSB0aGFuXG4nKQorICAgICAgICBmLndyaXRlKCcjIHRoaXMgY29uZmlndXJhdGlvbiBwcm92aWRlcywgaXQgaXMgc3Ryb25nbHkgc3VnZ2VzdGVkIHRoYXQgeW91IHNldFxuJykKKyAgICAgICAgZi53cml0ZSgnIyB1cCBhIHByb3BlciBpbnN0YW5jZSBvZiB0aGUgZnVsbCBidWlsZCBzeXN0ZW0gYW5kIHVzZSB0aGF0IGluc3RlYWQuXG5cbicpCisgICAgICAgIGZvciBsaW5lIGluIG5ld2xpbmVzOgorICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgpIGFuZCBub3QgbGluZS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgZi53cml0ZShsaW5lKQorCisgICAgICAgIGYud3JpdGUoJ0lOSEVSSVQgKz0gIiVzIlxuXG4nICUgJ3VuaW5hdGl2ZScpCisgICAgICAgIGYud3JpdGUoJ0NPTkZfVkVSU0lPTiA9ICIlcyJcblxuJyAlIGQuZ2V0VmFyKCdDT05GX1ZFUlNJT04nLCBGYWxzZSkpCisKKyAgICAgICAgIyBTb21lIGNsYXNzZXMgYXJlIG5vdCBzdWl0YWJsZSBmb3IgU0RLLCByZW1vdmUgdGhlbSBmcm9tIElOSEVSSVQKKyAgICAgICAgZi53cml0ZSgnSU5IRVJJVF9yZW1vdmUgPSAiJXMiXG4nICUgZC5nZXRWYXIoJ1NES19JTkhFUklUX0JMQUNLTElTVCcpKQorCisgICAgICAgICMgQnlwYXNzIHRoZSBkZWZhdWx0IGNvbm5lY3Rpdml0eSBjaGVjayBpZiBhbnkKKyAgICAgICAgZi53cml0ZSgnQ09OTkVDVElWSVRZX0NIRUNLX1VSSVMgPSAiIlxuXG4nKQorCisgICAgICAgICMgQW5vdGhlciBoYWNrLCBidXQgd2Ugd2FudCB0aGUgbmF0aXZlIHBhcnQgb2Ygc3N0YXRlIHRvIGJlIGtlcHQgdGhlIHNhbWUKKyAgICAgICAgIyByZWdhcmRsZXNzIG9mIHRoZSBob3N0IGRpc3RybworICAgICAgICBmaXhlZGxzYnN0cmluZyA9ICdTREstRml4ZWQnCisgICAgICAgIGYud3JpdGUoJ05BVElWRUxTQlNUUklOR19mb3JjZXZhcmlhYmxlID0gIiVzIlxuXG4nICUgZml4ZWRsc2JzdHJpbmcpCisKKyAgICAgICAgIyBFbnN1cmUgbG9ja2VkIHNzdGF0ZSBjYWNoZSBvYmplY3RzIGFyZSByZS11c2VkIHdpdGhvdXQgZXJyb3IKKyAgICAgICAgZi53cml0ZSgnU0lHR0VOX0xPQ0tFRFNJR1NfQ0hFQ0tfTEVWRUwgPSAid2FybiJcblxuJykKKworICAgICAgICBmLndyaXRlKCdyZXF1aXJlIGNvbmYvbG9ja2VkLXNpZ3MuaW5jXG4nKQorICAgICAgICBmLndyaXRlKCdyZXF1aXJlIGNvbmYvd29yay1jb25maWcuaW5jXG4nKQorCisgICAgc2lnZmlsZSA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkgKyAnL2xvY2tlZC1zaWdzLmluYycKKyAgICBvZS5jb3B5X2J1aWxkc3lzdGVtLmdlbmVyYXRlX2xvY2tlZF9zaWdzKHNpZ2ZpbGUsIGQpCisKKyAgICAjIEZpbHRlciB0aGUgbG9ja2VkIHNpZ25hdHVyZXMgZmlsZSB0byBqdXN0IHRoZSBzc3RhdGUgdGFza3Mgd2UgYXJlIGludGVyZXN0ZWQgaW4KKyAgICBhbGxvd2VkX3Rhc2tzID0gWydkb19wb3B1bGF0ZV9saWMnLCAnZG9fcG9wdWxhdGVfc3lzcm9vdCcsICdkb19wYWNrYWdlZGF0YScsICdkb19wYWNrYWdlX3dyaXRlX2lwaycsICdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkb19wYWNrYWdlX3dyaXRlX2RlYicsICdkb19wYWNrYWdlX3FhJywgJ2RvX2RlcGxveSddCisgICAgZXhjbHVkZWRfdGFyZ2V0cyA9IGQuZ2V0VmFyKCdTREtfVEFSR0VUUycsIFRydWUpCisgICAgbG9ja2Vkc2lnc19wcnVuZWQgPSBiYXNlb3V0cGF0aCArICcvY29uZi9sb2NrZWQtc2lncy5pbmMnCisgICAgb2UuY29weV9idWlsZHN5c3RlbS5wcnVuZV9sb2NrZWRzaWdzKGFsbG93ZWRfdGFza3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVkX3RhcmdldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlZHNpZ3NfcHJ1bmVkKQorCisgICAgc3N0YXRlX291dCA9IGJhc2VvdXRwYXRoICsgJy9zc3RhdGUtY2FjaGUnCisgICAgYmIudXRpbHMucmVtb3ZlKHNzdGF0ZV9vdXQsIFRydWUpCisgICAgb2UuY29weV9idWlsZHN5c3RlbS5jcmVhdGVfbG9ja2VkX3NzdGF0ZV9jYWNoZShsb2NrZWRzaWdzX3BydW5lZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdTU1RBVEVfRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc3RhdGVfb3V0LCBkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRsc2JzdHJpbmcpCisKKyAgICAjIENyZWF0ZSBhIGR1bW15IGNvbmZpZyBmaWxlIGZvciBhZGRpdGlvbmFsIHNldHRpbmdzCisgICAgd2l0aCBvcGVuKGJhc2VvdXRwYXRoICsgJy9jb25mL3dvcmstY29uZmlnLmluYycsICd3JykgYXMgZjoKKyAgICAgICAgcGFzcworfQorCitkZWYgZXh0c2RrX2dldF9idWlsZHRvb2xzX2ZpbGVuYW1lKGQpOgorICAgICMgVGhpcyBpcyBzb21ld2hhdCBvZiBhIGhhY2sKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdQTicsICdidWlsZHRvb2xzLXRhcmJhbGwnKQorICAgIHJldHVybiBsb2NhbGRhdGEuZXhwYW5kKCcke1NES19OQU1FfS1idWlsZHRvb2xzLW5hdGl2ZXNkay1zdGFuZGFsb25lLSouc2gnKQorCitpbnN0YWxsX3Rvb2xzKCkgeworCWluc3RhbGwgLWQgJHtTREtfT1VUUFVUfS8ke1NES1BBVEhOQVRJVkV9JHtiaW5kaXJfbmF0aXZlc2RrfQorCWxuciAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vJHtzY3JpcHRyZWxwYXRofS9kZXZ0b29sICR7U0RLX09VVFBVVH0vJHtTREtQQVRITkFUSVZFfSR7YmluZGlyX25hdGl2ZXNka30vZGV2dG9vbAorCWxuciAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vJHtzY3JpcHRyZWxwYXRofS9yZWNpcGV0b29sICR7U0RLX09VVFBVVH0vJHtTREtQQVRITkFUSVZFfSR7YmluZGlyX25hdGl2ZXNka30vcmVjaXBldG9vbAorCXRvdWNoICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS8uZGV2dG9vbGJhc2UKKworCSMgZmluZCBsYXRlc3QgYnVpbGR0b29scy10YXJiYWxsIGFuZCBpbnN0YWxsIGl0CisJYnVpbGR0b29sc19wYXRoPWBscyAtdDEgJHtTREtfREVQTE9ZfS8ke0BleHRzZGtfZ2V0X2J1aWxkdG9vbHNfZmlsZW5hbWUoZCl9IHwgaGVhZCAtbjFgCisJaW5zdGFsbCAkYnVpbGR0b29sc19wYXRoICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfQorCisJaW5zdGFsbCAke1NES19ERVBMT1l9LyR7QlVJTERfQVJDSH0tbmF0aXZlc2RrLWxpYmMudGFyLmJ6MiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0KK30KKworIyBTaW5jZSBiaXRiYWtlIHdvbid0IHJ1biBhcyByb290IGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byB0cnkgYW5kIGluc3RhbGwKKyMgdGhlIGV4dGVuc2libGUgc2RrIGFzIHJvb3QuCitzZGtfZXh0X3ByZWluc3QoKSB7CisJaWYgWyAiYGlkIC11YCIgPSAiMCIgXTsgdGhlbgorCQllY2hvICJFUlJPUjogVGhlIGV4dGVuc2libGUgc2RrIGNhbm5vdCBiZSBpbnN0YWxsZWQgYXMgcm9vdC4iCisJCWV4aXQgMQorCWZpCisJU0RLX0VYVEVOU0lCTEU9IjEiCit9CitTREtfUFJFX0lOU1RBTExfQ09NTUFORF90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiJHtzZGtfZXh0X3ByZWluc3R9IgorCisjIEZJWE1FIHRoaXMgcHJlcGFyYXRpb24gc2hvdWxkIGJlIGRvbmUgYXMgcGFydCBvZiB0aGUgU0RLIGNvbnN0cnVjdGlvbgorc2RrX2V4dF9wb3N0aW5zdCgpIHsKKwlwcmludGYgIlxuRXh0cmFjdGluZyBidWlsZHRvb2xzLi4uXG4iCisJY2QgJHRhcmdldF9zZGtfZGlyCisJcHJpbnRmICJidWlsZHRvb2xzXG55IiB8IC4vKmJ1aWxkdG9vbHMtbmF0aXZlc2RrLXN0YW5kYWxvbmUqID4gL2Rldi9udWxsCisKKwkjIE1ha2Ugc3VyZSB3aGVuIHRoZSB1c2VyIHNldHMgdXAgdGhlIGVudmlyb25tZW50LCB0aGV5IGFsc28gZ2V0CisJIyB0aGUgYnVpbGR0b29scy10YXJiYWxsIHRvb2xzIGluIHRoZWlyIHBhdGguCisJZWNobyAiLiAkdGFyZ2V0X3Nka19kaXIvYnVpbGR0b29scy9lbnZpcm9ubWVudC1zZXR1cCoiID4+ICR0YXJnZXRfc2RrX2Rpci9lbnZpcm9ubWVudC1zZXR1cCoKKworCSMgQWxsb3cgYml0YmFrZSBlbnZpcm9ubWVudCBzZXR1cCB0byBiZSByYW4gYXMgcGFydCBvZiB0aGlzIHNkay4KKwllY2hvICJleHBvcnQgT0VfU0tJUF9TREtfQ0hFQ0s9MSIgPj4gJHRhcmdldF9zZGtfZGlyL2Vudmlyb25tZW50LXNldHVwKgorCisJIyBBIGJpdCBvZiBhbm90aGVyIGhhY2ssIGJ1dCB3ZSBuZWVkIHRoaXMgaW4gdGhlIHBhdGggb25seSBmb3IgZGV2dG9vbAorCSMgc28gcHV0IGl0IGF0IHRoZSBlbmQgb2YgJFBBVEguCisJZWNobyAiZXhwb3J0IFBBVEg9XCRQQVRIOiR0YXJnZXRfc2RrX2Rpci9zeXNyb290cy8ke1NES19TWVN9LyR7YmluZGlyX25hdGl2ZXNka30iID4+ICR0YXJnZXRfc2RrX2Rpci9lbnZpcm9ubWVudC1zZXR1cCoKKworCSMgRm9yIG5vdyB0aGlzIGlzIHdoZXJlIHVuaW5hdGl2ZS5iYmNsYXNzIGV4cGVjdHMgdGhlIHRhcmJhbGwKKwltdiAqLW5hdGl2ZXNkay1saWJjLnRhci4qICR0YXJnZXRfc2RrX2Rpci9gZGlybmFtZSAke29lX2luaXRfYnVpbGRfZW52X3BhdGh9YAorCisJaWYgWyAiJHByZXBhcmVfYnVpbGRzeXN0ZW0iICE9ICJubyIgXTsgdGhlbgorCSAgICBwcmludGYgIlByZXBhcmluZyBidWlsZCBzeXN0ZW0uLi5cbiIKKwkgICAgIyBkYXNoIHdoaWNoIGlzIC9iaW4vc2ggb24gVWJ1bnR1IHdpbGwgbm90IHByZXNlcnZlIHRoZQorCSAgICAjIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBmaXJzdCByYW4sIG5vciB3aWxsIGl0IHNldCAkMSB3aGVuCisJICAgICMgc291cmNpbmcgYSBzY3JpcHQuIFRoYXQgaXMgd2h5IHRoaXMgaGFzIHRvIGxvb2sgc28gdWdseS4KKwkgICAgc2ggLWMgIi4gYnVpbGR0b29scy9lbnZpcm9ubWVudC1zZXR1cCogPiBwcmVwYXJpbmdfYnVpbGRfc3lzdGVtLmxvZyAmJiBjZCAkdGFyZ2V0X3Nka19kaXIvYGRpcm5hbWUgJHtvZV9pbml0X2J1aWxkX2Vudl9wYXRofWAgJiYgc2V0ICR0YXJnZXRfc2RrX2RpciAmJiAuICR0YXJnZXRfc2RrX2Rpci8ke29lX2luaXRfYnVpbGRfZW52X3BhdGh9ICR0YXJnZXRfc2RrX2RpciA+PiBwcmVwYXJpbmdfYnVpbGRfc3lzdGVtLmxvZyAmJiBiaXRiYWtlICR7U0RLX1RBUkdFVFN9ID4+IHByZXBhcmluZ19idWlsZF9zeXN0ZW0ubG9nIiB8fCB7IGVjaG8gIlNESyBwcmVwYXJhdGlvbiBmYWlsZWQ6IHNlZSBgcHdkYC9wcmVwYXJpbmdfYnVpbGRfc3lzdGVtLmxvZyIgOyBleGl0IDEgOyB9CisJZmkKKwllY2hvIGRvbmUKK30KKworU0RLX1BPU1RfSU5TVEFMTF9DT01NQU5EX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIke3Nka19leHRfcG9zdGluc3R9IgorCitTREtfUE9TVFBST0NFU1NfQ09NTUFORF9wcmVwZW5kX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICJjb3B5X2J1aWxkc3lzdGVtOyBpbnN0YWxsX3Rvb2xzOyAiCisKK2Zha2Vyb290IHB5dGhvbiBkb19wb3B1bGF0ZV9zZGtfZXh0KCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiZG9fcG9wdWxhdGVfc2RrIiwgZCkKK30KKworZGVmIGdldF9zZGtfZXh0X3JkZXBlbmRzKGQpOgorICAgIGxvY2FsZGF0YSA9IGQuY3JlYXRlQ29weSgpCisgICAgbG9jYWxkYXRhLmFwcGVuZFZhcignT1ZFUlJJREVTJywgJzp0YXNrLXBvcHVsYXRlLXNkay1leHQnKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgIHJldHVybiBsb2NhbGRhdGEuZ2V0VmFyRmxhZygnZG9fcG9wdWxhdGVfc2RrJywgJ3JkZXBlbmRzJywgVHJ1ZSkKKworZG9fcG9wdWxhdGVfc2RrX2V4dFtkaXJzXSA9ICIke0BkLmdldFZhckZsYWcoJ2RvX3BvcHVsYXRlX3NkaycsICdkaXJzJywgRmFsc2UpfSIKK2RvX3BvcHVsYXRlX3Nka19leHRbZGVwZW5kc10gKz0gIiR7QGQuZ2V0VmFyRmxhZygnZG9fcG9wdWxhdGVfc2RrJywgJ2RlcGVuZHMnLCBGYWxzZSl9IgorZG9fcG9wdWxhdGVfc2RrX2V4dFtyZGVwZW5kc10gPSAiJHtAZ2V0X3Nka19leHRfcmRlcGVuZHMoZCl9IgorZG9fcG9wdWxhdGVfc2RrX2V4dFtyZWNyZGVwdGFza10gKz0gIiR7QGQuZ2V0VmFyRmxhZygnZG9fcG9wdWxhdGVfc2RrJywgJ3JlY3JkZXB0YXNrJywgRmFsc2UpfSIKKworCitkb19wb3B1bGF0ZV9zZGtfZXh0W2RlcGVuZHNdICs9ICJidWlsZHRvb2xzLXRhcmJhbGw6ZG9fcG9wdWxhdGVfc2RrIHVuaW5hdGl2ZS10YXJiYWxsOmRvX3BvcHVsYXRlX3NkayIKKworZG9fcG9wdWxhdGVfc2RrX2V4dFtyZGVwZW5kc10gKz0gIiR7QCcgJy5qb2luKFt4ICsgJzpkb19idWlsZCcgZm9yIHggaW4gZC5nZXRWYXIoJ1NES19UQVJHRVRTJywgVHJ1ZSkuc3BsaXQoKV0pfSIKK2RvX3BvcHVsYXRlX3Nka19leHRbcmVjcmRlcHRhc2tdICs9ICJkb19wb3B1bGF0ZV9saWMgZG9fcGFja2FnZV9xYSBkb19wb3B1bGF0ZV9zeXNyb290IGRvX2RlcGxveSIKKworIyBNYWtlIHN1cmUgY29kZXMgY2hhbmdlIGluIGNvcHlfYnVpbGRzeXN0ZW0gY2FuIHJlc3VsdCBpbiByZWJ1aWx0Citkb19wb3B1bGF0ZV9zZGtfZXh0W3ZhcmRlcHNdICs9ICJjb3B5X2J1aWxkc3lzdGVtIgorCithZGR0YXNrIHBvcHVsYXRlX3Nka19leHQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3ByZXhwb3J0LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wcmV4cG9ydC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMWNiMzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wcmV4cG9ydC5iYmNsYXNzCkBAIC0wLDAgKzEsNTggQEAKK1BSU0VSVl9EVU1QT1BUX1ZFUlNJT04gPSAiJHtQUkFVVE9JTlh9IgorUFJTRVJWX0RVTVBPUFRfUEtHQVJDSCAgPSAiIgorUFJTRVJWX0RVTVBPUFRfQ0hFQ0tTVU0gPSAiIgorUFJTRVJWX0RVTVBPUFRfQ09MID0gIjAiCisKK1BSU0VSVl9EVU1QRElSID8/PSAiJHtMT0dfRElSfS9kYiIKK1BSU0VSVl9EVU1QRklMRSA/Pz0gIiR7UFJTRVJWX0RVTVBESVJ9L3Byc2Vydi5pbmMiCisKK3B5dGhvbiBwcmV4cG9ydF9oYW5kbGVyICgpIHsKKyAgICBpbXBvcnQgYmIuZXZlbnQKKyAgICBpZiBub3QgZS5kYXRhOgorICAgICAgICByZXR1cm4KKworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuUmVjaXBlUGFyc2VkKToKKyAgICAgICAgaW1wb3J0IG9lLnByc2VydmljZQorICAgICAgICAjZ2V0IGFsbCBQUiB2YWx1ZXMgZm9yIHRoZSBjdXJyZW50IFBSQVVUT0lOWAorICAgICAgICB2ZXIgPSBlLmRhdGEuZ2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9WRVJTSU9OJywgVHJ1ZSkKKyAgICAgICAgdmVyID0gdmVyLnJlcGxhY2UoJyUnLCctJykKKyAgICAgICAgcmV0dmFsID0gb2UucHJzZXJ2aWNlLnByc2Vydl9kdW1wX2RiKGUuZGF0YSkKKyAgICAgICAgaWYgbm90IHJldHZhbDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJwcmV4cG9ydF9oYW5kbGVyOiBleHBvcnQgZmFpbGVkISIpCisgICAgICAgIChtZXRhaW5mbywgZGF0YWluZm8pID0gcmV0dmFsCisgICAgICAgIGlmIG5vdCBkYXRhaW5mbzoKKyAgICAgICAgICAgIGJiLndhcm4oInByZXhwb3J0X2hhbmRsZXI6IE5vIEFVVE9QUiB2YWx1ZXMgZm91bmQgZm9yICVzIiAlIHZlcikKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBvZS5wcnNlcnZpY2UucHJzZXJ2X2V4cG9ydF90b2ZpbGUoZS5kYXRhLCBOb25lLCBkYXRhaW5mbywgRmFsc2UpCisgICAgICAgIGlmICdBVVRPSU5DJyBpbiB2ZXI6CisgICAgICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgICAgIHNyY3B2ID0gIGJiLmZldGNoMi5nZXRfc3JjcmV2KGUuZGF0YSkKKyAgICAgICAgICAgIGJhc2VfdmVyID0gIkFVVE9JTkMtJXMiICUgdmVyWzp2ZXIuZmluZChzcmNwdildCisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9WRVJTSU9OJywgYmFzZV92ZXIpCisgICAgICAgICAgICByZXR2YWwgPSBvZS5wcnNlcnZpY2UucHJzZXJ2X2R1bXBfZGIoZS5kYXRhKQorICAgICAgICAgICAgaWYgbm90IHJldHZhbDoKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgicHJleHBvcnRfaGFuZGxlcjogZXhwb3J0IGZhaWxlZCEiKQorICAgICAgICAgICAgKG1ldGFpbmZvLCBkYXRhaW5mbykgPSByZXR2YWwKKyAgICAgICAgICAgIG9lLnByc2VydmljZS5wcnNlcnZfZXhwb3J0X3RvZmlsZShlLmRhdGEsIE5vbmUsIGRhdGFpbmZvLCBGYWxzZSkKKyAgICBlbGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuUGFyc2VTdGFydGVkKToKKyAgICAgICAgaW1wb3J0IGJiLnV0aWxzCisgICAgICAgIGltcG9ydCBvZS5wcnNlcnZpY2UKKyAgICAgICAgb2UucHJzZXJ2aWNlLnByc2Vydl9jaGVja19hdmFpbChlLmRhdGEpCisgICAgICAgICNyZW1vdmUgZHVtcGZpbGUKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKGUuZGF0YS5nZXRWYXIoJ1BSU0VSVl9EVU1QRklMRScsIFRydWUpKQorICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCk6CisgICAgICAgIGltcG9ydCBvZS5wcnNlcnZpY2UKKyAgICAgICAgI2R1bXAgbWV0YSBpbmZvIG9mIHRhYmxlcworICAgICAgICBkID0gZS5kYXRhLmNyZWF0ZUNvcHkoKQorICAgICAgICBkLnNldFZhcignUFJTRVJWX0RVTVBPUFRfQ09MJywgIjEiKQorICAgICAgICByZXR2YWwgPSBvZS5wcnNlcnZpY2UucHJzZXJ2X2R1bXBfZGIoZCkKKyAgICAgICAgaWYgbm90IHJldHZhbDoKKyAgICAgICAgICAgIGJiLmVycm9yKCJwcmV4cG9ydF9oYW5kbGVyOiBleHBvcnQgZmFpbGVkISIpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgKG1ldGFpbmZvLCBkYXRhaW5mbykgPSByZXR2YWwKKyAgICAgICAgb2UucHJzZXJ2aWNlLnByc2Vydl9leHBvcnRfdG9maWxlKGQsIG1ldGFpbmZvLCBOb25lLCBUcnVlKQorCit9CisKK2FkZGhhbmRsZXIgcHJleHBvcnRfaGFuZGxlcgorcHJleHBvcnRfaGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LlJlY2lwZVBhcnNlZCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQgYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wcmltcG9ydC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHJpbXBvcnQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWQ0NWYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHJpbXBvcnQuYmJjbGFzcwpAQCAtMCwwICsxLDIxIEBACitweXRob24gcHJpbXBvcnRfaGFuZGxlciAoKSB7CisgICAgaW1wb3J0IGJiLmV2ZW50CisgICAgaWYgbm90IGUuZGF0YToKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LlBhcnNlQ29tcGxldGVkKToKKyAgICAgICAgaW1wb3J0IG9lLnByc2VydmljZQorICAgICAgICAjaW1wb3J0IGFsbCBleHBvcnRlZCBBVVRPUFIgdmFsdWVzCisgICAgICAgIGltcG9ydGVkID0gb2UucHJzZXJ2aWNlLnByc2Vydl9pbXBvcnRfZGIoZS5kYXRhKQorICAgICAgICBpZiBpbXBvcnRlZCBpcyBOb25lOgorICAgICAgICAgICAgYmIuZmF0YWwoImltcG9ydCBmYWlsZWQhIikKKworICAgICAgICBmb3IgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSkgaW4gaW1wb3J0ZWQ6CisgICAgICAgICAgICBiYi5ub3RlKCJpbXBvcnRlZCAoJXMsJXMsJXMsJWQpIiAlICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmFsdWUpKQorICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQpOgorICAgICAgICBpbXBvcnQgb2UucHJzZXJ2aWNlCisgICAgICAgIG9lLnByc2VydmljZS5wcnNlcnZfY2hlY2tfYXZhaWwoZS5kYXRhKQorfQorCithZGRoYW5kbGVyIHByaW1wb3J0X2hhbmRsZXIKK3ByaW1wb3J0X2hhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wcnNlcnYuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Byc2Vydi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOTU5N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wcnNlcnYuYmJjbGFzcwpAQCAtMCwwICsxLDIgQEAKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wdGVzdC1nbm9tZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHRlc3QtZ25vbWUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjk0OWFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHRlc3QtZ25vbWUuYmJjbGFzcwpAQCAtMCwwICsxLDggQEAKK2luaGVyaXQgcHRlc3QKKworRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQVEVTVF9FTkFCTEVEJywgJzEnLCAnLS1lbmFibGUtaW5zdGFsbGVkLXRlc3RzJywgJy0tZGlzYWJsZS1pbnN0YWxsZWQtdGVzdHMnLCBkKX0iCisKK0ZJTEVTXyR7UE59LXB0ZXN0ICs9ICIke2xpYmV4ZWNkaXJ9L2luc3RhbGxlZC10ZXN0cy8gXAorICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vaW5zdGFsbGVkLXRlc3RzLyIKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImdub21lLWRlc2t0b3AtdGVzdGluZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B0ZXN0LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wdGVzdC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZjQ3MGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wdGVzdC5iYmNsYXNzCkBAIC0wLDAgKzEsNjcgQEAKK1NVTU1BUllfJHtQTn0tcHRlc3QgPz0gIiR7U1VNTUFSWX0gLSBQYWNrYWdlIHRlc3QgZmlsZXMiCitERVNDUklQVElPTl8ke1BOfS1wdGVzdCA/PSAiJHtERVNDUklQVElPTn0gIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyBhIHRlc3QgZGlyZWN0b3J5ICR7UFRFU1RfUEFUSH0gZm9yIHBhY2thZ2UgdGVzdCBwdXJwb3Nlcy4iCisKK1BURVNUX1BBVEggPz0gIiR7bGliZGlyfS8ke1BOfS9wdGVzdCIKK0ZJTEVTXyR7UE59LXB0ZXN0ID0gIiR7UFRFU1RfUEFUSH0iCitTRUNUSU9OXyR7UE59LXB0ZXN0ID0gImRldmVsIgorQUxMT1dfRU1QVFlfJHtQTn0tcHRlc3QgPSAiMSIKK1BURVNUX0VOQUJMRUQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdGVzdCcsICcxJywgJzAnLCBkKX0iCitQVEVTVF9FTkFCTEVEX2NsYXNzLW5hdGl2ZSA9ICIiCitQVEVTVF9FTkFCTEVEX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitQVEVTVF9FTkFCTEVEX2NsYXNzLWNyb3NzLWNhbmFkaWFuID0gIiIKK1JERVBFTkRTXyR7UE59LXB0ZXN0X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfS1wdGVzdF9jbGFzcy1uYXRpdmVzZGsgPSAiIgorUlJFQ09NTUVORFNfJHtQTn0tcHRlc3QgKz0gInB0ZXN0LXJ1bm5lciIKKworUEFDS0FHRVMgPSsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQVEVTVF9FTkFCTEVEJywgJzEnLCAnJHtQTn0tcHRlc3QnLCAnJywgZCl9IgorCitkb19jb25maWd1cmVfcHRlc3QoKSB7CisgICAgOgorfQorCitkb19jb25maWd1cmVfcHRlc3RfYmFzZSgpIHsKKyAgICBkb19jb25maWd1cmVfcHRlc3QKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgICA6Cit9CisKK2RvX2NvbXBpbGVfcHRlc3RfYmFzZSgpIHsKKyAgICBkb19jb21waWxlX3B0ZXN0Cit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisgICAgOgorfQorCitkb19pbnN0YWxsX3B0ZXN0X2Jhc2UoKSB7CisgICAgaWYgWyAtZiAke1dPUktESVJ9L3J1bi1wdGVzdCBdOyB0aGVuCisgICAgICAgIGluc3RhbGwgLUQgJHtXT1JLRElSfS9ydW4tcHRlc3QgJHtEfSR7UFRFU1RfUEFUSH0vcnVuLXB0ZXN0CisgICAgICAgIGlmIGdyZXAgLXEgaW5zdGFsbC1wdGVzdDogTWFrZWZpbGU7IHRoZW4KKyAgICAgICAgICAgIG9lX3J1bm1ha2UgREVTVERJUj0ke0R9JHtQVEVTVF9QQVRIfSBpbnN0YWxsLXB0ZXN0CisgICAgICAgIGZpCisgICAgICAgIGRvX2luc3RhbGxfcHRlc3QKKyAgICAgICAgY2hvd24gLVIgcm9vdDpyb290ICR7RH0ke1BURVNUX1BBVEh9CisgICAgZmkKK30KKworZG9fY29uZmlndXJlX3B0ZXN0X2Jhc2VbZGlyc10gPSAiJHtCfSIKK2RvX2NvbXBpbGVfcHRlc3RfYmFzZVtkaXJzXSA9ICIke0J9IgorZG9faW5zdGFsbF9wdGVzdF9iYXNlW2RpcnNdID0gIiR7Qn0iCitkb19pbnN0YWxsX3B0ZXN0X2Jhc2VbY2xlYW5kaXJzXSA9ICIke0R9JHtQVEVTVF9QQVRIfSIKKworYWRkdGFzayBjb25maWd1cmVfcHRlc3RfYmFzZSBhZnRlciBkb19jb25maWd1cmUgYmVmb3JlIGRvX2NvbXBpbGUKK2FkZHRhc2sgY29tcGlsZV9wdGVzdF9iYXNlICAgYWZ0ZXIgZG9fY29tcGlsZSAgIGJlZm9yZSBkb19pbnN0YWxsCithZGR0YXNrIGluc3RhbGxfcHRlc3RfYmFzZSAgIGFmdGVyIGRvX2luc3RhbGwgICBiZWZvcmUgZG9fcGFja2FnZSBkb19wb3B1bGF0ZV9zeXNyb290CisKK3B5dGhvbiAoKSB7CisgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKToKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19pbnN0YWxsX3B0ZXN0X2Jhc2UnLCAnZmFrZXJvb3QnLCAxKQorCisgICAgIyBSZW1vdmUgYWxsICcqcHRlc3RfYmFzZScgdGFza3Mgd2hlbiBwdGVzdCBpcyBub3QgZW5hYmxlZAorICAgIGlmIG5vdChkLmdldFZhcignUFRFU1RfRU5BQkxFRCcsIFRydWUpID09ICIxIik6CisgICAgICAgIGZvciBpIGluIFsnZG9fY29uZmlndXJlX3B0ZXN0X2Jhc2UnLCAnZG9fY29tcGlsZV9wdGVzdF9iYXNlJywgJ2RvX2luc3RhbGxfcHRlc3RfYmFzZSddOgorICAgICAgICAgICAgYmIuYnVpbGQuZGVsdGFzayhpLCBkKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHl0aG9uLWRpci5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHl0aG9uLWRpci5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZmE0YjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9weXRob24tZGlyLmJiY2xhc3MKQEAgLTAsMCArMSw1IEBACitQWVRIT05fQkFTRVZFUlNJT04gPz0gIjIuNyIKK1BZVEhPTl9BQkkgPz0gIiIKK1BZVEhPTl9ESVIgPSAicHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059IgorUFlUSE9OX1BOID0gInB5dGhvbiR7QCcnIGlmICcke1BZVEhPTl9CQVNFVkVSU0lPTn0nLnN0YXJ0c3dpdGgoJzInKSBlbHNlICczJ30iCitQWVRIT05fU0lURVBBQ0tBR0VTX0RJUiA9ICIke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHl0aG9uM25hdGl2ZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHl0aG9uM25hdGl2ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmODMwMTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9weXRob24zbmF0aXZlLmJiY2xhc3MKQEAgLTAsMCArMSw3IEBACitQWVRIT05fQkFTRVZFUlNJT04gPSAiMy40IgorCitpbmhlcml0IHB5dGhvbi1kaXIKKworUFlUSE9OPSIke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0iCitFWFRSQU5BVElWRVBBVEggKz0gIiR7UFlUSE9OX1BOfS1uYXRpdmUiCitERVBFTkRTICs9ICIgJHtQWVRIT05fUE59LW5hdGl2ZSAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9weXRob25uYXRpdmUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B5dGhvbm5hdGl2ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MDI5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9weXRob25uYXRpdmUuYmJjbGFzcwpAQCAtMCwwICsxLDggQEAKKworaW5oZXJpdCBweXRob24tZGlyCisKK1BZVEhPTj0iJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IgorIyBQWVRIT05fRVhFQ1VUQUJMRSBpcyB1c2VkIGJ5IGNtYWtlCitQWVRIT05fRVhFQ1VUQUJMRT0iJHtQWVRIT059IgorRVhUUkFOQVRJVkVQQVRIICs9ICIke1BZVEhPTl9QTn0tbmF0aXZlIgorREVQRU5EUyArPSAiICR7UFlUSE9OX1BOfS1uYXRpdmUgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcWVtdS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcWVtdS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMWY1ODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xZW11LmJiY2xhc3MKQEAgLTAsMCArMSw1MSBAQAorIworIyBUaGlzIGNsYXNzIGNvbnRhaW5zIGZ1bmN0aW9ucyBmb3IgcmVjaXBlcyB0aGF0IG5lZWQgUUVNVSBvciB0ZXN0IGZvciBpdHMKKyMgZXhpc3RlbmNlLgorIworCitkZWYgcWVtdV90YXJnZXRfYmluYXJ5KGRhdGEpOgorICAgIHRhcmdldF9hcmNoID0gZGF0YS5nZXRWYXIoIlRBUkdFVF9BUkNIIiwgVHJ1ZSkKKyAgICBpZiB0YXJnZXRfYXJjaCBpbiAoImk0ODYiLCAiaTU4NiIsICJpNjg2Iik6CisgICAgICAgIHRhcmdldF9hcmNoID0gImkzODYiCisgICAgZWxpZiB0YXJnZXRfYXJjaCA9PSAicG93ZXJwYyI6CisgICAgICAgIHRhcmdldF9hcmNoID0gInBwYyIKKyAgICBlbGlmIHRhcmdldF9hcmNoID09ICJwb3dlcnBjNjQiOgorICAgICAgICB0YXJnZXRfYXJjaCA9ICJwcGM2NCIKKworICAgIHJldHVybiAicWVtdS0iICsgdGFyZ2V0X2FyY2gKKyMKKyMgTmV4dCBmdW5jdGlvbiB3aWxsIHJldHVybiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBjb21tYW5kIHRoYXQgaXMgbmVlZGVkIHRvCisjIHRvIHJ1biBhIGNlcnRhaW4gYmluYXJ5IHRocm91Z2ggcWVtdS4gRm9yIGV4YW1wbGUsIGluIG9yZGVyIHRvIG1ha2UgYSBjZXJ0YWluCisjIHBvc3RpbnN0YWxsIHNjcmlwdGxldCBydW4gYXQgZG9fcm9vdGZzIHRpbWUgYW5kIHJ1bm5pbmcgdGhlIHBvc3RpbnN0YWxsIGlzCisjIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQsIHdlIGNhbiBydW4gaXQgdGhyb3VnaCBxZW11LiBGb3IgZXhhbXBsZSwgaW4gdGhlCisjIHBvc3RpbnN0YWxsIHNjcmlwdGxldCwgd2UgY291bGQgdXNlIHRoZSBmb2xsb3dpbmc6CisjCisjICR7QHFlbXVfcnVuX2JpbmFyeShkLCAnJEQnLCAnL3Vzci9iaW4vdGVzdF9hcHAnKX0gW3Rlc3RfYXBwIGFyZ3VtZW50c10KKyMKK2RlZiBxZW11X3J1bl9iaW5hcnkoZGF0YSwgcm9vdGZzX3BhdGgsIGJpbmFyeSk6CisgICAgcWVtdV9iaW5hcnkgPSBxZW11X3RhcmdldF9iaW5hcnkoZGF0YSkKKyAgICBpZiBxZW11X2JpbmFyeSA9PSAicWVtdS1hbGxhcmNoIjoKKyAgICAgICAgcWVtdV9iaW5hcnkgPSAicWVtdXdyYXBwZXIiCisKKyAgICBsaWJkaXIgPSByb290ZnNfcGF0aCArIGRhdGEuZ2V0VmFyKCJsaWJkaXIiLCBGYWxzZSkKKyAgICBiYXNlX2xpYmRpciA9IHJvb3Rmc19wYXRoICsgZGF0YS5nZXRWYXIoImJhc2VfbGliZGlyIiwgRmFsc2UpCisgICAgcWVtdV9vcHRpb25zID0gZGF0YS5nZXRWYXIoIlFFTVVfT1BUSU9OUyIsIFRydWUpCisKKyAgICByZXR1cm4gIlBTRVVET19VTkxPQUQ9MSAiICsgcWVtdV9iaW5hcnkgKyAiICIgKyBxZW11X29wdGlvbnMgKyAiIC1MICIgKyByb290ZnNfcGF0aFwKKyAgICAgICAgICAgICsgIiAtRSBMRF9MSUJSQVJZX1BBVEg9IiArIGxpYmRpciArICI6IiArIGJhc2VfbGliZGlyICsgIiAiXAorICAgICAgICAgICAgKyByb290ZnNfcGF0aCArIGJpbmFyeQorCisjIFFFTVVfRVhUUkFPUFRJT05TIGlzIG5vdCBtZWFudCB0byBiZSBkaXJlY3RseSB1c2VkLCB0aGUgZXh0ZW5zaW9ucyBhcmUgCisjIFBBQ0tBR0VfQVJDSCwgbm90IG92ZXJyaWRlcyBhbmQgaGVuY2UgaGF2ZSB0byBkbyB0aGlzIGRhbmNlLiBTaW1wbHkgYmVpbmcgYXJjaCAKKyMgc3BlY2lmaWMgaXNuJ3QgZ29vZCBlbm91Z2guCitRRU1VX09QVElPTlMgPSAiLXIgJHtPTERFU1RfS0VSTkVMfSAke0BkLmdldFZhcigiUUVNVV9FWFRSQU9QVElPTlNfJXMiICUgZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSCcsIFRydWUpLCBUcnVlKSBvciAiIn0iCitRRU1VX0VYVFJBT1BUSU9OU19pd21teHQgICAgPSAiIC1jcHUgcHhhMjcwLWM1IgorUUVNVV9FWFRSQU9QVElPTlNfYXJtdjYgICAgID0gIiAtY3B1IGFybTExMzYiCitRRU1VX0VYVFJBT1BUSU9OU19hcm12N2EgICAgPSAiIC1jcHUgY29ydGV4LWE4IgorUUVNVV9FWFRSQU9QVElPTlNfZTUwMHYyICAgID0gIiAtY3B1IGU1MDB2MiIKK1FFTVVfRVhUUkFPUFRJT05TX2U1MDBtYyAgICA9ICIgLWNwdSBlNTAwbWMiCitRRU1VX0VYVFJBT1BUSU9OU19lNTUwMCAgICAgPSAiIC1jcHUgZTU1MDAiCitRRU1VX0VYVFJBT1BUSU9OU19lNTUwMC02NGIgPSAiIC1jcHUgZTU1MDAiCitRRU1VX0VYVFJBT1BUSU9OU19lNjUwMCAgICAgPSAiIC1jcHUgZTY1MDAiCitRRU1VX0VYVFJBT1BUSU9OU19lNjUwMC02NGIgPSAiIC1jcHUgZTY1MDAiCitRRU1VX0VYVFJBT1BUSU9OU19wcGM3NDAwICAgPSAiIC1jcHUgNzQwMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3FtYWtlMi5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcW1ha2UyLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU3M2FkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3FtYWtlMi5iYmNsYXNzCkBAIC0wLDAgKzEsMjcgQEAKKyMKKyMgUU1ha2UgdmFyaWFibGVzIGZvciBRdDQKKyMKK2luaGVyaXQgcW1ha2VfYmFzZQorCitERVBFTkRTX3ByZXBlbmQgPSAicXQ0LXRvb2xzLW5hdGl2ZSAiCisKK2V4cG9ydCBRTUFLRVNQRUMgPSAiJHtTVEFHSU5HX0RBVEFESVJ9L3F0NC9ta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysiCitleHBvcnQgT0VfUU1BS0VfUVRfQ09ORklHID0gIiR7U1RBR0lOR19EQVRBRElSfS9xdDQvbWtzcGVjcy9xY29uZmlnLnByaSIKK2V4cG9ydCBPRV9RTUFLRV9VSUMgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3VpYzQiCitleHBvcnQgT0VfUU1BS0VfVUlDMyA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vdWljMzQiCitleHBvcnQgT0VfUU1BS0VfTU9DID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9tb2M0IgorZXhwb3J0IE9FX1FNQUtFX1JDQyA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcmNjNCIKK2V4cG9ydCBPRV9RTUFLRV9RREJVU0NQUDJYTUwgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3FkYnVzY3BwMnhtbDQiCitleHBvcnQgT0VfUU1BS0VfUURCVVNYTUwyQ1BQID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9xZGJ1c3htbDJjcHA0IgorZXhwb3J0IE9FX1FNQUtFX1FNQUtFID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9xbWFrZTIiCitleHBvcnQgT0VfUU1BS0VfTElOSyA9ICIke0NYWH0iCitleHBvcnQgT0VfUU1BS0VfQ1hYRkxBR1MgPSAiJHtDWFhGTEFHU30iCitleHBvcnQgT0VfUU1BS0VfSU5DRElSX1FUID0gIiR7U1RBR0lOR19JTkNESVJ9L3F0NCIKK2V4cG9ydCBPRV9RTUFLRV9MSUJESVJfUVQgPSAiJHtTVEFHSU5HX0xJQkRJUn0iCitleHBvcnQgT0VfUU1BS0VfTElCU19RVCA9ICJxdCIKK2V4cG9ydCBPRV9RTUFLRV9MSUJTX1gxMSA9ICItbFhleHQgLWxYMTEgLWxtIgorZXhwb3J0IE9FX1FNQUtFX0xJQlNfWDExU00gPSAiLWxTTSAtbElDRSIKK2V4cG9ydCBPRV9RTUFLRV9MQ09OVkVSVCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vbGNvbnZlcnQ0IgorZXhwb3J0IE9FX1FNQUtFX0xSRUxFQVNFID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9scmVsZWFzZTQiCitleHBvcnQgT0VfUU1BS0VfTFVQREFURSA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vbHVwZGF0ZTQiCitleHBvcnQgT0VfUU1BS0VfWE1MUEFUVEVSTlMgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3htbHBhdHRlcm5zNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3FtYWtlX2Jhc2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3FtYWtlX2Jhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzk4NzEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcW1ha2VfYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsMTE5IEBACitRTUFLRV9NS1NQRUNfUEFUSCA/PSAiJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9xbWFrZSIKKworT0VfUU1BS0VfUExBVEZPUk0gPSAiJHtUQVJHRVRfT1N9LW9lLWcrKyIKK1FNQUtFU1BFQyA6PSAiJHtRTUFLRV9NS1NQRUNfUEFUSH0vJHtPRV9RTUFLRV9QTEFURk9STX0iCisKKyMgV2Ugb3ZlcnJpZGUgdGhpcyBjb21wbGV0ZWx5IHRvIGVsaW1pbmF0ZSB0aGUgLWUgbm9ybWFsbHkgcGFzc2VkIGluCitFWFRSQV9PRU1BS0UgPSAiIgorCitleHBvcnQgT0VfUU1BS0VfQ0M9IiR7Q0N9IgorZXhwb3J0IE9FX1FNQUtFX0NGTEFHUz0iJHtDRkxBR1N9IgorZXhwb3J0IE9FX1FNQUtFX0NYWD0iJHtDWFh9IgorZXhwb3J0IE9FX1FNQUtFX0xERkxBR1M9IiR7TERGTEFHU30iCitleHBvcnQgT0VfUU1BS0VfQVI9IiR7QVJ9IgorZXhwb3J0IE9FX1FNQUtFX1NUUklQPSJlY2hvIgorZXhwb3J0IE9FX1FNQUtFX1JQQVRIPSItV2wsLXJwYXRoLWxpbmssIgorCisjIGRlZmF1bHQgdG8gcXRlMiB2aWEgYmIuY29uZiwgaW5oZXJpdCBxdDN4MTEgdG8gY29uZmlndXJlIGZvciBxdDN4MTEKKworb2VfcW1ha2VfbWtzcGVjcyAoKSB7CisgICAgbWtkaXIgLXAgbWtzcGVjcy8ke09FX1FNQUtFX1BMQVRGT1JNfQorICAgIGZvciBmIGluICR7UU1BS0VfTUtTUEVDX1BBVEh9LyR7T0VfUU1BS0VfUExBVEZPUk19Lyo7IGRvCisgICAgICAgIGlmIFsgLUwgJGYgXTsgdGhlbgorICAgICAgICAgICAgbG5rPWByZWFkbGluayAkZmAKKyAgICAgICAgICAgIGlmIFsgLWYgbWtzcGVjcy8ke09FX1FNQUtFX1BMQVRGT1JNfS8kbG5rIF07IHRoZW4KKyAgICAgICAgICAgICAgICBsbiAtcyAkbG5rIG1rc3BlY3MvJHtPRV9RTUFLRV9QTEFURk9STX0vYGJhc2VuYW1lICRmYAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNwICRmIG1rc3BlY3MvJHtPRV9RTUFLRV9QTEFURk9STX0vCisgICAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgICBjcCAkZiBta3NwZWNzLyR7T0VfUU1BS0VfUExBVEZPUk19LworICAgICAgICBmaQorICAgIGRvbmUKK30KKworZG9fZ2VuZXJhdGVfcXRfY29uZmlnX2ZpbGUoKSB7CisJZXhwb3J0IFFUX0NPTkZfUEFUSD0ke1dPUktESVJ9L3F0LmNvbmYKKwljYXQgPiAke1dPUktESVJ9L3F0LmNvbmYgPDxFT0YKK1tQYXRoc10KK1ByZWZpeCA9CitCaW5hcmllcyA9ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfQorSGVhZGVycyA9ICR7U1RBR0lOR19JTkNESVJ9LyR7UVRfRElSX05BTUV9CitQbHVnaW5zID0gJHtTVEFHSU5HX0xJQkRJUn0vJHtRVF9ESVJfTkFNRX0vcGx1Z2lucy8KK01rc3BlY3MgPSAke1NUQUdJTkdfREFUQURJUn0vJHtRVF9ESVJfTkFNRX0vbWtzcGVjcy8KK0VPRgorfQorCithZGR0YXNrIGdlbmVyYXRlX3F0X2NvbmZpZ19maWxlIGFmdGVyIGRvX3BhdGNoIGJlZm9yZSBkb19jb25maWd1cmUKKworcW1ha2VfYmFzZV9kb19jb25maWd1cmUoKSB7CisJY2FzZSAke1FNQUtFU1BFQ30gaW4KKwkqbGludXgtb2UtZysrfCpsaW51eC11Y2xpYmMtb2UtZysrfCpsaW51eC1nbnVlYWJpLW9lLWcrK3wqbGludXgtdWNsaWJjZWFiaS1vZS1nKyt8KmxpbnV4LWdudXNwZS1vZS1nKyt8KmxpbnV4LXVjbGliY3NwZS1vZS1nKyt8KmxpbnV4LWdudW4zMi1vZS1nKyspCisJCTs7CisJKi1vZS1nKyspCisJCWRpZSBVbnN1cHBvcnRlZCB0YXJnZXQgJHtUQVJHRVRfT1N9IGZvciBvZS1nKysgcW1ha2Ugc3BlYworCQk7OworCSopCisJCWJibm90ZSBTZWFyY2hpbmcgZm9yIHFtYWtlIHNwZWMgZmlsZQorCQlwYXRocz0iJHtRTUFLRV9NS1NQRUNfUEFUSH0vcXdzLyR7VEFSR0VUX09TfS0ke1RBUkdFVF9BUkNIfS1nKysiCisJCXBhdGhzPSIke1FNQUtFX01LU1BFQ19QQVRIfS8ke1RBUkdFVF9PU30tZysrICRwYXRocyIKKworCQlpZiAoZWNobyAiJHtUQVJHRVRfQVJDSH0ifGdyZXAgLXEgJ2kuODYnKTsgdGhlbgorCQkJcGF0aHM9IiR7UU1BS0VfTUtTUEVDX1BBVEh9L3F3cy8ke1RBUkdFVF9PU30teDg2LWcrKyAkcGF0aHMiCisJCWZpCisJCWZvciBpIGluICRwYXRoczsgZG8KKwkJCWlmIHRlc3QgLWUgJGk7IHRoZW4KKwkJCQlleHBvcnQgUU1BS0VTUEVDPSRpCisJCQkJYnJlYWsKKwkJCWZpCisJCWRvbmUKKwkJOzsKKwllc2FjCisKKwliYm5vdGUgInVzaW5nIHFtYWtlIHNwZWMgaW4gJHtRTUFLRVNQRUN9LCB1c2luZyBwcm9maWxlcyAnJHtRTUFLRV9QUk9GSUxFU30nIgorCisJaWYgWyAteiAiJHtRTUFLRV9QUk9GSUxFU30iIF07IHRoZW4gCisJCVBST0ZJTEVTPSJgbHMgKi5wcm9gIgorCWVsc2UKKwkJUFJPRklMRVM9IiR7UU1BS0VfUFJPRklMRVN9IgorCWZpCisKKwlpZiBbIC16ICIkUFJPRklMRVMiIF07IHRoZW4KKwkJZGllICJRTUFLRV9QUk9GSUxFUyBub3Qgc2V0IGFuZCBubyBwcm9maWxlcyBmb3VuZCBpbiAkUFdEIgorICAgICAgICBmaQorCisJaWYgWyAhIC16ICIke0VYVFJBX1FNQUtFVkFSU19QT1NUfSIgXTsgdGhlbgorCQlBRlRFUj0iLWFmdGVyIgorCQlRTUFLRV9WQVJTVUJTVF9QT1NUPSIke0VYVFJBX1FNQUtFVkFSU19QT1NUfSIKKwkJYmJub3RlICJxbWFrZSBwb3N0dmFyIHN1YnN0aXR1dGlvbjogJHtFWFRSQV9RTUFLRVZBUlNfUE9TVH0iCisJZmkKKworCWlmIFsgISAteiAiJHtFWFRSQV9RTUFLRVZBUlNfUFJFfSIgXTsgdGhlbgorCQlRTUFLRV9WQVJTVUJTVF9QUkU9IiR7RVhUUkFfUU1BS0VWQVJTX1BSRX0iCisJCWJibm90ZSAicW1ha2UgcHJldmFyIHN1YnN0aXR1dGlvbjogJHtFWFRSQV9RTUFLRVZBUlNfUFJFfSIKKwlmaQorCisJIyBIYWNrIC5wcm8gZmlsZXMgdG8gdXNlIE9FIHV0aWxpdGllcworCUxDT05WRVJUX05BTUU9JChiYXNlbmFtZSAke09FX1FNQUtFX0xDT05WRVJUfSkKKwlMUkVMRUFTRV9OQU1FPSQoYmFzZW5hbWUgJHtPRV9RTUFLRV9MUkVMRUFTRX0pCisJTFVQREFURV9OQU1FPSQoYmFzZW5hbWUgJHtPRV9RTUFLRV9MVVBEQVRFfSkKKwlYTUxQQVRURVJOU19OQU1FPSQoYmFzZW5hbWUgJHtPRV9RTUFLRV9YTUxQQVRURVJOU30pCisJZmluZCAtbmFtZSAnKi5wcm8nIFwKKwkgICAgIC1leGVjIHNlZCAtaSAtZSAic3xcKD1ccyouKlwpLyRMQ09OVkVSVF9OQU1FfFwxL2xjb252ZXJ0fGciIFwKKwkgICAgICAgICAgICAgICAgICAtZSAic3xcKD1ccyouKlwpLyRMUkVMRUFTRV9OQU1FfFwxL2xyZWxlYXNlfGciIFwKKwkgICAgICAgICAgICAgICAgICAtZSAic3xcKD1ccyouKlwpLyRMVVBEQVRFX05BTUV8XDEvbHVwZGF0ZXxnIiBcCisJICAgICAgICAgICAgICAgICAgLWUgInN8XCg9XHMqLipcKS8kWE1MUEFUVEVSTlNfTkFNRXxcMS94bWxwYXR0ZXJuc3xnIiBcCisJICAgICAgICAgICAgICAgICAgLWUgInN8XCg9XHMqLipcKS9sY29udmVydHxcMS8kTENPTlZFUlRfTkFNRXxnIiBcCisJICAgICAgICAgICAgICAgICAgLWUgInN8XCg9XHMqLipcKS9scmVsZWFzZXxcMS8kTFJFTEVBU0VfTkFNRXxnIiBcCisJICAgICAgICAgICAgICAgICAgLWUgInN8XCg9XHMqLipcKS9sdXBkYXRlfFwxLyRMVVBEQVRFX05BTUV8ZyIgXAorCSAgICAgICAgICAgICAgICAgIC1lICJzfFwoPVxzKi4qXCkveG1scGF0dGVybnN8XDEvJFhNTFBBVFRFUk5TX05BTUV8ZyIgXAorCSAgICAgICAgICAgICAgICAgICd7fScgJzsnCisKKyNiYm5vdGUgIkNhbGxpbmcgJyR7T0VfUU1BS0VfUU1BS0V9IC1tYWtlZmlsZSAtc3BlYyAke1FNQUtFU1BFQ30gLW8gTWFrZWZpbGUgJFFNQUtFX1ZBUlNVQlNUX1BSRSAkQUZURVIgJFBST0ZJTEVTICRRTUFLRV9WQVJTVUJTVF9QT1NUJyIKKwl1bnNldCBRTUFLRVNQRUMgfHwgdHJ1ZQorCSR7T0VfUU1BS0VfUU1BS0V9IC1tYWtlZmlsZSAtc3BlYyAke1FNQUtFU1BFQ30gLW8gTWFrZWZpbGUgJFFNQUtFX1ZBUlNVQlNUX1BSRSAkQUZURVIgJFBST0ZJTEVTICRRTUFLRV9WQVJTVUJTVF9QT1NUIHx8IGRpZSAiRXJyb3IgY2FsbGluZyAke09FX1FNQUtFX1FNQUtFfSBvbiAkUFJPRklMRVMiCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlCisKK2FkZHRhc2sgY29uZmlndXJlIGFmdGVyIGRvX3VucGFjayBkb19wYXRjaCBiZWZvcmUgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcXQ0ZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcXQ0ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYjEwNTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xdDRlLmJiY2xhc3MKQEAgLTAsMCArMSwyMSBAQAorUVQ0RURFUEVORFMgPz0gInF0NC1lbWJlZGRlZCAiCitERVBFTkRTX3ByZXBlbmQgPSAiJHtRVDRFREVQRU5EU30iCisKK2luaGVyaXQgcW1ha2UyCisKK1FUX0JBU0VfTkFNRSA9ICJxdDQtZW1iZWRkZWQiCitRVF9ESVJfTkFNRSA9ICJxdG9waWEiCitRVF9MSUJJTkZJWCA9ICJFIgorIyBvdmVycmlkZSB2YXJpYWJsZXMgc2V0IGJ5IHFtYWtlLWJhc2UgdG8gY29tcGlsZSBRdC9FbWJlZGRlZCBhcHBzCisjCitleHBvcnQgUU1BS0VTUEVDID0gIiR7U1RBR0lOR19EQVRBRElSfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysiCitleHBvcnQgT0VfUU1BS0VfUVRfQ09ORklHID0gIiR7U1RBR0lOR19EQVRBRElSfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzL3Fjb25maWcucHJpIgorZXhwb3J0IE9FX1FNQUtFX0lOQ0RJUl9RVCA9ICIke1NUQUdJTkdfSU5DRElSfS8ke1FUX0RJUl9OQU1FfSIKK2V4cG9ydCBPRV9RTUFLRV9MSUJESVJfUVQgPSAiJHtTVEFHSU5HX0xJQkRJUn0iCitleHBvcnQgT0VfUU1BS0VfTElCU19RVCA9ICJxdCIKK2V4cG9ydCBPRV9RTUFLRV9MSUJTX1gxMSA9ICIiCitleHBvcnQgT0VfUU1BS0VfRVhUUkFfTU9EVUxFUyA9ICJuZXR3b3JrIgorRVhUUkFfUU1BS0VWQVJTX1BSRSArPSAiIFFUX0xJQklORklYPSR7UVRfTElCSU5GSVh9ICIKKworIyBRdDQgdXNlcyBhdG9taWMgaW5zdHJ1Y3Rpb25zIG5vdCBzdXBwb3J0ZWQgaW4gdGh1bWIgbW9kZQorQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xdDR4MTEuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3F0NHgxMS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMDZkMzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xdDR4MTEuYmJjbGFzcwpAQCAtMCwwICsxLDE0IEBACitRVDRERVBFTkRTID89ICJxdDQteDExICIKK0RFUEVORFNfcHJlcGVuZCA9ICIke1FUNERFUEVORFN9IgorCisjIGRlcGVuZHMgb24gcXQ0LXgxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTICs9ICJ4MTEiCisKK2luaGVyaXQgcW1ha2UyIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitRVF9CQVNFX05BTUUgPSAicXQ0IgorUVRfRElSX05BTUUgPSAicXQ0IgorUVRfTElCSU5GSVggPSAiIgorCisjIFF0NCB1c2VzIGF0b21pYyBpbnN0cnVjdGlvbnMgbm90IHN1cHBvcnRlZCBpbiB0aHVtYiBtb2RlCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlY2lwZV9zYW5pdHkuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlY2lwZV9zYW5pdHkuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTA0ZTMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcmVjaXBlX3Nhbml0eS5iYmNsYXNzCkBAIC0wLDAgKzEsMTY3IEBACitkZWYgX19ub3RlKG1zZywgZCk6CisgICAgYmIubm90ZSgiJXM6IHJlY2lwZV9zYW5pdHk6ICVzIiAlIChkLmdldFZhcigiUCIsIFRydWUpLCBtc2cpKQorCitfX3JlY2lwZV9zYW5pdHlfYmFkcnVudGltZXZhcnMgPSAiUkRFUEVORFMgUlBST1ZJREVTIFJSRUNPTU1FTkRTIFJDT05GTElDVFMiCitkZWYgYmFkX3J1bnRpbWVfdmFycyhjZmdkYXRhLCBkKToKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJuYXRpdmUiLCBkKSBvciBcCisgICAgICAgICAgICBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJjcm9zcyIsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIGZvciB2YXIgaW4gZC5nZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9iYWRydW50aW1ldmFycyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIHZhbCA9IGQuZ2V0VmFyKHZhciwgMCkKKyAgICAgICAgaWYgdmFsIGFuZCB2YWwgIT0gY2ZnZGF0YS5nZXQodmFyKToKKyAgICAgICAgICAgIF9fbm90ZSgiJXMgc2hvdWxkIGJlICVzXyR7UE59IiAlICh2YXIsIHZhciksIGQpCisKK19fcmVjaXBlX3Nhbml0eV9yZXF2YXJzID0gIkRFU0NSSVBUSU9OIgorX19yZWNpcGVfc2FuaXR5X3JlcWRpZmZ2YXJzID0gIiIKK2RlZiByZXFfdmFycyhjZmdkYXRhLCBkKToKKyAgICBmb3IgdmFyIGluIGQuZ2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfcmVxdmFycyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGlmIG5vdCBkLmdldFZhcih2YXIsIDApOgorICAgICAgICAgICAgX19ub3RlKCIlcyBzaG91bGQgYmUgc2V0IiAlIHZhciwgZCkKKworICAgIGZvciB2YXIgaW4gZC5nZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9yZXFkaWZmdmFycyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIHZhbCA9IGQuZ2V0VmFyKHZhciwgMCkKKyAgICAgICAgY2ZndmFsID0gY2ZnZGF0YS5nZXQodmFyKQorCisgICAgICAgIGlmIG5vdCB2YWw6CisgICAgICAgICAgICBfX25vdGUoIiVzIHNob3VsZCBiZSBzZXQiICUgdmFyLCBkKQorICAgICAgICBlbGlmIHZhbCA9PSBjZmd2YWw6CisgICAgICAgICAgICBfX25vdGUoIiVzIHNob3VsZCBiZSBkZWZpbmVkIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIGRlZmF1bHQgKCVzKSIgJSAodmFyLCBjZmd2YWwpLCBkKQorCitkZWYgdmFyX3JlbmFtZXNfb3ZlcndyaXRlKGNmZ2RhdGEsIGQpOgorICAgIHJlbmFtZXMgPSBkLmdldFZhcigiX19yZWNpcGVfc2FuaXR5X3JlbmFtZXMiLCAwKQorICAgIGlmIHJlbmFtZXM6CisgICAgICAgIGZvciAoa2V5LCBuZXdrZXksIG9sZHZhbHVlLCBuZXd2YWx1ZSkgaW4gcmVuYW1lczoKKyAgICAgICAgICAgIGlmIG9sZHZhbHVlICE9IG5ld3ZhbHVlIGFuZCBvbGR2YWx1ZSAhPSBjZmdkYXRhLmdldChuZXdrZXkpOgorICAgICAgICAgICAgICAgIF9fbm90ZSgicmVuYW1lIG9mIHZhcmlhYmxlICclcycgdG8gJyVzJyBvdmVyd3JvdGUgZXhpc3RpbmcgdmFsdWUgJyVzJyB3aXRoICclcycuIiAlIChrZXksIG5ld2tleSwgb2xkdmFsdWUsIG5ld3ZhbHVlKSwgZCkKKworZGVmIGluY29ycmVjdF9ub25lbXB0eV9QQUNLQUdFUyhjZmdkYXRhLCBkKToKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJuYXRpdmUiLCBkKSBvciBcCisgICAgICAgICAgICBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJjcm9zcyIsIGQpOgorICAgICAgICBpZiBkLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKK2RlZiBjYW5fdXNlX2F1dG90b29sc19iYXNlKGNmZ2RhdGEsIGQpOgorICAgIGNmZyA9IGQuZ2V0VmFyKCJkb19jb25maWd1cmUiLCBUcnVlKQorICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJhdXRvdG9vbHMiLCBkKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBmb3IgaSBpbiBbImF1dG9yZWNvbmYiXSArIFsiJXNfZG9fY29uZmlndXJlIiAlIGNscyBmb3IgY2xzIGluIFsiZ25vbWViYXNlIiwgImdub21lIiwgImUiLCAiYXV0b3Rvb2xzIiwgImVmbCIsICJncGVwaG9uZSIsICJvcGVubW9rbyIsICJvcGVubW9rbzIiLCAieGZjZSIsICJ4bGlicyJdXToKKyAgICAgICAgaWYgY2ZnLmZpbmQoaSkgIT0gLTE6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGZvciBjbHNmaWxlIGluIGQuZ2V0VmFyKCJfX2luaGVyaXRfY2FjaGUiLCAwKToKKyAgICAgICAgKGJhc2UsIF8pID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGNsc2ZpbGUpKQorICAgICAgICBpZiBjZmcuZmluZCgiJXNfZG9fY29uZmlndXJlIiAlIGJhc2UpICE9IC0xOgorICAgICAgICAgICAgX19ub3RlKCJhdXRvdG9vbHNfYmFzZSB1c2FnZSBuZWVkcyB2ZXJpZmljYXRpb24sIHNwb3R0ZWQgJXNfZG9fY29uZmlndXJlIiAlIGJhc2UsIGQpCisKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgY2FuX2RlbGV0ZV9GSUxFU1BBVEgoY2ZnZGF0YSwgZCk6CisgICAgZXhwZWN0ZWQgPSBjZmdkYXRhLmdldCgiRklMRVNQQVRIIikKKyAgICBleHBlY3RlZHBhdGhzID0gZC5leHBhbmQoZXhwZWN0ZWQpCisgICAgdW5leHBhbmRlZCA9IGQuZ2V0VmFyKCJGSUxFU1BBVEgiLCAwKQorICAgIGZpbGVzcGF0aCA9IGQuZ2V0VmFyKCJGSUxFU1BBVEgiLCBUcnVlKS5zcGxpdCgiOiIpCisgICAgZmlsZXNwYXRoID0gW29zLnBhdGgubm9ybXBhdGgoZikgZm9yIGYgaW4gZmlsZXNwYXRoIGlmIG9zLnBhdGguZXhpc3RzKGYpXQorICAgIGZvciBmcCBpbiBmaWxlc3BhdGg6CisgICAgICAgIGlmIG5vdCBmcCBpbiBleHBlY3RlZHBhdGhzOgorICAgICAgICAgICAgIyBfX25vdGUoIlBhdGggJXMgaW4gRklMRVNQQVRIIG5vdCBpbiB0aGUgZXhwZWN0ZWQgcGF0aHMgJXMiICUKKyAgICAgICAgICAgICMgKGZwLCBleHBlY3RlZHBhdGhzKSwgZCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBleHBlY3RlZCAhPSB1bmV4cGFuZGVkCisKK2RlZiBjYW5fZGVsZXRlX0ZJTEVTRElSKGNmZ2RhdGEsIGQpOgorICAgIGV4cGVjdGVkID0gY2ZnZGF0YS5nZXQoIkZJTEVTRElSIikKKyAgICAjZXhwZWN0ZWQgPSAiJHtAYmIudXRpbHMud2hpY2goZC5nZXRWYXIoJ0ZJTEVTUEFUSCcsIFRydWUpLCAnLicpfSIKKyAgICB1bmV4cGFuZGVkID0gZC5nZXRWYXIoIkZJTEVTRElSIiwgMCkKKyAgICBpZiB1bmV4cGFuZGVkIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZXhwYW5kZWQgPSBvcy5wYXRoLm5vcm1wYXRoKGQuZ2V0VmFyKCJGSUxFU0RJUiIsIFRydWUpKQorICAgIGZpbGVzcGF0aCA9IGQuZ2V0VmFyKCJGSUxFU1BBVEgiLCBUcnVlKS5zcGxpdCgiOiIpCisgICAgZmlsZXNwYXRoID0gW29zLnBhdGgubm9ybXBhdGgoZikgZm9yIGYgaW4gZmlsZXNwYXRoIGlmIG9zLnBhdGguZXhpc3RzKGYpXQorCisgICAgcmV0dXJuIHVuZXhwYW5kZWQgIT0gZXhwZWN0ZWQgYW5kIFwKKyAgICAgICAgICAgb3MucGF0aC5leGlzdHMoZXhwYW5kZWQpIGFuZCBcCisgICAgICAgICAgIChleHBhbmRlZCBpbiBmaWxlc3BhdGggb3IKKyAgICAgICAgICAgIGV4cGFuZGVkID09IGQuZXhwYW5kKGV4cGVjdGVkKSkKKworZGVmIGNhbl9kZWxldGVfb3RoZXJzKHAsIGNmZ2RhdGEsIGQpOgorICAgIGZvciBrIGluIFsiUyIsICJQViIsICJQTiIsICJERVNDUklQVElPTiIsICJERVBFTkRTIiwKKyAgICAgICAgICAgICAgIlNFQ1RJT04iLCAiUEFDS0FHRVMiLCAiRVhUUkFfT0VDT05GIiwgIkVYVFJBX09FTUFLRSJdOgorICAgICNmb3IgayBpbiBjZmdkYXRhOgorICAgICAgICB1bmV4cGFuZGVkID0gZC5nZXRWYXIoaywgMCkKKyAgICAgICAgY2ZndW5leHBhbmRlZCA9IGNmZ2RhdGEuZ2V0KGspCisgICAgICAgIGlmIG5vdCBjZmd1bmV4cGFuZGVkOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBleHBhbmRlZCA9IGQuZ2V0VmFyKGssIFRydWUpCisgICAgICAgICAgICBjZmdleHBhbmRlZCA9IGQuZXhwYW5kKGNmZ3VuZXhwYW5kZWQpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaC5QYXJhbWV0ZXJFcnJvcjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgdW5leHBhbmRlZCAhPSBjZmd1bmV4cGFuZGVkIGFuZCBcCisgICAgICAgICAgIGNmZ2V4cGFuZGVkID09IGV4cGFuZGVkOgorICAgICAgICAgICBfX25vdGUoImNhbmRpZGF0ZSBmb3IgcmVtb3ZhbCBvZiAlcyIgJSBrLCBkKQorICAgICAgICAgICBiYi5kZWJ1ZygxLCAiJXM6IHJlY2lwZV9zYW5pdHk6ICAgY2ZnJ3MgJyVzJyBhbmQgZCdzICclcycgYm90aCBleHBhbmQgdG8gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgKHAsIGNmZ3VuZXhwYW5kZWQsIHVuZXhwYW5kZWQsIGV4cGFuZGVkKSkKKworcHl0aG9uIGRvX3JlY2lwZV9zYW5pdHkgKCkgeworICAgIHAgPSBkLmdldFZhcigiUCIsIFRydWUpCisgICAgcCA9ICIlcyAlcyAlcyIgJSAoZC5nZXRWYXIoIlBOIiwgVHJ1ZSksIGQuZ2V0VmFyKCJQViIsIFRydWUpLCBkLmdldFZhcigiUFIiLCBUcnVlKSkKKworICAgIHNhbml0eWNoZWNrcyA9IFsKKyAgICAgICAgKGNhbl9kZWxldGVfRklMRVNESVIsICJjYW5kaWRhdGUgZm9yIHJlbW92YWwgb2YgRklMRVNESVIiKSwKKyAgICAgICAgKGNhbl9kZWxldGVfRklMRVNQQVRILCAiY2FuZGlkYXRlIGZvciByZW1vdmFsIG9mIEZJTEVTUEFUSCIpLAorICAgICAgICAjKGNhbl91c2VfYXV0b3Rvb2xzX2Jhc2UsICJjYW5kaWRhdGUgZm9yIHVzZSBvZiBhdXRvdG9vbHNfYmFzZSIpLAorICAgICAgICAoaW5jb3JyZWN0X25vbmVtcHR5X1BBQ0tBR0VTLCAibmF0aXZlIG9yIGNyb3NzIHJlY2lwZSB3aXRoIG5vbi1lbXB0eSBQQUNLQUdFUyIpLAorICAgIF0KKyAgICBjZmdkYXRhID0gZC5nZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9jZmdkYXRhIiwgMCkKKworICAgIGZvciAoZnVuYywgbXNnKSBpbiBzYW5pdHljaGVja3M6CisgICAgICAgIGlmIGZ1bmMoY2ZnZGF0YSwgZCk6CisgICAgICAgICAgICBfX25vdGUobXNnLCBkKQorCisgICAgY2FuX2RlbGV0ZV9vdGhlcnMocCwgY2ZnZGF0YSwgZCkKKyAgICB2YXJfcmVuYW1lc19vdmVyd3JpdGUoY2ZnZGF0YSwgZCkKKyAgICByZXFfdmFycyhjZmdkYXRhLCBkKQorICAgIGJhZF9ydW50aW1lX3ZhcnMoY2ZnZGF0YSwgZCkKK30KK2RvX3JlY2lwZV9zYW5pdHlbbm9zdGFtcF0gPSAiMSIKK2FkZHRhc2sgcmVjaXBlX3Nhbml0eQorCitkb19yZWNpcGVfc2FuaXR5X2FsbFtub3N0YW1wXSA9ICIxIgorZG9fcmVjaXBlX3Nhbml0eV9hbGxbcmVjcmRlcHRhc2tdID0gImRvX3JlY2lwZV9zYW5pdHlfYWxsIGRvX3JlY2lwZV9zYW5pdHkiCitkb19yZWNpcGVfc2FuaXR5X2FsbCAoKSB7CisgICAgOgorfQorYWRkdGFzayByZWNpcGVfc2FuaXR5X2FsbCBhZnRlciBkb19yZWNpcGVfc2FuaXR5CisKK3B5dGhvbiByZWNpcGVfc2FuaXR5X2VoICgpIHsKKyAgICBkID0gZS5kYXRhCisKKyAgICBjZmdkYXRhID0ge30KKyAgICBmb3IgayBpbiBkLmtleXMoKToKKyAgICAjZm9yIGsgaW4gWyJTIiwgIlBSIiwgIlBWIiwgIlBOIiwgIkRFU0NSSVBUSU9OIiwgIkxJQ0VOU0UiLCAiREVQRU5EUyIsCisgICAgIyAgICAgICAgICAiU0VDVElPTiJdOgorICAgICAgICBjZmdkYXRhW2tdID0gZC5nZXRWYXIoaywgMCkKKworICAgIGQuc2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfY2ZnZGF0YSIsIGNmZ2RhdGEpCisgICAgI2Quc2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfY2ZnZGF0YSIsIGQpCisKKyAgICAjIFNpY2ssIHZlcnkgc2ljay4uCisgICAgZnJvbSBiYi5kYXRhX3NtYXJ0IGltcG9ydCBEYXRhU21hcnQKKyAgICBvbGQgPSBEYXRhU21hcnQucmVuYW1lVmFyCisgICAgZGVmIG15cmVuYW1lKHNlbGYsIGtleSwgbmV3a2V5KToKKyAgICAgICAgb2xkdmFsdWUgPSBzZWxmLmdldFZhcihuZXdrZXksIDApCisgICAgICAgIG9sZChzZWxmLCBrZXksIG5ld2tleSkKKyAgICAgICAgbmV3dmFsdWUgPSBzZWxmLmdldFZhcihuZXdrZXksIDApCisgICAgICAgIGlmIG9sZHZhbHVlOgorICAgICAgICAgICAgcmVuYW1lcyA9IHNlbGYuZ2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfcmVuYW1lcyIsIDApIG9yIHNldCgpCisgICAgICAgICAgICByZW5hbWVzLmFkZCgoa2V5LCBuZXdrZXksIG9sZHZhbHVlLCBuZXd2YWx1ZSkpCisgICAgICAgICAgICBzZWxmLnNldFZhcigiX19yZWNpcGVfc2FuaXR5X3JlbmFtZXMiLCByZW5hbWVzKQorICAgIERhdGFTbWFydC5yZW5hbWVWYXIgPSBteXJlbmFtZQorfQorYWRkaGFuZGxlciByZWNpcGVfc2FuaXR5X2VoCityZWNpcGVfc2FuaXR5X2VoW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQ29uZmlnUGFyc2VkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcmVsb2NhdGFibGUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlbG9jYXRhYmxlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNhOTk4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlbG9jYXRhYmxlLmJiY2xhc3MKQEAgLTAsMCArMSw3IEBACitpbmhlcml0IGNocnBhdGgKKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJyZWxvY2F0YWJsZV9iaW5hcmllc19wcmVwcm9jZXNzIgorCitweXRob24gcmVsb2NhdGFibGVfYmluYXJpZXNfcHJlcHJvY2VzcygpIHsKKyAgICBycGF0aF9yZXBsYWNlKGQuZXhwYW5kKCcke1NZU1JPT1RfREVTVERJUn0nKSwgZCkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlcG9ydC1lcnJvci5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcmVwb3J0LWVycm9yLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQwYzI5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlcG9ydC1lcnJvci5iYmNsYXNzCkBAIC0wLDAgKzEsOTIgQEAKKyMKKyMgQ29sbGVjdHMgZGVidWcgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gY3JlYXRlIGVycm9yIHJlcG9ydCBmaWxlcy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjIEF1dGhvcjogQW5kcmVlYSBCcmFuZHVzYSBQcm9jYSA8YW5kcmVlYS5iLnByb2NhQGludGVsLmNvbT4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLCBzZWUgQ09QWUlORy5NSVQgZm9yIGRldGFpbHMKKworRVJSX1JFUE9SVF9ESVIgPz0gIiR7TE9HX0RJUn0vZXJyb3ItcmVwb3J0IgorCitkZWYgZXJyb3JyZXBvcnRfZ2V0ZGF0YShlKToKKyAgICBsb2dwYXRoID0gZS5kYXRhLmdldFZhcignRVJSX1JFUE9SVF9ESVInLCBUcnVlKQorICAgIGRhdGFmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJlcnJvci1yZXBvcnQudHh0IikKKyAgICB3aXRoIG9wZW4oZGF0YWZpbGUpIGFzIGY6CisgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgIHJldHVybiBkYXRhCisKK2RlZiBlcnJvcnJlcG9ydF9zYXZlZGF0YShlLCBuZXdkYXRhLCBmaWxlKToKKyAgICBpbXBvcnQganNvbgorICAgIGxvZ3BhdGggPSBlLmRhdGEuZ2V0VmFyKCdFUlJfUkVQT1JUX0RJUicsIFRydWUpCisgICAgZGF0YWZpbGUgPSBvcy5wYXRoLmpvaW4obG9ncGF0aCwgZmlsZSkKKyAgICB3aXRoIG9wZW4oZGF0YWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAganNvbi5kdW1wKG5ld2RhdGEsIGYsIGluZGVudD00LCBzb3J0X2tleXM9VHJ1ZSkKKyAgICByZXR1cm4gZGF0YWZpbGUKKworcHl0aG9uIGVycm9ycmVwb3J0X2hhbmRsZXIgKCkgeworICAgICAgICBpbXBvcnQganNvbgorCisgICAgICAgIGxvZ3BhdGggPSBlLmRhdGEuZ2V0VmFyKCdFUlJfUkVQT1JUX0RJUicsIFRydWUpCisgICAgICAgIGRhdGFmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJlcnJvci1yZXBvcnQudHh0IikKKworICAgICAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCk6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobG9ncGF0aCkKKyAgICAgICAgICAgIGRhdGEgPSB7fQorICAgICAgICAgICAgbWFjaGluZSA9IGUuZGF0YS5nZXRWYXIoIk1BQ0hJTkUiLCBUcnVlKQorICAgICAgICAgICAgZGF0YVsnbWFjaGluZSddID0gbWFjaGluZQorICAgICAgICAgICAgZGF0YVsnYnVpbGRfc3lzJ10gPSBlLmRhdGEuZ2V0VmFyKCJCVUlMRF9TWVMiLCBUcnVlKQorICAgICAgICAgICAgZGF0YVsnbmF0aXZlbHNiJ10gPSBlLmRhdGEuZ2V0VmFyKCJOQVRJVkVMU0JTVFJJTkciLCBUcnVlKQorICAgICAgICAgICAgZGF0YVsnZGlzdHJvJ10gPSBlLmRhdGEuZ2V0VmFyKCJESVNUUk8iLCBUcnVlKQorICAgICAgICAgICAgZGF0YVsndGFyZ2V0X3N5cyddID0gZS5kYXRhLmdldFZhcigiVEFSR0VUX1NZUyIsIFRydWUpCisgICAgICAgICAgICBkYXRhWydmYWlsdXJlcyddID0gW10KKyAgICAgICAgICAgIGRhdGFbJ2NvbXBvbmVudCddID0gZS5nZXRQa2dzKClbMF0KKyAgICAgICAgICAgIGRhdGFbJ2JyYW5jaF9jb21taXQnXSA9IGJhc2VfZGV0ZWN0X2JyYW5jaChlLmRhdGEpICsgIjogIiArIGJhc2VfZGV0ZWN0X3JldmlzaW9uKGUuZGF0YSkKKyAgICAgICAgICAgIGxvY2sgPSBiYi51dGlscy5sb2NrZmlsZShkYXRhZmlsZSArICcubG9jaycpCisgICAgICAgICAgICBlcnJvcnJlcG9ydF9zYXZlZGF0YShlLCBkYXRhLCAiZXJyb3ItcmVwb3J0LnR4dCIpCisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxvY2spCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGUsIGJiLmJ1aWxkLlRhc2tGYWlsZWQpOgorICAgICAgICAgICAgdGFzayA9IGUudGFzaworICAgICAgICAgICAgdGFza2RhdGE9e30KKyAgICAgICAgICAgIGxvZyA9IGUuZGF0YS5nZXRWYXIoJ0JCX0xPR0ZJTEUnLCBUcnVlKQorICAgICAgICAgICAgdGFza2RhdGFbJ3BhY2thZ2UnXSA9IGUuZGF0YS5leHBhbmQoIiR7UEZ9IikKKyAgICAgICAgICAgIHRhc2tkYXRhWyd0YXNrJ10gPSB0YXNrCisgICAgICAgICAgICBpZiBsb2c6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsb2dGaWxlID0gb3Blbihsb2csICdyJykKKyAgICAgICAgICAgICAgICAgICAgbG9nZGF0YSA9IGxvZ0ZpbGUucmVhZCgpLmRlY29kZSgndXRmLTgnKQorICAgICAgICAgICAgICAgICAgICBsb2dGaWxlLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIGxvZ2RhdGEgPSAiVW5hYmxlIHRvIHJlYWQgbG9nIGZpbGUiCisKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZGF0YSA9ICJObyBMb2ciCisKKyAgICAgICAgICAgICMgc2VydmVyIHdpbGwgcmVmdXNlIGZhaWx1cmVzIGxvbmdlciB0aGFuIHBhcmFtIHNwZWNpZmllZCBpbiBwcm9qZWN0LnNldHRpbmdzLnB5CisgICAgICAgICAgICAjIE1BWF9VUExPQURfU0laRSA9ICI1MjQyODgwIgorICAgICAgICAgICAgIyB1c2UgbG93ZXIgdmFsdWUsIGJlY2F1c2UgNjUwIGNoYXJzIGNhbiBiZSBzcGVudCBpbiB0YXNrLCBwYWNrYWdlLCB2ZXJzaW9uCisgICAgICAgICAgICBtYXhfbG9nZGF0YV9zaXplID0gNTI0MjAwMAorICAgICAgICAgICAgIyB1cGxvYWQgbGFzdCBtYXhfbG9nZGF0YV9zaXplIGNoYXJhY3RlcnMKKyAgICAgICAgICAgIGlmIGxlbihsb2dkYXRhKSA+IG1heF9sb2dkYXRhX3NpemU6CisgICAgICAgICAgICAgICAgbG9nZGF0YSA9ICIuLi4iICsgbG9nZGF0YVstbWF4X2xvZ2RhdGFfc2l6ZTpdCisgICAgICAgICAgICB0YXNrZGF0YVsnbG9nJ10gPSBsb2dkYXRhCisgICAgICAgICAgICBsb2NrID0gYmIudXRpbHMubG9ja2ZpbGUoZGF0YWZpbGUgKyAnLmxvY2snKQorICAgICAgICAgICAganNvbmRhdGEgPSBqc29uLmxvYWRzKGVycm9ycmVwb3J0X2dldGRhdGEoZSkpCisgICAgICAgICAgICBqc29uZGF0YVsnZmFpbHVyZXMnXS5hcHBlbmQodGFza2RhdGEpCisgICAgICAgICAgICBlcnJvcnJlcG9ydF9zYXZlZGF0YShlLCBqc29uZGF0YSwgImVycm9yLXJlcG9ydC50eHQiKQorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsb2NrKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCk6CisgICAgICAgICAgICBsb2NrID0gYmIudXRpbHMubG9ja2ZpbGUoZGF0YWZpbGUgKyAnLmxvY2snKQorICAgICAgICAgICAganNvbmRhdGEgPSBqc29uLmxvYWRzKGVycm9ycmVwb3J0X2dldGRhdGEoZSkpCisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxvY2spCisgICAgICAgICAgICBmYWlsdXJlcyA9IGpzb25kYXRhWydmYWlsdXJlcyddCisgICAgICAgICAgICBpZihsZW4oZmFpbHVyZXMpID4gMCk6CisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSAiZXJyb3JfcmVwb3J0XyIgKyBlLmRhdGEuZ2V0VmFyKCJCVUlMRE5BTUUiLCBUcnVlKSsiLnR4dCIKKyAgICAgICAgICAgICAgICBkYXRhZmlsZSA9IGVycm9ycmVwb3J0X3NhdmVkYXRhKGUsIGpzb25kYXRhLCBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJUaGUgZXJyb3JzIGZvciB0aGlzIGJ1aWxkIGFyZSBzdG9yZWQgaW4gJXNcbllvdSBjYW4gc2VuZCB0aGUgZXJyb3JzIHRvIGEgcmVwb3J0cyBzZXJ2ZXIgYnkgcnVubmluZzpcbiAgc2VuZC1lcnJvci1yZXBvcnQgJXMgWy1zIHNlcnZlcl0iICUgKGRhdGFmaWxlLCBkYXRhZmlsZSkpCisgICAgICAgICAgICAgICAgYmIubm90ZSgiVGhlIGNvbnRlbnRzIG9mIHRoZXNlIGxvZ3Mgd2lsbCBiZSBwb3N0ZWQgaW4gcHVibGljIGlmIHlvdSB1c2UgdGhlIGFib3ZlIGNvbW1hbmQgd2l0aCB0aGUgZGVmYXVsdCBzZXJ2ZXIuIFBsZWFzZSBlbnN1cmUgeW91IHJlbW92ZSBhbnkgaWRlbnRpZnlpbmcgb3IgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24gd2hlbiBwcm9tcHRlZCBiZWZvcmUgc2VuZGluZy4iKQorfQorCithZGRoYW5kbGVyIGVycm9ycmVwb3J0X2hhbmRsZXIKK2Vycm9ycmVwb3J0X2hhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQgYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQgYmIuYnVpbGQuVGFza0ZhaWxlZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JtX3dvcmsuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JtX3dvcmsuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTllZmMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcm1fd29yay5iYmNsYXNzCkBAIC0wLDAgKzEsMTIwIEBACisjCisjIFJlbW92ZXMgc291cmNlIGFmdGVyIGJ1aWxkCisjCisjIFRvIHVzZSBpdCBhZGQgdGhhdCBsaW5lIHRvIGNvbmYvbG9jYWwuY29uZjoKKyMKKyMgSU5IRVJJVCArPSAicm1fd29yayIKKyMKKyMgVG8gaW5oaWJpdCBybV93b3JrIGZvciBzb21lIHJlY2lwZXMsIHNwZWNpZnkgdGhlbSBpbiBSTV9XT1JLX0VYQ0xVREUuCisjIEZvciBleGFtcGxlLCBpbiBjb25mL2xvY2FsLmNvbmY6CisjCisjIFJNX1dPUktfRVhDTFVERSArPSAiaWN1LW5hdGl2ZSBpY3UgYnVzeWJveCIKKyMKKworIyBVc2UgdGhlIGNvbXBsZXRpb24gc2NoZWR1bGVyIGJ5IGRlZmF1bHQgd2hlbiBybV93b3JrIGlzIGFjdGl2ZQorIyB0byB0cnkgYW5kIHJlZHVjZSBkaXNrIHVzYWdlCitCQl9TQ0hFRFVMRVIgPz0gImNvbXBsZXRpb24iCisKK1JNV09SS19PUklHX1RBU0sgOj0gIiR7QkJfREVGQVVMVF9UQVNLfSIKK0JCX0RFRkFVTFRfVEFTSyA9ICJybV93b3JrX2FsbCIKKworZG9fcm1fd29yayAoKSB7CisgICAgIyBJZiB0aGUgcmVjaXBlIG5hbWUgaXMgaW4gdGhlIFJNX1dPUktfRVhDTFVERSwgc2tpcCB0aGUgcmVjaXBlLgorICAgIGZvciBwIGluICR7Uk1fV09SS19FWENMVURFfTsgZG8KKyAgICAgICAgaWYgWyAiJHAiID0gIiR7UE59IiBdOyB0aGVuCisgICAgICAgICAgICBiYm5vdGUgInJtX3dvcms6IFNraXBwaW5nICR7UE59IHNpbmNlIGl0IGlzIGluIFJNX1dPUktfRVhDTFVERSIKKyAgICAgICAgICAgIGV4aXQgMAorICAgICAgICBmaQorICAgIGRvbmUKKworICAgIGNkICR7V09SS0RJUn0KKyAgICBmb3IgZGlyIGluICoKKyAgICBkbworICAgICAgICAjIFJldGFpbiBvbmx5IGxvZ3MgYW5kIG90aGVyIGZpbGVzIGluIHRlbXAsIHNhZmVseSBpZ25vcmUKKyAgICAgICAgIyBmYWlsdXJlcyBvZiByZW1vdmluZyBwc2V1ZG8gZm9sZXJzIG9uIE5GUzIvMyBzZXJ2ZXIuCisgICAgICAgIGlmIFsgJGRpciA9ICdwc2V1ZG8nIF07IHRoZW4KKyAgICAgICAgICAgIHJtIC1yZiAkZGlyIDI+IC9kZXYvbnVsbCB8fCB0cnVlCisgICAgICAgIGVsaWYgWyAkZGlyICE9ICd0ZW1wJyBdOyB0aGVuCisgICAgICAgICAgICBybSAtcmYgJGRpcgorICAgICAgICBmaQorICAgIGRvbmUKKworICAgICMgTmVlZCB0byBhZGQgcHNldWRvIGJhY2sgb3Igc3Vic3FldWVudCB3b3JrIGluIHRoaXMgd29ya2RpcgorICAgICMgbWlnaHQgZmFpbCBzaW5jZSBzZXRzY2VuZSBtYXkgbm90IHJlcnVuIHRvIHJlY3JlYXRlIGl0CisgICAgbWtkaXIgLXAgJHtXT1JLRElSfS9wc2V1ZG8vCisKKyAgICAjIENoYW5nZSBub3JtYWwgc3RhbXBzIGludG8gc2V0c2NlbmUgc3RhbXBzIGFzIHRoZXkgYmV0dGVyIHJlZmxlY3QgdGhlCisgICAgIyBmYWN0IFdPUktESVIgaXMgbm93IGVtcHR5CisgICAgIyBBbHNvIGxlYXZlIG5vZXhlYyBzdGFtcHMgc2luY2Ugc2V0c2NlbmUgc3RhbXBzIGRvbid0IGNvdmVyIHRoZW0KKyAgICBjZCBgZGlybmFtZSAke1NUQU1QfWAKKyAgICBmb3IgaSBpbiBgYmFzZW5hbWUgJHtTVEFNUH1gKgorICAgIGRvCisgICAgICAgIGZvciBqIGluICR7U1NUQVRFVEFTS1N9IGRvX3NoYXJlZF93b3JrZGlyCisgICAgICAgIGRvCisgICAgICAgICAgICBjYXNlICRpIGluCisgICAgICAgICAgICAqZG9fc2V0c2NlbmUqKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICpzaWdkYXRhKikKKyAgICAgICAgICAgICAgICBpPWR1bW15CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKmRvX3BhY2thZ2Vfd3JpdGUqKQorICAgICAgICAgICAgICAgIGk9ZHVtbXkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqZG9fYnVpbGQqKQorICAgICAgICAgICAgICAgIGk9ZHVtbXkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAjIFdlIHJlbW92ZSBkb19wYWNrYWdlIGVudGlyZWx5LCBpbmNsdWRpbmcgYW55CisgICAgICAgICAgICAjIHNzdGF0ZSB2ZXJzaW9uIHNpbmNlIG90aGVyd2lzZSB3ZSdkIG5lZWQgdG8gbGVhdmUgJ3BsYWluZGlycycgYXJvdW5kCisgICAgICAgICAgICAjIHN1Y2ggYXMgJ3BhY2thZ2VzJyBhbmQgJ3BhY2thZ2VzLXNwbGl0JyBhbmQgdGhlc2UgY2FuIGJlIGxhcmdlLiBObyBlbmQKKyAgICAgICAgICAgICMgb2YgY2hhaW4gdGFza3MgZGVwZW5kIGRpcmVjdGx5IG9uIGRvX3BhY2thZ2UgYW55bW9yZS4KKyAgICAgICAgICAgICpkb19wYWNrYWdlfCpkb19wYWNrYWdlLip8KmRvX3BhY2thZ2Vfc2V0c2NlbmUuKikKKyAgICAgICAgICAgICAgICBybSAtZiAkaTsKKyAgICAgICAgICAgICAgICBpPWR1bW15CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKl9zZXRzY2VuZSopCisgICAgICAgICAgICAgICAgaT1kdW1teQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICokanwqJGouKikKKyAgICAgICAgICAgICAgICBtdiAkaSBgZWNobyAkaSB8IHNlZCAtZSAicyMke2p9IyR7an1fc2V0c2NlbmUjImAKKyAgICAgICAgICAgICAgICBpPWR1bW15CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgIGRvbmUKKyAgICAgICAgcm0gLWYgJGkKKyAgICBkb25lCit9CithZGR0YXNrIHJtX3dvcmsgYWZ0ZXIgZG9fJHtSTVdPUktfT1JJR19UQVNLfQorCitkb19ybV93b3JrX2FsbCAoKSB7CisgICAgOgorfQorZG9fcm1fd29ya19hbGxbcmVjcmRlcHRhc2tdID0gImRvX3JtX3dvcmsiCithZGR0YXNrIHJtX3dvcmtfYWxsIGFmdGVyIGRvX3JtX3dvcmsKKworZG9fcG9wdWxhdGVfc2RrW3Bvc3RmdW5jc10gKz0gInJtX3dvcmtfcG9wdWxhdGVzZGsiCitybV93b3JrX3BvcHVsYXRlc2RrICgpIHsKKyAgICA6Cit9CitybV93b3JrX3BvcHVsYXRlc2RrW2NsZWFuZGlyc10gPSAiJHtXT1JLRElSfS9zZGsiCisKK2RvX3Jvb3Rmc1twb3N0ZnVuY3NdICs9ICJybV93b3JrX3Jvb3RmcyIKK3JtX3dvcmtfcm9vdGZzICgpIHsKKyAgICA6Cit9CitybV93b3JrX3Jvb3Rmc1tjbGVhbmRpcnNdID0gIiR7V09SS0RJUn0vcm9vdGZzIgorCitweXRob24gKCkgeworICAgICMgSWYgdGhlIHJlY2lwZSBuYW1lIGlzIGluIHRoZSBSTV9XT1JLX0VYQ0xVREUsIHNraXAgdGhlIHJlY2lwZS4KKyAgICBleGNsdWRlcyA9IChkLmdldFZhcigiUk1fV09SS19FWENMVURFIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgaWYgcG4gaW4gZXhjbHVkZXM6CisgICAgICAgIGQuZGVsVmFyRmxhZygncm1fd29ya19yb290ZnMnLCAnY2xlYW5kaXJzJykKKyAgICAgICAgZC5kZWxWYXJGbGFnKCdybV93b3JrX3BvcHVsYXRlc2RrJywgJ2NsZWFuZGlycycpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNfZGViLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNfZGViLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxYjQ1OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Jvb3Rmc19kZWIuYmJjbGFzcwpAQCAtMCwwICsxLDM5IEBACisjCisjIENvcHlyaWdodCAyMDA2LTIwMDcgT3BlbmVkaGFuZCBMdGQuCisjCisKK1JPT1RGU19QS0dNQU5BR0UgPSAiZHBrZyBhcHQiCitST09URlNfUEtHTUFOQUdFX0JPT1RTVFJBUCAgPSAicnVuLXBvc3RpbnN0cyIKKworZG9fcm9vdGZzW2RlcGVuZHNdICs9ICJkcGtnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IGFwdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX3BvcHVsYXRlX3Nka1tkZXBlbmRzXSArPSAiZHBrZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBhcHQtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgYnppcDItbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitkb19yb290ZnNbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlX3dyaXRlX2RlYiIKK3Jvb3Rmc19kZWJfZG9fcm9vdGZzW3ZhcmRlcHNleGNsdWRlXSArPSAiQlVJTEROQU1FIgorZG9fcm9vdGZzW3ZhcmRlcHNdICs9ICJQQUNLQUdFX0ZFRURfVVJJUyIKKworZG9fcm9vdGZzW2xvY2tmaWxlc10gKz0gIiR7REVQTE9ZX0RJUl9ERUJ9L2RlYi5sb2NrIgorZG9fcG9wdWxhdGVfc2RrW2xvY2tmaWxlc10gKz0gIiR7REVQTE9ZX0RJUl9ERUJ9L2RlYi5sb2NrIgorCitweXRob24gcm9vdGZzX2RlYl9iYWRfcmVjb21tZW5kYXRpb25zKCkgeworICAgIGlmIGQuZ2V0VmFyKCJCQURfUkVDT01NRU5EQVRJT05TIiwgVHJ1ZSk6CisgICAgICAgIGJiLndhcm4oIkRlYmlhbiBwYWNrYWdlIGluc3RhbGwgZG9lcyBub3Qgc3VwcG9ydCBCQURfUkVDT01NRU5EQVRJT05TIikKK30KK2RvX3Jvb3Rmc1twcmVmdW5jc10gKz0gInJvb3Rmc19kZWJfYmFkX3JlY29tbWVuZGF0aW9ucyIKKworREVCX1BPU1RQUk9DRVNTX0NPTU1BTkRTID0gIiIKKworb3BrZ2xpYmRpciA9ICIke2xvY2Fsc3RhdGVkaXJ9L2xpYi9vcGtnIgorCitweXRob24gKCkgeworICAgICMgTWFwIFRBUkdFVF9BUkNIIHRvIERlYmlhbidzIGlkZWFzIGFib3V0IGFyY2hpdGVjdHVyZXMKKyAgICBkYXJjaCA9IGQuZ2V0VmFyKCdTREtfQVJDSCcsIFRydWUpCisgICAgaWYgZGFyY2ggaW4gWyJ4ODYiLCAiaTQ4NiIsICJpNTg2IiwgImk2ODYiLCAicGVudGl1bSJdOgorICAgICAgICAgZC5zZXRWYXIoJ0RFQl9TREtfQVJDSCcsICdpMzg2JykKKyAgICBlbGlmIGRhcmNoID09ICJ4ODZfNjQiOgorICAgICAgICAgZC5zZXRWYXIoJ0RFQl9TREtfQVJDSCcsICdhbWQ2NCcpCisgICAgZWxpZiBkYXJjaCA9PSAiYXJtIjoKKyAgICAgICAgIGQuc2V0VmFyKCdERUJfU0RLX0FSQ0gnLCAnYXJtZWwnKQorfQorCisjIFRoaXMgd2lsbCBvZiBjb3Vyc2Ugb25seSB3b3JrIGFmdGVyIHJvb3Rmc19kZWJfZG9fcm9vdGZzIG9yIHBvcHVsYXRlX3Nka19kZWIgaGFzIGJlZW4gY2FsbGVkCitEUEtHX1FVRVJZX0NPTU1BTkQgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2Rwa2ctcXVlcnkgLS1hZG1pbmRpcj0kSU5TVEFMTF9ST09URlNfREVCL3Zhci9saWIvZHBrZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Jvb3Rmc19pcGsuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Jvb3Rmc19pcGsuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDE0NGU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcm9vdGZzX2lway5iYmNsYXNzCkBAIC0wLDAgKzEsMzkgQEAKKyMKKyMgQ3JlYXRlcyBhIHJvb3QgZmlsZXN5c3RlbSBvdXQgb2YgSVBLcworIworIyBUaGlzIHJvb3RmcyBjYW4gYmUgbW91bnRlZCB2aWEgcm9vdC1uZnMgb3IgaXQgY2FuIGJlIHB1dCBpbnRvIGFuIGNyYW1mcy9qZmZzIGV0Yy4KKyMgU2VlIGltYWdlLmJiY2xhc3MgZm9yIGEgdXNhZ2Ugb2YgdGhpcy4KKyMKKworRVhUUkFPUEtHQ09ORklHID89ICIiCitST09URlNfUEtHTUFOQUdFID0gIm9wa2cgJHtFWFRSQU9QS0dDT05GSUd9IgorUk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVAgID0gInJ1bi1wb3N0aW5zdHMiCisKK2RvX3Jvb3Rmc1tkZXBlbmRzXSArPSAib3BrZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBvcGtnLXV0aWxzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9fcG9wdWxhdGVfc2RrW2RlcGVuZHNdICs9ICJvcGtnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IG9wa2ctdXRpbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitkb19yb290ZnNbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlX3dyaXRlX2lwayIKK2RvX3Jvb3Rmc1t2YXJkZXBzXSArPSAiUEFDS0FHRV9GRUVEX1VSSVMiCityb290ZnNfaXBrX2RvX3Jvb3Rmc1t2YXJkZXBzZXhjbHVkZV0gKz0gIkJVSUxETkFNRSIKKworZG9fcm9vdGZzW2xvY2tmaWxlc10gKz0gIiR7V09SS0RJUn0vaXBrLmxvY2siCitkb19wb3B1bGF0ZV9zZGtbbG9ja2ZpbGVzXSArPSAiJHtXT1JLRElSfS9pcGsubG9jayIKKworT1BLR19QUkVQUk9DRVNTX0NPTU1BTkRTID0gIiIKKworT1BLR19QT1NUUFJPQ0VTU19DT01NQU5EUyA9ICIiCisKK09QS0dMSUJESVIgPSAiJHtsb2NhbHN0YXRlZGlyfS9saWIiCisKK01VTFRJTElCUkVfQUxMT1dfUkVQID0gIiR7T1BLR0xJQkRJUn0vb3BrZ3wvdXNyL2xpYi9vcGtnIgorCitweXRob24gKCkgeworCisgICAgaWYgZC5nZXRWYXIoJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywgVHJ1ZSk6CisgICAgICAgIGZsYWdzID0gZC5nZXRWYXJGbGFnKCdkb19yb290ZnMnLCAncmVjcmRlcHRhc2snKQorICAgICAgICBmbGFncyA9IGZsYWdzLnJlcGxhY2UoImRvX3BhY2thZ2Vfd3JpdGVfaXBrIiwgIiIpCisgICAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgiZG9fZGVwbG95IiwgIiIpCisgICAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgiZG9fcG9wdWxhdGVfc3lzcm9vdCIsICIiKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3Jvb3RmcycsICdyZWNyZGVwdGFzaycsIGZsYWdzKQorICAgICAgICBkLnNldFZhcignT1BLR19QUkVQUk9DRVNTX0NPTU1BTkRTJywgIiIpCisgICAgICAgIGQuc2V0VmFyKCdPUEtHX1BPU1RQUk9DRVNTX0NPTU1BTkRTJywgJycpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNfcnBtLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNfcnBtLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg1ZDAwMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Jvb3Rmc19ycG0uYmJjbGFzcwpAQCAtMCwwICsxLDQ3IEBACisjCisjIENyZWF0ZXMgYSByb290IGZpbGVzeXN0ZW0gb3V0IG9mIHJwbSBwYWNrYWdlcworIworCitST09URlNfUEtHTUFOQUdFID0gInJwbSBzbWFydHBtIgorUk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVAgPSAicnVuLXBvc3RpbnN0cyIKKworIyBBZGQgNTBNZWcgb2YgZXh0cmEgc3BhY2UgZm9yIFNtYXJ0CitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0VfYXBwZW5kID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJQQUNLQUdFX0lOU1RBTEwiLCAic21hcnRwbSIsICIgKyA1MTIwMCIsICIiICxkKX0iCisKKyMgU21hcnQgaXMgcHl0aG9uIGJhc2VkLCBzbyBiZSBzdXJlIHB5dGhvbi1uYXRpdmUgaXMgYXZhaWxhYmxlIHRvIHVzLgorRVhUUkFOQVRJVkVQQVRIICs9ICJweXRob24tbmF0aXZlIgorCisjIG9wa2cgaXMgbmVlZGVkIGZvciB1cGRhdGUtYWx0ZXJuYXRpdmVzCitSUE1ST09URlNERVBFTkRTID0gInJwbS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgcnBtcmVzb2x2ZS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgcHl0aG9uLXNtYXJ0cG0tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgIGNyZWF0ZXJlcG8tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgIG9wa2ctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK2RvX3Jvb3Rmc1tkZXBlbmRzXSArPSAiJHtSUE1ST09URlNERVBFTkRTfSIKK2RvX3BvcHVsYXRlX3Nka1tkZXBlbmRzXSArPSAiJHtSUE1ST09URlNERVBFTkRTfSIKKworZG9fcm9vdGZzW3JlY3JkZXB0YXNrXSArPSAiZG9fcGFja2FnZV93cml0ZV9ycG0iCityb290ZnNfcnBtX2RvX3Jvb3Rmc1t2YXJkZXBzZXhjbHVkZV0gKz0gIkJVSUxETkFNRSIKK2RvX3Jvb3Rmc1t2YXJkZXBzXSArPSAiUEFDS0FHRV9GRUVEX1VSSVMiCisKKyMgUlBNIGRvZXNuJ3Qgd29yayB3aXRoIG11bHRpcGxlIHJvb3RmcyBnZW5lcmF0aW9uIGF0IG9uY2UgZHVlIHRvIGNvbGxpc2lvbnMgaW4gdGhlIHVzZSBvZiBmaWxlcyAKKyMgaW4gJHtERVBMT1lfRElSX1JQTX0uIFRoaXMgY2FuIGJlIHJlbW92ZWQgaWYgcGFja2FnZV91cGRhdGVfaW5kZXhfcnBtIGNhbiBiZSBjYWxsZWQgY29uY3VycmVudGx5Citkb19yb290ZnNbbG9ja2ZpbGVzXSArPSAiJHtERVBMT1lfRElSX1JQTX0vcnBtLmxvY2siCitkb19wb3B1bGF0ZV9zZGtbbG9ja2ZpbGVzXSArPSAiJHtERVBMT1lfRElSX1JQTX0vcnBtLmxvY2siCisKK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywgVHJ1ZSk6CisgICAgICAgIGZsYWdzID0gZC5nZXRWYXJGbGFnKCdkb19yb290ZnMnLCAncmVjcmRlcHRhc2snKQorICAgICAgICBmbGFncyA9IGZsYWdzLnJlcGxhY2UoImRvX3BhY2thZ2Vfd3JpdGVfcnBtIiwgIiIpCisgICAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgiZG9fZGVwbG95IiwgIiIpCisgICAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgiZG9fcG9wdWxhdGVfc3lzcm9vdCIsICIiKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3Jvb3RmcycsICdyZWNyZGVwdGFzaycsIGZsYWdzKQorICAgICAgICBkLnNldFZhcignUlBNX1BSRVBST0NFU1NfQ09NTUFORFMnLCAnJykKKyAgICAgICAgZC5zZXRWYXIoJ1JQTV9QT1NUUFJPQ0VTU19DT01NQU5EUycsICcnKQorCit9CisjIFNtYXJ0IGlzIHB5dGhvbiBiYXNlZCwgc28gYmUgc3VyZSBweXRob24tbmF0aXZlIGlzIGF2YWlsYWJsZSB0byB1cy4KK0VYVFJBTkFUSVZFUEFUSCArPSAicHl0aG9uLW5hdGl2ZSIKKworcnBtbGliZGlyID0gIi92YXIvbGliL3JwbSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Jvb3Rmc2RlYnVnZmlsZXMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Jvb3Rmc2RlYnVnZmlsZXMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTU4ODcxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcm9vdGZzZGVidWdmaWxlcy5iYmNsYXNzCkBAIC0wLDAgKzEsMzYgQEAKKyMgVGhpcyBjbGFzcyBpbnN0YWxscyBhZGRpdGlvbmFsIGZpbGVzIGZvdW5kIG9uIHRoZSBidWlsZCBob3N0CisjIGRpcmVjdGx5IGludG8gdGhlIHJvb3Rmcy4KKyMKKyMgT25lIHVzZSBjYXNlIGlzIHRvIGluc3RhbGwgYSBjb25zdGFudCBzc2ggaG9zdCBrZXkgaW4KKyMgYW4gaW1hZ2UgdGhhdCBnZXRzIGNyZWF0ZWQgZm9yIGp1c3Qgb25lIG1hY2hpbmUuIFRoaXMKKyMgc29sdmVzIHR3byBpc3N1ZXM6CisjIC0gaG9zdCBrZXkgZ2VuZXJhdGlvbiBvbiB0aGUgZGV2aWNlIGNhbiBzdGFsbCB3aGVuIHRoZQorIyAgIGtlcm5lbCBoYXMgbm90IGdhdGhlcmVkIGVub3VnaCBlbnRyb3B5IHlldCAoc2VlbiBpbiBwcmFjdGljZQorIyAgIHVuZGVyIHFlbXUpCisjIC0gc3NoIGNvbXBsYWlucyBieSBkZWZhdWx0IHdoZW4gdGhlIGhvc3Qga2V5IGNoYW5nZXMKKyMKKyMgRm9yIGRyb3BiZWFyLCB3aXRoIHRoZSBzc2ggaG9zdCBrZXkgc3RvcmUgYWxvbmcgc2lkZSB0aGUgbG9jYWwuY29uZjoKKyMgMS4gRXh0ZW5kIGxvY2FsLmNvbmY6CisjICAgIElOSEVSSVQgKz0gInJvb3Rmc2RlYnVnZmlsZXMiCisjICAgIFJPT1RGU19ERUJVR19GSUxFUyArPSAiJHtUT1BESVJ9L2NvbmYvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5ICR7SU1BR0VfUk9PVEZTfS9ldGMvZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5IDsiCisjIDIuIEJvb3QgdGhlIGltYWdlIG9uY2UsIGNvcHkgdGhlIGRyb3BiZWFyX3JzYV9ob3N0X2tleSBmcm9tCisjICAgIHRoZSBkZXZpY2UgaW50byB5b3VyIGJ1aWxkIGNvbmYgZGlyZWN0b3J5LgorIworIyBEbyBub3QgdXNlIGZvciBwcm9kdWN0aW9uIGltYWdlcyEgSXQgYnlwYXNzZXMgc2V2ZXJhbAorIyBjb3JlIGJ1aWxkIG1lY2hhbmlzbXMgKHVwZGF0aW5nIHRoZSBpbWFnZSB3aGVuIG9uZQorIyBvZiB0aGUgZmlsZXMgY2hhbmdlcywgbGljZW5zZSB0cmFja2luZyBpbiB0aGUgaW1hZ2UKKyMgbWFuaWZlc3QsIC4uLikuCisKK1JPT1RGU19ERUJVR19GSUxFUyA/PSAiIgorUk9PVEZTX0RFQlVHX0ZJTEVTW2RvY10gPSAiTGlzdHMgYWRkaXRpb25hbCBmaWxlcyBvciBkaXJlY3RvcmllcyB0byBiZSBpbnN0YWxsZWQgd2l0aCAnY3AgLWEnIGluIHRoZSBmb3JtYXQgJ3NvdXJjZTEgdGFyZ2V0MTtzb3VyY2UyIHRhcmdldDI7Li4uJyIKKworUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gInJvb3Rmc19kZWJ1Z19maWxlcyA7Igorcm9vdGZzX2RlYnVnX2ZpbGVzICgpIHsKKyAgICMhL2Jpbi9zaCAtZQorICAgZWNobyAiJHtST09URlNfREVCVUdfRklMRVN9IiB8IHNlZCAtZSAncy87L1xuL2cnIHwgd2hpbGUgcmVhZCBzb3VyY2UgdGFyZ2V0OyBkbworICAgICAgaWYgWyAtZSAiJHNvdXJjZSIgXTsgdGhlbgorICAgICAgICAgbWtkaXIgLXAgJChkaXJuYW1lICR0YXJnZXQpCisgICAgICAgICBjcCAtYSAkc291cmNlICR0YXJnZXQKKyAgICAgIGZpCisgICBkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zYW5pdHkuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Nhbml0eS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYjc0NGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zYW5pdHkuYmJjbGFzcwpAQCAtMCwwICsxLDk0NSBAQAorIworIyBTYW5pdHkgY2hlY2sgdGhlIHVzZXJzIHNldHVwIGZvciBjb21tb24gbWlzY29uZmlndXJhdGlvbnMKKyMKKworU0FOSVRZX1JFUVVJUkVEX1VUSUxJVElFUyA/PSAicGF0Y2ggZGlmZnN0YXQgbWFrZWluZm8gZ2l0IGJ6aXAyIHRhciBcCisgICAgZ3ppcCBnYXdrIGNocnBhdGggd2dldCBjcGlvIHBlcmwiCisKK2RlZiBiYmxheWVyc19jb25mX2ZpbGUoZCk6CisgICAgcmV0dXJuIG9zLnBhdGguam9pbihkLmdldFZhcignVE9QRElSJywgVHJ1ZSksICdjb25mL2JibGF5ZXJzLmNvbmYnKQorCitkZWYgc2FuaXR5X2NvbmZfcmVhZChmbik6CisgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgIHJldHVybiBsaW5lcworCitkZWYgc2FuaXR5X2NvbmZfZmluZF9saW5lKHBhdHRlcm4sIGxpbmVzKToKKyAgICBpbXBvcnQgcmUKKyAgICByZXR1cm4gbmV4dCgoKGluZGV4LCBsaW5lKQorICAgICAgICBmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzKQorICAgICAgICBpZiByZS5zZWFyY2gocGF0dGVybiwgbGluZSkpLCAoTm9uZSwgTm9uZSkpCisKK2RlZiBzYW5pdHlfY29uZl91cGRhdGUoZm4sIGxpbmVzLCB2ZXJzaW9uX3Zhcl9uYW1lLCBuZXdfdmVyc2lvbik6CisgICAgaW5kZXgsIGxpbmUgPSBzYW5pdHlfY29uZl9maW5kX2xpbmUodmVyc2lvbl92YXJfbmFtZSwgbGluZXMpCisgICAgbGluZXNbaW5kZXhdID0gJyVzID0gIiVkIlxuJyAlICh2ZXJzaW9uX3Zhcl9uYW1lLCBuZXdfdmVyc2lvbikKKyAgICB3aXRoIG9wZW4oZm4sICJ3IikgYXMgZjoKKyAgICAgICAgZi53cml0ZSgnJy5qb2luKGxpbmVzKSkKKworIyBGdW5jdGlvbnMgYWRkZWQgdG8gdGhpcyB2YXJpYWJsZSBNVVNUIHRocm93IGFuIGV4Y2VwdGlvbiAob3Igc3lzLmV4aXQoKSkgdW5sZXNzIHRoZXkKKyMgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgTENPTkZfVkVSU0lPTiBpbiBiYmxheWVycy5jb25mCitCQkxBWUVSU19DT05GX1VQREFURV9GVU5DUyArPSAib2Vjb3JlX3VwZGF0ZV9iYmxheWVycyIKKworcHl0aG9uIG9lY29yZV91cGRhdGVfYmJsYXllcnMoKSB7CisgICAgIyBiYmxheWVycy5jb25mIGlzIG91dCBvZiBkYXRlLCBzbyBzZWUgaWYgd2UgY2FuIHJlc29sdmUgdGhhdAorCisgICAgY3VycmVudF9sY29uZiA9IGludChkLmdldFZhcignTENPTkZfVkVSU0lPTicsIFRydWUpKQorICAgIGlmIG5vdCBjdXJyZW50X2xjb25mOgorICAgICAgICBzeXMuZXhpdCgpCisgICAgbGNvbmZfdmVyc2lvbiA9IGludChkLmdldFZhcignTEFZRVJfQ09ORl9WRVJTSU9OJywgVHJ1ZSkpCisgICAgbGluZXMgPSBbXQorCisgICAgaWYgY3VycmVudF9sY29uZiA8IDQ6CisgICAgICAgIHN5cy5leGl0KCkKKworICAgIGJibGF5ZXJzX2ZuID0gYmJsYXllcnNfY29uZl9maWxlKGQpCisgICAgbGluZXMgPSBzYW5pdHlfY29uZl9yZWFkKGJibGF5ZXJzX2ZuKQorCisgICAgaWYgY3VycmVudF9sY29uZiA9PSA0IGFuZCBsY29uZl92ZXJzaW9uID4gNDoKKyAgICAgICAgdG9wZGlyX3ZhciA9ICckJyArICd7VE9QRElSfScKKyAgICAgICAgaW5kZXgsIGJicGF0aF9saW5lID0gc2FuaXR5X2NvbmZfZmluZF9saW5lKCdCQlBBVEgnLCBsaW5lcykKKyAgICAgICAgaWYgYmJwYXRoX2xpbmU6CisgICAgICAgICAgICBzdGFydCA9IGJicGF0aF9saW5lLmZpbmQoJyInKQorICAgICAgICAgICAgaWYgc3RhcnQgIT0gLTEgYW5kIChsZW4oYmJwYXRoX2xpbmUpICE9IChzdGFydCArIDEpKToKKyAgICAgICAgICAgICAgICBpZiBiYnBhdGhfbGluZVtzdGFydCArIDFdID09ICciJzoKKyAgICAgICAgICAgICAgICAgICAgbGluZXNbaW5kZXhdID0gKGJicGF0aF9saW5lWzpzdGFydCArIDFdICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcGRpcl92YXIgKyBiYnBhdGhfbGluZVtzdGFydCArIDE6XSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgdG9wZGlyX3ZhciBpbiBiYnBhdGhfbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzW2luZGV4XSA9IChiYnBhdGhfbGluZVs6c3RhcnQgKyAxXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BkaXJfdmFyICsgJzonICsgYmJwYXRoX2xpbmVbc3RhcnQgKyAxOl0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN5cy5leGl0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGluZGV4LCBiYmZpbGVzX2xpbmUgPSBzYW5pdHlfY29uZl9maW5kX2xpbmUoJ0JCRklMRVMnLCBsaW5lcykKKyAgICAgICAgICAgIGlmIGJiZmlsZXNfbGluZToKKyAgICAgICAgICAgICAgICBsaW5lcy5pbnNlcnQoaW5kZXgsICdCQlBBVEggPSAiJyArIHRvcGRpcl92YXIgKyAnIlxuJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoKQorCisgICAgICAgIGN1cnJlbnRfbGNvbmYgKz0gMQorICAgICAgICBzYW5pdHlfY29uZl91cGRhdGUoYmJsYXllcnNfZm4sIGxpbmVzLCAnTENPTkZfVkVSU0lPTicsIGN1cnJlbnRfbGNvbmYpCisgICAgICAgIHJldHVybgorCisgICAgZWxpZiBjdXJyZW50X2xjb25mID09IDUgYW5kIGxjb25mX3ZlcnNpb24gPiA1OgorICAgICAgICAjIE51bGwgdXBkYXRlLCB0byBhdm9pZCBpc3N1ZXMgd2l0aCBwZW9wbGUgc3dpdGNoaW5nIGJldHdlZW4gcG9reSBhbmQgb3RoZXIgZGlzdHJvcworICAgICAgICBjdXJyZW50X2xjb25mID0gNgorICAgICAgICBzYW5pdHlfY29uZl91cGRhdGUoYmJsYXllcnNfZm4sIGxpbmVzLCAnTENPTkZfVkVSU0lPTicsIGN1cnJlbnRfbGNvbmYpCisgICAgICAgIHJldHVybgorCisgICAgc3lzLmV4aXQoKQorfQorCitkZWYgcmFpc2Vfc2FuaXR5X2Vycm9yKG1zZywgZCwgbmV0d29ya19lcnJvcj1GYWxzZSk6CisgICAgaWYgZC5nZXRWYXIoIlNBTklUWV9VU0VfRVZFTlRTIiwgVHJ1ZSkgPT0gIjEiOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlNhbml0eUNoZWNrRmFpbGVkKG1zZywgbmV0d29ya19lcnJvciksIGQpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlNhbml0eUNoZWNrRmFpbGVkKG1zZyksIGQpCisgICAgICAgIHJldHVybgorCisgICAgYmIuZmF0YWwoIiIiIE9FLWNvcmUncyBjb25maWcgc2FuaXR5IGNoZWNrZXIgZGV0ZWN0ZWQgYSBwb3RlbnRpYWwgbWlzY29uZmlndXJhdGlvbi4KKyAgICBFaXRoZXIgZml4IHRoZSBjYXVzZSBvZiB0aGlzIGVycm9yIG9yIGF0IHlvdXIgb3duIHJpc2sgZGlzYWJsZSB0aGUgY2hlY2tlciAoc2VlIHNhbml0eS5jb25mKS4KKyAgICBGb2xsb3dpbmcgaXMgdGhlIGxpc3Qgb2YgcG90ZW50aWFsIHByb2JsZW1zIC8gYWR2aXNvcmllczoKKyAgICAKKyAgICAlcyIiIiAlIG1zZykKKworIyBDaGVjayBmbGFncyBhc3NvY2lhdGVkIHdpdGggYSB0dW5pbmcuCitkZWYgY2hlY2tfdG9vbGNoYWluX3R1bmVfYXJncyhkYXRhLCB0dW5lLCBtdWx0aWxpYiwgZXJycyk6CisgICAgZm91bmRfZXJyb3JzID0gRmFsc2UKKyAgICBpZiBjaGVja190b29sY2hhaW5fYXJnc19wcmVzZW50KGRhdGEsIHR1bmUsIG11bHRpbGliLCBlcnJzLCAnQ0NBUkdTJyk6CisgICAgICAgIGZvdW5kX2Vycm9ycyA9IFRydWUKKyAgICBpZiBjaGVja190b29sY2hhaW5fYXJnc19wcmVzZW50KGRhdGEsIHR1bmUsIG11bHRpbGliLCBlcnJzLCAnQVNBUkdTJyk6CisgICAgICAgIGZvdW5kX2Vycm9ycyA9IFRydWUKKyAgICBpZiBjaGVja190b29sY2hhaW5fYXJnc19wcmVzZW50KGRhdGEsIHR1bmUsIG11bHRpbGliLCBlcnJzLCAnTERBUkdTJyk6CisgICAgICAgIGZvdW5kX2Vycm9ycyA9IFRydWUKKworICAgIHJldHVybiBmb3VuZF9lcnJvcnMKKworZGVmIGNoZWNrX3Rvb2xjaGFpbl9hcmdzX3ByZXNlbnQoZGF0YSwgdHVuZSwgbXVsdGlsaWIsIHR1bmVfZXJyb3JzLCB3aGljaCk6CisgICAgYXJnc19zZXQgPSAoZGF0YS5nZXRWYXIoIlRVTkVfJXMiICUgd2hpY2gsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgYXJnc193YW50ZWQgPSAoZGF0YS5nZXRWYXIoIlRVTkVBQklfUkVRVUlSRURfJXNfdHVuZS0lcyIgJSAod2hpY2gsIHR1bmUpLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGFyZ3NfbWlzc2luZyA9IFtdCisKKyAgICAjIElmIG5vIGFyZ3MgYXJlIGxpc3RlZC9yZXF1aXJlZCwgd2UgYXJlIGRvbmUuCisgICAgaWYgbm90IGFyZ3Nfd2FudGVkOgorICAgICAgICByZXR1cm4KKyAgICBmb3IgYXJnIGluIGFyZ3Nfd2FudGVkOgorICAgICAgICBpZiBhcmcgbm90IGluIGFyZ3Nfc2V0OgorICAgICAgICAgICAgYXJnc19taXNzaW5nLmFwcGVuZChhcmcpCisKKyAgICBmb3VuZF9lcnJvcnMgPSBGYWxzZQorICAgIGlmIGFyZ3NfbWlzc2luZzoKKyAgICAgICAgZm91bmRfZXJyb3JzID0gVHJ1ZQorICAgICAgICB0dW5lX2Vycm9ycy5hcHBlbmQoIlRVTkVBQkkgZm9yICVzIHJlcXVpcmVzICclcycgaW4gVFVORV8lcyAoJXMpLiIgJQorICAgICAgICAgICAgICAgICAgICAgICAodHVuZSwgJyAnLmpvaW4oYXJnc19taXNzaW5nKSwgd2hpY2gsICcgJy5qb2luKGFyZ3Nfc2V0KSkpCisgICAgcmV0dXJuIGZvdW5kX2Vycm9ycworCisjIENoZWNrIGEgc2luZ2xlIHR1bmUgZm9yIHZhbGlkaXR5LgorZGVmIGNoZWNrX3Rvb2xjaGFpbl90dW5lKGRhdGEsIHR1bmUsIG11bHRpbGliKToKKyAgICB0dW5lX2Vycm9ycyA9IFtdCisgICAgaWYgbm90IHR1bmU6CisgICAgICAgIHJldHVybiAiTm8gdHVuaW5nIGZvdW5kIGZvciAlcyBtdWx0aWxpYi4iICUgbXVsdGlsaWIKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZGF0YSkKKyAgICBpZiBtdWx0aWxpYiAhPSAiZGVmYXVsdCI6CisgICAgICAgICMgQXBwbHkgdGhlIG92ZXJyaWRlcyBzbyB3ZSBjYW4gbG9vayBhdCB0aGUgZGV0YWlscy4KKyAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIG11bHRpbGliCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIG92ZXJyaWRlcykKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICBiYi5kZWJ1ZygyLCAiU2FuaXR5LWNoZWNraW5nIHR1bmluZyAnJXMnICglcykgZmVhdHVyZXM6IiAlICh0dW5lLCBtdWx0aWxpYikpCisgICAgZmVhdHVyZXMgPSAobG9jYWxkYXRhLmdldFZhcigiVFVORV9GRUFUVVJFU190dW5lLSVzIiAlIHR1bmUsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbm90IGZlYXR1cmVzOgorICAgICAgICByZXR1cm4gIlR1bmluZyAnJXMnIGhhcyBubyBkZWZpbmVkIGZlYXR1cmVzLCBhbmQgY2Fubm90IGJlIHVzZWQuIiAlIHR1bmUKKyAgICB2YWxpZF90dW5lcyA9IGxvY2FsZGF0YS5nZXRWYXJGbGFncygnVFVORVZBTElEJykgb3Ige30KKyAgICBjb25mbGljdHMgPSBsb2NhbGRhdGEuZ2V0VmFyRmxhZ3MoJ1RVTkVDT05GTElDVFMnKSBvciB7fQorICAgICMgW2RvY10gaXMgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSB2YXJpYWJsZSwgbm90IGEgcmVhbCBmZWF0dXJlCisgICAgaWYgJ2RvYycgaW4gdmFsaWRfdHVuZXM6CisgICAgICAgIGRlbCB2YWxpZF90dW5lc1snZG9jJ10KKyAgICBpZiAnZG9jJyBpbiBjb25mbGljdHM6CisgICAgICAgIGRlbCBjb25mbGljdHNbJ2RvYyddCisgICAgZm9yIGZlYXR1cmUgaW4gZmVhdHVyZXM6CisgICAgICAgIGlmIGZlYXR1cmUgaW4gY29uZmxpY3RzOgorICAgICAgICAgICAgZm9yIGNvbmZsaWN0IGluIGNvbmZsaWN0c1tmZWF0dXJlXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGlmIGNvbmZsaWN0IGluIGZlYXR1cmVzOgorICAgICAgICAgICAgICAgICAgICB0dW5lX2Vycm9ycy5hcHBlbmQoIkZlYXR1cmUgJyVzJyBjb25mbGljdHMgd2l0aCAnJXMnLiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKGZlYXR1cmUsIGNvbmZsaWN0KSkKKyAgICAgICAgaWYgZmVhdHVyZSBpbiB2YWxpZF90dW5lczoKKyAgICAgICAgICAgIGJiLmRlYnVnKDIsICIgICVzOiAlcyIgJSAoZmVhdHVyZSwgdmFsaWRfdHVuZXNbZmVhdHVyZV0pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHVuZV9lcnJvcnMuYXBwZW5kKCJGZWF0dXJlICclcycgaXMgbm90IGRlZmluZWQuIiAlIGZlYXR1cmUpCisgICAgd2hpdGVsaXN0ID0gbG9jYWxkYXRhLmdldFZhcigiVFVORUFCSV9XSElURUxJU1QiLCBUcnVlKQorICAgIGlmIHdoaXRlbGlzdDoKKyAgICAgICAgdHVuZWFiaSA9IGxvY2FsZGF0YS5nZXRWYXIoIlRVTkVBQklfdHVuZS0lcyIgJSB0dW5lLCBUcnVlKQorICAgICAgICBpZiBub3QgdHVuZWFiaToKKyAgICAgICAgICAgIHR1bmVhYmkgPSB0dW5lCisgICAgICAgIGlmIFRydWUgbm90IGluIFt4IGluIHdoaXRlbGlzdC5zcGxpdCgpIGZvciB4IGluIHR1bmVhYmkuc3BsaXQoKV06CisgICAgICAgICAgICB0dW5lX2Vycm9ycy5hcHBlbmQoIlR1bmluZyAnJXMnICglcykgY2Fubm90IGJlIHVzZWQgd2l0aCBhbnkgc3VwcG9ydGVkIHR1bmluZy9BQkkuIiAlCisgICAgICAgICAgICAgICAgKHR1bmUsIHR1bmVhYmkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IGNoZWNrX3Rvb2xjaGFpbl90dW5lX2FyZ3MobG9jYWxkYXRhLCB0dW5lYWJpLCBtdWx0aWxpYiwgdHVuZV9lcnJvcnMpOgorICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICJTYW5pdHkgY2hlY2s6IENvbXBpbGVyIGFyZ3MgT0sgZm9yICVzLiIgJSB0dW5lKQorICAgIGlmIHR1bmVfZXJyb3JzOgorICAgICAgICByZXR1cm4gIlR1bmluZyAnJXMnIGhhcyB0aGUgZm9sbG93aW5nIGVycm9yczpcbiIgJSB0dW5lICsgJ1xuJy5qb2luKHR1bmVfZXJyb3JzKQorCitkZWYgY2hlY2tfdG9vbGNoYWluKGRhdGEpOgorICAgIHR1bmVfZXJyb3Jfc2V0ID0gW10KKyAgICBkZWZ0dW5lID0gZGF0YS5nZXRWYXIoIkRFRkFVTFRUVU5FIiwgVHJ1ZSkKKyAgICB0dW5lX2Vycm9ycyA9IGNoZWNrX3Rvb2xjaGFpbl90dW5lKGRhdGEsIGRlZnR1bmUsICdkZWZhdWx0JykKKyAgICBpZiB0dW5lX2Vycm9yczoKKyAgICAgICAgdHVuZV9lcnJvcl9zZXQuYXBwZW5kKHR1bmVfZXJyb3JzKQorCisgICAgbXVsdGlsaWJzID0gKGRhdGEuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgZ2xvYmFsX211bHRpbGlicyA9IChkYXRhLmdldFZhcigiTVVMVElMSUJfR0xPQkFMX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgIGlmIG11bHRpbGliczoKKyAgICAgICAgc2Vlbl9saWJzID0gW10KKyAgICAgICAgc2Vlbl90dW5lcyA9IFtdCisgICAgICAgIGZvciBsaWIgaW4gbXVsdGlsaWJzOgorICAgICAgICAgICAgaWYgbGliIGluIHNlZW5fbGliczoKKyAgICAgICAgICAgICAgICB0dW5lX2Vycm9yX3NldC5hcHBlbmQoIlRoZSBtdWx0aWxpYiAnJXMnIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UuIiAlIGxpYikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2Vlbl9saWJzLmFwcGVuZChsaWIpCisgICAgICAgICAgICBpZiBub3QgbGliIGluIGdsb2JhbF9tdWx0aWxpYnM6CisgICAgICAgICAgICAgICAgdHVuZV9lcnJvcl9zZXQuYXBwZW5kKCJNdWx0aWxpYiAlcyBpcyBub3QgcHJlc2VudCBpbiBNVUxUSUxJQl9HTE9CQUxfVkFSSUFOVFMiICUgbGliKQorICAgICAgICAgICAgdHVuZSA9IGRhdGEuZ2V0VmFyKCJERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItJXMiICUgbGliLCBUcnVlKQorICAgICAgICAgICAgaWYgdHVuZSBpbiBzZWVuX3R1bmVzOgorICAgICAgICAgICAgICAgIHR1bmVfZXJyb3Jfc2V0LmFwcGVuZCgiVGhlIHR1bmluZyAnJXMnIGFwcGVhcnMgaW4gbW9yZSB0aGFuIG9uZSBtdWx0aWxpYi4iICUgdHVuZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2Vlbl9saWJzLmFwcGVuZCh0dW5lKQorICAgICAgICAgICAgaWYgdHVuZSA9PSBkZWZ0dW5lOgorICAgICAgICAgICAgICAgIHR1bmVfZXJyb3Jfc2V0LmFwcGVuZCgiTXVsdGlsaWIgJyVzJyAoJXMpIGlzIGFsc28gdGhlIGRlZmF1bHQgdHVuaW5nLiIgJSAobGliLCBkZWZ0dW5lKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHVuZV9lcnJvcnMgPSBjaGVja190b29sY2hhaW5fdHVuZShkYXRhLCB0dW5lLCBsaWIpCisgICAgICAgICAgICBpZiB0dW5lX2Vycm9yczoKKyAgICAgICAgICAgICAgICB0dW5lX2Vycm9yX3NldC5hcHBlbmQodHVuZV9lcnJvcnMpCisgICAgaWYgdHVuZV9lcnJvcl9zZXQ6CisgICAgICAgIHJldHVybiAiVG9vbGNoYWluIHR1bmluZ3MgaW52YWxpZDpcbiIgKyAnXG4nLmpvaW4odHVuZV9lcnJvcl9zZXQpICsgIlxuIgorCisgICAgcmV0dXJuICIiCisKK2RlZiBjaGVja19jb25mX2V4aXN0cyhmbiwgZGF0YSk6CisgICAgYmJwYXRoID0gW10KKyAgICBmbiA9IGRhdGEuZXhwYW5kKGZuKQorICAgIHZiYnBhdGggPSBkYXRhLmdldFZhcigiQkJQQVRIIiwgRmFsc2UpCisgICAgaWYgdmJicGF0aDoKKyAgICAgICAgYmJwYXRoICs9IHZiYnBhdGguc3BsaXQoIjoiKQorICAgIGZvciBwIGluIGJicGF0aDoKKyAgICAgICAgY3Vycm5hbWUgPSBvcy5wYXRoLmpvaW4oZGF0YS5leHBhbmQocCksIGZuKQorICAgICAgICBpZiBvcy5hY2Nlc3MoY3Vycm5hbWUsIG9zLlJfT0spOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIGNoZWNrX2NyZWF0ZV9sb25nX2ZpbGVuYW1lKGZpbGVwYXRoLCBwYXRobmFtZSk6CisgICAgaW1wb3J0IHN0cmluZywgcmFuZG9tCisgICAgdGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4oZmlsZXBhdGgsICcnLmpvaW4ocmFuZG9tLmNob2ljZShzdHJpbmcuYXNjaWlfbGV0dGVycykgZm9yIHggaW4gcmFuZ2UoMjAwKSkpCisgICAgdHJ5OgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZXBhdGgpOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGZpbGVwYXRoKQorICAgICAgICBmID0gb3Blbih0ZXN0ZmlsZSwgInciKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgb3MucmVtb3ZlKHRlc3RmaWxlKQorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGltcG9ydCBlcnJubworICAgICAgICBlcnIsIHN0cmVycm9yID0gZS5hcmdzCisgICAgICAgIGlmIGVyciA9PSBlcnJuby5FTkFNRVRPT0xPTkc6CisgICAgICAgICAgICByZXR1cm4gIkZhaWxlZCB0byBjcmVhdGUgYSBmaWxlIHdpdGggYSBsb25nIG5hbWUgaW4gJXMuIFBsZWFzZSB1c2UgYSBmaWxlc3lzdGVtIHRoYXQgZG9lcyBub3QgdW5yZWFzb25hYmx5IGxpbWl0IGZpbGVuYW1lIGxlbmd0aC5cbiIgJSBwYXRobmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICJGYWlsZWQgdG8gY3JlYXRlIGEgZmlsZSBpbiAlczogJXMuXG4iICUgKHBhdGhuYW1lLCBzdHJlcnJvcikKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICBlcnJubywgc3RyZXJyb3IgPSBlLmFyZ3MKKyAgICAgICAgcmV0dXJuICJGYWlsZWQgdG8gY3JlYXRlICVzIGRpcmVjdG9yeSBpbiB3aGljaCB0byBydW4gbG9uZyBuYW1lIHNhbml0eSBjaGVjazogJXMuXG4iICUgKHBhdGhuYW1lLCBzdHJlcnJvcikKKyAgICByZXR1cm4gIiIKKworZGVmIGNoZWNrX3BhdGhfbGVuZ3RoKGZpbGVwYXRoLCBwYXRobmFtZSwgbGltaXQpOgorICAgIGlmIGxlbihmaWxlcGF0aCkgPiBsaW1pdDoKKyAgICAgICAgcmV0dXJuICJUaGUgbGVuZ3RoIG9mICVzIGlzIGxvbmdlciB0aGFuIDQxMCwgdGhpcyB3b3VsZCBjYXVzZSB1bmV4cGVjdGVkIGVycm9ycywgcGxlYXNlIHVzZSBhIHNob3J0ZXIgcGF0aC5cbiIgJSBwYXRobmFtZQorICAgIHJldHVybiAiIgorCitkZWYgZ2V0X2ZpbGVzeXN0ZW1faWQocGF0aCk6CisgICAgc3RhdHVzLCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoInN0YXQgLWYgLWMgJyVzJyAlcyIgJSAoIiV0IiwgcGF0aCkpCisgICAgaWYgc3RhdHVzID09IDA6CisgICAgICAgIHJldHVybiByZXN1bHQKKyAgICBlbHNlOgorICAgICAgICBiYi53YXJuKCJDYW4ndCBnZXQgdGhlIGZpbGVzeXN0ZW0gaWQgb2Y6ICVzIiAlIHBhdGgpCisgICAgICAgIHJldHVybiBOb25lCisKKyMgQ2hlY2sgdGhhdCB0aGUgcGF0aCBpc24ndCBsb2NhdGVkIG9uIG5mcy4KK2RlZiBjaGVja19ub3RfbmZzKHBhdGgsIG5hbWUpOgorICAgICMgVGhlIG5mcycgZmlsZXN5c3RlbSBpZCBpcyA2OTY5CisgICAgaWYgZ2V0X2ZpbGVzeXN0ZW1faWQocGF0aCkgPT0gIjY5NjkiOgorICAgICAgICByZXR1cm4gIlRoZSAlczogJXMgY2FuJ3QgYmUgbG9jYXRlZCBvbiBuZnMuXG4iICUgKG5hbWUsIHBhdGgpCisgICAgcmV0dXJuICIiCisKKyMgQ2hlY2sgdGhhdCBwYXRoIGlzbid0IGEgYnJva2VuIHN5bWxpbmsKK2RlZiBjaGVja19zeW1saW5rKGxuaywgZGF0YSk6CisgICAgaWYgb3MucGF0aC5pc2xpbmsobG5rKSBhbmQgbm90IG9zLnBhdGguZXhpc3RzKGxuayk6CisgICAgICAgIHJhaXNlX3Nhbml0eV9lcnJvcigiJXMgaXMgYSBicm9rZW4gc3ltbGluay4iICUgbG5rLCBkYXRhKQorCitkZWYgY2hlY2tfY29ubmVjdGl2aXR5KGQpOgorICAgICMgVVJJJ3MgdG8gY2hlY2sgY2FuIGJlIHNldCBpbiB0aGUgQ09OTkVDVElWSVRZX0NIRUNLX1VSSVMgdmFyaWFibGUKKyAgICAjIHVzaW5nIHRoZSBzYW1lIHN5bnRheCBhcyBmb3IgU1JDX1VSSS4gSWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBzZXQKKyAgICAjIHRoZSBjaGVjayBpcyBza2lwcGVkCisgICAgdGVzdF91cmlzID0gKGQuZ2V0VmFyKCdDT05ORUNUSVZJVFlfQ0hFQ0tfVVJJUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgcmV0dmFsID0gIiIKKworICAgICMgT25seSBjaGVjayBjb25uZWN0aXZpdHkgaWYgbmV0d29yayBlbmFibGVkIGFuZCB0aGUKKyAgICAjIENPTk5FQ1RJVklUWV9DSEVDS19VUklTIGFyZSBzZXQKKyAgICBuZXR3b3JrX2VuYWJsZWQgPSBub3QgZC5nZXRWYXIoJ0JCX05PX05FVFdPUksnLCBUcnVlKQorICAgIGNoZWNrX2VuYWJsZWQgPSBsZW4odGVzdF91cmlzKQorICAgICMgVGFrZSBhIGNvcHkgb2YgdGhlIGRhdGEgc3RvcmUgYW5kIHVuc2V0IE1JUlJPUlMgYW5kIFBSRU1JUlJPUlMKKyAgICBkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgZGF0YS5kZWxWYXIoJ1BSRU1JUlJPUlMnKQorICAgIGRhdGEuZGVsVmFyKCdNSVJST1JTJykKKyAgICBpZiBjaGVja19lbmFibGVkIGFuZCBuZXR3b3JrX2VuYWJsZWQ6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2godGVzdF91cmlzLCBkYXRhKQorICAgICAgICAgICAgZmV0Y2hlci5jaGVja3N0YXR1cygpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgorICAgICAgICAgICAgIyBBbGxvdyB0aGUgbWVzc2FnZSB0byBiZSBjb25maWd1cmVkIHNvIHRoYXQgdXNlcnMgY2FuIGJlCisgICAgICAgICAgICAjIHBvaW50ZWQgdG8gYSBzdXBwb3J0IG1lY2hhbmlzbS4KKyAgICAgICAgICAgIG1zZyA9IGRhdGEuZ2V0VmFyKCdDT05ORUNUSVZJVFlfQ0hFQ0tfTVNHJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgIGlmIGxlbihtc2cpID09IDA6CisgICAgICAgICAgICAgICAgbXNnID0gIiVzLiBQbGVhc2UgZW5zdXJlIHlvdXIgbmV0d29yayBpcyBjb25maWd1cmVkIGNvcnJlY3RseS5cbiIgJSBlcnIKKyAgICAgICAgICAgIHJldHZhbCA9IG1zZworCisgICAgcmV0dXJuIHJldHZhbAorCitkZWYgY2hlY2tfc3VwcG9ydGVkX2Rpc3RybyhzYW5pdHlfZGF0YSk6CisgICAgZnJvbSBmbm1hdGNoIGltcG9ydCBmbm1hdGNoCisKKyAgICB0ZXN0ZWRfZGlzdHJvcyA9IHNhbml0eV9kYXRhLmdldFZhcignU0FOSVRZX1RFU1RFRF9ESVNUUk9TJywgVHJ1ZSkKKyAgICBpZiBub3QgdGVzdGVkX2Rpc3Ryb3M6CisgICAgICAgIHJldHVybgorCisgICAgdHJ5OgorICAgICAgICBkaXN0cm8gPSBvZS5sc2IuZGlzdHJvX2lkZW50aWZpZXIoKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIGRpc3RybyA9IE5vbmUKKworICAgIGlmIG5vdCBkaXN0cm86CisgICAgICAgIGJiLndhcm4oJ0hvc3QgZGlzdHJpYnV0aW9uIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkOyB5b3UgbWF5IHBvc3NpYmx5IGV4cGVyaWVuY2UgdW5leHBlY3RlZCBmYWlsdXJlcy4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIGEgdGVzdGVkIGRpc3RyaWJ1dGlvbi4nKQorCisgICAgZm9yIHN1cHBvcnRlZCBpbiBbeC5zdHJpcCgpIGZvciB4IGluIHRlc3RlZF9kaXN0cm9zLnNwbGl0KCdcXG4nKV06CisgICAgICAgIGlmIGZubWF0Y2goZGlzdHJvLCBzdXBwb3J0ZWQpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICBiYi53YXJuKCdIb3N0IGRpc3RyaWJ1dGlvbiAiJXMiIGhhcyBub3QgYmVlbiB2YWxpZGF0ZWQgd2l0aCB0aGlzIHZlcnNpb24gb2YgdGhlIGJ1aWxkIHN5c3RlbTsgeW91IG1heSBwb3NzaWJseSBleHBlcmllbmNlIHVuZXhwZWN0ZWQgZmFpbHVyZXMuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSBhIHRlc3RlZCBkaXN0cmlidXRpb24uJyAlIGRpc3RybykKKworIyBDaGVja3Mgd2Ugc2hvdWxkIG9ubHkgbWFrZSBpZiBNQUNISU5FIGlzIHNldCBjb3JyZWN0bHkKK2RlZiBjaGVja19zYW5pdHlfdmFsaWRtYWNoaW5lKHNhbml0eV9kYXRhKToKKyAgICBtZXNzYWdlcyA9ICIiCisKKyAgICAjIENoZWNrIFRVTkVfQVJDSCBpcyBzZXQKKyAgICBpZiBzYW5pdHlfZGF0YS5nZXRWYXIoJ1RVTkVfQVJDSCcsIFRydWUpID09ICdJTlZBTElEJzoKKyAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcyArICdUVU5FX0FSQ0ggaXMgdW5zZXQuIFBsZWFzZSBlbnN1cmUgeW91ciBNQUNISU5FIGNvbmZpZ3VyYXRpb24gaW5jbHVkZXMgYSB2YWxpZCB0dW5lIGNvbmZpZ3VyYXRpb24gZmlsZSB3aGljaCB3aWxsIHNldCB0aGlzIGNvcnJlY3RseS5cbicKKworICAgICMgQ2hlY2sgVEFSR0VUX09TIGlzIHNldAorICAgIGlmIHNhbml0eV9kYXRhLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkgPT0gJ0lOVkFMSUQnOgorICAgICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzICsgJ1BsZWFzZSBzZXQgVEFSR0VUX09TIGRpcmVjdGx5LCBvciBjaG9vc2UgYSBNQUNISU5FIG9yIERJU1RSTyB0aGF0IGRvZXMgc28uXG4nCisKKyAgICAjIENoZWNrIHRoYXQgd2UgZG9uJ3QgaGF2ZSBkdXBsaWNhdGUgZW50cmllcyBpbiBQQUNLQUdFX0FSQ0hTICYgdGhhdCBUVU5FX1BLR0FSQ0ggaXMgaW4gUEFDS0FHRV9BUkNIUworICAgIHBrZ2FyY2hzID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdQQUNLQUdFX0FSQ0hTJywgVHJ1ZSkKKyAgICB0dW5lcGtnID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdUVU5FX1BLR0FSQ0gnLCBUcnVlKQorICAgIHR1bmVmb3VuZCA9IEZhbHNlCisgICAgc2VlbiA9IHt9CisgICAgZHVwcyA9IFtdCisKKyAgICBmb3IgcGEgaW4gcGtnYXJjaHMuc3BsaXQoKToKKyAgICAgICAgaWYgc2Vlbi5nZXQocGEsIDApID09IDE6CisgICAgICAgICAgICBkdXBzLmFwcGVuZChwYSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlZW5bcGFdID0gMQorICAgICAgICBpZiBwYSA9PSB0dW5lcGtnOgorICAgICAgICAgICAgdHVuZWZvdW5kID0gVHJ1ZQorCisgICAgaWYgbGVuKGR1cHMpOgorICAgICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzICsgIkVycm9yLCB0aGUgUEFDS0FHRV9BUkNIUyB2YXJpYWJsZSBjb250YWlucyBkdXBsaWNhdGVzLiBUaGUgZm9sbG93aW5nIGFyY2hzIGFyZSBsaXN0ZWQgbW9yZSB0aGFuIG9uY2U6ICVzIiAlICIgIi5qb2luKGR1cHMpCisKKyAgICBpZiB0dW5lZm91bmQgPT0gRmFsc2U6CisgICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMgKyAiRXJyb3IsIHRoZSBQQUNLQUdFX0FSQ0hTIHZhcmlhYmxlIGRvZXMgbm90IGNvbnRhaW4gVFVORV9QS0dBUkNIICglcykuIiAlIHR1bmVwa2cKKworICAgIHJldHVybiBtZXNzYWdlcworCisjIENoZWNrcyBpZiBuZWNlc3NhcnkgdG8gYWRkIG9wdGlvbiBtYXJjaCB0byBob3N0IGdjYworZGVmIGNoZWNrX2djY19tYXJjaChzYW5pdHlfZGF0YSk6CisgICAgcmVzdWx0ID0gVHJ1ZQorICAgIG1lc3NhZ2UgPSAiIgorCisgICAgIyBDaGVjayBpZiAtbWFyY2ggbm90IGluIEJVSUxEX0NGTEFHUworICAgIGlmIHNhbml0eV9kYXRhLmdldFZhcigiQlVJTERfQ0ZMQUdTIixUcnVlKS5maW5kKCItbWFyY2giKSA8IDA6CisgICAgICAgIHJlc3VsdCA9IEZhbHNlCisKKyAgICAgICAgIyBDb25zdHJ1Y3QgYSB0ZXN0IGZpbGUKKyAgICAgICAgZiA9IG9wZW4oImdjY190ZXN0LmMiLCAidyIpCisgICAgICAgIGYud3JpdGUoImludCBtYWluICgpeyB2b2xhdGlsZSBpbnQgYXRvbWljID0gMjsgX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcCAoJmF0b21pYywgMiwgMyk7IHJldHVybiAwOyB9XG4iKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAjIENoZWNrIGlmIEdDQyBjb3VsZCB3b3JrIHdpdGhvdXQgbWFyY2gKKyAgICAgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIHN0YXR1cyxyZXMgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoIiR7QlVJTERfUFJFRklYfWdjYyBnY2NfdGVzdC5jIC1vIGdjY190ZXN0IikKKyAgICAgICAgICAgIGlmIHN0YXR1cyA9PSAwOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRydWU7CisKKyAgICAgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIHN0YXR1cyxyZXMgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoIiR7QlVJTERfUFJFRklYfWdjYyAtbWFyY2g9bmF0aXZlIGdjY190ZXN0LmMgLW8gZ2NjX3Rlc3QiKQorICAgICAgICAgICAgaWYgc3RhdHVzID09IDA6CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJCVUlMRF9DRkxBR1NfYXBwZW5kID0gXCIgLW1hcmNoPW5hdGl2ZVwiIgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRydWU7CisKKyAgICAgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIGJ1aWxkX2FyY2ggPSBzYW5pdHlfZGF0YS5nZXRWYXIoJ0JVSUxEX0FSQ0gnLCBUcnVlKQorICAgICAgICAgICAgc3RhdHVzLHJlcyA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgiJHtCVUlMRF9QUkVGSVh9Z2NjIC1tYXJjaD0lcyBnY2NfdGVzdC5jIC1vIGdjY190ZXN0IiAlIGJ1aWxkX2FyY2gpCisgICAgICAgICAgICBpZiBzdGF0dXMgPT0gMDoKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gIkJVSUxEX0NGTEFHU19hcHBlbmQgPSBcIiAtbWFyY2g9JXNcIiIgJSBidWlsZF9hcmNoCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gVHJ1ZTsKKworICAgICAgICBvcy5yZW1vdmUoImdjY190ZXN0LmMiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiZ2NjX3Rlc3QiKToKKyAgICAgICAgICAgIG9zLnJlbW92ZSgiZ2NjX3Rlc3QiKQorCisgICAgcmV0dXJuIChyZXN1bHQsIG1lc3NhZ2UpCisKKyMgVW5wYXRjaGVkIHZlcnNpb25zIG9mIG1ha2UgMy44MiBhcmUga25vd24gdG8gYmUgYnJva2VuLiAgU2VlIEdOVSBTYXZhbm5haCBCdWcgMzA2MTIuCisjIFVzZSBhIG1vZGlmaWVkIHJlcHJvZHVjZXIgZnJvbSBodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz8zMDYxMiB0byB2YWxpZGF0ZS4KK2RlZiBjaGVja19tYWtlX3ZlcnNpb24oc2FuaXR5X2RhdGEpOgorICAgIGZyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IExvb3NlVmVyc2lvbgorICAgIHN0YXR1cywgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCJtYWtlIC0tdmVyc2lvbiIpCisgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgIHJldHVybiAiVW5hYmxlIHRvIGV4ZWN1dGUgbWFrZSAtLXZlcnNpb24sIGV4aXQgY29kZSAlc1xuIiAlIHN0YXR1cworICAgIHZlcnNpb24gPSByZXN1bHQuc3BsaXQoKVsyXQorICAgIGlmIExvb3NlVmVyc2lvbih2ZXJzaW9uKSA9PSBMb29zZVZlcnNpb24oIjMuODIiKToKKyAgICAgICAgIyBDb25zdHJ1Y3QgYSB0ZXN0IGZpbGUKKyAgICAgICAgZiA9IG9wZW4oIm1ha2VmaWxlX3Rlc3QiLCAidyIpCisgICAgICAgIGYud3JpdGUoIm1ha2VmaWxlX3Rlc3QuYTogbWFrZWZpbGVfdGVzdF9hLmMgbWFrZWZpbGVfdGVzdF9iLmMgbWFrZWZpbGVfdGVzdC5hKCBtYWtlZmlsZV90ZXN0X2EuYyBtYWtlZmlsZV90ZXN0X2IuYylcbiIpCisgICAgICAgIGYud3JpdGUoIlxuIikKKyAgICAgICAgZi53cml0ZSgibWFrZWZpbGVfdGVzdF9hLmM6XG4iKQorICAgICAgICBmLndyaXRlKCIJdG91Y2ggJEBcbiIpCisgICAgICAgIGYud3JpdGUoIlxuIikKKyAgICAgICAgZi53cml0ZSgibWFrZWZpbGVfdGVzdF9iLmM6XG4iKQorICAgICAgICBmLndyaXRlKCIJdG91Y2ggJEBcbiIpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICMgQ2hlY2sgaWYgbWFrZSAzLjgyIGhhcyBiZWVuIHBhdGNoZWQKKyAgICAgICAgc3RhdHVzLHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgibWFrZSAtZiBtYWtlZmlsZV90ZXN0IikKKworICAgICAgICBvcy5yZW1vdmUoIm1ha2VmaWxlX3Rlc3QiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygibWFrZWZpbGVfdGVzdF9hLmMiKToKKyAgICAgICAgICAgIG9zLnJlbW92ZSgibWFrZWZpbGVfdGVzdF9hLmMiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygibWFrZWZpbGVfdGVzdF9iLmMiKToKKyAgICAgICAgICAgIG9zLnJlbW92ZSgibWFrZWZpbGVfdGVzdF9iLmMiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygibWFrZWZpbGVfdGVzdC5hIik6CisgICAgICAgICAgICBvcy5yZW1vdmUoIm1ha2VmaWxlX3Rlc3QuYSIpCisKKyAgICAgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgICAgICByZXR1cm4gIllvdXIgdmVyc2lvbiBvZiBtYWtlIDMuODIgaXMgYnJva2VuLiBQbGVhc2UgcmV2ZXJ0IHRvIDMuODEgb3IgaW5zdGFsbCBhIHBhdGNoZWQgdmVyc2lvbi5cbiIKKyAgICByZXR1cm4gTm9uZQorCisKKyMgVGFyIHZlcnNpb24gMS4yNCBhbmQgb253YXJkcyBoYW5kbGUgb3ZlcndyaXRpbmcgc3ltbGlua3MgY29ycmVjdGx5CisjIGJ1dCBlYXJsaWVyIHZlcnNpb25zIGRvIG5vdDsgdGhpcyBuZWVkcyB0byB3b3JrIHByb3Blcmx5IGZvciBzc3RhdGUKK2RlZiBjaGVja190YXJfdmVyc2lvbihzYW5pdHlfZGF0YSk6CisgICAgZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCisgICAgc3RhdHVzLCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoInRhciAtLXZlcnNpb24iKQorICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICByZXR1cm4gIlVuYWJsZSB0byBleGVjdXRlIHRhciAtLXZlcnNpb24sIGV4aXQgY29kZSAlc1xuIiAlIHN0YXR1cworICAgIHZlcnNpb24gPSByZXN1bHQuc3BsaXQoKVszXQorICAgIGlmIExvb3NlVmVyc2lvbih2ZXJzaW9uKSA8IExvb3NlVmVyc2lvbigiMS4yNCIpOgorICAgICAgICByZXR1cm4gIllvdXIgdmVyc2lvbiBvZiB0YXIgaXMgb2xkZXIgdGhhbiAxLjI0IGFuZCBoYXMgYnVncyB3aGljaCB3aWxsIGJyZWFrIGJ1aWxkcy4gUGxlYXNlIGluc3RhbGwgYSBuZXdlciB2ZXJzaW9uIG9mIHRhci5cbiIKKyAgICByZXR1cm4gTm9uZQorCisjIFdlIHVzZSBnaXQgcGFyYW1ldGVycyBhbmQgZnVuY3Rpb25hbGl0eSBvbmx5IGZvdW5kIGluIDEuNy44IG9yIGxhdGVyCitkZWYgY2hlY2tfZ2l0X3ZlcnNpb24oc2FuaXR5X2RhdGEpOgorICAgIGZyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IExvb3NlVmVyc2lvbgorICAgIHN0YXR1cywgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCJnaXQgLS12ZXJzaW9uIDI+IC9kZXYvbnVsbCIpCisgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgIHJldHVybiAiVW5hYmxlIHRvIGV4ZWN1dGUgZ2l0IC0tdmVyc2lvbiwgZXhpdCBjb2RlICVzXG4iICUgc3RhdHVzCisgICAgdmVyc2lvbiA9IHJlc3VsdC5zcGxpdCgpWzJdCisgICAgaWYgTG9vc2VWZXJzaW9uKHZlcnNpb24pIDwgTG9vc2VWZXJzaW9uKCIxLjcuOCIpOgorICAgICAgICByZXR1cm4gIllvdXIgdmVyc2lvbiBvZiBnaXQgaXMgb2xkZXIgdGhhbiAxLjcuOCBhbmQgaGFzIGJ1Z3Mgd2hpY2ggd2lsbCBicmVhayBidWlsZHMuIFBsZWFzZSBpbnN0YWxsIGEgbmV3ZXIgdmVyc2lvbiBvZiBnaXQuXG4iCisgICAgcmV0dXJuIE5vbmUKKworIyBDaGVjayB0aGUgcmVxdWlyZWQgcGVybCBtb2R1bGVzIHdoaWNoIG1heSBub3QgYmUgaW5zdGFsbGVkIGJ5IGRlZmF1bHQKK2RlZiBjaGVja19wZXJsX21vZHVsZXMoc2FuaXR5X2RhdGEpOgorICAgIHJldCA9ICIiCisgICAgbW9kdWxlcyA9ICggIlRleHQ6OlBhcnNlV29yZHMiLCAiVGhyZWFkOjpRdWV1ZSIsICJEYXRhOjpEdW1wZXIiICkKKyAgICBmb3IgbSBpbiBtb2R1bGVzOgorICAgICAgICBzdGF0dXMsIHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgicGVybCAtZSAndXNlICVzJyAyPiAvZGV2L251bGwiICUgbSkKKyAgICAgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgICAgICByZXQgKz0gIiVzICIgJSBtCisgICAgaWYgcmV0OgorICAgICAgICByZXR1cm4gIlJlcXVpcmVkIHBlcmwgbW9kdWxlKHMpIG5vdCBmb3VuZDogJXNcbiIgJSByZXQKKyAgICByZXR1cm4gTm9uZQorCitkZWYgc2FuaXR5X2NoZWNrX2NvbmZmaWxlcyhzdGF0dXMsIGQpOgorICAgICMgQ2hlY2sgd2UgYXJlIHVzaW5nIGEgdmFsaWQgbG9jYWwuY29uZgorICAgIGN1cnJlbnRfY29uZiAgPSBkLmdldFZhcignQ09ORl9WRVJTSU9OJywgVHJ1ZSkKKyAgICBjb25mX3ZlcnNpb24gPSAgZC5nZXRWYXIoJ0xPQ0FMQ09ORl9WRVJTSU9OJywgVHJ1ZSkKKworICAgIGlmIGN1cnJlbnRfY29uZiAhPSBjb25mX3ZlcnNpb246CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIllvdXIgdmVyc2lvbiBvZiBsb2NhbC5jb25mIHdhcyBnZW5lcmF0ZWQgZnJvbSBhbiBvbGRlci9uZXdlciB2ZXJzaW9uIG9mIGxvY2FsLmNvbmYuc2FtcGxlIGFuZCB0aGVyZSBoYXZlIGJlZW4gdXBkYXRlcyBtYWRlIHRvIHRoaXMgZmlsZS4gUGxlYXNlIGNvbXBhcmUgdGhlIHR3byBmaWxlcyBhbmQgbWVyZ2UgYW55IGNoYW5nZXMgYmVmb3JlIGNvbnRpbnVpbmcuXG5NYXRjaGluZyB0aGUgdmVyc2lvbiBudW1iZXJzIHdpbGwgcmVtb3ZlIHRoaXMgbWVzc2FnZS5cblwibWVsZCBjb25mL2xvY2FsLmNvbmYgJHtDT1JFQkFTRX0vbWV0YSovY29uZi9sb2NhbC5jb25mLnNhbXBsZVwiIGlzIGEgZ29vZCB3YXkgdG8gdmlzdWFsaXNlIHRoZSBjaGFuZ2VzLlxuIikKKworICAgICMgQ2hlY2sgYmJsYXllcnMuY29uZiBpcyB2YWxpZAorICAgIGN1cnJlbnRfbGNvbmYgPSBkLmdldFZhcignTENPTkZfVkVSU0lPTicsIFRydWUpCisgICAgbGNvbmZfdmVyc2lvbiA9IGQuZ2V0VmFyKCdMQVlFUl9DT05GX1ZFUlNJT04nLCBUcnVlKQorICAgIGlmIGN1cnJlbnRfbGNvbmYgIT0gbGNvbmZfdmVyc2lvbjoKKyAgICAgICAgZnVuY3MgPSBkLmdldFZhcignQkJMQVlFUlNfQ09ORl9VUERBVEVfRlVOQ1MnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgIGZvciBmdW5jIGluIGZ1bmNzOgorICAgICAgICAgICAgc3VjY2VzcyA9IFRydWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZnVuYywgZCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IEZhbHNlCisgICAgICAgICAgICBpZiBzdWNjZXNzOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIllvdXIgY29uZi9iYmxheWVycy5jb25mIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgdXBkYXRlZC4iKQorICAgICAgICAgICAgICAgIHN0YXR1cy5yZXBhcnNlID0gVHJ1ZQorICAgICAgICBpZiBub3Qgc3RhdHVzLnJlcGFyc2U6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJZb3VyIHZlcnNpb24gb2YgYmJsYXllcnMuY29uZiBoYXMgdGhlIHdyb25nIExDT05GX1ZFUlNJT04gKGhhcyAlcywgZXhwZWN0aW5nICVzKS5cblBsZWFzZSBjb21wYXJlIHRoZSB5b3VyIGZpbGUgYWdhaW5zdCBiYmxheWVycy5jb25mLnNhbXBsZSBhbmQgbWVyZ2UgYW55IGNoYW5nZXMgYmVmb3JlIGNvbnRpbnVpbmcuXG5cIm1lbGQgY29uZi9iYmxheWVycy5jb25mICR7Q09SRUJBU0V9L21ldGEqL2NvbmYvYmJsYXllcnMuY29uZi5zYW1wbGVcIiBpcyBhIGdvb2Qgd2F5IHRvIHZpc3VhbGlzZSB0aGUgY2hhbmdlcy5cbiIgJSAoY3VycmVudF9sY29uZiwgbGNvbmZfdmVyc2lvbikpCisKKyAgICAjIElmIHdlIGhhdmUgYSBzaXRlLmNvbmYsIGNoZWNrIGl0J3MgdmFsaWQKKyAgICBpZiBjaGVja19jb25mX2V4aXN0cygiY29uZi9zaXRlLmNvbmYiLCBkKToKKyAgICAgICAgY3VycmVudF9zY29uZiA9IGQuZ2V0VmFyKCdTQ09ORl9WRVJTSU9OJywgVHJ1ZSkKKyAgICAgICAgc2NvbmZfdmVyc2lvbiA9IGQuZ2V0VmFyKCdTSVRFX0NPTkZfVkVSU0lPTicsIFRydWUpCisgICAgICAgIGlmIGN1cnJlbnRfc2NvbmYgIT0gc2NvbmZfdmVyc2lvbjoKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIllvdXIgdmVyc2lvbiBvZiBzaXRlLmNvbmYgd2FzIGdlbmVyYXRlZCBmcm9tIGFuIG9sZGVyIHZlcnNpb24gb2Ygc2l0ZS5jb25mLnNhbXBsZSBhbmQgdGhlcmUgaGF2ZSBiZWVuIHVwZGF0ZXMgbWFkZSB0byB0aGlzIGZpbGUuIFBsZWFzZSBjb21wYXJlIHRoZSB0d28gZmlsZXMgYW5kIG1lcmdlIGFueSBjaGFuZ2VzIGJlZm9yZSBjb250aW51aW5nLlxuTWF0Y2hpbmcgdGhlIHZlcnNpb24gbnVtYmVycyB3aWxsIHJlbW92ZSB0aGlzIG1lc3NhZ2UuXG5cIm1lbGQgY29uZi9zaXRlLmNvbmYgJHtDT1JFQkFTRX0vbWV0YSovY29uZi9zaXRlLmNvbmYuc2FtcGxlXCIgaXMgYSBnb29kIHdheSB0byB2aXN1YWxpc2UgdGhlIGNoYW5nZXMuXG4iKQorCisKK2RlZiBzYW5pdHlfaGFuZGxlX2FiaWNoYW5nZXMoc3RhdHVzLCBkKToKKyAgICAjCisgICAgIyBDaGVjayB0aGUgJ0FCSScgb2YgVE1QRElSCisgICAgIworICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICBjdXJyZW50X2FiaSA9IGQuZ2V0VmFyKCdPRUxBWU9VVF9BQkknLCBUcnVlKQorICAgIGFiaWZpbGUgPSBkLmdldFZhcignU0FOSVRZX0FCSUZJTEUnLCBUcnVlKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGFiaWZpbGUpOgorICAgICAgICB3aXRoIG9wZW4oYWJpZmlsZSwgInIiKSBhcyBmOgorICAgICAgICAgICAgYWJpID0gZi5yZWFkKCkuc3RyaXAoKQorICAgICAgICBpZiBub3QgYWJpLmlzZGlnaXQoKToKKyAgICAgICAgICAgIHdpdGggb3BlbihhYmlmaWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShjdXJyZW50X2FiaSkKKyAgICAgICAgZWxpZiBhYmkgPT0gIjIiIGFuZCBjdXJyZW50X2FiaSA9PSAiMyI6CisgICAgICAgICAgICBiYi5ub3RlKCJDb252ZXJ0aW5nIHN0YWdpbmcgZnJvbSBsYXlvdXQgdmVyc2lvbiAyIHRvIGxheW91dCB2ZXJzaW9uIDMiKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGQuZXhwYW5kKCJtdiAke1RNUERJUn0vc3RhZ2luZyAke1RNUERJUn0vc3lzcm9vdHMiKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChkLmV4cGFuZCgibG4gLXMgc3lzcm9vdHMgJHtUTVBESVJ9L3N0YWdpbmciKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChkLmV4cGFuZCgiY2QgJHtUTVBESVJ9L3N0YW1wczsgZm9yIGkgaW4gKi8qZG9fcG9wdWxhdGVfc3RhZ2luZzsgZG8gbmV3PWBlY2hvICRpIHwgc2VkIC1lICdzL2RvX3BvcHVsYXRlX3N0YWdpbmcvZG9fcG9wdWxhdGVfc3lzcm9vdC8nYDsgbXYgJGkgJG5ldzsgZG9uZSIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGN1cnJlbnRfYWJpKQorICAgICAgICBlbGlmIGFiaSA9PSAiMyIgYW5kIGN1cnJlbnRfYWJpID09ICI0IjoKKyAgICAgICAgICAgIGJiLm5vdGUoIkNvbnZlcnRpbmcgc3RhZ2luZyBsYXlvdXQgZnJvbSB2ZXJzaW9uIDMgdG8gbGF5b3V0IHZlcnNpb24gNCIpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkLmV4cGFuZCgiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJfbmF0aXZlfS8ke01VTFRJTUFDSF9IT1NUX1NZU30iKSk6CisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGQuZXhwYW5kKCJtdiAke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7TVVMVElNQUNIX0hPU1RfU1lTfSAke1NUQUdJTkdfQklORElSX0NST1NTfSIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChkLmV4cGFuZCgibG4gLXMgJHtTVEFHSU5HX0JJTkRJUl9DUk9TU30gJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJfbmF0aXZlfS8ke01VTFRJTUFDSF9IT1NUX1NZU30iKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihhYmlmaWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShjdXJyZW50X2FiaSkKKyAgICAgICAgZWxpZiBhYmkgPT0gIjQiOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiU3RhZ2luZyBsYXlvdXQgaGFzIGNoYW5nZWQuIFRoZSBjcm9zcyBkaXJlY3RvcnkgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgY3Jvc3MgcGFja2FnZXMgYXJlIG5vdyBidWlsdCB1bmRlciB0aGUgbmF0aXZlIHN5c3Jvb3QuXG5UaGlzIHJlcXVpcmVzIGEgcmVidWlsZC5cbiIpCisgICAgICAgIGVsaWYgYWJpID09ICI1IiBhbmQgY3VycmVudF9hYmkgPT0gIjYiOgorICAgICAgICAgICAgYmIubm90ZSgiQ29udmVydGluZyBzdGFnaW5nIGxheW91dCBmcm9tIHZlcnNpb24gNSB0byBsYXlvdXQgdmVyc2lvbiA2IikKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChkLmV4cGFuZCgibXYgJHtUTVBESVJ9L3BzdGFnZWxvZ3MgJHtTU1RBVEVfTUFOSUZFU1RTfSIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGN1cnJlbnRfYWJpKQorICAgICAgICBlbGlmIGFiaSA9PSAiNyIgYW5kIGN1cnJlbnRfYWJpID09ICI4IjoKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIllvdXIgY29uZmlndXJhdGlvbiBpcyB1c2luZyBzdGFtcCBmaWxlcyBpbmNsdWRpbmcgdGhlIHNzdGF0ZSBoYXNoIGJ1dCB5b3VyIGJ1aWxkIGRpcmVjdG9yeSB3YXMgYnVpbHQgd2l0aCBzdGFtcCBmaWxlcyB0aGF0IGRvIG5vdCBpbmNsdWRlIHRoaXMuXG5UbyBjb250aW51ZSwgZWl0aGVyIHJlYnVpbGQgb3Igc3dpdGNoIGJhY2sgdG8gdGhlIE9FQmFzaWMgc2lnbmF0dXJlIGhhbmRsZXIgd2l0aCBCQl9TSUdOQVRVUkVfSEFORExFUiA9ICdPRUJhc2ljJy5cbiIpCisgICAgICAgIGVsaWYgKGFiaSAhPSBjdXJyZW50X2FiaSBhbmQgY3VycmVudF9hYmkgPT0gIjkiKToKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIlRoZSBsYXlvdXQgb2YgdGhlIFRNUERJUiBTVEFNUFMgZGlyZWN0b3J5IGhhcyBjaGFuZ2VkLiBQbGVhc2UgY2xlYW4gb3V0IFRNUERJUiBhbmQgcmVidWlsZCAoc3N0YXRlIHdpbGwgYmUgc3RpbGwgYmUgdmFsaWQgYW5kIHJldXNlZClcbiIpCisgICAgICAgIGVsaWYgKGFiaSAhPSBjdXJyZW50X2FiaSBhbmQgY3VycmVudF9hYmkgPT0gIjEwIiBhbmQgKGFiaSA9PSAiOCIgb3IgYWJpID09ICI5IikpOgorICAgICAgICAgICAgYmIubm90ZSgiQ29udmVydGluZyBzdGFnaW5nIGxheW91dCBmcm9tIHZlcnNpb24gOC85IHRvIGxheW91dCB2ZXJzaW9uIDEwIikKKyAgICAgICAgICAgIGNtZCA9IGQuZXhwYW5kKCJncmVwIC1yIC1sIHN5c3Jvb3QtcHJvdmlkZXJzL3ZpcnR1YWxfa2VybmVsICR7U1NUQVRFX01BTklGRVNUU30iKQorICAgICAgICAgICAgcmV0LCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNwbGl0KCkKKyAgICAgICAgICAgIGZvciBmIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJVbmluc3RhbGxpbmcgbWFuaWZlc3QgZmlsZSAlcyIgJSBmKQorICAgICAgICAgICAgICAgIHNzdGF0ZV9jbGVhbl9tYW5pZmVzdChmLCBkKQorICAgICAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGN1cnJlbnRfYWJpKQorICAgICAgICBlbGlmIGFiaSA9PSAiMTAiIGFuZCBjdXJyZW50X2FiaSA9PSAiMTEiOgorICAgICAgICAgICAgYmIubm90ZSgiQ29udmVydGluZyBzdGFnaW5nIGxheW91dCBmcm9tIHZlcnNpb24gMTAgdG8gbGF5b3V0IHZlcnNpb24gMTEiKQorICAgICAgICAgICAgIyBGaWxlcyBpbiB4Zjg2LXZpZGVvLW1vZGVzZXR0aW5nIG1vdmVkIHRvIHhzZXJ2ZXIteG9yZyBhbmQgYml0YmFrZSBjYW4ndCBjdXJyZW50bHkgaGFuZGxlIHRoYXQ6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoZC5leHBhbmQoInJtICR7VE1QRElSfS9zeXNyb290cy8qL3Vzci9saWIveG9yZy9tb2R1bGVzL2RyaXZlcnMvbW9kZXNldHRpbmdfZHJ2LnNvICR7VE1QRElSfS9zeXNyb290cy8qL3BrZ2RhdGEvcnVudGltZS94Zjg2LXZpZGVvLW1vZGVzZXR0aW5nKiAke1RNUERJUn0vc3lzcm9vdHMvKi9wa2dkYXRhL3J1bnRpbWUtcmV2ZXJzZS94Zjg2LXZpZGVvLW1vZGVzZXR0aW5nKiAke1RNUERJUn0vc3lzcm9vdHMvKi9wa2dkYXRhL3NobGliczIveGY4Ni12aWRlby1tb2Rlc2V0dGluZyoiKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihhYmlmaWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShjdXJyZW50X2FiaSkKKyAgICAgICAgZWxpZiAoYWJpICE9IGN1cnJlbnRfYWJpKToKKyAgICAgICAgICAgICMgQ29kZSB0byBjb252ZXJ0IGZyb20gb25lIEFCSSB0byBhbm90aGVyIGNvdWxkIGdvIGhlcmUgaWYgcG9zc2libGUuCisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgVE1QRElSIGhhcyBjaGFuZ2VkIGl0cyBsYXlvdXQgdmVyc2lvbiBudW1iZXIgKCVzIHRvICVzKSBhbmQgeW91IG5lZWQgdG8gZWl0aGVyIHJlYnVpbGQsIHJldmVydCBvciBhZGp1c3QgaXQgYXQgeW91ciBvd24gcmlzay5cbiIgJSAoYWJpLCBjdXJyZW50X2FiaSkpCisgICAgZWxzZToKKyAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoY3VycmVudF9hYmkpCisKK2RlZiBjaGVja19zYW5pdHlfc3N0YXRlX2Rpcl9jaGFuZ2Uoc3N0YXRlX2RpciwgZGF0YSk6CisgICAgIyBTYW5pdHkgY2hlY2tzIHRvIGJlIGRvbmUgd2hlbiB0aGUgdmFsdWUgb2YgU1NUQVRFX0RJUiBjaGFuZ2VzCisKKyAgICAjIENoZWNrIHRoYXQgU1NUQVRFX0RJUiBpc24ndCBvbiBhIGZpbGVzeXN0ZW0gd2l0aCBsaW1pdGVkIGZpbGVuYW1lIGxlbmd0aCAoZWcuIGVDcnlwdEZTKQorICAgIHRlc3Rtc2cgPSAiIgorICAgIGlmIHNzdGF0ZV9kaXIgIT0gIiI6CisgICAgICAgIHRlc3Rtc2cgPSBjaGVja19jcmVhdGVfbG9uZ19maWxlbmFtZShzc3RhdGVfZGlyLCAiU1NUQVRFX0RJUiIpCisgICAgICAgICMgSWYgd2UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9ucyB0byBTU1RBVEVfRElSLCBzdWdnZXN0IHRoZSB1c2VyIHNldCBpdCBhcyBhbiBTU1RBVEVfTUlSUk9SUworICAgICAgICB0cnk6CisgICAgICAgICAgICBlcnIgPSB0ZXN0bXNnLnNwbGl0KCc6ICcpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIGVyciA9PSAiUGVybWlzc2lvbiBkZW5pZWQuIjoKKyAgICAgICAgICAgICAgICB0ZXN0bXNnID0gdGVzdG1zZyArICJZb3UgY291bGQgdHJ5IHVzaW5nICVzIGluIFNTVEFURV9NSVJST1JTIHJhdGhlciB0aGFuIGFzIGFuIFNTVEFURV9DQUNIRS5cbiIgJSAoc3N0YXRlX2RpcikKKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgcmV0dXJuIHRlc3Rtc2cKKyAgICAgICAKK2RlZiBjaGVja19zYW5pdHlfdmVyc2lvbl9jaGFuZ2Uoc3RhdHVzLCBkKToKKyAgICAjIFNhbml0eSBjaGVja3MgdG8gYmUgZG9uZSB3aGVuIFNBTklUWV9WRVJTSU9OIGNoYW5nZXMKKyAgICAjIEluIG90aGVyIHdvcmRzLCB0aGVzZSB0ZXN0cyBydW4gb25jZSBpbiBhIGdpdmVuIGJ1aWxkIGRpcmVjdG9yeSBhbmQgdGhlbiAKKyAgICAjIG5ldmVyIGFnYWluIHVudGlsIHRoZSBzYW5pdHkgdmVyc2lvbiBjaGFuZ2VzLgorCisgICAgIyBDaGVjayB0aGUgcHl0aG9uIGluc3RhbGwgaXMgY29tcGxldGUuIGdsaWItMi4wLW5hdGl2ZXMgcmVxdXJpZXMKKyAgICAjIHhtbC5wYXJzZXJzLmV4cGF0CisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgeG1sLnBhcnNlcnMuZXhwYXQKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ1lvdXIgcHl0aG9uIGlzIG5vdCBhIGZ1bGwgaW5zdGFsbC4gUGxlYXNlIGluc3RhbGwgdGhlIG1vZHVsZSB4bWwucGFyc2Vycy5leHBhdCAocHl0aG9uLXhtbCBvbiBvcGVuU1VTRSBhbmQgU1VTRSBMaW51eCkuXG4nKQorICAgIGltcG9ydCBzdGF0CisKKyAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX21ha2VfdmVyc2lvbihkKSkKKyAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX3Rhcl92ZXJzaW9uKGQpKQorICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfZ2l0X3ZlcnNpb24oZCkpCisgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19wZXJsX21vZHVsZXMoZCkpCisKKyAgICBtaXNzaW5nID0gIiIKKworICAgIGlmIG5vdCBjaGVja19hcHBfZXhpc3RzKCIke01BS0V9IiwgZCk6CisgICAgICAgIG1pc3NpbmcgPSBtaXNzaW5nICsgIkdOVSBtYWtlLCIKKworICAgIGlmIG5vdCBjaGVja19hcHBfZXhpc3RzKCcke0JVSUxEX1BSRUZJWH1nY2MnLCBkKToKKyAgICAgICAgbWlzc2luZyA9IG1pc3NpbmcgKyAiQyBDb21waWxlciAoJXNnY2MpLCIgJSBkLmdldFZhcigiQlVJTERfUFJFRklYIiwgVHJ1ZSkKKworICAgIGlmIG5vdCBjaGVja19hcHBfZXhpc3RzKCcke0JVSUxEX1BSRUZJWH1nKysnLCBkKToKKyAgICAgICAgbWlzc2luZyA9IG1pc3NpbmcgKyAiQysrIENvbXBpbGVyICglc2crKyksIiAlIGQuZ2V0VmFyKCJCVUlMRF9QUkVGSVgiLCBUcnVlKQorCisgICAgcmVxdWlyZWRfdXRpbGl0aWVzID0gZC5nZXRWYXIoJ1NBTklUWV9SRVFVSVJFRF9VVElMSVRJRVMnLCBUcnVlKQorCisgICAgZm9yIHV0aWwgaW4gcmVxdWlyZWRfdXRpbGl0aWVzLnNwbGl0KCk6CisgICAgICAgIGlmIG5vdCBjaGVja19hcHBfZXhpc3RzKHV0aWwsIGQpOgorICAgICAgICAgICAgbWlzc2luZyA9IG1pc3NpbmcgKyAiJXMsIiAlIHV0aWwKKworICAgIGlmIG1pc3Npbmc6CisgICAgICAgIG1pc3NpbmcgPSBtaXNzaW5nLnJzdHJpcCgnLCcpCisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIlBsZWFzZSBpbnN0YWxsIHRoZSBmb2xsb3dpbmcgbWlzc2luZyB1dGlsaXRpZXM6ICVzXG4iICUgbWlzc2luZykKKworICAgIGFzc3VtZV9wcm92aWRlZCA9IGQuZ2V0VmFyKCdBU1NVTUVfUFJPVklERUQnLCBUcnVlKS5zcGxpdCgpCisgICAgIyBDaGVjayB1c2VyIGRvZXNuJ3QgaGF2ZSBBU1NVTUVfUFJPVklERUQgPSBpbnN0ZWFkIG9mICs9IGluIGxvY2FsLmNvbmYKKyAgICBpZiAiZGlmZnN0YXQtbmF0aXZlIiBub3QgaW4gYXNzdW1lX3Byb3ZpZGVkOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdQbGVhc2UgdXNlIEFTU1VNRV9QUk9WSURFRCArPSwgbm90IEFTU1VNRV9QUk9WSURFRCA9IGluIHlvdXIgbG9jYWwuY29uZlxuJykKKworICAgIGlmICJxZW11LW5hdGl2ZSIgaW4gYXNzdW1lX3Byb3ZpZGVkOgorICAgICAgICBpZiBub3QgY2hlY2tfYXBwX2V4aXN0cygicWVtdS1hcm0iLCBkKToKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoInFlbXUtbmF0aXZlIHdhcyBpbiBBU1NVTUVfUFJPVklERUQgYnV0IHRoZSBRRU1VIGJpbmFyaWVzIChxZW11LWFybSkgY2FuJ3QgYmUgZm91bmQgaW4gUEFUSCIpCisKKyAgICBpZiAibGlic2RsLW5hdGl2ZSIgaW4gYXNzdW1lX3Byb3ZpZGVkOgorICAgICAgICBpZiBub3QgY2hlY2tfYXBwX2V4aXN0cygic2RsLWNvbmZpZyIsIGQpOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgibGlic2RsLW5hdGl2ZSBpcyBzZXQgdG8gYmUgQVNTVU1FX1BST1ZJREVEIGJ1dCBzZGwtY29uZmlnIGNhbid0IGJlIGZvdW5kIGluIFBBVEguIFBsZWFzZSBlaXRoZXIgaW5zdGFsbCBpdCwgb3IgY29uZmlndXJlIHFlbXUgbm90IHRvIHJlcXVpcmUgc2RsLiIpCisKKyAgICAocmVzdWx0LCBtZXNzYWdlKSA9IGNoZWNrX2djY19tYXJjaChkKQorICAgIGlmIHJlc3VsdCBhbmQgbWVzc2FnZToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiWW91ciBnY2MgdmVyc2lvbiBpcyBvbGRlciB0aGFuIDQuNSwgcGxlYXNlIGFkZCB0aGUgZm9sbG93aW5nIHBhcmFtIHRvIGxvY2FsLmNvbmZcbiBcCisgICAgICAgICVzXG4iICUgbWVzc2FnZSkKKyAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJZb3VyIGdjYyB2ZXJzaW9uIGlzIG9sZGVyIHRoYW4gNC41IG9yIGlzIG5vdCB3b3JraW5nIHByb3Blcmx5LiAgUGxlYXNlIHZlcmlmeSB5b3UgY2FuIGJ1aWxkIikKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiIGFuZCBsaW5rIHNvbWV0aGluZyB0aGF0IHVzZXMgYXRvbWljIG9wZXJhdGlvbnMsIHN1Y2ggYXM6IFxuIikKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiICAgICAgICBfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwICgmYXRvbWljLCAyLCAzKTtcbiIpCisKKyAgICAjIENoZWNrIHRoYXQgVE1QRElSIGlzbid0IG9uIGEgZmlsZXN5c3RlbSB3aXRoIGxpbWl0ZWQgZmlsZW5hbWUgbGVuZ3RoIChlZy4gZUNyeXB0RlMpCisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19jcmVhdGVfbG9uZ19maWxlbmFtZSh0bXBkaXIsICJUTVBESVIiKSkKKyAgICB0bXBkaXJtb2RlID0gb3Muc3RhdCh0bXBkaXIpLnN0X21vZGUKKyAgICBpZiAodG1wZGlybW9kZSAmIHN0YXQuU19JU0dJRCk6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIlRNUERJUiBpcyBzZXRnaWQsIHBsZWFzZSBkb24ndCBidWlsZCBpbiBhIHNldGdpZCBkaXJlY3RvcnkiKQorICAgIGlmICh0bXBkaXJtb2RlICYgc3RhdC5TX0lTVUlEKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiVE1QRElSIGlzIHNldHVpZCwgcGxlYXNlIGRvbid0IGJ1aWxkIGluIGEgc2V0dWlkIGRpcmVjdG9yeSIpCisKKyAgICAjIFNvbWUgdGhpcmQtcGFydHkgc29mdHdhcmUgYXBwYXJlbnRseSByZWxpZXMgb24gY2htb2QgZXRjLiBiZWluZyBzdWlkIHJvb3QgKCEhKQorICAgIGltcG9ydCBzdGF0CisgICAgc3VpZF9jaGVja19iaW5zID0gImNob3duIGNobW9kIG1rbm9kIi5zcGxpdCgpCisgICAgZm9yIGJpbl9jbWQgaW4gc3VpZF9jaGVja19iaW5zOgorICAgICAgICBiaW5fcGF0aCA9IGJiLnV0aWxzLndoaWNoKG9zLmVudmlyb25bIlBBVEgiXSwgYmluX2NtZCkKKyAgICAgICAgaWYgYmluX3BhdGg6CisgICAgICAgICAgICBiaW5fc3RhdCA9IG9zLnN0YXQoYmluX3BhdGgpCisgICAgICAgICAgICBpZiBiaW5fc3RhdC5zdF91aWQgPT0gMCBhbmQgYmluX3N0YXQuc3RfbW9kZSAmIHN0YXQuU19JU1VJRDoKKyAgICAgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCclcyBoYXMgdGhlIHNldHVpZCBiaXQgc2V0LiBUaGlzIGludGVyZmVyZXMgd2l0aCBwc2V1ZG8gYW5kIG1heSBjYXVzZSBvdGhlciBpc3N1ZXMgdGhhdCBicmVhayB0aGUgYnVpbGQgcHJvY2Vzcy5cbicgJSBiaW5fcGF0aCkKKworICAgICMgQ2hlY2sgdGhhdCB3ZSBjYW4gZmV0Y2ggZnJvbSB2YXJpb3VzIG5ldHdvcmsgdHJhbnNwb3J0cworICAgIG5ldGNoZWNrID0gY2hlY2tfY29ubmVjdGl2aXR5KGQpCisgICAgc3RhdHVzLmFkZHJlc3VsdChuZXRjaGVjaykKKyAgICBpZiBuZXRjaGVjazoKKyAgICAgICAgc3RhdHVzLm5ldHdvcmtfZXJyb3IgPSBUcnVlCisKKyAgICBub2xpYnMgPSBkLmdldFZhcignTk8zMkxJQlMnLCBUcnVlKQorICAgIGlmIG5vdCBub2xpYnM6CisgICAgICAgIGxpYjMycGF0aCA9ICcvbGliJworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygnL2xpYjY0JykgYW5kICggb3MucGF0aC5pc2xpbmsoJy9saWI2NCcpIG9yIG9zLnBhdGguaXNsaW5rKCcvbGliJykgKToKKyAgICAgICAgICAgbGliMzJwYXRoID0gJy9saWIzMicKKworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygnJXMvbGliYy5zby42JyAlIGxpYjMycGF0aCkgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cygnL3Vzci9pbmNsdWRlL2dudS9zdHVicy0zMi5oJyk6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJZb3UgaGF2ZSBhIDMyLWJpdCBsaWJjLCBidXQgbm8gMzItYml0IGhlYWRlcnMuICBZb3UgbXVzdCBpbnN0YWxsIHRoZSAzMi1iaXQgbGliYyBoZWFkZXJzLlxuIikKKworICAgIGJicGF0aHMgPSBkLmdldFZhcignQkJQQVRIJywgVHJ1ZSkuc3BsaXQoIjoiKQorICAgIGlmICgiLiIgaW4gYmJwYXRocyBvciAiLi8iIGluIGJicGF0aHMgb3IgIiIgaW4gYmJwYXRocykgYW5kIG5vdCBzdGF0dXMucmVwYXJzZToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiQkJQQVRIIHJlZmVyZW5jZXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBlaXRoZXIgdGhyb3VnaCAiICAgIFwKKyAgICAgICAgICAgICAgICAiYW4gZW1wdHkgZW50cnksIGEgJy4vJyBvciBhICcuJy5cblx0IFRoaXMgaXMgdW5zYWZlIGFuZCBtZWFucyB5b3VyICJcCisgICAgICAgICAgICAgICAgImxheWVyIGNvbmZpZ3VyYXRpb24gaXMgYWRkaW5nIGVtcHR5IGVsZW1lbnRzIHRvIEJCUEFUSC5cblx0ICJcCisgICAgICAgICAgICAgICAgIlBsZWFzZSBjaGVjayB5b3VyIGxheWVyLmNvbmYgZmlsZXMgYW5kIG90aGVyIEJCUEFUSCAiICAgICAgICBcCisgICAgICAgICAgICAgICAgInNldHRpbmdzIHRvIHJlbW92ZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAiICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgInJlZmVyZW5jZXMuXG4iIFwKKyAgICAgICAgICAgICAgICAiUGFyc2VkIEJCUEFUSCBpcyIgKyBzdHIoYmJwYXRocykpOworCisgICAgb2VzX2JiX2NvbmYgPSBkLmdldFZhciggJ09FU19CSVRCQUtFX0NPTkYnLCBUcnVlKQorICAgIGlmIG5vdCBvZXNfYmJfY29uZjoKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnWW91IGFyZSBub3QgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCB2ZXJzaW9uIG9mIGNvbmYvYml0YmFrZS5jb25mLiBUaGlzIG1lYW5zIHlvdXIgZW52aXJvbm1lbnQgaXMgbWlzY29uZmlndXJlZCwgaW4gcGFydGljdWxhciBjaGVjayBCQlBBVEguXG4nKQorCisgICAgIyBUaGUgbGVuZ3RoIG9mIFRNUERJUiBjYW4ndCBiZSBsb25nZXIgdGhhbiA0MTAKKyAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX3BhdGhfbGVuZ3RoKHRtcGRpciwgIlRNUERJUiIsIDQxMCkpCisKKyAgICAjIENoZWNrIHRoYXQgVE1QRElSIGlzbid0IGxvY2F0ZWQgb24gbmZzCisgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19ub3RfbmZzKHRtcGRpciwgIlRNUERJUiIpKQorCitkZWYgY2hlY2tfc2FuaXR5X2V2ZXJ5YnVpbGQoc3RhdHVzLCBkKToKKyAgICBpbXBvcnQgb3MsIHN0YXQKKyAgICAjIFNhbml0eSB0ZXN0cyB3aGljaCB0ZXN0IHRoZSB1c2VycyBlbnZpcm9ubWVudCBzbyBuZWVkIHRvIHJ1biBhdCBlYWNoIGJ1aWxkIChvciBhcmUgc28gY2hlYXAKKyAgICAjIGl0IG1ha2VzIHNlbnNlIHRvIGFsd2F5cyBydW4gdGhlbS4KKworICAgIGlmIDAgPT0gb3MuZ2V0dWlkKCk6CisgICAgICAgIHJhaXNlX3Nhbml0eV9lcnJvcigiRG8gbm90IHVzZSBCaXRiYWtlIGFzIHJvb3QuIiwgZCkKKworICAgICMgQ2hlY2sgdGhlIFB5dGhvbiB2ZXJzaW9uLCB3ZSBub3cgaGF2ZSBhIG1pbmltdW0gb2YgUHl0aG9uIDIuNy4zCisgICAgaW1wb3J0IHN5cworICAgIGlmIHN5cy5oZXh2ZXJzaW9uIDwgMHgwMjA3MDNGMDoKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnVGhlIHN5c3RlbSByZXF1aXJlcyBhdCBsZWFzdCBQeXRob24gMi43LjMgdG8gcnVuLiBQbGVhc2UgdXBkYXRlIHlvdXIgUHl0aG9uIGludGVycHJldGVyLlxuJykKKworICAgICMgQ2hlY2sgdGhlIGJpdGJha2UgdmVyc2lvbiBtZWV0cyBtaW5pbXVtIHJlcXVpcmVtZW50cworICAgIGZyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IExvb3NlVmVyc2lvbgorICAgIG1pbnZlcnNpb24gPSBkLmdldFZhcignQkJfTUlOX1ZFUlNJT04nLCBUcnVlKQorICAgIGlmIChMb29zZVZlcnNpb24oYmIuX192ZXJzaW9uX18pIDwgTG9vc2VWZXJzaW9uKG1pbnZlcnNpb24pKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnQml0YmFrZSB2ZXJzaW9uICVzIGlzIHJlcXVpcmVkIGFuZCB2ZXJzaW9uICVzIHdhcyBmb3VuZFxuJyAlIChtaW52ZXJzaW9uLCBiYi5fX3ZlcnNpb25fXykpCisKKyAgICBzYW5pdHlfY2hlY2tfY29uZmZpbGVzKHN0YXR1cywgZCkKKworICAgIHBhdGhzID0gZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKS5zcGxpdCgiOiIpCisgICAgaWYgIi4iIGluIHBhdGhzIG9yICIuLyIgaW4gcGF0aHMgb3IgIiIgaW4gcGF0aHM6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIlBBVEggY29udGFpbnMgJy4nLCAnLi8nIG9yICcnIChlbXB0eSBlbGVtZW50KSwgd2hpY2ggd2lsbCBicmVhayB0aGUgYnVpbGQsIHBsZWFzZSByZW1vdmUgdGhpcy5cblBhcnNlZCBQQVRIIGlzICIgKyBzdHIocGF0aHMpICsgIlxuIikKKworICAgICMgQ2hlY2sgdGhhdCB0aGUgRElTVFJPIGlzIHZhbGlkLCBpZiBzZXQKKyAgICAjIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgRElTVFJPIHJlbmFtaW5nIERJU1RSTworICAgIGRpc3RybyA9IGQuZ2V0VmFyKCdESVNUUk8nLCBUcnVlKQorICAgIGlmIGRpc3RybyBhbmQgZGlzdHJvICE9ICJub2Rpc3RybyI6CisgICAgICAgIGlmIG5vdCAoIGNoZWNrX2NvbmZfZXhpc3RzKCJjb25mL2Rpc3Ryby8ke0RJU1RST30uY29uZiIsIGQpIG9yIGNoZWNrX2NvbmZfZXhpc3RzKCJjb25mL2Rpc3Ryby9pbmNsdWRlLyR7RElTVFJPfS5pbmMiLCBkKSApOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRElTVFJPICclcycgbm90IGZvdW5kLiBQbGVhc2Ugc2V0IGEgdmFsaWQgRElTVFJPIGluIHlvdXIgbG9jYWwuY29uZlxuIiAlIGQuZ2V0VmFyKCJESVNUUk8iLCBUcnVlKSkKKworICAgICMgQ2hlY2sgdGhhdCBETF9ESVIgaXMgc2V0LCBleGlzdHMgYW5kIGlzIHdyaXRhYmxlLiBJbiB0aGVvcnksIHdlIHNob3VsZCBuZXZlciBldmVuIGhpdCB0aGUgY2hlY2sgaWYgRExfRElSIGlzbid0IAorICAgICMgc2V0LCBzaW5jZSBzbyBtdWNoIHJlbGllcyBvbiBpdCBiZWluZyBzZXQuCisgICAgZGxkaXIgPSBkLmdldFZhcignRExfRElSJywgVHJ1ZSkKKyAgICBpZiBub3QgZGxkaXI6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkRMX0RJUiBpcyBub3Qgc2V0LiBZb3VyIGVudmlyb25tZW50IGlzIG1pc2NvbmZpZ3VyZWQsIGNoZWNrIHRoYXQgRExfRElSIGlzIHNldCwgYW5kIGlmIHRoZSBkaXJlY3RvcnkgZXhpc3RzLCB0aGF0IGl0IGlzIHdyaXRhYmxlLiBcbiIpCisgICAgaWYgb3MucGF0aC5leGlzdHMoZGxkaXIpIGFuZCBub3Qgb3MuYWNjZXNzKGRsZGlyLCBvcy5XX09LKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRExfRElSOiAlcyBleGlzdHMgYnV0IHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUgd3JpdGUgYWNjZXNzIHRvIGl0LiBcbiIgJSBkbGRpcikKKyAgICBjaGVja19zeW1saW5rKGRsZGlyLCBkKQorCisgICAgIyBDaGVjayB0aGF0IHRoZSBNQUNISU5FIGlzIHZhbGlkLCBpZiBpdCBpcyBzZXQKKyAgICBtYWNoaW5ldmFsaWQgPSBUcnVlCisgICAgaWYgZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKToKKyAgICAgICAgaWYgbm90IGNoZWNrX2NvbmZfZXhpc3RzKCJjb25mL21hY2hpbmUvJHtNQUNISU5FfS5jb25mIiwgZCk6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdQbGVhc2Ugc2V0IGEgdmFsaWQgTUFDSElORSBpbiB5b3VyIGxvY2FsLmNvbmYgb3IgZW52aXJvbm1lbnRcbicpCisgICAgICAgICAgICBtYWNoaW5ldmFsaWQgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19zYW5pdHlfdmFsaWRtYWNoaW5lKGQpKQorICAgIGVsc2U6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ1BsZWFzZSBzZXQgYSBNQUNISU5FIGluIHlvdXIgbG9jYWwuY29uZiBvciBlbnZpcm9ubWVudFxuJykKKyAgICAgICAgbWFjaGluZXZhbGlkID0gRmFsc2UKKyAgICBpZiBtYWNoaW5ldmFsaWQ6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfdG9vbGNoYWluKGQpKQorCisgICAgIyBDaGVjayB0aGF0IHRoZSBTREtNQUNISU5FIGlzIHZhbGlkLCBpZiBpdCBpcyBzZXQKKyAgICBpZiBkLmdldFZhcignU0RLTUFDSElORScsIFRydWUpOgorICAgICAgICBpZiBub3QgY2hlY2tfY29uZl9leGlzdHMoImNvbmYvbWFjaGluZS1zZGsvJHtTREtNQUNISU5FfS5jb25mIiwgZCk6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdTcGVjaWZpZWQgU0RLTUFDSElORSB2YWx1ZSBpcyBub3QgdmFsaWRcbicpCisgICAgICAgIGVsaWYgZC5nZXRWYXIoJ1NES19BUkNIJywgRmFsc2UpID09ICIke0JVSUxEX0FSQ0h9IjoKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ1NES01BQ0hJTkUgaXMgc2V0LCBidXQgU0RLX0FSQ0ggaGFzIG5vdCBiZWVuIGNoYW5nZWQgYXMgYSByZXN1bHQgLSBTREtNQUNISU5FIG1heSBoYXZlIGJlZW4gc2V0IHRvbyBsYXRlIChlLmcuIGluIHRoZSBkaXN0cm8gY29uZmlndXJhdGlvbilcbicpCisKKyAgICBjaGVja19zdXBwb3J0ZWRfZGlzdHJvKGQpCisKKyAgICAjIENoZWNrIGlmIERJU1BMQVkgaXMgc2V0IGlmIFRFU1RfSU1BR0UgaXMgc2V0CisgICAgaWYgZC5nZXRWYXIoJ1RFU1RfSU1BR0UnLCBUcnVlKSA9PSAnMScgb3IgZC5nZXRWYXIoJ0RFRkFVTFRfVEVTVF9TVUlURVMnLCBUcnVlKToKKyAgICAgICAgdGVzdHRhcmdldCA9IGQuZ2V0VmFyKCdURVNUX1RBUkdFVCcsIFRydWUpCisgICAgICAgIGlmIHRlc3R0YXJnZXQgPT0gJ3FlbXUnIG9yIHRlc3R0YXJnZXQgPT0gJ1FlbXVUYXJnZXQnOgorICAgICAgICAgICAgZGlzcGxheSA9IGQuZ2V0VmFyKCJCQl9PUklHRU5WIiwgRmFsc2UpLmdldFZhcigiRElTUExBWSIsIFRydWUpCisgICAgICAgICAgICBpZiBub3QgZGlzcGxheToKKyAgICAgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCd0ZXN0aW1hZ2UgbmVlZHMgYW4gWCBkZXNrdG9wIHRvIHN0YXJ0IHFlbXUsIHBsZWFzZSBzZXQgRElTUExBWSBjb3JyZWN0bHkgKGUuZy4gRElTUExBWT06MS4wKVxuJykKKworICAgIG9tYXNrID0gb3MudW1hc2soMDIyKQorICAgIGlmIG9tYXNrICYgMDc1NToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiUGxlYXNlIHVzZSBhIHVtYXNrIHdoaWNoIGFsbG93cyBhK3J4IGFuZCB1K3J3eFxuIikKKyAgICBvcy51bWFzayhvbWFzaykKKworICAgIGlmIGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpID09ICJhcm0iOgorICAgICAgICAjIFRoaXMgcGF0aCBpcyBubyBsb25nZXIgdXNlci1yZWFkYWJsZSBpbiBtb2Rlcm4gKHZlcnkgcmVjZW50KSBMaW51eAorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIiKToKKyAgICAgICAgICAgICAgICBmID0gb3BlbigiL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIiLCAiciIpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpZiAoaW50KGYucmVhZCgpLnN0cmlwKCkpID4gNjU1MzYpOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIgaXMgbm90IDw9IDY1NTM2LiBUaGlzIHdpbGwgY2F1c2UgcHJvYmxlbXMgd2l0aCBxZW11IHNvIHBsZWFzZSBmaXggdGhlIHZhbHVlIChhcyByb290KS5cblxuVG8gZml4IHRoaXMgaW4gbGF0ZXIgcmVib290cywgc2V0IHZtLm1tYXBfbWluX2FkZHIgPSA2NTUzNiBpbiAvZXRjL3N5c2N0bC5jb25mLlxuIikKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgb2Vyb290ID0gZC5nZXRWYXIoJ0NPUkVCQVNFJywgVHJ1ZSkKKyAgICBpZiBvZXJvb3QuZmluZCgnKycpICE9IC0xOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgeW91IGhhdmUgYW4gaW52YWxpZCBjaGFyYWN0ZXIgKCspIGluIHlvdXIgQ09SRUJBU0UgZGlyZWN0b3J5IHBhdGguIFBsZWFzZSBtb3ZlIHRoZSBpbnN0YWxsYXRpb24gdG8gYSBkaXJlY3Rvcnkgd2hpY2ggZG9lc24ndCBpbmNsdWRlIGFueSArIGNoYXJhY3RlcnMuIikKKyAgICBpZiBvZXJvb3QuZmluZCgnQCcpICE9IC0xOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgeW91IGhhdmUgYW4gaW52YWxpZCBjaGFyYWN0ZXIgKEApIGluIHlvdXIgQ09SRUJBU0UgZGlyZWN0b3J5IHBhdGguIFBsZWFzZSBtb3ZlIHRoZSBpbnN0YWxsYXRpb24gdG8gYSBkaXJlY3Rvcnkgd2hpY2ggZG9lc24ndCBpbmNsdWRlIGFueSBAIGNoYXJhY3RlcnMuIikKKyAgICBpZiBvZXJvb3QuZmluZCgnICcpICE9IC0xOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgeW91IGhhdmUgYSBzcGFjZSBpbiB5b3VyIENPUkVCQVNFIGRpcmVjdG9yeSBwYXRoLiBQbGVhc2UgbW92ZSB0aGUgaW5zdGFsbGF0aW9uIHRvIGEgZGlyZWN0b3J5IHdoaWNoIGRvZXNuJ3QgaW5jbHVkZSBhIHNwYWNlIHNpbmNlIGF1dG90b29scyBkb2Vzbid0IHN1cHBvcnQgdGhpcy4iKQorCisgICAgIyBDaGVjayB0aGUgZm9ybWF0IG9mIE1JUlJPUlMsIFBSRU1JUlJPUlMgYW5kIFNTVEFURV9NSVJST1JTCisgICAgaW1wb3J0IHJlCisgICAgbWlycm9yX3ZhcnMgPSBbJ01JUlJPUlMnLCAnUFJFTUlSUk9SUycsICdTU1RBVEVfTUlSUk9SUyddCisgICAgcHJvdG9jb2xzID0gWydodHRwJywgJ2Z0cCcsICdmaWxlJywgJ2h0dHBzJywgXAorICAgICAgICAgICAgICAgICAnZ2l0JywgJ2dpdHNtJywgJ2hnJywgJ29zYycsICdwNCcsICdzdm4nLCBcCisgICAgICAgICAgICAgICAgICdienInLCAnY3ZzJ10KKyAgICBmb3IgbWlycm9yX3ZhciBpbiBtaXJyb3JfdmFyczoKKyAgICAgICAgbWlycm9ycyA9IChkLmdldFZhcihtaXJyb3JfdmFyLCBUcnVlKSBvciAnJykucmVwbGFjZSgnXFxuJywgJ1xuJykuc3BsaXQoJ1xuJykKKyAgICAgICAgZm9yIG1pcnJvcl9lbnRyeSBpbiBtaXJyb3JzOgorICAgICAgICAgICAgbWlycm9yX2VudHJ5ID0gbWlycm9yX2VudHJ5LnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBtaXJyb3JfZW50cnk6CisgICAgICAgICAgICAgICAgIyBpZ25vcmUgYmxhbmsgbGluZXMKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGF0dGVybiwgbWlycm9yID0gbWlycm9yX2VudHJ5LnNwbGl0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGJiLndhcm4oJ0ludmFsaWQgJXM6ICVzLCBzaG91bGQgYmUgMiBtZW1iZXJzLicgJSAobWlycm9yX3ZhciwgbWlycm9yX2VudHJ5LnN0cmlwKCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRlY29kZWQgPSBiYi5mZXRjaDIuZGVjb2RldXJsKHBhdHRlcm4pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGF0dGVybl9zY2hlbWUgPSByZS5jb21waWxlKGRlY29kZWRbMF0pCisgICAgICAgICAgICBleGNlcHQgcmUuZXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGJiLndhcm4oJ0ludmFsaWQgc2NoZW1lIHJlZ2V4ICglcykgaW4gJXM7ICVzJyAlIChwYXR0ZXJuLCBtaXJyb3JfdmFyLCBtaXJyb3JfZW50cnkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIG5vdCBhbnkocGF0dGVybl9zY2hlbWUubWF0Y2gocHJvdG9jb2wpIGZvciBwcm90b2NvbCBpbiBwcm90b2NvbHMpOgorICAgICAgICAgICAgICAgIGJiLndhcm4oJ0ludmFsaWQgcHJvdG9jb2wgKCVzKSBpbiAlczogJXMnICUgKGRlY29kZWRbMF0sIG1pcnJvcl92YXIsIG1pcnJvcl9lbnRyeSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbm90IGFueShtaXJyb3Iuc3RhcnRzd2l0aChwcm90b2NvbCArICc6Ly8nKSBmb3IgcHJvdG9jb2wgaW4gcHJvdG9jb2xzKToKKyAgICAgICAgICAgICAgICBiYi53YXJuKCdJbnZhbGlkIHByb3RvY29sIGluICVzOiAlcycgJSAobWlycm9yX3ZhciwgbWlycm9yX2VudHJ5KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBtaXJyb3Iuc3RhcnRzd2l0aCgnZmlsZTovLycpOgorICAgICAgICAgICAgICAgIGltcG9ydCB1cmxwYXJzZQorICAgICAgICAgICAgICAgIGNoZWNrX3N5bWxpbmsodXJscGFyc2UudXJscGFyc2UobWlycm9yKS5wYXRoLCBkKQorICAgICAgICAgICAgICAgICMgU1NUQVRFX01JUlJPUiBlbmRzIHdpdGggYSAvUEFUSCBzdHJpbmcKKyAgICAgICAgICAgICAgICBpZiBtaXJyb3IuZW5kc3dpdGgoJy9QQVRIJyk6CisgICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlIC9QQVRIJCBmcm9tIFNTVEFURV9NSVJST1IgdG8gZ2V0IGEgd29ya2luZworICAgICAgICAgICAgICAgICAgICAjIGJhc2UgZGlyZWN0b3J5IHBhdGgKKyAgICAgICAgICAgICAgICAgICAgbWlycm9yX2Jhc2UgPSB1cmxwYXJzZS51cmxwYXJzZShtaXJyb3JbOi0xKmxlbignL1BBVEgnKV0pLnBhdGgKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tfc3ltbGluayhtaXJyb3JfYmFzZSwgZCkKKworICAgICMgQ2hlY2sgdGhhdCBUTVBESVIgaGFzbid0IGNoYW5nZWQgbG9jYXRpb24gc2luY2UgdGhlIGxhc3QgdGltZSB3ZSB3ZXJlIHJ1bgorICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgIGNoZWNrZmlsZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICJzYXZlZF90bXBkaXIiKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGNoZWNrZmlsZSk6CisgICAgICAgIHdpdGggb3BlbihjaGVja2ZpbGUsICJyIikgYXMgZjoKKyAgICAgICAgICAgIHNhdmVkX3RtcGRpciA9IGYucmVhZCgpLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIChzYXZlZF90bXBkaXIgIT0gdG1wZGlyKToKKyAgICAgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgVE1QRElSIGhhcyBjaGFuZ2VkIGxvY2F0aW9uLiBZb3UgbmVlZCB0byBlaXRoZXIgbW92ZSBpdCBiYWNrIHRvICVzIG9yIHJlYnVpbGRcbiIgJSBzYXZlZF90bXBkaXIpCisgICAgZWxzZToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHRtcGRpcikKKyAgICAgICAgIyBSZW1vdmUgc2V0dWlkLCBzZXRnaWQgYW5kIHN0aWNreSBiaXRzIGZyb20gVE1QRElSCisgICAgICAgIG9zLmNobW9kKHRtcGRpciwgb3Muc3RhdCh0bXBkaXIpLnN0X21vZGUgJiB+IHN0YXQuU19JU1VJRCkKKyAgICAgICAgb3MuY2htb2QodG1wZGlyLCBvcy5zdGF0KHRtcGRpcikuc3RfbW9kZSAmIH4gc3RhdC5TX0lTR0lEKQorICAgICAgICBvcy5jaG1vZCh0bXBkaXIsIG9zLnN0YXQodG1wZGlyKS5zdF9tb2RlICYgfiBzdGF0LlNfSVNWVFgpCisgICAgICAgIHdpdGggb3BlbihjaGVja2ZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUodG1wZGlyKQorCisgICAgIyBDaGVjayB2bWRrIGFuZCBsaXZlIGNhbid0IGJlIGJ1aWx0IHRvZ2V0aGVyLgorICAgIGlmICd2bWRrJyBpbiBkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpIGFuZCAnbGl2ZScgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRXJyb3IsIElNQUdFX0ZTVFlQRVMgdm1kayBhbmQgbGl2ZSBjYW4ndCBiZSBidWlsdCB0b2dldGhlclxuIikKKworICAgICMgQ2hlY2sgdmRpIGFuZCBsaXZlIGNhbid0IGJlIGJ1aWx0IHRvZ2V0aGVyLgorICAgIGlmICd2ZGknIGluIGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSkgYW5kICdsaXZlJyBpbiBkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgSU1BR0VfRlNUWVBFUyB2ZGkgYW5kIGxpdmUgY2FuJ3QgYmUgYnVpbHQgdG9nZXRoZXJcbiIpCisKKyAgICAjIENoZWNrIHFjb3cyIGFuZCBsaXZlIGNhbid0IGJlIGJ1aWx0IHRvZ2V0aGVyLgorICAgIGlmICdxY293MicgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKSBhbmQgJ2xpdmUnIGluIGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSk6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCBJTUFHRV9GU1RZUEVTIHFjb3cyIGFuZCBsaXZlIGNhbid0IGJlIGJ1aWx0IHRvZ2V0aGVyXG4iKQorCisgICAgIyBDaGVjayAvYmluL3NoIGxpbmtzIHRvIGRhc2ggb3IgYmFzaAorICAgIHJlYWxfc2ggPSBvcy5wYXRoLnJlYWxwYXRoKCcvYmluL3NoJykKKyAgICBpZiBub3QgcmVhbF9zaC5lbmRzd2l0aCgnL2Rhc2gnKSBhbmQgbm90IHJlYWxfc2guZW5kc3dpdGgoJy9iYXNoJyk6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCAvYmluL3NoIGxpbmtzIHRvICVzLCBtdXN0IGJlIGRhc2ggb3IgYmFzaFxuIiAlIHJlYWxfc2gpCisKK2RlZiBjaGVja19zYW5pdHkoc2FuaXR5X2RhdGEpOgorICAgIGNsYXNzIFNhbml0eVN0YXR1cyhvYmplY3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzZWxmLm1lc3NhZ2VzID0gIiIKKyAgICAgICAgICAgIHNlbGYubmV0d29ya19lcnJvciA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLnJlcGFyc2UgPSBGYWxzZQorCisgICAgICAgIGRlZiBhZGRyZXN1bHQoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICAgICBpZiBtZXNzYWdlOgorICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZXMgPSBzZWxmLm1lc3NhZ2VzICsgbWVzc2FnZQorCisgICAgc3RhdHVzID0gU2FuaXR5U3RhdHVzKCkKKworICAgIHRtcGRpciA9IHNhbml0eV9kYXRhLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICBzc3RhdGVfZGlyID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdTU1RBVEVfRElSJywgVHJ1ZSkKKworICAgIGNoZWNrX3N5bWxpbmsoc3N0YXRlX2Rpciwgc2FuaXR5X2RhdGEpCisKKyAgICAjIENoZWNrIHNhdmVkIHNhbml0eSBpbmZvCisgICAgbGFzdF9zYW5pdHlfdmVyc2lvbiA9IDAKKyAgICBsYXN0X3RtcGRpciA9ICIiCisgICAgbGFzdF9zc3RhdGVfZGlyID0gIiIKKyAgICBzYW5pdHl2ZXJmaWxlID0gc2FuaXR5X2RhdGEuZXhwYW5kKCIke1RPUERJUn0vY29uZi9zYW5pdHlfaW5mbyIpCisgICAgaWYgb3MucGF0aC5leGlzdHMoc2FuaXR5dmVyZmlsZSk6CisgICAgICAgIHdpdGggb3BlbihzYW5pdHl2ZXJmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnU0FOSVRZX1ZFUlNJT04nKToKKyAgICAgICAgICAgICAgICAgICAgbGFzdF9zYW5pdHlfdmVyc2lvbiA9IGludChsaW5lLnNwbGl0KClbMV0pCisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdUTVBESVInKToKKyAgICAgICAgICAgICAgICAgICAgbGFzdF90bXBkaXIgPSBsaW5lLnNwbGl0KClbMV0KKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1NTVEFURV9ESVInKToKKyAgICAgICAgICAgICAgICAgICAgbGFzdF9zc3RhdGVfZGlyID0gbGluZS5zcGxpdCgpWzFdCisKKyAgICBjaGVja19zYW5pdHlfZXZlcnlidWlsZChzdGF0dXMsIHNhbml0eV9kYXRhKQorICAgIAorICAgIHNhbml0eV92ZXJzaW9uID0gaW50KHNhbml0eV9kYXRhLmdldFZhcignU0FOSVRZX1ZFUlNJT04nLCBUcnVlKSBvciAxKQorICAgIG5ldHdvcmtfZXJyb3IgPSBGYWxzZQorICAgIGlmIGxhc3Rfc2FuaXR5X3ZlcnNpb24gPCBzYW5pdHlfdmVyc2lvbjogCisgICAgICAgIGNoZWNrX3Nhbml0eV92ZXJzaW9uX2NoYW5nZShzdGF0dXMsIHNhbml0eV9kYXRhKQorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX3Nhbml0eV9zc3RhdGVfZGlyX2NoYW5nZShzc3RhdGVfZGlyLCBzYW5pdHlfZGF0YSkpCisgICAgZWxzZTogCisgICAgICAgIGlmIGxhc3Rfc3N0YXRlX2RpciAhPSBzc3RhdGVfZGlyOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19zYW5pdHlfc3N0YXRlX2Rpcl9jaGFuZ2Uoc3N0YXRlX2Rpciwgc2FuaXR5X2RhdGEpKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5kaXJuYW1lKHNhbml0eXZlcmZpbGUpKSBhbmQgbm90IHN0YXR1cy5tZXNzYWdlczoKKyAgICAgICAgd2l0aCBvcGVuKHNhbml0eXZlcmZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIlNBTklUWV9WRVJTSU9OICVzXG4iICUgc2FuaXR5X3ZlcnNpb24pIAorICAgICAgICAgICAgZi53cml0ZSgiVE1QRElSICVzXG4iICUgdG1wZGlyKSAKKyAgICAgICAgICAgIGYud3JpdGUoIlNTVEFURV9ESVIgJXNcbiIgJSBzc3RhdGVfZGlyKSAKKworICAgIHNhbml0eV9oYW5kbGVfYWJpY2hhbmdlcyhzdGF0dXMsIHNhbml0eV9kYXRhKQorCisgICAgaWYgc3RhdHVzLm1lc3NhZ2VzICE9ICIiOgorICAgICAgICByYWlzZV9zYW5pdHlfZXJyb3Ioc2FuaXR5X2RhdGEuZXhwYW5kKHN0YXR1cy5tZXNzYWdlcyksIHNhbml0eV9kYXRhLCBzdGF0dXMubmV0d29ya19lcnJvcikKKyAgICByZXR1cm4gc3RhdHVzLnJlcGFyc2UKKworIyBDcmVhdGUgYSBjb3B5IG9mIHRoZSBkYXRhc3RvcmUgYW5kIGZpbmFsaXNlIGl0IHRvIGVuc3VyZSBhcHBlbmRzIGFuZCAKKyMgb3ZlcnJpZGVzIGFyZSBzZXQgLSB0aGUgZGF0YXN0b3JlIGhhcyB5ZXQgdG8gYmUgZmluYWxpc2VkIGF0IENvbmZpZ1BhcnNlZAorZGVmIGNvcHlfZGF0YShlKToKKyAgICBzYW5pdHlfZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShlLmRhdGEpCisgICAgc2FuaXR5X2RhdGEuZmluYWxpemUoKQorICAgIHJldHVybiBzYW5pdHlfZGF0YQorCithZGRoYW5kbGVyIGNoZWNrX3Nhbml0eV9ldmVudGhhbmRsZXIKK2NoZWNrX3Nhbml0eV9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5TYW5pdHlDaGVjayBiYi5ldmVudC5OZXR3b3JrVGVzdCIKK3B5dGhvbiBjaGVja19zYW5pdHlfZXZlbnRoYW5kbGVyKCkgeworICAgIGlmIGJiLmV2ZW50LmdldE5hbWUoZSkgPT0gIlNhbml0eUNoZWNrIjoKKyAgICAgICAgc2FuaXR5X2RhdGEgPSBjb3B5X2RhdGEoZSkKKyAgICAgICAgaWYgZS5nZW5lcmF0ZWV2ZW50czoKKyAgICAgICAgICAgIHNhbml0eV9kYXRhLnNldFZhcigiU0FOSVRZX1VTRV9FVkVOVFMiLCAiMSIpCisgICAgICAgIHJlcGFyc2UgPSBjaGVja19zYW5pdHkoc2FuaXR5X2RhdGEpCisgICAgICAgIGUuZGF0YS5zZXRWYXIoIkJCX0lOVkFMSURDT05GIiwgcmVwYXJzZSkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5TYW5pdHlDaGVja1Bhc3NlZCgpLCBlLmRhdGEpCisgICAgZWxpZiBiYi5ldmVudC5nZXROYW1lKGUpID09ICJOZXR3b3JrVGVzdCI6CisgICAgICAgIHNhbml0eV9kYXRhID0gY29weV9kYXRhKGUpCisgICAgICAgIGlmIGUuZ2VuZXJhdGVldmVudHM6CisgICAgICAgICAgICBzYW5pdHlfZGF0YS5zZXRWYXIoIlNBTklUWV9VU0VfRVZFTlRTIiwgIjEiKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk5ldHdvcmtUZXN0RmFpbGVkKCkgaWYgY2hlY2tfY29ubmVjdGl2aXR5KHNhbml0eV9kYXRhKSBlbHNlIGJiLmV2ZW50Lk5ldHdvcmtUZXN0UGFzc2VkKCksIGUuZGF0YSkKKworICAgIHJldHVybgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2NvbnMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Njb25zLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhkZTgyMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Njb25zLmJiY2xhc3MKQEAgLTAsMCArMSwxNSBAQAorREVQRU5EUyArPSAicHl0aG9uLXNjb25zLW5hdGl2ZSIKKworRVhUUkFfT0VTQ09OUyA/PSAiIgorCitzY29uc19kb19jb21waWxlKCkgeworICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vc2NvbnMgJHtQQVJBTExFTF9NQUtFfSBQUkVGSVg9JHtwcmVmaXh9IHByZWZpeD0ke3ByZWZpeH0gJHtFWFRSQV9PRVNDT05TfSB8fCBcCisgICAgICAgIGRpZSAic2NvbnMgYnVpbGQgZXhlY3V0aW9uIGZhaWxlZC4iCit9CisKK3Njb25zX2RvX2luc3RhbGwoKSB7CisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9zY29ucyBQUkVGSVg9JHtEfSR7cHJlZml4fSBwcmVmaXg9JHtEfSR7cHJlZml4fSBpbnN0YWxsICR7RVhUUkFfT0VTQ09OU318fCBcCisgICAgICAgIGRpZSAic2NvbnMgaW5zdGFsbCBleGVjdXRpb24gZmFpbGVkLiIKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb21waWxlIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NkbC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2RsLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MzMTI4OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NkbC5iYmNsYXNzCkBAIC0wLDAgKzEsNiBAQAorIworIyAoQykgTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QFZhbmlsbGUuZGU+CisjCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlic2RsIGxpYnNkbC1taXhlciBsaWJzZGwtaW1hZ2UiCitTRUNUSU9OID0gIngxMS9nYW1lcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NldHVwdG9vbHMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NldHVwdG9vbHMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjM0M2IxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2V0dXB0b29scy5iYmNsYXNzCkBAIC0wLDAgKzEsOCBAQAoraW5oZXJpdCBkaXN0dXRpbHMKKworREVQRU5EUyArPSAicHl0aG9uLWRpc3RyaWJ1dGUtbmF0aXZlIgorCitESVNUVVRJTFNfSU5TVEFMTF9BUkdTID0gIi0tcm9vdD0ke0R9IFwKKyAgICAtLXByZWZpeD0ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1saWI9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7ZGF0YWRpcn0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zZXR1cHRvb2xzMy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2V0dXB0b29sczMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTZkZDk0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2V0dXB0b29sczMuYmJjbGFzcwpAQCAtMCwwICsxLDggQEAKK2luaGVyaXQgZGlzdHV0aWxzMworCitERVBFTkRTICs9ICJweXRob24zLXNldHVwdG9vbHMtbmF0aXZlIgorCitESVNUVVRJTFNfSU5TVEFMTF9BUkdTID0gIi0tcm9vdD0ke0R9IFwKKyAgICAtLXByZWZpeD0ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1saWI9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7ZGF0YWRpcn0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zaWduX3JwbS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2lnbl9ycG0uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWE0Y2Q4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2lnbl9ycG0uYmJjbGFzcwpAQCAtMCwwICsxLDc1IEBACisjIENsYXNzIGZvciBnZW5lcmF0aW5nIHNpZ25lZCBSUE0gcGFja2FnZXMuCisjCisjIENvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHVzZWQgYnkgdGhpcyBjbGFzczoKKyMgUlBNX0dQR19QQVNTUEhSQVNFX0ZJTEUKKyMgICAgICAgICAgIFBhdGggdG8gYSBmaWxlIGNvbnRhaW5pbmcgdGhlIHBhc3NwaHJhc2Ugb2YgdGhlIHNpZ25pbmcga2V5LgorIyBSUE1fR1BHX05BTUUKKyMgICAgICAgICAgIE5hbWUgb2YgdGhlIGtleSB0byBzaWduIHdpdGguIEFsdGVybmF0aXZlbHkgeW91IGNhbiBkZWZpbmUKKyMgICAgICAgICAgICVfZ3BnX25hbWUgbWFjcm8gaW4geW91ciB+Ly5vZXJwbW1hY3JvcyBmaWxlLgorIyBSUE1fR1BHX1BVQktFWQorIyAgICAgICAgICAgUGF0aCB0byBhIGZpbGUgY29udGFpbmluZyB0aGUgcHVibGljIGtleSAoaW4gImFybW9yIiBmb3JtYXQpCisjICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRoZSBzaWduaW5nIGtleS4KKyMgR1BHX0JJTgorIyAgICAgICAgICAgT3B0aW9uYWwgdmFyaWFibGUgZm9yIHNwZWNpZnlpbmcgdGhlIGdwZyBiaW5hcnkvd3JhcHBlciB0byB1c2UgZm9yCisjICAgICAgICAgICBzaWduaW5nLgorIworaW5oZXJpdCBzYW5pdHkKKworUlBNX1NJR05fUEFDS0FHRVM9JzEnCisKKworX2NoZWNrX2dwZ19uYW1lICgpIHsKKyAgICBtYWNyb2RlZj1gcnBtIC1FICclX2dwZ19uYW1lJ2AKKyAgICBbICIkbWFjcm9kZWYiID09ICIlX2dwZ19uYW1lIiBdICYmIHJldHVybiAxIHx8IHJldHVybiAwCit9CisKKworZGVmIHJwbXNpZ25fd3JhcHBlcihkLCBmaWxlcywgcGFzc3BocmFzZSwgZ3BnX25hbWU9Tm9uZSk6CisgICAgaW1wb3J0IHBleHBlY3QKKworICAgICMgRmluZCB0aGUgY29ycmVjdCBycG0gYmluYXJ5CisgICAgcnBtX2Jpbl9wYXRoID0gZC5nZXRWYXIoJ1NUQUdJTkdfQklORElSX05BVElWRScsIFRydWUpICsgJy9ycG0nCisgICAgY21kID0gcnBtX2Jpbl9wYXRoICsgIiAtLWFkZHNpZ24gIgorICAgIGlmIGdwZ19uYW1lOgorICAgICAgICBjbWQgKz0gIi0tZGVmaW5lICclJV9ncGdfbmFtZSAlcycgIiAlIGdwZ19uYW1lCisgICAgZWxzZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdfY2hlY2tfZ3BnX25hbWUnLCBkKQorICAgICAgICBleGNlcHQgYmIuYnVpbGQuRnVuY0ZhaWxlZDoKKyAgICAgICAgICAgIHJhaXNlX3Nhbml0eV9lcnJvcigiWW91IG5lZWQgdG8gZGVmaW5lIFJQTV9HUEdfTkFNRSBpbiBiaXRiYWtlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uZmlnIG9yIHRoZSAlX2dwZ19uYW1lIFJQTSBtYWNybyBkZWZpbmVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGUuZy4gaW4gIH4vLm9lcnBtbWFjcm9zIiwgZCkKKyAgICBpZiBkLmdldFZhcignR1BHX0JJTicsIFRydWUpOgorICAgICAgICBjbWQgKz0gIi0tZGVmaW5lICclJV9fZ3BnICVzJyAiICUgZC5nZXRWYXIoJ0dQR19CSU4nLCBUcnVlKQorICAgIGNtZCArPSAnICcuam9pbihmaWxlcykKKworICAgICMgTmVlZCB0byB1c2UgcGV4cGVjdCBmb3IgZmVlZGluZyB0aGUgcGFzc3BocmFzZQorICAgIHByb2MgPSBwZXhwZWN0LnNwYXduKGNtZCkKKyAgICB0cnk6CisgICAgICAgIHByb2MuZXhwZWN0X2V4YWN0KCdFbnRlciBwYXNzIHBocmFzZTonLCB0aW1lb3V0PTE1KQorICAgICAgICBwcm9jLnNlbmRsaW5lKHBhc3NwaHJhc2UpCisgICAgICAgIHByb2MuZXhwZWN0KHBleHBlY3QuRU9GLCB0aW1lb3V0PTkwMCkKKyAgICAgICAgcHJvYy5jbG9zZSgpCisgICAgZXhjZXB0IHBleHBlY3QuVElNRU9VVCBhcyBlcnI6CisgICAgICAgIGJiLmRlYnVnKCdycG1zaWduIHRpbWVvdXQ6ICVzJyAlIGVycikKKyAgICAgICAgcHJvYy50ZXJtaW5hdGUoKQorICAgIHJldHVybiBwcm9jLmV4aXRzdGF0dXMKKworCitweXRob24gc2lnbl9ycG0gKCkgeworICAgIGltcG9ydCBnbG9iCisKKyAgICBycG1fZ3BnX3Bhc3NfZmlsZSA9IChkLmdldFZhcigiUlBNX0dQR19QQVNTUEhSQVNFX0ZJTEUiLCBUcnVlKSBvciAiIikKKyAgICBpZiBycG1fZ3BnX3Bhc3NfZmlsZToKKyAgICAgICAgd2l0aCBvcGVuKHJwbV9ncGdfcGFzc19maWxlKSBhcyBmb2JqOgorICAgICAgICAgICAgcnBtX2dwZ19wYXNzcGhyYXNlID0gZm9iai5yZWFkbGluZXMoKVswXS5yc3RyaXAoJ1xuJykKKyAgICBlbHNlOgorICAgICAgICByYWlzZV9zYW5pdHlfZXJyb3IoIllvdSBuZWVkIHRvIGRlZmluZSBSUE1fR1BHX1BBU1NQSFJBU0VfRklMRSBpbiB0aGUgY29uZmlnIiwgZCkKKworICAgIHJwbV9ncGdfbmFtZSA9IChkLmdldFZhcigiUlBNX0dQR19OQU1FIiwgVHJ1ZSkgb3IgIiIpCisKKyAgICBycG1zID0gZ2xvYi5nbG9iKGQuZ2V0VmFyKCdSUE1fUEtHV1JJVEVESVInLCBUcnVlKSArICcvKicpCisKKyAgICBpZiBycG1zaWduX3dyYXBwZXIoZCwgcnBtcywgcnBtX2dwZ19wYXNzcGhyYXNlLCBycG1fZ3BnX25hbWUpICE9IDA6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIlJQTSBzaWduaW5nIGZhaWxlZCIpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zaXAuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NpcC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZDJhMTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zaXAuYmJjbGFzcwpAQCAtMCwwICsxLDYxIEBACisjIEJ1aWxkIENsYXNzIGZvciBTaXAgYmFzZWQgUHl0aG9uIEJpbmRpbmdzCisjIChDKSBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAVmFuaWxsZS5kZT4KKyMKK1NUQUdJTkdfU0lQRElSID89ICIke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L3NpcCIKKworREVQRU5EUyAgPSsgInNpcC1uYXRpdmUiCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLXNpcCIKKworIyBkZWZhdWx0IHN0dWZmLCBkbyBub3QgdW5jb21tZW50CisjIEVYVFJBX1NJUFRBR1MgPSAiLXRXU19YMTEgLXRRdF80XzNfMCIKKworIyBkb19nZW5lcmF0ZSBpcyBiZWZvcmUgZG9fY29uZmlndXJlIHNvIGVuc3VyZSB0aGF0IHNpcF9uYXRpdmUgaXMgcG9wdWxhdGVkIGluIHN5c3Jvb3QgYmVmb3JlIGV4ZWN1dGluZyBpdAorZG9fZ2VuZXJhdGVbZGVwZW5kc10gKz0gInNpcC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworc2lwX2RvX2dlbmVyYXRlKCkgeworCWlmIFsgLXogIiR7U0lQX01PRFVMRVN9IiBdOyB0aGVuIAorCQlNT0RVTEVTPSJgbHMgc2lwLyptb2Quc2lwYCIKKwllbHNlCisJCU1PRFVMRVM9IiR7U0lQX01PRFVMRVN9IgorCWZpCisKKwlpZiBbIC16ICIkTU9EVUxFUyIgXTsgdGhlbgorCQlkaWUgIlNJUF9NT0RVTEVTIG5vdCBzZXQgYW5kIG5vIG1vZHVsZXMgZm91bmQgaW4gJFBXRCIKKyAgICAgICAgZWxzZQorCQliYm5vdGUgInVzaW5nIG1vZHVsZXMgJyR7U0lQX01PRFVMRVN9JyBhbmQgdGFncyAnJHtFWFRSQV9TSVBUQUdTfSciCisJZmkKKworCWlmIFsgLXogIiR7RVhUUkFfU0lQVEFHU30iIF07IHRoZW4KKwkJZGllICJFWFRSQV9TSVBUQUdTIG5lZWRzIHRvIGJlIHNldCEiCisJZWxzZQorCQlTSVBUQUdTPSIke0VYVFJBX1NJUFRBR1N9IgorCWZpCisKKwlpZiBbICEgLXogIiR7U0lQX0ZFQVRVUkVTfSIgXTsgdGhlbgorCQlGRUFUVVJFUz0iLXogJHtTSVBfRkVBVFVSRVN9IgorCQliYm5vdGUgInNpcCBmZWF0dXJlIGZpbGU6ICR7U0lQX0ZFQVRVUkVTfSIKKwlmaQorCisJZm9yIG1vZHVsZSBpbiAkTU9EVUxFUworCWRvCisJCWluc3RhbGwgLWQgJHttb2R1bGV9LworCQllY2hvICJjYWxsaW5nICdzaXA0IC1JIHNpcCAtSSAke1NUQUdJTkdfU0lQRElSfSAke1NJUFRBR1N9ICR7RkVBVFVSRVN9IC1jICR7bW9kdWxlfSAtYiAke21vZHVsZX0vJHttb2R1bGV9LnByby5pbiBzaXAvJHttb2R1bGV9LyR7bW9kdWxlfW1vZC5zaXAnIgorCQlzaXA0IC1JICR7U1RBR0lOR19TSVBESVJ9IC1JIHNpcCAke1NJUFRBR1N9ICR7RkVBVFVSRVN9IC1jICR7bW9kdWxlfSAtYiAke21vZHVsZX0vJHttb2R1bGV9LnNiZiBcCisJCQlzaXAvJHttb2R1bGV9LyR7bW9kdWxlfW1vZC5zaXAgfHwgZGllICJFcnJvciBjYWxsaW5nIHNpcCBvbiAke21vZHVsZX0iCisJCXNlZCAtZSAncyx0YXJnZXQsVEFSR0VULCcgLWUgJ3Msc291cmNlcyxTT1VSQ0VTLCcgLWUgJ3MsaGVhZGVycyxIRUFERVJTLCcgXAorCQkJJHttb2R1bGV9LyR7bW9kdWxlfS5zYmYgfCBzZWQgcywibW9jX0hFQURFUlMgPSIsIkhFQURFUlMgKz0iLCBcCisJCQk+JHttb2R1bGV9LyR7bW9kdWxlfS5wcm8KKwkJZWNobyAiVEVNUExBVEU9bGliIiA+PiR7bW9kdWxlfS8ke21vZHVsZX0ucHJvCisJCVsgIiR7bW9kdWxlfSIgPSAicXQiIF0gCQkmJiBlY2hvICIiIAkJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybworCQlbICIke21vZHVsZX0iID0gInF0Y2FudmFzIiBdIAkmJiBlY2hvICIiCQk+PiR7bW9kdWxlfS8ke21vZHVsZX0ucHJvCisJCVsgIiR7bW9kdWxlfSIgPSAicXR0YWJsZSIgXSAJJiYgZWNobyAiIgkJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybworCQlbICIke21vZHVsZX0iID0gInF3dCIgXSAJJiYgZWNobyAiIgkJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybworCQlbICIke21vZHVsZX0iID0gInF0cGUiIF0gICAgICAgICYmIGVjaG8gIiIJCT4+JHttb2R1bGV9LyR7bW9kdWxlfS5wcm8KKwkJWyAiJHttb2R1bGV9IiA9ICJxdHBlIiBdICAgICAgICAmJiBlY2hvICJMSUJTKz0tbHFwZSIJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybworCQl0cnVlCisJZG9uZQorfQorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2dlbmVyYXRlCisKK2FkZHRhc2sgZ2VuZXJhdGUgYWZ0ZXIgZG9fdW5wYWNrIGRvX3BhdGNoIGJlZm9yZSBkb19jb25maWd1cmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NpdGVjb25maWcuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NpdGVjb25maWcuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWRjZTQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2l0ZWNvbmZpZy5iYmNsYXNzCkBAIC0wLDAgKzEsMzMgQEAKK3B5dGhvbiBzaXRlY29uZmlnX2RvX3NpdGVjb25maWcgKCkgeworCXNoYXJlZF9zdGF0ZSA9IHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhkKQorCWlmIHNoYXJlZF9zdGF0ZVsndGFzayddICE9ICdwb3B1bGF0ZV9zeXNyb290JzoKKwkJcmV0dXJuCisJaWYgbm90IG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKGQuZ2V0VmFyKCdGSUxFX0RJUk5BTUUnLCBUcnVlKSwgJ3NpdGVfY29uZmlnJykpOgorCQliYi5kZWJ1ZygxLCAiTm8gc2l0ZV9jb25maWcgZGlyZWN0b3J5LCBza2lwcGluZyBkb19zaXRlY29uZmlnIikKKwkJcmV0dXJuCisJYmIuYnVpbGQuZXhlY19mdW5jKCdkb19zaXRlY29uZmlnX2dlbmNhY2hlJywgZCkKKwlzc3RhdGVfY2xlYW4oc2hhcmVkX3N0YXRlLCBkKQorCXNzdGF0ZV9pbnN0YWxsKHNoYXJlZF9zdGF0ZSwgZCkKK30KKworRVhUUkFTSVRFQ09ORklHID89ICIiCisKK3NpdGVjb25maWdfZG9fc2l0ZWNvbmZpZ19nZW5jYWNoZSAoKSB7CisJbWtkaXIgLXAgJHtXT1JLRElSfS9zaXRlX2NvbmZpZ18ke01BQ0hJTkV9CisJZ2VuLXNpdGUtY29uZmlnICR7RklMRV9ESVJOQU1FfS9zaXRlX2NvbmZpZyBcCisJCT4ke1dPUktESVJ9L3NpdGVfY29uZmlnXyR7TUFDSElORX0vY29uZmlndXJlLmFjCisJY2QgJHtXT1JLRElSfS9zaXRlX2NvbmZpZ18ke01BQ0hJTkV9CisJYXV0b2NvbmYKKwlybSAtZiAke0JQTn1fY2FjaGUKKwlDT05GSUdfU0lURT0iIiAke0VYVFJBU0lURUNPTkZJR30gLi9jb25maWd1cmUgJHtDT05GSUdVUkVPUFRTfSAtLWNhY2hlLWZpbGUgJHtCUE59X2NhY2hlCisJc2VkIC1uIC1lICIvYWNfY3ZfY19iaWdlbmRpYW4vcCIgLWUgIi9hY19jdl9zaXplb2ZfL3AiIFwKKwkJLWUgIi9hY19jdl90eXBlXy9wIiAtZSAiL2FjX2N2X2hlYWRlcl8vcCIgLWUgIi9hY19jdl9mdW5jXy9wIiBcCisJCTwgJHtCUE59X2NhY2hlID4gJHtCUE59X2NvbmZpZworCW1rZGlyIC1wICR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vJHtUQVJHRVRfU1lTfV9jb25maWdfc2l0ZS5kCisJY3AgJHtCUE59X2NvbmZpZyAke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9LyR7VEFSR0VUX1NZU31fY29uZmlnX3NpdGUuZAorCit9CisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLWludGVyY2VwdGZ1bmNzXSArPSAiZG9fc2l0ZWNvbmZpZyAiCisKK0VYUE9SVF9GVU5DVElPTlMgZG9fc2l0ZWNvbmZpZyBkb19zaXRlY29uZmlnX2dlbmNhY2hlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zaXRlaW5mby5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2l0ZWluZm8uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjZlYWM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2l0ZWluZm8uYmJjbGFzcwpAQCAtMCwwICsxLDE3MSBAQAorIyBUaGlzIGNsYXNzIGV4aXN0cyB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0YXJnZXRzIHRoYXQKKyMgbWF5IGJlIG5lZWRlZCBieSBvdGhlciBjbGFzc2VzIGFuZC9vciByZWNpcGVzLiBJZiB5b3UgYWRkIGEgbmV3CisjIHRhcmdldCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0byBiZSB1cGRhdGVkLgorCisjCisjIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgJ3doYXQnIGZvciB0aGUgbmFtZWQgdGFyZ2V0ICd0YXJnZXQnCisjIHdoZXJlICd0YXJnZXQnID09ICI8YXJjaD4tPG9zPiIKKyMKKyMgJ3doYXQnIGNhbiBiZSBvbmUgb2YKKyMgKiB0YXJnZXQ6IFJldHVybnMgdGhlIHRhcmdldCBuYW1lICgiPGFyY2g+LTxvcz4iKQorIyAqIGVuZGlhbmVzczogUmV0dXJuICJiZSIgZm9yIGJpZyBlbmRpYW4gdGFyZ2V0cywgImxlIiBmb3IgbGl0dGxlIGVuZGlhbgorIyAqIGJpdHM6IFJldHVybnMgdGhlIGJpdCBzaXplIG9mIHRoZSB0YXJnZXQsIGVpdGhlciAiMzIiIG9yICI2NCIKKyMgKiBsaWJjOiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjIGxpYnJhcnkgdXNlZCBieSB0aGUgdGFyZ2V0CisjCisjIEl0IGlzIGFuIGVycm9yIGZvciB0aGUgdGFyZ2V0IG5vdCB0byBleGlzdC4KKyMgSWYgJ3doYXQnIGRvZXNuJ3QgZXhpc3QgdGhlbiBhbiBlbXB0eSB2YWx1ZSBpcyByZXR1cm5lZAorIworZGVmIHNpdGVpbmZvX2RhdGEoZCk6CisgICAgYXJjaGluZm8gPSB7CisgICAgICAgICJhbGxhcmNoIjogImVuZGlhbi1saXR0bGUgYml0LTMyIiwgIyBib2d1cywgYnV0IGJldHRlciB0aGFuIHNwZWNpYWwtY2FzaW5nIHRoZSBjaGVja3MgYmVsb3cgZm9yIGFsbGFyY2gKKyAgICAgICAgImFhcmNoNjQiOiAiZW5kaWFuLWxpdHRsZSBiaXQtNjQgYXJtLWNvbW1vbiBhcm0tNjQiLAorICAgICAgICAiYWFyY2g2NF9iZSI6ICJlbmRpYW4tYmlnIGJpdC02NCBhcm0tY29tbW9uIGFybS02NCIsCisgICAgICAgICJhcm0iOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgYXJtLWNvbW1vbiBhcm0tMzIiLAorICAgICAgICAiYXJtZWIiOiAiZW5kaWFuLWJpZyBiaXQtMzIgYXJtLWNvbW1vbiBhcm0tMzIiLAorICAgICAgICAiYXZyMzIiOiAiZW5kaWFuLWJpZyBiaXQtMzIgYXZyMzItY29tbW9uIiwKKyAgICAgICAgImJmaW4iOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgYmZpbi1jb21tb24iLAorICAgICAgICAiZXBpcGhhbnkiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIiLAorICAgICAgICAiaTM4NiI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBpeDg2LWNvbW1vbiIsCisgICAgICAgICJpNDg2IjogImVuZGlhbi1saXR0bGUgYml0LTMyIGl4ODYtY29tbW9uIiwKKyAgICAgICAgImk1ODYiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgaXg4Ni1jb21tb24iLAorICAgICAgICAiaTY4NiI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBpeDg2LWNvbW1vbiIsCisgICAgICAgICJpYTY0IjogImVuZGlhbi1saXR0bGUgYml0LTY0IiwKKyAgICAgICAgIm1pY3JvYmxhemUiOiAiZW5kaWFuLWJpZyBiaXQtMzIgbWljcm9ibGF6ZS1jb21tb24iLAorICAgICAgICAibWljcm9ibGF6ZWViIjogImVuZGlhbi1iaWcgYml0LTMyIG1pY3JvYmxhemUtY29tbW9uIiwKKyAgICAgICAgIm1pY3JvYmxhemVlbCI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBtaWNyb2JsYXplLWNvbW1vbiIsCisgICAgICAgICJtaXBzIjogImVuZGlhbi1iaWcgYml0LTMyIG1pcHMtY29tbW9uIiwKKyAgICAgICAgIm1pcHM2NCI6ICJlbmRpYW4tYmlnIGJpdC02NCBtaXBzLWNvbW1vbiIsCisgICAgICAgICJtaXBzNjRlbCI6ICJlbmRpYW4tbGl0dGxlIGJpdC02NCBtaXBzLWNvbW1vbiIsCisgICAgICAgICJtaXBzZWwiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgbWlwcy1jb21tb24iLAorICAgICAgICAicG93ZXJwYyI6ICJlbmRpYW4tYmlnIGJpdC0zMiBwb3dlcnBjLWNvbW1vbiIsCisgICAgICAgICJuaW9zMiI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBuaW9zMi1jb21tb24iLAorICAgICAgICAicG93ZXJwYzY0IjogImVuZGlhbi1iaWcgYml0LTY0IHBvd2VycGMtY29tbW9uIiwKKyAgICAgICAgInBwYyI6ICJlbmRpYW4tYmlnIGJpdC0zMiBwb3dlcnBjLWNvbW1vbiIsCisgICAgICAgICJwcGM2NCI6ICJlbmRpYW4tYmlnIGJpdC02NCBwb3dlcnBjLWNvbW1vbiIsCisgICAgICAgICJzaDMiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgc2gtY29tbW9uIiwKKyAgICAgICAgInNoNCI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBzaC1jb21tb24iLAorICAgICAgICAic3BhcmMiOiAiZW5kaWFuLWJpZyBiaXQtMzIiLAorICAgICAgICAidmlhYzMiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgaXg4Ni1jb21tb24iLAorICAgICAgICAieDg2XzY0IjogImVuZGlhbi1saXR0bGUiLCAjIGJpdGluZm8gc3BlY2lmaWVkIGluIHRhcmdldGluZm8KKyAgICB9CisgICAgb3NpbmZvID0geworICAgICAgICAiZGFyd2luIjogImNvbW1vbi1kYXJ3aW4iLAorICAgICAgICAiZGFyd2luOSI6ICJjb21tb24tZGFyd2luIiwKKyAgICAgICAgImxpbnV4IjogImNvbW1vbi1saW51eCBjb21tb24tZ2xpYmMiLAorICAgICAgICAibGludXgtZ251IjogImNvbW1vbi1saW51eCBjb21tb24tZ2xpYmMiLAorICAgICAgICAibGludXgtZ251eDMyIjogImNvbW1vbi1saW51eCBjb21tb24tZ2xpYmMiLAorICAgICAgICAibGludXgtZ251bjMyIjogImNvbW1vbi1saW51eCBjb21tb24tZ2xpYmMiLAorICAgICAgICAibGludXgtZ251ZWFiaSI6ICJjb21tb24tbGludXggY29tbW9uLWdsaWJjIiwKKyAgICAgICAgImxpbnV4LWdudXNwZSI6ICJjb21tb24tbGludXggY29tbW9uLWdsaWJjIiwKKyAgICAgICAgImxpbnV4LXVjbGliYyI6ICJjb21tb24tbGludXggY29tbW9uLXVjbGliYyIsCisgICAgICAgICJsaW51eC11Y2xpYmNlYWJpIjogImNvbW1vbi1saW51eCBjb21tb24tdWNsaWJjIiwKKyAgICAgICAgImxpbnV4LXVjbGliY3NwZSI6ICJjb21tb24tbGludXggY29tbW9uLXVjbGliYyIsCisgICAgICAgICJsaW51eC1tdXNsIjogImNvbW1vbi1saW51eCBjb21tb24tbXVzbCIsCisgICAgICAgICJsaW51eC1tdXNsZWFiaSI6ICJjb21tb24tbGludXggY29tbW9uLW11c2wiLAorICAgICAgICAibGludXgtbXVzbHNwZSI6ICJjb21tb24tbGludXggY29tbW9uLW11c2wiLAorICAgICAgICAidWNsaW51eC11Y2xpYmMiOiAiY29tbW9uLXVjbGliYyIsCisgICAgICAgICJjeWd3aW4iOiAiY29tbW9uLWN5Z3dpbiIsCisgICAgICAgICJtaW5ndzMyIjogImNvbW1vbi1taW5ndyIsCisgICAgfQorICAgIHRhcmdldGluZm8gPSB7CisgICAgICAgICJhYXJjaDY0LWxpbnV4LWdudSI6ICJhYXJjaDY0LWxpbnV4IiwKKyAgICAgICAgImFhcmNoNjRfYmUtbGludXgtZ251IjogImFhcmNoNjRfYmUtbGludXgiLAorICAgICAgICAiYXJtLWxpbnV4LWdudWVhYmkiOiAiYXJtLWxpbnV4IiwKKyAgICAgICAgImFybS1saW51eC1tdXNsZWFiaSI6ICJhcm0tbGludXgiLAorICAgICAgICAiYXJtLWxpbnV4LXVjbGliY2VhYmkiOiAiYXJtLWxpbnV4LXVjbGliYyIsCisgICAgICAgICJhcm1lYi1saW51eC1nbnVlYWJpIjogImFybWViLWxpbnV4IiwKKyAgICAgICAgImFybWViLWxpbnV4LXVjbGliY2VhYmkiOiAiYXJtZWItbGludXgtdWNsaWJjIiwKKyAgICAgICAgImFybWViLWxpbnV4LW11c2xlYWJpIjogImFybWViLWxpbnV4IiwKKyAgICAgICAgIm1pcHMtbGludXgtbXVzbCI6ICJtaXBzLWxpbnV4IiwKKyAgICAgICAgIm1pcHNlbC1saW51eC1tdXNsIjogIm1pcHNlbC1saW51eCIsCisgICAgICAgICJtaXBzNjQtbGludXgtbXVzbCI6ICJtaXBzLWxpbnV4IiwKKyAgICAgICAgIm1pcHM2NGVsLWxpbnV4LW11c2wiOiAibWlwc2VsLWxpbnV4IiwKKyAgICAgICAgIm1pcHM2NC1saW51eC1nbnVuMzIiOiAibWlwcy1saW51eCBiaXQtMzIiLAorICAgICAgICAibWlwczY0ZWwtbGludXgtZ251bjMyIjogIm1pcHNlbC1saW51eCBiaXQtMzIiLAorICAgICAgICAicG93ZXJwYy1saW51eCI6ICJwb3dlcnBjMzItbGludXgiLAorICAgICAgICAicG93ZXJwYy1saW51eC1tdXNsIjogInBvd2VycGMtbGludXggcG93ZXJwYzMyLWxpbnV4IiwKKyAgICAgICAgInBvd2VycGMtbGludXgtdWNsaWJjIjogInBvd2VycGMtbGludXggcG93ZXJwYzMyLWxpbnV4IiwKKyAgICAgICAgInBvd2VycGMtbGludXgtZ251c3BlIjogInBvd2VycGMtbGludXggcG93ZXJwYzMyLWxpbnV4IiwKKyAgICAgICAgInBvd2VycGMtbGludXgtbXVzbHNwZSI6ICJwb3dlcnBjLWxpbnV4IHBvd2VycGMzMi1saW51eCIsCisgICAgICAgICJwb3dlcnBjLWxpbnV4LXVjbGliY3NwZSI6ICJwb3dlcnBjLWxpbnV4IHBvd2VycGMzMi1saW51eCBwb3dlcnBjLWxpbnV4LXVjbGliYyIsCisgICAgICAgICJwb3dlcnBjNjQtbGludXgtZ251c3BlIjogInBvd2VycGMtbGludXggcG93ZXJwYzY0LWxpbnV4IiwKKyAgICAgICAgInBvd2VycGM2NC1saW51eC1tdXNsc3BlIjogInBvd2VycGMtbGludXggcG93ZXJwYzY0LWxpbnV4IiwKKyAgICAgICAgInBvd2VycGM2NC1saW51eCI6ICJwb3dlcnBjLWxpbnV4IiwKKyAgICAgICAgIng4Nl82NC1jeWd3aW4iOiAiYml0LTY0IiwKKyAgICAgICAgIng4Nl82NC1kYXJ3aW4iOiAiYml0LTY0IiwKKyAgICAgICAgIng4Nl82NC1kYXJ3aW45IjogImJpdC02NCIsCisgICAgICAgICJ4ODZfNjQtbGludXgiOiAiYml0LTY0IiwKKyAgICAgICAgIng4Nl82NC1saW51eC1tdXNsIjogIng4Nl82NC1saW51eCBiaXQtNjQiLAorICAgICAgICAieDg2XzY0LWxpbnV4LXVjbGliYyI6ICJiaXQtNjQiLAorICAgICAgICAieDg2XzY0LWVsZiI6ICJiaXQtNjQiLAorICAgICAgICAieDg2XzY0LWxpbnV4LWdudSI6ICJiaXQtNjQgeDg2XzY0LWxpbnV4IiwKKyAgICAgICAgIng4Nl82NC1saW51eC1nbnV4MzIiOiAiYml0LTMyIGl4ODYtY29tbW9uIHgzMi1saW51eCIsCisgICAgICAgICJ4ODZfNjQtbWluZ3czMiI6ICJiaXQtNjQiLAorICAgIH0KKworICAgIGhvc3RhcmNoID0gZC5nZXRWYXIoIkhPU1RfQVJDSCIsIFRydWUpCisgICAgaG9zdG9zID0gZC5nZXRWYXIoIkhPU1RfT1MiLCBUcnVlKQorICAgIHRhcmdldCA9ICIlcy0lcyIgJSAoaG9zdGFyY2gsIGhvc3RvcykKKworICAgIHNpdGVkYXRhID0gW10KKyAgICBpZiBob3N0YXJjaCBpbiBhcmNoaW5mbzoKKyAgICAgICAgc2l0ZWRhdGEuZXh0ZW5kKGFyY2hpbmZvW2hvc3RhcmNoXS5zcGxpdCgpKQorICAgIGlmIGhvc3RvcyBpbiBvc2luZm86CisgICAgICAgIHNpdGVkYXRhLmV4dGVuZChvc2luZm9baG9zdG9zXS5zcGxpdCgpKQorICAgIGlmIHRhcmdldCBpbiB0YXJnZXRpbmZvOgorICAgICAgICBzaXRlZGF0YS5leHRlbmQodGFyZ2V0aW5mb1t0YXJnZXRdLnNwbGl0KCkpCisgICAgc2l0ZWRhdGEuYXBwZW5kKHRhcmdldCkKKyAgICBzaXRlZGF0YS5hcHBlbmQoImNvbW1vbiIpCisKKyAgICBiYi5kZWJ1ZygxLCAiU0lURSBmaWxlcyAlcyIgJSBzaXRlZGF0YSk7CisgICAgcmV0dXJuIHNpdGVkYXRhCisKK3B5dGhvbiAoKSB7CisgICAgc2l0ZWRhdGEgPSBzZXQoc2l0ZWluZm9fZGF0YShkKSkKKyAgICBpZiAiZW5kaWFuLWxpdHRsZSIgaW4gc2l0ZWRhdGE6CisgICAgICAgIGQuc2V0VmFyKCJTSVRFSU5GT19FTkRJQU5ORVNTIiwgImxlIikKKyAgICBlbGlmICJlbmRpYW4tYmlnIiBpbiBzaXRlZGF0YToKKyAgICAgICAgZC5zZXRWYXIoIlNJVEVJTkZPX0VORElBTk5FU1MiLCAiYmUiKQorICAgIGVsc2U6CisgICAgICAgIGJiLmVycm9yKCJVbmFibGUgdG8gZGV0ZXJtaW5lIGVuZGlhbm5lc3MgZm9yIGFyY2hpdGVjdHVyZSAnJXMnIiAlCisgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCJIT1NUX0FSQ0giLCBUcnVlKSkKKyAgICAgICAgYmIuZmF0YWwoIlBsZWFzZSBhZGQgeW91ciBhcmNoaXRlY3R1cmUgdG8gc2l0ZWluZm8uYmJjbGFzcyIpCisKKyAgICBpZiAiYml0LTMyIiBpbiBzaXRlZGF0YToKKyAgICAgICAgZC5zZXRWYXIoIlNJVEVJTkZPX0JJVFMiLCAiMzIiKQorICAgIGVsaWYgImJpdC02NCIgaW4gc2l0ZWRhdGE6CisgICAgICAgIGQuc2V0VmFyKCJTSVRFSU5GT19CSVRTIiwgIjY0IikKKyAgICBlbHNlOgorICAgICAgICBiYi5lcnJvcigiVW5hYmxlIHRvIGRldGVybWluZSBiaXQgc2l6ZSBmb3IgYXJjaGl0ZWN0dXJlICclcyciICUKKyAgICAgICAgICAgICAgICAgZC5nZXRWYXIoIkhPU1RfQVJDSCIsIFRydWUpKQorICAgICAgICBiYi5mYXRhbCgiUGxlYXNlIGFkZCB5b3VyIGFyY2hpdGVjdHVyZSB0byBzaXRlaW5mby5iYmNsYXNzIikKK30KKworZGVmIHNpdGVpbmZvX2dldF9maWxlcyhkLCBub19jYWNoZSA9IEZhbHNlKToKKyAgICBzaXRlZGF0YSA9IHNpdGVpbmZvX2RhdGEoZCkKKyAgICBzaXRlZmlsZXMgPSAiIgorICAgIGZvciBwYXRoIGluIGQuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKS5zcGxpdCgiOiIpOgorICAgICAgICBmb3IgZWxlbWVudCBpbiBzaXRlZGF0YToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHBhdGgsICJzaXRlIiwgZWxlbWVudCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBzaXRlZmlsZXMgKz0gZmlsZW5hbWUgKyAiICIKKworICAgIGlmIG5vX2NhY2hlOiByZXR1cm4gc2l0ZWZpbGVzCisKKyAgICAjIE5vdyBjaGVjayBmb3Igc2l0ZWNvbmZpZyBjYWNoZSBmaWxlcworICAgICMgVXNlIHRoZSBmaWxlcyBjb3BpZWQgdG8gdGhlIGFjbG9jYWwgY2FjaGUgZ2VuZXJhdGVkIGJ5IGF1dG90b29scy5iYmNsYXNzCisgICAgIyB0byBhdm9pZCByYWNlcworICAgIHBhdGhfc2l0ZWNvbmZpZyA9IGQuZ2V0VmFyKCdBQ0xPQ0FMRElSJywgVHJ1ZSkKKyAgICBpZiBwYXRoX3NpdGVjb25maWcgYW5kIG9zLnBhdGguaXNkaXIocGF0aF9zaXRlY29uZmlnKToKKyAgICAgICAgZm9yIGkgaW4gb3MubGlzdGRpcihwYXRoX3NpdGVjb25maWcpOgorICAgICAgICAgICAgaWYgbm90IGkuZW5kc3dpdGgoIl9jb25maWciKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ocGF0aF9zaXRlY29uZmlnLCBpKQorICAgICAgICAgICAgc2l0ZWZpbGVzICs9IGZpbGVuYW1lICsgIiAiCisKKyAgICByZXR1cm4gc2l0ZWZpbGVzCisKKyMKKyMgTWFrZSBzb21lIGluZm9ybWF0aW9uIGF2YWlsYWJsZSB2aWEgdmFyaWFibGVzCisjCitTSVRFQ09ORklHX1NZU1JPT1RDQUNIRSA9ICIke1NUQUdJTkdfREFUQURJUn0vJHtUQVJHRVRfU1lTfV9jb25maWdfc2l0ZS5kIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3BkeC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3BkeC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NGM1M2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zcGR4LmJiY2xhc3MKQEAgLTAsMCArMSwzNjUgQEAKKyMgVGhpcyBjbGFzcyBpbnRlZ3JhdGVzIHJlYWwtdGltZSBsaWNlbnNlIHNjYW5uaW5nLCBnZW5lcmF0aW9uIG9mIFNQRFggc3RhbmRhcmQKKyMgb3V0cHV0IGFuZCB2ZXJpZml5aW5nIGxpY2Vuc2UgaW5mbyBkdXJpbmcgdGhlIGJ1aWxkaW5nIHByb2Nlc3MuCisjIEl0IGlzIGEgY29tYmluYXRpb24gb2YgZWZmb3J0cyBmcm9tIHRoZSBPRS1Db3JlLCBTUERYIGFuZCBGb3Nzb2xvZ3kgcHJvamVjdHMuCisjCisjIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEZPU1NvbG9neToKKyMgICBodHRwOi8vd3d3LmZvc3NvbG9neS5vcmcKKyMKKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gRk9TU29sb2d5U1BEWCBjb21tYW5kbGluZToKKyMgICBodHRwczovL2dpdGh1Yi5jb20vc3BkeC10b29scy9mb3Nzb2xvZ3ktc3BkeC93aWtpL0Zvc3NvbG9neS1TUERYLVdlYi1BUEkKKyMKKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gU1BEWDoKKyMgICBodHRwOi8vd3d3LnNwZHgub3JnCisjCisKKyMgU1BEWCBmaWxlIHdpbGwgYmUgb3V0cHV0IHRvIHRoZSBwYXRoIHdoaWNoIGlzIGRlZmluZWQgYXNbU1BEWF9NQU5JRkVTVF9ESVJdIAorIyBpbiAuL21ldGEvY29uZi9saWNlbnNlcy5jb25mLgorCitTUERYU1NUQVRFRElSID0gIiR7V09SS0RJUn0vc3BkeF9zc3RhdGVfZGlyIgorCisjIElmICR7U30gaXNuJ3QgYWN0dWFsbHkgdGhlIHRvcC1sZXZlbCBzb3VyY2UgZGlyZWN0b3J5LCBzZXQgU1BEWF9TIHRvIHBvaW50IGF0CisjIHRoZSByZWFsIHRvcC1sZXZlbCBkaXJlY3RvcnkuCitTUERYX1MgPz0gIiR7U30iCisKK3B5dGhvbiBkb19zcGR4ICgpIHsKKyAgICBpbXBvcnQgb3MsIHN5cworICAgIGltcG9ydCBqc29uLCBzaHV0aWwKKworICAgIGluZm8gPSB7fSAKKyAgICBpbmZvWyd3b3JrZGlyJ10gPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgaW5mb1snc291cmNlZGlyJ10gPSBkLmdldFZhcignU1BEWF9TJywgVHJ1ZSkKKyAgICBpbmZvWydwbiddID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBpbmZvWydwdiddID0gZC5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICBpbmZvWydzcGR4X3ZlcnNpb24nXSA9IGQuZ2V0VmFyKCdTUERYX1ZFUlNJT04nLCBUcnVlKQorICAgIGluZm9bJ2RhdGFfbGljZW5zZSddID0gZC5nZXRWYXIoJ0RBVEFfTElDRU5TRScsIFRydWUpCisKKyAgICBzc3RhdGVkaXIgPSBkLmdldFZhcignU1BEWFNTVEFURURJUicsIFRydWUpCisgICAgc3N0YXRlZmlsZSA9IG9zLnBhdGguam9pbihzc3RhdGVkaXIsIGluZm9bJ3BuJ10gKyBpbmZvWydwdiddICsgIi5zcGR4IikKKworICAgIG1hbmlmZXN0X2RpciA9IGQuZ2V0VmFyKCdTUERYX01BTklGRVNUX0RJUicsIFRydWUpCisgICAgaW5mb1snb3V0ZmlsZSddID0gb3MucGF0aC5qb2luKG1hbmlmZXN0X2RpciwgaW5mb1sncG4nXSArICIuc3BkeCIgKQorCisgICAgaW5mb1snc3BkeF90ZW1wX2RpciddID0gZC5nZXRWYXIoJ1NQRFhfVEVNUF9ESVInLCBUcnVlKQorICAgIGluZm9bJ3Rhcl9maWxlJ10gPSBvcy5wYXRoLmpvaW4oaW5mb1snd29ya2RpciddLCBpbmZvWydwbiddICsgIi50YXIuZ3oiICkKKworICAgICMgTWFrZSBzdXJlIGltcG9ydGFudCBkaXJzIGV4aXN0CisgICAgdHJ5OgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobWFuaWZlc3RfZGlyKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc3N0YXRlZGlyKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoaW5mb1snc3BkeF90ZW1wX2RpciddKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGJiLmVycm9yKCJTUERYOiBDb3VsZCBub3Qgc2V0IHVwIHJlcXVpcmVkIGRpcmVjdG9yaWVzOiAiICsgc3RyKGUpKQorICAgICAgICByZXR1cm4KKworICAgICMjIGdldCBldmVyeXRoaW5nIGZyb20gY2FjaGUuICB1c2UgaXQgdG8gZGVjaWRlIGlmIAorICAgICMjIHNvbWV0aGluZyBuZWVkcyB0byBiZSByZXJ1biAKKyAgICBjdXJfdmVyX2NvZGUgPSBnZXRfdmVyX2NvZGUoaW5mb1snc291cmNlZGlyJ10pCisgICAgY2FjaGVfY3VyID0gRmFsc2UKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhzc3RhdGVmaWxlKToKKyAgICAgICAgIyMgY2FjaGUgZm9yIHRoaXMgcGFja2FnZSBleGlzdHMuIHJlYWQgaXQgaW4KKyAgICAgICAgY2FjaGVkX3NwZHggPSBnZXRfY2FjaGVkX3NwZHgoc3N0YXRlZmlsZSkKKworICAgICAgICBpZiBjYWNoZWRfc3BkeFsnUGFja2FnZVZlcmlmaWNhdGlvbkNvZGUnXSA9PSBjdXJfdmVyX2NvZGU6CisgICAgICAgICAgICBiYi53YXJuKCJTUERYOiBWZXJpZmljYXRpb24gY29kZSBmb3IgIiArIGluZm9bJ3BuJ10KKyAgICAgICAgICAgICAgICAgICsgImlzIHNhbWUgYXMgY2FjaGUncy4gZG8gbm90aGluZyIpCisgICAgICAgICAgICBjYWNoZV9jdXIgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2NhbF9maWxlX2luZm8gPSBzZXR1cF9mb3NzX3NjYW4oaW5mbywgVHJ1ZSwgY2FjaGVkX3NwZHhbJ0ZpbGVzJ10pCisgICAgZWxzZToKKyAgICAgICAgbG9jYWxfZmlsZV9pbmZvID0gc2V0dXBfZm9zc19zY2FuKGluZm8sIEZhbHNlLCBOb25lKQorCisgICAgaWYgY2FjaGVfY3VyOgorICAgICAgICBzcGR4X2ZpbGVfaW5mbyA9IGNhY2hlZF9zcGR4WydGaWxlcyddCisgICAgICAgIGZvc3NfcGFja2FnZV9pbmZvID0gY2FjaGVkX3NwZHhbJ1BhY2thZ2UnXQorICAgICAgICBmb3NzX2xpY2Vuc2VfaW5mbyA9IGNhY2hlZF9zcGR4WydMaWNlbnNlcyddCisgICAgZWxzZToKKyAgICAgICAgIyMgc2V0dXAgZm9zc29sb2d5IGNvbW1hbmQKKyAgICAgICAgZm9zc19zZXJ2ZXIgPSBkLmdldFZhcignRk9TU19TRVJWRVInLCBUcnVlKQorICAgICAgICBmb3NzX2ZsYWdzID0gZC5nZXRWYXIoJ0ZPU1NfV0dFVF9GTEFHUycsIFRydWUpCisgICAgICAgIGZvc3NfZnVsbF9zcGR4ID0gZC5nZXRWYXIoJ0ZPU1NfRlVMTF9TUERYJywgVHJ1ZSkgPT0gInRydWUiIG9yIEZhbHNlCisgICAgICAgIGZvc3NfY29tbWFuZCA9ICJ3Z2V0ICVzIC0tcG9zdC1maWxlPSVzICVzIlwKKyAgICAgICAgICAgICUgKGZvc3NfZmxhZ3MsIGluZm9bJ3Rhcl9maWxlJ10sIGZvc3Nfc2VydmVyKQorICAgICAgICAKKyAgICAgICAgZm9zc19yZXN1bHQgPSBydW5fZm9zc29sb2d5KGZvc3NfY29tbWFuZCwgZm9zc19mdWxsX3NwZHgpCisgICAgICAgIGlmIGZvc3NfcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgKGZvc3NfcGFja2FnZV9pbmZvLCBmb3NzX2ZpbGVfaW5mbywgZm9zc19saWNlbnNlX2luZm8pID0gZm9zc19yZXN1bHQKKyAgICAgICAgICAgIHNwZHhfZmlsZV9pbmZvID0gY3JlYXRlX3NwZHhfZG9jKGxvY2FsX2ZpbGVfaW5mbywgZm9zc19maWxlX2luZm8pCisgICAgICAgICAgICAjIyB3cml0ZSB0byBjYWNoZQorICAgICAgICAgICAgd3JpdGVfY2FjaGVkX3NwZHgoc3N0YXRlZmlsZSwgY3VyX3Zlcl9jb2RlLCBmb3NzX3BhY2thZ2VfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZHhfZmlsZV9pbmZvLCBmb3NzX2xpY2Vuc2VfaW5mbykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLmVycm9yKCJTUERYOiBDb3VsZCBub3QgY29tbXVuaWNhdGUgd2l0aCBGT1NTb2xvZ3kgc2VydmVyLiBDb21tYW5kIHdhczogIiArIGZvc3NfY29tbWFuZCkKKyAgICAgICAgICAgIHJldHVybgorICAgIAorICAgICMjIEdldCBkb2N1bWVudCBhbmQgcGFja2FnZSBsZXZlbCBpbmZvcm1hdGlvbgorICAgIHNwZHhfaGVhZGVyX2luZm8gPSBnZXRfaGVhZGVyX2luZm8oaW5mbywgY3VyX3Zlcl9jb2RlLCBmb3NzX3BhY2thZ2VfaW5mbykKKyAgICAKKyAgICAjIyBDUkVBVEUgTUFOSUZFU1QKKyAgICBjcmVhdGVfbWFuaWZlc3QoaW5mbywgc3BkeF9oZWFkZXJfaW5mbywgc3BkeF9maWxlX2luZm8sIGZvc3NfbGljZW5zZV9pbmZvKQorCisgICAgIyMgY2xlYW4gdXAgdGhlIHRlbXAgc3R1ZmYKKyAgICBzaHV0aWwucm10cmVlKGluZm9bJ3NwZHhfdGVtcF9kaXInXSwgaWdub3JlX2Vycm9ycz1UcnVlKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGluZm9bJ3Rhcl9maWxlJ10pOgorICAgICAgICByZW1vdmVfZmlsZShpbmZvWyd0YXJfZmlsZSddKQorfQorYWRkdGFzayBzcGR4IGFmdGVyIGRvX3BhdGNoIGJlZm9yZSBkb19jb25maWd1cmUKKworZGVmIGNyZWF0ZV9tYW5pZmVzdChpbmZvLCBoZWFkZXIsIGZpbGVzLCBsaWNlbnNlcyk6CisgICAgaW1wb3J0IGNvZGVjcworICAgIHdpdGggY29kZWNzLm9wZW4oaW5mb1snb3V0ZmlsZSddLCBtb2RlPSd3JywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoKKyAgICAgICAgIyBXcml0ZSBoZWFkZXIKKyAgICAgICAgZi53cml0ZShoZWFkZXIgKyAnXG4nKQorCisgICAgICAgICMgV3JpdGUgZmlsZSBkYXRhCisgICAgICAgIGZvciBjaGtzdW0sIGJsb2NrIGluIGZpbGVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZi53cml0ZSgiRmlsZU5hbWU6ICIgKyBibG9ja1snRmlsZU5hbWUnXSArICdcbicpCisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBibG9jay5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBub3Qga2V5ID09ICdGaWxlTmFtZSc6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoa2V5ICsgIjogIiArIHZhbHVlICsgJ1xuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ1xuJykKKworICAgICAgICAjIFdyaXRlIGxpY2Vuc2UgZGF0YQorICAgICAgICBmb3IgaWQsIGJsb2NrIGluIGxpY2Vuc2VzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZi53cml0ZSgiTGljZW5zZUlEOiAiICsgaWQgKyAnXG4nKQorICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gYmxvY2suaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgZi53cml0ZShrZXkgKyAiOiAiICsgdmFsdWUgKyAnXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnXG4nKQorCitkZWYgZ2V0X2NhY2hlZF9zcGR4KHNzdGF0ZWZpbGUpOgorICAgIGltcG9ydCBqc29uCisgICAgaW1wb3J0IGNvZGVjcworICAgIGNhY2hlZF9zcGR4X2luZm8gPSB7fQorICAgIHdpdGggY29kZWNzLm9wZW4oc3N0YXRlZmlsZSwgbW9kZT0ncicsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNhY2hlZF9zcGR4X2luZm8gPSBqc29uLmxvYWQoZikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGNhY2hlZF9zcGR4X2luZm8gPSBOb25lCisgICAgcmV0dXJuIGNhY2hlZF9zcGR4X2luZm8KKworZGVmIHdyaXRlX2NhY2hlZF9zcGR4KHNzdGF0ZWZpbGUsIHZlcl9jb2RlLCBwYWNrYWdlX2luZm8sIGZpbGVzLCBsaWNlbnNlX2luZm8pOgorICAgIGltcG9ydCBqc29uCisgICAgaW1wb3J0IGNvZGVjcworICAgIHNwZHhfZG9jID0ge30KKyAgICBzcGR4X2RvY1snUGFja2FnZVZlcmlmaWNhdGlvbkNvZGUnXSA9IHZlcl9jb2RlCisgICAgc3BkeF9kb2NbJ0ZpbGVzJ10gPSB7fQorICAgIHNwZHhfZG9jWydGaWxlcyddID0gZmlsZXMKKyAgICBzcGR4X2RvY1snUGFja2FnZSddID0ge30KKyAgICBzcGR4X2RvY1snUGFja2FnZSddID0gcGFja2FnZV9pbmZvCisgICAgc3BkeF9kb2NbJ0xpY2Vuc2VzJ10gPSB7fQorICAgIHNwZHhfZG9jWydMaWNlbnNlcyddID0gbGljZW5zZV9pbmZvCisgICAgd2l0aCBjb2RlY3Mub3Blbihzc3RhdGVmaWxlLCBtb2RlPSd3JywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoKKyAgICAgICAgZi53cml0ZShqc29uLmR1bXBzKHNwZHhfZG9jKSkKKworZGVmIHNldHVwX2Zvc3Nfc2NhbihpbmZvLCBjYWNoZSwgY2FjaGVkX2ZpbGVzKToKKyAgICBpbXBvcnQgZXJybm8sIHNodXRpbAorICAgIGltcG9ydCB0YXJmaWxlCisgICAgZmlsZV9pbmZvID0ge30KKyAgICBjYWNoZV9kaWN0ID0ge30KKworICAgIGZvciBmX2RpciwgZiBpbiBsaXN0X2ZpbGVzKGluZm9bJ3NvdXJjZWRpciddKToKKyAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKGZfZGlyLCBmKQorICAgICAgICBhYnNfcGF0aCA9IG9zLnBhdGguam9pbihpbmZvWydzb3VyY2VkaXInXSwgZnVsbF9wYXRoKQorICAgICAgICBkZXN0X2RpciA9IG9zLnBhdGguam9pbihpbmZvWydzcGR4X3RlbXBfZGlyJ10sIGZfZGlyKQorICAgICAgICBkZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4oaW5mb1snc3BkeF90ZW1wX2RpciddLCBmdWxsX3BhdGgpCisKKyAgICAgICAgY2hlY2tzdW0gPSBoYXNoX2ZpbGUoYWJzX3BhdGgpCisgICAgICAgIGlmIG5vdCBjaGVja3N1bSBpcyBOb25lOgorICAgICAgICAgICAgZmlsZV9pbmZvW2NoZWNrc3VtXSA9IHt9CisgICAgICAgICAgICAjIyByZXRhaW4gY2FjaGUgaW5mb3JtYXRpb24gaWYgaXQgZXhpc3RzCisgICAgICAgICAgICBpZiBjYWNoZSBhbmQgY2hlY2tzdW0gaW4gY2FjaGVkX2ZpbGVzOgorICAgICAgICAgICAgICAgIGZpbGVfaW5mb1tjaGVja3N1bV0gPSBjYWNoZWRfZmlsZXNbY2hlY2tzdW1dCisgICAgICAgICAgICAjIyBoYXZlIHRoZSBmaWxlIGluY2x1ZGVkIGluIHdoYXQncyBzZW50IHRvIHRoZSBGT1NTb2xvZ3kgc2VydmVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZpbGVfaW5mb1tjaGVja3N1bV1bJ0ZpbGVOYW1lJ10gPSBmdWxsX3BhdGgKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkZXN0X2RpcikKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKGFic19wYXRoLCBkZXN0X3BhdGgpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybigiU1BEWDogbWtkaXJoaWVyIGZhaWxlZDogIiArIHN0cihlKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgc2h1dGlsLkVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlNQRFg6IGNvcHlmaWxlIGZhaWxlZDogIiArIHN0cihlKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJTUERYOiBjb3B5ZmlsZSBmYWlsZWQ6ICIgKyBzdHIoZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi53YXJuKCJTUERYOiBDb3VsZCBub3QgZ2V0IGNoZWNrc3VtIGZvciBmaWxlOiAiICsgZikKKyAgICAKKyAgICB3aXRoIHRhcmZpbGUub3BlbihpbmZvWyd0YXJfZmlsZSddLCAidzpneiIpIGFzIHRhcjoKKyAgICAgICAgdGFyLmFkZChpbmZvWydzcGR4X3RlbXBfZGlyJ10sIGFyY25hbWU9b3MucGF0aC5iYXNlbmFtZShpbmZvWydzcGR4X3RlbXBfZGlyJ10pKQorICAgIAorICAgIHJldHVybiBmaWxlX2luZm8KKworZGVmIHJlbW92ZV9maWxlKGZpbGVfbmFtZSk6CisgICAgdHJ5OgorICAgICAgICBvcy5yZW1vdmUoZmlsZV9uYW1lKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIHBhc3MKKworZGVmIGxpc3RfZmlsZXMoZGlyKToKKyAgICBmb3Igcm9vdCwgc3ViRm9sZGVycywgZmlsZXMgaW4gb3Mud2FsayhkaXIpOgorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIHJlbF9yb290ID0gb3MucGF0aC5yZWxwYXRoKHJvb3QsIGRpcikKKyAgICAgICAgICAgIHlpZWxkIHJlbF9yb290LCBmCisgICAgcmV0dXJuCisKK2RlZiBoYXNoX2ZpbGUoZmlsZV9uYW1lKToKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlX25hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBkYXRhX3N0cmluZyA9IGYucmVhZCgpCisgICAgICAgICAgICBzaGExID0gaGFzaF9zdHJpbmcoZGF0YV9zdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gc2hhMQorICAgIGV4Y2VwdDoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworZGVmIGhhc2hfc3RyaW5nKGRhdGEpOgorICAgIGltcG9ydCBoYXNobGliCisgICAgc2hhMSA9IGhhc2hsaWIuc2hhMSgpCisgICAgc2hhMS51cGRhdGUoZGF0YSkKKyAgICByZXR1cm4gc2hhMS5oZXhkaWdlc3QoKQorCitkZWYgcnVuX2Zvc3NvbG9neShmb3NzX2NvbW1hbmQsIGZ1bGxfc3BkeCk6CisgICAgaW1wb3J0IHN0cmluZywgcmUKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIAorICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGZvc3NfY29tbWFuZC5zcGxpdCgpLAorICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgIGZvc3Nfb3V0cHV0LCBmb3NzX2Vycm9yID0gcC5jb21tdW5pY2F0ZSgpCisgICAgaWYgcC5yZXR1cm5jb2RlICE9IDA6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBmb3NzX291dHB1dCA9IHVuaWNvZGUoZm9zc19vdXRwdXQsICJ1dGYtOCIpCisgICAgZm9zc19vdXRwdXQgPSBzdHJpbmcucmVwbGFjZShmb3NzX291dHB1dCwgJ1xyJywgJycpCisKKyAgICAjIFBhY2thZ2UgaW5mbworICAgIHBhY2thZ2VfaW5mbyA9IHt9CisgICAgaWYgZnVsbF9zcGR4OgorICAgICAgICAjIEFsbCBtYW5kYXRvcnksIG9ubHkgb25lIG9jY3VyYW5jZQorICAgICAgICBwYWNrYWdlX2luZm9bJ1BhY2thZ2VDb3B5cmlnaHRUZXh0J10gPSByZS5maW5kYWxsKCdQYWNrYWdlQ29weXJpZ2h0VGV4dDogKC4qPzwvdGV4dD4pJywgZm9zc19vdXRwdXQsIHJlLlMpWzBdCisgICAgICAgIHBhY2thZ2VfaW5mb1snUGFja2FnZUxpY2Vuc2VEZWNsYXJlZCddID0gcmUuZmluZGFsbCgnUGFja2FnZUxpY2Vuc2VEZWNsYXJlZDogKC4qKScsIGZvc3Nfb3V0cHV0KVswXQorICAgICAgICBwYWNrYWdlX2luZm9bJ1BhY2thZ2VMaWNlbnNlQ29uY2x1ZGVkJ10gPSByZS5maW5kYWxsKCdQYWNrYWdlTGljZW5zZUNvbmNsdWRlZDogKC4qKScsIGZvc3Nfb3V0cHV0KVswXQorICAgICAgICAjIFRoZXNlIG1heSBiZSBtb3JlIHRoYW4gb25lCisgICAgICAgIHBhY2thZ2VfaW5mb1snUGFja2FnZUxpY2Vuc2VJbmZvRnJvbUZpbGVzJ10gPSByZS5maW5kYWxsKCdQYWNrYWdlTGljZW5zZUluZm9Gcm9tRmlsZXM6ICguKiknLCBmb3NzX291dHB1dCkKKyAgICBlbHNlOgorICAgICAgICBERUZBVUxUID0gIk5PQVNTRVJUSU9OIgorICAgICAgICBwYWNrYWdlX2luZm9bJ1BhY2thZ2VDb3B5cmlnaHRUZXh0J10gPSAiPHRleHQ+IiArIERFRkFVTFQgKyAiPC90ZXh0PiIKKyAgICAgICAgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZURlY2xhcmVkJ10gPSBERUZBVUxUCisgICAgICAgIHBhY2thZ2VfaW5mb1snUGFja2FnZUxpY2Vuc2VDb25jbHVkZWQnXSA9IERFRkFVTFQKKyAgICAgICAgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZUluZm9Gcm9tRmlsZXMnXSA9IFtdCisKKyAgICAjIEZpbGUgaW5mbworICAgIGZpbGVfaW5mbyA9IHt9CisgICAgcmVjb3JkcyA9IFtdCisgICAgIyBGaWxlTmFtZSBpcyBhbHNvIGluIFBhY2thZ2VGaWxlTmFtZSwgc28gd2UgbWF0Y2ggb24gRmlsZVR5cGUgYXMgd2VsbC4KKyAgICByZWNvcmRzID0gcmUuZmluZGFsbCgnRmlsZU5hbWU6Lio/RmlsZVR5cGU6Lio/PC90ZXh0PicsIGZvc3Nfb3V0cHV0LCByZS5TKQorICAgIGZvciByZWMgaW4gcmVjb3JkczoKKyAgICAgICAgY2hrc3VtID0gcmUuZmluZGFsbCgnRmlsZUNoZWNrc3VtOiBTSEExOiAoLiopXG4nLCByZWMpWzBdCisgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dID0ge30KKyAgICAgICAgZmlsZV9pbmZvW2Noa3N1bV1bJ0ZpbGVDb3B5cmlnaHRUZXh0J10gPSByZS5maW5kYWxsKCdGaWxlQ29weXJpZ2h0VGV4dDogJworICAgICAgICAgICAgKyAnKC4qPzwvdGV4dD4pJywgcmVjLCByZS5TIClbMF0KKyAgICAgICAgZmllbGRzID0gWydGaWxlTmFtZScsICdGaWxlVHlwZScsICdMaWNlbnNlQ29uY2x1ZGVkJywgJ0xpY2Vuc2VJbmZvSW5GaWxlJ10KKyAgICAgICAgZm9yIGZpZWxkIGluIGZpZWxkczoKKyAgICAgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dW2ZpZWxkXSA9IHJlLmZpbmRhbGwoZmllbGQgKyAnOiAoLiopJywgcmVjKVswXQorCisgICAgIyBMaWNlbnNlcworICAgIGxpY2Vuc2VfaW5mbyA9IHt9CisgICAgbGljZW5zZXMgPSBbXQorICAgIGxpY2Vuc2VzID0gcmUuZmluZGFsbCgnTGljZW5zZUlEOi4qP0xpY2Vuc2VOYW1lOi4qP1xuJywgZm9zc19vdXRwdXQsIHJlLlMpCisgICAgZm9yIGxpYyBpbiBsaWNlbnNlczoKKyAgICAgICAgbGljZW5zZV9pZCA9IHJlLmZpbmRhbGwoJ0xpY2Vuc2VJRDogKC4qKVxuJywgbGljKVswXQorICAgICAgICBsaWNlbnNlX2luZm9bbGljZW5zZV9pZF0gPSB7fQorICAgICAgICBsaWNlbnNlX2luZm9bbGljZW5zZV9pZF1bJ0V4dHJhY3RlZFRleHQnXSA9IHJlLmZpbmRhbGwoJ0V4dHJhY3RlZFRleHQ6ICguKj88L3RleHQ+KScsIGxpYywgcmUuUylbMF0KKyAgICAgICAgbGljZW5zZV9pbmZvW2xpY2Vuc2VfaWRdWydMaWNlbnNlTmFtZSddID0gcmUuZmluZGFsbCgnTGljZW5zZU5hbWU6ICguKiknLCBsaWMpWzBdCisKKyAgICByZXR1cm4gKHBhY2thZ2VfaW5mbywgZmlsZV9pbmZvLCBsaWNlbnNlX2luZm8pCisKK2RlZiBjcmVhdGVfc3BkeF9kb2MoZmlsZV9pbmZvLCBzY2FubmVkX2ZpbGVzKToKKyAgICBpbXBvcnQganNvbgorICAgICMjIHB1c2ggZm9zcyBjaGFuZ2VzIGJhY2sgaW50byBjYWNoZQorICAgIGZvciBjaGtzdW0sIGxpY19pbmZvIGluIHNjYW5uZWRfZmlsZXMuaXRlcml0ZW1zKCk6CisgICAgICAgIGlmIGNoa3N1bSBpbiBmaWxlX2luZm86CisgICAgICAgICAgICBmaWxlX2luZm9bY2hrc3VtXVsnRmlsZVR5cGUnXSA9IGxpY19pbmZvWydGaWxlVHlwZSddCisgICAgICAgICAgICBmaWxlX2luZm9bY2hrc3VtXVsnRmlsZUNoZWNrc3VtOiBTSEExJ10gPSBjaGtzdW0KKyAgICAgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dWydMaWNlbnNlSW5mb0luRmlsZSddID0gbGljX2luZm9bJ0xpY2Vuc2VJbmZvSW5GaWxlJ10KKyAgICAgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dWydMaWNlbnNlQ29uY2x1ZGVkJ10gPSBsaWNfaW5mb1snTGljZW5zZUNvbmNsdWRlZCddCisgICAgICAgICAgICBmaWxlX2luZm9bY2hrc3VtXVsnRmlsZUNvcHlyaWdodFRleHQnXSA9IGxpY19pbmZvWydGaWxlQ29weXJpZ2h0VGV4dCddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi53YXJuKCJTUERYOiAiICsgbGljX2luZm9bJ0ZpbGVOYW1lJ10gKyAiIDogIiArIGNoa3N1bQorICAgICAgICAgICAgICAgICsgIiA6IGlzIG5vdCBpbiB0aGUgbG9jYWwgZmlsZSBpbmZvOiAiCisgICAgICAgICAgICAgICAgKyBqc29uLmR1bXBzKGxpY19pbmZvLCBpbmRlbnQ9MSkpCisgICAgcmV0dXJuIGZpbGVfaW5mbworCitkZWYgZ2V0X3Zlcl9jb2RlKGRpcm5hbWUpOgorICAgIGNoa3N1bXMgPSBbXQorICAgIGZvciBmX2RpciwgZiBpbiBsaXN0X2ZpbGVzKGRpcm5hbWUpOgorICAgICAgICBoYXNoID0gaGFzaF9maWxlKG9zLnBhdGguam9pbihkaXJuYW1lLCBmX2RpciwgZikpCisgICAgICAgIGlmIG5vdCBoYXNoIGlzIE5vbmU6CisgICAgICAgICAgICBjaGtzdW1zLmFwcGVuZChoYXNoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIud2FybigiU1BEWDogQ291bGQgbm90IGhhc2ggZmlsZTogIiArIHBhdGgpCisgICAgdmVyX2NvZGVfc3RyaW5nID0gJycuam9pbihjaGtzdW1zKS5sb3dlcigpCisgICAgdmVyX2NvZGUgPSBoYXNoX3N0cmluZyh2ZXJfY29kZV9zdHJpbmcpCisgICAgcmV0dXJuIHZlcl9jb2RlCisKK2RlZiBnZXRfaGVhZGVyX2luZm8oaW5mbywgc3BkeF92ZXJpZmljYXRpb25fY29kZSwgcGFja2FnZV9pbmZvKToKKyAgICAiIiIKKyAgICAgICAgUHV0IHRvZ2V0aGVyIHRoZSBoZWFkZXIgU1BEWCBpbmZvcm1hdGlvbi4KKyAgICAgICAgRXZlbnR1YWxseSB0aGlzIG5lZWRzIHRvIGJlY29tZSBhIGxvdCBsZXNzCisgICAgICAgIG9mIGEgaGFyZGNvZGVkIHRoaW5nLgorICAgICIiIgorICAgIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCisgICAgaW1wb3J0IG9zCisgICAgaGVhZCA9IFtdCisgICAgREVGQVVMVCA9ICJOT0FTU0VSVElPTiIKKworICAgIHBhY2thZ2VfY2hlY2tzdW0gPSBoYXNoX2ZpbGUoaW5mb1sndGFyX2ZpbGUnXSkKKyAgICBpZiBwYWNrYWdlX2NoZWNrc3VtIGlzIE5vbmU6CisgICAgICAgIHBhY2thZ2VfY2hlY2tzdW0gPSBERUZBVUxUCisKKyAgICAjIyBkb2N1bWVudCBsZXZlbCBpbmZvcm1hdGlvbgorICAgIGhlYWQuYXBwZW5kKCIjIyBTUERYIERvY3VtZW50IEluZm9ybWF0aW9uIikKKyAgICBoZWFkLmFwcGVuZCgiU1BEWFZlcnNpb246ICIgKyBpbmZvWydzcGR4X3ZlcnNpb24nXSkKKyAgICBoZWFkLmFwcGVuZCgiRGF0YUxpY2Vuc2U6ICIgKyBpbmZvWydkYXRhX2xpY2Vuc2UnXSkKKyAgICBoZWFkLmFwcGVuZCgiRG9jdW1lbnRDb21tZW50OiA8dGV4dD5TUERYIGZvciAiCisgICAgICAgICsgaW5mb1sncG4nXSArICIgdmVyc2lvbiAiICsgaW5mb1sncHYnXSArICI8L3RleHQ+IikKKyAgICBoZWFkLmFwcGVuZCgiIikKKworICAgICMjIENyZWF0b3IgaW5mb3JtYXRpb24KKyAgICAjIyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBnaXZlIHRpbWUgaW4gVVRDLgorICAgIG5vdyA9IGRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKQorICAgIGhlYWQuYXBwZW5kKCIjIyBDcmVhdGlvbiBJbmZvcm1hdGlvbiIpCisgICAgIyMgVG9vbHMgYXJlIHN1cHBvc2VkIHRvIGhhdmUgYSB2ZXJzaW9uLCBidXQgRk9TU29sb2d5K1NQRFggcHJvdmlkZXMgbm9uZS4KKyAgICBoZWFkLmFwcGVuZCgiQ3JlYXRvcjogVG9vbDogRk9TU29sb2d5K1NQRFgiKQorICAgIGhlYWQuYXBwZW5kKCJDcmVhdGVkOiAiICsgbm93KQorICAgIGhlYWQuYXBwZW5kKCJDcmVhdG9yQ29tbWVudDogPHRleHQ+VU5PPC90ZXh0PiIpCisgICAgaGVhZC5hcHBlbmQoIiIpCisKKyAgICAjIyBwYWNrYWdlIGxldmVsIGluZm9ybWF0aW9uCisgICAgaGVhZC5hcHBlbmQoIiMjIFBhY2thZ2UgSW5mb3JtYXRpb24iKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlTmFtZTogIiArIGluZm9bJ3BuJ10pCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VWZXJzaW9uOiAiICsgaW5mb1sncHYnXSkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZUZpbGVOYW1lOiAiICsgb3MucGF0aC5iYXNlbmFtZShpbmZvWyd0YXJfZmlsZSddKSkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZVN1cHBsaWVyOiBQZXJzb246IiArIERFRkFVTFQpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VEb3dubG9hZExvY2F0aW9uOiAiICsgREVGQVVMVCkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZVN1bW1hcnk6IDx0ZXh0PjwvdGV4dD4iKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlT3JpZ2luYXRvcjogUGVyc29uOiIgKyBERUZBVUxUKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlQ2hlY2tzdW06IFNIQTE6ICIgKyBwYWNrYWdlX2NoZWNrc3VtKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlVmVyaWZpY2F0aW9uQ29kZTogIiArIHNwZHhfdmVyaWZpY2F0aW9uX2NvZGUpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VEZXNjcmlwdGlvbjogPHRleHQ+IiArIGluZm9bJ3BuJ10KKyAgICAgICAgKyAiIHZlcnNpb24gIiArIGluZm9bJ3B2J10gKyAiPC90ZXh0PiIpCisgICAgaGVhZC5hcHBlbmQoIiIpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VDb3B5cmlnaHRUZXh0OiAiCisgICAgICAgICsgcGFja2FnZV9pbmZvWydQYWNrYWdlQ29weXJpZ2h0VGV4dCddKQorICAgIGhlYWQuYXBwZW5kKCIiKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlTGljZW5zZURlY2xhcmVkOiAiCisgICAgICAgICsgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZURlY2xhcmVkJ10pCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VMaWNlbnNlQ29uY2x1ZGVkOiAiCisgICAgICAgICsgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZUNvbmNsdWRlZCddKQorCisgICAgZm9yIGxpY3JlZiBpbiBwYWNrYWdlX2luZm9bJ1BhY2thZ2VMaWNlbnNlSW5mb0Zyb21GaWxlcyddOgorICAgICAgICBoZWFkLmFwcGVuZCgiUGFja2FnZUxpY2Vuc2VJbmZvRnJvbUZpbGVzOiAiICsgbGljcmVmKQorICAgIGhlYWQuYXBwZW5kKCIiKQorICAgIAorICAgICMjIGhlYWRlciBmb3IgZmlsZSBsZXZlbAorICAgIGhlYWQuYXBwZW5kKCIjIyBGaWxlIEluZm9ybWF0aW9uIikKKyAgICBoZWFkLmFwcGVuZCgiIikKKworICAgIHJldHVybiAnXG4nLmpvaW4oaGVhZCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NzdGF0ZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3N0YXRlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlhZDZkYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NzdGF0ZS5iYmNsYXNzCkBAIC0wLDAgKzEsOTUxIEBACitTU1RBVEVfVkVSU0lPTiA9ICIzIgorCitTU1RBVEVfTUFOSUZFU1RTID89ICIke1RNUERJUn0vc3N0YXRlLWNvbnRyb2wiCitTU1RBVEVfTUFORklMRVBSRUZJWCA9ICIke1NTVEFURV9NQU5JRkVTVFN9L21hbmlmZXN0LSR7U1NUQVRFX01BTk1BQ0h9LSR7UE59IgorCitkZWYgZ2VuZXJhdGVfc3N0YXRlZm4oc3BlYywgaGFzaCwgZCk6CisgICAgaWYgbm90IGhhc2g6CisgICAgICAgIGhhc2ggPSAiSU5WQUxJRCIKKyAgICByZXR1cm4gaGFzaFs6Ml0gKyAiLyIgKyBzcGVjICsgaGFzaAorCitTU1RBVEVfUEtHQVJDSCAgICA9ICIke1BBQ0tBR0VfQVJDSH0iCitTU1RBVEVfUEtHU1BFQyAgICA9ICJzc3RhdGU6JHtQTn06JHtQQUNLQUdFX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU306JHtQVn06JHtQUn06JHtTU1RBVEVfUEtHQVJDSH06JHtTU1RBVEVfVkVSU0lPTn06IgorU1NUQVRFX1NXU1BFQyAgICAgPSAic3N0YXRlOiR7QlBOfTo6JHtQVn06JHtQUn06OiR7U1NUQVRFX1ZFUlNJT059OiIKK1NTVEFURV9QS0dOQU1FICAgID0gIiR7U1NUQVRFX0VYVFJBUEFUSH0ke0BnZW5lcmF0ZV9zc3RhdGVmbihkLmdldFZhcignU1NUQVRFX1BLR1NQRUMnLCBUcnVlKSwgZC5nZXRWYXIoJ0JCX1RBU0tIQVNIJywgVHJ1ZSksIGQpfSIKK1NTVEFURV9QS0cgICAgICAgID0gIiR7U1NUQVRFX0RJUn0vJHtTU1RBVEVfUEtHTkFNRX0iCitTU1RBVEVfRVhUUkFQQVRIICAgPSAiIgorU1NUQVRFX0VYVFJBUEFUSFdJTERDQVJEID0gIiIKK1NTVEFURV9QQVRIU1BFQyAgID0gIiR7U1NUQVRFX0RJUn0vJHtTU1RBVEVfRVhUUkFQQVRIV0lMRENBUkR9Ki8ke1NTVEFURV9QS0dTUEVDfSIKKworIyBXZSBkb24ndCB3YW50IHRoZSBzc3RhdGUgdG8gZGVwZW5kIG9uIHRoaW5ncyBsaWtlIHRoZSBkaXN0cm8gc3RyaW5nCisjIG9mIHRoZSBzeXN0ZW0sIHdlIGxldCB0aGUgc3N0YXRlIHBhdGhzIHRha2UgY2FyZSBvZiB0aGlzLgorU1NUQVRFX0VYVFJBUEFUSFt2YXJkZXB2YWx1ZV0gPSAiIgorCisjIEZvciBtdWx0aWxpYiBycG0gdGhlIGFsbGFyY2ggcGFja2FnZWdyb3VwIGZpbGVzIGNhbiBvdmVyd3JpdGUgKGluIHRoZW9yeSB0aGV5J3JlIGlkZW50aWNhbCkKK1NTVEFURV9EVVBXSElURUxJU1QgPSAiJHtERVBMT1lfRElSX0lNQUdFfS8gJHtERVBMT1lfRElSfS9saWNlbnNlcy8gJHtERVBMT1lfRElSX1JQTX0vYWxsLyIKKyMgQXZvaWQgZG9jYm9vay9zZ21sIGNhdGFsb2cgd2FybmluZ3MgZm9yIG5vdworU1NUQVRFX0RVUFdISVRFTElTVCArPSAiJHtTVEFHSU5HX0VUQ0RJUl9OQVRJVkV9L3NnbWwgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9zZ21sIgorIyBBcmNoaXZlIHRoZSBzb3VyY2VzIGZvciBtYW55IGFyY2hpdGVjdHVyZXMgaW4gb25lIGRlcGxveSBmb2xkZXIKK1NTVEFURV9EVVBXSElURUxJU1QgKz0gIiR7REVQTE9ZX0RJUl9TUkN9IgorCitTU1RBVEVfU0NBTl9GSUxFUyA/PSAiKi5sYSAqLWNvbmZpZyAqX2NvbmZpZyIKK1NTVEFURV9TQ0FOX0NNRCA/PSAnZmluZCAke1NTVEFURV9CVUlMRERJUn0gXCggLW5hbWUgIiR7QCJcIiAtbyAtbmFtZSBcIiIuam9pbihkLmdldFZhcigiU1NUQVRFX1NDQU5fRklMRVMiLCBUcnVlKS5zcGxpdCgpKX0iIFwpIC10eXBlIGYnCisKK0JCX0hBU0hGSUxFTkFNRSA9ICIke1NTVEFURV9FWFRSQVBBVEh9ICR7U1NUQVRFX1BLR1NQRUN9ICR7U1NUQVRFX1NXU1BFQ30iCisKK1NTVEFURV9BUkNIUyA9ICIgXAorICAgICR7QlVJTERfQVJDSH0gXAorICAgICR7QlVJTERfQVJDSH1fJHtTREtfQVJDSH1fJHtTREtfT1N9IFwKKyAgICAke0JVSUxEX0FSQ0h9XyR7VEFSR0VUX0FSQ0h9IFwKKyAgICAke1NES19BUkNIfV8ke1NES19PU30gXAorICAgICR7U0RLX0FSQ0h9XyR7UEFDS0FHRV9BUkNIfSBcCisgICAgYWxsYXJjaCBcCisgICAgJHtQQUNLQUdFX0FSQ0h9IFwKKyAgICAke01BQ0hJTkV9IgorCitTU1RBVEVfTUFOTUFDSCA/PSAiJHtTU1RBVEVfUEtHQVJDSH0iCisKK1NTVEFURUNSRUFURUZVTkNTID0gInNzdGF0ZV9oYXJkY29kZV9wYXRoIgorU1NUQVRFUE9TVENSRUFURUZVTkNTID0gIiIKK1NTVEFURVBSRUlOU1RGVU5DUyA9ICIiCitTU1RBVEVQT1NUVU5QQUNLRlVOQ1MgPSAic3N0YXRlX2hhcmRjb2RlX3BhdGhfdW5wYWNrIgorU1NUQVRFUE9TVElOU1RGVU5DUyA9ICIiCitFWFRSQV9TVEFHSU5HX0ZJWE1FUyA/PSAiIgorCitTSUdHRU5fTE9DS0VEU0lHU19DSEVDS19MRVZFTCA/PSAnZXJyb3InCisKKyMgVGhlIEdudVBHIGtleSBJRCBhbmQgcGFzc3BocmFzZSB0byB1c2UgdG8gc2lnbiBzc3RhdGUgYXJjaGl2ZXMgKG9yIHVuc2V0IHRvCisjIG5vdCBzaWduKQorU1NUQVRFX1NJR19LRVkgPz0gIiIKK1NTVEFURV9TSUdfUEFTU1BIUkFTRSA/PSAiIgorIyBXaGV0aGVyIHRvIHZlcmlmeSB0aGUgR25VUEcgc2lnbmF0dXJlcyB3aGVuIGV4dHJhY3Rpbmcgc3N0YXRlIGFyY2hpdmVzCitTU1RBVEVfVkVSSUZZX1NJRyA/PSAiMCIKKworIyBTcGVjaWZ5IGRpcnMgaW4gd2hpY2ggdGhlIHNoZWxsIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGFuZCBkb24ndCB1c2UgJHtCfQorIyBhcyBkZWZhdWx0IGRpcnMgdG8gYXZvaWQgcG9zc2libGUgcmFjZSBhYm91dCAke0J9IHdpdGggb3RoZXIgdGFzay4KK3NzdGF0ZV9jcmVhdGVfcGFja2FnZVtkaXJzXSA9ICIke1NTVEFURV9CVUlMRERJUn0iCitzc3RhdGVfdW5wYWNrX3BhY2thZ2VbZGlyc10gPSAiJHtTU1RBVEVfSU5TVERJUn0iCisKKyMgRG8gbm90IHJ1biBzc3RhdGVfaGFyZGNvZGVfcGF0aCgpIGluICR7Qn06CisjIHRoZSAke0J9IG1heWJlIHJlbW92ZWQgYnkgY21ha2VfZG9fY29uZmlndXJlKCkgd2hpbGUKKyMgc3N0YXRlX2hhcmRjb2RlX3BhdGgoKSBydW5uaW5nLgorc3N0YXRlX2hhcmRjb2RlX3BhdGhbZGlyc10gPSAiJHtTU1RBVEVfQlVJTERESVJ9IgorCitweXRob24gKCkgeworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpOgorICAgICAgICBkLnNldFZhcignU1NUQVRFX1BLR0FSQ0gnLCBkLmdldFZhcignQlVJTERfQVJDSCcsIEZhbHNlKSkKKyAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCk6CisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfUEtHQVJDSCcsIGQuZXhwYW5kKCIke0JVSUxEX0FSQ0h9XyR7U0RLX0FSQ0h9XyR7U0RLX09TfSIpKQorICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKToKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9QS0dBUkNIJywgZC5leHBhbmQoIiR7QlVJTERfQVJDSH1fJHtUQVJHRVRfQVJDSH0iKSkKKyAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpOgorICAgICAgICBkLnNldFZhcignU1NUQVRFX1BLR0FSQ0gnLCBkLmV4cGFuZCgiJHtTREtfQVJDSH1fJHtTREtfT1N9IikpCisgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGQpOgorICAgICAgICBkLnNldFZhcignU1NUQVRFX1BLR0FSQ0gnLCBkLmV4cGFuZCgiJHtTREtfQVJDSH1fJHtQQUNLQUdFX0FSQ0h9IikpCisgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdhbGxhcmNoJywgZCkgYW5kIGQuZ2V0VmFyKCJQQUNLQUdFX0FSQ0giLCBUcnVlKSA9PSAiYWxsIjoKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9QS0dBUkNIJywgImFsbGFyY2giKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfTUFOTUFDSCcsIGQuZXhwYW5kKCIke1BBQ0tBR0VfQVJDSH0iKSkKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKToKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9FWFRSQVBBVEgnLCAiJHtOQVRJVkVMU0JTVFJJTkd9LyIpCisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfRVhUUkFQQVRIV0lMRENBUkQnLCAiKi8iKQorCisgICAgIyBUaGVzZSBjbGFzc2VzIGVuY29kZSBzdGFnaW5nIHBhdGhzIGludG8gdGhlaXIgc2NyaXB0cyBkYXRhIHNvIGNhbiBvbmx5IGJlCisgICAgIyByZXVzZWQgaWYgd2UgbWFuaXB1bGF0ZSB0aGUgcGF0aHMKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3NkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCk6CisgICAgICAgIHNjYW5fY21kID0gImdyZXAgLUlybCAke1NUQUdJTkdfRElSfSAke1NTVEFURV9CVUlMRERJUn0iCisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfU0NBTl9DTUQnLCBzY2FuX2NtZCkKKworICAgIHVuaXF1ZV90YXNrcyA9IHNldCgoZC5nZXRWYXIoJ1NTVEFURVRBU0tTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgZC5zZXRWYXIoJ1NTVEFURVRBU0tTJywgIiAiLmpvaW4odW5pcXVlX3Rhc2tzKSkKKyAgICBmb3IgdGFzayBpbiB1bmlxdWVfdGFza3M6CisgICAgICAgIGQucHJlcGVuZFZhckZsYWcodGFzaywgJ3ByZWZ1bmNzJywgInNzdGF0ZV90YXNrX3ByZWZ1bmMgIikKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKHRhc2ssICdwb3N0ZnVuY3MnLCAiIHNzdGF0ZV90YXNrX3Bvc3RmdW5jIikKK30KKworZGVmIHNzdGF0ZV9pbml0KHRhc2ssIGQpOgorICAgIHNzID0ge30KKyAgICBzc1sndGFzayddID0gdGFzaworICAgIHNzWydkaXJzJ10gPSBbXQorICAgIHNzWydwbGFpbmRpcnMnXSA9IFtdCisgICAgc3NbJ2xvY2tmaWxlcyddID0gW10KKyAgICBzc1snbG9ja2ZpbGVzLXNoYXJlZCddID0gW10KKyAgICByZXR1cm4gc3MKKworZGVmIHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhkLCB0YXNrID0gTm9uZSk6CisgICAgaWYgdGFzayBpcyBOb25lOgorICAgICAgICB0YXNrID0gZC5nZXRWYXIoJ0JCX0NVUlJFTlRUQVNLJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHRhc2s6CisgICAgICAgICAgICBiYi5mYXRhbCgic3N0YXRlIGNvZGUgcnVubmluZyB3aXRob3V0IHRhc2sgY29udGV4dD8hIikKKyAgICAgICAgdGFzayA9IHRhc2sucmVwbGFjZSgiX3NldHNjZW5lIiwgIiIpCisKKyAgICBpZiB0YXNrLnN0YXJ0c3dpdGgoImRvXyIpOgorICAgICAgICB0YXNrID0gdGFza1szOl0KKyAgICBpbnB1dHMgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1pbnB1dGRpcnMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIG91dHB1dHMgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1vdXRwdXRkaXJzJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBwbGFpbmRpcnMgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1wbGFpbmRpcnMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGxvY2tmaWxlcyA9IChkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3N0YXRlLWxvY2tmaWxlJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBsb2NrZmlsZXNzaGFyZWQgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1sb2NrZmlsZS1zaGFyZWQnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGludGVyY2VwdGZ1bmNzID0gKGQuZ2V0VmFyRmxhZygiZG9fIiArIHRhc2ssICdzc3RhdGUtaW50ZXJjZXB0ZnVuY3MnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIG5vdCB0YXNrIG9yIGxlbihpbnB1dHMpICE9IGxlbihvdXRwdXRzKToKKyAgICAgICAgYmIuZmF0YWwoInNzdGF0ZSB2YXJpYWJsZXMgbm90IHNldHVwIGNvcnJlY3RseT8hIikKKworICAgIGlmIHRhc2sgPT0gInBvcHVsYXRlX2xpYyI6CisgICAgICAgIGQuc2V0VmFyKCJTU1RBVEVfUEtHU1BFQyIsICIke1NTVEFURV9TV1NQRUN9IikKKyAgICAgICAgZC5zZXRWYXIoIlNTVEFURV9FWFRSQVBBVEgiLCAiIikKKworICAgIHNzID0gc3N0YXRlX2luaXQodGFzaywgZCkKKyAgICBmb3IgaSBpbiByYW5nZShsZW4oaW5wdXRzKSk6CisgICAgICAgIHNzdGF0ZV9hZGQoc3MsIGlucHV0c1tpXSwgb3V0cHV0c1tpXSwgZCkKKyAgICBzc1snbG9ja2ZpbGVzJ10gPSBsb2NrZmlsZXMKKyAgICBzc1snbG9ja2ZpbGVzLXNoYXJlZCddID0gbG9ja2ZpbGVzc2hhcmVkCisgICAgc3NbJ3BsYWluZGlycyddID0gcGxhaW5kaXJzCisgICAgc3NbJ2ludGVyY2VwdGZ1bmNzJ10gPSBpbnRlcmNlcHRmdW5jcworICAgIHJldHVybiBzcworCitkZWYgc3N0YXRlX2FkZChzcywgc291cmNlLCBkZXN0LCBkKToKKyAgICBpZiBub3Qgc291cmNlLmVuZHN3aXRoKCIvIik6CisgICAgICAgICBzb3VyY2UgPSBzb3VyY2UgKyAiLyIKKyAgICBpZiBub3QgZGVzdC5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgZGVzdCA9IGRlc3QgKyAiLyIKKyAgICBzb3VyY2UgPSBvcy5wYXRoLm5vcm1wYXRoKHNvdXJjZSkKKyAgICBkZXN0ID0gb3MucGF0aC5ub3JtcGF0aChkZXN0KQorICAgIHNyY2Jhc2UgPSBvcy5wYXRoLmJhc2VuYW1lKHNvdXJjZSkKKyAgICBzc1snZGlycyddLmFwcGVuZChbc3JjYmFzZSwgc291cmNlLCBkZXN0XSkKKyAgICByZXR1cm4gc3MKKworZGVmIHNzdGF0ZV9pbnN0YWxsKHNzLCBkKToKKyAgICBpbXBvcnQgb2UucGF0aAorICAgIGltcG9ydCBvZS5zc3RhdGVzaWcKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgc2hhcmVkZmlsZXMgPSBbXQorICAgIHNoYXJlZGRpcnMgPSBbXQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkLmV4cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RTfSIpKQorCisgICAgbWFuaWZlc3QsIGQyID0gb2Uuc3N0YXRlc2lnLnNzdGF0ZV9nZXRfbWFuaWZlc3RfZmlsZW5hbWUoc3NbJ3Rhc2snXSwgZCkKKworICAgIGlmIG9zLmFjY2VzcyhtYW5pZmVzdCwgb3MuUl9PSyk6CisgICAgICAgIGJiLmZhdGFsKCJQYWNrYWdlIGFscmVhZHkgc3RhZ2VkICglcyk/ISIgJSBtYW5pZmVzdCkKKworICAgIGxvY2tzID0gW10KKyAgICBmb3IgbG9jayBpbiBzc1snbG9ja2ZpbGVzLXNoYXJlZCddOgorICAgICAgICBsb2Nrcy5hcHBlbmQoYmIudXRpbHMubG9ja2ZpbGUobG9jaywgVHJ1ZSkpCisgICAgZm9yIGxvY2sgaW4gc3NbJ2xvY2tmaWxlcyddOgorICAgICAgICBsb2Nrcy5hcHBlbmQoYmIudXRpbHMubG9ja2ZpbGUobG9jaykpCisKKyAgICBmb3Igc3RhdGUgaW4gc3NbJ2RpcnMnXToKKyAgICAgICAgYmIuZGVidWcoMiwgIlN0YWdpbmcgZmlsZXMgZnJvbSAlcyB0byAlcyIgJSAoc3RhdGVbMV0sIHN0YXRlWzJdKSkKKyAgICAgICAgZm9yIHdhbGtyb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHN0YXRlWzFdKToKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIHNyY3BhdGggPSBvcy5wYXRoLmpvaW4od2Fsa3Jvb3QsIGZpbGUpCisgICAgICAgICAgICAgICAgZHN0cGF0aCA9IHNyY3BhdGgucmVwbGFjZShzdGF0ZVsxXSwgc3RhdGVbMl0pCisgICAgICAgICAgICAgICAgI2JiLmRlYnVnKDIsICJTdGFnaW5nICVzIHRvICVzIiAlIChzcmNwYXRoLCBkc3RwYXRoKSkKKyAgICAgICAgICAgICAgICBzaGFyZWRmaWxlcy5hcHBlbmQoZHN0cGF0aCkKKyAgICAgICAgICAgIGZvciBkaXIgaW4gZGlyczoKKyAgICAgICAgICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4od2Fsa3Jvb3QsIGRpcikKKyAgICAgICAgICAgICAgICBkc3RkaXIgPSBzcmNkaXIucmVwbGFjZShzdGF0ZVsxXSwgc3RhdGVbMl0pCisgICAgICAgICAgICAgICAgI2JiLmRlYnVnKDIsICJTdGFnaW5nICVzIHRvICVzIiAlIChzcmNkaXIsIGRzdGRpcikpCisgICAgICAgICAgICAgICAgaWYgbm90IGRzdGRpci5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICAgICBkc3RkaXIgPSBkc3RkaXIgKyAiLyIKKyAgICAgICAgICAgICAgICBzaGFyZWRkaXJzLmFwcGVuZChkc3RkaXIpCisKKyAgICAjIENoZWNrIHRoZSBmaWxlIGxpc3QgZm9yIGNvbmZsaWN0cyBhZ2FpbnN0IGZpbGVzIHdoaWNoIGFscmVhZHkgZXhpc3QKKyAgICB3aGl0ZWxpc3QgPSAoZC5nZXRWYXIoIlNTVEFURV9EVVBXSElURUxJU1QiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIG1hdGNoID0gW10KKyAgICBmb3IgZiBpbiBzaGFyZWRmaWxlczoKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZik6CisgICAgICAgICAgICBmID0gb3MucGF0aC5ub3JtcGF0aChmKQorICAgICAgICAgICAgcmVhbG1hdGNoID0gVHJ1ZQorICAgICAgICAgICAgZm9yIHcgaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgICAgIGlmIGYuc3RhcnRzd2l0aCh3KToKKyAgICAgICAgICAgICAgICAgICAgcmVhbG1hdGNoID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHJlYWxtYXRjaDoKKyAgICAgICAgICAgICAgICBtYXRjaC5hcHBlbmQoZikKKyAgICAgICAgICAgICAgICBzc3RhdGVfc2VhcmNoX2NtZCA9ICJncmVwIC1ybCAnJXMnICVzIC0tZXhjbHVkZT1tYXN0ZXIubGlzdCB8IHNlZCAtZSAnczpeLiovOjonIC1lICdzOlwucG9wdWxhdGUtc3lzcm9vdDo6JyIgJSAoZiwgZC5leHBhbmQoIiR7U1NUQVRFX01BTklGRVNUU30iKSkKKyAgICAgICAgICAgICAgICBzZWFyY2hfb3V0cHV0ID0gc3VicHJvY2Vzcy5Qb3Blbihzc3RhdGVfc2VhcmNoX2NtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICAgICAgICAgIGlmIHNlYXJjaF9vdXRwdXQgIT0gIiI6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoLmFwcGVuZCgiTWF0Y2hlZCBpbiAlcyIgJSBzZWFyY2hfb3V0cHV0LnJzdHJpcCgpKQorICAgIGlmIG1hdGNoOgorICAgICAgICBiYi5lcnJvcigiVGhlIHJlY2lwZSAlcyBpcyB0cnlpbmcgdG8gaW5zdGFsbCBmaWxlcyBpbnRvIGEgc2hhcmVkICIgXAorICAgICAgICAgICJhcmVhIHdoZW4gdGhvc2UgZmlsZXMgYWxyZWFkeSBleGlzdC4gVGhvc2UgZmlsZXMgYW5kIHRoZWlyIG1hbmlmZXN0ICIgXAorICAgICAgICAgICJsb2NhdGlvbiBhcmU6XG4gICAlc1xuUGxlYXNlIHZlcmlmeSB3aGljaCByZWNpcGUgc2hvdWxkIHByb3ZpZGUgdGhlICIgXAorICAgICAgICAgICJhYm92ZSBmaWxlcy5cblRoZSBidWlsZCBoYXMgc3RvcHBlZCBhcyBjb250aW51aW5nIGluIHRoaXMgc2NlbmFyaW8gV0lMTCAiIFwKKyAgICAgICAgICAiYnJlYWsgdGhpbmdzLCBpZiBub3Qgbm93LCBwb3NzaWJseSBpbiB0aGUgZnV0dXJlICh3ZSd2ZSBzZWVuIGJ1aWxkcyBmYWlsICIgXAorICAgICAgICAgICJzZXZlcmFsIG1vbnRocyBsYXRlcikuIElmIHRoZSBzeXN0ZW0ga25ldyBob3cgdG8gcmVjb3ZlciBmcm9tIHRoaXMgIiBcCisgICAgICAgICAgImF1dG9tYXRpY2FsbHkgaXQgd291bGQgaG93ZXZlciB0aGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgc2NlbmFyaW9zICIgXAorICAgICAgICAgICJ3aGljaCBjYW4gcmVzdWx0IGluIHRoaXMgYW5kIHdlIGRvbid0IGtub3cgd2hpY2ggb25lIHRoaXMgaXMuIEl0IG1heSBiZSAiIFwKKyAgICAgICAgICAieW91IGhhdmUgc3dpdGNoZWQgcHJvdmlkZXJzIG9mIHNvbWV0aGluZyBsaWtlIHZpcnR1YWwva2VybmVsIChlLmcuIGZyb20gIiBcCisgICAgICAgICAgImxpbnV4LXlvY3RvIHRvIGxpbnV4LXlvY3RvLWRldiksIGluIHRoYXQgY2FzZSB5b3UgbmVlZCB0byBleGVjdXRlIHRoZSAiIFwKKyAgICAgICAgICAiY2xlYW4gdGFzayBmb3IgYm90aCByZWNpcGVzIGFuZCBpdCB3aWxsIHJlc29sdmUgdGhpcyBlcnJvci4gSXQgbWF5IGJlICIgXAorICAgICAgICAgICJ5b3UgY2hhbmdlZCBESVNUUk9fRkVBVFVSRVMgZnJvbSBzeXN0ZW1kIHRvIHVkZXYgb3IgdmljZSB2ZXJzYS4gQ2xlYW5pbmcgIiBcCisgICAgICAgICAgInRob3NlIHJlY2lwZXMgc2hvdWxkIGFnYWluIHJlc29sdmUgdGhpcyBlcnJvciBob3dldmVyIHN3aXRjaGluZyAiIFwKKyAgICAgICAgICAiRElTVFJPX0ZFQVRVUkVTIG9uIGFuIGV4aXN0aW5nIGJ1aWxkIGRpcmVjdG9yeSBpcyBub3Qgc3VwcG9ydGVkLCB5b3UgIiBcCisgICAgICAgICAgInNob3VsZCByZWFsbHkgY2xlYW4gb3V0IHRtcCBhbmQgcmVidWlsZCAocmV1c2luZyBzc3RhdGUgc2hvdWxkIGJlIHNhZmUpLiAiIFwKKyAgICAgICAgICAiSXQgY291bGQgYmUgdGhlIG92ZXJsYXBwaW5nIGZpbGVzIGRldGVjdGVkIGFyZSBoYXJtbGVzcyBpbiB3aGljaCBjYXNlICIgXAorICAgICAgICAgICJhZGRpbmcgdGhlbSB0byBTU1RBVEVfRFVQV0hJVEVMSVNUIG1heSBiZSB0aGUgY29ycmVjdCBzb2x1dGlvbi4gSXQgY291bGQgIiBcCisgICAgICAgICAgImFsc28gYmUgeW91ciBidWlsZCBpcyBpbmNsdWRpbmcgdHdvIGRpZmZlcmVudCBjb25mbGljdGluZyB2ZXJzaW9ucyBvZiAiIFwKKyAgICAgICAgICAidGhpbmdzIChlLmcuIGJsdWV6IDQgYW5kIGJsdWV6IDUgYW5kIHRoZSBjb3JyZWN0IHNvbHV0aW9uIGZvciB0aGF0IHdvdWxkICIgXAorICAgICAgICAgICJiZSB0byByZXNvbHZlIHRoZSBjb25mbGljdC4gSWYgaW4gZG91YnQsIHBsZWFzZSBhc2sgb24gdGhlIG1haWxpbmcgbGlzdCwgIiBcCisgICAgICAgICAgInNoYXJpbmcgdGhlIGVycm9yIGFuZCBmaWxlbGlzdCBhYm92ZS4iICUgXAorICAgICAgICAgIChkLmdldFZhcignUE4nLCBUcnVlKSwgIlxuICIuam9pbihtYXRjaCkpKQorICAgICAgICBiYi5mYXRhbCgiSWYgdGhlIGFib3ZlIG1lc3NhZ2UgaXMgdG9vIG11Y2gsIHRoZSBzaW1wbGVyIHZlcnNpb24gaXMgeW91J3JlIGFkdmlzZWQgdG8gd2lwZSBvdXQgdG1wIGFuZCByZWJ1aWxkIChyZXVzaW5nIHNzdGF0ZSBpcyBmaW5lKS4gVGhhdCB3aWxsIGxpa2VseSBmaXggdGhpbmdzIGluIG1vc3QgKGJ1dCBub3QgYWxsKSBjYXNlcy4iKQorCisgICAgIyBXcml0ZSBvdXQgdGhlIG1hbmlmZXN0CisgICAgZiA9IG9wZW4obWFuaWZlc3QsICJ3IikKKyAgICBmb3IgZmlsZSBpbiBzaGFyZWRmaWxlczoKKyAgICAgICAgZi53cml0ZShmaWxlICsgIlxuIikKKworICAgICMgV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBkaXJlY3RvcmllcyBhcHBlYXIgYXQgdGhlIGVuZCBvZiB0aGUgbWFuaWZlc3QKKyAgICAjIHNvIHRoYXQgd2hlbiB3ZSB0ZXN0IHRvIHNlZSBpZiB0aGV5IHNob3VsZCBiZSBkZWxldGVkIGFueSBjb250ZW50cworICAgICMgYWRkZWQgYnkgdGhlIHRhc2sgd2lsbCBoYXZlIGJlZW4gcmVtb3ZlZCBmaXJzdC4KKyAgICBkaXJzID0gc29ydGVkKHNoYXJlZGRpcnMsIGtleT1sZW4pCisgICAgIyBNdXN0IHJlbW92ZSBjaGlsZHJlbiBmaXJzdCwgd2hpY2ggd2lsbCBoYXZlIGEgbG9uZ2VyIHBhdGggdGhhbiB0aGUgcGFyZW50CisgICAgZm9yIGRpIGluIHJldmVyc2VkKGRpcnMpOgorICAgICAgICBmLndyaXRlKGRpICsgIlxuIikKKyAgICBmLmNsb3NlKCkKKworICAgICMgQXBwZW5kIHRvIHRoZSBsaXN0IG9mIG1hbmlmZXN0cyBmb3IgdGhpcyBQQUNLQUdFX0FSQ0gKKworICAgIGkgPSBkMi5leHBhbmQoIiR7U1NUQVRFX01BTklGRVNUU30vaW5kZXgtJHtTU1RBVEVfTUFOTUFDSH0iKQorICAgIGwgPSBiYi51dGlscy5sb2NrZmlsZShpICsgIi5sb2NrIikKKyAgICBmaWxlZGF0YSA9IGQuZ2V0VmFyKCJTVEFNUCIsIFRydWUpICsgIiAiICsgZDIuZ2V0VmFyKCJTU1RBVEVfTUFORklMRVBSRUZJWCIsIFRydWUpICsgIiAiICsgZC5nZXRWYXIoIldPUktESVIiLCBUcnVlKSArICJcbiIKKyAgICBtYW5pZmVzdHMgPSBbXQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGkpOgorICAgICAgICB3aXRoIG9wZW4oaSwgInIiKSBhcyBmOgorICAgICAgICAgICAgbWFuaWZlc3RzID0gZi5yZWFkbGluZXMoKQorICAgIGlmIGZpbGVkYXRhIG5vdCBpbiBtYW5pZmVzdHM6CisgICAgICAgIHdpdGggb3BlbihpLCAiYSsiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShmaWxlZGF0YSkKKyAgICBiYi51dGlscy51bmxvY2tmaWxlKGwpCisKKyAgICAjIFJ1biB0aGUgYWN0dWFsIGZpbGUgaW5zdGFsbAorICAgIGZvciBzdGF0ZSBpbiBzc1snZGlycyddOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzdGF0ZVsxXSk6CisgICAgICAgICAgICBvZS5wYXRoLmNvcHloYXJkbGlua3RyZWUoc3RhdGVbMV0sIHN0YXRlWzJdKQorCisgICAgZm9yIHBvc3RpbnN0IGluIChkLmdldFZhcignU1NUQVRFUE9TVElOU1RGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMocG9zdGluc3QsIGQpCisKKyAgICBmb3IgbG9jayBpbiBsb2NrczoKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsb2NrKQorCitzc3RhdGVfaW5zdGFsbFt2YXJkZXBzZXhjbHVkZV0gKz0gIlNTVEFURV9EVVBXSElURUxJU1QgU1RBVEVfTUFOTUFDSCBTU1RBVEVfTUFORklMRVBSRUZJWCIKK3NzdGF0ZV9pbnN0YWxsW3ZhcmRlcHNdICs9ICIke1NTVEFURVBPU1RJTlNURlVOQ1N9IgorCitkZWYgc3N0YXRlX2luc3RhbGxwa2coc3MsIGQpOgorICAgIGltcG9ydCBvZS5wYXRoCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIGRlZiBwcmVwZGlyKGRpcik6CisgICAgICAgICMgcmVtb3ZlIGRpciBpZiBpdCBleGlzdHMsIGVuc3VyZSBhbnkgcGFyZW50IGRpcmVjdG9yaWVzIGRvIGV4aXN0CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRpcik6CisgICAgICAgICAgICBvZS5wYXRoLnJlbW92ZShkaXIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkaXIpCisgICAgICAgIG9lLnBhdGgucmVtb3ZlKGRpcikKKworICAgIHNzdGF0ZWluc3QgPSBkLmV4cGFuZCgiJHtXT1JLRElSfS9zc3RhdGUtaW5zdGFsbC0lcy8iICUgc3NbJ3Rhc2snXSkKKyAgICBzc3RhdGVmZXRjaCA9IGQuZ2V0VmFyKCdTU1RBVEVfUEtHTkFNRScsIFRydWUpICsgJ18nICsgc3NbJ3Rhc2snXSArICIudGd6IgorICAgIHNzdGF0ZXBrZyA9IGQuZ2V0VmFyKCdTU1RBVEVfUEtHJywgVHJ1ZSkgKyAnXycgKyBzc1sndGFzayddICsgIi50Z3oiCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3N0YXRlcGtnKToKKyAgICAgICAgcHN0YWdpbmdfZmV0Y2goc3N0YXRlZmV0Y2gsIHNzdGF0ZXBrZywgZCkKKworICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShzc3RhdGVwa2cpOgorICAgICAgICBiYi5ub3RlKCJTdGFnaW5nIHBhY2thZ2UgJXMgZG9lcyBub3QgZXhpc3QiICUgc3N0YXRlcGtnKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHNzdGF0ZV9jbGVhbihzcywgZCkKKworICAgIGQuc2V0VmFyKCdTU1RBVEVfSU5TVERJUicsIHNzdGF0ZWluc3QpCisgICAgZC5zZXRWYXIoJ1NTVEFURV9QS0cnLCBzc3RhdGVwa2cpCisKKyAgICBpZiBiYi51dGlscy50b19ib29sZWFuKGQuZ2V0VmFyKCJTU1RBVEVfVkVSSUZZX1NJRyIsIFRydWUpLCBGYWxzZSk6CisgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChbImdwZyIsICItLXZlcmlmeSIsIHNzdGF0ZXBrZyArICIuc2lnIiwgc3N0YXRlcGtnXSkgIT0gMDoKKyAgICAgICAgICAgIGJiLndhcm4oIkNhbm5vdCB2ZXJpZnkgc2lnbmF0dXJlIG9uIHNzdGF0ZSBwYWNrYWdlICVzIiAlIHNzdGF0ZXBrZykKKworICAgIGZvciBmIGluIChkLmdldFZhcignU1NUQVRFUFJFSU5TVEZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkgKyBbJ3NzdGF0ZV91bnBhY2tfcGFja2FnZSddICsgKGQuZ2V0VmFyKCdTU1RBVEVQT1NUVU5QQUNLRlVOQ1MnLCBUcnVlKSBvciAnJykuc3BsaXQoKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGYsIGQpCisKKyAgICBmb3Igc3RhdGUgaW4gc3NbJ2RpcnMnXToKKyAgICAgICAgcHJlcGRpcihzdGF0ZVsxXSkKKyAgICAgICAgb3MucmVuYW1lKHNzdGF0ZWluc3QgKyBzdGF0ZVswXSwgc3RhdGVbMV0pCisgICAgc3N0YXRlX2luc3RhbGwoc3MsIGQpCisKKyAgICBmb3IgcGxhaW4gaW4gc3NbJ3BsYWluZGlycyddOgorICAgICAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgICAgICBzcmMgPSBzc3RhdGVpbnN0ICsgIi8iICsgcGxhaW4ucmVwbGFjZSh3b3JrZGlyLCAnJykKKyAgICAgICAgZGVzdCA9IHBsYWluCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzcmMpCisgICAgICAgIHByZXBkaXIoZGVzdCkKKyAgICAgICAgb3MucmVuYW1lKHNyYywgZGVzdCkKKworICAgIHJldHVybiBUcnVlCisKK3B5dGhvbiBzc3RhdGVfaGFyZGNvZGVfcGF0aF91bnBhY2sgKCkgeworICAgICMgRml4dXAgaGFyZGNvZGVkIHBhdGhzCisgICAgIworICAgICMgTm90ZTogVGhlIGxvZ2ljIGJlbG93IG11c3QgbWF0Y2ggdGhlIHJldmVyc2UgbG9naWMgaW4KKyAgICAjIHNzdGF0ZV9oYXJkY29kZV9wYXRoKGQpCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIHNzdGF0ZWluc3QgPSBkLmdldFZhcignU1NUQVRFX0lOU1RESVInLCBUcnVlKQorICAgIGZpeG1lZm4gPSAgc3N0YXRlaW5zdCArICJmaXhtZXBhdGgiCisgICAgaWYgb3MucGF0aC5pc2ZpbGUoZml4bWVmbik6CisgICAgICAgIHN0YWdpbmcgPSBkLmdldFZhcignU1RBR0lOR19ESVInLCBUcnVlKQorICAgICAgICBzdGFnaW5nX3RhcmdldCA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9UQVJHRVQnLCBUcnVlKQorICAgICAgICBzdGFnaW5nX2hvc3QgPSBkLmdldFZhcignU1RBR0lOR19ESVJfSE9TVCcsIFRydWUpCisKKyAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGQpOgorICAgICAgICAgICAgc3N0YXRlX3NlZF9jbWQgPSAic2VkIC1pIC1lICdzOkZJWE1FU1RBR0lOR0RJUjolczpnJyIgJSAoc3RhZ2luZykKKyAgICAgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICAgICAgc3N0YXRlX3NlZF9jbWQgPSAic2VkIC1pIC1lICdzOkZJWE1FU1RBR0lOR0RJUlRBUkdFVDolczpnOyBzOkZJWE1FU1RBR0lOR0RJUjolczpnJyIgJSAoc3RhZ2luZ190YXJnZXQsIHN0YWdpbmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzc3RhdGVfc2VkX2NtZCA9ICJzZWQgLWkgLWUgJ3M6RklYTUVTVEFHSU5HRElSSE9TVDolczpnJyIgJSAoc3RhZ2luZ19ob3N0KQorCisgICAgICAgIGV4dHJhX3N0YWdpbmdfZml4bWVzID0gZC5nZXRWYXIoJ0VYVFJBX1NUQUdJTkdfRklYTUVTJywgVHJ1ZSkgb3IgJycKKyAgICAgICAgZm9yIGZpeG1ldmFyIGluIGV4dHJhX3N0YWdpbmdfZml4bWVzLnNwbGl0KCk6CisgICAgICAgICAgICBmaXhtZV9wYXRoID0gZC5nZXRWYXIoZml4bWV2YXIsIFRydWUpCisgICAgICAgICAgICBzc3RhdGVfc2VkX2NtZCArPSAiIC1lICdzOkZJWE1FXyVzOiVzOmcnIiAlIChmaXhtZXZhciwgZml4bWVfcGF0aCkKKworICAgICAgICAjIEFkZCBzc3RhdGVpbnN0IHRvIGVhY2ggZmlsZW5hbWUgaW4gZml4bWVwYXRoLCB1c2UgeGFyZ3MgdG8gZWZmaWNpZW50bHkgY2FsbCBzZWQKKyAgICAgICAgc3N0YXRlX2hhcmRjb2RlX2NtZCA9ICJzZWQgLWUgJ3M6XjolczpnJyAlcyB8IHhhcmdzICVzIiAlIChzc3RhdGVpbnN0LCBmaXhtZWZuLCBzc3RhdGVfc2VkX2NtZCkKKworICAgICAgICBiYi5ub3RlKCJSZXBsYWNpbmcgZml4bWUgcGF0aHMgaW4gc3N0YXRlIHBhY2thZ2U6ICVzIiAlIChzc3RhdGVfaGFyZGNvZGVfY21kKSkKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHNzdGF0ZV9oYXJkY29kZV9jbWQsIHNoZWxsPVRydWUpCisKKyAgICAgICAgIyBOZWVkIHRvIHJlbW92ZSB0aGlzIG9yIHdlJ2QgY29weSBpdCBpbnRvIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFuZCBtYXkgCisgICAgICAgICMgY29uZmxpY3Qgd2l0aCBhbm90aGVyIHdyaXRlcgorICAgICAgICBvcy5yZW1vdmUoZml4bWVmbikKK30KKworZGVmIHNzdGF0ZV9jbGVhbl9jYWNoZWZpbGUoc3MsIGQpOgorICAgIGltcG9ydCBvZS5wYXRoCisKKyAgICBzc3RhdGVwa2dmaWxlID0gZC5nZXRWYXIoJ1NTVEFURV9QQVRIU1BFQycsIFRydWUpICsgIipfIiArIHNzWyd0YXNrJ10gKyAiLnRneioiCisgICAgYmIubm90ZSgiUmVtb3ZpbmcgJXMiICUgc3N0YXRlcGtnZmlsZSkKKyAgICBvZS5wYXRoLnJlbW92ZShzc3RhdGVwa2dmaWxlKQorCitkZWYgc3N0YXRlX2NsZWFuX2NhY2hlZmlsZXMoZCk6CisgICAgZm9yIHRhc2sgaW4gKGQuZ2V0VmFyKCdTU1RBVEVUQVNLUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBsZCA9IGQuY3JlYXRlQ29weSgpCisgICAgICAgIHNzID0gc3N0YXRlX3N0YXRlX2Zyb212YXJzKGxkLCB0YXNrKQorICAgICAgICBzc3RhdGVfY2xlYW5fY2FjaGVmaWxlKHNzLCBsZCkKKworZGVmIHNzdGF0ZV9jbGVhbl9tYW5pZmVzdChtYW5pZmVzdCwgZCk6CisgICAgaW1wb3J0IG9lLnBhdGgKKworICAgIG1maWxlID0gb3BlbihtYW5pZmVzdCkKKyAgICBlbnRyaWVzID0gbWZpbGUucmVhZGxpbmVzKCkKKyAgICBtZmlsZS5jbG9zZSgpCisKKyAgICBmb3IgZW50cnkgaW4gZW50cmllczoKKyAgICAgICAgZW50cnkgPSBlbnRyeS5zdHJpcCgpCisgICAgICAgIGJiLmRlYnVnKDIsICJSZW1vdmluZyBtYW5pZmVzdDogJXMiICUgZW50cnkpCisgICAgICAgICMgV2UgY2FuIHJhY2UgYWdhaW5zdCBhbm90aGVyIHBhY2thZ2UgcG9wdWxhdGluZyBkaXJlY3RvcmllcyBhcyB3ZSdyZSByZW1vdmluZyB0aGVtCisgICAgICAgICMgc28gd2UgaWdub3JlIGVycm9ycyBoZXJlLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBlbnRyeS5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGVudHJ5WzotMV0pOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZW50cnlbOi0xXSkKKyAgICAgICAgICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKGVudHJ5KSBhbmQgbGVuKG9zLmxpc3RkaXIoZW50cnkpKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihlbnRyeVs6LTFdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvZS5wYXRoLnJlbW92ZShlbnRyeSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBvZS5wYXRoLnJlbW92ZShtYW5pZmVzdCkKKworZGVmIHNzdGF0ZV9jbGVhbihzcywgZCk6CisgICAgaW1wb3J0IG9lLnBhdGgKKyAgICBpbXBvcnQgZ2xvYgorCisgICAgZDIgPSBkLmNyZWF0ZUNvcHkoKQorICAgIHN0YW1wX2NsZWFuID0gZC5nZXRWYXIoIlNUQU1QQ0xFQU4iLCBUcnVlKQorICAgIGV4dHJhaW5mID0gZC5nZXRWYXJGbGFnKCJkb18iICsgc3NbJ3Rhc2snXSwgJ3N0YW1wLWV4dHJhLWluZm8nLCBUcnVlKQorICAgIGlmIGV4dHJhaW5mOgorICAgICAgICBkMi5zZXRWYXIoIlNTVEFURV9NQU5NQUNIIiwgZXh0cmFpbmYpCisgICAgICAgIHdpbGRjYXJkX3N0ZmlsZSA9ICIlcy5kb18lcyouJXMiICUgKHN0YW1wX2NsZWFuLCBzc1sndGFzayddLCBleHRyYWluZikKKyAgICBlbHNlOgorICAgICAgICB3aWxkY2FyZF9zdGZpbGUgPSAiJXMuZG9fJXMqIiAlIChzdGFtcF9jbGVhbiwgc3NbJ3Rhc2snXSkKKworICAgIG1hbmlmZXN0ID0gZDIuZXhwYW5kKCIke1NTVEFURV9NQU5GSUxFUFJFRklYfS4lcyIgJSBzc1sndGFzayddKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMobWFuaWZlc3QpOgorICAgICAgICBsb2NrcyA9IFtdCisgICAgICAgIGZvciBsb2NrIGluIHNzWydsb2NrZmlsZXMtc2hhcmVkJ106CisgICAgICAgICAgICBsb2Nrcy5hcHBlbmQoYmIudXRpbHMubG9ja2ZpbGUobG9jaykpCisgICAgICAgIGZvciBsb2NrIGluIHNzWydsb2NrZmlsZXMnXToKKyAgICAgICAgICAgIGxvY2tzLmFwcGVuZChiYi51dGlscy5sb2NrZmlsZShsb2NrKSkKKworICAgICAgICBzc3RhdGVfY2xlYW5fbWFuaWZlc3QobWFuaWZlc3QsIGQpCisKKyAgICAgICAgZm9yIGxvY2sgaW4gbG9ja3M6CisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxvY2spCisKKyAgICAjIFJlbW92ZSB0aGUgY3VycmVudCBhbmQgcHJldmlvdXMgc3RhbXBzLCBidXQga2VlcCB0aGUgc2lnZGF0YS4KKyAgICAjCisgICAgIyBUaGUgZ2xvYigpIG1hdGNoZXMgZG9fdGFzayogd2hpY2ggbWF5IG1hdGNoIG11bHRpcGxlIHRhc2tzLCBmb3IKKyAgICAjIGV4YW1wbGU6IGRvX3BhY2thZ2UgYW5kIGRvX3BhY2thZ2Vfd3JpdGVfaXBrLCBzbyB3ZSBuZWVkIHRvCisgICAgIyBleGFjdGx5IG1hdGNoICouZG9fdGFzay4qIGFuZCAqLmRvX3Rhc2tfc2V0c2NlbmUuKgorICAgIHJtX3N0YW1wID0gJy5kb18lcy4nICUgc3NbJ3Rhc2snXQorICAgIHJtX3NldHNjZW5lID0gJy5kb18lc19zZXRzY2VuZS4nICUgc3NbJ3Rhc2snXQorICAgICMgRm9yIEJCX1NJR05BVFVSRV9IQU5ETEVSID0gIm5vb3AiCisgICAgcm1fbm9oYXNoID0gIi5kb18lcyIgJSBzc1sndGFzayddCisgICAgZm9yIHN0ZmlsZSBpbiBnbG9iLmdsb2Iod2lsZGNhcmRfc3RmaWxlKToKKyAgICAgICAgIyBLZWVwIHRoZSBzaWdkYXRhCisgICAgICAgIGlmICIuc2lnZGF0YS4iIGluIHN0ZmlsZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgUHJlc2VydmUgdGFpbnQgZmlsZXMgaW4gdGhlIHN0YW1wcyBkaXJlY3RvcnkKKyAgICAgICAgaWYgc3RmaWxlLmVuZHN3aXRoKCcudGFpbnQnKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIHJtX3N0YW1wIGluIHN0ZmlsZSBvciBybV9zZXRzY2VuZSBpbiBzdGZpbGUgb3IgXAorICAgICAgICAgICAgICAgIHN0ZmlsZS5lbmRzd2l0aChybV9ub2hhc2gpOgorICAgICAgICAgICAgb2UucGF0aC5yZW1vdmUoc3RmaWxlKQorCitzc3RhdGVfY2xlYW5bdmFyZGVwc2V4Y2x1ZGVdID0gIlNTVEFURV9NQU5GSUxFUFJFRklYIgorCitDTEVBTkZVTkNTICs9ICJzc3RhdGVfY2xlYW5hbGwiCisKK3B5dGhvbiBzc3RhdGVfY2xlYW5hbGwoKSB7CisgICAgYmIubm90ZSgiUmVtb3Zpbmcgc2hhcmVkIHN0YXRlIGZvciBwYWNrYWdlICVzIiAlIGQuZ2V0VmFyKCdQTicsIFRydWUpKQorCisgICAgbWFuaWZlc3RfZGlyID0gZC5nZXRWYXIoJ1NTVEFURV9NQU5JRkVTVFMnLCBUcnVlKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhtYW5pZmVzdF9kaXIpOgorICAgICAgICByZXR1cm4KKworICAgIHRhc2tzID0gZC5nZXRWYXIoJ1NTVEFURVRBU0tTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGZvciBuYW1lIGluIHRhc2tzOgorICAgICAgICBsZCA9IGQuY3JlYXRlQ29weSgpCisgICAgICAgIHNoYXJlZF9zdGF0ZSA9IHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhsZCwgbmFtZSkKKyAgICAgICAgc3N0YXRlX2NsZWFuKHNoYXJlZF9zdGF0ZSwgbGQpCit9CisKK3B5dGhvbiBzc3RhdGVfaGFyZGNvZGVfcGF0aCAoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MsIHBsYXRmb3JtCisKKyAgICAjIE5lZWQgdG8gcmVtb3ZlIGhhcmRjb2RlZCBwYXRocyBhbmQgZml4IHRoZXNlIHdoZW4gd2UgaW5zdGFsbCB0aGUKKyAgICAjIHN0YWdpbmcgcGFja2FnZXMuCisgICAgIworICAgICMgTm90ZTogdGhlIGxvZ2ljIGluIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gbWF0Y2ggdGhlIHJldmVyc2UgbG9naWMKKyAgICAjIGluIHNzdGF0ZV9pbnN0YWxscGtnKHNzLCBkKQorCisgICAgc3RhZ2luZyA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUicsIFRydWUpCisgICAgc3RhZ2luZ190YXJnZXQgPSBkLmdldFZhcignU1RBR0lOR19ESVJfVEFSR0VUJywgVHJ1ZSkKKyAgICBzdGFnaW5nX2hvc3QgPSBkLmdldFZhcignU1RBR0lOR19ESVJfSE9TVCcsIFRydWUpCisgICAgc3N0YXRlX2J1aWxkZGlyID0gZC5nZXRWYXIoJ1NTVEFURV9CVUlMRERJUicsIFRydWUpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zc3NkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZCk6CisgICAgICAgIHNzdGF0ZV9ncmVwX2NtZCA9ICJncmVwIC1sIC1lICclcyciICUgKHN0YWdpbmcpCisgICAgICAgIHNzdGF0ZV9zZWRfY21kID0gInNlZCAtaSAtZSAnczolczpGSVhNRVNUQUdJTkdESVI6ZyciICUgKHN0YWdpbmcpCisgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBzc3RhdGVfZ3JlcF9jbWQgPSAiZ3JlcCAtbCAtZSAnJXMnIC1lICclcyciICUgKHN0YWdpbmdfdGFyZ2V0LCBzdGFnaW5nKQorICAgICAgICBzc3RhdGVfc2VkX2NtZCA9ICJzZWQgLWkgLWUgJ3M6JXM6RklYTUVTVEFHSU5HRElSVEFSR0VUOmc7IHM6JXM6RklYTUVTVEFHSU5HRElSOmcnIiAlIChzdGFnaW5nX3RhcmdldCwgc3RhZ2luZykKKyAgICBlbHNlOgorICAgICAgICBzc3RhdGVfZ3JlcF9jbWQgPSAiZ3JlcCAtbCAtZSAnJXMnIiAlIChzdGFnaW5nX2hvc3QpCisgICAgICAgIHNzdGF0ZV9zZWRfY21kID0gInNlZCAtaSAtZSAnczolczpGSVhNRVNUQUdJTkdESVJIT1NUOmcnIiAlIChzdGFnaW5nX2hvc3QpCisKKyAgICBleHRyYV9zdGFnaW5nX2ZpeG1lcyA9IGQuZ2V0VmFyKCdFWFRSQV9TVEFHSU5HX0ZJWE1FUycsIFRydWUpIG9yICcnCisgICAgZm9yIGZpeG1ldmFyIGluIGV4dHJhX3N0YWdpbmdfZml4bWVzLnNwbGl0KCk6CisgICAgICAgIGZpeG1lX3BhdGggPSBkLmdldFZhcihmaXhtZXZhciwgVHJ1ZSkKKyAgICAgICAgc3N0YXRlX3NlZF9jbWQgKz0gIiAtZSAnczolczpGSVhNRV8lczpnJyIgJSAoZml4bWVfcGF0aCwgZml4bWV2YXIpCisKKyAgICBmaXhtZWZuID0gIHNzdGF0ZV9idWlsZGRpciArICJmaXhtZXBhdGgiCisKKyAgICBzc3RhdGVfc2Nhbl9jbWQgPSBkLmdldFZhcignU1NUQVRFX1NDQU5fQ01EJywgVHJ1ZSkKKyAgICBzc3RhdGVfZmlsZWxpc3RfY21kID0gInRlZSAlcyIgJSAoZml4bWVmbikKKworICAgICMgZml4bWVwYXRoIGZpbGUgbmVlZHMgcmVsYXRpdmUgcGF0aHMsIGRyb3Agc3N0YXRlX2J1aWxkZGlyIHByZWZpeAorICAgIHNzdGF0ZV9maWxlbGlzdF9yZWxhdGl2ZV9jbWQgPSAic2VkIC1pIC1lICdzOl4lczo6ZycgJXMiICUgKHNzdGF0ZV9idWlsZGRpciwgZml4bWVmbikKKworICAgIHhhcmdzX25vX2VtcHR5X3J1bl9jbWQgPSAnLS1uby1ydW4taWYtZW1wdHknCisgICAgaWYgcGxhdGZvcm0uc3lzdGVtKCkgPT0gJ0Rhcndpbic6CisgICAgICAgIHhhcmdzX25vX2VtcHR5X3J1bl9jbWQgPSAnJworCisgICAgIyBMaW1pdCB0aGUgZml4cGF0aHMgYW5kIHNlZCBvcGVyYXRpb25zIGJhc2VkIG9uIHRoZSBpbml0aWFsIGdyZXAgc2VhcmNoCisgICAgIyBUaGlzIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgbWFraW5nIHN1cmUgdGhlIHZmcyBjYWNoZSBpcyBob3QKKyAgICBzc3RhdGVfaGFyZGNvZGVfY21kID0gIiVzIHwgeGFyZ3MgJXMgfCAlcyB8IHhhcmdzICVzICVzIiAlIChzc3RhdGVfc2Nhbl9jbWQsIHNzdGF0ZV9ncmVwX2NtZCwgc3N0YXRlX2ZpbGVsaXN0X2NtZCwgeGFyZ3Nfbm9fZW1wdHlfcnVuX2NtZCwgc3N0YXRlX3NlZF9jbWQpCisKKyAgICBiYi5ub3RlKCJSZW1vdmluZyBoYXJkY29kZWQgcGF0aHMgZnJvbSBzc3RhdGUgcGFja2FnZTogJyVzJyIgJSAoc3N0YXRlX2hhcmRjb2RlX2NtZCkpCisgICAgc3VicHJvY2Vzcy5jYWxsKHNzdGF0ZV9oYXJkY29kZV9jbWQsIHNoZWxsPVRydWUpCisKKyAgICAgICAgIyBJZiB0aGUgZml4bWVmbiBpcyBlbXB0eSwgcmVtb3ZlIGl0Li4KKyAgICBpZiBvcy5zdGF0KGZpeG1lZm4pLnN0X3NpemUgPT0gMDoKKyAgICAgICAgb3MucmVtb3ZlKGZpeG1lZm4pCisgICAgZWxzZToKKyAgICAgICAgYmIubm90ZSgiUmVwbGFjaW5nIGFic29sdXRlIHBhdGhzIGluIGZpeG1lcGF0aCBmaWxlOiAnJXMnIiAlIChzc3RhdGVfZmlsZWxpc3RfcmVsYXRpdmVfY21kKSkKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHNzdGF0ZV9maWxlbGlzdF9yZWxhdGl2ZV9jbWQsIHNoZWxsPVRydWUpCit9CisKK2RlZiBzc3RhdGVfcGFja2FnZShzcywgZCk6CisgICAgaW1wb3J0IG9lLnBhdGgKKworICAgIGRlZiBtYWtlX3JlbGF0aXZlX3N5bWxpbmsocGF0aCwgb3V0cHV0cGF0aCwgZCk6CisgICAgICAgICMgUmVwbGFjZSBvdXQgYWJzb2x1dGUgVE1QRElSIHBhdGhzIGluIHN5bWxpbmtzIHdpdGggcmVsYXRpdmUgb25lcworICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbGluayA9IG9zLnJlYWRsaW5rKHBhdGgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGxpbmspOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG5vdCBsaW5rLnN0YXJ0c3dpdGgodG1wZGlyKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGRlcHRoID0gb3V0cHV0cGF0aC5ycGFydGl0aW9uKHRtcGRpcilbMl0uY291bnQoJy8nKQorICAgICAgICBiYXNlID0gbGluay5wYXJ0aXRpb24odG1wZGlyKVsyXS5zdHJpcCgpCisgICAgICAgIHdoaWxlIGRlcHRoID4gMToKKyAgICAgICAgICAgIGJhc2UgPSAiLy4uIiArIGJhc2UKKyAgICAgICAgICAgIGRlcHRoIC09IDEKKyAgICAgICAgYmFzZSA9ICIuIiArIGJhc2UKKworICAgICAgICBiYi5kZWJ1ZygyLCAiUmVwbGFjaW5nIGFic29sdXRlIHBhdGggJXMgd2l0aCByZWxhdGl2ZSBwYXRoICVzIGZvciAlcyIgJSAobGluaywgYmFzZSwgb3V0cHV0cGF0aCkpCisgICAgICAgIG9zLnJlbW92ZShwYXRoKQorICAgICAgICBvcy5zeW1saW5rKGJhc2UsIHBhdGgpCisKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKworICAgIHNzdGF0ZWJ1aWxkID0gZC5leHBhbmQoIiR7V09SS0RJUn0vc3N0YXRlLWJ1aWxkLSVzLyIgJSBzc1sndGFzayddKQorICAgIHNzdGF0ZXBrZyA9IGQuZ2V0VmFyKCdTU1RBVEVfUEtHJywgVHJ1ZSkgKyAnXycrIHNzWyd0YXNrJ10gKyAiLnRneiIKKyAgICBiYi51dGlscy5yZW1vdmUoc3N0YXRlYnVpbGQsIHJlY3Vyc2U9VHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoc3N0YXRlYnVpbGQpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShzc3RhdGVwa2cpKQorICAgIGZvciBzdGF0ZSBpbiBzc1snZGlycyddOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3RhdGVbMV0pOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgc3JjYmFzZSA9IHN0YXRlWzBdLnJzdHJpcCgiLyIpLnJzcGxpdCgnLycsIDEpWzBdCisgICAgICAgIGZvciB3YWxrcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzdGF0ZVsxXSk6CisgICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBzcmNwYXRoID0gb3MucGF0aC5qb2luKHdhbGtyb290LCBmaWxlKQorICAgICAgICAgICAgICAgIGRzdHBhdGggPSBzcmNwYXRoLnJlcGxhY2Uoc3RhdGVbMV0sIHN0YXRlWzJdKQorICAgICAgICAgICAgICAgIG1ha2VfcmVsYXRpdmVfc3ltbGluayhzcmNwYXRoLCBkc3RwYXRoLCBkKQorICAgICAgICAgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAgICAgICAgIHNyY3BhdGggPSBvcy5wYXRoLmpvaW4od2Fsa3Jvb3QsIGRpcikKKyAgICAgICAgICAgICAgICBkc3RwYXRoID0gc3JjcGF0aC5yZXBsYWNlKHN0YXRlWzFdLCBzdGF0ZVsyXSkKKyAgICAgICAgICAgICAgICBtYWtlX3JlbGF0aXZlX3N5bWxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgZCkKKyAgICAgICAgYmIuZGVidWcoMiwgIlByZXBhcmluZyB0cmVlICVzIGZvciBwYWNrYWdpbmcgYXQgJXMiICUgKHN0YXRlWzFdLCBzc3RhdGVidWlsZCArIHN0YXRlWzBdKSkKKyAgICAgICAgb2UucGF0aC5jb3B5aGFyZGxpbmt0cmVlKHN0YXRlWzFdLCBzc3RhdGVidWlsZCArIHN0YXRlWzBdKQorCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBmb3IgcGxhaW4gaW4gc3NbJ3BsYWluZGlycyddOgorICAgICAgICBwZGlyID0gcGxhaW4ucmVwbGFjZSh3b3JrZGlyLCBzc3RhdGVidWlsZCkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBsYWluKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGRpcikKKyAgICAgICAgb2UucGF0aC5jb3B5aGFyZGxpbmt0cmVlKHBsYWluLCBwZGlyKQorCisgICAgZC5zZXRWYXIoJ1NTVEFURV9CVUlMRERJUicsIHNzdGF0ZWJ1aWxkKQorICAgIGQuc2V0VmFyKCdTU1RBVEVfUEtHJywgc3N0YXRlcGtnKQorCisgICAgZm9yIGYgaW4gKGQuZ2V0VmFyKCdTU1RBVEVDUkVBVEVGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpICsgWydzc3RhdGVfY3JlYXRlX3BhY2thZ2UnXSArIFwKKyAgICAgICAgICAgICAoZC5nZXRWYXIoJ1NTVEFURVBPU1RDUkVBVEVGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZiwgZCkKKyAgCisgICAgYmIuc2lnZ2VuLmR1bXBfdGhpc190YXNrKHNzdGF0ZXBrZyArICIuc2lnaW5mbyIsIGQpCisKKyAgICByZXR1cm4KKworZGVmIHBzdGFnaW5nX2ZldGNoKHNzdGF0ZWZldGNoLCBzc3RhdGVwa2csIGQpOgorICAgIGltcG9ydCBiYi5mZXRjaDIKKworICAgICMgT25seSB0cnkgYW5kIGZldGNoIGlmIHRoZSB1c2VyIGhhcyBjb25maWd1cmVkIGEgbWlycm9yCisgICAgbWlycm9ycyA9IGQuZ2V0VmFyKCdTU1RBVEVfTUlSUk9SUycsIFRydWUpCisgICAgaWYgbm90IG1pcnJvcnM6CisgICAgICAgIHJldHVybgorCisgICAgIyBDb3B5IHRoZSBkYXRhIG9iamVjdCBhbmQgb3ZlcnJpZGUgRExfRElSIGFuZCBTUkNfVVJJCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICBkbGRpciA9IGxvY2FsZGF0YS5leHBhbmQoIiR7U1NUQVRFX0RJUn0iKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkbGRpcikKKworICAgIGxvY2FsZGF0YS5kZWxWYXIoJ01JUlJPUlMnKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0ZJTEVTUEFUSCcsIGRsZGlyKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0RMX0RJUicsIGRsZGlyKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BSRU1JUlJPUlMnLCBtaXJyb3JzKQorCisgICAgIyBpZiBCQl9OT19ORVRXT1JLIGlzIHNldCBidXQgd2UgYWxzbyBoYXZlIFNTVEFURV9NSVJST1JfQUxMT1dfTkVUV09SSywKKyAgICAjIHdlJ2xsIHdhbnQgdG8gYWxsb3cgbmV0d29yayBhY2Nlc3MgZm9yIHRoZSBjdXJyZW50IHNldCBvZiBmZXRjaGVzLgorICAgIGlmIGxvY2FsZGF0YS5nZXRWYXIoJ0JCX05PX05FVFdPUksnLCBUcnVlKSA9PSAiMSIgYW5kIGxvY2FsZGF0YS5nZXRWYXIoJ1NTVEFURV9NSVJST1JfQUxMT1dfTkVUV09SSycsIFRydWUpID09ICIxIjoKKyAgICAgICAgbG9jYWxkYXRhLmRlbFZhcignQkJfTk9fTkVUV09SSycpCisKKyAgICAjIFRyeSBhIGZldGNoIGZyb20gdGhlIHNzdGF0ZSBtaXJyb3IsIGlmIGl0IGZhaWxzIGp1c3QgcmV0dXJuIGFuZAorICAgICMgd2Ugd2lsbCBidWlsZCB0aGUgcGFja2FnZQorICAgIHVyaXMgPSBbJ2ZpbGU6Ly97MH0nLmZvcm1hdChzc3RhdGVmZXRjaCksCisgICAgICAgICAgICAnZmlsZTovL3swfS5zaWdpbmZvJy5mb3JtYXQoc3N0YXRlZmV0Y2gpXQorICAgIGlmIGJiLnV0aWxzLnRvX2Jvb2xlYW4oZC5nZXRWYXIoIlNTVEFURV9WRVJJRllfU0lHIiwgVHJ1ZSksIEZhbHNlKToKKyAgICAgICAgdXJpcyArPSBbJ2ZpbGU6Ly97MH0uc2lnJy5mb3JtYXQoc3N0YXRlZmV0Y2gpXQorCisgICAgZm9yIHNyY3VyaSBpbiB1cmlzOgorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdTUkNfVVJJJywgc3JjdXJpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKFtzcmN1cmldLCBsb2NhbGRhdGEsIGNhY2hlPUZhbHNlKQorICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisKKyAgICAgICAgICAgICMgTmVlZCB0byBvcHRpbWlzZSB0aGlzLCBpZiB1c2luZyBmaWxlOi8vIHVybHMsIHRoZSBmZXRjaGVyIGp1c3QgY2hhbmdlcyB0aGUgbG9jYWwgcGF0aAorICAgICAgICAgICAgIyBGb3Igbm93IHdvcmsgYXJvdW5kIGJ5IHN5bWxpbmtpbmcKKyAgICAgICAgICAgIGxvY2FscGF0aCA9IGJiLmRhdGEuZXhwYW5kKGZldGNoZXIubG9jYWxwYXRoKHNyY3VyaSksIGxvY2FsZGF0YSkKKyAgICAgICAgICAgIGlmIGxvY2FscGF0aCAhPSBzc3RhdGVwa2cgYW5kIG9zLnBhdGguZXhpc3RzKGxvY2FscGF0aCkgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhzc3RhdGVwa2cpOgorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsobG9jYWxwYXRoLCBzc3RhdGVwa2cpCisKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uOgorICAgICAgICAgICAgYnJlYWsKKworZGVmIHNzdGF0ZV9zZXRzY2VuZShkKToKKyAgICBzaGFyZWRfc3RhdGUgPSBzc3RhdGVfc3RhdGVfZnJvbXZhcnMoZCkKKyAgICBhY2NlbGVyYXRlID0gc3N0YXRlX2luc3RhbGxwa2coc2hhcmVkX3N0YXRlLCBkKQorICAgIGlmIG5vdCBhY2NlbGVyYXRlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJObyBzdWl0YWJsZSBzdGFnaW5nIHBhY2thZ2UgZm91bmQiKQorCitweXRob24gc3N0YXRlX3Rhc2tfcHJlZnVuYyAoKSB7CisgICAgc2hhcmVkX3N0YXRlID0gc3N0YXRlX3N0YXRlX2Zyb212YXJzKGQpCisgICAgc3N0YXRlX2NsZWFuKHNoYXJlZF9zdGF0ZSwgZCkKK30KKworcHl0aG9uIHNzdGF0ZV90YXNrX3Bvc3RmdW5jICgpIHsKKyAgICBzaGFyZWRfc3RhdGUgPSBzc3RhdGVfc3RhdGVfZnJvbXZhcnMoZCkKKyAgICBzc3RhdGVfaW5zdGFsbChzaGFyZWRfc3RhdGUsIGQpCisgICAgZm9yIGludGVyY2VwdCBpbiBzaGFyZWRfc3RhdGVbJ2ludGVyY2VwdGZ1bmNzJ106CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhpbnRlcmNlcHQsIGQpCisgICAgb21hc2sgPSBvcy51bWFzaygwMDIpCisgICAgaWYgb21hc2sgIT0gMDAyOgorICAgICAgIGJiLm5vdGUoIlVzaW5nIHVtYXNrIDAwMiAobm90ICUwbykgZm9yIHNzdGF0ZSBwYWNrYWdpbmciICUgb21hc2spCisgICAgc3N0YXRlX3BhY2thZ2Uoc2hhcmVkX3N0YXRlLCBkKQorICAgIG9zLnVtYXNrKG9tYXNrKQorfQorICAKKworIworIyBTaGVsbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHNzdGF0ZSBwYWNrYWdlIGZyb20gYSBkaXJlY3RvcnkKKyMgc2V0IGFzIFNTVEFURV9CVUlMRERJUi4gV2lsbCBiZSBydW4gZnJvbSB3aXRoaW4gU1NUQVRFX0JVSUxERElSLgorIworc3N0YXRlX2NyZWF0ZV9wYWNrYWdlICgpIHsKKwlURklMRT1gbWt0ZW1wICR7U1NUQVRFX1BLR30uWFhYWFhYWFhgCisJIyBOZWVkIHRvIGhhbmRsZSBlbXB0eSBkaXJlY3RvcmllcworCWlmIFsgIiQobHMgLUEpIiBdOyB0aGVuCisJCXNldCArZQorCQl0YXIgLWN6ZiAkVEZJTEUgKgorCQlyZXQ9JD8KKwkJaWYgWyAkcmV0IC1uZSAwIF0gJiYgWyAkcmV0IC1uZSAxIF07IHRoZW4KKwkJCWV4aXQgMQorCQlmaQorCQlzZXQgLWUKKwllbHNlCisJCXRhciAtY3ogLS1maWxlPSRURklMRSAtLWZpbGVzLWZyb209L2Rldi9udWxsCisJZmkKKwljaG1vZCAwNjY0ICRURklMRSAKKwltdiAtZiAkVEZJTEUgJHtTU1RBVEVfUEtHfQorCisJaWYgWyAtbiAiJHtTU1RBVEVfU0lHX0tFWX0iIF07IHRoZW4KKwkJcm0gLWYgJHtTU1RBVEVfUEtHfS5zaWcKKwkJZWNobyAke1NTVEFURV9TSUdfUEFTU1BIUkFTRX0gfCBncGcgLS1iYXRjaCAtLXBhc3NwaHJhc2UtZmQgMCAtLWRldGFjaC1zaWduIC0tbG9jYWwtdXNlciAke1NTVEFURV9TSUdfS0VZfSAtLW91dHB1dCAke1NTVEFURV9QS0d9LnNpZyAke1NTVEFURV9QS0d9CisJZmkKKworCWNkICR7V09SS0RJUn0KKwlybSAtcmYgJHtTU1RBVEVfQlVJTERESVJ9Cit9CisKKyMKKyMgU2hlbGwgZnVuY3Rpb24gdG8gZGVjb21wcmVzcyBhbmQgcHJlcGFyZSBhIHBhY2thZ2UgZm9yIGluc3RhbGxhdGlvbgorIyBXaWxsIGJlIHJ1biBmcm9tIHdpdGhpbiBTU1RBVEVfSU5TVERJUi4KKyMKK3NzdGF0ZV91bnBhY2tfcGFja2FnZSAoKSB7CisJdGFyIC14bXZ6ZiAke1NTVEFURV9QS0d9CisJIyBVc2UgIiEgLXcgfHwiIHRvIHJldHVybiB0cnVlIGZvciByZWFkIG9ubHkgZmlsZXMKKwlbICEgLXcgJHtTU1RBVEVfUEtHfSBdIHx8IHRvdWNoIC0tbm8tZGVyZWZlcmVuY2UgJHtTU1RBVEVfUEtHfQorfQorCitCQl9IQVNIQ0hFQ0tfRlVOQ1RJT04gPSAic3N0YXRlX2NoZWNraGFzaGVzIgorCitkZWYgc3N0YXRlX2NoZWNraGFzaGVzKHNxX2ZuLCBzcV90YXNrLCBzcV9oYXNoLCBzcV9oYXNoZm4sIGQsIHNpZ2luZm89RmFsc2UpOgorCisgICAgcmV0ID0gW10KKyAgICBtaXNzZWQgPSBbXQorICAgIGV4dGVuc2lvbiA9ICIudGd6IgorICAgIGlmIHNpZ2luZm86CisgICAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbiArICIuc2lnaW5mbyIKKworICAgIGRlZiBnZXRwYXRoY29tcG9uZW50cyh0YXNrLCBkKToKKyAgICAgICAgIyBNYWdpYyBkYXRhIGZyb20gQkJfSEFTSEZJTEVOQU1FCisgICAgICAgIHNwbGl0aGFzaGZuID0gc3FfaGFzaGZuW3Rhc2tdLnNwbGl0KCIgIikKKyAgICAgICAgc3BlYyA9IHNwbGl0aGFzaGZuWzFdCisgICAgICAgIGV4dHJhcGF0aCA9IHNwbGl0aGFzaGZuWzBdCisKKyAgICAgICAgdG5hbWUgPSBzcV90YXNrW3Rhc2tdWzM6XQorCisgICAgICAgIGlmIHRuYW1lIGluIFsiZmV0Y2giLCAidW5wYWNrIiwgInBhdGNoIiwgInBvcHVsYXRlX2xpYyIsICJwcmVjb25maWd1cmUiXSBhbmQgc3BsaXRoYXNoZm5bMl06CisgICAgICAgICAgICBzcGVjID0gc3BsaXRoYXNoZm5bMl0KKyAgICAgICAgICAgIGV4dHJhcGF0aCA9ICIiCisKKyAgICAgICAgcmV0dXJuIHNwZWMsIGV4dHJhcGF0aCwgdG5hbWUKKworCisgICAgZm9yIHRhc2sgaW4gcmFuZ2UobGVuKHNxX2ZuKSk6CisKKyAgICAgICAgc3BlYywgZXh0cmFwYXRoLCB0bmFtZSA9IGdldHBhdGhjb21wb25lbnRzKHRhc2ssIGQpCisKKyAgICAgICAgc3N0YXRlZmlsZSA9IGQuZXhwYW5kKCIke1NTVEFURV9ESVJ9LyIgKyBleHRyYXBhdGggKyBnZW5lcmF0ZV9zc3RhdGVmbihzcGVjLCBzcV9oYXNoW3Rhc2tdLCBkKSArICJfIiArIHRuYW1lICsgZXh0ZW5zaW9uKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNzdGF0ZWZpbGUpOgorICAgICAgICAgICAgYmIuZGVidWcoMiwgIlNTdGF0ZTogRm91bmQgdmFsaWQgc3N0YXRlIGZpbGUgJXMiICUgc3N0YXRlZmlsZSkKKyAgICAgICAgICAgIHJldC5hcHBlbmQodGFzaykKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtaXNzZWQuYXBwZW5kKHRhc2spCisgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiU1N0YXRlOiBMb29rZWQgZm9yIGJ1dCBkaWRuJ3QgZmluZCBmaWxlICVzIiAlIHNzdGF0ZWZpbGUpCisKKyAgICBtaXJyb3JzID0gZC5nZXRWYXIoIlNTVEFURV9NSVJST1JTIiwgVHJ1ZSkKKyAgICBpZiBtaXJyb3JzOgorICAgICAgICAjIENvcHkgdGhlIGRhdGEgb2JqZWN0IGFuZCBvdmVycmlkZSBETF9ESVIgYW5kIFNSQ19VUkkKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGRsZGlyID0gbG9jYWxkYXRhLmV4cGFuZCgiJHtTU1RBVEVfRElSfSIpCisgICAgICAgIGxvY2FsZGF0YS5kZWxWYXIoJ01JUlJPUlMnKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdGSUxFU1BBVEgnLCBkbGRpcikKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignRExfRElSJywgZGxkaXIpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BSRU1JUlJPUlMnLCBtaXJyb3JzKQorCisgICAgICAgIGJiLmRlYnVnKDIsICJTU3RhdGUgdXNpbmcgcHJlbWlycm9yIG9mOiAlcyIgJSBtaXJyb3JzKQorCisgICAgICAgICMgaWYgQkJfTk9fTkVUV09SSyBpcyBzZXQgYnV0IHdlIGFsc28gaGF2ZSBTU1RBVEVfTUlSUk9SX0FMTE9XX05FVFdPUkssCisgICAgICAgICMgd2UnbGwgd2FudCB0byBhbGxvdyBuZXR3b3JrIGFjY2VzcyBmb3IgdGhlIGN1cnJlbnQgc2V0IG9mIGZldGNoZXMuCisgICAgICAgIGlmIGxvY2FsZGF0YS5nZXRWYXIoJ0JCX05PX05FVFdPUksnLCBUcnVlKSA9PSAiMSIgYW5kIGxvY2FsZGF0YS5nZXRWYXIoJ1NTVEFURV9NSVJST1JfQUxMT1dfTkVUV09SSycsIFRydWUpID09ICIxIjoKKyAgICAgICAgICAgIGxvY2FsZGF0YS5kZWxWYXIoJ0JCX05PX05FVFdPUksnKQorCisgICAgICAgIGZyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaENvbm5lY3Rpb25DYWNoZQorICAgICAgICBkZWYgY2hlY2tzdGF0dXNfaW5pdCh0aHJlYWRfd29ya2VyKToKKyAgICAgICAgICAgIHRocmVhZF93b3JrZXIuY29ubmVjdGlvbl9jYWNoZSA9IEZldGNoQ29ubmVjdGlvbkNhY2hlKCkKKworICAgICAgICBkZWYgY2hlY2tzdGF0dXNfZW5kKHRocmVhZF93b3JrZXIpOgorICAgICAgICAgICAgdGhyZWFkX3dvcmtlci5jb25uZWN0aW9uX2NhY2hlLmNsb3NlX2Nvbm5lY3Rpb25zKCkKKworICAgICAgICBkZWYgY2hlY2tzdGF0dXModGhyZWFkX3dvcmtlciwgYXJnKToKKyAgICAgICAgICAgICh0YXNrLCBzc3RhdGVmaWxlKSA9IGFyZworCisgICAgICAgICAgICBsb2NhbGRhdGEyID0gYmIuZGF0YS5jcmVhdGVDb3B5KGxvY2FsZGF0YSkKKyAgICAgICAgICAgIHNyY3VyaSA9ICJmaWxlOi8vIiArIHNzdGF0ZWZpbGUKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1NSQ19VUkknLCBzcmN1cmkpCisgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiU1N0YXRlOiBBdHRlbXB0aW5nIHRvIGZldGNoICVzIiAlIHNyY3VyaSkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goc3JjdXJpLnNwbGl0KCksIGxvY2FsZGF0YTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbl9jYWNoZT10aHJlYWRfd29ya2VyLmNvbm5lY3Rpb25fY2FjaGUpCisgICAgICAgICAgICAgICAgZmV0Y2hlci5jaGVja3N0YXR1cygpCisgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgIlNTdGF0ZTogU3VjY2Vzc2Z1bCBmZXRjaCB0ZXN0IGZvciAlcyIgJSBzcmN1cmkpCisgICAgICAgICAgICAgICAgcmV0LmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgIGlmIHRhc2sgaW4gbWlzc2VkOgorICAgICAgICAgICAgICAgICAgICBtaXNzZWQucmVtb3ZlKHRhc2spCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgbWlzc2VkLmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICJTU3RhdGU6IFVuc3VjY2Vzc2Z1bCBmZXRjaCB0ZXN0IGZvciAlcyIgJSBzcmN1cmkpCisgICAgICAgICAgICAgICAgcGFzcyAgICAgCisKKyAgICAgICAgdGFza2xpc3QgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiByYW5nZShsZW4oc3FfZm4pKToKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gcmV0OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzcGVjLCBleHRyYXBhdGgsIHRuYW1lID0gZ2V0cGF0aGNvbXBvbmVudHModGFzaywgZCkKKyAgICAgICAgICAgIHNzdGF0ZWZpbGUgPSBkLmV4cGFuZChleHRyYXBhdGggKyBnZW5lcmF0ZV9zc3RhdGVmbihzcGVjLCBzcV9oYXNoW3Rhc2tdLCBkKSArICJfIiArIHRuYW1lICsgZXh0ZW5zaW9uKQorICAgICAgICAgICAgdGFza2xpc3QuYXBwZW5kKCh0YXNrLCBzc3RhdGVmaWxlKSkKKworICAgICAgICBpZiB0YXNrbGlzdDoKKyAgICAgICAgICAgIGJiLm5vdGUoIkNoZWNraW5nIHNzdGF0ZSBtaXJyb3Igb2JqZWN0IGF2YWlsYWJpbGl0eSAoZm9yICVzIG9iamVjdHMpIiAlIGxlbih0YXNrbGlzdCkpCisgICAgICAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCisgICAgICAgICAgICBucHJvYyA9IG1pbihtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50KCksIGxlbih0YXNrbGlzdCkpCisKKyAgICAgICAgICAgIHBvb2wgPSBvZS51dGlscy5UaHJlYWRlZFBvb2wobnByb2MsIGxlbih0YXNrbGlzdCksCisgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9pbml0PWNoZWNrc3RhdHVzX2luaXQsIHdvcmtlcl9lbmQ9Y2hlY2tzdGF0dXNfZW5kKQorICAgICAgICAgICAgZm9yIHQgaW4gdGFza2xpc3Q6CisgICAgICAgICAgICAgICAgcG9vbC5hZGRfdGFzayhjaGVja3N0YXR1cywgdCkKKyAgICAgICAgICAgIHBvb2wuc3RhcnQoKQorICAgICAgICAgICAgcG9vbC53YWl0X2NvbXBsZXRpb24oKQorCisgICAgaW5oZXJpdGxpc3QgPSBkLmdldFZhcigiSU5IRVJJVCIsIFRydWUpCisgICAgaWYgInRvYXN0ZXIiIGluIGluaGVyaXRsaXN0OgorICAgICAgICBldmRhdGEgPSB7J21pc3NlZCc6IFtdLCAnZm91bmQnOiBbXX07CisgICAgICAgIGZvciB0YXNrIGluIG1pc3NlZDoKKyAgICAgICAgICAgIHNwZWMsIGV4dHJhcGF0aCwgdG5hbWUgPSBnZXRwYXRoY29tcG9uZW50cyh0YXNrLCBkKQorICAgICAgICAgICAgc3N0YXRlZmlsZSA9IGQuZXhwYW5kKGV4dHJhcGF0aCArIGdlbmVyYXRlX3NzdGF0ZWZuKHNwZWMsIHNxX2hhc2hbdGFza10sIGQpICsgIl8iICsgdG5hbWUgKyAiLnRneiIpCisgICAgICAgICAgICBldmRhdGFbJ21pc3NlZCddLmFwcGVuZCggKHNxX2ZuW3Rhc2tdLCBzcV90YXNrW3Rhc2tdLCBzcV9oYXNoW3Rhc2tdLCBzc3RhdGVmaWxlICkgKQorICAgICAgICBmb3IgdGFzayBpbiByZXQ6CisgICAgICAgICAgICBzcGVjLCBleHRyYXBhdGgsIHRuYW1lID0gZ2V0cGF0aGNvbXBvbmVudHModGFzaywgZCkKKyAgICAgICAgICAgIHNzdGF0ZWZpbGUgPSBkLmV4cGFuZChleHRyYXBhdGggKyBnZW5lcmF0ZV9zc3RhdGVmbihzcGVjLCBzcV9oYXNoW3Rhc2tdLCBkKSArICJfIiArIHRuYW1lICsgIi50Z3oiKQorICAgICAgICAgICAgZXZkYXRhWydmb3VuZCddLmFwcGVuZCggKHNxX2ZuW3Rhc2tdLCBzcV90YXNrW3Rhc2tdLCBzcV9oYXNoW3Rhc2tdLCBzc3RhdGVmaWxlICkgKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIk1pc3NlZFNzdGF0ZSIsIGV2ZGF0YSksIGQpCisKKyAgICBpZiBoYXNhdHRyKGJiLnBhcnNlLnNpZ2dlbiwgImNoZWNraGFzaGVzIik6CisgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi5jaGVja2hhc2hlcyhtaXNzZWQsIHJldCwgc3FfZm4sIHNxX3Rhc2ssIHNxX2hhc2gsIHNxX2hhc2hmbiwgZCkKKworICAgIHJldHVybiByZXQKKworQkJfU0VUU0NFTkVfREVQVkFMSUQgPSAic2V0c2NlbmVfZGVwdmFsaWQiCisKK2RlZiBzZXRzY2VuZV9kZXB2YWxpZCh0YXNrLCB0YXNrZGVwZW5kZWVzLCBub3RuZWVkZWQsIGQpOgorICAgICMgdGFza2RlcGVuZGVlcyBpcyBhIGRpY3Qgb2YgdGFza3Mgd2hpY2ggZGVwZW5kIG9uIHRhc2ssIGVhY2ggYmVpbmcgYSAzIGl0ZW0gbGlzdCBvZiBbUE4sIFRBU0tOQU1FLCBGSUxFTkFNRV0KKyAgICAjIHRhc2sgaXMgaW5jbHVkZWQgaW4gdGFza2RlcGVuZGVlcyB0b28KKworICAgIGJiLmRlYnVnKDIsICJDb25zaWRlcmluZyBzZXRzY2VuZSB0YXNrOiAlcyIgJSAoc3RyKHRhc2tkZXBlbmRlZXNbdGFza10pKSkKKworICAgIGRlZiBpc05hdGl2ZUNyb3NzKHgpOgorICAgICAgICByZXR1cm4geC5lbmRzd2l0aCgiLW5hdGl2ZSIpIG9yICItY3Jvc3MtIiBpbiB4IG9yICItY3Jvc3NzZGsiIGluIHgKKworICAgIGRlZiBpc1Bvc3RJbnN0RGVwKHgpOgorICAgICAgICBpZiB4IGluIFsicWVtdS1uYXRpdmUiLCAiZ2RrLXBpeGJ1Zi1uYXRpdmUiLCAicWVtdXdyYXBwZXItY3Jvc3MiLCAiZGVwbW9kd3JhcHBlci1jcm9zcyIsICJzeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUiLCAiZ3RrLWljb24tdXRpbHMtbmF0aXZlIl06CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMgV2Ugb25seSBuZWVkIHRvIHRyaWdnZXIgcG9wdWxhdGVfbGljIHRocm91Z2ggZGlyZWN0IGRlcGVuZGVuY2llcworICAgIGlmIHRhc2tkZXBlbmRlZXNbdGFza11bMV0gPT0gImRvX3BvcHVsYXRlX2xpYyI6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBmb3IgZGVwIGluIHRhc2tkZXBlbmRlZXM6CisgICAgICAgIGJiLmRlYnVnKDIsICIgIGNvbnNpZGVyaW5nIGRlcGVuZGVuY3k6ICVzIiAlIChzdHIodGFza2RlcGVuZGVlc1tkZXBdKSkpCisgICAgICAgIGlmIHRhc2sgPT0gZGVwOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgZGVwIGluIG5vdG5lZWRlZDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgZG9fcGFja2FnZV93cml0ZV8qIGFuZCBkb19wYWNrYWdlIGRvZXNuJ3QgbmVlZCBkb19wYWNrYWdlCisgICAgICAgIGlmIHRhc2tkZXBlbmRlZXNbdGFza11bMV0gPT0gImRvX3BhY2thZ2UiIGFuZCB0YXNrZGVwZW5kZWVzW2RlcF1bMV0gaW4gWydkb19wYWNrYWdlJywgJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2RvX3BhY2thZ2Vfd3JpdGVfaXBrJywgJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RvX3BhY2thZ2VkYXRhJywgJ2RvX3BhY2thZ2VfcWEnXToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgZG9fcGFja2FnZV93cml0ZV8qIGFuZCBkb19wYWNrYWdlIGRvZXNuJ3QgbmVlZCBkb19wb3B1bGF0ZV9zeXNyb290LCB1bmxlc3MgaXMgYSBwb3N0aW5zdGFsbCBkZXBlbmRlbmN5CisgICAgICAgIGlmIHRhc2tkZXBlbmRlZXNbdGFza11bMV0gPT0gImRvX3BvcHVsYXRlX3N5c3Jvb3QiIGFuZCB0YXNrZGVwZW5kZWVzW2RlcF1bMV0gaW4gWydkb19wYWNrYWdlJywgJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2RvX3BhY2thZ2Vfd3JpdGVfaXBrJywgJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RvX3BhY2thZ2VkYXRhJywgJ2RvX3BhY2thZ2VfcWEnXToKKyAgICAgICAgICAgIGlmIGlzUG9zdEluc3REZXAodGFza2RlcGVuZGVlc1t0YXNrXVswXSkgYW5kIHRhc2tkZXBlbmRlZXNbZGVwXVsxXSBpbiBbJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2RvX3BhY2thZ2Vfd3JpdGVfaXBrJywgJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJ106CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIE5hdGl2ZS9Dcm9zcyBwYWNrYWdlcyBkb24ndCBleGlzdCBhbmQgYXJlIG5vZXhlYyBhbnl3YXkKKyAgICAgICAgaWYgaXNOYXRpdmVDcm9zcyh0YXNrZGVwZW5kZWVzW2RlcF1bMF0pIGFuZCB0YXNrZGVwZW5kZWVzW2RlcF1bMV0gaW4gWydkb19wYWNrYWdlX3dyaXRlX2RlYicsICdkb19wYWNrYWdlX3dyaXRlX2lwaycsICdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkb19wYWNrYWdlZGF0YScsICdkb19wYWNrYWdlJywgJ2RvX3BhY2thZ2VfcWEnXToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgIyBDb25zaWRlciBzeXNyb290IGRlcGVuZGluZyBvbiBzeXNyb290IHRhc2tzCisgICAgICAgIGlmIHRhc2tkZXBlbmRlZXNbdGFza11bMV0gPT0gJ2RvX3BvcHVsYXRlX3N5c3Jvb3QnIGFuZCB0YXNrZGVwZW5kZWVzW2RlcF1bMV0gPT0gJ2RvX3BvcHVsYXRlX3N5c3Jvb3QnOgorICAgICAgICAgICAgIyBiYXNlLXBhc3N3ZC9zaGFkb3ctc3lzcm9vdCBkb24ndCBuZWVkIHRoZWlyIGRlcGVuZGVuY2llcworICAgICAgICAgICAgaWYgdGFza2RlcGVuZGVlc1tkZXBdWzBdLmVuZHN3aXRoKCgiYmFzZS1wYXNzd2QiLCAic2hhZG93LXN5c3Jvb3QiKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMgTm90aGluZyBuZWVkIGRlcGVuZCBvbiBsaWJjLWluaXRpYWwvZ2NjLWNyb3NzLWluaXRpYWwKKyAgICAgICAgICAgIGlmICItaW5pdGlhbCIgaW4gdGFza2RlcGVuZGVlc1t0YXNrXVswXToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBOYXRpdmUvQ3Jvc3MgcG9wdWxhdGVfc3lzcm9vdCBuZWVkIHRoZWlyIGRlcGVuZGVuY2llcworICAgICAgICAgICAgaWYgaXNOYXRpdmVDcm9zcyh0YXNrZGVwZW5kZWVzW3Rhc2tdWzBdKSBhbmQgaXNOYXRpdmVDcm9zcyh0YXNrZGVwZW5kZWVzW2RlcF1bMF0pOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgIyBUYXJnZXQgcG9wdWxhdGVfc3lzcm9vdCBkZXBlbmRlZCBvbiBieSBjcm9zcyB0b29scyBuZWVkIHRvIGJlIGluc3RhbGxlZAorICAgICAgICAgICAgaWYgaXNOYXRpdmVDcm9zcyh0YXNrZGVwZW5kZWVzW2RlcF1bMF0pOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgIyBOYXRpdmUvY3Jvc3MgdG9vbHMgZGVwZW5kZWQgdXBvbiBieSB0YXJnZXQgc3lzcm9vdCBhcmUgbm90IG5lZWRlZAorICAgICAgICAgICAgaWYgaXNOYXRpdmVDcm9zcyh0YXNrZGVwZW5kZWVzW3Rhc2tdWzBdKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBUYXJnZXQgcG9wdWxhdGVfc3lzcm9vdCBuZWVkIHRoZWlyIGRlcGVuZGVuY2llcworICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgdGFza2RlcGVuZGVlc1t0YXNrXVsxXSA9PSAnZG9fc2hhcmVkX3dvcmtkaXInOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAjIFRoaXMgaXMgZHVlIHRvIHRoZSBbZGVwZW5kc10gaW4gdXNlcmFkZC5iYmNsYXNzIGNvbXBsaWNhdGluZyBtYXR0ZXJzCisgICAgICAgICMgVGhlIGxvZ2ljICppcyogcmV2ZXJzZWQgaGVyZSBkdWUgdG8gdGhlIHdheSBoYXJkIHNldHNjZW5lIGRlcGVuZGVuY2llcyBhcmUgaW5qZWN0ZWQKKyAgICAgICAgaWYgdGFza2RlcGVuZGVlc1t0YXNrXVsxXSA9PSAnZG9fcGFja2FnZScgYW5kIHRhc2tkZXBlbmRlZXNbZGVwXVswXS5lbmRzd2l0aCgoJ3NoYWRvdy1uYXRpdmUnLCAnc2hhZG93LXN5c3Jvb3QnLCAnYmFzZS1wYXNzd2QnLCAncHNldWRvLW5hdGl2ZScpKSBhbmQgdGFza2RlcGVuZGVlc1tkZXBdWzFdID09ICdkb19wb3B1bGF0ZV9zeXNyb290JzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgIyBTYWZlIGZhbGx0aHJvdWdoIGRlZmF1bHQKKyAgICAgICAgYmIuZGVidWcoMiwgIiBEZWZhdWx0IHNldHNjZW5lIGRlcGVuZGVuY3kgZmFsbCB0aHJvdWdoIGR1ZSB0byBkZXBlbmRlbmN5OiAlcyIgJSAoc3RyKHRhc2tkZXBlbmRlZXNbZGVwXSkpKQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCithZGRoYW5kbGVyIHNzdGF0ZV9ldmVudGhhbmRsZXIKK3NzdGF0ZV9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5idWlsZC5UYXNrU3VjY2VlZGVkIgorcHl0aG9uIHNzdGF0ZV9ldmVudGhhbmRsZXIoKSB7CisgICAgZCA9IGUuZGF0YQorICAgICMgV2hlbiB3ZSB3cml0ZSBhbiBzc3RhdGUgcGFja2FnZSB3ZSByZXdyaXRlIHRoZSBTU1RBVEVfUEtHCisgICAgc3BrZyA9IGQuZ2V0VmFyKCdTU1RBVEVfUEtHJywgVHJ1ZSkKKyAgICBpZiBub3Qgc3BrZy5lbmRzd2l0aCgiLnRneiIpOgorICAgICAgICB0YXNrbmFtZSA9IGQuZ2V0VmFyKCJCQl9SVU5UQVNLIiwgVHJ1ZSlbMzpdCisgICAgICAgIHNwZWMgPSBkLmdldFZhcignU1NUQVRFX1BLR1NQRUMnLCBUcnVlKQorICAgICAgICBzd3NwZWMgPSBkLmdldFZhcignU1NUQVRFX1NXU1BFQycsIFRydWUpCisgICAgICAgIGlmIHRhc2tuYW1lIGluIFsiZmV0Y2giLCAidW5wYWNrIiwgInBhdGNoIiwgInBvcHVsYXRlX2xpYyIsICJwcmVjb25maWd1cmUiXSBhbmQgc3dzcGVjOgorICAgICAgICAgICAgZC5zZXRWYXIoIlNTVEFURV9QS0dTUEVDIiwgIiR7U1NUQVRFX1NXU1BFQ30iKQorICAgICAgICAgICAgZC5zZXRWYXIoIlNTVEFURV9FWFRSQVBBVEgiLCAiIikKKyAgICAgICAgc3N0YXRlcGtnID0gZC5nZXRWYXIoJ1NTVEFURV9QS0cnLCBUcnVlKQorICAgICAgICBiYi5zaWdnZW4uZHVtcF90aGlzX3Rhc2soc3N0YXRlcGtnICsgJ18nICsgdGFza25hbWUgKyAiLnRneiIgIi5zaWdpbmZvIiwgZCkKK30KKworU1NUQVRFX1BSVU5FX09CU09MRVRFV09SS0RJUiA9ICIxIgorCisjIEV2ZW50IGhhbmRsZXIgd2hpY2ggcmVtb3ZlcyBtYW5pZmVzdHMgYW5kIHN0YW1wcyBmaWxlIGZvcgorIyByZWNpcGVzIHdoaWNoIGFyZSBubyBsb25nZXIgcmVhY2hhYmxlIGluIGEgYnVpbGQgd2hlcmUgdGhleQorIyBvbmNlIHdlcmUuCisjIEFsc28gb3B0aW9uYWxseSByZW1vdmVzIHRoZSB3b3JrZGlyIG9mIHRob3NlIHRhc2tzL3JlY2lwZXMKKyMKK2FkZGhhbmRsZXIgc3N0YXRlX2V2ZW50aGFuZGxlcjIKK3NzdGF0ZV9ldmVudGhhbmRsZXIyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuUmVhY2hhYmxlU3RhbXBzIgorcHl0aG9uIHNzdGF0ZV9ldmVudGhhbmRsZXIyKCkgeworICAgIGltcG9ydCBnbG9iCisgICAgZCA9IGUuZGF0YQorICAgIHN0YW1wcyA9IGUuc3RhbXBzLnZhbHVlcygpCisgICAgcmVtb3Zld29ya2RpciA9IChkLmdldFZhcigiU1NUQVRFX1BSVU5FX09CU09MRVRFV09SS0RJUiIsIEZhbHNlKSA9PSAiMSIpCisgICAgc2VlbiA9IFtdCisgICAgZm9yIGEgaW4gZC5nZXRWYXIoIlNTVEFURV9BUkNIUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIHRvcmVtb3ZlID0gW10KKyAgICAgICAgaSA9IGQuZXhwYW5kKCIke1NTVEFURV9NQU5JRkVTVFN9L2luZGV4LSIgKyBhKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB3aXRoIG9wZW4oaSwgInIiKSBhcyBmOgorICAgICAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICAoc3RhbXAsIG1hbmlmZXN0LCB3b3JrZGlyKSA9IGwuc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIHN0YW1wIG5vdCBpbiBzdGFtcHM6CisgICAgICAgICAgICAgICAgICAgIHRvcmVtb3ZlLmFwcGVuZChsKQorICAgICAgICAgICAgICAgICAgICBpZiBzdGFtcCBub3QgaW4gc2VlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIlN0YW1wICVzIGlzIG5vdCByZWFjaGFibGUsIHJlbW92aW5nIHJlbGF0ZWQgbWFuaWZlc3RzIiAlIHN0YW1wKQorICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbi5hcHBlbmQoc3RhbXApCisgICAgICAgIGZvciByIGluIHRvcmVtb3ZlOgorICAgICAgICAgICAgKHN0YW1wLCBtYW5pZmVzdCwgd29ya2RpcikgPSByLnNwbGl0KCkKKyAgICAgICAgICAgIGZvciBtIGluIGdsb2IuZ2xvYihtYW5pZmVzdCArICIuKiIpOgorICAgICAgICAgICAgICAgIHNzdGF0ZV9jbGVhbl9tYW5pZmVzdChtLCBkKQorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHN0YW1wICsgIioiKQorICAgICAgICAgICAgaWYgcmVtb3Zld29ya2RpcjoKKyAgICAgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUod29ya2RpciwgcmVjdXJzZSA9IFRydWUpCisgICAgICAgICAgICBsaW5lcy5yZW1vdmUocikKKyAgICAgICAgd2l0aCBvcGVuKGksICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgIGYud3JpdGUobCkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N0YWdpbmcuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N0YWdpbmcuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjdlZGRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3RhZ2luZy5iYmNsYXNzCkBAIC0wLDAgKzEsMjE4IEBACisKK3N5c3Jvb3Rfc3RhZ2VfZGlyKCkgeworCXNyYz0iJDEiCisJZGVzdD0iJDIiCisJIyBpZiB0aGUgc3JjIGRvZXNuJ3QgZXhpc3QgZG9uJ3QgZG8gYW55dGhpbmcKKwlpZiBbICEgLWQgIiRzcmMiIF07IHRoZW4KKwkJIHJldHVybgorCWZpCisKKwlta2RpciAtcCAiJGRlc3QiCisJKAorCQljZCAkc3JjCisJCWZpbmQgLiAtcHJpbnQwIHwgY3BpbyAtLW51bGwgLXBkbHUgJGRlc3QKKwkpCit9CisKK3N5c3Jvb3Rfc3RhZ2VfbGliZGlyKCkgeworCXNyYz0iJDEiCisJZGVzdD0iJDIiCisKKwlzeXNyb290X3N0YWdlX2RpciAkc3JjICRkZXN0Cit9CisKK3N5c3Jvb3Rfc3RhZ2VfZGlycygpIHsKKwlmcm9tPSIkMSIKKwl0bz0iJDIiCisKKwlzeXNyb290X3N0YWdlX2RpciAkZnJvbSR7aW5jbHVkZWRpcn0gJHRvJHtpbmNsdWRlZGlyfQorCWlmIFsgIiR7QlVJTERfU1lTfSIgPSAiJHtIT1NUX1NZU30iIF07IHRoZW4KKwkJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke2JpbmRpcn0gJHRvJHtiaW5kaXJ9CisJCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtzYmluZGlyfSAkdG8ke3NiaW5kaXJ9CisJCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtiYXNlX2JpbmRpcn0gJHRvJHtiYXNlX2JpbmRpcn0KKwkJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke2Jhc2Vfc2JpbmRpcn0gJHRvJHtiYXNlX3NiaW5kaXJ9CisJCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtsaWJleGVjZGlyfSAkdG8ke2xpYmV4ZWNkaXJ9CisJCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtzeXNjb25mZGlyfSAkdG8ke3N5c2NvbmZkaXJ9CisJCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtsb2NhbHN0YXRlZGlyfSAkdG8ke2xvY2Fsc3RhdGVkaXJ9CisJZmkKKwlpZiBbIC1kICRmcm9tJHtsaWJkaXJ9IF0KKwl0aGVuCisJCXN5c3Jvb3Rfc3RhZ2VfbGliZGlyICRmcm9tJHtsaWJkaXJ9ICR0byR7bGliZGlyfQorCWZpCisJaWYgWyAtZCAkZnJvbSR7YmFzZV9saWJkaXJ9IF0KKwl0aGVuCisJCXN5c3Jvb3Rfc3RhZ2VfbGliZGlyICRmcm9tJHtiYXNlX2xpYmRpcn0gJHRvJHtiYXNlX2xpYmRpcn0KKwlmaQorCWlmIFsgLWQgJGZyb20ke25vbmFyY2hfYmFzZV9saWJkaXJ9IF0KKwl0aGVuCisJCXN5c3Jvb3Rfc3RhZ2VfbGliZGlyICRmcm9tJHtub25hcmNoX2Jhc2VfbGliZGlyfSAkdG8ke25vbmFyY2hfYmFzZV9saWJkaXJ9CisJZmkKKwlzeXNyb290X3N0YWdlX2RpciAkZnJvbSR7ZGF0YWRpcn0gJHRvJHtkYXRhZGlyfQorCSMgV2UgZG9uJ3QgY2FyZSBhYm91dCBkb2NzL2luZm8vbWFucGFnZXMvbG9jYWxlcworCXJtIC1yZiAkdG8ke21hbmRpcn0vICR0byR7ZG9jZGlyfS8gJHRvJHtpbmZvZGlyfS8gJHt0b30ke2RhdGFkaXJ9L2xvY2FsZS8KKwlybSAtcmYgJHRvJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvICR0byR7ZGF0YWRpcn0vZm9udHMvICR0byR7ZGF0YWRpcn0vcGl4bWFwcy8KK30KKworc3lzcm9vdF9zdGFnZV9hbGwoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXJzICR7RH0gJHtTWVNST09UX0RFU1RESVJ9Cit9CisKK3B5dGhvbiBzeXNyb290X3N0cmlwICgpIHsKKyAgICBpbXBvcnQgc3RhdCwgZXJybm8KKworICAgIGR2YXIgPSBkLmdldFZhcignU1lTUk9PVF9ERVNURElSJywgVHJ1ZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICBvcy5jaGRpcihkdmFyKQorCisgICAgIyBSZXR1cm4gdHlwZSAoYml0cyk6CisgICAgIyAwIC0gbm90IGVsZgorICAgICMgMSAtIEVMRgorICAgICMgMiAtIHN0cmlwcGVkCisgICAgIyA0IC0gZXhlY3V0YWJsZQorICAgICMgOCAtIHNoYXJlZCBsaWJyYXJ5CisgICAgIyAxNiAtIGtlcm5lbCBtb2R1bGUKKyAgICBkZWYgaXNFTEYocGF0aCk6CisgICAgICAgIHR5cGUgPSAwCisgICAgICAgIHJldCwgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCJmaWxlIFwiJXNcIiIgJSBwYXRoLnJlcGxhY2UoIlwiIiwgIlxcXCIiKSkKKworICAgICAgICBpZiByZXQ6CisgICAgICAgICAgICBiYi5lcnJvcigic3BsaXRfYW5kX3N0cmlwX2ZpbGVzOiAnZmlsZSAlcycgZmFpbGVkIiAlIHBhdGgpCisgICAgICAgICAgICByZXR1cm4gdHlwZQorCisgICAgICAgICMgTm90IHN0cmlwcGVkCisgICAgICAgIGlmICJFTEYiIGluIHJlc3VsdDoKKyAgICAgICAgICAgIHR5cGUgfD0gMQorICAgICAgICAgICAgaWYgIm5vdCBzdHJpcHBlZCIgbm90IGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICB0eXBlIHw9IDIKKyAgICAgICAgICAgIGlmICJleGVjdXRhYmxlIiBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgdHlwZSB8PSA0CisgICAgICAgICAgICBpZiAic2hhcmVkIiBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgdHlwZSB8PSA4CisgICAgICAgIHJldHVybiB0eXBlCisKKworICAgIGVsZmZpbGVzID0ge30KKyAgICBpbm9kZXMgPSB7fQorICAgIGxpYmRpciA9IG9zLnBhdGguYWJzcGF0aChkdmFyICsgb3Muc2VwICsgZC5nZXRWYXIoImxpYmRpciIsIFRydWUpKQorICAgIGJhc2VsaWJkaXIgPSBvcy5wYXRoLmFic3BhdGgoZHZhciArIG9zLnNlcCArIGQuZ2V0VmFyKCJiYXNlX2xpYmRpciIsIFRydWUpKQorICAgIGlmIChkLmdldFZhcignSU5ISUJJVF9TWVNST09UX1NUUklQJywgVHJ1ZSkgIT0gJzEnKToKKyAgICAgICAgIworICAgICAgICAjIEZpcnN0IGxldHMgZmlndXJlIG91dCBhbGwgb2YgdGhlIGZpbGVzIHdlIG1heSBoYXZlIHRvIHByb2Nlc3MKKyAgICAgICAgIworICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkdmFyKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZikKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbHRhcmdldCA9IG9lLnBhdGgucmVhbHBhdGgoZmlsZSwgZHZhciwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHMgPSBvcy5sc3RhdChsdGFyZ2V0KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIChlcnIsIHN0cmVycm9yKSA9IGUuYXJncworICAgICAgICAgICAgICAgICAgICBpZiBlcnIgIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgIyBTa2lwIGJyb2tlbiBzeW1saW5rcworICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICMgQ2hlY2sgaXRzIGFuIGV4Y3V0YWJsZQorICAgICAgICAgICAgICAgIGlmIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhVU1IpIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhHUlApIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhPVEgpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yICgoZmlsZS5zdGFydHN3aXRoKGxpYmRpcikgb3IgZmlsZS5zdGFydHN3aXRoKGJhc2VsaWJkaXIpKSBhbmQgIi5zbyIgaW4gZik6CisgICAgICAgICAgICAgICAgICAgICMgSWYgaXQncyBhIHN5bWxpbmssIGFuZCBwb2ludHMgdG8gYW4gRUxGIGZpbGUsIHdlIGNhcHR1cmUgdGhlIHJlYWRsaW5rIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgIyBJdCdzIGEgZmlsZSAob3IgaGFyZGxpbmspLCBub3QgYSBsaW5rCisgICAgICAgICAgICAgICAgICAgICMgLi4uYnV0IGlzIGl0IEVMRiwgYW5kIGlzIGl0IGFscmVhZHkgc3RyaXBwZWQ/CisgICAgICAgICAgICAgICAgICAgIGVsZl9maWxlID0gaXNFTEYoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZWxmX2ZpbGUgJiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZWxmX2ZpbGUgJiAyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIkZpbGUgJyVzJyBmcm9tICVzIHdhcyBhbHJlYWR5IHN0cmlwcGVkLCB0aGlzIHdpbGwgcHJldmVudCBmdXR1cmUgZGVidWdnaW5nISIgJSAoZmlsZVtsZW4oZHZhcik6XSwgcG4pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHMuc3RfaW5vIGluIGlub2RlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5saW5rKGlub2Rlc1tzLnN0X2lub10sIGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlub2Rlc1tzLnN0X2lub10gPSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBicmVhayBoYXJkbGluaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLmNvcHlmaWxlKGZpbGUsIGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxmZmlsZXNbZmlsZV0gPSBlbGZfZmlsZQorCisgICAgICAgICMKKyAgICAgICAgIyBOb3cgc3RyaXAgdGhlbSAoaW4gcGFyYWxsZWwpCisgICAgICAgICMKKyAgICAgICAgc3RyaXAgPSBkLmdldFZhcigiU1RSSVAiLCBUcnVlKQorICAgICAgICBzZmlsZXMgPSBbXQorICAgICAgICBmb3IgZmlsZSBpbiBlbGZmaWxlczoKKyAgICAgICAgICAgIGVsZl9maWxlID0gaW50KGVsZmZpbGVzW2ZpbGVdKQorICAgICAgICAgICAgI2JiLm5vdGUoIlN0cmlwICVzIiAlIGZpbGUpCisgICAgICAgICAgICBzZmlsZXMuYXBwZW5kKChmaWxlLCBlbGZfZmlsZSwgc3RyaXApKQorCisgICAgICAgIG9lLnV0aWxzLm11bHRpcHJvY2Vzc19leGVjKHNmaWxlcywgb2UucGFja2FnZS5ydW5zdHJpcCkKK30KKworZG9fcG9wdWxhdGVfc3lzcm9vdFtkaXJzXSA9ICIke1NZU1JPT1RfREVTVERJUn0iCitkb19wb3B1bGF0ZV9zeXNyb290W3VtYXNrXSA9ICIwMjIiCisKK2FkZHRhc2sgcG9wdWxhdGVfc3lzcm9vdCBhZnRlciBkb19pbnN0YWxsCisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyA/PSAiIgorU1lTUk9PVF9ERVNURElSID0gIiR7V09SS0RJUn0vc3lzcm9vdC1kZXN0ZGlyLyIKK1NZU1JPT1RfTE9DSyA9ICIke1NUQUdJTkdfRElSfS9zdGFnaW5nLmxvY2siCisKKyMgV2UgY2xlYW4gb3V0IGFueSBleGlzdGluZyBzc3RhdGUgZnJvbSB0aGUgc3lzcm9vdCBpZiB3ZSByZXJ1biBjb25maWd1cmUKK3B5dGhvbiBzeXNyb290X2NsZWFuc3N0YXRlICgpIHsKKyAgICBzcyA9IHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhkLCAicG9wdWxhdGVfc3lzcm9vdCIpCisgICAgc3N0YXRlX2NsZWFuKHNzLCBkKQorfQorZG9fY29uZmlndXJlW3ByZWZ1bmNzXSArPSAic3lzcm9vdF9jbGVhbnNzdGF0ZSIKKworCitCQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT04gPSAic3lzcm9vdF9jaGVja2hhc2hlcyIKKworZGVmIHN5c3Jvb3RfY2hlY2toYXNoZXMoY292ZXJlZCwgdGFza25hbWVzLCBmbmlkcywgZm5zLCBkLCBpbnZhbGlkdGFza3MgPSBOb25lKToKKyAgICBwcm9ibGVtcyA9IHNldCgpCisgICAgY29uZmlndXJlZm5pZHMgPSBzZXQoKQorICAgIGlmIG5vdCBpbnZhbGlkdGFza3M6CisgICAgICAgIGludmFsaWR0YXNrcyA9IHhyYW5nZShsZW4odGFza25hbWVzKSkKKyAgICBmb3IgdGFzayBpbiBpbnZhbGlkdGFza3M6CisgICAgICAgIGlmIHRhc2tuYW1lc1t0YXNrXSA9PSAiZG9fY29uZmlndXJlIiBhbmQgdGFzayBub3QgaW4gY292ZXJlZDoKKyAgICAgICAgICAgIGNvbmZpZ3VyZWZuaWRzLmFkZChmbmlkc1t0YXNrXSkKKyAgICBmb3IgdGFzayBpbiBjb3ZlcmVkOgorICAgICAgICBpZiB0YXNrbmFtZXNbdGFza10gPT0gImRvX3BvcHVsYXRlX3N5c3Jvb3QiIGFuZCBmbmlkc1t0YXNrXSBpbiBjb25maWd1cmVmbmlkczoKKyAgICAgICAgICAgIHByb2JsZW1zLmFkZCh0YXNrKQorICAgIHJldHVybiBwcm9ibGVtcworCitweXRob24gZG9fcG9wdWxhdGVfc3lzcm9vdCAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJzeXNyb290X3N0YWdlX2FsbCIsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJzeXNyb290X3N0cmlwIiwgZCkKKyAgICBmb3IgZiBpbiAoZC5nZXRWYXIoJ1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZiwgZCkKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgbXVsdGlwcm92ID0gZC5nZXRWYXIoIk1VTFRJX1BST1ZJREVSX1dISVRFTElTVCIsIFRydWUpLnNwbGl0KCkKKyAgICBwcm92ZGlyID0gZC5leHBhbmQoIiR7U1lTUk9PVF9ERVNURElSfSR7YmFzZV9wcmVmaXh9L3N5c3Jvb3QtcHJvdmlkZXJzLyIpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKHByb3ZkaXIpCisgICAgZm9yIHAgaW4gZC5nZXRWYXIoIlBST1ZJREVTIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgaWYgcCBpbiBtdWx0aXByb3Y6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBwID0gcC5yZXBsYWNlKCIvIiwgIl8iKQorICAgICAgICB3aXRoIG9wZW4ocHJvdmRpciArIHAsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUocG4pCit9CisKK2RvX3BvcHVsYXRlX3N5c3Jvb3RbdmFyZGVwc10gKz0gIiR7U1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTfSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3RbdmFyZGVwc2V4Y2x1ZGVdICs9ICJNVUxUSV9QUk9WSURFUl9XSElURUxJU1QiCisKK1NTVEFURVRBU0tTICs9ICJkb19wb3B1bGF0ZV9zeXNyb290IgorZG9fcG9wdWxhdGVfc3lzcm9vdFtjbGVhbmRpcnNdID0gIiR7U1lTUk9PVF9ERVNURElSfSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtTWVNST09UX0RFU1RESVJ9IgorZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtTVEFHSU5HX0RJUl9IT1NUfS8iCitkb19wb3B1bGF0ZV9zeXNyb290W3N0YW1wLWV4dHJhLWluZm9dID0gIiR7TUFDSElORX0iCisKK3B5dGhvbiBkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lICgpIHsKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZQorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N5c2xpbnV4LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zeXNsaW51eC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZWY5YTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zeXNsaW51eC5iYmNsYXNzCkBAIC0wLDAgKzEsMTkwIEBACisjIHN5c2xpbnV4LmJiY2xhc3MKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKKworIyBQcm92aWRlIHN5c2xpbnV4IHNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgYnVpbGRpbmcgYm9vdGFibGUgaW1hZ2VzLgorCisjIEV4dGVybmFsIHZhcmlhYmxlcworIyAke0lOSVRSRH0gLSBpbmRpY2F0ZXMgYSBsaXN0IG9mIGZpbGVzeXN0ZW0gaW1hZ2VzIHRvIGNvbmNhdGVuYXRlIGFuZCB1c2UgYXMgYW4gaW5pdHJkIChvcHRpb25hbCkKKyMgJHtST09URlN9IC0gaW5kaWNhdGVzIGEgZmlsZXN5c3RlbSBpbWFnZSB0byBpbmNsdWRlIGFzIHRoZSByb290IGZpbGVzeXN0ZW0gKG9wdGlvbmFsKQorIyAke0FVVE9fU1lTTElOVVhNRU5VfSAtIHNldCB0aGlzIHRvIDEgdG8gZW5hYmxlIGNyZWF0aW5nIGFuIGF1dG9tYXRpYyBtZW51CisjICR7TEFCRUxTfSAtIGEgbGlzdCBvZiB0YXJnZXRzIGZvciB0aGUgYXV0b21hdGljIGNvbmZpZworIyAke0FQUEVORH0gLSBhbiBvdmVycmlkZSBsaXN0IG9mIGFwcGVuZCBzdHJpbmdzIGZvciBlYWNoIGxhYmVsCisjICR7U1lTTElOVVhfT1BUU30gLSBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gYWRkIHRvIHRoZSBzeXNsaW51eCBmaWxlICc7JyBkZWxpbWl0ZWQKKyMgJHtTWVNMSU5VWF9TUExBU0h9IC0gQSBiYWNrZ3JvdW5kIGZvciB0aGUgdmdhIGJvb3QgbWVudSBpZiB1c2luZyB0aGUgYm9vdCBtZW51CisjICR7U1lTTElOVVhfREVGQVVMVF9DT05TT0xFfSAtIHNldCB0byAiY29uc29sZT10dHlYIiB0byBjaGFuZ2Uga2VybmVsIGJvb3QgZGVmYXVsdCBjb25zb2xlCisjICR7U1lTTElOVVhfU0VSSUFMfSAtIFNldCBhbiBhbHRlcm5hdGUgc2VyaWFsIHBvcnQgb3IgdHVybiBvZmYgc2VyaWFsIHdpdGggZW1wdHkgc3RyaW5nCisjICR7U1lTTElOVVhfU0VSSUFMX1RUWX0gLSBTZXQgYWx0ZXJuYXRlIGNvbnNvbGU9dHR5Li4uIGtlcm5lbCBib290IGFyZ3VtZW50CisjICR7U1lTTElOVVhfS0VSTkVMX0FSR1N9IC0gQWRkIGFkZGl0aW9uYWwga2VybmVsIGFyZ3VtZW50cworCitkb19ib290aW1nW2RlcGVuZHNdICs9ICIke01MUFJFRklYfXN5c2xpbnV4OmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzbGludXgtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK1NZU0xJTlVYQ0ZHICA9ICIke1N9L3N5c2xpbnV4LmNmZyIKKworSVNPTElOVVhESVIgPSAiL2lzb2xpbnV4IgorU1lTTElOVVhESVIgPSAiLyIKKyMgVGhlIGtlcm5lbCBoYXMgYW4gaW50ZXJuYWwgZGVmYXVsdCBjb25zb2xlLCB3aGljaCB5b3UgY2FuIG92ZXJyaWRlIHdpdGgKKyMgYSBjb25zb2xlPS4uLnNvbWVfdHR5Li4uCitTWVNMSU5VWF9ERUZBVUxUX0NPTlNPTEUgPz0gIiIKK1NZU0xJTlVYX1NFUklBTCA/PSAiMCAxMTUyMDAiCitTWVNMSU5VWF9TRVJJQUxfVFRZID89ICJjb25zb2xlPXR0eVMwLDExNTIwMCIKK0lTT19CT09USU1HID0gImlzb2xpbnV4L2lzb2xpbnV4LmJpbiIKK0lTT19CT09UQ0FUID0gImlzb2xpbnV4L2Jvb3QuY2F0IgorTUtJU09GU19PUFRJT05TID0gIi1uby1lbXVsLWJvb3QgLWJvb3QtbG9hZC1zaXplIDQgLWJvb3QtaW5mby10YWJsZSIKK0FQUEVORF9wcmVwZW5kID0gIiAke1NZU0xJTlVYX1JPT1R9ICIKKworIyBOZWVkIFVVSUQgdXRpbGl0eSBjb2RlLgoraW5oZXJpdCBmcy11dWlkCisKK3N5c2xpbnV4X3BvcHVsYXRlKCkgeworCURFU1Q9JDEKKwlCT09URElSPSQyCisJQ0ZHTkFNRT0kMworCisJaW5zdGFsbCAtZCAke0RFU1R9JHtCT09URElSfQorCisJIyBJbnN0YWxsIHRoZSBjb25maWcgZmlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtTWVNMSU5VWENGR30gJHtERVNUfSR7Qk9PVERJUn0vJHtDRkdOQU1FfQorCWlmIFsgIiR7QVVUT19TWVNMSU5VWE1FTlV9IiA9IDEgXSA7IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC92ZXNhbWVudS5jMzIgJHtERVNUfSR7Qk9PVERJUn0vdmVzYW1lbnUuYzMyCisJCWluc3RhbGwgLW0gMDQ0NCAke1NUQUdJTkdfREFUQURJUn0vc3lzbGludXgvbGliY29tMzIuYzMyICR7REVTVH0ke0JPT1RESVJ9L2xpYmNvbTMyLmMzMgorCQlpbnN0YWxsIC1tIDA0NDQgJHtTVEFHSU5HX0RBVEFESVJ9L3N5c2xpbnV4L2xpYnV0aWwuYzMyICR7REVTVH0ke0JPT1RESVJ9L2xpYnV0aWwuYzMyCisJCWlmIFsgIiR7U1lTTElOVVhfU1BMQVNIfSIgIT0gIiIgXSA7IHRoZW4KKwkJCWluc3RhbGwgLW0gMDY0NCAke1NZU0xJTlVYX1NQTEFTSH0gJHtERVNUfSR7Qk9PVERJUn0vc3BsYXNoLmxzcworCQlmaQorCWZpCit9CisKK3N5c2xpbnV4X2lzb19wb3B1bGF0ZSgpIHsKKwlpc29fZGlyPSQxCisJc3lzbGludXhfcG9wdWxhdGUgJGlzb19kaXIgJHtJU09MSU5VWERJUn0gaXNvbGludXguY2ZnCisJaW5zdGFsbCAtbSAwNjQ0ICR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC9pc29saW51eC5iaW4gJGlzb19kaXIke0lTT0xJTlVYRElSfQorCWluc3RhbGwgLW0gMDY0NCAke1NUQUdJTkdfREFUQURJUn0vc3lzbGludXgvbGRsaW51eC5jMzIgJGlzb19kaXIke0lTT0xJTlVYRElSfQorfQorCitzeXNsaW51eF9oZGRpbWdfcG9wdWxhdGUoKSB7CisJaGRkX2Rpcj0kMQorCXN5c2xpbnV4X3BvcHVsYXRlICRoZGRfZGlyICR7U1lTTElOVVhESVJ9IHN5c2xpbnV4LmNmZworCWluc3RhbGwgLW0gMDQ0NCAke1NUQUdJTkdfREFUQURJUn0vc3lzbGludXgvbGRsaW51eC5zeXMgJGhkZF9kaXIke1NZU0xJTlVYRElSfS9sZGxpbnV4LnN5cworfQorCitzeXNsaW51eF9oZGRpbWdfaW5zdGFsbCgpIHsKKwlzeXNsaW51eCAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uaGRkaW1nCit9CisKK3N5c2xpbnV4X2hkZGRpcmVjdF9pbnN0YWxsKCkgeworCURFU1Q9JDEKKwlzeXNsaW51eCAkREVTVAorfQorCitweXRob24gYnVpbGRfc3lzbGludXhfY2ZnICgpIHsKKyAgICBpbXBvcnQgY29weQorICAgIGltcG9ydCBzeXMKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgaWYgbm90IHdvcmtkaXI6CisgICAgICAgIGJiLmVycm9yKCJXT1JLRElSIG5vdCBkZWZpbmVkLCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorICAgICAgICAKKyAgICBsYWJlbHMgPSBkLmdldFZhcignTEFCRUxTJywgVHJ1ZSkKKyAgICBpZiBub3QgbGFiZWxzOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTEFCRUxTIG5vdCBkZWZpbmVkLCBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisgICAgCisgICAgaWYgbGFiZWxzID09IFtdOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gbGFiZWxzLCBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBjZmlsZSA9IGQuZ2V0VmFyKCdTWVNMSU5VWENGRycsIFRydWUpCisgICAgaWYgbm90IGNmaWxlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCdVbmFibGUgdG8gcmVhZCBTWVNMSU5VWENGRycpCisKKyAgICB0cnk6CisgICAgICAgIGNmZ2ZpbGUgPSBmaWxlKGNmaWxlLCAndycpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLmZ1bmNGYWlsZWQoJ1VuYWJsZSB0byBvcGVuICVzJyAlIChjZmlsZSkpCisKKyAgICBjZmdmaWxlLndyaXRlKCcjIEF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSBPRVxuJykKKworICAgIG9wdHMgPSBkLmdldFZhcignU1lTTElOVVhfT1BUUycsIFRydWUpCisKKyAgICBpZiBvcHRzOgorICAgICAgICBmb3Igb3B0IGluIG9wdHMuc3BsaXQoJzsnKToKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJyVzXG4nICUgb3B0KQorCisgICAgY2ZnZmlsZS53cml0ZSgnQUxMT1dPUFRJT05TIDFcbicpOworICAgIHN5c2xpbnV4X2RlZmF1bHRfY29uc29sZSA9IGQuZ2V0VmFyKCdTWVNMSU5VWF9ERUZBVUxUX0NPTlNPTEUnLCBUcnVlKQorICAgIHN5c2xpbnV4X3NlcmlhbF90dHkgPSBkLmdldFZhcignU1lTTElOVVhfU0VSSUFMX1RUWScsIFRydWUpCisgICAgc3lzbGludXhfc2VyaWFsID0gZC5nZXRWYXIoJ1NZU0xJTlVYX1NFUklBTCcsIFRydWUpCisgICAgaWYgc3lzbGludXhfc2VyaWFsOgorICAgICAgICBjZmdmaWxlLndyaXRlKCdTRVJJQUwgJXNcbicgJSBzeXNsaW51eF9zZXJpYWwpCisKKyAgICBtZW51ID0gZC5nZXRWYXIoJ0FVVE9fU1lTTElOVVhNRU5VJywgVHJ1ZSkKKworICAgIGlmIG1lbnUgYW5kIHN5c2xpbnV4X3NlcmlhbDoKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgnREVGQVVMVCBHcmFwaGljcyBjb25zb2xlICVzXG4nICUgKGxhYmVscy5zcGxpdCgpWzBdKSkKKyAgICBlbHNlOgorICAgICAgICBjZmdmaWxlLndyaXRlKCdERUZBVUxUICVzXG4nICUgKGxhYmVscy5zcGxpdCgpWzBdKSkKKworICAgIHRpbWVvdXQgPSBkLmdldFZhcignU1lTTElOVVhfVElNRU9VVCcsIFRydWUpCisKKyAgICBpZiB0aW1lb3V0OgorICAgICAgICBjZmdmaWxlLndyaXRlKCdUSU1FT1VUICVzXG4nICUgdGltZW91dCkKKyAgICBlbHNlOgorICAgICAgICBjZmdmaWxlLndyaXRlKCdUSU1FT1VUIDUwXG4nKQorCisgICAgcHJvbXB0ID0gZC5nZXRWYXIoJ1NZU0xJTlVYX1BST01QVCcsIFRydWUpCisgICAgaWYgcHJvbXB0OgorICAgICAgICBjZmdmaWxlLndyaXRlKCdQUk9NUFQgJXNcbicgJSBwcm9tcHQpCisgICAgZWxzZToKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgnUFJPTVBUIDFcbicpCisKKyAgICBpZiBtZW51OgorICAgICAgICBjZmdmaWxlLndyaXRlKCd1aSB2ZXNhbWVudS5jMzJcbicpCisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ21lbnUgdGl0bGUgU2VsZWN0IGtlcm5lbCBvcHRpb25zIGFuZCBib290IGtlcm5lbFxuJykKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgnbWVudSB0YWJtc2cgUHJlc3MgW1RhYl0gdG8gZWRpdCwgW1JldHVybl0gdG8gc2VsZWN0XG4nKQorICAgICAgICBzcGxhc2ggPSBkLmdldFZhcignU1lTTElOVVhfU1BMQVNIJywgVHJ1ZSkKKyAgICAgICAgaWYgc3BsYXNoOgorICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnbWVudSBiYWNrZ3JvdW5kIHNwbGFzaC5sc3NcbicpCisgICAgCisgICAgZm9yIGxhYmVsIGluIGxhYmVscy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKworICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKQorICAgICAgICBpZiBub3Qgb3ZlcnJpZGVzOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnT1ZFUlJJREVTIG5vdCBkZWZpbmVkJykKKworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBsYWJlbCArICc6JyArIG92ZXJyaWRlcykKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgCisgICAgICAgIGJ0eXBlcyA9IFsgWyAiIiwgc3lzbGludXhfZGVmYXVsdF9jb25zb2xlIF0gXQorICAgICAgICBpZiBtZW51IGFuZCBzeXNsaW51eF9zZXJpYWw6CisgICAgICAgICAgICBidHlwZXMgPSBbIFsgIkdyYXBoaWNzIGNvbnNvbGUgIiwgc3lzbGludXhfZGVmYXVsdF9jb25zb2xlICBdLAorICAgICAgICAgICAgICAgIFsgIlNlcmlhbCBjb25zb2xlICIsIHN5c2xpbnV4X3NlcmlhbF90dHkgXSBdCisKKyAgICAgICAgZm9yIGJ0eXBlIGluIGJ0eXBlczoKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ0xBQkVMICVzJXNcbktFUk5FTCAvdm1saW51elxuJyAlIChidHlwZVswXSwgbGFiZWwpKQorCisgICAgICAgICAgICBleGFyZ3MgPSBkLmdldFZhcignU1lTTElOVVhfS0VSTkVMX0FSR1MnLCBUcnVlKQorICAgICAgICAgICAgaWYgZXhhcmdzOgorICAgICAgICAgICAgICAgIGJ0eXBlWzFdICs9ICIgIiArIGV4YXJncworCisgICAgICAgICAgICBhcHBlbmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdBUFBFTkQnLCBUcnVlKQorICAgICAgICAgICAgaW5pdHJkID0gbG9jYWxkYXRhLmdldFZhcignSU5JVFJEJywgVHJ1ZSkKKworICAgICAgICAgICAgaWYgYXBwZW5kOgorICAgICAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ0FQUEVORCAnKQorCisgICAgICAgICAgICAgICAgaWYgaW5pdHJkOgorICAgICAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCdpbml0cmQ9L2luaXRyZCAnKQorCisgICAgICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnTEFCRUw9JXMgJyUgKGxhYmVsKSkKKyAgICAgICAgICAgICAgICBhcHBlbmQgPSByZXBsYWNlX3Jvb3Rmc191dWlkKGQsIGFwcGVuZCkKKyAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCclcyAlc1xuJyAlIChhcHBlbmQsIGJ0eXBlWzFdKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnQVBQRU5EICVzXG4nICUgYnR5cGVbMV0pCisKKyAgICBjZmdmaWxlLmNsb3NlKCkKK30KK2J1aWxkX3N5c2xpbnV4X2NmZ1t2YXJkZXBzXSArPSAiQVBQRU5EIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3lzdGVtZC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3lzdGVtZC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZTcyYzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zeXN0ZW1kLmJiY2xhc3MKQEAgLTAsMCArMSwxOTMgQEAKKyMgVGhlIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBzaG91bGQgaGF2ZSBzeXN0ZW1kIHBhY2thZ2luZyBzY3JpcHRzIGFkZGVkLiAgRm9yCisjIGVhY2ggZW50cnksIG9wdGlvbmFsbHkgaGF2ZSBhIFNZU1RFTURfU0VSVklDRV9bcGFja2FnZV0gdGhhdCBsaXN0cyB0aGUgc2VydmljZQorIyBmaWxlcyBpbiB0aGlzIHBhY2thZ2UuICBJZiB0aGlzIHZhcmlhYmxlIGlzbid0IHNldCwgW3BhY2thZ2VdLnNlcnZpY2UgaXMgdXNlZC4KK1NZU1RFTURfUEFDS0FHRVMgPz0gIiR7UE59IgorU1lTVEVNRF9QQUNLQUdFU19jbGFzcy1uYXRpdmUgPz0gIiIKK1NZU1RFTURfUEFDS0FHRVNfY2xhc3MtbmF0aXZlc2RrID89ICIiCisKKyMgV2hldGhlciB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgc2VydmljZXMgb24gaW5zdGFsbGF0aW9uLgorU1lTVEVNRF9BVVRPX0VOQUJMRSA/Pz0gImVuYWJsZSIKKworIyBUaGlzIGNsYXNzIHdpbGwgYmUgaW5jbHVkZWQgaW4gYW55IHJlY2lwZSB0aGF0IHN1cHBvcnRzIHN5c3RlbWQgaW5pdCBzY3JpcHRzLAorIyBldmVuIGlmIHN5c3RlbWQgaXMgbm90IGluIERJU1RST19GRUFUVVJFUy4gIEFzIHN1Y2ggZG9uJ3QgbWFrZSBhbnkgY2hhbmdlcworIyBkaXJlY3RseSBidXQgY2hlY2sgdGhlIERJU1RST19GRUFUVVJFUyBmaXJzdC4KK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICAjIElmIHRoZSBkaXN0cm8gZmVhdHVyZXMgaGF2ZSBzeXN0ZW1kIGJ1dCBub3Qgc3lzdmluaXQsIGluaGliaXQgdXBkYXRlLXJjZAorICAgICMgZnJvbSBkb2luZyBhbnkgd29yayBzbyB0aGF0IHB1cmUtc3lzdGVtZCBpbWFnZXMgZG9uJ3QgaGF2ZSByZWR1bmRhbnQgaW5pdAorICAgICMgZmlsZXMuCisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBkLmFwcGVuZFZhcigiREVQRU5EUyIsICIgc3lzdGVtZC1zeXN0ZW1jdGwtbmF0aXZlIikKKyAgICAgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9VUERBVEVSQ0RfQkJDTEFTUyIsICIxIikKK30KKworc3lzdGVtZF9wb3N0aW5zdCgpIHsKK09QVFM9IiIKKworaWYgWyAtbiAiJEQiIF07IHRoZW4KKyAgICBPUFRTPSItLXJvb3Q9JEQiCitmaQorCitpZiB0eXBlIHN5c3RlbWN0bCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJc3lzdGVtY3RsICRPUFRTICR7U1lTVEVNRF9BVVRPX0VOQUJMRX0gJHtTWVNURU1EX1NFUlZJQ0V9CisKKwlpZiBbIC16ICIkRCIgLWEgIiR7U1lTVEVNRF9BVVRPX0VOQUJMRX0iID0gImVuYWJsZSIgXTsgdGhlbgorCQlzeXN0ZW1jdGwgcmVzdGFydCAke1NZU1RFTURfU0VSVklDRX0KKwlmaQorZmkKK30KKworc3lzdGVtZF9wcmVybSgpIHsKK09QVFM9IiIKKworaWYgWyAtbiAiJEQiIF07IHRoZW4KKyAgICBPUFRTPSItLXJvb3Q9JEQiCitmaQorCitpZiB0eXBlIHN5c3RlbWN0bCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJaWYgWyAteiAiJEQiIF07IHRoZW4KKwkJc3lzdGVtY3RsIHN0b3AgJHtTWVNURU1EX1NFUlZJQ0V9CisJZmkKKworCXN5c3RlbWN0bCAkT1BUUyBkaXNhYmxlICR7U1lTVEVNRF9TRVJWSUNFfQorZmkKK30KKworCitzeXN0ZW1kX3BvcHVsYXRlX3BhY2thZ2VzW3ZhcmRlcHNdICs9ICJzeXN0ZW1kX3ByZXJtIHN5c3RlbWRfcG9zdGluc3QiCitzeXN0ZW1kX3BvcHVsYXRlX3BhY2thZ2VzW3ZhcmRlcHNleGNsdWRlXSArPSAiT1ZFUlJJREVTIgorCisKK3B5dGhvbiBzeXN0ZW1kX3BvcHVsYXRlX3BhY2thZ2VzKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIGdldF9wYWNrYWdlX3ZhcihkLCB2YXIsIHBrZyk6CisgICAgICAgIHZhbCA9IChkLmdldFZhcignJXNfJXMnICUgKHZhciwgcGtnKSwgVHJ1ZSkgb3IgIiIpLnN0cmlwKCkKKyAgICAgICAgaWYgdmFsID09ICIiOgorICAgICAgICAgICAgdmFsID0gKGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIpLnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIHZhbAorCisgICAgIyBDaGVjayBpZiBzeXN0ZW1kLXBhY2thZ2VzIGFscmVhZHkgaW5jbHVkZWQgaW4gUEFDS0FHRVMKKyAgICBkZWYgc3lzdGVtZF9jaGVja19wYWNrYWdlKHBrZ19zeXN0ZW1kKToKKyAgICAgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgICAgICBpZiBub3QgcGtnX3N5c3RlbWQgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgICAgIGJiLmVycm9yKCclcyBkb2VzIG5vdCBhcHBlYXIgaW4gcGFja2FnZSBsaXN0LCBwbGVhc2UgYWRkIGl0JyAlIHBrZ19zeXN0ZW1kKQorCisKKyAgICBkZWYgc3lzdGVtZF9nZW5lcmF0ZV9wYWNrYWdlX3NjcmlwdHMocGtnKToKKyAgICAgICAgYmIuZGVidWcoMSwgJ2FkZGluZyBzeXN0ZW1kIGNhbGxzIHRvIHBvc3RpbnN0L3Bvc3RybSBmb3IgJXMnICUgcGtnKQorCisgICAgICAgICMgQWRkIHBrZyB0byB0aGUgb3ZlcnJpZGVzIHNvIHRoYXQgaXQgZmluZHMgdGhlIFNZU1RFTURfU0VSVklDRV9wa2cKKyAgICAgICAgIyB2YXJpYWJsZS4KKyAgICAgICAgbG9jYWxkYXRhID0gZC5jcmVhdGVDb3B5KCkKKyAgICAgICAgbG9jYWxkYXRhLnByZXBlbmRWYXIoIk9WRVJSSURFUyIsIHBrZyArICI6IikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBvc3RpbnN0OgorICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHBvc3RpbnN0ICs9IGxvY2FsZGF0YS5nZXRWYXIoJ3N5c3RlbWRfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgcHJlcm0gPSBkLmdldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHByZXJtOgorICAgICAgICAgICAgcHJlcm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHByZXJtICs9IGxvY2FsZGF0YS5nZXRWYXIoJ3N5c3RlbWRfcHJlcm0nLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgcHJlcm0pCisKKworICAgICMgQWRkIGZpbGVzIHRvIEZJTEVTXyotc3lzdGVtZCBpZiBleGlzdGVudCBhbmQgbm90IGFscmVhZHkgZG9uZQorICAgIGRlZiBzeXN0ZW1kX2FwcGVuZF9maWxlKHBrZ19zeXN0ZW1kLCBmaWxlX2FwcGVuZCk6CisgICAgICAgIGFwcGVuZGVkID0gRmFsc2UKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob2UucGF0aC5qb2luKGQuZ2V0VmFyKCJEIiwgVHJ1ZSksIGZpbGVfYXBwZW5kKSk6CisgICAgICAgICAgICB2YXJfbmFtZSA9ICJGSUxFU18iICsgcGtnX3N5c3RlbWQKKyAgICAgICAgICAgIGZpbGVzID0gZC5nZXRWYXIodmFyX25hbWUsIEZhbHNlKSBvciAiIgorICAgICAgICAgICAgaWYgZmlsZV9hcHBlbmQgbm90IGluIGZpbGVzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIodmFyX25hbWUsICIgIiArIGZpbGVfYXBwZW5kKQorICAgICAgICAgICAgICAgIGFwcGVuZGVkID0gVHJ1ZQorICAgICAgICByZXR1cm4gYXBwZW5kZWQKKworICAgICMgQWRkIHN5c3RlbWQgZmlsZXMgdG8gRklMRVNfKi1zeXN0ZW1kLCBwYXJzZSBmb3IgQWxzbz0gYW5kIGZvbGxvdyByZWN1cnNpdmUKKyAgICBkZWYgc3lzdGVtZF9hZGRfZmlsZXNfYW5kX3BhcnNlKHBrZ19zeXN0ZW1kLCBwYXRoLCBzZXJ2aWNlLCBrZXlzKToKKyAgICAgICAgIyBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24KKyAgICAgICAgaWYgc3lzdGVtZF9hcHBlbmRfZmlsZShwa2dfc3lzdGVtZCwgb2UucGF0aC5qb2luKHBhdGgsIHNlcnZpY2UpKToKKyAgICAgICAgICAgIGZ1bGxwYXRoID0gb2UucGF0aC5qb2luKGQuZ2V0VmFyKCJEIiwgVHJ1ZSksIHBhdGgsIHNlcnZpY2UpCisgICAgICAgICAgICBpZiBzZXJ2aWNlLmZpbmQoJy5zZXJ2aWNlJykgIT0gLTE6CisgICAgICAgICAgICAgICAgIyBmb3IgKi5zZXJ2aWNlIGFkZCAqQC5zZXJ2aWNlCisgICAgICAgICAgICAgICAgc2VydmljZV9iYXNlID0gc2VydmljZS5yZXBsYWNlKCcuc2VydmljZScsICcnKQorICAgICAgICAgICAgICAgIHN5c3RlbWRfYWRkX2ZpbGVzX2FuZF9wYXJzZShwa2dfc3lzdGVtZCwgcGF0aCwgc2VydmljZV9iYXNlICsgJ0Auc2VydmljZScsIGtleXMpCisgICAgICAgICAgICBpZiBzZXJ2aWNlLmZpbmQoJy5zb2NrZXQnKSAhPSAtMToKKyAgICAgICAgICAgICAgICAjIGZvciAqLnNvY2tldCBhZGQgKi5zZXJ2aWNlIGFuZCAqQC5zZXJ2aWNlCisgICAgICAgICAgICAgICAgc2VydmljZV9iYXNlID0gc2VydmljZS5yZXBsYWNlKCcuc29ja2V0JywgJycpCisgICAgICAgICAgICAgICAgc3lzdGVtZF9hZGRfZmlsZXNfYW5kX3BhcnNlKHBrZ19zeXN0ZW1kLCBwYXRoLCBzZXJ2aWNlX2Jhc2UgKyAnLnNlcnZpY2UnLCBrZXlzKQorICAgICAgICAgICAgICAgIHN5c3RlbWRfYWRkX2ZpbGVzX2FuZF9wYXJzZShwa2dfc3lzdGVtZCwgcGF0aCwgc2VydmljZV9iYXNlICsgJ0Auc2VydmljZScsIGtleXMpCisgICAgICAgICAgICBmb3Iga2V5IGluIGtleXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAjIHJlY3Vyc2UgYWxsIGRlcGVuZGVuY2llcyBmb3VuZCBpbiBrZXlzICgnQWxzbyc7J0NvbmZsaWN0cyc7Li4pIGFuZCBhZGQgdG8gZmlsZXMKKyAgICAgICAgICAgICAgICBjbWQgPSAiZ3JlcCAlcyAlcyB8IHNlZCAncywlcz0sLGcnIHwgdHIgJywnICdcXG4nIiAlIChrZXksIGZ1bGxwYXRoLCBrZXkpCisgICAgICAgICAgICAgICAgcGlwZSA9IG9zLnBvcGVuKGNtZCwgJ3InKQorICAgICAgICAgICAgICAgIGxpbmUgPSBwaXBlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICB3aGlsZSBsaW5lOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCdcbicsICcnKQorICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kX2FkZF9maWxlc19hbmRfcGFyc2UocGtnX3N5c3RlbWQsIHBhdGgsIGxpbmUsIGtleXMpCisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBwaXBlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBwaXBlLmNsb3NlKCkKKworICAgICMgQ2hlY2sgc2VydmljZS1maWxlcyBhbmQgY2FsbCBzeXN0ZW1kX2FkZF9maWxlc19hbmRfcGFyc2UgZm9yIGVhY2ggZW50cnkKKyAgICBkZWYgc3lzdGVtZF9jaGVja19zZXJ2aWNlcygpOgorICAgICAgICBzZWFyY2hwYXRocyA9IFtvZS5wYXRoLmpvaW4oZC5nZXRWYXIoInN5c2NvbmZkaXIiLCBUcnVlKSwgInN5c3RlbWQiLCAic3lzdGVtIiksXQorICAgICAgICBzZWFyY2hwYXRocy5hcHBlbmQoZC5nZXRWYXIoInN5c3RlbWRfc3lzdGVtX3VuaXRkaXIiLCBUcnVlKSkKKyAgICAgICAgc3lzdGVtZF9wYWNrYWdlcyA9IGQuZ2V0VmFyKCdTWVNURU1EX1BBQ0tBR0VTJywgVHJ1ZSkKKworICAgICAgICBrZXlzID0gJ0Fsc28nCisgICAgICAgICMgc2NhbiBmb3IgYWxsIGluIFNZU1RFTURfU0VSVklDRVtdCisgICAgICAgIGZvciBwa2dfc3lzdGVtZCBpbiBzeXN0ZW1kX3BhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICBmb3Igc2VydmljZSBpbiBnZXRfcGFja2FnZV92YXIoZCwgJ1NZU1RFTURfU0VSVklDRScsIHBrZ19zeXN0ZW1kKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHBhdGhfZm91bmQgPSAnJworICAgICAgICAgICAgICAgIGZvciBwYXRoIGluIHNlYXJjaHBhdGhzOgorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvZS5wYXRoLmpvaW4oZC5nZXRWYXIoIkQiLCBUcnVlKSwgcGF0aCwgc2VydmljZSkpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9mb3VuZCA9IHBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgcGF0aF9mb3VuZCAhPSAnJzoKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtZF9hZGRfZmlsZXNfYW5kX3BhcnNlKHBrZ19zeXN0ZW1kLCBwYXRoX2ZvdW5kLCBzZXJ2aWNlLCBrZXlzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIlNZU1RFTURfU0VSVklDRV8lcyB2YWx1ZSAlcyBkb2VzIG5vdCBleGlzdCIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAocGtnX3N5c3RlbWQsIHNlcnZpY2UpKQorCisgICAgIyBSdW4gYWxsIG1vZGlmaWNhdGlvbnMgb25jZSB3aGVuIGNyZWF0aW5nIHBhY2thZ2UKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhkLmdldFZhcigiRCIsIFRydWUpKToKKyAgICAgICAgZm9yIHBrZyBpbiBkLmdldFZhcignU1lTVEVNRF9QQUNLQUdFUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICBzeXN0ZW1kX2NoZWNrX3BhY2thZ2UocGtnKQorICAgICAgICAgICAgaWYgZC5nZXRWYXIoJ1NZU1RFTURfU0VSVklDRV8nICsgcGtnLCBUcnVlKToKKyAgICAgICAgICAgICAgICBzeXN0ZW1kX2dlbmVyYXRlX3BhY2thZ2Vfc2NyaXB0cyhwa2cpCisgICAgICAgIHN5c3RlbWRfY2hlY2tfc2VydmljZXMoKQorfQorCitQQUNLQUdFU1BMSVRGVU5DU19wcmVwZW5kID0gInN5c3RlbWRfcG9wdWxhdGVfcGFja2FnZXMgIgorCitweXRob24gcm1fc3lzdGVtZF91bml0ZGlyICgpeworICAgIGltcG9ydCBzaHV0aWwKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBzeXN0ZW1kX3VuaXRkaXIgPSBvZS5wYXRoLmpvaW4oZC5nZXRWYXIoIkQiLCBUcnVlKSwgZC5nZXRWYXIoJ3N5c3RlbWRfdW5pdGRpcicsIFRydWUpKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzeXN0ZW1kX3VuaXRkaXIpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzeXN0ZW1kX3VuaXRkaXIpCisgICAgICAgIHN5c3RlbWRfbGliZGlyID0gb3MucGF0aC5kaXJuYW1lKHN5c3RlbWRfdW5pdGRpcikKKyAgICAgICAgaWYgKG9zLnBhdGguZXhpc3RzKHN5c3RlbWRfbGliZGlyKSBhbmQgbm90IG9zLmxpc3RkaXIoc3lzdGVtZF9saWJkaXIpKToKKyAgICAgICAgICAgIG9zLnJtZGlyKHN5c3RlbWRfbGliZGlyKQorfQorZG9faW5zdGFsbFtwb3N0ZnVuY3NdICs9ICJybV9zeXN0ZW1kX3VuaXRkaXIgIgorCitweXRob24gcm1fc3lzdmluaXRfaW5pdGRkaXIgKCl7CisgICAgaW1wb3J0IHNodXRpbAorICAgIHN5c3ZfaW5pdGRkaXIgPSBvZS5wYXRoLmpvaW4oZC5nZXRWYXIoIkQiLCBUcnVlKSwgKGQuZ2V0VmFyKCdJTklUX0RfRElSJywgVHJ1ZSkgb3IgIi9ldGMvaW5pdC5kIikpCisKKyAgICBpZiBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCBUcnVlLCBGYWxzZSwgZCkgYW5kIFwKKyAgICAgICAgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCkgYW5kIFwKKyAgICAgICAgb3MucGF0aC5leGlzdHMoc3lzdl9pbml0ZGRpcik6CisgICAgICAgIHN5c3RlbWRfc3lzdGVtX3VuaXRkaXIgPSBvZS5wYXRoLmpvaW4oZC5nZXRWYXIoIkQiLCBUcnVlKSwgZC5nZXRWYXIoJ3N5c3RlbWRfc3lzdGVtX3VuaXRkaXInLCBUcnVlKSkKKworICAgICAgICAjIElmIHN5c3RlbWRfc3lzdGVtX3VuaXRkaXIgY29udGFpbnMgYW55dGhpbmcsIGRlbGV0ZSBzeXN2X2luaXRkZGlyCisgICAgICAgIGlmIChvcy5wYXRoLmV4aXN0cyhzeXN0ZW1kX3N5c3RlbV91bml0ZGlyKSBhbmQgb3MubGlzdGRpcihzeXN0ZW1kX3N5c3RlbV91bml0ZGlyKSk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHN5c3ZfaW5pdGRkaXIpCit9Citkb19pbnN0YWxsW3Bvc3RmdW5jc10gKz0gInJtX3N5c3Zpbml0X2luaXRkZGlyICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlcm1pbmFsLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXJtaW5hbC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NzdjNmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXJtaW5hbC5iYmNsYXNzCkBAIC0wLDAgKzEsOTQgQEAKK09FX1RFUk1JTkFMID89ICdhdXRvJworT0VfVEVSTUlOQUxbdHlwZV0gPSAnY2hvaWNlJworT0VfVEVSTUlOQUxbY2hvaWNlc10gPSAnYXV0byBub25lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7QCIgIi5qb2luKG8ubmFtZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbyBpbiBvZS50ZXJtaW5hbC5wcmlvcml0aXplZCgpKX0nCisKK09FX1RFUk1JTkFMX0VYUE9SVFMgKz0gJ0VYVFJBX09FTUFLRScKK09FX1RFUk1JTkFMX0VYUE9SVFNbdHlwZV0gPSAnbGlzdCcKKworWEFVVEhPUklUWSA/PSAiJHtIT01FfS8uWGF1dGhvcml0eSIKK1NIRUxMID89ICJiYXNoIgorCisKK2RlZiBlbWl0X3Rlcm1pbmFsX2Z1bmMoY29tbWFuZCwgZW52ZGF0YSwgZCk6CisgICAgY21kX2Z1bmMgPSAnZG9fdGVybWluYWwnCisKKyAgICBlbnZkYXRhLnNldFZhcihjbWRfZnVuYywgJ2V4ZWMgJyArIGNvbW1hbmQpCisgICAgZW52ZGF0YS5zZXRWYXJGbGFnKGNtZF9mdW5jLCAnZnVuYycsIDEpCisKKyAgICBydW5mbXQgPSBkLmdldFZhcignQkJfUlVORk1UJywgVHJ1ZSkgb3IgInJ1bi57ZnVuY30ue3BpZH0iCisgICAgcnVuZmlsZSA9IHJ1bmZtdC5mb3JtYXQoZnVuYz1jbWRfZnVuYywgdGFzaz1jbWRfZnVuYywgdGFza2Z1bmM9Y21kX2Z1bmMsIHBpZD1vcy5nZXRwaWQoKSkKKyAgICBydW5maWxlID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdUJywgVHJ1ZSksIHJ1bmZpbGUpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShydW5maWxlKSkKKworICAgIHdpdGggb3BlbihydW5maWxlLCAndycpIGFzIHNjcmlwdDoKKyAgICAgICAgc2NyaXB0LndyaXRlKCcjIS9iaW4vc2ggLWVcbicpCisgICAgICAgIGJiLmRhdGEuZW1pdF9mdW5jKGNtZF9mdW5jLCBzY3JpcHQsIGVudmRhdGEpCisgICAgICAgIHNjcmlwdC53cml0ZShjbWRfZnVuYykKKyAgICAgICAgc2NyaXB0LndyaXRlKCJcbiIpCisgICAgb3MuY2htb2QocnVuZmlsZSwgMDc1NSkKKworICAgIHJldHVybiBydW5maWxlCisKK2RlZiBvZV90ZXJtaW5hbChjb21tYW5kLCB0aXRsZSwgZCk6CisgICAgaW1wb3J0IG9lLmRhdGEKKyAgICBpbXBvcnQgb2UudGVybWluYWwKKworICAgIGVudmRhdGEgPSBiYi5kYXRhLmluaXQoKQorCisgICAgZm9yIHYgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgZW52ZGF0YS5zZXRWYXIodiwgb3MuZW52aXJvblt2XSkKKyAgICAgICAgZW52ZGF0YS5zZXRWYXJGbGFnKHYsICdleHBvcnQnLCAxKQorCisgICAgZm9yIGV4cG9ydCBpbiBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdPRV9URVJNSU5BTF9FWFBPUlRTJywgZCk6CisgICAgICAgIHZhbHVlID0gZC5nZXRWYXIoZXhwb3J0LCBUcnVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG9zLmVudmlyb25bZXhwb3J0XSA9IHN0cih2YWx1ZSkKKyAgICAgICAgICAgIGVudmRhdGEuc2V0VmFyKGV4cG9ydCwgc3RyKHZhbHVlKSkKKyAgICAgICAgICAgIGVudmRhdGEuc2V0VmFyRmxhZyhleHBvcnQsICdleHBvcnQnLCAxKQorICAgICAgICBpZiBleHBvcnQgPT0gIlBTRVVET19ESVNBQkxFRCI6CisgICAgICAgICAgICBpZiAiUFNFVURPX1VOTE9BRCIgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgICAgICBkZWwgb3MuZW52aXJvblsiUFNFVURPX1VOTE9BRCJdCisgICAgICAgICAgICBlbnZkYXRhLmRlbFZhcigiUFNFVURPX1VOTE9BRCIpCisKKyAgICAjIEFkZCBpbiBhbGwgdmFyaWFibGVzIGZyb20gdGhlIHVzZXIncyBvcmlnaW5hbCBlbnZpcm9ubWVudCB3aGljaAorICAgICMgaGF2ZW4ndCBzdWJzZXF1bnRseSBiZWVuIHNldC9jaGFuZ2VkCisgICAgb3JpZ2JiZW52ID0gZC5nZXRWYXIoIkJCX09SSUdFTlYiLCBGYWxzZSkgb3Ige30KKyAgICBmb3Iga2V5IGluIG9yaWdiYmVudjoKKyAgICAgICAgaWYga2V5IGluIGVudmRhdGE6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB2YWx1ZSA9IG9yaWdiYmVudi5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG9zLmVudmlyb25ba2V5XSA9IHN0cih2YWx1ZSkKKyAgICAgICAgICAgIGVudmRhdGEuc2V0VmFyKGtleSwgc3RyKHZhbHVlKSkKKyAgICAgICAgICAgIGVudmRhdGEuc2V0VmFyRmxhZyhrZXksICdleHBvcnQnLCAxKQorCisgICAgIyBBIGNvbXBsZXggUFMxIG1pZ2h0IG5lZWQgbW9yZSBlc2NhcGluZyBvZiBjaGFycy4KKyAgICAjIExldHMgbm90IGV4cG9ydCBQUzEgaW5zdGVhZC4KKyAgICBlbnZkYXRhLmRlbFZhcigiUFMxIikKKworICAgICMgUmVwbGFjZSBjb21tYW5kIHdpdGggYW4gZXhlY3V0YWJsZSB3cmFwcGVyIHNjcmlwdAorICAgIGNvbW1hbmQgPSBlbWl0X3Rlcm1pbmFsX2Z1bmMoY29tbWFuZCwgZW52ZGF0YSwgZCkKKworICAgIHRlcm1pbmFsID0gb2UuZGF0YS50eXBlZF92YWx1ZSgnT0VfVEVSTUlOQUwnLCBkKS5sb3dlcigpCisgICAgaWYgdGVybWluYWwgPT0gJ25vbmUnOgorICAgICAgICBiYi5mYXRhbCgnRGV2c2hlbGwgdXNhZ2UgZGlzYWJsZWQgd2l0aCBPRV9URVJNSU5BTCcpCisgICAgZWxpZiB0ZXJtaW5hbCAhPSAnYXV0byc6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9lLnRlcm1pbmFsLnNwYXduKHRlcm1pbmFsLCBjb21tYW5kLCB0aXRsZSwgTm9uZSwgZCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgb2UudGVybWluYWwuVW5zdXBwb3J0ZWRUZXJtaW5hbDoKKyAgICAgICAgICAgIGJiLndhcm4oJ1Vuc3VwcG9ydGVkIHRlcm1pbmFsICIlcyIsIGRlZmF1bHRpbmcgdG8gImF1dG8iJyAlCisgICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsKQorICAgICAgICBleGNlcHQgb2UudGVybWluYWwuRXhlY3V0aW9uRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgYmIuZmF0YWwoJ1VuYWJsZSB0byBzcGF3biB0ZXJtaW5hbCAlczogJXMnICUgKHRlcm1pbmFsLCBleGMpKQorCisgICAgdHJ5OgorICAgICAgICBvZS50ZXJtaW5hbC5zcGF3bl9wcmVmZXJyZWQoY29tbWFuZCwgdGl0bGUsIE5vbmUsIGQpCisgICAgZXhjZXB0IG9lLnRlcm1pbmFsLk5vU3VwcG9ydGVkVGVybWluYWxzOgorICAgICAgICBiYi5mYXRhbCgnTm8gdmFsaWQgdGVybWluYWwgZm91bmQsIHVuYWJsZSB0byBvcGVuIGRldnNoZWxsJykKKyAgICBleGNlcHQgb2UudGVybWluYWwuRXhlY3V0aW9uRXJyb3IgYXMgZXhjOgorICAgICAgICBiYi5mYXRhbCgnVW5hYmxlIHRvIHNwYXduIHRlcm1pbmFsICVzOiAlcycgJSAodGVybWluYWwsIGV4YykpCisKK29lX3Rlcm1pbmFsW3ZhcmRlcHNleGNsdWRlXSA9ICJCQl9PUklHRU5WIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLWF1dG8uYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlc3RpbWFnZS1hdXRvLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYwNTk5ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlc3RpbWFnZS1hdXRvLmJiY2xhc3MKQEAgLTAsMCArMSwyMyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKworIyBSdW4gdGVzdHMgYXV0b21hdGljYWxseSBvbiBhbiBpbWFnZSBhZnRlciB0aGUgaW1hZ2UgaXMgY29uc3RydWN0ZWQKKyMgKGFzIG9wcG9zZWQgdG8gdGVzdGltYWdlLmJiY2xhc3MgYWxvbmUgd2hlcmUgdGVzdHMgbXVzdCBiZSBjYWxsZWQKKyMgbWFudWFsbHkgdXNpbmcgYml0YmFrZSAtYyB0ZXN0aW1hZ2UgPGltYWdlPikuCisjCisjIE5PVEU6IHRvIHVzZSB0aGlzIGNsYXNzLCBzaW1wbHkgc2V0IFRFU1RfSU1BR0UgPSAiMSIgLSBubyBuZWVkIHRvCisjIGluaGVyaXQgaXQgc2luY2UgdGhhdCB3aWxsIGJlIGRvbmUgaW4gaW1hZ2UuYmJjbGFzcyB3aGVuIHRoaXMgdmFyaWFibGUKKyMgaGFzIGJlZW4gc2V0LgorIworIyBTZWUgdGVzdGltYWdlLmJiY2xhc3MgZm9yIHRoZSB0ZXN0IGltcGxlbWVudGF0aW9uLgorCitpbmhlcml0IHRlc3RpbWFnZQorCitweXRob24gZG9fdGVzdGltYWdlX2F1dG8oKSB7CisgICAgdGVzdGltYWdlX21haW4oZCkKK30KK2FkZHRhc2sgdGVzdGltYWdlX2F1dG8gYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX3Jvb3RmcworZG9fdGVzdGltYWdlX2F1dG9bZGVwZW5kc10gKz0gIiR7VEVTVElNQUdFREVQRU5EU30iCitkb190ZXN0aW1hZ2VfYXV0b1tsb2NrZmlsZXNdICs9ICIke1RFU1RJTUFHRUxPQ0t9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXN0aW1hZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTkxOGJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLmJiY2xhc3MKQEAgLTAsMCArMSw0MjIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisKKyMgdGVzdGltYWdlLmJiY2xhc3MgZW5hYmxlcyB0ZXN0aW5nIG9mIHFlbXUgaW1hZ2VzIHVzaW5nIHB5dGhvbiB1bml0dGVzdHMuCisjIE1vc3Qgb2YgdGhlIHRlc3RzIGFyZSBjb21tYW5kcyBydW4gb24gdGFyZ2V0IGltYWdlIG92ZXIgc3NoLgorIyBUbyB1c2UgaXQgYWRkIHRlc3RpbWFnZSB0byBnbG9iYWwgaW5oZXJpdCBhbmQgY2FsbCB5b3VyIHRhcmdldCBpbWFnZSB3aXRoIC1jIHRlc3RpbWFnZQorIyBZb3UgY2FuIHRyeSBpdCBvdXQgbGlrZSB0aGlzOgorIyAtIGZpcnN0IGJ1aWxkIGEgcWVtdSBjb3JlLWltYWdlLXNhdG8KKyMgLSBhZGQgSU5IRVJJVCArPSAidGVzdGltYWdlIiBpbiBsb2NhbC5jb25mCisjIC0gdGhlbiBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byAtYyB0ZXN0aW1hZ2UuIFRoYXQgd2lsbCBydW4gYSBzdGFuZGFyZCBzdWl0ZSBvZiB0ZXN0cy4KKworIyBZb3UgY2FuIHNldCAob3IgYXBwZW5kIHRvKSBURVNUX1NVSVRFUyBpbiBsb2NhbC5jb25mIHRvIHNlbGVjdCB0aGUgdGVzdHMKKyMgd2hpY2ggeW91IHdhbnQgdG8gcnVuIGZvciB5b3VyIHRhcmdldC4KKyMgVGhlIHRlc3QgbmFtZXMgYXJlIHRoZSBtb2R1bGUgbmFtZXMgaW4gbWV0YS9saWIvb2VxYS9ydW50aW1lLgorIyBFYWNoIG5hbWUgaW4gVEVTVF9TVUlURVMgcmVwcmVzZW50cyBhIHJlcXVpcmVkIHRlc3QgZm9yIHRoZSBpbWFnZS4gKG5vIHNraXBwaW5nIGFsbG93ZWQpCisjIEFwcGVuZGluZyAiYXV0byIgbWVhbnMgdGhhdCBpdCB3aWxsIHRyeSB0byBydW4gYWxsIHRlc3RzIHRoYXQgYXJlIHN1aXRhYmxlIGZvciB0aGUgaW1hZ2UgKGVhY2ggdGVzdCBkZWNpZGVzIHRoYXQgb24gaXQncyBvd24pLgorIyBOb3RlIHRoYXQgb3JkZXIgaW4gVEVTVF9TVUlURVMgaXMgcmVsZXZhbnQ6IHRlc3RzIGFyZSBydW4gaW4gYW4gb3JkZXIgc3VjaCB0aGF0CisjIHRlc3RzIG1lbnRpb25lZCBpbiBAc2tpcFVubGVzc1Bhc3NlZCBydW4gYmVmb3JlIHRoZSB0ZXN0cyB0aGF0IGRlcGVuZCBvbiB0aGVtLAorIyBidXQgd2l0aG91dCBzdWNoIGRlcGVuZGVuY2llcywgdGVzdHMgcnVuIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSBsaXN0ZWQKKyMgaW4gVEVTVF9TVUlURVMuCisjCisjIEEgbGF5ZXIgY2FuIGFkZCBpdHMgb3duIHRlc3RzIGluIGxpYi9vZXFhL3J1bnRpbWUsIHByb3ZpZGVkIGl0IGV4dGVuZHMgQkJQQVRIIGFzIG5vcm1hbCBpbiBpdHMgbGF5ZXIuY29uZi4KKworIyBURVNUX0xPR19ESVIgY29udGFpbnMgYSBjb21tYW5kIHNzaCBsb2cgYW5kIG1heSBjb250YWluIGluZnJvbWF0aW9uIGFib3V0IHdoYXQgY29tbWFuZCBpcyBydW5uaW5nLCBvdXRwdXQgYW5kIHJldHVybiBjb2RlcyBhbmQgZm9yIHFlbXUgYSBib290IGxvZyB0aWxsIGxvZ2luLgorIyBCb290aW5nIGlzIGhhbmRsZWQgYnkgdGhpcyBjbGFzcywgYW5kIGl0J3Mgbm90IGEgdGVzdCBpbiBpdHNlbGYuCisjIFRFU1RfUUVNVUJPT1RfVElNRU9VVCBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG1heGltdW0gdGltZSBpbiBzZWNvbmRzIHRoZSBsYXVuY2ggY29kZSB3aWxsIHdhaXQgZm9yIHRoZSBsb2dpbiBwcm9tcHQuCisKK1RFU1RfTE9HX0RJUiA/PSAiJHtXT1JLRElSfS90ZXN0aW1hZ2UiCisKK1RFU1RfRVhQT1JUX0RJUiA/PSAiJHtUTVBESVJ9L3Rlc3RpbWFnZS8ke1BOfSIKK1RFU1RfRVhQT1JUX09OTFkgPz0gIjAiCisKK1JQTVRFU1RTVUlURSA9ICIke0BiYi51dGlscy5jb250YWlucygnSU1BR0VfUEtHVFlQRScsICdycG0nLCAnc21hcnQgcnBtJywgJycsIGQpfSIKKworREVGQVVMVF9URVNUX1NVSVRFUyA9ICJwaW5nIGF1dG8iCitERUZBVUxUX1RFU1RfU1VJVEVTX3BuLWNvcmUtaW1hZ2UtbWluaW1hbCA9ICJwaW5nIgorREVGQVVMVF9URVNUX1NVSVRFU19wbi1jb3JlLWltYWdlLXNhdG8gPSAicGluZyBzc2ggZGYgY29ubm1hbiBzeXNsb2cgeG9yZyBzY3Agdm5jIGRhdGUgZG1lc2cgcGFyc2Vsb2dzICR7UlBNVEVTVFNVSVRFfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0lNQUdFX1BLR1RZUEUnLCAncnBtJywgJ3B5dGhvbicsICcnLCBkKX0iCitERUZBVUxUX1RFU1RfU1VJVEVTX3BuLWNvcmUtaW1hZ2Utc2F0by1zZGsgPSAicGluZyBzc2ggZGYgY29ubm1hbiBzeXNsb2cgeG9yZyBzY3Agdm5jIGRhdGUgcGVybCBsZGQgZ2NjIGtlcm5lbG1vZHVsZSBkbWVzZyBweXRob24gcGFyc2Vsb2dzICR7UlBNVEVTVFNVSVRFfSIKK0RFRkFVTFRfVEVTVF9TVUlURVNfcG4tY29yZS1pbWFnZS1sc2Itc2RrID0gInBpbmcgYnVpbGRjdnMgYnVpbGRpcHRhYmxlcyBidWlsZHN1ZG9rdSBjb25ubWFuIGRhdGUgZGYgZ2NjIGtlcm5lbG1vZHVsZSBsZGQgcGFtIHBhcnNlbG9ncyBwZXJsIHB5dGhvbiBzY3AgJHtSUE1URVNUU1VJVEV9IHNzaCBzeXNsb2cgbG9ncm90YXRlIgorREVGQVVMVF9URVNUX1NVSVRFU19wbi1tZXRhLXRvb2xjaGFpbiA9ICJhdXRvIgorCisjIGFhcmNoNjQgaGFzIG5vIGdyYXBoaWNzCitERUZBVUxUX1RFU1RfU1VJVEVTX3JlbW92ZV9hYXJjaDY0ID0gInhvcmcgdm5jIgorCisjcWVtdW1pcHMgaXMgdG9vIHNsb3cgZm9yIGJ1aWxkc3Vkb2t1CitERUZBVUxUX1RFU1RfU1VJVEVTX3JlbW92ZV9xZW11bWlwcyA9ICJidWlsZHN1ZG9rdSIKKworVEVTVF9TVUlURVMgPz0gIiR7REVGQVVMVF9URVNUX1NVSVRFU30iCisKK1RFU1RfUUVNVUJPT1RfVElNRU9VVCA/PSAiMTAwMCIKK1RFU1RfVEFSR0VUID89ICJxZW11IgorVEVTVF9UQVJHRVRfSVAgPz0gIiIKK1RFU1RfU0VSVkVSX0lQID89ICIiCisKK1RFU1RJTUFHRURFUEVORFMgPSAiIgorVEVTVElNQUdFREVQRU5EU19xZW11YWxsID0gInFlbXUtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgcWVtdS1oZWxwZXItbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK1RFU1RJTUFHRUxPQ0sgPSAiJHtUTVBESVJ9L3Rlc3RpbWFnZS5sb2NrIgorVEVTVElNQUdFTE9DS19xZW11YWxsID0gIiIKKworVEVTVElNQUdFX0RVTVBfRElSID89ICIvdG1wL29lLXNhdmVkLXRlc3RzLyIKKwordGVzdGltYWdlX2R1bXBfdGFyZ2V0ICgpIHsKKyAgICB0b3AgLWJuMQorICAgIHBzCisgICAgZnJlZQorICAgIGRmCisgICAgIyBUaGUgbmV4dCBjb21tYW5kIHdpbGwgZXhwb3J0IHRoZSBkZWZhdWx0IGdhdGV3YXkgSVAKKyAgICBleHBvcnQgREVGQVVMVF9HQVRFV0FZPSQoaXAgcm91dGUgfCBhd2sgJy9kZWZhdWx0LyB7IHByaW50ICQzfScpCisgICAgcGluZyAtYzMgJERFRkFVTFRfR0FURVdBWQorICAgIGRtZXNnCisgICAgbmV0c3RhdCAtYW4KKyAgICBpcCBhZGRyZXNzCisgICAgIyBOZXh0IGNvbW1hbmQgd2lsbCBkdW1wIGxvZ3MgZnJvbSAvdmFyL2xvZy8KKyAgICBmaW5kIC92YXIvbG9nLyAtdHlwZSBmIDI+L2Rldi9udWxsIC1leGVjIGVjaG8gIj09PT09PT09PT09PT09PT09PT09IiBcOyAtZXhlYyBlY2hvIHt9IFw7IC1leGVjIGVjaG8gIj09PT09PT09PT09PT09PT09PT09IiBcOyAtZXhlYyBjYXQge30gXDsgLWV4ZWMgZWNobyAiIiBcOworfQorCit0ZXN0aW1hZ2VfZHVtcF9ob3N0ICgpIHsKKyAgICB0b3AgLWJuMQorICAgIHBzIC1lZgorICAgIGZyZWUKKyAgICBkZgorICAgIG1lbXN0YXQKKyAgICBkbWVzZworICAgIG5ldHN0YXQgLWFuCit9CisKK3B5dGhvbiBkb190ZXN0aW1hZ2UoKSB7CisgICAgdGVzdGltYWdlX21haW4oZCkKK30KK2FkZHRhc2sgdGVzdGltYWdlCitkb190ZXN0aW1hZ2Vbbm9zdGFtcF0gPSAiMSIKK2RvX3Rlc3RpbWFnZVtkZXBlbmRzXSArPSAiJHtURVNUSU1BR0VERVBFTkRTfSIKK2RvX3Rlc3RpbWFnZVtsb2NrZmlsZXNdICs9ICIke1RFU1RJTUFHRUxPQ0t9IgorCitweXRob24gZG9fdGVzdHNkaygpIHsKKyAgICB0ZXN0c2RrX21haW4oZCkKK30KK2FkZHRhc2sgdGVzdHNkaworZG9fdGVzdHNka1tub3N0YW1wXSA9ICIxIgorZG9fdGVzdHNka1tkZXBlbmRzXSArPSAiJHtURVNUSU1BR0VERVBFTkRTfSIKK2RvX3Rlc3RzZGtbbG9ja2ZpbGVzXSArPSAiJHtURVNUSU1BR0VMT0NLfSIKKworIyBnZXQgdGVzdGNhc2UgbGlzdCBmcm9tIHNwZWNpZmllZCBmaWxlCisjIGlmIHBhdGggaXMgYSByZWxhdGl2ZSBwYXRoLCB0aGVuIHJlbGF0aXZlIHRvIGJ1aWxkL2NvbmYvCitkZWYgcmVhZF90ZXN0bGlzdChkLCBmcGF0aCk6CisgICAgaWYgbm90IG9zLnBhdGguaXNhYnMoZnBhdGgpOgorICAgICAgICBidWlsZGRpciA9IGQuZ2V0VmFyKCJUT1BESVIiLCBUcnVlKQorICAgICAgICBmcGF0aCA9IG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYiLCBmcGF0aCkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZnBhdGgpOgorICAgICAgICBiYi5mYXRhbCgiTm8gc3VjaCBtYW5pZmVzdCBmaWxlOiAiLCBmcGF0aCkKKyAgICB0Y3MgPSBbXQorICAgIGZvciBsaW5lIGluIG9wZW4oZnBhdGgpLnJlYWRsaW5lcygpOgorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmIGxpbmUgYW5kIG5vdCBsaW5lLnN0YXJ0c3dpdGgoIiMiKToKKyAgICAgICAgICAgIHRjcy5hcHBlbmQobGluZSkKKyAgICByZXR1cm4gIiAiLmpvaW4odGNzKQorCitkZWYgZ2V0X3Rlc3RzX2xpc3QoZCwgdHlwZT0icnVudGltZSIpOgorICAgIHRlc3RzdWl0ZXMgPSBbXQorICAgIHRlc3RzbGlzdCA9IFtdCisgICAgbWFuaWZlc3RzID0gZC5nZXRWYXIoIlRFU1RfU1VJVEVTX01BTklGRVNUIiwgVHJ1ZSkKKyAgICBpZiBtYW5pZmVzdHMgaXMgbm90IE5vbmU6CisgICAgICAgIG1hbmlmZXN0cyA9IG1hbmlmZXN0cy5zcGxpdCgpCisgICAgICAgIGZvciBtYW5pZmVzdCBpbiBtYW5pZmVzdHM6CisgICAgICAgICAgICB0ZXN0c3VpdGVzLmV4dGVuZChyZWFkX3Rlc3RsaXN0KGQsIG1hbmlmZXN0KS5zcGxpdCgpKQorICAgIGVsc2U6CisgICAgICAgIHRlc3RzdWl0ZXMgPSBkLmdldFZhcigiVEVTVF9TVUlURVMiLCBUcnVlKS5zcGxpdCgpCisgICAgaWYgdHlwZSA9PSAic2RrIjoKKyAgICAgICAgdGVzdHN1aXRlcyA9IChkLmdldFZhcigiVEVTVF9TVUlURVNfU0RLIiwgVHJ1ZSkgb3IgImF1dG8iKS5zcGxpdCgpCisgICAgYmJwYXRoID0gZC5nZXRWYXIoIkJCUEFUSCIsIFRydWUpLnNwbGl0KCc6JykKKworICAgICMgVGhpcyByZWxpZXMgb24gbGliLyB1bmRlciBlYWNoIGRpcmVjdG9yeSBpbiBCQlBBVEggYmVpbmcgYWRkZWQgdG8gc3lzLnBhdGgKKyAgICAjIChhcyBkb25lIGJ5IGRlZmF1bHQgaW4gYmFzZS5iYmNsYXNzKQorICAgIGZvciB0ZXN0bmFtZSBpbiB0ZXN0c3VpdGVzOgorICAgICAgICBpZiB0ZXN0bmFtZSAhPSAiYXV0byI6CisgICAgICAgICAgICBpZiB0ZXN0bmFtZS5zdGFydHN3aXRoKCJvZXFhLiIpOgorICAgICAgICAgICAgICAgIHRlc3RzbGlzdC5hcHBlbmQodGVzdG5hbWUpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBwIGluIGJicGF0aDoKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocCwgJ2xpYicsICdvZXFhJywgdHlwZSwgdGVzdG5hbWUgKyAnLnB5JykpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0c2xpc3QuYXBwZW5kKCJvZXFhLiIgKyB0eXBlICsgIi4iICsgdGVzdG5hbWUpCisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgbm90IGZvdW5kOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCdUZXN0ICVzIHNwZWNpZmllZCBpbiBURVNUX1NVSVRFUyBjb3VsZCBub3QgYmUgZm91bmQgaW4gbGliL29lcWEvcnVudGltZSB1bmRlciBCQlBBVEgnICUgdGVzdG5hbWUpCisKKyAgICBpZiAiYXV0byIgaW4gdGVzdHN1aXRlczoKKyAgICAgICAgZGVmIGFkZF9hdXRvX2xpc3QocGF0aCk6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBhdGgsICdfX2luaXRfXy5weScpKToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgnVGVzdHMgZGlyZWN0b3J5ICVzIGV4aXN0cyBidXQgaXMgbWlzc2luZyBfX2luaXRfXy5weScgJSBwYXRoKQorICAgICAgICAgICAgZmlsZXMgPSBzb3J0ZWQoW2YgZm9yIGYgaW4gb3MubGlzdGRpcihwYXRoKSBpZiBmLmVuZHN3aXRoKCcucHknKSBhbmQgbm90IGYuc3RhcnRzd2l0aCgnXycpXSkKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9ICdvZXFhLicgKyB0eXBlICsgJy4nICsgZls6LTNdCisgICAgICAgICAgICAgICAgaWYgbW9kdWxlIG5vdCBpbiB0ZXN0c2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIHRlc3RzbGlzdC5hcHBlbmQobW9kdWxlKQorCisgICAgICAgIGZvciBwIGluIGJicGF0aDoKKyAgICAgICAgICAgIHRlc3RwYXRoID0gb3MucGF0aC5qb2luKHAsICdsaWInLCAnb2VxYScsIHR5cGUpCisgICAgICAgICAgICBiYi5kZWJ1ZygyLCAnU2VhcmNoaW5nIGZvciB0ZXN0cyBpbiAlcycgJSB0ZXN0cGF0aCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRlc3RwYXRoKToKKyAgICAgICAgICAgICAgICBhZGRfYXV0b19saXN0KHRlc3RwYXRoKQorCisgICAgcmV0dXJuIHRlc3RzbGlzdAorCisKK2RlZiBleHBvcnRUZXN0cyhkLHRjKToKKyAgICBpbXBvcnQganNvbgorICAgIGltcG9ydCBzaHV0aWwKKyAgICBpbXBvcnQgcGtndXRpbAorCisgICAgZXhwb3J0cGF0aCA9IGQuZ2V0VmFyKCJURVNUX0VYUE9SVF9ESVIiLCBUcnVlKQorCisgICAgc2F2ZWRhdGEgPSB7fQorICAgIHNhdmVkYXRhWyJkIl0gPSB7fQorICAgIHNhdmVkYXRhWyJ0YXJnZXQiXSA9IHt9CisgICAgc2F2ZWRhdGFbImhvc3RfZHVtcGVyIl0gPSB7fQorICAgIGZvciBrZXkgaW4gdGMuX19kaWN0X186CisgICAgICAgICMgc3BlY2lhbCBjYXNlcworICAgICAgICBpZiBrZXkgIT0gImQiIGFuZCBrZXkgIT0gInRhcmdldCIgYW5kIGtleSAhPSAiaG9zdF9kdW1wZXIiOgorICAgICAgICAgICAgc2F2ZWRhdGFba2V5XSA9IGdldGF0dHIodGMsIGtleSkKKyAgICBzYXZlZGF0YVsidGFyZ2V0Il1bImlwIl0gPSB0Yy50YXJnZXQuaXAgb3IgZC5nZXRWYXIoIlRFU1RfVEFSR0VUX0lQIiwgVHJ1ZSkKKyAgICBzYXZlZGF0YVsidGFyZ2V0Il1bInNlcnZlcl9pcCJdID0gdGMudGFyZ2V0LnNlcnZlcl9pcCBvciBkLmdldFZhcigiVEVTVF9TRVJWRVJfSVAiLCBUcnVlKQorCisgICAga2V5cyA9IFsga2V5IGZvciBrZXkgaW4gZC5rZXlzKCkgaWYgbm90IGtleS5zdGFydHN3aXRoKCJfIikgYW5kIG5vdCBrZXkuc3RhcnRzd2l0aCgiQkIiKSBcCisgICAgICAgICAgICBhbmQgbm90IGtleS5zdGFydHN3aXRoKCJCX3BuIikgYW5kIG5vdCBrZXkuc3RhcnRzd2l0aCgiZG9fIikgYW5kIG5vdCBkLmdldFZhckZsYWcoa2V5LCAiZnVuYyIpXQorICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2F2ZWRhdGFbImQiXVtrZXldID0gZC5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICBleGNlcHQgYmIuZGF0YV9zbWFydC5FeHBhbnNpb25FcnJvcjoKKyAgICAgICAgICAgICMgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aG9zZSBhbnl3YXkKKyAgICAgICAgICAgIHBhc3MKKworICAgIHNhdmVkYXRhWyJob3N0X2R1bXBlciJdWyJwYXJlbnRfZGlyIl0gPSB0Yy5ob3N0X2R1bXBlci5wYXJlbnRfZGlyCisgICAgc2F2ZWRhdGFbImhvc3RfZHVtcGVyIl1bImNtZHMiXSA9IHRjLmhvc3RfZHVtcGVyLmNtZHMKKworICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgInRlc3RkYXRhLmpzb24iKSwgInciKSBhcyBmOgorICAgICAgICAgICAganNvbi5kdW1wKHNhdmVkYXRhLCBmLCBza2lwa2V5cz1UcnVlLCBpbmRlbnQ9NCwgc29ydF9rZXlzPVRydWUpCisKKyAgICAjIG5vdyBzdGFydCBjb3B5aW5nIGZpbGVzCisgICAgIyB3ZSdsbCBiYXNpY2FsbHkgY29weSBldmVyeXRoaW5nIHVuZGVyIG1ldGEvbGliL29lcWEsIHdpdGggdGhlc2UgZXhjZXB0aW9ucworICAgICMgIC0gb2VxYS90YXJnZXRjb250cm9sLnB5IC0gbm90IG5lZWRlZAorICAgICMgIC0gb2VxYS9zZWxmdGVzdCAtIHNvbWV0aGluZyBlbHNlCisgICAgIyBUaGF0IG1lYW5zOgorICAgICMgICAtIGFsbCB0ZXN0cyBmcm9tIG9lcWEvcnVudGltZSBkZWZpbmVkIGluIFRFU1RfU1VJVEVTIChpbmNsdWRpbmcgZnJvbSBvdGhlciBsYXllcnMpCisgICAgIyAgIC0gdGhlIGNvbnRlbnRzIG9mIG9lcWEvdXRpbHMgYW5kIG9lcWEvcnVudGltZS9maWxlcworICAgICMgICAtIG9lcWEvb2V0ZXN0LnB5IGFuZCBvZXFhL3J1bmV4cG9ydC5weSAodGhpcyB3aWxsIGdldCBjb3BpZWQgdG8gZXhwb3J0cGF0aCBub3QgZXhwb3J0cGF0aC9vZXFhKQorICAgICMgICAtIF9faW5pdF9fLnB5IGZpbGVzCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYS9ydW50aW1lL2ZpbGVzIikpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYS91dGlscyIpKQorICAgICMgY29weSB0ZXN0IG1vZHVsZXMsIHRoaXMgc2hvdWxkIGNvdmVyIHRlc3RzIGluIG90aGVyIGxheWVycyB0b28KKyAgICBmb3IgdCBpbiB0Yy50ZXN0c2xpc3Q6CisgICAgICAgIG1vZCA9IHBrZ3V0aWwuZ2V0X2xvYWRlcih0KQorICAgICAgICBzaHV0aWwuY29weTIobW9kLmZpbGVuYW1lLCBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEvcnVudGltZSIpKQorICAgICMgY29weSBfX2luaXRfXy5weSBmaWxlcworICAgIG9lcWFkaXIgPSBwa2d1dGlsLmdldF9sb2FkZXIoIm9lcWEiKS5maWxlbmFtZQorICAgIHNodXRpbC5jb3B5Mihvcy5wYXRoLmpvaW4ob2VxYWRpciwgIl9faW5pdF9fLnB5IiksIG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYSIpKQorICAgIHNodXRpbC5jb3B5Mihvcy5wYXRoLmpvaW4ob2VxYWRpciwgInJ1bnRpbWUvX19pbml0X18ucHkiKSwgb3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhL3J1bnRpbWUiKSkKKyAgICAjIGNvcHkgb2VxYS9vZXRlc3QucHkgYW5kIG9lcWEvcnVuZXhwb3J0ZWQucHkKKyAgICBzaHV0aWwuY29weTIob3MucGF0aC5qb2luKG9lcWFkaXIsICJvZXRlc3QucHkiKSwgb3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhIikpCisgICAgc2h1dGlsLmNvcHkyKG9zLnBhdGguam9pbihvZXFhZGlyLCAicnVuZXhwb3J0ZWQucHkiKSwgZXhwb3J0cGF0aCkKKyAgICAjIGNvcHkgb2VxYS91dGlscy8qLnB5CisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsob3MucGF0aC5qb2luKG9lcWFkaXIsICJ1dGlscyIpKToKKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICBpZiBmLmVuZHN3aXRoKCIucHkiKToKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weTIob3MucGF0aC5qb2luKHJvb3QsIGYpLCBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEvdXRpbHMiKSkKKyAgICAjIGNvcHkgb2VxYS9ydW50aW1lL2ZpbGVzLyoKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhvcy5wYXRoLmpvaW4ob2VxYWRpciwgInJ1bnRpbWUvZmlsZXMiKSk6CisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgc2h1dGlsLmNvcHkyKG9zLnBhdGguam9pbihyb290LCBmKSwgb3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhL3J1bnRpbWUvZmlsZXMiKSkKKworICAgIGJiLnBsYWluKCJFeHBvcnRlZCB0ZXN0cyB0bzogJXMiICUgZXhwb3J0cGF0aCkKKworCitkZWYgdGVzdGltYWdlX21haW4oZCk6CisgICAgaW1wb3J0IHVuaXR0ZXN0CisgICAgaW1wb3J0IG9zCisgICAgaW1wb3J0IG9lcWEucnVudGltZQorICAgIGltcG9ydCB0aW1lCisgICAgaW1wb3J0IHNpZ25hbAorICAgIGZyb20gb2VxYS5vZXRlc3QgaW1wb3J0IGxvYWRUZXN0cywgcnVuVGVzdHMKKyAgICBmcm9tIG9lcWEudGFyZ2V0Y29udHJvbCBpbXBvcnQgZ2V0X3RhcmdldF9jb250cm9sbGVyCisgICAgZnJvbSBvZXFhLnV0aWxzLmR1bXAgaW1wb3J0IGdldF9ob3N0X2R1bXBlcgorCisgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGV4cG9ydCA9IG9lLnV0aWxzLmNvbmRpdGlvbmFsKCJURVNUX0VYUE9SVF9PTkxZIiwgIjEiLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpKQorICAgIGlmIGV4cG9ydDoKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKGQuZ2V0VmFyKCJURVNUX0VYUE9SVF9ESVIiLCBUcnVlKSwgcmVjdXJzZT1UcnVlKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5nZXRWYXIoIlRFU1RfRVhQT1JUX0RJUiIsIFRydWUpKQorCisgICAgIyB0ZXN0cyBpbiBURVNUX1NVSVRFUyBiZWNvbWUgcmVxdWlyZWQgdGVzdHMKKyAgICAjIHRoZXkgd29uJ3QgYmUgc2tpcHBlZCBldmVuIGlmIHRoZXkgYXJlbid0IHN1aXRhYmxlIGZvciBhIGltYWdlIChsaWtlIHhvcmcgZm9yIG1pbmltYWwpCisgICAgIyB0ZXN0c2xpc3QgaXMgd2hhdCB3ZSdsbCBhY3R1YWxseSBwYXNzIHRvIHRoZSB1bml0dGVzdCBsb2FkZXIKKyAgICB0ZXN0c2xpc3QgPSBnZXRfdGVzdHNfbGlzdChkKQorICAgIHRlc3RzcmVxdWlyZWQgPSBbdCBmb3IgdCBpbiBkLmdldFZhcigiVEVTVF9TVUlURVMiLCBUcnVlKS5zcGxpdCgpIGlmIHQgIT0gImF1dG8iXQorCisgICAgdGFnZXhwID0gZC5nZXRWYXIoIlRFU1RfU1VJVEVTX1RBR1MiLCBUcnVlKQorCisgICAgIyB3ZSBuZWVkIHRoZSBob3N0IGR1bXBlciBpbiB0ZXN0IGNvbnRleHQKKyAgICBob3N0X2R1bXBlciA9IGdldF9ob3N0X2R1bXBlcihkKQorCisgICAgIyB0aGUgcm9ib3QgZGFuY2UKKyAgICB0YXJnZXQgPSBnZXRfdGFyZ2V0X2NvbnRyb2xsZXIoZCkKKworICAgIGNsYXNzIFRlc3RDb250ZXh0KG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgICAgIHNlbGYudGVzdHNsaXN0ID0gdGVzdHNsaXN0CisgICAgICAgICAgICBzZWxmLnRhZ2V4cCA9IHRhZ2V4cAorICAgICAgICAgICAgc2VsZi50ZXN0c3JlcXVpcmVkID0gdGVzdHNyZXF1aXJlZAorICAgICAgICAgICAgc2VsZi5maWxlc2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKG9lcWEucnVudGltZS5fX2ZpbGVfXykpLCJmaWxlcyIpCisgICAgICAgICAgICBzZWxmLnRhcmdldCA9IHRhcmdldAorICAgICAgICAgICAgc2VsZi5ob3N0X2R1bXBlciA9IGhvc3RfZHVtcGVyCisgICAgICAgICAgICBzZWxmLmltYWdlZmVhdHVyZXMgPSBkLmdldFZhcigiSU1BR0VfRkVBVFVSRVMiLCBUcnVlKS5zcGxpdCgpCisgICAgICAgICAgICBzZWxmLmRpc3Ryb2ZlYXR1cmVzID0gZC5nZXRWYXIoIkRJU1RST19GRUFUVVJFUyIsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgICAgIG1hbmlmZXN0ID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksIGQuZ2V0VmFyKCJJTUFHRV9MSU5LX05BTUUiLCBUcnVlKSArICIubWFuaWZlc3QiKQorICAgICAgICAgICAgc2VsZi5zaWd0ZXJtID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYub3JpZ3NpZ3Rlcm1oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHNlbGYuc2lndGVybV9leGNlcHRpb24pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG1hbmlmZXN0KSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnBrZ21hbmlmZXN0ID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIk5vIHBhY2thZ2UgbWFuaWZlc3QgZmlsZSBmb3VuZC4gRGlkIHlvdSBidWlsZCB0aGUgaW1hZ2U/XG4lcyIgJSBlKQorCisgICAgICAgIGRlZiBzaWd0ZXJtX2V4Y2VwdGlvbihzZWxmLCBzaWdudW0sIHN0YWNrZnJhbWUpOgorICAgICAgICAgICAgYmIud2FybigiVGVzdEltYWdlIHJlY2VpdmVkIFNJR1RFUk0sIHNodXR0aW5nIGRvd24uLi4iKQorICAgICAgICAgICAgc2VsZi5zaWd0ZXJtID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi50YXJnZXQuc3RvcCgpCisKKyAgICAjIHRlc3QgY29udGV4dAorICAgIHRjID0gVGVzdENvbnRleHQoKQorCisgICAgIyB0aGlzIGlzIGEgZHVtbXkgbG9hZCBvZiB0ZXN0cworICAgICMgd2UgYXJlIGRvaW5nIHRoYXQgdG8gZmluZCBjb21waWxlIGVycm9ycyBpbiB0aGUgdGVzdHMgdGhlbXNlbHZlcworICAgICMgYmVmb3JlIGJvb3RpbmcgdGhlIGltYWdlCisgICAgdHJ5OgorICAgICAgICBsb2FkVGVzdHModGMpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIGJiLmZhdGFsKCJMb2FkaW5nIHRlc3RzIGZhaWxlZDpcbiVzIiAlIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisKKyAgICB0YXJnZXQuZGVwbG95KCkKKworICAgIHRyeToKKyAgICAgICAgdGFyZ2V0LnN0YXJ0KCkKKyAgICAgICAgaWYgZXhwb3J0OgorICAgICAgICAgICAgZXhwb3J0VGVzdHMoZCx0YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXJ0dGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICByZXN1bHQgPSBydW5UZXN0cyh0YykKKyAgICAgICAgICAgIHN0b3B0aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIGlmIHJlc3VsdC53YXNTdWNjZXNzZnVsKCk6CisgICAgICAgICAgICAgICAgYmIucGxhaW4oIiVzIC0gUmFuICVkIHRlc3QlcyBpbiAlLjNmcyIgJSAocG4sIHJlc3VsdC50ZXN0c1J1biwgcmVzdWx0LnRlc3RzUnVuICE9IDEgYW5kICJzIiBvciAiIiwgc3RvcHRpbWUgLSBzdGFydHRpbWUpKQorICAgICAgICAgICAgICAgIG1zZyA9ICIlcyAtIE9LIC0gQWxsIHJlcXVpcmVkIHRlc3RzIHBhc3NlZCIgJSBwbgorICAgICAgICAgICAgICAgIHNraXBwZWQgPSBsZW4ocmVzdWx0LnNraXBwZWQpCisgICAgICAgICAgICAgICAgaWYgc2tpcHBlZDoKKyAgICAgICAgICAgICAgICAgICAgbXNnICs9ICIgKHNraXBwZWQ9JWQpIiAlIHNraXBwZWQKKyAgICAgICAgICAgICAgICBiYi5wbGFpbihtc2cpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIC0gRkFJTEVEIC0gY2hlY2sgdGhlIHRhc2sgbG9nIGFuZCB0aGUgc3NoIGxvZyIgJSBwbiApCisgICAgZmluYWxseToKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgdGMub3JpZ3NpZ3Rlcm1oYW5kbGVyKQorICAgICAgICB0YXJnZXQuc3RvcCgpCisKK3Rlc3RpbWFnZV9tYWluW3ZhcmRlcHNleGNsdWRlXSA9KyAiQkJfT1JJR0VOViIKKworCitkZWYgdGVzdHNka19tYWluKGQpOgorICAgIGltcG9ydCB1bml0dGVzdAorICAgIGltcG9ydCBvcworICAgIGltcG9ydCBnbG9iCisgICAgaW1wb3J0IG9lcWEucnVudGltZQorICAgIGltcG9ydCBvZXFhLnNkaworICAgIGltcG9ydCB0aW1lCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICBmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBsb2FkVGVzdHMsIHJ1blRlc3RzCisKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGQuZ2V0VmFyKCJURVNUX0xPR19ESVIiLCBUcnVlKSkKKworICAgICMgdGVzdHMgaW4gVEVTVF9TVUlURVMgYmVjb21lIHJlcXVpcmVkIHRlc3RzCisgICAgIyB0aGV5IHdvbid0IGJlIHNraXBwZWQgZXZlbiBpZiB0aGV5IGFyZW4ndCBzdWl0YWJsZS4KKyAgICAjIHRlc3RzbGlzdCBpcyB3aGF0IHdlJ2xsIGFjdHVhbGx5IHBhc3MgdG8gdGhlIHVuaXR0ZXN0IGxvYWRlcgorICAgIHRlc3RzbGlzdCA9IGdldF90ZXN0c19saXN0KGQsICJzZGsiKQorICAgIHRlc3RzcmVxdWlyZWQgPSBbdCBmb3IgdCBpbiAoZC5nZXRWYXIoIlRFU1RfU1VJVEVTX1NESyIsIFRydWUpIG9yICJhdXRvIikuc3BsaXQoKSBpZiB0ICE9ICJhdXRvIl0KKworICAgIHRjbmFtZSA9IGQuZXhwYW5kKCIke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoIikKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModGNuYW1lKToKKyAgICAgICAgYmIuZmF0YWwoIlRoZSB0b29sY2hhaW4gaXMgbm90IGJ1aWx0LiBCdWlsZCBpdCBiZWZvcmUgcnVubmluZyB0aGUgdGVzdHM6ICdiaXRiYWtlIDxpbWFnZT4gLWMgcG9wdWxhdGVfc2RrJyAuIikKKworICAgIGNsYXNzIFRlc3RDb250ZXh0KG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgICAgIHNlbGYudGVzdHNsaXN0ID0gdGVzdHNsaXN0CisgICAgICAgICAgICBzZWxmLnRlc3RzcmVxdWlyZWQgPSB0ZXN0c3JlcXVpcmVkCisgICAgICAgICAgICBzZWxmLmZpbGVzZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgob2VxYS5ydW50aW1lLl9fZmlsZV9fKSksImZpbGVzIikKKyAgICAgICAgICAgIHNlbGYuc2RrdGVzdGRpciA9IHNka3Rlc3RkaXIKKyAgICAgICAgICAgIHNlbGYuc2RrZW52ID0gc2RrZW52CisgICAgICAgICAgICBzZWxmLmltYWdlZmVhdHVyZXMgPSBkLmdldFZhcigiSU1BR0VfRkVBVFVSRVMiLCBUcnVlKS5zcGxpdCgpCisgICAgICAgICAgICBzZWxmLmRpc3Ryb2ZlYXR1cmVzID0gZC5nZXRWYXIoIkRJU1RST19GRUFUVVJFUyIsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgICAgIG1hbmlmZXN0ID0gZC5nZXRWYXIoIlNES19UQVJHRVRfTUFOSUZFU1QiLCBUcnVlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihtYW5pZmVzdCkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wa2dtYW5pZmVzdCA9IGYucmVhZCgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJObyBwYWNrYWdlIG1hbmlmZXN0IGZpbGUgZm91bmQuIERpZCB5b3UgYnVpbGQgdGhlIHNkayBpbWFnZT9cbiVzIiAlIGUpCisgICAgICAgICAgICBob3N0bWFuaWZlc3QgPSBkLmdldFZhcigiU0RLX0hPU1RfTUFOSUZFU1QiLCBUcnVlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggb3Blbihob3N0bWFuaWZlc3QpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaG9zdHBrZ21hbmlmZXN0ID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIk5vIGhvc3QgcGFja2FnZSBtYW5pZmVzdCBmaWxlIGZvdW5kLiBEaWQgeW91IGJ1aWxkIHRoZSBzZGsgaW1hZ2U/XG4lcyIgJSBlKQorCisgICAgc2RrdGVzdGRpciA9IGQuZXhwYW5kKCIke1dPUktESVJ9L3Rlc3RpbWFnZS1zZGsvIikKKyAgICBiYi51dGlscy5yZW1vdmUoc2RrdGVzdGRpciwgVHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoc2RrdGVzdGRpcikKKyAgICB0cnk6CisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCJjZCAlczsgJXMgPDxFT0Zcbi4vdGNcbllcbkVPRiIgJSAoc2RrdGVzdGRpciwgdGNuYW1lKSwgc2hlbGw9VHJ1ZSkKKyAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgYmIuZmF0YWwoIkNvdWxkbid0IGluc3RhbGwgdGhlIFNESzpcbiVzIiAlIGUub3V0cHV0KQorCisgICAgdHJ5OgorICAgICAgICB0YXJnZXRzID0gZ2xvYi5nbG9iKGQuZXhwYW5kKHNka3Rlc3RkaXIgKyAiL3RjL2Vudmlyb25tZW50LXNldHVwLSoiKSkKKyAgICAgICAgYmIud2FybihzdHIodGFyZ2V0cykpCisgICAgICAgIGZvciBzZGtlbnYgaW4gdGFyZ2V0czoKKyAgICAgICAgICAgIGJiLnBsYWluKCJUZXN0aW5nICVzIiAlIHNka2VudikKKyAgICAgICAgICAgICMgdGVzdCBjb250ZXh0CisgICAgICAgICAgICB0YyA9IFRlc3RDb250ZXh0KCkKKworICAgICAgICAgICAgIyB0aGlzIGlzIGEgZHVtbXkgbG9hZCBvZiB0ZXN0cworICAgICAgICAgICAgIyB3ZSBhcmUgZG9pbmcgdGhhdCB0byBmaW5kIGNvbXBpbGUgZXJyb3JzIGluIHRoZSB0ZXN0cyB0aGVtc2VsdmVzCisgICAgICAgICAgICAjIGJlZm9yZSBib290aW5nIHRoZSBpbWFnZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxvYWRUZXN0cyh0YywgInNkayIpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJMb2FkaW5nIHRlc3RzIGZhaWxlZDpcbiVzIiAlIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisKKyAgICAKKyAgICAgICAgICAgIHN0YXJ0dGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICByZXN1bHQgPSBydW5UZXN0cyh0YywgInNkayIpCisgICAgICAgICAgICBzdG9wdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBpZiByZXN1bHQud2FzU3VjY2Vzc2Z1bCgpOgorICAgICAgICAgICAgICAgIGJiLnBsYWluKCIlcyBTREsoJXMpOiVzIC0gUmFuICVkIHRlc3QlcyBpbiAlLjNmcyIgJSAocG4sIG9zLnBhdGguYmFzZW5hbWUodGNuYW1lKSwgb3MucGF0aC5iYXNlbmFtZShzZGtlbnYpLHJlc3VsdC50ZXN0c1J1biwgcmVzdWx0LnRlc3RzUnVuICE9IDEgYW5kICJzIiBvciAiIiwgc3RvcHRpbWUgLSBzdGFydHRpbWUpKQorICAgICAgICAgICAgICAgIG1zZyA9ICIlcyAtIE9LIC0gQWxsIHJlcXVpcmVkIHRlc3RzIHBhc3NlZCIgJSBwbgorICAgICAgICAgICAgICAgIHNraXBwZWQgPSBsZW4ocmVzdWx0LnNraXBwZWQpCisgICAgICAgICAgICAgICAgaWYgc2tpcHBlZDoKKyAgICAgICAgICAgICAgICAgICAgbXNnICs9ICIgKHNraXBwZWQ9JWQpIiAlIHNraXBwZWQKKyAgICAgICAgICAgICAgICBiYi5wbGFpbihtc2cpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIC0gRkFJTEVEIC0gY2hlY2sgdGhlIHRhc2sgbG9nIGFuZCB0aGUgY29tbWFuZHMgbG9nIiAlIHBuICkKKyAgICBmaW5hbGx5OgorICAgICAgICBiYi51dGlscy5yZW1vdmUoc2RrdGVzdGRpciwgVHJ1ZSkKKwordGVzdHNka19tYWluW3ZhcmRlcHNleGNsdWRlXSA9KyAiQkJfT1JJR0VOViIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGV4aW5mby5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGV4aW5mby5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZWZiY2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXhpbmZvLmJiY2xhc3MKQEAgLTAsMCArMSwxNSBAQAorIyBUaGlzIGNsYXNzIGlzIGluaGVyaXRlZCBieSByZWNpcGVzIHdob3NlIHVwc3RyZWFtIHBhY2thZ2VzIGludm9rZSB0aGUKKyMgdGV4aW5mbyB1dGlsaXRpZXMgYXQgYnVpbGQtdGltZS4gTmF0aXZlIGFuZCBjcm9zcyByZWNpcGVzIGFyZSBtYWRlIHRvIHVzZSB0aGUKKyMgZHVtbXkgc2NyaXB0cyBwcm92aWRlZCBieSB0ZXhpbmZvLWR1bW15LW5hdGl2ZSwgZm9yIGltcHJvdmVkIHBlcmZvcm1hbmNlLiAKKyMgVGFyZ2V0IGFyY2hpdGVjdHVyZSByZWNpcGVzIHVzZSB0aGUgZ2VudWluZSBUZXhpbmZvIHV0aWxpdGllcy4gQnkgZGVmYXVsdCwgCisjIHRoZXkgdXNlIHRoZSBUZXhpbmZvIHV0aWxpdGllcyBvbiB0aGUgaG9zdCBzeXN0ZW0uIElmIHlvdSB3YW50IHRvIHVzZSB0aGUKKyMgVGV4aW5mbyByZWNpcGUgc2hpcHBlZCB3aXRoIHlvY28sIHlvdSBjYW4gcmVtb3ZlIHRleGluZm8tbmF0aXZlIGZyb20gCisjIEFTU1VNRV9QUk9WSURFRCBhbmQgbWFrZWluZm8gZnJvbSBTQU5JVFlfUkVRVUlSRURfVVRJTElUSUVTLgorCitURVhERVAgPSAidGV4aW5mby1uYXRpdmUiCitURVhERVBfY2xhc3MtbmF0aXZlID0gInRleGluZm8tZHVtbXktbmF0aXZlIgorVEVYREVQX2NsYXNzLWNyb3NzID0gInRleGluZm8tZHVtbXktbmF0aXZlIgorREVQRU5EU19hcHBlbmQgPSAiICR7VEVYREVQfSIKK1BBVEhfcHJlcGVuZF9jbGFzcy1uYXRpdmUgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3RleGluZm8tZHVtbXktbmF0aXZlOiIKK1BBVEhfcHJlcGVuZF9jbGFzcy1jcm9zcyA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vdGV4aW5mby1kdW1teS1uYXRpdmU6IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90aW5kZXJjbGllbnQuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3RpbmRlcmNsaWVudC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ODRlZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90aW5kZXJjbGllbnQuYmJjbGFzcwpAQCAtMCwwICsxLDM2OCBAQAorZGVmIHRpbmRlcl9odHRwX3Bvc3Qoc2VydmVyLCBzZWxlY3RvciwgY29udGVudF90eXBlLCBib2R5KToKKyAgICBpbXBvcnQgaHR0cGxpYgorICAgICMgbm93IHBvc3QgaXQKKyAgICBmb3IgaSBpbiByYW5nZSgwLDUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBoID0gaHR0cGxpYi5IVFRQKHNlcnZlcikKKyAgICAgICAgICAgIGgucHV0cmVxdWVzdCgnUE9TVCcsIHNlbGVjdG9yKQorICAgICAgICAgICAgaC5wdXRoZWFkZXIoJ2NvbnRlbnQtdHlwZScsIGNvbnRlbnRfdHlwZSkKKyAgICAgICAgICAgIGgucHV0aGVhZGVyKCdjb250ZW50LWxlbmd0aCcsIHN0cihsZW4oYm9keSkpKQorICAgICAgICAgICAgaC5lbmRoZWFkZXJzKCkKKyAgICAgICAgICAgIGguc2VuZChib2R5KQorICAgICAgICAgICAgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzID0gaC5nZXRyZXBseSgpCisgICAgICAgICAgICAjcHJpbnQgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzCisgICAgICAgICAgICByZXR1cm4gKGVycmNvZGUsZXJybXNnLCBoZWFkZXJzLCBoLmZpbGUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHByaW50ICJFcnJvciBzZW5kaW5nIHRoZSByZXBvcnQhIgorICAgICAgICAgICAgIyB0cnkgYWdhaW4KKyAgICAgICAgICAgIHBhc3MKKworICAgICMgcmV0dXJuIHNvbWUgZ2FyYmFnZQorICAgIHJldHVybiAoLTEsICJ1bmtub3duIiwgInVua25vd24iLCBOb25lKQorCitkZWYgdGluZGVyX2Zvcm1fZGF0YShib3VuZCwgZGljdCwgbG9nKToKKyAgICBvdXRwdXQgPSBbXQorICAgICMgZm9yIGVhY2gga2V5IGluIHRoZSBkaWN0aW9uYXJ5CisgICAgZm9yIG5hbWUgaW4gZGljdDoKKyAgICAgICAgYXNzZXJ0IGRpY3RbbmFtZV0KKyAgICAgICAgb3V0cHV0LmFwcGVuZCggIi0tIiArIGJvdW5kICkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCggJ0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iJXMiJyAlIG5hbWUgKQorICAgICAgICBvdXRwdXQuYXBwZW5kKCAiIiApCisgICAgICAgIG91dHB1dC5hcHBlbmQoIGRpY3RbbmFtZV0gKQorICAgIGlmIGxvZzoKKyAgICAgICAgb3V0cHV0LmFwcGVuZCggIi0tIiArIGJvdW5kICkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCggJ0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ibG9nIjsgZmlsZW5hbWU9ImxvZy50eHQiJyApCisgICAgICAgIG91dHB1dC5hcHBlbmQoICcnICkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCggbG9nICkKKyAgICBvdXRwdXQuYXBwZW5kKCAnLS0nICsgYm91bmQgKyAnLS0nICkKKyAgICBvdXRwdXQuYXBwZW5kKCAnJyApCisKKyAgICByZXR1cm4gIlxyXG4iLmpvaW4ob3V0cHV0KQorCitkZWYgdGluZGVyX3RpbWVfc3RyaW5nKCk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSB0aW1lIGFzIEdNVAorICAgICIiIgorICAgIHJldHVybiAiIgorCitkZWYgdGluZGVyX2Zvcm1hdF9odHRwX3Bvc3QoZCxzdGF0dXMsbG9nKToKKyAgICAiIiIKKyAgICBGb3JtYXQgdGhlIFRpbmRlcmJveCBIVFRQIHBvc3Qgd2l0aCB0aGUgZGF0YSBuZWVkZWQKKyAgICBmb3IgdGhlIHRpbmRlcmJveCB0byBiZSBoYXBweS4KKyAgICAiIiIKKworICAgIGltcG9ydCByYW5kb20KKworICAgICMgdGhlIHZhcmlhYmxlcyB3ZSB3aWxsIG5lZWQgdG8gc2VuZCBvbiB0aGlzIGZvcm0gcG9zdAorICAgIHZhcmlhYmxlcyA9ICB7CisgICAgICAgICJ0cmVlIiAgICAgICAgIDogZC5nZXRWYXIoJ1RJTkRFUl9UUkVFJywgVHJ1ZSksCisgICAgICAgICJtYWNoaW5lX25hbWUiIDogZC5nZXRWYXIoJ1RJTkRFUl9NQUNISU5FJywgVHJ1ZSksCisgICAgICAgICJvcyIgICAgICAgICAgIDogb3MudW5hbWUoKVswXSwKKyAgICAgICAgIm9zX3ZlcnNpb24iICAgOiBvcy51bmFtZSgpWzJdLAorICAgICAgICAiY29tcGlsZXIiICAgICA6ICJnY2MiLAorICAgICAgICAiY2xvYmJlciIgICAgICA6IGQuZ2V0VmFyKCdUSU5ERVJfQ0xPQkJFUicsIFRydWUpIG9yICIwIiwKKyAgICAgICAgInNyY2RhdGUiICAgICAgOiBkLmdldFZhcignU1JDREFURScsIFRydWUpLAorICAgICAgICAiUE4iICAgICAgICAgICA6IGQuZ2V0VmFyKCdQTicsIFRydWUpLAorICAgICAgICAiUFYiICAgICAgICAgICA6IGQuZ2V0VmFyKCdQVicsIFRydWUpLAorICAgICAgICAiUFIiICAgICAgICAgICA6IGQuZ2V0VmFyKCdQUicsIFRydWUpLAorICAgICAgICAiRklMRSIgICAgICAgICA6IGQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkgb3IgIk4vQSIsCisgICAgICAgICJUQVJHRVRBUkNIIiAgIDogZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSksCisgICAgICAgICJUQVJHRVRGUFUiICAgIDogZC5nZXRWYXIoJ1RBUkdFVF9GUFUnLCBUcnVlKSBvciAiVW5rbm93biIsCisgICAgICAgICJUQVJHRVRPUyIgICAgIDogZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpIG9yICJVbmtub3duIiwKKyAgICAgICAgIk1BQ0hJTkUiICAgICAgOiBkLmdldFZhcignTUFDSElORScsIFRydWUpIG9yICJVbmtub3duIiwKKyAgICAgICAgIkRJU1RSTyIgICAgICAgOiBkLmdldFZhcignRElTVFJPJywgVHJ1ZSkgb3IgIlVua25vd24iLAorICAgICAgICAiemVja2Utcm9ja3MiICA6ICJzdXJlIiwKKyAgICB9CisKKyAgICAjIG9wdGlvbmFsbHkgYWRkIHRoZSBzdGF0dXMKKyAgICBpZiBzdGF0dXM6CisgICAgICAgIHZhcmlhYmxlc1sic3RhdHVzIl0gPSBzdHIoc3RhdHVzKQorCisgICAgIyB0cnkgdG8gbG9hZCB0aGUgbWFjaGluZSBpZAorICAgICMgd2Ugb25seSBuZWVkIG9uIGJ1aWxkX3N0YXR1cy5wbCBidXQgc2VuZGluZyBpdAorICAgICMgYWx3YXlzIGRvZXMgbm90IGh1cnQKKyAgICB0cnk6CisgICAgICAgIGYgPSBmaWxlKGQuZ2V0VmFyKCdUTVBESVInLFRydWUpKycvdGluZGVyLW1hY2hpbmUuaWQnLCAncicpCisgICAgICAgIGlkID0gZi5yZWFkKCkKKyAgICAgICAgdmFyaWFibGVzWydtYWNoaW5lX2lkJ10gPSBpZAorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworCisgICAgIyB0aGUgYm91bmRhcnkgd2Ugd2lsbCBuZWVkCisgICAgYm91bmRhcnkgPSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSVkIiAlIGludChyYW5kb20ucmFuZG9tKCkqMTAwMDAwMDAwMDAwMCkKKworICAgICMgbm93IGZvcm1hdCB0aGUgYm9keQorICAgIGJvZHkgPSB0aW5kZXJfZm9ybV9kYXRhKCBib3VuZGFyeSwgdmFyaWFibGVzLCBsb2cgKQorCisgICAgcmV0dXJuICgibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JXMiICUgYm91bmRhcnkpLGJvZHkKKworCitkZWYgdGluZGVyX2J1aWxkX3N0YXJ0KGQpOgorICAgICIiIgorICAgIEluZm9ybSB0aGUgdGluZGVyYm94IHRoYXQgYSBidWlsZCBpcyBzdGFydGluZy4gV2UgZG8gdGhpcworICAgIGJ5IHBvc3Rpbmcgb3VyIG5hbWUgYW5kIHRyZWUgdG8gdGhlIGJ1aWxkX3N0YXJ0LnBsIHNjcmlwdAorICAgIG9uIHRoZSBzZXJ2ZXIuCisgICAgIiIiCisKKyAgICAjIGdldCB0aGUgYm9keSBhbmQgdHlwZQorICAgIGNvbnRlbnRfdHlwZSwgYm9keSA9IHRpbmRlcl9mb3JtYXRfaHR0cF9wb3N0KGQsTm9uZSxOb25lKQorICAgIHNlcnZlciA9IGQuZ2V0VmFyKCdUSU5ERVJfSE9TVCcsIFRydWUgKQorICAgIHVybCAgICA9IGQuZ2V0VmFyKCdUSU5ERVJfVVJMJywgVHJ1ZSApCisKKyAgICBzZWxlY3RvciA9IHVybCArICIveG1sL2J1aWxkX3N0YXJ0LnBsIgorCisgICAgI3ByaW50ICJzZWxlY3RvciAlcyBhbmQgdXJsICVzIiAlIChzZWxlY3RvciwgdXJsKQorCisgICAgIyBub3cgcG9zdCBpdAorICAgIGVycmNvZGUsIGVycm1zZywgaGVhZGVycywgaF9maWxlID0gdGluZGVyX2h0dHBfcG9zdChzZXJ2ZXIsc2VsZWN0b3IsY29udGVudF90eXBlLCBib2R5KQorICAgICNwcmludCBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMKKyAgICByZXBvcnQgPSBoX2ZpbGUucmVhZCgpCisKKyAgICAjIG5vdyBsZXQgdXMgZmluZCB0aGUgbWFjaGluZSBpZCB0aGF0IHdhcyBhc3NpZ25lZCB0byB1cworICAgIHNlYXJjaCA9ICI8bWFjaGluZSBpZD0nIgorICAgIHJlcG9ydCA9IHJlcG9ydFtyZXBvcnQuZmluZChzZWFyY2gpK2xlbihzZWFyY2gpOl0KKyAgICByZXBvcnQgPSByZXBvcnRbMDpyZXBvcnQuZmluZCgiJyIpXQorCisgICAgYmIubm90ZSgiTWFjaGluZSBJRCBhc3NpZ25lZCBieSB0aW5kZXJib3g6ICVzIiAlIHJlcG9ydCApCisKKyAgICAjIG5vdyB3ZSB3aWxsIG5lZWQgdG8gc2F2ZSB0aGUgbWFjaGluZSBudW1iZXIKKyAgICAjIHdlIHdpbGwgb3ZlcnJpZGUgYW55IHByZXZpb3VzIG51bWJlcnMKKyAgICBmID0gZmlsZShkLmdldFZhcignVE1QRElSJywgVHJ1ZSkrIi90aW5kZXItbWFjaGluZS5pZCIsICd3JykKKyAgICBmLndyaXRlKHJlcG9ydCkKKworCitkZWYgdGluZGVyX3NlbmRfaHR0cChkLCBzdGF0dXMsIF9sb2cpOgorICAgICIiIgorICAgIFNlbmQgdGhpcyBsb2cgYXMgYnVpbGQgc3RhdHVzCisgICAgIiIiCisKKyAgICAjIGdldCB0aGUgYm9keSBhbmQgdHlwZQorICAgIHNlcnZlciA9IGQuZ2V0VmFyKCdUSU5ERVJfSE9TVCcsIFRydWUpCisgICAgdXJsICAgID0gZC5nZXRWYXIoJ1RJTkRFUl9VUkwnLCBUcnVlKQorCisgICAgc2VsZWN0b3IgPSB1cmwgKyAiL3htbC9idWlsZF9zdGF0dXMucGwiCisKKyAgICAjIG5vdyBwb3N0IGl0IC0gaW4gY2h1bmtzIG9mIDEwLjAwMCBjaGFyYWNodGVycworICAgIG5ld19sb2cgPSBfbG9nCisgICAgd2hpbGUgbGVuKG5ld19sb2cpID4gMDoKKyAgICAgICAgY29udGVudF90eXBlLCBib2R5ID0gdGluZGVyX2Zvcm1hdF9odHRwX3Bvc3QoZCxzdGF0dXMsbmV3X2xvZ1swOjE4MDAwXSkKKyAgICAgICAgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzLCBoX2ZpbGUgPSB0aW5kZXJfaHR0cF9wb3N0KHNlcnZlcixzZWxlY3Rvcixjb250ZW50X3R5cGUsIGJvZHkpCisgICAgICAgICNwcmludCBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMKKyAgICAgICAgI3ByaW50IGguZmlsZS5yZWFkKCkKKyAgICAgICAgbmV3X2xvZyA9IG5ld19sb2dbMTgwMDA6XQorCisKK2RlZiB0aW5kZXJfcHJpbnRfaW5mbyhkKToKKyAgICAiIiIKKyAgICBQcmludCB0aGUgVGluZGVyQm94IEluZm8KKyAgICAgICAgSW5jbHVkaW5nIGluZm9ybWF0aW9ucyBvZiB0aGUgQmFzZVN5c3RlbSBhbmQgdGhlIFRyZWUKKyAgICAgICAgd2UgdXNlLgorICAgICIiIgorCisgICAgIyBnZXQgdGhlIGxvY2FsIHZhcnMKKyAgICB0aW1lICAgID0gdGluZGVyX3RpbWVfc3RyaW5nKCkKKyAgICBvcHMgICAgID0gb3MudW5hbWUoKVswXQorICAgIHZlcnNpb24gPSBvcy51bmFtZSgpWzJdCisgICAgdXJsICAgICA9IGQuZ2V0VmFyKCAnVElOREVSX1VSTCcgLCBUcnVlICkKKyAgICB0cmVlICAgID0gZC5nZXRWYXIoICdUSU5ERVJfVFJFRScsIFRydWUgKQorICAgIGJyYW5jaCAgPSBkLmdldFZhciggJ1RJTkRFUl9CUkFOQ0gnLCBUcnVlICkKKyAgICBzcmNkYXRlID0gZC5nZXRWYXIoICdTUkNEQVRFJywgVHJ1ZSApCisgICAgbWFjaGluZSA9IGQuZ2V0VmFyKCAnTUFDSElORScsIFRydWUgKQorICAgIGRpc3RybyAgPSBkLmdldFZhciggJ0RJU1RSTycsIFRydWUgKQorICAgIGJiZmlsZXMgPSBkLmdldFZhciggJ0JCRklMRVMnLCBUcnVlICkKKyAgICB0YXJjaCAgID0gZC5nZXRWYXIoICdUQVJHRVRfQVJDSCcsIFRydWUgKQorICAgIGZwdSAgICAgPSBkLmdldFZhciggJ1RBUkdFVF9GUFUnLCBUcnVlICkKKyAgICBvZXJldiAgID0gZC5nZXRWYXIoICdPRV9SRVZJU0lPTicsIFRydWUgKSBvciAidW5rbm93biIKKworICAgICMgdGhlcmUgaXMgYSBidWcgd2l0aCB0aXBwbGUgcXVvdGVkIHN0cmluZ3MKKyAgICAjIGkgd2lsbCB3b3JrIGFyb3VuZCBidXQgd2lsbCBmaXggdGhlIG9yaWdpbmFsCisgICAgIyBidWcgYXMgd2VsbAorICAgIG91dHB1dCA9IFtdCisgICAgb3V0cHV0LmFwcGVuZCgiPT0gVGluZGVyYm94IEluZm8iICkKKyAgICBvdXRwdXQuYXBwZW5kKCJUaW1lOiAlKHRpbWUpcyIgKQorICAgIG91dHB1dC5hcHBlbmQoIk9TOiAlKG9wcylzIiApCisgICAgb3V0cHV0LmFwcGVuZCgiJSh2ZXJzaW9uKXMiICkKKyAgICBvdXRwdXQuYXBwZW5kKCJDb21waWxlcjogZ2NjIiApCisgICAgb3V0cHV0LmFwcGVuZCgiVGluZGVyYm94IENsaWVudDogMC4xIiApCisgICAgb3V0cHV0LmFwcGVuZCgiVGluZGVyYm94IENsaWVudCBMYXN0IE1vZGlmaWVkOiB5ZXN0ZXJkYXkiICkKKyAgICBvdXRwdXQuYXBwZW5kKCJUaW5kZXJib3ggUHJvdG9jb2w6IDAuMSIgKQorICAgIG91dHB1dC5hcHBlbmQoIlVSTDogJSh1cmwpcyIgKQorICAgIG91dHB1dC5hcHBlbmQoIlRyZWU6ICUodHJlZSlzIiApCisgICAgb3V0cHV0LmFwcGVuZCgiQ29uZmlnOiIgKQorICAgIG91dHB1dC5hcHBlbmQoImJyYW5jaCA9ICclKGJyYW5jaClzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoIlRBUkdFVF9BUkNIID0gJyUodGFyY2gpcyciICkKKyAgICBvdXRwdXQuYXBwZW5kKCJUQVJHRVRfRlBVID0gJyUoZnB1KXMnIiApCisgICAgb3V0cHV0LmFwcGVuZCgiU1JDREFURSA9ICclKHNyY2RhdGUpcyciICkKKyAgICBvdXRwdXQuYXBwZW5kKCJNQUNISU5FID0gJyUobWFjaGluZSlzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoIkRJU1RSTyA9ICclKGRpc3RybylzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoIkJCRklMRVMgPSAnJShiYmZpbGVzKXMnIiApCisgICAgb3V0cHV0LmFwcGVuZCgiT0VSRVYgPSAnJShvZXJldilzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoIj09IEVuZCBUaW5kZXJib3ggQ2xpZW50IEluZm8iICkKKworICAgICMgbm93IGNyZWF0ZSB0aGUgcmVhbCBvdXRwdXQKKyAgICByZXR1cm4gIlxuIi5qb2luKG91dHB1dCkgJSB2YXJzKCkKKworCitkZWYgdGluZGVyX3ByaW50X2VudigpOgorICAgICIiIgorICAgIFByaW50IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb2YgdGhpcyBidWlsZAorICAgICIiIgorICAgIHRpbWVfc3RhcnQgPSB0aW5kZXJfdGltZV9zdHJpbmcoKQorICAgIHRpbWVfZW5kICAgPSB0aW5kZXJfdGltZV9zdHJpbmcoKQorCisgICAgIyBidWlsZCB0aGUgZW52aXJvbm1lbnQKKyAgICBlbnYgPSAiIgorICAgIGZvciB2YXIgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgZW52ICs9ICIlcz0lc1xuIiAlICh2YXIsIG9zLmVudmlyb25bdmFyXSkKKworICAgIG91dHB1dCA9IFtdCisgICAgb3V0cHV0LmFwcGVuZCggIi0tLT4gVElOREVSQk9YIFJVTk5JTkcgZW52ICUodGltZV9zdGFydClzIiApCisgICAgb3V0cHV0LmFwcGVuZCggZW52ICkKKyAgICBvdXRwdXQuYXBwZW5kKCAiPC0tLSBUSU5ERVJCT1ggRklOSVNIRUQgKFNVQ0NFU1MpICUodGltZV9lbmQpcyIgKQorCisgICAgcmV0dXJuICJcbiIuam9pbihvdXRwdXQpICUgdmFycygpCisKK2RlZiB0aW5kZXJfdGluZGVyX3N0YXJ0KGQsIGV2ZW50KToKKyAgICAiIiIKKyAgICBQUklOVCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGlzIGJ1aWxkCisgICAgIiIiCisKKyAgICB0aW1lX3N0YXJ0ID0gdGluZGVyX3RpbWVfc3RyaW5nKCkKKyAgICBjb25maWcgPSB0aW5kZXJfcHJpbnRfaW5mbyhkKQorICAgICNlbnYgICAgPSB0aW5kZXJfcHJpbnRfZW52KCkKKyAgICB0aW1lX2VuZCAgID0gdGluZGVyX3RpbWVfc3RyaW5nKCkKKyAgICBwYWNrYWdlcyA9ICIgIi5qb2luKCBldmVudC5nZXRQa2dzKCkgKSAKKworICAgIG91dHB1dCA9IFtdCisgICAgb3V0cHV0LmFwcGVuZCggIi0tLT4gVElOREVSQk9YIFBSSU5USU5HIENPTkZJR1VSQVRJT04gJSh0aW1lX3N0YXJ0KXMiICkKKyAgICBvdXRwdXQuYXBwZW5kKCBjb25maWcgKQorICAgICNvdXRwdXQuYXBwZW5kKCBlbnYgICAgKQorICAgIG91dHB1dC5hcHBlbmQoICI8LS0tIFRJTkRFUkJPWCBGSU5JU0hFRCBQUklOVElORyBDT05GSUdVUkFUSU9OICUodGltZV9lbmQpcyIgKQorICAgIG91dHB1dC5hcHBlbmQoICItLS0+IFRJTkRFUkJPWCBCVUlMRElORyAnJShwYWNrYWdlcylzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoICI8LS0tIFRJTkRFUkJPWCBTVEFSVElORyBCVUlMRCBOT1ciICkKKworICAgIG91dHB1dC5hcHBlbmQoICIiICkKKworICAgIHJldHVybiAiXG4iLmpvaW4ob3V0cHV0KSAlIHZhcnMoKQorCitkZWYgdGluZGVyX2RvX3RpbmRlcl9yZXBvcnQoZXZlbnQpOgorICAgICIiIgorICAgIFJlcG9ydCB0byB0aGUgdGluZGVyYm94OgorICAgICAgICBPbiB0aGUgQnVpbGRTdGFydCB3ZSB3aWxsIGluZm9ybSB0aGUgYm94IGRpcmVjdGx5CisgICAgICAgIE9uIHRoZSBvdGhlciBldmVudHMgd2Ugd2lsbCB3cml0ZSB0byB0aGUgVElOREVSX0xPRyBhbmQKKyAgICAgICAgd2hlbiB0aGUgVGFzayBpcyBmaW5pc2hlZCB3ZSB3aWxsIHNlbmQgdGhlIHJlcG9ydC4KKworICAgIFRoZSBhYm92ZSBpcyBub3QgeWV0IGZ1bGx5IGltcGxlbWVudGVkLiBDdXJyZW50bHkgd2Ugc2VuZAorICAgIGluZm9ybWF0aW9uIGltbWVkaWF0ZWx5LiBUaGUgY2FjaGluZy9xdWV1aW5nIG5lZWRzIHRvIGJlCisgICAgaW1wbGVtZW50ZWQuIEFsc28gc2VuZGluZyBtb3JlIG9yIGxlc3MgaW5mb3JtYXRpb24gaXMgbm90CisgICAgaW1wbGVtZW50ZWQgeWV0LgorCisgICAgV2UgaGF2ZSB0d28gdGVtcG9yYXJ5IGZpbGVzIHN0b3JlZCBpbiB0aGUgVE1QIGRpcmVjdG9yeS4gT25lIGZpbGUKKyAgICBjb250YWlucyB0aGUgYXNzaWduZWQgbWFjaGluZSBpZCBmb3IgdGhlIHRpbmRlcmNsaWVudC4gVGhpcyBpZCBnZXRzCisgICAgYXNzaWduZWQgd2hlbiB3ZSBjb25uZWN0IHRoZSBib3ggYW5kIHN0YXJ0IHRoZSBidWlsZCBwcm9jZXNzIHRoZSBzZWNvbmQKKyAgICBmaWxlIGlzIHVzZWQgdG8gd29ya2Fyb3VuZCBhbiBFdmVudEhhbmRsZXIgbGltaXRhdGlvbi4gSWYgQml0QmFrZSBpcyByYW4KKyAgICB3aXRoIHRoZSBjb250aW51ZSBvcHRpb24gd2Ugd2FudCB0aGUgQnVpbGQgdG8gZmFpbCBldmVuIGlmIHdlIGdldCB0aGUKKyAgICBCdWlsZENvbXBsZXRlZCBFdmVudC4gSW4gdGhpcyBjYXNlIHdlIGhhdmUgdG8gbG9vayB1cCB0aGUgc3RhdHVzIGFuZAorICAgIHNlbmQgaXQgaW5zdGVhZCBvZiAxMDAvc3VjY2Vzcy4KKyAgICAiIiIKKyAgICBpbXBvcnQgZ2xvYgorCisgICAgIyB2YXJpYWJsZXMKKyAgICBuYW1lID0gYmIuZXZlbnQuZ2V0TmFtZShldmVudCkKKyAgICBsb2cgID0gIiIKKyAgICBzdGF0dXMgPSAxCisgICAgIyBDaGVjayB3aGF0IHdlIG5lZWQgdG8gZG8gQnVpbGQqIHNob3dzIHdlIHN0YXJ0IG9yIGFyZSBkb25lCisgICAgaWYgbmFtZSA9PSAiQnVpbGRTdGFydGVkIjoKKyAgICAgICAgdGluZGVyX2J1aWxkX3N0YXJ0KGV2ZW50LmRhdGEpCisgICAgICAgIGxvZyA9IHRpbmRlcl90aW5kZXJfc3RhcnQoZXZlbnQuZGF0YSxldmVudCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHRydW5jYXRlIHRoZSB0aW5kZXIgbG9nIGZpbGUKKyAgICAgICAgICAgIGYgPSBmaWxlKGV2ZW50LmRhdGEuZ2V0VmFyKCdUSU5ERVJfTE9HJywgVHJ1ZSksICd3JykKKyAgICAgICAgICAgIGYud3JpdGUoIiIpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgd3JpdGUgYSBzdGF0dXMgdG8gdGhlIGZpbGUuIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgLWsgb3B0aW9uCisgICAgICAgICAgICAjIG9mIEJpdEJha2UKKyAgICAgICAgICAgIGcgPSBmaWxlKGV2ZW50LmRhdGEuZ2V0VmFyKCdUTVBESVInLCBUcnVlKSsiL3RpbmRlci1zdGF0dXMiLCAndycpCisgICAgICAgICAgICBnLndyaXRlKCIiKQorICAgICAgICAgICAgZy5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgIyBBcHBlbmQgdGhlIFRhc2stTG9nIChjb21waWxlLGNvbmZpZ3VyZS4uLikgdG8gdGhlIGxvZyBmaWxlCisgICAgIyB3ZSB3aWxsIHNlbmQgdG8gdGhlIHNlcnZlcgorICAgIGlmIG5hbWUgPT0gIlRhc2tTdWNjZWVkZWQiIG9yIG5hbWUgPT0gIlRhc2tGYWlsZWQiOgorICAgICAgICBsb2dfZmlsZSA9IGdsb2IuZ2xvYigiJXMvbG9nLiVzLioiICUgKGV2ZW50LmRhdGEuZ2V0VmFyKCdUJywgVHJ1ZSksIGV2ZW50LnRhc2spKQorCisgICAgICAgIGlmIGxlbihsb2dfZmlsZSkgIT0gMDoKKyAgICAgICAgICAgIHRvX2ZpbGUgID0gZXZlbnQuZGF0YS5nZXRWYXIoJ1RJTkRFUl9MT0cnLCBUcnVlKQorICAgICAgICAgICAgbG9nICAgICArPSAiIi5qb2luKG9wZW4obG9nX2ZpbGVbMF0sICdyJykucmVhZGxpbmVzKCkpCisKKyAgICAjIHNldCB0aGUgcmlnaHQgJ0hFQURFUicvU3VtbWFyeSBmb3IgdGhlIFRpbmRlckJveAorICAgIGlmIG5hbWUgPT0gIlRhc2tTdGFydGVkIjoKKyAgICAgICAgbG9nICs9ICItLS0+IFRJTkRFUkJPWCBUYXNrICVzIHN0YXJ0ZWRcbiIgJSBldmVudC50YXNrCisgICAgZWxpZiBuYW1lID09ICJUYXNrU3VjY2VlZGVkIjoKKyAgICAgICAgbG9nICs9ICI8LS0tIFRJTkRFUkJPWCBUYXNrICVzIGRvbmUgKFNVQ0NFU1MpXG4iICUgZXZlbnQudGFzaworICAgIGVsaWYgbmFtZSA9PSAiVGFza0ZhaWxlZCI6CisgICAgICAgIGxvZyArPSAiPC0tLSBUSU5ERVJCT1ggVGFzayAlcyBmYWlsZWQgKEZBSUxVUkUpXG4iICUgZXZlbnQudGFzaworICAgIGVsaWYgbmFtZSA9PSAiUGtnU3RhcnRlZCI6CisgICAgICAgIGxvZyArPSAiLS0tPiBUSU5ERVJCT1ggUGFja2FnZSAlcyBzdGFydGVkXG4iICUgZXZlbnQuZGF0YS5nZXRWYXIoJ1BGJywgVHJ1ZSkKKyAgICBlbGlmIG5hbWUgPT0gIlBrZ1N1Y2NlZWRlZCI6CisgICAgICAgIGxvZyArPSAiPC0tLSBUSU5ERVJCT1ggUGFja2FnZSAlcyBkb25lIChTVUNDRVNTKVxuIiAlIGV2ZW50LmRhdGEuZ2V0VmFyKCdQRicsIFRydWUpCisgICAgZWxpZiBuYW1lID09ICJQa2dGYWlsZWQiOgorICAgICAgICBpZiBub3QgZXZlbnQuZGF0YS5nZXRWYXIoJ1RJTkRFUl9BVVRPQlVJTEQnLCBUcnVlKSA9PSAiMCI6CisgICAgICAgICAgICBidWlsZC5leGVjX3Rhc2soJ2RvX2NsZWFuJywgZXZlbnQuZGF0YSkKKyAgICAgICAgbG9nICs9ICI8LS0tIFRJTkRFUkJPWCBQYWNrYWdlICVzIGZhaWxlZCAoRkFJTFVSRSlcbiIgJSBldmVudC5kYXRhLmdldFZhcignUEYnLCBUcnVlKQorICAgICAgICBzdGF0dXMgPSAyMDAKKyAgICAgICAgIyByZW1lbWJlciB0aGUgZmFpbHVyZSBmb3IgdGhlIC1rIGNhc2UKKyAgICAgICAgaCA9IGZpbGUoZXZlbnQuZGF0YS5nZXRWYXIoJ1RNUERJUicsIFRydWUpKyIvdGluZGVyLXN0YXR1cyIsICd3JykKKyAgICAgICAgaC53cml0ZSgiMjAwIikKKyAgICBlbGlmIG5hbWUgPT0gIkJ1aWxkQ29tcGxldGVkIjoKKyAgICAgICAgbG9nICs9ICJCdWlsZCBDb21wbGV0ZWRcbiIKKyAgICAgICAgc3RhdHVzID0gMTAwCisgICAgICAgICMgQ2hlY2sgaWYgd2UgaGF2ZSBhIG9sZCBzdGF0dXMuLi4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaCA9IGZpbGUoZXZlbnQuZGF0YS5nZXRWYXIoJ1RNUERJUicsVHJ1ZSkrJy90aW5kZXItc3RhdHVzJywgJ3InKQorICAgICAgICAgICAgc3RhdHVzID0gaW50KGgucmVhZCgpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICBlbGlmIG5hbWUgPT0gIk11bHRpcGxlUHJvdmlkZXJzIjoKKyAgICAgICAgbG9nICs9ICItLS0+IFRJTkRFUkJPWCBNdWx0aXBsZSBQcm92aWRlcnNcbiIKKyAgICAgICAgbG9nICs9ICJtdWx0aXBsZSBwcm92aWRlcnMgYXJlIGF2YWlsYWJsZSAoJXMpO1xuIiAlICIsICIuam9pbihldmVudC5nZXRDYW5kaWRhdGVzKCkpCisgICAgICAgIGxvZyArPSAiY29uc2lkZXIgZGVmaW5pbmcgUFJFRkVSUkVEX1BST1ZJREVSXyVzXG4iICUgZXZlbnQuZ2V0SXRlbSgpCisgICAgICAgIGxvZyArPSAiaXMgcnVudGltZTogJWRcbiIgJSBldmVudC5pc1J1bnRpbWUoKQorICAgICAgICBsb2cgKz0gIjwtLS0gVElOREVSQk9YIE11bHRpcGxlIFByb3ZpZGVyc1xuIgorICAgIGVsaWYgbmFtZSA9PSAiTm9Qcm92aWRlciI6CisgICAgICAgIGxvZyArPSAiRXJyb3I6IE5vIFByb3ZpZGVyIGZvcjogJXNcbiIgJSBldmVudC5nZXRJdGVtKCkKKyAgICAgICAgbG9nICs9ICJFcnJvcjpXYXMgUnVudGltZTogJWRcbiIgJSBldmVudC5pc1J1bnRpbWUoKQorICAgICAgICBzdGF0dXMgPSAyMDAKKyAgICAgICAgIyByZW1lbWJlciB0aGUgZmFpbHVyZSBmb3IgdGhlIC1rIGNhc2UKKyAgICAgICAgaCA9IGZpbGUoZXZlbnQuZGF0YS5nZXRWYXIoJ1RNUERJUicsIFRydWUpKyIvdGluZGVyLXN0YXR1cyIsICd3JykKKyAgICAgICAgaC53cml0ZSgiMjAwIikKKworICAgICMgbm93IHBvc3QgdGhlIGxvZworICAgIGlmIGxlbihsb2cpID09IDA6CisgICAgICAgIHJldHVybgorCisgICAgIyBmb3Igbm93IHdlIHdpbGwgdXNlIHRoZSBodHRwIHBvc3QgbWV0aG9kIGFzIGl0IGlzIHRoZSBvbmx5IG9uZQorICAgIGxvZ19wb3N0X21ldGhvZCA9IHRpbmRlcl9zZW5kX2h0dHAKKyAgICBsb2dfcG9zdF9tZXRob2QoZXZlbnQuZGF0YSwgc3RhdHVzLCBsb2cpCisKKworIyB3ZSB3YW50IHRvIGJlIGFuIGV2ZW50IGhhbmRsZXIKK2FkZGhhbmRsZXIgdGluZGVyY2xpZW50X2V2ZW50aGFuZGxlcgorcHl0aG9uIHRpbmRlcmNsaWVudF9ldmVudGhhbmRsZXIoKSB7CisgICAgaWYgZS5kYXRhIGlzIE5vbmUgb3IgYmIuZXZlbnQuZ2V0TmFtZShlKSA9PSAiTXNnTm90ZSI6CisgICAgICAgIHJldHVybgorCisgICAgZG9fdGluZGVyX3JlcG9ydCA9IGUuZGF0YS5nZXRWYXIoJ1RJTkRFUl9SRVBPUlQnLCBUcnVlKQorICAgIGlmIGRvX3RpbmRlcl9yZXBvcnQgYW5kIGRvX3RpbmRlcl9yZXBvcnQgPT0gIjEiOgorICAgICAgICB0aW5kZXJfZG9fdGluZGVyX3JlcG9ydChlKQorCisgICAgcmV0dXJuCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90b2FzdGVyLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90b2FzdGVyLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYzY2ZmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3RvYXN0ZXIuYmJjbGFzcwpAQCAtMCwwICsxLDM1NSBAQAorIworIyBUb2FzdGVyIGhlbHBlciBjbGFzcworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisjCisjIFRoaXMgYmJjbGFzcyBpcyBkZXNpZ25lZCB0byBleHRyYWN0IGRhdGEgdXNlZCBieSBPRS1Db3JlIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VzcywKKyMgZm9yIHJlY29yZGluZyBpbiB0aGUgVG9hc3RlciBzeXN0ZW0uCisjIFRoZSBkYXRhIGFjY2VzcyBpcyBzeW5jaHJvbm91cywgcHJlc2VydmluZyB0aGUgYnVpbGQgZGF0YSBpbnRlZ3JpdHkgYWNyb3NzCisjIGRpZmZlcmVudCBidWlsZHMuCisjCisjIFRoZSBkYXRhIGlzIHRyYW5zZmVycmVkIHRocm91Z2ggdGhlIGV2ZW50IHN5c3RlbSwgdXNpbmcgdGhlIE1ldGFkYXRhRXZlbnQgb2JqZWN0cy4KKyMKKyMgVGhlIG1vZGVsIGlzIHRvIGVuYWJsZSB0aGUgZGF0YWR1bXAgZnVuY3Rpb25zIGFzIHBvc3RmdW5jcywgYW5kIGhhdmUgdGhlIGR1bXAKKyMgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHJlYWwgdGFza2Z1bmMgaGFzIGJlZW4gZXhlY3V0ZWQuIFRoaXMgcHJldmVudHMgdGFzayBzaWduYXR1cmUgY2hhbmdpbmcKKyMgaXMgdG9hc3RlciBpcyBlbmFibGVkIG9yIG5vdC4gQnVpbGQgcGVyZm9ybWFuY2UgaXMgbm90IGFmZmVjdGVkIGlmIFRvYXN0ZXIgaXMgbm90IGVuYWJsZWQuCisjCisjIFRvIGVuYWJsZSwgdXNlIElOSEVSSVQgaW4gbG9jYWwuY29uZjoKKyMKKyMgICAgICAgSU5IRVJJVCArPSAidG9hc3RlciIKKyMKKyMKKyMKKyMKKworIyBGaW5kIGFuZCBkdW1wIGxheWVyIGluZm8gd2hlbiB3ZSBnb3QgdGhlIGxheWVycyBwYXJzZWQKKworCisKK3B5dGhvbiB0b2FzdGVyX2xheWVyaW5mb19kdW1wZGF0YSgpIHsKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgZGVmIF9nZXRfZ2l0X2JyYW5jaChsYXllcl9wYXRoKToKKyAgICAgICAgYnJhbmNoID0gc3VicHJvY2Vzcy5Qb3BlbigiZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+L2Rldi9udWxsICIsIGN3ZD1sYXllcl9wYXRoLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgIGJyYW5jaCA9IGJyYW5jaC5yZXBsYWNlKCdyZWZzL2hlYWRzLycsICcnKS5yc3RyaXAoKQorICAgICAgICByZXR1cm4gYnJhbmNoCisKKyAgICBkZWYgX2dldF9naXRfcmV2aXNpb24obGF5ZXJfcGF0aCk6CisgICAgICAgIHJldmlzaW9uID0gc3VicHJvY2Vzcy5Qb3BlbigiZ2l0IHJldi1wYXJzZSBIRUFEIDI+L2Rldi9udWxsICIsIGN3ZD1sYXllcl9wYXRoLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdLnJzdHJpcCgpCisgICAgICAgIHJldHVybiByZXZpc2lvbgorCisgICAgZGVmIF9nZXRfdXJsX21hcF9uYW1lKGxheWVyX25hbWUpOgorICAgICAgICAiIiIgU29tZSBsYXllcnMgaGF2ZSBhIGRpZmZlcmVudCBuYW1lIG9uIG9wZW5lbWJlZGRlZC5vcmcgc2l0ZSwKKyAgICAgICAgICAgIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNvcnJlY3QgbmFtZSB0byB1c2UgaW4gdGhlIFVSTAorICAgICAgICAiIiIKKworICAgICAgICB1cmxfbmFtZSA9IGxheWVyX25hbWUKKyAgICAgICAgdXJsX21hcHBpbmcgPSB7J21ldGEnOiAnb3BlbmVtYmVkZGVkLWNvcmUnfQorCisgICAgICAgIGZvciBrZXkgaW4gdXJsX21hcHBpbmcua2V5cygpOgorICAgICAgICAgICAgaWYga2V5ID09IGxheWVyX25hbWU6CisgICAgICAgICAgICAgICAgdXJsX25hbWUgPSB1cmxfbWFwcGluZ1trZXldCisKKyAgICAgICAgcmV0dXJuIHVybF9uYW1lCisKKyAgICBkZWYgX2dldF9sYXllcl92ZXJzaW9uX2luZm9ybWF0aW9uKGxheWVyX3BhdGgpOgorCisgICAgICAgIGxheWVyX3ZlcnNpb25faW5mbyA9IHt9CisgICAgICAgIGxheWVyX3ZlcnNpb25faW5mb1snYnJhbmNoJ10gPSBfZ2V0X2dpdF9icmFuY2gobGF5ZXJfcGF0aCkKKyAgICAgICAgbGF5ZXJfdmVyc2lvbl9pbmZvWydjb21taXQnXSA9IF9nZXRfZ2l0X3JldmlzaW9uKGxheWVyX3BhdGgpCisgICAgICAgIGxheWVyX3ZlcnNpb25faW5mb1sncHJpb3JpdHknXSA9IDAKKworICAgICAgICByZXR1cm4gbGF5ZXJfdmVyc2lvbl9pbmZvCisKKworICAgIGRlZiBfZ2V0X2xheWVyX2RpY3QobGF5ZXJfcGF0aCk6CisKKyAgICAgICAgbGF5ZXJfaW5mbyA9IHt9CisgICAgICAgIGxheWVyX25hbWUgPSBsYXllcl9wYXRoLnNwbGl0KCcvJylbLTFdCisgICAgICAgIGxheWVyX3VybCA9ICdodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9sYXllci97bGF5ZXJ9LycKKyAgICAgICAgbGF5ZXJfdXJsX25hbWUgPSBfZ2V0X3VybF9tYXBfbmFtZShsYXllcl9uYW1lKQorCisgICAgICAgIGxheWVyX2luZm9bJ25hbWUnXSA9IGxheWVyX3VybF9uYW1lCisgICAgICAgIGxheWVyX2luZm9bJ2xvY2FsX3BhdGgnXSA9IGxheWVyX3BhdGgKKyAgICAgICAgbGF5ZXJfaW5mb1snbGF5ZXJfaW5kZXhfdXJsJ10gPSBsYXllcl91cmwuZm9ybWF0KGxheWVyPWxheWVyX3VybF9uYW1lKQorICAgICAgICBsYXllcl9pbmZvWyd2ZXJzaW9uJ10gPSBfZ2V0X2xheWVyX3ZlcnNpb25faW5mb3JtYXRpb24obGF5ZXJfcGF0aCkKKworICAgICAgICByZXR1cm4gbGF5ZXJfaW5mbworCisKKyAgICBiYmxheWVycyA9IGUuZGF0YS5nZXRWYXIoIkJCTEFZRVJTIiwgVHJ1ZSkKKworICAgIGxsYXllcmluZm8gPSB7fQorCisgICAgZm9yIGxheWVyIGluIHsgbCBmb3IgbCBpbiBiYmxheWVycy5zdHJpcCgpLnNwbGl0KCIgIikgaWYgbGVuKGwpIH06CisgICAgICAgIGxsYXllcmluZm9bbGF5ZXJdID0gX2dldF9sYXllcl9kaWN0KGxheWVyKQorCisKKyAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIkxheWVySW5mbyIsIGxsYXllcmluZm8pLCBlLmRhdGEpCit9CisKKyMgRHVtcCBwYWNrYWdlIGZpbGUgaW5mbyBkYXRhCisKK2RlZiBfdG9hc3Rlcl9sb2FkX3BrZ2RhdGFmaWxlKGRpcnBhdGgsIGZpbGVwYXRoKToKKyAgICBpbXBvcnQganNvbgorICAgIGltcG9ydCByZQorICAgIHBrZ2RhdGEgPSB7fQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZGlycGF0aCwgZmlsZXBhdGgpLCAiciIpIGFzIGZpbjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZmluOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGtuLCBrdiA9IGxpbmUuc3RyaXAoKS5zcGxpdCgiOiAiLCAxKQorICAgICAgICAgICAgICAgIG0gPSByZS5tYXRjaChyIl5QS0dfKFteQS1aOl0qKSIsIGtuKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIHBrZ2RhdGFbJ09QS0dOJ10gPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAga24gPSAiXyIuam9pbihbeCBmb3IgeCBpbiBrbi5zcGxpdCgiXyIpIGlmIHguaXN1cHBlcigpXSkKKyAgICAgICAgICAgICAgICBwa2dkYXRhW2tuXSA9IGt2LnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBrbiA9PSAnRklMRVNfSU5GTyc6CisgICAgICAgICAgICAgICAgICAgIHBrZ2RhdGFba25dID0ganNvbi5sb2FkcyhrdikKKworICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcyAgICAjIGlnbm9yZSBsaW5lcyB3aXRob3V0IHZhbGlkIGtleTogdmFsdWUgcGFpcnMKKyAgICByZXR1cm4gcGtnZGF0YQorCisKK3B5dGhvbiB0b2FzdGVyX3BhY2thZ2VfZHVtcGRhdGEoKSB7CisgICAgIiIiCisgICAgRHVtcHMgdGhlIGRhdGEgY3JlYXRlZCBieSBlbWl0X3BrZ2RhdGEKKyAgICAiIiIKKyAgICAjIHJlcGxpY2F0ZSB2YXJpYWJsZXMgZnJvbSB0aGUgcGFja2FnZS5iYmNsYXNzCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIHBrZ2RhdGFkaXIgPSBkLmdldFZhcignUEtHREVTVFdPUksnLCBUcnVlKQorCisgICAgIyBzY2FuIGFuZCBzZW5kIGRhdGEgZm9yIGVhY2ggcGFja2FnZQorCisgICAgbHBrZ2RhdGEgPSB7fQorICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKworICAgICAgICBscGtnZGF0YSA9IF90b2FzdGVyX2xvYWRfcGtnZGF0YWZpbGUocGtnZGF0YWRpciArICIvcnVudGltZS8iLCBwa2cpCisKKyAgICAgICAgIyBGaXJlIGFuIGV2ZW50IGNvbnRhaW5pbmcgdGhlIHBrZyBkYXRhCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiU2luZ2xlUGFja2FnZUluZm8iLCBscGtnZGF0YSksIGQpCit9CisKKyMgMi4gRHVtcCBvdXRwdXQgaW1hZ2UgZmlsZXMgaW5mb3JtYXRpb24KKworcHl0aG9uIHRvYXN0ZXJfaW1hZ2VfZHVtcGRhdGEoKSB7CisgICAgIiIiCisgICAgSW1hZ2UgZmlsZW5hbWUgZm9yIG91dHB1dCBpbWFnZXMgaXMgbm90IHN0YW5kYXJkaXplZC4KKyAgICBpbWFnZV90eXBlcy5iYmNsYXNzIHdpbGwgc3BlbGwgb3V0IElNQUdFX0NNRF94eHggdmFyaWFibGVzIHRoYXQgYWN0dWFsbHkKKyAgICBoYXZlIGhhcmRjb2RlZCB3YXlzIHRvIGNyZWF0ZSBpbWFnZSBmaWxlIG5hbWVzIGluIHRoZW0uCisgICAgU28gd2UgbG9vayBmb3IgZmlsZXMgc3RhcnRpbmcgd2l0aCB0aGUgc2V0IG5hbWUuCisgICAgIiIiCisKKyAgICBkZXBsb3lfZGlyX2ltYWdlID0gZC5nZXRWYXIoJ0RFUExPWV9ESVJfSU1BR0UnLCBUcnVlKTsKKyAgICBpbWFnZV9uYW1lID0gZC5nZXRWYXIoJ0lNQUdFX05BTUUnLCBUcnVlKTsKKworICAgIGltYWdlX2luZm9fZGF0YSA9IHt9CisgICAgYXJ0aWZhY3RfaW5mb19kYXRhID0ge30KKworICAgICMgY29sbGVjdCBhbGwgYXJ0aWZhY3RzCisgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhkZXBsb3lfZGlyX2ltYWdlKToKKyAgICAgICAgZm9yIGZuIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBmbi5zdGFydHN3aXRoKGltYWdlX25hbWUpOgorICAgICAgICAgICAgICAgICAgICBpbWFnZV9vdXRwdXQgPSBvcy5wYXRoLmpvaW4oZGlycGF0aCwgZm4pCisgICAgICAgICAgICAgICAgICAgIGltYWdlX2luZm9fZGF0YVtpbWFnZV9vdXRwdXRdID0gb3Muc3RhdChpbWFnZV9vdXRwdXQpLnN0X3NpemUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpbXBvcnQgc3RhdAorICAgICAgICAgICAgICAgICAgICBhcnRpZmFjdF9wYXRoID0gb3MucGF0aC5qb2luKGRpcnBhdGgsIGZuKQorICAgICAgICAgICAgICAgICAgICBmaWxlc3RhdCA9IG9zLnN0YXQoYXJ0aWZhY3RfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNsaW5rKGFydGlmYWN0X3BhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgYXJ0aWZhY3RfaW5mb19kYXRhW2FydGlmYWN0X3BhdGhdID0gZmlsZXN0YXQuc3Rfc2l6ZQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIk9TRXJyb3JFeGNlcHRpb24iLCBlKSwgZCkKKworICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiSW1hZ2VGaWxlU2l6ZSIsaW1hZ2VfaW5mb19kYXRhKSwgZCkKKyAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIkFydGlmYWN0RmlsZVNpemUiLGFydGlmYWN0X2luZm9fZGF0YSksIGQpCit9CisKKworCisjIGNvbGxlY3QgbGlzdCBvZiBidWlsZHN0YXRzIGZpbGVzIGJhc2VkIG9uIGZpcmVkIGV2ZW50czsgd2hlbiB0aGUgYnVpbGQgY29tcGxldGVzLCBjb2xsZWN0IGFsbCBzdGF0cyBhbmQgZmlyZSBhbiBldmVudCB3aXRoIGNvbGxlY3RlZCBkYXRhCisKK3B5dGhvbiB0b2FzdGVyX2NvbGxlY3RfdGFza19zdGF0cygpIHsKKyAgICBpbXBvcnQgYmIuYnVpbGQKKyAgICBpbXBvcnQgYmIuZXZlbnQKKyAgICBpbXBvcnQgYmIuZGF0YQorICAgIGltcG9ydCBiYi51dGlscworICAgIGltcG9ydCBvcworCisgICAgaWYgbm90IGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpOgorICAgICAgICByZXR1cm4gICMgaWYgd2UgZG9uJ3QgaGF2ZSBidWlsZHN0YXRzLCB3ZSBjYW5ub3QgY29sbGVjdCBzdGF0cworCisgICAgZGVmIF9hcHBlbmRfcmVhZF9saXN0KHYpOgorICAgICAgICBsb2NrID0gYmIudXRpbHMubG9ja2ZpbGUoZS5kYXRhLmV4cGFuZCgiJHtUT1BESVJ9L3RvYXN0ZXIubG9jayIpLCBGYWxzZSwgVHJ1ZSkKKworICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCAidG9hc3RlcnN0YXRsaXN0IiksICJhIikgYXMgZm91dDoKKyAgICAgICAgICAgIGJuID0gZ2V0X2JuKGUpCisgICAgICAgICAgICBic2RpciA9IG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgYm4pCisgICAgICAgICAgICB0YXNrZGlyID0gb3MucGF0aC5qb2luKGJzZGlyLCBlLmRhdGEuZXhwYW5kKCIke1BGfSIpKQorICAgICAgICAgICAgZm91dC53cml0ZSgiJXM6OiVzOjolczo6JXNcbiIgJSAoZS50YXNrZmlsZSwgZS50YXNrbmFtZSwgb3MucGF0aC5qb2luKHRhc2tkaXIsIGUudGFzayksIGUuZGF0YS5leHBhbmQoIiR7UE59IikpKQorCisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobG9jaykKKworICAgIGRlZiBfcmVhZF9zdGF0cyhmaWxlbmFtZSk6CisgICAgICAgIGNwdV91c2FnZSA9IDAKKyAgICAgICAgZGlza19pbyA9IDAKKyAgICAgICAgc3RhcnRpbyA9ICcwJworICAgICAgICBlbmRpbyA9ICcwJworICAgICAgICBzdGFydGVkID0gJzAnCisgICAgICAgIGVuZGVkID0gJzAnCisgICAgICAgIHBuID0gJycKKyAgICAgICAgdGFza25hbWUgPSAnJworICAgICAgICBzdGF0aW5mbyA9IHt9CisKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicpIGFzIHRhc2tfYnM6CisgICAgICAgICAgICBmb3IgbGluZSBpbiB0YXNrX2JzLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgIGssdiA9IGxpbmUuc3RyaXAoKS5zcGxpdCgiOiAiLCAxKQorICAgICAgICAgICAgICAgIHN0YXRpbmZvW2tdID0gdgorCisgICAgICAgIGlmICJDUFUgdXNhZ2UiIGluIHN0YXRpbmZvOgorICAgICAgICAgICAgY3B1X3VzYWdlID0gc3RyKHN0YXRpbmZvWyJDUFUgdXNhZ2UiXSkuc3RyaXAoJyUgXG5ccicpCisKKyAgICAgICAgaWYgIkVuZFRpbWVJTyIgaW4gc3RhdGluZm86CisgICAgICAgICAgICBlbmRpbyA9IHN0cihzdGF0aW5mb1siRW5kVGltZUlPIl0pLnN0cmlwKCclIFxuXHInKQorCisgICAgICAgIGlmICJTdGFydFRpbWVJTyIgaW4gc3RhdGluZm86CisgICAgICAgICAgICBzdGFydGlvID0gc3RyKHN0YXRpbmZvWyJTdGFydFRpbWVJTyJdKS5zdHJpcCgnJSBcblxyJykKKworICAgICAgICBpZiAiU3RhcnRlZCIgaW4gc3RhdGluZm86CisgICAgICAgICAgICBzdGFydGVkID0gc3RyKHN0YXRpbmZvWyJTdGFydGVkIl0pLnN0cmlwKCclIFxuXHInKQorCisgICAgICAgIGlmICJFbmRlZCIgaW4gc3RhdGluZm86CisgICAgICAgICAgICBlbmRlZCA9IHN0cihzdGF0aW5mb1siRW5kZWQiXSkuc3RyaXAoJyUgXG5ccicpCisKKyAgICAgICAgZGlza19pbyA9IGludChlbmRpbykgLSBpbnQoc3RhcnRpbykKKworICAgICAgICBlbGFwc2VkX3RpbWUgPSBmbG9hdChlbmRlZCkgLSBmbG9hdChzdGFydGVkKQorCisgICAgICAgIGNwdV91c2FnZSA9IGZsb2F0KGNwdV91c2FnZSkKKworICAgICAgICByZXR1cm4geydjcHVfdXNhZ2UnOiBjcHVfdXNhZ2UsICdkaXNrX2lvJzogZGlza19pbywgJ2VsYXBzZWRfdGltZSc6IGVsYXBzZWRfdGltZX0KKworCisgICAgaWYgaXNpbnN0YW5jZShlLCAoYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCwgYmIuYnVpbGQuVGFza0ZhaWxlZCkpOgorICAgICAgICBfYXBwZW5kX3JlYWRfbGlzdChlKQorICAgICAgICBwYXNzCisKKworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQpIGFuZCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksICJ0b2FzdGVyc3RhdGxpc3QiKSk6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksICJ0b2FzdGVyc3RhdGxpc3QiKSwgInIiKSBhcyBmaW46CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmaW46CisgICAgICAgICAgICAgICAgKHRhc2tmaWxlLCB0YXNrbmFtZSwgZmlsZW5hbWUsIHJlY2lwZW5hbWUpID0gbGluZS5zdHJpcCgpLnNwbGl0KCI6OiIpCisgICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgodGFza2ZpbGUsIHRhc2tuYW1lLCBfcmVhZF9zdGF0cyhmaWxlbmFtZSksIHJlY2lwZW5hbWUpKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIkJ1aWxkU3RhdHNMaXN0IiwgZXZlbnRzKSwgZS5kYXRhKQorICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCAidG9hc3RlcnN0YXRsaXN0IikpCit9CisKKyMgZHVtcCByZWxldmFudCBidWlsZCBoaXN0b3J5IGRhdGEgYXMgYW4gZXZlbnQgd2hlbiB0aGUgYnVpbGQgaXMgY29tcGxldGVkCisKK3B5dGhvbiB0b2FzdGVyX2J1aWxkaGlzdG9yeV9kdW1wKCkgeworICAgIGltcG9ydCByZQorICAgIEJVSUxESElTVE9SWV9ESVIgPSBlLmRhdGEuZXhwYW5kKCIke1RPUERJUn0vYnVpbGRoaXN0b3J5IikKKyAgICBCVUlMREhJU1RPUllfRElSX0lNQUdFX0JBU0UgPSBlLmRhdGEuZXhwYW5kKCIlcy9pbWFnZXMvJHtNQUNISU5FX0FSQ0h9LyR7VENMSUJDfS8iJSBCVUlMREhJU1RPUllfRElSKQorICAgIHBrZ2RhdGFfZGlyID0gZS5kYXRhLmdldFZhcigiUEtHREFUQV9ESVIiLCBUcnVlKQorCisKKyAgICAjIHNjYW4gdGhlIGJ1aWxkIHRhcmdldHMgZm9yIHRoaXMgYnVpbGQKKyAgICBpbWFnZXMgPSB7fQorICAgIGFsbHBrZ3MgPSB7fQorICAgIGZpbGVzID0ge30KKyAgICBmb3IgdGFyZ2V0IGluIGUuX3BrZ3M6CisgICAgICAgIGluc3RhbGxlZF9pbWdfcGF0aCA9IGUuZGF0YS5leHBhbmQob3MucGF0aC5qb2luKEJVSUxESElTVE9SWV9ESVJfSU1BR0VfQkFTRSwgdGFyZ2V0KSkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoaW5zdGFsbGVkX2ltZ19wYXRoKToKKyAgICAgICAgICAgIGltYWdlc1t0YXJnZXRdID0ge30KKyAgICAgICAgICAgIGZpbGVzW3RhcmdldF0gPSB7fQorICAgICAgICAgICAgZmlsZXNbdGFyZ2V0XVsnZGlycyddID0gW10KKyAgICAgICAgICAgIGZpbGVzW3RhcmdldF1bJ3N5bXMnXSA9IFtdCisgICAgICAgICAgICBmaWxlc1t0YXJnZXRdWydmaWxlcyddID0gW10KKyAgICAgICAgICAgIHdpdGggb3BlbigiJXMvaW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudHh0IiAlIGluc3RhbGxlZF9pbWdfcGF0aCwgInIiKSBhcyBmaW46CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmluOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoIjsiKQorICAgICAgICAgICAgICAgICAgICBwc2l6ZSwgcHggPSBsaW5lLnNwbGl0KCJcdCIpCisgICAgICAgICAgICAgICAgICAgIHB1bml0LCBwbmFtZSA9IHB4LnNwbGl0KCIgIikKKyAgICAgICAgICAgICAgICAgICAgIyB0aGlzIHNpemUgaXMgImluc3RhbGxlZC1zaXplIiBhcyBpdCBtZWFzdXJlcyBob3cgbXVjaCBzcGFjZSBpdCB0YWtlcyBvbiBkaXNrCisgICAgICAgICAgICAgICAgICAgIGltYWdlc1t0YXJnZXRdW3BuYW1lLnN0cmlwKCldID0geydzaXplJzppbnQocHNpemUpKjEwMjQsICdkZXBlbmRzJyA6IFtdfQorCisgICAgICAgICAgICB3aXRoIG9wZW4oIiVzL2RlcGVuZHMuZG90IiAlIGluc3RhbGxlZF9pbWdfcGF0aCwgInIiKSBhcyBmaW46CisgICAgICAgICAgICAgICAgcCA9IHJlLmNvbXBpbGUocicgLT4gJykKKyAgICAgICAgICAgICAgICBkb3QgPSByZS5jb21waWxlKHInLipzdHlsZT1kb3R0ZWQnKQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbjoKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCc7JykKKyAgICAgICAgICAgICAgICAgICAgbGluZXNwbGl0ID0gcC5zcGxpdChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4obGluZXNwbGl0KSA9PSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcG5hbWUgPSBsaW5lc3BsaXRbMF0ucnN0cmlwKCciJykuc3RyaXAoJyInKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kc25hbWUgPSBsaW5lc3BsaXRbMV0uc3BsaXQoIiAiKVswXS5zdHJpcCgpLnN0cmlwKCI7Iikuc3RyaXAoJyInKS5yc3RyaXAoJyInKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVwdHlwZSA9ICJkZXBlbmRzIgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZG90Lm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHR5cGUgPSAicmVjb21tZW5kcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwbmFtZSBpbiBpbWFnZXNbdGFyZ2V0XToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXNbdGFyZ2V0XVtwbmFtZV0gPSB7J3NpemUnOiAwLCAnZGVwZW5kcycgOiBbXX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkZXBlbmRzbmFtZSBpbiBpbWFnZXNbdGFyZ2V0XToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXNbdGFyZ2V0XVtkZXBlbmRzbmFtZV0gPSB7J3NpemUnOiAwLCAnZGVwZW5kcycgOiBbXX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc1t0YXJnZXRdW3BuYW1lXVsnZGVwZW5kcyddLmFwcGVuZCgoZGVwZW5kc25hbWUsIGRlcHR5cGUpKQorCisgICAgICAgICAgICB3aXRoIG9wZW4oIiVzL2ZpbGVzLWluLWltYWdlLnR4dCIgJSBpbnN0YWxsZWRfaW1nX3BhdGgsICJyIikgYXMgZmluOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbjoKKyAgICAgICAgICAgICAgICAgICAgbGMgPSBbIHggZm9yIHggaW4gbGluZS5zdHJpcCgpLnNwbGl0KCIgIikgaWYgbGVuKHgpID4gMCBdCisgICAgICAgICAgICAgICAgICAgIGlmIGxjWzBdLnN0YXJ0c3dpdGgoImwiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzW3RhcmdldF1bJ3N5bXMnXS5hcHBlbmQobGMpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgbGNbMF0uc3RhcnRzd2l0aCgiZCIpOgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNbdGFyZ2V0XVsnZGlycyddLmFwcGVuZChsYykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzW3RhcmdldF1bJ2ZpbGVzJ10uYXBwZW5kKGxjKQorCisgICAgICAgICAgICBmb3IgcG5hbWUgaW4gaW1hZ2VzW3RhcmdldF06CisgICAgICAgICAgICAgICAgaWYgbm90IHBuYW1lIGluIGFsbHBrZ3M6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ2RhdGEgPSBfdG9hc3Rlcl9sb2FkX3BrZ2RhdGFmaWxlKCIlcy9ydW50aW1lLXJldmVyc2UvIiAlIHBrZ2RhdGFfZGlyLCBwbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJyLmVycm5vID09IDI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBleHBlY3QgdGhpcyBlLmcuIGZvciBSUkVDT01NRU5EUyB0aGF0IGFyZSB1bnNhdGlzZmllZCBhdCBydW50aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgYWxscGtnc1twbmFtZV0gPSBwa2dkYXRhCisKKworICAgIGRhdGEgPSB7ICdwa2dkYXRhJyA6IGFsbHBrZ3MsICdpbWdkYXRhJyA6IGltYWdlcywgJ2ZpbGVkYXRhJyA6IGZpbGVzIH0KKworICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiSW1hZ2VQa2dMaXN0IiwgZGF0YSksIGUuZGF0YSkKKworfQorCisjIGR1bXAgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBsaWNlbnNlIG1hbmlmZXN0IHBhdGgKKworcHl0aG9uIHRvYXN0ZXJfbGljZW5zZW1hbmlmZXN0X2R1bXAoKSB7CisgICAgZGVwbG95X2RpciA9IGQuZ2V0VmFyKCdERVBMT1lfRElSJywgVHJ1ZSk7CisgICAgaW1hZ2VfbmFtZSA9IGQuZ2V0VmFyKCdJTUFHRV9OQU1FJywgVHJ1ZSk7CisKKyAgICBkYXRhID0geyAnZGVwbG95X2RpcicgOiBkZXBsb3lfZGlyLCAnaW1hZ2VfbmFtZScgOiBpbWFnZV9uYW1lIH0KKworICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiTGljZW5zZU1hbmlmZXN0UGF0aCIsIGRhdGEpLCBkKQorfQorCisjIHNldCBldmVudCBoYW5kbGVycworYWRkaGFuZGxlciB0b2FzdGVyX2xheWVyaW5mb19kdW1wZGF0YQordG9hc3Rlcl9sYXllcmluZm9fZHVtcGRhdGFbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uQ29tcGxldGVkIgorCithZGRoYW5kbGVyIHRvYXN0ZXJfY29sbGVjdF90YXNrX3N0YXRzCit0b2FzdGVyX2NvbGxlY3RfdGFza19zdGF0c1tldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkIGJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQgYmIuYnVpbGQuVGFza0ZhaWxlZCIKKworYWRkaGFuZGxlciB0b2FzdGVyX2J1aWxkaGlzdG9yeV9kdW1wCit0b2FzdGVyX2J1aWxkaGlzdG9yeV9kdW1wW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQiCitkb19wYWNrYWdlW3Bvc3RmdW5jc10gKz0gInRvYXN0ZXJfcGFja2FnZV9kdW1wZGF0YSAiCitkb19wYWNrYWdlW3ZhcmRlcHNleGNsdWRlXSArPSAidG9hc3Rlcl9wYWNrYWdlX2R1bXBkYXRhICIKKworZG9fcm9vdGZzW3Bvc3RmdW5jc10gKz0gInRvYXN0ZXJfaW1hZ2VfZHVtcGRhdGEgIgorZG9fcm9vdGZzW3Bvc3RmdW5jc10gKz0gInRvYXN0ZXJfbGljZW5zZW1hbmlmZXN0X2R1bXAgIgorZG9fcm9vdGZzW3ZhcmRlcHNleGNsdWRlXSArPSAidG9hc3Rlcl9pbWFnZV9kdW1wZGF0YSB0b2FzdGVyX2xpY2Vuc2VtYW5pZmVzdF9kdW1wIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdG9vbGNoYWluLXNjcmlwdHMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rvb2xjaGFpbi1zY3JpcHRzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBiMmI5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rvb2xjaGFpbi1zY3JpcHRzLmJiY2xhc3MKQEAgLTAsMCArMSwxNTQgQEAKK2luaGVyaXQgc2l0ZWluZm8ga2VybmVsLWFyY2gKKworIyBXZSB3YW50IHRvIGJlIGFibGUgdG8gY2hhbmdlIHRoZSB2YWx1ZSBvZiBNVUxUSU1BQ0hfVEFSR0VUX1NZUywgYmVjYXVzZSBpdAorIyBkb2Vzbid0IGFsd2F5cyBtYXRjaCBvdXIgZXhwZWN0YXRpb25zLi4uIGJ1dCB3ZSBkZWZhdWx0IHRvIHRoZSBzdG9jayB2YWx1ZQorUkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZUyA/PSAiJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30iCitUQVJHRVRfQ0NfQVJDSF9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1tdWNsaWJjIgorVEFSR0VUX0NDX0FSQ0hfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLW1tdXNsIgorCisjIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBlbnZpcm9ubWVudC1zZXR1cC1zY3JpcHQgZm9yIHVzZSBpbiBhIGRlcGxveWFibGUgU0RLCit0b29sY2hhaW5fY3JlYXRlX3Nka19lbnZfc2NyaXB0ICgpIHsKKwkjIENyZWF0ZSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKKwlzZGtwYXRobmF0aXZlPSR7NzotJHtTREtQQVRITkFUSVZFfX0KKwlwcmVmaXg9JHs2Oi0ke3ByZWZpeF9uYXRpdmVzZGt9fQorCWJpbmRpcj0kezU6LSR7YmluZGlyX25hdGl2ZXNka319CisJbGliZGlyPSR7NDotJHtsaWJkaXJ9fQorCXN5c3Jvb3Q9JHszOi0ke1NES1RBUkdFVFNZU1JPT1R9fQorCW11bHRpbWFjaF90YXJnZXRfc3lzPSR7MjotJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfX0KKwlzY3JpcHQ9JHsxOi0ke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vZW52aXJvbm1lbnQtc2V0dXAtJG11bHRpbWFjaF90YXJnZXRfc3lzfQorCXJtIC1mICRzY3JpcHQKKwl0b3VjaCAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFNES1RBUkdFVFNZU1JPT1Q9JyIkc3lzcm9vdCIgPj4gJHNjcmlwdAorCUVYVFJBUEFUSD0iIgorCWZvciBpIGluICR7Q0FOQURJQU5FWFRSQU9TfTsgZG8KKwkJRVhUUkFQQVRIPSIkRVhUUkFQQVRIOiRzZGtwYXRobmF0aXZlJGJpbmRpci8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJGkiCisJZG9uZQorCWVjaG8gImV4cG9ydCBQQVRIPSRzZGtwYXRobmF0aXZlJGJpbmRpcjokc2RrcGF0aG5hdGl2ZSRiaW5kaXIvLi4vJHtIT1NUX1NZU30vYmluOiRzZGtwYXRobmF0aXZlJGJpbmRpci8ke1RBUkdFVF9TWVN9IiRFWFRSQVBBVEgnOiRQQVRIJyA+PiAkc2NyaXB0CisJZWNobyAiZXhwb3J0IENDQUNIRV9QQVRIPSRzZGtwYXRobmF0aXZlJGJpbmRpcjokc2RrcGF0aG5hdGl2ZSRiaW5kaXIvLi4vJHtIT1NUX1NZU30vYmluOiRzZGtwYXRobmF0aXZlJGJpbmRpci8ke1RBUkdFVF9TWVN9IiRFWFRSQVBBVEgnOiRDQ0FDSEVfUEFUSCcgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBQS0dfQ09ORklHX1NZU1JPT1RfRElSPSRTREtUQVJHRVRTWVNST09UJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFBLR19DT05GSUdfUEFUSD0kU0RLVEFSR0VUU1lTUk9PVCciJGxpYmRpciInL3BrZ2NvbmZpZycgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDT05GSUdfU0lURT0ke1NES1BBVEh9L3NpdGUtY29uZmlnLSciJHttdWx0aW1hY2hfdGFyZ2V0X3N5c30iID4+ICRzY3JpcHQKKwllY2hvICJleHBvcnQgT0VDT1JFX05BVElWRV9TWVNST09UPVwiJHNka3BhdGhuYXRpdmVcIiIgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRUNPUkVfVEFSR0VUX1NZU1JPT1Q9IiRTREtUQVJHRVRTWVNST09UIicgPj4gJHNjcmlwdAorCWVjaG8gImV4cG9ydCBPRUNPUkVfQUNMT0NBTF9PUFRTPVwiLUkgJHNka3BhdGhuYXRpdmUvdXNyL3NoYXJlL2FjbG9jYWxcIiIgPj4gJHNjcmlwdAorCWVjaG8gImV4cG9ydCBQWVRIT05IT01FPSRzZGtwYXRobmF0aXZlJHByZWZpeCIgPj4gJHNjcmlwdAorCisJdG9vbGNoYWluX3NoYXJlZF9lbnZfc2NyaXB0Cit9CisKKyMgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuIGVudmlyb25tZW50LXNldHVwLXNjcmlwdCBpbiB0aGUgVE1QRElSIHdoaWNoIGVuYWJsZXMKKyMgYSBPRS1jb3JlIElERSB0byBpbnRlZ3JhdGUgd2l0aCB0aGUgYnVpbGQgdHJlZQordG9vbGNoYWluX2NyZWF0ZV90cmVlX2Vudl9zY3JpcHQgKCkgeworCXNjcmlwdD0ke1RNUERJUn0vZW52aXJvbm1lbnQtc2V0dXAtJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCXJtIC1mICRzY3JpcHQKKwl0b3VjaCAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFBBVEg9JHtTVEFHSU5HX0RJUl9OQVRJVkV9L3Vzci9iaW46JHtQQVRIfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDQ0FDSEVfUEFUSD0ke1NUQUdJTkdfRElSX05BVElWRX0vdXNyL2Jpbjoke0NDQUNIRV9QQVRIfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBQS0dfQ09ORklHX1NZU1JPT1RfRElSPSR7UEtHX0NPTkZJR19TWVNST09UX0RJUn0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgUEtHX0NPTkZJR19QQVRIPSR7UEtHX0NPTkZJR19QQVRIfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDT05GSUdfU0lURT0iJHtAc2l0ZWluZm9fZ2V0X2ZpbGVzKGQpfSInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgU0RLVEFSR0VUU1lTUk9PVD0ke1NUQUdJTkdfRElSX1RBUkdFVH0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VDT1JFX05BVElWRV9TWVNST09UPSIke1NUQUdJTkdfRElSX05BVElWRX0iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FQ09SRV9UQVJHRVRfU1lTUk9PVD0iJHtTVEFHSU5HX0RJUl9UQVJHRVR9IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRUNPUkVfQUNMT0NBTF9PUFRTPSItSSAke1NUQUdJTkdfRElSX05BVElWRX0vdXNyL3NoYXJlL2FjbG9jYWwiJyA+PiAkc2NyaXB0CisKKwl0b29sY2hhaW5fc2hhcmVkX2Vudl9zY3JpcHQKK30KKwordG9vbGNoYWluX3NoYXJlZF9lbnZfc2NyaXB0ICgpIHsKKwllY2hvICdleHBvcnQgQ0M9IiR7VEFSR0VUX1BSRUZJWH1nY2MgJHtUQVJHRVRfQ0NfQVJDSH0gLS1zeXNyb290PSRTREtUQVJHRVRTWVNST09UIicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDWFg9IiR7VEFSR0VUX1BSRUZJWH1nKysgJHtUQVJHRVRfQ0NfQVJDSH0gLS1zeXNyb290PSRTREtUQVJHRVRTWVNST09UIicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDUFA9IiR7VEFSR0VUX1BSRUZJWH1nY2MgLUUgJHtUQVJHRVRfQ0NfQVJDSH0gLS1zeXNyb290PSRTREtUQVJHRVRTWVNST09UIicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBBUz0iJHtUQVJHRVRfUFJFRklYfWFzICR7VEFSR0VUX0FTX0FSQ0h9IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBMRD0iJHtUQVJHRVRfUFJFRklYfWxkICR7VEFSR0VUX0xEX0FSQ0h9IC0tc3lzcm9vdD0kU0RLVEFSR0VUU1lTUk9PVCInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgR0RCPSR7VEFSR0VUX1BSRUZJWH1nZGInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgU1RSSVA9JHtUQVJHRVRfUFJFRklYfXN0cmlwJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFJBTkxJQj0ke1RBUkdFVF9QUkVGSVh9cmFubGliJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9CSkNPUFk9JHtUQVJHRVRfUFJFRklYfW9iamNvcHknID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0JKRFVNUD0ke1RBUkdFVF9QUkVGSVh9b2JqZHVtcCcgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBBUj0ke1RBUkdFVF9QUkVGSVh9YXInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgTk09JHtUQVJHRVRfUFJFRklYfW5tJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE00PW00JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFRBUkdFVF9QUkVGSVg9JHtUQVJHRVRfUFJFRklYfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDT05GSUdVUkVfRkxBR1M9Ii0tdGFyZ2V0PSR7VEFSR0VUX1NZU30gLS1ob3N0PSR7VEFSR0VUX1NZU30gLS1idWlsZD0ke1NES19BUkNIfS1saW51eCAtLXdpdGgtbGlidG9vbC1zeXNyb290PSRTREtUQVJHRVRTWVNST09UIicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDRkxBR1M9IiR7VEFSR0VUX0NGTEFHU30iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENYWEZMQUdTPSIke1RBUkdFVF9DWFhGTEFHU30iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IExERkxBR1M9IiR7VEFSR0VUX0xERkxBR1N9IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDUFBGTEFHUz0iJHtUQVJHRVRfQ1BQRkxBR1N9IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBLQ0ZMQUdTPSItLXN5c3Jvb3Q9JFNES1RBUkdFVFNZU1JPT1QiJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FQ09SRV9ESVNUUk9fVkVSU0lPTj0iJHtESVNUUk9fVkVSU0lPTn0iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FQ09SRV9TREtfVkVSU0lPTj0iJHtTREtfVkVSU0lPTn0iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IEFSQ0g9JHtBUkNIfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDUk9TU19DT01QSUxFPSR7VEFSR0VUX1BSRUZJWH0nID4+ICRzY3JpcHQKKworICAgIGNhdCA+PiAkc2NyaXB0IDw8RU9GCisKKyMgQXBwZW5kIGVudmlyb25tZW50IHN1YnNjcmlwdHMKK2lmIFsgLWQgIlwkT0VDT1JFX1RBUkdFVF9TWVNST09UL2Vudmlyb25tZW50LXNldHVwLmQiIF07IHRoZW4KKyAgICBmb3IgZW52ZmlsZSBpbiBcJE9FQ09SRV9UQVJHRVRfU1lTUk9PVC9lbnZpcm9ubWVudC1zZXR1cC5kLyouc2g7IGRvCisJICAgIHNvdXJjZSBcJGVudmZpbGUKKyAgICBkb25lCitmaQoraWYgWyAtZCAiXCRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvZW52aXJvbm1lbnQtc2V0dXAuZCIgXTsgdGhlbgorICAgIGZvciBlbnZmaWxlIGluIFwkT0VDT1JFX05BVElWRV9TWVNST09UL2Vudmlyb25tZW50LXNldHVwLmQvKi5zaDsgZG8KKwkgICAgc291cmNlIFwkZW52ZmlsZQorICAgIGRvbmUKK2ZpCitFT0YKK30KKworI3dlIGdldCB0aGUgY2FjaGVkIHNpdGUgY29uZmlnIGluIHRoZSBydW50aW1lCitUT09MQ0hBSU5fQ09ORklHU0lURV9OT0NBQ0hFID0gIiR7QHNpdGVpbmZvX2dldF9maWxlcyhkLCBUcnVlKX0iCitUT09MQ0hBSU5fQ09ORklHU0lURV9TWVNST09UQ0FDSEUgPSAiJHtTVEFHSU5HX0RJUn0vJHtNTFBSRUZJWH0ke01BQ0hJTkV9LyR7dGFyZ2V0X2RhdGFkaXJ9LyR7VEFSR0VUX1NZU31fY29uZmlnX3NpdGUuZCIKK1RPT0xDSEFJTl9ORUVEX0NPTkZJR1NJVEVfQ0FDSEUgPz89ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYyBuY3Vyc2VzIgorCisjVGhpcyBmdW5jdGlvbiBjcmVhdGUgYSBzaXRlIGNvbmZpZyBmaWxlCit0b29sY2hhaW5fY3JlYXRlX3Nka19zaXRlY29uZmlnICgpIHsKKwlsb2NhbCBzaXRlY29uZmlnPSQxCisKKwlybSAtZiAkc2l0ZWNvbmZpZworCXRvdWNoICRzaXRlY29uZmlnCisKKwlmb3Igc2l0ZWZpbGUgaW4gJHtUT09MQ0hBSU5fQ09ORklHU0lURV9OT0NBQ0hFfSA7IGRvCisJCWNhdCAkc2l0ZWZpbGUgPj4gJHNpdGVjb25maWcKKwlkb25lCisKKwkjZ2V0IGNhY2hlZCBzaXRlIGNvbmZpZworCWZvciBzaXRlZmlsZSBpbiAke1RPT0xDSEFJTl9ORUVEX0NPTkZJR1NJVEVfQ0FDSEV9OyBkbworCQkjIFJlc29sdmUgdmlydHVhbC8qIG5hbWVzIHRvIHRoZSByZWFsIHJlY2lwZSBuYW1lIHVzaW5nIHN5c3Jvb3QtcHJvdmlkZXJzIGluZm8KKwkJY2FzZSAkc2l0ZWZpbGUgaW4gdmlydHVhbC8qKQorCQkJc2l0ZWZpbGU9YGVjaG8gJHNpdGVmaWxlIHwgdHIgLyBfYAorCQkJc2l0ZWZpbGU9YGNhdCAke1NUQUdJTkdfRElSX1RBUkdFVH0vc3lzcm9vdC1wcm92aWRlcnMvJHNpdGVmaWxlYAorCQllc2FjCisKKwkJaWYgWyAtciAke1RPT0xDSEFJTl9DT05GSUdTSVRFX1NZU1JPT1RDQUNIRX0vJHtzaXRlZmlsZX1fY29uZmlnIF07IHRoZW4KKwkJCWNhdCAke1RPT0xDSEFJTl9DT05GSUdTSVRFX1NZU1JPT1RDQUNIRX0vJHtzaXRlZmlsZX1fY29uZmlnID4+ICRzaXRlY29uZmlnCisJCWZpCisJZG9uZQorfQorIyBUaGUgaW1tZWRpYXRlIGV4cGFuc2lvbiBhYm92ZSBjYW4gcmVzdWx0IGluIHVud2FudGVkIHBhdGggZGVwZW5kZW5jaWVzIGhlcmUKK3Rvb2xjaGFpbl9jcmVhdGVfc2RrX3NpdGVjb25maWdbdmFyZGVwc2V4Y2x1ZGVdID0gIlRPT0xDSEFJTl9DT05GSUdTSVRFX1NZU1JPT1RDQUNIRSIKKworI1RoaXMgZnVuY3Rpb24gY3JlYXRlIGEgdmVyc2lvbiBpbmZvcm1hdGlvbiBmaWxlCit0b29sY2hhaW5fY3JlYXRlX3Nka192ZXJzaW9uICgpIHsKKwlsb2NhbCB2ZXJzaW9uZmlsZT0kMQorCXJtIC1mICR2ZXJzaW9uZmlsZQorCXRvdWNoICR2ZXJzaW9uZmlsZQorCWVjaG8gJ0Rpc3RybzogJHtESVNUUk99JyA+PiAkdmVyc2lvbmZpbGUKKwllY2hvICdEaXN0cm8gVmVyc2lvbjogJHtESVNUUk9fVkVSU0lPTn0nID4+ICR2ZXJzaW9uZmlsZQorCWVjaG8gJ01ldGFkYXRhIFJldmlzaW9uOiAke01FVEFEQVRBX1JFVklTSU9OfScgPj4gJHZlcnNpb25maWxlCisJZWNobyAnVGltZXN0YW1wOiAke0RBVEVUSU1FfScgPj4gJHZlcnNpb25maWxlCit9Cit0b29sY2hhaW5fY3JlYXRlX3Nka192ZXJzaW9uW3ZhcmRlcHNleGNsdWRlXSA9ICJEQVRFVElNRSIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBpbXBvcnQgb2UuY2xhc3NleHRlbmQKKyAgICBkZXBzID0gIiIKKyAgICBmb3IgZGVwIGluIChkLmdldFZhcignVE9PTENIQUlOX05FRURfQ09ORklHU0lURV9DQUNIRScsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBkZXBzICs9ICIgJXM6ZG9fcG9wdWxhdGVfc3lzcm9vdCIgJSBkZXAKKyAgICAgICAgZm9yIHZhcmlhbnQgaW4gKGQuZ2V0VmFyKCdNVUxUSUxJQl9WQVJJQU5UUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgY2xzZXh0ZW5kID0gb2UuY2xhc3NleHRlbmQuQ2xhc3NFeHRlbmRlcih2YXJpYW50LCBkKQorICAgICAgICAgICAgbmV3ZGVwID0gY2xzZXh0ZW5kLmV4dGVuZF9uYW1lKGRlcCkKKyAgICAgICAgICAgIGRlcHMgKz0gIiAlczpkb19wb3B1bGF0ZV9zeXNyb290IiAlIG5ld2RlcAorICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fY29uZmlndXJlJywgJ2RlcGVuZHMnLCBkZXBzKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdHlwZWNoZWNrLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90eXBlY2hlY2suYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmRhOTMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdHlwZWNoZWNrLmJiY2xhc3MKQEAgLTAsMCArMSwxMiBAQAorIyBDaGVjayB0eXBlcyBvZiBiaXRiYWtlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisjCisjIFNlZSBvZS50eXBlcyBmb3IgZGV0YWlscy4KKworcHl0aG9uIGNoZWNrX3R5cGVzKCkgeworICAgIGltcG9ydCBvZS50eXBlcworICAgIGZvciBrZXkgaW4gZS5kYXRhLmtleXMoKToKKyAgICAgICAgaWYgZS5kYXRhLmdldFZhckZsYWcoa2V5LCAidHlwZSIpOgorICAgICAgICAgICAgb2UuZGF0YS50eXBlZF92YWx1ZShrZXksIGUuZGF0YSkKK30KK2FkZGhhbmRsZXIgY2hlY2tfdHlwZXMKK2NoZWNrX3R5cGVzW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQ29uZmlnUGFyc2VkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdWJvb3QtY29uZmlnLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91Ym9vdC1jb25maWcuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjA2MWFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdWJvb3QtY29uZmlnLmJiY2xhc3MKQEAgLTAsMCArMSw0OSBAQAorIyBIYW5kbGUgVS1Cb290IGNvbmZpZyBmb3IgYSBtYWNoaW5lCisjCisjIFRoZSBmb3JtYXQgdG8gc3BlY2lmeSBpdCwgaW4gdGhlIG1hY2hpbmUsIGlzOgorIworIyBVQk9PVF9DT05GSUcgPz89IDxkZWZhdWx0PgorIyBVQk9PVF9DT05GSUdbZm9vXSA9ICJjb25maWcsaW1hZ2VzIgorIworIyBvcgorIworIyBVQk9PVF9NQUNISU5FID0gImNvbmZpZyIKKyMKKyMgQ29weXJpZ2h0IDIwMTMsIDIwMTQgKEMpIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorCitweXRob24gKCkgeworICAgIHVib290bWFjaGluZSA9IGQuZ2V0VmFyKCJVQk9PVF9NQUNISU5FIiwgVHJ1ZSkKKyAgICB1Ym9vdGNvbmZpZ2ZsYWdzID0gZC5nZXRWYXJGbGFncygnVUJPT1RfQ09ORklHJykKKyAgICAjIFRoZSAiZG9jIiB2YXJmbGFnIGlzIHNwZWNpYWwsIHdlIGRvbid0IHdhbnQgdG8gc2VlIGl0IGhlcmUKKyAgICB1Ym9vdGNvbmZpZ2ZsYWdzLnBvcCgnZG9jJywgTm9uZSkKKworICAgIGlmIG5vdCB1Ym9vdG1hY2hpbmUgYW5kIG5vdCB1Ym9vdGNvbmZpZ2ZsYWdzOgorICAgICAgICBQTiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgICAgIEZJTEUgPSBvcy5wYXRoLmJhc2VuYW1lKGQuZ2V0VmFyKCJGSUxFIiwgVHJ1ZSkpCisgICAgICAgIGJiLmRlYnVnKDEsICJUbyBidWlsZCAlcywgc2VlICVzIGZvciBpbnN0cnVjdGlvbnMgb24gXAorICAgICAgICAgICAgICAgICBzZXR0aW5nIHVwIHlvdXIgbWFjaGluZSBjb25maWciICUgKFBOLCBGSUxFKSkKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIkVpdGhlciBVQk9PVF9NQUNISU5FIG9yIFVCT09UX0NPTkZJRyBtdXN0IGJlIHNldCBpbiB0aGUgJXMgbWFjaGluZSBjb25maWd1cmF0aW9uLiIgJSBkLmdldFZhcigiTUFDSElORSIsIFRydWUpKQorCisgICAgaWYgdWJvb3RtYWNoaW5lIGFuZCB1Ym9vdGNvbmZpZ2ZsYWdzOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiWW91IGNhbm5vdCB1c2UgVUJPT1RfTUFDSElORSBhbmQgVUJPT1RfQ09ORklHIGF0IHRoZSBzYW1lIHRpbWUuIikKKworICAgIGlmIG5vdCB1Ym9vdGNvbmZpZ2ZsYWdzOgorICAgICAgICByZXR1cm4KKworICAgIHVib290Y29uZmlnID0gKGQuZ2V0VmFyKCdVQk9PVF9DT05GSUcnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIGxlbih1Ym9vdGNvbmZpZykgPiAwOgorICAgICAgICBmb3IgY29uZmlnIGluIHVib290Y29uZmlnOgorICAgICAgICAgICAgZm9yIGYsIHYgaW4gdWJvb3Rjb25maWdmbGFncy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGNvbmZpZyA9PSBmOiAKKyAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSB2LnNwbGl0KCcsJykKKyAgICAgICAgICAgICAgICAgICAgaWYgaXRlbXNbMF0gYW5kIGxlbihpdGVtcykgPiAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoJ09ubHkgY29uZmlnLGltYWdlcyBjYW4gYmUgc3BlY2lmaWVkIScpCisgICAgICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdVQk9PVF9NQUNISU5FJywgJyAnICsgaXRlbXNbMF0pCisgICAgICAgICAgICAgICAgICAgICMgSU1BR0VfRlNUWVBFUyBhcHBlbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGl0ZW1zKSA+IDEgYW5kIGl0ZW1zWzFdOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIkFwcGVuZGluZyAnJXMnIHRvIElNQUdFX0ZTVFlQRVMuIiAlIGl0ZW1zWzFdKQorICAgICAgICAgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCAnICcgKyBpdGVtc1sxXSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICBlbGlmIGxlbih1Ym9vdGNvbmZpZykgPT0gMDoKKyAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgnWW91IG11c3Qgc2V0IGEgZGVmYXVsdCBpbiBVQk9PVF9DT05GSUcuJykKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VuaW5hdGl2ZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdW5pbmF0aXZlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEzOTFkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VuaW5hdGl2ZS5iYmNsYXNzCkBAIC0wLDAgKzEsNDQgQEAKK05BVElWRUxTQlNUUklORyA9ICJ1bml2ZXJzYWwiCisKK1VOSU5BVElWRV9MT0FERVIgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9L2xpYi9sZC1saW51eC14ODYtNjQuc28uMiIKKworYWRkaGFuZGxlciB1bmluYXRpdmVfZXZlbnRoYW5kbGVyCit1bmluYXRpdmVfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRTdGFydGVkIgorCitweXRob24gdW5pbmF0aXZlX2V2ZW50aGFuZGxlcigpIHsKKyAgICBsb2FkZXIgPSBlLmRhdGEuZ2V0VmFyKCJVTklOQVRJVkVfTE9BREVSIiwgVHJ1ZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobG9hZGVyKToKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgY21kID0gZS5kYXRhLmV4cGFuZCgibWtkaXIgLXAgJHtTVEFHSU5HX0RJUn07IGNkICR7U1RBR0lOR19ESVJ9OyB0YXIgLXhqZiAke0NPUkVCQVNFfS8ke0JVSUxEX0FSQ0h9LW5hdGl2ZXNkay1saWJjLnRhci5iejI7ICR7U1RBR0lOR19ESVJ9L3JlbG9jYXRlX3Nkay5weSAke1NUQUdJTkdfRElSX05BVElWRX0gJHtVTklOQVRJVkVfTE9BREVSfSAke1VOSU5BVElWRV9MT0FERVJ9ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wYXRjaGVsZi11bmluYXRpdmUiKQorICAgICAgICAjYmIud2FybigibmF0aXZlc2RrIGxpYiBleHRyYWN0aW9uOiAiICsgY21kKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoY21kLCBzaGVsbD1UcnVlKQorfQorCitTU1RBVEVQT1NUVU5QQUNLRlVOQ1NfYXBwZW5kID0gIiB1bmluYXRpdmVfY2hhbmdlaW50ZXJwIgorCitweXRob24gdW5pbmF0aXZlX2NoYW5nZWludGVycCAoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICBpbXBvcnQgc3RhdAorICAgIGltcG9ydCBvZS5xYQorCisgICAgaWYgbm90IChiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zc3NkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCkpOgorICAgICAgICByZXR1cm4KKworICAgIHNzdGF0ZWluc3QgPSBkLmdldFZhcignU1NUQVRFX0lOU1RESVInLCBUcnVlKQorICAgIGZvciB3YWxrcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhzc3RhdGVpbnN0KToKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKHdhbGtyb290LCBmaWxlKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHMgPSBvcy5zdGF0KGYpCisgICAgICAgICAgICBpZiBub3QgKChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhVU1IpIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhHUlApIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhPVEgpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxmID0gb2UucWEuRUxGRmlsZShmKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGVsZi5vcGVuKCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjYmIud2FybigicGF0Y2hlbGYtdW5pbmF0aXZlIC0tc2V0LWludGVycHJldGVyICVzICVzIiAlIChkLmdldFZhcigiVU5JTkFUSVZFX0xPQURFUiIsIFRydWUpLCBmKSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbCgicGF0Y2hlbGYtdW5pbmF0aXZlIC0tc2V0LWludGVycHJldGVyICVzICVzIiAlIChkLmdldFZhcigiVU5JTkFUSVZFX0xPQURFUiIsIFRydWUpLCBmKSwgc2hlbGw9VHJ1ZSkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2MxNjU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXBkYXRlLWFsdGVybmF0aXZlcy5iYmNsYXNzCkBAIC0wLDAgKzEsMjY3IEBACisjIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBoZWxwIHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHdoaWNoIGlzIHVzZWZ1bCB3aGVuCisjIG11bHRpcGxlIHNvdXJjZXMgcHJvdmlkZSBzYW1lIGNvbW1hbmQuIFlvdSBjYW4gdXNlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKyMgY29tbWFuZCBkaXJlY3RseSBpbiB5b3VyIHJlY2lwZSwgYnV0IGluIG1vc3QgY2FzZXMgdGhpcyBjbGFzcyBzaW1wbGlmaWVzCisjIHRoYXQgam9iLgorIworIyBUbyB1c2UgdGhpcyBjbGFzcyBhIG51bWJlciBvZiB2YXJpYWJsZXMgc2hvdWxkIGJlIGRlZmluZWQ6CisjCisjIExpc3QgYWxsIG9mIHRoZSBhbHRlcm5hdGl2ZXMgbmVlZGVkIGJ5IGEgcGFja2FnZToKKyMgQUxURVJOQVRJVkVfPHBrZz4gPSAibmFtZTEgbmFtZTIgbmFtZTMgLi4uIgorIworIyAgIGkuZS4gQUxURVJOQVRJVkVfYnVzeWJveCA9ICJzaCBzZWQgdGVzdCBicmFja2V0IgorIworIyBUaGUgcGF0aG5hbWUgb2YgdGhlIGxpbmsKKyMgQUxURVJOQVRJVkVfTElOS19OQU1FW25hbWVdID0gInRhcmdldCIKKyMKKyMgICBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBiaW5hcnkgb25jZSBpdCdzIGJlZW4gaW5zdGFsbGVkIG9udG8gdGhlIHJ1bnRpbWUuCisjICAgVGhpcyBuYW1lIGlzIGdsb2JhbCB0byBhbGwgc3BsaXQgcGFja2FnZXMgaW4gdGhpcyByZWNpcGUsIGFuZCBzaG91bGQgbWF0Y2gKKyMgICBvdGhlciByZWNpcGVzIHdpdGggdGhlIHNhbWUgZnVuY3Rpb25hbGl0eS4KKyMgICBpLmUuIEFMVEVSTkFUSVZFX0xJTktfTkFNRVticmFja2V0XSA9ICIvdXNyL2Jpbi9bIgorIworIyBOT1RFOiBJZiBBTFRFUk5BVElWRV9MSU5LX05BTUUgaXMgbm90IGRlZmluZWQsIGl0IGRlZmF1bHRzIHRvICR7YmluZGlyfS9uYW1lCisjCisjIFRoZSBkZWZhdWx0IGxpbmsgdG8gY3JlYXRlIGZvciBhbGwgdGFyZ2V0cworIyBBTFRFUk5BVElWRV9UQVJHRVQgPSAidGFyZ2V0IgorIworIyAgIFRoaXMgaXMgdXNlZnVsIGluIGEgbXVsdGljYWxsIGJpbmFyeSBjYXNlCisjICAgaS5lLiBBTFRFUk5BVElWRV9UQVJHRVQgPSAiL2Jpbi9idXN5Ym94IgorIworIyBBIG5vbi1kZWZhdWx0IGxpbmsgdG8gY3JlYXRlIGZvciBhIHRhcmdldAorIyBBTFRFUk5BVElWRV9UQVJHRVRbbmFtZV0gPSAidGFyZ2V0IgorIworIyAgIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGJpbmFyeSBhcyBpdCdzIGJlZW4gaW5zdGFsbCBieSBkb19pbnN0YWxsCisjICAgaS5lLiBBTFRFUk5BVElWRV9UQVJHRVRbc2hdID0gIi9iaW4vYmFzaCIKKyMKKyMgQSBwYWNrYWdlIHNwZWNpZmljIGxpbmsgZm9yIGEgdGFyZ2V0CisjIEFMVEVSTkFUSVZFX1RBUkdFVF88cGtnPltuYW1lXSA9ICJ0YXJnZXQiCisjCisjICAgVGhpcyBpcyB1c2VmdWwgd2hlbiBhIHJlY2lwZSBwcm92aWRlcyBtdWx0aXBsZSBhbHRlcm5hdGl2ZXMgZm9yIHRoZQorIyAgIHNhbWUgaXRlbS4KKyMKKyMgTk9URTogSWYgQUxURVJOQVRJVkVfVEFSR0VUIGlzIG5vdCBkZWZpbmVkLCBpdCB3aWxsIGluaGVyaXQgdGhlIHZhbHVlCisjIGZyb20gQUxURVJOQVRJVkVfTElOS19OQU1FLgorIworIyBOT1RFOiBJZiB0aGUgQUxURVJOQVRJVkVfTElOS19OQU1FIGFuZCBBTFRFUk5BVElWRV9UQVJHRVQgYXJlIHRoZSBzYW1lLAorIyBBTFRFUk5BVElWRV9UQVJHRVQgd2lsbCBoYXZlICcue0JQTn0nIGFwcGVuZGVkIHRvIGl0LiAgSWYgdGhlIGZpbGUKKyMgcmVmZXJlbmNlZCBoYXMgbm90IGJlZW4gcmVuYW1lZCwgaXQgd2lsbCBhbHNvIGJlIHJlbmFtZWQuICAoVGhpcyBhdm9pZHMKKyMgdGhlIG5lZWQgdG8gcmVuYW1lIGFsdGVybmF0aXZlIGZpbGVzIGluIHRoZSBkb19pbnN0YWxsIHN0ZXAsIGJ1dCBzdGlsbAorIyBzdXBwb3J0cyBpdCBpZiBuZWNlc3NhcnkgZm9yIHNvbWUgcmVhc29uLikKKyMKKyMgVGhlIGRlZmF1bHQgcHJpb3JpdHkgZm9yIGFueSBhbHRlcm5hdGl2ZXMKKyMgQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAicHJpb3JpdHkiCisjCisjICAgaS5lLiBkZWZhdWx0IGlzIEFMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwIgorIworIyBUaGUgbm9uLWRlZmF1bHQgcHJpb3JpdHkgZm9yIGEgc3BlY2lmaWMgdGFyZ2V0CisjIEFMVEVSTkFUSVZFX1BSSU9SSVRZW25hbWVdID0gInByaW9yaXR5IgorIworIyBUaGUgcGFja2FnZSBwcmlvcml0eSBmb3IgYSBzcGVjaWZpYyB0YXJnZXQKKyMgQUxURVJOQVRJVkVfUFJJT1JJVFlfPHBrZz5bbmFtZV0gPSAicHJpb3JpdHkiCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwIgorCisjIFdlIG5lZWQgc3BlY2lhbCBwcm9jZXNzaW5nIGZvciB2YXJkZXBzIGJlY2F1c2UgaXQgY2FuIG5vdCB3b3JrIG9uCisjIG1vZGlmaWVkIGZsYWcgdmFsdWVzLiAgU28gd2UgYWdyZWdhdGUgdGhlIGZsYWdzIGludG8gYSBuZXcgdmFyaWFibGUKKyMgYW5kIGluY2x1ZGUgdGhhdCB2YWlyYWJsZSBpbiB0aGUgc2V0LgorVVBEQUxUVkFSUyAgPSAiQUxURVJOQVRJVkUgQUxURVJOQVRJVkVfTElOS19OQU1FIEFMVEVSTkFUSVZFX1RBUkdFVCBBTFRFUk5BVElWRV9QUklPUklUWSIKKworZGVmIGdlbl91cGRhdGVhbHRlcm5hdGl2ZXN2YXJkZXBzKGQpOgorICAgIHBrZ3MgPSAoZC5nZXRWYXIoIlBBQ0tBR0VTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICB2YXJzID0gKGQuZ2V0VmFyKCJVUERBTFRWQVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgICMgRmlyc3QgY29tcHV0ZSB0aGVtIGZvciBub25fcGtnIHZlcnNpb25zCisgICAgZm9yIHYgaW4gdmFyczoKKyAgICAgICAgZm9yIGZsYWcgaW4gKGQuZ2V0VmFyRmxhZ3Modikgb3Ige30pOgorICAgICAgICAgICAgaWYgZmxhZyA9PSAiZG9jIiBvciBmbGFnID09ICJ2YXJkZXBzIiBvciBmbGFnID09ICJ2YXJkZXBzZXhwIjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZC5hcHBlbmRWYXIoJyVzX1ZBUkRFUFMnICUgKHYpLCAnICVzOiVzJyAlIChmbGFnLCBkLmdldFZhckZsYWcodiwgZmxhZywgRmFsc2UpKSkKKworICAgIGZvciBwIGluIHBrZ3M6CisgICAgICAgIGZvciB2IGluIHZhcnM6CisgICAgICAgICAgICBmb3IgZmxhZyBpbiAoZC5nZXRWYXJGbGFncygiJXNfJXMiICUgKHYscCkpIG9yIHt9KToKKyAgICAgICAgICAgICAgICBpZiBmbGFnID09ICJkb2MiIG9yIGZsYWcgPT0gInZhcmRlcHMiIG9yIGZsYWcgPT0gInZhcmRlcHNleHAiOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyKCclc19WQVJERVBTXyVzJyAlICh2LHApLCAnICVzOiVzJyAlIChmbGFnLCBkLmdldFZhckZsYWcoJyVzXyVzJyAlICh2LHApLCBmbGFnLCBGYWxzZSkpKQorCitkZWYgdWFfZXh0ZW5kX2RlcGVuZHMoZCk6CisgICAgaWYgbm90ICd2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMnIGluIGQuZ2V0VmFyKCdQUk9WSURFUycsIFRydWUpOgorICAgICAgICBkLmFwcGVuZFZhcignREVQRU5EUycsICcgdmlydHVhbC8ke01MUFJFRklYfXVwZGF0ZS1hbHRlcm5hdGl2ZXMnKQorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgIyBVcGRhdGUgQWx0ZXJuYXRpdmVzIG9ubHkgd29ya3Mgb24gdGFyZ2V0IHBhY2thZ2VzLi4uCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgb3IgXAorICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKSBvciBcCisgICAgICAgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MtY2FuYWRpYW4nLCBkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIGNvbXB1dGUgc3BlY2lhbCB2YXJkZXBzCisgICAgZ2VuX3VwZGF0ZWFsdGVybmF0aXZlc3ZhcmRlcHMoZCkKKworICAgICMgZXh0ZW5kIHRoZSBkZXBlbmRzIHRvIGluY2x1ZGUgdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzCisgICAgdWFfZXh0ZW5kX2RlcGVuZHMoZCkKK30KKworZGVmIGdlbl91cGRhdGVhbHRlcm5hdGl2ZXN2YXJzKGQpOgorICAgIHJldCA9IFtdCisgICAgcGtncyA9IChkLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIHZhcnMgPSAoZC5nZXRWYXIoIlVQREFMVFZBUlMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgZm9yIHYgaW4gdmFyczoKKyAgICAgICAgcmV0LmFwcGVuZCh2ICsgIl9WQVJERVBTIikKKworICAgIGZvciBwIGluIHBrZ3M6CisgICAgICAgIGZvciB2IGluIHZhcnM6CisgICAgICAgICAgICByZXQuYXBwZW5kKHYgKyAiXyIgKyBwKQorICAgICAgICAgICAgcmV0LmFwcGVuZCh2ICsgIl9WQVJERVBTXyIgKyBwKQorICAgIHJldHVybiAiICIuam9pbihyZXQpCisKKyMgTm93IHRoZSBuZXcgc3R1ZmYsIHdlIHVzZSBhIGN1c3RvbSBmdW5jdGlvbiB0byBnZW5lcmF0ZSB0aGUgcmlnaHQgdmFsdWVzCitwb3B1bGF0ZV9wYWNrYWdlc1t2YXJkZXBzXSArPSAiJHtVUERBTFRWQVJTfSAke0BnZW5fdXBkYXRlYWx0ZXJuYXRpdmVzdmFycyhkKX0iCisKKyMgV2UgbmVlZCB0byBkbyB0aGUgcmVuYW1lIGFmdGVyIHRoZSBpbWFnZSBjcmVhdGlvbiBzdGVwLCBidXQgYmVmb3JlCisjIHRoZSBzcGxpdCBhbmQgc3RyaXAgc3RlcHMuLiAgcGFja2FnZWNvcHkgc2VlbXMgdG8gYmUgdGhlIGVhcmxpZXN0IHJlYXNvbmFibGUKKyMgcGxhY2UuCitweXRob24gcGVyZm9ybV9wYWNrYWdlY29weV9hcHBlbmQgKCkgeworICAgICMgQ2hlY2sgZm9yIGRlcHJlY2F0ZWQgdXNhZ2UuLi4KKyAgICBwbiA9IGQuZ2V0VmFyKCdCUE4nLCBUcnVlKQorICAgIGlmIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9MSU5LUycsIFRydWUpICE9IE5vbmU6CisgICAgICAgIGJiLmZhdGFsKCclczogVXNlIG9mIEFMVEVSTkFUSVZFX0xJTktTL0FMVEVSTkFUSVZFX1BBVEgvQUxURVJOQVRJVkVfTkFNRSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLCBwbGVhc2UgY29udmVydCB0byB0aGUgdXBkYXRlZCBzeW50YXgsIHNlZSB1cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3MgZm9yIG1vcmUgaW5mby4nICUgcG4pCisKKyAgICAjIERvIGFjdHVhbCB1cGRhdGUgYWx0ZXJuYXRpdmVzIHByb2Nlc3NpbmcKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAjIElmIHRoZSBzcmMgPT0gZGVzdCwgd2Uga25vdyB3ZSBuZWVkIHRvIHJlbmFtZSB0aGUgZGVzdCBieSBhcHBlbmRpbmcgJHtCUE59CisgICAgICAgIGxpbmtfcmVuYW1lID0ge30KKyAgICAgICAgZm9yIGFsdF9uYW1lIGluIChkLmdldFZhcignQUxURVJOQVRJVkVfJXMnICUgcGtnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGFsdF9saW5rICAgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgYWx0X25hbWUsIFRydWUpCisgICAgICAgICAgICBpZiBub3QgYWx0X2xpbms6CisgICAgICAgICAgICAgICAgYWx0X2xpbmsgPSAiJXMvJXMiICUgKGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSwgYWx0X25hbWUpCisgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBhbHRfbmFtZSwgYWx0X2xpbmspCisKKyAgICAgICAgICAgIGFsdF90YXJnZXQgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgYWx0X25hbWUsIFRydWUpIG9yIGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUJywgYWx0X25hbWUsIFRydWUpCisgICAgICAgICAgICBhbHRfdGFyZ2V0ICAgPSBhbHRfdGFyZ2V0IG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUJywgVHJ1ZSkgb3IgYWx0X2xpbmsKKyAgICAgICAgICAgICMgU29tZXRpbWVzIGFsdF90YXJnZXQgaXMgc3BlY2lmaWVkIGFzIHJlbGF0aXZlIHRvIHRoZSBsaW5rIG5hbWUuCisgICAgICAgICAgICBhbHRfdGFyZ2V0ICAgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGFsdF9saW5rKSwgYWx0X3RhcmdldCkKKworICAgICAgICAgICAgIyBJZiB0aGUgbGluayBhbmQgdGFyZ2V0IGFyZSB0aGUgc2FtZSBuYW1lLCB3ZSBuZWVkIHRvIHJlbmFtZSB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgaWYgYWx0X2xpbmsgPT0gYWx0X3RhcmdldDoKKyAgICAgICAgICAgICAgICBzcmMgPSAnJXMvJXMnICUgKHBrZ2Rlc3QsIGFsdF90YXJnZXQpCisgICAgICAgICAgICAgICAgYWx0X3RhcmdldF9yZW5hbWUgPSAnJXMuJXMnICUgKGFsdF90YXJnZXQsIHBuKQorICAgICAgICAgICAgICAgIGRlc3QgPSAnJXMvJXMnICUgKHBrZ2Rlc3QsIGFsdF90YXJnZXRfcmVuYW1lKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhkZXN0KToKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgnJXM6IEFscmVhZHkgcmVuYW1lZDogJXMnICUgKHBuLCBhbHRfdGFyZ2V0X3JlbmFtZSkpCisgICAgICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmxleGlzdHMoc3JjKToKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoc3JjKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRGVsYXkgcmVuYW1lIG9mIGxpbmtzCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rX3JlbmFtZVthbHRfdGFyZ2V0XSA9IGFsdF90YXJnZXRfcmVuYW1lCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCclczogUmVuYW1lICVzIC0+ICVzJyAlIChwbiwgYWx0X3RhcmdldCwgYWx0X3RhcmdldF9yZW5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKHNyYywgZGVzdCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogYWx0ZXJuYXRpdmUgdGFyZ2V0ICglcyBvciAlcykgZG9lcyBub3QgZXhpc3QsIHNraXBwaW5nLi4uIiAlIChwbiwgYWx0X3RhcmdldCwgYWx0X3RhcmdldF9yZW5hbWUpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgYWx0X25hbWUsIGFsdF90YXJnZXRfcmVuYW1lKQorCisgICAgICAgICMgUHJvY2VzcyBkZWxheWVkIGxpbmsgbmFtZXMKKyAgICAgICAgIyBEbyB0aGVzZSBhZnRlciBvdGhlciByZW5hbWVzIHNvIHdlIGNhbiBjb3JyZWN0IGJyb2tlbiBsaW5rcworICAgICAgICBmb3IgYWx0X3RhcmdldCBpbiBsaW5rX3JlbmFtZToKKyAgICAgICAgICAgIHNyYyA9ICclcy8lcycgJSAocGtnZGVzdCwgYWx0X3RhcmdldCkKKyAgICAgICAgICAgIGRlc3QgPSAnJXMvJXMnICUgKHBrZ2Rlc3QsIGxpbmtfcmVuYW1lW2FsdF90YXJnZXRdKQorICAgICAgICAgICAgbGluayA9IG9zLnJlYWRsaW5rKHNyYykKKyAgICAgICAgICAgIGxpbmtfdGFyZ2V0ID0gb2UucGF0aC5yZWFscGF0aChzcmMsIHBrZ2Rlc3QsIFRydWUpCisKKyAgICAgICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhsaW5rX3RhcmdldCk6CisgICAgICAgICAgICAgICAgIyBPaywgdGhlIGxpbmtfdGFyZ2V0IGV4aXN0cywgd2UgY2FuIHJlbmFtZQorICAgICAgICAgICAgICAgIGJiLm5vdGUoJyVzOiBSZW5hbWUgKGxpbmspICVzIC0+ICVzJyAlIChwbiwgYWx0X3RhcmdldCwgbGlua19yZW5hbWVbYWx0X3RhcmdldF0pKQorICAgICAgICAgICAgICAgIG9zLnJlbmFtZShzcmMsIGRlc3QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVHJ5IHRvIHJlc29sdmUgdGhlIGJyb2tlbiBsaW5rIHRvIGxpbmsuJHtCUE59CisgICAgICAgICAgICAgICAgbGlua19tYXliZSA9ICclcy4lcycgJSAob3MucmVhZGxpbmsoc3JjKSwgcG4pCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5sZXhpc3RzKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3JjKSwgbGlua19tYXliZSkpOgorICAgICAgICAgICAgICAgICAgICAjIE9rLCB0aGUgcmVuYW1lZCBsaW5rIHRhcmdldCBleGlzdHMuLiBjcmVhdGUgYSBuZXcgbGluaywgYW5kIHJlbW92ZSB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgnJXM6IENyZWF0aW5nIG5ldyBsaW5rICVzIC0+ICVzJyAlIChwbiwgbGlua19yZW5hbWVbYWx0X3RhcmdldF0sIGxpbmtfbWF5YmUpKQorICAgICAgICAgICAgICAgICAgICBvcy5zeW1saW5rKGxpbmtfbWF5YmUsIGRlc3QpCisgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhzcmMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybignJXM6IFVuYWJsZSB0byByZXNvbHZlIGRhbmdsaW5nIHN5bWxpbms6ICVzJyAlIChwbiwgYWx0X3RhcmdldCkpCit9CisKK1BBQ0tBR0VTUExJVEZVTkNTX3ByZXBlbmQgPSAicG9wdWxhdGVfcGFja2FnZXNfdXBkYXRlYWx0ZXJuYXRpdmVzICIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZWFsdGVybmF0aXZlcyAoKSB7CisgICAgcG4gPSBkLmdldFZhcignQlBOJywgVHJ1ZSkKKworICAgICMgRG8gYWN0dWFsIHVwZGF0ZSBhbHRlcm5hdGl2ZXMgcHJvY2Vzc2luZworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgZm9yIHBrZyBpbiAoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICMgQ3JlYXRlIHBvc3QgaW5zdGFsbC9yZW1vdmFsIHNjcmlwdHMKKyAgICAgICAgYWx0X3NldHVwX2xpbmtzID0gIiIKKyAgICAgICAgYWx0X3JlbW92ZV9saW5rcyA9ICIiCisgICAgICAgIGZvciBhbHRfbmFtZSBpbiAoZC5nZXRWYXIoJ0FMVEVSTkFUSVZFXyVzJyAlIHBrZywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBhbHRfbGluayAgICAgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIGFsdF9uYW1lLCBUcnVlKQorICAgICAgICAgICAgYWx0X3RhcmdldCAgID0gZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBhbHRfbmFtZSwgVHJ1ZSkgb3IgZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBhbHRfbmFtZSwgVHJ1ZSkKKyAgICAgICAgICAgIGFsdF90YXJnZXQgICA9IGFsdF90YXJnZXQgb3IgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBUcnVlKSBvciBhbHRfbGluaworICAgICAgICAgICAgIyBTb21ldGltZXMgYWx0X3RhcmdldCBpcyBzcGVjaWZpZWQgYXMgcmVsYXRpdmUgdG8gdGhlIGxpbmsgbmFtZS4KKyAgICAgICAgICAgIGFsdF90YXJnZXQgICA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYWx0X2xpbmspLCBhbHRfdGFyZ2V0KQorCisgICAgICAgICAgICBhbHRfcHJpb3JpdHkgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1BSSU9SSVRZXyVzJyAlIHBrZywgIGFsdF9uYW1lLCBUcnVlKSBvciBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1BSSU9SSVRZJywgIGFsdF9uYW1lLCBUcnVlKQorICAgICAgICAgICAgYWx0X3ByaW9yaXR5ID0gYWx0X3ByaW9yaXR5IG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9QUklPUklUWV8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9QUklPUklUWScsIFRydWUpCisKKyAgICAgICAgICAgICMgVGhpcyBzaG91bGRuJ3QgdHJpZ2dlciwgYXMgaXQgc2hvdWxkIGhhdmUgYmVlbiByZXNvbHZlZCBlYXJsaWVyIQorICAgICAgICAgICAgaWYgYWx0X2xpbmsgPT0gYWx0X3RhcmdldDoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCdhbHRfbGluayA9PSBhbHRfdGFyZ2V0OiAlcyA9PSAlcyAtLSBjb3JyZWN0aW5nLCB0aGlzIHNob3VsZCBub3QgaGFwcGVuIScgJSAoYWx0X2xpbmssIGFsdF90YXJnZXQpKQorICAgICAgICAgICAgICAgIGFsdF90YXJnZXQgPSAnJXMuJXMnICUgKGFsdF90YXJnZXQsIHBuKQorCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5sZXhpc3RzKCclcy8lcycgJSAocGtnZGVzdCwgYWx0X3RhcmdldCkpOgorICAgICAgICAgICAgICAgIGJiLndhcm4oJyVzOiBOT1QgYWRkaW5nIGFsdGVybmF0aXZlIHByb3ZpZGUgJXM6ICVzIGRvZXMgbm90IGV4aXN0JyAlIChwbiwgYWx0X2xpbmssIGFsdF90YXJnZXQpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgRGVmYXVsdCB0byBnZW5lcmF0ZSBzaGVsbCBzY3JpcHQuLiBldmVudHVhbGx5IHdlIG1heSB3YW50IHRvIGNoYW5nZSB0aGlzLi4uCisgICAgICAgICAgICBhbHRfdGFyZ2V0ID0gb3MucGF0aC5ub3JtcGF0aChhbHRfdGFyZ2V0KQorCisgICAgICAgICAgICBhbHRfc2V0dXBfbGlua3MgICs9ICdcdHVwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1pbnN0YWxsICVzICVzICVzICVzXG4nICUgKGFsdF9saW5rLCBhbHRfbmFtZSwgYWx0X3RhcmdldCwgYWx0X3ByaW9yaXR5KQorICAgICAgICAgICAgYWx0X3JlbW92ZV9saW5rcyArPSAnXHR1cGRhdGUtYWx0ZXJuYXRpdmVzIC0tcmVtb3ZlICAlcyAlc1xuJyAlIChhbHRfbmFtZSwgYWx0X3RhcmdldCkKKworICAgICAgICBpZiBhbHRfc2V0dXBfbGlua3M6CisgICAgICAgICAgICAjIFJERVBFTkRTIHNldHVwCisgICAgICAgICAgICBwcm92aWRlciA9IGQuZ2V0VmFyKCdWSVJUVUFMLVJVTlRJTUVfdXBkYXRlLWFsdGVybmF0aXZlcycsIFRydWUpCisgICAgICAgICAgICBpZiBwcm92aWRlcjoKKyAgICAgICAgICAgICAgICAjYmIubm90ZSgnYWRkaW5nIHJ1bnRpbWUgcmVxdWlyZW1lbnQgZm9yIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgZm9yICVzJyAlIHBrZykKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhcignUkRFUEVORFNfJXMnICUgcGtnLCAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyBwcm92aWRlcikKKworICAgICAgICAgICAgYmIubm90ZSgnYWRkaW5nIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgY2FsbHMgdG8gcG9zdGluc3QvcHJlcm0gZm9yICVzJyAlIHBrZykKKyAgICAgICAgICAgIGJiLm5vdGUoJyVzJyAlIGFsdF9zZXR1cF9saW5rcykKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpIG9yICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHBvc3RpbnN0ICs9IGFsdF9zZXR1cF9saW5rcworICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorCisgICAgICAgICAgICBiYi5ub3RlKCclcycgJSBhbHRfcmVtb3ZlX2xpbmtzKQorICAgICAgICAgICAgcHJlcm0gPSBkLmdldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgVHJ1ZSkgb3IgJyMhL2Jpbi9zaFxuJworICAgICAgICAgICAgcHJlcm0gKz0gYWx0X3JlbW92ZV9saW5rcworICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wcmVybV8lcycgJSBwa2csIHByZXJtKQorfQorCitweXRob24gcGFja2FnZV9kb19maWxlZGVwc19hcHBlbmQgKCkgeworICAgIHBuID0gZC5nZXRWYXIoJ0JQTicsIFRydWUpCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgZm9yIGFsdF9uYW1lIGluIChkLmdldFZhcignQUxURVJOQVRJVkVfJXMnICUgcGtnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGFsdF9saW5rICAgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgYWx0X25hbWUsIFRydWUpCisgICAgICAgICAgICBhbHRfdGFyZ2V0ICAgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIGFsdF9uYW1lLCBUcnVlKSBvciBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIGFsdF9uYW1lLCBUcnVlKQorICAgICAgICAgICAgYWx0X3RhcmdldCAgID0gYWx0X3RhcmdldCBvciBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIFRydWUpIG9yIGFsdF9saW5rCisKKyAgICAgICAgICAgIGlmIGFsdF9saW5rID09IGFsdF90YXJnZXQ6CisgICAgICAgICAgICAgICAgYmIud2FybignYWx0X2xpbmsgPT0gYWx0X3RhcmdldDogJXMgPT0gJXMnICUgKGFsdF9saW5rLCBhbHRfdGFyZ2V0KSkKKyAgICAgICAgICAgICAgICBhbHRfdGFyZ2V0ID0gJyVzLiVzJyAlIChhbHRfdGFyZ2V0LCBwbikKKworICAgICAgICAgICAgaWYgbm90IG9zLnBhdGgubGV4aXN0cygnJXMvJXMvJXMnICUgKHBrZ2Rlc3QsIHBrZywgYWx0X3RhcmdldCkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgQWRkIGZpbGUgcHJvdmlkZQorICAgICAgICAgICAgdHJhbnNfdGFyZ2V0ID0gb2UucGFja2FnZS5maWxlX3RyYW5zbGF0ZShhbHRfdGFyZ2V0KQorICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ0ZJTEVSUFJPVklERVNfJXNfJXMnICUgKHRyYW5zX3RhcmdldCwgcGtnKSwgIiAiICsgYWx0X2xpbmspCisgICAgICAgICAgICBpZiBub3QgdHJhbnNfdGFyZ2V0IGluIChkLmdldFZhcignRklMRVJQUk9WSURFU0ZMSVNUXyVzJyAlIHBrZywgVHJ1ZSkgb3IgIiIpOgorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdGSUxFUlBST1ZJREVTRkxJU1RfJXMnICUgcGtnLCAiICIgKyB0cmFuc190YXJnZXQpCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VwZGF0ZS1yYy5kLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91cGRhdGUtcmMuZC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMGE3NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91cGRhdGUtcmMuZC5iYmNsYXNzCkBAIC0wLDAgKzEsMTMzIEBACitVUERBVEVSQ1BOID89ICIke1BOfSIKKworREVQRU5EU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiB1cGRhdGUtcmMuZC1uYXRpdmUgdXBkYXRlLXJjLmQgaW5pdHNjcmlwdHMiCitVUERBVEVSQ0QgPSAidXBkYXRlLXJjLmQiCitVUERBVEVSQ0RfY2xhc3MtY3Jvc3MgPSAiIgorVVBEQVRFUkNEX2NsYXNzLW5hdGl2ZSA9ICIiCitVUERBVEVSQ0RfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworSU5JVFNDUklQVF9QQVJBTVMgPz0gImRlZmF1bHRzIgorCitJTklUX0RfRElSID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kIgorCit1cGRhdGVyY2RfcHJlaW5zdCgpIHsKK2lmIFsgLXogIiREIiAtYSAtZiAiJHtJTklUX0RfRElSfS8ke0lOSVRTQ1JJUFRfTkFNRX0iIF07IHRoZW4KKwkke0lOSVRfRF9ESVJ9LyR7SU5JVFNDUklQVF9OQU1FfSBzdG9wCitmaQoraWYgdHlwZSB1cGRhdGUtcmMuZCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJT1BUPSItZiAtciAkRCIKKwllbHNlCisJCU9QVD0iLWYiCisJZmkKKwl1cGRhdGUtcmMuZCAkT1BUICR7SU5JVFNDUklQVF9OQU1FfSByZW1vdmUKK2ZpCit9CisKK3VwZGF0ZXJjZF9wb3N0aW5zdCgpIHsKK2lmIHR5cGUgdXBkYXRlLXJjLmQgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCU9QVD0iLXIgJEQiCisJZWxzZQorCQlPUFQ9Ii1zIgorCWZpCisJdXBkYXRlLXJjLmQgJE9QVCAke0lOSVRTQ1JJUFRfTkFNRX0gJHtJTklUU0NSSVBUX1BBUkFNU30KK2ZpCit9CisKK3VwZGF0ZXJjZF9wcmVybSgpIHsKK2lmIFsgLXogIiREIiBdOyB0aGVuCisJJHtJTklUX0RfRElSfS8ke0lOSVRTQ1JJUFRfTkFNRX0gc3RvcAorZmkKK30KKwordXBkYXRlcmNkX3Bvc3RybSgpIHsKK2lmIHR5cGUgdXBkYXRlLXJjLmQgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCU9QVD0iLWYgLXIgJEQiCisJZWxzZQorCQlPUFQ9Ii1mIgorCWZpCisJdXBkYXRlLXJjLmQgJE9QVCAke0lOSVRTQ1JJUFRfTkFNRX0gcmVtb3ZlCitmaQorfQorCisKK2RlZiB1cGRhdGVfcmNfYWZ0ZXJfcGFyc2UoZCk6CisgICAgaWYgZC5nZXRWYXIoJ0lOSVRTQ1JJUFRfUEFDS0FHRVMnLCBGYWxzZSkgPT0gTm9uZToKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0lOSVRTQ1JJUFRfTkFNRScsIEZhbHNlKSA9PSBOb25lOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgaW5oZXJpdHMgdXBkYXRlLXJjLmQgYnV0IGRvZXNuJ3Qgc2V0IElOSVRTQ1JJUFRfTkFNRSIgJSBkLmdldFZhcignRklMRScsIEZhbHNlKSkKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0lOSVRTQ1JJUFRfUEFSQU1TJywgRmFsc2UpID09IE5vbmU6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyBpbmhlcml0cyB1cGRhdGUtcmMuZCBidXQgZG9lc24ndCBzZXQgSU5JVFNDUklQVF9QQVJBTVMiICUgZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSkpCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICB1cGRhdGVfcmNfYWZ0ZXJfcGFyc2UoZCkKK30KKworUEFDS0FHRVNQTElURlVOQ1NfcHJlcGVuZCA9ICJwb3B1bGF0ZV9wYWNrYWdlc191cGRhdGVyY2QgIgorUEFDS0FHRVNQTElURlVOQ1NfcmVtb3ZlX2NsYXNzLW5hdGl2ZXNkayA9ICJwb3B1bGF0ZV9wYWNrYWdlc191cGRhdGVyY2QgIgorCitwb3B1bGF0ZV9wYWNrYWdlc191cGRhdGVyY2RbdmFyZGVwc10gKz0gInVwZGF0ZXJjZF9wcmVybSB1cGRhdGVyY2RfcG9zdHJtIHVwZGF0ZXJjZF9wcmVpbnN0IHVwZGF0ZXJjZF9wb3N0aW5zdCIKK3BvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZXJjZFt2YXJkZXBzZXhjbHVkZV0gKz0gIk9WRVJSSURFUyIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZXJjZCAoKSB7CisgICAgZGVmIHVwZGF0ZV9yY2RfYXV0b19kZXBlbmQocGtnKToKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIHBhdGggPSBkLmV4cGFuZCgiJHtEfSR7SU5JVF9EX0RJUn0vJHtJTklUU0NSSVBUX05BTUV9IikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHN0YXRlbWVudCA9ICJncmVwIC1xIC13ICcvZXRjL2luaXQuZC9mdW5jdGlvbnMnICVzIiAlIHBhdGgKKyAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKHN0YXRlbWVudCwgc2hlbGw9VHJ1ZSkgPT0gMDoKKyAgICAgICAgICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU18nICsgcGtnLCAnICVzaW5pdHNjcmlwdHMtZnVuY3Rpb25zJyAlIChtbHByZWZpeCkpCisKKyAgICBkZWYgdXBkYXRlX3JjZF9wYWNrYWdlKHBrZyk6CisgICAgICAgIGJiLmRlYnVnKDEsICdhZGRpbmcgdXBkYXRlLXJjLmQgY2FsbHMgdG8gcHJlaW5zdC9wb3N0aW5zdC9wcmVybS9wb3N0cm0gZm9yICVzJyAlIHBrZykKKworICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgVHJ1ZSkKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgIiVzOiVzIiAlIChwa2csIG92ZXJyaWRlcykpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIHVwZGF0ZV9yY2RfYXV0b19kZXBlbmQocGtnKQorCisgICAgICAgIHByZWluc3QgPSBkLmdldFZhcigncGtnX3ByZWluc3RfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcHJlaW5zdDoKKyAgICAgICAgICAgIHByZWluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHByZWluc3QgKz0gbG9jYWxkYXRhLmdldFZhcigndXBkYXRlcmNkX3ByZWluc3QnLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3ByZWluc3RfJXMnICUgcGtnLCBwcmVpbnN0KQorCisgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0aW5zdCArPSBsb2NhbGRhdGEuZ2V0VmFyKCd1cGRhdGVyY2RfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgcHJlcm0gPSBkLmdldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHByZXJtOgorICAgICAgICAgICAgcHJlcm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHByZXJtICs9IGxvY2FsZGF0YS5nZXRWYXIoJ3VwZGF0ZXJjZF9wcmVybScsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnLCBwcmVybSkKKworICAgICAgICBwb3N0cm0gPSBkLmdldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0cm06CisgICAgICAgICAgICAgICAgcG9zdHJtID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0cm0gKz0gbG9jYWxkYXRhLmdldFZhcigndXBkYXRlcmNkX3Bvc3RybScsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorCisgICAgICAgIGQuYXBwZW5kVmFyKCdSUkVDT01NRU5EU18nICsgcGtnLCAiICR7TUxQUkVGSVh9JHtVUERBVEVSQ0R9IikKKworICAgICMgQ2hlY2sgdGhhdCB0aGlzIGNsYXNzIGlzbid0IGJlaW5nIGluaGliaXRlZCAoZ2VuZXJhbGx5LCBieQorICAgICMgc3lzdGVtZC5iYmNsYXNzKSBiZWZvcmUgZG9pbmcgYW55IHdvcmsuCisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKSBvciBcCisgICAgICAgbm90IGQuZ2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgVHJ1ZSk6CisgICAgICAgIHBrZ3MgPSBkLmdldFZhcignSU5JVFNDUklQVF9QQUNLQUdFUycsIFRydWUpCisgICAgICAgIGlmIHBrZ3MgPT0gTm9uZToKKyAgICAgICAgICAgIHBrZ3MgPSBkLmdldFZhcignVVBEQVRFUkNQTicsIFRydWUpCisgICAgICAgICAgICBwYWNrYWdlcyA9IChkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICAgICAgaWYgbm90IHBrZ3MgaW4gcGFja2FnZXMgYW5kIHBhY2thZ2VzICE9IFtdOgorICAgICAgICAgICAgICAgIHBrZ3MgPSBwYWNrYWdlc1swXQorICAgICAgICBmb3IgcGtnIGluIHBrZ3Muc3BsaXQoKToKKyAgICAgICAgICAgIHVwZGF0ZV9yY2RfcGFja2FnZShwa2cpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91c2VyYWRkLXN0YXRpY2lkcy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXNlcmFkZC1zdGF0aWNpZHMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjFhNzBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXNlcmFkZC1zdGF0aWNpZHMuYmJjbGFzcwpAQCAtMCwwICsxLDI3NiBAQAorIyBJbiBvcmRlciB0byBzdXBwb3J0IGEgZGV0ZXJtaW5pc3RpYyBzZXQgb2YgJ2R5bmFtaWMnIHVzZXJzL2dyb3VwcywKKyMgd2UgbmVlZCBhIGZ1bmN0aW9uIHRvIHJlZm9ybWF0IHRoZSBwYXJhbXMgYmFzZWQgb24gYSBzdGF0aWMgZmlsZQorZGVmIHVwZGF0ZV91c2VyYWRkX3N0YXRpY19jb25maWcoZCk6CisgICAgaW1wb3J0IGFyZ3BhcnNlCisgICAgaW1wb3J0IHJlCisKKyAgICBjbGFzcyBteUFyZ3VtZW50UGFyc2VyKCBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlciApOgorICAgICAgICBkZWYgX3ByaW50X21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgZmlsZT1Ob25lKToKKyAgICAgICAgICAgIGJiLndhcm4oIiVzIC0gJXM6ICVzIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCBtZXNzYWdlKSkKKworICAgICAgICAjIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4uLgorICAgICAgICBkZWYgZXhpdChzZWxmLCBzdGF0dXM9MCwgbWVzc2FnZT1Ob25lKToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlIG9yICgiJXMgLSAlczogdXNlcmFkZC5iYmNsYXNzOiBBcmd1bWVudCBwYXJzaW5nIGV4aXRlZCIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHBrZykpCisgICAgICAgICAgICBlcnJvcihtZXNzYWdlKQorCisgICAgICAgIGRlZiBlcnJvcihzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQobWVzc2FnZSkKKworICAgICMgV2UgcGFyc2UgYW5kIHJld3JpdGUgdGhlIHVzZXJhZGQgY29tcG9uZW50cworICAgIGRlZiByZXdyaXRlX3VzZXJhZGQocGFyYW1zKToKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvbWVzIGZyb20gLS1oZWxwIG9uIHVzZXJhZGQgZnJvbSBzaGFkb3cKKyAgICAgICAgcGFyc2VyID0gbXlBcmd1bWVudFBhcnNlcihwcm9nPSd1c2VyYWRkJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWIiLCAiLS1iYXNlLWRpciIsIG1ldGF2YXI9IkJBU0VfRElSIiwgaGVscD0iYmFzZSBkaXJlY3RvcnkgZm9yIHRoZSBob21lIGRpcmVjdG9yeSBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItYyIsICItLWNvbW1lbnQiLCBtZXRhdmFyPSJDT01NRU5UIiwgaGVscD0iR0VDT1MgZmllbGQgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWQiLCAiLS1ob21lLWRpciIsIG1ldGF2YXI9IkhPTUVfRElSIiwgaGVscD0iaG9tZSBkaXJlY3Rvcnkgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLUQiLCAiLS1kZWZhdWx0cyIsIGhlbHA9InByaW50IG9yIGNoYW5nZSBkZWZhdWx0IHVzZXJhZGQgY29uZmlndXJhdGlvbiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1lIiwgIi0tZXhwaXJlZGF0ZSIsIG1ldGF2YXI9IkVYUElSRV9EQVRFIiwgaGVscD0iZXhwaXJhdGlvbiBkYXRlIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1mIiwgIi0taW5hY3RpdmUiLCBtZXRhdmFyPSJJTkFDVElWRSIsIGhlbHA9InBhc3N3b3JkIGluYWN0aXZpdHkgcGVyaW9kIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1nIiwgIi0tZ2lkIiwgbWV0YXZhcj0iR1JPVVAiLCBoZWxwPSJuYW1lIG9yIElEIG9mIHRoZSBwcmltYXJ5IGdyb3VwIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1HIiwgIi0tZ3JvdXBzIiwgbWV0YXZhcj0iR1JPVVBTIiwgaGVscD0ibGlzdCBvZiBzdXBwbGVtZW50YXJ5IGdyb3VwcyBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItayIsICItLXNrZWwiLCBtZXRhdmFyPSJTS0VMX0RJUiIsIGhlbHA9InVzZSB0aGlzIGFsdGVybmF0aXZlIHNrZWxldG9uIGRpcmVjdG9yeSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1LIiwgIi0ta2V5IiwgbWV0YXZhcj0iS0VZPVZBTFVFIiwgaGVscD0ib3ZlcnJpZGUgL2V0Yy9sb2dpbi5kZWZzIGRlZmF1bHRzIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWwiLCAiLS1uby1sb2ctaW5pdCIsIGhlbHA9ImRvIG5vdCBhZGQgdGhlIHVzZXIgdG8gdGhlIGxhc3Rsb2cgYW5kIGZhaWxsb2cgZGF0YWJhc2VzIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLW0iLCAiLS1jcmVhdGUtaG9tZSIsIGhlbHA9ImNyZWF0ZSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLU0iLCAiLS1uby1jcmVhdGUtaG9tZSIsIGhlbHA9ImRvIG5vdCBjcmVhdGUgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1OIiwgIi0tbm8tdXNlci1ncm91cCIsIGhlbHA9ImRvIG5vdCBjcmVhdGUgYSBncm91cCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHVzZXIiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItbyIsICItLW5vbi11bmlxdWUiLCBoZWxwPSJhbGxvdyB0byBjcmVhdGUgdXNlcnMgd2l0aCBkdXBsaWNhdGUgKG5vbi11bmlxdWUgVUlEKSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1wIiwgIi0tcGFzc3dvcmQiLCBtZXRhdmFyPSJQQVNTV09SRCIsIGhlbHA9ImVuY3J5cHRlZCBwYXNzd29yZCBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItUiIsICItLXJvb3QiLCBtZXRhdmFyPSJDSFJPT1RfRElSIiwgaGVscD0iZGlyZWN0b3J5IHRvIGNocm9vdCBpbnRvIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXIiLCAiLS1zeXN0ZW0iLCBoZWxwPSJjcmVhdGUgYSBzeXN0ZW0gYWNjb3VudCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1zIiwgIi0tc2hlbGwiLCBtZXRhdmFyPSJTSEVMTCIsIGhlbHA9ImxvZ2luIHNoZWxsIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi11IiwgIi0tdWlkIiwgbWV0YXZhcj0iVUlEIiwgaGVscD0idXNlciBJRCBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItVSIsICItLXVzZXItZ3JvdXAiLCBoZWxwPSJjcmVhdGUgYSBncm91cCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHVzZXIiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCJMT0dJTiIsIGhlbHA9IkxvZ2luIG5hbWUgb2YgdGhlIG5ldyB1c2VyIikKKworICAgICAgICAjIFJldHVybiBhIGxpc3Qgb2YgY29uZmlndXJhdGlvbiBmaWxlcyBiYXNlZCBvbiBlaXRoZXIgdGhlIGRlZmF1bHQKKyAgICAgICAgIyBmaWxlcy9wYXNzd2Qgb3IgdGhlIGNvbnRlbnRzIG9mIFVTRVJBRERfVUlEX1RBQkxFUworICAgICAgICAjIHBhdGhzIGFyZSByZXN1bHZlZCB2aWEgQkJQQVRICisgICAgICAgIGRlZiBnZXRfcGFzc3dkX2xpc3QoZCk6CisgICAgICAgICAgICBzdHIgPSAiIgorICAgICAgICAgICAgYmJwYXRoID0gZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpCisgICAgICAgICAgICBwYXNzd2RfdGFibGVzID0gZC5nZXRWYXIoJ1VTRVJBRERfVUlEX1RBQkxFUycsIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcGFzc3dkX3RhYmxlczoKKyAgICAgICAgICAgICAgICBwYXNzd2RfdGFibGVzID0gJ2ZpbGVzL3Bhc3N3ZCcKKyAgICAgICAgICAgIGZvciBjb25mX2ZpbGUgaW4gcGFzc3dkX3RhYmxlcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHN0ciArPSAiICVzIiAlIGJiLnV0aWxzLndoaWNoKGJicGF0aCwgY29uZl9maWxlKQorICAgICAgICAgICAgcmV0dXJuIHN0cgorCisgICAgICAgIG5ld3BhcmFtcyA9IFtdCisgICAgICAgIGZvciBwYXJhbSBpbiByZS5zcGxpdCgnJydbIFx0XSo7WyBcdF0qKD89KD86W14nIl18J1teJ10qJ3wiW14iXSoiKSokKScnJywgcGFyYW1zKToKKyAgICAgICAgICAgIHBhcmFtID0gcGFyYW0uc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IHBhcmFtOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdWFhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MocmUuc3BsaXQoJycnWyBcdF0qKD89KD86W14nIl18J1teJ10qJ3wiW14iXSoiKSokKScnJywgcGFyYW0pKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzOiBVbmFibGUgdG8gcGFyc2UgYXJndW1lbnRzIGZvciBVU0VSQUREX1BBUkFNXyVzOiAnJXMnIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCBwYXJhbSkpCisKKyAgICAgICAgICAgICMgZmlsZXMvcGFzc3dkIG9yIHRoZSBjb250ZW50cyBvZiBVU0VSQUREX1VJRF9UQUJMRVMKKyAgICAgICAgICAgICMgVXNlIHRoZSBzdGFuZGFyZCBwYXNzd2QgbGF5b3V0OgorICAgICAgICAgICAgIyAgdXNlcm5hbWU6cGFzc3dvcmQ6dXNlcl9pZDpncm91cF9pZDpjb21tZW50OmhvbWVfZGlyZWN0b3J5OmxvZ2luX3NoZWxsCisgICAgICAgICAgICAjICh3ZSB3YW50IHRvIHByb2Nlc3MgaW4gcmV2ZXJzZSBvcmRlciwgYXMgJ2xhc3QgZm91bmQnIGluIHRoZSBsaXN0IHdpbnMpCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIElmIGEgZmllbGQgaXMgbGVmdCBibGFuaywgdGhlIG9yaWdpbmFsIHZhbHVlIHdpbGwgYmUgdXNlZC4gIFRoZSAndXNlcm5hbWUnCisgICAgICAgICAgICAjIGZpZWxkIGlzIHJlcXVpcmVkLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBOb3RlOiB3ZSBpZ25vcmUgdGhlIHBhc3N3b3JkIGZpZWxkLCBhcyBpbmNsdWRpbmcgZXZlbiB0aGUgaGFzaGVkIHBhc3N3b3JkCisgICAgICAgICAgICAjIGluIHRoZSB1c2VyYWRkIGNvbW1hbmQgbWF5IGludHJvZHVjZSBhIHNlY3VyaXR5IGhvbGUuICBJdCdzIGFzc3VtZWQgdGhhdAorICAgICAgICAgICAgIyBhbGwgbmV3IHVzZXJzIGdldCB0aGUgZGVmYXVsdCAoJyonIHdoaWNoIHByZXZlbnRzIGxvZ2luKSB1bnRpbCB0aGUgdXNlciBpcworICAgICAgICAgICAgIyBzcGVjaWZpY2FsbHkgY29uZmlndXJlZCBieSB0aGUgc3lzdGVtIGFkbWluLgorICAgICAgICAgICAgZm9yIGNvbmYgaW4gZ2V0X3Bhc3N3ZF9saXN0KGQpLnNwbGl0KClbOjotMV06CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29uZik6CisgICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKGNvbmYsICJyIikKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IGxpbmUucnN0cmlwKCkuc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmllbGRbMF0gPT0gdWFhcmdzLkxPR0lOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHVhYXJncy51aWQgYW5kIGZpZWxkWzJdIGFuZCAodWFhcmdzLnVpZCAhPSBmaWVsZFsyXSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzOiBDaGFuZ2luZyB1c2VybmFtZSAlcydzIHVpZCBmcm9tICglcykgdG8gKCVzKSwgdmVyaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZXMhIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgdWFhcmdzLkxPR0lOLCB1YWFyZ3MudWlkLCBmaWVsZFsyXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLnVpZCA9IFtmaWVsZFsyXSwgdWFhcmdzLnVpZF1bbm90IGZpZWxkWzJdXQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIHBvc3NpYmxlIGdyb3VwbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVW5sZXNzIHRoZSBncm91cCBuYW1lIChvciBnaWQpIGlzIHNwZWNpZmllZCwgd2UgYXNzdW1lIHRoYXQgdGhlIExPR0lOIGlzIHRoZSBncm91cG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBCeSBkZWZhdWx0IHRoZSBzeXN0ZW0gaGFzIGNyZWF0aW9uIG9mIHRoZSBtYXRjaGluZyBncm91cHMgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU28gaWYgdGhlIGltcGxpY2l0IHVzZXJuYW1lLWdyb3VwIGNyZWF0aW9uIGlzIG9uLCB0aGVuIHRoZSBpbXBsaWNpdCBncm91cG5hbWUgKExPR0lOKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaXMgdXNlZCwgYW5kIHdlIGRpc2FibGUgdGhlIHVzZXJfZ3JvdXAgb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MuZ3JvdXBuYW1lID0gW3VhYXJncy5naWQsIHVhYXJncy5MT0dJTl1bbm90IHVhYXJncy5naWQgb3IgdWFhcmdzLnVzZXJfZ3JvdXBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLmdyb3VwaWQgPSBbdWFhcmdzLmdpZCwgdWFhcmdzLmdyb3VwbmFtZV1bbm90IHVhYXJncy5naWRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLmdyb3VwaWQgPSBbZmllbGRbM10sIHVhYXJncy5ncm91cGlkXVtub3QgZmllbGRbM11dCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgdWFhcmdzLmdpZCBvciB1YWFyZ3MuZ2lkICE9IHVhYXJncy5ncm91cGlkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodWFhcmdzLmdyb3VwaWQgYW5kIHVhYXJncy5ncm91cGlkLmlzZGlnaXQoKSkgYW5kICh1YWFyZ3MuZ3JvdXBuYW1lIGFuZCB1YWFyZ3MuZ3JvdXBuYW1lLmlzZGlnaXQoKSkgYW5kICh1YWFyZ3MuZ3JvdXBpZCAhPSB1YWFyZ3MuZ3JvdXBuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2Ugd2FudCB0byBhZGQgYSBncm91cCwgYnV0IHdlIGRvbid0IGtub3cgaXQncyBuYW1lLi4uIHNvIHdlIGNhbid0IGFkZCB0aGUgZ3JvdXAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgaGF2ZSB0byBhc3N1bWUgdGhlIGdyb3VwIGhhcyBwcmV2aW91c2x5IGJlZW4gYWRkZWQgb3Igd2UnbGwgZmFpbCBvbiB0aGUgYWRkdXNlci4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBOb3RlOiBzcGVjaWZ5aW5nIHRoZSBhY3R1YWwgZ2lkIGlzIHZlcnkgcmFyZSBpbiBPRSwgdXN1YWxseSB0aGUgZ3JvdXAgbmFtZSBpcyBzcGVjaWZpZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogQ2hhbmdpbmcgZ2lkIGZvciBsb2dpbiAlcyBmcm9tICglcykgdG8gKCVzKSwgdmVyaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZXMhIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgdWFhcmdzLkxPR0lOLCB1YWFyZ3MuZ3JvdXBuYW1lLCB1YWFyZ3MuZ2lkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiAodWFhcmdzLmdyb3VwaWQgYW5kIG5vdCB1YWFyZ3MuZ3JvdXBpZC5pc2RpZ2l0KCkpIGFuZCB1YWFyZ3MuZ3JvdXBpZCA9PSB1YWFyZ3MuZ3JvdXBuYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBkb24ndCBoYXZlIGEgbnVtYmVyLCBzbyB3ZSBoYXZlIHRvIGFkZCBhIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJBZGRpbmcgZ3JvdXAgJXMhIiAlICh1YWFyZ3MuZ3JvdXBuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhYXJncy5naWQgPSB1YWFyZ3MuZ3JvdXBpZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLnVzZXJfZ3JvdXAgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBhZGQgPSBkLmdldFZhcigiR1JPVVBBRERfUEFSQU1fJXMiICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSAiJXMgJXMiICUgKFsnJywgJyAtLXN5c3RlbSddW3VhYXJncy5zeXN0ZW1dLCB1YWFyZ3MuZ3JvdXBuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBhZGQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkdST1VQQUREX1BBUkFNXyVzIiAlIHBrZywgIiVzIDsgJXMiICUgKGdyb3VwYWRkLCBuZXdncm91cCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJHUk9VUEFERF9QQVJBTV8lcyIgJSBwa2csIG5ld2dyb3VwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIHVhYXJncy5ncm91cG5hbWUgYW5kICh1YWFyZ3MuZ3JvdXBpZCBhbmQgdWFhcmdzLmdyb3VwaWQuaXNkaWdpdCgpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgaGF2ZSBhIGdyb3VwIG5hbWUgYW5kIGEgZ3JvdXAgbnVtYmVyIHRvIGFzc2lnbiBpdCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIkFkZGluZyBncm91cCAlcyAgZ2lkICglcykhIiAlICh1YWFyZ3MuZ3JvdXBuYW1lLCB1YWFyZ3MuZ3JvdXBpZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MuZ2lkID0gdWFhcmdzLmdyb3VwaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhYXJncy51c2VyX2dyb3VwID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwYWRkID0gZC5nZXRWYXIoIkdST1VQQUREX1BBUkFNXyVzIiAlIHBrZywgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gIi1nICVzICVzIiAlICh1YWFyZ3MuZ2lkLCB1YWFyZ3MuZ3JvdXBuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBhZGQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkdST1VQQUREX1BBUkFNXyVzIiAlIHBrZywgIiVzIDsgJXMiICUgKGdyb3VwYWRkLCBuZXdncm91cCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJHUk9VUEFERF9QQVJBTV8lcyIgJSBwa2csIG5ld2dyb3VwKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLmNvbW1lbnQgPSBbIiclcyciICUgZmllbGRbNF0sIHVhYXJncy5jb21tZW50XVtub3QgZmllbGRbNF1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLmhvbWVfZGlyID0gW2ZpZWxkWzVdLCB1YWFyZ3MuaG9tZV9kaXJdW25vdCBmaWVsZFs1XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3Muc2hlbGwgPSBbZmllbGRbNl0sIHVhYXJncy5zaGVsbF1bbm90IGZpZWxkWzZdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICMgU2hvdWxkIGJlIGFuIGVycm9yIGlmIGEgc3BlY2lmaWMgb3B0aW9uIGlzIHNldC4uLgorICAgICAgICAgICAgaWYgZC5nZXRWYXIoJ1VTRVJBRERfRVJST1JfRFlOQU1JQycsIFRydWUpID09ICcxJyBhbmQgbm90ICgodWFhcmdzLnVpZCBhbmQgdWFhcmdzLnVpZC5pc2RpZ2l0KCkpIGFuZCB1YWFyZ3MuZ2lkKToKKyAgICAgICAgICAgICAgICAjYmIuZXJyb3IoIlNraXBwaW5nIHJlY2lwZSAlcywgcGFja2FnZSAlcyB3aGljaCBhZGRzIHVzZXJuYW1lICVzIGRvZXMgbm90IGhhdmUgYSBzdGF0aWMgdWlkIGRlZmluZWQuIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgIHBrZywgdWFhcmdzLkxPR0lOKSkKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyAtICVzOiBVc2VybmFtZSAlcyBkb2VzIG5vdCBoYXZlIGEgc3RhdGljIHVpZCBkZWZpbmVkLiIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHBrZywgdWFhcmdzLkxPR0lOKSkKKworICAgICAgICAgICAgIyBSZWNvbnN0cnVjdCB0aGUgYXJncy4uLgorICAgICAgICAgICAgbmV3cGFyYW0gID0gWycnLCAnIC0tZGVmYXVsdHMnXVt1YWFyZ3MuZGVmYXVsdHNdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1iYXNlLWRpciAlcycgJSB1YWFyZ3MuYmFzZV9kaXJdW3VhYXJncy5iYXNlX2RpciAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tY29tbWVudCAlcycgJSB1YWFyZ3MuY29tbWVudF1bdWFhcmdzLmNvbW1lbnQgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWhvbWUtZGlyICVzJyAlIHVhYXJncy5ob21lX2Rpcl1bdWFhcmdzLmhvbWVfZGlyICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1leHBpcmVkYXRhICVzJyAlIHVhYXJncy5leHBpcmVkYXRlXVt1YWFyZ3MuZXhwaXJlZGF0ZSAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0taW5hY3RpdmUgJXMnICUgdWFhcmdzLmluYWN0aXZlXVt1YWFyZ3MuaW5hY3RpdmUgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWdpZCAlcycgJSB1YWFyZ3MuZ2lkXVt1YWFyZ3MuZ2lkICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1ncm91cHMgJXMnICUgdWFhcmdzLmdyb3Vwc11bdWFhcmdzLmdyb3VwcyAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tc2tlbCAlcycgJSB1YWFyZ3Muc2tlbF1bdWFhcmdzLnNrZWwgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWtleSAlcycgJSB1YWFyZ3Mua2V5XVt1YWFyZ3Mua2V5ICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1uby1sb2ctaW5pdCddW3VhYXJncy5ub19sb2dfaW5pdF0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWNyZWF0ZS1ob21lJ11bdWFhcmdzLmNyZWF0ZV9ob21lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tbm8tY3JlYXRlLWhvbWUnXVt1YWFyZ3Mubm9fY3JlYXRlX2hvbWVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1uby11c2VyLWdyb3VwJ11bdWFhcmdzLm5vX3VzZXJfZ3JvdXBdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1ub24tdW5pcXVlJ11bdWFhcmdzLm5vbl91bmlxdWVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1wYXNzd29yZCAlcycgJSB1YWFyZ3MucGFzc3dvcmRdW3VhYXJncy5wYXNzd29yZCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tcm9vdCAlcycgJSB1YWFyZ3Mucm9vdF1bdWFhcmdzLnJvb3QgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXN5c3RlbSddW3VhYXJncy5zeXN0ZW1dCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1zaGVsbCAlcycgJSB1YWFyZ3Muc2hlbGxdW3VhYXJncy5zaGVsbCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tdWlkICVzJyAlIHVhYXJncy51aWRdW3VhYXJncy51aWQgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXVzZXItZ3JvdXAnXVt1YWFyZ3MudXNlcl9ncm91cF0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9ICcgJXMnICUgdWFhcmdzLkxPR0lOCisKKyAgICAgICAgICAgIG5ld3BhcmFtcy5hcHBlbmQobmV3cGFyYW0pCisKKyAgICAgICAgcmV0dXJuICIgOyIuam9pbihuZXdwYXJhbXMpLnN0cmlwKCkKKworICAgICMgV2UgcGFyc2UgYW5kIHJld3JpdGUgdGhlIGdyb3VwYWRkIGNvbXBvbmVudHMKKyAgICBkZWYgcmV3cml0ZV9ncm91cGFkZChwYXJhbXMpOgorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29tZXMgZnJvbSAtLWhlbHAgb24gZ3JvdXBhZGQgZnJvbSBzaGFkb3cKKyAgICAgICAgcGFyc2VyID0gbXlBcmd1bWVudFBhcnNlcihwcm9nPSdncm91cGFkZCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1mIiwgIi0tZm9yY2UiLCBoZWxwPSJleGl0IHN1Y2Nlc3NmdWxseSBpZiB0aGUgZ3JvdXAgYWxyZWFkeSBleGlzdHMsIGFuZCBjYW5jZWwgLWcgaWYgdGhlIEdJRCBpcyBhbHJlYWR5IHVzZWQiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItZyIsICItLWdpZCIsIG1ldGF2YXI9IkdJRCIsIGhlbHA9InVzZSBHSUQgZm9yIHRoZSBuZXcgZ3JvdXAiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItSyIsICItLWtleSIsIG1ldGF2YXI9IktFWT1WQUxVRSIsIGhlbHA9Im92ZXJyaWRlIC9ldGMvbG9naW4uZGVmcyBkZWZhdWx0cyIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1vIiwgIi0tbm9uLXVuaXF1ZSIsIGhlbHA9ImFsbG93IHRvIGNyZWF0ZSBncm91cHMgd2l0aCBkdXBsaWNhdGUgKG5vbi11bmlxdWUpIEdJRCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1wIiwgIi0tcGFzc3dvcmQiLCBtZXRhdmFyPSJQQVNTV09SRCIsIGhlbHA9InVzZSB0aGlzIGVuY3J5cHRlZCBwYXNzd29yZCBmb3IgdGhlIG5ldyBncm91cCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1SIiwgIi0tcm9vdCIsIG1ldGF2YXI9IkNIUk9PVF9ESVIiLCBoZWxwPSJkaXJlY3RvcnkgdG8gY2hyb290IGludG8iKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItciIsICItLXN5c3RlbSIsIGhlbHA9ImNyZWF0ZSBhIHN5c3RlbSBhY2NvdW50IiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiR1JPVVAiLCBoZWxwPSJHcm91cCBuYW1lIG9mIHRoZSBuZXcgZ3JvdXAiKQorCisgICAgICAgICMgUmV0dXJuIGEgbGlzdCBvZiBjb25maWd1cmF0aW9uIGZpbGVzIGJhc2VkIG9uIGVpdGhlciB0aGUgZGVmYXVsdAorICAgICAgICAjIGZpbGVzL2dyb3VwIG9yIHRoZSBjb250ZW50cyBvZiBVU0VSQUREX0dJRF9UQUJMRVMKKyAgICAgICAgIyBwYXRocyBhcmUgcmVzdWx2ZWQgdmlhIEJCUEFUSAorICAgICAgICBkZWYgZ2V0X2dyb3VwX2xpc3QoZCk6CisgICAgICAgICAgICBzdHIgPSAiIgorICAgICAgICAgICAgYmJwYXRoID0gZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpCisgICAgICAgICAgICBncm91cF90YWJsZXMgPSBkLmdldFZhcignVVNFUkFERF9HSURfVEFCTEVTJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBncm91cF90YWJsZXM6CisgICAgICAgICAgICAgICAgZ3JvdXBfdGFibGVzID0gJ2ZpbGVzL2dyb3VwJworICAgICAgICAgICAgZm9yIGNvbmZfZmlsZSBpbiBncm91cF90YWJsZXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBzdHIgKz0gIiAlcyIgJSBiYi51dGlscy53aGljaChiYnBhdGgsIGNvbmZfZmlsZSkKKyAgICAgICAgICAgIHJldHVybiBzdHIKKworICAgICAgICBuZXdwYXJhbXMgPSBbXQorICAgICAgICBmb3IgcGFyYW0gaW4gcmUuc3BsaXQoJycnWyBcdF0qO1sgXHRdKig/PSg/OlteJyJdfCdbXiddKid8IlteIl0qIikqJCknJycsIHBhcmFtcyk6CisgICAgICAgICAgICBwYXJhbSA9IHBhcmFtLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBwYXJhbToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgSWYgd2UncmUgcHJvY2Vzc2luZyBtdWx0aXBsZSBsaW5lcywgd2UgY291bGQgaGF2ZSBsZWZ0IG92ZXIgdmFsdWVzIGhlcmUuLi4KKyAgICAgICAgICAgICAgICBnYWFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhyZS5zcGxpdCgnJydbIFx0XSooPz0oPzpbXiciXXwnW14nXSonfCJbXiJdKiIpKiQpJycnLCBwYXJhbSkpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXM6IFVuYWJsZSB0byBwYXJzZSBhcmd1bWVudHMgZm9yIEdST1VQQUREX1BBUkFNXyVzOiAnJXMnIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCBwYXJhbSkpCisKKyAgICAgICAgICAgICMgTmVlZCB0byBpdGVyYXRlIG92ZXIgbGF5ZXJzIGFuZCBvcGVuIHRoZSByaWdodCBmaWxlKHMpCisgICAgICAgICAgICAjIFVzZSB0aGUgc3RhbmRhcmQgZ3JvdXAgbGF5b3V0OgorICAgICAgICAgICAgIyAgZ3JvdXBuYW1lOnBhc3N3b3JkOmdyb3VwX2lkOmdyb3VwX21lbWJlcnMKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgSWYgYSBmaWVsZCBpcyBsZWZ0IGJsYW5rLCB0aGUgb3JpZ2luYWwgdmFsdWUgd2lsbCBiZSB1c2VkLiBUaGUgJ2dyb3VwbmFtZScgZmllbGQKKyAgICAgICAgICAgICMgaXMgcmVxdWlyZWQuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIE5vdGU6IHNpbWlsYXIgdG8gdGhlIHBhc3N3ZCBmaWxlLCB0aGUgJ3Bhc3N3b3JkJyBmaWxlZCBpcyBpZ25vcmVkCisgICAgICAgICAgICAjIE5vdGU6IGdyb3VwX21lbWJlcnMgaXMgaWdub3JlZCwgZ3JvdXAgbWVtYmVycyBtdXN0IGJlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgR1JPVVBNRU1TX1BBUkFNCisgICAgICAgICAgICBmb3IgY29uZiBpbiBnZXRfZ3JvdXBfbGlzdChkKS5zcGxpdCgpWzo6LTFdOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbmYpOgorICAgICAgICAgICAgICAgICAgICBmID0gb3Blbihjb25mLCAiciIpCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgPSBsaW5lLnJzdHJpcCgpLnNwbGl0KCI6IikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpZWxkWzBdID09IGdhYXJncy5HUk9VUCBhbmQgZmllbGRbMl06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZ2FhcmdzLmdpZCBhbmQgKGdhYXJncy5naWQgIT0gZmllbGRbMl0pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogQ2hhbmdpbmcgZ3JvdXBuYW1lICVzJ3MgZ2lkIGZyb20gKCVzKSB0byAoJXMpLCB2ZXJpZnkgY29uZmlndXJhdGlvbiBmaWxlcyEiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBnYWFyZ3MuR1JPVVAsIGdhYXJncy5naWQsIGZpZWxkWzJdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYWFyZ3MuZ2lkID0gZmllbGRbMl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBkLmdldFZhcignVVNFUkFERF9FUlJPUl9EWU5BTUlDJywgVHJ1ZSkgPT0gJzEnIGFuZCBub3QgKGdhYXJncy5naWQgYW5kIGdhYXJncy5naWQuaXNkaWdpdCgpKToKKyAgICAgICAgICAgICAgICAjYmIuZXJyb3IoIlNraXBwaW5nIHJlY2lwZSAlcywgcGFja2FnZSAlcyB3aGljaCBhZGRzIGdyb3VwbmFtZSAlcyBkb2VzIG5vdCBoYXZlIGEgc3RhdGljIGdpZCBkZWZpbmVkLiIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksICBwa2csIGdhYXJncy5HUk9VUCkpCisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgLSAlczogR3JvdXBuYW1lICVzIGRvZXMgbm90IGhhdmUgYSBzdGF0aWMgZ2lkIGRlZmluZWQuIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCBnYWFyZ3MuR1JPVVApKQorCisgICAgICAgICAgICAjIFJlY29uc3RydWN0IHRoZSBhcmdzLi4uCisgICAgICAgICAgICBuZXdwYXJhbSAgPSBbJycsICcgLS1mb3JjZSddW2dhYXJncy5mb3JjZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWdpZCAlcycgJSBnYWFyZ3MuZ2lkXVtnYWFyZ3MuZ2lkICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1rZXkgJXMnICUgZ2FhcmdzLmtleV1bZ2FhcmdzLmtleSAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tbm9uLXVuaXF1ZSddW2dhYXJncy5ub25fdW5pcXVlXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tcGFzc3dvcmQgJXMnICUgZ2FhcmdzLnBhc3N3b3JkXVtnYWFyZ3MucGFzc3dvcmQgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXJvb3QgJXMnICUgZ2FhcmdzLnJvb3RdW2dhYXJncy5yb290ICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1zeXN0ZW0nXVtnYWFyZ3Muc3lzdGVtXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gJyAlcycgJSBnYWFyZ3MuR1JPVVAKKworICAgICAgICAgICAgbmV3cGFyYW1zLmFwcGVuZChuZXdwYXJhbSkKKworICAgICAgICByZXR1cm4gIiA7Ii5qb2luKG5ld3BhcmFtcykuc3RyaXAoKQorCisgICAgIyBMb2FkIGFuZCBwcm9jZXNzIHRoZSB1c2VycyBhbmQgZ3JvdXBzLCByZXdyaXRpbmcgdGhlIGFkZHVzZXIvYWRkZ3JvdXAgcGFyYW1zCisgICAgdXNlcmFkZF9wYWNrYWdlcyA9IGQuZ2V0VmFyKCdVU0VSQUREX1BBQ0tBR0VTJywgVHJ1ZSkKKworICAgIGZvciBwa2cgaW4gdXNlcmFkZF9wYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICAjIEdyb3VwbWVtcyBkb2Vzbid0IGhhdmUgYW55dGhpbmcgd2UgbWlnaHQgd2FudCB0byBjaGFuZ2UsIHNvIHNpbXBseSB2YWxpZGF0aW5nCisgICAgICAgICMgaXMgYSBiaXQgb2YgYSB3YXN0ZSAtLSBvbmx5IHByb2Nlc3MgdXNlcmFkZC9ncm91cGFkZAorICAgICAgICB1c2VyYWRkX3BhcmFtID0gZC5nZXRWYXIoJ1VTRVJBRERfUEFSQU1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiB1c2VyYWRkX3BhcmFtOgorICAgICAgICAgICAgI2JiLndhcm4oIkJlZm9yZTogJ1VTRVJBRERfUEFSQU1fJXMnIC0gJyVzJyIgJSAocGtnLCB1c2VyYWRkX3BhcmFtKSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdVU0VSQUREX1BBUkFNXyVzJyAlIHBrZywgcmV3cml0ZV91c2VyYWRkKHVzZXJhZGRfcGFyYW0pKQorICAgICAgICAgICAgI2JiLndhcm4oIkFmdGVyOiAgJ1VTRVJBRERfUEFSQU1fJXMnIC0gJyVzJyIgJSAocGtnLCBkLmdldFZhcignVVNFUkFERF9QQVJBTV8lcycgJSBwa2csIFRydWUpKSkKKworICAgICAgICBncm91cGFkZF9wYXJhbSA9IGQuZ2V0VmFyKCdHUk9VUEFERF9QQVJBTV8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIGdyb3VwYWRkX3BhcmFtOgorICAgICAgICAgICAgI2JiLndhcm4oIkJlZm9yZTogJ0dST1VQQUREX1BBUkFNXyVzJyAtICclcyciICUgKHBrZywgZ3JvdXBhZGRfcGFyYW0pKQorICAgICAgICAgICAgZC5zZXRWYXIoJ0dST1VQQUREX1BBUkFNXyVzJyAlIHBrZywgcmV3cml0ZV9ncm91cGFkZChncm91cGFkZF9wYXJhbSkpCisgICAgICAgICAgICAjYmIud2FybigiQWZ0ZXI6ICAnR1JPVVBBRERfUEFSQU1fJXMnIC0gJyVzJyIgJSAocGtnLCBkLmdldFZhcignR1JPVVBBRERfUEFSQU1fJXMnICUgcGtnLCBUcnVlKSkpCisKKworCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpIFwKKyAgICAgICAgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdXBkYXRlX3VzZXJhZGRfc3RhdGljX2NvbmZpZyhkKQorICAgICAgICBleGNlcHQgYmIuYnVpbGQuRnVuY0ZhaWxlZCBhcyBmOgorICAgICAgICAgICAgYmIuZGVidWcoMSwgIlNraXBwaW5nIHJlY2lwZSAlczogJXMiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBmKSkKKyAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKGYpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91c2VyYWRkLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91c2VyYWRkLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3N2U1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VzZXJhZGQuYmJjbGFzcwpAQCAtMCwwICsxLDIyMyBAQAoraW5oZXJpdCB1c2VyYWRkX2Jhc2UKKworIyBiYXNlLXBhc3N3ZC1jcm9zcyBwcm92aWRlcyB0aGUgZGVmYXVsdCBwYXNzd2QgYW5kIGdyb3VwIGZpbGVzIGluIHRoZQorIyB0YXJnZXQgc3lzcm9vdCwgYW5kIHNoYWRvdyAtbmF0aXZlIGFuZCAtc3lzcm9vdCBwcm92aWRlIHRoZSB1dGlsaXRpZXMKKyMgYW5kIHN1cHBvcnQgZmlsZXMgbmVlZGVkIHRvIGFkZCBhbmQgbW9kaWZ5IHVzZXIgYW5kIGdyb3VwIGFjY291bnRzCitERVBFTkRTX2FwcGVuZCA9ICIke1VTRVJBRERERVBFTkRTfSIKK1VTRVJBRERERVBFTkRTID0gIiBiYXNlLWZpbGVzIHNoYWRvdy1uYXRpdmUgc2hhZG93LXN5c3Jvb3Qgc2hhZG93IgorVVNFUkFERERFUEVORFNfY2xhc3MtY3Jvc3MgPSAiIgorVVNFUkFERERFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKK1VTRVJBRERERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKKyMgVGhpcyBwcmVpbnN0YWxsIGZ1bmN0aW9uIGNhbiBiZSBydW4gaW4gZm91ciBkaWZmZXJlbnQgY29udGV4dHM6CisjCisjIGEpIEJlZm9yZSBkb19pbnN0YWxsCisjIGIpIEF0IGRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgd2hlbiBpbnN0YWxsaW5nIGZyb20gc3N0YXRlIHBhY2thZ2VzCisjIGMpIEFzIHRoZSBwcmVpbnN0IHNjcmlwdCBpbiB0aGUgdGFyZ2V0IHBhY2thZ2UgYXQgZG9fcm9vdGZzIHRpbWUKKyMgZCkgQXMgdGhlIHByZWluc3Qgc2NyaXB0IGluIHRoZSB0YXJnZXQgcGFja2FnZSBvbiBkZXZpY2UgYXMgYSBwYWNrYWdlIHVwZ3JhZGUKKyMKK3VzZXJhZGRfcHJlaW5zdCAoKSB7CitPUFQ9IiIKK1NZU1JPT1Q9IiIKKworaWYgdGVzdCAieCREIiAhPSAieCI7IHRoZW4KKwkjIEluc3RhbGxpbmcgaW50byBhIHN5c3Jvb3QKKwlTWVNST09UPSIkRCIKKwlPUFQ9Ii0tcm9vdCAkRCIKKworCSMgTWFrZSBzdXJlIGxvZ2luLmRlZnMgaXMgdGhlcmUsIHRoaXMgaXMgdG8gbWFrZSBkZWJpYW4gcGFja2FnZSBiYWNrZW5kIHdvcmsKKwkjIGNvcnJlY3RseSB3aGlsZSBkb2luZyByb290ZnMuCisJIyBUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgaWYgL2V0Yy9sb2dpbi5kZWZzIGlzIHRyZWF0ZWQgYXMgYSBjb25maWcgZmlsZSBmb3IKKwkjIHNoYWRvdyBwYWNrYWdlLCB0aGVuIHdoaWxlIHBlcmZvcm1pbmcgcHJlaW5zdHMgZm9yIHBhY2thZ2VzIHRoYXQgZGVwZW5kIG9uCisJIyBzaGFkb3csIHRoZXJlIG1pZ2h0IG9ubHkgYmUgL2V0Yy9sb2dpbi5kZWYuZHBrZy1uZXcgdGhlcmUgaW4gcm9vdCBmaWxlc3lzdGVtLgorCWlmIFsgISAtZSAkRCR7c3lzY29uZmRpcn0vbG9naW4uZGVmcyAtYSAtZSAkRCR7c3lzY29uZmRpcn0vbG9naW4uZGVmcy5kcGtnLW5ldyBdOyB0aGVuCisJICAgIGNwICREJHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzLmRwa2ctbmV3ICREJHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCisJZmkKKworCSMgdXNlci9ncm91cCBsb29rdXBzIHNob3VsZCBtYXRjaCB1c2VyYWRkL2dyb3VwYWRkIC0tcm9vdAorCWV4cG9ydCBQU0VVRE9fUEFTU1dEPSIkU1lTUk9PVDoke1NUQUdJTkdfRElSX05BVElWRX0iCitmaQorCisjIElmIHdlJ3JlIG5vdCBkb2luZyBhIHNwZWNpYWwgU1NUQVRFL1NZU1JPT1QgaW5zdGFsbAorIyB0aGVuIHNldCB0aGUgdmFsdWVzLCBvdGhlcndpc2UgdXNlIHRoZSBlbnZpcm9ubWVudAoraWYgdGVzdCAieCRVQV9TWVNST09UIiA9ICJ4IjsgdGhlbgorCSMgSW5zdGFsbGluZyBvbnRvIGEgdGFyZ2V0CisJIyBBZGQgZ3JvdXBzIGFuZCB1c2VycyBkZWZpbmVkIG9ubHkgZm9yIHRoaXMgcGFja2FnZQorCUdST1VQQUREX1BBUkFNPSIke0dST1VQQUREX1BBUkFNfSIKKwlVU0VSQUREX1BBUkFNPSIke1VTRVJBRERfUEFSQU19IgorCUdST1VQTUVNU19QQVJBTT0iJHtHUk9VUE1FTVNfUEFSQU19IgorZmkKKworIyBQZXJmb3JtIGdyb3VwIGFkZGl0aW9ucyBmaXJzdCwgc2luY2UgdXNlciBhZGRpdGlvbnMgbWF5IGRlcGVuZAorIyBvbiB0aGVzZSBncm91cHMgZXhpc3RpbmcKK2lmIHRlc3QgIngkR1JPVVBBRERfUEFSQU0iICE9ICJ4IjsgdGhlbgorCWVjaG8gIlJ1bm5pbmcgZ3JvdXBhZGQgY29tbWFuZHMuLi4iCisJIyBJbnZva2UgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIGdyb3VwYWRkIGZvciBwYXJhbWV0ZXIgbGlzdHMKKwkjIHNlcGFyYXRlZCBieSAnOycKKwlvcHRzPWBlY2hvICIkR1JPVVBBRERfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAxYAorCXJlbWFpbmluZz1gZWNobyAiJEdST1VQQUREX1BBUkFNIiB8IGN1dCAtZCAnOycgLWYgMi1gCisJd2hpbGUgdGVzdCAieCRvcHRzIiAhPSAieCI7IGRvCisJCXBlcmZvcm1fZ3JvdXBhZGQgIiRTWVNST09UIiAiJE9QVCAkb3B0cyIgMTAKKwkJaWYgdGVzdCAieCRvcHRzIiA9ICJ4JHJlbWFpbmluZyI7IHRoZW4KKwkJCWJyZWFrCisJCWZpCisJCW9wdHM9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAxYAorCQlyZW1haW5pbmc9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAyLWAKKwlkb25lCitmaSAKKworaWYgdGVzdCAieCRVU0VSQUREX1BBUkFNIiAhPSAieCI7IHRoZW4KKwllY2hvICJSdW5uaW5nIHVzZXJhZGQgY29tbWFuZHMuLi4iCisJIyBJbnZva2UgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHVzZXJhZGQgZm9yIHBhcmFtZXRlciBsaXN0cworCSMgc2VwYXJhdGVkIGJ5ICc7JworCW9wdHM9YGVjaG8gIiRVU0VSQUREX1BBUkFNIiB8IGN1dCAtZCAnOycgLWYgMWAKKwlyZW1haW5pbmc9YGVjaG8gIiRVU0VSQUREX1BBUkFNIiB8IGN1dCAtZCAnOycgLWYgMi1gCisJd2hpbGUgdGVzdCAieCRvcHRzIiAhPSAieCI7IGRvCisJCXBlcmZvcm1fdXNlcmFkZCAiJFNZU1JPT1QiICIkT1BUICRvcHRzIiAxMAorCQlpZiB0ZXN0ICJ4JG9wdHMiID0gIngkcmVtYWluaW5nIjsgdGhlbgorCQkJYnJlYWsKKwkJZmkKKwkJb3B0cz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDFgCisJCXJlbWFpbmluZz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDItYAorCWRvbmUKK2ZpCisKK2lmIHRlc3QgIngkR1JPVVBNRU1TX1BBUkFNIiAhPSAieCI7IHRoZW4KKwllY2hvICJSdW5uaW5nIGdyb3VwbWVtcyBjb21tYW5kcy4uLiIKKwkjIEludm9rZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgZ3JvdXBtZW1zIGZvciBwYXJhbWV0ZXIgbGlzdHMKKwkjIHNlcGFyYXRlZCBieSAnOycKKwlvcHRzPWBlY2hvICIkR1JPVVBNRU1TX1BBUkFNIiB8IGN1dCAtZCAnOycgLWYgMWAKKwlyZW1haW5pbmc9YGVjaG8gIiRHUk9VUE1FTVNfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAyLWAKKwl3aGlsZSB0ZXN0ICJ4JG9wdHMiICE9ICJ4IjsgZG8KKwkJcGVyZm9ybV9ncm91cG1lbXMgIiRTWVNST09UIiAiJE9QVCAkb3B0cyIgMTAKKwkJaWYgdGVzdCAieCRvcHRzIiA9ICJ4JHJlbWFpbmluZyI7IHRoZW4KKwkJCWJyZWFrCisJCWZpCisJCW9wdHM9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAxYAorCQlyZW1haW5pbmc9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAyLWAKKwlkb25lCitmaQorfQorCit1c2VyYWRkX3N5c3Jvb3QgKCkgeworCSMgUHNldWRvIG1heSAoZG9faW5zdGFsbCkgb3IgbWF5IG5vdCAoZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSkgYmUgcnVubmluZyAKKwkjIGF0IHRoaXMgcG9pbnQgc28gd2UncmUgZXhwbGljaXQgYWJvdXQgdGhlIGVudmlyb25tZW50IHNvIHBzZXVkbyBjYW4gbG9hZCBpZiAKKwkjIG5vdCBhbHJlYWR5IHByZXNlbnQuCisJZXhwb3J0IFBTRVVETz0iJHtGQUtFUk9PVEVOVn0gUFNFVURPX0xPQ0FMU1RBVEVESVI9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtsb2NhbHN0YXRlZGlyfS9wc2V1ZG8gJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJ9L3BzZXVkbyIKKworCSMgRXhwbGljaXRseSBzZXQgJEQgc2luY2UgaXQgaXNuJ3Qgc2V0IHRvIGFueXRoaW5nCisJIyBiZWZvcmUgZG9faW5zdGFsbAorCUQ9JHtTVEFHSU5HX0RJUl9UQVJHRVR9CisKKwkjIEFkZCBncm91cHMgYW5kIHVzZXJzIGRlZmluZWQgZm9yIGFsbCByZWNpcGUgcGFja2FnZXMKKwlHUk9VUEFERF9QQVJBTT0iJHtAZ2V0X2FsbF9jbWRfcGFyYW1zKGQsICdncm91cGFkZCcpfSIKKwlVU0VSQUREX1BBUkFNPSIke0BnZXRfYWxsX2NtZF9wYXJhbXMoZCwgJ3VzZXJhZGQnKX0iCisJR1JPVVBNRU1TX1BBUkFNPSIke0BnZXRfYWxsX2NtZF9wYXJhbXMoZCwgJ2dyb3VwbWVtcycpfSIKKworCSMgVGVsbCB0aGUgc3lzdGVtIHRvIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFycworCVVBX1NZU1JPT1Q9MQorCisJdXNlcmFkZF9wcmVpbnN0Cit9CisKK3VzZXJhZGRfc3lzcm9vdF9zc3RhdGUgKCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwYWNrYWdlX3NldHNjZW5lIiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisJCXVzZXJhZGRfc3lzcm9vdAorCWZpCit9CisKK2RvX2luc3RhbGxbcHJlZnVuY3NdICs9ICIke1NZU1JPT1RGVU5DfSIKK1NZU1JPT1RGVU5DID0gInVzZXJhZGRfc3lzcm9vdCIKK1NZU1JPT1RGVU5DX2NsYXNzLWNyb3NzID0gIiIKK1NZU1JPT1RGVU5DX2NsYXNzLW5hdGl2ZSA9ICIiCitTWVNST09URlVOQ19jbGFzcy1uYXRpdmVzZGsgPSAiIgorU1NUQVRFUFJFSU5TVEZVTkNTICs9ICIke1NZU1JPT1RQT1NURlVOQ30iCitTWVNST09UUE9TVEZVTkMgPSAidXNlcmFkZF9zeXNyb290X3NzdGF0ZSIKK1NZU1JPT1RQT1NURlVOQ19jbGFzcy1jcm9zcyA9ICIiCitTWVNST09UUE9TVEZVTkNfY2xhc3MtbmF0aXZlID0gIiIKK1NZU1JPT1RQT1NURlVOQ19jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitVU0VSQUREU0VUU0NFTkVERVBTID0gIiR7TUxQUkVGSVh9YmFzZS1wYXNzd2Q6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSBwc2V1ZG8tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgc2hhZG93LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lICR7TUxQUkVGSVh9c2hhZG93LXN5c3Jvb3Q6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIKK1VTRVJBRERTRVRTQ0VORURFUFNfY2xhc3MtY3Jvc3MgPSAiIgorVVNFUkFERFNFVFNDRU5FREVQU19jbGFzcy1uYXRpdmUgPSAiIgorVVNFUkFERFNFVFNDRU5FREVQU19jbGFzcy1uYXRpdmVzZGsgPSAiIgorZG9fcGFja2FnZV9zZXRzY2VuZVtkZXBlbmRzXSArPSAiJHtVU0VSQUREU0VUU0NFTkVERVBTfSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmVbZGVwZW5kc10gKz0gIiR7VVNFUkFERFNFVFNDRU5FREVQU30iCisKKyMgUmVjaXBlIHBhcnNlLXRpbWUgc2FuaXR5IGNoZWNrcworZGVmIHVwZGF0ZV91c2VyYWRkX2FmdGVyX3BhcnNlKGQpOgorICAgIHVzZXJhZGRfcGFja2FnZXMgPSBkLmdldFZhcignVVNFUkFERF9QQUNLQUdFUycsIFRydWUpCisKKyAgICBpZiBub3QgdXNlcmFkZF9wYWNrYWdlczoKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgaW5oZXJpdHMgdXNlcmFkZCBidXQgZG9lc24ndCBzZXQgVVNFUkFERF9QQUNLQUdFUyIgJSBkLmdldFZhcignRklMRScsIEZhbHNlKSkKKworICAgIGZvciBwa2cgaW4gdXNlcmFkZF9wYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBpZiBub3QgZC5nZXRWYXIoJ1VTRVJBRERfUEFSQU1fJXMnICUgcGtnLCBUcnVlKSBhbmQgbm90IGQuZ2V0VmFyKCdHUk9VUEFERF9QQVJBTV8lcycgJSBwa2csIFRydWUpIGFuZCBub3QgZC5nZXRWYXIoJ0dST1VQTUVNU19QQVJBTV8lcycgJSBwa2csIFRydWUpOgorICAgICAgICAgICAgYmIuZmF0YWwoIiVzIGluaGVyaXRzIHVzZXJhZGQgYnV0IGRvZXNuJ3Qgc2V0IFVTRVJBRERfUEFSQU0sIEdST1VQQUREX1BBUkFNIG9yIEdST1VQTUVNU19QQVJBTSBmb3IgcGFja2FnZSAlcyIgJSAoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksIHBrZykpCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgXAorICAgICAgICBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpOgorICAgICAgICB1cGRhdGVfdXNlcmFkZF9hZnRlcl9wYXJzZShkKQorfQorCisjIFJldHVybiBhIHNpbmdsZSBbR1JPVVB8VVNFUl1BRERfUEFSQU0gZm9ybWF0dGVkIHN0cmluZyB3aGljaCBpbmNsdWRlcyB0aGUKKyMgW2dyb3VwfHVzZXJdYWRkIHBhcmFtZXRlcnMgZm9yIGFsbCBVU0VSQUREX1BBQ0tBR0VTIGluIHRoaXMgcmVjaXBlCitkZWYgZ2V0X2FsbF9jbWRfcGFyYW1zKGQsIGNtZF90eXBlKToKKyAgICBpbXBvcnQgc3RyaW5nCisgICAgCisgICAgcGFyYW1fdHlwZSA9IGNtZF90eXBlLnVwcGVyKCkgKyAiX1BBUkFNXyVzIgorICAgIHBhcmFtcyA9IFtdCisKKyAgICB1c2VyYWRkX3BhY2thZ2VzID0gZC5nZXRWYXIoJ1VTRVJBRERfUEFDS0FHRVMnLCBUcnVlKSBvciAiIgorICAgIGZvciBwa2cgaW4gdXNlcmFkZF9wYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBwYXJhbSA9IGQuZ2V0VmFyKHBhcmFtX3R5cGUgJSBwa2csIFRydWUpCisgICAgICAgIGlmIHBhcmFtOgorICAgICAgICAgICAgcGFyYW1zLmFwcGVuZChwYXJhbSkKKworICAgIHJldHVybiAiOyAiLmpvaW4ocGFyYW1zKQorCisjIEFkZHMgdGhlIHByZWluc3Qgc2NyaXB0IGludG8gZ2VuZXJhdGVkIHBhY2thZ2VzCitmYWtlcm9vdCBweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgZGVmIHVwZGF0ZV91c2VyYWRkX3BhY2thZ2UocGtnKToKKyAgICAgICAgYmIuZGVidWcoMSwgJ2FkZGluZyB1c2VyL2dyb3VwIGNhbGxzIHRvIHByZWluc3QgZm9yICVzJyAlIHBrZykKKworICAgICAgICAiIiIKKyAgICAgICAgdXNlcmFkZCBwcmVpbnN0IGlzIGFwcGVuZGVkIGhlcmUgYmVjYXVzZSBwa2dfcHJlaW5zdCBtYXkgYmUKKyAgICAgICAgcmVxdWlyZWQgdG8gZXhlY3V0ZSBvbiB0aGUgdGFyZ2V0LiBOb3QgZG9pbmcgc28gbWF5IGNhdXNlCisgICAgICAgIHVzZXJhZGQgcHJlaW5zdCB0byBiZSBpbnZva2VkIHR3aWNlLCBjYXVzaW5nIHVud2FudGVkIHdhcm5pbmdzLgorICAgICAgICAiIiIKKyAgICAgICAgcHJlaW5zdCA9IGQuZ2V0VmFyKCdwa2dfcHJlaW5zdF8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdwa2dfcHJlaW5zdCcsIFRydWUpCisgICAgICAgIGlmIG5vdCBwcmVpbnN0OgorICAgICAgICAgICAgcHJlaW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcHJlaW5zdCArPSAnYmJub3RlICgpIHtcblx0ZWNobyAiTk9URTogJCoiXG59XG4nCisgICAgICAgIHByZWluc3QgKz0gJ2Jid2FybiAoKSB7XG5cdGVjaG8gIldBUk5JTkc6ICQqIlxufVxuJworICAgICAgICBwcmVpbnN0ICs9ICdiYmZhdGFsICgpIHtcblx0ZWNobyAiRVJST1I6ICQqIlxuXHRleGl0IDFcbn1cbicKKyAgICAgICAgcHJlaW5zdCArPSAncGVyZm9ybV9ncm91cGFkZCAoKSB7XG4lc31cbicgJSBkLmdldFZhcigncGVyZm9ybV9ncm91cGFkZCcsIFRydWUpCisgICAgICAgIHByZWluc3QgKz0gJ3BlcmZvcm1fdXNlcmFkZCAoKSB7XG4lc31cbicgJSBkLmdldFZhcigncGVyZm9ybV91c2VyYWRkJywgVHJ1ZSkKKyAgICAgICAgcHJlaW5zdCArPSAncGVyZm9ybV9ncm91cG1lbXMgKCkge1xuJXN9XG4nICUgZC5nZXRWYXIoJ3BlcmZvcm1fZ3JvdXBtZW1zJywgVHJ1ZSkKKyAgICAgICAgcHJlaW5zdCArPSBkLmdldFZhcigndXNlcmFkZF9wcmVpbnN0JywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wcmVpbnN0XyVzJyAlIHBrZywgcHJlaW5zdCkKKworICAgICAgICAjIFJERVBFTkRTIHNldHVwCisgICAgICAgIHJkZXBlbmRzID0gZC5nZXRWYXIoIlJERVBFTkRTXyVzIiAlIHBrZywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgcmRlcGVuZHMgKz0gJyAnICsgZC5nZXRWYXIoJ01MUFJFRklYJywgRmFsc2UpICsgJ2Jhc2UtcGFzc3dkJworICAgICAgICByZGVwZW5kcyArPSAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyAnc2hhZG93JworICAgICAgICAjIGJhc2UtZmlsZXMgaXMgd2hlcmUgdGhlIGRlZmF1bHQgL2V0Yy9za2VsIGlzIHBhY2thZ2VkCisgICAgICAgIHJkZXBlbmRzICs9ICcgJyArIGQuZ2V0VmFyKCdNTFBSRUZJWCcsIEZhbHNlKSArICdiYXNlLWZpbGVzJworICAgICAgICBkLnNldFZhcigiUkRFUEVORFNfJXMiICUgcGtnLCByZGVwZW5kcykKKworICAgICMgQWRkIHRoZSB1c2VyL2dyb3VwIHByZWluc3RhbGwgc2NyaXB0cyBhbmQgUkRFUEVORFMgcmVxdWlyZW1lbnRzCisgICAgIyB0byBwYWNrYWdlcyBzcGVjaWZpZWQgYnkgVVNFUkFERF9QQUNLQUdFUworICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKSBcCisgICAgICAgIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCk6CisgICAgICAgIHVzZXJhZGRfcGFja2FnZXMgPSBkLmdldFZhcignVVNFUkFERF9QQUNLQUdFUycsIFRydWUpIG9yICIiCisgICAgICAgIGZvciBwa2cgaW4gdXNlcmFkZF9wYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICAgICAgdXBkYXRlX3VzZXJhZGRfcGFja2FnZShwa2cpCit9CisKKyMgVXNlIHRoZSBmb2xsb3dpbmcgdG8gZXh0ZW5kIHRoZSB1c2VyYWRkIHdpdGggY3VzdG9tIGZ1bmN0aW9ucworVVNFUkFEREVYVEVOU0lPTiA/PSAiIgorCitpbmhlcml0ICR7VVNFUkFEREVYVEVOU0lPTn0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VzZXJhZGRfYmFzZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXNlcmFkZF9iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyZjNhMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VzZXJhZGRfYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsMjMwIEBACisjIFRoaXMgYmJjbGFzcyBwcm92aWRlcyBiYXNpYyBmdW5jdGlvbmFsaXR5IGZvciB1c2VyL2dyb3VwIHNldHRpbmdzLgorIyBUaGlzIGJiY2xhc3MgaXMgaW50ZW5kZWQgdG8gYmUgaW5oZXJpdGVkIGJ5IHVzZXJhZGQuYmJjbGFzcyBhbmQKKyMgZXh0cmF1c2Vycy5iYmNsYXNzLgorCisjIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGJhc2ljYWxseSBoYXZlIHNpbWlsYXIgbG9naWMuCisjICopIFBlcmZvcm0gbmVjZXNzYXJ5IGNoZWNrcyBiZWZvcmUgaW52b2tpbmcgdGhlIGFjdHVhbCBjb21tYW5kCisjICopIEludm9rZSB0aGUgYWN0dWFsIGNvbW1hbmQsIG1ha2UgcmV0cmllcyBpZiBuZWNlc3NhcnkKKyMgKikgRXJyb3Igb3V0IGlmIGFuIGVycm9yIG9jY3Vycy4KKworIyBOb3RlIHRoYXQgYmVmb3JlIGludm9raW5nIHRoZXNlIGZ1bmN0aW9ucywgbWFrZSBzdXJlIHRoZSBnbG9iYWwgdmFyaWFibGUKKyMgUFNFVURPIGlzIHNldCB1cCBjb3JyZWN0bHkuCisKK3BlcmZvcm1fZ3JvdXBhZGQgKCkgeworCWxvY2FsIHJvb3RkaXI9IiQxIgorCWxvY2FsIG9wdHM9IiQyIgorCWxvY2FsIHJldHJpZXM9IiQzIgorCWJibm90ZSAiJHtQTn06IFBlcmZvcm1pbmcgZ3JvdXBhZGQgd2l0aCBbJG9wdHNdIGFuZCAkcmV0cmllcyB0aW1lcyBvZiByZXRyeSIKKwlsb2NhbCBncm91cG5hbWU9YGVjaG8gIiRvcHRzIiB8IGF3ayAneyBwcmludCAkTkYgfSdgCisJbG9jYWwgZ3JvdXBfZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6IiAkcm9vdGRpci9ldGMvZ3JvdXAgfHwgdHJ1ZWAiCisJaWYgdGVzdCAieCRncm91cF9leGlzdHMiID0gIngiOyB0aGVuCisJCWxvY2FsIGNvdW50PTAKKwkJd2hpbGUgdHJ1ZTsgZG8KKwkJCWV2YWwgJFBTRVVETyBncm91cGFkZCAkb3B0cyB8fCB0cnVlCisJCQlncm91cF9leGlzdHM9ImBncmVwICJeJGdyb3VwbmFtZToiICRyb290ZGlyL2V0Yy9ncm91cCB8fCB0cnVlYCIKKwkJCWlmIHRlc3QgIngkZ3JvdXBfZXhpc3RzIiA9ICJ4IjsgdGhlbgorCQkJCWJid2FybiAiJHtQTn06IGdyb3VwYWRkIGNvbW1hbmQgZGlkIG5vdCBzdWNjZWVkLiBSZXRyeWluZy4uLiIKKwkJCWVsc2UKKwkJCQlicmVhaworCQkJZmkKKwkJCWNvdW50PWBleHByICRjb3VudCArIDFgCisJCQlpZiB0ZXN0ICRjb3VudCA9ICRyZXRyaWVzOyB0aGVuCisJCQkJYmJmYXRhbCAiJHtQTn06IFRyaWVkIHJ1bm5pbmcgZ3JvdXBhZGQgY29tbWFuZCAkcmV0cmllcyB0aW1lcyB3aXRob3V0IHN1Y2Nlc3MsIGdpdmluZyB1cCIKKwkJCWZpCisgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCAkY291bnQKKwkJZG9uZQorCWVsc2UKKwkJYmJub3RlICIke1BOfTogZ3JvdXAgJGdyb3VwbmFtZSBhbHJlYWR5IGV4aXN0cywgbm90IHJlLWNyZWF0aW5nIGl0IgorCWZpCit9CisKK3BlcmZvcm1fdXNlcmFkZCAoKSB7CisJbG9jYWwgcm9vdGRpcj0iJDEiCisJbG9jYWwgb3B0cz0iJDIiCisJbG9jYWwgcmV0cmllcz0iJDMiCisJYmJub3RlICIke1BOfTogUGVyZm9ybWluZyB1c2VyYWRkIHdpdGggWyRvcHRzXSBhbmQgJHJldHJpZXMgdGltZXMgb2YgcmV0cnkiCisJbG9jYWwgdXNlcm5hbWU9YGVjaG8gIiRvcHRzIiB8IGF3ayAneyBwcmludCAkTkYgfSdgCisJbG9jYWwgdXNlcl9leGlzdHM9ImBncmVwICJeJHVzZXJuYW1lOiIgJHJvb3RkaXIvZXRjL3Bhc3N3ZCB8fCB0cnVlYCIKKwlpZiB0ZXN0ICJ4JHVzZXJfZXhpc3RzIiA9ICJ4IjsgdGhlbgorCSAgICAgICBsb2NhbCBjb3VudD0wCisJICAgICAgIHdoaWxlIHRydWU7IGRvCisJCSAgICAgICBldmFsICRQU0VVRE8gdXNlcmFkZCAkb3B0cyB8fCB0cnVlCisJCSAgICAgICB1c2VyX2V4aXN0cz0iYGdyZXAgIl4kdXNlcm5hbWU6IiAkcm9vdGRpci9ldGMvcGFzc3dkIHx8IHRydWVgIgorCQkgICAgICAgaWYgdGVzdCAieCR1c2VyX2V4aXN0cyIgPSAieCI7IHRoZW4KKwkJCSAgICAgICBiYndhcm4gIiR7UE59OiB1c2VyYWRkIGNvbW1hbmQgZGlkIG5vdCBzdWNjZWVkLiBSZXRyeWluZy4uLiIKKwkJICAgICAgIGVsc2UKKwkJCSAgICAgICBicmVhaworCQkgICAgICAgZmkKKwkJICAgICAgIGNvdW50PWBleHByICRjb3VudCArIDFgCisJCSAgICAgICBpZiB0ZXN0ICRjb3VudCA9ICRyZXRyaWVzOyB0aGVuCisJCQkJYmJmYXRhbCAiJHtQTn06IFRyaWVkIHJ1bm5pbmcgdXNlcmFkZCBjb21tYW5kICRyZXRyaWVzIHRpbWVzIHdpdGhvdXQgc3VjY2VzcywgZ2l2aW5nIHVwIgorCQkgICAgICAgZmkKKwkJICAgICAgIHNsZWVwICRjb3VudAorCSAgICAgICBkb25lCisJZWxzZQorCQliYm5vdGUgIiR7UE59OiB1c2VyICR1c2VybmFtZSBhbHJlYWR5IGV4aXN0cywgbm90IHJlLWNyZWF0aW5nIGl0IgorCWZpCit9CisKK3BlcmZvcm1fZ3JvdXBtZW1zICgpIHsKKwlsb2NhbCByb290ZGlyPSIkMSIKKwlsb2NhbCBvcHRzPSIkMiIKKwlsb2NhbCByZXRyaWVzPSIkMyIKKwliYm5vdGUgIiR7UE59OiBQZXJmb3JtaW5nIGdyb3VwbWVtcyB3aXRoIFskb3B0c10gYW5kICRyZXRyaWVzIHRpbWVzIG9mIHJldHJ5IgorCWxvY2FsIGdyb3VwbmFtZT1gZWNobyAiJG9wdHMiIHwgYXdrICd7IGZvciAoaSA9IDE7IGkgPCBORjsgaSsrKSBpZiAoJGkgPT0gIi1nIiB8fCAkaSA9PSAiLS1ncm91cCIpIHByaW50ICQoaSsxKSB9J2AKKwlsb2NhbCB1c2VybmFtZT1gZWNobyAiJG9wdHMiIHwgYXdrICd7IGZvciAoaSA9IDE7IGkgPCBORjsgaSsrKSBpZiAoJGkgPT0gIi1hIiB8fCAkaSA9PSAiLS1hZGQiKSBwcmludCAkKGkrMSkgfSdgCisJYmJub3RlICIke1BOfTogUnVubmluZyBncm91cG1lbXMgY29tbWFuZCB3aXRoIGdyb3VwICRncm91cG5hbWUgYW5kIHVzZXIgJHVzZXJuYW1lIgorCSMgZ3JvdXBtZW1zIGZhaWxzIGlmIC9ldGMvZ3NoYWRvdyBkb2VzIG5vdCBleGlzdAorCWxvY2FsIGdzaGFkb3c9IiIKKwlpZiBbIC1mICRyb290ZGlyJHtzeXNjb25mZGlyfS9nc2hhZG93IF07IHRoZW4KKwkJZ3NoYWRvdz0ieWVzIgorCWVsc2UKKwkJZ3NoYWRvdz0ibm8iCisJCXRvdWNoICRyb290ZGlyJHtzeXNjb25mZGlyfS9nc2hhZG93CisJZmkKKwlsb2NhbCBtZW1fZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6W146XSo6W146XSo6XChbXixdKixcKSokdXNlcm5hbWVcKCxbXixdKlwpKiIgJHJvb3RkaXIvZXRjL2dyb3VwIHx8IHRydWVgIgorCWlmIHRlc3QgIngkbWVtX2V4aXN0cyIgPSAieCI7IHRoZW4KKwkJbG9jYWwgY291bnQ9MAorCQl3aGlsZSB0cnVlOyBkbworCQkJZXZhbCAkUFNFVURPIGdyb3VwbWVtcyAkb3B0cyB8fCB0cnVlCisJCQltZW1fZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6W146XSo6W146XSo6XChbXixdKixcKSokdXNlcm5hbWVcKCxbXixdKlwpKiIgJHJvb3RkaXIvZXRjL2dyb3VwIHx8IHRydWVgIgorCQkJaWYgdGVzdCAieCRtZW1fZXhpc3RzIiA9ICJ4IjsgdGhlbgorCQkJCWJid2FybiAiJHtQTn06IGdyb3VwbWVtcyBjb21tYW5kIGRpZCBub3Qgc3VjY2VlZC4gUmV0cnlpbmcuLi4iCisJCQllbHNlCisJCQkJYnJlYWsKKwkJCWZpCisJCQljb3VudD1gZXhwciAkY291bnQgKyAxYAorCQkJaWYgdGVzdCAkY291bnQgPSAkcmV0cmllczsgdGhlbgorCQkJCWlmIHRlc3QgIngkZ3NoYWRvdyIgPSAieG5vIjsgdGhlbgorCQkJCQlybSAtZiAkcm9vdGRpciR7c3lzY29uZmRpcn0vZ3NoYWRvdworCQkJCQlybSAtZiAkcm9vdGRpciR7c3lzY29uZmRpcn0vZ3NoYWRvdy0KKwkJCQlmaQorCQkJCWJiZmF0YWwgIiR7UE59OiBUcmllZCBydW5uaW5nIGdyb3VwbWVtcyBjb21tYW5kICRyZXRyaWVzIHRpbWVzIHdpdGhvdXQgc3VjY2VzcywgZ2l2aW5nIHVwIgorCQkJZmkKKwkJCXNsZWVwICRjb3VudAorCQlkb25lCisJZWxzZQorCQliYndhcm4gIiR7UE59OiBncm91cCAkZ3JvdXBuYW1lIGFscmVhZHkgY29udGFpbnMgJHVzZXJuYW1lLCBub3QgcmUtYWRkaW5nIGl0IgorCWZpCisJaWYgdGVzdCAieCRnc2hhZG93IiA9ICJ4bm8iOyB0aGVuCisJCXJtIC1mICRyb290ZGlyJHtzeXNjb25mZGlyfS9nc2hhZG93CisJCXJtIC1mICRyb290ZGlyJHtzeXNjb25mZGlyfS9nc2hhZG93LQorCWZpCit9CisKK3BlcmZvcm1fZ3JvdXBkZWwgKCkgeworCWxvY2FsIHJvb3RkaXI9IiQxIgorCWxvY2FsIG9wdHM9IiQyIgorCWxvY2FsIHJldHJpZXM9IiQzIgorCWJibm90ZSAiJHtQTn06IFBlcmZvcm1pbmcgZ3JvdXBkZWwgd2l0aCBbJG9wdHNdIGFuZCAkcmV0cmllcyB0aW1lcyBvZiByZXRyeSIKKwlsb2NhbCBncm91cG5hbWU9YGVjaG8gIiRvcHRzIiB8IGF3ayAneyBwcmludCAkTkYgfSdgCisJbG9jYWwgZ3JvdXBfZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6IiAkcm9vdGRpci9ldGMvZ3JvdXAgfHwgdHJ1ZWAiCisJaWYgdGVzdCAieCRncm91cF9leGlzdHMiICE9ICJ4IjsgdGhlbgorCQlsb2NhbCBjb3VudD0wCisJCXdoaWxlIHRydWU7IGRvCisJCQlldmFsICRQU0VVRE8gZ3JvdXBkZWwgJG9wdHMgfHwgdHJ1ZQorCQkJZ3JvdXBfZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6IiAkcm9vdGRpci9ldGMvZ3JvdXAgfHwgdHJ1ZWAiCisJCQlpZiB0ZXN0ICJ4JGdyb3VwX2V4aXN0cyIgIT0gIngiOyB0aGVuCisJCQkJYmJ3YXJuICIke1BOfTogZ3JvdXBkZWwgY29tbWFuZCBkaWQgbm90IHN1Y2NlZWQuIFJldHJ5aW5nLi4uIgorCQkJZWxzZQorCQkJCWJyZWFrCisJCQlmaQorCQkJY291bnQ9YGV4cHIgJGNvdW50ICsgMWAKKwkJCWlmIHRlc3QgJGNvdW50ID0gJHJldHJpZXM7IHRoZW4KKwkJCQliYmZhdGFsICIke1BOfTogVHJpZWQgcnVubmluZyBncm91cGRlbCBjb21tYW5kICRyZXRyaWVzIHRpbWVzIHdpdGhvdXQgc3VjY2VzcywgZ2l2aW5nIHVwIgorCQkJZmkKKwkJCXNsZWVwICRjb3VudAorCQlkb25lCisJZWxzZQorCQliYndhcm4gIiR7UE59OiBncm91cCAkZ3JvdXBuYW1lIGRvZXNuJ3QgZXhpc3QsIG5vdCByZW1vdmluZyBpdCIKKwlmaQorfQorCitwZXJmb3JtX3VzZXJkZWwgKCkgeworCWxvY2FsIHJvb3RkaXI9IiQxIgorCWxvY2FsIG9wdHM9IiQyIgorCWxvY2FsIHJldHJpZXM9IiQzIgorCWJibm90ZSAiJHtQTn06IFBlcmZvcm1pbmcgdXNlcmRlbCB3aXRoIFskb3B0c10gYW5kICRyZXRyaWVzIHRpbWVzIG9mIHJldHJ5IgorCWxvY2FsIHVzZXJuYW1lPWBlY2hvICIkb3B0cyIgfCBhd2sgJ3sgcHJpbnQgJE5GIH0nYAorCWxvY2FsIHVzZXJfZXhpc3RzPSJgZ3JlcCAiXiR1c2VybmFtZToiICRyb290ZGlyL2V0Yy9wYXNzd2QgfHwgdHJ1ZWAiCisJaWYgdGVzdCAieCR1c2VyX2V4aXN0cyIgIT0gIngiOyB0aGVuCisJICAgICAgIGxvY2FsIGNvdW50PTAKKwkgICAgICAgd2hpbGUgdHJ1ZTsgZG8KKwkJICAgICAgIGV2YWwgJFBTRVVETyB1c2VyZGVsICRvcHRzIHx8IHRydWUKKwkJICAgICAgIHVzZXJfZXhpc3RzPSJgZ3JlcCAiXiR1c2VybmFtZToiICRyb290ZGlyL2V0Yy9wYXNzd2QgfHwgdHJ1ZWAiCisJCSAgICAgICBpZiB0ZXN0ICJ4JHVzZXJfZXhpc3RzIiAhPSAieCI7IHRoZW4KKwkJCSAgICAgICBiYndhcm4gIiR7UE59OiB1c2VyZGVsIGNvbW1hbmQgZGlkIG5vdCBzdWNjZWVkLiBSZXRyeWluZy4uLiIKKwkJICAgICAgIGVsc2UKKwkJCSAgICAgICBicmVhaworCQkgICAgICAgZmkKKwkJICAgICAgIGNvdW50PWBleHByICRjb3VudCArIDFgCisJCSAgICAgICBpZiB0ZXN0ICRjb3VudCA9ICRyZXRyaWVzOyB0aGVuCisJCQkJYmJmYXRhbCAiJHtQTn06IFRyaWVkIHJ1bm5pbmcgdXNlcmRlbCBjb21tYW5kICRyZXRyaWVzIHRpbWVzIHdpdGhvdXQgc3VjY2VzcywgZ2l2aW5nIHVwIgorCQkgICAgICAgZmkKKwkJICAgICAgIHNsZWVwICRjb3VudAorCSAgICAgICBkb25lCisJZWxzZQorCQliYndhcm4gIiR7UE59OiB1c2VyICR1c2VybmFtZSBkb2Vzbid0IGV4aXN0LCBub3QgcmVtb3ZpbmcgaXQiCisJZmkKK30KKworcGVyZm9ybV9ncm91cG1vZCAoKSB7CisJIyBPdGhlciB0aGFuIHRoZSByZXR1cm4gdmFsdWUgb2YgZ3JvdXBtb2QsIHRoZXJlJ3Mgbm8gc2ltcGxlIHdheSB0byBqdWRnZSB3aGV0aGVyIHRoZSBjb21tYW5kCisJIyBzdWNjZWVkcywgc28gd2UgZGlzYWJsZSAtZSBvcHRpb24gdGVtcG9yYXJpbHkKKwlzZXQgK2UKKwlsb2NhbCByb290ZGlyPSIkMSIKKwlsb2NhbCBvcHRzPSIkMiIKKwlsb2NhbCByZXRyaWVzPSIkMyIKKwliYm5vdGUgIiR7UE59OiBQZXJmb3JtaW5nIGdyb3VwbW9kIHdpdGggWyRvcHRzXSBhbmQgJHJldHJpZXMgdGltZXMgb2YgcmV0cnkiCisJbG9jYWwgZ3JvdXBuYW1lPWBlY2hvICIkb3B0cyIgfCBhd2sgJ3sgcHJpbnQgJE5GIH0nYAorCWxvY2FsIGdyb3VwX2V4aXN0cz0iYGdyZXAgIl4kZ3JvdXBuYW1lOiIgJHJvb3RkaXIvZXRjL2dyb3VwIHx8IHRydWVgIgorCWlmIHRlc3QgIngkZ3JvdXBfZXhpc3RzIiAhPSAieCI7IHRoZW4KKwkJbG9jYWwgY291bnQ9MAorCQl3aGlsZSB0cnVlOyBkbworCQkJZXZhbCAkUFNFVURPIGdyb3VwbW9kICRvcHRzCisJCQlpZiB0ZXN0ICQ/ICE9IDA7IHRoZW4KKwkJCQliYndhcm4gIiR7UE59OiBncm91cG1vZCBjb21tYW5kIGRpZCBub3Qgc3VjY2VlZC4gUmV0cnlpbmcuLi4iCisJCQllbHNlCisJCQkJYnJlYWsKKwkJCWZpCisJCQljb3VudD1gZXhwciAkY291bnQgKyAxYAorCQkJaWYgdGVzdCAkY291bnQgPSAkcmV0cmllczsgdGhlbgorCQkJCWJiZmF0YWwgIiR7UE59OiBUcmllZCBydW5uaW5nIGdyb3VwbW9kIGNvbW1hbmQgJHJldHJpZXMgdGltZXMgd2l0aG91dCBzdWNjZXNzLCBnaXZpbmcgdXAiCisJCQlmaQorCQkJc2xlZXAgJGNvdW50CisJCWRvbmUKKwllbHNlCisJCWJid2FybiAiJHtQTn06IGdyb3VwICRncm91cG5hbWUgZG9lc24ndCBleGlzdCwgdW5hYmxlIHRvIG1vZGlmeSBpdCIKKwlmaQorCXNldCAtZQorfQorCitwZXJmb3JtX3VzZXJtb2QgKCkgeworCSMgU2FtZSByZWFzb24gd2l0aCBncm91cG1vZCwgdGVtcG9yYXJpbHkgZGlzYWJsZSAtZSBvcHRpb24KKwlzZXQgK2UKKwlsb2NhbCByb290ZGlyPSIkMSIKKwlsb2NhbCBvcHRzPSIkMiIKKwlsb2NhbCByZXRyaWVzPSIkMyIKKwliYm5vdGUgIiR7UE59OiBQZXJmb3JtaW5nIHVzZXJtb2Qgd2l0aCBbJG9wdHNdIGFuZCAkcmV0cmllcyB0aW1lcyBvZiByZXRyeSIKKwlsb2NhbCB1c2VybmFtZT1gZWNobyAiJG9wdHMiIHwgYXdrICd7IHByaW50ICRORiB9J2AKKwlsb2NhbCB1c2VyX2V4aXN0cz0iYGdyZXAgIl4kdXNlcm5hbWU6IiAkcm9vdGRpci9ldGMvcGFzc3dkIHx8IHRydWVgIgorCWlmIHRlc3QgIngkdXNlcl9leGlzdHMiICE9ICJ4IjsgdGhlbgorCSAgICAgICBsb2NhbCBjb3VudD0wCisJICAgICAgIHdoaWxlIHRydWU7IGRvCisJCSAgICAgICBldmFsICRQU0VVRE8gdXNlcm1vZCAkb3B0cworCQkgICAgICAgaWYgdGVzdCAkPyAhPSAwOyB0aGVuCisJCQkgICAgICAgYmJ3YXJuICIke1BOfTogdXNlcm1vZCBjb21tYW5kIGRpZCBub3Qgc3VjY2VlZC4gUmV0cnlpbmcuLi4iCisJCSAgICAgICBlbHNlCisJCQkgICAgICAgYnJlYWsKKwkJICAgICAgIGZpCisJCSAgICAgICBjb3VudD1gZXhwciAkY291bnQgKyAxYAorCQkgICAgICAgaWYgdGVzdCAkY291bnQgPSAkcmV0cmllczsgdGhlbgorCQkJCWJiZmF0YWwgIiR7UE59OiBUcmllZCBydW5uaW5nIHVzZXJtb2QgY29tbWFuZCAkcmV0cmllcyB0aW1lcyB3aXRob3V0IHN1Y2Nlc3MsIGdpdmluZyB1cCIKKwkJICAgICAgIGZpCisJCSAgICAgICBzbGVlcCAkY291bnQKKwkgICAgICAgZG9uZQorCWVsc2UKKwkJYmJ3YXJuICIke1BOfTogdXNlciAkdXNlcm5hbWUgZG9lc24ndCBleGlzdCwgdW5hYmxlIHRvIG1vZGlmeSBpdCIKKwlmaQorCXNldCAtZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXRpbGl0eS10YXNrcy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXRpbGl0eS10YXNrcy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MTdiODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91dGlsaXR5LXRhc2tzLmJiY2xhc3MKQEAgLTAsMCArMSw2OSBAQAorYWRkdGFzayBsaXN0dGFza3MKK2RvX2xpc3R0YXNrc1tub3N0YW1wXSA9ICIxIgorcHl0aG9uIGRvX2xpc3R0YXNrcygpIHsKKyAgICB0YXNrZGVzY3MgPSB7fQorICAgIG1heGxlbiA9IDAKKyAgICBmb3IgZSBpbiBkLmtleXMoKToKKyAgICAgICAgaWYgZC5nZXRWYXJGbGFnKGUsICd0YXNrJyk6CisgICAgICAgICAgICBtYXhsZW4gPSBtYXgobWF4bGVuLCBsZW4oZSkpCisgICAgICAgICAgICBpZiBlLmVuZHN3aXRoKCdfc2V0c2NlbmUnKToKKyAgICAgICAgICAgICAgICBkZXNjID0gIiVzIChzZXRzY2VuZSB2ZXJzaW9uKSIgJSAoZC5nZXRWYXJGbGFnKGVbOi05XSwgJ2RvYycpIG9yICcnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZXNjID0gZC5nZXRWYXJGbGFnKGUsICdkb2MnKSBvciAnJworICAgICAgICAgICAgdGFza2Rlc2NzW2VdID0gZGVzYworCisgICAgdGFza3MgPSBzb3J0ZWQodGFza2Rlc2NzLmtleXMoKSkKKyAgICBmb3IgdGFza25hbWUgaW4gdGFza3M6CisgICAgICAgIGJiLnBsYWluKCIlcyAgJXMiICUgKHRhc2tuYW1lLmxqdXN0KG1heGxlbiksIHRhc2tkZXNjc1t0YXNrbmFtZV0pKQorfQorCitDTEVBTkZVTkNTID89ICIiCisKK1RfdGFzay1jbGVhbiA9ICIke0xPR19ESVJ9L2NsZWFubG9ncy8ke1BOfSIKK2FkZHRhc2sgY2xlYW4KK2RvX2NsZWFuW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fY2xlYW4oKSB7CisgICAgIiIiY2xlYXIgdGhlIGJ1aWxkIGFuZCB0ZW1wIGRpcmVjdG9yaWVzIiIiCisgICAgZGlyID0gZC5leHBhbmQoIiR7V09SS0RJUn0iKQorICAgIGJiLm5vdGUoIlJlbW92aW5nICIgKyBkaXIpCisgICAgb2UucGF0aC5yZW1vdmUoZGlyKQorCisgICAgZGlyID0gIiVzLioiICUgYmIuZGF0YS5leHBhbmQoZC5nZXRWYXIoJ1NUQU1QJywgRmFsc2UpLCBkKQorICAgIGJiLm5vdGUoIlJlbW92aW5nICIgKyBkaXIpCisgICAgb2UucGF0aC5yZW1vdmUoZGlyKQorCisgICAgZm9yIGYgaW4gKGQuZ2V0VmFyKCdDTEVBTkZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmLCBkKQorfQorCithZGR0YXNrIGNoZWNrdXJpCitkb19jaGVja3VyaVtub3N0YW1wXSA9ICIxIgorcHl0aG9uIGRvX2NoZWNrdXJpKCkgeworICAgIHNyY191cmkgPSAoZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIGxlbihzcmNfdXJpKSA9PSAwOgorICAgICAgICByZXR1cm4KKworICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgdHJ5OgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKHNyY191cmksIGxvY2FsZGF0YSkKKyAgICAgICAgZmV0Y2hlci5jaGVja3N0YXR1cygpCisgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uLCBlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKGUpCit9CisKK2FkZHRhc2sgY2hlY2t1cmlhbGwgYWZ0ZXIgZG9fY2hlY2t1cmkKK2RvX2NoZWNrdXJpYWxsW3JlY3JkZXB0YXNrXSA9ICJkb19jaGVja3VyaWFsbCBkb19jaGVja3VyaSIKK2RvX2NoZWNrdXJpYWxsW3JlY2lkZXB0YXNrXSA9ICJkb18ke0JCX0RFRkFVTFRfVEFTS30iCitkb19jaGVja3VyaWFsbFtub3N0YW1wXSA9ICIxIgorZG9fY2hlY2t1cmlhbGwoKSB7CisJOgorfQorCithZGR0YXNrIGZldGNoYWxsIGFmdGVyIGRvX2ZldGNoCitkb19mZXRjaGFsbFtyZWNyZGVwdGFza10gPSAiZG9fZmV0Y2hhbGwgZG9fZmV0Y2giCitkb19mZXRjaGFsbFtyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fZmV0Y2hhbGwoKSB7CisJOgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXRpbHMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3V0aWxzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiOTJjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3V0aWxzLmJiY2xhc3MKQEAgLTAsMCArMSwzODAgQEAKKyMgRm9yIGNvbXBhdGliaWxpdHkKK2RlZiBiYXNlX3BhdGhfam9pbihhLCAqcCk6CisgICAgcmV0dXJuIG9lLnBhdGguam9pbihhLCAqcCkKKworZGVmIGJhc2VfcGF0aF9yZWxhdGl2ZShzcmMsIGRlc3QpOgorICAgIHJldHVybiBvZS5wYXRoLnJlbGF0aXZlKHNyYywgZGVzdCkKKworZGVmIGJhc2VfcGF0aF9vdXQocGF0aCwgZCk6CisgICAgcmV0dXJuIG9lLnBhdGguZm9ybWF0X2Rpc3BsYXkocGF0aCwgZCkKKworZGVmIGJhc2VfcmVhZF9maWxlKGZpbGVuYW1lKToKKyAgICByZXR1cm4gb2UudXRpbHMucmVhZF9maWxlKGZpbGVuYW1lKQorCitkZWYgYmFzZV9pZmVsc2UoY29uZGl0aW9uLCBpZnRydWUgPSBUcnVlLCBpZmZhbHNlID0gRmFsc2UpOgorICAgIHJldHVybiBvZS51dGlscy5pZmVsc2UoY29uZGl0aW9uLCBpZnRydWUsIGlmZmFsc2UpCisKK2RlZiBiYXNlX2NvbmRpdGlvbmFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIHJldHVybiBvZS51dGlscy5jb25kaXRpb25hbCh2YXJpYWJsZSwgY2hlY2t2YWx1ZSwgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKQorCitkZWYgYmFzZV9sZXNzX29yX2VxdWFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIHJldHVybiBvZS51dGlscy5sZXNzX29yX2VxdWFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpCisKK2RlZiBiYXNlX3ZlcnNpb25fbGVzc19vcl9lcXVhbCh2YXJpYWJsZSwgY2hlY2t2YWx1ZSwgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKToKKyAgICByZXR1cm4gb2UudXRpbHMudmVyc2lvbl9sZXNzX29yX2VxdWFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpCisKK2RlZiBiYXNlX2NvbnRhaW5zKHZhcmlhYmxlLCBjaGVja3ZhbHVlcywgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKToKKyAgICByZXR1cm4gYmIudXRpbHMuY29udGFpbnModmFyaWFibGUsIGNoZWNrdmFsdWVzLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpCisKK2RlZiBiYXNlX2JvdGhfY29udGFpbih2YXJpYWJsZTEsIHZhcmlhYmxlMiwgY2hlY2t2YWx1ZSwgZCk6CisgICAgcmV0dXJuIG9lLnV0aWxzLmJvdGhfY29udGFpbih2YXJpYWJsZTEsIHZhcmlhYmxlMiwgY2hlY2t2YWx1ZSwgZCkKKworZGVmIGJhc2VfcHJ1bmVfc3VmZml4KHZhciwgc3VmZml4ZXMsIGQpOgorICAgIHJldHVybiBvZS51dGlscy5wcnVuZV9zdWZmaXgodmFyLCBzdWZmaXhlcywgZCkKKworZGVmIG9lX2ZpbHRlcihmLCBzdHIsIGQpOgorICAgIHJldHVybiBvZS51dGlscy5zdHJfZmlsdGVyKGYsIHN0ciwgZCkKKworZGVmIG9lX2ZpbHRlcl9vdXQoZiwgc3RyLCBkKToKKyAgICByZXR1cm4gb2UudXRpbHMuc3RyX2ZpbHRlcl9vdXQoZiwgc3RyLCBkKQorCitkZWYgbWFjaGluZV9wYXRocyhkKToKKyAgICAiIiJMaXN0IGFueSBleGlzdGluZyBtYWNoaW5lIHNwZWNpZmljIGZpbGVzcGF0aCBkaXJlY3RvcmllcyIiIgorICAgIG1hY2hpbmUgPSBkLmdldFZhcigiTUFDSElORSIsIFRydWUpCisgICAgZmlsZXNwYXRocGtnID0gZC5nZXRWYXIoIkZJTEVTUEFUSFBLRyIsIFRydWUpLnNwbGl0KCI6IikKKyAgICBmb3IgYmFzZXBhdGggaW4gZC5nZXRWYXIoIkZJTEVTUEFUSEJBU0UiLCBUcnVlKS5zcGxpdCgiOiIpOgorICAgICAgICBmb3IgcGtncGF0aCBpbiBmaWxlc3BhdGhwa2c6CisgICAgICAgICAgICBtYWNoaW5lcGF0aCA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgcGtncGF0aCwgbWFjaGluZSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIobWFjaGluZXBhdGgpOgorICAgICAgICAgICAgICAgIHlpZWxkIG1hY2hpbmVwYXRoCisKK2RlZiBpc19tYWNoaW5lX3NwZWNpZmljKGQpOgorICAgICIiIkRldGVybWluZSB3aGV0aGVyIHRoZSBjdXJyZW50IHJlY2lwZSBpcyBtYWNoaW5lIHNwZWNpZmljIiIiCisgICAgbWFjaGluZXBhdGhzID0gc2V0KG1hY2hpbmVfcGF0aHMoZCkpCisgICAgc3JjdXJpID0gZC5nZXRWYXIoIlNSQ19VUkkiLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIHVybCBpbiBzcmN1cmk6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goW3NyY3VyaV0sIGQpCisgICAgICAgIGlmIHVybC5zdGFydHN3aXRoKCJmaWxlOi8vIik6CisgICAgICAgICAgICBpZiBhbnkoZmV0Y2hlci5sb2NhbHBhdGgodXJsKS5zdGFydHN3aXRoKG1wICsgIi8iKSBmb3IgbXAgaW4gbWFjaGluZXBhdGhzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCitvZV9zb2luc3RhbGwoKSB7CisJIyBQdXJwb3NlOiBJbnN0YWxsIHNoYXJlZCBsaWJyYXJ5IGZpbGUgYW5kCisJIyAgICAgICAgICBjcmVhdGUgdGhlIG5lY2Vzc2FyeSBsaW5rcworCSMgRXhhbXBsZToKKwkjCisJIyBvZV8KKwkjCisJI2Jibm90ZSBpbnN0YWxsaW5nIHNoYXJlZCBsaWJyYXJ5ICQxIHRvICQyCisJIworCWxpYm5hbWU9YGJhc2VuYW1lICQxYAorCWluc3RhbGwgLW0gNzU1ICQxICQyLyRsaWJuYW1lCisJc29uYW1lbGluaz1gJHtIT1NUX1BSRUZJWH1yZWFkZWxmIC1kICQxIHxncmVwICdMaWJyYXJ5IHNvbmFtZTonIHxzZWQgLWUgJ3MvLipcW1woLipcKVxdLiovXDEvJ2AKKwlzb2xpbms9YGVjaG8gJGxpYm5hbWUgfCBzZWQgLWUgJ3MvXC5zb1wuLiovLnNvLydgCisJbG4gLXNmICRsaWJuYW1lICQyLyRzb25hbWVsaW5rCisJbG4gLXNmICRsaWJuYW1lICQyLyRzb2xpbmsKK30KKworb2VfbGliaW5zdGFsbCgpIHsKKwkjIFB1cnBvc2U6IEluc3RhbGwgYSBsaWJyYXJ5LCBpbiBhbGwgaXRzIGZvcm1zCisJIyBFeGFtcGxlCisJIworCSMgb2VfbGliaW5zdGFsbCBsaWJsdGRsICR7U1RBR0lOR19MSUJESVJ9LworCSMgb2VfbGliaW5zdGFsbCAtQyBzcmMvbGliYmxhaCBsaWJibGFoICR7RH0vJHtsaWJkaXJ9LworCWRpcj0iIgorCWxpYnRvb2w9IiIKKwlzaWxlbnQ9IiIKKwlyZXF1aXJlX3N0YXRpYz0iIgorCXJlcXVpcmVfc2hhcmVkPSIiCisJc3RhZ2luZ19pbnN0YWxsPSIiCisJd2hpbGUgWyAiJCMiIC1ndCAwIF07IGRvCisJCWNhc2UgIiQxIiBpbgorCQktQykKKwkJCXNoaWZ0CisJCQlkaXI9IiQxIgorCQkJOzsKKwkJLXMpCisJCQlzaWxlbnQ9MQorCQkJOzsKKwkJLWEpCisJCQlyZXF1aXJlX3N0YXRpYz0xCisJCQk7OworCQktc28pCisJCQlyZXF1aXJlX3NoYXJlZD0xCisJCQk7OworCQktKikKKwkJCWJiZmF0YWwgIm9lX2xpYmluc3RhbGw6IHVua25vd24gb3B0aW9uOiAkMSIKKwkJCTs7CisJCSopCisJCQlicmVhazsKKwkJCTs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisKKwlsaWJuYW1lPSIkMSIKKwlzaGlmdAorCWRlc3RwYXRoPSIkMSIKKwlpZiBbIC16ICIkZGVzdHBhdGgiIF07IHRoZW4KKwkJYmJmYXRhbCAib2VfbGliaW5zdGFsbDogbm8gZGVzdGluYXRpb24gcGF0aCBzcGVjaWZpZWQiCisJZmkKKwlpZiBlY2hvICIkZGVzdHBhdGgvIiB8IGVncmVwICdeJHtTVEFHSU5HX0xJQkRJUn0vJyA+L2Rldi9udWxsCisJdGhlbgorCQlzdGFnaW5nX2luc3RhbGw9MQorCWZpCisKKwlfX3J1bmNtZCAoKSB7CisJCWlmIFsgLXogIiRzaWxlbnQiIF07IHRoZW4KKwkJCWVjaG8gPiYyICJvZV9saWJpbnN0YWxsOiAkKiIKKwkJZmkKKwkJJCoKKwl9CisKKwlpZiBbIC16ICIkZGlyIiBdOyB0aGVuCisJCWRpcj1gcHdkYAorCWZpCisKKwlkb3RsYWk9JGxpYm5hbWUubGFpCisKKwkjIFNhbml0eSBjaGVjayB0aGF0IHRoZSBsaWJuYW1lLmxhaSBpcyB1bmlxdWUKKwludW1iZXJfb2ZfZmlsZXM9YChjZCAkZGlyOyBmaW5kIC4gLW5hbWUgIiRkb3RsYWkiKSB8IHdjIC1sYAorCWlmIFsgJG51bWJlcl9vZl9maWxlcyAtZ3QgMSBdOyB0aGVuCisJCWJiZmF0YWwgIm9lX2xpYmluc3RhbGw6ICRkb3RsYWkgaXMgbm90IHVuaXF1ZSBpbiAkZGlyIgorCWZpCisKKworCWRpcj0kZGlyYChjZCAkZGlyO2ZpbmQgLiAtbmFtZSAiJGRvdGxhaSIpIHwgc2VkICJzL15cLi8vO3MvXC8kZG90bGFpXCQvLztxImAKKwlvbGRkaXI9YHB3ZGAKKwlfX3J1bmNtZCBjZCAkZGlyCisKKwlsYWZpbGU9JGxpYm5hbWUubGEKKworCSMgSWYgc3VjaCBmaWxlIGRvZXNuJ3QgZXhpc3QsIHRyeSB0byBjdXQgdmVyc2lvbiBzdWZmaXgKKwlpZiBbICEgLWYgIiRsYWZpbGUiIF07IHRoZW4KKwkJbGlibmFtZTE9YGVjaG8gIiRsaWJuYW1lIiB8IHNlZCAncy8tWzAtOS5dKiQvLydgCisJCWxhZmlsZTE9JGxpYm5hbWUubGEKKwkJaWYgWyAtZiAiJGxhZmlsZTEiIF07IHRoZW4KKwkJCWxpYm5hbWU9JGxpYm5hbWUxCisJCQlsYWZpbGU9JGxhZmlsZTEKKwkJZmkKKwlmaQorCisJaWYgWyAtZiAiJGxhZmlsZSIgXTsgdGhlbgorCQkjIGxpYnRvb2wgYXJjaGl2ZQorCQlldmFsIGBjYXQgJGxhZmlsZXxncmVwICJebGlicmFyeV9uYW1lcz0iYAorCQlsaWJ0b29sPTEKKwllbHNlCisJCWxpYnJhcnlfbmFtZXM9IiRsaWJuYW1lLnNvKiAkbGlibmFtZS5kbGwuYSAkbGlibmFtZS4qLmR5bGliIgorCWZpCisKKwlfX3J1bmNtZCBpbnN0YWxsIC1kICRkZXN0cGF0aC8KKwlkb3RhPSRsaWJuYW1lLmEKKwlpZiBbIC1mICIkZG90YSIgLW8gLW4gIiRyZXF1aXJlX3N0YXRpYyIgXTsgdGhlbgorCQlybSAtZiAkZGVzdHBhdGgvJGRvdGEKKwkJX19ydW5jbWQgaW5zdGFsbCAtbSAwNjQ0ICRkb3RhICRkZXN0cGF0aC8KKwlmaQorCWlmIFsgLWYgIiRkb3RsYWkiIC1hIC1uICIkbGlidG9vbCIgXTsgdGhlbgorCQlybSAtZiAkZGVzdHBhdGgvJGxpYm5hbWUubGEKKwkJX19ydW5jbWQgaW5zdGFsbCAtbSAwNjQ0ICRkb3RsYWkgJGRlc3RwYXRoLyRsaWJuYW1lLmxhCisJZmkKKworCWZvciBuYW1lIGluICRsaWJyYXJ5X25hbWVzOyBkbworCQlmaWxlcz1gZXZhbCBlY2hvICRuYW1lYAorCQlmb3IgZiBpbiAkZmlsZXM7IGRvCisJCQlpZiBbICEgLWUgIiRmIiBdOyB0aGVuCisJCQkJaWYgWyAtbiAiJGxpYnRvb2wiIF07IHRoZW4KKwkJCQkJYmJmYXRhbCAib2VfbGliaW5zdGFsbDogJGRpci8kZiBub3QgZm91bmQuIgorCQkJCWZpCisJCQllbGlmIFsgLUwgIiRmIiBdOyB0aGVuCisJCQkJX19ydW5jbWQgY3AgLVAgIiRmIiAkZGVzdHBhdGgvCisJCQllbGlmIFsgISAtTCAiJGYiIF07IHRoZW4KKwkJCQlsaWJmaWxlPSIkZiIKKwkJCQlybSAtZiAkZGVzdHBhdGgvJGxpYmZpbGUKKwkJCQlfX3J1bmNtZCBpbnN0YWxsIC1tIDA3NTUgJGxpYmZpbGUgJGRlc3RwYXRoLworCQkJZmkKKwkJZG9uZQorCWRvbmUKKworCWlmIFsgLXogIiRsaWJmaWxlIiBdOyB0aGVuCisJCWlmICBbIC1uICIkcmVxdWlyZV9zaGFyZWQiIF07IHRoZW4KKwkJCWJiZmF0YWwgIm9lX2xpYmluc3RhbGw6IHVuYWJsZSB0byBsb2NhdGUgc2hhcmVkIGxpYnJhcnkiCisJCWZpCisJZWxpZiBbIC16ICIkbGlidG9vbCIgXTsgdGhlbgorCQkjIHNwZWNpYWwgY2FzZSBoYWNrIGZvciBub24tbGlidG9vbCAuc28uIy4jLiMgbGlua3MKKwkJYmFzZWxpYmZpbGU9YGJhc2VuYW1lICIkbGliZmlsZSJgCisJCWlmIChlY2hvICRiYXNlbGliZmlsZSB8IGdyZXAgLXFFICdebGliLipcLnNvXC5bMC05Ll0qJCcpOyB0aGVuCisJCQlzb25hbWVsaW5rPWAke0hPU1RfUFJFRklYfXJlYWRlbGYgLWQgJGxpYmZpbGUgfGdyZXAgJ0xpYnJhcnkgc29uYW1lOicgfHNlZCAtZSAncy8uKlxbXCguKlwpXF0uKi9cMS8nYAorCQkJc29saW5rPWBlY2hvICRiYXNlbGliZmlsZSB8IHNlZCAtZSAncy9cLnNvXC4uKi8uc28vJ2AKKwkJCWlmIFsgLW4gIiRzb25hbWVsaW5rIiAtYSB4IiRiYXNlbGliZmlsZSIgIT0geCIkc29uYW1lbGluayIgXTsgdGhlbgorCQkJCV9fcnVuY21kIGxuIC1zZiAkYmFzZWxpYmZpbGUgJGRlc3RwYXRoLyRzb25hbWVsaW5rCisJCQlmaQorCQkJX19ydW5jbWQgbG4gLXNmICRiYXNlbGliZmlsZSAkZGVzdHBhdGgvJHNvbGluaworCQlmaQorCWZpCisKKwlfX3J1bmNtZCBjZCAiJG9sZGRpciIKK30KKworb2VfbWFjaGluc3RhbGwoKSB7CisJIyBQdXJwb3NlOiBJbnN0YWxsIG1hY2hpbmUgZGVwZW5kZW50IGZpbGVzLCBpZiBhdmFpbGFibGUKKwkjICAgICAgICAgIElmIG5vdCBhdmFpbGFibGUsIGNoZWNrIGlmIHRoZXJlIGlzIGEgZGVmYXVsdAorCSMgICAgICAgICAgSWYgbm8gZGVmYXVsdCwganVzdCB0b3VjaCB0aGUgZGVzdGluYXRpb24KKwkjIEV4YW1wbGU6CisJIyAgICAgICAgICAgICAgICAkMSAgJDIgICAkMyAgICAgICAgICQ0CisJIyBvZV9tYWNoaW5zdGFsbCAtbSAwNjQ0IGZzdGFiICR7RH0vZXRjL2ZzdGFiCisJIworCSMgVE9ETzogQ2hlY2sgYXJndW1lbnQgbnVtYmVyPworCSMKKwlmaWxlbmFtZT1gYmFzZW5hbWUgJDNgCisJZGlybmFtZT1gZGlybmFtZSAkM2AKKworCWZvciBvIGluIGBlY2hvICR7T1ZFUlJJREVTfSB8IHRyICc6JyAnICdgOyBkbworCQlpZiBbIC1lICRkaXJuYW1lLyRvLyRmaWxlbmFtZSBdOyB0aGVuCisJCQliYm5vdGUgJGRpcm5hbWUvJG8vJGZpbGVuYW1lIHByZXNlbnQsIGluc3RhbGxpbmcgdG8gJDQKKwkJCWluc3RhbGwgJDEgJDIgJGRpcm5hbWUvJG8vJGZpbGVuYW1lICQ0CisJCQlyZXR1cm4KKwkJZmkKKwlkb25lCisjCWJibm90ZSBvdmVycmlkZXMgc3BlY2lmaWMgZmlsZSBOT1QgcHJlc2VudCwgdHJ5aW5nIGRlZmF1bHQ9JDMuLi4KKwlpZiBbIC1lICQzIF07IHRoZW4KKwkJYmJub3RlICQzIHByZXNlbnQsIGluc3RhbGxpbmcgdG8gJDQKKwkJaW5zdGFsbCAkMSAkMiAkMyAkNAorCWVsc2UKKwkJYmJub3RlICQzIE5PVCBwcmVzZW50LCB0b3VjaGluZyBlbXB0eSAkNAorCQl0b3VjaCAkNAorCWZpCit9CisKK2NyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgKCkgeworCSMgQ3JlYXRlIGEgd3JhcHBlciBzY3JpcHQgd2hlcmUgY29tbWFuZGxpbmUgb3B0aW9ucyBhcmUgbmVlZGVkCisJIworCSMgVGhlc2UgYXJlIHVzZWZ1bCB0byB3b3JrIGFyb3VuZCByZWxvY2F0aW9uIGlzc3VlcywgYnkgcGFzc2luZyBleHRyYSBvcHRpb25zIAorCSMgdG8gYSBwcm9ncmFtCisJIworCSMgVXNhZ2U6IGNyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgRklMRU5BTUUgPGV4dHJhLW9wdGlvbnM+CisKKwljbWQ9JDEKKwlzaGlmdAorCisJZWNobyAiR2VuZXJhdGluZyB3cmFwcGVyIHNjcmlwdCBmb3IgJGNtZCIKKworCW12ICRjbWQgJGNtZC5yZWFsCisJY21kbmFtZT1gYmFzZW5hbWUgJGNtZGAKKwljYXQgPDxFTkQgPiRjbWQKKyMhL2Jpbi9iYXNoCityZWFscGF0aD1cYHJlYWRsaW5rIC1mbiBcJDBcYAorZXhlYyAtYSBcYGRpcm5hbWUgXCRyZWFscGF0aFxgLyRjbWRuYW1lIFxgZGlybmFtZSBcJHJlYWxwYXRoXGAvJGNtZG5hbWUucmVhbCAkQCAiXCRAIgorRU5ECisJY2htb2QgK3ggJGNtZAorfQorCitjcmVhdGVfd3JhcHBlciAoKSB7CisJIyBDcmVhdGUgYSB3cmFwcGVyIHNjcmlwdCB3aGVyZSBleHRyYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5lZWRlZAorCSMKKwkjIFRoZXNlIGFyZSB1c2VmdWwgdG8gd29yayBhcm91bmQgcmVsb2NhdGlvbiBpc3N1ZXMsIGJ5IHNldHRpbmcgZW52aXJvbm1lbnQKKwkjIHZhcmlhYmxlcyB3aGljaCBwb2ludCB0byBwYXRocyBpbiB0aGUgZmlsZXN5c3RlbS4KKwkjCisJIyBVc2FnZTogY3JlYXRlX3dyYXBwZXIgRklMRU5BTUUgW1tWQVI9VkFMVUVdLi5dCisKKwljbWQ9JDEKKwlzaGlmdAorCisJZWNobyAiR2VuZXJhdGluZyB3cmFwcGVyIHNjcmlwdCBmb3IgJGNtZCIKKworCW12ICRjbWQgJGNtZC5yZWFsCisJY21kbmFtZT1gYmFzZW5hbWUgJGNtZGAKKwljYXQgPDxFTkQgPiRjbWQKKyMhL2Jpbi9iYXNoCityZWFscGF0aD1cYHJlYWRsaW5rIC1mbiBcJDBcYAorZXhwb3J0ICRACitleGVjIC1hIFxgZGlybmFtZSBcJHJlYWxwYXRoXGAvJGNtZG5hbWUgXGBkaXJuYW1lIFwkcmVhbHBhdGhcYC8kY21kbmFtZS5yZWFsICJcJEAiCitFTkQKKwljaG1vZCAreCAkY21kCit9CisKKyMgQ29weSBmaWxlcy9kaXJlY3RvcmllcyBmcm9tICQxIHRvICQyIGJ1dCB1c2luZyBoYXJkbGlua3MKKyMgKHByZXNlcnZlIHN5bWxpbmtzKQoraGFyZGxpbmtkaXIgKCkgeworCWZyb209JDEKKwl0bz0kMgorCShjZCAkZnJvbTsgZmluZCAuIC1wcmludDAgfCBjcGlvIC0tbnVsbCAtcGRsdSAkdG8pCit9CisKKworZGVmIGNoZWNrX2FwcF9leGlzdHMoYXBwLCBkKToKKyAgICBhcHAgPSBkLmV4cGFuZChhcHApCisgICAgcGF0aCA9IGQuZ2V0VmFyKCdQQVRIJywgZCwgVHJ1ZSkKKyAgICByZXR1cm4gYm9vbChiYi51dGlscy53aGljaChwYXRoLCBhcHApKQorCitkZWYgZXhwbG9kZV9kZXBzKHMpOgorICAgIHJldHVybiBiYi51dGlscy5leHBsb2RlX2RlcHMocykKKworZGVmIGJhc2Vfc2V0X2ZpbGVzcGF0aChwYXRoLCBkKToKKyAgICBmaWxlc3BhdGggPSBbXQorICAgIGV4dHJhcGF0aHMgPSAoZC5nZXRWYXIoIkZJTEVTRVhUUkFQQVRIUyIsIFRydWUpIG9yICIiKQorICAgICMgUmVtb3ZlIGRlZmF1bHQgZmxhZyB3aGljaCB3YXMgdXNlZCBmb3IgY2hlY2tpbmcKKyAgICBleHRyYXBhdGhzID0gZXh0cmFwYXRocy5yZXBsYWNlKCJfX2RlZmF1bHQ6IiwgIiIpCisgICAgIyBEb24ndCBwcmVwZW5kIGVtcHR5IHN0cmluZ3MgdG8gdGhlIHBhdGggbGlzdAorICAgIGlmIGV4dHJhcGF0aHMgIT0gIiI6CisgICAgICAgIHBhdGggPSBleHRyYXBhdGhzLnNwbGl0KCI6IikgKyBwYXRoCisgICAgIyBUaGUgIjoiIGVuc3VyZXMgd2UgaGF2ZSBhbiAnZW1wdHknIG92ZXJyaWRlCisgICAgb3ZlcnJpZGVzID0gKCI6IiArIChkLmdldFZhcigiRklMRVNPVkVSUklERVMiLCBUcnVlKSBvciAiIikpLnNwbGl0KCI6IikKKyAgICBvdmVycmlkZXMucmV2ZXJzZSgpCisgICAgZm9yIG8gaW4gb3ZlcnJpZGVzOgorICAgICAgICBmb3IgcCBpbiBwYXRoOgorICAgICAgICAgICAgaWYgcCAhPSAiIjogCisgICAgICAgICAgICAgICAgZmlsZXNwYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4ocCwgbykpCisgICAgcmV0dXJuICI6Ii5qb2luKGZpbGVzcGF0aCkKKworZGVmIGV4dGVuZF92YXJpYW50cyhkLCB2YXIsIGV4dGVuZCwgZGVsaW09JzonKToKKyAgICAiIiJSZXR1cm4gYSBzdHJpbmcgb2YgYWxsIGJiIGNsYXNzIGV4dGVuZCB2YXJpYW50cyBmb3IgdGhlIGdpdmVuIGV4dGVuZCIiIgorICAgIHZhcmlhbnRzID0gW10KKyAgICB3aG9sZSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIKKyAgICBmb3IgZXh0IGluIHdob2xlLnNwbGl0KCk6CisgICAgICAgIGVleHQgPSBleHQuc3BsaXQoZGVsaW0pCisgICAgICAgIGlmIGxlbihlZXh0KSA+IDEgYW5kIGVleHRbMF0gPT0gZXh0ZW5kOgorICAgICAgICAgICAgdmFyaWFudHMuYXBwZW5kKGVleHRbMV0pCisgICAgcmV0dXJuICIgIi5qb2luKHZhcmlhbnRzKQorCitkZWYgbXVsdGlsaWJfcGtnX2V4dGVuZChkLCBwa2cpOgorICAgIHZhcmlhbnRzID0gKGQuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbm90IHZhcmlhbnRzOgorICAgICAgICByZXR1cm4gcGtnCisgICAgcGtncyA9IHBrZworICAgIGZvciB2IGluIHZhcmlhbnRzOgorICAgICAgICBwa2dzID0gcGtncyArICIgIiArIHYgKyAiLSIgKyBwa2cKKyAgICByZXR1cm4gcGtncworCitkZWYgYWxsX211bHRpbGliX3R1bmVfdmFsdWVzKGQsIHZhciwgdW5pcXVlID0gVHJ1ZSwgbmVlZF9zcGxpdCA9IFRydWUsIGRlbGltID0gJyAnKToKKyAgICAiIiJSZXR1cm4gYSBzdHJpbmcgb2YgYWxsICR7dmFyfSBpbiBhbGwgbXVsdGlsaWIgdHVuZSBjb25maWd1cmF0aW9uIiIiCisgICAgdmFsdWVzID0gW10KKyAgICB2YWx1ZSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIKKyAgICBpZiB2YWx1ZSAhPSAiIjoKKyAgICAgICAgaWYgbmVlZF9zcGxpdDoKKyAgICAgICAgICAgIGZvciBpdGVtIGluIHZhbHVlLnNwbGl0KGRlbGltKToKKyAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKGl0ZW0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKHZhbHVlKQorICAgIHZhcmlhbnRzID0gZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIKKyAgICBmb3IgaXRlbSBpbiB2YXJpYW50cy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIGl0ZW0KKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgb3ZlcnJpZGVzKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJNTFBSRUZJWCIsIGl0ZW0gKyAiLSIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICB2YWx1ZSA9IGxvY2FsZGF0YS5nZXRWYXIodmFyLCBUcnVlKSBvciAiIgorICAgICAgICBpZiB2YWx1ZSAhPSAiIjoKKyAgICAgICAgICAgIGlmIG5lZWRfc3BsaXQ6CisgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gdmFsdWUuc3BsaXQoZGVsaW0pOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKGl0ZW0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpCisgICAgaWYgdW5pcXVlOgorICAgICAgICAjd2UgZG8gdGhpcyB0byBrZWVwIG9yZGVyIGFzIG11Y2ggYXMgcG9zc2libGUKKyAgICAgICAgcmV0ID0gW10KKyAgICAgICAgZm9yIHZhbHVlIGluIHZhbHVlczoKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZSBpbiByZXQ6CisgICAgICAgICAgICAgICAgcmV0LmFwcGVuZCh2YWx1ZSkKKyAgICBlbHNlOgorICAgICAgICByZXQgPSB2YWx1ZXMKKyAgICByZXR1cm4gIiAiLmpvaW4ocmV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdmFsYS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdmFsYS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZjY2NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy92YWxhLmJiY2xhc3MKQEAgLTAsMCArMSwxOCBAQAorIyBFdmVyeW9uZSBuZWVkcyB2YWxhLW5hdGl2ZSBhbmQgdGFyZ2V0cyBuZWVkIHZhbGEsIHRvbywKKyMgYmVjYXVzZSB0aGF0IGlzIHdoZXJlIHRhcmdldCBidWlsZHMgbG9vayBmb3IgLnZhcGkgZmlsZXMuCisjCitWQUxBREVQRU5EUyA9ICIiCitWQUxBREVQRU5EU19jbGFzcy10YXJnZXQgPSAidmFsYSIKK0RFUEVORFNfYXBwZW5kID0gIiB2YWxhLW5hdGl2ZSAke1ZBTEFERVBFTkRTfSIKKworIyBPdXIgcGF0Y2hlZCB2ZXJzaW9uIG9mIFZhbGEgbG9va3MgaW4gU1RBR0lOR19EQVRBRElSIGZvciAudmFwaSBmaWxlcworZXhwb3J0IFNUQUdJTkdfREFUQURJUgorIyBVcHN0cmVhbSBWYWxhID49IDAuMTEgbG9va3MgaW4gWERHX0RBVEFfRElSUyBmb3IgLnZhcGkgZmlsZXMKK2V4cG9ydCBYREdfREFUQV9ESVJTID0gIiR7U1RBR0lOR19EQVRBRElSfSIKKworIyBQYWNrYWdlIGFkZGl0aW9uYWwgZmlsZXMKK0ZJTEVTXyR7UE59LWRldiArPSAiXAorICAgICR7ZGF0YWRpcn0vdmFsYS92YXBpLyoudmFwaSBcCisgICAgJHtkYXRhZGlyfS92YWxhL3ZhcGkvKi5kZXBzIFwKKyAgICAke2RhdGFkaXJ9L2dpci0xLjAgXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvd2FmLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy93YWYuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTIyMWU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvd2FmLmJiY2xhc3MKQEAgLTAsMCArMSwxMyBAQAord2FmX2RvX2NvbmZpZ3VyZSgpIHsKKwkke1N9L3dhZiBjb25maWd1cmUgLS1wcmVmaXg9JHtwcmVmaXh9ICR7RVhUUkFfT0VDT05GfQorfQorCit3YWZfZG9fY29tcGlsZSgpICB7CisJJHtTfS93YWYgYnVpbGQgJHtQQVJBTExFTF9NQUtFfQorfQorCit3YWZfZG9faW5zdGFsbCgpIHsKKwkke1N9L3dhZiBpbnN0YWxsIC0tZGVzdGRpcj0ke0R9Cit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvYWJpX3ZlcnNpb24uY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2FiaV92ZXJzaW9uLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyOTY4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2FiaV92ZXJzaW9uLmNvbmYKQEAgLTAsMCArMSw3IEBACisjCisjIE9FTEFZT1VUX0FCSSBhbGxvd3MgdXMgdG8gbm90aWZ5IHVzZXJzIHdoZW4gdGhlIGZvcm1hdCBvZiBUTVBESVIgY2hhbmdlcyBpbiAKKyMgYW4gaW5jb21wYXRpYmxlIHdheS4gU3VjaCBjaGFuZ2VzIHNob3VsZCB1c3VhbGx5IGJlIGRldGFpbGVkIGluIHRoZSBjb21taXQKKyMgdGhhdCBicmVha3MgdGhlIGZvcm1hdCBhbmQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgZGlzY3Vzc2VkIG9uIHRoZSBtYWlsaW5nIGxpc3QgCisjIHdpdGggZ2VuZXJhbCBhZ3JlZW1lbnQgZnJvbSB0aGUgY29yZSB0ZWFtLgorIworT0VMQVlPVVRfQUJJID0gIjExIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvYml0YmFrZS5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvYml0YmFrZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YTY2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9iaXRiYWtlLmNvbmYKQEAgLTAsMCArMSw4MTIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTdGFuZGFyZCB0YXJnZXQgZmlsZXN5c3RlbSBwYXRocy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBJZiBjaGFuZ2luZyB0aGVzZSB2YWx1ZXMsIGJld2FyZSB0aGF0IG5hdGl2ZS9jcm9zcy9uYXRpdmVzZGsgYmJjbGFzcworIyBmaWxlcyBtYXkgYWxzbyBuZWVkIGNoYW5nZXMgdG8ga2VlcCBpbiBzeW5jLgorIworCisjIFVzZWQgYnkgbXVsdGlsaWIgY29kZSB0byBjaGFuZ2UgdGhlIGxpYnJhcnkgcGF0aHMKK2Jhc2VsaWIgPSAiJHtCQVNFTElCfSIKK2Jhc2VsaWJbdmFyZGVwdmFsdWVdID0gIiR7YmFzZWxpYn0iCitCQVNFTElCID0gImxpYiIKK0JBU0VMSUJfcG93ZXJwYzY0ID0gImxpYjY0IgorCisjIFBhdGggcHJlZml4ZXMKK2V4cG9ydCBiYXNlX3ByZWZpeCA9ICIiCitleHBvcnQgcHJlZml4ID0gIi91c3IiCitleHBvcnQgZXhlY19wcmVmaXggPSAiL3VzciIKKworIyBCYXNlIHBhdGhzCitleHBvcnQgYmFzZV9iaW5kaXIgPSAiJHtiYXNlX3ByZWZpeH0vYmluIgorZXhwb3J0IGJhc2Vfc2JpbmRpciA9ICIke2Jhc2VfcHJlZml4fS9zYmluIgorZXhwb3J0IGJhc2VfbGliZGlyID0gIiR7YmFzZV9wcmVmaXh9LyR7YmFzZWxpYn0iCitleHBvcnQgbm9uYXJjaF9iYXNlX2xpYmRpciA9ICIke2Jhc2VfcHJlZml4fS9saWIiCisKKyMgQXJjaGl0ZWN0dXJlIGluZGVwZW5kZW50IHBhdGhzCitleHBvcnQgc3lzY29uZmRpciA9ICIke2Jhc2VfcHJlZml4fS9ldGMiCitleHBvcnQgc2VydmljZWRpciA9ICIke2Jhc2VfcHJlZml4fS9zcnYiCitleHBvcnQgc2hhcmVkc3RhdGVkaXIgPSAiJHtiYXNlX3ByZWZpeH0vY29tIgorZXhwb3J0IGxvY2Fsc3RhdGVkaXIgPSAiJHtiYXNlX3ByZWZpeH0vdmFyIgorZXhwb3J0IGRhdGFkaXIgPSAiJHtwcmVmaXh9L3NoYXJlIgorZXhwb3J0IGluZm9kaXIgPSAiJHtkYXRhZGlyfS9pbmZvIgorZXhwb3J0IG1hbmRpciA9ICIke2RhdGFkaXJ9L21hbiIKK2V4cG9ydCBkb2NkaXIgPSAiJHtkYXRhZGlyfS9kb2MiCitleHBvcnQgc3lzdGVtZF91bml0ZGlyID0gIiR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vc3lzdGVtZCIKK2V4cG9ydCBzeXN0ZW1kX3N5c3RlbV91bml0ZGlyID0gIiR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vc3lzdGVtZC9zeXN0ZW0iCitleHBvcnQgbm9uYXJjaF9saWJkaXIgPSAiJHtleGVjX3ByZWZpeH0vbGliIgorZXhwb3J0IHN5c3RlbWRfdXNlcl91bml0ZGlyID0gIiR7bm9uYXJjaF9saWJkaXJ9L3N5c3RlbWQvdXNlciIKKworIyBBcmNoaXRlY3R1cmUgZGVwZW5kZW50IHBhdGhzCitleHBvcnQgYmluZGlyID0gIiR7ZXhlY19wcmVmaXh9L2JpbiIKK2V4cG9ydCBzYmluZGlyID0gIiR7ZXhlY19wcmVmaXh9L3NiaW4iCitleHBvcnQgbGliZGlyID0gIiR7ZXhlY19wcmVmaXh9LyR7YmFzZWxpYn0iCitleHBvcnQgbGliZXhlY2RpciA9ICIke2xpYmRpcn0vJHtCUE59IgorZXhwb3J0IGluY2x1ZGVkaXIgPSAiJHtleGVjX3ByZWZpeH0vaW5jbHVkZSIKK2V4cG9ydCBvbGRpbmNsdWRlZGlyID0gIiR7ZXhlY19wcmVmaXh9L2luY2x1ZGUiCitsb2NhbGVkaXIgPSAiJHtsaWJkaXJ9L2xvY2FsZSIKKworIyBMaW5rYWdlIGJldHdlZW4gbmF0aXZlL2Nyb3NzL25hdGl2ZXNkayBsYXlvdXRzCitiYXNlX2JpbmRpcl9uYXRpdmUgPSAiL2JpbiIKK2Jhc2Vfc2JpbmRpcl9uYXRpdmUgPSAiL3NiaW4iCitzeXNjb25mZGlyX25hdGl2ZSA9ICIvZXRjIgorcHJlZml4X25hdGl2ZSA9ICIvdXNyIgorYmluZGlyX25hdGl2ZSA9ICIke3ByZWZpeF9uYXRpdmV9L2JpbiIKK3NiaW5kaXJfbmF0aXZlID0gIiR7cHJlZml4X25hdGl2ZX0vc2JpbiIKK2luY2x1ZGVkaXJfbmF0aXZlID0gIiR7cHJlZml4X25hdGl2ZX0vaW5jbHVkZSIKK2xpYmRpcl9uYXRpdmUgPSAiJHtwcmVmaXhfbmF0aXZlfS9saWIiCitsaWJleGVjZGlyX25hdGl2ZSA9ICIke2xpYmRpcl9uYXRpdmV9LyR7QlBOfSIKK2Jhc2VfbGliZGlyX25hdGl2ZSA9ICIvbGliIgorZGF0YWRpcl9uYXRpdmUgPSAiJHtwcmVmaXhfbmF0aXZlfS9zaGFyZSIKK2JpbmRpcl9jcm9zcyA9ICIvYmluIgorYmluZGlyX2Nyb3Nzc2NyaXB0cyA9ICIke2JpbmRpcn0vY3Jvc3NzY3JpcHRzIgorcHJlZml4X25hdGl2ZXNkayA9ICIvdXNyIgorYmluZGlyX25hdGl2ZXNkayA9ICIke3ByZWZpeF9uYXRpdmVzZGt9L2JpbiIKK2luY2x1ZGVkaXJfbmF0aXZlc2RrID0gIiR7cHJlZml4X25hdGl2ZXNka30vaW5jbHVkZSIKK2xpYmRpcl9uYXRpdmVzZGsgPSAiJHtwcmVmaXhfbmF0aXZlc2RrfS9saWIiCitiYXNlX2xpYmRpcl9uYXRpdmVzZGsgPSAiL2xpYiIKK2xvY2Fsc3RhdGVkaXJfbmF0aXZlc2RrID0gIi92YXIiCisKKyMKKyMgQ3Jvc3MgcmVjaXBlcyBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIHRhcmdldCBsYXlvdXQKKyMgOj0gaXMgdXNlZCBjYXJlZnVsbHkgaGVyZQorIwordGFyZ2V0X2RhdGFkaXIgOj0gIiR7ZGF0YWRpcn0iCisjIFVzZWQgdG8gZmluZCBlbnYvcGVybC9weXRob24KK1VTUkJJTlBBVEggPSAiJHtiaW5kaXJ9IgorVVNSQklOUEFUSF9jbGFzcy1uYXRpdmUgPSAiL3Vzci9iaW4iCitVU1JCSU5QQVRIX2NsYXNzLW5hdGl2ZXNkayA9ICIvdXNyL2JpbiIKKworIyBSb290IGhvbWUgZGlyZWN0b3J5CitST09UX0hPTUUgPz89ICIvaG9tZS9yb290IgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBidWlsZCB2YXJpYWJsZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBJbW1lZGlhdGUgZXhwYW5zaW9uIHNpbmNlIHRoZXJlIGlzIG5vIHBvaW50IGluIHJlYXBlYXRlZGx5IGNhbGxpbmcKKyMgb3MudW5hbWUoKSB0aHJvdWdob3V0IHBhcnNpbmcKK0JVSUxEX0FSQ0ggOj0gIiR7QG9zLnVuYW1lKClbNF19IgorQlVJTERfT1MgOj0gIiR7QG9zLnVuYW1lKClbMF0ubG93ZXIoKX0iCitCVUlMRF9WRU5ET1IgPSAiIgorQlVJTERfU1lTID0gIiR7QlVJTERfQVJDSH0ke0JVSUxEX1ZFTkRPUn0tJHtCVUlMRF9PU30iCitCVUlMRF9QUkVGSVggPSAiIgorQlVJTERfQ0NfQVJDSCA9ICIiCitCVUlMRF9MRF9BUkNIID0gIiIKK0JVSUxEX0FTX0FSQ0ggPSAiIgorQlVJTERfRVhFRVhUID0gIiIKKworSE9TVF9BUkNIID0gIiR7VEFSR0VUX0FSQ0h9IgorSE9TVF9PUyA9ICIke1RBUkdFVF9PU30iCitIT1NUX1ZFTkRPUiA9ICIke1RBUkdFVF9WRU5ET1J9IgorSE9TVF9TWVMgPSAiJHtIT1NUX0FSQ0h9JHtIT1NUX1ZFTkRPUn0tJHtIT1NUX09TfSIKK0hPU1RfUFJFRklYID0gIiR7VEFSR0VUX1BSRUZJWH0iCitIT1NUX0NDX0FSQ0ggPSAiJHtUQVJHRVRfQ0NfQVJDSH0iCitIT1NUX0xEX0FSQ0ggPSAiJHtUQVJHRVRfTERfQVJDSH0iCitIT1NUX0FTX0FSQ0ggPSAiJHtUQVJHRVRfQVNfQVJDSH0iCitIT1NUX0VYRUVYVCA9ICIiCisKK1RVTkVfQVJDSCA/Pz0gIklOVkFMSUQiCitUVU5FX0NDQVJHUyA/Pz0gIiIKK1RVTkVfQ0NBUkdTW3ZhcmRlcHZhbHVlXSA9ICIke1RVTkVfQ0NBUkdTfSIKK1RVTkVfTERBUkdTID8/PSAiIgorVFVORV9BU0FSR1MgPz89ICIiCitUVU5FX0ZFQVRVUkVTID8/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtJHtERUZBVUxUVFVORX19IgorTElCQ0VYVEVOU0lPTiA/Pz0gIiIKK0FCSUVYVEVOU0lPTiA/Pz0gIiIKK1VTRV9OTFMgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbG9jYWxlLWNvZGUnLCAneWVzJywgJ25vJywgZCl9IgorU0RLVVNFX05MUyA/Pz0gInllcyIKKworVEFSR0VUX0FSQ0ggPSAiJHtUVU5FX0FSQ0h9IgorVEFSR0VUX09TID0gImxpbnV4JHtMSUJDRVhURU5TSU9OfSR7QUJJRVhURU5TSU9OfSIKK1RBUkdFVF9WRU5ET1IgPSAiLW9lIgorVEFSR0VUX1NZUyA9ICIke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0ke0BbJy0nICsgZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpLCAnJ11bZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpID09ICgnJyBvciAnY3VzdG9tJyldfSIKK1RBUkdFVF9QUkVGSVggPSAiJHtUQVJHRVRfU1lTfS0iCitUQVJHRVRfQ0NfQVJDSCA9ICIke1RVTkVfQ0NBUkdTfSIKK1RBUkdFVF9MRF9BUkNIID0gIiR7VFVORV9MREFSR1N9IgorVEFSR0VUX0FTX0FSQ0ggPSAiJHtUVU5FX0FTQVJHU30iCisKK1NES19BUkNIID0gIiR7QlVJTERfQVJDSH0iCitTREtfT1MgPSAiJHtCVUlMRF9PU30iCitTREtfVkVORE9SID0gIi1vZXNkayIKK1NES19TWVMgPSAiJHtTREtfQVJDSH0ke1NES19WRU5ET1J9JHtAWyctJyArIGQuZ2V0VmFyKCdTREtfT1MnLCBUcnVlKSwgJyddW2QuZ2V0VmFyKCdTREtfT1MnLCBUcnVlKSA9PSAoJycgb3IgJ2N1c3RvbScpXX0iCitTREtfUFJFRklYID0gIiR7U0RLX1NZU30tIgorU0RLX0NDX0FSQ0ggPSAiJHtCVUlMRF9DQ19BUkNIfSIKK1NES1BLR1NVRkZJWCA9ICJuYXRpdmVzZGsiCitTREtfUEFDS0FHRV9BUkNIUyA9ICJhbGwgYW55IG5vYXJjaCAke1NES19BUkNIfS0ke1NES1BLR1NVRkZJWH0iCitTREtfTERfQVJDSCA9ICIke0JVSUxEX0xEX0FSQ0h9IgorU0RLX0FTX0FSQ0ggPSAiJHtCVUlMRF9BU19BUkNIfSIKKworVFVORV9QS0dBUkNIID8/PSAiIgorUEFDS0FHRV9BUkNIID8/PSAiJHtUVU5FX1BLR0FSQ0h9IgorTUFDSElORV9BUkNIID0gIiR7QFtkLmdldFZhcignVFVORV9QS0dBUkNIJywgVHJ1ZSksIGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSldW2Jvb2woZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKSldLnJlcGxhY2UoJy0nLCAnXycpfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFMgPz89ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS0ke0RFRkFVTFRUVU5FfX0iCitQQUNLQUdFX0FSQ0hTID0gImFsbCBhbnkgbm9hcmNoICR7UEFDS0FHRV9FWFRSQV9BUkNIU30gJHtNQUNISU5FX0FSQ0h9IgorIyBNQUNISU5FX0FSQ0ggc2hvdWxkbid0IGJlIGluY2x1ZGVkIGhlcmUgYXMgYSB2YXJpYWJsZSBkZXBlbmRlbmN5CisjIHNpbmNlIG1hY2hpbmUgc3BlY2lmaWMgcGFja2FnZXMgYXJlIGhhbmRsZWQgdXNpbmcgbXVsdGltYWNoaW5lCitQQUNLQUdFX0FSQ0hTW3ZhcmRlcHNleGNsdWRlXSA9ICJNQUNISU5FX0FSQ0giCisKK01VTFRJTUFDSF9UQVJHRVRfU1lTID0gIiR7UEFDS0FHRV9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgorTVVMVElNQUNIX0hPU1RfU1lTID0gIiR7UEFDS0FHRV9BUkNIfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEYXRlL3RpbWUgdmFyaWFibGVzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RBVEUgOj0gIiR7QHRpbWUuc3RyZnRpbWUoJyVZJW0lZCcsdGltZS5nbXRpbWUoKSl9IgorVElNRSA6PSAiJHtAdGltZS5zdHJmdGltZSgnJUglTSVTJyx0aW1lLmdtdGltZSgpKX0iCitEQVRFVElNRSA9ICIke0RBVEV9JHtUSU1FfSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE9wZW5lbWJlZGRlZCBTb2Z0d2FyZSBQcmVyZXF1aXNpdGVzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgcHl0aG9uLW5hdGl2ZSBzaG91bGQgYmUgaGVyZSBidXQgcHl0aG9uIHJlbGllcyBvbiBidWlsZGluZworIyBpdHMgb3duIGluIHN0YWdpbmcKK0FTU1VNRV9QUk9WSURFRCA9ICJcCisgICAgYnppcDItbmF0aXZlIFwKKyAgICBjaHJwYXRoLW5hdGl2ZSBcCisgICAgZ2l0LW5hdGl2ZSBcCisgICAgZ3JlcC1uYXRpdmUgXAorICAgIGRpZmZzdGF0LW5hdGl2ZSBcCisgICAgcGF0Y2gtbmF0aXZlIFwKKyAgICBwZXJsLW5hdGl2ZS1ydW50aW1lIFwKKyAgICBweXRob24tbmF0aXZlLXJ1bnRpbWUgXAorICAgIHRhci1uYXRpdmUgXAorICAgIHZpcnR1YWwvbGliaW50bC1uYXRpdmUgXAorICAgIHRleGluZm8tbmF0aXZlIFwKKyAgICBiYXNoLW5hdGl2ZSBcCisgICAgc2VkLW5hdGl2ZSBcCisgICAgIgorIyBnemlwLW5hdGl2ZSBzaG91bGQgYmUgbGlzdGVkIGFib3ZlPworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGFja2FnZSBkZWZhdWx0IHZhcmlhYmxlcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQTiA9ICIke0BiYi5wYXJzZS5CQkhhbmRsZXIudmFyc19mcm9tX2ZpbGUoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksZClbMF0gb3IgJ2RlZmF1bHRwa2duYW1lJ30iCitQViA9ICIke0BiYi5wYXJzZS5CQkhhbmRsZXIudmFyc19mcm9tX2ZpbGUoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksZClbMV0gb3IgJzEuMCd9IgorUFIgPSAiJHtAYmIucGFyc2UuQkJIYW5kbGVyLnZhcnNfZnJvbV9maWxlKGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpLGQpWzJdIG9yICdyMCd9IgorUEYgPSAiJHtQTn0tJHtFWFRFTkRQRX0ke1BWfS0ke1BSfSIKK0VYVEVORFBFID0gIiR7QFsnJywnJHtQRVx4N2RfJ11baW50KGQuZ2V0VmFyKCdQRScsIFRydWUpIG9yIDApID4gMF19IgorUCA9ICIke1BOfS0ke1BWfSIKKworRVhURU5EUFJBVVRPID0gIiR7QFsnLiR7UFJBVVRPXHg3ZCcsJyddW2QuZ2V0VmFyKCdQUkFVVE8nLCBUcnVlKSBpcyBOb25lXX0iCitQUkFVVE9JTlggPSAiJHtQRn0iCisKK1BLR1YgPz0gIiR7UFZ9IgorUEtHUiA/PSAiJHtQUn0ke0VYVEVORFBSQVVUT30iCitQS0dFID89ICIke0BbJycsJyR7UEVceDdkJ11baW50KGQuZ2V0VmFyKCdQRScsIFRydWUpIG9yIDApID4gMF19IgorRVhURU5EUEtHRVZFUiA9ICIke0BbJycsJyR7UEtHRVx4N2Q6J11bZC5nZXRWYXIoJ1BLR0UnLCBUcnVlKS5zdHJpcCgpICE9ICcnXX0iCitFWFRFTkRQS0dWID89ICIke0VYVEVORFBLR0VWRVJ9JHtQS0dWfS0ke1BLR1J9IgorCisjIEJhc2UgcGFja2FnZSBuYW1lCisjIEF1dG9tYXRpY2FsbHkgZGVyaXZlcyAiZm9vIiBmcm9tICJmb28tbmF0aXZlIiwgImZvby1jcm9zcyIgb3IgImZvby1pbml0aWFsIgorIyBvdGhlcndpc2UgaXQgaXMgdGhlIHNhbWUgYXMgUE4gYW5kIFAKK1NQRUNJQUxfUEtHU1VGRklYID0gIi1uYXRpdmUgLWNyb3NzIC1pbml0aWFsIC1pbnRlcm1lZGlhdGUgLWNyb3Nzc2RrIC1jcm9zcy1jYW5hZGlhbiIKK0JQTiA9ICIke0BiYXNlX3BydW5lX3N1ZmZpeChkLmdldFZhcignUE4nLCBUcnVlKSwgZC5nZXRWYXIoJ1NQRUNJQUxfUEtHU1VGRklYJywgVHJ1ZSkuc3BsaXQoKSwgZCl9IgorQlAgPSAiJHtCUE59LSR7UFZ9IgorCisjIFBhY2thZ2UgaW5mby4KKworU0VDVElPTiA9ICJiYXNlIgorUFJJT1JJVFkgPSAib3B0aW9uYWwiCitTVU1NQVJZID89ICIke1BOfSB2ZXJzaW9uICR7UFZ9LSR7UFJ9IgorREVTQ1JJUFRJT04gPz0gIiR7U1VNTUFSWX0uIgorCisjIFRoZSBmb2xsb3dpbmcgdHdvIGFyZSBjb21tZW50ZWQgb3V0IGJlY2F1c2UgdGhleSByZXN1bHQgaW4gYSByZWN1cnNpdmUKKyMgZGVmaW5pdGlvbiBvZiB0aGUgdmFyaWFibGUgaW4gc29tZSBjb3JuZXIgY2FzZXMuICBUaGVzZSBhcmUgbGVmdCBpbgorIyB0byBpbGx1c3RyYXRlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4KKyNTVU1NQVJZXyR7UE59ID89ICIke1NVTU1BUll9IgorI0RFU0NSSVBUSU9OXyR7UE59ID89ICIke0RFU0NSSVBUSU9OfSIKKworU1VNTUFSWV8ke1BOfS1kYmcgPz0gIiR7U1VNTUFSWX0gLSBEZWJ1Z2dpbmcgZmlsZXMiCitERVNDUklQVElPTl8ke1BOfS1kYmcgPz0gIiR7REVTQ1JJUFRJT059ICBcCitUaGlzIHBhY2thZ2UgY29udGFpbnMgRUxGIHN5bWJvbHMgYW5kIHJlbGF0ZWQgc291cmNlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiIKKworU1VNTUFSWV8ke1BOfS1kZXYgPz0gIiR7U1VNTUFSWX0gLSBEZXZlbG9wbWVudCBmaWxlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWRldiA/PSAiJHtERVNDUklQVElPTn0gIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyBzeW1ib2xpYyBsaW5rcywgaGVhZGVyIGZpbGVzLCBhbmQgXAorcmVsYXRlZCBpdGVtcyBuZWNlc3NhcnkgZm9yIHNvZnR3YXJlIGRldmVsb3BtZW50LiIKKworU1VNTUFSWV8ke1BOfS1zdGF0aWNkZXYgPz0gIiR7U1VNTUFSWX0gLSBEZXZlbG9wbWVudCBmaWxlcyAoU3RhdGljIExpYnJhcmllcykiCitERVNDUklQVElPTl8ke1BOfS1zdGF0aWNkZXY/PSAiJHtERVNDUklQVElPTn0gIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyBzdGF0aWMgbGlicmFyaWVzIGZvciBzb2Z0d2FyZSBkZXZlbG9wbWVudC4iCisKK1NVTU1BUllfJHtQTn0tZG9jID89ICIke1NVTU1BUll9IC0gRG9jdW1lbnRhdGlvbiBmaWxlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWRvYyA/PSAiJHtERVNDUklQVElPTn0gIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyBkb2N1bWVudGF0aW9uLiIKKworTElDRU5TRSA9ICJJTlZBTElEIgorTUFJTlRBSU5FUiA9ICJPRS1Db3JlIERldmVsb3BlcnMgPG9wZW5lbWJlZGRlZC1jb3JlQGxpc3RzLm9wZW5lbWJlZGRlZC5vcmc+IgorSE9NRVBBR0UgPSAiIgorCisjIFBhY2thZ2UgZGVwZW5kZW5jaWVzIGFuZCBwcm92aWRlcy4KKworIyBFbnN1cmUgdGhhdCAtZGV2IHBhY2thZ2VzIHJlY29tbWVuZCB0aGUgY29ycmVzcG9uZGluZyAtZGV2IHBhY2thZ2VzIG9mIHRoZWlyCisjIGRlcHMsIGFuZCB0aGUgc2FtZSBmb3IgLWRiZy4KK0RFUENIQUlOX1BSRSAgPSAiIgorREVQQ0hBSU5fUE9TVCA9ICItZGV2IC1kYmciCisKK0RFUEVORFMgPSAiIgorUkRFUEVORFMgPSAiIgorUFJPVklERVMgPSAiIgorUFJPVklERVNfcHJlcGVuZCA9ICIke1BOfSAiCitSUFJPVklERVMgPSAiIgorCitNVUxUSV9QUk9WSURFUl9XSElURUxJU1QgPSAidmlydHVhbC9saWJpbnRsIHZpcnR1YWwvbGliaW50bC1uYXRpdmUgdmlydHVhbC9uYXRpdmVzZGstbGliaW50bCB2aXJ0dWFsL3hzZXJ2ZXIgdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzLW5hdGl2ZSB2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMiCisKK1NPTElCUyA9ICIuc28uKiIKK1NPTElCU19kYXJ3aW4gPSAiLmR5bGliIgorCitTT0xJQlNERVYgPSAiLnNvIgorIyBEdWUgdG8gdGhlIG9yZGVyaW5nIG9mIFBBQ0tBR0VTIGFuZCB0aGUgbmFtaW5nIG9mIHRoZSBkZXYgc3ltbGlua3Mgb24gZGFyd2luLAorIyB3ZSBjYW4ndCBtYWtlIHRoZSBzeW1saW5rcyBlbmQgdXAgaW4gdGhlIC1kZXYgcGFja2FnZXMgZWFzaWx5IGF0IHRoaXMgcG9pbnQuIFRoaXMgaGFjaworIyBhdCBsZWFzdCBtZWFucyBidWlsZHMgYXJlbid0IGNvbXBsZXRlbHkgYnJva2VuIGFuZCBzeW1saW5rcyBkb24ndCB0YWtlIHVwIG11Y2ggc3BhY2UuCitTT0xJQlNERVZfZGFyd2luID0gIi5keWxpYmJyb2tlbiIKKworUEFDS0FHRV9CRUZPUkVfUE4gPz0gIiIKK1BBQ0tBR0VTID0gIiR7UE59LWRiZyAke1BOfS1zdGF0aWNkZXYgJHtQTn0tZGV2ICR7UE59LWRvYyAke1BOfS1sb2NhbGUgJHtQQUNLQUdFX0JFRk9SRV9QTn0gJHtQTn0iCitQQUNLQUdFU19EWU5BTUlDID0gIl4ke1BOfS1sb2NhbGUtLioiCitGSUxFUyA9ICIiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qICR7c2JpbmRpcn0vKiAke2xpYmV4ZWNkaXJ9LyogJHtsaWJkaXJ9L2xpYioke1NPTElCU30gXAorICAgICAgICAgICAgJHtzeXNjb25mZGlyfSAke3NoYXJlZHN0YXRlZGlyfSAke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9LyogJHtiYXNlX3NiaW5kaXJ9LyogXAorICAgICAgICAgICAgJHtiYXNlX2xpYmRpcn0vKiR7U09MSUJTfSBcCisgICAgICAgICAgICAke2Jhc2VfcHJlZml4fS9saWIvdWRldi9ydWxlcy5kICR7cHJlZml4fS9saWIvdWRldi9ydWxlcy5kIFwKKyAgICAgICAgICAgICR7ZGF0YWRpcn0vJHtCUE59ICR7bGliZGlyfS8ke0JQTn0vKiBcCisgICAgICAgICAgICAke2RhdGFkaXJ9L3BpeG1hcHMgJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMgXAorICAgICAgICAgICAgJHtkYXRhZGlyfS9pZGwgJHtkYXRhZGlyfS9vbWYgJHtkYXRhZGlyfS9zb3VuZHMgXAorICAgICAgICAgICAgJHtsaWJkaXJ9L2Jvbm9iby9zZXJ2ZXJzIgorCitGSUxFU18ke1BOfS1iaW4gPSAiJHtiaW5kaXJ9LyogJHtzYmluZGlyfS8qIgorCitGSUxFU18ke1BOfS1kb2MgPSAiJHtkb2NkaXJ9ICR7bWFuZGlyfSAke2luZm9kaXJ9ICR7ZGF0YWRpcn0vZ3RrLWRvYyBcCisgICAgICAgICAgICAke2RhdGFkaXJ9L2dub21lL2hlbHAiCitTRUNUSU9OXyR7UE59LWRvYyA9ICJkb2MiCisKK0ZJTEVTX1NPTElCU0RFViA/PSAiJHtiYXNlX2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSAke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2luY2x1ZGVkaXJ9ICR7RklMRVNfU09MSUJTREVWfSAke2xpYmRpcn0vKi5sYSBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9LyoubyAke2xpYmRpcn0vcGtnY29uZmlnICR7ZGF0YWRpcn0vcGtnY29uZmlnIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2FjbG9jYWwgJHtiYXNlX2xpYmRpcn0vKi5vIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vJHtCUE59LyoubGEgJHtiYXNlX2xpYmRpcn0vKi5sYSIKK1NFQ1RJT05fJHtQTn0tZGV2ID0gImRldmVsIgorQUxMT1dfRU1QVFlfJHtQTn0tZGV2ID0gIjEiCitSREVQRU5EU18ke1BOfS1kZXYgPSAiJHtQTn0gKD0gJHtFWFRFTkRQS0dWfSkiCisKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiA9ICIke2xpYmRpcn0vKi5hICR7YmFzZV9saWJkaXJ9LyouYSAke2xpYmRpcn0vJHtCUE59LyouYSIKK1NFQ1RJT05fJHtQTn0tc3RhdGljZGV2ID0gImRldmVsIgorUkRFUEVORFNfJHtQTn0tc3RhdGljZGV2ID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKKworRE9UREVCVUctZGJnID0gIiR7YmluZGlyfS8uZGVidWcgJHtzYmluZGlyfS8uZGVidWcgJHtsaWJleGVjZGlyfS8uZGVidWcgJHtsaWJkaXJ9Ly5kZWJ1ZyBcCisgICAgICAgICAgICAke2Jhc2VfYmluZGlyfS8uZGVidWcgJHtiYXNlX3NiaW5kaXJ9Ly5kZWJ1ZyAke2Jhc2VfbGliZGlyfS8uZGVidWcgJHtsaWJkaXJ9LyR7QlBOfS8uZGVidWcgXAorICAgICAgICAgICAgJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLy5kZWJ1ZyAke2xpYmV4ZWNkaXJ9LyR7QlBOfS8uZGVidWcgL3Vzci9zcmMvZGVidWciCisKK0RFQlVHRklMRURJUkVDVE9SWS1kYmcgPSAiL3Vzci9saWIvZGVidWcgL3Vzci9zcmMvZGVidWciCisKK0ZJTEVTXyR7UE59LWRiZyA9ICIke0BkLmdldFZhcihbJ0RPVERFQlVHLWRiZycsICdERUJVR0ZJTEVESVJFQ1RPUlktZGJnJ11bZC5nZXRWYXIoJ1BBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUnLCBUcnVlKSA9PSAnZGVidWctZmlsZS1kaXJlY3RvcnknXSwgVHJ1ZSl9IgorCitTRUNUSU9OXyR7UE59LWRiZyA9ICJkZXZlbCIKK0FMTE9XX0VNUFRZXyR7UE59LWRiZyA9ICIxIgorCitGSUxFU18ke1BOfS1sb2NhbGUgPSAiJHtkYXRhZGlyfS9sb2NhbGUiCisKKyMgRmlsZSBtYW5pZmVzdAorCitGSUxFX0RJUk5BTUUgPSAiJHtAb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpKX0iCisjIEZJTEVTUEFUSCBpcyBzZXQgaW4gYmFzZS5iYmNsYXNzCisjRklMRVNQQVRIID0gIiR7RklMRV9ESVJOQU1FfS8ke1BGfToke0ZJTEVfRElSTkFNRX0vJHtQfToke0ZJTEVfRElSTkFNRX0vJHtQTn06JHtGSUxFX0RJUk5BTUV9LyR7QlB9OiR7RklMRV9ESVJOQU1FfS8ke0JQTn06JHtGSUxFX0RJUk5BTUV9L2ZpbGVzOiR7RklMRV9ESVJOQU1FfSIKKyMgVGhpcyBkZWZhdWx0IHdhcyBvbmx5IHVzZWQgZm9yIGNoZWNraW5nCitGSUxFU0VYVFJBUEFUSFMgPz0gIl9fZGVmYXVsdDoiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBHZW5lcmFsIHdvcmsgYW5kIG91dHB1dCBkaXJlY3RvcmllcyBmb3IgdGhlIGJ1aWxkIHN5c3RlbS4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitUTVBESVIgPz0gIiR7VE9QRElSfS90bXAiCitDQUNIRSA9ICIke1RNUERJUn0vY2FjaGUke0BbJycsICcvJyArIHN0cihkLmdldFZhcignTUFDSElORScsIFRydWUpKV1bYm9vbChkLmdldFZhcignTUFDSElORScsIFRydWUpKV19JHtAWycnLCAnLycgKyBzdHIoZC5nZXRWYXIoJ1NES01BQ0hJTkUnLCBUcnVlKSldW2Jvb2woZC5nZXRWYXIoJ1NES01BQ0hJTkUnLCBUcnVlKSldfSIKKyMgVGhlIHBlcnNpc3RlbnQgY2FjaGUgc2hvdWxkIGJlIHNoYXJlZCBieSBhbGwgYnVpbGRzCitQRVJTSVNURU5UX0RJUiA9ICIke1RPUERJUn0vY2FjaGUiCitMT0dfRElSID0gIiR7VE1QRElSfS9sb2ciCitDT19ESVIgPSAiJHtETF9ESVJ9IgorQ1ZTRElSID0gIiR7Q09fRElSfS9jdnMiCitTVk5ESVIgPSAiJHtDT19ESVJ9L3N2biIKK0dJVERJUiA9ICIke0NPX0RJUn0vZ2l0MiIKK0JaUkRJUiA9ICIke0NPX0RJUn0vYnpyIgorSEdESVIgPSAiJHtDT19ESVJ9L2hnIgorCitTVEFNUFNfRElSID89ICIke1RNUERJUn0vc3RhbXBzIgorU1RBTVAgPSAiJHtTVEFNUFNfRElSfS8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfS8ke1BOfS8ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9IgorU1RBTVBDTEVBTiA9ICIke1NUQU1QU19ESVJ9LyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9LyR7UE59LyotKiIKK0JBU0VfV09SS0RJUiA/PSAiJHtUTVBESVJ9L3dvcmsiCitXT1JLRElSID0gIiR7QkFTRV9XT1JLRElSfS8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfS8ke1BOfS8ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9IgorVCA9ICIke1dPUktESVJ9L3RlbXAiCitEID0gIiR7V09SS0RJUn0vaW1hZ2UiCitTID0gIiR7V09SS0RJUn0vJHtCUH0iCitCID0gIiR7U30iCisKK1NUQUdJTkdfRElSID0gIiR7VE1QRElSfS9zeXNyb290cyIKKworU1RBR0lOR19ESVJfTkFUSVZFID0gIiR7U1RBR0lOR19ESVJ9LyR7QlVJTERfU1lTfSIKK1NUQUdJTkdfQklORElSX05BVElWRSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9IgorU1RBR0lOR19CSU5ESVJfQ1JPU1MgPSAiJHtTVEFHSU5HX0JJTkRJUn0vY3Jvc3NzY3JpcHRzIgorU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0vJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKK1NUQUdJTkdfTElCRElSX05BVElWRSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2xpYmRpcl9uYXRpdmV9IgorU1RBR0lOR19MSUJFWEVDRElSX05BVElWRSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2xpYmV4ZWNkaXJfbmF0aXZlfSIKK1NUQUdJTkdfQkFTRV9MSUJESVJfTkFUSVZFID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmFzZV9saWJkaXJfbmF0aXZlfSIKK1NUQUdJTkdfU0JJTkRJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzYmluZGlyX25hdGl2ZX0iCitTVEFHSU5HX0lOQ0RJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtpbmNsdWRlZGlyX25hdGl2ZX0iCitTVEFHSU5HX0VUQ0RJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzeXNjb25mZGlyX25hdGl2ZX0iCitTVEFHSU5HX0RBVEFESVJfTkFUSVZFID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7ZGF0YWRpcl9uYXRpdmV9IgorCitTVEFHSU5HX0RJUl9IT1NUID0gIiR7U1RBR0lOR19ESVJ9LyR7TUFDSElORX0iCitTVEFHSU5HX0JJTkRJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtiaW5kaXJ9IgorU1RBR0lOR19MSUJESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSR7bGliZGlyfSIKK1NUQUdJTkdfTElCRVhFQ0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtsaWJleGVjZGlyfSIKK1NUQUdJTkdfQkFTRUxJQkRJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtiYXNlX2xpYmRpcn0iCitTVEFHSU5HX0lOQ0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtpbmNsdWRlZGlyfSIKK1NUQUdJTkdfREFUQURJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtkYXRhZGlyfSIKK1NUQUdJTkdfRVhFQ1BSRUZJWERJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtleGVjX3ByZWZpeH0iCitTVEFHSU5HX0xPQURFUl9ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfS9sb2FkZXIiCitTVEFHSU5HX0ZJUk1XQVJFX0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9L2Zpcm13YXJlIgorCitTVEFHSU5HX0RJUl9UQVJHRVQgPSAiJHtTVEFHSU5HX0RJUn0vJHtNQUNISU5FfSIKK1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQID0gIiR7U1RBR0lOR19ESVJfVEFSR0VUfS10Y2Jvb3RzdHJhcCIKKworIyBTZXR0aW5nIERFUExPWV9ESVIgb3V0c2lkZSBvZiBUTVBESVIgaXMgaGVscGZ1bCwgd2hlbiB5b3UgYXJlIHVzaW5nCisjIHBhY2thZ2VkIHN0YWdpbmcgYW5kL29yIG11bHRpbWFjaGluZS4KK0RFUExPWV9ESVIgPz0gIiR7VE1QRElSfS9kZXBsb3kiCitERVBMT1lfRElSX1RBUiA9ICIke0RFUExPWV9ESVJ9L3RhciIKK0RFUExPWV9ESVJfSVBLID0gIiR7REVQTE9ZX0RJUn0vaXBrIgorREVQTE9ZX0RJUl9SUE0gPSAiJHtERVBMT1lfRElSfS9ycG0iCitERVBMT1lfRElSX0RFQiA9ICIke0RFUExPWV9ESVJ9L2RlYiIKK0RFUExPWV9ESVJfSU1BR0UgPz0gIiR7REVQTE9ZX0RJUn0vaW1hZ2VzLyR7TUFDSElORX0iCitERVBMT1lfRElSX1RPT0xTID0gIiR7REVQTE9ZX0RJUn0vdG9vbHMiCisKK1BLR0RBVEFfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0vcGtnZGF0YSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNESyB2YXJpYWJsZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworU0RLX05BTUVfUFJFRklYID89ICJvZWNvcmUiCitTREtfTkFNRSA9ICIke1NES19OQU1FX1BSRUZJWH0tJHtTREtfQVJDSH0tJHtUVU5FX1BLR0FSQ0h9IgorU0RLUEFUSCA9ICIvdXNyL2xvY2FsLyR7U0RLX05BTUVfUFJFRklYfS0ke1NES19BUkNIfSIKK1NES1BBVEhOQVRJVkUgPSAiJHtTREtQQVRIfS9zeXNyb290cy8ke1NES19TWVN9IgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgS2VybmVsIGluZm8uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworT0xERVNUX0tFUk5FTCA9ICIyLjYuMzIiCitPTERFU1RfS0VSTkVMX2FhcmNoNjQgPSAiMy4xNCIKK1NUQUdJTkdfS0VSTkVMX0RJUiA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvJHtNQUNISU5FfS9rZXJuZWwtc291cmNlIgorU1RBR0lOR19LRVJORUxfQlVJTERESVIgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkLyR7TUFDSElORX0va2VybmVsLWJ1aWxkLWFydGlmYWN0cyIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNwZWNpZmljIGltYWdlIGNyZWF0aW9uIGFuZCByb290ZnMgcG9wdWxhdGlvbiBpbmZvLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0lNQUdFX1JPT1RGUyA9ICIke1dPUktESVJ9L3Jvb3RmcyIKK0lNQUdFX0JBU0VOQU1FID0gIiR7UE59IgorSU1BR0VfTkFNRSA9ICIke0lNQUdFX0JBU0VOQU1FfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgorSU1BR0VfTkFNRVt2YXJkZXBzZXhjbHVkZV0gKz0gIkRBVEVUSU1FIgorSU1BR0VfTElOS19OQU1FID0gIiR7SU1BR0VfQkFTRU5BTUV9LSR7TUFDSElORX0iCisKKyMgVGhpcyBvcHRpb24gYWxsb3dzIGZvciBhIHBlcmNlbnRhZ2Ugb3ZlcmFnZSBvZiB0aGUgYWN0dWFsIGltYWdlIHNpemUgcmF0aGVyIHRoYW4gYQorIyBmaXhlZCBleHRyYSBzcGFjZSwgdGhpcyBpcyBzcGFjZSBuZWVkZWQgZm9yIGluaXRpYWwgc3RhcnR1cCBhbmQgYmFzaWMgb3BlcmF0aW9ucy4KK0lNQUdFX09WRVJIRUFEX0ZBQ1RPUiA/PSAiMS4zIgorIyBUaGlzIG9wdGlvbiBhbGxvd3MgZm9yIGFkZGluZyBhZGRpdGlvbmFsIHNwYWNlIGluIEsgYWJvdmUgYW5kIGJleW9uZCB3aGF0IHRoZQorIyBJTUFHRV9PVkVSSEVBRF9GQUNUT1IgbWlnaHQgYWRkLiBUaGlzIHNwYWNlIGlzIGZvciBhZGRpdGlvbmFsIHBhY2thZ2VzLCB1c2VyIGRhdGEsIC4uLgorIyBUbyBzZXQgYSBmaXhlZCBzaXplIHRoZW4gb3ZlcnJpZGluZyBJTUFHRV9ST09URlNfU0laRSB3aXRoIHRoZSBtYXggc2l6ZSBvbmUgd2FudHMKKyMgc2hvdWxkIGRvIHRoZSB0cmljaworSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFID89ICIwIgorCitFWFRSQV9JTUFHRURFUEVORFMgPSAiIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVG9vbGNoYWluIGluZm8uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUEFUSF9wcmVwZW5kID0gIiR7Q09SRUJBU0V9L3NjcmlwdHM6JHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59OiR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9OiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7c2JpbmRpcl9uYXRpdmV9OiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfToke1NUQUdJTkdfRElSX05BVElWRX0ke2Jhc2Vfc2JpbmRpcl9uYXRpdmV9OiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmFzZV9iaW5kaXJfbmF0aXZlfToiCitleHBvcnQgUEFUSAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnVpbGQgdXRpbGl0eSBpbmZvLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0NDQUNIRSA/Pz0gIiIKKyMgRGlzYWJsZSBjY2FjaGUgZXhwbGljaXRseSBpZiBDQ0FDSEUgaXMgbnVsbCBzaW5jZSBnY2MgbWF5IGJlIGEgc3ltbGluaworIyBvZiBjY2FjaGUgc29tZSBkaXN0cmlidXRpb25zIChlLmcuLCBGZWRvcmEgMTcpLgorZXhwb3J0IENDQUNIRV9ESVNBQkxFID8/PSAiJHtAWzAsMV1bZC5nZXRWYXIoJ0NDQUNIRScsIFRydWUpID09ICcnXX0iCisjIEFzc2lnbiBDQ0FDSEVfRElSIGEgZGVmYXVsdCB2YWx1ZSB0byBmaXggYSBidWcgb2YgY2NhY2hlIDMuMS43LAorIyBzaW5jZSBpdCB3b3VsZCBhbHdheXMgY3JlYXRlIENDQUNIRV9ESVIvLmNjYWNoZSBldmVuIGlmCisjIENDQUNIRV9ESVNBQkxFID0gMS4KK2V4cG9ydCBDQ0FDSEVfRElSID8/PSAiJHtAb3MuZ2V0ZW52KCdIT01FJyl9IgorCitUT09MQ0hBSU5fT1BUSU9OUyA9ICIgLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSIKKworZXhwb3J0IENDID0gIiR7Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9Z2NjICR7SE9TVF9DQ19BUkNIfSR7VE9PTENIQUlOX09QVElPTlN9IgorZXhwb3J0IENYWCA9ICIke0NDQUNIRX0ke0hPU1RfUFJFRklYfWcrKyAke0hPU1RfQ0NfQVJDSH0ke1RPT0xDSEFJTl9PUFRJT05TfSIKK2V4cG9ydCBGQyA9ICIke0NDQUNIRX0ke0hPU1RfUFJFRklYfWdmb3J0cmFuICR7SE9TVF9DQ19BUkNIfSR7VE9PTENIQUlOX09QVElPTlN9IgorZXhwb3J0IENQUCA9ICIke0hPU1RfUFJFRklYfWdjYyAtRSR7VE9PTENIQUlOX09QVElPTlN9ICR7SE9TVF9DQ19BUkNIfSIKK2V4cG9ydCBMRCA9ICIke0hPU1RfUFJFRklYfWxkJHtUT09MQ0hBSU5fT1BUSU9OU30gJHtIT1NUX0xEX0FSQ0h9IgorZXhwb3J0IENDTEQgPSAiJHtDQ30iCitleHBvcnQgQVIgPSAiJHtIT1NUX1BSRUZJWH1hciIKK2V4cG9ydCBBUyA9ICIke0hPU1RfUFJFRklYfWFzICR7SE9TVF9BU19BUkNIfSIKK2V4cG9ydCBSQU5MSUIgPSAiJHtIT1NUX1BSRUZJWH1yYW5saWIiCitleHBvcnQgU1RSSVAgPSAiJHtIT1NUX1BSRUZJWH1zdHJpcCIKK2V4cG9ydCBPQkpDT1BZID0gIiR7SE9TVF9QUkVGSVh9b2JqY29weSIKK2V4cG9ydCBPQkpEVU1QID0gIiR7SE9TVF9QUkVGSVh9b2JqZHVtcCIKK2V4cG9ydCBTVFJJTkdTID0gIiR7SE9TVF9QUkVGSVh9c3RyaW5ncyIKK2V4cG9ydCBOTSA9ICIke0hPU1RfUFJFRklYfW5tIgorUFlUSE9OID0gIiR7QHN5cy5leGVjdXRhYmxlfSIKKworZXhwb3J0IEJVSUxEX0NDID0gIiR7Q0NBQ0hFfSR7QlVJTERfUFJFRklYfWdjYyAke0JVSUxEX0NDX0FSQ0h9IgorZXhwb3J0IEJVSUxEX0NYWCA9ICIke0NDQUNIRX0ke0JVSUxEX1BSRUZJWH1nKysgJHtCVUlMRF9DQ19BUkNIfSIKK2V4cG9ydCBCVUlMRF9GQyA9ICIke0NDQUNIRX0ke0JVSUxEX1BSRUZJWH1nZm9ydHJhbiAke0JVSUxEX0NDX0FSQ0h9IgorZXhwb3J0IEJVSUxEX0NQUCA9ICIke0JVSUxEX1BSRUZJWH1nY2MgJHtCVUlMRF9DQ19BUkNIfSAtRSIKK2V4cG9ydCBCVUlMRF9MRCA9ICIke0JVSUxEX1BSRUZJWH1sZCAke0JVSUxEX0xEX0FSQ0h9IgorZXhwb3J0IEJVSUxEX0NDTEQgPSAiJHtCVUlMRF9QUkVGSVh9Z2NjICR7QlVJTERfQ0NfQVJDSH0iCitleHBvcnQgQlVJTERfQVIgPSAiJHtCVUlMRF9QUkVGSVh9YXIiCitleHBvcnQgQlVJTERfQVMgPSAiJHtCVUlMRF9QUkVGSVh9YXMgJHtCVUlMRF9BU19BUkNIfSIKK2V4cG9ydCBCVUlMRF9SQU5MSUIgPSAiJHtCVUlMRF9QUkVGSVh9cmFubGliIgorZXhwb3J0IEJVSUxEX1NUUklQID0gIiR7QlVJTERfUFJFRklYfXN0cmlwIgorZXhwb3J0IEJVSUxEX05NID0gIiR7QlVJTERfUFJFRklYfW5tIgorCitleHBvcnQgTUFLRSA9ICJtYWtlIgorRVhUUkFfT0VNQUtFID0gIi1lIE1BS0VGTEFHUz0iCitFWFRSQV9PRUNPTkYgPSAiIgorZXhwb3J0IExDX0FMTCA9ICJDIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGF0Y2ggaGFuZGxpbmcuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1BBVENIVE9PTCA9ICJxdWlsdCIKK1BBVENIUkVTT0xWRSA9ICJub29wIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnVpbGQgZmxhZ3MgYW5kIG9wdGlvbnMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZXhwb3J0IEJVSUxEX0NQUEZMQUdTID0gIi1pc3lzdGVtJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IgorQlVJTERTREtfQ1BQRkxBR1MgPSAiLWlzeXN0ZW0ke1NUQUdJTkdfSU5DRElSfSIKK2V4cG9ydCBDUFBGTEFHUyA9ICIke1RBUkdFVF9DUFBGTEFHU30iCitleHBvcnQgVEFSR0VUX0NQUEZMQUdTID0gIiIKKyNleHBvcnQgVEFSR0VUX0NQUEZMQUdTID0gIi1pc3lzdGVtJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtpbmNsdWRlZGlyfSIKKworZXhwb3J0IEJVSUxEX0NGTEFHUyA9ICIke0JVSUxEX0NQUEZMQUdTfSAke0JVSUxEX09QVElNSVpBVElPTn0iCitCVUlMRFNES19DRkxBR1MgPSAiJHtCVUlMRFNES19DUFBGTEFHU30gJHtCVUlMRF9PUFRJTUlaQVRJT059IgorZXhwb3J0IENGTEFHUyA9ICIke1RBUkdFVF9DRkxBR1N9IgorZXhwb3J0IFRBUkdFVF9DRkxBR1MgPSAiJHtUQVJHRVRfQ1BQRkxBR1N9ICR7U0VMRUNURURfT1BUSU1JWkFUSU9OfSIKKworZXhwb3J0IEJVSUxEX0NYWEZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSIKK2V4cG9ydCBDWFhGTEFHUyA9ICIke1RBUkdFVF9DWFhGTEFHU30iCitleHBvcnQgVEFSR0VUX0NYWEZMQUdTID0gIiR7VEFSR0VUX0NGTEFHU30iCisKK2V4cG9ydCBCVUlMRF9MREZMQUdTID0gIi1MJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1MJHtTVEFHSU5HX0JBU0VfTElCRElSX05BVElWRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0JBU0VfTElCRElSX05BVElWRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aCwke1NUQUdJTkdfTElCRElSX05BVElWRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aCwke1NUQUdJTkdfQkFTRV9MSUJESVJfTkFUSVZFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtV2wsLU8xIgorCitCVUlMRFNES19MREZMQUdTID0gIi1MJHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLCR7bGliZGlyfSAtV2wsLU8xIFwKKyAgICAgICAgICAgICAgICAgICAgLUwke1NUQUdJTkdfRElSX0hPU1R9JHtiYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0RJUl9IT1NUfSR7YmFzZV9saWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aCwke2Jhc2VfbGliZGlyfSAtV2wsLU8xIgorCitMSU5LRVJfSEFTSF9TVFlMRSA/Pz0gImdudSIKKyMgbWlwcyBkb2VzIG5vdCBzdXBwb3J0IEdOVSBoYXNoIHN0eWxlIHRoZXJlZm9yZSB3ZSBvdmVycmlkZQorTElOS0VSX0hBU0hfU1RZTEVfbWlwcyA9ICJzeXN2IgorTElOS0VSX0hBU0hfU1RZTEVfbWlwc2VsID0gInN5c3YiCitMSU5LRVJfSEFTSF9TVFlMRV9taXBzNjQgPSAic3lzdiIKK0xJTktFUl9IQVNIX1NUWUxFX21pcHM2NGVsID0gInN5c3YiCitMSU5LRVJfSEFTSF9TVFlMRV9taXBzNjRuMzIgPSAic3lzdiIKK0xJTktFUl9IQVNIX1NUWUxFX21pcHM2NGVsbjMyID0gInN5c3YiCitUQVJHRVRfTElOS19IQVNIX1NUWUxFID89ICIke0BbJy1XbCwtLWhhc2gtc3R5bGU9Z251JywnJ11bZC5nZXRWYXIoJ0xJTktFUl9IQVNIX1NUWUxFJywgVHJ1ZSkgIT0gJ2dudSddfSIKKworZXhwb3J0IExERkxBR1MgPSAiJHtUQVJHRVRfTERGTEFHU30iCitleHBvcnQgVEFSR0VUX0xERkxBR1MgPSAiLVdsLC1PMSAke1RBUkdFVF9MSU5LX0hBU0hfU1RZTEV9IgorI2V4cG9ydCBUQVJHRVRfTERGTEFHUyA9ICItTCR7U1RBR0lOR19ESVJfVEFSR0VUfSR7bGliZGlyfSBcCisjICAgICAgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfRElSX1RBUkdFVH0ke2xpYmRpcn0gXAorIyAgICAgICAgICAgICAgICAgICAgICAgICAtV2wsLU8xIgorCisjIFdoaWNoIGZsYWdzIHRvIGxlYXZlIGJ5IHN0cmlwLWZsYWdzKCkgaW4gYmluL2J1aWxkL29lYnVpbGQuc2ggPworQUxMT1dFRF9GTEFHUyA9ICItTyAtbWNwdSAtbWFyY2ggLXBpcGUiCisKKyMgUGFzcyBwYXJhbGxlbCBtYWtlIG9wdGlvbnMgdG8gdGhlIGNvbXBpbGUgdGFzaworRVhUUkFfT0VNQUtFX3ByZXBlbmRfdGFzay1jb21waWxlID0gIiR7UEFSQUxMRUxfTUFLRX0gIgorUEFSQUxMRUxfTUFLRUlOU1QgPz89ICIke1BBUkFMTEVMX01BS0V9IgorIyBQYXNzIHBhcmFsbGVsIG1ha2Ugb3B0aW9ucyB0byB0aGUgaW5zdGFsbCB0YXNrCitFWFRSQV9PRU1BS0VfcHJlcGVuZF90YXNrLWluc3RhbGwgPSAiJHtQQVJBTExFTF9NQUtFSU5TVH0gIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgT3B0aW1pemF0aW9uIGZsYWdzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitERUJVR19GTEFHUyA/PSAiLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzIgorIyBEaXNhYmxlZCB1bnRpbCB0aGUgb3B0aW9uIHdvcmtzIHByb3Blcmx5IC1mZWxpbWluYXRlLWR3YXJmMi1kdXBzCitGVUxMX09QVElNSVpBVElPTiA9ICItTzIgLXBpcGUgJHtERUJVR19GTEFHU30iCitERUJVR19PUFRJTUlaQVRJT04gPSAiLU8gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgJHtERUJVR19GTEFHU30gLXBpcGUiCitTRUxFQ1RFRF9PUFRJTUlaQVRJT04gPSAiJHtAZC5nZXRWYXIoWydGVUxMX09QVElNSVpBVElPTicsICdERUJVR19PUFRJTUlaQVRJT04nXVtkLmdldFZhcignREVCVUdfQlVJTEQnLCBUcnVlKSA9PSAnMSddLCBUcnVlKX0iCitTRUxFQ1RFRF9PUFRJTUlaQVRJT05bdmFyZGVwc10gKz0gIkZVTExfT1BUSU1JWkFUSU9OIERFQlVHX09QVElNSVpBVElPTiIKK0JVSUxEX09QVElNSVpBVElPTiA9ICItTzIgLXBpcGUiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTZXR0aW5ncyB1c2VkIGJ5IGJpdGJha2UtbGF5ZXJzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitCQkxBWUVSU19MQVlFUklOREVYX1VSTCA/Pz0gImh0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4LyIKK0JCTEFZRVJTX0ZFVENIX0RJUiA/Pz0gIiR7Q09SRUJBU0V9IgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRG93bmxvYWQgbG9jYXRpb25zIGFuZCB1dGlsaXRpZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQVBBQ0hFX01JUlJPUiA9ICJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZGlzdCIKK0RFQklBTl9NSVJST1IgPSAiZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wiCitHRU5UT09fTUlSUk9SID0gImh0dHA6Ly9kaXN0ZmlsZXMuZ2VudG9vLm9yZy9kaXN0ZmlsZXMiCitHTk9NRV9HSVQgPSAiZ2l0Oi8vZ2l0Lmdub21lLm9yZyIKK0dOT01FX01JUlJPUiA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcyIKK0dOVV9NSVJST1IgPSAiaHR0cDovL2Z0cC5nbnUub3JnL2dudSIKK0dQRV9NSVJST1IgPSAiaHR0cDovL2dwZS5saW51eHRvZ28ub3JnL2Rvd25sb2FkL3NvdXJjZSIKK0tFUk5FTE9SR19NSVJST1IgPSAiaHR0cDovL2tlcm5lbC5vcmcvcHViIgorU09VUkNFRk9SR0VfTUlSUk9SID0gImh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0IgorWExJQlNfTUlSUk9SID0gImh0dHA6Ly94bGlicy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZSIKK1hPUkdfTUlSUk9SID0gImh0dHA6Ly94b3JnLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcyIKK1NBVkFOTkFIX0dOVV9NSVJST1IgPSAiaHR0cDovL2Rvd25sb2FkLnNhdmFubmFoLmdudS5vcmcvcmVsZWFzZXMiCitTQVZBTk5BSF9OT05HTlVfTUlSUk9SID0gImh0dHA6Ly9kb3dubG9hZC5zYXZhbm5haC5ub25nbnUub3JnL3JlbGVhc2VzIgorQ1BBTl9NSVJST1IgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOIgorCitTUkNfVVJJW3ZhcmRlcHNleGNsdWRlXSArPSAiXAorICAgIEFQQUNIRV9NSVJST1IgXAorICAgIENQQU5fTUlSUk9SIFwKKyAgICBERUJJQU5fTUlSUk9SIFwKKyAgICBHRU5UT09fTUlSUk9SIFwKKyAgICBHTk9NRV9HSVQgXAorICAgIEdOT01FX01JUlJPUiBcCisgICAgR05VX01JUlJPUiBcCisgICAgR1BFX01JUlJPUiBcCisgICAgS0VSTkVMT1JHX01JUlJPUiBcCisgICAgU0FWQU5OQUhfR05VX01JUlJPUiBcCisgICAgU0FWQU5OQUhfTk9OR05VX01JUlJPUiBcCisgICAgU09VUkNFRk9SR0VfTUlSUk9SIFwKKyAgICBYTElCU19NSVJST1IgXAorICAgIFhPUkdfTUlSUk9SIFwKKyIKKworIyBZb3UgY2FuIHVzZSB0aGUgbWlycm9yIG9mIHlvdXIgY291bnRyeSB0byBnZXQgZmFzdGVyIGRvd25sb2FkcyBieSBwdXR0aW5nCisjICBleHBvcnQgREVCSUFOX01JUlJPUiA9ICJmdHA6Ly9mdHAuZGUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCIKKyMgICAgIGludG8geW91ciBsb2NhbC5jb25mCisKK0ZFVENIQ01EX3N2biA9ICIvdXNyL2Jpbi9lbnYgc3ZuIC0tbm9uLWludGVyYWN0aXZlIC0tdHJ1c3Qtc2VydmVyLWNlcnQiCitGRVRDSENNRF9jdnMgPSAiL3Vzci9iaW4vZW52IGN2cyIKK0ZFVENIQ01EX3dnZXQgPSAiL3Vzci9iaW4vZW52IHdnZXQgLXQgMiAtVCAzMCAtbnYgLS1wYXNzaXZlLWZ0cCAtLW5vLWNoZWNrLWNlcnRpZmljYXRlIgorRkVUQ0hDTURfYnpyID0gIi91c3IvYmluL2VudiBienIiCitGRVRDSENNRF9oZyA9ICIvdXNyL2Jpbi9lbnYgaGciCisKK1NSQ0RBVEUgPSAiJHtEQVRFfSIKK1NSQ1JFViA/Pz0gIklOVkFMSUQiCitBVVRPUkVWID0gIiR7QGJiLmZldGNoMi5nZXRfYXV0b3JldihkKX0iCitTUkNQViA9ICIke0BiYi5mZXRjaDIuZ2V0X3NyY3JldihkKX0iCitTUkNQVlt2YXJkZXB2YWx1ZV0gPSAiJHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiIgorCisjIFVzZSBwc2V1ZG8gYXMgdGhlIGZha2Vyb290IGltcGxlbWVudGF0aW9uCitQU0VVRE9fTE9DQUxTVEFURURJUiA/PSAiJHtXT1JLRElSfS9wc2V1ZG8vIgorUFNFVURPX1BBU1NXRCA/PSAiJHtTVEFHSU5HX0RJUl9UQVJHRVR9OiR7U1RBR0lOR19ESVJfTkFUSVZFfSIKK2V4cG9ydCBQU0VVRE9fRElTQUJMRUQgPSAiMSIKKyNleHBvcnQgUFNFVURPX1BSRUZJWCA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9IgorI2V4cG9ydCBQU0VVRE9fQklORElSID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0iCisjZXhwb3J0IFBTRVVET19MSUJESVIgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JFBTRVVET0JJTkRJUi8uLi9saWIvcHNldWRvL2xpYgorRkFLRVJPT1RCQVNFRU5WID0gIlBTRVVET19CSU5ESVI9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IFBTRVVET19MSUJESVI9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9Ly4uL2xpYi9wc2V1ZG8vbGliIFBTRVVET19QUkVGSVg9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9Ly4uLy4uLyBQU0VVRE9fRElTQUJMRUQ9MSIKK0ZBS0VST09UQ01EID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wc2V1ZG8iCitGQUtFUk9PVEVOViA9ICJQU0VVRE9fUFJFRklYPSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0gUFNFVURPX0xPQ0FMU1RBVEVESVI9JHtQU0VVRE9fTE9DQUxTVEFURURJUn0gUFNFVURPX1BBU1NXRD0ke1BTRVVET19QQVNTV0R9IFBTRVVET19OT1NZTUxJTktFWFA9MSBQU0VVRE9fRElTQUJMRUQ9MCIKK0ZBS0VST09UTk9FTlYgPSAiUFNFVURPX1VOTE9BRD0xIgorRkFLRVJPT1RESVJTID0gIiR7UFNFVURPX0xPQ0FMU1RBVEVESVJ9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlID89ICJwc2V1ZG8tbmF0aXZlIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTWlzY2VsbGFuZW91cyB1dGlsaXRpZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBHTlUgcGF0Y2ggdHJpZXMgdG8gYmUgaW50ZWxsZ2VudCBhYm91dCBjaGVja2luZyBvdXQgcmVhZC1vbmx5IGZpbGVzIGZyb20KKyMgYSBSQ1MsIHdoaWNoIGZyZWFrcyBvdXQgdGhvc2Ugc3BlY2lhbCBmb2xrcyB3aXRoIGFjdGl2ZSBQZXJmb3JjZSBjbGllbnRzCisjIHRoZSBmb2xsb3dpbmcgbWFrZXMgcGF0Y2ggaWdub3JlIFJDUzoKKworZXhwb3J0IFBBVENIX0dFVD0iMCIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5vdCBzdXJlIGFib3V0IHRoZSByZXN0IG9mIHRoaXMgeWV0LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgUHJlLWJ1aWxkIGNvbmZpZ3VyYXRpb24gb3V0cHV0CitCVUlMRENGR19IRUFERVIgPSAiQnVpbGQgQ29uZmlndXJhdGlvbjoiCitCVUlMRENGR19WQVJTID0gIkJCX1ZFUlNJT04gQlVJTERfU1lTIE5BVElWRUxTQlNUUklORyBUQVJHRVRfU1lTIE1BQ0hJTkUgRElTVFJPIERJU1RST19WRVJTSU9OIFRVTkVfRkVBVFVSRVMgVEFSR0VUX0ZQVSIKK0JVSUxEQ0ZHX1ZBUlNbdHlwZV0gPSAibGlzdCIKK0JVSUxEQ0ZHX05FRURFRFZBUlMgPSAiVEFSR0VUX0FSQ0ggVEFSR0VUX09TIgorQlVJTERDRkdfTkVFREVEVkFSU1t0eXBlXSA9ICJsaXN0IgorCisjIE90aGVyCisKK2V4cG9ydCBQS0dfQ09ORklHX0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtsaWJkaXJ9L3BrZ2NvbmZpZyIKK2V4cG9ydCBQS0dfQ09ORklHX1BBVEggPSAiJHtQS0dfQ09ORklHX0RJUn06JHtTVEFHSU5HX0RBVEFESVJ9L3BrZ2NvbmZpZyIKK2V4cG9ydCBQS0dfQ09ORklHX0xJQkRJUiA9ICIke1BLR19DT05GSUdfRElSfSIKK2V4cG9ydCBQS0dfQ09ORklHX1NZU1JPT1RfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0iCitleHBvcnQgUEtHX0NPTkZJR19ESVNBQkxFX1VOSU5TVEFMTEVEID0gInllcyIKKworIyMjCisjIyMgQ29uZmlnIGZpbGUgcHJvY2Vzc2luZworIyMjCisKKyMgQW4gZW1wdHkgZGlzdHJvIGxlYWRzIHRvIDo6IGVudHJpZXMgaW4gT1ZFUlJJREVTIGFuZCBGSUxFT1ZFUlJJREVTIHdoaWNoCisjIGlzIGEgYmFkIGlkZWEuIFNldHRpbmcgYSBkdW1teSB2YWx1ZSBpcyBiZXR0ZXIgdGhhbiBhIHRvbiBvZiBhbm9ueW1vdXMgcHl0aG9uLgorRElTVFJPID8/PSAibm9kaXN0cm8iCitESVNUUk9fTkFNRSA/Pz0gIk9wZW5FbWJlZGRlZCIKKyMgT3ZlcnJpZGVzIGFyZSBwcm9jZXNzZWQgbGVmdCB0byByaWdodCwgc28gdGhlIG9uZXMgdGhhdCBhcmUgbmFtZWQgbGF0ZXIgdGFrZSBwcmVjZWRlbmNlLgorIyBZb3UgZ2VuZXJhbGx5IHdhbnQgdGhlbSB0byBnbyBmcm9tIGxlYXN0IHRvIG1vc3Qgc3BlY2lmaWMuCisjCisjIFRoaXMgbWVhbnMgdGhhdCBhbiBlbnZpb25tZW50IHZhcmlhYmxlIG5hbWVkICc8Zm9vPl9hcm0nIG92ZXJyaWRlcyBhbgorIyBlbnZpcm9ubWVudCB2YXJpYWJsZSAnPGZvbz4nICh3aGVuICR7VEFSR0VUX0FSQ0h9IGlzIGFybSkuCisjIEFuIGVudmlyb25tZW50IHZhcmlhYmxlICc8Zm9vPl9xZW11YXJtJyBvdmVycmlkZXMgJzxmb28+JyBhbmQgb3ZlcnJpZGVzCisjICc8Zm9vPl9hcm0nIHdoZW4gJHtNQUNISU5FfSBpcyAncWVtdWFybScuCisjIElmIHlvdSB1c2UgY29tYmluYXRpb24gaWUgJzxmb28+X3FlbXVhcm1fYXJtJywgdGhlbiAnPGZvbz5fcWVtdWFybV9hcm0nIHdpbGwgb3ZlcnJpZGUKKyMgJzxmb28+X3FlbXVhcm0nIGFuZCB0aGVuICc8Zm9vPicgd2lsbCBiZSBvdmVycmlkZW4gd2l0aCB0aGF0IHZhbHVlIGZyb20gJzxmb28+X3FlbXVhcm0nLgorIyBBbmQgZmluYWxseSAnPGZvbz5fZm9yY2V2YXJpYWJsZScgb3ZlcnJpZGVzIGFueSBzdGFuZGFyZCB2YXJpYWJsZSwgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eS4KKyMKKyMgVGhpcyB3b3JrcyBmb3IgIGZ1bmN0aW9ucyBhcyB3ZWxsLCB0aGV5IGFyZSByZWFsbHkganVzdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisjIERlZmF1bHQgT1ZFUlJJREVTIHRvIG1ha2UgY29tcGlsYXRpb24gZmFpbCBmYXN0IGluIGNhc2Ugb2YgYnVpbGQgc3lzdGVtIG1pc2NvbmZpZ3VyYXRpb24uCitPVkVSUklERVMgPSAiJHtUQVJHRVRfT1N9OiR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH06YnVpbGQtJHtCVUlMRF9PU306cG4tJHtQTn06JHtNQUNISU5FT1ZFUlJJREVTfToke0RJU1RST09WRVJSSURFU306JHtDTEFTU09WRVJSSURFfTpmb3JjZXZhcmlhYmxlIgorT1ZFUlJJREVTW3ZhcmRlcHNleGNsdWRlXSA9ICJNQUNISU5FT1ZFUlJJREVTIgorQ0xBU1NPVkVSUklERSA/PSAiY2xhc3MtdGFyZ2V0IgorRElTVFJPT1ZFUlJJREVTID89ICIke0BkLmdldFZhcignRElTVFJPJywgVHJ1ZSkgb3IgJyd9IgorTUFDSElORU9WRVJSSURFUyA/PSAiJHtNQUNISU5FfSIKK01BQ0hJTkVPVkVSUklERVNbdmFyZGVwc2V4Y2x1ZGVdID0gIk1BQ0hJTkUiCisKK0ZJTEVTT1ZFUlJJREVTID0gIiR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH06JHtNQUNISU5FT1ZFUlJJREVTfToke0RJU1RST09WRVJSSURFU30iCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBJbmNsdWRlIHRoZSByZXN0IG9mIHRoZSBjb25maWcgZmlsZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcmVxdWlyZSBjb25mL2FiaV92ZXJzaW9uLmNvbmYKK2luY2x1ZGUgY29uZi9zaXRlLmNvbmYKK2luY2x1ZGUgY29uZi9hdXRvLmNvbmYKK2luY2x1ZGUgY29uZi9sb2NhbC5jb25mCitpbmNsdWRlIGNvbmYvYnVpbGQvJHtCVUlMRF9TWVN9LmNvbmYKK2luY2x1ZGUgY29uZi90YXJnZXQvJHtUQVJHRVRfU1lTfS5jb25mCitpbmNsdWRlIGNvbmYvbWFjaGluZS8ke01BQ0hJTkV9LmNvbmYKK2luY2x1ZGUgY29uZi9tYWNoaW5lLXNkay8ke1NES01BQ0hJTkV9LmNvbmYKK2luY2x1ZGUgY29uZi9kaXN0cm8vJHtESVNUUk99LmNvbmYKK2luY2x1ZGUgY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmYKK2luY2x1ZGUgY29uZi9kb2N1bWVudGF0aW9uLmNvbmYKK2luY2x1ZGUgY29uZi9saWNlbnNlcy5jb25mCityZXF1aXJlIGNvbmYvc2FuaXR5LmNvbmYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFdlYWsgdmFyaWFibGVzICh1c3VhbGx5IHRvIHJldGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSkKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitETF9ESVIgPz0gIiR7VE9QRElSfS9kb3dubG9hZHMiCitTU1RBVEVfRElSID89ICIke1RPUERJUn0vc3N0YXRlLWNhY2hlIgorSU1BR0VfRlNUWVBFUyA/PSAidGFyLmd6IgorSU5JVFJBTUZTX0ZTVFlQRVMgPz0gImNwaW8uZ3oiCitERUZBVUxUX1RBU0tfUFJPVklERVIgPz0gInBhY2thZ2Vncm91cC1iYXNlIgorTUFDSElORV9UQVNLX1BST1ZJREVSID89ICIke0RFRkFVTFRfVEFTS19QUk9WSURFUn0iCisKKyMgVGhlIHNpemUgaW4gS2J5dGVzIGZvciB0aGUgZ2VuZXJhdGVkIGltYWdlIGlmIGl0IGlzIGxhcmdlciB0aGFuCisjIHRoZSByZXF1aXJlZCBzaXplIChkdSAta3MgSU1BR0VfUk9PVEZTICogSU1BR0VfT1ZFUkhFQURfRkFDVE9SKSwKKyMgYW5kIG5vIGVmZmVjdCBpZiBsZXNzIHRoYW4gaXQuCitJTUFHRV9ST09URlNfU0laRSA/Pz0gIjY1NTM2IgorCisjIEZvcmNlZnVsbHkgc2V0IENBQ0hFIG5vdyBzbyBmdXR1cmUgY2hhbmdlcyB0byB0aGluZ3MgbGlrZQorIyBNQUNISU5FIGRvbid0IGNoYW5nZSB0aGUgcGF0aCB0byB0aGUgY2FjaGUKK0NBQ0hFIDo9ICIke0NBQ0hFfSIKKworIyBEZWZhdWx0IHRvIHNldHRpbmcgYXV0b21hdGljYWxseSBiYXNlZCBvbiBjcHUgY291bnQKK0JCX05VTUJFUl9USFJFQURTID89ICIke0BvZS51dGlscy5jcHVfY291bnQoKX0iCisKKyMgRGVmYXVsdCB0byBzZXR0aW5nIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gY3B1IGNvdW50CitQQVJBTExFTF9NQUtFID89ICItaiAke0BvZS51dGlscy5jcHVfY291bnQoKX0iCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNYWdpYyBDb29raWUgZm9yIFNBTklUWSBDSEVDSworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitPRVNfQklUQkFLRV9DT05GID0gIjEiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNYWNoaW5lIHByb3BlcnRpZXMgYW5kIHBhY2thZ2Vncm91cC1iYXNlIHN0dWZmCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworTUFDSElORV9GRUFUVVJFUyA/PSAiIgorRElTVFJPX0ZFQVRVUkVTID89ICIiCisKK0RJU1RST19FWFRSQV9SREVQRU5EUyA/PSAiIgorRElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTID89ICIiCitNQUNISU5FX0VYVFJBX1JERVBFTkRTID89ICIiCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID89ICIiCitNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyA/PSAiIgorTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMgPz0gIiIKKworRVhUUkFfSU1BR0VfRkVBVFVSRVMgPz89ICIiCitJTUFHRV9GRUFUVVJFUyArPSAiJHtFWFRSQV9JTUFHRV9GRUFUVVJFU30iCisKK0RJU1RST19GRUFUVVJFU19CQUNLRklMTCA9ICJwdWxzZWF1ZGlvIHN5c3Zpbml0IGJsdWV6NSIKK01BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTEwgPSAicnRjIgorCitDT01CSU5FRF9GRUFUVVJFUyA9ICIke0BvZS51dGlscy5zZXRfaW50ZXJzZWN0KCdESVNUUk9fRkVBVFVSRVMnLCAnTUFDSElORV9GRUFUVVJFUycsIGQpfSIKK0NPTUJJTkVEX0ZFQVRVUkVTW3ZhcmRlcHNdICs9ICJESVNUUk9fRkVBVFVSRVMgTUFDSElORV9GRUFUVVJFUyIKKworU0VSSUFMX0NPTlNPTEUgPz89ICIiCitTRVJJQUxfQ09OU09MRVMgPz89ICIke0BkLmdldFZhcignU0VSSUFMX0NPTlNPTEUnLCBUcnVlKS5yZXBsYWNlKCcgJywgJzsnKX0iCisKK05PX1JFQ09NTUVOREFUSU9OUyA/PSAiIgorQkFEX1JFQ09NTUVOREFUSU9OUyA/PSAiIgorCisjIE1ha2Ugc3VyZSBNQUNISU5FIGlzbid0IGV4cG9ydGVkCisjIChicmVha3MgYmludXRpbHMgYXQgbGVhc3QpCitNQUNISU5FW3VuZXhwb3J0XSA9ICIxIgorCisjIE1ha2Ugc3VyZSBUQVJHRVRfQVJDSCBpc24ndCBleHBvcnRlZAorIyAoYnJlYWtzIE1ha2VmaWxlcyB1c2luZyBpbXBsaWNpdCBydWxlcywgZS5nLiBxdWlsdCwgYXMgR05VIG1ha2UgaGFzIHRoaXMKKyMgaW4gdGhlbSwgdW5kb2N1bWVudGVkKQorVEFSR0VUX0FSQ0hbdW5leHBvcnRdID0gIjEiCisKKyMgTWFrZSBzdXJlIERJU1RSTyBpc24ndCBleHBvcnRlZAorIyAoYnJlYWtzIHN5c3Zpbml0IGF0IGxlYXN0KQorRElTVFJPW3VuZXhwb3J0XSA9ICIxIgorCisjIE1ha2Ugc3VyZSBTSEVMTCBpc24ndCBleHBvcnRlZAorIyAoY2FuIGJyZWFrIGFueSBudW1iZXIgb2YgdGhpbmdzIGlmIHRoZSB1c2VyJ3Mgc2hlbGwgaXNuJ3QgUE9TSVgtY29tcGxpYW50LAorIyBpbmNsdWRpbmcgdGhlIGZsb2NrIGNvbW1hbmQpLiBUaGUgdXNlcidzIHNoZWxsIHNob3VsZG4ndCBhZmZlY3Qgb3VyIGJ1aWxkcy4KK1NIRUxMW3VuZXhwb3J0XSA9ICIxIgorCisjIFVzZWQgYnkgY2FuYWRpYW4tY3Jvc3MgdG8gaGFuZGxlIHN0cmluZyBjb252ZXJzaW9ucyBvbiBUQVJHRVRfQVJDSCB3aGVyZSBuZWVkZWQKK1RSQU5TTEFURURfVEFSR0VUX0FSQ0ggPz89ICIke0BkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKS5yZXBsYWNlKCJfIiwgIi0iKX0iCisKKyMgQ29tcGxldGUgb3V0cHV0IGZyb20gYml0YmFrZQorQkJfQ09OU09MRUxPRyA/PSAiJHtMT0dfRElSfS9jb29rZXIvJHtNQUNISU5FfS8ke0RBVEVUSU1FfS5sb2ciCisKKyMgU2V0dXAgb3VyIGRlZmF1bHQgaGFzaCBwb2xpY3kKK0JCX1NJR05BVFVSRV9IQU5ETEVSID89ICJPRUJhc2ljSGFzaCIKK0JCX0hBU0hCQVNFX1dISVRFTElTVCA/PSAiVE1QRElSIEZJTEUgUEFUSCBQV0QgQkJfVEFTS0hBU0ggQkJQQVRIIERMX0RJUiBcCisgICAgU1NUQVRFX0RJUiBUSElTRElSIEZJTEVTRVhUUkFQQVRIUyBGSUxFX0RJUk5BTUUgSE9NRSBMT0dOQU1FIFNIRUxMIFRFUk0gXAorICAgIFVTRVIgRklMRVNQQVRIIFNUQUdJTkdfRElSX0hPU1QgU1RBR0lOR19ESVJfVEFSR0VUIENPUkVCQVNFIFBSU0VSVl9IT1NUIFwKKyAgICBQUlNFUlZfRFVNUERJUiBQUlNFUlZfRFVNUEZJTEUgUFJTRVJWX0xPQ0tET1dOIFBBUkFMTEVMX01BS0UgXAorICAgIENDQUNIRV9ESVIgRVhURVJOQUxfVE9PTENIQUlOIENDQUNIRSBDQ0FDSEVfRElTQUJMRSBMSUNFTlNFX1BBVEggU0RLUEtHU1VGRklYIFwKKyAgICBXQVJOX1FBIEVSUk9SX1FBIFdPUktESVIgU1RBTVBDTEVBTiBQS0dEQVRBX0RJUiBCVUlMRF9BUkNIIFNTVEFURV9QS0dBUkNIIgorQkJfSEFTSENPTkZJR19XSElURUxJU1QgPz0gIiR7QkJfSEFTSEJBU0VfV0hJVEVMSVNUfSBEQVRFIFRJTUUgU1NIX0FHRU5UX1BJRCBcCisgICAgU1NIX0FVVEhfU09DSyBQU0VVRE9fQlVJTEQgQkJfRU5WX0VYVFJBV0hJVEUgRElTQUJMRV9TQU5JVFlfQ0hFQ0tTIFwKKyAgICBQQVJBTExFTF9NQUtFIEJCX05VTUJFUl9USFJFQURTIEJCX09SSUdFTlYgQkJfSU5WQUxJRENPTkYgQkJJTkNMVURFRCIKK0JCX1NJR05BVFVSRV9FWENMVURFX0ZMQUdTID89ICJkb2MgZGVwcyBkZXBlbmRzIFwKKyAgICBsb2NrZmlsZXMgdHlwZSB2YXJkZXBzZXhjbHVkZSB2YXJkZXBzIHZhcmRlcHZhbHVlIHZhcmRlcHZhbHVlZXhjbHVkZSBcCisgICAgZmlsZS1jaGVja3N1bXMgcHl0aG9uIGZ1bmMgdGFzayBleHBvcnQgdW5leHBvcnQgbm9leGVjIG5vc3RhbXAgZGlycyBjbGVhbmRpcnMgXAorICAgIHNzdGF0ZS1sb2NrZmlsZS1zaGFyZWQgcHJlZnVuY3MgcG9zdGZ1bmNzIGV4cG9ydF9mdW5jIGRlcHRhc2sgcmRlcHRhc2sgXAorICAgIHJlY3JkZXB0YXNrIG5vZGVwcnJlY3Mgc3RhbXAtYmFzZSBzdGFtcC1leHRyYS1pbmZvIgorCitNTFBSRUZJWCA/Pz0gIiIKK01VTFRJTElCX1ZBUklBTlRTID8/PSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvY29uZi1ub3Rlcy50eHQgYi95b2N0by1wb2t5L21ldGEvY29uZi9jb25mLW5vdGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmU2MzE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvY29uZi1ub3Rlcy50eHQKQEAgLTAsMCArMSw4IEBACitDb21tb24gdGFyZ2V0cyBhcmU6CisgICAgY29yZS1pbWFnZS1taW5pbWFsCisgICAgY29yZS1pbWFnZS1zYXRvCisgICAgbWV0YS10b29sY2hhaW4KKyAgICBhZHQtaW5zdGFsbGVyCisgICAgbWV0YS1pZGUtc3VwcG9ydAorCitZb3UgY2FuIGFsc28gcnVuIGdlbmVyYXRlZCBxZW11IGltYWdlcyB3aXRoIGEgY29tbWFuZCBsaWtlICdydW5xZW11IHFlbXV4ODYnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFjNjViMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9kZWZhdWx0c2V0dXAuY29uZgpAQCAtMCwwICsxLDIzIEBACitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC1wcm92aWRlcnMuaW5jCitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC12ZXJzaW9ucy5pbmMKK2luY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LWRpc3Ryb3ZhcnMuaW5jCitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvd29ybGQtYnJva2VuLmluYworCitUQ01PREUgPz0gImRlZmF1bHQiCityZXF1aXJlIGNvbmYvZGlzdHJvL2luY2x1ZGUvdGNtb2RlLSR7VENNT0RFfS5pbmMKKworVENMSUJDID89ICJnbGliYyIKK3JlcXVpcmUgY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtJHtUQ0xJQkN9LmluYworCisjIEFsbG93IHNpbmdsZSBsaWJjIGRpc3Ryb3MgdG8gZGlzYWJsZSB0aGlzIGNvZGUKK1RDTElCQ0FQUEVORCA/PSAiLSR7VENMSUJDfSIKK1RNUERJUiAuPSAiJHtUQ0xJQkNBUFBFTkR9IgorCitDQUNIRSA9ICIke1RNUERJUn0vY2FjaGUvJHtUQ01PREV9LSR7VENMSUJDfSR7QFsnJywgJy8nICsgc3RyKGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkpXVtib29sKGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkpXX0ke0BbJycsICcvJyArIHN0cihkLmdldFZhcignU0RLTUFDSElORScsIFRydWUpKV1bYm9vbChkLmdldFZhcignU0RLTUFDSElORScsIFRydWUpKV19IgorCitVU0VSX0NMQVNTRVMgPz0gIiIKK1BBQ0tBR0VfQ0xBU1NFUyA/PSAicGFja2FnZV9pcGsiCitJTkhFUklUX0JMQUNLTElTVCA9ICJibGFja2xpc3QiCitJTkhFUklUX0RJU1RSTyA/PSAiZGViaWFuIGRldnNoZWxsIHNzdGF0ZSBsaWNlbnNlIgorSU5IRVJJVCArPSAiJHtQQUNLQUdFX0NMQVNTRVN9ICR7VVNFUl9DTEFTU0VTfSAke0lOSEVSSVRfRElTVFJPfSAke0lOSEVSSVRfQkxBQ0tMSVNUfSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvYXMtbmVlZGVkLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2FzLW5lZWRlZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYyNDlmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2FzLW5lZWRlZC5pbmMKQEAgLTAsMCArMSwxNyBAQAorCitBU05FRURFRCA9ICItV2wsLS1hcy1uZWVkZWQiCisKK0FTTkVFREVEX3BuLWJhYmVsdHJhY2UgPSAiIgorQVNORUVERURfcG4tY29uc29sZS10b29scyA9ICIiCitBU05FRURFRF9wbi1kaXN0Y2MgPSAiIgorQVNORUVERURfcG4tb3Blbm9iZXggPSAiIgorQVNORUVERURfcG4taWN1ID0gIiIKK0FTTkVFREVEX3BuLXhzZXJ2ZXIta2RyaXZlLXhvbWFwID0gIiIKK0FTTkVFREVEX3BuLW1pbmltbyA9ICIiCitBU05FRURFRF9wbi1wY2l1dGlscyA9ICIiCitBU05FRURFRF9wbi1wdXp6bGVzID0gIiIKK0FTTkVFREVEX3BuLWRpYWxlciA9ICIiCitBU05FRURFRF9wbi1wdWxzZWF1ZGlvID0gIiIKK0FTTkVFREVEX3BuLXJwbSA9ICIiCisKK1RBUkdFVF9MREZMQUdTICs9ICIke0FTTkVFREVEfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtZGlzdHJvdmFycy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LWRpc3Ryb3ZhcnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5Yjc2MmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LWRpc3Ryb3ZhcnMuaW5jCkBAIC0wLDAgKzEsNDkgQEAKK1FBX0xPR0ZJTEUgPSAiJHtUTVBESVJ9L3FhLmxvZyIKKworT0VJTkNMVURFTE9HUyA/PSAieWVzIgorS0VSTkVMX0NPTlNPTEUgPz0gInR0eVMwIgorS0VFUFVJTUFHRSA/Pz0gInllcyIKKworSU1BR0VfTElOR1VBUyA/PSAiZW4tdXMgZW4tZ2IiCitFTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OID89ICIxIgorTE9DQUxFX1VURjhfT05MWSA/PSAiMCIKKworRElTVFJPX0ZFQVRVUkVTX0RFRkFVTFQgPz0gImFsc2EgYXJncCBibHVldG9vdGggZXh0MiBpcmRhIGxhcmdlZmlsZSBwY21jaWEgdXNiZ2FkZ2V0IHVzYmhvc3Qgd2lmaSB4YXR0ciBuZnMgemVyb2NvbmYgcGNpIDNnIG5mYyB4MTEiCitESVNUUk9fRkVBVFVSRVNfTElCQ19ERUZBVUxUID89ICJpcHY0IGlwdjYgbGliYy1iYWNrdHJhY2UgbGliYy1iaWctbWFjcm9zIGxpYmMtYnNkIGxpYmMtY3h4LXRlc3RzIGxpYmMtY2F0Z2V0cyBsaWJjLWNoYXJzZXRzIGxpYmMtY3J5cHQgXAorCQkJCQlsaWJjLWNyeXB0LXVmYyBsaWJjLWRiLWFsaWFzZXMgbGliYy1lbnZ6IGxpYmMtZmN2dCBsaWJjLWZtdG1zZyBsaWJjLWZzdGFiIGxpYmMtZnRyYXZlcnNlIFwKKwkJCQkJbGliYy1nZXRsb2dpbiBsaWJjLWlkbiBsaWJjLWluZXQtYW5sIGxpYmMtbGlibSBsaWJjLWxvY2FsZXMgbGliYy1sb2NhbGUtY29kZSBcCisJCQkJCWxpYmMtbWVtdXNhZ2UgbGliYy1uaXMgbGliYy1uc3N3aXRjaCBsaWJjLXJjbWQgbGliYy1ydGxkLWRlYnVnIGxpYmMtc3Bhd24gbGliYy1zdHJlYW1zIGxpYmMtc3VucnBjIFwKKwkJCQkJbGliYy11dG1wIGxpYmMtdXRtcHggbGliYy13b3JkZXhwIGxpYmMtcG9zaXgtY2xhbmctd2NoYXIgbGliYy1wb3NpeC1yZWdleHAgbGliYy1wb3NpeC1yZWdleHAtZ2xpYmMgXAorCQkJCQlsaWJjLXBvc2l4LXdjaGFyLWlvIgorRElTVFJPX0ZFQVRVUkVTX0xJQkMgPz0gIiR7RElTVFJPX0ZFQVRVUkVTX0xJQkNfREVGQVVMVH0iCitESVNUUk9fRkVBVFVSRVNfTElCQ19jbGFzcy1uYXRpdmVzZGsgPSAiJHtESVNUUk9fRkVBVFVSRVNfTElCQ19ERUZBVUxUfSIKK0RJU1RST19GRUFUVVJFUyA/PSAiJHtESVNUUk9fRkVBVFVSRVNfREVGQVVMVH0gJHtESVNUUk9fRkVBVFVSRVNfTElCQ30iCisKK0lNQUdFX0ZFQVRVUkVTID89ICIiCisKKyMgVGhpcyBpcyBhIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIHRoZSBkaXN0cmlidXRpb24sIHRoZXkgYXJlIG5vdAorIyBkaXJlY3RseSBwYXJ0IG9mIHRoZSBkaXN0cmlidXRpb24uIAorSE9TVFRPT0xTX1dISVRFTElTVF9HUEwtMy4wID89ICIiCitXSElURUxJU1RfR1BMLTMuMCA/PSAibGVzcyIKK0xHUEx2Ml9XSElURUxJU1RfR1BMLTMuMCA/PSAibGliYXNzdWFuIGdudXRscyBsaWJ0YXNuMSBsaWJpZG4iCisKK0NPTU1FUkNJQUxfQVVESU9fUExVR0lOUyA/PSAiIgorIyBDT01NRVJDSUFMX0FVRElPX1BMVUdJTlMgPz0gImdzdC1wbHVnaW5zLXVnbHktbWFkIGdzdC1wbHVnaW5zLXVnbHktbXBlZ2F1ZGlvcGFyc2UiCitDT01NRVJDSUFMX1ZJREVPX1BMVUdJTlMgPz0gIiIKKyMgQ09NTUVSQ0lBTF9WSURFT19QTFVHSU5TID89ICJnc3QtcGx1Z2lucy11Z2x5LW1wZWcyZGVjIGdzdC1wbHVnaW5zLXVnbHktbXBlZ3N0cmVhbSBnc3QtcGx1Z2lucy1iYWQtbXBlZ3ZpZGVvcGFyc2UiCitDT01NRVJDSUFMX1FUID89ICIiCisjIENPTU1FUkNJQUxfUVQgPz0gInFtbXAiCisjIFNldCBvZiBjb21tb24gbGljZW5zZXMgdXNlZCBmb3IgbGljZW5zZS5iYmNsYXNzCitDT01NT05fTElDRU5TRV9ESVIgPz89ICIke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcyIKKworQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTID8/PSAiMCIKKworTk8zMkxJQlMgPz89ICIxIgorCisjIERlZmF1bHQgdG8gZW1pdHRpbmcgbG9nZmlsZXMgaWYgYSBidWlsZCBmYWlscy4KK0JCSU5DTFVERUxPR1MgPz89ICJ5ZXMiCitTREtfVkVSU0lPTiA/Pz0gIm5vZGlzdHJvLjAiCitESVNUUk9fVkVSU0lPTiA/Pz0gIm5vZGlzdHJvLjAiCisKKyMgTWlzc2luZyBjaGVja3N1bXMgc2hvdWxkIHJhaXNlIGFuIGVycm9yCitCQl9TVFJJQ1RfQ0hFQ0tTVU0gPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtcHJvdmlkZXJzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtcHJvdmlkZXJzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Zjg0ZDVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC1wcm92aWRlcnMuaW5jCkBAIC0wLDAgKzEsNTEgQEAKKyMKKyMgRGVmYXVsdCB2aXJ0dWFsIHByb3ZpZGVycworIworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZGIgPz0gImRiIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZGItbmF0aXZlID89ICJkYi1uYXRpdmUiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyLXhmODYgPz0gInhzZXJ2ZXIteG9yZyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2VnbCA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczEgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMiA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL21lc2EgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzID89ICJvcGtnLXV0aWxzIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcy1uYXRpdmUgPz0gIm9wa2ctdXRpbHMtbmF0aXZlIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGlieDExID89ICJsaWJ4MTEiCitQUkVGRVJSRURfUFJPVklERVJfeGY4Ni12aWRlby1pbnRlbCA/PSAieGY4Ni12aWRlby1pbnRlbCIKKworIworIyBEZWZhdWx0IHZpcnR1YWwgcnVudGltZSBwcm92aWRlcnMKKyMKK1ZJUlRVQUwtUlVOVElNRV91cGRhdGUtYWx0ZXJuYXRpdmVzID89ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2ciCitWSVJUVUFMLVJVTlRJTUVfYXBtID89ICJhcG0iCitWSVJUVUFMLVJVTlRJTUVfYWxzYS1zdGF0ZSA/PSAiYWxzYS1zdGF0ZSIKK1ZJUlRVQUwtUlVOVElNRV9nZXRvcHQgPz0gInV0aWwtbGludXgtZ2V0b3B0IgorVklSVFVBTC1SVU5USU1FX3dpcmVsZXNzLXRvb2xzID89ICJpdyB3aXJlbGVzcy10b29scyIKKworIworIyBEZWZhdWx0IHJlY2lwZSBwcm92aWRlcnMKKyMKK1BSRUZFUlJFRF9QUk9WSURFUl9kYnVzLWdsaWIgPz0gImRidXMtZ2xpYiIKK1BSRUZFUlJFRF9QUk9WSURFUl9kYnVzLWdsaWItbmF0aXZlID89ICJkYnVzLWdsaWItbmF0aXZlIgorUFJFRkVSUkVEX1BST1ZJREVSX2dkay1waXhidWYgPz0gImdkay1waXhidWYiCitQUkVGRVJSRURfUFJPVklERVJfbGliZ2NjID89ICJsaWJnY2MiCitQUkVGRVJSRURfUFJPVklERVJfbmF0aXZlc2RrLWxpYmdjYyA/PSAibmF0aXZlc2RrLWxpYmdjYyIKK1BSRUZFUlJFRF9QUk9WSURFUl9saW51eC1saWJjLWhlYWRlcnMgPz0gImxpbnV4LWxpYmMtaGVhZGVycyIKK1BSRUZFUlJFRF9QUk9WSURFUl9uYXRpdmVzZGstbGludXgtbGliYy1oZWFkZXJzID89ICJuYXRpdmVzZGstbGludXgtbGliYy1oZWFkZXJzIgorUFJFRkVSUkVEX1BST1ZJREVSX21hdGNoYm94LXBhbmVsID89ICJtYXRjaGJveC1wYW5lbC0yIgorUFJFRkVSUkVEX1BST1ZJREVSX29wa2cgPz0gIm9wa2ciCitQUkVGRVJSRURfUFJPVklERVJfb3BrZy1uYXRpdmUgPz0gIm9wa2ctbmF0aXZlIgorUFJFRkVSUkVEX1BST1ZJREVSX25hdGl2ZXNkay1vcGtnID89ICJuYXRpdmVzZGstb3BrZyIKK1BSRUZFUlJFRF9QUk9WSURFUl9jb25zb2xlLXRvb2xzID89ICJrYmQiCitQUkVGRVJSRURfUFJPVklERVJfZ3ppcC1uYXRpdmUgPz0gInBpZ3otbmF0aXZlIgorUFJFRkVSUkVEX1BST1ZJREVSX21ha2UgPz0gIm1ha2UiCitQUkVGRVJSRURfUFJPVklERVJfdWRldiA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCdzeXN0ZW1kJywndWRldicsZCl9IgorIyBUaGVyZSBhcmUgaXNzdWVzIHdpdGggcnVudGltZSBwYWNrYWdlcyBhbmQgUFJFRkVSUkVEX1BST1ZJREVSLCBzZWUgWU9DVE8gIzUwNDQgZm9yIGRldGFpbHMKKyMgb24gdGhpcyByYXRoZXIgc3RyYW5nZSBlbnRyeS4KK1BSRUZFUlJFRF9QUk9WSURFUl9ibHVlejQgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdibHVldG9vdGggYmx1ZXo1JywnYmx1ZXo1JywnYmx1ZXo0JyxkKX0iCitQUkVGRVJSRURfUFJPVklERVJfYmx1ZXotaGNpZHVtcCA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ2JsdWV0b290aCBibHVlejUnLCdibHVlejUnLCdibHVlei1oY2lkdW1wJyxkKX0iCisjIEFsdGVybmF0aXZlIGlzIGx0cC1kZHQgaW4gbWV0YS1vZTogbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2x0cC1kZHQvbHRwLWRkdF8wLjAuNC5iYgorUFJFRkVSUkVEX1BST1ZJREVSX2x0cCA/PSAibHRwIgorUFJFRkVSUkVEX1BST1ZJREVSX2dldG9wdCA/PSAidXRpbC1saW51eC1nZXRvcHQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXZlcnNpb25zLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtdmVyc2lvbnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzA2M2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXZlcnNpb25zLmluYwpAQCAtMCwwICsxLDE1IEBACisjCisjIERlZmF1bHQgcHJlZmVycmVkIHZlcnNpb25zCisjCisKKyMgRm9yY2UgdGhlIHB5dGhvbiB2ZXJzaW9ucyBpbiBvbmUgcGxhY2UKK1BZVEhPTl9CQVNFVkVSU0lPTiA/PSAiMi43IgorUFJFRkVSUkVEX1ZFUlNJT05fcHl0aG9uID89ICIyLjcuOSIKK1BSRUZFUlJFRF9WRVJTSU9OX3B5dGhvbi1uYXRpdmUgPz0gIjIuNy45IgorCisjIEZvcmNlIHRoZSBvbGRlciB2ZXJzaW9uIG9mIGxpYmVyYXRpb24tZm9udHMgdW50aWwgd2UgZml4IHRoZSBmb250Zm9yZ2UgaXNzdWUKK1BSRUZFUlJFRF9WRVJTSU9OX2xpYmVyYXRpb24tZm9udHMgPz0gIjEuMDQiCisKKyMgRm9yY2UgZGItbmF0aXZlJ3MgdmVyc2lvbiB0byBrZWVwIHN5bmMgd2l0aCBkYiB3aGlsZQorIyAnQUdQTC0zLjAnIGluICR7SU5DT01QQVRJQkxFX0xJQ0VOU0V9IGJsYWNrbGlzdAorUFJFRkVSUkVEX1ZFUlNJT05fZGItbmF0aXZlID0gIiR7QGluY29tcGF0aWJsZV9saWNlbnNlX2NvbnRhaW5zKCdBR1BMLTMuMCcsICc1LiUnLCAnNi4lJywgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGlzdHJvX2FsaWFzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2Rpc3Ryb19hbGlhcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQzZGE5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2Rpc3Ryb19hbGlhcy5pbmMKQEAgLTAsMCArMSw1MzYgQEAKKyMKKyMgVGhpcyBpcyBhIGxpc3QgZm9yIHRyYWNraW5nIHN0YXR1cyBvZiBwYWNrYWdlIHJlbGF0aXZlIHRvIE1ham9yCisjIGRpc3RyaWJ1dGlvbnMgc3VjaCBhcyBGZWRvcmEsIFVidW50dSwgRGViaWFuLCAuLi4gVGhlIHBhY2thZ2UKKyMgbmFtZSBpcyB0aGUgbWFqb3IgZGlzdHJpYnV0aW9uIGVxdWl2YWxlbnQgdG8gdGhlIG5hbWUgdXNlZCBpbiBvZS1jb3JlCisjCisjIFRoZSBmb3JtYXQgaXMgYXMgYSBiaXRiYWtlIHZhcmlhYmxlIG92ZXJyaWRlIGZvciBlYWNoIHJlY2lwZQorIworIyAgICAgICBESVNUUk9fUE5fQUxJQVNfcG4tPHJlY2lwZSBuYW1lPiA9ICJEaXN0cm8xPTxwa2duYW1lPiBEaXN0cm8yPTxwa2duYW1lPiIKKyMKKyMgUGxlYXNlIGtlZXAgdGhpcyBsaXN0IGluIGFscGhhYmV0aWNhbCBvcmRlci4KKyMKK0RJU1RST19QTl9BTElBU19wbi1hYWluYSA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1hYml3b3JkLWVtYmVkZGVkID0gIkZlZG9yYT1hYml3b3JkIFVidW50dT1hYml3b3JkIgorRElTVFJPX1BOX0FMSUFTX3BuLWFkdC1pbnN0YWxsZXIgPSAiSW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tYWxzYS1zdGF0ZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWFsc2EtdXRpbHMtYWxzYWNvbmYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1hdGsgPSAiRmVkb3JhPWF0ayBPcGVuU3VTRT1hdGsiCitESVNUUk9fUE5fQUxJQVNfcG4tYXVnZWFzID0gIlVidW50dT1saWJhdWdlYXMwIERlYmlhbj1saWJhdWdlYXMwIgorRElTVFJPX1BOX0FMSUFTX3BuLWF2YWhpLXVpID0gIlVidW50dT1hdmFoaS1kaXNjb3ZlciBEZWJpYW49YXZhaGktZGlzY292ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tYmFiZWx0cmFjZSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1iZHdnYyA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1iaWdyZXFzcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tYmlncmVxc3Byb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWJqYW0gPSAiT3BlblN1U0U9Ym9vc3QtamFtIERlYmluYT1iamFtIgorRElTVFJPX1BOX0FMSUFTX3BuLWJsa3Rvb2wgPSAiRGViaWFuPWJsa3Rvb2wgTWFuZHJpdmE9YmxrdG9vbCIKK0RJU1RST19QTl9BTElBU19wbi1ibHVlejQgPSAiVWJ1bnR1PWJsdWV6IERlYmlhbj1ibHVlei11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1ibHVlejUgPSAiRmVkb3JhPWJsdWV6ICBPcGVuc3VzZT1ibHVleiIKK0RJU1RST19QTl9BTElBU19wbi1ibHVlei1kdGwxLXdvcmthcm91bmQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1ib290Y2hhcnQyID0gIkZlZG9yYT1ib290Y2hhcnQyIE9wZW5zdXNlPWJvb3RjaGFydCIKK0RJU1RST19QTl9BTElBU19wbi1idHJmcy10b29scyA9ICJEZWJpYW49YnRyZnMtdG9vbHMgRmVkb3JhPWJ0cmZzLXByb2dzIgorRElTVFJPX1BOX0FMSUFTX3BuLWJ1aWxkLWFwcGxpYW5jZS1pbWFnZSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1idWlsZC1jb21wYXJlID0gIk9wZW5zdXNlPWJ1aWxkLWNvbXBhcmUgRmVkb3JhPWJ1aWxkLWNvbXBhcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tYnVpbGRlciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWJ1aWxkdG9vbHMtdGFyYmFsbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNhbGlicmF0ZXByb3RvID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy94b3JnL3Byb3RvL2NhbGlicmF0ZXByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWNkcnRvb2xzID0gIk9wZW5TVVNFPWNkcnRvb2xzIE9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWNoa2NvbmZpZy1hbHRlcm5hdGl2ZXMgPSAiTWFuZHJpdmE9Y2hrY29uZmlnIERlYmlhbj1jaGtjb25maWciCitESVNUUk9fUE5fQUxJQVNfcG4tY2xhd3MtcGx1Z2luLWd0a2h0bWwyLXZpZXdlciA9ICJGZWRvcmE9Y2xhd3MtbWFpbC1wbHVnaW5zIE9wZW5TdVNFPWNsYXdzLW1haWwtZXh0cmEtcGx1Z2lucyBEZWJpYW49Y2xhd3MtbWFpbC1leHRyYS1wbHVnaW5zIgorRElTVFJPX1BOX0FMSUFTX3BuLWNsYXdzLXBsdWdpbi1tYWlsZGlyID0gIkZlZG9yYT1jbGF3cy1tYWlsLXBsdWdpbnMgT3BlblN1U0U9Y2xhd3MtbWFpbC1leHRyYS1wbHVnaW5zIERlYmlhbj1jbGF3cy1tYWlsLWV4dHJhLXBsdWdpbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tY2xhd3MtcGx1Z2luLW1haWxtYm94ID0gIkZlZG9yYT1jbGF3cy1tYWlsLXBsdWdpbnMgT3BlblN1U0U9Y2xhd3MtbWFpbC1leHRyYS1wbHVnaW5zIERlYmlhbj1jbGF3cy1tYWlsLWV4dHJhLXBsdWdpbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tY2xhd3MtcGx1Z2luLXJzc3lsID0gIkZlZG9yYT1jbGF3cy1tYWlsLXBsdWdpbnMgT3BlblN1U0U9Y2xhd3MtbWFpbC1leHRyYS1wbHVnaW5zIERlYmlhbj1jbGF3cy1tYWlsLWV4dHJhLXBsdWdpbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tY2xpcGJvYXJkLW1hbmFnZXIgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1jbHV0dGVyID0gIkZlZG9yYT1jbHV0dGVyIE9wZW5TdXNlPWNsdXR0ZXIgVWJ1bnR1PWNsdXR0ZXItMS4wIE1hbmRyaXZhPWNsdXR0ZXIgRGViaWFuPWNsdXR0ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tY2x1dHRlci0xLjggPSAiRmVkb3JhPWNsdXR0ZXIgT3BlblN1c2U9Y2x1dHRlciBVYnVudHU9Y2x1dHRlci0xLjAgTWFuZHJpdmE9Y2x1dHRlciBEZWJpYW49Y2x1dHRlciIKK0RJU1RST19QTl9BTElBU19wbi1jbHV0dGVyLWdzdC0xLjAgPSAiRGViaWFuPWNsdXR0ZXItZ3N0IFVidW50dT1jbHV0dGVyLWdzdCBGZWRvcmE9Y2x1dHRlci1nc3QiCitESVNUUk9fUE5fQUxJQVNfcG4tY2x1dHRlci1nc3QtMS44ID0gIkZlZG9yYT1jbHV0dGVyLWdzdCBEZWJpYW49bGliY2x1dHRlci1nc3QiCitESVNUUk9fUE5fQUxJQVNfcG4tY2x1dHRlci1ndGstMS4wID0gIkRlYmlhbj1jbHV0dGVyLWd0ayBVYnVudHU9Y2x1dHRlci1ndGsgRmVkb3JhPWNsdXR0ZXItZ3RrIgorRElTVFJPX1BOX0FMSUFTX3BuLWNsdXR0ZXItZ3RrLTEuOCA9ICJGZWRvcmE9Y2x1dHRlci1ndGsgT3BlblN1U0U9Y2x1dHRlci1ndGsgVWJ1bnR1PWNsdXR0ZXItZ3RrLTAuMTAgTWFuZHJpdmE9Y2x1dHRlci1ndGsgRGViaWFuPWNsdXR0ZXItZ3RrIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvZ2wtMS4wID0gIkRlYmlhbj1jb2dsIFVidW50dT1jb2dsIEZlZG9yYT1jb2dsIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvZ2wgPSAiRmVkb3JhPWNvZ2wgT3BlblN1c2U9Y29nbCBVYnVudHU9Y29nbCBNYW5kcml2YT1jb2dsIERlYmlhbj1jb2dsIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvbXBvc2l0ZXByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWNvbXBvc2l0ZXByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvbm5tYW4gPSAiTWVlZ289Y29ubm1hbiIKK0RJU1RST19QTl9BTElBU19wbi1jb25ubWFuLWNvbmYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb25ubWFuLWdub21lID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvbnNvbGUtdG9vbHMgPSAiRGViaWFuPWNvbnNvbGUtdG9vbHMgVWJ1bnR1PWNvbnNvbGUtdG9vbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1iYXNlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1jbHV0dGVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1kaXJlY3RmYiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1rZXJuZWwtZGV2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1sc2IgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWxzYi1kZXYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWxzYi1xdDMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWxzYi1zZGsgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLW1pbmltYWwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLW1pbmltYWwtZGV2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtbWluaW1hbC1tdGR1dGlscyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtcnQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLXJ0LXNkayA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2Utc2F0byA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2Utc2F0by1kZXYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLXNhdG8tc2RrID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS10ZXN0bWFzdGVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS10ZXN0bWFzdGVyLWluaXRyYW1mcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2Utd2VzdG9uID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS14MTEgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jcm9zcy1sb2NhbGVkZWYgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tY3J5cHRvZGV2LWxpbnV4ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY3J5cHRvZGV2LW1vZHVsZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNyeXB0b2Rldi10ZXN0cyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWN3YXV0b21hY3JvcyA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vY3dhdXRvbWFjcm9zLmJlcmxpb3MuZGUvIgorRElTVFJPX1BOX0FMSUFTX3BuLWRhbWFnZXByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWRhbWFnZXByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWRiID0gIkRlYmlhbj1kYjUuMSBVYnVudHU9ZGI1LjEiCitESVNUUk9fUE5fQUxJQVNfcG4tZGJ1cy1wdGVzdCA9ICJGZWRvcmE9ZGJ1cyBVYnVudHU9ZGJ1cyIKK0RJU1RST19QTl9BTElBU19wbi1kYnVzLXRlc3QgPSAiRmVkb3JhPWRidXMgVWJ1bnR1PWRidXMiCitESVNUUk9fUE5fQUxJQVNfcG4tZGJ1cy13YWl0ID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tZGVwbW9kd3JhcHBlci1jcm9zcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWRpcmVjdGZiLWV4YW1wbGVzID0gIkRlYmlhbj1kaXJlY3RmYiBGZWRvcmE9ZGlyZWN0ZmIiCitESVNUUk9fUE5fQUxJQVNfcG4tZGlzdGNjID0gIkRlYmlhbj1kaXN0Y2MgRmVkb3JhPWRpc3RjYyIKK0RJU1RST19QTl9BTElBU19wbi1kaXN0Y2MtY29uZmlnID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tZG14cHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tZG14cHJvdG8gVWJ1bnR1PXgxMXByb3RvLWRteCBEZWJpYW49eDExcHJvdG8tZG14IgorRElTVFJPX1BOX0FMSUFTX3BuLWRvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMgPSAiRmVkb3JhPWRvY2Jvb2stc3R5bGUtZHNzc2wgVWJ1bnR1PWRvY2Jvb2stZHNzc2wiCitESVNUUk9fUE5fQUxJQVNfcG4tZG9jYm9vay1zZ21sLWR0ZC0zLjEgPSAiRmVkb3JhPWRvY2Jvb2stZHRkcyBNYW5kcml2YT1kb2Nib29rLWR0ZDMxLXNnbWwiCitESVNUUk9fUE5fQUxJQVNfcG4tZG9jYm9vay1zZ21sLWR0ZC00LjEgPSAiRmVkb3JhPWRvY2Jvb2stZHRkcyBNYW5kcml2YT1kb2Nib29rLWR0ZDQxLXNnbWwiCitESVNUUk9fUE5fQUxJQVNfcG4tZG9jYm9vay1zZ21sLWR0ZC00LjUgPSAiRmVkb3JhPWRvY2Jvb2stZHRkcyBNYW5kcml2YT1kb2Nib29rLWR0ZDQyLXNnbWwiCitESVNUUk9fUE5fQUxJQVNfcG4tZG9jYm9vay14bWwtZHRkNCA9ICJVYnVudHU9ZG9jYm9vay14bWwgRmVkb3JhPWRvY2Jvb2stZHRkcyIKK0RJU1RST19QTl9BTElBU19wbi1kb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSA9ICJVYnVudHU9ZG9jYm9vay14bWwgRmVkb3JhPWRvY2Jvb2stZHRkcyIKK0RJU1RST19QTl9BTElBU19wbi1kb2Nib29rLXhzbC1zdHlsZXNoZWV0cyA9ICJGZWRvcmE9ZG9jYm9vay14c2wtc3R5bGVzaGVldHMgT3BlbnN1c2U9ZG9jYm9vay14c2wtc3R5bGVzaGVldHMiCitESVNUUk9fUE5fQUxJQVNfcG4tZHJpMnByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWRyaTJwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1kcmkzcHJvdG8gPSAiRmVkb3JhPWRyaTNwcm90byBPcGVuc3VzZT1kcmkzcHJvdG8tZGV2ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tZHJvcGJlYXIgPSAiRGViaWFuPWRyb3BiZWFyIFVidW50dT1kcm9wYmVhciIKK0RJU1RST19QTl9BTElBU19wbi1kdGMgPSAiRmVkb3JhPWR0YyBVYnVudHU9ZHRjIgorRElTVFJPX1BOX0FMSUFTX3BuLWVkcy10b29scyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWVlZS1hY3BpLXNjcmlwdHMgPSAiRGViaWFuPWVlZXBjLWFjcGktc2NyaXB0cyBVYnVudHU9ZWVlcGMtYWNwaS1zY3JpcHRzIgorRElTVFJPX1BOX0FMSUFTX3BuLWVnbGliYyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWVnbGliYy1pbml0aWFsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZWdsaWJjLWxvY2FsZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWVnbGliYy1tdHJhY2UgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1lZ2xpYmMtc2NyaXB0cyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWVnbGluZm8tZmIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1lZ2xpbmZvLXgxMSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWVtZ2QtZHJpdmVyLWJpbiA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1lbmNvZGluZ3MgPSAiVWJ1bnR1PXhmb250cy1lbmNvZGluZ3MgTWFuZHJpdmE9eDExLWZvbnQtZW5jb2RpbmdzIERlYmlhbj14Zm9udHMtZW5jb2RpbmdzIgorRElTVFJPX1BOX0FMSUFTX3BuLWV2aWVleHQgPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tZXZpZWV4dCBEZWJpYW49eDExcHJvdG8tZXZpZSIKK0RJU1RST19QTl9BTElBU19wbi1maXhlc3Byb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWZpeGVzcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tZm9udC1hbGlhcyA9ICJGZWRvcmE9eG9yZy14MTEtZm9udHMtYmFzZSBNYW5kcml2YT14MTEtZm9udC1hbGlhcyBNZWVnbz14b3JnLXgxMS1mb250cyIKK0RJU1RST19QTl9BTElBU19wbi1mb250Y2FjaGVwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1mb250Y2FjaGVwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1mb250c3Byb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWZvbnRzcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tZm9udC11dGlsID0gIk1lZWdvPXhvcmcteDExLWZvbnQtdXRpbHMgRmVkb3JhPXhvcmcteDExLWZvbnQtdXRpbHMgVWJ1bnR1PXhmb250cy11dGlscyBNYW5kcml2YT14MTEtZm9udC11dGlsIERlYmlhbj14Zm9udHMtdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tZm9ybWZhY3RvciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWZvdG93YWxsID0gIkZlZG9yYT1mb3Rvd2FsbCBVYnVudHU9Zm90b3dhbGwiCitESVNUUk9fUE5fQUxJQVNfcG4tZnN0ZXN0cyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWdhaWwgPSAiRmVkb3JhPWdhaWwgVWJ1bnR1PWxpYmdhaWwtMy0wIgorRElTVFJPX1BOX0FMSUFTX3BuLWdha3UgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1nYWxhZ28tZGFlbW9uID0gIkRlYmlhbj1nYWxhZ28tZGFlbW9uIFVidW50dT1nYWxhZ28tZGFlbW9uIgorRElTVFJPX1BOX0FMSUFTX3BuLWdjYy1jcm9zcy1pbml0aWFsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjLWNyb3NzLWluaXRpYWwtaTU4NiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWdjYy1jcm9zc3Nkay1pbml0aWFsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjLWNyb3Nzc2RrLWluaXRpYWwteDg2XzY0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjbWFrZWRlcCA9ICJNYW5kcml2YT1nY2NtYWtlZGVwIFVidW50dT14dXRpbHMtZGV2IgorRElTVFJPX1BOX0FMSUFTX3BuLWdjYy1ydW50aW1lID0gIlVidW50dT1nY2MgRmVkb3JhPWdjYyIKK0RJU1RST19QTl9BTElBU19wbi1nY2Mtc2FuaXRpemVycyA9ICJVYnVudHU9Z2NjIEZlZG9yYT1nY2MiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjLXNvdXJjZSA9ICJVYnVudHU9Z2NjIEZlZG9yYT1nY2MiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NvbmYtZGJ1cyA9ICJNZWVnbz1HQ29uZi1kYnVzIgorRElTVFJPX1BOX0FMSUFTX3BuLWdkay1waXhidWYgPSAiRGViaWFuPWxpYmdkay1waXhidWYyLjAgRmVkb3JhPWdkay1waXhidWYiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2RrLXBpeGJ1Zi1jc291cmNlID0gIkRlYmlhbj1saWJnZGstcGl4YnVmMi4wLTAgRmVkb3JhPWdkay1waXhidWYyIgorRElTVFJPX1BOX0FMSUFTX3BuLWdldHRleHQtbWluaW1hbCA9ICJEZWJpYW49Z2V0dGV4dCBGZWRvcmE9Z2V0dGV4dCIKK0RJU1RST19QTl9BTElBU19wbi1nbGliLTIuMCA9ICJNZWVnbz1nbGliMiBGZWRvcmE9Z2xpYjIgT3BlblN1U0U9Z2xpYjIgVWJ1bnR1PWdsaWIyLjAgTWFuZHJpdmE9Z2xpYjIuMCBEZWJpYW49Z2xpYjIuMCIKK0RJU1RST19QTl9BTElBU19wbi1nbGliYy1sb2NhbGUgPSAiT3BlblN1U0U9Z2xpYmMtbG9jYWxlIEZlZG9yYT1nbGliYy1kZXZlbCIKK0RJU1RST19QTl9BTElBU19wbi1nbGliYy1tdHJhY2UgPSAiRmVkb3JhPWdsaWJjLXV0aWxzIFVidW50dT1saWJjLWRldi1iaW4iCitESVNUUk9fUE5fQUxJQVNfcG4tZ2xpYmMtc2NyaXB0cyA9ICJGZWRvcmE9Z2xpYmMgVWJ1bnR1PWxpYmMtYmluIgorRElTVFJPX1BOX0FMSUFTX3BuLWdscHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tZ2xwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1nbm9tZS1kZXNrdG9wLXRlc3RpbmcgPSAiRGViaWFuPWdub21lLWRlc2t0b3AtdGVzdGluZyBGZWRvcmE9Z25vbWUtZGVza3RvcC10ZXN0aW5nIgorRElTVFJPX1BOX0FMSUFTX3BuLWdudS1jb25maWcgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1ncHRmZGlzayA9ICJGZWRvcmE9Z2Rpc2sgVWJ1bnR1PWdkaXNrIgorRElTVFJPX1BOX0FMSUFTX3BuLWdydWItZWZpID0gIkRlYmlhbj1ncnViLWVmaSBGZWRvcmE9Z3J1YjItZWZpIgorRElTVFJPX1BOX0FMSUFTX3BuLWdydWItZWZpLWk1ODYgPSAiRGViaWFuPWdydWItZWZpIEZlZG9yYT1ncnViMi1lZmkiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3J1Yi1lZmkteDg2LTY0ID0gIkRlYmlhbj1ncnViLWVmaSBGZWRvcmE9Z3J1YjItZWZpIgorRElTVFJPX1BOX0FMSUFTX3BuLWdzdC1wbGF5ZXIgPSAiVWJ1bnR1PWdzdC1wbGF5ZXIgRmVkb3JhPWdzdHJlYW1lci1wbGF5ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3N0LXBsdWdpbi1ibHVldG9vdGggPSAiVWJ1bnR1PWxpYmdzdHJlYW1lci1wbHVnaW5zLWJhc2UgRmVkb3JhPWdzdHJlYW1lci1wbHVnaW5zLWJhc2UiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3N0cmVhbWVyMS4wID0gIkRlYmlhbj1nc3RyZWFtZXIxLjAgVWJ1bnR1PWdzdHJlYW1lcjEuMCIKK0RJU1RST19QTl9BTElBU19wbi1nc3RyZWFtZXIxLjAtbWV0YS1iYXNlID0gIk1lZWdvPWdzdHJlYW1lciBGZWRvcmE9Z3N0cmVhbWVyIE9wZW5TdVNFPWdzdHJlYW1lciBVYnVudHU9Z3N0cmVhbWVyMC4xMCIKK0RJU1RST19QTl9BTElBU19wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQgPSAiRGViaWFuPWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCBVYnVudHU9Z3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIgorRElTVFJPX1BOX0FMSUFTX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgPSAiRGViaWFuPWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgVWJ1bnR1PWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZCA9ICJEZWJpYW49Z3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZCBVYnVudHU9Z3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIgorRElTVFJPX1BOX0FMSUFTX3BuLWdzdHJlYW1lcjEuMC1ydHNwLXNlcnZlciA9ICJVYnVudHU9Z3N0cmVhbWVyMC4xMC1ydHNwIEZlZG9yYT1nc3RyZWFtZXItcnRzcCIKK0RJU1RST19QTl9BTElBU19wbi1ndGsrID0gIk1lZWdvPWd0azIgRmVkb3JhPWd0azIgT3BlblN1U0U9Z3RrMiBVYnVudHU9Z3RrKzIuMCBNYW5kcml2YT1ndGsrMi4wIERlYmlhbj1ndGsrMi4wIgorRElTVFJPX1BOX0FMSUFTX3BuLWd0ayszID0gIlVidW50dT1ndGsrMy4wIERlYmlhbj1ndGsrMy4wIEZlZG9yYT1ndGszIgorRElTVFJPX1BOX0FMSUFTX3BuLWd0ay1kb2Mtc3R1YiA9ICJGZWRvcmE9Z3RrLWRvYyBVYnVudHU9Z3RrLWRvYyIKK0RJU1RST19QTl9BTElBU19wbi1ndGstZW5naW5lcyA9ICJGZWRvcmE9Z3RrMi1lbmdpbmVzIE9wZW5TdVNFPWd0azItZW5naW5lcyBVYnVudHU9Z3RrMi1lbmdpbmVzIE1hbmRyaXZhPWd0ay1lbmdpbmVzMiBEZWJpYW49Z3RrMi1lbmdpbmVzIgorRElTVFJPX1BOX0FMSUFTX3BuLWd0ay1zYXRvLWVuZ2luZSA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWd0ay10aGVtZS10b3J0dXJlciA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vd2lraS5sYXB0b3Aub3JnL2dvL0dUS19mb3JfT0xQQyIKK0RJU1RST19QTl9BTElBU19wbi1ndGstaWNvbi11dGlscy1uYXRpdmUgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3VtbWlib290ID0gIkRlYmlhbj1ndW1taWJvb3QgRmVkb3JhPWd1bW1pYm9vdCIKK0RJU1RST19QTl9BTElBU19wbi1oZWxsby1tb2QgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1ob3N0YXAtY29uZiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWh3bGF0ZGV0ZWN0ID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWljZWNjLWNyZWF0ZS1lbnYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1pbml0LWlmdXBkb3duID0gIkRlYmlhbj1pZnVwZG93biBVYnVudHU9aWZ1cGRvd24iCitESVNUUk9fUE5fQUxJQVNfcG4taW5pdHJhbWZzLWJvb3QgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1pbml0cmFtZnMtZnJhbWV3b3JrID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4taW5pdHJhbWZzLWxpdmUtYm9vdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWluaXRyYW1mcy1saXZlLWluc3RhbGwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWluaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpLXRlc3RmcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWluaXRyYW1mcy1saXZlLWluc3RhbGwtdGVzdGZzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4taW5pdHNjcmlwdHMgPSAiRmVkb3JhPWluaXRzY3JpcHRzIE1hbmRyYXZpYT1pbml0c2NyaXB0cyIKK0RJU1RST19QTl9BTElBU19wbi1pbnB1dHByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWlucHV0cHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4taXByb3V0ZTIgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tanBlZyA9ICJPcGVuU3VTRT1saWJqcGVnIFVidW50dT1saWJqcGVnNjIiCitESVNUUk9fUE5fQUxJQVNfcG4ta2Jwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1rYnByb3RvIFVidW50dT14MTFwcm90by1rYi1kZXYgRGViaWFuPXgxMXByb3RvLWtiLWRldiIKK0RJU1RST19QTl9BTElBU19wbi1rY29uZmlnLWZyb250ZW5kcyA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1rZXJuZWwtZGV2c3JjID0gIkRlYmlhbj1saW51eC1iYXNlIFVidW50dT1saW51eCIKK0RJU1RST19QTl9BTElBU19wbi1rZXJuZWxzaGFyayA9ICJNYW5kcml2YT1rZXJuZWxzaGFyayBVYnVudHU9a2VybmVsc2hhcmsiCitESVNUUk9fUE5fQUxJQVNfcG4ta2Vybi10b29scy1uYXRpdmUgPSAiV2luZHJpdmVyIgorRElTVFJPX1BOX0FMSUFTX3BuLWtleW1hcHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1rZiA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1sYW1lID0gIkRlYmlhbj1sYW1lIFVidW50dT1sYW1lIgorRElTVFJPX1BOX0FMSUFTX3BuLWxhdGVuY3l0b3AgPSAiTWVlZ289bGF0ZW5jeXRvcCBGZWRvcmE9bGF0ZW5jeXRvcCBEZWJpYW49bGF0ZW5jeXRvcCBPcGVuU3VTRT1sYXRlbmN5dG9wIgorRElTVFJPX1BOX0FMSUFTX3BuLWxkY29uZmlnLW5hdGl2ZSA9ICJVYnVudHU9bGliYy1iaW4gRmVkb3JhPWdsaWJjIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmE1MiA9ICJNYW5kcml2YT1hNTJkZWMgRGViaWFuPWE1MmRlYyIKK0RJU1RST19QTl9BTElBU19wbi1saWJhY3BpID0gIlVidW50dT1saWJhY3BpIE1hbmRyaXZhPWxpYmFjcGkiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliYXRvbWljcy1vcHMgPSAiTWVlZ289bGliYXRvbWljLW9wcyBEZWJpYW49bGliYXRvbWljLW9wcyBVYnVudHU9bGliYXRvbWljLW9wcyBPcGVuU3VTRT1saWJhdG9taWMtb3BzIE1hbmRyaXZhPWxpYmF0b21pYy1vcHMiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliY2dyb3VwID0gIlVidW50dT1saWJjZ3JvdXAxIERlYmlhbj1saWJjZ3JvdXAxIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmNoZWNrID0gIlVidW50dT1jaGVjayBGZWRvcmE9Y2hlY2sgT3BlblN1U0U9Y2hlY2siCitESVNUUk9fUE5fQUxJQVNfcG4tbGliY2xhc3MtaXNhLXBlcmwgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZHJtLXBvdWxzYm8gPSAiRGViaWFuPWxpYmRybS1pbnRlbDEgVWJ1bnR1PWxpYmRybS1pbnRlbDEiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZHVtcHZhbHVlLXBlcmwgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZW52LXBlcmwgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZXJhdGlvbi1mb250cyA9ICJVYnVudHU9Zm9udHMtbGliZXJhdGlvbiBGZWRvcmE9bGliZXJhdGlvbi1mb250cy10dGYiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZmFrZWtleSA9ICJNZWVnbzEuMD1saWJmYWtla2V5IERlYmlhbj1saWJmYWtla2V5IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmZpbGUtY2hlY2t0cmVlLXBlcmwgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZm0tZXh0cmEgPSAiT3BlbnN1c2U9bGliZm0tZXh0cmE0IFVidW50dT1saWJmbS1leHRyYTQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZnJpYmlkaSA9ICJPcGVuU3VTRT1mcmliaWRpIFVidW50dT1mcmliaWRpIE1hbmRyaXZhPWZyaWJpZGkgRGViaWFuPWZyaWJpZGkiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZ2NjID0gIkRlYmlhbj1saWJnY2M0IFVidW50dT1saWJnY2MxIE9wZW5TdVNFPWxpYmdjYzQ2IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmdkYnVzID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmdsYWRlID0gIk1lZWdvPWxpYmdsYWRlMiBGZWRvcmE9bGliZ2xhZGUyIE9wZW5TdVNFPWxpYmdsYWRlMiBVYnVudHU9bGliZ2xhZGUyIE1hbmRyaXZhPWxpYmdsYWRlMi4wIERlYmlhbj1saWJnbGFkZTIiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZ2x1ID0gIkRlYmlhbj1saWJnbHUgVWJ1bnR1PWxpYmdsdSBPcGVuc3VzZT1tZXNhLWxpYmdsdSIKK0RJU1RST19QTl9BTElBU19wbi1saWJnc21kID0gIkZlZG9yYT1nc20gVWJ1bnR1PWxpYmdzbSBEZWJpYW49bGliZ3NtIE9wZW5zdXNlPWxpYmdzbSIKK0RJU1RST19QTl9BTElBU19wbi1saWJndGtzdHlsdXMgPSAiRGViaWFuPWxpYmd0a3N0eWx1cyBVYnVudHU9bGliZ3Rrc3R5bHVzIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmd1ID0gIk9wZW5TdVNFPWdsdSBPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1saWJpMThuLWNvbGxhdGUtcGVybCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1saWJpY2FsID0gIlVidW50dT1saWJpY2FsIEZlZG9yYT1saWJpY2FsIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmljb252ID0gIkZlZG9yYT1taW5ndy1saWJpY29udiBPcGVuc3VzZT1jcm9zcy1taW5ndy1saWJpY29udiIKK0RJU1RST19QTl9BTElBU19wbi1saWJpbnB1dCA9ICJVYnVudHU9bGliaW5wdXQwIEZlZG9yYT1saWJpbnB1dDAiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlianNvbiA9ICJVYnVudHU9bGlianNvbjAtZGV2IERlYmlhbj1saWJqc29uMC1kZXYiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlia3NiYSA9ICJGZWRvcmE9bGlia3NiYSBEZWJpYW49bGlia3NiYTggVWJ1bnR1PWxpYmtzYmEiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlibGJ4dXRpbCA9ICJNYW5kcml2YT1saWJsYnh1dGlsIE9wZW5TdXNlPXhvcmcteDExLWRldmVsIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYm1hdGNoYm94ID0gIlVidW50dT1saWJtYXRjaGJveCBGZWRvcmE9bGlibWF0Y2hib3giCitESVNUUk9fUE5fQUxJQVNfcG4tbGlibXBjID0gIkZlZG9yYT1saWJtcGMgT3BlblN1c2U9bGlibXBjMiIKK0RJU1RST19QTl9BTElBU19wbi1saWJuZXd0ID0gIkRlYmlhbj1saWJuZXd0MC41MiBGZWRvcmE9bmV3dCIKK0RJU1RST19QTl9BTElBU19wbi1saWJuZXd0LXB5dGhvbiA9ICJVYnVudHU9cHl0aG9uLW5ld3QgRmVkb3JhPW5ld3QtcHl0aG9uIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYm5zcy1tZG5zID0gIk1lZWdvPW5zcy1tZG5zIE9wZW5TdVNFPW5zcy1tZG5zIFVidW50dT1uc3MtbWRucyBNYW5kcml2YT1uc3NfbWRucyBEZWJpYW49bnNzLW1kbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlib214aWwgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL29teGlsLnNvdXJjZWZvcmdlLm5ldC8iCitESVNUUk9fUE5fQUxJQVNfcG4tbGlib3dsID0gIkRlYmlhbj1vd2wgT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1saWJvd2wtYXYgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1saWJwYW0gPSAiTWVlZ289cGFtIEZlZG9yYT1wYW0gT3BlblN1U0U9cGFtIFVidW50dT1wYW0gTWFuZHJpdmE9cGFtIERlYmlhbj1wYW0iCitESVNUUk9fUE5fQUxJQVNfcG4tbGlicGNyZSA9ICJNYW5kcml2YT1saWJwY3JlMCBGZWRvcmE9cGNyZSIKK0RJU1RST19QTl9BTElBU19wbi1saWJwbmcxMiA9ICJEZWJpYW49bGlicG5nMTItMCBGZWRvcmE9bGlicG5nIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnBvZC1wbGFpbmVyLXBlcmwgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlic2FtcGxlcmF0ZTAgPSAiTWVlZ289bGlic2FtcGxlcmF0ZSBGZWRvcmE9bGlic2FtcGxlcmF0ZSBPcGVuU3VTRT1saWJzYW1wbGVyYXRlIFVidW50dT1saWJzYW1wbGVyYXRlIE1hbmRyaXZhPWxpYnNhbXBsZXJhdGUgRGViaWFuPWxpYnNhbXBsZXJhdGUiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlic2RsID0gIkZlZG9yYT1TREwgT3BlbnN1c2U9U0RMIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnNkbDIgPSAiRmVkb3JhPXNkbDIgT3BlbnN1c2U9bGlic2RsMiBVYnVudHU9bGlic2RsMiBEZWJpYW49bGlic2RsMiIKK0RJU1RST19QTl9BTElBU19wbi1saWJzbmRmaWxlMSA9ICJNZWVnbz1saWJzbmRmaWxlIEZlZG9yYT1saWJzbmRmaWxlIE9wZW5TdVNFPWxpYnNuZGZpbGUgVWJ1bnR1PWxpYnNuZGZpbGUgTWFuZHJpdmE9bGlic25kZmlsZSBEZWJpYW49bGlic25kZmlsZSIKK0RJU1RST19QTl9BTElBU19wbi1saWJzb3VwLTIuNCA9ICJNZWVnbz1saWJzb3VwIEZlZG9yYT1saWJzb3VwIE9wZW5TdVNFPWxpYnNvdXAgVWJ1bnR1PWxpYnNvdXAyLjQgTWFuZHJpdmE9bGlic291cCBEZWJpYW49bGlic291cDIuNCIKK0RJU1RST19QTl9BTElBU19wbi1saWJzeW5jID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnRlbGVwYXRoeSA9ICJEZWJpYW49bGlidGVsZXBhdGh5MiBVYnVudHU9bGlidGVsZXBhdGh5MiIKK0RJU1RST19QTl9BTElBU19wbi1saWJ0aW1lZGF0ZS1wZXJsID0gIkRlYmlhbj1saWJ0aW1lZGF0ZS1wZXJsIFVidW50dT1saWJ0aW1lZGF0ZS1wZXJsIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnVyY3UgPSAiRmVkb3JhPXVzZXJzcGFjZS1yY3UgVWJ1bnR1PWxpYnVyY3UwIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnVzYjEgPSAiRGViaWFuPWxpYnVzYi0xLjAtMCBGZWRvcmE9bGlidXNiMSIKK0RJU1RST19QTl9BTElBU19wbi1saWJ1c2ItY29tcGF0ID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYngxMSA9ICJEZWJpYW49bGlieDExLTYgRmVkb3JhPWxpYlgxMSBVYnVudHU9bGlieDExLTYgT3BlblN1U0U9eG9yZy14MTEtbGliWDExIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYngxMS1kaWV0ID0gIkRlYmlhbj1saWJ4MTEtNiBGZWRvcmE9bGliWDExIFVidW50dT1saWJ4MTEtNiBPcGVuU3VTRT14b3JnLXgxMS1saWJYMTEiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieGNhbGlicmF0ZSA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcveG9yZy9saWIvbGliWENhbGlicmF0ZS8iCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieGZvbnRjYWNoZSA9ICJNYW5kcml2YT1saWJ4Zm9udGNhY2hlIERlYmlhbj1saWJ4Zm9udGNhY2hlIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnhmdCA9ICJNYW5kcml2YT1saWJ4ZnQgRGViaWFuPWxpYnhmdDIgVWJ1bnR1PWxpYnhmdDIiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieGkgPSAiVWJ1bnR1PWxpYnhpIEZlZG9yYT1saWJYaSIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4a2Jjb21tb24gPSAiRmVkb3JhPWxpYnhrYmNvbW1vbiBEZWJpYW49bGlieGtiY29tbW9uIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnhwcmludGFwcHV0aWwgPSAiRGViaWFuPWxpYnhwcmludGFwcHV0aWwgVWJ1bnR1PWxpYnhwcmludGFwcHV0aWwxIE1hbmRyaXZhPWxpYnhwcmludGFwcHV0aWwiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieHNjcm5zYXZlciA9ICJGZWRvcmE9bGliWFNjcm5TYXZlciBVYnVudHU9bGlieHNzMSBNYW5kcml2YT1saWJ4c2NybnNhdmVyIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnhzZXR0aW5ncy1jbGllbnQgPSAiRGViaWFuPWxpYnhzZXR0aW5ncy1jbGllbnQwIFVidW50dT1saWJ4c2V0dGluZ3MtY2xpZW50MCBNYW5kcml2YT1saWJYc2V0dGluZ3MtY2xpZW50MCIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4dHJhcCA9ICJEZWJpYW49bGlieHRyYXA2IEZlZG9yYT1saWJYVHJhcCIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4eGY4Nm1pc2MgPSAiTWFuZHJpdmE9bGlieHhmODZtaXNjIEZlZG9yYT1saWJYeGY4Nm1pc2MiCitESVNUUk9fUE5fQUxJQVNfcG4tbGludXgtZHVtbXkgPSAiSW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tbGludXgtZmlybXdhcmUgPSAiRmVkb3JhPWxpbnV4LWZpcm13YXJlIFVidW50dT1saW51eC1maXJtd2FyZSIKK0RJU1RST19QTl9BTElBU19wbi1saW51eC1saWJjLWhlYWRlcnMgPSAiRGViaWFuPWxpbnV4LWtlcm5lbC1oZWFkZXJzIFVidW50dT1saW51eC1rZXJuZWwtaGVhZGVycyIKK0RJU1RST19QTl9BTElBU19wbi1saW51eC1saWJjLWhlYWRlcnMteW9jdG8gPSAiRGViaWFuPWxpbnV4LWtlcm5lbC1oZWFkZXJzIFVidW50dT1saW51eC1rZXJuZWwtaGVhZGVycyIKK0RJU1RST19QTl9BTElBU19wbi1saW51eC15b2N0byA9ICJEZWJpYW49bGludXgtYmFzZSBVYnVudHU9bGludXgiCitESVNUUk9fUE5fQUxJQVNfcG4tbGludXgteW9jdG8tcnQgPSAiRGViaWFuPWxpbnV4LWJhc2UgVWJ1bnR1PWxpbnV4IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpbnV4LXlvY3RvLXRpbnkgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbHNiaW5pdHNjcmlwdHMgPSAiV2luZHJpdmVyIgorRElTVFJPX1BOX0FMSUFTX3BuLWxzYnNldHVwID0gIldpbmRyaXZlciIKK0RJU1RST19QTl9BTElBU19wbi1sc2J0ZXN0ID0gIldpbmRyaXZlciIKK0RJU1RST19QTl9BTElBU19wbi1sdHAgPSAiTWFuZHJpdmE9bHRwIFVidW50dT1sdHAiCitESVNUUk9fUE5fQUxJQVNfcG4tbHR0bmctbW9kdWxlcyA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vbHR0bmcub3JnLyIKK0RJU1RST19QTl9BTElBU19wbi1sdHRuZy10b29scyA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vbHR0bmcub3JnLyIKK0RJU1RST19QTl9BTElBU19wbi1sdHRuZy11c3QgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL2x0dG5nLm9yZy8iCitESVNUUk9fUE5fQUxJQVNfcG4tbHo0ID0gIkRlYmlhbj1sejQgRmVkb3JhPWx6NCIKK0RJU1RST19QTl9BTElBU19wbi1sem8gPSAiRGViaWFuPWxpYmx6byBVYnVudHU9bGlibHpvIEZlZG9yYT1senAiCitESVNUUk9fUE5fQUxJQVNfcG4tbWFpbHggPSAiRGViaWFuPWJzZC1tYWlseCBVYnVudHU9YnNkLW1haWx4IgorRElTVFJPX1BOX0FMSUFTX3BuLW1ha2VkZXBlbmQgPSAiTWFuZHJpdmE9bWFrZWRlcGVuZCBVYnVudHU9eHV0aWxzLWRldiIKK0RJU1RST19QTl9BTElBU19wbi1tYWtlZGV2cyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LWNvbmZpZy1ndGsgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC1kZXNrdG9wID0gIk1hbmRyaXZhPW1hdGNoYm94LWRlc2t0b3AgVWJ1bnR1PW1hdGNoYm94LWRlc2t0b3AiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtZGVza3RvcC1zYXRvID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gta2V5Ym9hcmQgPSAiRGViaWFuPW1hdGNoYm94LWtleWJvYXJkIEZlZG9yYT1tYXRjaGJveC1rZXlib2FyZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC1wYW5lbC0yID0gIkRlYmlhbj1tYXRjaGJveC1wYW5lbCBNYW5kcml2YT1tYXRjaGJveC1wYW5lbCBVYnVudHU9bWF0Y2hib3gtcGFuZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtc2Vzc2lvbiA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXNlc3Npb24tc2F0byA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXRlcm1pbmFsID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtdGhlbWUtc2F0byA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXRoZW1lLXNhdG8tMiA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXRoZW1lcy1leHRyYSA9ICJVYnVudHU9bWF0Y2hib3gtdGhlbWVzLWV4dHJhIE1hbmRyaXZhPW1hdGNoYm94LXRoZW1lcy1leHRyYSIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC10aGVtZXMtZ3RrID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtd20gPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC13bS0yID0gIk1hbmRyaXZhPW1hdGNoYm94LXdpbmRvdy1tYW5hZ2VyIERlYmlhbj1tYXRjaGJveC13aW5kb3ctbWFuYWdlciIKK0RJU1RST19QTl9BTElBU19wbi1tZW51LWNhY2hlID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLW1lc2EgPSAiRmVkb3JhPW1lc2EgVWJ1bnR1PWxpYmdsMS1tZXNhLWRyaSIKK0RJU1RST19QTl9BTElBU19wbi1tZXNhLWdsID0gIkZlZG9yYT1tZXNhIFVidW50dT1saWJnbDEtbWVzYS1kcmkiCitESVNUUk9fUE5fQUxJQVNfcG4tbWVzYS1nbHNsID0gIkZlZG9yYT1tZXNhIFVidW50dT1saWJnbDEtbWVzYS1kcmkiCitESVNUUk9fUE5fQUxJQVNfcG4tbWV0YS1lbnZpcm9ubWVudC1leHRzZGstcWVtdXg4NiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtZW52aXJvbm1lbnQtaTU4NiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtZW52aXJvbm1lbnQtcWVtdXg4NiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtZW52aXJvbm1lbnQtcWVtdXg4Ni02NCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtaWRlLXN1cHBvcnQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1tZXRhLXRvb2xjaGFpbiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtdG9vbGNoYWluLXF0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWV0YS10b29sY2hhaW4tcXRlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWluaS14LXNlc3Npb24gPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWtlbGZpbWFnZSA9ICJVYnVudHU9bWtlbGZpbWFnZSBGZWRvcmE9bWtlbGZpbWFnZSIKK0RJU1RST19QTl9BTElBU19wbi1ta2ZvbnRkaXIgPSAiTWFuZHJpdmE9bWtmb250ZGlyIFVidW50dT14Zm9udHMtdXRpbHMgRmVkb3JhPXhvcmcteDExLWZvbnQtdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tbWtmb250c2NhbGUgPSAiTWFuZHJpdmE9bWtmb250c2NhbGUgVWJ1bnR1PXhmb250cy11dGlscyBGZWRvcmE9eG9yZy14MTEtZm9udC11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1ta3RlbXAgPSAiTWFuZHJpdmE9bWt0ZW1wIEZlZG9yYT1ta3RlbXAiCitESVNUUk9fUE5fQUxJQVNfcG4tbW1jLXV0aWxzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbW9ibGluLXByb3RvID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbW9kdXRpbHMtY29sbGF0ZXJhbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1vZHV0aWxzLWluaXRzY3JpcHRzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbXN5bmN0b29sID0gIk9wZW5TdXNlPW1zeW5jdG9vbCBNYW5kcml2YT1tc3luY3Rvb2wiCitESVNUUk9fUE5fQUxJQVNfcG4tbXRkLXV0aWxzID0gIkRlYmlhbj1tdGQtdXRpbHMgVWJ1bnR1PW10ZC11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1teC0xLjAgPSAiVWJ1bnR1PW14IERlYmlhbj1teCBGZWRvcmE9bXgiCitESVNUUk9fUE5fQUxJQVNfcG4tbjQ1MC1hdWRpbyA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1uZWFyZCA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1uZW9uID0gIkZlZG9yYT1uZW9uIE9wZW5zdXNlPW5lb24iCitESVNUUk9fUE5fQUxJQVNfcG4tbmV0d29yay1zdXNwZW5kLXNjcmlwdHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1uZnMtZXhwb3J0LXJvb3QgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1ucHRoID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLW5zcy1teWhvc3RuYW1lID0gIk1lZWdvPW5zcy1tZG5zIE9wZW5TdVNFPW5zcy1tZG5zIFVidW50dT1uc3MtbWRucyBNYW5kcml2YT1uc3NfbWRucyBEZWJpYW49bnNzLW1kbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tb2NmLWxpbnV4ID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLW9mb25vID0gIkRlYmlhbj1vZm9ubyBVYnVudHU9b2Zvbm8iCitESVNUUk9fUE5fQUxJQVNfcG4tb2gtcHV6emxlcyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW9wa2cgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL3N2bi5vcGVubW9rby5vcmcvdHJ1bmsvc3JjL3RhciIKK0RJU1RST19QTl9BTElBU19wbi1vcGtnLWFyY2gtY29uZmlnID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tb3BrZy1jb2xsYXRlcmFsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tb3BrZy1rZXlyaW5ncyA9ICJPU1BEVCB1cHN0cmVhbT1naXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9vcGtnLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLW9wa2ctbm9ncGcgPSAiT1NQRFQgdXBzdHJlYW09Z2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3BrZy11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1vcGtnLXV0aWxzID0gIk9TUERUIHVwc3RyZWFtPWdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wa2ctdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tb3Byb2ZpbGUgPSAiRGViaWFuPW9wcm9maWxlIEZlZG9yYT1vcHJvZmlsZSIKK0RJU1RST19QTl9BTElBU19wbi1vcHJvZmlsZXVpID0gIkZlZG9yYT1vcHJvZmlsZXVpIFVidW50dT1vcHJvZmlsZS1ndWkgRGViaWFuPW9wcm9maWxlLWd1aSIKK0RJU1RST19QTl9BTElBU19wbi1vcHJvZmlsZXVpLXNlcnZlciA9ICJGZWRvcmE9b3Byb2ZpbGV1aSBVYnVudHU9b3Byb2ZpbGUtZ3VpIERlYmlhbj1vcHJvZmlsZS1ndWkiCitESVNUUk9fUE5fQUxJQVNfcG4tb3MtcmVsZWFzZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW93bC12aWRlbyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1iYXNlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1ib290ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtYnVpbGRlc3NlbnRpYWwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtZGV2aWNlLWRldmVsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtbHNiID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtbmZzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtcXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1xdDRlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtc2RrID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtc3NoLWRyb3BiZWFyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2ggPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS10b29scyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXRlc3RhcHBzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUteDExID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUteDExLWJhc2UgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEtbWluaSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4taTU4NiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi1xZW11eDg2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLXFlbXV4ODYtNjQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtcXQ0ZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLWhvc3QgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtcXRlLXRvb2xjaGFpbi10YXJnZXQgPSAiSW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi1ob3N0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi10YXJnZXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlLWluZGV4ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGF0Y2hlbGYgPSAiT3BlbnN1c2U9cGF0Y2hlbGYgRmVkb3JhPXBhdGNoZWxmIgorRElTVFJPX1BOX0FMSUFTX3BuLXBlcmYgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tcGlnbGl0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGtnY29uZmlnID0gIlVidW50dT1wa2ctY29uZmlnIEZlZG9yYT1wa2djb25maWciCitESVNUUk9fUE5fQUxJQVNfcG4tcG9pbnRlcmNhbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBvaW50ZXJjYWwteGlucHV0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcG9reS1mZWVkLWNvbmZpZy1vcGtnID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcG9uZy1jbG9jayA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXBvcnRtYXAgPSAiRGViaWFuPXJwY2JpbmQgRmVkb3JhPXJwY2JpbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tcG9zdGluc3QtaW50ZXJjZXB0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcG93ZXJ0b3AgPSAiTWVlZ289cG93ZXJ0b3AgRmVkb3JhPXBvd2VydG9wIERlYmlhbj1wb3dlcnRvcCBPcGVuU3VTRT1wb3dlcnRvcCBNYW5kcml2YT1wb3dlcnRvcCIKK0RJU1RST19QTl9BTElBU19wbi1wcHAtZGlhbGluID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcHJlc2VudHByb3RvID0gIkRlYmlhbj14MTFwcm90by1wcmVzZW50LWRldiBGZWRvcmE9eG9yZy14MTEtcHJvdG8tZGV2ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tcHJpbnRwcm90byA9ICJEZWJpYW49eDExcHJvdG8tcHJpbnQtZGV2IFVidW50dT14MTFwcm90by1wcmludC1kZXYgTWFuZHJpdmE9eDExLXByb3RvLWRldmVsIgorRElTVFJPX1BOX0FMSUFTX3BuLXBzZXVkbyA9ICJXaW5kcml2ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tcHNwbGFzaCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXB0ZXN0LXJ1bm5lciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXB1enpsZXMgPSAiRGViaWFuPXNndC1wdXp6bGVzIEZlZG9yYT1wdXp6bGVzIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbjMgPSAiRmVkb3JhPXB5dGhvbjMgRGViaWFuPXB5dGhvbjMuMiIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24zLWRpc3RyaWJ1dGUgPSAiRGViaWFuPXB5dGhvbjMtc2V0dXB0b29scyBGZWRvcmE9cHl0aG9uMy1zZXR1cHRvb2xzIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1aU0kgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tYXJncGFyc2UgPSAiRmVkb3JhPXB5dGhvbi1hcmdwYXJzZSBPcGVuU3VTRT1weXRob24tYXJncGFyc2UiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLWRidXMgPSAiVWJ1bnR1PXB5dGhvbi1kYnVzIERlYmlhbj1weXRob24tZGJ1cyBNYW5kcml2YT1weXRob24tZGJ1cyIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tZGlzdHJpYnV0ZSA9ICJPcGVuc3VzZT1weXRob24tc2V0dXB0b29scyBGZWRvcmE9cHl0aG9uLXNldHVwdG9vbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLWdpdCA9ICJEZWJpYW49cHl0aG9uLWdpdCBGZWRvcmE9R2l0UHl0aG9uIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1tYWtvID0gIkZlZG9yYT1weXRob24tbWFrbyBPcGVuc3VzZT1weXRob24tTWFrbyIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tcHljYWlybyA9ICJNZWVnbz1weWNhaXJvIEZlZG9yYT1weWNhaXJvIFVidW50dT1weWNhaXJvIERlYmlhbj1weWNhaXJvIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1weWN1cmwgPSAiRGViaWFuPXB5dGhvbi1weWN1cmwgVWJ1bnR1PXB5dGhvbi1weWN1cmwiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLXB5Z29iamVjdCA9ICJNZWVnbz1weWdvYmplY3QyIEZlZG9yYT1weWdvYmplY3QyIFVidW50dT1weWdvYmplY3QgRGViaWFuPXB5Z29iamVjdCIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tcHlndGsgPSAiRGViaWFuPXB5dGhvbi1ndGsyIEZlZG9yYT1weWd0azIgT3BlblN1U0U9cHl0aG9uLWd0ayIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tcHlyZXggPSAiTWFuZHJpdmE9cHl0aG9uLXB5cmV4IFVidW50dT1weXRob24tcHlyZXgiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLXNjb25zID0gIkZlZG9yYT1zY29ucyBPcGVuU3VTRT1zY29ucyBVYnVudHU9c2NvbnMgTWFuZHJpdmE9c2NvbnMgRGViaWFuPXNjb25zIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1zZXR1cHRvb2xzID0gIk1hbmRyaXZhPXB5dGhvbi1zZXR1cCBPcGVuU3VTRT1weXRob24tc2V0dXAtZ2l0IgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1zbWFydHBtID0gIkRlYmlhbj1zbWFydCBPcGVuU3VTRT1zbWFydCIKK0RJU1RST19QTl9BTElBU19wbi1xZW11LWNvbmZpZyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXFlbXVnbCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXFlbXUtaGVscGVyID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tcWVtdXdyYXBwZXItY3Jvc3MgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1xbW1wID0gIkZlZG9yYT1xbW1wIERlYmlhbj1xbW1wIgorRElTVFJPX1BOX0FMSUFTX3BuLXF0NCA9ICJNYW5kcml2YT1saWJxdDQtZGV2ZWwgVWJ1bnR1PWxpYnF0NC1kZXYiCitESVNUUk9fUE5fQUxJQVNfcG4tcXQ0ZS1kZW1vLWltYWdlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcXQ0LWVtYmVkZGVkID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLXF0NC1ncmFwaGljcy1zeXN0ZW0gPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1xdDQtdG9vbHMgPSAiTWFuZHJpdmE9bGlicXQ0LWRldmVsIFVidW50dT1saWJxdDQtZGV2IgorRElTVFJPX1BOX0FMSUFTX3BuLXF0NC14MTEtZnJlZSA9ICJVYnVudHU9cXQteDExLWZyZWUgRGViaWFuPXF0LXgxMS1mcmVlIgorRElTVFJPX1BOX0FMSUFTX3BuLXF0LWRlbW8taW5pdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXF1aWNreSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1yYW5kcnByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXJhbmRycHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tcmVhZGxpbmUgPSAiRmVkb3JhPXJlYWRsaW5lIERlYmlhbj1yZWFkbGluZS1jb21tb24iCitESVNUUk9fUE5fQUxJQVNfcG4tcmVjb3JkcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tcmVjb3JkcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tcmVtYWtlID0gIk1hbmRyaXZhPXJlbWFrZSBEZWJpYW49cmVtYWtlIgorRElTVFJPX1BOX0FMSUFTX3BuLXJlbmRlcnByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXJlbmRlcnByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXJlc291cmNlcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tcmVzb3VyY2Vwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1yZ2IgPSAiRmVkb3JhPXhvcmctWDExLXNlcnZlci11dGlscyBEZWJpYW49eDExLXhzZXJ2ZXItdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tcnBtcmVzb2x2ZSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1ydC10ZXN0cyA9ICJEZWJpYW49cnQtdGVzdHMgVWJ1bnR1PXJ0LXRlc3RzIgorRElTVFJPX1BOX0FMSUFTX3BuLXJ1bi1wb3N0aW5zdHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1zYXRvLWljb24tdGhlbWUgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1zYXRvLXNjcmVlbnNob3QgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1zYmMgPSAiRmVkb3JhPXNiYyBEZWJpYW49bGlic2JjMSIKK0RJU1RST19QTl9BTElBU19wbi1zY3JlZW5zaG90ID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tc2NybnNhdmVycHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tc2NybnNhdmVycHJvdG8gVWJ1bnR1PXgxMXByb3RvLXNjcm5zYXZlci1kZXYgRGViaWFuPXgxMXByb3RvLXNjcm5zYXZlci1kZXYiCitESVNUUk9fUE5fQUxJQVNfcG4tc2V0dGluZ3MtZGFlbW9uID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tc2dtbC1jb21tb24gPSAiT3BlblN1U0U9c2dtbC1jb21tb24gRmVkb3JhPXNnbWwtY29tbW9uIgorRElTVFJPX1BOX0FMSUFTX3BuLXNnbWxzcGwgPSAiRGViaWFuPXNnbWxzcGwgVWJ1bnR1PXNnbWxzcGwiCitESVNUUk9fUE5fQUxJQVNfcG4tc2hhZG93LXNlY3VyZXR0eSA9ICJVYnVudHU9c2hhZG93IEZlZG9yYT1zaGFkb3ciCitESVNUUk9fUE5fQUxJQVNfcG4tc2hhZG93LXN5c3Jvb3QgPSAiVWJ1bnR1PXNoYWRvdyBGZWRvcmE9c2hhZG93IgorRElTVFJPX1BOX0FMSUFTX3BuLXNoYXN1bSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXNodXRkb3duLWRlc2t0b3AgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1zaWduZ3AgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1zdGF0ID0gIkRlYmlhbj1jb3JldXRpbHMgRmVkb3JhPWNvcmV1dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1zd2FiYmVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tc3lza2xvZ2QgPSAiRGViaWFuPXN5c2tsb2dkIE1hbmRyaXZhPXN5c2tsb2dkIgorRElTVFJPX1BOX0FMSUFTX3BuLXN5c3Byb2YgPSAiRmVkb3JhPXN5c3Byb2YgRGViaWFuPXN5c3Byb2YiCitESVNUUk9fUE5fQUxJQVNfcG4tc3lzdGVtZC1jb21wYXQtdW5pdHMgPSAiRmVkb3JhPXN5c3RlbWQgVWJ1bnR1PXN5c3RlbWQiCitESVNUUk9fUE5fQUxJQVNfcG4tc3lzdGVtZC1zeXN0ZW1jdGwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1zeXN0ZW1kLXN5c3RlbWRjdGwgPSAiRmVkb3JhPXN5c3RlbWQgVWJ1bnR1PXN5c3RlbWQiCitESVNUUk9fUE5fQUxJQVNfcG4tc3lzdGVtdGFwLXVwcm9iZXMgPSAiVWJ1bnR1PXN5c3RlbXRhcCBEZWJpYW49c3lzdGVtdGFwIgorRElTVFJPX1BOX0FMSUFTX3BuLXN5c3Zpbml0LWluaXR0YWIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi10YWJsZSA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi10YXItcmVwbGFjZW1lbnQgPSAiRmVkb3JhPXRhciBVYnVudHU9dGFyIgorRElTVFJPX1BOX0FMSUFTX3BuLXRjZi1hZ2VudCA9ICJXaW5kcml2ZXIgdXBzdHJlYW09aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9kc2RwL3RtLyIKK0RJU1RST19QTl9BTElBU19wbi10ZWxlcGF0aHktcHl0aG9uID0gIkRlYmlhbj10ZWxlcGF0aHktcHl0aG9uIFVidW50dT10ZWxlcGF0aHktcHl0aG9uIgorRElTVFJPX1BOX0FMSUFTX3BuLXRleGluZm8tZHVtbXktbmF0aXZlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tdGlueS1pbml0ID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLXRpbnlsb2dpbiA9ICJEZWJpYW49YnVzeWJveCBVYnVudHU9YnVzeWJveCBNYW5kcml2YT1idXN5Ym94IgorRElTVFJPX1BOX0FMSUFTX3BuLXRyYWNlLWNtZCA9ICJNYW5kcml2YT10cmFjZS1jbWQgVWJ1bnR1PXRyYWNlLWNtZCIKK0RJU1RST19QTl9BTElBU19wbi10cmFwcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tdHJhcHByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXRyZW1vciA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vd3d3LnhpcGgub3JnL3ZvcmJpcy8iCitESVNUUk9fUE5fQUxJQVNfcG4tdHNsaWIgPSAiRGViaWFuPXRzbGliIFVidW50dT10c2xpYiIKK0RJU1RST19QTl9BTElBU19wbi10dGYtYml0c3RyZWFtLXZlcmEgPSAiRGViaWFuPXR0Zi1iaXRzdHJlYW0tdmVyYSBVYnVudHU9dHRmLWJpdHN0cmVhbS12ZXJhIgorRElTVFJPX1BOX0FMSUFTX3BuLXR6Y29kZSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi11LWJvb3QtZnctdXRpbHMgPSAiVWJ1bnR1PXUtYm9vdC10b29scyBEZWJpYW49dS1ib290LXRvb2xzIgorRElTVFJPX1BOX0FMSUFTX3BuLXUtYm9vdC1ta2ltYWdlID0gIlVidW50dT11Ym9vdC1ta2ltYWdlIERlYmlhbj11Ym9vdC1ta2ltYWdlIgorRElTVFJPX1BOX0FMSUFTX3BuLXVkZXYtZXh0cmFjb25mID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tdW5mczMgPSAiRGViaWFuPXVuZnMzIEZlZG9yYT11bmZzMyIKK0RJU1RST19QTl9BTElBU19wbi11bmZzLXNlcnZlciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXVuaW5hdGl2ZS10YXJiYWxsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tdXBkYXRlLWFsdGVybmF0aXZlcy1kcGtnID0gIk9wZW5zdXNlPXVwZGF0ZS1hbHRlcm5hdGl2ZXMgTWFuZHJpdmE9dXBkYXRlLWFsdGVybmF0aXZlcyIKK0RJU1RST19QTl9BTElBU19wbi11cGRhdGUtcmMuZCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXVzYmluaXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi11dGlsLW1hY3JvcyA9ICJNZWVnbz14b3JnLXgxMS11dGlsLW1hY3JvcyBGZWRvcmE9eG9yZy14MTEtdXRpbC1tYWNyb3MgTWFuZHJpdmE9eDExLXV0aWwtbWFjcm9zIgorRElTVFJPX1BOX0FMSUFTX3BuLXY4NmQgPSAiRGViaWFuPXY4NmQgVWJ1bnR1PXY4NmQiCitESVNUUk9fUE5fQUxJQVNfcG4tdmlkZW9wcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by12aWRlb3Byb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXdhZmZsZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXdhdGNoZG9nID0gIkRlYmlhbj13YXRjaGRvZyBVYnVudHU9d2F0Y2hkb2cgTWFuZHJpdmE9d2F0Y2hkb2ciCitESVNUUk9fUE5fQUxJQVNfcG4td2Via2l0Z3RrID0gIkZlZG9yYT13ZWJraXRndGsgVWJ1bnR1PWxpYndlYmtpdCIKK0RJU1RST19QTl9BTElBU19wbi13ZWItd2Via2l0ID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4td2VzdG9uID0gIkZlZG9yYT13ZXN0b24gT3BlblN1U0U9d2VzdG9uIgorRElTVFJPX1BOX0FMSUFTX3BuLXdlc3Rvbi1pbml0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4td2hpY2ggPSAiTWFuZHJpdmE9d2hpY2ggRmVkb3JhPXdoaWNoIgorRElTVFJPX1BOX0FMSUFTX3BuLXdwYS1zdXBwbGljYW50ID0gIk1lZWdvPXdwYV9zdXBwbGljYW50IEZlZG9yYT13cGFfc3VwcGxpY2FudCBPcGVuU3VTRT13cGFfc3VwcGxpY2FudCBVYnVudHU9d3Bhc3VwcGxpY2FudCBNYW5kcml2YT13cGFfc3VwcGxpY2FudCBEZWJpYW49d3Bhc3VwcGxpY2FudCIKK0RJU1RST19QTl9BTElBU19wbi14MTEtY29tbW9uID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4teDExcGVyZiA9ICJGZWRvcmE9eG9yZy14MTEtYXBwcyBVYnVudHU9eDExLWFwcHMiCitESVNUUk9fUE5fQUxJQVNfcG4teDExdm5jID0gIkZlZG9yYT14MTF2bmMgVWJ1bnR1PXgxMXZuYyIKK0RJU1RST19QTl9BTElBU19wbi14Y2ItdXRpbC1pbWFnZSA9ICJEZWJpYW49eGNiLXV0aWwgRmVkb3JhPXhjYi11dGlsIgorRElTVFJPX1BOX0FMSUFTX3BuLXhjYi11dGlsLWtleXN5bXMgPSAiRGViaWFuPXhjYi11dGlsIEZlZG9yYT14Y2ItdXRpbCIKK0RJU1RST19QTl9BTElBU19wbi14Y2ItdXRpbC13bSA9ICJEZWJpYW49eGNiLXV0aWwgRmVkb3JhPXhjYi11dGlsIgorRElTVFJPX1BOX0FMSUFTX3BuLXhjbWlzY3Byb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhjbWlzY3Byb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi14ZHB5aW5mbyA9ICJGZWRvcmE9eG9yZy14MTEtdXRpbHMgVWJ1bnR1PXgxMS11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi14ZXYgPSAiRmVkb3JhPXhvcmcteDExLXV0aWxzIFVidW50dT14MTEtdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teGV4dHByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhleHRwcm90byIKK0RJU1RST19QTl9BTElBU19wbi14ZXllcyA9ICJVYnVudHU9eDExLWFwcHMgRmVkb3JhPXhvcmcteDExLWFwcHMiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4NmJpZ2ZvbnRwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14Zjg2YmlnZm9udHByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODZkZ2Fwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14Zjg2ZGdhcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4teGY4NmRyaXByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhmODZkcmlwcm90byIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LWlucHV0LWV2ZGV2ID0gIlVidW50dT14c2VydmVyLXhvcmctaW5wdXQtZXZkZXYgTWFuZHJpdmE9eDExLWRyaXZlci1pbnB1dC1ldmRldiBEZWJpYW49eHNlcnZlci14b3JnLWlucHV0LWV2ZGV2IEZlZG9yYT14b3JnLXgxMS1kcnYtZXZkZXYgTWVlZ289eG9yZy14MTEtZHJ2LWV2ZGV2IgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtaW5wdXQta2V5Ym9hcmQgPSAiTWVlZ289eG9yZy14MTEtZHJ2LWtleWJvYXJkIEZlZG9yYT14b3JnLXgxMS1kcnYta2V5Ym9hcmQgTWFuZHJpdmE9eDExLWRyaXZlci1pbnB1dC1rZXlib2FyZCBEZWJpYW49eHNlcnZlci14b3JnLWlucHV0LWtleWJvYXJkIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtaW5wdXQtbW91c2UgPSAiVWJ1bnR1PXhzZXJ2ZXIteG9yZy1pbnB1dC1tb3VzZSBNYW5kcml2YT14MTEtZHJpdmVyLWlucHV0LW1vdXNlIERlYmlhbj14c2VydmVyLXhvcmctaW5wdXQtbW91c2UiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni1pbnB1dC1zeW5hcHRpY3MgPSAiTWVlZ289eG9yZy14MTEtZHJ2LXN5bmFwdGljcyBGZWRvcmE9eG9yZy14MTEtZHJ2LXN5bmFwdGljcyBVYnVudHU9eHNlcnZlci14b3JnLWlucHV0LXN5bmFwdGljcyBNYW5kcml2YT14MTEtZHJpdmVyLWlucHV0LXN5bmFwdGljcyBEZWJpYW49eGZyZWU4Ni1kcml2ZXItc3luYXB0aWNzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtaW5wdXQtdm1tb3VzZSA9ICJGZWRvcmE9eG9yZy14MTEtZHJ2LXZtbW91c2UgVWJ1bnR1PXhzZXJ2ZXIteG9yZy1pbnB1dC12bW1vdXNlIE1hbmRyaXZhPXgxMS1kcml2ZXItaW5wdXQtdm1tb3VzZSBEZWJpYW49eHNlcnZlci14b3JnLWlucHV0LXZtbW91c2UiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Nm1pc2Nwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14Zjg2bWlzY3Byb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODZydXNocHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8teGY4NnJ1c2hwcm90byIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LXZpZGVvLWNpcnJ1cyA9ICJPcGVuc3VzZT14Zjg2LXZpZGVvLWNpcnJ1cyBEZWJpYW49eHNlcnZlci14b3JnLXZpZGVvLWNpcnJ1cyIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LXZpZGVvLWZiZGV2ID0gIlVidW50dT14c2VydmVyLXhvcmctdmlkZW8tZmJkZXYgRGViaWFuPXhzZXJ2ZXIteG9yZy12aWRlby1mYmRldiIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LXZpZGVvLWludGVsID0gIkRlYmlhbj14c2VydmVyLXhvcmctdmlkZW8taW50ZWwgRmVkb3JhPXhvcmcteDExLWRydi1pbnRlbCBNYW5kcml2YT14MTEtZHJpdmVyLXZpZGVvLWludGVsIE1lZWdvPXhvcmcteDExLWRydi1pbnRlbCBVYnVudHU9eHNlcnZlci14b3JnLXZpZGVvLWludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtdmlkZW8tbW9kZXNldHRpbmcgPSAiRGViaWFuPXhzZXJ2ZXIteG9yZy12aWRlby1tb2Rlc2V0dGluZyBGZWRvcmE9eGY4Ni12aWRlby1tb2Rlc2V0dGluZyIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LXZpZGVvLW9tYXAgPSAiVWJ1bnR1PXhmODYtdmlkZW8tb21hcCBEZWJpYW49eGY4Ni12aWRlby1vbWFwIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtdmlkZW8tb21hcGZiID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtdmlkZW8tdmVzYSA9ICJEZWJpYW49eHNlcnZlci14b3JnLXZpZGVvLXZlc2EgRmVkb3JhPXhvcmcteDExLWRydi12ZXNhIE1hbmRyaXZhPXgxMS1kcml2ZXItdmlkZW8tdmVzYSBVYnVudHU9eHNlcnZlci14b3JnLXZpZGVvLXZlc2EiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni12aWRlby12bXdhcmUgPSAiRGViaWFuPXhzZXJ2ZXIteG9yZy12aWRlby12bXdhcmUgRmVkb3JhPXhvcmcteDExLWRydi12bXdhcmUgTWFuZHJpdmE9eDExLWRyaXZlci12aWRlby12bXdhcmUgVWJ1bnR1PXhzZXJ2ZXIteG9yZy12aWRlby12bXdhcmUiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4NnZpZG1vZGVwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14Zjg2dmlkbW9kZXByb3RvIFVidW50dT14MTFwcm90by14Zjg2dmlkbW9kZSBEZWJpYW49eDExcHJvdG8teGY4NnZpZG1vZGUiCitESVNUUk9fUE5fQUxJQVNfcG4teGhvc3QgPSAiVWJ1bnR1PXgxMS14c2VydmVyLXV0aWxzIEZlZG9yYT14b3JnLXgxMS1zZXJ2ZXItdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teGluZXJhbWFwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14aW5lcmFtYXByb3RvIFVidW50dT14MTFwcm90by14aW5lcmFtYSBEZWJpYW49eDExcHJvdG8teGluZXJhbWEiCitESVNUUk9fUE5fQUxJQVNfcG4teGlucHV0LWNhbGlicmF0b3IgPSAiRmVkb3JhPXhpbnB1dC1jYWxpYnJhdG9yIE1hbmRyYXZpYT14aW5wdXQtY2FsaWJyYXRvciBVYnVudHU9eGlucHV0LWNhbGlicmF0b3IiCitESVNUUk9fUE5fQUxJQVNfcG4teGtiY29tcCA9ICJVYnVudHU9eDExLXhrYi11dGlscyBGZWRvcmE9eG9yZy14MTEteGtiLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhtb2RtYXAgPSAiTWVlZ289eG9yZy14MTEtdXRpbHMteG1vZG1hcCBGZWRvcmE9eG9yZy14MTEtc2VydmVyLXV0aWxzIFVidW50dT14MTEteHNlcnZlci11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi14b3JnLW1pbmltYWwtZm9udHMgPSAiVWJ1bnR1PXhmb250cy1iYXNlIEZlZG9yYT14b3JnLXgxMS1mb250cy1iYXNlIgorRElTVFJPX1BOX0FMSUFTX3BuLXhwcm9wID0gIk1lZWdvPXhvcmcteDExLXV0aWxzLXhwcm9wIEZlZG9yYT14b3JnLXgxMS11dGlscyBVYnVudHU9eDExLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14cHJvdG8gRmVkb3JhPXhvcmcteDExLXByb3RvLWRldmVsIFVidW50dT14MTFwcm90by1jb3JlLWRldiBEZWJpYW49eDExcHJvdG8tY29yZS1kZXYgT3BlbnN1c2U9eG9yZy14MTEtcHJvdG8tZGV2ZWwgTWFuZHJpdmE9eDExLXByb3RvLWRldmVsIgorRElTVFJPX1BOX0FMSUFTX3BuLXhwcm94eW1hbmFnZW1lbnRwcm90b2NvbCA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14cHJveHltYW5hZ2VtZW50cHJvdG9jb2wiCitESVNUUk9fUE5fQUxJQVNfcG4teHJhbmRyID0gIlVidW50dT14MTEteHNlcnZlci11dGlscyBGZWRvcmE9eG9yZy14MTEtc2VydmVyLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhyZGIgPSAiVWJ1bnR1PXgxMS14c2VydmVyLXV0aWxzIEZlZG9yYT14b3JnLXgxMS1zZXJ2ZXItdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teHNlcnZlci1ub2RtLWluaXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi14c2VydmVyLXhmODYtY29uZmlnID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4teHNlcnZlci14Zjg2LWRyaS1saXRlID0gIkZlZG9yYT14b3JnLXgxMS1zZXJ2ZXIgVWJ1bnR1PXhzZXJ2ZXIteG9yZyIKK0RJU1RST19QTl9BTElBU19wbi14c2VydmVyLXhmODYtbGl0ZSA9ICJGZWRvcmE9eG9yZy14MTEtc2VydmVyIFVidW50dT14c2VydmVyLXhvcmciCitESVNUUk9fUE5fQUxJQVNfcG4teHNlcnZlci14b3JnID0gIkZlZG9yYT14b3JnLXgxMS1zZXJ2ZXIgVWJ1bnR1PXhzZXJ2ZXIteG9yZyIKK0RJU1RST19QTl9BTElBU19wbi14c2V0ID0gIkZlZG9yYT14b3JnLXgxMS1zZXJ2ZXItdXRpbHMgVWJ1bnR1PXgxMS14c2VydmVyLXV0aWxzIERlYmlhbj14MTEteHNlcnZlci11dGlscyBPcGVuc3VzZT14b3JnLXgxMSIKK0RJU1RST19QTl9BTElBU19wbi14dHNjYWwgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL2dwZS5saW51eHRvZ28ub3JnL2Rvd25sb2FkL3NvdXJjZS8iCitESVNUUk9fUE5fQUxJQVNfcG4teHVzZXItYWNjb3VudCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXh2aWRlby10ZXN0cyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXh2aW5mbyA9ICJGZWRvcmE9eG9yZy14MTEtdXRpbHMgVWJ1bnR1PXgxMS11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi14d2luaW5mbyA9ICJGZWRvcmE9eG9yZy14MTEtdXRpbHMgVWJ1bnR1PXgxMS11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi15YWZmczItdXRpbHMgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL3d3dy55YWZmcy5uZXQiCitESVNUUk9fUE5fQUxJQVNfcG4temF1cnVzZCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXplcm9jb25mID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly93d3cucHJvZ3NvYy5vcmcvfndpbGRmaXJlL3plcm9jb25mLyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3BhY2thZ2VfcmVnZXguaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvcGFja2FnZV9yZWdleC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyOTk5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3BhY2thZ2VfcmVnZXguaW5jCkBAIC0wLDAgKzEsMjc4IEBACisjIHBhY2thZ2VfcmVnZXguaW5jIC0gVGhpcyBmaWxlIGNvbnRhaW5zIGRhdGEgdGhhdCB0cmFja3MKKyMgdXBzdHJlYW0gcHJvamVjdCBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiByZWNpcGUuIFRoaXMgbGlzdCBpcyBuZWVkZWQKKyMgZm9yIHJlY2lwZXMgdGhhdCB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhbiBub3QgYmUgYXV0b21hZ2ljYWxseSBkaXNjb3ZlcmVkLgorIyBBcyB3ZSBhdXRvbWF0ZSB0aGlzIGNoZWNraW5nLCB0aGlzIGZpbGUgd2lsbCBzbG93bHkgYmUgcmVkdWNlZC4KKyMiCisjIFRoaXMgZGF0YSBpcyB1c2VkIGJ5IHRoZSBwYWNrYWdlIHJlcG9ydGluZyBzeXN0ZW0gKHBhY2thZ2VzLnlvY3RvcHJvamVjdC5vcmcpCisjIgorIyBUaGUgZm9ybWF0IGlzIGFzIGEgYml0YmFrZSB2YXJpYWJsZSBvdmVycmlkZSBmb3IgZWFjaCByZWNpcGUKKyMiCisjICAgICAgIFJFR0VYX1VSSV9wbi08cmVjaXBlIG5hbWU+ID0gInJlY2lwZV91cmwiCisjCSAtIFRoaXMgaXMgdGhlIHVybCB1c2VkIGJ5IHRoZSBwYWNrYWdlIGNoZWNraW5nIHN5c3RlbSB0bworIwkgICBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlCisjICAgICAgIFJFR0VYX3BuLTxyZWNpcGUgbmFtZT4gPSAicGFja2FnZV9yZWdleCIKKyMJIC0gVGhpcyBpcyB0aGUgcmVnZXggdGhlIHBhY2thZ2UgY2hlY2tpbmcgc3lzdGVtIHVzZXMgdG8KKyMJICAgcGFyc2UgdGhlIHBhZ2UgZm91bmQgYXQgUkVHRVhfVVJJX3BuLTxyZWNpcGUgbmFtZT4KKyMJR0lUVEFHUkVHRVhfcG4tPHJlY2lwZSBuYW1lPiA9ICJnaXRfdGFnX3JlZ2V4IgorIwkgLSBXaGVuIHNvdXJjZSBjb2RlIGlzIGZldGNoZWQgZnJvbSBnaXQsIGdpdCB0YWdzIGFyZSB1c2VkIHRvCisjCSAgIGRldGVybWluZSB0aGUgdXBzdHJlYW0gcmVsZWFzZSB2ZXJzaW9uLiBUaGlzIHJlZ2V4IGNhbiBiZSB1c2VkCisjCSAgIHRvIGZpbHRlciBvbmx5IHJlbGV2YW50IHRhZ3MuCisjCisKK0NPTU1PTl9SRUdFWCA9ICIoP1A8cHZlcj4oXGQrW1wuXC1fXSopKykiCisKKyMgR2VuZXJpYyByZWdleCBkb24ndCBtYXRjaAorUkVHRVhfVVJJX3BuLXdpcmVsZXNzLXRvb2xzID0gImh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvVG9vbHMuaHRtbCIKK1JFR0VYX3BuLXdpcmVsZXNzLXRvb2xzID0gIndpcmVsZXNzX3Rvb2xzXC4oP1A8cHZlcj4oXGQrKShcLi4qfCkpXC50YXJcLmd6IgorCitSRUdFWF9VUklfcG4tc3FsaXRlMz0iaHR0cDovL3d3dy5zcWxpdGUub3JnLyIKK1JFR0VYX3BuLXNxbGl0ZTM9InJlbGVhc2Vsb2cvJHtDT01NT05fUkVHRVh9Lmh0bWwiCisKK1JFR0VYX1VSSV9wbi1kaGNwID0gImZ0cDovL2Z0cC5pc2Mub3JnL2lzYy9kaGNwLyIKK1JFR0VYX3BuLWRoY3A9Iig/UDxwdmVyPlxkK1wuXGQrXC4oXGQrPykpLyIKKworUkVHRVhfcG4tZm9vbWF0aWMtZmlsdGVycyA9ICJmb29tYXRpYy1maWx0ZXJzLSg/UDxwdmVyPigoXGR8XGRcZClcLiopKylcLnRhclwuZ3oiCitSRUdFWF9wbi14ZGctdXRpbHMgPSAieGRnLXV0aWxzLSg/UDxwdmVyPigoXGQrW1wuXC1fXSopKykoKHJjfGFscGhhfGJldGEpXGQrKT8pXC4odGFyXC5nenx0Z3opIgorUkVHRVhfcG4tcnBtPSJycG0tJHtDT01NT05fUkVHRVh9LS4qJCIKK1JFR0VYX3BuLWxpYnRoZW9yYSA9ICJsaWJ0aGVvcmEtKD9QPHB2ZXI+XGQrKFwuXGQpKylcLih0YXJcLmd6fHRneikiCisKK1JFR0VYX3BuLWlwdXRpbHM9ImlwdXRpbHMtKD9QPHB2ZXI+c1xkKykudGFyIgorUkVHRVhfcG4tbmV0dGxlID0gIm5ldHRsZS0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKKworUkVHRVhfcG4tY2Fpcm8gPSAiY2Fpcm8tKD9QPHB2ZXI+XGQrKFwuXGQrKSspXC50YXIiCitSRUdFWF9wbi1jbWFrZSA9ICJjbWFrZS0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKK1JFR0VYX3BuLWxpYnNkbCA9ICJTREwtKD9QPHB2ZXI+XGQrKFwuXGQrKSspXC50YXIiCitSRUdFWF9wbi1saWJ4c2x0ID0gImxpYnhzbHQtKD9QPHB2ZXI+XGQrKFwuXGQrKSspXC50YXIiCisKKyMgRXhjbHVkZSBOQyB2ZXJzaW9ucyB3aGljaCBsYWNrIEFFUyBlbmNyeXB0aW9uCitSRUdFWF9wbi1kYiA9ICJkYi0oP1A8cHZlcj5cZCtcLlxkKyhcLlxkKyk/KS50YXIiCisKK1JFR0VYX1VSSV9wbi1hdXRvZ2VuID0gImh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvYXV0b2dlbi8iCitSRUdFWF9wbi1hdXRvZ2VuID0gInJlbCg/UDxwdmVyPlxkKyhcLlxkKykrKS8iCisKKyMgcHl0aG9uIHJlY2lwZSBpcyBhY3R1YWxseSBweXRob24gMi54CisjIGFsc28sIGV4Y2x1ZGUgcHJlLXJlbGVhc2VzIGZvciBib3RoIHB5dGhvbiAyLnggYW5kIDMueAorUkVHRVhfcG4tcHl0aG9uID0gIltQcF15dGhvbi0oP1A8cHZlcj4yKFwuXGQrKSspLnRhciIKK1JFR0VYX3BuLXB5dGhvbjMgPSAiW1BwXXl0aG9uLSg/UDxwdmVyPlxkKyhcLlxkKykrKS50YXIiCisKKyMgZXhjbHVkZSBiZXRhcworUkVHRVhfcG4tdGlmZiA9ICJ0aWZmLSg/UDxwdmVyPlxkKyhcLlxkKykrKS50YXIiCisKKyMgZXhjbHVkZSB2ZXJzaW9uIDUuNS4yIHdoaWNoIHRyaWdnZXJzIGEgZmFsc2UgcG9zaXRpdmUKK1JFR0VYX3BuLXVuemlwID0gInVuemlwKD9QPHB2ZXI+KD8hNTUyKS4rKVwudGd6IgorIyBzaW1pbGFyIGZvciB6aXAKK1JFR0VYX3BuLXppcCA9ICJeemlwKD9QPHB2ZXI+KD8hMjMyKS4rKVwudGd6IgorCisjIElzbid0IHBvc3NpYmxlIHRvIGRvd25sb2FkIHdpdGggdGhlIGRlZmF1bHQgVVJJIHdlYiBzZXJ2ZXIgcmV0dXJucworIyAoNDAzLCA0MDQsIDU1MCkKK1JFR0VYX1VSSV9wbi1kb3Nmc3Rvb2xzID0gImh0dHBzOi8vZ2l0aHViLmNvbS9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvcmVsZWFzZXMiCitSRUdFWF9wbi1qc29uLWMgPSAianNvbi1jLSg/UDxwdmVyPlxkKyhcLlxkKykrKS50YXIiCisjIGpzb24tYyByZWxlYXNlcyBwYWdlIGlzIGZldGNoaW5nIHRoZSBsaXN0IG9mIHJlbGVhc2VzIGluIHNvbWUgd2VpcmQgWE1MIGZvcm1hdAorIyBmcm9tIGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9qc29uLWNfcmVsZWFzZXMgYW5kIHByb2Nlc3NlcyBpdCB3aXRoIGphdmFzY3JpcHQgOi0vCisjUkVHRVhfVVJJX3BuLWpzb24tYyA9ICJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vanNvbi1jX3JlbGVhc2VzL3JlbGVhc2VzL2luZGV4Lmh0bWwiCitSRUdFWF9VUklfcG4tY2hycGF0aCA9ICJodHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvZnJzLz9ncm91cF9pZD0zMTA1MiIKKworUkVHRVhfVVJJX3BuLXBvd2VydG9wID0gImh0dHBzOi8vMDEub3JnL3Bvd2VydG9wL2Rvd25sb2FkcyIKK1JFR0VYX1VSSV9wbi1saWJzYW1wbGVyYXRlMCA9ICJodHRwOi8vd3d3Lm1lZ2EtbmVyZC5jb20vU1JDL2Rvd25sb2FkLmh0bWwiCitSRUdFWF9VUklfcG4tbGlieGtiY29tbW9uID0gImh0dHA6Ly94a2Jjb21tb24ub3JnLyIKK1JFR0VYX1VSSV9wbi10c2xpYiA9ICJodHRwczovL2dpdGh1Yi5jb20va2VyZ290aC90c2xpYi9yZWxlYXNlcyIKK1JFR0VYX1VSSV9wbi13YWZmbGU9Imh0dHA6Ly93d3cud2FmZmxlLWdsLm9yZy9yZWxlYXNlcy5odG1sIgorUkVHRVhfVVJJX3BuLWxyenN6ID0gImh0dHA6Ly9vaHNlLmRlL3V3ZS9zb2Z0d2FyZS9scnpzei5odG1sIgorUkVHRVhfVVJJX3BuLWxpYmFjcGkgPSAiaHR0cDovL3d3dy5uZ29sZGUuZGUvbGliYWNwaS5odG1sIgorUkVHRVhfVVJJX3BuLWxlc3MgID0gImh0dHA6Ly93d3cuZ3JlZW53b29kc29mdHdhcmUuY29tL2xlc3MvZG93bmxvYWQuaHRtbCIKK1JFR0VYX1VSSV9wbi1jdXBzID0gImh0dHA6Ly93d3cuY3Vwcy5vcmcvc29mdHdhcmUucGhwIgorUkVHRVhfcG4tY3VwcyA9ICJjdXBzLSg/UDxwdmVyPlxkK1wuXGQrKFwuXGQrKT8pLXNvdXJjZS50YXIiCitSRUdFWF9VUklfcG4tYnppcDIgPSAiaHR0cDovL3d3dy5iemlwLm9yZy9kb3dubG9hZHMuaHRtbCIKK1JFR0VYX1VSSV9wbi1taW5pY29tID0gImh0dHBzOi8vYWxpb3RoLmRlYmlhbi5vcmcvZnJzLz9ncm91cF9pZD0zMDAxOCIKK1JFR0VYX1VSSV9wbi1zeXNzdGF0ID0gImh0dHA6Ly9zZWJhc3RpZW4uZ29kYXJkLnBhZ2VzcGVyc28tb3JhbmdlLmZyL2Rvd25sb2FkLmh0bWwiCitSRUdFWF9VUklfcG4tbGliaWNhbCA9ICJodHRwczovL2dpdGh1Yi5jb20vbGliaWNhbC9saWJpY2FsL3JlbGVhc2VzLyIKK1JFR0VYX1VSSV9wbi1saWJtcGMgPSAiaHR0cDovL3d3dy5tdWx0aXByZWNpc2lvbi5vcmcvaW5kZXgucGhwP3Byb2c9bXBjJnBhZ2U9ZG93bmxvYWQiCitSRUdFWF9VUklfcG4tdGFnbGliID0gImh0dHA6Ly9naXRodWIuY29tL3RhZ2xpYi90YWdsaWIvcmVsZWFzZXMvIgorUkVHRVhfVVJJX3BuLWxpYmV2ZW50ID0gImh0dHA6Ly9saWJldmVudC5vcmcvIgorUkVHRVhfVVJJX3BuLWRiID0gImh0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobmV0d29yay9wcm9kdWN0cy9iZXJrZWxleWRiL2Rvd25sb2Fkcy9pbmRleC0wODI5NDQuaHRtbCIKK1JFR0VYX1VSSV9wbi1weXRob24tc21hcnRwbT0iaHR0cHM6Ly9sYXVuY2hwYWQubmV0L3NtYXJ0L3RydW5rLyIKK1JFR0VYX1VSSV9wbi1sc29mID0gImZ0cDovL3N1bnNpdGUudWFsYmVydGEuY2EvcHViL01pcnJvci9sc29mLyIKK1JFR0VYX1VSSV9wbi1wYnppcDIgPSAiaHR0cDovL2NvbXByZXNzaW9uLmNhL3BiemlwMi8iCitSRUdFWF9VUklfcG4tcXVpY2t5ID0gImh0dHA6Ly9xdC1hcHBzLm9yZy9jb250ZW50L2Rvd25sb2FkLnBocD9jb250ZW50PTgwMzI1JmlkPTEmdGFuPTEwNDE3NDgyIgorUkVHRVhfVVJJX3BuLWxpYndlYnAgPSAiaHR0cDovL2Rvd25sb2Fkcy53ZWJtcHJvamVjdC5vcmcvcmVsZWFzZXMvd2VicC9pbmRleC5odG1sIgorCisjIFRoZSBlbmdpbmUgdHJpZXMgdG8gdXNlIGRpcmVjdG9yeSB2ZXJzaW9uaW5nIGJ1dCBpcyBhIGZhbHNlLXBvc2l0aXZlCitSRUdFWF9VUklfcG4taW50bHRvb2wgPSAiaHR0cHM6Ly9sYXVuY2hwYWQubmV0L2ludGx0b29sL3RydW5rLyIKK1JFR0VYX1VSSV9wbi1saWJuZnNpZG1hcCA9ICJodHRwOi8vd3d3LmNpdGkudW1pY2guZWR1L3Byb2plY3RzL25mc3Y0L2xpbnV4L2xpYm5mc2lkbWFwLyIKK1JFR0VYX1VSSV9wbi1tcGZyID0gImh0dHA6Ly93d3cubXBmci5vcmcvbXBmci1jdXJyZW50LyIKK1JFR0VYX1VSSV9wbi1uc3MgPSAiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb3ppbGxhL1Byb2plY3RzL05TUy9OU1NfUmVsZWFzZXMiCitSRUdFWF9wbi1uc3MgPSAiTlNTXyg/UDxwdmVyPi4rKV9yZWxlYXNlX25vdGVzIgorCitSRUdFWF9VUklfcG4tZG9jYm9vay1zZ21sLWR0ZC0zLjEgPSAiaHR0cDovL3d3dy5kb2Nib29rLm9yZy9zZ21sLyIKK1JFR0VYX3BuLWRvY2Jvb2stc2dtbC1kdGQtMy4xID0gIig/UDxwdmVyPjNcLi4rKS8iCitSRUdFWF9VUklfcG4tZG9jYm9vay1zZ21sLWR0ZC00LjEgPSAiaHR0cDovL3d3dy5kb2Nib29rLm9yZy9zZ21sLyIKK1JFR0VYX3BuLWRvY2Jvb2stc2dtbC1kdGQtNC4xID0gIig/UDxwdmVyPjRcLjEoXC5cZCspKikvIgorCisjIFF0IHJlY2lwZXMgc2hvdWxkIGJlIGtlcHQgYXQgNC54CitSRUdFWF9VUklfcG4tcXQ0LWVtYmVkZGVkID0gImh0dHA6Ly9kb3dubG9hZC5xdC5pby9vZmZpY2lhbF9yZWxlYXNlcy9xdC80LjgvIgorUkVHRVhfcG4tcXQ0LWVtYmVkZGVkID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKS8iCitSRUdFWF9VUklfcG4tcXQ0LXgxMS1mcmVlID0gImh0dHA6Ly9kb3dubG9hZC5xdC5pby9vZmZpY2lhbF9yZWxlYXNlcy9xdC80LjgvIgorUkVHRVhfcG4tcXQ0LXgxMS1mcmVlID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKS8iCitSRUdFWF9VUklfcG4tbmF0aXZlc2RrLXF0NC10b29scyA9ICJodHRwOi8vZG93bmxvYWQucXQuaW8vb2ZmaWNpYWxfcmVsZWFzZXMvcXQvNC44LyIKK1JFR0VYX3BuLW5hdGl2ZXNkay1xdDQtdG9vbHMgPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSspLyIKK1JFR0VYX1VSSV9wbi1xdDQtbmF0aXZlID0gImh0dHA6Ly9kb3dubG9hZC5xdC5pby9vZmZpY2lhbF9yZWxlYXNlcy9xdC80LjgvIgorUkVHRVhfcG4tcXQ0LW5hdGl2ZSA9ICIoP1A8cHZlcj5cZCsoXC5cZCspKykvIgorCisjIFB5UEkgc2l0ZXMKK1JFR0VYX1VSSV9wbi1weXRob24tbm9zZSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL25vc2UvIgorUkVHRVhfcG4tcHl0aG9uLW5vc2UgPSAiL25vc2UvJHtDT01NT05fUkVHRVh9IgorIyBweXRob24tZGlzdHJpYnV0ZSAwLjcueCBpcyBhIHNpbXBsZSBjb21wYXRpYmlsaXR5IGxheWVyIHRoYXQgaW5zdGFsbHMgU2V0dXB0b29scyAwLjcrLgorIyBzbyB3ZSBzdGljayB0byAwLjYueCBzZXJpZXMKK1JFR0VYX1VSSV9wbi1weXRob24tZGlzdHJpYnV0ZSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2Rpc3RyaWJ1dGUvIgorUkVHRVhfcG4tcHl0aG9uLWRpc3RyaWJ1dGUgPSAiL2Rpc3RyaWJ1dGUvKD9QPHB2ZXI+XGQrLjYuXGQrKSIKK1JFR0VYX1VSSV9wbi1weXRob24tZ2l0ZGIgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9naXRkYi8iCitSRUdFWF9VUklfcG4tcHl0aG9uLWFzeW5jID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvYXN5bmMvIgorUkVHRVhfVVJJX3BuLXB5dGhvbi1zbW1hcCA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3NtbWFwLyIKK1JFR0VYX3BuLXB5dGhvbi1zbW1hcCA9ICIvc21tYXAvJHtDT01NT05fUkVHRVh9IgorUkVHRVhfVVJJX3BuLXB5dGhvbi1naXQgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9HaXRQeXRob24vIgorUkVHRVhfcG4tcHl0aG9uLWdpdCA9ICIvR2l0UHl0aG9uLyR7Q09NTU9OX1JFR0VYfSIKK1JFR0VYX1VSSV9wbi1weXRob24tbWFrbyA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL21ha28vIgorUkVHRVhfcG4tcHl0aG9uLW1ha28gPSAiL01ha28vJHtDT01NT05fUkVHRVh9IgorUkVHRVhfVVJJX3BuLXB5dGhvbi1wZXhwZWN0ID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcGV4cGVjdCIKK1JFR0VYX1VSSV9wbi1weXRob24zLXBpcCA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3BpcCIKK1JFR0VYX1VSSV9wbi1weXRob24zLXNldHVwdG9vbHMgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9zZXR1cHRvb2xzIgorCisjIFNvdXJjZWZvcmdlIHNpdGVzCitSRUdFWF9VUklfcG4tcHl0aG9uLXNjb25zID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvc2NvbnMvZmlsZXMvc2NvbnMvIgorUkVHRVhfcG4tcHl0aG9uLXNjb25zID0gIi9zY29ucy8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWV4cGVjdCA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2V4cGVjdC9maWxlcy9FeHBlY3QvIgorUkVHRVhfcG4tZXhwZWN0ID0gIi9FeHBlY3QvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1kb2Nib29rLXhzbC1zdHlsZXNoZWV0cyA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2RvY2Jvb2svZmlsZXMvZG9jYm9vay14c2wvIgorUkVHRVhfcG4tZG9jYm9vay14c2wtc3R5bGVzaGVldHMgPSAiL2RvY2Jvb2steHNsLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tZ2xldyA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dsZXcvZmlsZXMvZ2xldyIKK1JFR0VYX3BuLWdsZXcgPSAiL2dsZXcvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1tZW51LWNhY2hlID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbHhkZS9maWxlcy9tZW51LWNhY2hlLzEuMC8iCitSRUdFWF9VUklfcG4teDExdm5jID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGlidm5jc2VydmVyL2ZpbGVzL3gxMXZuYy8iCitSRUdFWF9wbi14MTF2bmMgPSAiL3gxMXZuYy8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLXF1b3RhID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXhxdW90YS9maWxlcy9xdW90YS10b29scy8iCitSRUdFWF9wbi1xdW90YSA9ICIvcXVvdGEtdG9vbHMvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1sc2IgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9sc2IvZmlsZXMvbHNiX3JlbGVhc2UvIgorUkVHRVhfcG4tbHNiID0gIi9sc2JfcmVsZWFzZS8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWxpYnBjcmUgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9wY3JlL2ZpbGVzL3BjcmUvIgorUkVHRVhfcG4tbGlicGNyZSA9ICIvcGNyZS8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWxpYnVzYi1jb21wYXQgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJ1c2IvZmlsZXMvbGlidXNiLWNvbXBhdC0wLjEvIgorUkVHRVhfcG4tbGlidXNiLWNvbXBhdCA9ICIvbGlidXNiLWNvbXBhdC0ke0NPTU1PTl9SRUdFWH0vJCIKK1JFR0VYX1VSSV9wbi1zeXNmc3V0aWxzID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXgtZGlhZy9maWxlcy9zeXNmc3V0aWxzLyIKK1JFR0VYX3BuLXN5c2ZzdXRpbHMgPSAiL3N5c2ZzdXRpbHMvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1jb25zb2xlLXRvb2xzID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGN0L2ZpbGVzL2NvbnNvbGUtdG9vbHMtZGV2ZWwvIgorUkVHRVhfcG4tY29uc29sZS10b29scyA9ICIvY29uc29sZS10b29scy1kZXZlbC8oP1A8cHZlcj4oXGRcZD9cLikrXGRcZD8pLyIKK1JFR0VYX1VSSV9wbi13YXRjaGRvZyA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3dhdGNoZG9nL2ZpbGVzL3dhdGNoZG9nLyIKK1JFR0VYX3BuLXdhdGNoZG9nID0gIi93YXRjaGRvZy8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWNyYWNrbGliID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvY3JhY2tsaWIvZmlsZXMvY3JhY2tsaWIvIgorUkVHRVhfcG4tY3JhY2tsaWIgPSAiL2NyYWNrbGliLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tZ3B0ZmRpc2sgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9ncHRmZGlzay9maWxlcy9ncHRmZGlzay8iCitSRUdFWF9wbi1ncHRmZGlzayA9ICIvZ3B0ZmRpc2svJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1saWJwbmcxMiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYnBuZy9maWxlcy9saWJwbmcxMi8iCitSRUdFWF9wbi1saWJwbmcxMiA9ICIvbGlicG5nMTIvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZG9jYm9vay9maWxlcy9kb2Nib29rLWRzc3NsLyIKK1JFR0VYX3BuLWRvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMgPSAiL2RvY2Jvb2stZHNzc2wvJHtDT01NT05fUkVHRVh9LyIKKworUkVHRVhfVVJJX3BuLW9wZW5qYWRlID0gImh0dHA6Ly9vcGVuamFkZS5zb3VyY2Vmb3JnZS5uZXQvZG93bmxvYWQuaHRtbCIKK1JFR0VYX1VSSV9wbi1saWJwZm00ID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcGVyZm1vbjIvZmlsZXMvbGlicGZtNC8iCitSRUdFWF9VUklfcG4tbGliYTUyID0gImh0dHA6Ly9saWJhNTIuc291cmNlZm9yZ2UubmV0L2Rvd25sb2Fkcy5odG1sIgorUkVHRVhfVVJJX3BuLW1wZWcyZGVjID0gImh0dHA6Ly9saWJtcGVnMi5zb3VyY2Vmb3JnZS5uZXQvZG93bmxvYWRzLmh0bWwiCitSRUdFWF9VUklfcG4tcGNtYW5mbSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3BjbWFuZm0vZmlsZXMvUENNYW5GTSUyMCUyQiUyMExpYmZtJTIwJTI4dGFyYmFsbCUyMHJlbGVhc2UlMjkvUENNYW5GTS8iCitSRUdFWF9VUklfcG4tbGliY2dyb3VwID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGliY2cvZmlsZXMvbGliY2dyb3VwLyIKK1JFR0VYX1VSSV9wbi1jZHJ0b29scyA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2NkcnRvb2xzL2ZpbGVzL2FscGhhLyIKKworIyBHSVQKK0dJVFRBR1JFR0VYX0NPTU1PTiA9ICIoP1A8cHZlcj5cZCtcLlxkKyhcLlxkKykqKSIKKworR0lUVEFHUkVHRVhfcG4tbGludXgteW9jdG8gPSAiJHtHSVRUQUdSRUdFWF9DT01NT059IgorR0lUVEFHUkVHRVhfcG4tbGludXgteW9jdG8tdGlueSA9ICIke0dJVFRBR1JFR0VYX0NPTU1PTn0iCitHSVRUQUdSRUdFWF9wbi1saW51eC15b2N0by1kZXYgPSAiJHtHSVRUQUdSRUdFWF9DT01NT059IgorR0lUVEFHUkVHRVhfcG4tdWNsaWJjID0gIiR7R0lUVEFHUkVHRVhfQ09NTU9OfSIKK0dJVFRBR1JFR0VYX3BuLWdsaWJjID0gIiR7R0lUVEFHUkVHRVhfQ09NTU9OfSIKK0dJVFRBR1JFR0VYX3BuLWNyb3NzLWxvY2FsZWRlZiA9ICIke0dJVFRBR1JFR0VYX0NPTU1PTn0iCitHSVRUQUdSRUdFWF9wbi1iaW51dGlscyA9ICJiaW51dGlscy0oP1A8cHZlcj5cZCtfKFxkXz8pKikiCitHSVRUQUdSRUdFWF9wbi1ib290Y2hhcnQyID0gIiR7R0lUVEFHUkVHRVhfQ09NTU9OfSIKK0dJVFRBR1JFR0VYX3BuLXJlbWFrZSA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspXCtkYmcuKykiCitHSVRUQUdSRUdFWF9wbi10Y2YtYWdlbnQgPSAiKD9QPHB2ZXI+KFxkKyhcLlxkKykrKSkiCitHSVRUQUdSRUdFWF9wbi1jaGtjb25maWctYWx0ZXJuYXRpdmVzID0gImNoa2NvbmZpZy0oP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKK0dJVFRBR1JFR0VYX3BuLXNnbWxzcGwgPSAiKD9QPHB2ZXI+KFxkKyhcLlxkKykrKSkiCisKKyMgRXhjbHVkZSB4Ljk5LnggdmVyc2lvbnMKK0dJVFRBR1JFR0VYX3BuLW14LTEuMCA9ICIoP1A8cHZlcj5eXGQrKFwuKD8hOTkpXGQrKSspIgorCisjIEJsYWNrbGlzdCBhIGJvZ3VzIHRhZworR0lUVEFHUkVHRVhfcG4tZmlsZSA9ICJGSUxFKD9QPHB2ZXI+KD8hNl8yMykuKykiCitHSVRUQUdSRUdFWF9wbi14aW5ldGQgPSAieGluZXRkLSg/UDxwdmVyPig/ITIwMDMwMTIyKS4rKSIKKworIyBCbGFja2xpc3QgZGViaWFuLXNwZWNpZmljIHRhZ3MKK0dJVFRBR1JFR0VYX3BuLXhmODYtdmlkZW8tb21hcGZiID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKSg/IS0pIgorCisjIEdOT01FIHJlbGF0ZWQuCisjCisjIEdOT01FMl9TVEFCTEUgcGlja3Mgc3RhYmxlIHJlbGVhc2VzIGluIHRoZSAyLnggc2VyaWVzIChzbyBub3QgMi45MCBvbndhcmRzLAorIyB3aGljaCB3ZXJlIEdOT01FIDMgYmV0YXMuCisjCisjIEdOT01FX1NUQUJMRSBwaWNrcyB0aGUgbGF0ZXN0IHN0YWJsZSByZWxlYXNlLgorCitHTk9NRTJfU1RBQkxFID0gIig/UDxwdmVyPjJcLihbMC04XSpbMDI0NjhdKSsoXC5cZCspKykiCitHTk9NRV9TVEFCTEUgPSAiKD9QPHB2ZXI+XGQrXC4oXGQqWzAyNDY4XSkrKFwuXGQrKSspIgorCitSRUdFWF9wbi1nbGliLTIuMCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1hdGsgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tYXQtc3BpMi1jb3JlID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWF0LXNwaTItYXRrID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWdkay1waXhidWYgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tcGFuZ28gPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ3RrKyA9ICIke0dOT01FMl9TVEFCTEV9IgorUkVHRVhfcG4tZ3RrKzMgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ3RrLWVuZ2luZXMgPSAiJHtHTk9NRTJfU1RBQkxFfSIKK1JFR0VYX3BuLWdsaWItbmV0d29ya2luZyA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1saWJyc3ZnID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWxpYnNvdXAtMi40ID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLXZhbGEgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tY2x1dHRlci0xLjAgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tY2x1dHRlci1ndGstMS4wID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWNsdXR0ZXItZ3N0LTMuMCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1jb2dsLTEuMCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1hZHdhaXRhLWljb24tdGhlbWUgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tdnRlID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWVwaXBoYW55ID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLXdlYmtpdGd0ayA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1wMTEta2l0ID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWdub21lLWRlc2t0b3AzID0gIiR7R05PTUVfU1RBQkxFfSIKKworIyBub3QgR05PTUUgcmVsYXRlZCBidXQgdXNlcyBzYW1lIGV2ZW4tbWlub3ItcmVsZWFzZS1pcy1zdGFibGUgbG9naWMKK1JFR0VYX3BuLWRidXMgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZGJ1cy10ZXN0ID0gIiR7R05PTUVfU1RBQkxFfSIKKworIyBzYW1lIGxvZ2ljIGFwcGxpZXMgdG8gZ3N0cmVhbWVyIHJlbGVhc2VzCitSRUdFWF9wbi1nc3RyZWFtZXIxLjAgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ3N0cmVhbWVyMS4wLWxpYmF2ID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseSA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIgPSAiJHtHTk9NRV9TVEFCTEV9IgorCisjIGFuZCBwZXJsCitSRUdFWF9wbi1wZXJsID0gIiR7R05PTUVfU1RBQkxFfSIKKworIyBLZWVwIG9sZCBnY2MgdmVyc2lvbnMgYXQgdGhlaXIgbWFqb3IgdmVyc2lvbnMKK1JFR0VYX3BuLWdjYy1zb3VyY2UtNC45LjMgPSAiZ2NjLSg/UDxwdmVyPjRcLjlcLlxkKykudGFyIgorUkVHRVhfcG4tZ2NjLXNvdXJjZS00LjguNCA9ICJnY2MtKD9QPHB2ZXI+NFwuOFwuXGQrKS50YXIiCisKKyMgdGhlc2UgcGFja2FnZXMgYXJlIHRha2VuIGZyb20gc25hcHNob3RzLmRlYmlhbi5vcmc7IHRoYXQgc291cmNlIGlzIHN0YXRpYyBhbmQgZ29lcyBzdGFsZQorIyBzbyB3ZSBjaGVjayB0aGUgbGF0ZXN0IHVwc3RyZWFtIGZyb20gYSBkaXJlY3RvcnkgdGhhdCBkb2VzIGdldCB1cGRhdGVkCitSRUdFWF9VUklfcG4tYXB0ID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9hL2FwdC8iCitSRUdFWF9VUklfcG4tcmVzb2x2Y29uZiA9ICIke0RFQklBTl9NSVJST1J9L21haW4vci9yZXNvbHZjb25mLyIKK1JFR0VYX1VSSV9wbi1uZXQtdG9vbHMgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL24vbmV0LXRvb2xzLyIKKworIyBzYW1lIGZvciBwYWNrYWdlcyBmcm9tIGxhdW5jaHBhZAorUkVHRVhfVVJJX3BuLWJhc2UtcGFzc3dkID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9iL2Jhc2UtcGFzc3dkLyIKKworIyBmb3IgdGhlc2UgcGFja2FnZXMgd2UncmUgbW9zdGx5IGludGVyZXN0ZWQgaW4gdHJhY2tpbmcgZGViaWFuIHBhdGNoZXMsCisjIGFuZCBub3QgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gd2hlcmUgYWxsIGRldmVsb3BtZW50IGhhcyBlZmZlY3RpdmVseSBzdG9wcGVkCitERUJJQU5fUEFUQ0hfUkVHRVggPSAiKD9QPHB2ZXI+KChcZCtcLiopKyktKChcZCtcLiopKykpXC4oZGlmZnxkZWJpYW5cLnRhcilcLihnenx4eikiCitSRUdFWF9wbi1uZXQtdG9vbHMgPSAiJHtERUJJQU5fUEFUQ0hfUkVHRVh9IgorUkVHRVhfcG4tYXBtZCA9ICIke0RFQklBTl9QQVRDSF9SRUdFWH0iCitSRUdFWF9wbi1ibGt0b29sID0gIiR7REVCSUFOX1BBVENIX1JFR0VYfSIKK1JFR0VYX3BuLW1haWx4ID0gIiR7REVCSUFOX1BBVENIX1JFR0VYfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3NlY3VyaXR5X2ZsYWdzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3NlY3VyaXR5X2ZsYWdzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGFjMGJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvc2VjdXJpdHlfZmxhZ3MuaW5jCkBAIC0wLDAgKzEsMTAzIEBACisjIFNldHVwIGV4dHJhIENGTEFHUyBhbmQgTERGTEFHUyB3aGljaCBoYXZlICdzZWN1cml0eScgYmVuZWZpdHMuIFRoZXNlIAorIyBkb24ndCB3b3JrIHVuaXZlcnNhbGx5LCB0aGVyZSBhcmUgcmVjaXBlcyB3aGljaCBjYW4ndCB1c2Ugb25lLCB0aGUgb3RoZXIKKyMgb3IgYm90aCBzbyBhIGJsYWNrbGlzdCBpcyBtYWludGFpbmVkIGhlcmUuIFRoZSBpZGVhIHdvdWxkIGJlIG92ZXIKKyMgdGltZSB0byByZWR1Y2UgdGhpcyBsaXN0IHRvIG5vdGhpbmcuCisjIEZyb20gYSBZb2N0byBQcm9qZWN0IHBlcnNwZWN0aXZlLCB0aGlzIGZpbGUgaXMgaW5jbHVkZWQgYW5kIHRlc3RlZAorIyBpbiB0aGUgRElTVFJPPSJwb2t5LWxzYiIgY29uZmlndXJhdGlvbi4KKworIyBfRk9SVElGWV9TT1VSQ0UgcmVxdWlyZXMgLU8xIG9yIGhpZ2hlciwgc28gZGlzYWJsZSBpbiBkZWJ1ZyBidWlsZHMgYXMgdGhleSB1c2UKKyMgLU8wIHdoaWNoIHRoZW4gcmVzdWx0cyBpbiBhIGNvbXBpbGVyIHdhcm5pbmcuCitsY2xfbWF5YmVfZm9ydGlmeSA9ICIke0BiYXNlX2NvbmRpdGlvbmFsKCdERUJVR19CVUlMRCcsJzEnLCcnLCctRF9GT1JUSUZZX1NPVVJDRT0yJyxkKX0iCisKK1NFQ1VSSVRZX0NGTEFHUyA/PSAiLWZzdGFjay1wcm90ZWN0b3ItYWxsIC1waWUgLWZwaWUgJHtsY2xfbWF5YmVfZm9ydGlmeX0iCitTRUNVUklUWV9OT19QSUVfQ0ZMQUdTID89ICItZnN0YWNrLXByb3RlY3Rvci1hbGwgJHtsY2xfbWF5YmVfZm9ydGlmeX0iCisKK1NFQ1VSSVRZX0xERkxBR1MgPz0gIi1XbCwteixyZWxybywteixub3ciCitTRUNVUklUWV9YX0xERkxBR1MgPz0gIi1XbCwteixyZWxybyIKKworIyBwb3dlcnBjIGRvZXMgbm90IGdldCBvbiB3aXRoIHBpZSBmb3IgcmVhc29ucyBub3QgbG9va2VkIGludG8gYXMgeWV0CitTRUNVUklUWV9DRkxBR1NfcG93ZXJwYyA9ICItZnN0YWNrLXByb3RlY3Rvci1hbGwgJHtsY2xfbWF5YmVfZm9ydGlmeX0iCisjIERlYWwgd2l0aCBwcGMgc3BlY2lmaWMgbGlua2VyIGZhaWx1cmVzIHdoZW4gdXNpbmcgdGhlIGNmbGFncworU0VDVVJJVFlfQ0ZMQUdTX3BuLWRidXNfcG93ZXJwYyA9ICIiCitTRUNVUklUWV9DRkxBR1NfcG4tZGJ1cy1wdGVzdF9wb3dlcnBjID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJtYXRjaGJveF9wb3dlcnBjID0gIiIKKworIyBhcm0gc3BlY2lmaWMgc2VjdXJpdHkgZmxhZyBpc3N1ZXMKK1NFQ1VSSVRZX0NGTEFHU19wbi1sdHRuZy10b29sc19hcm0gPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1hc3BlbGwgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1iZWVjcnlwdCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWJsa3RyYWNlID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tY29yZXV0aWxzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCisjIEN1cmwgc2VlbXMgdG8gY2hlY2sgZm9yIEZPUlRJRllfU09VUkNFIGluIENGTEFHUywgYnV0IGV2ZW4gYXNzaWduZWQKKyMgdG8gQ1BQRkxBR1MgaXQgZ2V0cyBwaWNrZWQgaW50byBDRkxBR1MgaW4gYml0YmFrZS4KKyNUQVJHRVRfQ1BQRkxBR1NfcG4tY3VybCArPSAiLURfRk9SVElGWV9TT1VSQ0U9MiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1jdXBzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tY3VybCA9ICItZnN0YWNrLXByb3RlY3Rvci1hbGwgLXBpZSAtZnBpZSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1kYiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWRpcmVjdGZiID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ2xpYmMgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdsaWJjLWluaXRpYWwgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWVsZnV0aWxzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZW5jaGFudCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWV4cGVjdCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWZsYWMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1mbGV4ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ2NjID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ2NjLXJ1bnRpbWUgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nY2Mtc2FuaXRpemVycyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdkYiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdtcCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdudXRscyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdydWIgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdydWItZWZpID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1ncnViLWVmaS1uYXRpdmUgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdydWItZWZpLXg4Ni1uYXRpdmUgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdydWItZWZpLWk1ODYtbmF0aXZlID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1ncnViLWVmaS14ODYtNjQtbmF0aXZlID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nc3QtcGx1Z2lucy1iYWQgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nc3QtcGx1Z2lucy1nbCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1oYXJmYnV6eiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWtleGVjLXRvb2xzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4taXB0YWJsZXMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJhaW8gPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJjYXAgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJnY2MgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJpZDN0YWcgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJuZXd0ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbGliZ2x1ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbGlicGNhcCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYnBjcmUgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJwcm94eSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWx0dG5nLXVzdCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLW1lc2EgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1tZXNhLWdsID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tb3BlbnNzbCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLW9wZW5zcCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXBwcCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXB5dGhvbiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXB5dGhvbi1pbWFnaW5nID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uLXB5Y3VybCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXB5dGhvbi1zbWFydHBtID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uLW51bXB5ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uMyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXRjbCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXRpZmYgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi12YWxncmluZCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXpsaWIgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKKworIyBUaGVzZSAyIGhhdmUgdGV4dCByZWxjbyBlcnJvcnMgd2l0aCB0aGUgcGllIG9wdGlvbnMgZW5hYmxlZAorU0VDVVJJVFlfQ0ZMQUdTX3BuLWx0cCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXB1bHNlYXVkaW8gPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKKworVEFSR0VUX0NGTEFHU19hcHBlbmQgPSAiICR7U0VDVVJJVFlfQ0ZMQUdTfSIKK1RBUkdFVF9MREZMQUdTX2FwcGVuZCA9ICIgJHtTRUNVUklUWV9MREZMQUdTfSIKKworU0VDVVJJVFlfTERGTEFHU19wbi14Zjg2LXZpZGVvLWZiZGV2ID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKK1NFQ1VSSVRZX0xERkxBR1NfcG4teGY4Ni12aWRlby1pbnRlbCA9ICIke1NFQ1VSSVRZX1hfTERGTEFHU30iCitTRUNVUklUWV9MREZMQUdTX3BuLXhmODYtdmlkZW8tb21hcGZiID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKK1NFQ1VSSVRZX0xERkxBR1NfcG4teGY4Ni12aWRlby1vbWFwID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKK1NFQ1VSSVRZX0xERkxBR1NfcG4teGY4Ni12aWRlby12ZXNhID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKK1NFQ1VSSVRZX0xERkxBR1NfcG4teGY4Ni12aWRlby12bXdhcmUgPSAiJHtTRUNVUklUWV9YX0xERkxBR1N9IgorU0VDVVJJVFlfTERGTEFHU19wbi14c2VydmVyLXhvcmcgPSAiJHtTRUNVUklUWV9YX0xERkxBR1N9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLWJhcmVtZXRhbC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtYmFyZW1ldGFsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGNlNmQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLWJhcmVtZXRhbC5pbmMKQEAgLTAsMCArMSwzMiBAQAorIworIyBiYXJlbWV0YWwgY29uZmlndXJhdGlvbgorIworCitMSUJDRVhURU5TSU9OID0gIiIKKworIyBBZGQgYmFyZW1ldGFsIGxpYmMgb3ZlcnJpZGVzIHRvIHRoZSBvdmVycmlkZXMuCitMSUJDT1ZFUlJJREUgPSAiOmxpYmMtYmFyZW1ldGFsIgorT1ZFUlJJREVTIC49ICIke0xJQkNPVkVSUklERX0iCisKK0FTU1VNRV9QUk9WSURFRCArPSAidmlydHVhbC9saWJjIHZpcnR1YWwvbGliaWNvbnYiCisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmMgPz0gIm11c2wiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpY29udiA/PSAibXVzbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmludGwgPz0gImdldHRleHQiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliaW50bCA/PSAibmF0aXZlc2RrLWdsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxpYmljb252ID89ICJuYXRpdmVzZGstZ2xpYmMiCisKK1VTRV9OTFMgPz0gIm5vIgorSU1BR0VfTElOR1VBUyA9ICIiCitMSUJDX0RFUEVOREVOQ0lFUyA9ICIiCisKK0VYVFJBX09FQ09ORl9wbi1nY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH1fYXBwZW5kID0gIiAtLXdpdGhvdXQtaGVhZGVycyIKK0RFUEVORFNfcmVtb3ZlX3BuLW1ldGEtdG9vbGNoYWluID0gInZpcnR1YWwvbGliYyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnMiCisKK1RBUkdFVF9PUyA9ICJlbGYiCitUQVJHRVRfT1NfYXJtID0gImVhYmkiCisKK1RPT0xDSEFJTl9IT1NUX1RBU0sgPz0gInBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi0ke01BQ0hJTkV9IgorVE9PTENIQUlOX0hPU1RfVEFTS19BVFRFTVBUT05MWSA/PSAiIgorVE9PTENIQUlOX1RBUkdFVF9UQVNLID89ICJsaWJnY2MtZGV2IgorVE9PTENIQUlOX05FRURfQ09ORklHU0lURV9DQUNIRV9yZW1vdmUgPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmMgemxpYiBuY3Vyc2VzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLWdsaWJjLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1nbGliYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ5OTE4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1nbGliYy5pbmMKQEAgLTAsMCArMSw0MCBAQAorIworIyBnbGliYyBzcGVjaWZpYyBjb25maWd1cmF0aW9uCisjCisKK0xJQkNFWFRFTlNJT04gPSAiJHtAWycnLCAnLWdudSddWyhkLmdldFZhcignQUJJRVhURU5TSU9OJywgVHJ1ZSkgb3IgJycpICE9ICcnXX0iCisKKyMgQWRkIGdsaWJjIG92ZXJyaWRlcyB0byB0aGUgb3ZlcnJpZGVzIGZvciBnbGliYy4KK0xJQkNPVkVSUklERSA9ICI6bGliYy1nbGliYyIKK09WRVJSSURFUyAuPSAiJHtMSUJDT1ZFUlJJREV9IgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpY29udiA/PSAiZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliaWNvbnYgPz0gIm5hdGl2ZXNkay1nbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpbnRsID89ICJuYXRpdmVzZGstZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpbnRsID89ICJnbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmMgPz0gImdsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxpYmMgPz0gIm5hdGl2ZXNkay1nbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmMtbG9jYWxlID89ICJnbGliYy1sb2NhbGUiCisKK0NYWEZMQUdTICs9ICItZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4iCisKK0xJQkNfREVQRU5ERU5DSUVTID0gImxpYnNlZ2ZhdWx0IFwKKwkJICAgICBnbGliYyBcCisJCSAgICAgZ2xpYmMtZGJnIFwKKwkJICAgICBnbGliYy1kZXYgXAorCQkgICAgIGdsaWJjLXV0aWxzIFwKKwkJICAgICBnbGliYy10aHJlYWQtZGIgXAorCQkgICAgICR7QGdldF9saWJjX2xvY2FsZXNfZGVwZW5kZW5jaWVzKGQpfSIKKworTElCQ19MT0NBTEVfREVQRU5ERU5DSUVTID0gIlwKKwlnbGliYy1sb2NhbGVkYXRhLWkxOG4gXAorCWdsaWJjLWdjb252LWlibTg1MCBcCisJZ2xpYmMtZ2NvbnYtY3AxMjUyIFwKKwlnbGliYy1nY29udi1pc284ODU5LTEgXAorCWdsaWJjLWdjb252LWlzbzg4NTktMTUiCisKK2RlZiBnZXRfbGliY19sb2NhbGVzX2RlcGVuZGVuY2llcyhkKToKKyAgICBpZiAnbGliYy1sb2NhbGVzJyBpbiAoZC5nZXRWYXIoJ0RJU1RST19GRUFUVVJFUycsIFRydWUpIG9yICcnKS5zcGxpdCgpIDoKKyAgICAgICAgcmV0dXJuIGQuZ2V0VmFyKCdMSUJDX0xPQ0FMRV9ERVBFTkRFTkNJRVMnLCBUcnVlKSBvciAnJworICAgIGVsc2U6CisgICAgICAgIHJldHVybiAnJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLW11c2wuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLW11c2wuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZGQ1OGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtbXVzbC5pbmMKQEAgLTAsMCArMSwyNyBAQAorIworIyBtdXNsIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24KKyMKKworTElCQ0VYVEVOU0lPTiA9ICItbXVzbCIKKworIyBBZGQgdWNsaWJjIG92ZXJyaWRlcyB0byB0aGUgb3ZlcnJpZGVzLgorTElCQ09WRVJSSURFID0gIjpsaWJjLW11c2wiCitPVkVSUklERVMgLj0gIiR7TElCQ09WRVJSSURFfSIKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliYyA/PSAibXVzbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmljb252ID89ICJtdXNsIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliaW50bCA/PSAibXVzbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpbnRsID89ICJuYXRpdmVzZGstZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliaWNvbnYgPz0gIm5hdGl2ZXNkay1nbGliYyIKKworI1VTRV9OTFMgPz0gIm5vIgorCitDWFhGTEFHUyArPSAiLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIgorCitJTUFHRV9MSU5HVUFTID0gIiIKKworTElCQ19ERVBFTkRFTkNJRVMgPSAiXAorICAgIG11c2wgXAorICAgIG11c2wtZGJnIFwKKyAgICBtdXNsLWRldiBcCisgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLXVjbGliYy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtdWNsaWJjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGMzY2RiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLXVjbGliYy5pbmMKQEAgLTAsMCArMSwyOCBAQAorIworIyB1Y2xpYmMgc3BlY2lmaWMgY29uZmlndXJhdGlvbgorIworCitMSUJDRVhURU5TSU9OID0gIi11Y2xpYmMiCisKKyMgQWRkIHVjbGliYyBvdmVycmlkZXMgdG8gdGhlIG92ZXJyaWRlcy4KK0xJQkNPVkVSUklERSA9ICI6bGliYy11Y2xpYmMiCitPVkVSUklERVMgLj0gIiR7TElCQ09WRVJSSURFfSIKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliYyA/PSAidWNsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliaWNvbnYgPz0gImxpYmljb252IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliaW50bCA/PSAiZ2V0dGV4dCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpbnRsID89ICJuYXRpdmVzZGstZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliaWNvbnYgPz0gIm5hdGl2ZXNkay1nbGliYyIKKworVVNFX05MUyA/PSAibm8iCisKK0NYWEZMQUdTICs9ICItZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4iCisKK0lNQUdFX0xJTkdVQVMgPSAiIgorCitMSUJDX0RFUEVOREVOQ0lFUyA9ICJcCisgICAgdWNsaWJjIFwKKyAgICB1Y2xpYmMtZGJnIFwKKyAgICB1Y2xpYmMtZGV2IFwKKyAgICB1Y2xpYmMtdGhyZWFkLWRiIFwKKyAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtZGVmYXVsdC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtZGVmYXVsdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIwNTUyNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbW9kZS1kZWZhdWx0LmluYwpAQCAtMCwwICsxLDc1IEBACisjCisjIERlZmF1bHQgdG9vbGNoYWluIGNvbmZpZ3VyYXRpb24KKyMKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzID0gImJpbnV0aWxzLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsID0gImdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyA9ICJnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9ZysrID0gImdjYy1jcm9zcy0ke1RBUkdFVF9BUkNIfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnMgPSAiZ2NjLXJ1bnRpbWUiCitQUkVGRVJSRURfUFJPVklERVJfZ2RiID0gImdkYiIKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtTREtfUFJFRklYfWJpbnV0aWxzLWNyb3Nzc2RrID89ICJiaW51dGlscy1jcm9zc3Nkay0ke1NES19BUkNIfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7U0RLX1BSRUZJWH1nY2MtaW5pdGlhbCA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1NES19BUkNIfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7U0RLX1BSRUZJWH1nY2MgPSAiZ2NjLWNyb3Nzc2RrLSR7U0RLX0FSQ0h9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtTREtfUFJFRklYfWcrKyA9ICJnY2MtY3Jvc3NzZGstJHtTREtfQVJDSH0iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1NES19QUkVGSVh9Y29tcGlsZXJsaWJzID0gIm5hdGl2ZXNkay1nY2MtcnVudGltZSIKKworIyBEZWZhdWx0IGxpYmMgY29uZmlnCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1mb3ItZ2NjID0gIiR7VENMSUJDfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay0ke1NES19QUkVGSVh9bGliYy1mb3ItZ2NjID89ICJuYXRpdmVzZGstJHtUQ0xJQkN9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtaW5pdGlhbCA9ICIke1RDTElCQ30taW5pdGlhbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay0ke1NES19QUkVGSVh9bGliYy1pbml0aWFsID0gIm5hdGl2ZXNkay0ke1RDTElCQ30taW5pdGlhbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2dldHRleHQgPz89ICJnZXR0ZXh0IgorCitHQ0NWRVJTSU9OID89ICI1LiUiCitTREtHQ0NWRVJTSU9OID89ICIke0dDQ1ZFUlNJT059IgorQklOVVZFUlNJT04gPz0gIjIuMjUlIgorR0RCVkVSU0lPTiA/PSAiNy45JSIKK0dMSUJDVkVSU0lPTiA/PSAiMi4yMiIKK1VDTElCQ1ZFUlNJT04gPz0gIjAuOS4zMytnaXQlIgorTElOVVhMSUJDVkVSU0lPTiA/PSAiNC4xIgorCitQUkVGRVJSRURfVkVSU0lPTl9nY2MgPz0gIiR7R0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0gPz0gIiR7R0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSA/PSAiJHtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2djYy1jcm9zc3Nkay0ke1NES19BUkNIfSA/PSAiJHtTREtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2djYy1jcm9zc3Nkay1pbml0aWFsLSR7U0RLX0FSQ0h9ID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2NjLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0gPz0gIiR7R0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nY2MtcnVudGltZSA/PSAiJHtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2djYy1zYW5pdGl6ZXJzID89ICIke0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWdjYy1ydW50aW1lID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWdjYy1zYW5pdGl6ZXJzID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbGliZ2NjID89ICIke0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbGliZ2NjLWluaXRpYWwgPz0gIiR7R0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9uYXRpdmVzZGstZ2NjID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWxpYmdjYyA/PSAiJHtTREtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX25hdGl2ZXNkay1saWJnY2MtaW5pdGlhbCA/PSAiJHtTREtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2JpbnV0aWxzID89ICIke0JJTlVWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2JpbnV0aWxzLW5hdGl2ZSA/PSAiJHtCSU5VVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9iaW51dGlscy1jcm9zcy0ke1RBUkdFVF9BUkNIfSA/PSAiJHtCSU5VVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9iaW51dGlscy1jcm9zc3Nkay0ke1NES19BUkNIfSA/PSAiJHtCSU5VVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9iaW51dGlscy1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9ID89ICIke0JJTlVWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dkYiA/PSAiJHtHREJWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dkYi1jcm9zcy0ke1RBUkdFVF9BUkNIfSA/PSAiJHtHREJWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dkYi1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9ID89ICIke0dEQlZFUlNJT059IgorCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC1saWJjLWhlYWRlcnMgPz0gIiR7TElOVVhMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9uYXRpdmVzZGstbGludXgtbGliYy1oZWFkZXJzID89ICIke0xJTlVYTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2xpYmMgICAgICAgICAgICAgICAgICAgID89ICIke0dMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nbGliYy1sb2NhbGUgICAgICAgICAgICAgPz0gIiR7R0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dsaWJjLW10cmFjZSAgICAgICAgICAgICA/PSAiJHtHTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2xpYmMtc2NyaXB0cyAgICAgICAgICAgID89ICIke0dMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9uYXRpdmVzZGstZ2xpYmMgICAgICAgICAgPz0gIiR7R0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dsaWJjLWluaXRpYWwgICAgICAgICAgICA/PSAiJHtHTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWdsaWJjLWluaXRpYWwgID89ICIke0dMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlICAgPz0gIiR7R0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX3VjbGliYyAgICAgICAgICAgICAgICAgICA/PSAiJHtVQ0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX3VjbGliYy1pbml0aWFsICAgICAgICAgICA/PSAiJHtVQ0xJQkNWRVJTSU9OfSIKKyMgZG9uJ3QgdXNlIHZlcnNpb24gZWFybGllciB0aGFuIDEuNCBmb3IgZ3ppcC1uYXRpdmUsIGFzIGl0J3MgbmVjZXNzYXJ5IGZvcgorIyBzb21lIHBhY2thZ2VzIHVzaW5nIGFuIGFyY2hpdmUgZm9ybWF0IGluY29tcGF0aWJsZSB3aXRoIGVhcmxpZXIgZ3ppcAorUFJFRkVSUkVEX1ZFUlNJT05fZ3ppcC1uYXRpdmUgPz0gIjEuNiIKKworIyBTZXR1cCBzdWl0YWJsZSB0b29sY2hhaW4gZmxhZ3MKK3JlcXVpcmUgY29uZi9kaXN0cm8vaW5jbHVkZS9hcy1uZWVkZWQuaW5jCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3Vwc3RyZWFtX3RyYWNraW5nLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3Vwc3RyZWFtX3RyYWNraW5nLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmE1ZTZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdXBzdHJlYW1fdHJhY2tpbmcuaW5jCkBAIC0wLDAgKzEsMjQgQEAKKyMgTk9URTogVEhJUyBGSUxFIElTIERFUFJFQ0FURUQuIFBsZWFzZSBhZGQgbmV3IGVudHJpZXMgdG8gdGhlIHJlY2lwZXMgdGhlbXNlbHZlcy4KKyMKKyMgdXBzdHJlYW1fdHJhY2tpbmcuaW5jIC0gVGhpcyBmaWxlIGNvbnRhaW5zIGRhdGEgdGhhdCB0cmFja3MgdGhlCisjIHVwc3RyZWFtIHByb2plY3QgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gcmVjaXBlLiBUaGlzIGxpc3QgaXMgbmVlZGVkCisjIGZvciByZWNpcGVzIHRoYXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYW4gbm90IGJlIGF1dG9tYWdpY2FsbHkgZGlzY292ZXJlZC4KKyMgQXMgd2UgYXV0b21hdGUgdGhpcyBjaGVja2luZywgdGhpcyBmaWxlIHdpbGwgc2xvd2VkIGJlIHJlZHVjZWQuCisjCisjIFRoaXMgZGF0YSBpcyB1c2VkIGJ5IHRoZSBwYWNrYWdlIHJlcG9ydGluZyBzeXN0ZW0gKHBhY2thZ2VzLnlvY3RvcHJvamVjdC5vcmcpCisjCisjIFRoZSBmb3JtYXQgaXMgYXMgYSBiaXRiYWtlIHZhcmlhYmxlIG92ZXJyaWRlIGZvciBlYWNoIHJlY2lwZQorIworIyAgICAgICBSRUNJUEVfVVBTVFJFQU1fVkVSU0lPTl9wbi08cmVjaXBlIG5hbWU+ID0gIjx2ZXJzaW9uPiIKKyMgICAgICAgUkVDSVBFX1VQU1RSRUFNX0RBVEVfcG4tPHJlY2lwZSBuYW1lPiA9ICJNbW0gZGQsIFlZWVkiCisjCSAtIFRoaXMgaXMgdGhlIGxhdGVzdCB1cHN0cmVhbSB2ZXJzaW9uIGFuZCBkYXRlCisjICAgICAgIFJFQ0lQRV9OT19VUERBVEVfUkVBU09OX3BuLTxyZWNpcGUgbmFtZT4gPSAiPGZyZWUgZm9ybSB0ZXh0PiIKKyMgICAgICAgIC0gVXNlZCB0byBub3RlIHdoeSBhIHJlY2lwZSBzaG91bGQgbm90IGJlIHVwZ3JhZGVkIHRvIGEgbmV3ZXIgdmVyc29pbgorIyAgICAgICBDSEVDS19EQVRFX3BuLTxyZWNpcGUgbmFtZT4gPSAiTW1tIGRkLCBZWVlZIgorIyAgICAgICAgLSBUaGlzIGlzIHRoZSBkYXRlIHRoYXQgdXBzdHJlYW0gd2FzIGxhc3QgbWFudWFsbHkgY2hlY2tlZCBvdmVyIHRpbWUKKyMgICAgICAgICAgdGhpcyBzaG91bGQgYmUgcmVtb3ZlZCBhcyB3ZSBhdXRvbWF0ZSB0aGlzIGNoZWNraW5nCisjCisjIFRoZXNlIGVudHJpZXMgd2lsbCBzbG93bHkgYmUgcmVtb3ZlZCBhcyB3ZSBjYW4gYXV0b21hdGljYWxseSBkZXRlcm1pbmUKKyMgdGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmlsZS4gIFNvIGZvciBleGlzdGluZyByZWNpcGVzIHRoYXQgd2UgY2FuIGdldCAKKyMgZnJvbSB0aGUgUmVjaXBlIHJlcG9ydGluZyBzeXN0ZW0sIHRoZSBlbnRyaWVzIGhlcmUgY2FuIGJlIHJlbW92ZWQuCisjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS93b3JsZC1icm9rZW4uaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvd29ybGQtYnJva2VuLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjBjMmRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvd29ybGQtYnJva2VuLmluYwpAQCAtMCwwICsxLDUgQEAKKyMKKyMgRXhjbHVkZSBrbm93biBicm9rZW4gcGFja2FnZXMKKyMKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9kb2N1bWVudGF0aW9uLmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9kb2N1bWVudGF0aW9uLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc1YWI2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2RvY3VtZW50YXRpb24uY29uZgpAQCAtMCwwICsxLDQ1OSBAQAorIyB0aGlzIGZpbGUgaG9sZHMgZG9jdW1lbnRhdGlvbiBmb3Iga25vd24ga2V5cywgcG9zc2libGUgdmFsdWVzIGFuZAorIyB0aGVpciBtZWFuaW5ncy4gUGxlYXNlIHVwZGF0ZSwgY29ycmVjdCBhbmQgZXh0ZW5kIHRoaXMgZG9jdW1lbnRhdGlvbi4KKyMgTWFpbCB5b3VyIGNoYW5nZXMgdG8gb3BlbmVtYmVkZGVkLWRldmVsQG9wZW5lbWJlZGRlZC5vcmcKKworIyBERVNDUklQVElPTlMgRk9SIFRBU0tTICMKKworZG9fYm9vdGltZ1tkb2NdID0gIkNyZWF0ZXMgYSBib290YWJsZSBsaXZlIGltYWdlIgorZG9fYnVpbGRbZG9jXSA9ICJEZWZhdWx0IHRhc2sgZm9yIGEgcmVjaXBlIC0gZGVwZW5kcyBvbiBhbGwgb3RoZXIgbm9ybWFsIHRhc2tzIHJlcXVpcmVkIHRvICdidWlsZCcgYSByZWNpcGUiCitkb19idW5kbGVfaW5pdHJhbWZzW2RvY10gPSAiQ29tYmluZXMgYW4gaW5pdGlhbCByYW1kaXNrIGltYWdlIGFuZCBrZXJuZWwgdG9nZXRoZXIgdG8gZm9ybSBhIHNpbmdsZSBpbWFnZSIKK2RvX2NoZWNrdXJpW2RvY10gPSAiVmFsaWRhdGVzIHRoZSBTUkNfVVJJIHZhbHVlIgorZG9fY2hlY2t1cmlhbGxbZG9jXSA9ICJWYWxpZGF0ZXMgdGhlIFNSQ19VUkkgdmFsdWUgZm9yIGFsbCByZWNpcGVzIHJlcXVpcmVkIHRvIGJ1aWxkIGEgdGFyZ2V0IgorZG9fY2xlYW5bZG9jXSA9ICJSZW1vdmVzIGFsbCBvdXRwdXQgZmlsZXMgZm9yIGEgdGFyZ2V0IgorZG9fY2xlYW5hbGxbZG9jXSA9ICJSZW1vdmVzIGFsbCBvdXRwdXQgZmlsZXMsIHNoYXJlZCBzdGF0ZSBjYWNoZSwgYW5kIGRvd25sb2FkZWQgc291cmNlIGZpbGVzIGZvciBhIHRhcmdldCIKK2RvX2NsZWFuc3N0YXRlW2RvY10gPSAiUmVtb3ZlcyBhbGwgb3V0cHV0IGZpbGVzIGFuZCBzaGFyZWQgc3RhdGUgY2FjaGUgZm9yIGEgdGFyZ2V0IgorZG9fY29tcGlsZVtkb2NdID0gIkNvbXBpbGVzIHRoZSBzb3VyY2UgaW4gdGhlIGNvbXBpbGF0aW9uIGRpcmVjdG9yeSIKK2RvX2NvbXBpbGVfa2VybmVsbW9kdWxlc1tkb2NdID0gIkNvbXBpbGVzIGxvYWRhYmxlIG1vZHVsZXMgZm9yIHRoZSBMaW51eCBrZXJuZWwiCitkb19jb21waWxlX3B0ZXN0X2Jhc2VbZG9jXSA9ICJDb21waWxlcyB0aGUgcnVudGltZSB0ZXN0IHN1aXRlIGluY2x1ZGVkIGluIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCIKK2RvX2NvbmZpZ3VyZVtkb2NdID0gIkNvbmZpZ3VyZXMgdGhlIHNvdXJjZSBieSBlbmFibGluZyBhbmQgZGlzYWJsaW5nIGFueSBidWlsZC10aW1lIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCIKK2RvX2NvbmZpZ3VyZV9wdGVzdF9iYXNlW2RvY10gPSAiQ29uZmlndXJlcyB0aGUgcnVudGltZSB0ZXN0IHN1aXRlIGluY2x1ZGVkIGluIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCIKK2RvX2RlcGxveVtkb2NdID0gIldyaXRlcyBkZXBsb3lhYmxlIG91dHB1dCBmaWxlcyB0byB0aGUgZGVwbG95IGRpcmVjdG9yeSIKK2RvX2RldnB5c2hlbGxbZG9jXSA9ICJTdGFydHMgYW4gaW50ZXJhY3RpdmUgUHl0aG9uIHNoZWxsIGZvciBkZXZlbG9wbWVudC9kZWJ1Z2dpbmciCitkb19kZXZzaGVsbFtkb2NdID0gIlN0YXJ0cyBhIHNoZWxsIHdpdGggdGhlIGVudmlyb25tZW50IHNldCB1cCBmb3IgZGV2ZWxvcG1lbnQvZGVidWdnaW5nIgorZG9fZGlmZmNvbmZpZ1tkb2NdID0gIkNvbXBhcmVzIHRoZSBvbGQgYW5kIG5ldyBjb25maWcgZmlsZXMgYWZ0ZXIgcnVubmluZyBkb19tZW51Y29uZmlnIGZvciB0aGUga2VybmVsIgorZG9fZmV0Y2hbZG9jXSA9ICJGZXRjaGVzIHRoZSBzb3VyY2UgY29kZSIKK2RvX2ZldGNoYWxsW2RvY10gPSAiRmV0Y2hlcyBhbGwgcmVtb3RlIHNvdXJjZXMgcmVxdWlyZWQgdG8gYnVpbGQgYSB0YXJnZXQiCitkb19nZW5lcmF0ZV9xdF9jb25maWdfZmlsZVtkb2NdID0gIldyaXRlcyBhIHF0LmNvbmYgZmlsZSBmb3IgYnVpbGRpbmcgYSBRdC1iYXNlZCBhcHBsaWNhdGlvbiIKK2RvX2luc3RhbGxbZG9jXSA9ICJDb3BpZXMgZmlsZXMgZnJvbSB0aGUgY29tcGlsYXRpb24gZGlyZWN0b3J5IHRvIGEgaG9sZGluZyBhcmVhIgorZG9faW5zdGFsbF9wdGVzdF9iYXNlW2RvY10gPSAiQ29waWVzIHRoZSBydW50aW1lIHRlc3Qgc3VpdGUgZmlsZXMgZnJvbSB0aGUgY29tcGlsYXRpb24gZGlyZWN0b3J5IHRvIGEgaG9sZGluZyBhcmVhIgorZG9fa2VybmVsX2NoZWNrb3V0W2RvY10gPSAiQ2hlY2tzIG91dCBzb3VyY2UvbWV0YSBicmFuY2hlcyBmb3IgYSBsaW51eC15b2N0byBzdHlsZSBrZXJuZWwiCitkb19rZXJuZWxfY29uZmlnY2hlY2tbZG9jXSA9ICJWYWxpZGF0ZXMgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciBhIGxpbnV4LXlvY3RvIHN0eWxlIGtlcm5lbCIKK2RvX2tlcm5lbF9jb25maWdtZVtkb2NdID0gIkFzc2VtYmxlcyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIGEgbGludXgteW9jdG8gc3R5bGUga2VybmVsIgorZG9fa2VybmVsX2xpbmtfdm1saW51eFtkb2NdID0gIkNyZWF0ZXMgYSBzeW1ib2xpYyBsaW5rIGluIGFyY2gvJGFyY2gvYm9vdCBmb3Igdm1saW51eCBrZXJuZWwgaW1hZ2VzIgorZG9fbGlzdHRhc2tzW2RvY10gPSAiTGlzdHMgYWxsIGRlZmluZWQgdGFza3MgZm9yIGEgdGFyZ2V0IgorZG9fbWVudWNvbmZpZ1tkb2NdID0gIlJ1bnMgJ21ha2UgbWVudWNvbmZpZycgZm9yIHRoZSBrZXJuZWwiCitkb19wYWNrYWdlW2RvY10gPSAiQW5hbHl6ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIGhvbGRpbmcgYXJlYSBhbmQgc3BsaXRzIGl0IGludG8gc3Vic2V0cyBiYXNlZCBvbiBhdmFpbGFibGUgcGFja2FnZXMgYW5kIGZpbGVzIgorZG9fcGFja2FnZV9pbmRleFtkb2NdID0gIkNyZWF0ZXMgb3IgdXBkYXRlcyB0aGUgaW5kZXggaW4gdGhlIFBhY2thZ2UgRmVlZCBhcmVhIgorZG9fcGFja2FnZV9xYVtkb2NdID0gIlJ1bnMgUUEgY2hlY2tzIG9uIHBhY2thZ2VkIGZpbGVzIgorZG9fcGFja2FnZV93cml0ZV9kZWJbZG9jXSA9ICJDcmVhdGVzIHRoZSBhY3R1YWwgREVCIHBhY2thZ2VzIGFuZCBwbGFjZXMgdGhlbSBpbiB0aGUgUGFja2FnZSBGZWVkIGFyZWEiCitkb19wYWNrYWdlX3dyaXRlX2lwa1tkb2NdID0gIkNyZWF0ZXMgdGhlIGFjdHVhbCBJUEsgcGFja2FnZXMgYW5kIHBsYWNlcyB0aGVtIGluIHRoZSBQYWNrYWdlIEZlZWQgYXJlYSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW2RvY10gPSAiQ3JlYXRlcyB0aGUgYWN0dWFsIFJQTSBwYWNrYWdlcyBhbmQgcGxhY2VzIHRoZW0gaW4gdGhlIFBhY2thZ2UgRmVlZCBhcmVhIgorZG9fcGFja2FnZV93cml0ZV90YXJbZG9jXSA9ICJDcmVhdGVzIHRhciBhcmNoaXZlcyBmb3IgcGFja2FnZXMgYW5kIHBsYWNlcyB0aGVtIGluIHRoZSBQYWNrYWdlIEZlZWQgYXJlYSIKK2RvX3BhY2thZ2VkYXRhW2RvY10gPSAiQ3JlYXRlcyBwYWNrYWdlIG1ldGFkYXRhIHVzZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbSB0byBnZW5lcmF0ZSB0aGUgZmluYWwgcGFja2FnZXMiCitkb19wYXRjaFtkb2NdID0gIkxvY2F0ZXMgcGF0Y2ggZmlsZXMgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgc291cmNlIGNvZGUiCitkb19wb3B1bGF0ZV9saWNbZG9jXSA9ICJXcml0ZXMgbGljZW5zZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHJlY2lwZSB0aGF0IGlzIGNvbGxlY3RlZCBsYXRlciB3aGVuIHRoZSBpbWFnZSBpcyBjb25zdHJ1Y3RlZCIKK2RvX3BvcHVsYXRlX3Nka1tkb2NdID0gIkNyZWF0ZXMgdGhlIGZpbGUgYW5kIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGFuIGluc3RhbGxhYmxlIFNESyIKK2RvX3BvcHVsYXRlX3N5c3Jvb3RbZG9jXSA9ICJDb3BpZXMgYSBzdWJzZXQgb2YgZmlsZXMgaW5zdGFsbGVkIGJ5IGRvX2luc3RhbGwgaW50byB0aGUgc3lzcm9vdCBpbiBvcmRlciB0byBtYWtlIHRoZW0gYXZhaWxhYmxlIHRvIG90aGVyIHJlY2lwZXMiCitkb19ybV93b3JrW2RvY10gPSAiUmVtb3ZlcyB3b3JrIGZpbGVzIGFmdGVyIHRoZSBidWlsZCBzeXN0ZW0gaGFzIGZpbmlzaGVkIHdpdGggdGhlbSIKK2RvX3JtX3dvcmtfYWxsW2RvY10gPSAiVG9wLWxldmVsIHRhc2sgZm9yIHJlbW92aW5nIHdvcmsgZmlsZXMgYWZ0ZXIgdGhlIGJ1aWxkIHN5c3RlbSBoYXMgZmluaXNoZWQgd2l0aCB0aGVtIgorZG9fcm9vdGZzW2RvY10gPSAiQ3JlYXRlcyB0aGUgcm9vdCBmaWxlc3lzdGVtIChmaWxlIGFuZCBkaXJlY3Rvcnkgc3RydWN0dXJlKSBmb3IgYW4gaW1hZ2UiCitkb19zYXZlZGVmY29uZmlnW2RvY10gPSAiQ3JlYXRlcyBhIG1pbmltYWwgTGludXgga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSIKK2RvX3NpemVjaGVja1tkb2NdID0gIkNoZWNrcyB0aGUgc2l6ZSBvZiB0aGUga2VybmVsIGltYWdlIGFnYWluc3QgS0VSTkVMX0lNQUdFX01BWFNJWkUgKGlmIHNldCkiCitkb19zcGR4W2RvY10gPSAiQSBidWlsZCBzdGFnZSB0aGF0IHRha2VzIHRoZSBzb3VyY2UgY29kZSBhbmQgc2NhbnMgaXQgb24gYSByZW1vdGUgRk9TU09MT0dZIHNlcnZlciBpbiBvcmRlciB0byBwcm9kdWNlIGFuIFNQRFggZG9jdW1lbnQiCitkb19zdHJpcFtkb2NdID0gIlN0cmlwcyB1bm5lZWRlZCBzZWN0aW9ucyBvdXQgb2YgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSIKK2RvX3Rlc3RpbWFnZVtkb2NdID0gIkJvb3RzIGFuIGltYWdlIGFuZCBwZXJmb3JtcyBydW50aW1lIHRlc3RzIHdpdGhpbiB0aGUgaW1hZ2UiCitkb190ZXN0aW1hZ2VfYXV0b1tkb2NdID0gIkJvb3RzIGFuIGltYWdlIGFuZCBwZXJmb3JtcyBydW50aW1lIHRlc3RzIHdpdGhpbiB0aGUgaW1hZ2UgaW1tZWRpYXRlbHkgYWZ0ZXIgaXQgaGFzIGJlZW4gYnVpbHQiCitkb190ZXN0c2RrW2RvY10gPSAiSW5zdGFsbHMgYW4gU0RLIGFuZCBwZXJmb3JtcyBydW50aW1lIHRlc3RzIG9uIHRoZSB0b29scyBpbnN0YWxsZWQgYnkgaXQiCitkb191Ym9vdF9ta2ltYWdlW2RvY10gPSAiQ3JlYXRlcyBhIHVJbWFnZSBmaWxlIGZyb20gdGhlIGtlcm5lbCBmb3IgdGhlIFUtQm9vdCBib290bG9hZGVyIgorZG9fdW5wYWNrW2RvY10gPSAiVW5wYWNrcyB0aGUgc291cmNlIGNvZGUgaW50byBhIHdvcmtpbmcgZGlyZWN0b3J5IgorZG9fdmFsaWRhdGVfYnJhbmNoZXNbZG9jXSA9ICJFbnN1cmVzIHRoYXQgdGhlIHNvdXJjZS9tZXRhIGJyYW5jaGVzIGFyZSBvbiB0aGUgbG9jYXRpb25zIHNwZWNpZmllZCBieSB0aGVpciBTUkNSRVYgdmFsdWVzIGZvciBhIGxpbnV4LXlvY3RvIHN0eWxlIGtlcm5lbCIKK2RvX3ZtaW1nW2RvY10gPSAiQ3JlYXRlcyBhbiBpbWFnZSBmb3IgdXNlIHdpdGggVk13YXJlIG9yIFZpcnR1YWxCb3ggY29tcGF0aWJsZSB2aXJ0dWFsIG1hY2hpbmUgaG9zdHMgKGJhc2VkIG9uIElNQUdFX0ZTVFlQRVMgZWl0aGVyIC52bWRrIG9yIC52ZGkpIgorCisjIERFU0NSSVBUSU9OUyBGT1IgVkFSSUFCTEVTICMKKworI0EKKworQUxMT1dfRU1QVFlbZG9jXSA9ICJTcGVjaWZpZXMgaWYgYW4gb3V0cHV0IHBhY2thZ2Ugc2hvdWxkIHN0aWxsIGJlIHByb2R1Y2VkIGlmIGl0IGlzIGVtcHR5LiIKK0FMVEVSTkFUSVZFW2RvY10gPSAiTGlzdHMgY29tbWFuZHMgaW4gYSBwYWNrYWdlIHRoYXQgbmVlZCBhbiBhbHRlcm5hdGl2ZSBiaW5hcnkgbmFtaW5nIHNjaGVtZS4iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZG9jXSA9ICJVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIG1hcCBkdXBsaWNhdGVkIGNvbW1hbmRzIHRvIGFjdHVhbCBsb2NhdGlvbnMuIgorQUxURVJOQVRJVkVfUFJJT1JJVFlbZG9jXSA9ICJVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIGNyZWF0ZSBkZWZhdWx0IHByaW9yaXRpZXMgZm9yIGR1cGxpY2F0ZWQgY29tbWFuZHMuIgorQUxURVJOQVRJVkVfVEFSR0VUW2RvY10gPSAiVXNlZCBieSB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSB0byBjcmVhdGUgZGVmYXVsdCBsaW5rIGxvY2F0aW9ucyBmb3IgZHVwbGljYXRlZCBjb21tYW5kcy4iCitBU1NVTUVfUFJPVklERURbZG9jXSA9ICJMaXN0IG9mIHBhY2thZ2VzIChyZWNpcGVzIGFjdHVhbGx5KSB0aGF0IGFyZSBhc3N1bWVkIHRvIGJlIGltcGxpY2l0bHkgYXZhaWxhYmxlLiBCaXRCYWtlIGRvZXMgbm90IGJ1aWxkIHRoZXNlIHBhY2thZ2VzLiIKK0FTU1VNRV9TSExJQlNbZG9jXSA9ICJMaXN0IG9mIHNobGliOnBhY2thZ2VbX3ZlcnNpb25dIG1hcHBpbmdzLiBVc2VmdWwgZm9yIGxpYiBwYWNrYWdlcyBpbiBBU1NVTUVfUFJPVklERUQsIGZvciB3aGljaCBhdXRvbWF0aWMgc2hsaWIgZGVwZW5kZW5jeSB0cmFja2luZyBkb2VzIG5vdCB3b3JrLiIKK0FVVEhPUltkb2NdID0gIkVtYWlsIGFkZHJlc3MgdXNlZCB0byBjb250YWN0IHRoZSBvcmlnaW5hbCBhdXRob3IocykgaW4gb3JkZXIgdG8gc2VuZCBwYXRjaGVzIGFuZCBmb3J3YXJkIGJ1Z3MuIgorQVVUT19TWVNMSU5VWE1FTlVbZG9jXSA9ICJFbmFibGVzIGNyZWF0aW5nIGFuIGF1dG9tYXRpYyBtZW51IGZvciB0aGUgc3lzbGludXggYm9vdGxvYWRlci4iCitBVVRPUkVWW2RvY10gPSAiV2hlbiBTUkNSRVYgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlLCBpdCBzcGVjaWZpZXMgdG8gdXNlIHRoZSBsYXRlc3Qgc291cmNlIHJldmlzaW9uIGluIHRoZSByZXBvc2l0b3J5LiIKKworI0IKKworQltkb2NdID0gIlRoZSBCdWlsZCBEaXJlY3RvcnkuIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHBsYWNlcyBnZW5lcmF0ZWQgb2JqZWN0cyBpbnRvIHRoZSBCdWlsZCBEaXJlY3RvcnkgZHVyaW5nIGEgcmVjaXBlJ3MgYnVpbGQgcHJvY2Vzcy4iCitCQURfUkVDT01NRU5EQVRJT05TW2RvY10gPSAiQSBsaXN0IG9mIHBhY2thZ2VzIG5vdCB0byBpbnN0YWxsIGRlc3BpdGUgYmVpbmcgcmVjb21tZW5kZWQgYnkgYSByZWNpcGUuIFN1cHBvcnQgZm9yIHRoaXMgdmFyaWFibGUgZXhpc3RzIG9ubHkgd2hlbiB1c2luZyB0aGUgSVBLIG9yIFJQTSBwYWNrYWdpbmcgYmFja2VuZHMuIgorQkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZW2RvY10gPSAiRGVmaW5lcyBob3cgQml0QmFrZSBoYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgYW4gYXBwZW5kIGZpbGUgKC5iYmFwcGVuZCkgaGFzIG5vIGNvcnJlc3BvbmRpbmcgcmVjaXBlIGZpbGUgKC5iYikuIgorQkJfRElTS01PTl9ESVJTW2RvY10gPSAiTW9uaXRvcnMgZGlzayBzcGFjZSBhbmQgYXZhaWxhYmxlIGlub2RlcyBkdXJpbmcgdGhlIGJ1aWxkIGFuZCBhbGxvd3MgeW91IHRvIGNvbnRyb2wgdGhlIGJ1aWxkIGJhc2VkIG9uIHRoZXNlIHBhcmFtZXRlcnMuIgorQkJfRElTS01PTl9XQVJOSU5URVJWQUxbZG9jXSA9ICJEZWZpbmVzIHRoZSBkaXNrIHNwYWNlIGFuZCBmcmVlIGlub2RlIHdhcm5pbmcgaW50ZXJ2YWxzLiBUbyBzZXQgdGhlc2UgaW50ZXJ2YWxzLCBkZWZpbmUgdGhlIHZhcmlhYmxlIGluIHRoZSBjb25mL2xvY2FsLmNvbmYgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKK0JCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMU1tkb2NdID0gIkNhdXNlcyB0YXJiYWxscyBvZiB0aGUgR2l0IHJlcG9zaXRvcmllcyB0byBiZSBwbGFjZWQgaW4gdGhlIERMX0RJUiBkaXJlY3RvcnkuIgorQkJfTlVNQkVSX1RIUkVBRFNbZG9jXSA9ICJUaGUgbWF4aW11bSBudW1iZXIgb2YgdGFza3MgQml0QmFrZSBzaG91bGQgcnVuIGluIHBhcmFsbGVsIGF0IGFueSBvbmUgdGltZS4gQSBnb29kIHJ1bGUgb2YgdGh1bWIgaXMgdG8gc2V0IHRoaXMgdmFyaWFibGUgdG8gdHdpY2UgdGhlIG51bWJlciBvZiBjb3Jlcy4iCitCQkNMQVNTRVhURU5EW2RvY10gPSAiQWxsb3dzIHlvdSB0byBleHRlbmQgYSByZWNpcGUgc28gdGhhdCBpdCBidWlsZHMgdmFyaWFudHMgb2YgdGhlIHNvZnR3YXJlLiBDb21tb24gdmFyaWFudHMgZm9yIHJlY2lwZXMgYXJlICduYXRpdmUnLCAnY3Jvc3MnLCAnbmF0aXZlc2RrJyBhbmQgbXVsdGlsaWJzLiIKK0JCRklMRV9DT0xMRUNUSU9OU1tkb2NdID0gIkxpc3RzIHRoZSBuYW1lcyBvZiBjb25maWd1cmVkIGxheWVycy4gVGhlc2UgbmFtZXMgYXJlIHVzZWQgdG8gZmluZCB0aGUgb3RoZXIgQkJGSUxFXyogdmFyaWFibGVzLiIKK0JCRklMRV9QQVRURVJOW2RvY10gPSAiVmFyaWFibGUgdGhhdCBleHBhbmRzIHRvIG1hdGNoIGZpbGVzIGZyb20gQkJGSUxFUyBpbiBhIHBhcnRpY3VsYXIgbGF5ZXIuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgbGF5ZXIuY29uZiBmaWxlIGFuZCBtdXN0IGJlIHN1ZmZpeGVkIHdpdGggdGhlIG5hbWUgb2YgYSBsYXllci4iCitCQkZJTEVfUFJJT1JJVFlbZG9jXSA9ICJBc3NpZ25zIHRoZSBwcmlvcml0eSBmb3IgcmVjaXBlIGZpbGVzIGluIGVhY2ggbGF5ZXIuIFNldHRpbmcgdGhpcyB2YXJpYWJsZSBhbGxvd3MgeW91IHRvIHByaW9yaXRpemUgYSBsYXllciBhZ2FpbnN0IG90aGVyIGxheWVycyB0aGF0IGNvbnRhaW4gdGhlIHNhbWUgcmVjaXBlLiIKK0JCRklMRVNbZG9jXSA9ICJMaXN0IG9mIHJlY2lwZSBmaWxlcyB1c2VkIGJ5IEJpdEJha2UgdG8gYnVpbGQgc29mdHdhcmUuIgorQkJJTkNMVURFTE9HU1tkb2NdID0gIlZhcmlhYmxlIHRoYXQgY29udHJvbHMgaG93IEJpdEJha2UgZGlzcGxheXMgbG9ncyBvbiBidWlsZCBmYWlsdXJlLiIKK0JCSU5DTFVERUxPR1NfTElORVNbZG9jXSA9ICJBbW91bnQgb2YgbG9nIGxpbmVzIHByaW50ZWQgb24gZmFpbHVyZS4iCitCQkxBWUVSU1tkb2NdID0gIkxpc3RzIHRoZSBsYXllcnMgdG8gZW5hYmxlIGR1cmluZyB0aGUgYnVpbGQuIFRoaXMgdmFyaWFibGUgaXMgZGVmaW5lZCBpbiB0aGUgYmJsYXllcnMuY29uZiBjb25maWd1cmF0aW9uIGZpbGUuIgorQkJMQVlFUlNfTk9OX1JFTU9WQUJMRVtkb2NdID0gIkxpc3RzIGNvcmUgbGF5ZXJzIHRoYXQgY2Fubm90IGJlIHJlbW92ZWQgZnJvbSB0aGUgYmJsYXllcnMuY29uZiBmaWxlLiIKK0JCTUFTS1tkb2NdID0gIlByZXZlbnRzIEJpdEJha2UgZnJvbSBwcm9jZXNzaW5nIHNwZWNpZmljIHJlY2lwZXMgb3IgcmVjaXBlIGFwcGVuZCBmaWxlcy4gVXNlIHRoZSBCQk1BU0sgdmFyaWFibGUgZnJvbSB3aXRoaW4gY29uZi9sb2NhbC5jb25mLiIKK0JCUEFUSFtkb2NdID0gIlVzZWQgYnkgQml0QmFrZSB0byBsb2NhdGUgLmJiY2xhc3MgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoaXMgdmFyaWFibGUgaXMgYW5hbG9nb3VzIHRvIHRoZSBQQVRIIHZhcmlhYmxlLiIKK0JCU0VSVkVSW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBzZXJ2ZXIgdGhhdCBydW5zIG1lbW9yeS1yZXNpZGVudCBCaXRCYWtlLiIKK0JJTkNPTkZJR19HTE9CW2RvY10gPSAiV2hlbiBpbmhlcml0aW5nIGJpbmNvbmZpZy5iYmNsYXNzIGZyb20gYSByZWNpcGUsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGEgd2lsZGNhcmQgZm9yIGNvbmZpZ3VyYXRpb24gc2NyaXB0cyB0aGF0IG5lZWQgZWRpdGluZy4iCitCUFtkb2NdID0gIlRoZSBiYXNlIHJlY2lwZSBuYW1lIGFuZCB2ZXJzaW9uIGJ1dCB3aXRob3V0IGFueSBzcGVjaWFsIHJlY2lwZSBuYW1lIHN1ZmZpeCAoaS5lLiAtbmF0aXZlLCBsaWI2NC0sIGFuZCBzbyBmb3J0aCkuIEJQIGlzIGNvbXByaXNlZCBvZiAke0JQTn0tJHtQVn0iCitCUE5bZG9jXSA9ICJUaGUgYmFyZSBuYW1lIG9mIHRoZSByZWNpcGUuIFRoaXMgdmFyaWFibGUgaXMgYSB2ZXJzaW9uIG9mIHRoZSBQTiB2YXJpYWJsZSBidXQgcmVtb3ZlcyBjb21tb24gc3VmZml4ZXMgYW5kIHByZWZpeGVzLiIKK0JVR1RSQUNLRVJbZG9jXSA9ICJTcGVjaWZpZXMgYSBVUkwgZm9yIGFuIHVwc3RyZWFtIGJ1ZyB0cmFja2luZyB3ZWJzaXRlIGZvciBhIHJlY2lwZS4iCitCVUlMRF9BUkNIW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIGJ1aWxkaW5nIGFyY2hpdGVjdHVyZSAoZS5nLiBpNjg2KS4iCitCVUlMRF9PU1tkb2NdID0gIlRoZSBvcGVyYXRpbmcgc3lzdGVtIChpbiBsb3dlciBjYXNlKSBvZiB0aGUgYnVpbGRpbmcgYXJjaGl0ZWN0dXJlIChlLmcuIGxpbnV4KS4iCitCVUlMRERJUltkb2NdID0gIlBvaW50cyB0byB0aGUgbG9jYXRpb24gb2YgdGhlIEJ1aWxkIERpcmVjdG9yeS4iCitCVUlMRFNUQVRTX0JBU0VbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBob2xkcyBidWlsZCBzdGF0aXN0aWNzIHdoZW4geW91IHVzZSBhbmQgZW5hYmxlIHRoZSBidWlsZHN0YXRzIGNsYXNzLiIKK0JVU1lCT1hfU1BMSVRfU1VJRFtkb2NdID0gIkZvciB0aGUgQnVzeUJveCByZWNpcGUsIHNwZWNpZmllcyB3aGV0aGVyIHRvIHNwbGl0IHRoZSBvdXRwdXQgZXhlY3V0YWJsZSBmaWxlIGludG8gdHdvIHBhcnRzOiBvbmUgZm9yIGZlYXR1cmVzIHRoYXQgcmVxdWlyZSBzZXR1aWQgcm9vdCwgYW5kIG9uZSBmb3IgdGhlIHJlbWFpbmluZyBmZWF0dXJlcy4iCisKKyNDCisKK0NBQ0hFW2RvY10gID0gIlRoZSBkaXJlY3RvcnkgaG9sZGluZyB0aGUgY2FjaGUgb2YgdGhlIG1ldGFkYXRhLiIKK0NGTEFHU1tkb2NdID0gIkZsYWdzIHBhc3NlZCB0byB0aGUgQyBjb21waWxlciBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIFRoaXMgdmFyaWFibGUgZXZhbHVhdGVzIHRvIHRoZSBzYW1lIGFzIFRBUkdFVF9DRkxBR1MuIgorQ0xBU1NPVkVSUklERVtkb2NdID0gIkFuIGludGVybmFsIHZhcmlhYmxlIHNwZWNpZnlpbmcgdGhlIHNwZWNpYWwgY2xhc3Mgb3ZlcnJpZGUgdGhhdCBzaG91bGQgY3VycmVudGx5IGFwcGx5IChlLmcuICJjbGFzcy10YXJnZXQiLCAiY2xhc3MtbmF0aXZlIiwgYW5kIHNvIGZvcnRoKS4iCitDTEVBTkJST0tFTltkb2NdID0gIlNwZWNpZmllcyBpZiAnbWFrZSBjbGVhbicgZG9lcyBub3Qgd29yayBmb3IgYSByZWNpcGUgKGFuZCB0aGVyZWZvcmUgdGhlIGJ1aWxkIHN5c3RlbSBzaG91bGQgbm90IHRyeSB0byB1c2UgaXQgZHVyaW5nIGRvX2NvbmZpZ3VyZSkiCitDT01CSU5FRF9GRUFUVVJFU1tkb2NdID0gIkEgc2V0IG9mIGZlYXR1cmVzIGNvbW1vbiBiZXR3ZWVuIE1BQ0hJTkVfRkVBVFVSRVMgYW5kIERJU1RST19GRUFUVVJFUy4iCitDT01NT05fTElDRU5TRV9ESVJbZG9jXSA9ICJQb2ludHMgdG8gbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMgaW4gdGhlIFNvdXJjZSBEaXJlY3RvcnksIHdoaWNoIGlzIHdoZXJlIGdlbmVyaWMgbGljZW5zZSBmaWxlcyByZXNpZGUuIgorQ09NUEFUSUJMRV9IT1NUW2RvY10gPSAiQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCByZXNvbHZlcyB0byBvbmUgb3IgbW9yZSBob3N0cyAod2hlbiB0aGUgcmVjaXBlIGlzIG5hdGl2ZSkgb3Igb25lIG9yIG1vcmUgdGFyZ2V0cyAod2hlbiB0aGUgcmVjaXBlIGlzIG5vbi1uYXRpdmUpIHdpdGggd2hpY2ggYSByZWNpcGUgaXMgY29tcGF0aWJsZS4iCitDT01QQVRJQkxFX01BQ0hJTkVbZG9jXSA9ICJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHJlc29sdmVzIHRvIG9uZSBvciBtb3JlIHRhcmdldCBtYWNoaW5lcyB3aXRoIHdoaWNoIGEgcmVjaXBlIGlzIGNvbXBhdGlibGUuIgorQ09NUExFTUVOVEFSWV9HTE9CW2RvY10gPSAiRGVmaW5lcyB3aWxkY2FyZHMgdG8gbWF0Y2ggd2hlbiBpbnN0YWxsaW5nIGEgbGlzdCBvZiBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIGZvciBhbGwgdGhlIHBhY2thZ2VzIGluc3RhbGxlZCBpbiBhbiBpbWFnZS4iCitDT05GRklMRVNbZG9jXSA9ICJJZGVudGlmaWVzIGVkaXRhYmxlIG9yIGNvbmZpZ3VyYWJsZSBmaWxlcyB0aGF0IGFyZSBwYXJ0IG9mIGEgcGFja2FnZS4iCitDT05GSUdfU0lURVtkb2NdID0gIkEgbGlzdCBvZiBmaWxlcyB0aGF0IGNvbnRhaW5zIGF1dG9jb25mIHRlc3QgcmVzdWx0cyByZWxldmFudCB0byB0aGUgY3VycmVudCBidWlsZC4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZSBBdXRvdG9vbHMgdXRpbGl0aWVzIHdoZW4gcnVubmluZyBjb25maWd1cmUuIgorQ09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGlkZW50aWZpZXMgZGlzdHJpYnV0aW9uIGZlYXR1cmVzIHRoYXQgd291bGQgYmUgaW4gY29uZmxpY3Qgc2hvdWxkIHRoZSByZWNpcGUgYmUgYnVpbHQuIgorQ09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGJlIGFkZGVkIHRvIHRoZSBpbWFnZS4gWW91IHNob3VsZCBvbmx5IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZSBjb25mL2xvY2FsLmNvbmYgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKK0NPUkVCQVNFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBPcGVuRW1iZWRkZWQgQ29yZSBNZXRhZGF0YSBsYXllciAoaS5lLiBtZXRhKS4iCitDT05GX1ZFUlNJT05bZG9jXSA9ICJUcmFja3MgdGhlIHZlcnNpb24gb2YgbG9jYWwuY29uZi4gIEluY3JlYXNlZCBlYWNoIHRpbWUgYnVpbGQvY29uZi8gY2hhbmdlcyBpbmNvbXBhdGlibHkuIgorQ1ZTRElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSB3aGVyZSBjdnMgY2hlY2tvdXRzIHdpbGwgYmUgc3RvcmVkIGluLiIKKworI0QKKworRFtkb2NdID0gIlRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkuIgorREFURVtkb2NdID0gIlRoZSBkYXRlIHRoZSBidWlsZCB3YXMgc3RhcnRlZCB1c2luZyBZTUQgZm9ybWF0LiIKK0RBVEVUSU1FW2RvY10gPSAiVGhlIGRhdGUgYW5kIHRpbWUgdGhlIGJ1aWxkIHdhcyBzdGFydGVkLiIKK0RFQlVHX0JVSUxEW2RvY10gPSAiU3BlY2lmaWVzIHRvIGJ1aWxkIHBhY2thZ2VzIHdpdGggZGVidWdnaW5nIGluZm9ybWF0aW9uLiBUaGlzIGluZmx1ZW5jZXMgdGhlIHZhbHVlIG9mIHRoZSBTRUxFQ1RFRF9PUFRJTUlaQVRJT04gdmFyaWFibGUuIgorREVCVUdfT1BUSU1JWkFUSU9OW2RvY10gPSAiVGhlIG9wdGlvbnMgdG8gcGFzcyBpbiBUQVJHRVRfQ0ZMQUdTIGFuZCBDRkxBR1Mgd2hlbiBjb21waWxpbmcgYSBzeXN0ZW0gZm9yIGRlYnVnZ2luZy4gVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAnLU8gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWcnLiIKK0RFRkFVTFRfUFJFRkVSRU5DRVtkb2NdID0gIlNwZWNpZmllcyBhIHdlYWsgYmlhcyBmb3IgcmVjaXBlIHNlbGVjdGlvbiBwcmlvcml0eS4iCitERVBFTkRTW2RvY10gPSAiTGlzdHMgYSByZWNpcGUncyBidWlsZC10aW1lIGRlcGVuZGVuY2llcyAoaS5lLiBvdGhlciByZWNpcGUgZmlsZXMpLiIKK0RFUExPWV9ESVJbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGdlbmVyYWwgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdG8gcGxhY2UgaW1hZ2VzLCBwYWNrYWdlcywgU0RLcyBhbmQgb3RoZXIgb3V0cHV0IGZpbGVzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgYnVpbGQgc3lzdGVtLiIKK0RFUExPWV9ESVJfSU1BR0VbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGFyZWEgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRvIHBsYWNlIGltYWdlcyBhbmQgb3RoZXIgYXNzb2NpYXRlZCBvdXRwdXQgZmlsZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgZGVwbG95ZWQgb250byB0aGUgdGFyZ2V0IG1hY2hpbmUuIgorREVQTE9ZRElSW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBkZXBsb3kgY2xhc3MsIHRoZSBERVBMT1lESVIgcG9pbnRzIHRvIGEgdGVtcG9yYXJ5IHdvcmsgYXJlYSBmb3IgZGVwbG95ZWQgZmlsZXMuIgorREVTQ1JJUFRJT05bZG9jXSA9ICJUaGUgcGFja2FnZSBkZXNjcmlwdGlvbiB1c2VkIGJ5IHBhY2thZ2UgbWFuYWdlcnMuIElmIG5vdCBzZXQsIERFU0NSSVBUSU9OIHRha2VzIHRoZSB2YWx1ZSBvZiB0aGUgU1VNTUFSWSB2YXJpYWJsZS4iCitESVNUUk9bZG9jXSA9ICJUaGUgc2hvcnQgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiBJZiB0aGUgdmFyaWFibGUgaXMgYmxhbmssIG1ldGEvY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmYgd2lsbCBiZSB1c2VkLiIKK0RJU1RST19FWFRSQV9SREVQRU5EU1tkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZGlzdHJvLXNwZWNpZmljIHBhY2thZ2VzIHRvIGFkZCB0byBhbGwgaW1hZ2VzLiBUaGUgdmFyaWFibGUgb25seSBhcHBsaWVzIHRvIHRoZSBpbWFnZXMgdGhhdCBpbmNsdWRlIHBhY2thZ2Vncm91cC1iYXNlLiIKK0RJU1RST19FWFRSQV9SUkVDT01NRU5EU1tkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZGlzdHJvLXNwZWNpZmljIHBhY2thZ2VzIHRvIGFkZCB0byBhbGwgaW1hZ2VzIGlmIHRoZSBwYWNrYWdlcyBleGlzdC4gVGhlIGxpc3Qgb2YgcGFja2FnZXMgYXJlIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkIGJ1dCB5b3UgY2FuIHJlbW92ZSB0aGVtLiIKK0RJU1RST19GRUFUVVJFU1tkb2NdID0gIlRoZSBmZWF0dXJlcyBlbmFibGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uLiIKK0RJU1RST19GRUFUVVJFU19CQUNLRklMTFtkb2NdID0gIkZlYXR1cmVzIHRvIGJlIGFkZGVkIHRvIERJU1RST19GRUFUVVJFUyBpZiBub3QgYWxzbyBwcmVzZW50IGluIERJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVELiBUaGlzIHZhcmlhYmxlIGlzIHNldCBpbiB0aGUgbWV0YS9jb25mL2JpdGJha2UuY29uZiBmaWxlIGFuZCBpdCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlci1jb25maWd1cmFibGUuIgorRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRURbZG9jXSA9ICJGZWF0dXJlcyBmcm9tIERJU1RST19GRUFUVVJFU19CQUNLRklMTCB0aGF0IHNob3VsZCBub3QgYmUgYmFja2ZpbGxlZCAoaS5lLiBhZGRlZCB0byBESVNUUk9fRkVBVFVSRVMpIGR1cmluZyB0aGUgYnVpbGQuIgorRElTVFJPX05BTUVbZG9jXSA9ICJUaGUgbG9uZyBuYW1lIG9mIHRoZSBkaXN0cmlidXRpb24uIgorRElTVFJPX1BOX0FMSUFTW2RvY10gPSAiQWxpYXMgbmFtZXMgdXNlZCBmb3IgdGhlIHJlY2lwZSBpbiB2YXJpb3VzIExpbnV4IGRpc3RyaWJ1dGlvbnMuIgorRElTVFJPX1ZFUlNJT05bZG9jXSA9ICJUaGUgdmVyc2lvbiBvZiB0aGUgZGlzdHJpYnV0aW9uLiIKK0RJU1RST09WRVJSSURFU1tkb2NdID0gIkxpc3RzIG92ZXJyaWRlcyBzcGVjaWZpYyB0byB0aGUgY3VycmVudCBkaXN0cmlidXRpb24uIEJ5IGRlZmF1bHQsIHRoZSB2YXJpYWJsZSBsaXN0IGluY2x1ZGVzIHRoZSB2YWx1ZSBvZiB0aGUgRElTVFJPIHZhcmlhYmxlLiIKK0RMX0RJUltkb2NdID0gIlRoZSBjZW50cmFsIGRvd25sb2FkIGRpcmVjdG9yeSB1c2VkIGJ5IHRoZSBidWlsZCBwcm9jZXNzIHRvIHN0b3JlIGRvd25sb2Fkcy4gQnkgZGVmYXVsdCwgdGhlIGRpcmVjdG9yeSBpcyAnZG93bmxvYWRzJyBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKKworI0UKKworRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTltkb2NdID0gIkNvbnRyb2xzIHdoaWNoIGxvY2FsZXMgZm9yIGdsaWJjIGFyZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBidWlsZC4gVGhlIHZhcmlhYmxlIGlzIHVzZWZ1bCBpZiB0aGUgdGFyZ2V0IGRldmljZSBoYXMgNjRNYnl0ZXMgb2YgUkFNIG9yIGxlc3MuIgorRVJST1JfUUFbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHF1YWxpdHkgYXNzdXJhbmNlIGNoZWNrcyB3aG9zZSBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgYXMgZXJyb3JzIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKK0VYQ0xVREVfRlJPTV9XT1JMRFtkb2NdID0gIkRpcmVjdHMgQml0QmFrZSB0byBleGNsdWRlIGEgcmVjaXBlIGZyb20gd29ybGQgYnVpbGRzIChpLmUuIGJpdGJha2Ugd29ybGQpLiIKK0VYVEVORFBFW2RvY10gPSAiVXNlZCB3aXRoIGZpbGUgYW5kIHBhdGhuYW1lcyB0byBjcmVhdGUgYSBwcmVmaXggZm9yIGEgcmVjaXBlJ3MgdmVyc2lvbiBiYXNlZCBvbiB0aGUgcmVjaXBlJ3MgUEUgdmFsdWUuIElmIFBFIGlzIHNldCBhbmQgZ3JlYXRlciB0aGFuIHplcm8gZm9yIGEgcmVjaXBlLCBFWFRFTkRQRSBiZWNvbWVzIHRoYXQgdmFsdWUuIgorRVhURU5EUEtHVltkb2NdID0gIlRoZSBmdWxsIHBhY2thZ2UgdmVyc2lvbiBzcGVjaWZpY2F0aW9uIGFzIGl0IGFwcGVhcnMgb24gdGhlIGZpbmFsIHBhY2thZ2VzIHByb2R1Y2VkIGJ5IGEgcmVjaXBlLiIKK0VYVEVSTkFMU1JDW2RvY10gPSAiSWYgZXh0ZXJuYWxzcmMuYmJjbGFzcyBpcyBpbmhlcml0ZWQsIHRoaXMgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBzb3VyY2UgdHJlZSwgd2hpY2ggaXMgb3V0c2lkZSBvZiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCitFWFRFUk5BTFNSQ19CVUlMRFtkb2NdID0gIklmIGV4dGVybmFsc3JjLmJiY2xhc3MgaXMgaW5oZXJpdGVkLCB0aGlzIHZhcmlhYmxlIHBvaW50cyB0byB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSByZWNpcGUncyBzb3VyY2UgY29kZSBpcyBidWlsdCwgd2hpY2ggaXMgb3V0c2lkZSBvZiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCitFWFRSQV9JTUFHRV9GRUFUVVJFU1tkb2NdID0gIlRoZSBsaXN0IG9mIGFkZGl0aW9uYWwgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiBhbiBpbWFnZS4gQ29uZmlndXJlIHRoaXMgdmFyaWFibGUgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorRVhUUkFfSU1BR0VERVBFTkRTW2RvY10gPSAiQSBsaXN0IG9mIHJlY2lwZXMgdG8gYnVpbGQgdGhhdCBkbyBub3QgcHJvdmlkZSBwYWNrYWdlcyBmb3IgaW5zdGFsbGluZyBpbnRvIHRoZSByb290IGZpbGVzeXN0ZW0uIFVzZSB0aGlzIHZhcmlhYmxlIHRvIGxpc3QgcmVjaXBlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBidWlsZCB0aGUgZmluYWwgaW1hZ2UsIGJ1dCBub3QgbmVlZGVkIGluIHRoZSByb290IGZpbGVzeXN0ZW0uIgorRVhUUkFfT0VDTUFLRVtkb2NdID0gIkFkZGl0aW9uYWwgY21ha2Ugb3B0aW9ucy4iCitFWFRSQV9PRUNPTkZbZG9jXSA9ICJBZGRpdGlvbmFsIGNvbmZpZ3VyZSBzY3JpcHQgb3B0aW9ucy4iCitFWFRSQV9PRU1BS0VbZG9jXSA9ICJBZGRpdGlvbmFsIEdOVSBtYWtlIG9wdGlvbnMuIgorRVhUUkFfT0VTQ09OU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHNjb25zIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB5b3Ugd2FudCB0byBwYXNzIHRvIHRoZSBzY29ucyBjb21tYW5kIGxpbmUuIgorRVhUUkFfUU1BS0VWQVJTX1BPU1RbZG9jXSA9ICJDb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvciBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8gcW1ha2Ugd2hlbiB0aGUgYXJndW1lbnRzIG5lZWQgdG8gYmUgYWZ0ZXIgdGhlIC5wcm8gZmlsZSBsaXN0IG9uIHRoZSBjb21tYW5kIGxpbmUuIgorRVhUUkFfUU1BS0VWQVJTX1BSRVtkb2NdID0gIkNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0byBxbWFrZSB3aGVuIHRoZSBhcmd1bWVudHMgbmVlZCB0byBiZSBiZWZvcmUgdGhlIC5wcm8gZmlsZSBsaXN0IG9uIHRoZSBjb21tYW5kIGxpbmUuIgorRVhUUkFfVVNFUlNfUEFSQU1TW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgZXh0cmF1c2VycyBjbGFzcywgdGhpcyB2YXJpYWJsZSBwcm92aWRlcyBpbWFnZSBsZXZlbCB1c2VyIGFuZCBncm91cCBvcGVyYXRpb25zLiIKKworI0YKKworRkVFRF9ERVBMT1lESVJfQkFTRV9VUklbZG9jXSA9ICJBbGxvdyB0byBzZXJ2ZSBpcGsgZGVwbG95IGRpcmVjdG9yeSBhcyBhbiBhZCBob2MgZmVlZCAoYm9nb2ZlZWQpLiBTZXQgdG8gYmFzZSBVUkwgb2YgdGhlIGRpcmVjdG9yeSBhcyBleHBvcnRlZCBieSBIVFRQLiBTZXQgb2YgYWQgaG9jIGZlZWQgY29uZmlncyB3aWxsIGJlIGdlbmVyYXRlZCBpbiB0aGUgaW1hZ2UuIgorRklMRVNbZG9jXSA9ICJUaGUgbGlzdCBvZiBkaXJlY3RvcmllcyBvciBmaWxlcyB0aGF0IGFyZSBwbGFjZWQgaW4gcGFja2FnZXMuIgorRklMRVNFWFRSQVBBVEhTW2RvY10gPSAiRXh0ZW5kcyB0aGUgc2VhcmNoIHBhdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB3aGVuIGxvb2tpbmcgZm9yIGZpbGVzIGFuZCBwYXRjaGVzIGFzIGl0IHByb2Nlc3NlcyByZWNpcGVzIGFuZCBhcHBlbmQgZmlsZXMuIgorRklMRVNPVkVSUklERVNbZG9jXSA9ICJBIHN1YnNldCBvZiBPVkVSUklERVMgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBmb3IgY3JlYXRpbmcgRklMRVNQQVRILiIKK0ZJTEVTUEFUSFtkb2NdID0gIlRoZSBkZWZhdWx0IHNldCBvZiBkaXJlY3RvcmllcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gc2VhcmNoaW5nIGZvciBwYXRjaGVzIGFuZCBmaWxlcy4gSXQgaXMgZGVmaW5lZCBpbiB0aGUgYmFzZS5iYmNsYXNzIGNsYXNzIGZvdW5kIGluIG1ldGEvY2xhc3NlcyBpbiB0aGUgU291cmNlIERpcmVjdG9yeS4gRG8gbm90IGhhbmQtZWRpdCB0aGUgRklMRVNQQVRIIHZhcmlhYmxlLiIKK0ZJTEVTWVNURU1fUEVSTVNfVEFCTEVTW2RvY10gPSAiQWxsb3dzIHlvdSB0byBkZWZpbmUgeW91ciBvd24gZmlsZSBwZXJtaXNzaW9ucyBzZXR0aW5ncyB0YWJsZSBhcyBwYXJ0IG9mIHlvdXIgY29uZmlndXJhdGlvbiBmb3IgdGhlIHBhY2thZ2luZyBwcm9jZXNzLiIKK0ZPTlRfRVhUUkFfUkRFUEVORFNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBmb250Y2FjaGUgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGZvciBmb250IHBhY2thZ2VzLiBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvICdmb250Y29uZmlnLXV0aWxzJy4iCitGT05UX1BBQ0tBR0VTW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgZm9udGNhY2hlIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGlkZW50aWZpZXMgcGFja2FnZXMgY29udGFpbmluZyBmb250IGZpbGVzIHRoYXQgbmVlZCB0byBiZSBjYWNoZWQgYnkgRm9udGNvbmZpZy4iCitGVUxMX09QVElNSVpBVElPTltkb2NdPSAiVGhlIG9wdGlvbnMgdG8gcGFzcyBpbiBUQVJHRVRfQ0ZMQUdTIGFuZCBDRkxBR1Mgd2hlbiBjb21waWxpbmcgYW4gb3B0aW1pemVkIHN5c3RlbS4gVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAnLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucyAtZm9taXQtZnJhbWUtcG9pbnRlciAtZnJlbmFtZS1yZWdpc3RlcnMgLU8yJy4iCisKKyNHCisKK0dJVERJUltkb2NdID0gIlRoZSBkaXJlY3Rvcnkgd2hlcmUgR2l0IGNsb25lcyB3aWxsIGJlIHN0b3JlZC4iCitHUk9VUEFERF9QQVJBTVtkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHVzZXJhZGQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGZvciBhIHBhY2thZ2Ugd2hhdCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIGdyb3VwYWRkIGNvbW1hbmQgaWYgeW91IHdpc2ggdG8gYWRkIGEgZ3JvdXAgdG8gdGhlIHN5c3RlbSB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZC4iCitHUk9VUE1FTVNfUEFSQU1bZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSB1c2VyYWRkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBmb3IgYSBwYWNrYWdlIHdoYXQgcGFyYW1ldGVycyBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBncm91cG1lbXMgY29tbWFuZCBpZiB5b3Ugd2lzaCB0byBtb2RpZnkgdGhlIG1lbWJlcnMgb2YgYSBncm91cCB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZC4iCitHUlVCX0dGWFNFUklBTFtkb2NdID0gIkNvbmZpZ3VyZXMgdGhlIEdOVSBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIgKEdSVUIpIHRvIGhhdmUgZ3JhcGhpY3MgYW5kIHNlcmlhbCBpbiB0aGUgYm9vdCBtZW51LiIKK0dSVUJfT1BUU1tkb2NdID0gIkFkZGl0aW9uYWwgb3B0aW9ucyB0byBhZGQgdG8gdGhlIEdOVSBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIgKEdSVUIpIGNvbmZpZ3VyYXRpb24uIgorR1JVQl9USU1FT1VUW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB0aW1lb3V0IGJlZm9yZSBleGVjdXRpbmcgdGhlIGRlZmF1bHQgTEFCRUwgaW4gdGhlIEdOVSBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIgKEdSVUIpLiIKK0dUS0lNTU9EVUxFU19QQUNLQUdFU1tkb2NdID0gIkZvciByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgZ3RrLWltbW9kdWxlcy1jYWNoZSBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIHBhY2thZ2VzIHRoYXQgY29udGFpbiB0aGUgR1RLKyBpbnB1dCBtZXRob2QgbW9kdWxlcyBiZWluZyBpbnN0YWxsZWQgd2hlbiB0aGUgbW9kdWxlcyBhcmUgaW4gcGFja2FnZXMgb3RoZXIgdGhhbiB0aGUgbWFpbiBwYWNrYWdlLiIKKworI0gKKworSE9NRVBBR0VbZG9jXSA9ICJXZWJzaXRlIHdoZXJlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvZnR3YXJlIHRoZSByZWNpcGUgaXMgYnVpbGRpbmcgY2FuIGJlIGZvdW5kLiIKK0hPU1RfQVJDSFtkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiBOb3JtYWxseSBzYW1lIGFzIHRoZSBUQVJHRVRfQVJDSC4iCitIT1NUX0NDX0FSQ0hbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgaG9zdCBhcmNoaXRlY3R1cmUuIE5vcm1hbGx5IHNhbWUgYXMgdGhlIFRBUkdFVF9DQ19BUkNILiIKK0hPU1RfT1NbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IG9wZXJhdGluZyBzeXN0ZW0uIE5vcm1hbGx5IHRoZSBzYW1lIGFzIHRoZSBUQVJHRVRfT1MuIgorSE9TVF9QUkVGSVhbZG9jXSA9ICJUaGUgcHJlZml4IGZvciB0aGUgY3Jvc3MgY29tcGlsZSB0b29sY2hhaW4uIE5vcm1hbGx5IHNhbWUgYXMgdGhlIFRBUkdFVF9QUkVGSVguIgorSE9TVF9TWVNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHN5c3RlbSwgaW5jbHVkaW5nIHRoZSBhcmNoaXRlY3R1cmUgYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtLCBmb3Igd2l0aCB0aGUgYnVpbGQgaXMgb2NjdXJyaW5nIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHJlY2lwZS4iCitIT1NUX1ZFTkRPUltkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSB2ZW5kb3IuIE5vcm1hbGx5IHNhbWUgYXMgdGhlIFRBUkdFVF9WRU5ET1IuIgorCisjSQorCitJQ0VDQ19FTlZfRVhFQ1tkb2NdID0gIlBvaW50cyB0byB0aGUgaWNlY2MtY3JlYXRlLWVudiBzY3JpcHQgdGhhdCB5b3UgcHJvdmlkZS4iCitJQ0VDQ19QQVRIW2RvY10gPSAiVGhlIGxvY2F0aW9uIG9mIHRoZSBpY2VjYyBiaW5hcnkuIgorSUNFQ0NfVVNFUl9DTEFTU19CTFtkb2NdID0gIklkZW50aWZpZXMgdXNlciBjbGFzc2VzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRoZSBJY2VjcmVhbSBkaXN0cmlidXRlZCBjb21waWxlIHN1cHBvcnQgdG8gY29uc2lkZXIuIgorSUNFQ0NfVVNFUl9QQUNLQUdFX0JMW2RvY10gPSAiSWRlbnRpZmllcyB1c2VyIHJlY2lwZXMgdGhhdCB5b3UgZG8gbm90IHdhbnQgdGhlIEljZWNyZWFtIGRpc3RyaWJ1dGVkIGNvbXBpbGUgc3VwcG9ydCB0byBjb25zaWRlci4iCitJQ0VDQ19VU0VSX1BBQ0tBR0VfV0xbZG9jXSA9ICJJZGVudGlmaWVzIHVzZXIgcmVjaXBlcyB0aGF0IHVzZSBhbiBlbXB0eSBQQVJBTExFTF9NQUtFIHZhcmlhYmxlIHRoYXQgeW91IHdhbnQgdG8gZm9yY2UgcmVtb3RlIGRpc3RyaWJ1dGVkIGNvbXBpbGF0aW9uIG9uIHVzaW5nIHRoZSBJY2VjcmVhbSBkaXN0cmlidXRlZCBjb21waWxlIHN1cHBvcnQuIgorSU1BR0VfQkFTRU5BTUVbZG9jXSA9ICJUaGUgYmFzZSBuYW1lIG9mIGltYWdlIG91dHB1dCBmaWxlcy4iCitJTUFHRV9CT09UX0ZJTEVTW2RvY10gPSAiV2hpdGVzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBmaWxlcyBmcm9tICR7REVQTE9ZX0RJUl9JTUFHRX0gdG8gcGxhY2UgaW4gYm9vdCBwYXJ0aXRpb24uIEVudHJpZXMgd2lsbCBiZSBpbnN0YWxsZWQgdW5kZXIgYSBzYW1lIG5hbWUgYXMgdGhlIHNvdXJjZSBmaWxlLiBUbyBjaGFuZ2UgdGhlIGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgcGFzcyBhIGRlc2lyZWQgbmFtZSBhZnRlciBhIHNlbWljb2xvbiAoZWcuIHUtYm9vdC5pbWc7dWJvb3QpLiIKK0lNQUdFX0NMQVNTRVNbZG9jXSA9ICJBIGxpc3Qgb2YgY2xhc3NlcyB0aGF0IGFsbCBpbWFnZXMgc2hvdWxkIGluaGVyaXQuIgorSU1BR0VfRkVBVFVSRVNbZG9jXSA9ICJUaGUgcHJpbWFyeSBsaXN0IG9mIGZlYXR1cmVzIHRvIGluY2x1ZGUgaW4gYW4gaW1hZ2UuIENvbmZpZ3VyZSB0aGlzIHZhcmlhYmxlIGluIGFuIGltYWdlIHJlY2lwZS4iCitJTUFHRV9GU1RZUEVTW2RvY10gPSAiRm9ybWF0cyBvZiByb290IGZpbGVzeXN0ZW0gaW1hZ2VzIHRoYXQgeW91IHdhbnQgdG8gaGF2ZSBjcmVhdGVkLiIKK0lNQUdFX0lOU1RBTExbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhY2thZ2VzIHRvIGluc3RhbGwgaW50byBhbiBpbWFnZS4gSW1hZ2UgcmVjaXBlcyBzZXQgSU1BR0VfSU5TVEFMTCB0byBzcGVjaWZ5IHRoZSBwYWNrYWdlcyB0byBpbnN0YWxsIGludG8gYW4gaW1hZ2UgdGhyb3VnaCBpbWFnZS5iYmNsYXNzLiIKK0lNQUdFX0xJTkdVQVNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgbG9jYWxlcyB0byBpbnN0YWxsIGludG8gdGhlIGltYWdlIGR1cmluZyB0aGUgcm9vdCBmaWxlc3lzdGVtIGNvbnN0cnVjdGlvbiBwcm9jZXNzLiIKK0lNQUdFX05BTUVbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgb3V0cHV0IGltYWdlIGZpbGVzIG1pbnVzIHRoZSBleHRlbnNpb24uIgorSU1BR0VfT1ZFUkhFQURfRkFDVE9SW2RvY10gPSAiRGVmaW5lcyBhIG11bHRpcGxpZXIgdGhhdCB0aGUgYnVpbGQgc3lzdGVtIGFwcGxpZXMgdG8gdGhlIGluaXRpYWwgaW1hZ2Ugc2l6ZSBmb3IgY2FzZXMgd2hlbiB0aGUgbXVsdGlwbGllciB0aW1lcyB0aGUgcmV0dXJuZWQgZGlzayB1c2FnZSB2YWx1ZSBmb3IgdGhlIGltYWdlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc3VtIG9mIElNQUdFX1JPT1RGU19TSVpFIGFuZCBJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UuIgorSU1BR0VfUEtHVFlQRVtkb2NdID0gIkRlZmluZXMgdGhlIHBhY2thZ2UgdHlwZSAoREVCLCBSUE0sIElQSywgb3IgVEFSKSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKK0lNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkRbZG9jXSA9ICJBZGRlZCBieSBjbGFzc2VzIHRvIHJ1biBwb3N0IHByb2Nlc3NpbmcgY29tbWFuZHMgb25jZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgaW1hZ2UuIgorSU1BR0VfUk9PVEZTW2RvY10gPSAiVGhlIGxvY2F0aW9uIG9mIHRoZSByb290IGZpbGVzeXN0ZW0gd2hpbGUgaXQgaXMgdW5kZXIgY29uc3RydWN0aW9uIChpLmUuIGR1cmluZyBkb19yb290ZnMpLiIKK0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRVtkb2NdID0gIkRlZmluZXMgYWRkaXRpb25hbCBmcmVlIGRpc2sgc3BhY2UgY3JlYXRlZCBpbiB0aGUgaW1hZ2UgaW4gS2J5dGVzLiBCeSBkZWZhdWx0LCB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byAnMCcuIgorSU1BR0VfUk9PVEZTX1NJWkVbZG9jXSA9ICJEZWZpbmVzIHRoZSBzaXplIGluIEtieXRlcyBmb3IgdGhlIGdlbmVyYXRlZCBpbWFnZS4iCitJTUFHRV9UWVBFU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgY29tcGxldGUgbGlzdCBvZiBzdXBwb3J0ZWQgaW1hZ2UgdHlwZXMgYnkgZGVmYXVsdC4iCitJTkNfUFJbZG9jXSA9ICJIZWxwcyBkZWZpbmUgdGhlIHJlY2lwZSByZXZpc2lvbiBmb3IgcmVjaXBlcyB0aGF0IHNoYXJlIGEgY29tbW9uIGluY2x1ZGUgZmlsZS4iCitJTkNPTVBBVElCTEVfTElDRU5TRVtkb2NdID0gIlNwZWNpZmllcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGxpY2Vuc2UgbmFtZXMgKGFzIHRoZXkgd291bGQgYXBwZWFyIGluIExJQ0VOU0UpIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWxkLiBXaWxkY2FyZCBpcyBzdXBwb3J0ZWQsIHN1Y2ggYXMgJypHUEx2MyciCitJTkhJQklUX0RFRkFVTFRfREVQU1tkb2NdID0gIlByZXZlbnRzIHRoZSBkZWZhdWx0IGRlcGVuZGVuY2llcywgbmFtZWx5IHRoZSBDIGNvbXBpbGVyIGFuZCBzdGFuZGFyZCBDIGxpYnJhcnkgKGxpYmMpLCBmcm9tIGJlaW5nIGFkZGVkIHRvIERFUEVORFMuIgorSU5ISUJJVF9QQUNLQUdFX1NUUklQW2RvY10gPSAiSWYgc2V0IHRvICIxIiwgY2F1c2VzIHRoZSBidWlsZCB0byBub3Qgc3RyaXAgYmluYXJpZXMgaW4gcmVzdWx0aW5nIHBhY2thZ2VzLiIKK0lOSEVSSVRbZG9jXSA9ICJDYXVzZXMgdGhlIG5hbWVkIGNsYXNzIHRvIGJlIGluaGVyaXRlZCBhdCB0aGlzIHBvaW50IGR1cmluZyBwYXJzaW5nLiBUaGUgdmFyaWFibGUgaXMgb25seSB2YWxpZCBpbiBjb25maWd1cmF0aW9uIGZpbGVzLiIKK0lOSEVSSVRfRElTVFJPW2RvY10gPSAiTGlzdHMgY2xhc3NlcyB0aGF0IHdpbGwgYmUgaW5oZXJpdGVkIGF0IHRoZSBkaXN0cmlidXRpb24gbGV2ZWwuIEl0IGlzIHVubGlrZWx5IHRoYXQgeW91IHdhbnQgdG8gZWRpdCB0aGlzIHZhcmlhYmxlLiIKK0lOSVRSQU1GU19GU1RZUEVTW2RvY10gPSAiRGVmaW5lcyB0aGUgZm9ybWF0IGZvciB0aGUgb3V0cHV0IGltYWdlIG9mIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyYW1mcyksIHdoaWNoIGlzIHVzZWQgZHVyaW5nIGJvb3QuIgorSU5JVFJEW2RvY10gPSAiSW5kaWNhdGVzIGEgbGlzdCBvZiBmaWxlc3lzdGVtIGltYWdlcyB0byBjb25jYXRlbmF0ZSBhbmQgdXNlIGFzIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyZCkuIgorSU5JVFNDUklQVF9OQU1FW2RvY10gPSAiVGhlIGZpbGVuYW1lIG9mIHRoZSBpbml0aWFsaXphdGlvbiBzY3JpcHQgYXMgaW5zdGFsbGVkIHRvICR7c3lzY29uZmRpcn0vaW5pdC5kLiIKK0lOSVRTQ1JJUFRfUEFDS0FHRVNbZG9jXSA9ICJBIGxpc3Qgb2YgdGhlIHBhY2thZ2VzIHRoYXQgY29udGFpbiBpbml0c2NyaXB0cy4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHJlY2lwZXMgd2hlbiB1c2luZyB1cGRhdGUtcmMuZC5iYmNsYXNzLiBUaGUgdmFyaWFibGUgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIHRoZSBQTiB2YXJpYWJsZS4iCitJTklUU0NSSVBUX1BBUkFNU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgb3B0aW9ucyB0byBwYXNzIHRvIHVwZGF0ZS1yYy5kLiBUaGUgdmFyaWFibGUgaXMgbWFuZGF0b3J5IGFuZCBpcyB1c2VkIGluIHJlY2lwZXMgd2hlbiB1c2luZyB1cGRhdGUtcmMuZC5iYmNsYXNzLiIKK0lOU0FORV9TS0lQW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBRQSBjaGVja3MgdG8gc2tpcCBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlIHdpdGhpbiBhIHJlY2lwZS4iCitJUEtfRkVFRF9VUklTW2RvY10gPSAiTGlzdCBvZiBpcGtnIGZlZWQgcmVjb3JkcyB0byBwdXQgaW50byBnZW5lcmF0ZWQgaW1hZ2UuIgorCisjSworCitLQVJDSFtkb2NdID0gIkRlZmluZXMgdGhlIGtlcm5lbCBhcmNoaXRlY3R1cmUgdXNlZCB3aGVuIGFzc2VtYmxpbmcgdGhlIGNvbmZpZ3VyYXRpb24uIFlvdSBkZWZpbmUgdGhlIEtBUkNIIHZhcmlhYmxlIGluIHRoZSBCU1AgRGVzY3JpcHRpb25zLiIKK0tCUkFOQ0hbZG9jXSA9ICJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIGJ5IHRoZSBidWlsZCBwcm9jZXNzIHRvIGV4cGxpY2l0bHkgaWRlbnRpZnkgdGhlIGtlcm5lbCBicmFuY2ggdGhhdCBpcyB2YWxpZGF0ZWQsIHBhdGNoZWQgYW5kIGNvbmZpZ3VyZWQgZHVyaW5nIGEgYnVpbGQuIgorS0JSQU5DSF9ERUZBVUxUW2RvY10gPSAiRGVmaW5lcyB0aGUgTGludXgga2VybmVsIHNvdXJjZSByZXBvc2l0b3J5J3MgZGVmYXVsdCBicmFuY2ggdXNlZCB0byBidWlsZCB0aGUgTGludXgga2VybmVsLiBVbmxlc3MgeW91IHNwZWNpZnkgb3RoZXJ3aXNlLCB0aGUgdmFyaWFibGUgaW5pdGlhbGl6ZXMgdG8gJ21hc3RlcicuIgorS0VSTkVMX0NMQVNTRVNbZG9jXSA9ICJBIGxpc3Qgb2YgY2xhc3NlcyBkZWZpbmluZyBrZXJuZWwgaW1hZ2UgdHlwZXMgdGhhdCBrZXJuZWwgY2xhc3Mgc2hvdWxkIGluaGVyaXQuIgorS0VSTkVMX0VYVFJBX0FSR1NbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBtYWtlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGFzc2VzIG9uIHdoZW4gY29tcGlsaW5nIHRoZSBrZXJuZWwuIgorS0VSTkVMX0ZFQVRVUkVTW2RvY10gPSAiSW5jbHVkZXMgYWRkaXRpb25hbCBtZXRhZGF0YSBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBHaXQgcmVwb3NpdG9yeS4gVGhlIG1ldGFkYXRhIHlvdSBhZGQgdGhyb3VnaCB0aGlzIHZhcmlhYmxlIGluY2x1ZGVzIGNvbmZpZyBmcmFnbWVudHMgYW5kIGZlYXR1cmVzIGRlc2NyaXB0aW9ucy4iCitLRVJORUxfSU1BR0VUWVBFW2RvY10gPSAiVGhlIHR5cGUgb2Yga2VybmVsIHRvIGJ1aWxkIGZvciBhIGRldmljZSwgdXN1YWxseSBzZXQgYnkgdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgZGVmYXVsdHMgdG8gJ3pJbWFnZScuIgorS0VSTkVMX01PRFVMRV9BVVRPTE9BRFtkb2NdID0gIkxpc3RzIGtlcm5lbCBtb2R1bGVzIHRoYXQgbmVlZCB0byBiZSBhdXRvLWxvYWRlZCBkdXJpbmcgYm9vdCIKK0tFUk5FTF9NT0RVTEVfUFJPQkVDT05GW2RvY10gPSAiTGlzdHMga2VybmVsIG1vZHVsZXMgZm9yIHdoaWNoIHRoZSBidWlsZCBzeXN0ZW0gZXhwZWN0cyB0byBmaW5kIG1vZHVsZV9jb25mXyogdmFsdWVzIHRoYXQgc3BlY2lmeSBjb25maWd1cmF0aW9uIGZvciBlYWNoIG9mIHRoZSBtb2R1bGVzIgorS0VSTkVMX1BBVEhbZG9jXSA9ICJUaGUgbG9jYXRpb24gb2YgdGhlIGtlcm5lbCBzb3VyY2VzLiBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIFNUQUdJTkdfS0VSTkVMX0RJUiB3aXRoaW4gdGhlIG1vZHVsZSBjbGFzcyAobW9kdWxlLmJiY2xhc3MpLiIKK0tFUk5FTF9TUkNbZG9jXSA9ICJUaGUgbG9jYXRpb24gb2YgdGhlIGtlcm5lbCBzb3VyY2VzLiBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIFNUQUdJTkdfS0VSTkVMX0RJUiB3aXRoaW4gdGhlIG1vZHVsZSBjbGFzcyAobW9kdWxlLmJiY2xhc3MpLiIKK0tGRUFUVVJFX0RFU0NSSVBUSU9OW2RvY10gPSAiUHJvdmlkZXMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiBhIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuIFlvdSB1c2UgdGhpcyB2YXJpYWJsZSBpbiB0aGUgLnNjYyBmaWxlIHRoYXQgZGVzY3JpYmVzIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlLiIKK0tNQUNISU5FW2RvY10gPSAiVGhlIG1hY2hpbmUgYXMga25vd24gYnkgdGhlIGtlcm5lbC4iCitLVFlQRVtkb2NdID0gIkRlZmluZXMgdGhlIGtlcm5lbCB0eXBlIHRvIGJlIHVzZWQgaW4gYXNzZW1ibGluZyB0aGUgY29uZmlndXJhdGlvbi4iCisKKyNMCisKK0xBWUVSREVQRU5EU1tkb2NdID0gIkxpc3RzIHRoZSBsYXllcnMsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHVwb24gd2hpY2ggdGhpcyByZWNpcGUgZGVwZW5kcy4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSBjb25mL2xheWVyLmNvbmYgZmlsZSBhbmQgbXVzdCBiZSBzdWZmaXhlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzcGVjaWZpYyBsYXllci4iCitMQVlFUkRJUltkb2NdID0gIldoZW4gdXNlZCBpbnNpZGUgdGhlIGxheWVyLmNvbmYgY29uZmlndXJhdGlvbiBmaWxlLCB0aGlzIHZhcmlhYmxlIHByb3ZpZGVzIHRoZSBwYXRoIG9mIHRoZSBjdXJyZW50IGxheWVyLiIKK0xBWUVSVkVSU0lPTltkb2NdID0gIk9wdGlvbmFsbHkgc3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIGEgbGF5ZXIgYXMgYSBzaW5nbGUgbnVtYmVyLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gdGhlIGNvbmYvbGF5ZXIuY29uZiBmaWxlIGFuZCBtdXN0IGJlIHN1ZmZpeGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmljIGxheWVyLiIKK0xFQURfU09OQU1FW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsZWFkIChvciBwcmltYXJ5KSBjb21waWxlZCBsaWJyYXJ5IGZpbGUgKC5zbykgdGhhdCB0aGUgZGViaWFuIGNsYXNzIGFwcGxpZXMgaXRzIG5hbWluZyBwb2xpY3kgdG8gZ2l2ZW4gYSByZWNpcGUgdGhhdCBwYWNrYWdlcyBtdWx0aXBsZSBsaWJyYXJpZXMuIgorTElDX0ZJTEVTX0NIS1NVTVtkb2NdID0gIkNoZWNrc3VtcyBvZiB0aGUgbGljZW5zZSB0ZXh0IGluIHRoZSByZWNpcGUgc291cmNlIGNvZGUuIgorTElDRU5TRVtkb2NdID0gIlRoZSBsaXN0IG9mIHNvdXJjZSBsaWNlbnNlcyBmb3IgdGhlIHJlY2lwZS4gTG9naWNhbCBvcGVyYXRvcnMgJyYnIG9yICd8JyBhbmQgcGFyZW50aGVzZXMgY2FuIGJlIHVzZWQuIgorTElDRU5TRV9QQVRIW2RvY10gPSAiUGF0aCB0byBhZGRpdGlvbmFsIGxpY2Vuc2VzIHVzZWQgZHVyaW5nIHRoZSBidWlsZC4iCitMSU5VWF9LRVJORUxfVFlQRVtkb2NdID0gIkRlZmluZXMgdGhlIGtlcm5lbCB0eXBlIHRvIGJlIHVzZWQgaW4gYXNzZW1ibGluZyB0aGUgY29uZmlndXJhdGlvbi4iCitMSU5VWF9WRVJTSU9OW2RvY10gPSAiVGhlIExpbnV4IHZlcnNpb24gZnJvbSBrZXJuZWwub3JnIG9uIHdoaWNoIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2UgYmVpbmcgYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgYmFzZWQuIFlvdSBkZWZpbmUgdGhpcyB2YXJpYWJsZSBpbiB0aGUga2VybmVsIHJlY2lwZS4iCitMSU5VWF9WRVJTSU9OX0VYVEVOU0lPTltkb2NdID0gIkEgc3RyaW5nIGV4dGVuc2lvbiBjb21waWxlZCBpbnRvIHRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgTGludXgga2VybmVsIGJ1aWx0IHdpdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIFlvdSBkZWZpbmUgdGhpcyB2YXJpYWJsZSBpbiB0aGUga2VybmVsIHJlY2lwZS4iCitMT0dfRElSW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgdG8gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd3JpdGVzIG92ZXJhbGwgbG9nIGZpbGVzLiBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXMgJHtUTVBESVJ9L2xvZyIKKworI00KKworTUFDSElORVtkb2NdID0gIlNwZWNpZmllcyB0aGUgdGFyZ2V0IGRldmljZSBmb3Igd2hpY2ggdGhlIGltYWdlIGlzIGJ1aWx0LiBZb3UgZGVmaW5lIE1BQ0hJTkUgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgcmVxdWlyZWQgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlIGltYWdlIGJlaW5nIGJ1aWx0LiBCZWNhdXNlIHRoaXMgaXMgYSAnbWFjaGluZSBlc3NlbnRpYWwnIHZhcmlhYmxlLCB0aGUgbGlzdCBvZiBwYWNrYWdlcyBhcmUgZXNzZW50aWFsIGZvciB0aGUgbWFjaGluZSB0byBib290LiIKK01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTW2RvY10gPSAiQSBsaXN0IG9mIHJlY29tbWVuZGVkIG1hY2hpbmUtc3BlY2lmaWMgcGFja2FnZXMgdG8gaW5zdGFsbCBhcyBwYXJ0IG9mIHRoZSBpbWFnZSBiZWluZyBidWlsdC4gQmVjYXVzZSB0aGlzIGlzIGEgJ21hY2hpbmUgZXNzZW50aWFsJyB2YXJpYWJsZSwgdGhlIGxpc3Qgb2YgcGFja2FnZXMgYXJlIGVzc2VudGlhbCBmb3IgdGhlIG1hY2hpbmUgdG8gYm9vdC4iCitNQUNISU5FX0VYVFJBX1JERVBFTkRTW2RvY10gPSAiQSBsaXN0IG9mIG1hY2hpbmUtc3BlY2lmaWMgcGFja2FnZXMgdG8gaW5zdGFsbCBhcyBwYXJ0IG9mIHRoZSBpbWFnZSBiZWluZyBidWlsdCB0aGF0IGFyZSBub3QgZXNzZW50aWFsIGZvciB0aGUgbWFjaGluZSB0byBib290LiBIb3dldmVyLCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgbW9yZSBmdWxseS1mZWF0dXJlZCBpbWFnZXMgZGVwZW5kcyBvbiB0aGUgcGFja2FnZXMgYmVpbmcgcHJlc2VudC4iCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTW2RvY10gPSAiQSBsaXN0IG9mIG1hY2hpbmUtc3BlY2lmaWMgcGFja2FnZXMgdG8gaW5zdGFsbCBhcyBwYXJ0IG9mIHRoZSBpbWFnZSBiZWluZyBidWlsdCB0aGF0IGFyZSBub3QgZXNzZW50aWFsIGZvciBib290aW5nIHRoZSBtYWNoaW5lLiBUaGUgaW1hZ2UgYmVpbmcgYnVpbHQgaGFzIG5vIGJ1aWxkIGRlcGVuZGVuY2llcyBvbiB0aGUgcGFja2FnZXMgaW4gdGhpcyBsaXN0LiIKK01BQ0hJTkVfRkVBVFVSRVNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgaGFyZHdhcmUgZmVhdHVyZXMgdGhlIE1BQ0hJTkUgc3VwcG9ydHMuIgorTUFDSElORV9GRUFUVVJFU19CQUNLRklMTFtkb2NdID0gIkZlYXR1cmVzIHRvIGJlIGFkZGVkIHRvIE1BQ0hJTkVfRkVBVFVSRVMgaWYgbm90IGFsc28gcHJlc2VudCBpbiBNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQuIFRoaXMgdmFyaWFibGUgaXMgc2V0IGluIHRoZSBtZXRhL2NvbmYvYml0YmFrZS5jb25mIGZpbGUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VyLWNvbmZpZ3VyYWJsZS4iCitNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRURbZG9jXSA9ICJGZWF0dXJlcyBmcm9tIE1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTEwgdGhhdCBzaG91bGQgbm90IGJlIGJhY2tmaWxsZWQgKGkuZS4gYWRkZWQgdG8gTUFDSElORV9GRUFUVVJFUykgZHVyaW5nIHRoZSBidWlsZC4iCitNQUNISU5FT1ZFUlJJREVTW2RvY10gPSAiTGlzdHMgb3ZlcnJpZGVzIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IG1hY2hpbmUuIEJ5IGRlZmF1bHQsIHRoaXMgbGlzdCBpbmNsdWRlcyB0aGUgdmFsdWUgb2YgTUFDSElORS4iCitNQUlOVEFJTkVSW2RvY10gPSAiVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIGRpc3RyaWJ1dGlvbiBtYWludGFpbmVyLiIKK01JUlJPUlNbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBwYXRocyBmcm9tIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGdldHMgc291cmNlIGNvZGUuIgorTUxQUkVGSVhbZG9jXSA9ICJTcGVjaWZpZXMgYSBwcmVmaXggaGFzIGJlZW4gYWRkZWQgdG8gUE4gdG8gY3JlYXRlIGEgc3BlY2lhbCB2ZXJzaW9uIG9mIGEgcmVjaXBlIG9yIHBhY2thZ2UsIHN1Y2ggYXMgYSBNdWx0aWxpYiB2ZXJzaW9uLiIKK01PRFVMRV9UQVJCQUxMX0RFUExPWVtkb2NdID0gIkNvbnRyb2xzIGNyZWF0aW9uIG9mIHRoZSBtb2R1bGVzLSoudGd6IGZpbGUuIFNldCB0aGlzIHZhcmlhYmxlIHRvICIwIiB0byBkaXNhYmxlIGNyZWF0aW9uIG9mIHRoaXMgZmlsZSwgd2hpY2ggY29udGFpbnMgYWxsIG9mIHRoZSBrZXJuZWwgbW9kdWxlcyByZXN1bHRpbmcgZnJvbSBhIGtlcm5lbCBidWlsZC4iCitNVUxUSU1BQ0hfVEFSR0VUX1NZU1tkb2NdID0gIlNlcGFyYXRlcyBmaWxlcyBmb3IgZGlmZmVyZW50IG1hY2hpbmVzIHN1Y2ggdGhhdCB5b3UgY2FuIGJ1aWxkIGZvciBtdWx0aXBsZSB0YXJnZXQgbWFjaGluZXMgdXNpbmcgdGhlIHNhbWUgb3V0cHV0IGRpcmVjdG9yaWVzLiIKKworI04KKworTkFUSVZFTFNCU1RSSU5HW2RvY10gPSAiQSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGhvc3QgZGlzdHJpYnV0aW9uLiIKK05PX1JFQ09NTUVOREFUSU9OU1tkb2NdID0gIldoZW4gc2V0IHRvICcxJywgbm8gcmVjb21tZW5kZWQgcGFja2FnZXMgd2lsbCBiZSBpbnN0YWxsZWQuIFJlYWxpemUgdGhhdCBzb21lIHJlY29tbWVuZGVkIHBhY2thZ2VzIG1pZ2h0IGJlIHJlcXVpcmVkIGZvciBjZXJ0YWluIHN5c3RlbSBmdW5jdGlvbmFsaXR5LCBzdWNoIGFzIGtlcm5lbC1tb2R1bGVzLiBJdCBpcyB1cCB0byB0aGUgdXNlciB0byBhZGQgcGFja2FnZXMgdG8gSU1BR0VfSU5TVEFMTCBhcyBuZWVkZWQuIgorTk9IRERbZG9jXSA9ICJDYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gc2tpcCBidWlsZGluZyB0aGUgLmhkZGltZyBpbWFnZS4iCitOT0lTT1tkb2NdID0gIkNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBza2lwIGJ1aWxkaW5nIHRoZSBJU08gaW1hZ2UuIgorCisjTworCitPRV9CSU5DT05GSUdfRVhUUkFfTUFOR0xFW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgYmluY29uZmlnLmJiY2xhc3MgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGFkZGl0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgInNlZCIgY29tbWFuZC4iCitPRV9JTVBPUlRTW2RvY10gPSAiQW4gaW50ZXJuYWwgdmFyaWFibGUgdXNlZCB0byB0ZWxsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdoYXQgUHl0aG9uIG1vZHVsZXMgdG8gaW1wb3J0IGZvciBldmVyeSBQeXRob24gZnVuY3Rpb24gcnVuIGJ5IHRoZSBzeXN0ZW0uIgorT0VfVEVSTUlOQUxbZG9jXSA9ICJDb250cm9scyBob3cgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3Bhd25zIGludGVyYWN0aXZlIHRlcm1pbmFscyBvbiB0aGUgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0uIgorT0VST09UW2RvY10gPSAiVGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIHRoZSB0b3AtbGV2ZWwgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IGlzIHNvdXJjZWQuIgorT0xERVNUX0tFUk5FTFtkb2NdID0gIkRlY2xhcmVzIHRoZSBvbGRlc3QgdmVyc2lvbiBvZiB0aGUgTGludXgga2VybmVsIHRoYXQgdGhlIHByb2R1Y2VkIGJpbmFyaWVzIG11c3Qgc3VwcG9ydC4iCitPVkVSUklERVNbZG9jXSA9ICJCaXRCYWtlIHVzZXMgT1ZFUlJJREVTIHRvIGNvbnRyb2wgd2hhdCB2YXJpYWJsZXMgYXJlIG92ZXJyaWRkZW4gYWZ0ZXIgQml0QmFrZSBwYXJzZXMgcmVjaXBlcyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4iCisKKyNQCisKK1BbZG9jXSA9ICJUaGUgcmVjaXBlIG5hbWUgYW5kIHZlcnNpb24uIFAgaXMgY29tcHJpc2VkIG9mICR7UE59LSR7UFZ9LiIKK1BBQ0tBR0VfQVJDSFtkb2NdID0gIlRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIHJlc3VsdGluZyBwYWNrYWdlIG9yIHBhY2thZ2VzLiIKK1BBQ0tBR0VfQVJDSFNbZG9jXSA9ICJBIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGggdGhlIGdpdmVuIHRhcmdldCBpbiBvcmRlciBvZiBwcmlvcml0eS4iCitQQUNLQUdFX0JFRk9SRV9QTltkb2NdID0gIkVuYWJsZXMgZWFzaWx5IGFkZGluZyBwYWNrYWdlcyB0byBQQUNLQUdFUyBiZWZvcmUgJHtQTn0gc28gdGhhdCB0aGUgcGFja2FnZXMgY2FuIHBpY2sgdXAgZmlsZXMgdGhhdCB3b3VsZCBub3JtYWxseSBiZSBpbmNsdWRlZCBpbiB0aGUgZGVmYXVsdCBwYWNrYWdlLiIKK1BBQ0tBR0VfQ0xBU1NFU1tkb2NdID0gIlRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlIHdoZW4gcGFja2FnaW5nIGRhdGEuIEl0IGlzIHNldCBpbiB0aGUgY29uZi9sb2NhbC5jb25mIGZpbGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4iCitQQUNLQUdFX0VYQ0xVREVbZG9jXSA9ICJQYWNrYWdlcyB0byBleGNsdWRlIGZyb20gdGhlIGluc3RhbGxhdGlvbi4gSWYgYSBsaXN0ZWQgcGFja2FnZSBpcyByZXF1aXJlZCwgYW4gZXJyb3IgaXMgZ2VuZXJhdGVkLiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGggdGhlIGRldmljZSBDUFUuIFRoaXMgdmFyaWFibGUgaXMgdXNlZnVsIHdoZW4geW91IGJ1aWxkIGZvciBzZXZlcmFsIGRpZmZlcmVudCBkZXZpY2VzIHRoYXQgdXNlIG1pc2NlbGxhbmVvdXMgcHJvY2Vzc29ycy4iCitQQUNLQUdFX0dST1VQW2RvY10gPSAiRGVmaW5lcyBvbmUgb3IgbW9yZSBwYWNrYWdlcyB0byBpbmNsdWRlIGluIGFuIGltYWdlIHdoZW4gYSBzcGVjaWZpYyBpdGVtIGlzIGluY2x1ZGVkIGluIElNQUdFX0ZFQVRVUkVTLiIKK1BBQ0tBR0VfSU5TVEFMTFtkb2NdID0gIkxpc3Qgb2YgdGhlIHBhY2thZ2VzIHRvIGJlIGluc3RhbGxlZCBpbnRvIHRoZSBpbWFnZS4gVGhlIHZhcmlhYmxlIGlzIGdlbmVyYWxseSBub3QgdXNlci1kZWZpbmVkIGFuZCB1c2VzIElNQUdFX0lOU1RBTEwgYXMgcGFydCBvZiB0aGUgbGlzdC4iCitQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFlbZG9jXSA9ICJMaXN0IG9mIHBhY2thZ2VzIGF0dGVtcHRlZCB0byBiZSBpbnN0YWxsZWQuIElmIGEgbGlzdGVkIHBhY2thZ2UgZmFpbHMgdG8gaW5zdGFsbCwgdGhlIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBnZW5lcmF0ZSBhbiBlcnJvci4gVGhpcyB2YXJpYWJsZSBpcyBnZW5lcmFsbHkgbm90IHVzZXItZGVmaW5lZC4iCitQQUNLQUdFQ09ORklHW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBwcm92aWRlcyBhIG1lYW5zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBmZWF0dXJlcyBvZiBhIHJlY2lwZSBvbiBhIHBlci1yZWNpcGUgYmFzaXMuIgorUEFDS0FHRVNbZG9jXSA9ICJUaGUgbGlzdCBvZiBwYWNrYWdlcyB0byBiZSBjcmVhdGVkIGZyb20gdGhlIHJlY2lwZS4iCitQQUNLQUdFU19EWU5BTUlDW2RvY10gPSAiQSBwcm9taXNlIHRoYXQgeW91ciByZWNpcGUgc2F0aXNmaWVzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGZvciBvcHRpb25hbCBtb2R1bGVzIHRoYXQgYXJlIGZvdW5kIGluIG90aGVyIHJlY2lwZXMuIgorUEFSQUxMRUxfTUFLRVtkb2NdID0gIlNwZWNpZmllcyBleHRyYSBvcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgbWFrZSBjb21tYW5kIGR1cmluZyB0aGUgY29tcGlsZSB0YXNrcy4gVGhpcyB2YXJpYWJsZSBpcyB1c3VhbGx5IGluIHRoZSBmb3JtIC1qIDQsIHdoZXJlIHRoZSBudW1iZXIgcmVwcmVzZW50cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgdGhyZWFkcyBtYWtlIGNhbiBydW4uIgorUEFSQUxMRUxfTUFLRUlOU1RbZG9jXSA9ICJFeHRyYSBvcHRpb25zIHBhc3NlZCB0byB0aGUgbWFrZSBpbnN0YWxsIGNvbW1hbmQgZHVyaW5nIHRoZSBkb19pbnN0YWxsIHRhc2sgaW4gb3JkZXIgdG8gc3BlY2lmeSBwYXJhbGxlbCBpbnN0YWxsYXRpb24uIgorUEFUQ0hSRVNPTFZFW2RvY10gPSAiRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJhY3RpdmUgcGF0Y2ggcmVzb2x1dGlvbi4iCitQQVRDSFRPT0xbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHV0aWxpdHkgdXNlZCB0byBhcHBseSBwYXRjaGVzIGZvciBhIHJlY2lwZSBkdXJpbmcgZG9fcGF0Y2guIgorUEVbZG9jXSA9ICJUaGUgZXBvY2ggb2YgdGhlIHJlY2lwZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgJzAnLiBUaGUgZmllbGQgaXMgdXNlZCB0byBtYWtlIHVwZ3JhZGVzIHBvc3NpYmxlIHdoZW4gdGhlIHZlcnNpb25pbmcgc2NoZW1lIGNoYW5nZXMgaW4gc29tZSBiYWNrd2FyZHMgaW5jb21wYXRpYmxlIHdheS4iCitQRltkb2NdID0gIlNwZWNpZmllcyB0aGUgcmVjaXBlIG9yIHBhY2thZ2UgbmFtZSBhbmQgaW5jbHVkZXMgYWxsIHZlcnNpb24gYW5kIHJldmlzaW9uIG51bWJlcnMuIFRoaXMgdmFyaWFibGUgaXMgY29tcHJpc2VkIG9mICR7UE59LSR7RVhURU5EUEV9JHtQVn0tJHtQUn0uIgorUElYQlVGX1BBQ0tBR0VTW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgcGl4YnVmY2FjaGUgY2xhc3MsIHRoaXMgdmFyaWFibGUgaWRlbnRpZmllcyBwYWNrYWdlcyB0aGF0IGNvbnRhaW4gdGhlIHBpeGJ1ZiBsb2FkZXJzIHVzZWQgd2l0aCBnZGstcGl4YnVmLiIKK1BLR0RbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBmb3IgZmlsZXMgdG8gYmUgcGFja2FnZWQgYmVmb3JlIHRoZXkgYXJlIHNwbGl0IGludG8gaW5kaXZpZHVhbCBwYWNrYWdlcy4iCitQS0dEQVRBX0RJUltkb2NdID0gIlBvaW50cyB0byBhIHNoYXJlZCwgZ2xvYmFsLXN0YXRlIGRpcmVjdG9yeSB0aGF0IGhvbGRzIGRhdGEgZ2VuZXJhdGVkIGR1cmluZyB0aGUgcGFja2FnaW5nIHByb2Nlc3MuIgorUEtHREVTVFtkb2NdID0gIlBvaW50cyB0byB0aGUgcGFyZW50IGRpcmVjdG9yeSBmb3IgZmlsZXMgdG8gYmUgcGFja2FnZWQgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gc3BsaXQgaW50byBpbmRpdmlkdWFsIHBhY2thZ2VzLiIKK1BLR0RFU1RXT1JLW2RvY10gPSAiUG9pbnRzIHRvIGEgdGVtcG9yYXJ5IHdvcmsgYXJlYSB1c2VkIGJ5IHRoZSBkb19wYWNrYWdlIHRhc2sgdG8gd3JpdGUgb3V0cHV0IGZyb20gdGhlIGRvX3BhY2thZ2VkYXRhIHRhc2suIgorUE5bZG9jXSA9ICJQTiByZWZlcnMgdG8gYSByZWNpcGUgbmFtZSBpbiB0aGUgY29udGV4dCBvZiBhIGZpbGUgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhcyBpbnB1dCB0byBjcmVhdGUgYSBwYWNrYWdlLiBJdCByZWZlcnMgdG8gYSBwYWNrYWdlIG5hbWUgaW4gdGhlIGNvbnRleHQgb2YgYSBmaWxlIGNyZWF0ZWQgb3IgcHJvZHVjZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorUE5CTEFDS0xJU1RbZG9jXSA9ICJMaXN0cyByZWNpcGVzIHlvdSBkbyBub3Qgd2FudCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBidWlsZC4iCitQUltkb2NdID0gIlRoZSByZXZpc2lvbiBvZiB0aGUgcmVjaXBlLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyB2YXJpYWJsZSBpcyAncjAnLiIKK1BSRUZFUlJFRF9QUk9WSURFUltkb2NdID0gIklmIG11bHRpcGxlIHJlY2lwZXMgcHJvdmlkZSBhbiBpdGVtLCB0aGlzIHZhcmlhYmxlIGRldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlLiIKK1BSRUZFUlJFRF9WRVJTSU9OW2RvY10gPSAiSWYgdGhlcmUgYXJlIG11bHRpcGxlIHZlcnNpb25zIG9mIHJlY2lwZXMgYXZhaWxhYmxlLCB0aGlzIHZhcmlhYmxlIGRldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlLiIKK1BSRU1JUlJPUlNbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBwYXRocyBmcm9tIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGdldHMgc291cmNlIGNvZGUuIgorUFJJTkNbZG9jXSA9ICJDYXVzZXMgdGhlIFBSIHZhcmlhYmxlIG9mIC5iYmFwcGVuZCBmaWxlcyB0byBkeW5hbWljYWxseSBpbmNyZW1lbnQuIFRoaXMgaW5jcmVtZW50IG1pbmltaXplcyB0aGUgaW1wYWN0IG9mIGxheWVyIG9yZGVyaW5nLiBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvICcwJy4iCitQUklPUklUWVtkb2NdID0gIkluZGljYXRlcyB0aGUgaW1wb3J0YW5jZSBvZiBhIHBhY2thZ2UuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAnb3B0aW9uYWwnLiAgT3RoZXIgc3RhbmRhcmQgdmFsdWVzIGFyZSAncmVxdWlyZWQnLCAnc3RhbmRhcmQnIGFuZCAnZXh0cmEnLiIKK1BST1ZJREVTW2RvY10gPSAiQSBsaXN0IG9mIGFsaWFzZXMgdGhhdCBhIHJlY2lwZSBhbHNvIHByb3ZpZGVzLiBUaGVzZSBhbGlhc2VzIGFyZSB1c2VmdWwgZm9yIHNhdGlzZnlpbmcgZGVwZW5kZW5jaWVzIG9mIG90aGVyIHJlY2lwZXMgZHVyaW5nIHRoZSBidWlsZCBhcyBzcGVjaWZpZWQgYnkgREVQRU5EUy4iCitQUlNFUlZfSE9TVFtkb2NdID0gIlRoZSBuZXR3b3JrIGJhc2VkIFBSIHNlcnZpY2UgaG9zdCBhbmQgcG9ydC4iCitQVltkb2NdID0gIlRoZSB2ZXJzaW9uIG9mIHRoZSByZWNpcGUuIFRoZSB2ZXJzaW9uIGlzIG5vcm1hbGx5IGV4dHJhY3RlZCBmcm9tIHRoZSByZWNpcGUgZmlsZW5hbWUuIgorCisjUQorCitRTUFLRV9QUk9GSUxFU1tkb2NdID0gIlNwZWNpZmllcyB5b3VyIG93biBzdWJzZXQgb2YgLnBybyBmaWxlcyB0byBiZSBidWlsdCBmb3IgdXNlIHdpdGggcW1ha2UuIgorCisjUgorCitSQ09ORkxJQ1RTW2RvY10gPSAiVGhlIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBjb25mbGljdCB3aXRoIGFub3RoZXIgcGFja2FnZS4gTm90ZSB0aGF0IHRoZSBwYWNrYWdlIHdpbGwgbm90IGJlIGluc3RhbGxlZCBpZiB0aGUgY29uZmxpY3RpbmcgcGFja2FnZXMgYXJlIG5vdCBmaXJzdCByZW1vdmVkLiIKK1JERVBFTkRTW2RvY10gPSAiTGlzdHMgYSBwYWNrYWdlJ3MgcnVudGltZSBkZXBlbmRlbmNpZXMgKGkuZS4gb3RoZXIgcGFja2FnZXMpIHRoYXQgbXVzdCBiZSBpbnN0YWxsZWQgZm9yIHRoZSBwYWNrYWdlIHRvIGJlIGJ1aWx0LiBUaGV5IG11c3QgYmUgdGhlIG5hbWVzIG9mIG90aGVyIHBhY2thZ2VzIGFzIGxpc3RlZCBpbiB0aGUgUEFDS0FHRVMgdmFyaWFibGUsIG5vdCByZWNpcGUgbmFtZXMgKFBOKS4iCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgY2xhc3MsIHRoaXMgdmFyaWFibGUgaWRlbnRpZmllcyBkaXN0cmlidXRpb24gZmVhdHVyZXMgdGhhdCBtdXN0IGV4aXN0IGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaW4gb3JkZXIgZm9yIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIHRoZSByZWNpcGUuIgorUk1fT0xEX0lNQUdFW2RvY10gPSAiUmVjbGFpbXMgZGlzayBzcGFjZSBieSByZW1vdmluZyBwcmV2aW91c2x5IGJ1aWx0IHZlcnNpb25zIG9mIHRoZSBzYW1lIGltYWdlIGZyb20gdGhlIGltYWdlcyBkaXJlY3RvcnkgcG9pbnRlZCB0byBieSB0aGUgREVQTE9ZX0RJUiB2YXJpYWJsZS4iCitSTV9XT1JLX0VYQ0xVREVbZG9jXSA9ICJXaXRoIHJtX3dvcmsgZW5hYmxlZCwgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYSBsaXN0IG9mIHBhY2thZ2VzIHdob3NlIHdvcmsgZGlyZWN0b3JpZXMgc2hvdWxkIG5vdCBiZSByZW1vdmVkLiIKK1JPT1RGU1tkb2NdID0gIkluZGljYXRlcyBhIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gaW5jbHVkZSBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtLiIKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EW2RvY10gPSAiQWRkZWQgYnkgY2xhc3NlcyB0byBydW4gcG9zdCBwcm9jZXNzaW5nIGNvbW1hbmRzIG9uY2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIHJvb3QgZmlsZXN5c3RlbS4iCitSUFJPVklERVNbZG9jXSA9ICJBIGxpc3Qgb2YgcGFja2FnZSBuYW1lIGFsaWFzZXMgdGhhdCBhIHBhY2thZ2UgYWxzbyBwcm92aWRlcy4gVGhlc2UgYWxpYXNlcyBhcmUgdXNlZnVsIGZvciBzYXRpc2Z5aW5nIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIG9mIG90aGVyIHBhY2thZ2VzIGJvdGggZHVyaW5nIHRoZSBidWlsZCBhbmQgb24gdGhlIHRhcmdldC4iCitSUkVDT01NRU5EU1tkb2NdID0gIkEgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGV4dGVuZHMgdGhlIHVzYWJpbGl0eSBvZiBhIHBhY2thZ2UgYmVpbmcgYnVpbHQuIFRoZSBwYWNrYWdlIGJlaW5nIGJ1aWx0IGRvZXMgbm90IGRlcGVuZCBvbiB0aGlzIGxpc3Qgb2YgcGFja2FnZXMgaW4gb3JkZXIgdG8gc3VjY2Vzc2Z1bGx5IGJ1aWxkLCBidXQgbmVlZHMgdGhlbSBmb3IgdGhlIGV4dGVuZGVkIHVzYWJpbGl0eS4iCitSUkVQTEFDRVNbZG9jXSA9ICJBIGxpc3Qgb2YgcGFja2FnZXMgcmVwbGFjZWQgYnkgYSBwYWNrYWdlLiBUaGUgcGFja2FnZSBtYW5hZ2VyIHVzZXMgdGhpcyB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hpY2ggcGFja2FnZSBzaG91bGQgYmUgaW5zdGFsbGVkIHRvIHJlcGxhY2Ugb3RoZXIgcGFja2FnZShzKSBkdXJpbmcgYW4gdXBncmFkZS4iCitSU1VHR0VTVFNbZG9jXSA9ICJBIGxpc3Qgb2YgYWRkaXRpb25hbCBwYWNrYWdlcyB0aGF0IHlvdSBjYW4gc3VnZ2VzdCBmb3IgaW5zdGFsbGF0aW9uIGJ5IHRoZSBwYWNrYWdlIG1hbmFnZXIgYXQgdGhlIHRpbWUgYSBwYWNrYWdlIGlzIGluc3RhbGxlZC4gTm90IGFsbCBwYWNrYWdlIG1hbmFnZXJzIHN1cHBvcnQgdGhpcyBmdW5jdGlvbmFsaXR5LiIKKworI1MKKworU1tkb2NdID0gIlRoZSBsb2NhdGlvbiBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IHdoZXJlIHVucGFja2VkIHBhY2thZ2Ugc291cmNlIGNvZGUgcmVzaWRlcy4iCitTQU5JVFlfVEVTVEVEX0RJU1RST1NbZG9jXSA9ICJBIGxpc3Qgb2YgdGhlIGhvc3QgZGlzdHJpYnV0aW9uIGlkZW50aWZpZXJzIHRoYXQgdGhlIGJ1aWxkIHN5c3RlbSBoYXMgYmVlbiB0ZXN0ZWQgYWdhaW5zdC4iCitTREtfQVJDSFtkb2NdID0gIlRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGZvciB0aGUgU0RLLiIKK1NES19ERVBMT1lbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IHNldCB1cCBhbmQgdXNlZCBieSB0aGUgcG9wdWxhdGVfc2RrX2Jhc2UgdG8gd2hpY2ggdGhlIFNESyBpcyBkZXBsb3llZC4iCitTREtfRElSW2RvY10gPSAiVGhlIHBhcmVudCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGVuIGNyZWF0aW5nIFNESyBvdXRwdXQuIgorU0RLX05BTUVbZG9jXSA9ICJUaGUgYmFzZSBuYW1lIGZvciBTREsgb3V0cHV0IGZpbGVzLiIKK1NES19PVVRQVVRbZG9jXSA9ICJUaGUgbG9jYXRpb24gdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGVuIGNyZWF0aW5nIFNESyBvdXRwdXQuIgorU0RLSU1BR0VfRkVBVFVSRVNbZG9jXSA9ICJFcXVpdmFsZW50IHRvIElNQUdFX0ZFQVRVUkVTLiBIb3dldmVyLCB0aGlzIHZhcmlhYmxlIGFwcGxpZXMgdG8gdGhlIFNESyBnZW5lcmF0ZWQgZnJvbSBhbiBpbWFnZSB1c2luZyB0aGUgY29tbWFuZCAnYml0YmFrZSAtYyBwb3B1bGF0ZV9zZGsgaW1hZ2VuYW1lJy4iCitTREtNQUNISU5FW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBhcmNoaXRlY3R1cmUgKGkuZS4gaTY4NiBvciB4ODZfNjQpIGZvciB3aGljaCB0byBidWlsZCBTREsgYW5kIEFEVCBpdGVtcy4iCitTRUNUSU9OW2RvY10gPSAiVGhlIHNlY3Rpb24gaW4gd2hpY2ggcGFja2FnZXMgc2hvdWxkIGJlIGNhdGVnb3JpemVkLiBQYWNrYWdlIG1hbmFnZW1lbnQgdXRpbGl0aWVzIGNhbiBtYWtlIHVzZSBvZiB0aGlzIHZhcmlhYmxlLiIKK1NFTEVDVEVEX09QVElNSVpBVElPTltkb2NdID0gIlRoZSB2YXJpYWJsZSB0YWtlcyB0aGUgdmFsdWUgb2YgRlVMTF9PUFRJTUlaQVRJT04gdW5sZXNzIERFQlVHX0JVSUxEID0gJzEnLiBJbiB0aGlzIGNhc2UsIHRoZSB2YWx1ZSBvZiBERUJVR19PUFRJTUlaQVRJT04gaXMgdXNlZC4iCitTRVJJQUxfQ09OU09MRVtkb2NdID0gIlRoZSBzcGVlZCBhbmQgZGV2aWNlIGZvciB0aGUgc2VyaWFsIHBvcnQgdXNlZCB0byBhdHRhY2ggdGhlIHNlcmlhbCBjb25zb2xlLiBUaGlzIHZhcmlhYmxlIGlzIGdpdmVuIHRvIHRoZSBrZXJuZWwgYXMgdGhlICdjb25zb2xlJyBwYXJhbWV0ZXIuIEFmdGVyIGJvb3Rpbmcgb2NjdXJzLCBnZXR0eSBpcyBzdGFydGVkIG9uIHRoYXQgcG9ydCBzbyByZW1vdGUgbG9naW4gaXMgcG9zc2libGUuIgorU0VSSUFMX0NPTlNPTEVTW2RvY10gPSAiRGVmaW5lcyB0aGUgc2VyaWFsIGNvbnNvbGVzIChUVFlzKSB0byBlbmFibGUgdXNpbmcgZ2V0dHkuIgorU0VSSUFMX0NPTlNPTEVTX0NIRUNLW2RvY10gPSAiU2ltaWxhciB0byBTRVJJQUxfQ09OU09MRVMgZXhjZXB0IHRoZSBkZXZpY2UgaXMgY2hlY2tlZCBmb3IgZXhpc3RlbmNlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGVuYWJsZSBpdC4gU3VwcG9ydGVkIG9ubHkgYnkgU3lzVmluaXQuIgorU0lHR0VOX0VYQ0xVREVfU0FGRV9SRUNJUEVfREVQU1tkb2NdID0gIkEgbGlzdCBvZiByZWNpcGUgZGVwZW5kZW5jaWVzIHRoYXQgc2hvdWxkIG5vdCBiZSB1c2VkIHRvIGRldGVybWluZSBzaWduYXR1cmVzIG9mIHRhc2tzIGZyb20gb25lIHJlY2lwZSB3aGVuIHRoZXkgZGVwZW5kIG9uIHRhc2tzIGZyb20gYW5vdGhlciByZWNpcGUuIgorU0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkVbZG9jXSA9ICJBIGxpc3Qgb2YgcmVjaXBlcyB0aGF0IGFyZSBjb21wbGV0ZWx5IHN0YWJsZSBhbmQgd2lsbCBuZXZlciBjaGFuZ2UuIgorU0lURUlORk9fQklUU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGJpdHMgZm9yIHRoZSB0YXJnZXQgc3lzdGVtIENQVS4iCitTSVRFSU5GT19FTkRJQU5ORVNTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBlbmRpYW4gYnl0ZSBvcmRlciBvZiB0aGUgdGFyZ2V0IHN5c3RlbS4gVGhlIHZhbHVlIHNob3VsZCBiZSBlaXRoZXIgJ2xlJyBmb3IgJ2xpdHRsZS1lbmRpYW4nIG9yICdiZScgZm9yICdiaWctZW5kaWFuJy4iCitTT0NfRkFNSUxZW2RvY10gPSAiR3JvdXBzIHRvZ2V0aGVyIG1hY2hpbmVzIGJhc2VkIHVwb24gdGhlIHNhbWUgZmFtaWx5IG9mIFNPQyAoU3lzdGVtIE9uIENoaXApLiBZb3UgdHlwaWNhbGx5IHNldCB0aGlzIHZhcmlhYmxlIGluIGEgY29tbW9uIC5pbmMgZmlsZSB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIG9mIGFsbCB0aGUgbWFjaGluZXMuIgorU09MSUJTW2RvY10gPSAiRGVmaW5lcyB0aGUgc3VmZml4IGZvciBzaGFyZWQgbGlicmFyaWVzIHVzZWQgb24gdGhlIHRhcmdldCBwbGF0Zm9ybS4iCitTT0xJQlNERVZbZG9jXSA9ICJEZWZpbmVzIHRoZSBzdWZmaXggZm9yIHRoZSBkZXZlbG9wbWVudCBzeW1ib2xpYyBsaW5rIChzeW1saW5rKSBmb3Igc2hhcmVkIGxpYnJhcmllcyBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLiIKK1NPVVJDRV9NSVJST1JfRkVUQ0hbZG9jXSA9ICJTd2l0Y2ggbWFya2luZyBidWlsZCBhcyBzb3VyY2UgZmV0Y2hlci4gVXNlZCB0byBza2lwIENPTVBBVElCTEVfKiBjaGVja2luZy4iCitTT1VSQ0VfTUlSUk9SX1VSTFtkb2NdID0gIlVSTCB0byBzb3VyY2UgbWlycm9yIHRoYXQgd2lsbCBiZSB1c2VkIGJlZm9yZSBmZXRjaGluZyBmcm9tIG9yaWdpbmFsIFNSQ19VUkkuIgorU1BFQ0lBTF9QS0dTVUZGSVhbZG9jXSA9ICJBIGxpc3Qgb2YgcHJlZml4ZXMgZm9yIFBOIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gY3JlYXRlIHZhcmlhbnRzIG9mIHJlY2lwZXMgb3IgcGFja2FnZXMuIFRoZSBsaXN0IHNwZWNpZmllcyB0aGUgcHJlZml4ZXMgdG8gc3RyaXAgb2ZmIGR1cmluZyBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgc3VjaCBhcyB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgQlBOIHZhcmlhYmxlLiIKK1NSQ19VUklbZG9jXSA9ICJUaGUgbGlzdCBvZiBzb3VyY2UgZmlsZXMgLSBsb2NhbCBvciByZW1vdGUuIFRoaXMgdmFyaWFibGUgdGVsbHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2hhdCBiaXRzIHRvIHB1bGwgaW4gZm9yIHRoZSBidWlsZCBhbmQgaG93IHRvIHB1bGwgdGhlbSBpbi4iCitTUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0hbZG9jXSA9ICJCeSBkZWZhdWx0LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgd2hldGhlciBTUkNfVVJJIGNvbnRhaW5zIGZpbGVzIHRoYXQgYXJlIG1hY2hpbmUtc3BlY2lmaWMuIElmIHNvLCB0aGUgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyBQQUNLQUdFX0FSQ0guIFNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byAnMCcgZGlzYWJsZXMgdGhpcyBiZWhhdmlvci4iCitTUkNEQVRFW2RvY10gPSAiVGhlIGRhdGUgb2YgdGhlIHNvdXJjZSBjb2RlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuIFRoaXMgdmFyaWFibGUgYXBwbGllcyBvbmx5IGlmIHRoZSBzb3VyY2Ugd2FzIGZldGNoZWQgZnJvbSBhIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSkuIgorU1JDUFZbZG9jXSA9ICJSZXR1cm5zIHRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgY3VycmVudCBwYWNrYWdlLiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIGhlbHAgZGVmaW5lIHRoZSB2YWx1ZSBvZiBQVi4iCitTUkNSRVZbZG9jXSA9ICJUaGUgcmV2aXNpb24gb2YgdGhlIHNvdXJjZSBjb2RlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuIFRoaXMgdmFyaWFibGUgYXBwbGllcyB0byBTdWJ2ZXJzaW9uLCBHaXQsIE1lcmN1cmlhbCBhbmQgQmF6YWFyIG9ubHkuIgorU1NUQVRFX0RJUltkb2NdID0gIlRoZSBkaXJlY3RvcnkgZm9yIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUuIgorU1NUQVRFX01JUlJPUlNbZG9jXSA9ICJDb25maWd1cmVzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHNlYXJjaCBvdGhlciBtaXJyb3IgbG9jYXRpb25zIGZvciBwcmVidWlsdCBjYWNoZSBkYXRhIG9iamVjdHMgYmVmb3JlIGJ1aWxkaW5nIG91dCB0aGUgZGF0YS4gWW91IGNhbiBzcGVjaWZ5IGEgZmlsZXN5c3RlbSBkaXJlY3Rvcnkgb3IgYSByZW1vdGUgVVJMIHN1Y2ggYXMgSFRUUCBvciBGVFAuIgorU1RBR0lOR19LRVJORUxfRElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSB3aXRoIGtlcm5lbCBoZWFkZXJzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGJ1aWxkIG91dC1vZi10cmVlIG1vZHVsZXMuIgorU1RBTVBbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGJhc2UgcGF0aCB1c2VkIHRvIGNyZWF0ZSByZWNpcGUgc3RhbXAgZmlsZXMuIFRoZSBwYXRoIHRvIGFuIGFjdHVhbCBzdGFtcCBmaWxlIGlzIGNvbnN0cnVjdGVkIGJ5IGV2YWx1YXRpbmcgdGhpcyBzdHJpbmcgYW5kIHRoZW4gYXBwZW5kaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uIgorU1RBTVBTX0RJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgYmFzZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGxhY2VzIHN0YW1wcy4iCitTVU1NQVJZW2RvY10gPSAiVGhlIHNob3J0ICg4MCBjaGFyYWN0ZXJzIG9yIGxlc3MpIHN1bW1hcnkgb2YgdGhlIGJpbmFyeSBwYWNrYWdlIGZvciBwYWNrYWdpbmcgc3lzdGVtcyBzdWNoIGFzIG9wa2csIHJwbSBvciBkcGtnLiBCeSBkZWZhdWx0LCBTVU1NQVJZIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBERVNDUklQVElPTiB2YXJpYWJsZSBpZiBERVNDUklQVElPTiBpcyBub3Qgc2V0IGluIHRoZSByZWNpcGUuIgorU1ZORElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSB3aGVyZSBTdWJ2ZXJzaW9uIGNoZWNrb3V0cyB3aWxsIGJlIHN0b3JlZC4iCitTWVNMSU5VWF9ERUZBVUxUX0NPTlNPTEVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGtlcm5lbCBib290IGRlZmF1bHQgY29uc29sZS4iCitTWVNMSU5VWF9PUFRTW2RvY10gPSAiTGlzdHMgYWRkaXRpb25hbCBvcHRpb25zIHRvIGFkZCB0byB0aGUgc3lzbGludXggZmlsZS4iCitTWVNMSU5VWF9TRVJJQUxbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGFsdGVybmF0ZSBzZXJpYWwgcG9ydCBvciB0dXJucyBpdCBvZmYuIgorU1lTTElOVVhfU1BMQVNIW2RvY10gPSAiQW4gLkxTUyBmaWxlIHVzZWQgYXMgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBWR0EgYm9vdCBtZW51IHdoZW4geW91IGFyZSB1c2luZyB0aGUgYm9vdCBtZW51LiIKK1NZU0xJTlVYX1NFUklBTF9UVFlbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGFsdGVybmF0ZSBjb25zb2xlPXR0eS4uLiBrZXJuZWwgYm9vdCBhcmd1bWVudC4iCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1NbZG9jXSA9ICJBIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGV4ZWN1dGUgYWZ0ZXIgZmlsZXMgYXJlIHN0YWdlZCBpbnRvIHRoZSBzeXNyb290LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgdXNlZCB0byBhcHBseSBhZGRpdGlvbmFsIHByb2Nlc3Npbmcgb24gdGhlIHN0YWdlZCBmaWxlcywgb3IgdG8gc3RhZ2UgYWRkaXRpb25hbCBmaWxlcy4iCitTWVNURU1EX0FVVE9fRU5BQkxFW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBzeXN0ZW1kIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBzZXJ2aWNlIHlvdSBoYXZlIHNwZWNpZmllZCBpbiBTWVNURU1EX1NFUlZJQ0Ugc2hvdWxkIGJlIHN0YXJ0ZWQgYXV0b21hdGljYWxseSBvciBub3QuIgorU1lTVEVNRF9QQUNLQUdFU1tkb2NdID0gIkZvciByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgc3lzdGVtZCBjbGFzcywgdGhpcyB2YXJpYWJsZSBsb2NhdGVzIHRoZSBzeXN0ZW1kIHVuaXQgZmlsZXMgd2hlbiB0aGV5IGFyZSBub3QgZm91bmQgaW4gdGhlIG1haW4gcmVjaXBlJ3MgcGFja2FnZS4iCitTWVNURU1EX1NFUlZJQ0VbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIHN5c3RlbWQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBzeXN0ZW1kIHNlcnZpY2UgbmFtZSBmb3IgYSBwYWNrYWdlLiIKK1NZU1ZJTklUX0VOQUJMRURfR0VUVFlTW2RvY10gPSAiU3BlY2lmaWVzIHdoaWNoIHZpcnR1YWwgdGVybWluYWxzIHNob3VsZCBiZSBydW5uaW5nIGEgZ2V0dHksIHRoZSBkZWZhdWx0IGlzICcxJy4iCisKKyNUCisKK1RbZG9jXSA9ICJUaGlzIHZhcmlhYmxlIHBvaW50cyB0byBhIGRpcmVjdG9yeSB3ZXJlIEJpdEJha2UgcGxhY2VzIHRlbXBvcmFyeSBmaWxlcywgd2hpY2ggY29uc2lzdCBtb3N0bHkgb2YgdGFzayBsb2dzIGFuZCBzY3JpcHRzLCB3aGVuIGJ1aWxkaW5nIGEgcGFydGljdWxhciByZWNpcGUuIgorVEFSR0VUX0FSQ0hbZG9jXSA9ICJUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBkZXZpY2UgYmVpbmcgYnVpbHQuIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgYXJjaGl0ZWN0dXJlczogYXJtLCBtaXBzLCBwcGMsIHg4NiwgeDg2LTY0LiIKK1RBUkdFVF9DRkxBR1NbZG9jXSA9ICJGbGFncyBwYXNzZWQgdG8gdGhlIEMgY29tcGlsZXIgZm9yIHRoZSB0YXJnZXQgc3lzdGVtLiBUaGlzIHZhcmlhYmxlIGV2YWx1YXRlcyB0byB0aGUgc2FtZSBhcyBDRkxBR1MuIgorVEFSR0VUX0ZQVVtkb2NdID0gIlNwZWNpZmllcyB0aGUgbWV0aG9kIGZvciBoYW5kbGluZyBGUFUgY29kZS4gRm9yIEZQVS1sZXNzIHRhcmdldHMsIHdoaWNoIGluY2x1ZGUgbW9zdCBBUk0gQ1BVcywgdGhlIHZhcmlhYmxlIG11c3QgYmUgc2V0IHRvICdzb2Z0Jy4gSWYgbm90LCB0aGUga2VybmVsIGVtdWxhdGlvbiBnZXRzIHVzZWQsIHdoaWNoIHJlc3VsdHMgaW4gYSBwZXJmb3JtYW5jZSBwZW5hbHR5LiIKK1RBUkdFVF9PU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgdGFyZ2V0J3Mgb3BlcmF0aW5nIHN5c3RlbS4iCitUQVJHRVRfUFJFRklYW2RvY10gPSAiVGhlIHByZWZpeCBmb3IgdGhlIGNyb3NzLWNvbXBpbGUgdG9vbGNoYWluIChlLmcuIGFybS1saW51eC0pLiIKK1RBUkdFVF9TWVNbZG9jXSA9ICJUaGUgdGFyZ2V0IHN5c3RlbSBpcyBjb21wcmlzZWQgb2YgVEFSR0VUX0FSQ0gsVEFSR0VUX1ZFTkRPUiBhbmQgVEFSR0VUX09TLiIKK1RDTElCQ1tkb2NdID0gIlNwZWNpZmllcyBHTlUgc3RhbmRhcmQgQyBsaWJyYXJ5IChsaWJjKSB2YXJpYW50IHRvIHVzZSBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIFlvdSBjYW4gc2VsZWN0ICdnbGliYycgb3IgJ3VjbGliYycuIgorVENNT0RFW2RvY10gPSAiRW5hYmxlcyBhbiBleHRlcm5hbCB0b29sY2hhaW4gKHdoZXJlIHByb3ZpZGVkIGJ5IGFuIGFkZGl0aW9uYWwgbGF5ZXIpIGlmIHNldCB0byBhIHZhbHVlIG90aGVyIHRoYW4gJ2RlZmF1bHQnLiIKK1RFU1RfSU1BR0VbZG9jXSA9ICJFbmFibGVzIHRlc3QgYm9vdGluZyBvZiB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2VzIHVuZGVyIHRoZSBRRU1VIGVtdWxhdG9yIGFmdGVyIGFueSByb290IGZpbGVzeXN0ZW1zIGFyZSBjcmVhdGVkIGFuZCBydW5zIHRlc3RzIGFnYWluc3QgdGhvc2UgaW1hZ2VzLiIKK1RFU1RfUUVNVUJPT1RfVElNRU9VVFtkb2NdID0gIlRoZSB0aW1lIGluIHNlY29uZHMgYWxsb3dlZCBmb3IgYW4gaW1hZ2UgdG8gYm9vdCBiZWZvcmUgYXV0b21hdGVkIHJ1bnRpbWUgdGVzdHMgYmVnaW4gdG8gcnVuIGFnYWluc3QgYW4gaW1hZ2UuIgorVEVTVF9TVUlURVNbZG9jXSA9ICJBbiBvcmRlcmVkIGxpc3Qgb2YgdGVzdHMgKG1vZHVsZXMpIHRvIHJ1biBhZ2FpbnN0IGFuIGltYWdlIHdoZW4gcGVyZm9ybWluZyBhdXRvbWF0ZWQgcnVudGltZSB0ZXN0aW5nLiIKK1RFU1RfUE9XRVJDT05UUk9MX0NNRFtkb2NdID0gIkZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIHRoZSBjb21tYW5kIHRvIHVzZSB0byBjb250cm9sIHRoZSBwb3dlciBvZiB0aGUgdGFyZ2V0IG1hY2hpbmUgdW5kZXIgdGVzdCIKK1RFU1RfUE9XRVJDT05UUk9MX0VYVFJBX0FSR1NbZG9jXSA9ICJGb3IgYXV0b21hdGVkIGhhcmR3YXJlIHRlc3RpbmcsIHNwZWNpZmllcyBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGNvbW1hbmQgc3BlY2lmaWVkIGluIFRFU1RfUE9XRVJDT05UUk9MX0NNRCIKK1RFU1RfU0VSSUFMQ09OVFJPTF9DTURbZG9jXSA9ICJGb3IgYXV0b21hdGVkIGhhcmR3YXJlIHRlc3RpbmcsIHNwZWNpZmllcyB0aGUgY29tbWFuZCB0byB1c2UgdG8gY29ubmVjdCB0byB0aGUgc2VyaWFsIGNvbnNvbGUgb2YgdGhlIHRhcmdldCBtYWNoaW5lIHVuZGVyIHRlc3QiCitURVNUX1NFUklBTENPTlRST0xfRVhUUkFfQVJHU1tkb2NdID0gIkZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgY29tbWFuZCBzcGVjaWZpZWQgaW4gVEVTVF9TRVJJQUxDT05UUk9MX0NNRCIKK1RFU1RfVEFSR0VUW2RvY10gPSAiRm9yIGF1dG9tYXRlZCBydW50aW1lIHRlc3RpbmcsIHNwZWNpZmllcyB0aGUgbWV0aG9kIG9mIGRlcGxveWluZyB0aGUgaW1hZ2UgYW5kIHJ1bm5pbmcgdGVzdHMgb24gdGhlIHRhcmdldCBtYWNoaW5lIgorVEhJU0RJUltkb2NdID0gIlRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGZpbGUgQml0QmFrZSBpcyBjdXJyZW50bHkgcGFyc2luZyBpcyBsb2NhdGVkLiIKK1RJTUVbZG9jXSA9ICJUaGUgdGltZSB0aGUgYnVpbGQgd2FzIHN0YXJ0ZWQgdXNpbmcgSE1TIGZvcm1hdC4iCitUTVBESVJbZG9jXSA9ICJUaGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gaXQgZG9lcyBpdHMgd29yayBidWlsZGluZyBpbWFnZXMuIEJ5IGRlZmF1bHQsIHRoZSBUTVBESVIgdmFyaWFibGUgaXMgbmFtZWQgdG1wIHdpdGhpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKK1RPT0xDSEFJTl9IT1NUX1RBU0tbZG9jXSA9ICJUaGlzIHZhcmlhYmxlIGxpc3RzIHBhY2thZ2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgd2hlbiBidWlsZGluZyBhbiBTREssIHdoaWNoIGNvbnRhaW5zIGEgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuIgorVE9PTENIQUlOX1RBUkdFVF9UQVNLW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBsaXN0cyBwYWNrYWdlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gaXQgY3JlYXRlcyB0aGUgdGFyZ2V0IHBhcnQgb2YgYW4gU0RLLCB3aGljaCBpbmNsdWRlcyBsaWJyYXJpZXMgYW5kIGhlYWRlcnMuIgorVE9QRElSW2RvY10gPSAiVGhlIEJ1aWxkIERpcmVjdG9yeS4gQml0QmFrZSBhdXRvbWF0aWNhbGx5IHNldHMgdGhpcyB2YXJpYWJsZS4gVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgQnVpbGQgRGlyZWN0b3J5IHdoZW4gYnVpbGRpbmcgaW1hZ2VzLiIKK1RSQU5TTEFURURfVEFSR0VUX0FSQ0hbZG9jXSA9ICJBIHNhbml0aXplZCB2ZXJzaW9uIG9mIFRBUkdFVF9BUkNILiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgd2hlcmUgdGhlIGFyY2hpdGVjdHVyZSBpcyBuZWVkZWQgaW4gYSB2YWx1ZSB3aGVyZSB1bmRlcnNjb3JlcyBhcmUgbm90IGFsbG93ZWQuIgorVFVORV9QS0dBUkNIW2RvY10gPSAiVGhlIHBhY2thZ2UgYXJjaGl0ZWN0dXJlIHVuZGVyc3Rvb2QgYnkgdGhlIHBhY2thZ2luZyBzeXN0ZW0gdG8gZGVmaW5lIHRoZSBhcmNoaXRlY3R1cmUsIEFCSSwgYW5kIHR1bmluZyBvZiBvdXRwdXQgcGFja2FnZXMuIgorVFVORUFCSVtkb2NdID0gIkFuIHVuZGVybHlpbmcgQUJJIHVzZWQgYnkgYSBwYXJ0aWN1bGFyIHR1bmluZyBpbiBhIGdpdmVuIHRvb2xjaGFpbiBsYXllci4gVGhpcyBmZWF0dXJlIGFsbG93cyBwcm92aWRlcnMgdXNpbmcgcHJlYnVpbHQgbGlicmFyaWVzIHRvIGNoZWNrIGNvbXBhdGliaWxpdHkgb2YgYSB0dW5pbmcgYWdhaW5zdCB0aGVpciBzZWxlY3Rpb24gb2YgbGlicmFyaWVzLiIKK1RVTkVBQklfT1ZFUlJJREVbZG9jXSA9ICJJZiBzZXQsIGlnbm9yZXMgVFVORUFCSV9XSElURUxJU1QuIgorVFVORUFCSV9XSElURUxJU1RbZG9jXSA9ICJBIHdoaXRlbGlzdCBvZiBwZXJtaXNzaWJsZSBUVU5FQUJJIHZhbHVlcy4gIElmIHRoZSB2YXJpYWJsZSBpcyBub3Qgc2V0LCBhbGwgdmFsdWVzIGFyZSBhbGxvd2VkLiIKK1RVTkVDT05GTElDVFNbZG9jXSA9ICJMaXN0IG9mIGNvbmZsaWN0aW5nIGZlYXR1cmVzIGZvciBhIGdpdmVuIGZlYXR1cmUuIgorVFVORVZBTElEW2RvY10gPSAiRGVzY3JpcHRpb25zLCBzdG9yZWQgYXMgZmxhZ3MsIG9mIHZhbGlkIHR1bmluZyBmZWF0dXJlcy4iCisKKyNVCisKK1VCT09UX0NPTkZJR1tkb2NdID0gIkNvbmZpZ3VyZXMgdGhlIFVCT09UX01BQ0hJTkUgYW5kIGNhbiBhbHNvIGRlZmluZSBJTUFHRV9GU1RZUEVTIGZvciBpbmRpdmlkdWFsIGNhc2VzLiIKK1VCT09UX0VOVFJZUE9JTlRbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgVS1Cb290IGltYWdlLiIKK1VCT09UX0xPQURBRERSRVNTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsb2FkIGFkZHJlc3MgZm9yIHRoZSBVLUJvb3QgaW1hZ2UuIgorVUJPT1RfTE9DQUxWRVJTSU9OW2RvY10gPSAiQXBwZW5kcyBhIHN0cmluZyB0byB0aGUgbmFtZSBvZiB0aGUgbG9jYWwgdmVyc2lvbiBvZiB0aGUgVS1Cb290IGltYWdlLiIKK1VCT09UX01BQ0hJTkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHZhbHVlIHBhc3NlZCBvbiB0aGUgbWFrZSBjb21tYW5kIGxpbmUgd2hlbiBidWlsZGluZyBhIFUtQm9vdCBpbWFnZS4iCitVQk9PVF9NQUtFX1RBUkdFVFtkb2NdID0gIlNwZWNpZmllcyB0aGUgdGFyZ2V0IGNhbGxlZCBpbiB0aGUgTWFrZWZpbGUuIgorVUJPT1RfU1VGRklYW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBnZW5lcmF0ZWQgVS1Cb290IGV4dGVuc2lvbi4iCitVQk9PVF9UQVJHRVRbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHRhcmdldCB1c2VkIGZvciBidWlsZGluZyBVLUJvb3QuIgorVVNFX0RFVkZTW2RvY10gPSAiV2hlbiBidWlsZGluZyBpbWFnZXMsIHNwZWNpZmllcyB0byBwb3B1bGF0ZSBvciBub3QgL2Rldi4gVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAnMScgKGxlYXZlIGRpcmVjdG9yeSBlbXB0eSwgc3VyZWx5IGJlY2F1c2UgZGV2dG1wZnMgZG8gdGhlIGpvYikuIFNldCBpdCB0byAnMCcgdG8gdXNlIG1ha2VkZXZzIChvciBjb25zaWRlciB1c2luZyBhIGN1c3RvbSBmaWxlIHdpdGggSU1BR0VfREVWSUNFX1RBQkxFUykuIgorVVNFUl9DTEFTU0VTW2RvY10gPSAiTGlzdCBvZiBhZGRpdGlvbmFsIGNsYXNzZXMgdG8gdXNlIHdoZW4gYnVpbGRpbmcgaW1hZ2VzIHRoYXQgZW5hYmxlIGV4dHJhIGZlYXR1cmVzLiIKK1VTRVJBRERfUEFDS0FHRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSB1c2VyYWRkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgaW5kaXZpZHVhbCBwYWNrYWdlcyB3aXRoaW4gdGhlIHJlY2lwZSB0aGF0IHJlcXVpcmUgdXNlcnMgYW5kL29yIGdyb3VwcyB0byBiZSBhZGRlZC4iCitVU0VSQUREX1BBUkFNW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgdXNlcmFkZCBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgZm9yIGEgcGFja2FnZSB3aGF0IHBhcmFtZXRlcnMgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgdXNlcmFkZCBjb21tYW5kIGlmIHlvdSB3aXNoIHRvIGFkZCBhIHVzZXIgdG8gdGhlIHN5c3RlbSB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZC4iCisKKyNXCisKK1dBUk5fUUFbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHF1YWxpdHkgYXNzdXJhbmNlIGNoZWNrcyB3aG9zZSBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgYXMgd2FybmluZ3MgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorV09SS0RJUltkb2NdID0gIlRoZSBwYXRobmFtZSBvZiB0aGUgd29ya2luZyBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYnVpbGRzIGEgcmVjaXBlLiBUaGlzIGRpcmVjdG9yeSBpcyBsb2NhdGVkIHdpdGhpbiB0aGUgVE1QRElSIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgYW5kIGNoYW5nZXMgYXMgZGlmZmVyZW50IHBhY2thZ2VzIGFyZSBidWlsdC4iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9sYXllci5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbGF5ZXIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTgwMDE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbGF5ZXIuY29uZgpAQCAtMCwwICsxLDYwIEBACisjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iCisjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiIKKworQkJGSUxFX0NPTExFQ1RJT05TICs9ICJjb3JlIgorQkJGSUxFX1BBVFRFUk5fY29yZSA9ICJeJHtMQVlFUkRJUn0vIgorQkJGSUxFX1BSSU9SSVRZX2NvcmUgPSAiNSIKKworIyBUaGlzIHNob3VsZCBvbmx5IGJlIGluY3JlbWVudGVkIG9uIHNpZ25pZmljYW50IGNoYW5nZXMgdGhhdCB3aWxsCisjIGNhdXNlIGNvbXBhdGliaWxpdHkgaXNzdWVzIHdpdGggb3RoZXIgbGF5ZXJzCitMQVlFUlZFUlNJT05fY29yZSA9ICI2IgorCitCQkxBWUVSU19MQVlFUklOREVYX05BTUVfY29yZSA9ICJvcGVuZW1iZWRkZWQtY29yZSIKKworIyBTZXQgYSB2YXJpYWJsZSB0byBnZXQgdG8gdGhlIHRvcCBvZiB0aGUgbWV0YWRhdGEgbG9jYXRpb24KK0NPUkVCQVNFID0gJyR7QG9zLnBhdGgubm9ybXBhdGgoIiR7TEFZRVJESVJ9Ly4uLyIpfScKKworIyBvcGtnLXV0aWxzIGlzIGZvciB1cGRhdGUtYWx0bmVybmF0aXZlcyA6KAorU0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkUgKz0gIiBcCisgIHN5c3Zpbml0LWluaXR0YWIgXAorICBzaGFkb3ctc2VjdXJldHR5IFwKKyAgb3BrZy1hcmNoLWNvbmZpZyBcCisgIG5ldGJhc2UgXAorICBpbml0LWlmdXBkb3duIFwKKyAgY29ubm1hbi1jb25mIFwKKyAgZm9ybWZhY3RvciBcCisgIHhzZXJ2ZXIteGY4Ni1jb25maWcgXAorICBwb2ludGVyY2FsIFwKKyAgcG9pbnRlcmNhbC14aW5wdXQgXAorICBiYXNlLWZpbGVzIFwKKyAga2V5bWFwcyBcCisgIHVkZXYtZXh0cmFjb25mIFwKKyAgcGFja2FnZWdyb3VwLXgxMS14c2VydmVyIFwKKyAgc3lzdGVtZC1zZXJpYWxnZXR0eSBcCisgIGluaXRzY3JpcHRzIFwKKyAgc2hhZG93IFwKKyAgc2hhZG93LXN5c3Jvb3QgXAorICBiYXNlLXBhc3N3ZCBcCisgIG9wa2ctdXRpbHMgXAorIgorCitTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTICs9ICIgXAorICBnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0tPmdsaWJjIFwKKyAgZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9LT5tdXNsIFwKKyAgZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9LT51Y2xpYmMgXAorICBnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0tPmxpbnV4LWxpYmMtaGVhZGVycyBcCisgIHBwcC1kaWFsaW4tPnBwcCBcCisgIHJlc29sdmNvbmYtPmJhc2ggXAorICBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy0+cGVybCBcCisgIGluaXRyYW1mcy1mcmFtZXdvcmstPmJ1c3lib3ggXAorICBpbml0cmFtZnMtZnJhbWV3b3JrLT5zeXN0ZW1kIFwKKyAgaW5pdHJhbWZzLWZyYW1ld29yay0+dWRldiBcCisgIGxpYmVyYXRpb24tZm9udHMtPmZvbnRjb25maWcgXAorICBnbm9tZS1pY29uLXRoZW1lLT5saWJyc3ZnIFwKKyAgZm9udC1hbGlhcy0+Zm9udC11dGlsIFwKKyAgd2VzdG9uLWluaXQtPndlc3RvbiBcCisgIHdlc3Rvbi1pbml0LT5rYmQgXAorIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9saWNlbnNlcy5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbGljZW5zZXMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTE3YzQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbGljZW5zZXMuY29uZgpAQCAtMCwwICsxLDE4OSBAQAorIyBUaGVzZSBhcmVuJ3QgYWN0dWFsbHkgdXNlZCBhbnl3aGVyZSB0aGF0IEkgY2FuIHRlbGwKKyMgVGhleSBtYXkgYmUgaW4gdGhlIGZ1dHVyZSAob3IgYXJlIHVzZWQgYnkgc29tZW9uZSBlbHNlCisjIEZvciBjb21wbGV0aW9uIHNha2UsIEkndmUgdXBkYXRlZCB0aGVtCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQUFMIEFkb2JlIEFGTC0xLjIgQUZMLTIuMCBBRkwtMi4xIEFGTC0zLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQUdQTC0zLjAgQU5UTFItUEQgQXBhY2hlLTEuMCBBcGFjaGUtMS4xIEFwYWNoZS0yLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQVBMLTEuMCBBUFNMLTEuMCBBUFNMLTEuMSBBUFNMLTEuMiBBUFNMLTIuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJBcnRpc3RpYy0xLjAgQXJ0aXN0aWMtMi4wIEJpdHN0cmVhbVZlcmEgQlNEIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkJTRC0yLUNsYXVzZSBCU0QtMy1DbGF1c2UgQlNELTQtQ2xhdXNlIEJTTC0xLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQ0FUT1NMLTEuMSBDQzAtMS4wIENDLUJZLTEuMCBDQy1CWS0yLjAgQ0MtQlktMi41IgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkNDLUJZLTMuMCBDQy1CWS1OQy0xLjAgQ0MtQlktTkMtMi4wIENDLUJZLU5DLTIuNSIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDQy1CWS1OQy0zLjAgQ0MtQlktTkMtTkQtMS4wIENDLUJZLU5DLU5ELTIuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDQy1CWS1OQy1ORC0yLjUgQ0MtQlktTkMtTkQtMy4wIENDLUJZLU5DLVNBLTEuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDQy1CWS1OQy1TQS0yLjAgQ0MtQlktTkMtU0EtMi41IENDLUJZLU5DLVNBLTMuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDQy1CWS1ORC0xLjAgQ0MtQlktTkQtMi4wIENDLUJZLU5ELTIuNSBDQy1CWS1ORC0zLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQ0MtQlktU0EtMS4wIENDLUJZLVNBLTIuMCBDQy1CWS1TQS0yLjUgQ0MtQlktU0EtMy4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkNEREwtMS4wIENFQ0lMTC0xLjAgQ0VDSUxMLTIuMCBDRUNJTEwtQiBDRUNJTEwtQyIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDbEFydGlzdGljIENQQUwtMS4wIENQTC0xLjAgQ1VBLU9QTC0xLjAgRFNTU0wiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiRUNMLTEuMCBFQ0wtMi4wIGVDb3MtMi4wIEVETC0xLjAgRUZMLTEuMCBFRkwtMi4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkVsZnV0aWxzLUV4Y2VwdGlvbiBFbnRlc3NhIEVQTC0xLjAgRXJsUEwtMS4xIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkVVRGF0YWdyaWQgRVVQTC0xLjAgRVVQTC0xLjEgRmFpciBGcmFtZXdvcngtMS4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkZyZWVUeXBlIEdGREwtMS4xIEdGREwtMS4yIEdGREwtMS4zIEdQTC0xLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiR1BMLTIuMCBHUEwtMi4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkdQTC0yLjAtd2l0aC1jbGFzc3BhdGgtZXhjZXB0aW9uIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkdQTC0yLjAtd2l0aC1mb250LWV4Y2VwdGlvbiIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJHUEwtMi4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJHUEwtMi13aXRoLWJpc29uLWV4Y2VwdGlvbiBHUEwtMy4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkdQTC0zLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24iCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiZ1NPQVAtMSBnU09BUC0xLjNiIEhQTkQgSVBBIElQTC0xLjAgSVNDIExHUEwtMi4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkxHUEwtMi4xIExHUEwtMy4wIExpYnBuZyBMUEwtMS4wMiBMUFBMLTEuMCBMUFBMLTEuMSIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJMUFBMLTEuMiBMUFBMLTEuM2MgTWlyT1MgTUlUIE1vdG9zb3RvIE1QTC0xLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiTVBMLTEuMSBNUy1QTCBNUy1STCBNdWx0aWNzIE5BU0EtMS4zIE5hdW1hbiBOQ1NBIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIk5HUEwgTm9raWEgTlBPU0wtMy4wIE5UUCBPQVNJUyBPQ0xDLTIuMCBPRGJMLTEuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJPRkwtMS4xIE9HVFNMIE9MREFQLTIuOCBPcGVuU1NMIE9TTC0xLjAgT1NMLTIuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJPU0wtMy4wIFBEIFBIUC0zLjAgUG9zdGdyZVNRTCBQcm9wcmlldGFyeSIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJQeXRob24tMi4wIFFQTC0xLjAgUkhlQ29zLTEgUkhlQ29zLTEuMSBSUEwtMS41IgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIlJQU0wtMS4wIFJTQ1BMIFJ1YnkgU0FYLVBEIFNHSS0xIFNpbXBsZS0yLjAgU2xlZXB5Y2F0IgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIlNQTC0xLjAgU3VnYXJDUk0tMSBTdWdhckNSTS0xLjEuMyBVQ0IgVlNMLTEuMCBXM0MiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiV2F0Y29tLTEuMCBXWHdpbmRvd3MgWEZyZWU4Ni0xLjAgWEZyZWU4Ni0xLjEgWG5ldCBYU0wgWVBMLTEuMSIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJaaW1icmEtMS4zIFpsaWIgWlBMLTEuMSBaUEwtMi4wIFpQTC0yLjEiCisKKyMgU3RhbmRhcmRzIGFyZSBncmVhdCEgRXZlcnlvbmUgaGFzIHRoZWlyIG93bi4gSW4gYW4gZWZmb3J0IHRvIHN0YW5kYXJkaXplIGxpY2Vuc2luZworIyBuYW1lcywgY29tbW9uLWxpY2Vuc2VzIHdpbGwgdXNlIHRoZSBTUERYIHN0YW5kYXJkIGxpY2Vuc2UgbmFtZXMuIEluIG9yZGVyIHRvIG5vdAorIyBicmVhayB0aGUgbm9uLXN0YW5kYXJkaXplZCBsaWNlbnNlIG5hbWVzIHRoYXQgd2UgZmluZCBpbiBMSUNFTlNFLCB3ZSdsbCBzZXQKKyMgdXAgYSBidW5jaCBvZiBWYXJGbGFncyB0byBhY2NvbW9kYXRlIG5vbi1TUERYIGxpY2Vuc2UgbmFtZXMuCisjCisjIFdlIHNob3VsZCByZWFsbHkgZGlzY3VzcyBzdGFuZGFyZGl6aW5nIHRoaXMgZmllbGQsIGJ1dCB0aGF0J3MgYSBsb25nZXIgdGVybSBnb2FsLgorIyBGb3Igbm93LCB3ZSBjYW4gZG8gdGhpcyBhbmQgaXQgc2hvdWxkIGdyYWIgdGhlIG1vc3QgY29tbW9uIExJQ0VOU0UgbmFtaW5nIHZhcmlhdGlvbnMuCisjCisjIFdlIHNob3VsZCBORVZFUiBoYXZlIGEgR1BML0xHUEwgd2l0aG91dCBhIHZlcnNpb24hISEhCisjIEFueSBtYXBwaW5nIHRvIE1QTC9MR1BML0dQTCBzaG91bGQgYmUgZml4ZWQKKworIyBBR1BMIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW0FHUEwtM10gPSAiQUdQTC0zLjAiCitTUERYTElDRU5TRU1BUFtBR1BMdjNdID0gIkFHUEwtMy4wIgorU1BEWExJQ0VOU0VNQVBbQUdQTHYzLjBdID0gIkFHUEwtMy4wIgorCisjIEdQTCB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtHUEwtMV0gPSAiR1BMLTEuMCIKK1NQRFhMSUNFTlNFTUFQW0dQTHYxXSA9ICJHUEwtMS4wIgorU1BEWExJQ0VOU0VNQVBbR1BMdjEuMF0gPSAiR1BMLTEuMCIKK1NQRFhMSUNFTlNFTUFQW0dQTC0yXSA9ICJHUEwtMi4wIgorU1BEWExJQ0VOU0VNQVBbR1BMdjJdID0gIkdQTC0yLjAiCitTUERYTElDRU5TRU1BUFtHUEx2Mi4wXSA9ICJHUEwtMi4wIgorU1BEWExJQ0VOU0VNQVBbR1BMLTNdID0gIkdQTC0zLjAiCitTUERYTElDRU5TRU1BUFtHUEx2M10gPSAiR1BMLTMuMCIKK1NQRFhMSUNFTlNFTUFQW0dQTHYzLjBdID0gIkdQTC0zLjAiCisKKyNMR1BMIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW0xHUEx2Ml0gPSAiTEdQTC0yLjAiCitTUERYTElDRU5TRU1BUFtMR1BMdjIuMF0gPSAiTEdQTC0yLjAiCitTUERYTElDRU5TRU1BUFtMR1BMMi4xXSA9ICJMR1BMLTIuMSIKK1NQRFhMSUNFTlNFTUFQW0xHUEx2Mi4xXSA9ICJMR1BMLTIuMSIKK1NQRFhMSUNFTlNFTUFQW0xHUEx2M10gPSAiTEdQTC0zLjAiCisKKyNNUEwgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbTVBMLTFdID0gIk1QTC0xLjAiCitTUERYTElDRU5TRU1BUFtNUEx2MV0gPSAiTVBMLTEuMCIKK1NQRFhMSUNFTlNFTUFQW01QTHYxLjFdID0gIk1QTC0xLjEiCitTUERYTElDRU5TRU1BUFtNUEx2Ml0gPSAiTVBMLTIuMCIKKworI01JVCB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtNSVQtWF0gPSAiTUlUIgorU1BEWExJQ0VOU0VNQVBbTUlULXN0eWxlXSA9ICJNSVQiCisKKyNPcGVuc3NsIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW29wZW5zc2xdID0gIk9wZW5TU0wiCisKKyNQeXRob24gdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbUFNGXSA9ICJQeXRob24tMi4wIgorU1BEWExJQ0VOU0VNQVBbUFNGdjJdID0gIlB5dGhvbi0yLjAiCitTUERYTElDRU5TRU1BUFtQeXRob24tMl0gPSAiUHl0aG9uLTIuMCIKKworI0FwYWNoZSB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtBcGFjaGV2Ml0gPSAiQXBhY2hlLTIuMCIKK1NQRFhMSUNFTlNFTUFQW0FwYWNoZS0yXSA9ICJBcGFjaGUtMi4wIgorCisjQXJ0aXN0aWMgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbQXJ0aXN0aWN2MV0gPSAiQXJ0aXN0aWMtMS4wIgorU1BEWExJQ0VOU0VNQVBbQXJ0aXN0aWMtMV0gPSAiQXJ0aXN0aWMtMS4wIgorCisjQWNhZGVtaWMgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbQUZMLTJdID0gIkFGTC0yLjAiCitTUERYTElDRU5TRU1BUFtBRkwtMV0gPSAiQUZMLTEuMiIKK1NQRFhMSUNFTlNFTUFQW0FGTHYyXSA9ICJBRkwtMi4wIgorU1BEWExJQ0VOU0VNQVBbQUZMdjFdID0gIkFGTC0xLjIiCisKKyNPdGhlciB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtFUEx2MS4wXSA9ICJFUEwtMS4wIgorCisjU2lsaWNvbiBHcmFwaGljcyB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtTR0l2MV0gPSAiU0dJLTEiCisKKyMgQWRkaXRpb25hbCBsaWNlbnNlIGRpcmVjdG9yaWVzLiBBZGQgeW91ciBjdXN0b20gbGljZW5zZXMgZGlyZWN0b3JpZXMgdGhpcyBwYXRoLgorIyBMSUNFTlNFX1BBVEggKz0gIiR7Q09SRUJBU0V9L2N1c3RvbS1saWNlbnNlcyIKKworIyBTZXQgaWYgeW91IHdhbnQgdGhlIGxpY2Vuc2UubWFuaWZlc3QgY29waWVkIHRvIHRoZSBpbWFnZQorI0NPUFlfTElDX01BTklGRVNUID0gIjEiCisKKyMgSWYgeW91IHdhbnQgdGhlIHBrZyBsaWNlbnNlcyBjb3BpZWQgb3ZlciBhcyB3ZWxsIHlvdSBtdXN0IHNldAorIyBib3RoIENPUFlfTElDX01BTklGRVNUIGFuZCBDT1BZX0xJQ19ESVJTCisjQ09QWV9MSUNfRElSUyA9ICIxIgorCisjIyBTUERYIHRlbXBvcmFyeSBkaXJlY3RvcnkKK1NQRFhfVEVNUF9ESVIgPSAiJHtXT1JLRElSfS9zcGR4X3RlbXAiCitTUERYX01BTklGRVNUX0RJUiA9ICIvaG9tZS95b2N0by9mb3Nzb2xvZ3lfc2NhbnMiCisKKyMjIFNQRFggRm9ybWF0IGluZm8KK1NQRFhfVkVSU0lPTiA9ICJTUERYLTEuMSIKK0RBVEFfTElDRU5TRSA9ICJDQzAtMS4wIgorCisjIyBGb3Nzb2xvZ3kgc2NhbiBpbmZvcm1hdGlvbgorIyBZb3UgY2FuIHNldCBvcHRpb24gdG8gY29udHJvbCBpZiB0aGUgY29weXJpZ2h0IGluZm9ybWF0aW9uIHdpbGwgYmUgc2tpcHBlZAorIyBkdXJpbmcgdGhlIGlkZW50aWZpY2F0aW9uIHByb2Nlc3MuCisjCisjIEl0IGlzIGRlZmluZWQgYXMgW0ZPU1NfQ09QWVJJR0hUXSBpbiAuL21ldGEvY29uZi9saWNlbnNlcy5jb25mLgorIyBGT1NTX0NPUFlSSUdIVCA9ICJ0cnVlIgorIyAgIE5PIGNvcHlyaWdodCB3aWxsIGJlIHByb2Nlc3NlZC4gVGhhdCBtZWFucyBvbmx5IGxpY2Vuc2UgaW5mb3JtYXRpb24gd2lsbCBiZQorIyAgIGlkZW50aWZpZWQgYW5kIG91dHB1dCB0byBTUERYIGZpbGUKKyMgRk9TU19DT1BZUklHSFQgPSAiZmFsc2UiCisjICAgQ29weXJpZ2h0IHdpbGwgYmUgaWRlbnRpZmllZCBhbmQgb3V0cHV0IHRvIFNQRFggZmlsZSBhbG9uZyB3aXRoIGxpY2Vuc2UKKyMgICBpbmZvcm1hdGlvbi4gVGhlIHByb2Nlc3Mgd2lsbCB0YWtlIG1vcmUgdGltZSB0aGFuIG5vdCBwcm9jZXNzaW5nIGNvcHlyaWdodAorIyAgIGluZm9ybWF0aW9uLgorIworCitGT1NTX05PX0NPUFlSSUdIVCA9ICJ0cnVlIgorCisjIEEgb3B0aW9uIGRlZmluZWQgYXNbRk9TU19SRUNVUlNJVkVfVU5QQUNLXSBpbiAuL21ldGEvY29uZi9saWNlbnNlcy5jb25mLiBpcworIyB1c2VkIHRvIGNvbnRyb2wgaWYgRk9TU29sb2d5IHNlcnZlciBuZWVkIHJlY3Vyc2l2ZWx5IHVucGFjayB0YXIuZ3ogZmlsZSB3aGljaAorIyBpcyBzZW50IGZyb20gZG9fc3BkeCB0YXNrLgorIworIyBGT1NTX1JFQ1VSU0lWRV9VTlBBQ0sgPSAiZmFsc2UiOgorIyAgICBGT1NTb2xvZ3kgc2VydmVyIGRvZXMgTk9UIHJlY3Vyc2l2ZWx5IHVucGFjay4gSW4gdGhlIGN1cnJlbnQgcmVsZWFzZSwgdGhpcworIyAgICBpcyB0aGUgZGVmYXVsdCBjaG9pY2UgYmVjYXVzZSByZWN1cnNpdmVseSB1bnBhY2sgd2lsbCBub3QgbmVjZXNzYXJpbHkgYnJlYWsKKyMgICAgZG93biBvcmlnaW5hbCBjb21wcmVzc2VkIGZpbGVzLgorIyBGT1NTX1JFQ1VSU0lWRV9VTlBBQ0sgPSAidHJ1ZSI6CisjICAgIEZPU1NvbG9neSBzZXJ2ZXIgcmVjdXJzaXZlbHkgdW5wYWNrIGNvbXBvbmVudHMuCisjCisKK0ZPU1NfUkVDVVJTSVZFX1VOUEFDSyA9ICJmYWxzZSIKKworIyBBbiBvcHRpb24gZGVmaW5lZCBhcyBbRk9TU19GVUxMX1NQRFhdIGluIC4vbWV0YS9jb25mL2xpY2Vuc2VzLmNvbmYgaXMgdXNlZCB0bworIyBjb250cm9sIHdoYXQga2luZCBvZiBTUERYIG91dHB1dCB0byBnZXQgZnJvbSB0aGUgRk9TU29sb2d5IHNlcnZlci4KKyMKKyMgRk9TU19GVUxMX1NQRFggPSAidHJ1ZSI6CisjICAgVGVsbCBGT1NTb2xvZ3kgc2VydmVyIHRvIHJldHVybiBmdWxsIFNQRFggb3V0cHV0LCBsaWtlIGlmIHRoZSBwcm9ncmFtIHdhcworIyAgIHJ1biBmcm9tIHRoZSBjb21tYW5kIGxpbmUuIFRoaXMgaXMgbmVlZGVkIGluIG9yZGVyIHRvIGdldCBsaWNlbnNlIHJlZnMgZm9yCisjICAgdGhlIGZ1bGwgcGFja2FnZSByYXRoZXIgdGhhbiBpbmRpdmlkdWFsIGZpbGVzIG9ubHkuCisjCisjIEZPU1NfRlVMTF9TUERYID0gImZhbHNlIjoKKyMgICBUZWxsIEZPU1NvbG9neSB0byBvbmx5IHByb2Nlc3MgbGljZW5zZSBpbmZvcm1hdGlvbiBmb3IgZmlsZXMuIEFsbCBwYWNrYWdlCisjICAgbGljZW5zZSB0YWdzIGluIHRoZSByZXBvcnQgd2lsbCBiZSAiTk9BU1NFUlRJT04iCisjCisKK0ZPU1NfRlVMTF9TUERYID0gInRydWUiCisKKyMgRk9TU29sb2d5U1BEWCBpbnN0YW5jZSBzZXJ2ZXIuIGh0dHA6Ly9sb2NhbGhvc3QvcmVwbyBpcyB0aGUgZGVmYXVsdAorIyBpbnN0YWxsYXRpb24gbG9jYXRpb24gZm9yIEZPU1NvbG9neS4KKyMKKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gRk9TU29sb2d5U1BEWCBjb21tYW5kbGluZToKKyMgICBodHRwczovL2dpdGh1Yi5jb20vc3BkeC10b29scy9mb3Nzb2xvZ3ktc3BkeC93aWtpL0Zvc3NvbG9neS1TUERYLVdlYi1BUEkKKyMKKworRk9TU19CQVNFX1VSTCA9ICJodHRwOi8vbG9jYWxob3N0L3JlcG8vP21vZD1zcGR4X2xpY2Vuc2Vfb25jZSIKK0ZPU1NfU0VSVkVSID0gIiR7Rk9TU19CQVNFX1VSTH0mZnVsbFNQRFhGbGFnPSR7Rk9TU19GVUxMX1NQRFh9Jm5vQ29weXJpZ2h0PSR7Rk9TU19OT19DT1BZUklHSFR9JnJlY3Vyc2l2ZVVucGFjaz0ke0ZPU1NfUkVDVVJTSVZFX1VOUEFDS30iCisKK0ZPU1NfV0dFVF9GTEFHUyA9ICItcU8gLSAtLW5vLWNoZWNrLWNlcnRpZmljYXRlIC0tdGltZW91dD0wIgorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUtc2RrL2k1ODYuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUtc2RrL2k1ODYuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWFjY2U3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTU4Ni5jb25mCkBAIC0wLDAgKzEsMyBAQAorU0RLX0FSQ0ggPSAiaTU4NiIKK1NES19DQ19BUkNIID0gIi1tYXJjaD1pNTg2IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lLXNkay9pNjg2LmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lLXNkay9pNjg2LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZkYjQ2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUtc2RrL2k2ODYuY29uZgpAQCAtMCwwICsxLDIgQEAKK1NES19BUkNIID0gImk2ODYiCitTREtfQ0NfQVJDSCA9ICItbWFyY2g9aTY4NiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUtc2RrL3g4Nl82NC5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS1zZGsveDg2XzY0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEyZDY3YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUtc2RrL3g4Nl82NC5jb25mCkBAIC0wLDAgKzEgQEAKK1NES19BUkNIID0gIng4Nl82NCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9SRUFETUUgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NjEzMGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvUkVBRE1FCkBAIC0wLDAgKzEsMTAwIEBACisyMDEyLzAzLzMwIC0gTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorIC0gSW5pdGlhbCBSZXZpc2lvbgorCisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CitUaGUgaW5kaXZpZHVhbCBDUFUsIGFuZCBBQkkgdHVuaW5ncyBhcmUgY29udGFpbmVkIGluIHRoaXMgZGlyZWN0b3J5LiAgQQorbnVtYmVyIG9mIGxvY2FsIGFuZCBnbG9iYWwgdmFyaWFibGVzIGFyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHdheSB0aGUKK3R1bmluZ3MgYXJlIHNldHVwIGFuZCBob3cgdGhleSB3b3JrIHRvZ2V0aGVyIHRvIHNwZWNpZnkgYW4gb3B0aW1pemVkCitjb25maWd1cmF0aW9uLgorCitUaGUgZm9sbG93aW5nIGlzIGJyaWVmIHN1bW1hcnkgb2YgdGhlIGdlbmVyaWMgY29tcG9uZW50cyB0aGF0IGFyZSB1c2VkCitpbiB0aGVzZSB0dW5pbmdzLgorCitBVkFJTFRVTkVTIC0gVGhpcyBpcyBhIGxpc3Qgb2YgYWxsIG9mIHRoZSB0dW5pbmcgZGVmaW5pdGlvbnMgY3VycmVudGx5CithdmFpbGFibGUgaW4gdGhlIHN5c3RlbS4gIE5vdCBhbGwgdHVuZXMgaW4gdGhpcyBsaXN0IG1heSBiZSBjb21wYXRpYmxlCit3aXRoIHRoZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24sIG9yIGVhY2ggb3RoZXIgaW4gYSBtdWx0aWxpYgorY29uZmlndXJhdGlvbi4gIEVhY2ggdHVuaW5nIGZpbGUgY2FuIGFkZCB0byB0aGlzIGxpc3QgdXNpbmcgIis9IiwgYnV0CitzaG91bGQgbmV2ZXIgcmVwbGFjZSB0aGUgbGlzdCB1c2luZyAiPSIuCisKK0RFRkFVTFRUVU5FIC0gVGhpcyBzcGVjaWZpZXMgdGhlIHR1bmUgdG8gdXNlIGZvciBhIHBhcnRpY3VsYXIgYnVpbGQuCitFYWNoIHR1bmUgc2hvdWxkIHNwZWNpZnkgYSByZWFzb25hYmxlIGRlZmF1bHQsIHdoaWNoIGNhbiBiZSBvdmVycmlkZW4gYnkKK2EgbWFjaGluZSBvciBtdWx0aWxpYiBjb25maWd1cmF0aW9uLiAgVGhlIHNwZWNpZmllZCB0dW5lIG11c3QgYmUgbGlzdGVkCitpbiB0aGUgQVZBSUxUVU5FUy4KKworVFVORVZBTElEW2ZlYXR1cmVdIC0gVGhlIDxmZWF0dXJlPiBpcyBkZWZpbmVkIHdpdGggYSBodW1hbiByZWFkYWJsZQorZXhwbGFuYXRpb24gZm9yIHdoYXQgaXQgZG9lcy4gIEFsbCBhcmNoaXRlY3R1cmFsLCBjcHUsIGFiaSwgZXRjIHR1bmluZworZmVhdHVyZXMgbXVzdCBiZSBkZWZpbmVkIHVzaW5nIFRVTkVWQUxJRC4KKworVFVORUNPTkZMSUNUU1tmZWF0dXJlXSAtIEEgbGlzdCBvZiBmZWF0dXJlcyB3aGljaCBjb25mbGljdCB3aXRoIDxmZWF0dXJlPi4KK05ldyBzYW5pdHkgY2hlY2tzIHdpbGwgdHJ5IHRvIHJlamVjdCBjb21iaW5hdGlvbnMgaW4gd2hpY2ggYSBzaW5nbGUKK3R1bmluZyBlbmRzIHVwIHdpdGggZmVhdHVyZXMgd2hpY2ggY29uZmxpY3Qgd2l0aCBlYWNoIG90aGVyLgorCitUVU5FX0ZFQVRVUkVTIC0gVGhpcyBpcyBhdXRvbWF0aWNhbGx5IGRlZmluZWQgYXMgVFVORV9GRUFUVVJFU190dW5lLTx0dW5lPi4KK1NlZSBUVU5FX0ZFQVRVUkVTX3R1bmUtPHR1bmU+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtPHR1bmU+IC0gU3BlY2lmeSB0aGUgZmVhdHVyZXMgdXNlZCB0byBkZXNjcmliZSBhCitzcGVjaWZpYyB0dW5lLiAgVGhpcyBpcyBhIGxpc3Qgb2YgZmVhdHVyZXMgdGhhdCBhIHR1bmUgc3VwcG9ydCwgZWFjaAorZmVhdHVyZSBtdXN0IGJlIGluIHRoZSBUVU5FVkFMSUQgbGlzdC4gIE5vdGU6IHRoZSB0dW5lIGFuZCBhIGdpdmVuCitmZWF0dXJlIG5hbWUgbWF5IGJlIHRoZSBzYW1lLCBidXQgdGhleSBoYXZlIGRpZmZlcmVudCBwdXJwb3Nlcy4gIE9ubHkKK2ZlYXR1cmVzIG1heSBiZSB1c2VkIHRvIGNoYW5nZSBiZWhhdmlvciwgd2hpbGUgdHVuZXMgYXJlIHVzZWQgdG8KK2Rlc2NyaWJlIGFuIG92ZXJhbGwgc2V0IG9mIGZlYXR1cmVzLgorCitBQklFWFRFTlNJT04gLSBBbiBBQkkgZXh0ZW5zaW9uIG1heSBiZSBzcGVjaWZpZWQgYnkgYSBzcGVjaWZpYyBmZWF0dXJlCitvciBvdGhlciB0dW5pbmcgc2V0dGluZywgc3VjaCBhcyBUQVJHRVRfRlBVLiAgQW55IEFCSSBleHRlbnNpb25zIGVpdGhlcgorbmVlZCB0byBiZSBkZWZpbmVkIGluIHRoZSBhcmNoaXRlY3R1cmVzIGJhc2UgYXJjaCBmaWxlLCBpLmUuCitBQklFWFRFTlNJT04gPSAiZWFiaSIgaW4gdGhlIGFybSBjYXNlLCBvciBhcHBlbmRlZCB0byBpbiBzcGVjaWZpYyB0dW5lCitmaWxlcyB3aXRoIGEgIi49Ii4gIFNwYWNlcyBhcmUgbm90IGFsbG93ZWQgaW4gdGhpcyB2YXJpYWJsZS4KKworVFVORV9DQ0FSR1MgLSBTZXR1cCB0aGUgY2ZsYWdzIGJhc2VkIG9uIHRoZSBUVU5FX0ZFQVRVUkVTIHNldHRpbmdzLgorVGhlc2Ugc2hvdWxkIGJlIGFkZGl0aXZlIHdoZW4gZGVmaW5lZCB1c2luZyAiKz0iLiAgQWxsIGl0ZW1zIGluIHRoaXMKK2xpc3Qgc2hvdWxkIGJlIGR5bmFtaWMhIGkuZS4KKyR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImZlYXR1cmUiLCAiY2ZsYWciLCAiIWNmbGFnIiwgZCl9CisKK1RVTkVfQVJDSCAtIFRoZSBHTlUgY2Fub25pY2FsIGFyY2ggZm9yIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlLiAgaS5lLgorYXJtLCBhcm1lYiwgbWlwcywgbWlwczY0LCBldGMuICBUaGlzIHZhbHVlIGlzIHVzZWQgYnkgYml0YmFrZSB0byBzZXR1cAorY29uZmlndXJlLiBUVU5FX0FSQ0ggZGVmaW5pdGlvbnMgYXJlIHNwZWNpZmljIHRvIGEgZ2l2ZW4gYXJjaGl0ZWN0dXJlLgorVGhleSBtYXkgYmUgYSBzaW5nbGUgc3RhdGljIGRlZmluaXRpb24sIG9yIG1heSBiZSBkeW5hbWljYWxseSBhZGp1c3RlZC4KK1NlZSBlYWNoIGFyY2hpdGVjdHVyZSdzIFJFQURNRSBmb3IgZGV0YWlscyBmb3IgdGhhdCBDUFUgZmFtaWx5LgorCitUVU5FX1BLR0FSQ0ggLSBUaGUgcGFja2FnZSBhcmNoaXRlY3R1cmUgdXNlZCBieSB0aGUgcGFja2FnaW5nIHN5c3RlbXMgdG8KK2RlZmluZSB0aGUgYXJjaGl0ZWN0dXJlLCBhYmkgYW5kIHR1bmluZyBvZiBhIHBhcnRpY3VsYXIgcGFja2FnZS4KK1NpbWlsYXJseSB0byBUVU5FX0FSQ0gsIHRoZSBkZWZpbml0aW9uIG9mIFRVTkVfUEtHQVJDSCBpcyBzcGVjaWZpYyB0bworZWFjaCBhcmNoaXRlY3R1cmUuIFNlZSBlYWNoIGFyY2hpdGVjdHVyZXMgUkVBRE1FIGZvciBkZXRhaWxzIGZvciB0aGF0CitDUFUgZmFtaWx5LgorCitQQUNLQUdFX0VYVFJBX0FSQ0hTIC0gTGlzdHMgYWxsIHJ1bnRpbWUgY29tcGF0aWJsZSBwYWNrYWdlCithcmNoaXRlY3R1cmVzLiAgQnkgZGVmYXVsdCB0aGlzIGlzIGVxdWFsIHRvCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtPHR1bmU+LiAgSWYgYW4gYXJjaGl0ZWN0dXJlIGRldmlhdGVzIGZyb20gdGhlCitkZWZhdWx0IGl0IHdpbGwgYmUgbGlzdGVkIGluIHRoZSBhcmNoaXRlY3R1cmUgUkVBRE1FLgorCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtPHR1bmU+IC0gTGlzdCBhbGwgb2YgdGhlIHBhY2thZ2UgYXJjaGl0ZWN0dXJlcwordGhhdCBhcmUgY29tcGF0aWJsZSB3aXRoIHRoaXMgc3BlY2lmaWMgdHVuZS4gIFRoZSBwYWNrYWdlIGFyY2ggb2YgdGhpcwordHVuZSBtdXN0IGJlIGluIHRoZSBsaXN0LgorCitUQVJHRVRfRlBVIC0gVGhlIEZQVSBzZXR0aW5nIGZvciBhIGdpdmVuIHR1bmUsIGhhcmQgKGdlbmVyYXRlIGZsb2F0aW5nCitwb2ludCBpbnN0cnVjdGlvbnMpLCBzb2Z0IChnZW5lcmF0ZSBpbnRlcm5hbCBnY2MgY2FsbHMpLCAib3RoZXIiCithcmNoaXRlY3R1cmUgc3BlY2lmaWMgZmxvYXRpbmcgcG9pbnQuICBUaGlzIGlzIHN5bmNocm9uaXplZCB3aXRoIHRoZQorY29tcGlsZXIgYW5kIG90aGVyIHRvb2xjaGFpbiBpdGVtcy4gIFRoaXMgc2hvdWxkIGJlIGR5bmFtaWNhbGx5Citjb25maWd1cmVkIGluIHRoZSBzYW1lIHdheSB0aGF0IFRVTkVfQ0NBUkdTIGlzLgorCitCQVNFX0xJQl90dW5lLTx0dW5lPiAtIFRoZSAiL2xpYiIgbG9jYXRpb24gZm9yIGEgc3BlY2lmaWMgQUJJLiAgVGhpcyBpcwordXNlZCBpbiBhIG11bHRpbGliIGNvbmZpZ3VyYXRpb24gdG8gcGxhY2UgdGhlIGxpYnJhcmllcyBpbiB0aGUgY29ycmVjdCwKK25vbi1jb25mbGljdGluZyBsb2NhdGlvbnMuCisKKworQmVzdCBQcmFjdGljZQorPT09PT09PT09PT09PQorVGhlIHR1bmUgaW5mcmFzdHJ1Y3R1cmUgaXMgZGVzaWduZWQgdG8gYmUgaGllcmFyY2hpY2FsLiBXaGVuIHdyaXRpbmcgYQorbmV3IHR1bmUgZmlsZSBmb3IgYSAiZmFzdC1mb3J3YXJkIiBDUFUgYXJjaGl0ZWN0dXJlIChvbmUgdGhhdCBzdXBwb3J0cworZXZlcnl0aGluZyBmcm9tIGEgcHJldmlvdXMgZ2VuZXJhdGlvbiksIGl0IGlzIHJlY29tbWVuZGVkIHRvIHJlcXVpcmUgdGhlCitwcmV2aW91cyBnZW5lcmF0aW9uIHR1bmUgZmlsZSBhbmQgc3BlY2lmeSBQQUNLQUdFX0VYVFJBX0FSQ0hTIHVzaW5nIHRoZQorcHJldmlvdXMgZ2VuZXJhdGlvbidzIG92ZXJyaWRlIGFuZCBhcHBlbmRpbmcgdGhlIG5ldyB0dW5lLiBOb3RlIHRoYXQKK29ubHkgb25lIHByZXZpb3VzIHR1bmUgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQgdG8gYXZvaWQgbXV0aXBsZSBpbmNsdWRlcworb2YgdGhlIGJhc2UgYXJjaCB3aGljaCBjb3VsZCBsZWFkIHRvIGEgYnJva2VuIGNvbmZpZ3VyYXRpb24gZHVlIHRvCittdWx0aXBsZSBwcmVwZW5kIGFuZCBhcHBlbmQgYXNzaWdubWVudHMuCisKK0ZvciBleGFtcGxlLCBmb3IgeDg2LCB0aGVyZSBpcyBhIGNvbW1vbiB4ODYvYXJjaC14ODYuaW5jIHdoaWNoIGlzCitpbmNsdWRlZCBpbiB0aGUgYmFzZSBpNTg2IHR1bmUgZmlsZS4gVGhlIGNvcmUyIHR1bmUgYnVpbGRzCitvbiB0aGF0LCBhbmQgY29yZWk3IGJ1aWxkcyBvbiBjb3JlMi4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vUkVBRE1FIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiZWI3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vUkVBRE1FCkBAIC0wLDAgKzEsNDAgQEAKKzIwMTIvMDMvMzAgLSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisgLSBJbml0aWFsIFJldmlzaW9uCisKK1RoZSBBUk0gYXJjaGl0ZWN0dXJlIGRlZmluaXRpb25zIGFyZSBzcGxpdCBhbW9uZyBhIG51bWJlciBvZiBmaWxlcy4KK1RoZSBwcmltYXJ5IGRlZmluaXRpb25zIGZvciB0aGUgdmFyaWFibGVzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjb3JlCithcmNoLWFybS5pbmMgZmlsZS4KKworVFVORV9BUkNIIGlzIHNldCB0byBlaXRoZXIgImFybSIgb3IgImFybWViIiBkZXBlbmRpbmcgb24gdGhlIHZhbHVlCitvZiB0aGUgZXhpc3RlbmNlIG9mIHRoZSAiYmlnZW5kaWFuIiBmZWF0dXJlIGluIGEgZ2l2ZW4gdHVuZS4KKworQSBzbWFsbCBzZXQgb2YgQVJNIHNwZWNpZmljIHZhcmlhYmxlcyBoYXZlIGJlZW4gZGVmaW5lZCB0byBhbGxvdyAKK1RVTkVfUEtHQVJDSCB0byBiZSBhdXRvbWF0aWNhbGx5IGRlZmluZWQuICBPcHRpbWl6ZWQgdHVuaW5ncyBtdXN0IE5PVCAKK2NoYW5nZSB0aGUgZGVmaW5pdG9uIG9mIFRVTkVfUEtHQVJDSC4gIFRVTkVfUEtHQUNIX3R1bmUtPHR1bmU+IHdpbGwgYmUgCitpZ25vcmVkLiAgVGhlIGZvcm1hdCBvZiB0aGUgcGFja2FnZSBhcmNoIGlzIGVuZm9yY2VkIGJ5IHRoZSBUVU5FX1BLR0FSQ0gKK2RlZmF1bHQuICBUaGUgZm9ybWF0IG11c3QgYmUgb2YgdGhlIGZvcm06Cis8YXJtdmVyc2lvbj5bdF1bZV1baGZdW2JdWy12ZnBdWy1uZW9uXQorCitUVU5FX1BLR0FSQ0ggaXMgZGVmaW5lZCBhczoKKyR7QVJNUEtHQVJDSH0ke0FSTVBLR1NGWF9USFVNQn0ke0FSTVBLR1NGWF9EU1B9JHtBUk1QS0dTRlhfRUFCSX0ke0FSTVBLR1NGWF9FTkRJQU59JHtBUk1QS0dTRlhfRlBVfQorCitBUk1QS0dBUkNIIC0gVGhpcyBpcyB0aGUgY29yZSBwYWNrYWdlIGFyY2ggY29tcG9uZW50IHNwZWNpZmllZCBieSBlYWNoIAordHVuaW5nLiAgVGhpcyBpcyB0aGUgcHJpbWFyeSBpZGVudGlmaWVyIG9mIGEgdHVuaW5nLiAgVXN1YWwgdmFsdWVzIGFyZToKK2FybSwgYXJtdjQsIGFybXY1LCBhcm12NiwgYXJtdjdhLCBldGMuCisKK0FSTVBLR1NGWF9USFVNQiAtIFRoaXMgaXMgdGhlIHRodW1iIHNwZWNpZmljIHN1ZmZpeC4gIEN1cmVudGx5IGl0IGlzIAorZGVmaW5lZCBpbiBmZWF0dXJlLWFybS10aHVtYi5pbmMuCisKK0FSTVBLR1NGWF9EU1AgLSBUaGlzIGlzIHRoZSBEU1Agc3BlY2lmaWMgc3VmZml4LiAgQ3VycmVudGx5IHRoaXMgaXMgc2V0IAordG8gJ2UnIHdoZW4gb24gYXJtdjUgYW5kIHRoZSBkc3AgZmVhdHVyZSBpcyBlbmFibGVkLgorCitBUk1QS0dTRlhfRUFCSSAtIFRoaXMgaXMgdGhlIGVhYmkgc3BlY2lmaWMgc3VmZml4LiAgVGhlcmUgYXJlIGN1cnJlbnRseSAKK3R3byBkZWZpbmVkIEFCSXMgc3BlY2lmaWNlZCwgc3RhbmRhcmQgRUFCSSBhbmQgSGFyZCBGbG9hdCAoVkZQKSBFQUJJLiAgCitXaGVuIHRoZSBjYWxsY29udmVudGlvbi1oYXJkIGlzIGVuYWJsZWQsICJoZiIgaXMgc3BlY2lmaWVkLCBvdGhlcndpc2UgaXQgCitpcyBibGFuay4KKworQVJNUEtHU0ZYX0VORElBTiAtIFRoaXMgaXMgdGhlIGVuZGlhbiBzcGVjaWZpYyBzdWZmaXguICBJdCBpcyBkZWZpbmVkIGluIAordGhlIGNvcmUgYXJjaC1hcm0uaW5jIGZpbGUuCisKK0FSTVBLR1NGWF9GUFUgLSBUaGlzIGlzIHRoZSBGUFUgc3BlY2lmaWMgc3VmZml4LiAgVGhlIHN1ZmZpeCBpbmRpY2F0ZXMgCitzcGVjaWZpYyBGUFUgb3B0aW1pemF0aW9ucy4gICd2ZnAnIGFuZCAnbmVvbicgYXJlIGJvdGggZGVmaW5lZC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm0uaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBiODBjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm0uaW5jCkBAIC0wLDAgKzEsMTcgQEAKKworVFVORVZBTElEW2JpZ2VuZGlhbl0gPSAiRW5hYmxlIGJpZy1lbmRpYW4gbW9kZS4iCisKK0FSTVBLR0FSQ0ggPSAiJHtBUk1QS0dBUkNIX3R1bmUtJHtERUZBVUxUVFVORX19IgorQVJNUEtHU0ZYX0VORElBTiA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJiaWdlbmRpYW4iLCAiYiIsICIiLCBkKX0iCitBUk1QS0dTRlhfRlBVID8/PSAiIgorQVJNUEtHU0ZYX0RTUCA/Pz0gIiIKK0FSTVBLR1NGWF9FQUJJID8/PSAiIgorQVJNUEtHU0ZYX1RIVU1CID8/PSAiIgorCitUVU5FX0FSQ0ggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYmlnZW5kaWFuIiwgImFybWViIiwgImFybSIsIGQpfSIKK1RVTkVfUEtHQVJDSCA9ICIke0FSTVBLR0FSQ0h9JHtBUk1QS0dTRlhfVEhVTUJ9JHtBUk1QS0dTRlhfRFNQfSR7QVJNUEtHU0ZYX0VBQkl9JHtBUk1QS0dTRlhfRU5ESUFOfSR7QVJNUEtHU0ZYX0ZQVX0iCisKK0FCSUVYVEVOU0lPTiA9ICJlYWJpIgorCitUQVJHRVRfRlBVID0gIiR7QGQuZ2V0VmFyKCdBUk1QS0dTRlhfRlBVJywgVHJ1ZSkuc3RyaXAoJy0nKSBvciAnc29mdCd9IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtNjQuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybTY0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mzc2Yjg3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybTY0LmluYwpAQCAtMCwwICsxLDM2IEBACitERUZBVUxUVFVORSA/PSAiYWFyY2g2NCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFthYXJjaDY0XSA9ICJFbmFibGUgaW5zdHJ1Y3Rpb25zIGZvciBhYXJjaDY0IgorCitNQUNISU5FT1ZFUlJJREVTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhYXJjaDY0IiwgIjphYXJjaDY0IiwgIiIgLGQpfSIKKworIyBMaXR0bGUgRW5kaWFuIGJhc2UgY29uZmlncworQVZBSUxUVU5FUyArPSAiYWFyY2g2NCBhYXJjaDY0X2JlIgorQVJNUEtHQVJDSF90dW5lLWFhcmNoNjQgPz0gImFhcmNoNjQiCitBUk1QS0dBUkNIX3R1bmUtYWFyY2g2NF9iZSA/PSAiYWFyY2g2NF9iZSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hYXJjaDY0ID89ICJhYXJjaDY0IgorVFVORV9GRUFUVVJFU190dW5lLWFhcmNoNjRfYmUgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFhcmNoNjR9IGJpZ2VuZGlhbiIKK0JBU0VfTElCX3R1bmUtYWFyY2g2NCA9ICJsaWI2NCIKK0JBU0VfTElCX3R1bmUtYWFyY2g2NF9iZSA9ICJsaWI2NCIKKworUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFhcmNoNjQgPSAiYWFyY2g2NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hYXJjaDY0X2JlID0gImFhcmNoNjRfYmUiCisKK0FSTVBLR1NGWF9FTkRJQU5fNjQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYmlnZW5kaWFuIiwgIl9iZSIsICIiLCBkKX0iCitUVU5FX0FSQ0hfNjQgPSAiYWFyY2g2NCR7QVJNUEtHU0ZYX0VORElBTl82NH0iCitUVU5FX1BLR0FSQ0hfNjQgPSAiYWFyY2g2NCR7QVJNUEtHU0ZYX0VORElBTl82NH0iCitBQklFWFRFTlNJT05fNjQgPSAiIgorVEFSR0VUX0ZQVV82NCA9ICIiCisKKyMgRHVwbGljYXRlZCBmcm9tIGFyY2gtYXJtLmluYworVFVORV9BUkNIXzMyID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImJpZ2VuZGlhbiIsICJhcm1lYiIsICJhcm0iLCBkKX0iCitUVU5FX1BLR0FSQ0hfMzIgPSAiJHtBUk1QS0dBUkNIfSR7QVJNUEtHU0ZYX1RIVU1CfSR7QVJNUEtHU0ZYX0RTUH0ke0FSTVBLR1NGWF9FQUJJfSR7QVJNUEtHU0ZYX0VORElBTn0ke0FSTVBLR1NGWF9GUFV9IgorQUJJRVhURU5TSU9OXzMyID0gImVhYmkiCitUQVJHRVRfRlBVXzMyID0gIiR7QGQuZ2V0VmFyKCdBUk1QS0dTRlhfRlBVJywgVHJ1ZSkuc3RyaXAoJy0nKSBvciAnc29mdCd9IgorCitUVU5FX0FSQ0ggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYWFyY2g2NCIsICIke1RVTkVfQVJDSF82NH0iLCAiJHtUVU5FX0FSQ0hfMzJ9IiAsZCl9IgorVFVORV9QS0dBUkNIID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFhcmNoNjQiLCAiJHtUVU5FX1BLR0FSQ0hfNjR9IiwgIiR7VFVORV9QS0dBUkNIXzMyfSIgLGQpfSIKK0FCSUVYVEVOU0lPTiA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhYXJjaDY0IiwgIiR7QUJJRVhURU5TSU9OXzY0fSIsICIke0FCSUVYVEVOU0lPTl8zMn0iICxkKX0iCitUQVJHRVRfRlBVID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFhcmNoNjQiLCAiJHtUQVJHRVRfRlBVXzY0fSIsICIke1RBUkdFVF9GUFVfMzJ9IiAsZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjMDdhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NC5pbmMKQEAgLTAsMCArMSwzNCBAQAorREVGQVVMVFRVTkUgPz0gImFybXY0IgorCitUVU5FVkFMSURbYXJtXSA9ICJFbmFibGUgQVJNIGluc3RydWN0aW9uIHNldCIKK1RVTkVWQUxJRFthcm12NF0gPSAiRW5hYmxlIGluc3RydWN0aW9ucyBmb3IgQVJNdjQiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjQiLCAiIC1tYXJjaD1hcm12NCR7QVJNUEtHU0ZYX1RIVU1CfSIsICIiLCBkKX0iCisjIGVuYWJsZSAtLWZpeC12NGJ4IHdoZW4gd2UgaGF2ZSBhcm12NCBpbiBUVU5FX0ZFQVRVUkVTLCBidXQgdGhlbiBkaXNhYmxlIGl0IHdoZW4gd2UgaGF2ZSBhbHNvIGFybXY1IG9yIHRodW1iCisjIG1heWJlIHdlIHNob3VsZCBleHRlbmQgYmIudXRpbHMuY29udGFpbnMgdG8gc3VwcG9ydCBjaGVjayBmb3IgYW55IGNoZWNrdmFsdWVzIGluIHZhbHVlLCBub3cgaXQgZG9lcyAKKyMgY2hlY2t2YWx1ZXMuaXNzdWJzZXQodmFsKSB3aGljaCBjYW5ub3QgYmUgdXNlZCBmb3IgbmVnYXRpdmUgdGVzdCBvZiBmb28gbmVpdGhlciBiYXIgaW4gdmFsdWUKK0ZJWF9WNEJYX0FSTVY0ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY0IiwgIi0tZml4LXY0YngiLCAiIiwgZCl9IgorRklYX1Y0QlhfQVJNVjUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjUiLCAiIiwgIiR7RklYX1Y0QlhfQVJNVjR9IiwgZCl9IgorRklYX1Y0QlggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAidGh1bWIiLCAiIiwgIiR7RklYX1Y0QlhfQVJNVjV9IiwgZCl9IgorVEFSR0VUX0xEX0tFUk5FTF9BUkNIICs9ICIke0ZJWF9WNEJYfSIKK01BQ0hJTkVPVkVSUklERVMgPS4gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY0IiwgImFybXY0OiIsICIiICxkKX0iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtLmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdGh1bWIuaW5jCisKKyMgTGl0dGxlIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjQgYXJtdjR0IgorQVJNUEtHQVJDSF90dW5lLWFybXY0ID89ICJhcm12NCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NHQgPz0gImFybXY0IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY0ID89ICJhcm0gYXJtdjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR0ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NH0gdGh1bWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjQgPSAiYXJtIGFybXY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NH0gYXJtdjR0IgorCisjIEJpZyBFbmRpYW4KK0FWQUlMVFVORVMgKz0gImFybXY0YiBhcm12NHRiIgorQVJNUEtHQVJDSF90dW5lLWFybXY0YiA/PSAiYXJtdjQiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjR0YiA/PSAiYXJtdjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjRiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY0dGIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY0dH0gYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0YiA9ICJhcm1lYiBhcm12NGIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR0YiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NGJ9IGFybXY0dGIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUtZHNwLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS1kc3AuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNGE2MmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUtZHNwLmluYwpAQCAtMCwwICsxLDUyIEBACitBUk1QS0dTRlhfRFNQID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgWyAiYXJtdjUiLCAiZHNwIiBdLCAiZSIsICIiLCBkKX0iCitUVU5FVkFMSURbZHNwXSA9ICJBUk0gRFNQIGZ1bmN0aW9uYWxpdHkiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUuaW5jCisKKyMgTGl0dGxlIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjVlIGFybXY1dGUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjVlID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRlID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWUgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1fSBkc3AiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZSA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0fSBkc3AiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1fSBhcm12NWUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXR9IGFybXY1ZSBhcm12NXRlIgorCisjIExpdHRsZSBFbmRpYW4gKyBWRlAvRFNQCitBVkFJTFRVTkVTICs9ICJhcm12NWUtdmZwIGFybXY1dGUtdmZwIGFybXY1ZWhmLXZmcCBhcm12NXRlaGYtdmZwIgorQVJNUEtHQVJDSF90dW5lLWFybXY1ZS12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGUtdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NWVoZi12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGVoZi12ZnAgPz0gImFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1ZS12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1ZX0gdmZwIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGUtdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlfSB2ZnAiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVlaGYtdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWUtdmZwfSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGVoZi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dGUtdmZwfSBjYWxsY29udmVudGlvbi1oYXJkIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZS12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjUtdmZwfSBhcm12NWUgYXJtdjVlLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXQtdmZwfSBhcm12NWUgYXJtdjV0ZSBhcm12NWUtdmZwIGFybXY1dGUtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZWhmLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWhmLXZmcH0gYXJtdjVlaGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGVoZi12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0aGYtdmZwfSBhcm12NWVoZi12ZnAgYXJtdjV0ZWhmLXZmcCIKKworIyBCaWcgRW5kaWFuCitBVkFJTFRVTkVTICs9ICJhcm12NWViIGFybXY1dGViIgorQVJNUEtHQVJDSF90dW5lLWFybXY1ZWIgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGViID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWViID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWV9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlYiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZX0gYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZWIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVifSBhcm12NWViIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGViID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGJ9IGFybXY1ZWIgYXJtdjV0ZWIiCisKKyMgQmlnIEVuZGlhbiArIFZGUC9EU1AKK0FWQUlMVFVORVMgKz0gImFybXY1ZWItdmZwIGFybXY1dGViLXZmcCBhcm12NWVoZmItdmZwIGFybXY1dGVoZmItdmZwIgorQVJNUEtHQVJDSF90dW5lLWFybXY1ZWItdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRlYi12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1ZWhmYi12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGVoZmItdmZwID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWViLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVlLXZmcH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGViLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZS12ZnB9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWVoZmItdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWVoZi12ZnB9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlaGZiLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZWhmLXZmcH0gYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZWItdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1Yi12ZnB9IGFybXY1ZWIgYXJtdjVlYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWItdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGItdmZwfSBhcm12NWViIGFybXY1dGViIGFybXY1ZWItdmZwIGFybXY1dGViLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWVoZmItdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1aGZiLXZmcH0gYXJtdjVlaGZiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlaGZiLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRoZmItdmZwfSBhcm12NWVoZmItdmZwIGFybXY1dGVoZmItdmZwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNjZWFmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS5pbmMKQEAgLTAsMCArMSw2MCBAQAorREVGQVVMVFRVTkUgPz0gImFybXY1IgorCitUVU5FVkFMSURbYXJtdjVdID0gIkVuYWJsZSBpbnN0cnVjdGlvbnMgZm9yIEFSTXY1IgorVFVORUNPTkZMSUNUU1thcm12NV0gPSAiYXJtdjQiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjUiLCAiIC1tYXJjaD1hcm12NSR7QVJNUEtHU0ZYX1RIVU1CfSR7QVJNUEtHU0ZYX0RTUH0iLCAiIiwgZCl9IgorTUFDSElORU9WRVJSSURFUyA9LiAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjUiLCAiYXJtdjU6IiwgIiIgLGQpfSIKKworQVJNUEtHU0ZYX0RTUCA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsIFsgImFybXY1IiwgImRzcCIgXSwgImUiLCAiIiwgZCl9IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdmZwLmluYworCisjIExpdHRsZSBFbmRpYW4KK0FWQUlMVFVORVMgKz0gImFybXY1IGFybXY1dCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NSA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0ID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NSA/PSAiYXJtIGFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV9IHRodW1iIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0fSBhcm12NSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR0fSBhcm12NSBhcm12NXQiCisKKyMgTGl0dGxlIEVuZGlhbiArIFZGUC9EU1AKK0FWQUlMVFVORVMgKz0gImFybXY1LXZmcCBhcm12NXQtdmZwIGFybXY1aGYtdmZwIGFybXY1dGhmLXZmcCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NS12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dC12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1aGYtdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRoZi12ZnAgPz0gImFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1LXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV9IHZmcCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXQtdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXR9IHZmcCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWhmLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjUtdmZwfSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGhmLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0LXZmcH0gY2FsbGNvbnZlbnRpb24taGFyZCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NS12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV9IGFybXY1LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXQtdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dH0gYXJtdjUtdmZwIGFybXY1dC12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVoZi12ZnAgPSAiYXJtdjVoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0aGYtdmZwID0gImFybXY1aGYtdmZwIGFybXY1dGhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlaGYtdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGhmLXZmcH0gYXJtdjVlaGYtdmZwIGFybXY1dGVoZi12ZnAiCisKKyMgQmlnIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjViIGFybXY1dGIiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjViID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRiID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1fSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0YiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0fSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjViID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0Yn0gYXJtdjViIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR0Yn0gYXJtdjViIGFybXY1dGIiCisKKyMgQmlnIEVuZGlhbiArIFZGUC9EU1AKK0FWQUlMVFVORVMgKz0gImFybXY1Yi12ZnAgYXJtdjV0Yi12ZnAgYXJtdjVoZmItdmZwIGFybXY1dGhmYi12ZnAiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjViLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0Yi12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1aGZiLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0aGZiLXZmcCA/PSAiYXJtdjUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjViLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjUtdmZwfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0Yi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dC12ZnB9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWhmYi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1aGYtdmZwfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0aGZiLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0aGYtdmZwfSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjViLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWJ9IGFybXY1Yi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0Yi12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0Yn0gYXJtdjViLXZmcCBhcm12NXRiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWhmYi12ZnAgPSAiYXJtdjVoZmItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGhmYi12ZnAgPSAiYXJtdjVoZmItdmZwIGFybXY1dGhmYi12ZnAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjYuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY2LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjBjNWJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY2LmluYwpAQCAtMCwwICsxLDUwIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjYiCisKK1RVTkVWQUxJRFthcm12Nl0gPSAiRW5hYmxlIGluc3RydWN0aW9ucyBmb3IgQVJNdjYiCitUVU5FQ09ORkxJQ1RTW2FybXY2XSA9ICJhcm12NCBhcm12NSIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12NiIsICIgLW1hcmNoPWFybXY2IiwgIiIsIGQpfSIKK01BQ0hJTkVPVkVSUklERVMgPS4gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY2IiwgImFybXY2OiIsICIiICxkKX0iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUtZHNwLmluYworCisjIExpdHRsZSBFbmRpYW4KK0FWQUlMVFVORVMgKz0gImFybXY2LW5vdmZwIGFybXY2dC1ub3ZmcCBhcm12NiBhcm12NnQgYXJtdjZoZiBhcm12NnRoZiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12Ni1ub3ZmcCA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZ0LW5vdmZwID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NiA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZ0ID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NmhmID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NnRoZiA/PSAiYXJtdjYiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjYtbm92ZnAgPz0gImFybSBhcm12NiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnQtbm92ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2LW5vdmZwfSB0aHVtYiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjYtbm92ZnB9IHZmcCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnQgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2dC1ub3ZmcH0gdmZwIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2fSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2dGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnR9IGNhbGxjb252ZW50aW9uLWhhcmQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjYtbm92ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlfSBhcm12NiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnQtbm92ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZX0gYXJtdjYgYXJtdjZ0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZS12ZnB9IGFybXY2IGFybXY2LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZS12ZnB9IGFybXY2IGFybXY2dCBhcm12Ni12ZnAgYXJtdjZ0LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NmhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZWhmLXZmcH0gYXJtdjZoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ0aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWhmLXZmcH0gYXJtdjZoZi12ZnAgYXJtdjZ0aGYtdmZwIgorCisjIEJpZyBFbmRpYW4KK0FWQUlMVFVORVMgKz0gImFybXY2Yi1ub3ZmcCBhcm12NnRiLW5vdmZwIGFybXY2YiBhcm12NnRiIGFybXY2aGZiIGFybXY2dGhmYiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NmItbm92ZnAgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2dGItbm92ZnAgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2YiA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZ0YiA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZoZmIgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2dGhmYiA/PSAiYXJtdjYiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZiLW5vdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12Ni1ub3ZmcH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2dGItbm92ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2dC1ub3ZmcH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2YiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnRiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnR9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NmhmYiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZoZn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2dGhmYiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ0aGZ9IGJpZ2VuZGlhbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NmItbm92ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlYn0gYXJtdjZiIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dGItbm92ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWJ9IGFybXY2YiBhcm12NnRiIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2YiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWViLXZmcH0gYXJtdjZiIGFybXY2Yi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ0YiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlYi12ZnB9IGFybXY2YiBhcm12NnRiIGFybXY2Yi12ZnAgYXJtdjZ0Yi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZoZmIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlaGZiLXZmcH0gYXJtdjZoZmItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dGhmYiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlaGZiLXZmcH0gYXJtdjZoZmItdmZwIGFybXY2dGhmYi12ZnAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYjZmNjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYwpAQCAtMCwwICsxLDEyMyBAQAorREVGQVVMVFRVTkUgPz0gImFybXY3YSIKKworVFVORVZBTElEW2FybXY3YV0gPSAiRW5hYmxlIGluc3RydWN0aW9ucyBmb3IgQVJNdjctYSIKK1RVTkVDT05GTElDVFNbYXJtdjdhXSA9ICJhcm12NCBhcm12NSBhcm12NiBhcm12NyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12N2EiLCAiIC1tYXJjaD1hcm12Ny1hIiwgIiIsIGQpfSIKK01BQ0hJTkVPVkVSUklERVMgPS4gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY3YSIsICJhcm12N2E6IiwgIiIgLGQpfSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12Ni5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLW5lb24uaW5jCisKKyMgTGl0dGxlIEVuZGlhbiBiYXNlIGNvbmZpZ3MKK0FWQUlMVFVORVMgKz0gImFybXY3YSBhcm12N2F0IGFybXY3YS12ZnB2M2QxNiBhcm12N2F0LXZmcHYzZDE2IGFybXY3YS12ZnB2MyBhcm12N2F0LXZmcHYzIGFybXY3YS1uZW9uIGFybXY3YXQtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2EgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhLXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdC12ZnB2M2QxNiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YS12ZnB2MyA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXQtdmZwdjMgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2EtbmVvbj89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdC1uZW9uID89ICJhcm12N2EiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhID89ICJhcm0gYXJtdjdhIHZmcCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IHRodW1iIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YS12ZnB2M2QxNiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSB2ZnB2M2QxNiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSB2ZnB2M2QxNiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtdmZwdjMgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS12ZnB2M2QxNn0gdmZwdjMiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC12ZnB2MyA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC12ZnB2M2QxNn0gdmZwdjMiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gbmVvbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IG5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2fSBhcm12N2EgYXJtdjdhLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhfSBhcm12N2EtdmZwLXZmcHYzZDE2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YS12ZnB2MyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtdmZwdjNkMTZ9IGFybXY3YS12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhfSBhcm12N2EtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnR9IGFybXY3YSBhcm12N2EtdmZwIGFybXY3YXQyLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LXZmcHYzZDE2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGFybXY3YS12ZnAtdmZwdjNkMTYgYXJtdjdhdDItdmZwLXZmcHYzZDE2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC12ZnB2M2QxNn0gYXJtdjdhLXZmcC12ZnB2M2QxNi12ZnB2MyBhcm12N2F0Mi12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGFybXY3YS12ZnAtbmVvbiBhcm12N2F0Mi12ZnAtbmVvbiIKKworIyBWRlAgVHVuZXMKK0FWQUlMVFVORVMgKz0gImFybXY3YWhmIGFybXY3YXRoZiBhcm12N2FoZi12ZnB2M2QxNiBhcm12N2F0aGYtdmZwdjNkMTYgYXJtdjdhaGYtdmZwdjMgYXJtdjdhdGhmLXZmcHYzIGFybXY3YWhmLW5lb24gYXJtdjdhdGhmLW5lb24gYXJtdjdhaGYtbmVvbi12ZnB2NCBhcm12N2F0aGYtbmVvbi12ZnB2NCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FoZiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRoZiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmLXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGhmLXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhaGYtdmZwdjMgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGYtdmZwdjMgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FoZi1uZW9uPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGYtbmVvbiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmLW5lb24tdmZwdjQgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGYtbmVvbi12ZnB2NCA/PSAiYXJtdjdhIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtdmZwdjNkMTZ9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LXZmcHYzZDE2fSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLXZmcHYzID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtdmZwdjN9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLXZmcHYzID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LXZmcHYzfSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9ufSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbi12ZnB2NCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gdmZwdjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb24tdmZwdjQgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9ufSB2ZnB2NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NmhmfSBhcm12N2FoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dGhmfSBhcm12N2FoZi12ZnAgYXJtdjdhdDJoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9IGFybXY3YWhmLXZmcC12ZnB2M2QxNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmfSBhcm12N2FoZi12ZnAtdmZwdjNkMTYgYXJtdjdhdDJoZi12ZnAtdmZwdjNkMTYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtdmZwdjNkMTZ9IGFybXY3YWhmLXZmcC12ZnB2M2QxNi12ZnB2MyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLXZmcHYzZDE2fSBhcm12N2FoZi12ZnAtdmZwdjNkMTYtdmZwdjMgYXJtdjdhdDJoZi12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZn0gYXJtdjdhaGYtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmfSBhcm12N2FoZi12ZnAtbmVvbiBhcm12N2F0MmhmLXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb24tdmZwdjQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbn0gYXJtdjdhaGYtdmZwLW5lb24tdmZwdjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb24tdmZwdjQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb259IGFybXY3YWhmLXZmcC1uZW9uLXZmcHY0IGFybXY3YXQyaGYtdmZwLW5lb24tdmZwdjQiCisKKyMgQmlnIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjdhYiBhcm12N2F0YiBhcm12N2FiLXZmcHYzZDE2IGFybXY3YXRiLXZmcHYzZDE2IGFybXY3YWItdmZwdjMgYXJtdjdhdGItdmZwdjMgYXJtdjdhYi1uZW9uIGFybXY3YXRiLW5lb24iCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhYiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRiID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhYi12ZnB2M2QxNiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRiLXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhYi12ZnB2MyA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRiLXZmcHYzID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhYi1uZW9uPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0Yi1uZW9uID89ICJhcm12N2EiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhYiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FiLXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtdmZwdjNkMTZ9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0Yi12ZnB2M2QxNiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC12ZnB2M2QxNn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWItdmZwdjMgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS12ZnB2M30gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRiLXZmcHYzID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LXZmcHYzfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhYi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRiLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtbmVvbn0gYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZifSBhcm12N2FiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0YiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnRifSBhcm12N2FiLXZmcCBhcm12N2F0MmItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWItdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYn0gYXJtdjdhYi12ZnAtdmZwdjNkMTYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGItdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYn0gYXJtdjdhYi12ZnAtdmZwdjNkMTYgYXJtdjdhdDJiLXZmcC12ZnB2M2QxNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FiLXZmcHYzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWItdmZwdjNkMTZ9IGFybXY3YWItdmZwLXZmcHYzZDE2LXZmcHYzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRiLXZmcHYzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWItdmZwdjNkMTZ9IGFybXY3YWItdmZwLXZmcHYzZDE2LXZmcHYzIGFybXY3YXQyYi12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWJ9IGFybXY3YWItdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGItbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0Yn0gYXJtdjdhYi12ZnAtbmVvbiBhcm12N2F0MmItdmZwLW5lb24iCisKKyMgQmlnIEVuZGlhbiArIFZGUAorQVZBSUxUVU5FUyArPSAiYXJtdjdhaGZiIGFybXY3YXRoZmIgYXJtdjdhaGZiLXZmcHYzZDE2IGFybXY3YXRoZmItdmZwdjNkMTYgYXJtdjdhaGZiLXZmcHYzIGFybXY3YXRoZmItdmZwdjMgYXJtdjdhaGZiLW5lb24gYXJtdjdhdGhmYi1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmYiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRoZmIgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FoZmItdmZwdjNkMTYgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGZiLXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhaGZiLXZmcHYzID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGhmYi12ZnB2MyA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmYi1uZW9uPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGZiLW5lb24gPz0gImFybXY3YSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZmIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmYiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZiLXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi12ZnB2M2QxNn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZmItdmZwdjNkMTYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi12ZnB2M2QxNn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmYi12ZnB2MyA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtdmZwdjN9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZiLXZmcHYzID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtdmZwdjN9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZmItbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZmItbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IGJpZ2VuZGlhbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZmIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZoZmJ9IGFybXY3YWhmYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmYiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnRoZmJ9IGFybXY3YWhmYi12ZnAgYXJtdjdhdDJoZmItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmYi12ZnB2M2QxNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZmJ9IGFybXY3YWhmYi12ZnAtdmZwdjNkMTYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmYi12ZnB2M2QxNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZifSBhcm12N2FoZmItdmZwLXZmcHYzZDE2IGFybXY3YXQyaGZiLXZmcC12ZnB2M2QxNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZmItdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZiLXZmcHYzZDE2fSBhcm12N2FoZmItdmZwLXZmcHYzZDE2LXZmcHYzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZmItdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmYi12ZnB2M2QxNn0gYXJtdjdhaGZiLXZmcC12ZnB2M2QxNi12ZnB2MyBhcm12N2F0MmhmYi12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZiLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZifSBhcm12N2FoZmItdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmYi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZmJ9IGFybXY3YWhmYi12ZnAtbmVvbiBhcm12N2F0MmhmYi12ZnAtbmVvbiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12OC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjguaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlODMyZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjguaW5jCkBAIC0wLDAgKzEgQEAKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtNjQuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLW5lb24uaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS1uZW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGIyYjg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS1uZW9uLmluYwpAQCAtMCwwICsxLDMgQEAKK1RVTkVWQUxJRFtuZW9uXSA9ICJFbmFibGUgTmVvbiBTSU1EIGFjY2VsZXJhdG9yIHVuaXQuIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCBiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ2ZnB2NCIsICIgLW1mcHU9bmVvbi12ZnB2NCIsICIgLW1mcHU9bmVvbiIsIGQpLCAiIiAsIGQpfSIKK0FSTVBLR1NGWF9GUFUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCAiLW5lb24iLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS10aHVtYi5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLXRodW1iLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjMyMTcxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS10aHVtYi5pbmMKQEAgLTAsMCArMSw0OSBAQAorIyBUaGUgaW5zdHJ1Y3Rpb24gc2V0IHRoZSBjb21waWxlciBzaG91bGQgdXNlIHdoZW4gZ2VuZXJhdGluZyBhcHBsaWNhdGlvbgorIyBjb2RlLiBUaGUga2VybmVsIGlzIGFsd2F5cyBjb21waWxlZCB3aXRoIGFybSBjb2RlIGF0IHByZXNlbnQuIGFybSBjb2RlCisjIGlzIHRoZSBvcmlnaW5hbCAzMiBiaXQgQVJNIGluc3RydWN0aW9uIHNldCwgdGh1bWIgY29kZSBpcyB0aGUgMTYgYml0CisjIGVuY29kZWQgUklTQyBzdWItc2V0LiBUaHVtYiBjb2RlIGlzIHNtYWxsZXIgKG1heWJlIDcwJSBvZiB0aGUgQVJNIHNpemUpCisjIGJ1dCByZXF1aXJlcyBtb3JlIGluc3RydWN0aW9ucyAoMTQwJSBmb3IgNzAlIHNtYWxsZXIgY29kZSkgc28gbWF5IGJlCisjIHNsb3dlci4KK1RVTkVWQUxJRFt0aHVtYl0gPSAiVXNlIHRodW1iIGluc3RydWN0aW9ucyBpbnN0ZWFkIG9mIEFSTSIKK0FSTV9USFVNQl9PUFQgPSAiJHtAWydhcm0nLCAndGh1bWInXVtkLmdldFZhcignQVJNX0lOU1RSVUNUSU9OX1NFVCcsIFRydWUpID09ICd0aHVtYiddfSIKK0FSTV9USFVNQl9TVUZGSVggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FybXY0JywgICd0JywgICcnLCBkKX0iCitBUk1fVEhVTUJfU1VGRklYIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdhcm12NScsICAndCcsICAnJywgZCl9IgorQVJNX1RIVU1CX1NVRkZJWCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYXJtdjYnLCAgJ3QnLCAgJycsIGQpfSIKK0FSTV9USFVNQl9TVUZGSVggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FybXY3YScsICd0MicsICcnLCBkKX0iCitBUk1fVEhVTUJfU1VGRklYIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdhcm12N3InLCAndDInLCAnJywgZCl9IgorQVJNX1RIVU1CX1NVRkZJWCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYXJtdjdtJywgJ3QyJywgJycsIGQpfSIKKworIyBJZiB0aGUgZGV2aWNlIHN1cHBvcnRzIEFSTSwgdGhlbiByZXNwZWN0IEFSTV9USFVNQl9PUFQgKHdoaWNoIGNhbiBiZSAiYXJtIiBvciAidGh1bWIiKQorIyBJZiB0aGUgZGVmaWNlIGRvZXNuJ3Qgc3VwcG9ydCBBUk0sIHRoZW4gYWx3YXlzIHNldCAidGh1bWIiIGV2ZW4gd2hlbgorIyBzb21lIHJlY2lwZSBleHBsaWNpdGx5IHNldHMgQVJNX0lOU1RSVUNUSU9OX1NFVCB0byAiYXJtIgorQVJNX01fT1BUID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FybScsICcke0FSTV9USFVNQl9PUFR9JywgJ3RodW1iJywgZCl9IgorcHl0aG9uICgpIHsKKyAgICBpZiBiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICd0aHVtYicsICdGYWxzZScsICdUcnVlJywgZCk6CisgICAgICAgIHJldHVybgorICAgIHNlbGVjdGVkID0gZC5nZXRWYXIoJ0FSTV9JTlNUUlVDVElPTl9TRVQnLCBUcnVlKQorICAgIGlmIHNlbGVjdGVkID09IE5vbmU6CisgICAgICAgIHJldHVybgorICAgIHVzZWQgPSBkLmdldFZhcignQVJNX01fT1BUJywgVHJ1ZSkKKyAgICBpZiBzZWxlY3RlZCAhPSB1c2VkOgorICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIGJiLndhcm4oIlJlY2lwZSAnJXMnIHNlbGVjdHMgQVJNX0lOU1RSVUNUSU9OX1NFVCB0byBiZSAnJXMnLCBidXQgdHVuZSBjb25maWd1cmF0aW9uIG92ZXJyaWRlcyBpdCB0byAnJXMnIiAlIChwbiwgc2VsZWN0ZWQsIHVzZWQpKQorfQorCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnIC1tJHtBUk1fTV9PUFR9JywgJycsIGQpfSIKK09WRVJSSURFUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnOnRodW1iJywgJycsIGQpfSIKKworIyBBZGQgc3VmZml4IGZyb20gQVJNX1RIVU1CX1NVRkZJWCBvbmx5IGlmIGFmdGVyIGFsbCB0aGlzIHdlIHN0aWxsIHNldCBBUk1fTV9PUFQgdG8gdGh1bWIKK0FSTVBLR1NGWF9USFVNQiAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnJHtBUk1fVEhVTUJfU1VGRklYfScsICcnLCBkKSBpZiBkLmdldFZhcignQVJNX01fT1BUJywgVHJ1ZSkgPT0gJ3RodW1iJyBlbHNlICcnfSIKKworIyBXaGV0aGVyIHRvIGNvbXBpbGUgd2l0aCBjb2RlIHRvIGFsbG93IGludGVyd29ya2luZyBiZXR3ZWVuIHRoZSB0d28KKyMgaW5zdHJ1Y3Rpb24gc2V0cy4gVGhpcyBhbGxvd3MgdGh1bWIgY29kZSB0byBiZSBleGVjdXRlZCBvbiBhIHByaW1hcmlseQorIyBhcm0gc3lzdGVtIGFuZCB2aWNlIHZlcnNhLiBJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IERJU1RST3Mgbm90CisjIHR1cm4gdGhpcyBvZmYgLSB0aGUgYWN0dWFsIGNvc3QgaXMgdmVyeSBzbWFsbC4KK1RVTkVWQUxJRFtuby10aHVtYi1pbnRlcndvcmtdID0gIkRpc2FibGUgbWl4aW5nIG9mIHRodW1iIGFuZCBBUk0gZnVuY3Rpb25zIgorVEhVTUJfVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ25vLXRodW1iLWludGVyd29yaycsICcgLW1uby10aHVtYi1pbnRlcndvcmsnLCAnIC1tdGh1bWItaW50ZXJ3b3JrJywgZCl9IgorVEhVTUJfT1ZFUlJJREVTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICduby10aHVtYi1pbnRlcndvcmsnLCAnOnRodW1iLWludGVyd29yaycsICcnLCBkKX0iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnICR7VEhVTUJfVFVORV9DQ0FSR1N9JywgJycsIGQpfSIKK09WRVJSSURFUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnJHtUSFVNQl9PVkVSUklERVN9JywgJycsIGQpfSIKKworIyB3aGF0IGFib3V0IGFybXY3bSBkZXZpY2VzIHdoaWNoIGRvbid0IHN1cHBvcnQgLW1hcm0gKGUuZy4gQ29ydGV4LU0zKT8KK1RBUkdFVF9DQ19LRVJORUxfQVJDSCArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnLW1uby10aHVtYi1pbnRlcndvcmsgLW1hcm0nLCAnJywgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS12ZnAuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS12ZnAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZmJlYWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLXZmcC5pbmMKQEAgLTAsMCArMSwxNyBAQAorVFVORVZBTElEW3ZmcF0gPSAiRW5hYmxlIFZlY3RvciBGbG9hdGluZyBQb2ludCAodmZwKSB1bml0LiIKK0FSTVBLR1NGWF9GUFUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInZmcCIsICItdmZwIiwgIiIgLGQpfSIKKworVFVORVZBTElEW3ZmcHYzZDE2XSA9ICJFbmFibGUgVmVjdG9yIEZsb2F0aW5nIFBvaW50IFZlcnNpb24gMyB3aXRoIDE2IHJlZ2lzdGVycyAodmZwdjMtZDE2KSB1bml0LiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ2ZnB2M2QxNiIsICIgLW1mcHU9dmZwdjMtZDE2IiwgIiIsIGQpfSIKK0FSTVBLR1NGWF9GUFUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInZmcHYzZDE2IiwgIi12ZnB2M2QxNiIsICIiICxkKX0iCisKK1RVTkVWQUxJRFt2ZnB2M10gPSAiRW5hYmxlIFZlY3RvciBGbG9hdGluZyBQb2ludCBWZXJzaW9uIDMgd2l0aCAzMiByZWdpc3RlcnMgKHZmcHYzKSB1bml0LiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ2ZnB2MyIsICIgLW1mcHU9dmZwdjMiLCAiIiwgZCl9IgorQVJNUEtHU0ZYX0ZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAidmZwdjMiLCAiLXZmcHYzIiwgIiIgLGQpfSIKKworVFVORVZBTElEW3ZmcHY0XSA9ICJFbmFibGUgVmVjdG9yIEZsb2F0aW5nIFBvaW50IFZlcnNpb24gNCAodmZwdjQpIHVuaXQuIgorQVJNUEtHU0ZYX0ZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAidmZwdjQiLCAiLXZmcHY0IiwgIiIgLGQpfSIKKworVFVORVZBTElEW2NhbGxjb252ZW50aW9uLWhhcmRdID0gIkVuYWJsZSBFQUJJIGhhcmQgZmxvYXQgY2FsbCBjb252ZW50aW9uLCByZXF1aXJlcyBWRlAuIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInZmcCIsIGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNhbGxjb252ZW50aW9uLWhhcmQiLCAiIC1tZmxvYXQtYWJpPWhhcmQiLCAiIC1tZmxvYXQtYWJpPXNvZnRmcCIsIGQpLCAiIiAsZCl9IgorQVJNUEtHU0ZYX0VBQkkgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgWyAiY2FsbGNvbnZlbnRpb24taGFyZCIsICJ2ZnAiIF0sICJoZiIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9SRUFETUUgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM3NWYzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL1JFQURNRQpAQCAtMCwwICsxLDM2IEBACisyMDEyLzAzLzMwIC0gTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorICAtIEluaXRpYWwgVmVyc2lvbgorCitNSVBTIGN1cnJlbnRseSBkZWZpbmVzIDEyIEFCSXMuICBDb21iaW5hdGlvbnMgb2Y6CisgKikgQmlnL0xpdHRsZSBFbmRpYW4KKyAqKSBIYXJkd2FyZS9Tb2Z0d2FyZSBGbG9hdGluZyBQb2ludAorICopIG8zMiwgbjMyLCBuNjQgQUJJCisKK1RVTkVfQVJDSCwgdGhlIEdOVSBjYW5vbmljYWwgYXJjaCwgaXMgZGVmaW5lZCBhczoKKworbWlwcyR7TUlQU1BLR1NGWF9CWVRFfSR7TUlQU1BLR1NGWF9FTkRJQU59CisKK1RoZSBwYWNrYWdlIGFyY2ggaXMgZGVmaW5lZCBpbiBzdWNoIGEgd2F5IHRvIGdlbmVyYXRlZCBhIHN0YW5kYXJkIG5hbWluZworc2NoZW1lLiAgVGhlIHNjaGVtZSBpczogPG1pcHMgdmFyaWFudD5bLW5mXVstbjMyXQorCitUVU5FX1BLR0FSQ0ggaXMgZGVmaW5lZCBhczoKKworJHtNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS0ke0RFRkFVTFRUVU5FfX0ke01JUFNQS0dTRlhfRlBVfSR7TUlQU1BLR1NGWF9BQkl9CisKK1RoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIE1JUFMgc3BlY2lmaWMgdmFyaWFibGVzOgorCitNSVBTUEtHU0ZYX0JZVEUgLSBUaGlzIGlzIGRlZmluZWQgYXMgZWl0aGVyIGJsYW5rIGFuZCAiNjQiIGZvciBNSVBTNjQgQ1BVcy4KKworTUlQU1BLR1NGWF9FTkRJQU4gLSBGb3IgYmlnZW5kaWFuIGhhcmR3YXJlIHRoaXMgaXMgYmxhbmssIG90aGVyd2lzZSBpdCdzCitkZWZpbmVkIGFzICJlbCIuCisKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLTx0dW5lPiAtIEluIHRoZSBkZWZhdWx0IHR1bmluZ3MgaXQgaXMgc2V0IHRvIHRoZQorc2FtZSB2YWx1ZSBhcyBUVU5FX0FSQ0guICBJbiBjdXN0b20sIG9wdGltaXplZCB0dW5pbmdzLCB0aGUgdmFsdWUgc2hvdWxkCitiZSBtb2RpZmllZCB0byBtb3JlIHByZWNpc2VseSBkZXNjcmliZSB0aGUgdHVuaW5nLgorCitNSVBTUEtHU0ZYX0ZQVSAtIFRoZSB2YWx1ZSBpcyBzZXQgdG8gIiIgb3IgIi1uZiIsIHdoZXJlICItbmYiIGluZGljYXRlcyAKK3RoYXQgdGhlIHR1bmUgaXMgdXNpbmcgYSBub24tZmxvYXRpbmcgcG9pbnQgQUJJLgorCitNSVBTUEtHU0ZYX0FCSSAtIFRoaXMgaXMgdXNlZCB0byBzcGVjaWZ5IGFuIGFsdGVybmF0aXZlIEFCSSB3aGVuIHRoZSBwcmV2aW91cwordmFsdWVzIGFyZSBub3QgZW5vdWdoIHRvIGRpc3RyaW5ndWlzaCB0aGUgcGFja2FnZS4gICItbjMyIiBpcyBhZGRlZCB3aGVuCitidWlsZGluZyBmb3IgTjMyIEFCSS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL2FyY2gtbWlwcy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9hcmNoLW1pcHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNjI2ZDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9hcmNoLW1pcHMuaW5jCkBAIC0wLDAgKzEsMTAyIEBACisjIE1JUFMgQXJjaGl0ZWN0dXJlIGRlZmluaXRpb24KKyMgMTIgZGVmaW5lZCBBQklzLCBhbGwgY29tYmluYXRpb25zIG9mOgorIyAqKSBCaWcvTGl0dGxlIEVuZGlhbgorIyAqKSBIYXJkd2FyZS9Tb2Z0d2FyZSBGbG9hdGluZyBQb2ludAorIyAqKSBvMzIsIG4zMiwgbjY0IEFCSQorCitERUZBVUxUVFVORSA/PSAibWlwcyIKKworIyBFbmRpYW5lc3MKK1RVTkVWQUxJRFtiaWdlbmRpYW5dID0gIkVuYWJsZSBiaWctZW5kaWFuIG1vZGUiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYmlnZW5kaWFuIiwgIiAtbWViIiwgIiAtbWVsIiwgZCl9IgorCisjIEFCSSBmbGFncworVFVORVZBTElEW28zMl0gPSAiTUlQUyBvMzIgQUJJIgorVFVORUNPTkZMSUNUU1tvMzJdID0gIm4zMiBuNjQiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibzMyIiwgIiAtbWFiaT0zMiIsICIiLCBkKX0iCisKK1RVTkVWQUxJRFtuMzJdID0gIk1JUFM2NCBuMzIgQUJJIgorVFVORUNPTkZMSUNUU1tuMzJdID0gIm8zMiBuNjQiCitBQklFWFRFTlNJT04gLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm4zMiIsICJuMzIiLCAiIiAsZCl9IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm4zMiIsICIgLW1hYmk9bjMyIiwgIiIsIGQpfSIKKworVFVORVZBTElEW242NF0gPSAiTUlQUzY0IG42NCBBQkkiCitUVU5FQ09ORkxJQ1RTW242NF0gPSAibzMyIG4zMiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuNjQiLCAiIC1tYWJpPTY0IiwgIiIsIGQpfSIKKworIyBGbG9hdGluZyBwb2ludAorVFVORVZBTElEW2ZwdS1oYXJkXSA9ICJVc2UgaGFyZHdhcmUgRlBVIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImZwdS1oYXJkIiwgIiAtbWhhcmQtZmxvYXQiLCAiIC1tc29mdC1mbG9hdCIsIGQpfSIKK1RBUkdFVF9GUFUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZnB1LWhhcmQiLCAiIiwgInNvZnQiLCBkKX0iCisKKyMgUGFja2FnZSBuYW1pbmcKK01JUFNQS0dTRlhfRU5ESUFOID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImJpZ2VuZGlhbiIsICIiLCAiZWwiLCBkKX0iCitNSVBTUEtHU0ZYX0JZVEUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibjY0IiAsICI2NCIsICIiLCBkKX0iCitNSVBTUEtHU0ZYX0JZVEUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm4zMiIgLCAiNjQiLCAiIiwgZCl9IgorTUlQU1BLR1NGWF9GUFUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZnB1LWhhcmQiICwgIiIsICItbmYiLCBkKX0iCitNSVBTUEtHU0ZYX0FCSSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuMzIiLCAiLW4zMiIsICIiLCBkKX0iCisKK1RVTkVfQVJDSCA9ICJtaXBzJHtNSVBTUEtHU0ZYX0JZVEV9JHtNSVBTUEtHU0ZYX0VORElBTn0iCitUVU5FX1BLR0FSQ0ggPSAiJHtNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS0ke0RFRkFVTFRUVU5FfX0ke01JUFNQS0dTRlhfRlBVfSR7TUlQU1BLR1NGWF9BQkl9IgorCisjIEJhc2UgdHVuZXMKK0FWQUlMVFVORVMgKz0gIm1pcHMgbWlwczY0LW4zMiBtaXBzNjQgbWlwc2VsIG1pcHM2NGVsLW4zMiBtaXBzNjRlbCBtaXBzLW5mIG1pcHM2NC1uZi1uMzIgbWlwczY0LW5mIG1pcHNlbC1uZiBtaXBzNjRlbC1uZi1uMzIgbWlwczY0ZWwtbmYiCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwcyA9ICJvMzIgYmlnZW5kaWFuIGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1taXBzID0gImxpYiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMgPSAibWlwcyIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NC1uMzIgPSAibjMyIGJpZ2VuZGlhbiBmcHUtaGFyZCIKK0JBU0VfTElCX3R1bmUtbWlwczY0LW4zMiA9ICJsaWIzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NC1uMzIgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NC1uMzIgPSAibWlwczY0LW4zMiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NCA9ICJuNjQgYmlnZW5kaWFuIGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1taXBzNjQgPSAibGliNjQiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjQgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NCA9ICJtaXBzNjQiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzZWwgPSAibzMyIGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1taXBzZWwgPSAibGliIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwc2VsID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzZWwgPSAibWlwc2VsIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0ZWwtbjMyID0gIm4zMiBmcHUtaGFyZCIKK0JBU0VfTElCX3R1bmUtbWlwczY0ZWwtbjMyID0gImxpYjMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0ZWwtbjMyID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjRlbC1uMzIgPSAibWlwczY0ZWwtbjMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0ZWwgPSAibjY0IGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1taXBzNjRlbCA9ICJsaWI2NCIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NGVsID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjRlbCA9ICJtaXBzNjRlbCIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHMtbmYgPSAibzMyIGJpZ2VuZGlhbiIKK0JBU0VfTElCX3R1bmUtbWlwcy1uZiA9ICJsaWIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzLW5mID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzLW5mID0gIm1pcHMtbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjQtbmYtbjMyID0gIm4zMiBiaWdlbmRpYW4iCitCQVNFX0xJQl90dW5lLW1pcHM2NC1uZi1uMzIgPSAibGliMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjQtbmYtbjMyID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjQtbmYtbjMyID0gIm1pcHM2NC1uZi1uMzIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjQtbmYgPSAibjY0IGJpZ2VuZGlhbiIKK0JBU0VfTElCX3R1bmUtbWlwczY0LW5mID0gImxpYjY0IgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0LW5mID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjQtbmYgPSAibWlwczY0LW5mIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc2VsLW5mID0gIm8zMiIKK0JBU0VfTElCX3R1bmUtbWlwc2VsLW5mID0gImxpYiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHNlbC1uZiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwc2VsLW5mID0gIm1pcHNlbC1uZiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NGVsLW5mLW4zMiA9ICJuMzIiCitCQVNFX0xJQl90dW5lLW1pcHM2NGVsLW5mLW4zMiA9ICJsaWIzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NGVsLW5mLW4zMiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczY0ZWwtbmYtbjMyID0gIm1pcHM2NGVsLW5mLW4zMiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NGVsLW5mID0gIm42NCIKK0JBU0VfTElCX3R1bmUtbWlwczY0ZWwtbmYgPSAibGliNjQiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjRlbC1uZiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczY0ZWwtbmYgPSAibWlwczY0ZWwtbmYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9SRUFETUUgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3ZmI1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL1JFQURNRQpAQCAtMCwwICsxLDE3IEBACisyMDEyLzAzLzMwIC0gTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorICAtIEluaXRpYWwgcmV2aXNpb24KKworVGhlcmUgYXJlIDQgcHJpbWFyeSBQb3dlclBDIEFCSXMuCisjICopIEhhcmQvU29mdCBGbG9hdGluZyBQb2ludAorIyAqKSAzMi1iaXQvNjQtYml0CisKK1RVTkVfQVJDSCBpcyBkZWZpbmVkIGFzIGVpdGhlciAicG93ZXJwYyIgb3IgInBvd2VycGM2NCIgYmFzZWQgb24gdGhlIG0zMiAKK29yIG02NCBmZWF0dXJlLgorCitNYXkgb2YgdGhlIFBvd2VyUEMgcGFja2FnZSBhcmNoaWN0dXJlcyBhcmUgYmFzZWQgb24gbGVnYWN5IExpbnV4IG5hbWVzLgorSG93ZXZlciwgYSBnZW5lcmFsIG5hbWluZyBzY2hlbWUgc2hvdWxkIGJlIHNpbWlsYXIgdG86IHBwY1s2NF1bPGZhbWlseT5dWy1uZl0uCisoTm90ZTogdGhlIGRlZmF1bHQgcGFja2FnZSBhcmNoaXRlY3R1cmVzIGFyZSAicG93ZXJwYyIgYW5kICJwb3dlcnBjNjQiLikKKworVFVORV9QS0dBUkNIIGlzIGRlZmluZWQgYXMgVFVORV9QS0dBUkNIX3R1bmUtJHtERUZBVUxUVFVORX0uICBBbGwgCitQb3dlclBDIHR1bmluZ3MgYXJlIHJlcXVpcmVkIHRvIGRlZmluZSBUVU5FX1BLR0FSQ0hfdHVuZS08dHVuZT4uCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNmNhM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCkBAIC0wLDAgKzEsMzQgQEAKKyMgUG93ZXIgQXJjaGl0ZWN0dXJlIGRlZmluaXRpb24KKyMgRm91ciBkZWZpbmVkIEFCSXMsIGFsbCBjb21iaW5hdGlvbnMgb2Y6CisjICopIEhhcmQvU29mdCBGbG9hdGluZyBQb2ludAorIyAqKSAzMi1iaXQvNjQtYml0CisKK0RFRkFVTFRUVU5FID89ICJwb3dlcnBjIgorCitUVU5FX1BLR0FSQ0ggPSAiJHtUVU5FX1BLR0FSQ0hfdHVuZS0ke0RFRkFVTFRUVU5FfX0iCitBQklFWFRFTlNJT04gPz0gIiIKKworVFVORVZBTElEW20zMl0gPSAiUG93ZXIgRUxGMzIgc3RhbmRhcmQgQUJJIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm0zMiIsICIgLW0zMiIsICIiLCBkKX0iCitUVU5FX0FSQ0ggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm0zMiIsICJwb3dlcnBjIiwgIiIsIGQpfSIKKworVFVORVZBTElEW2ZwdS1oYXJkXSA9ICJVc2UgaGFyZHdhcmUgRlBVLiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJmcHUtaGFyZCIsICIgLW1oYXJkLWZsb2F0IiwgIiIsIGQpfSIKKworVFVORVZBTElEW2ZwdS1zb2Z0XSA9ICJVc2Ugc29mdHdhcmUgRlBVLiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJmcHUtc29mdCIsICIgLW1zb2Z0LWZsb2F0IiwgIiIsIGQpfSIKK1RBUkdFVF9GUFUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImZwdS1zb2Z0IiwgInNvZnQiLCAiIiwgZCl9IgorCitUVU5FVkFMSURbYWx0aXZlY10gPSAiQWx0aXZlYyIKKworIyBCYXNpYyB0dW5lIGRlZmluaXRpb25zCitBVkFJTFRVTkVTICs9ICJwb3dlcnBjIHBvd2VycGMtbmYiIAorVFVORV9GRUFUVVJFU190dW5lLXBvd2VycGMtbmYgPSAibTMyIGZwdS1zb2Z0IgorQkFTRV9MSUJfdHVuZS1wb3dlcnBjLW5mID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXBvd2VycGMtbmYgPSAicG93ZXJwYy1uZiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjLW5mID0gInBvd2VycGMtbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1wb3dlcnBjID0gIm0zMiBmcHUtaGFyZCIKK0JBU0VfTElCX3R1bmUtcG93ZXJwYyA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1wb3dlcnBjID0gInBvd2VycGMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwYyA9ICJwb3dlcnBjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NzZkZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGM2NC5pbmMKQEAgLTAsMCArMSwxNCBAQAorREVGQVVMVFRVTkUgPz0gInBvd2VycGM2NCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMKKworVFVORVZBTElEW202NF0gPSAiUG93ZXIgRUxGNjQgc3RhbmRhcmQgQUJJIgorVFVORUNPTkZMSUNUU1ttNjRdID0gIm0zMiBuZiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtNjQiLCAiIC1tNjQiLCAiIiwgZCl9IgorVFVORV9BUkNIIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsIFsgIm02NCIgXSwgInBvd2VycGM2NCIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInBvd2VycGM2NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wb3dlcnBjNjQgPz0gIm02NCBmcHUtaGFyZCIKK0JBU0VfTElCX3R1bmUtcG93ZXJwYzY0ID0gImxpYjY0IgorVFVORV9QS0dBUkNIX3R1bmUtcG93ZXJwYzY0ID0gInBvd2VycGM2NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjNjQgPSAicG93ZXJwYzY0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YzBiMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKQEAgLTAsMCArMSwyOSBAQAorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA/PSAieHNlcnZlci14b3JnIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZWdsID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2wgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMSA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMyID89ICJtZXNhIgorCitYU0VSVkVSID89ICJ4c2VydmVyLXhvcmcgXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnbWVzYS1kcml2ZXItc3dyYXN0JywgJycsIGQpfSBcCisgICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgIHhmODYtaW5wdXQtbW91c2UgXAorICAgICAgICAgICAgeGY4Ni12aWRlby1mYmRldiBcCisgICAgICAgICAgICB4Zjg2LWlucHV0LWtleWJvYXJkIgorCitNQUNISU5FX0ZFQVRVUkVTID0gImFsc2EgYmx1ZXRvb3RoIHVzYmdhZGdldCBzY3JlZW4iCisKK01BQ0hJTkVPVkVSUklERVMgPS4gInFlbXVhbGw6IgorCitJTUFHRV9GU1RZUEVTICs9ICJ0YXIuYnoyIGV4dDQiCisKKyMgRG9uJ3QgaW5jbHVkZSBrZXJuZWxzIGluIHN0YW5kYXJkIGltYWdlcworUkRFUEVORFNfa2VybmVsLWJhc2UgPSAiIgorCisjIFVzZSBhIGNvbW1vbiBrZXJuZWwgcmVjaXBlIGZvciBhbGwgUUVNVSBtYWNoaW5lcworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJsaW51eC15b2N0byIKKworRVhUUkFfSU1BR0VERVBFTkRTICs9ICJxZW11LW5hdGl2ZSBxZW11LWhlbHBlci1uYXRpdmUiCisKKyMgUHJvdmlkZSB0aGUgbmZzIHNlcnZlciBrZXJuZWwgbW9kdWxlIGZvciBhbGwgcWVtdSBpbWFnZXMKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcG4tbGludXgteW9jdG8gPSAiIGZlYXR1cmVzL25mc2QvbmZzZC1lbmFibGUuc2NjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NoL1JFQURNRSBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9zaC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM1MWFjZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9zaC9SRUFETUUKQEAgLTAsMCArMSwxMSBAQAorMjAxMi8wMy8zMCAtIE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKyAtIEluaXRpYWwgUmV2aXNpb24KKworQm90aCBiaWcgZW5kaWFuIGFuZCBsaXR0bGUgZW5kaWFuIGFyZSBkZWZpbmVkIGZvciBTSC4KKworRXhwZXJpbWVudGFsIC0tIFNIIHR1bmluZ3MgaGF2ZSBub3QgYmVlbiB2YWxpZGF0ZWQuCisKK1RoZSBUVU5FX0FSQ0ggaXMgZGVmaW5lZCBhcyAke1RVTkVfQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9fS4KKworVGhlIFRVTkVfUEtHQVJDSCBpcyBkZWZpbmQgYXMgJHtUVU5FX1BLR0FSQ0hfdHVuZS0ke0RFRkFVTFRUVU5FfX0uCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9zaC9hcmNoLXNoLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9zaC9hcmNoLXNoLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGQ0Y2FjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NoL2FyY2gtc2guaW5jCkBAIC0wLDAgKzEsOSBAQAorIyBTSCBBcmNoaXRlY3R1cmUgZGVmaW5pdGlvbgorCitERUZBVUxUVFVORSA/PSAic2giCisKK1RVTkVfQVJDSCA9ICIke1RVTkVfQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9fSIKK1RVTkVfUEtHQVJDSCA9ICIke1RVTkVfUEtHQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9fSIKKworVFVORVZBTElEW2JpZ2VuZGlhbl0gPSAiRW5hYmxlZCBiaWctZW5kaWFuIG1vZGUuIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImJpZ2VuZGlhbiIsICIgLW1iIiwgIiAtbWwiLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvc29jLWZhbWlseS5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvc29jLWZhbWlseS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmMDg5OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9zb2MtZmFtaWx5LmluYwpAQCAtMCwwICsxLDMgQEAKKyMgQWRkIFNPQ19GQU1JTFkgdG8gbWFjaGluZSBvdmVycmlkZXMgc28gd2UgZ2V0IGFjY2VzcyB0byBlLmcuICdvbWFwMycgYW5kICd0aTMzNXgnCitTT0NfRkFNSUxZID8/PSAiIgorTUFDSElORU9WRVJSSURFUyA9LiAiJHtAWycnLCAnJHtTT0NfRkFNSUxZfTonXVsnJHtTT0NfRkFNSUxZfScgIT0gJyddfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTExMzZqZi1zLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTExMzZqZi1zLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTEzMWI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtMTEzNmpmLXMuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12NiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12Ni5pbmMKKworVFVORVZBTElEW2FybTExMzZqZnNdID0gIkVuYWJsZSBhcm0xMTM2amZzIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybTExMzZqZnMiLCAiIC1tdHVuZT1hcm0xMTM2amYtcyIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImFybTExMzZqZnMiCitBUk1QS0dBUkNIX3R1bmUtYXJtMTEzNmpmcyA9ICJhcm0xMTM2amZzIgorVFVORV9GRUFUVVJFU190dW5lLWFybTExMzZqZnMgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ9IGFybTExMzZqZnMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtMTEzNmpmcyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12Nn0gYXJtMTEzNmpmcy12ZnAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjB0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTkyMHQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMmVhZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjB0LmluYwpAQCAtMCwwICsxLDExIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjR0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYworCitUVU5FVkFMSURbYXJtOTIwdF0gPSAiRW5hYmxlIGFybTkyMHQgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtOTIwdCIsICIgLW10dW5lPWFybTkyMHQiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJhcm05MjB0IgorQVJNUEtHQVJDSF90dW5lLWFybTkyMHQgPSAiYXJtOTIwdCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm05MjB0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY0dH0gYXJtOTIwdCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm05MjB0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0dH0gYXJtOTIwdCBhcm05MjB0dCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTkyNmVqcy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjZlanMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNWU0ZTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjZlanMuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12NXRlIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LWRzcC5pbmMKKworVFVORVZBTElEW2FybTkyNmVqc10gPSAiRW5hYmxlIGFybTkyNmVqcyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm05MjZlanMiLCAiIC1tdHVuZT1hcm05MjZlai1zIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAiYXJtOTI2ZWpzIgorQVJNUEtHQVJDSF90dW5lLWFybTkyNmVqcyA9ICJhcm05MjZlanMiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtOTI2ZWpzID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dGV9IGFybTkyNmVqcyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm05MjZlanMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZX0gYXJtOTI2ZWpzdGUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05dGRtaS5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05dGRtaS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVlNTdjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTl0ZG1pLmluYwpAQCAtMCwwICsxLDExIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjR0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYworCitUVU5FVkFMSURbYXJtOXRkbWldID0gIkVuYWJsZSBhcm05dGRtaSBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm05dGRtaSIsICIgLW10dW5lPWFybTl0ZG1pIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAiYXJtOXRkbWkiCitBUk1QS0dBUkNIX3R1bmUtYXJtOXRkbWkgPSAiYXJtOXRkbWkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtOXRkbWkgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR0fSBhcm05dGRtaSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm05dGRtaSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NHR9IGFybTl0ZG1pdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWF0b20uaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXRvbS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUxYmI3NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWF0b20uaW5jCkBAIC0wLDAgKzEsMiBAQAorIyBBdG9tIHR1bmluZ3MgYXJlIHRoZSBzYW1lIGFzIGNvcmUyIGZvciBub3cuLi4KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWMzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWMzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWZjMjhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYzMuaW5jCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L2FyY2gteDg2LmluYworCitUVU5FVkFMSURbYzNdID0gIlZJQSBDeXJpeCBJSUkgb3IgVklBIEMzIHNwZWNpZmljIG9wdGltaXphdGlvbnMiCitUVU5FQ09ORkxJQ1RTW2MzXSA9ICJtNjQgbXgzMiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjMyIsICIgLW1hcmNoPWMzIC1tdHVuZT1jMyIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImMzIgorVFVORV9GRUFUVVJFU190dW5lLWMzID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXg4Nn0gYzMiCitCQVNFX0xJQlNfdHVuZS1jMyA9ICIke0JBU0VfTElCX3R1bmUteDg2fSIKKyMgVGhlIGZvbGxvd2luZyBzaG91bGQgbGlrZWx5IGJlIHNvbWV0aGluZyBvdGhlciB0aGVuIGk1ODYuLi4KK1RVTkVfUEtHQVJDSF90dW5lLWMzID0gImk1ODYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYzMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUteDg2fSBpMzg2IGk0ODYgaTU4NiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTRjYjcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZTIuaW5jCkBAIC0wLDAgKzEsMzggQEAKKyMgU2V0dGluZ3MgZm9yIHRoZSBHQ0MoMSkgY3B1LXR5cGUgImNvcmUyIjoKKyMKKyMgICAgICBJbnRlbCBDb3JlMiBDUFUgd2l0aCA2NC1iaXQgZXh0ZW5zaW9ucywgTU1YLCBTU0UsIFNTRTIsIFNTRTMgYW5kIFNTU0UzCisjICAgICAgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisjCisjIFRoaXMgdHVuZSBpcyByZWNvbW1lbmRlZCBmb3IgdGhlIEludGVsIENvcmUgMiBDUFUgZmFtaWx5LCBpbmNsdWRpbmcgQ29ucm9lLAorIyBNZXJvbSBhbmQgYmV5b25kLCBhcyB3ZWxsIGFzIHRoZSBmaXJzdCBBdG9tIENQVXMsIERpYW1vbmR2aWxsZSwgYW5kIGJleW9uZC4KKyMKK0RFRkFVTFRUVU5FID89ICJjb3JlMi0zMiIKKworIyBTZXQgeDg2IHRhcmdldCBhcmNoIHRvIGk2ODYsIHNvIHRoYXQgZ2xpYmMgZW5hYmxlcyBTU0Ugb3B0aW1pc2VkIG1lbWNweSwgZXRjLgorWDg2QVJDSDMyID89ICJpNjg2IgorCisjIEluY2x1ZGUgdGhlIHByZXZpb3VzIHR1bmUgdG8gcHVsbCBpbiBQQUNLQUdFX0VYVFJBX0FSQ0hTCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni5pbmMKKworIyBFeHRyYSB0dW5lIGZlYXR1cmVzCitUVU5FVkFMSURbY29yZTJdID0gIkVuYWJsZSBjb3JlMiBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3JlMiIsICIgLW1hcmNoPWNvcmUyIC1tdHVuZT1jb3JlMiAtbXNzZTMgLW1mcG1hdGg9c3NlIiwgIiIsIGQpfSIKKworIyBFeHRyYSB0dW5lIHNlbGVjdGlvbnMKK0FWQUlMVFVORVMgKz0gImNvcmUyLTMyIgorVFVORV9GRUFUVVJFU190dW5lLWNvcmUyLTMyID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXg4Nn0gY29yZTIiCitCQVNFX0xJQl90dW5lLWNvcmUyLTMyID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLWNvcmUyLTMyID0gImNvcmUyLTMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmUyLTMyID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWk1ODZ9IGNvcmUyLTMyIgorCitBVkFJTFRVTkVTICs9ICJjb3JlMi02NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3JlMi02NCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS14ODYtNjR9IGNvcmUyIgorQkFTRV9MSUJfdHVuZS1jb3JlMi02NCA9ICJsaWI2NCIKK1RVTkVfUEtHQVJDSF90dW5lLWNvcmUyLTY0ID0gImNvcmUyLTY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmUyLTY0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXg4Ni02NH0gY29yZTItNjQiCisKK0FWQUlMVFVORVMgKz0gImNvcmUyLTY0LXgzMiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3JlMi02NC14MzIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2LTY0LXgzMn0gY29yZTIiCitCQVNFX0xJQl90dW5lLWNvcmUyLTY0LXgzMiA9ICJsaWJ4MzIiCitUVU5FX1BLR0FSQ0hfdHVuZS1jb3JlMi02NC14MzIgPSAiY29yZTItNjQteDMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmUyLTY0LXgzMiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS14ODYtNjQteDMyfSBjb3JlMi02NC14MzIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlaTcuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZWk3LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmNmOTMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZWk3LmluYwpAQCAtMCwwICsxLDM1IEBACisjIFNldHRpbmdzIGZvciB0aGUgR0NDKDEpIGNwdS10eXBlICJjb3JlaTciOgorIworIyAgICAgSW50ZWwgQ29yZSBpNyBDUFUgd2l0aCA2NC1iaXQgZXh0ZW5zaW9ucywgTU1YLCBTU0UsIFNTRTIsIFNTRTMsIFNTU0UzLCBTU0U0LjEKKyMgICAgIGFuZCBTU0U0LjIgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisjCisjIFRoaXMgdHVuZSBpcyByZWNvbW1lbmRlZCBmb3IgSW50ZWwgTmVoYWxlbSBhbmQgU2lsdmVybW9udCAoZS5nLiBCYXkgVHJhaWwpIENQVXMKKyMgKGFuZCBiZXlvbmQpLgorIworREVGQVVMVFRVTkUgPz0gImNvcmVpNy02NCIKKworIyBQdWxsIGluIHRoZSBwcmV2aW91cyB0dW5lIGluIHRvIHB1bGwgaW4gUEFDS0FHRV9FWFRSQV9BUkNIUworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYworCisjIEV4dHJhIHR1bmUgZmVhdHVyZXMKK1RVTkVWQUxJRFtjb3JlaTddID0gIkVuYWJsZSBjb3JlaTcgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29yZWk3IiwgIiAtbWFyY2g9Y29yZWk3IC1tdHVuZT1jb3JlaTcgLW1mcG1hdGg9c3NlIC1tc3NlNC4yIiwgIiIsIGQpfSIKKworIyBFeHRyYSB0dW5lIHNlbGVjdGlvbnMKK0FWQUlMVFVORVMgKz0gImNvcmVpNy0zMiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3JlaTctMzIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2fSBjb3JlaTciCitCQVNFX0xJQl90dW5lLWNvcmVpNy0zMiA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1jb3JlaTctMzIgPSAiY29yZWk3LTMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmVpNy0zMiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3JlMn0gY29yZWk3LTMyIgorCitBVkFJTFRVTkVTICs9ICJjb3JlaTctNjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29yZWk3LTY0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXg4Ni02NH0gY29yZWk3IgorQkFTRV9MSUJfdHVuZS1jb3JlaTctNjQgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1jb3JlaTctNjQgPSAiY29yZWk3LTY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmVpNy02NCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3JlMi02NH0gY29yZWk3LTY0IgorCitBVkFJTFRVTkVTICs9ICJjb3JlaTctNjQteDMyIgorVFVORV9GRUFUVVJFU190dW5lLWNvcmVpNy02NC14MzIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2LTY0LXgzMn0gY29yZWk3IgorQkFTRV9MSUJfdHVuZS1jb3JlaTctNjQteDMyID0gImxpYngzMiIKK1RVTkVfUEtHQVJDSF90dW5lLWNvcmVpNy02NC14MzIgPSAiY29yZWk3LTY0LXgzMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3JlaTctNjQteDMyID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmUyLTY0LXgzMn0gY29yZWk3LTY0LXgzMiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGExNS5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhMTUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1Mjk3NzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhMTUuaW5jCkBAIC0wLDAgKzEsMzYgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12N2EtbmVvbiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFtjb3J0ZXhhMTVdID0gIkVuYWJsZSBDb3J0ZXgtQTE1IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcnRleGExNSIsICIgLW10dW5lPWNvcnRleC1hMTUiLCAiIiwgZCl9IgorCisjIExpdHRsZSBFbmRpYW4gYmFzZSBjb25maWdzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhMTUgY29ydGV4YTE1dCBjb3J0ZXhhMTUtbmVvbiBjb3J0ZXhhMTV0LW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE1ID0gImNvcnRleGExNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTV0ID0gImNvcnRleGExNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTUtbmVvbiA9ICJjb3J0ZXhhMTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE1dC1uZW9uID0gImNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTUgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhMTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE1dCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhMTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE1LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTV0LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhMTUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE1ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YX0gY29ydGV4YTE1LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTV0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGNvcnRleGExNS12ZnAgY29ydGV4YTE1dDItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExNS1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhMTUtdmZwIGNvcnRleGExNS12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTV0LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhMTUtdmZwIGNvcnRleGExNS12ZnAtbmVvbiBjb3J0ZXhhMTV0Mi12ZnAgY29ydGV4YTE1dDItdmZwLW5lb24iCisKKyMgVkZQIFR1bmVzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhMTVoZiBjb3J0ZXhhMTV0aGYgY29ydGV4YTE1aGYtbmVvbiBjb3J0ZXhhMTV0aGYtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTVoZiA9ICJjb3J0ZXhhMTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE1dGhmID0gImNvcnRleGExNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTVoZi1uZW9uID0gImNvcnRleGExNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTV0aGYtbmVvbiA9ICJjb3J0ZXhhMTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE1aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhMTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE1dGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTVoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhMTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE1dGhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhMTUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE1aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGExNWhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTV0aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhMTVoZi12ZnAgY29ydGV4YTE1dDJoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE1aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhMTVoZi12ZnAgY29ydGV4YTE1aGYtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE1dGhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGExNWhmLXZmcCBjb3J0ZXhhMTVoZi12ZnAtbmVvbiBjb3J0ZXhhMTV0MmhmLXZmcCBjb3J0ZXhhMTV0MmhmLXZmcC1uZW9uIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTE3LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGExNy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZjNzEyNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGExNy5pbmMKQEAgLTAsMCArMSwzNiBAQAorREVGQVVMVFRVTkUgPz0gImFybXY3YS1uZW9uIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2NvcnRleGExN10gPSAiRW5hYmxlIENvcnRleC1BMTcgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4YTE3IiwgIiAtbXR1bmU9Y29ydGV4LWExNyIsICIiLCBkKX0iCisKKyMgTGl0dGxlIEVuZGlhbiBiYXNlIGNvbmZpZ3MKK0FWQUlMVFVORVMgKz0gImNvcnRleGExNyBjb3J0ZXhhMTd0IGNvcnRleGExNy1uZW9uIGNvcnRleGExN3QtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTcgPSAiY29ydGV4YTE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExN3QgPSAiY29ydGV4YTE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExNy1uZW9uID0gImNvcnRleGExNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTd0LW5lb24gPSAiY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExNyA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNvcnRleGExNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTd0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IGNvcnRleGExNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTctbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExN3QtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGExNyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTcgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhMTctdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExN3QgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTE3LXZmcCBjb3J0ZXhhMTd0Mi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE3LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGExNy12ZnAgY29ydGV4YTE3LXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExN3QtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGExNy12ZnAgY29ydGV4YTE3LXZmcC1uZW9uIGNvcnRleGExN3QyLXZmcCBjb3J0ZXhhMTd0Mi12ZnAtbmVvbiIKKworIyBWRlAgVHVuZXMKK0FWQUlMVFVORVMgKz0gImNvcnRleGExN2hmIGNvcnRleGExN3RoZiBjb3J0ZXhhMTdoZi1uZW9uIGNvcnRleGExN3RoZi1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExN2hmID0gImNvcnRleGExNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTd0aGYgPSAiY29ydGV4YTE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExN2hmLW5lb24gPSAiY29ydGV4YTE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExN3RoZi1uZW9uID0gImNvcnRleGExNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTdoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGExNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTd0aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExN2hmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGExNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTd0aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGExNyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTdoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZn0gY29ydGV4YTE3aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExN3RoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGExN2hmLXZmcCBjb3J0ZXhhMTd0MmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTdoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGExN2hmLXZmcCBjb3J0ZXhhMTdoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTd0aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTE3aGYtdmZwIGNvcnRleGExN2hmLXZmcC1uZW9uIGNvcnRleGExN3QyaGYtdmZwIGNvcnRleGExN3QyaGYtdmZwLW5lb24iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhNS5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhNS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM5ZTY1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE1LmluYwpAQCAtMCwwICsxLDM2IEBACitERUZBVUxUVFVORSA/PSAiYXJtdjdhLW5lb24iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4YTVdID0gIkVuYWJsZSBDb3J0ZXgtQTUgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4YTUiLCAiIC1tdHVuZT1jb3J0ZXgtYTUiLCAiIiwgZCl9IgorCisjIExpdHRsZSBFbmRpYW4gYmFzZSBjb25maWdzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhNSBjb3J0ZXhhNXQgY29ydGV4YTUtbmVvbiBjb3J0ZXhhNXQtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNSA9ICJjb3J0ZXhhNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNXQgPSAiY29ydGV4YTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTUtbmVvbiA9ICJjb3J0ZXhhNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNXQtbmVvbiA9ICJjb3J0ZXhhNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNSA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNvcnRleGE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE1dCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNS1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNXQtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGE1IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YX0gY29ydGV4YTUtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhNS12ZnAgY29ydGV4YTV0Mi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTUtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTUtdmZwIGNvcnRleGE1LXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1dC1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTUtdmZwIGNvcnRleGE1LXZmcC1uZW9uIGNvcnRleGE1dDItdmZwIGNvcnRleGE1dDItdmZwLW5lb24iCisKKyMgVkZQIFR1bmVzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhNWhmIGNvcnRleGE1dGhmIGNvcnRleGE1aGYtbmVvbiBjb3J0ZXhhNXRoZi1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE1aGYgPSAiY29ydGV4YTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTV0aGYgPSAiY29ydGV4YTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTVoZi1uZW9uID0gImNvcnRleGE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE1dGhmLW5lb24gPSAiY29ydGV4YTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTVoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE1dGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE1aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTV0aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGE1IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE1aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1dGhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTVoZi12ZnAgY29ydGV4YTV0MmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhNWhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTVoZi12ZnAgY29ydGV4YTVoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhNXRoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhNWhmLXZmcCBjb3J0ZXhhNWhmLXZmcC1uZW9uIGNvcnRleGE1dDJoZi12ZnAgY29ydGV4YTV0MmhmLXZmcC1uZW9uIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTcuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMDY5MTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhNy5pbmMKQEAgLTAsMCArMSw0MiBAQAorREVGQVVMVFRVTkUgPz0gImFybXY3YS1uZW9uIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2NvcnRleGE3XSA9ICJFbmFibGUgQ29ydGV4LUE3IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcnRleGE3IiwgIiAtbXR1bmU9Y29ydGV4LWE3IiwgIiIsIGQpfSIKKworIyBMaXR0bGUgRW5kaWFuIGJhc2UgY29uZmlncworQVZBSUxUVU5FUyArPSAiY29ydGV4YTcgY29ydGV4YTd0IGNvcnRleGE3LW5lb24gY29ydGV4YTd0LW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTcgPSAiY29ydGV4YTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTd0ID0gImNvcnRleGE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3LW5lb24gPSAiY29ydGV4YTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTd0LW5lb24gPSAiY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTcgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhN3QgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTctbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTd0LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhNyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhNyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F9IGNvcnRleGE3LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN3QgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTctdmZwIGNvcnRleGE3dDItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGE3LXZmcCBjb3J0ZXhhNy12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN3QtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGE3LXZmcCBjb3J0ZXhhNy12ZnAtbmVvbiBjb3J0ZXhhN3QyLXZmcCBjb3J0ZXhhN3QyLXZmcC1uZW9uIgorCisjIFZGUCBUdW5lcworQVZBSUxUVU5FUyArPSAiY29ydGV4YTdoZiBjb3J0ZXhhN3RoZiBjb3J0ZXhhN2hmLW5lb24gY29ydGV4YTd0aGYtbmVvbiBjb3J0ZXhhN2hmLW5lb24tdmZwdjQgY29ydGV4YTd0aGYtbmVvbi12ZnB2NCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhN2hmID0gImNvcnRleGE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3dGhmID0gImNvcnRleGE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3aGYtbmVvbiA9ICJjb3J0ZXhhNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhN3RoZi1uZW9uID0gImNvcnRleGE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3aGYtbmVvbi12ZnB2NCA9ICJjb3J0ZXhhNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhN3RoZi1uZW9uLXZmcHY0ID0gImNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhN3RoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhN2hmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3dGhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhN2hmLW5lb24tdmZwdjQgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb24tdmZwdjR9IGNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3dGhmLW5lb24tdmZwdjQgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9uLXZmcHY0fSBjb3J0ZXhhNyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN2hmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhN2hmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN3RoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGE3aGYtdmZwIGNvcnRleGE3dDJoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTdoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGE3aGYtdmZwIGNvcnRleGE3aGYtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTd0aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTdoZi12ZnAgY29ydGV4YTdoZi12ZnAtbmVvbiBjb3J0ZXhhN3QyaGYtdmZwIGNvcnRleGE3dDJoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN2hmLW5lb24tdmZwdjQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbi12ZnB2NH0gY29ydGV4YTdoZi12ZnAgY29ydGV4YTdoZi12ZnAtbmVvbiBjb3J0ZXhhN2hmLXZmcC12ZnB2NC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3dGhmLW5lb24tdmZwdjQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb24tdmZwdjR9IGNvcnRleGE3aGYtdmZwIGNvcnRleGE3aGYtdmZwLW5lb24gY29ydGV4YTd0MmhmLXZmcCBjb3J0ZXhhN3QyaGYtdmZwLW5lb24gY29ydGV4YTdoZi12ZnAtdmZwdjQtbmVvbiBjb3J0ZXhhN3QyaGYtdmZwLXZmcHY0LW5lb24iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhOC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhOC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcxNTM3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE4LmluYwpAQCAtMCwwICsxLDM2IEBACitERUZBVUxUVFVORSA/PSAiYXJtdjdhLW5lb24iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4YThdID0gIkVuYWJsZSBDb3J0ZXgtQTggc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4YTgiLCAiIC1tdHVuZT1jb3J0ZXgtYTgiLCAiIiwgZCl9IgorCisjIExpdHRsZSBFbmRpYW4gYmFzZSBjb25maWdzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhOCBjb3J0ZXhhOHQgY29ydGV4YTgtbmVvbiBjb3J0ZXhhOHQtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOCA9ICJjb3J0ZXhhOCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOHQgPSAiY29ydGV4YTgiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTgtbmVvbiA9ICJjb3J0ZXhhOCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOHQtbmVvbiA9ICJjb3J0ZXhhOCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNvcnRleGE4IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE4dCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhOCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOC1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhOCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOHQtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGE4IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YX0gY29ydGV4YTgtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhOC12ZnAgY29ydGV4YTh0Mi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTgtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTgtdmZwIGNvcnRleGE4LXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4dC1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTgtdmZwIGNvcnRleGE4LXZmcC1uZW9uIGNvcnRleGE4dDItdmZwIGNvcnRleGE4dDItdmZwLW5lb24iCisKKyMgVkZQIFR1bmVzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhOGhmIGNvcnRleGE4dGhmIGNvcnRleGE4aGYtbmVvbiBjb3J0ZXhhOHRoZi1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE4aGYgPSAiY29ydGV4YTgiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTh0aGYgPSAiY29ydGV4YTgiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YThoZi1uZW9uID0gImNvcnRleGE4IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE4dGhmLW5lb24gPSAiY29ydGV4YTgiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YThoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE4IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE4dGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGE4IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE4aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTgiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTh0aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGE4IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE4aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4dGhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZn0gY29ydGV4YThoZi12ZnAgY29ydGV4YTh0MmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOGhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YThoZi12ZnAgY29ydGV4YThoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOHRoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhOGhmLXZmcCBjb3J0ZXhhOGhmLXZmcC1uZW9uIGNvcnRleGE4dDJoZi12ZnAgY29ydGV4YTh0MmhmLXZmcC1uZW9uIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTkuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMDM5NGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhOS5pbmMKQEAgLTAsMCArMSwzNiBAQAorREVGQVVMVFRVTkUgPz0gImFybXY3YS1uZW9uIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2NvcnRleGE5XSA9ICJFbmFibGUgQ29ydGV4LUE5IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcnRleGE5IiwgIiAtbXR1bmU9Y29ydGV4LWE5IiwgIiIsIGQpfSIKKworIyBMaXR0bGUgRW5kaWFuIGJhc2UgY29uZmlncworQVZBSUxUVU5FUyArPSAiY29ydGV4YTkgY29ydGV4YTl0IGNvcnRleGE5LW5lb24gY29ydGV4YTl0LW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTkgPSAiY29ydGV4YTkiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTl0ID0gImNvcnRleGE5IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE5LW5lb24gPSAiY29ydGV4YTkiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTl0LW5lb24gPSAiY29ydGV4YTkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTkgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhOSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOXQgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTktbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTl0LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhOSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F9IGNvcnRleGE5LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOXQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTktdmZwIGNvcnRleGE5dDItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE5LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGE5LXZmcCBjb3J0ZXhhOS12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOXQtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGE5LXZmcCBjb3J0ZXhhOS12ZnAtbmVvbiBjb3J0ZXhhOXQyLXZmcCBjb3J0ZXhhOXQyLXZmcC1uZW9uIgorCisjIFZGUCBUdW5lcworQVZBSUxUVU5FUyArPSAiY29ydGV4YTloZiBjb3J0ZXhhOXRoZiBjb3J0ZXhhOWhmLW5lb24gY29ydGV4YTl0aGYtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOWhmID0gImNvcnRleGE5IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE5dGhmID0gImNvcnRleGE5IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE5aGYtbmVvbiA9ICJjb3J0ZXhhOSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOXRoZi1uZW9uID0gImNvcnRleGE5IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE5aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhOSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOXRoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhOSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOWhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGE5IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE5dGhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhOSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOWhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhOWhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOXRoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGE5aGYtdmZwIGNvcnRleGE5dDJoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTloZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGE5aGYtdmZwIGNvcnRleGE5aGYtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTl0aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTloZi12ZnAgY29ydGV4YTloZi12ZnAtbmVvbiBjb3J0ZXhhOXQyaGYtdmZwIGNvcnRleGE5dDJoZi12ZnAtbmVvbiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleG0xLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleG0xLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjY1Mjc5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4bTEuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12N2EiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4bTFdID0gIkVuYWJsZSBDb3J0ZXgtTTEgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4bTEiLCAiIC1tdHVuZT1jb3J0ZXgtbTEiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhtMSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhtMSA9ICJjb3J0ZXhtMSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhtMSA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNvcnRleG0xIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleG0xID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGNvcnRleG0xLXZmcCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleG0zLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleG0zLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmM0YzBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4bTMuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK0RFRkFVTFRUVU5FID89ICJjb3J0ZXhtMyIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFtjb3J0ZXhtM10gPSAiRW5hYmxlIENvcnRleC1NMyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3J0ZXhtMyIsICIgLW10dW5lPWNvcnRleC1tMyIsICIiLCBkKX0iCisKK1RVTkVWQUxJRFthcm12N21dID0gIkVuYWJsZSBDb3J0ZXgtTTMgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjdtIiwgIiAtbWFyY2g9YXJtdjctbSIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImNvcnRleG0zIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleG0zID0gImFybXY3bSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhtMyA9ICJhcm12N20gdmZwIGNvcnRleG0zIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleG0zID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGFybXY3bS12ZnAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhyNC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhyNC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlNjQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleHI0LmluYwpAQCAtMCwwICsxLDE0IEBACitERUZBVUxUVFVORSA/PSAiY29ydGV4cjQiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4cjRdID0gIkVuYWJsZSBDb3J0ZXgtUjQgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4cjQiLCAiIC1tdHVuZT1jb3J0ZXgtcjQiLCAiIiwgZCl9IgorCitUVU5FVkFMSURbYXJtdjdyXSA9ICJFbmFibGUgQ29ydGV4LVI0IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY3ciIsICIgLW1hcmNoPWFybXY3LXIiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhyNCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhyNCA9ICJhcm12N3IiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4cjQgPSAiYXJtdjdyIHZmcCBjb3J0ZXhyNCBhcm0gdGh1bWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4cjQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gYXJtdjdyLXZmcCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWVwOTMxMi5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1lcDkzMTIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOWI0MzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1lcDkzMTIuaW5jCkBAIC0wLDAgKzEsMTIgQEAKK0RFRkFVTFRUVU5FID89ICJlcDkzMTIiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjQuaW5jCisKK1RVTkVWQUxJRFtlcDkzMTJdID0gIkVuYWJsZSBJbnRlbCBQWEEyN3ggc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZXA5MzEyIiwgIiAtbWFyY2g9ZXA5MzEyIC1tdHVuZT1lcDkzMTIiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJlcDkzMTIiCitBUk1QS0dBUkNIX3R1bmUtZXA5MzEyID0gImVwOTMxMiIKKyMgdGhpcyB0dW5lIGRvZXMgbm90IGluY2x1ZGUgVFVORV9GRUFUVVJFU190dW5lLWFybXY0dCwgc28gdGhlcmUgaXMgbm8gYXJtdjQgVFVORV9GRUFUVVJFUyA9PiBubyAndCcgaW4gQVJNUEtHU0ZYX1RIVU1CCitUVU5FX0ZFQVRVUkVTX3R1bmUtZXA5MzEyID0gInRodW1iIGVwOTMxMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1lcDkzMTIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR0fSBlcDkzMTIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LW5scC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LW5scC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMwNjAyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWk1ODYtbmxwLmluYwpAQCAtMCwwICsxLDE5IEBACisjIFNldHRpbmdzIGZvciB0aGUgR0NDKDEpIGNwdS10eXBlICJxdWFyayI6CisjCisjCisjCitERUZBVUxUVFVORSA/PSAiaTU4Ni1ubHAtMzIiCisKKyMgSW5jbHVkZSB0aGUgcHJldmlvdXMgdHVuZSB0byBwdWxsIGluIFBBQ0tBR0VfRVhUUkFfQVJDSFMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L2FyY2gteDg2LmluYworCisjIHg4NiB3aXRoIG5vIGxvY2sgcHJlZml4CitUVU5FVkFMSURbaTU4Ni1ubHBdID0gIklBMzIgd2l0aCBMb2NrIFByZWZpeCBvbWl0dGVkIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImk1ODYtbmxwIiwgIiAtbWFyY2g9aTU4NiAtV2EsLW1vbWl0LWxvY2stcHJlZml4PXllcyIsICIiLCBkKX0iCisKKyMgUXVhcmsgdHVuZSBmZWF0dXJlCitBVkFJTFRVTkVTID0gImk1ODYtbmxwLTMyIgorVFVORV9GRUFUVVJFU190dW5lLWk1ODYtbmxwLTMyID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXg4Nn0gaTU4Ni1ubHAiCitCQVNFX0xJQl90dW5lLWk1ODYtbmxwLTMyID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLWk1ODYtbmxwLTMyID0gImk1ODYtbmxwLTMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWk1ODYtbmxwLTMyID0gImk1ODYtbmxwLTMyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmJiM2M3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni5pbmMKQEAgLTAsMCArMSwxNCBAQAorREVGQVVMVFRVTkUgPz0gImk1ODYiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L2FyY2gteDg2LmluYworCisjIEV4dHJhIHR1bmUgZmVhdHVyZXMKK1RVTkVWQUxJRFtpNTg2XSA9ICJFbmFibGUgaTU4NiBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJpNTg2IiwgIiAtbWFyY2g9aTU4NiIsICIiLCBkKX0iCisKKyMgRXh0cmEgdHVuZSBzZWxlY3Rpb25zCitBVkFJTFRVTkVTICs9ICJpNTg2IgorVFVORV9GRUFUVVJFU190dW5lLWk1ODYgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2fSBpNTg2IgorQkFTRV9MSUJfdHVuZS1pNTg2ID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLWk1ODYgPSAiaTU4NiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1pNTg2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXg4Nn0gaTU4NiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWl3bW14dC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pd21teHQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OGNhMGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pd21teHQuaW5jCkBAIC0wLDAgKzEsMTQgQEAKKyMgQ29uZmlndXJhdGlvbnMgZm9yIHRoZSBJbnRlbCBQWEEyN3ggQXBwaWNhdGlvbnMgUHJvY2Vzc29yIEZhbWlseS4gCisjIFBsZWFzZSB1c2UgdHVuZS14c2NhbGUgZm9yIFBYQTI1NS9QWEEyNnggYmFzZWQgcHJvY2Vzc29ycy4KKworREVGQVVMVFRVTkUgPz0gIml3bW14dCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS1kc3AuaW5jCisKK1RVTkVWQUxJRFtpd21teHRdID0gIkVuYWJsZSBJbnRlbCBQWEEyN3ggc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiaXdtbXh0IiwgIiAtbWFyY2g9aXdtbXh0IC1tdHVuZT1pd21teHQiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJpd21teHQiCitBUk1QS0dBUkNIX3R1bmUtaXdtbXh0ID0gIml3bW14dCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1pd21teHQgPSAidGh1bWIgaXdtbXh0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWl3bW14dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlfSBpd21teHQgaXdtbXh0dCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMi5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMzI2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzIuaW5jCkBAIC0wLDAgKzEsMjUgQEAKK0RFRkFVTFRUVU5FID89ICJtaXBzMzIiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9hcmNoLW1pcHMuaW5jCisKK1RVTkVWQUxJRFttaXBzMzJdID0gIkVuYWJsZSBtaXBzMzIgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FQ09ORkxJQ1RTW21pcHMzMl0gPSAibjY0IG4zMiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtaXBzMzIiLCAiIC1tYXJjaD1taXBzMzIiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJtaXBzMzIgbWlwczMyZWwgbWlwczMyLW5mIG1pcHMzMmVsLW5mIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMyID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHN9IG1pcHMzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMiA9ICJtaXBzMzIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczMyID0gIm1pcHMgbWlwczMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMyZWwgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc2VsfSBtaXBzMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzMzJlbCA9ICJtaXBzMzJlbCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzJlbCA9ICJtaXBzZWwgbWlwczMyZWwiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzItbmYgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwcy1uZn0gbWlwczMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczMyLW5mID0gIm1pcHMzMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzItbmYgPSAibWlwcy1uZiBtaXBzMzItbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzJlbC1uZiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzZWwtbmZ9IG1pcHMzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMmVsLW5mID0gIm1pcHMzMmVsIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMmVsLW5mID0gIm1pcHNlbC1uZiBtaXBzMzJlbC1uZiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMnIyLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMnIyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWRlZmY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMycjIuaW5jCkBAIC0wLDAgKzEsMTcgQEAKK0RFRkFVTFRUVU5FID89ICJtaXBzMzJyMiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMi5pbmMKKworVFVORVZBTElEW21pcHMzMnIyXSA9ICJFbmFibGUgbWlwczMycjIgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FQ09ORkxJQ1RTW21pcHMzMnIyXSA9ICJuNjQgbjMyIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm1pcHMzMnIyIiwgIiAtbWFyY2g9bWlwczMycjIiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJtaXBzMzJyMiBtaXBzMzJyMmVsIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMycjIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc30gbWlwczMycjIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzMzJyMiA9ICJtaXBzMzJyMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzJyMiA9ICJtaXBzIG1pcHMzMiBtaXBzMzJyMiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHMzMnIyZWwgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc2VsfSBtaXBzMzJyMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMnIyZWwgPSAibWlwczMycjJlbCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzJyMmVsID0gIm1pcHNlbCBtaXBzMzJlbCBtaXBzMzJyMmVsIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczY0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHM2NC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlMGUwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHM2NC5pbmMKQEAgLTAsMCArMSwzIEBACitERUZBVUxUVFVORSA/PSAibWlwczY0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMycjIuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1vY3Rlb24uaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtb2N0ZW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjRkOWRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtb2N0ZW9uLmluYwpAQCAtMCwwICsxLDMyIEBACitERUZBVUxUVFVORSA/PSJvY3Rlb24yIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczY0LmluYworCitBVkFJTFRVTkVTICs9ICJvY3Rlb24yIG9jdGVvbjJfNjQgb2N0ZW9uMyBvY3Rlb24zXzY0IgorCitUVU5FVkFMSURbb2N0ZW9uMl0gPSAiRW5hYmxlIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIG9jdGVvbjIgc3VwcG9ydCIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJvY3Rlb24yIiwgIiAtbWFyY2g9b2N0ZW9uMiAiLCAiIixkKX0iCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1vY3Rlb24yID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHM2NC1uMzJ9IG9jdGVvbjIiCitCQVNFX0xJQl90dW5lLW9jdGVvbjIgPSAibGliMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1vY3Rlb24yID0gIm9jdGVvbjIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtb2N0ZW9uMiA9ICJtaXBzNjQtbjMyIG9jdGVvbjItbjMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtb2N0ZW9uMl82NCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjR9IG9jdGVvbjIiCitCQVNFX0xJQl90dW5lLW9jdGVvbjJfNjQgPSAibGliNjQiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1vY3Rlb24yXzY0ID0gIm9jdGVvbjJfNjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtb2N0ZW9uMl82NCA9ICJtaXBzNjQgb2N0ZW9uMl82NCIKKworCitUVU5FVkFMSURbb2N0ZW9uM10gPSAiRW5hYmxlIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIG9jdGVvbjMgc3VwcG9ydCIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJvY3Rlb24zIiwgIiAtbWFyY2g9b2N0ZW9uMyAiLCAiIixkKX0iCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1vY3Rlb24zID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHM2NC1uMzJ9IG9jdGVvbjMiCitCQVNFX0xJQl90dW5lLW9jdGVvbjMgPSAibGliMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1vY3Rlb24zID0gIm9jdGVvbjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtb2N0ZW9uMyA9ICJtaXBzNjQtbjMyIG9jdGVvbjMtbjMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtb2N0ZW9uM182NCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjR9IG9jdGVvbjMiCitCQVNFX0xJQl90dW5lLW9jdGVvbjNfNjQgPSAibGliNjQiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1vY3Rlb24zXzY0ID0gIm9jdGVvbjNfNjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtb2N0ZW9uM182NCA9ICJtaXBzNjQgb2N0ZW9uM182NCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNS5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYmU4NjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjUuaW5jCkBAIC0wLDAgKzEsMjEgQEAKK0RFRkFVTFRUVU5FID89ICJwcGM2NHA1IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jCisKK1RVTkVWQUxJRFtwb3dlcjVdID0gIkVuYWJsZSBJQk0gUG93ZXI1IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNSIsICIgLW1jcHU9cG93ZXI1IiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjcDUgcHBjNjRwNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNwNSA9ICJtMzIgZnB1LWhhcmQgcG93ZXI1IGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwY3A1ID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY3A1ID0gInBwY3A1IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY3A1ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwY3A1IgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNjRwNSA9ICJtNjQgZnB1LWhhcmQgcG93ZXI1IGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwYzY0cDUgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM2NHA1ID0gInBwYzY0cDUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNjRwNSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjNjR9IHBwYzY0cDUiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IHBvd2VyNSBzcGVjaWZpYyBsaWJyYXJ5CitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYzY0ICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwb3dlcjUiLCAiLS13aXRoLWNwdT1wb3dlcjUiLCAiIiwgZCl9IgorR0xJQkNfRVhUUkFfT0VDT05GX3Bvd2VycGMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNSIsICItLXdpdGgtY3B1PXBvd2VyNSIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjYuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI2LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTYzNzk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI2LmluYwpAQCAtMCwwICsxLDIxIEBACitERUZBVUxUVFVORSA/PSAicHBjcHI2IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jCisKK1RVTkVWQUxJRFtwb3dlcjZdID0gIkVuYWJsZSBJQk0gUG93ZXI2IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNiIsICIgLW1jcHU9cG93ZXI2IiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjcDYgcHBjNjRwNiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNwNiA9ICJtMzIgZnB1LWhhcmQgcG93ZXI2IGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwY3A2ID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY3A2ID0gInBwY3A2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY3A2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwY3A2IgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNjRwNiA9ICJtNjQgZnB1LWhhcmQgcG93ZXI2IGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwYzY0cDYgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM2NHA2ID0gInBwYzY0cDYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNjRwNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjNjR9IHBwYzY0cDYiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IHBvd2VyNiBzcGVjaWZpYyBsaWJyYXJ5CitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYzY0ICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwb3dlcjYiLCAiLS13aXRoLWNwdT1wb3dlcjYiLCAiIiwgZCl9IgorR0xJQkNfRVhUUkFfT0VDT05GX3Bvd2VycGMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNiIsICItLXdpdGgtY3B1PXBvd2VyNiIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjcuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI3LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDY5ZTc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI3LmluYwpAQCAtMCwwICsxLDIxIEBACitERUZBVUxUVFVORSA/PSAicHBjcHI3IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jCisKK1RVTkVWQUxJRFtwb3dlcjddID0gIkVuYWJsZSBJQk0gUG93ZXI3IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNyIsICIgLW1jcHU9cG93ZXI3IiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjcDcgcHBjNjRwNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNwNyA9ICJtMzIgZnB1LWhhcmQgcG93ZXI3IGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwY3A3ID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY3A3ID0gInBwY3A3IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY3A3ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwY3A3IgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNjRwNyA9ICJtNjQgZnB1LWhhcmQgcG93ZXI3IGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwYzY0cDcgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM2NHA3ID0gInBwYzY0cDciCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNjRwNyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjNjR9IHBwYzY0cDciCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IHBvd2VyNyBzcGVjaWZpYyBsaWJyYXJ5CitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYzY0ICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwb3dlcjciLCAiLS13aXRoLWNwdT1wb3dlcjciLCAiIiwgZCl9IgorR0xJQkNfRVhUUkFfT0VDT05GX3Bvd2VycGMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNyIsICItLXdpdGgtY3B1PXBvd2VyNyIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM0NzYuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNDc2LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWQxODVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNDc2LmluYwpAQCAtMCwwICsxLDE0IEBACitERUZBVUxUVFVORSA/PSAicHBjNDc2IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbcHBjNDc2XSA9ICJFbmFibGUgcHBjNDc2IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwYzQ3NiIsICIgLW1jcHU9NDc2IiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjNDc2IgorVFVORV9GRUFUVVJFU190dW5lLXBwYzQ3NiA9ICJtMzIgZnB1LWhhcmQgcHBjNDc2IgorVFVORV9QS0dBUkNIX3R1bmUtcHBjNDc2ID0gInBwYzQ3NiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGM0NzYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjNDc2IgorCisjIGdsaWJjIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGdldCA0NzYgc3BlY2lmaWMgbGlicmFyeSAoZm9yIHNxcnQpCitHTElCQ19FWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwYzQ3NiIsICItd2l0aC1jcHU9NDc2IiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzYwM2UuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNjAzZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc0NGEwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzYwM2UuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK0RFRkFVTFRUVU5FID89ICJwcGM2MDNlIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbcHBjNjAzZV0gPSAiRW5hYmxlIHBwYzYwM2Ugc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjNjAzZSIsICIgLW1jcHU9NjAzZSIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInBwYzYwM2UiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNjAzZSA9ICJtMzIgZnB1LWhhcmQgcHBjNjAzZSIKK1RVTkVfUEtHQVJDSF90dW5lLXBwYzYwM2UgPSAicHBjNjAzZSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGM2MDNlID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwYzYwM2UiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IDYwM2Ugc3BlY2lmaWMgbGlicmFyeSAoZm9yIHNxcnQpCitHTElCQ19FWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwYzYwM2UiLCAiLXdpdGgtY3B1PTYwM2UiLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNzQwMC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM3NDAwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWMwNDAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNzQwMC5pbmMKQEAgLTAsMCArMSwxNCBAQAorREVGQVVMVFRVTkUgPz0gInBwYzc0MDAiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCisKK1RVTkVWQUxJRFtwcGM3NDAwXSA9ICJFbmFibGUgcHBjNzQwMCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGM3NDAwIiwgIiAtbWNwdT03NDAwIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjNzQwMCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGM3NDAwID0gIm0zMiBmcHUtaGFyZCBwcGM3NDAwIGFsdGl2ZWMiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM3NDAwID0gInBwYzc0MDAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNzQwMCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjfSBwcGM3NDAwIgorCisjIGdsaWJjIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGdldCA3NDAwIHNwZWNpZmljIGxpYnJhcnkgKGZvciBzcXJ0KQorI0dMSUJDX0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjNzQwMCIsICItLXdpdGgtY3B1PXBvd2VyNCIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlMzAwYzIuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWE5NTA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMyLmluYwpAQCAtMCwwICsxLDExIEBACitERUZBVUxUVFVORSA/PSAicHBjZTMwMGMyIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbcHBjZTMwMGMyXSA9ICJFbmFibGUgcHBjZTMwMGMyIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwY2UzMDBjMiIsICIgLW1jcHU9ZTMwMGMyIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjZTMwMGMyIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2UzMDBjMiA9ICJtMzIgZnB1LXNvZnQgcHBjZTMwMGMyIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjZTMwMGMyID0gInBwY2UzMDBjMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNlMzAwYzIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwYy1uZn0gcHBjZTMwMGMyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2UzMDBjMy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5Y2YyMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2UzMDBjMy5pbmMKQEAgLTAsMCArMSwyMyBAQAorREVGQVVMVFRVTkUgPz0gInBwY2UzMDBjMyIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMKKworQVZBSUxUVU5FUyArPSAicHBjZTMwMGMzIHBwY2UzMDBjMy1uZiIKKworIyBoYXJkLWZsb2F0CitUVU5FVkFMSURbcHBjZTMwMGMzXSA9ICJFbmFibGUgcHBjZTMwMGMzIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2UzMDBjMyA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1wb3dlcnBjfSBwcGNlMzAwYzMiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGNlMzAwYzMgPSAicHBjZTMwMGMzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY2UzMDBjMyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjfSBwcGNlMzAwYzMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjZTMwMGMzIiwgIiAtbWNwdT1lMzAwYzMiLCAiIiwgZCl9IgorCisjIGdsaWJjIGNvbmZpZyBvcHRpb25zIHRvIG1ha2UgdXNlIG9mIGUzMDBjMyAoNjAzZSkgc3BlY2lmaWMgc3FydC9zcXJ0ZiByb3V0aW5lcworR0xJQkNfRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGNlMzAwYzMiLCAiLS13aXRoLWNwdT1lMzAwYzMiLCAiIiwgZCl9IgorCisjIHNvZnQtZmxvYXQKK1RVTkVWQUxJRFtwcGNlMzAwYzMtbmZdID0gIkVuYWJsZSBwcGNlMzAwYzMgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMgKG5vIGZwdSkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjZTMwMGMzLW5mID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXBvd2VycGMtbmZ9IHBwY2UzMDBjMy1uZiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY2UzMDBjMy1uZiA9ICJwcGNlMzAwYzMtbmYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjZTMwMGMzLW5mID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGMtbmZ9IHBwY2UzMDBjMy1uZiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGNlMzAwYzMtbmYiLCAiIC1tY3B1PWUzMDBjMyIsICIiLCBkKX0iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDAuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBjMWY4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDAuaW5jCkBAIC0wLDAgKzEsMjAgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNlNTAwIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbcHBjZTUwMF0gPSAiRW5hYmxlIHBwY2U1MDAgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjZTUwMCIsICIgLW1jcHU9ODU0MCIsICIiLCBkKX0iCisKK1RVTkVWQUxJRFtzcGVdID0gIkVuYWJsZSBTUEUgQUJJIGV4dGVuc2lvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCBbICJwcGNlNTAwIiwgInNwZSIgXSwgIiAtbWFiaT1zcGUgLW1zcGUgLW1mbG9hdC1ncHJzPXNpbmdsZSIsICIiLCBkKX0iCitUQVJHRVRfRlBVIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsIFsgInBwY2U1MDAiICwgInNwZSIgXSwgInBwYy1lZnMiLCAiIiwgZCl9IgorCisjIHNwZSBpcyBkZWZpbmVkIHBvdGVudGlhbGx5IGluIHR3byBwbGFjZXMsIHNvIHdlIHdhbnQgdG8gYmUgc3VyZSBpdCB3aWxsCisjIG9ubHkgd3JpdGUgc3BlIG9uY2UgdG8gdGhlIEFCSUVYVEVOU0lPTlMgZmllbGQuCitTUEVBQklFWFRFTlNJT04gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAic3BlIiwgInNwZSIsICIiLCBkKX0iCitBQklFWFRFTlNJT04gLj0gIiR7U1BFQUJJRVhURU5TSU9OfSIKKworQVZBSUxUVU5FUyArPSAicHBjZTUwMCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNlNTAwID0gIm0zMiBzcGUgcHBjZTUwMCIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY2U1MDAgPSAicHBjZTUwMCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNlNTAwID0gInBwY2U1MDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwbWMuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMG1jLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDRkOGU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMG1jLmluYwpAQCAtMCwwICsxLDE0IEBACitERUZBVUxUVFVORSA/PSAicHBjZTUwMG1jIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbcHBjZTUwMG1jXSA9ICJFbmFibGUgcHBjZTUwMG1jIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwY2U1MDBtYyIsICIgLW1jcHU9ZTUwMG1jIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjZTUwMG1jIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2U1MDBtYyA9ICJtMzIgZnB1LWhhcmQgcHBjZTUwMG1jIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjZTUwMG1jID0gInBwY2U1MDBtYyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNlNTAwbWMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjZTUwMG1jIgorCisjIGdsaWJjIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGdldCBlNTAwbWMgc3BlY2lmaWMgbGlicmFyeSAoZm9yIHNxcnQpCitHTElCQ19FWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwY2U1MDBtYyIsICItd2l0aC1jcHU9ZTUwMG1jIiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDB2Mi5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwdjIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTRkNzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwdjIuaW5jCkBAIC0wLDAgKzEsMjAgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNlNTAwdjIiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCisKK1RVTkVWQUxJRFtwcGNlNTAwdjJdID0gIkVuYWJsZSBwcGNlNTAwdjIgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjZTUwMHYyIiwgIiAtbWNwdT04NTQ4IiwgIiIsIGQpfSIKKworVFVORVZBTElEW3NwZV0gPSAiRW5hYmxlIFNQRSBBQkkgZXh0ZW5zaW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsIFsgInBwY2U1MDB2MiIsICJzcGUiIF0sICIgLW1hYmk9c3BlIC1tc3BlIC1tZmxvYXQtZ3Bycz1kb3VibGUiLCAiIiwgZCl9IgorVEFSR0VUX0ZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCBbICJwcGNlNTAwdjIiICwgInNwZSIgXSwgInBwYy1lZmQiLCAiIiwgZCl9IgorCisjIHNwZSBpcyBkZWZpbmVkIHBvdGVudGlhbGx5IGluIHR3byBwbGFjZXMsIHNvIHdlIHdhbnQgdG8gYmUgc3VyZSBpdCB3aWxsCisjIG9ubHkgd3JpdGUgc3BlIG9uY2UgdG8gdGhlIEFCSUVYVEVOU0lPTlMgZmllbGQuCitTUEVBQklFWFRFTlNJT04gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAic3BlIiwgInNwZSIsICIiLCBkKX0iCitBQklFWFRFTlNJT04gLj0gIiR7U1BFQUJJRVhURU5TSU9OfSIKKworQVZBSUxUVU5FUyArPSAicHBjZTUwMHYyIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2U1MDB2MiA9ICJtMzIgc3BlIHBwY2U1MDB2MiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY2U1MDB2MiA9ICJwcGNlNTAwdjIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjZTUwMHYyID0gInBwY2U1MDB2MiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1NTAwLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1NTAwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTIzMWVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTU1MDAuaW5jCkBAIC0wLDAgKzEsMjAgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNlNTUwMCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYworCitUVU5FVkFMSURbZTU1MDBdID0gIkVuYWJsZSBGcmVlc2NhbGUgZTU1MDAgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZTU1MDAiLCAiIC1tY3B1PWU1NTAwIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjZTU1MDAgcHBjNjRlNTUwMCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNlNTUwMCA9ICJtMzIgZnB1LWhhcmQgZTU1MDAiCitCQVNFX0xJQl90dW5lLXBwY2U1NTAwID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY2U1NTAwID0gInBwY2U1NTAwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY2U1NTAwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwY2U1NTAwIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNjRlNTUwMCA9ICJtNjQgZnB1LWhhcmQgZTU1MDAiCitCQVNFX0xJQl90dW5lLXBwYzY0ZTU1MDAgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM2NGU1NTAwID0gInBwYzY0ZTU1MDAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNjRlNTUwMCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjNjR9IHBwYzY0ZTU1MDAiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IGU1NTAwIHNwZWNpZmljIGxpYnJhcnkgKGZvciBzcXJ0KQorR0xJQkNfRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJlNTUwMCIsICItLXdpdGgtY3B1PWU1NTAwIiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U2NTAwLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U2NTAwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTc0M2EzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTY1MDAuaW5jCkBAIC0wLDAgKzEsMjEgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNlNjUwMCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYworCitUVU5FVkFMSURbZTY1MDBdID0gIkVuYWJsZSBGcmVlc2NhbGUgZTY1MDAgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZTY1MDAiLCAiIC1tY3B1PWU2NTAwIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjZTY1MDAgcHBjNjRlNjUwMCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNlNjUwMCA9ICJtMzIgZnB1LWhhcmQgZTY1MDAgYWx0aXZlYyIKK0JBU0VfTElCX3R1bmUtcHBjZTY1MDAgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjZTY1MDAgPSAicHBjZTY1MDAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjZTY1MDAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjZTY1MDAiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGM2NGU2NTAwID0gIm02NCBmcHUtaGFyZCBlNjUwMCBhbHRpdmVjIgorQkFTRV9MSUJfdHVuZS1wcGM2NGU2NTAwID0gImxpYjY0IgorVFVORV9QS0dBUkNIX3R1bmUtcHBjNjRlNjUwMCA9ICJwcGM2NGU2NTAwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwYzY0ZTY1MDAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwYzY0fSBwcGM2NGU2NTAwIgorCisjIGdsaWJjIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGdldCBlNjUwMCBzcGVjaWZpYyBsaWJyYXJ5CitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYzY0ICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJlNjUwMCIsICItLXdpdGgtY3B1PWU2NTAwIiwgIiIsIGQpfSIKK0dMSUJDX0VYVFJBX09FQ09ORl9wb3dlcnBjICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJlNjUwMCIsICItLXdpdGgtY3B1PWU2NTAwIiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXNoMy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zaDMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZWQ3YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zaDMuaW5jCkBAIC0wLDAgKzEsMTcgQEAKK0RFRkFVTFRUVU5FID89ICJzaDMiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvc2gvYXJjaC1zaC5pbmMKKworVFVORVZBTElEW3NoM10gPSAiRW5hYmxlIFNIMyBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInNoMyIsICIgLW0zIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAic2gzIHNoM2ViIgorVFVORV9GRUFUVVJFU190dW5lLXNoMyA9ICJzaDMiCitUVU5FX0FSQ0hfdHVuZS1zaDMgPSAic2gzIgorVFVORV9QS0dBUkNIX3R1bmUtc2gzID0gInNoMyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1zaDMgPSAic2ggc2gzIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtc2gzZWIgPSAic2gzIGJpZ2VuZGlhbiIKK1RVTkVfQVJDSF90dW5lLXNoM2ViID0gInNoM2ViIgorVFVORV9QS0dBUkNIX3R1bmUtc2gzZWIgPSAic2gzZWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtc2gzZWIgPSAic2hlYiBzaDNlYiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXNoNC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zaDQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZTIzYjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zaDQuaW5jCkBAIC0wLDAgKzEsMzQgQEAKK0RFRkFVTFRUVU5FID89ICJzaDQiCisKKyMgUHVsbCBpbiBzaDQgZm9yIGNvbXBhdGliaWxpdHkuLi4KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvc2gvYXJjaC1zaC5pbmMKKworVFVORVZBTElEW3NoNF0gPSAiRW5hYmxlIFNINCBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInNoNCIsICIgLW00IiwgIiIsIGQpfSIKKworIyBOT1RFOiBJZiB5b3Ugd2FudCB0byBvcHRpbWl6ZSB0byBzaDRhLCBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXNoNGEuaW5jLgorIyBCdXQgaXQgaXMgbm90IGNvbXBhdGlibGUgZm9yIHNoNC4KKyMgVGhlIGJpbmFyeSBvcHRpbWl6ZWQgYnkgbTRhIGRvZXNuJ3Qgb3BlcmF0ZSBvbiBzaDQuIEl0IHdvcmtzIG9uIHNoNGEgb25seS4KK1RVTkVWQUxJRFtzaDRhXSA9ICJFbmFibGUgU0g0YSBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInNoNGEiLCAiIC1tNGEiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJzaDQgc2g0ZWIgc2g0YSBzaDRhZWIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtc2g0ID0gInNoNCIKK1RVTkVfQVJDSF90dW5lLXNoNCA9ICJzaDQiCitUVU5FX1BLR0FSQ0hfdHVuZS1zaDQgPSAic2g0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXNoNCA9ICJzaCBzaDQiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1zaDRlYiA9ICJzaDQgYmlnZW5kaWFuIgorVFVORV9BUkNIX3R1bmUtc2g0ZWIgPSAic2g0ZWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1zaDRlYiA9ICJzaDRlYiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1zaDRlYiA9ICJzaGViIHNoNGViIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtc2g0YSA9ICJzaDRhIgorVFVORV9BUkNIX3R1bmUtc2g0YSA9ICJzaDQiCitUVU5FX1BLR0FSQ0hfdHVuZS1zaDRhID0gInNoNGEiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtc2g0YSA9ICJzaCBzaDQgc2g0YSIKKworVFVORV9GRUFUVVJFU190dW5lLXNoNGFlYiA9ICJzaDRhIGJpZ2VuZGlhbiIKK1RVTkVfQVJDSF90dW5lLXNoNGFlYiA9ICJzaDRlYiIKK1RVTkVfUEtHQVJDSF90dW5lLXNoNGFlYiA9ICJzaDRhZWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtc2g0YWViID0gInNoZWIgc2g0ZWIgc2g0YWViIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc3Ryb25nYXJtMTEwMC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zdHJvbmdhcm0xMTAwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTJmYmE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc3Ryb25nYXJtMTEwMC5pbmMKQEAgLTAsMCArMSwxMSBAQAorREVGQVVMVFRVTkUgPz0gImFybXY0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYworCitUVU5FVkFMSURbc3Ryb25nYXJtXSA9ICJFbmFibGUgU3Ryb25nYXJtIDExMDAgc2VyaWVzIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInN0cm9uZ2FybSIsICIgLW10dW5lPXN0cm9uZ2FybTExMDAiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJzdHJvbmdhcm0iCitBUk1QS0dBUkNIX3R1bmUtc3Ryb25nYXJtID0gInN0cm9uZ2FybSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1zdHJvbmdhcm0gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR9IHN0cm9uZ2FybSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1zdHJvbmdhcm0gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR9IHN0cm9uZ2FybSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXN1cGVyc3BhcmMuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc3VwZXJzcGFyYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhYTM2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXN1cGVyc3BhcmMuaW5jCkBAIC0wLDAgKzEsNCBAQAorVFVORV9BUkNIID0gInNwYXJjIgorCitUVU5FX0NDQVJHUyA9ICItbWNwdT1zdXBlcnNwYXJjIgorVFVORV9QS0dBUkNIID0gInN1cGVyc3BhcmMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS14c2NhbGUuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUteHNjYWxlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzVjYThkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUteHNjYWxlLmluYwpAQCAtMCwwICsxLDE2IEBACitERUZBVUxUVFVORSA/PSAiYXJtdjV0ZSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS1kc3AuaW5jCisKK1RVTkVWQUxJRFt4c2NhbGVdID0gIkVuYWJsZSBQWEEyNTUvUFhBMjZ4IFhzY2FsZSBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ4c2NhbGUiLCAiIC1tdHVuZT14c2NhbGUiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJ4c2NhbGUiCitBUk1QS0dBUkNIX3R1bmUteHNjYWxlID0gInhzY2FsZSIKK1RVTkVfRkVBVFVSRVNfdHVuZS14c2NhbGUgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZX0geHNjYWxlIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXhzY2FsZSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlfSB4c2NhbGUgeHNjYWxldCB4c2NhbGVlIHhzY2FsZXRlIgorCitBVkFJTFRVTkVTICs9ICJ4c2NhbGUtYmUiCitBUk1QS0dBUkNIX3R1bmUteHNjYWxlLWJlID0gInhzY2FsZSIKK1RVTkVfRkVBVFVSRVNfdHVuZS14c2NhbGUtYmUgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZWJ9IHhzY2FsZSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUteHNjYWxlLWJlID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGVifSB4c2NhbGViIHhzY2FsZXRiIHhzY2FsZWViIHhzY2FsZXRlYiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYtYmFzZS5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2LWJhc2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YzhhNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2LWJhc2UuaW5jCkBAIC0wLDAgKzEsNTIgQEAKKyMKKyMgQmFzZSBtYWNoaW5lIHNldHRpbmdzIGZvciBYODYgYXJjaGl0ZWN0dXJlIEJTUHMKKyMKKworIworIyBjb21tb24gc2V0dGluZ3MgZm9yIFg4NiBtYWNoaW5lcworIworTUFDSElORV9GRUFUVVJFUyArPSAic2NyZWVuIGtleWJvYXJkIHBjaSB1c2Job3N0IGV4dDIgZXh0MyB4ODYgXAorICAgICAgICAgICAgICAgICAgICAgYWNwaSBzZXJpYWwgdXNiZ2FkZ2V0IGFsc2EiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgKz0gImtlcm5lbC1tb2R1bGVzIgorCitJTUFHRV9GU1RZUEVTICs9ICJsaXZlIgorCitLRVJORUxfSU1BR0VUWVBFID89ICJiekltYWdlIgorCitTRVJJQUxfQ09OU09MRSA/PSAiMTE1MjAwIHR0eVMwIgorCisjCisjIGtlcm5lbC1yZWxhdGVkIHZhcmlhYmxlcworIworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID8/PSAibGludXgteW9jdG8iCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA/Pz0gIjMuMCUiCisKKyMKKyMgWFNFUlZFUiBzdWJjb21wb25lbnRzLCB1c2VkIHRvIGJ1aWxkIHRoZSBYU0VSVkVSIHZhcmlhYmxlCisjCitYU0VSVkVSX1g4Nl9CQVNFID0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgIHhmODYtaW5wdXQtbW91c2UgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWtleWJvYXJkIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgIHhmODYtaW5wdXQtc3luYXB0aWNzIFwKKyAgICAgICAgICAgIgorCitYU0VSVkVSX1g4Nl9FWFQgPSAiIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAneHNlcnZlci14b3JnLWV4dGVuc2lvbi1nbHgnLCAnJywgZCl9IFwKKyAgICAgICAgICAgeHNlcnZlci14b3JnLW1vZHVsZS1saWJpbnQxMCBcCisgICAgICAgICAgICIKKworWFNFUlZFUl9YODZfSTkxNSA9ICJ4Zjg2LXZpZGVvLWludGVsIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnbWVzYS1kcml2ZXItaTkxNScsICcnLCBkKX0gXAorICAgICAgICAgICAiCisKK1hTRVJWRVJfWDg2X0k5NjUgPSAieGY4Ni12aWRlby1pbnRlbCBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ21lc2EtZHJpdmVyLWk5NjUnLCAnJywgZCl9IFwKKyAgICAgICAgICAgIgorCitYU0VSVkVSX1g4Nl9WRVNBID0gInhmODYtdmlkZW8tdmVzYSIKKworWFNFUlZFUl9YODZfRkJERVYgPSAieGY4Ni12aWRlby1mYmRldiIKKworWFNFUlZFUl9YODZfTU9ERVNFVFRJTkcgPSAieGY4Ni12aWRlby1tb2Rlc2V0dGluZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvUkVBRE1FIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI2YzQ2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvUkVBRE1FCkBAIC0wLDAgKzEsMjQgQEAKKzIwMTIvMDMvMzAgLSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisgLSBJbml0aWFsIHZlcnNpb24KKworTW9zdCBvZiB0aGUgaXRlbXMgZm9yIHRoZSBYODYgYXJjaGl0ZWN0dXJlcyBhcmUgZGVmaW5lZCBpbiB0aGUgc2luZ2xlCithcmNoLXg4NiBmaWxlLgorCitUaHJlZSBBQklzIGFyZSBkZWZpbmUsIG0zMiwgbXgzMiBhbmQgbTY0LgorCitUaGUgZm9sbG93aW5nIGlzIHRoZSBsaXN0IG9mIFg4NiBzcGVjaWZpYyB2YXJpYWJsZXM6CisKK1g4NkFSQ0gzMiAtIFRoaXMgaXMgdGhlIDMyLWJpdCBhcmNoaXRlY3R1cmUgR05VIGNhbm9uaWNhbCBhcmNoLCBUVU5FX0FSQ0guCisKK1g4NkFSQ0g2NCAtIFRoaXMgaXMgdGhlIDY0LWJpdCBhcmNoaXRlY3R1cmUgR05VIGNhbm9uaWNhbCBhcmNoLCBUVU5FX0FSQ0guCisKK1RoZSBUVU5FX1BLR0FSQ0ggaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgorCitUVU5FX1BLR0FSQ0ggPSAke1RVTkVfUEtHQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9fQorCitUaGUgcGFja2FnZSBhcmNoaXRlY3R1cmUgZm9yIDMyLWJpdCB0YXJnZXRzIGlzIGhpc3RvcmljYWwgYW5kIGdlbmVyYWxseQorc2V0IHRvIHRvIG1hdGNoIHRoZSBjb3JlIGNvbXBhdGlibGUgcHJvY2Vzc29yIHR5cGUsIGkuZS4gaTM4Ni4KKworRm9yIDY0LWJpdCBhcmNoaXRlY3R1cmVzLCB0aGUgYXJjaGl0ZWN0dXJlIGlzIGV4cGVjdGVkIHRvIGVuZCBpbiAnXzY0Jy4KKworSWYgdGhlIHgzMiBBQkkgaXMgdXNlZCwgdGhlbiB0aGUgXzY0IGlzIGZ1cnRoZXIgZXh0ZW5kZWQgd2l0aCBhICdfeDMyJy4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni9hcmNoLXg4Ni5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4YmRkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jCkBAIC0wLDAgKzEsNTEgQEAKKyMKKyMgWDg2IEFyY2hpdGVjdHVyZSBkZWZpbml0aW9uIChJQTMyLCBYODZfNjQsIGFuZCBYMzIpCisjCisKK0RFRkFVTFRUVU5FID89ICJ4ODYiCitUQVJHRVRfRlBVID89ICIiCitYODZBUkNIMzIgPz0gImk1ODYiCitYODZBUkNINjQgPz0gIng4Nl82NCIKKworVFVORV9QS0dBUkNIID0gIiR7VFVORV9QS0dBUkNIX3R1bmUtJHtERUZBVUxUVFVORX19IgorCisjIEVMRjMyIEFCSQorVFVORVZBTElEW20zMl0gPSAiSUEzMiBFTEYzMiBzdGFuZGFyZCBBQkkiCitUVU5FQ09ORkxJQ1RTW20zMl0gPSAibTY0IG14MzIiCitUVU5FX0FSQ0ggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm0zMiIsICIke1g4NkFSQ0gzMn0iLCAiIiAsZCl9IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm0zMiIsICIgLW0zMiIsICIiLCBkKX0iCitNQUNISU5FT1ZFUlJJREVTID0uICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtMzIiLCAieDg2OiIsICIiICxkKX0iCisKKyMgeDMyIEFCSQorVFVORVZBTElEW214MzJdID0gIklBMzJlICh4ODZfNjQpIEVMRjMyIHN0YW5kYXJkIEFCSSIKK1RVTkVDT05GTElDVFNbbXgzMl0gPSAibTY0IG0zMiIKK1RVTkVfQVJDSCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICIke1g4NkFSQ0g2NH0iLCAiIiAsZCl9IgorQUJJRVhURU5TSU9OIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIngzMiIsICIiICxkKX0iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICIgLW14MzIiLCAiIiwgZCl9IgorVFVORV9MREFSR1MgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiLW0gZWxmMzJfeDg2XzY0IiwgIiIsIGQpfSIKK1RVTkVfQVNBUkdTICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIi14MzIiLCAiIiwgZCl9IgorCisjIEVMRjY0IEFCSQorVFVORVZBTElEW202NF0gPSAiSUEzMmUgKHg4Nl82NCkgRUxGNjQgc3RhbmRhcmQgQUJJIgorVFVORUNPTkZMSUNUU1ttNjRdID0gIm0zMiBteDMyIgorVFVORV9BUkNIIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtNjQiLCAiJHtYODZBUkNINjR9IiwgIiIgLGQpfSIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtNjQiLCAiIC1tNjQiLCAiIiwgZCl9IgorCisjIERlZmF1bHQgVHVuZSBjb25maWd1cmF0aW9ucworQVZBSUxUVU5FUyArPSAieDg2IgorVFVORV9GRUFUVVJFU190dW5lLXg4NiA9ICJtMzIiCitCQVNFX0xJQl90dW5lLXg4NiA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS14ODYgPSAieDg2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXg4NiA9ICIke1RVTkVfUEtHQVJDSF90dW5lLXg4Nn0iCisKK0FWQUlMVFVORVMgKz0gIng4Ni02NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS14ODYtNjQgPSAibTY0IgorQkFTRV9MSUJfdHVuZS14ODYtNjQgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS14ODYtNjQgPSAieDg2XzY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXg4Ni02NCA9ICIke1RVTkVfUEtHQVJDSF90dW5lLXg4Ni02NH0iCisKK0FWQUlMVFVORVMgKz0gIng4Ni02NC14MzIiCitUVU5FX0ZFQVRVUkVTX3R1bmUteDg2LTY0LXgzMiA9ICJteDMyIgorQkFTRV9MSUJfdHVuZS14ODYtNjQteDMyID0gImxpYngzMiIKK1RVTkVfUEtHQVJDSF90dW5lLXg4Ni02NC14MzIgPSAieDg2XzY0X3gzMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS14ODYtNjQteDMyID0gIiR7VFVORV9QS0dBUkNIX3R1bmUteDg2LTY0LXgzMn0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm0uY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdWFybS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYWQwM2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm0uY29uZgpAQCAtMCwwICsxLDEyIEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogYXJtX3ZlcnNhdGlsZV85MjZlanMKKyNAREVTQ1JJUFRJT046IGFybV92ZXJzYXRpbGVfOTI2ZWpzCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjZlanMuaW5jCisjcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTExMzZqZi1zLmluYworCitLRVJORUxfSU1BR0VUWVBFID0gInpJbWFnZSIKKworU0VSSUFMX0NPTlNPTEVTID0gIjExNTIwMDt0dHlBTUEwIDExNTIwMDt0dHlBTUExIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm02NC5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11YXJtNjQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDU5ZDBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11YXJtNjQuY29uZgpAQCAtMCwwICsxLDEyIEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogZ2VuZXJpYyBhcm12OCBtYWNoaW5lCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHJ1bm5pbmcgYSBnZW5lcmljIGFybXY4CisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjguaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCisKK01BQ0hJTkVfRkVBVFVSRVMgPSAiIgorCitLRVJORUxfSU1BR0VUWVBFID0gIkltYWdlIgorCitTRVJJQUxfQ09OU09MRVMgPSAiMzg0MDA7dHR5QU1BMCAzODQwMDtodmMwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11bWlwcy5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11bWlwcy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZjgxMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVtaXBzLmNvbmYKQEAgLTAsMCArMSwxMyBAQAorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IG10aV9tYWx0YTMyX2JlIE1JUFMKKyNAREVTQ1JJUFRJT046IG10aV9tYWx0YTMyX2JlCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzJyMi5pbmMKKworS0VSTkVMX0lNQUdFVFlQRSA9ICJ2bWxpbnV4IgorS0VSTkVMX0FMVF9JTUFHRVRZUEUgPSAidm1saW51eC5iaW4iCisKK1NFUklBTF9DT05TT0xFUyA9ICIxMTUyMDA7dHR5UzAgMTE1MjAwO3R0eVMxIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID0gIiBrZXJuZWwtbW9kdWxlcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHM2NC5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11bWlwczY0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMzZjFmZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHM2NC5jb25mCkBAIC0wLDAgKzEsMTMgQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBtdGktbWFsdGE2NC1iZSBNSVBTNjQKKyNAREVTQ1JJUFRJT046IG10aS1tYWx0YTY0LWJlCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzNjQuaW5jCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAidm1saW51eCIKK0tFUk5FTF9BTFRfSU1BR0VUWVBFID0gInZtbGludXguYmluIgorCitTRVJJQUxfQ09OU09MRVMgPSAiMTE1MjAwO3R0eVMwIDExNTIwMDt0dHlTMSIKKworTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyA9ICIga2VybmVsLW1vZHVsZXMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVwcGMuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdXBwYy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1Y2JiZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVwcGMuY29uZgpAQCAtMCwwICsxLDExIEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogcWVtdSBQUEMgRW11bGF0b3Igc2V0dXAKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3IgcnVubmluZyBhbiBQUEMgc3lzdGVtIHVuZGVyIHFlbXUgZW11bGF0aW9uCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM3NDAwLmluYworCitLRVJORUxfSU1BR0VUWVBFID0gInZtbGludXgiCisKK1NFUklBTF9DT05TT0xFUyA9ICIxMTUyMDA7dHR5UzAgMTE1MjAwO3R0eVMxIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYtNjQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdXg4Ni02NC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZmQ0M2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYtNjQuY29uZgpAQCAtMCwwICsxLDI5IEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogY29tbW9uX3BjCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHJ1bm5pbmcgYSBjb21tb24geDg2CisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczEgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMiA/PSAibWVzYSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworREVGQVVMVFRVTkUgPz0gImNvcmUyLTY0IgorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYworCitLRVJORUxfSU1BR0VUWVBFID0gImJ6SW1hZ2UiCisKK1NFUklBTF9DT05TT0xFUyA9ICIxMTUyMDA7dHR5UzAgMTE1MjAwO3R0eVMxIgorCitYU0VSVkVSID0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ21lc2EtZHJpdmVyLXN3cmFzdCcsICcnLCBkKX0gXAorICAgICAgICAgICB4Zjg2LWlucHV0LXZtbW91c2UgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWtleWJvYXJkIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgIHhmODYtdmlkZW8tY2lycnVzIFwKKyAgICAgICAgICAgeGY4Ni12aWRlby1mYmRldiBcCisgICAgICAgICAgIHhmODYtdmlkZW8tdm13YXJlIgorCitNQUNISU5FX0ZFQVRVUkVTICs9ICJ4ODYiCisKK01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTICs9ICJ2ODZkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmNlYTY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LmNvbmYKQEAgLTAsMCArMSwyOCBAQAorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IGNvbW1vbl9wYworI0BERVNDUklQVElPTjogTWFjaGluZSBjb25maWd1cmF0aW9uIGZvciBydW5uaW5nIGEgY29tbW9uIHg4NgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbCA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMxID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczIgPz0gIm1lc2EiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LmluYworCitLRVJORUxfSU1BR0VUWVBFID0gImJ6SW1hZ2UiCisKK1NFUklBTF9DT05TT0xFUyA9ICIxMTUyMDA7dHR5UzAgMTE1MjAwO3R0eVMxIgorCitYU0VSVkVSID0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ21lc2EtZHJpdmVyLXN3cmFzdCcsICcnLCBkKX0gXAorICAgICAgICAgICB4Zjg2LWlucHV0LXZtbW91c2UgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWtleWJvYXJkIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgIHhmODYtdmlkZW8tY2lycnVzIFwKKyAgICAgICAgICAgeGY4Ni12aWRlby1mYmRldiBcCisgICAgICAgICAgIHhmODYtdmlkZW8tdm13YXJlIgorCitNQUNISU5FX0ZFQVRVUkVTICs9ICJ4ODYiCisKK01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTICs9ICJ2ODZkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWlncmF0ZV9sb2NhbGNvdW50LmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9taWdyYXRlX2xvY2FsY291bnQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDg2ZTAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWlncmF0ZV9sb2NhbGNvdW50LmNvbmYKQEAgLTAsMCArMSBAQAorSU5IRVJJVCArPSAibWlncmF0ZV9sb2NhbGNvdW50IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbXVsdGlsaWIuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL211bHRpbGliLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlhOGU5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL211bHRpbGliLmNvbmYKQEAgLTAsMCArMSwyNiBAQAorCitiYXNlbGliID0gIiR7QGQuZ2V0VmFyKCdCQVNFX0xJQl90dW5lLScgKyAoZC5nZXRWYXIoJ0RFRkFVTFRUVU5FJywgVHJ1ZSkgb3IgJ0lOVkFMSUQnKSwgVHJ1ZSkgb3IgZC5nZXRWYXIoJ0JBU0VMSUInLCBUcnVlKX0iCisKK01VTFRJTElCX1ZBUklBTlRTID0gIiR7QGV4dGVuZF92YXJpYW50cyhkLCdNVUxUSUxJQlMnLCdtdWx0aWxpYicpfSIKK01VTFRJTElCX1NBVkVfVkFSTkFNRSA9ICJERUZBVUxUVFVORSBUQVJHRVRfQVJDSCBUQVJHRVRfU1lTIgorCitNVUxUSUxJQlMgPz89ICJtdWx0aWxpYjpsaWIzMiIKKworU1RBR0lOR19ESVJfSE9TVCA9ICIke1NUQUdJTkdfRElSfS8ke01MUFJFRklYfSR7TUFDSElORX0iCitTVEFHSU5HX0RJUl9UQVJHRVQgPSAiJHtTVEFHSU5HX0RJUn0vJHtNTFBSRUZJWH0ke01BQ0hJTkV9IgorUEtHREFUQV9ESVIgPSAiJHtTVEFHSU5HX0RJUn0vJHtNQUNISU5FfS9wa2dkYXRhIgorCitJTkhFUklUICs9ICJtdWx0aWxpYl9nbG9iYWwiCisKK0JCQ0xBU1NFWFRFTkRfYXBwZW5kID0gIiAke01VTFRJTElCU30iCisKK01VTFRJTElCX0dMT0JBTF9WQVJJQU5UUyA/PSAibGliMzIgbGliNjQgbGlieDMyIgorCitPUEtHX0FSR1NfYXBwZW5kID0gIiAtLWZvcmNlLW1haW50YWluZXIgLS1mb3JjZS1vdmVyd3JpdGUiCisKKyMgV2hlbiBtdWx0aWxpYiBpcyBlbmFibGVkLCBhbGxhcmNoIHJlY2lwZXMgd2lsbCBiZSBpbnN0YWxsZWQgaW50byB0aGUgTUFDSElORQorIyBzeXNyb290LCBub3QgTUxQUkVGSVhNQUNISU5FLiAgVGhpcyBtZWFucyB0aGF0IGFueXRoaW5nIHVzaW5nIHBrZy1jb25maWcgdG8KKyMgZmluZCBhbiBhbGxhcmNoIHBrZ2NvbmZpZyBmaWxlIHdpbGwgZmFpbCBhcyB0aGUgUEtHX0NPTkZJR19QQVRIIG9ubHkgbG9va3MKKyMgaW5zaWRlIHRoZSBtdWx0aWxpYiBzeXNyb290LiAgRml4IHRoaXMgYnkgZXhwbGljaXRseSBhZGRpbmcgdGhlIE1BQ0hJTkUncworIyBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgcGtnY29uZmlnIGxvY2F0aW9uIHRvIFBLR19DT05GSUdfUEFUSC4KK1BLR19DT05GSUdfUEFUSCAuPSAiOiR7U1RBR0lOR19ESVJ9LyR7TUFDSElORX0ke2RhdGFkaXJ9L3BrZ2NvbmZpZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL3ByZXhwb3J0LmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9wcmV4cG9ydC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZjNhY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9wcmV4cG9ydC5jb25mCkBAIC0wLDAgKzEgQEAKK0lOSEVSSVQgKz0gInByZXhwb3J0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvcHJpbXBvcnQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3ByaW1wb3J0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk0ZWExYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3ByaW1wb3J0LmNvbmYKQEAgLTAsMCArMSBAQAorSU5IRVJJVCArPSAicHJpbXBvcnQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9zYW5pdHkuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3Nhbml0eS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMTU2ZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9zYW5pdHkuY29uZgpAQCAtMCwwICsxLDE2IEBACisjIFNhbml0eSBjaGVja3MgZm9yIGNvbW1vbiB1c2VyIG1pc2NvbmZpZ3VyYXRpb25zCisjCisjIFNlZSBzYW5pdHkuYmJjbGFzcworIworIyBFeHBlcnQgdXNlcnMgY2FuIGNvbmZpcm0gdGhlaXIgc2FuaXR5IHdpdGggInRvdWNoIGNvbmYvc2FuaXR5LmNvbmYiCitCQl9NSU5fVkVSU0lPTiA9ICIxLjI3LjEiCisKK1NBTklUWV9BQklGSUxFID0gIiR7VE1QRElSfS9hYmlfdmVyc2lvbiIKKworU0FOSVRZX1ZFUlNJT04gPz0gIjEiCitMT0NBTENPTkZfVkVSU0lPTiAgPz0gIjEiCitMQVlFUl9DT05GX1ZFUlNJT04gPz0gIjYiCitTSVRFX0NPTkZfVkVSU0lPTiAgPz0gIjEiCisKK0lOSEVSSVQgKz0gInNhbml0eSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC9ibGFja2xpc3QgYi95b2N0by1wb2t5L21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L2JsYWNrbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmRiOGYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC9ibGFja2xpc3QKQEAgLTAsMCArMSw2IEBACitsaWJuZW9uMjctZ251dGxzCitvcGVuamRrLTYtanJlLWhlYWRsZXNzCitvcGVuamRrLTYtanJlLWxpYgorb3Blbmpkay02LWpyZQorbGliZGJ1cy0xLTMKK2xpYm5lb24yNy1nbnV0bHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvZmlsdGVycyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDQ3ZjcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC9maWx0ZXJzCkBAIC0wLDAgKzEsNyBAQAorL3Vzci9sb2NhbC9saWIvcHl0aG9uMi42CisvdXNyL2xpYi9weXRob24yLjYKKy91c3IvbGliL3B5bW9kdWxlcy9weXRob24yLjYKKy91c3IvbGliL3BlcmwvNS4xMAorIyB3aGljaCBpcyBwYXJ0IG9mIHRoZSBkZWJpYW51dGlscyBwYWNrYWdlcywgYnV0IHdlIGRvbid0IHdhbnQgdG8gcHV0IHRoZSBlbnRpcmUKKyMgZGViaWFudXRpbHMgcGFja2FnZSBpbiB0aGUgd2hpdGVsaXN0LgorL3Vzci9iaW4vd2hpY2gKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvd2hpdGVsaXN0IGIveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC93aGl0ZWxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBmZTk2MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvd2hpdGVsaXN0CkBAIC0wLDAgKzEsMjMgQEAKK2Jhc2UtZmlsZXMKK2Rhc2gKK2xpYmFjbDEKK2xpYmF0dHIxCitsaWJiejItMS4wCitsaWJjNgorbGliYy1iaW4KK2xpYmdsaWIyLjAtMAorbGlibmN1cnNlczUKK2xpYnNlbGludXgxCitsaWJzcWxpdGUzLTAKK2xpYnNzbDAuOS44CittaW1lLXN1cHBvcnQKK3BlcmwtYmFzZQorcHl0aG9uMi42CitweXRob24yLjYtbWluaW1hbAorcHl0aG9uLWFwcG9ydAorcHl0aG9uLWdzdDAuMTAKK3B5dGhvbi1pbWFnaW5nCitweXRob24tbWluaW1hbAorcHl0aG9uLXN1cHBvcnQKK3B5dGhvbi16b3BlLmludGVyZmFjZQoremxpYjFnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvYmxhY2tsaXN0IGIveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL2JsYWNrbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTZiY2I0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL2JsYWNrbGlzdApAQCAtMCwwICsxLDIgQEAKK3VkZXYKK2RrcGcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy9maWx0ZXJzIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL2ZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxMGZjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy9maWx0ZXJzCkBAIC0wLDAgKzEsMTAgQEAKKy90bXAKKy9ldGMvbG9jYWx0aW1lCisvZXRjL2xkLnNvLmNhY2hlCisvZXRjL2xkLnNvLmNvbmYKKy9ldGMvcGFzc3dkCisvZXRjL2dyb3VwCisvZXRjL25zc3dpdGNoLmNvbmYKKy9wcm9jCisvZGV2L251bGwKKy9kZXYvdHR5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvd2hpdGVsaXN0IGIveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL3doaXRlbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGVjMmFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL3doaXRlbGlzdApAQCAtMCwwICsxLDE1IEBACitiYXNoCitiemlwMgorY2NhY2hlCitjb3JldXRpbHMKK2NwcAorZmlsZQorZmluZHV0aWxzCitnYXdrCitncmVwCitob3N0bmFtZQorbWFrZQorc2VkCit0YXIKK3V0aWwtbGludXgKK3psaWIxZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvdG9hc3RlcmNvbmYuanNvbiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3RvYXN0ZXJjb25mLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhlNDJlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3RvYXN0ZXJjb25mLmpzb24KQEAgLTAsMCArMSwxMDYgQEAKK3sKKyAgICAiY29uZmlnIjogeworICAgICAgICAiTUFDSElORSIgICAgICA6ICJxZW11eDg2IiwKKyAgICAgICAgIkRJU1RSTyIgICAgICAgOiAicG9reSIsCisgICAgICAgICJJTUFHRV9GU1RZUEVTIjogImV4dDMgamZmczIgdGFyLmJ6MiIsCisgICAgICAgICJJTUFHRV9JTlNUQUxMX2FwcGVuZCI6ICIiLAorICAgICAgICAiUEFDS0FHRV9DTEFTU0VTIjogInBhY2thZ2VfcnBtIiwKKyAgICAgICAgIlNES01BQ0hJTkUiICAgOiAieDg2XzY0IgorICAgIH0sCisgICAgImxheWVyc291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiTG9jYWwgT3BlbkVtYmVkZGVkIiwKKyAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImxvY2FsIiwKKyAgICAgICAgICAgICJhcGl1cmwiOiAiLi4vLi4vIiwKKyAgICAgICAgICAgICJicmFuY2hlcyI6IFsiSEVBRCIsICJtYXN0ZXIiLCAiZmlkbyIsICJkaXp6eSJdLAorICAgICAgICAgICAgImxheWVycyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm9wZW5lbWJlZGRlZC1jb3JlIiwKKyAgICAgICAgICAgICAgICAgICAgImxvY2FsX3BhdGgiOiAibWV0YSIsCisgICAgICAgICAgICAgICAgICAgICJ2Y3NfdXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgICAgICAgICAiZGlycGF0aCI6ICJtZXRhIgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiT3BlbkVtYmVkZGVkIiwKKyAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImxheWVyaW5kZXgiLAorICAgICAgICAgICAgImFwaXVybCI6ICJodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9hcGkvIiwKKyAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJJbXBvcnRlZCBsYXllcnMiLAorICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAiaW1wb3J0ZWQiLAorICAgICAgICAgICAgImFwaXVybCI6ICIiLAorICAgICAgICAgICAgImJyYW5jaGVzIjogWyJtYXN0ZXIiLCAiZmlkbyIsICJkaXp6eSIsICJIRUFEIl0KKworICAgICAgICB9CisgICAgXSwKKyAgICAiYml0YmFrZSIgOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIm1hc3RlciIsCisgICAgICAgICAgICAiZ2l0dXJsIjogImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiLAorICAgICAgICAgICAgImJyYW5jaCI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgImRpcnBhdGgiOiAiIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJmaWRvIiwKKyAgICAgICAgICAgICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIsCisgICAgICAgICAgICAiYnJhbmNoIjogIjEuMjYiLAorICAgICAgICAgICAgImRpcnBhdGgiOiAiIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaXp6eSIsCisgICAgICAgICAgICAiZ2l0dXJsIjogImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiLAorICAgICAgICAgICAgImJyYW5jaCI6ICIxLjI0IiwKKyAgICAgICAgICAgICJkaXJwYXRoIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiSEVBRCIsCisgICAgICAgICAgICAiZ2l0dXJsIjogImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiLAorICAgICAgICAgICAgImJyYW5jaCI6ICJIRUFEIiwKKyAgICAgICAgICAgICJkaXJwYXRoIjogIiIKKyAgICAgICAgfQorICAgIF0sCisKKyAgICAiZGVmYXVsdHJlbGVhc2UiOiAibWFzdGVyIiwKKworICAgICJyZWxlYXNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibWFzdGVyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPcGVuRW1iZWRkZWQgbWFzdGVyIiwKKyAgICAgICAgICAgICJiaXRiYWtlIjogIm1hc3RlciIsCisgICAgICAgICAgICAiYnJhbmNoIjogIm1hc3RlciIsCisgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiBdLAorICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIE9wZW5FbWJlZGRlZCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgImhlbHB0ZXh0IjogIlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgdXNpbmcgdGhlIHRpcCBvZiB0aGUgPGEgaHJlZj1cImh0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUvbG9nL1wiPk9wZW5FbWJlZGRlZCBtYXN0ZXI8L2E+IGJyYW5jaCwgd2hlcmUgYWN0aXZlIGRldmVsb3BtZW50IHRha2VzIHBsYWNlLiBUaGlzIGlzIG5vdCBhIHN0YWJsZSBicmFuY2gsIHNvIHlvdXIgYnVpbGRzIG1pZ2h0IG5vdCB3b3JrIGFzIGV4cGVjdGVkLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZmlkbyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT3BlbkVtYmVkZGVkIEZpZG8iLAorICAgICAgICAgICAgImJpdGJha2UiOiAiZmlkbyIsCisgICAgICAgICAgICAiYnJhbmNoIjogImZpZG8iLAorICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIgXSwKKyAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBPcGVuRW1iZWRkZWQiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKKyAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHdpdGggdGhlIHRpcCBvZiB0aGUgPGEgaHJlZj1cImh0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUvbG9nLz9oPWZpZG9cIj5PcGVuRW1iZWRkZWQgXCJGaWRvXCI8L2E+IGJyYW5jaCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGl6enkiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9wZW5FbWJlZGRlZCBEaXp6eSIsCisgICAgICAgICAgICAiYml0YmFrZSI6ICJkaXp6eSIsCisgICAgICAgICAgICAiYnJhbmNoIjogImRpenp5IiwKKyAgICAgICAgICAgICJkZWZhdWx0bGF5ZXJzIjogWyAib3BlbmVtYmVkZGVkLWNvcmUiIF0sCisgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgT3BlbkVtYmVkZGVkIiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCisgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB0aXAgb2YgdGhlIDxhIGhyZWY9XCJodHRwOi8vY2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2xvZy8/aD1kaXp6eVwiPk9wZW5FbWJlZGRlZCBcIkRpenp5XCI8L2E+IGJyYW5jaCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9jYWwiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvY2FsIE9wZW5FbWJlZGRlZCIsCisgICAgICAgICAgICAiYml0YmFrZSI6ICJIRUFEIiwKKyAgICAgICAgICAgICJicmFuY2giOiAiSEVBRCIsCisgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiBdLAorICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIE9wZW5FbWJlZGRlZCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgImhlbHB0ZXh0IjogIlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgd2l0aCB0aGUgdmVyc2lvbiBvZiBPcGVuRW1iZWRkZWQgdGhhdCB5b3UgaGF2ZSBjbG9uZWQgb3IgZG93bmxvYWRlZCB0byB5b3VyIGNvbXB1dGVyLiIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUFMIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BQUwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ4NDIyNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUFMCkBAIC0wLDAgKzEsNTEgQEAKKworQXR0cmlidXRpb24gQXNzdXJhbmNlIExpY2Vuc2UKK0NvcHlyaWdodCAoYykgMjAwMiBieSBBVVRIT1IKK1BST0ZFU1NJT05BTCBJREVOVElGSUNBVElPTiAqIFVSTAorIlBST01PVElPTkFMIFNMT0dBTiBGT1IgQVVUSE9SYFMgUFJPRkVTU0lPTkFMIFBSQUNUSUNFIgorCitBbGwgUmlnaHRzIFJlc2VydmVkCitBVFRSSUJVVElPTiBBU1NVUkFOQ0UgTElDRU5TRSAoYWRhcHRlZCBmcm9tIHRoZSBvcmlnaW5hbCBCU0QgbGljZW5zZSkKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGNvbmRpdGlvbnMgYmVsb3cgYXJlIG1ldC4KK1RoZXNlIGNvbmRpdGlvbnMgcmVxdWlyZSBhIG1vZGVzdCBhdHRyaWJ1dGlvbiB0byA8QVVUSE9SPiAodGhlCisiQXV0aG9yIiksIHdobyBob3BlcyB0aGF0IGl0cyBwcm9tb3Rpb25hbCB2YWx1ZSBtYXkgaGVscCBqdXN0aWZ5IHRoZQordGhvdXNhbmRzIG9mIGRvbGxhcnMgaW4gb3RoZXJ3aXNlIGJpbGxhYmxlIHRpbWUgaW52ZXN0ZWQgaW4gd3JpdGluZwordGhpcyBhbmQgb3RoZXIgZnJlZWx5IGF2YWlsYWJsZSwgb3Blbi1zb3VyY2Ugc29mdHdhcmUuCisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSwgaW4gd2hvbGUgb3IgcGFydCBhbmQgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24gKHRoZSAiQ29kZSIpLCBtdXN0IHByb21pbmVudGx5IGRpc3BsYXkgdGhpcyBHUEctc2lnbmVkCit0ZXh0IGluIHZlcmlmaWFibGUgZm9ybS4KKzIuIFJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgQ29kZSBpbiBiaW5hcnkgZm9ybSBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5Cit0aGlzIEdQRy1zaWduZWQgdGV4dCBpbiBhbnkgZG9jdW1lbnRhdGlvbiBhbmQsIGVhY2ggdGltZSB0aGUgcmVzdWx0aW5nCitleGVjdXRhYmxlIHByb2dyYW0gb3IgYSBwcm9ncmFtIGRlcGVuZGVudCB0aGVyZW9uIGlzIGxhdW5jaGVkLCBhCitwcm9taW5lbnQgZGlzcGxheSAoZS5nLiwgc3BsYXNoIHNjcmVlbiBvciBiYW5uZXIgdGV4dCkgb2YgdGhlIEF1dGhvcmBzCithdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbiwgd2hpY2ggaW5jbHVkZXM6CisoYSkgTmFtZSAoIkFVVEhPUiIpLAorKGIpIFByb2Zlc3Npb25hbCBpZGVudGlmaWNhdGlvbiAoIlBST0ZFU1NJT05BTCBJREVOVElGSUNBVElPTiIpLCBhbmQKKyhjKSBVUkwgKCJVUkwiKS4KKzMuIE5laXRoZXIgdGhlIG5hbWUgbm9yIGFueSB0cmFkZW1hcmsgb2YgdGhlIEF1dGhvciBtYXkgYmUgdXNlZCB0bworZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMKK3ByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKzQuIFVzZXJzIGFyZSBlbnRpcmVseSByZXNwb25zaWJsZSwgdG8gdGhlIGV4Y2x1c2lvbiBvZiB0aGUgQXV0aG9yIGFuZAorYW55IG90aGVyIHBlcnNvbnMsIGZvciBjb21wbGlhbmNlIHdpdGggKDEpIHJlZ3VsYXRpb25zIHNldCBieSBvd25lcnMgb3IKK2FkbWluaXN0cmF0b3JzIG9mIGVtcGxveWVkIGVxdWlwbWVudCwgKDIpIGxpY2Vuc2luZyB0ZXJtcyBvZiBhbnkgb3RoZXIKK3NvZnR3YXJlLCBhbmQgKDMpIGxvY2FsIHJlZ3VsYXRpb25zIHJlZ2FyZGluZyB1c2UsIGluY2x1ZGluZyB0aG9zZQorcmVnYXJkaW5nIGltcG9ydCwgZXhwb3J0LCBhbmQgdXNlIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuCisKK1RISVMgRlJFRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8KK0VWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQU5ZIENPTlRSSUJVVE9SIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorRUZGRUNUUyBPRiBVTkFVVEhPUklaRUQgT1IgTUFMSUNJT1VTIE5FVFdPUksgQUNDRVNTOworUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECitBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLUVuZCBvZiBMaWNlbnNlCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTEuMiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTEuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODEzMWU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMS4yCkBAIC0wLDAgKzEsMTIzIEBACisKKyAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlCisgIFZlcnNpb24gMS4yCisKK1RoaXMgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCAKKyh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lciAodGhlICJMaWNlbnNvciIpIGhhcyBwbGFjZWQgdGhlIAorZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSAKK09yaWdpbmFsIFdvcms6CisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAxLjIKKworR3JhbnQgb2YgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIAorY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayAoIllvdSIpIGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCAKK25vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgbm9uLXN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UgKDEpIHRvIHVzZSwgY29weSwgCittb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgCitPcmlnaW5hbCBXb3JrIGFuZCBkZXJpdmF0aXZlIHdvcmtzIHRoZXJlb2YsIGFuZCAoMikgdW5kZXIgcGF0ZW50IGNsYWltcyAKK293bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCAKK1dvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3IgCitzYWxlIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBkZXJpdmF0aXZlIHdvcmtzIHRoZXJlb2YsIHN1YmplY3QgdG8gdGhlIAorZm9sbG93aW5nIGNvbmRpdGlvbnMuCisKK0F0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IAorRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCBvciB0cmFkZW1hcmsgCitub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSAKK25vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gCisiQXR0cmlidXRpb24gTm90aWNlLiIgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSAKK1dvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseSAKK2NhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay4KKworRXhjbHVzaW9ucyBmcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIAorbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciAKK3RyYWRlbWFya3Mgb3Igc2VydmljZSBtYXJrcywgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIAorZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIAorb2YgdGhlIExpY2Vuc29yLgorCitXYXJyYW50eSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IAoraW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGlzIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciB0aGF0IHRoZSBPcmlnaW5hbCAKK1dvcmsgaXMgZGlzdHJpYnV0ZWQgYnkgTGljZW5zb3IgdW5kZXIgYSB2YWxpZCBjdXJyZW50IGxpY2Vuc2UgZnJvbSB0aGUgCitjb3B5cmlnaHQgb3duZXIuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoZSBpbW1lZGlhdGVseSBwcm9jZWVkaW5nIAorc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiAiQVMgSVMiIAorQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCAKK2xpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIAorRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIAorV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IAorb2YgdGhpcyBMaWNlbnNlLiBObyBsaWNlbnNlIHRvIE9yaWdpbmFsIFdvcmsgaXMgZ3JhbnRlZCBoZXJldW5kZXIgZXhjZXB0IAordW5kZXIgdGhpcyBkaXNjbGFpbWVyLgorCitMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCAKK3doZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUgCitMaWNlbnNvciBiZSBsaWFibGUgdG8gYW55IHBlcnNvbiBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIAoraW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCAKK29mIHRoaXMgTGljZW5zZSBvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCAKK2xpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgCitvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyAKK2xpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byBsaWFiaWxpdHkgZm9yIGRlYXRoIG9yIHBlcnNvbmFsIAoraW5qdXJ5IHJlc3VsdGluZyBmcm9tIExpY2Vuc29yYHMgbmVnbGlnZW5jZSB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3IAorcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4gU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIAorbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhpcyBleGNsdXNpb24gYW5kIAorbGltaXRhdGlvbiBtYXkgbm90IGFwcGx5IHRvIFlvdS4KKworTGljZW5zZSB0byBTb3VyY2UgQ29kZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgCit0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kIGFsbCBhdmFpbGFibGUgCitkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgaGVyZWJ5IAorYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCAKK1dvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gCitMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIAorbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IAorcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciAKK2FzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBieSAKK3B1Ymxpc2hpbmcgdGhlIGFkZHJlc3Mgb2YgdGhhdCBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IGluIGEgbm90aWNlIGltbWVkaWF0ZWx5IAorZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgYXBwbGllcyB0byB0aGUgT3JpZ2luYWwgV29yay4KKworTXV0dWFsIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIAorYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgCitieSB0aGlzIExpY2Vuc2UgaWYgWW91IGZpbGUgYSBsYXdzdWl0IGluIGFueSBjb3VydCBhbGxlZ2luZyB0aGF0IGFueSBPU0kgCitDZXJ0aWZpZWQgb3BlbiBzb3VyY2Ugc29mdHdhcmUgdGhhdCBpcyBsaWNlbnNlZCB1bmRlciBhbnkgbGljZW5zZSBjb250YWluaW5nIAordGhpcyAiTXV0dWFsIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uIiBjbGF1c2UgaW5mcmluZ2VzIGFueSBwYXRlbnQgCitjbGFpbXMgdGhhdCBhcmUgZXNzZW50aWFsIHRvIHVzZSB0aGF0IHNvZnR3YXJlLgorCitSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgCityZXN0cmljdGVkIG9yIGNvbmRpdGlvbmVkIGJ5IHRoaXMgTGljZW5zZSBvciBieSBsYXcsIGFuZCBMaWNlbnNvciBwcm9taXNlcyAKK25vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4KKworVGhpcyBsaWNlbnNlIGlzIENvcHlyaWdodCAoQykgMjAwMiBMYXdyZW5jZSBFLiBSb3Nlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBsaWNlbnNlIHdpdGhvdXQgCittb2RpZmljYXRpb24uIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbiAKK3Blcm1pc3Npb24gb2YgaXRzIGNvcHlyaWdodCBvd25lci4KKworLS0gCitFTkQgT0YgTElDRU5TRS4gVGhlIGZvbGxvd2luZyBpcyBpbnRlbmRlZCB0byBkZXNjcmliZSB0aGUgZXNzZW50aWFsIAorZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIChBRkwpIHZlcnNpb24gMS4wIGFuZCBvdGhlciAKK29wZW4gc291cmNlIGxpY2Vuc2VzOgorCitUaGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIGlzIHNpbWlsYXIgdG8gdGhlIEJTRCwgTUlULCBVb0kvTkNTQSBhbmQgQXBhY2hlIAorbGljZW5zZXMgaW4gbWFueSByZXNwZWN0cyBidXQgaXQgaXMgaW50ZW5kZWQgdG8gc29sdmUgYSBmZXcgcHJvYmxlbXMgd2l0aCAKK3Rob3NlIGxpY2Vuc2VzLgorICAgIAorKiBUaGUgQUZMIGlzIHdyaXR0ZW4gc28gYXMgdG8gbWFrZSBpdCBjbGVhciB3aGF0IHNvZnR3YXJlIGlzIGJlaW5nIAorbGljZW5zZWQgKGJ5IHRoZSBpbmNsdXNpb24gb2YgYSBzdGF0ZW1lbnQgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIAoraW4gdGhlIHNvZnR3YXJlKS4gVGhpcyB3YXksIHRoZSBsaWNlbnNlIGZ1bmN0aW9ucyBiZXR0ZXIgdGhhbiBhIHRlbXBsYXRlIAorbGljZW5zZS4gVGhlIEJTRCwgTUlUIGFuZCBVb0kvTkNTQSBsaWNlbnNlcyBhcHBseSB0byB1bmlkZW50aWZpZWQgc29mdHdhcmUuCisgICAgCisqIFRoZSBBRkwgY29udGFpbnMgYSBjb21wbGV0ZSBjb3B5cmlnaHQgZ3JhbnQgdG8gdGhlIHNvZnR3YXJlLiBUaGUgQlNEIAorYW5kIEFwYWNoZSBsaWNlbnNlcyBhcmUgdmFndWUgYW5kIGluY29tcGxldGUgaW4gdGhhdCByZXNwZWN0LgorICAgIAorKiBUaGUgQUZMIGNvbnRhaW5zIGEgY29tcGxldGUgcGF0ZW50IGdyYW50IHRvIHRoZSBzb2Z0d2FyZS4gVGhlIEJTRCwgTUlULCAKK1VvSS9OQ1NBIGFuZCBBcGFjaGUgbGljZW5zZXMgcmVseSBvbiBhbiBpbXBsaWVkIHBhdGVudCBsaWNlbnNlIGFuZCBjb250YWluIAorbm8gZXhwbGljaXQgcGF0ZW50IGdyYW50LgorICAgIAorKiBUaGUgQUZMIG1ha2VzIGl0IGNsZWFyIHRoYXQgbm8gdHJhZGVtYXJrIHJpZ2h0cyBhcmUgZ3JhbnRlZCB0byB0aGUgCitsaWNlbnNvcmBzIHRyYWRlbWFya3MuIFRoZSBBcGFjaGUgbGljZW5zZSBjb250YWlucyBzdWNoIGEgcHJvdmlzaW9uLCBidXQgdGhlIAorQlNELCBNSVQgYW5kIFVvSS9OQ1NBIGxpY2Vuc2VzIGRvIG5vdC4KKyAgICAKKyogVGhlIEFGTCBpbmNsdWRlcyB0aGUgd2FycmFudHkgYnkgdGhlIGxpY2Vuc29yIHRoYXQgaXQgZWl0aGVyIG93bnMgdGhlIAorY29weXJpZ2h0IG9yIHRoYXQgaXQgaXMgZGlzdHJpYnV0aW5nIHRoZSBzb2Z0d2FyZSB1bmRlciBhIGxpY2Vuc2UuIE5vbmUgb2YgCit0aGUgb3RoZXIgbGljZW5zZXMgY29udGFpbiB0aGF0IHdhcnJhbnR5LiBBbGwgb3RoZXIgd2FycmFudGllcyBhcmUgZGlzY2xhaW1lZCwgCithcyBpcyB0aGUgY2FzZSBmb3IgdGhlIG90aGVyIGxpY2Vuc2VzLgorCisqIFRoZSBBRkwgaXMgaXRzZWxmIGNvcHlyaWdodGVkICh3aXRoIHRoZSByaWdodCBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgCit3aXRob3V0IG1vZGlmaWNhdGlvbikuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBvd25lciBvZiB0aGUgY29weXJpZ2h0IHRvIHRoZSAKK2xpY2Vuc2Ugd2lsbCBjb250cm9sIGNoYW5nZXMuIFRoZSBBcGFjaGUgbGljZW5zZSBjb250YWlucyBhIGNvcHlyaWdodCBub3RpY2UsIAorYnV0IHRoZSBCU0QsIE1JVCBhbmQgVW9JL05DU0EgbGljZW5zZXMgZG8gbm90LiAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMjdhMjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0yLjAKQEAgLTAsMCArMSw0OCBAQAorCitUaGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlCisgdi4gMi4wCisKK1RoaXMgQWNhZGVtaWMgRnJlZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOiAgIAorTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDIuMAorCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgc3VibGljZW5zZWFibGUgbGljZW5zZSB0byBkbyB0aGUgZm9sbG93aW5nOiAKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXM7IAorCitiKSB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MgKCJEZXJpdmF0aXZlIFdvcmtzIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yazsgCisKK2MpIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRvIHRoZSBwdWJsaWM7IAorCitkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmQgCisKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuICAgCisKKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlLCB1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IsIHRvIG1ha2UsIHVzZSwgc2VsbCBhbmQgb2ZmZXIgZm9yIHNhbGUgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuICAKKworMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZCBhbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiAgTGljZW5zb3IgaGVyZWJ5IGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiAgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgYnkgcHVibGlzaGluZyB0aGUgYWRkcmVzcyBvZiB0aGF0IGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgaW4gYSBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgYXBwbGllcyB0byB0aGUgT3JpZ2luYWwgV29yay4gICAgCisKKzQpIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOZWl0aGVyIHRoZSBuYW1lcyBvZiBMaWNlbnNvciwgbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLCBub3IgYW55IG9mIHRoZWlyIHRyYWRlbWFya3Mgb3Igc2VydmljZSBtYXJrcywgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIE9yaWdpbmFsIFdvcmsgd2l0aG91dCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgTGljZW5zb3IuICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiAgTm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byBtYWtlLCB1c2UsIHNlbGwgb3Igb2ZmZXIgdG8gc2VsbCBlbWJvZGltZW50cyBvZiBhbnkgcGF0ZW50IGNsYWltcyBvdGhlciB0aGFuIHRoZSBsaWNlbnNlZCBjbGFpbXMgZGVmaW5lZCBpbiBTZWN0aW9uIDIuICBObyByaWdodCBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsuICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuICAKKworNSkgVGhpcyBzZWN0aW9uIGludGVudGlvbmFsbHkgb21pdHRlZC4gIAorCis2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFyayBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBhbmQgYW55IGRlc2NyaXB0aXZlIHRleHQgaWRlbnRpZmllZCB0aGVyZWluIGFzIGFuICJBdHRyaWJ1dGlvbiBOb3RpY2UuIiAgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUgdG8gY2FycnkgYSBwcm9taW5lbnQgQXR0cmlidXRpb24gTm90aWNlIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLiAgCisKKzcpIFdhcnJhbnR5IG9mIFByb3ZlbmFuY2UgYW5kIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgYW5kIHRoZSBwYXRlbnQgcmlnaHRzIGdyYW50ZWQgaGVyZWluIGJ5IExpY2Vuc29yIGFyZSBvd25lZCBieSB0aGUgTGljZW5zb3Igb3IgYXJlIHN1YmxpY2Vuc2VkIHRvIFlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlIGNvbnRyaWJ1dG9yKHMpIG9mIHRob3NlIGNvcHlyaWdodHMgYW5kIHBhdGVudCByaWdodHMuICBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGUgaW1tZWRpYXRlbHkgcHJvY2VlZGluZyBzZW50ZW5jZSwgdGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuICBUaGlzIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbnNlLiAgTm8gbGljZW5zZSB0byBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgaGVyZXVuZGVyIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuICAKKworOCkgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHNoYWxsIHRoZSBMaWNlbnNvciBiZSBsaWFibGUgdG8gYW55IHBlcnNvbiBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMuICBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byBsaWFiaWxpdHkgZm9yIGRlYXRoIG9yIHBlcnNvbmFsIGluanVyeSByZXN1bHRpbmcgZnJvbSBMaWNlbnNvcmBzIG5lZ2xpZ2VuY2UgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiAgU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHRoaXMgZXhjbHVzaW9uIGFuZCBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LiAgCisKKzkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiBZb3UgZGlzdHJpYnV0ZSAgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBOb3RoaW5nIGVsc2UgYnV0IHRoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGdyYW50cyBZb3UgcGVybWlzc2lvbiB0byBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrIG9yIHRvIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaW4gU2VjdGlvbiAxIGhlcmVpbiwgYW5kIGFueSBhdHRlbXB0IHRvIGRvIHNvIGV4Y2VwdCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIChvciBhbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgaXMgZXhwcmVzc2x5IHByb2hpYml0ZWQgYnkgVS5TLiBjb3B5cmlnaHQgbGF3LCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kIGJ5IGludGVybmF0aW9uYWwgdHJlYXR5LiAgVGhlcmVmb3JlLCBieSBleGVyY2lzaW5nIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMSBoZXJlaW4sIFlvdSBpbmRpY2F0ZSBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgICAKKworMTApIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSBhcyBvZiB0aGUgZGF0ZSBZb3UgY29tbWVuY2UgYW4gYWN0aW9uLCBpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0sIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IChpKSBhZ2FpbnN0IExpY2Vuc29yIHdpdGggcmVzcGVjdCB0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHNvZnR3YXJlIG9yIChpaSkgYWdhaW5zdCBhbnkgZW50aXR5IHdpdGggcmVzcGVjdCB0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHRoZSBPcmlnaW5hbCBXb3JrIChidXQgZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKS4gICAgCisKKzExKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBBbnkgYWN0aW9uIG9yIHN1aXQgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiAgQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIHRoZSBVLlMuIENvcHlyaWdodCBBY3QsIDE3IFUuUy5DLiDCpCAxMDEgZXQgc2VxLiwgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuICAKKworMTIpIEF0dG9ybmV5cyBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uICBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiAgCisKKzEzKSBNaXNjZWxsYW5lb3VzLiBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiAgICAKKworMTQpIERlZmluaXRpb24gb2YgIllvdSIgaW4gVGhpcyBMaWNlbnNlLiAiWW91IiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiAgRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LiAgRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LiAgIAorCisxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4gICAgCisKK1RoaXMgbGljZW5zZSBpcyBDb3B5cmlnaHQgKEMpIDIwMDMgTGF3cmVuY2UgRS4gUm9zZW4uICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMgbGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIGl0cyBjb3B5cmlnaHQgb3duZXIuIAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0yLjEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0yLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI4NGU0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTIuMQpAQCAtMCwwICsxLDUwIEBACisKK1RoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UKK3YuIDIuMQorCitUaGlzIEFjYWRlbWljIEZyZWUgTGljZW5zZSAodGhlICJMaWNlbnNlIikgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwICh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lciAodGhlICJMaWNlbnNvciIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazoKKworTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDIuMQorCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgc3VibGljZW5zZWFibGUgbGljZW5zZSB0byBkbyB0aGUgZm9sbG93aW5nOgorCithKSB0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzOworCitiKSB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MgKCJEZXJpdmF0aXZlIFdvcmtzIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yazsKKworYykgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdG8gdGhlIHB1YmxpYzsKKworZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kCisKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuCisKKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlLCB1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IsIHRvIG1ha2UsIHVzZSwgc2VsbCBhbmQgb2ZmZXIgZm9yIHNhbGUgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuCisKKzMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgaGVyZWJ5IGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBieSBwdWJsaXNoaW5nIHRoZSBhZGRyZXNzIG9mIHRoYXQgaW5mb3JtYXRpb24gcmVwb3NpdG9yeSBpbiBhIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgdGhhdCBhcHBsaWVzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLgorCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciB0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3MsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIExpY2Vuc29yLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCBvciBvZmZlciB0byBzZWxsIGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBXb3JrLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCisKKzUpIFRoaXMgc2VjdGlvbiBpbnRlbnRpb25hbGx5IG9taXR0ZWQuCisKKzYpIEF0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gIkF0dHJpYnV0aW9uIE5vdGljZS4iIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay4KKworNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBhbmQgdGhlIHBhdGVudCByaWdodHMgZ3JhbnRlZCBoZXJlaW4gYnkgTGljZW5zb3IgYXJlIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciBhcmUgc3VibGljZW5zZWQgdG8gWW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY29udHJpYnV0b3Iocykgb2YgdGhvc2UgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cy4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhlIGltbWVkaWF0ZWx5IHByb2NlZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiAiQVMgSVMiIEJBU0lTIGFuZCBXSVRIT1VUIFdBUlJBTlRZLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuIFRoaXMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBjb25zdGl0dXRlcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGlzIExpY2Vuc2UuIE5vIGxpY2Vuc2UgdG8gT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGhlcmV1bmRlciBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLgorCis4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnkgcGVyc29uIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gbGlhYmlsaXR5IGZvciBkZWF0aCBvciBwZXJzb25hbCBpbmp1cnkgcmVzdWx0aW5nIGZyb20gTGljZW5zb3JgcyBuZWdsaWdlbmNlIHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4gU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHRoaXMgZXhjbHVzaW9uIGFuZCBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LgorCis5KSBBY2NlcHRhbmNlIGFuZCBUZXJtaW5hdGlvbi4gSWYgWW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIE5vdGhpbmcgZWxzZSBidXQgdGhpcyBMaWNlbnNlIChvciBhbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgZ3JhbnRzIFlvdSBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCBpbiBTZWN0aW9uIDEgaGVyZWluLCBhbmQgYW55IGF0dGVtcHQgdG8gZG8gc28gZXhjZXB0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBpcyBleHByZXNzbHkgcHJvaGliaXRlZCBieSBVLlMuIGNvcHlyaWdodCBsYXcsIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgYnkgaW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoZXJlZm9yZSwgYnkgZXhlcmNpc2luZyBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDEgaGVyZWluLCBZb3UgaW5kaWNhdGUgWW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworMTApIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSBhcyBvZiB0aGUgZGF0ZSBZb3UgY29tbWVuY2UgYW4gYWN0aW9uLCBpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0sIGFnYWluc3QgTGljZW5zb3Igb3IgYW55IGxpY2Vuc2VlIGFsbGVnaW5nIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgaW5mcmluZ2VzIGEgcGF0ZW50LiBUaGlzIHRlcm1pbmF0aW9uIHByb3Zpc2lvbiBzaGFsbCBub3QgYXBwbHkgZm9yIGFuIGFjdGlvbiBhbGxlZ2luZyBwYXRlbnQgaW5mcmluZ2VtZW50IGJ5IGNvbWJpbmF0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlLgorCisxMSkgSnVyaXNkaWN0aW9uLCBWZW51ZSBhbmQgR292ZXJuaW5nIExhdy4gQW55IGFjdGlvbiBvciBzdWl0IHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBtYXkgYmUgYnJvdWdodCBvbmx5IGluIHRoZSBjb3VydHMgb2YgYSBqdXJpc2RpY3Rpb24gd2hlcmVpbiB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBpbiB3aGljaCBMaWNlbnNvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcywgYW5kIHVuZGVyIHRoZSBsYXdzIG9mIHRoYXQganVyaXNkaWN0aW9uIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSBvciBhZnRlciBpdHMgdGVybWluYXRpb24gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgcmVxdWlyZW1lbnRzIGFuZCBwZW5hbHRpZXMgb2YgdGhlIFUuUy4gQ29weXJpZ2h0IEFjdCwgMTcgVS5TLkMuICYjMTk0OyYjMTY3OyAxMDEgZXQgc2VxLiwgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworMTIpIEF0dG9ybmV5cyBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzEzKSBNaXNjZWxsYW5lb3VzLiBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuCisKKzE0KSBEZWZpbml0aW9uIG9mICJZb3UiIGluIFRoaXMgTGljZW5zZS4gIllvdSIgdGhyb3VnaG91dCB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSwgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzE1KSBSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMgbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LgorCitUaGlzIGxpY2Vuc2UgaXMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgTGF3cmVuY2UgRS4gUm9zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGlzIGxpY2Vuc2Ugd2l0aG91dCBtb2RpZmljYXRpb24uIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIGl0cyBjb3B5cmlnaHQgb3duZXIuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTMuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjZjMjU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMy4wCkBAIC0wLDAgKzEsMjcgQEAKKworQWNhZGVtaWMgRnJlZSBMaWNlbnNlICgmIzgyMjA7QUZMJiM4MjIxOykgdi4gMy4wCitUaGlzIEFjYWRlbWljIEZyZWUgTGljZW5zZSAodGhlICJMaWNlbnNlIikgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwICh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lciAodGhlICJMaWNlbnNvciIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBsaWNlbnNpbmcgbm90aWNlIGFkamFjZW50IHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazoKK0xpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAzLjAKKworMSkgR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIExpY2Vuc29yIGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgc3VibGljZW5zYWJsZSBsaWNlbnNlLCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjb3B5cmlnaHQsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CithKSB0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzLCBlaXRoZXIgYWxvbmUgb3IgYXMgcGFydCBvZiBhIGNvbGxlY3RpdmUgd29yazsKK2IpIHRvIHRyYW5zbGF0ZSwgYWRhcHQsIGFsdGVyLCB0cmFuc2Zvcm0sIG1vZGlmeSwgb3IgYXJyYW5nZSB0aGUgT3JpZ2luYWwgV29yaywgdGhlcmVieSBjcmVhdGluZyBkZXJpdmF0aXZlIHdvcmtzICgiRGVyaXZhdGl2ZSBXb3JrcyIpIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcms7CitjKSB0byBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0byB0aGUgcHVibGljLCB1bmRlciBhbnkgbGljZW5zZSBvZiB5b3VyIGNob2ljZSB0aGF0IGRvZXMgbm90IGNvbnRyYWRpY3QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBpbmNsdWRpbmcgTGljZW5zb3ImIzgyMTc7cyByZXNlcnZlZCByaWdodHMgYW5kIHJlbWVkaWVzLCBpbiB0aGlzIEFjYWRlbWljIEZyZWUgTGljZW5zZTsKK2QpIHRvIHBlcmZvcm0gdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHk7IGFuZAorZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS4KKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1YmxpY2Vuc2FibGUgbGljZW5zZSwgdW5kZXIgcGF0ZW50IGNsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBMaWNlbnNvciB0aGF0IGFyZSBlbWJvZGllZCBpbiB0aGUgT3JpZ2luYWwgV29yayBhcyBmdXJuaXNoZWQgYnkgdGhlIExpY2Vuc29yLCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwYXRlbnRzLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZCBpbXBvcnQgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuCiszKSBHcmFudCBvZiBTb3VyY2UgQ29kZSBMaWNlbnNlLiBUaGUgdGVybSAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kIGFsbCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmsuIExpY2Vuc29yIGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmsuCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciB0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3MsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciBwZXJtaXNzaW9uIG9mIHRoZSBMaWNlbnNvci4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLCBub3RoaW5nIGluIHRoaXMgTGljZW5zZSBncmFudHMgYW55IGxpY2Vuc2UgdG8gTGljZW5zb3ImIzgyMTc7cyB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkuIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBvciBpbXBvcnQgZW1ib2RpbWVudHMgb2YgYW55IHBhdGVudCBjbGFpbXMgb3RoZXIgdGhhbiB0aGUgbGljZW5zZWQgY2xhaW1zIGRlZmluZWQgaW4gU2VjdGlvbiAyLiBObyBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgV29yay4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlIGFueSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLgorNSkgRXh0ZXJuYWwgRGVwbG95bWVudC4gVGhlIHRlcm0gIkV4dGVybmFsIERlcGxveW1lbnQiIG1lYW5zIHRoZSB1c2UsIGRpc3RyaWJ1dGlvbiwgb3IgY29tbXVuaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGluIGFueSB3YXkgc3VjaCB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgbWF5IGJlIHVzZWQgYnkgYW55b25lIG90aGVyIHRoYW4gWW91LCB3aGV0aGVyIHRob3NlIHdvcmtzIGFyZSBkaXN0cmlidXRlZCBvciBjb21tdW5pY2F0ZWQgdG8gdGhvc2UgcGVyc29ucyBvciBtYWRlIGF2YWlsYWJsZSBhcyBhbiBhcHBsaWNhdGlvbiBpbnRlbmRlZCBmb3IgdXNlIG92ZXIgYSBuZXR3b3JrLiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlIGhlcmV1bmRlciwgWW91IG11c3QgdHJlYXQgYW55IEV4dGVybmFsIERlcGxveW1lbnQgYnkgWW91IG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrIGFzIGEgZGlzdHJpYnV0aW9uIHVuZGVyIHNlY3Rpb24gMShjKS4KKzYpIEF0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIG9yIHRyYWRlbWFyayBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBhbmQgYW55IGRlc2NyaXB0aXZlIHRleHQgaWRlbnRpZmllZCB0aGVyZWluIGFzIGFuICJBdHRyaWJ1dGlvbiBOb3RpY2UuIiBZb3UgbXVzdCBjYXVzZSB0aGUgU291cmNlIENvZGUgZm9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSByZWNpcGllbnRzIHRoYXQgWW91IGhhdmUgbW9kaWZpZWQgdGhlIE9yaWdpbmFsIFdvcmsuCis3KSBXYXJyYW50eSBvZiBQcm92ZW5hbmNlIGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMaWNlbnNvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCB0aGUgcGF0ZW50IHJpZ2h0cyBncmFudGVkIGhlcmVpbiBieSBMaWNlbnNvciBhcmUgb3duZWQgYnkgdGhlIExpY2Vuc29yIG9yIGFyZSBzdWJsaWNlbnNlZCB0byBZb3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSBjb250cmlidXRvcihzKSBvZiB0aG9zZSBjb3B5cmlnaHRzIGFuZCBwYXRlbnQgcmlnaHRzLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGUgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHNlbnRlbmNlLCB0aGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugb24gYW4gIkFTIElTIiBCQVNJUyBhbmQgV0lUSE9VVCBXQVJSQU5UWSwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIG5vbi1pbmZyaW5nZW1lbnQsIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIE9GIFRIRSBPUklHSU5BTCBXT1JLIElTIFdJVEggWU9VLiBUaGlzIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbnNlLiBObyBsaWNlbnNlIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuCis4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnlvbmUgZm9yIGFueSBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLgorOSkgQWNjZXB0YW5jZSBhbmQgVGVybWluYXRpb24uIElmLCBhdCBhbnkgdGltZSwgWW91IGV4cHJlc3NseSBhc3NlbnRlZCB0byB0aGlzIExpY2Vuc2UsIHRoYXQgYXNzZW50IGluZGljYXRlcyB5b3VyIGNsZWFyIGFuZCBpcnJldm9jYWJsZSBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSWYgWW91IGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFRoaXMgTGljZW5zZSBjb25kaXRpb25zIHlvdXIgcmlnaHRzIHRvIHVuZGVydGFrZSB0aGUgYWN0aXZpdGllcyBsaXN0ZWQgaW4gU2VjdGlvbiAxLCBpbmNsdWRpbmcgeW91ciByaWdodCB0byBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgZG9pbmcgc28gd2l0aG91dCBob25vcmluZyB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpcyBwcm9oaWJpdGVkIGJ5IGNvcHlyaWdodCBsYXcgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBhZmZlY3QgY29weXJpZ2h0IGV4Y2VwdGlvbnMgYW5kIGxpbWl0YXRpb25zIChpbmNsdWRpbmcgJiM4MjIwO2ZhaXIgdXNlJiM4MjIxOyBvciAmIzgyMjA7ZmFpciBkZWFsaW5nJiM4MjIxOykuIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSB1cG9uIHlvdXIgZmFpbHVyZSB0byBob25vciB0aGUgY29uZGl0aW9ucyBpbiBTZWN0aW9uIDEoYykuCisxMCkgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSwgYWdhaW5zdCBMaWNlbnNvciBvciBhbnkgbGljZW5zZWUgYWxsZWdpbmcgdGhhdCB0aGUgT3JpZ2luYWwgV29yayBpbmZyaW5nZXMgYSBwYXRlbnQuIFRoaXMgdGVybWluYXRpb24gcHJvdmlzaW9uIHNoYWxsIG5vdCBhcHBseSBmb3IgYW4gYWN0aW9uIGFsbGVnaW5nIHBhdGVudCBpbmZyaW5nZW1lbnQgYnkgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuCisxMSkgSnVyaXNkaWN0aW9uLCBWZW51ZSBhbmQgR292ZXJuaW5nIExhdy4gQW55IGFjdGlvbiBvciBzdWl0IHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBtYXkgYmUgYnJvdWdodCBvbmx5IGluIHRoZSBjb3VydHMgb2YgYSBqdXJpc2RpY3Rpb24gd2hlcmVpbiB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBpbiB3aGljaCBMaWNlbnNvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcywgYW5kIHVuZGVyIHRoZSBsYXdzIG9mIHRoYXQganVyaXNkaWN0aW9uIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSBvciBhZnRlciBpdHMgdGVybWluYXRpb24gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgcmVxdWlyZW1lbnRzIGFuZCBwZW5hbHRpZXMgb2YgY29weXJpZ2h0IG9yIHBhdGVudCBsYXcgaW4gdGhlIGFwcHJvcHJpYXRlIGp1cmlzZGljdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKzEyKSBBdHRvcm5leXMmIzgyMTc7IEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKzEzKSBNaXNjZWxsYW5lb3VzLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4KKzE0KSBEZWZpbml0aW9uIG9mICJZb3UiIGluIFRoaXMgTGljZW5zZS4gIllvdSIgdGhyb3VnaG91dCB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSwgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4KKzE2KSBNb2RpZmljYXRpb24gb2YgVGhpcyBMaWNlbnNlLiBUaGlzIExpY2Vuc2UgaXMgQ29weXJpZ2h0ICYjMTY5OyAyMDA1IExhd3JlbmNlIFJvc2VuLiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSwgb3IgY29tbXVuaWNhdGUgdGhpcyBMaWNlbnNlIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBwZXJtaXRzIFlvdSB0byBtb2RpZnkgdGhpcyBMaWNlbnNlIGFzIGFwcGxpZWQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gRGVyaXZhdGl2ZSBXb3Jrcy4gSG93ZXZlciwgWW91IG1heSBtb2RpZnkgdGhlIHRleHQgb2YgdGhpcyBMaWNlbnNlIGFuZCBjb3B5LCBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiAodGhlICJNb2RpZmllZCBMaWNlbnNlIikgYW5kIGFwcGx5IGl0IHRvIG90aGVyIG9yaWdpbmFsIHdvcmtzIG9mIGF1dGhvcnNoaXAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IChpKSBZb3UgbWF5IG5vdCBpbmRpY2F0ZSBpbiBhbnkgd2F5IHRoYXQgeW91ciBNb2RpZmllZCBMaWNlbnNlIGlzIHRoZSAiQWNhZGVtaWMgRnJlZSBMaWNlbnNlIiBvciAiQUZMIiBhbmQgeW91IG1heSBub3QgdXNlIHRob3NlIG5hbWVzIGluIHRoZSBuYW1lIG9mIHlvdXIgTW9kaWZpZWQgTGljZW5zZTsgKGlpKSBZb3UgbXVzdCByZXBsYWNlIHRoZSBub3RpY2Ugc3BlY2lmaWVkIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGggYWJvdmUgd2l0aCB0aGUgbm90aWNlICJMaWNlbnNlZCB1bmRlciA8aW5zZXJ0IHlvdXIgbGljZW5zZSBuYW1lIGhlcmU+IiBvciB3aXRoIGEgbm90aWNlIG9mIHlvdXIgb3duIHRoYXQgaXMgbm90IGNvbmZ1c2luZ2x5IHNpbWlsYXIgdG8gdGhlIG5vdGljZSBpbiB0aGlzIExpY2Vuc2U7IGFuZCAoaWlpKSBZb3UgbWF5IG5vdCBjbGFpbSB0aGF0IHlvdXIgb3JpZ2luYWwgd29ya3MgYXJlIG9wZW4gc291cmNlIHNvZnR3YXJlIHVubGVzcyB5b3VyIE1vZGlmaWVkIExpY2Vuc2UgaGFzIGJlZW4gYXBwcm92ZWQgYnkgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSAoT1NJKSBhbmQgWW91IGNvbXBseSB3aXRoIGl0cyBsaWNlbnNlIHJldmlldyBhbmQgY2VydGlmaWNhdGlvbiBwcm9jZXNzLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FHUEwtMy4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BR1BMLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmExM2VkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BR1BMLTMuMApAQCAtMCwwICsxLDY2MSBAQAorICAgICAgICAgICAgICAgICAgICBHTlUgQUZGRVJPIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLCAxOSBOb3ZlbWJlciAyMDA3CisKKyBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQorCisgIFRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgorc29mdHdhcmUgYW5kIG90aGVyIGtpbmRzIG9mIHdvcmtzLCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZW5zdXJlCitjb29wZXJhdGlvbiB3aXRoIHRoZSBjb21tdW5pdHkgaW4gdGhlIGNhc2Ugb2YgbmV0d29yayBzZXJ2ZXIgc29mdHdhcmUuCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFuZCBvdGhlciBwcmFjdGljYWwgd29ya3MgYXJlIGRlc2lnbmVkCit0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCitvdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8KK3NoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQorc29mdHdhcmUgZm9yIGFsbCBpdHMgdXNlcnMuCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhlbSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3UKK3dhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CitmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBEZXZlbG9wZXJzIHRoYXQgdXNlIG91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBwcm90ZWN0IHlvdXIgcmlnaHRzCit3aXRoIHR3byBzdGVwczogKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyCit5b3UgdGhpcyBMaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUKK2FuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEEgc2Vjb25kYXJ5IGJlbmVmaXQgb2YgZGVmZW5kaW5nIGFsbCB1c2VycycgZnJlZWRvbSBpcyB0aGF0CitpbXByb3ZlbWVudHMgbWFkZSBpbiBhbHRlcm5hdGUgdmVyc2lvbnMgb2YgdGhlIHByb2dyYW0sIGlmIHRoZXkKK3JlY2VpdmUgd2lkZXNwcmVhZCB1c2UsIGJlY29tZSBhdmFpbGFibGUgZm9yIG90aGVyIGRldmVsb3BlcnMgdG8KK2luY29ycG9yYXRlLiAgTWFueSBkZXZlbG9wZXJzIG9mIGZyZWUgc29mdHdhcmUgYXJlIGhlYXJ0ZW5lZCBhbmQKK2VuY291cmFnZWQgYnkgdGhlIHJlc3VsdGluZyBjb29wZXJhdGlvbi4gIEhvd2V2ZXIsIGluIHRoZSBjYXNlIG9mCitzb2Z0d2FyZSB1c2VkIG9uIG5ldHdvcmsgc2VydmVycywgdGhpcyByZXN1bHQgbWF5IGZhaWwgdG8gY29tZSBhYm91dC4KK1RoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1ha2luZyBhIG1vZGlmaWVkIHZlcnNpb24gYW5kCitsZXR0aW5nIHRoZSBwdWJsaWMgYWNjZXNzIGl0IG9uIGEgc2VydmVyIHdpdGhvdXQgZXZlciByZWxlYXNpbmcgaXRzCitzb3VyY2UgY29kZSB0byB0aGUgcHVibGljLgorCisgIFRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgZGVzaWduZWQgc3BlY2lmaWNhbGx5IHRvCitlbnN1cmUgdGhhdCwgaW4gc3VjaCBjYXNlcywgdGhlIG1vZGlmaWVkIHNvdXJjZSBjb2RlIGJlY29tZXMgYXZhaWxhYmxlCit0byB0aGUgY29tbXVuaXR5LiAgSXQgcmVxdWlyZXMgdGhlIG9wZXJhdG9yIG9mIGEgbmV0d29yayBzZXJ2ZXIgdG8KK3Byb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBtb2RpZmllZCB2ZXJzaW9uIHJ1bm5pbmcgdGhlcmUgdG8gdGhlCit1c2VycyBvZiB0aGF0IHNlcnZlci4gIFRoZXJlZm9yZSwgcHVibGljIHVzZSBvZiBhIG1vZGlmaWVkIHZlcnNpb24sIG9uCithIHB1YmxpY2x5IGFjY2Vzc2libGUgc2VydmVyLCBnaXZlcyB0aGUgcHVibGljIGFjY2VzcyB0byB0aGUgc291cmNlCitjb2RlIG9mIHRoZSBtb2RpZmllZCB2ZXJzaW9uLgorCisgIEFuIG9sZGVyIGxpY2Vuc2UsIGNhbGxlZCB0aGUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCitwdWJsaXNoZWQgYnkgQWZmZXJvLCB3YXMgZGVzaWduZWQgdG8gYWNjb21wbGlzaCBzaW1pbGFyIGdvYWxzLiAgVGhpcyBpcworYSBkaWZmZXJlbnQgbGljZW5zZSwgbm90IGEgdmVyc2lvbiBvZiB0aGUgQWZmZXJvIEdQTCwgYnV0IEFmZmVybyBoYXMKK3JlbGVhc2VkIGEgbmV3IHZlcnNpb24gb2YgdGhlIEFmZmVybyBHUEwgd2hpY2ggcGVybWl0cyByZWxpY2Vuc2luZyB1bmRlcgordGhpcyBsaWNlbnNlLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisgICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgMC4gRGVmaW5pdGlvbnMuCisKKyAgIlRoaXMgTGljZW5zZSIgcmVmZXJzIHRvIHZlcnNpb24gMyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgICJDb3B5cmlnaHQiIGFsc28gbWVhbnMgY29weXJpZ2h0LWxpa2UgbGF3cyB0aGF0IGFwcGx5IHRvIG90aGVyIGtpbmRzIG9mCit3b3Jrcywgc3VjaCBhcyBzZW1pY29uZHVjdG9yIG1hc2tzLgorCisgICJUaGUgUHJvZ3JhbSIgcmVmZXJzIHRvIGFueSBjb3B5cmlnaHRhYmxlIHdvcmsgbGljZW5zZWQgdW5kZXIgdGhpcworTGljZW5zZS4gIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLiAgIkxpY2Vuc2VlcyIgYW5kCisicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCisKKyAgVG8gIm1vZGlmeSIgYSB3b3JrIG1lYW5zIHRvIGNvcHkgZnJvbSBvciBhZGFwdCBhbGwgb3IgcGFydCBvZiB0aGUgd29yaworaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCitleGFjdCBjb3B5LiAgVGhlIHJlc3VsdGluZyB3b3JrIGlzIGNhbGxlZCBhICJtb2RpZmllZCB2ZXJzaW9uIiBvZiB0aGUKK2VhcmxpZXIgd29yayBvciBhIHdvcmsgImJhc2VkIG9uIiB0aGUgZWFybGllciB3b3JrLgorCisgIEEgImNvdmVyZWQgd29yayIgbWVhbnMgZWl0aGVyIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0gb3IgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbS4KKworICBUbyAicHJvcGFnYXRlIiBhIHdvcmsgbWVhbnMgdG8gZG8gYW55dGhpbmcgd2l0aCBpdCB0aGF0LCB3aXRob3V0CitwZXJtaXNzaW9uLCB3b3VsZCBtYWtlIHlvdSBkaXJlY3RseSBvciBzZWNvbmRhcmlseSBsaWFibGUgZm9yCitpbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKK2NvbXB1dGVyIG9yIG1vZGlmeWluZyBhIHByaXZhdGUgY29weS4gIFByb3BhZ2F0aW9uIGluY2x1ZGVzIGNvcHlpbmcsCitkaXN0cmlidXRpb24gKHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24pLCBtYWtpbmcgYXZhaWxhYmxlIHRvIHRoZQorcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgorCisgIFRvICJjb252ZXkiIGEgd29yayBtZWFucyBhbnkga2luZCBvZiBwcm9wYWdhdGlvbiB0aGF0IGVuYWJsZXMgb3RoZXIKK3BhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAorYSBjb21wdXRlciBuZXR3b3JrLCB3aXRoIG5vIHRyYW5zZmVyIG9mIGEgY29weSwgaXMgbm90IGNvbnZleWluZy4KKworICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKK3RvIHRoZSBleHRlbnQgdGhhdCBpdCBpbmNsdWRlcyBhIGNvbnZlbmllbnQgYW5kIHByb21pbmVudGx5IHZpc2libGUKK2ZlYXR1cmUgdGhhdCAoMSkgZGlzcGxheXMgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSwgYW5kICgyKQordGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKK2V4dGVudCB0aGF0IHdhcnJhbnRpZXMgYXJlIHByb3ZpZGVkKSwgdGhhdCBsaWNlbnNlZXMgbWF5IGNvbnZleSB0aGUKK3dvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmCit0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQorbWVudSwgYSBwcm9taW5lbnQgaXRlbSBpbiB0aGUgbGlzdCBtZWV0cyB0aGlzIGNyaXRlcmlvbi4KKworICAxLiBTb3VyY2UgQ29kZS4KKworICBUaGUgInNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yaworZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQorZm9ybSBvZiBhIHdvcmsuCisKKyAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKK3N0YW5kYXJkIGRlZmluZWQgYnkgYSByZWNvZ25pemVkIHN0YW5kYXJkcyBib2R5LCBvciwgaW4gdGhlIGNhc2Ugb2YKK2ludGVyZmFjZXMgc3BlY2lmaWVkIGZvciBhIHBhcnRpY3VsYXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIG9uZSB0aGF0CitpcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KKworICBUaGUgIlN5c3RlbSBMaWJyYXJpZXMiIG9mIGFuIGV4ZWN1dGFibGUgd29yayBpbmNsdWRlIGFueXRoaW5nLCBvdGhlcgordGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKK3BhY2thZ2luZyBhIE1ham9yIENvbXBvbmVudCwgYnV0IHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoYXQgTWFqb3IKK0NvbXBvbmVudCwgYW5kIChiKSBzZXJ2ZXMgb25seSB0byBlbmFibGUgdXNlIG9mIHRoZSB3b3JrIHdpdGggdGhhdAorTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCitpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3VyY2UgY29kZSBmb3JtLiAgQQorIk1ham9yIENvbXBvbmVudCIsIGluIHRoaXMgY29udGV4dCwgbWVhbnMgYSBtYWpvciBlc3NlbnRpYWwgY29tcG9uZW50Cisoa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCisoaWYgYW55KSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSB3b3JrIHJ1bnMsIG9yIGEgY29tcGlsZXIgdXNlZCB0bworcHJvZHVjZSB0aGUgd29yaywgb3IgYW4gb2JqZWN0IGNvZGUgaW50ZXJwcmV0ZXIgdXNlZCB0byBydW4gaXQuCisKKyAgVGhlICJDb3JyZXNwb25kaW5nIFNvdXJjZSIgZm9yIGEgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIG1lYW5zIGFsbAordGhlIHNvdXJjZSBjb2RlIG5lZWRlZCB0byBnZW5lcmF0ZSwgaW5zdGFsbCwgYW5kIChmb3IgYW4gZXhlY3V0YWJsZQord29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bworY29udHJvbCB0aG9zZSBhY3Rpdml0aWVzLiAgSG93ZXZlciwgaXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgd29yaydzCitTeXN0ZW0gTGlicmFyaWVzLCBvciBnZW5lcmFsLXB1cnBvc2UgdG9vbHMgb3IgZ2VuZXJhbGx5IGF2YWlsYWJsZSBmcmVlCitwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKK3doaWNoIGFyZSBub3QgcGFydCBvZiB0aGUgd29yay4gIEZvciBleGFtcGxlLCBDb3JyZXNwb25kaW5nIFNvdXJjZQoraW5jbHVkZXMgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHNvdXJjZSBmaWxlcyBmb3IKK3RoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQorbGlua2VkIHN1YnByb2dyYW1zIHRoYXQgdGhlIHdvcmsgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHJlcXVpcmUsCitzdWNoIGFzIGJ5IGludGltYXRlIGRhdGEgY29tbXVuaWNhdGlvbiBvciBjb250cm9sIGZsb3cgYmV0d2VlbiB0aG9zZQorc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgorCisgIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgdXNlcnMKK2NhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZworU291cmNlLgorCisgIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdAorc2FtZSB3b3JrLgorCisgIDIuIEJhc2ljIFBlcm1pc3Npb25zLgorCisgIEFsbCByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgYXJlIGdyYW50ZWQgZm9yIHRoZSB0ZXJtIG9mCitjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZAorY29uZGl0aW9ucyBhcmUgbWV0LiAgVGhpcyBMaWNlbnNlIGV4cGxpY2l0bHkgYWZmaXJtcyB5b3VyIHVubGltaXRlZAorcGVybWlzc2lvbiB0byBydW4gdGhlIHVubW9kaWZpZWQgUHJvZ3JhbS4gIFRoZSBvdXRwdXQgZnJvbSBydW5uaW5nIGEKK2NvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cworY29udGVudCwgY29uc3RpdHV0ZXMgYSBjb3ZlcmVkIHdvcmsuICBUaGlzIExpY2Vuc2UgYWNrbm93bGVkZ2VzIHlvdXIKK3JpZ2h0cyBvZiBmYWlyIHVzZSBvciBvdGhlciBlcXVpdmFsZW50LCBhcyBwcm92aWRlZCBieSBjb3B5cmlnaHQgbGF3LgorCisgIFlvdSBtYXkgbWFrZSwgcnVuIGFuZCBwcm9wYWdhdGUgY292ZXJlZCB3b3JrcyB0aGF0IHlvdSBkbyBub3QKK2NvbnZleSwgd2l0aG91dCBjb25kaXRpb25zIHNvIGxvbmcgYXMgeW91ciBsaWNlbnNlIG90aGVyd2lzZSByZW1haW5zCitpbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCitvZiBoYXZpbmcgdGhlbSBtYWtlIG1vZGlmaWNhdGlvbnMgZXhjbHVzaXZlbHkgZm9yIHlvdSwgb3IgcHJvdmlkZSB5b3UKK3dpdGggZmFjaWxpdGllcyBmb3IgcnVubmluZyB0aG9zZSB3b3JrcywgcHJvdmlkZWQgdGhhdCB5b3UgY29tcGx5IHdpdGgKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCitub3QgY29udHJvbCBjb3B5cmlnaHQuICBUaG9zZSB0aHVzIG1ha2luZyBvciBydW5uaW5nIHRoZSBjb3ZlcmVkIHdvcmtzCitmb3IgeW91IG11c3QgZG8gc28gZXhjbHVzaXZlbHkgb24geW91ciBiZWhhbGYsIHVuZGVyIHlvdXIgZGlyZWN0aW9uCithbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YKK3lvdXIgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgb3V0c2lkZSB0aGVpciByZWxhdGlvbnNoaXAgd2l0aCB5b3UuCisKKyAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKK3RoZSBjb25kaXRpb25zIHN0YXRlZCBiZWxvdy4gIFN1YmxpY2Vuc2luZyBpcyBub3QgYWxsb3dlZDsgc2VjdGlvbiAxMAorbWFrZXMgaXQgdW5uZWNlc3NhcnkuCisKKyAgMy4gUHJvdGVjdGluZyBVc2VycycgTGVnYWwgUmlnaHRzIEZyb20gQW50aS1DaXJjdW12ZW50aW9uIExhdy4KKworICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKK21lYXN1cmUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IGZ1bGZpbGxpbmcgb2JsaWdhdGlvbnMgdW5kZXIgYXJ0aWNsZQorMTEgb2YgdGhlIFdJUE8gY29weXJpZ2h0IHRyZWF0eSBhZG9wdGVkIG9uIDIwIERlY2VtYmVyIDE5OTYsIG9yCitzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCittZWFzdXJlcy4KKworICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCitjaXJjdW12ZW50aW9uIG9mIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdG8gdGhlIGV4dGVudCBzdWNoIGNpcmN1bXZlbnRpb24KK2lzIGVmZmVjdGVkIGJ5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8KK3RoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKK21vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBhcyBhIG1lYW5zIG9mIGVuZm9yY2luZywgYWdhaW5zdCB0aGUgd29yaydzCit1c2VycywgeW91ciBvciB0aGlyZCBwYXJ0aWVzJyBsZWdhbCByaWdodHMgdG8gZm9yYmlkIGNpcmN1bXZlbnRpb24gb2YKK3RlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCisKKyAgNC4gQ29udmV5aW5nIFZlcmJhdGltIENvcGllcy4KKworICBZb3UgbWF5IGNvbnZleSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncyBzb3VyY2UgY29kZSBhcyB5b3UKK3JlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kCithcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7CitrZWVwIGludGFjdCBhbGwgbm90aWNlcyBzdGF0aW5nIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbnkKK25vbi1wZXJtaXNzaXZlIHRlcm1zIGFkZGVkIGluIGFjY29yZCB3aXRoIHNlY3Rpb24gNyBhcHBseSB0byB0aGUgY29kZTsKK2tlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsCityZWNpcGllbnRzIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCithbmQgeW91IG1heSBvZmZlciBzdXBwb3J0IG9yIHdhcnJhbnR5IHByb3RlY3Rpb24gZm9yIGEgZmVlLgorCisgIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCisKKyAgWW91IG1heSBjb252ZXkgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBvciB0aGUgbW9kaWZpY2F0aW9ucyB0bworcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKK3Rlcm1zIG9mIHNlY3Rpb24gNCwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCisgICAgaXQsIGFuZCBnaXZpbmcgYSByZWxldmFudCBkYXRlLgorCisgICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKKyAgICByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBjb25kaXRpb25zIGFkZGVkIHVuZGVyIHNlY3Rpb24KKyAgICA3LiAgVGhpcyByZXF1aXJlbWVudCBtb2RpZmllcyB0aGUgcmVxdWlyZW1lbnQgaW4gc2VjdGlvbiA0IHRvCisgICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KKworICAgIGMpIFlvdSBtdXN0IGxpY2Vuc2UgdGhlIGVudGlyZSB3b3JrLCBhcyBhIHdob2xlLCB1bmRlciB0aGlzCisgICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCisgICAgTGljZW5zZSB3aWxsIHRoZXJlZm9yZSBhcHBseSwgYWxvbmcgd2l0aCBhbnkgYXBwbGljYWJsZSBzZWN0aW9uIDcKKyAgICBhZGRpdGlvbmFsIHRlcm1zLCB0byB0aGUgd2hvbGUgb2YgdGhlIHdvcmssIGFuZCBhbGwgaXRzIHBhcnRzLAorICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCisgICAgcGVybWlzc2lvbiB0byBsaWNlbnNlIHRoZSB3b3JrIGluIGFueSBvdGhlciB3YXksIGJ1dCBpdCBkb2VzIG5vdAorICAgIGludmFsaWRhdGUgc3VjaCBwZXJtaXNzaW9uIGlmIHlvdSBoYXZlIHNlcGFyYXRlbHkgcmVjZWl2ZWQgaXQuCisKKyAgICBkKSBJZiB0aGUgd29yayBoYXMgaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2VzLCBlYWNoIG11c3QgZGlzcGxheQorICAgIEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXM7IGhvd2V2ZXIsIGlmIHRoZSBQcm9ncmFtIGhhcyBpbnRlcmFjdGl2ZQorICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyCisgICAgd29yayBuZWVkIG5vdCBtYWtlIHRoZW0gZG8gc28uCisKKyAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAord29ya3MsIHdoaWNoIGFyZSBub3QgYnkgdGhlaXIgbmF0dXJlIGV4dGVuc2lvbnMgb2YgdGhlIGNvdmVyZWQgd29yaywKK2FuZCB3aGljaCBhcmUgbm90IGNvbWJpbmVkIHdpdGggaXQgc3VjaCBhcyB0byBmb3JtIGEgbGFyZ2VyIHByb2dyYW0sCitpbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCisiYWdncmVnYXRlIiBpZiB0aGUgY29tcGlsYXRpb24gYW5kIGl0cyByZXN1bHRpbmcgY29weXJpZ2h0IGFyZSBub3QKK3VzZWQgdG8gbGltaXQgdGhlIGFjY2VzcyBvciBsZWdhbCByaWdodHMgb2YgdGhlIGNvbXBpbGF0aW9uJ3MgdXNlcnMKK2JleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yaworaW4gYW4gYWdncmVnYXRlIGRvZXMgbm90IGNhdXNlIHRoaXMgTGljZW5zZSB0byBhcHBseSB0byB0aGUgb3RoZXIKK3BhcnRzIG9mIHRoZSBhZ2dyZWdhdGUuCisKKyAgNi4gQ29udmV5aW5nIE5vbi1Tb3VyY2UgRm9ybXMuCisKKyAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKK29mIHNlY3Rpb25zIDQgYW5kIDUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gY29udmV5IHRoZQorbWFjaGluZS1yZWFkYWJsZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLAoraW4gb25lIG9mIHRoZXNlIHdheXM6CisKKyAgICBhKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0CisgICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmaXhlZCBvbiBhIGR1cmFibGUgcGh5c2ljYWwgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCisKKyAgICBiKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0CisgICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSBhCisgICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKKyAgICBsb25nIGFzIHlvdSBvZmZlciBzcGFyZSBwYXJ0cyBvciBjdXN0b21lciBzdXBwb3J0IGZvciB0aGF0IHByb2R1Y3QKKyAgICBtb2RlbCwgdG8gZ2l2ZSBhbnlvbmUgd2hvIHBvc3Nlc3NlcyB0aGUgb2JqZWN0IGNvZGUgZWl0aGVyICgxKSBhCisgICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCisgICAgcHJvZHVjdCB0aGF0IGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBvbiBhIGR1cmFibGUgcGh5c2ljYWwKKyAgICBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UsIGZvciBhIHByaWNlIG5vCisgICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCisgICAgY29udmV5aW5nIG9mIHNvdXJjZSwgb3IgKDIpIGFjY2VzcyB0byBjb3B5IHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBjaGFyZ2UuCisKKyAgICBjKSBDb252ZXkgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhlIG9iamVjdCBjb2RlIHdpdGggYSBjb3B5IG9mIHRoZQorICAgIHdyaXR0ZW4gb2ZmZXIgdG8gcHJvdmlkZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGlzCisgICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKKyAgICBvbmx5IGlmIHlvdSByZWNlaXZlZCB0aGUgb2JqZWN0IGNvZGUgd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQKKyAgICB3aXRoIHN1YnNlY3Rpb24gNmIuCisKKyAgICBkKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGJ5IG9mZmVyaW5nIGFjY2VzcyBmcm9tIGEgZGVzaWduYXRlZAorICAgIHBsYWNlIChncmF0aXMgb3IgZm9yIGEgY2hhcmdlKSwgYW5kIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCisgICAgZnVydGhlciBjaGFyZ2UuICBZb3UgbmVlZCBub3QgcmVxdWlyZSByZWNpcGllbnRzIHRvIGNvcHkgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuICBJZiB0aGUgcGxhY2UgdG8KKyAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKKyAgICBtYXkgYmUgb24gYSBkaWZmZXJlbnQgc2VydmVyIChvcGVyYXRlZCBieSB5b3Ugb3IgYSB0aGlyZCBwYXJ0eSkKKyAgICB0aGF0IHN1cHBvcnRzIGVxdWl2YWxlbnQgY29weWluZyBmYWNpbGl0aWVzLCBwcm92aWRlZCB5b3UgbWFpbnRhaW4KKyAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlLiAgUmVnYXJkbGVzcyBvZiB3aGF0IHNlcnZlciBob3N0cyB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSwgeW91IHJlbWFpbiBvYmxpZ2F0ZWQgdG8gZW5zdXJlIHRoYXQgaXQgaXMKKyAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgorCisgICAgZSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uLCBwcm92aWRlZAorICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCisgICAgU291cmNlIG9mIHRoZSB3b3JrIGFyZSBiZWluZyBvZmZlcmVkIHRvIHRoZSBnZW5lcmFsIHB1YmxpYyBhdCBubworICAgIGNoYXJnZSB1bmRlciBzdWJzZWN0aW9uIDZkLgorCisgIEEgc2VwYXJhYmxlIHBvcnRpb24gb2YgdGhlIG9iamVjdCBjb2RlLCB3aG9zZSBzb3VyY2UgY29kZSBpcyBleGNsdWRlZAorZnJvbSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgYXMgYSBTeXN0ZW0gTGlicmFyeSwgbmVlZCBub3QgYmUKK2luY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KKworICBBICJVc2VyIFByb2R1Y3QiIGlzIGVpdGhlciAoMSkgYSAiY29uc3VtZXIgcHJvZHVjdCIsIHdoaWNoIG1lYW5zIGFueQordGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwKK29yIGhvdXNlaG9sZCBwdXJwb3Nlcywgb3IgKDIpIGFueXRoaW5nIGRlc2lnbmVkIG9yIHNvbGQgZm9yIGluY29ycG9yYXRpb24KK2ludG8gYSBkd2VsbGluZy4gIEluIGRldGVybWluaW5nIHdoZXRoZXIgYSBwcm9kdWN0IGlzIGEgY29uc3VtZXIgcHJvZHVjdCwKK2RvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcgorcHJvZHVjdCByZWNlaXZlZCBieSBhIHBhcnRpY3VsYXIgdXNlciwgIm5vcm1hbGx5IHVzZWQiIHJlZmVycyB0byBhCit0eXBpY2FsIG9yIGNvbW1vbiB1c2Ugb2YgdGhhdCBjbGFzcyBvZiBwcm9kdWN0LCByZWdhcmRsZXNzIG9mIHRoZSBzdGF0dXMKK29mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCithY3R1YWxseSB1c2VzLCBvciBleHBlY3RzIG9yIGlzIGV4cGVjdGVkIHRvIHVzZSwgdGhlIHByb2R1Y3QuICBBIHByb2R1Y3QKK2lzIGEgY29uc3VtZXIgcHJvZHVjdCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHByb2R1Y3QgaGFzIHN1YnN0YW50aWFsCitjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAordGhlIG9ubHkgc2lnbmlmaWNhbnQgbW9kZSBvZiB1c2Ugb2YgdGhlIHByb2R1Y3QuCisKKyAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLAorcHJvY2VkdXJlcywgYXV0aG9yaXphdGlvbiBrZXlzLCBvciBvdGhlciBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBpbnN0YWxsCithbmQgZXhlY3V0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBhIGNvdmVyZWQgd29yayBpbiB0aGF0IFVzZXIgUHJvZHVjdCBmcm9tCithIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKK3N1ZmZpY2UgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbnRpbnVlZCBmdW5jdGlvbmluZyBvZiB0aGUgbW9kaWZpZWQgb2JqZWN0Citjb2RlIGlzIGluIG5vIGNhc2UgcHJldmVudGVkIG9yIGludGVyZmVyZWQgd2l0aCBzb2xlbHkgYmVjYXVzZQorbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCisKKyAgSWYgeW91IGNvbnZleSBhbiBvYmplY3QgY29kZSB3b3JrIHVuZGVyIHRoaXMgc2VjdGlvbiBpbiwgb3Igd2l0aCwgb3IKK3NwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCitwYXJ0IG9mIGEgdHJhbnNhY3Rpb24gaW4gd2hpY2ggdGhlIHJpZ2h0IG9mIHBvc3Nlc3Npb24gYW5kIHVzZSBvZiB0aGUKK1VzZXIgUHJvZHVjdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgcmVjaXBpZW50IGluIHBlcnBldHVpdHkgb3IgZm9yIGEKK2ZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCitDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCB1bmRlciB0aGlzIHNlY3Rpb24gbXVzdCBiZSBhY2NvbXBhbmllZAorYnkgdGhlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbi4gIEJ1dCB0aGlzIHJlcXVpcmVtZW50IGRvZXMgbm90IGFwcGx5CitpZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAorbW9kaWZpZWQgb2JqZWN0IGNvZGUgb24gdGhlIFVzZXIgUHJvZHVjdCAoZm9yIGV4YW1wbGUsIHRoZSB3b3JrIGhhcworYmVlbiBpbnN0YWxsZWQgaW4gUk9NKS4KKworICBUaGUgcmVxdWlyZW1lbnQgdG8gcHJvdmlkZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gZG9lcyBub3QgaW5jbHVkZSBhCityZXF1aXJlbWVudCB0byBjb250aW51ZSB0byBwcm92aWRlIHN1cHBvcnQgc2VydmljZSwgd2FycmFudHksIG9yIHVwZGF0ZXMKK2ZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCit0aGUgVXNlciBQcm9kdWN0IGluIHdoaWNoIGl0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZC4gIEFjY2VzcyB0byBhCituZXR3b3JrIG1heSBiZSBkZW5pZWQgd2hlbiB0aGUgbW9kaWZpY2F0aW9uIGl0c2VsZiBtYXRlcmlhbGx5IGFuZAorYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCitwcm90b2NvbHMgZm9yIGNvbW11bmljYXRpb24gYWNyb3NzIHRoZSBuZXR3b3JrLgorCisgIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAoraW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uIG11c3QgYmUgaW4gYSBmb3JtYXQgdGhhdCBpcyBwdWJsaWNseQorZG9jdW1lbnRlZCAoYW5kIHdpdGggYW4gaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4KK3NvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgordW5wYWNraW5nLCByZWFkaW5nIG9yIGNvcHlpbmcuCisKKyAgNy4gQWRkaXRpb25hbCBUZXJtcy4KKworICAiQWRkaXRpb25hbCBwZXJtaXNzaW9ucyIgYXJlIHRlcm1zIHRoYXQgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgorQWRkaXRpb25hbCBwZXJtaXNzaW9ucyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIHRoZSBlbnRpcmUgUHJvZ3JhbSBzaGFsbAorYmUgdHJlYXRlZCBhcyB0aG91Z2ggdGhleSB3ZXJlIGluY2x1ZGVkIGluIHRoaXMgTGljZW5zZSwgdG8gdGhlIGV4dGVudAordGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKK2FwcGx5IG9ubHkgdG8gcGFydCBvZiB0aGUgUHJvZ3JhbSwgdGhhdCBwYXJ0IG1heSBiZSB1c2VkIHNlcGFyYXRlbHkKK3VuZGVyIHRob3NlIHBlcm1pc3Npb25zLCBidXQgdGhlIGVudGlyZSBQcm9ncmFtIHJlbWFpbnMgZ292ZXJuZWQgYnkKK3RoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KKworICBXaGVuIHlvdSBjb252ZXkgYSBjb3B5IG9mIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uCityZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKK2l0LiAgKEFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbWF5IGJlIHdyaXR0ZW4gdG8gcmVxdWlyZSB0aGVpciBvd24KK3JlbW92YWwgaW4gY2VydGFpbiBjYXNlcyB3aGVuIHlvdSBtb2RpZnkgdGhlIHdvcmsuKSAgWW91IG1heSBwbGFjZQorYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLAorZm9yIHdoaWNoIHlvdSBoYXZlIG9yIGNhbiBnaXZlIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBwZXJtaXNzaW9uLgorCisgIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQorYWRkIHRvIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IChpZiBhdXRob3JpemVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZgordGhhdCBtYXRlcmlhbCkgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGVybXM6CisKKyAgICBhKSBEaXNjbGFpbWluZyB3YXJyYW50eSBvciBsaW1pdGluZyBsaWFiaWxpdHkgZGlmZmVyZW50bHkgZnJvbSB0aGUKKyAgICB0ZXJtcyBvZiBzZWN0aW9ucyAxNSBhbmQgMTYgb2YgdGhpcyBMaWNlbnNlOyBvcgorCisgICAgYikgUmVxdWlyaW5nIHByZXNlcnZhdGlvbiBvZiBzcGVjaWZpZWQgcmVhc29uYWJsZSBsZWdhbCBub3RpY2VzIG9yCisgICAgYXV0aG9yIGF0dHJpYnV0aW9ucyBpbiB0aGF0IG1hdGVyaWFsIG9yIGluIHRoZSBBcHByb3ByaWF0ZSBMZWdhbAorICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCisKKyAgICBjKSBQcm9oaWJpdGluZyBtaXNyZXByZXNlbnRhdGlvbiBvZiB0aGUgb3JpZ2luIG9mIHRoYXQgbWF0ZXJpYWwsIG9yCisgICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KKyAgICByZWFzb25hYmxlIHdheXMgYXMgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIHZlcnNpb247IG9yCisKKyAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCisgICAgYXV0aG9ycyBvZiB0aGUgbWF0ZXJpYWw7IG9yCisKKyAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCisgICAgdHJhZGUgbmFtZXMsIHRyYWRlbWFya3MsIG9yIHNlcnZpY2UgbWFya3M7IG9yCisKKyAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0CisgICAgbWF0ZXJpYWwgYnkgYW55b25lIHdobyBjb252ZXlzIHRoZSBtYXRlcmlhbCAob3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YKKyAgICBpdCkgd2l0aCBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBvZiBsaWFiaWxpdHkgdG8gdGhlIHJlY2lwaWVudCwgZm9yCisgICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgorICAgIHRob3NlIGxpY2Vuc29ycyBhbmQgYXV0aG9ycy4KKworICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgorcmVzdHJpY3Rpb25zIiB3aXRoaW4gdGhlIG1lYW5pbmcgb2Ygc2VjdGlvbiAxMC4gIElmIHRoZSBQcm9ncmFtIGFzIHlvdQorcmVjZWl2ZWQgaXQsIG9yIGFueSBwYXJ0IG9mIGl0LCBjb250YWlucyBhIG5vdGljZSBzdGF0aW5nIHRoYXQgaXQgaXMKK2dvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgorcmVzdHJpY3Rpb24sIHlvdSBtYXkgcmVtb3ZlIHRoYXQgdGVybS4gIElmIGEgbGljZW5zZSBkb2N1bWVudCBjb250YWlucworYSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGJ1dCBwZXJtaXRzIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZyB1bmRlciB0aGlzCitMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKK29mIHRoYXQgbGljZW5zZSBkb2N1bWVudCwgcHJvdmlkZWQgdGhhdCB0aGUgZnVydGhlciByZXN0cmljdGlvbiBkb2VzCitub3Qgc3Vydml2ZSBzdWNoIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZy4KKworICBJZiB5b3UgYWRkIHRlcm1zIHRvIGEgY292ZXJlZCB3b3JrIGluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiwgeW91CittdXN0IHBsYWNlLCBpbiB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzLCBhIHN0YXRlbWVudCBvZiB0aGUKK2FkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZword2hlcmUgdG8gZmluZCB0aGUgYXBwbGljYWJsZSB0ZXJtcy4KKworICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQorZm9ybSBvZiBhIHNlcGFyYXRlbHkgd3JpdHRlbiBsaWNlbnNlLCBvciBzdGF0ZWQgYXMgZXhjZXB0aW9uczsKK3RoZSBhYm92ZSByZXF1aXJlbWVudHMgYXBwbHkgZWl0aGVyIHdheS4KKworICA4LiBUZXJtaW5hdGlvbi4KKworICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKK3Byb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBwcm9wYWdhdGUgb3IKK21vZGlmeSBpdCBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlcgordGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZAorcGFyYWdyYXBoIG9mIHNlY3Rpb24gMTEpLgorCisgIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCitsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCAoYSkKK3Byb3Zpc2lvbmFsbHksIHVubGVzcyBhbmQgdW50aWwgdGhlIGNvcHlyaWdodCBob2xkZXIgZXhwbGljaXRseSBhbmQKK2ZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKK2hvbGRlciBmYWlscyB0byBub3RpZnkgeW91IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zCitwcmlvciB0byA2MCBkYXlzIGFmdGVyIHRoZSBjZXNzYXRpb24uCisKKyAgTW9yZW92ZXIsIHlvdXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzCityZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUKK3Zpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKK3JlY2VpdmVkIG5vdGljZSBvZiB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIChmb3IgYW55IHdvcmspIGZyb20gdGhhdAorY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cyBhZnRlcgoreW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKKyAgVGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUKK2xpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlLiAgSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQorcmVpbnN0YXRlZCwgeW91IGRvIG5vdCBxdWFsaWZ5IHRvIHJlY2VpdmUgbmV3IGxpY2Vuc2VzIGZvciB0aGUgc2FtZQorbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KKworICA5LiBBY2NlcHRhbmNlIE5vdCBSZXF1aXJlZCBmb3IgSGF2aW5nIENvcGllcy4KKworICBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHJlY2VpdmUgb3IKK3J1biBhIGNvcHkgb2YgdGhlIFByb2dyYW0uICBBbmNpbGxhcnkgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsKK29jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCit0byByZWNlaXZlIGEgY29weSBsaWtld2lzZSBkb2VzIG5vdCByZXF1aXJlIGFjY2VwdGFuY2UuICBIb3dldmVyLAorbm90aGluZyBvdGhlciB0aGFuIHRoaXMgTGljZW5zZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gcHJvcGFnYXRlIG9yCittb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbworbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBwcm9wYWdhdGluZyBhCitjb3ZlcmVkIHdvcmssIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLgorCisgIDEwLiBBdXRvbWF0aWMgTGljZW5zaW5nIG9mIERvd25zdHJlYW0gUmVjaXBpZW50cy4KKworICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CityZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3JzLCB0byBydW4sIG1vZGlmeSBhbmQKK3Byb3BhZ2F0ZSB0aGF0IHdvcmssIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiAgWW91IGFyZSBub3QgcmVzcG9uc2libGUKK2ZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgorCisgIEFuICJlbnRpdHkgdHJhbnNhY3Rpb24iIGlzIGEgdHJhbnNhY3Rpb24gdHJhbnNmZXJyaW5nIGNvbnRyb2wgb2YgYW4KK29yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4KK29yZ2FuaXphdGlvbiwgb3IgbWVyZ2luZyBvcmdhbml6YXRpb25zLiAgSWYgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkCit3b3JrIHJlc3VsdHMgZnJvbSBhbiBlbnRpdHkgdHJhbnNhY3Rpb24sIGVhY2ggcGFydHkgdG8gdGhhdAordHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCitsaWNlbnNlcyB0byB0aGUgd29yayB0aGUgcGFydHkncyBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCBoYWQgb3IgY291bGQKK2dpdmUgdW5kZXIgdGhlIHByZXZpb3VzIHBhcmFncmFwaCwgcGx1cyBhIHJpZ2h0IHRvIHBvc3Nlc3Npb24gb2YgdGhlCitDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKK3RoZSBwcmVkZWNlc3NvciBoYXMgaXQgb3IgY2FuIGdldCBpdCB3aXRoIHJlYXNvbmFibGUgZWZmb3J0cy4KKworICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKK3JpZ2h0cyBncmFudGVkIG9yIGFmZmlybWVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEZvciBleGFtcGxlLCB5b3UgbWF5Citub3QgaW1wb3NlIGEgbGljZW5zZSBmZWUsIHJveWFsdHksIG9yIG90aGVyIGNoYXJnZSBmb3IgZXhlcmNpc2Ugb2YKK3JpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KKyhpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0CithbnkgcGF0ZW50IGNsYWltIGlzIGluZnJpbmdlZCBieSBtYWtpbmcsIHVzaW5nLCBzZWxsaW5nLCBvZmZlcmluZyBmb3IKK3NhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KKworICAxMS4gUGF0ZW50cy4KKworICBBICJjb250cmlidXRvciIgaXMgYSBjb3B5cmlnaHQgaG9sZGVyIHdobyBhdXRob3JpemVzIHVzZSB1bmRlciB0aGlzCitMaWNlbnNlIG9mIHRoZSBQcm9ncmFtIG9yIGEgd29yayBvbiB3aGljaCB0aGUgUHJvZ3JhbSBpcyBiYXNlZC4gIFRoZQord29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuCisKKyAgQSBjb250cmlidXRvcidzICJlc3NlbnRpYWwgcGF0ZW50IGNsYWltcyIgYXJlIGFsbCBwYXRlbnQgY2xhaW1zCitvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCitoZXJlYWZ0ZXIgYWNxdWlyZWQsIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIGJ5IHNvbWUgbWFubmVyLCBwZXJtaXR0ZWQKK2J5IHRoaXMgTGljZW5zZSwgb2YgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBpdHMgY29udHJpYnV0b3IgdmVyc2lvbiwKK2J1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCitjb25zZXF1ZW5jZSBvZiBmdXJ0aGVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udHJpYnV0b3IgdmVyc2lvbi4gIEZvcgorcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgaW5jbHVkZXMgdGhlIHJpZ2h0IHRvIGdyYW50CitwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKK3RoaXMgTGljZW5zZS4KKworICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgdGhlIGNvbnRyaWJ1dG9yJ3MgZXNzZW50aWFsIHBhdGVudCBjbGFpbXMsIHRvCittYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQgYW5kIG90aGVyd2lzZSBydW4sIG1vZGlmeSBhbmQKK3Byb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCisKKyAgSW4gdGhlIGZvbGxvd2luZyB0aHJlZSBwYXJhZ3JhcGhzLCBhICJwYXRlbnQgbGljZW5zZSIgaXMgYW55IGV4cHJlc3MKK2FncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAorKHN1Y2ggYXMgYW4gZXhwcmVzcyBwZXJtaXNzaW9uIHRvIHByYWN0aWNlIGEgcGF0ZW50IG9yIGNvdmVuYW50IG5vdCB0bworc3VlIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50KS4gIFRvICJncmFudCIgc3VjaCBhIHBhdGVudCBsaWNlbnNlIHRvIGEKK3BhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCitwYXRlbnQgYWdhaW5zdCB0aGUgcGFydHkuCisKKyAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKK2FuZCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgaXMgbm90IGF2YWlsYWJsZSBmb3IgYW55b25lCit0byBjb3B5LCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhyb3VnaCBhCitwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAordGhlbiB5b3UgbXVzdCBlaXRoZXIgKDEpIGNhdXNlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB0byBiZSBzbworYXZhaWxhYmxlLCBvciAoMikgYXJyYW5nZSB0byBkZXByaXZlIHlvdXJzZWxmIG9mIHRoZSBiZW5lZml0IG9mIHRoZQorcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKK2NvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSwgdG8gZXh0ZW5kIHRoZSBwYXRlbnQKK2xpY2Vuc2UgdG8gZG93bnN0cmVhbSByZWNpcGllbnRzLiAgIktub3dpbmdseSByZWx5aW5nIiBtZWFucyB5b3UgaGF2ZQorYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCitjb3ZlcmVkIHdvcmsgaW4gYSBjb3VudHJ5LCBvciB5b3VyIHJlY2lwaWVudCdzIHVzZSBvZiB0aGUgY292ZXJlZCB3b3JrCitpbiBhIGNvdW50cnksIHdvdWxkIGluZnJpbmdlIG9uZSBvciBtb3JlIGlkZW50aWZpYWJsZSBwYXRlbnRzIGluIHRoYXQKK2NvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCisKKyAgSWYsIHB1cnN1YW50IHRvIG9yIGluIGNvbm5lY3Rpb24gd2l0aCBhIHNpbmdsZSB0cmFuc2FjdGlvbiBvcgorYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQorY292ZXJlZCB3b3JrLCBhbmQgZ3JhbnQgYSBwYXRlbnQgbGljZW5zZSB0byBzb21lIG9mIHRoZSBwYXJ0aWVzCityZWNlaXZpbmcgdGhlIGNvdmVyZWQgd29yayBhdXRob3JpemluZyB0aGVtIHRvIHVzZSwgcHJvcGFnYXRlLCBtb2RpZnkKK29yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKK3lvdSBncmFudCBpcyBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkIHRvIGFsbCByZWNpcGllbnRzIG9mIHRoZSBjb3ZlcmVkCit3b3JrIGFuZCB3b3JrcyBiYXNlZCBvbiBpdC4KKworICBBIHBhdGVudCBsaWNlbnNlIGlzICJkaXNjcmltaW5hdG9yeSIgaWYgaXQgZG9lcyBub3QgaW5jbHVkZSB3aXRoaW4KK3RoZSBzY29wZSBvZiBpdHMgY292ZXJhZ2UsIHByb2hpYml0cyB0aGUgZXhlcmNpc2Ugb2YsIG9yIGlzCitjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKK3NwZWNpZmljYWxseSBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIFlvdSBtYXkgbm90IGNvbnZleSBhIGNvdmVyZWQKK3dvcmsgaWYgeW91IGFyZSBhIHBhcnR5IHRvIGFuIGFycmFuZ2VtZW50IHdpdGggYSB0aGlyZCBwYXJ0eSB0aGF0IGlzCitpbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50Cit0byB0aGUgdGhpcmQgcGFydHkgYmFzZWQgb24gdGhlIGV4dGVudCBvZiB5b3VyIGFjdGl2aXR5IG9mIGNvbnZleWluZwordGhlIHdvcmssIGFuZCB1bmRlciB3aGljaCB0aGUgdGhpcmQgcGFydHkgZ3JhbnRzLCB0byBhbnkgb2YgdGhlCitwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKK3BhdGVudCBsaWNlbnNlIChhKSBpbiBjb25uZWN0aW9uIHdpdGggY29waWVzIG9mIHRoZSBjb3ZlcmVkIHdvcmsKK2NvbnZleWVkIGJ5IHlvdSAob3IgY29waWVzIG1hZGUgZnJvbSB0aG9zZSBjb3BpZXMpLCBvciAoYikgcHJpbWFyaWx5Citmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdAorY29udGFpbiB0aGUgY292ZXJlZCB3b3JrLCB1bmxlc3MgeW91IGVudGVyZWQgaW50byB0aGF0IGFycmFuZ2VtZW50LAorb3IgdGhhdCBwYXRlbnQgbGljZW5zZSB3YXMgZ3JhbnRlZCwgcHJpb3IgdG8gMjggTWFyY2ggMjAwNy4KKworICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgZXhjbHVkaW5nIG9yIGxpbWl0aW5nCithbnkgaW1wbGllZCBsaWNlbnNlIG9yIG90aGVyIGRlZmVuc2VzIHRvIGluZnJpbmdlbWVudCB0aGF0IG1heQorb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgorCisgIDEyLiBObyBTdXJyZW5kZXIgb2YgT3RoZXJzJyBGcmVlZG9tLgorCisgIElmIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCitjb3ZlcmVkIHdvcmsgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5Citub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKK3RvIGNvbGxlY3QgYSByb3lhbHR5IGZvciBmdXJ0aGVyIGNvbnZleWluZyBmcm9tIHRob3NlIHRvIHdob20geW91IGNvbnZleQordGhlIFByb2dyYW0sIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIHRob3NlIHRlcm1zIGFuZCB0aGlzCitMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCisKKyAgMTMuIFJlbW90ZSBOZXR3b3JrIEludGVyYWN0aW9uOyBVc2Ugd2l0aCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBpZiB5b3UgbW9kaWZ5IHRoZQorUHJvZ3JhbSwgeW91ciBtb2RpZmllZCB2ZXJzaW9uIG11c3QgcHJvbWluZW50bHkgb2ZmZXIgYWxsIHVzZXJzCitpbnRlcmFjdGluZyB3aXRoIGl0IHJlbW90ZWx5IHRocm91Z2ggYSBjb21wdXRlciBuZXR3b3JrIChpZiB5b3VyIHZlcnNpb24KK3N1cHBvcnRzIHN1Y2ggaW50ZXJhY3Rpb24pIGFuIG9wcG9ydHVuaXR5IHRvIHJlY2VpdmUgdGhlIENvcnJlc3BvbmRpbmcKK1NvdXJjZSBvZiB5b3VyIHZlcnNpb24gYnkgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKK2Zyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBjaGFyZ2UsIHRocm91Z2ggc29tZSBzdGFuZGFyZCBvciBjdXN0b21hcnkKK21lYW5zIG9mIGZhY2lsaXRhdGluZyBjb3B5aW5nIG9mIHNvZnR3YXJlLiAgVGhpcyBDb3JyZXNwb25kaW5nIFNvdXJjZQorc2hhbGwgaW5jbHVkZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFueSB3b3JrIGNvdmVyZWQgYnkgdmVyc2lvbiAzCitvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhhdCBpcyBpbmNvcnBvcmF0ZWQgcHVyc3VhbnQgdG8gdGhlCitmb2xsb3dpbmcgcGFyYWdyYXBoLgorCisgIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgeW91IGhhdmUKK3Blcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKK3VuZGVyIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQorY29tYmluZWQgd29yaywgYW5kIHRvIGNvbnZleSB0aGUgcmVzdWx0aW5nIHdvcmsuICBUaGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aWxsIGNvbnRpbnVlIHRvIGFwcGx5IHRvIHRoZSBwYXJ0IHdoaWNoIGlzIHRoZSBjb3ZlcmVkIHdvcmssCitidXQgdGhlIHdvcmsgd2l0aCB3aGljaCBpdCBpcyBjb21iaW5lZCB3aWxsIHJlbWFpbiBnb3Zlcm5lZCBieSB2ZXJzaW9uCiszIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICAxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YKK3RoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucword2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCisgIEVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlCitQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlICJvciBhbnkgbGF0ZXIgdmVyc2lvbiIgYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlCitvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBudW1iZXJlZAordmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhlCitHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCitieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKK3ZlcnNpb25zIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncworcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQordG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIFByb2dyYW0uCisKKyAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKK3Blcm1pc3Npb25zLiAgSG93ZXZlciwgbm8gYWRkaXRpb25hbCBvYmxpZ2F0aW9ucyBhcmUgaW1wb3NlZCBvbiBhbnkKK2F1dGhvciBvciBjb3B5cmlnaHQgaG9sZGVyIGFzIGEgcmVzdWx0IG9mIHlvdXIgY2hvb3NpbmcgdG8gZm9sbG93IGEKK2xhdGVyIHZlcnNpb24uCisKKyAgMTUuIERpc2NsYWltZXIgb2YgV2FycmFudHkuCisKKyAgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWQorQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVAorSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQorT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQorSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GCitBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTYuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LgorCisgIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNT0RJRklFUyBBTkQvT1IgQ09OVkVZUworVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZCitHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKK1VTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YKK0RBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJECitQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKK0VWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFUy4KKworICAxNy4gSW50ZXJwcmV0YXRpb24gb2YgU2VjdGlvbnMgMTUgYW5kIDE2LgorCisgIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAorYWJvdmUgY2Fubm90IGJlIGdpdmVuIGxvY2FsIGxlZ2FsIGVmZmVjdCBhY2NvcmRpbmcgdG8gdGhlaXIgdGVybXMsCityZXZpZXdpbmcgY291cnRzIHNoYWxsIGFwcGx5IGxvY2FsIGxhdyB0aGF0IG1vc3QgY2xvc2VseSBhcHByb3hpbWF0ZXMKK2FuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKK1Byb2dyYW0sIHVubGVzcyBhIHdhcnJhbnR5IG9yIGFzc3VtcHRpb24gb2YgbGlhYmlsaXR5IGFjY29tcGFuaWVzIGEKK2NvcHkgb2YgdGhlIFByb2dyYW0gaW4gcmV0dXJuIGZvciBhIGZlZS4KKworICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CitzdGF0ZSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKKyAgSWYgeW91ciBzb2Z0d2FyZSBjYW4gaW50ZXJhY3Qgd2l0aCB1c2VycyByZW1vdGVseSB0aHJvdWdoIGEgY29tcHV0ZXIKK25ldHdvcmssIHlvdSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgdGhhdCBpdCBwcm92aWRlcyBhIHdheSBmb3IgdXNlcnMgdG8KK2dldCBpdHMgc291cmNlLiAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgcHJvZ3JhbSBpcyBhIHdlYiBhcHBsaWNhdGlvbiwgaXRzCitpbnRlcmZhY2UgY291bGQgZGlzcGxheSBhICJTb3VyY2UiIGxpbmsgdGhhdCBsZWFkcyB1c2VycyB0byBhbiBhcmNoaXZlCitvZiB0aGUgY29kZS4gIFRoZXJlIGFyZSBtYW55IHdheXMgeW91IGNvdWxkIG9mZmVyIHNvdXJjZSwgYW5kIGRpZmZlcmVudAorc29sdXRpb25zIHdpbGwgYmUgYmV0dGVyIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXM7IHNlZSBzZWN0aW9uIDEzIGZvciB0aGUKK3NwZWNpZmljIHJlcXVpcmVtZW50cy4KKworICBZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3Igc2Nob29sLAoraWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsIGFuZCBob3cgdG8gYXBwbHkgYW5kIGZvbGxvdyB0aGUgR05VIEFHUEwsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BTlRMUi1QRCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQU5UTFItUEQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIwMmE4YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQU5UTFItUEQKQEAgLTAsMCArMSwzMiBAQAorCitBTlRMUiBTT0ZUV0FSRSBSSUdIVFMKKworQU5UTFIgMTk4OS0yMDA2IERldmVsb3BlZCBieSBUZXJlbmNlIFBhcnIKK1BhcnRpYWxseSBzdXBwb3J0ZWQgYnkgVW5pdmVyc2l0eSBvZiBTYW4gRnJhbmNpc2NvICZhbXA7IGpHdXJ1LmNvbQorCitXZSByZXNlcnZlIG5vIGxlZ2FsIHJpZ2h0cyB0byB0aGUgQU5UTFItLWl0IGlzIGZ1bGx5IGluIHRoZQorcHVibGljIGRvbWFpbi4gQW4gaW5kaXZpZHVhbCBvciBjb21wYW55IG1heSBkbyB3aGF0ZXZlcgordGhleSB3aXNoIHdpdGggc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgd2l0aCBBTlRMUiBvciB0aGUKK2NvZGUgZ2VuZXJhdGVkIGJ5IEFOVExSLCBpbmNsdWRpbmcgdGhlIGluY29ycG9yYXRpb24gb2YKK0FOVExSLCBvciBpdHMgb3V0cHV0LCBpbnRvIGNvbW1lcmljYWwgc29mdHdhcmUuCisKK1dlIGVuY291cmFnZSB1c2VycyB0byBkZXZlbG9wIHNvZnR3YXJlIHdpdGggQU5UTFIuIEhvd2V2ZXIsCit3ZSBkbyBhc2sgdGhhdCBjcmVkaXQgaXMgZ2l2ZW4gdG8gdXMgZm9yIGRldmVsb3BpbmcKK0FOVExSLiBCeSAiY3JlZGl0Iiwgd2UgbWVhbiB0aGF0IGlmIHlvdSB1c2UgQU5UTFIgb3IKK2luY29ycG9yYXRlIGFueSBzb3VyY2UgY29kZSBpbnRvIG9uZSBvZiB5b3VyIHByb2dyYW1zCisoY29tbWVyY2lhbCBwcm9kdWN0LCByZXNlYXJjaCBwcm9qZWN0LCBvciBvdGhlcndpc2UpIHRoYXQKK3lvdSBhY2tub3dsZWRnZSB0aGlzIGZhY3Qgc29tZXdoZXJlIGluIHRoZSBkb2N1bWVudGF0aW9uLAorcmVzZWFyY2ggcmVwb3J0LCBldGMuLi4gSWYgeW91IGxpa2UgQU5UTFIgYW5kIGhhdmUKK2RldmVsb3BlZCBhIG5pY2UgdG9vbCB3aXRoIHRoZSBvdXRwdXQsIHBsZWFzZSBtZW50aW9uIHRoYXQKK3lvdSBkZXZlbG9wZWQgaXQgdXNpbmcgQU5UTFIuIEluIGFkZGl0aW9uLCB3ZSBhc2sgdGhhdCB0aGUKK2hlYWRlcnMgcmVtYWluIGludGFjdCBpbiBvdXIgc291cmNlIGNvZGUuIEFzIGxvbmcgYXMgdGhlc2UKK2d1aWRlbGluZXMgYXJlIGtlcHQsIHdlIGV4cGVjdCB0byBjb250aW51ZSBlbmhhbmNpbmcgdGhpcworc3lzdGVtIGFuZCBleHBlY3QgdG8gbWFrZSBvdGhlciB0b29scyBhdmFpbGFibGUgYXMgdGhleSBhcmUKK2NvbXBsZXRlZC4KKworVGhlIHByaW1hcnkgQU5UTFIgZ3V5OgorCitUZXJlbmNlIFBhcnIKK3BhcnJ0QGNzLnVzZmNhLmVkdQorcGFycnRAYW50bHIub3JnCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODA1YjFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUEwtMS4wCkBAIC0wLDAgKzEsMjE4IEBACisKK0FEQVBUSVZFIFBVQkxJQyBMSUNFTlNFCitWZXJzaW9uIDEuMAorVEhFIExJQ0VOU0VEIFdPUksgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQURBUFRJVkUgUFVCTElDIExJQ0VOU0UgKCJMSUNFTlNFIikuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIExJQ0VOU0VEIFdPUksgQ09OU1RJVFVURVMgUkVDSVBJRU5UYFMgQUNDRVBUQU5DRSBPRiBUSElTIExJQ0VOU0UgQU5EIElUUyBURVJNUywgV0hFVEhFUiBPUiBOT1QgU1VDSCBSRUNJUElFTlQgUkVBRFMgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gIkxJQ0VOU0VEIFdPUksiIEFORCAiUkVDSVBJRU5UIiBBUkUgREVGSU5FRCBCRUxPVy4KKworSU1QT1JUQU5UIE5PVEU6IFRoaXMgTGljZW5zZSBpcyAiYWRhcHRpdmUiLCBhbmQgdGhlIGdlbmVyaWMgdmVyc2lvbiBvciBhbm90aGVyIHZlcnNpb24gb2YgYW4gQWRhcHRpdmUgUHVibGljIExpY2Vuc2Ugc2hvdWxkIG5vdCBiZSByZWxpZWQgdXBvbiB0byBkZXRlcm1pbmUgeW91ciByaWdodHMgYW5kIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZS4gWW91IG11c3QgcmVhZCB0aGUgc3BlY2lmaWMgQWRhcHRpdmUgUHVibGljIExpY2Vuc2UgdGhhdCB5b3UgcmVjZWl2ZSB3aXRoIHRoZSBMaWNlbnNlZCBXb3JrLCBhcyBjZXJ0YWluIHRlcm1zIGFyZSBkZWZpbmVkIGF0IHRoZSBvdXRzZXQgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IuCisKK1NlZSBTZWN0aW9uIDIuMiBiZWxvdywgRXhoaWJpdCBBIGF0dGFjaGVkLCBhbmQgYW55IFN1cHBmaWxlLnR4dCBhY2NvbXBhbnlpbmcgdGhpcyBMaWNlbnNlIHRvIGRldGVybWluZSB0aGUgc3BlY2lmaWMgYWRhcHRpdmUgZmVhdHVyZXMgYXBwbGljYWJsZSB0byB0aGlzIExpY2Vuc2UuIEZvciBleGFtcGxlLCB3aXRob3V0IGxpbWl0aW5nIHRoZSBmb3JlZ29pbmcsIChhKSBmb3Igc2VsZWN0ZWQgY2hvaWNlIG9mIGxhdyBhbmQganVyaXNkaWN0aW9uIHNlZSBQYXJ0IDMgb2YgRXhoaWJpdCBBOyAoYikgZm9yIHRoZSBzZWxlY3RlZCBkZWZpbml0aW9uIG9mIFRoaXJkIFBhcnR5IHNlZSBQYXJ0IDQgb2YgRXhoaWJpdCBBOyBhbmQgKGMpIGZvciBzZWxlY3RlZCBwYXRlbnQgbGljZW5zaW5nIHRlcm1zIChpZiBhbnkpIHNlZSBTZWN0aW9uIDIuMiBiZWxvdyBhbmQgUGFydCA2IG9mIEV4aGliaXQgQS4KKworMS4gREVGSU5JVElPTlMuCisKKzEuMS4gIkNPTlRSSUJVVElPTiIgbWVhbnM6CisKKyhhKSBJbiB0aGUgY2FzZSBvZiB0aGUgSW5pdGlhbCBDb250cmlidXRvciwgdGhlIEluaXRpYWwgV29yayBkaXN0cmlidXRlZCB1bmRlciB0aGlzIExpY2Vuc2UgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3I7IGFuZAorCisoYikgSW4gdGhlIGNhc2Ugb2YgZWFjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCB0aGUgU3Vic2VxdWVudCBXb3JrIG9yaWdpbmF0aW5nIGZyb20gYW5kIGRpc3RyaWJ1dGVkIGJ5IHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvci4KKworMS4yLiAiREVTSUdOQVRFRCBXRUIgU0lURSIgbWVhbnMgdGhlIHdlYiBzaXRlIGhhdmluZyB0aGUgVVJMIGlkZW50aWZpZWQgaW4gUGFydCAxIG9mIEV4aGliaXQgQSwgd2hpY2ggVVJMIG1heSBiZSBjaGFuZ2VkIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGJ5IHBvc3Rpbmcgb24gdGhlIGN1cnJlbnQgRGVzaWduYXRlZCBXZWIgU2l0ZSB0aGUgbmV3IFVSTCBmb3IgYXQgbGVhc3Qgc2l4dHkgKDYwKSBkYXlzLgorCisxLjMuICJESVNUUklCVVRPUiIgbWVhbnMgYW55IFBlcnNvbiB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBMaWNlbnNlZCBXb3JrIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YgdG8gYXQgbGVhc3Qgb25lIFRoaXJkIFBhcnR5LgorCisxLjQuICJFTEVDVFJPTklDIERJU1RSSUJVVElPTiBNRUNIQU5JU00iIG1lYW5zIGFueSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisKKzEuNS4gIkVYRUNVVEFCTEUiIG1lYW5zIHRoZSBMaWNlbnNlZCBXb3JrIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisKKzEuNi4gIkdPVkVSTklORyBKVVJJU0RJQ1RJT04iIG1lYW5zIHRoZSBzdGF0ZSwgcHJvdmluY2Ugb3Igb3RoZXIgbGVnYWwganVyaXNkaWN0aW9uIGlkZW50aWZpZWQgaW4gUGFydCAzIG9mIEV4aGliaXQgQS4KKworMS43LiAiSU5ERVBFTkRFTlQgTU9EVUxFIiBtZWFucyBhIHNlcGFyYXRlIG1vZHVsZSBvZiBzb2Z0d2FyZSBhbmQvb3IgZGF0YSB0aGF0IGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiBvciBjb3BpZWQgZnJvbSB0aGUgTGljZW5zZWQgV29yayBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLiBJbiBhZGRpdGlvbiwgYSBtb2R1bGUgZG9lcyBub3QgcXVhbGlmeSBhcyBhbiBJbmRlcGVuZGVudCBNb2R1bGUgYnV0IGluc3RlYWQgZm9ybXMgcGFydCBvZiB0aGUgTGljZW5zZWQgV29yayBpZiB0aGUgbW9kdWxlOiAoYSkgaXMgZW1iZWRkZWQgaW4gdGhlIExpY2Vuc2VkIFdvcms7IChiKSBpcyBpbmNsdWRlZCBieSByZWZlcmVuY2UgaW4gdGhlIExpY2Vuc2VkIFdvcmsgb3RoZXIgdGhhbiBieSBhIGZ1bmN0aW9uIGNhbGwgb3IgYSBjbGFzcyByZWZlcmVuY2U7IG9yIChjKSBtdXN0IGJlIGluY2x1ZGVkIG9yIGNvbnRhaW5lZCwgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aGluIGEgZmlsZSBkaXJlY3Rvcnkgb3Igc3ViZGlyZWN0b3J5IGFjdHVhbGx5IGNvbnRhaW5pbmcgZmlsZXMgbWFraW5nIHVwIHRoZSBMaWNlbnNlZCBXb3JrLgorCisxLjguICJJTklUSUFMIENPTlRSSUJVVE9SIiBtZWFucyB0aGUgUGVyc29uIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgcmVxdWlyZWQgYnkgUGFydCAxIG9mIEV4aGliaXQgQS4KKworMS45LiAiSU5JVElBTCBXT1JLIiBtZWFucyB0aGUgaW5pdGlhbCBTb3VyY2UgQ29kZSwgb2JqZWN0IGNvZGUgKGlmIGFueSkgYW5kIGRvY3VtZW50YXRpb24gZm9yIHRoZSBjb21wdXRlciBwcm9ncmFtIGlkZW50aWZpZWQgaW4gUGFydCAyIG9mIEV4aGliaXQgQSwgYXMgc3VjaCBTb3VyY2UgQ29kZSwgb2JqZWN0IGNvZGUgYW5kIGRvY3VtZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLgorCisxLjEwLiAiTEFSR0VSIFdPUksiIG1lYW5zIGEgd29yayB0aGF0IGNvbWJpbmVzIHRoZSBMaWNlbnNlZCBXb3JrIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisKKzEuMTEuICJMSUNFTlNFRCBXT1JLIiBtZWFucyB0aGUgSW5pdGlhbCBXb3JrIGFuZC9vciBhbnkgU3Vic2VxdWVudCBXb3JrLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuMTIuICJMSUNFTlNFIE5PVElDRSIgaGFzIHRoZSBtZWFuaW5nIGFzc2lnbmVkIGluIFBhcnQgNSBvZiBFeGhpYml0IEEuCisKKzEuMTMuICJNT0RJRklDQVRJT04iIG9yICJNT0RJRklDQVRJT05TIiBtZWFucyBhbnkgY2hhbmdlIHRvIGFuZC9vciBhZGRpdGlvbiB0byB0aGUgTGljZW5zZWQgV29yay4KKworMS4xNC4gIlBFUlNPTiIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBvdGhlciBsZWdhbCBlbnRpdHksIGluY2x1ZGluZyBhIGNvcnBvcmF0aW9uLCBwYXJ0bmVyc2hpcCBvciBvdGhlciBib2R5LgorCisxLjE1LiAiUkVDSVBJRU5UIiBtZWFucyBhbnkgUGVyc29uIHdobyByZWNlaXZlcyBvciBvYnRhaW5zIHRoZSBMaWNlbnNlZCBXb3JrIHVuZGVyIHRoaXMgTGljZW5zZSAoYnkgd2F5IG9mIGV4YW1wbGUsIHdpdGhvdXQgbGltaXRpbmcgdGhlIGZvcmVnb2luZywgYW55IFN1YnNlcXVlbnQgQ29udHJpYnV0b3Igb3IgRGlzdHJpYnV0b3IpLgorCisxLjE2LiAiU09VUkNFIENPREUiIG1lYW5zIHRoZSBzb3VyY2UgY29kZSBmb3IgYSBjb21wdXRlciBwcm9ncmFtLCBpbmNsdWRpbmcgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBhbmQgY29tcG9uZW50cyBvZiB0aGUgY29tcHV0ZXIgcHJvZ3JhbSwgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgYW5kIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZS4KKworMS4xNy4gIlNVQlNFUVVFTlQgQ09OVFJJQlVUT1IiIG1lYW5zIGFueSBQZXJzb24gdGhhdCBtYWtlcyBvciBjb250cmlidXRlcyB0byB0aGUgbWFraW5nIG9mIGFueSBTdWJzZXF1ZW50IFdvcmsgYW5kIHRoYXQgZGlzdHJpYnV0ZXMgdGhhdCBTdWJzZXF1ZW50IFdvcmsgdG8gYXQgbGVhc3Qgb25lIFRoaXJkIFBhcnR5LgorCisxLjE4LiAiU1VCU0VRVUVOVCBXT1JLIiBtZWFucyBhIHdvcmsgdGhhdCBoYXMgcmVzdWx0ZWQgb3IgYXJpc2VzIGZyb20gY2hhbmdlcyB0byBhbmQvb3IgYWRkaXRpb25zIHRvOgorCisoYSkgdGhlIEluaXRpYWwgV29yazsKKworKGIpIGFueSBvdGhlciBTdWJzZXF1ZW50IFdvcms7IG9yCisKKyhjKSB0byBhbnkgY29tYmluYXRpb24gb2YgdGhlIEluaXRpYWwgV29yayBhbmQgYW55IHN1Y2ggb3RoZXIgU3Vic2VxdWVudCBXb3JrOworCit3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyBvcmlnaW5hdGUgZnJvbSBhIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IuIEEgU3Vic2VxdWVudCBXb3JrIHdpbGwgIm9yaWdpbmF0ZSIgZnJvbSBhIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgaWYgdGhlIFN1YnNlcXVlbnQgV29yayB3YXMgYSByZXN1bHQgb2YgZWZmb3J0cyBieSBzdWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgKG9yIGFueW9uZSBhY3Rpbmcgb24gc3VjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yYHMgYmVoYWxmLCBzdWNoIGFzLCBhIGNvbnRyYWN0b3Igb3Igb3RoZXIgZW50aXR5IHRoYXQgaXMgZW5nYWdlZCBieSBvciB1bmRlciB0aGUgZGlyZWN0aW9uIG9mIHRoZSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yKS4gRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCBhIFN1YnNlcXVlbnQgV29yayBleHByZXNzbHkgZXhjbHVkZXMgYW5kIHNoYWxsIG5vdCBjYXB0dXJlIHdpdGhpbiBpdHMgbWVhbmluZyBhbnkgSW5kZXBlbmRlbnQgTW9kdWxlLgorCisxLjE5LiAiU1VQUExFTUVOVCBGSUxFIiBtZWFucyBhIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTGljZW5zZWQgV29yayBoYXZpbmcgYSBmaWxlIG5hbWUgInN1cHBmaWxlLnR4dCIuCisKKzEuMjAuICJUSElSRCBQQVJUWSIgaGFzIHRoZSBtZWFuaW5nIGFzc2lnbmVkIGluIFBhcnQgNCBvZiBFeGhpYml0IEEuCisKKzIuIExJQ0VOU0UuCisKKzIuMS4gQ09QWVJJR0hUIExJQ0VOU0UgRlJPTSBJTklUSUFMIEFORCBTVUJTRVFVRU5UIENPTlRSSUJVVE9SUy4KKworKGEpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBlYWNoIFJlY2lwaWVudCBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBjb3B5cmlnaHQgbGljZW5zZSB0bzoKKworKGkpIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBJbml0aWFsIFdvcms7IGFuZAorCisoaWkpIHJlcHJvZHVjZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSwgYW5kIHN1YmxpY2Vuc2UgYW55IGRlcml2YXRpdmUgd29ya3MgKGlmIGFueSkgcHJlcGFyZWQgYnkgUmVjaXBpZW50OworCitpbiBTb3VyY2UgQ29kZSBhbmQgRXhlY3V0YWJsZSBmb3JtLCBlaXRoZXIgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcmsuCisKKyhiKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGVhY2ggU3Vic2VxdWVudCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIGVhY2ggUmVjaXBpZW50IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGNvcHlyaWdodCBsaWNlbnNlIHRvOgorCisoaSkgcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIFN1YnNlcXVlbnQgV29yayBvZiBzdWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3I7IGFuZAorCisoaWkpIHJlcHJvZHVjZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSwgYW5kIHN1YmxpY2Vuc2UgYW55IGRlcml2YXRpdmUgd29ya3MgKGlmIGFueSkgcHJlcGFyZWQgYnkgUmVjaXBpZW50OworCitpbiBTb3VyY2UgQ29kZSBhbmQgRXhlY3V0YWJsZSBmb3JtLCBlaXRoZXIgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcmsuCisyLjIuIFBBVEVOVCBMSUNFTlNFIEZST00gSU5JVElBTCBBTkQgU1VCU0VRVUVOVCBDT05UUklCVVRPUlMuCisKKyhhKSBUaGlzIExpY2Vuc2UgZG9lcyBub3QgaW5jbHVkZSBvciBncmFudCBhbnkgcGF0ZW50IGxpY2Vuc2Ugd2hhdHNvZXZlciBmcm9tIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBvciBhbnkgRGlzdHJpYnV0b3IgdW5sZXNzLCBhdCB0aGUgdGltZSB0aGUgSW5pdGlhbCBXb3JrIGlzIGZpcnN0IGRpc3RyaWJ1dGVkIG9yIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZSAoYXMgdGhlIGNhc2UgbWF5IGJlKSwgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgaGFzIHNlbGVjdGVkIHB1cnN1YW50IHRvIFBhcnQgNiBvZiBFeGhpYml0IEEgdGhlIHBhdGVudCB0ZXJtcyBpbiBwYXJhZ3JhcGhzIEEsIEIsIEMsIEQgYW5kIEUgZnJvbSBQYXJ0IDYgb2YgRXhoaWJpdCBBLiBJZiB0aGlzIGlzIG5vdCBkb25lIHRoZW4gdGhlIEluaXRpYWwgV29yayBhbmQgYW55IG90aGVyIFN1YnNlcXVlbnQgV29yayBpcyBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSB3aXRob3V0IGFueSBwYXRlbnQgbGljZW5zZSAodGhlICJQQVRFTlRTLUVYQ0xVREVEIExJQ0VOU0UiKS4KKworKGIpIEhvd2V2ZXIsIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBzdWJzZXF1ZW50bHkgZGlzdHJpYnV0ZSBvciBtYWtlIGF2YWlsYWJsZSAoYXMgdGhlIGNhc2UgbWF5IGJlKSBmdXR1cmUgY29waWVzIG9mOiAoMSkgdGhlIEluaXRpYWwgV29yazsgb3IgKDIpIGFueSBMaWNlbnNlZCBXb3JrIGRpc3RyaWJ1dGVkIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIHdoaWNoIGluY2x1ZGVzIHRoZSBJbml0aWFsIFdvcmsgKG9yIGFueSBwb3J0aW9uIHRoZXJlb2YpIGFuZC9vciBhbnkgTW9kaWZpY2F0aW9uIG1hZGUgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3I7IGF2YWlsYWJsZSB1bmRlciBhIExpY2Vuc2Ugd2hpY2ggaW5jbHVkZXMgYSBwYXRlbnQgbGljZW5zZSAodGhlICJQQVRFTlRTLUlOQ0xVREVEIExJQ0VOU0UiKSBieSBzZWxlY3RpbmcgcHVyc3VhbnQgdG8gUGFydCA2IG9mIEV4aGliaXQgQSB0aGUgcGF0ZW50IHRlcm1zIGluIHBhcmFncmFwaHMgQSwgQiwgQywgRCBhbmQgRSBmcm9tIFBhcnQgNiBvZiBFeGhpYml0IEEsIHdoZW4gdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgZGlzdHJpYnV0ZXMgb3IgbWFrZXMgYXZhaWxhYmxlIChhcyB0aGUgY2FzZSBtYXkgYmUpIHN1Y2ggZnV0dXJlIGNvcGllcyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyhjKSBJZiBhbnkgUmVjaXBpZW50IHJlY2VpdmVzIG9yIG9idGFpbnMgb25lIG9yIG1vcmUgY29waWVzIG9mIHRoZSBJbml0aWFsIFdvcmsgb3IgYW55IG90aGVyIHBvcnRpb24gb2YgdGhlIExpY2Vuc2VkIFdvcmsgdW5kZXIgdGhlIFBhdGVudHMtSW5jbHVkZWQgTGljZW5zZSwgdGhlbiBhbGwgbGljZW5zaW5nIG9mIHN1Y2ggY29waWVzIHVuZGVyIHRoaXMgTGljZW5zZSBzaGFsbCBpbmNsdWRlIHRoZSB0ZXJtcyBpbiBwYXJhZ3JhcGhzIEEsIEIsIEMsIEQgYW5kIEUgZnJvbSBQYXJ0IDYgb2YgRXhoaWJpdCBBIGFuZCB0aGF0IFJlY2lwaWVudCBzaGFsbCBub3QgYmUgYWJsZSB0byByZWx5IHVwb24gdGhlIFBhdGVudHMtRXhjbHVkZWQgTGljZW5zZSBmb3IgYW55IHN1Y2ggY29waWVzLiBIb3dldmVyLCBhbGwgUmVjaXBpZW50cyB0aGF0IHJlY2VpdmUgb25lIG9yIG1vcmUgY29waWVzIG9mIHRoZSBJbml0aWFsIFdvcmsgb3IgYW55IG90aGVyIHBvcnRpb24gb2YgdGhlIExpY2Vuc2VkIFdvcmsgdW5kZXIgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIHdoaWNoIGluY2x1ZGVzIHRoZSBQYXRlbnRzLUV4Y2x1ZGVkIExpY2Vuc2Ugc2hhbGwgaGF2ZSBubyBwYXRlbnQgbGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc3VjaCBjb3BpZXMgcmVjZWl2ZWQgdW5kZXIgdGhlIFBhdGVudHMtRXhjbHVkZWQgTGljZW5zZSBhbmQgYXZhaWxhYmlsaXR5IGFuZCBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3BpZXMsIGluY2x1ZGluZyBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBSZWNpcGllbnQgdG8gc3VjaCBjb3BpZXMsIHNoYWxsIGJlIHVuZGVyIGEgY29weSBvZiB0aGUgTGljZW5zZSB3aXRob3V0IGFueSBwYXRlbnQgbGljZW5zZS4KKworKGQpIFdoZXJlIGEgUmVjaXBpZW50IHVzZXMgaW4gY29tYmluYXRpb24gb3IgY29tYmluZXMgYW55IGNvcHkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgKG9yIHBvcnRpb24gdGhlcmVvZikgbGljZW5zZWQgdW5kZXIgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGhhdmluZyBhIFBhdGVudHMtRXhjbHVkZWQgTGljZW5zZSB3aXRoIGFueSBjb3B5IG9mIHRoZSBMaWNlbnNlZCBXb3JrIChvciBwb3J0aW9uIHRoZXJlb2YpIGxpY2Vuc2VkIHVuZGVyIGEgY29weSBvZiB0aGUgTGljZW5zZSBoYXZpbmcgYSBQYXRlbnRzLUluY2x1ZGVkIExpY2Vuc2UsIHRoZSBjb21iaW5hdGlvbiAoYW5kIGFueSBwb3J0aW9uIHRoZXJlb2YpIHNoYWxsLCBmcm9tIHRoZSBmaXJzdCB0aW1lIHN1Y2ggUmVjaXBpZW50IHVzZXMsIG1ha2VzIGF2YWlsYWJsZSBvciBkaXN0cmlidXRlcyB0aGUgY29tYmluYXRpb24gKGFzIHRoZSBjYXNlIG1heSBiZSksIGJlIHN1YmplY3QgdG8gb25seSB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UgaGF2aW5nIHRoZSBQYXRlbnRzLUluY2x1ZGVkIExpY2Vuc2Ugd2hpY2ggc2hhbGwgaW5jbHVkZSB0aGUgdGVybXMgaW4gcGFyYWdyYXBocyBBLCBCLCBDLCBEIGFuZCBFIGZyb20gUGFydCA2IG9mIEV4aGliaXQgQS4KKworMi4zLiBBQ0tOT1dMRURHRU1FTlQgQU5EIERJU0NMQUlNRVIuCisKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyBhbmQgYWdyZWVzIHRoYXQgYWx0aG91Z2ggSW5pdGlhbCBDb250cmlidXRvciBhbmQgZWFjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gcmVwcmVzZW50YXRpb24sIHdhcnJhbnR5LCBndWFyYW50ZWUgb3IgYXNzdXJhbmNlIGlzIHByb3ZpZGVkIGJ5IGFueSBJbml0aWFsIENvbnRyaWJ1dG9yLCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBvciBEaXN0cmlidXRvciB0aGF0IHRoZSBMaWNlbnNlZCBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBJbml0aWFsIENvbnRyaWJ1dG9yLCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBhbmQgZWFjaCBEaXN0cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLCBpbiByZWxhdGlvbiB0byB0aGUgTGljZW5zZWQgV29ya3MuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgd2l0aG91dCBsaW1pdGluZyB0aGUgZm9yZWdvaW5nIGRpc2NsYWltZXJzLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBXb3JrLCBpdCBpcyBSZWNpcGllbnRgcyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBMaWNlbnNlZCBXb3JrLgorCisyLjQuIFJFU0VSVkFUSU9OLgorCitOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgSW5pdGlhbCBDb250cmlidXRvciwgU3Vic2VxdWVudCBDb250cmlidXRvciwgb3IgRGlzdHJpYnV0b3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLgorCiszLiBESVNUUklCVVRJT04gT0JMSUdBVElPTlMuCisKKzMuMS4gRElTVFJJQlVUSU9OIEdFTkVSQUxMWS4KKworKGEpIEEgU3Vic2VxdWVudCBDb250cmlidXRvciBzaGFsbCBtYWtlIHRoYXQgU3Vic2VxdWVudCBDb250cmlidXRvcmBzIFN1YnNlcXVlbnQgV29yayhzKSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB2aWEgYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGZvciBhIHBlcmlvZCBvZiBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMuIFRoZSBhZm9yZXNhaWQgdHdlbHZlICgxMikgbW9udGggcGVyaW9kIHNoYWxsIGJlZ2luIHdpdGhpbiBhIHJlYXNvbmFibGUgdGltZSBhZnRlciB0aGUgY3JlYXRpb24gb2YgdGhlIFN1YnNlcXVlbnQgV29yayBhbmQgbm8gbGF0ZXIgdGhhbiBzaXh0eSAoNjApIGRheXMgYWZ0ZXIgZmlyc3QgZGlzdHJpYnV0aW9uIG9mIHRoYXQgU3Vic2VxdWVudCBDb250cmlidXRvcmBzIFN1YnNlcXVlbnQgV29yay4KKworKGIpIEFsbCBEaXN0cmlidXRvcnMgbXVzdCBkaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBXb3JrIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UsIGFuZCBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSAoaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBFeGhpYml0IEEgYW5kIHRoZSBhY2NvbXBhbnlpbmcgU3VwcGxlbWVudCBGaWxlKSB3aXRoIGVhY2ggY29weSBvZiB0aGUgTGljZW5zZWQgV29yayBkaXN0cmlidXRlZC4gSW4gcGFydGljdWxhciwgdGhpcyBMaWNlbnNlIG11c3QgYmUgcHJvbWluZW50bHkgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTGljZW5zZWQgV29yayBpbiBhIGZpbGUgY2FsbGVkICJsaWNlbnNlLnR4dC4iIEluIGFkZGl0aW9uLCB0aGUgTGljZW5zZSBOb3RpY2UgaW4gUGFydCA1IG9mIEV4aGliaXQgQSBtdXN0IGJlIGluY2x1ZGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYWxsIFNvdXJjZSBDb2RlIGZpbGVzLCBhbmQgdmlld2FibGUgdG8gYSB1c2VyIGluIGFueSBleGVjdXRhYmxlIHN1Y2ggdGhhdCB0aGUgTGljZW5zZSBOb3RpY2UgaXMgcmVhc29uYWJseSBicm91Z2h0IHRvIHRoZSBhdHRlbnRpb24gb2YgYW55IHBhcnR5IHVzaW5nIHRoZSBMaWNlbnNlZCBXb3JrLgorCiszLjIuIEVYRUNVVEFCTEUgRElTVFJJQlVUSU9OUyBPRiBUSEUgTElDRU5TRUQgV09SSy4KKworQSBEaXN0cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIExpY2Vuc2VkIFdvcmssIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIGluIEV4ZWN1dGFibGUgZm9ybSAoYW4gIkVYRUNVVEFCTEUgRElTVFJJQlVUSU9OIikgdG8gYW55IHRoaXJkIHBhcnR5LCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAyIG9mIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhlIEV4ZWN1dGFibGUgRGlzdHJpYnV0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIGFuZCBhY2NvbXBhbmllZCBieSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBBTkQgcHJvdmlkZWQgYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyBmdWxmaWxsZWQ6CisKKyhhKSBUaGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24gbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgU291cmNlIENvZGUgZm9yIHRoZSBMaWNlbnNlZCBXb3JrIG1ha2luZyB1cCB0aGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24sIGFuZCB0aGUgU291cmNlIENvZGUgbXVzdCBiZSBkaXN0cmlidXRlZCBvbiB0aGUgc2FtZSBtZWRpYSBhcyB0aGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24gb3IgdXNpbmcgYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtOyBvcgorCisoYikgVGhlIEV4ZWN1dGFibGUgRGlzdHJpYnV0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aGlydHkgc2l4ICgzNikgbW9udGhzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgZm9yIHRoZSBMaWNlbnNlZCBXb3JrIG1ha2luZyB1cCB0aGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24sIHRvIGJlIGF2YWlsYWJsZSBhbmQgZGlzdHJpYnV0ZWQgdXNpbmcgYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBhbmQgc3VjaCBFeGVjdXRhYmxlIERpc3RyaWJ1dGlvbiBtdXN0IHJlbWFpbiBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB0byBhbnkgdGhpcmQgcGFydHkgdmlhIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gKG9yIGFueSByZXBsYWNlbWVudCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdGhlIHBhcnRpY3VsYXIgRGlzdHJpYnV0b3IgbWF5IHJlYXNvbmFibHkgbmVlZCB0byB0dXJuIHRvIGFzIGEgc3Vic3RpdHV0ZSkgZm9yIHNhaWQgYXQgbGVhc3QgdGhpcnR5IHNpeCAoMzYpIG1vbnRocy4KKworRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCB0aGUgYWJvdmUtbm90ZWQgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIGFueSBMaWNlbnNlZCBXb3JrIG9yIHBvcnRpb24gdGhlcmVvZiBkaXN0cmlidXRlZCB0byBhbnkgdGhpcmQgcGFydHkgaW4gRXhlY3V0YWJsZSBmb3JtLCB3aGV0aGVyIHN1Y2ggZGlzdHJpYnV0aW9uIGlzIG1hZGUgYWxvbmUsIGluIGNvbWJpbmF0aW9uIHdpdGggYSBMYXJnZXIgV29yayBvciBJbmRlcGVuZGVudCBNb2R1bGVzLCBvciBpbiBzb21lIG90aGVyIGNvbWJpbmF0aW9uLgorCiszLjMuIFNPVVJDRSBDT0RFIERJU1RSSUJVVElPTlMuCisKK1doZW4gYSBEaXN0cmlidXRvciBtYWtlcyB0aGUgTGljZW5zZWQgV29yaywgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgYXZhaWxhYmxlIHRvIGFueSBQZXJzb24gaW4gU291cmNlIENvZGUgZm9ybSwgaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgU291cmNlIENvZGUsIHNpdHVhdGVkIHNvIHRoYXQgdGhlIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgY29uc3BpY3VvdXNseSBicm91Z2h0IHRvIHRoZSBhdHRlbnRpb24gb2YgdGhhdCBQZXJzb24uIEZvciBncmVhdGVyIGNsYXJpZmljYXRpb24sIHRoaXMgU2VjdGlvbiAzLjMgYXBwbGllcyB0byBhbGwgZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWNlbnNlZCBXb3JrIGluIGFueSBTb3VyY2UgQ29kZSBmb3JtLiBBIERpc3RyaWJ1dG9yIG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgd2hpY2ggY2hhcmdlIHNoYWxsIGJlIG5vIG1vcmUgdGhhbiB0aGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworMy40LiBSRVFVSVJFRCBOT1RJQ0VTIElOIFNPVVJDRSBDT0RFLgorCitFYWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgbXVzdCBlbnN1cmUgdGhhdCB0aGUgbm90aWNlIHNldCBvdXQgaW4gUGFydCA1IG9mIEV4aGliaXQgQSBpcyBpbmNsdWRlZCBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIGZvciBlYWNoIFN1YnNlcXVlbnQgV29yayBvcmlnaW5hdGluZyBmcm9tIHRoYXQgcGFydGljdWxhciBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBpZiBzdWNoIG5vdGljZSBpcyBub3QgYWxyZWFkeSBpbmNsdWRlZCBpbiBlYWNoIHN1Y2ggZmlsZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiB0aGUgU3Vic2VxdWVudCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgZmlsZSBpcyBzdG9yZWQpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4KKworMy41LiBOTyBESVNUUklCVVRJT04gUkVRVUlSRU1FTlRTIEZPUiBJTlRFUk5BTExZIFVTRUQgTU9ESUZJQ0FUSU9OUy4KKworTm90d2l0aHN0YW5kaW5nIFNlY3Rpb25zIDMuMiwgMy4zIGFuZCAzLjQsIFJlY2lwaWVudCBtYXksIGludGVybmFsbHkgd2l0aGluIGl0cyBvd24gY29ycG9yYXRpb24gb3Igb3JnYW5pemF0aW9uIHVzZSB0aGUgTGljZW5zZWQgV29yaywgaW5jbHVkaW5nIHRoZSBJbml0aWFsIFdvcmsgYW5kIFN1YnNlcXVlbnQgV29ya3MsIGFuZCBtYWtlIE1vZGlmaWNhdGlvbnMgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gUmVjaXBpZW50YHMgb3duIGNvcnBvcmF0aW9uIG9yIG9yZ2FuaXphdGlvbiAoY29sbGVjdGl2ZWx5LCAiSU5URVJOQUwgVVNFIE1PRElGSUNBVElPTlMiKS4gVGhlIFJlY2lwaWVudCBzaGFsbCBoYXZlIG5vIG9ibGlnYXRpb24gdG8gZGlzdHJpYnV0ZSwgaW4gZWl0aGVyIFNvdXJjZSBDb2RlIG9yIEV4ZWN1dGFibGUgZm9ybSwgYW55IHN1Y2ggSW50ZXJuYWwgVXNlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBSZWNpcGllbnQgaW4gdGhlIGNvdXJzZSBvZiBzdWNoIGludGVybmFsIHVzZSwgZXhjZXB0IHdoZXJlIHJlcXVpcmVkIGJlbG93IGluIHRoaXMgU2VjdGlvbiAzLjUuIEFsbCBJbnRlcm5hbCBVc2UgTW9kaWZpY2F0aW9ucyBkaXN0cmlidXRlZCB0byBhbnkgUGVyc29uLCB3aGV0aGVyIG9yIG5vdCBhIFRoaXJkIFBhcnR5LCBzaGFsbCBiZSBkaXN0cmlidXRlZCBwdXJzdWFudCB0byBhbmQgYmUgYWNjb21wYW5pZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgdGhlIFJlY2lwaWVudCBjaG9vc2VzIHRvIGRpc3RyaWJ1dGUgYW55IHN1Y2ggSW50ZXJuYWwgVXNlIE1vZGlmaWNhdGlvbnMgdG8gYW55IFRoaXJkIFBhcnR5LCB0aGVuIHRoZSBSZWNpcGllbnQgc2hhbGwgYmUgZGVlbWVkIGEgU3Vic2VxdWVudCBDb250cmlidXRvciwgYW5kIGFueSBzdWNoIEludGVybmFsIFVzZSBNb2RpZmljYXRpb25zIGRpc3RyaWJ1dGVkIHRvIGFueSBUaGlyZCBQYXJ0eSBzaGFsbCBiZSBkZWVtZWQgYSBTdWJzZXF1ZW50IFdvcmsgb3JpZ2luYXRpbmcgZnJvbSB0aGF0IFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIGFuZCBzaGFsbCBmcm9tIHRoZSBmaXJzdCBzdWNoIGluc3RhbmNlIGJlY29tZSBwYXJ0IG9mIHRoZSBMaWNlbnNlZCBXb3JrIHRoYXQgbXVzdCB0aGVyZWFmdGVyIGJlIGRpc3RyaWJ1dGVkIGFuZCBtYWRlIGF2YWlsYWJsZSB0byB0aGlyZCBwYXJ0aWVzIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMy4xIHRvIDMuNCBpbmNsdXNpdmUuCisKKzMuNi4gSU5ERVBFTkRFTlQgTU9EVUxFUy4KKworVGhpcyBMaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0byBJbmRlcGVuZGVudCBNb2R1bGVzIG9mIGFueSBJbml0aWFsIENvbnRyaWJ1dG9yLCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBEaXN0cmlidXRvciBvciBhbnkgUmVjaXBpZW50LCBhbmQgc3VjaCBJbmRlcGVuZGVudCBNb2R1bGVzIG1heSBiZSBsaWNlbnNlZCBvciBtYWRlIGF2YWlsYWJsZSB1bmRlciBvbmUgb3IgbW9yZSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudHMuCisKKzMuNy4gTEFSR0VSIFdPUktTLgorCitBbnkgRGlzdHJpYnV0b3Igb3IgUmVjaXBpZW50IG1heSBjcmVhdGUgb3IgY29udHJpYnV0ZSB0byBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBhbnkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgbWF5IGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIG9uZSBvciBtb3JlIHByb2R1Y3RzLiBIb3dldmVyLCBpbiBhbnkgc3VjaCBjYXNlLCBEaXN0cmlidXRvciBvciBSZWNpcGllbnQgKGFzIHRoZSBjYXNlIG1heSBiZSkgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgTGljZW5zZWQgV29yayBwb3J0aW9uIG9mIHRoZSBMYXJnZXIgV29yay4KKworMy44LiBERVNDUklQVElPTiBPRiBESVNUUklCVVRFRCBNT0RJRklDQVRJT05TLgorCisoYSkgRWFjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIChpbmNsdWRpbmcgdGhlIEluaXRpYWwgQ29udHJpYnV0b3Igd2hlcmUgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgYWxzbyBxdWFsaWZpZXMgYXMgYSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yKSBtdXN0IGNhdXNlIGVhY2ggU3Vic2VxdWVudCBXb3JrIGNyZWF0ZWQgb3IgY29udHJpYnV0ZWQgdG8gYnkgdGhhdCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzLCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiBQYXJ0IDEgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSwgdGhhdCBzdWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgbWFkZSBpbiB0aGUgY3JlYXRpb24gb3IgY29udHJpYnV0aW9uIHRvIHRoYXQgU3Vic2VxdWVudCBXb3JrLiBJZiBubyBTdXBwbGVtZW50IEZpbGUgZXhpc3RzIG9yIG5vIHJlcXVpcmVtZW50cyBhcmUgc2V0IG91dCBpbiBQYXJ0IDEgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSwgdGhlbiB0aGVyZSBhcmUgbm8gcmVxdWlyZW1lbnRzIGZvciBTdWJzZXF1ZW50IENvbnRyaWJ1dG9ycyB0byBkb2N1bWVudCBjaGFuZ2VzIHRoYXQgdGhleSBtYWtlIHJlc3VsdGluZyBpbiBTdWJzZXF1ZW50IFdvcmtzLgorCisoYikgVGhlIEluaXRpYWwgQ29udHJpYnV0b3IgbWF5IGF0IGFueSB0aW1lIGludHJvZHVjZSByZXF1aXJlbWVudHMgb3IgYWRkIHRvIG9yIGNoYW5nZSBlYXJsaWVyIHJlcXVpcmVtZW50cyAoaW4gZWFjaCBjYXNlLCB0aGUgIkVBUkxJRVIgREVTQ1JJUFRJT04gUkVRVUlSRU1FTlRTIikgZm9yIGRvY3VtZW50aW5nIGNoYW5nZXMgcmVzdWx0aW5nIGluIFN1YnNlcXVlbnQgV29ya3MgYnkgcmV2aXNpbmcgUGFydCAxIG9mIGVhY2ggY29weSBvZiB0aGUgU3VwcGxlbWVudCBGaWxlIGRpc3RyaWJ1dGVkIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIHdpdGggZnV0dXJlIGNvcGllcyBvZiB0aGUgTGljZW5zZWQgV29yayBzbyB0aGF0IFBhcnQgMSB0aGVuIGNvbnRhaW5zIG5ldyByZXF1aXJlbWVudHMgKHRoZSAiTkVXIERFU0NSSVBUSU9OIFJFUVVJUkVNRU5UUyIpIGZvciBkb2N1bWVudGluZyBzdWNoIGNoYW5nZXMuCisKKyhjKSBBbnkgUmVjaXBpZW50IHJlY2VpdmluZyBhdCBhbnkgdGltZSBhbnkgY29weSBvZiBhbiBJbml0aWFsIFdvcmsgb3IgYW55IFN1YnNlcXVlbnQgV29yayB1bmRlciBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIChpbiBlYWNoIGNhc2UsIGFuICJFYXJsaWVyIExJQ0VOU0VEIENPUFkiKSBoYXZpbmcgdGhlIEVhcmxpZXIgRGVzY3JpcHRpb24gUmVxdWlyZW1lbnRzIG1heSBjaG9vc2UsIHdpdGggcmVzcGVjdCB0byBlYWNoIHN1Y2ggRWFybGllciBMaWNlbnNlZCBDb3B5LCB0byBjb21wbHkgd2l0aCB0aGUgRWFybGllciBEZXNjcmlwdGlvbiBSZXF1aXJlbWVudHMgb3IgdGhlIE5ldyBEZXNjcmlwdGlvbiBSZXF1aXJlbWVudHMuIFdoZXJlIGEgUmVjaXBpZW50IGNob29zZXMgdG8gY29tcGx5IHdpdGggdGhlIE5ldyBEZXNjcmlwdGlvbiBSZXF1aXJlbWVudHMsIHRoYXQgUmVjaXBpZW50IHdpbGwsIHdoZW4gdGhlcmVhZnRlciBkaXN0cmlidXRpbmcgYW55IGNvcGllcyBvZiBhbnkgc3VjaCBFYXJsaWVyIExpY2Vuc2VkIENvcHksIGluY2x1ZGUgYSBTdXBwbGVtZW50IEZpbGUgaGF2aW5nIGEgc2VjdGlvbiBlbnRpdGxlZCBQYXJ0IDEgdGhhdCBjb250YWlucyBhIGNvcHkgb2YgdGhlIE5ldyBEZXNjcmlwdGlvbiBSZXF1aXJlbWVudHMuCisKKyhkKSBGb3IgZ3JlYXRlciBjZXJ0YWludHksIHRoZSBpbnRlbnQgb2YgUGFydCAxIG9mIHRoZSBTdXBwbGVtZW50IEZpbGUgaXMgdG8gcHJvdmlkZSBhIG1lY2hhbmlzbSAoaWYgYW55KSBieSB3aGljaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9ycyBtdXN0IGRvY3VtZW50IGNoYW5nZXMgdGhhdCB0aGV5IG1ha2UgdG8gdGhlIExpY2Vuc2VkIFdvcmsgcmVzdWx0aW5nIGluIFN1YnNlcXVlbnQgV29ya3MuIFBhcnQgMSBvZiBhbnkgU3VwcGxlbWVudCBGaWxlIHNoYWxsIG5vdCBiZSB1c2VkIHRvIGluY3JlYXNlIG9yIHJlZHVjZSB0aGUgc2NvcGUgb2YgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBBcnRpY2xlIDIgb2YgdGhpcyBMaWNlbnNlIG9yIGluIGFueSBvdGhlciB3YXkgaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgYW55IFJlY2lwaWVudCwgYW5kIHNoYWxsIGF0IG5vIHRpbWUgc2VydmUgYXMgdGhlIGJhc2lzIGZvciB0ZXJtaW5hdGluZyB0aGUgTGljZW5zZS4gRnVydGhlciwgYSBSZWNpcGllbnQgY2FuIGJlIHJlcXVpcmVkIHRvIGNvcnJlY3QgYW5kIGNoYW5nZSBpdHMgZG9jdW1lbnRhdGlvbiBwcm9jZWR1cmVzIHRvIGNvbXBseSB3aXRoIFBhcnQgMSBvZiB0aGUgU3VwcGxlbWVudCBGaWxlLCBidXQgY2Fubm90IGJlIHBlbmFsaXNlZCB3aXRoIGRhbWFnZXMuIFBhcnQgMSBvZiBhbnkgU3VwcGxlbWVudCBGaWxlIGlzIG9ubHkgYmluZGluZyBvbiBlYWNoIFJlY2lwaWVudCBvZiBhbnkgTGljZW5zZWQgV29yayB0byB0aGUgZXh0ZW50IFBhcnQgMSBzZXRzIG91dCB0aGUgcmVxdWlyZW1lbnRzIGZvciBkb2N1bWVudGluZyBjaGFuZ2VzIHRvIHRoZSBJbml0aWFsIFdvcmsgb3IgYW55IFN1YnNlcXVlbnQgV29yay4KKworKGUpIEFuIGV4YW1wbGUgb2YgYSBzZXQgb2YgcmVxdWlyZW1lbnRzIGZvciBkb2N1bWVudGluZyBjaGFuZ2VzIGFuZCBjb250cmlidXRpb25zIG1hZGUgYnkgU3Vic2VxdWVudCBDb250cmlidXRvciBpcyBzZXQgb3V0IGluIFBhcnQgNyBvZiBFeGhpYml0IEEgb2YgdGhpcyBMaWNlbnNlLiBQYXJ0IDcgaXMgYSBzYW1wbGUgb25seSBhbmQgaXMgbm90IGJpbmRpbmcgb24gUmVjaXBpZW50cywgdW5sZXNzIChzdWJqZWN0IHRvIHRoZSBlYXJsaWVyIHBhcmFncmFwaHMgb2YgdGhpcyBTZWN0aW9uIDMuOCkgdGhvc2UgYXJlIHRoZSByZXF1aXJlbWVudHMgdGhhdCB0aGUgSW5pdGlhbCBDb250cmlidXRvciBpbmNsdWRlcyBpbiBQYXJ0IDEgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSB3aXRoIHRoZSBjb3BpZXMgb2YgdGhlIEluaXRpYWwgV29yayBkaXN0cmlidXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzMuOS4gVVNFIE9GIERJU1RSSUJVVE9SIE5BTUUuCisKK1RoZSBuYW1lIG9mIGEgRGlzdHJpYnV0b3IgbWF5IG5vdCBiZSB1c2VkIGJ5IGFueSBvdGhlciBEaXN0cmlidXRvciB0byBlbmRvcnNlIG9yIHByb21vdGUgdGhlIExpY2Vuc2VkIFdvcmsgb3IgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBMaWNlbnNlZCBXb3JrLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworMy4xMC4gTElNSVRFRCBSRUNPR05JVElPTiBPRiBJTklUSUFMIENPTlRSSUJVVE9SLgorCisoYSkgQXMgYSBtb2Rlc3QgYXR0cmlidXRpb24gdG8gdGhlIEluaXRpYWwgQ29udHJpYnV0b3IsIGluIHRoZSBob3BlIHRoYXQgaXRzIHByb21vdGlvbmFsIHZhbHVlIG1heSBoZWxwIGp1c3RpZnkgdGhlIHRpbWUsIG1vbmV5IGFuZCBlZmZvcnQgaW52ZXN0ZWQgaW4gd3JpdGluZyB0aGUgSW5pdGlhbCBXb3JrLCB0aGUgSW5pdGlhbCBDb250cmlidXRvciBtYXkgaW5jbHVkZSBpbiBQYXJ0IDIgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSBhIHJlcXVpcmVtZW50IHRoYXQgZWFjaCB0aW1lIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSByZXN1bHRpbmcgZnJvbSB0aGUgSW5pdGlhbCBXb3JrIG9yIGFueSBTdWJzZXF1ZW50IFdvcmssIG9yIGEgcHJvZ3JhbSBkZXBlbmRlbnQgdGhlcmVvbiwgaXMgbGF1bmNoZWQgb3IgcnVuLCBhIHByb21pbmVudCBkaXNwbGF5IG9mIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yYHMgYXR0cmlidXRpb24gaW5mb3JtYXRpb24gbXVzdCBvY2N1ciAodGhlICJBVFRSSUJVVElPTiBJTkZPUk1BVElPTiIpLiBUaGUgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gbXVzdCBiZSBpbmNsdWRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggU291cmNlIENvZGUgZmlsZS4gRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCB0aGUgSW5pdGlhbCBDb250cmlidXRvciBtYXkgc3BlY2lmeSBpbiB0aGUgU3VwcGxlbWVudCBGaWxlIHRoYXQgdGhlIGFib3ZlIGF0dHJpYnV0aW9uIHJlcXVpcmVtZW50IG9ubHkgYXBwbGllcyB0byBhbiBleGVjdXRhYmxlIHByb2dyYW0gcmVzdWx0aW5nIGZyb20gdGhlIEluaXRpYWwgV29yayBvciBhbnkgU3Vic2VxdWVudCBXb3JrLCBidXQgbm90IGEgcHJvZ3JhbSBkZXBlbmRlbnQgdGhlcmVvbi4gVGhlIGludGVudCBpcyB0byBwcm92aWRlIGZvciByZWFzb25hYmx5IG1vZGVzdCBhdHRyaWJ1dGlvbiwgdGhlcmVmb3JlIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBub3QgcmVxdWlyZSBSZWNpcGllbnRzIHRvIGRpc3BsYXksIGF0IGFueSB0aW1lLCBtb3JlIHRoYW4gdGhlIGZvbGxvd2luZyBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbjogKGEpIGEgY29weXJpZ2h0IG5vdGljZSBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgQ29udHJpYnV0b3I7IChiKSBhIHdvcmQgb3Igb25lIHBocmFzZSAobm90IGV4Y2VlZGluZyAxMCB3b3Jkcyk7IChjKSBvbmUgZGlnaXRhbCBpbWFnZSBvciBncmFwaGljIHByb3ZpZGVkIHdpdGggdGhlIEluaXRpYWwgV29yazsgYW5kIChkKSBhIFVSTCAoY29sbGVjdGl2ZWx5LCB0aGUgIkFUVFJJQlVUSU9OIExJTUlUUyIpLgorCisoYikgSWYgbm8gU3VwcGxlbWVudCBGaWxlIGV4aXN0cywgb3Igbm8gQXR0cmlidXRpb24gSW5mb3JtYXRpb24gaXMgc2V0IG91dCBpbiBQYXJ0IDIgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSwgdGhlbiB0aGVyZSBhcmUgbm8gcmVxdWlyZW1lbnRzIGZvciBSZWNpcGllbnRzIHRvIGRpc3BsYXkgYW55IEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIG9mIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLgorCisoYykgRWFjaCBSZWNpcGllbnQgYWNrbm93bGVkZ2VzIHRoYXQgYWxsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MgYW5kL29yIHRyYWRlIG5hbWVzIGNvbnRhaW5lZCB3aXRoaW4gUGFydCAyIG9mIHRoZSBTdXBwbGVtZW50IEZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTGljZW5zZWQgV29yayBhcmUgdGhlIGV4Y2x1c2l2ZSBwcm9wZXJ0eSBvZiB0aGUgSW5pdGlhbCBDb250cmlidXRvciBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLCBvciB1bmRlciBjaXJjdW1zdGFuY2VzIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgbGF3LCBvciBhcyBleHByZXNzbHkgc2V0IG91dCBpbiB0aGlzIExpY2Vuc2UuCisKKzMuMTEuIEZvciBncmVhdGVyIGNlcnRhaW50eSwgYW55IGRlc2NyaXB0aW9uIG9yIGF0dHJpYnV0aW9uIHByb3Zpc2lvbnMgY29udGFpbmVkIHdpdGhpbiBhIFN1cHBsZW1lbnQgRmlsZSBtYXkgb25seSBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIG5hdHVyZSBvZiB0aGUgZGVzY3JpcHRpb24gb3IgYXR0cmlidXRpb24gcmVxdWlyZW1lbnRzLCBhcyB0aGUgY2FzZSBtYXkgYmUuIEFueSBwcm92aXNpb24gaW4gYSBTdXBwbGVtZW50IEZpbGUgdGhhdCBvdGhlcndpc2UgcHVycG9ydHMgdG8gbW9kaWZ5LCB2YXJ5LCBudWxsaWZ5IG9yIGFtZW5kIGFueSByaWdodCwgb2JsaWdhdGlvbiBvciByZXByZXNlbnRhdGlvbiBjb250YWluZWQgaGVyZWluIHNoYWxsIGJlIGRlZW1lZCB2b2lkIHRvIHRoYXQgZXh0ZW50LCBhbmQgc2hhbGwgYmUgb2Ygbm8gZm9yY2Ugb3IgZWZmZWN0LgorCis0LiBDT01NRVJDSUFMIFVTRSBBTkQgSU5ERU1OSVRZLgorCis0LjEuIENPTU1FUkNJQUwgU0VSVklDRVMuCisKK0EgUmVjaXBpZW50ICgiQ09NTUVSQ0lBTCBSRUNJUElFTlQiKSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgKGNvbGxlY3RpdmVseSwgIlNFUlZJQ0VTIikgdG8gb25lIG9yIG1vcmUgb3RoZXIgUmVjaXBpZW50cyBvciBEaXN0cmlidXRvcnMuIEhvd2V2ZXIsIHN1Y2ggQ29tbWVyY2lhbCBSZWNpcGllbnQgbWF5IGRvIHNvIG9ubHkgb24gdGhhdCBDb21tZXJjaWFsIFJlY2lwaWVudGBzIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIGFueSBvdGhlciBEaXN0cmlidXRvciBvciBSZWNpcGllbnQsIGFuZCBDb21tZXJjaWFsIFJlY2lwaWVudCBtdXN0IG1ha2UgaXQgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uKHMpIGlzL2FyZSBvZmZlcmVkIGJ5IENvbW1lcmNpYWwgUmVjaXBpZW50IGFsb25lLiBBdCBubyB0aW1lIG1heSBDb21tZXJjaWFsIFJlY2lwaWVudCB1c2UgYW55IFNlcnZpY2VzIHRvIGRlbnkgYW55IHBhcnR5IHRoZSBMaWNlbnNlZCBXb3JrIGluIFNvdXJjZSBDb2RlIG9yIEV4ZWN1dGFibGUgZm9ybSB3aGVuIHNvIHJlcXVpcmVkIHVuZGVyIGFueSBvZiB0aGUgb3RoZXIgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBGb3IgZ3JlYXRlciBjZXJ0YWludHksIHRoaXMgU2VjdGlvbiA0LjEgZG9lcyBub3QgZGltaW5pc2ggYW55IG9mIHRoZSBvdGhlciB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIG9ibGlnYXRpb24gb2YgdGhlIENvbW1lcmNpYWwgUmVjaXBpZW50IGFzIGEgRGlzdHJpYnV0b3IsIHdoZW4gZGlzdHJpYnV0aW5nIGFueSBvZiB0aGUgTGljZW5zZWQgV29yayBpbiBTb3VyY2UgQ29kZSBvciBFeGVjdXRhYmxlIGZvcm0sIHRvIG1ha2Ugc3VjaCBkaXN0cmlidXRpb24gcm95YWx0eS1mcmVlIChzdWJqZWN0IHRvIHRoZSByaWdodCB0byBjaGFyZ2UgYSBmZWUgb2Ygbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBTb3VyY2UgQ29kZSBvciBFeGVjdXRhYmxlIGRpc3RyaWJ1dGlvbiAoYXMgdGhlIGNhc2UgbWF5IGJlKSkuCisKKzQuMi4gSU5ERU1OSVRZLgorCitDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycyBhbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZSBvZiB0aGUgTGljZW5zZWQgV29yaywgdGhlIERpc3RyaWJ1dG9yIHdobyBpbmNsdWRlcyBhbnkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBEaXN0cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBEaXN0cmlidXRvciBpbmNsdWRlcyB0aGUgTGljZW5zZWQgV29yayBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBvciBvZmZlcnMgYW55IFNlcnZpY2VzLCBzdWNoIERpc3RyaWJ1dG9yICgiQ09NTUVSQ0lBTCBESVNUUklCVVRPUiIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIgRGlzdHJpYnV0b3Igb3IgU3Vic2VxdWVudCBDb250cmlidXRvciAoaW4gZWFjaCBjYXNlIGFuICJJTkRFTU5JRklFRCBQQVJUWSIpIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQgY29zdHMgKGNvbGxlY3RpdmVseSAiTE9TU0VTIikgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIFBhcnR5IHRvIHRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgYW55IG9mIHRoZSBMaWNlbnNlZCBXb3JrIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIG9yIGluIGNvbm5lY3Rpb24gd2l0aCBhbnkgU2VydmljZXMuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzIHJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlciB0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBQYXJ0eSBtdXN0OiAoYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbTsgYW5kIChiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciB0byBjb250cm9sLCBhbmQgY28tb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQgYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBQYXJ0eSBtYXkgcGFydGljaXBhdGUgaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLgorCis1LiBWRVJTSU9OUyBPRiBUSEUgTElDRU5TRS4KKworNS4xLiBORVcgVkVSU0lPTlMuCisKK1RoZSBJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworNS4yLiBFRkZFQ1QgT0YgTkVXIFZFUlNJT05TLgorCitPbmNlIHRoZSBMaWNlbnNlZCBXb3JrIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YgaGFzIGJlZW4gcHVibGlzaGVkIGJ5IEluaXRpYWwgQ29udHJpYnV0b3IgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFJlY2lwaWVudCBtYXkgY2hvb3NlIHRvIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBIb3dldmVyLCBpZiBhIFJlY2lwaWVudCBjaG9vc2VzIHRvIHVzZSB0aGUgTGljZW5zZWQgV29yayB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IsIHRoZW4gZnJvbSB0aGUgZGF0ZSBvZiBtYWtpbmcgdGhpcyBjaG9pY2UsIHRoZSBSZWNpcGllbnQgbXVzdCBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhhdCBzdWJzZXF1ZW50IHZlcnNpb24gd2l0aCByZXNwZWN0IHRvIGFsbCBmdXJ0aGVyIHJlcHJvZHVjdGlvbiwgcHJlcGFyYXRpb24gb2YgZGVyaXZhdGl2ZSB3b3JrcywgcHVibGljIGRpc3BsYXkgb2YsIHB1YmxpYyBwZXJmb3JtYW5jZSBvZiwgZGlzdHJpYnV0aW9uIGFuZCBzdWJsaWNlbnNpbmcgYnkgdGhlIFJlY2lwaWVudCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIExpY2Vuc2VkIFdvcmsuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIHRoZSBMaWNlbnNlZCBXb3JrCisKKzYuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKKzYuMS4gR0VORVJBTCBESVNDTEFJTUVSLgorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIExJQ0VOU0UsIFRIRSBMSUNFTlNFRCBXT1JLIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIEFOWSBSRVBSRVNFTlRBVElPTiwgV0FSUkFOVFksIEdVQVJBTlRFRSwgQVNTVVJBTkNFIE9SIENPTkRJVElPTiBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIExJQ0VOU0VEIFdPUksgSVMgV0lUSCBSRUNJUElFTlQuIFNIT1VMRCBBTlkgTElDRU5TRUQgV09SSyBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFJFQ0lQSUVOVCAoTk9UIFRIRSBJTklUSUFMIENPTlRSSUJVVE9SIE9SIEFOWSBTVUJTRVFVRU5UIENPTlRSSUJVVE9SKSBBU1NVTUVTIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBDTEFVU0UgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIExJQ0VOU0VEIFdPUksgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgTElDRU5TRSBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIFRISVMgRElTQ0xBSU1FUi4KKworNi4yLiBSRVNQT05TSUJJTElUWSBPRiBSRUNJUElFTlRTLgorCitFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUgTGljZW5zZWQgV29yayBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis3LiBURVJNSU5BVElPTi4KKworNy4xLiBUaGlzIExpY2Vuc2Ugc2hhbGwgY29udGludWUgdW50aWwgdGVybWluYXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGV4cHJlc3MgdGVybXMgaGVyZWluLgorCis3LjIuIFJlY2lwaWVudCBtYXkgY2hvb3NlIHRvIHRlcm1pbmF0ZSB0aGlzIExpY2Vuc2UgYXV0b21hdGljYWxseSBhdCBhbnkgdGltZS4KKworNy4zLiBUaGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB0byBhIHBhcnRpY3VsYXIgUmVjaXBpZW50LCB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIHN1Y2ggUmVjaXBpZW50IGlzIGluIG1hdGVyaWFsIGJyZWFjaCBvZiBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbHMgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gc2l4dHkgKDYwKSBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIFdpdGhvdXQgbGltaXRpbmcgdGhlIGZvcmVnb2luZywgYW55IG1hdGVyaWFsIGJyZWFjaCBieSBzdWNoIFJlY2lwaWVudCBvZiBhbnkgdGVybSBvZiBhbnkgb3RoZXIgTGljZW5zZSB1bmRlciB3aGljaCBzdWNoIFJlY2lwaWVudCBpcyBncmFudGVkIGFueSByaWdodHMgdG8gdGhlIExpY2Vuc2VkIFdvcmsgc2hhbGwgY29uc3RpdHV0ZSBhIG1hdGVyaWFsIGJyZWFjaCBvZiB0aGlzIExpY2Vuc2UuCisKKzcuNC4gVXBvbiB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UgYnkgb3Igd2l0aCByZXNwZWN0IHRvIGEgcGFydGljdWxhciBSZWNpcGllbnQgZm9yIGFueSByZWFzb24sIGFsbCByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgYW5kIHVuZGVyIGFueSBvdGhlciBMaWNlbnNlIHRvIHRoYXQgUmVjaXBpZW50IHNoYWxsIHRlcm1pbmF0ZS4gSG93ZXZlciwgYWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBMaWNlbnNlZCBXb3JrIHdoaWNoIHdlcmUgcHJldmlvdXNseSBwcm9wZXJseSBncmFudGVkIGJ5IHN1Y2ggUmVjaXBpZW50IHVuZGVyIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgKGluIGVhY2ggY2FzZSwgYW4gIk90aGVyIExpY2Vuc2UiIGFuZCBpbiBwbHVyYWwsICJPdGhlciBMaWNlbnNlcyIpIHNoYWxsIHN1cnZpdmUgYW55IHN1Y2ggdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgYW5kIG9ibGlnYXRpb25zIHVuZGVyIHN1Y2ggT3RoZXIgTGljZW5zZXMgYXMgc2V0IG91dCBpbiB0aGVpciByZXNwZWN0aXZlIFNlY3Rpb25zIDIsIDMsIDQsIDUsIDYsIDcgYW5kIDgsIG11dGF0aXMgbXV0YW5kaXMsIGZvciBzbyBsb25nIGFzIHRoZSByZXNwZWN0aXZlIHN1YmxpY2Vuc2VlcyAoaS5lLiBvdGhlciBSZWNpcGllbnRzKSByZW1haW4gaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UgdW5kZXIgd2hpY2ggc3VjaCBzdWJsaWNlbnNlZXMgcmVjZWl2ZWQgcmlnaHRzIHRvIHRoZSBMaWNlbnNlZCBXb3JrLiBBbnkgdGVybWluYXRpb24gb2Ygc3VjaCBPdGhlciBMaWNlbnNlcyBzaGFsbCBiZSBwdXJzdWFudCB0byB0aGVpciByZXNwZWN0aXZlIFNlY3Rpb24gNywgbXV0YXRpcyBtdXRhbmRpcy4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworNy41LiBVcG9uIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UgYnkgb3Igd2l0aCByZXNwZWN0IHRvIGEgcGFydGljdWxhciBSZWNpcGllbnQsIFNlY3Rpb25zIDQuMSwgNC4yLCA2LjEsIDYuMiwgNy40LCA3LjUsIDguMSwgYW5kIDguMiwgdG9nZXRoZXIgd2l0aCBhbGwgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2UgbmVjZXNzYXJ5IGZvciB0aGUgaW50ZXJwcmV0YXRpb24gYW5kIGVuZm9yY2VtZW50IG9mIHNhbWUsIHNoYWxsIGV4cHJlc3NseSBzdXJ2aXZlIHN1Y2ggdGVybWluYXRpb24uCisKKzguIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCis4LjEuIElOIE5PIEVWRU5UIFNIQUxMIEFOWSBPRiBJTklUSUFMIENPTlRSSUJVVE9SLCBJVFMgU1VCU0lESUFSSUVTLCBPUiBBRkZJTElBVEVTLCBPUiBBTlkgT0YgSVRTIE9SIFRIRUlSIFJFU1BFQ1RJVkUgT0ZGSUNFUlMsIERJUkVDVE9SUywgRU1QTE9ZRUVTLCBBTkQvT1IgQUdFTlRTIChBUyBUSEUgQ0FTRSBNQVkgQkUpLCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QgREFNQUdFUywgSU5ESVJFQ1QgREFNQUdFUywgUFVOSVRJVkUgREFNQUdFUywgSU5DSURFTlRBTCBEQU1BR0VTLCBTUEVDSUFMIERBTUFHRVMsIEVYRU1QTEFSWSBEQU1BR0VTLCBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIE9USEVSIERBTUFHRVMgV0hBVFNPRVZFUiAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBPUiBBTlkgT1RIRVIgTE9TUyBBUklTSU5HIE9VVCBPRiBPUiBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhFIFVTRSwgSU5BQklMSVRZIFRPIFVTRSwgVU5BVVRIT1JJWkVEIFVTRSwgUEVSRk9STUFOQ0UsIE9SIE5PTi1QRVJGT1JNQU5DRSBPRiBUSEUgTElDRU5TRUQgV09SSyBPUiBBTlkgUEFSVCBUSEVSRU9GIE9SIFRIRSBQUk9WSVNJT04gT0YgT1IgRkFJTFVSRSBUTyBQUk9WSURFIFNVUFBPUlQgU0VSVklDRVMsIE9SIFRIQVQgUkVTVUxUIEZST00gRVJST1JTLCBERUZFQ1RTLCBPTUlTU0lPTlMsIERFTEFZUyBJTiBPUEVSQVRJT04gT1IgVFJBTlNNSVNTSU9OLCBPUiBBTlkgT1RIRVIgRkFJTFVSRSBPRiBQRVJGT1JNQU5DRSksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBJTiBSRUxBVElPTiBUTyBPUiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgTElDRU5TRUQgV09SSyBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gVEhJUyBDTEFVU0UgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIExJQ0VOU0VEIFdPUksgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgTElDRU5TRSBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIFRIRSBMSU1JVEFUSU9OUyBTRVQgRk9SVEggSU4gVEhJUyBTRUNUSU9OIDguMS4KKworOC4yLiBFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIExJQ0VOU0UsIEVBQ0ggUkVDSVBJRU5UIFNIQUxMIE5PVCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgTElDRU5TRUQgV09SSyBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4KKworOS4gR09WRVJOSU5HIExBVyBBTkQgTEVHQUwgQUNUSU9OLgorCis5LjEuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBhbmQgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgbGF3cyBvZiB0aGUgR292ZXJuaW5nIEp1cmlzZGljdGlvbiBhc3NpZ25lZCBpbiBQYXJ0IDMgb2YgRXhoaWJpdCBBLCB3aXRob3V0IHJlZ2FyZCB0byBpdHMgY29uZmxpY3Qgb2YgbGF3IHByb3Zpc2lvbnMuIE5vIHBhcnR5IG1heSBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiB0aGUgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcyBpdHMgcmlnaHRzIChpZiBhbnkpIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgbGl0aWdhdGlvbiBhcmlzaW5nIHVuZGVyIHRoaXMgTGljZW5zZS4gTm90ZSB0aGF0IGlmIHRoZSBHb3Zlcm5pbmcgSnVyaXNkaWN0aW9uIGlzIG5vdCBhc3NpZ25lZCBpbiBQYXJ0IDMgb2YgRXhoaWJpdCBBLCB0aGVuIHRoZSBHb3Zlcm5pbmcgSnVyaXNkaWN0aW9uIHNoYWxsIGJlIHRoZSBTdGF0ZSBvZiBOZXcgWW9yay4KKworOS4yLiBUaGUgY291cnRzIG9mIHRoZSBHb3Zlcm5pbmcgSnVyaXNkaWN0aW9uIHNoYWxsIGhhdmUganVyaXNkaWN0aW9uLCBidXQgbm90IGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24sIHRvIGVudGVydGFpbiBhbmQgZGV0ZXJtaW5lIGFsbCBkaXNwdXRlcyBhbmQgY2xhaW1zLCB3aGV0aGVyIGZvciBzcGVjaWZpYyBwZXJmb3JtYW5jZSwgaW5qdW5jdGlvbiwgZGFtYWdlcyBvciBvdGhlcndpc2UsIAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjRmODIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMApAQCAtMCwwICsxLDM3MiBAQAorCitBUFBMRSBQVUJMSUMgU09VUkNFIExJQ0VOU0UKK1ZlcnNpb24gMS4wIC0gTWFyY2ggMTYsIDE5OTkKKworUGxlYXNlIHJlYWQgdGhpcyBMaWNlbnNlIGNhcmVmdWxseSBiZWZvcmUgZG93bmxvYWRpbmcgdGhpcyBzb2Z0d2FyZS4KK0J5IGRvd25sb2FkaW5nIGFuZCB1c2luZyB0aGlzIHNvZnR3YXJlLCB5b3UgYXJlIGFncmVlaW5nIHRvIGJlIGJvdW5kIGJ5Cit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgZG8gbm90IG9yIGNhbm5vdCBhZ3JlZSB0byB0aGUgdGVybXMKK29mIHRoaXMgTGljZW5zZSwgcGxlYXNlIGRvIG5vdCBkb3dubG9hZCBvciB1c2UgdGhlIHNvZnR3YXJlLgorCisxLiBHZW5lcmFsOyBEZWZpbml0aW9ucy4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIKK3dvcmsgd2hpY2ggQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIHB1YmxpY2x5IGFubm91bmNlcyBhcworc3ViamVjdCB0byB0aGlzIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBhbmQgd2hpY2ggY29udGFpbnMgYQorbm90aWNlIHBsYWNlZCBieSBBcHBsZSBpZGVudGlmeWluZyBzdWNoIHByb2dyYW0gb3Igd29yayBhcyAiT3JpZ2luYWwKK0NvZGUiIGFuZCBzdGF0aW5nIHRoYXQgaXQgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBcHBsZSBQdWJsaWMKK1NvdXJjZSBMaWNlbnNlIHZlcnNpb24gMS4wIChvciBzdWJzZXF1ZW50IHZlcnNpb24gdGhlcmVvZiksIGFzIGl0IG1heQorYmUgcmV2aXNlZCBmcm9tIHRpbWUgdG8gdGltZSBieSBBcHBsZSAoIkxpY2Vuc2UiKS4gQXMgdXNlZCBpbiB0aGlzCitMaWNlbnNlOgorCisxLjEgIkFwcGxpY2FibGUgUGF0ZW50cyIgbWVhbjogKGEpIGluIHRoZSBjYXNlIHdoZXJlIEFwcGxlIGlzIHRoZQorZ3JhbnRvciBvZiByaWdodHMsIChpKSBwYXRlbnRzIG9yIHBhdGVudCBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgbm93CitvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIEFwcGxlIGFuZCAoaWkpIHdob3NlCitjbGFpbXMgY292ZXIgc3ViamVjdCBtYXR0ZXIgY29udGFpbmVkIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBidXQgb25seQordG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gdXNlLCByZXByb2R1Y2UgYW5kL29yIGRpc3RyaWJ1dGUgdGhlCitPcmlnaW5hbCBDb2RlIHdpdGhvdXQgaW5mcmluZ2VtZW50OyBhbmQgKGIpIGluIHRoZSBjYXNlIHdoZXJlIFlvdQorYXJlIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIHBhdGVudHMgYW5kIHBhdGVudCBhcHBsaWNhdGlvbnMgdGhhdAorYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIFlvdSBhbmQgKGlpKQord2hvc2UgY2xhaW1zIGNvdmVyIHN1YmplY3QgbWF0dGVyIGluIFlvdXIgTW9kaWZpY2F0aW9ucywgdGFrZW4gYWxvbmUKK29yIGluIGNvbWJpbmF0aW9uIHdpdGggT3JpZ2luYWwgQ29kZS4KKworMS4yICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCB0aGUKK2NvbWJpbmF0aW9uIG9mIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55CityZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuMyAiRGVwbG95IiBtZWFucyB0byB1c2UsIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgb3RoZXIKK3RoYW4gZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IChSJmFtcDtEKSwgYW5kIGluY2x1ZGVzCit3aXRob3V0IGxpbWl0YXRpb24sIGFueSBhbmQgYWxsIGludGVybmFsIHVzZSBvciBkaXN0cmlidXRpb24gb2YKK0NvdmVyZWQgQ29kZSB3aXRoaW4gWW91ciBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gZXhjZXB0IGZvciBSJmFtcDtEIHVzZSwKK2FzIHdlbGwgYXMgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZAorQ29kZSBieSBZb3UgdG8gYW55IHRoaXJkIHBhcnR5IGluIGFueSBmb3JtIG9yIG1hbm5lci4KKworMS40ICJMYXJnZXIgV29yayIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucwordGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuNSAiTW9kaWZpY2F0aW9ucyIgbWVhbiBhbnkgYWRkaXRpb24gdG8sIGRlbGV0aW9uIGZyb20sIGFuZC9vciBjaGFuZ2UKK3RvLCB0aGUgc3Vic3RhbmNlIGFuZC9vciBzdHJ1Y3R1cmUgb2YgQ292ZXJlZCBDb2RlLiBXaGVuIGNvZGUgaXMKK3JlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczogKGEpIGFueSBhZGRpdGlvbiB0bworb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlOworYW5kL29yIChiKSBhbnkgbmV3IGZpbGUgb3Igb3RoZXIgcmVwcmVzZW50YXRpb24gb2YgY29tcHV0ZXIgcHJvZ3JhbQorc3RhdGVtZW50cyB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIENvdmVyZWQgQ29kZS4KKworMS42ICJPcmlnaW5hbCBDb2RlIiBtZWFucyB0aGUgU291cmNlIENvZGUgb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsKK2FzIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcKK3RoZSBTb3VyY2UgQ29kZSBvZiBhbnkgdXBkYXRlcyBvciB1cGdyYWRlcyB0byBzdWNoIHByb2dyYW1zIG9yIHdvcmtzCittYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB0aGF0IGhhcyBiZWVuCitleHByZXNzbHkgaWRlbnRpZmllZCBieSBBcHBsZSBhcyBzdWNoIGluIHRoZSBoZWFkZXIgZmlsZShzKSBvZiBzdWNoCit3b3JrLgorCisxLjcgIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgaHVtYW4gcmVhZGFibGUgZm9ybSBvZiBhIHByb2dyYW0gb3Igb3RoZXIKK3dvcmsgdGhhdCBpcyBzdWl0YWJsZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwKK21vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsCitzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUKKyhvYmplY3QgY29kZSkuCisKKzEuOCAiWW91IiBvciAiWW91ciIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nCityaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIgoraW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIKK2NvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdAorb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwKK3doZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZgorc3VjaCBlbnRpdHkuCisKKzIuIFBlcm1pdHRlZCBVc2VzOyBDb25kaXRpb25zICZhbXA7IFJlc3RyaWN0aW9ucy4gU3ViamVjdCB0byB0aGUgdGVybXMKK2FuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgQXBwbGUgaGVyZWJ5IGdyYW50cyBZb3UsIGVmZmVjdGl2ZSBvbgordGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgYW5kIGRvd25sb2FkIHRoZSBPcmlnaW5hbCBDb2RlLCBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgdG8gdGhlIGV4dGVudCBvZgorQXBwbGVgcyBBcHBsaWNhYmxlIFBhdGVudHMgYW5kIGNvcHlyaWdodHMgY292ZXJpbmcgdGhlIE9yaWdpbmFsCitDb2RlLCB0byBkbyB0aGUgZm9sbG93aW5nOgorCisyLjEgWW91IG1heSB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSBPcmlnaW5hbCBDb2RlLCB3aXRoIG9yCit3aXRob3V0IE1vZGlmaWNhdGlvbnMsIHNvbGVseSBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQKK2RldmVsb3BtZW50LCBwcm92aWRlZCB0aGF0IFlvdSBtdXN0IGluIGVhY2ggaW5zdGFuY2U6CisKKyhhKSByZXRhaW4gYW5kIHJlcHJvZHVjZSBpbiBhbGwgY29waWVzIG9mIE9yaWdpbmFsIENvZGUgdGhlIGNvcHlyaWdodAorYW5kIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMgYW5kIGRpc2NsYWltZXJzIG9mIEFwcGxlIGFzIHRoZXkgYXBwZWFyCitpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIGluIHRoZSBPcmlnaW5hbCBDb2RlCit0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZTsKKworKGIpIGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgU291cmNlIENvZGUgb2YKK0NvdmVyZWQgQ29kZSBhbmQgZG9jdW1lbnRhdGlvbiBZb3UgZGlzdHJpYnV0ZSwgYW5kIFlvdSBtYXkgbm90IG9mZmVyCitvciBpbXBvc2UgYW55IHRlcm1zIG9uIHN1Y2ggU291cmNlIENvZGUgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGlzCitMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLCBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyCitTZWN0aW9uIDY7IGFuZAorCisoYykgY29tcGxldGVseSBhbmQgYWNjdXJhdGVseSBkb2N1bWVudCBhbGwgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBoYXZlCittYWRlIGFuZCB0aGUgZGF0ZSBvZiBlYWNoIHN1Y2ggTW9kaWZpY2F0aW9uLCBkZXNpZ25hdGUgdGhlIHZlcnNpb24gb2YKK3RoZSBPcmlnaW5hbCBDb2RlIHlvdSB1c2VkLCBwcm9taW5lbnRseSBpbmNsdWRlIGEgZmlsZSBjYXJyeWluZyBzdWNoCitpbmZvcm1hdGlvbiB3aXRoIHRoZSBNb2RpZmljYXRpb25zLCBhbmQgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4KK0V4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFsbCBzdWNoIE1vZGlmaWNhdGlvbnMuCisKKzIuMiBZb3UgbWF5IERlcGxveSBDb3ZlcmVkIENvZGUsIHByb3ZpZGVkIHRoYXQgWW91IG11c3QgaW4gZWFjaAoraW5zdGFuY2U6CisKKyhhKSBzYXRpc2Z5IGFsbCB0aGUgY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIuMSB3aXRoIHJlc3BlY3QgdG8gdGhlCitTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlOworCisoYikgbWFrZSBhbGwgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIHB1YmxpY2x5IGF2YWlsYWJsZSBpbiBTb3VyY2UKK0NvZGUgZm9ybSB2aWEgZWxlY3Ryb25pYyBkaXN0cmlidXRpb24gKGUuZy4gZG93bmxvYWQgZnJvbSBhIHdlYiBzaXRlKQordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgc3ViamVjdCB0byB0aGUgbGljZW5zZSBncmFudHMgc2V0Citmb3J0aCBpbiBTZWN0aW9uIDMgYmVsb3csIGFuZCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBZb3UgbWF5IGNob29zZSB0bworb2ZmZXIgdW5kZXIgU2VjdGlvbiA2LiBZb3UgbXVzdCBjb250aW51ZSB0byBtYWtlIHRoZSBTb3VyY2UgQ29kZSBvZgorWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyB5b3UgRGVwbG95IHRoZQorQ292ZXJlZCBDb2RlIG9yIHR3ZWx2ZSAoMTIpIG1vbnRocyBmcm9tIHRoZSBkYXRlIG9mIGluaXRpYWwKK0RlcGxveW1lbnQsIHdoaWNoZXZlciBpcyBsb25nZXI7CisKKyhjKSBtdXN0IG5vdGlmeSBBcHBsZSBhbmQgb3RoZXIgdGhpcmQgcGFydGllcyBvZiBob3cgdG8gb2J0YWluIFlvdXIKK0RlcGxveWVkIE1vZGlmaWNhdGlvbnMgYnkgZmlsbGluZyBvdXQgYW5kIHN1Ym1pdHRpbmcgdGhlIHJlcXVpcmVkCitpbmZvcm1hdGlvbiBmb3VuZCBhdAoraHR0cDovL3d3dy5hcHBsZS5jb20vcHVibGljc291cmNlL21vZGlmaWNhdGlvbnMuaHRtbDsgYW5kCisKKyhkKSBpZiB5b3UgRGVwbG95IENvdmVyZWQgQ29kZSBpbiBvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksCitpbmNsdWRlIGEgcHJvbWluZW50IG5vdGljZSwgaW4gdGhlIGNvZGUgaXRzZWxmIGFzIHdlbGwgYXMgaW4gcmVsYXRlZAorZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMKK2F2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZAord2hlcmUgdG8gb2J0YWluIHN1Y2ggU291cmNlIENvZGUuCisKKzMuIFlvdXIgR3JhbnRzLiBJbiBjb25zaWRlcmF0aW9uIG9mLCBhbmQgYXMgYSBjb25kaXRpb24gdG8sIHRoZQorbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlOgorCisoYSkgWW91IGhlcmVieSBncmFudCB0byBBcHBsZSBhbmQgYWxsIHRoaXJkIHBhcnRpZXMgYSBub24tZXhjbHVzaXZlLAorcm95YWx0eS1mcmVlIGxpY2Vuc2UsIHVuZGVyIFlvdXIgQXBwbGljYWJsZSBQYXRlbnRzIGFuZCBvdGhlcgoraW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLAorcmVwcm9kdWNlLCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIERlcGxveSBZb3VyIE1vZGlmaWNhdGlvbnMgb2YgdGhlCitzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMgQXBwbGVgcyBsaWNlbnNlcyB1bmRlciBTZWN0aW9ucyAyLjEgYW5kIDIuMjsKK2FuZAorCisoYikgWW91IGhlcmVieSBncmFudCB0byBBcHBsZSBhbmQgaXRzIHN1YnNpZGlhcmllcyBhIG5vbi1leGNsdXNpdmUsCit3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgcGVycGV0dWFsIGFuZCBpcnJldm9jYWJsZSBsaWNlbnNlLCB1bmRlciBZb3VyCitBcHBsaWNhYmxlIFBhdGVudHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3duZWQgb3IKK2NvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsIHJlcHJvZHVjZSwgZXhlY3V0ZSwgY29tcGlsZSwgZGlzcGxheSwKK3BlcmZvcm0sIG1vZGlmeSBvciBoYXZlIG1vZGlmaWVkIChmb3IgQXBwbGUgYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMpLAorc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSBZb3VyIE1vZGlmaWNhdGlvbnMsIGluIGFueSBmb3JtLCB0aHJvdWdoCittdWx0aXBsZSB0aWVycyBvZiBkaXN0cmlidXRpb24uCisKKzQuIExhcmdlciBXb3Jrcy4gWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZAorQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kCitkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBlYWNoIHN1Y2gKK2luc3RhbmNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlCitmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZi4KKworNS4gTGltaXRhdGlvbnMgb24gUGF0ZW50IExpY2Vuc2UuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluCitTZWN0aW9uIDIsIG5vIG90aGVyIHBhdGVudCByaWdodHMsIGV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQKK2J5IEFwcGxlIGhlcmVpbi4gTW9kaWZpY2F0aW9ucyBhbmQvb3IgTGFyZ2VyIFdvcmtzIG1heSByZXF1aXJlCithZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIEFwcGxlIHdoaWNoIEFwcGxlIG1heSBncmFudCBpbiBpdHMKK3NvbGUgZGlzY3JldGlvbi4KKworNi4gQWRkaXRpb25hbCBUZXJtcy4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUKK2Zvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yCitvdGhlciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbgorKCJBZGRpdGlvbmFsIFRlcm1zIikgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkCitDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBhcyBZb3VyCitzb2xlIHJlc3BvbnNpYmlsaXR5LCBhbmQgbm90IG9uIGJlaGFsZiBvZiBBcHBsZS4gWW91IG11c3Qgb2J0YWluIHRoZQorcmVjaXBpZW50YHMgYWdyZWVtZW50IHRoYXQgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcyBhcmUgb2ZmZXJlZCBieQorWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBBcHBsZQoraGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QKK0FwcGxlIGJ5IHJlYXNvbiBvZiBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zLgorCis3LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4gQXBwbGUgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3Cit2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlCitnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBPbmNlIE9yaWdpbmFsIENvZGUgaGFzIGJlZW4KK3B1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIFlvdSBtYXkKK2NvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28KK2Nob29zZSB0byB1c2Ugc3VjaCBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudAordmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcHVibGlzaGVkIGJ5IEFwcGxlLiBObyBvbmUgb3RoZXIgdGhhbiBBcHBsZQoraGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQKK3VuZGVyIHRoaXMgTGljZW5zZS4KKworOC4gTk8gV0FSUkFOVFkgT1IgU1VQUE9SVC4gVGhlIE9yaWdpbmFsIENvZGUgbWF5IGNvbnRhaW4gaW4gd2hvbGUgb3IKK2luIHBhcnQgcHJlLXJlbGVhc2UsIHVudGVzdGVkLCBvciBub3QgZnVsbHkgdGVzdGVkIHdvcmtzLiBUaGUKK09yaWdpbmFsIENvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcworb2YgZGF0YSwgYW5kIG1heSBiZSBpbmNvbXBsZXRlIG9yIGNvbnRhaW4gaW5hY2N1cmFjaWVzLiBZb3UKK2V4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB1c2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUsIG9yCithbnkgcG9ydGlvbiB0aGVyZW9mLCBpcyBhdCBZb3VyIHNvbGUgYW5kIGVudGlyZSByaXNrLiBUSEUgT1JJR0lOQUwKK0NPREUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSwgVVBHUkFERVMgT1IgU1VQUE9SVAorT0YgQU5ZIEtJTkQgQU5EIEFQUExFIEFORCBBUFBMRWBTIExJQ0VOU09SKFMpIChGT1IgVEhFIFBVUlBPU0VTIE9GCitTRUNUSU9OUyA4IEFORCA5LCBBUFBMRSBBTkQgQVBQTEVgUyBMSUNFTlNPUihTKSBBUkUgQ09MTEVDVElWRUxZCitSRUZFUlJFRCBUTyBBUyAiQVBQTEUiKSBFWFBSRVNTTFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgQU5EL09SCitDT05ESVRJT05TLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IKK1NBVElTRkFDVE9SWSBRVUFMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKK05PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIEFQUExFIERPRVMgTk9UIFdBUlJBTlQgVEhBVAorVEhFIEZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFIE9SSUdJTkFMIENPREUgV0lMTCBNRUVUIFlPVVIKK1JFUVVJUkVNRU5UUywgT1IgVEhBVCBUSEUgT1BFUkFUSU9OIE9GIFRIRSBPUklHSU5BTCBDT0RFIFdJTEwgQkUKK1VOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSwgT1IgVEhBVCBERUZFQ1RTIElOIFRIRSBPUklHSU5BTCBDT0RFCitXSUxMIEJFIENPUlJFQ1RFRC4gTk8gT1JBTCBPUiBXUklUVEVOIElORk9STUFUSU9OIE9SIEFEVklDRSBHSVZFTgorQlkgQVBQTEUgT1IgQU4gQVBQTEUgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSBTSEFMTCBDUkVBVEUgQQorV0FSUkFOVFkgT1IgSU4gQU5ZIFdBWSBJTkNSRUFTRSBUSEUgU0NPUEUgT0YgVEhJUyBXQVJSQU5UWS4gWW91CithY2tub3dsZWRnZSB0aGF0IHRoZSBPcmlnaW5hbCBDb2RlIGlzIG5vdCBpbnRlbmRlZCBmb3IgdXNlIGluIHRoZQorb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQgbmF2aWdhdGlvbiwgY29tbXVuaWNhdGlvbgorc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlCitvZiB0aGUgT3JpZ2luYWwgQ29kZSBjb3VsZCBsZWFkIHRvIGRlYXRoLCBwZXJzb25hbCBpbmp1cnksIG9yIHNldmVyZQorcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuCisKKzkuIExpYWJpbGl0eS4KKworOS4xIEluZnJpbmdlbWVudC4gSWYgYW55IG9mIHRoZSBPcmlnaW5hbCBDb2RlIGJlY29tZXMgdGhlIHN1YmplY3Qgb2YKK2EgY2xhaW0gb2YgaW5mcmluZ2VtZW50ICgiQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSIpLCBBcHBsZSBtYXksIGF0CitpdHMgc29sZSBkaXNjcmV0aW9uIGFuZCBvcHRpb246IChhKSBhdHRlbXB0IHRvIHByb2N1cmUgdGhlIHJpZ2h0cworbmVjZXNzYXJ5IGZvciBZb3UgdG8gY29udGludWUgdXNpbmcgdGhlIEFmZmVjdGVkIE9yaWdpbmFsIENvZGU7IChiKQorbW9kaWZ5IHRoZSBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIHNvIHRoYXQgaXQgaXMgbm8gbG9uZ2VyCitpbmZyaW5naW5nOyBvciAoYykgdGVybWluYXRlIFlvdXIgcmlnaHRzIHRvIHVzZSB0aGUgQWZmZWN0ZWQKK09yaWdpbmFsIENvZGUsIGVmZmVjdGl2ZSBpbW1lZGlhdGVseSB1cG9uIEFwcGxlYHMgcG9zdGluZyBvZiBhCitub3RpY2UgdG8gc3VjaCBlZmZlY3Qgb24gdGhlIEFwcGxlIHdlYiBzaXRlIHRoYXQgaXMgdXNlZCBmb3IKK2ltcGxlbWVudGF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworOS4yIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIFNIQUxMIEFQUExFIEJFCitMSUFCTEUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRISVMgTElDRU5TRSBPUiBZT1VSIFVTRSBPUgorSU5BQklMSVRZIFRPIFVTRSBUSEUgT1JJR0lOQUwgQ09ERSwgT1IgQU5ZIFBPUlRJT04gVEhFUkVPRiwgV0hFVEhFUgorVU5ERVIgQSBUSEVPUlkgT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksCitQUk9EVUNUUyBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGIEFQUExFIEhBUyBCRUVOIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMgQU5EIE5PVFdJVEhTVEFORElORyBUSEUgRkFJTFVSRSBPRgorRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIFJFTUVEWS4gSW4gbm8gZXZlbnQgc2hhbGwgQXBwbGVgcyB0b3RhbAorbGlhYmlsaXR5IHRvIFlvdSBmb3IgYWxsIGRhbWFnZXMgdW5kZXIgdGhpcyBMaWNlbnNlIGV4Y2VlZCB0aGUKK2Ftb3VudCBvZiBmaWZ0eSBkb2xsYXJzICgkNTAuMDApLgorCisxMC4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZQordHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyAiQXBwbGUiLCAiQXBwbGUgQ29tcHV0ZXIiLCAiTWFjIE9TIFgiLAorIk1hYyBPUyBYIFNlcnZlciIgb3IgYW55IG90aGVyIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgYmVsb25naW5nCit0byBBcHBsZSAoY29sbGVjdGl2ZWx5ICJBcHBsZSBNYXJrcyIpIGFuZCBubyBBcHBsZSBNYXJrcyBtYXkgYmUKK3VzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZQorb3RoZXIgdGhhbiBhcyBwZXJtaXR0ZWQgYnkgYW5kIGluIHN0cmljdCBjb21wbGlhbmNlIGF0IGFsbCB0aW1lcword2l0aCBBcHBsZWBzIHRoaXJkIHBhcnR5IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzIHdoaWNoIGFyZQorcG9zdGVkIGF0IGh0dHA6Ly93d3cuYXBwbGUuY29tL2xlZ2FsL2d1aWRlbGluZXNmb3IzcmRwYXJ0aWVzLmh0bWwuCisKKzExLiBPd25lcnNoaXAuIEFwcGxlIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0bwordGhlIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mCitBcHBsZSAoIkFwcGxlIE1vZGlmaWNhdGlvbnMiKSwgYW5kIHN1Y2ggQXBwbGUgTW9kaWZpY2F0aW9ucyB3aWxsCitub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gQXBwbGUgbWF5LCBhdCBpdHMKK3NvbGUgZGlzY3JldGlvbiwgY2hvb3NlIHRvIGxpY2Vuc2Ugc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHVuZGVyCit0aGlzIExpY2Vuc2UsIG9yIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzCitMaWNlbnNlIG9yIG1heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuIEFwcGxlYHMKK2RldmVsb3BtZW50LCB1c2UsIHJlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uLCBzdWJsaWNlbnNpbmcgYW5kCitkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIHdpbGwgbm90IGJlIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLgorCisxMi4gVGVybWluYXRpb24uCisKKzEyLjEgVGVybWluYXRpb24uIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsCit0ZXJtaW5hdGU6CisKKyhhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGgKK2FueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMAorZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIGJyZWFjaDsgKGIpIGltbWVkaWF0ZWx5IGluIHRoZSBldmVudCBvZgordGhlIGNpcmN1bXN0YW5jZXMgZGVzY3JpYmVkIGluIFNlY3Rpb25zIDkuMSBhbmQvb3IgMTMuNihiKTsgb3IgKGMpCithdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlCit0ZXJtIG9mIHRoaXMgTGljZW5zZSwgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50CithZ2FpbnN0IEFwcGxlLgorCisxMi4yIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvCitpbW1lZGlhdGVseSBzdG9wIGFueSBmdXJ0aGVyIHVzZSwgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24gYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSwgb3IgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSBpbiB0aGUKK2Nhc2Ugb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbiA5LjEsIGFuZCB0byBkZXN0cm95IGFsbCBjb3BpZXMgb2YKK3RoZSBDb3ZlcmVkIENvZGUgb3IgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSAoaW4gdGhlIGNhc2Ugb2YKK3Rlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb24gOS4xKSB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IKK2NvbnRyb2wuIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGhhdmUgYmVlbgorcHJvcGVybHkgZ3JhbnRlZCBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbgorb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIHNob3VsZCByZW1haW4KK2luIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLAoraW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9ucyAzLCA1LCA4LCA5LCAxMCwgMTEsIDEyLjIgYW5kCisxMy4gTmVpdGhlciBwYXJ0eSB3aWxsIGJlIGxpYWJsZSB0byB0aGUgb3RoZXIgZm9yIGNvbXBlbnNhdGlvbiwKK2luZGVtbml0eSBvciBkYW1hZ2VzIG9mIGFueSBzb3J0IHNvbGVseSBhcyBhIHJlc3VsdCBvZiB0ZXJtaW5hdGluZwordGhpcyBMaWNlbnNlIGluIGFjY29yZGFuY2Ugd2l0aCBpdHMgdGVybXMsIGFuZCB0ZXJtaW5hdGlvbiBvZiB0aGlzCitMaWNlbnNlIHdpbGwgYmUgd2l0aG91dCBwcmVqdWRpY2UgdG8gYW55IG90aGVyIHJpZ2h0IG9yIHJlbWVkeSBvZgorZWl0aGVyIHBhcnR5LgorCisxMy4gTWlzY2VsbGFuZW91cy4KKworMTMuMSBFeHBvcnQgTGF3IEFzc3VyYW5jZXMuIFlvdSBtYXkgbm90IHVzZSBvciBvdGhlcndpc2UgZXhwb3J0IG9yCityZS1leHBvcnQgdGhlIE9yaWdpbmFsIENvZGUgZXhjZXB0IGFzIGF1dGhvcml6ZWQgYnkgVW5pdGVkIFN0YXRlcworbGF3IGFuZCB0aGUgbGF3cyBvZiB0aGUganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBPcmlnaW5hbCBDb2RlIHdhcworb2J0YWluZWQuIEluIHBhcnRpY3VsYXIsIGJ1dCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSBPcmlnaW5hbCBDb2RlCittYXkgbm90IGJlIGV4cG9ydGVkIG9yIHJlLWV4cG9ydGVkIChhKSBpbnRvIChvciB0byBhIG5hdGlvbmFsIG9yCityZXNpZGVudCBvZikgYW55IFUuUy4gZW1iYXJnb2VkIGNvdW50cnkgb3IgKGIpIHRvIGFueW9uZSBvbiB0aGUKK1UuUy4gVHJlYXN1cnkgRGVwYXJ0bWVudGBzIGxpc3Qgb2YgU3BlY2lhbGx5IERlc2lnbmF0ZWQgTmF0aW9uYWxzCitvciB0aGUgVS5TLiBEZXBhcnRtZW50IG9mIENvbW1lcmNlYHMgVGFibGUgb2YgRGVuaWFsIE9yZGVycy4gQnkKK3VzaW5nIHRoZSBPcmlnaW5hbCBDb2RlLCBZb3UgcmVwcmVzZW50IGFuZCB3YXJyYW50IHRoYXQgWW91IGFyZSBub3QKK2xvY2F0ZWQgaW4sIHVuZGVyIGNvbnRyb2wgb2YsIG9yIGEgbmF0aW9uYWwgb3IgcmVzaWRlbnQgb2YgYW55IHN1Y2gKK2NvdW50cnkgb3Igb24gYW55IHN1Y2ggbGlzdC4KKworMTMuMiBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0iIGFzCitkZWZpbmVkIGluIEZBUiAyLjEwMS4gR292ZXJubWVudCBzb2Z0d2FyZSBhbmQgdGVjaG5pY2FsIGRhdGEKK3JpZ2h0cyBpbiB0aGUgQ292ZXJlZCBDb2RlIGluY2x1ZGUgb25seSB0aG9zZSByaWdodHMgY3VzdG9tYXJpbHkKK3Byb3ZpZGVkIHRvIHRoZSBwdWJsaWMgYXMgZGVmaW5lZCBpbiB0aGlzIExpY2Vuc2UuIFRoaXMgY3VzdG9tYXJ5Citjb21tZXJjaWFsIGxpY2Vuc2UgaW4gdGVjaG5pY2FsIGRhdGEgYW5kIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGluCithY2NvcmRhbmNlIHdpdGggRkFSIDEyLjIxMSAoVGVjaG5pY2FsIERhdGEpIGFuZCAxMi4yMTIgKENvbXB1dGVyCitTb2Z0d2FyZSkgYW5kLCBmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIHB1cmNoYXNlcywgREZBUgorMjUyLjIyNy03MDE1IChUZWNobmljYWwgRGF0YSAtLSBDb21tZXJjaWFsIEl0ZW1zKSBhbmQgMjI3LjcyMDItMworKFJpZ2h0cyBpbiBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIG9yIENvbXB1dGVyIFNvZnR3YXJlCitEb2N1bWVudGF0aW9uKS4gQWNjb3JkaW5nbHksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUKK0NvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzEzLjMgUmVsYXRpb25zaGlwIG9mIFBhcnRpZXMuIFRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMKK2NyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YKK2xlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gWW91IGFuZCBBcHBsZSwgYW5kIFlvdSB3aWxsIG5vdCByZXByZXNlbnQKK3RvIHRoZSBjb250cmFyeSwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBhcHBlYXJhbmNlIG9yCitvdGhlcndpc2UuCisKKzEzLjQgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyCitBcHBsZWBzIHJpZ2h0IHRvIGFjcXVpcmUsIGxpY2Vuc2UsIGRldmVsb3AsIGhhdmUgb3RoZXJzIGRldmVsb3AgZm9yCitpdCwgbWFya2V0IGFuZC9vciBkaXN0cmlidXRlIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBwZXJmb3JtCit0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwKK01vZGlmaWNhdGlvbnMsIExhcmdlciBXb3JrcywgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IFlvdSBtYXkKK2RldmVsb3AsIHByb2R1Y2UsIG1hcmtldCBvciBkaXN0cmlidXRlLgorCisxMy41IFdhaXZlcjsgQ29uc3RydWN0aW9uLiBGYWlsdXJlIGJ5IEFwcGxlIHRvIGVuZm9yY2UgYW55IHByb3Zpc2lvbgorb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGRlZW1lZCBhIHdhaXZlciBvZiBmdXR1cmUgZW5mb3JjZW1lbnQKK29mIHRoYXQgb3IgYW55IG90aGVyIHByb3Zpc2lvbi4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoCitwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0Cit0aGUgZHJhZnRlciB3aWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEzLjYgU2V2ZXJhYmlsaXR5LiAoYSkgSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQKK2p1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgb3IgcG9ydGlvbgordGhlcmVvZiwgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhhdCBwcm92aXNpb24gb2YgdGhlIExpY2Vuc2Ugd2lsbCBiZQorZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdCB0aGUKK2Vjb25vbWljIGJlbmVmaXRzIGFuZCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGFuZCB0aGUgcmVtYWluZGVyIG9mCit0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuIChiKQorTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIGlmIGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBvcgorcmVzdHJpY3RzIFlvdSBmcm9tIGZ1bGx5IGFuZC9vciBzcGVjaWZpY2FsbHkgY29tcGx5aW5nIHdpdGgKK1NlY3Rpb25zIDIgYW5kL29yIDMgb3IgcHJldmVudHMgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIGVpdGhlciBvZgordGhvc2UgU2VjdGlvbnMsIHRoaXMgTGljZW5zZSB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBhbmQgWW91CittdXN0IGltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIGFueSB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQKK2Rlc3Ryb3kgYWxsIGNvcGllcyBvZiBpdCB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4KKworMTMuNyBEaXNwdXRlIFJlc29sdXRpb24uIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbgorYmV0d2VlbiBZb3UgYW5kIEFwcGxlIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluCit0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgYW5kIFlvdSBhbmQgQXBwbGUgaGVyZWJ5Citjb25zZW50IHRvIHRoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlCithbmQgZmVkZXJhbCBjb3VydHMgd2l0aGluIHRoYXQgRGlzdHJpY3Qgd2l0aCByZXNwZWN0IHRvIHRoaXMKK0xpY2Vuc2UuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbgorQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseQorZXhjbHVkZWQuCisKKzEzLjggRW50aXJlIEFncmVlbWVudDsgR292ZXJuaW5nIExhdy4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZQorZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdAorbWF0dGVyIGhlcmVvZi4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2VwdCB0aGF0IGJvZHkgb2YKK0NhbGlmb3JuaWEgbGF3IGNvbmNlcm5pbmcgY29uZmxpY3RzIG9mIGxhdy4KKworV2hlcmUgWW91IGFyZSBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZworY2xhdXNlIGFwcGxpZXM6IFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhleSBoYXZlIHJlcXVlc3RlZAordGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFsbCByZWxhdGVkIGRvY3VtZW50cyBiZSBkcmFmdGVkIGluIEVuZ2xpc2guIExlcworcGFydGllcyBvbnQgZXhpZ2UgcXVlIGxlIHByZXNlbnQgY29udHJhdCBldCB0b3VzIGxlcyBkb2N1bWVudHMKK2Nvbm5leGVzIHNvaWVudCByZWRpZ2VzIGVuIGFuZ2xhaXMuCisKK0VYSElCSVQgQS4KKworIlBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5OSBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgUmlnaHRzCitSZXNlcnZlZC4gVGhpcyBmaWxlIGNvbnRhaW5zIE9yaWdpbmFsIENvZGUgYW5kL29yIE1vZGlmaWNhdGlvbnMgb2YKK09yaWdpbmFsIENvZGUgYXMgZGVmaW5lZCBpbiBhbmQgdGhhdCBhcmUgc3ViamVjdCB0byB0aGUgQXBwbGUgUHVibGljCitTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlIGBMaWNlbnNlYCkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKK2V4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFBsZWFzZSBvYnRhaW4gYSBjb3B5IG9mIHRoZQorTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwcGxlLmNvbS9wdWJsaWNzb3VyY2UgYW5kIHJlYWQgaXQgYmVmb3JlIHVzaW5nCit0aGlzIGZpbGUuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgYXJlCitkaXN0cmlidXRlZCBvbiBhbiBgQVMgSVNgIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIKK0VYUFJFU1MgT1IgSU1QTElFRCwgQU5EIEFQUExFIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HRU1FTlQuIFBsZWFzZSBzZWUgdGhlCitMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI1ZTQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0xLjEKQEAgLTAsMCArMSwzNzQgQEAKKworQVBQTEUgUFVCTElDIFNPVVJDRSBMSUNFTlNFCitWZXJzaW9uIDEuMSAtIEFwcmlsIDE5LDE5OTkKKworUGxlYXNlIHJlYWQgdGhpcyBMaWNlbnNlIGNhcmVmdWxseSBiZWZvcmUgZG93bmxvYWRpbmcgdGhpcyBzb2Z0d2FyZS4KK0J5IGRvd25sb2FkaW5nIGFuZCB1c2luZyB0aGlzIHNvZnR3YXJlLCB5b3UgYXJlIGFncmVlaW5nIHRvIGJlIGJvdW5kCitieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGRvIG5vdCBvciBjYW5ub3QgYWdyZWUgdG8gdGhlCit0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHBsZWFzZSBkbyBub3QgZG93bmxvYWQgb3IgdXNlIHRoZSBzb2Z0d2FyZS4KKworMS4gR2VuZXJhbDsgRGVmaW5pdGlvbnMuICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlcgord29yayB3aGljaCBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgcHVibGljbHkgYW5ub3VuY2VzIGFzCitzdWJqZWN0IHRvIHRoaXMgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIGFuZCB3aGljaCBjb250YWlucyBhCitub3RpY2UgcGxhY2VkIGJ5IEFwcGxlIGlkZW50aWZ5aW5nIHN1Y2ggcHJvZ3JhbSBvciB3b3JrIGFzICJPcmlnaW5hbAorQ29kZSIgYW5kIHN0YXRpbmcgdGhhdCBpdCBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFwcGxlIFB1YmxpYworU291cmNlIExpY2Vuc2UgdmVyc2lvbiAxLjEgKG9yIHN1YnNlcXVlbnQgdmVyc2lvbiB0aGVyZW9mKSwgYXMgaXQgbWF5CitiZSByZXZpc2VkIGZyb20gdGltZSB0byB0aW1lIGJ5IEFwcGxlICgiTGljZW5zZSIpLiAgQXMgdXNlZCBpbiB0aGlzCitMaWNlbnNlOgorCisxLjEgIkFmZmVjdGVkIE9yaWdpbmFsIENvZGUiIG1lYW5zIG9ubHkgdGhvc2Ugc3BlY2lmaWMgcG9ydGlvbnMgb2YKK09yaWdpbmFsIENvZGUgdGhhdCBhbGxlZ2VkbHkgaW5mcmluZ2UgdXBvbiBhbnkgcGFydHlgcyBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBhcmUgb3RoZXJ3aXNlIHRoZSBzdWJqZWN0IG9mIGEgY2xhaW0gb2YKK2luZnJpbmdlbWVudC4KKworMS4yICJBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMiIG1lYW46IChhKSBpbiB0aGUgY2FzZSB3aGVyZSBBcHBsZSBpcwordGhlIGdyYW50b3Igb2YgcmlnaHRzLCAoaSkgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlcgorYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIEFwcGxlIGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdAorbWF0dGVyIGNvbnRhaW5lZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYnV0IG9ubHkgdG8gdGhlIGV4dGVudAorbmVjZXNzYXJ5IHRvIHVzZSwgcmVwcm9kdWNlIGFuZC9vciBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlCit3aXRob3V0IGluZnJpbmdlbWVudDsgYW5kIChiKSBpbiB0aGUgY2FzZSB3aGVyZSBZb3UgYXJlIHRoZSBncmFudG9yIG9mCityaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLAorb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gWW91IGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdCBtYXR0ZXIgaW4gWW91cgorTW9kaWZpY2F0aW9ucywgdGFrZW4gYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aCBPcmlnaW5hbCBDb2RlLgorCisxLjMgIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZQorY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkKK3Jlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40ICJEZXBsb3kiIG1lYW5zIHRvIHVzZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBvdGhlcgordGhhbiBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgKFImYW1wO0QpLCBhbmQgaW5jbHVkZXMKK3dpdGhvdXQgbGltaXRhdGlvbiwgYW55IGFuZCBhbGwgaW50ZXJuYWwgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZgorQ292ZXJlZCBDb2RlIHdpdGhpbiBZb3VyIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiBleGNlcHQgZm9yIFImYW1wO0QgdXNlLAorYXMgd2VsbCBhcyBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3VibGljZW5zaW5nIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkCitDb2RlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHkgaW4gYW55IGZvcm0gb3IgbWFubmVyLgorCisxLjUgIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zCit0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS42ICJNb2RpZmljYXRpb25zIiBtZWFuIGFueSBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSwgYW5kL29yIGNoYW5nZQordG8sIHRoZSBzdWJzdGFuY2UgYW5kL29yIHN0cnVjdHVyZSBvZiBDb3ZlcmVkIENvZGUuICBXaGVuIGNvZGUgaXMKK3JlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczogKGEpIGFueSBhZGRpdGlvbiB0bworb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlOworYW5kL29yIChiKSBhbnkgbmV3IGZpbGUgb3Igb3RoZXIgcmVwcmVzZW50YXRpb24gb2YgY29tcHV0ZXIgcHJvZ3JhbQorc3RhdGVtZW50cyB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIENvdmVyZWQgQ29kZS4KKworMS43ICJPcmlnaW5hbCBDb2RlIiBtZWFucyAoYSkgdGhlIFNvdXJjZSBDb2RlIG9mIGEgcHJvZ3JhbSBvciBvdGhlcgord29yayBhcyBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwKK2luY2x1ZGluZyB0aGUgU291cmNlIENvZGUgb2YgYW55IHVwZGF0ZXMgb3IgdXBncmFkZXMgdG8gc3VjaCBwcm9ncmFtcworb3Igd29ya3MgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgdGhhdCBoYXMgYmVlbgorZXhwcmVzc2x5IGlkZW50aWZpZWQgYnkgQXBwbGUgYXMgc3VjaCBpbiB0aGUgaGVhZGVyIGZpbGUocykgb2Ygc3VjaAord29yazsgYW5kIChiKSB0aGUgb2JqZWN0IGNvZGUgY29tcGlsZWQgZnJvbSBzdWNoIFNvdXJjZSBDb2RlIGFuZAorb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzEuOCAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBodW1hbiByZWFkYWJsZSBmb3JtIG9mIGEgcHJvZ3JhbSBvciBvdGhlcgord29yayB0aGF0IGlzIHN1aXRhYmxlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbAorbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywKK3NjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZQorKG9iamVjdCBjb2RlKS4KKworMS45ICJZb3UiIG9yICJZb3VyIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcKK3JpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIgoraW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIKK2NvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdAorb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwKK3doZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZgorc3VjaCBlbnRpdHkuCisKKzIuIFBlcm1pdHRlZCBVc2VzOyBDb25kaXRpb25zICZhbXA7IFJlc3RyaWN0aW9ucy4gIFN1YmplY3QgdG8gdGhlIHRlcm1zCithbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIEFwcGxlIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24KK3RoZSBkYXRlIFlvdSBhY2NlcHQgdGhpcyBMaWNlbnNlIGFuZCBkb3dubG9hZCB0aGUgT3JpZ2luYWwgQ29kZSwgYQord29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tIGV4Y2x1c2l2ZSBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mCitBcHBsZWBzIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgY29weXJpZ2h0cyBjb3ZlcmluZyB0aGUgT3JpZ2luYWwKK0NvZGUsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKzIuMSBZb3UgbWF5IHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIE9yaWdpbmFsIENvZGUsIHdpdGggb3IKK3dpdGhvdXQgTW9kaWZpY2F0aW9ucywgc29sZWx5IGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZAorZGV2ZWxvcG1lbnQsIHByb3ZpZGVkIHRoYXQgWW91IG11c3QgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIHJldGFpbiBhbmQgcmVwcm9kdWNlIGluIGFsbCBjb3BpZXMgb2YgT3JpZ2luYWwgQ29kZSB0aGUgY29weXJpZ2h0CithbmQgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgb2YgQXBwbGUgYXMgdGhleSBhcHBlYXIKK2luIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgaW4gdGhlIE9yaWdpbmFsIENvZGUKK3RoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlOworCisoYikgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiBTb3VyY2UgQ29kZSBvZgorQ292ZXJlZCBDb2RlIGFuZCBkb2N1bWVudGF0aW9uIFlvdSBkaXN0cmlidXRlLCBhbmQgWW91IG1heSBub3Qgb2ZmZXIKK29yIGltcG9zZSBhbnkgdGVybXMgb24gc3VjaCBTb3VyY2UgQ29kZSB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoaXMKK0xpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIsIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIKK1NlY3Rpb24gNjsgYW5kCisKKyhjKSBjb21wbGV0ZWx5IGFuZCBhY2N1cmF0ZWx5IGRvY3VtZW50IGFsbCBNb2RpZmljYXRpb25zIHRoYXQgeW91IGhhdmUKK21hZGUgYW5kIHRoZSBkYXRlIG9mIGVhY2ggc3VjaCBNb2RpZmljYXRpb24sIGRlc2lnbmF0ZSB0aGUgdmVyc2lvbiBvZgordGhlIE9yaWdpbmFsIENvZGUgeW91IHVzZWQsIHByb21pbmVudGx5IGluY2x1ZGUgYSBmaWxlIGNhcnJ5aW5nIHN1Y2gKK2luZm9ybWF0aW9uIHdpdGggdGhlIE1vZGlmaWNhdGlvbnMsIGFuZCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbgorRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYWxsIHN1Y2ggTW9kaWZpY2F0aW9ucy4KKworMi4yIFlvdSBtYXkgRGVwbG95IENvdmVyZWQgQ29kZSwgcHJvdmlkZWQgdGhhdCBZb3UgbXVzdCBpbiBlYWNoCisgIGluc3RhbmNlOgorCisoYSkgc2F0aXNmeSBhbGwgdGhlIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyLjEgd2l0aCByZXNwZWN0IHRvIHRoZQorU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZTsKKworKGIpIG1ha2UgYWxsIFlvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBwdWJsaWNseSBhdmFpbGFibGUgaW4gU291cmNlCitDb2RlIGZvcm0gdmlhIGVsZWN0cm9uaWMgZGlzdHJpYnV0aW9uIChlLmcuIGRvd25sb2FkIGZyb20gYSB3ZWIgc2l0ZSkKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHN1YmplY3QgdG8gdGhlIGxpY2Vuc2UgZ3JhbnRzIHNldAorZm9ydGggaW4gU2VjdGlvbiAzIGJlbG93LCBhbmQgYW55IGFkZGl0aW9uYWwgdGVybXMgWW91IG1heSBjaG9vc2UgdG8KK29mZmVyIHVuZGVyIFNlY3Rpb24gNi4gIFlvdSBtdXN0IGNvbnRpbnVlIHRvIG1ha2UgdGhlIFNvdXJjZSBDb2RlIG9mCitZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIHlvdSBEZXBsb3kgdGhlCitDb3ZlcmVkIENvZGUgb3IgdHdlbHZlICgxMikgbW9udGhzIGZyb20gdGhlIGRhdGUgb2YgaW5pdGlhbAorRGVwbG95bWVudCwgd2hpY2hldmVyIGlzIGxvbmdlcjsKKworKGMpIGlmIFlvdSBEZXBsb3kgQ292ZXJlZCBDb2RlIGNvbnRhaW5pbmcgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IFlvdSwKK2luZm9ybSBvdGhlcnMgb2YgaG93IHRvIG9idGFpbiB0aG9zZSBNb2RpZmljYXRpb25zIGJ5IGZpbGxpbmcgb3V0IGFuZAorc3VibWl0dGluZyB0aGUgaW5mb3JtYXRpb24gZm91bmQgYXQKK2h0dHA6Ly93d3cuYXBwbGUuY29tL3B1YmxpY3NvdXJjZS9tb2RpZmljYXRpb25zLmh0bWwsIGlmIGF2YWlsYWJsZTsKK2FuZAorCisoZCkgaWYgWW91IERlcGxveSBDb3ZlcmVkIENvZGUgaW4gb2JqZWN0IGNvZGUsIGV4ZWN1dGFibGUgZm9ybSBvbmx5LAoraW5jbHVkZSBhIHByb21pbmVudCBub3RpY2UsIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIHJlbGF0ZWQKK2RvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzCithdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyBhbmQKK3doZXJlIHRvIG9idGFpbiBzdWNoIFNvdXJjZSBDb2RlLgorCiszLiBZb3VyIEdyYW50cy4gIEluIGNvbnNpZGVyYXRpb24gb2YsIGFuZCBhcyBhIGNvbmRpdGlvbiB0bywgdGhlCitsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2U6CisKKyhhKSBZb3UgaGVyZWJ5IGdyYW50IHRvIEFwcGxlIGFuZCBhbGwgdGhpcmQgcGFydGllcyBhIG5vbi1leGNsdXNpdmUsCityb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsCityZXByb2R1Y2UsIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgRGVwbG95IFlvdXIgTW9kaWZpY2F0aW9ucyBvZiB0aGUKK3NhbWUgc2NvcGUgYW5kIGV4dGVudCBhcyBBcHBsZWBzIGxpY2Vuc2VzIHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQgMi4yOworYW5kCisKKyhiKSBZb3UgaGVyZWJ5IGdyYW50IHRvIEFwcGxlIGFuZCBpdHMgc3Vic2lkaWFyaWVzIGEgbm9uLWV4Y2x1c2l2ZSwKK3dvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBwZXJwZXR1YWwgYW5kIGlycmV2b2NhYmxlIGxpY2Vuc2UsIHVuZGVyIFlvdXIKK0FwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvd25lZAorb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwgcmVwcm9kdWNlLCBleGVjdXRlLCBjb21waWxlLCBkaXNwbGF5LAorcGVyZm9ybSwgbW9kaWZ5IG9yIGhhdmUgbW9kaWZpZWQgKGZvciBBcHBsZSBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcyksCitzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIFlvdXIgTW9kaWZpY2F0aW9ucywgaW4gYW55IGZvcm0sIHRocm91Z2gKK211bHRpcGxlIHRpZXJzIG9mIGRpc3RyaWJ1dGlvbi4KKworNC4gTGFyZ2VyIFdvcmtzLiAgWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZAorQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kCitkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiAgSW4gZWFjaCBzdWNoCitpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZQorZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YuCisKKzUuIExpbWl0YXRpb25zIG9uIFBhdGVudCBMaWNlbnNlLiAgRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4KK1NlY3Rpb24gMiwgbm8gb3RoZXIgcGF0ZW50IHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieQorQXBwbGUgaGVyZWluLiAgTW9kaWZpY2F0aW9ucyBhbmQvb3IgTGFyZ2VyIFdvcmtzIG1heSByZXF1aXJlCithZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIEFwcGxlIHdoaWNoIEFwcGxlIG1heSBncmFudCBpbiBpdHMKK3NvbGUgZGlzY3JldGlvbi4KKworNi4gQWRkaXRpb25hbCBUZXJtcy4gIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlCitmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vcgorb3RoZXIgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2NvcGUgb2YgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlaW4KKygiQWRkaXRpb25hbCBUZXJtcyIpIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZAorQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgYXMgWW91ciBzb2xlCityZXNwb25zaWJpbGl0eSwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgQXBwbGUuIFlvdSBtdXN0IG9idGFpbiB0aGUKK3JlY2lwaWVudGBzIGFncmVlbWVudCB0aGF0IGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMgYXJlIG9mZmVyZWQgYnkKK1lvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgQXBwbGUKK2hhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0CitBcHBsZSBieSByZWFzb24gb2YgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcy4KKworNy4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuICBBcHBsZSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIEVhY2ggdmVyc2lvbiB3aWxsIGJlCitnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgT25jZSBPcmlnaW5hbCBDb2RlIGhhcyBiZWVuCitwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IGNvbnRpbnVlCit0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2UKK3N1Y2ggT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlIHB1Ymxpc2hlZCBieSBBcHBsZS4gIE5vIG9uZSBvdGhlciB0aGFuIEFwcGxlIGhhcyB0aGUgcmlnaHQgdG8KK21vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzCitMaWNlbnNlLgorCis4LiBOTyBXQVJSQU5UWSBPUiBTVVBQT1JULiAgVGhlIE9yaWdpbmFsIENvZGUgbWF5IGNvbnRhaW4gaW4gd2hvbGUgb3IKK2luIHBhcnQgcHJlLXJlbGVhc2UsIHVudGVzdGVkLCBvciBub3QgZnVsbHkgdGVzdGVkIHdvcmtzLiAgVGhlCitPcmlnaW5hbCBDb2RlIG1heSBjb250YWluIGVycm9ycyB0aGF0IGNvdWxkIGNhdXNlIGZhaWx1cmVzIG9yIGxvc3Mgb2YKK2RhdGEsIGFuZCBtYXkgYmUgaW5jb21wbGV0ZSBvciBjb250YWluIGluYWNjdXJhY2llcy4gIFlvdSBleHByZXNzbHkKK2Fja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHVzZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgb3IgYW55IHBvcnRpb24KK3RoZXJlb2YsIGlzIGF0IFlvdXIgc29sZSBhbmQgZW50aXJlIHJpc2suICBUSEUgT1JJR0lOQUwgQ09ERSBJUworUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSwgVVBHUkFERVMgT1IgU1VQUE9SVCBPRiBBTlkgS0lORAorQU5EIEFQUExFIEFORCBBUFBMRWBTIExJQ0VOU09SKFMpIChGT1IgVEhFIFBVUlBPU0VTIE9GIFNFQ1RJT05TIDggQU5ECis5LCBBUFBMRSBBTkQgQVBQTEVgUyBMSUNFTlNPUihTKSBBUkUgQ09MTEVDVElWRUxZIFJFRkVSUkVEIFRPIEFTCisiQVBQTEUiKSBFWFBSRVNTTFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMsIEVYUFJFU1MKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCitBTkQvT1IgQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgU0FUSVNGQUNUT1JZIFFVQUxJVFkgQU5ECitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZCitSSUdIVFMuICBBUFBMRSBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIEZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFCitPUklHSU5BTCBDT0RFIFdJTEwgTUVFVCBZT1VSIFJFUVVJUkVNRU5UUywgT1IgVEhBVCBUSEUgT1BFUkFUSU9OIE9GCitUSEUgT1JJR0lOQUwgQ09ERSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItIEZSRUUsIE9SIFRIQVQKK0RFRkVDVFMgSU4gVEhFIE9SSUdJTkFMIENPREUgV0lMTCBCRSBDT1JSRUNURUQuICBOTyBPUkFMIE9SIFdSSVRURU4KK0lORk9STUFUSU9OIE9SIEFEVklDRSBHSVZFTiBCWSBBUFBMRSBPUiBBTiBBUFBMRSBBVVRIT1JJWkVECitSRVBSRVNFTlRBVElWRSBTSEFMTCBDUkVBVEUgQSBXQVJSQU5UWSBPUiBJTiBBTlkgV0FZIElOQ1JFQVNFIFRIRQorU0NPUEUgT0YgVEhJUyBXQVJSQU5UWS4gIFlvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBPcmlnaW5hbCBDb2RlIGlzIG5vdAoraW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQKK25hdmlnYXRpb24sIGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbgord2hpY2ggY2FzZSB0aGUgZmFpbHVyZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSBjb3VsZCBsZWFkIHRvIGRlYXRoLAorcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuCisKKzkuIExpYWJpbGl0eS4KKworOS4xIEluZnJpbmdlbWVudC4gIElmIGFueSBwb3J0aW9uIG9mLCBvciBmdW5jdGlvbmFsaXR5IGltcGxlbWVudGVkIGJ5LAordGhlIE9yaWdpbmFsIENvZGUgYmVjb21lcyB0aGUgc3ViamVjdCBvZiBhIGNsYWltIG9mIGluZnJpbmdlbWVudCwKK0FwcGxlIG1heSwgYXQgaXRzIG9wdGlvbjogKGEpIGF0dGVtcHQgdG8gcHJvY3VyZSB0aGUgcmlnaHRzIG5lY2Vzc2FyeQorZm9yIEFwcGxlIGFuZCBZb3UgdG8gY29udGludWUgdXNpbmcgdGhlIEFmZmVjdGVkIE9yaWdpbmFsIENvZGU7IChiKQorbW9kaWZ5IHRoZSBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIHNvIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIGluZnJpbmdpbmc7CitvciAoYykgc3VzcGVuZCBZb3VyIHJpZ2h0cyB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBzdWJsaWNlbnNlIGFuZAorZGlzdHJpYnV0ZSB0aGUgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSB1bnRpbCBhIGZpbmFsIGRldGVybWluYXRpb24gb2YKK3RoZSBjbGFpbSBpcyBtYWRlIGJ5IGEgY291cnQgb3IgZ292ZXJubWVudGFsIGFkbWluaXN0cmF0aXZlIGFnZW5jeSBvZgorY29tcGV0ZW50IGp1cmlzZGljdGlvbiBhbmQgQXBwbGUgbGlmdHMgdGhlIHN1c3BlbnNpb24gYXMgc2V0IGZvcnRoCitiZWxvdy4gIFN1Y2ggc3VzcGVuc2lvbiBvZiByaWdodHMgd2lsbCBiZSBlZmZlY3RpdmUgaW1tZWRpYXRlbHkgdXBvbgorQXBwbGVgcyBwb3N0aW5nIG9mIGEgbm90aWNlIHRvIHN1Y2ggZWZmZWN0IG9uIHRoZSBBcHBsZSB3ZWIgc2l0ZSB0aGF0CitpcyB1c2VkIGZvciBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIExpY2Vuc2UuICBVcG9uIHN1Y2ggZmluYWwKK2RldGVybWluYXRpb24gYmVpbmcgbWFkZSwgaWYgQXBwbGUgaXMgbGVnYWxseSBhYmxlLCB3aXRob3V0IHRoZQorcGF5bWVudCBvZiBhIGZlZSBvciByb3lhbHR5LCB0byByZXN1bWUgdXNlLCByZXByb2R1Y3Rpb24sCittb2RpZmljYXRpb24sIHN1YmxpY2Vuc2luZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBBZmZlY3RlZCBPcmlnaW5hbAorQ29kZSwgQXBwbGUgd2lsbCBsaWZ0IHRoZSBzdXNwZW5zaW9uIG9mIHJpZ2h0cyB0byB0aGUgQWZmZWN0ZWQKK09yaWdpbmFsIENvZGUgYnkgcG9zdGluZyBhIG5vdGljZSB0byBzdWNoIGVmZmVjdCBvbiB0aGUgQXBwbGUgd2ViIHNpdGUKK3RoYXQgaXMgdXNlZCBmb3IgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBMaWNlbnNlLiAgSWYgQXBwbGUgc3VzcGVuZHMKK1lvdXIgcmlnaHRzIHRvIEFmZmVjdGVkIE9yaWdpbmFsIENvZGUsIG5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsCitiZSBjb25zdHJ1ZWQgdG8gcmVzdHJpY3QgWW91LCBhdCBZb3VyIG9wdGlvbiBhbmQgc3ViamVjdCB0byBhcHBsaWNhYmxlCitsYXcsIGZyb20gcmVwbGFjaW5nIHRoZSBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIHdpdGggbm9uLWluZnJpbmdpbmcKK2NvZGUgb3IgaW5kZXBlbmRlbnRseSBuZWdvdGlhdGluZyBmb3IgbmVjZXNzYXJ5IHJpZ2h0cyBmcm9tIHN1Y2ggdGhpcmQKK3BhcnR5LgorCis5LjIgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuICBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIFNIQUxMIEFQUExFIEJFCitMSUFCTEUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKK0FSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRISVMgTElDRU5TRSBPUiBZT1VSIFVTRSBPUiBJTkFCSUxJVFkgVE8KK1VTRSBUSEUgT1JJR0lOQUwgQ09ERSwgT1IgQU5ZIFBPUlRJT04gVEhFUkVPRiwgV0hFVEhFUiBVTkRFUiBBIFRIRU9SWQorT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFBST0RVQ1RTIExJQUJJTElUWQorT1IgT1RIRVJXSVNFLCBFVkVOIElGIEFQUExFIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRVMgQU5EIE5PVFdJVEhTVEFORElORyBUSEUgRkFJTFVSRSBPRiBFU1NFTlRJQUwgUFVSUE9TRSBPRgorQU5ZIFJFTUVEWS4gIEluIG5vIGV2ZW50IHNoYWxsIEFwcGxlYHMgdG90YWwgbGlhYmlsaXR5IHRvIFlvdSBmb3IgYWxsCitkYW1hZ2VzIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlZWQgdGhlIGFtb3VudCBvZiBmaWZ0eSBkb2xsYXJzCisoJDUwLjAwKS4KKworMTAuIFRyYWRlbWFya3MuICBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlCit0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzICJBcHBsZSIsICJBcHBsZSBDb21wdXRlciIsICJNYWMgT1MgWCIsICJNYWMKK09TIFggU2VydmVyIiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBiZWxvbmdpbmcgdG8gQXBwbGUKKyhjb2xsZWN0aXZlbHkgIkFwcGxlIE1hcmtzIikgYW5kIG5vIEFwcGxlIE1hcmtzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UKK29yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG90aGVyIHRoYW4gYXMKK3Blcm1pdHRlZCBieSBhbmQgaW4gc3RyaWN0IGNvbXBsaWFuY2UgYXQgYWxsIHRpbWVzIHdpdGggQXBwbGVgcyB0aGlyZAorcGFydHkgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMgd2hpY2ggYXJlIHBvc3RlZCBhdAoraHR0cDovL3d3dy5hcHBsZS5jb20vbGVnYWwvZ3VpZGVsaW5lc2ZvcjNyZHBhcnRpZXMuaHRtbC4KKworMTEuIE93bmVyc2hpcC4gIEFwcGxlIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0bwordGhlIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mIEFwcGxlCisoIkFwcGxlIE1vZGlmaWNhdGlvbnMiKSwgYW5kIHN1Y2ggQXBwbGUgTW9kaWZpY2F0aW9ucyB3aWxsIG5vdCBiZQorYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIEFwcGxlIG1heSwgYXQgaXRzIHNvbGUKK2Rpc2NyZXRpb24sIGNob29zZSB0byBsaWNlbnNlIHN1Y2ggQXBwbGUgTW9kaWZpY2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIG9yCittYXkgY2hvb3NlIG5vdCB0byBsaWNlbnNlIHRoZW0gYXQgYWxsLiAgQXBwbGVgcyBkZXZlbG9wbWVudCwgdXNlLAorcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sIHN1YmxpY2Vuc2luZyBhbmQgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQKK0NvZGUgd2lsbCBub3QgYmUgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuCisKKzEyLiBUZXJtaW5hdGlvbi4KKworMTIuMSBUZXJtaW5hdGlvbi4gIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsCisgICB0ZXJtaW5hdGU6CisKKyhhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGgKK2FueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMAorZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIGJyZWFjaDsgKGIpIGltbWVkaWF0ZWx5IGluIHRoZSBldmVudCBvZgordGhlIGNpcmN1bXN0YW5jZXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMTMuNShiKTsgb3IgKGMpIGF1dG9tYXRpY2FsbHkKK3dpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcworTGljZW5zZSwgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IGFnYWluc3QgQXBwbGUuCisKKzEyLjIgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiAgVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvCitpbW1lZGlhdGVseSBzdG9wIGFueSBmdXJ0aGVyIHVzZSwgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sCitzdWJsaWNlbnNpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCB0byBkZXN0cm95IGFsbAorY29waWVzIG9mIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuCitBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBoYXZlIGJlZW4gcHJvcGVybHkgZ3JhbnRlZAorcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBzaG91bGQgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlCit0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZAordG8gU2VjdGlvbnMgMywgNSwgOCwgOSwgMTAsIDExLCAxMi4yIGFuZCAxMy4gIE5laXRoZXIgcGFydHkgd2lsbCBiZQorbGlhYmxlIHRvIHRoZSBvdGhlciBmb3IgY29tcGVuc2F0aW9uLCBpbmRlbW5pdHkgb3IgZGFtYWdlcyBvZiBhbnkgc29ydAorc29sZWx5IGFzIGEgcmVzdWx0IG9mIHRlcm1pbmF0aW5nIHRoaXMgTGljZW5zZSBpbiBhY2NvcmRhbmNlIHdpdGggaXRzCit0ZXJtcywgYW5kIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIGJlIHdpdGhvdXQgcHJlanVkaWNlIHRvCithbnkgb3RoZXIgcmlnaHQgb3IgcmVtZWR5IG9mIGVpdGhlciBwYXJ0eS4KKworMTMuICBNaXNjZWxsYW5lb3VzLgorCisxMy4xIEdvdmVybm1lbnQgRW5kIFVzZXJzLiAgVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0iIGFzCitkZWZpbmVkIGluIEZBUiAyLjEwMS4gIEdvdmVybm1lbnQgc29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIHJpZ2h0cworaW4gdGhlIENvdmVyZWQgQ29kZSBpbmNsdWRlIG9ubHkgdGhvc2UgcmlnaHRzIGN1c3RvbWFyaWx5IHByb3ZpZGVkIHRvCit0aGUgcHVibGljIGFzIGRlZmluZWQgaW4gdGhpcyBMaWNlbnNlLiBUaGlzIGN1c3RvbWFyeSBjb21tZXJjaWFsCitsaWNlbnNlIGluIHRlY2huaWNhbCBkYXRhIGFuZCBzb2Z0d2FyZSBpcyBwcm92aWRlZCBpbiBhY2NvcmRhbmNlIHdpdGgKK0ZBUiAxMi4yMTEgKFRlY2huaWNhbCBEYXRhKSBhbmQgMTIuMjEyIChDb21wdXRlciBTb2Z0d2FyZSkgYW5kLCBmb3IKK0RlcGFydG1lbnQgb2YgRGVmZW5zZSBwdXJjaGFzZXMsIERGQVIgMjUyLjIyNy03MDE1IChUZWNobmljYWwgRGF0YSAtLQorQ29tbWVyY2lhbCBJdGVtcykgYW5kIDIyNy43MjAyLTMgKFJpZ2h0cyBpbiBDb21tZXJjaWFsIENvbXB1dGVyCitTb2Z0d2FyZSBvciBDb21wdXRlciBTb2Z0d2FyZSBEb2N1bWVudGF0aW9uKS4gIEFjY29yZGluZ2x5LCBhbGwgVS5TLgorR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQKK2ZvcnRoIGhlcmVpbi4KKworMTMuMiBSZWxhdGlvbnNoaXAgb2YgUGFydGllcy4gIFRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMKK2NyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YKK2xlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gWW91IGFuZCBBcHBsZSwgYW5kIFlvdSB3aWxsIG5vdCByZXByZXNlbnQgdG8KK3RoZSBjb250cmFyeSwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBhcHBlYXJhbmNlIG9yCitvdGhlcndpc2UuCisKKzEzLjMgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSB3aWxsIGltcGFpcgorQXBwbGVgcyByaWdodCB0byBhY3F1aXJlLCBsaWNlbnNlLCBkZXZlbG9wLCBoYXZlIG90aGVycyBkZXZlbG9wIGZvcgoraXQsIG1hcmtldCBhbmQvb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUKK3NhbWUgb3Igc2ltaWxhciBmdW5jdGlvbnMgYXMsIG9yIG90aGVyd2lzZSBjb21wZXRlIHdpdGgsCitNb2RpZmljYXRpb25zLCBMYXJnZXIgV29ya3MsIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBZb3UgbWF5CitkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS4KKworMTMuNCBXYWl2ZXI7IENvbnN0cnVjdGlvbi4gIEZhaWx1cmUgYnkgQXBwbGUgdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uCitvZiB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgZGVlbWVkIGEgd2FpdmVyIG9mIGZ1dHVyZSBlbmZvcmNlbWVudCBvZgordGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLiAgQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzCit0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyCit3aWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEzLjUgU2V2ZXJhYmlsaXR5LiAgKGEpIElmIGZvciBhbnkgcmVhc29uIGEgY291cnQgb2YgY29tcGV0ZW50CitqdXJpc2RpY3Rpb24gZmluZHMgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIG9yIHBvcnRpb24gdGhlcmVvZiwKK3RvIGJlIHVuZW5mb3JjZWFibGUsIHRoYXQgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUgZW5mb3JjZWQgdG8KK3RoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXNzaWJsZSBzbyBhcyB0byBlZmZlY3QgdGhlIGVjb25vbWljIGJlbmVmaXRzCithbmQgaW50ZW50IG9mIHRoZSBwYXJ0aWVzLCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIExpY2Vuc2Ugd2lsbAorY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LiAgKGIpIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLAoraWYgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIG9yIHJlc3RyaWN0cyBZb3UgZnJvbSBmdWxseSBhbmQvb3IKK3NwZWNpZmljYWxseSBjb21wbHlpbmcgd2l0aCBTZWN0aW9ucyAyIGFuZC9vciAzIG9yIHByZXZlbnRzIHRoZQorZW5mb3JjZWFiaWxpdHkgb2YgZWl0aGVyIG9mIHRob3NlIFNlY3Rpb25zLCB0aGlzIExpY2Vuc2Ugd2lsbAoraW1tZWRpYXRlbHkgdGVybWluYXRlIGFuZCBZb3UgbXVzdCBpbW1lZGlhdGVseSBkaXNjb250aW51ZSBhbnkgdXNlIG9mCit0aGUgQ292ZXJlZCBDb2RlIGFuZCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgaXQgdGhhdCBhcmUgaW4geW91cgorcG9zc2Vzc2lvbiBvciBjb250cm9sLgorCisxMy42IERpc3B1dGUgUmVzb2x1dGlvbi4gIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbgorYmV0d2VlbiBZb3UgYW5kIEFwcGxlIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluIHRoZQorTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgYW5kIFlvdSBhbmQgQXBwbGUgaGVyZWJ5IGNvbnNlbnQgdG8KK3RoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlIGFuZCBmZWRlcmFsCitjb3VydHMgd2l0aGluIHRoYXQgRGlzdHJpY3Qgd2l0aCByZXNwZWN0IHRvIHRoaXMgTGljZW5zZS4gVGhlCithcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZQorSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KKworMTMuNyBFbnRpcmUgQWdyZWVtZW50OyBHb3Zlcm5pbmcgTGF3LiAgVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZQorZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdAorbWF0dGVyIGhlcmVvZi4gIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1VuaXRlZCBTdGF0ZXMgYW5kIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLCBleGNlcHQgdGhhdCBib2R5IG9mCitDYWxpZm9ybmlhIGxhdyBjb25jZXJuaW5nIGNvbmZsaWN0cyBvZiBsYXcuCisKK1doZXJlIFlvdSBhcmUgbG9jYXRlZCBpbiB0aGUgcHJvdmluY2Ugb2YgUXVlYmVjLCBDYW5hZGEsIHRoZSBmb2xsb3dpbmcKK2NsYXVzZSBhcHBsaWVzOiBUaGUgcGFydGllcyBoZXJlYnkgY29uZmlybSB0aGF0IHRoZXkgaGF2ZSByZXF1ZXN0ZWQKK3RoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbGwgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiBMZXMKK3BhcnRpZXMgb250IGV4aWdlIHF1ZSBsZSBwcmVzZW50IGNvbnRyYXQgZXQgdG91cyBsZXMgZG9jdW1lbnRzCitjb25uZXhlcyBzb2llbnQgcmVkaWdlcyBlbiBhbmdsYWlzLgorCitFWEhJQklUIEEuCisKKyJQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIFJpZ2h0cworUmVzZXJ2ZWQuICBUaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZgorT3JpZ2luYWwgQ29kZSBhcyBkZWZpbmVkIGluIGFuZCB0aGF0IGFyZSBzdWJqZWN0IHRvIHRoZSBBcHBsZSBQdWJsaWMKK1NvdXJjZSBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKK2V4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICBQbGVhc2Ugb2J0YWluIGEgY29weSBvZiB0aGUKK0xpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vcHVibGljc291cmNlIGFuZCByZWFkIGl0IGJlZm9yZSB1c2luZwordGhpcyBmaWxlLgorCitUaGUgT3JpZ2luYWwgQ29kZSBhbmQgYWxsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGFyZQorZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSCitFWFBSRVNTIE9SIElNUExJRUQsIEFORCBBUFBMRSBIRVJFQlkgRElTQ0xBSU1TIEFMTCBTVUNIIFdBUlJBTlRJRVMsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tIElORlJJTkdFTUVOVC4gIFBsZWFzZSBzZWUgdGhlCitMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0xLjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThlMzUzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0xLjIKQEAgLTAsMCArMSwxMDUgQEAKKworQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIFZlci4gMS4yCisKKzEuIEdlbmVyYWw7IERlZmluaXRpb25zLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBtYWtlcyBwdWJsaWNseSBhdmFpbGFibGUgYW5kIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSBBcHBsZSBpZGVudGlmeWluZyBzdWNoIHByb2dyYW0gb3Igd29yayBhcyAiT3JpZ2luYWwgQ29kZSIgYW5kIHN0YXRpbmcgdGhhdCBpdCBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSB2ZXJzaW9uIDEuMiAob3Igc3Vic2VxdWVudCB2ZXJzaW9uIHRoZXJlb2YpICgiTGljZW5zZSIpLiBBcyB1c2VkIGluIHRoaXMgTGljZW5zZToKKworMS4xICJBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMiIG1lYW46IChhKSBpbiB0aGUgY2FzZSB3aGVyZSBBcHBsZSBpcyB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBBcHBsZSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGNvbnRhaW5lZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYnV0IG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gdXNlLCByZXByb2R1Y2UgYW5kL29yIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgd2l0aG91dCBpbmZyaW5nZW1lbnQ7IGFuZCAoYikgaW4gdGhlIGNhc2Ugd2hlcmUgWW91IGFyZSB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBZb3UgYW5kIChpaSkgdGhhdCBjb3ZlciBzdWJqZWN0IG1hdHRlciBpbiBZb3VyIE1vZGlmaWNhdGlvbnMsIHRha2VuIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggT3JpZ2luYWwgQ29kZS4KKworMS4yICJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjMgIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNCAiRGVwbG95IiBtZWFucyB0byB1c2UsIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgb3RoZXIgdGhhbiBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgKFImYW1wO0QpIGFuZC9vciBQZXJzb25hbCBVc2UsIGFuZCBpbmNsdWRlcyB3aXRob3V0IGxpbWl0YXRpb24sIGFueSBhbmQgYWxsIGludGVybmFsIHVzZSBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIHdpdGhpbiBZb3VyIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiBleGNlcHQgZm9yIFImYW1wO0QgdXNlIGFuZC9vciBQZXJzb25hbCBVc2UsIGFzIHdlbGwgYXMgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHkgaW4gYW55IGZvcm0gb3IgbWFubmVyLgorCisxLjUgIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjYgIk1vZGlmaWNhdGlvbnMiIG1lYW4gYW55IGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBhbmQvb3IgY2hhbmdlIHRvLCB0aGUgc3Vic3RhbmNlIGFuZC9vciBzdHJ1Y3R1cmUgb2YgdGhlIE9yaWdpbmFsIENvZGUsIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLiBXaGVuIGNvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOiAoYSkgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIENvdmVyZWQgQ29kZTsgYW5kL29yIChiKSBhbnkgbmV3IGZpbGUgb3Igb3RoZXIgcmVwcmVzZW50YXRpb24gb2YgY29tcHV0ZXIgcHJvZ3JhbSBzdGF0ZW1lbnRzIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgQ292ZXJlZCBDb2RlLgorCisxLjcgIk9yaWdpbmFsIENvZGUiIG1lYW5zIChhKSB0aGUgU291cmNlIENvZGUgb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgYXMgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgU291cmNlIENvZGUgb2YgYW55IHVwZGF0ZXMgb3IgdXBncmFkZXMgdG8gc3VjaCBwcm9ncmFtcyBvciB3b3JrcyBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB0aGF0IGhhcyBiZWVuIGV4cHJlc3NseSBpZGVudGlmaWVkIGJ5IEFwcGxlIGFzIHN1Y2ggaW4gdGhlIGhlYWRlciBmaWxlKHMpIG9mIHN1Y2ggd29yazsgYW5kIChiKSB0aGUgb2JqZWN0IGNvZGUgY29tcGlsZWQgZnJvbSBzdWNoIFNvdXJjZSBDb2RlIGFuZCBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworMS44ICJQZXJzb25hbCBVc2UiIG1lYW5zIHVzZSBvZiBDb3ZlcmVkIENvZGUgYnkgYW4gaW5kaXZpZHVhbCBzb2xlbHkgZm9yIGhpcyBvciBoZXIgcGVyc29uYWwsIHByaXZhdGUgYW5kIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLiBBbiBpbmRpdmlkdWFsYHMgdXNlIG9mIENvdmVyZWQgQ29kZSBpbiBoaXMgb3IgaGVyIGNhcGFjaXR5IGFzIGFuIG9mZmljZXIsIGVtcGxveWVlLCBtZW1iZXIsIGluZGVwZW5kZW50IGNvbnRyYWN0b3Igb3IgYWdlbnQgb2YgYSBjb3Jwb3JhdGlvbiwgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uIChjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsKSBkb2VzIG5vdCBxdWFsaWZ5IGFzIFBlcnNvbmFsIFVzZS4KKworMS45ICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIGh1bWFuIHJlYWRhYmxlIGZvcm0gb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgdGhhdCBpcyBzdWl0YWJsZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlIChvYmplY3QgY29kZSkuCisKKzEuMTAgIllvdSIgb3IgIllvdXIiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoLCBZb3UsIHdoZXJlICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFBlcm1pdHRlZCBVc2VzOyBDb25kaXRpb25zICZhbXA7IFJlc3RyaWN0aW9ucy5TdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIEFwcGxlIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24gdGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgYW5kIGRvd25sb2FkIHRoZSBPcmlnaW5hbCBDb2RlLCBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mIEFwcGxlYHMgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBjb3B5cmlnaHRzIGNvdmVyaW5nIHRoZSBPcmlnaW5hbCBDb2RlLCB0byBkbyB0aGUgZm9sbG93aW5nOgorCisyLjEgWW91IG1heSB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIE9yaWdpbmFsIENvZGUsIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBzb2xlbHkgZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IGFuZC9vciBQZXJzb25hbCBVc2UsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIFlvdSBtdXN0IHJldGFpbiBhbmQgcmVwcm9kdWNlIGluIGFsbCBjb3BpZXMgb2YgT3JpZ2luYWwgQ29kZSB0aGUgY29weXJpZ2h0IGFuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycyBvZiBBcHBsZSBhcyB0aGV5IGFwcGVhciBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIGluIHRoZSBPcmlnaW5hbCBDb2RlIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlOyBhbmQKKworKGIpIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgU291cmNlIENvZGUgb2YgQ292ZXJlZCBDb2RlIGFuZCBkb2N1bWVudGF0aW9uIFlvdSBkaXN0cmlidXRlLCBhbmQgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBzdWNoIFNvdXJjZSBDb2RlIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLCBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNi4KKworMi4yIFlvdSBtYXkgdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSBhbmQgRGVwbG95IENvdmVyZWQgQ29kZSwgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlOgorCisoYSkgWW91IG11c3Qgc2F0aXNmeSBhbGwgdGhlIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyLjEgd2l0aCByZXNwZWN0IHRvIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlOworCisoYikgWW91IG11c3QgZHVwbGljYXRlLCB0byB0aGUgZXh0ZW50IGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QsIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYWxsIFlvdXIgTW9kaWZpY2F0aW9ucywgYW5kIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlOworCisoYykgWW91IG11c3QgbWFrZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIHB1YmxpY2x5IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgZ3JhbnRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDMgYmVsb3csIGZvciBhcyBsb25nIGFzIHlvdSBEZXBsb3kgdGhlIENvdmVyZWQgQ29kZSBvciB0d2VsdmUgKDEyKSBtb250aHMgZnJvbSB0aGUgZGF0ZSBvZiBpbml0aWFsIERlcGxveW1lbnQsIHdoaWNoZXZlciBpcyBsb25nZXIuIFlvdSBzaG91bGQgcHJlZmVyYWJseSBkaXN0cmlidXRlIHRoZSBTb3VyY2UgQ29kZSBvZiBZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgZWxlY3Ryb25pY2FsbHkgKGUuZy4gZG93bmxvYWQgZnJvbSBhIHdlYiBzaXRlKTsgYW5kCisKKyhkKSBpZiBZb3UgRGVwbG95IENvdmVyZWQgQ29kZSBpbiBvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlLCBpbiB0aGUgY29kZSBpdHNlbGYgYXMgd2VsbCBhcyBpbiByZWxhdGVkIGRvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZCB3aGVyZSB0byBvYnRhaW4gc3VjaCBTb3VyY2UgQ29kZS4KKworMi4zIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgYWx0aG91Z2ggQXBwbGUgYW5kIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byB0aGVpciByZXNwZWN0aXZlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gQXBwbGUgYW5kIGVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW0gYW55IGxpYWJpbGl0eSB0byBZb3UgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBZb3UgaGVyZWJ5IGFzc3VtZSBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgWW91IHRvIGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQgQ29kZSwgaXQgaXMgWW91ciByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuIFlvdXIgR3JhbnRzLiBJbiBjb25zaWRlcmF0aW9uIG9mLCBhbmQgYXMgYSBjb25kaXRpb24gdG8sIHRoZSBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2U6CisKKyhhKSBZb3UgaGVyZWJ5IGdyYW50IHRvIEFwcGxlIGFuZCBhbGwgdGhpcmQgcGFydGllcyBhIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQpIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIG9mIHRoZSBzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMgQXBwbGVgcyBsaWNlbnNlcyB1bmRlciBTZWN0aW9ucyAyLjEgYW5kIDIuMjsgYW5kCisKKyhiKSBZb3UgaGVyZWJ5IGdyYW50IHRvIEFwcGxlIGFuZCBpdHMgc3Vic2lkaWFyaWVzIGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCBhbmQgaXJyZXZvY2FibGUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50KSBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSBvciBoYXZlIG1vZGlmaWVkIChmb3IgQXBwbGUgYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMpLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIFlvdXIgTW9kaWZpY2F0aW9ucywgaW4gYW55IGZvcm0sIHRocm91Z2ggbXVsdGlwbGUgdGllcnMgb2YgZGlzdHJpYnV0aW9uLgorCis0LiBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIGVhY2ggc3VjaCBpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZi4KKworNS4gTGltaXRhdGlvbnMgb24gUGF0ZW50IExpY2Vuc2UuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb24gMiwgbm8gb3RoZXIgcGF0ZW50IHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBBcHBsZSBoZXJlaW4uIE1vZGlmaWNhdGlvbnMgYW5kL29yIExhcmdlciBXb3JrcyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIEFwcGxlIHdoaWNoIEFwcGxlIG1heSBncmFudCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLgorCis2LiBBZGRpdGlvbmFsIFRlcm1zLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciBvdGhlciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbiAoIkFkZGl0aW9uYWwgVGVybXMiKSB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgYXMgWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBhbmQgbm90IG9uIGJlaGFsZiBvZiBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG9idGFpbiB0aGUgcmVjaXBpZW50YHMgYWdyZWVtZW50IHRoYXQgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcyBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIEFwcGxlIGFuZCBldmVyeSBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBBcHBsZSBvciBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbiBvZiBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zLgorCis3LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4gQXBwbGUgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gT25jZSBPcmlnaW5hbCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcHVibGlzaGVkIGJ5IEFwcGxlLiBObyBvbmUgb3RoZXIgdGhhbiBBcHBsZSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzguIE5PIFdBUlJBTlRZIE9SIFNVUFBPUlQuIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gaW4gd2hvbGUgb3IgaW4gcGFydCBwcmUtcmVsZWFzZSwgdW50ZXN0ZWQsIG9yIG5vdCBmdWxseSB0ZXN0ZWQgd29ya3MuIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcyBvZiBkYXRhLCBhbmQgbWF5IGJlIGluY29tcGxldGUgb3IgY29udGFpbiBpbmFjY3VyYWNpZXMuIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUsIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIGlzIGF0IFlvdXIgc29sZSBhbmQgZW50aXJlIHJpc2suIFRIRSBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSwgVVBHUkFERVMgT1IgU1VQUE9SVCBPRiBBTlkgS0lORCBBTkQgQVBQTEUgQU5EIEFQUExFYFMgTElDRU5TT1IoUykgKENPTExFQ1RJVkVMWSBSRUZFUlJFRCBUTyBBUyAiQVBQTEUiIEZPUiBUSEUgUFVSUE9TRVMgT0YgU0VDVElPTlMgOCBBTkQgOSkgQU5EIEFMTCBDT05UUklCVVRPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgU0FUSVNGQUNUT1JZIFFVQUxJVFksIE9GIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPRiBBQ0NVUkFDWSwgT0YgUVVJRVQgRU5KT1lNRU5ULCBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gQVBQTEUgQU5EIEVBQ0ggQ09OVFJJQlVUT1IgRE9FUyBOT1QgV0FSUkFOVCBBR0FJTlNUIElOVEVSRkVSRU5DRSBXSVRIIFlPVVIgRU5KT1lNRU5UIE9GIFRIRSBDT1ZFUkVEIENPREUsIFRIQVQgVEhFIEZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIE1FRVQgWU9VUiBSRVFVSVJFTUVOVFMsIFRIQVQgVEhFIE9QRVJBVElPTiBPRiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFLCBPUiBUSEFUIERFRkVDVFMgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIENPUlJFQ1RFRC4gTk8gT1JBTCBPUiBXUklUVEVOIElORk9STUFUSU9OIE9SIEFEVklDRSBHSVZFTiBCWSBBUFBMRSwgQU4gQVBQTEUgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSBPUiBBTlkgQ09OVFJJQlVUT1IgU0hBTEwgQ1JFQVRFIEEgV0FSUkFOVFkuIFlvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gdGhlIG9wZXJhdGlvbiBvZiBudWNsZWFyIGZhY2lsaXRpZXMsIGFpcmNyYWZ0IG5hdmlnYXRpb24sIGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBDb3ZlcmVkIENvZGUgY291bGQgbGVhZCB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiBUTyBUSEUgRVhURU5UIE5PVCBQUk9ISUJJVEVEIEJZIExBVywgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgQU5ZIENPTlRSSUJVVE9SIEJFIExJQUJMRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBUSElTIExJQ0VOU0UgT1IgWU9VUiBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgQ09WRVJFRCBDT0RFLCBPUiBBTlkgUE9SVElPTiBUSEVSRU9GLCBXSEVUSEVSIFVOREVSIEEgVEhFT1JZIE9GIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUUyBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGIEFQUExFIE9SIFNVQ0ggQ09OVFJJQlVUT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTIEFORCBOT1RXSVRIU1RBTkRJTkcgVEhFIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIFJFTUVEWS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gSW4gbm8gZXZlbnQgc2hhbGwgQXBwbGVgcyB0b3RhbCBsaWFiaWxpdHkgdG8gWW91IGZvciBhbGwgZGFtYWdlcyAob3RoZXIgdGhhbiBhcyBtYXkgYmUgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcpIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlZWQgdGhlIGFtb3VudCBvZiBmaWZ0eSBkb2xsYXJzICgkNTAuMDApLgorCisxMC4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzICJBcHBsZSIsICJBcHBsZSBDb21wdXRlciIsICJNYWMgT1MgWCIsICJNYWMgT1MgWCBTZXJ2ZXIiLCAiUXVpY2tUaW1lIiwgIlF1aWNrVGltZSBTdHJlYW1pbmcgU2VydmVyIiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBiZWxvbmdpbmcgdG8gQXBwbGUgKGNvbGxlY3RpdmVseSAiQXBwbGUgTWFya3MiKSBvciB0byBhbnkgdHJhZGVtYXJrIG9yIHRyYWRlIG5hbWUgYmVsb25naW5nIHRvIGFueSBDb250cmlidXRvci4gTm8gQXBwbGUgTWFya3MgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvdGhlciB0aGFuIGFzIHBlcm1pdHRlZCBieSBhbmQgaW4gc3RyaWN0IGNvbXBsaWFuY2UgYXQgYWxsIHRpbWVzIHdpdGggQXBwbGVgcyB0aGlyZCBwYXJ0eSB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcyB3aGljaCBhcmUgcG9zdGVkIGF0IGh0dHA6Ly93d3cuYXBwbGUuY29tL2xlZ2FsL2d1aWRlbGluZXNmb3IzcmRwYXJ0aWVzLmh0bWwuCisKKzExLiBPd25lcnNoaXAuIFN1YmplY3QgdG8gdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggQ29udHJpYnV0b3IuIEFwcGxlIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBvciBvbiBiZWhhbGYgb2YgQXBwbGUgKCJBcHBsZSBNb2RpZmljYXRpb25zIiksIGFuZCBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gQXBwbGUgbWF5LCBhdCBpdHMgc29sZSBkaXNjcmV0aW9uLCBjaG9vc2UgdG8gbGljZW5zZSBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIG9yIG1heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuCisKKzEyLiBUZXJtaW5hdGlvbi4KKworMTIuMSBUZXJtaW5hdGlvbi4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlOgorCisoYSkgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIEFwcGxlIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoOworCisoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mIHRoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEzLjUoYik7IG9yCisKKyhjKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBMaWNlbnNlLCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgYWdhaW5zdCBBcHBsZS4KKworMTIuMiBFZmZlY3Qgb2YgVGVybWluYXRpb24uIFVwb24gdGVybWluYXRpb24sIFlvdSBhZ3JlZSB0byBpbW1lZGlhdGVseSBzdG9wIGFueSBmdXJ0aGVyIHVzZSwgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sIHN1YmxpY2Vuc2luZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgYW5kIHRvIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBoYXZlIGJlZW4gcHJvcGVybHkgZ3JhbnRlZCBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgc2hvdWxkIHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9ucyAzLCA1LCA4LCA5LCAxMCwgMTEsIDEyLjIgYW5kIDEzLiBObyBwYXJ0eSB3aWxsIGJlIGxpYWJsZSB0byBhbnkgb3RoZXIgZm9yIGNvbXBlbnNhdGlvbiwgaW5kZW1uaXR5IG9yIGRhbWFnZXMgb2YgYW55IHNvcnQgc29sZWx5IGFzIGEgcmVzdWx0IG9mIHRlcm1pbmF0aW5nIHRoaXMgTGljZW5zZSBpbiBhY2NvcmRhbmNlIHdpdGggaXRzIHRlcm1zLCBhbmQgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgYmUgd2l0aG91dCBwcmVqdWRpY2UgdG8gYW55IG90aGVyIHJpZ2h0IG9yIHJlbWVkeSBvZiBhbnkgcGFydHkuCisKKzEzLiBNaXNjZWxsYW5lb3VzLgorCisxMy4xIEdvdmVybm1lbnQgRW5kIFVzZXJzLiBUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSIgYXMgZGVmaW5lZCBpbiBGQVIgMi4xMDEuIEdvdmVybm1lbnQgc29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIHJpZ2h0cyBpbiB0aGUgQ292ZXJlZCBDb2RlIGluY2x1ZGUgb25seSB0aG9zZSByaWdodHMgY3VzdG9tYXJpbHkgcHJvdmlkZWQgdG8gdGhlIHB1YmxpYyBhcyBkZWZpbmVkIGluIHRoaXMgTGljZW5zZS4gVGhpcyBjdXN0b21hcnkgY29tbWVyY2lhbCBsaWNlbnNlIGluIHRlY2huaWNhbCBkYXRhIGFuZCBzb2Z0d2FyZSBpcyBwcm92aWRlZCBpbiBhY2NvcmRhbmNlIHdpdGggRkFSIDEyLjIxMSAoVGVjaG5pY2FsIERhdGEpIGFuZCAxMi4yMTIgKENvbXB1dGVyIFNvZnR3YXJlKSBhbmQsIGZvciBEZXBhcnRtZW50IG9mIERlZmVuc2UgcHVyY2hhc2VzLCBERkFSIDI1Mi4yMjctNzAxNSAoVGVjaG5pY2FsIERhdGEgLS0gQ29tbWVyY2lhbCBJdGVtcykgYW5kIDIyNy43MjAyLTMgKFJpZ2h0cyBpbiBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIG9yIENvbXB1dGVyIFNvZnR3YXJlIERvY3VtZW50YXRpb24pLiBBY2NvcmRpbmdseSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMy4yIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiBUaGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiBvciBhbW9uZ1lvdSwgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudCB0byB0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSBvciBvdGhlcndpc2UuCisKKzEzLjMgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyIEFwcGxlYHMgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IgaXQsIG1hcmtldCBhbmQvb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwgTW9kaWZpY2F0aW9ucywgTGFyZ2VyIFdvcmtzLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heSBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS4KKworMTMuNCBXYWl2ZXI7IENvbnN0cnVjdGlvbi4gRmFpbHVyZSBieSBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IgdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2YgZnV0dXJlIGVuZm9yY2VtZW50IG9mIHRoYXQgb3IgYW55IG90aGVyIHByb3Zpc2lvbi4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgd2lsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMy41IFNldmVyYWJpbGl0eS4gKGEpIElmIGZvciBhbnkgcmVhc29uIGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgb3IgcG9ydGlvbiB0aGVyZW9mLCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGF0IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5zZSB3aWxsIGJlIGVuZm9yY2VkIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXNzaWJsZSBzbyBhcyB0byBlZmZlY3QgdGhlIGVjb25vbWljIGJlbmVmaXRzIGFuZCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4gKGIpIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCBpZiBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgb3IgcmVzdHJpY3RzIFlvdSBmcm9tIGZ1bGx5IGFuZC9vciBzcGVjaWZpY2FsbHkgY29tcGx5aW5nIHdpdGggU2VjdGlvbnMgMiBhbmQvb3IgMyBvciBwcmV2ZW50cyB0aGUgZW5mb3JjZWFiaWxpdHkgb2YgZWl0aGVyIG9mIHRob3NlIFNlY3Rpb25zLCB0aGlzIExpY2Vuc2Ugd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUgYW5kIFlvdSBtdXN0IGltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIGFueSB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgZGVzdHJveSBhbGwgY29waWVzIG9mIGl0IHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLgorCisxMy42IERpc3B1dGUgUmVzb2x1dGlvbi4gQW55IGxpdGlnYXRpb24gb3Igb3RoZXIgZGlzcHV0ZSByZXNvbHV0aW9uIGJldHdlZW4gWW91IGFuZCBBcHBsZSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgdGFrZSBwbGFjZSBpbiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgYW5kIFlvdSBhbmQgQXBwbGUgaGVyZWJ5IGNvbnNlbnQgdG8gdGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIHdpdGhpbiB0aGF0IERpc3RyaWN0IHdpdGggcmVzcGVjdCB0byB0aGlzIExpY2Vuc2UuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorCisxMy43IEVudGlyZSBBZ3JlZW1lbnQ7IEdvdmVybmluZyBMYXcuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLCBleGNlcHQgdGhhdCBib2R5IG9mIENhbGlmb3JuaWEgbGF3IGNvbmNlcm5pbmcgY29uZmxpY3RzIG9mIGxhdy4KKworV2hlcmUgWW91IGFyZSBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZyBjbGF1c2UgYXBwbGllczogVGhlIHBhcnRpZXMgaGVyZWJ5IGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgcmVxdWVzdGVkIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbGwgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiBMZXMgcGFydGllcyBvbnQgZXhpZyYjMjMzOyBxdWUgbGUgcHImIzIzMztzZW50IGNvbnRyYXQgZXQgdG91cyBsZXMgZG9jdW1lbnRzIGNvbm5leGVzIHNvaWVudCByJiMyMzM7ZGlnJiMyMzM7cyBlbiBhbmdsYWlzLgorCitFWEhJQklUIEEuCisKKyJQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitUaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZiBPcmlnaW5hbCBDb2RlIGFzIGRlZmluZWQgaW4gYW5kIHRoYXQgYXJlIHN1YmplY3QgdG8gdGhlIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMiAodGhlIGBMaWNlbnNlYCkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gUGxlYXNlIG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vcHVibGljc291cmNlIGFuZCByZWFkIGl0IGJlZm9yZSB1c2luZyB0aGlzIGZpbGUuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgYXJlIGRpc3RyaWJ1dGVkIG9uIGFuIGBBUyBJU2AgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIEFORCBBUFBMRSBIRVJFQlkgRElTQ0xBSU1TIEFMTCBTVUNIIFdBUlJBTlRJRVMsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFFVSUVUIEVOSk9ZTUVOVCBPUiBOT04tSU5GUklOR0VNRU5ULiBQbGVhc2Ugc2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTJlOGI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTIuMApAQCAtMCwwICsxLDEwMiBAQAorCitBUFBMRSBQVUJMSUMgU09VUkNFIExJQ0VOU0UKK1ZlcnNpb24gMi4wIC0gIEF1Z3VzdCA2LCAyMDAzCisKK1BsZWFzZSByZWFkIHRoaXMgTGljZW5zZSBjYXJlZnVsbHkgYmVmb3JlIGRvd25sb2FkaW5nIHRoaXMgc29mdHdhcmUuICBCeSBkb3dubG9hZGluZyBvciB1c2luZyB0aGlzIHNvZnR3YXJlLCB5b3UgYXJlIGFncmVlaW5nIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgZG8gbm90IG9yIGNhbm5vdCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBwbGVhc2UgZG8gbm90IGRvd25sb2FkIG9yIHVzZSB0aGUgc29mdHdhcmUuCisKK0FwcGxlIE5vdGU6ICBJbiBKYW51YXJ5IDIwMDcsIEFwcGxlIGNoYW5nZWQgaXRzIGNvcnBvcmF0ZSBuYW1lIGZyb20gIkFwcGxlIENvbXB1dGVyLCBJbmMuIiB0byAiQXBwbGUgSW5jLiIgIFRoaXMgY2hhbmdlIGhhcyBiZWVuIHJlZmxlY3RlZCBiZWxvdyBhbmQgY29weXJpZ2h0IHllYXJzIHVwZGF0ZWQsIGJ1dCBubyBvdGhlciBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBBUFNMIDIuMC4KKworMS4gR2VuZXJhbDsgRGVmaW5pdGlvbnMuICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIEFwcGxlIEluYy4gKCJBcHBsZSIpIG1ha2VzIHB1YmxpY2x5IGF2YWlsYWJsZSBhbmQgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IEFwcGxlIGlkZW50aWZ5aW5nIHN1Y2ggcHJvZ3JhbSBvciB3b3JrIGFzICJPcmlnaW5hbCBDb2RlIiBhbmQgc3RhdGluZyB0aGF0IGl0IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIHZlcnNpb24gMi4wICgiTGljZW5zZSIpLiAgQXMgdXNlZCBpbiB0aGlzIExpY2Vuc2U6CisKKzEuMSAgIkFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyIgbWVhbjogIChhKSBpbiB0aGUgY2FzZSB3aGVyZSBBcHBsZSBpcyB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBBcHBsZSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGNvbnRhaW5lZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYnV0IG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gdXNlLCByZXByb2R1Y2UgYW5kL29yIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgd2l0aG91dCBpbmZyaW5nZW1lbnQ7IGFuZCAoYikgaW4gdGhlIGNhc2Ugd2hlcmUgWW91IGFyZSB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBZb3UgYW5kIChpaSkgdGhhdCBjb3ZlciBzdWJqZWN0IG1hdHRlciBpbiBZb3VyIE1vZGlmaWNhdGlvbnMsIHRha2VuIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggT3JpZ2luYWwgQ29kZS4KKworMS4yICJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjMgICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQgIkV4dGVybmFsbHkgRGVwbG95IiBtZWFuczogKGEpIHRvIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgQ292ZXJlZCBDb2RlIGF2YWlsYWJsZSwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgdG8gYW55b25lIG90aGVyIHRoYW4gWW91OyBhbmQvb3IgKGIpIHRvIHVzZSBDb3ZlcmVkIENvZGUsIGFsb25lIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yaywgaW4gYW55IHdheSB0byBwcm92aWRlIGEgc2VydmljZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkZWxpdmVyeSBvZiBjb250ZW50LCB0aHJvdWdoIGVsZWN0cm9uaWMgY29tbXVuaWNhdGlvbiB3aXRoIGEgY2xpZW50IG90aGVyIHRoYW4gWW91LgorCisxLjUgIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjYgIk1vZGlmaWNhdGlvbnMiIG1lYW4gYW55IGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBhbmQvb3IgY2hhbmdlIHRvLCB0aGUgc3Vic3RhbmNlIGFuZC9vciBzdHJ1Y3R1cmUgb2YgdGhlIE9yaWdpbmFsIENvZGUsIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLiAgV2hlbiBjb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczogIChhKSBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlOyBhbmQvb3IgKGIpIGFueSBuZXcgZmlsZSBvciBvdGhlciByZXByZXNlbnRhdGlvbiBvZiBjb21wdXRlciBwcm9ncmFtIHN0YXRlbWVudHMgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBDb3ZlcmVkIENvZGUuIAorCisxLjcgIk9yaWdpbmFsIENvZGUiIG1lYW5zIChhKSB0aGUgU291cmNlIENvZGUgb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgYXMgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgU291cmNlIENvZGUgb2YgYW55IHVwZGF0ZXMgb3IgdXBncmFkZXMgdG8gc3VjaCBwcm9ncmFtcyBvciB3b3JrcyBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB0aGF0IGhhcyBiZWVuIGV4cHJlc3NseSBpZGVudGlmaWVkIGJ5IEFwcGxlIGFzIHN1Y2ggaW4gdGhlIGhlYWRlciBmaWxlKHMpIG9mIHN1Y2ggd29yazsgYW5kIChiKSB0aGUgb2JqZWN0IGNvZGUgY29tcGlsZWQgZnJvbSBzdWNoIFNvdXJjZSBDb2RlIGFuZCBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZQorCisxLjggIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgaHVtYW4gcmVhZGFibGUgZm9ybSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayB0aGF0IGlzIHN1aXRhYmxlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUgKG9iamVjdCBjb2RlKS4KKworMS45ICJZb3UiIG9yICJZb3VyIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgb3IgIllvdXIiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gUGVybWl0dGVkIFVzZXM7IENvbmRpdGlvbnMgJmFtcDsgUmVzdHJpY3Rpb25zLiAgIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgQXBwbGUgaGVyZWJ5IGdyYW50cyBZb3UsIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBZb3UgYWNjZXB0IHRoaXMgTGljZW5zZSBhbmQgZG93bmxvYWQgdGhlIE9yaWdpbmFsIENvZGUsIGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHRvIHRoZSBleHRlbnQgb2YgQXBwbGVgcyBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIGNvcHlyaWdodHMgY292ZXJpbmcgdGhlIE9yaWdpbmFsIENvZGUsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKzIuMSBVbm1vZGlmaWVkIENvZGUuICBZb3UgbWF5IHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBpbnRlcm5hbGx5IGRpc3RyaWJ1dGUgd2l0aGluIFlvdXIgb3JnYW5pemF0aW9uLCBhbmQgRXh0ZXJuYWxseSBEZXBsb3kgdmVyYmF0aW0sIHVubW9kaWZpZWQgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBmb3IgY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcywgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlOgorCisoYSkgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UgaW4gYWxsIGNvcGllcyBvZiBPcmlnaW5hbCBDb2RlIHRoZSBjb3B5cmlnaHQgYW5kIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMgYW5kIGRpc2NsYWltZXJzIG9mIEFwcGxlIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgaW4gdGhlIE9yaWdpbmFsIENvZGUgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2U7IGFuZAorCisoYikgIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgU291cmNlIENvZGUgb2YgQ292ZXJlZCBDb2RlIGFuZCBkb2N1bWVudGF0aW9uIFlvdSBkaXN0cmlidXRlIG9yIEV4dGVybmFsbHkgRGVwbG95LCBhbmQgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBzdWNoIFNvdXJjZSBDb2RlIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLCBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNi4KKworMi4yIE1vZGlmaWVkIENvZGUuICBZb3UgbWF5IG1vZGlmeSBDb3ZlcmVkIENvZGUgYW5kIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBpbnRlcm5hbGx5IGRpc3RyaWJ1dGUgd2l0aGluIFlvdXIgb3JnYW5pemF0aW9uLCBhbmQgRXh0ZXJuYWxseSBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIGFuZCBDb3ZlcmVkIENvZGUsIGZvciBjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLCBwcm92aWRlZCB0aGF0IGluIGVhY2ggaW5zdGFuY2UgWW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworKGEpIFlvdSBtdXN0IHNhdGlzZnkgYWxsIHRoZSBjb25kaXRpb25zIG9mIFNlY3Rpb24gMi4xIHdpdGggcmVzcGVjdCB0byB0aGUgU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZTsgCisKKyhiKSBZb3UgbXVzdCBkdXBsaWNhdGUsIHRvIHRoZSBleHRlbnQgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCwgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBNb2RpZmljYXRpb25zLCBhbmQgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2U7IGFuZAorCisoYykgSWYgWW91IEV4dGVybmFsbHkgRGVwbG95IFlvdXIgTW9kaWZpY2F0aW9ucywgWW91IG11c3QgbWFrZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBFeHRlcm5hbGx5IERlcGxveWVkIE1vZGlmaWNhdGlvbnMgZWl0aGVyIGF2YWlsYWJsZSB0byB0aG9zZSB0byB3aG9tIFlvdSBoYXZlIEV4dGVybmFsbHkgRGVwbG95ZWQgWW91ciBNb2RpZmljYXRpb25zLCBvciBwdWJsaWNseSBhdmFpbGFibGUuICBTb3VyY2UgQ29kZSBvZiBZb3VyIEV4dGVybmFsbHkgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBtdXN0IGJlIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgZ3JhbnRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDMgYmVsb3csIGZvciBhcyBsb25nIGFzIHlvdSBFeHRlcm5hbGx5IERlcGxveSB0aGUgQ292ZXJlZCBDb2RlIG9yIHR3ZWx2ZSAoMTIpIG1vbnRocyBmcm9tIHRoZSBkYXRlIG9mIGluaXRpYWwgRXh0ZXJuYWwgRGVwbG95bWVudCwgd2hpY2hldmVyIGlzIGxvbmdlci4gWW91IHNob3VsZCBwcmVmZXJhYmx5IGRpc3RyaWJ1dGUgdGhlIFNvdXJjZSBDb2RlIG9mIFlvdXIgRXh0ZXJuYWxseSBEZXBsb3llZCBNb2RpZmljYXRpb25zIGVsZWN0cm9uaWNhbGx5IChlLmcuIGRvd25sb2FkIGZyb20gYSB3ZWIgc2l0ZSkuCisKKzIuMyBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4gIEluIGFkZGl0aW9uLCBpZiBZb3UgRXh0ZXJuYWxseSBEZXBsb3kgQ292ZXJlZCBDb2RlIChPcmlnaW5hbCBDb2RlIGFuZC9vciBNb2RpZmljYXRpb25zKSBpbiBvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlLCBpbiB0aGUgY29kZSBpdHNlbGYgYXMgd2VsbCBhcyBpbiByZWxhdGVkIGRvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZCB3aGVyZSB0byBvYnRhaW4gc3VjaCBTb3VyY2UgQ29kZS4gIAorCisyLjQgVGhpcmQgUGFydHkgUmlnaHRzLiAgWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCBhbHRob3VnaCBBcHBsZSBhbmQgZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIHRoZWlyIHJlc3BlY3RpdmUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgQ292ZXJlZCBDb2RlIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBBcHBsZSBhbmQgZWFjaCBDb250cmlidXRvciBkaXNjbGFpbSBhbnkgbGlhYmlsaXR5IHRvIFlvdSBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIFlvdSBoZXJlYnkgYXNzdW1lIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBZb3UgdG8gZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBDb2RlLCBpdCBpcyBZb3VyIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIENvdmVyZWQgQ29kZS4KKworMy4gWW91ciBHcmFudHMuICBJbiBjb25zaWRlcmF0aW9uIG9mLCBhbmQgYXMgYSBjb25kaXRpb24gdG8sIHRoZSBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBoZXJlYnkgZ3JhbnQgdG8gYW55IHBlcnNvbiBvciBlbnRpdHkgcmVjZWl2aW5nIG9yIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUgdW5kZXIgdGhpcyBMaWNlbnNlIGEgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCBwZXJwZXR1YWwsIGlycmV2b2NhYmxlIGxpY2Vuc2UsIHVuZGVyIFlvdXIgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCkgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgYW5kIEV4dGVybmFsbHkgRGVwbG95IFlvdXIgTW9kaWZpY2F0aW9ucyBvZiB0aGUgc2FtZSBzY29wZSBhbmQgZXh0ZW50IGFzIEFwcGxlYHMgbGljZW5zZXMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZCAyLjIgYWJvdmUuICAKKworNC4gTGFyZ2VyIFdvcmtzLiAgWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gIEluIGVhY2ggc3VjaCBpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZi4gCisKKzUuIExpbWl0YXRpb25zIG9uIFBhdGVudCBMaWNlbnNlLiAgIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb24gMiwgbm8gb3RoZXIgcGF0ZW50IHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBBcHBsZSBoZXJlaW4uICBNb2RpZmljYXRpb25zIGFuZC9vciBMYXJnZXIgV29ya3MgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCBwYXRlbnQgbGljZW5zZXMgZnJvbSBBcHBsZSB3aGljaCBBcHBsZSBtYXkgZ3JhbnQgaW4gaXRzIHNvbGUgZGlzY3JldGlvbi4gIAorCis2LiBBZGRpdGlvbmFsIFRlcm1zLiAgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3Igb3RoZXIgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2NvcGUgb2YgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlaW4gKCJBZGRpdGlvbmFsIFRlcm1zIikgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIGFzIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBvYnRhaW4gdGhlIHJlY2lwaWVudGBzIGFncmVlbWVudCB0aGF0IGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBBcHBsZSBhbmQgZXZlcnkgQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QgQXBwbGUgb3Igc3VjaCBDb250cmlidXRvciBieSByZWFzb24gb2YgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcy4gCisKKzcuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLiAgQXBwbGUgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBPbmNlIE9yaWdpbmFsIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgWW91IG1heSBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBwdWJsaXNoZWQgYnkgQXBwbGUuICBObyBvbmUgb3RoZXIgdGhhbiBBcHBsZSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICAKKworOC4gTk8gV0FSUkFOVFkgT1IgU1VQUE9SVC4gIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gaW4gd2hvbGUgb3IgaW4gcGFydCBwcmUtcmVsZWFzZSwgdW50ZXN0ZWQsIG9yIG5vdCBmdWxseSB0ZXN0ZWQgd29ya3MuICBUaGUgQ292ZXJlZCBDb2RlIG1heSBjb250YWluIGVycm9ycyB0aGF0IGNvdWxkIGNhdXNlIGZhaWx1cmVzIG9yIGxvc3Mgb2YgZGF0YSwgYW5kIG1heSBiZSBpbmNvbXBsZXRlIG9yIGNvbnRhaW4gaW5hY2N1cmFjaWVzLiAgWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSwgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgaXMgYXQgWW91ciBzb2xlIGFuZCBlbnRpcmUgcmlzay4gIFRIRSBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSwgVVBHUkFERVMgT1IgU1VQUE9SVCBPRiBBTlkgS0lORCBBTkQgQVBQTEUgQU5EIEFQUExFYFMgTElDRU5TT1IoUykgKENPTExFQ1RJVkVMWSBSRUZFUlJFRCBUTyBBUyAiQVBQTEUiIEZPUiBUSEUgUFVSUE9TRVMgT0YgU0VDVElPTlMgOCBBTkQgOSkgQU5EIEFMTCBDT05UUklCVVRPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgU0FUSVNGQUNUT1JZIFFVQUxJVFksIE9GIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPRiBBQ0NVUkFDWSwgT0YgUVVJRVQgRU5KT1lNRU5ULCBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gIEFQUExFIEFORCBFQUNIIENPTlRSSUJVVE9SIERPRVMgTk9UIFdBUlJBTlQgQUdBSU5TVCBJTlRFUkZFUkVOQ0UgV0lUSCBZT1VSIEVOSk9ZTUVOVCBPRiBUSEUgQ09WRVJFRCBDT0RFLCBUSEFUIFRIRSBGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLCBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSwgT1IgVEhBVCBERUZFQ1RTIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBDT1JSRUNURUQuICBOTyBPUkFMIE9SIFdSSVRURU4gSU5GT1JNQVRJT04gT1IgQURWSUNFIEdJVkVOIEJZIEFQUExFLCBBTiBBUFBMRSBBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFIE9SIEFOWSBDT05UUklCVVRPUiBTSEFMTCBDUkVBVEUgQSBXQVJSQU5UWS4gIFlvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gdGhlIG9wZXJhdGlvbiBvZiBudWNsZWFyIGZhY2lsaXRpZXMsIGFpcmNyYWZ0IG5hdmlnYXRpb24sIGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBDb3ZlcmVkIENvZGUgY291bGQgbGVhZCB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiBUTyBUSEUgRVhURU5UIE5PVCBQUk9ISUJJVEVEIEJZIExBVywgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgQU5ZIENPTlRSSUJVVE9SIEJFIExJQUJMRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBUSElTIExJQ0VOU0UgT1IgWU9VUiBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgQ09WRVJFRCBDT0RFLCBPUiBBTlkgUE9SVElPTiBUSEVSRU9GLCBXSEVUSEVSIFVOREVSIEEgVEhFT1JZIE9GIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUUyBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGIEFQUExFIE9SIFNVQ0ggQ09OVFJJQlVUT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTIEFORCBOT1RXSVRIU1RBTkRJTkcgVEhFIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIFJFTUVEWS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gSW4gbm8gZXZlbnQgc2hhbGwgQXBwbGVgcyB0b3RhbCBsaWFiaWxpdHkgdG8gWW91IGZvciBhbGwgZGFtYWdlcyAob3RoZXIgdGhhbiBhcyBtYXkgYmUgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcpIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlZWQgdGhlIGFtb3VudCBvZiBmaWZ0eSBkb2xsYXJzICgkNTAuMDApLgorCisxMC4gVHJhZGVtYXJrcy4gIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyAgIkFwcGxlIiwgIk1hYyIsICJNYWMgT1MiLCAiUXVpY2tUaW1lIiwgIlF1aWNrVGltZSBTdHJlYW1pbmcgU2VydmVyIiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgbG9nb3Mgb3IgdHJhZGUgbmFtZXMgYmVsb25naW5nIHRvIEFwcGxlIChjb2xsZWN0aXZlbHkgIkFwcGxlIE1hcmtzIikgb3IgdG8gYW55IHRyYWRlbWFyaywgc2VydmljZSBtYXJrLCBsb2dvIG9yIHRyYWRlIG5hbWUgYmVsb25naW5nIHRvIGFueSBDb250cmlidXRvci4gIFlvdSBhZ3JlZSBub3QgdG8gdXNlIGFueSBBcHBsZSBNYXJrcyBpbiBvciBhcyBwYXJ0IG9mIHRoZSBuYW1lIG9mIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvciB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG90aGVyIHRoYW4gYXMgZXhwcmVzc2x5IHBlcm1pdHRlZCBieSBhbmQgaW4gc3RyaWN0IGNvbXBsaWFuY2UgYXQgYWxsIHRpbWVzIHdpdGggQXBwbGVgcyB0aGlyZCBwYXJ0eSB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcyB3aGljaCBhcmUgcG9zdGVkIGF0IGh0dHA6Ly93d3cuYXBwbGUuY29tL2xlZ2FsL2d1aWRlbGluZXNmb3IzcmRwYXJ0aWVzLmh0bWwuICAKKworMTEuIE93bmVyc2hpcC4gU3ViamVjdCB0byB0aGUgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBDb250cmlidXRvci4gIEFwcGxlIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBvciBvbiBiZWhhbGYgb2YgQXBwbGUgKCJBcHBsZSBNb2RpZmljYXRpb25zIiksIGFuZCBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIEFwcGxlIG1heSwgYXQgaXRzIHNvbGUgZGlzY3JldGlvbiwgY2hvb3NlIHRvIGxpY2Vuc2Ugc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSwgb3Igb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZSBvciBtYXkgY2hvb3NlIG5vdCB0byBsaWNlbnNlIHRoZW0gYXQgYWxsLiAgCisKKzEyLiBUZXJtaW5hdGlvbi4gIAorCisxMi4xIFRlcm1pbmF0aW9uLiAgVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlOgorCisoYSkgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIEFwcGxlIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoOworKGIpIGltbWVkaWF0ZWx5IGluIHRoZSBldmVudCBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAxMy41KGIpOyBvcgorKGMpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBcHBsZSBpZiBZb3UsIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgdGVybSBvZiB0aGlzIExpY2Vuc2UsIGNvbW1lbmNlIGFuIGFjdGlvbiBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCBhZ2FpbnN0IEFwcGxlOyBwcm92aWRlZCB0aGF0IEFwcGxlIGRpZCBub3QgZmlyc3QgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IGFnYWluc3QgWW91IGluIHRoYXQgaW5zdGFuY2UuCisKKzEyLjIgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiAgVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvIGltbWVkaWF0ZWx5IHN0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIENvdmVyZWQgQ29kZS4gIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGhhdmUgYmVlbiBwcm9wZXJseSBncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgc2hvdWxkIHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9ucyAzLCA1LCA4LCA5LCAxMCwgMTEsIDEyLjIgYW5kIDEzLiAgTm8gcGFydHkgd2lsbCBiZSBsaWFibGUgdG8gYW55IG90aGVyIGZvciBjb21wZW5zYXRpb24sIGluZGVtbml0eSBvciBkYW1hZ2VzIG9mIGFueSBzb3J0IHNvbGVseSBhcyBhIHJlc3VsdCBvZiB0ZXJtaW5hdGluZyB0aGlzIExpY2Vuc2UgaW4gYWNjb3JkYW5jZSB3aXRoIGl0cyB0ZXJtcywgYW5kIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIGJlIHdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodCBvciByZW1lZHkgb2YgYW55IHBhcnR5LgorCisxMy4gIE1pc2NlbGxhbmVvdXMuCisKKzEzLjEgR292ZXJubWVudCBFbmQgVXNlcnMuICAgVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0iIGFzIGRlZmluZWQgaW4gRkFSIDIuMTAxLiAgR292ZXJubWVudCBzb2Z0d2FyZSBhbmQgdGVjaG5pY2FsIGRhdGEgcmlnaHRzIGluIHRoZSBDb3ZlcmVkIENvZGUgaW5jbHVkZSBvbmx5IHRob3NlIHJpZ2h0cyBjdXN0b21hcmlseSBwcm92aWRlZCB0byB0aGUgcHVibGljIGFzIGRlZmluZWQgaW4gdGhpcyBMaWNlbnNlLiBUaGlzIGN1c3RvbWFyeSBjb21tZXJjaWFsIGxpY2Vuc2UgaW4gdGVjaG5pY2FsIGRhdGEgYW5kIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGluIGFjY29yZGFuY2Ugd2l0aCBGQVIgMTIuMjExIChUZWNobmljYWwgRGF0YSkgYW5kIDEyLjIxMiAoQ29tcHV0ZXIgU29mdHdhcmUpIGFuZCwgZm9yIERlcGFydG1lbnQgb2YgRGVmZW5zZSBwdXJjaGFzZXMsIERGQVIgMjUyLjIyNy03MDE1IChUZWNobmljYWwgRGF0YSAtLSBDb21tZXJjaWFsIEl0ZW1zKSBhbmQgMjI3LjcyMDItMyAoUmlnaHRzIGluIENvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUgb3IgQ29tcHV0ZXIgU29mdHdhcmUgRG9jdW1lbnRhdGlvbikuICBBY2NvcmRpbmdseSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMy4yIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiAgVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gb3IgYW1vbmcgWW91LCBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IsIGFuZCBZb3Ugd2lsbCBub3QgcmVwcmVzZW50IHRvIHRoZSBjb250cmFyeSwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBhcHBlYXJhbmNlIG9yIG90aGVyd2lzZS4KKworMTMuMyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSB3aWxsIGltcGFpciBBcHBsZWBzIHJpZ2h0IHRvIGFjcXVpcmUsIGxpY2Vuc2UsIGRldmVsb3AsIGhhdmUgb3RoZXJzIGRldmVsb3AgZm9yIGl0LCBtYXJrZXQgYW5kL29yIGRpc3RyaWJ1dGUgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IHBlcmZvcm0gdGhlIHNhbWUgb3Igc2ltaWxhciBmdW5jdGlvbnMgYXMsIG9yIG90aGVyd2lzZSBjb21wZXRlIHdpdGgsIE1vZGlmaWNhdGlvbnMsIExhcmdlciBXb3JrcywgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IFlvdSBtYXkgZGV2ZWxvcCwgcHJvZHVjZSwgbWFya2V0IG9yIGRpc3RyaWJ1dGUuCisKKzEzLjQgV2FpdmVyOyBDb25zdHJ1Y3Rpb24uICBGYWlsdXJlIGJ5IEFwcGxlIG9yIGFueSBDb250cmlidXRvciB0byBlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGRlZW1lZCBhIHdhaXZlciBvZiBmdXR1cmUgZW5mb3JjZW1lbnQgb2YgdGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLiAgQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgd2lsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMy41IFNldmVyYWJpbGl0eS4gIChhKSBJZiBmb3IgYW55IHJlYXNvbiBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24gZmluZHMgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIG9yIHBvcnRpb24gdGhlcmVvZiwgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhhdCBwcm92aXNpb24gb2YgdGhlIExpY2Vuc2Ugd2lsbCBiZSBlbmZvcmNlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWlzc2libGUgc28gYXMgdG8gZWZmZWN0IHRoZSBlY29ub21pYyBiZW5lZml0cyBhbmQgaW50ZW50IG9mIHRoZSBwYXJ0aWVzLCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuICAoYikgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIGlmIGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBvciByZXN0cmljdHMgWW91IGZyb20gZnVsbHkgYW5kL29yIHNwZWNpZmljYWxseSBjb21wbHlpbmcgd2l0aCBTZWN0aW9ucyAyIGFuZC9vciAzIG9yIHByZXZlbnRzIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiBlaXRoZXIgb2YgdGhvc2UgU2VjdGlvbnMsIHRoaXMgTGljZW5zZSB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBhbmQgWW91IG11c3QgaW1tZWRpYXRlbHkgZGlzY29udGludWUgYW55IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgaXQgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuCisKKzEzLjYgRGlzcHV0ZSBSZXNvbHV0aW9uLiAgQW55IGxpdGlnYXRpb24gb3Igb3RoZXIgZGlzcHV0ZSByZXNvbHV0aW9uIGJldHdlZW4gWW91IGFuZCBBcHBsZSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgdGFrZSBwbGFjZSBpbiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgYW5kIFlvdSBhbmQgQXBwbGUgaGVyZWJ5IGNvbnNlbnQgdG8gdGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIHdpdGhpbiB0aGF0IERpc3RyaWN0IHdpdGggcmVzcGVjdCB0byB0aGlzIExpY2Vuc2UuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorCisxMy43IEVudGlyZSBBZ3JlZW1lbnQ7IEdvdmVybmluZyBMYXcuICBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2VwdCB0aGF0IGJvZHkgb2YgQ2FsaWZvcm5pYSBsYXcgY29uY2VybmluZyBjb25mbGljdHMgb2YgbGF3LiAKKworV2hlcmUgWW91IGFyZSBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZyBjbGF1c2UgYXBwbGllczogIFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhleSBoYXZlIHJlcXVlc3RlZCB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYWxsIHJlbGF0ZWQgZG9jdW1lbnRzIGJlIGRyYWZ0ZWQgaW4gRW5nbGlzaC4gIExlcyBwYXJ0aWVzIG9udCBleGlnJiMyMzM7IHF1ZSBsZSBwciYjMjMzO3NlbnQgY29udHJhdCBldCB0b3VzIGxlcyBkb2N1bWVudHMgY29ubmV4ZXMgc29pZW50IHImIzIzMztkaWcmIzIzMztzIGVuIGFuZ2xhaXMuCisKK0VYSElCSVQgQS4gCisKKyJQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNyBBcHBsZSBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitUaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZiBPcmlnaW5hbCBDb2RlIGFzIGRlZmluZWQgaW4gYW5kIHRoYXQgYXJlIHN1YmplY3QgdG8gdGhlIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDIuMCAodGhlIGBMaWNlbnNlYCkuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICBQbGVhc2Ugb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm9wZW5zb3VyY2UuYXBwbGUuY29tL2Fwc2wvIGFuZCByZWFkIGl0IGJlZm9yZSB1c2luZyB0aGlzIGZpbGUuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgYXJlIGRpc3RyaWJ1dGVkIG9uIGFuIGBBUyBJU2AgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIEFORCBBUFBMRSBIRVJFQlkgRElTQ0xBSU1TIEFMTCBTVUNIIFdBUlJBTlRJRVMsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFFVSUVUIEVOSk9ZTUVOVCBPUiBOT04tSU5GUklOR0VNRU5ULiAgUGxlYXNlIHNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiIgCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQWRvYmUgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0Fkb2JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0Nzc5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0Fkb2JlCkBAIC0wLDAgKzEsMTQgQEAKK0NvcHlyaWdodCAxOTkwLTE5OTggQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuCitBbGwgUmlnaHRzIFJlc2VydmVkLgorICAKK1BhdGVudHMgUGVuZGluZworCitOT1RJQ0U6IEFsbCBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzIHRoZSBwcm9wZXJ0eSBvZiBBZG9iZQorU3lzdGVtcyBJbmNvcnBvcmF0ZWQuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCBmb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlIHByb3ZpZGVkCit0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMgbWFpbnRhaW5lZCBpbnRhY3QgYW5kIHRoYXQgdGhlIGNvbnRlbnRzCitvZiB0aGlzIGZpbGUgYXJlIG5vdCBhbHRlcmVkIGluIGFueSB3YXkgZnJvbSBpdHMgb3JpZ2luYWwgZm9ybS4KKworUG9zdFNjcmlwdCBhbmQgRGlzcGxheSBQb3N0U2NyaXB0IGFyZSB0cmFkZW1hcmtzIG9mIEFkb2JlIFN5c3RlbXMKK0luY29ycG9yYXRlZCB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBpbiBjZXJ0YWluIGp1cmlzZGljdGlvbnMuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FwYWNoZS0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FwYWNoZS0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZlOTA4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXBhY2hlLTEuMApAQCAtMCwwICsxLDYxIEBACisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDE5OTUtMTk5OSBUaGUgQXBhY2hlIEdyb3VwLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBBcGFjaGUgR3JvdXAKKyAqICAgIGZvciB1c2UgaW4gdGhlIEFwYWNoZSBIVFRQIHNlcnZlciBwcm9qZWN0IChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCisgKgorICogNC4gVGhlIG5hbWVzICJBcGFjaGUgU2VydmVyIiBhbmQgIkFwYWNoZSBHcm91cCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIGFwYWNoZUBhcGFjaGUub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUiCisgKiAgICBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBHcm91cC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBBcGFjaGUgR3JvdXAKKyAqICAgIGZvciB1c2UgaW4gdGhlIEFwYWNoZSBIVFRQIHNlcnZlciBwcm9qZWN0IChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVBBQ0hFIEdST1VQIGBgQVMgSVNgYCBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIEdST1VQIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKKyAqIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIEdyb3VwIGFuZCB3YXMgb3JpZ2luYWxseSBiYXNlZAorICogb24gcHVibGljIGRvbWFpbiBzb2Z0d2FyZSB3cml0dGVuIGF0IHRoZSBOYXRpb25hbCBDZW50ZXIgZm9yCisgKiBTdXBlcmNvbXB1dGluZyBBcHBsaWNhdGlvbnMsIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMsIFVyYmFuYS1DaGFtcGFpZ24uCisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIEdyb3VwIGFuZCB0aGUgQXBhY2hlIEhUVFAgc2VydmVyCisgKiBwcm9qZWN0LCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KKyAqCisgKi8KKworCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMS4xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNWVjMDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FwYWNoZS0xLjEKQEAgLTAsMCArMSw2MCBAQAorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMCBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCisgKiByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKKyAqICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKKyAqICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgorICogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAorICogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KKyAqCisgKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAorICogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUiLAorICogICAgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQorICogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUKKyAqIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KKyAqCisgKiBQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIGFyZSBiYXNlZCB1cG9uIHB1YmxpYyBkb21haW4gc29mdHdhcmUKKyAqIG9yaWdpbmFsbHkgd3JpdHRlbiBhdCB0aGUgTmF0aW9uYWwgQ2VudGVyIGZvciBTdXBlcmNvbXB1dGluZyBBcHBsaWNhdGlvbnMsCisgKiBVbml2ZXJzaXR5IG9mIElsbGlub2lzLCBVcmJhbmEtQ2hhbXBhaWduLgorICovCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMjAxYWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FwYWNoZS0yLjAKQEAgLTAsMCArMSwyMDQgQEAKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgorCisgICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZworICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgorICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbmB0IGluY2x1ZGUKKyAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKKyAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKKyAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcnRpc3RpYy0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FydGlzdGljLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDdlNGQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcnRpc3RpYy0xLjAKQEAgLTAsMCArMSw1MCBAQAorCitUaGUgQXJ0aXN0aWMgTGljZW5zZQorUHJlYW1ibGUKKworVGhlIGludGVudCBvZiB0aGlzIGRvY3VtZW50IGlzIHRvIHN0YXRlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgUGFja2FnZSBtYXkgYmUgY29waWVkLCBzdWNoIHRoYXQgdGhlIENvcHlyaWdodCBIb2xkZXIgbWFpbnRhaW5zIHNvbWUgc2VtYmxhbmNlIG9mIGFydGlzdGljIGNvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIHBhY2thZ2UsIHdoaWxlIGdpdmluZyB0aGUgdXNlcnMgb2YgdGhlIHBhY2thZ2UgdGhlIHJpZ2h0IHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGUgUGFja2FnZSBpbiBhIG1vcmUtb3ItbGVzcyBjdXN0b21hcnkgZmFzaGlvbiwgcGx1cyB0aGUgcmlnaHQgdG8gbWFrZSByZWFzb25hYmxlIG1vZGlmaWNhdGlvbnMuCisKK0RlZmluaXRpb25zOgorCisiUGFja2FnZSIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyLCBhbmQgZGVyaXZhdGl2ZXMgb2YgdGhhdCBjb2xsZWN0aW9uIG9mIGZpbGVzIGNyZWF0ZWQgdGhyb3VnaCB0ZXh0dWFsIG1vZGlmaWNhdGlvbi4KKyJTdGFuZGFyZCBWZXJzaW9uIiByZWZlcnMgdG8gc3VjaCBhIFBhY2thZ2UgaWYgaXQgaGFzIG5vdCBiZWVuIG1vZGlmaWVkLCBvciBoYXMgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHdpc2hlcyBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlci4KKyJDb3B5cmlnaHQgSG9sZGVyIiBpcyB3aG9ldmVyIGlzIG5hbWVkIGluIHRoZSBjb3B5cmlnaHQgb3IgY29weXJpZ2h0cyBmb3IgdGhlIHBhY2thZ2UuCisiWW91IiBpcyB5b3UsIGlmIHlvdWByZSB0aGlua2luZyBhYm91dCBjb3B5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGlzIFBhY2thZ2UuCisiUmVhc29uYWJsZSBjb3B5aW5nIGZlZSIgaXMgd2hhdGV2ZXIgeW91IGNhbiBqdXN0aWZ5IG9uIHRoZSBiYXNpcyBvZiBtZWRpYSBjb3N0LCBkdXBsaWNhdGlvbiBjaGFyZ2VzLCB0aW1lIG9mIHBlb3BsZSBpbnZvbHZlZCwgYW5kIHNvIG9uLiAoWW91IHdpbGwgbm90IGJlIHJlcXVpcmVkIHRvIGp1c3RpZnkgaXQgdG8gdGhlIENvcHlyaWdodCBIb2xkZXIsIGJ1dCBvbmx5IHRvIHRoZSBjb21wdXRpbmcgY29tbXVuaXR5IGF0IGxhcmdlIGFzIGEgbWFya2V0IHRoYXQgbXVzdCBiZWFyIHRoZSBmZWUuKQorIkZyZWVseSBBdmFpbGFibGUiIG1lYW5zIHRoYXQgbm8gZmVlIGlzIGNoYXJnZWQgZm9yIHRoZSBpdGVtIGl0c2VsZiwgdGhvdWdoIHRoZXJlIG1heSBiZSBmZWVzIGludm9sdmVkIGluIGhhbmRsaW5nIHRoZSBpdGVtLiBJdCBhbHNvIG1lYW5zIHRoYXQgcmVjaXBpZW50cyBvZiB0aGUgaXRlbSBtYXkgcmVkaXN0cmlidXRlIGl0IHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgdGhleSByZWNlaXZlZCBpdC4KKzEuIFlvdSBtYXkgbWFrZSBhbmQgZ2l2ZSBhd2F5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgc291cmNlIGZvcm0gb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhpcyBQYWNrYWdlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGR1cGxpY2F0ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLgorCisyLiBZb3UgbWF5IGFwcGx5IGJ1ZyBmaXhlcywgcG9ydGFiaWxpdHkgZml4ZXMgYW5kIG90aGVyIG1vZGlmaWNhdGlvbnMgZGVyaXZlZCBmcm9tIHRoZSBQdWJsaWMgRG9tYWluIG9yIGZyb20gdGhlIENvcHlyaWdodCBIb2xkZXIuIEEgUGFja2FnZSBtb2RpZmllZCBpbiBzdWNoIGEgd2F5IHNoYWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKzMuIFlvdSBtYXkgb3RoZXJ3aXNlIG1vZGlmeSB5b3VyIGNvcHkgb2YgdGhpcyBQYWNrYWdlIGluIGFueSB3YXksIHByb3ZpZGVkIHRoYXQgeW91IGluc2VydCBhIHByb21pbmVudCBub3RpY2UgaW4gZWFjaCBjaGFuZ2VkIGZpbGUgc3RhdGluZyBob3cgYW5kIHdoZW4geW91IGNoYW5nZWQgdGhhdCBmaWxlLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6CisKK2EpIHBsYWNlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgUHVibGljIERvbWFpbiBvciBvdGhlcndpc2UgbWFrZSB0aGVtIEZyZWVseSBBdmFpbGFibGUsIHN1Y2ggYXMgYnkgcG9zdGluZyBzYWlkIG1vZGlmaWNhdGlvbnMgdG8gVXNlbmV0IG9yIGFuIGVxdWl2YWxlbnQgbWVkaXVtLCBvciBwbGFjaW5nIHRoZSBtb2RpZmljYXRpb25zIG9uIGEgbWFqb3IgYXJjaGl2ZSBzaXRlIHN1Y2ggYXMgZnRwLnV1Lm5ldCwgb3IgYnkgYWxsb3dpbmcgdGhlIENvcHlyaWdodCBIb2xkZXIgdG8gaW5jbHVkZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIFBhY2thZ2UuCisKK2IpIHVzZSB0aGUgbW9kaWZpZWQgUGFja2FnZSBvbmx5IHdpdGhpbiB5b3VyIGNvcnBvcmF0aW9uIG9yIG9yZ2FuaXphdGlvbi4KKworYykgcmVuYW1lIGFueSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgc28gdGhlIG5hbWVzIGRvIG5vdCBjb25mbGljdCB3aXRoIHN0YW5kYXJkIGV4ZWN1dGFibGVzLCB3aGljaCBtdXN0IGFsc28gYmUgcHJvdmlkZWQsIGFuZCBwcm92aWRlIGEgc2VwYXJhdGUgbWFudWFsIHBhZ2UgZm9yIGVhY2ggbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGUgdGhhdCBjbGVhcmx5IGRvY3VtZW50cyBob3cgaXQgZGlmZmVycyBmcm9tIHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCitkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlci4KKworNC4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtLCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworYSkgZGlzdHJpYnV0ZSBhIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJ5IGZpbGVzLCB0b2dldGhlciB3aXRoIGluc3RydWN0aW9ucyAoaW4gdGhlIG1hbnVhbCBwYWdlIG9yIGVxdWl2YWxlbnQpIG9uIHdoZXJlIHRvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworYikgYWNjb21wYW55IHRoZSBkaXN0cmlidXRpb24gd2l0aCB0aGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2Ugb2YgdGhlIFBhY2thZ2Ugd2l0aCB5b3VyIG1vZGlmaWNhdGlvbnMuCisKK2MpIGFjY29tcGFueSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBTdGFuZGFyZCBWZXJzaW9uIGV4ZWN1dGFibGVzLCBnaXZpbmcgdGhlIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBub24tc3RhbmRhcmQgbmFtZXMsIGFuZCBjbGVhcmx5IGRvY3VtZW50aW5nIHRoZSBkaWZmZXJlbmNlcyBpbiBtYW51YWwgcGFnZXMgKG9yIGVxdWl2YWxlbnQpLCB0b2dldGhlciB3aXRoIGluc3RydWN0aW9ucyBvbiB3aGVyZSB0byBnZXQgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKK2QpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCis1LiBZb3UgbWF5IGNoYXJnZSBhIHJlYXNvbmFibGUgY29weWluZyBmZWUgZm9yIGFueSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlLiBZb3UgbWF5IGNoYXJnZSBhbnkgZmVlIHlvdSBjaG9vc2UgZm9yIHN1cHBvcnQgb2YgdGhpcyBQYWNrYWdlLiBZb3UgbWF5IG5vdCBjaGFyZ2UgYSBmZWUgZm9yIHRoaXMgUGFja2FnZSBpdHNlbGYuIEhvd2V2ZXIsIHlvdSBtYXkgZGlzdHJpYnV0ZSB0aGlzIFBhY2thZ2UgaW4gYWdncmVnYXRlIHdpdGggb3RoZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwpIHByb2dyYW1zIGFzIHBhcnQgb2YgYSBsYXJnZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwpIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBwcm92aWRlZCB0aGF0IHlvdSBkbyBub3QgYWR2ZXJ0aXNlIHRoaXMgUGFja2FnZSBhcyBhIHByb2R1Y3Qgb2YgeW91ciBvd24uCisKKzYuIFRoZSBzY3JpcHRzIGFuZCBsaWJyYXJ5IGZpbGVzIHN1cHBsaWVkIGFzIGlucHV0IHRvIG9yIHByb2R1Y2VkIGFzIG91dHB1dCBmcm9tIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgZG8gbm90IGF1dG9tYXRpY2FsbHkgZmFsbCB1bmRlciB0aGUgY29weXJpZ2h0IG9mIHRoaXMgUGFja2FnZSwgYnV0IGJlbG9uZyB0byB3aG9tZXZlciBnZW5lcmF0ZWQgdGhlbSwgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkIHdpdGggdGhpcyBQYWNrYWdlLgorCis3LiBDIG9yIHBlcmwgc3Vicm91dGluZXMgc3VwcGxpZWQgYnkgeW91IGFuZCBsaW5rZWQgaW50byB0aGlzIFBhY2thZ2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGlzIFBhY2thZ2UuCisKKzguIFRoZSBuYW1lIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKzkuIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworVGhlIEVuZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FydGlzdGljLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXJ0aXN0aWMtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZjhkMTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FydGlzdGljLTIuMApAQCAtMCwwICsxLDIwMyBAQAorCisgICAgICAgICBUaGUgQXJ0aXN0aWMgTGljZW5zZSAyLjAKKworICAgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwgVGhlIFBlcmwgRm91bmRhdGlvbi4KKworICAgICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyAgICAgIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitQcmVhbWJsZQorCitUaGlzIGxpY2Vuc2UgZXN0YWJsaXNoZXMgdGhlIHRlcm1zIHVuZGVyIHdoaWNoIGEgZ2l2ZW4gZnJlZSBzb2Z0d2FyZQorUGFja2FnZSBtYXkgYmUgY29waWVkLCBtb2RpZmllZCwgZGlzdHJpYnV0ZWQsIGFuZC9vciByZWRpc3RyaWJ1dGVkLgorVGhlIGludGVudCBpcyB0aGF0IHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1haW50YWlucyBzb21lIGFydGlzdGljCitjb250cm9sIG92ZXIgdGhlIGRldmVsb3BtZW50IG9mIHRoYXQgUGFja2FnZSB3aGlsZSBzdGlsbCBrZWVwaW5nIHRoZQorUGFja2FnZSBhdmFpbGFibGUgYXMgb3BlbiBzb3VyY2UgYW5kIGZyZWUgc29mdHdhcmUuCisKK1lvdSBhcmUgYWx3YXlzIHBlcm1pdHRlZCB0byBtYWtlIGFycmFuZ2VtZW50cyB3aG9sbHkgb3V0c2lkZSBvZiB0aGlzCitsaWNlbnNlIGRpcmVjdGx5IHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIgb2YgYSBnaXZlbiBQYWNrYWdlLiAgSWYgdGhlCit0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgZG8gbm90IHBlcm1pdCB0aGUgZnVsbCB1c2UgdGhhdCB5b3UgcHJvcG9zZSB0bworbWFrZSBvZiB0aGUgUGFja2FnZSwgeW91IHNob3VsZCBjb250YWN0IHRoZSBDb3B5cmlnaHQgSG9sZGVyIGFuZCBzZWVrCithIGRpZmZlcmVudCBsaWNlbnNpbmcgYXJyYW5nZW1lbnQuIAorCitEZWZpbml0aW9ucworCisgICAgIkNvcHlyaWdodCBIb2xkZXIiIG1lYW5zIHRoZSBpbmRpdmlkdWFsKHMpIG9yIG9yZ2FuaXphdGlvbihzKQorICAgIG5hbWVkIGluIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgZW50aXJlIFBhY2thZ2UuCisKKyAgICAiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwYXJ0eSB0aGF0IGhhcyBjb250cmlidXRlZCBjb2RlIG9yIG90aGVyCisgICAgbWF0ZXJpYWwgdG8gdGhlIFBhY2thZ2UsIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlcmBzCisgICAgcHJvY2VkdXJlcy4KKworICAgICJZb3UiIGFuZCAieW91ciIgbWVhbnMgYW55IHBlcnNvbiB3aG8gd291bGQgbGlrZSB0byBjb3B5LAorICAgIGRpc3RyaWJ1dGUsIG9yIG1vZGlmeSB0aGUgUGFja2FnZS4KKworICAgICJQYWNrYWdlIiBtZWFucyB0aGUgY29sbGVjdGlvbiBvZiBmaWxlcyBkaXN0cmlidXRlZCBieSB0aGUKKyAgICBDb3B5cmlnaHQgSG9sZGVyLCBhbmQgZGVyaXZhdGl2ZXMgb2YgdGhhdCBjb2xsZWN0aW9uIGFuZC9vciBvZgorICAgIHRob3NlIGZpbGVzLiBBIGdpdmVuIFBhY2thZ2UgbWF5IGNvbnNpc3Qgb2YgZWl0aGVyIHRoZSBTdGFuZGFyZAorICAgIFZlcnNpb24sIG9yIGEgTW9kaWZpZWQgVmVyc2lvbi4KKworICAgICJEaXN0cmlidXRlIiBtZWFucyBwcm92aWRpbmcgYSBjb3B5IG9mIHRoZSBQYWNrYWdlIG9yIG1ha2luZyBpdAorICAgIGFjY2Vzc2libGUgdG8gYW55b25lIGVsc2UsIG9yIGluIHRoZSBjYXNlIG9mIGEgY29tcGFueSBvcgorICAgIG9yZ2FuaXphdGlvbiwgdG8gb3RoZXJzIG91dHNpZGUgb2YgeW91ciBjb21wYW55IG9yIG9yZ2FuaXphdGlvbi4KKworICAgICJEaXN0cmlidXRvciBGZWUiIG1lYW5zIGFueSBmZWUgdGhhdCB5b3UgY2hhcmdlIGZvciBEaXN0cmlidXRpbmcKKyAgICB0aGlzIFBhY2thZ2Ugb3IgcHJvdmlkaW5nIHN1cHBvcnQgZm9yIHRoaXMgUGFja2FnZSB0byBhbm90aGVyCisgICAgcGFydHkuICBJdCBkb2VzIG5vdCBtZWFuIGxpY2Vuc2luZyBmZWVzLgorCisgICAgIlN0YW5kYXJkIFZlcnNpb24iIHJlZmVycyB0byB0aGUgUGFja2FnZSBpZiBpdCBoYXMgbm90IGJlZW4KKyAgICBtb2RpZmllZCwgb3IgaGFzIGJlZW4gbW9kaWZpZWQgb25seSBpbiB3YXlzIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisgICAgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIuCisKKyAgICAiTW9kaWZpZWQgVmVyc2lvbiIgbWVhbnMgdGhlIFBhY2thZ2UsIGlmIGl0IGhhcyBiZWVuIGNoYW5nZWQsIGFuZAorICAgIHN1Y2ggY2hhbmdlcyB3ZXJlIG5vdCBleHBsaWNpdGx5IHJlcXVlc3RlZCBieSB0aGUgQ29weXJpZ2h0CisgICAgSG9sZGVyLiAKKworICAgICJPcmlnaW5hbCBMaWNlbnNlIiBtZWFucyB0aGlzIEFydGlzdGljIExpY2Vuc2UgYXMgRGlzdHJpYnV0ZWQgd2l0aAorICAgIHRoZSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoZSBQYWNrYWdlLCBpbiBpdHMgY3VycmVudCB2ZXJzaW9uIG9yIGFzCisgICAgaXQgbWF5IGJlIG1vZGlmaWVkIGJ5IFRoZSBQZXJsIEZvdW5kYXRpb24gaW4gdGhlIGZ1dHVyZS4KKworICAgICJTb3VyY2UiIGZvcm0gbWVhbnMgdGhlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uIHNvdXJjZSwgYW5kCisgICAgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdGhlIFBhY2thZ2UuCisKKyAgICAiQ29tcGlsZWQiIGZvcm0gbWVhbnMgdGhlIGNvbXBpbGVkIGJ5dGVjb2RlLCBvYmplY3QgY29kZSwgYmluYXJ5LAorICAgIG9yIGFueSBvdGhlciBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwgdHJhbnNmb3JtYXRpb24gb3IKKyAgICB0cmFuc2xhdGlvbiBvZiB0aGUgU291cmNlIGZvcm0uCisKKworUGVybWlzc2lvbiBmb3IgVXNlIGFuZCBNb2RpZmljYXRpb24gV2l0aG91dCBEaXN0cmlidXRpb24KKworKDEpICBZb3UgYXJlIHBlcm1pdHRlZCB0byB1c2UgdGhlIFN0YW5kYXJkIFZlcnNpb24gYW5kIGNyZWF0ZSBhbmQgdXNlCitNb2RpZmllZCBWZXJzaW9ucyBmb3IgYW55IHB1cnBvc2Ugd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdAoreW91IGRvIG5vdCBEaXN0cmlidXRlIHRoZSBNb2RpZmllZCBWZXJzaW9uLgorCisKK1Blcm1pc3Npb25zIGZvciBSZWRpc3RyaWJ1dGlvbiBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbgorCisoMikgIFlvdSBtYXkgRGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFNvdXJjZSBmb3JtIG9mIHRoZQorU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzIFBhY2thZ2UgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJlc3RyaWN0aW9uLAorZWl0aGVyIGdyYXRpcyBvciBmb3IgYSBEaXN0cmlidXRvciBGZWUsIHByb3ZpZGVkIHRoYXQgeW91IGR1cGxpY2F0ZQorYWxsIG9mIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgYXNzb2NpYXRlZCBkaXNjbGFpbWVycy4gIEF0Cit5b3VyIGRpc2NyZXRpb24sIHN1Y2ggdmVyYmF0aW0gY29waWVzIG1heSBvciBtYXkgbm90IGluY2x1ZGUgYQorQ29tcGlsZWQgZm9ybSBvZiB0aGUgUGFja2FnZS4KKworKDMpICBZb3UgbWF5IGFwcGx5IGFueSBidWcgZml4ZXMsIHBvcnRhYmlsaXR5IGNoYW5nZXMsIGFuZCBvdGhlcgorbW9kaWZpY2F0aW9ucyBtYWRlIGF2YWlsYWJsZSBmcm9tIHRoZSBDb3B5cmlnaHQgSG9sZGVyLiAgVGhlIHJlc3VsdGluZworUGFja2FnZSB3aWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQgdGhlIFN0YW5kYXJkIFZlcnNpb24sIGFuZCBhcyBzdWNoCit3aWxsIGJlIHN1YmplY3QgdG8gdGhlIE9yaWdpbmFsIExpY2Vuc2UuCisKKworRGlzdHJpYnV0aW9uIG9mIE1vZGlmaWVkIFZlcnNpb25zIG9mIHRoZSBQYWNrYWdlIGFzIFNvdXJjZSAKKworKDQpICBZb3UgbWF5IERpc3RyaWJ1dGUgeW91ciBNb2RpZmllZCBWZXJzaW9uIGFzIFNvdXJjZSAoZWl0aGVyIGdyYXRpcworb3IgZm9yIGEgRGlzdHJpYnV0b3IgRmVlLCBhbmQgd2l0aCBvciB3aXRob3V0IGEgQ29tcGlsZWQgZm9ybSBvZiB0aGUKK01vZGlmaWVkIFZlcnNpb24pIHByb3ZpZGVkIHRoYXQgeW91IGNsZWFybHkgZG9jdW1lbnQgaG93IGl0IGRpZmZlcnMKK2Zyb20gdGhlIFN0YW5kYXJkIFZlcnNpb24sIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBkb2N1bWVudGluZworYW55IG5vbi1zdGFuZGFyZCBmZWF0dXJlcywgZXhlY3V0YWJsZXMsIG9yIG1vZHVsZXMsIGFuZCBwcm92aWRlZCB0aGF0Cit5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAoYSkgIG1ha2UgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXZhaWxhYmxlIHRvIHRoZSBDb3B5cmlnaHQgSG9sZGVyCisgICAgb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24sIHVuZGVyIHRoZSBPcmlnaW5hbCBMaWNlbnNlLCBzbyB0aGF0IHRoZQorICAgIENvcHlyaWdodCBIb2xkZXIgbWF5IGluY2x1ZGUgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBTdGFuZGFyZAorICAgIFZlcnNpb24uCisKKyAgICAoYikgIGVuc3VyZSB0aGF0IGluc3RhbGxhdGlvbiBvZiB5b3VyIE1vZGlmaWVkIFZlcnNpb24gZG9lcyBub3QKKyAgICBwcmV2ZW50IHRoZSB1c2VyIGluc3RhbGxpbmcgb3IgcnVubmluZyB0aGUgU3RhbmRhcmQgVmVyc2lvbi4gSW4KKyAgICBhZGRpdGlvbiwgdGhlIE1vZGlmaWVkIFZlcnNpb24gbXVzdCBiZWFyIGEgbmFtZSB0aGF0IGlzIGRpZmZlcmVudAorICAgIGZyb20gdGhlIG5hbWUgb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKyAgICAoYykgIGFsbG93IGFueW9uZSB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIHRvCisgICAgbWFrZSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXZhaWxhYmxlIHRvIG90aGVycworICAgIHVuZGVyCisgIAorIChpKSAgdGhlIE9yaWdpbmFsIExpY2Vuc2Ugb3IKKworIChpaSkgIGEgbGljZW5zZSB0aGF0IHBlcm1pdHMgdGhlIGxpY2Vuc2VlIHRvIGZyZWVseSBjb3B5LAorIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZSBNb2RpZmllZCBWZXJzaW9uIHVzaW5nIHRoZSBzYW1lCisgbGljZW5zaW5nIHRlcm1zIHRoYXQgYXBwbHkgdG8gdGhlIGNvcHkgdGhhdCB0aGUgbGljZW5zZWUKKyByZWNlaXZlZCwgYW5kIHJlcXVpcmVzIHRoYXQgdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBNb2RpZmllZAorIFZlcnNpb24sIGFuZCBvZiBhbnkgd29ya3MgZGVyaXZlZCBmcm9tIGl0LCBiZSBtYWRlIGZyZWVseQorIGF2YWlsYWJsZSBpbiB0aGF0IGxpY2Vuc2UgZmVlcyBhcmUgcHJvaGliaXRlZCBidXQgRGlzdHJpYnV0b3IKKyBGZWVzIGFyZSBhbGxvd2VkLgorCisKK0Rpc3RyaWJ1dGlvbiBvZiBDb21waWxlZCBGb3JtcyBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiAKK29yIE1vZGlmaWVkIFZlcnNpb25zIHdpdGhvdXQgdGhlIFNvdXJjZQorCisoNSkgIFlvdSBtYXkgRGlzdHJpYnV0ZSBDb21waWxlZCBmb3JtcyBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiB3aXRob3V0Cit0aGUgU291cmNlLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIGNvbXBsZXRlIGluc3RydWN0aW9ucyBvbiBob3cgdG8KK2dldCB0aGUgU291cmNlIG9mIHRoZSBTdGFuZGFyZCBWZXJzaW9uLiAgU3VjaCBpbnN0cnVjdGlvbnMgbXVzdCBiZQordmFsaWQgYXQgdGhlIHRpbWUgb2YgeW91ciBkaXN0cmlidXRpb24uICBJZiB0aGVzZSBpbnN0cnVjdGlvbnMsIGF0IGFueQordGltZSB3aGlsZSB5b3UgYXJlIGNhcnJ5aW5nIG91dCBzdWNoIGRpc3RyaWJ1dGlvbiwgYmVjb21lIGludmFsaWQsIHlvdQorbXVzdCBwcm92aWRlIG5ldyBpbnN0cnVjdGlvbnMgb24gZGVtYW5kIG9yIGNlYXNlIGZ1cnRoZXIgZGlzdHJpYnV0aW9uLgorSWYgeW91IHByb3ZpZGUgdmFsaWQgaW5zdHJ1Y3Rpb25zIG9yIGNlYXNlIGRpc3RyaWJ1dGlvbiB3aXRoaW4gdGhpcnR5CitkYXlzIGFmdGVyIHlvdSBiZWNvbWUgYXdhcmUgdGhhdCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBpbnZhbGlkLCB0aGVuCit5b3UgZG8gbm90IGZvcmZlaXQgYW55IG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgbGljZW5zZS4KKworKDYpICBZb3UgbWF5IERpc3RyaWJ1dGUgYSBNb2RpZmllZCBWZXJzaW9uIGluIENvbXBpbGVkIGZvcm0gd2l0aG91dAordGhlIFNvdXJjZSwgcHJvdmlkZWQgdGhhdCB5b3UgY29tcGx5IHdpdGggU2VjdGlvbiA0IHdpdGggcmVzcGVjdCB0bwordGhlIFNvdXJjZSBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4KKworCitBZ2dyZWdhdGluZyBvciBMaW5raW5nIHRoZSBQYWNrYWdlIAorCisoNykgIFlvdSBtYXkgYWdncmVnYXRlIHRoZSBQYWNrYWdlIChlaXRoZXIgdGhlIFN0YW5kYXJkIFZlcnNpb24gb3IKK01vZGlmaWVkIFZlcnNpb24pIHdpdGggb3RoZXIgcGFja2FnZXMgYW5kIERpc3RyaWJ1dGUgdGhlIHJlc3VsdGluZworYWdncmVnYXRpb24gcHJvdmlkZWQgdGhhdCB5b3UgZG8gbm90IGNoYXJnZSBhIGxpY2Vuc2luZyBmZWUgZm9yIHRoZQorUGFja2FnZS4gIERpc3RyaWJ1dG9yIEZlZXMgYXJlIHBlcm1pdHRlZCwgYW5kIGxpY2Vuc2luZyBmZWVzIGZvciBvdGhlcgorY29tcG9uZW50cyBpbiB0aGUgYWdncmVnYXRpb24gYXJlIHBlcm1pdHRlZC4gVGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZQorYXBwbHkgdG8gdGhlIHVzZSBhbmQgRGlzdHJpYnV0aW9uIG9mIHRoZSBTdGFuZGFyZCBvciBNb2RpZmllZCBWZXJzaW9ucworYXMgaW5jbHVkZWQgaW4gdGhlIGFnZ3JlZ2F0aW9uLgorCisoOCkgWW91IGFyZSBwZXJtaXR0ZWQgdG8gbGluayBNb2RpZmllZCBhbmQgU3RhbmRhcmQgVmVyc2lvbnMgd2l0aAorb3RoZXIgd29ya3MsIHRvIGVtYmVkIHRoZSBQYWNrYWdlIGluIGEgbGFyZ2VyIHdvcmsgb2YgeW91ciBvd24sIG9yIHRvCitidWlsZCBzdGFuZC1hbG9uZSBiaW5hcnkgb3IgYnl0ZWNvZGUgdmVyc2lvbnMgb2YgYXBwbGljYXRpb25zIHRoYXQKK2luY2x1ZGUgdGhlIFBhY2thZ2UsIGFuZCBEaXN0cmlidXRlIHRoZSByZXN1bHQgd2l0aG91dCByZXN0cmljdGlvbiwKK3Byb3ZpZGVkIHRoZSByZXN1bHQgZG9lcyBub3QgZXhwb3NlIGEgZGlyZWN0IGludGVyZmFjZSB0byB0aGUgUGFja2FnZS4KKworCitJdGVtcyBUaGF0IGFyZSBOb3QgQ29uc2lkZXJlZCBQYXJ0IG9mIGEgTW9kaWZpZWQgVmVyc2lvbiAKKworKDkpIFdvcmtzIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgbW9kdWxlcyBhbmQgc2NyaXB0cykgdGhhdAorbWVyZWx5IGV4dGVuZCBvciBtYWtlIHVzZSBvZiB0aGUgUGFja2FnZSwgZG8gbm90LCBieSB0aGVtc2VsdmVzLCBjYXVzZQordGhlIFBhY2thZ2UgdG8gYmUgYSBNb2RpZmllZCBWZXJzaW9uLiAgSW4gYWRkaXRpb24sIHN1Y2ggd29ya3MgYXJlIG5vdAorY29uc2lkZXJlZCBwYXJ0cyBvZiB0aGUgUGFja2FnZSBpdHNlbGYsIGFuZCBhcmUgbm90IHN1YmplY3QgdG8gdGhlCit0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UuCisKKworR2VuZXJhbCBQcm92aXNpb25zCisKKygxMCkgIEFueSB1c2UsIG1vZGlmaWNhdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU3RhbmRhcmQgb3IKK01vZGlmaWVkIFZlcnNpb25zIGlzIGdvdmVybmVkIGJ5IHRoaXMgQXJ0aXN0aWMgTGljZW5zZS4gQnkgdXNpbmcsCittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQYWNrYWdlLCB5b3UgYWNjZXB0IHRoaXMgbGljZW5zZS4gRG8gbm90Cit1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGUgUGFja2FnZSwgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcworbGljZW5zZS4KKworKDExKSAgSWYgeW91ciBNb2RpZmllZCBWZXJzaW9uIGhhcyBiZWVuIGRlcml2ZWQgZnJvbSBhIE1vZGlmaWVkCitWZXJzaW9uIG1hZGUgYnkgc29tZW9uZSBvdGhlciB0aGFuIHlvdSwgeW91IGFyZSBuZXZlcnRoZWxlc3MgcmVxdWlyZWQKK3RvIGVuc3VyZSB0aGF0IHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBjb21wbGllcyB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKK3RoaXMgbGljZW5zZS4KKworKDEyKSAgVGhpcyBsaWNlbnNlIGRvZXMgbm90IGdyYW50IHlvdSB0aGUgcmlnaHQgdG8gdXNlIGFueSB0cmFkZW1hcmssCitzZXJ2aWNlIG1hcmssIHRyYWRlbmFtZSwgb3IgbG9nbyBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlci4KKworKDEzKSAgVGhpcyBsaWNlbnNlIGluY2x1ZGVzIHRoZSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsCitmcmVlLW9mLWNoYXJnZSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwKK3NlbGwsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBQYWNrYWdlIHdpdGggcmVzcGVjdCB0byBhbnkKK3BhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSB0aGUgQ29weXJpZ2h0IEhvbGRlciB0aGF0IGFyZSBuZWNlc3NhcmlseQoraW5mcmluZ2VkIGJ5IHRoZSBQYWNrYWdlLiBJZiB5b3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uCisoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltKSBhZ2FpbnN0IGFueSBwYXJ0eSBhbGxlZ2luZwordGhhdCB0aGUgUGFja2FnZSBjb25zdGl0dXRlcyBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudAoraW5mcmluZ2VtZW50LCB0aGVuIHRoaXMgQXJ0aXN0aWMgTGljZW5zZSB0byB5b3Ugc2hhbGwgdGVybWluYXRlIG9uIHRoZQorZGF0ZSB0aGF0IHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworKDE0KSAgRGlzY2xhaW1lciBvZiBXYXJyYW50eToKK1RIRSBQQUNLQUdFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIEFORCBDT05UUklCVVRPUlMgIkFTCitJU2AgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLiBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorTk9OLUlORlJJTkdFTUVOVCBBUkUgRElTQ0xBSU1FRCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBZT1VSIExPQ0FMCitMQVcuIFVOTEVTUyBSRVFVSVJFRCBCWSBMQVcsIE5PIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1IgV0lMTAorQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhFIFBBQ0tBR0UsIEVWRU4gSUYKK0FEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YTBhYTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRApAQCAtMCwwICsxLDI2IEBACitDb3B5cmlnaHQgKGMpIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtMC1DbGF1c2UgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC0wLUNsYXVzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjhiZGQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtMC1DbGF1c2UKQEAgLTAsMCArMSwxMiBAQAorQ29weXJpZ2h0IChDKSA8WUVBUj4gYnkgPE9XTkVSPgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCitXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTItQ2xhdXNlIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtMi1DbGF1c2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRlMGYzNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTItQ2xhdXNlCkBAIC0wLDAgKzEsMTMgQEAKKworVGhlIEZyZWVCU0QgQ29weXJpZ2h0CisKK0NvcHlyaWdodCAxOTkyLTIwMTAgVGhlIEZyZWVCU0QgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBGUkVFQlNEIFBST0pFQ1QgYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGUkVFQlNEIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiB0aGUgRnJlZUJTRCBQcm9qZWN0LgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC0zLUNsYXVzZSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTMtQ2xhdXNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMzg2NWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC0zLUNsYXVzZQpAQCAtMCwwICsxLDExIEBACisKK0NvcHlyaWdodCAoYykgPFlFQVI+LCA8T1dORVI+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK05laXRoZXIgdGhlIG5hbWUgb2YgdGhlIDxPUkdBTklaQVRJT04+IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC00LUNsYXVzZSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTQtQ2xhdXNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMTYyZGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC00LUNsYXVzZQpAQCAtMCwwICsxLDI5IEBACisKK0NvcHlyaWdodCAoYykgPHllYXI+LCA8Y29weXJpZ2h0IGhvbGRlcj4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIDxvcmdhbml6YXRpb24+LgorNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgPG9yZ2FuaXphdGlvbj4gbm9yIHRoZQorICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIDxDT1BZUklHSFQgSE9MREVSPiBgYEFTIElTYGAgQU5EIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECitPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhOGVhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNMLTEuMApAQCAtMCwwICsxLDI1IEBACisKK0Jvb3N0IFNvZnR3YXJlIExpY2Vuc2UgLSBWZXJzaW9uIDEuMCAtIEF1Z3VzdCAxN3RoLCAyMDAzCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbgorb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKK3RoaXMgbGljZW5zZSAodGhlICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAorZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUKK1NvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRpZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCitkbyBzbywgYWxsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKKworVGhlIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUgc3RhdGVtZW50LCBpbmNsdWRpbmcKK3RoZSBhYm92ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJlc3RyaWN0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCittdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbmQKK2FsbCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggY29waWVzIG9yIGRlcml2YXRpdmUKK3dvcmtzIGFyZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2YgbWFjaGluZS1leGVjdXRhYmxlIG9iamVjdCBjb2RlIGdlbmVyYXRlZCBieQorYSBzb3VyY2UgbGFuZ3VhZ2UgcHJvY2Vzc29yLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UCitTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQU5ZT05FIERJU1RSSUJVVElORyBUSEUgU09GVFdBUkUgQkUgTElBQkxFCitGT1IgQU5ZIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKK0FSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JpdHN0cmVhbVZlcmEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JpdHN0cmVhbVZlcmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmMDNhYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQml0c3RyZWFtVmVyYQpAQCAtMCwwICsxLDE2MCBAQAorQml0c3RyZWFtIFZlcmEgRm9udHMgQ29weXJpZ2h0CisKK1RoZSBmb250cyBoYXZlIGEgZ2VuZXJvdXMgY29weXJpZ2h0LCBhbGxvd2luZyBkZXJpdmF0aXZlIHdvcmtzIChhcworbG9uZyBhcyAiQml0c3RyZWFtIiBvciAiVmVyYSIgYXJlIG5vdCBpbiB0aGUgbmFtZXMpLCBhbmQgZnVsbAorcmVkaXN0cmlidXRpb24gKHNvIGxvbmcgYXMgdGhleSBhcmUgbm90ICpzb2xkKiBieSB0aGVtc2VsdmVzKS4gVGhleQorY2FuIGJlIGJlIGJ1bmRsZWQsIHJlZGlzdHJpYnV0ZWQgYW5kIHNvbGQgd2l0aCBhbnkgc29mdHdhcmUuCisKK1RoZSBmb250cyBhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQ6CisKK0NvcHlyaWdodAorPT09PT09PT09CisKK0NvcHlyaWdodCAoYykgMjAwMyBieSBCaXRzdHJlYW0sIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gQml0c3RyZWFtCitWZXJhIGlzIGEgdHJhZGVtYXJrIG9mIEJpdHN0cmVhbSwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKK2EgY29weSBvZiB0aGUgZm9udHMgYWNjb21wYW55aW5nIHRoaXMgbGljZW5zZSAoIkZvbnRzIikgYW5kIGFzc29jaWF0ZWQKK2RvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiRm9udCBTb2Z0d2FyZSIpLCB0byByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUKK3RoZSBGb250IFNvZnR3YXJlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorY29weSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgRm9udAorU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBGb250IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAordG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IGFuZCB0cmFkZW1hcmsgbm90aWNlcyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgRm9udCBTb2Z0d2FyZQordHlwZWZhY2VzLgorCitUaGUgRm9udCBTb2Z0d2FyZSBtYXkgYmUgbW9kaWZpZWQsIGFsdGVyZWQsIG9yIGFkZGVkIHRvLCBhbmQgaW4KK3BhcnRpY3VsYXIgdGhlIGRlc2lnbnMgb2YgZ2x5cGhzIG9yIGNoYXJhY3RlcnMgaW4gdGhlIEZvbnRzIG1heSBiZQorbW9kaWZpZWQgYW5kIGFkZGl0aW9uYWwgZ2x5cGhzIG9yIGNoYXJhY3RlcnMgbWF5IGJlIGFkZGVkIHRvIHRoZQorRm9udHMsIG9ubHkgaWYgdGhlIGZvbnRzIGFyZSByZW5hbWVkIHRvIG5hbWVzIG5vdCBjb250YWluaW5nIGVpdGhlcgordGhlIHdvcmRzICJCaXRzdHJlYW0iIG9yIHRoZSB3b3JkICJWZXJhIi4KKworVGhpcyBMaWNlbnNlIGJlY29tZXMgbnVsbCBhbmQgdm9pZCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgdG8gRm9udHMKK29yIEZvbnQgU29mdHdhcmUgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBhbmQgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlCisiQml0c3RyZWFtIFZlcmEiIG5hbWVzLgorCitUaGUgRm9udCBTb2Z0d2FyZSBtYXkgYmUgc29sZCBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHNvZnR3YXJlIHBhY2thZ2UgYnV0CitubyBjb3B5IG9mIG9uZSBvciBtb3JlIG9mIHRoZSBGb250IFNvZnR3YXJlIHR5cGVmYWNlcyBtYXkgYmUgc29sZCBieQoraXRzZWxmLgorCitUSEUgRk9OVCBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQKK09GIENPUFlSSUdIVCwgUEFURU5ULCBUUkFERU1BUkssIE9SIE9USEVSIFJJR0hULiBJTiBOTyBFVkVOVCBTSEFMTAorQklUU1RSRUFNIE9SIFRIRSBHTk9NRSBGT1VOREFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCitPVEhFUiBMSUFCSUxJVFksIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCitPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgRk9OVAorU09GVFdBUkUgT1IgRlJPTSBPVEhFUiBERUFMSU5HUyBJTiBUSEUgRk9OVCBTT0ZUV0FSRS4KKworRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWVzIG9mIEdub21lLCB0aGUgR25vbWUKK0ZvdW5kYXRpb24sIGFuZCBCaXRzdHJlYW0gSW5jLiwgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKK290aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBGb250CitTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIHRoZSBHbm9tZSBGb3VuZGF0aW9uCitvciBCaXRzdHJlYW0gSW5jLiwgcmVzcGVjdGl2ZWx5LiBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiwgY29udGFjdDoKK2ZvbnRzIGF0IGdub21lIGRvdCBvcmcuCisKK0NvcHlyaWdodCBGQVEKKz09PT09PT09PT09PT0KKworMS4gSSBkb24ndCB1bmRlcnN0YW5kIHRoZSByZXNhbGUgcmVzdHJpY3Rpb24uLi4gV2hhdCBnaXZlcz8KKworQml0c3RyZWFtIGlzIGdpdmluZyBhd2F5IHRoZXNlIGZvbnRzLCBidXQgd2lzaGVzIHRvIGVuc3VyZSBpdHMKK2NvbXBldGl0b3JzIGNhbid0IGp1c3QgZHJvcCB0aGUgZm9udHMgYXMgaXMgaW50byBhIGZvbnQgc2FsZSBzeXN0ZW0KK2FuZCBzZWxsIHRoZW0gYXMgaXMuIEl0IHNlZW1zIGZhaXIgdGhhdCBpZiBCaXRzdHJlYW0gY2FuJ3QgbWFrZSBtb25leQorZnJvbSB0aGUgQml0c3RyZWFtIFZlcmEgZm9udHMsIHRoZWlyIGNvbXBldGl0b3JzIHNob3VsZCBub3QgYmUgYWJsZSB0bworZG8gc28gZWl0aGVyLiBZb3UgY2FuIHNlbGwgdGhlIGZvbnRzIGFzIHBhcnQgb2YgYW55IHNvZnR3YXJlIHBhY2thZ2UsCitob3dldmVyLgorCisyLiBJIHdhbnQgdG8gcGFja2FnZSB0aGVzZSBmb250cyBzZXBhcmF0ZWx5IGZvciBkaXN0cmlidXRpb24gYW5kCitzYWxlIGFzIHBhcnQgb2YgYSBsYXJnZXIgc29mdHdhcmUgcGFja2FnZSBvciBzeXN0ZW0uIENhbiBJIGRvIHNvPworCitZZXMuIEEgUlBNIG9yIERlYmlhbiBwYWNrYWdlIGlzIGEgImxhcmdlciBzb2Z0d2FyZSBwYWNrYWdlIiB0byBiZWdpbgord2l0aCwgYW5kIHlvdSBhcmVuJ3Qgc2VsbGluZyB0aGVtIGluZGVwZW5kZW50bHkgYnkgdGhlbXNlbHZlcy4KK1NlZSAxLiBhYm92ZS4KKworMy4gQXJlIGRlcml2YXRpdmUgd29ya3MgYWxsb3dlZD8KK1llcyEKKworNC4gQ2FuIEkgY2hhbmdlIG9yIGFkZCB0byB0aGUgZm9udChzKT8KK1llcywgYnV0IHlvdSBtdXN0IGNoYW5nZSB0aGUgbmFtZShzKSBvZiB0aGUgZm9udChzKS4KKworNS4gVW5kZXIgd2hhdCB0ZXJtcyBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBhbGxvd2VkPworCitZb3UgbXVzdCBjaGFuZ2UgdGhlIG5hbWUocykgb2YgdGhlIGZvbnRzLiBUaGlzIGlzIHRvIGVuc3VyZSB0aGUKK3F1YWxpdHkgb2YgdGhlIGZvbnRzLCBib3RoIHRvIHByb3RlY3QgQml0c3RyZWFtIGFuZCBHbm9tZS4gV2Ugd2FudCB0bworZW5zdXJlIHRoYXQgaWYgYW4gYXBwbGljYXRpb24gaGFzIG9wZW5lZCBhIGZvbnQgc3BlY2lmaWNhbGx5IG9mIHRoZXNlCituYW1lcywgaXQgZ2V0cyB3aGF0IGl0IGV4cGVjdHMgKHRob3VnaCBvZiBjb3Vyc2UsIHVzaW5nIGZvbnRjb25maWcsCitzdWJzdGl0dXRpb25zIGNvdWxkIHN0aWxsIGNvdWxkIGhhdmUgb2NjdXJyZWQgZHVyaW5nIGZvbnQKK29wZW5pbmcpLiBZb3UgbXVzdCBpbmNsdWRlIHRoZSBCaXRzdHJlYW0gY29weXJpZ2h0LiBBZGRpdGlvbmFsCitjb3B5cmlnaHRzIGNhbiBiZSBhZGRlZCwgYXMgcGVyIGNvcHlyaWdodCBsYXcuIEhhcHB5IEZvbnQgSGFja2luZyEKKworNi4gSWYgSSBoYXZlIGltcHJvdmVtZW50cyBmb3IgQml0c3RyZWFtIFZlcmEsIGlzIGl0IHBvc3NpYmxlIHRoZXkgbWlnaHQgZ2V0CithZG9wdGVkIGluIGZ1dHVyZSB2ZXJzaW9ucz8KKworWWVzLiBUaGUgY29udHJhY3QgYmV0d2VlbiB0aGUgR25vbWUgRm91bmRhdGlvbiBhbmQgQml0c3RyZWFtIGhhcworcHJvdmlzaW9ucyBmb3Igd29ya2luZyB3aXRoIEJpdHN0cmVhbSB0byBlbnN1cmUgcXVhbGl0eSBhZGRpdGlvbnMgdG8KK3RoZSBCaXRzdHJlYW0gVmVyYSBmb250IGZhbWlseS4gUGxlYXNlIGNvbnRhY3QgdXMgaWYgeW91IGhhdmUgc3VjaAorYWRkaXRpb25zLiBOb3RlLCB0aGF0IGluIGdlbmVyYWwsIHdlIHdpbGwgd2FudCBzdWNoIGFkZGl0aW9ucyBmb3IgdGhlCitlbnRpcmUgZmFtaWx5LCBub3QganVzdCBhIHNpbmdsZSBmb250LCBhbmQgdGhhdCB5b3UnbGwgaGF2ZSB0byBrZWVwCitib3RoIEdub21lIGFuZCBKaW0gTHlsZXMsIFZlcmEncyBkZXNpZ25lciwgaGFwcHkhIFRvIG1ha2Ugc2Vuc2UgdG8gYWRkCitnbHlwaHMgdG8gdGhlIGZvbnQsIHRoZXkgbXVzdCBiZSBzdHlsaXN0aWNhbGx5IGluIGtlZXBpbmcgd2l0aCBWZXJhJ3MKK2Rlc2lnbi4gVmVyYSBjYW5ub3QgYmVjb21lIGEgInJhbnNvbSBub3RlIiBmb250LiBKaW0gTHlsZXMgd2lsbCBiZQorcHJvdmlkaW5nIGEgZG9jdW1lbnQgZGVzY3JpYmluZyB0aGUgZGVzaWduIGVsZW1lbnRzIHVzZWQgaW4gVmVyYSwgYXMgYQorZ3VpZGUgYW5kIGFpZCBmb3IgcGVvcGxlIGludGVyZXN0ZWQgaW4gY29udHJpYnV0aW5nIHRvIFZlcmEuCisKKzcuIEkgd2FudCB0byBzZWxsIGEgc29mdHdhcmUgcGFja2FnZSB0aGF0IHVzZXMgdGhlc2UgZm9udHM6IENhbiBJIGRvIHNvPworCitTdXJlLiBCdW5kbGUgdGhlIGZvbnRzIHdpdGggeW91ciBzb2Z0d2FyZSBhbmQgc2VsbCB5b3VyIHNvZnR3YXJlCit3aXRoIHRoZSBmb250cy4gVGhhdCBpcyB0aGUgaW50ZW50IG9mIHRoZSBjb3B5cmlnaHQuCisKKzguIElmIGFwcGxpY2F0aW9ucyBoYXZlIGJ1aWx0IHRoZSBuYW1lcyAiQml0c3RyZWFtIFZlcmEiIGludG8gdGhlbSwKK2NhbiBJIG92ZXJyaWRlIHRoaXMgc29tZWhvdyB0byB1c2UgZm9udHMgb2YgbXkgY2hvb3Npbmc/CisKK1RoaXMgZGVwZW5kcyBvbiBleGFjdCBkZXRhaWxzIG9mIHRoZSBzb2Z0d2FyZS4gTW9zdCBvcGVuIHNvdXJjZQorc3lzdGVtcyBhbmQgc29mdHdhcmUgKGUuZy4sIEdub21lLCBLREUsIGV0Yy4pIGFyZSBub3cgY29udmVydGluZyB0bwordXNlIGZvbnRjb25maWcgKHNlZSB3d3cuZm9udGNvbmZpZy5vcmcpIHRvIGhhbmRsZSBmb250IGNvbmZpZ3VyYXRpb24sCitzZWxlY3Rpb24gYW5kIHN1YnN0aXR1dGlvbjsgaXQgaGFzIHByb3Zpc2lvbnMgZm9yIG92ZXJyaWRpbmcgZm9udAorbmFtZXMgYW5kIHN1YnNpdHV0aW5nIGFsdGVybmF0aXZlcy4gQW4gZXhhbXBsZSBpcyBwcm92aWRlZCBieSB0aGUKK3N1cHBsaWVkIGxvY2FsLmNvbmYgZmlsZSwgd2hpY2ggY2hvb3NlcyB0aGUgZmFtaWx5IEJpdHN0cmVhbSBWZXJhIGZvcgorInNhbnMiLCAic2VyaWYiIGFuZCAibW9ub3NwYWNlIi4gT3RoZXIgc29mdHdhcmUgKGUuZy4sIHRoZSBYRnJlZTg2Citjb3JlIHNlcnZlcikgaGFzIG90aGVyIG1lY2hhbmlzbXMgZm9yIGZvbnQgc3Vic3RpdHV0aW9uLgorCitTaG93IGRldGFpbHMgSGlkZSBkZXRhaWxzCisKK0NoYW5nZSBsb2cKK3IyMDExIGJ5IG1hcmsubmlja2VsIG9uIE1hciAzLCAyMDExICAgRGlmZgorCitNYWpvcml0eSBvZiBNdWx0aS1MaW5lIHRleHQgZWRpdGluZyBpcyBpbgordGhlIGNvbW1pdC4gIEFsc28gYWRkZWQgc29tZSBzcGVjaWZpYyBmcmVlCitmb250cyB0byByZXBsYWNlIHRoZSBleGlzdGluZyBzZXQgYXMgd2UKK25lZWQgc29tZSBhZGRpdGlvbmFsIGZvbnQgbWV0cmljcyB0aGF0IHdlCit1c2UgaW4gdGhlIFRleHQgRWRpdGluZyByZW5kZXJpbmcKK3BpcGVsaW5lLgorCitZb3UgY2FuIHNlZSB0aGUgZm9udCBsaWNlbnNlcyBpbiB0aGUKK2VkaXRvci9mb250cyBmb2xkZXIgdW5kZXIgZWFjaCBmb250LgorCitTdGlsbCBoYXZlIHNvbWUgY2xlYW51cCB0byBkbyB0byBhZGQgdGhlCit0ZXh0IGZvcm1hdHRpbmcgKGxlZnQscmlnaHQsY2VudGVyKSBhcworLi4uCisKK0dvIHRvOiAJCitIaWRlIGNvbW1lbnRzCitTaG93IGNvbW1lbnRzCisKK09sZGVyIHJldmlzaW9ucworQWxsIHJldmlzaW9ucyBvZiB0aGlzIGZpbGUKKworRmlsZSBpbmZvCitTaXplOiA1OTUzIGJ5dGVzLCAxMjMgbGluZXMKK1ZpZXcgcmF3IGZpbGUKKworRmlsZSBwcm9wZXJ0aWVzCisKK3N2bjpleGVjdXRhYmxlCisgICAgKgorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0FUT1NMLTEuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0FUT1NMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2U4YTU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQVRPU0wtMS4xCkBAIC0wLDAgKzEsMTE2IEBACisKK0NvbXB1dGVyIEFzc29jaWF0ZXMgVHJ1c3RlZCBPcGVuIFNvdXJjZSBMaWNlbnNlCitWZXJzaW9uIDEuMQorCisKKyh0ZXh0KQorCitQTEVBU0UgUkVBRCBUSElTIERPQ1VNRU5UIENBUkVGVUxMWSBBTkQgSU4gSVRTIEVOVElSRVRZLiBUSEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ09NUFVURVIgQVNTT0NJQVRFUyBUUlVTVEVEIE9QRU4gU09VUkNFIExJQ0VOU0UgKCJMSUNFTlNFIikuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBUSEUgUkVDSVBJRU5UYFMgQUNDRVBUQU5DRSBPRiBUSElTIExJQ0VOU0UuCisKK0xpY2Vuc2UgQmFja2dyb3VuZAorQ29tcHV0ZXIgQXNzb2NpYXRlcyBJbnRlcm5hdGlvbmFsLCBJbmMuIChDQSkgYmVsaWV2ZXMgaW4gb3BlbiBzb3VyY2UuIFdlIGJlbGlldmUgdGhhdCB0aGUgb3BlbiBzb3VyY2UgZGV2ZWxvcG1lbnQgYXBwcm9hY2ggY2FuIHRha2UgYXBwcm9wcmlhdGUgc29mdHdhcmUgcHJvZ3JhbXMgdG8gdW5wcmVjZWRlbnRlZCBsZXZlbHMgb2YgcXVhbGl0eSwgZ3Jvd3RoLCBhbmQgaW5ub3ZhdGlvbi4gVG8gZGVtb25zdHJhdGUgb3VyIGNvbnRpbnVpbmcgY29tbWl0bWVudCB0byBvcGVuIHNvdXJjZSwgd2UgYXJlIHJlbGVhc2luZyB0aGUgUHJvZ3JhbSAoYXMgZGVmaW5lZCBiZWxvdykgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitUaGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcGVybWl0IGNvbnRyaWJ1dG9ycyBhbmQgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSB0byB1c2UgdGhlIFByb2dyYW0sIGluY2x1ZGluZyBpdHMgc291cmNlIGNvZGUsIGZyZWVseSBhbmQgd2l0aG91dCBtYW55IG9mIHRoZSBjb25jZXJucyBvZiBzb21lIG90aGVyIG9wZW4gc291cmNlIGxpY2Vuc2VzLiBBbHRob3VnaCB3ZSBleHBlY3QgdGhlIHVuZGVybHlpbmcgUHJvZ3JhbSwgYW5kIENvbnRyaWJ1dGlvbnMgKGFzIGRlZmluZWQgYmVsb3cpIG1hZGUgdG8gc3VjaCBQcm9ncmFtLCB0byByZW1haW4gb3BlbiwgdGhpcyBMaWNlbnNlIGlzIGRlc2lnbmVkIHRvIHBlcm1pdCB5b3UgdG8gbWFpbnRhaW4geW91ciBvd24gc29mdHdhcmUgcHJvZ3JhbXMgZnJlZSBvZiB0aGlzIExpY2Vuc2UgdW5sZXNzIHlvdSBjaG9vc2UgdG8gZG8gc28uIFRodXMsIG9ubHkgeW91ciBDb250cmlidXRpb25zIHRvIHRoZSBQcm9ncmFtIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworVGhlIHByb3Zpc2lvbnMgdGhhdCBmb2xsb3cgc2V0IGZvcnRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB1bmRlciB3aGljaCB5b3UgbWF5IHVzZSB0aGUgUHJvZ3JhbS4KKworMS4gREVGSU5JVElPTlMKKworMS4xIENvbnRyaWJ1dGlvbiBtZWFucyAoYSkgaW4gdGhlIGNhc2Ugb2YgQ0EsIHRoZSBPcmlnaW5hbCBQcm9ncmFtOyBhbmQgKGIpIGluIHRoZSBjYXNlIG9mIGVhY2ggQ29udHJpYnV0b3IgKGluY2x1ZGluZyBDQSksIGNoYW5nZXMgYW5kIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSwgd2hlcmUgc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZCBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IgdG8gdW5hZmZpbGlhdGVkIHRoaXJkIHBhcnRpZXMuIEEgQ29udHJpYnV0aW9uIG9yaWdpbmF0ZXMgZnJvbSBhIENvbnRyaWJ1dG9yIGlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uIHN1Y2ggQ29udHJpYnV0b3JzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gd2hpY2g6ICh4KSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kICh5KSBhcmUgbm90IGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFByb2dyYW0uCisKKzEuMiBDb250cmlidXRvciBtZWFucyBDQSBhbmQgYW55IG90aGVyIHBlcnNvbiBvciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS4KKworMS4zIENvbnRyaWJ1dG9yIFZlcnNpb24gbWVhbnMgYXMgdG8gYSBDb250cmlidXRvciwgdGhhdCB2ZXJzaW9uIG9mIHRoZSBQcm9ncmFtIHRoYXQgaW5jbHVkZXMgdGhlIENvbnRyaWJ1dG9ycyBDb250cmlidXRpb24gYnV0IG5vdCBhbnkgQ29udHJpYnV0aW9ucyBtYWRlIHRvIHRoZSBQcm9ncmFtIHRoZXJlYWZ0ZXIuCisKKzEuNCBMYXJnZXIgV29yayBtZWFucyBhIHdvcmsgdGhhdCBjb21iaW5lcyB0aGUgUHJvZ3JhbSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS41IExpY2Vuc2VkIFBhdGVudHMgbWVhbiBwYXRlbnRzIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB0aGF0IGFyZSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLgorCisxLjYgT3JpZ2luYWwgUHJvZ3JhbSBtZWFucyB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgc29mdHdhcmUgdG8gd2hpY2ggdGhpcyBMaWNlbnNlIGlzIGF0dGFjaGVkIGFuZCBhcyByZWxlYXNlZCBieSBDQSwgaW5jbHVkaW5nIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiwgaWYgYW55LgorCisxLjcgUHJvZ3JhbSBtZWFucyB0aGUgT3JpZ2luYWwgUHJvZ3JhbSBhbmQgQ29udHJpYnV0aW9ucy4KKworMS44IFJlY2lwaWVudCBtZWFucyBhbnlvbmUgd2hvIG1vZGlmaWVzLCBjb3BpZXMsIHVzZXMgb3IgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uCisKKzIuIEdSQU5UIE9GIFJJR0hUUworCisyLjEgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGFuIGlycmV2b2NhYmxlLCBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoZSBsaWNlbnNlIHByb3ZpZGVkIGluIHRoaXMgU2VjdGlvbiAyLjEgc2hhbGwgbm90IGluY2x1ZGUgYSBsaWNlbnNlIHRvIGFueSBMaWNlbnNlZCBQYXRlbnRzIG9mIGEgQ29udHJpYnV0b3IuCisKKzIuMiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYW4gaXJyZXZvY2FibGUsIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdG8gdGhlIExpY2Vuc2VkIFBhdGVudHMgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsIGFuZCBpbXBvcnQgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGUgbGljZW5zZSBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjIgc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkIGJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyB0aGUgTGljZW5zZWQgUGF0ZW50cyB0byBiZSBpbmZyaW5nZWQgYnkgc3VjaCBjb21iaW5hdGlvbi4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIG5vIGxpY2Vuc2UgaXMgZ3JhbnRlZCB1bmRlciB0aGlzIFNlY3Rpb24gMi4yOiAoYSkgZm9yIGFueSBjb2RlIG9yIHdvcmtzIHRoYXQgZG8gbm90IGluY2x1ZGUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24sIGFzIGl0IGV4aXN0cyBhbmQgaXMgdXNlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGhlcmVvZjsgKGIpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogKGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IG9yIChpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIENvbnRyaWJ1dGlvbnMgbWFkZSBieSBlYWNoIHN1Y2ggQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIChjKSB3aXRoIHJlc3BlY3QgdG8gTGljZW5zZWQgUGF0ZW50cyBpbmZyaW5nZWQgYnkgdGhlIFByb2dyYW0gaW4gdGhlIGFic2VuY2Ugb2YgQ29udHJpYnV0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCisKKzIuMyBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgZXhjZXB0IGFzIHByb3ZpZGVkIGluIFNlY3Rpb24gMi40LCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIHBlcnNvbiBvciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgcGVyc29uIG9yIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LgorCisyLjQgRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0IGl0IGhhcyBhbGwgcmlnaHQsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiB0aGUgY29weXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9ucywgYW5kIGhhcyB0aGUgcmlnaHQgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlcyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLgorCiszLiBESVNUUklCVVRJT04gUkVRVUlSRU1FTlRTCisKKzMuMSBJZiB0aGUgUHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiBvYmplY3QgY29kZSBmb3JtLCB0aGVuIGEgcHJvbWluZW50IG5vdGljZSBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIGFueSByZWxhdGVkIGRvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBDb250cmlidXRvciB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyBhbmQgd2hlcmUgdG8gb2J0YWluIHRoZSBzb3VyY2UgY29kZS4gQSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0OgorCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2U7IGFuZAoraXRzIGxpY2Vuc2UgYWdyZWVtZW50OgorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlIGFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdzsKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzLCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3Oworc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggYXJlIGluY29uc2lzdGVudCB3aXRoIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yIGF0IHRoZSBjb3N0IG9mIGRpc3RyaWJ1dGlvbiwgYW5kIGluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lci4KKzMuMiBXaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZSBjb2RlIGZvcm06CisKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbnNlOyBhbmQKK2EgY29weSBvZiB0aGlzIExpY2Vuc2UgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4KKzMuMyBUaGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkgYW55IENvbnRyaWJ1dG9yLiBIb3dldmVyLCBDb250cmlidXRvcnMgbWF5IG9ubHkgY2hhcmdlIFJlY2lwaWVudHMgYSBvbmUtdGltZSwgdXBmcm9udCBmZWUgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uIENvbnRyaWJ1dG9ycyBtYXkgbm90IGNoYXJnZSBSZWNpcGllbnRzIGFueSByZWN1cnJpbmcgY2hhcmdlLCBsaWNlbnNlIGZlZSwgb3IgYW55IG9uZ29pbmcgcm95YWx0eSBmb3IgdGhlIFJlY2lwaWVudHMgZXhlcmNpc2Ugb2YgaXRzIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgdG8gdGhlIFByb2dyYW0uIENvbnRyaWJ1dG9ycyBzaGFsbCBtYWtlIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gdGhleSBkaXN0cmlidXRlIGF2YWlsYWJsZSBhdCBhIGNvc3QsIGlmIGFueSwgZXF1YWwgdG8gdGhlIGNvc3QgdG8gdGhlIENvbnRyaWJ1dG9yIHRvIHBoeXNpY2FsbHkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgd29yay4gSXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBMaWNlbnNlIHRvIHByb2hpYml0IGEgQ29udHJpYnV0b3IgZnJvbSBjaGFyZ2luZyBmZWVzIGZvciBhbnkgc2VydmljZSBvciBtYWludGVuYW5jZSB0aGF0IGEgQ29udHJpYnV0b3IgbWF5IGNoYXJnZSB0byBhIFJlY2lwaWVudCwgc28gbG9uZyBhcyBzdWNoIGZlZXMgYXJlIG5vdCBhbiBhdHRlbXB0IHRvIGNpcmN1bXZlbnQgdGhlIGZvcmVnb2luZyByZXN0cmljdGlvbnMgb24gY2hhcmdpbmcgcm95YWx0aWVzIG9yIG90aGVyIHJlY3VycmluZyBmZWVzIGZvciB0aGUgUHJvZ3JhbSBpdHNlbGYuCisKKzMuNCBBIENvbnRyaWJ1dG9yIG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIHRoZSBDb250cmlidXRvciBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBQcm9ncmFtLiBBbnkgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBpbmNsdWRpbmcgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrLCBtYXkgc3ViamVjdCBpdHNlbGYsIGJ1dCBub3QgYW55IG90aGVyIENvbnRyaWJ1dG9yLCB0byBhZGRpdGlvbmFsIGNvbnRyYWN0dWFsIGNvbW1pdG1lbnRzLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgcGVyZm9ybWFuY2Ugd2FycmFudGllcyBhbmQgbm9uLWluZnJpbmdlbWVudCByZXByZXNlbnRhdGlvbnMgb24gc3VjaENvbnRyaWJ1dG9ycyBiZWhhbGYuIE5vIENvbnRyaWJ1dG9yIG1heSBjcmVhdGUgYW55IGFkZGl0aW9uYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoQ29tbWVyY2lhbCBDb250cmlidXRvcikgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlciBDb250cmlidXRvciAoSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IpIHdobyBtYWRlIENvbnRyaWJ1dGlvbnMgdG8gdGhlIFByb2dyYW0gZGlzdHJpYnV0ZWQgYnkgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cyAoY29sbGVjdGl2ZWx5IExvc3NlcykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvIHRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucywgaW5jbHVkaW5nIGFueSBhZGRpdGlvbmFsIGNvbnRyYWN0dWFsIGNvbW1pdG1lbnRzLCBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzIHJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LgorCiszLjUgSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5cyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgKGEpIGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgUHJvZ3JhbSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb24gdGl0bGVkIC4uL0lQX0lTU1VFUywgYW5kIChiKSBub3RpZnkgQ0EgaW4gd3JpdGluZyBhdCBDb21wdXRlciBBc3NvY2lhdGVzIEludGVybmF0aW9uYWwsIEluYy4sIE9uZSBDb21wdXRlciBBc3NvY2lhdGVzIFBsYXphLCBJc2xhbmRpYSwgTmV3IFlvcmsgMTE3NDksIEF0dG46IE9wZW4gU291cmNlIEdyb3VwIG9yIGJ5IGVtYWlsIGF0IG9wZW5zb3VyY2VAY2EuY29tLCBib3RoIGRlc2NyaWJpbmcgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgUmVjaXBpZW50IGFuZCBDQSB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0IHdpdGggcmVnYXJkIHRvIHN1Y2ggbWF0dGVyLiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBDb250cmlidXRpb24gaXMgbWFkZSBhdmFpbGFibGUsIENvbnRyaWJ1dG9yIHNoYWxsIGFsc28gcHJvbXB0bHkgbW9kaWZ5IHRoZSBJUF9JU1NVRVMgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBQcm9ncmFtIHRoYXQgc3VjaCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorCiszLjYgUmVjaXBpZW50IHNoYWxsIG5vdCByZW1vdmUsIG9ic2N1cmUsIG9yIG1vZGlmeSBhbnkgQ0Egb3Igb3RoZXIgQ29udHJpYnV0b3IgY29weXJpZ2h0IG9yIHBhdGVudCBwcm9wcmlldGFyeSBub3RpY2VzIGFwcGVhcmluZyBpbiB0aGUgUHJvZ3JhbSwgd2hldGhlciBpbiB0aGUgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlIG9yIGluIGFueSBkb2N1bWVudGF0aW9uLiBJbiBhZGRpdGlvbiB0byB0aGUgb2JsaWdhdGlvbnMgc2V0IGZvcnRoIGluIFNlY3Rpb24gNCwgZWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uCisKKzQuIENPTlRSSUJVVElPTiBSRVNUUklDVElPTlMKKworNC4xIEVhY2ggQ29udHJpYnV0b3IgbXVzdCBjYXVzZSB0aGUgUHJvZ3JhbSB0byB3aGljaCB0aGUgQ29udHJpYnV0b3IgcHJvdmlkZXMgYSBDb250cmlidXRpb24gdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgdGhlIENvbnRyaWJ1dG9yIG1hZGUgdG8gY3JlYXRlIGl0cyB2ZXJzaW9uIG9mIHRoZSBQcm9ncmFtIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBFYWNoIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBDb250cmlidXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSB0aGUgUHJvZ3JhbSBkaXN0cmlidXRlZCBieSBhIHByaW9yIENvbnRyaWJ1dG9yLCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIHByaW9yIENvbnRyaWJ1dG9yIGZyb20gd2hpY2ggc3VjaCBDb250cmlidXRpb24gd2FzIGRlcml2ZWQsIGluIChhKSB0aGUgUHJvZ3JhbSBzb3VyY2UgY29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIGV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggdGhlIENvbnRyaWJ1dG9yIGRlc2NyaWJlcyB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgUHJvZ3JhbS4KKworNS4gTk8gV0FSUkFOVFkKKworNS4xIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgTElDRU5TRSwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgQVMgSVMgQU5EIElOIElUUyBQUkVTRU5UIFNUQVRFIEFORCBDT05ESVRJT04uIE5PIFdBUlJBTlRZLCBSRVBSRVNFTlRBVElPTiwgQ09ORElUSU9OLCBVTkRFUlRBS0lORyBPUiBURVJNLCBFWFBSRVNTIE9SIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIEFTIFRPIFRIRSBDT05ESVRJT04sIFFVQUxJVFksIERVUkFCSUxJVFksIFBFUkZPUk1BTkNFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFVTRSBPRiBUSEUgUFJPR1JBTSBJUyBHSVZFTiBPUiBBU1NVTUVEIEJZIEFOWSBDT05UUklCVVRPUiBBTkQgQUxMIFNVQ0ggV0FSUkFOVElFUywgUkVQUkVTRU5UQVRJT05TLCBDT05ESVRJT05TLCBVTkRFUlRBS0lOR1MgQU5EIFRFUk1TIEFSRSBIRVJFQlkgRVhDTFVERUQgVE8gVEhFIEZVTExFU1QgRVhURU5UIFBFUk1JVFRFRCBCWSBMQVcuCisKKzUuMiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis1LjMgRWFjaCBSZWNpcGllbnQgYWNrbm93bGVkZ2VzIHRoYXQgdGhlIFByb2dyYW0gaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gdGhlIG9wZXJhdGlvbiBvZiBudWNsZWFyIGZhY2lsaXRpZXMsIGFpcmNyYWZ0IG5hdmlnYXRpb24sIGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBQcm9ncmFtIGNvdWxkIGxlYWQgdG8gZGVhdGgsIHBlcnNvbmFsIGluanVyeSwgb3Igc2V2ZXJlIHBoeXNpY2FsIG9yIGVudmlyb25tZW50YWwgZGFtYWdlLgorCis2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorCis2LjEgRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBMSUNFTlNFLCBBTkQgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgTEFXLCBOTyBDT05UUklCVVRPUiBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRSQURFTUFSS1MgQU5EIEJSQU5ESU5HCisKKzcuMSBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IFJlY2lwaWVudCBvciBhbnkgdGhpcmQgcGFydHkgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgbm93IG9yIHN1YnNlcXVlbnRseSBwb3N0ZWQgYXQgaHR0cDovL3d3dy5jYS5jb20vY2F0cmRtcmsuaHRtLCBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgbG9nb3Mgb3IgdHJhZGUgbmFtZXMgYmVsb25naW5nIHRvIENBIChjb2xsZWN0aXZlbHkgQ0EgTWFya3MpIG9yIHRvIGFueSB0cmFkZW1hcmssIHNlcnZpY2UgbWFyaywgbG9nbyBvciB0cmFkZSBuYW1lIGJlbG9uZ2luZyB0byBhbnkgQ29udHJpYnV0b3IuIFJlY2lwaWVudCBhZ3JlZXMgbm90IHRvIHVzZSBhbnkgQ0EgTWFya3MgaW4gb3IgYXMgcGFydCBvZiB0aGUgbmFtZSBvZiBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIFByb2dyYW0gb3IgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgUHJvZ3JhbS4KKworNy4yIFN1YmplY3QgdG8gU2VjdGlvbiA3LjEsIFJlY2lwaWVudHMgbWF5IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gdW5kZXIgdHJhZGVtYXJrcywgbG9nb3MsIGFuZCBwcm9kdWN0IG5hbWVzIGJlbG9uZ2luZyB0byB0aGUgUmVjaXBpZW50IHByb3ZpZGVkIHRoYXQgYWxsIGNvcHlyaWdodCBhbmQgb3RoZXIgYXR0cmlidXRpb24gbm90aWNlcyByZW1haW4gaW4gdGhlIFByb2dyYW0uCisKKzguIFBBVEVOVCBMSVRJR0FUSU9OCisKKzguMSBJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBwZXJzb24gb3IgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnRzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudHMgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyLjIgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworOS4gT1dORVJTSElQCisKKzkuMSBTdWJqZWN0IHRvIHRoZSBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBpbiBTZWN0aW9ucyAyLjEgYW5kIDIuMiBhYm92ZSwgZWFjaCBDb250cmlidXRvciByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gYW55IENvbnRyaWJ1dGlvbnMgbWFkZSBieSBzdWNoIENvbnRyaWJ1dG9yLiBDQSByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFByb2dyYW0gYW5kIGFueSBDb250cmlidXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mIENBIChDQSBDb250cmlidXRpb25zKSwgYW5kIHN1Y2ggQ0EgQ29udHJpYnV0aW9ucyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiBDQSBtYXksIGF0IGl0cyBzb2xlIGRpc2NyZXRpb24sIGNob29zZSB0byBsaWNlbnNlIHN1Y2ggQ0EgQ29udHJpYnV0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UsIG9yIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2Ugb3IgbWF5IGNob29zZSBub3QgdG8gbGljZW5zZSB0aGVtIGF0IGFsbC4KKworMTAuIFRFUk1JTkFUSU9OCisKKzEwLjEgQWxsIG9mIFJlY2lwaWVudHMgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvciBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgUmVjaXBpZW50cyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsIFJlY2lwaWVudHMgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieSBSZWNpcGllbnQgYXMgYSBDb250cmlidXRvciByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworMTEuIEdFTkVSQUwKKworMTEuMSBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCisxMS4yIENBIG1heSBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIG5ldyB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0gKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gTm8gb25lIG90aGVyIHRoYW4gQ0EgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBMaWNlbnNlLgorCisxMS4zIElmIGl0IGlzIGltcG9zc2libGUgZm9yIFJlY2lwaWVudCB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIFByb2dyYW0gZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uLCB0aGVuIFJlY2lwaWVudCBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBJUF9JU1NVRVMgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgUHJvZ3JhbSBzb3VyY2UgY29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgUmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworMTEuNCBUaGlzIExpY2Vuc2UgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrLiBObyBSZWNpcGllbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggUmVjaXBpZW50IHdhaXZlcyBpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbiBiZXR3ZWVuIGEgUmVjaXBpZW50IGFuZCBDQSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgdGFrZSBwbGFjZSBpbiB0aGUgU3RhdGUgb2YgTmV3IFlvcmssIGFuZCBSZWNpcGllbnQgYW5kIENBIGhlcmVieSBjb25zZW50IHRvIHRoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlIGFuZCBmZWRlcmFsIGNvdXJ0cyB3aXRoaW4gdGhhdCBkaXN0cmljdCB3aXRoIHJlc3BlY3QgdG8gdGhpcyBMaWNlbnNlLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KKworMTEuNSBXaGVyZSBSZWNpcGllbnQgaXMgbG9jYXRlZCBpbiB0aGUgcHJvdmluY2Ugb2YgUXVlYmVjLCBDYW5hZGEsIHRoZSBmb2xsb3dpbmcgY2xhdXNlIGFwcGxpZXM6IFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhleSBoYXZlIHJlcXVlc3RlZCB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYWxsIHJlbGF0ZWQgZG9jdW1lbnRzIGJlIGRyYWZ0ZWQgaW4gRW5nbGlzaC4gTGVzIHBhcnRpZXMgY29udHJhY3RhbnRlcyBjb25maXJtZW50IHF1YGVsbGVzIG9udCBleGlnZSBxdWUgbGUgcHJlc2VudCBjb250cmF0IGV0IHRvdXMgbGVzIGRvY3VtZW50cyBhc3NvY2llcyBzb2llbnQgcmVkaWdlcyBlbiBhbmdsYWlzLgorCisxMS42IFRoZSBQcm9ncmFtIGlzIHN1YmplY3QgdG8gYWxsIGV4cG9ydCBhbmQgaW1wb3J0IGxhd3MsIHJlc3RyaWN0aW9ucyBhbmQgcmVndWxhdGlvbnMgb2YgdGhlIGNvdW50cnkgaW4gd2hpY2ggUmVjaXBpZW50IHJlY2VpdmVzIHRoZSBQcm9ncmFtLiBSZWNpcGllbnQgaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBjb21wbHlpbmcgd2l0aCBhbmQgZW5zdXJpbmcgdGhhdCBSZWNpcGllbnQgZG9lcyBub3QgZXhwb3J0LCByZS1leHBvcnQsIG9yIGltcG9ydCB0aGUgUHJvZ3JhbSBpbiB2aW9sYXRpb24gb2Ygc3VjaCBsYXdzLCByZXN0cmljdGlvbnMgb3IgcmVndWxhdGlvbnMsIG9yIHdpdGhvdXQgYW55IG5lY2Vzc2FyeSBsaWNlbnNlcyBhbmQgYXV0aG9yaXphdGlvbnMuCisKKzExLjcgVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EwYjc1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMS4wCkBAIC0wLDAgKzEsNjAgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworQXR0cmlidXRpb24gMS4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERSQUZUIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitCeSBvZmZlcmluZyB0aGUgV29yayBmb3IgcHVibGljIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0LCB0byB0aGUgYmVzdCBvZiBMaWNlbnNvcmBzIGtub3dsZWRnZSBhZnRlciByZWFzb25hYmxlIGlucXVpcnk6CitMaWNlbnNvciBoYXMgc2VjdXJlZCBhbGwgcmlnaHRzIGluIHRoZSBXb3JrIG5lY2Vzc2FyeSB0byBncmFudCB0aGUgbGljZW5zZSByaWdodHMgaGVyZXVuZGVyIGFuZCB0byBwZXJtaXQgdGhlIGxhd2Z1bCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpdGhvdXQgWW91IGhhdmluZyBhbnkgb2JsaWdhdGlvbiB0byBwYXkgYW55IHJveWFsdGllcywgY29tcHVsc29yeSBsaWNlbnNlIGZlZXMsIHJlc2lkdWFscyBvciBhbnkgb3RoZXIgcGF5bWVudHM7CitUaGUgV29yayBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgY29weXJpZ2h0LCB0cmFkZW1hcmssIHB1YmxpY2l0eSByaWdodHMsIGNvbW1vbiBsYXcgcmlnaHRzIG9yIGFueSBvdGhlciByaWdodCBvZiBhbnkgdGhpcmQgcGFydHkgb3IgY29uc3RpdHV0ZSBkZWZhbWF0aW9uLCBpbnZhc2lvbiBvZiBwcml2YWN5IG9yIG90aGVyIHRvcnRpb3VzIGluanVyeSB0byBhbnkgdGhpcmQgcGFydHkuCitFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSElTIExJQ0VOU0UgT1IgT1RIRVJXSVNFIEFHUkVFRCBJTiBXUklUSU5HIE9SIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSEUgV09SSyBJUyBMSUNFTlNFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgQ09OVEVOVFMgT1IgQUNDVVJBQ1kgT0YgVEhFIFdPUksuCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIEFORCBFWENFUFQgRk9SIERBTUFHRVMgQVJJU0lORyBGUk9NIExJQUJJTElUWSBUTyBBIFRISVJEIFBBUlRZIFJFU1VMVElORyBGUk9NIEJSRUFDSCBPRiBUSEUgV0FSUkFOVElFUyBJTiBTRUNUSU9OIDUsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMTdhNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTIuMApAQCAtMCwwICsxLDYzIEBACisKK0NyZWF0aXZlIENvbW1vbnMKK0F0dHJpYnV0aW9uIDIuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3MuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIHdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsuCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMi41IGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS0yLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUzZDE5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMi41CkBAIC0wLDAgKzEsNjMgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworQXR0cmlidXRpb24gMi41CisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3Jrcy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgd29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yay4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGIpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYiksIGFzIHJlcXVlc3RlZC4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgKGlpKSBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTMuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5M2Q1NjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTMuMApAQCAtMCwwICsxLDcwIEBACisKK0NyZWF0aXZlIENvbW1vbnMKK0F0dHJpYnV0aW9uIDMuMCBVbnBvcnRlZAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUTyBUSEUgRVhURU5UIFRISVMgTElDRU5TRSBNQVkgQkUgQ09OU0lERVJFRCBUTyBCRSBBIENPTlRSQUNULCBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJBZGFwdGF0aW9uIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yaywgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIGFkYXB0YXRpb24sIGRlcml2YXRpdmUgd29yaywgYXJyYW5nZW1lbnQgb2YgbXVzaWMgb3Igb3RoZXIgYWx0ZXJhdGlvbnMgb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCBvciBwaG9ub2dyYW0gb3IgcGVyZm9ybWFuY2UgYW5kIGluY2x1ZGVzIGNpbmVtYXRvZ3JhcGhpYyBhZGFwdGF0aW9ucyBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCBpbmNsdWRpbmcgaW4gYW55IGZvcm0gcmVjb2duaXphYmx5IGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0sIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJDb2xsZWN0aW9uIiBtZWFucyBhIGNvbGxlY3Rpb24gb2YgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3MsIHN1Y2ggYXMgZW5jeWNsb3BlZGlhcyBhbmQgYW50aG9sb2dpZXMsIG9yIHBlcmZvcm1hbmNlcywgcGhvbm9ncmFtcyBvciBicm9hZGNhc3RzLCBvciBvdGhlciB3b3JrcyBvciBzdWJqZWN0IG1hdHRlciBvdGhlciB0aGFuIHdvcmtzIGxpc3RlZCBpbiBTZWN0aW9uIDEoZikgYmVsb3csIHdoaWNoLCBieSByZWFzb24gb2YgdGhlIHNlbGVjdGlvbiBhbmQgYXJyYW5nZW1lbnQgb2YgdGhlaXIgY29udGVudHMsIGNvbnN0aXR1dGUgaW50ZWxsZWN0dWFsIGNyZWF0aW9ucywgaW4gd2hpY2ggdGhlIFdvcmsgaXMgaW5jbHVkZWQgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSBhbG9uZyB3aXRoIG9uZSBvciBtb3JlIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGVhY2ggY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCB3aGljaCB0b2dldGhlciBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIChhcyBkZWZpbmVkIGFib3ZlKSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEaXN0cmlidXRlIiBtZWFucyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHRoZSBvcmlnaW5hbCBhbmQgY29waWVzIG9mIHRoZSBXb3JrIG9yIEFkYXB0YXRpb24sIGFzIGFwcHJvcHJpYXRlLCB0aHJvdWdoIHNhbGUgb3Igb3RoZXIgdHJhbnNmZXIgb2Ygb3duZXJzaGlwLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB0aGF0IG9mZmVyKHMpIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucywgaW4gdGhlIGNhc2Ugb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB3aG8gY3JlYXRlZCB0aGUgV29yayBvciBpZiBubyBpbmRpdmlkdWFsIG9yIGVudGl0eSBjYW4gYmUgaWRlbnRpZmllZCwgdGhlIHB1Ymxpc2hlcjsgYW5kIGluIGFkZGl0aW9uIChpKSBpbiB0aGUgY2FzZSBvZiBhIHBlcmZvcm1hbmNlIHRoZSBhY3RvcnMsIHNpbmdlcnMsIG11c2ljaWFucywgZGFuY2VycywgYW5kIG90aGVyIHBlcnNvbnMgd2hvIGFjdCwgc2luZywgZGVsaXZlciwgZGVjbGFpbSwgcGxheSBpbiwgaW50ZXJwcmV0IG9yIG90aGVyd2lzZSBwZXJmb3JtIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzIG9yIGV4cHJlc3Npb25zIG9mIGZvbGtsb3JlOyAoaWkpIGluIHRoZSBjYXNlIG9mIGEgcGhvbm9ncmFtIHRoZSBwcm9kdWNlciBiZWluZyB0aGUgcGVyc29uIG9yIGxlZ2FsIGVudGl0eSB3aG8gZmlyc3QgZml4ZXMgdGhlIHNvdW5kcyBvZiBhIHBlcmZvcm1hbmNlIG9yIG90aGVyIHNvdW5kczsgYW5kLCAoaWlpKSBpbiB0aGUgY2FzZSBvZiBicm9hZGNhc3RzLCB0aGUgb3JnYW5pemF0aW9uIHRoYXQgdHJhbnNtaXRzIHRoZSBicm9hZGNhc3QuCisiV29yayIgbWVhbnMgdGhlIGxpdGVyYXJ5IGFuZC9vciBhcnRpc3RpYyB3b3JrIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBwcm9kdWN0aW9uIGluIHRoZSBsaXRlcmFyeSwgc2NpZW50aWZpYyBhbmQgYXJ0aXN0aWMgZG9tYWluLCB3aGF0ZXZlciBtYXkgYmUgdGhlIG1vZGUgb3IgZm9ybSBvZiBpdHMgZXhwcmVzc2lvbiBpbmNsdWRpbmcgZGlnaXRhbCBmb3JtLCBzdWNoIGFzIGEgYm9vaywgcGFtcGhsZXQgYW5kIG90aGVyIHdyaXRpbmc7IGEgbGVjdHVyZSwgYWRkcmVzcywgc2VybW9uIG9yIG90aGVyIHdvcmsgb2YgdGhlIHNhbWUgbmF0dXJlOyBhIGRyYW1hdGljIG9yIGRyYW1hdGljby1tdXNpY2FsIHdvcms7IGEgY2hvcmVvZ3JhcGhpYyB3b3JrIG9yIGVudGVydGFpbm1lbnQgaW4gZHVtYiBzaG93OyBhIG11c2ljYWwgY29tcG9zaXRpb24gd2l0aCBvciB3aXRob3V0IHdvcmRzOyBhIGNpbmVtYXRvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBjaW5lbWF0b2dyYXBoeTsgYSB3b3JrIG9mIGRyYXdpbmcsIHBhaW50aW5nLCBhcmNoaXRlY3R1cmUsIHNjdWxwdHVyZSwgZW5ncmF2aW5nIG9yIGxpdGhvZ3JhcGh5OyBhIHBob3RvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBwaG90b2dyYXBoeTsgYSB3b3JrIG9mIGFwcGxpZWQgYXJ0OyBhbiBpbGx1c3RyYXRpb24sIG1hcCwgcGxhbiwgc2tldGNoIG9yIHRocmVlLWRpbWVuc2lvbmFsIHdvcmsgcmVsYXRpdmUgdG8gZ2VvZ3JhcGh5LCB0b3BvZ3JhcGh5LCBhcmNoaXRlY3R1cmUgb3Igc2NpZW5jZTsgYSBwZXJmb3JtYW5jZTsgYSBicm9hZGNhc3Q7IGEgcGhvbm9ncmFtOyBhIGNvbXBpbGF0aW9uIG9mIGRhdGEgdG8gdGhlIGV4dGVudCBpdCBpcyBwcm90ZWN0ZWQgYXMgYSBjb3B5cmlnaHRhYmxlIHdvcms7IG9yIGEgd29yayBwZXJmb3JtZWQgYnkgYSB2YXJpZXR5IG9yIGNpcmN1cyBwZXJmb3JtZXIgdG8gdGhlIGV4dGVudCBpdCBpcyBub3Qgb3RoZXJ3aXNlIGNvbnNpZGVyZWQgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyJQdWJsaWNseSBQZXJmb3JtIiBtZWFucyB0byBwZXJmb3JtIHB1YmxpYyByZWNpdGF0aW9ucyBvZiB0aGUgV29yayBhbmQgdG8gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyB0aG9zZSBwdWJsaWMgcmVjaXRhdGlvbnMsIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzLCBpbmNsdWRpbmcgYnkgd2lyZSBvciB3aXJlbGVzcyBtZWFucyBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZXM7IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgV29ya3MgaW4gc3VjaCBhIHdheSB0aGF0IG1lbWJlcnMgb2YgdGhlIHB1YmxpYyBtYXkgYWNjZXNzIHRoZXNlIFdvcmtzIGZyb20gYSBwbGFjZSBhbmQgYXQgYSBwbGFjZSBpbmRpdmlkdWFsbHkgY2hvc2VuIGJ5IHRoZW07IHRvIHBlcmZvcm0gdGhlIFdvcmsgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyBhbmQgdGhlIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBvZiB0aGUgcGVyZm9ybWFuY2VzIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgYnkgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2U7IHRvIGJyb2FkY2FzdCBhbmQgcmVicm9hZGNhc3QgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyBzaWducywgc291bmRzIG9yIGltYWdlcy4KKyJSZXByb2R1Y2UiIG1lYW5zIHRvIG1ha2UgY29waWVzIG9mIHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGJ5IHNvdW5kIG9yIHZpc3VhbCByZWNvcmRpbmdzIGFuZCB0aGUgcmlnaHQgb2YgZml4YXRpb24gYW5kIHJlcHJvZHVjaW5nIGZpeGF0aW9ucyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIHN0b3JhZ2Ugb2YgYSBwcm90ZWN0ZWQgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtIGluIGRpZ2l0YWwgZm9ybSBvciBvdGhlciBlbGVjdHJvbmljIG1lZGl1bS4KKzIuIEZhaXIgRGVhbGluZyBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSB1c2VzIGZyZWUgZnJvbSBjb3B5cmlnaHQgb3IgcmlnaHRzIGFyaXNpbmcgZnJvbSBsaW1pdGF0aW9ucyBvciBleGNlcHRpb25zIHRoYXQgYXJlIHByb3ZpZGVkIGZvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGNvcHlyaWdodCBwcm90ZWN0aW9uIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIFJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aW9ucywgYW5kIHRvIFJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3Rpb25zOwordG8gY3JlYXRlIGFuZCBSZXByb2R1Y2UgQWRhcHRhdGlvbnMgcHJvdmlkZWQgdGhhdCBhbnkgc3VjaCBBZGFwdGF0aW9uLCBpbmNsdWRpbmcgYW55IHRyYW5zbGF0aW9uIGluIGFueSBtZWRpdW0sIHRha2VzIHJlYXNvbmFibGUgc3RlcHMgdG8gY2xlYXJseSBsYWJlbCwgZGVtYXJjYXRlIG9yIG90aGVyd2lzZSBpZGVudGlmeSB0aGF0IGNoYW5nZXMgd2VyZSBtYWRlIHRvIHRoZSBvcmlnaW5hbCBXb3JrLiBGb3IgZXhhbXBsZSwgYSB0cmFuc2xhdGlvbiBjb3VsZCBiZSBtYXJrZWQgIlRoZSBvcmlnaW5hbCB3b3JrIHdhcyB0cmFuc2xhdGVkIGZyb20gRW5nbGlzaCB0byBTcGFuaXNoLCIgb3IgYSBtb2RpZmljYXRpb24gY291bGQgaW5kaWNhdGUgIlRoZSBvcmlnaW5hbCB3b3JrIGhhcyBiZWVuIG1vZGlmaWVkLiI7Cit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGlvbnM7IGFuZCwKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gQWRhcHRhdGlvbnMuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDoKKworTm9uLXdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsKK1dhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7IGFuZCwKK1ZvbHVudGFyeSBMaWNlbnNlIFNjaGVtZXMuIFRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBTdWJqZWN0IHRvIFNlY3Rpb24gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmssIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgV29yayBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3Rpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYiksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhbiBBZGFwdGF0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIEFkYXB0YXRpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYiksIGFzIHJlcXVlc3RlZC4KK0lmIFlvdSBEaXN0cmlidXRlLCBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3QsIHVubGVzcyBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBwdXJzdWFudCB0byBTZWN0aW9uIDQoYSksIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuLCBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uICgiQXR0cmlidXRpb24gUGFydGllcyIpIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IChpaSkgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyAoaWlpKSB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVUkksIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIChpdikgLCBjb25zaXN0ZW50IHdpdGggU2VjdGlvbiAzKGIpLCBpbiB0aGUgY2FzZSBvZiBhbiBBZGFwdGF0aW9uLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBBZGFwdGF0aW9uIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIDQgKGIpIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIsIGlmIGEgY3JlZGl0IGZvciBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMgb2YgdGhlIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiBhcHBlYXJzLCB0aGVuIGFzIHBhcnQgb2YgdGhlc2UgY3JlZGl0cyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHRoZSBjcmVkaXRzIGZvciB0aGUgb3RoZXIgY29udHJpYnV0aW5nIGF1dGhvcnMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBZb3UgbWF5IG9ubHkgdXNlIHRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIGZvciB0aGUgcHVycG9zZSBvZiBhdHRyaWJ1dGlvbiBpbiB0aGUgbWFubmVyIHNldCBvdXQgYWJvdmUgYW5kLCBieSBleGVyY2lzaW5nIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgWW91IG1heSBub3QgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGFzc2VydCBvciBpbXBseSBhbnkgY29ubmVjdGlvbiB3aXRoLCBzcG9uc29yc2hpcCBvciBlbmRvcnNlbWVudCBieSB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcywgYXMgYXBwcm9wcmlhdGUsIG9mIFlvdSBvciBZb3VyIHVzZSBvZiB0aGUgV29yaywgd2l0aG91dCB0aGUgc2VwYXJhdGUsIGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLgorRXhjZXB0IGFzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZyBieSB0aGUgTGljZW5zb3Igb3IgYXMgbWF5IGJlIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGlmIFlvdSBSZXByb2R1Y2UsIERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBlaXRoZXIgYnkgaXRzZWxmIG9yIGFzIHBhcnQgb2YgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCBub3QgZGlzdG9ydCwgbXV0aWxhdGUsIG1vZGlmeSBvciB0YWtlIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBXb3JrIHdoaWNoIHdvdWxkIGJlIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3JgcyBob25vciBvciByZXB1dGF0aW9uLiBMaWNlbnNvciBhZ3JlZXMgdGhhdCBpbiB0aG9zZSBqdXJpc2RpY3Rpb25zIChlLmcuIEphcGFuKSwgaW4gd2hpY2ggYW55IGV4ZXJjaXNlIG9mIHRoZSByaWdodCBncmFudGVkIGluIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHRoZSByaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSB3b3VsZCBiZSBkZWVtZWQgdG8gYmUgYSBkaXN0b3J0aW9uLCBtdXRpbGF0aW9uLCBtb2RpZmljYXRpb24gb3Igb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIGFuZCByZXB1dGF0aW9uLCB0aGUgTGljZW5zb3Igd2lsbCB3YWl2ZSBvciBub3QgYXNzZXJ0LCBhcyBhcHByb3ByaWF0ZSwgdGhpcyBTZWN0aW9uLCB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdywgdG8gZW5hYmxlIFlvdSB0byByZWFzb25hYmx5IGV4ZXJjaXNlIFlvdXIgcmlnaHQgdW5kZXIgU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAocmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgYnV0IG5vdCBvdGhlcndpc2UuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIGFuIEFkYXB0YXRpb24sIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIsIGFuZCB0aGUgc3ViamVjdCBtYXR0ZXIgcmVmZXJlbmNlZCwgaW4gdGhpcyBMaWNlbnNlIHdlcmUgZHJhZnRlZCB1dGlsaXppbmcgdGhlIHRlcm1pbm9sb2d5IG9mIHRoZSBCZXJuZSBDb252ZW50aW9uIGZvciB0aGUgUHJvdGVjdGlvbiBvZiBMaXRlcmFyeSBhbmQgQXJ0aXN0aWMgV29ya3MgKGFzIGFtZW5kZWQgb24gU2VwdGVtYmVyIDI4LCAxOTc5KSwgdGhlIFJvbWUgQ29udmVudGlvbiBvZiAxOTYxLCB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IG9mIDE5OTYsIHRoZSBXSVBPIFBlcmZvcm1hbmNlcyBhbmQgUGhvbm9ncmFtcyBUcmVhdHkgb2YgMTk5NiBhbmQgdGhlIFVuaXZlcnNhbCBDb3B5cmlnaHQgQ29udmVudGlvbiAoYXMgcmV2aXNlZCBvbiBKdWx5IDI0LCAxOTcxKS4gVGhlc2UgcmlnaHRzIGFuZCBzdWJqZWN0IG1hdHRlciB0YWtlIGVmZmVjdCBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBMaWNlbnNlIHRlcm1zIGFyZSBzb3VnaHQgdG8gYmUgZW5mb3JjZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHByb3Zpc2lvbnMgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIHRyZWF0eSBwcm92aXNpb25zIGluIHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdy4gSWYgdGhlIHN0YW5kYXJkIHN1aXRlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdyBpbmNsdWRlcyBhZGRpdGlvbmFsIHJpZ2h0cyBub3QgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIHN1Y2ggYWRkaXRpb25hbCByaWdodHMgYXJlIGRlZW1lZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZTsgdGhpcyBMaWNlbnNlIGlzIG5vdCBpbnRlbmRlZCB0byByZXN0cmljdCB0aGUgbGljZW5zZSBvZiBhbnkgcmlnaHRzIHVuZGVyIGFwcGxpY2FibGUgbGF3LgorQ3JlYXRpdmUgQ29tbW9ucyBOb3RpY2UKKworQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgQ3JlYXRpdmUgQ29tbW9ucyBkb2VzIG5vdCBhdXRob3JpemUgdGhlIHVzZSBieSBlaXRoZXIgcGFydHkgb2YgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIHRyYWRlbWFyayByZXN0cmljdGlvbiBkb2VzIG5vdCBmb3JtIHBhcnQgb2YgdGhpcyBMaWNlbnNlLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzVkMjI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0xLjAKQEAgLTAsMCArMSw2MyBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbCAxLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRFJBRlQgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworQnkgb2ZmZXJpbmcgdGhlIFdvcmsgZm9yIHB1YmxpYyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgcmVwcmVzZW50cyBhbmQgd2FycmFudHMgdGhhdCwgdG8gdGhlIGJlc3Qgb2YgTGljZW5zb3JgcyBrbm93bGVkZ2UgYWZ0ZXIgcmVhc29uYWJsZSBpbnF1aXJ5OgorTGljZW5zb3IgaGFzIHNlY3VyZWQgYWxsIHJpZ2h0cyBpbiB0aGUgV29yayBuZWNlc3NhcnkgdG8gZ3JhbnQgdGhlIGxpY2Vuc2UgcmlnaHRzIGhlcmV1bmRlciBhbmQgdG8gcGVybWl0IHRoZSBsYXdmdWwgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aXRob3V0IFlvdSBoYXZpbmcgYW55IG9ibGlnYXRpb24gdG8gcGF5IGFueSByb3lhbHRpZXMsIGNvbXB1bHNvcnkgbGljZW5zZSBmZWVzLCByZXNpZHVhbHMgb3IgYW55IG90aGVyIHBheW1lbnRzOworVGhlIFdvcmsgZG9lcyBub3QgaW5mcmluZ2UgdGhlIGNvcHlyaWdodCwgdHJhZGVtYXJrLCBwdWJsaWNpdHkgcmlnaHRzLCBjb21tb24gbGF3IHJpZ2h0cyBvciBhbnkgb3RoZXIgcmlnaHQgb2YgYW55IHRoaXJkIHBhcnR5IG9yIGNvbnN0aXR1dGUgZGVmYW1hdGlvbiwgaW52YXNpb24gb2YgcHJpdmFjeSBvciBvdGhlciB0b3J0aW91cyBpbmp1cnkgdG8gYW55IHRoaXJkIHBhcnR5LgorRVhDRVBUIEFTIEVYUFJFU1NMWSBTVEFURUQgSU4gVEhJUyBMSUNFTlNFIE9SIE9USEVSV0lTRSBBR1JFRUQgSU4gV1JJVElORyBPUiBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgVEhFIFdPUksgSVMgTElDRU5TRUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIENPTlRFTlRTIE9SIEFDQ1VSQUNZIE9GIFRIRSBXT1JLLgorNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBBTkQgRVhDRVBUIEZPUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBMSUFCSUxJVFkgVE8gQSBUSElSRCBQQVJUWSBSRVNVTFRJTkcgRlJPTSBCUkVBQ0ggT0YgVEhFIFdBUlJBTlRJRVMgSU4gU0VDVElPTiA1LCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGM1MTc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0yLjAKQEAgLTAsMCArMSw2NiBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbCAyLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbnMgNChkKSBhbmQgNChlKS4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yayBpZiB0aGF0IHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggY292ZXIgdmVyc2lvbiBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMi41IGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0yLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThlNjFlMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMi41CkBAIC0wLDAgKzEsNjYgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwgMi41CisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb25zIDQoZCkgYW5kIDQoZSkuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYyksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChjKSwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgKGlpKSBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrIGlmIHRoYXQgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0zLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjM0MjVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0zLjAKQEAgLTAsMCArMSw3MiBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwgMy4wIFVucG9ydGVkCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRPIFRIRSBFWFRFTlQgVEhJUyBMSUNFTlNFIE1BWSBCRSBDT05TSURFUkVEIFRPIEJFIEEgQ09OVFJBQ1QsIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkFkYXB0YXRpb24iIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrLCBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgYWRhcHRhdGlvbiwgZGVyaXZhdGl2ZSB3b3JrLCBhcnJhbmdlbWVudCBvZiBtdXNpYyBvciBvdGhlciBhbHRlcmF0aW9ucyBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIG9yIHBob25vZ3JhbSBvciBwZXJmb3JtYW5jZSBhbmQgaW5jbHVkZXMgY2luZW1hdG9ncmFwaGljIGFkYXB0YXRpb25zIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkIGluY2x1ZGluZyBpbiBhbnkgZm9ybSByZWNvZ25pemFibHkgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIHdvcmssIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSwgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkNvbGxlY3Rpb24iIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3Jrcywgc3VjaCBhcyBlbmN5Y2xvcGVkaWFzIGFuZCBhbnRob2xvZ2llcywgb3IgcGVyZm9ybWFuY2VzLCBwaG9ub2dyYW1zIG9yIGJyb2FkY2FzdHMsIG9yIG90aGVyIHdvcmtzIG9yIHN1YmplY3QgbWF0dGVyIG90aGVyIHRoYW4gd29ya3MgbGlzdGVkIGluIFNlY3Rpb24gMShmKSBiZWxvdywgd2hpY2gsIGJ5IHJlYXNvbiBvZiB0aGUgc2VsZWN0aW9uIGFuZCBhcnJhbmdlbWVudCBvZiB0aGVpciBjb250ZW50cywgY29uc3RpdHV0ZSBpbnRlbGxlY3R1YWwgY3JlYXRpb25zLCBpbiB3aGljaCB0aGUgV29yayBpcyBpbmNsdWRlZCBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtIGFsb25nIHdpdGggb25lIG9yIG1vcmUgb3RoZXIgY29udHJpYnV0aW9ucywgZWFjaCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIHdoaWNoIHRvZ2V0aGVyIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gKGFzIGRlZmluZWQgYWJvdmUpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRpc3RyaWJ1dGUiIG1lYW5zIHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgdGhlIG9yaWdpbmFsIGFuZCBjb3BpZXMgb2YgdGhlIFdvcmsgb3IgQWRhcHRhdGlvbiwgYXMgYXBwcm9wcmlhdGUsIHRocm91Z2ggc2FsZSBvciBvdGhlciB0cmFuc2ZlciBvZiBvd25lcnNoaXAuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHRoYXQgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zLCBpbiB0aGUgY2FzZSBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHdobyBjcmVhdGVkIHRoZSBXb3JrIG9yIGlmIG5vIGluZGl2aWR1YWwgb3IgZW50aXR5IGNhbiBiZSBpZGVudGlmaWVkLCB0aGUgcHVibGlzaGVyOyBhbmQgaW4gYWRkaXRpb24gKGkpIGluIHRoZSBjYXNlIG9mIGEgcGVyZm9ybWFuY2UgdGhlIGFjdG9ycywgc2luZ2VycywgbXVzaWNpYW5zLCBkYW5jZXJzLCBhbmQgb3RoZXIgcGVyc29ucyB3aG8gYWN0LCBzaW5nLCBkZWxpdmVyLCBkZWNsYWltLCBwbGF5IGluLCBpbnRlcnByZXQgb3Igb3RoZXJ3aXNlIHBlcmZvcm0gbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3Mgb3IgZXhwcmVzc2lvbnMgb2YgZm9sa2xvcmU7IChpaSkgaW4gdGhlIGNhc2Ugb2YgYSBwaG9ub2dyYW0gdGhlIHByb2R1Y2VyIGJlaW5nIHRoZSBwZXJzb24gb3IgbGVnYWwgZW50aXR5IHdobyBmaXJzdCBmaXhlcyB0aGUgc291bmRzIG9mIGEgcGVyZm9ybWFuY2Ugb3Igb3RoZXIgc291bmRzOyBhbmQsIChpaWkpIGluIHRoZSBjYXNlIG9mIGJyb2FkY2FzdHMsIHRoZSBvcmdhbml6YXRpb24gdGhhdCB0cmFuc21pdHMgdGhlIGJyb2FkY2FzdC4KKyJXb3JrIiBtZWFucyB0aGUgbGl0ZXJhcnkgYW5kL29yIGFydGlzdGljIHdvcmsgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24gaW4gdGhlIGxpdGVyYXJ5LCBzY2llbnRpZmljIGFuZCBhcnRpc3RpYyBkb21haW4sIHdoYXRldmVyIG1heSBiZSB0aGUgbW9kZSBvciBmb3JtIG9mIGl0cyBleHByZXNzaW9uIGluY2x1ZGluZyBkaWdpdGFsIGZvcm0sIHN1Y2ggYXMgYSBib29rLCBwYW1waGxldCBhbmQgb3RoZXIgd3JpdGluZzsgYSBsZWN0dXJlLCBhZGRyZXNzLCBzZXJtb24gb3Igb3RoZXIgd29yayBvZiB0aGUgc2FtZSBuYXR1cmU7IGEgZHJhbWF0aWMgb3IgZHJhbWF0aWNvLW11c2ljYWwgd29yazsgYSBjaG9yZW9ncmFwaGljIHdvcmsgb3IgZW50ZXJ0YWlubWVudCBpbiBkdW1iIHNob3c7IGEgbXVzaWNhbCBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIGNpbmVtYXRvZ3JhcGh5OyBhIHdvcmsgb2YgZHJhd2luZywgcGFpbnRpbmcsIGFyY2hpdGVjdHVyZSwgc2N1bHB0dXJlLCBlbmdyYXZpbmcgb3IgbGl0aG9ncmFwaHk7IGEgcGhvdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIHBob3RvZ3JhcGh5OyBhIHdvcmsgb2YgYXBwbGllZCBhcnQ7IGFuIGlsbHVzdHJhdGlvbiwgbWFwLCBwbGFuLCBza2V0Y2ggb3IgdGhyZWUtZGltZW5zaW9uYWwgd29yayByZWxhdGl2ZSB0byBnZW9ncmFwaHksIHRvcG9ncmFwaHksIGFyY2hpdGVjdHVyZSBvciBzY2llbmNlOyBhIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByb3RlY3RlZCBhcyBhIGNvcHlyaWdodGFibGUgd29yazsgb3IgYSB3b3JrIHBlcmZvcm1lZCBieSBhIHZhcmlldHkgb3IgY2lyY3VzIHBlcmZvcm1lciB0byB0aGUgZXh0ZW50IGl0IGlzIG5vdCBvdGhlcndpc2UgY29uc2lkZXJlZCBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmsuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIlB1YmxpY2x5IFBlcmZvcm0iIG1lYW5zIHRvIHBlcmZvcm0gcHVibGljIHJlY2l0YXRpb25zIG9mIHRoZSBXb3JrIGFuZCB0byBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljIHRob3NlIHB1YmxpYyByZWNpdGF0aW9ucywgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MsIGluY2x1ZGluZyBieSB3aXJlIG9yIHdpcmVsZXNzIG1lYW5zIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlczsgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBXb3JrcyBpbiBzdWNoIGEgd2F5IHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlc2UgV29ya3MgZnJvbSBhIHBsYWNlIGFuZCBhdCBhIHBsYWNlIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbTsgdG8gcGVyZm9ybSB0aGUgV29yayB0byB0aGUgcHVibGljIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzIGFuZCB0aGUgY29tbXVuaWNhdGlvbiB0byB0aGUgcHVibGljIG9mIHRoZSBwZXJmb3JtYW5jZXMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBieSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZTsgdG8gYnJvYWRjYXN0IGFuZCByZWJyb2FkY2FzdCB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHNpZ25zLCBzb3VuZHMgb3IgaW1hZ2VzLgorIlJlcHJvZHVjZSIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyIGVsZWN0cm9uaWMgbWVkaXVtLgorMi4gRmFpciBEZWFsaW5nIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHVzZXMgZnJlZSBmcm9tIGNvcHlyaWdodCBvciByaWdodHMgYXJpc2luZyBmcm9tIGxpbWl0YXRpb25zIG9yIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcHJvdmlkZWQgZm9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgY29weXJpZ2h0IHByb3RlY3Rpb24gdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gUmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3Rpb25zLCBhbmQgdG8gUmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGlvbnM7Cit0byBjcmVhdGUgYW5kIFJlcHJvZHVjZSBBZGFwdGF0aW9ucyBwcm92aWRlZCB0aGF0IGFueSBzdWNoIEFkYXB0YXRpb24sIGluY2x1ZGluZyBhbnkgdHJhbnNsYXRpb24gaW4gYW55IG1lZGl1bSwgdGFrZXMgcmVhc29uYWJsZSBzdGVwcyB0byBjbGVhcmx5IGxhYmVsLCBkZW1hcmNhdGUgb3Igb3RoZXJ3aXNlIGlkZW50aWZ5IHRoYXQgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gdGhlIG9yaWdpbmFsIFdvcmsuIEZvciBleGFtcGxlLCBhIHRyYW5zbGF0aW9uIGNvdWxkIGJlIG1hcmtlZCAiVGhlIG9yaWdpbmFsIHdvcmsgd2FzIHRyYW5zbGF0ZWQgZnJvbSBFbmdsaXNoIHRvIFNwYW5pc2gsIiBvciBhIG1vZGlmaWNhdGlvbiBjb3VsZCBpbmRpY2F0ZSAiVGhlIG9yaWdpbmFsIHdvcmsgaGFzIGJlZW4gbW9kaWZpZWQuIjsKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aW9uczsgYW5kLAordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSBBZGFwdGF0aW9ucy4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBTdWJqZWN0IHRvIFNlY3Rpb24gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQoZCkuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgV29yayB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIFdvcmsgZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gVGhpcyBTZWN0aW9uIDQoYSkgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aW9uLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aW9uIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGMpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYW4gQWRhcHRhdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBBZGFwdGF0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGMpLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIFlvdSBEaXN0cmlidXRlLCBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3QsIHVubGVzcyBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBwdXJzdWFudCB0byBTZWN0aW9uIDQoYSksIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuLCBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uICgiQXR0cmlidXRpb24gUGFydGllcyIpIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IChpaSkgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyAoaWlpKSB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVUkksIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kLCAoaXYpIGNvbnNpc3RlbnQgd2l0aCBTZWN0aW9uIDMoYiksIGluIHRoZSBjYXNlIG9mIGFuIEFkYXB0YXRpb24sIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIEFkYXB0YXRpb24gKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gVGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gNChjKSBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIGNyZWRpdCBmb3IgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIHRoZSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24gYXBwZWFycywgdGhlbiBhcyBwYXJ0IG9mIHRoZXNlIGNyZWRpdHMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyB0aGUgY3JlZGl0cyBmb3IgdGhlIG90aGVyIGNvbnRyaWJ1dGluZyBhdXRob3JzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgWW91IG1heSBvbmx5IHVzZSB0aGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgYXR0cmlidXRpb24gaW4gdGhlIG1hbm5lciBzZXQgb3V0IGFib3ZlIGFuZCwgYnkgZXhlcmNpc2luZyBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgbm90IGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBhc3NlcnQgb3IgaW1wbHkgYW55IGNvbm5lY3Rpb24gd2l0aCwgc3BvbnNvcnNoaXAgb3IgZW5kb3JzZW1lbnQgYnkgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMsIGFzIGFwcHJvcHJpYXRlLCBvZiBZb3Ugb3IgWW91ciB1c2Ugb2YgdGhlIFdvcmssIHdpdGhvdXQgdGhlIHNlcGFyYXRlLCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0OgorCitOb24td2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2Fubm90IGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOworV2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2FuIGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGlmIFlvdXIgZXhlcmNpc2Ugb2Ygc3VjaCByaWdodHMgaXMgZm9yIGEgcHVycG9zZSBvciB1c2Ugd2hpY2ggaXMgb3RoZXJ3aXNlIHRoYW4gbm9uY29tbWVyY2lhbCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA0KGIpIGFuZCBvdGhlcndpc2Ugd2FpdmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lOyBhbmQsCitWb2x1bnRhcnkgTGljZW5zZSBTY2hlbWVzLiBUaGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSB0aGF0IGlzIGZvciBhIHB1cnBvc2Ugb3IgdXNlIHdoaWNoIGlzIG90aGVyd2lzZSB0aGFuIG5vbmNvbW1lcmNpYWwgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNChjKS4KK0V4Y2VwdCBhcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcgYnkgdGhlIExpY2Vuc29yIG9yIGFzIG1heSBiZSBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBpZiBZb3UgUmVwcm9kdWNlLCBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgZWl0aGVyIGJ5IGl0c2VsZiBvciBhcyBwYXJ0IG9mIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3Qgbm90IGRpc3RvcnQsIG11dGlsYXRlLCBtb2RpZnkgb3IgdGFrZSBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBpbiByZWxhdGlvbiB0byB0aGUgV29yayB3aGljaCB3b3VsZCBiZSBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3Igb3IgcmVwdXRhdGlvbi4gTGljZW5zb3IgYWdyZWVzIHRoYXQgaW4gdGhvc2UganVyaXNkaWN0aW9ucyAoZS5nLiBKYXBhbiksIGluIHdoaWNoIGFueSBleGVyY2lzZSBvZiB0aGUgcmlnaHQgZ3JhbnRlZCBpbiBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlICh0aGUgcmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgd291bGQgYmUgZGVlbWVkIHRvIGJlIGEgZGlzdG9ydGlvbiwgbXV0aWxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3JgcyBob25vciBhbmQgcmVwdXRhdGlvbiwgdGhlIExpY2Vuc29yIHdpbGwgd2FpdmUgb3Igbm90IGFzc2VydCwgYXMgYXBwcm9wcmlhdGUsIHRoaXMgU2VjdGlvbiwgdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcsIHRvIGVuYWJsZSBZb3UgdG8gcmVhc29uYWJseSBleGVyY2lzZSBZb3VyIHJpZ2h0IHVuZGVyIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHJpZ2h0IHRvIG1ha2UgQWRhcHRhdGlvbnMpIGJ1dCBub3Qgb3RoZXJ3aXNlLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGlvbiwgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSBhbiBBZGFwdGF0aW9uLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyLCBhbmQgdGhlIHN1YmplY3QgbWF0dGVyIHJlZmVyZW5jZWQsIGluIHRoaXMgTGljZW5zZSB3ZXJlIGRyYWZ0ZWQgdXRpbGl6aW5nIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgQmVybmUgQ29udmVudGlvbiBmb3IgdGhlIFByb3RlY3Rpb24gb2YgTGl0ZXJhcnkgYW5kIEFydGlzdGljIFdvcmtzIChhcyBhbWVuZGVkIG9uIFNlcHRlbWJlciAyOCwgMTk3OSksIHRoZSBSb21lIENvbnZlbnRpb24gb2YgMTk2MSwgdGhlIFdJUE8gQ29weXJpZ2h0IFRyZWF0eSBvZiAxOTk2LCB0aGUgV0lQTyBQZXJmb3JtYW5jZXMgYW5kIFBob25vZ3JhbXMgVHJlYXR5IG9mIDE5OTYgYW5kIHRoZSBVbml2ZXJzYWwgQ29weXJpZ2h0IENvbnZlbnRpb24gKGFzIHJldmlzZWQgb24gSnVseSAyNCwgMTk3MSkuIFRoZXNlIHJpZ2h0cyBhbmQgc3ViamVjdCBtYXR0ZXIgdGFrZSBlZmZlY3QgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUgc291Z2h0IHRvIGJlIGVuZm9yY2VkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBwcm92aXNpb25zIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSB0cmVhdHkgcHJvdmlzaW9ucyBpbiB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcgaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBzdWNoIGFkZGl0aW9uYWwgcmlnaHRzIGFyZSBkZWVtZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2U7IHRoaXMgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGxpY2Vuc2Ugb2YgYW55IHJpZ2h0cyB1bmRlciBhcHBsaWNhYmxlIGxhdy4KK0NyZWF0aXZlIENvbW1vbnMgTm90aWNlCisKK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIENyZWF0aXZlIENvbW1vbnMgZG9lcyBub3QgYXV0aG9yaXplIHRoZSB1c2UgYnkgZWl0aGVyIHBhcnR5IG9mIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyB0cmFkZW1hcmsgcmVzdHJpY3Rpb24gZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoZSBMaWNlbnNlLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTdkODRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0xLjAKQEAgLTAsMCArMSw1IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworQXR0cmlidXRpb24tTm9EZXJpdnMtTm9uQ29tbWVyY2lhbCAxLjAgIENSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERSQUZUIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4gTGljZW5zZSAgVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIElTIFBST0hJQklURUQuICBCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLiAgMS4gRGVmaW5pdGlvbnMgICJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4gIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiAiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuICJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLiAyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuICAzLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6ICB0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7IHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7IFRoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLiAgNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOiAgWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4gSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4gNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyICBCeSBvZmZlcmluZyB0aGUgV29yayBmb3IgcHVibGljIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0LCB0byB0aGUgYmVzdCBvZiBMaWNlbnNvcmBzIGtub3dsZWRnZSBhZnRlciByZWFzb25hYmxlIGlucXVpcnk6IExpY2Vuc29yIGhhcyBzZWN1cmVkIGFsbCByaWdodHMgaW4gdGhlIFdvcmsgbmVjZXNzYXJ5IHRvIGdyYW50IHRoZSBsaWNlbnNlIHJpZ2h0cyBoZXJldW5kZXIgYW5kIHRvIHBlcm1pdCB0aGUgbGF3ZnVsIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2l0aG91dCBZb3UgaGF2aW5nIGFueSBvYmxpZ2F0aW9uIHRvIHBheSBhbnkgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50czsgVGhlIFdvcmsgZG9lcyBub3QgaW5mcmluZ2UgdGhlIGNvcHlyaWdodCwgdHJhZGVtYXJrLCBwdWJsaWNpdHkgcmlnaHRzLCBjb21tb24gbGF3IHJpZ2h0cyBvciBhbnkgb3RoZXIgcmlnaHQgb2YgYW55IHRoaXJkIHBhcnR5IG9yIGNvbnN0aXR1dGUgZGVmYW1hdGlvbiwgaW52YXNpb24gb2YgcHJpdmFjeSBvciBvdGhlciB0b3J0aW91cyBpbmp1cnkgdG8gYW55IHRoaXJkIHBhcnR5LiBFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSElTIExJQ0VOU0UgT1IgT1RIRVJXSVNFIEFHUkVFRCBJTiBXUklUSU5HIE9SIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSEUgV09SSyBJUyBMSUNFTlNFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgQ09OVEVOVFMgT1IgQUNDVVJBQ1kgT0YgVEhFIFdPUksuIDYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgQU5EIEVYQ0VQVCBGT1IgREFNQUdFUyBBUklTSU5HIEZST00gTElBQklMSVRZIFRPIEEgVEhJUkQgUEFSVFkgUkVTVUxUSU5HIEZST00gQlJFQUNIIE9GIFRIRSBXQVJSQU5USUVTIElOIFNFQ1RJT04gNSwgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuICA3LiBUZXJtaW5hdGlvbiAgVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuIDguIE1pc2NlbGxhbmVvdXMgIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4gTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuIENyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLiAgRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLiAgQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDZjMTcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0yLjAKQEAgLTAsMCArMSw2MyBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1Ob0Rlcml2cyAyLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMsIGJ1dCBvdGhlcndpc2UgeW91IGhhdmUgbm8gcmlnaHRzIHRvIG1ha2UgRGVyaXZhdGl2ZSBXb3Jrcy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9ucyA0KGQpIGFuZCA0KGUpLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmssIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgYW5kIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yayBpZiB0aGF0IHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggY292ZXIgdmVyc2lvbiBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTIuNSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMi41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiN2FhNTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTIuNQpAQCAtMCwwICsxLDYzIEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLU5vRGVyaXZzIDIuNQorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cywgYnV0IG90aGVyd2lzZSB5b3UgaGF2ZSBubyByaWdodHMgdG8gbWFrZSBEZXJpdmF0aXZlIFdvcmtzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb25zIDQoZCkgYW5kIDQoZSkuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYyksIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgKGlpKSBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyBhbmQgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcmsuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrIGlmIHRoYXQgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMy4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M5NTRkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMy4wCkBAIC0wLDAgKzEsNjkgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLU5vRGVyaXZzIDMuMCBVbnBvcnRlZAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUTyBUSEUgRVhURU5UIFRISVMgTElDRU5TRSBNQVkgQkUgQ09OU0lERVJFRCBUTyBCRSBBIENPTlRSQUNULCBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJBZGFwdGF0aW9uIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yaywgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIGFkYXB0YXRpb24sIGRlcml2YXRpdmUgd29yaywgYXJyYW5nZW1lbnQgb2YgbXVzaWMgb3Igb3RoZXIgYWx0ZXJhdGlvbnMgb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCBvciBwaG9ub2dyYW0gb3IgcGVyZm9ybWFuY2UgYW5kIGluY2x1ZGVzIGNpbmVtYXRvZ3JhcGhpYyBhZGFwdGF0aW9ucyBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCBpbmNsdWRpbmcgaW4gYW55IGZvcm0gcmVjb2duaXphYmx5IGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0sIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJDb2xsZWN0aW9uIiBtZWFucyBhIGNvbGxlY3Rpb24gb2YgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3MsIHN1Y2ggYXMgZW5jeWNsb3BlZGlhcyBhbmQgYW50aG9sb2dpZXMsIG9yIHBlcmZvcm1hbmNlcywgcGhvbm9ncmFtcyBvciBicm9hZGNhc3RzLCBvciBvdGhlciB3b3JrcyBvciBzdWJqZWN0IG1hdHRlciBvdGhlciB0aGFuIHdvcmtzIGxpc3RlZCBpbiBTZWN0aW9uIDEoZikgYmVsb3csIHdoaWNoLCBieSByZWFzb24gb2YgdGhlIHNlbGVjdGlvbiBhbmQgYXJyYW5nZW1lbnQgb2YgdGhlaXIgY29udGVudHMsIGNvbnN0aXR1dGUgaW50ZWxsZWN0dWFsIGNyZWF0aW9ucywgaW4gd2hpY2ggdGhlIFdvcmsgaXMgaW5jbHVkZWQgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSBhbG9uZyB3aXRoIG9uZSBvciBtb3JlIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGVhY2ggY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCB3aGljaCB0b2dldGhlciBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIChhcyBkZWZpbmVkIGFib3ZlKSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEaXN0cmlidXRlIiBtZWFucyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHRoZSBvcmlnaW5hbCBhbmQgY29waWVzIG9mIHRoZSBXb3JrIHRocm91Z2ggc2FsZSBvciBvdGhlciB0cmFuc2ZlciBvZiBvd25lcnNoaXAuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHRoYXQgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zLCBpbiB0aGUgY2FzZSBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHdobyBjcmVhdGVkIHRoZSBXb3JrIG9yIGlmIG5vIGluZGl2aWR1YWwgb3IgZW50aXR5IGNhbiBiZSBpZGVudGlmaWVkLCB0aGUgcHVibGlzaGVyOyBhbmQgaW4gYWRkaXRpb24gKGkpIGluIHRoZSBjYXNlIG9mIGEgcGVyZm9ybWFuY2UgdGhlIGFjdG9ycywgc2luZ2VycywgbXVzaWNpYW5zLCBkYW5jZXJzLCBhbmQgb3RoZXIgcGVyc29ucyB3aG8gYWN0LCBzaW5nLCBkZWxpdmVyLCBkZWNsYWltLCBwbGF5IGluLCBpbnRlcnByZXQgb3Igb3RoZXJ3aXNlIHBlcmZvcm0gbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3Mgb3IgZXhwcmVzc2lvbnMgb2YgZm9sa2xvcmU7IChpaSkgaW4gdGhlIGNhc2Ugb2YgYSBwaG9ub2dyYW0gdGhlIHByb2R1Y2VyIGJlaW5nIHRoZSBwZXJzb24gb3IgbGVnYWwgZW50aXR5IHdobyBmaXJzdCBmaXhlcyB0aGUgc291bmRzIG9mIGEgcGVyZm9ybWFuY2Ugb3Igb3RoZXIgc291bmRzOyBhbmQsIChpaWkpIGluIHRoZSBjYXNlIG9mIGJyb2FkY2FzdHMsIHRoZSBvcmdhbml6YXRpb24gdGhhdCB0cmFuc21pdHMgdGhlIGJyb2FkY2FzdC4KKyJXb3JrIiBtZWFucyB0aGUgbGl0ZXJhcnkgYW5kL29yIGFydGlzdGljIHdvcmsgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24gaW4gdGhlIGxpdGVyYXJ5LCBzY2llbnRpZmljIGFuZCBhcnRpc3RpYyBkb21haW4sIHdoYXRldmVyIG1heSBiZSB0aGUgbW9kZSBvciBmb3JtIG9mIGl0cyBleHByZXNzaW9uIGluY2x1ZGluZyBkaWdpdGFsIGZvcm0sIHN1Y2ggYXMgYSBib29rLCBwYW1waGxldCBhbmQgb3RoZXIgd3JpdGluZzsgYSBsZWN0dXJlLCBhZGRyZXNzLCBzZXJtb24gb3Igb3RoZXIgd29yayBvZiB0aGUgc2FtZSBuYXR1cmU7IGEgZHJhbWF0aWMgb3IgZHJhbWF0aWNvLW11c2ljYWwgd29yazsgYSBjaG9yZW9ncmFwaGljIHdvcmsgb3IgZW50ZXJ0YWlubWVudCBpbiBkdW1iIHNob3c7IGEgbXVzaWNhbCBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIGNpbmVtYXRvZ3JhcGh5OyBhIHdvcmsgb2YgZHJhd2luZywgcGFpbnRpbmcsIGFyY2hpdGVjdHVyZSwgc2N1bHB0dXJlLCBlbmdyYXZpbmcgb3IgbGl0aG9ncmFwaHk7IGEgcGhvdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIHBob3RvZ3JhcGh5OyBhIHdvcmsgb2YgYXBwbGllZCBhcnQ7IGFuIGlsbHVzdHJhdGlvbiwgbWFwLCBwbGFuLCBza2V0Y2ggb3IgdGhyZWUtZGltZW5zaW9uYWwgd29yayByZWxhdGl2ZSB0byBnZW9ncmFwaHksIHRvcG9ncmFwaHksIGFyY2hpdGVjdHVyZSBvciBzY2llbmNlOyBhIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByb3RlY3RlZCBhcyBhIGNvcHlyaWdodGFibGUgd29yazsgb3IgYSB3b3JrIHBlcmZvcm1lZCBieSBhIHZhcmlldHkgb3IgY2lyY3VzIHBlcmZvcm1lciB0byB0aGUgZXh0ZW50IGl0IGlzIG5vdCBvdGhlcndpc2UgY29uc2lkZXJlZCBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmsuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIlB1YmxpY2x5IFBlcmZvcm0iIG1lYW5zIHRvIHBlcmZvcm0gcHVibGljIHJlY2l0YXRpb25zIG9mIHRoZSBXb3JrIGFuZCB0byBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljIHRob3NlIHB1YmxpYyByZWNpdGF0aW9ucywgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MsIGluY2x1ZGluZyBieSB3aXJlIG9yIHdpcmVsZXNzIG1lYW5zIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlczsgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBXb3JrcyBpbiBzdWNoIGEgd2F5IHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlc2UgV29ya3MgZnJvbSBhIHBsYWNlIGFuZCBhdCBhIHBsYWNlIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbTsgdG8gcGVyZm9ybSB0aGUgV29yayB0byB0aGUgcHVibGljIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzIGFuZCB0aGUgY29tbXVuaWNhdGlvbiB0byB0aGUgcHVibGljIG9mIHRoZSBwZXJmb3JtYW5jZXMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBieSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZTsgdG8gYnJvYWRjYXN0IGFuZCByZWJyb2FkY2FzdCB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHNpZ25zLCBzb3VuZHMgb3IgaW1hZ2VzLgorIlJlcHJvZHVjZSIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyIGVsZWN0cm9uaWMgbWVkaXVtLgorMi4gRmFpciBEZWFsaW5nIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHVzZXMgZnJlZSBmcm9tIGNvcHlyaWdodCBvciByaWdodHMgYXJpc2luZyBmcm9tIGxpbWl0YXRpb25zIG9yIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcHJvdmlkZWQgZm9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgY29weXJpZ2h0IHByb3RlY3Rpb24gdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gUmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3Rpb25zLCBhbmQgdG8gUmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGlvbnM7IGFuZCwKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aW9ucy4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLCBidXQgb3RoZXJ3aXNlIHlvdSBoYXZlIG5vIHJpZ2h0cyB0byBtYWtlIEFkYXB0YXRpb25zLiBTdWJqZWN0IHRvIDgoZiksIGFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbiA0KGQpLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSBhYmlsaXR5IG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIFdvcmsgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFdoZW4gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yaywgWW91IG1heSBub3QgaW1wb3NlIGFueSBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSBhYmlsaXR5IG9mIGEgcmVjaXBpZW50IG9mIHRoZSBXb3JrIGZyb20gWW91IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFRoaXMgU2VjdGlvbiA0KGEpIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGlvbiwgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGlvbiBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3Rpb24sIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGlvbiBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IFNlY3Rpb24gNChjKSwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiBZb3UgRGlzdHJpYnV0ZSwgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBDb2xsZWN0aW9ucywgWW91IG11c3QsIHVubGVzcyBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBwdXJzdWFudCB0byBTZWN0aW9uIDQoYSksIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuLCBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uICgiQXR0cmlidXRpb24gUGFydGllcyIpIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IChpaSkgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyAoaWlpKSB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVUkksIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yay4gVGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gNChjKSBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3Rpb24sIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciwgaWYgYSBjcmVkaXQgZm9yIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycyBvZiBDb2xsZWN0aW9uIGFwcGVhcnMsIHRoZW4gYXMgcGFydCBvZiB0aGVzZSBjcmVkaXRzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgdGhlIGNyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seSB1c2UgdGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGF0dHJpYnV0aW9uIGluIHRoZSBtYW5uZXIgc2V0IG91dCBhYm92ZSBhbmQsIGJ5IGV4ZXJjaXNpbmcgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYXNzZXJ0IG9yIGltcGx5IGFueSBjb25uZWN0aW9uIHdpdGgsIHNwb25zb3JzaGlwIG9yIGVuZG9yc2VtZW50IGJ5IHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLCBhcyBhcHByb3ByaWF0ZSwgb2YgWW91IG9yIFlvdXIgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDoKKworTm9uLXdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsKK1dhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBpZiBZb3VyIGV4ZXJjaXNlIG9mIHN1Y2ggcmlnaHRzIGlzIGZvciBhIHB1cnBvc2Ugb3IgdXNlIHdoaWNoIGlzIG90aGVyd2lzZSB0aGFuIG5vbmNvbW1lcmNpYWwgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNChiKSBhbmQgb3RoZXJ3aXNlIHdhaXZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZTsgYW5kLAorVm9sdW50YXJ5IExpY2Vuc2UgU2NoZW1lcy4gVGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcywgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IsIGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNvciBpcyBhIG1lbWJlciBvZiBhIGNvbGxlY3Rpbmcgc29jaWV0eSB0aGF0IGFkbWluaXN0ZXJzIHZvbHVudGFyeSBsaWNlbnNpbmcgc2NoZW1lcywgdmlhIHRoYXQgc29jaWV0eSwgZnJvbSBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgdGhhdCBpcyBmb3IgYSBwdXJwb3NlIG9yIHVzZSB3aGljaCBpcyBvdGhlcndpc2UgdGhhbiBub25jb21tZXJjaWFsIGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQoYikuCitFeGNlcHQgYXMgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nIGJ5IHRoZSBMaWNlbnNvciBvciBhcyBtYXkgYmUgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgaWYgWW91IFJlcHJvZHVjZSwgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGVpdGhlciBieSBpdHNlbGYgb3IgYXMgcGFydCBvZiBhbnkgQ29sbGVjdGlvbnMsIFlvdSBtdXN0IG5vdCBkaXN0b3J0LCBtdXRpbGF0ZSwgbW9kaWZ5IG9yIHRha2Ugb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIFdvcmsgd2hpY2ggd291bGQgYmUgcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIG9yIHJlcHV0YXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aW9ucyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK1RoZSByaWdodHMgZ3JhbnRlZCB1bmRlciwgYW5kIHRoZSBzdWJqZWN0IG1hdHRlciByZWZlcmVuY2VkLCBpbiB0aGlzIExpY2Vuc2Ugd2VyZSBkcmFmdGVkIHV0aWxpemluZyB0aGUgdGVybWlub2xvZ3kgb2YgdGhlIEJlcm5lIENvbnZlbnRpb24gZm9yIHRoZSBQcm90ZWN0aW9uIG9mIExpdGVyYXJ5IGFuZCBBcnRpc3RpYyBXb3JrcyAoYXMgYW1lbmRlZCBvbiBTZXB0ZW1iZXIgMjgsIDE5NzkpLCB0aGUgUm9tZSBDb252ZW50aW9uIG9mIDE5NjEsIHRoZSBXSVBPIENvcHlyaWdodCBUcmVhdHkgb2YgMTk5NiwgdGhlIFdJUE8gUGVyZm9ybWFuY2VzIGFuZCBQaG9ub2dyYW1zIFRyZWF0eSBvZiAxOTk2IGFuZCB0aGUgVW5pdmVyc2FsIENvcHlyaWdodCBDb252ZW50aW9uIChhcyByZXZpc2VkIG9uIEp1bHkgMjQsIDE5NzEpLiBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIHRha2UgZWZmZWN0IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlIHNvdWdodCB0byBiZSBlbmZvcmNlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcHJvdmlzaW9ucyBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgdHJlYXR5IHByb3Zpc2lvbnMgaW4gdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LiBJZiB0aGUgc3RhbmRhcmQgc3VpdGUgb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGluY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgc3VjaCBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlOyB0aGlzIExpY2Vuc2UgaXMgbm90IGludGVuZGVkIHRvIHJlc3RyaWN0IHRoZSBsaWNlbnNlIG9mIGFueSByaWdodHMgdW5kZXIgYXBwbGljYWJsZSBsYXcuCitDcmVhdGl2ZSBDb21tb25zIE5vdGljZQorCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIGJ5IGVpdGhlciBwYXJ0eSBvZiB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgdHJhZGVtYXJrIHJlc3RyaWN0aW9uIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGlzIExpY2Vuc2UuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtU0EtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOWZkNmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTEuMApAQCAtMCwwICsxLDY0IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMS4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERSQUZUIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitCeSBvZmZlcmluZyB0aGUgV29yayBmb3IgcHVibGljIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0LCB0byB0aGUgYmVzdCBvZiBMaWNlbnNvcmBzIGtub3dsZWRnZSBhZnRlciByZWFzb25hYmxlIGlucXVpcnk6CitMaWNlbnNvciBoYXMgc2VjdXJlZCBhbGwgcmlnaHRzIGluIHRoZSBXb3JrIG5lY2Vzc2FyeSB0byBncmFudCB0aGUgbGljZW5zZSByaWdodHMgaGVyZXVuZGVyIGFuZCB0byBwZXJtaXQgdGhlIGxhd2Z1bCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpdGhvdXQgWW91IGhhdmluZyBhbnkgb2JsaWdhdGlvbiB0byBwYXkgYW55IHJveWFsdGllcywgY29tcHVsc29yeSBsaWNlbnNlIGZlZXMsIHJlc2lkdWFscyBvciBhbnkgb3RoZXIgcGF5bWVudHM7CitUaGUgV29yayBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgY29weXJpZ2h0LCB0cmFkZW1hcmssIHB1YmxpY2l0eSByaWdodHMsIGNvbW1vbiBsYXcgcmlnaHRzIG9yIGFueSBvdGhlciByaWdodCBvZiBhbnkgdGhpcmQgcGFydHkgb3IgY29uc3RpdHV0ZSBkZWZhbWF0aW9uLCBpbnZhc2lvbiBvZiBwcml2YWN5IG9yIG90aGVyIHRvcnRpb3VzIGluanVyeSB0byBhbnkgdGhpcmQgcGFydHkuCitFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSElTIExJQ0VOU0UgT1IgT1RIRVJXSVNFIEFHUkVFRCBJTiBXUklUSU5HIE9SIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSEUgV09SSyBJUyBMSUNFTlNFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgQ09OVEVOVFMgT1IgQUNDVVJBQ1kgT0YgVEhFIFdPUksuCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIEFORCBFWENFUFQgRk9SIERBTUFHRVMgQVJJU0lORyBGUk9NIExJQUJJTElUWSBUTyBBIFRISVJEIFBBUlRZIFJFU1VMVElORyBGUk9NIEJSRUFDSCBPRiBUSEUgV0FSUkFOVElFUyBJTiBTRUNUSU9OIDUsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtU0EtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMDdmODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTIuMApAQCAtMCwwICsxLDY4IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMi4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiTGljZW5zZSBFbGVtZW50cyIgbWVhbnMgdGhlIGZvbGxvd2luZyBoaWdoLWxldmVsIGxpY2Vuc2UgYXR0cmlidXRlcyBhcyBzZWxlY3RlZCBieSBMaWNlbnNvciBhbmQgaW5kaWNhdGVkIGluIHRoZSB0aXRsZSBvZiB0aGlzIExpY2Vuc2U6IEF0dHJpYnV0aW9uLCBOb25jb21tZXJjaWFsLCBTaGFyZUFsaWtlLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9ucyA0KGUpIGFuZCA0KGYpLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSwgb3IgYSBDcmVhdGl2ZSBDb21tb25zIGlDb21tb25zIGxpY2Vuc2UgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSAoZS5nLiBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMi4wIEphcGFuKS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugb3Igb3RoZXIgbGljZW5zZSBzcGVjaWZpZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiBlYWNoIERlcml2YXRpdmUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIERlcml2YXRpdmUgV29ya3MgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLCBhbmQgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBEZXJpdmF0aXZlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIERlcml2YXRpdmUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrIGlmIHRoYXQgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0yLjUgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTIuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjVjY2NhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0yLjUKQEAgLTAsMCArMSw2OCBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1TaGFyZUFsaWtlIDIuNQorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIkxpY2Vuc2UgRWxlbWVudHMiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlIGF0dHJpYnV0ZXMgYXMgc2VsZWN0ZWQgYnkgTGljZW5zb3IgYW5kIGluZGljYXRlZCBpbiB0aGUgdGl0bGUgb2YgdGhpcyBMaWNlbnNlOiBBdHRyaWJ1dGlvbiwgTm9uY29tbWVyY2lhbCwgU2hhcmVBbGlrZS4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbnMgNChlKSBhbmQgNChmKS4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChkKSwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGQpLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlLCBvciBhIENyZWF0aXZlIENvbW1vbnMgaUNvbW1vbnMgbGljZW5zZSB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlIChlLmcuIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAyLjUgSmFwYW4pLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSBvciBvdGhlciBsaWNlbnNlIHNwZWNpZmllZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgKGlpKSBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrIGlmIHRoYXQgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0zLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGNiMWM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0zLjAKQEAgLTAsMCArMSw3NCBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAzLjAgVW5wb3J0ZWQKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVE8gVEhFIEVYVEVOVCBUSElTIExJQ0VOU0UgTUFZIEJFIENPTlNJREVSRUQgVE8gQkUgQSBDT05UUkFDVCwgVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQWRhcHRhdGlvbiIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmssIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBkZXJpdmF0aXZlIHdvcmssIGFycmFuZ2VtZW50IG9mIG11c2ljIG9yIG90aGVyIGFsdGVyYXRpb25zIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgb3IgcGhvbm9ncmFtIG9yIHBlcmZvcm1hbmNlIGFuZCBpbmNsdWRlcyBjaW5lbWF0b2dyYXBoaWMgYWRhcHRhdGlvbnMgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQgaW5jbHVkaW5nIGluIGFueSBmb3JtIHJlY29nbml6YWJseSBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgd29yaywgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiQ29sbGVjdGlvbiIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoIGFzIGVuY3ljbG9wZWRpYXMgYW5kIGFudGhvbG9naWVzLCBvciBwZXJmb3JtYW5jZXMsIHBob25vZ3JhbXMgb3IgYnJvYWRjYXN0cywgb3Igb3RoZXIgd29ya3Mgb3Igc3ViamVjdCBtYXR0ZXIgb3RoZXIgdGhhbiB3b3JrcyBsaXN0ZWQgaW4gU2VjdGlvbiAxKGcpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGFycmFuZ2VtZW50IG9mIHRoZWlyIGNvbnRlbnRzLCBjb25zdGl0dXRlIGludGVsbGVjdHVhbCBjcmVhdGlvbnMsIGluIHdoaWNoIHRoZSBXb3JrIGlzIGluY2x1ZGVkIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0gYWxvbmcgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgd2hpY2ggdG9nZXRoZXIgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBhYm92ZSkgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGlzdHJpYnV0ZSIgbWVhbnMgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB0aGUgb3JpZ2luYWwgYW5kIGNvcGllcyBvZiB0aGUgV29yayBvciBBZGFwdGF0aW9uLCBhcyBhcHByb3ByaWF0ZSwgdGhyb3VnaCBzYWxlIG9yIG90aGVyIHRyYW5zZmVyIG9mIG93bmVyc2hpcC4KKyJMaWNlbnNlIEVsZW1lbnRzIiBtZWFucyB0aGUgZm9sbG93aW5nIGhpZ2gtbGV2ZWwgbGljZW5zZSBhdHRyaWJ1dGVzIGFzIHNlbGVjdGVkIGJ5IExpY2Vuc29yIGFuZCBpbmRpY2F0ZWQgaW4gdGhlIHRpdGxlIG9mIHRoaXMgTGljZW5zZTogQXR0cmlidXRpb24sIE5vbmNvbW1lcmNpYWwsIFNoYXJlQWxpa2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHRoYXQgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zLCBpbiB0aGUgY2FzZSBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHdobyBjcmVhdGVkIHRoZSBXb3JrIG9yIGlmIG5vIGluZGl2aWR1YWwgb3IgZW50aXR5IGNhbiBiZSBpZGVudGlmaWVkLCB0aGUgcHVibGlzaGVyOyBhbmQgaW4gYWRkaXRpb24gKGkpIGluIHRoZSBjYXNlIG9mIGEgcGVyZm9ybWFuY2UgdGhlIGFjdG9ycywgc2luZ2VycywgbXVzaWNpYW5zLCBkYW5jZXJzLCBhbmQgb3RoZXIgcGVyc29ucyB3aG8gYWN0LCBzaW5nLCBkZWxpdmVyLCBkZWNsYWltLCBwbGF5IGluLCBpbnRlcnByZXQgb3Igb3RoZXJ3aXNlIHBlcmZvcm0gbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3Mgb3IgZXhwcmVzc2lvbnMgb2YgZm9sa2xvcmU7IChpaSkgaW4gdGhlIGNhc2Ugb2YgYSBwaG9ub2dyYW0gdGhlIHByb2R1Y2VyIGJlaW5nIHRoZSBwZXJzb24gb3IgbGVnYWwgZW50aXR5IHdobyBmaXJzdCBmaXhlcyB0aGUgc291bmRzIG9mIGEgcGVyZm9ybWFuY2Ugb3Igb3RoZXIgc291bmRzOyBhbmQsIChpaWkpIGluIHRoZSBjYXNlIG9mIGJyb2FkY2FzdHMsIHRoZSBvcmdhbml6YXRpb24gdGhhdCB0cmFuc21pdHMgdGhlIGJyb2FkY2FzdC4KKyJXb3JrIiBtZWFucyB0aGUgbGl0ZXJhcnkgYW5kL29yIGFydGlzdGljIHdvcmsgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24gaW4gdGhlIGxpdGVyYXJ5LCBzY2llbnRpZmljIGFuZCBhcnRpc3RpYyBkb21haW4sIHdoYXRldmVyIG1heSBiZSB0aGUgbW9kZSBvciBmb3JtIG9mIGl0cyBleHByZXNzaW9uIGluY2x1ZGluZyBkaWdpdGFsIGZvcm0sIHN1Y2ggYXMgYSBib29rLCBwYW1waGxldCBhbmQgb3RoZXIgd3JpdGluZzsgYSBsZWN0dXJlLCBhZGRyZXNzLCBzZXJtb24gb3Igb3RoZXIgd29yayBvZiB0aGUgc2FtZSBuYXR1cmU7IGEgZHJhbWF0aWMgb3IgZHJhbWF0aWNvLW11c2ljYWwgd29yazsgYSBjaG9yZW9ncmFwaGljIHdvcmsgb3IgZW50ZXJ0YWlubWVudCBpbiBkdW1iIHNob3c7IGEgbXVzaWNhbCBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIGNpbmVtYXRvZ3JhcGh5OyBhIHdvcmsgb2YgZHJhd2luZywgcGFpbnRpbmcsIGFyY2hpdGVjdHVyZSwgc2N1bHB0dXJlLCBlbmdyYXZpbmcgb3IgbGl0aG9ncmFwaHk7IGEgcGhvdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIHBob3RvZ3JhcGh5OyBhIHdvcmsgb2YgYXBwbGllZCBhcnQ7IGFuIGlsbHVzdHJhdGlvbiwgbWFwLCBwbGFuLCBza2V0Y2ggb3IgdGhyZWUtZGltZW5zaW9uYWwgd29yayByZWxhdGl2ZSB0byBnZW9ncmFwaHksIHRvcG9ncmFwaHksIGFyY2hpdGVjdHVyZSBvciBzY2llbmNlOyBhIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByb3RlY3RlZCBhcyBhIGNvcHlyaWdodGFibGUgd29yazsgb3IgYSB3b3JrIHBlcmZvcm1lZCBieSBhIHZhcmlldHkgb3IgY2lyY3VzIHBlcmZvcm1lciB0byB0aGUgZXh0ZW50IGl0IGlzIG5vdCBvdGhlcndpc2UgY29uc2lkZXJlZCBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmsuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIlB1YmxpY2x5IFBlcmZvcm0iIG1lYW5zIHRvIHBlcmZvcm0gcHVibGljIHJlY2l0YXRpb25zIG9mIHRoZSBXb3JrIGFuZCB0byBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljIHRob3NlIHB1YmxpYyByZWNpdGF0aW9ucywgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MsIGluY2x1ZGluZyBieSB3aXJlIG9yIHdpcmVsZXNzIG1lYW5zIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlczsgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBXb3JrcyBpbiBzdWNoIGEgd2F5IHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlc2UgV29ya3MgZnJvbSBhIHBsYWNlIGFuZCBhdCBhIHBsYWNlIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbTsgdG8gcGVyZm9ybSB0aGUgV29yayB0byB0aGUgcHVibGljIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzIGFuZCB0aGUgY29tbXVuaWNhdGlvbiB0byB0aGUgcHVibGljIG9mIHRoZSBwZXJmb3JtYW5jZXMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBieSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZTsgdG8gYnJvYWRjYXN0IGFuZCByZWJyb2FkY2FzdCB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHNpZ25zLCBzb3VuZHMgb3IgaW1hZ2VzLgorIlJlcHJvZHVjZSIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyIGVsZWN0cm9uaWMgbWVkaXVtLgorMi4gRmFpciBEZWFsaW5nIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHVzZXMgZnJlZSBmcm9tIGNvcHlyaWdodCBvciByaWdodHMgYXJpc2luZyBmcm9tIGxpbWl0YXRpb25zIG9yIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcHJvdmlkZWQgZm9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgY29weXJpZ2h0IHByb3RlY3Rpb24gdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gUmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3Rpb25zLCBhbmQgdG8gUmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGlvbnM7Cit0byBjcmVhdGUgYW5kIFJlcHJvZHVjZSBBZGFwdGF0aW9ucyBwcm92aWRlZCB0aGF0IGFueSBzdWNoIEFkYXB0YXRpb24sIGluY2x1ZGluZyBhbnkgdHJhbnNsYXRpb24gaW4gYW55IG1lZGl1bSwgdGFrZXMgcmVhc29uYWJsZSBzdGVwcyB0byBjbGVhcmx5IGxhYmVsLCBkZW1hcmNhdGUgb3Igb3RoZXJ3aXNlIGlkZW50aWZ5IHRoYXQgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gdGhlIG9yaWdpbmFsIFdvcmsuIEZvciBleGFtcGxlLCBhIHRyYW5zbGF0aW9uIGNvdWxkIGJlIG1hcmtlZCAiVGhlIG9yaWdpbmFsIHdvcmsgd2FzIHRyYW5zbGF0ZWQgZnJvbSBFbmdsaXNoIHRvIFNwYW5pc2gsIiBvciBhIG1vZGlmaWNhdGlvbiBjb3VsZCBpbmRpY2F0ZSAiVGhlIG9yaWdpbmFsIHdvcmsgaGFzIGJlZW4gbW9kaWZpZWQuIjsKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aW9uczsgYW5kLAordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSBBZGFwdGF0aW9ucy4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBTdWJqZWN0IHRvIFNlY3Rpb24gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQoZSkuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgV29yayB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIFdvcmsgZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gVGhpcyBTZWN0aW9uIDQoYSkgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aW9uLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aW9uIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGQpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYW4gQWRhcHRhdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBBZGFwdGF0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGQpLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSBhbiBBZGFwdGF0aW9uIG9ubHkgdW5kZXI6IChpKSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlOyAoaWkpIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZTsgKGlpaSkgYSBDcmVhdGl2ZSBDb21tb25zIGp1cmlzZGljdGlvbiBsaWNlbnNlIChlaXRoZXIgdGhpcyBvciBhIGxhdGVyIGxpY2Vuc2UgdmVyc2lvbikgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSAoZS5nLiwgQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1TaGFyZUFsaWtlIDMuMCBVUykgKCJBcHBsaWNhYmxlIExpY2Vuc2UiKS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVUkksIGZvciBBcHBsaWNhYmxlIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIGVhY2ggQWRhcHRhdGlvbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBBZGFwdGF0aW9uIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgQWRhcHRhdGlvbiB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhlIEFwcGxpY2FibGUgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgYXMgaW5jbHVkZWQgaW4gdGhlIEFkYXB0YXRpb24gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBBZGFwdGF0aW9uLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBBZGFwdGF0aW9uIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIEFkYXB0YXRpb24gZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChiKSBhcHBsaWVzIHRvIHRoZSBBZGFwdGF0aW9uIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgQWRhcHRhdGlvbiBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbi1uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgWW91IERpc3RyaWJ1dGUsIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCwgdW5sZXNzIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHB1cnN1YW50IHRvIFNlY3Rpb24gNChhKSwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4sIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gKCJBdHRyaWJ1dGlvbiBQYXJ0aWVzIikgaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQsIChpdikgY29uc2lzdGVudCB3aXRoIFNlY3Rpb24gMyhiKSwgaW4gdGhlIGNhc2Ugb2YgYW4gQWRhcHRhdGlvbiwgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgQWRhcHRhdGlvbiAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBUaGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiA0KGQpIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIsIGlmIGEgY3JlZGl0IGZvciBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMgb2YgdGhlIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiBhcHBlYXJzLCB0aGVuIGFzIHBhcnQgb2YgdGhlc2UgY3JlZGl0cyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHRoZSBjcmVkaXRzIGZvciB0aGUgb3RoZXIgY29udHJpYnV0aW5nIGF1dGhvcnMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBZb3UgbWF5IG9ubHkgdXNlIHRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIGZvciB0aGUgcHVycG9zZSBvZiBhdHRyaWJ1dGlvbiBpbiB0aGUgbWFubmVyIHNldCBvdXQgYWJvdmUgYW5kLCBieSBleGVyY2lzaW5nIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgWW91IG1heSBub3QgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGFzc2VydCBvciBpbXBseSBhbnkgY29ubmVjdGlvbiB3aXRoLCBzcG9uc29yc2hpcCBvciBlbmRvcnNlbWVudCBieSB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcywgYXMgYXBwcm9wcmlhdGUsIG9mIFlvdSBvciBZb3VyIHVzZSBvZiB0aGUgV29yaywgd2l0aG91dCB0aGUgc2VwYXJhdGUsIGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6CisKK05vbi13YWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW5ub3QgYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7CitXYWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgaWYgWW91ciBleGVyY2lzZSBvZiBzdWNoIHJpZ2h0cyBpcyBmb3IgYSBwdXJwb3NlIG9yIHVzZSB3aGljaCBpcyBvdGhlcndpc2UgdGhhbiBub25jb21tZXJjaWFsIGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQoYykgYW5kIG90aGVyd2lzZSB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWU7IGFuZCwKK1ZvbHVudGFyeSBMaWNlbnNlIFNjaGVtZXMuIFRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zb3IgaXMgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW5nIHNvY2lldHkgdGhhdCBhZG1pbmlzdGVycyB2b2x1bnRhcnkgbGljZW5zaW5nIHNjaGVtZXMsIHZpYSB0aGF0IHNvY2lldHksIGZyb20gYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIHRoYXQgaXMgZm9yIGEgcHVycG9zZSBvciB1c2Ugd2hpY2ggaXMgb3RoZXJ3aXNlIHRoYW4gbm9uY29tbWVyY2lhbCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA0KGMpLgorRXhjZXB0IGFzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZyBieSB0aGUgTGljZW5zb3Igb3IgYXMgbWF5IGJlIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGlmIFlvdSBSZXByb2R1Y2UsIERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBlaXRoZXIgYnkgaXRzZWxmIG9yIGFzIHBhcnQgb2YgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCBub3QgZGlzdG9ydCwgbXV0aWxhdGUsIG1vZGlmeSBvciB0YWtlIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBXb3JrIHdoaWNoIHdvdWxkIGJlIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3JgcyBob25vciBvciByZXB1dGF0aW9uLiBMaWNlbnNvciBhZ3JlZXMgdGhhdCBpbiB0aG9zZSBqdXJpc2RpY3Rpb25zIChlLmcuIEphcGFuKSwgaW4gd2hpY2ggYW55IGV4ZXJjaXNlIG9mIHRoZSByaWdodCBncmFudGVkIGluIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHRoZSByaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSB3b3VsZCBiZSBkZWVtZWQgdG8gYmUgYSBkaXN0b3J0aW9uLCBtdXRpbGF0aW9uLCBtb2RpZmljYXRpb24gb3Igb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIGFuZCByZXB1dGF0aW9uLCB0aGUgTGljZW5zb3Igd2lsbCB3YWl2ZSBvciBub3QgYXNzZXJ0LCBhcyBhcHByb3ByaWF0ZSwgdGhpcyBTZWN0aW9uLCB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdywgdG8gZW5hYmxlIFlvdSB0byByZWFzb25hYmx5IGV4ZXJjaXNlIFlvdXIgcmlnaHQgdW5kZXIgU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAocmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgYnV0IG5vdCBvdGhlcndpc2UuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORyBBTkQgVE8gVEhFIEZVTExFU1QgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBUSElTIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIGFuIEFkYXB0YXRpb24sIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIsIGFuZCB0aGUgc3ViamVjdCBtYXR0ZXIgcmVmZXJlbmNlZCwgaW4gdGhpcyBMaWNlbnNlIHdlcmUgZHJhZnRlZCB1dGlsaXppbmcgdGhlIHRlcm1pbm9sb2d5IG9mIHRoZSBCZXJuZSBDb252ZW50aW9uIGZvciB0aGUgUHJvdGVjdGlvbiBvZiBMaXRlcmFyeSBhbmQgQXJ0aXN0aWMgV29ya3MgKGFzIGFtZW5kZWQgb24gU2VwdGVtYmVyIDI4LCAxOTc5KSwgdGhlIFJvbWUgQ29udmVudGlvbiBvZiAxOTYxLCB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IG9mIDE5OTYsIHRoZSBXSVBPIFBlcmZvcm1hbmNlcyBhbmQgUGhvbm9ncmFtcyBUcmVhdHkgb2YgMTk5NiBhbmQgdGhlIFVuaXZlcnNhbCBDb3B5cmlnaHQgQ29udmVudGlvbiAoYXMgcmV2aXNlZCBvbiBKdWx5IDI0LCAxOTcxKS4gVGhlc2UgcmlnaHRzIGFuZCBzdWJqZWN0IG1hdHRlciB0YWtlIGVmZmVjdCBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBMaWNlbnNlIHRlcm1zIGFyZSBzb3VnaHQgdG8gYmUgZW5mb3JjZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHByb3Zpc2lvbnMgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIHRyZWF0eSBwcm92aXNpb25zIGluIHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdy4gSWYgdGhlIHN0YW5kYXJkIHN1aXRlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdyBpbmNsdWRlcyBhZGRpdGlvbmFsIHJpZ2h0cyBub3QgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIHN1Y2ggYWRkaXRpb25hbCByaWdodHMgYXJlIGRlZW1lZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZTsgdGhpcyBMaWNlbnNlIGlzIG5vdCBpbnRlbmRlZCB0byByZXN0cmljdCB0aGUgbGljZW5zZSBvZiBhbnkgcmlnaHRzIHVuZGVyIGFwcGxpY2FibGUgbGF3LgorQ3JlYXRpdmUgQ29tbW9ucyBOb3RpY2UKKworQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgQ3JlYXRpdmUgQ29tbW9ucyBkb2VzIG5vdCBhdXRob3JpemUgdGhlIHVzZSBieSBlaXRoZXIgcGFydHkgb2YgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIHRyYWRlbWFyayByZXN0cmljdGlvbiBkb2VzIG5vdCBmb3JtIHBhcnQgb2YgdGhpcyBMaWNlbnNlLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5ELTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzU4MTg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0xLjAKQEAgLTAsMCArMSw1OSBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9EZXJpdnMgMS4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERSQUZUIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworQnkgb2ZmZXJpbmcgdGhlIFdvcmsgZm9yIHB1YmxpYyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgcmVwcmVzZW50cyBhbmQgd2FycmFudHMgdGhhdCwgdG8gdGhlIGJlc3Qgb2YgTGljZW5zb3JgcyBrbm93bGVkZ2UgYWZ0ZXIgcmVhc29uYWJsZSBpbnF1aXJ5OgorTGljZW5zb3IgaGFzIHNlY3VyZWQgYWxsIHJpZ2h0cyBpbiB0aGUgV29yayBuZWNlc3NhcnkgdG8gZ3JhbnQgdGhlIGxpY2Vuc2UgcmlnaHRzIGhlcmV1bmRlciBhbmQgdG8gcGVybWl0IHRoZSBsYXdmdWwgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aXRob3V0IFlvdSBoYXZpbmcgYW55IG9ibGlnYXRpb24gdG8gcGF5IGFueSByb3lhbHRpZXMsIGNvbXB1bHNvcnkgbGljZW5zZSBmZWVzLCByZXNpZHVhbHMgb3IgYW55IG90aGVyIHBheW1lbnRzOworVGhlIFdvcmsgZG9lcyBub3QgaW5mcmluZ2UgdGhlIGNvcHlyaWdodCwgdHJhZGVtYXJrLCBwdWJsaWNpdHkgcmlnaHRzLCBjb21tb24gbGF3IHJpZ2h0cyBvciBhbnkgb3RoZXIgcmlnaHQgb2YgYW55IHRoaXJkIHBhcnR5IG9yIGNvbnN0aXR1dGUgZGVmYW1hdGlvbiwgaW52YXNpb24gb2YgcHJpdmFjeSBvciBvdGhlciB0b3J0aW91cyBpbmp1cnkgdG8gYW55IHRoaXJkIHBhcnR5LgorRVhDRVBUIEFTIEVYUFJFU1NMWSBTVEFURUQgSU4gVEhJUyBMSUNFTlNFIE9SIE9USEVSV0lTRSBBR1JFRUQgSU4gV1JJVElORyBPUiBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgVEhFIFdPUksgSVMgTElDRU5TRUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIENPTlRFTlRTIE9SIEFDQ1VSQUNZIE9GIFRIRSBXT1JLLgorNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBBTkQgRVhDRVBUIEZPUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBMSUFCSUxJVFkgVE8gQSBUSElSRCBQQVJUWSBSRVNVTFRJTkcgRlJPTSBCUkVBQ0ggT0YgVEhFIFdBUlJBTlRJRVMgSU4gU0VDVElPTiA1LCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjOTc0YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi4wCkBAIC0wLDAgKzEsNjIgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vRGVyaXZzIDIuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3MuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIHdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsuCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIHNvY2lldHkgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMsIGJ1dCBvdGhlcndpc2UgeW91IGhhdmUgbm8gcmlnaHRzIHRvIG1ha2UgRGVyaXZhdGl2ZSBXb3Jrcy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGFuZCB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yay4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgTUFURVJJQUxTLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi41IGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0yLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVlNDU0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi41CkBAIC0wLDAgKzEsNjIgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vRGVyaXZzIDIuNQorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3MuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIHdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsuCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIHNvY2lldHkgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMsIGJ1dCBvdGhlcndpc2UgeW91IGhhdmUgbm8gcmlnaHRzIHRvIG1ha2UgRGVyaXZhdGl2ZSBXb3Jrcy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChiKSwgYXMgcmVxdWVzdGVkLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciAoaWkpIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4gYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGFuZCB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yay4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgTUFURVJJQUxTLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMy4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY2NGUzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMy4wCkBAIC0wLDAgKzEsNjggQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCitBdHRyaWJ1dGlvbi1Ob0Rlcml2cyAzLjAgVW5wb3J0ZWQKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVE8gVEhFIEVYVEVOVCBUSElTIExJQ0VOU0UgTUFZIEJFIENPTlNJREVSRUQgVE8gQkUgQSBDT05UUkFDVCwgVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQWRhcHRhdGlvbiIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmssIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBkZXJpdmF0aXZlIHdvcmssIGFycmFuZ2VtZW50IG9mIG11c2ljIG9yIG90aGVyIGFsdGVyYXRpb25zIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgb3IgcGhvbm9ncmFtIG9yIHBlcmZvcm1hbmNlIGFuZCBpbmNsdWRlcyBjaW5lbWF0b2dyYXBoaWMgYWRhcHRhdGlvbnMgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQgaW5jbHVkaW5nIGluIGFueSBmb3JtIHJlY29nbml6YWJseSBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgd29yaywgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiQ29sbGVjdGlvbiIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoIGFzIGVuY3ljbG9wZWRpYXMgYW5kIGFudGhvbG9naWVzLCBvciBwZXJmb3JtYW5jZXMsIHBob25vZ3JhbXMgb3IgYnJvYWRjYXN0cywgb3Igb3RoZXIgd29ya3Mgb3Igc3ViamVjdCBtYXR0ZXIgb3RoZXIgdGhhbiB3b3JrcyBsaXN0ZWQgaW4gU2VjdGlvbiAxKGYpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGFycmFuZ2VtZW50IG9mIHRoZWlyIGNvbnRlbnRzLCBjb25zdGl0dXRlIGludGVsbGVjdHVhbCBjcmVhdGlvbnMsIGluIHdoaWNoIHRoZSBXb3JrIGlzIGluY2x1ZGVkIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0gYWxvbmcgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgd2hpY2ggdG9nZXRoZXIgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBhYm92ZSkgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGlzdHJpYnV0ZSIgbWVhbnMgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB0aGUgb3JpZ2luYWwgYW5kIGNvcGllcyBvZiB0aGUgV29yayB0aHJvdWdoIHNhbGUgb3Igb3RoZXIgdHJhbnNmZXIgb2Ygb3duZXJzaGlwLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB0aGF0IG9mZmVyKHMpIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucywgaW4gdGhlIGNhc2Ugb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB3aG8gY3JlYXRlZCB0aGUgV29yayBvciBpZiBubyBpbmRpdmlkdWFsIG9yIGVudGl0eSBjYW4gYmUgaWRlbnRpZmllZCwgdGhlIHB1Ymxpc2hlcjsgYW5kIGluIGFkZGl0aW9uIChpKSBpbiB0aGUgY2FzZSBvZiBhIHBlcmZvcm1hbmNlIHRoZSBhY3RvcnMsIHNpbmdlcnMsIG11c2ljaWFucywgZGFuY2VycywgYW5kIG90aGVyIHBlcnNvbnMgd2hvIGFjdCwgc2luZywgZGVsaXZlciwgZGVjbGFpbSwgcGxheSBpbiwgaW50ZXJwcmV0IG9yIG90aGVyd2lzZSBwZXJmb3JtIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzIG9yIGV4cHJlc3Npb25zIG9mIGZvbGtsb3JlOyAoaWkpIGluIHRoZSBjYXNlIG9mIGEgcGhvbm9ncmFtIHRoZSBwcm9kdWNlciBiZWluZyB0aGUgcGVyc29uIG9yIGxlZ2FsIGVudGl0eSB3aG8gZmlyc3QgZml4ZXMgdGhlIHNvdW5kcyBvZiBhIHBlcmZvcm1hbmNlIG9yIG90aGVyIHNvdW5kczsgYW5kLCAoaWlpKSBpbiB0aGUgY2FzZSBvZiBicm9hZGNhc3RzLCB0aGUgb3JnYW5pemF0aW9uIHRoYXQgdHJhbnNtaXRzIHRoZSBicm9hZGNhc3QuCisiV29yayIgbWVhbnMgdGhlIGxpdGVyYXJ5IGFuZC9vciBhcnRpc3RpYyB3b3JrIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBwcm9kdWN0aW9uIGluIHRoZSBsaXRlcmFyeSwgc2NpZW50aWZpYyBhbmQgYXJ0aXN0aWMgZG9tYWluLCB3aGF0ZXZlciBtYXkgYmUgdGhlIG1vZGUgb3IgZm9ybSBvZiBpdHMgZXhwcmVzc2lvbiBpbmNsdWRpbmcgZGlnaXRhbCBmb3JtLCBzdWNoIGFzIGEgYm9vaywgcGFtcGhsZXQgYW5kIG90aGVyIHdyaXRpbmc7IGEgbGVjdHVyZSwgYWRkcmVzcywgc2VybW9uIG9yIG90aGVyIHdvcmsgb2YgdGhlIHNhbWUgbmF0dXJlOyBhIGRyYW1hdGljIG9yIGRyYW1hdGljby1tdXNpY2FsIHdvcms7IGEgY2hvcmVvZ3JhcGhpYyB3b3JrIG9yIGVudGVydGFpbm1lbnQgaW4gZHVtYiBzaG93OyBhIG11c2ljYWwgY29tcG9zaXRpb24gd2l0aCBvciB3aXRob3V0IHdvcmRzOyBhIGNpbmVtYXRvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBjaW5lbWF0b2dyYXBoeTsgYSB3b3JrIG9mIGRyYXdpbmcsIHBhaW50aW5nLCBhcmNoaXRlY3R1cmUsIHNjdWxwdHVyZSwgZW5ncmF2aW5nIG9yIGxpdGhvZ3JhcGh5OyBhIHBob3RvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBwaG90b2dyYXBoeTsgYSB3b3JrIG9mIGFwcGxpZWQgYXJ0OyBhbiBpbGx1c3RyYXRpb24sIG1hcCwgcGxhbiwgc2tldGNoIG9yIHRocmVlLWRpbWVuc2lvbmFsIHdvcmsgcmVsYXRpdmUgdG8gZ2VvZ3JhcGh5LCB0b3BvZ3JhcGh5LCBhcmNoaXRlY3R1cmUgb3Igc2NpZW5jZTsgYSBwZXJmb3JtYW5jZTsgYSBicm9hZGNhc3Q7IGEgcGhvbm9ncmFtOyBhIGNvbXBpbGF0aW9uIG9mIGRhdGEgdG8gdGhlIGV4dGVudCBpdCBpcyBwcm90ZWN0ZWQgYXMgYSBjb3B5cmlnaHRhYmxlIHdvcms7IG9yIGEgd29yayBwZXJmb3JtZWQgYnkgYSB2YXJpZXR5IG9yIGNpcmN1cyBwZXJmb3JtZXIgdG8gdGhlIGV4dGVudCBpdCBpcyBub3Qgb3RoZXJ3aXNlIGNvbnNpZGVyZWQgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyJQdWJsaWNseSBQZXJmb3JtIiBtZWFucyB0byBwZXJmb3JtIHB1YmxpYyByZWNpdGF0aW9ucyBvZiB0aGUgV29yayBhbmQgdG8gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyB0aG9zZSBwdWJsaWMgcmVjaXRhdGlvbnMsIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzLCBpbmNsdWRpbmcgYnkgd2lyZSBvciB3aXJlbGVzcyBtZWFucyBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZXM7IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgV29ya3MgaW4gc3VjaCBhIHdheSB0aGF0IG1lbWJlcnMgb2YgdGhlIHB1YmxpYyBtYXkgYWNjZXNzIHRoZXNlIFdvcmtzIGZyb20gYSBwbGFjZSBhbmQgYXQgYSBwbGFjZSBpbmRpdmlkdWFsbHkgY2hvc2VuIGJ5IHRoZW07IHRvIHBlcmZvcm0gdGhlIFdvcmsgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyBhbmQgdGhlIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBvZiB0aGUgcGVyZm9ybWFuY2VzIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgYnkgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2U7IHRvIGJyb2FkY2FzdCBhbmQgcmVicm9hZGNhc3QgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyBzaWducywgc291bmRzIG9yIGltYWdlcy4KKyJSZXByb2R1Y2UiIG1lYW5zIHRvIG1ha2UgY29waWVzIG9mIHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGJ5IHNvdW5kIG9yIHZpc3VhbCByZWNvcmRpbmdzIGFuZCB0aGUgcmlnaHQgb2YgZml4YXRpb24gYW5kIHJlcHJvZHVjaW5nIGZpeGF0aW9ucyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIHN0b3JhZ2Ugb2YgYSBwcm90ZWN0ZWQgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtIGluIGRpZ2l0YWwgZm9ybSBvciBvdGhlciBlbGVjdHJvbmljIG1lZGl1bS4KKzIuIEZhaXIgRGVhbGluZyBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSB1c2VzIGZyZWUgZnJvbSBjb3B5cmlnaHQgb3IgcmlnaHRzIGFyaXNpbmcgZnJvbSBsaW1pdGF0aW9ucyBvciBleGNlcHRpb25zIHRoYXQgYXJlIHByb3ZpZGVkIGZvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGNvcHlyaWdodCBwcm90ZWN0aW9uIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIFJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aW9ucywgYW5kIHRvIFJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3Rpb25zOyBhbmQsCit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGlvbnMuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDoKKworTm9uLXdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsKK1dhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7IGFuZCwKK1ZvbHVudGFyeSBMaWNlbnNlIFNjaGVtZXMuIFRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLCBidXQgb3RoZXJ3aXNlIHlvdSBoYXZlIG5vIHJpZ2h0cyB0byBtYWtlIEFkYXB0YXRpb25zLiBTdWJqZWN0IHRvIFNlY3Rpb24gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmssIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgV29yayBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3Rpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYiksIGFzIHJlcXVlc3RlZC4KK0lmIFlvdSBEaXN0cmlidXRlLCBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCwgdW5sZXNzIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHB1cnN1YW50IHRvIFNlY3Rpb24gNChhKSwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4sIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gKCJBdHRyaWJ1dGlvbiBQYXJ0aWVzIikgaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBUaGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiA0KGIpIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIGNyZWRpdCBmb3IgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIHRoZSBDb2xsZWN0aW9uIGFwcGVhcnMsIHRoZW4gYXMgcGFydCBvZiB0aGVzZSBjcmVkaXRzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgdGhlIGNyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seSB1c2UgdGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGF0dHJpYnV0aW9uIGluIHRoZSBtYW5uZXIgc2V0IG91dCBhYm92ZSBhbmQsIGJ5IGV4ZXJjaXNpbmcgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYXNzZXJ0IG9yIGltcGx5IGFueSBjb25uZWN0aW9uIHdpdGgsIHNwb25zb3JzaGlwIG9yIGVuZG9yc2VtZW50IGJ5IHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLCBhcyBhcHByb3ByaWF0ZSwgb2YgWW91IG9yIFlvdXIgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMuCitFeGNlcHQgYXMgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nIGJ5IHRoZSBMaWNlbnNvciBvciBhcyBtYXkgYmUgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgaWYgWW91IFJlcHJvZHVjZSwgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGVpdGhlciBieSBpdHNlbGYgb3IgYXMgcGFydCBvZiBhbnkgQ29sbGVjdGlvbnMsIFlvdSBtdXN0IG5vdCBkaXN0b3J0LCBtdXRpbGF0ZSwgbW9kaWZ5IG9yIHRha2Ugb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIFdvcmsgd2hpY2ggd291bGQgYmUgcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIG9yIHJlcHV0YXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aW9ucyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK1RoZSByaWdodHMgZ3JhbnRlZCB1bmRlciwgYW5kIHRoZSBzdWJqZWN0IG1hdHRlciByZWZlcmVuY2VkLCBpbiB0aGlzIExpY2Vuc2Ugd2VyZSBkcmFmdGVkIHV0aWxpemluZyB0aGUgdGVybWlub2xvZ3kgb2YgdGhlIEJlcm5lIENvbnZlbnRpb24gZm9yIHRoZSBQcm90ZWN0aW9uIG9mIExpdGVyYXJ5IGFuZCBBcnRpc3RpYyBXb3JrcyAoYXMgYW1lbmRlZCBvbiBTZXB0ZW1iZXIgMjgsIDE5NzkpLCB0aGUgUm9tZSBDb252ZW50aW9uIG9mIDE5NjEsIHRoZSBXSVBPIENvcHlyaWdodCBUcmVhdHkgb2YgMTk5NiwgdGhlIFdJUE8gUGVyZm9ybWFuY2VzIGFuZCBQaG9ub2dyYW1zIFRyZWF0eSBvZiAxOTk2IGFuZCB0aGUgVW5pdmVyc2FsIENvcHlyaWdodCBDb252ZW50aW9uIChhcyByZXZpc2VkIG9uIEp1bHkgMjQsIDE5NzEpLiBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIHRha2UgZWZmZWN0IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlIHNvdWdodCB0byBiZSBlbmZvcmNlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcHJvdmlzaW9ucyBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgdHJlYXR5IHByb3Zpc2lvbnMgaW4gdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LiBJZiB0aGUgc3RhbmRhcmQgc3VpdGUgb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGluY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgc3VjaCBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlOyB0aGlzIExpY2Vuc2UgaXMgbm90IGludGVuZGVkIHRvIHJlc3RyaWN0IHRoZSBsaWNlbnNlIG9mIGFueSByaWdodHMgdW5kZXIgYXBwbGljYWJsZSBsYXcuCitDcmVhdGl2ZSBDb21tb25zIE5vdGljZQorCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIGJ5IGVpdGhlciBwYXJ0eSBvZiB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgdHJhZGVtYXJrIHJlc3RyaWN0aW9uIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGlzIExpY2Vuc2UuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMTM5NGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTEuMApAQCAtMCwwICsxLDYzIEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDEuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBEUkFGVCBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiBlYWNoIERlcml2YXRpdmUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIERlcml2YXRpdmUgV29ya3MgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLCBhbmQgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBEZXJpdmF0aXZlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIERlcml2YXRpdmUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK0J5IG9mZmVyaW5nIHRoZSBXb3JrIGZvciBwdWJsaWMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQsIHRvIHRoZSBiZXN0IG9mIExpY2Vuc29yYHMga25vd2xlZGdlIGFmdGVyIHJlYXNvbmFibGUgaW5xdWlyeToKK0xpY2Vuc29yIGhhcyBzZWN1cmVkIGFsbCByaWdodHMgaW4gdGhlIFdvcmsgbmVjZXNzYXJ5IHRvIGdyYW50IHRoZSBsaWNlbnNlIHJpZ2h0cyBoZXJldW5kZXIgYW5kIHRvIHBlcm1pdCB0aGUgbGF3ZnVsIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2l0aG91dCBZb3UgaGF2aW5nIGFueSBvYmxpZ2F0aW9uIHRvIHBheSBhbnkgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50czsKK1RoZSBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgcHVibGljaXR5IHJpZ2h0cywgY29tbW9uIGxhdyByaWdodHMgb3IgYW55IG90aGVyIHJpZ2h0IG9mIGFueSB0aGlyZCBwYXJ0eSBvciBjb25zdGl0dXRlIGRlZmFtYXRpb24sIGludmFzaW9uIG9mIHByaXZhY3kgb3Igb3RoZXIgdG9ydGlvdXMgaW5qdXJ5IHRvIGFueSB0aGlyZCBwYXJ0eS4KK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU1RBVEVEIElOIFRISVMgTElDRU5TRSBPUiBPVEhFUldJU0UgQUdSRUVEIElOIFdSSVRJTkcgT1IgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBXT1JLIElTIExJQ0VOU0VEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBDT05URU5UUyBPUiBBQ0NVUkFDWSBPRiBUSEUgV09SSy4KKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgQU5EIEVYQ0VQVCBGT1IgREFNQUdFUyBBUklTSU5HIEZST00gTElBQklMSVRZIFRPIEEgVEhJUkQgUEFSVFkgUkVTVUxUSU5HIEZST00gQlJFQUNIIE9GIFRIRSBXQVJSQU5USUVTIElOIFNFQ1RJT04gNSwgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1TQS0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyNDM0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMi4wCkBAIC0wLDAgKzEsNjcgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMi4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiTGljZW5zZSBFbGVtZW50cyIgbWVhbnMgdGhlIGZvbGxvd2luZyBoaWdoLWxldmVsIGxpY2Vuc2UgYXR0cmlidXRlcyBhcyBzZWxlY3RlZCBieSBMaWNlbnNvciBhbmQgaW5kaWNhdGVkIGluIHRoZSB0aXRsZSBvZiB0aGlzIExpY2Vuc2U6IEF0dHJpYnV0aW9uLCBTaGFyZUFsaWtlLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3MuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIHdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsuCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIHNvY2lldHkgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlLCBvciBhIENyZWF0aXZlIENvbW1vbnMgaUNvbW1vbnMgbGljZW5zZSB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlIChlLmcuIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMi4wIEphcGFuKS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugb3Igb3RoZXIgbGljZW5zZSBzcGVjaWZpZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiBlYWNoIERlcml2YXRpdmUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIERlcml2YXRpdmUgV29ya3MgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLCBhbmQgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBEZXJpdmF0aXZlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIERlcml2YXRpdmUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBNQVRFUklBTFMsIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTIuNSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMi41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOGRkNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTIuNQpAQCAtMCwwICsxLDY3IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDIuNQorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIkxpY2Vuc2UgRWxlbWVudHMiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlIGF0dHJpYnV0ZXMgYXMgc2VsZWN0ZWQgYnkgTGljZW5zb3IgYW5kIGluZGljYXRlZCBpbiB0aGUgdGl0bGUgb2YgdGhpcyBMaWNlbnNlOiBBdHRyaWJ1dGlvbiwgU2hhcmVBbGlrZS4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSB3b3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBzb2NpZXR5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGMpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYyksIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhIGxhdGVyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UsIG9yIGEgQ3JlYXRpdmUgQ29tbW9ucyBpQ29tbW9ucyBsaWNlbnNlIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UgKGUuZy4gQXR0cmlidXRpb24tU2hhcmVBbGlrZSAyLjUgSmFwYW4pLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSBvciBvdGhlciBsaWNlbnNlIHNwZWNpZmllZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIChpaSkgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBNQVRFUklBTFMsIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTMuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYmJkNmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTMuMApAQCAtMCwwICsxLDc0IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworQXR0cmlidXRpb24tU2hhcmVBbGlrZSAzLjAgVW5wb3J0ZWQKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVE8gVEhFIEVYVEVOVCBUSElTIExJQ0VOU0UgTUFZIEJFIENPTlNJREVSRUQgVE8gQkUgQSBDT05UUkFDVCwgVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQWRhcHRhdGlvbiIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmssIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBkZXJpdmF0aXZlIHdvcmssIGFycmFuZ2VtZW50IG9mIG11c2ljIG9yIG90aGVyIGFsdGVyYXRpb25zIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgb3IgcGhvbm9ncmFtIG9yIHBlcmZvcm1hbmNlIGFuZCBpbmNsdWRlcyBjaW5lbWF0b2dyYXBoaWMgYWRhcHRhdGlvbnMgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQgaW5jbHVkaW5nIGluIGFueSBmb3JtIHJlY29nbml6YWJseSBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgd29yaywgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiQ29sbGVjdGlvbiIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoIGFzIGVuY3ljbG9wZWRpYXMgYW5kIGFudGhvbG9naWVzLCBvciBwZXJmb3JtYW5jZXMsIHBob25vZ3JhbXMgb3IgYnJvYWRjYXN0cywgb3Igb3RoZXIgd29ya3Mgb3Igc3ViamVjdCBtYXR0ZXIgb3RoZXIgdGhhbiB3b3JrcyBsaXN0ZWQgaW4gU2VjdGlvbiAxKGYpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGFycmFuZ2VtZW50IG9mIHRoZWlyIGNvbnRlbnRzLCBjb25zdGl0dXRlIGludGVsbGVjdHVhbCBjcmVhdGlvbnMsIGluIHdoaWNoIHRoZSBXb3JrIGlzIGluY2x1ZGVkIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0gYWxvbmcgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgd2hpY2ggdG9nZXRoZXIgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiQ3JlYXRpdmUgQ29tbW9ucyBDb21wYXRpYmxlIExpY2Vuc2UiIG1lYW5zIGEgbGljZW5zZSB0aGF0IGlzIGxpc3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9jb21wYXRpYmxlbGljZW5zZXMgdGhhdCBoYXMgYmVlbiBhcHByb3ZlZCBieSBDcmVhdGl2ZSBDb21tb25zIGFzIGJlaW5nIGVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG8gdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcsIGF0IGEgbWluaW11bSwgYmVjYXVzZSB0aGF0IGxpY2Vuc2U6IChpKSBjb250YWlucyB0ZXJtcyB0aGF0IGhhdmUgdGhlIHNhbWUgcHVycG9zZSwgbWVhbmluZyBhbmQgZWZmZWN0IGFzIHRoZSBMaWNlbnNlIEVsZW1lbnRzIG9mIHRoaXMgTGljZW5zZTsgYW5kLCAoaWkpIGV4cGxpY2l0bHkgcGVybWl0cyB0aGUgcmVsaWNlbnNpbmcgb2YgYWRhcHRhdGlvbnMgb2Ygd29ya3MgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhhdCBsaWNlbnNlIHVuZGVyIHRoaXMgTGljZW5zZSBvciBhIENyZWF0aXZlIENvbW1vbnMganVyaXNkaWN0aW9uIGxpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZS4KKyJEaXN0cmlidXRlIiBtZWFucyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHRoZSBvcmlnaW5hbCBhbmQgY29waWVzIG9mIHRoZSBXb3JrIG9yIEFkYXB0YXRpb24sIGFzIGFwcHJvcHJpYXRlLCB0aHJvdWdoIHNhbGUgb3Igb3RoZXIgdHJhbnNmZXIgb2Ygb3duZXJzaGlwLgorIkxpY2Vuc2UgRWxlbWVudHMiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlIGF0dHJpYnV0ZXMgYXMgc2VsZWN0ZWQgYnkgTGljZW5zb3IgYW5kIGluZGljYXRlZCBpbiB0aGUgdGl0bGUgb2YgdGhpcyBMaWNlbnNlOiBBdHRyaWJ1dGlvbiwgU2hhcmVBbGlrZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgdGhhdCBvZmZlcihzKSB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMsIGluIHRoZSBjYXNlIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgd2hvIGNyZWF0ZWQgdGhlIFdvcmsgb3IgaWYgbm8gaW5kaXZpZHVhbCBvciBlbnRpdHkgY2FuIGJlIGlkZW50aWZpZWQsIHRoZSBwdWJsaXNoZXI7IGFuZCBpbiBhZGRpdGlvbiAoaSkgaW4gdGhlIGNhc2Ugb2YgYSBwZXJmb3JtYW5jZSB0aGUgYWN0b3JzLCBzaW5nZXJzLCBtdXNpY2lhbnMsIGRhbmNlcnMsIGFuZCBvdGhlciBwZXJzb25zIHdobyBhY3QsIHNpbmcsIGRlbGl2ZXIsIGRlY2xhaW0sIHBsYXkgaW4sIGludGVycHJldCBvciBvdGhlcndpc2UgcGVyZm9ybSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrcyBvciBleHByZXNzaW9ucyBvZiBmb2xrbG9yZTsgKGlpKSBpbiB0aGUgY2FzZSBvZiBhIHBob25vZ3JhbSB0aGUgcHJvZHVjZXIgYmVpbmcgdGhlIHBlcnNvbiBvciBsZWdhbCBlbnRpdHkgd2hvIGZpcnN0IGZpeGVzIHRoZSBzb3VuZHMgb2YgYSBwZXJmb3JtYW5jZSBvciBvdGhlciBzb3VuZHM7IGFuZCwgKGlpaSkgaW4gdGhlIGNhc2Ugb2YgYnJvYWRjYXN0cywgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHRyYW5zbWl0cyB0aGUgYnJvYWRjYXN0LgorIldvcmsiIG1lYW5zIHRoZSBsaXRlcmFyeSBhbmQvb3IgYXJ0aXN0aWMgd29yayBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcHJvZHVjdGlvbiBpbiB0aGUgbGl0ZXJhcnksIHNjaWVudGlmaWMgYW5kIGFydGlzdGljIGRvbWFpbiwgd2hhdGV2ZXIgbWF5IGJlIHRoZSBtb2RlIG9yIGZvcm0gb2YgaXRzIGV4cHJlc3Npb24gaW5jbHVkaW5nIGRpZ2l0YWwgZm9ybSwgc3VjaCBhcyBhIGJvb2ssIHBhbXBobGV0IGFuZCBvdGhlciB3cml0aW5nOyBhIGxlY3R1cmUsIGFkZHJlc3MsIHNlcm1vbiBvciBvdGhlciB3b3JrIG9mIHRoZSBzYW1lIG5hdHVyZTsgYSBkcmFtYXRpYyBvciBkcmFtYXRpY28tbXVzaWNhbCB3b3JrOyBhIGNob3Jlb2dyYXBoaWMgd29yayBvciBlbnRlcnRhaW5tZW50IGluIGR1bWIgc2hvdzsgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIHdpdGggb3Igd2l0aG91dCB3b3JkczsgYSBjaW5lbWF0b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gY2luZW1hdG9ncmFwaHk7IGEgd29yayBvZiBkcmF3aW5nLCBwYWludGluZywgYXJjaGl0ZWN0dXJlLCBzY3VscHR1cmUsIGVuZ3JhdmluZyBvciBsaXRob2dyYXBoeTsgYSBwaG90b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gcGhvdG9ncmFwaHk7IGEgd29yayBvZiBhcHBsaWVkIGFydDsgYW4gaWxsdXN0cmF0aW9uLCBtYXAsIHBsYW4sIHNrZXRjaCBvciB0aHJlZS1kaW1lbnNpb25hbCB3b3JrIHJlbGF0aXZlIHRvIGdlb2dyYXBoeSwgdG9wb2dyYXBoeSwgYXJjaGl0ZWN0dXJlIG9yIHNjaWVuY2U7IGEgcGVyZm9ybWFuY2U7IGEgYnJvYWRjYXN0OyBhIHBob25vZ3JhbTsgYSBjb21waWxhdGlvbiBvZiBkYXRhIHRvIHRoZSBleHRlbnQgaXQgaXMgcHJvdGVjdGVkIGFzIGEgY29weXJpZ2h0YWJsZSB3b3JrOyBvciBhIHdvcmsgcGVyZm9ybWVkIGJ5IGEgdmFyaWV0eSBvciBjaXJjdXMgcGVyZm9ybWVyIHRvIHRoZSBleHRlbnQgaXQgaXMgbm90IG90aGVyd2lzZSBjb25zaWRlcmVkIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yay4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiUHVibGljbHkgUGVyZm9ybSIgbWVhbnMgdG8gcGVyZm9ybSBwdWJsaWMgcmVjaXRhdGlvbnMgb2YgdGhlIFdvcmsgYW5kIHRvIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMgdGhvc2UgcHVibGljIHJlY2l0YXRpb25zLCBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcywgaW5jbHVkaW5nIGJ5IHdpcmUgb3Igd2lyZWxlc3MgbWVhbnMgb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2VzOyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIFdvcmtzIGluIHN1Y2ggYSB3YXkgdGhhdCBtZW1iZXJzIG9mIHRoZSBwdWJsaWMgbWF5IGFjY2VzcyB0aGVzZSBXb3JrcyBmcm9tIGEgcGxhY2UgYW5kIGF0IGEgcGxhY2UgaW5kaXZpZHVhbGx5IGNob3NlbiBieSB0aGVtOyB0byBwZXJmb3JtIHRoZSBXb3JrIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MgYW5kIHRoZSBjb21tdW5pY2F0aW9uIHRvIHRoZSBwdWJsaWMgb2YgdGhlIHBlcmZvcm1hbmNlcyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIGJ5IHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlOyB0byBicm9hZGNhc3QgYW5kIHJlYnJvYWRjYXN0IHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgc2lnbnMsIHNvdW5kcyBvciBpbWFnZXMuCisiUmVwcm9kdWNlIiBtZWFucyB0byBtYWtlIGNvcGllcyBvZiB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBieSBzb3VuZCBvciB2aXN1YWwgcmVjb3JkaW5ncyBhbmQgdGhlIHJpZ2h0IG9mIGZpeGF0aW9uIGFuZCByZXByb2R1Y2luZyBmaXhhdGlvbnMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBzdG9yYWdlIG9mIGEgcHJvdGVjdGVkIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSBpbiBkaWdpdGFsIGZvcm0gb3Igb3RoZXIgZWxlY3Ryb25pYyBtZWRpdW0uCisyLiBGYWlyIERlYWxpbmcgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgdXNlcyBmcmVlIGZyb20gY29weXJpZ2h0IG9yIHJpZ2h0cyBhcmlzaW5nIGZyb20gbGltaXRhdGlvbnMgb3IgZXhjZXB0aW9ucyB0aGF0IGFyZSBwcm92aWRlZCBmb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBjb3B5cmlnaHQgcHJvdGVjdGlvbiB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byBSZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGlvbnMsIGFuZCB0byBSZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aW9uczsKK3RvIGNyZWF0ZSBhbmQgUmVwcm9kdWNlIEFkYXB0YXRpb25zIHByb3ZpZGVkIHRoYXQgYW55IHN1Y2ggQWRhcHRhdGlvbiwgaW5jbHVkaW5nIGFueSB0cmFuc2xhdGlvbiBpbiBhbnkgbWVkaXVtLCB0YWtlcyByZWFzb25hYmxlIHN0ZXBzIHRvIGNsZWFybHkgbGFiZWwsIGRlbWFyY2F0ZSBvciBvdGhlcndpc2UgaWRlbnRpZnkgdGhhdCBjaGFuZ2VzIHdlcmUgbWFkZSB0byB0aGUgb3JpZ2luYWwgV29yay4gRm9yIGV4YW1wbGUsIGEgdHJhbnNsYXRpb24gY291bGQgYmUgbWFya2VkICJUaGUgb3JpZ2luYWwgd29yayB3YXMgdHJhbnNsYXRlZCBmcm9tIEVuZ2xpc2ggdG8gU3BhbmlzaCwiIG9yIGEgbW9kaWZpY2F0aW9uIGNvdWxkIGluZGljYXRlICJUaGUgb3JpZ2luYWwgd29yayBoYXMgYmVlbiBtb2RpZmllZC4iOwordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3Rpb25zOyBhbmQsCit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIEFkYXB0YXRpb25zLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6CisKK05vbi13YWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW5ub3QgYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7CitXYWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOyBhbmQsCitWb2x1bnRhcnkgTGljZW5zZSBTY2hlbWVzLiBUaGUgTGljZW5zb3Igd2FpdmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcywgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IsIGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNvciBpcyBhIG1lbWJlciBvZiBhIGNvbGxlY3Rpbmcgc29jaWV0eSB0aGF0IGFkbWluaXN0ZXJzIHZvbHVudGFyeSBsaWNlbnNpbmcgc2NoZW1lcywgdmlhIHRoYXQgc29jaWV0eSwgZnJvbSBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gU3ViamVjdCB0byBTZWN0aW9uIDgoZiksIGFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgV29yayB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIFdvcmsgZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gVGhpcyBTZWN0aW9uIDQoYSkgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aW9uLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aW9uIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGMpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYW4gQWRhcHRhdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBBZGFwdGF0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGMpLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSBhbiBBZGFwdGF0aW9uIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mOiAoaSkgdGhpcyBMaWNlbnNlOyAoaWkpIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZTsgKGlpaSkgYSBDcmVhdGl2ZSBDb21tb25zIGp1cmlzZGljdGlvbiBsaWNlbnNlIChlaXRoZXIgdGhpcyBvciBhIGxhdGVyIGxpY2Vuc2UgdmVyc2lvbikgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSAoZS5nLiwgQXR0cmlidXRpb24tU2hhcmVBbGlrZSAzLjAgVVMpKTsgKGl2KSBhIENyZWF0aXZlIENvbW1vbnMgQ29tcGF0aWJsZSBMaWNlbnNlLiBJZiB5b3UgbGljZW5zZSB0aGUgQWRhcHRhdGlvbiB1bmRlciBvbmUgb2YgdGhlIGxpY2Vuc2VzIG1lbnRpb25lZCBpbiAoaXYpLCB5b3UgbXVzdCBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbnNlLiBJZiB5b3UgbGljZW5zZSB0aGUgQWRhcHRhdGlvbiB1bmRlciB0aGUgdGVybXMgb2YgYW55IG9mIHRoZSBsaWNlbnNlcyBtZW50aW9uZWQgaW4gKGkpLCAoaWkpIG9yIChpaWkpICh0aGUgIkFwcGxpY2FibGUgTGljZW5zZSIpLCB5b3UgbXVzdCBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhlIEFwcGxpY2FibGUgTGljZW5zZSBnZW5lcmFsbHkgYW5kIHRoZSBmb2xsb3dpbmcgcHJvdmlzaW9uczogKEkpIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVVJJIGZvciwgdGhlIEFwcGxpY2FibGUgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgZWFjaCBBZGFwdGF0aW9uIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm07IChJSSkgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgQWRhcHRhdGlvbiB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlIG9yIHRoZSBhYmlsaXR5IG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIEFkYXB0YXRpb24gdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlOyAoSUlJKSBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIGFzIGluY2x1ZGVkIGluIHRoZSBBZGFwdGF0aW9uIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm07IChJVikgd2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBBZGFwdGF0aW9uLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBBZGFwdGF0aW9uIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIEFkYXB0YXRpb24gZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChiKSBhcHBsaWVzIHRvIHRoZSBBZGFwdGF0aW9uIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgQWRhcHRhdGlvbiBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLgorSWYgWW91IERpc3RyaWJ1dGUsIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCwgdW5sZXNzIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHB1cnN1YW50IHRvIFNlY3Rpb24gNChhKSwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4sIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gKCJBdHRyaWJ1dGlvbiBQYXJ0aWVzIikgaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgKGl2KSAsIGNvbnNpc3RlbnQgd2l0aCBTc2VjdGlvbiAzKGIpLCBpbiB0aGUgY2FzZSBvZiBhbiBBZGFwdGF0aW9uLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBBZGFwdGF0aW9uIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIDQoYykgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24sIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciwgaWYgYSBjcmVkaXQgZm9yIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycyBvZiB0aGUgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uIGFwcGVhcnMsIHRoZW4gYXMgcGFydCBvZiB0aGVzZSBjcmVkaXRzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgdGhlIGNyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seSB1c2UgdGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGF0dHJpYnV0aW9uIGluIHRoZSBtYW5uZXIgc2V0IG91dCBhYm92ZSBhbmQsIGJ5IGV4ZXJjaXNpbmcgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYXNzZXJ0IG9yIGltcGx5IGFueSBjb25uZWN0aW9uIHdpdGgsIHNwb25zb3JzaGlwIG9yIGVuZG9yc2VtZW50IGJ5IHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLCBhcyBhcHByb3ByaWF0ZSwgb2YgWW91IG9yIFlvdXIgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMuCitFeGNlcHQgYXMgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nIGJ5IHRoZSBMaWNlbnNvciBvciBhcyBtYXkgYmUgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgaWYgWW91IFJlcHJvZHVjZSwgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGVpdGhlciBieSBpdHNlbGYgb3IgYXMgcGFydCBvZiBhbnkgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0IG5vdCBkaXN0b3J0LCBtdXRpbGF0ZSwgbW9kaWZ5IG9yIHRha2Ugb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIFdvcmsgd2hpY2ggd291bGQgYmUgcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIG9yIHJlcHV0YXRpb24uIExpY2Vuc29yIGFncmVlcyB0aGF0IGluIHRob3NlIGp1cmlzZGljdGlvbnMgKGUuZy4gSmFwYW4pLCBpbiB3aGljaCBhbnkgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0IGdyYW50ZWQgaW4gU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAodGhlIHJpZ2h0IHRvIG1ha2UgQWRhcHRhdGlvbnMpIHdvdWxkIGJlIGRlZW1lZCB0byBiZSBhIGRpc3RvcnRpb24sIG11dGlsYXRpb24sIG1vZGlmaWNhdGlvbiBvciBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3IgYW5kIHJlcHV0YXRpb24sIHRoZSBMaWNlbnNvciB3aWxsIHdhaXZlIG9yIG5vdCBhc3NlcnQsIGFzIGFwcHJvcHJpYXRlLCB0aGlzIFNlY3Rpb24sIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LCB0byBlbmFibGUgWW91IHRvIHJlYXNvbmFibHkgZXhlcmNpc2UgWW91ciByaWdodCB1bmRlciBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlIChyaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSBidXQgbm90IG90aGVyd2lzZS4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3Rpb24sIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gYW4gQWRhcHRhdGlvbiwgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK1RoZSByaWdodHMgZ3JhbnRlZCB1bmRlciwgYW5kIHRoZSBzdWJqZWN0IG1hdHRlciByZWZlcmVuY2VkLCBpbiB0aGlzIExpY2Vuc2Ugd2VyZSBkcmFmdGVkIHV0aWxpemluZyB0aGUgdGVybWlub2xvZ3kgb2YgdGhlIEJlcm5lIENvbnZlbnRpb24gZm9yIHRoZSBQcm90ZWN0aW9uIG9mIExpdGVyYXJ5IGFuZCBBcnRpc3RpYyBXb3JrcyAoYXMgYW1lbmRlZCBvbiBTZXB0ZW1iZXIgMjgsIDE5NzkpLCB0aGUgUm9tZSBDb252ZW50aW9uIG9mIDE5NjEsIHRoZSBXSVBPIENvcHlyaWdodCBUcmVhdHkgb2YgMTk5NiwgdGhlIFdJUE8gUGVyZm9ybWFuY2VzIGFuZCBQaG9ub2dyYW1zIFRyZWF0eSBvZiAxOTk2IGFuZCB0aGUgVW5pdmVyc2FsIENvcHlyaWdodCBDb252ZW50aW9uIChhcyByZXZpc2VkIG9uIEp1bHkgMjQsIDE5NzEpLiBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIHRha2UgZWZmZWN0IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlIHNvdWdodCB0byBiZSBlbmZvcmNlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcHJvdmlzaW9ucyBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgdHJlYXR5IHByb3Zpc2lvbnMgaW4gdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LiBJZiB0aGUgc3RhbmRhcmQgc3VpdGUgb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGluY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgc3VjaCBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlOyB0aGlzIExpY2Vuc2UgaXMgbm90IGludGVuZGVkIHRvIHJlc3RyaWN0IHRoZSBsaWNlbnNlIG9mIGFueSByaWdodHMgdW5kZXIgYXBwbGljYWJsZSBsYXcuCitDcmVhdGl2ZSBDb21tb25zIE5vdGljZQorCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIGJ5IGVpdGhlciBwYXJ0eSBvZiB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgdHJhZGVtYXJrIHJlc3RyaWN0aW9uIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGUgTGljZW5zZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MwLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MwLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmNmODhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQzAtMS4wCkBAIC0wLDAgKzEsMzIgQEAKKworQ3JlYXRpdmUgQ29tbW9ucyBaZXJvIDEuMCBVbml2ZXJzYWwgKENDMCkKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRE9DVU1FTlQgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBVU0UgT0YgVEhJUyBET0NVTUVOVCBPUiBUSEUgSU5GT1JNQVRJT04gT1IgV09SS1MgUFJPVklERUQgSEVSRVVOREVSLCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBUSEUgVVNFIE9GIFRISVMgRE9DVU1FTlQgT1IgVEhFIElORk9STUFUSU9OIE9SIFdPUktTIFBST1ZJREVEIEhFUkVVTkRFUi4KK1N0YXRlbWVudCBvZiBQdXJwb3NlCisKK1RoZSBsYXdzIG9mIG1vc3QganVyaXNkaWN0aW9ucyB0aHJvdWdob3V0IHRoZSB3b3JsZCBhdXRvbWF0aWNhbGx5IGNvbmZlciBleGNsdXNpdmUgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyAoZGVmaW5lZCBiZWxvdykgdXBvbiB0aGUgY3JlYXRvciBhbmQgc3Vic2VxdWVudCBvd25lcihzKSAoZWFjaCBhbmQgYWxsLCBhbiAib3duZXIiKSBvZiBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgYW5kL29yIGEgZGF0YWJhc2UgKGVhY2gsIGEgIldvcmsiKS4KKworQ2VydGFpbiBvd25lcnMgd2lzaCB0byBwZXJtYW5lbnRseSByZWxpbnF1aXNoIHRob3NlIHJpZ2h0cyB0byBhIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbnRyaWJ1dGluZyB0byBhIGNvbW1vbnMgb2YgY3JlYXRpdmUsIGN1bHR1cmFsIGFuZCBzY2llbnRpZmljIHdvcmtzICgiQ29tbW9ucyIpIHRoYXQgdGhlIHB1YmxpYyBjYW4gcmVsaWFibHkgYW5kIHdpdGhvdXQgZmVhciBvZiBsYXRlciBjbGFpbXMgb2YgaW5mcmluZ2VtZW50IGJ1aWxkIHVwb24sIG1vZGlmeSwgaW5jb3Jwb3JhdGUgaW4gb3RoZXIgd29ya3MsIHJldXNlIGFuZCByZWRpc3RyaWJ1dGUgYXMgZnJlZWx5IGFzIHBvc3NpYmxlIGluIGFueSBmb3JtIHdoYXRzb2V2ZXIgYW5kIGZvciBhbnkgcHVycG9zZXMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gY29tbWVyY2lhbCBwdXJwb3Nlcy4gVGhlc2Ugb3duZXJzIG1heSBjb250cmlidXRlIHRvIHRoZSBDb21tb25zIHRvIHByb21vdGUgdGhlIGlkZWFsIG9mIGEgZnJlZSBjdWx0dXJlIGFuZCB0aGUgZnVydGhlciBwcm9kdWN0aW9uIG9mIGNyZWF0aXZlLCBjdWx0dXJhbCBhbmQgc2NpZW50aWZpYyB3b3Jrcywgb3IgdG8gZ2FpbiByZXB1dGF0aW9uIG9yIGdyZWF0ZXIgZGlzdHJpYnV0aW9uIGZvciB0aGVpciBXb3JrIGluIHBhcnQgdGhyb3VnaCB0aGUgdXNlIGFuZCBlZmZvcnRzIG9mIG90aGVycy4KKworRm9yIHRoZXNlIGFuZC9vciBvdGhlciBwdXJwb3NlcyBhbmQgbW90aXZhdGlvbnMsIGFuZCB3aXRob3V0IGFueSBleHBlY3RhdGlvbiBvZiBhZGRpdGlvbmFsIGNvbnNpZGVyYXRpb24gb3IgY29tcGVuc2F0aW9uLCB0aGUgcGVyc29uIGFzc29jaWF0aW5nIENDMCB3aXRoIGEgV29yayAodGhlICJBZmZpcm1lciIpLCB0byB0aGUgZXh0ZW50IHRoYXQgaGUgb3Igc2hlIGlzIGFuIG93bmVyIG9mIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgaW4gdGhlIFdvcmssIHZvbHVudGFyaWx5IGVsZWN0cyB0byBhcHBseSBDQzAgdG8gdGhlIFdvcmsgYW5kIHB1YmxpY2x5IGRpc3RyaWJ1dGUgdGhlIFdvcmsgdW5kZXIgaXRzIHRlcm1zLCB3aXRoIGtub3dsZWRnZSBvZiBoaXMgb3IgaGVyIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgaW4gdGhlIFdvcmsgYW5kIHRoZSBtZWFuaW5nIGFuZCBpbnRlbmRlZCBsZWdhbCBlZmZlY3Qgb2YgQ0MwIG9uIHRob3NlIHJpZ2h0cy4KKworMS4gQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cy4gQSBXb3JrIG1hZGUgYXZhaWxhYmxlIHVuZGVyIENDMCBtYXkgYmUgcHJvdGVjdGVkIGJ5IGNvcHlyaWdodCBhbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgKCJDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIikuIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgdGhlIGZvbGxvd2luZzoKKwordGhlIHJpZ2h0IHRvIHJlcHJvZHVjZSwgYWRhcHQsIGRpc3RyaWJ1dGUsIHBlcmZvcm0sIGRpc3BsYXksIGNvbW11bmljYXRlLCBhbmQgdHJhbnNsYXRlIGEgV29yazsKK21vcmFsIHJpZ2h0cyByZXRhaW5lZCBieSB0aGUgb3JpZ2luYWwgYXV0aG9yKHMpIGFuZC9vciBwZXJmb3JtZXIocyk7CitwdWJsaWNpdHkgYW5kIHByaXZhY3kgcmlnaHRzIHBlcnRhaW5pbmcgdG8gYSBwZXJzb25gcyBpbWFnZSBvciBsaWtlbmVzcyBkZXBpY3RlZCBpbiBhIFdvcms7CityaWdodHMgcHJvdGVjdGluZyBhZ2FpbnN0IHVuZmFpciBjb21wZXRpdGlvbiBpbiByZWdhcmRzIHRvIGEgV29yaywgc3ViamVjdCB0byB0aGUgbGltaXRhdGlvbnMgaW4gcGFyYWdyYXBoIDQoYSksIGJlbG93OworcmlnaHRzIHByb3RlY3RpbmcgdGhlIGV4dHJhY3Rpb24sIGRpc3NlbWluYXRpb24sIHVzZSBhbmQgcmV1c2Ugb2YgZGF0YSBpbiBhIFdvcms7CitkYXRhYmFzZSByaWdodHMgKHN1Y2ggYXMgdGhvc2UgYXJpc2luZyB1bmRlciBEaXJlY3RpdmUgOTYvOS9FQyBvZiB0aGUgRXVyb3BlYW4gUGFybGlhbWVudCBhbmQgb2YgdGhlIENvdW5jaWwgb2YgMTEgTWFyY2ggMTk5NiBvbiB0aGUgbGVnYWwgcHJvdGVjdGlvbiBvZiBkYXRhYmFzZXMsIGFuZCB1bmRlciBhbnkgbmF0aW9uYWwgaW1wbGVtZW50YXRpb24gdGhlcmVvZiwgaW5jbHVkaW5nIGFueSBhbWVuZGVkIG9yIHN1Y2Nlc3NvciB2ZXJzaW9uIG9mIHN1Y2ggZGlyZWN0aXZlKTsgYW5kCitvdGhlciBzaW1pbGFyLCBlcXVpdmFsZW50IG9yIGNvcnJlc3BvbmRpbmcgcmlnaHRzIHRocm91Z2hvdXQgdGhlIHdvcmxkIGJhc2VkIG9uIGFwcGxpY2FibGUgbGF3IG9yIHRyZWF0eSwgYW5kIGFueSBuYXRpb25hbCBpbXBsZW1lbnRhdGlvbnMgdGhlcmVvZi4KKzIuIFdhaXZlci4gVG8gdGhlIGdyZWF0ZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnksIGJ1dCBub3QgaW4gY29udHJhdmVudGlvbiBvZiwgYXBwbGljYWJsZSBsYXcsIEFmZmlybWVyIGhlcmVieSBvdmVydGx5LCBmdWxseSwgcGVybWFuZW50bHksIGlycmV2b2NhYmx5IGFuZCB1bmNvbmRpdGlvbmFsbHkgd2FpdmVzLCBhYmFuZG9ucywgYW5kIHN1cnJlbmRlcnMgYWxsIG9mIEFmZmlybWVyYHMgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBhbmQgYXNzb2NpYXRlZCBjbGFpbXMgYW5kIGNhdXNlcyBvZiBhY3Rpb24sIHdoZXRoZXIgbm93IGtub3duIG9yIHVua25vd24gKGluY2x1ZGluZyBleGlzdGluZyBhcyB3ZWxsIGFzIGZ1dHVyZSBjbGFpbXMgYW5kIGNhdXNlcyBvZiBhY3Rpb24pLCBpbiB0aGUgV29yayAoaSkgaW4gYWxsIHRlcnJpdG9yaWVzIHdvcmxkd2lkZSwgKGlpKSBmb3IgdGhlIG1heGltdW0gZHVyYXRpb24gcHJvdmlkZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgdHJlYXR5IChpbmNsdWRpbmcgZnV0dXJlIHRpbWUgZXh0ZW5zaW9ucyksIChpaWkpIGluIGFueSBjdXJyZW50IG9yIGZ1dHVyZSBtZWRpdW0gYW5kIGZvciBhbnkgbnVtYmVyIG9mIGNvcGllcywgYW5kIChpdikgZm9yIGFueSBwdXJwb3NlIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gY29tbWVyY2lhbCwgYWR2ZXJ0aXNpbmcgb3IgcHJvbW90aW9uYWwgcHVycG9zZXMgKHRoZSAiV2FpdmVyIikuIEFmZmlybWVyIG1ha2VzIHRoZSBXYWl2ZXIgZm9yIHRoZSBiZW5lZml0IG9mIGVhY2ggbWVtYmVyIG9mIHRoZSBwdWJsaWMgYXQgbGFyZ2UgYW5kIHRvIHRoZSBkZXRyaW1lbnQgb2YgQWZmaXJtZXJgcyBoZWlycyBhbmQgc3VjY2Vzc29ycywgZnVsbHkgaW50ZW5kaW5nIHRoYXQgc3VjaCBXYWl2ZXIgc2hhbGwgbm90IGJlIHN1YmplY3QgdG8gcmV2b2NhdGlvbiwgcmVzY2lzc2lvbiwgY2FuY2VsbGF0aW9uLCB0ZXJtaW5hdGlvbiwgb3IgYW55IG90aGVyIGxlZ2FsIG9yIGVxdWl0YWJsZSBhY3Rpb24gdG8gZGlzcnVwdCB0aGUgcXVpZXQgZW5qb3ltZW50IG9mIHRoZSBXb3JrIGJ5IHRoZSBwdWJsaWMgYXMgY29udGVtcGxhdGVkIGJ5IEFmZmlybWVyYHMgZXhwcmVzcyBTdGF0ZW1lbnQgb2YgUHVycG9zZS4KKworMy4gUHVibGljIExpY2Vuc2UgRmFsbGJhY2suIFNob3VsZCBhbnkgcGFydCBvZiB0aGUgV2FpdmVyIGZvciBhbnkgcmVhc29uIGJlIGp1ZGdlZCBsZWdhbGx5IGludmFsaWQgb3IgaW5lZmZlY3RpdmUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIHRoZW4gdGhlIFdhaXZlciBzaGFsbCBiZSBwcmVzZXJ2ZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCB0YWtpbmcgaW50byBhY2NvdW50IEFmZmlybWVyYHMgZXhwcmVzcyBTdGF0ZW1lbnQgb2YgUHVycG9zZS4gSW4gYWRkaXRpb24sIHRvIHRoZSBleHRlbnQgdGhlIFdhaXZlciBpcyBzbyBqdWRnZWQgQWZmaXJtZXIgaGVyZWJ5IGdyYW50cyB0byBlYWNoIGFmZmVjdGVkIHBlcnNvbiBhIHJveWFsdHktZnJlZSwgbm9uIHRyYW5zZmVyYWJsZSwgbm9uIHN1YmxpY2Vuc2FibGUsIG5vbiBleGNsdXNpdmUsIGlycmV2b2NhYmxlIGFuZCB1bmNvbmRpdGlvbmFsIGxpY2Vuc2UgdG8gZXhlcmNpc2UgQWZmaXJtZXJgcyBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluIHRoZSBXb3JrIChpKSBpbiBhbGwgdGVycml0b3JpZXMgd29ybGR3aWRlLCAoaWkpIGZvciB0aGUgbWF4aW11bSBkdXJhdGlvbiBwcm92aWRlZCBieSBhcHBsaWNhYmxlIGxhdyBvciB0cmVhdHkgKGluY2x1ZGluZyBmdXR1cmUgdGltZSBleHRlbnNpb25zKSwgKGlpaSkgaW4gYW55IGN1cnJlbnQgb3IgZnV0dXJlIG1lZGl1bSBhbmQgZm9yIGFueSBudW1iZXIgb2YgY29waWVzLCBhbmQgKGl2KSBmb3IgYW55IHB1cnBvc2Ugd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBjb21tZXJjaWFsLCBhZHZlcnRpc2luZyBvciBwcm9tb3Rpb25hbCBwdXJwb3NlcyAodGhlICJMaWNlbnNlIikuIFRoZSBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgQ0MwIHdhcyBhcHBsaWVkIGJ5IEFmZmlybWVyIHRvIHRoZSBXb3JrLiBTaG91bGQgYW55IHBhcnQgb2YgdGhlIExpY2Vuc2UgZm9yIGFueSByZWFzb24gYmUganVkZ2VkIGxlZ2FsbHkgaW52YWxpZCBvciBpbmVmZmVjdGl2ZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgc3VjaCBwYXJ0aWFsIGludmFsaWRpdHkgb3IgaW5lZmZlY3RpdmVuZXNzIHNoYWxsIG5vdCBpbnZhbGlkYXRlIHRoZSByZW1haW5kZXIgb2YgdGhlIExpY2Vuc2UsIGFuZCBpbiBzdWNoIGNhc2UgQWZmaXJtZXIgaGVyZWJ5IGFmZmlybXMgdGhhdCBoZSBvciBzaGUgd2lsbCBub3QgKGkpIGV4ZXJjaXNlIGFueSBvZiBoaXMgb3IgaGVyIHJlbWFpbmluZyBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluIHRoZSBXb3JrIG9yIChpaSkgYXNzZXJ0IGFueSBhc3NvY2lhdGVkIGNsYWltcyBhbmQgY2F1c2VzIG9mIGFjdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIGluIGVpdGhlciBjYXNlIGNvbnRyYXJ5IHRvIEFmZmlybWVyYHMgZXhwcmVzcyBTdGF0ZW1lbnQgb2YgUHVycG9zZS4KKworNC4gTGltaXRhdGlvbnMgYW5kIERpc2NsYWltZXJzLgorCitObyB0cmFkZW1hcmsgb3IgcGF0ZW50IHJpZ2h0cyBoZWxkIGJ5IEFmZmlybWVyIGFyZSB3YWl2ZWQsIGFiYW5kb25lZCwgc3VycmVuZGVyZWQsIGxpY2Vuc2VkIG9yIG90aGVyd2lzZSBhZmZlY3RlZCBieSB0aGlzIGRvY3VtZW50LgorQWZmaXJtZXIgb2ZmZXJzIHRoZSBXb3JrIGFzLWlzIGFuZCBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgb3Igd2FycmFudGllcyBvZiBhbnkga2luZCBjb25jZXJuaW5nIHRoZSBXb3JrLCBleHByZXNzLCBpbXBsaWVkLCBzdGF0dXRvcnkgb3Igb3RoZXJ3aXNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHdhcnJhbnRpZXMgb2YgdGl0bGUsIG1lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsIG5vbiBpbmZyaW5nZW1lbnQsIG9yIHRoZSBhYnNlbmNlIG9mIGxhdGVudCBvciBvdGhlciBkZWZlY3RzLCBhY2N1cmFjeSwgb3IgdGhlIHByZXNlbnQgb3IgYWJzZW5jZSBvZiBlcnJvcnMsIHdoZXRoZXIgb3Igbm90IGRpc2NvdmVyYWJsZSwgYWxsIHRvIHRoZSBncmVhdGVzdCBleHRlbnQgcGVybWlzc2libGUgdW5kZXIgYXBwbGljYWJsZSBsYXcuCitBZmZpcm1lciBkaXNjbGFpbXMgcmVzcG9uc2liaWxpdHkgZm9yIGNsZWFyaW5nIHJpZ2h0cyBvZiBvdGhlciBwZXJzb25zIHRoYXQgbWF5IGFwcGx5IHRvIHRoZSBXb3JrIG9yIGFueSB1c2UgdGhlcmVvZiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcGVyc29uYHMgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBpbiB0aGUgV29yay4gRnVydGhlciwgQWZmaXJtZXIgZGlzY2xhaW1zIHJlc3BvbnNpYmlsaXR5IGZvciBvYnRhaW5pbmcgYW55IG5lY2Vzc2FyeSBjb25zZW50cywgcGVybWlzc2lvbnMgb3Igb3RoZXIgcmlnaHRzIHJlcXVpcmVkIGZvciBhbnkgdXNlIG9mIHRoZSBXb3JrLgorQWZmaXJtZXIgdW5kZXJzdGFuZHMgYW5kIGFja25vd2xlZGdlcyB0aGF0IENyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBkb2N1bWVudCBhbmQgaGFzIG5vIGR1dHkgb3Igb2JsaWdhdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhpcyBDQzAgb3IgdXNlIG9mIHRoZSBXb3JrLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NEREwtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRERMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDE5OGU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRERMLTEuMApAQCAtMCwwICsxLDEzMSBAQAorCitDT01NT04gREVWRUxPUE1FTlQgQU5EIERJU1RSSUJVVElPTiBMSUNFTlNFIChDRERMKQorVmVyc2lvbiAxLjAKKzEuIERlZmluaXRpb25zLgorCisxLjEuICYjODIyMDtDb250cmlidXRvciYjODIyMTsgbWVhbnMgZWFjaCBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gJiM4MjIwO0NvbnRyaWJ1dG9yIFZlcnNpb24mIzgyMjE7IG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yIChpZiBhbnkpLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gJiM4MjIwO0NvdmVyZWQgU29mdHdhcmUmIzgyMjE7IG1lYW5zIChhKSB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIG9yIChiKSBNb2RpZmljYXRpb25zLCBvciAoYykgdGhlIGNvbWJpbmF0aW9uIG9mIGZpbGVzIGNvbnRhaW5pbmcgT3JpZ2luYWwgU29mdHdhcmUgd2l0aCBmaWxlcyBjb250YWluaW5nIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40LiAmIzgyMjA7RXhlY3V0YWJsZSYjODIyMTsgbWVhbnMgdGhlIENvdmVyZWQgU29mdHdhcmUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKworMS41LiAmIzgyMjA7SW5pdGlhbCBEZXZlbG9wZXImIzgyMjE7IG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IGZpcnN0IG1ha2VzIE9yaWdpbmFsIFNvZnR3YXJlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzEuNi4gJiM4MjIwO0xhcmdlciBXb3JrJiM4MjIxOyBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBTb2Z0d2FyZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS43LiAmIzgyMjA7TGljZW5zZSYjODIyMTsgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS44LiAmIzgyMjA7TGljZW5zYWJsZSYjODIyMTsgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisKKzEuOS4gJiM4MjIwO01vZGlmaWNhdGlvbnMmIzgyMjE7IG1lYW5zIHRoZSBTb3VyY2UgQ29kZSBhbmQgRXhlY3V0YWJsZSBmb3JtIG9mIGFueSBvZiB0aGUgZm9sbG93aW5nOgorCitBLiBBbnkgZmlsZSB0aGF0IHJlc3VsdHMgZnJvbSBhbiBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSBvciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIFNvZnR3YXJlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnM7CisKK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb247IG9yCisKK0MuIEFueSBuZXcgZmlsZSB0aGF0IGlzIGNvbnRyaWJ1dGVkIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjEwLiAmIzgyMjA7T3JpZ2luYWwgU29mdHdhcmUmIzgyMjE7IG1lYW5zIHRoZSBTb3VyY2UgQ29kZSBhbmQgRXhlY3V0YWJsZSBmb3JtIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgdGhhdCBpcyBvcmlnaW5hbGx5IHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworMS4xMS4gJiM4MjIwO1BhdGVudCBDbGFpbXMmIzgyMjE7IG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorCisxLjEyLiAmIzgyMjA7U291cmNlIENvZGUmIzgyMjE7IG1lYW5zIChhKSB0aGUgY29tbW9uIGZvcm0gb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSBpbiB3aGljaCBtb2RpZmljYXRpb25zIGFyZSBtYWRlIGFuZCAoYikgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIGluIG9yIHdpdGggc3VjaCBjb2RlLgorCisxLjEzLiAmIzgyMjA7WW91JiM4MjIxOyAob3IgJiM4MjIwO1lvdXImIzgyMjE7KSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICYjODIyMDtZb3UmIzgyMjE7IGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAmIzgyMjA7Y29udHJvbCYjODIyMTsgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIExpY2Vuc2UgR3JhbnRzLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KKworQ29uZGl0aW9uZWQgdXBvbiBZb3VyIGNvbXBsaWFuY2Ugd2l0aCBTZWN0aW9uIDMuMSBiZWxvdyBhbmQgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZToKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgU29mdHdhcmUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLCB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIFNvZnR3YXJlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuCisKKyhjKSBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIG9yIG90aGVyd2lzZSBtYWtlcyB0aGUgT3JpZ2luYWwgU29mdHdhcmUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogKDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgb3IgKDIpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogKGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBvciAoaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLgorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorCitDb25kaXRpb25lZCB1cG9uIFlvdXIgY29tcGxpYW5jZSB3aXRoIFNlY3Rpb24gMy4xIGJlbG93IGFuZCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZToKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgU29mdHdhcmUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogKDEpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kICgyKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuCisKKyhjKSBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IGRpc3RyaWJ1dGVzIG9yIG90aGVyd2lzZSBtYWtlcyB0aGUgTW9kaWZpY2F0aW9ucyBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKworKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMihiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogKDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247ICgyKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IChpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mIENvbnRyaWJ1dG9yIFZlcnNpb24sIG9yIChpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciAoMykgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgQ292ZXJlZCBTb2Z0d2FyZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci4KKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCiszLjEuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KKworQW55IENvdmVyZWQgU29mdHdhcmUgdGhhdCBZb3UgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSBhdmFpbGFibGUgaW4gRXhlY3V0YWJsZSBmb3JtIG11c3QgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIGFuZCB0aGF0IFNvdXJjZSBDb2RlIGZvcm0gbXVzdCBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGZvcm0gb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgWW91IGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgYXZhaWxhYmxlLiBZb3UgbXVzdCBpbmZvcm0gcmVjaXBpZW50cyBvZiBhbnkgc3VjaCBDb3ZlcmVkIFNvZnR3YXJlIGluIEV4ZWN1dGFibGUgZm9ybSBhcyB0byBob3cgdGhleSBjYW4gb2J0YWluIHN1Y2ggQ292ZXJlZCBTb2Z0d2FyZSBpbiBTb3VyY2UgQ29kZSBmb3JtIGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS4KKworMy4yLiBNb2RpZmljYXRpb25zLgorCitUaGUgTW9kaWZpY2F0aW9ucyB0aGF0IFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSByZXByZXNlbnQgdGhhdCBZb3UgYmVsaWV2ZSBZb3VyIE1vZGlmaWNhdGlvbnMgYXJlIFlvdXIgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIFlvdSBoYXZlIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjMuIFJlcXVpcmVkIE5vdGljZXMuCisKK1lvdSBtdXN0IGluY2x1ZGUgYSBub3RpY2UgaW4gZWFjaCBvZiBZb3VyIE1vZGlmaWNhdGlvbnMgdGhhdCBpZGVudGlmaWVzIFlvdSBhcyB0aGUgQ29udHJpYnV0b3Igb2YgdGhlIE1vZGlmaWNhdGlvbi4gWW91IG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBjb3B5cmlnaHQsIHBhdGVudCBvciB0cmFkZW1hcmsgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLCBvciBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgb3IgYW55IGRlc2NyaXB0aXZlIHRleHQgZ2l2aW5nIGF0dHJpYnV0aW9uIHRvIGFueSBDb250cmlidXRvciBvciB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuCisKKzMuNC4gQXBwbGljYXRpb24gb2YgQWRkaXRpb25hbCBUZXJtcy4KKworWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgQ292ZXJlZCBTb2Z0d2FyZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cyYjODIxNzsgcmlnaHRzIGhlcmV1bmRlci4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgU29mdHdhcmUuIEhvd2V2ZXIsIHlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy41LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KKworWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIGZvcm0gb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB1bmRlciB0aGUgdGVybXMgb2YgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgZm9ybSBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQmIzgyMTc7cyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIGZvcm0gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGluIEV4ZWN1dGFibGUgZm9ybSB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLCBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNi4gTGFyZ2VyIFdvcmtzLgorCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIFNvZnR3YXJlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4KKworNC4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKzQuMS4gTmV3IFZlcnNpb25zLgorCitTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGlzIHRoZSBpbml0aWFsIGxpY2Vuc2Ugc3Rld2FyZCBhbmQgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gRXhjZXB0IGFzIHByb3ZpZGVkIGluIFNlY3Rpb24gNC4zLCBubyBvbmUgb3RoZXIgdGhhbiB0aGUgbGljZW5zZSBzdGV3YXJkIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgTGljZW5zZS4KKworNC4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorCitZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UsIGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgdGhlIENvdmVyZWQgU29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSB1bmRlciB3aGljaCBZb3Ugb3JpZ2luYWxseSByZWNlaXZlZCB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4gSWYgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluY2x1ZGVzIGEgbm90aWNlIGluIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBwcm9oaWJpdGluZyBpdCBmcm9tIGJlaW5nIGRpc3RyaWJ1dGVkIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1bmRlciBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbXVzdCBkaXN0cmlidXRlIGFuZCBtYWtlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgdW5kZXIgd2hpY2ggWW91IG9yaWdpbmFsbHkgcmVjZWl2ZWQgdGhlIENvdmVyZWQgU29mdHdhcmUuIE90aGVyd2lzZSwgWW91IG1heSBhbHNvIGNob29zZSB0byB1c2UsIGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgdGhlIENvdmVyZWQgU29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSB0aGUgbGljZW5zZSBzdGV3YXJkLgorCis0LjMuIE1vZGlmaWVkIFZlcnNpb25zLgorCitXaGVuIFlvdSBhcmUgYW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIFlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBsaWNlbnNlIGZvciBZb3VyIE9yaWdpbmFsIFNvZnR3YXJlLCBZb3UgbWF5IGNyZWF0ZSBhbmQgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaWYgWW91OiAoYSkgcmVuYW1lIHRoZSBsaWNlbnNlIGFuZCByZW1vdmUgYW55IHJlZmVyZW5jZXMgdG8gdGhlIG5hbWUgb2YgdGhlIGxpY2Vuc2Ugc3Rld2FyZCAoZXhjZXB0IHRvIG5vdGUgdGhhdCB0aGUgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKTsgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZS4KKworNS4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworQ09WRVJFRCBTT0ZUV0FSRSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gJiM4MjIwO0FTIElTJiM4MjIxOyBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIFNPRlRXQVJFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIFNPRlRXQVJFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgU09GVFdBUkUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgU09GVFdBUkUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworNi4gVEVSTUlOQVRJT04uCisKKzYuMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworNi4yLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhcmF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgYXNzZXJ0IHN1Y2ggY2xhaW0gaXMgcmVmZXJyZWQgdG8gYXMgJiM4MjIwO1BhcnRpY2lwYW50JiM4MjIxOykgYWxsZWdpbmcgdGhhdCB0aGUgUGFydGljaXBhbnQgU29mdHdhcmUgKG1lYW5pbmcgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gd2hlcmUgdGhlIFBhcnRpY2lwYW50IGlzIGEgQ29udHJpYnV0b3Igb3IgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIHdoZXJlIHRoZSBQYXJ0aWNpcGFudCBpcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIpIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCwgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIChpZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaXMgbm90IHRoZSBQYXJ0aWNpcGFudCkgYW5kIGFsbCBDb250cmlidXRvcnMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHkgYW5kIGF1dG9tYXRpY2FsbHkgYXQgdGhlIGV4cGlyYXRpb24gb2Ygc3VjaCA2MCBkYXkgbm90aWNlIHBlcmlvZCwgdW5sZXNzIGlmIHdpdGhpbiBzdWNoIDYwIGRheSBwZXJpb2QgWW91IHdpdGhkcmF3IFlvdXIgY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBQYXJ0aWNpcGFudCBTb2Z0d2FyZSBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQgZWl0aGVyIHVuaWxhdGVyYWxseSBvciBwdXJzdWFudCB0byBhIHdyaXR0ZW4gYWdyZWVtZW50IHdpdGggUGFydGljaXBhbnQuCisKKzYuMy4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDYuMSBvciA2LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlcyB0aGF0IGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gKGV4Y2x1ZGluZyBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSBieSBhbnkgZGlzdHJpYnV0b3IpIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzcuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBTT0ZUV0FSRSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NUIFBST0ZJVFMsIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSYjODIxNztTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzguIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCisKK1RoZSBDb3ZlcmVkIFNvZnR3YXJlIGlzIGEgJiM4MjIwO2NvbW1lcmNpYWwgaXRlbSwmIzgyMjE7IGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAmIzgyMjA7Y29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSYjODIyMTsgKGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGF0IDQ4IEMuRi5SLiAmIzE2NzsgMjUyLjIyNy03MDE0KGEpKDEpKSBhbmQgJiM4MjIwO2NvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiYjODIyMTsgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIFNvZnR3YXJlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4gVGhpcyBVLlMuIEdvdmVybm1lbnQgUmlnaHRzIGNsYXVzZSBpcyBpbiBsaWV1IG9mLCBhbmQgc3VwZXJzZWRlcywgYW55IG90aGVyIEZBUiwgREZBUiwgb3Igb3RoZXIgY2xhdXNlIG9yIHByb3Zpc2lvbiB0aGF0IGFkZHJlc3NlcyBHb3Zlcm5tZW50IHJpZ2h0cyBpbiBjb21wdXRlciBzb2Z0d2FyZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzkuIE1JU0NFTExBTkVPVVMuCisKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhdyBvZiB0aGUganVyaXNkaWN0aW9uIHNwZWNpZmllZCBpbiBhIG5vdGljZSBjb250YWluZWQgd2l0aGluIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIHN1Y2gganVyaXNkaWN0aW9uJiM4MjE3O3MgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIEFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGNvdXJ0cyBsb2NhdGVkIGluIHRoZSBqdXJpc2RpY3Rpb24gYW5kIHZlbnVlIHNwZWNpZmllZCBpbiBhIG5vdGljZSBjb250YWluZWQgd2l0aGluIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cyYjODIxNzsgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLiBZb3UgYWdyZWUgdGhhdCBZb3UgYWxvbmUgYXJlIHJlc3BvbnNpYmxlIGZvciBjb21wbGlhbmNlIHdpdGggdGhlIFVuaXRlZCBTdGF0ZXMgZXhwb3J0IGFkbWluaXN0cmF0aW9uIHJlZ3VsYXRpb25zIChhbmQgdGhlIGV4cG9ydCBjb250cm9sIGxhd3MgYW5kIHJlZ3VsYXRpb24gb2YgYW55IG90aGVyIGNvdW50cmllcykgd2hlbiBZb3UgdXNlLCBkaXN0cmlidXRlIG9yIG90aGVyd2lzZSBtYWtlIGF2YWlsYWJsZSBhbnkgQ292ZXJlZCBTb2Z0d2FyZS4KKworMTAuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCisKK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMzE3NDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC0xLjAKQEAgLTAsMCArMSwyNDIgQEAKKworQ09OVFJBVCBERSBMSUNFTkNFIERFIExPR0lDSUVMIExJQlJFIENlQ0lMTAorCitBdmVydGlzc2VtZW50CisKK0NlIGNvbnRyYXQgZXN0IHVuZSBsaWNlbmNlIGRlIGxvZ2ljaWVsIGxpYnJlIGlzc3VlIGQmIzgyMTc7dW5lIGNvbmNlcnRhdGlvbiBlbnRyZSBzZXMgYXV0ZXVycyBhZmluIHF1ZSBsZSByZXNwZWN0IGRlIGRldXggZ3JhbmRzIHByaW5jaXBlcyBwciYjMjMzO3NpZGUgJiMyMjQ7IHNhIHImIzIzMztkYWN0aW9uOgorCitkJiM4MjE3O3VuZSBwYXJ0LCBzYSBjb25mb3JtaXQmIzIzMzsgYXUgZHJvaXQgZnJhbiYjMjMxO2FpcywgdGFudCBhdSByZWdhcmQgZHUgZHJvaXQgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBjaXZpbGUgcXVlIGR1IGRyb2l0IGRlIGxhIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZXQgZGUgbGEgcHJvdGVjdGlvbiBxdSYjODIxNztpbCBvZmZyZSBhdXggYXV0ZXVycyBldCB0aXR1bGFpcmVzIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciB1biBsb2dpY2llbC4KK2QmIzgyMTc7YXV0cmUgcGFydCwgbGUgcmVzcGVjdCBkZXMgcHJpbmNpcGVzIGRlIGRpZmZ1c2lvbiBkZXMgbG9naWNpZWxzIGxpYnJlczogYWNjJiMyMzI7cyBhdSBjb2RlIHNvdXJjZSwgZHJvaXRzICYjMjMzO3RlbmR1cyBjb25mJiMyMzM7ciYjMjMzO3MgYXV4IHV0aWxpc2F0ZXVycy4KK0xlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UgQ2VDSUxMMSBzb250OgorCitDb21taXNzYXJpYXQgJiMyMjQ7IGwmIzgyMTc7RW5lcmdpZSBBdG9taXF1ZSAmIzgyMTE7IENFQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyBkZSBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUgdGVjaG5pcXVlIGV0IGluZHVzdHJpZWwsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyAzMS0zMyBydWUgZGUgbGEgRiYjMjMzO2QmIzIzMztyYXRpb24sIDc1NzUyIFBBUklTIGNlZGV4IDE1LgorCitDZW50cmUgTmF0aW9uYWwgZGUgbGEgUmVjaGVyY2hlIFNjaWVudGlmaXF1ZSAmIzgyMTE7IENOUlMsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSBldCB0ZWNobm9sb2dpcXVlLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgMyBydWUgTWljaGVsLUFuZ2UgNzU3OTQgUGFyaXMgY2VkZXggMTYuCisKK0luc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUgJiM4MjExOyBJTlJJQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyBEb21haW5lIGRlIFZvbHVjZWF1LCBSb2NxdWVuY291cnQsIEJQIDEwNSwgNzgxNTMgTGUgQ2hlc25heSBjZWRleC4KKworUFJFQU1CVUxFCisKK0NlIGNvbnRyYXQgZXN0IHVuZSBsaWNlbmNlIGRlIGxvZ2ljaWVsIGxpYnJlIGRvbnQgbGBvYmplY3RpZiBlc3QgZGUgY29uZiYjMjMzO3JlciBhdXggdXRpbGlzYXRldXJzIGxhIGxpYmVydCYjMjMzOyBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gZHUgbG9naWNpZWwgciYjMjMzO2dpIHBhciBjZXR0ZSBsaWNlbmNlIGRhbnMgbGUgY2FkcmUgZGB1biBtb2QmIzIzMjtsZSBkZSBkaWZmdXNpb24gJiMxNzE7b3BlbiBzb3VyY2UmIzE4NzsuCisKK0xgZXhlcmNpY2UgZGUgY2VzIGxpYmVydCYjMjMzO3MgZXN0IGFzc29ydGkgZGUgY2VydGFpbnMgZGV2b2lycyAmIzIyNDsgbGEgY2hhcmdlIGRlcyB1dGlsaXNhdGV1cnMgYWZpbiBkZSBwciYjMjMzO3NlcnZlciBjZSBzdGF0dXQgYXUgY291cnMgZGVzIHJlZGlzdHJpYnV0aW9ucyB1bHQmIzIzMztyaWV1cmVzLgorCitMJiM4MjE3O2FjY2Vzc2liaWxpdCYjMjMzOyBhdSBjb2RlIHNvdXJjZSBldCBsZXMgZHJvaXRzIGRlIGNvcGllLCBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gcXVpIGVuIGQmIzIzMztjb3VsZW50IG9udCBwb3VyIGNvbnRyZXBhcnRpZSBkZSBuJiM4MjE3O29mZnJpciBhdXggdXRpbGlzYXRldXJzIHF1JiM4MjE3O3VuZSBnYXJhbnRpZSBsaW1pdCYjMjMzO2UgZXQgZGUgbmUgZmFpcmUgcGVzZXIgc3VyIGwmIzgyMTc7YXV0ZXVyIGR1IGxvZ2ljaWVsLCBsZSB0aXR1bGFpcmUgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZXQgbGVzIGNvbmMmIzIzMztkYW50cyBzdWNjZXNzaWZzIHF1JiM4MjE3O3VuZSByZXNwb25zYWJpbGl0JiMyMzM7IHJlc3RyZWludGUuCisKK0EgY2V0ICYjMjMzO2dhcmQgbCYjODIxNzthdHRlbnRpb24gZGUgbCYjODIxNzt1dGlsaXNhdGV1ciBlc3QgYXR0aXImIzIzMztlIHN1ciBsZXMgcmlzcXVlcyBhc3NvY2kmIzIzMztzIGF1IGNoYXJnZW1lbnQsICYjMjI0OyBsJiM4MjE3O3V0aWxpc2F0aW9uLCAmIzIyNDsgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IGxvZ2ljaWVsIHBhciBsJiM4MjE3O3V0aWxpc2F0ZXVyICYjMjMzO3RhbnQgZG9ubiYjMjMzOyBzYSBzcCYjMjMzO2NpZmljaXQmIzIzMzsgZGUgbG9naWNpZWwgbGlicmUsIHF1aSBwZXV0IGxlIHJlbmRyZSBjb21wbGV4ZSAmIzIyNDsgbWFuaXB1bGVyIGV0IHF1aSBsZSByJiMyMzM7c2VydmUgZG9uYyAmIzIyNDsgZGVzIGQmIzIzMzt2ZWxvcHBldXJzIGV0IGRlcyBwcm9mZXNzaW9ubmVscyBhdmVydGlzIHBvc3MmIzIzMztkYW50IGRlcyBjb25uYWlzc2FuY2VzIGluZm9ybWF0aXF1ZXMgYXBwcm9mb25kaWVzLiBMZXMgdXRpbGlzYXRldXJzIHNvbnQgZG9uYyBpbnZpdCYjMjMzO3MgJiMyMjQ7IGNoYXJnZXIgZXQgdGVzdGVyIGwmIzgyMTc7YWQmIzIzMztxdWF0aW9uIGR1IExvZ2ljaWVsICYjMjI0OyBsZXVycyBiZXNvaW5zIGRhbnMgZGVzIGNvbmRpdGlvbnMgcGVybWV0dGFudCBkYGFzc3VyZXIgbGEgcyYjMjMzO2N1cml0JiMyMzM7IGRlIGxldXJzIHN5c3QmIzIzMjttZXMgZXQgb3UgZGUgbGV1cnMgZG9ubiYjMjMzO2VzIGV0LCBwbHVzIGcmIzIzMztuJiMyMzM7cmFsZW1lbnQsICYjMjI0OyBsYHV0aWxpc2VyIGV0IGxgZXhwbG9pdGVyIGRhbnMgbGVzIG0mIzIzNDttZSBjb25kaXRpb25zIGRlIHMmIzIzMztjdXJpdCYjMjMzOy4gQ2UgY29udHJhdCBwZXV0ICYjMjM0O3RyZSByZXByb2R1aXQgZXQgZGlmZnVzJiMyMzM7IGxpYnJlbWVudCwgc291cyByJiMyMzM7c2VydmUgZGUgbGUgY29uc2VydmVyIGVuIGwmIzgyMTc7JiMyMzM7dGF0LCBzYW5zIGFqb3V0IG5pIHN1cHByZXNzaW9uIGRlIGNsYXVzZXMuCisKK0NlIGNvbnRyYXQgZXN0IHN1c2NlcHRpYmxlIGRlIHMmIzgyMTc7YXBwbGlxdWVyICYjMjI0OyB0b3V0IGxvZ2ljaWVsIGRvbnQgbGUgdGl0dWxhaXJlIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGQmIzIzMztjaWRlIGRlIHNvdW1ldHRyZSBsJiM4MjE3O2V4cGxvaXRhdGlvbiBhdXggZGlzcG9zaXRpb25zIHF1JiM4MjE3O2lsIGNvbnRpZW50LgorCitBcnRpY2xlIDFlciAtIERFRklOSVRJT05TCisKK0RhbnMgY2UgY29udHJhdCwgbGVzIHRlcm1lcyBzdWl2YW50cywgbG9yc3F1JiM4MjE3O2lscyBzZXJvbnQgJiMyMzM7Y3JpdHMgYXZlYyB1bmUgbGV0dHJlIGNhcGl0YWxlLCBhdXJvbnQgbGEgc2lnbmlmaWNhdGlvbiBzdWl2YW50ZToKKworQ29udHJhdDogZCYjMjMzO3NpZ25lIGxlIHByJiMyMzM7c2VudCBjb250cmF0IGRlIGxpY2VuY2UsIHNlcyAmIzIzMzt2ZW50dWVsbGVzIHZlcnNpb25zIHBvc3QmIzIzMztyaWV1cmVzIGV0IGFubmV4ZXMuCisKK0xvZ2ljaWVsOiBkJiMyMzM7c2lnbmUgbGUgbG9naWNpZWwgc291cyBzYSBmb3JtZSBkZSBDb2RlIE9iamV0IGV0L291IGRlIENvZGUgU291cmNlIGV0IGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCBzYSBkb2N1bWVudGF0aW9uLCBkYW5zIGxldXIgJiMyMzM7dGF0IGF1IG1vbWVudCBkZSBsJiM4MjE3O2FjY2VwdGF0aW9uIGR1IENvbnRyYXQgcGFyIGxlIExpY2VuY2kmIzIzMzsuCisKK0xvZ2ljaWVsIEluaXRpYWw6IGQmIzIzMztzaWduZSBsZSBMb2dpY2llbCBzb3VzIHNhIGZvcm1lIGRlIENvZGUgU291cmNlIGV0IGRlIENvZGUgT2JqZXQgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGxldXIgcHJlbWkmIzIzMjtyZSBkaWZmdXNpb24gc291cyBsZXMgdGVybWVzIGR1IENvbnRyYXQuCisKK0xvZ2ljaWVsIE1vZGlmaSYjMjMzOzogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBwYXIgYXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbi4KKworQ29kZSBTb3VyY2U6IGQmIzIzMztzaWduZSBsJiM4MjE3O2Vuc2VtYmxlIGRlcyBpbnN0cnVjdGlvbnMgZXQgZGVzIGxpZ25lcyBkZSBwcm9ncmFtbWUgZHUgTG9naWNpZWwgZXQgYXVxdWVsIGwmIzgyMTc7YWNjJiMyMzI7cyBlc3QgbiYjMjMzO2Nlc3NhaXJlIGVuIHZ1ZSBkZSBtb2RpZmllciBsZSBMb2dpY2llbC4KKworQ29kZSBPYmpldDogZCYjMjMzO3NpZ25lIGxlcyBmaWNoaWVycyBiaW5haXJlcyBpc3N1cyBkZSBsYSBjb21waWxhdGlvbiBkdSBDb2RlIFNvdXJjZS4KKworVGl0dWxhaXJlIDogZCYjMjMzO3NpZ25lIGxlIGQmIzIzMzt0ZW50ZXVyIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGQmIzgyMTc7YXV0ZXVyIHN1ciBsZSBMb2dpY2llbCBJbml0aWFsLgorCitMaWNlbmNpJiMyMzM7KHMpOiBkJiMyMzM7c2lnbmUgbGUgb3UgbGVzIHV0aWxpc2F0ZXVyKHMpIGR1IExvZ2ljaWVsIGF5YW50IGFjY2VwdCYjMjMzOyBsZSBDb250cmF0LgorCitDb250cmlidXRldXI6IGQmIzIzMztzaWduZSBsZSBMaWNlbmNpJiMyMzM7IGF1dGV1ciBkJiM4MjE3O2F1IG1vaW5zIHVuZSBDb250cmlidXRpb24uCisKK0NvbmMmIzIzMztkYW50OiBkJiMyMzM7c2lnbmUgbGUgVGl0dWxhaXJlIG91IHRvdXRlIHBlcnNvbm5lIHBoeXNpcXVlIG91IG1vcmFsZSBkaXN0cmlidWFudCBsZSBMb2dpY2llbCBzb3VzIGxlIENvbnRyYXQuCisKK0NvbnRyaWJ1dGlvbnM6IGQmIzIzMztzaWduZSBsJiM4MjE3O2Vuc2VtYmxlIGRlcyBtb2RpZmljYXRpb25zLCBjb3JyZWN0aW9ucywgdHJhZHVjdGlvbnMsIGFkYXB0YXRpb25zIGV0L291IG5vdXZlbGxlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBpbnQmIzIzMztnciYjMjMzO2VzIGRhbnMgbGUgTG9naWNpZWwgcGFyIHRvdXQgQ29udHJpYnV0ZXVyLCBhaW5zaSBxdWUgbGVzIE1vZHVsZXMgU3RhdGlxdWVzLgorCitNb2R1bGU6IGQmIzIzMztzaWduZSB1biBlbnNlbWJsZSBkZSBmaWNoaWVycyBzb3VyY2VzIHkgY29tcHJpcyBsZXVyIGRvY3VtZW50YXRpb24gcXVpLCB1bmUgZm9pcyBjb21waWwmIzIzMzsgc291cyBmb3JtZSBleCYjMjMzO2N1dGFibGUsIHBlcm1ldCBkZSByJiMyMzM7YWxpc2VyIGRlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBvdSBzZXJ2aWNlcyBzdXBwbCYjMjMzO21lbnRhaXJlcyAmIzIyNDsgY2V1eCBmb3VybmlzIHBhciBsZSBMb2dpY2llbC4KKworTW9kdWxlIER5bmFtaXF1ZTogZCYjMjMzO3NpZ25lIHRvdXQgTW9kdWxlLCBjciYjMjMzOyYjMjMzOyBwYXIgbGUgQ29udHJpYnV0ZXVyLCBpbmQmIzIzMztwZW5kYW50IGR1IExvZ2ljaWVsLCB0ZWwgcXVlIGNlIE1vZHVsZSBldCBsZSBMb2dpY2llbCBzb250IHNvdXMgZm9ybWUgZGUgZGV1eCBleCYjMjMzO2N1dGFibGVzIGluZCYjMjMzO3BlbmRhbnRzIHF1aSBzJiM4MjE3O2V4JiMyMzM7Y3V0ZW50IGRhbnMgdW4gZXNwYWNlIGQmIzgyMTc7YWRyZXNzYWdlIGluZCYjMjMzO3BlbmRhbnQsIGwmIzgyMTc7dW4gYXBwZWxhbnQgbCYjODIxNzthdXRyZSBhdSBtb21lbnQgZGUgbGV1ciBleCYjMjMzO2N1dGlvbi4KKworTW9kdWxlIFN0YXRpcXVlOiBkJiMyMzM7c2lnbmUgdG91dCBNb2R1bGUgY3ImIzIzMzsmIzIzMzsgcGFyIGxlIENvbnRyaWJ1dGV1ciBldCBsaSYjMjMzOyBhdSBMb2dpY2llbCBwYXIgdW4gbGllbiBzdGF0aXF1ZSByZW5kYW50IGxldXIgY29kZSBvYmpldCBkJiMyMzM7cGVuZGFudCBsYHVuIGRlIGxgYXV0cmUuIENlIE1vZHVsZSBldCBsZSBMb2dpY2llbCBhdXF1ZWwgaWwgZXN0IGxpJiMyMzM7LCBzb250IHJlZ3JvdXAmIzIzMztzIGVuIHVuIHNldWwgZXgmIzIzMztjdXRhYmxlLgorCitQYXJ0aWVzOiBkJiMyMzM7c2lnbmUgY29sbGVjdGl2ZW1lbnQgbGUgTGljZW5jaSYjMjMzOyBldCBsZSBDb25jJiMyMzM7ZGFudC4KKworQ2VzIHRlcm1lcyBzJiM4MjE3O2VudGVuZGVudCBhdSBzaW5ndWxpZXIgY29tbWUgYXUgcGx1cmllbC4KKworQXJ0aWNsZSAyIC0gT0JKRVQKKworTGUgQ29udHJhdCBhIHBvdXIgb2JqZXQgbGEgY29uY2Vzc2lvbiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQgYXUgTGljZW5jaSYjMjMzOyBkJiM4MjE3O3VuZSBMaWNlbmNlIG5vbiBleGNsdXNpdmUsIHRyYW5zZiYjMjMzO3JhYmxlIGV0IG1vbmRpYWxlIGR1IExvZ2ljaWVsIHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgY2ktYXByJiMyMzI7cyAmIzIyNDsgbGBhcnRpY2xlIDUgcG91ciB0b3V0ZSBsYSBkdXImIzIzMztlIGRlIHByb3RlY3Rpb24gZGVzIGRyb2l0cyBwb3J0YW50IHN1ciBjZSBMb2dpY2llbC4KKworQXJ0aWNsZSAzIC0gQUNDRVBUQVRJT04KKworMy4xLiBMJiM4MjE3O2FjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlcyB0ZXJtZXMgZHUgQ29udHJhdCBlc3QgciYjMjMzO3B1dCYjMjMzO2UgYWNxdWlzZSBkdSBmYWl0IGR1IHByZW1pZXIgZGVzIGZhaXRzIHN1aXZhbnRzOgorCisoaSkgbGUgY2hhcmdlbWVudCBkdSBMb2dpY2llbCBwYXIgdG91dCBtb3llbiBub3RhbW1lbnQgcGFyIHQmIzIzMztsJiMyMzM7Y2hhcmdlbWVudCAmIzIyNDsgcGFydGlyIGQmIzgyMTc7dW4gc2VydmV1ciBkaXN0YW50IG91IHBhciBjaGFyZ2VtZW50ICYjMjI0OyBwYXJ0aXIgZCYjODIxNzt1biBzdXBwb3J0IHBoeXNpcXVlOworKGlpKSBsZSBwcmVtaWVyIGV4ZXJjaWNlIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlIGwmIzgyMTc7dW4gcXVlbGNvbnF1ZSBkZXMgZHJvaXRzIGNvbmMmIzIzMztkJiMyMzM7cyBwYXIgbGUgQ29udHJhdC4KKzMuMi4gVW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LCBjb250ZW5hbnQgbm90YW1tZW50IHVuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiBhdXggc3AmIzIzMztjaWZpY2l0JiMyMzM7cyBkdSBMb2dpY2llbCwgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0ICYjMjI0OyBsYSBsaW1pdGF0aW9uICYjMjI0OyB1biB1c2FnZSBwYXIgZGVzIHV0aWxpc2F0ZXVycyBleHAmIzIzMztyaW1lbnQmIzIzMztzIGEgJiMyMzM7dCYjMjMzOyBtaXMgJiMyMjQ7IGRpc3Bvc2l0aW9uIGR1IExpY2VuY2kmIzIzMzsgcHImIzIzMzthbGFibGVtZW50ICYjMjI0OyBzb24gYWNjZXB0YXRpb24gdGVsbGUgcXVlIGQmIzIzMztmaW5pZSAmIzIyNDsgbGBhcnRpY2xlIDMuMSBjaSBkZXNzdXMgZXQgbGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBlbiBhdm9pciBwcmlzIGNvbm5haXNzYW5jZXMuCisKK0FydGljbGUgNCAtIEVOVFJFRSBFTiBWSUdVRVVSIEVUIERVUkVFCisKKzQuMS5FTlRSRUUgRU4gVklHVUVVUgorCitMZSBDb250cmF0IGVudHJlIGVuIHZpZ3VldXIgJiMyMjQ7IGxhIGRhdGUgZGUgc29uIGFjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgZW4gMy4xLgorCis0LjIuIERVUkVFCisKK0xlIENvbnRyYXQgcHJvZHVpcmEgc2VzIGVmZmV0cyBwZW5kYW50IHRvdXRlIGxhIGR1ciYjMjMzO2UgbCYjMjMzO2dhbGUgZGUgcHJvdGVjdGlvbiBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBwb3J0YW50IHN1ciBsZSBMb2dpY2llbC4KKworQXJ0aWNsZSA1IC0gRVRFTkRVRSBERVMgRFJPSVRTIENPTkNFREVTCisKK0xlIENvbmMmIzIzMztkYW50IGNvbmMmIzIzMjtkZSBhdSBMaWNlbmNpJiMyMzM7LCBxdWkgYWNjZXB0ZSwgbGVzIGRyb2l0cyBzdWl2YW50cyBzdXIgbGUgTG9naWNpZWwgcG91ciB0b3V0ZXMgZGVzdGluYXRpb25zIGV0IHBvdXIgbGEgZHVyJiMyMzM7ZSBkdSBDb250cmF0IGRhbnMgbGVzIGNvbmRpdGlvbnMgY2ktYXByJiMyMzI7cyBkJiMyMzM7dGFpbGwmIzIzMztlcy4KKworUGFyIGFpbGxldXJzLCBsZSBDb25jJiMyMzM7ZGFudCBjb25jJiMyMzI7ZGUgYXUgTGljZW5jaSYjMjMzOyAmIzIyNDsgdGl0cmUgZ3JhY2lldXggbGVzIGRyb2l0cyBkJiM4MjE3O2V4cGxvaXRhdGlvbiBkdSBvdSBkZXMgYnJldmV0cyBxdSYjODIxNztpbCBkJiMyMzM7dGllbnQgc3VyIHRvdXQgb3UgcGFydGllIGRlcyBpbnZlbnRpb25zIGltcGwmIzIzMzttZW50JiMyMzM7ZXMgZGFucyBsZSBMb2dpY2llbC4KKworNS4xLiBEUk9JVFMgRCYjODIxNztVVElMSVNBVElPTgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyB1dGlsaXNlciBsZSBMb2dpY2llbCwgc2FucyByZXN0cmljdGlvbiBxdWFudCBhdXggZG9tYWluZXMgZCYjODIxNzthcHBsaWNhdGlvbiwgJiMyMzM7dGFudCBjaS1hcHImIzIzMjtzIHByJiMyMzM7Y2lzJiMyMzM7IHF1ZSBjZWxhIGNvbXBvcnRlOgorCitsYSByZXByb2R1Y3Rpb24gcGVybWFuZW50ZSBvdSBwcm92aXNvaXJlIGR1IExvZ2ljaWVsIGVuIHRvdXQgb3UgcGFydGllIHBhciB0b3V0IG1veWVuIGV0IHNvdXMgdG91dGUgZm9ybWUuCisKK2xlIGNoYXJnZW1lbnQsIGwmIzgyMTc7YWZmaWNoYWdlLCBsJiM4MjE3O2V4JiMyMzM7Y3V0aW9uLCBvdSBsZSBzdG9ja2FnZSBkdSBMb2dpY2llbCBzdXIgdG91dCBzdXBwb3J0LgorCitsYSBwb3NzaWJpbGl0JiMyMzM7IGQmIzgyMTc7ZW4gb2JzZXJ2ZXIsIGQmIzgyMTc7ZW4gJiMyMzM7dHVkaWVyLCBvdSBkJiM4MjE3O2VuIHRlc3RlciBsZSBmb25jdGlvbm5lbWVudCBhZmluIGRlIGQmIzIzMzt0ZXJtaW5lciBsZXMgaWQmIzIzMztlcyBldCBwcmluY2lwZXMgcXVpIHNvbnQgJiMyMjQ7IGxhIGJhc2UgZGUgbiYjODIxNztpbXBvcnRlIHF1ZWwgJiMyMzM7bCYjMjMzO21lbnQgZGUgY2UgTG9naWNpZWw7IGV0IGNlY2ksIGxvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBlZmZlY3R1ZSB0b3V0ZSBvcCYjMjMzO3JhdGlvbiBkZSBjaGFyZ2VtZW50LCBkJiM4MjE3O2FmZmljaGFnZSwgZCYjODIxNztleCYjMjMzO2N1dGlvbiwgZGUgdHJhbnNtaXNzaW9uIG91IGRlIHN0b2NrYWdlIGR1IExvZ2ljaWVsIHF1JiM4MjE3O2lsIGVzdCBlbiBkcm9pdCBkJiM4MjE3O2VmZmVjdHVlciBlbiB2ZXJ0dSBkdSBDb250cmF0LgorCis1LjIuIERST0lUIEQmIzgyMTc7QVBQT1JURVIgREVTIENPTlRSSUJVVElPTlMKKworTGUgZHJvaXQgZCYjODIxNzthcHBvcnRlciBkZXMgQ29udHJpYnV0aW9ucyBjb21wb3J0ZSBsZSBkcm9pdCBkZSB0cmFkdWlyZSwgZCYjODIxNzthZGFwdGVyLCBkJiM4MjE3O2FycmFuZ2VyIG91IGQmIzgyMTc7YXBwb3J0ZXIgdG91dGUgYXV0cmUgbW9kaWZpY2F0aW9uIGR1IExvZ2ljaWVsIGV0IGxlIGRyb2l0IGRlIHJlcHJvZHVpcmUgbGUgTG9naWNpZWwgZW4gciYjMjMzO3N1bHRhbnQuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGFwcG9ydGVyIHRvdXRlIENvbnRyaWJ1dGlvbiBhdSBMb2dpY2llbCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBtZW50aW9ubmVyLCBkZSBmYSYjMjMxO29uIGV4cGxpY2l0ZSwgc29uIG5vbSBlbiB0YW50IHF1JiM4MjE3O2F1dGV1ciBkZSBjZXR0ZSBDb250cmlidXRpb24gZXQgbGEgZGF0ZSBkZSBjciYjMjMzO2F0aW9uIGRlIGNlbGxlLWNpLgorCis1LjMuIERST0lUUyBERSBESVNUUklCVVRJT04gRVQgREUgRElGRlVTSU9OCisKK0xlIGRyb2l0IGRlIGRpc3RyaWJ1dGlvbiBldCBkZSBkaWZmdXNpb24gY29tcG9ydGUgbm90YW1tZW50IGxlIGRyb2l0IGRlIHRyYW5zbWV0dHJlIGV0IGRlIGNvbW11bmlxdWVyIGxlIExvZ2ljaWVsIGF1IHB1YmxpYyBzdXIgdG91dCBzdXBwb3J0IGV0IHBhciB0b3V0IG1veWVuIGFpbnNpIHF1ZSBsZSBkcm9pdCBkZSBtZXR0cmUgc3VyIGxlIG1hcmNoJiMyMzM7ICYjMjI0OyB0aXRyZSBvbiYjMjMzO3JldXggb3UgZ3JhdHVpdCwgdW4gb3UgZGVzIGV4ZW1wbGFpcmVzIGR1IExvZ2ljaWVsIHBhciB0b3V0IHByb2MmIzIzMztkJiMyMzM7LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyByZWRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBkdSBMb2dpY2llbCwgbW9kaWZpJiMyMzM7IG91IG5vbiwgJiMyMjQ7IGRlcyB0aWVycyBkYW5zIGxlcyBjb25kaXRpb25zIGNpLWFwciYjMjMyO3MgZCYjMjMzO3RhaWxsJiMyMzM7ZXMuCisKKzUuMy4xLiBSRURJU1RSSUJVVElPTiBEVSBMT0dJQ0lFTCBTQU5TIE1PRElGSUNBVElPTgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyByZWRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBjb25mb3JtZXMgZHUgTG9naWNpZWwsIHNvdXMgZm9ybWUgZGUgQ29kZSBTb3VyY2Ugb3UgZGUgQ29kZSBPYmpldCwgJiMyMjQ7IGNvbmRpdGlvbiBxdWUgY2V0dGUgcmVkaXN0cmlidXRpb24gcmVzcGVjdGUgbGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IGRhbnMgbGV1ciB0b3RhbGl0JiMyMzM7IGV0IHNvaXQgYWNjb21wYWduJiMyMzM7ZToKKworZCYjODIxNzt1biBleGVtcGxhaXJlIGR1IENvbnRyYXQsCisKK2QmIzgyMTc7dW4gYXZlcnRpc3NlbWVudCByZWxhdGlmICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCBkZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHRlbGxlIHF1ZSBwciYjMjMzO3Z1ZSBhdXggYXJ0aWNsZXMgOCBldCA5LAorCitldCBxdWUsIGRhbnMgbGUgY2FzIG8mIzI0OTsgc2V1bCBsZSBDb2RlIE9iamV0IGR1IExvZ2ljaWVsIGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIGF1eCBmdXR1cnMgTGljZW5jaSYjMjMzO3MgZCYjODIxNzthY2MmIzIzMztkZXIgZmFjaWxlbWVudCBhdSBDb2RlIFNvdXJjZSBjb21wbGV0IGR1IExvZ2ljaWVsIGVuIGluZGlxdWFudCBsZXMgbW9kYWxpdCYjMjMzO3MgZCYjODIxNzthY2MmIzIzMjtzLCAmIzIzMzt0YW50IGVudGVuZHUgcXVlIGxlIGNvJiMyNTE7dCBhZGRpdGlvbm5lbCBkJiM4MjE3O2FjcXVpc2l0aW9uIGR1IENvZGUgU291cmNlIG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkZSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKworNS4zLjIuIFJFRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIE1PRElGSUUKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGFwcG9ydGUgdW5lIENvbnRyaWJ1dGlvbiBhdSBMb2dpY2llbCwgbGVzIGNvbmRpdGlvbnMgZGUgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IHNvbnQgYWxvcnMgc291bWlzZXMgJiMyMjQ7IGwmIzgyMTc7aW50JiMyMzM7Z3JhbGl0JiMyMzM7IGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdC4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgcmVkaXN0cmlidWVyIGxlIExvZ2ljaWVsIE1vZGlmaSYjMjMzOywgc291cyBmb3JtZSBkZSBDb2RlIFNvdXJjZSBvdSBkZSBDb2RlIE9iamV0LCAmIzIyNDsgY29uZGl0aW9uIHF1ZSBjZXR0ZSByZWRpc3RyaWJ1dGlvbiByZXNwZWN0ZSBsZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgZGFucyBsZXVyIHRvdGFsaXQmIzIzMzsgZXQgc29pdCBhY2NvbXBhZ24mIzIzMztlOgorCitkJiM4MjE3O3VuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwKKworZCYjODIxNzt1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0IGRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgY29uYyYjMjMzO2RhbnQgdGVsbGUgcXVlIHByJiMyMzM7dnVlIGF1eCBhcnRpY2xlcyA4IGV0IDksCisKK2V0IHF1ZSwgZGFucyBsZSBjYXMgbyYjMjQ5OyBzZXVsIGxlIENvZGUgT2JqZXQgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIGF1eCBmdXR1cnMgTGljZW5jaSYjMjMzO3MgZCYjODIxNzthY2MmIzIzMztkZXIgZmFjaWxlbWVudCBhdSBDb2RlIFNvdXJjZSBjb21wbGV0IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBlbiBpbmRpcXVhbnQgbGVzIG1vZGFsaXQmIzIzMztzIGQmIzgyMTc7YWNjJiMyMzI7cywgJiMyMzM7dGFudCBlbnRlbmR1IHF1ZSBsZSBjbyYjMjUxO3QgYWRkaXRpb25uZWwgZCYjODIxNzthY3F1aXNpdGlvbiBkdSBDb2RlIFNvdXJjZSBuZSBkZXZyYSBwYXMgZXhjJiMyMzM7ZGVyIGxlIHNpbXBsZSBjbyYjMjUxO3QgZGUgdHJhbnNmZXJ0IGRlcyBkb25uJiMyMzM7ZXMuCisKKzUuMy4zLiBSRURJU1RSSUJVVElPTiBERVMgTU9EVUxFUyBEWU5BTUlRVUVTCisKK0xvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW4gTW9kdWxlIER5bmFtaXF1ZSBsZXMgY29uZGl0aW9ucyBkdSBDb250cmF0IG5lIHMmIzgyMTc7YXBwbGlxdWVudCBwYXMgJiMyMjQ7IGNlIE1vZHVsZSBEeW5hbWlxdWUsIHF1aSBwZXV0ICYjMjM0O3RyZSBkaXN0cmlidSYjMjMzOyBzb3VzIHVuIGNvbnRyYXQgZGUgbGljZW5jZSBkaWZmJiMyMzM7cmVudC4KKworNS4zLjQuIENPTVBBVElCSUxJVEUgQVZFQyBMQSBMSUNFTkNFIEdQTAorCitEYW5zIGxlIGNhcyBvJiMyNDk7IGxlIExvZ2ljaWVsLCBNb2RpZmkmIzIzMzsgb3Ugbm9uLCBlc3QgaW50JiMyMzM7Z3ImIzIzMzsgJiMyMjQ7IHVuIGNvZGUgc291bWlzIGF1eCBkaXNwb3NpdGlvbnMgZGUgbGEgbGljZW5jZSBHUEwsIGxlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHJlZGlzdHJpYnVlciBsJiM4MjE3O2Vuc2VtYmxlIHNvdXMgbGEgbGljZW5jZSBHUEwuCisKK0RhbnMgbGUgY2FzIG8mIzI0OTsgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGludCYjMjMyO2dyZSB1biBjb2RlIHNvdW1pcyBhdXggZGlzcG9zaXRpb25zIGRlIGxhIGxpY2VuY2UgR1BMLCBsZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyByZWRpc3RyaWJ1ZXIgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IHNvdXMgbGEgbGljZW5jZSBHUEwuCisKK0FydGljbGUgNiAtIFBST1BSSUVURSBJTlRFTExFQ1RVRUxMRQorCis2LjEuIFNVUiBMRSBMT0dJQ0lFTCBJTklUSUFMCisKK0xlIFRpdHVsYWlyZSBlc3QgZCYjMjMzO3RlbnRldXIgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggc3VyIGxlIExvZ2ljaWVsIEluaXRpYWwuIFRvdXRlIHV0aWxpc2F0aW9uIGR1IExvZ2ljaWVsIEluaXRpYWwgZXN0IHNvdW1pc2UgYXUgcmVzcGVjdCBkZXMgY29uZGl0aW9ucyBkYW5zIGxlc3F1ZWxsZXMgbGUgVGl0dWxhaXJlIGEgY2hvaXNpIGRlIGRpZmZ1c2VyIHNvbiAmIzMzOTt1dnJlIGV0IG51bCBhdXRyZSBuJiM4MjE3O2EgbGEgZmFjdWx0JiMyMzM7IGRlIG1vZGlmaWVyIGxlcyBjb25kaXRpb25zIGRlIGRpZmZ1c2lvbiBkZSBjZSBMb2dpY2llbCBJbml0aWFsLgorCitMZSBUaXR1bGFpcmUgc2BlbmdhZ2UgJiMyMjQ7IG1haW50ZW5pciBsYSBkaWZmdXNpb24gZHUgTG9naWNpZWwgaW5pdGlhbCBzb3VzIGxlcyBjb25kaXRpb25zIGR1IENvbnRyYXQgZXQgY2UsIHBvdXIgbGEgZHVyJiMyMzM7ZSB2aXMmIzIzMztlICYjMjI0OyBsYGFydGljbGUgNC4yLgorCis2LjIuIFNVUiBMRVMgQ09OVFJJQlVUSU9OUworCitMZXMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgc3VyIGxlcyBDb250cmlidXRpb25zIHNvbnQgYXR0YWNoJiMyMzM7cyBhdSB0aXR1bGFpcmUgZGUgZHJvaXRzIHBhdHJpbW9uaWF1eCBkJiMyMzM7c2lnbiYjMjMzOyBwYXIgbGEgbCYjMjMzO2dpc2xhdGlvbiBhcHBsaWNhYmxlLgorCis2LjMuIFNVUiBMRVMgTU9EVUxFUyBEWU5BTUlRVUVTCisKK0xlIExpY2VuY2kmIzIzMzsgYXlhbnQgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1biBNb2R1bGUgRHluYW1pcXVlIGVzdCB0aXR1bGFpcmUgZGVzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIHN1ciBjZSBNb2R1bGUgRHluYW1pcXVlIGV0IHJlc3RlIGxpYnJlIGR1IGNob2l4IGR1IGNvbnRyYXQgciYjMjMzO2dpc3NhbnQgc2EgZGlmZnVzaW9uLgorCis2LjQuIERJU1BPU0lUSU9OUyBDT01NVU5FUworCis2LjQuMS4gTGUgTGljZW5jaSYjMjMzOyBzJiM4MjE3O2VuZ2FnZSBleHByZXNzJiMyMzM7bWVudDoKKworJiMyMjQ7IG5lIHBhcyBzdXBwcmltZXIgb3UgbW9kaWZpZXIgZGUgcXVlbHF1ZSBtYW5pJiMyMzI7cmUgcXVlIGNlIHNvaXQgbGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgYXBwb3MmIzIzMztlcyBzdXIgbGUgTG9naWNpZWw7CisKKyYjMjI0OyByZXByb2R1aXJlICYjMjI0OyBsJiM4MjE3O2lkZW50aXF1ZSBsZXNkaXRlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIHN1ciBsZXMgY29waWVzIGR1IExvZ2ljaWVsLgorCis2LjQuMi4gTGUgTGljZW5jaSYjMjMzOyBzJiM4MjE3O2VuZ2FnZSAmIzIyNDsgbmUgcGFzIHBvcnRlciBhdHRlaW50ZSwgZGlyZWN0ZW1lbnQgb3UgaW5kaXJlY3RlbWVudCwgYXV4IGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IFRpdHVsYWlyZSBldC9vdSBkZXMgQ29udHJpYnV0ZXVycyBldCAmIzIyNDsgcHJlbmRyZSwgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50LCAmIzIyNDsgbCYjODIxNzsmIzIzMztnYXJkIGRlIHNvbiBwZXJzb25uZWwgdG91dGVzIGxlcyBtZXN1cmVzIG4mIzIzMztjZXNzYWlyZXMgcG91ciBhc3N1cmVyIGxlIHJlc3BlY3QgZGVzIGRpdHMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgVGl0dWxhaXJlIGV0L291IGRlcyBDb250cmlidXRldXJzLgorCitBcnRpY2xlIDcgLSBTRVJWSUNFUyBBU1NPQ0lFUworCis3LjEuIExlIENvbnRyYXQgbiYjODIxNztvYmxpZ2UgZW4gYXVjdW4gY2FzIGxlIENvbmMmIzIzMztkYW50ICYjMjI0OyBsYSByJiMyMzM7YWxpc2F0aW9uIGRlIHByZXN0YXRpb25zIGQmIzgyMTc7YXNzaXN0YW5jZSB0ZWNobmlxdWUgb3UgZGUgbWFpbnRlbmFuY2UgZHUgTG9naWNpZWwuCisKK0NlcGVuZGFudCBsZSBDb25jJiMyMzM7ZGFudCByZXN0ZSBsaWJyZSBkZSBwcm9wb3NlciBjZSB0eXBlIGRlIHNlcnZpY2VzLiBMZXMgdGVybWVzIGV0IGNvbmRpdGlvbnMgZCYjODIxNzt1bmUgdGVsbGUgYXNzaXN0YW5jZSB0ZWNobmlxdWUgZXQvb3UgZCYjODIxNzt1bmUgdGVsbGUgbWFpbnRlbmFuY2Ugc2Vyb250IGFsb3JzIGQmIzIzMzt0ZXJtaW4mIzIzMztzIGRhbnMgdW4gYWN0ZSBzJiMyMzM7cGFyJiMyMzM7LiBDZXMgYWN0ZXMgZGUgbWFpbnRlbmFuY2UgZXQvb3UgYXNzaXN0YW5jZSB0ZWNobmlxdWUgbiYjODIxNztlbmdhZ2Vyb250IHF1ZSBsYSBzZXVsZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHF1aSBsZXMgcHJvcG9zZS4KKworNy4yLiBEZSBtJiMyMzQ7bWUsIHRvdXQgQ29uYyYjMjMzO2RhbnQgZXN0IGxpYnJlIGRlIHByb3Bvc2VyLCBzb3VzIHNhIHNldWxlIHJlc3BvbnNhYmlsaXQmIzIzMzssICYjMjI0OyBzZXMgbGljZW5jaSYjMjMzO3MgdW5lIGdhcmFudGllLCBxdWkgbiYjODIxNztlbmdhZ2VyYSBxdWUgbHVpLCBsb3JzIGRlIGxhIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIGV0L291IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBldCBjZSwgZGFucyBsZXMgY29uZGl0aW9ucyBxdSYjODIxNztpbCBzb3VoYWl0ZS4gQ2V0dGUgZ2FyYW50aWUgZXQgbGVzIG1vZGFsaXQmIzIzMztzIGZpbmFuY2kmIzIzMjtyZXMgZGUgc29uIGFwcGxpY2F0aW9uIGZlcm9udCBsJiM4MjE3O29iamV0IGQmIzgyMTc7dW4gYWN0ZSBzJiMyMzM7cGFyJiMyMzM7IGVudHJlIGxlIENvbmMmIzIzMztkYW50IGV0IGxlIExpY2VuY2kmIzIzMzsuCisKK0FydGljbGUgOCAtIFJFU1BPTlNBQklMSVRFCisKKzguMS4gU291cyByJiMyMzM7c2VydmUgZGVzIGRpc3Bvc2l0aW9ucyBkZSBsJiM4MjE3O2FydGljbGUgOC4yLCBzaSBsZSBDb25jJiMyMzM7ZGFudCBuJiM4MjE3O2V4JiMyMzM7Y3V0ZSBwYXMgdG91dCBvdSBwYXJ0aWUgZGVzIG9ibGlnYXRpb25zIG1pc2VzICYjMjI0OyBzYSBjaGFyZ2UgcGFyIGxlIENvbnRyYXQsIGxlIExpY2VuY2kmIzIzMzsgYSBsYSBmYWN1bHQmIzIzMzssIHNvdXMgciYjMjMzO3NlcnZlIGRlIHByb3V2ZXIgbGEgZmF1dGUgZHUgQ29uYyYjMjMzO2RhbnQgY29uY2VybiYjMjMzOywgZGUgc29sbGljaXRlciBsYSByJiMyMzM7cGFyYXRpb24gZHUgcHImIzIzMztqdWRpY2UgZGlyZWN0IHF1JiM4MjE3O2lsIHN1Yml0IGV0IGRvbnQgaWwgYXBwb3J0ZXJhIGxhIHByZXV2ZS4KKworOC4yLiBMYSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IGVzdCBsaW1pdCYjMjMzO2UgYXV4IGVuZ2FnZW1lbnRzIHByaXMgZW4gYXBwbGljYXRpb24gZHUgQ29udHJhdCBldCBuZSBzYXVyYWl0ICYjMjM0O3RyZSBlbmdhZyYjMjMzO2UgZW4gcmFpc29uIG5vdGFtbWVudDooaSkgZGVzIGRvbW1hZ2VzIGR1cyAmIzIyNDsgbCYjODIxNztpbmV4JiMyMzM7Y3V0aW9uLCB0b3RhbGUgb3UgcGFydGllbGxlLCBkZSBzZXMgb2JsaWdhdGlvbnMgcGFyIGxlIExpY2VuY2kmIzIzMzssIChpaSkgZGVzIGRvbW1hZ2VzIGRpcmVjdHMgb3UgaW5kaXJlY3RzIGQmIzIzMztjb3VsYW50IGRlIGwmIzgyMTc7dXRpbGlzYXRpb24gb3UgZGVzIHBlcmZvcm1hbmNlcyBkdSBMb2dpY2llbCBzdWJpcyBwYXIgbGUgTGljZW5jaSYjMjMzOyBsb3JzcXUmIzgyMTc7aWwgcyYjODIxNzthZ2l0IGQmIzgyMTc7dW4gcHJvZmVzc2lvbm5lbCB1dGlsaXNhbnQgbGUgTG9naWNpZWwgJiMyMjQ7IGRlcyBmaW5zIHByb2Zlc3Npb25uZWxsZXMgZXQgKGlpaSkgZGVzIGRvbW1hZ2VzIGluZGlyZWN0cyBkJiMyMzM7Y291bGFudCBkZSBsJiM4MjE3O3V0aWxpc2F0aW9uIG91IGRlcyBwZXJmb3JtYW5jZXMgZHUgTG9naWNpZWwuIExlcyBQYXJ0aWVzIGNvbnZpZW5uZW50IGV4cHJlc3MmIzIzMzttZW50IHF1ZSB0b3V0IHByJiMyMzM7anVkaWNlIGZpbmFuY2llciBvdSBjb21tZXJjaWFsIChwYXIgZXhlbXBsZSBwZXJ0ZSBkZSBkb25uJiMyMzM7ZXMsIHBlcnRlIGRlIGImIzIzMztuJiMyMzM7ZmljZXMsIHBlcnRlIGQmIzgyMTc7ZXhwbG9pdGF0aW9uLCBwZXJ0ZSBkZSBjbGllbnQmIzIzMjtsZSBvdSBkZSBjb21tYW5kZXMsIG1hbnF1ZSAmIzIyNDsgZ2FnbmVyLCB0cm91YmxlIGNvbW1lcmNpYWwgcXVlbGNvbnF1ZSkgb3UgdG91dGUgYWN0aW9uIGRpcmlnJiMyMzM7ZSBjb250cmUgbGUgTGljZW5jaSYjMjMzOyBwYXIgdW4gdGllcnMsIGNvbnN0aXR1ZSB1biBkb21tYWdlIGluZGlyZWN0IGV0IG4mIzgyMTc7b3V2cmUgcGFzIGRyb2l0ICYjMjI0OyByJiMyMzM7cGFyYXRpb24gcGFyIGxlIENvbmMmIzIzMztkYW50LgorCitBcnRpY2xlIDkgLSBHQVJBTlRJRQorCis5LjEuIExlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgcXVlIGwmIzgyMTc7JiMyMzM7dGF0IGFjdHVlbCBkZXMgY29ubmFpc3NhbmNlcyBzY2llbnRpZmlxdWVzIGV0IHRlY2huaXF1ZXMgYXUgbW9tZW50IGRlIGxhIG1pc2UgZW4gY2lyY3VsYXRpb24gZHUgTG9naWNpZWwgbmUgcGVybWV0IHBhcyBkJiM4MjE3O2VuIHRlc3RlciBldCBkJiM4MjE3O2VuIHYmIzIzMztyaWZpZXIgdG91dGVzIGxlcyB1dGlsaXNhdGlvbnMgbmkgZGUgZCYjMjMzO3RlY3RlciBsJiM4MjE3O2V4aXN0ZW5jZSBkJiM4MjE3OyYjMjMzO3ZlbnR1ZWxzIGQmIzIzMztmYXV0cy4gTCYjODIxNzthdHRlbnRpb24gZHUgTGljZW5jaSYjMjMzOyBhICYjMjMzO3QmIzIzMzsgYXR0aXImIzIzMztlIHN1ciBjZSBwb2ludCBzdXIgbGVzIHJpc3F1ZXMgYXNzb2NpJiMyMzM7cyBhdSBjaGFyZ2VtZW50LCAmIzIyNDsgbCYjODIxNzt1dGlsaXNhdGlvbiwgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IExvZ2ljaWVsIHF1aSBzb250IHImIzIzMztzZXJ2JiMyMzM7cyAmIzIyNDsgZGVzIHV0aWxpc2F0ZXVycyBhdmVydGlzLgorCitJbCByZWwmIzIzMjt2ZSBkZSBsYSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IExpY2VuY2kmIzIzMzsgZGUgY29udHImIzI0NDtsZXIsIHBhciB0b3VzIG1veWVucywgbCYjODIxNzthZCYjMjMzO3F1YXRpb24gZHUgcHJvZHVpdCAmIzIyNDsgc2VzIGJlc29pbnMsIHNvbiBib24gZm9uY3Rpb25uZW1lbnQgZXQgZGUgc2Bhc3N1cmVyIHF1JiM4MjE3O2lsIG5lIGNhdXNlcmEgcGFzIGRlIGRvbW1hZ2VzIGF1eCBwZXJzb25uZXMgZXQgYXV4IGJpZW5zLgorCis5LjIuIExlIENvbmMmIzIzMztkYW50IGQmIzIzMztjbGFyZSBkZSBib25uZSBmb2kgJiMyMzQ7dHJlIGVuIGRyb2l0IGRlIGNvbmMmIzIzMztkZXIgbGBlbnNlbWJsZSBkZXMgZHJvaXRzIGF0dGFjaCYjMjMzO3MgYXUgTG9naWNpZWwgKGNvbXByZW5hbnQgbm90YW1tZW50IGxlcyBkcm9pdHMgdmlzJiMyMzM7cyAmIzIyNDsgbGBhcnRpY2xlIDUpLgorCis5LjMuIExlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgcXVlIGxlIExvZ2ljaWVsIGVzdCBmb3VybmkgJiMxNzE7ZW4gbGAmIzIzMzt0YXQmIzE4NzsgcGFyIGxlIENvbmMmIzIzMztkYW50IHNhbnMgYXV0cmUgZ2FyYW50aWUsIGV4cHJlc3NlIG91IHRhY2l0ZSwgcXVlIGNlbGxlIHByJiMyMzM7dnVlICYjMjI0OyBsJiM4MjE3O2FydGljbGUgOS4yIGV0IG5vdGFtbWVudCBzYW5zIGF1Y3VuZSBnYXJhbnRpZSBzdXIgc2EgdmFsZXVyIGNvbW1lcmNpYWxlLCBzb24gY2FyYWN0JiMyMzI7cmUgcyYjMjMzO2N1cmlzJiMyMzM7LCBpbm5vdmFudCBvdSBwZXJ0aW5lbnQuCisKK0VuIHBhcnRpY3VsaWVyLCBsZSBDb25jJiMyMzM7ZGFudCBuZSBnYXJhbnRpdCBwYXMgcXVlIGxlIExvZ2ljaWVsIGVzdCBleGVtcHQgZGBlcnJldXIsIHF1JiM4MjE3O2lsIGZvbmN0aW9ubmVyYSBzYW5zIGludGVycnVwdGlvbiwgcXUmIzgyMTc7aWwgc2VyYSBjb21wYXRpYmxlIGF2ZWMgbCYjODIxNzsmIzIzMztxdWlwZW1lbnQgZHUgTGljZW5jaSYjMjMzOyBldCBzYSBjb25maWd1cmF0aW9uIGxvZ2ljaWVsbGUgbmkgcXUmIzgyMTc7aWwgcmVtcGxpcmEgbGVzIGJlc29pbnMgZHUgTGljZW5jaSYjMjMzOy4KKworOS40LiBMZSBDb25jJiMyMzM7ZGFudCBuZSBnYXJhbnRpdCBwYXMsIGRlIG1hbmkmIzIzMjtyZSBleHByZXNzZSBvdSB0YWNpdGUsIHF1ZSBsZSBMb2dpY2llbCBuZSBwb3J0ZSBwYXMgYXR0ZWludGUgJiMyMjQ7IHVuIHF1ZWxjb25xdWUgZHJvaXQgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkJiM4MjE3O3VuIHRpZXJzIHBvcnRhbnQgc3VyIHVuIGJyZXZldCwgdW4gbG9naWNpZWwgb3Ugc3VyIHRvdXQgYXV0cmUgZHJvaXQgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOy4gQWluc2ksIGxlIENvbmMmIzIzMztkYW50IGV4Y2x1dCB0b3V0ZSBnYXJhbnRpZSBhdSBwcm9maXQgZHUgTGljZW5jaSYjMjMzOyBjb250cmUgbGVzIGFjdGlvbnMgZW4gY29udHJlZmEmIzIzMTtvbiBxdWkgcG91cnJhaWVudCAmIzIzNDt0cmUgZGlsaWdlbnQmIzIzMztlcyBhdSB0aXRyZSBkZSBsJiM4MjE3O3V0aWxpc2F0aW9uLCBkZSBsYSBtb2RpZmljYXRpb24sIGV0IGRlIGxhIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsLiBOJiMyMzM7YW5tb2lucywgc2kgZGUgdGVsbGVzIGFjdGlvbnMgc29udCBleGVyYyYjMjMzO2VzIGNvbnRyZSBsZSBMaWNlbmNpJiMyMzM7LCBsZSBDb25jJiMyMzM7ZGFudCBsdWkgYXBwb3J0ZXJhIHNvbiBhaWRlIHRlY2huaXF1ZSBldCBqdXJpZGlxdWUgcG91ciBzYSBkJiMyMzM7ZmVuc2UuIENldHRlIGFpZGUgdGVjaG5pcXVlIGV0IGp1cmlkaXF1ZSBlc3QgZCYjMjMzO3Rlcm1pbiYjMjMzO2UgYXUgY2FzIHBhciBjYXMgZW50cmUgbGUgQ29uYyYjMjMzO2RhbnQgY29uY2VybiYjMjMzOyBldCBsZSBMaWNlbmNpJiMyMzM7IGRhbnMgbGUgY2FkcmUgZCYjODIxNzt1biBwcm90b2NvbGUgZCYjODIxNzthY2NvcmQuIExlIENvbmMmIzIzMztkYW50IGQmIzIzMztnYWdlIHRvdXRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgcXVhbnQgJiMyMjQ7IGwmIzgyMTc7dXRpbGlzYXRpb24gZGUgbGEgZCYjMjMzO25vbWluYXRpb24gZHUgTG9naWNpZWwgcGFyIGxlIExpY2VuY2kmIzIzMzsuIEF1Y3VuZSBnYXJhbnRpZSBuJiM4MjE3O2VzdCBhcHBvcnQmIzIzMztlIHF1YW50ICYjMjI0OyBsJiM4MjE3O2V4aXN0ZW5jZSBkZSBkcm9pdHMgYW50JiMyMzM7cmlldXJzIHN1ciBsZSBub20gZHUgTG9naWNpZWwgZXQgc3VyIGwmIzgyMTc7ZXhpc3RlbmNlIGQmIzgyMTc7dW5lIG1hcnF1ZS4KKworQXJ0aWNsZSAxMCAtIFJFU0lMSUFUSU9OCisKKzEwLjEuIEVuIGNhcyBkZSBtYW5xdWVtZW50IHBhciBsZSBMaWNlbmNpJiMyMzM7IGF1eCBvYmxpZ2F0aW9ucyBtaXNlcyAmIzIyNDsgc2EgY2hhcmdlIHBhciBsZSBDb250cmF0LCBsZSBDb25jJiMyMzM7ZGFudCBwb3VycmEgciYjMjMzO3NpbGllciBkZSBwbGVpbiBkcm9pdCBsZSBDb250cmF0IHRyZW50ZSAoMzApIGpvdXJzIGFwciYjMjMyO3Mgbm90aWZpY2F0aW9uIGFkcmVzcyYjMjMzO2UgYXUgTGljZW5jaSYjMjMzOyBldCByZXN0JiMyMzM7ZSBzYW5zIGVmZmV0LgorCisxMC4yLiBMZSBMaWNlbmNpJiMyMzM7IGRvbnQgbGUgQ29udHJhdCBlc3QgciYjMjMzO3NpbGkmIzIzMzsgbiYjODIxNztlc3QgcGx1cyBhdXRvcmlzJiMyMzM7ICYjMjI0OyB1dGlsaXNlciwgbW9kaWZpZXIgb3UgZGlzdHJpYnVlciBsZSBMb2dpY2llbC4gQ2VwZW5kYW50LCB0b3V0ZXMgbGVzIGxpY2VuY2VzIHF1JiM4MjE3O2lsIGF1cmEgY29uYyYjMjMzO2QmIzIzMztlcyBhbnQmIzIzMztyaWV1cmVtZW50ICYjMjI0OyBsYSByJiMyMzM7c2lsaWF0aW9uIGR1IENvbnRyYXQgcmVzdGVyb250IHZhbGlkZXMgc291cyByJiMyMzM7c2VydmUgcXUmIzgyMTc7ZWxsZXMgYWllbnQgJiMyMzM7dCYjMjMzOyBlZmZlY3R1JiMyMzM7ZXMgZW4gY29uZm9ybWl0JiMyMzM7IGF2ZWMgbGUgQ29udHJhdC4KKworQXJ0aWNsZSAxMSAtIERJU1BPU0lUSU9OUyBESVZFUlNFUworCisxMS4xLiBDQVVTRSBFWFRFUklFVVJFCisKK0F1Y3VuZSBkZXMgUGFydGllcyBuZSBzZXJhIHJlc3BvbnNhYmxlIGQmIzgyMTc7dW4gcmV0YXJkIG91IGQmIzgyMTc7dW5lIGQmIzIzMztmYWlsbGFuY2UgZCYjODIxNztleCYjMjMzO2N1dGlvbiBkdSBDb250cmF0IHF1aSBzZXJhaXQgZCYjMjUxOyAmIzIyNDsgdW4gY2FzIGRlIGZvcmNlIG1hamV1cmUsIHVuIGNhcyBmb3J0dWl0IG91IHVuZSBjYXVzZSBleHQmIzIzMztyaWV1cmUsIHRlbGxlIHF1ZSwgbm90YW1tZW50LCBsZSBtYXV2YWlzIGZvbmN0aW9ubmVtZW50IG91IGxlcyBpbnRlcnJ1cHRpb25zIGR1IHImIzIzMztzZWF1ICYjMjMzO2xlY3RyaXF1ZSBvdSBkZSB0JiMyMzM7bCYjMjMzO2NvbW11bmljYXRpb24sIGxhIHBhcmFseXNpZSBkdSByJiMyMzM7c2VhdSBsaSYjMjMzO2UgJiMyMjQ7IHVuZSBhdHRhcXVlIGluZm9ybWF0aXF1ZSwgbCYjODIxNztpbnRlcnZlbnRpb24gZGVzIGF1dG9yaXQmIzIzMztzIGdvdXZlcm5lbWVudGFsZXMsIGxlcyBjYXRhc3Ryb3BoZXMgbmF0dXJlbGxlcywgbGVzIGQmIzIzMztnJiMyMjY7dHMgZGVzIGVhdXgsIGxlcyB0cmVtYmxlbWVudHMgZGUgdGVycmUsIGxlIGZldSwgbGVzIGV4cGxvc2lvbnMsIGxlcyBnciYjMjMyO3ZlcyBldCBsZXMgY29uZmxpdHMgc29jaWF1eCwgbCYjODIxNzsmIzIzMzt0YXQgZGUgZ3VlcnJlJiM4MjMwOworCisxMS4yLiBMZSBmYWl0LCBwYXIgbCYjODIxNzt1bmUgb3UgbCYjODIxNzthdXRyZSBkZXMgUGFydGllcywgZCYjODIxNztvbWV0dHJlIGVuIHVuZSBvdSBwbHVzaWV1cnMgb2NjYXNpb25zIGRlIHNlIHByJiMyMzM7dmFsb2lyIGQmIzgyMTc7dW5lIG91IHBsdXNpZXVycyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCwgbmUgcG91cnJhIGVuIGF1Y3VuIGNhcyBpbXBsaXF1ZXIgcmVub25jaWF0aW9uIHBhciBsYSBQYXJ0aWUgaW50JiMyMzM7cmVzcyYjMjMzO2UgJiMyMjQ7IHMmIzgyMTc7ZW4gcHImIzIzMzt2YWxvaXIgdWx0JiMyMzM7cmlldXJlbWVudC4KKworMTEuMy4gTGUgQ29udHJhdCBhbm51bGUgZXQgcmVtcGxhY2UgdG91dGUgY29udmVudGlvbiBhbnQmIzIzMztyaWV1cmUsICYjMjMzO2NyaXRlIG91IG9yYWxlLCBlbnRyZSBsZXMgUGFydGllcyBzdXIgbGUgbSYjMjM0O21lIG9iamV0IGV0IGNvbnN0aXR1ZSBsJiM4MjE3O2FjY29yZCBlbnRpZXIgZW50cmUgbGVzIFBhcnRpZXMgc3VyIGNldCBvYmpldC4gQXVjdW5lIGFkZGl0aW9uIG91IG1vZGlmaWNhdGlvbiBhdXggdGVybWVzIGR1IENvbnRyYXQgbiYjODIxNzthdXJhIGQmIzgyMTc7ZWZmZXQgJiMyMjQ7IGwmIzgyMTc7JiMyMzM7Z2FyZCBkZXMgUGFydGllcyAmIzIyNDsgbW9pbnMgZCYjODIxNzsmIzIzNDt0cmUgZmFpdGUgcGFyICYjMjMzO2NyaXQgZXQgc2lnbiYjMjMzO2UgcGFyIGxldXJzIHJlcHImIzIzMztzZW50YW50cyBkJiMyNTE7bWVudCBoYWJpbGl0JiMyMzM7cy4KKworMTEuNC4gRGFucyBsJiM4MjE3O2h5cG90aCYjMjMyO3NlIG8mIzI0OTsgdW5lIG91IHBsdXNpZXVycyBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgcyYjODIxNzthdiYjMjMyO3JlcmFpdCBjb250cmFpcmUgJiMyMjQ7IHVuZSBsb2kgb3UgJiMyMjQ7IHVuIHRleHRlIGFwcGxpY2FibGUsIGV4aXN0YW50cyBvdSBmdXR1cnMsIGNldHRlIGxvaSBvdSBjZSB0ZXh0ZSBwciYjMjMzO3ZhdWRyYWl0LCBldCBsZXMgUGFydGllcyBmZXJhaWVudCBsZXMgYW1lbmRlbWVudHMgbiYjMjMzO2Nlc3NhaXJlcyBwb3VyIHNlIGNvbmZvcm1lciAmIzIyNDsgY2V0dGUgbG9pIG91ICYjMjI0OyBjZSB0ZXh0ZS4gVG91dGVzIGxlcyBhdXRyZXMgZGlzcG9zaXRpb25zIHJlc3Rlcm9udCBlbiB2aWd1ZXVyLiBEZSBtJiMyMzQ7bWUsIGxhIG51bGxpdCYjMjMzOywgcG91ciBxdWVscXVlIHJhaXNvbiBxdWUgY2Ugc29pdCwgZCYjODIxNzt1bmUgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IG5lIHNhdXJhaXQgZW50cmEmIzIzODtuZXIgbGEgbnVsbGl0JiMyMzM7IGRlIGwmIzgyMTc7ZW5zZW1ibGUgZHUgQ29udHJhdC4KKworMTEuNS4gTEFOR1VFCisKK0xlIENvbnRyYXQgZXN0IHImIzIzMztkaWcmIzIzMzsgZW4gbGFuZ3VlIGZyYW4mIzIzMTthaXNlIGV0IGVuIGxhbmd1ZSBhbmdsYWlzZS4gRW4gY2FzIGRlIGRpdmVyZ2VuY2UgZCYjODIxNztpbnRlcnByJiMyMzM7dGF0aW9uLCBzZXVsZSBsYSB2ZXJzaW9uIGZyYW4mIzIzMTthaXNlIGZhaXQgZm9pLgorCitBcnRpY2xlIDEyIC0gTk9VVkVMTEVTIFZFUlNJT05TIERVIENPTlRSQVQKKworMTIuMS4gVG91dGUgcGVyc29ubmUgZXN0IGF1dG9yaXMmIzIzMztlICYjMjI0OyBjb3BpZXIgZXQgZGlzdHJpYnVlciBkZXMgY29waWVzIGRlIGNlIENvbnRyYXQuCisKKzEyLjIuIEFmaW4gZCYjODIxNztlbiBwciYjMjMzO3NlcnZlciBsYSBjb2gmIzIzMztyZW5jZSwgbGUgdGV4dGUgZHUgQ29udHJhdCBlc3QgcHJvdCYjMjMzO2cmIzIzMzsgZXQgbmUgcGV1dCAmIzIzNDt0cmUgbW9kaWZpJiMyMzM7IHF1ZSBwYXIgbGVzIGF1dGV1cnMgZGUgbGEgbGljZW5jZSwgbGVzcXVlbHMgc2UgciYjMjMzO3NlcnZlbnQgbGUgZHJvaXQgZGUgcHVibGllciBwJiMyMzM7cmlvZGlxdWVtZW50IGRlcyBtaXNlcyAmIzIyNDsgam91ciBvdSBkZSBub3V2ZWxsZXMgdmVyc2lvbnMgZHUgQ29udHJhdCwgcXVpIHBvc3MmIzIzMjtkZXJvbnQgY2hhY3VuZSB1biBudW0mIzIzMztybyBkaXN0aW5jdC4gQ2VzIHZlcnNpb25zIHVsdCYjMjMzO3JpZXVyZXMgc2Vyb250IHN1c2NlcHRpYmxlcyBkZSBwcmVuZHJlIGVuIGNvbXB0ZSBkZSBub3V2ZWxsZXMgcHJvYmwmIzIzMzttYXRpcXVlcyByZW5jb250ciYjMjMzO2VzIHBhciBsZXMgbG9naWNpZWxzIGxpYnJlcy4KKworMTIuMy4gVG91dCBMb2dpY2llbCBkaWZmdXMmIzIzMzsgc291cyB1bmUgdmVyc2lvbiBkb25uJiMyMzM7ZSBkdSBDb250cmF0IG5lIHBvdXJyYSBmYWlyZSBsYG9iamV0IGRgdW5lIGRpZmZ1c2lvbiB1bHQmIzIzMztyaWV1cmUgcXVlIHNvdXMgbGEgbSYjMjM0O21lIHZlcnNpb24gZHUgQ29udHJhdCBvdSB1bmUgdmVyc2lvbiBwb3N0JiMyMzM7cmlldXJlLCBzb3VzIHImIzIzMztzZXJ2ZSBkZXMgZGlzcG9zaXRpb25zIGRlIGxgYXJ0aWNsZSA1LjMuNC4KKworQXJ0aWNsZSAxMyAtIExPSSBBUFBMSUNBQkxFIEVUIENPTVBFVEVOQ0UgVEVSUklUT1JJQUxFCisKKzEzLjEuIExlIENvbnRyYXQgZXN0IHImIzIzMztnaSBwYXIgbGEgbG9pIGZyYW4mIzIzMTthaXNlLiBMZXMgUGFydGllcyBjb252aWVubmVudCBkZSB0ZW50ZXIgZGUgciYjMjMzO2dsZXIgJiMyMjQ7IGwmIzgyMTc7YW1pYWJsZSBsZXMgZGlmZiYjMjMzO3JlbmRzIG91IGxpdGlnZXMgcXVpIHZpZW5kcmFpZW50ICYjMjI0OyBzZSBwcm9kdWlyZSBwYXIgc3VpdGUgb3UgJiMyMjQ7IGwmIzgyMTc7b2NjYXNpb24gZHUgQ29udHJhdC4KKworMTMuMi4gQSBkJiMyMzM7ZmF1dCBkJiM4MjE3O2FjY29yZCBhbWlhYmxlIGRhbnMgdW4gZCYjMjMzO2xhaSBkZSBkZXV4ICgyKSBtb2lzICYjMjI0OyBjb21wdGVyIGRlIGxldXIgc3VydmVuYW5jZSBldCBzYXVmIHNpdHVhdGlvbiByZWxldmFudCBkJiM4MjE3O3VuZSBwcm9jJiMyMzM7ZHVyZSBkJiM4MjE3O3VyZ2VuY2UsIGxlcyBkaWZmJiMyMzM7cmVuZHMgb3UgbGl0aWdlcyBzZXJvbnQgcG9ydCYjMjMzO3MgcGFyIGxhIFBhcnRpZSBsYSBwbHVzIGRpbGlnZW50ZSBkZXZhbnQgbGVzIFRyaWJ1bmF1eCBjb21wJiMyMzM7dGVudHMgZGUgUGFyaXMuCisKKzEgQ2U6IENFQSwgQzogQ05SUywgSTogSU5SSUEsIExMOiBMb2dpY2llbCBMaWJyZQorCisKK1ZlcnNpb24gMSBkdSAyMS8wNi8yMDA0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmMxNGE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtMi4wCkBAIC0wLDAgKzEsMjQzIEBACisKK0NPTlRSQVQgREUgTElDRU5DRSBERSBMT0dJQ0lFTCBMSUJSRSBDZUNJTEwKKworQXZlcnRpc3NlbWVudAorCitDZSBjb250cmF0IGVzdCB1bmUgbGljZW5jZSBkZSBsb2dpY2llbCBsaWJyZSBpc3N1ZSBkYHVuZSBjb25jZXJ0YXRpb24gZW50cmUgc2VzIGF1dGV1cnMgYWZpbiBxdWUgbGUgcmVzcGVjdCBkZSBkZXV4IGdyYW5kcyBwcmluY2lwZXMgcHImIzIzMztzaWRlICYjMjI0OyBzYSByJiMyMzM7ZGFjdGlvbjoKKworZGB1bmUgcGFydCwgbGUgcmVzcGVjdCBkZXMgcHJpbmNpcGVzIGRlIGRpZmZ1c2lvbiBkZXMgbG9naWNpZWxzIGxpYnJlczogYWNjJiMyMzI7cyBhdSBjb2RlIHNvdXJjZSwgZHJvaXRzICYjMjMzO3RlbmR1cyBjb25mJiMyMzM7ciYjMjMzO3MgYXV4IHV0aWxpc2F0ZXVycywKK2RgYXV0cmUgcGFydCwgbGEgZCYjMjMzO3NpZ25hdGlvbiBkYHVuIGRyb2l0IGFwcGxpY2FibGUsIGxlIGRyb2l0IGZyYW4mIzIzMTthaXMsIGF1cXVlbCBlbGxlIGVzdCBjb25mb3JtZSwgdGFudCBhdSByZWdhcmQgZHUgZHJvaXQgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBjaXZpbGUgcXVlIGR1IGRyb2l0IGRlIGxhIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZXQgZGUgbGEgcHJvdGVjdGlvbiBxdWBpbCBvZmZyZSBhdXggYXV0ZXVycyBldCB0aXR1bGFpcmVzIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciB1biBsb2dpY2llbC4KK0xlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UgQ2VDSUxMMSBzb250OgorCitDb21taXNzYXJpYXQgJiMyMjQ7IGxgRW5lcmdpZSBBdG9taXF1ZSAtIENFQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyBkZSByZWNoZXJjaGUgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSwgdGVjaG5pcXVlIGV0IGluZHVzdHJpZWwsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyAyNSBydWUgTGVibGFuYywgaW1tZXVibGUgTGUgUG9uYW50IEQsIDc1MDE1IFBhcmlzLgorCitDZW50cmUgTmF0aW9uYWwgZGUgbGEgUmVjaGVyY2hlIFNjaWVudGlmaXF1ZSAtIENOUlMsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSBldCB0ZWNobm9sb2dpcXVlLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgMyBydWUgTWljaGVsLUFuZ2UsIDc1Nzk0IFBhcmlzIGNlZGV4IDE2LgorCitJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlIC0gSU5SSUEsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSBldCB0ZWNobm9sb2dpcXVlLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgRG9tYWluZSBkZSBWb2x1Y2VhdSwgUm9jcXVlbmNvdXJ0LCBCUCAxMDUsIDc4MTUzIExlIENoZXNuYXkgY2VkZXguCisKK1ByJiMyMzM7YW1idWxlCisKK0NlIGNvbnRyYXQgZXN0IHVuZSBsaWNlbmNlIGRlIGxvZ2ljaWVsIGxpYnJlIGRvbnQgbGBvYmplY3RpZiBlc3QgZGUgY29uZiYjMjMzO3JlciBhdXggdXRpbGlzYXRldXJzIGxhIGxpYmVydCYjMjMzOyBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gZHUgbG9naWNpZWwgciYjMjMzO2dpIHBhciBjZXR0ZSBsaWNlbmNlIGRhbnMgbGUgY2FkcmUgZGB1biBtb2QmIzIzMjtsZSBkZSBkaWZmdXNpb24gZW4gbG9naWNpZWwgbGlicmUuCisKK0xgZXhlcmNpY2UgZGUgY2VzIGxpYmVydCYjMjMzO3MgZXN0IGFzc29ydGkgZGUgY2VydGFpbnMgZGV2b2lycyAmIzIyNDsgbGEgY2hhcmdlIGRlcyB1dGlsaXNhdGV1cnMgYWZpbiBkZSBwciYjMjMzO3NlcnZlciBjZSBzdGF0dXQgYXUgY291cnMgZGVzIHJlZGlzdHJpYnV0aW9ucyB1bHQmIzIzMztyaWV1cmVzLgorCitMYGFjY2Vzc2liaWxpdCYjMjMzOyBhdSBjb2RlIHNvdXJjZSBldCBsZXMgZHJvaXRzIGRlIGNvcGllLCBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gcXVpIGVuIGQmIzIzMztjb3VsZW50IG9udCBwb3VyIGNvbnRyZXBhcnRpZSBkZSBuYG9mZnJpciBhdXggdXRpbGlzYXRldXJzIHF1YHVuZSBnYXJhbnRpZSBsaW1pdCYjMjMzO2UgZXQgZGUgbmUgZmFpcmUgcGVzZXIgc3VyIGxgYXV0ZXVyIGR1IGxvZ2ljaWVsLCBsZSB0aXR1bGFpcmUgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZXQgbGVzIGNvbmMmIzIzMztkYW50cyBzdWNjZXNzaWZzIHF1YHVuZSByZXNwb25zYWJpbGl0JiMyMzM7IHJlc3RyZWludGUuCisKK0EgY2V0ICYjMjMzO2dhcmQgbGBhdHRlbnRpb24gZGUgbGB1dGlsaXNhdGV1ciBlc3QgYXR0aXImIzIzMztlIHN1ciBsZXMgcmlzcXVlcyBhc3NvY2kmIzIzMztzIGF1IGNoYXJnZW1lbnQsICYjMjI0OyBsYHV0aWxpc2F0aW9uLCAmIzIyNDsgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IGxvZ2ljaWVsIHBhciBsYHV0aWxpc2F0ZXVyICYjMjMzO3RhbnQgZG9ubiYjMjMzOyBzYSBzcCYjMjMzO2NpZmljaXQmIzIzMzsgZGUgbG9naWNpZWwgbGlicmUsIHF1aSBwZXV0IGxlIHJlbmRyZSBjb21wbGV4ZSAmIzIyNDsgbWFuaXB1bGVyIGV0IHF1aSBsZSByJiMyMzM7c2VydmUgZG9uYyAmIzIyNDsgZGVzIGQmIzIzMzt2ZWxvcHBldXJzIG91IGRlcyBwcm9mZXNzaW9ubmVscyBhdmVydGlzIHBvc3MmIzIzMztkYW50IGRlcyBjb25uYWlzc2FuY2VzIGluZm9ybWF0aXF1ZXMgYXBwcm9mb25kaWVzLiBMZXMgdXRpbGlzYXRldXJzIHNvbnQgZG9uYyBpbnZpdCYjMjMzO3MgJiMyMjQ7IGNoYXJnZXIgZXQgdGVzdGVyIGxgYWQmIzIzMztxdWF0aW9uIGR1IGxvZ2ljaWVsICYjMjI0OyBsZXVycyBiZXNvaW5zIGRhbnMgZGVzIGNvbmRpdGlvbnMgcGVybWV0dGFudCBkYGFzc3VyZXIgbGEgcyYjMjMzO2N1cml0JiMyMzM7IGRlIGxldXJzIHN5c3QmIzIzMjttZXMgZXQvb3UgZGUgbGV1cnMgZG9ubiYjMjMzO2VzIGV0LCBwbHVzIGcmIzIzMztuJiMyMzM7cmFsZW1lbnQsICYjMjI0OyBsYHV0aWxpc2VyIGV0IGxgZXhwbG9pdGVyIGRhbnMgbGVzIG0mIzIzNDttZXMgY29uZGl0aW9ucyBkZSBzJiMyMzM7Y3VyaXQmIzIzMzsuIENlIGNvbnRyYXQgcGV1dCAmIzIzNDt0cmUgcmVwcm9kdWl0IGV0IGRpZmZ1cyYjMjMzOyBsaWJyZW1lbnQsIHNvdXMgciYjMjMzO3NlcnZlIGRlIGxlIGNvbnNlcnZlciBlbiBsYCYjMjMzO3RhdCwgc2FucyBham91dCBuaSBzdXBwcmVzc2lvbiBkZSBjbGF1c2VzLgorCitDZSBjb250cmF0IGVzdCBzdXNjZXB0aWJsZSBkZSBzYGFwcGxpcXVlciAmIzIyNDsgdG91dCBsb2dpY2llbCBkb250IGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBkJiMyMzM7Y2lkZSBkZSBzb3VtZXR0cmUgbGBleHBsb2l0YXRpb24gYXV4IGRpc3Bvc2l0aW9ucyBxdWBpbCBjb250aWVudC4KKworQXJ0aWNsZSAxIC0gREVGSU5JVElPTlMKKworRGFucyBjZSBjb250cmF0LCBsZXMgdGVybWVzIHN1aXZhbnRzLCBsb3JzcXVgaWxzIHNlcm9udCAmIzIzMztjcml0cyBhdmVjIHVuZSBsZXR0cmUgY2FwaXRhbGUsIGF1cm9udCBsYSBzaWduaWZpY2F0aW9uIHN1aXZhbnRlOgorCitDb250cmF0OiBkJiMyMzM7c2lnbmUgbGUgcHImIzIzMztzZW50IGNvbnRyYXQgZGUgbGljZW5jZSwgc2VzICYjMjMzO3ZlbnR1ZWxsZXMgdmVyc2lvbnMgcG9zdCYjMjMzO3JpZXVyZXMgZXQgYW5uZXhlcy4KKworTG9naWNpZWw6IGQmIzIzMztzaWduZSBsZSBsb2dpY2llbCBzb3VzIHNhIGZvcm1lIGRlIENvZGUgT2JqZXQgZXQvb3UgZGUgQ29kZSBTb3VyY2UgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGxgYWNjZXB0YXRpb24gZHUgQ29udHJhdCBwYXIgbGUgTGljZW5jaSYjMjMzOy4KKworTG9naWNpZWwgSW5pdGlhbDogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIHNvdXMgc2EgZm9ybWUgZGUgQ29kZSBTb3VyY2UgZXQgJiMyMzM7dmVudHVlbGxlbWVudCBkZSBDb2RlIE9iamV0IGV0IGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCBzYSBkb2N1bWVudGF0aW9uLCBkYW5zIGxldXIgJiMyMzM7dGF0IGF1IG1vbWVudCBkZSBsZXVyIHByZW1pJiMyMzI7cmUgZGlmZnVzaW9uIHNvdXMgbGVzIHRlcm1lcyBkdSBDb250cmF0LgorCitMb2dpY2llbCBNb2RpZmkmIzIzMzs6IGQmIzIzMztzaWduZSBsZSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgcGFyIGF1IG1vaW5zIHVuZSBDb250cmlidXRpb24uCisKK0NvZGUgU291cmNlOiBkJiMyMzM7c2lnbmUgbGBlbnNlbWJsZSBkZXMgaW5zdHJ1Y3Rpb25zIGV0IGRlcyBsaWduZXMgZGUgcHJvZ3JhbW1lIGR1IExvZ2ljaWVsIGV0IGF1cXVlbCBsYGFjYyYjMjMyO3MgZXN0IG4mIzIzMztjZXNzYWlyZSBlbiB2dWUgZGUgbW9kaWZpZXIgbGUgTG9naWNpZWwuCisKK0NvZGUgT2JqZXQ6IGQmIzIzMztzaWduZSBsZXMgZmljaGllcnMgYmluYWlyZXMgaXNzdXMgZGUgbGEgY29tcGlsYXRpb24gZHUgQ29kZSBTb3VyY2UuCisKK1RpdHVsYWlyZTogZCYjMjMzO3NpZ25lIGxlIG91IGxlcyBkJiMyMzM7dGVudGV1cnMgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZGBhdXRldXIgc3VyIGxlIExvZ2ljaWVsIEluaXRpYWwuCisKK0xpY2VuY2kmIzIzMzs6IGQmIzIzMztzaWduZSBsZSBvdSBsZXMgdXRpbGlzYXRldXJzIGR1IExvZ2ljaWVsIGF5YW50IGFjY2VwdCYjMjMzOyBsZSBDb250cmF0LgorCitDb250cmlidXRldXI6IGQmIzIzMztzaWduZSBsZSBMaWNlbmNpJiMyMzM7IGF1dGV1ciBkYGF1IG1vaW5zIHVuZSBDb250cmlidXRpb24uCisKK0NvbmMmIzIzMztkYW50OiBkJiMyMzM7c2lnbmUgbGUgVGl0dWxhaXJlIG91IHRvdXRlIHBlcnNvbm5lIHBoeXNpcXVlIG91IG1vcmFsZSBkaXN0cmlidWFudCBsZSBMb2dpY2llbCBzb3VzIGxlIENvbnRyYXQuCisKK0NvbnRyaWJ1dGlvbjogZCYjMjMzO3NpZ25lIGxgZW5zZW1ibGUgZGVzIG1vZGlmaWNhdGlvbnMsIGNvcnJlY3Rpb25zLCB0cmFkdWN0aW9ucywgYWRhcHRhdGlvbnMgZXQvb3Ugbm91dmVsbGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIGludCYjMjMzO2dyJiMyMzM7ZXMgZGFucyBsZSBMb2dpY2llbCBwYXIgdG91dCBDb250cmlidXRldXIsIGFpbnNpIHF1ZSB0b3V0IE1vZHVsZSBJbnRlcm5lLgorCitNb2R1bGU6IGQmIzIzMztzaWduZSB1biBlbnNlbWJsZSBkZSBmaWNoaWVycyBzb3VyY2VzIHkgY29tcHJpcyBsZXVyIGRvY3VtZW50YXRpb24gcXVpIHBlcm1ldCBkZSByJiMyMzM7YWxpc2VyIGRlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBvdSBzZXJ2aWNlcyBzdXBwbCYjMjMzO21lbnRhaXJlcyAmIzIyNDsgY2V1eCBmb3VybmlzIHBhciBsZSBMb2dpY2llbC4KKworTW9kdWxlIEV4dGVybmU6IGQmIzIzMztzaWduZSB0b3V0IE1vZHVsZSwgbm9uIGQmIzIzMztyaXYmIzIzMzsgZHUgTG9naWNpZWwsIHRlbCBxdWUgY2UgTW9kdWxlIGV0IGxlIExvZ2ljaWVsIHNgZXgmIzIzMztjdXRlbnQgZGFucyBkZXMgZXNwYWNlcyBkYGFkcmVzc2FnZSBkaWZmJiMyMzM7cmVudHMsIGxgdW4gYXBwZWxhbnQgbGBhdXRyZSBhdSBtb21lbnQgZGUgbGV1ciBleCYjMjMzO2N1dGlvbi4KKworTW9kdWxlIEludGVybmU6IGQmIzIzMztzaWduZSB0b3V0IE1vZHVsZSBsaSYjMjMzOyBhdSBMb2dpY2llbCBkZSB0ZWxsZSBzb3J0ZSBxdWBpbHMgc2BleCYjMjMzO2N1dGVudCBkYW5zIGxlIG0mIzIzNDttZSBlc3BhY2UgZGBhZHJlc3NhZ2UuCisKK0dOVSBHUEw6IGQmIzIzMztzaWduZSBsYSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkYW5zIHNhIHZlcnNpb24gMiBvdSB0b3V0ZSB2ZXJzaW9uIHVsdCYjMjMzO3JpZXVyZSwgdGVsbGUgcXVlIHB1YmxpJiMyMzM7ZSBwYXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEluYy4KKworUGFydGllczogZCYjMjMzO3NpZ25lIGNvbGxlY3RpdmVtZW50IGxlIExpY2VuY2kmIzIzMzsgZXQgbGUgQ29uYyYjMjMzO2RhbnQuCisKK0NlcyB0ZXJtZXMgc2BlbnRlbmRlbnQgYXUgc2luZ3VsaWVyIGNvbW1lIGF1IHBsdXJpZWwuCisKK0FydGljbGUgMiAtIE9CSkVUCisKK0xlIENvbnRyYXQgYSBwb3VyIG9iamV0IGxhIGNvbmNlc3Npb24gcGFyIGxlIENvbmMmIzIzMztkYW50IGF1IExpY2VuY2kmIzIzMzsgZGB1bmUgbGljZW5jZSBub24gZXhjbHVzaXZlLCBjZXNzaWJsZSBldCBtb25kaWFsZSBkdSBMb2dpY2llbCB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllIGNpLWFwciYjMjMyO3MgJiMyMjQ7IGxgYXJ0aWNsZSA1IHBvdXIgdG91dGUgbGEgZHVyJiMyMzM7ZSBkZSBwcm90ZWN0aW9uIGRlcyBkcm9pdHMgcG9ydGFudCBzdXIgY2UgTG9naWNpZWwuCisKK0FydGljbGUgMyAtIEFDQ0VQVEFUSU9OCisKKzMuMSBMYGFjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlcyB0ZXJtZXMgZHUgQ29udHJhdCBlc3QgciYjMjMzO3B1dCYjMjMzO2UgYWNxdWlzZSBkdSBmYWl0IGR1IHByZW1pZXIgZGVzIGZhaXRzIHN1aXZhbnRzOgorCisoaSkgbGUgY2hhcmdlbWVudCBkdSBMb2dpY2llbCBwYXIgdG91dCBtb3llbiBub3RhbW1lbnQgcGFyIHQmIzIzMztsJiMyMzM7Y2hhcmdlbWVudCAmIzIyNDsgcGFydGlyIGRgdW4gc2VydmV1ciBkaXN0YW50IG91IHBhciBjaGFyZ2VtZW50ICYjMjI0OyBwYXJ0aXIgZGB1biBzdXBwb3J0IHBoeXNpcXVlOworKGlpKSBsZSBwcmVtaWVyIGV4ZXJjaWNlIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlIGxgdW4gcXVlbGNvbnF1ZSBkZXMgZHJvaXRzIGNvbmMmIzIzMztkJiMyMzM7cyBwYXIgbGUgQ29udHJhdC4KKzMuMiBVbiBleGVtcGxhaXJlIGR1IENvbnRyYXQsIGNvbnRlbmFudCBub3RhbW1lbnQgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmIGF1eCBzcCYjMjMzO2NpZmljaXQmIzIzMztzIGR1IExvZ2ljaWVsLCAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgJiMyMjQ7IGxhIGxpbWl0YXRpb24gJiMyMjQ7IHVuIHVzYWdlIHBhciBkZXMgdXRpbGlzYXRldXJzIGV4cCYjMjMzO3JpbWVudCYjMjMzO3MgYSAmIzIzMzt0JiMyMzM7IG1pcyAmIzIyNDsgZGlzcG9zaXRpb24gZHUgTGljZW5jaSYjMjMzOyBwciYjMjMzO2FsYWJsZW1lbnQgJiMyMjQ7IHNvbiBhY2NlcHRhdGlvbiB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllICYjMjI0OyBsYGFydGljbGUgMy4xIGNpIGRlc3N1cyBldCBsZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IGVuIGF2b2lyIHByaXMgY29ubmFpc3NhbmNlLgorCitBcnRpY2xlIDQgLSBFTlRSRUUgRU4gVklHVUVVUiBFVCBEVVJFRQorCis0LjEgRU5UUkVFIEVOIFZJR1VFVVIKKworTGUgQ29udHJhdCBlbnRyZSBlbiB2aWd1ZXVyICYjMjI0OyBsYSBkYXRlIGRlIHNvbiBhY2NlcHRhdGlvbiBwYXIgbGUgTGljZW5jaSYjMjMzOyB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllIGVuIDMuMS4KKworNC4yIERVUkVFCisKK0xlIENvbnRyYXQgcHJvZHVpcmEgc2VzIGVmZmV0cyBwZW5kYW50IHRvdXRlIGxhIGR1ciYjMjMzO2UgbCYjMjMzO2dhbGUgZGUgcHJvdGVjdGlvbiBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBwb3J0YW50IHN1ciBsZSBMb2dpY2llbC4KKworQXJ0aWNsZSA1IC0gRVRFTkRVRSBERVMgRFJPSVRTIENPTkNFREVTCisKK0xlIENvbmMmIzIzMztkYW50IGNvbmMmIzIzMjtkZSBhdSBMaWNlbmNpJiMyMzM7LCBxdWkgYWNjZXB0ZSwgbGVzIGRyb2l0cyBzdWl2YW50cyBzdXIgbGUgTG9naWNpZWwgcG91ciB0b3V0ZXMgZGVzdGluYXRpb25zIGV0IHBvdXIgbGEgZHVyJiMyMzM7ZSBkdSBDb250cmF0IGRhbnMgbGVzIGNvbmRpdGlvbnMgY2ktYXByJiMyMzI7cyBkJiMyMzM7dGFpbGwmIzIzMztlcy4KKworUGFyIGFpbGxldXJzLCBzaSBsZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7dGllbnQgb3UgdmVuYWl0ICYjMjI0OyBkJiMyMzM7dGVuaXIgdW4gb3UgcGx1c2lldXJzIGJyZXZldHMgZGBpbnZlbnRpb24gcHJvdCYjMjMzO2dlYW50IHRvdXQgb3UgcGFydGllIGRlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBkdSBMb2dpY2llbCBvdSBkZSBzZXMgY29tcG9zYW50cywgaWwgc2BlbmdhZ2UgJiMyMjQ7IG5lIHBhcyBvcHBvc2VyIGxlcyAmIzIzMzt2ZW50dWVscyBkcm9pdHMgY29uZiYjMjMzO3ImIzIzMztzIHBhciBjZXMgYnJldmV0cyBhdXggTGljZW5jaSYjMjMzO3Mgc3VjY2Vzc2lmcyBxdWkgdXRpbGlzZXJhaWVudCwgZXhwbG9pdGVyYWllbnQgb3UgbW9kaWZpZXJhaWVudCBsZSBMb2dpY2llbC4gRW4gY2FzIGRlIGNlc3Npb24gZGUgY2VzIGJyZXZldHMsIGxlIENvbmMmIzIzMztkYW50IHNgZW5nYWdlICYjMjI0OyBmYWlyZSByZXByZW5kcmUgbGVzIG9ibGlnYXRpb25zIGR1IHByJiMyMzM7c2VudCBhbGluJiMyMzM7YSBhdXggY2Vzc2lvbm5haXJlcy4KKworNS4xIERST0lUIERgVVRJTElTQVRJT04KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgdXRpbGlzZXIgbGUgTG9naWNpZWwsIHNhbnMgcmVzdHJpY3Rpb24gcXVhbnQgYXV4IGRvbWFpbmVzIGRgYXBwbGljYXRpb24sICYjMjMzO3RhbnQgY2ktYXByJiMyMzI7cyBwciYjMjMzO2NpcyYjMjMzOyBxdWUgY2VsYSBjb21wb3J0ZToKKworbGEgcmVwcm9kdWN0aW9uIHBlcm1hbmVudGUgb3UgcHJvdmlzb2lyZSBkdSBMb2dpY2llbCBlbiB0b3V0IG91IHBhcnRpZSBwYXIgdG91dCBtb3llbiBldCBzb3VzIHRvdXRlIGZvcm1lLgorCitsZSBjaGFyZ2VtZW50LCBsYGFmZmljaGFnZSwgbGBleCYjMjMzO2N1dGlvbiwgb3UgbGUgc3RvY2thZ2UgZHUgTG9naWNpZWwgc3VyIHRvdXQgc3VwcG9ydC4KKworbGEgcG9zc2liaWxpdCYjMjMzOyBkYGVuIG9ic2VydmVyLCBkYGVuICYjMjMzO3R1ZGllciwgb3UgZGBlbiB0ZXN0ZXIgbGUgZm9uY3Rpb25uZW1lbnQgYWZpbiBkZSBkJiMyMzM7dGVybWluZXIgbGVzIGlkJiMyMzM7ZXMgZXQgcHJpbmNpcGVzIHF1aSBzb250ICYjMjI0OyBsYSBiYXNlIGRlIG5gaW1wb3J0ZSBxdWVsICYjMjMzO2wmIzIzMzttZW50IGRlIGNlIExvZ2ljaWVsOyBldCBjZWNpLCBsb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgZWZmZWN0dWUgdG91dGUgb3AmIzIzMztyYXRpb24gZGUgY2hhcmdlbWVudCwgZGBhZmZpY2hhZ2UsIGRgZXgmIzIzMztjdXRpb24sIGRlIHRyYW5zbWlzc2lvbiBvdSBkZSBzdG9ja2FnZSBkdSBMb2dpY2llbCBxdWBpbCBlc3QgZW4gZHJvaXQgZGBlZmZlY3R1ZXIgZW4gdmVydHUgZHUgQ29udHJhdC4KKworNS4yIERST0lUIERgQVBQT1JURVIgREVTIENPTlRSSUJVVElPTlMKKworTGUgZHJvaXQgZGBhcHBvcnRlciBkZXMgQ29udHJpYnV0aW9ucyBjb21wb3J0ZSBsZSBkcm9pdCBkZSB0cmFkdWlyZSwgZGBhZGFwdGVyLCBkYGFycmFuZ2VyIG91IGRgYXBwb3J0ZXIgdG91dGUgYXV0cmUgbW9kaWZpY2F0aW9uIGF1IExvZ2ljaWVsIGV0IGxlIGRyb2l0IGRlIHJlcHJvZHVpcmUgbGUgbG9naWNpZWwgZW4gciYjMjMzO3N1bHRhbnQuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGFwcG9ydGVyIHRvdXRlIENvbnRyaWJ1dGlvbiBhdSBMb2dpY2llbCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBtZW50aW9ubmVyLCBkZSBmYSYjMjMxO29uIGV4cGxpY2l0ZSwgc29uIG5vbSBlbiB0YW50IHF1YGF1dGV1ciBkZSBjZXR0ZSBDb250cmlidXRpb24gZXQgbGEgZGF0ZSBkZSBjciYjMjMzO2F0aW9uIGRlIGNlbGxlLWNpLgorCis1LjMgRFJPSVQgREUgRElTVFJJQlVUSU9OCisKK0xlIGRyb2l0IGRlIGRpc3RyaWJ1dGlvbiBjb21wb3J0ZSBub3RhbW1lbnQgbGUgZHJvaXQgZGUgZGlmZnVzZXIsIGRlIHRyYW5zbWV0dHJlIGV0IGRlIGNvbW11bmlxdWVyIGxlIExvZ2ljaWVsIGF1IHB1YmxpYyBzdXIgdG91dCBzdXBwb3J0IGV0IHBhciB0b3V0IG1veWVuIGFpbnNpIHF1ZSBsZSBkcm9pdCBkZSBtZXR0cmUgc3VyIGxlIG1hcmNoJiMyMzM7ICYjMjI0OyB0aXRyZSBvbiYjMjMzO3JldXggb3UgZ3JhdHVpdCwgdW4gb3UgZGVzIGV4ZW1wbGFpcmVzIGR1IExvZ2ljaWVsIHBhciB0b3V0IHByb2MmIzIzMztkJiMyMzM7LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBkaXN0cmlidWVyIGRlcyBjb3BpZXMgZHUgTG9naWNpZWwsIG1vZGlmaSYjMjMzOyBvdSBub24sICYjMjI0OyBkZXMgdGllcnMgZGFucyBsZXMgY29uZGl0aW9ucyBjaS1hcHImIzIzMjtzIGQmIzIzMzt0YWlsbCYjMjMzO2VzLgorCis1LjMuMSBESVNUUklCVVRJT04gRFUgTE9HSUNJRUwgU0FOUyBNT0RJRklDQVRJT04KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgZGlzdHJpYnVlciBkZXMgY29waWVzIGNvbmZvcm1lcyBkdSBMb2dpY2llbCwgc291cyBmb3JtZSBkZSBDb2RlIFNvdXJjZSBvdSBkZSBDb2RlIE9iamV0LCAmIzIyNDsgY29uZGl0aW9uIHF1ZSBjZXR0ZSBkaXN0cmlidXRpb24gcmVzcGVjdGUgbGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IGRhbnMgbGV1ciB0b3RhbGl0JiMyMzM7IGV0IHNvaXQgYWNjb21wYWduJiMyMzM7ZToKKworZGB1biBleGVtcGxhaXJlIGR1IENvbnRyYXQsCisKK2RgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCBkZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHRlbGxlIHF1ZSBwciYjMjMzO3Z1ZSBhdXggYXJ0aWNsZXMgOCBldCA5LAorCitldCBxdWUsIGRhbnMgbGUgY2FzIG8mIzI0OTsgc2V1bCBsZSBDb2RlIE9iamV0IGR1IExvZ2ljaWVsIGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIGF1eCBmdXR1cnMgTGljZW5jaSYjMjMzO3MgZGBhY2MmIzIzMztkZXIgZmFjaWxlbWVudCBhdSBDb2RlIFNvdXJjZSBjb21wbGV0IGR1IExvZ2ljaWVsIGVuIGluZGlxdWFudCBsZXMgbW9kYWxpdCYjMjMzO3MgZGBhY2MmIzIzMjtzLCAmIzIzMzt0YW50IGVudGVuZHUgcXVlIGxlIGNvJiMyNTE7dCBhZGRpdGlvbm5lbCBkYGFjcXVpc2l0aW9uIGR1IENvZGUgU291cmNlIG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkZSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKworNS4zLjIgRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIE1PRElGSUUKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGFwcG9ydGUgdW5lIENvbnRyaWJ1dGlvbiBhdSBMb2dpY2llbCwgbGVzIGNvbmRpdGlvbnMgZGUgZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBlbiByJiMyMzM7c3VsdGFudCBzb250IGFsb3JzIHNvdW1pc2VzICYjMjI0OyBsYGludCYjMjMzO2dyYWxpdCYjMjMzOyBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGRpc3RyaWJ1ZXIgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7LCBzb3VzIGZvcm1lIGRlIGNvZGUgc291cmNlIG91IGRlIGNvZGUgb2JqZXQsICYjMjI0OyBjb25kaXRpb24gcXVlIGNldHRlIGRpc3RyaWJ1dGlvbiByZXNwZWN0ZSBsZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgZGFucyBsZXVyIHRvdGFsaXQmIzIzMzsgZXQgc29pdCBhY2NvbXBhZ24mIzIzMztlOgorCitkYHVuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwKKworZGB1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0IGRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgdGVsbGUgcXVlIHByJiMyMzM7dnVlIGF1eCBhcnRpY2xlcyA4IGV0IDksCisKK2V0IHF1ZSwgZGFucyBsZSBjYXMgbyYjMjQ5OyBzZXVsIGxlIGNvZGUgb2JqZXQgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIGF1eCBmdXR1cnMgTGljZW5jaSYjMjMzO3MgZGBhY2MmIzIzMztkZXIgZmFjaWxlbWVudCBhdSBjb2RlIHNvdXJjZSBjb21wbGV0IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBlbiBpbmRpcXVhbnQgbGVzIG1vZGFsaXQmIzIzMztzIGRgYWNjJiMyMzI7cywgJiMyMzM7dGFudCBlbnRlbmR1IHF1ZSBsZSBjbyYjMjUxO3QgYWRkaXRpb25uZWwgZGBhY3F1aXNpdGlvbiBkdSBjb2RlIHNvdXJjZSBuZSBkZXZyYSBwYXMgZXhjJiMyMzM7ZGVyIGxlIHNpbXBsZSBjbyYjMjUxO3QgZGUgdHJhbnNmZXJ0IGRlcyBkb25uJiMyMzM7ZXMuCisKKzUuMy4zIERJU1RSSUJVVElPTiBERVMgTU9EVUxFUyBFWFRFUk5FUworCitMb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgYSBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuIE1vZHVsZSBFeHRlcm5lIGxlcyBjb25kaXRpb25zIGR1IENvbnRyYXQgbmUgc2BhcHBsaXF1ZW50IHBhcyAmIzIyNDsgY2UgTW9kdWxlIEV4dGVybmUsIHF1aSBwZXV0ICYjMjM0O3RyZSBkaXN0cmlidSYjMjMzOyBzb3VzIHVuIGNvbnRyYXQgZGUgbGljZW5jZSBkaWZmJiMyMzM7cmVudC4KKworNS4zLjQgQ09NUEFUSUJJTElURSBBVkVDIExBIExJQ0VOQ0UgR05VIEdQTAorCitMZSBMaWNlbmNpJiMyMzM7IHBldXQgaW5jbHVyZSB1biBjb2RlIHNvdW1pcyBhdXggZGlzcG9zaXRpb25zIGRgdW5lIGRlcyB2ZXJzaW9ucyBkZSBsYSBsaWNlbmNlIEdOVSBHUEwgZGFucyBsZSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgb3Ugbm9uIGV0IGRpc3RyaWJ1ZXIgbGBlbnNlbWJsZSBzb3VzIGxlcyBjb25kaXRpb25zIGRlIGxhIG0mIzIzNDttZSB2ZXJzaW9uIGRlIGxhIGxpY2VuY2UgR05VIEdQTC4KKworTGUgTGljZW5jaSYjMjMzOyBwZXV0IGluY2x1cmUgbGUgTG9naWNpZWwgbW9kaWZpJiMyMzM7IG91IG5vbiBkYW5zIHVuIGNvZGUgc291bWlzIGF1eCBkaXNwb3NpdGlvbnMgZGB1bmUgZGVzIHZlcnNpb25zIGRlIGxhIGxpY2VuY2UgR05VIEdQTCBldCBkaXN0cmlidWVyIGxgZW5zZW1ibGUgc291cyBsZXMgY29uZGl0aW9ucyBkZSBsYSBtJiMyMzQ7bWUgdmVyc2lvbiBkZSBsYSBsaWNlbmNlIEdOVSBHUEwuCisKK0FydGljbGUgNiAtIFBST1BSSUVURSBJTlRFTExFQ1RVRUxMRQorCis2LjEgU1VSIExFIExPR0lDSUVMIElOSVRJQUwKKworTGUgVGl0dWxhaXJlIGVzdCBkJiMyMzM7dGVudGV1ciBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBzdXIgbGUgTG9naWNpZWwgSW5pdGlhbC4gVG91dGUgdXRpbGlzYXRpb24gZHUgTG9naWNpZWwgSW5pdGlhbCBlc3Qgc291bWlzZSBhdSByZXNwZWN0IGRlcyBjb25kaXRpb25zIGRhbnMgbGVzcXVlbGxlcyBsZSBUaXR1bGFpcmUgYSBjaG9pc2kgZGUgZGlmZnVzZXIgc29uIG9ldXZyZSBldCBudWwgYXV0cmUgbmBhIGxhIGZhY3VsdCYjMjMzOyBkZSBtb2RpZmllciBsZXMgY29uZGl0aW9ucyBkZSBkaWZmdXNpb24gZGUgY2UgTG9naWNpZWwgSW5pdGlhbC4KKworTGUgVGl0dWxhaXJlIHNgZW5nYWdlICYjMjI0OyBjZSBxdWUgbGUgTG9naWNpZWwgSW5pdGlhbCByZXN0ZSBhdSBtb2lucyByJiMyMzM7Z2kgcGFyIGxlIENvbnRyYXQgZXQgY2UsIHBvdXIgbGEgZHVyJiMyMzM7ZSB2aXMmIzIzMztlICYjMjI0OyBsYGFydGljbGUgNC4yLgorCis2LjIgU1VSIExFUyBDT05UUklCVVRJT05TCisKK0xlIExpY2VuY2kmIzIzMzsgcXVpIGEgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1bmUgQ29udHJpYnV0aW9uIGVzdCB0aXR1bGFpcmUgc3VyIGNlbGxlLWNpIGRlcyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkYW5zIGxlcyBjb25kaXRpb25zIGQmIzIzMztmaW5pZXMgcGFyIGxhIGwmIzIzMztnaXNsYXRpb24gYXBwbGljYWJsZS4KKworNi4zIFNVUiBMRVMgTU9EVUxFUyBFWFRFUk5FUworCitMZSBMaWNlbmNpJiMyMzM7IHF1aSBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW4gTW9kdWxlIEV4dGVybmUgZXN0IHRpdHVsYWlyZSBzdXIgY2VsdWktY2kgZGVzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGRhbnMgbGVzIGNvbmRpdGlvbnMgZCYjMjMzO2ZpbmllcyBwYXIgbGEgbCYjMjMzO2dpc2xhdGlvbiBhcHBsaWNhYmxlIGV0IHJlc3RlIGxpYnJlIGR1IGNob2l4IGR1IGNvbnRyYXQgciYjMjMzO2dpc3NhbnQgc2EgZGlmZnVzaW9uLgorCis2LjQgRElTUE9TSVRJT05TIENPTU1VTkVTCisKK0xlIExpY2VuY2kmIzIzMzsgc2BlbmdhZ2UgZXhwcmVzcyYjMjMzO21lbnQ6CisKKyYjMjI0OyBuZSBwYXMgc3VwcHJpbWVyIG91IG1vZGlmaWVyIGRlIHF1ZWxxdWUgbWFuaSYjMjMyO3JlIHF1ZSBjZSBzb2l0IGxlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGFwcG9zJiMyMzM7ZXMgc3VyIGxlIExvZ2ljaWVsOworCismIzIyNDsgcmVwcm9kdWlyZSAmIzIyNDsgbGBpZGVudGlxdWUgbGVzZGl0ZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBzdXIgbGVzIGNvcGllcyBkdSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgb3Ugbm9uLgorCitMZSBMaWNlbmNpJiMyMzM7IHNgZW5nYWdlICYjMjI0OyBuZSBwYXMgcG9ydGVyIGF0dGVpbnRlLCBkaXJlY3RlbWVudCBvdSBpbmRpcmVjdGVtZW50LCBhdXggZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgVGl0dWxhaXJlIGV0L291IGRlcyBDb250cmlidXRldXJzIHN1ciBsZSBMb2dpY2llbCBldCAmIzIyNDsgcHJlbmRyZSwgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50LCAmIzIyNDsgbGAmIzIzMztnYXJkIGRlIHNvbiBwZXJzb25uZWwgdG91dGVzIGxlcyBtZXN1cmVzIG4mIzIzMztjZXNzYWlyZXMgcG91ciBhc3N1cmVyIGxlIHJlc3BlY3QgZGVzIGRpdHMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgVGl0dWxhaXJlIGV0L291IGRlcyBDb250cmlidXRldXJzLgorCitBcnRpY2xlIDcgLSBTRVJWSUNFUyBBU1NPQ0lFUworCis3LjEgTGUgQ29udHJhdCBuYG9ibGlnZSBlbiBhdWN1biBjYXMgbGUgQ29uYyYjMjMzO2RhbnQgJiMyMjQ7IGxhIHImIzIzMzthbGlzYXRpb24gZGUgcHJlc3RhdGlvbnMgZGBhc3Npc3RhbmNlIHRlY2huaXF1ZSBvdSBkZSBtYWludGVuYW5jZSBkdSBMb2dpY2llbC4KKworQ2VwZW5kYW50IGxlIENvbmMmIzIzMztkYW50IHJlc3RlIGxpYnJlIGRlIHByb3Bvc2VyIGNlIHR5cGUgZGUgc2VydmljZXMuIExlcyB0ZXJtZXMgZXQgY29uZGl0aW9ucyBkYHVuZSB0ZWxsZSBhc3Npc3RhbmNlIHRlY2huaXF1ZSBldC9vdSBkYHVuZSB0ZWxsZSBtYWludGVuYW5jZSBzZXJvbnQgYWxvcnMgZCYjMjMzO3Rlcm1pbiYjMjMzO3MgZGFucyB1biBhY3RlIHMmIzIzMztwYXImIzIzMzsuIENlcyBhY3RlcyBkZSBtYWludGVuYW5jZSBldC9vdSBhc3Npc3RhbmNlIHRlY2huaXF1ZSBuYGVuZ2FnZXJvbnQgcXVlIGxhIHNldWxlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgcXVpIGxlcyBwcm9wb3NlLgorCis3LjIgRGUgbSYjMjM0O21lLCB0b3V0IENvbmMmIzIzMztkYW50IGVzdCBsaWJyZSBkZSBwcm9wb3Nlciwgc291cyBzYSBzZXVsZSByZXNwb25zYWJpbGl0JiMyMzM7LCAmIzIyNDsgc2VzIGxpY2VuY2kmIzIzMztzIHVuZSBnYXJhbnRpZSwgcXVpIG5gZW5nYWdlcmEgcXVlIGx1aSwgbG9ycyBkZSBsYSByZWRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCBldC9vdSBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgZXQgY2UsIGRhbnMgbGVzIGNvbmRpdGlvbnMgcXVgaWwgc291aGFpdGUuIENldHRlIGdhcmFudGllIGV0IGxlcyBtb2RhbGl0JiMyMzM7cyBmaW5hbmNpJiMyMzI7cmVzIGRlIHNvbiBhcHBsaWNhdGlvbiBmZXJvbnQgbGBvYmpldCBkYHVuIGFjdGUgcyYjMjMzO3BhciYjMjMzOyBlbnRyZSBsZSBDb25jJiMyMzM7ZGFudCBldCBsZSBMaWNlbmNpJiMyMzM7LgorCitBcnRpY2xlIDggLSBSRVNQT05TQUJJTElURQorCis4LjEgU291cyByJiMyMzM7c2VydmUgZGVzIGRpc3Bvc2l0aW9ucyBkZSBsYGFydGljbGUgOC4yLCBsZSBMaWNlbmNpJiMyMzM7IGEgbGEgZmFjdWx0JiMyMzM7LCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBwcm91dmVyIGxhIGZhdXRlIGR1IENvbmMmIzIzMztkYW50IGNvbmNlcm4mIzIzMzssIGRlIHNvbGxpY2l0ZXIgbGEgciYjMjMzO3BhcmF0aW9uIGR1IHByJiMyMzM7anVkaWNlIGRpcmVjdCBxdWBpbCBzdWJpcmFpdCBkdSBmYWl0IGR1IExvZ2ljaWVsIGV0IGRvbnQgaWwgYXBwb3J0ZXJhIGxhIHByZXV2ZS4KKworOC4yIExhIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgZXN0IGxpbWl0JiMyMzM7ZSBhdXggZW5nYWdlbWVudHMgcHJpcyBlbiBhcHBsaWNhdGlvbiBkdSBDb250cmF0IGV0IG5lIHNhdXJhaXQgJiMyMzQ7dHJlIGVuZ2FnJiMyMzM7ZSBlbiByYWlzb24gbm90YW1tZW50OiAoaSkgZGVzIGRvbW1hZ2VzIGR1cyAmIzIyNDsgbGBpbmV4JiMyMzM7Y3V0aW9uLCB0b3RhbGUgb3UgcGFydGllbGxlLCBkZSBzZXMgb2JsaWdhdGlvbnMgcGFyIGxlIExpY2VuY2kmIzIzMzssIChpaSkgZGVzIGRvbW1hZ2VzIGRpcmVjdHMgb3UgaW5kaXJlY3RzIGQmIzIzMztjb3VsYW50IGRlIGxgdXRpbGlzYXRpb24gb3UgZGVzIHBlcmZvcm1hbmNlcyBkdSBMb2dpY2llbCBzdWJpcyBwYXIgbGUgTGljZW5jaSYjMjMzOyBldCAoaWlpKSBwbHVzIGcmIzIzMztuJiMyMzM7cmFsZW1lbnQgZGB1biBxdWVsY29ucXVlIGRvbW1hZ2UgaW5kaXJlY3QuIEVuIHBhcnRpY3VsaWVyLCBsZXMgUGFydGllcyBjb252aWVubmVudCBleHByZXNzJiMyMzM7bWVudCBxdWUgdG91dCBwciYjMjMzO2p1ZGljZSBmaW5hbmNpZXIgb3UgY29tbWVyY2lhbCAocGFyIGV4ZW1wbGUgcGVydGUgZGUgZG9ubiYjMjMzO2VzLCBwZXJ0ZSBkZSBiJiMyMzM7biYjMjMzO2ZpY2VzLCBwZXJ0ZSBkYGV4cGxvaXRhdGlvbiwgcGVydGUgZGUgY2xpZW50JiMyMzI7bGUgb3UgZGUgY29tbWFuZGVzLCBtYW5xdWUgJiMyMjQ7IGdhZ25lciwgdHJvdWJsZSBjb21tZXJjaWFsIHF1ZWxjb25xdWUpIG91IHRvdXRlIGFjdGlvbiBkaXJpZyYjMjMzO2UgY29udHJlIGxlIExpY2VuY2kmIzIzMzsgcGFyIHVuIHRpZXJzLCBjb25zdGl0dWUgdW4gZG9tbWFnZSBpbmRpcmVjdCBldCBuYG91dnJlIHBhcyBkcm9pdCAmIzIyNDsgciYjMjMzO3BhcmF0aW9uIHBhciBsZSBDb25jJiMyMzM7ZGFudC4KKworQXJ0aWNsZSA5IC0gR0FSQU5USUUKKworOS4xIExlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgcXVlIGxgJiMyMzM7dGF0IGFjdHVlbCBkZXMgY29ubmFpc3NhbmNlcyBzY2llbnRpZmlxdWVzIGV0IHRlY2huaXF1ZXMgYXUgbW9tZW50IGRlIGxhIG1pc2UgZW4gY2lyY3VsYXRpb24gZHUgTG9naWNpZWwgbmUgcGVybWV0IHBhcyBkYGVuIHRlc3RlciBldCBkYGVuIHYmIzIzMztyaWZpZXIgdG91dGVzIGxlcyB1dGlsaXNhdGlvbnMgbmkgZGUgZCYjMjMzO3RlY3RlciBsYGV4aXN0ZW5jZSBkYCYjMjMzO3ZlbnR1ZWxzIGQmIzIzMztmYXV0cy4gTGBhdHRlbnRpb24gZHUgTGljZW5jaSYjMjMzOyBhICYjMjMzO3QmIzIzMzsgYXR0aXImIzIzMztlIHN1ciBjZSBwb2ludCBzdXIgbGVzIHJpc3F1ZXMgYXNzb2NpJiMyMzM7cyBhdSBjaGFyZ2VtZW50LCAmIzIyNDsgbGB1dGlsaXNhdGlvbiwgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IExvZ2ljaWVsIHF1aSBzb250IHImIzIzMztzZXJ2JiMyMzM7cyAmIzIyNDsgZGVzIHV0aWxpc2F0ZXVycyBhdmVydGlzLgorCitJbCByZWwmIzIzMjt2ZSBkZSBsYSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IExpY2VuY2kmIzIzMzsgZGUgY29udHImIzI0NDtsZXIsIHBhciB0b3VzIG1veWVucywgbGBhZCYjMjMzO3F1YXRpb24gZHUgcHJvZHVpdCAmIzIyNDsgc2VzIGJlc29pbnMsIHNvbiBib24gZm9uY3Rpb25uZW1lbnQgZXQgZGUgc2Bhc3N1cmVyIHF1YGlsIG5lIGNhdXNlcmEgcGFzIGRlIGRvbW1hZ2VzIGF1eCBwZXJzb25uZXMgZXQgYXV4IGJpZW5zLgorCis5LjIgTGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO2NsYXJlIGRlIGJvbm5lIGZvaSAmIzIzNDt0cmUgZW4gZHJvaXQgZGUgY29uYyYjMjMzO2RlciBsYGVuc2VtYmxlIGRlcyBkcm9pdHMgYXR0YWNoJiMyMzM7cyBhdSBMb2dpY2llbCAoY29tcHJlbmFudCBub3RhbW1lbnQgbGVzIGRyb2l0cyB2aXMmIzIzMztzICYjMjI0OyBsYGFydGljbGUgNSkuCisKKzkuMyBMZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IHF1ZSBsZSBMb2dpY2llbCBlc3QgZm91cm5pICJlbiBsYCYjMjMzO3RhdCIgcGFyIGxlIENvbmMmIzIzMztkYW50IHNhbnMgYXV0cmUgZ2FyYW50aWUsIGV4cHJlc3NlIG91IHRhY2l0ZSwgcXVlIGNlbGxlIHByJiMyMzM7dnVlICYjMjI0OyBsYGFydGljbGUgOS4yIGV0IG5vdGFtbWVudCBzYW5zIGF1Y3VuZSBnYXJhbnRpZSBzdXIgc2EgdmFsZXVyIGNvbW1lcmNpYWxlLCBzb24gY2FyYWN0JiMyMzI7cmUgcyYjMjMzO2N1cmlzJiMyMzM7LCBpbm5vdmFudCBvdSBwZXJ0aW5lbnQuCisKK0VuIHBhcnRpY3VsaWVyLCBsZSBDb25jJiMyMzM7ZGFudCBuZSBnYXJhbnRpdCBwYXMgcXVlIGxlIExvZ2ljaWVsIGVzdCBleGVtcHQgZGBlcnJldXIsIHF1YGlsIGZvbmN0aW9ubmVyYSBzYW5zIGludGVycnVwdGlvbiwgcXVgaWwgc2VyYSBjb21wYXRpYmxlIGF2ZWMgbGAmIzIzMztxdWlwZW1lbnQgZHUgTGljZW5jaSYjMjMzOyBldCBzYSBjb25maWd1cmF0aW9uIGxvZ2ljaWVsbGUgbmkgcXVgaWwgcmVtcGxpcmEgbGVzIGJlc29pbnMgZHUgTGljZW5jaSYjMjMzOy4KKworOS40IExlIENvbmMmIzIzMztkYW50IG5lIGdhcmFudGl0IHBhcywgZGUgbWFuaSYjMjMyO3JlIGV4cHJlc3NlIG91IHRhY2l0ZSwgcXVlIGxlIExvZ2ljaWVsIG5lIHBvcnRlIHBhcyBhdHRlaW50ZSAmIzIyNDsgdW4gcXVlbGNvbnF1ZSBkcm9pdCBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGRgdW4gdGllcnMgcG9ydGFudCBzdXIgdW4gYnJldmV0LCB1biBsb2dpY2llbCBvdSBzdXIgdG91dCBhdXRyZSBkcm9pdCBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7LiBBaW5zaSwgbGUgQ29uYyYjMjMzO2RhbnQgZXhjbHV0IHRvdXRlIGdhcmFudGllIGF1IHByb2ZpdCBkdSBMaWNlbmNpJiMyMzM7IGNvbnRyZSBsZXMgYWN0aW9ucyBlbiBjb250cmVmYSYjMjMxO29uIHF1aSBwb3VycmFpZW50ICYjMjM0O3RyZSBkaWxpZ2VudCYjMjMzO2VzIGF1IHRpdHJlIGRlIGxgdXRpbGlzYXRpb24sIGRlIGxhIG1vZGlmaWNhdGlvbiwgZXQgZGUgbGEgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwuIE4mIzIzMzthbm1vaW5zLCBzaSBkZSB0ZWxsZXMgYWN0aW9ucyBzb250IGV4ZXJjJiMyMzM7ZXMgY29udHJlIGxlIExpY2VuY2kmIzIzMzssIGxlIENvbmMmIzIzMztkYW50IGx1aSBhcHBvcnRlcmEgc29uIGFpZGUgdGVjaG5pcXVlIGV0IGp1cmlkaXF1ZSBwb3VyIHNhIGQmIzIzMztmZW5zZS4gQ2V0dGUgYWlkZSB0ZWNobmlxdWUgZXQganVyaWRpcXVlIGVzdCBkJiMyMzM7dGVybWluJiMyMzM7ZSBhdSBjYXMgcGFyIGNhcyBlbnRyZSBsZSBDb25jJiMyMzM7ZGFudCBjb25jZXJuJiMyMzM7IGV0IGxlIExpY2VuY2kmIzIzMzsgZGFucyBsZSBjYWRyZSBkYHVuIHByb3RvY29sZSBkYGFjY29yZC4gTGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO2dhZ2UgdG91dGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBxdWFudCAmIzIyNDsgbGB1dGlsaXNhdGlvbiBkZSBsYSBkJiMyMzM7bm9taW5hdGlvbiBkdSBMb2dpY2llbCBwYXIgbGUgTGljZW5jaSYjMjMzOy4gQXVjdW5lIGdhcmFudGllIG5gZXN0IGFwcG9ydCYjMjMzO2UgcXVhbnQgJiMyMjQ7IGxgZXhpc3RlbmNlIGRlIGRyb2l0cyBhbnQmIzIzMztyaWV1cnMgc3VyIGxlIG5vbSBkdSBMb2dpY2llbCBldCBzdXIgbGBleGlzdGVuY2UgZGB1bmUgbWFycXVlLgorCitBcnRpY2xlIDEwIC0gUkVTSUxJQVRJT04KKworMTAuMSBFbiBjYXMgZGUgbWFucXVlbWVudCBwYXIgbGUgTGljZW5jaSYjMjMzOyBhdXggb2JsaWdhdGlvbnMgbWlzZXMgJiMyMjQ7IHNhIGNoYXJnZSBwYXIgbGUgQ29udHJhdCwgbGUgQ29uYyYjMjMzO2RhbnQgcG91cnJhIHImIzIzMztzaWxpZXIgZGUgcGxlaW4gZHJvaXQgbGUgQ29udHJhdCB0cmVudGUgKDMwKSBqb3VycyBhcHImIzIzMjtzIG5vdGlmaWNhdGlvbiBhZHJlc3MmIzIzMztlIGF1IExpY2VuY2kmIzIzMzsgZXQgcmVzdCYjMjMzO2Ugc2FucyBlZmZldC4KKworMTAuMiBMZSBMaWNlbmNpJiMyMzM7IGRvbnQgbGUgQ29udHJhdCBlc3QgciYjMjMzO3NpbGkmIzIzMzsgbmBlc3QgcGx1cyBhdXRvcmlzJiMyMzM7ICYjMjI0OyB1dGlsaXNlciwgbW9kaWZpZXIgb3UgZGlzdHJpYnVlciBsZSBMb2dpY2llbC4gQ2VwZW5kYW50LCB0b3V0ZXMgbGVzIGxpY2VuY2VzIHF1YGlsIGF1cmEgY29uYyYjMjMzO2QmIzIzMztlcyBhbnQmIzIzMztyaWV1cmVtZW50ICYjMjI0OyBsYSByJiMyMzM7c2lsaWF0aW9uIGR1IENvbnRyYXQgcmVzdGVyb250IHZhbGlkZXMgc291cyByJiMyMzM7c2VydmUgcXVgZWxsZXMgYWllbnQgJiMyMzM7dCYjMjMzOyBlZmZlY3R1JiMyMzM7ZXMgZW4gY29uZm9ybWl0JiMyMzM7IGF2ZWMgbGUgQ29udHJhdC4KKworQXJ0aWNsZSAxMSAtIERJU1BPU0lUSU9OUyBESVZFUlNFUworCisxMS4xIENBVVNFIEVYVEVSSUVVUkUKKworQXVjdW5lIGRlcyBQYXJ0aWVzIG5lIHNlcmEgcmVzcG9uc2FibGUgZGB1biByZXRhcmQgb3UgZGB1bmUgZCYjMjMzO2ZhaWxsYW5jZSBkYGV4JiMyMzM7Y3V0aW9uIGR1IENvbnRyYXQgcXVpIHNlcmFpdCBkJiMyNTE7ICYjMjI0OyB1biBjYXMgZGUgZm9yY2UgbWFqZXVyZSwgdW4gY2FzIGZvcnR1aXQgb3UgdW5lIGNhdXNlIGV4dCYjMjMzO3JpZXVyZSwgdGVsbGUgcXVlLCBub3RhbW1lbnQsIGxlIG1hdXZhaXMgZm9uY3Rpb25uZW1lbnQgb3UgbGVzIGludGVycnVwdGlvbnMgZHUgciYjMjMzO3NlYXUgJiMyMzM7bGVjdHJpcXVlIG91IGRlIHQmIzIzMztsJiMyMzM7Y29tbXVuaWNhdGlvbiwgbGEgcGFyYWx5c2llIGR1IHImIzIzMztzZWF1IGxpJiMyMzM7ZSAmIzIyNDsgdW5lIGF0dGFxdWUgaW5mb3JtYXRpcXVlLCBsYGludGVydmVudGlvbiBkZXMgYXV0b3JpdCYjMjMzO3MgZ291dmVybmVtZW50YWxlcywgbGVzIGNhdGFzdHJvcGhlcyBuYXR1cmVsbGVzLCBsZXMgZCYjMjMzO2cmIzIyNjt0cyBkZXMgZWF1eCwgbGVzIHRyZW1ibGVtZW50cyBkZSB0ZXJyZSwgbGUgZmV1LCBsZXMgZXhwbG9zaW9ucywgbGVzIGdyJiMyMzI7dmVzIGV0IGxlcyBjb25mbGl0cyBzb2NpYXV4LCBsYCYjMjMzO3RhdCBkZSBndWVycmUuLi4KKworMTEuMiBMZSBmYWl0LCBwYXIgbGB1bmUgb3UgbGBhdXRyZSBkZXMgUGFydGllcywgZGBvbWV0dHJlIGVuIHVuZSBvdSBwbHVzaWV1cnMgb2NjYXNpb25zIGRlIHNlIHByJiMyMzM7dmFsb2lyIGRgdW5lIG91IHBsdXNpZXVycyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCwgbmUgcG91cnJhIGVuIGF1Y3VuIGNhcyBpbXBsaXF1ZXIgcmVub25jaWF0aW9uIHBhciBsYSBQYXJ0aWUgaW50JiMyMzM7cmVzcyYjMjMzO2UgJiMyMjQ7IHNgZW4gcHImIzIzMzt2YWxvaXIgdWx0JiMyMzM7cmlldXJlbWVudC4KKworMTEuMyBMZSBDb250cmF0IGFubnVsZSBldCByZW1wbGFjZSB0b3V0ZSBjb252ZW50aW9uIGFudCYjMjMzO3JpZXVyZSwgJiMyMzM7Y3JpdGUgb3Ugb3JhbGUsIGVudHJlIGxlcyBQYXJ0aWVzIHN1ciBsZSBtJiMyMzQ7bWUgb2JqZXQgZXQgY29uc3RpdHVlIGxgYWNjb3JkIGVudGllciBlbnRyZSBsZXMgUGFydGllcyBzdXIgY2V0IG9iamV0LiBBdWN1bmUgYWRkaXRpb24gb3UgbW9kaWZpY2F0aW9uIGF1eCB0ZXJtZXMgZHUgQ29udHJhdCBuYGF1cmEgZGBlZmZldCAmIzIyNDsgbGAmIzIzMztnYXJkIGRlcyBQYXJ0aWVzICYjMjI0OyBtb2lucyBkYCYjMjM0O3RyZSBmYWl0ZSBwYXIgJiMyMzM7Y3JpdCBldCBzaWduJiMyMzM7ZSBwYXIgbGV1cnMgcmVwciYjMjMzO3NlbnRhbnRzIGQmIzI1MTttZW50IGhhYmlsaXQmIzIzMztzLgorCisxMS40IERhbnMgbGBoeXBvdGgmIzIzMjtzZSBvJiMyNDk7IHVuZSBvdSBwbHVzaWV1cnMgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IHNgYXYmIzIzMjtyZXJhaXQgY29udHJhaXJlICYjMjI0OyB1bmUgbG9pIG91ICYjMjI0OyB1biB0ZXh0ZSBhcHBsaWNhYmxlLCBleGlzdGFudHMgb3UgZnV0dXJzLCBjZXR0ZSBsb2kgb3UgY2UgdGV4dGUgcHImIzIzMzt2YXVkcmFpdCwgZXQgbGVzIFBhcnRpZXMgZmVyYWllbnQgbGVzIGFtZW5kZW1lbnRzIG4mIzIzMztjZXNzYWlyZXMgcG91ciBzZSBjb25mb3JtZXIgJiMyMjQ7IGNldHRlIGxvaSBvdSAmIzIyNDsgY2UgdGV4dGUuIFRvdXRlcyBsZXMgYXV0cmVzIGRpc3Bvc2l0aW9ucyByZXN0ZXJvbnQgZW4gdmlndWV1ci4gRGUgbSYjMjM0O21lLCBsYSBudWxsaXQmIzIzMzssIHBvdXIgcXVlbHF1ZSByYWlzb24gcXVlIGNlIHNvaXQsIGRgdW5lIGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBuZSBzYXVyYWl0IGVudHJhJiMyMzg7bmVyIGxhIG51bGxpdCYjMjMzOyBkZSBsYGVuc2VtYmxlIGR1IENvbnRyYXQuCisKKzExLjUgTEFOR1VFCisKK0xlIENvbnRyYXQgZXN0IHImIzIzMztkaWcmIzIzMzsgZW4gbGFuZ3VlIGZyYW4mIzIzMTthaXNlIGV0IGVuIGxhbmd1ZSBhbmdsYWlzZSwgY2VzIGRldXggdmVyc2lvbnMgZmFpc2FudCAmIzIzMztnYWxlbWVudCBmb2kuCisKK0FydGljbGUgMTIgLSBOT1VWRUxMRVMgVkVSU0lPTlMgRFUgQ09OVFJBVAorCisxMi4xIFRvdXRlIHBlcnNvbm5lIGVzdCBhdXRvcmlzJiMyMzM7ZSAmIzIyNDsgY29waWVyIGV0IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBkZSBjZSBDb250cmF0LgorCisxMi4yIEFmaW4gZGBlbiBwciYjMjMzO3NlcnZlciBsYSBjb2gmIzIzMztyZW5jZSwgbGUgdGV4dGUgZHUgQ29udHJhdCBlc3QgcHJvdCYjMjMzO2cmIzIzMzsgZXQgbmUgcGV1dCAmIzIzNDt0cmUgbW9kaWZpJiMyMzM7IHF1ZSBwYXIgbGVzIGF1dGV1cnMgZGUgbGEgbGljZW5jZSwgbGVzcXVlbHMgc2UgciYjMjMzO3NlcnZlbnQgbGUgZHJvaXQgZGUgcHVibGllciBwJiMyMzM7cmlvZGlxdWVtZW50IGRlcyBtaXNlcyAmIzIyNDsgam91ciBvdSBkZSBub3V2ZWxsZXMgdmVyc2lvbnMgZHUgQ29udHJhdCwgcXVpIHBvc3MmIzIzMztkZXJvbnQgY2hhY3VuZSB1biBudW0mIzIzMztybyBkaXN0aW5jdC4gQ2VzIHZlcnNpb25zIHVsdCYjMjMzO3JpZXVyZXMgc2Vyb250IHN1c2NlcHRpYmxlcyBkZSBwcmVuZHJlIGVuIGNvbXB0ZSBkZSBub3V2ZWxsZXMgcHJvYmwmIzIzMzttYXRpcXVlcyByZW5jb250ciYjMjMzO2VzIHBhciBsZXMgbG9naWNpZWxzIGxpYnJlcy4KKworMTIuMyBUb3V0IExvZ2ljaWVsIGRpZmZ1cyYjMjMzOyBzb3VzIHVuZSB2ZXJzaW9uIGRvbm4mIzIzMztlIGR1IENvbnRyYXQgbmUgcG91cnJhIGZhaXJlIGxgb2JqZXQgZGB1bmUgZGlmZnVzaW9uIHVsdCYjMjMzO3JpZXVyZSBxdWUgc291cyBsYSBtJiMyMzQ7bWUgdmVyc2lvbiBkdSBDb250cmF0IG91IHVuZSB2ZXJzaW9uIHBvc3QmIzIzMztyaWV1cmUsIHNvdXMgciYjMjMzO3NlcnZlIGRlcyBkaXNwb3NpdGlvbnMgZGUgbGBhcnRpY2xlIDUuMy40LgorCitBcnRpY2xlIDEzIC0gTE9JIEFQUExJQ0FCTEUgRVQgQ09NUEVURU5DRSBURVJSSVRPUklBTEUKKworMTMuMSBMZSBDb250cmF0IGVzdCByJiMyMzM7Z2kgcGFyIGxhIGxvaSBmcmFuJiMyMzE7YWlzZS4gTGVzIFBhcnRpZXMgY29udmllbm5lbnQgZGUgdGVudGVyIGRlIHImIzIzMztnbGVyICYjMjI0OyBsYGFtaWFibGUgbGVzIGRpZmYmIzIzMztyZW5kcyBvdSBsaXRpZ2VzIHF1aSB2aWVuZHJhaWVudCAmIzIyNDsgc2UgcHJvZHVpcmUgcGFyIHN1aXRlIG91ICYjMjI0OyBsYG9jY2FzaW9uIGR1IENvbnRyYXQuCisKKzEzLjIgQSBkJiMyMzM7ZmF1dCBkYGFjY29yZCBhbWlhYmxlIGRhbnMgdW4gZCYjMjMzO2xhaSBkZSBkZXV4ICgyKSBtb2lzICYjMjI0OyBjb21wdGVyIGRlIGxldXIgc3VydmVuYW5jZSBldCBzYXVmIHNpdHVhdGlvbiByZWxldmFudCBkYHVuZSBwcm9jJiMyMzM7ZHVyZSBkYHVyZ2VuY2UsIGxlcyBkaWZmJiMyMzM7cmVuZHMgb3UgbGl0aWdlcyBzZXJvbnQgcG9ydCYjMjMzO3MgcGFyIGxhIFBhcnRpZSBsYSBwbHVzIGRpbGlnZW50ZSBkZXZhbnQgbGVzIFRyaWJ1bmF1eCBjb21wJiMyMzM7dGVudHMgZGUgUGFyaXMuCisKKzEgQ2VDSUxMIGVzdCBwb3VyIENlKGEpIEMobnJzKSBJKG5yaWEpIEwob2dpY2llbCkgTChpYnJlKQorCitWZXJzaW9uIDIuMCBkdSAyMDA2LTA5LTA1LgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC1CIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtQgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2MyNDRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtQgpAQCAtMCwwICsxLDI0NyBAQAorCitDT05UUkFUIERFIExJQ0VOQ0UgREUgTE9HSUNJRUwgTElCUkUgQ2VDSUxMLUIKKworQXZlcnRpc3NlbWVudAorCitDZSBjb250cmF0IGVzdCB1bmUgbGljZW5jZSBkZSBsb2dpY2llbCBsaWJyZSBpc3N1ZSBkYHVuZSBjb25jZXJ0YXRpb24gZW50cmUgc2VzIGF1dGV1cnMgYWZpbiBxdWUgbGUgcmVzcGVjdCBkZSBkZXV4IGdyYW5kcyBwcmluY2lwZXMgcHImIzIzMztzaWRlICYjMjI0OyBzYSByJiMyMzM7ZGFjdGlvbjoKKworZGB1bmUgcGFydCwgbGUgcmVzcGVjdCBkZXMgcHJpbmNpcGVzIGRlIGRpZmZ1c2lvbiBkZXMgbG9naWNpZWxzIGxpYnJlczogYWNjJiMyMzI7cyBhdSBjb2RlIHNvdXJjZSwgZHJvaXRzICYjMjMzO3RlbmR1cyBjb25mJiMyMzM7ciYjMjMzO3MgYXV4IHV0aWxpc2F0ZXVycywKK2RgYXV0cmUgcGFydCwgbGEgZCYjMjMzO3NpZ25hdGlvbiBkYHVuIGRyb2l0IGFwcGxpY2FibGUsIGxlIGRyb2l0IGZyYW4mIzIzMTthaXMsIGF1cXVlbCBlbGxlIGVzdCBjb25mb3JtZSwgdGFudCBhdSByZWdhcmQgZHUgZHJvaXQgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBjaXZpbGUgcXVlIGR1IGRyb2l0IGRlIGxhIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZXQgZGUgbGEgcHJvdGVjdGlvbiBxdWBpbCBvZmZyZSBhdXggYXV0ZXVycyBldCB0aXR1bGFpcmVzIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciB1biBsb2dpY2llbC4KK0xlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UgQ2VDSUxMLUIxIHNvbnQ6CisKK0NvbW1pc3NhcmlhdCAmIzIyNDsgbGBFbmVyZ2llIEF0b21pcXVlIC0gQ0VBLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljIGRlIHJlY2hlcmNoZSAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlLCB0ZWNobmlxdWUgZXQgaW5kdXN0cmllbCwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IDI1IHJ1ZSBMZWJsYW5jLCBpbW1ldWJsZSBMZSBQb25hbnQgRCwgNzUwMTUgUGFyaXMuCisKK0NlbnRyZSBOYXRpb25hbCBkZSBsYSBSZWNoZXJjaGUgU2NpZW50aWZpcXVlIC0gQ05SUywgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyAzIHJ1ZSBNaWNoZWwtQW5nZSwgNzU3OTQgUGFyaXMgY2VkZXggMTYuCisKK0luc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUgLSBJTlJJQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyBEb21haW5lIGRlIFZvbHVjZWF1LCBSb2NxdWVuY291cnQsIEJQIDEwNSwgNzgxNTMgTGUgQ2hlc25heSBjZWRleC4KKworUHImIzIzMzthbWJ1bGUKKworQ2UgY29udHJhdCBlc3QgdW5lIGxpY2VuY2UgZGUgbG9naWNpZWwgbGlicmUgZG9udCBsYG9iamVjdGlmIGVzdCBkZSBjb25mJiMyMzM7cmVyIGF1eCB1dGlsaXNhdGV1cnMgdW5lIHRyJiMyMzI7cyBsYXJnZSBsaWJlcnQmIzIzMzsgZGUgbW9kaWZpY2F0aW9uIGV0IGRlIHJlZGlzdHJpYnV0aW9uIGR1IGxvZ2ljaWVsIHImIzIzMztnaSBwYXIgY2V0dGUgbGljZW5jZS4KKworTGBleGVyY2ljZSBkZSBjZXR0ZSBsaWJlcnQmIzIzMzsgZXN0IGFzc29ydGkgZGB1bmUgb2JsaWdhdGlvbiBmb3J0ZSBkZSBjaXRhdGlvbiAmIzIyNDsgbGEgY2hhcmdlIGRlIGNldXggcXVpIGRpc3RyaWJ1ZXJhaWVudCB1biBsb2dpY2llbCBpbmNvcnBvcmFudCB1biBsb2dpY2llbCByJiMyMzM7Z2kgcGFyIGxhIHByJiMyMzM7c2VudGUgbGljZW5jZSBhZmluIGRgYXNzdXJlciBxdWUgbGVzIGNvbnRyaWJ1dGlvbnMgZGUgdG91cyBzb2llbnQgY29ycmVjdGVtZW50IGlkZW50aWZpJiMyMzM7ZXMgZXQgcmVjb25udWVzLgorCitMYGFjY2Vzc2liaWxpdCYjMjMzOyBhdSBjb2RlIHNvdXJjZSBldCBsZXMgZHJvaXRzIGRlIGNvcGllLCBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gcXVpIGQmIzIzMztjb3VsZW50IGRlIGNlIGNvbnRyYXQgb250IHBvdXIgY29udHJlcGFydGllIGRlIG5gb2ZmcmlyIGF1eCB1dGlsaXNhdGV1cnMgcXVgdW5lIGdhcmFudGllIGxpbWl0JiMyMzM7ZSBldCBkZSBuZSBmYWlyZSBwZXNlciBzdXIgbGBhdXRldXIgZHUgbG9naWNpZWwsIGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBldCBsZXMgY29uYyYjMjMzO2RhbnRzIHN1Y2Nlc3NpZnMgcXVgdW5lIHJlc3BvbnNhYmlsaXQmIzIzMzsgcmVzdHJlaW50ZS4KKworQSBjZXQgJiMyMzM7Z2FyZCBsYGF0dGVudGlvbiBkZSBsYHV0aWxpc2F0ZXVyIGVzdCBhdHRpciYjMjMzO2Ugc3VyIGxlcyByaXNxdWVzIGFzc29jaSYjMjMzO3MgYXUgY2hhcmdlbWVudCwgJiMyMjQ7IGxgdXRpbGlzYXRpb24sICYjMjI0OyBsYSBtb2RpZmljYXRpb24gZXQvb3UgYXUgZCYjMjMzO3ZlbG9wcGVtZW50IGV0ICYjMjI0OyBsYSByZXByb2R1Y3Rpb24gZHUgbG9naWNpZWwgcGFyIGxgdXRpbGlzYXRldXIgJiMyMzM7dGFudCBkb25uJiMyMzM7IHNhIHNwJiMyMzM7Y2lmaWNpdCYjMjMzOyBkZSBsb2dpY2llbCBsaWJyZSwgcXVpIHBldXQgbGUgcmVuZHJlIGNvbXBsZXhlICYjMjI0OyBtYW5pcHVsZXIgZXQgcXVpIGxlIHImIzIzMztzZXJ2ZSBkb25jICYjMjI0OyBkZXMgZCYjMjMzO3ZlbG9wcGV1cnMgb3UgZGVzIHByb2Zlc3Npb25uZWxzIGF2ZXJ0aXMgcG9zcyYjMjMzO2RhbnQgZGVzIGNvbm5haXNzYW5jZXMgaW5mb3JtYXRpcXVlcyBhcHByb2ZvbmRpZXMuIExlcyB1dGlsaXNhdGV1cnMgc29udCBkb25jIGludml0JiMyMzM7cyAmIzIyNDsgY2hhcmdlciBldCB0ZXN0ZXIgbGBhZCYjMjMzO3F1YXRpb24gZHUgbG9naWNpZWwgJiMyMjQ7IGxldXJzIGJlc29pbnMgZGFucyBkZXMgY29uZGl0aW9ucyBwZXJtZXR0YW50IGRgYXNzdXJlciBsYSBzJiMyMzM7Y3VyaXQmIzIzMzsgZGUgbGV1cnMgc3lzdCYjMjMyO21lcyBldC9vdSBkZSBsZXVycyBkb25uJiMyMzM7ZXMgZXQsIHBsdXMgZyYjMjMzO24mIzIzMztyYWxlbWVudCwgJiMyMjQ7IGxgdXRpbGlzZXIgZXQgbGBleHBsb2l0ZXIgZGFucyBsZXMgbSYjMjM0O21lcyBjb25kaXRpb25zIGRlIHMmIzIzMztjdXJpdCYjMjMzOy4gQ2UgY29udHJhdCBwZXV0ICYjMjM0O3RyZSByZXByb2R1aXQgZXQgZGlmZnVzJiMyMzM7IGxpYnJlbWVudCwgc291cyByJiMyMzM7c2VydmUgZGUgbGUgY29uc2VydmVyIGVuIGxgJiMyMzM7dGF0LCBzYW5zIGFqb3V0IG5pIHN1cHByZXNzaW9uIGRlIGNsYXVzZXMuCisKK0NlIGNvbnRyYXQgZXN0IHN1c2NlcHRpYmxlIGRlIHNgYXBwbGlxdWVyICYjMjI0OyB0b3V0IGxvZ2ljaWVsIGRvbnQgbGUgdGl0dWxhaXJlIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGQmIzIzMztjaWRlIGRlIHNvdW1ldHRyZSBsYGV4cGxvaXRhdGlvbiBhdXggZGlzcG9zaXRpb25zIHF1YGlsIGNvbnRpZW50LgorCitBcnRpY2xlIDEgLSBERUZJTklUSU9OUworCitEYW5zIGNlIGNvbnRyYXQsIGxlcyB0ZXJtZXMgc3VpdmFudHMsIGxvcnNxdWBpbHMgc2Vyb250ICYjMjMzO2NyaXRzIGF2ZWMgdW5lIGxldHRyZSBjYXBpdGFsZSwgYXVyb250IGxhIHNpZ25pZmljYXRpb24gc3VpdmFudGU6CisKK0NvbnRyYXQ6IGQmIzIzMztzaWduZSBsZSBwciYjMjMzO3NlbnQgY29udHJhdCBkZSBsaWNlbmNlLCBzZXMgJiMyMzM7dmVudHVlbGxlcyB2ZXJzaW9ucyBwb3N0JiMyMzM7cmlldXJlcyBldCBhbm5leGVzLgorCitMb2dpY2llbDogZCYjMjMzO3NpZ25lIGxlIGxvZ2ljaWVsIHNvdXMgc2EgZm9ybWUgZGUgQ29kZSBPYmpldCBldC9vdSBkZSBDb2RlIFNvdXJjZSBldCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQgc2EgZG9jdW1lbnRhdGlvbiwgZGFucyBsZXVyICYjMjMzO3RhdCBhdSBtb21lbnQgZGUgbGBhY2NlcHRhdGlvbiBkdSBDb250cmF0IHBhciBsZSBMaWNlbmNpJiMyMzM7LgorCitMb2dpY2llbCBJbml0aWFsOiBkJiMyMzM7c2lnbmUgbGUgTG9naWNpZWwgc291cyBzYSBmb3JtZSBkZSBDb2RlIFNvdXJjZSBldCAmIzIzMzt2ZW50dWVsbGVtZW50IGRlIENvZGUgT2JqZXQgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGxldXIgcHJlbWkmIzIzMjtyZSBkaWZmdXNpb24gc291cyBsZXMgdGVybWVzIGR1IENvbnRyYXQuCisKK0xvZ2ljaWVsIE1vZGlmaSYjMjMzOzogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBwYXIgYXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbi4KKworQ29kZSBTb3VyY2U6IGQmIzIzMztzaWduZSBsYGVuc2VtYmxlIGRlcyBpbnN0cnVjdGlvbnMgZXQgZGVzIGxpZ25lcyBkZSBwcm9ncmFtbWUgZHUgTG9naWNpZWwgZXQgYXVxdWVsIGxgYWNjJiMyMzI7cyBlc3QgbiYjMjMzO2Nlc3NhaXJlIGVuIHZ1ZSBkZSBtb2RpZmllciBsZSBMb2dpY2llbC4KKworQ29kZSBPYmpldDogZCYjMjMzO3NpZ25lIGxlcyBmaWNoaWVycyBiaW5haXJlcyBpc3N1cyBkZSBsYSBjb21waWxhdGlvbiBkdSBDb2RlIFNvdXJjZS4KKworVGl0dWxhaXJlOiBkJiMyMzM7c2lnbmUgbGUgb3UgbGVzIGQmIzIzMzt0ZW50ZXVycyBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBkYGF1dGV1ciBzdXIgbGUgTG9naWNpZWwgSW5pdGlhbC4KKworTGljZW5jaSYjMjMzOzogZCYjMjMzO3NpZ25lIGxlIG91IGxlcyB1dGlsaXNhdGV1cnMgZHUgTG9naWNpZWwgYXlhbnQgYWNjZXB0JiMyMzM7IGxlIENvbnRyYXQuCisKK0NvbnRyaWJ1dGV1cjogZCYjMjMzO3NpZ25lIGxlIExpY2VuY2kmIzIzMzsgYXV0ZXVyIGRgYXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbi4KKworQ29uYyYjMjMzO2RhbnQ6IGQmIzIzMztzaWduZSBsZSBUaXR1bGFpcmUgb3UgdG91dGUgcGVyc29ubmUgcGh5c2lxdWUgb3UgbW9yYWxlIGRpc3RyaWJ1YW50IGxlIExvZ2ljaWVsIHNvdXMgbGUgQ29udHJhdC4KKworQ29udHJpYnV0aW9uOiBkJiMyMzM7c2lnbmUgbGBlbnNlbWJsZSBkZXMgbW9kaWZpY2F0aW9ucywgY29ycmVjdGlvbnMsIHRyYWR1Y3Rpb25zLCBhZGFwdGF0aW9ucyBldC9vdSBub3V2ZWxsZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3MgaW50JiMyMzM7Z3ImIzIzMztlcyBkYW5zIGxlIExvZ2ljaWVsIHBhciB0b3V0IENvbnRyaWJ1dGV1ciwgYWluc2kgcXVlIHRvdXQgTW9kdWxlIEludGVybmUuCisKK01vZHVsZTogZCYjMjMzO3NpZ25lIHVuIGVuc2VtYmxlIGRlIGZpY2hpZXJzIHNvdXJjZXMgeSBjb21wcmlzIGxldXIgZG9jdW1lbnRhdGlvbiBxdWkgcGVybWV0IGRlIHImIzIzMzthbGlzZXIgZGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIG91IHNlcnZpY2VzIHN1cHBsJiMyMzM7bWVudGFpcmVzICYjMjI0OyBjZXV4IGZvdXJuaXMgcGFyIGxlIExvZ2ljaWVsLgorCitNb2R1bGUgRXh0ZXJuZTogZCYjMjMzO3NpZ25lIHRvdXQgTW9kdWxlLCBub24gZCYjMjMzO3JpdiYjMjMzOyBkdSBMb2dpY2llbCwgdGVsIHF1ZSBjZSBNb2R1bGUgZXQgbGUgTG9naWNpZWwgc2BleCYjMjMzO2N1dGVudCBkYW5zIGRlcyBlc3BhY2VzIGRgYWRyZXNzYWdlIGRpZmYmIzIzMztyZW50cywgbGB1biBhcHBlbGFudCBsYGF1dHJlIGF1IG1vbWVudCBkZSBsZXVyIGV4JiMyMzM7Y3V0aW9uLgorCitNb2R1bGUgSW50ZXJuZTogZCYjMjMzO3NpZ25lIHRvdXQgTW9kdWxlIGxpJiMyMzM7IGF1IExvZ2ljaWVsIGRlIHRlbGxlIHNvcnRlIHF1YGlscyBzYGV4JiMyMzM7Y3V0ZW50IGRhbnMgbGUgbSYjMjM0O21lIGVzcGFjZSBkYGFkcmVzc2FnZS4KKworUGFydGllczogZCYjMjMzO3NpZ25lIGNvbGxlY3RpdmVtZW50IGxlIExpY2VuY2kmIzIzMzsgZXQgbGUgQ29uYyYjMjMzO2RhbnQuCisKK0NlcyB0ZXJtZXMgc2BlbnRlbmRlbnQgYXUgc2luZ3VsaWVyIGNvbW1lIGF1IHBsdXJpZWwuCisKK0FydGljbGUgMiAtIE9CSkVUCisKK0xlIENvbnRyYXQgYSBwb3VyIG9iamV0IGxhIGNvbmNlc3Npb24gcGFyIGxlIENvbmMmIzIzMztkYW50IGF1IExpY2VuY2kmIzIzMzsgZGB1bmUgbGljZW5jZSBub24gZXhjbHVzaXZlLCBjZXNzaWJsZSBldCBtb25kaWFsZSBkdSBMb2dpY2llbCB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllIGNpLWFwciYjMjMyO3MgJiMyMjQ7IGxgYXJ0aWNsZSA1IHBvdXIgdG91dGUgbGEgZHVyJiMyMzM7ZSBkZSBwcm90ZWN0aW9uIGRlcyBkcm9pdHMgcG9ydGFudCBzdXIgY2UgTG9naWNpZWwuCisKK0FydGljbGUgMyAtIEFDQ0VQVEFUSU9OCisKKzMuMSBMYGFjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlcyB0ZXJtZXMgZHUgQ29udHJhdCBlc3QgciYjMjMzO3B1dCYjMjMzO2UgYWNxdWlzZSBkdSBmYWl0IGR1IHByZW1pZXIgZGVzIGZhaXRzIHN1aXZhbnRzOgorCisoaSkgbGUgY2hhcmdlbWVudCBkdSBMb2dpY2llbCBwYXIgdG91dCBtb3llbiBub3RhbW1lbnQgcGFyIHQmIzIzMztsJiMyMzM7Y2hhcmdlbWVudCAmIzIyNDsgcGFydGlyIGRgdW4gc2VydmV1ciBkaXN0YW50IG91IHBhciBjaGFyZ2VtZW50ICYjMjI0OyBwYXJ0aXIgZGB1biBzdXBwb3J0IHBoeXNpcXVlOworKGlpKSBsZSBwcmVtaWVyIGV4ZXJjaWNlIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlIGxgdW4gcXVlbGNvbnF1ZSBkZXMgZHJvaXRzIGNvbmMmIzIzMztkJiMyMzM7cyBwYXIgbGUgQ29udHJhdC4KKzMuMiBVbiBleGVtcGxhaXJlIGR1IENvbnRyYXQsIGNvbnRlbmFudCBub3RhbW1lbnQgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmIGF1eCBzcCYjMjMzO2NpZmljaXQmIzIzMztzIGR1IExvZ2ljaWVsLCAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgJiMyMjQ7IGxhIGxpbWl0YXRpb24gJiMyMjQ7IHVuIHVzYWdlIHBhciBkZXMgdXRpbGlzYXRldXJzIGV4cCYjMjMzO3JpbWVudCYjMjMzO3MgYSAmIzIzMzt0JiMyMzM7IG1pcyAmIzIyNDsgZGlzcG9zaXRpb24gZHUgTGljZW5jaSYjMjMzOyBwciYjMjMzO2FsYWJsZW1lbnQgJiMyMjQ7IHNvbiBhY2NlcHRhdGlvbiB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllICYjMjI0OyBsYGFydGljbGUgMy4xIGNpIGRlc3N1cyBldCBsZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IGVuIGF2b2lyIHByaXMgY29ubmFpc3NhbmNlLgorCitBcnRpY2xlIDQgLSBFTlRSRUUgRU4gVklHVUVVUiBFVCBEVVJFRQorCis0LjEgRU5UUkVFIEVOIFZJR1VFVVIKKworTGUgQ29udHJhdCBlbnRyZSBlbiB2aWd1ZXVyICYjMjI0OyBsYSBkYXRlIGRlIHNvbiBhY2NlcHRhdGlvbiBwYXIgbGUgTGljZW5jaSYjMjMzOyB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllIGVuIDMuMS4KKworNC4yIERVUkVFCisKK0xlIENvbnRyYXQgcHJvZHVpcmEgc2VzIGVmZmV0cyBwZW5kYW50IHRvdXRlIGxhIGR1ciYjMjMzO2UgbCYjMjMzO2dhbGUgZGUgcHJvdGVjdGlvbiBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBwb3J0YW50IHN1ciBsZSBMb2dpY2llbC4KKworQXJ0aWNsZSA1IC0gRVRFTkRVRSBERVMgRFJPSVRTIENPTkNFREVTCisKK0xlIENvbmMmIzIzMztkYW50IGNvbmMmIzIzMjtkZSBhdSBMaWNlbmNpJiMyMzM7LCBxdWkgYWNjZXB0ZSwgbGVzIGRyb2l0cyBzdWl2YW50cyBzdXIgbGUgTG9naWNpZWwgcG91ciB0b3V0ZXMgZGVzdGluYXRpb25zIGV0IHBvdXIgbGEgZHVyJiMyMzM7ZSBkdSBDb250cmF0IGRhbnMgbGVzIGNvbmRpdGlvbnMgY2ktYXByJiMyMzI7cyBkJiMyMzM7dGFpbGwmIzIzMztlcy4KKworUGFyIGFpbGxldXJzLCBzaSBsZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7dGllbnQgb3UgdmVuYWl0ICYjMjI0OyBkJiMyMzM7dGVuaXIgdW4gb3UgcGx1c2lldXJzIGJyZXZldHMgZGBpbnZlbnRpb24gcHJvdCYjMjMzO2dlYW50IHRvdXQgb3UgcGFydGllIGRlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBkdSBMb2dpY2llbCBvdSBkZSBzZXMgY29tcG9zYW50cywgaWwgc2BlbmdhZ2UgJiMyMjQ7IG5lIHBhcyBvcHBvc2VyIGxlcyAmIzIzMzt2ZW50dWVscyBkcm9pdHMgY29uZiYjMjMzO3ImIzIzMztzIHBhciBjZXMgYnJldmV0cyBhdXggTGljZW5jaSYjMjMzO3Mgc3VjY2Vzc2lmcyBxdWkgdXRpbGlzZXJhaWVudCwgZXhwbG9pdGVyYWllbnQgb3UgbW9kaWZpZXJhaWVudCBsZSBMb2dpY2llbC4gRW4gY2FzIGRlIGNlc3Npb24gZGUgY2VzIGJyZXZldHMsIGxlIENvbmMmIzIzMztkYW50IHNgZW5nYWdlICYjMjI0OyBmYWlyZSByZXByZW5kcmUgbGVzIG9ibGlnYXRpb25zIGR1IHByJiMyMzM7c2VudCBhbGluJiMyMzM7YSBhdXggY2Vzc2lvbm5haXJlcy4KKworNS4xIERST0lUIERgVVRJTElTQVRJT04KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgdXRpbGlzZXIgbGUgTG9naWNpZWwsIHNhbnMgcmVzdHJpY3Rpb24gcXVhbnQgYXV4IGRvbWFpbmVzIGRgYXBwbGljYXRpb24sICYjMjMzO3RhbnQgY2ktYXByJiMyMzI7cyBwciYjMjMzO2NpcyYjMjMzOyBxdWUgY2VsYSBjb21wb3J0ZToKKworbGEgcmVwcm9kdWN0aW9uIHBlcm1hbmVudGUgb3UgcHJvdmlzb2lyZSBkdSBMb2dpY2llbCBlbiB0b3V0IG91IHBhcnRpZSBwYXIgdG91dCBtb3llbiBldCBzb3VzIHRvdXRlIGZvcm1lLgorCitsZSBjaGFyZ2VtZW50LCBsYGFmZmljaGFnZSwgbGBleCYjMjMzO2N1dGlvbiwgb3UgbGUgc3RvY2thZ2UgZHUgTG9naWNpZWwgc3VyIHRvdXQgc3VwcG9ydC4KKworbGEgcG9zc2liaWxpdCYjMjMzOyBkYGVuIG9ic2VydmVyLCBkYGVuICYjMjMzO3R1ZGllciwgb3UgZGBlbiB0ZXN0ZXIgbGUgZm9uY3Rpb25uZW1lbnQgYWZpbiBkZSBkJiMyMzM7dGVybWluZXIgbGVzIGlkJiMyMzM7ZXMgZXQgcHJpbmNpcGVzIHF1aSBzb250ICYjMjI0OyBsYSBiYXNlIGRlIG5gaW1wb3J0ZSBxdWVsICYjMjMzO2wmIzIzMzttZW50IGRlIGNlIExvZ2ljaWVsOyBldCBjZWNpLCBsb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgZWZmZWN0dWUgdG91dGUgb3AmIzIzMztyYXRpb24gZGUgY2hhcmdlbWVudCwgZGBhZmZpY2hhZ2UsIGRgZXgmIzIzMztjdXRpb24sIGRlIHRyYW5zbWlzc2lvbiBvdSBkZSBzdG9ja2FnZSBkdSBMb2dpY2llbCBxdWBpbCBlc3QgZW4gZHJvaXQgZGBlZmZlY3R1ZXIgZW4gdmVydHUgZHUgQ29udHJhdC4KKworNS4yIERST0lUIERgQVBQT1JURVIgREVTIENPTlRSSUJVVElPTlMKKworTGUgZHJvaXQgZGBhcHBvcnRlciBkZXMgQ29udHJpYnV0aW9ucyBjb21wb3J0ZSBsZSBkcm9pdCBkZSB0cmFkdWlyZSwgZGBhZGFwdGVyLCBkYGFycmFuZ2VyIG91IGRgYXBwb3J0ZXIgdG91dGUgYXV0cmUgbW9kaWZpY2F0aW9uIGF1IExvZ2ljaWVsIGV0IGxlIGRyb2l0IGRlIHJlcHJvZHVpcmUgbGUgbG9naWNpZWwgZW4gciYjMjMzO3N1bHRhbnQuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGFwcG9ydGVyIHRvdXRlIENvbnRyaWJ1dGlvbiBhdSBMb2dpY2llbCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBtZW50aW9ubmVyLCBkZSBmYSYjMjMxO29uIGV4cGxpY2l0ZSwgc29uIG5vbSBlbiB0YW50IHF1YGF1dGV1ciBkZSBjZXR0ZSBDb250cmlidXRpb24gZXQgbGEgZGF0ZSBkZSBjciYjMjMzO2F0aW9uIGRlIGNlbGxlLWNpLgorCis1LjMgRFJPSVQgREUgRElTVFJJQlVUSU9OCisKK0xlIGRyb2l0IGRlIGRpc3RyaWJ1dGlvbiBjb21wb3J0ZSBub3RhbW1lbnQgbGUgZHJvaXQgZGUgZGlmZnVzZXIsIGRlIHRyYW5zbWV0dHJlIGV0IGRlIGNvbW11bmlxdWVyIGxlIExvZ2ljaWVsIGF1IHB1YmxpYyBzdXIgdG91dCBzdXBwb3J0IGV0IHBhciB0b3V0IG1veWVuIGFpbnNpIHF1ZSBsZSBkcm9pdCBkZSBtZXR0cmUgc3VyIGxlIG1hcmNoJiMyMzM7ICYjMjI0OyB0aXRyZSBvbiYjMjMzO3JldXggb3UgZ3JhdHVpdCwgdW4gb3UgZGVzIGV4ZW1wbGFpcmVzIGR1IExvZ2ljaWVsIHBhciB0b3V0IHByb2MmIzIzMztkJiMyMzM7LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBkaXN0cmlidWVyIGRlcyBjb3BpZXMgZHUgTG9naWNpZWwsIG1vZGlmaSYjMjMzOyBvdSBub24sICYjMjI0OyBkZXMgdGllcnMgZGFucyBsZXMgY29uZGl0aW9ucyBjaS1hcHImIzIzMjtzIGQmIzIzMzt0YWlsbCYjMjMzO2VzLgorCis1LjMuMSBESVNUUklCVVRJT04gRFUgTE9HSUNJRUwgU0FOUyBNT0RJRklDQVRJT04KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgZGlzdHJpYnVlciBkZXMgY29waWVzIGNvbmZvcm1lcyBkdSBMb2dpY2llbCwgc291cyBmb3JtZSBkZSBDb2RlIFNvdXJjZSBvdSBkZSBDb2RlIE9iamV0LCAmIzIyNDsgY29uZGl0aW9uIHF1ZSBjZXR0ZSBkaXN0cmlidXRpb24gcmVzcGVjdGUgbGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IGRhbnMgbGV1ciB0b3RhbGl0JiMyMzM7IGV0IHNvaXQgYWNjb21wYWduJiMyMzM7ZToKKworZGB1biBleGVtcGxhaXJlIGR1IENvbnRyYXQsCisKK2RgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCBkZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHRlbGxlIHF1ZSBwciYjMjMzO3Z1ZSBhdXggYXJ0aWNsZXMgOCBldCA5LAorCitldCBxdWUsIGRhbnMgbGUgY2FzIG8mIzI0OTsgc2V1bCBsZSBDb2RlIE9iamV0IGR1IExvZ2ljaWVsIGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIHVuIGFjYyYjMjMyO3MgZWZmZWN0aWYgYXUgQ29kZSBTb3VyY2UgY29tcGxldCBkdSBMb2dpY2llbCBwZW5kYW50IGF1IG1vaW5zIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgc2EgZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsLCAmIzIzMzt0YW50IGVudGVuZHUgcXVlIGxlIGNvJiMyNTE7dCBhZGRpdGlvbm5lbCBkYGFjcXVpc2l0aW9uIGR1IENvZGUgU291cmNlIG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkZSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKworNS4zLjIgRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIE1PRElGSUUKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGFwcG9ydGUgdW5lIENvbnRyaWJ1dGlvbiBhdSBMb2dpY2llbCwgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IHBldXQgJiMyMzQ7dHJlIGRpc3RyaWJ1JiMyMzM7IHNvdXMgdW4gY29udHJhdCBkZSBsaWNlbmNlIGF1dHJlIHF1ZSBsZSBwciYjMjMzO3NlbnQgQ29udHJhdCBzb3VzIHImIzIzMztzZXJ2ZSBkdSByZXNwZWN0IGRlcyBkaXNwb3NpdGlvbnMgZGUgbGBhcnRpY2xlIDUuMy40LgorCis1LjMuMyBESVNUUklCVVRJT04gREVTIE1PRFVMRVMgRVhURVJORVMKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGEgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1biBNb2R1bGUgRXh0ZXJuZSBsZXMgY29uZGl0aW9ucyBkdSBDb250cmF0IG5lIHNgYXBwbGlxdWVudCBwYXMgJiMyMjQ7IGNlIE1vZHVsZSBFeHRlcm5lLCBxdWkgcGV1dCAmIzIzNDt0cmUgZGlzdHJpYnUmIzIzMzsgc291cyB1biBjb250cmF0IGRlIGxpY2VuY2UgZGlmZiYjMjMzO3JlbnQuCisKKzUuMy40IENJVEFUSU9OUworCitMZSBMaWNlbmNpJiMyMzM7IHF1aSBkaXN0cmlidWUgdW4gTG9naWNpZWwgTW9kaWZpJiMyMzM7IHNgZW5nYWdlIGV4cHJlc3MmIzIzMzttZW50OgorCismIzIyNDsgaW5kaXF1ZXIgZGFucyBzYSBkb2N1bWVudGF0aW9uIHF1YGlsIGEgJiMyMzM7dCYjMjMzOyByJiMyMzM7YWxpcyYjMjMzOyAmIzIyNDsgcGFydGlyIGR1IExvZ2ljaWVsIHImIzIzMztnaSBwYXIgbGUgQ29udHJhdCwgZW4gcmVwcm9kdWlzYW50IGxlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IExvZ2ljaWVsLAorCismIzIyNDsgZmFpcmUgZW4gc29ydGUgcXVlIGxgdXRpbGlzYXRpb24gZHUgTG9naWNpZWwsIHNlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGV0IGxlIGZhaXQgcXVgaWwgZXN0IHImIzIzMztnaSBwYXIgbGUgQ29udHJhdCBzb2llbnQgaW5kaXF1JiMyMzM7cyBkYW5zIHVuIHRleHRlIGZhY2lsZW1lbnQgYWNjZXNzaWJsZSBkZXB1aXMgbGBpbnRlcmZhY2UgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7LAorCismIzIyNDsgbWVudGlvbm5lciwgc3VyIHVuIHNpdGUgV2ViIGxpYnJlbWVudCBhY2Nlc3NpYmxlIGQmIzIzMztjcml2YW50IGxlIExvZ2ljaWVsIE1vZGlmaSYjMjMzOywgZXQgcGVuZGFudCBhdSBtb2lucyB0b3V0ZSBsYSBkdXImIzIzMztlIGRlIHNhIGRpc3RyaWJ1dGlvbiwgcXVgaWwgYSAmIzIzMzt0JiMyMzM7IHImIzIzMzthbGlzJiMyMzM7ICYjMjI0OyBwYXJ0aXIgZHUgTG9naWNpZWwgciYjMjMzO2dpIHBhciBsZSBDb250cmF0LCBlbiByZXByb2R1aXNhbnQgbGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgTG9naWNpZWwsCisKK2xvcnNxdWBpbCBsZSBkaXN0cmlidWUgJiMyMjQ7IHVuIHRpZXJzIHN1c2NlcHRpYmxlIGRlIGRpc3RyaWJ1ZXIgbHVpLW0mIzIzNDttZSB1biBMb2dpY2llbCBNb2RpZmkmIzIzMzssIHNhbnMgYXZvaXIgJiMyMjQ7IGVuIGRpc3RyaWJ1ZXIgbGUgY29kZSBzb3VyY2UsICYjMjI0OyBmYWlyZSBzZXMgbWVpbGxldXJzIGVmZm9ydHMgcG91ciBxdWUgbGVzIG9ibGlnYXRpb25zIGR1IHByJiMyMzM7c2VudCBhcnRpY2xlIDUuMy40IHNvaWVudCByZXByaXNlcyBwYXIgbGUgZGl0IHRpZXJzLgorCitMb3JzcXVlIGxlIExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBvdSBub24gZXN0IGRpc3RyaWJ1JiMyMzM7IGF2ZWMgdW4gTW9kdWxlIEV4dGVybmUgcXVpIGEgJiMyMzM7dCYjMjMzOyBjb24mIzIzMTt1IHBvdXIgbGB1dGlsaXNlciwgbGUgTGljZW5jaSYjMjMzOyBkb2l0IHNvdW1ldHRyZSBsZSBkaXQgTW9kdWxlIEV4dGVybmUgYXV4IG9ibGlnYXRpb25zIHByJiMyMzM7YyYjMjMzO2RlbnRlcy4KKworNS4zLjUgQ09NUEFUSUJJTElURSBBVkVDIExFUyBMSUNFTkNFUyBDZUNJTEwgZXQgQ2VDSUxMLUMKKworTG9yc3F1YHVuIExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBjb250aWVudCB1bmUgQ29udHJpYnV0aW9uIHNvdW1pc2UgYXUgY29udHJhdCBkZSBsaWNlbmNlIENlQ0lMTCwgbGVzIHN0aXB1bGF0aW9ucyBwciYjMjMzO3Z1ZXMgJiMyMjQ7IGxgYXJ0aWNsZSA1LjMuNCBzb250IGZhY3VsdGF0aXZlcy4KKworVW4gTG9naWNpZWwgTW9kaWZpJiMyMzM7IHBldXQgJiMyMzQ7dHJlIGRpc3RyaWJ1JiMyMzM7IHNvdXMgbGUgY29udHJhdCBkZSBsaWNlbmNlIENlQ0lMTC1DLiBMZXMgc3RpcHVsYXRpb25zIHByJiMyMzM7dnVlcyAmIzIyNDsgbGBhcnRpY2xlIDUuMy40IHNvbnQgYWxvcnMgZmFjdWx0YXRpdmVzLgorCitBcnRpY2xlIDYgLSBQUk9QUklFVEUgSU5URUxMRUNUVUVMTEUKKworNi4xIFNVUiBMRSBMT0dJQ0lFTCBJTklUSUFMCisKK0xlIFRpdHVsYWlyZSBlc3QgZCYjMjMzO3RlbnRldXIgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggc3VyIGxlIExvZ2ljaWVsIEluaXRpYWwuIFRvdXRlIHV0aWxpc2F0aW9uIGR1IExvZ2ljaWVsIEluaXRpYWwgZXN0IHNvdW1pc2UgYXUgcmVzcGVjdCBkZXMgY29uZGl0aW9ucyBkYW5zIGxlc3F1ZWxsZXMgbGUgVGl0dWxhaXJlIGEgY2hvaXNpIGRlIGRpZmZ1c2VyIHNvbiBvZXV2cmUgZXQgbnVsIGF1dHJlIG5gYSBsYSBmYWN1bHQmIzIzMzsgZGUgbW9kaWZpZXIgbGVzIGNvbmRpdGlvbnMgZGUgZGlmZnVzaW9uIGRlIGNlIExvZ2ljaWVsIEluaXRpYWwuCisKK0xlIFRpdHVsYWlyZSBzYGVuZ2FnZSAmIzIyNDsgY2UgcXVlIGxlIExvZ2ljaWVsIEluaXRpYWwgcmVzdGUgYXUgbW9pbnMgciYjMjMzO2dpIHBhciBsZSBDb250cmF0IGV0IGNlLCBwb3VyIGxhIGR1ciYjMjMzO2UgdmlzJiMyMzM7ZSAmIzIyNDsgbGBhcnRpY2xlIDQuMi4KKworNi4yIFNVUiBMRVMgQ09OVFJJQlVUSU9OUworCitMZSBMaWNlbmNpJiMyMzM7IHF1aSBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW5lIENvbnRyaWJ1dGlvbiBlc3QgdGl0dWxhaXJlIHN1ciBjZWxsZS1jaSBkZXMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZGFucyBsZXMgY29uZGl0aW9ucyBkJiMyMzM7ZmluaWVzIHBhciBsYSBsJiMyMzM7Z2lzbGF0aW9uIGFwcGxpY2FibGUuCisKKzYuMyBTVVIgTEVTIE1PRFVMRVMgRVhURVJORVMKKworTGUgTGljZW5jaSYjMjMzOyBxdWkgYSBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuIE1vZHVsZSBFeHRlcm5lIGVzdCB0aXR1bGFpcmUgc3VyIGNlbHVpLWNpIGRlcyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkYW5zIGxlcyBjb25kaXRpb25zIGQmIzIzMztmaW5pZXMgcGFyIGxhIGwmIzIzMztnaXNsYXRpb24gYXBwbGljYWJsZSBldCByZXN0ZSBsaWJyZSBkdSBjaG9peCBkdSBjb250cmF0IHImIzIzMztnaXNzYW50IHNhIGRpZmZ1c2lvbi4KKworNi40IERJU1BPU0lUSU9OUyBDT01NVU5FUworCitMZSBMaWNlbmNpJiMyMzM7IHNgZW5nYWdlIGV4cHJlc3MmIzIzMzttZW50OgorCismIzIyNDsgbmUgcGFzIHN1cHByaW1lciBvdSBtb2RpZmllciBkZSBxdWVscXVlIG1hbmkmIzIzMjtyZSBxdWUgY2Ugc29pdCBsZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBhcHBvcyYjMjMzO2VzIHN1ciBsZSBMb2dpY2llbDsKKworJiMyMjQ7IHJlcHJvZHVpcmUgJiMyMjQ7IGxgaWRlbnRpcXVlIGxlc2RpdGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgc3VyIGxlcyBjb3BpZXMgZHUgTG9naWNpZWwgbW9kaWZpJiMyMzM7IG91IG5vbi4KKworTGUgTGljZW5jaSYjMjMzOyBzYGVuZ2FnZSAmIzIyNDsgbmUgcGFzIHBvcnRlciBhdHRlaW50ZSwgZGlyZWN0ZW1lbnQgb3UgaW5kaXJlY3RlbWVudCwgYXV4IGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IFRpdHVsYWlyZSBldC9vdSBkZXMgQ29udHJpYnV0ZXVycyBzdXIgbGUgTG9naWNpZWwgZXQgJiMyMjQ7IHByZW5kcmUsIGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCwgJiMyMjQ7IGxgJiMyMzM7Z2FyZCBkZSBzb24gcGVyc29ubmVsIHRvdXRlcyBsZXMgbWVzdXJlcyBuJiMyMzM7Y2Vzc2FpcmVzIHBvdXIgYXNzdXJlciBsZSByZXNwZWN0IGRlcyBkaXRzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IFRpdHVsYWlyZSBldC9vdSBkZXMgQ29udHJpYnV0ZXVycy4KKworQXJ0aWNsZSA3IC0gU0VSVklDRVMgQVNTT0NJRVMKKworNy4xIExlIENvbnRyYXQgbmBvYmxpZ2UgZW4gYXVjdW4gY2FzIGxlIENvbmMmIzIzMztkYW50ICYjMjI0OyBsYSByJiMyMzM7YWxpc2F0aW9uIGRlIHByZXN0YXRpb25zIGRgYXNzaXN0YW5jZSB0ZWNobmlxdWUgb3UgZGUgbWFpbnRlbmFuY2UgZHUgTG9naWNpZWwuCisKK0NlcGVuZGFudCBsZSBDb25jJiMyMzM7ZGFudCByZXN0ZSBsaWJyZSBkZSBwcm9wb3NlciBjZSB0eXBlIGRlIHNlcnZpY2VzLiBMZXMgdGVybWVzIGV0IGNvbmRpdGlvbnMgZGB1bmUgdGVsbGUgYXNzaXN0YW5jZSB0ZWNobmlxdWUgZXQvb3UgZGB1bmUgdGVsbGUgbWFpbnRlbmFuY2Ugc2Vyb250IGFsb3JzIGQmIzIzMzt0ZXJtaW4mIzIzMztzIGRhbnMgdW4gYWN0ZSBzJiMyMzM7cGFyJiMyMzM7LiBDZXMgYWN0ZXMgZGUgbWFpbnRlbmFuY2UgZXQvb3UgYXNzaXN0YW5jZSB0ZWNobmlxdWUgbmBlbmdhZ2Vyb250IHF1ZSBsYSBzZXVsZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHF1aSBsZXMgcHJvcG9zZS4KKworNy4yIERlIG0mIzIzNDttZSwgdG91dCBDb25jJiMyMzM7ZGFudCBlc3QgbGlicmUgZGUgcHJvcG9zZXIsIHNvdXMgc2Egc2V1bGUgcmVzcG9uc2FiaWxpdCYjMjMzOywgJiMyMjQ7IHNlcyBsaWNlbmNpJiMyMzM7cyB1bmUgZ2FyYW50aWUsIHF1aSBuYGVuZ2FnZXJhIHF1ZSBsdWksIGxvcnMgZGUgbGEgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgZXQvb3UgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGV0IGNlLCBkYW5zIGxlcyBjb25kaXRpb25zIHF1YGlsIHNvdWhhaXRlLiBDZXR0ZSBnYXJhbnRpZSBldCBsZXMgbW9kYWxpdCYjMjMzO3MgZmluYW5jaSYjMjMyO3JlcyBkZSBzb24gYXBwbGljYXRpb24gZmVyb250IGxgb2JqZXQgZGB1biBhY3RlIHMmIzIzMztwYXImIzIzMzsgZW50cmUgbGUgQ29uYyYjMjMzO2RhbnQgZXQgbGUgTGljZW5jaSYjMjMzOy4KKworQXJ0aWNsZSA4IC0gUkVTUE9OU0FCSUxJVEUKKworOC4xIFNvdXMgciYjMjMzO3NlcnZlIGRlcyBkaXNwb3NpdGlvbnMgZGUgbGBhcnRpY2xlIDguMiwgbGUgTGljZW5jaSYjMjMzOyBhIGxhIGZhY3VsdCYjMjMzOywgc291cyByJiMyMzM7c2VydmUgZGUgcHJvdXZlciBsYSBmYXV0ZSBkdSBDb25jJiMyMzM7ZGFudCBjb25jZXJuJiMyMzM7LCBkZSBzb2xsaWNpdGVyIGxhIHImIzIzMztwYXJhdGlvbiBkdSBwciYjMjMzO2p1ZGljZSBkaXJlY3QgcXVgaWwgc3ViaXJhaXQgZHUgZmFpdCBkdSBMb2dpY2llbCBldCBkb250IGlsIGFwcG9ydGVyYSBsYSBwcmV1dmUuCisKKzguMiBMYSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IGVzdCBsaW1pdCYjMjMzO2UgYXV4IGVuZ2FnZW1lbnRzIHByaXMgZW4gYXBwbGljYXRpb24gZHUgQ29udHJhdCBldCBuZSBzYXVyYWl0ICYjMjM0O3RyZSBlbmdhZyYjMjMzO2UgZW4gcmFpc29uIG5vdGFtbWVudDogKGkpIGRlcyBkb21tYWdlcyBkdXMgJiMyMjQ7IGxgaW5leCYjMjMzO2N1dGlvbiwgdG90YWxlIG91IHBhcnRpZWxsZSwgZGUgc2VzIG9ibGlnYXRpb25zIHBhciBsZSBMaWNlbmNpJiMyMzM7LCAoaWkpIGRlcyBkb21tYWdlcyBkaXJlY3RzIG91IGluZGlyZWN0cyBkJiMyMzM7Y291bGFudCBkZSBsYHV0aWxpc2F0aW9uIG91IGRlcyBwZXJmb3JtYW5jZXMgZHUgTG9naWNpZWwgc3ViaXMgcGFyIGxlIExpY2VuY2kmIzIzMzsgZXQgKGlpaSkgcGx1cyBnJiMyMzM7biYjMjMzO3JhbGVtZW50IGRgdW4gcXVlbGNvbnF1ZSBkb21tYWdlIGluZGlyZWN0LiBFbiBwYXJ0aWN1bGllciwgbGVzIFBhcnRpZXMgY29udmllbm5lbnQgZXhwcmVzcyYjMjMzO21lbnQgcXVlIHRvdXQgcHImIzIzMztqdWRpY2UgZmluYW5jaWVyIG91IGNvbW1lcmNpYWwgKHBhciBleGVtcGxlIHBlcnRlIGRlIGRvbm4mIzIzMztlcywgcGVydGUgZGUgYiYjMjMzO24mIzIzMztmaWNlcywgcGVydGUgZGBleHBsb2l0YXRpb24sIHBlcnRlIGRlIGNsaWVudCYjMjMyO2xlIG91IGRlIGNvbW1hbmRlcywgbWFucXVlICYjMjI0OyBnYWduZXIsIHRyb3VibGUgY29tbWVyY2lhbCBxdWVsY29ucXVlKSBvdSB0b3V0ZSBhY3Rpb24gZGlyaWcmIzIzMztlIGNvbnRyZSBsZSBMaWNlbmNpJiMyMzM7IHBhciB1biB0aWVycywgY29uc3RpdHVlIHVuIGRvbW1hZ2UgaW5kaXJlY3QgZXQgbmBvdXZyZSBwYXMgZHJvaXQgJiMyMjQ7IHImIzIzMztwYXJhdGlvbiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQuCisKK0FydGljbGUgOSAtIEdBUkFOVElFCisKKzkuMSBMZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IHF1ZSBsYCYjMjMzO3RhdCBhY3R1ZWwgZGVzIGNvbm5haXNzYW5jZXMgc2NpZW50aWZpcXVlcyBldCB0ZWNobmlxdWVzIGF1IG1vbWVudCBkZSBsYSBtaXNlIGVuIGNpcmN1bGF0aW9uIGR1IExvZ2ljaWVsIG5lIHBlcm1ldCBwYXMgZGBlbiB0ZXN0ZXIgZXQgZGBlbiB2JiMyMzM7cmlmaWVyIHRvdXRlcyBsZXMgdXRpbGlzYXRpb25zIG5pIGRlIGQmIzIzMzt0ZWN0ZXIgbGBleGlzdGVuY2UgZGAmIzIzMzt2ZW50dWVscyBkJiMyMzM7ZmF1dHMuIExgYXR0ZW50aW9uIGR1IExpY2VuY2kmIzIzMzsgYSAmIzIzMzt0JiMyMzM7IGF0dGlyJiMyMzM7ZSBzdXIgY2UgcG9pbnQgc3VyIGxlcyByaXNxdWVzIGFzc29jaSYjMjMzO3MgYXUgY2hhcmdlbWVudCwgJiMyMjQ7IGxgdXRpbGlzYXRpb24sIGxhIG1vZGlmaWNhdGlvbiBldC9vdSBhdSBkJiMyMzM7dmVsb3BwZW1lbnQgZXQgJiMyMjQ7IGxhIHJlcHJvZHVjdGlvbiBkdSBMb2dpY2llbCBxdWkgc29udCByJiMyMzM7c2VydiYjMjMzO3MgJiMyMjQ7IGRlcyB1dGlsaXNhdGV1cnMgYXZlcnRpcy4KKworSWwgcmVsJiMyMzI7dmUgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBMaWNlbmNpJiMyMzM7IGRlIGNvbnRyJiMyNDQ7bGVyLCBwYXIgdG91cyBtb3llbnMsIGxgYWQmIzIzMztxdWF0aW9uIGR1IHByb2R1aXQgJiMyMjQ7IHNlcyBiZXNvaW5zLCBzb24gYm9uIGZvbmN0aW9ubmVtZW50IGV0IGRlIHNgYXNzdXJlciBxdWBpbCBuZSBjYXVzZXJhIHBhcyBkZSBkb21tYWdlcyBhdXggcGVyc29ubmVzIGV0IGF1eCBiaWVucy4KKworOS4yIExlIENvbmMmIzIzMztkYW50IGQmIzIzMztjbGFyZSBkZSBib25uZSBmb2kgJiMyMzQ7dHJlIGVuIGRyb2l0IGRlIGNvbmMmIzIzMztkZXIgbGBlbnNlbWJsZSBkZXMgZHJvaXRzIGF0dGFjaCYjMjMzO3MgYXUgTG9naWNpZWwgKGNvbXByZW5hbnQgbm90YW1tZW50IGxlcyBkcm9pdHMgdmlzJiMyMzM7cyAmIzIyNDsgbGBhcnRpY2xlIDUpLgorCis5LjMgTGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBxdWUgbGUgTG9naWNpZWwgZXN0IGZvdXJuaSAiZW4gbGAmIzIzMzt0YXQiIHBhciBsZSBDb25jJiMyMzM7ZGFudCBzYW5zIGF1dHJlIGdhcmFudGllLCBleHByZXNzZSBvdSB0YWNpdGUsIHF1ZSBjZWxsZSBwciYjMjMzO3Z1ZSAmIzIyNDsgbGBhcnRpY2xlIDkuMiBldCBub3RhbW1lbnQgc2FucyBhdWN1bmUgZ2FyYW50aWUgc3VyIHNhIHZhbGV1ciBjb21tZXJjaWFsZSwgc29uIGNhcmFjdCYjMjMyO3JlIHMmIzIzMztjdXJpcyYjMjMzOywgaW5ub3ZhbnQgb3UgcGVydGluZW50LgorCitFbiBwYXJ0aWN1bGllciwgbGUgQ29uYyYjMjMzO2RhbnQgbmUgZ2FyYW50aXQgcGFzIHF1ZSBsZSBMb2dpY2llbCBlc3QgZXhlbXB0IGRgZXJyZXVyLCBxdWBpbCBmb25jdGlvbm5lcmEgc2FucyBpbnRlcnJ1cHRpb24sIHF1YGlsIHNlcmEgY29tcGF0aWJsZSBhdmVjIGxgJiMyMzM7cXVpcGVtZW50IGR1IExpY2VuY2kmIzIzMzsgZXQgc2EgY29uZmlndXJhdGlvbiBsb2dpY2llbGxlIG5pIHF1YGlsIHJlbXBsaXJhIGxlcyBiZXNvaW5zIGR1IExpY2VuY2kmIzIzMzsuCisKKzkuNCBMZSBDb25jJiMyMzM7ZGFudCBuZSBnYXJhbnRpdCBwYXMsIGRlIG1hbmkmIzIzMjtyZSBleHByZXNzZSBvdSB0YWNpdGUsIHF1ZSBsZSBMb2dpY2llbCBuZSBwb3J0ZSBwYXMgYXR0ZWludGUgJiMyMjQ7IHVuIHF1ZWxjb25xdWUgZHJvaXQgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkYHVuIHRpZXJzIHBvcnRhbnQgc3VyIHVuIGJyZXZldCwgdW4gbG9naWNpZWwgb3Ugc3VyIHRvdXQgYXV0cmUgZHJvaXQgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOy4gQWluc2ksIGxlIENvbmMmIzIzMztkYW50IGV4Y2x1dCB0b3V0ZSBnYXJhbnRpZSBhdSBwcm9maXQgZHUgTGljZW5jaSYjMjMzOyBjb250cmUgbGVzIGFjdGlvbnMgZW4gY29udHJlZmEmIzIzMTtvbiBxdWkgcG91cnJhaWVudCAmIzIzNDt0cmUgZGlsaWdlbnQmIzIzMztlcyBhdSB0aXRyZSBkZSBsYHV0aWxpc2F0aW9uLCBkZSBsYSBtb2RpZmljYXRpb24sIGV0IGRlIGxhIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsLiBOJiMyMzM7YW5tb2lucywgc2kgZGUgdGVsbGVzIGFjdGlvbnMgc29udCBleGVyYyYjMjMzO2VzIGNvbnRyZSBsZSBMaWNlbmNpJiMyMzM7LCBsZSBDb25jJiMyMzM7ZGFudCBsdWkgYXBwb3J0ZXJhIHNvbiBhaWRlIHRlY2huaXF1ZSBldCBqdXJpZGlxdWUgcG91ciBzYSBkJiMyMzM7ZmVuc2UuIENldHRlIGFpZGUgdGVjaG5pcXVlIGV0IGp1cmlkaXF1ZSBlc3QgZCYjMjMzO3Rlcm1pbiYjMjMzO2UgYXUgY2FzIHBhciBjYXMgZW50cmUgbGUgQ29uYyYjMjMzO2RhbnQgY29uY2VybiYjMjMzOyBldCBsZSBMaWNlbmNpJiMyMzM7IGRhbnMgbGUgY2FkcmUgZGB1biBwcm90b2NvbGUgZGBhY2NvcmQuIExlIENvbmMmIzIzMztkYW50IGQmIzIzMztnYWdlIHRvdXRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgcXVhbnQgJiMyMjQ7IGxgdXRpbGlzYXRpb24gZGUgbGEgZCYjMjMzO25vbWluYXRpb24gZHUgTG9naWNpZWwgcGFyIGxlIExpY2VuY2kmIzIzMzsuIEF1Y3VuZSBnYXJhbnRpZSBuYGVzdCBhcHBvcnQmIzIzMztlIHF1YW50ICYjMjI0OyBsYGV4aXN0ZW5jZSBkZSBkcm9pdHMgYW50JiMyMzM7cmlldXJzIHN1ciBsZSBub20gZHUgTG9naWNpZWwgZXQgc3VyIGxgZXhpc3RlbmNlIGRgdW5lIG1hcnF1ZS4KKworQXJ0aWNsZSAxMCAtIFJFU0lMSUFUSU9OCisKKzEwLjEgRW4gY2FzIGRlIG1hbnF1ZW1lbnQgcGFyIGxlIExpY2VuY2kmIzIzMzsgYXV4IG9ibGlnYXRpb25zIG1pc2VzICYjMjI0OyBzYSBjaGFyZ2UgcGFyIGxlIENvbnRyYXQsIGxlIENvbmMmIzIzMztkYW50IHBvdXJyYSByJiMyMzM7c2lsaWVyIGRlIHBsZWluIGRyb2l0IGxlIENvbnRyYXQgdHJlbnRlICgzMCkgam91cnMgYXByJiMyMzI7cyBub3RpZmljYXRpb24gYWRyZXNzJiMyMzM7ZSBhdSBMaWNlbmNpJiMyMzM7IGV0IHJlc3QmIzIzMztlIHNhbnMgZWZmZXQuCisKKzEwLjIgTGUgTGljZW5jaSYjMjMzOyBkb250IGxlIENvbnRyYXQgZXN0IHImIzIzMztzaWxpJiMyMzM7IG5gZXN0IHBsdXMgYXV0b3JpcyYjMjMzOyAmIzIyNDsgdXRpbGlzZXIsIG1vZGlmaWVyIG91IGRpc3RyaWJ1ZXIgbGUgTG9naWNpZWwuIENlcGVuZGFudCwgdG91dGVzIGxlcyBsaWNlbmNlcyBxdWBpbCBhdXJhIGNvbmMmIzIzMztkJiMyMzM7ZXMgYW50JiMyMzM7cmlldXJlbWVudCAmIzIyNDsgbGEgciYjMjMzO3NpbGlhdGlvbiBkdSBDb250cmF0IHJlc3Rlcm9udCB2YWxpZGVzIHNvdXMgciYjMjMzO3NlcnZlIHF1YGVsbGVzIGFpZW50ICYjMjMzO3QmIzIzMzsgZWZmZWN0dSYjMjMzO2VzIGVuIGNvbmZvcm1pdCYjMjMzOyBhdmVjIGxlIENvbnRyYXQuCisKK0FydGljbGUgMTEgLSBESVNQT1NJVElPTlMgRElWRVJTRVMKKworMTEuMSBDQVVTRSBFWFRFUklFVVJFCisKK0F1Y3VuZSBkZXMgUGFydGllcyBuZSBzZXJhIHJlc3BvbnNhYmxlIGRgdW4gcmV0YXJkIG91IGRgdW5lIGQmIzIzMztmYWlsbGFuY2UgZGBleCYjMjMzO2N1dGlvbiBkdSBDb250cmF0IHF1aSBzZXJhaXQgZCYjMjUxOyAmIzIyNDsgdW4gY2FzIGRlIGZvcmNlIG1hamV1cmUsIHVuIGNhcyBmb3J0dWl0IG91IHVuZSBjYXVzZSBleHQmIzIzMztyaWV1cmUsIHRlbGxlIHF1ZSwgbm90YW1tZW50LCBsZSBtYXV2YWlzIGZvbmN0aW9ubmVtZW50IG91IGxlcyBpbnRlcnJ1cHRpb25zIGR1IHImIzIzMztzZWF1ICYjMjMzO2xlY3RyaXF1ZSBvdSBkZSB0JiMyMzM7bCYjMjMzO2NvbW11bmljYXRpb24sIGxhIHBhcmFseXNpZSBkdSByJiMyMzM7c2VhdSBsaSYjMjMzO2UgJiMyMjQ7IHVuZSBhdHRhcXVlIGluZm9ybWF0aXF1ZSwgbGBpbnRlcnZlbnRpb24gZGVzIGF1dG9yaXQmIzIzMztzIGdvdXZlcm5lbWVudGFsZXMsIGxlcyBjYXRhc3Ryb3BoZXMgbmF0dXJlbGxlcywgbGVzIGQmIzIzMztnJiMyMjY7dHMgZGVzIGVhdXgsIGxlcyB0cmVtYmxlbWVudHMgZGUgdGVycmUsIGxlIGZldSwgbGVzIGV4cGxvc2lvbnMsIGxlcyBnciYjMjMyO3ZlcyBldCBsZXMgY29uZmxpdHMgc29jaWF1eCwgbGAmIzIzMzt0YXQgZGUgZ3VlcnJlLi4uCisKKzExLjIgTGUgZmFpdCwgcGFyIGxgdW5lIG91IGxgYXV0cmUgZGVzIFBhcnRpZXMsIGRgb21ldHRyZSBlbiB1bmUgb3UgcGx1c2lldXJzIG9jY2FzaW9ucyBkZSBzZSBwciYjMjMzO3ZhbG9pciBkYHVuZSBvdSBwbHVzaWV1cnMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQsIG5lIHBvdXJyYSBlbiBhdWN1biBjYXMgaW1wbGlxdWVyIHJlbm9uY2lhdGlvbiBwYXIgbGEgUGFydGllIGludCYjMjMzO3Jlc3MmIzIzMztlICYjMjI0OyBzYGVuIHByJiMyMzM7dmFsb2lyIHVsdCYjMjMzO3JpZXVyZW1lbnQuCisKKzExLjMgTGUgQ29udHJhdCBhbm51bGUgZXQgcmVtcGxhY2UgdG91dGUgY29udmVudGlvbiBhbnQmIzIzMztyaWV1cmUsICYjMjMzO2NyaXRlIG91IG9yYWxlLCBlbnRyZSBsZXMgUGFydGllcyBzdXIgbGUgbSYjMjM0O21lIG9iamV0IGV0IGNvbnN0aXR1ZSBsYGFjY29yZCBlbnRpZXIgZW50cmUgbGVzIFBhcnRpZXMgc3VyIGNldCBvYmpldC4gQXVjdW5lIGFkZGl0aW9uIG91IG1vZGlmaWNhdGlvbiBhdXggdGVybWVzIGR1IENvbnRyYXQgbmBhdXJhIGRgZWZmZXQgJiMyMjQ7IGxgJiMyMzM7Z2FyZCBkZXMgUGFydGllcyAmIzIyNDsgbW9pbnMgZGAmIzIzNDt0cmUgZmFpdGUgcGFyICYjMjMzO2NyaXQgZXQgc2lnbiYjMjMzO2UgcGFyIGxldXJzIHJlcHImIzIzMztzZW50YW50cyBkJiMyNTE7bWVudCBoYWJpbGl0JiMyMzM7cy4KKworMTEuNCBEYW5zIGxgaHlwb3RoJiMyMzI7c2UgbyYjMjQ5OyB1bmUgb3UgcGx1c2lldXJzIGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBzYGF2JiMyMzI7cmVyYWl0IGNvbnRyYWlyZSAmIzIyNDsgdW5lIGxvaSBvdSAmIzIyNDsgdW4gdGV4dGUgYXBwbGljYWJsZSwgZXhpc3RhbnRzIG91IGZ1dHVycywgY2V0dGUgbG9pIG91IGNlIHRleHRlIHByJiMyMzM7dmF1ZHJhaXQsIGV0IGxlcyBQYXJ0aWVzIGZlcmFpZW50IGxlcyBhbWVuZGVtZW50cyBuJiMyMzM7Y2Vzc2FpcmVzIHBvdXIgc2UgY29uZm9ybWVyICYjMjI0OyBjZXR0ZSBsb2kgb3UgJiMyMjQ7IGNlIHRleHRlLiBUb3V0ZXMgbGVzIGF1dHJlcyBkaXNwb3NpdGlvbnMgcmVzdGVyb250IGVuIHZpZ3VldXIuIERlIG0mIzIzNDttZSwgbGEgbnVsbGl0JiMyMzM7LCBwb3VyIHF1ZWxxdWUgcmFpc29uIHF1ZSBjZSBzb2l0LCBkYHVuZSBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgbmUgc2F1cmFpdCBlbnRyYSYjMjM4O25lciBsYSBudWxsaXQmIzIzMzsgZGUgbGBlbnNlbWJsZSBkdSBDb250cmF0LgorCisxMS41IExBTkdVRQorCitMZSBDb250cmF0IGVzdCByJiMyMzM7ZGlnJiMyMzM7IGVuIGxhbmd1ZSBmcmFuJiMyMzE7YWlzZSBldCBlbiBsYW5ndWUgYW5nbGFpc2UsIGNlcyBkZXV4IHZlcnNpb25zIGZhaXNhbnQgJiMyMzM7Z2FsZW1lbnQgZm9pLgorCitBcnRpY2xlIDEyIC0gTk9VVkVMTEVTIFZFUlNJT05TIERVIENPTlRSQVQKKworMTIuMSBUb3V0ZSBwZXJzb25uZSBlc3QgYXV0b3JpcyYjMjMzO2UgJiMyMjQ7IGNvcGllciBldCBkaXN0cmlidWVyIGRlcyBjb3BpZXMgZGUgY2UgQ29udHJhdC4KKworMTIuMiBBZmluIGRgZW4gcHImIzIzMztzZXJ2ZXIgbGEgY29oJiMyMzM7cmVuY2UsIGxlIHRleHRlIGR1IENvbnRyYXQgZXN0IHByb3QmIzIzMztnJiMyMzM7IGV0IG5lIHBldXQgJiMyMzQ7dHJlIG1vZGlmaSYjMjMzOyBxdWUgcGFyIGxlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UsIGxlc3F1ZWxzIHNlIHImIzIzMztzZXJ2ZW50IGxlIGRyb2l0IGRlIHB1YmxpZXIgcCYjMjMzO3Jpb2RpcXVlbWVudCBkZXMgbWlzZXMgJiMyMjQ7IGpvdXIgb3UgZGUgbm91dmVsbGVzIHZlcnNpb25zIGR1IENvbnRyYXQsIHF1aSBwb3NzJiMyMzM7ZGVyb250IGNoYWN1bmUgdW4gbnVtJiMyMzM7cm8gZGlzdGluY3QuIENlcyB2ZXJzaW9ucyB1bHQmIzIzMztyaWV1cmVzIHNlcm9udCBzdXNjZXB0aWJsZXMgZGUgcHJlbmRyZSBlbiBjb21wdGUgZGUgbm91dmVsbGVzIHByb2JsJiMyMzM7bWF0aXF1ZXMgcmVuY29udHImIzIzMztlcyBwYXIgbGVzIGxvZ2ljaWVscyBsaWJyZXMuCisKKzEyLjMgVG91dCBMb2dpY2llbCBkaWZmdXMmIzIzMzsgc291cyB1bmUgdmVyc2lvbiBkb25uJiMyMzM7ZSBkdSBDb250cmF0IG5lIHBvdXJyYSBmYWlyZSBsYG9iamV0IGRgdW5lIGRpZmZ1c2lvbiB1bHQmIzIzMztyaWV1cmUgcXVlIHNvdXMgbGEgbSYjMjM0O21lIHZlcnNpb24gZHUgQ29udHJhdCBvdSB1bmUgdmVyc2lvbiBwb3N0JiMyMzM7cmlldXJlLgorCitBcnRpY2xlIDEzIC0gTE9JIEFQUExJQ0FCTEUgRVQgQ09NUEVURU5DRSBURVJSSVRPUklBTEUKKworMTMuMSBMZSBDb250cmF0IGVzdCByJiMyMzM7Z2kgcGFyIGxhIGxvaSBmcmFuJiMyMzE7YWlzZS4gTGVzIFBhcnRpZXMgY29udmllbm5lbnQgZGUgdGVudGVyIGRlIHImIzIzMztnbGVyICYjMjI0OyBsYGFtaWFibGUgbGVzIGRpZmYmIzIzMztyZW5kcyBvdSBsaXRpZ2VzIHF1aSB2aWVuZHJhaWVudCAmIzIyNDsgc2UgcHJvZHVpcmUgcGFyIHN1aXRlIG91ICYjMjI0OyBsYG9jY2FzaW9uIGR1IENvbnRyYXQuCisKKzEzLjIgQSBkJiMyMzM7ZmF1dCBkYGFjY29yZCBhbWlhYmxlIGRhbnMgdW4gZCYjMjMzO2xhaSBkZSBkZXV4ICgyKSBtb2lzICYjMjI0OyBjb21wdGVyIGRlIGxldXIgc3VydmVuYW5jZSBldCBzYXVmIHNpdHVhdGlvbiByZWxldmFudCBkYHVuZSBwcm9jJiMyMzM7ZHVyZSBkYHVyZ2VuY2UsIGxlcyBkaWZmJiMyMzM7cmVuZHMgb3UgbGl0aWdlcyBzZXJvbnQgcG9ydCYjMjMzO3MgcGFyIGxhIFBhcnRpZSBsYSBwbHVzIGRpbGlnZW50ZSBkZXZhbnQgbGVzIFRyaWJ1bmF1eCBjb21wJiMyMzM7dGVudHMgZGUgUGFyaXMuCisKKzEgQ2VDSUxMIGVzdCBwb3VyIENlKGEpIEMobnJzKSBJKG5yaWEpIEwob2dpY2llbCkgTChpYnJlKQorCitWZXJzaW9uIDEuMCBkdSAyMDA2LTA5LTA1LgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC1DIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZThlZjg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtQwpAQCAtMCwwICsxLDI0MSBAQAorCitDT05UUkFUIERFIExJQ0VOQ0UgREUgTE9HSUNJRUwgTElCUkUgQ2VDSUxMLUMKKworQXZlcnRpc3NlbWVudAorCitDZSBjb250cmF0IGVzdCB1bmUgbGljZW5jZSBkZSBsb2dpY2llbCBsaWJyZSBpc3N1ZSBkYHVuZSBjb25jZXJ0YXRpb24gZW50cmUgc2VzIGF1dGV1cnMgYWZpbiBxdWUgbGUgcmVzcGVjdCBkZSBkZXV4IGdyYW5kcyBwcmluY2lwZXMgcHImIzIzMztzaWRlICYjMjI0OyBzYSByJiMyMzM7ZGFjdGlvbjoKKworZGB1bmUgcGFydCwgbGUgcmVzcGVjdCBkZXMgcHJpbmNpcGVzIGRlIGRpZmZ1c2lvbiBkZXMgbG9naWNpZWxzIGxpYnJlczogYWNjJiMyMzI7cyBhdSBjb2RlIHNvdXJjZSwgZHJvaXRzICYjMjMzO3RlbmR1cyBjb25mJiMyMzM7ciYjMjMzO3MgYXV4IHV0aWxpc2F0ZXVycywKK2RgYXV0cmUgcGFydCwgbGEgZCYjMjMzO3NpZ25hdGlvbiBkYHVuIGRyb2l0IGFwcGxpY2FibGUsIGxlIGRyb2l0IGZyYW4mIzIzMTthaXMsIGF1cXVlbCBlbGxlIGVzdCBjb25mb3JtZSwgdGFudCBhdSByZWdhcmQgZHUgZHJvaXQgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBjaXZpbGUgcXVlIGR1IGRyb2l0IGRlIGxhIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZXQgZGUgbGEgcHJvdGVjdGlvbiBxdWBpbCBvZmZyZSBhdXggYXV0ZXVycyBldCB0aXR1bGFpcmVzIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciB1biBsb2dpY2llbC4KK0xlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UgQ2VDSUxMLUMxIHNvbnQ6CisKK0NvbW1pc3NhcmlhdCAmIzIyNDsgbGBFbmVyZ2llIEF0b21pcXVlIC0gQ0VBLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljIGRlIHJlY2hlcmNoZSAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlLCB0ZWNobmlxdWUgZXQgaW5kdXN0cmllbCwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IDI1IHJ1ZSBMZWJsYW5jLCBpbW1ldWJsZSBMZSBQb25hbnQgRCwgNzUwMTUgUGFyaXMuCisKK0NlbnRyZSBOYXRpb25hbCBkZSBsYSBSZWNoZXJjaGUgU2NpZW50aWZpcXVlIC0gQ05SUywgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyAzIHJ1ZSBNaWNoZWwtQW5nZSwgNzU3OTQgUGFyaXMgY2VkZXggMTYuCisKK0luc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUgLSBJTlJJQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyBEb21haW5lIGRlIFZvbHVjZWF1LCBSb2NxdWVuY291cnQsIEJQIDEwNSwgNzgxNTMgTGUgQ2hlc25heSBjZWRleC4KKworUHImIzIzMzthbWJ1bGUKKworQ2UgY29udHJhdCBlc3QgdW5lIGxpY2VuY2UgZGUgbG9naWNpZWwgbGlicmUgZG9udCBsYG9iamVjdGlmIGVzdCBkZSBjb25mJiMyMzM7cmVyIGF1eCB1dGlsaXNhdGV1cnMgbGEgbGliZXJ0JiMyMzM7IGRlIG1vZGlmaWVyIGV0IGRlIHImIzIzMzt1dGlsaXNlciBsZSBsb2dpY2llbCByJiMyMzM7Z2kgcGFyIGNldHRlIGxpY2VuY2UuCisKK0xgZXhlcmNpY2UgZGUgY2V0dGUgbGliZXJ0JiMyMzM7IGVzdCBhc3NvcnRpIGRgdW5lIG9ibGlnYXRpb24gZGUgcmVtZXR0cmUgJiMyMjQ7IGxhIGRpc3Bvc2l0aW9uIGRlIGxhIGNvbW11bmF1dCYjMjMzOyBsZXMgbW9kaWZpY2F0aW9ucyBhcHBvcnQmIzIzMztlcyBhdSBjb2RlIHNvdXJjZSBkdSBsb2dpY2llbCBhZmluIGRlIGNvbnRyaWJ1ZXIgJiMyMjQ7IHNvbiAmIzIzMzt2b2x1dGlvbi4KKworTGBhY2Nlc3NpYmlsaXQmIzIzMzsgYXUgY29kZSBzb3VyY2UgZXQgbGVzIGRyb2l0cyBkZSBjb3BpZSwgZGUgbW9kaWZpY2F0aW9uIGV0IGRlIHJlZGlzdHJpYnV0aW9uIHF1aSBkJiMyMzM7Y291bGVudCBkZSBjZSBjb250cmF0IG9udCBwb3VyIGNvbnRyZXBhcnRpZSBkZSBuYG9mZnJpciBhdXggdXRpbGlzYXRldXJzIHF1YHVuZSBnYXJhbnRpZSBsaW1pdCYjMjMzO2UgZXQgZGUgbmUgZmFpcmUgcGVzZXIgc3VyIGxgYXV0ZXVyIGR1IGxvZ2ljaWVsLCBsZSB0aXR1bGFpcmUgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZXQgbGVzIGNvbmMmIzIzMztkYW50cyBzdWNjZXNzaWZzIHF1YHVuZSByZXNwb25zYWJpbGl0JiMyMzM7IHJlc3RyZWludGUuCisKK0EgY2V0ICYjMjMzO2dhcmQgbGBhdHRlbnRpb24gZGUgbGB1dGlsaXNhdGV1ciBlc3QgYXR0aXImIzIzMztlIHN1ciBsZXMgcmlzcXVlcyBhc3NvY2kmIzIzMztzIGF1IGNoYXJnZW1lbnQsICYjMjI0OyBsYHV0aWxpc2F0aW9uLCAmIzIyNDsgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IGxvZ2ljaWVsIHBhciBsYHV0aWxpc2F0ZXVyICYjMjMzO3RhbnQgZG9ubiYjMjMzOyBzYSBzcCYjMjMzO2NpZmljaXQmIzIzMzsgZGUgbG9naWNpZWwgbGlicmUsIHF1aSBwZXV0IGxlIHJlbmRyZSBjb21wbGV4ZSAmIzIyNDsgbWFuaXB1bGVyIGV0IHF1aSBsZSByJiMyMzM7c2VydmUgZG9uYyAmIzIyNDsgZGVzIGQmIzIzMzt2ZWxvcHBldXJzIG91IGRlcyBwcm9mZXNzaW9ubmVscyBhdmVydGlzIHBvc3MmIzIzMztkYW50IGRlcyBjb25uYWlzc2FuY2VzIGluZm9ybWF0aXF1ZXMgYXBwcm9mb25kaWVzLiBMZXMgdXRpbGlzYXRldXJzIHNvbnQgZG9uYyBpbnZpdCYjMjMzO3MgJiMyMjQ7IGNoYXJnZXIgZXQgdGVzdGVyIGxgYWQmIzIzMztxdWF0aW9uIGR1IGxvZ2ljaWVsICYjMjI0OyBsZXVycyBiZXNvaW5zIGRhbnMgZGVzIGNvbmRpdGlvbnMgcGVybWV0dGFudCBkYGFzc3VyZXIgbGEgcyYjMjMzO2N1cml0JiMyMzM7IGRlIGxldXJzIHN5c3QmIzIzMjttZXMgZXQvb3UgZGUgbGV1cnMgZG9ubiYjMjMzO2VzIGV0LCBwbHVzIGcmIzIzMztuJiMyMzM7cmFsZW1lbnQsICYjMjI0OyBsYHV0aWxpc2VyIGV0IGxgZXhwbG9pdGVyIGRhbnMgbGVzIG0mIzIzNDttZXMgY29uZGl0aW9ucyBkZSBzJiMyMzM7Y3VyaXQmIzIzMzsuIENlIGNvbnRyYXQgcGV1dCAmIzIzNDt0cmUgcmVwcm9kdWl0IGV0IGRpZmZ1cyYjMjMzOyBsaWJyZW1lbnQsIHNvdXMgciYjMjMzO3NlcnZlIGRlIGxlIGNvbnNlcnZlciBlbiBsYCYjMjMzO3RhdCwgc2FucyBham91dCBuaSBzdXBwcmVzc2lvbiBkZSBjbGF1c2VzLgorCitDZSBjb250cmF0IGVzdCBzdXNjZXB0aWJsZSBkZSBzYGFwcGxpcXVlciAmIzIyNDsgdG91dCBsb2dpY2llbCBkb250IGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBkJiMyMzM7Y2lkZSBkZSBzb3VtZXR0cmUgbGBleHBsb2l0YXRpb24gYXV4IGRpc3Bvc2l0aW9ucyBxdWBpbCBjb250aWVudC4KKworQXJ0aWNsZSAxIC0gREVGSU5JVElPTlMKKworRGFucyBjZSBjb250cmF0LCBsZXMgdGVybWVzIHN1aXZhbnRzLCBsb3JzcXVgaWxzIHNlcm9udCAmIzIzMztjcml0cyBhdmVjIHVuZSBsZXR0cmUgY2FwaXRhbGUsIGF1cm9udCBsYSBzaWduaWZpY2F0aW9uIHN1aXZhbnRlOgorCitDb250cmF0OiBkJiMyMzM7c2lnbmUgbGUgcHImIzIzMztzZW50IGNvbnRyYXQgZGUgbGljZW5jZSwgc2VzICYjMjMzO3ZlbnR1ZWxsZXMgdmVyc2lvbnMgcG9zdCYjMjMzO3JpZXVyZXMgZXQgYW5uZXhlcy4KKworTG9naWNpZWw6IGQmIzIzMztzaWduZSBsZSBsb2dpY2llbCBzb3VzIHNhIGZvcm1lIGRlIENvZGUgT2JqZXQgZXQvb3UgZGUgQ29kZSBTb3VyY2UgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGxgYWNjZXB0YXRpb24gZHUgQ29udHJhdCBwYXIgbGUgTGljZW5jaSYjMjMzOy4KKworTG9naWNpZWwgSW5pdGlhbDogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIHNvdXMgc2EgZm9ybWUgZGUgQ29kZSBTb3VyY2UgZXQgJiMyMzM7dmVudHVlbGxlbWVudCBkZSBDb2RlIE9iamV0IGV0IGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCBzYSBkb2N1bWVudGF0aW9uLCBkYW5zIGxldXIgJiMyMzM7dGF0IGF1IG1vbWVudCBkZSBsZXVyIHByZW1pJiMyMzI7cmUgZGlmZnVzaW9uIHNvdXMgbGVzIHRlcm1lcyBkdSBDb250cmF0LgorCitMb2dpY2llbCBNb2RpZmkmIzIzMzs6IGQmIzIzMztzaWduZSBsZSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgcGFyIGF1IG1vaW5zIHVuZSBDb250cmlidXRpb24gSW50JiMyMzM7Z3ImIzIzMztlLgorCitDb2RlIFNvdXJjZTogZCYjMjMzO3NpZ25lIGxgZW5zZW1ibGUgZGVzIGluc3RydWN0aW9ucyBldCBkZXMgbGlnbmVzIGRlIHByb2dyYW1tZSBkdSBMb2dpY2llbCBldCBhdXF1ZWwgbGBhY2MmIzIzMjtzIGVzdCBuJiMyMzM7Y2Vzc2FpcmUgZW4gdnVlIGRlIG1vZGlmaWVyIGxlIExvZ2ljaWVsLgorCitDb2RlIE9iamV0OiBkJiMyMzM7c2lnbmUgbGVzIGZpY2hpZXJzIGJpbmFpcmVzIGlzc3VzIGRlIGxhIGNvbXBpbGF0aW9uIGR1IENvZGUgU291cmNlLgorCitUaXR1bGFpcmU6IGQmIzIzMztzaWduZSBsZSBvdSBsZXMgZCYjMjMzO3RlbnRldXJzIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGRgYXV0ZXVyIHN1ciBsZSBMb2dpY2llbCBJbml0aWFsLgorCitMaWNlbmNpJiMyMzM7OiBkJiMyMzM7c2lnbmUgbGUgb3UgbGVzIHV0aWxpc2F0ZXVycyBkdSBMb2dpY2llbCBheWFudCBhY2NlcHQmIzIzMzsgbGUgQ29udHJhdC4KKworQ29udHJpYnV0ZXVyOiBkJiMyMzM7c2lnbmUgbGUgTGljZW5jaSYjMjMzOyBhdXRldXIgZGBhdSBtb2lucyB1bmUgQ29udHJpYnV0aW9uIEludCYjMjMzO2dyJiMyMzM7ZS4KKworQ29uYyYjMjMzO2RhbnQ6IGQmIzIzMztzaWduZSBsZSBUaXR1bGFpcmUgb3UgdG91dGUgcGVyc29ubmUgcGh5c2lxdWUgb3UgbW9yYWxlIGRpc3RyaWJ1YW50IGxlIExvZ2ljaWVsIHNvdXMgbGUgQ29udHJhdC4KKworQ29udHJpYnV0aW9uIEludCYjMjMzO2dyJiMyMzM7ZTogZCYjMjMzO3NpZ25lIGxgZW5zZW1ibGUgZGVzIG1vZGlmaWNhdGlvbnMsIGNvcnJlY3Rpb25zLCB0cmFkdWN0aW9ucywgYWRhcHRhdGlvbnMgZXQvb3Ugbm91dmVsbGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIGludCYjMjMzO2dyJiMyMzM7ZXMgZGFucyBsZSBDb2RlIFNvdXJjZSBwYXIgdG91dCBDb250cmlidXRldXIuCisKK01vZHVsZSBMaSYjMjMzOzogZCYjMjMzO3NpZ25lIHVuIGVuc2VtYmxlIGRlIGZpY2hpZXJzIHNvdXJjZXMgeSBjb21wcmlzIGxldXIgZG9jdW1lbnRhdGlvbiBxdWksIHNhbnMgbW9kaWZpY2F0aW9uIGR1IENvZGUgU291cmNlLCBwZXJtZXQgZGUgciYjMjMzO2FsaXNlciBkZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3Mgb3Ugc2VydmljZXMgc3VwcGwmIzIzMzttZW50YWlyZXMgJiMyMjQ7IGNldXggZm91cm5pcyBwYXIgbGUgTG9naWNpZWwuCisKK0xvZ2ljaWVsIEQmIzIzMztyaXYmIzIzMzs6IGQmIzIzMztzaWduZSB0b3V0ZSBjb21iaW5haXNvbiBkdSBMb2dpY2llbCwgbW9kaWZpJiMyMzM7IG91IG5vbiwgZXQgZGB1biBNb2R1bGUgTGkmIzIzMzsuCisKK1BhcnRpZXM6IGQmIzIzMztzaWduZSBjb2xsZWN0aXZlbWVudCBsZSBMaWNlbmNpJiMyMzM7IGV0IGxlIENvbmMmIzIzMztkYW50LgorCitDZXMgdGVybWVzIHNgZW50ZW5kZW50IGF1IHNpbmd1bGllciBjb21tZSBhdSBwbHVyaWVsLgorCitBcnRpY2xlIDIgLSBPQkpFVAorCitMZSBDb250cmF0IGEgcG91ciBvYmpldCBsYSBjb25jZXNzaW9uIHBhciBsZSBDb25jJiMyMzM7ZGFudCBhdSBMaWNlbmNpJiMyMzM7IGRgdW5lIGxpY2VuY2Ugbm9uIGV4Y2x1c2l2ZSwgY2Vzc2libGUgZXQgbW9uZGlhbGUgZHUgTG9naWNpZWwgdGVsbGUgcXVlIGQmIzIzMztmaW5pZSBjaS1hcHImIzIzMjtzICYjMjI0OyBsYGFydGljbGUgNSBwb3VyIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgcHJvdGVjdGlvbiBkZXMgZHJvaXRzIHBvcnRhbnQgc3VyIGNlIExvZ2ljaWVsLgorCitBcnRpY2xlIDMgLSBBQ0NFUFRBVElPTgorCiszLjEgTGBhY2NlcHRhdGlvbiBwYXIgbGUgTGljZW5jaSYjMjMzOyBkZXMgdGVybWVzIGR1IENvbnRyYXQgZXN0IHImIzIzMztwdXQmIzIzMztlIGFjcXVpc2UgZHUgZmFpdCBkdSBwcmVtaWVyIGRlcyBmYWl0cyBzdWl2YW50czoKKworKGkpIGxlIGNoYXJnZW1lbnQgZHUgTG9naWNpZWwgcGFyIHRvdXQgbW95ZW4gbm90YW1tZW50IHBhciB0JiMyMzM7bCYjMjMzO2NoYXJnZW1lbnQgJiMyMjQ7IHBhcnRpciBkYHVuIHNlcnZldXIgZGlzdGFudCBvdSBwYXIgY2hhcmdlbWVudCAmIzIyNDsgcGFydGlyIGRgdW4gc3VwcG9ydCBwaHlzaXF1ZTsKKyhpaSkgbGUgcHJlbWllciBleGVyY2ljZSBwYXIgbGUgTGljZW5jaSYjMjMzOyBkZSBsYHVuIHF1ZWxjb25xdWUgZGVzIGRyb2l0cyBjb25jJiMyMzM7ZCYjMjMzO3MgcGFyIGxlIENvbnRyYXQuCiszLjIgVW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LCBjb250ZW5hbnQgbm90YW1tZW50IHVuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiBhdXggc3AmIzIzMztjaWZpY2l0JiMyMzM7cyBkdSBMb2dpY2llbCwgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0ICYjMjI0OyBsYSBsaW1pdGF0aW9uICYjMjI0OyB1biB1c2FnZSBwYXIgZGVzIHV0aWxpc2F0ZXVycyBleHAmIzIzMztyaW1lbnQmIzIzMztzIGEgJiMyMzM7dCYjMjMzOyBtaXMgJiMyMjQ7IGRpc3Bvc2l0aW9uIGR1IExpY2VuY2kmIzIzMzsgcHImIzIzMzthbGFibGVtZW50ICYjMjI0OyBzb24gYWNjZXB0YXRpb24gdGVsbGUgcXVlIGQmIzIzMztmaW5pZSAmIzIyNDsgbGBhcnRpY2xlIDMuMSBjaSBkZXNzdXMgZXQgbGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBlbiBhdm9pciBwcmlzIGNvbm5haXNzYW5jZS4KKworQXJ0aWNsZSA0IC0gRU5UUkVFIEVOIFZJR1VFVVIgRVQgRFVSRUUKKworNC4xIEVOVFJFRSBFTiBWSUdVRVVSCisKK0xlIENvbnRyYXQgZW50cmUgZW4gdmlndWV1ciAmIzIyNDsgbGEgZGF0ZSBkZSBzb24gYWNjZXB0YXRpb24gcGFyIGxlIExpY2VuY2kmIzIzMzsgdGVsbGUgcXVlIGQmIzIzMztmaW5pZSBlbiAzLjEuCisKKzQuMiBEVVJFRQorCitMZSBDb250cmF0IHByb2R1aXJhIHNlcyBlZmZldHMgcGVuZGFudCB0b3V0ZSBsYSBkdXImIzIzMztlIGwmIzIzMztnYWxlIGRlIHByb3RlY3Rpb24gZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggcG9ydGFudCBzdXIgbGUgTG9naWNpZWwuCisKK0FydGljbGUgNSAtIEVURU5EVUUgREVTIERST0lUUyBDT05DRURFUworCitMZSBDb25jJiMyMzM7ZGFudCBjb25jJiMyMzI7ZGUgYXUgTGljZW5jaSYjMjMzOywgcXVpIGFjY2VwdGUsIGxlcyBkcm9pdHMgc3VpdmFudHMgc3VyIGxlIExvZ2ljaWVsIHBvdXIgdG91dGVzIGRlc3RpbmF0aW9ucyBldCBwb3VyIGxhIGR1ciYjMjMzO2UgZHUgQ29udHJhdCBkYW5zIGxlcyBjb25kaXRpb25zIGNpLWFwciYjMjMyO3MgZCYjMjMzO3RhaWxsJiMyMzM7ZXMuCisKK1BhciBhaWxsZXVycywgc2kgbGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO3RpZW50IG91IHZlbmFpdCAmIzIyNDsgZCYjMjMzO3RlbmlyIHVuIG91IHBsdXNpZXVycyBicmV2ZXRzIGRgaW52ZW50aW9uIHByb3QmIzIzMztnZWFudCB0b3V0IG91IHBhcnRpZSBkZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3MgZHUgTG9naWNpZWwgb3UgZGUgc2VzIGNvbXBvc2FudHMsIGlsIHNgZW5nYWdlICYjMjI0OyBuZSBwYXMgb3Bwb3NlciBsZXMgJiMyMzM7dmVudHVlbHMgZHJvaXRzIGNvbmYmIzIzMztyJiMyMzM7cyBwYXIgY2VzIGJyZXZldHMgYXV4IExpY2VuY2kmIzIzMztzIHN1Y2Nlc3NpZnMgcXVpIHV0aWxpc2VyYWllbnQsIGV4cGxvaXRlcmFpZW50IG91IG1vZGlmaWVyYWllbnQgbGUgTG9naWNpZWwuIEVuIGNhcyBkZSBjZXNzaW9uIGRlIGNlcyBicmV2ZXRzLCBsZSBDb25jJiMyMzM7ZGFudCBzYGVuZ2FnZSAmIzIyNDsgZmFpcmUgcmVwcmVuZHJlIGxlcyBvYmxpZ2F0aW9ucyBkdSBwciYjMjMzO3NlbnQgYWxpbiYjMjMzO2EgYXV4IGNlc3Npb25uYWlyZXMuCisKKzUuMSBEUk9JVCBEYFVUSUxJU0FUSU9OCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHV0aWxpc2VyIGxlIExvZ2ljaWVsLCBzYW5zIHJlc3RyaWN0aW9uIHF1YW50IGF1eCBkb21haW5lcyBkYGFwcGxpY2F0aW9uLCAmIzIzMzt0YW50IGNpLWFwciYjMjMyO3MgcHImIzIzMztjaXMmIzIzMzsgcXVlIGNlbGEgY29tcG9ydGU6CisKK2xhIHJlcHJvZHVjdGlvbiBwZXJtYW5lbnRlIG91IHByb3Zpc29pcmUgZHUgTG9naWNpZWwgZW4gdG91dCBvdSBwYXJ0aWUgcGFyIHRvdXQgbW95ZW4gZXQgc291cyB0b3V0ZSBmb3JtZS4KKworbGUgY2hhcmdlbWVudCwgbGBhZmZpY2hhZ2UsIGxgZXgmIzIzMztjdXRpb24sIG91IGxlIHN0b2NrYWdlIGR1IExvZ2ljaWVsIHN1ciB0b3V0IHN1cHBvcnQuCisKK2xhIHBvc3NpYmlsaXQmIzIzMzsgZGBlbiBvYnNlcnZlciwgZGBlbiAmIzIzMzt0dWRpZXIsIG91IGRgZW4gdGVzdGVyIGxlIGZvbmN0aW9ubmVtZW50IGFmaW4gZGUgZCYjMjMzO3Rlcm1pbmVyIGxlcyBpZCYjMjMzO2VzIGV0IHByaW5jaXBlcyBxdWkgc29udCAmIzIyNDsgbGEgYmFzZSBkZSBuYGltcG9ydGUgcXVlbCAmIzIzMztsJiMyMzM7bWVudCBkZSBjZSBMb2dpY2llbDsgZXQgY2VjaSwgbG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGVmZmVjdHVlIHRvdXRlIG9wJiMyMzM7cmF0aW9uIGRlIGNoYXJnZW1lbnQsIGRgYWZmaWNoYWdlLCBkYGV4JiMyMzM7Y3V0aW9uLCBkZSB0cmFuc21pc3Npb24gb3UgZGUgc3RvY2thZ2UgZHUgTG9naWNpZWwgcXVgaWwgZXN0IGVuIGRyb2l0IGRgZWZmZWN0dWVyIGVuIHZlcnR1IGR1IENvbnRyYXQuCisKKzUuMiBEUk9JVCBERSBNT0RJRklDQVRJT04KKworTGUgZHJvaXQgZGUgbW9kaWZpY2F0aW9uIGNvbXBvcnRlIGxlIGRyb2l0IGRlIHRyYWR1aXJlLCBkYGFkYXB0ZXIsIGRgYXJyYW5nZXIgb3UgZGBhcHBvcnRlciB0b3V0ZSBhdXRyZSBtb2RpZmljYXRpb24gYXUgTG9naWNpZWwgZXQgbGUgZHJvaXQgZGUgcmVwcm9kdWlyZSBsZSBsb2dpY2llbCBlbiByJiMyMzM7c3VsdGFudC4gSWwgY29tcHJlbmQgZW4gcGFydGljdWxpZXIgbGUgZHJvaXQgZGUgY3ImIzIzMztlciB1biBMb2dpY2llbCBEJiMyMzM7cml2JiMyMzM7LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBhcHBvcnRlciB0b3V0ZSBtb2RpZmljYXRpb24gYXUgTG9naWNpZWwgc291cyByJiMyMzM7c2VydmUgZGUgbWVudGlvbm5lciwgZGUgZmEmIzIzMTtvbiBleHBsaWNpdGUsIHNvbiBub20gZW4gdGFudCBxdWBhdXRldXIgZGUgY2V0dGUgbW9kaWZpY2F0aW9uIGV0IGxhIGRhdGUgZGUgY3ImIzIzMzthdGlvbiBkZSBjZWxsZS1jaS4KKworNS4zIERST0lUIERFIERJU1RSSUJVVElPTgorCitMZSBkcm9pdCBkZSBkaXN0cmlidXRpb24gY29tcG9ydGUgbm90YW1tZW50IGxlIGRyb2l0IGRlIGRpZmZ1c2VyLCBkZSB0cmFuc21ldHRyZSBldCBkZSBjb21tdW5pcXVlciBsZSBMb2dpY2llbCBhdSBwdWJsaWMgc3VyIHRvdXQgc3VwcG9ydCBldCBwYXIgdG91dCBtb3llbiBhaW5zaSBxdWUgbGUgZHJvaXQgZGUgbWV0dHJlIHN1ciBsZSBtYXJjaCYjMjMzOyAmIzIyNDsgdGl0cmUgb24mIzIzMztyZXV4IG91IGdyYXR1aXQsIHVuIG91IGRlcyBleGVtcGxhaXJlcyBkdSBMb2dpY2llbCBwYXIgdG91dCBwcm9jJiMyMzM7ZCYjMjMzOy4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgZGlzdHJpYnVlciBkZXMgY29waWVzIGR1IExvZ2ljaWVsLCBtb2RpZmkmIzIzMzsgb3Ugbm9uLCAmIzIyNDsgZGVzIHRpZXJzIGRhbnMgbGVzIGNvbmRpdGlvbnMgY2ktYXByJiMyMzI7cyBkJiMyMzM7dGFpbGwmIzIzMztlcy4KKworNS4zLjEgRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIFNBTlMgTU9ESUZJQ0FUSU9OCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBjb25mb3JtZXMgZHUgTG9naWNpZWwsIHNvdXMgZm9ybWUgZGUgQ29kZSBTb3VyY2Ugb3UgZGUgQ29kZSBPYmpldCwgJiMyMjQ7IGNvbmRpdGlvbiBxdWUgY2V0dGUgZGlzdHJpYnV0aW9uIHJlc3BlY3RlIGxlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBkYW5zIGxldXIgdG90YWxpdCYjMjMzOyBldCBzb2l0IGFjY29tcGFnbiYjMjMzO2U6CisKK2RgdW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LAorCitkYHVuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgZGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCB0ZWxsZSBxdWUgcHImIzIzMzt2dWUgYXV4IGFydGljbGVzIDggZXQgOSwKKworZXQgcXVlLCBkYW5zIGxlIGNhcyBvJiMyNDk7IHNldWwgbGUgQ29kZSBPYmpldCBkdSBMb2dpY2llbCBlc3QgcmVkaXN0cmlidSYjMjMzOywgbGUgTGljZW5jaSYjMjMzOyBwZXJtZXR0ZSB1biBhY2MmIzIzMjtzIGVmZmVjdGlmIGF1IENvZGUgU291cmNlIGNvbXBsZXQgZHUgTG9naWNpZWwgcGVuZGFudCBhdSBtb2lucyB0b3V0ZSBsYSBkdXImIzIzMztlIGRlIHNhIGRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCwgJiMyMzM7dGFudCBlbnRlbmR1IHF1ZSBsZSBjbyYjMjUxO3QgYWRkaXRpb25uZWwgZGBhY3F1aXNpdGlvbiBkdSBDb2RlIFNvdXJjZSBuZSBkZXZyYSBwYXMgZXhjJiMyMzM7ZGVyIGxlIHNpbXBsZSBjbyYjMjUxO3QgZGUgdHJhbnNmZXJ0IGRlcyBkb25uJiMyMzM7ZXMuCisKKzUuMy4yIERJU1RSSUJVVElPTiBEVSBMT0dJQ0lFTCBNT0RJRklFCisKK0xvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBhcHBvcnRlIHVuZSBDb250cmlidXRpb24gSW50JiMyMzM7Z3ImIzIzMztlIGF1IExvZ2ljaWVsLCBsZXMgY29uZGl0aW9ucyBkZSBkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGVuIHImIzIzMztzdWx0YW50IHNvbnQgYWxvcnMgc291bWlzZXMgJiMyMjQ7IGxgaW50JiMyMzM7Z3JhbGl0JiMyMzM7IGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdC4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgZGlzdHJpYnVlciBsZSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgc291cyBmb3JtZSBkZSBjb2RlIHNvdXJjZSBvdSBkZSBjb2RlIG9iamV0LCAmIzIyNDsgY29uZGl0aW9uIHF1ZSBjZXR0ZSBkaXN0cmlidXRpb24gcmVzcGVjdGUgbGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IGRhbnMgbGV1ciB0b3RhbGl0JiMyMzM7IGV0IHNvaXQgYWNjb21wYWduJiMyMzM7ZToKKworZGB1biBleGVtcGxhaXJlIGR1IENvbnRyYXQsCisKK2RgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCBkZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHRlbGxlIHF1ZSBwciYjMjMzO3Z1ZSBhdXggYXJ0aWNsZXMgOCBldCA5LAorCitldCBxdWUsIGRhbnMgbGUgY2FzIG8mIzI0OTsgc2V1bCBsZSBjb2RlIG9iamV0IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBlc3QgcmVkaXN0cmlidSYjMjMzOywgbGUgTGljZW5jaSYjMjMzOyBwZXJtZXR0ZSB1biBhY2MmIzIzMjtzIGVmZmVjdGlmICYjMjI0OyBzb24gY29kZSBzb3VyY2UgY29tcGxldCBwZW5kYW50IGF1IG1vaW5zIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgc2EgZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOywgJiMyMzM7dGFudCBlbnRlbmR1IHF1ZSBsZSBjbyYjMjUxO3QgYWRkaXRpb25uZWwgZGBhY3F1aXNpdGlvbiBkdSBjb2RlIHNvdXJjZSBuZSBkZXZyYSBwYXMgZXhjJiMyMzM7ZGVyIGxlIHNpbXBsZSBjbyYjMjUxO3QgZGUgdHJhbnNmZXJ0IGRlcyBkb25uJiMyMzM7ZXMuCisKKzUuMy4zIERJU1RSSUJVVElPTiBEVSBMT0dJQ0lFTCBERVJJVkUKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGNyJiMyMzM7ZSB1biBMb2dpY2llbCBEJiMyMzM7cml2JiMyMzM7LCBjZSBMb2dpY2llbCBEJiMyMzM7cml2JiMyMzM7IHBldXQgJiMyMzQ7dHJlIGRpc3RyaWJ1JiMyMzM7IHNvdXMgdW4gY29udHJhdCBkZSBsaWNlbmNlIGF1dHJlIHF1ZSBsZSBwciYjMjMzO3NlbnQgQ29udHJhdCAmIzIyNDsgY29uZGl0aW9uIGRlIHJlc3BlY3RlciBsZXMgb2JsaWdhdGlvbnMgZGUgbWVudGlvbiBkZXMgZHJvaXRzIHN1ciBsZSBMb2dpY2llbCB0ZWxsZXMgcXVlIGQmIzIzMztmaW5pZXMgJiMyMjQ7IGxgYXJ0aWNsZSA2LjQuIERhbnMgbGUgY2FzIG8mIzI0OTsgbGEgY3ImIzIzMzthdGlvbiBkdSBMb2dpY2llbCBEJiMyMzM7cml2JiMyMzM7IGEgbiYjMjMzO2Nlc3NpdCYjMjMzOyB1bmUgbW9kaWZpY2F0aW9uIGR1IENvZGUgU291cmNlIGxlIGxpY2VuY2kmIzIzMzsgc2BlbmdhZ2UgJiMyMjQ7IGNlIHF1ZToKKworbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGNvcnJlc3BvbmRhbnQgJiMyMjQ7IGNldHRlIG1vZGlmaWNhdGlvbiBzb2l0IHImIzIzMztnaSBwYXIgbGUgcHImIzIzMztzZW50IENvbnRyYXQsCitsZXMgQ29udHJpYnV0aW9ucyBJbnQmIzIzMztnciYjMjMzO2VzIGRvbnQgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IHImIzIzMztzdWx0ZSBzb2llbnQgY2xhaXJlbWVudCBpZGVudGlmaSYjMjMzO2VzIGV0IGRvY3VtZW50JiMyMzM7ZXMsCitsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIHVuIGFjYyYjMjMyO3MgZWZmZWN0aWYgYXUgY29kZSBzb3VyY2UgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7LCBwZW5kYW50IGF1IG1vaW5zIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgbGEgZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIEQmIzIzMztyaXYmIzIzMzssIGRlIHRlbGxlIHNvcnRlIHF1ZSBjZXMgbW9kaWZpY2F0aW9ucyBwdWlzc2VudCAmIzIzNDt0cmUgcmVwcmlzZXMgZGFucyB1bmUgdmVyc2lvbiB1bHQmIzIzMztyaWV1cmUgZHUgTG9naWNpZWwsICYjMjMzO3RhbnQgZW50ZW5kdSBxdWUgbGUgY28mIzI1MTt0IGFkZGl0aW9ubmVsIGRgYWNxdWlzaXRpb24gZHUgY29kZSBzb3VyY2UgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkdSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKzUuMy40IENPTVBBVElCSUxJVEUgQVZFQyBMQSBMSUNFTkNFIENlQ0lMTAorCitMb3JzcXVgdW4gTG9naWNpZWwgTW9kaWZpJiMyMzM7IGNvbnRpZW50IHVuZSBDb250cmlidXRpb24gSW50JiMyMzM7Z3ImIzIzMztlIHNvdW1pc2UgYXUgY29udHJhdCBkZSBsaWNlbmNlIENlQ0lMTCwgb3UgbG9yc3F1YHVuIExvZ2ljaWVsIEQmIzIzMztyaXYmIzIzMzsgY29udGllbnQgdW4gTW9kdWxlIExpJiMyMzM7IHNvdW1pcyBhdSBjb250cmF0IGRlIGxpY2VuY2UgQ2VDSUxMLCBsZXMgc3RpcHVsYXRpb25zIHByJiMyMzM7dnVlcyBhdSB0cm9pc2kmIzIzMjttZSBpdGVtIGRlIGxgYXJ0aWNsZSA2LjQgc29udCBmYWN1bHRhdGl2ZXMuCisKK0FydGljbGUgNiAtIFBST1BSSUVURSBJTlRFTExFQ1RVRUxMRQorCis2LjEgU1VSIExFIExPR0lDSUVMIElOSVRJQUwKKworTGUgVGl0dWxhaXJlIGVzdCBkJiMyMzM7dGVudGV1ciBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBzdXIgbGUgTG9naWNpZWwgSW5pdGlhbC4gVG91dGUgdXRpbGlzYXRpb24gZHUgTG9naWNpZWwgSW5pdGlhbCBlc3Qgc291bWlzZSBhdSByZXNwZWN0IGRlcyBjb25kaXRpb25zIGRhbnMgbGVzcXVlbGxlcyBsZSBUaXR1bGFpcmUgYSBjaG9pc2kgZGUgZGlmZnVzZXIgc29uIG9ldXZyZSBldCBudWwgYXV0cmUgbmBhIGxhIGZhY3VsdCYjMjMzOyBkZSBtb2RpZmllciBsZXMgY29uZGl0aW9ucyBkZSBkaWZmdXNpb24gZGUgY2UgTG9naWNpZWwgSW5pdGlhbC4KKworTGUgVGl0dWxhaXJlIHNgZW5nYWdlICYjMjI0OyBjZSBxdWUgbGUgTG9naWNpZWwgSW5pdGlhbCByZXN0ZSBhdSBtb2lucyByJiMyMzM7Z2kgcGFyIGxlIENvbnRyYXQgZXQgY2UsIHBvdXIgbGEgZHVyJiMyMzM7ZSB2aXMmIzIzMztlICYjMjI0OyBsYGFydGljbGUgNC4yLgorCis2LjIgU1VSIExFUyBDT05UUklCVVRJT05TIElOVEVHUkVFUworCitMZSBMaWNlbmNpJiMyMzM7IHF1aSBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW5lIENvbnRyaWJ1dGlvbiBJbnQmIzIzMztnciYjMjMzO2UgZXN0IHRpdHVsYWlyZSBzdXIgY2VsbGUtY2kgZGVzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGRhbnMgbGVzIGNvbmRpdGlvbnMgZCYjMjMzO2ZpbmllcyBwYXIgbGEgbCYjMjMzO2dpc2xhdGlvbiBhcHBsaWNhYmxlLgorCis2LjMgU1VSIExFUyBNT0RVTEVTIExJRVMKKworTGUgTGljZW5jaSYjMjMzOyBxdWkgYSBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuIE1vZHVsZSBMaSYjMjMzOyBlc3QgdGl0dWxhaXJlIHN1ciBjZWx1aS1jaSBkZXMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZGFucyBsZXMgY29uZGl0aW9ucyBkJiMyMzM7ZmluaWVzIHBhciBsYSBsJiMyMzM7Z2lzbGF0aW9uIGFwcGxpY2FibGUgZXQgcmVzdGUgbGlicmUgZHUgY2hvaXggZHUgY29udHJhdCByJiMyMzM7Z2lzc2FudCBzYSBkaWZmdXNpb24gZGFucyBsZXMgY29uZGl0aW9ucyBkJiMyMzM7ZmluaWVzICYjMjI0OyBsYGFydGljbGUgNS4zLjMuCisKKzYuNCBNRU5USU9OUyBERVMgRFJPSVRTCisKK0xlIExpY2VuY2kmIzIzMzsgc2BlbmdhZ2UgZXhwcmVzcyYjMjMzO21lbnQ6CisKKyYjMjI0OyBuZSBwYXMgc3VwcHJpbWVyIG91IG1vZGlmaWVyIGRlIHF1ZWxxdWUgbWFuaSYjMjMyO3JlIHF1ZSBjZSBzb2l0IGxlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGFwcG9zJiMyMzM7ZXMgc3VyIGxlIExvZ2ljaWVsOworCismIzIyNDsgcmVwcm9kdWlyZSAmIzIyNDsgbGBpZGVudGlxdWUgbGVzZGl0ZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBzdXIgbGVzIGNvcGllcyBkdSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgb3Ugbm9uOworCismIzIyNDsgZmFpcmUgZW4gc29ydGUgcXVlIGxgdXRpbGlzYXRpb24gZHUgTG9naWNpZWwsIHNlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGV0IGxlIGZhaXQgcXVgaWwgZXN0IHImIzIzMztnaSBwYXIgbGUgQ29udHJhdCBzb2llbnQgaW5kaXF1JiMyMzM7cyBkYW5zIHVuIHRleHRlIGZhY2lsZW1lbnQgYWNjZXNzaWJsZSBub3RhbW1lbnQgZGVwdWlzIGxgaW50ZXJmYWNlIGRlIHRvdXQgTG9naWNpZWwgRCYjMjMzO3JpdiYjMjMzOy4KK0xlIExpY2VuY2kmIzIzMzsgc2BlbmdhZ2UgJiMyMjQ7IG5lIHBhcyBwb3J0ZXIgYXR0ZWludGUsIGRpcmVjdGVtZW50IG91IGluZGlyZWN0ZW1lbnQsIGF1eCBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkdSBUaXR1bGFpcmUgZXQvb3UgZGVzIENvbnRyaWJ1dGV1cnMgc3VyIGxlIExvZ2ljaWVsIGV0ICYjMjI0OyBwcmVuZHJlLCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQsICYjMjI0OyBsYCYjMjMzO2dhcmQgZGUgc29uIHBlcnNvbm5lbCB0b3V0ZXMgbGVzIG1lc3VyZXMgbiYjMjMzO2Nlc3NhaXJlcyBwb3VyIGFzc3VyZXIgbGUgcmVzcGVjdCBkZXMgZGl0cyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkdSBUaXR1bGFpcmUgZXQvb3UgZGVzIENvbnRyaWJ1dGV1cnMuCisKK0FydGljbGUgNyAtIFNFUlZJQ0VTIEFTU09DSUVTCisKKzcuMSBMZSBDb250cmF0IG5gb2JsaWdlIGVuIGF1Y3VuIGNhcyBsZSBDb25jJiMyMzM7ZGFudCAmIzIyNDsgbGEgciYjMjMzO2FsaXNhdGlvbiBkZSBwcmVzdGF0aW9ucyBkYGFzc2lzdGFuY2UgdGVjaG5pcXVlIG91IGRlIG1haW50ZW5hbmNlIGR1IExvZ2ljaWVsLgorCitDZXBlbmRhbnQgbGUgQ29uYyYjMjMzO2RhbnQgcmVzdGUgbGlicmUgZGUgcHJvcG9zZXIgY2UgdHlwZSBkZSBzZXJ2aWNlcy4gTGVzIHRlcm1lcyBldCBjb25kaXRpb25zIGRgdW5lIHRlbGxlIGFzc2lzdGFuY2UgdGVjaG5pcXVlIGV0L291IGRgdW5lIHRlbGxlIG1haW50ZW5hbmNlIHNlcm9udCBhbG9ycyBkJiMyMzM7dGVybWluJiMyMzM7cyBkYW5zIHVuIGFjdGUgcyYjMjMzO3BhciYjMjMzOy4gQ2VzIGFjdGVzIGRlIG1haW50ZW5hbmNlIGV0L291IGFzc2lzdGFuY2UgdGVjaG5pcXVlIG5gZW5nYWdlcm9udCBxdWUgbGEgc2V1bGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCBxdWkgbGVzIHByb3Bvc2UuCisKKzcuMiBEZSBtJiMyMzQ7bWUsIHRvdXQgQ29uYyYjMjMzO2RhbnQgZXN0IGxpYnJlIGRlIHByb3Bvc2VyLCBzb3VzIHNhIHNldWxlIHJlc3BvbnNhYmlsaXQmIzIzMzssICYjMjI0OyBzZXMgbGljZW5jaSYjMjMzO3MgdW5lIGdhcmFudGllLCBxdWkgbmBlbmdhZ2VyYSBxdWUgbHVpLCBsb3JzIGRlIGxhIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIGV0L291IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBldCBjZSwgZGFucyBsZXMgY29uZGl0aW9ucyBxdWBpbCBzb3VoYWl0ZS4gQ2V0dGUgZ2FyYW50aWUgZXQgbGVzIG1vZGFsaXQmIzIzMztzIGZpbmFuY2kmIzIzMjtyZXMgZGUgc29uIGFwcGxpY2F0aW9uIGZlcm9udCBsYG9iamV0IGRgdW4gYWN0ZSBzJiMyMzM7cGFyJiMyMzM7IGVudHJlIGxlIENvbmMmIzIzMztkYW50IGV0IGxlIExpY2VuY2kmIzIzMzsuCisKK0FydGljbGUgOCAtIFJFU1BPTlNBQklMSVRFCisKKzguMSBTb3VzIHImIzIzMztzZXJ2ZSBkZXMgZGlzcG9zaXRpb25zIGRlIGxgYXJ0aWNsZSA4LjIsIGxlIExpY2VuY2kmIzIzMzsgYSBsYSBmYWN1bHQmIzIzMzssIHNvdXMgciYjMjMzO3NlcnZlIGRlIHByb3V2ZXIgbGEgZmF1dGUgZHUgQ29uYyYjMjMzO2RhbnQgY29uY2VybiYjMjMzOywgZGUgc29sbGljaXRlciBsYSByJiMyMzM7cGFyYXRpb24gZHUgcHImIzIzMztqdWRpY2UgZGlyZWN0IHF1YGlsIHN1YmlyYWl0IGR1IGZhaXQgZHUgTG9naWNpZWwgZXQgZG9udCBpbCBhcHBvcnRlcmEgbGEgcHJldXZlLgorCis4LjIgTGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCBlc3QgbGltaXQmIzIzMztlIGF1eCBlbmdhZ2VtZW50cyBwcmlzIGVuIGFwcGxpY2F0aW9uIGR1IENvbnRyYXQgZXQgbmUgc2F1cmFpdCAmIzIzNDt0cmUgZW5nYWcmIzIzMztlIGVuIHJhaXNvbiBub3RhbW1lbnQ6IChpKSBkZXMgZG9tbWFnZXMgZHVzICYjMjI0OyBsYGluZXgmIzIzMztjdXRpb24sIHRvdGFsZSBvdSBwYXJ0aWVsbGUsIGRlIHNlcyBvYmxpZ2F0aW9ucyBwYXIgbGUgTGljZW5jaSYjMjMzOywgKGlpKSBkZXMgZG9tbWFnZXMgZGlyZWN0cyBvdSBpbmRpcmVjdHMgZCYjMjMzO2NvdWxhbnQgZGUgbGB1dGlsaXNhdGlvbiBvdSBkZXMgcGVyZm9ybWFuY2VzIGR1IExvZ2ljaWVsIHN1YmlzIHBhciBsZSBMaWNlbmNpJiMyMzM7IGV0IChpaWkpIHBsdXMgZyYjMjMzO24mIzIzMztyYWxlbWVudCBkYHVuIHF1ZWxjb25xdWUgZG9tbWFnZSBpbmRpcmVjdC4gRW4gcGFydGljdWxpZXIsIGxlcyBQYXJ0aWVzIGNvbnZpZW5uZW50IGV4cHJlc3MmIzIzMzttZW50IHF1ZSB0b3V0IHByJiMyMzM7anVkaWNlIGZpbmFuY2llciBvdSBjb21tZXJjaWFsIChwYXIgZXhlbXBsZSBwZXJ0ZSBkZSBkb25uJiMyMzM7ZXMsIHBlcnRlIGRlIGImIzIzMztuJiMyMzM7ZmljZXMsIHBlcnRlIGRgZXhwbG9pdGF0aW9uLCBwZXJ0ZSBkZSBjbGllbnQmIzIzMjtsZSBvdSBkZSBjb21tYW5kZXMsIG1hbnF1ZSAmIzIyNDsgZ2FnbmVyLCB0cm91YmxlIGNvbW1lcmNpYWwgcXVlbGNvbnF1ZSkgb3UgdG91dGUgYWN0aW9uIGRpcmlnJiMyMzM7ZSBjb250cmUgbGUgTGljZW5jaSYjMjMzOyBwYXIgdW4gdGllcnMsIGNvbnN0aXR1ZSB1biBkb21tYWdlIGluZGlyZWN0IGV0IG5gb3V2cmUgcGFzIGRyb2l0ICYjMjI0OyByJiMyMzM7cGFyYXRpb24gcGFyIGxlIENvbmMmIzIzMztkYW50LgorCitBcnRpY2xlIDkgLSBHQVJBTlRJRQorCis5LjEgTGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBxdWUgbGAmIzIzMzt0YXQgYWN0dWVsIGRlcyBjb25uYWlzc2FuY2VzIHNjaWVudGlmaXF1ZXMgZXQgdGVjaG5pcXVlcyBhdSBtb21lbnQgZGUgbGEgbWlzZSBlbiBjaXJjdWxhdGlvbiBkdSBMb2dpY2llbCBuZSBwZXJtZXQgcGFzIGRgZW4gdGVzdGVyIGV0IGRgZW4gdiYjMjMzO3JpZmllciB0b3V0ZXMgbGVzIHV0aWxpc2F0aW9ucyBuaSBkZSBkJiMyMzM7dGVjdGVyIGxgZXhpc3RlbmNlIGRgJiMyMzM7dmVudHVlbHMgZCYjMjMzO2ZhdXRzLiBMYGF0dGVudGlvbiBkdSBMaWNlbmNpJiMyMzM7IGEgJiMyMzM7dCYjMjMzOyBhdHRpciYjMjMzO2Ugc3VyIGNlIHBvaW50IHN1ciBsZXMgcmlzcXVlcyBhc3NvY2kmIzIzMztzIGF1IGNoYXJnZW1lbnQsICYjMjI0OyBsYHV0aWxpc2F0aW9uLCBsYSBtb2RpZmljYXRpb24gZXQvb3UgYXUgZCYjMjMzO3ZlbG9wcGVtZW50IGV0ICYjMjI0OyBsYSByZXByb2R1Y3Rpb24gZHUgTG9naWNpZWwgcXVpIHNvbnQgciYjMjMzO3NlcnYmIzIzMztzICYjMjI0OyBkZXMgdXRpbGlzYXRldXJzIGF2ZXJ0aXMuCisKK0lsIHJlbCYjMjMyO3ZlIGRlIGxhIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgTGljZW5jaSYjMjMzOyBkZSBjb250ciYjMjQ0O2xlciwgcGFyIHRvdXMgbW95ZW5zLCBsYGFkJiMyMzM7cXVhdGlvbiBkdSBwcm9kdWl0ICYjMjI0OyBzZXMgYmVzb2lucywgc29uIGJvbiBmb25jdGlvbm5lbWVudCBldCBkZSBzYGFzc3VyZXIgcXVgaWwgbmUgY2F1c2VyYSBwYXMgZGUgZG9tbWFnZXMgYXV4IHBlcnNvbm5lcyBldCBhdXggYmllbnMuCisKKzkuMiBMZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7Y2xhcmUgZGUgYm9ubmUgZm9pICYjMjM0O3RyZSBlbiBkcm9pdCBkZSBjb25jJiMyMzM7ZGVyIGxgZW5zZW1ibGUgZGVzIGRyb2l0cyBhdHRhY2gmIzIzMztzIGF1IExvZ2ljaWVsIChjb21wcmVuYW50IG5vdGFtbWVudCBsZXMgZHJvaXRzIHZpcyYjMjMzO3MgJiMyMjQ7IGxgYXJ0aWNsZSA1KS4KKworOS4zIExlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgcXVlIGxlIExvZ2ljaWVsIGVzdCBmb3VybmkgImVuIGxgJiMyMzM7dGF0IiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQgc2FucyBhdXRyZSBnYXJhbnRpZSwgZXhwcmVzc2Ugb3UgdGFjaXRlLCBxdWUgY2VsbGUgcHImIzIzMzt2dWUgJiMyMjQ7IGxgYXJ0aWNsZSA5LjIgZXQgbm90YW1tZW50IHNhbnMgYXVjdW5lIGdhcmFudGllIHN1ciBzYSB2YWxldXIgY29tbWVyY2lhbGUsIHNvbiBjYXJhY3QmIzIzMjtyZSBzJiMyMzM7Y3VyaXMmIzIzMzssIGlubm92YW50IG91IHBlcnRpbmVudC4KKworRW4gcGFydGljdWxpZXIsIGxlIENvbmMmIzIzMztkYW50IG5lIGdhcmFudGl0IHBhcyBxdWUgbGUgTG9naWNpZWwgZXN0IGV4ZW1wdCBkYGVycmV1ciwgcXVgaWwgZm9uY3Rpb25uZXJhIHNhbnMgaW50ZXJydXB0aW9uLCBxdWBpbCBzZXJhIGNvbXBhdGlibGUgYXZlYyBsYCYjMjMzO3F1aXBlbWVudCBkdSBMaWNlbmNpJiMyMzM7IGV0IHNhIGNvbmZpZ3VyYXRpb24gbG9naWNpZWxsZSBuaSBxdWBpbCByZW1wbGlyYSBsZXMgYmVzb2lucyBkdSBMaWNlbmNpJiMyMzM7LgorCis5LjQgTGUgQ29uYyYjMjMzO2RhbnQgbmUgZ2FyYW50aXQgcGFzLCBkZSBtYW5pJiMyMzI7cmUgZXhwcmVzc2Ugb3UgdGFjaXRlLCBxdWUgbGUgTG9naWNpZWwgbmUgcG9ydGUgcGFzIGF0dGVpbnRlICYjMjI0OyB1biBxdWVsY29ucXVlIGRyb2l0IGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZGB1biB0aWVycyBwb3J0YW50IHN1ciB1biBicmV2ZXQsIHVuIGxvZ2ljaWVsIG91IHN1ciB0b3V0IGF1dHJlIGRyb2l0IGRlIHByb3ByaSYjMjMzO3QmIzIzMzsuIEFpbnNpLCBsZSBDb25jJiMyMzM7ZGFudCBleGNsdXQgdG91dGUgZ2FyYW50aWUgYXUgcHJvZml0IGR1IExpY2VuY2kmIzIzMzsgY29udHJlIGxlcyBhY3Rpb25zIGVuIGNvbnRyZWZhJiMyMzE7b24gcXVpIHBvdXJyYWllbnQgJiMyMzQ7dHJlIGRpbGlnZW50JiMyMzM7ZXMgYXUgdGl0cmUgZGUgbGB1dGlsaXNhdGlvbiwgZGUgbGEgbW9kaWZpY2F0aW9uLCBldCBkZSBsYSByZWRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbC4gTiYjMjMzO2FubW9pbnMsIHNpIGRlIHRlbGxlcyBhY3Rpb25zIHNvbnQgZXhlcmMmIzIzMztlcyBjb250cmUgbGUgTGljZW5jaSYjMjMzOywgbGUgQ29uYyYjMjMzO2RhbnQgbHVpIGFwcG9ydGVyYSBzb24gYWlkZSB0ZWNobmlxdWUgZXQganVyaWRpcXVlIHBvdXIgc2EgZCYjMjMzO2ZlbnNlLiBDZXR0ZSBhaWRlIHRlY2huaXF1ZSBldCBqdXJpZGlxdWUgZXN0IGQmIzIzMzt0ZXJtaW4mIzIzMztlIGF1IGNhcyBwYXIgY2FzIGVudHJlIGxlIENvbmMmIzIzMztkYW50IGNvbmNlcm4mIzIzMzsgZXQgbGUgTGljZW5jaSYjMjMzOyBkYW5zIGxlIGNhZHJlIGRgdW4gcHJvdG9jb2xlIGRgYWNjb3JkLiBMZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7Z2FnZSB0b3V0ZSByZXNwb25zYWJpbGl0JiMyMzM7IHF1YW50ICYjMjI0OyBsYHV0aWxpc2F0aW9uIGRlIGxhIGQmIzIzMztub21pbmF0aW9uIGR1IExvZ2ljaWVsIHBhciBsZSBMaWNlbmNpJiMyMzM7LiBBdWN1bmUgZ2FyYW50aWUgbmBlc3QgYXBwb3J0JiMyMzM7ZSBxdWFudCAmIzIyNDsgbGBleGlzdGVuY2UgZGUgZHJvaXRzIGFudCYjMjMzO3JpZXVycyBzdXIgbGUgbm9tIGR1IExvZ2ljaWVsIGV0IHN1ciBsYGV4aXN0ZW5jZSBkYHVuZSBtYXJxdWUuCisKK0FydGljbGUgMTAgLSBSRVNJTElBVElPTgorCisxMC4xIEVuIGNhcyBkZSBtYW5xdWVtZW50IHBhciBsZSBMaWNlbmNpJiMyMzM7IGF1eCBvYmxpZ2F0aW9ucyBtaXNlcyAmIzIyNDsgc2EgY2hhcmdlIHBhciBsZSBDb250cmF0LCBsZSBDb25jJiMyMzM7ZGFudCBwb3VycmEgciYjMjMzO3NpbGllciBkZSBwbGVpbiBkcm9pdCBsZSBDb250cmF0IHRyZW50ZSAoMzApIGpvdXJzIGFwciYjMjMyO3Mgbm90aWZpY2F0aW9uIGFkcmVzcyYjMjMzO2UgYXUgTGljZW5jaSYjMjMzOyBldCByZXN0JiMyMzM7ZSBzYW5zIGVmZmV0LgorCisxMC4yIExlIExpY2VuY2kmIzIzMzsgZG9udCBsZSBDb250cmF0IGVzdCByJiMyMzM7c2lsaSYjMjMzOyBuYGVzdCBwbHVzIGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHV0aWxpc2VyLCBtb2RpZmllciBvdSBkaXN0cmlidWVyIGxlIExvZ2ljaWVsLiBDZXBlbmRhbnQsIHRvdXRlcyBsZXMgbGljZW5jZXMgcXVgaWwgYXVyYSBjb25jJiMyMzM7ZCYjMjMzO2VzIGFudCYjMjMzO3JpZXVyZW1lbnQgJiMyMjQ7IGxhIHImIzIzMztzaWxpYXRpb24gZHUgQ29udHJhdCByZXN0ZXJvbnQgdmFsaWRlcyBzb3VzIHImIzIzMztzZXJ2ZSBxdWBlbGxlcyBhaWVudCAmIzIzMzt0JiMyMzM7IGVmZmVjdHUmIzIzMztlcyBlbiBjb25mb3JtaXQmIzIzMzsgYXZlYyBsZSBDb250cmF0LgorCitBcnRpY2xlIDExIC0gRElTUE9TSVRJT05TIERJVkVSU0VTCisKKzExLjEgQ0FVU0UgRVhURVJJRVVSRQorCitBdWN1bmUgZGVzIFBhcnRpZXMgbmUgc2VyYSByZXNwb25zYWJsZSBkYHVuIHJldGFyZCBvdSBkYHVuZSBkJiMyMzM7ZmFpbGxhbmNlIGRgZXgmIzIzMztjdXRpb24gZHUgQ29udHJhdCBxdWkgc2VyYWl0IGQmIzI1MTsgJiMyMjQ7IHVuIGNhcyBkZSBmb3JjZSBtYWpldXJlLCB1biBjYXMgZm9ydHVpdCBvdSB1bmUgY2F1c2UgZXh0JiMyMzM7cmlldXJlLCB0ZWxsZSBxdWUsIG5vdGFtbWVudCwgbGUgbWF1dmFpcyBmb25jdGlvbm5lbWVudCBvdSBsZXMgaW50ZXJydXB0aW9ucyBkdSByJiMyMzM7c2VhdSAmIzIzMztsZWN0cmlxdWUgb3UgZGUgdCYjMjMzO2wmIzIzMztjb21tdW5pY2F0aW9uLCBsYSBwYXJhbHlzaWUgZHUgciYjMjMzO3NlYXUgbGkmIzIzMztlICYjMjI0OyB1bmUgYXR0YXF1ZSBpbmZvcm1hdGlxdWUsIGxgaW50ZXJ2ZW50aW9uIGRlcyBhdXRvcml0JiMyMzM7cyBnb3V2ZXJuZW1lbnRhbGVzLCBsZXMgY2F0YXN0cm9waGVzIG5hdHVyZWxsZXMsIGxlcyBkJiMyMzM7ZyYjMjI2O3RzIGRlcyBlYXV4LCBsZXMgdHJlbWJsZW1lbnRzIGRlIHRlcnJlLCBsZSBmZXUsIGxlcyBleHBsb3Npb25zLCBsZXMgZ3ImIzIzMjt2ZXMgZXQgbGVzIGNvbmZsaXRzIHNvY2lhdXgsIGxgJiMyMzM7dGF0IGRlIGd1ZXJyZS4uLgorCisxMS4yIExlIGZhaXQsIHBhciBsYHVuZSBvdSBsYGF1dHJlIGRlcyBQYXJ0aWVzLCBkYG9tZXR0cmUgZW4gdW5lIG91IHBsdXNpZXVycyBvY2Nhc2lvbnMgZGUgc2UgcHImIzIzMzt2YWxvaXIgZGB1bmUgb3UgcGx1c2lldXJzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0LCBuZSBwb3VycmEgZW4gYXVjdW4gY2FzIGltcGxpcXVlciByZW5vbmNpYXRpb24gcGFyIGxhIFBhcnRpZSBpbnQmIzIzMztyZXNzJiMyMzM7ZSAmIzIyNDsgc2BlbiBwciYjMjMzO3ZhbG9pciB1bHQmIzIzMztyaWV1cmVtZW50LgorCisxMS4zIExlIENvbnRyYXQgYW5udWxlIGV0IHJlbXBsYWNlIHRvdXRlIGNvbnZlbnRpb24gYW50JiMyMzM7cmlldXJlLCAmIzIzMztjcml0ZSBvdSBvcmFsZSwgZW50cmUgbGVzIFBhcnRpZXMgc3VyIGxlIG0mIzIzNDttZSBvYmpldCBldCBjb25zdGl0dWUgbGBhY2NvcmQgZW50aWVyIGVudHJlIGxlcyBQYXJ0aWVzIHN1ciBjZXQgb2JqZXQuIEF1Y3VuZSBhZGRpdGlvbiBvdSBtb2RpZmljYXRpb24gYXV4IHRlcm1lcyBkdSBDb250cmF0IG5gYXVyYSBkYGVmZmV0ICYjMjI0OyBsYCYjMjMzO2dhcmQgZGVzIFBhcnRpZXMgJiMyMjQ7IG1vaW5zIGRgJiMyMzQ7dHJlIGZhaXRlIHBhciAmIzIzMztjcml0IGV0IHNpZ24mIzIzMztlIHBhciBsZXVycyByZXByJiMyMzM7c2VudGFudHMgZCYjMjUxO21lbnQgaGFiaWxpdCYjMjMzO3MuCisKKzExLjQgRGFucyBsYGh5cG90aCYjMjMyO3NlIG8mIzI0OTsgdW5lIG91IHBsdXNpZXVycyBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgc2BhdiYjMjMyO3JlcmFpdCBjb250cmFpcmUgJiMyMjQ7IHVuZSBsb2kgb3UgJiMyMjQ7IHVuIHRleHRlIGFwcGxpY2FibGUsIGV4aXN0YW50cyBvdSBmdXR1cnMsIGNldHRlIGxvaSBvdSBjZSB0ZXh0ZSBwciYjMjMzO3ZhdWRyYWl0LCBldCBsZXMgUGFydGllcyBmZXJhaWVudCBsZXMgYW1lbmRlbWVudHMgbiYjMjMzO2Nlc3NhaXJlcyBwb3VyIHNlIGNvbmZvcm1lciAmIzIyNDsgY2V0dGUgbG9pIG91ICYjMjI0OyBjZSB0ZXh0ZS4gVG91dGVzIGxlcyBhdXRyZXMgZGlzcG9zaXRpb25zIHJlc3Rlcm9udCBlbiB2aWd1ZXVyLiBEZSBtJiMyMzQ7bWUsIGxhIG51bGxpdCYjMjMzOywgcG91ciBxdWVscXVlIHJhaXNvbiBxdWUgY2Ugc29pdCwgZGB1bmUgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IG5lIHNhdXJhaXQgZW50cmEmIzIzODtuZXIgbGEgbnVsbGl0JiMyMzM7IGRlIGxgZW5zZW1ibGUgZHUgQ29udHJhdC4KKworMTEuNSBMQU5HVUUKKworTGUgQ29udHJhdCBlc3QgciYjMjMzO2RpZyYjMjMzOyBlbiBsYW5ndWUgZnJhbiYjMjMxO2Fpc2UgZXQgZW4gbGFuZ3VlIGFuZ2xhaXNlLCBjZXMgZGV1eCB2ZXJzaW9ucyBmYWlzYW50ICYjMjMzO2dhbGVtZW50IGZvaS4KKworQXJ0aWNsZSAxMiAtIE5PVVZFTExFUyBWRVJTSU9OUyBEVSBDT05UUkFUCisKKzEyLjEgVG91dGUgcGVyc29ubmUgZXN0IGF1dG9yaXMmIzIzMztlICYjMjI0OyBjb3BpZXIgZXQgZGlzdHJpYnVlciBkZXMgY29waWVzIGRlIGNlIENvbnRyYXQuCisKKzEyLjIgQWZpbiBkYGVuIHByJiMyMzM7c2VydmVyIGxhIGNvaCYjMjMzO3JlbmNlLCBsZSB0ZXh0ZSBkdSBDb250cmF0IGVzdCBwcm90JiMyMzM7ZyYjMjMzOyBldCBuZSBwZXV0ICYjMjM0O3RyZSBtb2RpZmkmIzIzMzsgcXVlIHBhciBsZXMgYXV0ZXVycyBkZSBsYSBsaWNlbmNlLCBsZXNxdWVscyBzZSByJiMyMzM7c2VydmVudCBsZSBkcm9pdCBkZSBwdWJsaWVyIHAmIzIzMztyaW9kaXF1ZW1lbnQgZGVzIG1pc2VzICYjMjI0OyBqb3VyIG91IGRlIG5vdXZlbGxlcyB2ZXJzaW9ucyBkdSBDb250cmF0LCBxdWkgcG9zcyYjMjMzO2Rlcm9udCBjaGFjdW5lIHVuIG51bSYjMjMzO3JvIGRpc3RpbmN0LiBDZXMgdmVyc2lvbnMgdWx0JiMyMzM7cmlldXJlcyBzZXJvbnQgc3VzY2VwdGlibGVzIGRlIHByZW5kcmUgZW4gY29tcHRlIGRlIG5vdXZlbGxlcyBwcm9ibCYjMjMzO21hdGlxdWVzIHJlbmNvbnRyJiMyMzM7ZXMgcGFyIGxlcyBsb2dpY2llbHMgbGlicmVzLgorCisxMi4zIFRvdXQgTG9naWNpZWwgZGlmZnVzJiMyMzM7IHNvdXMgdW5lIHZlcnNpb24gZG9ubiYjMjMzO2UgZHUgQ29udHJhdCBuZSBwb3VycmEgZmFpcmUgbGBvYmpldCBkYHVuZSBkaWZmdXNpb24gdWx0JiMyMzM7cmlldXJlIHF1ZSBzb3VzIGxhIG0mIzIzNDttZSB2ZXJzaW9uIGR1IENvbnRyYXQgb3UgdW5lIHZlcnNpb24gcG9zdCYjMjMzO3JpZXVyZS4KKworQXJ0aWNsZSAxMyAtIExPSSBBUFBMSUNBQkxFIEVUIENPTVBFVEVOQ0UgVEVSUklUT1JJQUxFCisKKzEzLjEgTGUgQ29udHJhdCBlc3QgciYjMjMzO2dpIHBhciBsYSBsb2kgZnJhbiYjMjMxO2Fpc2UuIExlcyBQYXJ0aWVzIGNvbnZpZW5uZW50IGRlIHRlbnRlciBkZSByJiMyMzM7Z2xlciAmIzIyNDsgbGBhbWlhYmxlIGxlcyBkaWZmJiMyMzM7cmVuZHMgb3UgbGl0aWdlcyBxdWkgdmllbmRyYWllbnQgJiMyMjQ7IHNlIHByb2R1aXJlIHBhciBzdWl0ZSBvdSAmIzIyNDsgbGBvY2Nhc2lvbiBkdSBDb250cmF0LgorCisxMy4yIEEgZCYjMjMzO2ZhdXQgZGBhY2NvcmQgYW1pYWJsZSBkYW5zIHVuIGQmIzIzMztsYWkgZGUgZGV1eCAoMikgbW9pcyAmIzIyNDsgY29tcHRlciBkZSBsZXVyIHN1cnZlbmFuY2UgZXQgc2F1ZiBzaXR1YXRpb24gcmVsZXZhbnQgZGB1bmUgcHJvYyYjMjMzO2R1cmUgZGB1cmdlbmNlLCBsZXMgZGlmZiYjMjMzO3JlbmRzIG91IGxpdGlnZXMgc2Vyb250IHBvcnQmIzIzMztzIHBhciBsYSBQYXJ0aWUgbGEgcGx1cyBkaWxpZ2VudGUgZGV2YW50IGxlcyBUcmlidW5hdXggY29tcCYjMjMzO3RlbnRzIGRlIFBhcmlzLgorCisxIENlQ0lMTCBlc3QgcG91ciBDZShhKSBDKG5ycykgSShucmlhKSBMKG9naWNpZWwpIEwoaWJyZSkKKworVmVyc2lvbiAxLjAgZHUgMjAwNi0wOS0wNS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DUEFMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ1BBTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFmYjBlMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ1BBTC0xLjAKQEAgLTAsMCArMSwxMDkgQEAKKworQ29tbW9uIFB1YmxpYyBBdHRyaWJ1dGlvbiBMaWNlbnNlIFZlcnNpb24gMS4wIChDUEFMKQorMS4gJiM4MjIwO0RlZmluaXRpb25zJiM4MjIxOworMS4wLjEgJiM4MjIwO0NvbW1lcmNpYWwgVXNlJiM4MjIxOyBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUgQ292ZXJlZCBDb2RlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LgorMS4xICYjODIyMDtDb250cmlidXRvciYjODIyMTsgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorMS4yICYjODIyMDtDb250cmlidXRvciBWZXJzaW9uJiM4MjIxOyBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisxLjMgJiM4MjIwO0NvdmVyZWQgQ29kZSYjODIyMTsgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKzEuNCAmIzgyMjA7RWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtJiM4MjIxOyBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKzEuNSAmIzgyMjA7RXhlY3V0YWJsZSYjODIyMTsgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisxLjYgJiM4MjIwO0luaXRpYWwgRGV2ZWxvcGVyJiM4MjIxOyBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisxLjcgJiM4MjIwO0xhcmdlciBXb3JrJiM4MjIxOyBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorMS44ICYjODIyMDtMaWNlbnNlJiM4MjIxOyBtZWFucyB0aGlzIGRvY3VtZW50LgorMS44LjEgJiM4MjIwO0xpY2Vuc2FibGUmIzgyMjE7IG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorMS45ICYjODIyMDtNb2RpZmljYXRpb25zJiM4MjIxOyBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKK0EuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorMS4xMCAmIzgyMjA7T3JpZ2luYWwgQ29kZSYjODIyMTsgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKzEuMTAuMSAmIzgyMjA7UGF0ZW50IENsYWltcyYjODIyMTsgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisxLjExICYjODIyMDtTb3VyY2UgQ29kZSYjODIyMTsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3ImIzgyMTc7cyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisxLjEyICYjODIyMDtZb3UmIzgyMjE7IChvciAmIzgyMjA7WW91ciYjODIyMTspIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICYjODIyMDtZb3UmIzgyMjE7IGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAmIzgyMjA7Y29udHJvbCYjODIyMTsgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorMi4xIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKSB1bmRlciBQYXRlbnRzIENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3Igc2VsbGluZyBvZiBPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLgorMi4yIENvbnRyaWJ1dG9yIEdyYW50LgorU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6IDEpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kIDIpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIENvZGUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCiszLjEgQXBwbGljYXRpb24gb2YgTGljZW5zZS4KK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJiM4MjE3OyByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorMy4yIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorMy4zIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCiszLjQgSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHkmIzgyMTc7cyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICYjODIyMDtMRUdBTCYjODIyMTsgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKyhiKSBDb250cmlidXRvciBBUElzLgorSWYgQ29udHJpYnV0b3ImIzgyMTc7cyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorKGMpIFJlcHJlc2VudGF0aW9ucy4KK0NvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvciYjODIxNztzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJiM4MjE3O3Mgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKzMuNSBSZXF1aXJlZCBOb3RpY2VzLgorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJiM4MjE3OyByaWdodHMgb3Igb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKzMuNiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHMmIzgyMTc7IHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCYjODIxNztzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCiszLjcgTGFyZ2VyIFdvcmtzLgorWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCis2LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKzYuMSBOZXcgVmVyc2lvbnMuCitTb2NpYWx0ZXh0LCBJbmMuICgmIzgyMjA7U29jaWFsdGV4dCYjODIyMTspIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKzYuMiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFNvY2lhbHRleHQuIE5vIG9uZSBvdGhlciB0aGFuIFNvY2lhbHRleHQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorNi4zIERlcml2YXRpdmUgV29ya3MuCitJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyAmIzgyMjA7U29jaWFsdGV4dCYjODIyMTssICYjODIyMDtDUEFMJiM4MjIxOyBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIENQQUwuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gJiM4MjIwO0FTIElTJiM4MjIxOyBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIE9SSUdJTkFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCis4LiBURVJNSU5BVElPTi4KKzguMSBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCis4LjIgSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICYjODIyMDtQYXJ0aWNpcGFudCYjODIyMTspIGFsbGVnaW5nIHRoYXQ6CisoYSkgc3VjaCBQYXJ0aWNpcGFudCYjODIxNztzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwgdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKSBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorKGIpIGFueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50JiM4MjE3O3MgQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZCAyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFBhcnRpY2lwYW50LgorOC4zIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50JiM4MjE3O3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuCis4LjQgSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgT1JJR0lOQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJiM4MjE3O1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorVGhlIENvdmVyZWQgQ29kZSBpcyBhICYjODIyMDtjb21tZXJjaWFsIGl0ZW0sJiM4MjIxOyBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgJiM4MjIwO2NvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUmIzgyMjE7IGFuZCAmIzgyMjA7Y29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCYjODIyMTsgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorMTEuIE1JU0NFTExBTkVPVVMuCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMmIzgyMTc7IGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKzEzLiBNVUxUSVBMRS1MSUNFTlNFRCBDT0RFLgorSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzIE11bHRpcGxlLUxpY2Vuc2VkLiBNdWx0aXBsZS1MaWNlbnNlZCBtZWFucyB0aGF0IHRoZSBJbml0aWFsIERldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIgWW91ciBjaG9pY2Ugb2YgdGhlIENQQUwgb3IgdGhlIGFsdGVybmF0aXZlIGxpY2Vuc2VzLCBpZiBhbnksIHNwZWNpZmllZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4KKzE0LiBBRERJVElPTkFMIFRFUk06IEFUVFJJQlVUSU9OCisoYSkgQXMgYSBtb2Rlc3QgYXR0cmlidXRpb24gdG8gdGhlIG9yZ2FuaXplciBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgKCYjODIyMDtPcmlnaW5hbCBEZXZlbG9wZXImIzgyMjE7KSwgaW4gdGhlIGhvcGUgdGhhdCBpdHMgcHJvbW90aW9uYWwgdmFsdWUgbWF5IGhlbHAganVzdGlmeSB0aGUgdGltZSwgbW9uZXkgYW5kIGVmZm9ydCBpbnZlc3RlZCBpbiB3cml0aW5nIHRoZSBPcmlnaW5hbCBDb2RlLCB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIG1heSBpbmNsdWRlIGluIEV4aGliaXQgQiAoJiM4MjIwO0F0dHJpYnV0aW9uIEluZm9ybWF0aW9uJiM4MjIxOykgYSByZXF1aXJlbWVudCB0aGF0IGVhY2ggdGltZSBhbiBFeGVjdXRhYmxlIGFuZCBTb3VyY2UgQ29kZSBvciBhIExhcmdlciBXb3JrIGlzIGxhdW5jaGVkIG9yIGluaXRpYWxseSBydW4gKHdoaWNoIGluY2x1ZGVzIGluaXRpYXRpbmcgYSBzZXNzaW9uKSwgYSBwcm9taW5lbnQgZGlzcGxheSBvZiB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyJiM4MjE3O3MgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gKGFzIGRlZmluZWQgYmVsb3cpIG11c3Qgb2NjdXIgb24gdGhlIGdyYXBoaWMgdXNlciBpbnRlcmZhY2UgZW1wbG95ZWQgYnkgdGhlIGVuZCB1c2VyIHRvIGFjY2VzcyBzdWNoIENvdmVyZWQgQ29kZSAod2hpY2ggbWF5IGluY2x1ZGUgZGlzcGxheSBvbiBhIHNwbGFzaCBzY3JlZW4pLCBpZiBhbnkuIFRoZSBzaXplIG9mIHRoZSBncmFwaGljIGltYWdlIHNob3VsZCBiZSBjb25zaXN0ZW50IHdpdGggdGhlIHNpemUgb2YgdGhlIG90aGVyIGVsZW1lbnRzIG9mIHRoZSBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbi4gSWYgdGhlIGFjY2VzcyBieSB0aGUgZW5kIHVzZXIgdG8gdGhlIEV4ZWN1dGFibGUgYW5kIFNvdXJjZSBDb2RlIGRvZXMgbm90IGNyZWF0ZSBhIGdyYXBoaWMgdXNlciBpbnRlcmZhY2UgZm9yIGFjY2VzcyB0byB0aGUgQ292ZXJlZCBDb2RlLCB0aGlzIG9ibGlnYXRpb24gc2hhbGwgbm90IGFwcGx5LiBJZiB0aGUgT3JpZ2luYWwgQ29kZSBkaXNwbGF5cyBzdWNoIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIGluIGEgcGFydGljdWxhciBmb3JtIChzdWNoIGFzIGluIHRoZSBmb3JtIG9mIGEgc3BsYXNoIHNjcmVlbiwgbm90aWNlIGF0IGxvZ2luLCBhbiAmIzgyMjA7YWJvdXQmIzgyMjE7IGRpc3BsYXksIG9yIGRlZGljYXRlZCBhdHRyaWJ1dGlvbiBhcmVhIG9uIHVzZXIgaW50ZXJmYWNlIHNjcmVlbnMpLCBjb250aW51ZWQgdXNlIG9mIHN1Y2ggZm9ybSBmb3IgdGhhdCBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBpcyBvbmUgd2F5IG9mIG1lZXRpbmcgdGhpcyByZXF1aXJlbWVudCBmb3Igbm90aWNlLgorKGIpIEF0dHJpYnV0aW9uIGluZm9ybWF0aW9uIG1heSBvbmx5IGluY2x1ZGUgYSBjb3B5cmlnaHQgbm90aWNlLCBhIGJyaWVmIHBocmFzZSwgZ3JhcGhpYyBpbWFnZSBhbmQgYSBVUkwgKCYjODIyMDtBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiYjODIyMTspIGFuZCBpcyBzdWJqZWN0IHRvIHRoZSBBdHRyaWJ1dGlvbiBMaW1pdHMgYXMgZGVmaW5lZCBiZWxvdy4gRm9yIHRoZXNlIHB1cnBvc2VzLCBwcm9taW5lbnQgc2hhbGwgbWVhbiBkaXNwbGF5IGZvciBzdWZmaWNpZW50IGR1cmF0aW9uIHRvIGdpdmUgcmVhc29uYWJsZSBub3RpY2UgdG8gdGhlIHVzZXIgb2YgdGhlIGlkZW50aXR5IG9mIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIgYW5kIHRoYXQgaWYgWW91IGluY2x1ZGUgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gb3Igc2ltaWxhciBpbmZvcm1hdGlvbiBmb3Igb3RoZXIgcGFydGllcywgWW91IG11c3QgZW5zdXJlIHRoYXQgdGhlIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIGZvciB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIHNoYWxsIGJlIG5vIGxlc3MgcHJvbWluZW50IHRoYW4gc3VjaCBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBvciBzaW1pbGFyIGluZm9ybWF0aW9uIGZvciB0aGUgb3RoZXIgcGFydHkuIEZvciBncmVhdGVyIGNlcnRhaW50eSwgdGhlIE9yaWdpbmFsIERldmVsb3BlciBtYXkgY2hvb3NlIHRvIHNwZWNpZnkgaW4gRXhoaWJpdCBCIGJlbG93IHRoYXQgdGhlIGFib3ZlIGF0dHJpYnV0aW9uIHJlcXVpcmVtZW50IG9ubHkgYXBwbGllcyB0byBhbiBFeGVjdXRhYmxlIGFuZCBTb3VyY2UgQ29kZSByZXN1bHRpbmcgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgTW9kaWZpY2F0aW9uLCBidXQgbm90IGEgTGFyZ2VyIFdvcmsuIFRoZSBpbnRlbnQgaXMgdG8gcHJvdmlkZSBmb3IgcmVhc29uYWJseSBtb2Rlc3QgYXR0cmlidXRpb24sIHRoZXJlZm9yZSB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIGNhbm5vdCByZXF1aXJlIHRoYXQgWW91IGRpc3BsYXksIGF0IGFueSB0aW1lLCBtb3JlIHRoYW4gdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhcyBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbjogKGEpIGEgY29weXJpZ2h0IG5vdGljZSBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIERldmVsb3BlcjsgKGIpIGEgd29yZCBvciBvbmUgcGhyYXNlIChub3QgZXhjZWVkaW5nIDEwIHdvcmRzKTsgKGMpIG9uZSBncmFwaGljIGltYWdlIHByb3ZpZGVkIGJ5IHRoZSBPcmlnaW5hbCBEZXZlbG9wZXI7IGFuZCAoZCkgYSBVUkwgKGNvbGxlY3RpdmVseSwgdGhlICYjODIyMDtBdHRyaWJ1dGlvbiBMaW1pdHMmIzgyMjE7KS4KKyhjKSBJZiBFeGhpYml0IEIgZG9lcyBub3QgaW5jbHVkZSBhbnkgQXR0cmlidXRpb24gSW5mb3JtYXRpb24sIHRoZW4gdGhlcmUgYXJlIG5vIHJlcXVpcmVtZW50cyBmb3IgWW91IHRvIGRpc3BsYXkgYW55IEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIG9mIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIuCisoZCkgWW91IGFja25vd2xlZGdlIHRoYXQgYWxsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MgYW5kL29yIHRyYWRlIG5hbWVzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIGRpc3RyaWJ1dGVkIHdpdGggdGhlIENvdmVyZWQgQ29kZSBhcmUgdGhlIGV4Y2x1c2l2ZSBwcm9wZXJ0eSBvZiB0aGVpciBvd25lcnMgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGVpciBvd25lcnMsIG9yIHVuZGVyIGNpcmN1bXN0YW5jZXMgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBsYXcgb3IgYXMgZXhwcmVzc2x5IHNldCBvdXQgaW4gdGhpcyBMaWNlbnNlLgorMTUuIEFERElUSU9OQUwgVEVSTTogTkVUV09SSyBVU0UuCitUaGUgdGVybSAmIzgyMjA7RXh0ZXJuYWwgRGVwbG95bWVudCYjODIyMTsgbWVhbnMgdGhlIHVzZSwgZGlzdHJpYnV0aW9uLCBvciBjb21tdW5pY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgaW4gYW55IHdheSBzdWNoIHRoYXQgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBtYXkgYmUgdXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhvc2Ugd29ya3MgYXJlIGRpc3RyaWJ1dGVkIG9yIGNvbW11bmljYXRlZCB0byB0aG9zZSBwZXJzb25zIG9yIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIG5ldHdvcmsuIEFzIGFuIGV4cHJlc3MgY29uZGl0aW9uIGZvciB0aGUgZ3JhbnRzIG9mIGxpY2Vuc2UgaGVyZXVuZGVyLCBZb3UgbXVzdCB0cmVhdCBhbnkgRXh0ZXJuYWwgRGVwbG95bWVudCBieSBZb3Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBhcyBhIGRpc3RyaWJ1dGlvbiB1bmRlciBzZWN0aW9uIDMuMSBhbmQgbWFrZSBTb3VyY2UgQ29kZSBhdmFpbGFibGUgdW5kZXIgU2VjdGlvbiAzLjIuCisKKyBFWEhJQklUIEEuIENvbW1vbiBQdWJsaWMgQXR0cmlidXRpb24gTGljZW5zZSBWZXJzaW9uIDEuMC4KKyYjODIyMDtUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBDb21tb24gUHVibGljIEF0dHJpYnV0aW9uIExpY2Vuc2UgVmVyc2lvbiAxLjAgKHRoZSAmIzgyMjA7TGljZW5zZSYjODIyMTspOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBfX19fX19fX19fX19fLiBUaGUgTGljZW5zZSBpcyBiYXNlZCBvbiB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSBidXQgU2VjdGlvbnMgMTQgYW5kIDE1IGhhdmUgYmVlbiBhZGRlZCB0byBjb3ZlciB1c2Ugb2Ygc29mdHdhcmUgb3ZlciBhIGNvbXB1dGVyIG5ldHdvcmsgYW5kIHByb3ZpZGUgZm9yIGxpbWl0ZWQgYXR0cmlidXRpb24gZm9yIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIuIEluIGFkZGl0aW9uLCBFeGhpYml0IEEgaGFzIGJlZW4gbW9kaWZpZWQgdG8gYmUgY29uc2lzdGVudCB3aXRoIEV4aGliaXQgQi4KK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICYjODIyMDtBUyBJUyYjODIyMTsgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorVGhlIE9yaWdpbmFsIENvZGUgaXNfX19fX19fX19fX19fX19fX19fX19fLgorVGhlIE9yaWdpbmFsIERldmVsb3BlciBpcyBub3QgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpcyBfX19fX19fX19fLiBJZiBsZWZ0IGJsYW5rLCB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIGlzIHRoZSBJbml0aWFsIERldmVsb3Blci4KK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX18uIEFsbCBwb3J0aW9ucyBvZiB0aGUgY29kZSB3cml0dGVuIGJ5IF9fX19fX19fX19fIGFyZSBDb3B5cmlnaHQgKGMpIF9fX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorQ29udHJpYnV0b3IgX19fX19fX19fX19fX19fX19fX19fXy4KK0FsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBfX19fXyBsaWNlbnNlICh0aGUgW19fX10gTGljZW5zZSksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgW19fX19fX10gTGljZW5zZSBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLgorSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFtfX19fXSBMaWNlbnNlIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBDUEFMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBbX19fXSBMaWNlbnNlLiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGVpdGhlciB0aGUgQ1BBTCBvciB0aGUgW19fX10gTGljZW5zZS4mIzgyMjE7CitbTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mIHRoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IHNob3VsZCB1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCisKKyBFWEhJQklUIEIuIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uCitBdHRyaWJ1dGlvbiBDb3B5cmlnaHQgTm90aWNlOiBfX19fX19fX19fX19fX19fX19fX19fXworQXR0cmlidXRpb24gUGhyYXNlIChub3QgZXhjZWVkaW5nIDEwIHdvcmRzKTogX19fX19fX19fX19fX19fX19fX19fX18KK0F0dHJpYnV0aW9uIFVSTDogX19fX19fX19fX19fX19fX19fX19fX18KK0dyYXBoaWMgSW1hZ2UgYXMgcHJvdmlkZWQgaW4gdGhlIENvdmVyZWQgQ29kZSwgaWYgYW55LgorRGlzcGxheSBvZiBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBpcyBbcmVxdWlyZWQvbm90IHJlcXVpcmVkXSBpbiBMYXJnZXIgV29ya3Mgd2hpY2ggYXJlIGRlZmluZWQgaW4gdGhlIENQQUwgYXMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoZSBDUEFMLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NQTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NQTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE3YzIwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ1BMLTEuMApAQCAtMCwwICsxLDIxNSBAQAorCitDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKworVEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENPTU1PTiBQVUJMSUMKK0xJQ0VOU0UgKCJBR1JFRU1FTlQiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTQorQ09OU1RJVFVURVMgUkVDSVBJRU5UYFMgQUNDRVBUQU5DRSBPRiBUSElTIEFHUkVFTUVOVC4KKworMS4gREVGSU5JVElPTlMKKworIkNvbnRyaWJ1dGlvbiIgbWVhbnM6CisKK2EpIGluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZAorZG9jdW1lbnRhdGlvbiBkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kCisKK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjoKKworaSkgY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kCisKK2lpKSBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07CisKK3doZXJlIHN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUKK2Rpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gYG9yaWdpbmF0ZXNgIGZyb20gYQorQ29udHJpYnV0b3IgaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZQorYWN0aW5nIG9uIHN1Y2ggQ29udHJpYnV0b3JgcyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvCit0aGUgUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluCitjb25qdW5jdGlvbiB3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdAorZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgUHJvZ3JhbS4KKworIkNvbnRyaWJ1dG9yIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLgorCisiTGljZW5zZWQgUGF0ZW50cyAiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlCituZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbgorY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KKworIlByb2dyYW0iIG1lYW5zIHRoZSBDb250cmlidXRpb25zIGRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC4KKworIlJlY2lwaWVudCIgbWVhbnMgYW55b25lIHdobyByZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwKK2luY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLgorCisyLiBHUkFOVCBPRiBSSUdIVFMKKworYSkgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG8KK3JlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLAorZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2gKK2Rlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLgorCitiKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZAorUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZQorQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uCitUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUKK1Byb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoCithZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkgdGhlCitMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMKK3doaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4KKworYykgUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzCit0byBpdHMgQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkKK0NvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvCitSZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUKK3JpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUKK3Jlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4KK0ZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0bworZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50YHMgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UKK2JlZm9yZSBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uCisKK2QpIEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQKK2NvcHlyaWdodCByaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0Citmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KKworMy4gUkVRVUlSRU1FTlRTCisKK0EgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzCitvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6CisKK2EpIGl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQKKworYikgaXRzIGxpY2Vuc2UgYWdyZWVtZW50OgorCitpKSBlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlIGFuZAorbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQKK2ZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOworCitpaSkgZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IKK2RhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsCitkYW1hZ2VzLCBzdWNoIGFzIGxvc3QgcHJvZml0czsKKworaWlpKSBzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZAorYnkgdGhhdCBDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kCisKK2l2KSBzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaAorQ29udHJpYnV0b3IsIGFuZCBpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IKK3Rocm91Z2ggYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuCisKK1doZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlIGNvZGUgZm9ybToKKworYSkgaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kCisKK2IpIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLgorCitDb250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55IGNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlCitQcm9ncmFtLgorCitFYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmCithbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZQorb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLgorCis0LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTgorCitDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoCityZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMKK2ludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvCitpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIKK3doaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYKK2EgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2gKK0NvbnRyaWJ1dG9yICgiQ29tbWVyY2lhbCBDb250cmlidXRvciIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkKK2V2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yICgiSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IiKSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMKK2FuZCBjb3N0cyAoY29sbGVjdGl2ZWx5ICJMb3NzZXMiKSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwKK2FjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvIHRoZQorZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdG8KK2NvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueQorcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbgorYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLgorCitGb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0CitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UgY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcworcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcyBhcmUgc3VjaAorQ29tbWVyY2lhbCBDb250cmlidXRvcmBzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzIHNlY3Rpb24sIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUgb3RoZXIKK0NvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEgY291cnQKK3JlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLgorCis1LiBOTyBXQVJSQU5UWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUgorSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaAorUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZgorcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YKK3Byb2dyYW0gZXJyb3JzLCBjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLAorcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKzYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZCitDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QKK1BST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCitTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTCitHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIEdFTkVSQUwKKworSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZQorbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZQordGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaAorcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoCitwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCitJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGEgQ29udHJpYnV0b3Igd2l0aCByZXNwZWN0IHRvCithIHBhdGVudCBhcHBsaWNhYmxlIHRvIHNvZnR3YXJlIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYQorbGF3c3VpdCksIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgdG8gc3VjaCBSZWNpcGllbnQKK3VuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIEluCithZGRpdGlvbiwgaWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5CisoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbQoraXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpCitpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnRgcyBwYXRlbnQocyksIHRoZW4gc3VjaCBSZWNpcGllbnRgcyByaWdodHMgZ3JhbnRlZCB1bmRlcgorU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKK0FsbCBSZWNpcGllbnRgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvCitjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMKK25vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2YKK3N1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudGBzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsCitSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMKK3JlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsIFJlY2lwaWVudGBzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50CithbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkgUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZAorc3Vydml2ZS4KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4KK29yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcyBjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUKK21vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50IFN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvCitwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuCitObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuCitJQk0gaXMgdGhlIGluaXRpYWwgQWdyZWVtZW50IFN0ZXdhcmQuIElCTSBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0byBzZXJ2ZQorYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uIG9mIHRoZQorQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0gKGluY2x1ZGluZworQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQKK3VuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudAoraXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cworQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucworMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0byB0aGUKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC4KKworVGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMKK0FncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhcgorYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMgaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4KK2FueSByZXN1bHRpbmcgbGl0aWdhdGlvbi4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DVUEtT1BMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ1VBLU9QTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmNTllYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ1VBLU9QTC0xLjAKQEAgLTAsMCArMSw0NzEgQEAKKworQ1VBIE9mZmljZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorKHBsYWluIHRleHQpCisxLiBEZWZpbml0aW9ucy4KKworMS4wLjEuICJDb21tZXJjaWFsIFVzZSIgbWVhbnMgZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcgdGhlCitDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuCisKKzEuMS4gIkNvbnRyaWJ1dG9yIiBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8KK3RoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjIuICJDb250cmlidXRvciBWZXJzaW9uIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsCitDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zCittYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworMS4zLiAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZQorY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZQoraW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNC4gIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5CithY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYwordHJhbnNmZXIgb2YgZGF0YS4KKworMS41LiAiRXhlY3V0YWJsZSIgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlCitDb2RlLgorCisxLjYuICJJbml0aWFsIERldmVsb3BlciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQKK2FzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQKK0EuCisKKzEuNy4gIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yCitwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS44LiAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS44LjEuICJMaWNlbnNhYmxlIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bQorZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yCitzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorCisxLjkuICJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUKK3N1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cworTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEKK01vZGlmaWNhdGlvbiBpczoKKworQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZQorY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yCitwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZQord2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzCitPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMC4xLiAiUGF0ZW50IENsYWltcyIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yCitoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywKK2FuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKworMS4xMS4gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMKK2FueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbAorY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZQorZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIKK3dlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMgY2hvaWNlLiBUaGUKK1NvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlCithcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlCitmb3Igbm8gY2hhcmdlLgorCisxLjEyLiAiWW91IiAob3IgIllvdXIiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5CitleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMKK0xpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLgorRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcworY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZgordGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LAordG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5Citjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaAorZW50aXR5LgorCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKK25vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK2NsYWltczoKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yCit0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsCittb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsCitDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yCithcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgUGF0ZW50cyBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yCitzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwKK3NlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZQorT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlCitlZmZlY3RpdmUgb24gdGhlIGRhdGUgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMKK09yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMKK2dyYW50ZWQ6IDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKQorc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkCitieTogaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBpaSkgdGhlCitjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IKK2hlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yCit0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksCitkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zCitjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbgordW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUKK2FuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yCitzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZQorYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zCitvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZQorbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mCitNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvcgorVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUKK2VmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZgordGhlIENvdmVyZWQgQ29kZS4KKworKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMihiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMKK2dyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlCitDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOworMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mCitDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlCitieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZQorQ29udHJpYnV0b3IgVmVyc2lvbikgb3Igb3RoZXIgZGV2aWNlczsgb3IgNCkgdW5kZXIgUGF0ZW50IENsYWltcworaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkKK3RoYXQgQ29udHJpYnV0b3IuCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUKK2dvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KK1NlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlCitkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbgorb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhCitjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdQorZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUKK3ZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcworTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlCithbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4KK1NlY3Rpb24gMy41LgorCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlCittYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKK2VpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkCitFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4KK0V4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYworRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKQorbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXgKKyg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbgoraGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvcgorZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZQorRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEKK2ZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZAordGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdAordGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsCitDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuCitFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUKK29yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5YHMKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cworZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsCitDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUKK2Rpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUKK3BhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsCitrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlcgordGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsCitDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcworQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMKKyhzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpCityZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZAorQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisKKyhiKSBDb250cmlidXRvciBBUElzLgorCitJZiBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZworaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaAorYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdAorYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisKKyhjKSBSZXByZXNlbnRhdGlvbnMuCisKK0NvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0bworU2VjdGlvbiAzLjQoYSkgYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3JgcworTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3JgcyBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IKK0NvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5Cit0aGlzIExpY2Vuc2UuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4KK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZQorQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlCitDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhCitsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseQordG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpCitZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbgorRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24KK2ZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyBvciBvd25lcnNoaXAKK3JpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8KK2NoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5CitvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91CittYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsCitEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbgorYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcworb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksCitzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlCityZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLAorYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZgordGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKK2luY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZQorb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkCitpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yCitjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gdGhlCitDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQKK0NvZGUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heQorY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbgorY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZQorRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzCityaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzCitMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50CitsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIKK2Zyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieQordGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2gKK3Rlcm1zIFlvdSBvZmZlci4KKworMy43LiBMYXJnZXIgV29ya3MuCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlCitub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyCitXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlCityZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8KK3N0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aAordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikKK2Rlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24KK211c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0CitiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZQorZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUKK3N1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0bwordW5kZXJzdGFuZCBpdC4KKworNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMKK2F0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKzYuMS4gTmV3IFZlcnNpb25zLgorQ1VBIE9mZmljZSBQcm9qZWN0IG1heSBwdWJsaXNoIHJldmlzZWQKK2FuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbgord2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlCitMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQKK3ZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcworb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgQ1VBIE9mZmljZSBQcm9qZWN0LiBObyBvbmUKK290aGVyIHRoYW4gQ1VBIE9mZmljZSBQcm9qZWN0IGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvCitDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4KK0lmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkKK29ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUKK2dvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIFlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQKK3RoZSBwaHJhc2VzICJDVUEgT2ZmaWNlIiwgIkNVQSIsICJDVUFQTCIsIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGluIHlvdXIKK2xpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpCithbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlCitjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgQ1VBIE9mZmljZSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwKK0RldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbgorRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mCit0aGlzIExpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRgorREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLgorVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFCitJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULAorWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRQorQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUgorT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YKK0FOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04uCisKKzguMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlCithdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlCitzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwKK3N1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwKK3N1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIKK25hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlCitzaGFsbCBzdXJ2aXZlLgorCis4LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQKK2NsYWltIChleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIKK29yIGEgQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20KK1lvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICJQYXJ0aWNpcGFudCIpIGFsbGVnaW5nIHRoYXQ6CisKKyhhKSBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5CitpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoCitQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlCitzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LAordW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKQorYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZQorcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoCitQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvCit0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuIElmIHdpdGhpbiA2MCBkYXlzCitvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QKK211dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0KK2lzIG5vdCB3aXRoZHJhd24sIHRoZSByaWdodHMgZ3JhbnRlZCBieSBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIKK1NlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mCit0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorCisoYikgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlLCBvdGhlciB0aGFuIHN1Y2ggUGFydGljaXBhbnRgcworQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbgorYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKQorYW5kIDIuMihiKSBhcmUgcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsCitzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0CitQYXJ0aWNpcGFudC4KKworOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50CithbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yCitpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMKK2J5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMKK2dyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuCitpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvcgorbGljZW5zZS4KKworOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwKK2FsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykKK3doaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIKK3ByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTAorREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsCitPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SCitBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkKK0NIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwKK1dPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSCitDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOCitJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YKK0xJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkKK1JFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcKK1BST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFCitFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08KK1RISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KKworVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbgorNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICJjb21tZXJjaWFsIGNvbXB1dGVyCitzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sIiBhcyBzdWNoCit0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4CitDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksCithbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UKK3JpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMS4gTUlTQ0VMTEFORU9VUy4KKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QKK21hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUKK3VuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudAorbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieQorQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmCithbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuCitXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwKK29yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiB0aGUgVW5pdGVkCitTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlCitzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybgorRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksCitDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzYCBmZWVzIGFuZAorZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbgorQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KK0FueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0CitzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcworTGljZW5zZS4KKworMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCisKK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMKK3Jlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwKK291dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvCit3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2gKK3Jlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3IKK3NoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisxMy4gTVVMVElQTEUtTElDRU5TRUQgQ09ERS4KKworSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzCisiTXVsdGlwbGUtTGljZW5zZWQiLiAiTXVsdGlwbGUtTGljZW5zZWQiIG1lYW5zIHRoYXQgdGhlIEluaXRpYWwKK0RldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIKK1lvdXIgY2hvaWNlIG9mIHRoZSBOUEwgb3IgdGhlIGFsdGVybmF0aXZlIGxpY2Vuc2VzLCBpZiBhbnksIHNwZWNpZmllZAorYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBmaWxlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuCisKK0VYSElCSVQgQSAtIENVQSBPZmZpY2UgUHVibGljIExpY2Vuc2UuCisKK2BgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgQ1VBIE9mZmljZSBQdWJsaWMgTGljZW5zZQorVmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK2h0dHA6Ly9jdWFvZmZpY2Uuc291cmNlZm9yZ2UubmV0LworCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCitiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX18uCitQb3J0aW9ucyBjcmVhdGVkIGJ5IF9fX19fX19fX19fX19fX19fX19fX18gYXJlIENvcHlyaWdodCAoQykgX19fX19fCitfX19fX19fX19fX19fX19fX19fX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCitBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSAiW19fX10gTGljZW5zZSIpLCBpbiB3aGljaCBjYXNlIHRoZQorcHJvdmlzaW9ucyBvZiBbX19fX19fXSBMaWNlbnNlIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UKK2Fib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIFtfX19fXSBMaWNlbnNlIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQoreW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgQ1VBUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKK2RlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgW19fX10gTGljZW5zZS4gSWYgeW91IGRvIG5vdCBkZWxldGUKK3RoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKK3VuZGVyIGVpdGhlciB0aGUgQ1VBUEwgb3IgdGhlIFtfX19dIExpY2Vuc2UuIgorCitbTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mCit0aGUgbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUuIFlvdSBzaG91bGQKK3VzZSB0aGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUKK09yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ2xBcnRpc3RpYyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ2xBcnRpc3RpYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDVhNGFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DbEFydGlzdGljCkBAIC0wLDAgKzEsMTM4IEBACisKKyAgICAgICBUaGUgQ2xhcmlmaWVkIEFydGlzdGljIExpY2Vuc2UKKworICAgIFByZWFtYmxlCisKK1RoZSBpbnRlbnQgb2YgdGhpcyBkb2N1bWVudCBpcyB0byBzdGF0ZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBhCitQYWNrYWdlIG1heSBiZSBjb3BpZWQsIHN1Y2ggdGhhdCB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYWludGFpbnMgc29tZQorc2VtYmxhbmNlIG9mIGFydGlzdGljIGNvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIHBhY2thZ2UsCit3aGlsZSBnaXZpbmcgdGhlIHVzZXJzIG9mIHRoZSBwYWNrYWdlIHRoZSByaWdodCB0byB1c2UgYW5kIGRpc3RyaWJ1dGUKK3RoZSBQYWNrYWdlIGluIGEgbW9yZS1vci1sZXNzIGN1c3RvbWFyeSBmYXNoaW9uLCBwbHVzIHRoZSByaWdodCB0byBtYWtlCityZWFzb25hYmxlIG1vZGlmaWNhdGlvbnMuCisKK0RlZmluaXRpb25zOgorCisgIlBhY2thZ2UiIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBmaWxlcyBkaXN0cmlidXRlZCBieSB0aGUKKyBDb3B5cmlnaHQgSG9sZGVyLCBhbmQgZGVyaXZhdGl2ZXMgb2YgdGhhdCBjb2xsZWN0aW9uIG9mIGZpbGVzCisgY3JlYXRlZCB0aHJvdWdoIHRleHR1YWwgbW9kaWZpY2F0aW9uLgorCisgIlN0YW5kYXJkIFZlcnNpb24iIHJlZmVycyB0byBzdWNoIGEgUGFja2FnZSBpZiBpdCBoYXMgbm90IGJlZW4KKyBtb2RpZmllZCwgb3IgaGFzIGJlZW4gbW9kaWZpZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB3aXNoZXMKKyBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBhcyBzcGVjaWZpZWQgYmVsb3cuCisKKyAiQ29weXJpZ2h0IEhvbGRlciIgaXMgd2hvZXZlciBpcyBuYW1lZCBpbiB0aGUgY29weXJpZ2h0IG9yCisgY29weXJpZ2h0cyBmb3IgdGhlIHBhY2thZ2UuCisKKyAiWW91IiBpcyB5b3UsIGlmIHlvdWByZSB0aGlua2luZyBhYm91dCBjb3B5aW5nIG9yIGRpc3RyaWJ1dGluZworIHRoaXMgUGFja2FnZS4KKworICJEaXN0cmlidXRpb24gZmVlIiBpcyBhIGZlZSB5b3UgY2hhcmdlIGZvciBwcm92aWRpbmcgYSBjb3B5CisgICAgICAgIG9mIHRoaXMgUGFja2FnZSB0byBhbm90aGVyIHBhcnR5LgorCisgIkZyZWVseSBBdmFpbGFibGUiIG1lYW5zIHRoYXQgbm8gZmVlIGlzIGNoYXJnZWQgZm9yIHRoZSByaWdodCB0bworICAgICAgICB1c2UgdGhlIGl0ZW0sIHRob3VnaCB0aGVyZSBtYXkgYmUgZmVlcyBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUKKyAgICAgICAgaXRlbS4gIEl0IGFsc28gbWVhbnMgdGhhdCByZWNpcGllbnRzIG9mIHRoZSBpdGVtIG1heSByZWRpc3RyaWJ1dGUKKyAgICAgICAgaXQgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyB0aGV5IHJlY2VpdmVkIGl0LgorCisxLiBZb3UgbWF5IG1ha2UgYW5kIGdpdmUgYXdheSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIHNvdXJjZSBmb3JtIG9mIHRoZQorU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzIFBhY2thZ2Ugd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UKK2R1cGxpY2F0ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLgorCisyLiBZb3UgbWF5IGFwcGx5IGJ1ZyBmaXhlcywgcG9ydGFiaWxpdHkgZml4ZXMgYW5kIG90aGVyIG1vZGlmaWNhdGlvbnMKK2Rlcml2ZWQgZnJvbSB0aGUgUHVibGljIERvbWFpbiwgb3IgdGhvc2UgbWFkZSBGcmVlbHkgQXZhaWxhYmxlLCBvciBmcm9tCit0aGUgQ29weXJpZ2h0IEhvbGRlci4gIEEgUGFja2FnZSBtb2RpZmllZCBpbiBzdWNoIGEgd2F5IHNoYWxsIHN0aWxsIGJlCitjb25zaWRlcmVkIHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCiszLiBZb3UgbWF5IG90aGVyd2lzZSBtb2RpZnkgeW91ciBjb3B5IG9mIHRoaXMgUGFja2FnZSBpbiBhbnkgd2F5LCBwcm92aWRlZAordGhhdCB5b3UgaW5zZXJ0IGEgcHJvbWluZW50IG5vdGljZSBpbiBlYWNoIGNoYW5nZWQgZmlsZSBzdGF0aW5nIGhvdyBhbmQKK3doZW4geW91IGNoYW5nZWQgdGhhdCBmaWxlLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZQorZm9sbG93aW5nOgorCisgICAgYSkgcGxhY2UgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBQdWJsaWMgRG9tYWluIG9yIG90aGVyd2lzZSBtYWtlIHRoZW0KKyAgICBGcmVlbHkgQXZhaWxhYmxlLCBzdWNoIGFzIGJ5IHBvc3Rpbmcgc2FpZCBtb2RpZmljYXRpb25zIHRvIFVzZW5ldCBvciBhbgorICAgIGVxdWl2YWxlbnQgbWVkaXVtLCBvciBwbGFjaW5nIHRoZSBtb2RpZmljYXRpb25zIG9uIGEgbWFqb3IgbmV0d29yaworICAgIGFyY2hpdmUgc2l0ZSBhbGxvd2luZyB1bnJlc3RyaWN0ZWQgYWNjZXNzIHRvIHRoZW0sIG9yIGJ5IGFsbG93aW5nIHRoZQorICAgIENvcHlyaWdodCBIb2xkZXIgdG8gaW5jbHVkZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFN0YW5kYXJkIFZlcnNpb24KKyAgICBvZiB0aGUgUGFja2FnZS4KKworICAgIGIpIHVzZSB0aGUgbW9kaWZpZWQgUGFja2FnZSBvbmx5IHdpdGhpbiB5b3VyIGNvcnBvcmF0aW9uIG9yIG9yZ2FuaXphdGlvbi4KKworICAgIGMpIHJlbmFtZSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIHNvIHRoZSBuYW1lcyBkbyBub3QgY29uZmxpY3QKKyAgICB3aXRoIHN0YW5kYXJkIGV4ZWN1dGFibGVzLCB3aGljaCBtdXN0IGFsc28gYmUgcHJvdmlkZWQsIGFuZCBwcm92aWRlCisgICAgYSBzZXBhcmF0ZSBtYW51YWwgcGFnZSBmb3IgZWFjaCBub24tc3RhbmRhcmQgZXhlY3V0YWJsZSB0aGF0IGNsZWFybHkKKyAgICBkb2N1bWVudHMgaG93IGl0IGRpZmZlcnMgZnJvbSB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCisgICAgZSkgcGVybWl0IGFuZCBlbmNvdXJnZSBhbnlvbmUgd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgbW9kaWZpZWQgUGFja2FnZQorICAgICAgIHBlcm1pc3Npb24gdG8gbWFrZSB5b3VyIG1vZGlmaWNhdGlvbnMgRnJlZWx5IEF2YWlsYWJsZQorICAgICAgIGluIHNvbWUgc3BlY2lmaWMgd2F5LgorCisKKzQuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGluIG9iamVjdCBjb2RlIG9yCitleGVjdXRhYmxlIGZvcm0sIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgZGlzdHJpYnV0ZSBhIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJ5IGZpbGVzLAorICAgIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIChpbiB0aGUgbWFudWFsIHBhZ2Ugb3IgZXF1aXZhbGVudCkgb24gd2hlcmUKKyAgICB0byBnZXQgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKyAgICBiKSBhY2NvbXBhbnkgdGhlIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBvZgorICAgIHRoZSBQYWNrYWdlIHdpdGggeW91ciBtb2RpZmljYXRpb25zLgorCisgICAgYykgZ2l2ZSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgbm9uLXN0YW5kYXJkIG5hbWVzLCBhbmQgY2xlYXJseQorICAgIGRvY3VtZW50IHRoZSBkaWZmZXJlbmNlcyBpbiBtYW51YWwgcGFnZXMgKG9yIGVxdWl2YWxlbnQpLCB0b2dldGhlcgorICAgIHdpdGggaW5zdHJ1Y3Rpb25zIG9uIHdoZXJlIHRvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCisgICAgZSkgb2ZmZXIgdGhlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIG9mIHRoZSBQYWNrYWdlLCB3aXRoIHlvdXIKKyAgICAgICBtb2RpZmljYXRpb25zLCBieSBtYWlsIG9yZGVyLgorCis1LiBZb3UgbWF5IGNoYXJnZSBhIGRpc3RyaWJ1dGlvbiBmZWUgZm9yIGFueSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlLgorSWYgeW91IG9mZmVyIHN1cHBvcnQgZm9yIHRoaXMgUGFja2FnZSwgeW91IG1heSBjaGFyZ2UgYW55IGZlZSB5b3UgY2hvb3NlCitmb3IgdGhhdCBzdXBwb3J0LiAgWW91IG1heSBub3QgY2hhcmdlIGEgbGljZW5zZSBmZWUgZm9yIHRoZSByaWdodCB0byB1c2UKK3RoaXMgUGFja2FnZSBpdHNlbGYuICBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhpcyBQYWNrYWdlIGluIGFnZ3JlZ2F0ZSB3aXRoCitvdGhlciAocG9zc2libHkgY29tbWVyY2lhbCBhbmQgcG9zc2libHkgbm9uZnJlZSkgcHJvZ3JhbXMgYXMgcGFydCBvZiBhCitsYXJnZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwgYW5kIHBvc3NpYmx5IG5vbmZyZWUpIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiwKK2FuZCBjaGFyZ2UgbGljZW5zZSBmZWVzIGZvciBvdGhlciBwYXJ0cyBvZiB0aGF0IHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiwKK3Byb3ZpZGVkIHRoYXQgeW91IGRvIG5vdCBhZHZlcnRpc2UgdGhpcyBQYWNrYWdlIGFzIGEgcHJvZHVjdCBvZiB5b3VyIG93bi4KK0lmIHRoZSBQYWNrYWdlIGluY2x1ZGVzIGFuIGludGVycHJldGVyLCBZb3UgbWF5IGVtYmVkIHRoaXMgUGFja2FnZWBzCitpbnRlcnByZXRlciB3aXRoaW4gYW4gZXhlY3V0YWJsZSBvZiB5b3VycyAoYnkgbGlua2luZyk7IHRoaXMgc2hhbGwgYmUKK2NvbnN0cnVlZCBhcyBhIG1lcmUgZm9ybSBvZiBhZ2dyZWdhdGlvbiwgcHJvdmlkZWQgdGhhdCB0aGUgY29tcGxldGUKK1N0YW5kYXJkIFZlcnNpb24gb2YgdGhlIGludGVycHJldGVyIGlzIHNvIGVtYmVkZGVkLgorCis2LiBUaGUgc2NyaXB0cyBhbmQgbGlicmFyeSBmaWxlcyBzdXBwbGllZCBhcyBpbnB1dCB0byBvciBwcm9kdWNlZCBhcworb3V0cHV0IGZyb20gdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBkbyBub3QgYXV0b21hdGljYWxseSBmYWxsCit1bmRlciB0aGUgY29weXJpZ2h0IG9mIHRoaXMgUGFja2FnZSwgYnV0IGJlbG9uZyB0byB3aG9ldmVyIGdlbmVyYXRlZAordGhlbSwgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkIHdpdGggdGhpcworUGFja2FnZS4gIElmIHN1Y2ggc2NyaXB0cyBvciBsaWJyYXJ5IGZpbGVzIGFyZSBhZ2dyZWdhdGVkIHdpdGggdGhpcworUGFja2FnZSB2aWEgdGhlIHNvLWNhbGxlZCAidW5kdW1wIiBvciAidW5leGVjIiBtZXRob2RzIG9mIHByb2R1Y2luZyBhCitiaW5hcnkgZXhlY3V0YWJsZSBpbWFnZSwgdGhlbiBkaXN0cmlidXRpb24gb2Ygc3VjaCBhbiBpbWFnZSBzaGFsbAorbmVpdGhlciBiZSBjb25zdHJ1ZWQgYXMgYSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlIG5vciBzaGFsbCBpdAorZmFsbCB1bmRlciB0aGUgcmVzdHJpY3Rpb25zIG9mIFBhcmFncmFwaHMgMyBhbmQgNCwgcHJvdmlkZWQgdGhhdCB5b3UgZG8KK25vdCByZXByZXNlbnQgc3VjaCBhbiBleGVjdXRhYmxlIGltYWdlIGFzIGEgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzCitQYWNrYWdlLgorCis3LiBDIHN1YnJvdXRpbmVzIChvciBjb21wYXJhYmx5IGNvbXBpbGVkIHN1YnJvdXRpbmVzIGluIG90aGVyCitsYW5ndWFnZXMpIHN1cHBsaWVkIGJ5IHlvdSBhbmQgbGlua2VkIGludG8gdGhpcyBQYWNrYWdlIGluIG9yZGVyIHRvCitlbXVsYXRlIHN1YnJvdXRpbmVzIGFuZCB2YXJpYWJsZXMgb2YgdGhlIGxhbmd1YWdlIGRlZmluZWQgYnkgdGhpcworUGFja2FnZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoaXMgUGFja2FnZSwgYnV0IGFyZSB0aGUKK2VxdWl2YWxlbnQgb2YgaW5wdXQgYXMgaW4gUGFyYWdyYXBoIDYsIHByb3ZpZGVkIHRoZXNlIHN1YnJvdXRpbmVzIGRvCitub3QgY2hhbmdlIHRoZSBsYW5ndWFnZSBpbiBhbnkgd2F5IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gZmFpbCB0aGUKK3JlZ3Jlc3Npb24gdGVzdHMgZm9yIHRoZSBsYW5ndWFnZS4KKworOC4gQWdncmVnYXRpb24gb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIFBhY2thZ2Ugd2l0aCBhIGNvbW1lcmNpYWwKK2Rpc3RyaWJ1dGlvbiBpcyBhbHdheXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIHVzZSBvZiB0aGlzIFBhY2thZ2UKK2lzIGVtYmVkZGVkOyB0aGF0IGlzLCB3aGVuIG5vIG92ZXJ0IGF0dGVtcHQgaXMgbWFkZSB0byBtYWtlIHRoaXMgUGFja2FnZWBzCitpbnRlcmZhY2VzIHZpc2libGUgdG8gdGhlIGVuZCB1c2VyIG9mIHRoZSBjb21tZXJjaWFsIGRpc3RyaWJ1dGlvbi4KK1N1Y2ggdXNlIHNoYWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgYSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlLgorCis5LiBUaGUgbmFtZSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCitwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworMTAuIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisgICAgVGhlIEVuZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0RTU1NMIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9EU1NTTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTU5ZGZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9EU1NTTApAQCAtMCwwICsxLDQ5IEBACitDb3B5cmlnaHQKKy0tLS0tLS0tLQorCitDb3B5cmlnaHQgKEMpIDE5OTctMjAwMSBOb3JtYW4gV2Fsc2gKKworVGhlIG9yaWdpbmFsIGluc3BpcmF0aW9uIGZvciB0aGVzZSBzdHlsZXNoZWV0cyBjYW1lIGZyb20gdGhlCit3b3JrIG9mIEpvbiBCb3NhaywgQW5kZXJzIEJlcmdsdW5kLCBUb255IEdyYWhhbSwgVGVycnkgQWxsZW4sCitKYW1lcyBDbGFyaywgYW5kIG1hbnkgb3RoZXJzLiAgSSBhbSBpbmRlYnRlZCB0byB0aGVtIGFuZCB0byB0aGUKK2NvbW11bml0eSBvZiB1c2VycyBvbiBkc3NzbGlzdEBtdWxiZXJyeXRlY2guY29tIGZvciBtYWtpbmcKK3N1YnN0YW50aWFsIGNvbnRyaWJ1dGlvbnMgdG8gdGhpcyB3b3JrIGFuZCBmb3IgYW5zd2VyaW5nIG15IG1hbnkKK3F1ZXN0aW9ucy4KKworVGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSmFkZToKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCitmaWxlcyAodGhlIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKK3Jlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCitzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKK2NvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCitpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWVzIG9mIGluZGl2aWR1YWxzCitjcmVkaXRlZCB3aXRoIGNvbnRyaWJ1dGlvbiB0byB0aGlzIHNvZnR3YXJlIHNoYWxsIG5vdCBiZSB1c2VkIGluCithZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyCitkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uCitmcm9tIHRoZSBpbmRpdmlkdWFscyBpbiBxdWVzdGlvbi4KKworQW55IHN0eWxlc2hlZXQgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgdGhhdCBpcyBwdWJsaWNhbGx5CitkaXN0cmlidXRlZCB3aWxsIGJlIGlkZW50aWZpZWQgd2l0aCBhIGRpZmZlcmVudCBuYW1lIGFuZCB0aGUKK3ZlcnNpb24gc3RyaW5ncyBpbiBhbnkgZGVyaXZlZCBTb2Z0d2FyZSB3aWxsIGJlIGNoYW5nZWQgc28gdGhhdAorbm8gcG9zc2liaWxpdHkgb2YgY29uZnVzaW9uIGJldHdlZW4gdGhlIGRlcml2ZWQgcGFja2FnZSBhbmQgdGhpcworU29mdHdhcmUgd2lsbCBleGlzdC4KKworV2FycmFudHkKKy0tLS0tLS0tCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgTk9STUFOIFdBTFNIIE9SIEFOWSBPVEhFUgorQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCitGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCitPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VDTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VDTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjOGJlMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUNMLTEuMApAQCAtMCwwICsxLDU1IEBACisKK1RoaXMgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgKHRoZSAiTGljZW5zZSIpIGFwcGxpZXMKK3RvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyCisodGhlICJMaWNlbnNvciIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nCit0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIE9yaWdpbmFsIFdvcms6CisKK0NvcHlyaWdodCAoYykgPHllYXI+IDxjb3B5cmlnaHQgaG9sZGVycz4KKworTGljZW5zZWQgdW5kZXIgdGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlIHZlcnNpb24gMS4wCisKK1RoaXMgT3JpZ2luYWwgV29yaywgaW5jbHVkaW5nIHNvZnR3YXJlLCBzb3VyY2UgY29kZSwgZG9jdW1lbnRzLAorb3Igb3RoZXIgcmVsYXRlZCBpdGVtcywgaXMgYmVpbmcgcHJvdmlkZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIocykKK3N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZS4gQnkKK29idGFpbmluZywgdXNpbmcgYW5kL29yIGNvcHlpbmcgdGhpcyBPcmlnaW5hbCBXb3JrLCB5b3UgYWdyZWUgdGhhdCB5b3UKK2hhdmUgcmVhZCwgdW5kZXJzdGFuZCwgYW5kIHdpbGwgY29tcGx5IHdpdGggdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgb2YgdGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlOgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgYW5kCitzdWJsaWNlbnNlIHRoaXMgT3JpZ2luYWwgV29yayBhbmQgaXRzIGRvY3VtZW50YXRpb24sIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBmb3IgYW55IHB1cnBvc2UsIGFuZCB3aXRob3V0IGZlZSBvciByb3lhbHR5IHRvIHRoZQorY29weXJpZ2h0IGhvbGRlcihzKSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSB0aGUKK2ZvbGxvd2luZyBvbiBBTEwgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIHBvcnRpb25zIHRoZXJlb2YsCitpbmNsdWRpbmcgbW9kaWZpY2F0aW9ucyBvciBkZXJpdmF0aXZlcywgdGhhdCB5b3UgbWFrZToKKworCitUaGUgZnVsbCB0ZXh0IG9mIHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSBpbiBhIGxvY2F0aW9uIHZpZXdhYmxlIHRvCit1c2VycyBvZiB0aGUgcmVkaXN0cmlidXRlZCBvciBkZXJpdmF0aXZlIHdvcmsuCisKKworQW55IHByZS1leGlzdGluZyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgZGlzY2xhaW1lcnMsIG5vdGljZXMsIG9yIHRlcm1zIGFuZAorY29uZGl0aW9ucy4KKworCisKK05vdGljZSBvZiBhbnkgY2hhbmdlcyBvciBtb2RpZmljYXRpb25zIHRvIHRoZSBPcmlnaW5hbCBXb3JrLCBpbmNsdWRpbmcgdGhlCitkYXRlIHRoZSBjaGFuZ2VzIHdlcmUgbWFkZS4KKworCitBbnkgbW9kaWZpY2F0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayBtdXN0IGJlIGRpc3RyaWJ1dGVkIGluIHN1Y2ggYSBtYW5uZXIgYXMKK3RvIGF2b2lkIGFueSBjb25mdXNpb24gd2l0aCB0aGUgT3JpZ2luYWwgV29yayBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKK1RPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCitTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworVGhlIG5hbWUgYW5kIHRyYWRlbWFya3Mgb2YgY29weXJpZ2h0IGhvbGRlcihzKSBtYXkgTk9UIGJlIHVzZWQKK2luIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIHRoZSBPcmlnaW5hbCBvciBEZXJpdmF0aXZlCitXb3JrcyB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIFRpdGxlIHRvIGNvcHlyaWdodCBpbgordGhlIE9yaWdpbmFsIFdvcmsgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBhdCBhbGwgdGltZXMKK3JlbWFpbiB3aXRoIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FQ0wtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FQ0wtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Yzk5ZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VDTC0yLjAKQEAgLTAsMCArMSw5OSBAQAorCitFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyhwbGFpbiB0ZXh0KQorRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UKKworVmVyc2lvbiAyLjAsIEFwcmlsIDIwMDcKKworaHR0cDovL3d3dy5vc2VkdS5vcmcvbGljZW5zZXMvCisKK1RoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSB2ZXJzaW9uIDIuMCAoIkVDTCIpIGNvbnNpc3RzIG9mIHRoZSBBcGFjaGUgMi4wIGxpY2Vuc2UsIG1vZGlmaWVkIHRvIGNoYW5nZSB0aGUgc2NvcGUgb2YgdGhlIHBhdGVudCBncmFudCBpbiBzZWN0aW9uIDMgdG8gYmUgc3BlY2lmaWMgdG8gdGhlIG5lZWRzIG9mIHRoZSBlZHVjYXRpb24gY29tbXVuaXRpZXMgdXNpbmcgdGhpcyBsaWNlbnNlLiBUaGUgb3JpZ2luYWwgQXBhY2hlIDIuMCBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1RFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisxLiBEZWZpbml0aW9ucy4KKworIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbCBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbiBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbCB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yayAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucyByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4gc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLCB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZyB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZiB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudCB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLCBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZSBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZCBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuCisKK1N1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZSBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCiszLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4KKworU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yayBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIEFueSBwYXRlbnQgbGljZW5zZSBncmFudGVkIGhlcmVieSB3aXRoIHJlc3BlY3QgdG8gY29udHJpYnV0aW9ucyBieSBhbiBpbmRpdmlkdWFsIGVtcGxveWVkIGJ5IGFuIGluc3RpdHV0aW9uIG9yIG9yZ2FuaXphdGlvbiBpcyBsaW1pdGVkIHRvIHBhdGVudCBjbGFpbXMgd2hlcmUgdGhlIGluZGl2aWR1YWwgdGhhdCBpcyB0aGUgYXV0aG9yIG9mIHRoZSBXb3JrIGlzIGFsc28gdGhlIGludmVudG9yIG9mIHRoZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2VkLCBhbmQgd2hlcmUgdGhlIG9yZ2FuaXphdGlvbiBvciBpbnN0aXR1dGlvbiBoYXMgdGhlIHJpZ2h0IHRvIGdyYW50IHN1Y2ggbGljZW5zZSB1bmRlciBhcHBsaWNhYmxlIGdyYW50IGFuZCByZXNlYXJjaCBmdW5kaW5nIGFncmVlbWVudHMuIE5vIG90aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCBsaWNlbnNlcyBhcmUgZ3JhbnRlZC4KKworNC4gUmVkaXN0cmlidXRpb24uCisKK1lvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91IG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCitZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCitZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdCBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLCB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cyBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZCB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvciBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKzUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4KKworVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5IHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworNi4gVHJhZGVtYXJrcy4KKworVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZSBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2ggQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KKworSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5IG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LgorCitXaGlsZSByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LCBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZiBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCitFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgdG8geW91ciB3b3JrCisKK1RvIGFwcGx5IHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaAordGhlIGZvbGxvd2luZyBib2lsZXJwbGF0ZSBub3RpY2UsIHdpdGggdGhlIGZpZWxkcyBlbmNsb3NlZCBieQorYnJhY2tldHMgIltdIiByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLgorKERvbmB0IGluY2x1ZGUgdGhlIGJyYWNrZXRzISkgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZQorYXBwcm9wcmlhdGUgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQKK3RoYXQgYSBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24KK3RoZSBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKK2lkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KKworIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXSBMaWNlbnNlZCB1bmRlciB0aGUKKyBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5Cisgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heQorIG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAKKyBodHRwOi8vd3d3Lm9zZWR1Lm9yZy9saWNlbnNlcy9FQ0wtMi4wCisKKyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3MKKyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRURMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRURMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2IxZWIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FREwtMS4wCkBAIC0wLDAgKzEsMTMgQEAKK0VjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgLSB2IDEuMAorCitDb3B5cmlnaHQgKGMpIDIwMDcsIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGxpY2Vuc29ycy4KKworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUZMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUZMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzk5NjA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FRkwtMS4wCkBAIC0wLDAgKzEsMjUgQEAKKworRWlmZmVsIEZvcnVtIExpY2Vuc2UsIHZlcnNpb24gMQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZC9vciBkaXN0cmlidXRlCit0aGlzIHBhY2thZ2UsIHByb3ZpZGVkIHRoYXQ6CisKKyAgLSBjb3B5cmlnaHQgbm90aWNlcyBhcmUgcmV0YWluZWQgdW5jaGFuZ2VkCisKKyAgLSBhbnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgcGFja2FnZSwgd2hldGhlciBtb2RpZmllZCBvciBub3QsCisgICAgaW5jbHVkZXMgdGhpcyBmaWxlCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGFsc28gZ3JhbnRlZCB0byBkaXN0cmlidXRlIGJpbmFyeSBwcm9ncmFtcyB3aGljaAorZGVwZW5kIG9uIHRoaXMgcGFja2FnZSwgcHJvdmlkZWQgdGhhdDoKKworICAtIGlmIHRoZSBiaW5hcnkgcHJvZ3JhbSBkZXBlbmRzIG9uIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzCisgICAgcGFja2FnZSwgeW91IG11c3QgcHVibGljbHkgcmVsZWFzZSB0aGUgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzCisgICAgcGFja2FnZQorCitUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWS4gQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBQQUNLQUdFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VGTC0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VGTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUzN2Y5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUZMLTIuMApAQCAtMCwwICsxLDEyIEBACisKK0VpZmZlbCBGb3J1bSBMaWNlbnNlLCB2ZXJzaW9uIDIKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHBhY2thZ2UsIHByb3ZpZGVkIHRoYXQ6Citjb3B5cmlnaHQgbm90aWNlcyBhcmUgcmV0YWluZWQgdW5jaGFuZ2VkLAorYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIHBhY2thZ2UsIHdoZXRoZXIgbW9kaWZpZWQgb3Igbm90LCBpbmNsdWRlcyB0aGlzIGxpY2Vuc2UgdGV4dC4KK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGFsc28gZ3JhbnRlZCB0byBkaXN0cmlidXRlIGJpbmFyeSBwcm9ncmFtcyB3aGljaCBkZXBlbmQgb24gdGhpcyBwYWNrYWdlLiBJZiB0aGUgYmluYXJ5IHByb2dyYW0gZGVwZW5kcyBvbiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLCB5b3UgYXJlIGVuY291cmFnZWQgdG8gcHVibGljbHkgcmVsZWFzZSB0aGUgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuCisqKioqKioqKioqKioqKioqKioqKioqKgorCitUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWS4gQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgUEFDS0FHRS4gCisqKioqKioqKioqKioqKioqKioqKioqKgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VQTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VQTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3NmU1NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVBMLTEuMApAQCAtMCwwICsxLDcyIEBACisKK0VjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMAorCitUSEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoIkFHUkVFTUVOVCIpLiBBTlkgVVNFLCBSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVGBTIEFDQ0VQVEFOQ0UgT0YgVEhJUyBBR1JFRU1FTlQuCisKKzEuIERFRklOSVRJT05TCisKKyJDb250cmlidXRpb24iIG1lYW5zOgorCithKSBpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kCitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6CitpKSBjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQKK2lpKSBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07Cit3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gYG9yaWdpbmF0ZXNgIGZyb20gYSBDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yYHMgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFByb2dyYW0uCisiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uCisKKyJMaWNlbnNlZCBQYXRlbnRzIiBtZWFuIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLgorCisiUHJvZ3JhbSIgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMgZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50LgorCisiUmVjaXBpZW50IiBtZWFucyBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy4KKworMi4gR1JBTlQgT0YgUklHSFRTCisKK2EpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLgorYikgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0IGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgorYykgUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cyBDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvciB0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudCBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50YHMgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS4KK2QpIEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0IHJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuCiszLiBSRVFVSVJFTUVOVFMKKworQSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0OgorCithKSBpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kCitiKSBpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6CitpKSBlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kIGNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUgYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOworaWkpIGVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzOworaWlpKSBzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQKK2l2KSBzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kIGluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLgorV2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZSBmb3JtOgorCithKSBpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQKK2IpIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLgorQ29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLgorCitFYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cyBzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4KKworNC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT04KKworQ29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5IGFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2Ugb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoIkNvbW1lcmNpYWwgQ29udHJpYnV0b3IiKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yICgiSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IiKSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kIGNvc3RzIChjb2xsZWN0aXZlbHkgIkxvc3NlcyIpIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0byB0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIGNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcyByZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIgdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlIGluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS4KKworRm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZSBjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcmBzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzIHNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZSBvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhIGNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuCisKKzUuIE5PIFdBUlJBTlRZCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBHRU5FUkFMCisKK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCitJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudGBzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudGBzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCitBbGwgUmVjaXBpZW50YHMgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnRgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwgUmVjaXBpZW50YHMgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5IFJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzIGNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudCBTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbCBBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0byBzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLgorCitUaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcyBpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVEYXRhZ3JpZCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVEYXRhZ3JpZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTZlNTA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FVURhdGFncmlkCkBAIC0wLDAgKzEsMjkgQEAKKworRVUgRGF0YUdyaWQgU29mdHdhcmUgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDIwMDEgRVUgRGF0YUdyaWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoaXMgc29mdHdhcmUgaW5jbHVkZXMgdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSB0byB0aGUgRVUgRGF0YUdyaWQuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBFVSBEYXRhR3JpZCwgcGxlYXNlIHNlZSBodHRwOi8vd3d3LmV1LWRhdGFncmlkLm9yZy8uCisKK0luc3RhbGxhdGlvbiwgdXNlLCByZXByb2R1Y3Rpb24sIGRpc3BsYXksIG1vZGlmaWNhdGlvbiBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBzb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIGFyZSBwZXJtaXR0ZWQuIEFueSBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBsaWNlbnNlIGJ5IHlvdSBvciB5b3VyIHN1Yi1saWNlbnNlZXMgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiB0aGlzIHNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFib3ZlIGxpY2Vuc2Ugc3RhdGVtZW50IGFzIHdlbGwgYXMgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGluIHRoZSBzb2Z0d2FyZSwgdGhlIHVzZXIgZG9jdW1lbnRhdGlvbiBhbmQgYW55IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBzb2Z0d2FyZS4KKworMi4gVGhlIHVzZXIgZG9jdW1lbnRhdGlvbiwgaWYgYW55LCBpbmNsdWRlZCB3aXRoIGEgcmVkaXN0cmlidXRpb24sIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIG5vdGljZToKKyJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBFVSBEYXRhR3JpZCAoaHR0cDovL3d3dy5ldS1kYXRhZ3JpZC5vcmcvKS4iCisKK0FsdGVybmF0aXZlbHksIGlmIHRoYXQgaXMgd2hlcmUgdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhciwgdGhpcyBhY2tub3dsZWRnbWVudCBtdXN0IGJlIHJlcHJvZHVjZWQgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZi4KKworMy4gVGhlIG5hbWVzICJFREciLCAiRURHIFRvb2xraXQiLCAmIzgyMjA7RVUgRGF0YUdyaWQmIzgyMjE7IGFuZCAiRVUgRGF0YUdyaWQgUHJvamVjdCIgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBzb2Z0d2FyZSwgb3IgcHJvZHVjdHMgZGVyaXZlZAordGhlcmVmcm9tLCBleGNlcHQgd2l0aCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gYnkgaGVwLXByb2plY3QtZ3JpZC1lZGctbGljZW5zZUBjZXJuLmNoLgorCis0LiBZb3UgYXJlIHVuZGVyIG5vIG9ibGlnYXRpb24gdG8gcHJvdmlkZSBhbnlvbmUgd2l0aCBhbnkgYnVnIGZpeGVzLCBwYXRjaGVzLCB1cGdyYWRlcyBvciBvdGhlciBtb2RpZmljYXRpb25zLCBlbmhhbmNlbWVudHMgb3IgZGVyaXZhdGl2ZXMgb2YgdGhlIGZlYXR1cmVzLGZ1bmN0aW9uYWxpdHkgb3IgcGVyZm9ybWFuY2Ugb2YgdGhpcyBzb2Z0d2FyZSB0aGF0IHlvdSBtYXkgZGV2ZWxvcC4gSG93ZXZlciwgaWYgeW91IHB1Ymxpc2ggb3IgZGlzdHJpYnV0ZSB5b3VyIG1vZGlmaWNhdGlvbnMsIGVuaGFuY2VtZW50cyBvciBkZXJpdmF0aXZlIHdvcmtzIHdpdGhvdXQgY29udGVtcG9yYW5lb3VzbHkgcmVxdWlyaW5nIHVzZXJzIHRvIGVudGVyIGludG8gYSBzZXBhcmF0ZSB3cml0dGVuIGxpY2Vuc2UgYWdyZWVtZW50LCB0aGVuIHlvdSBhcmUgZGVlbWVkIHRvIGhhdmUgZ3JhbnRlZCBwYXJ0aWNpcGFudHMgaW4gdGhlIEVVIERhdGFHcmlkIGEgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCBsaWNlbnNlIHRvIGluc3RhbGwsIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBtb2RpZnksIHJlZGlzdHJpYnV0ZSBhbmQgc3ViLWxpY2Vuc2UgeW91ciBtb2RpZmljYXRpb25zLCBlbmhhbmNlbWVudHMgb3IgZGVyaXZhdGl2ZSB3b3Jrcywgd2hldGhlciBpbiBiaW5hcnkgb3Igc291cmNlIGNvZGUgZm9ybSwgdW5kZXIgdGhlIGxpY2Vuc2UgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMuCisKKzUuIERJU0NMQUlNRVIgCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEVVIERBVEFHUklEIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIE9GIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVVNFIEFSRSBESVNDTEFJTUVELiBUSEUgRVUgREFUQUdSSUQgQU5EIENPTlRSSUJVVE9SUyBNQUtFIE5PIFJFUFJFU0VOVEFUSU9OIFRIQVQgVEhFIFNPRlRXQVJFLCBNT0RJRklDQVRJT05TLCBFTkhBTkNFTUVOVFMgT1IgREVSSVZBVElWRSBXT1JLUyBUSEVSRU9GLCBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgUEFURU5ULCBDT1BZUklHSFQsIFRSQURFIFNFQ1JFVCBPUiBPVEhFUiBQUk9QUklFVEFSWSBSSUdIVC4gCisKKzYuIExJTUlUQVRJT04gT0YgTElBQklMSVRZCisKK1RIRSBFVSBEQVRBR1JJRCBBTkQgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgTk8gTElBQklMSVRZIFRPIExJQ0VOU0VFIE9SIE9USEVSIFBFUlNPTlMgRk9SIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIEVYRU1QTEFSWSwgT1IgUFVOSVRJVkUgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLCBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVQTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZWNiZmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVUEwtMS4wCkBAIC0wLDAgKzEsMTg0IEBACisKK0V1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlIAorVi4xLjAgCitFVVBMICYjMTY5OyB0aGUgRXVyb3BlYW4gQ29tbXVuaXR5IDIwMDcgCitUaGlzIEV1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlICh0aGUgJiM4MjIwO0VVUEwmIzgyMjE7KSBhcHBsaWVzIHRvIHRoZSBXb3JrIG9yIFNvZnR3YXJlIChhcyAKK2RlZmluZWQgYmVsb3cpIHdoaWNoIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2VuY2UuIEFueSB1c2Ugb2YgdGhlIFdvcmssIG90aGVyIAordGhhbiBhcyBhdXRob3Jpc2VkIHVuZGVyIHRoaXMgTGljZW5jZSBpcyBwcm9oaWJpdGVkICh0byB0aGUgZXh0ZW50IHN1Y2ggdXNlIGlzIGNvdmVyZWQgYnkgYSByaWdodCAKK29mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBXb3JrKS4gCitUaGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbmNlIHdoZW4gdGhlIExpY2Vuc29yIChhcyBkZWZpbmVkIAorYmVsb3cpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgCitPcmlnaW5hbCBXb3JrOiAKK0xpY2Vuc2VkIHVuZGVyIHRoZSBFVVBMIFYuMS4wIAorb3IgaGFzIGV4cHJlc3NlZCBieSBhbnkgb3RoZXIgbWVhbiBoaXMgd2lsbGluZ25lc3MgdG8gbGljZW5zZSB1bmRlciB0aGUgRVVQTC4gCisxLiBEZWZpbml0aW9ucworSW4gdGhpcyBMaWNlbmNlLCB0aGUgZm9sbG93aW5nIHRlcm1zIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nOiAKKyYjODcyMjsgVGhlIExpY2VuY2U6IHRoaXMgTGljZW5jZS4gCismIzg3MjI7IFRoZSBPcmlnaW5hbCBXb3JrIG9yIHRoZSBTb2Z0d2FyZTogdGhlIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGFuZC9vciBjb21tdW5pY2F0ZWQgYnkgCit0aGUgTGljZW5zb3IgdW5kZXIgdGhpcyBMaWNlbmNlLCBhdmFpbGFibGUgYXMgU291cmNlIENvZGUgYW5kIGFsc28gYXMgRXhlY3V0YWJsZSAKK0NvZGUgYXMgdGhlIGNhc2UgbWF5IGJlLiAKKyYjODcyMjsgRGVyaXZhdGl2ZSBXb3JrczogdGhlIHdvcmtzIG9yIHNvZnR3YXJlIHRoYXQgY291bGQgYmUgY3JlYXRlZCBieSB0aGUgTGljZW5zZWUsIGJhc2VkIAordXBvbiB0aGUgT3JpZ2luYWwgV29yayBvciBtb2RpZmljYXRpb25zIHRoZXJlb2YuIFRoaXMgTGljZW5jZSBkb2VzIG5vdCBkZWZpbmUgdGhlIAorZXh0ZW50IG9mIG1vZGlmaWNhdGlvbiBvciBkZXBlbmRlbmNlIG9uIHRoZSBPcmlnaW5hbCBXb3JrIHJlcXVpcmVkIGluIG9yZGVyIHRvIAorY2xhc3NpZnkgYSB3b3JrIGFzIGEgRGVyaXZhdGl2ZSBXb3JrOyB0aGlzIGV4dGVudCBpcyBkZXRlcm1pbmVkIGJ5IGNvcHlyaWdodCBsYXcgCithcHBsaWNhYmxlIGluIHRoZSBjb3VudHJ5IG1lbnRpb25lZCBpbiBBcnRpY2xlIDE1LiAgCismIzg3MjI7IFRoZSBXb3JrOiB0aGUgT3JpZ2luYWwgV29yayBhbmQvb3IgaXRzIERlcml2YXRpdmUgV29ya3MuIAorJiM4NzIyOyBUaGUgU291cmNlIENvZGU6IHRoZSBodW1hbi1yZWFkYWJsZSBmb3JtIG9mIHRoZSBXb3JrIHdoaWNoIGlzIHRoZSBtb3N0IAorY29udmVuaWVudCBmb3IgcGVvcGxlIHRvIHN0dWR5IGFuZCBtb2RpZnkuIAorJiM4NzIyOyBUaGUgRXhlY3V0YWJsZSBDb2RlOiBhbnkgY29kZSB3aGljaCBoYXMgZ2VuZXJhbGx5IGJlZW4gY29tcGlsZWQgYW5kIHdoaWNoIGlzIAorbWVhbnQgdG8gYmUgaW50ZXJwcmV0ZWQgYnkgYSBjb21wdXRlciBhcyBhIHByb2dyYW0uIAorJiM4NzIyOyBUaGUgTGljZW5zb3I6IHRoZSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiB0aGF0ICBkaXN0cmlidXRlcyBhbmQvb3IgY29tbXVuaWNhdGVzIHRoZSAKK1dvcmsgdW5kZXIgdGhlIExpY2VuY2UuIAorJiM4NzIyOyBDb250cmlidXRvcihzKTogYW55IG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHdobyBtb2RpZmllcyB0aGUgV29yayB1bmRlciB0aGUgCitMaWNlbmNlLCBvciBvdGhlcndpc2UgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLiAKKyYjODcyMjsgVGhlIExpY2Vuc2VlIG9yICYjODIyMDtZb3UmIzgyMjE7OiAgYW55IG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHdobyBtYWtlcyBhbnkgdXNhZ2Ugb2YgdGhlIAorU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbmNlLiAmIzg3MjI7IERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbjogYW55IGFjdCBvZiBzZWxsaW5nLCAgZ2l2aW5nLCBsZW5kaW5nLCByZW50aW5nLCAKK2Rpc3RyaWJ1dGluZywgY29tbXVuaWNhdGluZywgdHJhbnNtaXR0aW5nLCBvciBvdGhlcndpc2UgbWFraW5nIGF2YWlsYWJsZSwgb24tbGluZSBvciAKK29mZi1saW5lLCBjb3BpZXMgb2YgdGhlIFdvcmsgYXQgdGhlIGRpc3Bvc2FsIG9mIGFueSBvdGhlciBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbi4gCisyLiBTY29wZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgdGhlIExpY2VuY2UKK1RoZSBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsICByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1Yi1saWNlbnNhYmxlIAorbGljZW5jZSB0byBkbyB0aGUgZm9sbG93aW5nLCBmb3IgdGhlIGR1cmF0aW9uIG9mIGNvcHlyaWdodCB2ZXN0ZWQgaW4gdGhlIE9yaWdpbmFsIFdvcms6IAorJiM4NzIyOyB1c2UgdGhlIFdvcmsgaW4gYW55IGNpcmN1bXN0YW5jZSBhbmQgZm9yIGFsbCB1c2FnZSwgCismIzg3MjI7IHJlcHJvZHVjZSB0aGUgV29yaywgCismIzg3MjI7IG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIG1ha2UgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBXb3JrLCAKKyYjODcyMjsgY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYywgaW5jbHVkaW5nIHRoZSByaWdodCB0byBtYWtlIGF2YWlsYWJsZSBvciBkaXNwbGF5IHRoZSBXb3JrIAorb3IgY29waWVzIHRoZXJlb2YgdG8gdGhlIHB1YmxpYyBhbmQgcGVyZm9ybSBwdWJsaWNseSwgYXMgdGhlIGNhc2UgbWF5IGJlLCB0aGUgV29yaywgCismIzg3MjI7IGRpc3RyaWJ1dGUgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YsIAorJiM4NzIyOyBsZW5kIGFuZCByZW50IHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLCAKKyYjODcyMjsgc3ViLWxpY2Vuc2UgcmlnaHRzIGluIHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLiAKK1Rob3NlIHJpZ2h0cyBjYW4gYmUgZXhlcmNpc2VkIG9uIGFueSBtZWRpYSwgIHN1cHBvcnRzIGFuZCBmb3JtYXRzLCB3aGV0aGVyIG5vdyBrbm93biBvciAKK2xhdGVyIGludmVudGVkLCBhcyBmYXIgYXMgdGhlIGFwcGxpY2FibGUgbGF3IHBlcm1pdHMgc28uIAorSW4gdGhlIGNvdW50cmllcyB3aGVyZSBtb3JhbCByaWdodHMgYXBwbHksIHRoZSBMaWNlbnNvciB3YWl2ZXMgaGlzIHJpZ2h0IHRvIGV4ZXJjaXNlIGhpcyBtb3JhbCAKK3JpZ2h0IHRvIHRoZSBleHRlbnQgYWxsb3dlZCBieSBsYXcgaW4gb3JkZXIgdG8gbWFrZSBlZmZlY3RpdmUgdGhlIGxpY2VuY2Ugb2YgdGhlIGVjb25vbWljIHJpZ2h0cyAKK2hlcmUgYWJvdmUgbGlzdGVkLiAKK1RoZSBMaWNlbnNvciBncmFudHMgdG8gdGhlIExpY2Vuc2VlIHJveWFsdHktZnJlZSwgbm9uIGV4Y2x1c2l2ZSB1c2FnZSByaWdodHMgdG8gYW55IHBhdGVudHMgCitoZWxkIGJ5IHRoZSBMaWNlbnNvciwgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSB1c2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIG9uIHRoZSBXb3JrIAordW5kZXIgdGhpcyBMaWNlbmNlLiAKKzMuIENvbW11bmljYXRpb24gb2YgdGhlIFNvdXJjZSBDb2RlCitUaGUgTGljZW5zb3IgbWF5IHByb3ZpZGUgdGhlIFdvcmsgZWl0aGVyIGluIGl0cyBTb3VyY2UgQ29kZSBmb3JtLCBvciBhcyBFeGVjdXRhYmxlIENvZGUuIElmIAordGhlIFdvcmsgaXMgcHJvdmlkZWQgYXMgRXhlY3V0YWJsZSBDb2RlLCAgdGhlIExpY2Vuc29yIHByb3ZpZGVzIGluIGFkZGl0aW9uIGEgbWFjaGluZXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBXb3JrIHRoYXQgdGhlIAorTGljZW5zb3IgZGlzdHJpYnV0ZXMgb3IgaW5kaWNhdGVzLCBpbiBhIG5vdGljZSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgYXR0YWNoZWQgdG8gdGhlIAorV29yaywgYSByZXBvc2l0b3J5IHdoZXJlIHRoZSBTb3VyY2UgQ29kZSBpcyBlYXNpbHkgYW5kIGZyZWVseSBhY2Nlc3NpYmxlIGZvciBhcyBsb25nIGFzIHRoZSAKK0xpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIGFuZC9vciBjb21tdW5pY2F0ZSB0aGUgV29yay4gCis0LiBMaW1pdGF0aW9ucyBvbiBjb3B5cmlnaHQKK05vdGhpbmcgaW4gdGhpcyBMaWNlbmNlIGlzIGludGVuZGVkIHRvIGRlcHJpdmUgdGhlIExpY2Vuc2VlIG9mIHRoZSBiZW5lZml0cyBmcm9tIGFueSBleGNlcHRpb24gCitvciBsaW1pdGF0aW9uIHRvIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSByaWdodHMgb3duZXJzIGluIHRoZSBPcmlnaW5hbCBXb3JrIG9yIFNvZnR3YXJlLCBvZiAKK3RoZSBleGhhdXN0aW9uIG9mIHRob3NlIHJpZ2h0cyBvciBvZiBvdGhlciBhcHBsaWNhYmxlIGxpbWl0YXRpb25zIHRoZXJldG8uIAorNS4gT2JsaWdhdGlvbnMgb2YgdGhlIExpY2Vuc2VlCitUaGUgZ3JhbnQgb2YgdGhlIHJpZ2h0cyBtZW50aW9uZWQgYWJvdmUgaXMgc3ViamVjdCB0byBzb21lIHJlc3RyaWN0aW9ucyBhbmQgb2JsaWdhdGlvbnMgCitpbXBvc2VkIG9uIHRoZSBMaWNlbnNlZS4gVGhvc2Ugb2JsaWdhdGlvbnMgYXJlIHRoZSBmb2xsb3dpbmc6IEF0dHJpYnV0aW9uIHJpZ2h0OiB0aGUgTGljZW5zZWUgc2hhbGwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFya3Mgbm90aWNlcyAKK2FuZCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoZSBMaWNlbmNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBUaGUgTGljZW5zZWUgbXVzdCAKK2luY2x1ZGUgYSBjb3B5IG9mIHN1Y2ggbm90aWNlcyBhbmQgYSBjb3B5IG9mIHRoZSBMaWNlbmNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBoZS9zaGUgCitkaXN0cmlidXRlcyBhbmQvb3IgY29tbXVuaWNhdGVzLiBUaGUgTGljZW5zZWUgbXVzdCBjYXVzZSBhbnkgRGVyaXZhdGl2ZSBXb3JrIHRvIGNhcnJ5IAorcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHRoZSBXb3JrIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCB0aGUgZGF0ZSBvZiBtb2RpZmljYXRpb24uIAorQ29weWxlZnQgY2xhdXNlOiBJZiB0aGUgTGljZW5zZWUgZGlzdHJpYnV0ZXMgYW5kL29yICBjb21tdW5pY2F0ZXMgY29waWVzIG9mIHRoZSBPcmlnaW5hbCAKK1dvcmtzIG9yIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yaywgdGhpcyBEaXN0cmlidXRpb24gYW5kL29yIAorQ29tbXVuaWNhdGlvbiB3aWxsIGJlIGRvbmUgdW5kZXIgdGhlIHRlcm1zICBvZiB0aGlzIExpY2VuY2UuIFRoZSBMaWNlbnNlZSAoYmVjb21pbmcgCitMaWNlbnNvcikgY2Fubm90IG9mZmVyIG9yIGltcG9zZSBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciAgY29uZGl0aW9ucyBvbiB0aGUgV29yayBvciAKK0Rlcml2YXRpdmUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5jZS4gCitDb21wYXRpYmlsaXR5IGNsYXVzZTogSWYgdGhlIExpY2Vuc2VlIERpc3RyaWJ1dGVzIGFuZC9vciBDb21tdW5pY2F0ZXMgRGVyaXZhdGl2ZSBXb3JrcyBvciAKK2NvcGllcyB0aGVyZW9mIGJhc2VkIHVwb24gYm90aCB0aGUgT3JpZ2luYWwgV29yayBhbmQgYW5vdGhlciB3b3JrIGxpY2Vuc2VkIHVuZGVyIGEgCitDb21wYXRpYmxlIExpY2VuY2UsIHRoaXMgRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uIGNhbiBiZSBkb25lIHVuZGVyIHRoZSB0ZXJtcyBvZiAKK3RoaXMgQ29tcGF0aWJsZSBMaWNlbmNlLiBGb3IgdGhlIHNha2Ugb2YgdGhpcyBjbGF1c2UsICYjODIyMDtDb21wYXRpYmxlIExpY2VuY2UmIzgyMjE7IHJlZmVycyB0byB0aGUgCitsaWNlbmNlcyBsaXN0ZWQgaW4gdGhlIGFwcGVuZGl4IGF0dGFjaGVkIHRvICB0aGlzIExpY2VuY2UuIFNob3VsZCB0aGUgIExpY2Vuc2VlJiM4MjE3O3Mgb2JsaWdhdGlvbnMgCit1bmRlciB0aGUgQ29tcGF0aWJsZSBMaWNlbmNlIGNvbmZsaWN0IHdpdGggaGlzL2hlciAgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbmNlLCB0aGUgCitvYmxpZ2F0aW9ucyBvZiB0aGUgQ29tcGF0aWJsZSBMaWNlbmNlIHNoYWxsIHByZXZhaWwuICAKK1Byb3Zpc2lvbiBvZiBTb3VyY2UgQ29kZTogV2hlbiBkaXN0cmlidXRpbmcgYW5kL29yIGNvbW11bmljYXRpbmcgY29waWVzIG9mIHRoZSBXb3JrLCB0aGUgCitMaWNlbnNlZSB3aWxsIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9yICBpbmRpY2F0ZSBhIHJlcG9zaXRvcnkgCit3aGVyZSB0aGlzIFNvdXJjZSB3aWxsIGJlIGVhc2lseSBhbmQgZnJlZWx5IGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgTGljZW5zZWUgY29udGludWVzIHRvIAorZGlzdHJpYnV0ZSBhbmQvb3IgY29tbXVuaWNhdGUgdGhlIFdvcmsuIAorTGVnYWwgUHJvdGVjdGlvbjogVGhpcyBMaWNlbmNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgCitzZXJ2aWNlIG1hcmtzLCBvciBuYW1lcyBvZiB0aGUgTGljZW5zb3IsIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSAKK2luIGRlc2NyaWJpbmcgdGhlIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGNvcHlyaWdodCBub3RpY2UuIAorNi4gQ2hhaW4gb2YgQXV0aG9yc2hpcAorVGhlIG9yaWdpbmFsIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiB0aGUgT3JpZ2luYWwgV29yayBncmFudGVkIGhlcmV1bmRlciBpcyAKK293bmVkIGJ5IGhpbS9oZXIgb3IgbGljZW5zZWQgdG8gaGltL2hlciBhbmQgdGhhdCBoZS9zaGUgaGFzIHRoZSBwb3dlciBhbmQgYXV0aG9yaXR5IHRvIGdyYW50IAordGhlIExpY2VuY2UuIAorRWFjaCBDb250cmlidXRvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gdGhlIG1vZGlmaWNhdGlvbnMgaGUvc2hlIGJyaW5ncyB0byB0aGUgV29yayAKK2FyZSBvd25lZCBieSBoaW0vaGVyIG9yIGxpY2Vuc2VkIHRvIGhpbS9oZXIgYW5kIHRoYXQgaGUvc2hlIGhhcyB0aGUgcG93ZXIgYW5kIGF1dGhvcml0eSB0byAKK2dyYW50IHRoZSBMaWNlbmNlLiAKK0VhY2ggdGltZSBZb3UsIGFzIGEgTGljZW5zZWUsICByZWNlaXZlIHRoZSBXb3JrLCB0aGUgb3JpZ2luYWwgTGljZW5zb3IgYW5kIHN1YnNlcXVlbnQgCitDb250cmlidXRvcnMgZ3JhbnQgWW91IGEgbGljZW5jZSB0byB0aGVpciBjb250cmlidXRpb25zIHRvIHRoZSBXb3JrLCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyAKK0xpY2VuY2UuIAorNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eQorVGhlIFdvcmsgaXMgYSB3b3JrIGluIHByb2dyZXNzLCB3aGljaCBpcyBjb250aW51b3VzbHkgaW1wcm92ZWQgYnkgbnVtZXJvdXMgY29udHJpYnV0b3JzLiBJdCAKK2lzIG5vdCBhIGZpbmlzaGVkIHdvcmsgYW5kIG1heSB0aGVyZWZvcmUgY29udGFpbiBkZWZlY3RzIG9yICYjODIyMDtidWdzJiM4MjIxOyBpbmhlcmVudCB0byB0aGlzIHR5cGUgb2YgCitzb2Z0d2FyZSBkZXZlbG9wbWVudC4gCitGb3IgdGhlIGFib3ZlIHJlYXNvbiwgdGhlIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhlIExpY2VuY2Ugb24gYW4gJiM4MjIwO2FzIGlzJiM4MjIxOyBiYXNpcyBhbmQgd2l0aG91dCAKK3dhcnJhbnRpZXMgb2YgYW55IGtpbmQgY29uY2VybmluZyB0aGUgV29yaywgIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gbWVyY2hhbnRhYmlsaXR5LCAKK2ZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCBhYnNlbmNlIG9mIGRlZmVjdHMgb3IgZXJyb3JzLCBhY2N1cmFjeSwgbm9uLWluZnJpbmdlbWVudCBvZiAKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3RoZXIgdGhhbiBjb3B5cmlnaHQgYXMgc3RhdGVkIGluIEFydGljbGUgNiBvZiB0aGlzIExpY2VuY2UuIFRoaXMgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBpcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGUgTGljZW5jZSBhbmQgYSBjb25kaXRpb24gZm9yIHRoZSBncmFudCBvZiAKK2FueSByaWdodHMgdG8gdGhlIFdvcmsuIAorOC4gRGlzY2xhaW1lciBvZiBMaWFiaWxpdHkKK0V4Y2VwdCBpbiB0aGUgY2FzZXMgb2Ygd2lsZnVsIG1pc2NvbmR1Y3Qgb3IgZGFtYWdlcyBkaXJlY3RseSBjYXVzZWQgdG8gbmF0dXJhbCBwZXJzb25zLCB0aGUgCitMaWNlbnNvciB3aWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55IGRpcmVjdCBvciBpbmRpcmVjdCwgbWF0ZXJpYWwgb3IgbW9yYWwsIGRhbWFnZXMgb2YgCithbnkga2luZCwgYXJpc2luZyBvdXQgb2YgIHRoZSBMaWNlbmNlIG9yIG9mIHRoZSB1c2Ugb2YgdGhlIFdvcmssIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIAorZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgbG9zcyBvZiBkYXRhIG9yIAorYW55IGNvbW1lcmNpYWwgZGFtYWdlLCBldmVuIGlmIHRoZSBMaWNlbnNvciBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSAgcG9zc2liaWxpdHkgb2Ygc3VjaCAKK2RhbWFnZS4gSG93ZXZlciwgdGhlIExpY2Vuc29yIHdpbGwgYmUgbGlhYmxlIHVuZGVyIHN0YXR1dG9yeSBwcm9kdWN0IGxpYWJpbGl0eSBsYXdzIGFzIGZhciBzdWNoIAorbGF3cyBhcHBseSB0byB0aGUgV29yay4gCis5LiBBZGRpdGlvbmFsIGFncmVlbWVudHMKK1doaWxlIGRpc3RyaWJ1dGluZyB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzLCBZb3UgbWF5IGNob29zZSB0byBjb25jbHVkZSBhbiAKK2FkZGl0aW9uYWwgYWdyZWVtZW50IHRvIG9mZmVyLCBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSAgb2Ygc3VwcG9ydCwgd2FycmFudHksIAoraW5kZW1uaXR5LCBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHNlcnZpY2VzIGNvbnNpc3RlbnQgd2l0aCB0aGlzIExpY2VuY2UuIAorSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkgb24geW91ciBvd24gYmVoYWxmIGFuZCBvbiB5b3VyIAorc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZiBvZiB0aGUgb3JpZ2luYWwgTGljZW5zb3Igb3IgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiAKK1lvdSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCAKK2J5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHRoZSBmYWN0IFlvdSBoYXZlIGFjY2VwdGVkIGFueSBzdWNoIAord2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuIAorMTAuIEFjY2VwdGFuY2Ugb2YgdGhlIExpY2VuY2UKK1RoZSBwcm92aXNpb25zIG9mIHRoaXMgTGljZW5jZSBjYW4gYmUgYWNjZXB0ZWQgYnkgY2xpY2tpbmcgb24gYW4gaWNvbiAmIzgyMjA7SSBhZ3JlZSYjODIyMTsgcGxhY2VkIHVuZGVyIAordGhlIGJvdHRvbSBvZiBhIHdpbmRvdyBkaXNwbGF5aW5nIHRoZSB0ZXh0IG9mIHRoaXMgTGljZW5jZSBvciBieSBhZmZpcm1pbmcgY29uc2VudCBpbiBhbnkgCitvdGhlciBzaW1pbGFyIHdheSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBydWxlcyBvZiBhcHBsaWNhYmxlIGxhdy4gQ2xpY2tpbmcgb24gdGhhdCBpY29uIAoraW5kaWNhdGVzIHlvdXIgY2xlYXIgYW5kIGlycmV2b2NhYmxlIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbmNlIGFuZCAgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgCitjb25kaXRpb25zLiAgCitTaW1pbGFybHksIHlvdSBpcnJldm9jYWJseSBhY2NlcHQgdGhpcyBMaWNlbmNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGJ5IAorZXhlcmNpc2luZyBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IEFydGljbGUgMiBvZiB0aGlzIExpY2VuY2UsIHN1Y2ggYXMgdGhlIHVzZSBvZiB0aGUgV29yaywgCit0aGUgY3JlYXRpb24gYnkgWW91IG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIHRoZSBEaXN0cmlidXRpb24gYW5kL29yIENvbW11bmljYXRpb24gYnkgWW91IAorb2YgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YuICAKKzExLiBJbmZvcm1hdGlvbiB0byB0aGUgcHVibGljCitJbiBjYXNlIG9mIGFueSBEaXN0cmlidXRpb24gYW5kL29yIENvbW11bmljYXRpb24gb2YgdGhlIFdvcmsgYnkgbWVhbnMgb2YgZWxlY3Ryb25pYyAKK2NvbW11bmljYXRpb24gYnkgWW91IChmb3IgZXhhbXBsZSwgYnkgb2ZmZXJpbmcgdG8gZG93bmxvYWQgdGhlIFdvcmsgZnJvbSBhIHJlbW90ZSAKK2xvY2F0aW9uKSB0aGUgZGlzdHJpYnV0aW9uIGNoYW5uZWwgb3IgbWVkaWEgKGZvciBleGFtcGxlLCBhIHdlYnNpdGUpIG11c3QgYXQgbGVhc3QgcHJvdmlkZSB0byAKK3RoZSBwdWJsaWMgdGhlIGluZm9ybWF0aW9uIHJlcXVlc3RlZCBieSB0aGUgYXBwbGljYWJsZSBsYXcgcmVnYXJkaW5nIHRoZSBpZGVudGlmaWNhdGlvbiBhbmQgCithZGRyZXNzIG9mIHRoZSBMaWNlbnNvciwgdGhlIExpY2VuY2UgYW5kIHRoZSB3YXkgaXQgbWF5IGJlIGFjY2Vzc2libGUsIGNvbmNsdWRlZCwgc3RvcmVkIGFuZCAKK3JlcHJvZHVjZWQgYnkgdGhlIExpY2Vuc2VlLiAKKzEyLiBUZXJtaW5hdGlvbiBvZiB0aGUgTGljZW5jZQorVGhlIExpY2VuY2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgCit0aGUgTGljZW5zZWUgb2YgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbmNlLiAKK1N1Y2ggYSB0ZXJtaW5hdGlvbiB3aWxsIG5vdCB0ZXJtaW5hdGUgdGhlIGxpY2VuY2VzIG9mIGFueSBwZXJzb24gd2hvIGhhcyByZWNlaXZlZCB0aGUgV29yayAKK2Zyb20gdGhlIExpY2Vuc2VlIHVuZGVyIHRoZSBMaWNlbmNlLCBwcm92aWRlZCBzdWNoIHBlcnNvbnMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIAordGhlIExpY2VuY2UuICAxMy4gTWlzY2VsbGFuZW91cworV2l0aG91dCBwcmVqdWRpY2Ugb2YgQXJ0aWNsZSA5IGFib3ZlLCB0aGUgTGljZW5jZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgYmV0d2VlbiAKK3RoZSBQYXJ0aWVzIGFzIHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmV1bmRlci4gCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbmNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgdGhpcyB3aWxsIG5vdCAKK2FmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIExpY2VuY2UgYXMgYSB3aG9sZS4gU3VjaCBwcm92aXNpb24gd2lsbCBiZSAKK2NvbnN0cnVlZCBhbmQvb3IgcmVmb3JtZWQgc28gYXMgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgdmFsaWQgYW5kIGVuZm9yY2VhYmxlLiAKK1RoZSBFdXJvcGVhbiBDb21taXNzaW9uIG1heSBwdXQgaW50byBmb3JjZSB0cmFuc2xhdGlvbnMgYW5kL29yIGJpbmRpbmcgbmV3IHZlcnNpb25zIG9mIAordGhpcyBMaWNlbmNlLCBzbyBmYXIgdGhpcyBpcyByZXF1aXJlZCBhbmQgcmVhc29uYWJsZS4gTmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbmNlIHdpbGwgYmUgCitwdWJsaXNoZWQgd2l0aCBhIHVuaXF1ZSB2ZXJzaW9uIG51bWJlci4gVGhlIG5ldyB2ZXJzaW9uIG9mIHRoZSBMaWNlbmNlIGJlY29tZXMgYmluZGluZyBmb3IgCitZb3UgYXMgc29vbiBhcyBZb3UgYmVjb21lIGF3YXJlIG9mIGl0cyBwdWJsaWNhdGlvbi4gCisxNC4gSnVyaXNkaWN0aW9uCitBbnkgbGl0aWdhdGlvbiByZXN1bHRpbmcgZnJvbSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBMaWNlbnNlLCBhcmlzaW5nIGJldHdlZW4gdGhlIEV1cm9wZWFuIAorQ29tbWlzc2lvbiwgYXMgYSBMaWNlbnNvciwgYW5kIGFueSBMaWNlbnNlZSwgd2lsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIENvdXJ0IAorb2YgSnVzdGljZSBvZiB0aGUgRXVyb3BlYW4gQ29tbXVuaXRpZXMsIGFzIGxhaWQgZG93biBpbiBhcnRpY2xlIDIzOCBvZiB0aGUgVHJlYXR5IGVzdGFibGlzaGluZyAKK3RoZSBFdXJvcGVhbiBDb21tdW5pdHkuIAorQW55IGxpdGlnYXRpb24gYXJpc2luZyBiZXR3ZWVuIFBhcnRpZXMsIG90aGVyICB0aGFuIHRoZSBFdXJvcGVhbiBDb21taXNzaW9uLCBhbmQgcmVzdWx0aW5nIAorZnJvbSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBMaWNlbnNlLCB3aWxsIGJlIHN1YmplY3QgdG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb2YgdGhlIAorY29tcGV0ZW50IGNvdXJ0IHdoZXJlIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLiAKKzE1LiBBcHBsaWNhYmxlIExhdworVGhpcyBMaWNlbmNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXcgb2YgdGhlIEV1cm9wZWFuIFVuaW9uIGNvdW50cnkgd2hlcmUgdGhlIExpY2Vuc29yIAorcmVzaWRlcyBvciBoYXMgaGlzIHJlZ2lzdGVyZWQgb2ZmaWNlLiAKK1RoaXMgbGljZW5jZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgQmVsZ2lhbiBsYXcgaWY6IAorJiM4NzIyOyBhIGxpdGlnYXRpb24gYXJpc2VzIGJldHdlZW4gdGhlIEV1cm9wZWFuIENvbW1pc3Npb24sIGFzIGEgTGljZW5zb3IsIGFuZCBhbnkgCitMaWNlbnNlZTsgCismIzg3MjI7IHRoZSBMaWNlbnNvciwgb3RoZXIgdGhhbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgaGFzIG5vIHJlc2lkZW5jZSBvciByZWdpc3RlcmVkIAorb2ZmaWNlIGluc2lkZSBhIEV1cm9wZWFuIFVuaW9uIGNvdW50cnkuICAKKyA9PT1BcHBlbmRpeAorJiM4MjIwO0NvbXBhdGlibGUgTGljZW5jZXMmIzgyMjE7IGFjY29yZGluZyB0byBhcnRpY2xlIDUgRVVQTCBhcmU6IAorJiM4NzIyOyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHYuIDIgCismIzg3MjI7IE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMKSB2LiAyLjEsIHYuIDMuMCAKKyYjODcyMjsgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYuIDEuMCAKKyYjODcyMjsgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAxLjAgCismIzg3MjI7IENlY2lsbCB2LiAyLjAgCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVQTC0xLjEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVUEwtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMWQ4NGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVUEwtMS4xCkBAIC0wLDAgKzEsMjA0IEBACisKK0V1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlCitWLiAxLjEKK0VVUEwgJiMxNjk7IHRoZSBFdXJvcGVhbiBDb21tdW5pdHkgMjAwNworVGhpcyBFdXJvcGVhbiBVbmlvbiBQdWJsaWMgTGljZW5jZSAodGhlICYjODIyMDtFVVBMJiM4MjIxOykgYXBwbGllcyB0byB0aGUgV29yayBvciBTb2Z0d2FyZQorKGFzIGRlZmluZWQgYmVsb3cpIHdoaWNoIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2VuY2UuIEFueSB1c2Ugb2YgdGhlCitXb3JrLCBvdGhlciB0aGFuIGFzIGF1dGhvcmlzZWQgdW5kZXIgdGhpcyBMaWNlbmNlIGlzIHByb2hpYml0ZWQgKHRvIHRoZSBleHRlbnQgc3VjaCB1c2UKK2lzIGNvdmVyZWQgYnkgYSByaWdodCBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgV29yaykuCitUaGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbmNlIHdoZW4gdGhlIExpY2Vuc29yIChhcworZGVmaW5lZCBiZWxvdykgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodAorbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazoKK0xpY2Vuc2VkIHVuZGVyIHRoZSBFVVBMIFYuMS4xCitvciBoYXMgZXhwcmVzc2VkIGJ5IGFueSBvdGhlciBtZWFuIGhpcyB3aWxsaW5nbmVzcyB0byBsaWNlbnNlIHVuZGVyIHRoZSBFVVBMLgorMS4gRGVmaW5pdGlvbnMKK0luIHRoaXMgTGljZW5jZSwgdGhlIGZvbGxvd2luZyB0ZXJtcyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZzoKKy0gVGhlIExpY2VuY2U6IHRoaXMgTGljZW5jZS4KKy0gVGhlIE9yaWdpbmFsIFdvcmsgb3IgdGhlIFNvZnR3YXJlOiB0aGUgc29mdHdhcmUgZGlzdHJpYnV0ZWQgYW5kL29yIGNvbW11bmljYXRlZAorYnkgdGhlIExpY2Vuc29yIHVuZGVyIHRoaXMgTGljZW5jZSwgYXZhaWxhYmxlIGFzIFNvdXJjZSBDb2RlIGFuZCBhbHNvIGFzIEV4ZWN1dGFibGUKK0NvZGUgYXMgdGhlIGNhc2UgbWF5IGJlLgorLSBEZXJpdmF0aXZlIFdvcmtzOiB0aGUgd29ya3Mgb3Igc29mdHdhcmUgdGhhdCBjb3VsZCBiZSBjcmVhdGVkIGJ5IHRoZSBMaWNlbnNlZSwKK2Jhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmsgb3IgbW9kaWZpY2F0aW9ucyB0aGVyZW9mLiBUaGlzIExpY2VuY2UgZG9lcyBub3QgZGVmaW5lCit0aGUgZXh0ZW50IG9mIG1vZGlmaWNhdGlvbiBvciBkZXBlbmRlbmNlIG9uIHRoZSBPcmlnaW5hbCBXb3JrIHJlcXVpcmVkIGluIG9yZGVyIHRvCitjbGFzc2lmeSBhIHdvcmsgYXMgYSBEZXJpdmF0aXZlIFdvcms7IHRoaXMgZXh0ZW50IGlzIGRldGVybWluZWQgYnkgY29weXJpZ2h0IGxhdworYXBwbGljYWJsZSBpbiB0aGUgY291bnRyeSBtZW50aW9uZWQgaW4gQXJ0aWNsZSAxNS4KKy0gVGhlIFdvcms6IHRoZSBPcmlnaW5hbCBXb3JrIGFuZC9vciBpdHMgRGVyaXZhdGl2ZSBXb3Jrcy4KKy0gVGhlIFNvdXJjZSBDb2RlOiB0aGUgaHVtYW4tcmVhZGFibGUgZm9ybSBvZiB0aGUgV29yayB3aGljaCBpcyB0aGUgbW9zdAorY29udmVuaWVudCBmb3IgcGVvcGxlIHRvIHN0dWR5IGFuZCBtb2RpZnkuCistIFRoZSBFeGVjdXRhYmxlIENvZGU6IGFueSBjb2RlIHdoaWNoIGhhcyBnZW5lcmFsbHkgYmVlbiBjb21waWxlZCBhbmQgd2hpY2ggaXMKK21lYW50IHRvIGJlIGludGVycHJldGVkIGJ5IGEgY29tcHV0ZXIgYXMgYSBwcm9ncmFtLgorLSBUaGUgTGljZW5zb3I6IHRoZSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiB0aGF0IGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMgdGhlCitXb3JrIHVuZGVyIHRoZSBMaWNlbmNlLgorLSBDb250cmlidXRvcihzKTogYW55IG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHdobyBtb2RpZmllcyB0aGUgV29yayB1bmRlciB0aGUKK0xpY2VuY2UsIG9yIG90aGVyd2lzZSBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgYSBEZXJpdmF0aXZlIFdvcmsuCistIFRoZSBMaWNlbnNlZSBvciAmIzgyMjA7WW91JiM4MjIxOzogYW55IG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHdobyBtYWtlcyBhbnkgdXNhZ2Ugb2YgdGhlCitTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2VuY2UuCistIERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbjogYW55IGFjdCBvZiBzZWxsaW5nLCBnaXZpbmcsIGxlbmRpbmcsIHJlbnRpbmcsCitkaXN0cmlidXRpbmcsIGNvbW11bmljYXRpbmcsIHRyYW5zbWl0dGluZywgb3Igb3RoZXJ3aXNlIG1ha2luZyBhdmFpbGFibGUsIG9uLWxpbmUgb3IKK29mZi1saW5lLCBjb3BpZXMgb2YgdGhlIFdvcmsgb3IgcHJvdmlkaW5nIGFjY2VzcyB0byBpdHMgZXNzZW50aWFsIGZ1bmN0aW9uYWxpdGllcyBhdCB0aGUKK2Rpc3Bvc2FsIG9mIGFueSBvdGhlciBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbi4KKzIuIFNjb3BlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBieSB0aGUgTGljZW5jZQorVGhlIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlCitsaWNlbmNlIHRvIGRvIHRoZSBmb2xsb3dpbmcsIGZvciB0aGUgZHVyYXRpb24gb2YgY29weXJpZ2h0IHZlc3RlZCBpbiB0aGUKK09yaWdpbmFsIFdvcms6CistIHVzZSB0aGUgV29yayBpbiBhbnkgY2lyY3Vtc3RhbmNlIGFuZCBmb3IgYWxsIHVzYWdlLAorLSByZXByb2R1Y2UgdGhlIFdvcmssCistIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIG1ha2UgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBXb3JrLAorLSBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljLCBpbmNsdWRpbmcgdGhlIHJpZ2h0IHRvIG1ha2UgYXZhaWxhYmxlIG9yIGRpc3BsYXkgdGhlCitXb3JrIG9yIGNvcGllcyB0aGVyZW9mIHRvIHRoZSBwdWJsaWMgYW5kIHBlcmZvcm0gcHVibGljbHksIGFzIHRoZSBjYXNlIG1heSBiZSwKK3RoZSBXb3JrLAorLSBkaXN0cmlidXRlIHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLAorLSBsZW5kIGFuZCByZW50IHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLAorLSBzdWItbGljZW5zZSByaWdodHMgaW4gdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YuCitUaG9zZSByaWdodHMgY2FuIGJlIGV4ZXJjaXNlZCBvbiBhbnkgbWVkaWEsIHN1cHBvcnRzIGFuZCBmb3JtYXRzLCB3aGV0aGVyIG5vdwora25vd24gb3IgbGF0ZXIgaW52ZW50ZWQsIGFzIGZhciBhcyB0aGUgYXBwbGljYWJsZSBsYXcgcGVybWl0cyBzby4KK0luIHRoZSBjb3VudHJpZXMgd2hlcmUgbW9yYWwgcmlnaHRzIGFwcGx5LCB0aGUgTGljZW5zb3Igd2FpdmVzIGhpcyByaWdodCB0byBleGVyY2lzZSBoaXMKK21vcmFsIHJpZ2h0IHRvIHRoZSBleHRlbnQgYWxsb3dlZCBieSBsYXcgaW4gb3JkZXIgdG8gbWFrZSBlZmZlY3RpdmUgdGhlIGxpY2VuY2Ugb2YgdGhlCitlY29ub21pYyByaWdodHMgaGVyZSBhYm92ZSBsaXN0ZWQuCitUaGUgTGljZW5zb3IgZ3JhbnRzIHRvIHRoZSBMaWNlbnNlZSByb3lhbHR5LWZyZWUsIG5vbiBleGNsdXNpdmUgdXNhZ2UgcmlnaHRzIHRvIGFueQorcGF0ZW50cyBoZWxkIGJ5IHRoZSBMaWNlbnNvciwgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSB1c2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkCitvbiB0aGUgV29yayB1bmRlciB0aGlzIExpY2VuY2UuCiszLiBDb21tdW5pY2F0aW9uIG9mIHRoZSBTb3VyY2UgQ29kZQorVGhlIExpY2Vuc29yIG1heSBwcm92aWRlIHRoZSBXb3JrIGVpdGhlciBpbiBpdHMgU291cmNlIENvZGUgZm9ybSwgb3IgYXMgRXhlY3V0YWJsZQorQ29kZS4gSWYgdGhlIFdvcmsgaXMgcHJvdmlkZWQgYXMgRXhlY3V0YWJsZSBDb2RlLCB0aGUgTGljZW5zb3IgcHJvdmlkZXMgaW4gYWRkaXRpb24gYQorbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUKK1dvcmsgdGhhdCB0aGUgTGljZW5zb3IgZGlzdHJpYnV0ZXMgb3IgaW5kaWNhdGVzLCBpbiBhIG5vdGljZSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodAorbm90aWNlIGF0dGFjaGVkIHRvIHRoZSBXb3JrLCBhIHJlcG9zaXRvcnkgd2hlcmUgdGhlIFNvdXJjZSBDb2RlIGlzIGVhc2lseSBhbmQgZnJlZWx5CithY2Nlc3NpYmxlIGZvciBhcyBsb25nIGFzIHRoZSBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSBhbmQvb3IgY29tbXVuaWNhdGUgdGhlCitXb3JrLgorNC4gTGltaXRhdGlvbnMgb24gY29weXJpZ2h0CitOb3RoaW5nIGluIHRoaXMgTGljZW5jZSBpcyBpbnRlbmRlZCB0byBkZXByaXZlIHRoZSBMaWNlbnNlZSBvZiB0aGUgYmVuZWZpdHMgZnJvbSBhbnkKK2V4Y2VwdGlvbiBvciBsaW1pdGF0aW9uIHRvIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSByaWdodHMgb3duZXJzIGluIHRoZSBPcmlnaW5hbAorV29yayBvciBTb2Z0d2FyZSwgb2YgdGhlIGV4aGF1c3Rpb24gb2YgdGhvc2UgcmlnaHRzIG9yIG9mIG90aGVyIGFwcGxpY2FibGUgbGltaXRhdGlvbnMKK3RoZXJldG8uCis1LiBPYmxpZ2F0aW9ucyBvZiB0aGUgTGljZW5zZWUKK1RoZSBncmFudCBvZiB0aGUgcmlnaHRzIG1lbnRpb25lZCBhYm92ZSBpcyBzdWJqZWN0IHRvIHNvbWUgcmVzdHJpY3Rpb25zIGFuZCBvYmxpZ2F0aW9ucworaW1wb3NlZCBvbiB0aGUgTGljZW5zZWUuIFRob3NlIG9ibGlnYXRpb25zIGFyZSB0aGUgZm9sbG93aW5nOgorQXR0cmlidXRpb24gcmlnaHQ6IHRoZSBMaWNlbnNlZSBzaGFsbCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrcworbm90aWNlcyBhbmQgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGUgTGljZW5jZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KK1RoZSBMaWNlbnNlZSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHN1Y2ggbm90aWNlcyBhbmQgYSBjb3B5IG9mIHRoZSBMaWNlbmNlIHdpdGgKK2V2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgaGUvc2hlIGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMuIFRoZSBMaWNlbnNlZSBtdXN0CitjYXVzZSBhbnkgRGVyaXZhdGl2ZSBXb3JrIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGUgV29yayBoYXMgYmVlbgorbW9kaWZpZWQgYW5kIHRoZSBkYXRlIG9mIG1vZGlmaWNhdGlvbi4KK0NvcHlsZWZ0IGNsYXVzZTogSWYgdGhlIExpY2Vuc2VlIGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMgY29waWVzIG9mIHRoZQorT3JpZ2luYWwgV29ya3Mgb3IgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrLCB0aGlzIERpc3RyaWJ1dGlvbgorYW5kL29yIENvbW11bmljYXRpb24gd2lsbCBiZSBkb25lIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2VuY2Ugb3Igb2YgYSBsYXRlcgordmVyc2lvbiBvZiB0aGlzIExpY2VuY2UgdW5sZXNzIHRoZSBPcmlnaW5hbCBXb3JrIGlzIGV4cHJlc3NseSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyCit0aGlzIHZlcnNpb24gb2YgdGhlIExpY2VuY2UuIFRoZSBMaWNlbnNlZSAoYmVjb21pbmcgTGljZW5zb3IpIGNhbm5vdCBvZmZlciBvciBpbXBvc2UKK2FueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb24gdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrIHRoYXQgYWx0ZXIgb3IKK3Jlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5jZS4KK0NvbXBhdGliaWxpdHkgY2xhdXNlOiBJZiB0aGUgTGljZW5zZWUgRGlzdHJpYnV0ZXMgYW5kL29yIENvbW11bmljYXRlcyBEZXJpdmF0aXZlCitXb3JrcyBvciBjb3BpZXMgdGhlcmVvZiBiYXNlZCB1cG9uIGJvdGggdGhlIE9yaWdpbmFsIFdvcmsgYW5kIGFub3RoZXIgd29yaworbGljZW5zZWQgdW5kZXIgYSBDb21wYXRpYmxlIExpY2VuY2UsIHRoaXMgRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uIGNhbiBiZQorZG9uZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBDb21wYXRpYmxlIExpY2VuY2UuIEZvciB0aGUgc2FrZSBvZiB0aGlzIGNsYXVzZSwKKyYjODIyMDtDb21wYXRpYmxlIExpY2VuY2UmIzgyMjE7IHJlZmVycyB0byB0aGUgbGljZW5jZXMgbGlzdGVkIGluIHRoZSBhcHBlbmRpeCBhdHRhY2hlZCB0byB0aGlzCitMaWNlbmNlLiBTaG91bGQgdGhlIExpY2Vuc2VlJiM4MjE3O3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhlIENvbXBhdGlibGUgTGljZW5jZSBjb25mbGljdAord2l0aCBoaXMvaGVyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5jZSwgdGhlIG9ibGlnYXRpb25zIG9mIHRoZSBDb21wYXRpYmxlIExpY2VuY2UKK3NoYWxsIHByZXZhaWwuCitQcm92aXNpb24gb2YgU291cmNlIENvZGU6IFdoZW4gZGlzdHJpYnV0aW5nIGFuZC9vciBjb21tdW5pY2F0aW5nIGNvcGllcyBvZiB0aGUKK1dvcmssIHRoZSBMaWNlbnNlZSB3aWxsIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9yCitpbmRpY2F0ZSBhIHJlcG9zaXRvcnkgd2hlcmUgdGhpcyBTb3VyY2Ugd2lsbCBiZSBlYXNpbHkgYW5kIGZyZWVseSBhdmFpbGFibGUgZm9yIGFzIGxvbmcKK2FzIHRoZSBMaWNlbnNlZSBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSBhbmQvb3IgY29tbXVuaWNhdGUgdGhlIFdvcmsuCitMZWdhbCBQcm90ZWN0aW9uOiBUaGlzIExpY2VuY2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlIG5hbWVzLAordHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgbmFtZXMgb2YgdGhlIExpY2Vuc29yLCBleGNlcHQgYXMgcmVxdWlyZWQgZm9yCityZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcKK3RoZSBjb250ZW50IG9mIHRoZSBjb3B5cmlnaHQgbm90aWNlLgorNi4gQ2hhaW4gb2YgQXV0aG9yc2hpcAorVGhlIG9yaWdpbmFsIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiB0aGUgT3JpZ2luYWwgV29yayBncmFudGVkCitoZXJldW5kZXIgaXMgb3duZWQgYnkgaGltL2hlciBvciBsaWNlbnNlZCB0byBoaW0vaGVyIGFuZCB0aGF0IGhlL3NoZSBoYXMgdGhlIHBvd2VyCithbmQgYXV0aG9yaXR5IHRvIGdyYW50IHRoZSBMaWNlbmNlLgorRWFjaCBDb250cmlidXRvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gdGhlIG1vZGlmaWNhdGlvbnMgaGUvc2hlIGJyaW5ncyB0byB0aGUKK1dvcmsgYXJlIG93bmVkIGJ5IGhpbS9oZXIgb3IgbGljZW5zZWQgdG8gaGltL2hlciBhbmQgdGhhdCBoZS9zaGUgaGFzIHRoZSBwb3dlciBhbmQKK2F1dGhvcml0eSB0byBncmFudCB0aGUgTGljZW5jZS4KK0VhY2ggdGltZSBZb3UgYWNjZXB0IHRoZSBMaWNlbmNlLCB0aGUgb3JpZ2luYWwgTGljZW5zb3IgYW5kIHN1YnNlcXVlbnQgQ29udHJpYnV0b3JzCitncmFudCBZb3UgYSBsaWNlbmNlIHRvIHRoZWlyIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIFdvcmssIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbmNlLgorNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eQorVGhlIFdvcmsgaXMgYSB3b3JrIGluIHByb2dyZXNzLCB3aGljaCBpcyBjb250aW51b3VzbHkgaW1wcm92ZWQgYnkgbnVtZXJvdXMKK2NvbnRyaWJ1dG9ycy4gSXQgaXMgbm90IGEgZmluaXNoZWQgd29yayBhbmQgbWF5IHRoZXJlZm9yZSBjb250YWluIGRlZmVjdHMgb3IgJiM4MjIwO2J1Z3MmIzgyMjE7CitpbmhlcmVudCB0byB0aGlzIHR5cGUgb2Ygc29mdHdhcmUgZGV2ZWxvcG1lbnQuCitGb3IgdGhlIGFib3ZlIHJlYXNvbiwgdGhlIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhlIExpY2VuY2Ugb24gYW4gJiM4MjIwO2FzIGlzJiM4MjIxOyBiYXNpcyBhbmQKK3dpdGhvdXQgd2FycmFudGllcyBvZiBhbnkga2luZCBjb25jZXJuaW5nIHRoZSBXb3JrLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCittZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCBhYnNlbmNlIG9mIGRlZmVjdHMgb3IgZXJyb3JzLAorYWNjdXJhY3ksIG5vbi1pbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvdGhlciB0aGFuIGNvcHlyaWdodCBhcworc3RhdGVkIGluIEFydGljbGUgNiBvZiB0aGlzIExpY2VuY2UuCitUaGlzIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgaXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhlIExpY2VuY2UgYW5kIGEgY29uZGl0aW9uIGZvciB0aGUKK2dyYW50IG9mIGFueSByaWdodHMgdG8gdGhlIFdvcmsuCis4LiBEaXNjbGFpbWVyIG9mIExpYWJpbGl0eQorRXhjZXB0IGluIHRoZSBjYXNlcyBvZiB3aWxmdWwgbWlzY29uZHVjdCBvciBkYW1hZ2VzIGRpcmVjdGx5IGNhdXNlZCB0byBuYXR1cmFsCitwZXJzb25zLCB0aGUgTGljZW5zb3Igd2lsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueSBkaXJlY3Qgb3IgaW5kaXJlY3QsIG1hdGVyaWFsIG9yCittb3JhbCwgZGFtYWdlcyBvZiBhbnkga2luZCwgYXJpc2luZyBvdXQgb2YgdGhlIExpY2VuY2Ugb3Igb2YgdGhlIHVzZSBvZiB0aGUgV29yaywKK2luY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyCitmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBsb3NzIG9mIGRhdGEgb3IgYW55IGNvbW1lcmNpYWwgZGFtYWdlLCBldmVuIGlmIHRoZSBMaWNlbnNvcgoraGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2UuIEhvd2V2ZXIsIHRoZSBMaWNlbnNvciB3aWxsIGJlCitsaWFibGUgdW5kZXIgc3RhdHV0b3J5IHByb2R1Y3QgbGlhYmlsaXR5IGxhd3MgYXMgZmFyIHN1Y2ggbGF3cyBhcHBseSB0byB0aGUgV29yay4KKzkuIEFkZGl0aW9uYWwgYWdyZWVtZW50cworV2hpbGUgZGlzdHJpYnV0aW5nIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MsIFlvdSBtYXkgY2hvb3NlIHRvCitjb25jbHVkZSBhbiBhZGRpdGlvbmFsIGFncmVlbWVudCB0byBvZmZlciwgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwKK3dhcnJhbnR5LCBpbmRlbW5pdHksIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3Igc2VydmljZXMgY29uc2lzdGVudCB3aXRoIHRoaXMKK0xpY2VuY2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5IG9uIHlvdXIgb3duCitiZWhhbGYgYW5kIG9uIHlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZiBvZiB0aGUgb3JpZ2luYWwgTGljZW5zb3Igb3IgYW55CitvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kLCBhbmQgaG9sZCBlYWNoCitDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3Qgc3VjaAorQ29udHJpYnV0b3IgYnkgdGhlIGZhY3QgWW91IGhhdmUgYWNjZXB0ZWQgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisxMC4gQWNjZXB0YW5jZSBvZiB0aGUgTGljZW5jZQorVGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbmNlIGNhbiBiZSBhY2NlcHRlZCBieSBjbGlja2luZyBvbiBhbiBpY29uICYjODIyMDtJIGFncmVlJiM4MjIxOworcGxhY2VkIHVuZGVyIHRoZSBib3R0b20gb2YgYSB3aW5kb3cgZGlzcGxheWluZyB0aGUgdGV4dCBvZiB0aGlzIExpY2VuY2Ugb3IgYnkKK2FmZmlybWluZyBjb25zZW50IGluIGFueSBvdGhlciBzaW1pbGFyIHdheSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBydWxlcyBvZiBhcHBsaWNhYmxlCitsYXcuIENsaWNraW5nIG9uIHRoYXQgaWNvbiBpbmRpY2F0ZXMgeW91ciBjbGVhciBhbmQgaXJyZXZvY2FibGUgYWNjZXB0YW5jZSBvZiB0aGlzCitMaWNlbmNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorU2ltaWxhcmx5LCB5b3UgaXJyZXZvY2FibHkgYWNjZXB0IHRoaXMgTGljZW5jZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBieQorZXhlcmNpc2luZyBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IEFydGljbGUgMiBvZiB0aGlzIExpY2VuY2UsIHN1Y2ggYXMgdGhlIHVzZSBvZgordGhlIFdvcmssIHRoZSBjcmVhdGlvbiBieSBZb3Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgdGhlIERpc3RyaWJ1dGlvbiBhbmQvb3IKK0NvbW11bmljYXRpb24gYnkgWW91IG9mIHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLgorMTEuIEluZm9ybWF0aW9uIHRvIHRoZSBwdWJsaWMKK0luIGNhc2Ugb2YgYW55IERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbiBvZiB0aGUgV29yayBieSBtZWFucyBvZiBlbGVjdHJvbmljCitjb21tdW5pY2F0aW9uIGJ5IFlvdSAoZm9yIGV4YW1wbGUsIGJ5IG9mZmVyaW5nIHRvIGRvd25sb2FkIHRoZSBXb3JrIGZyb20gYQorcmVtb3RlIGxvY2F0aW9uKSB0aGUgZGlzdHJpYnV0aW9uIGNoYW5uZWwgb3IgbWVkaWEgKGZvciBleGFtcGxlLCBhIHdlYnNpdGUpIG11c3QgYXQKK2xlYXN0IHByb3ZpZGUgdG8gdGhlIHB1YmxpYyB0aGUgaW5mb3JtYXRpb24gcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhYmxlIGxhdyByZWdhcmRpbmcKK3RoZSBMaWNlbnNvciwgdGhlIExpY2VuY2UgYW5kIHRoZSB3YXkgaXQgbWF5IGJlIGFjY2Vzc2libGUsIGNvbmNsdWRlZCwgc3RvcmVkIGFuZAorcmVwcm9kdWNlZCBieSB0aGUgTGljZW5zZWUuCisxMi4gVGVybWluYXRpb24gb2YgdGhlIExpY2VuY2UKK1RoZSBMaWNlbmNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkKK2JyZWFjaCBieSB0aGUgTGljZW5zZWUgb2YgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbmNlLgorU3VjaCBhIHRlcm1pbmF0aW9uIHdpbGwgbm90IHRlcm1pbmF0ZSB0aGUgbGljZW5jZXMgb2YgYW55IHBlcnNvbiB3aG8gaGFzIHJlY2VpdmVkIHRoZQorV29yayBmcm9tIHRoZSBMaWNlbnNlZSB1bmRlciB0aGUgTGljZW5jZSwgcHJvdmlkZWQgc3VjaCBwZXJzb25zIHJlbWFpbiBpbiBmdWxsCitjb21wbGlhbmNlIHdpdGggdGhlIExpY2VuY2UuCisxMy4gTWlzY2VsbGFuZW91cworV2l0aG91dCBwcmVqdWRpY2Ugb2YgQXJ0aWNsZSA5IGFib3ZlLCB0aGUgTGljZW5jZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQKK2JldHdlZW4gdGhlIFBhcnRpZXMgYXMgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZXVuZGVyLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5jZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIHRoaXMKK3dpbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIExpY2VuY2UgYXMgYSB3aG9sZS4gU3VjaCBwcm92aXNpb24KK3dpbGwgYmUgY29uc3RydWVkIGFuZC9vciByZWZvcm1lZCBzbyBhcyBuZWNlc3NhcnkgdG8gbWFrZSBpdCB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitUaGUgRXVyb3BlYW4gQ29tbWlzc2lvbiBtYXkgcHVibGlzaCBvdGhlciBsaW5ndWlzdGljIHZlcnNpb25zIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoaXMgTGljZW5jZSwgc28gZmFyIHRoaXMgaXMgcmVxdWlyZWQgYW5kIHJlYXNvbmFibGUsIHdpdGhvdXQgcmVkdWNpbmcgdGhlIHNjb3BlIG9mCit0aGUgcmlnaHRzIGdyYW50ZWQgYnkgdGhlIExpY2VuY2UuIE5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5jZSB3aWxsIGJlIHB1Ymxpc2hlZCB3aXRoCithIHVuaXF1ZSB2ZXJzaW9uIG51bWJlci4KK0FsbCBsaW5ndWlzdGljIHZlcnNpb25zIG9mIHRoaXMgTGljZW5jZSwgYXBwcm92ZWQgYnkgdGhlIEV1cm9wZWFuIENvbW1pc3Npb24sIGhhdmUKK2lkZW50aWNhbCB2YWx1ZS4gUGFydGllcyBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGxpbmd1aXN0aWMgdmVyc2lvbiBvZiB0aGVpciBjaG9pY2UuCisxNC4gSnVyaXNkaWN0aW9uCitBbnkgbGl0aWdhdGlvbiByZXN1bHRpbmcgZnJvbSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBMaWNlbnNlLCBhcmlzaW5nIGJldHdlZW4gdGhlCitFdXJvcGVhbiBDb21taXNzaW9uLCBhcyBhIExpY2Vuc29yLCBhbmQgYW55IExpY2Vuc2VlLCB3aWxsIGJlIHN1YmplY3QgdG8gdGhlCitqdXJpc2RpY3Rpb24gb2YgdGhlIENvdXJ0IG9mIEp1c3RpY2Ugb2YgdGhlIEV1cm9wZWFuIENvbW11bml0aWVzLCBhcyBsYWlkIGRvd24gaW4KK2FydGljbGUgMjM4IG9mIHRoZSBUcmVhdHkgZXN0YWJsaXNoaW5nIHRoZSBFdXJvcGVhbiBDb21tdW5pdHkuCitBbnkgbGl0aWdhdGlvbiBhcmlzaW5nIGJldHdlZW4gUGFydGllcywgb3RoZXIgdGhhbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgYW5kCityZXN1bHRpbmcgZnJvbSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBMaWNlbnNlLCB3aWxsIGJlIHN1YmplY3QgdG8gdGhlIGV4Y2x1c2l2ZQoranVyaXNkaWN0aW9uIG9mIHRoZSBjb21wZXRlbnQgY291cnQgd2hlcmUgdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgY29uZHVjdHMgaXRzIHByaW1hcnkKK2J1c2luZXNzLgorMTUuIEFwcGxpY2FibGUgTGF3CitUaGlzIExpY2VuY2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhdyBvZiB0aGUgRXVyb3BlYW4gVW5pb24gY291bnRyeSB3aGVyZSB0aGUKK0xpY2Vuc29yIHJlc2lkZXMgb3IgaGFzIGhpcyByZWdpc3RlcmVkIG9mZmljZS4KK1RoaXMgbGljZW5jZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgQmVsZ2lhbiBsYXcgaWY6CistIGEgbGl0aWdhdGlvbiBhcmlzZXMgYmV0d2VlbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgYXMgYSBMaWNlbnNvciwgYW5kIGFueQorTGljZW5zZWU7CistIHRoZSBMaWNlbnNvciwgb3RoZXIgdGhhbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgaGFzIG5vIHJlc2lkZW5jZSBvcgorcmVnaXN0ZXJlZCBvZmZpY2UgaW5zaWRlIGEgRXVyb3BlYW4gVW5pb24gY291bnRyeS4KKz09PQorQXBwZW5kaXgKKyYjODIyMDtDb21wYXRpYmxlIExpY2VuY2VzJiM4MjIxOyBhY2NvcmRpbmcgdG8gYXJ0aWNsZSA1IEVVUEwgYXJlOgorLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR05VIEdQTCkgdi4gMgorLSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCkgdi4gMi4xLCB2LiAzLjAKKy0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYuIDEuMAorLSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDEuMAorLSBDZWNpbGwgdi4gMi4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRWxmdXRpbHMtRXhjZXB0aW9uIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FbGZ1dGlscy1FeGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3ZDc2OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRWxmdXRpbHMtRXhjZXB0aW9uCkBAIC0wLDAgKzEsMTIgQEAKKyAgIFRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGxpbWl0cyBvZiB0aGUgRXhjZXB0aW9uIHVuZGVyIHdoaWNoIHlvdSBhcmUgYWxsb3dlZAorICAgdG8gZGlzdHJpYnV0ZSBOb24tR1BMIENvZGUgaW4gbGlua2VkIGNvbWJpbmF0aW9uIHdpdGggUmVkIEhhdCBlbGZ1dGlscy4KKyAgIEZvciB0aGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlLCBwbGVhc2Ugc2VlIG9uZSBvZiB0aGUgaGVhZGVyIGZpbGVzCisgICBpbmNsdWRlZCB3aXRoIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uIG9yIHRoZSBmaWxlIENPUFlJTkcgZm91bmQgaW4gdGhlCisgICB0b3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UuCisKKyAgIFRoZSBBcHByb3ZlZCBJbnRlcmZhY2VzIGFyZSB0aGUgZnVuY3Rpb25zIGRlY2xhcmVkIGluIHRoZSBmaWxlczoKKworICAgbGliZWxmLmgKKyAgIGxpYmR3LmgKKyAgIGxpYmR3ZmwuaAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VudGVzc2EgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VudGVzc2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRkYWRkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRW50ZXNzYQpAQCAtMCwwICsxLDIwIEBACisKK0VudGVzc2EgUHVibGljIExpY2Vuc2UgVmVyc2lvbi4gMS4wCitDb3B5cmlnaHQgKGMpIDIwMDMgRW50ZXNzYSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK1RoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLCBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAKKyJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgb3BlbiBzb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IG9wZW5TRUFMIChodHRwOi8vd3d3Lm9wZW5zZWFsLm9yZy8pLiIKKworQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLCBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgorCitUaGUgbmFtZXMgIm9wZW5TRUFMIiBhbmQgIkVudGVzc2EiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBlcGxAZW50ZXNzYS5jb20uCitQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAib3BlblNFQUwiLCBub3IgbWF5ICJvcGVuU0VBTCIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIEVudGVzc2EuCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVOVEVTU0EsIExMQywgT1BFTlNFQUwgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueSBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2Ygb3BlblNFQUwgYW5kIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIGJ5IEVudGVzc2EsIExMQywgaHR0cDovL3d3dy5lbnRlc3NhLmNvbS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIG9wZW5TRUFMLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3Lm9wZW5zZWFsLm9yZy8+LgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VybFBMLTEuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRXJsUEwtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NjFjY2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VybFBMLTEuMQpAQCAtMCwwICsxLDI4OCBAQAorCitFUkxBTkcgUFVCTElDIExJQ0VOU0UKK1ZlcnNpb24gMS4xCisKKzEuIERlZmluaXRpb25zLgorCisxLjEuIGBgQ29udHJpYnV0b3JgYCBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8KK3RoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjIuIGBgQ29udHJpYnV0b3IgVmVyc2lvbmBgIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwKK0NvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMKK21hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuIGBgQ292ZXJlZCBDb2RlYGAgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUKK2NvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UKK2luY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQuIGBgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtYGAgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5CithY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYwordHJhbnNmZXIgb2YgZGF0YS4KKworMS41LiBgYEV4ZWN1dGFibGVgYCBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UKK0NvZGUuCisKKzEuNi4gYGBJbml0aWFsIERldmVsb3BlcmBgIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkCithcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0CitBLgorCisxLjcuIGBgTGFyZ2VyIFdvcmtgYCBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yCitwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS44LiBgYExpY2Vuc2VgYCBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjkuIGBgTW9kaWZpY2F0aW9uc2BgIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZQorc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzCitNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYQorTW9kaWZpY2F0aW9uIGlzOgorCitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcKKyAgIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gCisKK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yCisgICBwcmV2aW91cyBNb2RpZmljYXRpb25zLiAKKworMS4xMC4gYGBPcmlnaW5hbCBDb2RlYGAgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZQord2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzCitPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMS4gYGBTb3VyY2UgQ29kZWBgIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cworYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sCitjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIGEgbGlzdCBvZiBzb3VyY2UKK2NvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yCithbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMKK2Nob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwKK3Byb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcword2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorCisxLjEyLiBgYFlvdWBgIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMKK3VuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwKK2VudGl0aWVzLGBgWW91YGAgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwKK29yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorYGBjb250cm9sYGAgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKK2RpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCitvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKK25vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK2NsYWltczoKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kCisgICAgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0CisgICAgTW9kaWZpY2F0aW9ucywgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQgCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBJbml0aWFsCisgICAgRGV2ZWxvcGVyLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoYGBVdGlsaXplYGApIHRoZQorICAgIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdAorICAgIGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIFV0aWxpemUKKyAgICB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgYW5kIG5vdCB0byBhbnkgZ3JlYXRlcgorICAgIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IKKyAgICBjb21iaW5hdGlvbnMuIAorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorRWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKK25vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK2NsYWltczoKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kCisgICAgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yCisgICAgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIKKyAgICBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQgCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwKKyAgICB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0CisgICAgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkKKyAgICB0byBlbmFibGUgWW91IHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zCisgICAgdGhlcmVvZiksIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0bworICAgIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4gCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlCitDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcworb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGgKK2V2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvcgoraW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMKK3RoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMKK2hlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcKK3RoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuIAorCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UKK0NvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcworYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbgorTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7CithbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdAorcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0Citpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYQorc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZQorYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdAordGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYworRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhCitmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQKK3RoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQKK3RoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbAorQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbgorRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlCitvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KKyAgICBJZiBZb3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIHBhcnR5IGNsYWltcyBhbiBpbnRlbGxlY3R1YWwgcHJvcGVydHkKKyAgICByaWdodCBpbiBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkgb3IgY29kZSAob3IgaXRzIHV0aWxpemF0aW9uCisgICAgdW5kZXIgdGhpcyBMaWNlbnNlKSwgeW91IG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBzb3VyY2UKKyAgICBjb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgYGBMRUdBTGBgIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kCisgICAgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudAorICAgIHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIHlvdSBvYnRhaW4gc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgWW91CisgICAgbWFrZSBZb3VyIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBZb3UKKyAgICBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBZb3UgbWFrZQorICAgIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZworICAgIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvCisgICAgaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMKKyAgICBiZWVuIG9idGFpbmVkLiAKKworKGIpIENvbnRyaWJ1dG9yIEFQSXMuCisgICAgSWYgWW91ciBNb2RpZmljYXRpb24gaXMgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZAorICAgIFlvdSBvd24gb3IgY29udHJvbCBwYXRlbnRzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0bworICAgIGltcGxlbWVudCB0aGF0IEFQSSwgeW91IG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlCisgICAgTEVHQUwgZmlsZS4gCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4KK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZQorQ29kZSwgYW5kIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlLCB3aGVyZQorWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIElmIFlvdQorY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocyksIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhCitDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIElmIGl0IGlzIG5vdAorcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0bworaXRzIHN0cnVjdHVyZSwgdGhlbiB5b3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2gKK2FzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3IKK3N1Y2ggYSBub3RpY2UuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwKK3dhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlCityZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duCitiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkKK0NvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwKK3N1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwKK2FuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5CitDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IKK3N1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvcgorbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlCityZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLAorYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZgordGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKK2luY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZQorb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkCitpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yCitjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gdGhlCitDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQKK0NvZGUgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQKK2Zyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcworb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMKK25vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZQorQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UKK2Rpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0CittYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlCithcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55CitDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZAorZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyCitvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKworMy43LiBMYXJnZXIgV29ya3MuCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlCitub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyCitXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlCityZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUKK29yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKK3RvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kCit0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTAorZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwKK2Rpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5CitzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQKK2ZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCisKKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzCithdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSwgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorCis2LiBDT05ORUNUSU9OIFRPIE1PWklMTEEgUFVCTElDIExJQ0VOU0UKKworVGhpcyBFcmxhbmcgTGljZW5zZSBpcyBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTW96aWxsYSBQdWJsaWMKK0xpY2Vuc2UsIFZlcnNpb24gMS4wLiBJdCBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgTW96aWxsYQorUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMS4wLgorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIGBgQVMgSVNgYCBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GCitERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IKK05PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GCitUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUKK0lOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSCitDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IKK0NPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVAorT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUgorRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04uCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUKK2F1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUKK3N1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbAorc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbAorc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpcgorbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UKK3NoYWxsIHN1cnZpdmUuCisKKzkuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCitBbnkgdXRpbGl6YXRpb24gb2YgQ292ZXJlZCBDb2RlIHNoYWxsIG5vdCBjYXVzZSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIKK29yIGFueSBDb250cmlidXRvciB0byBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIChuZWl0aGVyIGRpcmVjdCBub3IKK2luZGlyZWN0KS4KKworMTAuIE1JU0NFTExBTkVPVVMKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyB0aGUgc3ViamVjdAorbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2gKK3Byb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQKK2VuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGJ5IGFuZCBpbiBhY2NvcmRhbmNlIHdpdGgKK3RoZSBzdWJzdGFudGl2ZSBsYXdzIG9mIFN3ZWRlbi4gQW55IGRpc3B1dGUsIGNvbnRyb3ZlcnN5IG9yIGNsYWltCithcmlzaW5nIG91dCBvZiBvciByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UsIG9yIHRoZSBicmVhY2gsIHRlcm1pbmF0aW9uCitvciBpbnZhbGlkaXR5IHRoZXJlb2YsIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24KK29mIFN3ZWRpc2ggY291cnRzLCB3aXRoIHRoZSBTdG9ja2hvbG0gQ2l0eSBDb3VydCBhcyB0aGUgZmlyc3QKK2luc3RhbmNlLgorIAorRVhISUJJVCBBLgorCitgYFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIEVybGFuZyBQdWJsaWMgTGljZW5zZSwKK1ZlcnNpb24gMS4xLCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCitjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlCitFcmxhbmcgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlLiBJZiBub3QsIGl0IGNhbiBiZQorcmV0cmlldmVkIHZpYSB0aGUgd29ybGQgd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5lcmxhbmcub3JnLy4KKworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZQordGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBFcmljc3NvbiBVdHZlY2tsaW5ncyBBQi4KK1BvcnRpb25zIGNyZWF0ZWQgYnkgRXJpY3Nzb24gYXJlIENvcHlyaWdodCAxOTk5LCBFcmljc3NvbiBVdHZlY2tsaW5ncworQUIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuYGAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GU0YtVW5saW1pdGVkIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GU0YtVW5saW1pdGVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMGE5ODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZTRi1VbmxpbWl0ZWQKQEAgLTAsMCArMSw0IEBACitDb3B5cmlnaHQgKEMpIDE5OTctMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAord2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GYWlyIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GYWlyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NWIwMWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZhaXIKQEAgLTAsMCArMSwxMSBAQAorCitGYWlyIExpY2Vuc2UKKyhwbGFpbiB0ZXh0KQorPENvcHlyaWdodCBJbmZvcm1hdGlvbj4KKworVXNhZ2Ugb2YgdGhlIHdvcmtzIGlzIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoaXMgaW5zdHJ1bWVudCBpcyByZXRhaW5lZCB3aXRoIHRoZSB3b3Jrcywgc28gdGhhdCBhbnkgZW50aXR5IHRoYXQgdXNlcyB0aGUgd29ya3MgaXMgbm90aWZpZWQgb2YgdGhpcyBpbnN0cnVtZW50LgorCitESVNDTEFJTUVSOiBUSEUgV09SS1MgQVJFIFdJVEhPVVQgV0FSUkFOVFkuCisKK1syMDA0LCBGYWlyIExpY2Vuc2U6IHJoaWQuY29tL2ZhaXIgKHRoaXMgVVJMIG5vIGxvbmdlciB3b3JrcyldCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRnJhbWV3b3J4LTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRnJhbWV3b3J4LTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWJiMTg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GcmFtZXdvcngtMS4wCkBAIC0wLDAgKzEsNjkgQEAKKworVEhFIEZSQU1FV09SWCBPUEVOIExJQ0VOU0UgMS4wCitUaGlzIExpY2Vuc2UgQWdyZWVtZW50LCBUaGUgRnJhbWV3b3J4IE9wZW4gTGljZW5zZSAxLjAsIGhhcyBiZWVuIGVudGVyZWQgaW50byBiZXR3ZWVuIFRoZSBGcmFtZXdvcnggQ29tcGFueSBhbmQgeW91LCB0aGUgbGljZW5zZWUgaGVyZXVuZGVyLCBlZmZlY3RpdmUgYXMgb2YgWW91ciBhY2NlcHRhbmNlIG9mIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIG9yIGFuIERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIChlYWNoIGFzIGRlZmluZWQgYmVsb3cpLgorCitBR1JFRU1FTlQgQkFDS0dST1VORAorVGhlIEZyYW1ld29yeCBDb21wYW55IGlzIGNvbW1pdHRlZCB0byB0aGUgYmVsaWVmIHRoYXQgb3BlbiBzb3VyY2Ugc29mdHdhcmUgcmVzdWx0cyBpbiBiZXR0ZXIgcXVhbGl0eSwgZ3JlYXRlciB0ZWNobmljYWwgYW5kIHByb2R1Y3QgaW5ub3ZhdGlvbiBpbiB0aGUgbWFya2V0IHBsYWNlIGFuZCBhIG1vcmUgZW1wb3dlcmVkIGFuZCBwcm9kdWN0aXZlIGRldmVsb3BlciBhbmQgZW5kLXVzZXIgY29tbXVuaXR5LiBPdXIgb2JqZWN0aXZlIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBpbXByb3ZlbWVudHMgYW5kIGlubm92YXRpb25zIHRvIGl0LCByZW1haW4gZnJlZSBhbmQgb3BlbiB0byB0aGUgY29tbXVuaXR5LlRvIGZ1cnRoZXIgdGhlc2UgYmVsaWVmcyBhbmQgb2JqZWN0aXZlcywgd2UgYXJlIGRpc3RyaWJ1dGluZyB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSwgd2l0aG91dCByb3lhbHRpZXMgYW5kIGluIHNvdXJjZSBjb2RlIGZvcm0sIHRvIHRoZSBjb21tdW5pdHkgcHVyc3VhbnQgdG8gdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KKworQUdSRUVNRU5UIFRFUk1TCitUaGUgRnJhbWV3b3J4IENvbXBhbnkgYW5kIFlvdSBoYXZlIGFncmVlZCBhcyBmb2xsb3dzOgorMS5EZWZpbml0aW9ucy5UaGUgZm9sbG93aW5nIHRlcm1zIGhhdmUgdGhlIGZvbGxvd2luZyByZXNwZWN0aXZlIG1lYW5pbmdzOgorCisoYSkgICAgIEZyYW1ld29yeCBDb2RlIEJhc2UgbWVhbnMgdGhlIHNvZnR3YXJlIGRldmVsb3BlZCBieSBUaGUgRnJhbWV3b3J4IENvbXBhbnkgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQKKworKGIpICAgICBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiBtZWFucyBhbnkgZGlyZWN0IG9yIGluZGlyZWN0IHJlbGVhc2UsIGRpc3RyaWJ1dGlvbiBvciByZW1vdGUgYXZhaWxhYmlsaXR5IG9mIHNvZnR3YXJlIChpKSB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgY29udGFpbnMsIG9yIGRlcGVuZHMgZm9yIGl0cyBpbnRlbmRlZCBmdW5jdGlvbmluZyBvbiwgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2Ugb3IgYW55IHBvcnRpb24gb3IgZWxlbWVudCB0aGVyZW9mIGFuZCAoaWkpIGluIHdoaWNoIHJpZ2h0cyB0byB1c2UgYW5kIGRpc3RyaWJ1dGUgc3VjaCBGcmFtZXdvcnggQ29kZSBCYXNlIHNvZnR3YXJlIGRlcGVuZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb24gdGhlIExpY2Vuc2UgcHJvdmlkZWQgaW4gU2VjdGlvbiAyIGJlbG93LgorCisoYykgICAgICJTb3VyY2UgQ29kZSIgdG8gYW55IHNvZnR3YXJlIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhhdCBzb2Z0d2FyZSwgaW5jbHVkaW5nIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFuZCBjb21waWxhdGlvbiBvciBpbnN0YWxsYXRpb24gc2NyaXB0cywgb3IgYW55IHZlcnNpb24gdGhlcmVvZiB0aGF0IGhhcyBiZWVuIGNvbXByZXNzZWQgb3IgYXJjaGl2ZWQsIGFuZCBjYW4gYmUgcmVjb25zdGl0dXRlZCwgdXNpbmcgYW4gYXBwcm9wcmlhdGUgYW5kIGdlbmVyYWxseSBhdmFpbGFibGUgYXJjaGl2YWwgb3IgY29tcHJlc3Npb24gdGVjaG5vbG9neS4KKworKGQpICAgICBWYWx1ZS1BZGRlZCBTZXJ2aWNlcyBtZWFucyBhbnkgY29tbWVyY2lhbCBvciBmZWUtYmFzZWQgc29mdHdhcmUtcmVsYXRlZCBzZXJ2aWNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uOiBzeXN0ZW0gb3IgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgb3IgY29uc3VsdGluZzsgdGVjaG5pY2FsIG9yIGVuZC11c2VyIHN1cHBvcnQgb3IgdHJhaW5pbmc7IGRpc3RyaWJ1dGlvbiBtYWludGVuYW5jZSwgY29uZmlndXJhdGlvbiBvciB2ZXJzaW9uaW5nOyBvciBvdXRzb3VyY2VkLCBob3N0ZWQgb3IgbmV0d29yay1iYXNlZCBhcHBsaWNhdGlvbiBzZXJ2aWNlcy4KKworMi4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgaGVyZW9mLCBUaGUgRnJhbWV3b3J4IENvbXBhbnkgaGVyZWJ5IGdyYW50cyBZb3UgYSBub24tZXhjbHVzaXZlIGxpY2Vuc2UgKHRoZSBMaWNlbnNlKSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBhbmQgZm9yIG5vIGZlZSBvdGhlciB0aGFuIGEgbm9taW5hbCBjaGFyZ2UgcmVmbGVjdGluZyB0aGUgY29zdHMgb2YgcGh5c2ljYWwgZGlzdHJpYnV0aW9uLCB0bzoKKworKGEpICAgICB1c2UgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UsIGluIGVpdGhlciBTb3VyY2UgQ29kZSBvciBtYWNoaW5lLXJlYWRhYmxlIGZvcm07CisKKyhiKSAgICAgbWFrZSBtb2RpZmljYXRpb25zLCBhZGRpdGlvbnMgYW5kIGRlbGV0aW9ucyB0byB0aGUgY29udGVudCBvciBzdHJ1Y3R1cmUgb2YgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2U7IG9yCisKKyhjKSAgICAgY3JlYXRlIGxhcmdlciB3b3JrcyBvciBkZXJpdmF0aXZlIHdvcmtzIGluY2x1ZGluZyB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSBvciBhbnkgcG9ydGlvbiBvciBlbGVtZW50IHRoZXJlb2Y7IGFuZAorCisoZCkgICAgIHJlbGVhc2UsIGRpc3RyaWJ1dGUgb3IgbWFrZSBhdmFpbGFibGUsIGVpdGhlciBnZW5lcmFsbHkgb3IgdG8gYW55IHNwZWNpZmljIHRoaXJkLXBhcnR5LCBhbnkgb2YgdGhlIGZvcmVnb2luZyBpbiBTb3VyY2UgQ29kZSBvciBiaW5hcnkgZm9ybS4KKworMy4gTGljZW5zZSBDb25kaXRpb25zLiBUaGUgZ3JhbnQgb2YgdGhlIExpY2Vuc2UgdW5kZXIgU2VjdGlvbiAxIGhlcmVvZiwgYW5kIHlvdXIgZXhlcmNpc2Ugb2YgYWxsIHJpZ2h0cyBpbiBjb25uZWN0aW9uIHdpdGggdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgd2lsbCByZW1haW4gc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLCBhcyB3ZWxsIGFzIHRvIHRoZSBvdGhlciBwcm92aXNpb25zIGhlcmVvZjoKKworKGEpICAgICBDb21wbGV0ZSBTb3VyY2UgQ29kZSBmb3IgYW55IERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgbWFkZSBieSBZb3UgdGhhdCBjb250YWlucywgb3IgZGVwZW5kcyBmb3IgaXRzIGludGVuZGVkIGZ1bmN0aW9uYWxpdHkgb24sIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlLCBvciBhbnkgcG9ydGlvbiBvciBlbGVtZW50IHRoZXJlb2YsIHNoYWxsIGJlIG1hZGUgZnJlZWx5IGF2YWlsYWJsZSB0byBhbGwgdXNlcnMgdGhlcmVvZiBvbiB0ZXJtcyBhbmQgY29uZGl0aW9ucyBubyBtb3JlIHJlc3RyaWN0aXZlLCBhbmQgbm8gbGVzcyBmYXZvcmFibGUgZm9yIGFueSB1c2VyIChpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgd2l0aCByZWdhcmQgdG8gU291cmNlIENvZGUgYXZhaWxhYmlsaXR5IGFuZCByb3lhbHR5LWZyZWUgdXNlKSB0aGFuIHRob3NlIHRlcm1zIGFuZCBjb25kaXRpb25zIHByb3ZpZGVkIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuCisKKyhiKSAgICAgQW55IFZhbHVlLUFkZGVkIFNlcnZpY2VzIHRoYXQgeW91IG9mZmVyIG9yIHByb3ZpZGUsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGluIHJlbGF0aW9uIHRvIGFueSBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiBzaGFsbCBiZSBvZmZlcmVkIGFuZCBwcm92aWRlZCBvbiBjb21tZXJjaWFsIHRlcm1zIHRoYXQgYXJlIHJlYXNvbmFibHkgY29tbWVuc3VyYXRlIHRvIHRoZSBmYWlyIG1hcmtldCB2YWx1ZSBvZiBzdWNoIFZhbHVlLUFkZGVkIFNlcnZpY2VzLiBJbiBhZGRpdGlvbiwgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9uIHdoaWNoIGFueSBzdWNoIFZhbHVlIEFkZGVkIFNlcnZpY2VzIGFyZSBzbyBvZmZlcmVkIG9yIHByb3ZpZGVkIHNoYWxsIGJlIGNvbnNpc3RlbnQgd2l0aCwgYW5kIHNoYWxsIGZ1bGx5IHN1cHBvcnQsIHRoZSBpbnRlbnQgYW5kIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KKworKGMpICAgICBBbGwgRG93bnN0cmVhbSBEaXN0cmlidXRpb25zIHNoYWxsOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkpICAgICAgICAgICAgaW5jbHVkZSBhbGwgcG9ydGlvbnMgYW5kIGVsZW1lbnRzIG9mIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBTb3VyY2UgQ29kZSBvZiBzdWNoIERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIGludG8gYSBmdWxseSBmdW5jdGlvbmFsIG1hY2hpbmUtZXhlY3V0YWJsZSBzeXN0ZW0sIG9yIGFkZGl0aW9uYWwgYnVpbGQgc2NyaXB0cyBvciBjb21wYXJhYmxlIHNvZnR3YXJlIG5lY2Vzc2FyeSBhbmQgc3VmZmljaWVudCBmb3Igc3VjaCBwdXJwb3NlczsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWkpICAgICAgICAgICAgaW5jbHVkZSwgaW4gZWFjaCBmaWxlIGNvbnRhaW5pbmcgYW55IHBvcnRpb24gb3IgZWxlbWVudCBvZiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSwgdGhlIGZvbGxvd2luZyBpZGVudGlmeWluZyBsZWdlbmQ6IFRoaXMgZmlsZSBjb250YWlucyBzb2Z0d2FyZSB0aGF0IGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHVuZGVyIFRoZSBGcmFtZXdvcnggT3BlbiBMaWNlbnNlIDEuMC4gVXNlIGFuZCBkaXN0cmlidXRpb24gaGVyZW9mIGFyZSBzdWJqZWN0IHRvIHRoZSByZXN0cmljdGlvbnMgc2V0IGZvcnRoIHRoZXJlaW4uCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWlpKSAgICAgICAgICAgIGluY2x1ZGUgYWxsIG90aGVyIGNvcHlyaWdodCBub3RpY2VzLCBhdXRob3JzaGlwIGNyZWRpdHMsIHdhcnJhbnR5IGRpc2NsYWltZXJzIChpbmNsdWRpbmcgdGhhdCBwcm92aWRlZCBpbiBTZWN0aW9uIDYgYmVsb3cpLCBsZWdlbmRzLCBkb2N1bWVudGF0aW9uLCBhbm5vdGF0aW9ucyBhbmQgY29tbWVudHMgY29udGFpbmVkIGluIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIGFzIHByb3ZpZGVkIHRvIFlvdSBoZXJldW5kZXI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXYpICAgICAgICAgICAgY29udGFpbiBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGUgaHRtbCBmaWxlIG5hbWVkIGZyYW1ld29yeF9jb21tdW5pdHlfaW52aXRhdGlvbi5odG1sIGluY2x1ZGVkIHdpdGhpbiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSB0aGF0IGFja25vd2xlZGdlcyBuZXcgdXNlcnMgYW5kIHByb3ZpZGVzIHRoZW0gd2l0aCBpbmZvcm1hdGlvbiBvbiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSBjb21tdW5pdHk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2KSAgICAgICAgICAgIGNvbnRhaW4gYW4gdW5hbHRlcmVkIGNvcHkgb2YgdGhlIHRleHQgZmlsZSBuYW1lZCB0aGVfZnJhbWV3b3J4X2xpY2Vuc2UudHh0IGluY2x1ZGVkIHdpdGhpbiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSB0aGF0IGluY2x1ZGVzIGEgdGV4dCBjb3B5IG9mIHRoZSBmb3JtIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQ7IGFuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZpKSAgICAgICAgICAgIHByb21pbmVudGx5IGRpc3BsYXkgdG8gYW55IHZpZXdlciBvciB1c2VyIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBzdWNoIE9wZW4gRG93bnN0cmVhbSBEaXN0cmlidXRpb24sIGluIHRoZSBwbGFjZSBhbmQgbWFubmVyIG5vcm1hbGx5IHVzZWQgZm9yIHN1Y2ggZGlzcGxheXMsIHRoZSBmb2xsb3dpbmcgbGVnZW5kOgorCitTb3VyY2UgY29kZSBsaWNlbnNlZCB1bmRlciBmcm9tIFRoZSBGcmFtZXdvcnggQ29tcGFueSBpcyBjb250YWluZWQgaGVyZWluLCBhbmQgc3VjaCBzb3VyY2UgY29kZSBoYXMgYmVlbiBvYnRhaW5lZCBlaXRoZXIgdW5kZXIgVGhlIEZyYW1ld29yeCBPcGVuIExpY2Vuc2UsIG9yIGFub3RoZXIgbGljZW5zZSBncmFudGVkIGJ5IFRoZSBGcmFtZXdvcnggQ29tcGFueS4gVXNlIGFuZCBkaXN0cmlidXRpb24gaGVyZW9mIGlzIHN1YmplY3QgdG8gdGhlIHJlc3RyaWN0aW9ucyBwcm92aWRlZCBpbiB0aGUgcmVsZXZhbnQgc3VjaCBsaWNlbnNlIGFuZCB0byB0aGUgY29weXJpZ2h0cyBvZiB0aGUgbGljZW5zb3IgdGhlcmV1bmRlci4gQSBjb3B5IG9mIFRoZSBGcmFtZXdvcnggT3BlbiBMaWNlbnNlIGlzIHByb3ZpZGVkIGluIGEgZmlsZSBuYW1lZCB0aGVfZnJhbWV3b3J4X2xpY2Vuc2UudHh0IGFuZCBpbmNsdWRlZCBoZXJlaW4sIGFuZCBtYXkgYWxzbyBiZSBhdmFpbGFibGUgZm9yIGluc3BlY3Rpb24gYXQgaHR0cDovL3d3dy5mcmFtZXdvcnguY29tLgorCis0LiBSZXN0cmljdGlvbnMgb24gT3BlbiBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbnMuIEVhY2ggRG93bnN0cmVhbSBEaXN0cmlidXRpb24gbWFkZSBieSBZb3UsIGFuZCBieSBhbnkgcGFydHkgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBvYnRhaW5pbmcgcmlnaHRzIHRvIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIHRocm91Z2ggWW91LCBzaGFsbCBiZSBtYWRlIHN1YmplY3QgdG8gYSBsaWNlbnNlIGdyYW50IG9yIGFncmVlbWVudCB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSBzbyB0aGF0IGVhY2ggZGlzdHJpYnV0ZWUgdW5kZXIgdGhhdCBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiB3aWxsIGJlIHN1YmplY3QgdG8gdGhlIHNhbWUgcmVzdHJpY3Rpb25zIG9uIHJlLWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGFzIGFyZSBiaW5kaW5nIG9uIFlvdSBoZXJldW5kZXIuIFlvdSBtYXkgc2F0aXNmeSB0aGlzIGxpY2Vuc2luZyByZXF1aXJlbWVudCBlaXRoZXIgYnk6CisKKyhhKSAgICAgcmVxdWlyaW5nIGFzIGEgY29uZGl0aW9uIHRvIGFueSBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiBtYWRlIGJ5IHlvdSwgb3IgYnkgYW55IGRpcmVjdCBvciBpbmRpcmVjdCBkaXN0cmlidXRlZSBvZiBZb3VyIERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIChvciBhbnkgcG9ydGlvbiBvciBlbGVtZW50IHRoZXJlb2YpLCB0aGF0IGVhY2ggZGlzdHJpYnV0ZWUgdW5kZXIgdGhlIHJlbGV2YW50IERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIG9idGFpbiBhIGRpcmVjdCBsaWNlbnNlIChvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aG9zZSBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50KSBmcm9tIFRoZSBGcmFtZXdvcnggQ29tcGFueTsgb3IKKworKGIpICAgICBzdWItbGljZW5zaW5nIGFsbCAoYW5kIG5vdCBsZXNzIHRoYW4gYWxsKSBvZiBZb3VyIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgaGVyZXVuZGVyIHRvIHRoYXQgZGlzdHJpYnV0ZWUsIGluY2x1ZGluZyAod2l0aG91dCBsaW1pdGF0aW9uKSBZb3VyIG9ibGlnYXRpb24gdG8gcmVxdWlyZSBkaXN0cmlidXRlZXMgdG8gYmUgYm91bmQgYnkgbGljZW5zZSByZXN0cmljdGlvbnMgYXMgY29udGVtcGxhdGVkIGJ5IHRoaXMgU2VjdGlvbiA0IGFib3ZlLgorCitUaGUgRnJhbWV3b3J4IENvbXBhbnkgaGVyZWJ5IGdyYW50cyB0byB5b3UgYWxsIHJpZ2h0cyB0byBzdWItbGljZW5zZSB5b3VyIHJpZ2h0cyBoZXJldW5kZXIgYXMgbmVjZXNzYXJ5IHRvIGZ1bGx5IGVmZmVjdCB0aGUgaW50ZW50IGFuZCBwdXJwb3NlIG9mIHRoaXMgU2VjdGlvbiA0IGFib3ZlLCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCB5b3VyIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgaGVyZXVuZGVyIHNoYWxsIGJlIHVuYWZmZWN0ZWQgYnkgYW55IHN1Y2ggc3VibGljZW5zaW5nLiBJbiBhZGRpdGlvbiwgVGhlIEZyYW1ld29yeCBDb21wYW55IGV4cHJlc3NseSByZXRhaW5zIGFsbCByaWdodHMgdG8gdGFrZSBhbGwgYXBwcm9wcmlhdGUgYWN0aW9uIChpbmNsdWRpbmcgbGVnYWwgYWN0aW9uKSBhZ2FpbnN0IGFueSBzdWNoIGRpcmVjdCBvciBpbmRpcmVjdCBzdWItbGljZW5zZWUgdG8gZW5zdXJlIGl0cyBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aGUgaW50ZW50IGFuZCBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorCis1LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkuIEV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgaGVyZWluLCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHByZXNlcnZlcyBhbmQgcmVzcGVjdHMgWW91ciBhbmQgVGhlIEZyYW1ld29yeCBDb21wYW55cyByZXNwZWN0aXZlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMsIGluY2x1ZGluZywgaW4gdGhlIGNhc2Ugb2YgVGhlIEZyYW1ld29yeCBDb21wYW55LCBpdHMgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cyByZWxhdGluZyB0byB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZS4KKworNi4gV2FycmFudHkgRGlzY2xhaW1lci4gVEhFIFNPRlRXQVJFIExJQ0VOU0VEIEhFUkVVTkRFUiBJUyBQUk9WSURFRCBgYEFTIElTLmBgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQsIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIExJQ0VOU09SIE9GIFRISVMgU09GVFdBUkUsIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIElOQ0xVRElORyAoQlVUIE5PVCBMSU1JVEVEIFRPKSBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFkgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworNy4gTGljZW5zZSBWaW9sYXRpb24uIFRoZSBMaWNlbnNlLCBhbmQgYWxsIG9mIHlvdXIgcmlnaHRzIHRoZXJldW5kZXIsIHNoYWxsIGJlIGRlZW1lZCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZWQgYW5kIHZvaWQgYXMgb2YgYW55IERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgbWFkZSBvciBmYWNpbGl0YXRlZCBieSBZb3UgdGhhdCB2aW9sYXRlcyB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIHN1cnZpdmUgYW55IHN1Y2ggdGVybWluYXRpb24gaW4gb3JkZXIgdG8gcmVtZWR5IHRoZSBlZmZlY3RzIG9mIHN1Y2ggdmlvbGF0aW9uLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGJpbmRpbmcgb24gdGhlIGxlZ2FsIHN1Y2Nlc3NvcnMgYW5kIGFzc2lnbnMgb2YgdGhlIHBhcnRpZXMgaGVyZXRvLgorCitZb3VyIGFncmVlbWVudCB0byB0aGUgZm9yZWdvaW5nIGFzIG9mIHRoZSBkYXRlIGhlcmVvZiBoYXMgYmVlbiBldmlkZW5jZWQgYnkgeW91ciBhY2NlcHRhbmNlIG9mIHRoZSByZWxldmFudCBzb2Z0d2FyZSBkaXN0cmlidXRpb24gaGVyZXVuZGVyLgorCisoQykgVEhFIEZSQU1FV09SWCBDT01QQU5ZIDIwMDMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GcmVlVHlwZSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRnJlZVR5cGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdkNGQxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRnJlZVR5cGUKQEAgLTAsMCArMSwxNzAgQEAKKyAgICAgICAgICAgICAgICAgICAgVGhlIEZyZWVUeXBlIFByb2plY3QgTElDRU5TRQorICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDA2LUphbi0yNworCisgICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAxOTk2LTIwMDIsIDIwMDYgYnkKKyAgICAgICAgICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcKKworCisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CisKKyAgVGhlIEZyZWVUeXBlICBQcm9qZWN0IGlzIGRpc3RyaWJ1dGVkIGluICBzZXZlcmFsIGFyY2hpdmUgcGFja2FnZXM7CisgIHNvbWUgb2YgdGhlbSBtYXkgY29udGFpbiwgaW4gYWRkaXRpb24gdG8gdGhlIEZyZWVUeXBlIGZvbnQgZW5naW5lLAorICB2YXJpb3VzIHRvb2xzIGFuZCAgY29udHJpYnV0aW9ucyB3aGljaCByZWx5IG9uLCBvciAgcmVsYXRlIHRvLCB0aGUKKyAgRnJlZVR5cGUgUHJvamVjdC4KKworICBUaGlzICBsaWNlbnNlIGFwcGxpZXMgIHRvIGFsbCAgZmlsZXMgZm91bmQgIGluIHN1Y2ggIHBhY2thZ2VzLCBhbmQKKyAgd2hpY2ggZG8gbm90ICBmYWxsIHVuZGVyIHRoZWlyIG93biBleHBsaWNpdCAgbGljZW5zZS4gIFRoZSBsaWNlbnNlCisgIGFmZmVjdHMgIHRodXMgIHRoZSAgRnJlZVR5cGUgICBmb250ICBlbmdpbmUsICB0aGUgIHRlc3QgIHByb2dyYW1zLAorICBkb2N1bWVudGF0aW9uIGFuZCBtYWtlZmlsZXMsIGF0IHRoZSB2ZXJ5IGxlYXN0LgorCisgIFRoaXMgIGxpY2Vuc2UgICB3YXMgIGluc3BpcmVkICBieSAgdGhlICBCU0QsICAgQXJ0aXN0aWMsICBhbmQgIElKRworICAoSW5kZXBlbmRlbnQgSlBFRyAgR3JvdXApIGxpY2Vuc2VzLCB3aGljaCAgYWxsIGVuY291cmFnZSBpbmNsdXNpb24KKyAgYW5kICB1c2Ugb2YgIGZyZWUgIHNvZnR3YXJlIGluICBjb21tZXJjaWFsICBhbmQgZnJlZXdhcmUgIHByb2R1Y3RzCisgIGFsaWtlLiAgQXMgYSBjb25zZXF1ZW5jZSwgaXRzIG1haW4gcG9pbnRzIGFyZSB0aGF0OgorCisgICAgbyBXZSBkb24ndCBwcm9taXNlIHRoYXQgdGhpcyBzb2Z0d2FyZSB3b3Jrcy4gSG93ZXZlciwgd2Ugd2lsbCBiZQorICAgICAgaW50ZXJlc3RlZCBpbiBhbnkga2luZCBvZiBidWcgcmVwb3J0cy4gKGBhcyBpcycgZGlzdHJpYnV0aW9uKQorCisgICAgbyBZb3UgY2FuICB1c2UgdGhpcyBzb2Z0d2FyZSBmb3Igd2hhdGV2ZXIgeW91ICB3YW50LCBpbiBwYXJ0cyBvcgorICAgICAgZnVsbCBmb3JtLCB3aXRob3V0IGhhdmluZyB0byBwYXkgdXMuIChgcm95YWx0eS1mcmVlJyB1c2FnZSkKKworICAgIG8gWW91IG1heSBub3QgcHJldGVuZCB0aGF0ICB5b3Ugd3JvdGUgdGhpcyBzb2Z0d2FyZS4gIElmIHlvdSB1c2UKKyAgICAgIGl0LCBvciAgb25seSBwYXJ0cyBvZiBpdCwgIGluIGEgcHJvZ3JhbSwgIHlvdSBtdXN0IGFja25vd2xlZGdlCisgICAgICBzb21ld2hlcmUgIGluICB5b3VyICBkb2N1bWVudGF0aW9uICB0aGF0ICB5b3UgIGhhdmUgIHVzZWQgIHRoZQorICAgICAgRnJlZVR5cGUgY29kZS4gKGBjcmVkaXRzJykKKworICBXZSAgc3BlY2lmaWNhbGx5ICBwZXJtaXQgIGFuZCAgZW5jb3VyYWdlICB0aGUgIGluY2x1c2lvbiAgb2YgIHRoaXMKKyAgc29mdHdhcmUsIHdpdGggIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgIGluIGNvbW1lcmNpYWwgcHJvZHVjdHMuCisgIFdlICBkaXNjbGFpbSAgYWxsIHdhcnJhbnRpZXMgIGNvdmVyaW5nICBUaGUgIEZyZWVUeXBlIFByb2plY3QgIGFuZAorICBhc3N1bWUgbm8gbGlhYmlsaXR5IHJlbGF0ZWQgdG8gVGhlIEZyZWVUeXBlIFByb2plY3QuCisKKworICBGaW5hbGx5LCAgbWFueSAgcGVvcGxlICBhc2tlZCAgdXMgIGZvciAgYSAgcHJlZmVycmVkICBmb3JtICBmb3IgIGEKKyAgY3JlZGl0L2Rpc2NsYWltZXIgdG8gdXNlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIGxpY2Vuc2UuICBXZSB0aHVzCisgIGVuY291cmFnZSB5b3UgdG8gdXNlIHRoZSBmb2xsb3dpbmcgdGV4dDoKKworICAgIiIiICAKKyAgICBQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIGFyZSBjb3B5cmlnaHQg77+9IDx5ZWFyPiBUaGUgRnJlZVR5cGUKKyAgICBQcm9qZWN0ICh3d3cuZnJlZXR5cGUub3JnKS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAiIiIKKworICBQbGVhc2UgcmVwbGFjZSA8eWVhcj4gd2l0aCB0aGUgdmFsdWUgZnJvbSB0aGUgRnJlZVR5cGUgdmVyc2lvbiB5b3UKKyAgYWN0dWFsbHkgdXNlLgorCisKK0xlZ2FsIFRlcm1zCis9PT09PT09PT09PQorCiswLiBEZWZpbml0aW9ucworLS0tLS0tLS0tLS0tLS0KKworICBUaHJvdWdob3V0IHRoaXMgbGljZW5zZSwgIHRoZSB0ZXJtcyBgcGFja2FnZScsIGBGcmVlVHlwZSBQcm9qZWN0JywKKyAgYW5kICBgRnJlZVR5cGUgIGFyY2hpdmUnIHJlZmVyICB0byAgdGhlICBzZXQgIG9mIGZpbGVzICBvcmlnaW5hbGx5CisgIGRpc3RyaWJ1dGVkICBieSB0aGUgIGF1dGhvcnMgIChEYXZpZCBUdXJuZXIsICBSb2JlcnQgV2lsaGVsbSwgIGFuZAorICBXZXJuZXIgTGVtYmVyZykgYXMgdGhlIGBGcmVlVHlwZSBQcm9qZWN0JywgYmUgdGhleSBuYW1lZCBhcyBhbHBoYSwKKyAgYmV0YSBvciBmaW5hbCByZWxlYXNlLgorCisgIGBZb3UnIHJlZmVycyB0byAgdGhlIGxpY2Vuc2VlLCBvciBwZXJzb24gdXNpbmcgIHRoZSBwcm9qZWN0LCB3aGVyZQorICBgdXNpbmcnIGlzIGEgZ2VuZXJpYyB0ZXJtIGluY2x1ZGluZyBjb21waWxpbmcgdGhlIHByb2plY3QncyBzb3VyY2UKKyAgY29kZSBhcyAgd2VsbCBhcyBsaW5raW5nIGl0ICB0byBmb3JtIGEgIGBwcm9ncmFtJyBvciBgZXhlY3V0YWJsZScuCisgIFRoaXMgIHByb2dyYW0gaXMgIHJlZmVycmVkIHRvICBhcyAgYGEgcHJvZ3JhbSAgdXNpbmcgdGhlICBGcmVlVHlwZQorICBlbmdpbmUnLgorCisgIFRoaXMgIGxpY2Vuc2UgYXBwbGllcyAgdG8gYWxsICBmaWxlcyBkaXN0cmlidXRlZCAgaW4gIHRoZSBvcmlnaW5hbAorICBGcmVlVHlwZSAgUHJvamVjdCwgICBpbmNsdWRpbmcgIGFsbCAgc291cmNlICAgY29kZSwgIGJpbmFyaWVzICBhbmQKKyAgZG9jdW1lbnRhdGlvbiwgIHVubGVzcyAgb3RoZXJ3aXNlICBzdGF0ZWQgICBpbiAgdGhlICBmaWxlICBpbiAgaXRzCisgIG9yaWdpbmFsLCB1bm1vZGlmaWVkIGZvcm0gYXMgIGRpc3RyaWJ1dGVkIGluIHRoZSBvcmlnaW5hbCBhcmNoaXZlLgorICBJZiB5b3UgYXJlICB1bnN1cmUgd2hldGhlciBvciBub3QgYSBwYXJ0aWN1bGFyICBmaWxlIGlzIGNvdmVyZWQgYnkKKyAgdGhpcyBsaWNlbnNlLCB5b3UgbXVzdCBjb250YWN0IHVzIHRvIHZlcmlmeSB0aGlzLgorCisgIFRoZSBGcmVlVHlwZSAgUHJvamVjdCBpcyBjb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCAgYnkgRGF2aWQgVHVybmVyLAorICBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgQWxsIHJpZ2h0cyByZXNlcnZlZCBleGNlcHQgYXMKKyAgc3BlY2lmaWVkIGJlbG93LgorCisxLiBObyBXYXJyYW50eQorLS0tLS0tLS0tLS0tLS0KKworICBUSEUgRlJFRVRZUEUgUFJPSkVDVCAgSVMgUFJPVklERUQgYEFTIElTJyBXSVRIT1VUICBXQVJSQU5UWSBPRiBBTlkKKyAgS0lORCwgRUlUSEVSICBFWFBSRVNTIE9SIElNUExJRUQsICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgVE8sCisgIFdBUlJBTlRJRVMgIE9GICBNRVJDSEFOVEFCSUxJVFkgICBBTkQgIEZJVE5FU1MgIEZPUiAgQSAgUEFSVElDVUxBUgorICBQVVJQT1NFLiAgSU4gTk8gRVZFTlQgV0lMTCBBTlkgT0YgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAgQkUgTElBQkxFICBGT1IgQU5ZIERBTUFHRVMgQ0FVU0VEICBCWSBUSEUgVVNFIE9SICBUSEUgSU5BQklMSVRZIFRPCisgIFVTRSwgT0YgVEhFIEZSRUVUWVBFIFBST0pFQ1QuCisKKzIuIFJlZGlzdHJpYnV0aW9uCistLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgIGxpY2Vuc2UgIGdyYW50cyAgYSAgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsICBwZXJwZXR1YWwgIGFuZAorICBpcnJldm9jYWJsZSByaWdodCAgYW5kIGxpY2Vuc2UgdG8gdXNlLCAgZXhlY3V0ZSwgcGVyZm9ybSwgY29tcGlsZSwKKyAgZGlzcGxheSwgIGNvcHksICAgY3JlYXRlICBkZXJpdmF0aXZlICB3b3JrcyAgIG9mLCAgZGlzdHJpYnV0ZSAgYW5kCisgIHN1YmxpY2Vuc2UgdGhlICBGcmVlVHlwZSBQcm9qZWN0IChpbiAgYm90aCBzb3VyY2UgYW5kICBvYmplY3QgY29kZQorICBmb3JtcykgIGFuZCAgZGVyaXZhdGl2ZSB3b3JrcyAgdGhlcmVvZiAgZm9yICBhbnkgIHB1cnBvc2U7IGFuZCAgdG8KKyAgYXV0aG9yaXplIG90aGVycyAgdG8gZXhlcmNpc2UgIHNvbWUgb3IgYWxsICBvZiB0aGUgIHJpZ2h0cyBncmFudGVkCisgIGhlcmVpbiwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICBvIFJlZGlzdHJpYnV0aW9uIG9mICBzb3VyY2UgY29kZSAgbXVzdCByZXRhaW4gdGhpcyAgbGljZW5zZSBmaWxlCisgICAgICAoYEZUTC5UWFQnKSB1bmFsdGVyZWQ7IGFueSAgYWRkaXRpb25zLCBkZWxldGlvbnMgb3IgY2hhbmdlcyB0bworICAgICAgdGhlIG9yaWdpbmFsICBmaWxlcyBtdXN0IGJlIGNsZWFybHkgIGluZGljYXRlZCBpbiBhY2NvbXBhbnlpbmcKKyAgICAgIGRvY3VtZW50YXRpb24uICAgVGhlICBjb3B5cmlnaHQgICBub3RpY2VzICBvZiAgdGhlICB1bmFsdGVyZWQsCisgICAgICBvcmlnaW5hbCAgZmlsZXMgbXVzdCAgYmUgIHByZXNlcnZlZCBpbiAgYWxsICBjb3BpZXMgb2YgIHNvdXJjZQorICAgICAgZmlsZXMuCisKKyAgICBvIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcHJvdmlkZSBhICBkaXNjbGFpbWVyICB0aGF0CisgICAgICBzdGF0ZXMgIHRoYXQgIHRoZSBzb2Z0d2FyZSBpcyBiYXNlZCBpbiBwYXJ0IG9mIHRoZSB3b3JrIG9mIHRoZQorICAgICAgRnJlZVR5cGUgVGVhbSwgIGluICB0aGUgIGRpc3RyaWJ1dGlvbiAgZG9jdW1lbnRhdGlvbi4gIFdlIGFsc28KKyAgICAgIGVuY291cmFnZSB5b3UgdG8gcHV0IGFuIFVSTCB0byB0aGUgRnJlZVR5cGUgd2ViIHBhZ2UgIGluICB5b3VyCisgICAgICBkb2N1bWVudGF0aW9uLCB0aG91Z2ggdGhpcyBpc24ndCBtYW5kYXRvcnkuCisKKyAgVGhlc2UgY29uZGl0aW9ucyAgYXBwbHkgdG8gYW55ICBzb2Z0d2FyZSBkZXJpdmVkIGZyb20gb3IgIGJhc2VkIG9uCisgIHRoZSBGcmVlVHlwZSBQcm9qZWN0LCAgbm90IGp1c3QgdGhlIHVubW9kaWZpZWQgZmlsZXMuICAgSWYgeW91IHVzZQorICBvdXIgd29yaywgeW91ICBtdXN0IGFja25vd2xlZGdlIHVzLiAgSG93ZXZlciwgbm8gIGZlZSBuZWVkIGJlIHBhaWQKKyAgdG8gdXMuCisKKzMuIEFkdmVydGlzaW5nCistLS0tLS0tLS0tLS0tLQorCisgIE5laXRoZXIgdGhlICBGcmVlVHlwZSBhdXRob3JzIGFuZCAgY29udHJpYnV0b3JzIG5vciB5b3UgIHNoYWxsIHVzZQorICB0aGUgbmFtZSBvZiB0aGUgIG90aGVyIGZvciBjb21tZXJjaWFsLCBhZHZlcnRpc2luZywgb3IgcHJvbW90aW9uYWwKKyAgcHVycG9zZXMgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgV2Ugc3VnZ2VzdCwgIGJ1dCBkbyBub3QgcmVxdWlyZSwgdGhhdCAgeW91IHVzZSBvbmUgb3IgIG1vcmUgb2YgdGhlCisgIGZvbGxvd2luZyBwaHJhc2VzIHRvIHJlZmVyICB0byB0aGlzIHNvZnR3YXJlIGluIHlvdXIgZG9jdW1lbnRhdGlvbgorICBvciBhZHZlcnRpc2luZyAgbWF0ZXJpYWxzOiBgRnJlZVR5cGUgUHJvamVjdCcsICBgRnJlZVR5cGUgRW5naW5lJywKKyAgYEZyZWVUeXBlIGxpYnJhcnknLCBvciBgRnJlZVR5cGUgRGlzdHJpYnV0aW9uJy4KKworICBBcyAgeW91IGhhdmUgIG5vdCBzaWduZWQgIHRoaXMgbGljZW5zZSwgIHlvdSBhcmUgIG5vdCAgcmVxdWlyZWQgdG8KKyAgYWNjZXB0ICBpdC4gICBIb3dldmVyLCAgYXMgIHRoZSBGcmVlVHlwZSAgUHJvamVjdCAgaXMgIGNvcHlyaWdodGVkCisgIG1hdGVyaWFsLCBvbmx5ICB0aGlzIGxpY2Vuc2UsIG9yICBhbm90aGVyIG9uZSBjb250cmFjdGVkICB3aXRoIHRoZQorICBhdXRob3JzLCBncmFudHMgeW91ICB0aGUgcmlnaHQgdG8gdXNlLCBkaXN0cmlidXRlLCAgYW5kIG1vZGlmeSBpdC4KKyAgVGhlcmVmb3JlLCAgYnkgIHVzaW5nLCAgZGlzdHJpYnV0aW5nLCAgb3IgbW9kaWZ5aW5nICB0aGUgIEZyZWVUeXBlCisgIFByb2plY3QsIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgYWxsIHRoZSB0ZXJtcworICBvZiB0aGlzIGxpY2Vuc2UuCisKKzQuIENvbnRhY3RzCistLS0tLS0tLS0tLQorCisgIFRoZXJlIGFyZSB0d28gbWFpbGluZyBsaXN0cyByZWxhdGVkIHRvIEZyZWVUeXBlOgorCisgICAgbyBmcmVldHlwZUBub25nbnUub3JnCisKKyAgICAgIERpc2N1c3NlcyBnZW5lcmFsIHVzZSBhbmQgYXBwbGljYXRpb25zIG9mIEZyZWVUeXBlLCBhcyB3ZWxsIGFzCisgICAgICBmdXR1cmUgYW5kICB3YW50ZWQgYWRkaXRpb25zIHRvIHRoZSAgbGlicmFyeSBhbmQgZGlzdHJpYnV0aW9uLgorICAgICAgSWYgIHlvdSBhcmUgbG9va2luZyAgZm9yIHN1cHBvcnQsICBzdGFydCBpbiAgdGhpcyBsaXN0ICBpZiB5b3UKKyAgICAgIGhhdmVuJ3QgZm91bmQgYW55dGhpbmcgdG8gaGVscCB5b3UgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKKyAgICBvIGZyZWV0eXBlLWRldmVsQG5vbmdudS5vcmcKKworICAgICAgRGlzY3Vzc2VzIGJ1Z3MsICBhcyB3ZWxsICBhcyBlbmdpbmUgaW50ZXJuYWxzLCAgZGVzaWduIGlzc3VlcywKKyAgICAgIHNwZWNpZmljIGxpY2Vuc2VzLCBwb3J0aW5nLCBldGMuCisKKyAgT3VyIGhvbWUgcGFnZSBjYW4gYmUgZm91bmQgYXQKKworICAgIGh0dHA6Ly93d3cuZnJlZXR5cGUub3JnCisKKworLS0tIGVuZCBvZiBGVEwuVFhUIC0tLQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HRkRMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTBmZTFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HRkRMLTEuMQpAQCAtMCwwICsxLDM5NyBAQAorCQlHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UKKwkJICBWZXJzaW9uIDEuMiwgTm92ZW1iZXIgMjAwMgorCisKKyBDb3B5cmlnaHQgKEMpIDIwMDAsMjAwMSwyMDAyICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCiswLiBQUkVBTUJMRQorCitUaGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UgaXMgdG8gbWFrZSBhIG1hbnVhbCwgdGV4dGJvb2ssIG9yIG90aGVyCitmdW5jdGlvbmFsIGFuZCB1c2VmdWwgZG9jdW1lbnQgImZyZWUiIGluIHRoZSBzZW5zZSBvZiBmcmVlZG9tOiB0bworYXNzdXJlIGV2ZXJ5b25lIHRoZSBlZmZlY3RpdmUgZnJlZWRvbSB0byBjb3B5IGFuZCByZWRpc3RyaWJ1dGUgaXQsCit3aXRoIG9yIHdpdGhvdXQgbW9kaWZ5aW5nIGl0LCBlaXRoZXIgY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseS4KK1NlY29uZGFyaWx5LCB0aGlzIExpY2Vuc2UgcHJlc2VydmVzIGZvciB0aGUgYXV0aG9yIGFuZCBwdWJsaXNoZXIgYSB3YXkKK3RvIGdldCBjcmVkaXQgZm9yIHRoZWlyIHdvcmssIHdoaWxlIG5vdCBiZWluZyBjb25zaWRlcmVkIHJlc3BvbnNpYmxlCitmb3IgbW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG90aGVycy4KKworVGhpcyBMaWNlbnNlIGlzIGEga2luZCBvZiAiY29weWxlZnQiLCB3aGljaCBtZWFucyB0aGF0IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBkb2N1bWVudCBtdXN0IHRoZW1zZWx2ZXMgYmUgZnJlZSBpbiB0aGUgc2FtZSBzZW5zZS4gIEl0Citjb21wbGVtZW50cyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIGlzIGEgY29weWxlZnQKK2xpY2Vuc2UgZGVzaWduZWQgZm9yIGZyZWUgc29mdHdhcmUuCisKK1dlIGhhdmUgZGVzaWduZWQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHVzZSBpdCBmb3IgbWFudWFscyBmb3IgZnJlZQorc29mdHdhcmUsIGJlY2F1c2UgZnJlZSBzb2Z0d2FyZSBuZWVkcyBmcmVlIGRvY3VtZW50YXRpb246IGEgZnJlZQorcHJvZ3JhbSBzaG91bGQgY29tZSB3aXRoIG1hbnVhbHMgcHJvdmlkaW5nIHRoZSBzYW1lIGZyZWVkb21zIHRoYXQgdGhlCitzb2Z0d2FyZSBkb2VzLiAgQnV0IHRoaXMgTGljZW5zZSBpcyBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBtYW51YWxzOworaXQgY2FuIGJlIHVzZWQgZm9yIGFueSB0ZXh0dWFsIHdvcmssIHJlZ2FyZGxlc3Mgb2Ygc3ViamVjdCBtYXR0ZXIgb3IKK3doZXRoZXIgaXQgaXMgcHVibGlzaGVkIGFzIGEgcHJpbnRlZCBib29rLiAgV2UgcmVjb21tZW5kIHRoaXMgTGljZW5zZQorcHJpbmNpcGFsbHkgZm9yIHdvcmtzIHdob3NlIHB1cnBvc2UgaXMgaW5zdHJ1Y3Rpb24gb3IgcmVmZXJlbmNlLgorCisKKzEuIEFQUExJQ0FCSUxJVFkgQU5EIERFRklOSVRJT05TCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBtYW51YWwgb3Igb3RoZXIgd29yaywgaW4gYW55IG1lZGl1bSwgdGhhdAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBjYW4gYmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBTdWNoIGEgbm90aWNlIGdyYW50cyBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5saW1pdGVkIGluIGR1cmF0aW9uLCB0byB1c2UgdGhhdAord29yayB1bmRlciB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaGVyZWluLiAgVGhlICJEb2N1bWVudCIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIG1hbnVhbCBvciB3b3JrLiAgQW55IG1lbWJlciBvZiB0aGUgcHVibGljIGlzIGEKK2xpY2Vuc2VlLCBhbmQgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLiAgWW91IGFjY2VwdCB0aGUgbGljZW5zZSBpZiB5b3UKK2NvcHksIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSB3b3JrIGluIGEgd2F5IHJlcXVpcmluZyBwZXJtaXNzaW9uCit1bmRlciBjb3B5cmlnaHQgbGF3LgorCitBICJNb2RpZmllZCBWZXJzaW9uIiBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYW55IHdvcmsgY29udGFpbmluZyB0aGUKK0RvY3VtZW50IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIGNvcGllZCB2ZXJiYXRpbSwgb3Igd2l0aAorbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisKK0EgIlNlY29uZGFyeSBTZWN0aW9uIiBpcyBhIG5hbWVkIGFwcGVuZGl4IG9yIGEgZnJvbnQtbWF0dGVyIHNlY3Rpb24gb2YKK3RoZSBEb2N1bWVudCB0aGF0IGRlYWxzIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUKK3B1Ymxpc2hlcnMgb3IgYXV0aG9ycyBvZiB0aGUgRG9jdW1lbnQgdG8gdGhlIERvY3VtZW50J3Mgb3ZlcmFsbCBzdWJqZWN0Cisob3IgdG8gcmVsYXRlZCBtYXR0ZXJzKSBhbmQgY29udGFpbnMgbm90aGluZyB0aGF0IGNvdWxkIGZhbGwgZGlyZWN0bHkKK3dpdGhpbiB0aGF0IG92ZXJhbGwgc3ViamVjdC4gIChUaHVzLCBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gcGFydCBhCit0ZXh0Ym9vayBvZiBtYXRoZW1hdGljcywgYSBTZWNvbmRhcnkgU2VjdGlvbiBtYXkgbm90IGV4cGxhaW4gYW55CittYXRoZW1hdGljcy4pICBUaGUgcmVsYXRpb25zaGlwIGNvdWxkIGJlIGEgbWF0dGVyIG9mIGhpc3RvcmljYWwKK2Nvbm5lY3Rpb24gd2l0aCB0aGUgc3ViamVjdCBvciB3aXRoIHJlbGF0ZWQgbWF0dGVycywgb3Igb2YgbGVnYWwsCitjb21tZXJjaWFsLCBwaGlsb3NvcGhpY2FsLCBldGhpY2FsIG9yIHBvbGl0aWNhbCBwb3NpdGlvbiByZWdhcmRpbmcKK3RoZW0uCisKK1RoZSAiSW52YXJpYW50IFNlY3Rpb25zIiBhcmUgY2VydGFpbiBTZWNvbmRhcnkgU2VjdGlvbnMgd2hvc2UgdGl0bGVzCithcmUgZGVzaWduYXRlZCwgYXMgYmVpbmcgdGhvc2Ugb2YgSW52YXJpYW50IFNlY3Rpb25zLCBpbiB0aGUgbm90aWNlCit0aGF0IHNheXMgdGhhdCB0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSWYgYQorc2VjdGlvbiBkb2VzIG5vdCBmaXQgdGhlIGFib3ZlIGRlZmluaXRpb24gb2YgU2Vjb25kYXJ5IHRoZW4gaXQgaXMgbm90CithbGxvd2VkIHRvIGJlIGRlc2lnbmF0ZWQgYXMgSW52YXJpYW50LiAgVGhlIERvY3VtZW50IG1heSBjb250YWluIHplcm8KK0ludmFyaWFudCBTZWN0aW9ucy4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBpZGVudGlmeSBhbnkgSW52YXJpYW50CitTZWN0aW9ucyB0aGVuIHRoZXJlIGFyZSBub25lLgorCitUaGUgIkNvdmVyIFRleHRzIiBhcmUgY2VydGFpbiBzaG9ydCBwYXNzYWdlcyBvZiB0ZXh0IHRoYXQgYXJlIGxpc3RlZCwKK2FzIEZyb250LUNvdmVyIFRleHRzIG9yIEJhY2stQ292ZXIgVGV4dHMsIGluIHRoZSBub3RpY2UgdGhhdCBzYXlzIHRoYXQKK3RoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBIEZyb250LUNvdmVyIFRleHQgbWF5CitiZSBhdCBtb3N0IDUgd29yZHMsIGFuZCBhIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYXQgbW9zdCAyNSB3b3Jkcy4KKworQSAiVHJhbnNwYXJlbnQiIGNvcHkgb2YgdGhlIERvY3VtZW50IG1lYW5zIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5LAorcmVwcmVzZW50ZWQgaW4gYSBmb3JtYXQgd2hvc2Ugc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlCitnZW5lcmFsIHB1YmxpYywgdGhhdCBpcyBzdWl0YWJsZSBmb3IgcmV2aXNpbmcgdGhlIGRvY3VtZW50CitzdHJhaWdodGZvcndhcmRseSB3aXRoIGdlbmVyaWMgdGV4dCBlZGl0b3JzIG9yIChmb3IgaW1hZ2VzIGNvbXBvc2VkIG9mCitwaXhlbHMpIGdlbmVyaWMgcGFpbnQgcHJvZ3JhbXMgb3IgKGZvciBkcmF3aW5ncykgc29tZSB3aWRlbHkgYXZhaWxhYmxlCitkcmF3aW5nIGVkaXRvciwgYW5kIHRoYXQgaXMgc3VpdGFibGUgZm9yIGlucHV0IHRvIHRleHQgZm9ybWF0dGVycyBvcgorZm9yIGF1dG9tYXRpYyB0cmFuc2xhdGlvbiB0byBhIHZhcmlldHkgb2YgZm9ybWF0cyBzdWl0YWJsZSBmb3IgaW5wdXQKK3RvIHRleHQgZm9ybWF0dGVycy4gIEEgY29weSBtYWRlIGluIGFuIG90aGVyd2lzZSBUcmFuc3BhcmVudCBmaWxlCitmb3JtYXQgd2hvc2UgbWFya3VwLCBvciBhYnNlbmNlIG9mIG1hcmt1cCwgaGFzIGJlZW4gYXJyYW5nZWQgdG8gdGh3YXJ0CitvciBkaXNjb3VyYWdlIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIGJ5IHJlYWRlcnMgaXMgbm90IFRyYW5zcGFyZW50LgorQW4gaW1hZ2UgZm9ybWF0IGlzIG5vdCBUcmFuc3BhcmVudCBpZiB1c2VkIGZvciBhbnkgc3Vic3RhbnRpYWwgYW1vdW50CitvZiB0ZXh0LiAgQSBjb3B5IHRoYXQgaXMgbm90ICJUcmFuc3BhcmVudCIgaXMgY2FsbGVkICJPcGFxdWUiLgorCitFeGFtcGxlcyBvZiBzdWl0YWJsZSBmb3JtYXRzIGZvciBUcmFuc3BhcmVudCBjb3BpZXMgaW5jbHVkZSBwbGFpbgorQVNDSUkgd2l0aG91dCBtYXJrdXAsIFRleGluZm8gaW5wdXQgZm9ybWF0LCBMYVRlWCBpbnB1dCBmb3JtYXQsIFNHTUwKK29yIFhNTCB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZSBEVEQsIGFuZCBzdGFuZGFyZC1jb25mb3JtaW5nIHNpbXBsZQorSFRNTCwgUG9zdFNjcmlwdCBvciBQREYgZGVzaWduZWQgZm9yIGh1bWFuIG1vZGlmaWNhdGlvbi4gIEV4YW1wbGVzIG9mCit0cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRzIGluY2x1ZGUgUE5HLCBYQ0YgYW5kIEpQRy4gIE9wYXF1ZSBmb3JtYXRzCitpbmNsdWRlIHByb3ByaWV0YXJ5IGZvcm1hdHMgdGhhdCBjYW4gYmUgcmVhZCBhbmQgZWRpdGVkIG9ubHkgYnkKK3Byb3ByaWV0YXJ5IHdvcmQgcHJvY2Vzc29ycywgU0dNTCBvciBYTUwgZm9yIHdoaWNoIHRoZSBEVEQgYW5kL29yCitwcm9jZXNzaW5nIHRvb2xzIGFyZSBub3QgZ2VuZXJhbGx5IGF2YWlsYWJsZSwgYW5kIHRoZQorbWFjaGluZS1nZW5lcmF0ZWQgSFRNTCwgUG9zdFNjcmlwdCBvciBQREYgcHJvZHVjZWQgYnkgc29tZSB3b3JkCitwcm9jZXNzb3JzIGZvciBvdXRwdXQgcHVycG9zZXMgb25seS4KKworVGhlICJUaXRsZSBQYWdlIiBtZWFucywgZm9yIGEgcHJpbnRlZCBib29rLCB0aGUgdGl0bGUgcGFnZSBpdHNlbGYsCitwbHVzIHN1Y2ggZm9sbG93aW5nIHBhZ2VzIGFzIGFyZSBuZWVkZWQgdG8gaG9sZCwgbGVnaWJseSwgdGhlIG1hdGVyaWFsCit0aGlzIExpY2Vuc2UgcmVxdWlyZXMgdG8gYXBwZWFyIGluIHRoZSB0aXRsZSBwYWdlLiAgRm9yIHdvcmtzIGluCitmb3JtYXRzIHdoaWNoIGRvIG5vdCBoYXZlIGFueSB0aXRsZSBwYWdlIGFzIHN1Y2gsICJUaXRsZSBQYWdlIiBtZWFucwordGhlIHRleHQgbmVhciB0aGUgbW9zdCBwcm9taW5lbnQgYXBwZWFyYW5jZSBvZiB0aGUgd29yaydzIHRpdGxlLAorcHJlY2VkaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvZHkgb2YgdGhlIHRleHQuCisKK0Egc2VjdGlvbiAiRW50aXRsZWQgWFlaIiBtZWFucyBhIG5hbWVkIHN1YnVuaXQgb2YgdGhlIERvY3VtZW50IHdob3NlCit0aXRsZSBlaXRoZXIgaXMgcHJlY2lzZWx5IFhZWiBvciBjb250YWlucyBYWVogaW4gcGFyZW50aGVzZXMgZm9sbG93aW5nCit0ZXh0IHRoYXQgdHJhbnNsYXRlcyBYWVogaW4gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlIFhZWiBzdGFuZHMgZm9yIGEKK3NwZWNpZmljIHNlY3Rpb24gbmFtZSBtZW50aW9uZWQgYmVsb3csIHN1Y2ggYXMgIkFja25vd2xlZGdlbWVudHMiLAorIkRlZGljYXRpb25zIiwgIkVuZG9yc2VtZW50cyIsIG9yICJIaXN0b3J5Ii4pICBUbyAiUHJlc2VydmUgdGhlIFRpdGxlIgorb2Ygc3VjaCBhIHNlY3Rpb24gd2hlbiB5b3UgbW9kaWZ5IHRoZSBEb2N1bWVudCBtZWFucyB0aGF0IGl0IHJlbWFpbnMgYQorc2VjdGlvbiAiRW50aXRsZWQgWFlaIiBhY2NvcmRpbmcgdG8gdGhpcyBkZWZpbml0aW9uLgorCitUaGUgRG9jdW1lbnQgbWF5IGluY2x1ZGUgV2FycmFudHkgRGlzY2xhaW1lcnMgbmV4dCB0byB0aGUgbm90aWNlIHdoaWNoCitzdGF0ZXMgdGhhdCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQuICBUaGVzZSBXYXJyYW50eQorRGlzY2xhaW1lcnMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgaW5jbHVkZWQgYnkgcmVmZXJlbmNlIGluIHRoaXMKK0xpY2Vuc2UsIGJ1dCBvbmx5IGFzIHJlZ2FyZHMgZGlzY2xhaW1pbmcgd2FycmFudGllczogYW55IG90aGVyCitpbXBsaWNhdGlvbiB0aGF0IHRoZXNlIFdhcnJhbnR5IERpc2NsYWltZXJzIG1heSBoYXZlIGlzIHZvaWQgYW5kIGhhcworbm8gZWZmZWN0IG9uIHRoZSBtZWFuaW5nIG9mIHRoaXMgTGljZW5zZS4KKworCisyLiBWRVJCQVRJTSBDT1BZSU5HCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgaW4gYW55IG1lZGl1bSwgZWl0aGVyCitjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LCBwcm92aWRlZCB0aGF0IHRoaXMgTGljZW5zZSwgdGhlCitjb3B5cmlnaHQgbm90aWNlcywgYW5kIHRoZSBsaWNlbnNlIG5vdGljZSBzYXlpbmcgdGhpcyBMaWNlbnNlIGFwcGxpZXMKK3RvIHRoZSBEb2N1bWVudCBhcmUgcmVwcm9kdWNlZCBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCB5b3UgYWRkIG5vIG90aGVyCitjb25kaXRpb25zIHdoYXRzb2V2ZXIgdG8gdGhvc2Ugb2YgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgdXNlCit0ZWNobmljYWwgbWVhc3VyZXMgdG8gb2JzdHJ1Y3Qgb3IgY29udHJvbCB0aGUgcmVhZGluZyBvciBmdXJ0aGVyCitjb3B5aW5nIG9mIHRoZSBjb3BpZXMgeW91IG1ha2Ugb3IgZGlzdHJpYnV0ZS4gIEhvd2V2ZXIsIHlvdSBtYXkgYWNjZXB0Citjb21wZW5zYXRpb24gaW4gZXhjaGFuZ2UgZm9yIGNvcGllcy4gIElmIHlvdSBkaXN0cmlidXRlIGEgbGFyZ2UgZW5vdWdoCitudW1iZXIgb2YgY29waWVzIHlvdSBtdXN0IGFsc28gZm9sbG93IHRoZSBjb25kaXRpb25zIGluIHNlY3Rpb24gMy4KKworWW91IG1heSBhbHNvIGxlbmQgY29waWVzLCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHN0YXRlZCBhYm92ZSwgYW5kCit5b3UgbWF5IHB1YmxpY2x5IGRpc3BsYXkgY29waWVzLgorCisKKzMuIENPUFlJTkcgSU4gUVVBTlRJVFkKKworSWYgeW91IHB1Ymxpc2ggcHJpbnRlZCBjb3BpZXMgKG9yIGNvcGllcyBpbiBtZWRpYSB0aGF0IGNvbW1vbmx5IGhhdmUKK3ByaW50ZWQgY292ZXJzKSBvZiB0aGUgRG9jdW1lbnQsIG51bWJlcmluZyBtb3JlIHRoYW4gMTAwLCBhbmQgdGhlCitEb2N1bWVudCdzIGxpY2Vuc2Ugbm90aWNlIHJlcXVpcmVzIENvdmVyIFRleHRzLCB5b3UgbXVzdCBlbmNsb3NlIHRoZQorY29waWVzIGluIGNvdmVycyB0aGF0IGNhcnJ5LCBjbGVhcmx5IGFuZCBsZWdpYmx5LCBhbGwgdGhlc2UgQ292ZXIKK1RleHRzOiBGcm9udC1Db3ZlciBUZXh0cyBvbiB0aGUgZnJvbnQgY292ZXIsIGFuZCBCYWNrLUNvdmVyIFRleHRzIG9uCit0aGUgYmFjayBjb3Zlci4gIEJvdGggY292ZXJzIG11c3QgYWxzbyBjbGVhcmx5IGFuZCBsZWdpYmx5IGlkZW50aWZ5Cit5b3UgYXMgdGhlIHB1Ymxpc2hlciBvZiB0aGVzZSBjb3BpZXMuICBUaGUgZnJvbnQgY292ZXIgbXVzdCBwcmVzZW50Cit0aGUgZnVsbCB0aXRsZSB3aXRoIGFsbCB3b3JkcyBvZiB0aGUgdGl0bGUgZXF1YWxseSBwcm9taW5lbnQgYW5kCit2aXNpYmxlLiAgWW91IG1heSBhZGQgb3RoZXIgbWF0ZXJpYWwgb24gdGhlIGNvdmVycyBpbiBhZGRpdGlvbi4KK0NvcHlpbmcgd2l0aCBjaGFuZ2VzIGxpbWl0ZWQgdG8gdGhlIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlCit0aGUgdGl0bGUgb2YgdGhlIERvY3VtZW50IGFuZCBzYXRpc2Z5IHRoZXNlIGNvbmRpdGlvbnMsIGNhbiBiZSB0cmVhdGVkCithcyB2ZXJiYXRpbSBjb3B5aW5nIGluIG90aGVyIHJlc3BlY3RzLgorCitJZiB0aGUgcmVxdWlyZWQgdGV4dHMgZm9yIGVpdGhlciBjb3ZlciBhcmUgdG9vIHZvbHVtaW5vdXMgdG8gZml0CitsZWdpYmx5LCB5b3Ugc2hvdWxkIHB1dCB0aGUgZmlyc3Qgb25lcyBsaXN0ZWQgKGFzIG1hbnkgYXMgZml0CityZWFzb25hYmx5KSBvbiB0aGUgYWN0dWFsIGNvdmVyLCBhbmQgY29udGludWUgdGhlIHJlc3Qgb250byBhZGphY2VudAorcGFnZXMuCisKK0lmIHlvdSBwdWJsaXNoIG9yIGRpc3RyaWJ1dGUgT3BhcXVlIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQgbnVtYmVyaW5nCittb3JlIHRoYW4gMTAwLCB5b3UgbXVzdCBlaXRoZXIgaW5jbHVkZSBhIG1hY2hpbmUtcmVhZGFibGUgVHJhbnNwYXJlbnQKK2NvcHkgYWxvbmcgd2l0aCBlYWNoIE9wYXF1ZSBjb3B5LCBvciBzdGF0ZSBpbiBvciB3aXRoIGVhY2ggT3BhcXVlIGNvcHkKK2EgY29tcHV0ZXItbmV0d29yayBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBnZW5lcmFsIG5ldHdvcmstdXNpbmcKK3B1YmxpYyBoYXMgYWNjZXNzIHRvIGRvd25sb2FkIHVzaW5nIHB1YmxpYy1zdGFuZGFyZCBuZXR3b3JrIHByb3RvY29scworYSBjb21wbGV0ZSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgZnJlZSBvZiBhZGRlZCBtYXRlcmlhbC4KK0lmIHlvdSB1c2UgdGhlIGxhdHRlciBvcHRpb24sIHlvdSBtdXN0IHRha2UgcmVhc29uYWJseSBwcnVkZW50IHN0ZXBzLAord2hlbiB5b3UgYmVnaW4gZGlzdHJpYnV0aW9uIG9mIE9wYXF1ZSBjb3BpZXMgaW4gcXVhbnRpdHksIHRvIGVuc3VyZQordGhhdCB0aGlzIFRyYW5zcGFyZW50IGNvcHkgd2lsbCByZW1haW4gdGh1cyBhY2Nlc3NpYmxlIGF0IHRoZSBzdGF0ZWQKK2xvY2F0aW9uIHVudGlsIGF0IGxlYXN0IG9uZSB5ZWFyIGFmdGVyIHRoZSBsYXN0IHRpbWUgeW91IGRpc3RyaWJ1dGUgYW4KK09wYXF1ZSBjb3B5IChkaXJlY3RseSBvciB0aHJvdWdoIHlvdXIgYWdlbnRzIG9yIHJldGFpbGVycykgb2YgdGhhdAorZWRpdGlvbiB0byB0aGUgcHVibGljLgorCitJdCBpcyByZXF1ZXN0ZWQsIGJ1dCBub3QgcmVxdWlyZWQsIHRoYXQgeW91IGNvbnRhY3QgdGhlIGF1dGhvcnMgb2YgdGhlCitEb2N1bWVudCB3ZWxsIGJlZm9yZSByZWRpc3RyaWJ1dGluZyBhbnkgbGFyZ2UgbnVtYmVyIG9mIGNvcGllcywgdG8gZ2l2ZQordGhlbSBhIGNoYW5jZSB0byBwcm92aWRlIHlvdSB3aXRoIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQuCisKKworNC4gTU9ESUZJQ0FUSU9OUworCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgYSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBEb2N1bWVudCB1bmRlcgordGhlIGNvbmRpdGlvbnMgb2Ygc2VjdGlvbnMgMiBhbmQgMyBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgcmVsZWFzZQordGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgcHJlY2lzZWx5IHRoaXMgTGljZW5zZSwgd2l0aCB0aGUgTW9kaWZpZWQKK1ZlcnNpb24gZmlsbGluZyB0aGUgcm9sZSBvZiB0aGUgRG9jdW1lbnQsIHRodXMgbGljZW5zaW5nIGRpc3RyaWJ1dGlvbgorYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiB0byB3aG9ldmVyIHBvc3Nlc3NlcyBhIGNvcHkKK29mIGl0LiAgSW4gYWRkaXRpb24sIHlvdSBtdXN0IGRvIHRoZXNlIHRoaW5ncyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbjoKKworQS4gVXNlIGluIHRoZSBUaXRsZSBQYWdlIChhbmQgb24gdGhlIGNvdmVycywgaWYgYW55KSBhIHRpdGxlIGRpc3RpbmN0CisgICBmcm9tIHRoYXQgb2YgdGhlIERvY3VtZW50LCBhbmQgZnJvbSB0aG9zZSBvZiBwcmV2aW91cyB2ZXJzaW9ucworICAgKHdoaWNoIHNob3VsZCwgaWYgdGhlcmUgd2VyZSBhbnksIGJlIGxpc3RlZCBpbiB0aGUgSGlzdG9yeSBzZWN0aW9uCisgICBvZiB0aGUgRG9jdW1lbnQpLiAgWW91IG1heSB1c2UgdGhlIHNhbWUgdGl0bGUgYXMgYSBwcmV2aW91cyB2ZXJzaW9uCisgICBpZiB0aGUgb3JpZ2luYWwgcHVibGlzaGVyIG9mIHRoYXQgdmVyc2lvbiBnaXZlcyBwZXJtaXNzaW9uLgorQi4gTGlzdCBvbiB0aGUgVGl0bGUgUGFnZSwgYXMgYXV0aG9ycywgb25lIG9yIG1vcmUgcGVyc29ucyBvciBlbnRpdGllcworICAgcmVzcG9uc2libGUgZm9yIGF1dGhvcnNoaXAgb2YgdGhlIG1vZGlmaWNhdGlvbnMgaW4gdGhlIE1vZGlmaWVkCisgICBWZXJzaW9uLCB0b2dldGhlciB3aXRoIGF0IGxlYXN0IGZpdmUgb2YgdGhlIHByaW5jaXBhbCBhdXRob3JzIG9mIHRoZQorICAgRG9jdW1lbnQgKGFsbCBvZiBpdHMgcHJpbmNpcGFsIGF1dGhvcnMsIGlmIGl0IGhhcyBmZXdlciB0aGFuIGZpdmUpLAorICAgdW5sZXNzIHRoZXkgcmVsZWFzZSB5b3UgZnJvbSB0aGlzIHJlcXVpcmVtZW50LgorQy4gU3RhdGUgb24gdGhlIFRpdGxlIHBhZ2UgdGhlIG5hbWUgb2YgdGhlIHB1Ymxpc2hlciBvZiB0aGUKKyAgIE1vZGlmaWVkIFZlcnNpb24sIGFzIHRoZSBwdWJsaXNoZXIuCitELiBQcmVzZXJ2ZSBhbGwgdGhlIGNvcHlyaWdodCBub3RpY2VzIG9mIHRoZSBEb2N1bWVudC4KK0UuIEFkZCBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGZvciB5b3VyIG1vZGlmaWNhdGlvbnMKKyAgIGFkamFjZW50IHRvIHRoZSBvdGhlciBjb3B5cmlnaHQgbm90aWNlcy4KK0YuIEluY2x1ZGUsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb3B5cmlnaHQgbm90aWNlcywgYSBsaWNlbnNlIG5vdGljZQorICAgZ2l2aW5nIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgdGhlCisgICB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluIHRoZSBmb3JtIHNob3duIGluIHRoZSBBZGRlbmR1bSBiZWxvdy4KK0cuIFByZXNlcnZlIGluIHRoYXQgbGljZW5zZSBub3RpY2UgdGhlIGZ1bGwgbGlzdHMgb2YgSW52YXJpYW50IFNlY3Rpb25zCisgICBhbmQgcmVxdWlyZWQgQ292ZXIgVGV4dHMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50J3MgbGljZW5zZSBub3RpY2UuCitILiBJbmNsdWRlIGFuIHVuYWx0ZXJlZCBjb3B5IG9mIHRoaXMgTGljZW5zZS4KK0kuIFByZXNlcnZlIHRoZSBzZWN0aW9uIEVudGl0bGVkICJIaXN0b3J5IiwgUHJlc2VydmUgaXRzIFRpdGxlLCBhbmQgYWRkCisgICB0byBpdCBhbiBpdGVtIHN0YXRpbmcgYXQgbGVhc3QgdGhlIHRpdGxlLCB5ZWFyLCBuZXcgYXV0aG9ycywgYW5kCisgICBwdWJsaXNoZXIgb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXMgZ2l2ZW4gb24gdGhlIFRpdGxlIFBhZ2UuICBJZgorICAgdGhlcmUgaXMgbm8gc2VjdGlvbiBFbnRpdGxlZCAiSGlzdG9yeSIgaW4gdGhlIERvY3VtZW50LCBjcmVhdGUgb25lCisgICBzdGF0aW5nIHRoZSB0aXRsZSwgeWVhciwgYXV0aG9ycywgYW5kIHB1Ymxpc2hlciBvZiB0aGUgRG9jdW1lbnQgYXMKKyAgIGdpdmVuIG9uIGl0cyBUaXRsZSBQYWdlLCB0aGVuIGFkZCBhbiBpdGVtIGRlc2NyaWJpbmcgdGhlIE1vZGlmaWVkCisgICBWZXJzaW9uIGFzIHN0YXRlZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2UuCitKLiBQcmVzZXJ2ZSB0aGUgbmV0d29yayBsb2NhdGlvbiwgaWYgYW55LCBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yCisgICBwdWJsaWMgYWNjZXNzIHRvIGEgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGFuZCBsaWtld2lzZQorICAgdGhlIG5ldHdvcmsgbG9jYXRpb25zIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IgcHJldmlvdXMgdmVyc2lvbnMKKyAgIGl0IHdhcyBiYXNlZCBvbi4gIFRoZXNlIG1heSBiZSBwbGFjZWQgaW4gdGhlICJIaXN0b3J5IiBzZWN0aW9uLgorICAgWW91IG1heSBvbWl0IGEgbmV0d29yayBsb2NhdGlvbiBmb3IgYSB3b3JrIHRoYXQgd2FzIHB1Ymxpc2hlZCBhdAorICAgbGVhc3QgZm91ciB5ZWFycyBiZWZvcmUgdGhlIERvY3VtZW50IGl0c2VsZiwgb3IgaWYgdGhlIG9yaWdpbmFsCisgICBwdWJsaXNoZXIgb2YgdGhlIHZlcnNpb24gaXQgcmVmZXJzIHRvIGdpdmVzIHBlcm1pc3Npb24uCitLLiBGb3IgYW55IHNlY3Rpb24gRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiIG9yICJEZWRpY2F0aW9ucyIsCisgICBQcmVzZXJ2ZSB0aGUgVGl0bGUgb2YgdGhlIHNlY3Rpb24sIGFuZCBwcmVzZXJ2ZSBpbiB0aGUgc2VjdGlvbiBhbGwKKyAgIHRoZSBzdWJzdGFuY2UgYW5kIHRvbmUgb2YgZWFjaCBvZiB0aGUgY29udHJpYnV0b3IgYWNrbm93bGVkZ2VtZW50cworICAgYW5kL29yIGRlZGljYXRpb25zIGdpdmVuIHRoZXJlaW4uCitMLiBQcmVzZXJ2ZSBhbGwgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiB0aGUgRG9jdW1lbnQsCisgICB1bmFsdGVyZWQgaW4gdGhlaXIgdGV4dCBhbmQgaW4gdGhlaXIgdGl0bGVzLiAgU2VjdGlvbiBudW1iZXJzCisgICBvciB0aGUgZXF1aXZhbGVudCBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgc2VjdGlvbiB0aXRsZXMuCitNLiBEZWxldGUgYW55IHNlY3Rpb24gRW50aXRsZWQgIkVuZG9yc2VtZW50cyIuICBTdWNoIGEgc2VjdGlvbgorICAgbWF5IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4KK04uIERvIG5vdCByZXRpdGxlIGFueSBleGlzdGluZyBzZWN0aW9uIHRvIGJlIEVudGl0bGVkICJFbmRvcnNlbWVudHMiCisgICBvciB0byBjb25mbGljdCBpbiB0aXRsZSB3aXRoIGFueSBJbnZhcmlhbnQgU2VjdGlvbi4KK08uIFByZXNlcnZlIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycy4KKworSWYgdGhlIE1vZGlmaWVkIFZlcnNpb24gaW5jbHVkZXMgbmV3IGZyb250LW1hdHRlciBzZWN0aW9ucyBvcgorYXBwZW5kaWNlcyB0aGF0IHF1YWxpZnkgYXMgU2Vjb25kYXJ5IFNlY3Rpb25zIGFuZCBjb250YWluIG5vIG1hdGVyaWFsCitjb3BpZWQgZnJvbSB0aGUgRG9jdW1lbnQsIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gZGVzaWduYXRlIHNvbWUgb3IgYWxsCitvZiB0aGVzZSBzZWN0aW9ucyBhcyBpbnZhcmlhbnQuICBUbyBkbyB0aGlzLCBhZGQgdGhlaXIgdGl0bGVzIHRvIHRoZQorbGlzdCBvZiBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24ncyBsaWNlbnNlIG5vdGljZS4KK1RoZXNlIHRpdGxlcyBtdXN0IGJlIGRpc3RpbmN0IGZyb20gYW55IG90aGVyIHNlY3Rpb24gdGl0bGVzLgorCitZb3UgbWF5IGFkZCBhIHNlY3Rpb24gRW50aXRsZWQgIkVuZG9yc2VtZW50cyIsIHByb3ZpZGVkIGl0IGNvbnRhaW5zCitub3RoaW5nIGJ1dCBlbmRvcnNlbWVudHMgb2YgeW91ciBNb2RpZmllZCBWZXJzaW9uIGJ5IHZhcmlvdXMKK3BhcnRpZXMtLWZvciBleGFtcGxlLCBzdGF0ZW1lbnRzIG9mIHBlZXIgcmV2aWV3IG9yIHRoYXQgdGhlIHRleHQgaGFzCitiZWVuIGFwcHJvdmVkIGJ5IGFuIG9yZ2FuaXphdGlvbiBhcyB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIG9mIGEKK3N0YW5kYXJkLgorCitZb3UgbWF5IGFkZCBhIHBhc3NhZ2Ugb2YgdXAgdG8gZml2ZSB3b3JkcyBhcyBhIEZyb250LUNvdmVyIFRleHQsIGFuZCBhCitwYXNzYWdlIG9mIHVwIHRvIDI1IHdvcmRzIGFzIGEgQmFjay1Db3ZlciBUZXh0LCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CitvZiBDb3ZlciBUZXh0cyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4gIE9ubHkgb25lIHBhc3NhZ2Ugb2YKK0Zyb250LUNvdmVyIFRleHQgYW5kIG9uZSBvZiBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGFkZGVkIGJ5IChvcgordGhyb3VnaCBhcnJhbmdlbWVudHMgbWFkZSBieSkgYW55IG9uZSBlbnRpdHkuICBJZiB0aGUgRG9jdW1lbnQgYWxyZWFkeQoraW5jbHVkZXMgYSBjb3ZlciB0ZXh0IGZvciB0aGUgc2FtZSBjb3ZlciwgcHJldmlvdXNseSBhZGRlZCBieSB5b3Ugb3IKK2J5IGFycmFuZ2VtZW50IG1hZGUgYnkgdGhlIHNhbWUgZW50aXR5IHlvdSBhcmUgYWN0aW5nIG9uIGJlaGFsZiBvZiwKK3lvdSBtYXkgbm90IGFkZCBhbm90aGVyOyBidXQgeW91IG1heSByZXBsYWNlIHRoZSBvbGQgb25lLCBvbiBleHBsaWNpdAorcGVybWlzc2lvbiBmcm9tIHRoZSBwcmV2aW91cyBwdWJsaXNoZXIgdGhhdCBhZGRlZCB0aGUgb2xkIG9uZS4KKworVGhlIGF1dGhvcihzKSBhbmQgcHVibGlzaGVyKHMpIG9mIHRoZSBEb2N1bWVudCBkbyBub3QgYnkgdGhpcyBMaWNlbnNlCitnaXZlIHBlcm1pc3Npb24gdG8gdXNlIHRoZWlyIG5hbWVzIGZvciBwdWJsaWNpdHkgZm9yIG9yIHRvIGFzc2VydCBvcgoraW1wbHkgZW5kb3JzZW1lbnQgb2YgYW55IE1vZGlmaWVkIFZlcnNpb24uCisKKworNS4gQ09NQklOSU5HIERPQ1VNRU5UUworCitZb3UgbWF5IGNvbWJpbmUgdGhlIERvY3VtZW50IHdpdGggb3RoZXIgZG9jdW1lbnRzIHJlbGVhc2VkIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHVuZGVyIHRoZSB0ZXJtcyBkZWZpbmVkIGluIHNlY3Rpb24gNCBhYm92ZSBmb3IgbW9kaWZpZWQKK3ZlcnNpb25zLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSBjb21iaW5hdGlvbiBhbGwgb2YgdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgb2YgYWxsIG9mIHRoZSBvcmlnaW5hbCBkb2N1bWVudHMsIHVubW9kaWZpZWQsIGFuZAorbGlzdCB0aGVtIGFsbCBhcyBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgeW91ciBjb21iaW5lZCB3b3JrIGluIGl0cworbGljZW5zZSBub3RpY2UsIGFuZCB0aGF0IHlvdSBwcmVzZXJ2ZSBhbGwgdGhlaXIgV2FycmFudHkgRGlzY2xhaW1lcnMuCisKK1RoZSBjb21iaW5lZCB3b3JrIG5lZWQgb25seSBjb250YWluIG9uZSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgYW5kCittdWx0aXBsZSBpZGVudGljYWwgSW52YXJpYW50IFNlY3Rpb25zIG1heSBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlCitjb3B5LiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0CitkaWZmZXJlbnQgY29udGVudHMsIG1ha2UgdGhlIHRpdGxlIG9mIGVhY2ggc3VjaCBzZWN0aW9uIHVuaXF1ZSBieQorYWRkaW5nIGF0IHRoZSBlbmQgb2YgaXQsIGluIHBhcmVudGhlc2VzLCB0aGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwKK2F1dGhvciBvciBwdWJsaXNoZXIgb2YgdGhhdCBzZWN0aW9uIGlmIGtub3duLCBvciBlbHNlIGEgdW5pcXVlIG51bWJlci4KK01ha2UgdGhlIHNhbWUgYWRqdXN0bWVudCB0byB0aGUgc2VjdGlvbiB0aXRsZXMgaW4gdGhlIGxpc3Qgb2YKK0ludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgbGljZW5zZSBub3RpY2Ugb2YgdGhlIGNvbWJpbmVkIHdvcmsuCisKK0luIHRoZSBjb21iaW5hdGlvbiwgeW91IG11c3QgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkhpc3RvcnkiCitpbiB0aGUgdmFyaW91cyBvcmlnaW5hbCBkb2N1bWVudHMsIGZvcm1pbmcgb25lIHNlY3Rpb24gRW50aXRsZWQKKyJIaXN0b3J5IjsgbGlrZXdpc2UgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiLAorYW5kIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiRGVkaWNhdGlvbnMiLiAgWW91IG11c3QgZGVsZXRlIGFsbCBzZWN0aW9ucworRW50aXRsZWQgIkVuZG9yc2VtZW50cyIuCisKKworNi4gQ09MTEVDVElPTlMgT0YgRE9DVU1FTlRTCisKK1lvdSBtYXkgbWFrZSBhIGNvbGxlY3Rpb24gY29uc2lzdGluZyBvZiB0aGUgRG9jdW1lbnQgYW5kIG90aGVyIGRvY3VtZW50cworcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhpcworTGljZW5zZSBpbiB0aGUgdmFyaW91cyBkb2N1bWVudHMgd2l0aCBhIHNpbmdsZSBjb3B5IHRoYXQgaXMgaW5jbHVkZWQgaW4KK3RoZSBjb2xsZWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBmb2xsb3cgdGhlIHJ1bGVzIG9mIHRoaXMgTGljZW5zZSBmb3IKK3ZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUgZG9jdW1lbnRzIGluIGFsbCBvdGhlciByZXNwZWN0cy4KKworWW91IG1heSBleHRyYWN0IGEgc2luZ2xlIGRvY3VtZW50IGZyb20gc3VjaCBhIGNvbGxlY3Rpb24sIGFuZCBkaXN0cmlidXRlCitpdCBpbmRpdmlkdWFsbHkgdW5kZXIgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB5b3UgaW5zZXJ0IGEgY29weSBvZiB0aGlzCitMaWNlbnNlIGludG8gdGhlIGV4dHJhY3RlZCBkb2N1bWVudCwgYW5kIGZvbGxvdyB0aGlzIExpY2Vuc2UgaW4gYWxsCitvdGhlciByZXNwZWN0cyByZWdhcmRpbmcgdmVyYmF0aW0gY29weWluZyBvZiB0aGF0IGRvY3VtZW50LgorCisKKzcuIEFHR1JFR0FUSU9OIFdJVEggSU5ERVBFTkRFTlQgV09SS1MKKworQSBjb21waWxhdGlvbiBvZiB0aGUgRG9jdW1lbnQgb3IgaXRzIGRlcml2YXRpdmVzIHdpdGggb3RoZXIgc2VwYXJhdGUKK2FuZCBpbmRlcGVuZGVudCBkb2N1bWVudHMgb3Igd29ya3MsIGluIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvcgorZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuICJhZ2dyZWdhdGUiIGlmIHRoZSBjb3B5cmlnaHQKK3Jlc3VsdGluZyBmcm9tIHRoZSBjb21waWxhdGlvbiBpcyBub3QgdXNlZCB0byBsaW1pdCB0aGUgbGVnYWwgcmlnaHRzCitvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycyBiZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuCitXaGVuIHRoZSBEb2N1bWVudCBpcyBpbmNsdWRlZCBpbiBhbiBhZ2dyZWdhdGUsIHRoaXMgTGljZW5zZSBkb2VzIG5vdAorYXBwbHkgdG8gdGhlIG90aGVyIHdvcmtzIGluIHRoZSBhZ2dyZWdhdGUgd2hpY2ggYXJlIG5vdCB0aGVtc2VsdmVzCitkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEb2N1bWVudC4KKworSWYgdGhlIENvdmVyIFRleHQgcmVxdWlyZW1lbnQgb2Ygc2VjdGlvbiAzIGlzIGFwcGxpY2FibGUgdG8gdGhlc2UKK2NvcGllcyBvZiB0aGUgRG9jdW1lbnQsIHRoZW4gaWYgdGhlIERvY3VtZW50IGlzIGxlc3MgdGhhbiBvbmUgaGFsZiBvZgordGhlIGVudGlyZSBhZ2dyZWdhdGUsIHRoZSBEb2N1bWVudCdzIENvdmVyIFRleHRzIG1heSBiZSBwbGFjZWQgb24KK2NvdmVycyB0aGF0IGJyYWNrZXQgdGhlIERvY3VtZW50IHdpdGhpbiB0aGUgYWdncmVnYXRlLCBvciB0aGUKK2VsZWN0cm9uaWMgZXF1aXZhbGVudCBvZiBjb3ZlcnMgaWYgdGhlIERvY3VtZW50IGlzIGluIGVsZWN0cm9uaWMgZm9ybS4KK090aGVyd2lzZSB0aGV5IG11c3QgYXBwZWFyIG9uIHByaW50ZWQgY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgd2hvbGUKK2FnZ3JlZ2F0ZS4KKworCis4LiBUUkFOU0xBVElPTgorCitUcmFuc2xhdGlvbiBpcyBjb25zaWRlcmVkIGEga2luZCBvZiBtb2RpZmljYXRpb24sIHNvIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoZSBEb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbiA0LgorUmVwbGFjaW5nIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRyYW5zbGF0aW9ucyByZXF1aXJlcyBzcGVjaWFsCitwZXJtaXNzaW9uIGZyb20gdGhlaXIgY29weXJpZ2h0IGhvbGRlcnMsIGJ1dCB5b3UgbWF5IGluY2x1ZGUKK3RyYW5zbGF0aW9ucyBvZiBzb21lIG9yIGFsbCBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gYWRkaXRpb24gdG8gdGhlCitvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGVzZSBJbnZhcmlhbnQgU2VjdGlvbnMuICBZb3UgbWF5IGluY2x1ZGUgYQordHJhbnNsYXRpb24gb2YgdGhpcyBMaWNlbnNlLCBhbmQgYWxsIHRoZSBsaWNlbnNlIG5vdGljZXMgaW4gdGhlCitEb2N1bWVudCwgYW5kIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycywgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBpbmNsdWRlCit0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb25zCitvZiB0aG9zZSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycy4gIEluIGNhc2Ugb2YgYSBkaXNhZ3JlZW1lbnQgYmV0d2VlbgordGhlIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBub3RpY2UKK29yIGRpc2NsYWltZXIsIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIHdpbGwgcHJldmFpbC4KKworSWYgYSBzZWN0aW9uIGluIHRoZSBEb2N1bWVudCBpcyBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsCisiRGVkaWNhdGlvbnMiLCBvciAiSGlzdG9yeSIsIHRoZSByZXF1aXJlbWVudCAoc2VjdGlvbiA0KSB0byBQcmVzZXJ2ZQoraXRzIFRpdGxlIChzZWN0aW9uIDEpIHdpbGwgdHlwaWNhbGx5IHJlcXVpcmUgY2hhbmdpbmcgdGhlIGFjdHVhbAordGl0bGUuCisKKworOS4gVEVSTUlOQVRJT04KKworWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBleGNlcHQKK2FzIGV4cHJlc3NseSBwcm92aWRlZCBmb3IgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IG90aGVyIGF0dGVtcHQgdG8KK2NvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpcyB2b2lkLCBhbmQgd2lsbAorYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwKK3BhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMKK0xpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisKKzEwLiBGVVRVUkUgUkVWSVNJT05TIE9GIFRISVMgTElDRU5TRQorCitUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIG5ldywgcmV2aXNlZCB2ZXJzaW9ucworb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3Cit2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkKK2RpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuICBTZWUKK2h0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC8uCisKK0VhY2ggdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorSWYgdGhlIERvY3VtZW50IHNwZWNpZmllcyB0aGF0IGEgcGFydGljdWxhciBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mCitmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHNwZWNpZmllZCB2ZXJzaW9uIG9yCitvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uCitudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90CithcyBhIGRyYWZ0KSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisKK0FEREVORFVNOiBIb3cgdG8gdXNlIHRoaXMgTGljZW5zZSBmb3IgeW91ciBkb2N1bWVudHMKKworVG8gdXNlIHRoaXMgTGljZW5zZSBpbiBhIGRvY3VtZW50IHlvdSBoYXZlIHdyaXR0ZW4sIGluY2x1ZGUgYSBjb3B5IG9mCit0aGUgTGljZW5zZSBpbiB0aGUgZG9jdW1lbnQgYW5kIHB1dCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKK2xpY2Vuc2Ugbm90aWNlcyBqdXN0IGFmdGVyIHRoZSB0aXRsZSBwYWdlOgorCisgICAgQ29weXJpZ2h0IChjKSAgWUVBUiAgWU9VUiBOQU1FLgorICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAorICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMgorICAgIG9yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICAgIHdpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIG5vIEJhY2stQ292ZXIgVGV4dHMuCisgICAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkICJHTlUKKyAgICBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSIuCisKK0lmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucywgRnJvbnQtQ292ZXIgVGV4dHMgYW5kIEJhY2stQ292ZXIgVGV4dHMsCityZXBsYWNlIHRoZSAid2l0aC4uLlRleHRzLiIgbGluZSB3aXRoIHRoaXM6CisKKyAgICB3aXRoIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgTElTVCBUSEVJUiBUSVRMRVMsIHdpdGggdGhlCisgICAgRnJvbnQtQ292ZXIgVGV4dHMgYmVpbmcgTElTVCwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgTElTVC4KKworSWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGhvdXQgQ292ZXIgVGV4dHMsIG9yIHNvbWUgb3RoZXIKK2NvbWJpbmF0aW9uIG9mIHRoZSB0aHJlZSwgbWVyZ2UgdGhvc2UgdHdvIGFsdGVybmF0aXZlcyB0byBzdWl0IHRoZQorc2l0dWF0aW9uLgorCitJZiB5b3VyIGRvY3VtZW50IGNvbnRhaW5zIG5vbnRyaXZpYWwgZXhhbXBsZXMgb2YgcHJvZ3JhbSBjb2RlLCB3ZQorcmVjb21tZW5kIHJlbGVhc2luZyB0aGVzZSBleGFtcGxlcyBpbiBwYXJhbGxlbCB1bmRlciB5b3VyIGNob2ljZSBvZgorZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzdWNoIGFzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK3RvIHBlcm1pdCB0aGVpciB1c2UgaW4gZnJlZSBzb2Z0d2FyZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR0ZETC0xLjIgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjODcyYzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4yCkBAIC0wLDAgKzEsMzk5IEBACisKKyAgICAgICAgICAgICAgICBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgIFZlcnNpb24gMS4yLCBOb3ZlbWJlciAyMDAyCisKKworIENvcHlyaWdodCAoQykgMjAwMCwyMDAxLDIwMDIgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisKKzAuIFBSRUFNQkxFCisKK1RoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZSBpcyB0byBtYWtlIGEgbWFudWFsLCB0ZXh0Ym9vaywgb3Igb3RoZXIKK2Z1bmN0aW9uYWwgYW5kIHVzZWZ1bCBkb2N1bWVudCAiZnJlZSIgaW4gdGhlIHNlbnNlIG9mIGZyZWVkb206IHRvCithc3N1cmUgZXZlcnlvbmUgdGhlIGVmZmVjdGl2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIHJlZGlzdHJpYnV0ZSBpdCwKK3dpdGggb3Igd2l0aG91dCBtb2RpZnlpbmcgaXQsIGVpdGhlciBjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LgorU2Vjb25kYXJpbHksIHRoaXMgTGljZW5zZSBwcmVzZXJ2ZXMgZm9yIHRoZSBhdXRob3IgYW5kIHB1Ymxpc2hlciBhIHdheQordG8gZ2V0IGNyZWRpdCBmb3IgdGhlaXIgd29yaywgd2hpbGUgbm90IGJlaW5nIGNvbnNpZGVyZWQgcmVzcG9uc2libGUKK2ZvciBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXJzLgorCitUaGlzIExpY2Vuc2UgaXMgYSBraW5kIG9mICJjb3B5bGVmdCIsIHdoaWNoIG1lYW5zIHRoYXQgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIGRvY3VtZW50IG11c3QgdGhlbXNlbHZlcyBiZSBmcmVlIGluIHRoZSBzYW1lIHNlbnNlLiAgSXQKK2NvbXBsZW1lbnRzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggaXMgYSBjb3B5bGVmdAorbGljZW5zZSBkZXNpZ25lZCBmb3IgZnJlZSBzb2Z0d2FyZS4KKworV2UgaGF2ZSBkZXNpZ25lZCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gdXNlIGl0IGZvciBtYW51YWxzIGZvciBmcmVlCitzb2Z0d2FyZSwgYmVjYXVzZSBmcmVlIHNvZnR3YXJlIG5lZWRzIGZyZWUgZG9jdW1lbnRhdGlvbjogYSBmcmVlCitwcm9ncmFtIHNob3VsZCBjb21lIHdpdGggbWFudWFscyBwcm92aWRpbmcgdGhlIHNhbWUgZnJlZWRvbXMgdGhhdCB0aGUKK3NvZnR3YXJlIGRvZXMuICBCdXQgdGhpcyBMaWNlbnNlIGlzIG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIG1hbnVhbHM7CitpdCBjYW4gYmUgdXNlZCBmb3IgYW55IHRleHR1YWwgd29yaywgcmVnYXJkbGVzcyBvZiBzdWJqZWN0IG1hdHRlciBvcgord2hldGhlciBpdCBpcyBwdWJsaXNoZWQgYXMgYSBwcmludGVkIGJvb2suICBXZSByZWNvbW1lbmQgdGhpcyBMaWNlbnNlCitwcmluY2lwYWxseSBmb3Igd29ya3Mgd2hvc2UgcHVycG9zZSBpcyBpbnN0cnVjdGlvbiBvciByZWZlcmVuY2UuCisKKworMS4gQVBQTElDQUJJTElUWSBBTkQgREVGSU5JVElPTlMKKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG1hbnVhbCBvciBvdGhlciB3b3JrLCBpbiBhbnkgbWVkaXVtLCB0aGF0Citjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IGNhbiBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIFN1Y2ggYSBub3RpY2UgZ3JhbnRzIGEKK3dvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1bmxpbWl0ZWQgaW4gZHVyYXRpb24sIHRvIHVzZSB0aGF0Cit3b3JrIHVuZGVyIHRoZSBjb25kaXRpb25zIHN0YXRlZCBoZXJlaW4uICBUaGUgIkRvY3VtZW50IiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggbWFudWFsIG9yIHdvcmsuICBBbnkgbWVtYmVyIG9mIHRoZSBwdWJsaWMgaXMgYQorbGljZW5zZWUsIGFuZCBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICBZb3UgYWNjZXB0IHRoZSBsaWNlbnNlIGlmIHlvdQorY29weSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIHdvcmsgaW4gYSB3YXkgcmVxdWlyaW5nIHBlcm1pc3Npb24KK3VuZGVyIGNvcHlyaWdodCBsYXcuCisKK0EgIk1vZGlmaWVkIFZlcnNpb24iIG9mIHRoZSBEb2N1bWVudCBtZWFucyBhbnkgd29yayBjb250YWluaW5nIHRoZQorRG9jdW1lbnQgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgY29waWVkIHZlcmJhdGltLCBvciB3aXRoCittb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKworQSAiU2Vjb25kYXJ5IFNlY3Rpb24iIGlzIGEgbmFtZWQgYXBwZW5kaXggb3IgYSBmcm9udC1tYXR0ZXIgc2VjdGlvbiBvZgordGhlIERvY3VtZW50IHRoYXQgZGVhbHMgZXhjbHVzaXZlbHkgd2l0aCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZQorcHVibGlzaGVycyBvciBhdXRob3JzIG9mIHRoZSBEb2N1bWVudCB0byB0aGUgRG9jdW1lbnRgcyBvdmVyYWxsIHN1YmplY3QKKyhvciB0byByZWxhdGVkIG1hdHRlcnMpIGFuZCBjb250YWlucyBub3RoaW5nIHRoYXQgY291bGQgZmFsbCBkaXJlY3RseQord2l0aGluIHRoYXQgb3ZlcmFsbCBzdWJqZWN0LiAgKFRodXMsIGlmIHRoZSBEb2N1bWVudCBpcyBpbiBwYXJ0IGEKK3RleHRib29rIG9mIG1hdGhlbWF0aWNzLCBhIFNlY29uZGFyeSBTZWN0aW9uIG1heSBub3QgZXhwbGFpbiBhbnkKK21hdGhlbWF0aWNzLikgIFRoZSByZWxhdGlvbnNoaXAgY291bGQgYmUgYSBtYXR0ZXIgb2YgaGlzdG9yaWNhbAorY29ubmVjdGlvbiB3aXRoIHRoZSBzdWJqZWN0IG9yIHdpdGggcmVsYXRlZCBtYXR0ZXJzLCBvciBvZiBsZWdhbCwKK2NvbW1lcmNpYWwsIHBoaWxvc29waGljYWwsIGV0aGljYWwgb3IgcG9saXRpY2FsIHBvc2l0aW9uIHJlZ2FyZGluZwordGhlbS4KKworVGhlICJJbnZhcmlhbnQgU2VjdGlvbnMiIGFyZSBjZXJ0YWluIFNlY29uZGFyeSBTZWN0aW9ucyB3aG9zZSB0aXRsZXMKK2FyZSBkZXNpZ25hdGVkLCBhcyBiZWluZyB0aG9zZSBvZiBJbnZhcmlhbnQgU2VjdGlvbnMsIGluIHRoZSBub3RpY2UKK3RoYXQgc2F5cyB0aGF0IHRoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBJZiBhCitzZWN0aW9uIGRvZXMgbm90IGZpdCB0aGUgYWJvdmUgZGVmaW5pdGlvbiBvZiBTZWNvbmRhcnkgdGhlbiBpdCBpcyBub3QKK2FsbG93ZWQgdG8gYmUgZGVzaWduYXRlZCBhcyBJbnZhcmlhbnQuICBUaGUgRG9jdW1lbnQgbWF5IGNvbnRhaW4gemVybworSW52YXJpYW50IFNlY3Rpb25zLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IGlkZW50aWZ5IGFueSBJbnZhcmlhbnQKK1NlY3Rpb25zIHRoZW4gdGhlcmUgYXJlIG5vbmUuCisKK1RoZSAiQ292ZXIgVGV4dHMiIGFyZSBjZXJ0YWluIHNob3J0IHBhc3NhZ2VzIG9mIHRleHQgdGhhdCBhcmUgbGlzdGVkLAorYXMgRnJvbnQtQ292ZXIgVGV4dHMgb3IgQmFjay1Db3ZlciBUZXh0cywgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdAordGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEEgRnJvbnQtQ292ZXIgVGV4dCBtYXkKK2JlIGF0IG1vc3QgNSB3b3JkcywgYW5kIGEgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhdCBtb3N0IDI1IHdvcmRzLgorCitBICJUcmFuc3BhcmVudCIgY29weSBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHksCityZXByZXNlbnRlZCBpbiBhIGZvcm1hdCB3aG9zZSBzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUKK2dlbmVyYWwgcHVibGljLCB0aGF0IGlzIHN1aXRhYmxlIGZvciByZXZpc2luZyB0aGUgZG9jdW1lbnQKK3N0cmFpZ2h0Zm9yd2FyZGx5IHdpdGggZ2VuZXJpYyB0ZXh0IGVkaXRvcnMgb3IgKGZvciBpbWFnZXMgY29tcG9zZWQgb2YKK3BpeGVscykgZ2VuZXJpYyBwYWludCBwcm9ncmFtcyBvciAoZm9yIGRyYXdpbmdzKSBzb21lIHdpZGVseSBhdmFpbGFibGUKK2RyYXdpbmcgZWRpdG9yLCBhbmQgdGhhdCBpcyBzdWl0YWJsZSBmb3IgaW5wdXQgdG8gdGV4dCBmb3JtYXR0ZXJzIG9yCitmb3IgYXV0b21hdGljIHRyYW5zbGF0aW9uIHRvIGEgdmFyaWV0eSBvZiBmb3JtYXRzIHN1aXRhYmxlIGZvciBpbnB1dAordG8gdGV4dCBmb3JtYXR0ZXJzLiAgQSBjb3B5IG1hZGUgaW4gYW4gb3RoZXJ3aXNlIFRyYW5zcGFyZW50IGZpbGUKK2Zvcm1hdCB3aG9zZSBtYXJrdXAsIG9yIGFic2VuY2Ugb2YgbWFya3VwLCBoYXMgYmVlbiBhcnJhbmdlZCB0byB0aHdhcnQKK29yIGRpc2NvdXJhZ2Ugc3Vic2VxdWVudCBtb2RpZmljYXRpb24gYnkgcmVhZGVycyBpcyBub3QgVHJhbnNwYXJlbnQuCitBbiBpbWFnZSBmb3JtYXQgaXMgbm90IFRyYW5zcGFyZW50IGlmIHVzZWQgZm9yIGFueSBzdWJzdGFudGlhbCBhbW91bnQKK29mIHRleHQuICBBIGNvcHkgdGhhdCBpcyBub3QgIlRyYW5zcGFyZW50IiBpcyBjYWxsZWQgIk9wYXF1ZSIuCisKK0V4YW1wbGVzIG9mIHN1aXRhYmxlIGZvcm1hdHMgZm9yIFRyYW5zcGFyZW50IGNvcGllcyBpbmNsdWRlIHBsYWluCitBU0NJSSB3aXRob3V0IG1hcmt1cCwgVGV4aW5mbyBpbnB1dCBmb3JtYXQsIExhVGVYIGlucHV0IGZvcm1hdCwgU0dNTAorb3IgWE1MIHVzaW5nIGEgcHVibGljbHkgYXZhaWxhYmxlIERURCwgYW5kIHN0YW5kYXJkLWNvbmZvcm1pbmcgc2ltcGxlCitIVE1MLCBQb3N0U2NyaXB0IG9yIFBERiBkZXNpZ25lZCBmb3IgaHVtYW4gbW9kaWZpY2F0aW9uLiAgRXhhbXBsZXMgb2YKK3RyYW5zcGFyZW50IGltYWdlIGZvcm1hdHMgaW5jbHVkZSBQTkcsIFhDRiBhbmQgSlBHLiAgT3BhcXVlIGZvcm1hdHMKK2luY2x1ZGUgcHJvcHJpZXRhcnkgZm9ybWF0cyB0aGF0IGNhbiBiZSByZWFkIGFuZCBlZGl0ZWQgb25seSBieQorcHJvcHJpZXRhcnkgd29yZCBwcm9jZXNzb3JzLCBTR01MIG9yIFhNTCBmb3Igd2hpY2ggdGhlIERURCBhbmQvb3IKK3Byb2Nlc3NpbmcgdG9vbHMgYXJlIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLCBhbmQgdGhlCittYWNoaW5lLWdlbmVyYXRlZCBIVE1MLCBQb3N0U2NyaXB0IG9yIFBERiBwcm9kdWNlZCBieSBzb21lIHdvcmQKK3Byb2Nlc3NvcnMgZm9yIG91dHB1dCBwdXJwb3NlcyBvbmx5LgorCitUaGUgIlRpdGxlIFBhZ2UiIG1lYW5zLCBmb3IgYSBwcmludGVkIGJvb2ssIHRoZSB0aXRsZSBwYWdlIGl0c2VsZiwKK3BsdXMgc3VjaCBmb2xsb3dpbmcgcGFnZXMgYXMgYXJlIG5lZWRlZCB0byBob2xkLCBsZWdpYmx5LCB0aGUgbWF0ZXJpYWwKK3RoaXMgTGljZW5zZSByZXF1aXJlcyB0byBhcHBlYXIgaW4gdGhlIHRpdGxlIHBhZ2UuICBGb3Igd29ya3MgaW4KK2Zvcm1hdHMgd2hpY2ggZG8gbm90IGhhdmUgYW55IHRpdGxlIHBhZ2UgYXMgc3VjaCwgIlRpdGxlIFBhZ2UiIG1lYW5zCit0aGUgdGV4dCBuZWFyIHRoZSBtb3N0IHByb21pbmVudCBhcHBlYXJhbmNlIG9mIHRoZSB3b3JrYHMgdGl0bGUsCitwcmVjZWRpbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgYm9keSBvZiB0aGUgdGV4dC4KKworQSBzZWN0aW9uICJFbnRpdGxlZCBYWVoiIG1lYW5zIGEgbmFtZWQgc3VidW5pdCBvZiB0aGUgRG9jdW1lbnQgd2hvc2UKK3RpdGxlIGVpdGhlciBpcyBwcmVjaXNlbHkgWFlaIG9yIGNvbnRhaW5zIFhZWiBpbiBwYXJlbnRoZXNlcyBmb2xsb3dpbmcKK3RleHQgdGhhdCB0cmFuc2xhdGVzIFhZWiBpbiBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmUgWFlaIHN0YW5kcyBmb3IgYQorc3BlY2lmaWMgc2VjdGlvbiBuYW1lIG1lbnRpb25lZCBiZWxvdywgc3VjaCBhcyAiQWNrbm93bGVkZ2VtZW50cyIsCisiRGVkaWNhdGlvbnMiLCAiRW5kb3JzZW1lbnRzIiwgb3IgIkhpc3RvcnkiLikgIFRvICJQcmVzZXJ2ZSB0aGUgVGl0bGUiCitvZiBzdWNoIGEgc2VjdGlvbiB3aGVuIHlvdSBtb2RpZnkgdGhlIERvY3VtZW50IG1lYW5zIHRoYXQgaXQgcmVtYWlucyBhCitzZWN0aW9uICJFbnRpdGxlZCBYWVoiIGFjY29yZGluZyB0byB0aGlzIGRlZmluaXRpb24uCisKK1RoZSBEb2N1bWVudCBtYXkgaW5jbHVkZSBXYXJyYW50eSBEaXNjbGFpbWVycyBuZXh0IHRvIHRoZSBub3RpY2Ugd2hpY2gKK3N0YXRlcyB0aGF0IHRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBEb2N1bWVudC4gIFRoZXNlIFdhcnJhbnR5CitEaXNjbGFpbWVycyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbmNsdWRlZCBieSByZWZlcmVuY2UgaW4gdGhpcworTGljZW5zZSwgYnV0IG9ubHkgYXMgcmVnYXJkcyBkaXNjbGFpbWluZyB3YXJyYW50aWVzOiBhbnkgb3RoZXIKK2ltcGxpY2F0aW9uIHRoYXQgdGhlc2UgV2FycmFudHkgRGlzY2xhaW1lcnMgbWF5IGhhdmUgaXMgdm9pZCBhbmQgaGFzCitubyBlZmZlY3Qgb24gdGhlIG1lYW5pbmcgb2YgdGhpcyBMaWNlbnNlLgorCisKKzIuIFZFUkJBVElNIENPUFlJTkcKKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpbiBhbnkgbWVkaXVtLCBlaXRoZXIKK2NvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHksIHByb3ZpZGVkIHRoYXQgdGhpcyBMaWNlbnNlLCB0aGUKK2NvcHlyaWdodCBub3RpY2VzLCBhbmQgdGhlIGxpY2Vuc2Ugbm90aWNlIHNheWluZyB0aGlzIExpY2Vuc2UgYXBwbGllcwordG8gdGhlIERvY3VtZW50IGFyZSByZXByb2R1Y2VkIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHlvdSBhZGQgbm8gb3RoZXIKK2NvbmRpdGlvbnMgd2hhdHNvZXZlciB0byB0aG9zZSBvZiB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCB1c2UKK3RlY2huaWNhbCBtZWFzdXJlcyB0byBvYnN0cnVjdCBvciBjb250cm9sIHRoZSByZWFkaW5nIG9yIGZ1cnRoZXIKK2NvcHlpbmcgb2YgdGhlIGNvcGllcyB5b3UgbWFrZSBvciBkaXN0cmlidXRlLiAgSG93ZXZlciwgeW91IG1heSBhY2NlcHQKK2NvbXBlbnNhdGlvbiBpbiBleGNoYW5nZSBmb3IgY29waWVzLiAgSWYgeW91IGRpc3RyaWJ1dGUgYSBsYXJnZSBlbm91Z2gKK251bWJlciBvZiBjb3BpZXMgeW91IG11c3QgYWxzbyBmb2xsb3cgdGhlIGNvbmRpdGlvbnMgaW4gc2VjdGlvbiAzLgorCitZb3UgbWF5IGFsc28gbGVuZCBjb3BpZXMsIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgc3RhdGVkIGFib3ZlLCBhbmQKK3lvdSBtYXkgcHVibGljbHkgZGlzcGxheSBjb3BpZXMuCisKKworMy4gQ09QWUlORyBJTiBRVUFOVElUWQorCitJZiB5b3UgcHVibGlzaCBwcmludGVkIGNvcGllcyAob3IgY29waWVzIGluIG1lZGlhIHRoYXQgY29tbW9ubHkgaGF2ZQorcHJpbnRlZCBjb3ZlcnMpIG9mIHRoZSBEb2N1bWVudCwgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsIGFuZCB0aGUKK0RvY3VtZW50YHMgbGljZW5zZSBub3RpY2UgcmVxdWlyZXMgQ292ZXIgVGV4dHMsIHlvdSBtdXN0IGVuY2xvc2UgdGhlCitjb3BpZXMgaW4gY292ZXJzIHRoYXQgY2FycnksIGNsZWFybHkgYW5kIGxlZ2libHksIGFsbCB0aGVzZSBDb3ZlcgorVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kIEJhY2stQ292ZXIgVGV4dHMgb24KK3RoZSBiYWNrIGNvdmVyLiAgQm90aCBjb3ZlcnMgbXVzdCBhbHNvIGNsZWFybHkgYW5kIGxlZ2libHkgaWRlbnRpZnkKK3lvdSBhcyB0aGUgcHVibGlzaGVyIG9mIHRoZXNlIGNvcGllcy4gIFRoZSBmcm9udCBjb3ZlciBtdXN0IHByZXNlbnQKK3RoZSBmdWxsIHRpdGxlIHdpdGggYWxsIHdvcmRzIG9mIHRoZSB0aXRsZSBlcXVhbGx5IHByb21pbmVudCBhbmQKK3Zpc2libGUuICBZb3UgbWF5IGFkZCBvdGhlciBtYXRlcmlhbCBvbiB0aGUgY292ZXJzIGluIGFkZGl0aW9uLgorQ29weWluZyB3aXRoIGNoYW5nZXMgbGltaXRlZCB0byB0aGUgY292ZXJzLCBhcyBsb25nIGFzIHRoZXkgcHJlc2VydmUKK3RoZSB0aXRsZSBvZiB0aGUgRG9jdW1lbnQgYW5kIHNhdGlzZnkgdGhlc2UgY29uZGl0aW9ucywgY2FuIGJlIHRyZWF0ZWQKK2FzIHZlcmJhdGltIGNvcHlpbmcgaW4gb3RoZXIgcmVzcGVjdHMuCisKK0lmIHRoZSByZXF1aXJlZCB0ZXh0cyBmb3IgZWl0aGVyIGNvdmVyIGFyZSB0b28gdm9sdW1pbm91cyB0byBmaXQKK2xlZ2libHksIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJzdCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQKK3JlYXNvbmFibHkpIG9uIHRoZSBhY3R1YWwgY292ZXIsIGFuZCBjb250aW51ZSB0aGUgcmVzdCBvbnRvIGFkamFjZW50CitwYWdlcy4KKworSWYgeW91IHB1Ymxpc2ggb3IgZGlzdHJpYnV0ZSBPcGFxdWUgY29waWVzIG9mIHRoZSBEb2N1bWVudCBudW1iZXJpbmcKK21vcmUgdGhhbiAxMDAsIHlvdSBtdXN0IGVpdGhlciBpbmNsdWRlIGEgbWFjaGluZS1yZWFkYWJsZSBUcmFuc3BhcmVudAorY29weSBhbG9uZyB3aXRoIGVhY2ggT3BhcXVlIGNvcHksIG9yIHN0YXRlIGluIG9yIHdpdGggZWFjaCBPcGFxdWUgY29weQorYSBjb21wdXRlci1uZXR3b3JrIGxvY2F0aW9uIGZyb20gd2hpY2ggdGhlIGdlbmVyYWwgbmV0d29yay11c2luZworcHVibGljIGhhcyBhY2Nlc3MgdG8gZG93bmxvYWQgdXNpbmcgcHVibGljLXN0YW5kYXJkIG5ldHdvcmsgcHJvdG9jb2xzCithIGNvbXBsZXRlIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBmcmVlIG9mIGFkZGVkIG1hdGVyaWFsLgorSWYgeW91IHVzZSB0aGUgbGF0dGVyIG9wdGlvbiwgeW91IG11c3QgdGFrZSByZWFzb25hYmx5IHBydWRlbnQgc3RlcHMsCit3aGVuIHlvdSBiZWdpbiBkaXN0cmlidXRpb24gb2YgT3BhcXVlIGNvcGllcyBpbiBxdWFudGl0eSwgdG8gZW5zdXJlCit0aGF0IHRoaXMgVHJhbnNwYXJlbnQgY29weSB3aWxsIHJlbWFpbiB0aHVzIGFjY2Vzc2libGUgYXQgdGhlIHN0YXRlZAorbG9jYXRpb24gdW50aWwgYXQgbGVhc3Qgb25lIHllYXIgYWZ0ZXIgdGhlIGxhc3QgdGltZSB5b3UgZGlzdHJpYnV0ZSBhbgorT3BhcXVlIGNvcHkgKGRpcmVjdGx5IG9yIHRocm91Z2ggeW91ciBhZ2VudHMgb3IgcmV0YWlsZXJzKSBvZiB0aGF0CitlZGl0aW9uIHRvIHRoZSBwdWJsaWMuCisKK0l0IGlzIHJlcXVlc3RlZCwgYnV0IG5vdCByZXF1aXJlZCwgdGhhdCB5b3UgY29udGFjdCB0aGUgYXV0aG9ycyBvZiB0aGUKK0RvY3VtZW50IHdlbGwgYmVmb3JlIHJlZGlzdHJpYnV0aW5nIGFueSBsYXJnZSBudW1iZXIgb2YgY29waWVzLCB0byBnaXZlCit0aGVtIGEgY2hhbmNlIHRvIHByb3ZpZGUgeW91IHdpdGggYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBEb2N1bWVudC4KKworCis0LiBNT0RJRklDQVRJT05TCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBhIE1vZGlmaWVkIFZlcnNpb24gb2YgdGhlIERvY3VtZW50IHVuZGVyCit0aGUgY29uZGl0aW9ucyBvZiBzZWN0aW9ucyAyIGFuZCAzIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSByZWxlYXNlCit0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciBwcmVjaXNlbHkgdGhpcyBMaWNlbnNlLCB3aXRoIHRoZSBNb2RpZmllZAorVmVyc2lvbiBmaWxsaW5nIHRoZSByb2xlIG9mIHRoZSBEb2N1bWVudCwgdGh1cyBsaWNlbnNpbmcgZGlzdHJpYnV0aW9uCithbmQgbW9kaWZpY2F0aW9uIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIHRvIHdob2V2ZXIgcG9zc2Vzc2VzIGEgY29weQorb2YgaXQuICBJbiBhZGRpdGlvbiwgeW91IG11c3QgZG8gdGhlc2UgdGhpbmdzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uOgorCitBLiBVc2UgaW4gdGhlIFRpdGxlIFBhZ2UgKGFuZCBvbiB0aGUgY292ZXJzLCBpZiBhbnkpIGEgdGl0bGUgZGlzdGluY3QKKyAgIGZyb20gdGhhdCBvZiB0aGUgRG9jdW1lbnQsIGFuZCBmcm9tIHRob3NlIG9mIHByZXZpb3VzIHZlcnNpb25zCisgICAod2hpY2ggc2hvdWxkLCBpZiB0aGVyZSB3ZXJlIGFueSwgYmUgbGlzdGVkIGluIHRoZSBIaXN0b3J5IHNlY3Rpb24KKyAgIG9mIHRoZSBEb2N1bWVudCkuICBZb3UgbWF5IHVzZSB0aGUgc2FtZSB0aXRsZSBhcyBhIHByZXZpb3VzIHZlcnNpb24KKyAgIGlmIHRoZSBvcmlnaW5hbCBwdWJsaXNoZXIgb2YgdGhhdCB2ZXJzaW9uIGdpdmVzIHBlcm1pc3Npb24uCitCLiBMaXN0IG9uIHRoZSBUaXRsZSBQYWdlLCBhcyBhdXRob3JzLCBvbmUgb3IgbW9yZSBwZXJzb25zIG9yIGVudGl0aWVzCisgICByZXNwb25zaWJsZSBmb3IgYXV0aG9yc2hpcCBvZiB0aGUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgTW9kaWZpZWQKKyAgIFZlcnNpb24sIHRvZ2V0aGVyIHdpdGggYXQgbGVhc3QgZml2ZSBvZiB0aGUgcHJpbmNpcGFsIGF1dGhvcnMgb2YgdGhlCisgICBEb2N1bWVudCAoYWxsIG9mIGl0cyBwcmluY2lwYWwgYXV0aG9ycywgaWYgaXQgaGFzIGZld2VyIHRoYW4gZml2ZSksCisgICB1bmxlc3MgdGhleSByZWxlYXNlIHlvdSBmcm9tIHRoaXMgcmVxdWlyZW1lbnQuCitDLiBTdGF0ZSBvbiB0aGUgVGl0bGUgcGFnZSB0aGUgbmFtZSBvZiB0aGUgcHVibGlzaGVyIG9mIHRoZQorICAgTW9kaWZpZWQgVmVyc2lvbiwgYXMgdGhlIHB1Ymxpc2hlci4KK0QuIFByZXNlcnZlIGFsbCB0aGUgY29weXJpZ2h0IG5vdGljZXMgb2YgdGhlIERvY3VtZW50LgorRS4gQWRkIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgZm9yIHlvdXIgbW9kaWZpY2F0aW9ucworICAgYWRqYWNlbnQgdG8gdGhlIG90aGVyIGNvcHlyaWdodCBub3RpY2VzLgorRi4gSW5jbHVkZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvcHlyaWdodCBub3RpY2VzLCBhIGxpY2Vuc2Ugbm90aWNlCisgICBnaXZpbmcgdGhlIHB1YmxpYyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciB0aGUKKyAgIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW4gdGhlIGZvcm0gc2hvd24gaW4gdGhlIEFkZGVuZHVtIGJlbG93LgorRy4gUHJlc2VydmUgaW4gdGhhdCBsaWNlbnNlIG5vdGljZSB0aGUgZnVsbCBsaXN0cyBvZiBJbnZhcmlhbnQgU2VjdGlvbnMKKyAgIGFuZCByZXF1aXJlZCBDb3ZlciBUZXh0cyBnaXZlbiBpbiB0aGUgRG9jdW1lbnRgcyBsaWNlbnNlIG5vdGljZS4KK0guIEluY2x1ZGUgYW4gdW5hbHRlcmVkIGNvcHkgb2YgdGhpcyBMaWNlbnNlLgorSS4gUHJlc2VydmUgdGhlIHNlY3Rpb24gRW50aXRsZWQgIkhpc3RvcnkiLCBQcmVzZXJ2ZSBpdHMgVGl0bGUsIGFuZCBhZGQKKyAgIHRvIGl0IGFuIGl0ZW0gc3RhdGluZyBhdCBsZWFzdCB0aGUgdGl0bGUsIHllYXIsIG5ldyBhdXRob3JzLCBhbmQKKyAgIHB1Ymxpc2hlciBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhcyBnaXZlbiBvbiB0aGUgVGl0bGUgUGFnZS4gIElmCisgICB0aGVyZSBpcyBubyBzZWN0aW9uIEVudGl0bGVkICJIaXN0b3J5IiBpbiB0aGUgRG9jdW1lbnQsIGNyZWF0ZSBvbmUKKyAgIHN0YXRpbmcgdGhlIHRpdGxlLCB5ZWFyLCBhdXRob3JzLCBhbmQgcHVibGlzaGVyIG9mIHRoZSBEb2N1bWVudCBhcworICAgZ2l2ZW4gb24gaXRzIFRpdGxlIFBhZ2UsIHRoZW4gYWRkIGFuIGl0ZW0gZGVzY3JpYmluZyB0aGUgTW9kaWZpZWQKKyAgIFZlcnNpb24gYXMgc3RhdGVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZS4KK0ouIFByZXNlcnZlIHRoZSBuZXR3b3JrIGxvY2F0aW9uLCBpZiBhbnksIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IKKyAgIHB1YmxpYyBhY2Nlc3MgdG8gYSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgYW5kIGxpa2V3aXNlCisgICB0aGUgbmV0d29yayBsb2NhdGlvbnMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvciBwcmV2aW91cyB2ZXJzaW9ucworICAgaXQgd2FzIGJhc2VkIG9uLiAgVGhlc2UgbWF5IGJlIHBsYWNlZCBpbiB0aGUgIkhpc3RvcnkiIHNlY3Rpb24uCisgICBZb3UgbWF5IG9taXQgYSBuZXR3b3JrIGxvY2F0aW9uIGZvciBhIHdvcmsgdGhhdCB3YXMgcHVibGlzaGVkIGF0CisgICBsZWFzdCBmb3VyIHllYXJzIGJlZm9yZSB0aGUgRG9jdW1lbnQgaXRzZWxmLCBvciBpZiB0aGUgb3JpZ2luYWwKKyAgIHB1Ymxpc2hlciBvZiB0aGUgdmVyc2lvbiBpdCByZWZlcnMgdG8gZ2l2ZXMgcGVybWlzc2lvbi4KK0suIEZvciBhbnkgc2VjdGlvbiBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIgb3IgIkRlZGljYXRpb25zIiwKKyAgIFByZXNlcnZlIHRoZSBUaXRsZSBvZiB0aGUgc2VjdGlvbiwgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0aW9uIGFsbAorICAgdGhlIHN1YnN0YW5jZSBhbmQgdG9uZSBvZiBlYWNoIG9mIHRoZSBjb250cmlidXRvciBhY2tub3dsZWRnZW1lbnRzCisgICBhbmQvb3IgZGVkaWNhdGlvbnMgZ2l2ZW4gdGhlcmVpbi4KK0wuIFByZXNlcnZlIGFsbCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIG9mIHRoZSBEb2N1bWVudCwKKyAgIHVuYWx0ZXJlZCBpbiB0aGVpciB0ZXh0IGFuZCBpbiB0aGVpciB0aXRsZXMuICBTZWN0aW9uIG51bWJlcnMKKyAgIG9yIHRoZSBlcXVpdmFsZW50IGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzZWN0aW9uIHRpdGxlcy4KK00uIERlbGV0ZSBhbnkgc2VjdGlvbiBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIi4gIFN1Y2ggYSBzZWN0aW9uCisgICBtYXkgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLgorTi4gRG8gbm90IHJldGl0bGUgYW55IGV4aXN0aW5nIHNlY3Rpb24gdG8gYmUgRW50aXRsZWQgIkVuZG9yc2VtZW50cyIKKyAgIG9yIHRvIGNvbmZsaWN0IGluIHRpdGxlIHdpdGggYW55IEludmFyaWFudCBTZWN0aW9uLgorTy4gUHJlc2VydmUgYW55IFdhcnJhbnR5IERpc2NsYWltZXJzLgorCitJZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBpbmNsdWRlcyBuZXcgZnJvbnQtbWF0dGVyIHNlY3Rpb25zIG9yCithcHBlbmRpY2VzIHRoYXQgcXVhbGlmeSBhcyBTZWNvbmRhcnkgU2VjdGlvbnMgYW5kIGNvbnRhaW4gbm8gbWF0ZXJpYWwKK2NvcGllZCBmcm9tIHRoZSBEb2N1bWVudCwgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBkZXNpZ25hdGUgc29tZSBvciBhbGwKK29mIHRoZXNlIHNlY3Rpb25zIGFzIGludmFyaWFudC4gIFRvIGRvIHRoaXMsIGFkZCB0aGVpciB0aXRsZXMgdG8gdGhlCitsaXN0IG9mIEludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbmBzIGxpY2Vuc2Ugbm90aWNlLgorVGhlc2UgdGl0bGVzIG11c3QgYmUgZGlzdGluY3QgZnJvbSBhbnkgb3RoZXIgc2VjdGlvbiB0aXRsZXMuCisKK1lvdSBtYXkgYWRkIGEgc2VjdGlvbiBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIiwgcHJvdmlkZWQgaXQgY29udGFpbnMKK25vdGhpbmcgYnV0IGVuZG9yc2VtZW50cyBvZiB5b3VyIE1vZGlmaWVkIFZlcnNpb24gYnkgdmFyaW91cworcGFydGllcy0tZm9yIGV4YW1wbGUsIHN0YXRlbWVudHMgb2YgcGVlciByZXZpZXcgb3IgdGhhdCB0aGUgdGV4dCBoYXMKK2JlZW4gYXBwcm92ZWQgYnkgYW4gb3JnYW5pemF0aW9uIGFzIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb24gb2YgYQorc3RhbmRhcmQuCisKK1lvdSBtYXkgYWRkIGEgcGFzc2FnZSBvZiB1cCB0byBmaXZlIHdvcmRzIGFzIGEgRnJvbnQtQ292ZXIgVGV4dCwgYW5kIGEKK3Bhc3NhZ2Ugb2YgdXAgdG8gMjUgd29yZHMgYXMgYSBCYWNrLUNvdmVyIFRleHQsIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKK29mIENvdmVyIFRleHRzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLiAgT25seSBvbmUgcGFzc2FnZSBvZgorRnJvbnQtQ292ZXIgVGV4dCBhbmQgb25lIG9mIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYWRkZWQgYnkgKG9yCit0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVudGl0eS4gIElmIHRoZSBEb2N1bWVudCBhbHJlYWR5CitpbmNsdWRlcyBhIGNvdmVyIHRleHQgZm9yIHRoZSBzYW1lIGNvdmVyLCBwcmV2aW91c2x5IGFkZGVkIGJ5IHlvdSBvcgorYnkgYXJyYW5nZW1lbnQgbWFkZSBieSB0aGUgc2FtZSBlbnRpdHkgeW91IGFyZSBhY3Rpbmcgb24gYmVoYWxmIG9mLAoreW91IG1heSBub3QgYWRkIGFub3RoZXI7IGJ1dCB5b3UgbWF5IHJlcGxhY2UgdGhlIG9sZCBvbmUsIG9uIGV4cGxpY2l0CitwZXJtaXNzaW9uIGZyb20gdGhlIHByZXZpb3VzIHB1Ymxpc2hlciB0aGF0IGFkZGVkIHRoZSBvbGQgb25lLgorCitUaGUgYXV0aG9yKHMpIGFuZCBwdWJsaXNoZXIocykgb2YgdGhlIERvY3VtZW50IGRvIG5vdCBieSB0aGlzIExpY2Vuc2UKK2dpdmUgcGVybWlzc2lvbiB0byB1c2UgdGhlaXIgbmFtZXMgZm9yIHB1YmxpY2l0eSBmb3Igb3IgdG8gYXNzZXJ0IG9yCitpbXBseSBlbmRvcnNlbWVudCBvZiBhbnkgTW9kaWZpZWQgVmVyc2lvbi4KKworCis1LiBDT01CSU5JTkcgRE9DVU1FTlRTCisKK1lvdSBtYXkgY29tYmluZSB0aGUgRG9jdW1lbnQgd2l0aCBvdGhlciBkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIgdGhpcworTGljZW5zZSwgdW5kZXIgdGhlIHRlcm1zIGRlZmluZWQgaW4gc2VjdGlvbiA0IGFib3ZlIGZvciBtb2RpZmllZAordmVyc2lvbnMsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgaW4gdGhlIGNvbWJpbmF0aW9uIGFsbCBvZiB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBvZiBhbGwgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50cywgdW5tb2RpZmllZCwgYW5kCitsaXN0IHRoZW0gYWxsIGFzIEludmFyaWFudCBTZWN0aW9ucyBvZiB5b3VyIGNvbWJpbmVkIHdvcmsgaW4gaXRzCitsaWNlbnNlIG5vdGljZSwgYW5kIHRoYXQgeW91IHByZXNlcnZlIGFsbCB0aGVpciBXYXJyYW50eSBEaXNjbGFpbWVycy4KKworVGhlIGNvbWJpbmVkIHdvcmsgbmVlZCBvbmx5IGNvbnRhaW4gb25lIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBhbmQKK211bHRpcGxlIGlkZW50aWNhbCBJbnZhcmlhbnQgU2VjdGlvbnMgbWF5IGJlIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUKK2NvcHkuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSBidXQKK2RpZmZlcmVudCBjb250ZW50cywgbWFrZSB0aGUgdGl0bGUgb2YgZWFjaCBzdWNoIHNlY3Rpb24gdW5pcXVlIGJ5CithZGRpbmcgYXQgdGhlIGVuZCBvZiBpdCwgaW4gcGFyZW50aGVzZXMsIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbAorYXV0aG9yIG9yIHB1Ymxpc2hlciBvZiB0aGF0IHNlY3Rpb24gaWYga25vd24sIG9yIGVsc2UgYSB1bmlxdWUgbnVtYmVyLgorTWFrZSB0aGUgc2FtZSBhZGp1c3RtZW50IHRvIHRoZSBzZWN0aW9uIHRpdGxlcyBpbiB0aGUgbGlzdCBvZgorSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBsaWNlbnNlIG5vdGljZSBvZiB0aGUgY29tYmluZWQgd29yay4KKworSW4gdGhlIGNvbWJpbmF0aW9uLCB5b3UgbXVzdCBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiSGlzdG9yeSIKK2luIHRoZSB2YXJpb3VzIG9yaWdpbmFsIGRvY3VtZW50cywgZm9ybWluZyBvbmUgc2VjdGlvbiBFbnRpdGxlZAorIkhpc3RvcnkiOyBsaWtld2lzZSBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsCithbmQgYW55IHNlY3Rpb25zIEVudGl0bGVkICJEZWRpY2F0aW9ucyIuICBZb3UgbXVzdCBkZWxldGUgYWxsIHNlY3Rpb25zCitFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIi4KKworCis2LiBDT0xMRUNUSU9OUyBPRiBET0NVTUVOVFMKKworWW91IG1heSBtYWtlIGEgY29sbGVjdGlvbiBjb25zaXN0aW5nIG9mIHRoZSBEb2N1bWVudCBhbmQgb3RoZXIgZG9jdW1lbnRzCityZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCByZXBsYWNlIHRoZSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGlzCitMaWNlbnNlIGluIHRoZSB2YXJpb3VzIGRvY3VtZW50cyB3aXRoIGEgc2luZ2xlIGNvcHkgdGhhdCBpcyBpbmNsdWRlZCBpbgordGhlIGNvbGxlY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGZvbGxvdyB0aGUgcnVsZXMgb2YgdGhpcyBMaWNlbnNlIGZvcgordmVyYmF0aW0gY29weWluZyBvZiBlYWNoIG9mIHRoZSBkb2N1bWVudHMgaW4gYWxsIG90aGVyIHJlc3BlY3RzLgorCitZb3UgbWF5IGV4dHJhY3QgYSBzaW5nbGUgZG9jdW1lbnQgZnJvbSBzdWNoIGEgY29sbGVjdGlvbiwgYW5kIGRpc3RyaWJ1dGUKK2l0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHlvdSBpbnNlcnQgYSBjb3B5IG9mIHRoaXMKK0xpY2Vuc2UgaW50byB0aGUgZXh0cmFjdGVkIGRvY3VtZW50LCBhbmQgZm9sbG93IHRoaXMgTGljZW5zZSBpbiBhbGwKK290aGVyIHJlc3BlY3RzIHJlZ2FyZGluZyB2ZXJiYXRpbSBjb3B5aW5nIG9mIHRoYXQgZG9jdW1lbnQuCisKKworNy4gQUdHUkVHQVRJT04gV0lUSCBJTkRFUEVOREVOVCBXT1JLUworCitBIGNvbXBpbGF0aW9uIG9mIHRoZSBEb2N1bWVudCBvciBpdHMgZGVyaXZhdGl2ZXMgd2l0aCBvdGhlciBzZXBhcmF0ZQorYW5kIGluZGVwZW5kZW50IGRvY3VtZW50cyBvciB3b3JrcywgaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yCitkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4gImFnZ3JlZ2F0ZSIgaWYgdGhlIGNvcHlyaWdodAorcmVzdWx0aW5nIGZyb20gdGhlIGNvbXBpbGF0aW9uIGlzIG5vdCB1c2VkIHRvIGxpbWl0IHRoZSBsZWdhbCByaWdodHMKK29mIHRoZSBjb21waWxhdGlvbmBzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4KK1doZW4gdGhlIERvY3VtZW50IGlzIGluY2x1ZGVkIGluIGFuIGFnZ3JlZ2F0ZSwgdGhpcyBMaWNlbnNlIGRvZXMgbm90CithcHBseSB0byB0aGUgb3RoZXIgd29ya3MgaW4gdGhlIGFnZ3JlZ2F0ZSB3aGljaCBhcmUgbm90IHRoZW1zZWx2ZXMKK2Rlcml2YXRpdmUgd29ya3Mgb2YgdGhlIERvY3VtZW50LgorCitJZiB0aGUgQ292ZXIgVGV4dCByZXF1aXJlbWVudCBvZiBzZWN0aW9uIDMgaXMgYXBwbGljYWJsZSB0byB0aGVzZQorY29waWVzIG9mIHRoZSBEb2N1bWVudCwgdGhlbiBpZiB0aGUgRG9jdW1lbnQgaXMgbGVzcyB0aGFuIG9uZSBoYWxmIG9mCit0aGUgZW50aXJlIGFnZ3JlZ2F0ZSwgdGhlIERvY3VtZW50YHMgQ292ZXIgVGV4dHMgbWF5IGJlIHBsYWNlZCBvbgorY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgRG9jdW1lbnQgd2l0aGluIHRoZSBhZ2dyZWdhdGUsIG9yIHRoZQorZWxlY3Ryb25pYyBlcXVpdmFsZW50IG9mIGNvdmVycyBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gZWxlY3Ryb25pYyBmb3JtLgorT3RoZXJ3aXNlIHRoZXkgbXVzdCBhcHBlYXIgb24gcHJpbnRlZCBjb3ZlcnMgdGhhdCBicmFja2V0IHRoZSB3aG9sZQorYWdncmVnYXRlLgorCisKKzguIFRSQU5TTEFUSU9OCisKK1RyYW5zbGF0aW9uIGlzIGNvbnNpZGVyZWQgYSBraW5kIG9mIG1vZGlmaWNhdGlvbiwgc28geW91IG1heQorZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhlIERvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uIDQuCitSZXBsYWNpbmcgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdHJhbnNsYXRpb25zIHJlcXVpcmVzIHNwZWNpYWwKK3Blcm1pc3Npb24gZnJvbSB0aGVpciBjb3B5cmlnaHQgaG9sZGVycywgYnV0IHlvdSBtYXkgaW5jbHVkZQordHJhbnNsYXRpb25zIG9mIHNvbWUgb3IgYWxsIEludmFyaWFudCBTZWN0aW9ucyBpbiBhZGRpdGlvbiB0byB0aGUKK29yaWdpbmFsIHZlcnNpb25zIG9mIHRoZXNlIEludmFyaWFudCBTZWN0aW9ucy4gIFlvdSBtYXkgaW5jbHVkZSBhCit0cmFuc2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFuZCBhbGwgdGhlIGxpY2Vuc2Ugbm90aWNlcyBpbiB0aGUKK0RvY3VtZW50LCBhbmQgYW55IFdhcnJhbnR5IERpc2NsYWltZXJzLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGluY2x1ZGUKK3RoZSBvcmlnaW5hbCBFbmdsaXNoIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbnMKK29mIHRob3NlIG5vdGljZXMgYW5kIGRpc2NsYWltZXJzLiAgSW4gY2FzZSBvZiBhIGRpc2FncmVlbWVudCBiZXR3ZWVuCit0aGUgdHJhbnNsYXRpb24gYW5kIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciBhIG5vdGljZQorb3IgZGlzY2xhaW1lciwgdGhlIG9yaWdpbmFsIHZlcnNpb24gd2lsbCBwcmV2YWlsLgorCitJZiBhIHNlY3Rpb24gaW4gdGhlIERvY3VtZW50IGlzIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiwKKyJEZWRpY2F0aW9ucyIsIG9yICJIaXN0b3J5IiwgdGhlIHJlcXVpcmVtZW50IChzZWN0aW9uIDQpIHRvIFByZXNlcnZlCitpdHMgVGl0bGUgKHNlY3Rpb24gMSkgd2lsbCB0eXBpY2FsbHkgcmVxdWlyZSBjaGFuZ2luZyB0aGUgYWN0dWFsCit0aXRsZS4KKworCis5LiBURVJNSU5BVElPTgorCitZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGV4Y2VwdAorYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGZvciB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgb3RoZXIgYXR0ZW1wdCB0bworY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGlzIHZvaWQsIGFuZCB3aWxsCithdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLAorcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcworTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKworMTAuIEZVVFVSRSBSRVZJU0lPTlMgT0YgVEhJUyBMSUNFTlNFCisKK1RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggbmV3LCByZXZpc2VkIHZlcnNpb25zCitvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcKK3ZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heQorZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4gIFNlZQoraHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0Ly4KKworRWFjaCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCitJZiB0aGUgRG9jdW1lbnQgc3BlY2lmaWVzIHRoYXQgYSBwYXJ0aWN1bGFyIG51bWJlcmVkIHZlcnNpb24gb2YgdGhpcworTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YKK2ZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgc3BlY2lmaWVkIHZlcnNpb24gb3IKK29mIGFueSBsYXRlciB2ZXJzaW9uIHRoYXQgaGFzIGJlZW4gcHVibGlzaGVkIChub3QgYXMgYSBkcmFmdCkgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgRG9jdW1lbnQgZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24KK251bWJlciBvZiB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIChub3QKK2FzIGEgZHJhZnQpIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKworQURERU5EVU06IEhvdyB0byB1c2UgdGhpcyBMaWNlbnNlIGZvciB5b3VyIGRvY3VtZW50cworCitUbyB1c2UgdGhpcyBMaWNlbnNlIGluIGEgZG9jdW1lbnQgeW91IGhhdmUgd3JpdHRlbiwgaW5jbHVkZSBhIGNvcHkgb2YKK3RoZSBMaWNlbnNlIGluIHRoZSBkb2N1bWVudCBhbmQgcHV0IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorbGljZW5zZSBub3RpY2VzIGp1c3QgYWZ0ZXIgdGhlIHRpdGxlIHBhZ2U6CisKKyAgICBDb3B5cmlnaHQgKGMpICBZRUFSICBZT1VSIE5BTUUuCisgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50CisgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4yCisgICAgb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgICAgd2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgbm8gQmFjay1Db3ZlciBUZXh0cy4KKyAgICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIkdOVQorICAgIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIi4KKworSWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zLCBGcm9udC1Db3ZlciBUZXh0cyBhbmQgQmFjay1Db3ZlciBUZXh0cywKK3JlcGxhY2UgdGhlICJ3aXRoLi4uVGV4dHMuIiBsaW5lIHdpdGggdGhpczoKKworICAgIHdpdGggdGhlIEludmFyaWFudCBTZWN0aW9ucyBiZWluZyBMSVNUIFRIRUlSIFRJVExFUywgd2l0aCB0aGUKKyAgICBGcm9udC1Db3ZlciBUZXh0cyBiZWluZyBMSVNULCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyBMSVNULgorCitJZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aG91dCBDb3ZlciBUZXh0cywgb3Igc29tZSBvdGhlcgorY29tYmluYXRpb24gb2YgdGhlIHRocmVlLCBtZXJnZSB0aG9zZSB0d28gYWx0ZXJuYXRpdmVzIHRvIHN1aXQgdGhlCitzaXR1YXRpb24uCisKK0lmIHlvdXIgZG9jdW1lbnQgY29udGFpbnMgbm9udHJpdmlhbCBleGFtcGxlcyBvZiBwcm9ncmFtIGNvZGUsIHdlCityZWNvbW1lbmQgcmVsZWFzaW5nIHRoZXNlIGV4YW1wbGVzIGluIHBhcmFsbGVsIHVuZGVyIHlvdXIgY2hvaWNlIG9mCitmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHN1Y2ggYXMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAordG8gcGVybWl0IHRoZWlyIHVzZSBpbiBmcmVlIHNvZnR3YXJlLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4zIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HRkRMLTEuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjExYTQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HRkRMLTEuMwpAQCAtMCwwICsxLDQ1MyBAQAorCisKKyAgICAgICAgICAgICAgICBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgVmVyc2lvbiAxLjMsIDMgTm92ZW1iZXIgMjAwOAorCisKKyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDxodHRwOi8vZnNmLm9yZy8+CisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKzAuIFBSRUFNQkxFCisKK1RoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZSBpcyB0byBtYWtlIGEgbWFudWFsLCB0ZXh0Ym9vaywgb3Igb3RoZXIKK2Z1bmN0aW9uYWwgYW5kIHVzZWZ1bCBkb2N1bWVudCAiZnJlZSIgaW4gdGhlIHNlbnNlIG9mIGZyZWVkb206IHRvCithc3N1cmUgZXZlcnlvbmUgdGhlIGVmZmVjdGl2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIHJlZGlzdHJpYnV0ZSBpdCwKK3dpdGggb3Igd2l0aG91dCBtb2RpZnlpbmcgaXQsIGVpdGhlciBjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LgorU2Vjb25kYXJpbHksIHRoaXMgTGljZW5zZSBwcmVzZXJ2ZXMgZm9yIHRoZSBhdXRob3IgYW5kIHB1Ymxpc2hlciBhIHdheQordG8gZ2V0IGNyZWRpdCBmb3IgdGhlaXIgd29yaywgd2hpbGUgbm90IGJlaW5nIGNvbnNpZGVyZWQgcmVzcG9uc2libGUKK2ZvciBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXJzLgorCitUaGlzIExpY2Vuc2UgaXMgYSBraW5kIG9mICJjb3B5bGVmdCIsIHdoaWNoIG1lYW5zIHRoYXQgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIGRvY3VtZW50IG11c3QgdGhlbXNlbHZlcyBiZSBmcmVlIGluIHRoZSBzYW1lIHNlbnNlLiAgSXQKK2NvbXBsZW1lbnRzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggaXMgYSBjb3B5bGVmdAorbGljZW5zZSBkZXNpZ25lZCBmb3IgZnJlZSBzb2Z0d2FyZS4KKworV2UgaGF2ZSBkZXNpZ25lZCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gdXNlIGl0IGZvciBtYW51YWxzIGZvciBmcmVlCitzb2Z0d2FyZSwgYmVjYXVzZSBmcmVlIHNvZnR3YXJlIG5lZWRzIGZyZWUgZG9jdW1lbnRhdGlvbjogYSBmcmVlCitwcm9ncmFtIHNob3VsZCBjb21lIHdpdGggbWFudWFscyBwcm92aWRpbmcgdGhlIHNhbWUgZnJlZWRvbXMgdGhhdCB0aGUKK3NvZnR3YXJlIGRvZXMuICBCdXQgdGhpcyBMaWNlbnNlIGlzIG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIG1hbnVhbHM7CitpdCBjYW4gYmUgdXNlZCBmb3IgYW55IHRleHR1YWwgd29yaywgcmVnYXJkbGVzcyBvZiBzdWJqZWN0IG1hdHRlciBvcgord2hldGhlciBpdCBpcyBwdWJsaXNoZWQgYXMgYSBwcmludGVkIGJvb2suICBXZSByZWNvbW1lbmQgdGhpcyBMaWNlbnNlCitwcmluY2lwYWxseSBmb3Igd29ya3Mgd2hvc2UgcHVycG9zZSBpcyBpbnN0cnVjdGlvbiBvciByZWZlcmVuY2UuCisKKworMS4gQVBQTElDQUJJTElUWSBBTkQgREVGSU5JVElPTlMKKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG1hbnVhbCBvciBvdGhlciB3b3JrLCBpbiBhbnkgbWVkaXVtLCB0aGF0Citjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IGNhbiBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIFN1Y2ggYSBub3RpY2UgZ3JhbnRzIGEKK3dvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1bmxpbWl0ZWQgaW4gZHVyYXRpb24sIHRvIHVzZSB0aGF0Cit3b3JrIHVuZGVyIHRoZSBjb25kaXRpb25zIHN0YXRlZCBoZXJlaW4uICBUaGUgIkRvY3VtZW50IiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggbWFudWFsIG9yIHdvcmsuICBBbnkgbWVtYmVyIG9mIHRoZSBwdWJsaWMgaXMgYQorbGljZW5zZWUsIGFuZCBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICBZb3UgYWNjZXB0IHRoZSBsaWNlbnNlIGlmIHlvdQorY29weSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIHdvcmsgaW4gYSB3YXkgcmVxdWlyaW5nIHBlcm1pc3Npb24KK3VuZGVyIGNvcHlyaWdodCBsYXcuCisKK0EgIk1vZGlmaWVkIFZlcnNpb24iIG9mIHRoZSBEb2N1bWVudCBtZWFucyBhbnkgd29yayBjb250YWluaW5nIHRoZQorRG9jdW1lbnQgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgY29waWVkIHZlcmJhdGltLCBvciB3aXRoCittb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKworQSAiU2Vjb25kYXJ5IFNlY3Rpb24iIGlzIGEgbmFtZWQgYXBwZW5kaXggb3IgYSBmcm9udC1tYXR0ZXIgc2VjdGlvbiBvZgordGhlIERvY3VtZW50IHRoYXQgZGVhbHMgZXhjbHVzaXZlbHkgd2l0aCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZQorcHVibGlzaGVycyBvciBhdXRob3JzIG9mIHRoZSBEb2N1bWVudCB0byB0aGUgRG9jdW1lbnRgcyBvdmVyYWxsCitzdWJqZWN0IChvciB0byByZWxhdGVkIG1hdHRlcnMpIGFuZCBjb250YWlucyBub3RoaW5nIHRoYXQgY291bGQgZmFsbAorZGlyZWN0bHkgd2l0aGluIHRoYXQgb3ZlcmFsbCBzdWJqZWN0LiAgKFRodXMsIGlmIHRoZSBEb2N1bWVudCBpcyBpbgorcGFydCBhIHRleHRib29rIG9mIG1hdGhlbWF0aWNzLCBhIFNlY29uZGFyeSBTZWN0aW9uIG1heSBub3QgZXhwbGFpbgorYW55IG1hdGhlbWF0aWNzLikgIFRoZSByZWxhdGlvbnNoaXAgY291bGQgYmUgYSBtYXR0ZXIgb2YgaGlzdG9yaWNhbAorY29ubmVjdGlvbiB3aXRoIHRoZSBzdWJqZWN0IG9yIHdpdGggcmVsYXRlZCBtYXR0ZXJzLCBvciBvZiBsZWdhbCwKK2NvbW1lcmNpYWwsIHBoaWxvc29waGljYWwsIGV0aGljYWwgb3IgcG9saXRpY2FsIHBvc2l0aW9uIHJlZ2FyZGluZwordGhlbS4KKworVGhlICJJbnZhcmlhbnQgU2VjdGlvbnMiIGFyZSBjZXJ0YWluIFNlY29uZGFyeSBTZWN0aW9ucyB3aG9zZSB0aXRsZXMKK2FyZSBkZXNpZ25hdGVkLCBhcyBiZWluZyB0aG9zZSBvZiBJbnZhcmlhbnQgU2VjdGlvbnMsIGluIHRoZSBub3RpY2UKK3RoYXQgc2F5cyB0aGF0IHRoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBJZiBhCitzZWN0aW9uIGRvZXMgbm90IGZpdCB0aGUgYWJvdmUgZGVmaW5pdGlvbiBvZiBTZWNvbmRhcnkgdGhlbiBpdCBpcyBub3QKK2FsbG93ZWQgdG8gYmUgZGVzaWduYXRlZCBhcyBJbnZhcmlhbnQuICBUaGUgRG9jdW1lbnQgbWF5IGNvbnRhaW4gemVybworSW52YXJpYW50IFNlY3Rpb25zLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IGlkZW50aWZ5IGFueSBJbnZhcmlhbnQKK1NlY3Rpb25zIHRoZW4gdGhlcmUgYXJlIG5vbmUuCisKK1RoZSAiQ292ZXIgVGV4dHMiIGFyZSBjZXJ0YWluIHNob3J0IHBhc3NhZ2VzIG9mIHRleHQgdGhhdCBhcmUgbGlzdGVkLAorYXMgRnJvbnQtQ292ZXIgVGV4dHMgb3IgQmFjay1Db3ZlciBUZXh0cywgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdAordGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEEgRnJvbnQtQ292ZXIgVGV4dCBtYXkKK2JlIGF0IG1vc3QgNSB3b3JkcywgYW5kIGEgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhdCBtb3N0IDI1IHdvcmRzLgorCitBICJUcmFuc3BhcmVudCIgY29weSBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHksCityZXByZXNlbnRlZCBpbiBhIGZvcm1hdCB3aG9zZSBzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUKK2dlbmVyYWwgcHVibGljLCB0aGF0IGlzIHN1aXRhYmxlIGZvciByZXZpc2luZyB0aGUgZG9jdW1lbnQKK3N0cmFpZ2h0Zm9yd2FyZGx5IHdpdGggZ2VuZXJpYyB0ZXh0IGVkaXRvcnMgb3IgKGZvciBpbWFnZXMgY29tcG9zZWQgb2YKK3BpeGVscykgZ2VuZXJpYyBwYWludCBwcm9ncmFtcyBvciAoZm9yIGRyYXdpbmdzKSBzb21lIHdpZGVseSBhdmFpbGFibGUKK2RyYXdpbmcgZWRpdG9yLCBhbmQgdGhhdCBpcyBzdWl0YWJsZSBmb3IgaW5wdXQgdG8gdGV4dCBmb3JtYXR0ZXJzIG9yCitmb3IgYXV0b21hdGljIHRyYW5zbGF0aW9uIHRvIGEgdmFyaWV0eSBvZiBmb3JtYXRzIHN1aXRhYmxlIGZvciBpbnB1dAordG8gdGV4dCBmb3JtYXR0ZXJzLiAgQSBjb3B5IG1hZGUgaW4gYW4gb3RoZXJ3aXNlIFRyYW5zcGFyZW50IGZpbGUKK2Zvcm1hdCB3aG9zZSBtYXJrdXAsIG9yIGFic2VuY2Ugb2YgbWFya3VwLCBoYXMgYmVlbiBhcnJhbmdlZCB0byB0aHdhcnQKK29yIGRpc2NvdXJhZ2Ugc3Vic2VxdWVudCBtb2RpZmljYXRpb24gYnkgcmVhZGVycyBpcyBub3QgVHJhbnNwYXJlbnQuCitBbiBpbWFnZSBmb3JtYXQgaXMgbm90IFRyYW5zcGFyZW50IGlmIHVzZWQgZm9yIGFueSBzdWJzdGFudGlhbCBhbW91bnQKK29mIHRleHQuICBBIGNvcHkgdGhhdCBpcyBub3QgIlRyYW5zcGFyZW50IiBpcyBjYWxsZWQgIk9wYXF1ZSIuCisKK0V4YW1wbGVzIG9mIHN1aXRhYmxlIGZvcm1hdHMgZm9yIFRyYW5zcGFyZW50IGNvcGllcyBpbmNsdWRlIHBsYWluCitBU0NJSSB3aXRob3V0IG1hcmt1cCwgVGV4aW5mbyBpbnB1dCBmb3JtYXQsIExhVGVYIGlucHV0IGZvcm1hdCwgU0dNTAorb3IgWE1MIHVzaW5nIGEgcHVibGljbHkgYXZhaWxhYmxlIERURCwgYW5kIHN0YW5kYXJkLWNvbmZvcm1pbmcgc2ltcGxlCitIVE1MLCBQb3N0U2NyaXB0IG9yIFBERiBkZXNpZ25lZCBmb3IgaHVtYW4gbW9kaWZpY2F0aW9uLiAgRXhhbXBsZXMgb2YKK3RyYW5zcGFyZW50IGltYWdlIGZvcm1hdHMgaW5jbHVkZSBQTkcsIFhDRiBhbmQgSlBHLiAgT3BhcXVlIGZvcm1hdHMKK2luY2x1ZGUgcHJvcHJpZXRhcnkgZm9ybWF0cyB0aGF0IGNhbiBiZSByZWFkIGFuZCBlZGl0ZWQgb25seSBieQorcHJvcHJpZXRhcnkgd29yZCBwcm9jZXNzb3JzLCBTR01MIG9yIFhNTCBmb3Igd2hpY2ggdGhlIERURCBhbmQvb3IKK3Byb2Nlc3NpbmcgdG9vbHMgYXJlIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLCBhbmQgdGhlCittYWNoaW5lLWdlbmVyYXRlZCBIVE1MLCBQb3N0U2NyaXB0IG9yIFBERiBwcm9kdWNlZCBieSBzb21lIHdvcmQKK3Byb2Nlc3NvcnMgZm9yIG91dHB1dCBwdXJwb3NlcyBvbmx5LgorCitUaGUgIlRpdGxlIFBhZ2UiIG1lYW5zLCBmb3IgYSBwcmludGVkIGJvb2ssIHRoZSB0aXRsZSBwYWdlIGl0c2VsZiwKK3BsdXMgc3VjaCBmb2xsb3dpbmcgcGFnZXMgYXMgYXJlIG5lZWRlZCB0byBob2xkLCBsZWdpYmx5LCB0aGUgbWF0ZXJpYWwKK3RoaXMgTGljZW5zZSByZXF1aXJlcyB0byBhcHBlYXIgaW4gdGhlIHRpdGxlIHBhZ2UuICBGb3Igd29ya3MgaW4KK2Zvcm1hdHMgd2hpY2ggZG8gbm90IGhhdmUgYW55IHRpdGxlIHBhZ2UgYXMgc3VjaCwgIlRpdGxlIFBhZ2UiIG1lYW5zCit0aGUgdGV4dCBuZWFyIHRoZSBtb3N0IHByb21pbmVudCBhcHBlYXJhbmNlIG9mIHRoZSB3b3JrYHMgdGl0bGUsCitwcmVjZWRpbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgYm9keSBvZiB0aGUgdGV4dC4KKworVGhlICJwdWJsaXNoZXIiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgY29waWVzIG9mCit0aGUgRG9jdW1lbnQgdG8gdGhlIHB1YmxpYy4KKworQSBzZWN0aW9uICJFbnRpdGxlZCBYWVoiIG1lYW5zIGEgbmFtZWQgc3VidW5pdCBvZiB0aGUgRG9jdW1lbnQgd2hvc2UKK3RpdGxlIGVpdGhlciBpcyBwcmVjaXNlbHkgWFlaIG9yIGNvbnRhaW5zIFhZWiBpbiBwYXJlbnRoZXNlcyBmb2xsb3dpbmcKK3RleHQgdGhhdCB0cmFuc2xhdGVzIFhZWiBpbiBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmUgWFlaIHN0YW5kcyBmb3IgYQorc3BlY2lmaWMgc2VjdGlvbiBuYW1lIG1lbnRpb25lZCBiZWxvdywgc3VjaCBhcyAiQWNrbm93bGVkZ2VtZW50cyIsCisiRGVkaWNhdGlvbnMiLCAiRW5kb3JzZW1lbnRzIiwgb3IgIkhpc3RvcnkiLikgIFRvICJQcmVzZXJ2ZSB0aGUgVGl0bGUiCitvZiBzdWNoIGEgc2VjdGlvbiB3aGVuIHlvdSBtb2RpZnkgdGhlIERvY3VtZW50IG1lYW5zIHRoYXQgaXQgcmVtYWlucyBhCitzZWN0aW9uICJFbnRpdGxlZCBYWVoiIGFjY29yZGluZyB0byB0aGlzIGRlZmluaXRpb24uCisKK1RoZSBEb2N1bWVudCBtYXkgaW5jbHVkZSBXYXJyYW50eSBEaXNjbGFpbWVycyBuZXh0IHRvIHRoZSBub3RpY2Ugd2hpY2gKK3N0YXRlcyB0aGF0IHRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBEb2N1bWVudC4gIFRoZXNlIFdhcnJhbnR5CitEaXNjbGFpbWVycyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbmNsdWRlZCBieSByZWZlcmVuY2UgaW4gdGhpcworTGljZW5zZSwgYnV0IG9ubHkgYXMgcmVnYXJkcyBkaXNjbGFpbWluZyB3YXJyYW50aWVzOiBhbnkgb3RoZXIKK2ltcGxpY2F0aW9uIHRoYXQgdGhlc2UgV2FycmFudHkgRGlzY2xhaW1lcnMgbWF5IGhhdmUgaXMgdm9pZCBhbmQgaGFzCitubyBlZmZlY3Qgb24gdGhlIG1lYW5pbmcgb2YgdGhpcyBMaWNlbnNlLgorCisyLiBWRVJCQVRJTSBDT1BZSU5HCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgaW4gYW55IG1lZGl1bSwgZWl0aGVyCitjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LCBwcm92aWRlZCB0aGF0IHRoaXMgTGljZW5zZSwgdGhlCitjb3B5cmlnaHQgbm90aWNlcywgYW5kIHRoZSBsaWNlbnNlIG5vdGljZSBzYXlpbmcgdGhpcyBMaWNlbnNlIGFwcGxpZXMKK3RvIHRoZSBEb2N1bWVudCBhcmUgcmVwcm9kdWNlZCBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCB5b3UgYWRkIG5vCitvdGhlciBjb25kaXRpb25zIHdoYXRzb2V2ZXIgdG8gdGhvc2Ugb2YgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgdXNlCit0ZWNobmljYWwgbWVhc3VyZXMgdG8gb2JzdHJ1Y3Qgb3IgY29udHJvbCB0aGUgcmVhZGluZyBvciBmdXJ0aGVyCitjb3B5aW5nIG9mIHRoZSBjb3BpZXMgeW91IG1ha2Ugb3IgZGlzdHJpYnV0ZS4gIEhvd2V2ZXIsIHlvdSBtYXkgYWNjZXB0Citjb21wZW5zYXRpb24gaW4gZXhjaGFuZ2UgZm9yIGNvcGllcy4gIElmIHlvdSBkaXN0cmlidXRlIGEgbGFyZ2UgZW5vdWdoCitudW1iZXIgb2YgY29waWVzIHlvdSBtdXN0IGFsc28gZm9sbG93IHRoZSBjb25kaXRpb25zIGluIHNlY3Rpb24gMy4KKworWW91IG1heSBhbHNvIGxlbmQgY29waWVzLCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHN0YXRlZCBhYm92ZSwgYW5kCit5b3UgbWF5IHB1YmxpY2x5IGRpc3BsYXkgY29waWVzLgorCisKKzMuIENPUFlJTkcgSU4gUVVBTlRJVFkKKworSWYgeW91IHB1Ymxpc2ggcHJpbnRlZCBjb3BpZXMgKG9yIGNvcGllcyBpbiBtZWRpYSB0aGF0IGNvbW1vbmx5IGhhdmUKK3ByaW50ZWQgY292ZXJzKSBvZiB0aGUgRG9jdW1lbnQsIG51bWJlcmluZyBtb3JlIHRoYW4gMTAwLCBhbmQgdGhlCitEb2N1bWVudGBzIGxpY2Vuc2Ugbm90aWNlIHJlcXVpcmVzIENvdmVyIFRleHRzLCB5b3UgbXVzdCBlbmNsb3NlIHRoZQorY29waWVzIGluIGNvdmVycyB0aGF0IGNhcnJ5LCBjbGVhcmx5IGFuZCBsZWdpYmx5LCBhbGwgdGhlc2UgQ292ZXIKK1RleHRzOiBGcm9udC1Db3ZlciBUZXh0cyBvbiB0aGUgZnJvbnQgY292ZXIsIGFuZCBCYWNrLUNvdmVyIFRleHRzIG9uCit0aGUgYmFjayBjb3Zlci4gIEJvdGggY292ZXJzIG11c3QgYWxzbyBjbGVhcmx5IGFuZCBsZWdpYmx5IGlkZW50aWZ5Cit5b3UgYXMgdGhlIHB1Ymxpc2hlciBvZiB0aGVzZSBjb3BpZXMuICBUaGUgZnJvbnQgY292ZXIgbXVzdCBwcmVzZW50Cit0aGUgZnVsbCB0aXRsZSB3aXRoIGFsbCB3b3JkcyBvZiB0aGUgdGl0bGUgZXF1YWxseSBwcm9taW5lbnQgYW5kCit2aXNpYmxlLiAgWW91IG1heSBhZGQgb3RoZXIgbWF0ZXJpYWwgb24gdGhlIGNvdmVycyBpbiBhZGRpdGlvbi4KK0NvcHlpbmcgd2l0aCBjaGFuZ2VzIGxpbWl0ZWQgdG8gdGhlIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlCit0aGUgdGl0bGUgb2YgdGhlIERvY3VtZW50IGFuZCBzYXRpc2Z5IHRoZXNlIGNvbmRpdGlvbnMsIGNhbiBiZSB0cmVhdGVkCithcyB2ZXJiYXRpbSBjb3B5aW5nIGluIG90aGVyIHJlc3BlY3RzLgorCitJZiB0aGUgcmVxdWlyZWQgdGV4dHMgZm9yIGVpdGhlciBjb3ZlciBhcmUgdG9vIHZvbHVtaW5vdXMgdG8gZml0CitsZWdpYmx5LCB5b3Ugc2hvdWxkIHB1dCB0aGUgZmlyc3Qgb25lcyBsaXN0ZWQgKGFzIG1hbnkgYXMgZml0CityZWFzb25hYmx5KSBvbiB0aGUgYWN0dWFsIGNvdmVyLCBhbmQgY29udGludWUgdGhlIHJlc3Qgb250byBhZGphY2VudAorcGFnZXMuCisKK0lmIHlvdSBwdWJsaXNoIG9yIGRpc3RyaWJ1dGUgT3BhcXVlIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQgbnVtYmVyaW5nCittb3JlIHRoYW4gMTAwLCB5b3UgbXVzdCBlaXRoZXIgaW5jbHVkZSBhIG1hY2hpbmUtcmVhZGFibGUgVHJhbnNwYXJlbnQKK2NvcHkgYWxvbmcgd2l0aCBlYWNoIE9wYXF1ZSBjb3B5LCBvciBzdGF0ZSBpbiBvciB3aXRoIGVhY2ggT3BhcXVlIGNvcHkKK2EgY29tcHV0ZXItbmV0d29yayBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBnZW5lcmFsIG5ldHdvcmstdXNpbmcKK3B1YmxpYyBoYXMgYWNjZXNzIHRvIGRvd25sb2FkIHVzaW5nIHB1YmxpYy1zdGFuZGFyZCBuZXR3b3JrIHByb3RvY29scworYSBjb21wbGV0ZSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgZnJlZSBvZiBhZGRlZCBtYXRlcmlhbC4KK0lmIHlvdSB1c2UgdGhlIGxhdHRlciBvcHRpb24sIHlvdSBtdXN0IHRha2UgcmVhc29uYWJseSBwcnVkZW50IHN0ZXBzLAord2hlbiB5b3UgYmVnaW4gZGlzdHJpYnV0aW9uIG9mIE9wYXF1ZSBjb3BpZXMgaW4gcXVhbnRpdHksIHRvIGVuc3VyZQordGhhdCB0aGlzIFRyYW5zcGFyZW50IGNvcHkgd2lsbCByZW1haW4gdGh1cyBhY2Nlc3NpYmxlIGF0IHRoZSBzdGF0ZWQKK2xvY2F0aW9uIHVudGlsIGF0IGxlYXN0IG9uZSB5ZWFyIGFmdGVyIHRoZSBsYXN0IHRpbWUgeW91IGRpc3RyaWJ1dGUgYW4KK09wYXF1ZSBjb3B5IChkaXJlY3RseSBvciB0aHJvdWdoIHlvdXIgYWdlbnRzIG9yIHJldGFpbGVycykgb2YgdGhhdAorZWRpdGlvbiB0byB0aGUgcHVibGljLgorCitJdCBpcyByZXF1ZXN0ZWQsIGJ1dCBub3QgcmVxdWlyZWQsIHRoYXQgeW91IGNvbnRhY3QgdGhlIGF1dGhvcnMgb2YgdGhlCitEb2N1bWVudCB3ZWxsIGJlZm9yZSByZWRpc3RyaWJ1dGluZyBhbnkgbGFyZ2UgbnVtYmVyIG9mIGNvcGllcywgdG8KK2dpdmUgdGhlbSBhIGNoYW5jZSB0byBwcm92aWRlIHlvdSB3aXRoIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUKK0RvY3VtZW50LgorCisKKzQuIE1PRElGSUNBVElPTlMKKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGEgTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQgdW5kZXIKK3RoZSBjb25kaXRpb25zIG9mIHNlY3Rpb25zIDIgYW5kIDMgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IHJlbGVhc2UKK3RoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHByZWNpc2VseSB0aGlzIExpY2Vuc2UsIHdpdGggdGhlIE1vZGlmaWVkCitWZXJzaW9uIGZpbGxpbmcgdGhlIHJvbGUgb2YgdGhlIERvY3VtZW50LCB0aHVzIGxpY2Vuc2luZyBkaXN0cmlidXRpb24KK2FuZCBtb2RpZmljYXRpb24gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gdG8gd2hvZXZlciBwb3NzZXNzZXMgYSBjb3B5CitvZiBpdC4gIEluIGFkZGl0aW9uLCB5b3UgbXVzdCBkbyB0aGVzZSB0aGluZ3MgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb246CisKK0EuIFVzZSBpbiB0aGUgVGl0bGUgUGFnZSAoYW5kIG9uIHRoZSBjb3ZlcnMsIGlmIGFueSkgYSB0aXRsZSBkaXN0aW5jdAorICAgZnJvbSB0aGF0IG9mIHRoZSBEb2N1bWVudCwgYW5kIGZyb20gdGhvc2Ugb2YgcHJldmlvdXMgdmVyc2lvbnMKKyAgICh3aGljaCBzaG91bGQsIGlmIHRoZXJlIHdlcmUgYW55LCBiZSBsaXN0ZWQgaW4gdGhlIEhpc3Rvcnkgc2VjdGlvbgorICAgb2YgdGhlIERvY3VtZW50KS4gIFlvdSBtYXkgdXNlIHRoZSBzYW1lIHRpdGxlIGFzIGEgcHJldmlvdXMgdmVyc2lvbgorICAgaWYgdGhlIG9yaWdpbmFsIHB1Ymxpc2hlciBvZiB0aGF0IHZlcnNpb24gZ2l2ZXMgcGVybWlzc2lvbi4KK0IuIExpc3Qgb24gdGhlIFRpdGxlIFBhZ2UsIGFzIGF1dGhvcnMsIG9uZSBvciBtb3JlIHBlcnNvbnMgb3IgZW50aXRpZXMKKyAgIHJlc3BvbnNpYmxlIGZvciBhdXRob3JzaGlwIG9mIHRoZSBtb2RpZmljYXRpb25zIGluIHRoZSBNb2RpZmllZAorICAgVmVyc2lvbiwgdG9nZXRoZXIgd2l0aCBhdCBsZWFzdCBmaXZlIG9mIHRoZSBwcmluY2lwYWwgYXV0aG9ycyBvZiB0aGUKKyAgIERvY3VtZW50IChhbGwgb2YgaXRzIHByaW5jaXBhbCBhdXRob3JzLCBpZiBpdCBoYXMgZmV3ZXIgdGhhbiBmaXZlKSwKKyAgIHVubGVzcyB0aGV5IHJlbGVhc2UgeW91IGZyb20gdGhpcyByZXF1aXJlbWVudC4KK0MuIFN0YXRlIG9uIHRoZSBUaXRsZSBwYWdlIHRoZSBuYW1lIG9mIHRoZSBwdWJsaXNoZXIgb2YgdGhlCisgICBNb2RpZmllZCBWZXJzaW9uLCBhcyB0aGUgcHVibGlzaGVyLgorRC4gUHJlc2VydmUgYWxsIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBvZiB0aGUgRG9jdW1lbnQuCitFLiBBZGQgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBmb3IgeW91ciBtb2RpZmljYXRpb25zCisgICBhZGphY2VudCB0byB0aGUgb3RoZXIgY29weXJpZ2h0IG5vdGljZXMuCitGLiBJbmNsdWRlLCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY29weXJpZ2h0IG5vdGljZXMsIGEgbGljZW5zZSBub3RpY2UKKyAgIGdpdmluZyB0aGUgcHVibGljIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHRoZQorICAgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiB0aGUgZm9ybSBzaG93biBpbiB0aGUgQWRkZW5kdW0gYmVsb3cuCitHLiBQcmVzZXJ2ZSBpbiB0aGF0IGxpY2Vuc2Ugbm90aWNlIHRoZSBmdWxsIGxpc3RzIG9mIEludmFyaWFudCBTZWN0aW9ucworICAgYW5kIHJlcXVpcmVkIENvdmVyIFRleHRzIGdpdmVuIGluIHRoZSBEb2N1bWVudGBzIGxpY2Vuc2Ugbm90aWNlLgorSC4gSW5jbHVkZSBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGlzIExpY2Vuc2UuCitJLiBQcmVzZXJ2ZSB0aGUgc2VjdGlvbiBFbnRpdGxlZCAiSGlzdG9yeSIsIFByZXNlcnZlIGl0cyBUaXRsZSwgYW5kIGFkZAorICAgdG8gaXQgYW4gaXRlbSBzdGF0aW5nIGF0IGxlYXN0IHRoZSB0aXRsZSwgeWVhciwgbmV3IGF1dGhvcnMsIGFuZAorICAgcHVibGlzaGVyIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIGFzIGdpdmVuIG9uIHRoZSBUaXRsZSBQYWdlLiAgSWYKKyAgIHRoZXJlIGlzIG5vIHNlY3Rpb24gRW50aXRsZWQgIkhpc3RvcnkiIGluIHRoZSBEb2N1bWVudCwgY3JlYXRlIG9uZQorICAgc3RhdGluZyB0aGUgdGl0bGUsIHllYXIsIGF1dGhvcnMsIGFuZCBwdWJsaXNoZXIgb2YgdGhlIERvY3VtZW50IGFzCisgICBnaXZlbiBvbiBpdHMgVGl0bGUgUGFnZSwgdGhlbiBhZGQgYW4gaXRlbSBkZXNjcmliaW5nIHRoZSBNb2RpZmllZAorICAgVmVyc2lvbiBhcyBzdGF0ZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlLgorSi4gUHJlc2VydmUgdGhlIG5ldHdvcmsgbG9jYXRpb24sIGlmIGFueSwgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvcgorICAgcHVibGljIGFjY2VzcyB0byBhIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBhbmQgbGlrZXdpc2UKKyAgIHRoZSBuZXR3b3JrIGxvY2F0aW9ucyBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yIHByZXZpb3VzIHZlcnNpb25zCisgICBpdCB3YXMgYmFzZWQgb24uICBUaGVzZSBtYXkgYmUgcGxhY2VkIGluIHRoZSAiSGlzdG9yeSIgc2VjdGlvbi4KKyAgIFlvdSBtYXkgb21pdCBhIG5ldHdvcmsgbG9jYXRpb24gZm9yIGEgd29yayB0aGF0IHdhcyBwdWJsaXNoZWQgYXQKKyAgIGxlYXN0IGZvdXIgeWVhcnMgYmVmb3JlIHRoZSBEb2N1bWVudCBpdHNlbGYsIG9yIGlmIHRoZSBvcmlnaW5hbAorICAgcHVibGlzaGVyIG9mIHRoZSB2ZXJzaW9uIGl0IHJlZmVycyB0byBnaXZlcyBwZXJtaXNzaW9uLgorSy4gRm9yIGFueSBzZWN0aW9uIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiBvciAiRGVkaWNhdGlvbnMiLAorICAgUHJlc2VydmUgdGhlIFRpdGxlIG9mIHRoZSBzZWN0aW9uLCBhbmQgcHJlc2VydmUgaW4gdGhlIHNlY3Rpb24gYWxsCisgICB0aGUgc3Vic3RhbmNlIGFuZCB0b25lIG9mIGVhY2ggb2YgdGhlIGNvbnRyaWJ1dG9yIGFja25vd2xlZGdlbWVudHMKKyAgIGFuZC9vciBkZWRpY2F0aW9ucyBnaXZlbiB0aGVyZWluLgorTC4gUHJlc2VydmUgYWxsIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgdGhlIERvY3VtZW50LAorICAgdW5hbHRlcmVkIGluIHRoZWlyIHRleHQgYW5kIGluIHRoZWlyIHRpdGxlcy4gIFNlY3Rpb24gbnVtYmVycworICAgb3IgdGhlIGVxdWl2YWxlbnQgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNlY3Rpb24gdGl0bGVzLgorTS4gRGVsZXRlIGFueSBzZWN0aW9uIEVudGl0bGVkICJFbmRvcnNlbWVudHMiLiAgU3VjaCBhIHNlY3Rpb24KKyAgIG1heSBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uCitOLiBEbyBub3QgcmV0aXRsZSBhbnkgZXhpc3Rpbmcgc2VjdGlvbiB0byBiZSBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIgorICAgb3IgdG8gY29uZmxpY3QgaW4gdGl0bGUgd2l0aCBhbnkgSW52YXJpYW50IFNlY3Rpb24uCitPLiBQcmVzZXJ2ZSBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMuCisKK0lmIHRoZSBNb2RpZmllZCBWZXJzaW9uIGluY2x1ZGVzIG5ldyBmcm9udC1tYXR0ZXIgc2VjdGlvbnMgb3IKK2FwcGVuZGljZXMgdGhhdCBxdWFsaWZ5IGFzIFNlY29uZGFyeSBTZWN0aW9ucyBhbmQgY29udGFpbiBubyBtYXRlcmlhbAorY29waWVkIGZyb20gdGhlIERvY3VtZW50LCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIGRlc2lnbmF0ZSBzb21lIG9yIGFsbAorb2YgdGhlc2Ugc2VjdGlvbnMgYXMgaW52YXJpYW50LiAgVG8gZG8gdGhpcywgYWRkIHRoZWlyIHRpdGxlcyB0byB0aGUKK2xpc3Qgb2YgSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uYHMgbGljZW5zZSBub3RpY2UuCitUaGVzZSB0aXRsZXMgbXVzdCBiZSBkaXN0aW5jdCBmcm9tIGFueSBvdGhlciBzZWN0aW9uIHRpdGxlcy4KKworWW91IG1heSBhZGQgYSBzZWN0aW9uIEVudGl0bGVkICJFbmRvcnNlbWVudHMiLCBwcm92aWRlZCBpdCBjb250YWlucworbm90aGluZyBidXQgZW5kb3JzZW1lbnRzIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBieSB2YXJpb3VzCitwYXJ0aWVzLS1mb3IgZXhhbXBsZSwgc3RhdGVtZW50cyBvZiBwZWVyIHJldmlldyBvciB0aGF0IHRoZSB0ZXh0IGhhcworYmVlbiBhcHByb3ZlZCBieSBhbiBvcmdhbml6YXRpb24gYXMgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiBvZiBhCitzdGFuZGFyZC4KKworWW91IG1heSBhZGQgYSBwYXNzYWdlIG9mIHVwIHRvIGZpdmUgd29yZHMgYXMgYSBGcm9udC1Db3ZlciBUZXh0LCBhbmQgYQorcGFzc2FnZSBvZiB1cCB0byAyNSB3b3JkcyBhcyBhIEJhY2stQ292ZXIgVGV4dCwgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAorb2YgQ292ZXIgVGV4dHMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uICBPbmx5IG9uZSBwYXNzYWdlIG9mCitGcm9udC1Db3ZlciBUZXh0IGFuZCBvbmUgb2YgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhZGRlZCBieSAob3IKK3Rocm91Z2ggYXJyYW5nZW1lbnRzIG1hZGUgYnkpIGFueSBvbmUgZW50aXR5LiAgSWYgdGhlIERvY3VtZW50IGFscmVhZHkKK2luY2x1ZGVzIGEgY292ZXIgdGV4dCBmb3IgdGhlIHNhbWUgY292ZXIsIHByZXZpb3VzbHkgYWRkZWQgYnkgeW91IG9yCitieSBhcnJhbmdlbWVudCBtYWRlIGJ5IHRoZSBzYW1lIGVudGl0eSB5b3UgYXJlIGFjdGluZyBvbiBiZWhhbGYgb2YsCit5b3UgbWF5IG5vdCBhZGQgYW5vdGhlcjsgYnV0IHlvdSBtYXkgcmVwbGFjZSB0aGUgb2xkIG9uZSwgb24gZXhwbGljaXQKK3Blcm1pc3Npb24gZnJvbSB0aGUgcHJldmlvdXMgcHVibGlzaGVyIHRoYXQgYWRkZWQgdGhlIG9sZCBvbmUuCisKK1RoZSBhdXRob3IocykgYW5kIHB1Ymxpc2hlcihzKSBvZiB0aGUgRG9jdW1lbnQgZG8gbm90IGJ5IHRoaXMgTGljZW5zZQorZ2l2ZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGVpciBuYW1lcyBmb3IgcHVibGljaXR5IGZvciBvciB0byBhc3NlcnQgb3IKK2ltcGx5IGVuZG9yc2VtZW50IG9mIGFueSBNb2RpZmllZCBWZXJzaW9uLgorCisKKzUuIENPTUJJTklORyBET0NVTUVOVFMKKworWW91IG1heSBjb21iaW5lIHRoZSBEb2N1bWVudCB3aXRoIG90aGVyIGRvY3VtZW50cyByZWxlYXNlZCB1bmRlciB0aGlzCitMaWNlbnNlLCB1bmRlciB0aGUgdGVybXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQgYWJvdmUgZm9yIG1vZGlmaWVkCit2ZXJzaW9ucywgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSBpbiB0aGUgY29tYmluYXRpb24gYWxsIG9mIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIG9mIGFsbCBvZiB0aGUgb3JpZ2luYWwgZG9jdW1lbnRzLCB1bm1vZGlmaWVkLCBhbmQKK2xpc3QgdGhlbSBhbGwgYXMgSW52YXJpYW50IFNlY3Rpb25zIG9mIHlvdXIgY29tYmluZWQgd29yayBpbiBpdHMKK2xpY2Vuc2Ugbm90aWNlLCBhbmQgdGhhdCB5b3UgcHJlc2VydmUgYWxsIHRoZWlyIFdhcnJhbnR5IERpc2NsYWltZXJzLgorCitUaGUgY29tYmluZWQgd29yayBuZWVkIG9ubHkgY29udGFpbiBvbmUgY29weSBvZiB0aGlzIExpY2Vuc2UsIGFuZAorbXVsdGlwbGUgaWRlbnRpY2FsIEludmFyaWFudCBTZWN0aW9ucyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZQorY29weS4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lIGJ1dAorZGlmZmVyZW50IGNvbnRlbnRzLCBtYWtlIHRoZSB0aXRsZSBvZiBlYWNoIHN1Y2ggc2VjdGlvbiB1bmlxdWUgYnkKK2FkZGluZyBhdCB0aGUgZW5kIG9mIGl0LCBpbiBwYXJlbnRoZXNlcywgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsCithdXRob3Igb3IgcHVibGlzaGVyIG9mIHRoYXQgc2VjdGlvbiBpZiBrbm93biwgb3IgZWxzZSBhIHVuaXF1ZSBudW1iZXIuCitNYWtlIHRoZSBzYW1lIGFkanVzdG1lbnQgdG8gdGhlIHNlY3Rpb24gdGl0bGVzIGluIHRoZSBsaXN0IG9mCitJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIGxpY2Vuc2Ugbm90aWNlIG9mIHRoZSBjb21iaW5lZCB3b3JrLgorCitJbiB0aGUgY29tYmluYXRpb24sIHlvdSBtdXN0IGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkICJIaXN0b3J5IgoraW4gdGhlIHZhcmlvdXMgb3JpZ2luYWwgZG9jdW1lbnRzLCBmb3JtaW5nIG9uZSBzZWN0aW9uIEVudGl0bGVkCisiSGlzdG9yeSI7IGxpa2V3aXNlIGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiwKK2FuZCBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkRlZGljYXRpb25zIi4gIFlvdSBtdXN0IGRlbGV0ZSBhbGwgc2VjdGlvbnMKK0VudGl0bGVkICJFbmRvcnNlbWVudHMiLgorCisKKzYuIENPTExFQ1RJT05TIE9GIERPQ1VNRU5UUworCitZb3UgbWF5IG1ha2UgYSBjb2xsZWN0aW9uIGNvbnNpc3Rpbmcgb2YgdGhlIERvY3VtZW50IGFuZCBvdGhlcgorZG9jdW1lbnRzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHJlcGxhY2UgdGhlIGluZGl2aWR1YWwKK2NvcGllcyBvZiB0aGlzIExpY2Vuc2UgaW4gdGhlIHZhcmlvdXMgZG9jdW1lbnRzIHdpdGggYSBzaW5nbGUgY29weQordGhhdCBpcyBpbmNsdWRlZCBpbiB0aGUgY29sbGVjdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZm9sbG93IHRoZSBydWxlcworb2YgdGhpcyBMaWNlbnNlIGZvciB2ZXJiYXRpbSBjb3B5aW5nIG9mIGVhY2ggb2YgdGhlIGRvY3VtZW50cyBpbiBhbGwKK290aGVyIHJlc3BlY3RzLgorCitZb3UgbWF5IGV4dHJhY3QgYSBzaW5nbGUgZG9jdW1lbnQgZnJvbSBzdWNoIGEgY29sbGVjdGlvbiwgYW5kCitkaXN0cmlidXRlIGl0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHlvdSBpbnNlcnQgYQorY29weSBvZiB0aGlzIExpY2Vuc2UgaW50byB0aGUgZXh0cmFjdGVkIGRvY3VtZW50LCBhbmQgZm9sbG93IHRoaXMKK0xpY2Vuc2UgaW4gYWxsIG90aGVyIHJlc3BlY3RzIHJlZ2FyZGluZyB2ZXJiYXRpbSBjb3B5aW5nIG9mIHRoYXQKK2RvY3VtZW50LgorCisKKzcuIEFHR1JFR0FUSU9OIFdJVEggSU5ERVBFTkRFTlQgV09SS1MKKworQSBjb21waWxhdGlvbiBvZiB0aGUgRG9jdW1lbnQgb3IgaXRzIGRlcml2YXRpdmVzIHdpdGggb3RoZXIgc2VwYXJhdGUKK2FuZCBpbmRlcGVuZGVudCBkb2N1bWVudHMgb3Igd29ya3MsIGluIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvcgorZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuICJhZ2dyZWdhdGUiIGlmIHRoZSBjb3B5cmlnaHQKK3Jlc3VsdGluZyBmcm9tIHRoZSBjb21waWxhdGlvbiBpcyBub3QgdXNlZCB0byBsaW1pdCB0aGUgbGVnYWwgcmlnaHRzCitvZiB0aGUgY29tcGlsYXRpb25gcyB1c2VycyBiZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuCitXaGVuIHRoZSBEb2N1bWVudCBpcyBpbmNsdWRlZCBpbiBhbiBhZ2dyZWdhdGUsIHRoaXMgTGljZW5zZSBkb2VzIG5vdAorYXBwbHkgdG8gdGhlIG90aGVyIHdvcmtzIGluIHRoZSBhZ2dyZWdhdGUgd2hpY2ggYXJlIG5vdCB0aGVtc2VsdmVzCitkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEb2N1bWVudC4KKworSWYgdGhlIENvdmVyIFRleHQgcmVxdWlyZW1lbnQgb2Ygc2VjdGlvbiAzIGlzIGFwcGxpY2FibGUgdG8gdGhlc2UKK2NvcGllcyBvZiB0aGUgRG9jdW1lbnQsIHRoZW4gaWYgdGhlIERvY3VtZW50IGlzIGxlc3MgdGhhbiBvbmUgaGFsZiBvZgordGhlIGVudGlyZSBhZ2dyZWdhdGUsIHRoZSBEb2N1bWVudGBzIENvdmVyIFRleHRzIG1heSBiZSBwbGFjZWQgb24KK2NvdmVycyB0aGF0IGJyYWNrZXQgdGhlIERvY3VtZW50IHdpdGhpbiB0aGUgYWdncmVnYXRlLCBvciB0aGUKK2VsZWN0cm9uaWMgZXF1aXZhbGVudCBvZiBjb3ZlcnMgaWYgdGhlIERvY3VtZW50IGlzIGluIGVsZWN0cm9uaWMgZm9ybS4KK090aGVyd2lzZSB0aGV5IG11c3QgYXBwZWFyIG9uIHByaW50ZWQgY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgd2hvbGUKK2FnZ3JlZ2F0ZS4KKworCis4LiBUUkFOU0xBVElPTgorCitUcmFuc2xhdGlvbiBpcyBjb25zaWRlcmVkIGEga2luZCBvZiBtb2RpZmljYXRpb24sIHNvIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoZSBEb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbiA0LgorUmVwbGFjaW5nIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRyYW5zbGF0aW9ucyByZXF1aXJlcyBzcGVjaWFsCitwZXJtaXNzaW9uIGZyb20gdGhlaXIgY29weXJpZ2h0IGhvbGRlcnMsIGJ1dCB5b3UgbWF5IGluY2x1ZGUKK3RyYW5zbGF0aW9ucyBvZiBzb21lIG9yIGFsbCBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gYWRkaXRpb24gdG8gdGhlCitvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGVzZSBJbnZhcmlhbnQgU2VjdGlvbnMuICBZb3UgbWF5IGluY2x1ZGUgYQordHJhbnNsYXRpb24gb2YgdGhpcyBMaWNlbnNlLCBhbmQgYWxsIHRoZSBsaWNlbnNlIG5vdGljZXMgaW4gdGhlCitEb2N1bWVudCwgYW5kIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycywgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBpbmNsdWRlCit0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb25zCitvZiB0aG9zZSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycy4gIEluIGNhc2Ugb2YgYSBkaXNhZ3JlZW1lbnQgYmV0d2VlbgordGhlIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBub3RpY2UKK29yIGRpc2NsYWltZXIsIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIHdpbGwgcHJldmFpbC4KKworSWYgYSBzZWN0aW9uIGluIHRoZSBEb2N1bWVudCBpcyBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsCisiRGVkaWNhdGlvbnMiLCBvciAiSGlzdG9yeSIsIHRoZSByZXF1aXJlbWVudCAoc2VjdGlvbiA0KSB0byBQcmVzZXJ2ZQoraXRzIFRpdGxlIChzZWN0aW9uIDEpIHdpbGwgdHlwaWNhbGx5IHJlcXVpcmUgY2hhbmdpbmcgdGhlIGFjdHVhbAordGl0bGUuCisKKworOS4gVEVSTUlOQVRJT04KKworWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudAorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSBpdCBpcyB2b2lkLCBhbmQKK3dpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitIb3dldmVyLCBpZiB5b3UgY2Vhc2UgYWxsIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91ciBsaWNlbnNlCitmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpIHByb3Zpc2lvbmFsbHksCit1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kIGZpbmFsbHkKK3Rlcm1pbmF0ZXMgeW91ciBsaWNlbnNlLCBhbmQgKGIpIHBlcm1hbmVudGx5LCBpZiB0aGUgY29weXJpZ2h0IGhvbGRlcgorZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucyBwcmlvciB0bworNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgorCitNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKK3JlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZQordmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQorcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0Citjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCit5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworVGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUKK2xpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlLiAgSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQorcmVpbnN0YXRlZCwgcmVjZWlwdCBvZiBhIGNvcHkgb2Ygc29tZSBvciBhbGwgb2YgdGhlIHNhbWUgbWF0ZXJpYWwgZG9lcworbm90IGdpdmUgeW91IGFueSByaWdodHMgdG8gdXNlIGl0LgorCisKKzEwLiBGVVRVUkUgUkVWSVNJT05TIE9GIFRISVMgTElDRU5TRQorCitUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIG5ldywgcmV2aXNlZCB2ZXJzaW9ucyBvZiB0aGUKK0dOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zCit3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluCitkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuICBTZWUKK2h0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC8uCisKK0VhY2ggdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorSWYgdGhlIERvY3VtZW50IHNwZWNpZmllcyB0aGF0IGEgcGFydGljdWxhciBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mCitmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHNwZWNpZmllZCB2ZXJzaW9uIG9yCitvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uCitudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90CithcyBhIGRyYWZ0KSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50CitzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMKK0xpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHlgcyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYQordmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdSB0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUKK0RvY3VtZW50LgorCisxMS4gUkVMSUNFTlNJTkcKKworIk1hc3NpdmUgTXVsdGlhdXRob3IgQ29sbGFib3JhdGlvbiBTaXRlIiAob3IgIk1NQyBTaXRlIikgbWVhbnMgYW55CitXb3JsZCBXaWRlIFdlYiBzZXJ2ZXIgdGhhdCBwdWJsaXNoZXMgY29weXJpZ2h0YWJsZSB3b3JrcyBhbmQgYWxzbworcHJvdmlkZXMgcHJvbWluZW50IGZhY2lsaXRpZXMgZm9yIGFueWJvZHkgdG8gZWRpdCB0aG9zZSB3b3Jrcy4gIEEKK3B1YmxpYyB3aWtpIHRoYXQgYW55Ym9keSBjYW4gZWRpdCBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBzZXJ2ZXIuICBBCisiTWFzc2l2ZSBNdWx0aWF1dGhvciBDb2xsYWJvcmF0aW9uIiAob3IgIk1NQyIpIGNvbnRhaW5lZCBpbiB0aGUgc2l0ZQorbWVhbnMgYW55IHNldCBvZiBjb3B5cmlnaHRhYmxlIHdvcmtzIHRodXMgcHVibGlzaGVkIG9uIHRoZSBNTUMgc2l0ZS4KKworIkNDLUJZLVNBIiBtZWFucyB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAzLjAgCitsaWNlbnNlIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zIENvcnBvcmF0aW9uLCBhIG5vdC1mb3ItcHJvZml0IAorY29ycG9yYXRpb24gd2l0aCBhIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBpbiBTYW4gRnJhbmNpc2NvLCAKK0NhbGlmb3JuaWEsIGFzIHdlbGwgYXMgZnV0dXJlIGNvcHlsZWZ0IHZlcnNpb25zIG9mIHRoYXQgbGljZW5zZSAKK3B1Ymxpc2hlZCBieSB0aGF0IHNhbWUgb3JnYW5pemF0aW9uLgorCisiSW5jb3Jwb3JhdGUiIG1lYW5zIHRvIHB1Ymxpc2ggb3IgcmVwdWJsaXNoIGEgRG9jdW1lbnQsIGluIHdob2xlIG9yIGluIAorcGFydCwgYXMgcGFydCBvZiBhbm90aGVyIERvY3VtZW50LgorCitBbiBNTUMgaXMgImVsaWdpYmxlIGZvciByZWxpY2Vuc2luZyIgaWYgaXQgaXMgbGljZW5zZWQgdW5kZXIgdGhpcyAKK0xpY2Vuc2UsIGFuZCBpZiBhbGwgd29ya3MgdGhhdCB3ZXJlIGZpcnN0IHB1Ymxpc2hlZCB1bmRlciB0aGlzIExpY2Vuc2UgCitzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGlzIE1NQywgYW5kIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgaW4gd2hvbGUgb3IgCitpbiBwYXJ0IGludG8gdGhlIE1NQywgKDEpIGhhZCBubyBjb3ZlciB0ZXh0cyBvciBpbnZhcmlhbnQgc2VjdGlvbnMsIGFuZCAKKygyKSB3ZXJlIHRodXMgaW5jb3Jwb3JhdGVkIHByaW9yIHRvIE5vdmVtYmVyIDEsIDIwMDguCisKK1RoZSBvcGVyYXRvciBvZiBhbiBNTUMgU2l0ZSBtYXkgcmVwdWJsaXNoIGFuIE1NQyBjb250YWluZWQgaW4gdGhlIHNpdGUKK3VuZGVyIENDLUJZLVNBIG9uIHRoZSBzYW1lIHNpdGUgYXQgYW55IHRpbWUgYmVmb3JlIEF1Z3VzdCAxLCAyMDA5LAorcHJvdmlkZWQgdGhlIE1NQyBpcyBlbGlnaWJsZSBmb3IgcmVsaWNlbnNpbmcuCisKKworQURERU5EVU06IEhvdyB0byB1c2UgdGhpcyBMaWNlbnNlIGZvciB5b3VyIGRvY3VtZW50cworCitUbyB1c2UgdGhpcyBMaWNlbnNlIGluIGEgZG9jdW1lbnQgeW91IGhhdmUgd3JpdHRlbiwgaW5jbHVkZSBhIGNvcHkgb2YKK3RoZSBMaWNlbnNlIGluIHRoZSBkb2N1bWVudCBhbmQgcHV0IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorbGljZW5zZSBub3RpY2VzIGp1c3QgYWZ0ZXIgdGhlIHRpdGxlIHBhZ2U6CisKKyAgICBDb3B5cmlnaHQgKGMpICBZRUFSICBZT1VSIE5BTUUuCisgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50CisgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCisgICAgb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgICAgd2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgbm8gQmFjay1Db3ZlciBUZXh0cy4KKyAgICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIkdOVQorICAgIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIi4KKworSWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zLCBGcm9udC1Db3ZlciBUZXh0cyBhbmQgQmFjay1Db3ZlciBUZXh0cywKK3JlcGxhY2UgdGhlICJ3aXRoLi4uVGV4dHMuIiBsaW5lIHdpdGggdGhpczoKKworICAgIHdpdGggdGhlIEludmFyaWFudCBTZWN0aW9ucyBiZWluZyBMSVNUIFRIRUlSIFRJVExFUywgd2l0aCB0aGUKKyAgICBGcm9udC1Db3ZlciBUZXh0cyBiZWluZyBMSVNULCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyBMSVNULgorCitJZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aG91dCBDb3ZlciBUZXh0cywgb3Igc29tZSBvdGhlcgorY29tYmluYXRpb24gb2YgdGhlIHRocmVlLCBtZXJnZSB0aG9zZSB0d28gYWx0ZXJuYXRpdmVzIHRvIHN1aXQgdGhlCitzaXR1YXRpb24uCisKK0lmIHlvdXIgZG9jdW1lbnQgY29udGFpbnMgbm9udHJpdmlhbCBleGFtcGxlcyBvZiBwcm9ncmFtIGNvZGUsIHdlCityZWNvbW1lbmQgcmVsZWFzaW5nIHRoZXNlIGV4YW1wbGVzIGluIHBhcmFsbGVsIHVuZGVyIHlvdXIgY2hvaWNlIG9mCitmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHN1Y2ggYXMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAordG8gcGVybWl0IHRoZWlyIHVzZSBpbiBmcmVlIHNvZnR3YXJlLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ0ZWY5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTEuMApAQCAtMCwwICsxLDI1MiBAQAorCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAxCisKKyAgICAgICAgICAgICAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMSwgRmVicnVhcnkgMTk4OQorCisgQ29weXJpZ2h0IChDKSAxOTg5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgICAgICAgICAgICAgICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZSBhZ3JlZW1lbnRzIG9mIG1vc3Qgc29mdHdhcmUgY29tcGFuaWVzIHRyeSB0byBrZWVwIHVzZXJzCithdCB0aGUgbWVyY3kgb2YgdGhvc2UgY29tcGFuaWVzLiAgQnkgY29udHJhc3QsIG91ciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoZQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb25gcworc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvIHVzaW5nIGl0LgorWW91IGNhbiB1c2UgaXQgZm9yIHlvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIFNwZWNpZmljYWxseSwgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgZGVzaWduZWQgdG8gbWFrZQorc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGdpdmUgYXdheSBvciBzZWxsIGNvcGllcyBvZiBmcmVlCitzb2Z0d2FyZSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LAordGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZQorcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBhIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCB0ZWxsIHRoZW0gdGhlaXIgcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcmBzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnNgIHJlcHV0YXRpb25zLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisgICAgICAgICAgICAgICAgICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUKKyJQcm9ncmFtIiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSIgbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSB3b3JrIGNvbnRhaW5pbmcgdGhlCitQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucy4gIEVhY2gKK2xpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtYHMgc291cmNlCitjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAorYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAorZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkKK290aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4gIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mCit0cmFuc2ZlcnJpbmcgYSBjb3B5LgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YKK2l0LCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgdW5kZXIgdGhlIHRlcm1zIG9mIFBhcmFncmFwaAorMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdAorICAgIHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZTsgYW5kCisKKyAgICBiKSBjYXVzZSB0aGUgd2hvbGUgb2YgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0CisgICAgaW4gd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mLCBlaXRoZXIKKyAgICB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgdG8gYmUgbGljZW5zZWQgYXQgbm8gY2hhcmdlIHRvIGFsbAorICAgIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoZXhjZXB0CisgICAgdGhhdCB5b3UgbWF5IGNob29zZSB0byBncmFudCB3YXJyYW50eSBwcm90ZWN0aW9uIHRvIHNvbWUgb3IgYWxsCisgICAgdGhpcmQgcGFydGllcywgYXQgeW91ciBvcHRpb24pLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseSB3aGVuCisgICAgcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2ggaW50ZXJhY3RpdmUgdXNlCisgICAgaW4gdGhlIHNpbXBsZXN0IGFuZCBtb3N0IHVzdWFsIHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYSBub3RpY2UKKyAgICB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZSBhCisgICAgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIgdGhlc2UKKyAgICBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBHZW5lcmFsCisgICAgUHVibGljIExpY2Vuc2UuCisKKyAgICBkKSBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYQorICAgIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4KKyAgICBleGNoYW5nZSBmb3IgYSBmZWUuCisKK01lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciBpbmRlcGVuZGVudCB3b3JrIHdpdGggdGhlIFByb2dyYW0gKG9yIGl0cworZGVyaXZhdGl2ZSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcKK3RoZSBvdGhlciB3b3JrIHVuZGVyIHRoZSBzY29wZSBvZiB0aGVzZSB0ZXJtcy4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgcG9ydGlvbiBvciBkZXJpdmF0aXZlIG9mCitpdCwgdW5kZXIgUGFyYWdyYXBoIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1BhcmFncmFwaHMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgYWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgIFBhcmFncmFwaHMgMSBhbmQgMiBhYm92ZTsgb3IsCisKKyAgICBiKSBhY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSBmcmVlIChleGNlcHQgZm9yIGEgbm9taW5hbCBjaGFyZ2UKKyAgICBmb3IgdGhlIGNvc3Qgb2YgZGlzdHJpYnV0aW9uKSBhIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUKKyAgICBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAgICBQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmU7IG9yLAorCisgICAgYykgYWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB3aGVyZSB0aGUKKyAgICBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZC4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gYWxvbmUuKQorCitTb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nCittb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgZmlsZSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKK2FsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zOyBidXQsIGFzIGEgc3BlY2lhbAorZXhjZXB0aW9uLCBpdCBuZWVkIG5vdCBpbmNsdWRlIHNvdXJjZSBjb2RlIGZvciBtb2R1bGVzIHdoaWNoIGFyZSBzdGFuZGFyZAorbGlicmFyaWVzIHRoYXQgYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlCitmaWxlIHJ1bnMsIG9yIGZvciBzdGFuZGFyZCBoZWFkZXIgZmlsZXMgb3IgZGVmaW5pdGlvbnMgZmlsZXMgdGhhdAorYWNjb21wYW55IHRoYXQgb3BlcmF0aW5nIHN5c3RlbS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgdGhlCitQcm9ncmFtIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlcgordGhlIFByb2dyYW0gaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdG8gdXNlCit0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkCitjb3BpZXMsIG9yIHJpZ2h0cyB0byB1c2UgY29waWVzLCBmcm9tIHlvdSB1bmRlciB0aGlzIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcworcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBCeSBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0pIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBsaWNlbnNlIHRvIGRvIHNvLAorYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwKK2xpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8gdGhlc2UKK3Rlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUKK3JlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisKKyAgNy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGxpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoZSBsaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICA4LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQorCisgIDkuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMC4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgICAgICAgQXBwZW5kaXg6IEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byBodW1hbml0eSwgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZQordGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QgdG8KK2F0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgY29udmV5Cit0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZQorImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtYHMgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSAxOXl5ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIDE5eHggbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgd2AuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjYCBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3YCBhbmQgYHNob3cgY2Agc2hvdWxkIHNob3cgdGhlCithcHByb3ByaWF0ZSBwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlCitjb21tYW5kcyB5b3UgdXNlIG1heSBiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgd2AgYW5kIGBzaG93CitjYDsgdGhleSBjb3VsZCBldmVuIGJlIG1vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyCitwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZQorICBwcm9ncmFtIGBHbm9tb3Zpc2lvbmAgKGEgcHJvZ3JhbSB0byBkaXJlY3QgY29tcGlsZXJzIHRvIG1ha2UgcGFzc2VzCisgIGF0IGFzc2VtYmxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGF0YHMgYWxsIHRoZXJlIGlzIHRvIGl0IQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLXdpdGgtYmlzb24tZXhjZXB0aW9uIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi13aXRoLWJpc29uLWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDM0MjczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi13aXRoLWJpc29uLWV4Y2VwdGlvbgpAQCAtMCwwICsxLDcgQEAKKworaW5zZXJ0IEdQTCB2MiB0ZXh0IGhlcmUKKworQmlzb24gRXhjZXB0aW9uCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbmB0IGl0c2VsZiBhIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mIGFzIGEgcGFyc2VyIHNrZWxldG9uLiBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZyBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KK1RoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4gdmVyc2lvbiAyLjIgb2YgQmlzb24uCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjVhYmJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wCkBAIC0wLDAgKzEsMTMyIEBACisKK0dOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisKK1ZlcnNpb24gMiwgSnVuZSAxOTkxCisKK0NvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gIAorNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBCisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCitQcmVhbWJsZQorCitUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiBUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb25gcyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8gdXNpbmcgaXQuIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pIFlvdSBjYW4gYXBwbHkgaXQgdG8geW91ciBwcm9ncmFtcywgdG9vLgorCitXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90IHByaWNlLiBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKK1RvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIgZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdSBoYXZlLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KKworV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCitBbHNvLCBmb3IgZWFjaCBhdXRob3JgcyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbyB0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbCBhdXRob3JzYCByZXB1dGF0aW9ucy4KKworRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4gV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlIHByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUgcHJvZ3JhbSBwcm9wcmlldGFyeS4gVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkgcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lYHMgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKzAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gVGhlICJQcm9ncmFtIiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIiBtZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4gKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiBUaGUgYWN0IG9mIHJ1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4gV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKzEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW1gcyBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCithKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KK2IpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseSB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4gYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZSBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiBJZiBpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLCBhbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZSBzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuIEJ1dCB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlIGVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0IHlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0byBleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IgY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbSB3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKK2EpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKK2MpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gKFRoaXMgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMgZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKzQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCis1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3Qgc2lnbmVkIGl0LiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKzYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8gdGhpcyBMaWNlbnNlLgorCis3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3Igb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdCBleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQgbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieSBhbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4gdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55IHBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55IHN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzIGltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gTWFueSBwZW9wbGUgaGF2ZSBtYWRlIGdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQgc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZyB0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QgaW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8gYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKzguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluIGNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCis5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKzEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUgcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCitOTyBXQVJSQU5UWQorCisxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCitFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKK0lmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QgcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdCBmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uIEl0IGlzIHNhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5IGNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCitvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtYHMgbmFtZSBhbmQgYW4gaWRlYSBvZiB3aGF0IGl0IGRvZXMuCitDb3B5cmlnaHQgKEMpIHl5eXkgIG5hbWUgb2YgYXV0aG9yCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMgd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCitHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzCit0eXBlIGBzaG93IHdgLiAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lCit0byByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGNgIAorZm9yIGRldGFpbHMuCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHdgIGFuZCBgc2hvdyBjYCBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUgcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5IGJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3YCBhbmQgYHNob3cgY2A7IHRoZXkgY291bGQgZXZlbiBiZSBtb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91ciBzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZiBuZWNlc3NhcnkuIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodAoraW50ZXJlc3QgaW4gdGhlIHByb2dyYW0gYEdub21vdmlzaW9uYAorKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gCitieSBKYW1lcyBIYWNrZXIuCisKK3NpZ25hdHVyZSBvZiBUeSBDb29uLCAxIEFwcmlsIDE5ODkKK1R5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUgbGlicmFyeS4gSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtR0NDLWV4Y2VwdGlvbiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLUdDQy1leGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4ZGUwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLUdDQy1leGNlcHRpb24KQEAgLTAsMCArMSwxNyBAQAorCitpbnNlcnQgR1BMIHYyIHRleHQgaGVyZQorCitHQ0MgTGlua2luZyBFeGNlcHRpb24KK0luIGFkZGl0aW9uIHRvIHRoZSBwZXJtaXNzaW9ucyBpbiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzIHlvdSB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBsaW5rIHRoZSBjb21waWxlZCB2ZXJzaW9uCitvZiB0aGlzIGZpbGUgaW50byBjb21iaW5hdGlvbnMgd2l0aCBvdGhlciBwcm9ncmFtcywgYW5kIHRvIGRpc3RyaWJ1dGUgdGhvc2UKK2NvbWJpbmF0aW9ucyB3aXRob3V0IGFueSByZXN0cmljdGlvbiBjb21pbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgZmlsZS4gKFRoZQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSByZXN0cmljdGlvbnMgZG8gYXBwbHkgaW4gb3RoZXIgcmVzcGVjdHM7IGZvciBleGFtcGxlLAordGhleSBjb3ZlciBtb2RpZmljYXRpb24gb2YgdGhlIGZpbGUsIGFuZCBkaXN0cmlidXRpb24gd2hlbiBub3QgbGlua2VkIGludG8gYQorY29tYmluZSBleGVjdXRhYmxlLikKKworCisKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLU9wZW5TU0wtZXhjZXB0aW9uIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtT3BlblNTTC1leGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU4NmM2MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLU9wZW5TU0wtZXhjZXB0aW9uCkBAIC0wLDAgKzEsMjg1IEBACisKK0dOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisKK1ZlcnNpb24gMiwgSnVuZSAxOTkxCisKK0NvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gIAorNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBCisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCitQcmVhbWJsZQorCitUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiBUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb25gcyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8gdXNpbmcgaXQuIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pIFlvdSBjYW4gYXBwbHkgaXQgdG8geW91ciBwcm9ncmFtcywgdG9vLgorCitXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90IHByaWNlLiBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKK1RvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIgZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdSBoYXZlLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KKworV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCitBbHNvLCBmb3IgZWFjaCBhdXRob3JgcyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbyB0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbCBhdXRob3JzYCByZXB1dGF0aW9ucy4KKworRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4gV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlIHByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUgcHJvZ3JhbSBwcm9wcmlldGFyeS4gVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkgcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lYHMgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKzAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gVGhlICJQcm9ncmFtIiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIiBtZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4gKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiBUaGUgYWN0IG9mIHJ1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4gV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKzEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW1gcyBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCithKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KK2IpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseSB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4gYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZSBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiBJZiBpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLCBhbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZSBzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuIEJ1dCB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlIGVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0IHlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0byBleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IgY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbSB3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKK2EpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKK2MpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gKFRoaXMgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMgZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKzQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCis1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3Qgc2lnbmVkIGl0LiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKzYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8gdGhpcyBMaWNlbnNlLgorCis3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3Igb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdCBleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQgbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieSBhbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4gdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55IHBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55IHN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzIGltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gTWFueSBwZW9wbGUgaGF2ZSBtYWRlIGdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQgc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZyB0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QgaW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8gYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKzguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluIGNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCis5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKzEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUgcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCitOTyBXQVJSQU5UWQorCisxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCitFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKK0lmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QgcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdCBmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uIEl0IGlzIHNhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5IGNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCitvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtYHMgbmFtZSBhbmQgYW4gaWRlYSBvZiB3aGF0IGl0IGRvZXMuCitDb3B5cmlnaHQgKEMpIHl5eXkgIG5hbWUgb2YgYXV0aG9yCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMgd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCitHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzCit0eXBlIGBzaG93IHdgLiAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lCit0byByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGNgIAorZm9yIGRldGFpbHMuCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHdgIGFuZCBgc2hvdyBjYCBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUgcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5IGJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3YCBhbmQgYHNob3cgY2A7IHRoZXkgY291bGQgZXZlbiBiZSBtb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91ciBzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZiBuZWNlc3NhcnkuIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodAoraW50ZXJlc3QgaW4gdGhlIHByb2dyYW0gYEdub21vdmlzaW9uYAorKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gCitieSBKYW1lcyBIYWNrZXIuCisKK3NpZ25hdHVyZSBvZiBUeSBDb29uLCAxIEFwcmlsIDE5ODkKK1R5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUgbGlicmFyeS4gSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KKworCitJbiBhZGRpdGlvbiwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIGNvcHlyaWdodCBob2xkZXIKK2dpdmVzIHBlcm1pc3Npb24gdG8gbGluayB0aGUgY29kZSBvZiB0aGlzIHByb2dyYW0gd2l0aAorYW55IHZlcnNpb24gb2YgdGhlIE9wZW5TU0wgbGlicmFyeSB3aGljaCBpcyBkaXN0cmlidXRlZAordW5kZXIgYSBsaWNlbnNlIGlkZW50aWNhbCB0byB0aGF0IGxpc3RlZCBpbiB0aGUgaW5jbHVkZWQKK0NPUFlJTkcuT3BlblNTTCBmaWxlLCBhbmQgZGlzdHJpYnV0ZSBsaW5rZWQgY29tYmluYXRpb25zCitpbmNsdWRpbmcgdGhlIHR3by4gWW91IG11c3Qgb2JleSB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGluIGFsbCByZXNwZWN0cyBmb3IgYWxsIG9mIHRoZSBjb2RlIHVzZWQgb3RoZXIKK3RoYW4gT3BlblNTTC4gSWYgeW91IG1vZGlmeSB0aGlzIGZpbGUsIHlvdSBtYXkgZXh0ZW5kIHRoaXMKK2V4Y2VwdGlvbiB0byB5b3VyIHZlcnNpb24gb2YgdGhlIGZpbGUsIGJ1dCB5b3UgYXJlIG5vdAorb2JsaWdhdGVkIHRvIGRvIHNvLiBJZiB5b3UgZG8gbm90IHdpc2ggdG8gZG8gc28sIGRlbGV0ZQordGhpcyBleGNlcHRpb24gc3RhdGVtZW50IGZyb20geW91ciB2ZXJzaW9uLgorCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisKKyAgTElDRU5TRSBJU1NVRVMKKyAgPT09PT09PT09PT09PT0KKworICBUaGUgT3BlblNTTCB0b29sa2l0IHN0YXlzIHVuZGVyIGEgZHVhbCBsaWNlbnNlLCBpLmUuIGJvdGggdGhlIGNvbmRpdGlvbnMgb2YKKyAgdGhlIE9wZW5TU0wgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIFNTTGVheSBsaWNlbnNlIGFwcGx5IHRvIHRoZSB0b29sa2l0LgorICBTZWUgYmVsb3cgZm9yIHRoZSBhY3R1YWwgbGljZW5zZSB0ZXh0cy4gQWN0dWFsbHkgYm90aCBsaWNlbnNlcyBhcmUgQlNELXN0eWxlCisgIE9wZW4gU291cmNlIGxpY2Vuc2VzLiBJbiBjYXNlIG9mIGFueSBsaWNlbnNlIGlzc3VlcyByZWxhdGVkIHRvIE9wZW5TU0wKKyAgcGxlYXNlIGNvbnRhY3Qgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorCisgIE9wZW5TU0wgTGljZW5zZQorICAtLS0tLS0tLS0tLS0tLS0KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAyIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKgorICovCisKKyBPcmlnaW5hbCBTU0xlYXkgTGljZW5zZQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjJhYWQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uCkBAIC0wLDAgKzEsNiBAQAorCitpbnNlcnQgR1BMIHYyIGxpY2Vuc2UgdGV4dCBoZXJlCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSByZXNwZWN0aXZlIEF1dG9jb25mIE1hY3JvYHMgY29weXJpZ2h0IG93bmVyIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSB0aGUgY29uZmlndXJlIHNjcmlwdHMgdGhhdCBhcmUgdGhlIG91dHB1dCBvZiBBdXRvY29uZiB3aGVuIHByb2Nlc3NpbmcgdGhlIE1hY3JvLiBZb3UgbmVlZCBub3QgZm9sbG93IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugd2hlbiB1c2luZyAgb3IgCitUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgYXBwbGllcyB0byB2ZXJzaW9ucyBvZiB0aGUgQXV0b2NvbmYgTWFjcm8gcmVsZWFzZWQgYnkgdGhlIEF1dG9jb25mIEFyY2hpdmUuIFdoZW4geW91IG1ha2UgYW5kIGRpc3RyaWJ1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBBdXRvY29uZiBNYWNybywgeW91IG1heSBleHRlbmQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMIHRvIGFwcGx5IHRvIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiBhcyB3ZWxsLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1jbGFzc3BhdGgtZXhjZXB0aW9uIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtY2xhc3NwYXRoLWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDNlOWNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtY2xhc3NwYXRoLWV4Y2VwdGlvbgpAQCAtMCwwICsxLDcgQEAKKworaW5zZXJ0IEdQTCB2MiBsaWNlbnNlIHRleHQgaGVyZQorCitMaW5raW5nIHRoaXMgbGlicmFyeSBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5IHdpdGggb3RoZXIgbW9kdWxlcyBpcyBtYWtpbmcgYSBjb21iaW5lZCB3b3JrIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4gVGh1cywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjb3ZlciB0aGUgd2hvbGUgY29tYmluYXRpb24uCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZiB0aGlzIGxpYnJhcnkgZ2l2ZSB5b3UgcGVybWlzc2lvbiB0byBsaW5rIHRoaXMgbGlicmFyeSB3aXRoIGluZGVwZW5kZW50IG1vZHVsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCByZWdhcmRsZXNzIG9mIHRoZSBsaWNlbnNlIHRlcm1zIG9mIHRoZXNlIGluZGVwZW5kZW50IG1vZHVsZXMsIGFuZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0LCBmb3IgZWFjaCBsaW5rZWQgaW5kZXBlbmRlbnQgbW9kdWxlLCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIGxpY2Vuc2Ugb2YgdGhhdCBtb2R1bGUuIEFuIGluZGVwZW5kZW50IG1vZHVsZSBpcyBhIG1vZHVsZSB3aGljaCBpcyBub3QgZGVyaXZlZCBmcm9tIG9yIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4gSWYgeW91IG1vZGlmeSB0aGlzIGxpYnJhcnksIHlvdSBtYXkgZXh0ZW5kIHRoaXMgZXhjZXB0aW9uIHRvIHlvdXIgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgYnV0IHlvdSBhcmUgbm90IG9ibGlnYXRlZCB0byBkbyBzby4gSWYgeW91IGRvIG5vdCB3aXNoIHRvIGRvIHNvLCBkZWxldGUgdGhpcyBleGNlcHRpb24gc3RhdGVtZW50IGZyb20geW91ciB2ZXJzaW9uLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1mb250LWV4Y2VwdGlvbiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLWZvbnQtZXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYjQyZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1mb250LWV4Y2VwdGlvbgpAQCAtMCwwICsxLDE4IEBACisKK2luc2VydCBHUEwgdjIgdGV4dCBoZXJlCisKK0ZvbnQgRXhjZXB0aW9uCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiB5b3UgY3JlYXRlIGEgZG9jdW1lbnQgd2hpY2ggdXNlcyB0aGlzIGZvbnQsIGFuZAorZW1iZWQgdGhpcyBmb250IG9yIHVuYWx0ZXJlZCBwb3J0aW9ucyBvZiB0aGlzIGZvbnQgaW50byB0aGUgZG9jdW1lbnQsIHRoaXMgZm9udAorZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyIGludmFsaWRhdGUgYW55IG90aGVyCityZWFzb25zIHdoeSB0aGUgZG9jdW1lbnQgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIElmCit5b3UgbW9kaWZ5IHRoaXMgZm9udCwgeW91IG1heSBleHRlbmQgdGhpcyBleGNlcHRpb24gdG8geW91ciB2ZXJzaW9uIG9mIHRoZQorZm9udCwgYnV0IHlvdSBhcmUgbm90IG9ibGlnYXRlZCB0byBkbyBzby4gSWYgeW91IGRvIG5vdCB3aXNoIHRvIGRvIHNvLCBkZWxldGUKK3RoaXMgZXhjZXB0aW9uIHN0YXRlbWVudCBmcm9tIHlvdXIgdmVyc2lvbi4KKworCisKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTMuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDY2NWE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMy4wCkBAIC0wLDAgKzEsMjI1IEBACitHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCitWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNworCitDb3B5cmlnaHQgwqkgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorUHJlYW1ibGUKKworVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGEgZnJlZSwgY29weWxlZnQgbGljZW5zZSBmb3Igc29mdHdhcmUgYW5kIG90aGVyIGtpbmRzIG9mIHdvcmtzLgorCitUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYW5kIG90aGVyIHByYWN0aWNhbCB3b3JrcyBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIHRoZSB3b3Jrcy4gQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZSBzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gV2UsIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHVzZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vc3Qgb2Ygb3VyIHNvZnR3YXJlOyBpdCBhcHBsaWVzIGFsc28gdG8gYW55IG90aGVyIHdvcmsgcmVsZWFzZWQgdGhpcyB3YXkgYnkgaXRzIGF1dGhvcnMuIFlvdSBjYW4gYXBwbHkgaXQgdG8geW91ciBwcm9ncmFtcywgdG9vLgorCitXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90IHByaWNlLiBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yIHRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCitUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UgdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuIFRoZXJlZm9yZSwgeW91IGhhdmUgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQ6IHJlc3BvbnNpYmlsaXRpZXMgdG8gcmVzcGVjdCB0aGUgZnJlZWRvbSBvZiBvdGhlcnMuCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIgZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgcGFzcyBvbiB0byB0aGUgcmVjaXBpZW50cyB0aGUgc2FtZSBmcmVlZG9tcyB0aGF0IHlvdSByZWNlaXZlZC4gWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKK0RldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UgZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KKworRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gRm9yIGJvdGggdXNlcnMnIGFuZCBhdXRob3JzJyBzYWtlLCB0aGUgR1BMIHJlcXVpcmVzIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgYmUgbWFya2VkIGFzIGNoYW5nZWQsIHNvIHRoYXQgdGhlaXIgcHJvYmxlbXMgd2lsbCBub3QgYmUgYXR0cmlidXRlZCBlcnJvbmVvdXNseSB0byBhdXRob3JzIG9mIHByZXZpb3VzIHZlcnNpb25zLgorCitTb21lIGRldmljZXMgYXJlIGRlc2lnbmVkIHRvIGRlbnkgdXNlcnMgYWNjZXNzIHRvIGluc3RhbGwgb3IgcnVuIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBzb2Z0d2FyZSBpbnNpZGUgdGhlbSwgYWx0aG91Z2ggdGhlIG1hbnVmYWN0dXJlciBjYW4gZG8gc28uIFRoaXMgaXMgZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgYWltIG9mIHByb3RlY3RpbmcgdXNlcnMnIGZyZWVkb20gdG8gY2hhbmdlIHRoZSBzb2Z0d2FyZS4gVGhlIHN5c3RlbWF0aWMgcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8gdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuIFRoZXJlZm9yZSwgd2UgaGF2ZSBkZXNpZ25lZCB0aGlzIHZlcnNpb24gb2YgdGhlIEdQTCB0byBwcm9oaWJpdCB0aGUgcHJhY3RpY2UgZm9yIHRob3NlIHByb2R1Y3RzLiBJZiBzdWNoIHByb2JsZW1zIGFyaXNlIHN1YnN0YW50aWFsbHkgaW4gb3RoZXIgZG9tYWlucywgd2Ugc3RhbmQgcmVhZHkgdG8gZXh0ZW5kIHRoaXMgcHJvdmlzaW9uIHRvIHRob3NlIGRvbWFpbnMgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBHUEwsIGFzIG5lZWRlZCB0byBwcm90ZWN0IHRoZSBmcmVlZG9tIG9mIHVzZXJzLgorCitGaW5hbGx5LCBldmVyeSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLiBTdGF0ZXMgc2hvdWxkIG5vdCBhbGxvdyBwYXRlbnRzIHRvIHJlc3RyaWN0IGRldmVsb3BtZW50IGFuZCB1c2Ugb2Ygc29mdHdhcmUgb24gZ2VuZXJhbC1wdXJwb3NlIGNvbXB1dGVycywgYnV0IGluIHRob3NlIHRoYXQgZG8sIHdlIHdpc2ggdG8gYXZvaWQgdGhlIHNwZWNpYWwgZGFuZ2VyIHRoYXQgcGF0ZW50cyBhcHBsaWVkIHRvIGEgZnJlZSBwcm9ncmFtIGNvdWxkIG1ha2UgaXQgZWZmZWN0aXZlbHkgcHJvcHJpZXRhcnkuIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQgcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCisKK1RoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBmb2xsb3cuCitURVJNUyBBTkQgQ09ORElUSU9OUworMC4gRGVmaW5pdGlvbnMuCisKK+KAnFRoaXMgTGljZW5zZeKAnSByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKwor4oCcQ29weXJpZ2h04oCdIGFsc28gbWVhbnMgY29weXJpZ2h0LWxpa2UgbGF3cyB0aGF0IGFwcGx5IHRvIG90aGVyIGtpbmRzIG9mIHdvcmtzLCBzdWNoIGFzIHNlbWljb25kdWN0b3IgbWFza3MuCisKK+KAnFRoZSBQcm9ncmFt4oCdIHJlZmVycyB0byBhbnkgY29weXJpZ2h0YWJsZSB3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMg4oCceW914oCdLiDigJxMaWNlbnNlZXPigJ0gYW5kIOKAnHJlY2lwaWVudHPigJ0gbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCisKK1RvIOKAnG1vZGlmeeKAnSBhIHdvcmsgbWVhbnMgdG8gY29weSBmcm9tIG9yIGFkYXB0IGFsbCBvciBwYXJ0IG9mIHRoZSB3b3JrIGluIGEgZmFzaGlvbiByZXF1aXJpbmcgY29weXJpZ2h0IHBlcm1pc3Npb24sIG90aGVyIHRoYW4gdGhlIG1ha2luZyBvZiBhbiBleGFjdCBjb3B5LiBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEg4oCcbW9kaWZpZWQgdmVyc2lvbuKAnSBvZiB0aGUgZWFybGllciB3b3JrIG9yIGEgd29yayDigJxiYXNlZCBvbuKAnSB0aGUgZWFybGllciB3b3JrLgorCitBIOKAnGNvdmVyZWQgd29ya+KAnSBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK1RvIOKAnHByb3BhZ2F0ZeKAnSBhIHdvcmsgbWVhbnMgdG8gZG8gYW55dGhpbmcgd2l0aCBpdCB0aGF0LCB3aXRob3V0IHBlcm1pc3Npb24sIHdvdWxkIG1ha2UgeW91IGRpcmVjdGx5IG9yIHNlY29uZGFyaWx5IGxpYWJsZSBmb3IgaW5mcmluZ2VtZW50IHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdywgZXhjZXB0IGV4ZWN1dGluZyBpdCBvbiBhIGNvbXB1dGVyIG9yIG1vZGlmeWluZyBhIHByaXZhdGUgY29weS4gUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywgZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUgcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgorCitUbyDigJxjb252ZXnigJ0gYSB3b3JrIG1lYW5zIGFueSBraW5kIG9mIHByb3BhZ2F0aW9uIHRoYXQgZW5hYmxlcyBvdGhlciBwYXJ0aWVzIHRvIG1ha2Ugb3IgcmVjZWl2ZSBjb3BpZXMuIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaCBhIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgorCitBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyDigJxBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2Vz4oCdIHRvIHRoZSBleHRlbnQgdGhhdCBpdCBpbmNsdWRlcyBhIGNvbnZlbmllbnQgYW5kIHByb21pbmVudGx5IHZpc2libGUgZmVhdHVyZSB0aGF0ICgxKSBkaXNwbGF5cyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlLCBhbmQgKDIpIHRlbGxzIHRoZSB1c2VyIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSB3b3JrIChleGNlcHQgdG8gdGhlIGV4dGVudCB0aGF0IHdhcnJhbnRpZXMgYXJlIHByb3ZpZGVkKSwgdGhhdCBsaWNlbnNlZXMgbWF5IGNvbnZleSB0aGUgd29yayB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBJZiB0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYSBtZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgorMS4gU291cmNlIENvZGUuCisKK1RoZSDigJxzb3VyY2UgY29kZeKAnSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIOKAnE9iamVjdCBjb2Rl4oCdIG1lYW5zIGFueSBub24tc291cmNlIGZvcm0gb2YgYSB3b3JrLgorCitBIOKAnFN0YW5kYXJkIEludGVyZmFjZeKAnSBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwgc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZiBpbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdCBpcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KKworVGhlIOKAnFN5c3RlbSBMaWJyYXJpZXPigJ0gb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyIHRoYW4gdGhlIHdvcmsgYXMgYSB3aG9sZSwgdGhhdCAoYSkgaXMgaW5jbHVkZWQgaW4gdGhlIG5vcm1hbCBmb3JtIG9mIHBhY2thZ2luZyBhIE1ham9yIENvbXBvbmVudCwgYnV0IHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoYXQgTWFqb3IgQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0IE1ham9yIENvbXBvbmVudCwgb3IgdG8gaW1wbGVtZW50IGEgU3RhbmRhcmQgSW50ZXJmYWNlIGZvciB3aGljaCBhbiBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3VyY2UgY29kZSBmb3JtLiBBIOKAnE1ham9yIENvbXBvbmVudOKAnSwgaW4gdGhpcyBjb250ZXh0LCBtZWFucyBhIG1ham9yIGVzc2VudGlhbCBjb21wb25lbnQgKGtlcm5lbCwgd2luZG93IHN5c3RlbSwgYW5kIHNvIG9uKSBvZiB0aGUgc3BlY2lmaWMgb3BlcmF0aW5nIHN5c3RlbSAoaWYgYW55KSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSB3b3JrIHJ1bnMsIG9yIGEgY29tcGlsZXIgdXNlZCB0byBwcm9kdWNlIHRoZSB3b3JrLCBvciBhbiBvYmplY3QgY29kZSBpbnRlcnByZXRlciB1c2VkIHRvIHJ1biBpdC4KKworVGhlIOKAnENvcnJlc3BvbmRpbmcgU291cmNl4oCdIGZvciBhIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIG5lZWRlZCB0byBnZW5lcmF0ZSwgaW5zdGFsbCwgYW5kIChmb3IgYW4gZXhlY3V0YWJsZSB3b3JrKSBydW4gdGhlIG9iamVjdCBjb2RlIGFuZCB0byBtb2RpZnkgdGhlIHdvcmssIGluY2x1ZGluZyBzY3JpcHRzIHRvIGNvbnRyb2wgdGhvc2UgYWN0aXZpdGllcy4gSG93ZXZlciwgaXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgd29yaydzIFN5c3RlbSBMaWJyYXJpZXMsIG9yIGdlbmVyYWwtcHVycG9zZSB0b29scyBvciBnZW5lcmFsbHkgYXZhaWxhYmxlIGZyZWUgcHJvZ3JhbXMgd2hpY2ggYXJlIHVzZWQgdW5tb2RpZmllZCBpbiBwZXJmb3JtaW5nIHRob3NlIGFjdGl2aXRpZXMgYnV0IHdoaWNoIGFyZSBub3QgcGFydCBvZiB0aGUgd29yay4gRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlIGluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yIHRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseSBsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwgc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2Ugc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgorCitUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzIGNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuCisKK1RoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdCBzYW1lIHdvcmsuCisyLiBCYXNpYyBQZXJtaXNzaW9ucy4KKworQWxsIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRlcm0gb2YgY29weXJpZ2h0IG9uIHRoZSBQcm9ncmFtLCBhbmQgYXJlIGlycmV2b2NhYmxlIHByb3ZpZGVkIHRoZSBzdGF0ZWQgY29uZGl0aW9ucyBhcmUgbWV0LiBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uIFRoZSBvdXRwdXQgZnJvbSBydW5uaW5nIGEgY292ZXJlZCB3b3JrIGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIG9ubHkgaWYgdGhlIG91dHB1dCwgZ2l2ZW4gaXRzIGNvbnRlbnQsIGNvbnN0aXR1dGVzIGEgY292ZXJlZCB3b3JrLiBUaGlzIExpY2Vuc2UgYWNrbm93bGVkZ2VzIHlvdXIgcmlnaHRzIG9mIGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxlbnQsIGFzIHByb3ZpZGVkIGJ5IGNvcHlyaWdodCBsYXcuCisKK1lvdSBtYXkgbWFrZSwgcnVuIGFuZCBwcm9wYWdhdGUgY292ZXJlZCB3b3JrcyB0aGF0IHlvdSBkbyBub3QgY29udmV5LCB3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMgaW4gZm9yY2UuIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlIG9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdSB3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvIG5vdCBjb250cm9sIGNvcHlyaWdodC4gVGhvc2UgdGh1cyBtYWtpbmcgb3IgcnVubmluZyB0aGUgY292ZXJlZCB3b3JrcyBmb3IgeW91IG11c3QgZG8gc28gZXhjbHVzaXZlbHkgb24geW91ciBiZWhhbGYsIHVuZGVyIHlvdXIgZGlyZWN0aW9uIGFuZCBjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZiB5b3VyIGNvcHlyaWdodGVkIG1hdGVyaWFsIG91dHNpZGUgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGggeW91LgorCitDb252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0dGVkIHNvbGVseSB1bmRlciB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgYmVsb3cuIFN1YmxpY2Vuc2luZyBpcyBub3QgYWxsb3dlZDsgc2VjdGlvbiAxMCBtYWtlcyBpdCB1bm5lY2Vzc2FyeS4KKzMuIFByb3RlY3RpbmcgVXNlcnMnIExlZ2FsIFJpZ2h0cyBGcm9tIEFudGktQ2lyY3VtdmVudGlvbiBMYXcuCisKK05vIGNvdmVyZWQgd29yayBzaGFsbCBiZSBkZWVtZWQgcGFydCBvZiBhbiBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbCBtZWFzdXJlIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBmdWxmaWxsaW5nIG9ibGlnYXRpb25zIHVuZGVyIGFydGljbGUgMTEgb2YgdGhlIFdJUE8gY29weXJpZ2h0IHRyZWF0eSBhZG9wdGVkIG9uIDIwIERlY2VtYmVyIDE5OTYsIG9yIHNpbWlsYXIgbGF3cyBwcm9oaWJpdGluZyBvciByZXN0cmljdGluZyBjaXJjdW12ZW50aW9uIG9mIHN1Y2ggbWVhc3VyZXMuCisKK1doZW4geW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRvIHRoZSBleHRlbnQgc3VjaCBjaXJjdW12ZW50aW9uIGlzIGVmZmVjdGVkIGJ5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0IG9wZXJhdGlvbiBvciBtb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgYXMgYSBtZWFucyBvZiBlbmZvcmNpbmcsIGFnYWluc3QgdGhlIHdvcmsncyB1c2VycywgeW91ciBvciB0aGlyZCBwYXJ0aWVzJyBsZWdhbCByaWdodHMgdG8gZm9yYmlkIGNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcy4KKzQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCisKK1lvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueSBub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsIHJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksIGFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCis1LiBDb252ZXlpbmcgTW9kaWZpZWQgU291cmNlIFZlcnNpb25zLgorCitZb3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRvIHByb2R1Y2UgaXQgZnJvbSB0aGUgUHJvZ3JhbSwgaW4gdGhlIGZvcm0gb2Ygc291cmNlIGNvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHNlY3Rpb24gNCwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgKiBhKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQgaXQsIGFuZCBnaXZpbmcgYSByZWxldmFudCBkYXRlLgorICAgICogYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgY29uZGl0aW9ucyBhZGRlZCB1bmRlciBzZWN0aW9uIDcuIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0byDigJxrZWVwIGludGFjdCBhbGwgbm90aWNlc+KAnS4KKyAgICAqIGMpIFlvdSBtdXN0IGxpY2Vuc2UgdGhlIGVudGlyZSB3b3JrLCBhcyBhIHdob2xlLCB1bmRlciB0aGlzIExpY2Vuc2UgdG8gYW55b25lIHdobyBjb21lcyBpbnRvIHBvc3Nlc3Npb24gb2YgYSBjb3B5LiBUaGlzIExpY2Vuc2Ugd2lsbCB0aGVyZWZvcmUgYXBwbHksIGFsb25nIHdpdGggYW55IGFwcGxpY2FibGUgc2VjdGlvbiA3IGFkZGl0aW9uYWwgdGVybXMsIHRvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8gcGVybWlzc2lvbiB0byBsaWNlbnNlIHRoZSB3b3JrIGluIGFueSBvdGhlciB3YXksIGJ1dCBpdCBkb2VzIG5vdCBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgorICAgICogZCkgSWYgdGhlIHdvcmsgaGFzIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlcywgZWFjaCBtdXN0IGRpc3BsYXkgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlczsgaG93ZXZlciwgaWYgdGhlIFByb2dyYW0gaGFzIGludGVyYWN0aXZlIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyIHdvcmsgbmVlZCBub3QgbWFrZSB0aGVtIGRvIHNvLgorCitBIGNvbXBpbGF0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHdpdGggb3RoZXIgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzLCB3aGljaCBhcmUgbm90IGJ5IHRoZWlyIG5hdHVyZSBleHRlbnNpb25zIG9mIHRoZSBjb3ZlcmVkIHdvcmssIGFuZCB3aGljaCBhcmUgbm90IGNvbWJpbmVkIHdpdGggaXQgc3VjaCBhcyB0byBmb3JtIGEgbGFyZ2VyIHByb2dyYW0sIGluIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4g4oCcYWdncmVnYXRl4oCdIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdCB1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrIGluIGFuIGFnZ3JlZ2F0ZSBkb2VzIG5vdCBjYXVzZSB0aGlzIExpY2Vuc2UgdG8gYXBwbHkgdG8gdGhlIG90aGVyIHBhcnRzIG9mIHRoZSBhZ2dyZWdhdGUuCis2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KKworWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlIG1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW4gb25lIG9mIHRoZXNlIHdheXM6CisKKyAgICAqIGEpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZml4ZWQgb24gYSBkdXJhYmxlIHBoeXNpY2FsIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKyAgICAqIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycyBhbmQgdmFsaWQgZm9yIGFzIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdCBtb2RlbCwgdG8gZ2l2ZSBhbnlvbmUgd2hvIHBvc3Nlc3NlcyB0aGUgb2JqZWN0IGNvZGUgZWl0aGVyICgxKSBhIGNvcHkgb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhbGwgdGhlIHNvZnR3YXJlIGluIHRoZSBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UsIGZvciBhIHByaWNlIG5vIG1vcmUgdGhhbiB5b3VyIHJlYXNvbmFibGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgdGhpcyBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBjaGFyZ2UuCisgICAgKiBjKSBDb252ZXkgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhlIG9iamVjdCBjb2RlIHdpdGggYSBjb3B5IG9mIHRoZSB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiBUaGlzIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seSBvY2Nhc2lvbmFsbHkgYW5kIG5vbmNvbW1lcmNpYWxseSwgYW5kIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIHN1YnNlY3Rpb24gNmIuCisgICAgKiBkKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGJ5IG9mZmVyaW5nIGFjY2VzcyBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgaW4gdGhlIHNhbWUgd2F5IHRocm91Z2ggdGhlIHNhbWUgcGxhY2UgYXQgbm8gZnVydGhlciBjaGFyZ2UuIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuIElmIHRoZSBwbGFjZSB0byBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbWF5IGJlIG9uIGEgZGlmZmVyZW50IHNlcnZlciAob3BlcmF0ZWQgYnkgeW91IG9yIGEgdGhpcmQgcGFydHkpIHRoYXQgc3VwcG9ydHMgZXF1aXZhbGVudCBjb3B5aW5nIGZhY2lsaXRpZXMsIHByb3ZpZGVkIHlvdSBtYWludGFpbiBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gUmVnYXJkbGVzcyBvZiB3aGF0IHNlcnZlciBob3N0cyB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyBuZWVkZWQgdG8gc2F0aXNmeSB0aGVzZSByZXF1aXJlbWVudHMuCisgICAgKiBlKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24sIHByb3ZpZGVkIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBhcmUgYmVpbmcgb2ZmZXJlZCB0byB0aGUgZ2VuZXJhbCBwdWJsaWMgYXQgbm8gY2hhcmdlIHVuZGVyIHN1YnNlY3Rpb24gNmQuCisKK0Egc2VwYXJhYmxlIHBvcnRpb24gb2YgdGhlIG9iamVjdCBjb2RlLCB3aG9zZSBzb3VyY2UgY29kZSBpcyBleGNsdWRlZCBmcm9tIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhcyBhIFN5c3RlbSBMaWJyYXJ5LCBuZWVkIG5vdCBiZSBpbmNsdWRlZCBpbiBjb252ZXlpbmcgdGhlIG9iamVjdCBjb2RlIHdvcmsuCisKK0Eg4oCcVXNlciBQcm9kdWN04oCdIGlzIGVpdGhlciAoMSkgYSDigJxjb25zdW1lciBwcm9kdWN04oCdLCB3aGljaCBtZWFucyBhbnkgdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwgb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbiBpbnRvIGEgZHdlbGxpbmcuIEluIGRldGVybWluaW5nIHdoZXRoZXIgYSBwcm9kdWN0IGlzIGEgY29uc3VtZXIgcHJvZHVjdCwgZG91YnRmdWwgY2FzZXMgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgY292ZXJhZ2UuIEZvciBhIHBhcnRpY3VsYXIgcHJvZHVjdCByZWNlaXZlZCBieSBhIHBhcnRpY3VsYXIgdXNlciwg4oCcbm9ybWFsbHkgdXNlZOKAnSByZWZlcnMgdG8gYSB0eXBpY2FsIG9yIGNvbW1vbiB1c2Ugb2YgdGhhdCBjbGFzcyBvZiBwcm9kdWN0LCByZWdhcmRsZXNzIG9mIHRoZSBzdGF0dXMgb2YgdGhlIHBhcnRpY3VsYXIgdXNlciBvciBvZiB0aGUgd2F5IGluIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIgYWN0dWFsbHkgdXNlcywgb3IgZXhwZWN0cyBvciBpcyBleHBlY3RlZCB0byB1c2UsIHRoZSBwcm9kdWN0LiBBIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRpYWwgY29tbWVyY2lhbCwgaW5kdXN0cmlhbCBvciBub24tY29uc3VtZXIgdXNlcywgdW5sZXNzIHN1Y2ggdXNlcyByZXByZXNlbnQgdGhlIG9ubHkgc2lnbmlmaWNhbnQgbW9kZSBvZiB1c2Ugb2YgdGhlIHByb2R1Y3QuCisKK+KAnEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbuKAnSBmb3IgYSBVc2VyIFByb2R1Y3QgbWVhbnMgYW55IG1ldGhvZHMsIHByb2NlZHVyZXMsIGF1dGhvcml6YXRpb24ga2V5cywgb3Igb3RoZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gaW5zdGFsbCBhbmQgZXhlY3V0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBhIGNvdmVyZWQgd29yayBpbiB0aGF0IFVzZXIgUHJvZHVjdCBmcm9tIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBpdHMgQ29ycmVzcG9uZGluZyBTb3VyY2UuIFRoZSBpbmZvcm1hdGlvbiBtdXN0IHN1ZmZpY2UgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbnRpbnVlZCBmdW5jdGlvbmluZyBvZiB0aGUgbW9kaWZpZWQgb2JqZWN0IGNvZGUgaXMgaW4gbm8gY2FzZSBwcmV2ZW50ZWQgb3IgaW50ZXJmZXJlZCB3aXRoIHNvbGVseSBiZWNhdXNlIG1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlLgorCitJZiB5b3UgY29udmV5IGFuIG9iamVjdCBjb2RlIHdvcmsgdW5kZXIgdGhpcyBzZWN0aW9uIGluLCBvciB3aXRoLCBvciBzcGVjaWZpY2FsbHkgZm9yIHVzZSBpbiwgYSBVc2VyIFByb2R1Y3QsIGFuZCB0aGUgY29udmV5aW5nIG9jY3VycyBhcyBwYXJ0IG9mIGEgdHJhbnNhY3Rpb24gaW4gd2hpY2ggdGhlIHJpZ2h0IG9mIHBvc3Nlc3Npb24gYW5kIHVzZSBvZiB0aGUgVXNlciBQcm9kdWN0IGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZWNpcGllbnQgaW4gcGVycGV0dWl0eSBvciBmb3IgYSBmaXhlZCB0ZXJtIChyZWdhcmRsZXNzIG9mIGhvdyB0aGUgdHJhbnNhY3Rpb24gaXMgY2hhcmFjdGVyaXplZCksIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCB1bmRlciB0aGlzIHNlY3Rpb24gbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uLiBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseSBpZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbCBtb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzIGJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCisKK1RoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEgcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzIGZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yIHRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiBBY2Nlc3MgdG8gYSBuZXR3b3JrIG1heSBiZSBkZW5pZWQgd2hlbiB0aGUgbW9kaWZpY2F0aW9uIGl0c2VsZiBtYXRlcmlhbGx5IGFuZCBhZHZlcnNlbHkgYWZmZWN0cyB0aGUgb3BlcmF0aW9uIG9mIHRoZSBuZXR3b3JrIG9yIHZpb2xhdGVzIHRoZSBydWxlcyBhbmQgcHJvdG9jb2xzIGZvciBjb21tdW5pY2F0aW9uIGFjcm9zcyB0aGUgbmV0d29yay4KKworQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQsIGFuZCBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gcHJvdmlkZWQsIGluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGluIGEgZm9ybWF0IHRoYXQgaXMgcHVibGljbHkgZG9jdW1lbnRlZCAoYW5kIHdpdGggYW4gaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4gc291cmNlIGNvZGUgZm9ybSksIGFuZCBtdXN0IHJlcXVpcmUgbm8gc3BlY2lhbCBwYXNzd29yZCBvciBrZXkgZm9yIHVucGFja2luZywgcmVhZGluZyBvciBjb3B5aW5nLgorNy4gQWRkaXRpb25hbCBUZXJtcy4KKwor4oCcQWRkaXRpb25hbCBwZXJtaXNzaW9uc+KAnSBhcmUgdGVybXMgdGhhdCBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYnkgbWFraW5nIGV4Y2VwdGlvbnMgZnJvbSBvbmUgb3IgbW9yZSBvZiBpdHMgY29uZGl0aW9ucy4gQWRkaXRpb25hbCBwZXJtaXNzaW9ucyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIHRoZSBlbnRpcmUgUHJvZ3JhbSBzaGFsbCBiZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgaW5jbHVkZWQgaW4gdGhpcyBMaWNlbnNlLCB0byB0aGUgZXh0ZW50IHRoYXQgdGhleSBhcmUgdmFsaWQgdW5kZXIgYXBwbGljYWJsZSBsYXcuIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseSB1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KKworV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbiByZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YgaXQuIChBZGRpdGlvbmFsIHBlcm1pc3Npb25zIG1heSBiZSB3cml0dGVuIHRvIHJlcXVpcmUgdGhlaXIgb3duIHJlbW92YWwgaW4gY2VydGFpbiBjYXNlcyB3aGVuIHlvdSBtb2RpZnkgdGhlIHdvcmsuKSBZb3UgbWF5IHBsYWNlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgb24gbWF0ZXJpYWwsIGFkZGVkIGJ5IHlvdSB0byBhIGNvdmVyZWQgd29yaywgZm9yIHdoaWNoIHlvdSBoYXZlIG9yIGNhbiBnaXZlIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBwZXJtaXNzaW9uLgorCitOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIGZvciBtYXRlcmlhbCB5b3UgYWRkIHRvIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IChpZiBhdXRob3JpemVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZiB0aGF0IG1hdGVyaWFsKSBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0ZXJtczoKKworICAgICogYSkgRGlzY2xhaW1pbmcgd2FycmFudHkgb3IgbGltaXRpbmcgbGlhYmlsaXR5IGRpZmZlcmVudGx5IGZyb20gdGhlIHRlcm1zIG9mIHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7IG9yCisgICAgKiBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IgYXV0aG9yIGF0dHJpYnV0aW9ucyBpbiB0aGF0IG1hdGVyaWFsIG9yIGluIHRoZSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzIGRpc3BsYXllZCBieSB3b3JrcyBjb250YWluaW5nIGl0OyBvcgorICAgICogYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvciByZXF1aXJpbmcgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBzdWNoIG1hdGVyaWFsIGJlIG1hcmtlZCBpbiByZWFzb25hYmxlIHdheXMgYXMgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIHZlcnNpb247IG9yCisgICAgKiBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yIGF1dGhvcnMgb2YgdGhlIG1hdGVyaWFsOyBvcgorICAgICogZSkgRGVjbGluaW5nIHRvIGdyYW50IHJpZ2h0cyB1bmRlciB0cmFkZW1hcmsgbGF3IGZvciB1c2Ugb2Ygc29tZSB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKKyAgICAqIGYpIFJlcXVpcmluZyBpbmRlbW5pZmljYXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRob3JzIG9mIHRoYXQgbWF0ZXJpYWwgYnkgYW55b25lIHdobyBjb252ZXlzIHRoZSBtYXRlcmlhbCAob3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvciBhbnkgbGlhYmlsaXR5IHRoYXQgdGhlc2UgY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9uIHRob3NlIGxpY2Vuc29ycyBhbmQgYXV0aG9ycy4KKworQWxsIG90aGVyIG5vbi1wZXJtaXNzaXZlIGFkZGl0aW9uYWwgdGVybXMgYXJlIGNvbnNpZGVyZWQg4oCcZnVydGhlciByZXN0cmljdGlvbnPigJ0gd2l0aGluIHRoZSBtZWFuaW5nIG9mIHNlY3Rpb24gMTAuIElmIHRoZSBQcm9ncmFtIGFzIHlvdSByZWNlaXZlZCBpdCwgb3IgYW55IHBhcnQgb2YgaXQsIGNvbnRhaW5zIGEgbm90aWNlIHN0YXRpbmcgdGhhdCBpdCBpcyBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCBhIHRlcm0gdGhhdCBpcyBhIGZ1cnRoZXIgcmVzdHJpY3Rpb24sIHlvdSBtYXkgcmVtb3ZlIHRoYXQgdGVybS4gSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zIGEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMgbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCisKK0lmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UgbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlIGFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZyB3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgorCitBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZSBmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOyB0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCis4LiBUZXJtaW5hdGlvbi4KKworWW91IG1heSBub3QgcHJvcGFnYXRlIG9yIG1vZGlmeSBhIGNvdmVyZWQgd29yayBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvciBtb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZCBwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCisKK0hvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKSBwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kIGZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgorCitNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUgcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0IGNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIgeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKK1Rlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlIGxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2UuIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkgcmVpbnN0YXRlZCwgeW91IGRvIG5vdCBxdWFsaWZ5IHRvIHJlY2VpdmUgbmV3IGxpY2Vuc2VzIGZvciB0aGUgc2FtZSBtYXRlcmlhbCB1bmRlciBzZWN0aW9uIDEwLgorOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCisKK1lvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvciBydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiBBbmNpbGxhcnkgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgb2NjdXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24gdG8gcmVjZWl2ZSBhIGNvcHkgbGlrZXdpc2UgZG9lcyBub3QgcmVxdWlyZSBhY2NlcHRhbmNlLiBIb3dldmVyLCBub3RoaW5nIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3IgbW9kaWZ5IGFueSBjb3ZlcmVkIHdvcmsuIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgcHJvcGFnYXRpbmcgYSBjb3ZlcmVkIHdvcmssIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLgorMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgorCitFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZCBwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCisKK0FuIOKAnGVudGl0eSB0cmFuc2FjdGlvbuKAnSBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuIG9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4gb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuIElmIHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHJlc3VsdHMgZnJvbSBhbiBlbnRpdHkgdHJhbnNhY3Rpb24sIGVhY2ggcGFydHkgdG8gdGhhdCB0cmFuc2FjdGlvbiB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMgd2hhdGV2ZXIgbGljZW5zZXMgdG8gdGhlIHdvcmsgdGhlIHBhcnR5J3MgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QgaGFkIG9yIGNvdWxkIGdpdmUgdW5kZXIgdGhlIHByZXZpb3VzIHBhcmFncmFwaCwgcGx1cyBhIHJpZ2h0IHRvIHBvc3Nlc3Npb24gb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGZyb20gdGhlIHByZWRlY2Vzc29yIGluIGludGVyZXN0LCBpZiB0aGUgcHJlZGVjZXNzb3IgaGFzIGl0IG9yIGNhbiBnZXQgaXQgd2l0aCByZWFzb25hYmxlIGVmZm9ydHMuCisKK1lvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBvciBhZmZpcm1lZCB1bmRlciB0aGlzIExpY2Vuc2UuIEZvciBleGFtcGxlLCB5b3UgbWF5IG5vdCBpbXBvc2UgYSBsaWNlbnNlIGZlZSwgcm95YWx0eSwgb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB5b3UgbWF5IG5vdCBpbml0aWF0ZSBsaXRpZ2F0aW9uIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IGFueSBwYXRlbnQgY2xhaW0gaXMgaW5mcmluZ2VkIGJ5IG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5nIGZvciBzYWxlLCBvciBpbXBvcnRpbmcgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQuCisxMS4gUGF0ZW50cy4KKworQSDigJxjb250cmlidXRvcuKAnSBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMgTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuIFRoZSB3b3JrIHRodXMgbGljZW5zZWQgaXMgY2FsbGVkIHRoZSBjb250cmlidXRvcidzIOKAnGNvbnRyaWJ1dG9yIHZlcnNpb27igJ0uCisKK0EgY29udHJpYnV0b3IncyDigJxlc3NlbnRpYWwgcGF0ZW50IGNsYWltc+KAnSBhcmUgYWxsIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgY29udHJpYnV0b3IsIHdoZXRoZXIgYWxyZWFkeSBhY3F1aXJlZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIGJ5IHNvbWUgbWFubmVyLCBwZXJtaXR0ZWQgYnkgdGhpcyBMaWNlbnNlLCBvZiBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLCBidXQgZG8gbm90IGluY2x1ZGUgY2xhaW1zIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIG9ubHkgYXMgYSBjb25zZXF1ZW5jZSBvZiBmdXJ0aGVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udHJpYnV0b3IgdmVyc2lvbi4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwg4oCcY29udHJvbOKAnSBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gZ3JhbnQgcGF0ZW50IHN1YmxpY2Vuc2VzIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZS4KKworRWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50IGxpY2Vuc2UgdW5kZXIgdGhlIGNvbnRyaWJ1dG9yJ3MgZXNzZW50aWFsIHBhdGVudCBjbGFpbXMsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHJ1biwgbW9kaWZ5IGFuZCBwcm9wYWdhdGUgdGhlIGNvbnRlbnRzIG9mIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLgorCitJbiB0aGUgZm9sbG93aW5nIHRocmVlIHBhcmFncmFwaHMsIGEg4oCccGF0ZW50IGxpY2Vuc2XigJ0gaXMgYW55IGV4cHJlc3MgYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQsIGhvd2V2ZXIgZGVub21pbmF0ZWQsIG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50IChzdWNoIGFzIGFuIGV4cHJlc3MgcGVybWlzc2lvbiB0byBwcmFjdGljZSBhIHBhdGVudCBvciBjb3ZlbmFudCBub3QgdG8gc3VlIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50KS4gVG8g4oCcZ3JhbnTigJ0gc3VjaCBhIHBhdGVudCBsaWNlbnNlIHRvIGEgcGFydHkgbWVhbnMgdG8gbWFrZSBzdWNoIGFuIGFncmVlbWVudCBvciBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50IGFnYWluc3QgdGhlIHBhcnR5LgorCitJZiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBhdGVudCBsaWNlbnNlLCBhbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGlzIG5vdCBhdmFpbGFibGUgZm9yIGFueW9uZSB0byBjb3B5LCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhyb3VnaCBhIHB1YmxpY2x5IGF2YWlsYWJsZSBuZXR3b3JrIHNlcnZlciBvciBvdGhlciByZWFkaWx5IGFjY2Vzc2libGUgbWVhbnMsIHRoZW4geW91IG11c3QgZWl0aGVyICgxKSBjYXVzZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdG8gYmUgc28gYXZhaWxhYmxlLCBvciAoMikgYXJyYW5nZSB0byBkZXByaXZlIHlvdXJzZWxmIG9mIHRoZSBiZW5lZml0IG9mIHRoZSBwYXRlbnQgbGljZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmssIG9yICgzKSBhcnJhbmdlLCBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UsIHRvIGV4dGVuZCB0aGUgcGF0ZW50IGxpY2Vuc2UgdG8gZG93bnN0cmVhbSByZWNpcGllbnRzLiDigJxLbm93aW5nbHkgcmVseWluZ+KAnSBtZWFucyB5b3UgaGF2ZSBhY3R1YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBmb3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZleWluZyB0aGUgY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgb3IgeW91ciByZWNpcGllbnQncyB1c2Ugb2YgdGhlIGNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIHdvdWxkIGluZnJpbmdlIG9uZSBvciBtb3JlIGlkZW50aWZpYWJsZSBwYXRlbnRzIGluIHRoYXQgY291bnRyeSB0aGF0IHlvdSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2YWxpZC4KKworSWYsIHB1cnN1YW50IHRvIG9yIGluIGNvbm5lY3Rpb24gd2l0aCBhIHNpbmdsZSB0cmFuc2FjdGlvbiBvciBhcnJhbmdlbWVudCwgeW91IGNvbnZleSwgb3IgcHJvcGFnYXRlIGJ5IHByb2N1cmluZyBjb252ZXlhbmNlIG9mLCBhIGNvdmVyZWQgd29yaywgYW5kIGdyYW50IGEgcGF0ZW50IGxpY2Vuc2UgdG8gc29tZSBvZiB0aGUgcGFydGllcyByZWNlaXZpbmcgdGhlIGNvdmVyZWQgd29yayBhdXRob3JpemluZyB0aGVtIHRvIHVzZSwgcHJvcGFnYXRlLCBtb2RpZnkgb3IgY29udmV5IGEgc3BlY2lmaWMgY29weSBvZiB0aGUgY292ZXJlZCB3b3JrLCB0aGVuIHRoZSBwYXRlbnQgbGljZW5zZSB5b3UgZ3JhbnQgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byBhbGwgcmVjaXBpZW50cyBvZiB0aGUgY292ZXJlZCB3b3JrIGFuZCB3b3JrcyBiYXNlZCBvbiBpdC4KKworQSBwYXRlbnQgbGljZW5zZSBpcyDigJxkaXNjcmltaW5hdG9yeeKAnSBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbiB0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcyBjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUgc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBZb3UgbWF5IG5vdCBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaWYgeW91IGFyZSBhIHBhcnR5IHRvIGFuIGFycmFuZ2VtZW50IHdpdGggYSB0aGlyZCBwYXJ0eSB0aGF0IGlzIGluIHRoZSBidXNpbmVzcyBvZiBkaXN0cmlidXRpbmcgc29mdHdhcmUsIHVuZGVyIHdoaWNoIHlvdSBtYWtlIHBheW1lbnQgdG8gdGhlIHRoaXJkIHBhcnR5IGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgeW91ciBhY3Rpdml0eSBvZiBjb252ZXlpbmcgdGhlIHdvcmssIGFuZCB1bmRlciB3aGljaCB0aGUgdGhpcmQgcGFydHkgZ3JhbnRzLCB0byBhbnkgb2YgdGhlIHBhcnRpZXMgd2hvIHdvdWxkIHJlY2VpdmUgdGhlIGNvdmVyZWQgd29yayBmcm9tIHlvdSwgYSBkaXNjcmltaW5hdG9yeSBwYXRlbnQgbGljZW5zZSAoYSkgaW4gY29ubmVjdGlvbiB3aXRoIGNvcGllcyBvZiB0aGUgY292ZXJlZCB3b3JrIGNvbnZleWVkIGJ5IHlvdSAob3IgY29waWVzIG1hZGUgZnJvbSB0aG9zZSBjb3BpZXMpLCBvciAoYikgcHJpbWFyaWx5IGZvciBhbmQgaW4gY29ubmVjdGlvbiB3aXRoIHNwZWNpZmljIHByb2R1Y3RzIG9yIGNvbXBpbGF0aW9ucyB0aGF0IGNvbnRhaW4gdGhlIGNvdmVyZWQgd29yaywgdW5sZXNzIHlvdSBlbnRlcmVkIGludG8gdGhhdCBhcnJhbmdlbWVudCwgb3IgdGhhdCBwYXRlbnQgbGljZW5zZSB3YXMgZ3JhbnRlZCwgcHJpb3IgdG8gMjggTWFyY2ggMjAwNy4KKworTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZyBhbnkgaW1wbGllZCBsaWNlbnNlIG9yIG90aGVyIGRlZmVuc2VzIHRvIGluZnJpbmdlbWVudCB0aGF0IG1heSBvdGhlcndpc2UgYmUgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhcHBsaWNhYmxlIHBhdGVudCBsYXcuCisxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KKworSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvciBvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBjYW5ub3QgY29udmV5IGEgY292ZXJlZCB3b3JrIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBjb252ZXkgaXQgYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgeW91IGFncmVlIHRvIHRlcm1zIHRoYXQgb2JsaWdhdGUgeW91IHRvIGNvbGxlY3QgYSByb3lhbHR5IGZvciBmdXJ0aGVyIGNvbnZleWluZyBmcm9tIHRob3NlIHRvIHdob20geW91IGNvbnZleSB0aGUgUHJvZ3JhbSwgdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggdGhvc2UgdGVybXMgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gY29udmV5aW5nIHRoZSBQcm9ncmFtLgorMTMuIFVzZSB3aXRoIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK05vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgeW91IGhhdmUgcGVybWlzc2lvbiB0byBsaW5rIG9yIGNvbWJpbmUgYW55IGNvdmVyZWQgd29yayB3aXRoIGEgd29yayBsaWNlbnNlZCB1bmRlciB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnRvIGEgc2luZ2xlIGNvbWJpbmVkIHdvcmssIGFuZCB0byBjb252ZXkgdGhlIHJlc3VsdGluZyB3b3JrLiBUaGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgdG8gYXBwbHkgdG8gdGhlIHBhcnQgd2hpY2ggaXMgdGhlIGNvdmVyZWQgd29yaywgYnV0IHRoZSBzcGVjaWFsIHJlcXVpcmVtZW50cyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBzZWN0aW9uIDEzLCBjb25jZXJuaW5nIGludGVyYWN0aW9uIHRocm91Z2ggYSBuZXR3b3JrIHdpbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIGFzIHN1Y2guCisxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuCisKK1RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug4oCcb3IgYW55IGxhdGVyIHZlcnNpb27igJ0gYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IG51bWJlcmVkIHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK0lmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MgcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdSB0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KKworTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgcGVybWlzc2lvbnMuIEhvd2V2ZXIsIG5vIGFkZGl0aW9uYWwgb2JsaWdhdGlvbnMgYXJlIGltcG9zZWQgb24gYW55IGF1dGhvciBvciBjb3B5cmlnaHQgaG9sZGVyIGFzIGEgcmVzdWx0IG9mIHlvdXIgY2hvb3NpbmcgdG8gZm9sbG93IGEgbGF0ZXIgdmVyc2lvbi4KKzE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgorCitUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0g4oCcQVMgSVPigJ0gV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKzE2LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KKworSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTU9ESUZJRVMgQU5EL09SIENPTlZFWVMgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKzE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCisKK0lmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZCBhYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywgcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzIGFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYSBjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCisKK0VORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKK0lmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QgcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdCBmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uIEl0IGlzIHNhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5IHN0YXRlIHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlIOKAnGNvcHlyaWdodOKAnSBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gZG9lcyB0ZXJtaW5hbCBpbnRlcmFjdGlvbiwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzIHdoZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICA8cHJvZ3JhbT4gIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisgICAgVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUgcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIE9mIGNvdXJzZSwgeW91ciBwcm9ncmFtJ3MgY29tbWFuZHMgbWlnaHQgYmUgZGlmZmVyZW50OyBmb3IgYSBHVUkgaW50ZXJmYWNlLCB5b3Ugd291bGQgdXNlIGFuIOKAnGFib3V0IGJveOKAnS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEg4oCcY29weXJpZ2h0IGRpc2NsYWltZXLigJ0gZm9yIHRoZSBwcm9ncmFtLCBpZiBuZWNlc3NhcnkuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsIGFuZCBob3cgdG8gYXBwbHkgYW5kIGZvbGxvdyB0aGUgR05VIEdQTCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlIGxpYnJhcnkuIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuIEJ1dCBmaXJzdCwgcGxlYXNlIHJlYWQgPGh0dHA6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5L3doeS1ub3QtbGdwbC5odG1sPi4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24gYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjOTY4YjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uCkBAIC0wLDAgKzEsMjcgQEAKKworaW5zZXJ0IEdQTCB2MyB0ZXh0IGhlcmUKKworR0NDIFJVTlRJTUUgTElCUkFSWSBFWENFUFRJT04KK1ZlcnNpb24gMy4xLCAzMSBNYXJjaCAyMDA5CisKK0dlbmVyYWwgaW5mb3JtYXRpb246CitodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ2NjLWV4Y2VwdGlvbi5odG1sCitDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCitUaGlzIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uICgiRXhjZXB0aW9uIikgaXMgYW4gYWRkaXRpb25hbCBwZXJtaXNzaW9uIHVuZGVyIHNlY3Rpb24gNyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMyAoIkdQTHYzIikuIEl0IGFwcGxpZXMgdG8gYSBnaXZlbiBmaWxlICh0aGUgIlJ1bnRpbWUgTGlicmFyeSIpIHRoYXQgYmVhcnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBmaWxlIHN0YXRpbmcgdGhhdCB0aGUgZmlsZSBpcyBnb3Zlcm5lZCBieSBHUEx2MyBhbG9uZyB3aXRoIHRoaXMgRXhjZXB0aW9uLgorV2hlbiB5b3UgdXNlIEdDQyB0byBjb21waWxlIGEgcHJvZ3JhbSwgR0NDIG1heSBjb21iaW5lIHBvcnRpb25zIG9mIGNlcnRhaW4gR0NDIGhlYWRlciBmaWxlcyBhbmQgcnVudGltZSBsaWJyYXJpZXMgd2l0aCB0aGUgY29tcGlsZWQgcHJvZ3JhbS4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBFeGNlcHRpb24gaXMgdG8gYWxsb3cgY29tcGlsYXRpb24gb2Ygbm9uLUdQTCAoaW5jbHVkaW5nIHByb3ByaWV0YXJ5KSBwcm9ncmFtcyB0byB1c2UsIGluIHRoaXMgd2F5LCB0aGUgaGVhZGVyIGZpbGVzIGFuZCBydW50aW1lIGxpYnJhcmllcyBjb3ZlcmVkIGJ5IHRoaXMgRXhjZXB0aW9uLgorCiswLiBEZWZpbml0aW9ucy4KK0EgZmlsZSBpcyBhbiAiSW5kZXBlbmRlbnQgTW9kdWxlIiBpZiBpdCBlaXRoZXIgcmVxdWlyZXMgdGhlIFJ1bnRpbWUgTGlicmFyeSBmb3IgZXhlY3V0aW9uIGFmdGVyIGEgQ29tcGlsYXRpb24gUHJvY2Vzcywgb3IgbWFrZXMgdXNlIG9mIGFuIGludGVyZmFjZSBwcm92aWRlZCBieSB0aGUgUnVudGltZSBMaWJyYXJ5LCBidXQgaXMgbm90IG90aGVyd2lzZSBiYXNlZCBvbiB0aGUgUnVudGltZSBMaWJyYXJ5LgorIkdDQyIgbWVhbnMgYSB2ZXJzaW9uIG9mIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGdvdmVybmVkIGJ5IHZlcnNpb24gMyAob3IgYSBzcGVjaWZpZWQgbGF0ZXIgdmVyc2lvbikgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHdpdGggdGhlIG9wdGlvbiBvZiB1c2luZyBhbnkgc3Vic2VxdWVudCB2ZXJzaW9ucyBwdWJsaXNoZWQgYnkgdGhlIEZTRi4KKyJHUEwtY29tcGF0aWJsZSBTb2Z0d2FyZSIgaXMgc29mdHdhcmUgd2hvc2UgY29uZGl0aW9ucyBvZiBwcm9wYWdhdGlvbiwgbW9kaWZpY2F0aW9uIGFuZCB1c2Ugd291bGQgcGVybWl0IGNvbWJpbmF0aW9uIHdpdGggR0NDIGluIGFjY29yZCB3aXRoIHRoZSBsaWNlbnNlIG9mIEdDQy4KKyJUYXJnZXQgQ29kZSIgcmVmZXJzIHRvIG91dHB1dCBmcm9tIGFueSBjb21waWxlciBmb3IgYSByZWFsIG9yIHZpcnR1YWwgdGFyZ2V0IHByb2Nlc3NvciBhcmNoaXRlY3R1cmUsIGluIGV4ZWN1dGFibGUgZm9ybSBvciBzdWl0YWJsZSBmb3IgaW5wdXQgdG8gYW4gYXNzZW1ibGVyLCBsb2FkZXIsIGxpbmtlciBhbmQvb3IgZXhlY3V0aW9uIHBoYXNlLiBOb3R3aXRoc3RhbmRpbmcgdGhhdCwgVGFyZ2V0IENvZGUgZG9lcyBub3QgaW5jbHVkZSBkYXRhIGluIGFueSBmb3JtYXQgdGhhdCBpcyB1c2VkIGFzIGEgY29tcGlsZXIgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLCBvciB1c2VkIGZvciBwcm9kdWNpbmcgYSBjb21waWxlciBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24uCitUaGUgIkNvbXBpbGF0aW9uIFByb2Nlc3MiIHRyYW5zZm9ybXMgY29kZSBlbnRpcmVseSByZXByZXNlbnRlZCBpbiBub24taW50ZXJtZWRpYXRlIGxhbmd1YWdlcyBkZXNpZ25lZCBmb3IgaHVtYW4td3JpdHRlbiBjb2RlLCBhbmQvb3IgaW4gSmF2YSBWaXJ0dWFsIE1hY2hpbmUgYnl0ZSBjb2RlLCBpbnRvIFRhcmdldCBDb2RlLiBUaHVzLCBmb3IgZXhhbXBsZSwgdXNlIG9mIHNvdXJjZSBjb2RlIGdlbmVyYXRvcnMgYW5kIHByZXByb2Nlc3NvcnMgbmVlZCBub3QgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBDb21waWxhdGlvbiBQcm9jZXNzLCBzaW5jZSB0aGUgQ29tcGlsYXRpb24gUHJvY2VzcyBjYW4gYmUgdW5kZXJzdG9vZCBhcyBzdGFydGluZyB3aXRoIHRoZSBvdXRwdXQgb2YgdGhlIGdlbmVyYXRvcnMgb3IgcHJlcHJvY2Vzc29ycy4KK0EgQ29tcGlsYXRpb24gUHJvY2VzcyBpcyAiRWxpZ2libGUiIGlmIGl0IGlzIGRvbmUgdXNpbmcgR0NDLCBhbG9uZSBvciB3aXRoIG90aGVyIEdQTC1jb21wYXRpYmxlIHNvZnR3YXJlLCBvciBpZiBpdCBpcyBkb25lIHdpdGhvdXQgdXNpbmcgYW55IHdvcmsgYmFzZWQgb24gR0NDLiBGb3IgZXhhbXBsZSwgdXNpbmcgbm9uLUdQTC1jb21wYXRpYmxlIFNvZnR3YXJlIHRvIG9wdGltaXplIGFueSBHQ0MgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9ucyB3b3VsZCBub3QgcXVhbGlmeSBhcyBhbiBFbGlnaWJsZSBDb21waWxhdGlvbiBQcm9jZXNzLgorCisxLiBHcmFudCBvZiBBZGRpdGlvbmFsIFBlcm1pc3Npb24uCitZb3UgaGF2ZSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBhIHdvcmsgb2YgVGFyZ2V0IENvZGUgZm9ybWVkIGJ5IGNvbWJpbmluZyB0aGUgUnVudGltZSBMaWJyYXJ5IHdpdGggSW5kZXBlbmRlbnQgTW9kdWxlcywgZXZlbiBpZiBzdWNoIHByb3BhZ2F0aW9uIHdvdWxkIG90aGVyd2lzZSB2aW9sYXRlIHRoZSB0ZXJtcyBvZiBHUEx2MywgcHJvdmlkZWQgdGhhdCBhbGwgVGFyZ2V0IENvZGUgd2FzIGdlbmVyYXRlZCBieSBFbGlnaWJsZSBDb21waWxhdGlvbiBQcm9jZXNzZXMuIFlvdSBtYXkgdGhlbiBjb252ZXkgc3VjaCBhIGNvbWJpbmF0aW9uIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBjb25zaXN0ZW50IHdpdGggdGhlIGxpY2Vuc2luZyBvZiB0aGUgSW5kZXBlbmRlbnQgTW9kdWxlcy4KKworMi4gTm8gV2Vha2VuaW5nIG9mIEdDQyBDb3B5bGVmdC4KK1RoZSBhdmFpbGFiaWxpdHkgb2YgdGhpcyBFeGNlcHRpb24gZG9lcyBub3QgaW1wbHkgYW55IGdlbmVyYWwgcHJlc3VtcHRpb24gdGhhdCB0aGlyZC1wYXJ0eSBzb2Z0d2FyZSBpcyB1bmFmZmVjdGVkIGJ5IHRoZSBjb3B5bGVmdCByZXF1aXJlbWVudHMgb2YgdGhlIGxpY2Vuc2Ugb2YgR0NDLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24gYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg2ZjBkNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTMuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbgpAQCAtMCwwICsxLDI4IEBACisKK2luc2VydCBHUEwgdjMgdGV4dCBoZXJlCisKK0FVVE9DT05GIENPTkZJR1VSRSBTQ1JJUFQgRVhDRVBUSU9OCisKK1ZlcnNpb24gMy4wLCAxOCBBdWd1c3QgMjAwOQorCitDb3B5cmlnaHQgJiMxNjk7IDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworVGhpcyBFeGNlcHRpb24gaXMgYW4gYWRkaXRpb25hbCBwZXJtaXNzaW9uIHVuZGVyIHNlY3Rpb24gNyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMyAoIkdQTHYzIikuIEl0IGFwcGxpZXMgdG8gYSBnaXZlbiBmaWxlIHRoYXQgYmVhcnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBmaWxlIHN0YXRpbmcgdGhhdCB0aGUgZmlsZSBpcyBnb3Zlcm5lZCBieSBHUEx2MyBhbG9uZyB3aXRoIHRoaXMgRXhjZXB0aW9uLgorCitUaGUgcHVycG9zZSBvZiB0aGlzIEV4Y2VwdGlvbiBpcyB0byBhbGxvdyBkaXN0cmlidXRpb24gb2YgQXV0b2NvbmZgcyB0eXBpY2FsIG91dHB1dCB1bmRlciB0ZXJtcyBvZiB0aGUgcmVjaXBpZW50YHMgY2hvaWNlIChpbmNsdWRpbmcgcHJvcHJpZXRhcnkpLgorCiswLiBEZWZpbml0aW9ucy4KKyJDb3ZlcmVkIENvZGUiIGlzIHRoZSBzb3VyY2Ugb3Igb2JqZWN0IGNvZGUgb2YgYSB2ZXJzaW9uIG9mIEF1dG9jb25mIHRoYXQgaXMgYSBjb3ZlcmVkIHdvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisiTm9ybWFsbHkgQ29waWVkIENvZGUiIGZvciBhIHZlcnNpb24gb2YgQXV0b2NvbmYgbWVhbnMgYWxsIHBhcnRzIG9mIGl0cyBDb3ZlcmVkIENvZGUgd2hpY2ggdGhhdCB2ZXJzaW9uIGNhbiBjb3B5IGZyb20gaXRzIGNvZGUgKGkuZS4sIG5vdCBmcm9tIGl0cyBpbnB1dCBmaWxlKSBpbnRvIGl0cyBtaW5pbWFsbHkgdmVyYm9zZSwgbm9uLWRlYnVnZ2luZyBhbmQgbm9uLXRyYWNpbmcgb3V0cHV0LgorCisiSW5lbGlnaWJsZSBDb2RlIiBpcyBDb3ZlcmVkIENvZGUgdGhhdCBpcyBub3QgTm9ybWFsbHkgQ29waWVkIENvZGUuCisKKzEuIEdyYW50IG9mIEFkZGl0aW9uYWwgUGVybWlzc2lvbi4KK1lvdSBoYXZlIHBlcm1pc3Npb24gdG8gcHJvcGFnYXRlIG91dHB1dCBvZiBBdXRvY29uZiwgZXZlbiBpZiBzdWNoIHByb3BhZ2F0aW9uIHdvdWxkIG90aGVyd2lzZSB2aW9sYXRlIHRoZSB0ZXJtcyBvZiBHUEx2My4gSG93ZXZlciwgaWYgYnkgbW9kaWZ5aW5nIEF1dG9jb25mIHlvdSBjYXVzZSBhbnkgSW5lbGlnaWJsZSBDb2RlIG9mIHRoZSB2ZXJzaW9uIHlvdSByZWNlaXZlZCB0byBiZWNvbWUgTm9ybWFsbHkgQ29waWVkIENvZGUgb2YgeW91ciBtb2RpZmllZCB2ZXJzaW9uLCB0aGVuIHlvdSB2b2lkIHRoaXMgRXhjZXB0aW9uIGZvciB0aGUgcmVzdWx0aW5nIGNvdmVyZWQgd29yay4gSWYgeW91IGNvbnZleSB0aGF0IHJlc3VsdGluZyBjb3ZlcmVkIHdvcmssIHlvdSBtdXN0IHJlbW92ZSB0aGlzIEV4Y2VwdGlvbiBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHNlY29uZCBwYXJhZ3JhcGggb2YgU2VjdGlvbiA3IG9mIEdQTHYzLgorCisyLiBObyBXZWFrZW5pbmcgb2YgQXV0b2NvbmYgQ29weWxlZnQuCitUaGUgYXZhaWxhYmlsaXR5IG9mIHRoaXMgRXhjZXB0aW9uIGRvZXMgbm90IGltcGx5IGFueSBnZW5lcmFsIHByZXN1bXB0aW9uIHRoYXQgdGhpcmQtcGFydHkgc29mdHdhcmUgaXMgdW5hZmZlY3RlZCBieSB0aGUgY29weWxlZnQgcmVxdWlyZW1lbnRzIG9mIHRoZSBsaWNlbnNlIG9mIEF1dG9jb25mLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0hQTkQgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0hQTkQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc0YmJkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSFBORApAQCAtMCwwICsxLDExIEBACisKK0hpc3RvcmljYWwgUGVybWlzc2lvbiBOb3RpY2UgYW5kIERpc2NsYWltZXIKKworPGNvcHlyaWdodCBub3RpY2U+CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllc1ssXSBbYW5kXSB0aGF0IGJvdGggW3RoYXRdIFt0aGVdIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvblssIGFuZCB0aGF0IHRoZSBuYW1lIFtvZl0gPGNvcHlyaWdodCBob2xkZXI+IFtvciA8cmVsYXRlZCBlbnRpdGllcz5dIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uXS4gWzxjb3B5cmlnaHQgaG9sZGVyPiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5Ll0KKworWzxjb3B5cmlnaHQgaG9sZGVyPiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTWyxdWy5dIElOIE5PIEVWRU5UIFNIQUxMIDxjb3B5cmlnaHQgaG9sZGVyPiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXQorCistLS0KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JQ1UgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lDVQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjliNmZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JQ1UKQEAgLTAsMCArMSwxMyBAQAorQ09QWVJJR0hUIEFORCBQRVJNSVNTSU9OIE5PVElDRQorCitDb3B5cmlnaHQgKGMpIDE5OTUtMjAxMiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMKKworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgYW5kIHRoYXQgYm90aCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIEhPTERFUlMgSU5DTFVERUQgSU4gVEhJUyBOT1RJQ0UgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIGEgY29weXJpZ2h0IGhvbGRlciBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gb2YgdGhlIGNvcHlyaWdodCBob2xkZXIuCisKK0FsbCB0cmFkZW1hcmtzIGFuZCByZWdpc3RlcmVkIHRyYWRlbWFya3MgbWVudGlvbmVkIGhlcmVpbiBhcmUgdGhlIHByb3BlcnR5IG9mIHRoZWlyIHJlc3BlY3RpdmUgb3duZXJzLiAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVBBIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JUEEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2NWIxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVBBCkBAIC0wLDAgKzEsOTUgQEAKKworSVBBIEZvbnQgTGljZW5zZSBBZ3JlZW1lbnQgdjEuMCAKKyAKKworVGhlIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBMaWNlbnNlZCBQcm9ncmFtIChhcyBkZWZpbmVkIGluIEFydGljbGUgMSBiZWxvdykgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQgKCJBZ3JlZW1lbnQiKS4gIEFueSB1c2UsIHJlcHJvZHVjdGlvbiBvciBkaXN0cmlidXRpb24gb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0sIG9yIGFueSBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYnkgYSBSZWNpcGllbnQgKGFzIGRlZmluZWQgaW4gQXJ0aWNsZSAxIGJlbG93KSBjb25zdGl0dXRlcyB0aGUgUmVjaXBpZW50YHMgYWNjZXB0YW5jZSBvZiB0aGlzIEFncmVlbWVudC4KKworCitBcnRpY2xlIDEgKERlZmluaXRpb25zKQorCisxLiAgICAgICAgICJEaWdpdGFsIEZvbnQgUHJvZ3JhbSIgc2hhbGwgbWVhbiBhIGNvbXB1dGVyIHByb2dyYW0gY29udGFpbmluZywgb3IgdXNlZCB0byByZW5kZXIgb3IgZGlzcGxheSBmb250cy4KKworMi4gICAgICAgICAiTGljZW5zZWQgUHJvZ3JhbSIgc2hhbGwgbWVhbiBhIERpZ2l0YWwgRm9udCBQcm9ncmFtIGxpY2Vuc2VkIGJ5IHRoZSBMaWNlbnNvciB1bmRlciB0aGlzIEFncmVlbWVudC4KKworMy4gICAgICAgICAiRGVyaXZlZCBQcm9ncmFtIiBzaGFsbCBtZWFuIGEgRGlnaXRhbCBGb250IFByb2dyYW0gY3JlYXRlZCBhcyBhIHJlc3VsdCBvZiBhIG1vZGlmaWNhdGlvbiwgYWRkaXRpb24sIGRlbGV0aW9uLCByZXBsYWNlbWVudCBvciBhbnkgb3RoZXIgYWRhcHRhdGlvbiB0byBvciBvZiBhIHBhcnQgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtLCBhbmQgaW5jbHVkZXMgYSBjYXNlIHdoZXJlIGEgRGlnaXRhbCBGb250IFByb2dyYW0gbmV3bHkgY3JlYXRlZCBieSByZXRyaWV2aW5nIGZvbnQgaW5mb3JtYXRpb24gZnJvbSBhIHBhcnQgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtIG9yIEVtYmVkZGVkIEZvbnRzIGZyb20gYSBEaWdpdGFsIERvY3VtZW50IEZpbGUgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiBvZiB0aGUgcmV0cmlldmVkIGZvbnQgaW5mb3JtYXRpb24uIAorCis0LiAgICAgICAgICJEaWdpdGFsIENvbnRlbnQiIHNoYWxsIG1lYW4gcHJvZHVjdHMgcHJvdmlkZWQgdG8gZW5kIHVzZXJzIGluIHRoZSBmb3JtIG9mIGRpZ2l0YWwgZGF0YSwgaW5jbHVkaW5nIHZpZGVvIGNvbnRlbnQsIG1vdGlvbiBhbmQvb3Igc3RpbGwgcGljdHVyZXMsIFRWIHByb2dyYW1zIG9yIG90aGVyIGJyb2FkY2FzdGluZyBjb250ZW50IGFuZCBwcm9kdWN0cyBjb25zaXN0aW5nIG9mIGNoYXJhY3RlciB0ZXh0LCBwaWN0dXJlcywgcGhvdG9ncmFwaGljIGltYWdlcywgZ3JhcGhpYyBzeW1ib2xzIGFuZC9vciB0aGUgbGlrZS4KKworNS4gICAgICAgICAiRGlnaXRhbCBEb2N1bWVudCBGaWxlIiBzaGFsbCBtZWFuIGEgUERGIGZpbGUgb3Igb3RoZXIgRGlnaXRhbCBDb250ZW50IGNyZWF0ZWQgYnkgdmFyaW91cyBzb2Z0d2FyZSBwcm9ncmFtcyBpbiB3aGljaCBhIHBhcnQgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGJlY29tZXMgZW1iZWRkZWQgb3IgY29udGFpbmVkIGluIHRoZSBmaWxlIGZvciB0aGUgZGlzcGxheSBvZiB0aGUgZm9udCAoIkVtYmVkZGVkIEZvbnRzIikuICBFbWJlZGRlZCBGb250cyBhcmUgdXNlZCBvbmx5IGluIHRoZSBkaXNwbGF5IG9mIGNoYXJhY3RlcnMgaW4gdGhlIHBhcnRpY3VsYXIgRGlnaXRhbCBEb2N1bWVudCBGaWxlIHdpdGhpbiB3aGljaCB0aGV5IGFyZSBlbWJlZGRlZCwgYW5kIHNoYWxsIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSB0aG9zZSBpbiBhbnkgRGlnaXRhbCBGb250IFByb2dyYW0sIHdoaWNoIG1heSBiZSB1c2VkIGZvciBkaXNwbGF5IG9mIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGF0IHBhcnRpY3VsYXIgRGlnaXRhbCBEb2N1bWVudCBGaWxlLgorCis2LiAgICAgICAgICJDb21wdXRlciIgc2hhbGwgaW5jbHVkZSBhIHNlcnZlciBpbiB0aGlzIEFncmVlbWVudC4KKworNy4gICAgICAgICAiUmVwcm9kdWN0aW9uIGFuZCBPdGhlciBFeHBsb2l0YXRpb24iIHNoYWxsIG1lYW4gcmVwcm9kdWN0aW9uLCB0cmFuc2ZlciwgZGlzdHJpYnV0aW9uLCBsZWFzZSwgcHVibGljIHRyYW5zbWlzc2lvbiwgcHJlc2VudGF0aW9uLCBleGhpYml0aW9uLCBhZGFwdGF0aW9uIGFuZCBhbnkgb3RoZXIgZXhwbG9pdGF0aW9uLgorCis4LiAgICAgICAgICJSZWNpcGllbnQiIHNoYWxsIG1lYW4gYW55b25lIHdobyByZWNlaXZlcyB0aGUgTGljZW5zZWQgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIG9uZSB0aGF0IHJlY2VpdmVzIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGZyb20gYSBSZWNpcGllbnQuCisKKyAKKworQXJ0aWNsZSAyIChHcmFudCBvZiBMaWNlbnNlKQorCitUaGUgTGljZW5zb3IgZ3JhbnRzIHRvIHRoZSBSZWNpcGllbnQgYSBsaWNlbnNlIHRvIHVzZSB0aGUgTGljZW5zZWQgUHJvZ3JhbSBpbiBhbnkgYW5kIGFsbCBjb3VudHJpZXMgaW4gYWNjb3JkYW5jZSB3aXRoIGVhY2ggb2YgdGhlIHByb3Zpc2lvbnMgc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LiBIb3dldmVyLCBhbnkgYW5kIGFsbCByaWdodHMgdW5kZXJseWluZyBpbiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBzaGFsbCBiZSBoZWxkIGJ5IHRoZSBMaWNlbnNvci4gSW4gbm8gc2Vuc2UgaXMgdGhpcyBBZ3JlZW1lbnQgaW50ZW5kZWQgdG8gdHJhbnNmZXIgYW55IHJpZ2h0IHJlbGF0aW5nIHRvIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGhlbGQgYnkgdGhlIExpY2Vuc29yIGV4Y2VwdCBhcyBzcGVjaWZpY2FsbHkgc2V0IGZvcnRoIGhlcmVpbiBvciBhbnkgcmlnaHQgcmVsYXRpbmcgdG8gYW55IHRyYWRlbWFyaywgdHJhZGUgbmFtZSwgb3Igc2VydmljZSBtYXJrIHRvIHRoZSBSZWNpcGllbnQuCisKKyAKKworMS4gICAgICAgICBUaGUgUmVjaXBpZW50IG1heSBpbnN0YWxsIHRoZSBMaWNlbnNlZCBQcm9ncmFtIG9uIGFueSBudW1iZXIgb2YgQ29tcHV0ZXJzIGFuZCB1c2UgdGhlIHNhbWUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBwcm92aXNpb25zIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KKworMi4gICAgICAgICBUaGUgUmVjaXBpZW50IG1heSB1c2UgdGhlIExpY2Vuc2VkIFByb2dyYW0sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24gaW4gcHJpbnRlZCBtYXRlcmlhbHMgb3IgaW4gRGlnaXRhbCBDb250ZW50IGFzIGFuIGV4cHJlc3Npb24gb2YgY2hhcmFjdGVyIHRleHRzIG9yIHRoZSBsaWtlLgorCiszLiAgICAgICAgIFRoZSBSZWNpcGllbnQgbWF5IGNvbmR1Y3QgUmVwcm9kdWN0aW9uIGFuZCBPdGhlciBFeHBsb2l0YXRpb24gb2YgdGhlIHByaW50ZWQgbWF0ZXJpYWxzIGFuZCBEaWdpdGFsIENvbnRlbnQgY3JlYXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHByZWNlZGluZyBQYXJhZ3JhcGgsIGZvciBjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGFuZCBpbiBhbnkgZm9ybSBvZiBtZWRpYSBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGJyb2FkY2FzdGluZywgY29tbXVuaWNhdGlvbiBhbmQgdmFyaW91cyByZWNvcmRpbmcgbWVkaWEuCisKKzQuICAgICAgICAgSWYgYW55IFJlY2lwaWVudCBleHRyYWN0cyBFbWJlZGRlZCBGb250cyBmcm9tIGEgRGlnaXRhbCBEb2N1bWVudCBGaWxlIHRvIGNyZWF0ZSBhIERlcml2ZWQgUHJvZ3JhbSwgc3VjaCBEZXJpdmVkIFByb2dyYW0gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBhZ3JlZW1lbnQuICAKKworNS4gICAgICAgICBJZiBhbnkgUmVjaXBpZW50IHBlcmZvcm1zIFJlcHJvZHVjdGlvbiBvciBPdGhlciBFeHBsb2l0YXRpb24gb2YgYSBEaWdpdGFsIERvY3VtZW50IEZpbGUgaW4gd2hpY2ggRW1iZWRkZWQgRm9udHMgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gYXJlIHVzZWQgb25seSBmb3IgcmVuZGVyaW5nIHRoZSBEaWdpdGFsIENvbnRlbnQgd2l0aGluIHN1Y2ggRGlnaXRhbCBEb2N1bWVudCBGaWxlIHRoZW4gc3VjaCBSZWNpcGllbnQgc2hhbGwgaGF2ZSBubyBmdXJ0aGVyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGluIHJlbGF0aW9uIHRvIHN1Y2ggYWN0aW9ucy4KKworNi4gICAgICAgICBUaGUgUmVjaXBpZW50IG1heSByZXByb2R1Y2UgdGhlIExpY2Vuc2VkIFByb2dyYW0gYXMgaXMgd2l0aG91dCBtb2RpZmljYXRpb24gYW5kIHRyYW5zZmVyIHN1Y2ggY29waWVzLCBwdWJsaWNseSB0cmFuc21pdCBvciBvdGhlcndpc2UgcmVkaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBQcm9ncmFtIHRvIGEgdGhpcmQgcGFydHkgZm9yIGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgKCJSZWRpc3RyaWJ1dGUiKSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBwcm92aXNpb25zIHNldCBmb3J0aCBpbiBBcnRpY2xlIDMgUGFyYWdyYXBoIDIuCisKKzcuICAgICAgICAgVGhlIFJlY2lwaWVudCBtYXkgY3JlYXRlLCB1c2UsIHJlcHJvZHVjZSBhbmQvb3IgUmVkaXN0cmlidXRlIGEgRGVyaXZlZCBQcm9ncmFtIHVuZGVyIHRoZSB0ZXJtcyBzdGF0ZWQgYWJvdmUgZm9yIHRoZSBMaWNlbnNlZCBQcm9ncmFtOiBwcm92aWRlZCwgdGhhdCB0aGUgUmVjaXBpZW50IHNoYWxsIGZvbGxvdyB0aGUgcHJvdmlzaW9ucyBzZXQgZm9ydGggaW4gQXJ0aWNsZSAzIFBhcmFncmFwaCAxIHdoZW4gUmVkaXN0cmlidXRpbmcgdGhlIERlcml2ZWQgUHJvZ3JhbS4gCisKKworQXJ0aWNsZSAzIChSZXN0cmljdGlvbikKKworVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiB0aGUgcHJlY2VkaW5nIEFydGljbGUgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworCisxLiAgICAgICAgIElmIGEgRGVyaXZlZCBQcm9ncmFtIGlzIFJlZGlzdHJpYnV0ZWQgcHVyc3VhbnQgdG8gUGFyYWdyYXBoIDQgYW5kIDcgb2YgdGhlIHByZWNlZGluZyBBcnRpY2xlLCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdCBiZSBtZXQgOgorCisoMSkgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBtdXN0IGJlIGFsc28gUmVkaXN0cmlidXRlZCB0b2dldGhlciB3aXRoIHRoZSBEZXJpdmVkIFByb2dyYW0sIG9yIGJlIG1hZGUgYXZhaWxhYmxlIG9ubGluZSBvciBieSBtZWFucyBvZiBtYWlsaW5nIG1lY2hhbmlzbXMgaW4gZXhjaGFuZ2UgZm9yIGEgY29zdCB3aGljaCBkb2VzIG5vdCBleGNlZWQgdGhlIHRvdGFsIGNvc3RzIG9mIHBvc3RhZ2UsIHN0b3JhZ2UgbWVkaXVtIGFuZCBoYW5kbGluZyBmZWVzOgorCisoYSkgICAgYSBjb3B5IG9mIHRoZSBEZXJpdmVkIFByb2dyYW07IGFuZAorCisoYikgICAgYW55IGFkZGl0aW9uYWwgZmlsZSBjcmVhdGVkIGJ5IHRoZSBmb250IGRldmVsb3BpbmcgcHJvZ3JhbSBpbiB0aGUgY291cnNlIG9mIGNyZWF0aW5nIHRoZSBEZXJpdmVkIFByb2dyYW0gdGhhdCBjYW4gYmUgdXNlZCBmb3IgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlIERlcml2ZWQgUHJvZ3JhbSwgaWYgYW55LgorCisoMikgICAgICAgICAgICAgICAgSXQgaXMgcmVxdWlyZWQgdG8gYWxzbyBSZWRpc3RyaWJ1dGUgbWVhbnMgdG8gZW5hYmxlIHJlY2lwaWVudHMgb2YgdGhlIERlcml2ZWQgUHJvZ3JhbSB0byByZXBsYWNlIHRoZSBEZXJpdmVkIFByb2dyYW0gd2l0aCB0aGUgTGljZW5zZWQgUHJvZ3JhbSBmaXJzdCByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UgKHRoZSAiT3JpZ2luYWwgUHJvZ3JhbSIpLiAgU3VjaCBtZWFucyBtYXkgYmUgdG8gcHJvdmlkZSBhIGRpZmZlcmVuY2UgZmlsZSBmcm9tIHRoZSBPcmlnaW5hbCBQcm9ncmFtLCBvciBpbnN0cnVjdGlvbnMgc2V0dGluZyBvdXQgYSBtZXRob2QgdG8gcmVwbGFjZSB0aGUgRGVyaXZlZCBQcm9ncmFtIHdpdGggdGhlIE9yaWdpbmFsIFByb2dyYW0uCisKKygzKSAgICAgICAgICAgICAgICBUaGUgUmVjaXBpZW50IG11c3QgbGljZW5zZSB0aGUgRGVyaXZlZCBQcm9ncmFtIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudC4KKworKDQpICAgICAgICAgICAgICAgIE5vIG9uZSBtYXkgdXNlIG9yIGluY2x1ZGUgdGhlIG5hbWUgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gYXMgYSBwcm9ncmFtIG5hbWUsIGZvbnQgbmFtZSBvciBmaWxlIG5hbWUgb2YgdGhlIERlcml2ZWQgUHJvZ3JhbS4KKworKDUpICAgICAgICAgICAgICAgIEFueSBtYXRlcmlhbCB0byBiZSBtYWRlIGF2YWlsYWJsZSBvbmxpbmUgb3IgYnkgbWVhbnMgb2YgbWFpbGluZyBhIG1lZGl1bSB0byBzYXRpc2Z5IHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBwYXJhZ3JhcGggbWF5IGJlIHByb3ZpZGVkLCB2ZXJiYXRpbSwgYnkgYW55IHBhcnR5IHdpc2hpbmcgdG8gZG8gc28uCisKKzIuICAgICAgICAgSWYgdGhlIFJlY2lwaWVudCBSZWRpc3RyaWJ1dGVzIHRoZSBMaWNlbnNlZCBQcm9ncmFtIHB1cnN1YW50IHRvIFBhcmFncmFwaCA2IG9mIHRoZSBwcmVjZWRpbmcgQXJ0aWNsZSwgdGhlIFJlY2lwaWVudCBzaGFsbCBtZWV0IGFsbCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKygxKSAgICAgICAgICAgICAgICBUaGUgUmVjaXBpZW50IG1heSBub3QgY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtLgorCisoMikgICAgICAgICAgICAgICAgVGhlIFJlY2lwaWVudCBtYXkgbm90IGFsdGVyIG9yIG90aGVyd2lzZSBtb2RpZnkgdGhlIExpY2Vuc2VkIFByb2dyYW0uCisKKygzKSAgICAgICAgICAgICAgICBUaGUgUmVjaXBpZW50IG11c3QgYXR0YWNoIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCB0byB0aGUgTGljZW5zZWQgUHJvZ3JhbS4KKworMy4gICAgICAgICBUSElTIExJQ0VOU0VEIFBST0dSQU0gSVMgUFJPVklERUQgQlkgVEhFIExJQ0VOU09SICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5UWSBBUyBUTyBUSEUgTElDRU5TRUQgUFJPR1JBTSBPUiBBTlkgREVSSVZFRCBQUk9HUkFNLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgV0FSUkFOVElFUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgTElDRU5TT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhURU5ERUQsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURUQgR09PRFMgT1IgU0VSVklDRTsgREFNQUdFUyBBUklTSU5HIEZST00gU1lTVEVNIEZBSUxVUkU7IExPU1MgT1IgQ09SUlVQVElPTiBPRiBFWElTVElORyBEQVRBIE9SIFBST0dSQU07IExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIElOU1RBTExBVElPTiwgVVNFLCBUSEUgUkVQUk9EVUNUSU9OIE9SIE9USEVSIEVYUExPSVRBVElPTiBPRiBUSEUgTElDRU5TRUQgUFJPR1JBTSBPUiBBTlkgREVSSVZFRCBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNC4gICAgICAgICBUaGUgTGljZW5zb3IgaXMgdW5kZXIgbm8gb2JsaWdhdGlvbiB0byByZXNwb25kIHRvIGFueSB0ZWNobmljYWwgcXVlc3Rpb25zIG9yIGlucXVpcmllcywgb3IgcHJvdmlkZSBhbnkgb3RoZXIgdXNlciBzdXBwb3J0IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgaW5zdGFsbGF0aW9uLCB1c2Ugb3IgdGhlIFJlcHJvZHVjdGlvbiBhbmQgT3RoZXIgRXhwbG9pdGF0aW9uIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtIG9yIERlcml2ZWQgUHJvZ3JhbXMgdGhlcmVvZi4KKworCitBcnRpY2xlIDQgKFRlcm1pbmF0aW9uIG9mIEFncmVlbWVudCkKKworMS4gICAgICAgICBUaGUgdGVybSBvZiB0aGlzIEFncmVlbWVudCBzaGFsbCBiZWdpbiBmcm9tIHRoZSB0aW1lIG9mIHJlY2VpcHQgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gYnkgdGhlIFJlY2lwaWVudCBhbmQgc2hhbGwgY29udGludWUgYXMgbG9uZyBhcyB0aGUgUmVjaXBpZW50IHJldGFpbnMgYW55IHN1Y2ggTGljZW5zZWQgUHJvZ3JhbSBpbiBhbnkgd2F5LgorCisyLiAgICAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgcHJvdmlzaW9uIHNldCBmb3J0aCBpbiB0aGUgcHJlY2VkaW5nIFBhcmFncmFwaCwgaW4gdGhlIGV2ZW50IG9mIHRoZSBicmVhY2ggb2YgYW55IG9mIHRoZSBwcm92aXNpb25zIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudCBieSB0aGUgUmVjaXBpZW50LCB0aGlzIEFncmVlbWVudCBzaGFsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB3aXRob3V0IGFueSBub3RpY2UuIEluIHRoZSBjYXNlIG9mIHN1Y2ggdGVybWluYXRpb24sIHRoZSBSZWNpcGllbnQgbWF5IG5vdCB1c2Ugb3IgY29uZHVjdCBSZXByb2R1Y3Rpb24gYW5kIE90aGVyIEV4cGxvaXRhdGlvbiBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBvciBhIERlcml2ZWQgUHJvZ3JhbTogcHJvdmlkZWQgdGhhdCBzdWNoIHRlcm1pbmF0aW9uIHNoYWxsIG5vdCBhZmZlY3QgYW55IHJpZ2h0cyBvZiBhbnkgb3RoZXIgUmVjaXBpZW50IHJlY2VpdmluZyB0aGUgTGljZW5zZWQgUHJvZ3JhbSBvciB0aGUgRGVyaXZlZCBQcm9ncmFtIGZyb20gc3VjaCBSZWNpcGllbnQgd2hvIGJyZWFjaGVkIHRoaXMgQWdyZWVtZW50LgorCisKK0FydGljbGUgNSAoR292ZXJuaW5nIExhdykKKworMS4gICAgICAgICBJUEEgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4gIEluIHN1Y2ggYW4gZXZlbnQsIHRoZSBSZWNpcGllbnQgbWF5IHNlbGVjdCBlaXRoZXIgdGhpcyBBZ3JlZW1lbnQgb3IgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IGluIHVzaW5nLCBjb25kdWN0aW5nIHRoZSBSZXByb2R1Y3Rpb24gYW5kIE90aGVyIEV4cGxvaXRhdGlvbiBvZiwgb3IgUmVkaXN0cmlidXRpbmcgdGhlIExpY2Vuc2VkIFByb2dyYW0gb3IgYSBEZXJpdmVkIFByb2dyYW0uIE90aGVyIG1hdHRlcnMgbm90IHNwZWNpZmllZCBhYm92ZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBDb3B5cmlnaHQgTGF3IG9mIEphcGFuIGFuZCBvdGhlciByZWxhdGVkIGxhd3MgYW5kIHJlZ3VsYXRpb25zIG9mIEphcGFuLgorCisyLiAgICAgICAgIFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZCB1bmRlciB0aGUgbGF3cyBvZiBKYXBhbi4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JUEwtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMTM2YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lQTC0xLjAKQEAgLTAsMCArMSwyMTMgQEAKKworSUJNIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisKK1RIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBJQk0KK1BVQkxJQyBMSUNFTlNFICgiQUdSRUVNRU5UIikuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04KK09GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVGBTIEFDQ0VQVEFOQ0UgT0YgVEhJUyBBR1JFRU1FTlQuCisKKzEuIERFRklOSVRJT05TCisiQ29udHJpYnV0aW9uIiBtZWFuczoKKworaW4gdGhlIGNhc2Ugb2YgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiAoIklCTSIpLCB0aGUgT3JpZ2luYWwgUHJvZ3JhbSwgYW5kCitpbiB0aGUgY2FzZSBvZiBlYWNoIENvbnRyaWJ1dG9yLAorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07Cit3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQKK2FyZSBkaXN0cmlidXRlZCBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uCitgb3JpZ2luYXRlc2AgZnJvbSBhIENvbnRyaWJ1dG9yIGlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieQorc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yYHMKK2JlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gd2hpY2g6CisoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aAordGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90CitkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBQcm9ncmFtLgorCisiQ29udHJpYnV0b3IiIG1lYW5zIElCTSBhbmQgYW55IG90aGVyIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLgorCisiTGljZW5zZWQgUGF0ZW50cyAiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEKK0NvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cworQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KKworIk9yaWdpbmFsIFByb2dyYW0iIG1lYW5zIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBzb2Z0d2FyZQorYWNjb21wYW55aW5nIHRoaXMgQWdyZWVtZW50IGFzIHJlbGVhc2VkIGJ5IElCTSwgaW5jbHVkaW5nIHNvdXJjZQorY29kZSwgb2JqZWN0IGNvZGUgYW5kIGRvY3VtZW50YXRpb24sIGlmIGFueS4KKworIlByb2dyYW0iIG1lYW5zIHRoZSBPcmlnaW5hbCBQcm9ncmFtIGFuZCBDb250cmlidXRpb25zLgorCisiUmVjaXBpZW50IiBtZWFucyBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMKK0FncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuCisKKzIuIEdSQU5UIE9GIFJJR0hUUworU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5CitncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0CitsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LAorcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZAorb2JqZWN0IGNvZGUgZm9ybS4KK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQorZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIHBhdGVudAorbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwKK2ltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwKK2lmIGFueSwgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2UKK3NoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbQoraWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoCithZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkKK3RoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueQorb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyCitzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCisKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZQorbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUKK3Byb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvciB0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZQorcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4KK0VhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMKK2Jyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZQorcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMKK3NvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzCituZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMKK3JlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcworUmVjaXBpZW50YHMgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcworc3VmZmljaWVudCBjb3B5cmlnaHQgcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlCitjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuCiszLiBSRVFVSVJFTUVOVFMKK0EgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsCitwcm92aWRlZCB0aGF0OgorCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6CitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMKK2FuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvcgorY29uZGl0aW9ucyBvZiB0aXRsZSBhbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvcgorY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOworZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eQorZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZAorY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoIGFzIGxvc3QgcHJvZml0czsKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZQorb2ZmZXJlZCBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQKKworc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2gKK0NvbnRyaWJ1dG9yLCBhbmQgaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUKK21hbm5lciBvbiBvciB0aHJvdWdoIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLgorV2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZSBmb3JtOgorCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQKK2EgY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZQorUHJvZ3JhbS4KK0VhY2ggQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW4gYSBjb25zcGljdW91cyBsb2NhdGlvbiBpbiB0aGUgUHJvZ3JhbToKKworQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk5IEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworSW4gYWRkaXRpb24sIGVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlIG9yaWdpbmF0b3IKK29mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uCisKKzQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OCitDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4KK3Jlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZQorbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwKK3VzZSBvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhCitjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90CitjcmVhdGUgcG90ZW50aWFsIGxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEKK0NvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLAorc3VjaCBDb250cmlidXRvciAoIkNvbW1lcmNpYWwgQ29udHJpYnV0b3IiKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZAorYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlciBDb250cmlidXRvciAoIkluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIikKK2FnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQgY29zdHMgKGNvbGxlY3RpdmVseSAiTG9zc2VzIikgYXJpc2luZworZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZAorcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlCithY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoCitpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLgorVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LgorSW4gb3JkZXIgdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkKK25vdGlmeSB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKQorYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueSByZWxhdGVkIHNldHRsZW1lbnQKK25lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbiBhbnkKK3N1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLgorCitGb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYSBDb21tZXJjaWFsCitDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlCitjbGFpbXMgYW5kIHdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcmBzCityZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcyBzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgord291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlIG90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvCit0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhIGNvdXJ0IHJlcXVpcmVzIGFueQorb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy4KKworNS4gTk8gV0FSUkFOVFkKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUworUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZCitPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cworZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCit0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZQorbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQKK3VuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UCitOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsCitJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKK1RIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTCitHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIEdFTkVSQUwKK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YKK3RoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dCBmdXJ0aGVyCithY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KKworSWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhIENvbnRyaWJ1dG9yIHdpdGgKK3Jlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byBzb2Z0d2FyZSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0KK29yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpLCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCBieQordGhhdCBDb250cmlidXRvciB0byBzdWNoIFJlY2lwaWVudCB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbAordGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gSW4gYWRkaXRpb24sIGlmCitSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZworYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtCitpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBvcgoraGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudGBzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudGBzCityaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2gKK2xpdGlnYXRpb24gaXMgZmlsZWQuCisKK0FsbCBSZWNpcGllbnRgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0CitmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcworQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUgcGVyaW9kIG9mCit0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudGBzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZQorYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuCitIb3dldmVyLCBSZWNpcGllbnRgcyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55CitsaWNlbnNlcyBncmFudGVkIGJ5IFJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZQorYW5kIHN1cnZpdmUuCisKK0lCTSBtYXkgcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mIHRoaXMgQWdyZWVtZW50Citmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYQorZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykKK21heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50Cit1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mIHRoZQorQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIChpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gTm8gb25lCitvdGhlciB0aGFuIElCTSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gRXhjZXB0IGFzCitleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcworbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yCit1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvcgorb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlcgordGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLgorCitUaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmsgYW5kCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYS4gTm8KK3BhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoCitwYXJ0eSB3YWl2ZXMgaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lTQyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVNDCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YWYxMDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lTQwpAQCAtMCwwICsxLDEwIEBACisKK0lTQyBMaWNlbnNlOgorCitDb3B5cmlnaHQgJiMxNjk7IDIwMDQtMjAxMCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorQ29weXJpZ2h0ICYjMTY5OyAxOTk1LTIwMDMgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bQorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTEdQTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzMWQ0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTEdQTC0yLjAKQEAgLTAsMCArMSwzNDIgQEAKK0dOVSBMSUJSQVJZIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKworCisKK1ZlcnNpb24gMiwgSnVuZSAxOTkxCisKKworCitDb3B5cmlnaHQgKEMpIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKzUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBCisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworCitvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCisKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IEdQTC4gIEl0IGlzCisKKyBudW1iZXJlZCAyIGJlY2F1c2UgaXQgZ29lcyB3aXRoIHZlcnNpb24gMiBvZiB0aGUgb3JkaW5hcnkgR1BMLl0KKworUHJlYW1ibGUKKworCisKK1RoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworCisKK1RoaXMgbGljZW5zZSwgdGhlIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBzb21lIHNwZWNpYWxseSBkZXNpZ25hdGVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSwgYW5kIHRvIGFueSBvdGhlciBsaWJyYXJpZXMgd2hvc2UgYXV0aG9ycyBkZWNpZGUgdG8gdXNlIGl0LiBZb3UgY2FuIHVzZSBpdCBmb3IgeW91ciBsaWJyYXJpZXMsIHRvby4KKworCisKK1doZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QgcHJpY2UuIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworCisKK1RvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUgeW91LiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIElmIHlvdSBsaW5rIGEgcHJvZ3JhbSB3aXRoIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBwcm92aWRlIGNvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cyBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtIHdpdGggdGhlIGxpYnJhcnksIGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZyBpdC4gQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisKKworT3VyIG1ldGhvZCBvZiBwcm90ZWN0aW5nIHlvdXIgcmlnaHRzIGhhcyB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIGxpYnJhcnksIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIGxpYnJhcnkuCisKKworCitBbHNvLCBmb3IgZWFjaCBkaXN0cmlidXRvcidzIHByb3RlY3Rpb24sIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluIHRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlIGxpYnJhcnkuIElmIHRoZSBsaWJyYXJ5IGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsIGF1dGhvcnMnIHJlcHV0YXRpb25zLgorCisKKworRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4gV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgY29tcGFuaWVzIGRpc3RyaWJ1dGluZyBmcmVlIHNvZnR3YXJlIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIHRodXMgaW4gZWZmZWN0IHRyYW5zZm9ybWluZyB0aGUgcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHNvZnR3YXJlLiBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueSBwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisKKworTW9zdCBHTlUgc29mdHdhcmUsIGluY2x1ZGluZyBzb21lIGxpYnJhcmllcywgaXMgY292ZXJlZCBieSB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIHdhcyBkZXNpZ25lZCBmb3IgdXRpbGl0eSBwcm9ncmFtcy4gVGhpcyBsaWNlbnNlLCB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLiBUaGlzIGxpY2Vuc2UgaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5IG9uZTsgYmUgc3VyZSB0byByZWFkIGl0IGluIGZ1bGwsIGFuZCBkb24ndCBhc3N1bWUgdGhhdCBhbnl0aGluZyBpbiBpdCBpcyB0aGUgc2FtZSBhcyBpbiB0aGUgb3JkaW5hcnkgbGljZW5zZS4KKworCisKK1RoZSByZWFzb24gd2UgaGF2ZSBhIHNlcGFyYXRlIHB1YmxpYyBsaWNlbnNlIGZvciBzb21lIGxpYnJhcmllcyBpcyB0aGF0IHRoZXkgYmx1ciB0aGUgZGlzdGluY3Rpb24gd2UgdXN1YWxseSBtYWtlIGJldHdlZW4gbW9kaWZ5aW5nIG9yIGFkZGluZyB0byBhIHByb2dyYW0gYW5kIHNpbXBseSB1c2luZyBpdC4gTGlua2luZyBhIHByb2dyYW0gd2l0aCBhIGxpYnJhcnksIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGxpYnJhcnksIGlzIGluIHNvbWUgc2Vuc2Ugc2ltcGx5IHVzaW5nIHRoZSBsaWJyYXJ5LCBhbmQgaXMgYW5hbG9nb3VzIHRvIHJ1bm5pbmcgYSB1dGlsaXR5IHByb2dyYW0gb3IgYXBwbGljYXRpb24gcHJvZ3JhbS4gSG93ZXZlciwgaW4gYSB0ZXh0dWFsIGFuZCBsZWdhbCBzZW5zZSwgdGhlIGxpbmtlZCBleGVjdXRhYmxlIGlzIGEgY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LCBhbmQgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdHJlYXRzIGl0IGFzIHN1Y2guCisKKworCitCZWNhdXNlIG9mIHRoaXMgYmx1cnJlZCBkaXN0aW5jdGlvbiwgdXNpbmcgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIGxpYnJhcmllcyBkaWQgbm90IGVmZmVjdGl2ZWx5IHByb21vdGUgc29mdHdhcmUgc2hhcmluZywgYmVjYXVzZSBtb3N0IGRldmVsb3BlcnMgZGlkIG5vdCB1c2UgdGhlIGxpYnJhcmllcy4gV2UgY29uY2x1ZGVkIHRoYXQgd2Vha2VyIGNvbmRpdGlvbnMgbWlnaHQgcHJvbW90ZSBzaGFyaW5nIGJldHRlci4KKworCisKK0hvd2V2ZXIsIHVucmVzdHJpY3RlZCBsaW5raW5nIG9mIG5vbi1mcmVlIHByb2dyYW1zIHdvdWxkIGRlcHJpdmUgdGhlIHVzZXJzIG9mIHRob3NlIHByb2dyYW1zIG9mIGFsbCBiZW5lZml0IGZyb20gdGhlIGZyZWUgc3RhdHVzIG9mIHRoZSBsaWJyYXJpZXMgdGhlbXNlbHZlcy4gVGhpcyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcGVybWl0IGRldmVsb3BlcnMgb2Ygbm9uLWZyZWUgcHJvZ3JhbXMgdG8gdXNlIGZyZWUgbGlicmFyaWVzLCB3aGlsZSBwcmVzZXJ2aW5nIHlvdXIgZnJlZWRvbSBhcyBhIHVzZXIgb2Ygc3VjaCBwcm9ncmFtcyB0byBjaGFuZ2UgdGhlIGZyZWUgbGlicmFyaWVzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGVtLiAoV2UgaGF2ZSBub3Qgc2VlbiBob3cgdG8gYWNoaWV2ZSB0aGlzIGFzIHJlZ2FyZHMgY2hhbmdlcyBpbiBoZWFkZXIgZmlsZXMsIGJ1dCB3ZSBoYXZlIGFjaGlldmVkIGl0IGFzIHJlZ2FyZHMgY2hhbmdlcyBpbiB0aGUgYWN0dWFsIGZ1bmN0aW9ucyBvZiB0aGUgTGlicmFyeS4pIFRoZSBob3BlIGlzIHRoYXQgdGhpcyB3aWxsIGxlYWQgdG8gZmFzdGVyIGRldmVsb3BtZW50IG9mIGZyZWUgbGlicmFyaWVzLgorCisKKworVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGZvbGxvdy4gUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuIFRoZSBmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoaWxlIHRoZSBsYXR0ZXIgb25seSB3b3JrcyB0b2dldGhlciB3aXRoIHRoZSBsaWJyYXJ5LgorCisKKworTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIGZvciBhIGxpYnJhcnkgdG8gYmUgY292ZXJlZCBieSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSByYXRoZXIgdGhhbiBieSB0aGlzIHNwZWNpYWwgb25lLgorCisKKworVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKworCiswLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGxpYnJhcnkgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yIG90aGVyIGF1dGhvcml6ZWQgcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4gRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKKworCitBICJsaWJyYXJ5IiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygc29mdHdhcmUgZnVuY3Rpb25zIGFuZC9vciBkYXRhIHByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcyAod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorCisKKworVGhlICJMaWJyYXJ5IiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBzb2Z0d2FyZSBsaWJyYXJ5IG9yIHdvcmsgd2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuIEEgIndvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkiIG1lYW5zIGVpdGhlciB0aGUgTGlicmFyeSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgc3RyYWlnaHRmb3J3YXJkbHkgaW50byBhbm90aGVyIGxhbmd1YWdlLiAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCisKKworCisiU291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKworCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIFRoZSBhY3Qgb2YgcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbSBzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3Igd3JpdGluZyBpdCkuIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzIGFuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorCisKKworMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzIGNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIExpYnJhcnkuCisKKworCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworCisKKzIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24gb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworCisKK2EpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KKworYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKK2MpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIGZhY2lsaXR5LCBvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZSBmYWNpbGl0eSBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yIHRhYmxlLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcyB3aGF0ZXZlciBwYXJ0IG9mIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC4KKworKEZvciBleGFtcGxlLCBhIGZ1bmN0aW9uIGluIGEgbGlicmFyeSB0byBjb21wdXRlIHNxdWFyZSByb290cyBoYXMgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZSBhcHBsaWNhdGlvbi4gVGhlcmVmb3JlLCBTdWJzZWN0aW9uIDJkIHJlcXVpcmVzIHRoYXQgYW55IGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbCBjb21wdXRlIHNxdWFyZSByb290cy4pCisKKworCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gSWYgaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwgYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluIHRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2Ugc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiBCdXQgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZSBlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKKworCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QgeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvciBjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgorCisKKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeSB3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworCisKKzMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiBUbyBkbyB0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvIHRoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuIChJZiBhIG5ld2VyIHZlcnNpb24gdGhhbiB2ZXJzaW9uIDIgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGhhcyBhcHBlYXJlZCwgdGhlbiB5b3UgY2FuIHNwZWNpZnkgdGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluIHRoZXNlIG5vdGljZXMuCisKKworCitPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yIHRoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsIHN1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKworCitUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YgdGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgorCisKKworNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IgZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0byBkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKworCis1LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZSBMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yIGxpbmtlZCB3aXRoIGl0LCBpcyBjYWxsZWQgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLiBTdWNoIGEgd29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZCB0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisKKworSG93ZXZlciwgbGlua2luZyBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSBjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQgY29udGFpbnMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkpLCByYXRoZXIgdGhhbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4gU2VjdGlvbiA2IHN0YXRlcyB0ZXJtcyBmb3IgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggZXhlY3V0YWJsZXMuCisKKworCitXaGVuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB1c2VzIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZSB0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5IGV2ZW4gdGhvdWdoIHRoZSBzb3VyY2UgY29kZSBpcyBub3QuIFdoZXRoZXIgdGhpcyBpcyB0cnVlIGlzIGVzcGVjaWFsbHkgc2lnbmlmaWNhbnQgaWYgdGhlIHdvcmsgY2FuIGJlIGxpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiBUaGUgdGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KKworCisKK0lmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhIHN0cnVjdHVyZSBsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIGFuZCBzbWFsbCBtYWNyb3MgYW5kIHNtYWxsIGlubGluZSBmdW5jdGlvbnMgKHRlbiBsaW5lcyBvciBsZXNzIGluIGxlbmd0aCksIHRoZW4gdGhlIHVzZSBvZiB0aGUgb2JqZWN0IGZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUgd29yay4gKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisKKworT3RoZXJ3aXNlLCBpZiB0aGUgd29yayBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnksIHlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDYuIEFueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LCB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBsaW5rZWQgZGlyZWN0bHkgd2l0aCB0aGUgTGlicmFyeSBpdHNlbGYuCisKKworCis2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tcGlsZSBvciBsaW5rIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IHRvIHByb2R1Y2UgYSB3b3JrIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yayB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0IG1vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBmb3IgdGhlIGN1c3RvbWVyJ3Mgb3duIHVzZSBhbmQgcmV2ZXJzZSBlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy4KKworCisKK1lvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZSBMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gSWYgdGhlIHdvcmsgZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZSBkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBBbHNvLCB5b3UgbXVzdCBkbyBvbmUgb2YgdGhlc2UgdGhpbmdzOgorCisKKworYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZCBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuIChJdCBpcyB1bmRlcnN0b29kIHRoYXQgdGhlIHVzZXIgd2hvIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGRlZmluaXRpb25zIGZpbGVzIGluIHRoZSBMaWJyYXJ5IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlIGFibGUgdG8gcmVjb21waWxlIHRoZSBhcHBsaWNhdGlvbiB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKKworYikgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzIHNwZWNpZmllZCBpbiBTdWJzZWN0aW9uIDZhLCBhYm92ZSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgorCitjKSBJZiBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCitkKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKK0ZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvciByZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKKworCitJdCBtYXkgaGFwcGVuIHRoYXQgdGhpcyByZXF1aXJlbWVudCBjb250cmFkaWN0cyB0aGUgbGljZW5zZSByZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5IGFjY29tcGFueSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdCB1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91IGRpc3RyaWJ1dGUuCisKKworCis3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQgbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZSBwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgorCisKKworYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzLiBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBTZWN0aW9ucyBhYm92ZS4KKworYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorCis4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisKKworOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90IHNpZ25lZCBpdC4gSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisKKworMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeSBzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLiBZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0byB0aGlzIExpY2Vuc2UuCisKKworCisxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLCBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdCBkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KKworCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5LCBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgorCisKKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueSBwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueSBzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlIGludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtIHdoaWNoIGlzIGltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gTWFueSBwZW9wbGUgaGF2ZSBtYWRlIGdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQgc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZyB0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QgaW1wb3NlIHRoYXQgY2hvaWNlLgorCisKKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvIGJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisKKworMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluIGNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIExpYnJhcnkgdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisKKworMTMuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCisKKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBMaWJyYXJ5IHNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhIGxpY2Vuc2UgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKworCisxNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlIHByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwgd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisKKworTk8gV0FSUkFOVFkKKworCisKKzE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIExJQlJBUlksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIExJQlJBUlkgSVMgV0lUSCBZT1UuIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisKKworMTYuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisKKworRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKworCitIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgTGlicmFyaWVzCisKKworCitJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0IHBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UuIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZyByZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkuCisKKworCitUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gSXQgaXMgc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKworCitvbmUgbGluZSB0byBnaXZlIHRoZSBsaWJyYXJ5J3MgbmFtZSBhbmQgYW4gaWRlYSBvZiB3aGF0IGl0IGRvZXMuCisKK0NvcHlyaWdodCAoQykgeWVhciAgbmFtZSBvZiBhdXRob3IKKworCisKK1RoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKworbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisKK3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCisKK1RoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorCitMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisKK0xpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAorCitCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCisKKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIgc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgbGlicmFyeSwgaWYgbmVjZXNzYXJ5LiBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKworCitZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluCisKK3RoZSBsaWJyYXJ5IGBGcm9iJyAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlbgorCitieSBKYW1lcyBSYW5kb20gSGFja2VyLgorCisKKworc2lnbmF0dXJlIG9mIFR5IENvb24sIDEgQXByaWwgMTk5MAorCitUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0IQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMi4xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGU3MzVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTIuMQpAQCAtMCwwICsxLDE3NiBAQAorCitHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKworVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKK29mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCisgYXMgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgR05VIExpYnJhcnkgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaGVuY2UKKyB0aGUgdmVyc2lvbiBudW1iZXIgMi4xLl0KK1ByZWFtYmxlCisKK1RoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZSBzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gWW91IGNhbiB1c2UgaXQgdG9vLCBidXQgd2Ugc3VnZ2VzdCB5b3UgZmlyc3QgdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHdoZXRoZXIgdGhpcyBsaWNlbnNlIG9yIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIHRoZSBiZXR0ZXIgc3RyYXRlZ3kgdG8gdXNlIGluIGFueSBwYXJ0aWN1bGFyIGNhc2UsIGJhc2VkIG9uIHRoZSBleHBsYW5hdGlvbnMgYmVsb3cuCisKK1doZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tIG9mIHVzZSwgbm90IHByaWNlLiBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCk7IHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdDsgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgYW5kIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBhcmUgaW5mb3JtZWQgdGhhdCB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZCBkaXN0cmlidXRvcnMgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZXNlIHJpZ2h0cy4gVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZSB5b3UuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gSWYgeW91IGxpbmsgb3RoZXIgY29kZSB3aXRoIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBwcm92aWRlIGNvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbSB3aXRoIHRoZSBsaWJyYXJ5IGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZyBpdC4gQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCitXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggYSB0d28tc3RlcCBtZXRob2Q6ICgxKSB3ZSBjb3B5cmlnaHQgdGhlIGxpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgorCitUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuIEFsc28sIGlmIHRoZSBsaWJyYXJ5IGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB0aGUgcmVjaXBpZW50cyBzaG91bGQga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwgdmVyc2lvbiwgc28gdGhhdCB0aGUgb3JpZ2luYWwgYXV0aG9yYHMgcmVwdXRhdGlvbiB3aWxsIG5vdCBiZSBhZmZlY3RlZCBieSBwcm9ibGVtcyB0aGF0IG1pZ2h0IGJlIGludHJvZHVjZWQgYnkgb3RoZXJzLgorCitGaW5hbGx5LCBzb2Z0d2FyZSBwYXRlbnRzIHBvc2UgYSBjb25zdGFudCB0aHJlYXQgdG8gdGhlIGV4aXN0ZW5jZSBvZiBhbnkgZnJlZSBwcm9ncmFtLiBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QgZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhIHJlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuIFRoZXJlZm9yZSwgd2UgaW5zaXN0IHRoYXQgYW55IHBhdGVudCBsaWNlbnNlIG9idGFpbmVkIGZvciBhIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGZ1bGwgZnJlZWRvbSBvZiB1c2Ugc3BlY2lmaWVkIGluIHRoaXMgbGljZW5zZS4KKworTW9zdCBHTlUgc29mdHdhcmUsIGluY2x1ZGluZyBzb21lIGxpYnJhcmllcywgaXMgY292ZXJlZCBieSB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIFRoaXMgbGljZW5zZSwgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLCBhbmQgaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIFdlIHVzZSB0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlIGxpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgorCitXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZyBhIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEgY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiBUaGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB0aGVyZWZvcmUgcGVybWl0cyBzdWNoIGxpbmtpbmcgb25seSBpZiB0aGUgZW50aXJlIGNvbWJpbmF0aW9uIGZpdHMgaXRzIGNyaXRlcmlhIG9mIGZyZWVkb20uIFRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1vcmUgbGF4IGNyaXRlcmlhIGZvciBsaW5raW5nIG90aGVyIGNvZGUgd2l0aCB0aGUgbGlicmFyeS4KKworV2UgY2FsbCB0aGlzIGxpY2Vuc2UgdGhlICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYmVjYXVzZSBpdCBkb2VzIExlc3MgdG8gcHJvdGVjdCB0aGUgdXNlcmBzIGZyZWVkb20gdGhhbiB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcyBvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuIFRoZXNlIGRpc2FkdmFudGFnZXMgYXJlIHRoZSByZWFzb24gd2UgdXNlIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtYW55IGxpYnJhcmllcy4gSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbiBzcGVjaWFsIGNpcmN1bXN0YW5jZXMuCisKK0ZvciBleGFtcGxlLCBvbiByYXJlIG9jY2FzaW9ucywgdGhlcmUgbWF5IGJlIGEgc3BlY2lhbCBuZWVkIHRvIGVuY291cmFnZSB0aGUgd2lkZXN0IHBvc3NpYmxlIHVzZSBvZiBhIGNlcnRhaW4gbGlicmFyeSwgc28gdGhhdCBpdCBiZWNvbWVzIGEgZGUtZmFjdG8gc3RhbmRhcmQuIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZSBhbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gQSBtb3JlIGZyZXF1ZW50IGNhc2UgaXMgdGhhdCBhIGZyZWUgbGlicmFyeSBkb2VzIHRoZSBzYW1lIGpvYiBhcyB3aWRlbHkgdXNlZCBub24tZnJlZSBsaWJyYXJpZXMuIEluIHRoaXMgY2FzZSwgdGhlcmUgaXMgbGl0dGxlIHRvIGdhaW4gYnkgbGltaXRpbmcgdGhlIGZyZWUgbGlicmFyeSB0byBmcmVlIHNvZnR3YXJlIG9ubHksIHNvIHdlIHVzZSB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK0luIG90aGVyIGNhc2VzLCBwZXJtaXNzaW9uIHRvIHVzZSBhIHBhcnRpY3VsYXIgbGlicmFyeSBpbiBub24tZnJlZSBwcm9ncmFtcyBlbmFibGVzIGEgZ3JlYXRlciBudW1iZXIgb2YgcGVvcGxlIHRvIHVzZSBhIGxhcmdlIGJvZHkgb2YgZnJlZSBzb2Z0d2FyZS4gRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluIG5vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVSBvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZyBzeXN0ZW0uCisKK0FsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlIHVzZXJzYCBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzIGxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1biB0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgorCitUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gZm9sbG93LiBQYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSAid29yayBiYXNlZCBvbiB0aGUgbGlicmFyeSIgYW5kIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gVGhlIGZvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hlcmVhcyB0aGUgbGF0dGVyIG11c3QgYmUgY29tYmluZWQgd2l0aCB0aGUgbGlicmFyeSBpbiBvcmRlciB0byBydW4uCisKK1RFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCiswLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGxpYnJhcnkgb3Igb3RoZXIgcHJvZ3JhbSB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb3Igb3RoZXIgYXV0aG9yaXplZCBwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChhbHNvIGNhbGxlZCAidGhpcyBMaWNlbnNlIikuIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBICJsaWJyYXJ5IiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygc29mdHdhcmUgZnVuY3Rpb25zIGFuZC9vciBkYXRhIHByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcyAod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorCitUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yayB3aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gQSAid29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikKKworIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIFRoZSBhY3Qgb2YgcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbSBzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3Igd3JpdGluZyBpdCkuIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzIGFuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorCisxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBMaWJyYXJ5YHMgY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBkaXN0cmlidXRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgTGlicmFyeS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKzIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24gb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworYSkgVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LgorYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCitjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEgdGFibGUgb2YgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5IGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LCBpbiB0aGUgZXZlbnQgYW4gYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHN1Y2ggZnVuY3Rpb24gb3IgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgorKEZvciBleGFtcGxlLCBhIGZ1bmN0aW9uIGluIGEgbGlicmFyeSB0byBjb21wdXRlIHNxdWFyZSByb290cyBoYXMgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZSBhcHBsaWNhdGlvbi4gVGhlcmVmb3JlLCBTdWJzZWN0aW9uIDJkIHJlcXVpcmVzIHRoYXQgYW55IGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbCBjb21wdXRlIHNxdWFyZSByb290cy4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiBJZiBpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LCBhbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZSBzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuIEJ1dCB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlIGVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0IHlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0byBleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IgY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeSB3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuIFRvIGRvIHRoaXMsIHlvdSBtdXN0IGFsdGVyIGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSwgc28gdGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBpbnN0ZWFkIG9mIHRvIHRoaXMgTGljZW5zZS4gKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeSB0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4gdGhlc2Ugbm90aWNlcy4KKworT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvciB0aGF0IGNvcHksIHNvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIGFsbCBzdWJzZXF1ZW50IGNvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3JrcyBtYWRlIGZyb20gdGhhdCBjb3B5LgorCitUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YgdGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgorCis0LiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGEgcG9ydGlvbiBvciBkZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCitJZiBkaXN0cmlidXRpb24gb2Ygb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnQgdG8gZGlzdHJpYnV0ZSB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCis1LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZSBMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yIGxpbmtlZCB3aXRoIGl0LCBpcyBjYWxsZWQgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLiBTdWNoIGEgd29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZCB0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCitIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IGNyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdCBjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLiBTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KKworV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUgdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LiBXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZSBsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gVGhlIHRocmVzaG9sZCBmb3IgdGhpcyB0byBiZSB0cnVlIGlzIG5vdCBwcmVjaXNlbHkgZGVmaW5lZCBieSBsYXcuCisKK0lmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhIHN0cnVjdHVyZSBsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIGFuZCBzbWFsbCBtYWNyb3MgYW5kIHNtYWxsIGlubGluZSBmdW5jdGlvbnMgKHRlbiBsaW5lcyBvciBsZXNzIGluIGxlbmd0aCksIHRoZW4gdGhlIHVzZSBvZiB0aGUgb2JqZWN0IGZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUgd29yay4gKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCitPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heSBkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4gQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KKworNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IgbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEgd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdCBtb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcmBzIG93biB1c2UgYW5kIHJldmVyc2UgZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCisKK1lvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZSBMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gSWYgdGhlIHdvcmsgZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZSBkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBBbHNvLCB5b3UgbXVzdCBkbyBvbmUgb2YgdGhlc2UgdGhpbmdzOgorCithKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIgY2hhbmdlcyB3ZXJlIHVzZWQgaW4gdGhlIHdvcmsgKHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLCBhcyBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUsIHNvIHRoYXQgdGhlIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gKEl0IGlzIHVuZGVyc3Rvb2QgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uIHRvIHVzZSB0aGUgbW9kaWZpZWQgZGVmaW5pdGlvbnMuKQorYikgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlIExpYnJhcnkuIEEgc3VpdGFibGUgbWVjaGFuaXNtIGlzIG9uZSB0aGF0ICgxKSB1c2VzIGF0IHJ1biB0aW1lIGEgY29weSBvZiB0aGUgbGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXJgcyBjb21wdXRlciBzeXN0ZW0sIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKSB3aWxsIG9wZXJhdGUgcHJvcGVybHkgd2l0aCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIGlmIHRoZSB1c2VyIGluc3RhbGxzIG9uZSwgYXMgbG9uZyBhcyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBpcyBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KK2MpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscyBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KK2QpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZSBzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuCitlKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCitGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IgcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UgcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseSBhY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uIFN1Y2ggYSBjb250cmFkaWN0aW9uIG1lYW5zIHlvdSBjYW5ub3QgdXNlIGJvdGggdGhlbSBhbmQgdGhlIExpYnJhcnkgdG9nZXRoZXIgaW4gYW4gZXhlY3V0YWJsZSB0aGF0IHlvdSBkaXN0cmlidXRlLgorCis3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQgbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZSBwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgorCithKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMuIFRoaXMgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFNlY3Rpb25zIGFib3ZlLgorYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90IHNpZ25lZCBpdC4gSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5IHN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgorCisxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLCBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdCBkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksIGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkgcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkgc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcyBpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuIE1hbnkgcGVvcGxlIGhhdmUgbWFkZSBnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHRocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0IHN5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcgdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90IGltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvIGJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4gY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKzEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIExpYnJhcnkgc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEgbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZSBwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlc2UsIHdyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworTk8gV0FSUkFOVFkKKworMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgTElCUkFSWSBJUyBXSVRIIFlPVS4gU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKzE2LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBMSUJSQVJZIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgU09GVFdBUkUpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKK0hvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKKworSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdCBwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQgZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiBZb3UgY2FuIGRvIHNvIGJ5IHBlcm1pdHRpbmcgcmVkaXN0cmlidXRpb24gdW5kZXIgdGhlc2UgdGVybXMgKG9yLCBhbHRlcm5hdGl2ZWx5LCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgorCitUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gSXQgaXMgc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKK29uZSBsaW5lIHRvIGdpdmUgdGhlIGxpYnJhcnlgcyBuYW1lIGFuZCBhbiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4KK0NvcHlyaWdodCAoQykgeWVhciAgbmFtZSBvZiBhdXRob3IKKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKK0xlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyIHNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIGxpYnJhcnksIGlmIG5lY2Vzc2FyeS4gSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCitZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluCit0aGUgbGlicmFyeSBgRnJvYmAgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4KK2J5IEphbWVzIFJhbmRvbSBIYWNrZXIuCisKK3NpZ25hdHVyZSBvZiBUeSBDb29uLCAxIEFwcmlsIDE5OTAKK1R5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCitUaGF0YHMgYWxsIHRoZXJlIGlzIHRvIGl0IQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMy4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmUyOWJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTMuMApAQCAtMCwwICsxLDY1IEBACitHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKworVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDcKKworQ29weXJpZ2h0IMKpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworVGhpcyB2ZXJzaW9uIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBzdXBwbGVtZW50ZWQgYnkgdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbGlzdGVkIGJlbG93LgorMC4gQWRkaXRpb25hbCBEZWZpbml0aW9ucy4KKworQXMgdXNlZCBoZXJlaW4sIOKAnHRoaXMgTGljZW5zZeKAnSByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUg4oCcR05VIEdQTOKAnSByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKwor4oCcVGhlIExpYnJhcnnigJ0gcmVmZXJzIHRvIGEgY292ZXJlZCB3b3JrIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSwgb3RoZXIgdGhhbiBhbiBBcHBsaWNhdGlvbiBvciBhIENvbWJpbmVkIFdvcmsgYXMgZGVmaW5lZCBiZWxvdy4KKworQW4g4oCcQXBwbGljYXRpb27igJ0gaXMgYW55IHdvcmsgdGhhdCBtYWtlcyB1c2Ugb2YgYW4gaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IHRoZSBMaWJyYXJ5LCBidXQgd2hpY2ggaXMgbm90IG90aGVyd2lzZSBiYXNlZCBvbiB0aGUgTGlicmFyeS4gRGVmaW5pbmcgYSBzdWJjbGFzcyBvZiBhIGNsYXNzIGRlZmluZWQgYnkgdGhlIExpYnJhcnkgaXMgZGVlbWVkIGEgbW9kZSBvZiB1c2luZyBhbiBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgdGhlIExpYnJhcnkuCisKK0Eg4oCcQ29tYmluZWQgV29ya+KAnSBpcyBhIHdvcmsgcHJvZHVjZWQgYnkgY29tYmluaW5nIG9yIGxpbmtpbmcgYW4gQXBwbGljYXRpb24gd2l0aCB0aGUgTGlicmFyeS4gVGhlIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGlicmFyeSB3aXRoIHdoaWNoIHRoZSBDb21iaW5lZCBXb3JrIHdhcyBtYWRlIGlzIGFsc28gY2FsbGVkIHRoZSDigJxMaW5rZWQgVmVyc2lvbuKAnS4KKworVGhlIOKAnE1pbmltYWwgQ29ycmVzcG9uZGluZyBTb3VyY2XigJ0gZm9yIGEgQ29tYmluZWQgV29yayBtZWFucyB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIHRoZSBDb21iaW5lZCBXb3JrLCBleGNsdWRpbmcgYW55IHNvdXJjZSBjb2RlIGZvciBwb3J0aW9ucyBvZiB0aGUgQ29tYmluZWQgV29yayB0aGF0LCBjb25zaWRlcmVkIGluIGlzb2xhdGlvbiwgYXJlIGJhc2VkIG9uIHRoZSBBcHBsaWNhdGlvbiwgYW5kIG5vdCBvbiB0aGUgTGlua2VkIFZlcnNpb24uCisKK1RoZSDigJxDb3JyZXNwb25kaW5nIEFwcGxpY2F0aW9uIENvZGXigJ0gZm9yIGEgQ29tYmluZWQgV29yayBtZWFucyB0aGUgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlIGZvciB0aGUgQXBwbGljYXRpb24sIGluY2x1ZGluZyBhbnkgZGF0YSBhbmQgdXRpbGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yIHJlcHJvZHVjaW5nIHRoZSBDb21iaW5lZCBXb3JrIGZyb20gdGhlIEFwcGxpY2F0aW9uLCBidXQgZXhjbHVkaW5nIHRoZSBTeXN0ZW0gTGlicmFyaWVzIG9mIHRoZSBDb21iaW5lZCBXb3JrLgorMS4gRXhjZXB0aW9uIHRvIFNlY3Rpb24gMyBvZiB0aGUgR05VIEdQTC4KKworWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgdW5kZXIgc2VjdGlvbnMgMyBhbmQgNCBvZiB0aGlzIExpY2Vuc2Ugd2l0aG91dCBiZWluZyBib3VuZCBieSBzZWN0aW9uIDMgb2YgdGhlIEdOVSBHUEwuCisyLiBDb252ZXlpbmcgTW9kaWZpZWQgVmVyc2lvbnMuCisKK0lmIHlvdSBtb2RpZnkgYSBjb3B5IG9mIHRoZSBMaWJyYXJ5LCBhbmQsIGluIHlvdXIgbW9kaWZpY2F0aW9ucywgYSBmYWNpbGl0eSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIEFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgZmFjaWxpdHkgKG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5IGlzIGludm9rZWQpLCB0aGVuIHlvdSBtYXkgY29udmV5IGEgY29weSBvZiB0aGUgbW9kaWZpZWQgdmVyc2lvbjoKKworICAgICogYSkgdW5kZXIgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IHlvdSBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsIGluIHRoZSBldmVudCBhbiBBcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgdGhlIGZ1bmN0aW9uIG9yIGRhdGEsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLCBvcgorICAgICogYikgdW5kZXIgdGhlIEdOVSBHUEwsIHdpdGggbm9uZSBvZiB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvZiB0aGlzIExpY2Vuc2UgYXBwbGljYWJsZSB0byB0aGF0IGNvcHkuCisKKzMuIE9iamVjdCBDb2RlIEluY29ycG9yYXRpbmcgTWF0ZXJpYWwgZnJvbSBMaWJyYXJ5IEhlYWRlciBGaWxlcy4KKworVGhlIG9iamVjdCBjb2RlIGZvcm0gb2YgYW4gQXBwbGljYXRpb24gbWF5IGluY29ycG9yYXRlIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZSB0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnkuIFlvdSBtYXkgY29udmV5IHN1Y2ggb2JqZWN0IGNvZGUgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQsIGlmIHRoZSBpbmNvcnBvcmF0ZWQgbWF0ZXJpYWwgaXMgbm90IGxpbWl0ZWQgdG8gbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEgc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgb3Igc21hbGwgbWFjcm9zLCBpbmxpbmUgZnVuY3Rpb25zIGFuZCB0ZW1wbGF0ZXMgKHRlbiBvciBmZXdlciBsaW5lcyBpbiBsZW5ndGgpLCB5b3UgZG8gYm90aCBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgKiBhKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIG9iamVjdCBjb2RlIHRoYXQgdGhlIExpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuCisgICAgKiBiKSBBY2NvbXBhbnkgdGhlIG9iamVjdCBjb2RlIHdpdGggYSBjb3B5IG9mIHRoZSBHTlUgR1BMIGFuZCB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQuCisKKzQuIENvbWJpbmVkIFdvcmtzLgorCitZb3UgbWF5IGNvbnZleSBhIENvbWJpbmVkIFdvcmsgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UgdGhhdCwgdGFrZW4gdG9nZXRoZXIsIGVmZmVjdGl2ZWx5IGRvIG5vdCByZXN0cmljdCBtb2RpZmljYXRpb24gb2YgdGhlIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5IGNvbnRhaW5lZCBpbiB0aGUgQ29tYmluZWQgV29yayBhbmQgcmV2ZXJzZSBlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucywgaWYgeW91IGFsc28gZG8gZWFjaCBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgKiBhKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIENvbWJpbmVkIFdvcmsgdGhhdCB0aGUgTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KKyAgICAqIGIpIEFjY29tcGFueSB0aGUgQ29tYmluZWQgV29yayB3aXRoIGEgY29weSBvZiB0aGUgR05VIEdQTCBhbmQgdGhpcyBsaWNlbnNlIGRvY3VtZW50LgorICAgICogYykgRm9yIGEgQ29tYmluZWQgV29yayB0aGF0IGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzIGR1cmluZyBleGVjdXRpb24sIGluY2x1ZGUgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZXNlIG5vdGljZXMsIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UgZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3BpZXMgb2YgdGhlIEdOVSBHUEwgYW5kIHRoaXMgbGljZW5zZSBkb2N1bWVudC4KKyAgICAqIGQpIERvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgIG8gMCkgQ29udmV5IHRoZSBNaW5pbWFsIENvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB0aGUgQ29ycmVzcG9uZGluZyBBcHBsaWNhdGlvbiBDb2RlIGluIGEgZm9ybSBzdWl0YWJsZSBmb3IsIGFuZCB1bmRlciB0ZXJtcyB0aGF0IHBlcm1pdCwgdGhlIHVzZXIgdG8gcmVjb21iaW5lIG9yIHJlbGluayB0aGUgQXBwbGljYXRpb24gd2l0aCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIExpbmtlZCBWZXJzaW9uIHRvIHByb2R1Y2UgYSBtb2RpZmllZCBDb21iaW5lZCBXb3JrLCBpbiB0aGUgbWFubmVyIHNwZWNpZmllZCBieSBzZWN0aW9uIDYgb2YgdGhlIEdOVSBHUEwgZm9yIGNvbnZleWluZyBDb3JyZXNwb25kaW5nIFNvdXJjZS4KKyAgICAgICAgICBvIDEpIFVzZSBhIHN1aXRhYmxlIHNoYXJlZCBsaWJyYXJ5IG1lY2hhbmlzbSBmb3IgbGlua2luZyB3aXRoIHRoZSBMaWJyYXJ5LiBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoYSkgdXNlcyBhdCBydW4gdGltZSBhIGNvcHkgb2YgdGhlIExpYnJhcnkgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIgc3lzdGVtLCBhbmQgKGIpIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeSB0aGF0IGlzIGludGVyZmFjZS1jb21wYXRpYmxlIHdpdGggdGhlIExpbmtlZCBWZXJzaW9uLgorICAgICogZSkgUHJvdmlkZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24sIGJ1dCBvbmx5IGlmIHlvdSB3b3VsZCBvdGhlcndpc2UgYmUgcmVxdWlyZWQgdG8gcHJvdmlkZSBzdWNoIGluZm9ybWF0aW9uIHVuZGVyIHNlY3Rpb24gNiBvZiB0aGUgR05VIEdQTCwgYW5kIG9ubHkgdG8gdGhlIGV4dGVudCB0aGF0IHN1Y2ggaW5mb3JtYXRpb24gaXMgbmVjZXNzYXJ5IHRvIGluc3RhbGwgYW5kIGV4ZWN1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBDb21iaW5lZCBXb3JrIHByb2R1Y2VkIGJ5IHJlY29tYmluaW5nIG9yIHJlbGlua2luZyB0aGUgQXBwbGljYXRpb24gd2l0aCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIExpbmtlZCBWZXJzaW9uLiAoSWYgeW91IHVzZSBvcHRpb24gNGQwLCB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIG11c3QgYWNjb21wYW55IHRoZSBNaW5pbWFsIENvcnJlc3BvbmRpbmcgU291cmNlIGFuZCBDb3JyZXNwb25kaW5nIEFwcGxpY2F0aW9uIENvZGUuIElmIHlvdSB1c2Ugb3B0aW9uIDRkMSwgeW91IG11c3QgcHJvdmlkZSB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGluIHRoZSBtYW5uZXIgc3BlY2lmaWVkIGJ5IHNlY3Rpb24gNiBvZiB0aGUgR05VIEdQTCBmb3IgY29udmV5aW5nIENvcnJlc3BvbmRpbmcgU291cmNlLikKKworNS4gQ29tYmluZWQgTGlicmFyaWVzLgorCitZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgc2lkZSBieSBzaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgbm90IEFwcGxpY2F0aW9ucyBhbmQgYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIGNvbnZleSBzdWNoIGEgY29tYmluZWQgbGlicmFyeSB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgaWYgeW91IGRvIGJvdGggb2YgdGhlIGZvbGxvd2luZzoKKworICAgICogYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzLCBjb252ZXllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorICAgICogYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorCis2LiBSZXZpc2VkIFZlcnNpb25zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK1RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIExpYnJhcnkgYXMgeW91IHJlY2VpdmVkIGl0IHNwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug4oCcb3IgYW55IGxhdGVyIHZlcnNpb27igJ0gYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHB1Ymxpc2hlZCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgTGlicmFyeSBhcyB5b3UgcmVjZWl2ZWQgaXQgZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworSWYgdGhlIExpYnJhcnkgYXMgeW91IHJlY2VpdmVkIGl0IHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGV0aGVyIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHNoYWxsIGFwcGx5LCB0aGF0IHByb3h5J3MgcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGFueSB2ZXJzaW9uIGlzIHBlcm1hbmVudCBhdXRob3JpemF0aW9uIGZvciB5b3UgdG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIExpYnJhcnkuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQTC0xLjAyIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUEwtMS4wMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTMzNzQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUEwtMS4wMgpAQCAtMCwwICsxLDc2IEBACisKK0x1Y2VudCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMDIgCisKK1RIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBQVUJMSUMgTElDRU5TRSAoIkFHUkVFTUVOVCIpLiBBTlkgVVNFLCBSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVGBTIEFDQ0VQVEFOQ0UgT0YgVEhJUyBBR1JFRU1FTlQuCisxLiBERUZJTklUSU9OUworCisiQ29udHJpYnV0aW9uIiBtZWFuczoKKworaW4gdGhlIGNhc2Ugb2YgTHVjZW50IFRlY2hub2xvZ2llcyBJbmMuICgiTFVDRU5UIiksIHRoZSBPcmlnaW5hbCBQcm9ncmFtLCBhbmQKK2luIHRoZSBjYXNlIG9mIGVhY2ggQ29udHJpYnV0b3IsCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTsKK3doZXJlIHN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIHdlcmUgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yYHMgYmVoYWxmLCBhbmQgdGhlIENvbnRyaWJ1dG9yIGV4cGxpY2l0bHkgY29uc2VudHMsIGluIGFjY29yZGFuY2Ugd2l0aCBTZWN0aW9uIDNDLCB0byBjaGFyYWN0ZXJpemF0aW9uIG9mIHRoZSBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgYXMgQ29udHJpYnV0aW9ucy4KKyJDb250cmlidXRvciIgbWVhbnMgTFVDRU5UIGFuZCBhbnkgb3RoZXIgZW50aXR5IHRoYXQgaGFzIENvbnRyaWJ1dGVkIGEgQ29udHJpYnV0aW9uIHRvIHRoZSBQcm9ncmFtLgorCisiRGlzdHJpYnV0b3IiIG1lYW5zIGEgUmVjaXBpZW50IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0sIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFByb2dyYW0sIG9yIGFueSBwYXJ0IHRoZXJlb2YuCisKKyJMaWNlbnNlZCBQYXRlbnRzIiBtZWFuIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLgorCisiT3JpZ2luYWwgUHJvZ3JhbSIgbWVhbnMgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIHNvZnR3YXJlIGFjY29tcGFueWluZyB0aGlzIEFncmVlbWVudCBhcyByZWxlYXNlZCBieSBMVUNFTlQsIGluY2x1ZGluZyBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUgYW5kIGRvY3VtZW50YXRpb24sIGlmIGFueS4KKworIlByb2dyYW0iIG1lYW5zIHRoZSBPcmlnaW5hbCBQcm9ncmFtIGFuZCBDb250cmlidXRpb25zIG9yIGFueSBwYXJ0IHRoZXJlb2YKKworIlJlY2lwaWVudCIgbWVhbnMgYW55b25lIHdobyByZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuCisKKzIuIEdSQU5UIE9GIFJJR0hUUworCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4KK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhlIHBhdGVudCBsaWNlbnNlIGdyYW50ZWQgYnkgYSBDb250cmlidXRvciBzaGFsbCBhbHNvIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIG9mIHRoYXQgQ29udHJpYnV0b3IgYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkIGJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBncmFudGVkIGJ5IGEgQ29udHJpYnV0b3Igc2hhbGwgbm90IGFwcGx5IHRvIChpKSBhbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbiwgbm9yIHRvIChpaSkgQ29udHJpYnV0aW9ucyBvZiBvdGhlciBDb250cmlidXRvcnMuIE5vIGhhcmR3YXJlIHBlciBzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnRgcyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLgorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQgcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KKzMuIFJFUVVJUkVNRU5UUworCitBLiBEaXN0cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gYW55IGZvcm0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQgb3IgdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDoKKworaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7CitpZiB0aGUgUHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiBzb3VyY2UgY29kZSBvciBvdGhlciB0YW5naWJsZSBmb3JtLCBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgRGlzdHJpYnV0b3JgcyBvd24gbGljZW5zZSBhZ3JlZW1lbnQgaXMgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW07IGFuZAoraWYgZGlzdHJpYnV0ZWQgdW5kZXIgRGlzdHJpYnV0b3JgcyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHN1Y2ggbGljZW5zZSBhZ3JlZW1lbnQ6CitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kIGNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUgYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOworZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaCBhcyBsb3N0IHByb2ZpdHM7IGFuZAorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdCBDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eS4KK0IuIEVhY2ggRGlzdHJpYnV0b3IgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW4gYSBjb25zcGljdW91cyBsb2NhdGlvbiBpbiB0aGUgUHJvZ3JhbToKKworQ29weXJpZ2h0IChDKSAyMDAzLCBMdWNlbnQgVGVjaG5vbG9naWVzIEluYy4gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0MuIEluIGFkZGl0aW9uLCBlYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24gaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cyBzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gQWxzbywgZWFjaCBDb250cmlidXRvciBtdXN0IGFncmVlIHRoYXQgdGhlIGFkZGl0aW9ucyBhbmQvb3IgY2hhbmdlcyBhcmUgaW50ZW5kZWQgdG8gYmUgYSBDb250cmlidXRpb24uIE9uY2UgYSBDb250cmlidXRpb24gaXMgY29udHJpYnV0ZWQsIGl0IG1heSBub3QgdGhlcmVhZnRlciBiZSByZXZva2VkLgorCis0LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTgorCitDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycyBhbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZSBvZiB0aGUgUHJvZ3JhbSwgdGhlIERpc3RyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbCBsaWFiaWxpdHkgZm9yIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIERpc3RyaWJ1dG9yIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIERpc3RyaWJ1dG9yICgiQ29tbWVyY2lhbCBEaXN0cmlidXRvciIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgQ29udHJpYnV0b3IgKCJJbmRlbW5pZmllZCBDb250cmlidXRvciIpIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQgY29zdHMgKGNvbGxlY3RpdmVseSAiTG9zc2VzIikgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvIHRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzIHJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlciB0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQgYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUgaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLgorCitGb3IgZXhhbXBsZSwgYSBEaXN0cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgRGlzdHJpYnV0b3IgaXMgdGhlbiBhIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBEaXN0cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlIGNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIERpc3RyaWJ1dG9yYHMgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMgc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEgY291cnQgcmVxdWlyZXMgYW55IENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy4KKworNS4gTk8gV0FSUkFOVFkKKworRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvciBlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KKworNi4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkKKworRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gRVhQT1JUIENPTlRST0wKKworUmVjaXBpZW50IGFncmVlcyB0aGF0IFJlY2lwaWVudCBhbG9uZSBpcyByZXNwb25zaWJsZSBmb3IgY29tcGxpYW5jZSB3aXRoIHRoZSBVbml0ZWQgU3RhdGVzIGV4cG9ydCBhZG1pbmlzdHJhdGlvbiByZWd1bGF0aW9ucyAoYW5kIHRoZSBleHBvcnQgY29udHJvbCBsYXdzIGFuZCByZWd1bGF0aW9uIG9mIGFueSBvdGhlciBjb3VudHJpZXMpLgorCis4LiBHRU5FUkFMCisKK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCitJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGEgQ29udHJpYnV0b3Igd2l0aCByZXNwZWN0IHRvIGEgcGF0ZW50IGFwcGxpY2FibGUgdG8gc29mdHdhcmUgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpLCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCBieSB0aGF0IENvbnRyaWJ1dG9yIHRvIHN1Y2ggUmVjaXBpZW50IHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIEluIGFkZGl0aW9uLCBpZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudGBzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudGBzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCitBbGwgUmVjaXBpZW50YHMgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnRgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwgUmVjaXBpZW50YHMgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5IFJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4KKworTFVDRU5UIG1heSBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBObyBvbmUgb3RoZXIgdGhhbiBMVUNFTlQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8gdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuCisKK1RoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcyBBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzIGl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllZjM1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjAKQEAgLTAsMCArMSwyMTMgQEAKKworTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIAorTFBQTCBWZXJzaW9uIDEuMCAgMTk5OS0wMy0wMQorCitDb3B5cmlnaHQgMTk5OSBMYVRlWDMgUHJvamVjdAorICAgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworICAgIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IG1vZGlmaWNhdGlvbiBpcyBub3QgYWxsb3dlZC4KKworCitQcmVhbWJsZQorPT09PT09PT0KKworVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UgKExQUEwpIGlzIHRoZSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRoZQorYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gaXMgZGlzdHJpYnV0ZWQuIEFzIGRlc2NyaWJlZCBiZWxvdyB5b3UgbWF5IHVzZQordGhpcyBsaWNlbmNlIGZvciBhbnkgc29mdHdhcmUgdGhhdCB5b3Ugd2lzaCB0byBkaXN0cmlidXRlLiAKKworSXQgbWF5IGJlIHBhcnRpY3VsYXJseSBzdWl0YWJsZSBpZiB5b3VyIHNvZnR3YXJlIGlzIFRlWCByZWxhdGVkIChzdWNoCithcyBhIExhVGVYIHBhY2thZ2UgZmlsZSkgYnV0IGl0IG1heSBiZSB1c2VkIGZvciBhbnkgc29mdHdhcmUsIGV2ZW4gaWYKK2l0IGlzIHVucmVsYXRlZCB0byBUZVguCisKK1RvIHVzZSB0aGlzIGxpY2Vuc2UsIHRoZSBmaWxlcyBvZiB5b3VyIGRpc3RyaWJ1dGlvbiBzaG91bGQgaGF2ZSBhbgorZXhwbGljaXQgY29weXJpZ2h0IG5vdGljZSBnaXZpbmcgeW91ciBuYW1lIGFuZCB0aGUgeWVhciwgdG9nZXRoZXIKK3dpdGggYSByZWZlcmVuY2UgdG8gdGhpcyBsaWNlbnNlLgorCitBIHR5cGljYWwgZXhhbXBsZSB3b3VsZCBiZQorCisgICAlJSBwaWcuc3R5CisgICAlJSBDb3B5cmlnaHQgMjAwMSBNLiBZLiBOYW1lCisKKyAgICUgVGhpcyBwcm9ncmFtIGNhbiByZWRpc3RyaWJ1dGVkIGFuZC9vciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMKKyAgICUgb2YgdGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UgRGlzdHJpYnV0ZWQgZnJvbSBDVEFOCisgICAlIGFyY2hpdmVzIGluIGRpcmVjdG9yeSBtYWNyb3MvbGF0ZXgvYmFzZS9scHBsLnR4dDsgZWl0aGVyCisgICAlIHZlcnNpb24gMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworR2l2ZW4gc3VjaCBhIG5vdGljZSBpbiB0aGUgZmlsZSwgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBkb2N1bWVudCB3b3VsZAorYXBwbHksIHdpdGg6CisKK2BUaGUgUHJvZ3JhbWAgcmVmZXJyaW5nIHRvIHRoZSBzb2Z0d2FyZSBgcGlnLnN0eWAgIGFuZCAKK2BUaGUgQ29weXJpZ2h0IEhvbGRlcmAgcmVmZXJyaW5nIHRvIHRoZSBwZXJzb24gYE0uIFkuIE5hbWVgLgorCitUbyBzZWUgYSByZWFsIGV4YW1wbGUsIHNlZSB0aGUgZmlsZSBsZWdhbC50eHQgd2hpY2ggY2FycmllcyB0aGUKK2NvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBiYXNlIGxhdGV4IGRpc3RyaWJ1dGlvbi4KKworVGhpcyBsaWNlbnNlIGdpdmVzIHRlcm1zIHVuZGVyIHdoaWNoIGZpbGVzIG9mIFRoZSBQcm9ncmFtIG1heSBiZQorZGlzdHJpYnV0ZWQgYW5kIG1vZGlmaWVkLiBJbmRpdmlkdWFsIGZpbGVzIG1heSBoYXZlIHNwZWNpZmljIGZ1cnRoZXIKK2NvbnN0cmFpbnRzIG9uIG1vZGlmaWNhdGlvbiwgYnV0IG5vIGZpbGUgc2hvdWxkIGhhdmUgcmVzdHJpY3Rpb25zIG9uCitkaXN0cmlidXRpb24gb3RoZXIgdGhhbiB0aG9zZSBzcGVjaWZpZWQgYmVsb3cuIAorVGhpcyBpcyB0byBlbnN1cmUgdGhhdCBhIGRpc3RyaWJ1dG9yIHdpc2hpbmcgdG8gZGlzdHJpYnV0ZSBhIGNvbXBsZXRlCit1bm1vZGlmaWVkIGNvcHkgb2YgVGhlIFByb2dyYW0gbmVlZCBvbmx5IGNoZWNrIHRoZSBjb25kaXRpb25zIGluIHRoaXMKK2ZpbGUsIGFuZCBkb2VzIG5vdCBuZWVkIHRvIGNoZWNrIGV2ZXJ5IGZpbGUgaW4gVGhlIFByb2dyYW0gZm9yIGV4dHJhCityZXN0cmljdGlvbnMuIElmIHlvdSBkbyBuZWVkIHRvIG1vZGlmeSB0aGUgZGlzdHJpYnV0aW9uIHRlcm1zIG9mIHNvbWUKK2ZpbGVzLCBkbyBub3QgcmVmZXIgdG8gdGhpcyBsaWNlbnNlLCBpbnN0ZWFkIGRpc3RyaWJ1dGUgVGhlIFByb2dyYW0KK3VuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UuIFlvdSBtYXkgdXNlIHRoZSBwYXJ0cyBvZiB0aGUgdGV4dCBvZiBMUFBMIGFzCithIG1vZGVsIGZvciB5b3VyIG93biBsaWNlbnNlLCBidXQgeW91ciBsaWNlbnNlIHNob3VsZCBub3QgZGlyZWN0bHkgcmVmZXIKK3RvIHRoZSBMUFBMIG9yIG90aGVyd2lzZSBnaXZlIHRoZSBpbXByZXNzaW9uIHRoYXQgVGhlIFByb2dyYW0gaXMKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMUFBMLiAKKworCisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGVybXMgQW5kIENvbmRpdGlvbnMgRm9yIENvcHlpbmcsIERpc3RyaWJ1dGlvbiBBbmQgTW9kaWZpY2F0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitXQVJSQU5UWQorPT09PT09PT0KKworVGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIFRoZSBQcm9ncmFtLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieQorYXBwbGljYWJsZSBsYXcuICBFeGNlcHQgd2hlbiBvdGhlcndpc2Ugc3RhdGVkIGluIHdyaXRpbmcsIFRoZQorQ29weXJpZ2h0IEhvbGRlciBwcm92aWRlcyBUaGUgUHJvZ3JhbSBgYXMgaXNgIHdpdGhvdXQgd2FycmFudHkgb2YgYW55CitraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUKK2ltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhcgorcHVycG9zZS4gIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlCitwcm9ncmFtIGlzIHdpdGggeW91LiAgU2hvdWxkIFRoZSBQcm9ncmFtIHByb3ZlIGRlZmVjdGl2ZSwgeW91IGFzc3VtZQordGhlIGNvc3Qgb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciBvciBjb3JyZWN0aW9uLgorCitJbiBubyBldmVudCB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcKK3dpbGwgVGhlIENvcHlyaWdodCBIb2xkZXIsIG9yIGFueSBvZiB0aGUgaW5kaXZpZHVhbCBhdXRob3JzIG5hbWVkIGluCit0aGUgc291cmNlIGZvciBUaGUgUHJvZ3JhbSwgYmUgbGlhYmxlIHRvIHlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nCithbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBvdXQKK29mIGFueSB1c2Ugb2YgVGhlIFByb2dyYW0gb3Igb3V0IG9mIGluYWJpbGl0eSB0byB1c2UgVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGxvc3Mgb2YgZGF0YSBvciBkYXRhIGJlaW5nIHJlbmRlcmVkCitpbmFjY3VyYXRlIG9yIGxvc3NlcyBzdXN0YWluZWQgYnkgeW91IG9yIGJ5IHRoaXJkIHBhcnRpZXMgYXMgYSByZXN1bHQKK29mIGEgZmFpbHVyZSBvZiBUaGUgUHJvZ3JhbSB0byBvcGVyYXRlIHdpdGggYW55IG90aGVyIHByb2dyYW1zKSwgZXZlbgoraWYgc3VjaCBob2xkZXIgb3Igb3RoZXIgcGFydHkgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YKK3N1Y2ggZGFtYWdlcy4KKworCitESVNUUklCVVRJT04KKz09PT09PT09PT09PQorCitSZWRpc3RyaWJ1dGlvbiBvZiB1bmNoYW5nZWQgZmlsZXMgaXMgYWxsb3dlZCBwcm92aWRlZCB0aGF0IGFsbCBmaWxlcwordGhhdCBtYWtlIHVwIHRoZSBkaXN0cmlidXRpb24gb2YgVGhlIFByb2dyYW0gYXJlIGRpc3RyaWJ1dGVkLgorSW4gcGFydGljdWxhciB0aGlzIG1lYW5zIHRoYXQgVGhlIFByb2dyYW0gaGFzIHRvIGJlIGRpc3RyaWJ1dGVkCitpbmNsdWRpbmcgaXRzIGRvY3VtZW50YXRpb24gaWYgZG9jdW1lbnRhdGlvbiB3YXMgcGFydCBvZiB0aGUgb3JpZ2luYWwKK2Rpc3RyaWJ1dGlvbi4KKworVGhlIGRpc3RyaWJ1dGlvbiBvZiBUaGUgUHJvZ3JhbSB3aWxsIGNvbnRhaW4gYSBwcm9taW5lbnQgZmlsZQorbGlzdGluZyBhbGwgdGhlIGZpbGVzIGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlLgorCitJZiB5b3UgcmVjZWl2ZSBvbmx5IHNvbWUgb2YgdGhlc2UgZmlsZXMgZnJvbSBzb21lb25lLCBjb21wbGFpbiEKKworVGhlIGRpc3RyaWJ1dGlvbiBvZiBjaGFuZ2VkIHZlcnNpb25zIG9mIGNlcnRhaW4gZmlsZXMgaW5jbHVkZWQgaW4gdGhlCitUaGUgUHJvZ3JhbSwgYW5kIHRoZSByZXVzZSBvZiBjb2RlIGZyb20gVGhlIFByb2dyYW0sIGFyZSBhbGxvd2VkCit1bmRlciB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworICogSXQgaXMgYWxsb3dlZCBvbmx5IGlmIHRoZSBsZWdhbCBub3RpY2UgaW4gdGhlIGZpbGUgZG9lcyBub3QKKyAgIGV4cHJlc3NseSBmb3JiaWQgaXQuCisgICBTZWUgbm90ZSBiZWxvdywgdW5kZXIgIkNvbmRpdGlvbnMgb24gaW5kaXZpZHVhbCBmaWxlcyIuCisgCisgKiBZb3UgcmVuYW1lIHRoZSBmaWxlIGJlZm9yZSB5b3UgbWFrZSBhbnkgY2hhbmdlcyB0byBpdCwgdW5sZXNzIHRoZQorICAgZmlsZSBleHBsaWNpdGx5IHNheXMgdGhhdCByZW5hbWluZyBpcyBub3QgcmVxdWlyZWQuICBBbnkgc3VjaCBjaGFuZ2VkCisgICBmaWxlcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGEgbGljZW5zZSB0aGF0IGZvcmJpZHMgZGlzdHJpYnV0aW9uCisgICBvZiB0aG9zZSBmaWxlcywgYW5kIGFueSBmaWxlcyBkZXJpdmVkIGZyb20gdGhlbSwgdW5kZXIgdGhlIG5hbWVzIHVzZWQKKyAgIGJ5IHRoZSBvcmlnaW5hbCBmaWxlcyBpbiB0aGUgZGlzdHJpYnV0aW9uIG9mIFRoZSBQcm9ncmFtLgorCisgKiBZb3UgY2hhbmdlIGFueSBgaWRlbnRpZmljYXRpb24gc3RyaW5nYCBpbiBUaGUgUHJvZ3JhbSB0byBjbGVhcmx5IAorICAgaW5kaWNhdGUgdGhhdCB0aGUgZmlsZSBpcyBub3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgc3lzdGVtLgorCisgKiBJZiBUaGUgUHJvZ3JhbSBpbmNsdWRlcyBhbiBgZXJyb3IgcmVwb3J0IGFkZHJlc3NgIHNvIHRoYXQgZXJyb3JzCisgICBtYXkgYmUgcmVwb3J0ZWQgdG8gVGhlIENvcHlyaWdodCBIb2xkZXIsIG9yIG90aGVyIHNwZWNpZmllZAorICAgYWRkcmVzc2VzLCB0aGlzIGFkZHJlc3MgbXVzdCBiZSBjaGFuZ2VkIGluIGFueSBtb2RpZmllZCB2ZXJzaW9ucyBvZgorICAgVGhlIFByb2dyYW0sIHNvIHRoYXQgcmVwb3J0cyBmb3IgZmlsZXMgbm90IG1haW50YWluZWQgYnkgdGhlCisgICBvcmlnaW5hbCBwcm9ncmFtIG1haW50YWluZXJzIGFyZSBkaXJlY3RlZCB0byB0aGUgbWFpbnRhaW5lcnMgb2YgdGhlCisgICBjaGFuZ2VkIGZpbGVzLiAKKworICogWW91IGFja25vd2xlZGdlIHRoZSBzb3VyY2UgYW5kIGF1dGhvcnNoaXAgb2YgdGhlIG9yaWdpbmFsIHZlcnNpb24KKyAgIGluIHRoZSBtb2RpZmllZCBmaWxlLgorCisgKiBZb3UgYWxzbyBkaXN0cmlidXRlIHRoZSB1bm1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUgb3IKKyAgIGFsdGVybmF0aXZlbHkgcHJvdmlkZSBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHNvIHRoYXQgdGhlCisgICB1c2VyIG9mIHlvdXIgbW9kaWZpZWQgZmlsZSBjYW4gYmUgcmVhc29uYWJseSBleHBlY3RlZCB0byBiZQorICAgYWJsZSB0byBvYnRhaW4gYW4gb3JpZ2luYWwsIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbS4KKyAgIEZvciBleGFtcGxlLCB5b3UgbWF5IHNwZWNpZnkgYSBVUkwgdG8gYSBzaXRlIHRoYXQgeW91IGV4cGVjdAorICAgd2lsbCBmcmVlbHkgcHJvdmlkZSB0aGUgdXNlciB3aXRoIGEgY29weSBvZiBUaGUgUHJvZ3JhbSAoZWl0aGVyCisgICB0aGUgdmVyc2lvbiBvbiB3aGljaCB5b3VyIG1vZGlmaWNhdGlvbiBpcyBiYXNlZCwgb3IgcGVyaGFwcyBhCisgICBsYXRlciB2ZXJzaW9uKS4KKworICogSWYgVGhlIFByb2dyYW0gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoLCBvciBpcyBiYXNlZCBvbiwgTGFUZVgsCisgICB0aGVuIGZpbGVzIHdpdGggdGhlIGZvbGxvd2luZyBmaWxlIGV4dGVuc2lvbnMgd2hpY2ggaGF2ZSBzcGVjaWFsCisgICBtZWFuaW5nIGluIExhVGVYIFNvZnR3YXJlLCBoYXZlIHNwZWNpYWwgbW9kaWZpY2F0aW9uIHJ1bGVzIHVuZGVyIHRoZQorICAgbGljZW5zZToKKyAKKyAgICAtIEZpbGVzIHdpdGggZXh0ZW5zaW9uIGAuaW5zYCAoaW5zdGFsbGF0aW9uIGZpbGVzKTogdGhlc2UgZmlsZXMgbWF5CisgICAgICBub3QgYmUgbW9kaWZpZWQgYXQgYWxsIGJlY2F1c2UgdGhleSBjb250YWluIHRoZSBsZWdhbCBub3RpY2VzCisgICAgICB0aGF0IGFyZSBwbGFjZWQgaW4gdGhlIGdlbmVyYXRlZCBmaWxlcy4KKyAKKyAgICAtIEZpbGVzIHdpdGggZXh0ZW5zaW9uIGAuZmRgIChMYVRlWCBmb250IGRlZmluaXRpb25zIGZpbGVzKTogdGhlc2UKKyAgICAgIGZpbGVzIGFyZSBhbGxvd2VkIHRvIGJlIG1vZGlmaWVkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIG5hbWUsIGJ1dAorICAgICAgb25seSB0byBlbmFibGUgdXNlIG9mIGFsbCBhdmFpbGFibGUgZm9udHMgYW5kIHRvIHByZXZlbnQgYXR0ZW1wdHMKKyAgICAgIHRvIGFjY2VzcyB1bmF2YWlsYWJsZSBmb250cy4gSG93ZXZlciwgbW9kaWZpZWQgZmlsZXMgYXJlIG5vdAorICAgICAgYWxsb3dlZCB0byBiZSBkaXN0cmlidXRlZCBpbiBwbGFjZSBvZiBvcmlnaW5hbCBmaWxlcy4KKyAKKyAgICAtIEZpbGVzIHdpdGggZXh0ZW5zaW9uIGAuY2ZnYCAoY29uZmlndXJhdGlvbiBmaWxlcyk6IHRoZXNlIGZpbGVzCisgICAgICBjYW4gYmUgY3JlYXRlZCBvciBtb2RpZmllZCB0byBlbmFibGUgZWFzeSBjb25maWd1cmF0aW9uIG9mIHRoZQorICAgICAgc3lzdGVtLiAgVGhlIGRvY3VtZW50YXRpb24gaW4gY2ZnZ3VpZGUudGV4IGluIHRoZSBiYXNlIExhVGVYCisgICAgICBkaXN0cmlidXRpb24gZGVzY3JpYmVzIHdoZW4gaXQgbWFrZXMgc2Vuc2UgdG8gbW9kaWZ5IG9yIGdlbmVyYXRlCisgICAgICBzdWNoIGZpbGVzLgorIAorCitUaGUgYWJvdmUgcmVzdHJpY3Rpb25zIGFyZSBub3QgaW50ZW5kZWQgdG8gcHJvaGliaXQsIGFuZCBoZW5jZSBkbworbm90IGFwcGx5IHRvLCB0aGUgdXBkYXRpbmcsIGJ5IGFueSBtZXRob2QsIG9mIGEgZmlsZSBzbyB0aGF0IGl0CitiZWNvbWVzIGlkZW50aWNhbCB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhhdCBmaWxlIGluIFRoZSBQcm9ncmFtLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTk9URVMKKz09PT09CisKK1dlIGJlbGlldmUgdGhhdCB0aGVzZSByZXF1aXJlbWVudHMgZ2l2ZSB5b3UgdGhlIGZyZWVkb20geW91IHRvIG1ha2UKK21vZGlmaWNhdGlvbnMgdGhhdCBjb25mb3JtIHdpdGggd2hhdGV2ZXIgdGVjaG5pY2FsIHNwZWNpZmljYXRpb25zIHlvdQord2lzaCwgd2hpbHN0IG1haW50YWluaW5nIHRoZSBhdmFpbGFiaWxpdHksIGludGVncml0eSBhbmQgcmVsaWFiaWxpdHkgb2YKK1RoZSBQcm9ncmFtLiAgSWYgeW91IGRvIG5vdCBzZWUgaG93IHRvIGFjaGlldmUgeW91ciBnb2FsIHdoaWxzdAorYWRoZXJpbmcgdG8gdGhlc2UgcmVxdWlyZW1lbnRzIHRoZW4gcmVhZCB0aGUgZG9jdW1lbnQgY2ZnZ3VpZGUudGV4CitpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZm9yIHN1Z2dlc3Rpb25zLiAKKworQmVjYXVzZSBvZiB0aGUgcG9ydGFiaWxpdHkgYW5kIGV4Y2hhbmdlYWJpbGl0eSBhc3BlY3RzIG9mIHN5c3RlbXMKK2xpa2UgTGFUZVgsIFRoZSBMYVRlWDMgUHJvamVjdCBkZXByZWNhdGVzIHRoZSBkaXN0cmlidXRpb24gb2YKK25vbi1zdGFuZGFyZCB2ZXJzaW9ucyBvZiBjb21wb25lbnRzIG9mIExhVGVYIG9yIG9mIGdlbmVyYWxseSBhdmFpbGFibGUKK2NvbnRyaWJ1dGVkIGNvZGUgZm9yIHRoZW0gYnV0IHN1Y2ggZGlzdHJpYnV0aW9ucyBhcmUgcGVybWl0dGVkIHVuZGVyIHRoZQorYWJvdmUgcmVzdHJpY3Rpb25zLgorCitUaGUgZG9jdW1lbnQgbW9kZ3VpZGUudGV4IGluIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBkZXRhaWxzCit0aGUgcmVhc29ucyBmb3IgdGhlIGxlZ2FsIHJlcXVpcmVtZW50cyBkZXRhaWxlZCBhYm92ZS4KK0V2ZW4gaWYgVGhlIFByb2dyYW0gaXMgdW5yZWxhdGVkIHRvIExhVGVYLCB0aGUgYXJndW1lbnQgaW4KK21vZGd1aWRlLnRleCBtYXkgc3RpbGwgYXBwbHksIGFuZCBzaG91bGQgYmUgcmVhZCBiZWZvcmUKK2EgbW9kaWZpZWQgdmVyc2lvbiBvZiBUaGUgUHJvZ3JhbSBpcyBkaXN0cmlidXRlZC4KKworCitDb25kaXRpb25zIG9uIGluZGl2aWR1YWwgZmlsZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgaW5kaXZpZHVhbCBmaWxlcyBtYXkgYmVhciBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgd2hpY2ggc3VwZXJzZWRlCit0aGUgZ2VuZXJhbCBjb25kaXRpb25zIG9uIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGNvbnRhaW5lZCBpbgordGhpcyBmaWxlLiBJZiB0aGVyZSBhcmUgYW55IHN1Y2ggZmlsZXMsIHRoZSBkaXN0cmlidXRpb24gb2YgVGhlCitQcm9ncmFtIHdpbGwgY29udGFpbiBhIHByb21pbmVudCBmaWxlIHRoYXQgbGlzdHMgYWxsIHRoZSBleGNlcHRpb25hbAorZmlsZXMuCisKK1R5cGljYWwgZXhhbXBsZXMgb2YgZmlsZXMgd2l0aCBtb3JlIHJlc3RyaWN0aXZlIG1vZGlmaWNhdGlvbgorY29uZGl0aW9ucyB3b3VsZCBiZSBmaWxlcyB0aGF0IGNvbnRhaW4gdGhlIHRleHQgb2YgY29weXJpZ2h0IG5vdGljZXMuCisKKyAqIFRoZSBjb25kaXRpb25zIG9uIGluZGl2aWR1YWwgZmlsZXMgZGlmZmVyIG9ubHkgaW4gdGhlCisgICBleHRlbnQgb2YgKm1vZGlmaWNhdGlvbiogdGhhdCBpcyBhbGxvd2VkLgorCisgKiBUaGUgY29uZGl0aW9ucyBvbiAqZGlzdHJpYnV0aW9uKiBhcmUgdGhlIHNhbWUgZm9yIGFsbCB0aGUgZmlsZXMuCisgICBUaHVzIGEgKHJlKWRpc3RyaWJ1dG9yIG9mIGEgY29tcGxldGUsIHVuY2hhbmdlZCBjb3B5IG9mIFRoZSBQcm9ncmFtCisgICBuZWVkIG1lZXQgb25seSB0aGUgY29uZGl0aW9ucyBpbiB0aGlzIGZpbGU7IGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8KKyAgIGNoZWNrIHRoZSBoZWFkZXIgb2YgZXZlcnkgZmlsZSBpbiB0aGUgZGlzdHJpYnV0aW9uIHRvIGNoZWNrIHRoYXQgYQorICAgZGlzdHJpYnV0aW9uIG1lZXRzIHRoZXNlIHJlcXVpcmVtZW50cy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4MzMxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjEKQEAgLTAsMCArMSwzMTYgQEAKKworCitUaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZQorPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KKworTFBQTCBWZXJzaW9uIDEuMSAgMTk5OS0wNy0xMAorCitDb3B5cmlnaHQgMTk5OSBMYVRlWDMgUHJvamVjdAorICAgIEV2ZXJ5b25lIGlzIGFsbG93ZWQgdG8gZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcworICAgIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBtb2RpZmljYXRpb24gb2YgaXQgaXMgbm90IGFsbG93ZWQuCisKKworUFJFQU1CTEUKKz09PT09PT09CisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlIChMUFBMKSBpcyB0aGUgbGljZW5zZSB1bmRlciB3aGljaCB0aGUKK2Jhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGlzIGRpc3RyaWJ1dGVkLgorCitZb3UgbWF5IHVzZSB0aGlzIGxpY2Vuc2UgZm9yIGFueSBwcm9ncmFtIHRoYXQgeW91IGhhdmUgd3JpdHRlbiBhbmQgd2lzaAordG8gZGlzdHJpYnV0ZS4gIFRoaXMgbGljZW5zZSBtYXkgYmUgcGFydGljdWxhcmx5IHN1aXRhYmxlIGlmIHlvdXIKK3Byb2dyYW0gaXMgVGVYLXJlbGF0ZWQgKHN1Y2ggYXMgYSBMYVRlWCBwYWNrYWdlKSwgYnV0IHlvdSBtYXkgdXNlIGl0CitldmVuIGlmIHlvdXIgcHJvZ3JhbSBpcyB1bnJlbGF0ZWQgdG8gVGVYLiAgVGhlIHNlY3Rpb24gYFdIRVRIRVIgQU5EIEhPVworVE8gRElTVFJJQlVURSBQUk9HUkFNUyBVTkRFUiBUSElTIExJQ0VOU0VgLCBiZWxvdywgZ2l2ZXMgaW5zdHJ1Y3Rpb25zLAorZXhhbXBsZXMsIGFuZCByZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMgd2hvIGFyZSBjb25zaWRlcmluZworZGlzdHJpYnV0aW5nIHRoZWlyIHByb2dyYW1zIHVuZGVyIHRoaXMgbGljZW5zZS4KKworSW4gdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBgVGhlIFByb2dyYW1gIHJlZmVycyB0byBhbnkgcHJvZ3JhbQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBsaWNlbnNlLgorCitUaGlzIGxpY2Vuc2UgZ2l2ZXMgY29uZGl0aW9ucyB1bmRlciB3aGljaCBUaGUgUHJvZ3JhbSBtYXkgYmUgZGlzdHJpYnV0ZWQKK2FuZCBjb25kaXRpb25zIHVuZGVyIHdoaWNoIG1vZGlmaWVkIHZlcnNpb25zIG9mIFRoZSBQcm9ncmFtIG1heSBiZQorZGlzdHJpYnV0ZWQuICBJbmRpdmlkdWFsIGZpbGVzIG9mIFRoZSBQcm9ncmFtIG1heSBiZWFyIHN1cHBsZW1lbnRhcnkKK2FuZC9vciBzdXBlcnNlZGluZyBjb25kaXRpb25zIG9uIG1vZGlmaWNhdGlvbiBvZiB0aGVtc2VsdmVzIGFuZCBvbiB0aGUKK2Rpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGVtc2VsdmVzLCBidXQgKm5vKiBmaWxlIG9mIFRoZQorUHJvZ3JhbSBtYXkgYmVhciBzdXBwbGVtZW50YXJ5IG9yIHN1cGVyc2VkaW5nIGNvbmRpdGlvbnMgb24gdGhlCitkaXN0cmlidXRpb24gb2YgYW4gdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBmaWxlLiAgQSBkaXN0cmlidXRvciB3aXNoaW5nCit0byBkaXN0cmlidXRlIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbSB0aGVyZWZvcmUKK25lZWRzIHRvIGNoZWNrIHRoZSBjb25kaXRpb25zIG9ubHkgaW4gdGhpcyBsaWNlbnNlIGFuZCBub3doZXJlIGVsc2UuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBkaXN0cmlidXRpb24gYW5kL29yIG1vZGlmaWNhdGlvbiBvZiBUaGUgUHJvZ3JhbQorYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgbGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBJbgorcGFydGljdWxhciwgdGhlIGFjdCBvZiBydW5uaW5nIFRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLgorCitXZSwgdGhlIExhVGVYMyBQcm9qZWN0LCBiZWxpZXZlIHRoYXQgdGhlIGNvbmRpdGlvbnMgYmVsb3cgZ2l2ZSB5b3UKK3RoZSBmcmVlZG9tIHRvIG1ha2UgYW5kIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgVGhlIFByb2dyYW0KK3RoYXQgY29uZm9ybSB3aXRoIHdoYXRldmVyIHRlY2huaWNhbCBzcGVjaWZpY2F0aW9ucyB5b3Ugd2lzaCB3aGlsZQorbWFpbnRhaW5pbmcgdGhlIGF2YWlsYWJpbGl0eSwgaW50ZWdyaXR5LCBhbmQgcmVsaWFiaWxpdHkgb2YKK1RoZSBQcm9ncmFtLiAgSWYgeW91IGRvIG5vdCBzZWUgaG93IHRvIGFjaGlldmUgeW91ciBnb2FsIHdoaWxlIAorbWVldGluZyB0aGVzZSBjb25kaXRpb25zLCB0aGVuIHJlYWQgdGhlIGRvY3VtZW50IGBjZmdndWlkZS50ZXhgCitpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZm9yIHN1Z2dlc3Rpb25zLgorCisKK0NPTkRJVElPTlMgT04gRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworWW91IG1heSBkaXN0cmlidXRlIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbS4KK0Rpc3RyaWJ1dGlvbiBvZiBvbmx5IHBhcnQgb2YgVGhlIFByb2dyYW0gaXMgbm90IGFsbG93ZWQuCisKK1lvdSBtYXkgbm90IG1vZGlmeSBpbiBhbnkgd2F5IGEgZmlsZSBvZiBUaGUgUHJvZ3JhbSB0aGF0IGJlYXJzIGEgbGVnYWwKK25vdGljZSBmb3JiaWRkaW5nIG1vZGlmaWNhdGlvbiBvZiB0aGF0IGZpbGUuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBhIG1vZGlmaWVkIGZpbGUgb2YgVGhlIFByb2dyYW0gaWYsIGFuZCBvbmx5IGlmLCB0aGUKK2ZvbGxvd2luZyBlaWdodCBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgMS4gWW91IG11c3QgbWVldCBhbnkgYWRkaXRpb25hbCBjb25kaXRpb25zIGJvcm5lIGJ5IHRoZSBmaWxlIG9uIHRoZQorICAgICBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlIGFzIGRlc2NyaWJlZCBiZWxvdworICAgICBpbiB0aGUgc3Vic2VjdGlvbiBgQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIEluZGl2aWR1YWwgRmlsZXMgb2YKKyAgICAgVGhlIFByb2dyYW1gLgorIAorICAyLiBJZiB0aGUgZmlsZSBpcyBhIExhVGVYIHNvZnR3YXJlIGZpbGUsIHRoZW4geW91IG11c3QgbWVldCBhbnkKKyAgICAgYXBwbGljYWJsZSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgb24gdGhlIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkCisgICAgIHZlcnNpb24gb2YgdGhlIGZpbGUgdGhhdCBhcmUgZGVzY3JpYmVkIGJlbG93IGluIHRoZSBzdWJzZWN0aW9uCisgICAgIGBBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gTGFUZVggU29mdHdhcmUgRmlsZXNgLgorIAorICAzLiBZb3UgbXVzdCBub3QgZGlzdHJpYnV0ZSB0aGUgbW9kaWZpZWQgZmlsZSB3aXRoIHRoZSBmaWxlbmFtZSBvZiB0aGUKKyAgICAgb3JpZ2luYWwgZmlsZS4KKyAKKyAgNC4gSW4gdGhlIG1vZGlmaWVkIGZpbGUsIHlvdSBtdXN0IGFja25vd2xlZGdlIHRoZSBhdXRob3JzaGlwIGFuZAorICAgICBuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLCBhbmQgdGhlIG5hbWUgKGlmIGFueSkgb2YgdGhlIHByb2dyYW0KKyAgICAgd2hpY2ggY29udGFpbnMgaXQuCisgCisgIDUuIFlvdSBtdXN0IGNoYW5nZSBhbnkgaWRlbnRpZmljYXRpb24gc3RyaW5nIGluIHRoZSBmaWxlIHRvIGluZGljYXRlCisgICAgIGNsZWFybHkgdGhhdCB0aGUgbW9kaWZpZWQgZmlsZSBpcyBub3QgcGFydCBvZiBUaGUgUHJvZ3JhbS4KKyAKKyAgNi4gWW91IG11c3QgY2hhbmdlIGFueSBhZGRyZXNzZXMgaW4gdGhlIG1vZGlmaWVkIGZpbGUgZm9yIHRoZQorICAgICByZXBvcnRpbmcgb2YgZXJyb3JzIGluIHRoZSBmaWxlIG9yIGluIFRoZSBQcm9ncmFtIGdlbmVyYWxseSB0bworICAgICBlbnN1cmUgdGhhdCByZXBvcnRzIGZvciBmaWxlcyBubyBsb25nZXIgbWFpbnRhaW5lZCBieSB0aGUgb3JpZ2luYWwKKyAgICAgbWFpbnRhaW5lcnMgd2lsbCBiZSBkaXJlY3RlZCB0byB0aGUgbWFpbnRhaW5lcnMgb2YgdGhlIG1vZGlmaWVkCisgICAgIGZpbGVzLgorIAorICA3LiBZb3UgbXVzdCBkaXN0cmlidXRlIHRoZSBtb2RpZmllZCBmaWxlIHVuZGVyIGEgbGljZW5zZSB0aGF0IGZvcmJpZHMKKyAgICAgZGlzdHJpYnV0aW9uIGJvdGggb2YgdGhlIG1vZGlmaWVkIGZpbGUgYW5kIG9mIGFueSBmaWxlcyBkZXJpdmVkCisgICAgIGZyb20gdGhlIG1vZGlmaWVkIGZpbGUgd2l0aCB0aGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUuCisgCisgIDguIFlvdSBtdXN0IGRvIGVpdGhlciAoQSkgb3IgKEIpOgorCisgICAgICAgKEEpIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIFRoZSBQcm9ncmFtICh0aGF0IGlzLCBhIGNvbXBsZXRlLAorICAgICAgICAgICB1bm1vZGlmaWVkIGNvcHkgb2YgVGhlIFByb2dyYW0pIHRvZ2V0aGVyIHdpdGggdGhlIG1vZGlmaWVkCisgICAgICAgICAgIGZpbGU7IGlmIHlvdXIgZGlzdHJpYnV0aW9uIG9mIHRoZSBtb2RpZmllZCBmaWxlIGlzIG1hZGUgYnkKKyAgICAgICAgICAgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgdGhlIG1vZGlmaWVkIGZpbGUgZnJvbSBhIGRlc2lnbmF0ZWQKKyAgICAgICAgICAgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSBUaGUgUHJvZ3JhbQorICAgICAgICAgICBmcm9tIHRoZSBzYW1lIHBsYWNlIG1lZXRzIHRoaXMgY29uZGl0aW9uLCBldmVuIHRob3VnaCB0aGlyZAorICAgICAgICAgICBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgVGhlIFByb2dyYW0gYWxvbmcgd2l0aCB0aGUKKyAgICAgICAgICAgbW9kaWZpZWQgZmlsZTsKKworICAgICAgIChCKSBwcm92aWRlIHRvIHRob3NlIHdobyByZWNlaXZlIHRoZSBtb2RpZmllZCBmaWxlIGluZm9ybWF0aW9uCisgICAgICAgICAgIHRoYXQgaXMgc3VmZmljaWVudCBmb3IgdGhlbSB0byBvYnRhaW4gYSBjb3B5IG9mIFRoZSBQcm9ncmFtOworICAgICAgICAgICBmb3IgZXhhbXBsZSwgeW91IG1heSBwcm92aWRlIGEgVW5pZm9ybSBSZXNvdXJjZSBMb2NhdG9yIChVUkwpCisgICAgICAgICAgIGZvciBhIHNpdGUgdGhhdCB5b3UgZXhwZWN0IHdpbGwgcHJvdmlkZSB0aGVtIHdpdGggYSBjb3B5IG9mIAorICAgICAgICAgICBUaGUgUHJvZ3JhbSBmcmVlIG9mIGNoYXJnZSAoZWl0aGVyIHRoZSB2ZXJzaW9uIGZyb20gd2hpY2gKKyAgICAgICAgICAgeW91ciBtb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgb3IgcGVyaGFwcyBhIGxhdGVyIHZlcnNpb24pLgorCitOb3RlIHRoYXQgaW4gdGhlIGFib3ZlLCBgZGlzdHJpYnV0aW9uYCBvZiBhIGZpbGUgbWVhbnMgbWFraW5nIHRoZQorZmlsZSBhdmFpbGFibGUgdG8gb3RoZXJzIGJ5IGFueSBtZWFucy4gIFRoaXMgaW5jbHVkZXMsIGZvciBpbnN0YW5jZSwKK2luc3RhbGxpbmcgdGhlIGZpbGUgb24gYW55IG1hY2hpbmUgaW4gc3VjaCBhIHdheSB0aGF0IHRoZSBmaWxlIGlzCithY2Nlc3NpYmxlIGJ5IHVzZXJzIG90aGVyIHRoYW4geW91cnNlbGYuICBgTW9kaWZpY2F0aW9uYCBvZiBhIGZpbGUKK21lYW5zIGFueSBwcm9jZWR1cmUgdGhhdCBwcm9kdWNlcyBhIGRlcml2YXRpdmUgZmlsZSB1bmRlciBhbnkKK2FwcGxpY2FibGUgbGF3IC0tIHRoYXQgaXMsIGEgZmlsZSBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBmaWxlIG9yCithIHNpZ25pZmljYW50IHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMKK2FuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKworQ2hhbmdpbmcgdGhlIG5hbWUgb2YgYSBmaWxlIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBtb2RpZmljYXRpb24gb2YKK3RoZSBmaWxlLgorCitUaGUgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlIGRvIG5vdCBoYXZlIHRvIGJlCithcHBsaWVkIHRvIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKK2Fib3ZlIGNvbmRpdGlvbnMuICBOb3RlLCBob3dldmVyLCB0aGF0IENvbmRpdGlvbiA3LiBkb2VzIGFwcGx5IHRvCithbnkgc3VjaCBtb2RpZmllZCBmaWxlLgorCitUaGUgY29uZGl0aW9ucyBhYm92ZSBhcmUgbm90IGludGVuZGVkIHRvIHByb2hpYml0LCBhbmQgaGVuY2UgZG8gbm90CithcHBseSB0bywgdGhlIHVwZGF0aW5nLCBieSBhbnkgbWV0aG9kLCBvZiBhIGZpbGUgc28gdGhhdCBpdCBiZWNvbWVzCitpZGVudGljYWwgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoYXQgZmlsZSBvZiBUaGUgUHJvZ3JhbS4KKworIAorCitBIFJlY29tbWVuZGF0aW9uIG9uIE1vZGlmaWNhdGlvbiBXaXRob3V0IERpc3RyaWJ1dGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgaXMgd2lzZSBuZXZlciB0byBtb2RpZnkgYSBmaWxlIG9mIFRoZSBQcm9ncmFtLCBldmVuIGZvciB5b3VyIG93bgorcGVyc29uYWwgdXNlLCB3aXRob3V0IGFsc28gbWVldGluZyB0aGUgYWJvdmUgZWlnaHQgY29uZGl0aW9ucyBmb3IKK2Rpc3RyaWJ1dGluZyB0aGUgbW9kaWZpZWQgZmlsZS4gIFdoaWxlIHlvdSBtaWdodCBpbnRlbmQgdGhhdCBzdWNoCittb2RpZmllZCBmaWxlcyB3aWxsIG5ldmVyIGJlIGRpc3RyaWJ1dGVkLCBvZnRlbiB0aGlzIHdpbGwgaGFwcGVuIGJ5CithY2NpZGVudCAtLSB5b3UgbWF5IGZvcmdldCB0aGF0IHlvdSBoYXZlIG1vZGlmaWVkIHRoZSBmaWxlOyBvciBpdCBtYXkKK25vdCBvY2N1ciB0byB5b3Ugd2hlbiBhbGxvd2luZyBvdGhlcnMgdG8gYWNjZXNzIHRoZSBtb2RpZmllZCBmaWxlCit0aGF0IHlvdSBhcmUgdGh1cyBkaXN0cmlidXRpbmcgaXQgYW5kIHZpb2xhdGluZyB0aGUgY29uZGl0aW9ucyBvZgordGhpcyBsaWNlbnNlLiAgSXQgaXMgdXN1YWxseSBpbiB5b3VyIGJlc3QgaW50ZXJlc3QgdG8ga2VlcCB5b3VyIGNvcHkKK29mIFRoZSBQcm9ncmFtIGlkZW50aWNhbCB3aXRoIHRoZSBwdWJsaWMgb25lLiAgTWFueSBwcm9ncmFtcyBwcm92aWRlCit3YXlzIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoYXQgcHJvZ3JhbSB3aXRob3V0IGFsdGVyaW5nIGl0cworbGljZW5zZWQgZmlsZXMuCisKKworQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIEluZGl2aWR1YWwgRmlsZXMgb2YgVGhlIFByb2dyYW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuIGluZGl2aWR1YWwgZmlsZSBvZiBUaGUgUHJvZ3JhbSBtYXkgYmVhciBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgdGhhdAorc3VwcGxlbWVudCBhbmQvb3Igc3VwZXJzZWRlIHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZSBpZiwgYW5kIG9ubHkKK2lmLCBzdWNoIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBleGNsdXNpdmVseSBjb25jZXJuIG1vZGlmaWNhdGlvbiBvZiB0aGUKK2ZpbGUgb3IgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgZmlsZS4gIFRoZSBjb25kaXRpb25zCitvbiBpbmRpdmlkdWFsIGZpbGVzIG9mIFRoZSBQcm9ncmFtIHRoZXJlZm9yZSBtYXkgZGlmZmVyIG9ubHkgd2l0aAorcmVzcGVjdCB0byB0aGUga2luZCBhbmQgZXh0ZW50IG9mIG1vZGlmaWNhdGlvbiBvZiB0aG9zZSBmaWxlcyB0aGF0CitpcyBhbGxvd2VkLCBhbmQgd2l0aCByZXNwZWN0IHRvIHRoZSBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMKK29mIHRob3NlIGZpbGVzLgorCisKK0FkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBMYVRlWCBTb2Z0d2FyZSBGaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGEgZmlsZSBvZiBUaGUgUHJvZ3JhbSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggTGFUZVggKHRoYXQgaXMsCitpZiBpdCBpcyBhIExhVGVYIHNvZnR3YXJlIGZpbGUpLCB0aGVuIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbAorY29uZGl0aW9ucywgd2hpY2ggc3VwcGxlbWVudCBhbmQvb3Igc3VwZXJzZWRlIHRoZSBjb25kaXRpb25zCithYm92ZSwgYXBwbHkgdG8gdGhlIGZpbGUgYWNjb3JkaW5nIHRvIGl0cyBmaWxlbmFtZSBleHRlbnNpb246CisKKyAgLSBZb3UgbWF5IG5vdCBtb2RpZnkgYW55IGZpbGUgd2l0aCBmaWxlbmFtZSBleHRlbnNpb24gYC5pbnNgIHNpbmNlCisgICAgdGhlc2UgYXJlIGluc3RhbGxhdGlvbiBmaWxlcyBjb250YWluaW5nIHRoZSBsZWdhbCBub3RpY2VzIHRoYXQgYXJlCisgICAgcGxhY2VkIGluIHRoZSBmaWxlcyB0aGV5IGdlbmVyYXRlLgorIAorICAtIFlvdSBtYXkgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBmaWxlcyB3aXRoIGZpbGVuYW1lCisgICAgZXh0ZW5zaW9uIGAuZmRgIChMYVRlWCBmb250IGRlZmluaXRpb24gZmlsZXMpIHVuZGVyIHRoZSBzdGFuZGFyZAorICAgIGNvbmRpdGlvbnMgb2YgdGhlIExQUEwgYXMgZGVzY3JpYmVkIGFib3ZlLiAgWW91IG1heSBhbHNvIGRpc3RyaWJ1dGUKKyAgICBzdWNoIG1vZGlmaWVkIExhVGVYIGZvbnQgZGVmaW5pdGlvbiBmaWxlcyB3aXRoIHRoZWlyIG9yaWdpbmFsIG5hbWVzCisgICAgcHJvdmlkZWQgdGhhdDoKKyAgICAoMSkgdGhlIG9ubHkgY2hhbmdlcyB0byB0aGUgb3JpZ2luYWwgZmlsZXMgZWl0aGVyIGVuYWJsZSB1c2Ugb2YKKyAgICAgICAgYXZhaWxhYmxlIGZvbnRzIG9yIHByZXZlbnQgYXR0ZW1wdHMgdG8gYWNjZXNzIHVuYXZhaWxhYmxlIGZvbnRzOworICAgICgyKSB5b3UgYWxzbyBkaXN0cmlidXRlIHRoZSBvcmlnaW5hbCwgdW5tb2RpZmllZCBmaWxlcyAoVGVYIGlucHV0CisgICAgICAgIHBhdGhzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgd2hpY2ggc2V0IG9mIExhVGVYIGZvbnQgZGVmaW5pdGlvbgorICAgICAgICBmaWxlcyBpcyBhY3R1YWxseSB1c2VkIGJ5IFRlWCkuCisKKyAgLSBZb3UgbWF5IGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgZmlsZXMgd2l0aCBmaWxlbmFtZQorICAgIGV4dGVuc2lvbiBgLmNmZ2AgKGNvbmZpZ3VyYXRpb24gZmlsZXMpIHdpdGggdGhlaXIgb3JpZ2luYWwgbmFtZXMuCisgICAgVGhlIFByb2dyYW0gbWF5IChhbmQgdXN1YWxseSB3aWxsKSBzcGVjaWZ5IHRoZSByYW5nZSBvZiBjb21tYW5kcworICAgIHRoYXQgYXJlIGFsbG93ZWQgaW4gYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAKK0JlY2F1c2Ugb2YgcG9ydGFiaWxpdHkgYW5kIGV4Y2hhbmdlYWJpbGl0eSBpc3N1ZXMgaW4gTGFUZVggc29mdHdhcmUsCitUaGUgTGFUZVgzIFByb2plY3QgZGVwcmVjYXRlcyB0aGUgZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zIG9mCitjb21wb25lbnRzIG9mIExhVGVYIG9yIG9mIGdlbmVyYWxseSBhdmFpbGFibGUgY29udHJpYnV0ZWQgY29kZSBmb3IgdGhlbSwKK2J1dCBzdWNoIGRpc3RyaWJ1dGlvbiBjYW4gbWVldCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2UuCisKKworTk8gV0FSUkFOVFkKKz09PT09PT09PT09CisKK1RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciBUaGUgUHJvZ3JhbS4gIEV4Y2VwdCB3aGVuIG90aGVyd2lzZSBzdGF0ZWQgaW4KK3dyaXRpbmcsIFRoZSBDb3B5cmlnaHQgSG9sZGVyIHByb3ZpZGVzIFRoZSBQcm9ncmFtIGBhcyBpc2AsIHdpdGhvdXQKK3dhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdAorbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yCithIHBhcnRpY3VsYXIgcHVycG9zZS4gIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2UKK29mIFRoZSBQcm9ncmFtIGlzIHdpdGggeW91LiAgU2hvdWxkIFRoZSBQcm9ncmFtIHByb3ZlIGRlZmVjdGl2ZSwgeW91Cithc3N1bWUgdGhlIGNvc3Qgb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciwgb3IgY29ycmVjdGlvbi4KKworSW4gbm8gZXZlbnQgdW5sZXNzIGFncmVlZCB0byBpbiB3cml0aW5nIHdpbGwgVGhlIENvcHlyaWdodCBIb2xkZXIsIG9yCithbnkgYXV0aG9yIG5hbWVkIGluIHRoZSBmaWxlcyBvZiBUaGUgUHJvZ3JhbSwgb3IgYW55IG90aGVyIHBhcnR5IHdobyBtYXkKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBUaGUgUHJvZ3JhbSBhcyBwZXJtaXR0ZWQgYmVsb3csIGJlIGxpYWJsZSB0bworeW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IKK2NvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiBhbnkgdXNlIG9mIFRoZSBQcm9ncmFtIG9yIG91dCBvZgoraW5hYmlsaXR5IHRvIHVzZSBUaGUgUHJvZ3JhbSAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGxvc3Mgb2YKK2RhdGEsIGRhdGEgYmVpbmcgcmVuZGVyZWQgaW5hY2N1cmF0ZSwgb3IgbG9zc2VzIHN1c3RhaW5lZCBieSBhbnlvbmUgYXMKK2EgcmVzdWx0IG9mIGFueSBmYWlsdXJlIG9mIFRoZSBQcm9ncmFtIHRvIG9wZXJhdGUgd2l0aCBhbnkgb3RoZXIKK3Byb2dyYW1zKSwgZXZlbiBpZiBUaGUgQ29weXJpZ2h0IEhvbGRlciBvciBzYWlkIGF1dGhvciBvciBzYWlkIG90aGVyCitwYXJ0eSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKworV0hFVEhFUiBBTkQgSE9XIFRPIERJU1RSSUJVVEUgUFJPR1JBTVMgVU5ERVIgVEhJUyBMSUNFTlNFCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGltcG9ydGFudCBpbnN0cnVjdGlvbnMsIGV4YW1wbGVzLCBhbmQKK3JlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycyB3aG8gYXJlIGNvbnNpZGVyaW5nIGRpc3RyaWJ1dGluZyB0aGVpcgorcHJvZ3JhbXMgdW5kZXIgdGhpcyBsaWNlbnNlLiAgVGhlc2UgYXV0aG9ycyBhcmUgYWRkcmVzc2VkIGFzIGB5b3VgIGluCit0aGlzIHNlY3Rpb24uCisKKworQ2hvb3NpbmcgVGhpcyBMaWNlbnNlIG9yIEFub3RoZXIgTGljZW5zZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBmb3IgYW55IHBhcnQgb2YgeW91ciBwcm9ncmFtIHlvdSB3YW50IG9yIG5lZWQgdG8gdXNlICpkaXN0cmlidXRpb24qCitjb25kaXRpb25zIHRoYXQgZGlmZmVyIGZyb20gdGhvc2UgaW4gdGhpcyBsaWNlbnNlLCB0aGVuIGRvIG5vdCByZWZlciB0bwordGhpcyBsaWNlbnNlIGFueXdoZXJlIGluIHlvdXIgcHJvZ3JhbSBidXQgaW5zdGVhZCBkaXN0cmlidXRlIHlvdXIKK3Byb2dyYW0gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZS4gIFlvdSBtYXkgdXNlIHRoZSB0ZXh0IG9mIHRoaXMgbGljZW5zZQorYXMgYSBtb2RlbCBmb3IgeW91ciBvd24gbGljZW5zZSwgYnV0IHlvdXIgbGljZW5zZSBzaG91bGQgbm90IHJlZmVyIHRvCit0aGUgTFBQTCBvciBvdGhlcndpc2UgZ2l2ZSB0aGUgaW1wcmVzc2lvbiB0aGF0IHlvdXIgcHJvZ3JhbSBpcworZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExQUEwuCisKK1RoZSBkb2N1bWVudCBgbW9kZ3VpZGUudGV4YCBpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZXhwbGFpbnMKK3RoZSBtb3RpdmF0aW9uIGJlaGluZCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2UuICBJdCBleHBsYWlucywKK2ZvciBleGFtcGxlLCB3aHkgZGlzdHJpYnV0aW5nIExhVGVYIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgKEdQTCkgd2FzIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZS4gIEV2ZW4gaWYgeW91ciBwcm9ncmFtIGlzCit1bnJlbGF0ZWQgdG8gTGFUZVgsIHRoZSBkaXNjdXNzaW9uIGluIGBtb2RndWlkZS50ZXhgIG1heSBzdGlsbCBiZQorcmVsZXZhbnQsIGFuZCBhdXRob3JzIGludGVuZGluZyB0byBkaXN0cmlidXRlIHRoZWlyIHByb2dyYW1zIHVuZGVyIGFueQorbGljZW5zZSBhcmUgZW5jb3VyYWdlZCB0byByZWFkIGl0LgorCisKK0hvdyB0byBVc2UgVGhpcyBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyB1c2UgdGhpcyBsaWNlbnNlLCBwbGFjZSBpbiBlYWNoIG9mIHRoZSBmaWxlcyBvZiB5b3VyIHByb2dyYW0gYm90aAorYW4gZXhwbGljaXQgY29weXJpZ2h0IG5vdGljZSBpbmNsdWRpbmcgeW91ciBuYW1lIGFuZCB0aGUgeWVhciBhbmQgYWxzbworYSBzdGF0ZW1lbnQgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciBtb2RpZmljYXRpb24gb2YgdGhlIGZpbGUgaXMKK2NvbnN0cmFpbmVkIGJ5IHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZS4KKworSGVyZSBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudDoKKworICAlJSBwaWcuZHR4CisgICUlIENvcHlyaWdodCAyMDAxIE0uIFkuIE5hbWUKKyAgJQorICAlIFRoaXMgcHJvZ3JhbSBtYXkgYmUgZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyIHRoZQorICAlIGNvbmRpdGlvbnMgb2YgdGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UsIGVpdGhlciB2ZXJzaW9uIDEuMQorICAlIG9mIHRoaXMgbGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAlIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGxpY2Vuc2UgaXMgaW4KKyAgJSAgIGh0dHA6Ly93d3cubGF0ZXgtcHJvamVjdC5vcmcvbHBwbC50eHQKKyAgJSBhbmQgdmVyc2lvbiAxLjEgb3IgbGF0ZXIgaXMgcGFydCBvZiBhbGwgZGlzdHJpYnV0aW9ucyBvZiBMYVRlWCAKKyAgJSB2ZXJzaW9uIDE5OTkvMDYvMDEgb3IgbGF0ZXIuCisgICUKKyAgJSBUaGlzIHByb2dyYW0gY29uc2lzdHMgb2YgdGhlIGZpbGVzIHBpZy5kdHggYW5kIHBpZy5pbnMKKworR2l2ZW4gc3VjaCBhIG5vdGljZSBhbmQgc3RhdGVtZW50IGluIGEgZmlsZSwgdGhlIGNvbmRpdGlvbnMgZ2l2ZW4gaW4KK3RoaXMgbGljZW5zZSBkb2N1bWVudCB3b3VsZCBhcHBseSwgd2l0aCBgVGhlIFByb2dyYW1gIHJlZmVycmluZyB0byB0aGUKK3R3byBmaWxlcyBgcGlnLmR0eGAgYW5kIGBwaWcuaW5zYCwgYW5kIGBUaGUgQ29weXJpZ2h0IEhvbGRlcmAgcmVmZXJyaW5nCit0byB0aGUgcGVyc29uIGBNLiBZLiBOYW1lYC4KKworCitJbXBvcnRhbnQgUmVjb21tZW5kYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBEZWZpbmluZyBXaGF0IENvbnN0aXR1dGVzIFRoZSBQcm9ncmFtCisKKyAgIFRoZSBMUFBMIHJlcXVpcmVzIHRoYXQgZGlzdHJpYnV0aW9ucyBvZiBUaGUgUHJvZ3JhbSBjb250YWluIGFsbCB0aGUKKyAgIGZpbGVzIG9mIFRoZSBQcm9ncmFtLiAgSXQgaXMgdGhlcmVmb3JlIGltcG9ydGFudCB0aGF0IHlvdSBwcm92aWRlIGEKKyAgIHdheSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGljaCBmaWxlcyBjb25zdGl0dXRlIFRoZSBQcm9ncmFtLgorICAgVGhpcyBjb3VsZCwgZm9yIGV4YW1wbGUsIGJlIGFjaGlldmVkIGJ5IGV4cGxpY2l0bHkgbGlzdGluZyBhbGwgdGhlCisgICBmaWxlcyBvZiBUaGUgUHJvZ3JhbSBuZWFyIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIGVhY2ggZmlsZSBvciBieQorICAgdXNpbmcgYSBsaW5lIGxpa2UKKworICAgICUgVGhpcyBwcm9ncmFtIGNvbnNpc3RzIG9mIGFsbCBmaWxlcyBsaXN0ZWQgaW4gbWFuaWZlc3QudHh0LgorCisgICBpbiB0aGF0IHBsYWNlLiAgSW4gdGhlIGFic2VuY2Ugb2YgYW4gdW5lcXVpdm9jYWwgbGlzdCBpdCBtaWdodCBiZQorICAgaW1wb3NzaWJsZSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGF0IGlzIGNvbnNpZGVyZWQgYnkgeW91CisgICB0byBjb21wcmlzZSBUaGUgUHJvZ3JhbS4KKworIE5vdGluZyBFeGNlcHRpb25hbCBGaWxlcworICAKKyAgIElmIFRoZSBQcm9ncmFtIGNvbnRhaW5zIGFueSBmaWxlcyBiZWFyaW5nIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBvbgorICAgbW9kaWZpY2F0aW9uLCBvciBvbiBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMsIG9mIHRob3NlCisgICBmaWxlcyAob3RoZXIgdGhhbiB0aG9zZSBsaXN0ZWQgaW4gYEFkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBMYVRlWAorICAgU29mdHdhcmUgRmlsZXNgKSwgdGhlbiBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IFRoZSBQcm9ncmFtIGNvbnRhaW4gYQorICAgcHJvbWluZW50IGZpbGUgdGhhdCBkZWZpbmVzIHRoZSBleGNlcHRpb25hbCBjb25kaXRpb25zLCBhbmQgZWl0aGVyCisgICBsaXN0cyB0aGUgZXhjZXB0aW9uYWwgZmlsZXMgb3IgZGVmaW5lcyBvbmUgb3IgbW9yZSBjYXRlZ29yaWVzIG9mCisgICBleGNlcHRpb25hbCBmaWxlcy4KKworICAgRmlsZXMgY29udGFpbmluZyB0aGUgdGV4dCBvZiBhIGxpY2Vuc2UgKHN1Y2ggYXMgdGhpcyBmaWxlKSBhcmUKKyAgIG9mdGVuIGV4YW1wbGVzIG9mIGZpbGVzIGJlYXJpbmcgbW9yZSByZXN0cmljdGl2ZSBjb25kaXRpb25zIG9uCisgICBtb2RpZmljYXRpb24uICBMYVRlWCBjb25maWd1cmF0aW9uIGZpbGVzICh3aXRoIGZpbGVuYW1lIGV4dGVuc2lvbgorICAgYC5jZmdgKSBhcmUgZXhhbXBsZXMgb2YgZmlsZXMgYmVhcmluZyBsZXNzIHJlc3RyaWN0aXZlIGNvbmRpdGlvbnMKKyAgIG9uIHRoZSBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlLiAgVGhlCisgICBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgb24gTGFUZVggc29mdHdhcmUgZ2l2ZW4gYWJvdmUgYXJlIGV4YW1wbGVzIAorICAgb2YgZGVjbGFyaW5nIGEgY2F0ZWdvcnkgb2YgZmlsZXMgYmVhcmluZyBleGNlcHRpb25hbCBhZGRpdGlvbmFsCisgICBjb25kaXRpb25zLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4yIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzkxYTQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMgpAQCAtMCwwICsxLDMyMCBAQAorCisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlCis9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQorCitMUFBMIFZlcnNpb24gMS4yICAxOTk5LTA5LTAzCisKK0NvcHlyaWdodCAxOTk5IExhVGVYMyBQcm9qZWN0CisgICAgRXZlcnlvbmUgaXMgYWxsb3dlZCB0byBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzCisgICAgbGljZW5zZSBkb2N1bWVudCwgYnV0IG1vZGlmaWNhdGlvbiBvZiBpdCBpcyBub3QgYWxsb3dlZC4KKworCitQUkVBTUJMRQorPT09PT09PT0KKworVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UgKExQUEwpIGlzIHRoZSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRoZQorYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gaXMgZGlzdHJpYnV0ZWQuCisKK1lvdSBtYXkgdXNlIHRoaXMgbGljZW5zZSBmb3IgYW55IHByb2dyYW0gdGhhdCB5b3UgaGF2ZSB3cml0dGVuIGFuZCB3aXNoCit0byBkaXN0cmlidXRlLiAgVGhpcyBsaWNlbnNlIG1heSBiZSBwYXJ0aWN1bGFybHkgc3VpdGFibGUgaWYgeW91cgorcHJvZ3JhbSBpcyBUZVgtcmVsYXRlZCAoc3VjaCBhcyBhIExhVGVYIHBhY2thZ2UpLCBidXQgeW91IG1heSB1c2UgaXQKK2V2ZW4gaWYgeW91ciBwcm9ncmFtIGlzIHVucmVsYXRlZCB0byBUZVguICBUaGUgc2VjdGlvbiBgV0hFVEhFUiBBTkQgSE9XCitUTyBESVNUUklCVVRFIFBST0dSQU1TIFVOREVSIFRISVMgTElDRU5TRWAsIGJlbG93LCBnaXZlcyBpbnN0cnVjdGlvbnMsCitleGFtcGxlcywgYW5kIHJlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycyB3aG8gYXJlIGNvbnNpZGVyaW5nCitkaXN0cmlidXRpbmcgdGhlaXIgcHJvZ3JhbXMgdW5kZXIgdGhpcyBsaWNlbnNlLgorCitJbiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGBUaGUgUHJvZ3JhbWAgcmVmZXJzIHRvIGFueSBwcm9ncmFtCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIGxpY2Vuc2UuCisKK1RoaXMgbGljZW5zZSBnaXZlcyBjb25kaXRpb25zIHVuZGVyIHdoaWNoIFRoZSBQcm9ncmFtIG1heSBiZSBkaXN0cmlidXRlZAorYW5kIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbW9kaWZpZWQgdmVyc2lvbnMgb2YgVGhlIFByb2dyYW0gbWF5IGJlCitkaXN0cmlidXRlZC4gIEluZGl2aWR1YWwgZmlsZXMgb2YgVGhlIFByb2dyYW0gbWF5IGJlYXIgc3VwcGxlbWVudGFyeQorYW5kL29yIHN1cGVyc2VkaW5nIGNvbmRpdGlvbnMgb24gbW9kaWZpY2F0aW9uIG9mIHRoZW1zZWx2ZXMgYW5kIG9uIHRoZQorZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZW1zZWx2ZXMsIGJ1dCAqbm8qIGZpbGUgb2YgVGhlCitQcm9ncmFtIG1heSBiZWFyIHN1cHBsZW1lbnRhcnkgb3Igc3VwZXJzZWRpbmcgY29uZGl0aW9ucyBvbiB0aGUKK2Rpc3RyaWJ1dGlvbiBvZiBhbiB1bm1vZGlmaWVkIGNvcHkgb2YgdGhlIGZpbGUuICBBIGRpc3RyaWJ1dG9yIHdpc2hpbmcKK3RvIGRpc3RyaWJ1dGUgYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtIHRoZXJlZm9yZQorbmVlZHMgdG8gY2hlY2sgdGhlIGNvbmRpdGlvbnMgb25seSBpbiB0aGlzIGxpY2Vuc2UgYW5kIG5vd2hlcmUgZWxzZS4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIFRoZSBQcm9ncmFtCithcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIEluCitwYXJ0aWN1bGFyLCB0aGUgYWN0IG9mIHJ1bm5pbmcgVGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQuCisKK1dlLCB0aGUgTGFUZVgzIFByb2plY3QsIGJlbGlldmUgdGhhdCB0aGUgY29uZGl0aW9ucyBiZWxvdyBnaXZlIHlvdQordGhlIGZyZWVkb20gdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBUaGUgUHJvZ3JhbQordGhhdCBjb25mb3JtIHdpdGggd2hhdGV2ZXIgdGVjaG5pY2FsIHNwZWNpZmljYXRpb25zIHlvdSB3aXNoIHdoaWxlCittYWludGFpbmluZyB0aGUgYXZhaWxhYmlsaXR5LCBpbnRlZ3JpdHksIGFuZCByZWxpYWJpbGl0eSBvZgorVGhlIFByb2dyYW0uICBJZiB5b3UgZG8gbm90IHNlZSBob3cgdG8gYWNoaWV2ZSB5b3VyIGdvYWwgd2hpbGUgCittZWV0aW5nIHRoZXNlIGNvbmRpdGlvbnMsIHRoZW4gcmVhZCB0aGUgZG9jdW1lbnQgYGNmZ2d1aWRlLnRleGAKK2luIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBmb3Igc3VnZ2VzdGlvbnMuCisKKworQ09ORElUSU9OUyBPTiBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitZb3UgbWF5IGRpc3RyaWJ1dGUgYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtLgorRGlzdHJpYnV0aW9uIG9mIG9ubHkgcGFydCBvZiBUaGUgUHJvZ3JhbSBpcyBub3QgYWxsb3dlZC4KKworWW91IG1heSBub3QgbW9kaWZ5IGluIGFueSB3YXkgYSBmaWxlIG9mIFRoZSBQcm9ncmFtIHRoYXQgYmVhcnMgYSBsZWdhbAorbm90aWNlIGZvcmJpZGRpbmcgbW9kaWZpY2F0aW9uIG9mIHRoYXQgZmlsZS4KKworWW91IG1heSBkaXN0cmlidXRlIGEgbW9kaWZpZWQgZmlsZSBvZiBUaGUgUHJvZ3JhbSBpZiwgYW5kIG9ubHkgaWYsIHRoZQorZm9sbG93aW5nIGVpZ2h0IGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAxLiBZb3UgbXVzdCBtZWV0IGFueSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgYm9ybmUgYnkgdGhlIGZpbGUgb24gdGhlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUgYXMgZGVzY3JpYmVkIGJlbG93CisgICAgIGluIHRoZSBzdWJzZWN0aW9uIGBBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gSW5kaXZpZHVhbCBGaWxlcyBvZgorICAgICBUaGUgUHJvZ3JhbWAuCisgCisgIDIuIElmIHRoZSBmaWxlIGlzIGEgTGFUZVggc29mdHdhcmUgZmlsZSwgdGhlbiB5b3UgbXVzdCBtZWV0IGFueQorICAgICBhcHBsaWNhYmxlIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBvbiB0aGUgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQKKyAgICAgdmVyc2lvbiBvZiB0aGUgZmlsZSB0aGF0IGFyZSBkZXNjcmliZWQgYmVsb3cgaW4gdGhlIHN1YnNlY3Rpb24KKyAgICAgYEFkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBMYVRlWCBTb2Z0d2FyZSBGaWxlc2AuCisgCisgIDMuIFlvdSBtdXN0IG5vdCBkaXN0cmlidXRlIHRoZSBtb2RpZmllZCBmaWxlIHdpdGggdGhlIGZpbGVuYW1lIG9mIHRoZQorICAgICBvcmlnaW5hbCBmaWxlLgorIAorICA0LiBJbiB0aGUgbW9kaWZpZWQgZmlsZSwgeW91IG11c3QgYWNrbm93bGVkZ2UgdGhlIGF1dGhvcnNoaXAgYW5kCisgICAgIG5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUsIGFuZCB0aGUgbmFtZSAoaWYgYW55KSBvZiB0aGUgcHJvZ3JhbQorICAgICB3aGljaCBjb250YWlucyBpdC4KKyAKKyAgNS4gWW91IG11c3QgY2hhbmdlIGFueSBpZGVudGlmaWNhdGlvbiBzdHJpbmcgaW4gdGhlIGZpbGUgdG8gaW5kaWNhdGUKKyAgICAgY2xlYXJseSB0aGF0IHRoZSBtb2RpZmllZCBmaWxlIGlzIG5vdCBwYXJ0IG9mIFRoZSBQcm9ncmFtLgorIAorICA2LiBZb3UgbXVzdCBjaGFuZ2UgYW55IGFkZHJlc3NlcyBpbiB0aGUgbW9kaWZpZWQgZmlsZSBmb3IgdGhlCisgICAgIHJlcG9ydGluZyBvZiBlcnJvcnMgaW4gdGhlIGZpbGUgb3IgaW4gVGhlIFByb2dyYW0gZ2VuZXJhbGx5IHRvCisgICAgIGVuc3VyZSB0aGF0IHJlcG9ydHMgZm9yIGZpbGVzIG5vIGxvbmdlciBtYWludGFpbmVkIGJ5IHRoZSBvcmlnaW5hbAorICAgICBtYWludGFpbmVycyB3aWxsIGJlIGRpcmVjdGVkIHRvIHRoZSBtYWludGFpbmVycyBvZiB0aGUgbW9kaWZpZWQKKyAgICAgZmlsZXMuCisgCisgIDcuIFlvdSBtdXN0IGRpc3RyaWJ1dGUgdGhlIG1vZGlmaWVkIGZpbGUgdW5kZXIgYSBsaWNlbnNlIHRoYXQgZm9yYmlkcworICAgICBkaXN0cmlidXRpb24gYm90aCBvZiB0aGUgbW9kaWZpZWQgZmlsZSBhbmQgb2YgYW55IGZpbGVzIGRlcml2ZWQKKyAgICAgZnJvbSB0aGUgbW9kaWZpZWQgZmlsZSB3aXRoIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgZmlsZS4KKyAKKyAgOC4gWW91IG11c3QgZG8gZWl0aGVyIChBKSBvciAoQik6CisKKyAgICAgICAoQSkgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgVGhlIFByb2dyYW0gKHRoYXQgaXMsIGEgY29tcGxldGUsCisgICAgICAgICAgIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbSkgdG9nZXRoZXIgd2l0aCB0aGUgbW9kaWZpZWQKKyAgICAgICAgICAgZmlsZTsgaWYgeW91ciBkaXN0cmlidXRpb24gb2YgdGhlIG1vZGlmaWVkIGZpbGUgaXMgbWFkZSBieQorICAgICAgICAgICBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSB0aGUgbW9kaWZpZWQgZmlsZSBmcm9tIGEgZGVzaWduYXRlZAorICAgICAgICAgICBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IFRoZSBQcm9ncmFtCisgICAgICAgICAgIGZyb20gdGhlIHNhbWUgcGxhY2UgbWVldHMgdGhpcyBjb25kaXRpb24sIGV2ZW4gdGhvdWdoIHRoaXJkCisgICAgICAgICAgIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8gY29weSBUaGUgUHJvZ3JhbSBhbG9uZyB3aXRoIHRoZQorICAgICAgICAgICBtb2RpZmllZCBmaWxlOworCisgICAgICAgKEIpIHByb3ZpZGUgdG8gdGhvc2Ugd2hvIHJlY2VpdmUgdGhlIG1vZGlmaWVkIGZpbGUgaW5mb3JtYXRpb24KKyAgICAgICAgICAgdGhhdCBpcyBzdWZmaWNpZW50IGZvciB0aGVtIHRvIG9idGFpbiBhIGNvcHkgb2YgVGhlIFByb2dyYW07CisgICAgICAgICAgIGZvciBleGFtcGxlLCB5b3UgbWF5IHByb3ZpZGUgYSBVbmlmb3JtIFJlc291cmNlIExvY2F0b3IgKFVSTCkKKyAgICAgICAgICAgZm9yIGEgc2l0ZSB0aGF0IHlvdSBleHBlY3Qgd2lsbCBwcm92aWRlIHRoZW0gd2l0aCBhIGNvcHkgb2YgCisgICAgICAgICAgIFRoZSBQcm9ncmFtIGZyZWUgb2YgY2hhcmdlIChlaXRoZXIgdGhlIHZlcnNpb24gZnJvbSB3aGljaAorICAgICAgICAgICB5b3VyIG1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBvciBwZXJoYXBzIGEgbGF0ZXIgdmVyc2lvbikuCisKK05vdGUgdGhhdCBpbiB0aGUgYWJvdmUsIGBkaXN0cmlidXRpb25gIG9mIGEgZmlsZSBtZWFucyBtYWtpbmcgdGhlCitmaWxlIGF2YWlsYWJsZSB0byBvdGhlcnMgYnkgYW55IG1lYW5zLiAgVGhpcyBpbmNsdWRlcywgZm9yIGluc3RhbmNlLAoraW5zdGFsbGluZyB0aGUgZmlsZSBvbiBhbnkgbWFjaGluZSBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlIGZpbGUgaXMKK2FjY2Vzc2libGUgYnkgdXNlcnMgb3RoZXIgdGhhbiB5b3Vyc2VsZi4gIGBNb2RpZmljYXRpb25gIG9mIGEgZmlsZQorbWVhbnMgYW55IHByb2NlZHVyZSB0aGF0IHByb2R1Y2VzIGEgZGVyaXZhdGl2ZSBmaWxlIHVuZGVyIGFueQorYXBwbGljYWJsZSBsYXcgLS0gdGhhdCBpcywgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGZpbGUgb3IKK2Egc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucworYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgorCitDaGFuZ2luZyB0aGUgbmFtZSBvZiBhIGZpbGUgKG90aGVyIHRoYW4gYXMgbmVjZXNzaXRhdGVkIGJ5IHRoZSBmaWxlCitjb252ZW50aW9ucyBvZiB0aGUgdGFyZ2V0IGZpbGUgc3lzdGVtcykgaXMgY29uc2lkZXJlZCB0byBiZSBhCittb2RpZmljYXRpb24gb2YgdGhlIGZpbGUuCisKK1RoZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UgZG8gbm90IGhhdmUgdG8gYmUKK2FwcGxpZWQgdG8gZmlsZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQorYWJvdmUgY29uZGl0aW9ucy4gIE5vdGUsIGhvd2V2ZXIsIHRoYXQgQ29uZGl0aW9uIDcuIGRvZXMgYXBwbHkgdG8KK2FueSBzdWNoIG1vZGlmaWVkIGZpbGUuCisKK1RoZSBjb25kaXRpb25zIGFib3ZlIGFyZSBub3QgaW50ZW5kZWQgdG8gcHJvaGliaXQsIGFuZCBoZW5jZSBkbyBub3QKK2FwcGx5IHRvLCB0aGUgdXBkYXRpbmcsIGJ5IGFueSBtZXRob2QsIG9mIGEgZmlsZSBzbyB0aGF0IGl0IGJlY29tZXMKK2lkZW50aWNhbCB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhhdCBmaWxlIG9mIFRoZSBQcm9ncmFtLgorCisgCisKK0EgUmVjb21tZW5kYXRpb24gb24gTW9kaWZpY2F0aW9uIFdpdGhvdXQgRGlzdHJpYnV0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBpcyB3aXNlIG5ldmVyIHRvIG1vZGlmeSBhIGZpbGUgb2YgVGhlIFByb2dyYW0sIGV2ZW4gZm9yIHlvdXIgb3duCitwZXJzb25hbCB1c2UsIHdpdGhvdXQgYWxzbyBtZWV0aW5nIHRoZSBhYm92ZSBlaWdodCBjb25kaXRpb25zIGZvcgorZGlzdHJpYnV0aW5nIHRoZSBtb2RpZmllZCBmaWxlLiAgV2hpbGUgeW91IG1pZ2h0IGludGVuZCB0aGF0IHN1Y2gKK21vZGlmaWVkIGZpbGVzIHdpbGwgbmV2ZXIgYmUgZGlzdHJpYnV0ZWQsIG9mdGVuIHRoaXMgd2lsbCBoYXBwZW4gYnkKK2FjY2lkZW50IC0tIHlvdSBtYXkgZm9yZ2V0IHRoYXQgeW91IGhhdmUgbW9kaWZpZWQgdGhlIGZpbGU7IG9yIGl0IG1heQorbm90IG9jY3VyIHRvIHlvdSB3aGVuIGFsbG93aW5nIG90aGVycyB0byBhY2Nlc3MgdGhlIG1vZGlmaWVkIGZpbGUKK3RoYXQgeW91IGFyZSB0aHVzIGRpc3RyaWJ1dGluZyBpdCBhbmQgdmlvbGF0aW5nIHRoZSBjb25kaXRpb25zIG9mCit0aGlzIGxpY2Vuc2UuICBJdCBpcyB1c3VhbGx5IGluIHlvdXIgYmVzdCBpbnRlcmVzdCB0byBrZWVwIHlvdXIgY29weQorb2YgVGhlIFByb2dyYW0gaWRlbnRpY2FsIHdpdGggdGhlIHB1YmxpYyBvbmUuICBNYW55IHByb2dyYW1zIHByb3ZpZGUKK3dheXMgdG8gY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgdGhhdCBwcm9ncmFtIHdpdGhvdXQgYWx0ZXJpbmcgaXRzCitsaWNlbnNlZCBmaWxlcy4KKworCitBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gSW5kaXZpZHVhbCBGaWxlcyBvZiBUaGUgUHJvZ3JhbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW4gaW5kaXZpZHVhbCBmaWxlIG9mIFRoZSBQcm9ncmFtIG1heSBiZWFyIGFkZGl0aW9uYWwgY29uZGl0aW9ucyB0aGF0CitzdXBwbGVtZW50IGFuZC9vciBzdXBlcnNlZGUgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlIGlmLCBhbmQgb25seQoraWYsIHN1Y2ggYWRkaXRpb25hbCBjb25kaXRpb25zIGV4Y2x1c2l2ZWx5IGNvbmNlcm4gbW9kaWZpY2F0aW9uIG9mIHRoZQorZmlsZSBvciBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlLiAgVGhlIGNvbmRpdGlvbnMKK29uIGluZGl2aWR1YWwgZmlsZXMgb2YgVGhlIFByb2dyYW0gdGhlcmVmb3JlIG1heSBkaWZmZXIgb25seSB3aXRoCityZXNwZWN0IHRvIHRoZSBraW5kIGFuZCBleHRlbnQgb2YgbW9kaWZpY2F0aW9uIG9mIHRob3NlIGZpbGVzIHRoYXQKK2lzIGFsbG93ZWQsIGFuZCB3aXRoIHJlc3BlY3QgdG8gdGhlIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucworb2YgdGhvc2UgZmlsZXMuCisKKworQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIExhVGVYIFNvZnR3YXJlIEZpbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgYSBmaWxlIG9mIFRoZSBQcm9ncmFtIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBMYVRlWCAodGhhdCBpcywKK2lmIGl0IGlzIGEgTGFUZVggc29mdHdhcmUgZmlsZSksIHRoZW4gdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsCitjb25kaXRpb25zLCB3aGljaCBzdXBwbGVtZW50IGFuZC9vciBzdXBlcnNlZGUgdGhlIGNvbmRpdGlvbnMKK2Fib3ZlLCBhcHBseSB0byB0aGUgZmlsZSBhY2NvcmRpbmcgdG8gaXRzIGZpbGVuYW1lIGV4dGVuc2lvbjoKKworICAtIFlvdSBtYXkgbm90IG1vZGlmeSBhbnkgZmlsZSB3aXRoIGZpbGVuYW1lIGV4dGVuc2lvbiBgLmluc2Agc2luY2UKKyAgICB0aGVzZSBhcmUgaW5zdGFsbGF0aW9uIGZpbGVzIGNvbnRhaW5pbmcgdGhlIGxlZ2FsIG5vdGljZXMgdGhhdCBhcmUKKyAgICBwbGFjZWQgaW4gdGhlIGZpbGVzIHRoZXkgZ2VuZXJhdGUuCisgCisgIC0gWW91IG1heSBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGZpbGVzIHdpdGggZmlsZW5hbWUKKyAgICBleHRlbnNpb24gYC5mZGAgKExhVGVYIGZvbnQgZGVmaW5pdGlvbiBmaWxlcykgdW5kZXIgdGhlIHN0YW5kYXJkCisgICAgY29uZGl0aW9ucyBvZiB0aGUgTFBQTCBhcyBkZXNjcmliZWQgYWJvdmUuICBZb3UgbWF5IGFsc28gZGlzdHJpYnV0ZQorICAgIHN1Y2ggbW9kaWZpZWQgTGFUZVggZm9udCBkZWZpbml0aW9uIGZpbGVzIHdpdGggdGhlaXIgb3JpZ2luYWwgbmFtZXMKKyAgICBwcm92aWRlZCB0aGF0OgorICAgICgxKSB0aGUgb25seSBjaGFuZ2VzIHRvIHRoZSBvcmlnaW5hbCBmaWxlcyBlaXRoZXIgZW5hYmxlIHVzZSBvZgorICAgICAgICBhdmFpbGFibGUgZm9udHMgb3IgcHJldmVudCBhdHRlbXB0cyB0byBhY2Nlc3MgdW5hdmFpbGFibGUgZm9udHM7CisgICAgKDIpIHlvdSBhbHNvIGRpc3RyaWJ1dGUgdGhlIG9yaWdpbmFsLCB1bm1vZGlmaWVkIGZpbGVzIChUZVggaW5wdXQKKyAgICAgICAgcGF0aHMgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB3aGljaCBzZXQgb2YgTGFUZVggZm9udCBkZWZpbml0aW9uCisgICAgICAgIGZpbGVzIGlzIGFjdHVhbGx5IHVzZWQgYnkgVGVYKS4KKworICAtIFlvdSBtYXkgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBmaWxlcyB3aXRoIGZpbGVuYW1lCisgICAgZXh0ZW5zaW9uIGAuY2ZnYCAoY29uZmlndXJhdGlvbiBmaWxlcykgd2l0aCB0aGVpciBvcmlnaW5hbCBuYW1lcy4KKyAgICBUaGUgUHJvZ3JhbSBtYXkgKGFuZCB1c3VhbGx5IHdpbGwpIHNwZWNpZnkgdGhlIHJhbmdlIG9mIGNvbW1hbmRzCisgICAgdGhhdCBhcmUgYWxsb3dlZCBpbiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBmaWxlLgorIAorQmVjYXVzZSBvZiBwb3J0YWJpbGl0eSBhbmQgZXhjaGFuZ2VhYmlsaXR5IGlzc3VlcyBpbiBMYVRlWCBzb2Z0d2FyZSwKK1RoZSBMYVRlWDMgUHJvamVjdCBkZXByZWNhdGVzIHRoZSBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YKK2NvbXBvbmVudHMgb2YgTGFUZVggb3Igb2YgZ2VuZXJhbGx5IGF2YWlsYWJsZSBjb250cmlidXRlZCBjb2RlIGZvciB0aGVtLAorYnV0IHN1Y2ggZGlzdHJpYnV0aW9uIGNhbiBtZWV0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS4KKworCitOTyBXQVJSQU5UWQorPT09PT09PT09PT0KKworVGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIFRoZSBQcm9ncmFtLiAgRXhjZXB0IHdoZW4gb3RoZXJ3aXNlIHN0YXRlZCBpbgord3JpdGluZywgVGhlIENvcHlyaWdodCBIb2xkZXIgcHJvdmlkZXMgVGhlIFByb2dyYW0gYGFzIGlzYCwgd2l0aG91dAord2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCBidXQgbm90CitsaW1pdGVkIHRvLCB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IKK2EgcGFydGljdWxhciBwdXJwb3NlLiAgVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZQorb2YgVGhlIFByb2dyYW0gaXMgd2l0aCB5b3UuICBTaG91bGQgVGhlIFByb2dyYW0gcHJvdmUgZGVmZWN0aXZlLCB5b3UKK2Fzc3VtZSB0aGUgY29zdCBvZiBhbGwgbmVjZXNzYXJ5IHNlcnZpY2luZywgcmVwYWlyLCBvciBjb3JyZWN0aW9uLgorCitJbiBubyBldmVudCB1bmxlc3MgYWdyZWVkIHRvIGluIHdyaXRpbmcgd2lsbCBUaGUgQ29weXJpZ2h0IEhvbGRlciwgb3IKK2FueSBhdXRob3IgbmFtZWQgaW4gdGhlIGZpbGVzIG9mIFRoZSBQcm9ncmFtLCBvciBhbnkgb3RoZXIgcGFydHkgd2hvIG1heQorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IFRoZSBQcm9ncmFtIGFzIHBlcm1pdHRlZCBhYm92ZSwgYmUgbGlhYmxlIHRvCit5b3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvcgorY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIGFueSB1c2Ugb2YgVGhlIFByb2dyYW0gb3Igb3V0IG9mCitpbmFiaWxpdHkgdG8gdXNlIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgbG9zcyBvZgorZGF0YSwgZGF0YSBiZWluZyByZW5kZXJlZCBpbmFjY3VyYXRlLCBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5IGFueW9uZSBhcworYSByZXN1bHQgb2YgYW55IGZhaWx1cmUgb2YgVGhlIFByb2dyYW0gdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlcgorcHJvZ3JhbXMpLCBldmVuIGlmIFRoZSBDb3B5cmlnaHQgSG9sZGVyIG9yIHNhaWQgYXV0aG9yIG9yIHNhaWQgb3RoZXIKK3BhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworCitXSEVUSEVSIEFORCBIT1cgVE8gRElTVFJJQlVURSBQUk9HUkFNUyBVTkRFUiBUSElTIExJQ0VOU0UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgaW1wb3J0YW50IGluc3RydWN0aW9ucywgZXhhbXBsZXMsIGFuZAorcmVjb21tZW5kYXRpb25zIGZvciBhdXRob3JzIHdobyBhcmUgY29uc2lkZXJpbmcgZGlzdHJpYnV0aW5nIHRoZWlyCitwcm9ncmFtcyB1bmRlciB0aGlzIGxpY2Vuc2UuICBUaGVzZSBhdXRob3JzIGFyZSBhZGRyZXNzZWQgYXMgYHlvdWAgaW4KK3RoaXMgc2VjdGlvbi4KKworCitDaG9vc2luZyBUaGlzIExpY2Vuc2Ugb3IgQW5vdGhlciBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGZvciBhbnkgcGFydCBvZiB5b3VyIHByb2dyYW0geW91IHdhbnQgb3IgbmVlZCB0byB1c2UgKmRpc3RyaWJ1dGlvbioKK2NvbmRpdGlvbnMgdGhhdCBkaWZmZXIgZnJvbSB0aG9zZSBpbiB0aGlzIGxpY2Vuc2UsIHRoZW4gZG8gbm90IHJlZmVyIHRvCit0aGlzIGxpY2Vuc2UgYW55d2hlcmUgaW4geW91ciBwcm9ncmFtIGJ1dCBpbnN0ZWFkIGRpc3RyaWJ1dGUgeW91cgorcHJvZ3JhbSB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLiAgWW91IG1heSB1c2UgdGhlIHRleHQgb2YgdGhpcyBsaWNlbnNlCithcyBhIG1vZGVsIGZvciB5b3VyIG93biBsaWNlbnNlLCBidXQgeW91ciBsaWNlbnNlIHNob3VsZCBub3QgcmVmZXIgdG8KK3RoZSBMUFBMIG9yIG90aGVyd2lzZSBnaXZlIHRoZSBpbXByZXNzaW9uIHRoYXQgeW91ciBwcm9ncmFtIGlzCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTFBQTC4KKworVGhlIGRvY3VtZW50IGBtb2RndWlkZS50ZXhgIGluIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBleHBsYWlucwordGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS4gIEl0IGV4cGxhaW5zLAorZm9yIGV4YW1wbGUsIHdoeSBkaXN0cmlidXRpbmcgTGFUZVggdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSAoR1BMKSB3YXMgY29uc2lkZXJlZCBpbmFwcHJvcHJpYXRlLiAgRXZlbiBpZiB5b3VyIHByb2dyYW0gaXMKK3VucmVsYXRlZCB0byBMYVRlWCwgdGhlIGRpc2N1c3Npb24gaW4gYG1vZGd1aWRlLnRleGAgbWF5IHN0aWxsIGJlCityZWxldmFudCwgYW5kIGF1dGhvcnMgaW50ZW5kaW5nIHRvIGRpc3RyaWJ1dGUgdGhlaXIgcHJvZ3JhbXMgdW5kZXIgYW55CitsaWNlbnNlIGFyZSBlbmNvdXJhZ2VkIHRvIHJlYWQgaXQuCisKKworSG93IHRvIFVzZSBUaGlzIExpY2Vuc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHVzZSB0aGlzIGxpY2Vuc2UsIHBsYWNlIGluIGVhY2ggb2YgdGhlIGZpbGVzIG9mIHlvdXIgcHJvZ3JhbSBib3RoCithbiBleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB5b3VyIG5hbWUgYW5kIHRoZSB5ZWFyIGFuZCBhbHNvCithIHN0YXRlbWVudCB0aGF0IHRoZSBkaXN0cmlidXRpb24gYW5kL29yIG1vZGlmaWNhdGlvbiBvZiB0aGUgZmlsZSBpcworY29uc3RyYWluZWQgYnkgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlLgorCitIZXJlIGlzIGFuIGV4YW1wbGUgb2Ygc3VjaCBhIG5vdGljZSBhbmQgc3RhdGVtZW50OgorCisgICUlIHBpZy5kdHgKKyAgJSUgQ29weXJpZ2h0IDIwMDEgTS4gWS4gTmFtZQorICAlCisgICUgVGhpcyBwcm9ncmFtIG1heSBiZSBkaXN0cmlidXRlZCBhbmQvb3IgbW9kaWZpZWQgdW5kZXIgdGhlCisgICUgY29uZGl0aW9ucyBvZiB0aGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSwgZWl0aGVyIHZlcnNpb24gMS4yCisgICUgb2YgdGhpcyBsaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICUgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbGljZW5zZSBpcyBpbgorICAlICAgaHR0cDovL3d3dy5sYXRleC1wcm9qZWN0Lm9yZy9scHBsLnR4dAorICAlIGFuZCB2ZXJzaW9uIDEuMiBvciBsYXRlciBpcyBwYXJ0IG9mIGFsbCBkaXN0cmlidXRpb25zIG9mIExhVGVYIAorICAlIHZlcnNpb24gMTk5OS8xMi8wMSBvciBsYXRlci4KKyAgJQorICAlIFRoaXMgcHJvZ3JhbSBjb25zaXN0cyBvZiB0aGUgZmlsZXMgcGlnLmR0eCBhbmQgcGlnLmlucworCitHaXZlbiBzdWNoIGEgbm90aWNlIGFuZCBzdGF0ZW1lbnQgaW4gYSBmaWxlLCB0aGUgY29uZGl0aW9ucyBnaXZlbiBpbgordGhpcyBsaWNlbnNlIGRvY3VtZW50IHdvdWxkIGFwcGx5LCB3aXRoIGBUaGUgUHJvZ3JhbWAgcmVmZXJyaW5nIHRvIHRoZQordHdvIGZpbGVzIGBwaWcuZHR4YCBhbmQgYHBpZy5pbnNgLCBhbmQgYFRoZSBDb3B5cmlnaHQgSG9sZGVyYCByZWZlcnJpbmcKK3RvIHRoZSBwZXJzb24gYE0uIFkuIE5hbWVgLgorCisKK0ltcG9ydGFudCBSZWNvbW1lbmRhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIERlZmluaW5nIFdoYXQgQ29uc3RpdHV0ZXMgVGhlIFByb2dyYW0KKworICAgVGhlIExQUEwgcmVxdWlyZXMgdGhhdCBkaXN0cmlidXRpb25zIG9mIFRoZSBQcm9ncmFtIGNvbnRhaW4gYWxsIHRoZQorICAgZmlsZXMgb2YgVGhlIFByb2dyYW0uICBJdCBpcyB0aGVyZWZvcmUgaW1wb3J0YW50IHRoYXQgeW91IHByb3ZpZGUgYQorICAgd2F5IGZvciB0aGUgbGljZW5zZWUgdG8gZGV0ZXJtaW5lIHdoaWNoIGZpbGVzIGNvbnN0aXR1dGUgVGhlIFByb2dyYW0uCisgICBUaGlzIGNvdWxkLCBmb3IgZXhhbXBsZSwgYmUgYWNoaWV2ZWQgYnkgZXhwbGljaXRseSBsaXN0aW5nIGFsbCB0aGUKKyAgIGZpbGVzIG9mIFRoZSBQcm9ncmFtIG5lYXIgdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgZWFjaCBmaWxlIG9yIGJ5CisgICB1c2luZyBhIGxpbmUgbGlrZQorCisgICAgJSBUaGlzIHByb2dyYW0gY29uc2lzdHMgb2YgYWxsIGZpbGVzIGxpc3RlZCBpbiBtYW5pZmVzdC50eHQuCisKKyAgIGluIHRoYXQgcGxhY2UuICBJbiB0aGUgYWJzZW5jZSBvZiBhbiB1bmVxdWl2b2NhbCBsaXN0IGl0IG1pZ2h0IGJlCisgICBpbXBvc3NpYmxlIGZvciB0aGUgbGljZW5zZWUgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgY29uc2lkZXJlZCBieSB5b3UKKyAgIHRvIGNvbXByaXNlIFRoZSBQcm9ncmFtLgorCisgTm90aW5nIEV4Y2VwdGlvbmFsIEZpbGVzCisgIAorICAgSWYgVGhlIFByb2dyYW0gY29udGFpbnMgYW55IGZpbGVzIGJlYXJpbmcgYWRkaXRpb25hbCBjb25kaXRpb25zIG9uCisgICBtb2RpZmljYXRpb24sIG9yIG9uIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucywgb2YgdGhvc2UKKyAgIGZpbGVzIChvdGhlciB0aGFuIHRob3NlIGxpc3RlZCBpbiBgQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIExhVGVYCisgICBTb2Z0d2FyZSBGaWxlc2ApLCB0aGVuIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgVGhlIFByb2dyYW0gY29udGFpbiBhCisgICBwcm9taW5lbnQgZmlsZSB0aGF0IGRlZmluZXMgdGhlIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnMsIGFuZCBlaXRoZXIKKyAgIGxpc3RzIHRoZSBleGNlcHRpb25hbCBmaWxlcyBvciBkZWZpbmVzIG9uZSBvciBtb3JlIGNhdGVnb3JpZXMgb2YKKyAgIGV4Y2VwdGlvbmFsIGZpbGVzLgorCisgICBGaWxlcyBjb250YWluaW5nIHRoZSB0ZXh0IG9mIGEgbGljZW5zZSAoc3VjaCBhcyB0aGlzIGZpbGUpIGFyZQorICAgb2Z0ZW4gZXhhbXBsZXMgb2YgZmlsZXMgYmVhcmluZyBtb3JlIHJlc3RyaWN0aXZlIGNvbmRpdGlvbnMgb24KKyAgIG1vZGlmaWNhdGlvbi4gIExhVGVYIGNvbmZpZ3VyYXRpb24gZmlsZXMgKHdpdGggZmlsZW5hbWUgZXh0ZW5zaW9uCisgICBgLmNmZ2ApIGFyZSBleGFtcGxlcyBvZiBmaWxlcyBiZWFyaW5nIGxlc3MgcmVzdHJpY3RpdmUgY29uZGl0aW9ucworICAgb24gdGhlIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUuICBUaGUKKyAgIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBvbiBMYVRlWCBzb2Z0d2FyZSBnaXZlbiBhYm92ZSBhcmUgZXhhbXBsZXMgCisgICBvZiBkZWNsYXJpbmcgYSBjYXRlZ29yeSBvZiBmaWxlcyBiZWFyaW5nIGV4Y2VwdGlvbmFsIGFkZGl0aW9uYWwKKyAgIGNvbmRpdGlvbnMuCisKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjNjIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuM2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1ZTNiYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjNjCkBAIC0wLDAgKzEsNDE4IEBACisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlCis9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQorCitMUFBMIFZlcnNpb24gMS4zYyAgMjAwOC0wNS0wNAorCitDb3B5cmlnaHQgMTk5OSAyMDAyLTIwMDggTGFUZVgzIFByb2plY3QKKyAgICBFdmVyeW9uZSBpcyBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMKKyAgICBsaWNlbnNlIGRvY3VtZW50LCBidXQgbW9kaWZpY2F0aW9uIG9mIGl0IGlzIG5vdCBhbGxvd2VkLgorCisKK1BSRUFNQkxFCis9PT09PT09PQorCitUaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSAoTFBQTCkgaXMgdGhlIHByaW1hcnkgbGljZW5zZSB1bmRlcgord2hpY2ggdGhlIExhVGVYIGtlcm5lbCBhbmQgdGhlIGJhc2UgTGFUZVggcGFja2FnZXMgYXJlIGRpc3RyaWJ1dGVkLgorCitZb3UgbWF5IHVzZSB0aGlzIGxpY2Vuc2UgZm9yIGFueSB3b3JrIG9mIHdoaWNoIHlvdSBob2xkIHRoZSBjb3B5cmlnaHQKK2FuZCB3aGljaCB5b3Ugd2lzaCB0byBkaXN0cmlidXRlLiAgVGhpcyBsaWNlbnNlIG1heSBiZSBwYXJ0aWN1bGFybHkKK3N1aXRhYmxlIGlmIHlvdXIgd29yayBpcyBUZVgtcmVsYXRlZCAoc3VjaCBhcyBhIExhVGVYIHBhY2thZ2UpLCBidXQgCitpdCBpcyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCB5b3UgY2FuIHVzZSBpdCBldmVuIGlmIHlvdXIgd29yayBpcyAKK3VucmVsYXRlZCB0byBUZVguCisKK1RoZSBzZWN0aW9uIGBXSEVUSEVSIEFORCBIT1cgVE8gRElTVFJJQlVURSBXT1JLUyBVTkRFUiBUSElTIExJQ0VOU0VgLAorYmVsb3csIGdpdmVzIGluc3RydWN0aW9ucywgZXhhbXBsZXMsIGFuZCByZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMKK3dobyBhcmUgY29uc2lkZXJpbmcgZGlzdHJpYnV0aW5nIHRoZWlyIHdvcmtzIHVuZGVyIHRoaXMgbGljZW5zZS4KKworVGhpcyBsaWNlbnNlIGdpdmVzIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSB3b3JrIG1heSBiZSBkaXN0cmlidXRlZAorYW5kIG1vZGlmaWVkLCBhcyB3ZWxsIGFzIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbW9kaWZpZWQgdmVyc2lvbnMgb2YKK3RoYXQgd29yayBtYXkgYmUgZGlzdHJpYnV0ZWQuCisKK1dlLCB0aGUgTGFUZVgzIFByb2plY3QsIGJlbGlldmUgdGhhdCB0aGUgY29uZGl0aW9ucyBiZWxvdyBnaXZlIHlvdQordGhlIGZyZWVkb20gdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiB5b3VyIHdvcmsKK3RoYXQgY29uZm9ybSB3aXRoIHdoYXRldmVyIHRlY2huaWNhbCBzcGVjaWZpY2F0aW9ucyB5b3Ugd2lzaCB3aGlsZQorbWFpbnRhaW5pbmcgdGhlIGF2YWlsYWJpbGl0eSwgaW50ZWdyaXR5LCBhbmQgcmVsaWFiaWxpdHkgb2YKK3RoYXQgd29yay4gIElmIHlvdSBkbyBub3Qgc2VlIGhvdyB0byBhY2hpZXZlIHlvdXIgZ29hbCB3aGlsZQorbWVldGluZyB0aGVzZSBjb25kaXRpb25zLCB0aGVuIHJlYWQgdGhlIGRvY3VtZW50IGBjZmdndWlkZS50ZXhgCithbmQgYG1vZGd1aWRlLnRleGAgaW4gdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGZvciBzdWdnZXN0aW9ucy4KKworCitERUZJTklUSU9OUworPT09PT09PT09PT0KKworSW4gdGhpcyBsaWNlbnNlIGRvY3VtZW50IHRoZSBmb2xsb3dpbmcgdGVybXMgYXJlIHVzZWQ6CisKKyAgIGBXb3JrYAorICAgIEFueSB3b3JrIGJlaW5nIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKyAgICAKKyAgIGBEZXJpdmVkIFdvcmtgCisgICAgQW55IHdvcmsgdGhhdCB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgaXMgZGVyaXZlZCBmcm9tIHRoZSBXb3JrLgorCisgICBgTW9kaWZpY2F0aW9uYCAKKyAgICBBbnkgcHJvY2VkdXJlIHRoYXQgcHJvZHVjZXMgYSBEZXJpdmVkIFdvcmsgdW5kZXIgYW55IGFwcGxpY2FibGUKKyAgICBsYXcgLS0gZm9yIGV4YW1wbGUsIHRoZSBwcm9kdWN0aW9uIG9mIGEgZmlsZSBjb250YWluaW5nIGFuCisgICAgb3JpZ2luYWwgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmsgb3IgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mCisgICAgc3VjaCBhIGZpbGUsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yCisgICAgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisKKyAgIGBNb2RpZnlgCisgICAgVG8gYXBwbHkgYW55IHByb2NlZHVyZSB0aGF0IHByb2R1Y2VzIGEgRGVyaXZlZCBXb3JrIHVuZGVyIGFueQorICAgIGFwcGxpY2FibGUgbGF3LgorICAgIAorICAgYERpc3RyaWJ1dGlvbmAKKyAgICBNYWtpbmcgY29waWVzIG9mIHRoZSBXb3JrIGF2YWlsYWJsZSBmcm9tIG9uZSBwZXJzb24gdG8gYW5vdGhlciwgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0LiAgRGlzdHJpYnV0aW9uIGluY2x1ZGVzIChidXQgaXMgbm90IGxpbWl0ZWQgdG8pCisgICAgbWFraW5nIGFueSBlbGVjdHJvbmljIGNvbXBvbmVudHMgb2YgdGhlIFdvcmsgYWNjZXNzaWJsZSBieQorICAgIGZpbGUgdHJhbnNmZXIgcHJvdG9jb2xzIHN1Y2ggYXMgRlRQIG9yIEhUVFAgb3IgYnkgc2hhcmVkIGZpbGUKKyAgICBzeXN0ZW1zIHN1Y2ggYXMgU3VuYHMgTmV0d29yayBGaWxlIFN5c3RlbSAoTkZTKS4KKworICAgYENvbXBpbGVkIFdvcmtgCisgICAgQSB2ZXJzaW9uIG9mIHRoZSBXb3JrIHRoYXQgaGFzIGJlZW4gcHJvY2Vzc2VkIGludG8gYSBmb3JtIHdoZXJlIGl0CisgICAgaXMgZGlyZWN0bHkgdXNhYmxlIG9uIGEgY29tcHV0ZXIgc3lzdGVtLiAgVGhpcyBwcm9jZXNzaW5nIG1heQorICAgIGluY2x1ZGUgdXNpbmcgaW5zdGFsbGF0aW9uIGZhY2lsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIFdvcmssCisgICAgdHJhbnNmb3JtYXRpb25zIG9mIHRoZSBXb3JrLCBjb3B5aW5nIG9mIGNvbXBvbmVudHMgb2YgdGhlIFdvcmssIG9yCisgICAgb3RoZXIgYWN0aXZpdGllcy4gIE5vdGUgdGhhdCBtb2RpZmljYXRpb24gb2YgYW55IGluc3RhbGxhdGlvbgorICAgIGZhY2lsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIFdvcmsgY29uc3RpdHV0ZXMgbW9kaWZpY2F0aW9uIG9mIHRoZSBXb3JrLgorCisgICBgQ3VycmVudCBNYWludGFpbmVyYAorICAgIEEgcGVyc29uIG9yIHBlcnNvbnMgbm9taW5hdGVkIGFzIHN1Y2ggd2l0aGluIHRoZSBXb3JrLiAgSWYgdGhlcmUgaXMKKyAgICBubyBzdWNoIGV4cGxpY2l0IG5vbWluYXRpb24gdGhlbiBpdCBpcyB0aGUgYENvcHlyaWdodCBIb2xkZXJgIHVuZGVyCisgICAgYW55IGFwcGxpY2FibGUgbGF3LgorCisgICBgQmFzZSBJbnRlcnByZXRlcmAgCisgICAgQSBwcm9ncmFtIG9yIHByb2Nlc3MgdGhhdCBpcyBub3JtYWxseSBuZWVkZWQgZm9yIHJ1bm5pbmcgb3IKKyAgICBpbnRlcnByZXRpbmcgYSBwYXJ0IG9yIHRoZSB3aG9sZSBvZiB0aGUgV29yay4gICAgCisKKyAgICBBIEJhc2UgSW50ZXJwcmV0ZXIgbWF5IGRlcGVuZCBvbiBleHRlcm5hbCBjb21wb25lbnRzIGJ1dCB0aGVzZQorICAgIGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBCYXNlIEludGVycHJldGVyIHByb3ZpZGVkIHRoYXQgZWFjaAorICAgIGV4dGVybmFsIGNvbXBvbmVudCBjbGVhcmx5IGlkZW50aWZpZXMgaXRzZWxmIHdoZW5ldmVyIGl0IGlzIHVzZWQKKyAgICBpbnRlcmFjdGl2ZWx5LiAgVW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHdoZW4gYXBwbHlpbmcgdGhlCisgICAgbGljZW5zZSB0byB0aGUgV29yaywgdGhlIG9ubHkgYXBwbGljYWJsZSBCYXNlIEludGVycHJldGVyIGlzIGEKKyAgICBgTGFUZVgtRm9ybWF0YCBvciBpbiB0aGUgY2FzZSBvZiBmaWxlcyBiZWxvbmdpbmcgdG8gdGhlIAorICAgIGBMYVRlWC1mb3JtYXRgIGEgcHJvZ3JhbSBpbXBsZW1lbnRpbmcgdGhlIGBUZVggbGFuZ3VhZ2VgLgorCisKKworQ09ORElUSU9OUyBPTiBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBXb3JrCithcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIEluCitwYXJ0aWN1bGFyLCB0aGUgYWN0IG9mIHJ1bm5pbmcgdGhlIFdvcmsgaXMgbm90IHJlc3RyaWN0ZWQgYW5kIG5vCityZXF1aXJlbWVudHMgYXJlIG1hZGUgY29uY2VybmluZyBhbnkgb2ZmZXJzIG9mIHN1cHBvcnQgZm9yIHRoZSBXb3JrLgorCisyLiAgWW91IG1heSBkaXN0cmlidXRlIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yayBhcyB5b3UKK3JlY2VpdmVkIGl0LiAgRGlzdHJpYnV0aW9uIG9mIG9ubHkgcGFydCBvZiB0aGUgV29yayBpcyBjb25zaWRlcmVkCittb2RpZmljYXRpb24gb2YgdGhlIFdvcmssIGFuZCBubyByaWdodCB0byBkaXN0cmlidXRlIHN1Y2ggYSBEZXJpdmVkCitXb3JrIG1heSBiZSBhc3N1bWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGNsYXVzZS4KKworMy4gIFlvdSBtYXkgZGlzdHJpYnV0ZSBhIENvbXBpbGVkIFdvcmsgdGhhdCBoYXMgYmVlbiBnZW5lcmF0ZWQgZnJvbSBhCitjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBXb3JrIGFzIGRpc3RyaWJ1dGVkIHVuZGVyIENsYXVzZSAyCithYm92ZSwgYXMgbG9uZyBhcyB0aGF0IENvbXBpbGVkIFdvcmsgaXMgZGlzdHJpYnV0ZWQgaW4gc3VjaCBhIHdheSB0aGF0Cit0aGUgcmVjaXBpZW50cyBtYXkgaW5zdGFsbCB0aGUgQ29tcGlsZWQgV29yayBvbiB0aGVpciBzeXN0ZW0gZXhhY3RseQorYXMgaXQgd291bGQgaGF2ZSBiZWVuIGluc3RhbGxlZCBpZiB0aGV5IGdlbmVyYXRlZCBhIENvbXBpbGVkIFdvcmsKK2RpcmVjdGx5IGZyb20gdGhlIFdvcmsuCisKKzQuICBJZiB5b3UgYXJlIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXksIHdpdGhvdXQKK3Jlc3RyaWN0aW9uLCBtb2RpZnkgdGhlIFdvcmssIHRodXMgY3JlYXRpbmcgYSBEZXJpdmVkIFdvcmsuICBZb3UgbWF5CithbHNvIGRpc3RyaWJ1dGUgdGhlIERlcml2ZWQgV29yayB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKK0NvbXBpbGVkIFdvcmtzIGdlbmVyYXRlZCBmcm9tIHRoZSBEZXJpdmVkIFdvcmsuICBEZXJpdmVkIFdvcmtzCitkaXN0cmlidXRlZCBpbiB0aGlzIG1hbm5lciBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyIGFyZSBjb25zaWRlcmVkIHRvCitiZSB1cGRhdGVkIHZlcnNpb25zIG9mIHRoZSBXb3JrLgorCis1LiAgSWYgeW91IGFyZSBub3QgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yaywgeW91IG1heSBtb2RpZnkKK3lvdXIgY29weSBvZiB0aGUgV29yaywgdGh1cyBjcmVhdGluZyBhIERlcml2ZWQgV29yayBiYXNlZCBvbiB0aGUgV29yaywKK2FuZCBjb21waWxlIHRoaXMgRGVyaXZlZCBXb3JrLCB0aHVzIGNyZWF0aW5nIGEgQ29tcGlsZWQgV29yayBiYXNlZCBvbgordGhlIERlcml2ZWQgV29yay4KKworNi4gIElmIHlvdSBhcmUgbm90IHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgYSBEZXJpdmVkIFdvcmsgcHJvdmlkZWQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQKK2ZvciBldmVyeSBjb21wb25lbnQgb2YgdGhlIFdvcmsgdW5sZXNzIHRoYXQgY29tcG9uZW50IGNsZWFybHkgc3RhdGVzCitpbiB0aGUgY29weXJpZ2h0IG5vdGljZSB0aGF0IGl0IGlzIGV4ZW1wdCBmcm9tIHRoYXQgY29uZGl0aW9uLiAgT25seQordGhlIEN1cnJlbnQgTWFpbnRhaW5lciBpcyBhbGxvd2VkIHRvIGFkZCBzdWNoIHN0YXRlbWVudHMgb2YgZXhlbXB0aW9uIAordG8gYSBjb21wb25lbnQgb2YgdGhlIFdvcmsuIAorCisgIGEuIElmIGEgY29tcG9uZW50IG9mIHRoaXMgRGVyaXZlZCBXb3JrIGNhbiBiZSBhIGRpcmVjdCByZXBsYWNlbWVudAorICAgICBmb3IgYSBjb21wb25lbnQgb2YgdGhlIFdvcmsgd2hlbiB0aGF0IGNvbXBvbmVudCBpcyB1c2VkIHdpdGggdGhlCisgICAgIEJhc2UgSW50ZXJwcmV0ZXIsIHRoZW4sIHdoZXJldmVyIHRoaXMgY29tcG9uZW50IG9mIHRoZSBXb3JrCisgICAgIGlkZW50aWZpZXMgaXRzZWxmIHRvIHRoZSB1c2VyIHdoZW4gdXNlZCBpbnRlcmFjdGl2ZWx5IHdpdGggdGhhdAorICAgICBCYXNlIEludGVycHJldGVyLCB0aGUgcmVwbGFjZW1lbnQgY29tcG9uZW50IG9mIHRoaXMgRGVyaXZlZCBXb3JrCisgICAgIGNsZWFybHkgYW5kIHVuYW1iaWd1b3VzbHkgaWRlbnRpZmllcyBpdHNlbGYgYXMgYSBtb2RpZmllZCB2ZXJzaW9uCisgICAgIG9mIHRoaXMgY29tcG9uZW50IHRvIHRoZSB1c2VyIHdoZW4gdXNlZCBpbnRlcmFjdGl2ZWx5IHdpdGggdGhhdAorICAgICBCYXNlIEludGVycHJldGVyLgorICAgICAKKyAgYi4gRXZlcnkgY29tcG9uZW50IG9mIHRoZSBEZXJpdmVkIFdvcmsgY29udGFpbnMgcHJvbWluZW50IG5vdGljZXMKKyAgICAgZGV0YWlsaW5nIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMgdG8gdGhhdCBjb21wb25lbnQsIG9yIGEKKyAgICAgcHJvbWluZW50IHJlZmVyZW5jZSB0byBhbm90aGVyIGZpbGUgdGhhdCBpcyBkaXN0cmlidXRlZCBhcyBwYXJ0CisgICAgIG9mIHRoZSBEZXJpdmVkIFdvcmsgYW5kIHRoYXQgY29udGFpbnMgYSBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgbG9nCisgICAgIG9mIHRoZSBjaGFuZ2VzLgorICAKKyAgYy4gTm8gaW5mb3JtYXRpb24gaW4gdGhlIERlcml2ZWQgV29yayBpbXBsaWVzIHRoYXQgYW55IHBlcnNvbnMsCisgICAgIGluY2x1ZGluZyAoYnV0IG5vdCBsaW1pdGVkIHRvKSB0aGUgYXV0aG9ycyBvZiB0aGUgb3JpZ2luYWwgdmVyc2lvbgorICAgICBvZiB0aGUgV29yaywgcHJvdmlkZSBhbnkgc3VwcG9ydCwgaW5jbHVkaW5nIChidXQgbm90IGxpbWl0ZWQgdG8pCisgICAgIHRoZSByZXBvcnRpbmcgYW5kIGhhbmRsaW5nIG9mIGVycm9ycywgdG8gcmVjaXBpZW50cyBvZiB0aGUKKyAgICAgRGVyaXZlZCBXb3JrIHVubGVzcyB0aG9zZSBwZXJzb25zIGhhdmUgc3RhdGVkIGV4cGxpY2l0bHkgdGhhdAorICAgICB0aGV5IGRvIHByb3ZpZGUgc3VjaCBzdXBwb3J0IGZvciB0aGUgRGVyaXZlZCBXb3JrLgorCisgIGQuIFlvdSBkaXN0cmlidXRlIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHdpdGggdGhlIERlcml2ZWQgV29yazoKKworICAgICAgIDEuIEEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yazsgCisgICAgICAgICAgaWYgeW91ciBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCBjb21wb25lbnQgaXMgbWFkZSBieQorICAgICAgICAgIG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IHRoZSBtb2RpZmllZCBjb21wb25lbnQgZnJvbSBhCisgICAgICAgICAgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5CisgICAgICAgICAgdGhlIFdvcmsgZnJvbSB0aGUgc2FtZSBvciBzb21lIHNpbWlsYXIgcGxhY2UgbWVldHMgdGhpcworICAgICAgICAgIGNvbmRpdGlvbiwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0bworICAgICAgICAgIGNvcHkgdGhlIFdvcmsgYWxvbmcgd2l0aCB0aGUgbW9kaWZpZWQgY29tcG9uZW50OworCisgICAgICAgMi4gSW5mb3JtYXRpb24gdGhhdCBpcyBzdWZmaWNpZW50IHRvIG9idGFpbiBhIGNvbXBsZXRlLAorICAgICAgICAgIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yay4KKworNy4gIElmIHlvdSBhcmUgbm90IHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgYSBDb21waWxlZCBXb3JrIGdlbmVyYXRlZCBmcm9tIGEgRGVyaXZlZCBXb3JrLCBhcyBsb25nIGFzCit0aGUgRGVyaXZlZCBXb3JrIGlzIGRpc3RyaWJ1dGVkIHRvIGFsbCByZWNpcGllbnRzIG9mIHRoZSBDb21waWxlZAorV29yaywgYW5kIGFzIGxvbmcgYXMgdGhlIGNvbmRpdGlvbnMgb2YgQ2xhdXNlIDYsIGFib3ZlLCBhcmUgbWV0IHdpdGgKK3JlZ2FyZCB0byB0aGUgRGVyaXZlZCBXb3JrLgorCis4LiAgVGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG5vdCBpbnRlbmRlZCB0byBwcm9oaWJpdCwgYW5kIGhlbmNlIGRvIG5vdAorYXBwbHkgdG8sIHRoZSBtb2RpZmljYXRpb24sIGJ5IGFueSBtZXRob2QsIG9mIGFueSBjb21wb25lbnQgc28gdGhhdCBpdAorYmVjb21lcyBpZGVudGljYWwgdG8gYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoYXQgY29tcG9uZW50IG9mIHRoZSBXb3JrIGFzCitpdCBpcyBkaXN0cmlidXRlZCBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyIHVuZGVyIENsYXVzZSA0LCBhYm92ZS4KKworOS4gIERpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvciBhbnkgRGVyaXZlZCBXb3JrIGluIGFuIGFsdGVybmF0aXZlCitmb3JtYXQsIHdoZXJlIHRoZSBXb3JrIG9yIHRoYXQgRGVyaXZlZCBXb3JrIChpbiB3aG9sZSBvciBpbiBwYXJ0KSBpcwordGhlbiBwcm9kdWNlZCBieSBhcHBseWluZyBzb21lIHByb2Nlc3MgdG8gdGhhdCBmb3JtYXQsIGRvZXMgbm90IHJlbGF4IG9yCitudWxsaWZ5IGFueSBzZWN0aW9ucyBvZiB0aGlzIGxpY2Vuc2UgYXMgdGhleSBwZXJ0YWluIHRvIHRoZSByZXN1bHRzIG9mCithcHBseWluZyB0aGF0IHByb2Nlc3MuCisgICAgIAorMTAuIGEuIEEgRGVyaXZlZCBXb3JrIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlCisgICAgICAgcHJvdmlkZWQgdGhhdCBsaWNlbnNlIGl0c2VsZiBob25vcnMgdGhlIGNvbmRpdGlvbnMgbGlzdGVkIGluCisgICAgICAgQ2xhdXNlIDYgYWJvdmUsIGluIHJlZ2FyZCB0byB0aGUgV29yaywgdGhvdWdoIGl0IGRvZXMgbm90IGhhdmUKKyAgICAgICB0byBob25vciB0aGUgcmVzdCBvZiB0aGUgY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UuCisgICAgICAKKyAgICBiLiBJZiBhIERlcml2ZWQgV29yayBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLCB0aGF0CisgICAgICAgRGVyaXZlZCBXb3JrIG11c3QgcHJvdmlkZSBzdWZmaWNpZW50IGRvY3VtZW50YXRpb24gYXMgcGFydCBvZgorICAgICAgIGl0c2VsZiB0byBhbGxvdyBlYWNoIHJlY2lwaWVudCBvZiB0aGF0IERlcml2ZWQgV29yayB0byBob25vciB0aGUgCisgICAgICAgcmVzdHJpY3Rpb25zIGluIENsYXVzZSA2IGFib3ZlLCBjb25jZXJuaW5nIGNoYW5nZXMgZnJvbSB0aGUgV29yay4KKworMTEuIFRoaXMgbGljZW5zZSBwbGFjZXMgbm8gcmVzdHJpY3Rpb25zIG9uIHdvcmtzIHRoYXQgYXJlIHVucmVsYXRlZCB0bwordGhlIFdvcmssIG5vciBkb2VzIHRoaXMgbGljZW5zZSBwbGFjZSBhbnkgcmVzdHJpY3Rpb25zIG9uIGFnZ3JlZ2F0aW5nCitzdWNoIHdvcmtzIHdpdGggdGhlIFdvcmsgYnkgYW55IG1lYW5zLgorCisxMi4gIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvLCBvciBtYXkgYmUgdXNlZCB0bywgcHJldmVudAorY29tcGxldGUgY29tcGxpYW5jZSBieSBhbGwgcGFydGllcyB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MuCisKKworTk8gV0FSUkFOVFkKKz09PT09PT09PT09CisKK1RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgV29yay4gIEV4Y2VwdCB3aGVuIG90aGVyd2lzZSBzdGF0ZWQgaW4KK3dyaXRpbmcsIHRoZSBDb3B5cmlnaHQgSG9sZGVyIHByb3ZpZGVzIHRoZSBXb3JrIGBhcyBpc2AsIHdpdGhvdXQKK3dhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdAorbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEKK3BhcnRpY3VsYXIgcHVycG9zZS4gIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2UKK29mIHRoZSBXb3JrIGlzIHdpdGggeW91LiAgU2hvdWxkIHRoZSBXb3JrIHByb3ZlIGRlZmVjdGl2ZSwgeW91IGFzc3VtZQordGhlIGNvc3Qgb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciwgb3IgY29ycmVjdGlvbi4KKworSW4gbm8gZXZlbnQgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nCit3aWxsIFRoZSBDb3B5cmlnaHQgSG9sZGVyLCBvciBhbnkgYXV0aG9yIG5hbWVkIGluIHRoZSBjb21wb25lbnRzIG9mIHRoZQorV29yaywgb3IgYW55IG90aGVyIHBhcnR5IHdobyBtYXkgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBXb3JrIGFzCitwZXJtaXR0ZWQgYWJvdmUsIGJlIGxpYWJsZSB0byB5b3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwKK3NwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIGFueSB1c2Ugb2YKK3RoZSBXb3JrIG9yIG91dCBvZiBpbmFiaWxpdHkgdG8gdXNlIHRoZSBXb3JrIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZAordG8sIGxvc3Mgb2YgZGF0YSwgZGF0YSBiZWluZyByZW5kZXJlZCBpbmFjY3VyYXRlLCBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5CithbnlvbmUgYXMgYSByZXN1bHQgb2YgYW55IGZhaWx1cmUgb2YgdGhlIFdvcmsgdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlcgorcHJvZ3JhbXMpLCBldmVuIGlmIHRoZSBDb3B5cmlnaHQgSG9sZGVyIG9yIHNhaWQgYXV0aG9yIG9yIHNhaWQgb3RoZXIKK3BhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworCitNQUlOVEVOQU5DRSBPRiBUSEUgV09SSworPT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIFdvcmsgaGFzIHRoZSBzdGF0dXMgYGF1dGhvci1tYWludGFpbmVkYCBpZiB0aGUgQ29weXJpZ2h0IEhvbGRlcgorZXhwbGljaXRseSBhbmQgcHJvbWluZW50bHkgc3RhdGVzIG5lYXIgdGhlIHByaW1hcnkgY29weXJpZ2h0IG5vdGljZSBpbgordGhlIFdvcmsgdGhhdCB0aGUgV29yayBjYW4gb25seSBiZSBtYWludGFpbmVkIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyCitvciBzaW1wbHkgdGhhdCBpdCBpcyBgYXV0aG9yLW1haW50YWluZWRgLgorCitUaGUgV29yayBoYXMgdGhlIHN0YXR1cyBgbWFpbnRhaW5lZGAgaWYgdGhlcmUgaXMgYSBDdXJyZW50IE1haW50YWluZXIKK3dobyBoYXMgaW5kaWNhdGVkIGluIHRoZSBXb3JrIHRoYXQgdGhleSBhcmUgd2lsbGluZyB0byByZWNlaXZlIGVycm9yCityZXBvcnRzIGZvciB0aGUgV29yayAoZm9yIGV4YW1wbGUsIGJ5IHN1cHBseWluZyBhIHZhbGlkIGUtbWFpbAorYWRkcmVzcykuIEl0IGlzIG5vdCByZXF1aXJlZCBmb3IgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciB0byBhY2tub3dsZWRnZQorb3IgYWN0IHVwb24gdGhlc2UgZXJyb3IgcmVwb3J0cy4KKworVGhlIFdvcmsgY2hhbmdlcyBmcm9tIHN0YXR1cyBgbWFpbnRhaW5lZGAgdG8gYHVubWFpbnRhaW5lZGAgaWYgdGhlcmUKK2lzIG5vIEN1cnJlbnQgTWFpbnRhaW5lciwgb3IgdGhlIHBlcnNvbiBzdGF0ZWQgdG8gYmUgQ3VycmVudAorTWFpbnRhaW5lciBvZiB0aGUgd29yayBjYW5ub3QgYmUgcmVhY2hlZCB0aHJvdWdoIHRoZSBpbmRpY2F0ZWQgbWVhbnMKK29mIGNvbW11bmljYXRpb24gZm9yIGEgcGVyaW9kIG9mIHNpeCBtb250aHMsIGFuZCB0aGVyZSBhcmUgbm8gb3RoZXIKK3NpZ25pZmljYW50IHNpZ25zIG9mIGFjdGl2ZSBtYWludGVuYW5jZS4KKworWW91IGNhbiBiZWNvbWUgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yayBieSBhZ3JlZW1lbnQgd2l0aAorYW55IGV4aXN0aW5nIEN1cnJlbnQgTWFpbnRhaW5lciB0byB0YWtlIG92ZXIgdGhpcyByb2xlLgorCitJZiB0aGUgV29yayBpcyB1bm1haW50YWluZWQsIHlvdSBjYW4gYmVjb21lIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YKK3RoZSBXb3JrIHRocm91Z2ggdGhlIGZvbGxvd2luZyBzdGVwczoKKworIDEuICBNYWtlIGEgcmVhc29uYWJsZSBhdHRlbXB0IHRvIHRyYWNlIHRoZSBDdXJyZW50IE1haW50YWluZXIgKGFuZAorICAgICB0aGUgQ29weXJpZ2h0IEhvbGRlciwgaWYgdGhlIHR3byBkaWZmZXIpIHRocm91Z2ggdGhlIG1lYW5zIG9mCisgICAgIGFuIEludGVybmV0IG9yIHNpbWlsYXIgc2VhcmNoLgorCisgMi4gIElmIHRoaXMgc2VhcmNoIGlzIHN1Y2Nlc3NmdWwsIHRoZW4gZW5xdWlyZSB3aGV0aGVyIHRoZSBXb3JrCisgICAgIGlzIHN0aWxsIG1haW50YWluZWQuCisKKyAgYS4gSWYgaXQgaXMgYmVpbmcgbWFpbnRhaW5lZCwgdGhlbiBhc2sgdGhlIEN1cnJlbnQgTWFpbnRhaW5lcgorICAgICB0byB1cGRhdGUgdGhlaXIgY29tbXVuaWNhdGlvbiBkYXRhIHdpdGhpbiBvbmUgbW9udGguCisgICAgIAorICBiLiBJZiB0aGUgc2VhcmNoIGlzIHVuc3VjY2Vzc2Z1bCBvciBubyBhY3Rpb24gdG8gcmVzdW1lIGFjdGl2ZQorICAgICBtYWludGVuYW5jZSBpcyB0YWtlbiBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyLCB0aGVuIGFubm91bmNlCisgICAgIHdpdGhpbiB0aGUgcGVydGluZW50IGNvbW11bml0eSB5b3VyIGludGVudGlvbiB0byB0YWtlIG92ZXIKKyAgICAgbWFpbnRlbmFuY2UuICAoSWYgdGhlIFdvcmsgaXMgYSBMYVRlWCB3b3JrLCB0aGlzIGNvdWxkIGJlCisgICAgIGRvbmUsIGZvciBleGFtcGxlLCBieSBwb3N0aW5nIHRvIGNvbXAudGV4dC50ZXguKQorCisgM2EuIElmIHRoZSBDdXJyZW50IE1haW50YWluZXIgaXMgcmVhY2hhYmxlIGFuZCBhZ3JlZXMgdG8gcGFzcworICAgICBtYWludGVuYW5jZSBvZiB0aGUgV29yayB0byB5b3UsIHRoZW4gdGhpcyB0YWtlcyBlZmZlY3QKKyAgICAgaW1tZWRpYXRlbHkgdXBvbiBhbm5vdW5jZW1lbnQuCisgICAgIAorICBiLiBJZiB0aGUgQ3VycmVudCBNYWludGFpbmVyIGlzIG5vdCByZWFjaGFibGUgYW5kIHRoZSBDb3B5cmlnaHQKKyAgICAgSG9sZGVyIGFncmVlcyB0aGF0IG1haW50ZW5hbmNlIG9mIHRoZSBXb3JrIGJlIHBhc3NlZCB0byB5b3UsCisgICAgIHRoZW4gdGhpcyB0YWtlcyBlZmZlY3QgaW1tZWRpYXRlbHkgdXBvbiBhbm5vdW5jZW1lbnQuICAKKyAgICAKKyA0LiAgSWYgeW91IG1ha2UgYW4gYGludGVudGlvbiBhbm5vdW5jZW1lbnRgIGFzIGRlc2NyaWJlZCBpbiAyYi4gYWJvdmUKKyAgICAgYW5kIGFmdGVyIHRocmVlIG1vbnRocyB5b3VyIGludGVudGlvbiBpcyBjaGFsbGVuZ2VkIG5laXRoZXIgYnkKKyAgICAgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBub3IgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIgbm9yIGJ5IG90aGVyCisgICAgIHBlb3BsZSwgdGhlbiB5b3UgbWF5IGFycmFuZ2UgZm9yIHRoZSBXb3JrIHRvIGJlIGNoYW5nZWQgc28gYXMKKyAgICAgdG8gbmFtZSB5b3UgYXMgdGhlIChuZXcpIEN1cnJlbnQgTWFpbnRhaW5lci4KKyAgICAgCisgNS4gIElmIHRoZSBwcmV2aW91c2x5IHVucmVhY2hhYmxlIEN1cnJlbnQgTWFpbnRhaW5lciBiZWNvbWVzCisgICAgIHJlYWNoYWJsZSBvbmNlIG1vcmUgd2l0aGluIHRocmVlIG1vbnRocyBvZiBhIGNoYW5nZSBjb21wbGV0ZWQKKyAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIDNiKSBvciA0KSwgdGhlbiB0aGF0IEN1cnJlbnQgTWFpbnRhaW5lciBtdXN0CisgICAgIGJlY29tZSBvciByZW1haW4gdGhlIEN1cnJlbnQgTWFpbnRhaW5lciB1cG9uIHJlcXVlc3QgcHJvdmlkZWQKKyAgICAgdGhleSB0aGVuIHVwZGF0ZSB0aGVpciBjb21tdW5pY2F0aW9uIGRhdGEgd2l0aGluIG9uZSBtb250aC4KKworQSBjaGFuZ2UgaW4gdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBkb2VzIG5vdCwgb2YgaXRzZWxmLCBhbHRlciB0aGUgZmFjdAordGhhdCB0aGUgV29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTFBQTCBsaWNlbnNlLgorCitJZiB5b3UgYmVjb21lIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBzaG91bGQKK2ltbWVkaWF0ZWx5IHByb3ZpZGUsIHdpdGhpbiB0aGUgV29yaywgYSBwcm9taW5lbnQgYW5kIHVuYW1iaWd1b3VzCitzdGF0ZW1lbnQgb2YgeW91ciBzdGF0dXMgYXMgQ3VycmVudCBNYWludGFpbmVyLiAgWW91IHNob3VsZCBhbHNvCithbm5vdW5jZSB5b3VyIG5ldyBzdGF0dXMgdG8gdGhlIHNhbWUgcGVydGluZW50IGNvbW11bml0eSBhcworaW4gMmIpIGFib3ZlLgorCisKK1dIRVRIRVIgQU5EIEhPVyBUTyBESVNUUklCVVRFIFdPUktTIFVOREVSIFRISVMgTElDRU5TRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBpbXBvcnRhbnQgaW5zdHJ1Y3Rpb25zLCBleGFtcGxlcywgYW5kCityZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMgd2hvIGFyZSBjb25zaWRlcmluZyBkaXN0cmlidXRpbmcgdGhlaXIKK3dvcmtzIHVuZGVyIHRoaXMgbGljZW5zZS4gIFRoZXNlIGF1dGhvcnMgYXJlIGFkZHJlc3NlZCBhcyBgeW91YCBpbgordGhpcyBzZWN0aW9uLgorCitDaG9vc2luZyBUaGlzIExpY2Vuc2Ugb3IgQW5vdGhlciBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGZvciBhbnkgcGFydCBvZiB5b3VyIHdvcmsgeW91IHdhbnQgb3IgbmVlZCB0byB1c2UgKmRpc3RyaWJ1dGlvbioKK2NvbmRpdGlvbnMgdGhhdCBkaWZmZXIgc2lnbmlmaWNhbnRseSBmcm9tIHRob3NlIGluIHRoaXMgbGljZW5zZSwgdGhlbgorZG8gbm90IHJlZmVyIHRvIHRoaXMgbGljZW5zZSBhbnl3aGVyZSBpbiB5b3VyIHdvcmsgYnV0LCBpbnN0ZWFkLAorZGlzdHJpYnV0ZSB5b3VyIHdvcmsgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZS4gIFlvdSBtYXkgdXNlIHRoZSB0ZXh0CitvZiB0aGlzIGxpY2Vuc2UgYXMgYSBtb2RlbCBmb3IgeW91ciBvd24gbGljZW5zZSwgYnV0IHlvdXIgbGljZW5zZQorc2hvdWxkIG5vdCByZWZlciB0byB0aGUgTFBQTCBvciBvdGhlcndpc2UgZ2l2ZSB0aGUgaW1wcmVzc2lvbiB0aGF0Cit5b3VyIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExQUEwuCisKK1RoZSBkb2N1bWVudCBgbW9kZ3VpZGUudGV4YCBpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZXhwbGFpbnMKK3RoZSBtb3RpdmF0aW9uIGJlaGluZCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2UuICBJdCBleHBsYWlucywKK2ZvciBleGFtcGxlLCB3aHkgZGlzdHJpYnV0aW5nIExhVGVYIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgKEdQTCkgd2FzIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZS4gIEV2ZW4gaWYgeW91ciB3b3JrIGlzCit1bnJlbGF0ZWQgdG8gTGFUZVgsIHRoZSBkaXNjdXNzaW9uIGluIGBtb2RndWlkZS50ZXhgIG1heSBzdGlsbCBiZQorcmVsZXZhbnQsIGFuZCBhdXRob3JzIGludGVuZGluZyB0byBkaXN0cmlidXRlIHRoZWlyIHdvcmtzIHVuZGVyIGFueQorbGljZW5zZSBhcmUgZW5jb3VyYWdlZCB0byByZWFkIGl0LgorCitBIFJlY29tbWVuZGF0aW9uIG9uIE1vZGlmaWNhdGlvbiBXaXRob3V0IERpc3RyaWJ1dGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgaXMgd2lzZSBuZXZlciB0byBtb2RpZnkgYSBjb21wb25lbnQgb2YgdGhlIFdvcmssIGV2ZW4gZm9yIHlvdXIgb3duCitwZXJzb25hbCB1c2UsIHdpdGhvdXQgYWxzbyBtZWV0aW5nIHRoZSBhYm92ZSBjb25kaXRpb25zIGZvcgorZGlzdHJpYnV0aW5nIHRoZSBtb2RpZmllZCBjb21wb25lbnQuICBXaGlsZSB5b3UgbWlnaHQgaW50ZW5kIHRoYXQgc3VjaAorbW9kaWZpY2F0aW9ucyB3aWxsIG5ldmVyIGJlIGRpc3RyaWJ1dGVkLCBvZnRlbiB0aGlzIHdpbGwgaGFwcGVuIGJ5CithY2NpZGVudCAtLSB5b3UgbWF5IGZvcmdldCB0aGF0IHlvdSBoYXZlIG1vZGlmaWVkIHRoYXQgY29tcG9uZW50OyBvcgoraXQgbWF5IG5vdCBvY2N1ciB0byB5b3Ugd2hlbiBhbGxvd2luZyBvdGhlcnMgdG8gYWNjZXNzIHRoZSBtb2RpZmllZAordmVyc2lvbiB0aGF0IHlvdSBhcmUgdGh1cyBkaXN0cmlidXRpbmcgaXQgYW5kIHZpb2xhdGluZyB0aGUgY29uZGl0aW9ucworb2YgdGhpcyBsaWNlbnNlIGluIHdheXMgdGhhdCBjb3VsZCBoYXZlIGxlZ2FsIGltcGxpY2F0aW9ucyBhbmQsIHdvcnNlLAorY2F1c2UgcHJvYmxlbXMgZm9yIHRoZSBjb21tdW5pdHkuICBJdCBpcyB0aGVyZWZvcmUgdXN1YWxseSBpbiB5b3VyCitiZXN0IGludGVyZXN0IHRvIGtlZXAgeW91ciBjb3B5IG9mIHRoZSBXb3JrIGlkZW50aWNhbCB3aXRoIHRoZSBwdWJsaWMKK29uZS4gIE1hbnkgd29ya3MgcHJvdmlkZSB3YXlzIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoYXQgd29yaword2l0aG91dCBhbHRlcmluZyBhbnkgb2YgaXRzIGxpY2Vuc2VkIGNvbXBvbmVudHMuCisKK0hvdyB0byBVc2UgVGhpcyBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyB1c2UgdGhpcyBsaWNlbnNlLCBwbGFjZSBpbiBlYWNoIG9mIHRoZSBjb21wb25lbnRzIG9mIHlvdXIgd29yayBib3RoCithbiBleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB5b3VyIG5hbWUgYW5kIHRoZSB5ZWFyIHRoZSB3b3JrCit3YXMgYXV0aG9yZWQgYW5kL29yIGxhc3Qgc3Vic3RhbnRpYWxseSBtb2RpZmllZC4gIEluY2x1ZGUgYWxzbyBhCitzdGF0ZW1lbnQgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciBtb2RpZmljYXRpb24gb2YgdGhhdAorY29tcG9uZW50IGlzIGNvbnN0cmFpbmVkIGJ5IHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZS4KKworSGVyZSBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudDoKKworICAlJSBwaWcuZHR4CisgICUlIENvcHlyaWdodCAyMDA1IE0uIFkuIE5hbWUKKyAgJQorICAlIFRoaXMgd29yayBtYXkgYmUgZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyIHRoZQorICAlIGNvbmRpdGlvbnMgb2YgdGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UsIGVpdGhlciB2ZXJzaW9uIDEuMworICAlIG9mIHRoaXMgbGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAlIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGxpY2Vuc2UgaXMgaW4KKyAgJSAgIGh0dHA6Ly93d3cubGF0ZXgtcHJvamVjdC5vcmcvbHBwbC50eHQKKyAgJSBhbmQgdmVyc2lvbiAxLjMgb3IgbGF0ZXIgaXMgcGFydCBvZiBhbGwgZGlzdHJpYnV0aW9ucyBvZiBMYVRlWAorICAlIHZlcnNpb24gMjAwNS8xMi8wMSBvciBsYXRlci4KKyAgJQorICAlIFRoaXMgd29yayBoYXMgdGhlIExQUEwgbWFpbnRlbmFuY2Ugc3RhdHVzIGBtYWludGFpbmVkYC4KKyAgJSAKKyAgJSBUaGUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoaXMgd29yayBpcyBNLiBZLiBOYW1lLgorICAlCisgICUgVGhpcyB3b3JrIGNvbnNpc3RzIG9mIHRoZSBmaWxlcyBwaWcuZHR4IGFuZCBwaWcuaW5zCisgICUgYW5kIHRoZSBkZXJpdmVkIGZpbGUgcGlnLnN0eS4KKworR2l2ZW4gc3VjaCBhIG5vdGljZSBhbmQgc3RhdGVtZW50IGluIGEgZmlsZSwgdGhlIGNvbmRpdGlvbnMKK2dpdmVuIGluIHRoaXMgbGljZW5zZSBkb2N1bWVudCB3b3VsZCBhcHBseSwgd2l0aCB0aGUgYFdvcmtgIHJlZmVycmluZwordG8gdGhlIHRocmVlIGZpbGVzIGBwaWcuZHR4YCwgYHBpZy5pbnNgLCBhbmQgYHBpZy5zdHlgICh0aGUgbGFzdCBiZWluZworZ2VuZXJhdGVkIGZyb20gYHBpZy5kdHhgIHVzaW5nIGBwaWcuaW5zYCksIHRoZSBgQmFzZSBJbnRlcnByZXRlcmAKK3JlZmVycmluZyB0byBhbnkgYExhVGVYLUZvcm1hdGAsIGFuZCBib3RoIGBDb3B5cmlnaHQgSG9sZGVyYCBhbmQKK2BDdXJyZW50IE1haW50YWluZXJgIHJlZmVycmluZyB0byB0aGUgcGVyc29uIGBNLiBZLiBOYW1lYC4KKworSWYgeW91IGRvIG5vdCB3YW50IHRoZSBNYWludGVuYW5jZSBzZWN0aW9uIG9mIExQUEwgdG8gYXBwbHkgdG8geW91cgorV29yaywgY2hhbmdlIGBtYWludGFpbmVkYCBhYm92ZSBpbnRvIGBhdXRob3ItbWFpbnRhaW5lZGAuICAKK0hvd2V2ZXIsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYG1haW50YWluZWRgLCBhcyB0aGUgTWFpbnRlbmFuY2UKK3NlY3Rpb24gd2FzIGFkZGVkIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHlvdXIgV29yayByZW1haW5zIHVzZWZ1bCB0bwordGhlIGNvbW11bml0eSBldmVuIHdoZW4geW91IGNhbiBubyBsb25nZXIgbWFpbnRhaW4gYW5kIHN1cHBvcnQgaXQKK3lvdXJzZWxmLgorCitEZXJpdmVkIFdvcmtzIFRoYXQgQXJlIE5vdCBSZXBsYWNlbWVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZXZlcmFsIGNsYXVzZXMgb2YgdGhlIExQUEwgc3BlY2lmeSBtZWFucyB0byBwcm92aWRlIHJlbGlhYmlsaXR5IGFuZAorc3RhYmlsaXR5IGZvciB0aGUgdXNlciBjb21tdW5pdHkuIFRoZXkgdGhlcmVmb3JlIGNvbmNlcm4gdGhlbXNlbHZlcword2l0aCB0aGUgY2FzZSB0aGF0IGEgRGVyaXZlZCBXb3JrIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYQorKGNvbXBhdGlibGUgb3IgaW5jb21wYXRpYmxlKSByZXBsYWNlbWVudCBvZiB0aGUgb3JpZ2luYWwgV29yay4gSWYKK3RoaXMgaXMgbm90IHRoZSBjYXNlIChlLmcuLCBpZiBhIGZldyBsaW5lcyBvZiBjb2RlIGFyZSByZXVzZWQgZm9yIGEKK2NvbXBsZXRlbHkgZGlmZmVyZW50IHRhc2spLCB0aGVuIGNsYXVzZXMgNmIgYW5kIDZkIHNoYWxsIG5vdCBhcHBseS4KKworCitJbXBvcnRhbnQgUmVjb21tZW5kYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBEZWZpbmluZyBXaGF0IENvbnN0aXR1dGVzIHRoZSBXb3JrCisKKyAgIFRoZSBMUFBMIHJlcXVpcmVzIHRoYXQgZGlzdHJpYnV0aW9ucyBvZiB0aGUgV29yayBjb250YWluIGFsbCB0aGUKKyAgIGZpbGVzIG9mIHRoZSBXb3JrLiAgSXQgaXMgdGhlcmVmb3JlIGltcG9ydGFudCB0aGF0IHlvdSBwcm92aWRlIGEKKyAgIHdheSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGljaCBmaWxlcyBjb25zdGl0dXRlIHRoZSBXb3JrLgorICAgVGhpcyBjb3VsZCwgZm9yIGV4YW1wbGUsIGJlIGFjaGlldmVkIGJ5IGV4cGxpY2l0bHkgbGlzdGluZyBhbGwgdGhlCisgICBmaWxlcyBvZiB0aGUgV29yayBuZWFyIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIGVhY2ggZmlsZSBvciBieQorICAgdXNpbmcgYSBsaW5lIHN1Y2ggYXM6CisKKyAgICAlIFRoaXMgd29yayBjb25zaXN0cyBvZiBhbGwgZmlsZXMgbGlzdGVkIGluIG1hbmlmZXN0LnR4dC4KKyAgIAorICAgaW4gdGhhdCBwbGFjZS4gIEluIHRoZSBhYnNlbmNlIG9mIGFuIHVuZXF1aXZvY2FsIGxpc3QgaXQgbWlnaHQgYmUKKyAgIGltcG9zc2libGUgZm9yIHRoZSBsaWNlbnNlZSB0byBkZXRlcm1pbmUgd2hhdCBpcyBjb25zaWRlcmVkIGJ5IHlvdQorICAgdG8gY29tcHJpc2UgdGhlIFdvcmsgYW5kLCBpbiBzdWNoIGEgY2FzZSwgdGhlIGxpY2Vuc2VlIHdvdWxkIGJlCisgICBlbnRpdGxlZCB0byBtYWtlIHJlYXNvbmFibGUgY29uamVjdHVyZXMgYXMgdG8gd2hpY2ggZmlsZXMgY29tcHJpc2UKKyAgIHRoZSBXb3JrLgorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTGlicG5nIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MaWJwbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkNWIwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTGlicG5nCkBAIC0wLDAgKzEsMTEyIEBACisKK1RoaXMgY29weSBvZiB0aGUgbGlicG5nIG5vdGljZXMgaXMgcHJvdmlkZWQgZm9yIHlvdXIgY29udmVuaWVuY2UuICBJbiBjYXNlIG9mCithbnkgZGlzY3JlcGFuY3kgYmV0d2VlbiB0aGlzIGNvcHkgYW5kIHRoZSBub3RpY2VzIGluIHRoZSBmaWxlIHBuZy5oIHRoYXQgaXMKK2luY2x1ZGVkIGluIHRoZSBsaWJwbmcgZGlzdHJpYnV0aW9uLCB0aGUgbGF0dGVyIHNoYWxsIHByZXZhaWwuCisKK0NPUFlSSUdIVCBOT1RJQ0UsIERJU0NMQUlNRVIsIGFuZCBMSUNFTlNFOgorCitJZiB5b3UgbW9kaWZ5IGxpYnBuZyB5b3UgbWF5IGluc2VydCBhZGRpdGlvbmFsIG5vdGljZXMgaW1tZWRpYXRlbHkgZm9sbG93aW5nCit0aGlzIHNlbnRlbmNlLgorCitUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIGxpYnBuZyBsaWNlbnNlLgorCitsaWJwbmcgdmVyc2lvbnMgMS4yLjYsIEF1Z3VzdCAxNSwgMjAwNCwgdGhyb3VnaCAxLjQuNSwgRGVjZW1iZXIgOSwgMjAxMCwgYXJlCitDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYtMjAxMCBHbGVubiBSYW5kZXJzLVBlaHJzb24sIGFuZCBhcmUKK2Rpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0xLjIuNQord2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWwgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKKworICAgQ29zbWluIFRydXRhCisKK2xpYnBuZyB2ZXJzaW9ucyAxLjAuNywgSnVseSAxLCAyMDAwLCB0aHJvdWdoIDEuMi41IC0gT2N0b2JlciAzLCAyMDAyLCBhcmUKK0NvcHlyaWdodCAoYykgMjAwMC0yMDAyIEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZQorZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTEuMC42Cit3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKKworICAgU2ltb24tUGllcnJlIENhZGlldXgKKyAgIEVyaWMgUy4gUmF5bW9uZAorICAgR2lsbGVzIFZvbGxhbnQKKworYW5kIHdpdGggdGhlIGZvbGxvd2luZyBhZGRpdGlvbnMgdG8gdGhlIGRpc2NsYWltZXI6CisKKyAgIFRoZXJlIGlzIG5vIHdhcnJhbnR5IGFnYWluc3QgaW50ZXJmZXJlbmNlIHdpdGggeW91ciBlbmpveW1lbnQgb2YgdGhlCisgICBsaWJyYXJ5IG9yIGFnYWluc3QgaW5mcmluZ2VtZW50LiAgVGhlcmUgaXMgbm8gd2FycmFudHkgdGhhdCBvdXIKKyAgIGVmZm9ydHMgb3IgdGhlIGxpYnJhcnkgd2lsbCBmdWxmaWxsIGFueSBvZiB5b3VyIHBhcnRpY3VsYXIgcHVycG9zZXMKKyAgIG9yIG5lZWRzLiAgVGhpcyBsaWJyYXJ5IGlzIHByb3ZpZGVkIHdpdGggYWxsIGZhdWx0cywgYW5kIHRoZSBlbnRpcmUKKyAgIHJpc2sgb2Ygc2F0aXNmYWN0b3J5IHF1YWxpdHksIHBlcmZvcm1hbmNlLCBhY2N1cmFjeSwgYW5kIGVmZm9ydCBpcyB3aXRoCisgICB0aGUgdXNlci4KKworbGlicG5nIHZlcnNpb25zIDAuOTcsIEphbnVhcnkgMTk5OCwgdGhyb3VnaCAxLjAuNiwgTWFyY2ggMjAsIDIwMDAsIGFyZQorQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5IEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZQorZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTAuOTYsCit3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnM6CisKKyAgIFRvbSBMYW5lCisgICBHbGVubiBSYW5kZXJzLVBlaHJzb24KKyAgIFdpbGxlbSB2YW4gU2NoYWlrCisKK2xpYnBuZyB2ZXJzaW9ucyAwLjg5LCBKdW5lIDE5OTYsIHRocm91Z2ggMC45NiwgTWF5IDE5OTcsIGFyZQorQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyCitEaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMC44OCwKK3dpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFscyBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9yczoKKworICAgSm9obiBCb3dsZXIKKyAgIEtldmluIEJyYWNleQorICAgU2FtIEJ1c2hlbGwKKyAgIE1hZ251cyBIb2xtZ3JlbgorICAgR3JlZyBSb2Vsb2ZzCisgICBUb20gVGFubmVyCisKK2xpYnBuZyB2ZXJzaW9ucyAwLjUsIE1heSAxOTk1LCB0aHJvdWdoIDAuODgsIEphbnVhcnkgMTk5NiwgYXJlCitDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYgR3V5IEVyaWMgU2NoYWxuYXQsIEdyb3VwIDQyLCBJbmMuCisKK0ZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UsICJDb250cmlidXRpbmcgQXV0aG9ycyIKK2lzIGRlZmluZWQgYXMgdGhlIGZvbGxvd2luZyBzZXQgb2YgaW5kaXZpZHVhbHM6CisKKyAgIEFuZHJlYXMgRGlsZ2VyCisgICBEYXZlIE1hcnRpbmRhbGUKKyAgIEd1eSBFcmljIFNjaGFsbmF0CisgICBQYXVsIFNjaG1pZHQKKyAgIFRpbSBXZWduZXIKKworVGhlIFBORyBSZWZlcmVuY2UgTGlicmFyeSBpcyBzdXBwbGllZCAiQVMgSVMiLiAgVGhlIENvbnRyaWJ1dGluZyBBdXRob3JzCithbmQgR3JvdXAgNDIsIEluYy4gZGlzY2xhaW0gYWxsIHdhcnJhbnRpZXMsIGV4cHJlc3NlZCBvciBpbXBsaWVkLAoraW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgb2YKK2ZpdG5lc3MgZm9yIGFueSBwdXJwb3NlLiAgVGhlIENvbnRyaWJ1dGluZyBBdXRob3JzIGFuZCBHcm91cCA0MiwgSW5jLgorYXNzdW1lIG5vIGxpYWJpbGl0eSBmb3IgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5LAorb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCB3aGljaCBtYXkgcmVzdWx0IGZyb20gdGhlIHVzZSBvZiB0aGUgUE5HCitSZWZlcmVuY2UgTGlicmFyeSwgZXZlbiBpZiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworc291cmNlIGNvZGUsIG9yIHBvcnRpb25zIGhlcmVvZiwgZm9yIGFueSBwdXJwb3NlLCB3aXRob3V0IGZlZSwgc3ViamVjdAordG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKzEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb3VyY2UgY29kZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZC4KKworMi4gQWx0ZXJlZCB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2ggYW5kIG11c3Qgbm90CisgICBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc291cmNlLgorCiszLiBUaGlzIENvcHlyaWdodCBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkKKyAgIHNvdXJjZSBvciBhbHRlcmVkIHNvdXJjZSBkaXN0cmlidXRpb24uCisKK1RoZSBDb250cmlidXRpbmcgQXV0aG9ycyBhbmQgR3JvdXAgNDIsIEluYy4gc3BlY2lmaWNhbGx5IHBlcm1pdCwgd2l0aG91dAorZmVlLCBhbmQgZW5jb3VyYWdlIHRoZSB1c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBhcyBhIGNvbXBvbmVudCB0bworc3VwcG9ydGluZyB0aGUgUE5HIGZpbGUgZm9ybWF0IGluIGNvbW1lcmNpYWwgcHJvZHVjdHMuICBJZiB5b3UgdXNlIHRoaXMKK3NvdXJjZSBjb2RlIGluIGEgcHJvZHVjdCwgYWNrbm93bGVkZ21lbnQgaXMgbm90IHJlcXVpcmVkIGJ1dCB3b3VsZCBiZQorYXBwcmVjaWF0ZWQuCisKKworQSAicG5nX2dldF9jb3B5cmlnaHQiIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgZm9yIGNvbnZlbmllbnQgdXNlIGluICJhYm91dCIKK2JveGVzIGFuZCB0aGUgbGlrZToKKworICAgcHJpbnRmKCIlcyIscG5nX2dldF9jb3B5cmlnaHQoTlVMTCkpOworCitBbHNvLCB0aGUgUE5HIGxvZ28gKGluIFBORyBmb3JtYXQsIG9mIGNvdXJzZSkgaXMgc3VwcGxpZWQgaW4gdGhlCitmaWxlcyAicG5nYmFyLnBuZyIgYW5kICJwbmdiYXIuanBnICg4OHgzMSkgYW5kICJwbmdub3cucG5nIiAoOTh4MzEpLgorCitMaWJwbmcgaXMgT1NJIENlcnRpZmllZCBPcGVuIFNvdXJjZSBTb2Z0d2FyZS4gIE9TSSBDZXJ0aWZpZWQgT3BlbiBTb3VyY2UgaXMgYQorY2VydGlmaWNhdGlvbiBtYXJrIG9mIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlLgorCitHbGVubiBSYW5kZXJzLVBlaHJzb24KK2dsZW5ucnAgYXQgdXNlcnMuc291cmNlZm9yZ2UubmV0CitEZWNlbWJlciA5LCAyMDEwCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTUlUIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NSVQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmOGJlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTUlUCkBAIC0wLDAgKzEsMjMgQEAKKworTUlUIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSA8eWVhcj4gPGNvcHlyaWdodCBob2xkZXJzPgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZGMzZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01QTC0xLjAKQEAgLTAsMCArMSwxMDkgQEAKKworTU9aSUxMQSBQVUJMSUMgTElDRU5TRQorVmVyc2lvbiAxLjAKKworMS4gRGVmaW5pdGlvbnMuCisKKzEuMS4gYGBDb250cmlidXRvcmBgIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKzEuMi4gYGBDb250cmlidXRvciBWZXJzaW9uYGAgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuIGBgQ292ZXJlZCBDb2RlYGAgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40LiBgYEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbWBgIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuIGBgRXhlY3V0YWJsZWBgIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorCisxLjYuIGBgSW5pdGlhbCBEZXZlbG9wZXJgYCBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisKKzEuNy4gYGBMYXJnZXIgV29ya2BgIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuOC4gYGBMaWNlbnNlYGAgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS45LiBgYE1vZGlmaWNhdGlvbnNgYCBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKKworQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworMS4xMC4gYGBPcmlnaW5hbCBDb2RlYGAgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMS4gYGBTb3VyY2UgQ29kZWBgIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIGEgbGlzdCBvZiBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworMS4xMi4gYGBZb3VgYCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCBgYFlvdWBgIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBgYGNvbnRyb2xgYCBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4gCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgSW5pdGlhbCBEZXZlbG9wZXIsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsIChgYFV0aWxpemVgYCkgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zLgorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LiAKK0VhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsIHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYW5kIG5vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4KKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLiAKK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIAorQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4gCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4gCitJZiBZb3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIHBhcnR5IGNsYWltcyBhbiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaW4gcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IG9yIGNvZGUgKG9yIGl0cyB1dGlsaXphdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UpLCB5b3UgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgYGBMRUdBTGBgIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgeW91IG9idGFpbiBzdWNoIGtub3dsZWRnZSBhZnRlciBZb3UgbWFrZSBZb3VyIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBZb3Ugc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgWW91IG1ha2UgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisKKyhiKSBDb250cmlidXRvciBBUElzLiAKK0lmIFlvdXIgTW9kaWZpY2F0aW9uIGlzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgWW91IG93biBvciBjb250cm9sIHBhdGVudHMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgeW91IG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4gCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSwgYW5kIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlLCB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpLCBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiAKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjcuIExhcmdlciBXb3Jrcy4gCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorCis1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEsIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorNi4xLiBOZXcgVmVyc2lvbnMuIAorTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24gKGBgTmV0c2NhcGVgYCkgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLiAKK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBOZXRzY2FwZS4gTm8gb25lIG90aGVyIHRoYW4gTmV0c2NhcGUgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis2LjMuIERlcml2YXRpdmUgV29ya3MuIAorSWYgeW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgYGBNb3ppbGxhYGAsIGBgTU9aSUxMQVBMYGAsIGBgTU9aUExgYCwgYGBOZXRzY2FwZWBgLCBgYE5QTGBgIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGFueXdoZXJlIGluIHlvdXIgbGljZW5zZSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgeW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIGFuZCBOZXRzY2FwZSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiBgYEFTIElTYGAgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKzguIFRFUk1JTkFUSU9OLgorVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBZT1UgT1IgQU5ZIE9USEVSIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSEFUIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorVGhlIENvdmVyZWQgQ29kZSBpcyBhIGBgY29tbWVyY2lhbCBpdGVtLGBgIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiBgYGNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmVgYCBhbmQgYGBjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sYGAgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorMTEuIE1JU0NFTExBTkVPVVMuCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4sIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2E6IChhKSB1bmxlc3Mgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nLCBhbGwgZGlzcHV0ZXMgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIChleGNlcHRpbmcgYW55IGRpc3B1dGUgcmVsYXRpbmcgdG8gaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cykgc2hhbGwgYmUgc3ViamVjdCB0byBmaW5hbCBhbmQgYmluZGluZyBhcmJpdHJhdGlvbiwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHBheWluZyBhbGwgY29zdHMgb2YgYXJiaXRyYXRpb247IChiKSBhbnkgYXJiaXRyYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgaGVsZCBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHVuZGVyIHRoZSBhdXNwaWNlcyBvZiBKQU1TL0VuZERpc3B1dGU7IGFuZCAoYykgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KK0V4Y2VwdCBpbiBjYXNlcyB3aGVyZSBhbm90aGVyIENvbnRyaWJ1dG9yIGhhcyBmYWlsZWQgdG8gY29tcGx5IHdpdGggU2VjdGlvbiAzLjQsIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIFlvdXIgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgYmFzZWQgb24gdGhlIG51bWJlciBvZiBjb3BpZXMgb2YgQ292ZXJlZCBDb2RlIHlvdSBtYWRlIGF2YWlsYWJsZSwgdGhlIHJldmVudWVzIHlvdSByZWNlaXZlZCBmcm9tIHV0aWxpemluZyBzdWNoIHJpZ2h0cywgYW5kIG90aGVyIHJlbGV2YW50IGZhY3RvcnMuIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggYWZmZWN0ZWQgcGFydGllcyB0byBkaXN0cmlidXRlIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4KK0VYSElCSVQgQS4KK2BgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fLiBQb3J0aW9ucyBjcmVhdGVkIGJ5IF9fX19fX19fX19fX19fX19fX19fX18gYXJlIENvcHlyaWdodCAoQykgX19fX19fIF9fX19fX19fX19fX19fX19fX19fX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uYGAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMS4xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYThjNGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01QTC0xLjEKQEAgLTAsMCArMSwxODUgQEAKKworTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMQorCisxLiBEZWZpbml0aW9ucy4KKworMS4wLjEuICJDb21tZXJjaWFsIFVzZSIKK21lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZSBDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuCisxLjEuICJDb250cmlidXRvciIKK21lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iCittZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisxLjMuICJDb3ZlcmVkIENvZGUiCittZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorMS40LiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIgorbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisxLjUuICJFeGVjdXRhYmxlIgorbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisxLjYuICJJbml0aWFsIERldmVsb3BlciIKK21lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKzEuNy4gIkxhcmdlciBXb3JrIgorbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKzEuOC4gIkxpY2Vuc2UiCittZWFucyB0aGlzIGRvY3VtZW50LgorMS44LjEuICJMaWNlbnNhYmxlIgorbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisxLjkuICJNb2RpZmljYXRpb25zIgorbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6CitBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKzEuMTAuICJPcmlnaW5hbCBDb2RlIgorbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKzEuMTAuMS4gIlBhdGVudCBDbGFpbXMiCittZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKzEuMTEuICJTb3VyY2UgQ29kZSIKK21lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorMS4xMi4gIllvdSIgKG9yICJZb3VyIikKK21lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKwordW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKK3VuZGVyIFBhdGVudHMgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLgordGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMSAoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KK05vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMSAoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorCit1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCit1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLgordGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yIChhKSBhbmQgMi4yIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUuCitOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIgKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIENvZGUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4KKworVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKworKGEpIFRoaXJkIFBhcnR5IENsYWltcworCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHlgcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKworKGIpIENvbnRyaWJ1dG9yIEFQSXMKKworSWYgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorCisoYykgUmVwcmVzZW50YXRpb25zLgorCitDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbiAzLjQgKGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3JgcyBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuCisKK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIG9yIG93bmVyc2hpcCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9ucyAzLjEsIDMuMiwgMy4zLCAzLjQgYW5kIDMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50YHMgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKworMy43LiBMYXJnZXIgV29ya3MuCisKK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorCis1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorCis2LjEuIE5ldyBWZXJzaW9ucworCitOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbiAoIk5ldHNjYXBlIikgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMKKworT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IE5ldHNjYXBlLiBObyBvbmUgb3RoZXIgdGhhbiBOZXRzY2FwZSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3JrcworCitJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyAiTW96aWxsYSIsICJNT1pJTExBUEwiLCAiTU9aUEwiLCAiTmV0c2NhcGUiLCAiTVBMIiwgIk5QTCIgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91ciBsaWNlbnNlIChleGNlcHQgdG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIGFuZCBOZXRzY2FwZSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZCisKK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis4LiBUZXJtaW5hdGlvbgorCis4LjEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworOC4yLiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSBhbGxlZ2luZyB0aGF0OgorCitzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIFBhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cyBvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuCithbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKSBhbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwgc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC4KKzguMy4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS4KKworOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworMTAuIFUuUy4gZ292ZXJubWVudCBlbmQgdXNlcnMKKworVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUiIGFuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCIgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMS4gTWlzY2VsbGFuZW91cworCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTIuIFJlc3BvbnNpYmlsaXR5IGZvciBjbGFpbXMKKworQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisxMy4gTXVsdGlwbGUtbGljZW5zZWQgY29kZQorCitJbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMgIk11bHRpcGxlLUxpY2Vuc2VkIi4gIk11bHRpcGxlLUxpY2Vuc2VkIiBtZWFucyB0aGF0IHRoZSBJbml0aWFsIERldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIgWW91ciBjaG9pY2Ugb2YgdGhlIE1QTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgZmlsZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLgorCitFeGhpYml0IEEgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlLgorCisiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZQorVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK2h0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCitiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX18uCitQb3J0aW9ucyBjcmVhdGVkIGJ5IF9fX19fX19fX19fX19fX19fX19fX18gYXJlIENvcHlyaWdodCAoQykgX19fX19fCitfX19fX19fX19fX19fX19fX19fX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCitBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSAgIltfX19dIExpY2Vuc2UiKSwgaW4gd2hpY2ggY2FzZSB0aGUKK3Byb3Zpc2lvbnMgb2YgW19fX19fX10gTGljZW5zZSBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlCithYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBbX19fX10gTGljZW5zZSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKK3lvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCitvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBbX19fXSBMaWNlbnNlLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQordGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQordW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIFtfX19dIExpY2Vuc2UuIgorTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mIHRoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IHNob3VsZCB1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZTJmNzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01QTC0yLjAKQEAgLTAsMCArMSwzNzMgQEAKK01vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gRGVmaW5pdGlvbnMKKy0tLS0tLS0tLS0tLS0tCisKKzEuMS4gIkNvbnRyaWJ1dG9yIgorICAgIG1lYW5zIGVhY2ggaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgdGhhdCBjcmVhdGVzLCBjb250cmlidXRlcyB0bworICAgIHRoZSBjcmVhdGlvbiBvZiwgb3Igb3ducyBDb3ZlcmVkIFNvZnR3YXJlLgorCisxLjIuICJDb250cmlidXRvciBWZXJzaW9uIgorICAgIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9ucyBvZiBvdGhlcnMgKGlmIGFueSkgdXNlZAorICAgIGJ5IGEgQ29udHJpYnV0b3IgYW5kIHRoYXQgcGFydGljdWxhciBDb250cmlidXRvcidzIENvbnRyaWJ1dGlvbi4KKworMS4zLiAiQ29udHJpYnV0aW9uIgorICAgIG1lYW5zIENvdmVyZWQgU29mdHdhcmUgb2YgYSBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjQuICJDb3ZlcmVkIFNvZnR3YXJlIgorICAgIG1lYW5zIFNvdXJjZSBDb2RlIEZvcm0gdG8gd2hpY2ggdGhlIGluaXRpYWwgQ29udHJpYnV0b3IgaGFzIGF0dGFjaGVkCisgICAgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEsIHRoZSBFeGVjdXRhYmxlIEZvcm0gb2Ygc3VjaCBTb3VyY2UgQ29kZQorICAgIEZvcm0sIGFuZCBNb2RpZmljYXRpb25zIG9mIHN1Y2ggU291cmNlIENvZGUgRm9ybSwgaW4gZWFjaCBjYXNlCisgICAgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNS4gIkluY29tcGF0aWJsZSBXaXRoIFNlY29uZGFyeSBMaWNlbnNlcyIKKyAgICBtZWFucworCisgICAgKGEpIHRoYXQgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgZGVzY3JpYmVkCisgICAgICAgIGluIEV4aGliaXQgQiB0byB0aGUgQ292ZXJlZCBTb2Z0d2FyZTsgb3IKKworICAgIChiKSB0aGF0IHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHdhcyBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAgICAgICAgdmVyc2lvbiAxLjEgb3IgZWFybGllciBvZiB0aGUgTGljZW5zZSwgYnV0IG5vdCBhbHNvIHVuZGVyIHRoZQorICAgICAgICB0ZXJtcyBvZiBhIFNlY29uZGFyeSBMaWNlbnNlLgorCisxLjYuICJFeGVjdXRhYmxlIEZvcm0iCisgICAgbWVhbnMgYW55IGZvcm0gb2YgdGhlIHdvcmsgb3RoZXIgdGhhbiBTb3VyY2UgQ29kZSBGb3JtLgorCisxLjcuICJMYXJnZXIgV29yayIKKyAgICBtZWFucyBhIHdvcmsgdGhhdCBjb21iaW5lcyBDb3ZlcmVkIFNvZnR3YXJlIHdpdGggb3RoZXIgbWF0ZXJpYWwsIGluIAorICAgIGEgc2VwYXJhdGUgZmlsZSBvciBmaWxlcywgdGhhdCBpcyBub3QgQ292ZXJlZCBTb2Z0d2FyZS4KKworMS44LiAiTGljZW5zZSIKKyAgICBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjkuICJMaWNlbnNhYmxlIgorICAgIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwKKyAgICB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSwgYW55IGFuZAorICAgIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMC4gIk1vZGlmaWNhdGlvbnMiCisgICAgbWVhbnMgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAoYSkgYW55IGZpbGUgaW4gU291cmNlIENvZGUgRm9ybSB0aGF0IHJlc3VsdHMgZnJvbSBhbiBhZGRpdGlvbiB0bywKKyAgICAgICAgZGVsZXRpb24gZnJvbSwgb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250ZW50cyBvZiBDb3ZlcmVkCisgICAgICAgIFNvZnR3YXJlOyBvcgorCisgICAgKGIpIGFueSBuZXcgZmlsZSBpbiBTb3VyY2UgQ29kZSBGb3JtIHRoYXQgY29udGFpbnMgYW55IENvdmVyZWQKKyAgICAgICAgU29mdHdhcmUuCisKKzEuMTEuICJQYXRlbnQgQ2xhaW1zIiBvZiBhIENvbnRyaWJ1dG9yCisgICAgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLAorICAgIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgc3VjaAorICAgIENvbnRyaWJ1dG9yIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkLCBidXQgZm9yIHRoZSBncmFudCBvZiB0aGUKKyAgICBMaWNlbnNlLCBieSB0aGUgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yIHNhbGUsIGhhdmluZworICAgIG1hZGUsIGltcG9ydCwgb3IgdHJhbnNmZXIgb2YgZWl0aGVyIGl0cyBDb250cmlidXRpb25zIG9yIGl0cworICAgIENvbnRyaWJ1dG9yIFZlcnNpb24uCisKKzEuMTIuICJTZWNvbmRhcnkgTGljZW5zZSIKKyAgICBtZWFucyBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIuMCwgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIuMSwgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbAorICAgIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDMuMCwgb3IgYW55IGxhdGVyIHZlcnNpb25zIG9mIHRob3NlCisgICAgbGljZW5zZXMuCisKKzEuMTMuICJTb3VyY2UgQ29kZSBGb3JtIgorICAgIG1lYW5zIHRoZSBmb3JtIG9mIHRoZSB3b3JrIHByZWZlcnJlZCBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMuCisKKzEuMTQuICJZb3UiIChvciAiWW91ciIpCisgICAgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzCisgICAgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQKKyAgICBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvcgorICAgIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdAorICAgIG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksCisgICAgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuCisgICAgZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwKKyAgICBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIExpY2Vuc2UgR3JhbnRzIGFuZCBDb25kaXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisyLjEuIEdyYW50cworCitFYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLAorbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlOgorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKQorICAgIExpY2Vuc2FibGUgYnkgc3VjaCBDb250cmlidXRvciB0byB1c2UsIHJlcHJvZHVjZSwgbWFrZSBhdmFpbGFibGUsCisgICAgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIGV4cGxvaXQgaXRzCisgICAgQ29udHJpYnV0aW9ucywgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggTW9kaWZpY2F0aW9ucywgb3IKKyAgICBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBvZiBzdWNoIENvbnRyaWJ1dG9yIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIKKyAgICBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgZWl0aGVyIGl0cworICAgIENvbnRyaWJ1dGlvbnMgb3IgaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24uCisKKzIuMi4gRWZmZWN0aXZlIERhdGUKKworVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbiAyLjEgd2l0aCByZXNwZWN0IHRvIGFueSBDb250cmlidXRpb24KK2JlY29tZSBlZmZlY3RpdmUgZm9yIGVhY2ggQ29udHJpYnV0aW9uIG9uIHRoZSBkYXRlIHRoZSBDb250cmlidXRvciBmaXJzdAorZGlzdHJpYnV0ZXMgc3VjaCBDb250cmlidXRpb24uCisKKzIuMy4gTGltaXRhdGlvbnMgb24gR3JhbnQgU2NvcGUKKworVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIgYXJlIHRoZSBvbmx5IHJpZ2h0cyBncmFudGVkIHVuZGVyCit0aGlzIExpY2Vuc2UuIE5vIGFkZGl0aW9uYWwgcmlnaHRzIG9yIGxpY2Vuc2VzIHdpbGwgYmUgaW1wbGllZCBmcm9tIHRoZQorZGlzdHJpYnV0aW9uIG9yIGxpY2Vuc2luZyBvZiBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIHRoaXMgTGljZW5zZS4KK05vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCBieSBhCitDb250cmlidXRvcjoKKworKGEpIGZvciBhbnkgY29kZSB0aGF0IGEgQ29udHJpYnV0b3IgaGFzIHJlbW92ZWQgZnJvbSBDb3ZlcmVkIFNvZnR3YXJlOworICAgIG9yCisKKyhiKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IChpKSBZb3VyIGFuZCBhbnkgb3RoZXIgdGhpcmQgcGFydHkncworICAgIG1vZGlmaWNhdGlvbnMgb2YgQ292ZXJlZCBTb2Z0d2FyZSwgb3IgKGlpKSB0aGUgY29tYmluYXRpb24gb2YgaXRzCisgICAgQ29udHJpYnV0aW9ucyB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMgcGFydCBvZiBpdHMgQ29udHJpYnV0b3IKKyAgICBWZXJzaW9uKTsgb3IKKworKGMpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgU29mdHdhcmUgaW4gdGhlIGFic2VuY2Ugb2YKKyAgICBpdHMgQ29udHJpYnV0aW9ucy4KKworVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgaW4gdGhlIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsCitvciBsb2dvcyBvZiBhbnkgQ29udHJpYnV0b3IgKGV4Y2VwdCBhcyBtYXkgYmUgbmVjZXNzYXJ5IHRvIGNvbXBseSB3aXRoCit0aGUgbm90aWNlIHJlcXVpcmVtZW50cyBpbiBTZWN0aW9uIDMuNCkuCisKKzIuNC4gU3Vic2VxdWVudCBMaWNlbnNlcworCitObyBDb250cmlidXRvciBtYWtlcyBhZGRpdGlvbmFsIGdyYW50cyBhcyBhIHJlc3VsdCBvZiBZb3VyIGNob2ljZSB0bworZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlIChzZWUgU2VjdGlvbiAxMC4yKSBvciB1bmRlciB0aGUgdGVybXMgb2YgYSBTZWNvbmRhcnkgTGljZW5zZSAoaWYKK3Blcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAzLjMpLgorCisyLjUuIFJlcHJlc2VudGF0aW9uCisKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRoZSBDb250cmlidXRvciBiZWxpZXZlcyBpdHMKK0NvbnRyaWJ1dGlvbnMgYXJlIGl0cyBvcmlnaW5hbCBjcmVhdGlvbihzKSBvciBpdCBoYXMgc3VmZmljaWVudCByaWdodHMKK3RvIGdyYW50IHRoZSByaWdodHMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisyLjYuIEZhaXIgVXNlCisKK1RoaXMgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gbGltaXQgYW55IHJpZ2h0cyBZb3UgaGF2ZSB1bmRlcgorYXBwbGljYWJsZSBjb3B5cmlnaHQgZG9jdHJpbmVzIG9mIGZhaXIgdXNlLCBmYWlyIGRlYWxpbmcsIG9yIG90aGVyCitlcXVpdmFsZW50cy4KKworMi43LiBDb25kaXRpb25zCisKK1NlY3Rpb25zIDMuMSwgMy4yLCAzLjMsIGFuZCAzLjQgYXJlIGNvbmRpdGlvbnMgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQKK2luIFNlY3Rpb24gMi4xLgorCiszLiBSZXNwb25zaWJpbGl0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKzMuMS4gRGlzdHJpYnV0aW9uIG9mIFNvdXJjZSBGb3JtCisKK0FsbCBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBTb2Z0d2FyZSBpbiBTb3VyY2UgQ29kZSBGb3JtLCBpbmNsdWRpbmcgYW55CitNb2RpZmljYXRpb25zIHRoYXQgWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSwgbXVzdCBiZSB1bmRlcgordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgaW5mb3JtIHJlY2lwaWVudHMgdGhhdCB0aGUgU291cmNlCitDb2RlIEZvcm0gb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgaXMgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UsIGFuZCBob3cgdGhleSBjYW4gb2J0YWluIGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtYXkgbm90CithdHRlbXB0IHRvIGFsdGVyIG9yIHJlc3RyaWN0IHRoZSByZWNpcGllbnRzJyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlCitGb3JtLgorCiszLjIuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIEZvcm0KKworSWYgWW91IGRpc3RyaWJ1dGUgQ292ZXJlZCBTb2Z0d2FyZSBpbiBFeGVjdXRhYmxlIEZvcm0gdGhlbjoKKworKGEpIHN1Y2ggQ292ZXJlZCBTb2Z0d2FyZSBtdXN0IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUKKyAgICBGb3JtLCBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjEsIGFuZCBZb3UgbXVzdCBpbmZvcm0gcmVjaXBpZW50cyBvZgorICAgIHRoZSBFeGVjdXRhYmxlIEZvcm0gaG93IHRoZXkgY2FuIG9idGFpbiBhIGNvcHkgb2Ygc3VjaCBTb3VyY2UgQ29kZQorICAgIEZvcm0gYnkgcmVhc29uYWJsZSBtZWFucyBpbiBhIHRpbWVseSBtYW5uZXIsIGF0IGEgY2hhcmdlIG5vIG1vcmUKKyAgICB0aGFuIHRoZSBjb3N0IG9mIGRpc3RyaWJ1dGlvbiB0byB0aGUgcmVjaXBpZW50OyBhbmQKKworKGIpIFlvdSBtYXkgZGlzdHJpYnV0ZSBzdWNoIEV4ZWN1dGFibGUgRm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworICAgIExpY2Vuc2UsIG9yIHN1YmxpY2Vuc2UgaXQgdW5kZXIgZGlmZmVyZW50IHRlcm1zLCBwcm92aWRlZCB0aGF0IHRoZQorICAgIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIEZvcm0gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlcgorICAgIHRoZSByZWNpcGllbnRzJyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIEZvcm0gdW5kZXIgdGhpcyBMaWNlbnNlLgorCiszLjMuIERpc3RyaWJ1dGlvbiBvZiBhIExhcmdlciBXb3JrCisKK1lvdSBtYXkgY3JlYXRlIGFuZCBkaXN0cmlidXRlIGEgTGFyZ2VyIFdvcmsgdW5kZXIgdGVybXMgb2YgWW91ciBjaG9pY2UsCitwcm92aWRlZCB0aGF0IFlvdSBhbHNvIGNvbXBseSB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGZvcgordGhlIENvdmVyZWQgU29mdHdhcmUuIElmIHRoZSBMYXJnZXIgV29yayBpcyBhIGNvbWJpbmF0aW9uIG9mIENvdmVyZWQKK1NvZnR3YXJlIHdpdGggYSB3b3JrIGdvdmVybmVkIGJ5IG9uZSBvciBtb3JlIFNlY29uZGFyeSBMaWNlbnNlcywgYW5kIHRoZQorQ292ZXJlZCBTb2Z0d2FyZSBpcyBub3QgSW5jb21wYXRpYmxlIFdpdGggU2Vjb25kYXJ5IExpY2Vuc2VzLCB0aGlzCitMaWNlbnNlIHBlcm1pdHMgWW91IHRvIGFkZGl0aW9uYWxseSBkaXN0cmlidXRlIHN1Y2ggQ292ZXJlZCBTb2Z0d2FyZQordW5kZXIgdGhlIHRlcm1zIG9mIHN1Y2ggU2Vjb25kYXJ5IExpY2Vuc2UocyksIHNvIHRoYXQgdGhlIHJlY2lwaWVudCBvZgordGhlIExhcmdlciBXb3JrIG1heSwgYXQgdGhlaXIgb3B0aW9uLCBmdXJ0aGVyIGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQKK1NvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhpcyBMaWNlbnNlIG9yIHN1Y2ggU2Vjb25kYXJ5CitMaWNlbnNlKHMpLgorCiszLjQuIE5vdGljZXMKKworWW91IG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIHRoZSBzdWJzdGFuY2Ugb2YgYW55IGxpY2Vuc2Ugbm90aWNlcworKGluY2x1ZGluZyBjb3B5cmlnaHQgbm90aWNlcywgcGF0ZW50IG5vdGljZXMsIGRpc2NsYWltZXJzIG9mIHdhcnJhbnR5LAorb3IgbGltaXRhdGlvbnMgb2YgbGlhYmlsaXR5KSBjb250YWluZWQgd2l0aGluIHRoZSBTb3VyY2UgQ29kZSBGb3JtIG9mCit0aGUgQ292ZXJlZCBTb2Z0d2FyZSwgZXhjZXB0IHRoYXQgWW91IG1heSBhbHRlciBhbnkgbGljZW5zZSBub3RpY2VzIHRvCit0aGUgZXh0ZW50IHJlcXVpcmVkIHRvIHJlbWVkeSBrbm93biBmYWN0dWFsIGluYWNjdXJhY2llcy4KKworMy41LiBBcHBsaWNhdGlvbiBvZiBBZGRpdGlvbmFsIFRlcm1zCisKK1lvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsCitpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZAorU29mdHdhcmUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24KK2JlaGFsZiBvZiBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueQorc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5LCBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5CitZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSBldmVyeSBDb250cmlidXRvciBmb3IgYW55CitsaWFiaWxpdHkgaW5jdXJyZWQgYnkgc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwKK2luZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLiBZb3UgbWF5IGluY2x1ZGUgYWRkaXRpb25hbAorZGlzY2xhaW1lcnMgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb25zIG9mIGxpYWJpbGl0eSBzcGVjaWZpYyB0byBhbnkKK2p1cmlzZGljdGlvbi4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgZHVlIHRvCitzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGgKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpCitkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QKK2JlIHBsYWNlZCBpbiBhIHRleHQgZmlsZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBDb3ZlcmVkCitTb2Z0d2FyZSB1bmRlciB0aGlzIExpY2Vuc2UuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZQorb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYQorcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworNS4gVGVybWluYXRpb24KKy0tLS0tLS0tLS0tLS0tCisKKzUuMS4gVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5CitpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCBhbnkgb2YgaXRzIHRlcm1zLiBIb3dldmVyLCBpZiBZb3UgYmVjb21lCitjb21wbGlhbnQsIHRoZW4gdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBmcm9tIGEgcGFydGljdWxhcgorQ29udHJpYnV0b3IgYXJlIHJlaW5zdGF0ZWQgKGEpIHByb3Zpc2lvbmFsbHksIHVubGVzcyBhbmQgdW50aWwgc3VjaAorQ29udHJpYnV0b3IgZXhwbGljaXRseSBhbmQgZmluYWxseSB0ZXJtaW5hdGVzIFlvdXIgZ3JhbnRzLCBhbmQgKGIpIG9uIGFuCitvbmdvaW5nIGJhc2lzLCBpZiBzdWNoIENvbnRyaWJ1dG9yIGZhaWxzIHRvIG5vdGlmeSBZb3Ugb2YgdGhlCitub24tY29tcGxpYW5jZSBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8gNjAgZGF5cyBhZnRlciBZb3UgaGF2ZQorY29tZSBiYWNrIGludG8gY29tcGxpYW5jZS4gTW9yZW92ZXIsIFlvdXIgZ3JhbnRzIGZyb20gYSBwYXJ0aWN1bGFyCitDb250cmlidXRvciBhcmUgcmVpbnN0YXRlZCBvbiBhbiBvbmdvaW5nIGJhc2lzIGlmIHN1Y2ggQ29udHJpYnV0b3IKK25vdGlmaWVzIFlvdSBvZiB0aGUgbm9uLWNvbXBsaWFuY2UgYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZQorZmlyc3QgdGltZSBZb3UgaGF2ZSByZWNlaXZlZCBub3RpY2Ugb2Ygbm9uLWNvbXBsaWFuY2Ugd2l0aCB0aGlzIExpY2Vuc2UKK2Zyb20gc3VjaCBDb250cmlidXRvciwgYW5kIFlvdSBiZWNvbWUgY29tcGxpYW50IHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKK1lvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgorCis1LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSBieSBhc3NlcnRpbmcgYSBwYXRlbnQKK2luZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhcmF0b3J5IGp1ZGdtZW50IGFjdGlvbnMsCitjb3VudGVyLWNsYWltcywgYW5kIGNyb3NzLWNsYWltcykgYWxsZWdpbmcgdGhhdCBhIENvbnRyaWJ1dG9yIFZlcnNpb24KK2RpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gdGhlIHJpZ2h0cyBncmFudGVkIHRvCitZb3UgYnkgYW55IGFuZCBhbGwgQ29udHJpYnV0b3JzIGZvciB0aGUgQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciBTZWN0aW9uCisyLjEgb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZS4KKworNS4zLiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgNS4xIG9yIDUuMiBhYm92ZSwgYWxsCitlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2gKK2hhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIFlvdXIgZGlzdHJpYnV0b3JzIHVuZGVyIHRoaXMgTGljZW5zZQorcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIDYuIERpc2NsYWltZXIgb2YgV2FycmFudHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIENvdmVyZWQgU29mdHdhcmUgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJhcyBpcyIgICAgICAgKgorKiAgYmFzaXMsIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQsIGltcGxpZWQsIG9yICAqCisqICBzdGF0dXRvcnksIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB3YXJyYW50aWVzIHRoYXQgdGhlICAgICAgICoKKyogIENvdmVyZWQgU29mdHdhcmUgaXMgZnJlZSBvZiBkZWZlY3RzLCBtZXJjaGFudGFibGUsIGZpdCBmb3IgYSAgICAgICAgKgorKiAgcGFydGljdWxhciBwdXJwb3NlIG9yIG5vbi1pbmZyaW5naW5nLiBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlICAgICAqCisqICBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBpcyB3aXRoIFlvdS4gICAgICAgICoKKyogIFNob3VsZCBhbnkgQ292ZXJlZCBTb2Z0d2FyZSBwcm92ZSBkZWZlY3RpdmUgaW4gYW55IHJlc3BlY3QsIFlvdSAgICAgKgorKiAgKG5vdCBhbnkgQ29udHJpYnV0b3IpIGFzc3VtZSB0aGUgY29zdCBvZiBhbnkgbmVjZXNzYXJ5IHNlcnZpY2luZywgICAqCisqICByZXBhaXIsIG9yIGNvcnJlY3Rpb24uIFRoaXMgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBjb25zdGl0dXRlcyBhbiAgICoKKyogIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gdXNlIG9mIGFueSBDb3ZlcmVkIFNvZnR3YXJlIGlzICAgKgorKiAgYXV0aG9yaXplZCB1bmRlciB0aGlzIExpY2Vuc2UgZXhjZXB0IHVuZGVyIHRoaXMgZGlzY2xhaW1lci4gICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgNy4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIHRvcnQgICAgICAqCisqICAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCBhbnkgICAgICAgICAgICoKKyogIENvbnRyaWJ1dG9yLCBvciBhbnlvbmUgd2hvIGRpc3RyaWJ1dGVzIENvdmVyZWQgU29mdHdhcmUgYXMgICAgICAgICAgKgorKiAgcGVybWl0dGVkIGFib3ZlLCBiZSBsaWFibGUgdG8gWW91IGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgICAgICAgICAqCisqICBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciAgICAgICoKKyogIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3N0IHByb2ZpdHMsIGxvc3Mgb2YgICAgKgorKiAgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSAgICAqCisqICBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMsIGV2ZW4gaWYgc3VjaCBwYXJ0eSAgICAgICoKKyogIHNoYWxsIGhhdmUgYmVlbiBpbmZvcm1lZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLiBUaGlzICAgKgorKiAgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90IGFwcGx5IHRvIGxpYWJpbGl0eSBmb3IgZGVhdGggb3IgICAqCisqICBwZXJzb25hbCBpbmp1cnkgcmVzdWx0aW5nIGZyb20gc3VjaCBwYXJ0eSdzIG5lZ2xpZ2VuY2UgdG8gdGhlICAgICAgICoKKyogIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiBTb21lICAgICAgICAgICAgICAgKgorKiAganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciBsaW1pdGF0aW9uIG9mICAgICAgICAgICAqCisqICBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhpcyBleGNsdXNpb24gYW5kICAgICAgICAgICoKKyogIGxpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworOC4gTGl0aWdhdGlvbgorLS0tLS0tLS0tLS0tLQorCitBbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUKK2NvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZSB0aGUgZGVmZW5kYW50IG1haW50YWlucyBpdHMgcHJpbmNpcGFsCitwbGFjZSBvZiBidXNpbmVzcyBhbmQgc3VjaCBsaXRpZ2F0aW9uIHNoYWxsIGJlIGdvdmVybmVkIGJ5IGxhd3Mgb2YgdGhhdAoranVyaXNkaWN0aW9uLCB3aXRob3V0IHJlZmVyZW5jZSB0byBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuCitOb3RoaW5nIGluIHRoaXMgU2VjdGlvbiBzaGFsbCBwcmV2ZW50IGEgcGFydHkncyBhYmlsaXR5IHRvIGJyaW5nCitjcm9zcy1jbGFpbXMgb3IgY291bnRlci1jbGFpbXMuCisKKzkuIE1pc2NlbGxhbmVvdXMKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBzdWJqZWN0CittYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlCit1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQKK25lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMKK3RoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIKK3NoYWxsIG5vdCBiZSB1c2VkIHRvIGNvbnN0cnVlIHRoaXMgTGljZW5zZSBhZ2FpbnN0IGEgQ29udHJpYnV0b3IuCisKKzEwLiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEwLjEuIE5ldyBWZXJzaW9ucworCitNb3ppbGxhIEZvdW5kYXRpb24gaXMgdGhlIGxpY2Vuc2Ugc3Rld2FyZC4gRXhjZXB0IGFzIHByb3ZpZGVkIGluIFNlY3Rpb24KKzEwLjMsIG5vIG9uZSBvdGhlciB0aGFuIHRoZSBsaWNlbnNlIHN0ZXdhcmQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgb3IKK3B1Ymxpc2ggbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYQorZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKzEwLjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMKKworWW91IG1heSBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbgorb2YgdGhlIExpY2Vuc2UgdW5kZXIgd2hpY2ggWW91IG9yaWdpbmFsbHkgcmVjZWl2ZWQgdGhlIENvdmVyZWQgU29mdHdhcmUsCitvciB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIGxpY2Vuc2UKK3N0ZXdhcmQuCisKKzEwLjMuIE1vZGlmaWVkIFZlcnNpb25zCisKK0lmIHlvdSBjcmVhdGUgc29mdHdhcmUgbm90IGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIHlvdSB3YW50IHRvCitjcmVhdGUgYSBuZXcgbGljZW5zZSBmb3Igc3VjaCBzb2Z0d2FyZSwgeW91IG1heSBjcmVhdGUgYW5kIHVzZSBhCittb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpZiB5b3UgcmVuYW1lIHRoZSBsaWNlbnNlIGFuZCByZW1vdmUKK2FueSByZWZlcmVuY2VzIHRvIHRoZSBuYW1lIG9mIHRoZSBsaWNlbnNlIHN0ZXdhcmQgKGV4Y2VwdCB0byBub3RlIHRoYXQKK3N1Y2ggbW9kaWZpZWQgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKS4KKworMTAuNC4gRGlzdHJpYnV0aW5nIFNvdXJjZSBDb2RlIEZvcm0gdGhhdCBpcyBJbmNvbXBhdGlibGUgV2l0aCBTZWNvbmRhcnkKK0xpY2Vuc2VzCisKK0lmIFlvdSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSBTb3VyY2UgQ29kZSBGb3JtIHRoYXQgaXMgSW5jb21wYXRpYmxlIFdpdGgKK1NlY29uZGFyeSBMaWNlbnNlcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCB0aGUKK25vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBCIG9mIHRoaXMgTGljZW5zZSBtdXN0IGJlIGF0dGFjaGVkLgorCitFeGhpYml0IEEgLSBTb3VyY2UgQ29kZSBGb3JtIExpY2Vuc2UgTm90aWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCisgIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uCisKK0lmIGl0IGlzIG5vdCBwb3NzaWJsZSBvciBkZXNpcmFibGUgdG8gcHV0IHRoZSBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyCitmaWxlLCB0aGVuIFlvdSBtYXkgaW5jbHVkZSB0aGUgbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSBMSUNFTlNFCitmaWxlIGluIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHJlY2lwaWVudCB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vaworZm9yIHN1Y2ggYSBub3RpY2UuCisKK1lvdSBtYXkgYWRkIGFkZGl0aW9uYWwgYWNjdXJhdGUgbm90aWNlcyBvZiBjb3B5cmlnaHQgb3duZXJzaGlwLgorCitFeGhpYml0IEIgLSAiSW5jb21wYXRpYmxlIFdpdGggU2Vjb25kYXJ5IExpY2Vuc2VzIiBOb3RpY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyAiSW5jb21wYXRpYmxlIFdpdGggU2Vjb25kYXJ5IExpY2Vuc2VzIiwgYXMKKyAgZGVmaW5lZCBieSB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSwgdi4gMi4wLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUy1QTCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVMtUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkwZDZiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVMtUEwKQEAgLTAsMCArMSwxOSBAQAorCitNaWNyb3NvZnQgUHVibGljIExpY2Vuc2UgKE1zLVBMKQorIAorCitUaGlzIGxpY2Vuc2UgZ292ZXJucyB1c2Ugb2YgdGhlIGFjY29tcGFueWluZyBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGUgc29mdHdhcmUsIHlvdSBhY2NlcHQgdGhpcyBsaWNlbnNlLiBJZiB5b3UgZG8gbm90IGFjY2VwdCB0aGUgbGljZW5zZSwgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgCisKK0RlZmluaXRpb25zCitUaGUgdGVybXMgInJlcHJvZHVjZSwiICJyZXByb2R1Y3Rpb24sIiAiZGVyaXZhdGl2ZSB3b3JrcywiIGFuZCAiZGlzdHJpYnV0aW9uIiBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgaGVyZSBhcyB1bmRlciBVLlMuIGNvcHlyaWdodCBsYXcuIEEgImNvbnRyaWJ1dGlvbiIgaXMgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLCBvciBhbnkgYWRkaXRpb25zIG9yIGNoYW5nZXMgdG8gdGhlIHNvZnR3YXJlLiBBICJjb250cmlidXRvciIgaXMgYW55IHBlcnNvbiB0aGF0IGRpc3RyaWJ1dGVzIGl0cyBjb250cmlidXRpb24gdW5kZXIgdGhpcyBsaWNlbnNlLiAiTGljZW5zZWQgcGF0ZW50cyIgYXJlIGEgY29udHJpYnV0b3JgcyBwYXRlbnQgY2xhaW1zIHRoYXQgcmVhZCBkaXJlY3RseSBvbiBpdHMgY29udHJpYnV0aW9uLgorR3JhbnQgb2YgUmlnaHRzCisoQSkgQ29weXJpZ2h0IEdyYW50LSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBjb25kaXRpb25zIGFuZCBsaW1pdGF0aW9ucyBpbiBzZWN0aW9uIDMsIGVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSBpdHMgY29udHJpYnV0aW9uLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgaXRzIGNvbnRyaWJ1dGlvbiwgYW5kIGRpc3RyaWJ1dGUgaXRzIGNvbnRyaWJ1dGlvbiBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrcyB0aGF0IHlvdSBjcmVhdGUuCisoQikgUGF0ZW50IEdyYW50LSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBjb25kaXRpb25zIGFuZCBsaW1pdGF0aW9ucyBpbiBzZWN0aW9uIDMsIGVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdW5kZXIgaXRzIGxpY2Vuc2VkIHBhdGVudHMgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBpdHMgY29udHJpYnV0aW9uIGluIHRoZSBzb2Z0d2FyZSBvciBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBjb250cmlidXRpb24gaW4gdGhlIHNvZnR3YXJlLgorQ29uZGl0aW9ucyBhbmQgTGltaXRhdGlvbnMKKyhBKSBObyBUcmFkZW1hcmsgTGljZW5zZS0gVGhpcyBsaWNlbnNlIGRvZXMgbm90IGdyYW50IHlvdSByaWdodHMgdG8gdXNlIGFueSBjb250cmlidXRvcnNgIG5hbWUsIGxvZ28sIG9yIHRyYWRlbWFya3MuIAorKEIpIElmIHlvdSBicmluZyBhIHBhdGVudCBjbGFpbSBhZ2FpbnN0IGFueSBjb250cmlidXRvciBvdmVyIHBhdGVudHMgdGhhdCB5b3UgY2xhaW0gYXJlIGluZnJpbmdlZCBieSB0aGUgc29mdHdhcmUsIHlvdXIgcGF0ZW50IGxpY2Vuc2UgZnJvbSBzdWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBzb2Z0d2FyZSBlbmRzIGF1dG9tYXRpY2FsbHkuIAorKEMpIElmIHlvdSBkaXN0cmlidXRlIGFueSBwb3J0aW9uIG9mIHRoZSBzb2Z0d2FyZSwgeW91IG11c3QgcmV0YWluIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQgYXR0cmlidXRpb24gbm90aWNlcyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSBzb2Z0d2FyZS4gCisoRCkgSWYgeW91IGRpc3RyaWJ1dGUgYW55IHBvcnRpb24gb2YgdGhlIHNvZnR3YXJlIGluIHNvdXJjZSBjb2RlIGZvcm0sIHlvdSBtYXkgZG8gc28gb25seSB1bmRlciB0aGlzIGxpY2Vuc2UgYnkgaW5jbHVkaW5nIGEgY29tcGxldGUgY29weSBvZiB0aGlzIGxpY2Vuc2Ugd2l0aCB5b3VyIGRpc3RyaWJ1dGlvbi4gSWYgeW91IGRpc3RyaWJ1dGUgYW55IHBvcnRpb24gb2YgdGhlIHNvZnR3YXJlIGluIGNvbXBpbGVkIG9yIG9iamVjdCBjb2RlIGZvcm0sIHlvdSBtYXkgb25seSBkbyBzbyB1bmRlciBhIGxpY2Vuc2UgdGhhdCBjb21wbGllcyB3aXRoIHRoaXMgbGljZW5zZS4gCisoRSkgVGhlIHNvZnR3YXJlIGlzIGxpY2Vuc2VkICJhcy1pcy4iIFlvdSBiZWFyIHRoZSByaXNrIG9mIHVzaW5nIGl0LiBUaGUgY29udHJpYnV0b3JzIGdpdmUgbm8gZXhwcmVzcyB3YXJyYW50aWVzLCBndWFyYW50ZWVzLCBvciBjb25kaXRpb25zLiBZb3UgbWF5IGhhdmUgYWRkaXRpb25hbCBjb25zdW1lciByaWdodHMgdW5kZXIgeW91ciBsb2NhbCBsYXdzIHdoaWNoIHRoaXMgbGljZW5zZSBjYW5ub3QgY2hhbmdlLiBUbyB0aGUgZXh0ZW50IHBlcm1pdHRlZCB1bmRlciB5b3VyIGxvY2FsIGxhd3MsIHRoZSBjb250cmlidXRvcnMgZXhjbHVkZSB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UgYW5kIG5vbi1pbmZyaW5nZW1lbnQuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVMtUkwgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01TLVJMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MDNjMGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01TLVJMCkBAIC0wLDAgKzEsMjMgQEAKKworTWljcm9zb2Z0IFJlY2lwcm9jYWwgTGljZW5zZSAoTXMtUkwpCisgCisKK1RoaXMgbGljZW5zZSBnb3Zlcm5zIHVzZSBvZiB0aGUgYWNjb21wYW55aW5nIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoZSBzb2Z0d2FyZSwgeW91IGFjY2VwdCB0aGlzIGxpY2Vuc2UuIElmIHlvdSBkbyBub3QgYWNjZXB0IHRoZSBsaWNlbnNlLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAKKworRGVmaW5pdGlvbnMKK1RoZSB0ZXJtcyAicmVwcm9kdWNlLCIgInJlcHJvZHVjdGlvbiwiICJkZXJpdmF0aXZlIHdvcmtzLCIgYW5kICJkaXN0cmlidXRpb24iIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBoZXJlIGFzIHVuZGVyIFUuUy4gY29weXJpZ2h0IGxhdy4KK0EgImNvbnRyaWJ1dGlvbiIgaXMgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLCBvciBhbnkgYWRkaXRpb25zIG9yIGNoYW5nZXMgdG8gdGhlIHNvZnR3YXJlLiAKK0EgImNvbnRyaWJ1dG9yIiBpcyBhbnkgcGVyc29uIHRoYXQgZGlzdHJpYnV0ZXMgaXRzIGNvbnRyaWJ1dGlvbiB1bmRlciB0aGlzIGxpY2Vuc2UuIAorIkxpY2Vuc2VkIHBhdGVudHMiIGFyZSBhIGNvbnRyaWJ1dG9yYHMgcGF0ZW50IGNsYWltcyB0aGF0IHJlYWQgZGlyZWN0bHkgb24gaXRzIGNvbnRyaWJ1dGlvbi4KK0dyYW50IG9mIFJpZ2h0cworKEEpIENvcHlyaWdodCBHcmFudC0gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgY29uZGl0aW9ucyBhbmQgbGltaXRhdGlvbnMgaW4gc2VjdGlvbiAzLCBlYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UgaXRzIGNvbnRyaWJ1dGlvbiwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIGl0cyBjb250cmlidXRpb24sIGFuZCBkaXN0cmlidXRlIGl0cyBjb250cmlidXRpb24gb3IgYW55IGRlcml2YXRpdmUgd29ya3MgdGhhdCB5b3UgY3JlYXRlLgorKEIpIFBhdGVudCBHcmFudC0gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgY29uZGl0aW9ucyBhbmQgbGltaXRhdGlvbnMgaW4gc2VjdGlvbiAzLCBlYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlIHVuZGVyIGl0cyBsaWNlbnNlZCBwYXRlbnRzIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgaXRzIGNvbnRyaWJ1dGlvbiBpbiB0aGUgc29mdHdhcmUgb3IgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgY29udHJpYnV0aW9uIGluIHRoZSBzb2Z0d2FyZS4KK0NvbmRpdGlvbnMgYW5kIExpbWl0YXRpb25zCisoQSkgUmVjaXByb2NhbCBHcmFudHMtIEZvciBhbnkgZmlsZSB5b3UgZGlzdHJpYnV0ZSB0aGF0IGNvbnRhaW5zIGNvZGUgZnJvbSB0aGUgc29mdHdhcmUgKGluIHNvdXJjZSBjb2RlIG9yIGJpbmFyeSBmb3JtYXQpLCB5b3UgbXVzdCBwcm92aWRlIHJlY2lwaWVudHMgdGhlIHNvdXJjZSBjb2RlIHRvIHRoYXQgZmlsZSBhbG9uZyB3aXRoIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UsIHdoaWNoIGxpY2Vuc2Ugd2lsbCBnb3Zlcm4gdGhhdCBmaWxlLiBZb3UgbWF5IGxpY2Vuc2Ugb3RoZXIgZmlsZXMgdGhhdCBhcmUgZW50aXJlbHkgeW91ciBvd24gd29yayBhbmQgZG8gbm90IGNvbnRhaW4gY29kZSBmcm9tIHRoZSBzb2Z0d2FyZSB1bmRlciBhbnkgdGVybXMgeW91IGNob29zZS4gCisoQikgTm8gVHJhZGVtYXJrIExpY2Vuc2UtIFRoaXMgbGljZW5zZSBkb2VzIG5vdCBncmFudCB5b3UgcmlnaHRzIHRvIHVzZSBhbnkgY29udHJpYnV0b3JzYCBuYW1lLCBsb2dvLCBvciB0cmFkZW1hcmtzLiAKKyhDKSBJZiB5b3UgYnJpbmcgYSBwYXRlbnQgY2xhaW0gYWdhaW5zdCBhbnkgY29udHJpYnV0b3Igb3ZlciBwYXRlbnRzIHRoYXQgeW91IGNsYWltIGFyZSBpbmZyaW5nZWQgYnkgdGhlIHNvZnR3YXJlLCB5b3VyIHBhdGVudCBsaWNlbnNlIGZyb20gc3VjaCBjb250cmlidXRvciB0byB0aGUgc29mdHdhcmUgZW5kcyBhdXRvbWF0aWNhbGx5LiAKKyhEKSBJZiB5b3UgZGlzdHJpYnV0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgc29mdHdhcmUsIHlvdSBtdXN0IHJldGFpbiBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgc29mdHdhcmUuIAorKEUpIElmIHlvdSBkaXN0cmlidXRlIGFueSBwb3J0aW9uIG9mIHRoZSBzb2Z0d2FyZSBpbiBzb3VyY2UgY29kZSBmb3JtLCB5b3UgbWF5IGRvIHNvIG9ubHkgdW5kZXIgdGhpcyBsaWNlbnNlIGJ5IGluY2x1ZGluZyBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBsaWNlbnNlIHdpdGggeW91ciBkaXN0cmlidXRpb24uIElmIHlvdSBkaXN0cmlidXRlIGFueSBwb3J0aW9uIG9mIHRoZSBzb2Z0d2FyZSBpbiBjb21waWxlZCBvciBvYmplY3QgY29kZSBmb3JtLCB5b3UgbWF5IG9ubHkgZG8gc28gdW5kZXIgYSBsaWNlbnNlIHRoYXQgY29tcGxpZXMgd2l0aCB0aGlzIGxpY2Vuc2UuIAorKEYpIFRoZSBzb2Z0d2FyZSBpcyBsaWNlbnNlZCAiYXMtaXMuIiBZb3UgYmVhciB0aGUgcmlzayBvZiB1c2luZyBpdC4gVGhlIGNvbnRyaWJ1dG9ycyBnaXZlIG5vIGV4cHJlc3Mgd2FycmFudGllcywgZ3VhcmFudGVlcywgb3IgY29uZGl0aW9ucy4gWW91IG1heSBoYXZlIGFkZGl0aW9uYWwgY29uc3VtZXIgcmlnaHRzIHVuZGVyIHlvdXIgbG9jYWwgbGF3cyB3aGljaCB0aGlzIGxpY2Vuc2UgY2Fubm90IGNoYW5nZS4gVG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgdW5kZXIgeW91ciBsb2NhbCBsYXdzLCB0aGUgY29udHJpYnV0b3JzIGV4Y2x1ZGUgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlIGFuZCBub24taW5mcmluZ2VtZW50LgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01pck9TIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NaXJPUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDY3NjhlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NaXJPUwpAQCAtMCwwICsxLDU4IEBACisKK01pck9TIExpY2Vuc2UKKworLyotCisqIENvcHlyaWdodCAmIzE2OTsgeWVhciwgeWVhciwgeWVhciwgJiM4MjMwOworKiBGaXJzdCBNLiBMYXN0IDx1c2VyQGhvc3QuZG9tYWluPgorKgorKiBQcm92aWRlZCB0aGF0IHRoZXNlIHRlcm1zIGFuZCBkaXNjbGFpbWVyIGFuZCBhbGwgY29weXJpZ2h0IG5vdGljZXMKKyogYXJlIHJldGFpbmVkIG9yIHJlcHJvZHVjZWQgaW4gYW4gYWNjb21wYW55aW5nIGRvY3VtZW50LCBwZXJtaXNzaW9uCisqIGlzIGdyYW50ZWQgdG8gZGVhbCBpbiB0aGlzIHdvcmsgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHVuJiM4MjA4OworKiBsaW1pdGVkIHJpZ2h0cyB0byB1c2UsIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUsIHNlbGwsIG1vZGlmeSwKKyogbWVyZ2UsIGdpdmUgYXdheSwgb3Igc3VibGljZW5jZS4KKyoKKyogVGhpcyB3b3JrIGlzIHByb3ZpZGVkICJBUyBJUyIgYW5kIFdJVEhPVVQgV0FSUkFOVFkgb2YgYW55IGtpbmQsIHRvCisqIHRoZSB1dG1vc3QgZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgbmVpdGhlciBleHByZXNzIG5vcgorKiBpbXBsaWVkOyB3aXRob3V0IG1hbGljaW91cyBpbnRlbnQgb3IgZ3Jvc3MgbmVnbGlnZW5jZS4gSW4gbm8gZXZlbnQKKyogbWF5IGEgbGljZW5zb3IsIGF1dGhvciBvciBjb250cmlidXRvciBiZSBoZWxkIGxpYWJsZSBmb3IgaW5kaXJlY3QsCisqIGRpcmVjdCwgb3RoZXIgZGFtYWdlLCBsb3NzLCBvciBvdGhlciBpc3N1ZXMgYXJpc2luZyBpbiBhbnkgd2F5IG91dAorKiBvZiBkZWFsaW5nIGluIHRoZSB3b3JrLCBldmVuIGlmIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2gKKyogZGFtYWdlIG9yIGV4aXN0ZW5jZSBvZiBhIGRlZmVjdCwgZXhjZXB0IHByb3ZlbiB0aGF0IGl0IHJlc3VsdHMgb3V0CisqIG9mIHNhaWQgcGVyc29uYHMgaW1tZWRpYXRlIGZhdWx0IHdoZW4gdXNpbmcgdGhlIHdvcmsgYXMgaW50ZW5kZWQuCisqLworCitJX05fU19UX1JfVV9DX1RfSV9PX05fU186XworVG8gYXBwbHkgdGhlIHRlbXBsYXRlKCYjMTg1Oykgc3BlY2lmeSB0aGUgeWVhcnMgb2YgY29weXJpZ2h0IChzZXBhcmF0ZWQgYnkKK2NvbW1hLCBub3QgYXMgYSByYW5nZSksIHRoZSBsZWdhbCBuYW1lcyBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMsIGFuZAordGhlIHJlYWwgbmFtZXMgb2YgdGhlIGF1dGhvcnMgaWYgZGlmZmVyZW50LiBBdm9pZCBhZGRpbmcgdGV4dC4KKworUl9BX1RfSV9PX05fQV9MX0VfOl8KK1RoaXMgbGljZW5jZSBpcyBhcHQgZm9yIGFueSBraW5kIG9mIHdvcmsgKHN1Y2ggYXMgc291cmNlIGNvZGUsIGZvbnRzLAorZG9jdW1lbnRhdGlvbiwgZ3JhcGhpY3MsIHNvdW5kIGV0Yy4pIGFuZCB0aGUgcHJlZmVycmVkIHRlcm1zIGZvciB3b3JrCithZGRlZCB0byBNaXJCU0QuIEl0IGhhcyBiZWVuIGRyYWZ0ZWQgYXMgdW5pdmVyc2FsbHkgdXNhYmxlIGVxdWl2YWxlbnQKK29mIHRoZSAiaGlzdG9yaWMgcGVybWlzc2lvbiBub3RpY2UiJiM4MzE3OyYjMTc4OyYjODMxODsgYWRhcHRlZCB0byBFdXJvcGVuIGxhdyBiZWNhdXNlCitpbiBzb21lIChkcm9pdCBkYGF1dGV1cikgY291bnRyaWVzIGF1dGhvcnMgY2Fubm90IGRpc2NsYWltIGFsbCBsaWFiaSYjODIwODsKK2xpdGllcy4gQ29tcGxpYW5jZSB0byBERlNHJiM4MzE3OyYjMTc5OyYjODMxODsgMS4xIGlzIGVuc3VyZWQsIGFuZCBHUEx2MiBjb21wYXRpYmlsaXR5CitpcyBhc3NlcnRlZCB1bmxlc3MgYWR2ZXJ0aXNpbmcgY2xhdXNlcyBhcmUgdXNlZC4gVGhlIE1pck9TIExpY2VuY2UgaXMKK2NlcnRpZmllZCB0byBjb25mb3JtIHRvIE9LRCYjODMxNzsmIzgzMDg7JiM4MzE4OyAxLjAgYW5kIE9TRCYjODMxNzsmIzgzMDk7JiM4MzE4OyAxLjksIGFuZCBxdWFsaWZpZXMgYXMgYQorRnJlZSBTb2Z0d2FyZSYjODMxNzsmIzgzMTA7JiM4MzE4OyBhbmQgYWxzbyBGcmVlIERvY3VtZW50YXRpb24mIzgzMTc7JiM4MzExOyYjODMxODsgbGljZW5jZSBhbmQgaXMgaW5jbHUmIzgyMDg7CitkZWQgaW4gc29tZSByZWxldmFudCBsaXN0cyYjODMxNzsmIzgzMTI7JiM4MzE4OyYjODMxNzsmIzgzMTM7JiM4MzE4OyYjODMxNzsmIzE4NTsmIzgzMDQ7JiM4MzE4Oy4KKworV2UgYmVsaWV2ZSB5b3UgYXJlIG5vdCBsaWFibGUgZm9yIHdvcmsgaW5zZXJ0ZWQgd2hpY2ggaXMgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSBvZiB0aGlyZCBwYXJ0aWVzLCBpZiB5b3Ugd2VyZSBub3QgYXdhcmUgb2YgdGhlIGZhY3QsIGFjdCBhcCYjODIwODsKK3Byb3ByaWF0ZWx5IGFzIHNvb24gYXMgeW91IGJlY29tZSBhd2FyZSBvZiB0aGF0IHByb2JsZW0sIHNlZWsgYW4gYW1pJiM4MjA4OworY2FibGUgc29sdXRpb24gZm9yIGFsbCBwYXJ0aWVzLCBhbmQgbmV2ZXIga25vd2luZ2x5IGRpc3RyaWJ1dGUgYSB3b3JrCit3aXRob3V0IGJlaW5nIGF1dGhvcmlzZWQgdG8gZG8gc28gYnkgaXRzIGxpY2Vuc29ycy4KKworUl9FX0ZfRV9SX0VfTl9DX0VfU186XworJiM5MzEyOyBhbHNvIGF0IGh0dHA6Ly9taXJic2QuZGUvTWlyT1MtTGljZW5jZQorJiM5MzEzOyBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2hpc3RvcmljYWwucGhwCismIzkzMTQ7IGh0dHA6Ly93d3cuZGViaWFuLm9yZy9zb2NpYWxfY29udHJhY3QjZ3VpZGVsaW5lcworJiM5MzE1OyBodHRwOi8vd3d3Lm9wZW5kZWZpbml0aW9uLm9yZy8xLjAKKyYjOTMxNjsgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9kb2NzL29zZAorJiM5MzE3OyBodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS9mcmVlLXN3Lmh0bWwKKyYjOTMxODsgaHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvZnJlZS1kb2MuaHRtbAorJiM5MzE5OyBodHRwOi8vd3d3Lmlmcm9zcy5kZS9pZnJvc3NfaHRtbC9saXplbnpjZW50ZXIuaHRtbAorJiM5MzIwOyBodHRwOi8vd3d3Lm9wZW5kZWZpbml0aW9uLm9yZy9saWNlbnNlcworJiM5MzIxOyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWlyb3MuaHRtbAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01vdG9zb3RvIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Nb3Rvc290bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTUyNGY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Nb3Rvc290bwpAQCAtMCwwICsxLDQyMiBAQAorCitNT1RPU09UTyBPUEVOIFNPVVJDRSBMSUNFTlNFIC0gVmVyc2lvbiAwLjkuMQorVGhpcyBNb3Rvc290byBPcGVuIFNvdXJjZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvICJDb21tdW5pdHkKK1BvcnRhbCBTZXJ2ZXIiIGFuZCByZWxhdGVkIHNvZnR3YXJlIHByb2R1Y3RzIGFzIHdlbGwgYXMgYW55IHVwZGF0ZXNvcgorbWFpbnRlbmFuY2UgcmVsZWFzZXMgb2YgdGhhdCBzb2Z0d2FyZSAoIk1vdG9zb3RvIFByb2R1Y3RzIikgdGhhdCBhcmUKK2Rpc3RyaWJ1dGVkIGJ5IE1vdG9zb3RvLkNvbSBCLlYuICgiTGljZW5zb3IiKS4gQW55IE1vdG9zb3RvCitQcm9kdWN0IGxpY2Vuc2VkIHB1cnN1YW50IHRvIHRoaXMgTGljZW5zZSBpcyBhICJMaWNlbnNlZCBQcm9kdWN0LiIgTGljZW5zZWQKK1Byb2R1Y3QsIGluIGl0cyBlbnRpcmV0eSwgaXMgcHJvdGVjdGVkIGJ5IER1dGNoIGNvcHlyaWdodCBsYXcuCitUaGlzCitMaWNlbnNlIGlkZW50aWZpZXMgdGhlIHRlcm1zIHVuZGVyIHdoaWNoIHlvdSBtYXkgdXNlLCBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeQorTGljZW5zZWQgUHJvZHVjdCBhbmQgaGFzIGJlZW4gc3VibWl0dGVkIHRvIHRoZSBPcGVuIFNvZnR3YXJlIEluaXRpYXRpdmUgKE9TSSkKK2ZvciBhcHByb3ZhbC4KKworUHJlYW1ibGUKKworVGhpcyBQcmVhbWJsZSBpcyBpbnRlbmRlZCB0byBkZXNjcmliZSwgaW4gcGxhaW4gRW5nbGlzaCwgdGhlIG5hdHVyZSBhbmQgc2NvcGUgb2YKK3RoaXMgTGljZW5zZS4gSG93ZXZlciwgdGhpcyBQcmVhbWJsZSBpcyBub3QgYSBwYXJ0IG9mIHRoaXMgbGljZW5zZS4gVGhlIGxlZ2FsCitlZmZlY3Qgb2YgdGhpcyBMaWNlbnNlIGlzIGRlcGVuZGVudCBvbmx5IHVwb24gdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlIGFuZCBub3QKK3RoaXMgUHJlYW1ibGUuCitUaGlzIExpY2Vuc2UgY29tcGxpZXMgd2l0aCB0aGUgT3BlbiBTb3VyY2UgRGVmaW5pdGlvbiBhbmQgaGFzIGJlZW4gYXBwcm92ZWQgYnkKK09wZW4gU291cmNlIEluaXRpYXRpdmUuIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYmUgbWFya2VkCithcyAiT1NJIENlcnRpZmllZCBPcGVuIFNvdXJjZSBTb2Z0d2FyZS4iCisKK1RoaXMgTGljZW5zZSBwcm92aWRlcyB0aGF0OgorCisxLiBZb3UgbWF5IHVzZSwgc2VsbCBvciBnaXZlIGF3YXkgdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGFsb25lIG9yIGFzIGEKK2NvbXBvbmVudCBvZiBhbiBhZ2dyZWdhdGUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIGNvbnRhaW5pbmcKK3Byb2dyYW1zIGZyb20gc2V2ZXJhbCBkaWZmZXJlbnQgc291cmNlcy4gTm8gcm95YWx0eSBvciBvdGhlciBmZWUgaXMKK3JlcXVpcmVkLgorCisyLiBCb3RoIFNvdXJjZSBDb2RlIGFuZCBleGVjdXRhYmxlIHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LAoraW5jbHVkaW5nIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBwcmV2aW91cyBDb250cmlidXRvcnMsIGFyZQorYXZhaWxhYmxlIGZvciB5b3VyIHVzZS4gKFRoZSB0ZXJtcyAiTGljZW5zZWQgUHJvZHVjdCwiICJNb2RpZmljYXRpb25zLCIKKyJDb250cmlidXRvcnMiIGFuZCAiU291cmNlIENvZGUiIGFyZSBkZWZpbmVkIGluIHRoZSBMaWNlbnNlLikKKworMy4gWW91IGFyZSBhbGxvd2VkIHRvIG1ha2UgTW9kaWZpY2F0aW9ucyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCwgYW5kIHlvdQorY2FuIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGZyb20gaXQuIChUaGUgdGVybSAiRGVyaXZhdGl2ZQorV29ya3MiIGlzIGRlZmluZWQgaW4gdGhlIExpY2Vuc2UuKQorCis0LiBCeSBhY2NlcHRpbmcgdGhlIExpY2Vuc2VkIFByb2R1Y3QgdW5kZXIgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlLAoreW91IGFncmVlIHRoYXQgYW55IE1vZGlmaWNhdGlvbnMgeW91IG1ha2UgdG8gdGhlIExpY2Vuc2VkCitQcm9kdWN0IGFuZCB0aGVuIGRpc3RyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSBwcm92aXNpb25zIG9mIHRoaXMKK0xpY2Vuc2UuIEluIHBhcnRpY3VsYXIsIHlvdSBtdXN0IG1ha2UgdGhlIFNvdXJjZSBDb2RlIG9mIHlvdXIKK01vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIHRvIG90aGVycy4KKworNS4gWW91IG1heSB1c2UgdGhlIExpY2Vuc2VkIFByb2R1Y3QgZm9yIGFueSBwdXJwb3NlLCBidXQgdGhlIExpY2Vuc29yIGlzCitub3QgcHJvdmlkaW5nIHlvdSBhbnkgd2FycmFudHkgd2hhdHNvZXZlciwgbm9yIGlzIHRoZSBMaWNlbnNvcgorYWNjZXB0aW5nIGFueSBsaWFiaWxpdHkgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc2VkIFByb2R1Y3QgZG9lc25gdAord29yayBwcm9wZXJseSBvciBjYXVzZXMgeW91IGFueSBpbmp1cnkgb3IgZGFtYWdlcy4KKworNi4gSWYgeW91IHN1YmxpY2Vuc2UgdGhlIExpY2Vuc2VkIFByb2R1Y3Qgb3IgRGVyaXZhdGl2ZSBXb3JrcywgeW91IG1heQorY2hhcmdlIGZlZXMgZm9yIHdhcnJhbnR5IG9yIHN1cHBvcnQsIG9yIGZvciBhY2NlcHRpbmcgaW5kZW1uaXR5CitvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8geW91ciBjdXN0b21lcnMuIFlvdSBjYW5ub3QgY2hhcmdlIGZvciB0aGUKK1NvdXJjZSBDb2RlLgorCis3LiBJZiB5b3UgYXNzZXJ0IGFueSBwYXRlbnQgY2xhaW1zIGFnYWluc3QgdGhlIExpY2Vuc29yIHJlbGF0aW5nIHRvIHRoZQorTGljZW5zZWQgUHJvZHVjdCwgb3IgaWYgeW91IGJyZWFjaCBhbnkgdGVybXMgb2YgdGhlIExpY2Vuc2UsIHlvdXIKK3JpZ2h0cyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCB1bmRlciB0aGlzIExpY2Vuc2UgYXV0b21hdGljYWxseQordGVybWluYXRlLgorCitZb3UgbWF5IHVzZSB0aGlzIExpY2Vuc2UgdG8gZGlzdHJpYnV0ZSB5b3VyIG93biBEZXJpdmF0aXZlIFdvcmtzLCBpbiB3aGljaAorY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBhcHBseSB0byB5b3VyIERlcml2YXRpdmUKK1dvcmtzIGp1c3QgYXMgdGhleSBkbyB0byB0aGUgb3JpZ2luYWwgTGljZW5zZWQgUHJvZHVjdC4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBkaXN0cmlidXRlIHlvdXIgRGVyaXZhdGl2ZSBXb3JrcyB1bmRlciBhbnkgb3RoZXIKK09TSS1hcHByb3ZlZCBPcGVuIFNvdXJjZSBsaWNlbnNlLCBvciB1bmRlciBhIHByb3ByaWV0YXJ5IGxpY2Vuc2Ugb2YKK3lvdXIgY2hvaWNlLiBJZiB5b3UgdXNlIGFueSBsaWNlbnNlIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlLCBob3dldmVyLCB5b3UgbXVzdAorY29udGludWUgdG8gZnVsZmlsbCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSAoaW5jbHVkaW5nIHRoZQorcHJvdmlzaW9ucyByZWxhdGluZyB0byBwdWJsaXNoaW5nIHRoZSBTb3VyY2UgQ29kZSkgZm9yIHRob3NlIHBvcnRpb25zIG9mIHlvdXIKK0Rlcml2YXRpdmUgV29ya3MgdGhhdCBjb25zaXN0IG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBpbmNsdWRpbmcKK3RoZSBmaWxlcyBjb250YWluaW5nIE1vZGlmaWNhdGlvbnMuCisKK05ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgbWF5IGJlIHB1Ymxpc2hlZCBmcm9tIHRpbWUgdG8gdGltZS4gWW91IG1heQorY2hvb3NlIHRvIGNvbnRpbnVlIHRvIHVzZSB0aGUgbGljZW5zZSB0ZXJtcyBpbiB0aGlzIHZlcnNpb24gb2YgdGhlCitMaWNlbnNlIG9yIHRob3NlIGZyb20gdGhlIG5ldyB2ZXJzaW9uLiBIb3dldmVyLCBvbmx5IHRoZSBMaWNlbnNvciBoYXMgdGhlIHJpZ2h0Cit0byBjaGFuZ2UgdGhlIExpY2Vuc2UgdGVybXMgYXMgdGhleSBhcHBseSB0byB0aGUgTGljZW5zZWQKK1Byb2R1Y3QuCitUaGlzIExpY2Vuc2UgcmVsaWVzIG9uIHByZWNpc2UgZGVmaW5pdGlvbnMgZm9yIGNlcnRhaW4gdGVybXMuIFRob3NlIHRlcm1zIGFyZQorZGVmaW5lZCB3aGVuIHRoZXkgYXJlIGZpcnN0IHVzZWQsIGFuZCB0aGUgZGVmaW5pdGlvbnMgYXJlIHJlcGVhdGVkIGZvcgoreW91ciBjb252ZW5pZW5jZSBpbiBhIEdsb3NzYXJ5IGF0IHRoZSBlbmQgb2YgdGhlIExpY2Vuc2UuCisKK0xpY2Vuc2UgVGVybXMKKworMS4gR3JhbnQgb2YgTGljZW5zZSBGcm9tIExpY2Vuc29yLgorCitMaWNlbnNvcgoraGVyZWJ5IGdyYW50cyB5b3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0bwordGhpcmQKK3BhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EuIFVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kCitkaXN0cmlidXRlIExpY2Vuc2VkIFByb2R1Y3Qgb3IgcG9ydGlvbnMgdGhlcmVvZiAoaW5jbHVkaW5nCitNb2RpZmljYXRpb25zIGFzIGhlcmVpbmFmdGVyIGRlZmluZWQpLCBpbiBib3RoIFNvdXJjZSBDb2RlIG9yIGFzCithbiBleGVjdXRhYmxlIHByb2dyYW0uICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZAorZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGluY2x1ZGluZworYWxsIG1vZHVsZXMgY29udGFpbmVkIHRoZXJlaW4sIHBsdXMgYW55IGFzc29jaWF0ZWQKK2ludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbgorYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlIHByb2dyYW0sIG9yIGEgbGlzdCBvZgorZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdC4KKworYi4gQ3JlYXRlIERlcml2YXRpdmUgV29ya3MgKGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIHVuZGVyIER1dGNoCitjb3B5cmlnaHQgbGF3KSBvZiBMaWNlbnNlZCBQcm9kdWN0IGJ5IGFkZGluZyB0byBvciBkZWxldGluZworZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBzYWlkIExpY2Vuc2VkIFByb2R1Y3QuCisKK2MuIFVuZGVyIGNsYWltcyBvZiBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZAorYnkgTGljZW5zb3IsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwKK2FuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBMaWNlbnNlZCBQcm9kdWN0IG9yIHBvcnRpb25zIHRoZXJlb2YsCitidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBjbGFpbSBpcyBuZWNlc3NhcnkgdG8KK2VuYWJsZSB5b3UgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3IKK290aGVyd2lzZSBkaXNwb3NlIG9mIExpY2Vuc2VkIFByb2R1Y3Qgb3IgcG9ydGlvbnMgdGhlcmVvZiBvcgorRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisyLiBHcmFudCBvZiBMaWNlbnNlIHRvIE1vZGlmaWNhdGlvbnMgRnJvbQorQ29udHJpYnV0b3IuCisKKyJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb25zIHRvIG9yCitkZWxldGlvbnMgZnJvbSB0aGUgc3Vic3RhbmNlIG9yCitzdHJ1Y3R1cmUgb2YgKGkpIGEgZmlsZSBjb250YWluaW5nIExpY2Vuc2VkIFByb2R1Y3QsIG9yIChpaSkgYW55IG5ldyBmaWxlCit0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIExpY2Vuc2VkIFByb2R1Y3QuIEhlcmVpbmFmdGVyIGluIHRoaXMKK0xpY2Vuc2UsIHRoZSB0ZXJtICJMaWNlbnNlZCBQcm9kdWN0IiBzaGFsbCBpbmNsdWRlIGFsbCBwcmV2aW91cworTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSByZWNlaXZlIGZyb20gYW55IENvbnRyaWJ1dG9yLiBCeQorYXBwbGljYXRpb24gb2YgdGhlIHByb3Zpc2lvbnMgaW4gU2VjdGlvbiA0KGEpIGJlbG93LCBlYWNoIHBlcnNvbiBvcgorZW50aXR5IHdobyBjcmVhdGVkIG9yIGNvbnRyaWJ1dGVkIHRvIHRoZSBjcmVhdGlvbiBvZiwgYW5kIGRpc3RyaWJ1dGVkLAorYSBNb2RpZmljYXRpb24gKGEgIkNvbnRyaWJ1dG9yIikgaGVyZWJ5IGdyYW50cyB5b3UgYSB3b3JsZC13aWRlLAorcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EuIFVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kCitkaXN0cmlidXRlIGFueSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciBvcgorcG9ydGlvbnMgdGhlcmVvZiwgaW4gYm90aCBTb3VyY2UgQ29kZSBvciBhcyBhbiBleGVjdXRhYmxlIHByb2dyYW0sCitlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcyBvciBhcyBwYXJ0IG9mIERlcml2YXRpdmUKK1dvcmtzLgorCitiLiBVbmRlciBjbGFpbXMgb2YgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkKK0NvbnRyaWJ1dG9yLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsCithbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTW9kaWZpY2F0aW9ucyBvciBwb3J0aW9ucyB0aGVyZW9mLCBidXQKK3NvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggY2xhaW0gaXMgbmVjZXNzYXJ5IHRvCitlbmFibGUgeW91IHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yCitvdGhlcndpc2UgZGlzcG9zZSBvZiBNb2RpZmljYXRpb25zIG9yIHBvcnRpb25zIHRoZXJlb2Ygb3IKK0Rlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworMy4gRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuCisKK05vdGhpbmcgaW4KK3RoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLAorcGF0ZW50cywKK3RyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBvciBhbnkKK0NvbnRyaWJ1dG9yIGV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbi4gTm8gcGF0ZW50IGxpY2Vuc2UgaXMKK2dyYW50ZWQgc2VwYXJhdGUgZnJvbSB0aGUgTGljZW5zZWQgUHJvZHVjdCwgZm9yIGNvZGUgdGhhdCB5b3UgZGVsZXRlIGZyb20KK3RoZSBMaWNlbnNlZCBQcm9kdWN0LCBvciBmb3IgY29tYmluYXRpb25zIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdCB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlLiBObyByaWdodCBpcyBncmFudGVkIHRvIHRoZQordHJhZGVtYXJrcyBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZQoraW5jbHVkZWQgaW4gdGhlIExpY2Vuc2VkIFByb2R1Y3QuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlCitpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQKK3Rlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueSBjb2RlIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYQorcmlnaHQgdG8gbGljZW5zZS4KKworNC4gWW91ciBPYmxpZ2F0aW9ucyBSZWdhcmRpbmcgRGlzdHJpYnV0aW9uLgorCithLiBBcHBsaWNhdGlvbiBvZiBUaGlzIExpY2Vuc2UgdG8gWW91cgorTW9kaWZpY2F0aW9ucy4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHlvdXIgdXNlIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdCwgeW91CitoZXJlYnkgYWdyZWUgdGhhdCBhbnkgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBjcmVhdGUgb3IgdG8gd2hpY2gKK3lvdSBjb250cmlidXRlLCBhbmQgd2hpY2ggeW91IGRpc3RyaWJ1dGUsIGFyZSBnb3Zlcm5lZCBieSB0aGUKK3Rlcm1zIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgU2VjdGlvbiAyLgorQW55IE1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgY3JlYXRlIG9yIHRvIHdoaWNoIHlvdSBjb250cmlidXRlCittYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEKK2Z1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDcuIFlvdSBtdXN0CitpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZQorTW9kaWZpY2F0aW9ucyB5b3UgZGlzdHJpYnV0ZS4gWW91IGFncmVlIG5vdCB0byBvZmZlciBvciBpbXBvc2UgYW55Cit0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgb3IgZXhlY3V0YWJsZSB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdCBvciBNb2RpZmljYXRpb25zIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIGFwcGxpY2FibGUKK3ZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLgorSG93ZXZlciwgeW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlCithZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiA0KGUpLgorCitiLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIFlvdSBtdXN0IG1ha2UKK2F2YWlsYWJsZSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdCBhbmQgYW55IE1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgZGlzdHJpYnV0ZSwgZWl0aGVyIG9uIHRoZQorc2FtZSBtZWRpYSBhcyB5b3UgZGlzdHJpYnV0ZSBhbnkgZXhlY3V0YWJsZSBvciBvdGhlciBmb3JtCitvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCwgb3IgdmlhIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbgordGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMKK3RyYW5zZmVyIG9mIGRhdGEgKGFuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iKS4gVGhlCitTb3VyY2UgQ29kZSBmb3IgYW55IHZlcnNpb24gb2YgTGljZW5zZWQgUHJvZHVjdCBvcgorTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBkaXN0cmlidXRlIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQKK2xlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lCithdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uCitvZiBzYWlkIExpY2Vuc2VkIFByb2R1Y3Qgb3IgTW9kaWZpY2F0aW9ucyBoYXMgYmVlbiBtYWRlCithdmFpbGFibGUuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlCit2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uCitNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorCitjLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLiBZb3UgbXVzdCBjYXVzZSBhbnkKK01vZGlmaWNhdGlvbnMgdGhhdCB5b3UgY3JlYXRlIG9yIHRvIHdoaWNoIHlvdSBjb250cmlidXRlLCBhbmQgd2hpY2gKK3lvdSBkaXN0cmlidXRlLCB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgYWRkaXRpb25zLAorY2hhbmdlcyBvciBkZWxldGlvbnMgeW91IG1hZGUgdG8gY3JlYXRlIG9yIGNvbnRyaWJ1dGUgdG8gdGhvc2UKK01vZGlmaWNhdGlvbnMsIGFuZCB0aGUgZGF0ZXMgb2YgYW55IHN1Y2ggYWRkaXRpb25zLCBjaGFuZ2VzIG9yCitkZWxldGlvbnMuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlCitNb2RpZmljYXRpb25zIGFyZSBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIHRoZQorTGljZW5zZWQgUHJvZHVjdCBhbmQgaW5jbHVkZSB0aGUgbmFtZXMgb2YgdGhlIExpY2Vuc29yIGFuZCBhbnkKK0NvbnRyaWJ1dG9yIHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0IGluIChpKSB0aGUgU291cmNlIENvZGUgYW5kCisoaWkpIGluIGFueSBub3RpY2UgZGlzcGxheWVkIGJ5IGEgdmVyc2lvbiBvZiB0aGUgTGljZW5zZWQKK1Byb2R1Y3QgeW91IGRpc3RyaWJ1dGUgb3IgaW4gcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIHlvdQorZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QuCitZb3UgbWF5IG5vdCBtb2RpZnkgb3IgZGVsZXRlIGFueSBwcmVleGlzdGluZyBjb3B5cmlnaHQgbm90aWNlcyBpbgordGhlIExpY2Vuc2VkIFByb2R1Y3QuCisKK2QuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLgorCitpLiBUaGlyZCBQYXJ0eSBDbGFpbXMuIElmIHlvdSBoYXZlCitrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdG8gYSB0aGlyZCBwYXJ0eWBzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodCBpcworcmVxdWlyZWQKK3RvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UsIHlvdSBtdXN0CitpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQKKyJMRUdBTCIgdGhhdCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZQorY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cKK3dob20gdG8gY29udGFjdC4gSWYgeW91IG9idGFpbiBzdWNoIGtub3dsZWRnZSBhZnRlciB5b3UgbWFrZQorYW55IE1vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uCis0KGIpLCB5b3Ugc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMKK3lvdSBtYWtlIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyCitzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvcgorbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8KK3JlY2VpdmVkIHRoZSBMaWNlbnNlZCBQcm9kdWN0IGZyb20geW91IHRoYXQgbmV3IGtub3dsZWRnZQoraGFzIGJlZW4gb2J0YWluZWQuCisKK2lpLiBDb250cmlidXRvciBBUElzLiBJZiB5b3VyCitNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlICgiQVBJIikgYW5kIHlvdSBoYXZlCitrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHRoYXQgYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5Cit0byBpbXBsZW1lbnQgdGhhdCBBUEksIHlvdSBtdXN0IGFsc28gaW5jbHVkZSB0aGlzCitpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworaWlpLiBSZXByZXNlbnRhdGlvbnMuIFlvdSByZXByZXNlbnQgdGhhdCwKK2V4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gNChkKShpKSBhYm92ZSwgeW91IGJlbGlldmUgdGhhdCBhbnkKK01vZGlmaWNhdGlvbnMgeW91IGRpc3RyaWJ1dGUgYXJlIHlvdXIgb3JpZ2luYWwgY3JlYXRpb25zIGFuZAordGhhdCB5b3UgaGF2ZSBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzCitjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKK2UuIFJlcXVpcmVkIE5vdGljZXMuIFlvdSBtdXN0IGR1cGxpY2F0ZSB0aGlzCitMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIHlvdSBwcm92aWRlIGFsb25nIHdpdGggdGhlIFNvdXJjZSBDb2RlIG9mIGFueQorTW9kaWZpY2F0aW9ucyB5b3UgY3JlYXRlIG9yIHRvIHdoaWNoIHlvdSBjb250cmlidXRlLCBhbmQgd2hpY2ggeW91CitkaXN0cmlidXRlLCB3aGVyZXZlciB5b3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzCityZWxhdGluZyB0byBMaWNlbnNlZCBQcm9kdWN0LiBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZQorY29udGFpbmVkIGluIEV4aGliaXQgQSAodGhlICJOb3RpY2UiKSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZQorQ29kZSBvZiBhbnkgY29weSB5b3UgZGlzdHJpYnV0ZSBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdC4gSWYgeW91CitjcmVhdGVkIGEgTW9kaWZpY2F0aW9uLCB5b3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYQorQ29udHJpYnV0b3IgdG8gdGhlIE5vdGljZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCB0aGUgTm90aWNlCitpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbgoreW91IG11c3QgaW5jbHVkZSBzdWNoIE5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQKK2RpcmVjdG9yeSBmaWxlKSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYQorbm90aWNlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LAorc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZQorcmVjaXBpZW50cyBvZiBMaWNlbnNlZCBQcm9kdWN0LiBIb3dldmVyLCB5b3UgbWF5IGRvIHNvIG9ubHkgb24KK3lvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIExpY2Vuc29yIG9yIGFueQorQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgY2xlYXIgdGhhdCBhbnkgc3VjaCB3YXJyYW50eSwKK3N1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IHlvdQorYWxvbmUsIGFuZCB5b3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgTGljZW5zb3IgYW5kIGV2ZXJ5CitDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgTGljZW5zb3Igb3Igc3VjaAorQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvcgorbGlhYmlsaXR5IHRlcm1zIHlvdSBvZmZlci4KKworZi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuIFlvdSBtYXkKK2Rpc3RyaWJ1dGUgTGljZW5zZWQgUHJvZHVjdCBhcyBhbiBleGVjdXRhYmxlIHByb2dyYW0gdW5kZXIgYSBsaWNlbnNlIG9mCit5b3VyIGNob2ljZSB0aGF0IG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZQorcHJvdmlkZWQgKGkpIHlvdSBoYXZlIHNhdGlzZmllZCB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb25zCis0KGEpIHRocm91Z2ggNChlKSBmb3IgdGhhdCBkaXN0cmlidXRpb24sIChpaSkgeW91IGluY2x1ZGUgYQorY29uc3BpY3VvdXMgbm90aWNlIGluIHRoZSBleGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbgorYW5kIGNvbGxhdGVyYWwgbWF0ZXJpYWxzIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZgordGhlIExpY2Vuc2VkIFByb2R1Y3QgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIHlvdSBoYXZlCitmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gNChiKSwgKGlpaSkgeW91IHJldGFpbiBhbGwKK2V4aXN0aW5nIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBhbmQgKGl2KSB5b3UKK21ha2UgaXQgY2xlYXIgdGhhdCBhbnkgdGVybXMgdGhhdCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlCitvZmZlcmVkIGJ5IHlvdSBhbG9uZSwgbm90IGJ5IExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvci4gWW91CitoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBMaWNlbnNvciBhbmQgZXZlcnkgQ29udHJpYnV0b3IKK2ZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IExpY2Vuc29yIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYQorcmVzdWx0IG9mIGFueSB0ZXJtcyB5b3Ugb2ZmZXIuCisKK2cuIERpc3RyaWJ1dGlvbiBvZiBEZXJpdmF0aXZlIFdvcmtzLiBZb3UgbWF5CitjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyAoZS5nLiwgY29tYmluYXRpb25zIG9mIHNvbWUgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdCB3aXRoIG90aGVyIGNvZGUpIGFuZCBkaXN0cmlidXRlIHRoZSBEZXJpdmF0aXZlIFdvcmtzIGFzCitwcm9kdWN0cyB1bmRlciBhbnkgb3RoZXIgbGljZW5zZSB5b3Ugc2VsZWN0LCB3aXRoIHRoZQorcHJvdmlzbyB0aGF0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yCit0aG9zZSBwb3J0aW9ucyBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGNvbnNpc3Qgb2YgdGhlCitMaWNlbnNlZCBQcm9kdWN0IG9yIGFueSBNb2RpZmljYXRpb25zIHRoZXJldG8uCisKKzUuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IKK1JlZ3VsYXRpb24uCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIHlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aAorcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwKK29yZGVyLCBvciByZWd1bGF0aW9uLCB0aGVuIHlvdSBtdXN0IChpKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIChpaSkgY2l0ZSB0aGUgc3RhdHV0ZSBvcgorcmVndWxhdGlvbiB0aGF0IHByb2hpYml0cyB5b3UgZnJvbSBhZGhlcmluZyB0byB0aGUgTGljZW5zZSwgYW5kCisoaWlpKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uCittdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQoZCksCithbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvCit0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoCitkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkKK3NraWxsIGF0IGNvbXB1dGVyIHByb2dyYW1taW5nIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworNi4gQXBwbGljYXRpb24gb2YgVGhpcyBMaWNlbnNlLgorCitUaGlzIExpY2Vuc2UKK2FwcGxpZXMgdG8gY29kZSB0byB3aGljaCBMaWNlbnNvciBvciBDb250cmlidXRvciBoYXMgYXR0YWNoZWQgdGhlIE5vdGljZSBpbgorRXhoaWJpdCBBLAord2hpY2ggaXMgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSB0aGlzIHJlZmVyZW5jZS4KKworNy4gVmVyc2lvbnMgb2YgVGhpcyBMaWNlbnNlLgorCithLiBWZXJzaW9uLiBUaGUgTW90b3NvdG8gT3BlbiBTb3VyY2UgTGljZW5zZSBpcworZGVyaXZlZCBmcm9tIHRoZSBKYWJiZXIgT3BlbiBTb3VyY2UgTGljZW5zZS4gQWxsIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8KK2FwcGxpY2FibGUgbGF3IGFuZCB0aGUgbG9jYXRpb24gb2YgY291cnQuCisKK2IuIE5ldyBWZXJzaW9ucy4gTGljZW5zb3IgbWF5IHB1Ymxpc2ggZnJvbSB0aW1lIHRvCit0aW1lIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKworYy4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4gT25jZSBMaWNlbnNlZCBQcm9kdWN0CitoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIHlvdSBtYXkgYWx3YXlzCitjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvCitjaG9vc2UgdG8gdXNlIHN1Y2ggTGljZW5zZWQgUHJvZHVjdCB1bmRlciB0aGUgdGVybXMgb2YgYW55CitzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IExpY2Vuc29yLiBObyBvbmUKK290aGVyIHRoYW4gTGljIGVuc29yIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcworYXBwbGljYWJsZSB0byBMaWNlbnNlZCBQcm9kdWN0IGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitkLiBEZXJpdmF0aXZlIFdvcmtzIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91CitjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHdoaWNoIHlvdSBtYXkgZG8gb25seSBpbgorb3JkZXIgdG8KK2FwcGx5IGl0IHRvIHNvZnR3YXJlIHRoYXQgaXMgbm90IGFscmVhZHkgYSBMaWNlbnNlZCBQcm9kdWN0IHVuZGVyCit0aGlzIExpY2Vuc2UsIHlvdSBtdXN0IHJlbmFtZSB5b3VyIGxpY2Vuc2Ugc28gdGhhdCBpdCBpcyBub3QKK2NvbmZ1c2luZ2x5IHNpbWlsYXIgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbXVzdCBtYWtlIGl0IGNsZWFyIHRoYXQKK3lvdXIgbGljZW5zZSBjb250YWlucyB0ZXJtcyB0aGF0IGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZS4gSW4KK3NvIG5hbWluZyB5b3VyIGxpY2Vuc2UsIHlvdSBtYXkgbm90IHVzZSBhbnkgdHJhZGVtYXJrIG9mIExpY2Vuc29yCitvciBhbnkgQ29udHJpYnV0b3IuCisKKzguIERpc2NsYWltZXIgb2YgV2FycmFudHkuCisKK0xJQ0VOU0VEIFBST0RVQ1QgSVMKK1BST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUCitMSU1JVEFUSU9OLCBXQVJSQU5USUVTCitUSEFUIFRIRSBMSUNFTlNFRCBQUk9EVUNUIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRSBPUgorTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCitMSUNFTlNFRCBQUk9EVUNUIElTCitXSVRIIFlPVS4gU0hPVUxEIExJQ0VOU0VEIFBST0RVQ1QgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UKKyhBTkQgTk9UIFRIRSBMSUNFTlNPUiBPUgorQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUgorT1IgQ09SUkVDVElPTi4gVEhJUworRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PCitVU0UgT0YgTElDRU5TRUQKK1BST0RVQ1QgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworOS4gVGVybWluYXRpb24uCisKK2EuIEF1dG9tYXRpYyBUZXJtaW5hdGlvbiBVcG9uIEJyZWFjaC4gVGhpcworbGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIHlvdQorZmFpbCB0byBjb21wbHkgd2l0aCB0aGUgdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2gKK3dpdGhpbiB0aGlydHkgKDMwKSBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guCitBbGwgc3VibGljZW5zZXMgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QgdGhhdCBhcmUgcHJvcGVybHkgZ3JhbnRlZAorc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBsaWNlbnNlLiBQcm92aXNpb25zCit0aGF0LCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlCit0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHNoYWxsIHN1cnZpdmUuCisKK2IuIFRlcm1pbmF0aW9uIFVwb24gQXNzZXJ0aW9uIG9mIFBhdGVudAorSW5mcmluZ2VtZW50LiBJZiB5b3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQKK2luZnJpbmdlbWVudCBjbGFpbQorKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IExpY2Vuc29yIG9yIGEKK0NvbnRyaWJ1dG9yIChMaWNlbnNvciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20geW91IGZpbGUKK3N1Y2ggYW4gYWN0aW9uIGlzIHJlZmVycmVkIHRvIGhlcmVpbiBhcyAiUmVzcG9uZGVudCIpIGFsbGVnaW5nCit0aGF0IExpY2Vuc2VkIFByb2R1Y3QgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55CitwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBSZXNwb25kZW50IHRvIHlvdQordW5kZXIgU2VjdGlvbnMgMSBvciAyIG9mIHRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUKK3Byb3NwZWN0aXZlbHkgdXBvbiBzaXh0eSAoNjApIGRheXMgbm90aWNlIGZyb20gUmVzcG9uZGVudCAodGhlCisiTm90aWNlIFBlcmlvZCIpIHVubGVzcyB3aXRoaW4gdGhhdCBOb3RpY2UgUGVyaW9kIHlvdQorZWl0aGVyIGFncmVlIGluIHdyaXRpbmcgKGkpIHRvIHBheSBSZXNwb25kZW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlCityZWFzb25hYmx5IHJveWFsdHkgZm9yIHlvdXIgcGFzdCBvciBmdXR1cmUgdXNlIG9mIExpY2Vuc2VkCitQcm9kdWN0IG1hZGUgYnkgc3VjaCBSZXNwb25kZW50LCBvciAoaWkpIHdpdGhkcmF3IHlvdXIgbGl0aWdhdGlvbgorY2xhaW0gd2l0aCByZXNwZWN0IHRvIExpY2Vuc2VkIFByb2R1Y3QgYWdhaW5zdCBzdWNoCitSZXNwb25kZW50LiBJZiB3aXRoaW4gc2FpZCBOb3RpY2UgUGVyaW9kIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZAorcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluCit3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sCit0aGUgcmlnaHRzIGdyYW50ZWQgYnkgTGljZW5zb3IgdG8geW91IHVuZGVyIFNlY3Rpb25zIDEgYW5kIDIKK2F1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHNhaWQgTm90aWNlCitQZXJpb2QuCisKK2MuIFJlYXNvbmFibGUgVmFsdWUgb2YgVGhpcyBMaWNlbnNlLiBJZiB5b3UgYXNzZXJ0IGEKK3BhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBSZXNwb25kZW50IGFsbGVnaW5nIHRoYXQgTGljZW5zZWQKK1Byb2R1Y3QgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoCitjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvCit0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlCityZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHNhaWQgUmVzcG9uZGVudCB1bmRlcgorU2VjdGlvbnMgMSBhbmQgMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlCithbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS4KKworZC4gTm8gUmV0cm9hY3RpdmUgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiBJbiB0aGUKK2V2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDkoYSkgb3IgOShiKSBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UKK2FncmVlbWVudHMgKGV4Y2x1ZGluZyBsaWNlbnNlcyB0byBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGUgcnMpCit0aGF0IGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgeW91IG9yIGFueSBkaXN0cmlidXRvcgoraGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUKK3Rlcm1pbmF0aW9uLgorCisxMC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisKK1VOREVSIE5PCitDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgVEhFIExJQ0VOU09SLCBBTlkKK0NPTlRSSUJVVE9SLCBPUiBBTlkKK0RJU1RSSUJVVE9SIE9GIExJQ0VOU0VEIFBST0RVQ1QsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLAorQkUgTElBQkxFIFRPIEFOWSBQRVJTT04KK0ZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkKK0NIQVJBQ1RFUiBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSCitGQUlMVVJFIE9SCitNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRgorU1VDSCBQQVJUWSBTSEFMTAorSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRgorTElBQklMSVRZIFNIQUxMIE5PVAorQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSAorUEFSVFkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NdWx0aWNzIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NdWx0aWNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ODc2NDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL011bHRpY3MKQEAgLTAsMCArMSw0MCBAQAorCitNdWx0aWNzIExpY2Vuc2UKKworSGlzdG9yaWNhbCBCYWNrZ3JvdW5kCisKK1RoaXMgZWRpdGlvbiBvZiB0aGUgTXVsdGljcyBzb2Z0d2FyZSBtYXRlcmlhbHMgYW5kIGRvY3VtZW50YXRpb24gaXMKK3Byb3ZpZGVkIGFuZCBkb25hdGVkIHRvIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kgYnkgR3JvdXAKK0JVTEwgaW5jbHVkaW5nIEJVTEwgSE4gSW5mb3JtYXRpb24gU3lzdGVtcyBJbmMuIGFzIGEgY29udHJpYnV0aW9uIHRvCitjb21wdXRlciBzY2llbmNlIGtub3dsZWRnZS4gVGhpcyBkb25hdGlvbiBpcyBtYWRlIGFsc28gdG8gZ2l2ZSBldmlkZW5jZQorb2YgdGhlIGNvbW1vbiBjb250cmlidXRpb25zIG9mIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksCitCZWxsIExhYm9yYXRvcmllcywgR2VuZXJhbCBFbGVjdHJpYywgSG9uZXl3ZWxsIEluZm9ybWF0aW9uIFN5c3RlbXMKK0luYy4sIEhvbmV5d2VsbCBCVUxMIEluYy4sIEdyb3VwZSBCVUxMIGFuZCBCVUxMIEhOIEluZm9ybWF0aW9uIFN5c3RlbXMKK0luYy4gdG8gdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgb3BlcmF0aW5nIHN5c3RlbS4gTXVsdGljcyBkZXZlbG9wbWVudAord2FzIGluaXRpYXRlZCBieSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5IFByb2plY3QgTUFDCisoMTk2My0xOTcwKSwgcmVuYW1lZCB0aGUgTUlUIExhYm9yYXRvcnkgZm9yIENvbXB1dGVyIFNjaWVuY2UgYW5kCitBcnRpZmljaWFsIEludGVsbGlnZW5jZSBpbiB0aGUgbWlkIDE5NzBzLCB1bmRlciB0aGUgbGVhZGVyc2hpcCBvZgorUHJvZmVzc29yIEZlcm5hbmRvIEpvc2UgQ29yYmF0by4gVXNlcnMgY29uc2lkZXIgdGhhdCBNdWx0aWNzIHByb3ZpZGVkIHRoZQorYmVzdCBzb2Z0d2FyZSBhcmNoaXRlY3R1cmUgZm9yIG1hbmFnaW5nIGNvbXB1dGVyIGhhcmR3YXJlIHByb3Blcmx5IGFuZAorZm9yIGV4ZWN1dGluZyBwcm9ncmFtcy4gTWFueSBzdWJzZXF1ZW50IG9wZXJhdGluZyBzeXN0ZW1zIGluY29ycG9yYXRlZAorTXVsdGljcyBwcmluY2lwbGVzLiBNdWx0aWNzIHdhcyBkaXN0cmlidXRlZCBpbiAxOTc1IHRvIDIwMDAgYnkgR3JvdXAKK0J1bGwgaW4gRXVyb3BlICwgYW5kIGluIHRoZSBVLlMuIGJ5IEJ1bGwgSE4gSW5mb3JtYXRpb24gU3lzdGVtcyBJbmMuLCBhcworc3VjY2Vzc29yIGluIGludGVyZXN0IGJ5IGNoYW5nZSBpbiBuYW1lIG9ubHkgdG8gSG9uZXl3ZWxsIEJ1bGwgSW5jLiBhbmQKK0hvbmV5d2VsbCBJbmZvcm1hdGlvbiBTeXN0ZW1zIEluYy4gLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGVzZSBwcm9ncmFtcyBhbmQgdGhlaXIKK2RvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCxwcm92aWRlZAordGhhdCB0aGUgYmVsb3cgY29weXJpZ2h0IG5vdGljZSBhbmQgaGlzdG9yaWNhbCBiYWNrZ3JvdW5kIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBoaXN0b3JpY2FsIGJhY2tncm91bmQgYW5kCit0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0Cit0aGUgbmFtZXMgb2YgTUlULCBISVMsIEJVTEwgb3IgQlVMTCBITiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBwcm9ncmFtcyB3aXRob3V0IHNwZWNpZmljCitwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitDb3B5cmlnaHQgMTk3MiBieSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5IGFuZCBIb25leXdlbGwgSW5mb3JtYXRpb24KK1N5c3RlbXMgSW5jLgorQ29weXJpZ2h0IDIwMDYgYnkgQlVMTCBITiBJbmZvcm1hdGlvbiBTeXN0ZW1zIEluYy4KK0NvcHlyaWdodCAyMDA2IGJ5IEJ1bGwgU0FTCitBbGwgUmlnaHRzIFJlc2VydmVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTkFTQS0xLjMgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05BU0EtMS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMzE4MmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05BU0EtMS4zCkBAIC0wLDAgKzEsNzkgQEAKKworQVNBIE9QRU4gU09VUkNFIEFHUkVFTUVOVCBWRVJTSU9OIDEuMworCitUSElTIE9QRU4gU09VUkNFIEFHUkVFTUVOVCAoIkFHUkVFTUVOVCIpIERFRklORVMgVEhFIFJJR0hUUyBPRiBVU0UsIFJFUFJPRFVDVElPTiwgRElTVFJJQlVUSU9OLCBNT0RJRklDQVRJT04gQU5EIFJFRElTVFJJQlVUSU9OIE9GIENFUlRBSU4gQ09NUFVURVIgU09GVFdBUkUgT1JJR0lOQUxMWSBSRUxFQVNFRCBCWSBUSEUgVU5JVEVEIFNUQVRFUyBHT1ZFUk5NRU5UIEFTIFJFUFJFU0VOVEVEIEJZIFRIRSBHT1ZFUk5NRU5UIEFHRU5DWSBMSVNURUQgQkVMT1cgKCJHT1ZFUk5NRU5UIEFHRU5DWSIpLiBUSEUgVU5JVEVEIFNUQVRFUyBHT1ZFUk5NRU5ULCBBUyBSRVBSRVNFTlRFRCBCWSBHT1ZFUk5NRU5UIEFHRU5DWSwgSVMgQU4gSU5URU5ERUQgVEhJUkQtUEFSVFkgQkVORUZJQ0lBUlkgT0YgQUxMIFNVQlNFUVVFTlQgRElTVFJJQlVUSU9OUyBPUiBSRURJU1RSSUJVVElPTlMgT0YgVEhFIFNVQkpFQ1QgU09GVFdBUkUuIEFOWU9ORSBXSE8gVVNFUywgUkVQUk9EVUNFUywgRElTVFJJQlVURVMsIE1PRElGSUVTIE9SIFJFRElTVFJJQlVURVMgVEhFIFNVQkpFQ1QgU09GVFdBUkUsIEFTIERFRklORUQgSEVSRUlOLCBPUiBBTlkgUEFSVCBUSEVSRU9GLCBJUywgQlkgVEhBVCBBQ1RJT04sIEFDQ0VQVElORyBJTiBGVUxMIFRIRSBSRVNQT05TSUJJTElUSUVTIEFORCBPQkxJR0FUSU9OUyBDT05UQUlORUQgSU4gVEhJUyBBR1JFRU1FTlQuCisKK0dvdmVybm1lbnQgQWdlbmN5OiBfX19fXyBHb3Zlcm5tZW50IEFnZW5jeSBPcmlnaW5hbCBTb2Z0d2FyZSBEZXNpZ25hdGlvbjogX18gR292ZXJubWVudCBBZ2VuY3kgT3JpZ2luYWwgU29mdHdhcmUgVGl0bGU6IF9fX19fIFVzZXIgUmVnaXN0cmF0aW9uIFJlcXVlc3RlZC4gUGxlYXNlIFZpc2l0IGh0dHA6Ly9fX18gR292ZXJubWVudCBBZ2VuY3kgUG9pbnQgb2YgQ29udGFjdCBmb3IgT3JpZ2luYWwgU29mdHdhcmU6IF9fX19fCisKK0RFRklOSVRJT05TCitBLiAiQ29udHJpYnV0b3IiIG1lYW5zIEdvdmVybm1lbnQgQWdlbmN5LCBhcyB0aGUgZGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgYW5kIGFueSBlbnRpdHkgdGhhdCBtYWtlcyBhIE1vZGlmaWNhdGlvbi4gQi4gIkNvdmVyZWQgUGF0ZW50cyIgbWVhbiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBNb2RpZmljYXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBTdWJqZWN0IFNvZnR3YXJlLiBDLiAiRGlzcGxheSIgbWVhbnMgdGhlIHNob3dpbmcgb2YgYSBjb3B5IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBlaXRoZXIgZGlyZWN0bHkgb3IgYnkgbWVhbnMgb2YgYW4gaW1hZ2UsIG9yIGFueSBvdGhlciBkZXZpY2UuIEQuICJEaXN0cmlidXRpb24iIG1lYW5zIGNvbnZleWFuY2Ugb3IgdHJhbnNmZXIgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUsIHJlZ2FyZGxlc3Mgb2YgbWVhbnMsIHRvIGFub3RoZXIuIEUuICJMYXJnZXIgV29yayIgbWVhbnMgY29tcHV0ZXIgc29mdHdhcmUgdGhhdCBjb21iaW5lcyBTdWJqZWN0IFNvZnR3YXJlLCBvciBwb3J0aW9ucyB0aGVyZW9mLCB3aXRoIHNvZnR3YXJlIHNlcGFyYXRlIGZyb20gdGhlIFN1YmplY3QgU29mdHdhcmUgdGhhdCBpcyBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LiBGLiAiTW9kaWZpY2F0aW9uIiBtZWFucyBhbnkgYWx0ZXJhdGlvbiBvZiwgaW5jbHVkaW5nIGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20sIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgU29mdHdhcmUgb3IgU3ViamVjdCBTb2Z0d2FyZSwgYW5kIGluY2x1ZGVzIGRlcml2YXRpdmUgd29ya3MsIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIHRoZSBDb3B5cmlnaHQgU3RhdHV0ZSwgMTcgVVNDIDEwMS4gSG93ZXZlciwgdGhlIGFjdCBvZiBpbmNsdWRpbmcgU3ViamVjdCBTb2Z0d2FyZSBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcmsgZG9lcyBub3QgaW4gYW5kIG9mIGl0c2VsZiBjb25zdGl0dXRlIGEgTW9kaWZpY2F0aW9uLiBHLiAiT3JpZ2luYWwgU29mdHdhcmUiIG1lYW5zIHRoZSBjb21wdXRlciBzb2Z0d2FyZSBmaXJzdCByZWxlYXNlZCB1bmRlciB0aGlzIEFncmVlbWVudCBieSBHb3Zlcm5tZW50IEFnZW5jeSB3aXRoIEdvdmVybm1lbnQgQWdlbmN5IGRlc2lnbmF0aW9uIF9fIGFuZCBlbnRpdGxlZCBfX19fX19fX18sIGluY2x1ZGluZyBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uLCBpZiBhbnkuIEguICJSZWNpcGllbnQiIG1lYW5zIGFueW9uZSB3aG8gYWNxdWlyZXMgdGhlIFN1YmplY3QgU29mdHdhcmUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLiBJLiAiUmVkaXN0cmlidXRpb24iIG1lYW5zIERpc3RyaWJ1dGlvbiBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSBhZnRlciBhIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlLiBKLiAiUmVwcm9kdWN0aW9uIiBtZWFucyB0aGUgbWFraW5nIG9mIGEgY291bnRlcnBhcnQsIGltYWdlIG9yIGNvcHkgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUuIEsuICJTYWxlIiBtZWFucyB0aGUgZXhjaGFuZ2Ugb2YgdGhlIFN1YmplY3QgU29mdHdhcmUgZm9yIG1vbmV5IG9yIGVxdWl2YWxlbnQgdmFsdWUuIEwuICJTdWJqZWN0IFNvZnR3YXJlIiBtZWFucyB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIE1vZGlmaWNhdGlvbnMsIG9yIGFueSByZXNwZWN0aXZlIHBhcnRzIHRoZXJlb2YuIE0uICJVc2UiIG1lYW5zIHRoZSBhcHBsaWNhdGlvbiBvciBlbXBsb3ltZW50IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4KKworR1JBTlQgT0YgUklHSFRTCitBLiBVbmRlciBOb24tUGF0ZW50IFJpZ2h0czogU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IsIHdpdGggcmVzcGVjdCB0byBpdHMgb3duIGNvbnRyaWJ1dGlvbiB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgaGVyZWJ5IGdyYW50cyB0byBlYWNoIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlIHRvIGVuZ2FnZSBpbiB0aGUgZm9sbG93aW5nIGFjdGl2aXRpZXMgcGVydGFpbmluZyB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZToKKworVXNlCitEaXN0cmlidXRpb24KK1JlcHJvZHVjdGlvbgorTW9kaWZpY2F0aW9uCitSZWRpc3RyaWJ1dGlvbgorRGlzcGxheQorQi4gVW5kZXIgUGF0ZW50IFJpZ2h0czogU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IsIHdpdGggcmVzcGVjdCB0byBpdHMgb3duIGNvbnRyaWJ1dGlvbiB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgaGVyZWJ5IGdyYW50cyB0byBlYWNoIFJlY2lwaWVudCB1bmRlciBDb3ZlcmVkIFBhdGVudHMgYSBub24tZXhjbHVzaXZlLCB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSB0byBlbmdhZ2UgaW4gdGhlIGZvbGxvd2luZyBhY3Rpdml0aWVzIHBlcnRhaW5pbmcgdG8gdGhlIFN1YmplY3QgU29mdHdhcmU6CisKK1VzZQorRGlzdHJpYnV0aW9uCitSZXByb2R1Y3Rpb24KK1NhbGUKK09mZmVyIGZvciBTYWxlCitDLiBUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgUGFyYWdyYXBoIEIuIGFsc28gYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIGEgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb24gYW5kIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGlmLCBhdCB0aGUgdGltZSB0aGUgTW9kaWZpY2F0aW9uIGlzIGFkZGVkIGJ5IHRoZSBDb250cmlidXRvciwgdGhlIGFkZGl0aW9uIG9mIHN1Y2ggTW9kaWZpY2F0aW9uIGNhdXNlcyB0aGUgY29tYmluYXRpb24gdG8gYmUgY292ZXJlZCBieSB0aGUgQ292ZXJlZCBQYXRlbnRzLiBJdCBkb2VzIG5vdCBhcHBseSB0byBhbnkgb3RoZXIgY29tYmluYXRpb25zIHRoYXQgaW5jbHVkZSBhIE1vZGlmaWNhdGlvbi4KKworRC4gVGhlIHJpZ2h0cyBncmFudGVkIGluIFBhcmFncmFwaHMgQS4gYW5kIEIuIGFsbG93IHRoZSBSZWNpcGllbnQgdG8gc3VibGljZW5zZSB0aG9zZSBzYW1lIHJpZ2h0cy4gU3VjaCBzdWJsaWNlbnNlIG11c3QgYmUgdW5kZXIgdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK09CTElHQVRJT05TIE9GIFJFQ0lQSUVOVAorQS4gRGlzdHJpYnV0aW9uIG9yIFJlZGlzdHJpYnV0aW9uIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIG11c3QgYmUgbWFkZSB1bmRlciB0aGlzIEFncmVlbWVudCBleGNlcHQgZm9yIGFkZGl0aW9ucyBjb3ZlcmVkIHVuZGVyIHBhcmFncmFwaCAzSC4KKworV2hlbmV2ZXIgYSBSZWNpcGllbnQgZGlzdHJpYnV0ZXMgb3IgcmVkaXN0cmlidXRlcyB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFN1YmplY3QgU29mdHdhcmU7IGFuZAorSWYgUmVjaXBpZW50IGRpc3RyaWJ1dGVzIG9yIHJlZGlzdHJpYnV0ZXMgdGhlIFN1YmplY3QgU29mdHdhcmUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBzb3VyY2UgY29kZSwgUmVjaXBpZW50IG11c3QgYWxzbyBtYWtlIHRoZSBzb3VyY2UgY29kZSBmcmVlbHkgYXZhaWxhYmxlLCBhbmQgbXVzdCBwcm92aWRlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBvYnRhaW4gdGhlIHNvdXJjZSBjb2RlIGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS4KK0IuIEVhY2ggUmVjaXBpZW50IG11c3QgZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlIGFwcGVhcnMgcHJvbWluZW50bHkgaW4gdGhlIFN1YmplY3QgU29mdHdhcmU6CisKK1tHb3Zlcm5tZW50IEFnZW5jeSB3aWxsIGluc2VydCB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgbm90aWNlIGluIGVhY2ggYWdyZWVtZW50IGFjY29tcGFueWluZyB0aGUgaW5pdGlhbCBkaXN0cmlidXRpb24gb2Ygb3JpZ2luYWwgc29mdHdhcmUgYW5kIHJlbW92ZSB0aGlzIGJyYWNrZXRlZCBsYW5ndWFnZS5dCisKK1tUaGUgZm9sbG93aW5nIGNvcHlyaWdodCBub3RpY2Ugd2lsbCBiZSB1c2VkIGlmIGNyZWF0ZWQgYnkgYSBjb250cmFjdG9yIHB1cnN1YW50IHRvIEdvdmVybm1lbnQgQWdlbmN5IGNvbnRyYWN0IGFuZCByaWdodHMgb2J0YWluZWQgZnJvbSBjcmVhdG9yIGJ5IGFzc2lnbm1lbnQuIEdvdmVybm1lbnQgQWdlbmN5IHdpbGwgaW5zZXJ0IHRoZSB5ZWFyIGFuZCBpdHMgQWdlbmN5IGRlc2lnbmF0aW9uIGFuZCByZW1vdmUgdGhlIGJyYWNrZXRlZCBsYW5ndWFnZS5dIENvcHlyaWdodCAmIzY1NTMzOyB7WUVBUn0gVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IGFzIHJlcHJlc2VudGVkIGJ5IF9fXyBfX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitbVGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlIHdpbGwgYmUgdXNlZCBpZiBjcmVhdGVkIGJ5IGNpdmlsIHNlcnZhbnRzIG9ubHkuIEdvdmVybm1lbnQgQWdlbmN5IHdpbGwgaW5zZXJ0IHRoZSB5ZWFyIGFuZCBpdHMgQWdlbmN5IGRlc2lnbmF0aW9uIGFuZCByZW1vdmUgdGhlIGJyYWNrZXRlZCBsYW5ndWFnZS5dIENvcHlyaWdodCAmIzY1NTMzOyB7WUVBUn0gVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IGFzIHJlcHJlc2VudGVkIGJ5IF9fX18gX19fXy4gTm8gY29weXJpZ2h0IGlzIGNsYWltZWQgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgdW5kZXIgVGl0bGUgMTcsIFUuUy5Db2RlLiBBbGwgT3RoZXIgUmlnaHRzIFJlc2VydmVkLgorCitDLiBFYWNoIENvbnRyaWJ1dG9yIG11c3QgY2hhcmFjdGVyaXplIGl0cyBhbHRlcmF0aW9uIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGFzIGEgTW9kaWZpY2F0aW9uIGFuZCBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvciBvZiBpdHMgTW9kaWZpY2F0aW9uIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBNb2RpZmljYXRpb24uIEluIGZ1bGZpbGxtZW50IG9mIHRoZXNlIHJlcXVpcmVtZW50cywgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgZmlsZSAoZS5nLiwgYSBjaGFuZ2UgbG9nIGZpbGUpIHRoYXQgZGVzY3JpYmVzIHRoZSBhbHRlcmF0aW9ucyBtYWRlIGFuZCB0aGUgZGF0ZSBvZiB0aGUgYWx0ZXJhdGlvbnMsIGlkZW50aWZpZXMgQ29udHJpYnV0b3IgYXMgb3JpZ2luYXRvciBvZiB0aGUgYWx0ZXJhdGlvbnMsIGFuZCBjb25zZW50cyB0byBjaGFyYWN0ZXJpemF0aW9uIG9mIHRoZSBhbHRlcmF0aW9ucyBhcyBhIE1vZGlmaWNhdGlvbiwgZm9yIGV4YW1wbGUsIGJ5IGluY2x1ZGluZyBhIHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBTb2Z0d2FyZSBwcm92aWRlZCBieSBHb3Zlcm5tZW50IEFnZW5jeS4gT25jZSBjb25zZW50IGlzIGdyYW50ZWQsIGl0IG1heSBub3QgdGhlcmVhZnRlciBiZSByZXZva2VkLgorCitELiBBIENvbnRyaWJ1dG9yIG1heSBhZGQgaXRzIG93biBjb3B5cmlnaHQgbm90aWNlIHRvIHRoZSBTdWJqZWN0IFNvZnR3YXJlLiBPbmNlIGEgY29weXJpZ2h0IG5vdGljZSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgYSBSZWNpcGllbnQgbWF5IG5vdCByZW1vdmUgaXQgd2l0aG91dCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIHRoZSBDb250cmlidXRvciB3aG8gYWRkZWQgdGhlIG5vdGljZS4KKworRS4gQSBSZWNpcGllbnQgbWF5IG5vdCBtYWtlIGFueSByZXByZXNlbnRhdGlvbiBpbiB0aGUgU3ViamVjdCBTb2Z0d2FyZSBvciBpbiBhbnkgcHJvbW90aW9uYWwsIGFkdmVydGlzaW5nIG9yIG90aGVyIG1hdGVyaWFsIHRoYXQgbWF5IGJlIGNvbnN0cnVlZCBhcyBhbiBlbmRvcnNlbWVudCBieSBHb3Zlcm5tZW50IEFnZW5jeSBvciBieSBhbnkgcHJpb3IgUmVjaXBpZW50IG9mIGFueSBwcm9kdWN0IG9yIHNlcnZpY2UgcHJvdmlkZWQgYnkgUmVjaXBpZW50LCBvciB0aGF0IG1heSBzZWVrIHRvIG9idGFpbiBjb21tZXJjaWFsIGFkdmFudGFnZSBieSB0aGUgZmFjdCBvZiBHb3Zlcm5tZW50IEFnZW5jeWBzIG9yIGEgcHJpb3IgUmVjaXBpZW50YHMgcGFydGljaXBhdGlvbiBpbiB0aGlzIEFncmVlbWVudC4KKworRi4gSW4gYW4gZWZmb3J0IHRvIHRyYWNrIHVzYWdlIGFuZCBtYWludGFpbiBhY2N1cmF0ZSByZWNvcmRzIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBlYWNoIFJlY2lwaWVudCwgdXBvbiByZWNlaXB0IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBpcyByZXF1ZXN0ZWQgdG8gcmVnaXN0ZXIgd2l0aCBHb3Zlcm5tZW50IEFnZW5jeSBieSB2aXNpdGluZyB0aGUgZm9sbG93aW5nIHdlYnNpdGU6IF9fX19fXy4gUmVjaXBpZW50YHMgbmFtZSBhbmQgcGVyc29uYWwgaW5mb3JtYXRpb24gc2hhbGwgYmUgdXNlZCBmb3Igc3RhdGlzdGljYWwgcHVycG9zZXMgb25seS4gT25jZSBhIFJlY2lwaWVudCBtYWtlcyBhIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUsIGl0IGlzIHJlcXVlc3RlZCB0aGF0IHRoZSBSZWNpcGllbnQgaW5mb3JtIEdvdmVybm1lbnQgQWdlbmN5IGF0IHRoZSB3ZWIgc2l0ZSBwcm92aWRlZCBhYm92ZSBob3cgdG8gYWNjZXNzIHRoZSBNb2RpZmljYXRpb24uCisKK1tBbHRlcm5hdGl2ZSBwYXJhZ3JhcGggZm9yIHVzZSB3aGVuIGEgd2ViIHNpdGUgZm9yIHJlbGVhc2UgYW5kIG1vbml0b3Jpbmcgb2Ygc3ViamVjdCBzb2Z0d2FyZSB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgYnkgcmVsZWFzaW5nIEdvdmVybm1lbnQgQWdlbmN5XSBJbiBhbiBlZmZvcnQgdG8gdHJhY2sgdXNhZ2UgYW5kIG1haW50YWluIGFjY3VyYXRlIHJlY29yZHMgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUsIGVhY2ggUmVjaXBpZW50LCB1cG9uIHJlY2VpcHQgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUsIGlzIHJlcXVlc3RlZCB0byBwcm92aWRlIEdvdmVybm1lbnQgQWdlbmN5LCBieSBlLW1haWwgdG8gdGhlIEdvdmVybm1lbnQgQWdlbmN5IFBvaW50IG9mIENvbnRhY3QgbGlzdGVkIGluIGNsYXVzZSA1LkYuLCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOiBfX19fX18uIFJlY2lwaWVudGBzIG5hbWUgYW5kIHBlcnNvbmFsIGluZm9ybWF0aW9uIHNoYWxsIGJlIHVzZWQgZm9yIHN0YXRpc3RpY2FsIHB1cnBvc2VzIG9ubHkuIE9uY2UgYSBSZWNpcGllbnQgbWFrZXMgYSBNb2RpZmljYXRpb24gYXZhaWxhYmxlLCBpdCBpcyByZXF1ZXN0ZWQgdGhhdCB0aGUgUmVjaXBpZW50IGluZm9ybSBHb3Zlcm5tZW50IEFnZW5jeSwgYnkgZS1tYWlsIHRvIHRoZSBHb3Zlcm5tZW50IEFnZW5jeSBQb2ludCBvZiBDb250YWN0IGxpc3RlZCBpbiBjbGF1c2UgNS5GLiwgaG93IHRvIGFjY2VzcyB0aGUgTW9kaWZpY2F0aW9uLgorCitHLiBFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0aGF0IGl0cyBNb2RpZmljYXRpb24gaXMgYmVsaWV2ZWQgdG8gYmUgQ29udHJpYnV0b3JgcyBvcmlnaW5hbCBjcmVhdGlvbiBhbmQgZG9lcyBub3QgdmlvbGF0ZSBhbnkgZXhpc3RpbmcgYWdyZWVtZW50cywgcmVndWxhdGlvbnMsIHN0YXR1dGVzIG9yIHJ1bGVzLCBhbmQgZnVydGhlciB0aGF0IENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgQWdyZWVtZW50LgorCitILiBBIFJlY2lwaWVudCBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBhbmQvb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIG90aGVyIFJlY2lwaWVudHMgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUuIEEgUmVjaXBpZW50IG1heSBkbyBzbywgaG93ZXZlciwgb25seSBvbiBpdHMgb3duIGJlaGFsZiBhbmQgbm90IG9uIGJlaGFsZiBvZiBHb3Zlcm5tZW50IEFnZW5jeSBvciBhbnkgb3RoZXIgUmVjaXBpZW50LiBTdWNoIGEgUmVjaXBpZW50IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBhbmQvb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSB0aGF0IFJlY2lwaWVudCBhbG9uZS4gRnVydGhlciwgc3VjaCBSZWNpcGllbnQgYWdyZWVzIHRvIGluZGVtbmlmeSBHb3Zlcm5tZW50IEFnZW5jeSBhbmQgZXZlcnkgb3RoZXIgUmVjaXBpZW50IGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZW0gYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBhbmQvb3IgbGlhYmlsaXR5IG9mZmVyZWQgYnkgc3VjaCBSZWNpcGllbnQuCisKK0kuIEEgUmVjaXBpZW50IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgU3ViamVjdCBTb2Z0d2FyZSB3aXRoIHNlcGFyYXRlIHNvZnR3YXJlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBhZ3JlZW1lbnQgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggY2FzZSwgdGhlIFJlY2lwaWVudCBtdXN0IG1ha2Ugc3VyZSBTdWJqZWN0IFNvZnR3YXJlLCBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbmNsdWRlZCBpbiB0aGUgTGFyZ2VyIFdvcmsgaXMgc3ViamVjdCB0byB0aGlzIEFncmVlbWVudC4KKworSi4gTm90d2l0aHN0YW5kaW5nIGFueSBwcm92aXNpb25zIGNvbnRhaW5lZCBoZXJlaW4sIFJlY2lwaWVudCBpcyBoZXJlYnkgcHV0IG9uIG5vdGljZSB0aGF0IGV4cG9ydCBvZiBhbnkgZ29vZHMgb3IgdGVjaG5pY2FsIGRhdGEgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBtYXkgcmVxdWlyZSBzb21lIGZvcm0gb2YgZXhwb3J0IGxpY2Vuc2UgZnJvbSB0aGUgVS5TLiBHb3Zlcm5tZW50LiBGYWlsdXJlIHRvIG9idGFpbiBuZWNlc3NhcnkgZXhwb3J0IGxpY2Vuc2VzIG1heSByZXN1bHQgaW4gY3JpbWluYWwgbGlhYmlsaXR5IHVuZGVyIFUuUy4gbGF3cy4gR292ZXJubWVudCBBZ2VuY3kgbmVpdGhlciByZXByZXNlbnRzIHRoYXQgYSBsaWNlbnNlIHNoYWxsIG5vdCBiZSByZXF1aXJlZCBub3IgdGhhdCwgaWYgcmVxdWlyZWQsIGl0IHNoYWxsIGJlIGlzc3VlZC4gTm90aGluZyBncmFudGVkIGhlcmVpbiBwcm92aWRlcyBhbnkgc3VjaCBleHBvcnQgbGljZW5zZS4KKworRElTQ0xBSU1FUiBPRiBXQVJSQU5USUVTIEFORCBMSUFCSUxJVElFUzsgV0FJVkVSIEFORCBJTkRFTU5JRklDQVRJT04KK0EuIE5vIFdhcnJhbnR5OiBUSEUgU1VCSkVDVCBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VELCBJTVBMSUVELCBPUiBTVEFUVVRPUlksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBBTlkgV0FSUkFOVFkgVEhBVCBUSEUgU1VCSkVDVCBTT0ZUV0FSRSBXSUxMIENPTkZPUk0gVE8gU1BFQ0lGSUNBVElPTlMsIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgRlJFRURPTSBGUk9NIElORlJJTkdFTUVOVCwgQU5ZIFdBUlJBTlRZIFRIQVQgVEhFIFNVQkpFQ1QgU09GVFdBUkUgV0lMTCBCRSBFUlJPUiBGUkVFLCBPUiBBTlkgV0FSUkFOVFkgVEhBVCBET0NVTUVOVEFUSU9OLCBJRiBQUk9WSURFRCwgV0lMTCBDT05GT1JNIFRPIFRIRSBTVUJKRUNUIFNPRlRXQVJFLiBUSElTIEFHUkVFTUVOVCBET0VTIE5PVCwgSU4gQU5ZIE1BTk5FUiwgQ09OU1RJVFVURSBBTiBFTkRPUlNFTUVOVCBCWSBHT1ZFUk5NRU5UIEFHRU5DWSBPUiBBTlkgUFJJT1IgUkVDSVBJRU5UIE9GIEFOWSBSRVNVTFRTLCBSRVNVTFRJTkcgREVTSUdOUywgSEFSRFdBUkUsIFNPRlRXQVJFIFBST0RVQ1RTIE9SIEFOWSBPVEhFUiBBUFBMSUNBVElPTlMgUkVTVUxUSU5HIEZST00gVVNFIE9GIFRIRSBTVUJKRUNUIFNPRlRXQVJFLiBGVVJUSEVSLCBHT1ZFUk5NRU5UIEFHRU5DWSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgQU5EIExJQUJJTElUSUVTIFJFR0FSRElORyBUSElSRC1QQVJUWSBTT0ZUV0FSRSwgSUYgUFJFU0VOVCBJTiBUSEUgT1JJR0lOQUwgU09GVFdBUkUsIEFORCBESVNUUklCVVRFUyBJVCAiQVMgSVMuIgorCitCLiBXYWl2ZXIgYW5kIEluZGVtbml0eTogUkVDSVBJRU5UIEFHUkVFUyBUTyBXQUlWRSBBTlkgQU5EIEFMTCBDTEFJTVMgQUdBSU5TVCBUSEUgVU5JVEVEIFNUQVRFUyBHT1ZFUk5NRU5ULCBJVFMgQ09OVFJBQ1RPUlMgQU5EIFNVQkNPTlRSQUNUT1JTLCBBUyBXRUxMIEFTIEFOWSBQUklPUiBSRUNJUElFTlQuIElGIFJFQ0lQSUVOVGBTIFVTRSBPRiBUSEUgU1VCSkVDVCBTT0ZUV0FSRSBSRVNVTFRTIElOIEFOWSBMSUFCSUxJVElFUywgREVNQU5EUywgREFNQUdFUywgRVhQRU5TRVMgT1IgTE9TU0VTIEFSSVNJTkcgRlJPTSBTVUNIIFVTRSwgSU5DTFVESU5HIEFOWSBEQU1BR0VTIEZST00gUFJPRFVDVFMgQkFTRUQgT04sIE9SIFJFU1VMVElORyBGUk9NLCBSRUNJUElFTlRgUyBVU0UgT0YgVEhFIFNVQkpFQ1QgU09GVFdBUkUsIFJFQ0lQSUVOVCBTSEFMTCBJTkRFTU5JRlkgQU5EIEhPTEQgSEFSTUxFU1MgVEhFIFVOSVRFRCBTVEFURVMgR09WRVJOTUVOVCwgSVRTIENPTlRSQUNUT1JTIEFORCBTVUJDT05UUkFDVE9SUywgQVMgV0VMTCBBUyBBTlkgUFJJT1IgUkVDSVBJRU5ULCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBMQVcuIFJFQ0lQSUVOVGBTIFNPTEUgUkVNRURZIEZPUiBBTlkgU1VDSCBNQVRURVIgU0hBTEwgQkUgVEhFIElNTUVESUFURSwgVU5JTEFURVJBTCBURVJNSU5BVElPTiBPRiBUSElTIEFHUkVFTUVOVC4KKworR0VORVJBTCBURVJNUworQS4gVGVybWluYXRpb246IFRoaXMgQWdyZWVtZW50IGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgYSBSZWNpcGllbnQgZmFpbHMgdG8gY29tcGx5IHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGFuZCBmYWlscyB0byBjdXJlIHN1Y2ggbm9uY29tcGxpYW5jZSB3aXRoaW4gdGhpcnR5ICgzMCkgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIFVwb24gdGVybWluYXRpb24sIGEgUmVjaXBpZW50IGFncmVlcyB0byBpbW1lZGlhdGVseSBjZWFzZSB1c2UgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZS4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBTdWJqZWN0IFNvZnR3YXJlIHByb3Blcmx5IGdyYW50ZWQgYnkgdGhlIGJyZWFjaGluZyBSZWNpcGllbnQgc2hhbGwgc3Vydml2ZSBhbnkgc3VjaCB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4KKworQi4gU2V2ZXJhYmlsaXR5OiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK0MuIEFwcGxpY2FibGUgTGF3OiBUaGlzIEFncmVlbWVudCBzaGFsbCBiZSBzdWJqZWN0IHRvIFVuaXRlZCBTdGF0ZXMgZmVkZXJhbCBsYXcgb25seSBmb3IgYWxsIHB1cnBvc2VzLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgZGV0ZXJtaW5pbmcgdGhlIHZhbGlkaXR5IG9mIHRoaXMgQWdyZWVtZW50LCB0aGUgbWVhbmluZyBvZiBpdHMgcHJvdmlzaW9ucyBhbmQgdGhlIHJpZ2h0cywgb2JsaWdhdGlvbnMgYW5kIHJlbWVkaWVzIG9mIHRoZSBwYXJ0aWVzLgorCitELiBFbnRpcmUgVW5kZXJzdGFuZGluZzogVGhpcyBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSB1bmRlcnN0YW5kaW5nIGFuZCBhZ3JlZW1lbnQgb2YgdGhlIHBhcnRpZXMgcmVsYXRpbmcgdG8gcmVsZWFzZSBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSBhbmQgbWF5IG5vdCBiZSBzdXBlcnNlZGVkLCBtb2RpZmllZCBvciBhbWVuZGVkIGV4Y2VwdCBieSBmdXJ0aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGR1bHkgZXhlY3V0ZWQgYnkgdGhlIHBhcnRpZXMuCisKK0UuIEJpbmRpbmcgQXV0aG9yaXR5OiBCeSBhY2NlcHRpbmcgYW5kIHVzaW5nIHRoZSBTdWJqZWN0IFNvZnR3YXJlIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhIFJlY2lwaWVudCBhZmZpcm1zIGl0cyBhdXRob3JpdHkgdG8gYmluZCB0aGUgUmVjaXBpZW50IHRvIGFsbCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgdGhhdCB0aGF0IFJlY2lwaWVudCBoZXJlYnkgYWdyZWVzIHRvIGFsbCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBoZXJlaW4uCisKK0YuIFBvaW50IG9mIENvbnRhY3Q6IEFueSBSZWNpcGllbnQgY29udGFjdCB3aXRoIEdvdmVybm1lbnQgQWdlbmN5IGlzIHRvIGJlIGRpcmVjdGVkIHRvIHRoZSBkZXNpZ25hdGVkIHJlcHJlc2VudGF0aXZlIGFzIGZvbGxvd3M6IF9fX19fX19fX19fLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05DU0EgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05DU0EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBkZGM5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTkNTQQpAQCAtMCwwICsxLDM0IEBACisKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMvTkNTQSBPcGVuIFNvdXJjZSBMaWNlbnNlCitDb3B5cmlnaHQgKGMpIDxZZWFyPiA8T3duZXIgT3JnYW5pemF0aW9uIE5hbWU+IAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworRGV2ZWxvcGVkIGJ5OiAgIDxOYW1lIG9mIERldmVsb3BtZW50IEdyb3VwPgorICAgICAgICAgICAgICAgICAgICAgICA8TmFtZSBvZiBJbnN0aXR1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxVUkwgZm9yIERldmVsb3BtZW50IEdyb3VwL0luc3RpdHV0aW9uPgorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKK2NvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyJTb2Z0d2FyZSIpLCB0byBkZWFsIHdpdGggdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCitwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycworaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorZGlzdHJpYnV0aW9uLgorTmVpdGhlciB0aGUgbmFtZXMgb2YgPE5hbWUgb2YgRGV2ZWxvcG1lbnQgR3JvdXAsIE5hbWUgb2YKK0luc3RpdHV0aW9uPiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UKK29yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgord3JpdHRlbiBwZXJtaXNzaW9uLgorVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKK09SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT05UUklCVVRPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUgorQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCitUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBXSVRIIFRIRSBTT0ZUV0FSRS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OR1BMIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OR1BMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOTZlYWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05HUEwKQEAgLTAsMCArMSw0NSBAQAorCisKK05FVEhBQ0sgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCisoQ29weXJpZ2h0IDE5ODkgTS4gU3RlcGhlbnNvbikgCisoQmFzZWQgb24gdGhlIEJJU09OIGdlbmVyYWwgcHVibGljIGxpY2Vuc2UsIGNvcHlyaWdodCAxOTg4IFJpY2hhcmQgTS4gU3RhbGxtYW4pCisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4gWW91IGNhbiBhbHNvIHVzZSB0aGlzIHdvcmRpbmcgdG8gbWFrZSB0aGUgdGVybXMgZm9yIG90aGVyIHByb2dyYW1zLgorVGhlIGxpY2Vuc2UgYWdyZWVtZW50cyBvZiBtb3N0IHNvZnR3YXJlIGNvbXBhbmllcyBrZWVwIHlvdSBhdCB0aGUgbWVyY3kgb2YgdGhvc2UgY29tcGFuaWVzLiBCeSBjb250cmFzdCwgb3VyIGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ2l2ZSBldmVyeW9uZSB0aGUgcmlnaHQgdG8gc2hhcmUgTmV0SGFjay4gVG8gbWFrZSBzdXJlIHRoYXQgeW91IGdldCB0aGUgcmlnaHRzIHdlIHdhbnQgeW91IHRvIGhhdmUsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBIZW5jZSB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50LgorCitTcGVjaWZpY2FsbHksIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHJpZ2h0IHRvIGdpdmUgYXdheSBjb3BpZXMgb2YgTmV0SGFjaywgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBlbHNlIGNhbiBnZXQgaXQgaWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgTmV0SGFjayBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworVG8gbWFrZSBzdXJlIHRoYXQgZXZlcnlvbmUgaGFzIHN1Y2ggcmlnaHRzLCB3ZSBoYXZlIHRvIGZvcmJpZCB5b3UgdG8gZGVwcml2ZSBhbnlvbmUgZWxzZSBvZiB0aGVzZSByaWdodHMuIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgTmV0SGFjaywgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdSBoYXZlLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIEFuZCB5b3UgbXVzdCB0ZWxsIHRoZW0gdGhlaXIgcmlnaHRzLgorCitBbHNvLCBmb3Igb3VyIG93biBwcm90ZWN0aW9uLCB3ZSBtdXN0IG1ha2UgY2VydGFpbiB0aGF0IGV2ZXJ5b25lIGZpbmRzIG91dCB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciBOZXRIYWNrLiBJZiBOZXRIYWNrIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3Qgd2hhdCB3ZSBkaXN0cmlidXRlZC4KKworVGhlcmVmb3JlIHdlIChNaWtlIFN0ZXBoZW5zb24gYW5kIG90aGVyIGhvbGRlcnMgb2YgTmV0SGFjayBjb3B5cmlnaHRzKSBtYWtlIHRoZSBmb2xsb3dpbmcgdGVybXMgd2hpY2ggc2F5IHdoYXQgeW91IG11c3QgZG8gdG8gYmUgYWxsb3dlZCB0byBkaXN0cmlidXRlIG9yIGNoYW5nZSBOZXRIYWNrLgorCitDT1BZSU5HIFBPTElDSUVTCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgTmV0SGFjayBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3Uga2VlcCBpbnRhY3QgdGhlIG5vdGljZXMgb24gYWxsIGZpbGVzIHRoYXQgcmVmZXIgdG8gY29weXJpZ2h0cywgdG8gdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIE5ldEhhY2sgcHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCBhbG9uZyB3aXRoIHRoZSBwcm9ncmFtLgorWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiBOZXRIYWNrIG9yIGFueSBwb3J0aW9uIG9mIGl0LCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgdW5kZXIgdGhlIHRlcm1zIG9mIFBhcmFncmFwaCAxIGFib3ZlIChpbmNsdWRpbmcgZGlzdHJpYnV0aW5nIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQpLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIHRoZSBmb2xsb3dpbmc6CithKSBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZTsgYW5kCisKK2IpIGNhdXNlIHRoZSB3aG9sZSBvZiBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4gd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBhIGRlcml2YXRpdmUgb2YgTmV0SGFjayBvciBhbnkgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgb24gdGVybXMgaWRlbnRpY2FsIHRvIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IChleGNlcHQgdGhhdCB5b3UgbWF5IGNob29zZSB0byBncmFudCBtb3JlIGV4dGVuc2l2ZSB3YXJyYW50eSBwcm90ZWN0aW9uIHRvIHNvbWUgb3IgYWxsIHRoaXJkIHBhcnRpZXMsIGF0IHlvdXIgb3B0aW9uKQorCitjKSBZb3UgbWF5IGNoYXJnZSBhIGRpc3RyaWJ1dGlvbiBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBOZXRIYWNrIChvciBhIHBvcnRpb24gb3IgZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgUGFyYWdyYXBoIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CithKSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlOyBvciwKKworYikgYWNjb21wYW55IGl0IHdpdGggZnVsbCBpbmZvcm1hdGlvbiBhcyB0byBob3cgdG8gb2J0YWluIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZyb20gYW4gYXBwcm9wcmlhdGUgYXJjaGl2ZSBzaXRlLiAoVGhpcyBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uLikKKworRm9yIHRoZXNlIHB1cnBvc2VzLCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBlaXRoZXIgdGhlIGZ1bGwgc291cmNlIGRpc3RyaWJ1dGlvbiBhcyBvcmlnaW5hbGx5IHJlbGVhc2VkIG92ZXIgVXNlbmV0IG9yIHVwZGF0ZWQgY29waWVzIG9mIHRoZSBmaWxlcyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZS4KKworWW91IG1heSBub3QgY29weSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciBOZXRIYWNrIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgTmV0SGFjayBpcyB2b2lkIGFuZCB5b3VyIHJpZ2h0cyB0byB1c2UgdGhlIHByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIGFncmVlbWVudCBzaGFsbCBiZSBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZWQuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29tcHV0ZXIgc29mdHdhcmUgcHJvZ3JhbXMgZnJvbSB5b3Ugd2l0aCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorU3RhdGVkIHBsYWlubHk6IFlvdSBhcmUgcGVybWl0dGVkIHRvIG1vZGlmeSBOZXRIYWNrLCBvciBvdGhlcndpc2UgdXNlIHBhcnRzIG9mIE5ldEhhY2ssIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoIHRoZSBjb25kaXRpb25zIHNwZWNpZmllZCBhYm92ZTsgaW4gcGFydGljdWxhciwgeW91ciBtb2RpZmllZCBOZXRIYWNrIG9yIHByb2dyYW0gY29udGFpbmluZyBwYXJ0cyBvZiBOZXRIYWNrIG11c3QgcmVtYWluIGZyZWVseSBhdmFpbGFibGUgYXMgcHJvdmlkZWQgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gSW4gb3RoZXIgd29yZHMsIGdvIGFoZWFkIGFuZCBzaGFyZSBOZXRIYWNrLCBidXQgZG9uYHQgdHJ5IHRvIHN0b3AgYW55b25lIGVsc2UgZnJvbSBzaGFyaW5nIGl0IGZhcnRoZXIuIAorWyAgSG9tZSAgfCAgVmVyc2lvbiAzLjQuMyAgfCAgQ29udGFjdCBVcyAgXQorCisKKworSG9zdGVkIGJ5OiAgICAgICAKK05ldEhhY2sgaXMgQ29weXJpZ2h0IDE5ODUtMjAwMyBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0gYW5kIE0uIFN0ZXBoZW5zb24uIFNlZSBvdXIgbGljZW5zZSBmb3IgZGV0YWlscy4KK1RoaXMgc2l0ZSBpcyBDb3B5cmlnaHQgMTk5OS0yMDA5IGJ5IEtlbm5ldGggTG9yYmVyLCBLZW5zaW5ndG9uLCBNYXJ5bGFuZC4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OUE9TTC0zLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05QT1NMLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTJhNjYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OUE9TTC0zLjAKQEAgLTAsMCArMSw2MSBAQAorCitOb24tUHJvZml0IE9wZW4gU29mdHdhcmUgTGljZW5zZSAoIk5vbi1Qcm9maXQgT1NMIikgMy4wCisKK1RoaXMgTm9uLVByb2ZpdCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKCJOb24tUHJvZml0IE9TTCIpIHZlcnNpb24gMy4wICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIGxpY2Vuc2luZyBub3RpY2UgYWRqYWNlbnQgdG8gdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOgorCitMaWNlbnNlZCB1bmRlciB0aGUgTm9uLVByb2ZpdCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgdmVyc2lvbiAzLjAKKworMSkgR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIExpY2Vuc29yIGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgc3VibGljZW5zYWJsZSBsaWNlbnNlLCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjb3B5cmlnaHQsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXMsIGVpdGhlciBhbG9uZSBvciBhcyBwYXJ0IG9mIGEgY29sbGVjdGl2ZSB3b3JrOworCitiKSB0byB0cmFuc2xhdGUsIGFkYXB0LCBhbHRlciwgdHJhbnNmb3JtLCBtb2RpZnksIG9yIGFycmFuZ2UgdGhlIE9yaWdpbmFsIFdvcmssIHRoZXJlYnkgY3JlYXRpbmcgZGVyaXZhdGl2ZSB3b3JrcyAoIkRlcml2YXRpdmUgV29ya3MiKSBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrOworCitjKSB0byBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0byB0aGUgcHVibGljLCB3aXRoIHRoZSBwcm92aXNvIHRoYXQgY29waWVzIG9mIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHNoYWxsIGJlIGxpY2Vuc2VkIHVuZGVyIHRoaXMgTm9uLVByb2ZpdCBPcGVuIFNvZnR3YXJlIExpY2Vuc2Ugb3IgYXMgcHJvdmlkZWQgaW4gc2VjdGlvbiAxNyhkKTsKKworZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kCisKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuCisKKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1YmxpY2Vuc2FibGUgbGljZW5zZSwgdW5kZXIgcGF0ZW50IGNsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBMaWNlbnNvciB0aGF0IGFyZSBlbWJvZGllZCBpbiB0aGUgT3JpZ2luYWwgV29yayBhcyBmdXJuaXNoZWQgYnkgdGhlIExpY2Vuc29yLCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwYXRlbnRzLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZCBpbXBvcnQgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuCisKKzMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yay4KKworNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3IgcGVybWlzc2lvbiBvZiB0aGUgTGljZW5zb3IuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbiwgbm90aGluZyBpbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIGFueSBsaWNlbnNlIHRvIExpY2Vuc29yYHMgdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5LiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgb3IgaW1wb3J0IGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gbGljZW5zZSBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKworNSkgRXh0ZXJuYWwgRGVwbG95bWVudC4gVGhlIHRlcm0gIkV4dGVybmFsIERlcGxveW1lbnQiIG1lYW5zIHRoZSB1c2UsIGRpc3RyaWJ1dGlvbiwgb3IgY29tbXVuaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGluIGFueSB3YXkgc3VjaCB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgbWF5IGJlIHVzZWQgYnkgYW55b25lIG90aGVyIHRoYW4gWW91LCB3aGV0aGVyIHRob3NlIHdvcmtzIGFyZSBkaXN0cmlidXRlZCBvciBjb21tdW5pY2F0ZWQgdG8gdGhvc2UgcGVyc29ucyBvciBtYWRlIGF2YWlsYWJsZSBhcyBhbiBhcHBsaWNhdGlvbiBpbnRlbmRlZCBmb3IgdXNlIG92ZXIgYSBuZXR3b3JrLiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlIGhlcmV1bmRlciwgWW91IG11c3QgdHJlYXQgYW55IEV4dGVybmFsIERlcGxveW1lbnQgYnkgWW91IG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrIGFzIGEgZGlzdHJpYnV0aW9uIHVuZGVyIHNlY3Rpb24gMShjKS4KKworNikgQXR0cmlidXRpb24gUmlnaHRzLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gIkF0dHJpYnV0aW9uIE5vdGljZS4iIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay4KKworNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBub24taW5mcmluZ2VtZW50LCBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byB0aGUgT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZSBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLgorCis4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnlvbmUgZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLiBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBzdWNoIGxpbWl0YXRpb24uCisKKzkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiwgYXQgYW55IHRpbWUsIFlvdSBleHByZXNzbHkgYXNzZW50ZWQgdG8gdGhpcyBMaWNlbnNlLCB0aGF0IGFzc2VudCBpbmRpY2F0ZXMgeW91ciBjbGVhciBhbmQgaXJyZXZvY2FibGUgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElmIFlvdSBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBhIERlcml2YXRpdmUgV29yaywgWW91IG11c3QgbWFrZSBhIHJlYXNvbmFibGUgZWZmb3J0IHVuZGVyIHRoZSBjaXJjdW1zdGFuY2VzIHRvIG9idGFpbiB0aGUgZXhwcmVzcyBhc3NlbnQgb2YgcmVjaXBpZW50cyB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBUaGlzIExpY2Vuc2UgY29uZGl0aW9ucyB5b3VyIHJpZ2h0cyB0byB1bmRlcnRha2UgdGhlIGFjdGl2aXRpZXMgbGlzdGVkIGluIFNlY3Rpb24gMSwgaW5jbHVkaW5nIHlvdXIgcmlnaHQgdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGRvaW5nIHNvIHdpdGhvdXQgaG9ub3JpbmcgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgaXMgcHJvaGliaXRlZCBieSBjb3B5cmlnaHQgbGF3IGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gYWZmZWN0IGNvcHlyaWdodCBleGNlcHRpb25zIGFuZCBsaW1pdGF0aW9ucyAoaW5jbHVkaW5nICJmYWlyIHVzZSIgb3IgImZhaXIgZGVhbGluZyIpLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgdXBvbiB5b3VyIGZhaWx1cmUgdG8gaG9ub3IgdGhlIGNvbmRpdGlvbnMgaW4gU2VjdGlvbiAxKGMpLgorCisxMCkgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSwgYWdhaW5zdCBMaWNlbnNvciBvciBhbnkgbGljZW5zZWUgYWxsZWdpbmcgdGhhdCB0aGUgT3JpZ2luYWwgV29yayBpbmZyaW5nZXMgYSBwYXRlbnQuIFRoaXMgdGVybWluYXRpb24gcHJvdmlzaW9uIHNoYWxsIG5vdCBhcHBseSBmb3IgYW4gYWN0aW9uIGFsbGVnaW5nIHBhdGVudCBpbmZyaW5nZW1lbnQgYnkgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuCisKKzExKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBBbnkgYWN0aW9uIG9yIHN1aXQgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlIG9yIGFmdGVyIGl0cyB0ZXJtaW5hdGlvbiBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiBjb3B5cmlnaHQgb3IgcGF0ZW50IGxhdyBpbiB0aGUgYXBwcm9wcmlhdGUganVyaXNkaWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCisxMikgQXR0b3JuZXlzYCBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzEzKSBNaXNjZWxsYW5lb3VzLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4KKworMTQpIERlZmluaXRpb24gb2YgIllvdSIgaW4gVGhpcyBMaWNlbnNlLiAiWW91IiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMTUpIFJpZ2h0IHRvIFVzZS4gWW91IG1heSB1c2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gYWxsIHdheXMgbm90IG90aGVyd2lzZSByZXN0cmljdGVkIG9yIGNvbmRpdGlvbmVkIGJ5IHRoaXMgTGljZW5zZSBvciBieSBsYXcsIGFuZCBMaWNlbnNvciBwcm9taXNlcyBub3QgdG8gaW50ZXJmZXJlIHdpdGggb3IgYmUgcmVzcG9uc2libGUgZm9yIHN1Y2ggdXNlcyBieSBZb3UuCisKKzE2KSBNb2RpZmljYXRpb24gb2YgVGhpcyBMaWNlbnNlLiBUaGlzIExpY2Vuc2UgaXMgQ29weXJpZ2h0ICYjMTY5OyAyMDA1IExhd3JlbmNlIFJvc2VuLiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSwgb3IgY29tbXVuaWNhdGUgdGhpcyBMaWNlbnNlIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBwZXJtaXRzIFlvdSB0byBtb2RpZnkgdGhpcyBMaWNlbnNlIGFzIGFwcGxpZWQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gRGVyaXZhdGl2ZSBXb3Jrcy4gSG93ZXZlciwgWW91IG1heSBtb2RpZnkgdGhlIHRleHQgb2YgdGhpcyBMaWNlbnNlIGFuZCBjb3B5LCBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiAodGhlICJNb2RpZmllZCBMaWNlbnNlIikgYW5kIGFwcGx5IGl0IHRvIG90aGVyIG9yaWdpbmFsIHdvcmtzIG9mIGF1dGhvcnNoaXAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IChpKSBZb3UgbWF5IG5vdCBpbmRpY2F0ZSBpbiBhbnkgd2F5IHRoYXQgeW91ciBNb2RpZmllZCBMaWNlbnNlIGlzIHRoZSAiT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIiBvciAiT1NMIiBhbmQgeW91IG1heSBub3QgdXNlIHRob3NlIG5hbWVzIGluIHRoZSBuYW1lIG9mIHlvdXIgTW9kaWZpZWQgTGljZW5zZTsgKGlpKSBZb3UgbXVzdCByZXBsYWNlIHRoZSBub3RpY2Ugc3BlY2lmaWVkIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGggYWJvdmUgd2l0aCB0aGUgbm90aWNlICJMaWNlbnNlZCB1bmRlciA8aW5zZXJ0IHlvdXIgbGljZW5zZSBuYW1lIGhlcmU+IiBvciB3aXRoIGEgbm90aWNlIG9mIHlvdXIgb3duIHRoYXQgaXMgbm90IGNvbmZ1c2luZ2x5IHNpbWlsYXIgdG8gdGhlIG5vdGljZSBpbiB0aGlzIExpY2Vuc2U7IGFuZCAoaWlpKSBZb3UgbWF5IG5vdCBjbGFpbSB0aGF0IHlvdXIgb3JpZ2luYWwgd29ya3MgYXJlIG9wZW4gc291cmNlIHNvZnR3YXJlIHVubGVzcyB5b3VyIE1vZGlmaWVkIExpY2Vuc2UgaGFzIGJlZW4gYXBwcm92ZWQgYnkgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSAoT1NJKSBhbmQgWW91IGNvbXBseSB3aXRoIGl0cyBsaWNlbnNlIHJldmlldyBhbmQgY2VydGlmaWNhdGlvbiBwcm9jZXNzLgorCisxNykgTm9uLVByb2ZpdCBBbWVuZG1lbnQuIFRoZSBuYW1lIG9mIHRoaXMgYW1lbmRlZCB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKCJPU0wgMy4wIikgaXMgIk5vbi1Qcm9maXQgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIDMuMCIuIFRoZSBvcmlnaW5hbCBPU0wgMy4wIGxpY2Vuc2UgaGFzIGJlZW4gYW1lbmRlZCBhcyBmb2xsb3dzOgorCisoYSkgTGljZW5zb3IgcmVwcmVzZW50cyBhbmQgZGVjbGFyZXMgdGhhdCBpdCBpcyBhIG5vdC1mb3ItcHJvZml0IG9yZ2FuaXphdGlvbiB0aGF0IGRlcml2ZXMgbm8gcmV2ZW51ZSB3aGF0c29ldmVyIGZyb20gdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIG9yIGZyb20gc3VwcG9ydCBvciBzZXJ2aWNlcyByZWxhdGluZyB0aGVyZXRvLgorCisoYikgVGhlIGZpcnN0IHNlbnRlbmNlIG9mIFNlY3Rpb24gNyBbIldhcnJhbnR5IG9mIFByb3ZlbmFuY2UiXSBvZiBPU0wgMy4wIGhhcyBiZWVuIHN0cmlja2VuLiBGb3IgT3JpZ2luYWwgV29ya3MgbGljZW5zZWQgdW5kZXIgdGhpcyBOb24tUHJvZml0IE9TTCAzLjAsIExJQ0VOU09SIE9GRkVSUyBOTyBXQVJSQU5USUVTIFdIQVRTT0VWRVIuCisKKyhjKSBJbiB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgU2VjdGlvbiA4IFsiTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkiXSBvZiB0aGlzIE5vbi1Qcm9maXQgT1NMIDMuMCwgdGhlIGxpc3Qgb2YgZGFtYWdlcyBmb3Igd2hpY2ggTElBQklMSVRZIElTIExJTUlURUQgbm93IGluY2x1ZGVzICJkaXJlY3QiIGRhbWFnZXMuCisKKyhkKSBUaGUgcHJvdmlzbyBpbiBTZWN0aW9uIDEoYykgb2YgdGhpcyBMaWNlbnNlIG5vdyByZWZlcnMgdG8gdGhpcyAiTm9uLVByb2ZpdCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UiIHJhdGhlciB0aGFuIHRoZSAiT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIi4gWW91IG1heSBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiB1bmRlciB0aGlzIE5vbi1Qcm9maXQgT1NMIDMuMCBsaWNlbnNlIG9ubHkgaWYgWW91IG1ha2UgdGhlIHJlcHJlc2VudGF0aW9uIGFuZCBkZWNsYXJhdGlvbiBpbiBwYXJhZ3JhcGggKGEpIG9mIHRoaXMgU2VjdGlvbiAxNy4gT3RoZXJ3aXNlLCBZb3Ugc2hhbGwgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2Ygb25seSB1bmRlciB0aGUgT1NMIDMuMCBsaWNlbnNlIGFuZCBZb3Ugc2hhbGwgcHVibGlzaCBjbGVhciBsaWNlbnNpbmcgbm90aWNlcyBzbyBzdGF0aW5nLiBBbHNvIGJ5IHdheSBvZiBjbGFyaWZpY2F0aW9uLCB0aGlzIExpY2Vuc2UgZG9lcyBub3QgYXV0aG9yaXplIFlvdSB0byBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHdvcmtzIHVuZGVyIHRoaXMgTm9uLVByb2ZpdCBPU0wgMy4wIGlmIFlvdSByZWNlaXZlZCB0aGVtIHVuZGVyIHRoZSBvcmlnaW5hbCBPU0wgMy4wIGxpY2Vuc2UuCisKKyhlKSBPcmlnaW5hbCBXb3JrcyBsaWNlbnNlZCB1bmRlciB0aGlzIGxpY2Vuc2Ugc2hhbGwgcmVmZXJlbmNlICJOb24tUHJvZml0IE9TTCAzLjAiIGluIGxpY2Vuc2luZyBub3RpY2VzIHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSB3b3JrcyBsaWNlbnNlZCB1bmRlciB0aGUgb3JpZ2luYWwgT1NMIDMuMCBsaWNlbnNlLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05UUCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTlRQCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNTcyYjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05UUApAQCAtMCwwICsxLDcgQEAKKworTlRQIExpY2Vuc2UgKE5UUCkKKworQ29weXJpZ2h0IChjKSAoQ29weXJpZ2h0SG9sZGVyc05hbWUpIChGcm9tIDQtZGlnaXQteWVhciktKFRvIDQtZGlnaXQteWVhcikKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgKFRyYWRlbWFya2VkTmFtZSkgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIChUcmFkZW1hcmtlZE5hbWUpIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTmF1bWFuIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OYXVtYW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjljZTc4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTmF1bWFuCkBAIC0wLDAgKzEsNTAgQEAKKworTkFVTUVOIFB1YmxpYyBMaWNlbnNlCitUaGlzIHNvZnR3YXJlIGlzIENvcHlyaWdodCAoYykgTkFVTUVOICh0bSkgYW5kIENvbnRyaWJ1dG9ycy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKK3dpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKK2Rpc2NsYWltZXIuCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCitwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKzMuIFRoZSBuYW1lIE5BVU1FTiAodG0pIG11c3Qgbm90IGJlIHVzZWQgdG8KK2VuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yCit3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOQVVNRU4uCisKKzQuIFRoZSByaWdodCB0byBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgb3IgdG8gdXNlIGl0IGZvciBhbnkKK3B1cnBvc2UgZG9lcyBub3QgZ2l2ZSB5b3UgdGhlIHJpZ2h0IHRvIHVzZSBTZXJ2aWNlbWFya3MgKHNtKQorb3IgVHJhZGVtYXJrcyAodG0pIG9mIE5BVU1FTi4KKworNS4gSWYgYW55IGZpbGVzIG9yaWdpbmF0aW5nIGZyb20gTkFVTUVOIG9yIENvbnRyaWJ1dG9ycyBhcmUgbW9kaWZpZWQsIHlvdSBtdXN0CitjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZwordGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKK0Rpc2NsYWltZXI6CisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkFVTUVOICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTRUQKK09SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBOQVVNRU4KK09SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUKK0dPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCitUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRS4KKworVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiBjb250cmlidXRpb25zIG1hZGUgYnkgTkFVTUVOCithbmQgQ29udHJpYnV0b3JzLiBTcGVjaWZpYyBhdHRyaWJ1dGlvbnMgYXJlIGxpc3RlZCBpbiB0aGUKK2FjY29tcGFueWluZyBjcmVkaXRzIGZpbGUuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTm9raWEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05va2lhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMzc3MTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05va2lhCkBAIC0wLDAgKzEsNDIzIEBACisKK05va2lhIE9wZW4gU291cmNlIExpY2Vuc2UgKE5PS09TCitMaWNlbnNlKSBWZXJzaW9uIDEuMGEKKyAxLiBERUZJTklUSU9OUy4KKworIkFmZmlsaWF0ZXMiIG9mIGEgcGFydHkgc2hhbGwgbWVhbiBhbiBlbnRpdHkKKworYSkgd2hpY2ggaXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjb250cm9sbGluZyBzdWNoIHBhcnR5OworCitiKSB3aGljaCBpcyB1bmRlciB0aGUgc2FtZSBkaXJlY3Qgb3IgaW5kaXJlY3Qgb3duZXJzaGlwIG9yIGNvbnRyb2wKK2FzIHN1Y2ggcGFydHk7IG9yCisKK2MpIHdoaWNoIGlzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgb3duZWQgb3IgY29udHJvbGxlZCBieSBzdWNoIHBhcnR5LgorCitGb3IgdGhlc2UgcHVycG9zZXMsIGFuIGVudGl0eSBzaGFsbCBiZSB0cmVhdGVkIGFzIGJlaW5nIGNvbnRyb2xsZWQKK2J5IGFub3RoZXIgaWYgdGhhdCBvdGhlciBlbnRpdHkgaGFzIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKK3ZvdGVzIGluIHN1Y2ggZW50aXR5LCBpcyBhYmxlIHRvIGRpcmVjdCBpdHMgYWZmYWlycyBhbmQvb3IgdG8gY29udHJvbCB0aGUKK2NvbXBvc2l0aW9uIG9mIGl0cyBib2FyZCBvZiBkaXJlY3RvcnMgb3IgZXF1aXZhbGVudCBib2R5LgorCisiQ29tbWVyY2lhbCBVc2UiIHNoYWxsIG1lYW4gZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcKK3RoZSBDb3ZlcmVkIFNvZnR3YXJlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LgorCitgYENvbnRyaWJ1dG9yYGAgc2hhbGwgbWVhbiBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMKK3RvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCitgYENvbnRyaWJ1dG9yIFZlcnNpb25gYCBzaGFsbCBtZWFuIGluIGNhc2Ugb2YgYW55IENvbnRyaWJ1dG9yCit0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYQorQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvciAKK2FuZCBpbiBjYXNlIG9mIE5va2lhIGluIGFkZGl0aW9uIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBpbiBhbnkgZm9ybSwgaW5jbHVkaW5nCit0aGUgZm9ybSBhcyBFeGNldXRhYmxlLgorCitgYENvdmVyZWQgU29mdHdhcmVgYCBzaGFsbCBtZWFuIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBNb2RpZmljYXRpb25zCitvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoCitjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCitgYEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbWBgIHNoYWxsIG1lYW4gYSBtZWNoYW5pc20KK2dlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYwordHJhbnNmZXIgb2YgZGF0YS4KKworYGBFeGVjdXRhYmxlYGAgc2hhbGwgbWVhbiBDb3ZlcmVkIFNvZnR3YXJlIGluIGFueSBmb3JtIG90aGVyCit0aGFuIFNvdXJjZSBDb2RlLgorCitgYE5va2lhYGAgc2hhbGwgbWVhbiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQgaXRzIEFmZmlsaWF0ZXMuCisKK2BgTGFyZ2VyIFdvcmtgYCBzaGFsbCBtZWFuIGEgd29yaywgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBTb2Z0d2FyZQorb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKK2BgTGljZW5zZWBgIHNoYWxsIG1lYW4gdGhpcyBkb2N1bWVudC4KKworIkxpY2Vuc2FibGUiIHNoYWxsIG1lYW4gaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0KK2V4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkKK2FjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworYGBNb2RpZmljYXRpb25zYGAgc2hhbGwgbWVhbiBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbQordGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBhbnkgcHJldmlvdXMKK01vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBTb2Z0d2FyZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywKK2EgTW9kaWZpY2F0aW9uIGlzOgorCithKSBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcKK09yaWdpbmFsIFNvZnR3YXJlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKK2IpIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvcgorcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworYGBPcmlnaW5hbCBTb2Z0d2FyZWBgIHNoYWxsIG1lYW4gdGhlIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyCitzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5CitFeGhpYml0IEEgYXMgT3JpZ2luYWwgU29mdHdhcmUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIKK3RoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIFNvZnR3YXJlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworIlBhdGVudCBDbGFpbXMiIHNoYWxsIG1lYW4gYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkCitvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kCithcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKworYGBTb3VyY2UgQ29kZWBgIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkCitTb2Z0d2FyZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywKK3BsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sCitjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbAorY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIG9yIGFub3RoZXIgd2VsbCBrbm93biwKK2F2YWlsYWJsZSBDb3ZlcmVkIFNvZnR3YXJlIG9mIHRoZSBDb250cmlidXRvcmBzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlCitjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uCitvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorCisiWW91YGAgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwKK2VudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsCit0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLgorRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91YGAgaW5jbHVkZXMgQWZmaWxpYXRlcyBvZiBzdWNoIGVudGl0eS4KKworMi4gU09VUkNFIENPREUgTElDRU5TRS4KKworMi4xIE5va2lhIEdyYW50LgorCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIE5va2lhIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwKK3JveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbAorcHJvcGVydHkgY2xhaW1zOgorCithKSB1bmRlciBjb3B5cmlnaHRzIExpY2Vuc2FibGUgYnkgTm9raWEgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwKK2Rpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIChvciBwb3J0aW9ucwordGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7CisKK2IpIGFuZCB1bmRlciBQYXRlbnRzIENsYWltcyBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcKK29yIHNlbGxpbmcgb2YgT3JpZ2luYWwgU29mdHdhcmUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwKK2FuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSAob3IKK3BvcnRpb25zIHRoZXJlb2YpLgorCitjKSBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZQorb24gdGhlIGRhdGUgTm9raWEgZmlyc3QgZGlzdHJpYnV0ZXMgT3JpZ2luYWwgU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UuCisKK2QpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDoKKzEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZTsgMikgc2VwYXJhdGUgZnJvbQordGhlIE9yaWdpbmFsIFNvZnR3YXJlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24KK29mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZQord2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLgorCisyLjIgQ29udHJpYnV0b3IgR3JhbnQuCisKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKK25vbi1leGNsdXNpdmUgbGljZW5zZQorCithKSB1bmRlciBjb3B5cmlnaHRzIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksCitkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkKK3N1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoCitvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIFNvZnR3YXJlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7CithbmQKKworYikgdW5kZXIgUGF0ZW50IENsYWltcyBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsCitvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IKK2luIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLAordG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2UKK29mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZAorMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yCitWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KKworYykgVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlIGVmZmVjdGl2ZQorb24gdGhlIGRhdGUgQ29udHJpYnV0b3IgZmlyc3QgbWFrZXMgQ29tbWVyY2lhbCBVc2Ugb2YgdGhlIENvdmVyZWQgU29mdHdhcmUuCisKK2QpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMihiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDoKKzEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247CisyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6CitpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mIENvbnRyaWJ1dG9yIFZlcnNpb24gb3IgaWkpIHRoZSBjb21iaW5hdGlvbgorb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzCitwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zCitpbmZyaW5nZWQgYnkgQ292ZXJlZCBTb2Z0d2FyZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorQ29udHJpYnV0b3IuCisKKzMuIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OUy4KKworMy4xIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCisKKworVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQKK2J5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuCitUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIFNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyCit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkCit1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5Citjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueQordGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlCit2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91CittYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQKK2luIFNlY3Rpb24gMy41LgorCiszLjIgQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZQorbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlcgorb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljCitEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbgorYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwKK211c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0Citpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50Cit2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaAorcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbgorcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQKK2J5IGEgdGhpcmQgcGFydHkuCisKKzMuMyBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBTb2Z0d2FyZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluCithIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBTb2Z0d2FyZQorYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQKK3RoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBTb2Z0d2FyZQorcHJvdmlkZWQgYnkgTm9raWEgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiBOb2tpYSBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLAorYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24KK2luIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4KKworMy40ICBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHlgcyBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvcgordW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlCitTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTGBgIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kCit0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdword2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24KK2lzIG1hZGUgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkKK21vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyCithbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cworb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQKK1NvZnR3YXJlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKworKGIpIENvbnRyaWJ1dG9yIEFQSXMuCisKK0lmIENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZQorYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeQordG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluCit0aGUgTEVHQUwgZmlsZS4KKworKGMpIFJlcHJlc2VudGF0aW9ucy4KKworQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24KKzMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgYXJlCitDb250cmlidXRvcmBzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMKK3RvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjUgUmVxdWlyZWQgTm90aWNlcy4KKworWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlCitDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZQorZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24KKyhzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yCitzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91cgorbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbworZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdQorZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIG9yIG93bmVyc2hpcCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBTb2Z0d2FyZS4KK1lvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eQorb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBTb2Z0d2FyZS4KK0hvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIE5va2lhCitvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSBzdWNoIHdhcnJhbnR5LAorc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQKK1lvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IE5va2lhIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eQoraW5jdXJyZWQgYnkgTm9raWEgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwKK2luZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYgRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIFNvZnR3YXJlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZQorcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgU29mdHdhcmUsCithbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZQorQ292ZXJlZCBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nCithIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uCiszLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZQordmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgCityaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgU29mdHdhcmUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZQordmVyc2lvbiBvZiBDb3ZlcmVkIFNvZnR3YXJlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIKK2Nob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0CitZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlCitmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcworcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLgorSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdQorbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlCithcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSBOb2tpYSBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUKK3RvIGluZGVtbmlmeSBOb2tpYSBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkKK05va2lhIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjcgTGFyZ2VyIFdvcmtzLgorCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIFNvZnR3YXJlIHdpdGggb3RoZXIKK3NvZnR3YXJlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIKK1dvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzCitvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgU29mdHdhcmUuCisKKzQuIElOQUJJTElUWSBUTyBDT01QTFkgRFVFIFRPIFNUQVRVVEUgT1IgUkVHVUxBVElPTi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgZHVlIHRvIHN0YXR1dGUsCitqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zCitvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucworYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMCitmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zCitvZiB0aGUgU291cmNlIENvZGUuCisKK0V4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uCittdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZQordG8gdW5kZXJzdGFuZCBpdC4KKworNS4gQVBQTElDQVRJT04gT0YgVEhJUyBMSUNFTlNFLgorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIE5va2lhIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlCitpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBTb2Z0d2FyZS4KKworNi4gVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0UuCisKKworNi4xIE5ldyBWZXJzaW9ucy4KKworTm9raWEgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZQordG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworNi4yIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCisKK09uY2UgQ292ZXJlZCBTb2Z0d2FyZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24KK29mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQKK3ZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMKK29mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IE5va2lhLiBObyBvbmUgb3RoZXIKK3RoYW4gTm9raWEgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBTb2Z0d2FyZQorY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKK0NPVkVSRUQgU09GVFdBUkUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJU2BgIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQKK0xJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBTT0ZUV0FSRSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwKK0ZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUKK1FVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIFNPRlRXQVJFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZCitDT1ZFUkVEIFNPRlRXQVJFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgTk9LSUEsIElUUyBMSUNFTlNPUlMKK09SIEFGRklMSUFURVMgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWQorU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GICBXQVJSQU5UWSBDT05TVElUVVRFUworQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgU09GVFdBUkUgSVMgQVVUSE9SSVpFRAorSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzguIFRFUk1JTkFUSU9OLgorCis4LjEgVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkKK2lmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbgorMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQKK1NvZnR3YXJlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMKK0xpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZAordGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorCis4LjIgSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbQorKGV4Y2x1ZGluZyBkZWNsYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBOb2tpYSBvciBhIENvbnRyaWJ1dG9yIChOb2tpYQorb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICJQYXJ0aWNpcGFudCIpCithbGxlZ2luZyB0aGF0OgorCithKSBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcworYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHRvIFlvdQordW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlCitmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIKK3JlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKSBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhCittdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZSByb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucworbWFkZSBieSBzdWNoIFBhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QKK3RvIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMKK29mIG5vdGljZSwgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseQorYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLAordGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMgorYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YgdGhlIDYwIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZAorYWJvdmUuCisKK2IpIGFueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50YHMKK0NvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4KK2FueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikgYW5kCisyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLAorZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC4KKworOC4zIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcKK3RoYXQgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMKK2FueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpCitwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUKK3ZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yCisyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55CitwYXltZW50IG9yIGxpY2Vuc2UuCisKKzguNCBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsCitlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2gKK2hhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8KK3Rlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBOT0tJQSwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLAorT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgU09GVFdBUkUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSAorUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwKK09SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLAorREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwKK09SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTAorSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTgorT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWQorUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMKK1NVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04KK09GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBCVVQgTUFZIEFMTE9XIExJQUJJTElUWSBUTyBCRSBMSU1JVEVEOworSU4gU1VDSCBDQVNFUywgQSBQQVJUWWBzLCBJVFMgRU1QTE9ZRUVTLCBMSUNFTlNPUlMgT1IgQUZGSUxJQVRFU2AgTElBQklMSVRZCitTSEFMTCBCRSBMSU1JVEVEIFRPIFUuUy4gJDUwLiBOb3RoaW5nIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgcHJlanVkaWNlCit0aGUgc3RhdHV0b3J5IHJpZ2h0cyBvZiBhbnkgcGFydHkgZGVhbGluZyBhcyBhIGNvbnN1bWVyLgorCisxMC4gTUlTQ0VMTEFORU9VUy4KKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyCitoZXJlb2YuIEFsbCByaWdodHMgaW4gdGhlIENvdmVyZWQgU29mdHdhcmUgbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyCit0aGlzIExpY2Vuc2UgYXJlIHJlc2VydmVkLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBncmFudCBZb3UgYW55CityaWdodHMgdG8gdXNlIGFueSBvZiB0aGUgdHJhZGVtYXJrcyBvZiBOb2tpYSBvciBhbnkgb2YgaXRzIEFmZmlsaWF0ZXMsCitldmVuIGlmIGFueSBvZiBzdWNoIHRyYWRlbWFya3MgYXJlIGluY2x1ZGVkIGluIGFueSBwYXJ0IG9mIENvdmVyZWQgU29mdHdhcmUKK2FuZC9vciBkb2N1bWVudGF0aW9uIHRvIGl0LgorCitUaGlzIExpY2Vuc2UgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgRmlubGFuZCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdworcHJvdmlzaW9ucy4gQWxsIGRpc3B1dGVzIGFyaXNpbmcgZnJvbSBvciByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbAorYmUgc2V0dGxlZCBieSBhIHNpbmdsZSBhcmJpdHJhdG9yIGFwcG9pbnRlZCBieSB0aGUgQ2VudHJhbCBDaGFtYmVyIG9mIENvbW1lcmNlCitvZiBGaW5sYW5kLiBUaGUgYXJiaXRyYXRpb24gcHJvY2VkdXJlIHNoYWxsIHRha2UgcGxhY2UgaW4gSGVsc2lua2ksIEZpbmxhbmQKK2luIHRoZSBFbmdsaXNoIGxhbmd1YWdlLiBJZiBhbnkgcGFydCBvZiB0aGlzIEFncmVlbWVudCBpcyBmb3VuZCB2b2lkIGFuZAordW5lbmZvcmNlYWJsZSwgaXQgd2lsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvZiB0aGUgYmFsYW5jZSBvZiB0aGUgQWdyZWVtZW50LAord2hpY2ggc2hhbGwgcmVtYWluIHZhbGlkIGFuZCBlbmZvcmNlYWJsZSBhY2NvcmRpbmcgdG8gaXRzIHRlcm1zLgorCisxMS4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KKworQXMgYmV0d2VlbiBOb2tpYSBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IKK2NsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uCitvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIE5va2lhIGFuZCBDb250cmlidXRvcnMKK3RvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluCitpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKworIAorCitFWEhJQklUIEEKKworVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTk9LT1MgTGljZW5zZSBWZXJzaW9uIDEuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCitMaWNlbnNlLgorCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCitiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiAgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZQordGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBTb2Z0d2FyZSBpcworCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KKworQ29weXJpZ2h0ICYjMTY5OyA8eWVhcj4gTm9raWEgYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09BU0lTIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PQVNJUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTNkZjdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PQVNJUwpAQCAtMCwwICsxLDEzIEBACisgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY0Jvb2sgRFREIGFuZAorICBpdHMgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcworICBoZXJlYnkgZ3JhbnRlZCBpbiBwZXJwZXR1aXR5LCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcHBlYXIgaW4gYWxsIGNvcGllcy4gIFRoZSBjb3B5cmlnaHQKKyAgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgRFREIGZvcgorICBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzZWQgb3IgaW1wbGllZAorICB3YXJyYW50eS4KKworICBJZiB5b3UgbW9kaWZ5IHRoZSBEb2NCb29rIERURCBpbiBhbnkgd2F5LCBleGNlcHQgZm9yIGRlY2xhcmluZyBhbmQKKyAgcmVmZXJlbmNpbmcgYWRkaXRpb25hbCBzZXRzIG9mIGdlbmVyYWwgZW50aXRpZXMgYW5kIGRlY2xhcmluZworICBhZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKKyAgdGhlIG1haW50ZW5hbmNlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0NMQy0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09DTEMtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOWUzZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09DTEMtMi4wCkBAIC0wLDAgKzEsNzggQEAKKworT0NMQyBSZXNlYXJjaCBQdWJsaWMgTGljZW5zZSAyLjAKK1Rlcm1zICZhbXA7IENvbmRpdGlvbnMgT2YgVXNlCitNYXksIDIwMDIKK0NvcHlyaWdodCAmIzE2OTsgMjAwMi4gT0NMQyBPbmxpbmUgQ29tcHV0ZXIgTGlicmFyeSBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQTEVBU0UgUkVBRCBUSElTIERPQ1VNRU5UIENBUkVGVUxMWS4gQlkgRE9XTkxPQURJTkcgT1IgVVNJTkcgVEhFIENPREUgQkFTRSBBTkQvT1IgRE9DVU1FTlRBVElPTiBBQ0NPTVBBTllJTkcgVEhJUyBMSUNFTlNFIChUSEUgIkxpY2Vuc2UiKSwgWU9VIEFHUkVFIFRPIFRIRSBGT0xMT1dJTkcgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBMSUNFTlNFLgorCitTZWN0aW9uIDEuIFlvdXIgUmlnaHRzCisKK1N1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgT0NMQyBPZmZpY2Ugb2YgUmVzZWFyY2ggKHRoZSAiT3JpZ2luYWwgQ29udHJpYnV0b3IiKSBhbmQgZWFjaCBzdWJzZXF1ZW50IGNvbnRyaWJ1dG9yIChjb2xsZWN0aXZlbHkgd2l0aCB0aGUgT3JpZ2luYWwgQ29udHJpYnV0b3IsIHRoZSAiQ29udHJpYnV0b3JzIikgaGVyZWJ5IGdyYW50IHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgbm8tY2hhcmdlLCB0cmFuc2ZlcmFibGUgbGljZW5zZSB0byBleGVjdXRlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIGFuZCBkaXN0cmlidXRlIChpbnRlcm5hbGx5IGFuZCBleHRlcm5hbGx5KSwgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbmNvbW1lcmNpYWwgcHVycG9zZXMsIHRoZSBvcmlnaW5hbCBjb2RlIGNvbnRyaWJ1dGVkIGJ5IE9yaWdpbmFsIENvbnRyaWJ1dG9yIGFuZCBhbGwgTW9kaWZpY2F0aW9ucyAoY29sbGVjdGl2ZWx5IGNhbGxlZCB0aGUgIlByb2dyYW0iKS4KKworU2VjdGlvbiAyLiBEZWZpbml0aW9ucworCitBICJNb2RpZmljYXRpb24iIHRvIHRoZSBQcm9ncmFtIGlzIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhbnkgZmlsZSBvZiB0aGUgUHJvZ3JhbSBhbmQgYW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIFByb2dyYW0uIElmIHlvdSBtYWtlIGEgTW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGV4dGVybmFsbHkgeW91IGFyZSBhICJDb250cmlidXRvci4iIFRoZSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gbXVzdCBiZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGluY2x1ZGluZyB0aG9zZSBpbiBTZWN0aW9uIDMgYmVsb3cuCisKK0EgIkNvbWJpbmVkIFdvcmsiIHJlc3VsdHMgZnJvbSBjb21iaW5pbmcgYW5kIGludGVncmF0aW5nIGFsbCBvciBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIGNvZGUuIEEgQ29tYmluZWQgV29yayBtYXkgYmUgdGhvdWdodCBvZiBhcyBoYXZpbmcgbXVsdGlwbGUgcGFyZW50cyBvciBiZWluZyByZXN1bHQgb2YgbXVsdGlwbGUgbGluZXMgb2YgY29kZSBkZXZlbG9wbWVudC4KKworU2VjdGlvbiAzLiBEaXN0cmlidXRpb24gTGljZW5zaW5nIFRlcm1zCisKK0EuIEdlbmVyYWwgUmVxdWlyZW1lbnRzCitFeGNlcHQgYXMgbmVjZXNzYXJ5IHRvIHJlY29nbml6ZSB0aGlyZC1wYXJ0eSByaWdodHMgb3IgdGhpcmQtcGFydHkgcmVzdHJpY3Rpb24gKHNlZSBiZWxvdyksIGEgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGFueSBvZiB0aGUgZm9ybXMgbGlzdGVkIGJlbG93IG11c3Qgbm90IHB1dCBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudCYjODIxNztzIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisKK0FzIGEgQ29udHJpYnV0b3IsIHlvdSByZXByZXNlbnQgdGhhdCB5b3VyIE1vZGlmaWNhdGlvbihzKSBhcmUgeW91ciBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQsIHRvIHRoZSBiZXN0IG9mIHlvdXIga25vd2xlZGdlLCBubyB0aGlyZCBwYXJ0eSBoYXMgYW55IGNsYWltIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMpIHJlbGF0aW5nIHRvIHlvdXIgTW9kaWZpY2F0aW9uKHMpLiBZb3UgcmVwcmVzZW50IHRoYXQgZWFjaCBvZiB5b3VyIE1vZGlmaWNhdGlvbnMgaW5jbHVkZXMgY29tcGxldGUgZGV0YWlscyBvZiBhbnkgdGhpcmQtcGFydHkgcmlnaHQgb3Igb3RoZXIgdGhpcmQtcGFydHkgcmVzdHJpY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGFueSBwYXJ0IG9mIHlvdXIgTW9kaWZpY2F0aW9uIChpbmNsdWRpbmcgYSBjb3B5IG9mIGFueSBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50KS4KKworVGhlIFByb2dyYW0gbXVzdCBiZSBkaXN0cmlidXRlZCB3aXRob3V0IGNoYXJnZSBiZXlvbmQgdGhlIGNvc3RzIG9mIHBoeXNpY2FsbHkgdHJhbnNmZXJyaW5nIHRoZSBmaWxlcyB0byB0aGUgcmVjaXBpZW50LgorCitUaGlzIFdhcnJhbnR5IERpc2NsYWltZXIvTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgbXVzdCBiZSBwcm9taW5lbnRseSBkaXNwbGF5ZWQgd2l0aCBldmVyeSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYW55IGZvcm06CisKK1lPVSBBR1JFRSBUSEFUIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5EIChFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEKS4gQUNDT1JESU5HTFksIE9DTEMgTUFLRVMgTk8gV0FSUkFOVElFUywgUkVQUkVTRU5UQVRJT05TIE9SIEdVQVJBTlRFRVMsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIEFORCBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywgUkVQUkVTRU5UQVRJT05TIE9SIEdVQVJBTlRFRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQVMgVE86IChBKSBUSEUgRlVOQ1RJT05BTElUWSBPUiBOT05JTkZSSU5HRU1FTlQgT0YgUFJPR1JBTSwgQU5ZIE1PRElGSUNBVElPTiwgQSBDT01CSU5FRCBXT1JLIE9SIEFOIEFHR1JFR0FURSBXT1JLOyBPUiAoQikgVEhFIFJFU1VMVFMgT0YgQU5ZIFBST0pFQ1QgVU5ERVJUQUtFTiBVU0lORyBUSEUgUFJPR1JBTSwgQU5ZIE1PRElGSUNBVElPTiwgQSBDT01CSU5FRCBXT1JLIE9SIEFOIEFHR1JFR0FURSBXT1JLLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBPUiBBTlkgT1RIRVIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhFIFBST0dSQU0sIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBZT1UgSEVSRUJZIFdBSVZFIEFOWSBDTEFJTVMgRk9SIERBTUFHRVMgT0YgQU5ZIEtJTkQgQUdBSU5TVCBDT05UUklCVVRPUlMgV0hJQ0ggTUFZIFJFU1VMVCBGUk9NIFlPVVIgVVNFIE9GIFRIRSBQUk9HUkFNLgorCitCLiBSZXF1aXJlbWVudHMgZm9yIGEgRGlzdHJpYnV0aW9uIG9mIE1vZGlmaWFibGUgQ29kZQorSWYgeW91IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gYSBmb3JtIHRvIHdoaWNoIHRoZSByZWNpcGllbnQgY2FuIG1ha2UgTW9kaWZpY2F0aW9ucyAoZS5nLiBzb3VyY2UgY29kZSksIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgYXBwbHkgdG8gdXNlIGJ5IHJlY2lwaWVudC4gSW4gYWRkaXRpb24sIGVhY2ggc291cmNlIGFuZCBkYXRhIGZpbGUgb2YgdGhlIFByb2dyYW0gYW5kIGFueSBNb2RpZmljYXRpb24geW91IGRpc3RyaWJ1dGUgbXVzdCBjb250YWluIHRoZSBmb2xsb3dpbmcgbm90aWNlOgorCisiQ29weXJpZ2h0IChjKSAyMDAwLSAoaW5zZXJ0IHRoZW4gY3VycmVudCB5ZWFyKSBPQ0xDIE9ubGluZSBDb21wdXRlciBMaWJyYXJ5IENlbnRlciwgSW5jLiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlLCBhcyB1cGRhdGVkIGZyb20gdGltZSB0byB0aW1lIGJ5IHRoZSBPQ0xDIE9mZmljZSBvZiBSZXNlYXJjaCwgYXJlIHN1YmplY3QgdG8gT0NMQyBSZXNlYXJjaCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjdXJyZW50IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3B1cmwub2NsYy5vcmcvb2NsYy9yZXNlYXJjaC9PUlBMLy4gU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55IGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiBPQ0xDIFJlc2VhcmNoLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBPQ0xDIFJlc2VhcmNoLCBwbGVhc2Ugc2VlIGh0dHA6Ly93d3cub2NsYy5vcmcvcmVzZWFyY2gvLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX18uIFBvcnRpb25zIGNyZWF0ZWQgYnkgX19fX19fX19fX19fX19fX19fX19fXyBhcmUgQ29weXJpZ2h0IChDKSBfX19fXyBfX19fX19fX19fX19fX19fX19fX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLiIKKworQy4gUmVxdWlyZW1lbnRzIGZvciBhIERpc3RyaWJ1dGlvbiBvZiBOb24tbW9kaWZpYWJsZSBDb2RlCitJZiB5b3UgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpbiBhIGZvcm0gdG8gd2hpY2ggdGhlIHJlY2lwaWVudCBjYW5ub3QgbWFrZSBNb2RpZmljYXRpb25zIChlLmcuIG9iamVjdCBjb2RlKSwgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBhcHBseSB0byB1c2UgYnkgcmVjaXBpZW50IGFuZCB5b3UgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50IGluIGFwcHJvcHJpYXRlIGFuZCBjb25zcGljdW91cyBsb2NhdGlvbnM6CisKKyJDb3B5cmlnaHQgKGMpIDIwMDAtIChpbnNlcnQgdGhlbiBjdXJyZW50IHllYXIpIE9DTEMgT25saW5lIENvbXB1dGVyIExpYnJhcnkgQ2VudGVyLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIgorCitJbiBhZGRpdGlvbiwgdGhlIHNvdXJjZSBjb2RlIG11c3QgYmUgaW5jbHVkZWQgd2l0aCB0aGUgb2JqZWN0IGNvZGUgZGlzdHJpYnV0aW9uIG9yIHRoZSBkaXN0cmlidXRvciBtdXN0IHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIHRvIHRoZSByZWNpcGllbnQgdXBvbiByZXF1ZXN0LgorCitELiBSZXF1aXJlbWVudHMgZm9yIGEgQ29tYmluZWQgV29yayBEaXN0cmlidXRpb24KK0Rpc3RyaWJ1dGlvbnMgb2YgQ29tYmluZWQgV29ya3MgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBhbmQgbXVzdCBiZSBtYWRlIGF0IG5vIGNoYXJnZSB0byB0aGUgcmVjaXBpZW50IGJleW9uZCB0aGUgY29zdHMgb2YgcGh5c2ljYWxseSB0cmFuc2ZlcnJpbmcgdGhlIGZpbGVzIHRvIHJlY2lwaWVudC4KKworQSBDb21iaW5lZCBXb3JrIG1heSBiZSBkaXN0cmlidXRlZCBhcyBlaXRoZXIgbW9kaWZpYWJsZSBvciBub24tbW9kaWZpYWJsZSBjb2RlLiBUaGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy5CIG9yIDMuQyBhYm92ZSAoYXMgYXBwcm9wcmlhdGUpIGFwcGx5IHRvIHN1Y2ggZGlzdHJpYnV0aW9ucy4KKworQW4gIkFnZ3JlZ2F0ZSBXb3JrIiBpcyB3aGVuIHRoZSBQcm9ncmFtIGV4aXN0cywgd2l0aG91dCBpbnRlZ3JhdGlvbiwgd2l0aCBvdGhlciBwcm9ncmFtcyBvbiBhIHN0b3JhZ2UgbWVkaXVtLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgYXBwbHkgdG8gcG9ydGlvbnMgb2YgYW4gQWdncmVnYXRlIFdvcmsgd2hpY2ggYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoZSBkZWZpbml0aW9uIG9mICJQcm9ncmFtIiBwcm92aWRlZCBpbiB0aGlzIExpY2Vuc2UuIFlvdSBhcmUgbm90IGZvcmJpZGRlbiBmcm9tIHNlbGxpbmcgYW4gQWdncmVnYXRlIFdvcmsuIEhvd2V2ZXIsIHRoZSBQcm9ncmFtIGNvbnRhaW5lZCBpbiBhbiBBZ2dyZWdhdGUgV29yayBpcyBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gQWxzbywgc2hvdWxkIHRoZSBQcm9ncmFtIGJlIGV4dHJhY3RlZCBmcm9tIGFuIEFnZ3JlZ2F0ZSBXb3JrLCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgdXNlIG9mIHRoZSBQcm9ncmFtIGFwYXJ0IGZyb20gdGhlIEFnZ3JlZ2F0ZSBXb3JrLgorCitTZWN0aW9uIDQuIExpY2Vuc2UgR3JhbnQKKworRm9yIHB1cnBvc2VzIG9mIHBlcm1pdHRpbmcgdXNlIG9mIHlvdXIgTW9kaWZpY2F0aW9ucyBieSBPQ0xDIGFuZCBvdGhlciBsaWNlbnNlZXMgaGVyZXVuZGVyLCB5b3UgaGVyZWJ5IGdyYW50IHRvIE9DTEMgYW5kIHN1Y2ggb3RoZXIgbGljZW5zZWVzIHRoZSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgdHJhbnNmZXJhYmxlLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlIHRvIGV4ZWN1dGUsIGNvcHksIGFsdGVyLCBkZWxldGUsIG1vZGlmeSwgYWRhcHQsIGNoYW5nZSwgcmV2aXNlLCBlbmhhbmNlLCBkZXZlbG9wLCBwdWJsaWNseSBkaXNwbGF5LCBkaXN0cmlidXRlIChpbnRlcm5hbGx5IGFuZCBleHRlcm5hbGx5KSBhbmQvb3IgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgb24geW91ciBNb2RpZmljYXRpb25zIChhbmQgZGVyaXZhdGl2ZSB3b3JrcyB0aGVyZW9mKSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlc2UgVGVybXMuIFRoaXMgU2VjdGlvbiA0IHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIGZvciBhbnkgcmVhc29uLgorCitTZWN0aW9uIDUuIFRlcm1pbmF0aW9uIG9mIFJpZ2h0cworCitUaGlzIG5vbi1leGNsdXNpdmUgbGljZW5zZSAod2l0aCByZXNwZWN0IHRvIHRoZSBncmFudCBmcm9tIGEgcGFydGljdWxhciBDb250cmlidXRvcikgYXV0b21hdGljYWxseSB0ZXJtaW5hdGVzIGZvciBhbnkgZW50aXR5IHRoYXQgaW5pdGlhdGVzIGxlZ2FsIGFjdGlvbiBmb3IgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudCAod2l0aCByZXNwZWN0IHRvIHRoZSBQcm9ncmFtKSBhZ2FpbnN0IHN1Y2ggQ29udHJpYnV0b3IgYXMgb2YgdGhlIGluaXRpYXRpb24gb2Ygc3VjaCBhY3Rpb24uCisKK0lmIHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoaXMgTGljZW5zZSwgeW91ciByaWdodHMgKGJ1dCBub3QgeW91ciBvYmxpZ2F0aW9ucykgdW5kZXIgdGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVubGVzcyB5b3UgY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gdGhpcnR5ICgzMCkgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgbm9uY29tcGxpYW5jZS4gQWxsIHN1YmxpY2Vuc2VzIGdyYW50ZWQgYnkgeW91IHdoaWNoIHByZWV4aXN0IHN1Y2ggdGVybWluYXRpb24gYW5kIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgc3VjaCB0ZXJtaW5hdGlvbi4KKworU2VjdGlvbiA2LiBPdGhlciBUZXJtcworCitFeGNlcHQgZm9yIHRoZSBjb3B5cmlnaHQgbm90aWNlcyByZXF1aXJlZCBhYm92ZSwgeW91IG1heSBub3QgdXNlIGFueSB0cmFkZW1hcmsgb2YgYW55IG9mIHRoZSBDb250cmlidXRvcnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIHRoZSByZWxldmFudCBDb250cmlidXRvci4gWW91IGFncmVlIG5vdCB0byByZW1vdmUsIGFsdGVyIG9yIG9ic2N1cmUgYW55IGNvcHlyaWdodCBvciBvdGhlciBwcm9wcmlldGFyeSByaWdodHMgbm90aWNlIGNvbnRhaW5lZCBpbiB0aGUgUHJvZ3JhbS4KKworQWxsIHRyYW5zZmVycyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mIHNoYWxsIGJlIG1hZGUgaW4gY29tcGxpYW5jZSB3aXRoIFUuUy4gaW1wb3J0L2V4cG9ydCByZWd1bGF0aW9ucyBvciBvdGhlciByZXN0cmljdGlvbnMgb2YgdGhlIFUuUy4gRGVwYXJ0bWVudCBvZiBDb21tZXJjZSwgYXMgd2VsbCBhcyBvdGhlciBzaW1pbGFyIHRyYWRlIG9yIGNvbW1lcmNlIHJlc3RyaWN0aW9ucyB3aGljaCBtaWdodCBhcHBseS4KKworQW55IHBhdGVudCBvYnRhaW5lZCBieSBhbnkgcGFydHkgY292ZXJpbmcgdGhlIFByb2dyYW0gb3IgYW55IHBhcnQgdGhlcmVvZiBtdXN0IGluY2x1ZGUgYSBwcm92aXNpb24gcHJvdmlkaW5nIGZvciB0aGUgZnJlZSwgcGVycGV0dWFsIGFuZCB1bnJlc3RyaWN0ZWQgY29tbWVyY2lhbCBhbmQgbm9uY29tbWVyY2lhbCB1c2UgYnkgYW55IHRoaXJkIHBhcnR5LgorCitJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIHNldHRsZW1lbnQgcmVsYXRpbmcgdG8gaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudCBvciBhbnkgb3RoZXIgY2F1c2Ugb2YgYWN0aW9uLCBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBzdWNoIGNvbmRpdGlvbnMgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSBjb21wbGlhbmNlIHdpdGggdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gc28gYXMgdG8gc2ltdWx0YW5lb3VzbHkgc2F0aXNmeSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgc3VjaCBvdGhlciBjb25kaXRpb25zLCB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB5b3UgY291bGQgbm90IHNhdGlzZnkgYm90aCB0aGUgcGF0ZW50IGxpY2Vuc2UgYW5kIHRoaXMgTGljZW5zZSwgYW5kIHlvdSB3b3VsZCBiZSByZXF1aXJlZCB0byByZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiB5b3UgbGVhcm4gb2YgYSB0aGlyZCBwYXJ0eSBjbGFpbSBvciBvdGhlciByZXN0cmljdGlvbiByZWxhdGluZyB0byBhIFByb2dyYW0geW91IGhhdmUgYWxyZWFkeSBkaXN0cmlidXRlZCB5b3Ugc2hhbGwgcHJvbXB0bHkgcmVkbyB5b3VyIFByb2dyYW0gdG8gYWRkcmVzcyB0aGUgaXNzdWUgYW5kIHRha2UgYWxsIHJlYXNvbmFibGUgc3RlcHMgdG8gaW5mb3JtIHRob3NlIHdobyBtYXkgaGF2ZSByZWNlaXZlZCB0aGUgUHJvZ3JhbSBhdCBpc3N1ZS4gQW4gZXhhbXBsZSBvZiBhbiBhcHByb3ByaWF0ZSByZWFzb25hYmxlIHN0ZXAgdG8gaW5mb3JtIHdvdWxkIGJlIHBvc3RpbmcgYW4gYW5ub3VuY2VtZW50IG9uIGFuIGFwcHJvcHJpYXRlIHdlYiBidWxsZXRpbiBib2FyZC4KKworVGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGFyZSBkZWVtZWQgdG8gYmUgc2V2ZXJhYmxlLCBhbmQgdGhlIGludmFsaWRpdHkgb3IgdW5lbmZvcmNlYWJpbGl0eSBvZiBhbnkgcHJvdmlzaW9uIHNoYWxsIG5vdCBhZmZlY3Qgb3IgaW1wYWlyIHRoZSByZW1haW5pbmcgcHJvdmlzaW9ucyB3aGljaCBzaGFsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuIEluIHN1YnN0aXR1dGlvbiBmb3IgYW55IHByb3Zpc2lvbiBoZWxkIHVubGF3ZnVsLCB0aGVyZSBzaGFsbCBiZSBzdWJzdGl0dXRlZCBhIHByb3Zpc2lvbiBvZiBzaW1pbGFyIGltcG9ydCByZWZsZWN0aW5nIHRoZSBvcmlnaW5hbCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMgaGVyZXRvIHRvIHRoZSBleHRlbnQgcGVybWlzc2libGUgdW5kZXIgbGF3LgorCitUaGUgT3JpZ2luYWwgQ29udHJpYnV0b3IgZnJvbSB0aW1lIHRvIHRpbWUgbWF5IGNoYW5nZSB0aGlzIExpY2Vuc2UsIGFuZCB0aGUgYW1lbmRlZCBsaWNlbnNlIHdpbGwgYXBwbHkgdG8gYWxsIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBkb3dubG9hZGVkIGFmdGVyIHRoZSBuZXcgbGljZW5zZSBpcyBwb3N0ZWQuIFRoaXMgTGljZW5zZSBncmFudHMgb25seSB0aGUgcmlnaHRzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluIGFuZCBwcm92aWRlcyB5b3Ugd2l0aCBubyBpbXBsaWVkIHJpZ2h0cyBvciBsaWNlbnNlcyB0byB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvci4KKworVGhpcyBMaWNlbnNlIGlzIHRoZSBjb21wbGV0ZSBhbmQgZXhjbHVzaXZlIHN0YXRlbWVudCBvZiB0aGUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mIGFuZCBtYXkgbm90IGJlIGFtZW5kZWQgZXhjZXB0IGJ5IHRoZSB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgcGFydGllcy4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBPaGlvIGFuZCB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCB3aXRob3V0IHJlZ2FyZCB0byBwcmluY2lwbGVzIG9mIGNvbmZsaWN0cyBvZiBsYXcuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0RiTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09EYkwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZjE0NGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09EYkwtMS4wCkBAIC0wLDAgKzEsNTQzIEBACisKKyMjIE9EQyBPcGVuIERhdGFiYXNlIExpY2Vuc2UgKE9EYkwpCisKKyMjIyBQcmVhbWJsZQorCitUaGUgT3BlbiBEYXRhYmFzZSBMaWNlbnNlIChPRGJMKSBpcyBhIGxpY2Vuc2UgYWdyZWVtZW50IGludGVuZGVkIHRvCithbGxvdyB1c2VycyB0byBmcmVlbHkgc2hhcmUsIG1vZGlmeSwgYW5kIHVzZSB0aGlzIERhdGFiYXNlIHdoaWxlCittYWludGFpbmluZyB0aGlzIHNhbWUgZnJlZWRvbSBmb3Igb3RoZXJzLiBNYW55IGRhdGFiYXNlcyBhcmUgY292ZXJlZCBieQorY29weXJpZ2h0LCBhbmQgdGhlcmVmb3JlIHRoaXMgZG9jdW1lbnQgbGljZW5zZXMgdGhlc2UgcmlnaHRzLiBTb21lCitqdXJpc2RpY3Rpb25zLCBtYWlubHkgaW4gdGhlIEV1cm9wZWFuIFVuaW9uLCBoYXZlIHNwZWNpZmljIHJpZ2h0cyB0aGF0Citjb3ZlciBkYXRhYmFzZXMsIGFuZCBzbyB0aGUgT0RiTCBhZGRyZXNzZXMgdGhlc2UgcmlnaHRzLCB0b28uIEZpbmFsbHksCit0aGUgT0RiTCBpcyBhbHNvIGFuIGFncmVlbWVudCBpbiBjb250cmFjdCBmb3IgdXNlcnMgb2YgdGhpcyBEYXRhYmFzZSB0bworYWN0IGluIGNlcnRhaW4gd2F5cyBpbiByZXR1cm4gZm9yIGFjY2Vzc2luZyB0aGlzIERhdGFiYXNlLgorCitEYXRhYmFzZXMgY2FuIGNvbnRhaW4gYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgY29udGVudCAoaW1hZ2VzLAorYXVkaW92aXN1YWwgbWF0ZXJpYWwsIGFuZCBzb3VuZHMgYWxsIGluIHRoZSBzYW1lIGRhdGFiYXNlLCBmb3IgZXhhbXBsZSksCithbmQgc28gdGhlIE9EYkwgb25seSBnb3Zlcm5zIHRoZSByaWdodHMgb3ZlciB0aGUgRGF0YWJhc2UsIGFuZCBub3QgdGhlCitjb250ZW50cyBvZiB0aGUgRGF0YWJhc2UgaW5kaXZpZHVhbGx5LiBMaWNlbnNvcnMgc2hvdWxkIHVzZSB0aGUgT0RiTAordG9nZXRoZXIgd2l0aCBhbm90aGVyIGxpY2Vuc2UgZm9yIHRoZSBjb250ZW50cywgaWYgdGhlIGNvbnRlbnRzIGhhdmUgYQorc2luZ2xlIHNldCBvZiByaWdodHMgdGhhdCB1bmlmb3JtbHkgY292ZXJzIGFsbCBvZiB0aGUgY29udGVudHMuIElmIHRoZQorY29udGVudHMgaGF2ZSBtdWx0aXBsZSBzZXRzIG9mIGRpZmZlcmVudCByaWdodHMsIExpY2Vuc29ycyBzaG91bGQKK2Rlc2NyaWJlIHdoYXQgcmlnaHRzIGdvdmVybiB3aGF0IGNvbnRlbnRzIHRvZ2V0aGVyIGluIHRoZSBpbmRpdmlkdWFsCityZWNvcmQgb3IgaW4gc29tZSBvdGhlciB3YXkgdGhhdCBjbGFyaWZpZXMgd2hhdCByaWdodHMgYXBwbHkuIAorCitTb21ldGltZXMgdGhlIGNvbnRlbnRzIG9mIGEgZGF0YWJhc2UsIG9yIHRoZSBkYXRhYmFzZSBpdHNlbGYsIGNhbiBiZQorY292ZXJlZCBieSBvdGhlciByaWdodHMgbm90IGFkZHJlc3NlZCBoZXJlIChzdWNoIGFzIHByaXZhdGUgY29udHJhY3RzLAordHJhZGUgbWFyayBvdmVyIHRoZSBuYW1lLCBvciBwcml2YWN5IHJpZ2h0cyAvIGRhdGEgcHJvdGVjdGlvbiByaWdodHMKK292ZXIgaW5mb3JtYXRpb24gaW4gdGhlIGNvbnRlbnRzKSwgYW5kIHNvIHlvdSBhcmUgYWR2aXNlZCB0aGF0IHlvdSBtYXkKK2hhdmUgdG8gY29uc3VsdCBvdGhlciBkb2N1bWVudHMgb3IgY2xlYXIgb3RoZXIgcmlnaHRzIGJlZm9yZSBkb2luZworYWN0aXZpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuCisKKy0tLS0tLQorCitUaGUgTGljZW5zb3IgKGFzIGRlZmluZWQgYmVsb3cpIAorCithbmQgCisKK1lvdSAoYXMgZGVmaW5lZCBiZWxvdykgCisKK2FncmVlIGFzIGZvbGxvd3M6IAorCisjIyMgMS4wIERlZmluaXRpb25zIG9mIENhcGl0YWxpc2VkIFdvcmRzCisKKyJDb2xsZWN0aXZlIERhdGFiYXNlIiAmIzgyMTE7IE1lYW5zIHRoaXMgRGF0YWJhc2UgaW4gdW5tb2RpZmllZCBmb3JtIGFzIHBhcnQKK29mIGEgY29sbGVjdGlvbiBvZiBpbmRlcGVuZGVudCBkYXRhYmFzZXMgaW4gdGhlbXNlbHZlcyB0aGF0IHRvZ2V0aGVyIGFyZQorYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUKK0RhdGFiYXNlIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIERhdGFiYXNlLgorCisiQ29udmV5IiAmIzgyMTE7IEFzIGEgdmVyYiwgbWVhbnMgVXNpbmcgdGhlIERhdGFiYXNlLCBhIERlcml2YXRpdmUgRGF0YWJhc2UsCitvciB0aGUgRGF0YWJhc2UgYXMgcGFydCBvZiBhIENvbGxlY3RpdmUgRGF0YWJhc2UgaW4gYW55IHdheSB0aGF0IGVuYWJsZXMKK2EgUGVyc29uIHRvIG1ha2Ugb3IgcmVjZWl2ZSBjb3BpZXMgb2YgdGhlIERhdGFiYXNlIG9yIGEgRGVyaXZhdGl2ZQorRGF0YWJhc2UuICBDb252ZXlpbmcgZG9lcyBub3QgaW5jbHVkZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJvdWdoIGEKK2NvbXB1dGVyIG5ldHdvcmssIG9yIGNyZWF0aW5nIGFuZCBVc2luZyBhIFByb2R1Y2VkIFdvcmssIHdoZXJlIG5vCit0cmFuc2ZlciBvZiBhIGNvcHkgb2YgdGhlIERhdGFiYXNlIG9yIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBvY2N1cnMuCisiQ29udGVudHMiICYjODIxMTsgVGhlIGNvbnRlbnRzIG9mIHRoaXMgRGF0YWJhc2UsIHdoaWNoIGluY2x1ZGVzIHRoZQoraW5mb3JtYXRpb24sIGluZGVwZW5kZW50IHdvcmtzLCBvciBvdGhlciBtYXRlcmlhbCBjb2xsZWN0ZWQgaW50byB0aGUKK0RhdGFiYXNlLiBGb3IgZXhhbXBsZSwgdGhlIGNvbnRlbnRzIG9mIHRoZSBEYXRhYmFzZSBjb3VsZCBiZSBmYWN0dWFsCitkYXRhIG9yIHdvcmtzIHN1Y2ggYXMgaW1hZ2VzLCBhdWRpb3Zpc3VhbCBtYXRlcmlhbCwgdGV4dCwgb3Igc291bmRzLgorCisiRGF0YWJhc2UiICYjODIxMTsgQSBjb2xsZWN0aW9uIG9mIG1hdGVyaWFsICh0aGUgQ29udGVudHMpIGFycmFuZ2VkIGluIGEKK3N5c3RlbWF0aWMgb3IgbWV0aG9kaWNhbCB3YXkgYW5kIGluZGl2aWR1YWxseSBhY2Nlc3NpYmxlIGJ5IGVsZWN0cm9uaWMKK29yIG90aGVyIG1lYW5zIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworIkRhdGFiYXNlIERpcmVjdGl2ZSIgJiM4MjExOyBNZWFucyBEaXJlY3RpdmUgOTYvOS9FQyBvZiB0aGUgRXVyb3BlYW4KK1BhcmxpYW1lbnQgYW5kIG9mIHRoZSBDb3VuY2lsIG9mIDExIE1hcmNoIDE5OTYgb24gdGhlIGxlZ2FsIHByb3RlY3Rpb24KK29mIGRhdGFiYXNlcywgYXMgYW1lbmRlZCBvciBzdWNjZWVkZWQuCisKKyJEYXRhYmFzZSBSaWdodCIgJiM4MjExOyBNZWFucyByaWdodHMgcmVzdWx0aW5nIGZyb20gdGhlIENoYXB0ZXIgSUlJICgic3VpCitnZW5lcmlzIikgcmlnaHRzIGluIHRoZSBEYXRhYmFzZSBEaXJlY3RpdmUgKGFzIGFtZW5kZWQgYW5kIGFzIHRyYW5zcG9zZWQKK2J5IG1lbWJlciBzdGF0ZXMpLCB3aGljaCBpbmNsdWRlcyB0aGUgRXh0cmFjdGlvbiBhbmQgUmUtdXRpbGlzYXRpb24gb2YKK3RoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzLCBhcyB3ZWxsIGFzIGFueSBzaW1pbGFyCityaWdodHMgYXZhaWxhYmxlIGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gdW5kZXIgU2VjdGlvbiAxMC40LiAKKworIkRlcml2YXRpdmUgRGF0YWJhc2UiICYjODIxMTsgTWVhbnMgYSBkYXRhYmFzZSBiYXNlZCB1cG9uIHRoZSBEYXRhYmFzZSwgYW5kCitpbmNsdWRlcyBhbnkgdHJhbnNsYXRpb24sIGFkYXB0YXRpb24sIGFycmFuZ2VtZW50LCBtb2RpZmljYXRpb24sIG9yIGFueQorb3RoZXIgYWx0ZXJhdGlvbiBvZiB0aGUgRGF0YWJhc2Ugb3Igb2YgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZQorQ29udGVudHMuIFRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgRXh0cmFjdGluZyBvcgorUmUtdXRpbGlzaW5nIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzIGluIGEgbmV3CitEYXRhYmFzZS4KKworIkV4dHJhY3Rpb24iICYjODIxMTsgTWVhbnMgdGhlIHBlcm1hbmVudCBvciB0ZW1wb3JhcnkgdHJhbnNmZXIgb2YgYWxsIG9yIGEKK1N1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzIHRvIGFub3RoZXIgbWVkaXVtIGJ5IGFueSBtZWFucyBvciBpbgorYW55IGZvcm0uCisKKyJMaWNlbnNlIiAmIzgyMTE7IE1lYW5zIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQgYW5kIGlzIGJvdGggYSBsaWNlbnNlIG9mIHJpZ2h0cworc3VjaCBhcyBjb3B5cmlnaHQgYW5kIERhdGFiYXNlIFJpZ2h0cyBhbmQgYW4gYWdyZWVtZW50IGluIGNvbnRyYWN0LgorCisiTGljZW5zb3IiICYjODIxMTsgTWVhbnMgdGhlIFBlcnNvbiB0aGF0IG9mZmVycyB0aGUgRGF0YWJhc2UgdW5kZXIgdGhlIHRlcm1zCitvZiB0aGlzIExpY2Vuc2UuIAorCisiUGVyc29uIiAmIzgyMTE7IE1lYW5zIGEgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gb3IgYSBib2R5IG9mIHBlcnNvbnMKK2NvcnBvcmF0ZSBvciBpbmNvcnBvcmF0ZS4KKworIlByb2R1Y2VkIFdvcmsiICYjODIxMTsgIGEgd29yayAoc3VjaCBhcyBhbiBpbWFnZSwgYXVkaW92aXN1YWwgbWF0ZXJpYWwsIHRleHQsCitvciBzb3VuZHMpIHJlc3VsdGluZyBmcm9tIHVzaW5nIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlCitDb250ZW50cyAodmlhIGEgc2VhcmNoIG9yIG90aGVyIHF1ZXJ5KSBmcm9tIHRoaXMgRGF0YWJhc2UsIGEgRGVyaXZhdGl2ZQorRGF0YWJhc2UsIG9yIHRoaXMgRGF0YWJhc2UgYXMgcGFydCBvZiBhIENvbGxlY3RpdmUgRGF0YWJhc2UuICAKKworIlB1YmxpY2x5IiAmIzgyMTE7IG1lYW5zIHRvIFBlcnNvbnMgb3RoZXIgdGhhbiBZb3Ugb3IgdW5kZXIgWW91ciBjb250cm9sIGJ5CitlaXRoZXIgbW9yZSB0aGFuIDUwJSBvd25lcnNoaXAgb3IgYnkgdGhlIHBvd2VyIHRvIGRpcmVjdCB0aGVpcgorYWN0aXZpdGllcyAoc3VjaCBhcyBjb250cmFjdGluZyB3aXRoIGFuIGluZGVwZW5kZW50IGNvbnN1bHRhbnQpLiAKKworIlJlLXV0aWxpc2F0aW9uIiAmIzgyMTE7IG1lYW5zIGFueSBmb3JtIG9mIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBhbGwKK29yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMgYnkgdGhlIGRpc3RyaWJ1dGlvbiBvZiBjb3BpZXMsIGJ5CityZW50aW5nLCBieSBvbmxpbmUgb3Igb3RoZXIgZm9ybXMgb2YgdHJhbnNtaXNzaW9uLgorCisiU3Vic3RhbnRpYWwiICYjODIxMTsgTWVhbnMgc3Vic3RhbnRpYWwgaW4gdGVybXMgb2YgcXVhbnRpdHkgb3IgcXVhbGl0eSBvciBhCitjb21iaW5hdGlvbiBvZiBib3RoLiBUaGUgcmVwZWF0ZWQgYW5kIHN5c3RlbWF0aWMgRXh0cmFjdGlvbiBvcgorUmUtdXRpbGlzYXRpb24gb2YgaW5zdWJzdGFudGlhbCBwYXJ0cyBvZiB0aGUgQ29udGVudHMgbWF5IGFtb3VudCB0byB0aGUKK0V4dHJhY3Rpb24gb3IgUmUtdXRpbGlzYXRpb24gb2YgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cy4KKworIlVzZSIgJiM4MjExOyBBcyBhIHZlcmIsIG1lYW5zIGRvaW5nIGFueSBhY3QgdGhhdCBpcyByZXN0cmljdGVkIGJ5IGNvcHlyaWdodAorb3IgRGF0YWJhc2UgUmlnaHRzIHdoZXRoZXIgaW4gdGhlIG9yaWdpbmFsIG1lZGl1bSBvciBhbnkgb3RoZXI7IGFuZAoraW5jbHVkZXMgd2l0aG91dCBsaW1pdGF0aW9uIGRpc3RyaWJ1dGluZywgY29weWluZywgcHVibGljbHkgcGVyZm9ybWluZywKK3B1YmxpY2x5IGRpc3BsYXlpbmcsIGFuZCBwcmVwYXJpbmcgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgRGF0YWJhc2UsIGFzCit3ZWxsIGFzIG1vZGlmeWluZyB0aGUgRGF0YWJhc2UgYXMgbWF5IGJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byB1c2UgaXQKK2luIGEgZGlmZmVyZW50IG1vZGUgb3IgZm9ybWF0LiAKKworIllvdSIgJiM4MjExOyBNZWFucyBhIFBlcnNvbiBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QKK3ByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlCitEYXRhYmFzZSwgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8KK2V4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKworV29yZHMgaW4gdGhlIHNpbmd1bGFyIGluY2x1ZGUgdGhlIHBsdXJhbCBhbmQgdmljZSB2ZXJzYS4KKworIyMjIDIuMCBXaGF0IHRoaXMgTGljZW5zZSBjb3ZlcnMKKworMi4xLiBMZWdhbCBlZmZlY3Qgb2YgdGhpcyBkb2N1bWVudC4gVGhpcyBMaWNlbnNlIGlzOgorCisgIGEuIEEgbGljZW5zZSBvZiBhcHBsaWNhYmxlIGNvcHlyaWdodCBhbmQgbmVpZ2hib3VyaW5nIHJpZ2h0czsKKworICBiLiBBIGxpY2Vuc2Ugb2YgdGhlIERhdGFiYXNlIFJpZ2h0OyBhbmQKKworICBjLiBBbiBhZ3JlZW1lbnQgaW4gY29udHJhY3QgYmV0d2VlbiBZb3UgYW5kIHRoZSBMaWNlbnNvci4KKworMi4yIExlZ2FsIHJpZ2h0cyBjb3ZlcmVkLiBUaGlzIExpY2Vuc2UgY292ZXJzIHRoZSBsZWdhbCByaWdodHMgaW4gdGhlCitEYXRhYmFzZSwgaW5jbHVkaW5nOgorCisgIGEuIENvcHlyaWdodC4gQW55IGNvcHlyaWdodCBvciBuZWlnaGJvdXJpbmcgcmlnaHRzIGluIHRoZSBEYXRhYmFzZS4KKyAgVGhlIGNvcHlyaWdodCBsaWNlbnNlZCBpbmNsdWRlcyBhbnkgaW5kaXZpZHVhbCBlbGVtZW50cyBvZiB0aGUKKyAgRGF0YWJhc2UsIGJ1dCBkb2VzIG5vdCBjb3ZlciB0aGUgY29weXJpZ2h0IG92ZXIgdGhlIENvbnRlbnRzCisgIGluZGVwZW5kZW50IG9mIHRoaXMgRGF0YWJhc2UuIFNlZSBTZWN0aW9uIDIuNCBmb3IgZGV0YWlscy4gQ29weXJpZ2h0CisgIGxhdyB2YXJpZXMgYmV0d2VlbiBqdXJpc2RpY3Rpb25zLCBidXQgaXMgbGlrZWx5IHRvIGNvdmVyOiB0aGUgRGF0YWJhc2UKKyAgbW9kZWwgb3Igc2NoZW1hLCB3aGljaCBpcyB0aGUgc3RydWN0dXJlLCBhcnJhbmdlbWVudCwgYW5kIG9yZ2FuaXNhdGlvbgorICBvZiB0aGUgRGF0YWJhc2UsIGFuZCBjYW4gYWxzbyBpbmNsdWRlIHRoZSBEYXRhYmFzZSB0YWJsZXMgYW5kIHRhYmxlCisgIGluZGV4ZXM7IHRoZSBkYXRhIGVudHJ5IGFuZCBvdXRwdXQgc2hlZXRzOyBhbmQgdGhlIEZpZWxkIG5hbWVzIG9mCisgIENvbnRlbnRzIHN0b3JlZCBpbiB0aGUgRGF0YWJhc2U7CisKKyAgYi4gRGF0YWJhc2UgUmlnaHRzLiBEYXRhYmFzZSBSaWdodHMgb25seSBleHRlbmQgdG8gdGhlIEV4dHJhY3Rpb24gYW5kCisgIFJlLXV0aWxpc2F0aW9uIG9mIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzLgorICBEYXRhYmFzZSBSaWdodHMgY2FuIGFwcGx5IGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBjb3B5cmlnaHQgb3ZlciB0aGUKKyAgRGF0YWJhc2UuIERhdGFiYXNlIFJpZ2h0cyBjYW4gYWxzbyBhcHBseSB3aGVuIHRoZSBDb250ZW50cyBhcmUgcmVtb3ZlZAorICBmcm9tIHRoZSBEYXRhYmFzZSBhbmQgYXJlIHNlbGVjdGVkIGFuZCBhcnJhbmdlZCBpbiBhIHdheSB0aGF0IHdvdWxkCisgIG5vdCBpbmZyaW5nZSBhbnkgYXBwbGljYWJsZSBjb3B5cmlnaHQ7IGFuZAorCisgIGMuIENvbnRyYWN0LiBUaGlzIGlzIGFuIGFncmVlbWVudCBiZXR3ZWVuIFlvdSBhbmQgdGhlIExpY2Vuc29yIGZvcgorICBhY2Nlc3MgdG8gdGhlIERhdGFiYXNlLiBJbiByZXR1cm4geW91IGFncmVlIHRvIGNlcnRhaW4gY29uZGl0aW9ucyBvZgorICB1c2Ugb24gdGhpcyBhY2Nlc3MgYXMgb3V0bGluZWQgaW4gdGhpcyBMaWNlbnNlLiAKKworMi4zIFJpZ2h0cyBub3QgY292ZXJlZC4gCisKKyAgYS4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGFwcGx5IHRvIGNvbXB1dGVyIHByb2dyYW1zIHVzZWQgaW4gdGhlIG1ha2luZworICBvciBvcGVyYXRpb24gb2YgdGhlIERhdGFiYXNlOyAKKworICBiLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgY292ZXIgYW55IHBhdGVudHMgb3ZlciB0aGUgQ29udGVudHMgb3IgdGhlCisgIERhdGFiYXNlOyBhbmQKKworICBjLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgY292ZXIgYW55IHRyYWRlbWFya3MgYXNzb2NpYXRlZCB3aXRoIHRoZQorICBEYXRhYmFzZS4gCisKKzIuNCBSZWxhdGlvbnNoaXAgdG8gQ29udGVudHMgaW4gdGhlIERhdGFiYXNlLiBUaGUgaW5kaXZpZHVhbCBpdGVtcyBvZgordGhlIENvbnRlbnRzIGNvbnRhaW5lZCBpbiB0aGlzIERhdGFiYXNlIG1heSBiZSBjb3ZlcmVkIGJ5IG90aGVyIHJpZ2h0cywKK2luY2x1ZGluZyBjb3B5cmlnaHQsIHBhdGVudCwgZGF0YSBwcm90ZWN0aW9uLCBwcml2YWN5LCBvciBwZXJzb25hbGl0eQorcmlnaHRzLCBhbmQgdGhpcyBMaWNlbnNlIGRvZXMgbm90IGNvdmVyIGFueSByaWdodHMgKG90aGVyIHRoYW4gRGF0YWJhc2UKK1JpZ2h0cyBvciBpbiBjb250cmFjdCkgaW4gaW5kaXZpZHVhbCBDb250ZW50cyBjb250YWluZWQgaW4gdGhlIERhdGFiYXNlLgorRm9yIGV4YW1wbGUsIGlmIHVzZWQgb24gYSBEYXRhYmFzZSBvZiBpbWFnZXMgKHRoZSBDb250ZW50cyksIHRoaXMKK0xpY2Vuc2Ugd291bGQgbm90IGFwcGx5IHRvIGNvcHlyaWdodCBvdmVyIGluZGl2aWR1YWwgaW1hZ2VzLCB3aGljaCBjb3VsZAoraGF2ZSB0aGVpciBvd24gc2VwYXJhdGUgbGljZW5zZXMsIG9yIG9uZSBzaW5nbGUgbGljZW5zZSBjb3ZlcmluZyBhbGwgb2YKK3RoZSByaWdodHMgb3ZlciB0aGUgaW1hZ2VzLiAgCisKKyMjIyAzLjAgUmlnaHRzIGdyYW50ZWQKKworMy4xIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhlIExpY2Vuc29yCitncmFudHMgdG8gWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHRlcm1pbmFibGUgKGJ1dAorb25seSB1bmRlciBTZWN0aW9uIDkpIGxpY2Vuc2UgdG8gVXNlIHRoZSBEYXRhYmFzZSBmb3IgdGhlIGR1cmF0aW9uIG9mCithbnkgYXBwbGljYWJsZSBjb3B5cmlnaHQgYW5kIERhdGFiYXNlIFJpZ2h0cy4gVGhlc2UgcmlnaHRzIGV4cGxpY2l0bHkKK2luY2x1ZGUgY29tbWVyY2lhbCB1c2UsIGFuZCBkbyBub3QgZXhjbHVkZSBhbnkgZmllbGQgb2YgZW5kZWF2b3VyLiBUbwordGhlIGV4dGVudCBwb3NzaWJsZSBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uLCB0aGVzZSByaWdodHMgbWF5IGJlCitleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGNyZWF0ZWQgaW4gdGhlCitmdXR1cmUuIAorCitUaGUgcmlnaHRzIGdyYW50ZWQgY292ZXIsIGZvciBleGFtcGxlOgorCisgIGEuIEV4dHJhY3Rpb24gYW5kIFJlLXV0aWxpc2F0aW9uIG9mIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YKKyAgdGhlIENvbnRlbnRzOworCisgIGIuIENyZWF0aW9uIG9mIERlcml2YXRpdmUgRGF0YWJhc2VzOworCisgIGMuIENyZWF0aW9uIG9mIENvbGxlY3RpdmUgRGF0YWJhc2VzOworCisgIGQuIENyZWF0aW9uIG9mIHRlbXBvcmFyeSBvciBwZXJtYW5lbnQgcmVwcm9kdWN0aW9ucyBieSBhbnkgbWVhbnMgYW5kCisgIGluIGFueSBmb3JtLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBpbmNsdWRpbmcgb2YgYW55IERlcml2YXRpdmUKKyAgRGF0YWJhc2VzIG9yIGFzIGEgcGFydCBvZiBDb2xsZWN0aXZlIERhdGFiYXNlczsgYW5kCisKKyAgZS4gRGlzdHJpYnV0aW9uLCBjb21tdW5pY2F0aW9uLCBkaXNwbGF5LCBsZW5kaW5nLCBtYWtpbmcgYXZhaWxhYmxlLCBvcgorICBwZXJmb3JtYW5jZSB0byB0aGUgcHVibGljIGJ5IGFueSBtZWFucyBhbmQgaW4gYW55IGZvcm0sIGluIHdob2xlIG9yIGluCisgIHBhcnQsIGluY2x1ZGluZyBvZiBhbnkgRGVyaXZhdGl2ZSBEYXRhYmFzZSBvciBhcyBhIHBhcnQgb2YgQ29sbGVjdGl2ZQorICBEYXRhYmFzZXMuCisKKzMuMiBDb21wdWxzb3J5IGxpY2Vuc2Ugc2NoZW1lcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6CisKKyAgYS4gTm9uLXdhaXZhYmxlIGNvbXB1bHNvcnkgbGljZW5zZSBzY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluCisgIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IKKyAgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcworICB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3UKKyAgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsKKworICBiLiBXYWl2YWJsZSBjb21wdWxzb3J5IGxpY2Vuc2Ugc2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbgorICB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yCisgIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3Igd2FpdmVzIHRoZQorICBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZgorICB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOyBhbmQsCisKKyAgYy4gVm9sdW50YXJ5IGxpY2Vuc2Ugc2NoZW1lcy4gVGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdAorICByb3lhbHRpZXMsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zb3IgaXMKKyAgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW5nIHNvY2lldHkgdGhhdCBhZG1pbmlzdGVycyB2b2x1bnRhcnkgbGljZW5zaW5nCisgIHNjaGVtZXMsIHZpYSB0aGF0IHNvY2lldHksIGZyb20gYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzCisgIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCiszLjMgVGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIERhdGFiYXNlIHVuZGVyIGRpZmZlcmVudCB0ZXJtcywgb3IgdG8gc3RvcAorZGlzdHJpYnV0aW5nIG9yIG1ha2luZyBhdmFpbGFibGUgdGhlIERhdGFiYXNlLCBpcyByZXNlcnZlZC4gTm90ZSB0aGF0Cit0aGlzIERhdGFiYXNlIG1heSBiZSBtdWx0aXBsZS1saWNlbnNlZCwgYW5kIHNvIFlvdSBtYXkgaGF2ZSB0aGUgY2hvaWNlCitvZiB1c2luZyBhbHRlcm5hdGl2ZSBsaWNlbnNlcyBmb3IgdGhpcyBEYXRhYmFzZS4gU3ViamVjdCB0byBTZWN0aW9uCisxMC40LCBhbGwgb3RoZXIgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgcmVzZXJ2ZWQuCisKKyMjIyA0LjAgQ29uZGl0aW9ucyBvZiBVc2UKKworNC4xIFRoZSByaWdodHMgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgYXJlIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8KK1lvdXIgY29tcGx5aW5nIHdpdGggdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIG9mIHVzZS4gVGhlc2UgYXJlIGltcG9ydGFudAorY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBpZiBZb3UgZmFpbCB0byBmb2xsb3cgdGhlbSwgWW91IHdpbGwgYmUKK2luIG1hdGVyaWFsIGJyZWFjaCBvZiBpdHMgdGVybXMuCisKKzQuMiBOb3RpY2VzLiBJZiBZb3UgUHVibGljbHkgQ29udmV5IHRoaXMgRGF0YWJhc2UsIGFueSBEZXJpdmF0aXZlCitEYXRhYmFzZSwgb3IgdGhlIERhdGFiYXNlIGFzIHBhcnQgb2YgYSBDb2xsZWN0aXZlIERhdGFiYXNlLCB0aGVuIFlvdQorbXVzdDogCisKKyAgYS4gRG8gc28gb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGFub3RoZXIgbGljZW5zZQorICBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA0LjQ7CisKKyAgYi4gSW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIChvciwgYXMgYXBwbGljYWJsZSwgYSBsaWNlbnNlCisgIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQuNCkgb3IgaXRzIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKQorICB3aXRoIHRoZSBEYXRhYmFzZSBvciBEZXJpdmF0aXZlIERhdGFiYXNlLCBpbmNsdWRpbmcgYm90aCBpbiB0aGUKKyAgRGF0YWJhc2Ugb3IgRGVyaXZhdGl2ZSBEYXRhYmFzZSBhbmQgaW4gYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb247IGFuZAorCisgIGMuIEtlZXAgaW50YWN0IGFueSBjb3B5cmlnaHQgb3IgRGF0YWJhc2UgUmlnaHQgbm90aWNlcyBhbmQgbm90aWNlcworICB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZS4KKworICBkLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHRoZSByZXF1aXJlZCBub3RpY2VzIGluIGEgcGFydGljdWxhcgorICBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgdGhlIG5vdGljZXMgaW4gYQorICBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgdXNlcnMgd291bGQgYmUgbGlrZWx5IHRvCisgIGxvb2sgZm9yIGl0LgorCis0LjMgTm90aWNlIGZvciB1c2luZyBvdXRwdXQgKENvbnRlbnRzKS4gQ3JlYXRpbmcgYW5kIFVzaW5nIGEgUHJvZHVjZWQKK1dvcmsgZG9lcyBub3QgcmVxdWlyZSB0aGUgbm90aWNlIGluIFNlY3Rpb24gNC4yLiBIb3dldmVyLCBpZiB5b3UKK1B1YmxpY2x5IFVzZSBhIFByb2R1Y2VkIFdvcmssIFlvdSBtdXN0IGluY2x1ZGUgYSBub3RpY2UgYXNzb2NpYXRlZCB3aXRoCit0aGUgUHJvZHVjZWQgV29yayByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gbWFrZSBhbnkgUGVyc29uIHRoYXQgdXNlcywKK3ZpZXdzLCBhY2Nlc3NlcywgaW50ZXJhY3RzIHdpdGgsIG9yIGlzIG90aGVyd2lzZSBleHBvc2VkIHRvIHRoZSBQcm9kdWNlZAorV29yayBhd2FyZSB0aGF0IENvbnRlbnQgd2FzIG9idGFpbmVkIGZyb20gdGhlIERhdGFiYXNlLCBEZXJpdmF0aXZlCitEYXRhYmFzZSwgb3IgdGhlIERhdGFiYXNlIGFzIHBhcnQgb2YgYSBDb2xsZWN0aXZlIERhdGFiYXNlLCBhbmQgdGhhdCBpdAoraXMgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICBhLiBFeGFtcGxlIG5vdGljZS4gVGhlIGZvbGxvd2luZyB0ZXh0IHdpbGwgc2F0aXNmeSBub3RpY2UgdW5kZXIKKyAgU2VjdGlvbiA0LjM6CisKKyAgICAgICAgQ29udGFpbnMgaW5mb3JtYXRpb24gZnJvbSBEQVRBQkFTRSBOQU1FLCB3aGljaCBpcyBtYWRlIGF2YWlsYWJsZQorICAgICAgICBoZXJlIHVuZGVyIHRoZSBPcGVuIERhdGFiYXNlIExpY2Vuc2UgKE9EYkwpLgorCitEQVRBQkFTRSBOQU1FIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBEYXRhYmFzZSBhbmQgYQoraHlwZXJsaW5rIHRvIHRoZSBVUkkgb2YgdGhlIERhdGFiYXNlLiAiT3BlbiBEYXRhYmFzZSBMaWNlbnNlIiBzaG91bGQKK2NvbnRhaW4gYSBoeXBlcmxpbmsgdG8gdGhlIFVSSSBvZiB0aGUgdGV4dCBvZiB0aGlzIExpY2Vuc2UuIElmCitoeXBlcmxpbmtzIGFyZSBub3QgcG9zc2libGUsIFlvdSBzaG91bGQgaW5jbHVkZSB0aGUgcGxhaW4gdGV4dCBvZiB0aGUKK3JlcXVpcmVkIFVSSWBzIHdpdGggdGhlIGFib3ZlIG5vdGljZS4KKyAKKzQuNCBTaGFyZSBhbGlrZS4gCisKKyAgYS4gQW55IERlcml2YXRpdmUgRGF0YWJhc2UgdGhhdCBZb3UgUHVibGljbHkgVXNlIG11c3QgYmUgb25seSB1bmRlcgorICB0aGUgdGVybXMgb2Y6IAorCisgICAgaS4gVGhpcyBMaWNlbnNlOworCisgICAgaWkuIEEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhpcworICAgICAgTGljZW5zZTsgb3IKKworICAgIGlpaS4gQSBjb21wYXRpYmxlIGxpY2Vuc2UuIAorCisgIElmIFlvdSBsaWNlbnNlIHRoZSBEZXJpdmF0aXZlIERhdGFiYXNlIHVuZGVyIG9uZSBvZiB0aGUgbGljZW5zZXMKKyAgbWVudGlvbmVkIGluIChpaWkpLCBZb3UgbXVzdCBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbnNlLiAKKworICBiLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgRXh0cmFjdGlvbiBvciBSZS11dGlsaXNhdGlvbiBvZiB0aGUKKyAgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cyBpbnRvIGEgbmV3IGRhdGFiYXNlIGlzIGEKKyAgRGVyaXZhdGl2ZSBEYXRhYmFzZSBhbmQgbXVzdCBjb21wbHkgd2l0aCBTZWN0aW9uIDQuNC4gCisKKyAgYy4gRGVyaXZhdGl2ZSBEYXRhYmFzZXMgYW5kIFByb2R1Y2VkIFdvcmtzLiAgQSBEZXJpdmF0aXZlIERhdGFiYXNlIGlzCisgIFB1YmxpY2x5IFVzZWQgYW5kIHNvIG11c3QgY29tcGx5IHdpdGggU2VjdGlvbiA0LjQuIGlmIGEgUHJvZHVjZWQgV29yaworICBjcmVhdGVkIGZyb20gdGhlIERlcml2YXRpdmUgRGF0YWJhc2UgaXMgUHVibGljbHkgVXNlZC4KKworICBkLiBTaGFyZSBBbGlrZSBhbmQgYWRkaXRpb25hbCBDb250ZW50cy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsCisgIFlvdSBtdXN0IG5vdCBhZGQgQ29udGVudHMgdG8gRGVyaXZhdGl2ZSBEYXRhYmFzZXMgdW5kZXIgU2VjdGlvbiA0LjQgYQorICB0aGF0IGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAKKworICBlLiBDb21wYXRpYmxlIGxpY2Vuc2VzLiBMaWNlbnNvcnMgbWF5IGF1dGhvcmlzZSBhIHByb3h5IHRvIGRldGVybWluZQorICBjb21wYXRpYmxlIGxpY2Vuc2VzIHVuZGVyIFNlY3Rpb24gNC40IGEgaWlpLiBJZiB0aGV5IGRvIHNvLCB0aGUKKyAgYXV0aG9yaXNlZCBwcm94eWBzIHB1YmxpYyBzdGF0ZW1lbnQgb2YgYWNjZXB0YW5jZSBvZiBhIGNvbXBhdGlibGUKKyAgbGljZW5zZSBncmFudHMgWW91IHBlcm1pc3Npb24gdG8gdXNlIHRoZSBjb21wYXRpYmxlIGxpY2Vuc2UuCisKKworNC41IExpbWl0cyBvZiBTaGFyZSBBbGlrZS4gIFRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiA0LjQgZG8gbm90IGFwcGx5CitpbiB0aGUgZm9sbG93aW5nOgorCisgIGEuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBsaWNlbnNlCisgIENvbGxlY3RpdmUgRGF0YWJhc2VzIHVuZGVyIHRoaXMgTGljZW5zZSBpZiBZb3UgaW5jb3Jwb3JhdGUgdGhpcworICBEYXRhYmFzZSBvciBhIERlcml2YXRpdmUgRGF0YWJhc2UgaW4gdGhlIGNvbGxlY3Rpb24sIGJ1dCB0aGlzIExpY2Vuc2UKKyAgc3RpbGwgYXBwbGllcyB0byB0aGlzIERhdGFiYXNlIG9yIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBhcyBhIHBhcnQgb2YKKyAgdGhlIENvbGxlY3RpdmUgRGF0YWJhc2U7IAorCisgIGIuIFVzaW5nIHRoaXMgRGF0YWJhc2UsIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSwgb3IgdGhpcyBEYXRhYmFzZSBhcworICBwYXJ0IG9mIGEgQ29sbGVjdGl2ZSBEYXRhYmFzZSB0byBjcmVhdGUgYSBQcm9kdWNlZCBXb3JrIGRvZXMgbm90CisgIGNyZWF0ZSBhIERlcml2YXRpdmUgRGF0YWJhc2UgZm9yIHB1cnBvc2VzIG9mICBTZWN0aW9uIDQuNDsgYW5kCisKKyAgYy4gVXNlIG9mIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBpbnRlcm5hbGx5IHdpdGhpbiBhbiBvcmdhbmlzYXRpb24gaXMKKyAgbm90IHRvIHRoZSBwdWJsaWMgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBmYWxsIHVuZGVyIHRoZSByZXF1aXJlbWVudHMKKyAgb2YgU2VjdGlvbiA0LjQuCisKKzQuNiBBY2Nlc3MgdG8gRGVyaXZhdGl2ZSBEYXRhYmFzZXMuIElmIFlvdSBQdWJsaWNseSBVc2UgYSBEZXJpdmF0aXZlCitEYXRhYmFzZSBvciBhIFByb2R1Y2VkIFdvcmsgZnJvbSBhIERlcml2YXRpdmUgRGF0YWJhc2UsIFlvdSBtdXN0IGFsc28KK29mZmVyIHRvIHJlY2lwaWVudHMgb2YgdGhlIERlcml2YXRpdmUgRGF0YWJhc2Ugb3IgUHJvZHVjZWQgV29yayBhIGNvcHkKK2luIGEgbWFjaGluZSByZWFkYWJsZSBmb3JtIG9mOgorCisgIGEuIFRoZSBlbnRpcmUgRGVyaXZhdGl2ZSBEYXRhYmFzZTsgb3IKKworICBiLiBBIGZpbGUgY29udGFpbmluZyBhbGwgb2YgdGhlIGFsdGVyYXRpb25zIG1hZGUgdG8gdGhlIERhdGFiYXNlIG9yCisgIHRoZSBtZXRob2Qgb2YgbWFraW5nIHRoZSBhbHRlcmF0aW9ucyB0byB0aGUgRGF0YWJhc2UgKHN1Y2ggYXMgYW4KKyAgYWxnb3JpdGhtKSwgaW5jbHVkaW5nIGFueSBhZGRpdGlvbmFsIENvbnRlbnRzLCB0aGF0IG1ha2UgdXAgYWxsIHRoZQorICBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBEYXRhYmFzZSBhbmQgdGhlIERlcml2YXRpdmUgRGF0YWJhc2UuCisKK1RoZSBEZXJpdmF0aXZlIERhdGFiYXNlICh1bmRlciBhLikgb3IgYWx0ZXJhdGlvbiBmaWxlICh1bmRlciBiLikgbXVzdCBiZQorYXZhaWxhYmxlIGF0IG5vIG1vcmUgdGhhbiBhIHJlYXNvbmFibGUgcHJvZHVjdGlvbiBjb3N0IGZvciBwaHlzaWNhbAorZGlzdHJpYnV0aW9ucyBhbmQgZnJlZSBvZiBjaGFyZ2UgaWYgZGlzdHJpYnV0ZWQgb3ZlciB0aGUgaW50ZXJuZXQuCisKKzQuNyBUZWNobm9sb2dpY2FsIG1lYXN1cmVzIGFuZCBhZGRpdGlvbmFsIHRlcm1zCisKKyAgYS4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGFsbG93IFlvdSB0byBpbXBvc2UgKGV4Y2VwdCBzdWJqZWN0IHRvCisgIFNlY3Rpb24gNC43IGIuKSAgYW55IHRlcm1zIG9yIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZQorICBEYXRhYmFzZSwgYSBEZXJpdmF0aXZlIERhdGFiYXNlLCBvciB0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mCisgIHRoZSBDb250ZW50cyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIG9yIGFueQorICByaWdodHMgZ3JhbnRlZCB1bmRlciBpdCwgb3IgaGF2ZSB0aGUgZWZmZWN0IG9yIGludGVudCBvZiByZXN0cmljdGluZworICB0aGUgYWJpbGl0eSBvZiBhbnkgcGVyc29uIHRvIGV4ZXJjaXNlIHRob3NlIHJpZ2h0cy4KKworICBiLiBQYXJhbGxlbCBkaXN0cmlidXRpb24uIFlvdSBtYXkgaW1wb3NlIHRlcm1zIG9yIHRlY2hub2xvZ2ljYWwKKyAgbWVhc3VyZXMgb24gdGhlIERhdGFiYXNlLCBhIERlcml2YXRpdmUgRGF0YWJhc2UsIG9yIHRoZSB3aG9sZSBvciBhCisgIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzIChhICJSZXN0cmljdGVkIERhdGFiYXNlIikgaW4KKyAgY29udHJhdmVudGlvbiBvZiBTZWN0aW9uIDQuNzQgYS4gb25seSBpZiBZb3UgYWxzbyBtYWtlIGEgY29weSBvZiB0aGUKKyAgRGF0YWJhc2Ugb3IgYSBEZXJpdmF0aXZlIERhdGFiYXNlIGF2YWlsYWJsZSB0byB0aGUgcmVjaXBpZW50IG9mIHRoZQorICBSZXN0cmljdGVkIERhdGFiYXNlOgorCisgICAgaS4gVGhhdCBpcyBhdmFpbGFibGUgd2l0aG91dCBhZGRpdGlvbmFsIGZlZTsKKworICAgIGlpLiBUaGF0IGlzIGF2YWlsYWJsZSBpbiBhIG1lZGl1bSB0aGF0IGRvZXMgbm90IGFsdGVyIG9yIHJlc3RyaWN0CisgICAgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgb3IgYW55IHJpZ2h0cyBncmFudGVkIHVuZGVyIGl0LCBvciBoYXZlCisgICAgdGhlIGVmZmVjdCBvciBpbnRlbnQgb2YgcmVzdHJpY3RpbmcgdGhlIGFiaWxpdHkgb2YgYW55IHBlcnNvbiB0bworICAgIGV4ZXJjaXNlIHRob3NlIHJpZ2h0cyAoYW4gIlVucmVzdHJpY3RlZCBEYXRhYmFzZSIpOyBhbmQKKworICAgIGlpaS4gVGhlIFVucmVzdHJpY3RlZCBEYXRhYmFzZSBpcyBhdCBsZWFzdCBhcyBhY2Nlc3NpYmxlIHRvIHRoZQorICAgIHJlY2lwaWVudCBhcyBhIHByYWN0aWNhbCBtYXR0ZXIgYXMgdGhlIFJlc3RyaWN0ZWQgRGF0YWJhc2UuCisKKyAgYy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgcGxhY2UgdGhpcyBEYXRhYmFzZSBvciBhCisgIERlcml2YXRpdmUgRGF0YWJhc2UgaW4gYW4gYXV0aGVudGljYXRlZCBlbnZpcm9ubWVudCwgYmVoaW5kIGEKKyAgcGFzc3dvcmQsIG9yIHdpdGhpbiBhIHNpbWlsYXIgYWNjZXNzIGNvbnRyb2wgc2NoZW1lIHByb3ZpZGVkIHRoYXQgWW91CisgIGRvIG5vdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGFueSByaWdodHMKKyAgZ3JhbnRlZCB1bmRlciBpdCBvciBoYXZlIHRoZSBlZmZlY3Qgb3IgaW50ZW50IG9mIHJlc3RyaWN0aW5nIHRoZQorICBhYmlsaXR5IG9mIGFueSBwZXJzb24gdG8gZXhlcmNpc2UgdGhvc2UgcmlnaHRzLiAKKworNC44IExpY2Vuc2luZyBvZiBvdGhlcnMuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIERhdGFiYXNlLiBFYWNoIHRpbWUKK1lvdSBjb21tdW5pY2F0ZSB0aGUgRGF0YWJhc2UsIHRoZSB3aG9sZSBvciBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZQorQ29udGVudHMsIG9yIGFueSBEZXJpdmF0aXZlIERhdGFiYXNlIHRvIGFueW9uZSBlbHNlIGluIGFueSB3YXksIHRoZQorTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBEYXRhYmFzZSBvbiB0aGUgc2FtZQordGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhpcyBMaWNlbnNlLiBZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IKK2VuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UsIGJ1dCBZb3UgbWF5CitlbmZvcmNlIGFueSByaWdodHMgdGhhdCBZb3UgaGF2ZSBvdmVyIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZS4gWW91IGFyZQorc29sZWx5IHJlc3BvbnNpYmxlIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvZiBhIERlcml2YXRpdmUgRGF0YWJhc2UgbWFkZQorYnkgWW91IG9yIGFub3RoZXIgUGVyc29uIGF0IFlvdXIgZGlyZWN0aW9uLiBZb3UgbWF5IG5vdCBpbXBvc2UgYW55CitmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIG9yIGFmZmlybWVkCit1bmRlciB0aGlzIExpY2Vuc2UuCisKKyMjIyA1LjAgTW9yYWwgcmlnaHRzCisKKzUuMSBNb3JhbCByaWdodHMuIFRoaXMgc2VjdGlvbiBjb3ZlcnMgbW9yYWwgcmlnaHRzLCBpbmNsdWRpbmcgYW55IHJpZ2h0cwordG8gYmUgaWRlbnRpZmllZCBhcyB0aGUgYXV0aG9yIG9mIHRoZSBEYXRhYmFzZSBvciB0byBvYmplY3QgdG8gdHJlYXRtZW50Cit0aGF0IHdvdWxkIG90aGVyd2lzZSBwcmVqdWRpY2UgdGhlIGF1dGhvcmBzIGhvbm91ciBhbmQgcmVwdXRhdGlvbiwgb3IKK2FueSBvdGhlciBkZXJvZ2F0b3J5IHRyZWF0bWVudDoKKworICBhLiBGb3IganVyaXNkaWN0aW9ucyBhbGxvd2luZyB3YWl2ZXIgb2YgbW9yYWwgcmlnaHRzLCBMaWNlbnNvciB3YWl2ZXMKKyAgYWxsIG1vcmFsIHJpZ2h0cyB0aGF0IExpY2Vuc29yIG1heSBoYXZlIGluIHRoZSBEYXRhYmFzZSB0byB0aGUgZnVsbGVzdAorICBleHRlbnQgcG9zc2libGUgYnkgdGhlIGxhdyBvZiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIHVuZGVyIFNlY3Rpb24KKyAgMTAuNDsgCisKKyAgYi4gSWYgd2FpdmVyIG9mIG1vcmFsIHJpZ2h0cyB1bmRlciBTZWN0aW9uIDUuMSBhIGluIHRoZSByZWxldmFudAorICBqdXJpc2RpY3Rpb24gaXMgbm90IHBvc3NpYmxlLCBMaWNlbnNvciBhZ3JlZXMgbm90IHRvIGFzc2VydCBhbnkgbW9yYWwKKyAgcmlnaHRzIG92ZXIgdGhlIERhdGFiYXNlIGFuZCB3YWl2ZXMgYWxsIGNsYWltcyBpbiBtb3JhbCByaWdodHMgdG8gdGhlCisgIGZ1bGxlc3QgZXh0ZW50IHBvc3NpYmxlIGJ5IHRoZSBsYXcgb2YgdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiB1bmRlcgorICBTZWN0aW9uIDEwLjQ7IGFuZAorCisgIGMuIEZvciBqdXJpc2RpY3Rpb25zIG5vdCBhbGxvd2luZyB3YWl2ZXIgb3IgYW4gYWdyZWVtZW50IG5vdCB0byBhc3NlcnQKKyAgbW9yYWwgcmlnaHRzIHVuZGVyIFNlY3Rpb24gNS4xIGEgYW5kIGIsIHRoZSBhdXRob3IgbWF5IHJldGFpbiB0aGVpcgorICBtb3JhbCByaWdodHMgb3ZlciBjZXJ0YWluIGFzcGVjdHMgb2YgdGhlIERhdGFiYXNlLgorCitQbGVhc2Ugbm90ZSB0aGF0IHNvbWUganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgZm9yIHRoZSB3YWl2ZXIgb2YgbW9yYWwKK3JpZ2h0cywgYW5kIHNvIG1vcmFsIHJpZ2h0cyBtYXkgc3RpbGwgc3Vic2lzdCBvdmVyIHRoZSBEYXRhYmFzZSBpbiBzb21lCitqdXJpc2RpY3Rpb25zLgorCisjIyMgNi4wIEZhaXIgZGVhbGluZywgRGF0YWJhc2UgZXhjZXB0aW9ucywgYW5kIG90aGVyIHJpZ2h0cyBub3QgYWZmZWN0ZWQgCisKKzYuMSBUaGlzIExpY2Vuc2UgZG9lcyBub3QgYWZmZWN0IGFueSByaWdodHMgdGhhdCBZb3Ugb3IgYW55b25lIGVsc2UgbWF5CitpbmRlcGVuZGVudGx5IGhhdmUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IHRvIG1ha2UgYW55IHVzZSBvZiB0aGlzCitEYXRhYmFzZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbjoKKworICBhLiBFeGNlcHRpb25zIHRvIHRoZSBEYXRhYmFzZSBSaWdodCBpbmNsdWRpbmc6IEV4dHJhY3Rpb24gb2YgQ29udGVudHMKKyAgZnJvbSBub24tZWxlY3Ryb25pYyBEYXRhYmFzZXMgZm9yIHByaXZhdGUgcHVycG9zZXMsIEV4dHJhY3Rpb24gZm9yCisgIHB1cnBvc2VzIG9mIGlsbHVzdHJhdGlvbiBmb3IgdGVhY2hpbmcgb3Igc2NpZW50aWZpYyByZXNlYXJjaCwgYW5kCisgIEV4dHJhY3Rpb24gb3IgUmUtdXRpbGlzYXRpb24gZm9yIHB1YmxpYyBzZWN1cml0eSBvciBhbiBhZG1pbmlzdHJhdGl2ZQorICBvciBqdWRpY2lhbCBwcm9jZWR1cmUuIAorCisgIGIuIEZhaXIgZGVhbGluZywgZmFpciB1c2UsIG9yIGFueSBvdGhlciBsZWdhbGx5IHJlY29nbmlzZWQgbGltaXRhdGlvbgorICBvciBleGNlcHRpb24gdG8gaW5mcmluZ2VtZW50IG9mIGNvcHlyaWdodCBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuIAorCis2LjIgVGhpcyBMaWNlbnNlIGRvZXMgbm90IGFmZmVjdCBhbnkgcmlnaHRzIG9mIGxhd2Z1bCB1c2VycyB0byBFeHRyYWN0CithbmQgUmUtdXRpbGlzZSBpbnN1YnN0YW50aWFsIHBhcnRzIG9mIHRoZSBDb250ZW50cywgZXZhbHVhdGVkCitxdWFudGl0YXRpdmVseSBvciBxdWFsaXRhdGl2ZWx5LCBmb3IgYW55IHB1cnBvc2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZworY3JlYXRpbmcgYSBEZXJpdmF0aXZlIERhdGFiYXNlIChzdWJqZWN0IHRvIG90aGVyIHJpZ2h0cyBvdmVyIHRoZQorQ29udGVudHMsIHNlZSBTZWN0aW9uIDIuNCkuIFRoZSByZXBlYXRlZCBhbmQgc3lzdGVtYXRpYyBFeHRyYWN0aW9uIG9yCitSZS11dGlsaXNhdGlvbiBvZiBpbnN1YnN0YW50aWFsIHBhcnRzIG9mIHRoZSBDb250ZW50cyBtYXkgaG93ZXZlciBhbW91bnQKK3RvIHRoZSBFeHRyYWN0aW9uIG9yIFJlLXV0aWxpc2F0aW9uIG9mIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUKK0NvbnRlbnRzLgorCisjIyMgNy4wIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworNy4xIFRoZSBEYXRhYmFzZSBpcyBsaWNlbnNlZCBieSB0aGUgTGljZW5zb3IgImFzIGlzIiBhbmQgd2l0aG91dCBhbnkKK3dhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzcywgaW1wbGllZCwgb3IgYXJpc2luZyBieSBzdGF0dXRlLAorY3VzdG9tLCBjb3Vyc2Ugb2YgZGVhbGluZywgb3IgdHJhZGUgdXNhZ2UuIExpY2Vuc29yIHNwZWNpZmljYWxseQorZGlzY2xhaW1zIGFueSBhbmQgYWxsIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlLAorbm9uLWluZnJpbmdlbWVudCwgYWNjdXJhY3kgb3IgY29tcGxldGVuZXNzLCB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZgorZXJyb3JzLCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgbWVyY2hhbnRhYmlsaXR5LCBvciBvdGhlcndpc2UuCitTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb2YgaW1wbGllZCB3YXJyYW50aWVzLCBzbwordGhpcyBleGNsdXNpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuCisKKyMjIyA4LjAgTGltaXRhdGlvbiBvZiBsaWFiaWxpdHkKKworOC4xIFN1YmplY3QgdG8gYW55IGxpYWJpbGl0eSB0aGF0IG1heSBub3QgYmUgZXhjbHVkZWQgb3IgbGltaXRlZCBieSBsYXcsCit0aGUgTGljZW5zb3IgaXMgbm90IGxpYWJsZSBmb3IsIGFuZCBleHByZXNzbHkgZXhjbHVkZXMsIGFsbCBsaWFiaWxpdHkKK2ZvciBsb3NzIG9yIGRhbWFnZSBob3dldmVyIGFuZCB3aGVuZXZlciBjYXVzZWQgdG8gYW55b25lIGJ5IGFueSB1c2UKK3VuZGVyIHRoaXMgTGljZW5zZSwgd2hldGhlciBieSBZb3Ugb3IgYnkgYW55b25lIGVsc2UsIGFuZCB3aGV0aGVyIGNhdXNlZAorYnkgYW55IGZhdWx0IG9uIHRoZSBwYXJ0IG9mIHRoZSBMaWNlbnNvciBvciBub3QuIFRoaXMgZXhjbHVzaW9uIG9mCitsaWFiaWxpdHkgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgYW55IHNwZWNpYWwsIGluY2lkZW50YWwsCitjb25zZXF1ZW50aWFsLCBwdW5pdGl2ZSwgb3IgZXhlbXBsYXJ5IGRhbWFnZXMgc3VjaCBhcyBsb3NzIG9mIHJldmVudWUsCitkYXRhLCBhbnRpY2lwYXRlZCBwcm9maXRzLCBhbmQgbG9zdCBidXNpbmVzcy4gVGhpcyBleGNsdXNpb24gYXBwbGllcworZXZlbiBpZiB0aGUgTGljZW5zb3IgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaAorZGFtYWdlcy4KKworOC4yIElmIGxpYWJpbGl0eSBtYXkgbm90IGJlIGV4Y2x1ZGVkIGJ5IGxhdywgaXQgaXMgbGltaXRlZCB0byBhY3R1YWwgYW5kCitkaXJlY3QgZmluYW5jaWFsIGxvc3MgdG8gdGhlIGV4dGVudCBpdCBpcyBjYXVzZWQgYnkgcHJvdmVkIG5lZ2xpZ2VuY2Ugb24KK3RoZSBwYXJ0IG9mIHRoZSBMaWNlbnNvci4KKworIyMjIDkuMCBUZXJtaW5hdGlvbiBvZiBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UKKworOS4xIEFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UKK2F1dG9tYXRpY2FsbHkgdGVybWluYXRlcyB0aGlzIExpY2Vuc2Ugd2l0aCBpbW1lZGlhdGUgZWZmZWN0IGFuZCB3aXRob3V0Citub3RpY2UgdG8gWW91LiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgUGVyc29ucyB3aG8gaGF2ZSByZWNlaXZlZCB0aGUKK0RhdGFiYXNlLCB0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cywgRGVyaXZhdGl2ZQorRGF0YWJhc2VzLCBvciB0aGUgRGF0YWJhc2UgYXMgcGFydCBvZiBhIENvbGxlY3RpdmUgRGF0YWJhc2UgZnJvbSBZb3UKK3VuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQKK3RoZWlyIHVzZSBpcyBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIExpY2Vuc2Ugb3IgYSBsaWNlbnNlIGdyYW50ZWQKK3VuZGVyIFNlY3Rpb24gNC44IG9mIHRoaXMgTGljZW5zZS4gIFNlY3Rpb25zIDEsIDIsIDcsIDgsIDkgYW5kIDEwIHdpbGwKK3N1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworOS4yIElmIFlvdSBhcmUgbm90IGluIGJyZWFjaCBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgTGljZW5zb3IKK3dpbGwgbm90IHRlcm1pbmF0ZSBZb3VyIHJpZ2h0cyB1bmRlciBpdC4gCisKKzkuMyBVbmxlc3MgdGVybWluYXRlZCB1bmRlciBTZWN0aW9uIDkuMSwgdGhpcyBMaWNlbnNlIGlzIGdyYW50ZWQgdG8gWW91Citmb3IgdGhlIGR1cmF0aW9uIG9mIGFwcGxpY2FibGUgcmlnaHRzIGluIHRoZSBEYXRhYmFzZS4gCisKKzkuNCBSZWluc3RhdGVtZW50IG9mIHJpZ2h0cy4gSWYgeW91IGNlYXNlIGFueSBicmVhY2ggb2YgdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91ciBmdWxsIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UKK3dpbGwgYmUgcmVpbnN0YXRlZDoKKworICBhLiBQcm92aXNpb25hbGx5IGFuZCBzdWJqZWN0IHRvIHBlcm1hbmVudCB0ZXJtaW5hdGlvbiB1bnRpbCB0aGUgNjB0aAorICBkYXkgYWZ0ZXIgY2Vzc2F0aW9uIG9mIGJyZWFjaDsgCisKKyAgYi4gUGVybWFuZW50bHkgb24gdGhlIDYwdGggZGF5IGFmdGVyIGNlc3NhdGlvbiBvZiBicmVhY2ggdW5sZXNzCisgIG90aGVyd2lzZSByZWFzb25hYmx5IG5vdGlmaWVkIGJ5IHRoZSBMaWNlbnNvcjsgb3IKKworICBjLiAgUGVybWFuZW50bHkgaWYgcmVhc29uYWJseSBub3RpZmllZCBieSB0aGUgTGljZW5zb3Igb2YgdGhlCisgIHZpb2xhdGlvbiwgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSBZb3UgaGF2ZSByZWNlaXZlZCBub3RpY2Ugb2YKKyAgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSBmcm9tICB0aGUgTGljZW5zb3IsIGFuZCBZb3UgY3VyZSB0aGUKKyAgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIgeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKK1BlcnNvbnMgc3ViamVjdCB0byBwZXJtYW5lbnQgdGVybWluYXRpb24gb2YgcmlnaHRzIGFyZSBub3QgZWxpZ2libGUgdG8KK2JlIGEgcmVjaXBpZW50IGFuZCByZWNlaXZlIGEgbGljZW5zZSB1bmRlciBTZWN0aW9uIDQuOC4KKworOS41IE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlCit0aGUgRGF0YWJhc2UgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgb3IKK21ha2luZyBhdmFpbGFibGUgdGhlIERhdGFiYXNlLiBSZWxlYXNpbmcgdGhlIERhdGFiYXNlIHVuZGVyIGRpZmZlcmVudAorbGljZW5zZSB0ZXJtcyBvciBzdG9wcGluZyB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBEYXRhYmFzZSB3aWxsIG5vdAord2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcworcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzCitMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzCitzdGF0ZWQgYWJvdmUuCisKKyMjIyAxMC4wIEdlbmVyYWwKKworMTAuMSBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIGludmFsaWQgb3IKK3VuZW5mb3JjZWFibGUsIHRoYXQgbXVzdCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZgordGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIGFuZCBlYWNoCityZW1haW5pbmcgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSB2YWxpZCBhbmQgZW5mb3JjZWQgdG8gdGhlCitmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LiAKKworMTAuMiBUaGlzIExpY2Vuc2UgaXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoCityZXNwZWN0IHRvIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlIG92ZXIgdGhlIERhdGFiYXNlLiBJdCByZXBsYWNlcyBhbnkKK2VhcmxpZXIgdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0bwordGhlIERhdGFiYXNlLiAKKworMTAuMyBJZiBZb3UgYXJlIGluIGJyZWFjaCBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBZb3Ugd2lsbCBub3QgYmUKK2VudGl0bGVkIHRvIHJlbHkgb24gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0byBjb21wbGFpbiBvZiBhbnkKK2JyZWFjaCBieSB0aGUgTGljZW5zb3IuIAorCisxMC40IENob2ljZSBvZiBsYXcuIFRoaXMgTGljZW5zZSB0YWtlcyBlZmZlY3QgaW4gYW5kIHdpbGwgYmUgZ292ZXJuZWQgYnkKK3RoZSBsYXdzIG9mIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlCitzb3VnaHQgdG8gYmUgZW5mb3JjZWQuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlcgorYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGFuZCBEYXRhYmFzZSBSaWdodHMgaW4gdGhlIHJlbGV2YW50CitqdXJpc2RpY3Rpb24gaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLAordGhlc2UgYWRkaXRpb25hbCByaWdodHMgYXJlIGdyYW50ZWQgaW4gdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIG1lZXQgdGhlCit0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PRkwtMS4xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PRkwtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NDRiY2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09GTC0xLjEKQEAgLTAsMCArMSw4OCBAQAorCitTSUwgT1BFTiBGT05UIExJQ0VOU0UKKworVmVyc2lvbiAxLjEgLSAyNiBGZWJydWFyeSAyMDA3CisKK1BSRUFNQkxFCitUaGUgZ29hbHMgb2YgdGhlIE9wZW4gRm9udCBMaWNlbnNlIChPRkwpIGFyZSB0byBzdGltdWxhdGUgd29ybGR3aWRlCitkZXZlbG9wbWVudCBvZiBjb2xsYWJvcmF0aXZlIGZvbnQgcHJvamVjdHMsIHRvIHN1cHBvcnQgdGhlIGZvbnQgY3JlYXRpb24KK2VmZm9ydHMgb2YgYWNhZGVtaWMgYW5kIGxpbmd1aXN0aWMgY29tbXVuaXRpZXMsIGFuZCB0byBwcm92aWRlIGEgZnJlZSBhbmQKK29wZW4gZnJhbWV3b3JrIGluIHdoaWNoIGZvbnRzIG1heSBiZSBzaGFyZWQgYW5kIGltcHJvdmVkIGluIHBhcnRuZXJzaGlwCit3aXRoIG90aGVycy4KKworVGhlIE9GTCBhbGxvd3MgdGhlIGxpY2Vuc2VkIGZvbnRzIHRvIGJlIHVzZWQsIHN0dWRpZWQsIG1vZGlmaWVkIGFuZAorcmVkaXN0cmlidXRlZCBmcmVlbHkgYXMgbG9uZyBhcyB0aGV5IGFyZSBub3Qgc29sZCBieSB0aGVtc2VsdmVzLiBUaGUKK2ZvbnRzLCBpbmNsdWRpbmcgYW55IGRlcml2YXRpdmUgd29ya3MsIGNhbiBiZSBidW5kbGVkLCBlbWJlZGRlZCwgCityZWRpc3RyaWJ1dGVkIGFuZC9vciBzb2xkIHdpdGggYW55IHNvZnR3YXJlIHByb3ZpZGVkIHRoYXQgYW55IHJlc2VydmVkCituYW1lcyBhcmUgbm90IHVzZWQgYnkgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlIGZvbnRzIGFuZCBkZXJpdmF0aXZlcywKK2hvd2V2ZXIsIGNhbm5vdCBiZSByZWxlYXNlZCB1bmRlciBhbnkgb3RoZXIgdHlwZSBvZiBsaWNlbnNlLiBUaGUKK3JlcXVpcmVtZW50IGZvciBmb250cyB0byByZW1haW4gdW5kZXIgdGhpcyBsaWNlbnNlIGRvZXMgbm90IGFwcGx5Cit0byBhbnkgZG9jdW1lbnQgY3JlYXRlZCB1c2luZyB0aGUgZm9udHMgb3IgdGhlaXIgZGVyaXZhdGl2ZXMuCisKK0RFRklOSVRJT05TCisiRm9udCBTb2Z0d2FyZSIgcmVmZXJzIHRvIHRoZSBzZXQgb2YgZmlsZXMgcmVsZWFzZWQgYnkgdGhlIENvcHlyaWdodAorSG9sZGVyKHMpIHVuZGVyIHRoaXMgbGljZW5zZSBhbmQgY2xlYXJseSBtYXJrZWQgYXMgc3VjaC4gVGhpcyBtYXkKK2luY2x1ZGUgc291cmNlIGZpbGVzLCBidWlsZCBzY3JpcHRzIGFuZCBkb2N1bWVudGF0aW9uLgorCisiUmVzZXJ2ZWQgRm9udCBOYW1lIiByZWZlcnMgdG8gYW55IG5hbWVzIHNwZWNpZmllZCBhcyBzdWNoIGFmdGVyIHRoZQorY29weXJpZ2h0IHN0YXRlbWVudChzKS4KKworIk9yaWdpbmFsIFZlcnNpb24iIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBGb250IFNvZnR3YXJlIGNvbXBvbmVudHMgYXMKK2Rpc3RyaWJ1dGVkIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyKHMpLgorCisiTW9kaWZpZWQgVmVyc2lvbiIgcmVmZXJzIHRvIGFueSBkZXJpdmF0aXZlIG1hZGUgYnkgYWRkaW5nIHRvLCBkZWxldGluZywKK29yIHN1YnN0aXR1dGluZyAtLSBpbiBwYXJ0IG9yIGluIHdob2xlIC0tIGFueSBvZiB0aGUgY29tcG9uZW50cyBvZiB0aGUKK09yaWdpbmFsIFZlcnNpb24sIGJ5IGNoYW5naW5nIGZvcm1hdHMgb3IgYnkgcG9ydGluZyB0aGUgRm9udCBTb2Z0d2FyZSB0byBhCituZXcgZW52aXJvbm1lbnQuCisKKyJBdXRob3IiIHJlZmVycyB0byBhbnkgZGVzaWduZXIsIGVuZ2luZWVyLCBwcm9ncmFtbWVyLCB0ZWNobmljYWwKK3dyaXRlciBvciBvdGhlciBwZXJzb24gd2hvIGNvbnRyaWJ1dGVkIHRvIHRoZSBGb250IFNvZnR3YXJlLgorCitQRVJNSVNTSU9OICYgQ09ORElUSU9OUworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCithIGNvcHkgb2YgdGhlIEZvbnQgU29mdHdhcmUsIHRvIHVzZSwgc3R1ZHksIGNvcHksIG1lcmdlLCBlbWJlZCwgbW9kaWZ5LAorcmVkaXN0cmlidXRlLCBhbmQgc2VsbCBtb2RpZmllZCBhbmQgdW5tb2RpZmllZCBjb3BpZXMgb2YgdGhlIEZvbnQKK1NvZnR3YXJlLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworMSkgTmVpdGhlciB0aGUgRm9udCBTb2Z0d2FyZSBub3IgYW55IG9mIGl0cyBpbmRpdmlkdWFsIGNvbXBvbmVudHMsCitpbiBPcmlnaW5hbCBvciBNb2RpZmllZCBWZXJzaW9ucywgbWF5IGJlIHNvbGQgYnkgaXRzZWxmLgorCisyKSBPcmlnaW5hbCBvciBNb2RpZmllZCBWZXJzaW9ucyBvZiB0aGUgRm9udCBTb2Z0d2FyZSBtYXkgYmUgYnVuZGxlZCwKK3JlZGlzdHJpYnV0ZWQgYW5kL29yIHNvbGQgd2l0aCBhbnkgc29mdHdhcmUsIHByb3ZpZGVkIHRoYXQgZWFjaCBjb3B5Citjb250YWlucyB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBsaWNlbnNlLiBUaGVzZSBjYW4gYmUKK2luY2x1ZGVkIGVpdGhlciBhcyBzdGFuZC1hbG9uZSB0ZXh0IGZpbGVzLCBodW1hbi1yZWFkYWJsZSBoZWFkZXJzIG9yCitpbiB0aGUgYXBwcm9wcmlhdGUgbWFjaGluZS1yZWFkYWJsZSBtZXRhZGF0YSBmaWVsZHMgd2l0aGluIHRleHQgb3IKK2JpbmFyeSBmaWxlcyBhcyBsb25nIGFzIHRob3NlIGZpZWxkcyBjYW4gYmUgZWFzaWx5IHZpZXdlZCBieSB0aGUgdXNlci4KKworMykgTm8gTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRm9udCBTb2Z0d2FyZSBtYXkgdXNlIHRoZSBSZXNlcnZlZCBGb250CitOYW1lKHMpIHVubGVzcyBleHBsaWNpdCB3cml0dGVuIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCBieSB0aGUgY29ycmVzcG9uZGluZworQ29weXJpZ2h0IEhvbGRlci4gVGhpcyByZXN0cmljdGlvbiBvbmx5IGFwcGxpZXMgdG8gdGhlIHByaW1hcnkgZm9udCBuYW1lIGFzCitwcmVzZW50ZWQgdG8gdGhlIHVzZXJzLgorCis0KSBUaGUgbmFtZShzKSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKSBvciB0aGUgQXV0aG9yKHMpIG9mIHRoZSBGb250CitTb2Z0d2FyZSBzaGFsbCBub3QgYmUgdXNlZCB0byBwcm9tb3RlLCBlbmRvcnNlIG9yIGFkdmVydGlzZSBhbnkKK01vZGlmaWVkIFZlcnNpb24sIGV4Y2VwdCB0byBhY2tub3dsZWRnZSB0aGUgY29udHJpYnV0aW9uKHMpIG9mIHRoZQorQ29weXJpZ2h0IEhvbGRlcihzKSBhbmQgdGhlIEF1dGhvcihzKSBvciB3aXRoIHRoZWlyIGV4cGxpY2l0IHdyaXR0ZW4KK3Blcm1pc3Npb24uCisKKzUpIFRoZSBGb250IFNvZnR3YXJlLCBtb2RpZmllZCBvciB1bm1vZGlmaWVkLCBpbiBwYXJ0IG9yIGluIHdob2xlLAorbXVzdCBiZSBkaXN0cmlidXRlZCBlbnRpcmVseSB1bmRlciB0aGlzIGxpY2Vuc2UsIGFuZCBtdXN0IG5vdCBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgYW55IG90aGVyIGxpY2Vuc2UuIFRoZSByZXF1aXJlbWVudCBmb3IgZm9udHMgdG8KK3JlbWFpbiB1bmRlciB0aGlzIGxpY2Vuc2UgZG9lcyBub3QgYXBwbHkgdG8gYW55IGRvY3VtZW50IGNyZWF0ZWQKK3VzaW5nIHRoZSBGb250IFNvZnR3YXJlLgorCitURVJNSU5BVElPTgorVGhpcyBsaWNlbnNlIGJlY29tZXMgbnVsbCBhbmQgdm9pZCBpZiBhbnkgb2YgdGhlIGFib3ZlIGNvbmRpdGlvbnMgYXJlCitub3QgbWV0LgorCitESVNDTEFJTUVSCitUSEUgRk9OVCBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQKK09GIENPUFlSSUdIVCwgUEFURU5ULCBUUkFERU1BUkssIE9SIE9USEVSIFJJR0hULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCitGUk9NLCBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBGT05UIFNPRlRXQVJFIE9SIEZST00KK09USEVSIERFQUxJTkdTIElOIFRIRSBGT05UIFNPRlRXQVJFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09HVFNMIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PR1RTTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTBjYWQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PR1RTTApAQCAtMCwwICsxLDEyMCBAQAorCitUaGUgT3BlbiBHcm91cCBUZXN0IFN1aXRlIExpY2Vuc2UKKworUHJlYW1ibGUKKworVGhlIGludGVudCBvZiB0aGlzIGRvY3VtZW50IGlzIHRvIHN0YXRlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoCithIFBhY2thZ2UgbWF5IGJlIGNvcGllZCwgc3VjaCB0aGF0IHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1haW50YWlucworc29tZSBzZW1ibGFuY2Ugb2YgYXJ0aXN0aWMgY29udHJvbCBvdmVyIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUKK3BhY2thZ2UsIHdoaWxlIGdpdmluZyB0aGUgdXNlcnMgb2YgdGhlIHBhY2thZ2UgdGhlIHJpZ2h0IHRvIHVzZSBhbmQKK2Rpc3RyaWJ1dGUgdGhlIFBhY2thZ2UgaW4gYSBtb3JlLW9yLWxlc3MgY3VzdG9tYXJ5IGZhc2hpb24sIHBsdXMKK3RoZSByaWdodCB0byBtYWtlIHJlYXNvbmFibGUgbW9kaWZpY2F0aW9ucy4KKworVGVzdGluZyBpcyBlc3NlbnRpYWwgZm9yIHByb3BlciBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2Ugb2YKK3N0YW5kYXJkcy1iYXNlZCBwcm9kdWN0cy4KKworRm9yIGJ1eWVyczogYWRlcXVhdGUgY29uZm9ybWFuY2UgdGVzdGluZyBsZWFkcyB0byByZWR1Y2VkCitpbnRlZ3JhdGlvbiBjb3N0cyBhbmQgcHJvdGVjdGlvbiBvZiBpbnZlc3RtZW50cyBpbiBhcHBsaWNhdGlvbnMsCitzb2Z0d2FyZSBhbmQgcGVvcGxlLgorCitGb3Igc29mdHdhcmUgZGV2ZWxvcGVyczogY29uZm9ybWFuY2UgdGVzdGluZyBvZiBwbGF0Zm9ybXMgYW5kCittaWRkbGV3YXJlIGdyZWF0bHkgcmVkdWNlcyB0aGUgY29zdCBvZiBkZXZlbG9waW5nIGFuZCBtYWludGFpbmluZworbXVsdGktcGxhdGZvcm0gYXBwbGljYXRpb24gc29mdHdhcmUuCisKK0ZvciBzdXBwbGllcnM6IEluLWRlcHRoIHRlc3RpbmcgaW5jcmVhc2VzIGN1c3RvbWVyIHNhdGlzZmFjdGlvbiBhbmQKK2tlZXBzIGRldmVsb3BtZW50IGFuZCBzdXBwb3J0IGNvc3RzIGluIGNoZWNrLiBBUEkgY29uZm9ybWFuY2UgaXMKK2hpZ2hseSBtZWFzdXJhYmxlIGFuZCBzdXBwbGllcnMgd2hvIGNsYWltIGl0IG11c3QgYmUgYWJsZSB0bworc3Vic3RhbnRpYXRlIHRoYXQgY2xhaW0uCisKK0FzIHN1Y2gsIHNpbmNlIHRoZXNlIGFyZSBiZW5jaG1hcmsgbWVhc3VyZXMgb2YgY29uZm9ybWFuY2UsIHdlIGZlZWwKK3RoZSBpbnRlZ3JpdHkgb2YgdGVzdCB0b29scyBpcyBvZiBpbXBvcnRhbmNlLiBJbiBvcmRlciB0byBwcmVzZXJ2ZQordGhlIGludGVncml0eSBvZiB0aGUgZXhpc3RpbmcgY29uZm9ybWFuY2UgbW9kZXMgb2YgdGhpcyB0ZXN0CitwYWNrYWdlIGFuZCB0byBwZXJtaXQgcmVjaXBpZW50cyBvZiBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzCitwYWNrYWdlIHRvIHJ1biB0aGUgb3JpZ2luYWwgdGVzdCBtb2RlcywgdGhpcyBsaWNlbnNlIHJlcXVpcmVzIHRoYXQKK3RoZSBvcmlnaW5hbCB0ZXN0IG1vZGVzIGJlIHByZXNlcnZlZC4KKworSWYgeW91IGZpbmQgYSBidWcgaW4gb25lIG9mIHRoZSBzdGFuZGFyZHMgbW9kZSB0ZXN0IGNhc2VzLCBwbGVhc2UKK2xldCB1cyBrbm93IHNvIHdlIGNhbiBmZWVkIHRoaXMgYmFjayBpbnRvIHRoZSBvcmlnaW5hbCwgYW5kIGFsc28KK3JhaXNlIGFueSBzcGVjaWZpY2F0aW9uIGlzc3VlcyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBib2RpZXMgKGZvcgorZXhhbXBsZSB0aGUgUE9TSVggY29tbWl0dGVlcykuCisKK0RlZmluaXRpb25zOiAKKworICAgICAiUGFja2FnZSIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IHRoZQorICAgICBDb3B5cmlnaHQgSG9sZGVyLCBhbmQgZGVyaXZhdGl2ZXMgb2YgdGhhdCBjb2xsZWN0aW9uIG9mIGZpbGVzCisgICAgIGNyZWF0ZWQgdGhyb3VnaCB0ZXh0dWFsIG1vZGlmaWNhdGlvbi4gCisgICAgICJTdGFuZGFyZCBWZXJzaW9uIiByZWZlcnMgdG8gc3VjaCBhIFBhY2thZ2UgaWYgaXQgaGFzIG5vdCBiZWVuCisgICAgIG1vZGlmaWVkLCBvciBoYXMgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHdpc2hlcworICAgICBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlci4gCisgICAgICJDb3B5cmlnaHQgSG9sZGVyIiBpcyB3aG9ldmVyIGlzIG5hbWVkIGluIHRoZSBjb3B5cmlnaHQgb3IKKyAgICAgY29weXJpZ2h0cyBmb3IgdGhlIHBhY2thZ2UuICJZb3UiIGlzIHlvdSwgaWYgeW91YHJlIHRoaW5raW5nCisgICAgIGFib3V0IGNvcHlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoaXMgUGFja2FnZS4gCisgICAgICJSZWFzb25hYmxlIGNvcHlpbmcgZmVlIiBpcyB3aGF0ZXZlciB5b3UgY2FuIGp1c3RpZnkgb24gdGhlCisgICAgIGJhc2lzIG9mIG1lZGlhIGNvc3QsIGR1cGxpY2F0aW9uIGNoYXJnZXMsIHRpbWUgb2YgcGVvcGxlCisgICAgIGludm9sdmVkLCBhbmQgc28gb24uIChZb3Ugd2lsbCBub3QgYmUgcmVxdWlyZWQgdG8ganVzdGlmeSBpdAorICAgICB0byB0aGUgQ29weXJpZ2h0IEhvbGRlciwgYnV0IG9ubHkgdG8gdGhlIGNvbXB1dGluZyBjb21tdW5pdHkKKyAgICAgYXQgbGFyZ2UgYXMgYSBtYXJrZXQgdGhhdCBtdXN0IGJlYXIgdGhlIGZlZS4pIAorICAgICAiRnJlZWx5IEF2YWlsYWJsZSIgbWVhbnMgdGhhdCBubyBmZWUgaXMgY2hhcmdlZCBmb3IgdGhlIGl0ZW0KKyAgICAgaXRzZWxmLCB0aG91Z2ggdGhlcmUgbWF5IGJlIGZlZXMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgdGhlCisgICAgIGl0ZW0uIEl0IGFsc28gbWVhbnMgdGhhdCByZWNpcGllbnRzIG9mIHRoZSBpdGVtIG1heQorICAgICByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyB0aGV5IHJlY2VpdmVkIGl0LiAKKworMS4gWW91IG1heSBtYWtlIGFuZCBnaXZlIGF3YXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBzb3VyY2UgZm9ybSBvZgordGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhpcyBQYWNrYWdlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkCit0aGF0IHlvdSBkdXBsaWNhdGUgYWxsIG9mIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQKK2Fzc29jaWF0ZWQgZGlzY2xhaW1lcnMuCisKKzIuIFlvdSBtYXkgYXBwbHkgYnVnIGZpeGVzLCBwb3J0YWJpbGl0eSBmaXhlcyBhbmQgb3RoZXIKK21vZGlmaWNhdGlvbnMgZGVyaXZlZCBmcm9tIHRoZSBQdWJsaWMgRG9tYWluIG9yIGZyb20gdGhlIENvcHlyaWdodAorSG9sZGVyLiBBIFBhY2thZ2UgbW9kaWZpZWQgaW4gc3VjaCBhIHdheSBzaGFsbCBzdGlsbCBiZSBjb25zaWRlcmVkCit0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworMy4gWW91IG1heSBvdGhlcndpc2UgbW9kaWZ5IHlvdXIgY29weSBvZiB0aGlzIFBhY2thZ2UgaW4gYW55IHdheSwKK3Byb3ZpZGVkIHRoYXQgeW91IGluc2VydCBhIHByb21pbmVudCBub3RpY2UgaW4gZWFjaCBjaGFuZ2VkIGZpbGUKK3N0YXRpbmcgaG93IGFuZCB3aGVuIHlvdSBjaGFuZ2VkIHRoYXQgZmlsZSwgYW5kIHByb3ZpZGVkIHRoYXQgeW91CitkbyBhdCBsZWFzdCB0aGUgZm9sbG93aW5nOgorCisgICAgIHJlbmFtZSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIGFuZCB0ZXN0Y2FzZXMgc28gdGhlCisgICAgIG5hbWVzIGRvIG5vdCBjb25mbGljdCB3aXRoIHN0YW5kYXJkIGV4ZWN1dGFibGVzIGFuZAorICAgICB0ZXN0Y2FzZXMsIHdoaWNoIG11c3QgYWxzbyBiZSBwcm92aWRlZCwgYW5kIHByb3ZpZGUgYQorICAgICBzZXBhcmF0ZSBtYW51YWwgcGFnZSBmb3IgZWFjaCBub24tc3RhbmRhcmQgZXhlY3V0YWJsZSBhbmQKKyAgICAgdGVzdGNhc2UgdGhhdCBjbGVhcmx5IGRvY3VtZW50cyBob3cgaXQgZGlmZmVycyBmcm9tIHRoZQorICAgICBTdGFuZGFyZCBWZXJzaW9uLgorCis0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBpbiBvYmplY3QgY29kZQorb3IgZXhlY3V0YWJsZSBmb3JtLCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCB0aGUgZm9sbG93aW5nOiAKKworICAgICBhY2NvbXBhbnkgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBhbmQgdGVzdGNhc2VzIHdpdGgKKyAgICAgdGhlaXIgY29ycmVzcG9uZGluZyBTdGFuZGFyZCBWZXJzaW9uIGV4ZWN1dGFibGVzIGFuZAorICAgICB0ZXN0Y2FzZXMsIGdpdmluZyB0aGUgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIGFuZAorICAgICB0ZXN0Y2FzZXMgbm9uLXN0YW5kYXJkIG5hbWVzLCBhbmQgY2xlYXJseSBkb2N1bWVudGluZyB0aGUKKyAgICAgZGlmZmVyZW5jZXMgaW4gbWFudWFsIHBhZ2VzIChvciBlcXVpdmFsZW50KSwgdG9nZXRoZXIgd2l0aAorICAgICBpbnN0cnVjdGlvbnMgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCis1LiBZb3UgbWF5IGNoYXJnZSBhIHJlYXNvbmFibGUgY29weWluZyBmZWUgZm9yIGFueSBkaXN0cmlidXRpb24gb2YKK3RoaXMgUGFja2FnZS4gWW91IG1heSBjaGFyZ2UgYW55IGZlZSB5b3UgY2hvb3NlIGZvciBzdXBwb3J0IG9mIHRoaXMKK1BhY2thZ2UuIFlvdSBtYXkgbm90IGNoYXJnZSBhIGZlZSBmb3IgdGhpcyBQYWNrYWdlIGl0c2VsZi4gSG93ZXZlciwKK3lvdSBtYXkgZGlzdHJpYnV0ZSB0aGlzIFBhY2thZ2UgaW4gYWdncmVnYXRlIHdpdGggb3RoZXIgKHBvc3NpYmx5Citjb21tZXJjaWFsKSBwcm9ncmFtcyBhcyBwYXJ0IG9mIGEgbGFyZ2VyIChwb3NzaWJseSBjb21tZXJjaWFsKQorc29mdHdhcmUgZGlzdHJpYnV0aW9uIHByb3ZpZGVkIHRoYXQgeW91IGRvIG5vdCBhZHZlcnRpc2UgdGhpcworUGFja2FnZSBhcyBhIHByb2R1Y3Qgb2YgeW91ciBvd24uCisKKzYuIFRoZSBzY3JpcHRzIGFuZCBsaWJyYXJ5IGZpbGVzIHN1cHBsaWVkIGFzIGlucHV0IHRvIG9yIHByb2R1Y2VkCithcyBvdXRwdXQgZnJvbSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGRvIG5vdCBhdXRvbWF0aWNhbGx5CitmYWxsIHVuZGVyIHRoZSBjb3B5cmlnaHQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYmVsb25nIHRvIHdob21ldmVyCitnZW5lcmF0ZWQgdGhlbSwgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkCit3aXRoIHRoaXMgUGFja2FnZS4KKworNy5TdWJyb3V0aW5lcyBzdXBwbGllZCBieSB5b3UgYW5kIGxpbmtlZCBpbnRvIHRoaXMgUGFja2FnZSBzaGFsbAorbm90IGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGlzIFBhY2thZ2UuIAorCis4LiBUaGUgbmFtZSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvcgorcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCit3cml0dGVuIHBlcm1pc3Npb24uCisKKzkuIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCitUaGUgRW5kCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0xEQVAtMi44IGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PTERBUC0yLjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyNTNkYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0xEQVAtMi44CkBAIC0wLDAgKzEsNDkgQEAKKworVGhlIE9wZW5MREFQIFB1YmxpYyBMaWNlbnNlCisgIFZlcnNpb24gMi44LCAxNyBBdWd1c3QgMjAwMworCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorKCJTb2Z0d2FyZSIpLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkCit0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGZvcm0gbXVzdCByZXRhaW4gY29weXJpZ2h0IHN0YXRlbWVudHMKKyAgIGFuZCBub3RpY2VzLAorCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXBwbGljYWJsZSBjb3B5cmlnaHQKKyAgIHN0YXRlbWVudHMgYW5kIG5vdGljZXMsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICB3aXRoIHRoZSBkaXN0cmlidXRpb24sIGFuZAorCiszLiBSZWRpc3RyaWJ1dGlvbnMgbXVzdCBjb250YWluIGEgdmVyYmF0aW0gY29weSBvZiB0aGlzIGRvY3VtZW50LgorCitUaGUgT3BlbkxEQVAgRm91bmRhdGlvbiBtYXkgcmV2aXNlIHRoaXMgbGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4KK0VhY2ggcmV2aXNpb24gaXMgZGlzdGluZ3Vpc2hlZCBieSBhIHZlcnNpb24gbnVtYmVyLiAgWW91IG1heSB1c2UKK3RoaXMgU29mdHdhcmUgdW5kZXIgdGVybXMgb2YgdGhpcyBsaWNlbnNlIHJldmlzaW9uIG9yIHVuZGVyIHRoZQordGVybXMgb2YgYW55IHN1YnNlcXVlbnQgcmV2aXNpb24gb2YgdGhlIGxpY2Vuc2UuCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9QRU5MREFQIEZPVU5EQVRJT04gQU5EIElUUworQ09OVFJJQlVUT1JTIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCitJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKK0FORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UCitTSEFMTCBUSEUgT1BFTkxEQVAgRk9VTkRBVElPTiwgSVRTIENPTlRSSUJVVE9SUywgT1IgVEhFIEFVVEhPUihTKQorT1IgT1dORVIoUykgT0YgVEhFIFNPRlRXQVJFIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworVGhlIG5hbWVzIG9mIHRoZSBhdXRob3JzIGFuZCBjb3B5cmlnaHQgaG9sZGVycyBtdXN0IG5vdCBiZSB1c2VkIGluCithZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmcKK2luIHRoaXMgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgVGl0bGUKK3RvIGNvcHlyaWdodCBpbiB0aGlzIFNvZnR3YXJlIHNoYWxsIGF0IGFsbCB0aW1lcyByZW1haW4gd2l0aCBjb3B5cmlnaHQKK2hvbGRlcnMuCisKK09wZW5MREFQIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgdGhlIE9wZW5MREFQIEZvdW5kYXRpb24uCisKK0NvcHlyaWdodCAxOTk5LTIwMDMgVGhlIE9wZW5MREFQIEZvdW5kYXRpb24sIFJlZHdvb2QgQ2l0eSwKK0NhbGlmb3JuaWEsIFVTQS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICBQZXJtaXNzaW9uIHRvIGNvcHkgYW5kCitkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGRvY3VtZW50IGlzIGdyYW50ZWQuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT1NMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT1NMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWFkMGRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PU0wtMS4wCkBAIC0wLDAgKzEsMTY0IEBACisKK1RoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UKK3YuIDEuMAorCitUaGlzIE9wZW4gU29mdHdhcmUgTGljZW5zZSAodGhlICJMaWNlbnNlIikgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwKK3dvcmsgb2YgYXV0aG9yc2hpcCAodGhlICJPcmlnaW5hbCBXb3JrIikgd2hvc2Ugb3duZXIgKHRoZSAiTGljZW5zb3IiKQoraGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodAorbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazogIkxpY2Vuc2VkIHVuZGVyIHRoZSBPcGVuIFNvZnR3YXJlCitMaWNlbnNlIHZlcnNpb24gMS4wIgorCitMaWNlbnNlIFRlcm1zCisKKzEpIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgbm9uLXN1YmxpY2Vuc2VhYmxlCitsaWNlbnNlIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXM7CisKK2IpIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyAoIkRlcml2YXRpdmUgV29ya3MiKSBiYXNlZCB1cG9uIHRoZQorT3JpZ2luYWwgV29yazsKKworYykgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MKK3RvIHRoZSBwdWJsaWMsIHdpdGggdGhlIHByb3Zpc28gdGhhdCBjb3BpZXMgb2YgT3JpZ2luYWwgV29yayBvcgorRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIHNoYWxsIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZQorT3BlbiBTb2Z0d2FyZSBMaWNlbnNlOworCitkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmQKKworZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS4KKworMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwKK3JveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBub24tc3VibGljZW5zZWFibGUgbGljZW5zZSwKK3VuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUKK2VtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IgKCJMaWNlbnNlZAorQ2xhaW1zIikgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3Igc2FsZSB0aGUgT3JpZ2luYWwgV29yay4KK0xpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLAorcGVycGV0dWFsLCBub24tc3VibGljZW5zZWFibGUgbGljZW5zZSB1bmRlciB0aGUgTGljZW5zZWQgQ2xhaW1zIHRvCittYWtlLCB1c2UsIHNlbGwgYW5kIG9mZmVyIGZvciBzYWxlIERlcml2YXRpdmUgV29ya3MuCisKKzMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlCitwcmVmZXJyZWQgZm9ybSBvZiB0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kCithbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gYWNjZXNzIGFuZCBtb2RpZnkgdGhlCitPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBoZXJlYnkgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlCitjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZgordGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlCityaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mCit0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8KK3Blcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzCitMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGJ5IHB1Ymxpc2hpbmcKK3RoZSBhZGRyZXNzIG9mIHRoYXQgaW5mb3JtYXRpb24gcmVwb3NpdG9yeSBpbiBhIG5vdGljZSBpbW1lZGlhdGVseQorZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgYXBwbGllcyB0byB0aGUgT3JpZ2luYWwgV29yay4KKworNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlCitkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZQorc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIGV4Y2VwdCBhcworZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gbWFrZSwgdXNlLAorc2VsbCBvciBvZmZlciB0byBzZWxsIGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlCitMaWNlbnNlZCBDbGFpbXMgZGVmaW5lZCBpbiBTZWN0aW9uIDIuIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlCit0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsCitXb3JrLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdAorTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueQorT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKworNSkgRXh0ZXJuYWwgRGVwbG95bWVudC4gVGhlIHRlcm0gIkV4dGVybmFsIERlcGxveW1lbnQiIG1lYW5zIHRoZSB1c2UKK29yIGRpc3RyaWJ1dGlvbiBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGluIGFueSB3YXkKK3N1Y2ggdGhhdCB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIG1heSBiZSBhY2Nlc3NlZCBvcgordXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZQorV29ya3MgYXJlIGRpc3RyaWJ1dGVkIHRvIHRob3NlIHBlcnNvbnMsIG1hZGUgYXZhaWxhYmxlIGFzIGFuCithcHBsaWNhdGlvbiBpbnRlbmRlZCBmb3IgdXNlIG92ZXIgYSBjb21wdXRlciBuZXR3b3JrLCBvciB1c2VkIHRvCitwcm92aWRlIHNlcnZpY2VzIG9yIG90aGVyd2lzZSBkZWxpdmVyIGNvbnRlbnQgdG8gYW55b25lIG90aGVyIHRoYW4KK1lvdS4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHRoZSBncmFudHMgb2YgbGljZW5zZSBoZXJldW5kZXIsIFlvdQorYWdyZWUgdGhhdCBhbnkgRXh0ZXJuYWwgRGVwbG95bWVudCBieSBZb3Ugc2hhbGwgYmUgZGVlbWVkIGEKK2Rpc3RyaWJ1dGlvbiBhbmQgc2hhbGwgYmUgbGljZW5zZWQgdG8gYWxsIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlLCBhcyBwcmVzY3JpYmVkIGluIHNlY3Rpb24gMShjKSBoZXJlaW4uCisKKzYpIFdhcnJhbnR5IGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMSUNFTlNPUiBXQVJSQU5UUyBUSEFUIFRIRQorQ09QWVJJR0hUIElOIEFORCBUTyBUSEUgT1JJR0lOQUwgV09SSyBJUyBPV05FRCBCWSBUSEUgTElDRU5TT1IgT1IgVEhBVAorVEhFIE9SSUdJTkFMIFdPUksgSVMgRElTVFJJQlVURUQgQlkgTElDRU5TT1IgVU5ERVIgQSBWQUxJRCBDVVJSRU5UCitMSUNFTlNFIEZST00gVEhFIENPUFlSSUdIVCBPV05FUi4gRVhDRVBUIEFTIEVYUFJFU1NMWSBTVEFURUQgSU4gVEhFCitJTU1FRElBVEVMWSBQUkVDRUVESU5HIFNFTlRFTkNFLCBUSEUgT1JJR0lOQUwgV09SSyBJUyBQUk9WSURFRCBVTkRFUgorVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFksIEVJVEhFUiBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIFdBUlJBTlRZIE9GCitOT04tSU5GUklOR0VNRU5UIEFORCBXQVJSQU5USUVTIFRIQVQgVEhFIE9SSUdJTkFMIFdPUksgSVMgTUVSQ0hBTlRBQkxFCitPUiBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YKK1RIRSBPUklHSU5BTCBXT1JLIElTIFdJVEggWU9VLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMKK0FOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gTElDRU5TRSBUTyBPUklHSU5BTCBXT1JLIElTCitHUkFOVEVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis3KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwKK1RIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsCitTSEFMTCBUSEUgTElDRU5TT1IgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORworQVMgQSBSRVNVTFQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIE9SSUdJTkFMIFdPUksgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLAorQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTAorREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQRVJTT04gU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVAorQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSAorUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0gKK0xJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUgorTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04KK0FORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis4KSBBY2NlcHRhbmNlIGFuZCBUZXJtaW5hdGlvbi4gTm90aGluZyBlbHNlIGJ1dCB0aGlzIExpY2Vuc2UgKG9yCithbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgZ3JhbnRzIFlvdQorcGVybWlzc2lvbiB0byBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrLAorYW5kIGFueSBhdHRlbXB0IHRvIGRvIHNvIGV4Y2VwdCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIChvcgorYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGlzIGV4cHJlc3NseQorcHJvaGliaXRlZCBieSBVLlMuIGNvcHlyaWdodCBsYXcsIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIKK2NvdW50cmllcywgYW5kIGJ5IGludGVybmF0aW9uYWwgdHJlYXR5LiBUaGVyZWZvcmUsIGJ5IGV4ZXJjaXNpbmcgYW55CitvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb25zIDEgYW5kIDIgaGVyZWluLCBZb3UgaW5kaWNhdGUKK1lvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCitUaGlzIGxpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IGFuZCB5b3UgbWF5IG5vIGxvbmdlcgorZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIHVwb24gWW91cgorZmFpbHVyZSB0byBob25vciB0aGUgcHJvdmlzbyBpbiBTZWN0aW9uIDEoYykgaGVyZWluLgorCis5KSBNdXR1YWwgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUKK2F1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQKK3RvIFlvdSBieSB0aGlzIExpY2Vuc2UgaWYgWW91IGZpbGUgYSBsYXdzdWl0IGluIGFueSBjb3VydCBhbGxlZ2luZwordGhhdCBhbnkgT1NJIENlcnRpZmllZCBvcGVuIHNvdXJjZSBzb2Z0d2FyZSB0aGF0IGlzIGxpY2Vuc2VkIHVuZGVyIGFueQorbGljZW5zZSBjb250YWluaW5nIHRoaXMgIk11dHVhbCBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbiIgY2xhdXNlCitpbmZyaW5nZXMgYW55IHBhdGVudCBjbGFpbXMgdGhhdCBhcmUgZXNzZW50aWFsIHRvIHVzZSB0aGF0IHNvZnR3YXJlLgorCisxMCkgSnVyaXNkaWN0aW9uLCBWZW51ZSBhbmQgR292ZXJuaW5nIExhdy4gWW91IGFncmVlIHRoYXQgYW55IGxhd3N1aXQKK2FyaXNpbmcgdW5kZXIgb3IgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIG1haW50YWluZWQgaW4gdGhlCitjb3VydHMgb2YgdGhlIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoCitMaWNlbnNvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcywgYW5kIHVuZGVyIHRoZSBsYXdzIG9mIHRoYXQKK2p1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24KK29mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwKK1NhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrCitvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlCitzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiB0aGUgVS5TLiBDb3B5cmlnaHQgQWN0LAorMTcgVS5TLkMuICYjMTY3OyAxMDEgZXQgc2VxLiwgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZAoraW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZgordGhpcyBMaWNlbnNlLgorCisxMSkgQXR0b3JuZXlzIEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCitvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUKK2VudGl0bGVkIHRvIHJlY292ZXIgaXRzIGNvc3RzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nLCB3aXRob3V0CitsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4KK2Nvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uIFRoaXMKK3NlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCisxMikgTWlzY2VsbGFuZW91cy4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudAorY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZQoraXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvCit0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLgorCisxMykgRGVmaW5pdGlvbiBvZiAiWW91IiBpbiBUaGlzIExpY2Vuc2UuICJZb3UiIHRocm91Z2hvdXQgdGhpcworTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEKK2xlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUKK3Rlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eQordGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuCitGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0CitvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LAord2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAKK29mIHN1Y2ggZW50aXR5LgorCitUaGlzIGxpY2Vuc2UgaXMgQ29weXJpZ2h0IChDKSAyMDAyIExhd3JlbmNlIEUuIFJvc2VuLiBBbGwgcmlnaHRzCityZXNlcnZlZC4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMKK2xpY2Vuc2Ugd2l0aG91dCBtb2RpZmljYXRpb24uIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQKK3RoZSBleHByZXNzIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBpdHMgY29weXJpZ2h0IG93bmVyLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09TTC0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09TTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZlNWM5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT1NMLTIuMApAQCAtMCwwICsxLDQ4IEBACisKK09wZW4gU29mdHdhcmUgTGljZW5zZQordi4gMi4wCisKK1RoaXMgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOgorCitMaWNlbnNlZCB1bmRlciB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIHZlcnNpb24gMi4wCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgc3VibGljZW5zZWFibGUgbGljZW5zZSB0byBkbyB0aGUgZm9sbG93aW5nOgorCithKSB0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzOworYikgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzICgiRGVyaXZhdGl2ZSBXb3JrcyIpIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcms7CisKK2MpIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRvIHRoZSBwdWJsaWMsIHdpdGggdGhlIHByb3Zpc28gdGhhdCBjb3BpZXMgb2YgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgc2hhbGwgYmUgbGljZW5zZWQgdW5kZXIgdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZTsKKworZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kCisKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuCisKKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlLCB1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IsIHRvIG1ha2UsIHVzZSwgc2VsbCBhbmQgb2ZmZXIgZm9yIHNhbGUgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuCisKKzMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgaGVyZWJ5IGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBieSBwdWJsaXNoaW5nIHRoZSBhZGRyZXNzIG9mIHRoYXQgaW5mb3JtYXRpb24gcmVwb3NpdG9yeSBpbiBhIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgdGhhdCBhcHBsaWVzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLgorCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciB0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3MsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIExpY2Vuc29yLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCBvciBvZmZlciB0byBzZWxsIGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBXb3JrLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCisKKzUpIEV4dGVybmFsIERlcGxveW1lbnQuIFRoZSB0ZXJtICJFeHRlcm5hbCBEZXBsb3ltZW50IiBtZWFucyB0aGUgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGluIGFueSB3YXkgc3VjaCB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgbWF5IGJlIHVzZWQgYnkgYW55b25lIG90aGVyIHRoYW4gWW91LCB3aGV0aGVyIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgYXJlIGRpc3RyaWJ1dGVkIHRvIHRob3NlIHBlcnNvbnMgb3IgbWFkZSBhdmFpbGFibGUgYXMgYW4gYXBwbGljYXRpb24gaW50ZW5kZWQgZm9yIHVzZSBvdmVyIGEgY29tcHV0ZXIgbmV0d29yay4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHRoZSBncmFudHMgb2YgbGljZW5zZSBoZXJldW5kZXIsIFlvdSBhZ3JlZSB0aGF0IGFueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBvZiBhIERlcml2YXRpdmUgV29yayBzaGFsbCBiZSBkZWVtZWQgYSBkaXN0cmlidXRpb24gYW5kIHNoYWxsIGJlIGxpY2Vuc2VkIHRvIGFsbCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhcyBwcmVzY3JpYmVkIGluIHNlY3Rpb24gMShjKSBoZXJlaW4uCisKKzYpIEF0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gIkF0dHJpYnV0aW9uIE5vdGljZS4iIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay4KKworNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBhbmQgdGhlIHBhdGVudCByaWdodHMgZ3JhbnRlZCBoZXJlaW4gYnkgTGljZW5zb3IgYXJlIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciBhcmUgc3VibGljZW5zZWQgdG8gWW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY29udHJpYnV0b3Iocykgb2YgdGhvc2UgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cy4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhlIGltbWVkaWF0ZWx5IHByb2NlZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiAiQVMgSVMiIEJBU0lTIGFuZCBXSVRIT1VUIFdBUlJBTlRZLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuIFRoaXMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBjb25zdGl0dXRlcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGlzIExpY2Vuc2UuIE5vIGxpY2Vuc2UgdG8gT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGhlcmV1bmRlciBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLgorCis4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnkgcGVyc29uIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gbGlhYmlsaXR5IGZvciBkZWF0aCBvciBwZXJzb25hbCBpbmp1cnkgcmVzdWx0aW5nIGZyb20gTGljZW5zb3JgcyBuZWdsaWdlbmNlIHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4gU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHRoaXMgZXhjbHVzaW9uIGFuZCBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LgorCis5KSBBY2NlcHRhbmNlIGFuZCBUZXJtaW5hdGlvbi4gSWYgWW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIE5vdGhpbmcgZWxzZSBidXQgdGhpcyBMaWNlbnNlIChvciBhbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgZ3JhbnRzIFlvdSBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCBpbiBTZWN0aW9uIDEgaGVyZWluLCBhbmQgYW55IGF0dGVtcHQgdG8gZG8gc28gZXhjZXB0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBpcyBleHByZXNzbHkgcHJvaGliaXRlZCBieSBVLlMuIGNvcHlyaWdodCBsYXcsIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgYnkgaW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoZXJlZm9yZSwgYnkgZXhlcmNpc2luZyBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDEgaGVyZWluLCBZb3UgaW5kaWNhdGUgWW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSBhbmQgeW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIHVwb24gWW91ciBmYWlsdXJlIHRvIGhvbm9yIHRoZSBwcm92aXNvIGluIFNlY3Rpb24gMShjKSBoZXJlaW4uCisKKzEwKSBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbi4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgYXMgb2YgdGhlIGRhdGUgWW91IGNvbW1lbmNlIGFuIGFjdGlvbiwgaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltLCBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCAoaSkgYWdhaW5zdCBMaWNlbnNvciB3aXRoIHJlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byBzb2Z0d2FyZSBvciAoaWkpIGFnYWluc3QgYW55IGVudGl0eSB3aXRoIHJlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byB0aGUgT3JpZ2luYWwgV29yayAoYnV0IGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkuCisKKzExKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBBbnkgYWN0aW9uIG9yIHN1aXQgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlIG9yIGFmdGVyIGl0cyB0ZXJtaW5hdGlvbiBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiB0aGUgVS5TLiBDb3B5cmlnaHQgQWN0LCAxNyBVLlMuQy4gMTAxIGV0IHNlcS4sIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzEyKSBBdHRvcm5leXMgRmVlcy4gSW4gYW55IGFjdGlvbiB0byBlbmZvcmNlIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3Igc2Vla2luZyBkYW1hZ2VzIHJlbGF0aW5nIHRoZXJldG8sIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIGJlIGVudGl0bGVkIHRvIHJlY292ZXIgaXRzIGNvc3RzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHJlYXNvbmFibGUgYXR0b3JuZXlzYCBmZWVzIGFuZCBjb3N0cyBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggc3VjaCBhY3Rpb24sIGluY2x1ZGluZyBhbnkgYXBwZWFsIG9mIHN1Y2ggYWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCisxMykgTWlzY2VsbGFuZW91cy4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLgorCisxNCkgRGVmaW5pdGlvbiBvZiAiWW91IiBpbiBUaGlzIExpY2Vuc2UuICJZb3UiIHRocm91Z2hvdXQgdGhpcyBMaWNlbnNlLCB3aGV0aGVyIGluIHVwcGVyIG9yIGxvd2VyIGNhc2UsIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4KKworVGhpcyBsaWNlbnNlIGlzIENvcHlyaWdodCAoQykgMjAwMyBMYXdyZW5jZSBFLiBSb3Nlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMgbGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gVGhpcyBsaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YgaXRzIGNvcHlyaWdodCBvd25lci4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PU0wtMy4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PU0wtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NTc3NDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09TTC0zLjAKQEAgLTAsMCArMSwyNyBAQAorCitPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKCYjODIyMDtPU0wmIzgyMjE7KSB2LiAzLjAKK1RoaXMgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIGxpY2Vuc2luZyBub3RpY2UgYWRqYWNlbnQgdG8gdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOgorTGljZW5zZWQgdW5kZXIgdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSB2ZXJzaW9uIDMuMAorCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNvcHlyaWdodCwgdG8gZG8gdGhlIGZvbGxvd2luZzoKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXMsIGVpdGhlciBhbG9uZSBvciBhcyBwYXJ0IG9mIGEgY29sbGVjdGl2ZSB3b3JrOworYikgdG8gdHJhbnNsYXRlLCBhZGFwdCwgYWx0ZXIsIHRyYW5zZm9ybSwgbW9kaWZ5LCBvciBhcnJhbmdlIHRoZSBPcmlnaW5hbCBXb3JrLCB0aGVyZWJ5IGNyZWF0aW5nIGRlcml2YXRpdmUgd29ya3MgKCJEZXJpdmF0aXZlIFdvcmtzIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yazsKK2MpIHRvIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRvIHRoZSBwdWJsaWMsIHdpdGggdGhlIHByb3Zpc28gdGhhdCBjb3BpZXMgb2YgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgc2hhbGwgYmUgbGljZW5zZWQgdW5kZXIgdGhpcyBPcGVuIFNvZnR3YXJlIExpY2Vuc2U7CitkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmQKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuCisyKSBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gTGljZW5zb3IgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcGF0ZW50cywgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQgaW1wb3J0IHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzLgorMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZCBhbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBhZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLgorNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3IgcGVybWlzc2lvbiBvZiB0aGUgTGljZW5zb3IuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbiwgbm90aGluZyBpbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIGFueSBsaWNlbnNlIHRvIExpY2Vuc29yJiM4MjE3O3MgdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5LiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgb3IgaW1wb3J0IGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gbGljZW5zZSBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKzUpIEV4dGVybmFsIERlcGxveW1lbnQuIFRoZSB0ZXJtICJFeHRlcm5hbCBEZXBsb3ltZW50IiBtZWFucyB0aGUgdXNlLCBkaXN0cmlidXRpb24sIG9yIGNvbW11bmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBpbiBhbnkgd2F5IHN1Y2ggdGhhdCB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIG1heSBiZSB1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aG9zZSB3b3JrcyBhcmUgZGlzdHJpYnV0ZWQgb3IgY29tbXVuaWNhdGVkIHRvIHRob3NlIHBlcnNvbnMgb3IgbWFkZSBhdmFpbGFibGUgYXMgYW4gYXBwbGljYXRpb24gaW50ZW5kZWQgZm9yIHVzZSBvdmVyIGEgbmV0d29yay4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHRoZSBncmFudHMgb2YgbGljZW5zZSBoZXJldW5kZXIsIFlvdSBtdXN0IHRyZWF0IGFueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBhIERlcml2YXRpdmUgV29yayBhcyBhIGRpc3RyaWJ1dGlvbiB1bmRlciBzZWN0aW9uIDEoYykuCis2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCBvciB0cmFkZW1hcmsgbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yaywgYXMgd2VsbCBhcyBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbiAiQXR0cmlidXRpb24gTm90aWNlLiIgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUgdG8gY2FycnkgYSBwcm9taW5lbnQgQXR0cmlidXRpb24gTm90aWNlIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLgorNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBhbmQgdGhlIHBhdGVudCByaWdodHMgZ3JhbnRlZCBoZXJlaW4gYnkgTGljZW5zb3IgYXJlIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciBhcmUgc3VibGljZW5zZWQgdG8gWW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY29udHJpYnV0b3Iocykgb2YgdGhvc2UgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cy4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhlIGltbWVkaWF0ZWx5IHByZWNlZGluZyBzZW50ZW5jZSwgdGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBub24taW5mcmluZ2VtZW50LCBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byB0aGUgT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZSBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLgorOCkgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHNoYWxsIHRoZSBMaWNlbnNvciBiZSBsaWFibGUgdG8gYW55b25lIGZvciBhbnkgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMuIFRoaXMgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90IGFwcGx5IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4KKzkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiwgYXQgYW55IHRpbWUsIFlvdSBleHByZXNzbHkgYXNzZW50ZWQgdG8gdGhpcyBMaWNlbnNlLCB0aGF0IGFzc2VudCBpbmRpY2F0ZXMgeW91ciBjbGVhciBhbmQgaXJyZXZvY2FibGUgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElmIFlvdSBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBhIERlcml2YXRpdmUgV29yaywgWW91IG11c3QgbWFrZSBhIHJlYXNvbmFibGUgZWZmb3J0IHVuZGVyIHRoZSBjaXJjdW1zdGFuY2VzIHRvIG9idGFpbiB0aGUgZXhwcmVzcyBhc3NlbnQgb2YgcmVjaXBpZW50cyB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBUaGlzIExpY2Vuc2UgY29uZGl0aW9ucyB5b3VyIHJpZ2h0cyB0byB1bmRlcnRha2UgdGhlIGFjdGl2aXRpZXMgbGlzdGVkIGluIFNlY3Rpb24gMSwgaW5jbHVkaW5nIHlvdXIgcmlnaHQgdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGRvaW5nIHNvIHdpdGhvdXQgaG9ub3JpbmcgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgaXMgcHJvaGliaXRlZCBieSBjb3B5cmlnaHQgbGF3IGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gYWZmZWN0IGNvcHlyaWdodCBleGNlcHRpb25zIGFuZCBsaW1pdGF0aW9ucyAoaW5jbHVkaW5nICYjODIyMDtmYWlyIHVzZSYjODIyMTsgb3IgJiM4MjIwO2ZhaXIgZGVhbGluZyYjODIyMTspLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgdXBvbiB5b3VyIGZhaWx1cmUgdG8gaG9ub3IgdGhlIGNvbmRpdGlvbnMgaW4gU2VjdGlvbiAxKGMpLgorMTApIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSBhcyBvZiB0aGUgZGF0ZSBZb3UgY29tbWVuY2UgYW4gYWN0aW9uLCBpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0sIGFnYWluc3QgTGljZW5zb3Igb3IgYW55IGxpY2Vuc2VlIGFsbGVnaW5nIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgaW5mcmluZ2VzIGEgcGF0ZW50LiBUaGlzIHRlcm1pbmF0aW9uIHByb3Zpc2lvbiBzaGFsbCBub3QgYXBwbHkgZm9yIGFuIGFjdGlvbiBhbGxlZ2luZyBwYXRlbnQgaW5mcmluZ2VtZW50IGJ5IGNvbWJpbmF0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlLgorMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2ggTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIGNvcHlyaWdodCBvciBwYXRlbnQgbGF3IGluIHRoZSBhcHByb3ByaWF0ZSBqdXJpc2RpY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisxMikgQXR0b3JuZXlzJiM4MjE3OyBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisxMykgTWlzY2VsbGFuZW91cy4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuCisxNCkgRGVmaW5pdGlvbiBvZiAiWW91IiBpbiBUaGlzIExpY2Vuc2UuICJZb3UiIHRocm91Z2hvdXQgdGhpcyBMaWNlbnNlLCB3aGV0aGVyIGluIHVwcGVyIG9yIGxvd2VyIGNhc2UsIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorMTUpIFJpZ2h0IHRvIFVzZS4gWW91IG1heSB1c2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gYWxsIHdheXMgbm90IG90aGVyd2lzZSByZXN0cmljdGVkIG9yIGNvbmRpdGlvbmVkIGJ5IHRoaXMgTGljZW5zZSBvciBieSBsYXcsIGFuZCBMaWNlbnNvciBwcm9taXNlcyBub3QgdG8gaW50ZXJmZXJlIHdpdGggb3IgYmUgcmVzcG9uc2libGUgZm9yIHN1Y2ggdXNlcyBieSBZb3UuCisxNikgTW9kaWZpY2F0aW9uIG9mIFRoaXMgTGljZW5zZS4gVGhpcyBMaWNlbnNlIGlzIENvcHlyaWdodCAmIzE2OTsgMjAwNSBMYXdyZW5jZSBSb3Nlbi4gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUsIG9yIGNvbW11bmljYXRlIHRoaXMgTGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgcGVybWl0cyBZb3UgdG8gbW9kaWZ5IHRoaXMgTGljZW5zZSBhcyBhcHBsaWVkIHRvIHRoZSBPcmlnaW5hbCBXb3JrIG9yIHRvIERlcml2YXRpdmUgV29ya3MuIEhvd2V2ZXIsIFlvdSBtYXkgbW9kaWZ5IHRoZSB0ZXh0IG9mIHRoaXMgTGljZW5zZSBhbmQgY29weSwgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSB5b3VyIG1vZGlmaWVkIHZlcnNpb24gKHRoZSAiTW9kaWZpZWQgTGljZW5zZSIpIGFuZCBhcHBseSBpdCB0byBvdGhlciBvcmlnaW5hbCB3b3JrcyBvZiBhdXRob3JzaGlwIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAoaSkgWW91IG1heSBub3QgaW5kaWNhdGUgaW4gYW55IHdheSB0aGF0IHlvdXIgTW9kaWZpZWQgTGljZW5zZSBpcyB0aGUgIk9wZW4gU29mdHdhcmUgTGljZW5zZSIgb3IgIk9TTCIgYW5kIHlvdSBtYXkgbm90IHVzZSB0aG9zZSBuYW1lcyBpbiB0aGUgbmFtZSBvZiB5b3VyIE1vZGlmaWVkIExpY2Vuc2U7IChpaSkgWW91IG11c3QgcmVwbGFjZSB0aGUgbm90aWNlIHNwZWNpZmllZCBpbiB0aGUgZmlyc3QgcGFyYWdyYXBoIGFib3ZlIHdpdGggdGhlIG5vdGljZSAiTGljZW5zZWQgdW5kZXIgPGluc2VydCB5b3VyIGxpY2Vuc2UgbmFtZSBoZXJlPiIgb3Igd2l0aCBhIG5vdGljZSBvZiB5b3VyIG93biB0aGF0IGlzIG5vdCBjb25mdXNpbmdseSBzaW1pbGFyIHRvIHRoZSBub3RpY2UgaW4gdGhpcyBMaWNlbnNlOyBhbmQgKGlpaSkgWW91IG1heSBub3QgY2xhaW0gdGhhdCB5b3VyIG9yaWdpbmFsIHdvcmtzIGFyZSBvcGVuIHNvdXJjZSBzb2Z0d2FyZSB1bmxlc3MgeW91ciBNb2RpZmllZCBMaWNlbnNlIGhhcyBiZWVuIGFwcHJvdmVkIGJ5IE9wZW4gU291cmNlIEluaXRpYXRpdmUgKE9TSSkgYW5kIFlvdSBjb21wbHkgd2l0aCBpdHMgbGljZW5zZSByZXZpZXcgYW5kIGNlcnRpZmljYXRpb24gcHJvY2Vzcy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PcGVuU1NMIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PcGVuU1NMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MjcwYTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09wZW5TU0wKQEAgLTAsMCArMSwxMDcgQEAKKworT3BlblNTTCBMaWNlbnNlCisKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwOCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcmUgbWV0OgorIAorICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgCisgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICAgIGRpc3RyaWJ1dGlvbi4KKyAKKyAgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAKKyAgNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAgICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorIAorICA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAgICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgCisgIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAgICAgYWNrbm93bGVkZ21lbnQ6CisgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAgICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTYGAgQU5EIEFOWQorICBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIAorICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAgKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAKKworIE9yaWdpbmFsIFNTTGVheSBMaWNlbnNlCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCitBbGwgcmlnaHRzIHJlc2VydmVkLgorIAorICBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAgYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgCisgIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAgbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAgZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgCisgIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmdgcywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAgSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAgaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgCisgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgYXJlIG1ldDoKKyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgICAgIFRoZSB3b3JkIGBjcnlwdG9ncmFwaGljYCBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAgNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20KKyAgICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIAorICBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvciBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUgY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorIAorCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9QRCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUEQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFmYjg3OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUEQKQEAgLTAsMCArMSBAQAorVGhpcyBpcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgUHVibGljIERvbWFpbiBMaWNlbnNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1BIUC0zLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1BIUC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYwYjIwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUEhQLTMuMApAQCAtMCwwICsxLDcwIEBACisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorICAgICAgICAgICAgICAgICAgVGhlIFBIUCBMaWNlbnNlLCB2ZXJzaW9uIDMuMDEKK0NvcHlyaWdodCAoYykgMTk5OSAtIDIwMTAgVGhlIFBIUCBHcm91cC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgaXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCisgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAKKyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgICAgZGlzdHJpYnV0aW9uLgorIAorICAzLiBUaGUgbmFtZSAiUEhQIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yCisgICAgIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgZ3JvdXBAcGhwLm5ldC4KKyAgCisgIDQuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJQSFAiLCBub3IKKyAgICAgbWF5ICJQSFAiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorICAgICBmcm9tIGdyb3VwQHBocC5uZXQuICBZb3UgbWF5IGluZGljYXRlIHRoYXQgeW91ciBzb2Z0d2FyZSB3b3JrcyBpbgorICAgICBjb25qdW5jdGlvbiB3aXRoIFBIUCBieSBzYXlpbmcgIkZvbyBmb3IgUEhQIiBpbnN0ZWFkIG9mIGNhbGxpbmcKKyAgICAgaXQgIlBIUCBGb28iIG9yICJwaHBmb28iCisgCisgIDUuIFRoZSBQSFAgR3JvdXAgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZQorICAgICBsaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhCisgICAgIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorICAgICBPbmNlIGNvdmVyZWQgY29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24KKyAgICAgb2YgdGhlIGxpY2Vuc2UsIHlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMKKyAgICAgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIGNvdmVyZWQgY29kZQorICAgICB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgbGljZW5zZQorICAgICBwdWJsaXNoZWQgYnkgdGhlIFBIUCBHcm91cC4gTm8gb25lIG90aGVyIHRoYW4gdGhlIFBIUCBHcm91cCBoYXMKKyAgICAgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBjb3ZlcmVkIGNvZGUgY3JlYXRlZAorICAgICB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICAgICBhY2tub3dsZWRnbWVudDoKKyAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBQSFAgc29mdHdhcmUsIGZyZWVseSBhdmFpbGFibGUgZnJvbQorICAgICA8aHR0cDovL3d3dy5waHAubmV0L3NvZnR3YXJlLz4iLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQSFAgREVWRUxPUE1FTlQgVEVBTSBgYEFTIElTYGAgQU5EIAorQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgCitQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUEhQCitERVZFTE9QTUVOVCBURUFNIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKK0lORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiAKK1NFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKworVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKK2luZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgUEhQIEdyb3VwLgorCitUaGUgUEhQIEdyb3VwIGNhbiBiZSBjb250YWN0ZWQgdmlhIEVtYWlsIGF0IGdyb3VwQHBocC5uZXQuCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBQSFAgR3JvdXAgYW5kIHRoZSBQSFAgcHJvamVjdCwgCitwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LnBocC5uZXQ+LgorCitQSFAgaW5jbHVkZXMgdGhlIFplbmQgRW5naW5lLCBmcmVlbHkgYXZhaWxhYmxlIGF0Cis8aHR0cDovL3d3dy56ZW5kLmNvbT4uCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUG9zdGdyZVNRTCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUG9zdGdyZVNRTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTY1OGRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Qb3N0Z3JlU1FMCkBAIC0wLDAgKzEsMTQgQEAKKworUG9zdGdyZVNRTCBEYXRhYmFzZSBNYW5hZ2VtZW50IFN5c3RlbQorKGZvcm1lcmx5IGtub3duIGFzIFBvc3RncmVzLCB0aGVuIGFzIFBvc3RncmVzOTUpCisKK1BvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDEwLCBUaGUgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgd2l0aG91dCBmZWUsIGFuZCB3aXRob3V0IGEgd3JpdHRlbiBhZ3JlZW1lbnQgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFuZCB0aGUgZm9sbG93aW5nIHR3byBwYXJhZ3JhcGhzIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgVU5JVkVSU0lUWSBPRiBDQUxJRk9STklBIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgSU5DTFVESU5HIExPU1QgUFJPRklUUywgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTiwgRVZFTiBJRiBUSEUgVU5JVkVSU0lUWSBPRiBDQUxJRk9STklBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitUSEUgVU5JVkVSU0lUWSBPRiBDQUxJRk9STklBIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBTT0ZUV0FSRSBQUk9WSURFRCBIRVJFVU5ERVIgSVMgT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgSEFTIE5PIE9CTElHQVRJT05TIFRPIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Qcm9wcmlldGFyeSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUHJvcHJpZXRhcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYxODc1OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUHJvcHJpZXRhcnkKQEAgLTAsMCArMSBAQAorUHJvcHJpZXRhcnkgbGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUHl0aG9uLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUHl0aG9uLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDNlODYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9QeXRob24tMi4wCkBAIC0wLDAgKzEsMTkyIEBACisKK1BZVEhPTiBTT0ZUV0FSRSBGT1VOREFUSU9OIExJQ0VOU0UgVkVSU0lPTiAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gdGhlIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisoIlBTRiIpLCBhbmQgdGhlIEluZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uICgiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kCitvdGhlcndpc2UgdXNpbmcgdGhpcyBzb2Z0d2FyZSAoIlB5dGhvbiIpIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQKK2l0cyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24uCisKKzIuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIFBTRgoraGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbmV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlCitsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwKK3ByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgUHl0aG9uCithbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uLCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBQU0ZgcworTGljZW5zZSBBZ3JlZW1lbnQgYW5kIFBTRmBzIG5vdGljZSBvZiBjb3B5cmlnaHQsIGkuZS4sICJDb3B5cmlnaHQgKGMpCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBBbGwgUmlnaHRzCitSZXNlcnZlZCIgYXJlIHJldGFpbmVkIGluIFB5dGhvbiBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uCitwcmVwYXJlZCBieSBMaWNlbnNlZS4KKworMy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24KK29yIGluY29ycG9yYXRlcyBQeXRob24gb3IgYW55IHBhcnQgdGhlcmVvZiwgYW5kIHdhbnRzIHRvIG1ha2UKK3RoZSBkZXJpdmF0aXZlIHdvcmsgYXZhaWxhYmxlIHRvIG90aGVycyBhcyBwcm92aWRlZCBoZXJlaW4sIHRoZW4KK0xpY2Vuc2VlIGhlcmVieSBhZ3JlZXMgdG8gaW5jbHVkZSBpbiBhbnkgc3VjaCB3b3JrIGEgYnJpZWYgc3VtbWFyeSBvZgordGhlIGNoYW5nZXMgbWFkZSB0byBQeXRob24uCisKKzQuIFBTRiBpcyBtYWtpbmcgUHl0aG9uIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMgSVMiCitiYXNpcy4gUFNGIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SCitJTVBMSUVELiBCWSBXQVkgT0YgRVhBTVBMRSwgQlVUIE5PVCBMSU1JVEFUSU9OLCBQU0YgTUFLRVMgTk8gQU5ECitESVNDTEFJTVMgQU5ZIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTCitGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgUFlUSE9OIFdJTEwgTk9UCitJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUklHSFRTLgorCis1LiBQU0YgU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNFUlMgT0YgUFlUSE9OCitGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTIEFTCitBIFJFU1VMVCBPRiBNT0RJRllJTkcsIERJU1RSSUJVVElORywgT1IgT1RIRVJXSVNFIFVTSU5HIFBZVEhPTiwKK09SIEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KKworNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbAorYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworNy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0byBjcmVhdGUgYW55CityZWxhdGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZSBiZXR3ZWVuIFBTRiBhbmQKK0xpY2Vuc2VlLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIFBTRgordHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lIGluIGEgdHJhZGVtYXJrIHNlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorcHJvZHVjdHMgb3Igc2VydmljZXMgb2YgTGljZW5zZWUsIG9yIGFueSB0aGlyZCBwYXJ0eS4KKworOC4gQnkgY29weWluZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgUHl0aG9uLCBMaWNlbnNlZQorYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UKK0FncmVlbWVudC4KKworQkVPUEVOLkNPTSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUFlUSE9OIDIuMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCRU9QRU4gUFlUSE9OIE9QRU4gU09VUkNFIExJQ0VOU0UgQUdSRUVNRU5UIFZFUlNJT04gMQorCisxLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gQmVPcGVuLmNvbSAoIkJlT3BlbiIpLCBoYXZpbmcgYW4KK29mZmljZSBhdCAxNjAgU2FyYXRvZ2EgQXZlbnVlLCBTYW50YSBDbGFyYSwgQ0EgOTUwNTEsIGFuZCB0aGUKK0luZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uICgiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kIG90aGVyd2lzZSB1c2luZwordGhpcyBzb2Z0d2FyZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0gYW5kIGl0cyBhc3NvY2lhdGVkCitkb2N1bWVudGF0aW9uICgidGhlIFNvZnR3YXJlIikuCisKKzIuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQmVPcGVuIFB5dGhvbiBMaWNlbnNlCitBZ3JlZW1lbnQsIEJlT3BlbiBoZXJlYnkgZ3JhbnRzIExpY2Vuc2VlIGEgbm9uLWV4Y2x1c2l2ZSwKK3JveWFsdHktZnJlZSwgd29ybGQtd2lkZSBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybQorYW5kL29yIGRpc3BsYXkgcHVibGljbHksIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kCitvdGhlcndpc2UgdXNlIHRoZSBTb2Z0d2FyZSBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uLAorcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgdGhlIEJlT3BlbiBQeXRob24gTGljZW5zZSBpcyByZXRhaW5lZCBpbiB0aGUKK1NvZnR3YXJlLCBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uIHByZXBhcmVkIGJ5IExpY2Vuc2VlLgorCiszLiBCZU9wZW4gaXMgbWFraW5nIHRoZSBTb2Z0d2FyZSBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gIkFTIElTIgorYmFzaXMuIEJFT1BFTiBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUgorSU1QTElFRC4gQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQkVPUEVOIE1BS0VTIE5PIEFORAorRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUworRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIE5PVAorSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KKworNC4gQkVPUEVOIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFRIRQorU09GVFdBUkUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUworQVMgQSBSRVNVTFQgT0YgVVNJTkcsIE1PRElGWUlORyBPUiBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFLCBPUiBBTlkKK0RFUklWQVRJVkUgVEhFUkVPRiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLgorCis1LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsCiticmVhY2ggb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCis2LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBpbnRlcnByZXRlZCBpbiBhbGwKK3Jlc3BlY3RzIGJ5IHRoZSBsYXcgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2x1ZGluZyBjb25mbGljdCBvZgorbGF3IHByb3Zpc2lvbnMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8KK2NyZWF0ZSBhbnkgcmVsYXRpb25zaGlwIG9mIGFnZW5jeSwgcGFydG5lcnNoaXAsIG9yIGpvaW50IHZlbnR1cmUKK2JldHdlZW4gQmVPcGVuIGFuZCBMaWNlbnNlZS4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudAorcGVybWlzc2lvbiB0byB1c2UgQmVPcGVuIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgaW4gYSB0cmFkZW1hcmsKK3NlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55Cit0aGlyZCBwYXJ0eS4gQXMgYW4gZXhjZXB0aW9uLCB0aGUgIkJlT3BlbiBQeXRob24iIGxvZ29zIGF2YWlsYWJsZSBhdAoraHR0cDovL3d3dy5weXRob25sYWJzLmNvbS9sb2dvcy5odG1sIG1heSBiZSB1c2VkIGFjY29yZGluZyB0byB0aGUKK3Blcm1pc3Npb25zIGdyYW50ZWQgb24gdGhhdCB3ZWIgcGFnZS4KKworNy4gQnkgY29weWluZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgdGhlIHNvZnR3YXJlLCBMaWNlbnNlZQorYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UKK0FncmVlbWVudC4KKworQ05SSSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUFlUSE9OIDEuNi4xCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gVGhpcyBMSUNFTlNFIEFHUkVFTUVOVCBpcyBiZXR3ZWVuIHRoZSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwKK1Jlc2VhcmNoIEluaXRpYXRpdmVzLCBoYXZpbmcgYW4gb2ZmaWNlIGF0IDE4OTUgUHJlc3RvbiBXaGl0ZSBEcml2ZSwKK1Jlc3RvbiwgVkEgMjAxOTEgKCJDTlJJIiksIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24KKygiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kIG90aGVyd2lzZSB1c2luZyBQeXRob24gMS42LjEgc29mdHdhcmUgaW4KK3NvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQgaXRzIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbi4KKworMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgQ05SSQoraGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbmV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlCitsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwKK3ByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgUHl0aG9uIDEuNi4xCithbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uLCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBDTlJJYHMKK0xpY2Vuc2UgQWdyZWVtZW50IGFuZCBDTlJJYHMgbm90aWNlIG9mIGNvcHlyaWdodCwgaS5lLiwgIkNvcHlyaWdodCAoYykKKzE5OTUtMjAwMSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXM7IEFsbCBSaWdodHMKK1Jlc2VydmVkIiBhcmUgcmV0YWluZWQgaW4gUHl0aG9uIDEuNi4xIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlCit2ZXJzaW9uIHByZXBhcmVkIGJ5IExpY2Vuc2VlLiBBbHRlcm5hdGVseSwgaW4gbGlldSBvZiBDTlJJYHMgTGljZW5zZQorQWdyZWVtZW50LCBMaWNlbnNlZSBtYXkgc3Vic3RpdHV0ZSB0aGUgZm9sbG93aW5nIHRleHQgKG9taXR0aW5nIHRoZQorcXVvdGVzKTogIlB5dGhvbiAxLjYuMSBpcyBtYWRlIGF2YWlsYWJsZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgaW4gQ05SSWBzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGlzIEFncmVlbWVudCB0b2dldGhlciB3aXRoCitQeXRob24gMS42LjEgbWF5IGJlIGxvY2F0ZWQgb24gdGhlIEludGVybmV0IHVzaW5nIHRoZSBmb2xsb3dpbmcKK3VuaXF1ZSwgcGVyc2lzdGVudCBpZGVudGlmaWVyIChrbm93biBhcyBhIGhhbmRsZSk6IDE4OTUuMjIvMTAxMy4gVGhpcworQWdyZWVtZW50IG1heSBhbHNvIGJlIG9idGFpbmVkIGZyb20gYSBwcm94eSBzZXJ2ZXIgb24gdGhlIEludGVybmV0Cit1c2luZyB0aGUgZm9sbG93aW5nIFVSTDogaHR0cDovL2hkbC5oYW5kbGUubmV0LzE4OTUuMjIvMTAxMyIuCisKKzMuIEluIHRoZSBldmVudCBMaWNlbnNlZSBwcmVwYXJlcyBhIGRlcml2YXRpdmUgd29yayB0aGF0IGlzIGJhc2VkIG9uCitvciBpbmNvcnBvcmF0ZXMgUHl0aG9uIDEuNi4xIG9yIGFueSBwYXJ0IHRoZXJlb2YsIGFuZCB3YW50cyB0byBtYWtlCit0aGUgZGVyaXZhdGl2ZSB3b3JrIGF2YWlsYWJsZSB0byBvdGhlcnMgYXMgcHJvdmlkZWQgaGVyZWluLCB0aGVuCitMaWNlbnNlZSBoZXJlYnkgYWdyZWVzIHRvIGluY2x1ZGUgaW4gYW55IHN1Y2ggd29yayBhIGJyaWVmIHN1bW1hcnkgb2YKK3RoZSBjaGFuZ2VzIG1hZGUgdG8gUHl0aG9uIDEuNi4xLgorCis0LiBDTlJJIGlzIG1ha2luZyBQeXRob24gMS42LjEgYXZhaWxhYmxlIHRvIExpY2Vuc2VlIG9uIGFuICJBUyBJUyIKK2Jhc2lzLiBDTlJJIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SCitJTVBMSUVELiBCWSBXQVkgT0YgRVhBTVBMRSwgQlVUIE5PVCBMSU1JVEFUSU9OLCBDTlJJIE1BS0VTIE5PIEFORAorRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUworRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFBZVEhPTiAxLjYuMSBXSUxMIE5PVAorSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KKworNS4gQ05SSSBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRiBQWVRIT04KKzEuNi4xIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgQVMKK0EgUkVTVUxUIE9GIE1PRElGWUlORywgRElTVFJJQlVUSU5HLCBPUiBPVEhFUldJU0UgVVNJTkcgUFlUSE9OIDEuNi4xLAorT1IgQU5ZIERFUklWQVRJVkUgVEhFUkVPRiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLgorCis2LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsCiticmVhY2ggb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCis3LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBmZWRlcmFsCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3IG9mIHRoZSBVbml0ZWQgU3RhdGVzLCBpbmNsdWRpbmcgd2l0aG91dAorbGltaXRhdGlvbiB0aGUgZmVkZXJhbCBjb3B5cmlnaHQgbGF3LCBhbmQsIHRvIHRoZSBleHRlbnQgc3VjaAorVS5TLiBmZWRlcmFsIGxhdyBkb2VzIG5vdCBhcHBseSwgYnkgdGhlIGxhdyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mCitWaXJnaW5pYSwgZXhjbHVkaW5nIFZpcmdpbmlhYHMgY29uZmxpY3Qgb2YgbGF3IHByb3Zpc2lvbnMuCitOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgd2l0aCByZWdhcmQgdG8gZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZAorb24gUHl0aG9uIDEuNi4xIHRoYXQgaW5jb3Jwb3JhdGUgbm9uLXNlcGFyYWJsZSBtYXRlcmlhbCB0aGF0IHdhcworcHJldmlvdXNseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIHRoZQorbGF3IG9mIHRoZSBDb21tb253ZWFsdGggb2YgVmlyZ2luaWEgc2hhbGwgZ292ZXJuIHRoaXMgTGljZW5zZQorQWdyZWVtZW50IG9ubHkgYXMgdG8gaXNzdWVzIGFyaXNpbmcgdW5kZXIgb3Igd2l0aCByZXNwZWN0IHRvCitQYXJhZ3JhcGhzIDQsIDUsIGFuZCA3IG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIE5vdGhpbmcgaW4gdGhpcworTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZGVlbWVkIHRvIGNyZWF0ZSBhbnkgcmVsYXRpb25zaGlwIG9mCithZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlIGJldHdlZW4gQ05SSSBhbmQgTGljZW5zZWUuIFRoaXMKK0xpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIENOUkkgdHJhZGVtYXJrcyBvcgordHJhZGUgbmFtZSBpbiBhIHRyYWRlbWFyayBzZW5zZSB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgb3IKK3NlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkgdGhpcmQgcGFydHkuCisKKzguIEJ5IGNsaWNraW5nIG9uIHRoZSAiQUNDRVBUIiBidXR0b24gd2hlcmUgaW5kaWNhdGVkLCBvciBieSBjb3B5aW5nLAoraW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgUHl0aG9uIDEuNi4xLCBMaWNlbnNlZSBhZ3JlZXMgdG8gYmUKK2JvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorCitBQ0NFUFQKKworQ1dJIExJQ0VOU0UgQUdSRUVNRU5UIEZPUiBQWVRIT04gMC45LjAgVEhST1VHSCAxLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5MSAtIDE5OTUsIFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSBBbXN0ZXJkYW0sCitUaGUgTmV0aGVybGFuZHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAorYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCitzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIFN0aWNodGluZyBNYXRoZW1hdGlzY2gKK0NlbnRydW0gb3IgQ1dJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK1NUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8KK1RISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKK0ZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFNUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBCRSBMSUFCTEUKK0ZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCitPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1FQTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1FQTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q0MzNhYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUVBMLTEuMApAQCAtMCwwICsxLDQ4IEBACisKK1RIRSBRIFBVQkxJQyBMSUNFTlNFIHZlcnNpb24gMS4wCisKK0NvcHlyaWdodCAoQykgMTk5OS0yMDA1IFRyb2xsdGVjaCBBUywgTm9yd2F5LgorRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBsaWNlbnNlIGRvY3VtZW50LgorVGhlIGludGVudCBvZiB0aGlzIGxpY2Vuc2UgaXMgdG8gZXN0YWJsaXNoIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgc29mdHdhcmUgcmVndWxhdGVkIGJ5IHRoaXMgbGljZW5zZSB1bmRlciB0aGUgb3BlbiBzb3VyY2UgbW9kZWwuCisKK1RoaXMgbGljZW5zZSBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBjb250YWluaW5nIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgdGhhdCBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBRIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMS4wLiBTdWNoIHNvZnR3YXJlIGlzIGhlcmVpbiByZWZlcnJlZCB0byBhcyB0aGUgU29mdHdhcmUuIFRoaXMgbGljZW5zZSBjb3ZlcnMgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlLCB1c2Ugb2YgdGhpcmQtcGFydHkgYXBwbGljYXRpb24gcHJvZ3JhbXMgYmFzZWQgb24gdGhlIFNvZnR3YXJlLCBhbmQgZGV2ZWxvcG1lbnQgb2YgZnJlZSBzb2Z0d2FyZSB3aGljaCB1c2VzIHRoZSBTb2Z0d2FyZS4KKworR3JhbnRlZCBSaWdodHMKKworMS4gWW91IGFyZSBncmFudGVkIHRoZSBub24tZXhjbHVzaXZlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBsaWNlbnNlIHByb3ZpZGVkIHlvdSBhZ3JlZSB0byBhbmQgY29tcGx5IHdpdGggYW55IGFuZCBhbGwgY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UuIFdob2xlIG9yIHBhcnRpYWwgZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSwgb3Igc29mdHdhcmUgaXRlbXMgdGhhdCBsaW5rIHdpdGggdGhlIFNvZnR3YXJlLCBpbiBhbnkgZm9ybSBzaWduaWZpZXMgYWNjZXB0YW5jZSBvZiB0aGlzIGxpY2Vuc2UuCisKKzIuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgaW4gdW5tb2RpZmllZCBmb3JtIHByb3ZpZGVkIHRoYXQgdGhlIGVudGlyZSBwYWNrYWdlLCBpbmNsdWRpbmcgLSBidXQgbm90IHJlc3RyaWN0ZWQgdG8gLSBjb3B5cmlnaHQsIHRyYWRlbWFyayBub3RpY2VzIGFuZCBkaXNjbGFpbWVycywgYXMgcmVsZWFzZWQgYnkgdGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBTb2Z0d2FyZSwgaXMgZGlzdHJpYnV0ZWQuCisKKzMuIFlvdSBtYXkgbWFrZSBtb2RpZmljYXRpb25zIHRvIHRoZSBTb2Z0d2FyZSBhbmQgZGlzdHJpYnV0ZSB5b3VyIG1vZGlmaWNhdGlvbnMsIGluIGEgZm9ybSB0aGF0IGlzIHNlcGFyYXRlIGZyb20gdGhlIFNvZnR3YXJlLCBzdWNoIGFzIHBhdGNoZXMuIFRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIG1vZGlmaWNhdGlvbnM6CisKK2EuIE1vZGlmaWNhdGlvbnMgbXVzdCBub3QgYWx0ZXIgb3IgcmVtb3ZlIGFueSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUuCitiLiBXaGVuIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFNvZnR3YXJlIGFyZSByZWxlYXNlZCB1bmRlciB0aGlzIGxpY2Vuc2UsIGEgbm9uLWV4Y2x1c2l2ZSByb3lhbHR5LWZyZWUgcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIFNvZnR3YXJlIHRvIGRpc3RyaWJ1dGUgeW91ciBtb2RpZmljYXRpb24gaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSBwcm92aWRlZCBzdWNoIHZlcnNpb25zIHJlbWFpbiBhdmFpbGFibGUgdW5kZXIgdGhlc2UgdGVybXMgaW4gYWRkaXRpb24gdG8gYW55IG90aGVyIGxpY2Vuc2Uocykgb2YgdGhlIGluaXRpYWwgZGV2ZWxvcGVyLgorCis0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIG9mIHRoZSBTb2Z0d2FyZSBvciBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlLCBwcm92aWRlZCB0aGF0IHlvdSBtZWV0IHRoZXNlIHJlc3RyaWN0aW9uczoKKworYS4gWW91IG11c3QgaW5jbHVkZSB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgaW4gdGhlIGRpc3RyaWJ1dGlvbi4KK2IuIFlvdSBtdXN0IGVuc3VyZSB0aGF0IGFsbCByZWNpcGllbnRzIG9mIHRoZSBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgYXJlIGFsc28gYWJsZSB0byByZWNlaXZlIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIHRvIHRoZSBkaXN0cmlidXRlZCBTb2Z0d2FyZSwgaW5jbHVkaW5nIGFsbCBtb2RpZmljYXRpb25zLCB3aXRob3V0IGFueSBjaGFyZ2UgYmV5b25kIHRoZSBjb3N0cyBvZiBkYXRhIHRyYW5zZmVyLCBhbmQgcGxhY2UgcHJvbWluZW50IG5vdGljZXMgaW4gdGhlIGRpc3RyaWJ1dGlvbiBleHBsYWluaW5nIHRoaXMuCisKK2MuIFlvdSBtdXN0IGVuc3VyZSB0aGF0IGFsbCBtb2RpZmljYXRpb25zIGluY2x1ZGVkIGluIHRoZSBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgYXJlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLgorCis1LiBZb3UgbWF5IHVzZSB0aGUgb3JpZ2luYWwgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlIHRvIGNvbXBpbGUsIGxpbmsgYW5kIHJ1biBhcHBsaWNhdGlvbiBwcm9ncmFtcyBsZWdhbGx5IGRldmVsb3BlZCBieSB5b3Ugb3IgYnkgb3RoZXJzLgorCis2LiBZb3UgbWF5IGRldmVsb3AgYXBwbGljYXRpb24gcHJvZ3JhbXMsIHJldXNhYmxlIGNvbXBvbmVudHMgYW5kIG90aGVyIHNvZnR3YXJlIGl0ZW1zIHRoYXQgbGluayB3aXRoIHRoZSBvcmlnaW5hbCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgU29mdHdhcmUuIFRoZXNlIGl0ZW1zLCB3aGVuIGRpc3RyaWJ1dGVkLCBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50czoKKworYS4gWW91IG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlY2lwaWVudHMgb2YgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIG9mIHRoZXNlIGl0ZW1zIGFyZSBhbHNvIGFibGUgdG8gcmVjZWl2ZSBhbmQgdXNlIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIHRvIHRoZSBpdGVtcyB3aXRob3V0IGFueSBjaGFyZ2UgYmV5b25kIHRoZSBjb3N0cyBvZiBkYXRhIHRyYW5zZmVyLgorYi4gWW91IG11c3QgZXhwbGljaXRseSBsaWNlbnNlIGFsbCByZWNpcGllbnRzIG9mIHlvdXIgaXRlbXMgdG8gdXNlIGFuZCByZS1kaXN0cmlidXRlIG9yaWdpbmFsIGFuZCBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgaXRlbXMgaW4gYm90aCBtYWNoaW5lLWV4ZWN1dGFibGUgYW5kIHNvdXJjZSBjb2RlIGZvcm1zLiBUaGUgcmVjaXBpZW50cyBtdXN0IGJlIGFibGUgdG8gZG8gc28gd2l0aG91dCBhbnkgY2hhcmdlcyB3aGF0c29ldmVyLCBhbmQgdGhleSBtdXN0IGJlIGFibGUgdG8gcmUtZGlzdHJpYnV0ZSB0byBhbnlvbmUgdGhleSBjaG9vc2UuCisKK2MuIElmIHRoZSBpdGVtcyBhcmUgbm90IGF2YWlsYWJsZSB0byB0aGUgZ2VuZXJhbCBwdWJsaWMsIGFuZCB0aGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIFNvZnR3YXJlIHJlcXVlc3RzIGEgY29weSBvZiB0aGUgaXRlbXMsIHRoZW4geW91IG11c3Qgc3VwcGx5IG9uZS4KKworTGltaXRhdGlvbnMgb2YgTGlhYmlsaXR5CisKK0luIG5vIGV2ZW50IHNoYWxsIHRoZSBpbml0aWFsIGRldmVsb3BlcnMgb3IgY29weXJpZ2h0IGhvbGRlcnMgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgLSBidXQgbm90IHJlc3RyaWN0ZWQgdG8gLSBsb3N0IHJldmVudWUgb3IgcHJvZml0cyBvciBvdGhlciBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgZXZlbiBpZiB0aGV5IGhhdmUgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMsIGV4Y2VwdCB0byB0aGUgZXh0ZW50IGludmFyaWFibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZS4KKworTm8gV2FycmFudHkKKworVGhlIFNvZnR3YXJlIGFuZCB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgYXJlIHByb3ZpZGVkIEFTIElTIHdpdGggTk8gV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIElOQ0xVRElORyBUSEUgV0FSUkFOVFkgT0YgREVTSUdOLCBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCitDaG9pY2Ugb2YgTGF3CisKK1RoaXMgbGljZW5zZSBpcyBnb3Zlcm5lZCBieSB0aGUgTGF3cyBvZiBOb3J3YXkuIERpc3B1dGVzIHNoYWxsIGJlIHNldHRsZWQgYnkgT3NsbyBDaXR5IENvdXJ0LgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JIZUNvcy0xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SSGVDb3MtMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWI0MGI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SSGVDb3MtMQpAQCAtMCwwICsxLDQwMSBAQAorCitSZWQgSGF0IGVDb3MgUHVibGljIExpY2Vuc2UgdjEuMQorCisxLiBERUZJTklUSU9OUworCisxLjEuICJDb250cmlidXRvciIgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvCit0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbAorQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5Cit0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUKK2NvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nCitwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseQorYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YKK2RhdGEuCisKKzEuNS4gIkV4ZWN1dGFibGUiIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZQorQ29kZS4KKworMS42LiAiSW5pdGlhbCBEZXZlbG9wZXIiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzCit0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisKKzEuNy4gIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yCitwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS44LiAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS45LiAiTW9kaWZpY2F0aW9ucyIgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlCitzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMKK01vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhCitNb2RpZmljYXRpb24gaXM6CisKK0EuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbAorQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cworTW9kaWZpY2F0aW9ucy4KKworMS4xMC4gIk9yaWdpbmFsIENvZGUiIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUKK3doaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbAorQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkKK0NvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisKKzEuMTEuICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kCitpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3IgYSBsaXN0IG9mIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbAorY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUKK0NvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3IncyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYQorY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS0KK2FyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKzEuMTIuICJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMKK3VuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24KK29mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIKK2luY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbgorY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zCisoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoCitlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMS4xMy4gIlJlZCBIYXQgQnJhbmRlZCBDb2RlIiBpcyBjb2RlIHRoYXQgUmVkIEhhdCBkaXN0cmlidXRlcyBhbmQvb3IKK3Blcm1pdHMgb3RoZXJzIHRvIGRpc3RyaWJ1dGUgdW5kZXIgZGlmZmVyZW50IHRlcm1zIHRoYW4gdGhlIFJlZCBIYXQgZUNvcyBQdWJsaWMKK0xpY2Vuc2UuIFJlZCBIYXQncyBCcmFuZGVkIENvZGUgbWF5IGNvbnRhaW4gcGFydCBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMi4gU09VUkNFIENPREUgTElDRU5TRQorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLQorZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlCitPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgb3IgYXMgcGFydAorb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBJbml0aWFsIERldmVsb3BlciwgdG8KK21ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsICgiVXRpbGl6ZSIpIHRoZSBPcmlnaW5hbCBDb2RlIChvcgorcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5CituZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSBhbmQKK25vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlcgorTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCitFYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisKKyhhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZQorTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbgordW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgb3IgYXMgcGFydCBvZiBhCitMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwgdG8KK1V0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQKK3RoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUKK0NvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0CittYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4KKworMy4gRElTVFJJQlVUSU9OIE9CTElHQVRJT05TCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4KK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5Cit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlCitDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91CittdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdQorZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbgordGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZQorcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQKK29mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZQorYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB2aWEgYW4gYWNjZXB0ZWQKK0VsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlCit2ZXJzaW9uIGF2YWlsYWJsZSBhbmQgdG8gdGhlIEluaXRpYWwgRGV2ZWxvcGVyOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhCitFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlCisoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KQorbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZQorYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlCitDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzCittYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIG5vdGlmeWluZyB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIG9mIHRoZSBNb2RpZmljYXRpb24gYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgU291cmNlIGlmIGEgY29udGFjdCBtZWFucworaXMgcHJvdmlkZWQuIFJlZCBIYXQgd2lsbCBiZSBhY3RpbmcgYXMgbWFpbnRhaW5lciBvZiB0aGUgU291cmNlIGFuZCBtYXkgcHJvdmlkZQorYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gbWVjaGFuaXNtIGZvciB0aGUgTW9kaWZpY2F0aW9uIHRvIGJlIG1hZGUgYXZhaWxhYmxlLgorWW91IGNhbiBjb250YWN0IFJlZCBIYXQgdG8gbWFrZSB0aGUgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSBhbmQgdG8gbm90aWZ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIuIChodHRwOi8vc291cmNld2FyZS5jeWdudXMuY29tL2Vjb3MvKQorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlCitkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mCithbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMKK2Rlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlCitDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbgoraW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCitJZiBZb3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIHBhcnR5IGNsYWltcyBhbiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaW4KK3BhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBvciBjb2RlIChvciBpdHMgdXRpbGl6YXRpb24gdW5kZXIgdGhpcyBMaWNlbnNlKSwgeW91CittdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZAorIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbgorc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiB5b3Ugb2J0YWluCitzdWNoIGtub3dsZWRnZSBhZnRlciBZb3UgbWFrZSBZb3VyIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluCitTZWN0aW9uIDMuMiwgWW91IHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIFlvdSBtYWtlCithdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUKK21haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQKK3RoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorCisoYikgQ29udHJpYnV0b3IgQVBJcy4KK0lmIFlvdXIgTW9kaWZpY2F0aW9uIGlzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgWW91IG93biBvcgorY29udHJvbCBwYXRlbnRzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIHlvdSBtdXN0CithbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUsIGFuZAordGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUsIHdoZXJlIFlvdSBkZXNjcmliZQorcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUKK01vZGlmaWNhdGlvbihzKSwgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIFNvdXJjZSBDb2RlLiBJZgoraXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8KK2l0cyBzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEKK3JlbGV2YW50IGRpcmVjdG9yeSBmaWxlKSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYQorbm90aWNlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LAoraW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4KKworSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlCitJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0Cithbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91CithbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkKK0NvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoCitDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3UKK29mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mCitTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhCitub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdQoraGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseQoraW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvcgorY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkCitDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgdW5kZXIgYSBsaWNlbnNlCitvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZAordGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlCitmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncworcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZgorWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UKK2l0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkCitieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlCit0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eQoraW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2gKK3Rlcm1zIFlvdSBvZmZlci4KKworSWYgeW91IGRpc3RyaWJ1dGUgZXhlY3V0YWJsZSB2ZXJzaW9ucyBjb250YWluaW5nIENvdmVyZWQgQ29kZSwgeW91IG11c3QKK3JlcHJvZHVjZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCitwcm92aWRlZCB3aXRoIHRoZSBwcm9kdWN0LgorCiszLjcuIExhcmdlciBXb3Jrcy4KK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90Citnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhCitzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMKK0xpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSU5BQklMSVRZIFRPIENPTVBMWSBEVUUgVE8gU1RBVFVURSBPUiBSRUdVTEFUSU9OCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZQord2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUgb3IgcmVndWxhdGlvbgordGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50Citwb3NzaWJsZTsgKGIpIGNpdGUgdGhlIHN0YXR1dGUgb3IgcmVndWxhdGlvbiB0aGF0IHByb2hpYml0cyB5b3UgZnJvbSBhZGhlcmluZwordG8gdGhlIGxpY2Vuc2U7IGFuZCAoYykgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaAorZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kCittdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlCitleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZQorc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvCit1bmRlcnN0YW5kIGl0LiBZb3UgbXVzdCBzdWJtaXQgdGhpcyBMRUdBTCBmaWxlIHRvIFJlZCBIYXQgZm9yIHJldmlldywgYW5kIFlvdQord2lsbCBub3QgYmUgYWJsZSB1c2UgdGhlIGNvdmVyZWQgY29kZSBpbiBhbnkgbWVhbnMgdW50aWwgcGVybWlzc2lvbiBpcyBncmFudGVkCitmcm9tIFJlZCBIYXQgdG8gYWxsb3cgZm9yIHRoZSBpbmFiaWxpdHkgdG8gY29tcGx5IGR1ZSB0byBzdGF0dXRlIG9yIHJlZ3VsYXRpb24uCisKKzUuIEFQUExJQ0FUSU9OIE9GIFRISVMgTElDRU5TRQorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlCitub3RpY2UgaW4gRXhoaWJpdCBBLCBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKK1JlZCBIYXQgbWF5IGluY2x1ZGUgQ292ZXJlZCBDb2RlIGluIHByb2R1Y3RzIHdpdGhvdXQgc3VjaCBhZGRpdGlvbmFsIHByb2R1Y3RzCitiZWNvbWluZyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBtYXkgbGljZW5zZSBzdWNoIGFkZGl0aW9uYWwKK3Byb2R1Y3RzIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UuCisKK1JlZCBIYXQgbWF5IGxpY2Vuc2UgdGhlIFNvdXJjZSBDb2RlIG9mIFJlZCBIYXQgQnJhbmRlZCBDb2RlIHdpdGhvdXQgUmVkIEhhdAorQnJhbmRlZCBDb2RlIGJlY29taW5nIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIFJlZAorSGF0IEJyYW5kZWQgQ29kZSBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlLgorQ29udGFjdCBSZWQgSGF0IGZvciBkZXRhaWxzIG9mIGFsdGVybmF0ZSBsaWNlbnNpbmcgdGVybXMgYXZhaWxhYmxlLgorCis2LiBWRVJTSU9OUyBPRiBUSEUgTElDRU5TRQorCis2LjEuIE5ldyBWZXJzaW9ucy4KK1JlZCBIYXQgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0bwordGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLAorWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbworY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZgordGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFJlZCBIYXQuIE5vIG9uZSBvdGhlciB0aGFuIFJlZCBIYXQgaGFzIHRoZSByaWdodCB0bworbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBiZXlvbmQgd2hhdCBpcyBncmFudGVkIHVuZGVyIHRoaXMKK2FuZCBzdWJzZXF1ZW50IExpY2Vuc2VzLgorCis2LjMuIERlcml2YXRpdmUgV29ya3MuCitJZiB5b3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8KK2luIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMKK0xpY2Vuc2UpLCB5b3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2VzCisiRUNPUyIsICJlQ29zIiwgIlJlZCBIYXQiLCAiUkhFUEwiIG9yCithbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBhbnl3aGVyZSBpbiB5b3VyIGxpY2Vuc2UgYW5kIChiKQorb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCB5b3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2gKK2RpZmZlciBmcm9tIHRoZSBSZWQgSGF0IGVDb3MgUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZQorSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4KK0V4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzCitMaWNlbnNlLikKKworNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWQorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVAorTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsCitGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFCitRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQKK0NPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZCitPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IKK0NPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTCitMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUworRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYKK1lvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMAorZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaAorYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zCit3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzCitMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUgorQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSAorUEFSVElFUywgQkUgTElBQkxFIFRPIFlPVSBPUiBBTlkgT1RIRVIgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsCitJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQKK0xJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IKK01BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0gKK1BBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTCitMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTAorSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcKK1BST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUgorTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhBVCBFWENMVVNJT04gQU5ECitMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUworCitUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluCis0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgImNvbW1lcmNpYWwgY29tcHV0ZXIKK3NvZnR3YXJlIiBhbmQgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwiIGFzCitzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuCisxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4KK0dvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoCitoZXJlaW4uCisKKzExLiBNSVNDRUxMQU5FT1VTCisKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlcgoraGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2gKK3Byb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQKK2VuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucworKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZworaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lCitwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiwKK3RoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2E6IChhKSB1bmxlc3Mgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nLCBhbGwKK2Rpc3B1dGVzIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSAoZXhjZXB0aW5nIGFueSBkaXNwdXRlIHJlbGF0aW5nIHRvCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzKSBzaGFsbCBiZSBzdWJqZWN0IHRvIGZpbmFsIGFuZCBiaW5kaW5nCithcmJpdHJhdGlvbiwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHBheWluZyBhbGwgY29zdHMgb2YgYXJiaXRyYXRpb247IChiKSBhbnkKK2FyYml0cmF0aW9uIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGhlbGQgaW4gU2FudGEgQ2xhcmEgQ291bnR5LAorQ2FsaWZvcm5pYSwgdW5kZXIgdGhlIGF1c3BpY2VzIG9mIEpBTVMvRW5kRGlzcHV0ZTsgYW5kIChjKSBhbnkgbGl0aWdhdGlvbgorcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsCitDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEKK0NvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlCithcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsCitTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQKK3RoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdAorYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUworCitFeGNlcHQgaW4gY2FzZXMgd2hlcmUgYW5vdGhlciBDb250cmlidXRvciBoYXMgZmFpbGVkIHRvIGNvbXBseSB3aXRoIFNlY3Rpb24KKzMuNCwgWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YKK1lvdXIgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgYmFzZWQgb24gdGhlIG51bWJlciBvZiBjb3BpZXMgb2YKK0NvdmVyZWQgQ29kZSB5b3UgbWFkZSBhdmFpbGFibGUsIHRoZSByZXZlbnVlcyB5b3UgcmVjZWl2ZWQgZnJvbSB1dGlsaXppbmcgc3VjaAorcmlnaHRzLCBhbmQgb3RoZXIgcmVsZXZhbnQgZmFjdG9ycy4gWW91IGFncmVlIHRvIHdvcmsgd2l0aCBhZmZlY3RlZCBwYXJ0aWVzIHRvCitkaXN0cmlidXRlIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4KKworMTMuIEFERElUSU9OQUwgVEVSTVMgQVBQTElDQUJMRSBUTyBUSEUgUkVEIEhBVCBFQ09TIFBVQkxJQyBMSUNFTlNFCisKK05vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IFJlZCBIYXQgZnJvbSBsaWNlbnNpbmcKK3VuZGVyIGRpZmZlcmVudCB0ZXJtcyB0aGFuIHRoaXMgTGljZW5zZSBhbnkgY29kZSB3aGljaCBSZWQgSGF0IG90aGVyd2lzZSB3b3VsZAoraGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCisKK1JlZCBIYXQgYW5kIGxvZ28gLSBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFyaworUmVkIEhhdCwgdGhlIFJlZCBIYXQgbG9nbywgZUNvcyBsb2dvLCBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZQorT3JpZ2luYWwgQ29kZS4gWW91IG1heSBjb250YWN0IFJlZCBIYXQgZm9yIHBlcm1pc3Npb24gdG8gZGlzcGxheSB0aGUgUmVkIEhhdAorYW5kIGVDb3MgbWFya3MgaW4gZWl0aGVyIHRoZSBkb2N1bWVudGF0aW9uIG9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gYmV5b25kCit0aGF0IHJlcXVpcmVkIGluIEV4aGliaXQgQi4KKworSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gQ29udHJhY3R1YWwgT2JsaWdhdGlvbiAtIFRvIHRoZSBleHRlbnQgdGhhdCBSZWQgSGF0CitpcyBsaW1pdGVkIGNvbnRyYWN0dWFsbHkgZnJvbSBtYWtpbmcgdGhpcmQgcGFydHkgY29kZSBhdmFpbGFibGUgdW5kZXIgdGhpcworTGljZW5zZSwgUmVkIEhhdCBtYXkgY2hvb3NlIHRvIGludGVncmF0ZSBzdWNoIHRoaXJkIHBhcnR5IGNvZGUgaW50byBDb3ZlcmVkCitDb2RlIHdpdGhvdXQgYmVpbmcgcmVxdWlyZWQgdG8gZGlzdHJpYnV0ZSBzdWNoIHRoaXJkIHBhcnR5IGNvZGUgaW4gU291cmNlIENvZGUKK2Zvcm0sIGV2ZW4gaWYgc3VjaCB0aGlyZCBwYXJ0eSBjb2RlIHdvdWxkIG90aGVyd2lzZSBiZSBjb25zaWRlcmVkCisiTW9kaWZpY2F0aW9ucyIgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitFWEhJQklUIEEKKworIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFJlZCBIYXQgZUNvcyBQdWJsaWMgTGljZW5zZQorVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovLword3d3LnJlZGhhdC5jb20vCisKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKK2Jhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKK2ZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGlzIGVDb3MgLSBFbWJlZGRlZCBDb25maWd1cmFibGUgT3BlcmF0aW5nIFN5c3RlbSwgcmVsZWFzZWQKK1NlcHRlbWJlciAzMCwgMTk5OC4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIFJlZCBIYXQuCitQb3J0aW9ucyBjcmVhdGVkIGJ5IFJlZCBIYXQgYXJlIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCBSZWQgSGF0LCBJbmMuCitBbGwgUmlnaHRzIFJlc2VydmVkLiIKKworRVhISUJJVCBCCisKK1BhcnQgb2YgdGhlIHNvZnR3YXJlIGVtYmVkZGVkIGluIHRoaXMgcHJvZHVjdCBpcyBlQ29zIC0gRW1iZWRkZWQgQ29uZmlndXJhYmxlCitPcGVyYXRpbmcgU3lzdGVtLCBhIHRyYWRlbWFyayBvZiBSZWQgSGF0LiBQb3J0aW9ucyBjcmVhdGVkIGJ5IFJlZCBIYXQgYXJlCitDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAgUmVkIEhhdCwgSW5jLiAoaHR0cDovL3d3dy5yZWRoYXQuY29tLykuIEFsbAorUmlnaHRzIFJlc2VydmVkLgorCitUSEUgU09GVFdBUkUgSU4gVEhJUyBQUk9EVUNUIFdBUyBJTiBQQVJUIFBST1ZJREVEIEJZIFJFRCBIQVQgQU5EIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTworRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZCitPRiBTVUNIIERBTUFHRS4KKworCisKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUkhlQ29zLTEuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUkhlQ29zLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTg5MDBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SSGVDb3MtMS4xCkBAIC0wLDAgKzEsMTUxIEBACisKK1JlZCBIYXQgZUNvcyBQdWJsaWMgTGljZW5zZSB2MS4xCisKKzEuIERFRklOSVRJT05TCisKKzEuMS4gIkNvbnRyaWJ1dG9yIiBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworMS4zLiAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuICJFeGVjdXRhYmxlIiBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKworMS42LiAiSW5pdGlhbCBEZXZlbG9wZXIiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKworMS43LiAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuOC4gIkxpY2Vuc2UiIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOS4gIk1vZGlmaWNhdGlvbnMiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorCitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMS4gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBhIGxpc3Qgb2Ygc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3JgcyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKzEuMTIuICJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisxLjEzLiAiUmVkIEhhdCBCcmFuZGVkIENvZGUiIGlzIGNvZGUgdGhhdCBSZWQgSGF0IGRpc3RyaWJ1dGVzIGFuZC9vciBwZXJtaXRzIG90aGVycyB0byBkaXN0cmlidXRlIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyB0aGFuIHRoZSBSZWQgSGF0IGVDb3MgUHVibGljIExpY2Vuc2UuIFJlZCBIYXRgcyBCcmFuZGVkIENvZGUgbWF5IGNvbnRhaW4gcGFydCBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMi4gU09VUkNFIENPREUgTElDRU5TRQorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisKKyhhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoIlV0aWxpemUiKSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIFV0aWxpemUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCitFYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IENvbnRyaWJ1dG9yLCB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuCisKKzMuIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OUworCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4KKworMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlIGFuZCB0byB0aGUgSW5pdGlhbCBEZXZlbG9wZXI7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4gWW91IGFyZSByZXNwb25zaWJsZSBmb3Igbm90aWZ5aW5nIHRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgTW9kaWZpY2F0aW9uIGFuZCB0aGUgbG9jYXRpb24gb2YgdGhlIFNvdXJjZSBpZiBhIGNvbnRhY3QgbWVhbnMgaXMgcHJvdmlkZWQuIFJlZCBIYXQgd2lsbCBiZSBhY3RpbmcgYXMgbWFpbnRhaW5lciBvZiB0aGUgU291cmNlIGFuZCBtYXkgcHJvdmlkZSBhbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBtZWNoYW5pc20gZm9yIHRoZSBNb2RpZmljYXRpb24gdG8gYmUgbWFkZSBhdmFpbGFibGUuIFlvdSBjYW4gY29udGFjdCBSZWQgSGF0IHRvIG1ha2UgdGhlIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYW5kIHRvIG5vdGlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIChodHRwOi8vc291cmNld2FyZS5jeWdudXMuY29tL2Vjb3MvKQorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuIAorSWYgWW91IGhhdmUga25vd2xlZGdlIHRoYXQgYSBwYXJ0eSBjbGFpbXMgYW4gaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IGluIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBvciBjb2RlIChvciBpdHMgdXRpbGl6YXRpb24gdW5kZXIgdGhpcyBMaWNlbnNlKSwgeW91IG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiB5b3Ugb2J0YWluIHN1Y2gga25vd2xlZGdlIGFmdGVyIFlvdSBtYWtlIFlvdXIgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIFlvdSBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBZb3UgbWFrZSBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKworKGIpIENvbnRyaWJ1dG9yIEFQSXMuIAorSWYgWW91ciBNb2RpZmljYXRpb24gaXMgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBZb3Ugb3duIG9yIGNvbnRyb2wgcGF0ZW50cyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUsIGFuZCB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSwgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSwgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIFNvdXJjZSBDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIHlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSBmaWxlKSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuCisKK0hvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCitJZiB5b3UgZGlzdHJpYnV0ZSBleGVjdXRhYmxlIHZlcnNpb25zIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlLCB5b3UgbXVzdCByZXByb2R1Y2UgdGhlIG5vdGljZSBpbiBFeGhpYml0IEIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBwcm9kdWN0LgorCiszLjcuIExhcmdlciBXb3Jrcy4KK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSU5BQklMSVRZIFRPIENPTVBMWSBEVUUgVE8gU1RBVFVURSBPUiBSRUdVTEFUSU9OCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgKGIpIGNpdGUgdGhlIHN0YXR1dGUgb3IgcmVndWxhdGlvbiB0aGF0IHByb2hpYml0cyB5b3UgZnJvbSBhZGhlcmluZyB0byB0aGUgbGljZW5zZTsgYW5kIChjKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LiBZb3UgbXVzdCBzdWJtaXQgdGhpcyBMRUdBTCBmaWxlIHRvIFJlZCBIYXQgZm9yIHJldmlldywgYW5kIFlvdSB3aWxsIG5vdCBiZSBhYmxlIHVzZSB0aGUgY292ZXJlZCBjb2RlIGluIGFueSBtZWFucyB1bnRpbCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgZnJvbSBSZWQgSGF0IHRvIGFsbG93IGZvciB0aGUgaW5hYmlsaXR5IHRvIGNvbXBseSBkdWUgdG8gc3RhdHV0ZSBvciByZWd1bGF0aW9uLgorCis1LiBBUFBMSUNBVElPTiBPRiBUSElTIExJQ0VOU0UKKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBLCBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKK1JlZCBIYXQgbWF5IGluY2x1ZGUgQ292ZXJlZCBDb2RlIGluIHByb2R1Y3RzIHdpdGhvdXQgc3VjaCBhZGRpdGlvbmFsIHByb2R1Y3RzIGJlY29taW5nIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIHN1Y2ggYWRkaXRpb25hbCBwcm9kdWN0cyBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlLgorCitSZWQgSGF0IG1heSBsaWNlbnNlIHRoZSBTb3VyY2UgQ29kZSBvZiBSZWQgSGF0IEJyYW5kZWQgQ29kZSB3aXRob3V0IFJlZCBIYXQgQnJhbmRlZCBDb2RlIGJlY29taW5nIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIFJlZCBIYXQgQnJhbmRlZCBDb2RlIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UuIENvbnRhY3QgUmVkIEhhdCBmb3IgZGV0YWlscyBvZiBhbHRlcm5hdGUgbGljZW5zaW5nIHRlcm1zIGF2YWlsYWJsZS4KKworNi4gVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0UKKworNi4xLiBOZXcgVmVyc2lvbnMuCitSZWQgSGF0IG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFJlZCBIYXQuIE5vIG9uZSBvdGhlciB0aGFuIFJlZCBIYXQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGJleW9uZCB3aGF0IGlzIGdyYW50ZWQgdW5kZXIgdGhpcyBhbmQgc3Vic2VxdWVudCBMaWNlbnNlcy4KKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLgorSWYgeW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgIkVDT1MiLCAiZUNvcyIsICJSZWQgSGF0IiwgIlJIRVBMIiBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBhbnl3aGVyZSBpbiB5b3VyIGxpY2Vuc2UgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IHlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgUmVkIEhhdCBlQ29zIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkKKworQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzguIFRFUk1JTkFUSU9OCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkKKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gWU9VIE9SIEFOWSBPVEhFUiBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhBVCBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTCisKK1RoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtLCIgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIiBhbmQgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwiIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTEuIE1JU0NFTExBTkVPVVMKKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluLCB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhOiAoYSkgdW5sZXNzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZywgYWxsIGRpc3B1dGVzIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSAoZXhjZXB0aW5nIGFueSBkaXNwdXRlIHJlbGF0aW5nIHRvIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMpIHNoYWxsIGJlIHN1YmplY3QgdG8gZmluYWwgYW5kIGJpbmRpbmcgYXJiaXRyYXRpb24sIHdpdGggdGhlIGxvc2luZyBwYXJ0eSBwYXlpbmcgYWxsIGNvc3RzIG9mIGFyYml0cmF0aW9uOyAoYikgYW55IGFyYml0cmF0aW9uIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGhlbGQgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB1bmRlciB0aGUgYXVzcGljZXMgb2YgSkFNUy9FbmREaXNwdXRlOyBhbmQgKGMpIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUworCitFeGNlcHQgaW4gY2FzZXMgd2hlcmUgYW5vdGhlciBDb250cmlidXRvciBoYXMgZmFpbGVkIHRvIGNvbXBseSB3aXRoIFNlY3Rpb24gMy40LCBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBZb3VyIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgY29waWVzIG9mIENvdmVyZWQgQ29kZSB5b3UgbWFkZSBhdmFpbGFibGUsIHRoZSByZXZlbnVlcyB5b3UgcmVjZWl2ZWQgZnJvbSB1dGlsaXppbmcgc3VjaCByaWdodHMsIGFuZCBvdGhlciByZWxldmFudCBmYWN0b3JzLiBZb3UgYWdyZWUgdG8gd29yayB3aXRoIGFmZmVjdGVkIHBhcnRpZXMgdG8gZGlzdHJpYnV0ZSByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuCisKKzEzLiBBRERJVElPTkFMIFRFUk1TIEFQUExJQ0FCTEUgVE8gVEhFIFJFRCBIQVQgRUNPUyBQVUJMSUMgTElDRU5TRQorCitOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBSZWQgSGF0IGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyB0aGFuIHRoaXMgTGljZW5zZSBhbnkgY29kZSB3aGljaCBSZWQgSGF0IG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKworUmVkIEhhdCBhbmQgbG9nbyAtIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrIFJlZCBIYXQsIHRoZSBSZWQgSGF0IGxvZ28sIGVDb3MgbG9nbywgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IG1heSBjb250YWN0IFJlZCBIYXQgZm9yIHBlcm1pc3Npb24gdG8gZGlzcGxheSB0aGUgUmVkIEhhdCBhbmQgZUNvcyBtYXJrcyBpbiBlaXRoZXIgdGhlIGRvY3VtZW50YXRpb24gb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBiZXlvbmQgdGhhdCByZXF1aXJlZCBpbiBFeGhpYml0IEIuCisKK0luYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIENvbnRyYWN0dWFsIE9ibGlnYXRpb24gLSBUbyB0aGUgZXh0ZW50IHRoYXQgUmVkIEhhdCBpcyBsaW1pdGVkIGNvbnRyYWN0dWFsbHkgZnJvbSBtYWtpbmcgdGhpcmQgcGFydHkgY29kZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbnNlLCBSZWQgSGF0IG1heSBjaG9vc2UgdG8gaW50ZWdyYXRlIHN1Y2ggdGhpcmQgcGFydHkgY29kZSBpbnRvIENvdmVyZWQgQ29kZSB3aXRob3V0IGJlaW5nIHJlcXVpcmVkIHRvIGRpc3RyaWJ1dGUgc3VjaCB0aGlyZCBwYXJ0eSBjb2RlIGluIFNvdXJjZSBDb2RlIGZvcm0sIGV2ZW4gaWYgc3VjaCB0aGlyZCBwYXJ0eSBjb2RlIHdvdWxkIG90aGVyd2lzZSBiZSBjb25zaWRlcmVkICJNb2RpZmljYXRpb25zIiB1bmRlciB0aGlzIExpY2Vuc2UuCisKK0VYSElCSVQgQQorCisiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgUmVkIEhhdCBlQ29zIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5yZWRoYXQuY29tLworCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXMgZUNvcyAtIEVtYmVkZGVkIENvbmZpZ3VyYWJsZSBPcGVyYXRpbmcgU3lzdGVtLCByZWxlYXNlZCBTZXB0ZW1iZXIgMzAsIDE5OTguIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBSZWQgSGF0LiBQb3J0aW9ucyBjcmVhdGVkIGJ5IFJlZCBIYXQgYXJlIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIgorCitFWEhJQklUIEIKKworUGFydCBvZiB0aGUgc29mdHdhcmUgZW1iZWRkZWQgaW4gdGhpcyBwcm9kdWN0IGlzIGVDb3MgLSBFbWJlZGRlZCBDb25maWd1cmFibGUgT3BlcmF0aW5nIFN5c3RlbSwgYSB0cmFkZW1hcmsgb2YgUmVkIEhhdC4gUG9ydGlvbnMgY3JlYXRlZCBieSBSZWQgSGF0IGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAgUmVkIEhhdCwgSW5jLiAoaHR0cDovL3d3dy5yZWRoYXQuY29tLykuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBJTiBUSElTIFBST0RVQ1QgV0FTIElOIFBBUlQgUFJPVklERUQgQlkgUkVEIEhBVCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JQTC0xLjUgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JQTC0xLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5MDg3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUlBMLTEuNQpAQCAtMCwwICsxLDU0NiBAQAorCitSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlIDEuNSAoUlBMMS41KQorCitSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlIChSUEwpCisKK1ZlcnNpb24gMS41LCBKdWx5IDE1LCAyMDA3CisKK0NvcHlyaWdodCAoQykgMjAwMS0yMDA3CitUZWNobmljYWwgUHVyc3VpdCBJbmMuLAorQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworUFJFQU1CTEUKKworVGhlIFJlY2lwcm9jYWwgUHVibGljIExpY2Vuc2UgKFJQTCkgaXMgYmFzZWQgb24gdGhlIGNvbmNlcHQgb2YgcmVjaXByb2NpdHkgb3IsCitpZiB5b3UgcHJlZmVyLCBmYWlybmVzcy4KKworSW4gc2hvcnQsIHRoaXMgbGljZW5zZSBncmV3IG91dCBvZiBhIGRlc2lyZSB0byBjbG9zZSBsb29waG9sZXMgaW4gcHJldmlvdXMgb3Blbgorc291cmNlIGxpY2Vuc2VzLCBsb29waG9sZXMgdGhhdCBhbGxvd2VkIHBhcnRpZXMgdG8gYWNxdWlyZSBvcGVuIHNvdXJjZSBzb2Z0d2FyZQorYW5kIGRlcml2ZSBmaW5hbmNpYWwgYmVuZWZpdCBmcm9tIGl0IHdpdGhvdXQgaGF2aW5nIHRvIHJlbGVhc2UgdGhlaXIKK2ltcHJvdmVtZW50cyBvciBkZXJpdmF0aXZlcyB0byB0aGUgY29tbXVuaXR5IHdoaWNoIGVuYWJsZWQgdGhlbS4gVGhpcyBvY2N1cnJlZAorYW55IHRpbWUgYW4gZW50aXR5IGRpZCBub3QgcmVsZWFzZSB0aGVpciBhcHBsaWNhdGlvbiB0byBhICJ0aGlyZCBwYXJ0eSIuCisKK1doaWxlIHRoZXJlIGlzIGEgY2VydGFpbiBmcmVlZG9tIGluIHRoaXMgbW9kZWwgb2YgbGljZW5zaW5nLCBpdCBzdHJ1Y2sgdGhlCithdXRob3JzIG9mIHRoZSBSUEwgYXMgYmVpbmcgdW5mYWlyIHRvIHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYXQgbGFyZ2UgYW5kIHRvCit0aGUgb3JpZ2luYWwgYXV0aG9ycyBvZiB0aGUgd29ya3MgaW4gcGFydGljdWxhci4gQWZ0ZXIgYWxsLCBidWcgZml4ZXMsCitleHRlbnNpb25zLCBhbmQgbWVhbmluZ2Z1bCBhbmQgdmFsdWFibGUgZGVyaXZhdGl2ZXMgd2VyZSBub3QgY29uc2lzdGVudGx5CitmaW5kaW5nIHRoZWlyIHdheSBiYWNrIGludG8gdGhlIGNvbW11bml0eSB3aGVyZSB0aGV5IGNvdWxkIGZ1ZWwgZnVydGhlciwgYW5kCitmYXN0ZXIsIGdyb3d0aCBhbmQgZXhwYW5zaW9uIG9mIHRoZSBvdmVyYWxsIG9wZW4gc291cmNlIHNvZnR3YXJlIGJhc2UuCisKK1doaWxlIHlvdSBzaG91bGQgY2xlYXJseSByZWFkIGFuZCB1bmRlcnN0YW5kIHRoZSBlbnRpcmUgbGljZW5zZSwgdGhlIGVzc2VuY2Ugb2YKK3RoZSBSUEwgaXMgZm91bmQgaW4gdHdvIGRlZmluaXRpb25zOiAiRGVwbG95IiBhbmQgIlJlcXVpcmVkIENvbXBvbmVudHMiLgorCitSZWdhcmRpbmcgZGVwbG95bWVudCwgdW5kZXIgdGhlIFJQTCB5b3VyIGNoYW5nZXMsIGJ1ZyBmaXhlcywgZXh0ZW5zaW9ucywgZXRjLgorbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGF0IGxhcmdlIHdoZW4geW91IERlcGxveSBpbgorYW55IGZvcm0gLS0gZWl0aGVyIGludGVybmFsbHkgb3IgdG8gYW4gb3V0c2lkZSBwYXJ0eS4gT25jZSB5b3Ugc3RhcnQgcnVubmluZwordGhlIHNvZnR3YXJlIHlvdSBoYXZlIHRvIHN0YXJ0IHNoYXJpbmcgdGhlIHNvZnR3YXJlLgorCitGdXJ0aGVyLCB1bmRlciB0aGUgUlBMIGFsbCBjb21wb25lbnRzIHlvdSBhdXRob3IgaW5jbHVkaW5nIHNjaGVtYXMsIHNjcmlwdHMsCitzb3VyY2UgY29kZSwgZXRjLiAtLSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleWByZSBjb21waWxlZCBpbnRvIGEgc2luZ2xlCitiaW5hcnkgb3IgdXNlZCBhcyB0d28gaGFsdmVzIG9mIGNsaWVudC9zZXJ2ZXIgYXBwbGljYXRpb24gLS0gbXVzdCBiZSBzaGFyZWQuCitZb3UgaGF2ZSB0byBzaGFyZSB0aGUgd2hvbGUgcGllLCBub3QgYW4gaXNvbGF0ZWQgc2xpY2Ugb2YgaXQuCisKK0luIGFkZGl0aW9uIHRvIHRoZXNlIGdvYWxzLCB0aGUgUlBMIHdhcyBhdXRob3JlZCB0byBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YKK3RoZSBPcGVuIFNvdXJjZSBEZWZpbml0aW9uIGFzIG1haW50YWluZWQgYnkgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUgKE9TSSkuCisKK1RoZSBzcGVjaWZpYyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgbGljZW5zZSBhcmUgZGVmaW5lZCBpbiB0aGUgcmVtYWluZGVyCitvZiB0aGlzIGRvY3VtZW50LgorCitMSUNFTlNFIFRFUk1TCisKKzEuMCBHZW5lcmFsOyBBcHBsaWNhYmlsaXR5ICZhbXA7IERlZmluaXRpb25zLiBUaGlzIFJlY2lwcm9jYWwgUHVibGljIExpY2Vuc2UKK1ZlcnNpb24gMS41ICgiTGljZW5zZSIpIGFwcGxpZXMgdG8gYW55IHByb2dyYW1zIG9yIG90aGVyIHdvcmtzIGFzIHdlbGwgYXMgYW55CithbmQgYWxsIHVwZGF0ZXMgb3IgbWFpbnRlbmFuY2UgcmVsZWFzZXMgb2Ygc2FpZCBwcm9ncmFtcyBvciB3b3JrcyAoIlNvZnR3YXJlIikKK25vdCBhbHJlYWR5IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIHdoaWNoIHRoZSBTb2Z0d2FyZSBjb3B5cmlnaHQgaG9sZGVyCisoIkxpY2Vuc29yIikgbWFrZXMgYXZhaWxhYmxlIGNvbnRhaW5pbmcgYSBMaWNlbnNlIE5vdGljZSAoaGVyZWluYWZ0ZXIgZGVmaW5lZCkKK2Zyb20gdGhlIExpY2Vuc29yIHNwZWNpZnlpbmcgb3IgYWxsb3dpbmcgdXNlIG9yIGRpc3RyaWJ1dGlvbiB1bmRlciB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZS4gQXMgdXNlZCBpbiB0aGlzIExpY2Vuc2U6CisKKzEuMSAiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHdobyBjcmVhdGVkIG9yIGNvbnRyaWJ1dGVkIHRvIHRoZQorY3JlYXRpb24gb2YgYW4gRXh0ZW5zaW9uLgorCisxLjIgIkRlcGxveSIgbWVhbnMgdG8gdXNlLCBTZXJ2ZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIExpY2Vuc2VkIFNvZnR3YXJlCitvdGhlciB0aGFuIGZvciBZb3VyIGludGVybmFsIFJlc2VhcmNoIGFuZC9vciBQZXJzb25hbCBVc2UsIGFuZCBpbmNsdWRlcword2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgYW5kIGFsbCBpbnRlcm5hbCB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIExpY2Vuc2VkCitTb2Z0d2FyZSB3aXRoaW4gWW91ciBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gb3RoZXIgdGhhbiBmb3IgUmVzZWFyY2ggYW5kL29yCitQZXJzb25hbCBVc2UsIGFzIHdlbGwgYXMgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpb24gb2YKK0xpY2Vuc2VkIFNvZnR3YXJlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHkgaW4gYW55IGZvcm0gb3IgbWFubmVyLgorCisxLjMgIkRlcml2YXRpdmUgV29ya3MiIGFzIHVzZWQgaW4gdGhpcyBMaWNlbnNlIGlzIGRlZmluZWQgdW5kZXIgVS5TLiBjb3B5cmlnaHQKK2xhdy4KKworMS40ICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZAoraW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YSBzdWNoCithcyBkb3dubG9hZCBmcm9tIGFuIEZUUCBzZXJ2ZXIgb3Igd2ViIHNpdGUsIHdoZXJlIHN1Y2ggbWVjaGFuaXNtIGlzIHB1YmxpY2x5CithY2Nlc3NpYmxlLgorCisxLjUgIkV4dGVuc2lvbnMiIG1lYW5zIGFueSBNb2RpZmljYXRpb25zLCBEZXJpdmF0aXZlIFdvcmtzLCBvciBSZXF1aXJlZAorQ29tcG9uZW50cyBhcyB0aG9zZSB0ZXJtcyBhcmUgZGVmaW5lZCBpbiB0aGlzIExpY2Vuc2UuCisKKzEuNiAiTGljZW5zZSIgbWVhbnMgdGhpcyBSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlLgorCisxLjcgIkxpY2Vuc2UgTm90aWNlIiBtZWFucyBhbnkgbm90aWNlIGNvbnRhaW5lZCBpbiBFWEhJQklUIEEuCisKKzEuOCAiTGljZW5zZWQgU29mdHdhcmUiIG1lYW5zIGFueSBTb2Z0d2FyZSBsaWNlbnNlZCBwdXJzdWFudCB0byB0aGlzIExpY2Vuc2UuCitMaWNlbnNlZCBTb2Z0d2FyZSBhbHNvIGluY2x1ZGVzIGFsbCBwcmV2aW91cyBFeHRlbnNpb25zIGZyb20gYW55IENvbnRyaWJ1dG9yCit0aGF0IFlvdSByZWNlaXZlLgorCisxLjkgIkxpY2Vuc29yIiBtZWFucyB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiBhbnkgU29mdHdhcmUgcHJldmlvdXNseSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIHdobyByZWxlYXNlcyB0aGUgU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UuCisKKzEuMTAgIk1vZGlmaWNhdGlvbnMiIG1lYW5zIGFueSBhZGRpdGlvbnMgdG8gb3IgZGVsZXRpb25zIGZyb20gdGhlIHN1YnN0YW5jZSBvcgorc3RydWN0dXJlIG9mIChpKSBhIGZpbGUgb3Igb3RoZXIgc3RvcmFnZSBjb250YWluaW5nIExpY2Vuc2VkIFNvZnR3YXJlLCBvciAoaWkpCithbnkgbmV3IGZpbGUgb3Igc3RvcmFnZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIExpY2Vuc2VkIFNvZnR3YXJlLCBvciAoaWlpKQorYW55IGZpbGUgb3Igc3RvcmFnZSB3aGljaCByZXBsYWNlcyBvciBvdGhlcndpc2UgYWx0ZXJzIHRoZSBvcmlnaW5hbAorZnVuY3Rpb25hbGl0eSBvZiBMaWNlbnNlZCBTb2Z0d2FyZSBhdCBydW50aW1lLgorCisxLjExICJQZXJzb25hbCBVc2UiIG1lYW5zIHVzZSBvZiBMaWNlbnNlZCBTb2Z0d2FyZSBieSBhbiBpbmRpdmlkdWFsIHNvbGVseSBmb3IKK2hpcyBvciBoZXIgcGVyc29uYWwsIHByaXZhdGUgYW5kIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLiBBbiBpbmRpdmlkdWFsYHMgdXNlCitvZiBMaWNlbnNlZCBTb2Z0d2FyZSBpbiBoaXMgb3IgaGVyIGNhcGFjaXR5IGFzIGFuIG9mZmljZXIsIGVtcGxveWVlLCBtZW1iZXIsCitpbmRlcGVuZGVudCBjb250cmFjdG9yIG9yIGFnZW50IG9mIGEgY29ycG9yYXRpb24sIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbgorKGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwpIGRvZXMgbm90IHF1YWxpZnkgYXMgUGVyc29uYWwgVXNlLgorCisxLjEyICJSZXF1aXJlZCBDb21wb25lbnRzIiBtZWFucyBhbnkgdGV4dCwgcHJvZ3JhbXMsIHNjcmlwdHMsIHNjaGVtYSwKK2ludGVyZmFjZSBkZWZpbml0aW9ucywgY29udHJvbCBmaWxlcywgb3Igb3RoZXIgd29ya3MgY3JlYXRlZCBieSBZb3Ugd2hpY2ggYXJlCityZXF1aXJlZCBieSBhIHRoaXJkIHBhcnR5IG9mIGF2ZXJhZ2Ugc2tpbGwgdG8gc3VjY2Vzc2Z1bGx5IGluc3RhbGwgYW5kIHJ1bgorTGljZW5zZWQgU29mdHdhcmUgY29udGFpbmluZyBZb3VyIE1vZGlmaWNhdGlvbnMsIG9yIHRvIGluc3RhbGwgYW5kIHJ1biBZb3VyCitEZXJpdmF0aXZlIFdvcmtzLgorCisxLjEzICJSZXNlYXJjaCIgbWVhbnMgaW52ZXN0aWdhdGlvbiBvciBleHBlcmltZW50YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mCit1bmRlcnN0YW5kaW5nIHRoZSBuYXR1cmUgYW5kIGxpbWl0cyBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgYW5kIGl0cyBwb3RlbnRpYWwKK3VzZXMuCisKKzEuMTQgIlNlcnZlIiBtZWFucyB0byBkZWxpdmVyIExpY2Vuc2VkIFNvZnR3YXJlIGFuZC9vciBZb3VyIEV4dGVuc2lvbnMgYnkKK21lYW5zIG9mIGEgY29tcHV0ZXIgbmV0d29yayB0byBvbmUgb3IgbW9yZSBjb21wdXRlcnMgZm9yIHB1cnBvc2VzIG9mIGV4ZWN1dGlvbgorb2YgTGljZW5zZWQgU29mdHdhcmUgYW5kL29yIFlvdXIgRXh0ZW5zaW9ucy4KKworMS4xNSAiU29mdHdhcmUiIG1lYW5zIGFueSBjb21wdXRlciBwcm9ncmFtcyBvciBvdGhlciB3b3JrcyBhcyB3ZWxsIGFzIGFueQordXBkYXRlcyBvciBtYWludGVuYW5jZSByZWxlYXNlcyBvZiB0aG9zZSBwcm9ncmFtcyBvciB3b3JrcyB3aGljaCBhcmUKK2Rpc3RyaWJ1dGVkIHB1YmxpY2x5IGJ5IExpY2Vuc29yLgorCisxLjE2ICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUKK0xpY2Vuc2VkIFNvZnR3YXJlIGFuZC9vciBZb3VyIEV4dGVuc2lvbnMsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBjb250YWluZWQKK3RoZXJlaW4sIHBsdXMgYW55IGFzc29jaWF0ZWQgdGV4dCwgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBvciBvdGhlcgorY29tcG9uZW50cyByZXF1aXJlZCBieSBhIHRoaXJkIHBhcnR5IG9mIGF2ZXJhZ2Ugc2tpbGwgdG8gYnVpbGQgYSBydW5uaW5nCit2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBvciBZb3VyIEV4dGVuc2lvbnMuCisKKzEuMTcgIlVzZXItVmlzaWJsZSBBdHRyaWJ1dGlvbiBOb3RpY2UiIG1lYW5zIGFueSBub3RpY2UgY29udGFpbmVkIGluIEVYSElCSVQgQi4KKworMS4xOCAiWW91IiBvciAiWW91ciIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cwordW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIiBpbmNsdWRlcyBhbnkgZW50aXR5Cit3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCwgWW91LCB3aGVyZQorImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvcgorbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAKK29mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwKK293bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4wIEFjY2VwdGFuY2UgT2YgTGljZW5zZS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBzaW5jZQoreW91IGhhdmUgbm90IHNpZ25lZCBpdCwgaG93ZXZlciBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHVzZSwKK2NvcHksIGRpc3RyaWJ1dGUsIG1vZGlmeSwgb3IgY3JlYXRlIGRlcml2YXRpdmVzIG9mIGVpdGhlciB0aGUgU29mdHdhcmUgb3IgYW55CitFeHRlbnNpb25zIGNyZWF0ZWQgYnkgYSBDb250cmlidXRvci4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYKK3lvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBwZXJmb3JtaW5nIGFueSBvZiB0aGVzZSBhY3Rpb25zCitZb3UgaW5kaWNhdGUgWW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgWW91ciBhZ3JlZW1lbnQgdG8gYmUgYm91bmQgYnkKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElGIFlPVSBETyBOT1QgQUdSRUUgV0lUSCBBTEwgVEhFIFRFUk1TIEFORAorQ09ORElUSU9OUyBPRiBUSElTIExJQ0VOU0UgRE8gTk9UIFVTRSwgTU9ESUZZLCBDUkVBVEUgREVSSVZBVElWRVMsIE9SCitESVNUUklCVVRFIFRIRSBTT0ZUV0FSRS4gSUYgSVQgSVMgSU1QT1NTSUJMRSBGT1IgWU9VIFRPIENPTVBMWSBXSVRIIEFMTCBUSEUKK1RFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgTElDRU5TRSBUSEVOIFlPVSBDQU4gTk9UIFVTRSwgTU9ESUZZLCBDUkVBVEUKK0RFUklWQVRJVkVTLCBPUiBESVNUUklCVVRFIFRIRSBTT0ZUV0FSRS4KKworMy4wIEdyYW50IG9mIExpY2Vuc2UgRnJvbSBMaWNlbnNvci4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKK3RoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi0KK2V4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIExpY2Vuc29yYHMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgYW5kIGFueQordGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcyBkZXJpdmVkIGZyb20gdGhlIExpY2Vuc2VkIFNvZnR3YXJlCit1bmRlciB0aGlzIExpY2Vuc2UsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKzMuMSBVc2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlCitMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgWW91ciBFeHRlbnNpb25zIGluIGJvdGggU291cmNlIENvZGUgZm9ybSBvciBhcyBhbgorZXhlY3V0YWJsZSBwcm9ncmFtLgorCiszLjIgQ3JlYXRlIERlcml2YXRpdmUgV29ya3MgKGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIHVuZGVyIFUuUy4gY29weXJpZ2h0IGxhdykKK29mIExpY2Vuc2VkIFNvZnR3YXJlIGJ5IGFkZGluZyB0byBvciBkZWxldGluZyBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlCitvZiBzYWlkIExpY2Vuc2VkIFNvZnR3YXJlLgorCiszLjMgVW5kZXIgY2xhaW1zIG9mIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IExpY2Vuc29yLAordG8gbWFrZSwgdXNlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBMaWNlbnNlZCBTb2Z0d2FyZSBvcgorcG9ydGlvbnMgdGhlcmVvZiwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggY2xhaW0gaXMgbmVjZXNzYXJ5IHRvCitlbmFibGUgWW91IHRvIG1ha2UsIHVzZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTGljZW5zZWQKK1NvZnR3YXJlIG9yIHBvcnRpb25zIHRoZXJlb2YuCisKKzMuNCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSBuZXcgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlIHdpdGgKK2RpZmZlcmVudCBmZWF0dXJlcywgc3BlY2lmaWNhdGlvbnMsIGNhcGFiaWxpdGllcywgZnVuY3Rpb25zLCBsaWNlbnNpbmcgdGVybXMsCitnZW5lcmFsIGF2YWlsYWJpbGl0eSBvciBvdGhlciBjaGFyYWN0ZXJpc3RpY3MuIFRpdGxlLCBvd25lcnNoaXAgcmlnaHRzLCBhbmQKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW4gYW5kIHRvIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBzaGFsbCByZW1haW4gaW4KK0xpY2Vuc29yIGFuZC9vciBpdHMgQ29udHJpYnV0b3JzLgorCis0LjAgR3JhbnQgb2YgTGljZW5zZSBGcm9tIENvbnRyaWJ1dG9yLiBCeSBhcHBsaWNhdGlvbiBvZiB0aGUgcHJvdmlzaW9ucyBpbgorU2VjdGlvbiA2IGJlbG93LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS0KK2ZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byBzYWlkIENvbnRyaWJ1dG9yYHMgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMsIGFuZCBhbnkgdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcyBkZXJpdmVkIGZyb20KK3RoZSBMaWNlbnNlZCBTb2Z0d2FyZSB1bmRlciB0aGlzIExpY2Vuc2UsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKzQuMSBVc2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIGFueQorRXh0ZW5zaW9ucyBEZXBsb3llZCBieSBzdWNoIENvbnRyaWJ1dG9yIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluIGJvdGggU291cmNlCitDb2RlIGZvcm0gb3IgYXMgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLCBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcyBvciBhcworcGFydCBvZiBEZXJpdmF0aXZlIFdvcmtzLgorCis0LjIgVW5kZXIgY2xhaW1zIG9mIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5CitDb250cmlidXRvciwgdG8gbWFrZSwgdXNlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBFeHRlbnNpb25zCitvciBwb3J0aW9ucyB0aGVyZW9mLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBjbGFpbSBpcyBuZWNlc3NhcnkKK3RvIGVuYWJsZSBZb3UgdG8gbWFrZSwgdXNlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZgorTGljZW5zZWQgU29mdHdhcmUgb3IgcG9ydGlvbnMgdGhlcmVvZi4KKworNS4wIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8KK2dyYW50IGFueSByaWdodHMgdG8gdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkKK290aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXhjZXB0IGFzIGV4cHJlc3NseQorc3RhdGVkIGhlcmVpbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbnMgMyBhbmQgNCwgbm8gb3RoZXIgcGF0ZW50CityaWdodHMsIGV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgaGVyZWluLiBZb3VyIEV4dGVuc2lvbnMgbWF5IHJlcXVpcmUKK2FkZGl0aW9uYWwgcGF0ZW50IGxpY2Vuc2VzIGZyb20gTGljZW5zb3Igb3IgQ29udHJpYnV0b3JzIHdoaWNoIGVhY2ggbWF5IGdyYW50CitpbiBpdHMgc29sZSBkaXNjcmV0aW9uLiBObyByaWdodCBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIG9yCithbnkgQ29udHJpYnV0b3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZWQgU29mdHdhcmUuCitOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tCitsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueSBjb2RlIHRoYXQgTGljZW5zb3IKK290aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKworNS4xIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgYWx0aG91Z2ggTGljZW5zb3IgYW5kIGVhY2gKK0NvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwb3J0aW9ucyBvZiB0aGUgTGljZW5zZWQKK1NvZnR3YXJlIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IExpY2Vuc29yIG9yIGFueQorQ29udHJpYnV0b3IgdGhhdCB0aGUgTGljZW5zZWQgU29mdHdhcmUgZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlcgoraW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBMaWNlbnNvciBhbmQgZWFjaAorQ29udHJpYnV0b3IgZGlzY2xhaW0gYW55IGxpYWJpbGl0eSB0byBZb3UgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlcgorZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMKK2EgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIFlvdQoraGVyZWJ5IGFzc3VtZSBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzCityZXF1aXJlZCB0byBhbGxvdyBZb3UgdG8gZGlzdHJpYnV0ZSB0aGUgTGljZW5zZWQgU29mdHdhcmUsIGl0IGlzIFlvdXIKK3Jlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIExpY2Vuc2VkCitTb2Z0d2FyZS4KKworNi4wIFlvdXIgT2JsaWdhdGlvbnMgQW5kIEdyYW50cy4gSW4gY29uc2lkZXJhdGlvbiBvZiwgYW5kIGFzIGFuIGV4cHJlc3MKK2NvbmRpdGlvbiB0bywgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBZb3UgaGVyZWJ5IGFncmVlCit0aGF0IGFueSBNb2RpZmljYXRpb25zLCBEZXJpdmF0aXZlIFdvcmtzLCBvciBSZXF1aXJlZCBDb21wb25lbnRzIChjb2xsZWN0aXZlbHkKK0V4dGVuc2lvbnMpIHRoYXQgWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlCit0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIFNlY3Rpb24gNC4gQW55IEV4dGVuc2lvbnMKK3RoYXQgWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIERlcGxveWVkIHVuZGVyIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNy4gWW91CitoZXJlYnkgZ3JhbnQgdG8gTGljZW5zb3IgYW5kIGFsbCB0aGlyZCBwYXJ0aWVzIGEgd29ybGQtd2lkZSwgbm9uLWV4Y2x1c2l2ZSwKK3JveWFsdHktZnJlZSBsaWNlbnNlIHVuZGVyIHRob3NlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgWW91IG93biBvcgorY29udHJvbCB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5LCBjcmVhdGUgZGVyaXZhdGl2ZXMsCitzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBMaWNlbnNlZCBTb2Z0d2FyZSwgaW4gYW55IGZvcm0uIEFueSBFeHRlbnNpb25zIFlvdQorbWFrZSBhbmQgRGVwbG95IG11c3QgaGF2ZSBhIGRpc3RpbmN0IHRpdGxlIHNvIGFzIHRvIHJlYWRpbHkgdGVsbCBhbnkKK3N1YnNlcXVlbnQgdXNlciBvciBDb250cmlidXRvciB0aGF0IHRoZSBFeHRlbnNpb25zIGFyZSBieSBZb3UuIFlvdSBtdXN0CitpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugb3IgZGlyZWN0aW9ucyBvbiBob3cgdG8gb2J0YWluIGEgY29weSB3aXRoCitldmVyeSBjb3B5IG9mIHRoZSBFeHRlbnNpb25zIFlvdSBkaXN0cmlidXRlLiBZb3UgYWdyZWUgbm90IHRvIG9mZmVyIG9yIGltcG9zZQorYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSBvciBleGVjdXRhYmxlIHZlcnNpb24gb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlLAorb3IgaXRzIEV4dGVuc2lvbnMgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuCisKKzYuMSBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIFlvdSBtdXN0IG1ha2UgYXZhaWxhYmxlLCB1bmRlciB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBFeHRlbnNpb25zIHRoYXQgWW91IERlcGxveSwgdmlhIGFuCitFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20uIFRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IHZlcnNpb24gdGhhdCBZb3UKK0RlcGxveSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHdpdGhpbiBvbmUgKDEpIG1vbnRoIG9mIHdoZW4geW91IERlcGxveSBhbmQgbXVzdAorcmVtYWluIGF2YWlsYWJsZSBmb3Igbm8gbGVzcyB0aGFuIHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBZb3UgY2Vhc2UKK3RvIERlcGxveS4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdG8gZWFjaAordmVyc2lvbiBZb3UgRGVwbG95IHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uCitNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LiBZb3UgbWF5IG5vdCBjaGFyZ2UgYSBmZWUgZm9yIGFueQorY29weSBvZiB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBTZWN0aW9uIGluIGV4Y2VzcyBvZiBZb3VyCithY3R1YWwgY29zdCBvZiBkdXBsaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIG9mIHNhaWQgY29weS4KKworNi4yIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuIFlvdSBtdXN0IGNhdXNlIGFueSBNb2RpZmljYXRpb25zIHRoYXQgWW91CitjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gYmUgZG9jdW1lbnRlZCBpbiB0aGUgU291cmNlIENvZGUsIGNsZWFybHkKK2Rlc2NyaWJpbmcgdGhlIGFkZGl0aW9ucywgY2hhbmdlcyBvciBkZWxldGlvbnMgWW91IG1hZGUuIFlvdSBtdXN0IGluY2x1ZGUgYQorcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb25zIGFyZSBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LAorZnJvbSB0aGUgTGljZW5zZWQgU29mdHdhcmUgYW5kIGluY2x1ZGUgdGhlIG5hbWVzIG9mIHRoZSBMaWNlbnNvciBhbmQgYW55CitDb250cmlidXRvciB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUgaW4gKGkpIHRoZSBTb3VyY2UgQ29kZSBhbmQgKGlpKSBpbiBhbnkKK25vdGljZSBkaXNwbGF5ZWQgYnkgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIFlvdSBkaXN0cmlidXRlIG9yIGluIHJlbGF0ZWQKK2RvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBMaWNlbnNlZAorU29mdHdhcmUuIFlvdSBtYXkgbm90IG1vZGlmeSBvciBkZWxldGUgYW55IHByZS1leGlzdGluZyBjb3B5cmlnaHQgbm90aWNlcywKK2NoYW5nZSBub3RpY2VzIG9yIExpY2Vuc2UgdGV4dCBpbiB0aGUgTGljZW5zZWQgU29mdHdhcmUgd2l0aG91dCB3cml0dGVuCitwZXJtaXNzaW9uIG9mIHRoZSByZXNwZWN0aXZlIExpY2Vuc29yIG9yIENvbnRyaWJ1dG9yLgorCis2LjMgSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMuCisKK2EuIFRoaXJkIFBhcnR5IENsYWltcy4gSWYgWW91IGhhdmUga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHRvIGEgdGhpcmQgcGFydHlgcworaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSB0aGlzCitMaWNlbnNlLCBZb3UgbXVzdCBpbmNsdWRlIGEgaHVtYW4tcmVhZGFibGUgZmlsZSB3aXRoIFlvdXIgZGlzdHJpYnV0aW9uIHRoYXQKK2Rlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYQorcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuCisKK2IuIENvbnRyaWJ1dG9yIEFQSXMuIElmIFlvdXIgRXh0ZW5zaW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nCitpbnRlcmZhY2UgKCJBUEkiKSBhbmQgWW91IGhhdmUga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB0aGF0IGFyZQorcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBZb3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcworaW5mb3JtYXRpb24gaW4gYSBodW1hbi1yZWFkYWJsZSBmaWxlIHN1cHBsaWVkIHdpdGggWW91ciBkaXN0cmlidXRpb24uCisKK2MuIFJlcHJlc2VudGF0aW9ucy4gWW91IHJlcHJlc2VudCB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIDYuMyhhKQorYWJvdmUsIFlvdSBiZWxpZXZlIHRoYXQgYW55IEV4dGVuc2lvbnMgWW91IGRpc3RyaWJ1dGUgYXJlIFlvdXIgb3JpZ2luYWwKK2NyZWF0aW9ucyBhbmQgdGhhdCBZb3UgaGF2ZSBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5Cit0aGlzIExpY2Vuc2UuCisKKzYuNCBSZXF1aXJlZCBOb3RpY2VzLgorCithLiBMaWNlbnNlIFRleHQuIFlvdSBtdXN0IGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2Ugb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0bworYWNxdWlyZSBhIGNvcHkgaW4gYW55IGRvY3VtZW50YXRpb24gWW91IHByb3ZpZGUgYWxvbmcgd2l0aCB0aGUgU291cmNlIENvZGUgb2YKK2FueSBFeHRlbnNpb25zIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUsIHdoZXJldmVyIFlvdSBkZXNjcmliZQorcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIExpY2Vuc2VkIFNvZnR3YXJlLgorCitiLiBMaWNlbnNlIE5vdGljZS4gWW91IG11c3QgZHVwbGljYXRlIGFueSBub3RpY2UgY29udGFpbmVkIGluIEVYSElCSVQgQSAodGhlCisiTGljZW5zZSBOb3RpY2UiKSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBjb3B5IFlvdSBkaXN0cmlidXRlCitvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgYW5kIFlvdXIgRXh0ZW5zaW9ucy4gSWYgWW91IGNyZWF0ZSBhbiBFeHRlbnNpb24sIFlvdQorbWF5IGFkZCBZb3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgU291cmNlIENvZGUgYW5kIGFjY29tcGFueWluZworZG9jdW1lbnRhdGlvbiBhbG9uZyB3aXRoIGEgZGVzY3JpcHRpb24gb2YgdGhlIGNvbnRyaWJ1dGlvbi4gSWYgaXQgaXMgbm90Citwb3NzaWJsZSB0byBwdXQgdGhlIExpY2Vuc2UgTm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMKK3N0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggTGljZW5zZSBOb3RpY2UgaW4gYSBsb2NhdGlvbiB3aGVyZSBhCit1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLgorCitjLiBTb3VyY2UgQ29kZSBBdmFpbGFiaWxpdHkuIFlvdSBtdXN0IG5vdGlmeSB0aGUgc29mdHdhcmUgY29tbXVuaXR5IG9mIHRoZQorYXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlIHRvIFlvdXIgRXh0ZW5zaW9ucyB3aXRoaW4gb25lICgxKSBtb250aCBvZiB0aGUgZGF0ZQorWW91IGluaXRpYWxseSBEZXBsb3kgYW5kIGluY2x1ZGUgaW4gc3VjaCBub3RpZmljYXRpb24gYSBkZXNjcmlwdGlvbiBvZiB0aGUKK0V4dGVuc2lvbnMsIGFuZCBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGFjcXVpcmUgdGhlIFNvdXJjZSBDb2RlLiBTaG91bGQgc3VjaAoraW5zdHJ1Y3Rpb25zIGNoYW5nZSB5b3UgbXVzdCBub3RpZnkgdGhlIHNvZnR3YXJlIGNvbW11bml0eSBvZiByZXZpc2VkCitpbnN0cnVjdGlvbnMgd2l0aGluIG9uZSAoMSkgbW9udGggb2YgdGhlIGRhdGUgb2YgY2hhbmdlLiBZb3UgbXVzdCBwcm92aWRlCitub3RpZmljYXRpb24gYnkgcG9zdGluZyB0byBhcHByb3ByaWF0ZSBuZXdzIGdyb3VwcywgbWFpbGluZyBsaXN0cywgd2VibG9ncywgb3IKK290aGVyIHNpdGVzIHdoZXJlIGEgcHVibGljbHkgYWNjZXNzaWJsZSBzZWFyY2ggZW5naW5lIHdvdWxkIHJlYXNvbmFibHkgYmUKK2V4cGVjdGVkIHRvIGluZGV4IHlvdXIgcG9zdCBpbiByZWxhdGlvbnNoaXAgdG8gcXVlcmllcyByZWdhcmRpbmcgdGhlIExpY2Vuc2VkCitTb2Z0d2FyZSBhbmQvb3IgWW91ciBFeHRlbnNpb25zLgorCitkLiBVc2VyLVZpc2libGUgQXR0cmlidXRpb24uIFlvdSBtdXN0IGR1cGxpY2F0ZSBhbnkgbm90aWNlIGNvbnRhaW5lZCBpbgorRVhISUJJVCBCICh0aGUgIlVzZXItVmlzaWJsZSBBdHRyaWJ1dGlvbiBOb3RpY2UiKSBpbiBlYWNoIHVzZXItdmlzaWJsZSBkaXNwbGF5CitvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgYW5kIFlvdXIgRXh0ZW5zaW9ucyB3aGljaCBkZWxpbmVhdGVzIGNvcHlyaWdodCwKK293bmVyc2hpcCwgb3Igc2ltaWxhciBhdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbi4gSWYgWW91IGNyZWF0ZSBhbiBFeHRlbnNpb24sCitZb3UgbWF5IGFkZCBZb3VyIG5hbWUgYXMgYSBDb250cmlidXRvciwgYW5kIGFkZCBZb3VyIGF0dHJpYnV0aW9uIG5vdGljZSwgYXMgYW4KK2VxdWFsbHkgdmlzaWJsZSBhbmQgZnVuY3Rpb25hbCBlbGVtZW50IG9mIGFueSBVc2VyLVZpc2libGUgQXR0cmlidXRpb24gTm90aWNlCitjb250ZW50LiBUbyBlbnN1cmUgcHJvcGVyIGF0dHJpYnV0aW9uLCBZb3UgbXVzdCBhbHNvIGluY2x1ZGUgc3VjaCBVc2VyLVZpc2libGUKK0F0dHJpYnV0aW9uIE5vdGljZSBpbiBhdCBsZWFzdCBvbmUgbG9jYXRpb24gaW4gdGhlIFNvZnR3YXJlIGRvY3VtZW50YXRpb24KK3doZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBub3RpY2UuCisKKzYuNSBBZGRpdGlvbmFsIFRlcm1zLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LAorc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mCitMaWNlbnNlZCBTb2Z0d2FyZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbgorYmVoYWxmIG9mIHRoZSBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXhjZXB0IGFzIHBlcm1pdHRlZCB1bmRlciBvdGhlcgorYWdyZWVtZW50cyBiZXR3ZWVuIHlvdSBhbmQgTGljZW5zb3Igb3IgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgY2xlYXIgdGhhdAorYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdQorYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgTGljZW5zb3IgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvcgorYW55IGxpYWJpbGl0eSBwbHVzIGF0dG9ybmV5IGZlZXMsIGNvc3RzLCBhbmQgcmVsYXRlZCBleHBlbnNlcyBkdWUgdG8gYW55IHN1Y2gKK2FjdGlvbiBvciBjbGFpbSBpbmN1cnJlZCBieSB0aGUgTGljZW5zb3Igb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZgord2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCis2LjYgQ29uZmxpY3RzIFdpdGggT3RoZXIgTGljZW5zZXMuIFdoZXJlIGFueSBwb3J0aW9uIG9mIFlvdXIgRXh0ZW5zaW9ucywgYnkKK3ZpcnR1ZSBvZiBiZWluZyBEZXJpdmF0aXZlIFdvcmtzIG9mIGFub3RoZXIgcHJvZHVjdCBvciBzaW1pbGFyIGNpcmN1bXN0YW5jZSwKK2ZhbGwgdW5kZXIgdGhlIHRlcm1zIG9mIGFub3RoZXIgbGljZW5zZSwgdGhlIHRlcm1zIG9mIHRoYXQgbGljZW5zZSBzaG91bGQgYmUKK2hvbm9yZWQgaG93ZXZlciBZb3UgbXVzdCBhbHNvIG1ha2UgWW91ciBFeHRlbnNpb25zIGF2YWlsYWJsZSB1bmRlciB0aGlzCitMaWNlbnNlLiBJZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGNvbnRpbnVlIHRvIGNvbmZsaWN0IHdpdGggdGhlIHRlcm1zIG9mCit0aGUgb3RoZXIgbGljZW5zZSB5b3UgbWF5IHdyaXRlIHRoZSBMaWNlbnNvciBmb3IgcGVybWlzc2lvbiB0byByZXNvbHZlIHRoZQorY29uZmxpY3QgaW4gYSBmYXNoaW9uIHRoYXQgcmVtYWlucyBjb25zaXN0ZW50IHdpdGggdGhlIGludGVudCBvZiB0aGlzIExpY2Vuc2UuCitTdWNoIHBlcm1pc3Npb24gd2lsbCBiZSBncmFudGVkIGF0IHRoZSBzb2xlIGRpc2NyZXRpb24gb2YgdGhlIExpY2Vuc29yLgorCis3LjAgVmVyc2lvbnMgb2YgVGhpcyBMaWNlbnNlLiBMaWNlbnNvciBtYXkgcHVibGlzaCBmcm9tIHRpbWUgdG8gdGltZSByZXZpc2VkCit2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4gT25jZSBMaWNlbnNlZCBTb2Z0d2FyZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYQorcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlCit0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggTGljZW5zZWQgU29mdHdhcmUgdW5kZXIKK3RoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBMaWNlbnNvci4gTm8KK29uZSBvdGhlciB0aGFuIExpY2Vuc29yIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvCitMaWNlbnNlZCBTb2Z0d2FyZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworNy4xIElmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHdoaWNoIFlvdSBtYXkgZG8KK29ubHkgaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gc29mdHdhcmUgdGhhdCBpcyBub3QgYWxyZWFkeSBMaWNlbnNlZCBTb2Z0d2FyZQordW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbXVzdCByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgaXQgaXMgbm90IGNvbmZ1c2luZ2x5CitzaW1pbGFyIHRvIHRoaXMgTGljZW5zZSwgYW5kIG11c3QgbWFrZSBpdCBjbGVhciB0aGF0IFlvdXIgbGljZW5zZSBjb250YWlucwordGVybXMgdGhhdCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UuIEluIHNvIG5hbWluZyBZb3VyIGxpY2Vuc2UsIFlvdSBtYXkgbm90Cit1c2UgYW55IHRyYWRlbWFyayBvZiBMaWNlbnNvciBvciBvZiBhbnkgQ29udHJpYnV0b3IuIFNob3VsZCBZb3VyIG1vZGlmaWNhdGlvbnMKK3RvIHRoaXMgTGljZW5zZSBiZSBsaW1pdGVkIHRvIGFsdGVyYXRpb24gb2YgYSkgU2VjdGlvbiAxMy44IHNvbGVseSB0byBtb2RpZnkKK3RoZSBsZWdhbCBKdXJpc2RpY3Rpb24gb3IgVmVudWUgZm9yIGRpc3B1dGVzLCBiKSBFWEhJQklUIEEgc29sZWx5IHRvIGRlZmluZQorTGljZW5zZSBOb3RpY2UgdGV4dCwgb3IgYykgdG8gRVhISUJJVCBCIHNvbGVseSB0byBkZWZpbmUgYSBVc2VyLVZpc2libGUKK0F0dHJpYnV0aW9uIE5vdGljZSwgWW91IG1heSBjb250aW51ZSB0byByZWZlciB0byBZb3VyIExpY2Vuc2UgYXMgdGhlCitSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlIG9yIHNpbXBseSB0aGUgUlBMLgorCis4LjAgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTElDRU5TRUQgU09GVFdBUkUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFCitPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgTElDRU5TRUQgU09GVFdBUkUgSVMgRlJFRQorT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLgorRlVSVEhFUiBUSEVSRSBJUyBOTyBXQVJSQU5UWSBNQURFIEFORCBBTEwgSU1QTElFRCBXQVJSQU5USUVTIEFSRSBESVNDTEFJTUVECitUSEFUIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRSBNRUVUUyBPUiBDT01QTElFUyBXSVRIIEFOWSBERVNDUklQVElPTiBPRgorUEVSRk9STUFOQ0UgT1IgT1BFUkFUSU9OLCBTQUlEIENPTVBBVElCSUxJVFkgQU5EIFNVSVRBQklMSVRZIEJFSU5HIFlPVVIKK1JFU1BPTlNJQklMSVRZLiBMSUNFTlNPUiBESVNDTEFJTVMgQU5ZIFdBUlJBTlRZLCBJTVBMSUVEIE9SIEVYUFJFU1NFRCwgVEhBVAorQU5ZIENPTlRSSUJVVE9SYFMgRVhURU5TSU9OUyBNRUVUIEFOWSBTVEFOREFSRCBPRiBDT01QQVRJQklMSVRZIE9SIERFU0NSSVBUSU9OCitPRiBQRVJGT1JNQU5DRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKK0xJQ0VOU0VEIFNPRlRXQVJFIElTIFdJVEggWU9VLiBTSE9VTEQgTElDRU5TRUQgU09GVFdBUkUgUFJPVkUgREVGRUNUSVZFIElOIEFOWQorUkVTUEVDVCwgWU9VIChBTkQgTk9UIFRIRSBMSUNFTlNPUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVAorT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUworTElDRU5TT1IgV0lMTCBOT1QgU1VQUE9SVCBUSElTIFNPRlRXQVJFIEFORCBJUyBVTkRFUiBOTyBPQkxJR0FUSU9OIFRPIElTU1VFCitVUERBVEVTIFRPIFRISVMgU09GVFdBUkUuIExJQ0VOU09SIEhBUyBOTyBLTk9XTEVER0UgT0YgRVJSQU5UIENPREUgT1IgVklSVVMgSU4KK1RISVMgU09GVFdBUkUsIEJVVCBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIFNPRlRXQVJFIElTIEZSRUUgRlJPTSBTVUNIIEVSUk9SUworT1IgVklSVVNFUy4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMKK0xJQ0VOU0UuIE5PIFVTRSBPRiBMSUNFTlNFRCBTT0ZUV0FSRSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUworRElTQ0xBSU1FUi4KKworOS4wIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksCitXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgVEhFCitMSUNFTlNPUiwgQU5ZIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgTElDRU5TRUQgU09GVFdBUkUsIE9SIEFOWQorU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwKK1NQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIKK0ZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsCitFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRICitPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVAorQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUKK0VYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTCitFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzEwLjAgSGlnaCBSaXNrIEFjdGl2aXRpZXMuIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRSBJUyBOT1QgRkFVTFQtVE9MRVJBTlQgQU5EIElTCitOT1QgREVTSUdORUQsIE1BTlVGQUNUVVJFRCwgT1IgSU5URU5ERUQgRk9SIFVTRSBPUiBESVNUUklCVVRJT04gQVMgT04tTElORQorQ09OVFJPTCBFUVVJUE1FTlQgSU4gSEFaQVJET1VTIEVOVklST05NRU5UUyBSRVFVSVJJTkcgRkFJTC1TQUZFIFBFUkZPUk1BTkNFLAorU1VDSCBBUyBJTiBUSEUgT1BFUkFUSU9OIE9GIE5VQ0xFQVIgRkFDSUxJVElFUywgQUlSQ1JBRlQgTkFWSUdBVElPTiBPUgorQ09NTVVOSUNBVElPTlMgU1lTVEVNUywgQUlSIFRSQUZGSUMgQ09OVFJPTCwgRElSRUNUIExJRkUgU1VQUE9SVCBNQUNISU5FUywgT1IKK1dFQVBPTlMgU1lTVEVNUywgSU4gV0hJQ0ggVEhFIEZBSUxVUkUgT0YgVEhFIExJQ0VOU0VEIFNPRlRXQVJFIENPVUxEIExFQUQKK0RJUkVDVExZIFRPIERFQVRILCBQRVJTT05BTCBJTkpVUlksIE9SIFNFVkVSRSBQSFlTSUNBTCBPUiBFTlZJUk9OTUVOVEFMIERBTUFHRQorKCJISUdIIFJJU0sgQUNUSVZJVElFUyIpLiBMSUNFTlNPUiBBTkQgQ09OVFJJQlVUT1JTIFNQRUNJRklDQUxMWSBESVNDTEFJTSBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5UWSBPRiBGSVRORVNTIEZPUiBISUdIIFJJU0sgQUNUSVZJVElFUy4KKworMTEuMCBSZXNwb25zaWJpbGl0eSBmb3IgQ2xhaW1zLiBBcyBiZXR3ZWVuIExpY2Vuc29yIGFuZCBDb250cmlidXRvcnMsIGVhY2gKK3BhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwKK291dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aGljaCBzcGVjaWZpY2FsbHkKK2Rpc2NsYWltcyB3YXJyYW50aWVzIGFuZCBsaW1pdHMgYW55IGxpYWJpbGl0eSBvZiB0aGUgTGljZW5zb3IuIFRoaXMgcGFyYWdyYXBoCitpcyB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYW5kIGNvbnRyb2xsZWQgYnkgdGhlIERpc2NsYWltZXIgT2YKK1dhcnJhbnRpZXMgb2YgU2VjdGlvbiA4LCB0aGUgTGltaXRhdGlvbiBPZiBEYW1hZ2VzIGluIFNlY3Rpb24gOSwgYW5kIHRoZQorZGlzY2xhaW1lciBhZ2FpbnN0IHVzZSBmb3IgSGlnaCBSaXNrIEFjdGl2aXRpZXMgaW4gU2VjdGlvbiAxMC4gVGhlIExpY2Vuc29yCitoYXMgdGhlcmVieSBkaXNjbGFpbWVkIGFsbCB3YXJyYW50aWVzIGFuZCBsaW1pdGVkIGFueSBkYW1hZ2VzIHRoYXQgaXQgaXMgb3IKK21heSBiZSBsaWFibGUgZm9yLiBZb3UgYWdyZWUgdG8gd29yayB3aXRoIExpY2Vuc29yIGFuZCBDb250cmlidXRvcnMgdG8KK2Rpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMgY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcworb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyBTZWN0aW9ucyA4LCA5LCBhbmQgMTAuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yCitzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKworMTIuMCBUZXJtaW5hdGlvbi4gVGhpcyBMaWNlbnNlIGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlCitpbW1lZGlhdGVseSBpbiB0aGUgZXZlbnQgb2YgdGhlIGNpcmN1bXN0YW5jZXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMTMuNiBvciBpZgorYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIG9yIHJlc3RyaWN0cyBZb3UgZnJvbSBmdWxseSBhbmQgb3Igc3BlY2lmaWNhbGx5Citjb21wbHlpbmcgd2l0aCBTZWN0aW9ucyAzLCA0IGFuZC9vciA2LCBvciBwcmV2ZW50cyB0aGUgZW5mb3JjZWFiaWxpdHkgb2YgYW55CitvZiB0aG9zZSBTZWN0aW9ucywgYW5kIFlvdSBtdXN0IGltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIGFueSB1c2Ugb2YgTGljZW5zZWQKK1NvZnR3YXJlLgorCisxMi4xIEF1dG9tYXRpYyBUZXJtaW5hdGlvbiBVcG9uIEJyZWFjaC4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQKK2hlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoZSB0ZXJtcworaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIHRoaXJ0eSAoMzApIGRheXMgb2YgYmVjb21pbmcgYXdhcmUKK29mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUgdGhhdCBhcmUgcHJvcGVybHkKK2dyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHRoYXQsIGJ5Cit0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSwKK3NoYWxsIHN1cnZpdmUuCisKKzEyLjIgVGVybWluYXRpb24gVXBvbiBBc3NlcnRpb24gb2YgUGF0ZW50IEluZnJpbmdlbWVudC4gSWYgWW91IGluaXRpYXRlCitsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeQoranVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBMaWNlbnNvciBvciBhIENvbnRyaWJ1dG9yIChMaWNlbnNvciBvciBDb250cmlidXRvcgorYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYW4gYWN0aW9uIGlzIHJlZmVycmVkIHRvIGhlcmVpbiBhcyAiUmVzcG9uZGVudCIpCithbGxlZ2luZyB0aGF0IExpY2Vuc2VkIFNvZnR3YXJlIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsCit0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUmVzcG9uZGVudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMyBvcgorNCBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIHByb3NwZWN0aXZlbHkgdXBvbiBzaXh0eSAoNjApIGRheXMgbm90aWNlCitmcm9tIFJlc3BvbmRlbnQgKHRoZSAiTm90aWNlIFBlcmlvZCIpIHVubGVzcyB3aXRoaW4gdGhhdCBOb3RpY2UgUGVyaW9kIFlvdQorZWl0aGVyIGFncmVlIGluIHdyaXRpbmcgKGkpIHRvIHBheSBSZXNwb25kZW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibHkKK3JveWFsdHkgZm9yIFlvdXIgcGFzdCBvciBmdXR1cmUgdXNlIG9mIExpY2Vuc2VkIFNvZnR3YXJlIG1hZGUgYnkgc3VjaAorUmVzcG9uZGVudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIExpY2Vuc2VkCitTb2Z0d2FyZSBhZ2FpbnN0IHN1Y2ggUmVzcG9uZGVudC4gSWYgd2l0aGluIHNhaWQgTm90aWNlIFBlcmlvZCBhIHJlYXNvbmFibGUKK3JveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseSBhZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZQorcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkKK0xpY2Vuc29yIHRvIFlvdSB1bmRlciBTZWN0aW9ucyAzIGFuZCA0IGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZQorZXhwaXJhdGlvbiBvZiBzYWlkIE5vdGljZSBQZXJpb2QuCisKKzEyLjMgUmVhc29uYWJsZSBWYWx1ZSBvZiBUaGlzIExpY2Vuc2UuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50CitjbGFpbSBhZ2FpbnN0IFJlc3BvbmRlbnQgYWxsZWdpbmcgdGhhdCBMaWNlbnNlZCBTb2Z0d2FyZSBkaXJlY3RseSBvcgoraW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5CitsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQKK2xpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc2FpZAorUmVzcG9uZGVudCB1bmRlciBTZWN0aW9ucyAzIGFuZCA0IHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZwordGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLgorCisxMi40IE5vIFJldHJvYWN0aXZlIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyCit0aGlzIFNlY3Rpb24gYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGxpY2Vuc2VzIHRvCitkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgdGhhdCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkKK2Rpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorCisxMy4wIE1pc2NlbGxhbmVvdXMuCisKKzEzLjEgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gVGhlIExpY2Vuc2VkIFNvZnR3YXJlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiCithcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YKKyJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIiBhbmQgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUKK2RvY3VtZW50YXRpb24sIiBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLgorQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNAorKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgTGljZW5zZWQgU29mdHdhcmUgd2l0aCBvbmx5Cit0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTMuMiBSZWxhdGlvbnNoaXAgb2YgUGFydGllcy4gVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZworYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSwgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24KK2JldHdlZW4gb3IgYW1vbmcgWW91LCBMaWNlbnNvciwgb3IgYW55IENvbnRyaWJ1dG9yLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudAordG8gdGhlIGNvbnRyYXJ5LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGFwcGVhcmFuY2UsIG9yIG90aGVyd2lzZS4KKworMTMuMyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugd2lsbCBpbXBhaXIgTGljZW5zb3JgcworcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgc3ViY29udHJhY3QsIG1hcmtldCwgb3IgZGlzdHJpYnV0ZQordGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IHBlcmZvcm0gdGhlIHNhbWUgb3Igc2ltaWxhciBmdW5jdGlvbnMgYXMsIG9yCitvdGhlcndpc2UgY29tcGV0ZSB3aXRoLCBFeHRlbnNpb25zIHRoYXQgWW91IG1heSBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQsIG9yCitkaXN0cmlidXRlLgorCisxMy40IENvbnNlbnQgVG8gQnJlYWNoIE5vdCBXYWl2ZXIuIEZhaWx1cmUgYnkgTGljZW5zb3Igb3IgQ29udHJpYnV0b3IgdG8KK2VuZm9yY2UgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgZGVlbWVkIGEgd2FpdmVyIG9mIGZ1dHVyZSBlbmZvcmNlbWVudAorb2YgdGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLgorCisxMy41IFNldmVyYWJpbGl0eS4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nCit0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlCit1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5Cit0byBtYWtlIGl0IGVuZm9yY2VhYmxlLgorCisxMy42IEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4gSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IKK1lvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvcgorYWxsIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24sCit0aGVuIFlvdSBjYW5ub3QgdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlLgorCisxMy43IEV4cG9ydCBSZXN0cmljdGlvbnMuIFlvdSBtYXkgYmUgcmVzdHJpY3RlZCB3aXRoIHJlc3BlY3QgdG8gZG93bmxvYWRpbmcgb3IKK290aGVyd2lzZSBhY3F1aXJpbmcsIGV4cG9ydGluZywgb3IgcmVleHBvcnRpbmcgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIG9yIGFueQordW5kZXJseWluZyBpbmZvcm1hdGlvbiBvciB0ZWNobm9sb2d5IGJ5IFVuaXRlZCBTdGF0ZXMgYW5kIG90aGVyIGFwcGxpY2FibGUKK2xhd3MgYW5kIHJlZ3VsYXRpb25zLiBCeSBkb3dubG9hZGluZyBvciBieSBvdGhlcndpc2Ugb2J0YWluaW5nIHRoZSBMaWNlbnNlZAorU29mdHdhcmUsIFlvdSBhcmUgYWdyZWVpbmcgdG8gYmUgcmVzcG9uc2libGUgZm9yIGNvbXBsaWFuY2Ugd2l0aCBhbGwKK2FwcGxpY2FibGUgbGF3cyBhbmQgcmVndWxhdGlvbnMuCisKKzEzLjggQXJiaXRyYXRpb24sIEp1cmlzZGljdGlvbiAmYW1wOyBWZW51ZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5CitDb2xvcmFkbyBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMKK290aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFlvdSBleHByZXNzbHkgYWdyZWUgdGhhdAorYW55IGRpc3B1dGUgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1Ym1pdHRlZCB0byBiaW5kaW5nIGFyYml0cmF0aW9uCit1bmRlciB0aGUgcnVsZXMgdGhlbiBwcmV2YWlsaW5nIG9mIHRoZSBBbWVyaWNhbiBBcmJpdHJhdGlvbiBBc3NvY2lhdGlvbi4gWW91CitmdXJ0aGVyIGFncmVlIHRoYXQgQWRhbXMgQ291bnR5LCBDb2xvcmFkbyBVU0EgaXMgcHJvcGVyIHZlbnVlIGFuZCBncmFudCBzdWNoCithcmJpdHJhdGlvbiBwcm9jZWVkaW5nIGp1cmlzZGljdGlvbiBhcyBtYXkgYmUgYXBwcm9wcmlhdGUgZm9yIHB1cnBvc2VzIG9mCityZXNvbHZpbmcgYW55IGRpc3B1dGUgdW5kZXIgdGhpcyBMaWNlbnNlLiBKdWRnZW1lbnQgdXBvbiBhbnkgYXdhcmQgbWFkZSBpbgorYXJiaXRyYXRpb24gbWF5IGJlIGVudGVyZWQgYW5kIGVuZm9yY2VkIGluIGFueSBjb3VydCBvZiBjb21wZXRlbnQKK2p1cmlzZGljdGlvbi4gVGhlIGFyYml0cmF0b3Igc2hhbGwgYXdhcmQgYXR0b3JuZXlgcyBmZWVzIGFuZCBjb3N0cyBvZgorYXJiaXRyYXRpb24gdG8gdGhlIHByZXZhaWxpbmcgcGFydHkuIFNob3VsZCBlaXRoZXIgcGFydHkgZmluZCBpdCBuZWNlc3NhcnkgdG8KK2VuZm9yY2UgaXRzIGFyYml0cmF0aW9uIGF3YXJkIG9yIHNlZWsgc3BlY2lmaWMgcGVyZm9ybWFuY2Ugb2Ygc3VjaCBhd2FyZCBpbiBhCitjaXZpbCBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZAordG8gcmVhc29uYWJsZSBhdHRvcm5leWBzIGZlZXMgYW5kIGNvc3RzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zCitDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkKK2V4Y2x1ZGVkLiBZb3UgYW5kIExpY2Vuc29yIGV4cHJlc3NseSB3YWl2ZSBhbnkgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkKK2xpdGlnYXRpb24gY29uY2VybmluZyBMaWNlbnNlZCBTb2Z0d2FyZSBvciB0aGlzIExpY2Vuc2UuIEFueSBsYXcgb3IgcmVndWxhdGlvbgordGhhdCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZQorZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMy45IEVudGlyZSBBZ3JlZW1lbnQuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuCit0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4KKworRVhISUJJVCBBCisKK1RoZSBMaWNlbnNlIE5vdGljZSBiZWxvdyBtdXN0IGFwcGVhciBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFueQorY29weSBZb3UgZGlzdHJpYnV0ZSBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgb3IgYW55IEV4dGVuc2lvbnMgdGhlcmV0bzoKKworVW5sZXNzIGV4cGxpY2l0bHkgYWNxdWlyZWQgYW5kIGxpY2Vuc2VkIGZyb20gTGljZW5zb3IgdW5kZXIgYW5vdGhlcgorbGljZW5zZSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgUmVjaXByb2NhbCBQdWJsaWMKK0xpY2Vuc2UgKCJSUEwiKSBWZXJzaW9uIDEuNSwgb3Igc3Vic2VxdWVudCB2ZXJzaW9ucyBhcyBhbGxvd2VkIGJ5IHRoZSBSUEwsCithbmQgWW91IG1heSBub3QgY29weSBvciB1c2UgdGhpcyBmaWxlIGluIGVpdGhlciBzb3VyY2UgY29kZSBvciBleGVjdXRhYmxlCitmb3JtLCBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgUlBMLgorCitBbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFJQTCBpcyBwcm92aWRlZCBzdHJpY3RseSBvbiBhbiAiQVMKK0lTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5ECitMSUNFTlNPUiBIRVJFQlkgRElTQ0xBSU1TIEFMTCBTVUNIIFdBUlJBTlRJRVMsIElOQ0xVRElORyBXSVRIT1VUCitMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRSwgUVVJRVQgRU5KT1lNRU5ULCBPUiBOT04tSU5GUklOR0VNRU5ULiBTZWUgdGhlIFJQTCBmb3Igc3BlY2lmaWMKK2xhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBSUEwuCisKK0VYSElCSVQgQgorCitUaGUgVXNlci1WaXNpYmxlIEF0dHJpYnV0aW9uIE5vdGljZSBiZWxvdywgd2hlbiBwcm92aWRlZCwgbXVzdCBhcHBlYXIgaW4gZWFjaAordXNlci12aXNpYmxlIGRpc3BsYXkgYXMgZGVmaW5lZCBpbiBTZWN0aW9uIDYuNCAoZCk6CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUlBTTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JQU0wtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwODE0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JQU0wtMS4wCkBAIC0wLDAgKzEsMTgyIEBACisKK1JlYWxOZXR3b3JrcyBQdWJsaWMgU291cmNlIExpY2Vuc2UgVmVyc2lvbiAxLjAKKworKFJldi4gRGF0ZSBPY3RvYmVyIDI4LCAyMDAyKQorCitBbHNvIGF2YWlsYWJsZSBpbiB0ZXh0IGZvcm1hdC4KKworMS4gR2VuZXJhbCBEZWZpbml0aW9ucy4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBSZWFsTmV0d29ya3MsIEluYy4sIG9yIGFueSBvdGhlciBlbnRpdHkgdGhhdCBlbGVjdHMgdG8gdXNlIHRoaXMgbGljZW5zZSwgKCJMaWNlbnNvciIpIG1ha2VzIHB1YmxpY2x5IGF2YWlsYWJsZSBhbmQgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IExpY2Vuc29yIGlkZW50aWZ5aW5nIHN1Y2ggcHJvZ3JhbSBvciB3b3JrIGFzICJPcmlnaW5hbCBDb2RlIiBhbmQgc3RhdGluZyB0aGF0IGl0IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgUmVhbE5ldHdvcmtzIFB1YmxpYyBTb3VyY2UgTGljZW5zZSB2ZXJzaW9uIDEuMCAob3Igc3Vic2VxdWVudCB2ZXJzaW9uIHRoZXJlb2YpICgiTGljZW5zZSIpLiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIFlvdSBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiBZb3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nLCBjb3B5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgc29mdHdhcmUgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBzb2Z0d2FyZSksIFlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSW4gYWRkaXRpb24sIHlvdSBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGJ5IGNsaWNraW5nIHRoZSBBY2NlcHQgYnV0dG9uIG9yIGRvd25sb2FkaW5nIHRoZSBzb2Z0d2FyZS4gQXMgdXNlZCBpbiB0aGlzIExpY2Vuc2U6CisKKzEuMSAiQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIiBtZWFuOiAoYSkgaW4gdGhlIGNhc2Ugd2hlcmUgTGljZW5zb3IgaXMgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IChpKSBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gTGljZW5zb3IgYW5kIChpaSkgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB1c2luZyBvciBtYWtpbmcgdGhlIE9yaWdpbmFsIENvZGUgYWxvbmUgYW5kIG5vdCBpbiBjb21iaW5hdGlvbiB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlOyBhbmQgKGIpIGluIHRoZSBjYXNlIHdoZXJlIFlvdSBhcmUgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IChpKSBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gWW91IGFuZCAoaWkpIGFyZSBpbmZyaW5nZWQgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGJ5IHVzaW5nIG9yIG1ha2luZyBZb3VyIE1vZGlmaWNhdGlvbnMsIHRha2VuIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggT3JpZ2luYWwgQ29kZS4KKworMS4yICJDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlIiBtZWFucyBhbnkgb25lIG9mIHRoZSBsaWNlbnNlcyBsaXN0ZWQgb24gRXhoaWJpdCBCIG9yIGF0IGh0dHBzOi8vd3d3LmhlbGl4Y29tbXVuaXR5Lm9yZy9jb250ZW50L2NvbXBsaWNlbnNlIG9yIG90aGVyIGxpY2Vuc2VzIHNwZWNpZmljYWxseSBpZGVudGlmaWVkIGJ5IExpY2Vuc29yIGluIHdyaXRpbmcuIE5vdHdpdGhzdGFuZGluZyBhbnkgdGVybSB0byB0aGUgY29udHJhcnkgaW4gYW55IENvbXBhdGlibGUgU291cmNlIExpY2Vuc2UsIGFueSBjb2RlIGNvdmVyZWQgYnkgYW55IENvbXBhdGlibGUgU291cmNlIExpY2Vuc2UgdGhhdCBpcyB1c2VkIHdpdGggQ292ZXJlZCBDb2RlIG11c3QgYmUgbWFkZSByZWFkaWx5IGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtYXQgZm9yIHJveWFsdHktZnJlZSB1c2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlIG9yIHRoaXMgTGljZW5zZS4KKworMS4zICJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjQgIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNSAiRGVwbG95IiBtZWFucyB0byB1c2UsIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgb3RoZXIgdGhhbiBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgKFImYW1wO0QpIGFuZC9vciBQZXJzb25hbCBVc2UsIGFuZCBpbmNsdWRlcyB3aXRob3V0IGxpbWl0YXRpb24sIGFueSBhbmQgYWxsIGludGVybmFsIHVzZSBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIHdpdGhpbiBZb3VyIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiBleGNlcHQgZm9yIFImYW1wO0QgdXNlIGFuZC9vciBQZXJzb25hbCBVc2UsIGFzIHdlbGwgYXMgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHkgaW4gYW55IGZvcm0gb3IgbWFubmVyLgorCisxLjYgIkRlcml2YXRpdmUgV29yayIgbWVhbnMgZWl0aGVyIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBVbml0ZWQgU3RhdGVzIGNvcHlyaWdodCBsYXcsIGFuZCBpbmNsdWRpbmcgYW55IHdvcmsgY29udGFpbmluZyBvciBpbmNsdWRpbmcgYW55IHBvcnRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBvciBNb2RpZmljYXRpb25zLCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4gRGVyaXZhdGl2ZSBXb3JrIGFsc28gaW5jbHVkZXMgYW55IHdvcmsgd2hpY2ggY29tYmluZXMgYW55IHBvcnRpb24gb2YgQ292ZXJlZCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgd2l0aCBjb2RlIG5vdCBvdGhlcndpc2UgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS43ICJFeHRlcm5hbGx5IERlcGxveSIgbWVhbnMgdG8gRGVwbG95IHRoZSBDb3ZlcmVkIENvZGUgaW4gYW55IHdheSB0aGF0IG1heSBiZSBhY2Nlc3NlZCBvciB1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgdXNlZCB0byBwcm92aWRlIGFueSBzZXJ2aWNlcyB0byBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIG9yIHVzZWQgaW4gYW55IHdheSB0byBkZWxpdmVyIGFueSBjb250ZW50IHRvIGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aGUgQ292ZXJlZCBDb2RlIGlzIGRpc3RyaWJ1dGVkIHRvIHRob3NlIHBhcnRpZXMsIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIGNvbXB1dGVyIG5ldHdvcmssIG9yIHVzZWQgdG8gcHJvdmlkZSBzZXJ2aWNlcyBvciBvdGhlcndpc2UgZGVsaXZlciBjb250ZW50IHRvIGFueW9uZSBvdGhlciB0aGFuIFlvdS4KKworMS44LiAiSW50ZXJmYWNlIiBtZWFucyBpbnRlcmZhY2VzLCBmdW5jdGlvbnMsIHByb3BlcnRpZXMsIGNsYXNzIGRlZmluaXRpb25zLCBBUElzLCBoZWFkZXIgZmlsZXMsIEdVSURzLCBWLVRhYmxlcywgYW5kL29yIHByb3RvY29scyBhbGxvd2luZyBvbmUgcGllY2Ugb2Ygc29mdHdhcmUsIGZpcm13YXJlIG9yIGhhcmR3YXJlIHRvIGNvbW11bmljYXRlIG9yIGludGVyb3BlcmF0ZSB3aXRoIGFub3RoZXIgcGllY2Ugb2Ygc29mdHdhcmUsIGZpcm13YXJlIG9yIGhhcmR3YXJlLgorCisxLjkgIk1vZGlmaWNhdGlvbnMiIG1lYW4gYW55IGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBhbmQvb3IgY2hhbmdlIHRvLCB0aGUgc3Vic3RhbmNlIGFuZC9vciBzdHJ1Y3R1cmUgb2YgdGhlIE9yaWdpbmFsIENvZGUsIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLiBXaGVuIGNvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOiAoYSkgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIENvdmVyZWQgQ29kZTsgYW5kL29yIChiKSBhbnkgbmV3IGZpbGUgb3Igb3RoZXIgcmVwcmVzZW50YXRpb24gb2YgY29tcHV0ZXIgcHJvZ3JhbSBzdGF0ZW1lbnRzIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgQ292ZXJlZCBDb2RlLgorCisxLjEwICJPcmlnaW5hbCBDb2RlIiBtZWFucyAoYSkgdGhlIFNvdXJjZSBDb2RlIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIGFzIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgTGljZW5zb3IgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSB1cGRhdGVzIG9yIHVwZ3JhZGVzIHRvIHN1Y2ggcHJvZ3JhbXMgb3Igd29ya3MgbWFkZSBhdmFpbGFibGUgYnkgTGljZW5zb3IgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgdGhhdCBoYXMgYmVlbiBleHByZXNzbHkgaWRlbnRpZmllZCBieSBMaWNlbnNvciBhcyBzdWNoIGluIHRoZSBoZWFkZXIgZmlsZShzKSBvZiBzdWNoIHdvcms7IGFuZCAoYikgdGhlIG9iamVjdCBjb2RlIGNvbXBpbGVkIGZyb20gc3VjaCBTb3VyY2UgQ29kZSBhbmQgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBMaWNlbnNvciB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzEuMTEgIlBlcnNvbmFsIFVzZSIgbWVhbnMgdXNlIG9mIENvdmVyZWQgQ29kZSBieSBhbiBpbmRpdmlkdWFsIHNvbGVseSBmb3IgaGlzIG9yIGhlciBwZXJzb25hbCwgcHJpdmF0ZSBhbmQgbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMuIEFuIGluZGl2aWR1YWxgcyB1c2Ugb2YgQ292ZXJlZCBDb2RlIGluIGhpcyBvciBoZXIgY2FwYWNpdHkgYXMgYW4gb2ZmaWNlciwgZW1wbG95ZWUsIG1lbWJlciwgaW5kZXBlbmRlbnQgY29udHJhY3RvciBvciBhZ2VudCBvZiBhIGNvcnBvcmF0aW9uLCBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gKGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwpIGRvZXMgbm90IHF1YWxpZnkgYXMgUGVyc29uYWwgVXNlLgorCisxLjEyICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIGh1bWFuIHJlYWRhYmxlIGZvcm0gb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgdGhhdCBpcyBzdWl0YWJsZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlIChvYmplY3QgY29kZSkuCisKKzEuMTMgIllvdSIgb3IgIllvdXIiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoLCBZb3UsIHdoZXJlICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFBlcm1pdHRlZCBVc2VzOyBDb25kaXRpb25zICZhbXA7IFJlc3RyaWN0aW9ucy4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSwgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIFlvdSBhY2NlcHQgdGhpcyBMaWNlbnNlICh2aWEgZG93bmxvYWRpbmcgb3IgdXNpbmcgQ292ZXJlZCBDb2RlIG9yIG90aGVyd2lzZSBpbmRpY2F0aW5nIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UpLCBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGNvcHlyaWdodCBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mIExpY2Vuc29yYHMgY29weXJpZ2h0cyBjb3ZlciB0aGUgT3JpZ2luYWwgQ29kZSwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworMi4xIFlvdSBtYXkgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnkgYW5kIERlcGxveSBDb3ZlcmVkIENvZGUsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIFlvdSBtdXN0IHJldGFpbiBhbmQgcmVwcm9kdWNlIGluIGFsbCBjb3BpZXMgb2YgT3JpZ2luYWwgQ29kZSB0aGUgY29weXJpZ2h0IGFuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycyBvZiBMaWNlbnNvciBhcyB0aGV5IGFwcGVhciBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIGluIHRoZSBPcmlnaW5hbCBDb2RlIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlOworCisoYikgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiBTb3VyY2UgQ29kZSBvZiBDb3ZlcmVkIENvZGUgYW5kIGRvY3VtZW50YXRpb24gWW91IGRpc3RyaWJ1dGUsIGFuZCBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHN1Y2ggU291cmNlIENvZGUgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIsIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA2OworCisoYykgWW91IG11c3QgZHVwbGljYXRlLCB0byB0aGUgZXh0ZW50IGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QsIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYWxsIFlvdXIgTW9kaWZpY2F0aW9ucywgYW5kIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlOworCisoZCkgWW91IG11c3QgbWFrZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBFeHRlcm5hbGx5IERlcGxveWVkIE1vZGlmaWNhdGlvbnMgcHVibGljbHkgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBncmFudHMgc2V0IGZvcnRoIGluIFNlY3Rpb24gMyBiZWxvdywgZm9yIGFzIGxvbmcgYXMgeW91IERlcGxveSB0aGUgQ292ZXJlZCBDb2RlIG9yIHR3ZWx2ZSAoMTIpIG1vbnRocyBmcm9tIHRoZSBkYXRlIG9mIGluaXRpYWwgRGVwbG95bWVudCwgd2hpY2hldmVyIGlzIGxvbmdlci4gWW91IHNob3VsZCBwcmVmZXJhYmx5IGRpc3RyaWJ1dGUgdGhlIFNvdXJjZSBDb2RlIG9mIFlvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBlbGVjdHJvbmljYWxseSAoZS5nLiBkb3dubG9hZCBmcm9tIGEgd2ViIHNpdGUpOyBhbmQKKworKGUpIGlmIFlvdSBEZXBsb3kgQ292ZXJlZCBDb2RlIGluIG9iamVjdCBjb2RlLCBleGVjdXRhYmxlIGZvcm0gb25seSwgWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBub3RpY2UsIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgYW5kIHdoZXJlIHRvIG9idGFpbiBzdWNoIFNvdXJjZSBDb2RlLiBZb3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhlIE9iamVjdCBDb2RlIE5vdGljZSBzZXQgZm9ydGggaW4gRXhoaWJpdCBBIGluIHRoZSAiYWJvdXQiIGJveCBvciBvdGhlciBhcHByb3ByaWF0ZSBwbGFjZSB3aGVyZSBvdGhlciBjb3B5cmlnaHQgbm90aWNlcyBhcmUgcGxhY2VkLCBpbmNsdWRpbmcgYW55IHBhY2thZ2luZyBtYXRlcmlhbHMuCisKKzIuMiBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IGFsdGhvdWdoIExpY2Vuc29yIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIExpY2Vuc29yIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltIGFueSBsaWFiaWxpdHkgdG8gWW91IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgWW91IGhlcmVieSBhc3N1bWUgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFlvdSB0byBtYWtlLCB1c2UsIHNlbGwsIGltcG9ydCBvciBvZmZlciBmb3Igc2FsZSB0aGUgQ292ZXJlZCBDb2RlLCBpdCBpcyBZb3VyIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgc3VjaCBsaWNlbnNlKHMpLgorCisyLjMgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSwgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIFlvdSBhY2NlcHQgdGhpcyBMaWNlbnNlICh2aWEgZG93bmxvYWRpbmcgb3IgdXNpbmcgQ292ZXJlZCBDb2RlIG9yIG90aGVyd2lzZSBpbmRpY2F0aW5nIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UpLCBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBwZXJwZXR1YWwsIG5vbi1leGNsdXNpdmUgcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zb3JgcyBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSBhbmQgaW1wb3J0IHRoZSBDb3ZlcmVkIENvZGUsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZSB5b3UgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMy4gWW91ciBHcmFudHMuIEluIGNvbnNpZGVyYXRpb24gb2YsIGFuZCBhcyBhIGNvbmRpdGlvbiB0bywgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZToKKworKGEpIFlvdSBncmFudCB0byBMaWNlbnNvciBhbmQgYWxsIHRoaXJkIHBhcnRpZXMgYSBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIGlycmV2b2NhYmxlLCByb3lhbHR5IGZyZWUgbGljZW5zZSB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gbWFrZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIHVzZSwgaW1wb3J0LCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgRGVwbG95IFlvdXIgTW9kaWZpY2F0aW9ucyBvZiB0aGUgc2FtZSBzY29wZSBhbmQgZXh0ZW50IGFzIExpY2Vuc29yYHMgbGljZW5zZXMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZCAyLjI7IGFuZAorCisoYikgWW91IGdyYW50IHRvIExpY2Vuc29yIGFuZCBpdHMgc3Vic2lkaWFyaWVzIGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCBhbmQgaXJyZXZvY2FibGUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBkaXN0cmlidXRlLCBtb2RpZnkgb3IgaGF2ZSBtb2RpZmllZCAoZm9yIExpY2Vuc29yIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzKSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSBZb3VyIE1vZGlmaWNhdGlvbnMsIGluIGFueSBmb3JtIGFuZCBmb3IgYW55IHB1cnBvc2UsIHRocm91Z2ggbXVsdGlwbGUgdGllcnMgb2YgZGlzdHJpYnV0aW9uLgorCisoYykgWW91IGFncmVlIG5vdCB1c2UgYW55IGluZm9ybWF0aW9uIGRlcml2ZWQgZnJvbSBZb3VyIHVzZSBhbmQgcmV2aWV3IG9mIHRoZSBDb3ZlcmVkIENvZGUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gYW55IGFsZ29yaXRobXMgb3IgaW52ZW50aW9ucyB0aGF0IG1heSBiZSBjb250YWluZWQgaW4gdGhlIENvdmVyZWQgQ29kZSwgZm9yIHRoZSBwdXJwb3NlIG9mIGFzc2VydGluZyBhbnkgb2YgWW91ciBwYXRlbnQgcmlnaHRzLCBvciBhc3Npc3RpbmcgYSB0aGlyZCBwYXJ0eSB0byBhc3NlcnQgYW55IG9mIGl0cyBwYXRlbnQgcmlnaHRzLCBhZ2FpbnN0IExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvci4KKworNC4gRGVyaXZhdGl2ZSBXb3Jrcy4gWW91IG1heSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IG90aGVyd2lzZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBEZXJpdmF0aXZlIFdvcmsgYXMgYW4gaW50ZWdyYXRlZCBwcm9kdWN0LiBJbiBlYWNoIHN1Y2ggaW5zdGFuY2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIGluY2x1ZGluZyBhbGwgTW9kaWZpY2F0aW9ucy4KKworNC4xIFlvdSBtdXN0IGNhdXNlIGFueSBEZXJpdmF0aXZlIFdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSwgcHVibGlzaCBvciBFeHRlcm5hbGx5IERlcGxveSwgdGhhdCBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIG5vIG90aGVyIGxpY2Vuc2UgZXhjZXB0IGFzIHByb3ZpZGVkIGluIFNlY3Rpb24gNC4yLiBZb3UgYWxzbyBtdXN0IG1ha2UgU291cmNlIENvZGUgYXZhaWxhYmxlIGZvciB0aGUgRGVyaXZhdGl2ZSBXb3JrIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIE1vZGlmaWNhdGlvbnMsIGRlc2NyaWJlZCBpbiBTZWN0aW9ucyAyIGFuZCAzLCBhYm92ZS4KKworNC4yIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2VzLiBTb2Z0d2FyZSBtb2R1bGVzIHRoYXQgaGF2ZSBiZWVuIGluZGVwZW5kZW50bHkgZGV2ZWxvcGVkIHdpdGhvdXQgYW55IHVzZSBvZiBDb3ZlcmVkIENvZGUgYW5kIHdoaWNoIGNvbnRhaW4gbm8gcG9ydGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlLCBNb2RpZmljYXRpb25zIG9yIG90aGVyIERlcml2YXRpdmUgV29ya3MsIGJ1dCBhcmUgdXNlZCBvciBjb21iaW5lZCBpbiBhbnkgd2F5IHdpdGggdGhlIENvdmVyZWQgQ29kZSBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrIHRvIGZvcm0gYSBsYXJnZXIgRGVyaXZhdGl2ZSBXb3JrLCBhcmUgZXhlbXB0IGZyb20gdGhlIGNvbmRpdGlvbnMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNC4xIGJ1dCBvbmx5IHRvIHRoZSBleHRlbnQgdGhhdDogdGhlIHNvZnR3YXJlIG1vZHVsZSwgaW5jbHVkaW5nIGFueSBzb2Z0d2FyZSB0aGF0IGlzIGxpbmtlZCB0bywgaW50ZWdyYXRlZCB3aXRoLCBvciBwYXJ0IG9mIHRoZSBzYW1lIGFwcGxpY2F0aW9ucyBhcywgdGhlIHNvZnR3YXJlIG1vZHVsZSBieSBhbnkgbWV0aG9kIG11c3QgYmUgd2hvbGx5IHN1YmplY3QgdG8gb25lIG9mIHRoZSBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlcy4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIGFsbCBDb3ZlcmVkIENvZGUgbXVzdCBiZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFRodXMsIHRoZSBlbnRpcmUgRGVyaXZhdGl2ZSBXb3JrIG11c3QgYmUgbGljZW5zZWQgdW5kZXIgYSBjb21iaW5hdGlvbiBvZiB0aGUgUlBTTCAoZm9yIENvdmVyZWQgQ29kZSkgYW5kIGEgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZSBmb3IgYW55IGluZGVwZW5kZW50bHkgZGV2ZWxvcGVkIHNvZnR3YXJlIG1vZHVsZXMgd2l0aGluIHRoZSBEZXJpdmF0aXZlIFdvcmsuIFRoZSBmb3JlZ29pbmcgcmVxdWlyZW1lbnQgYXBwbGllcyBldmVuIGlmIHRoZSBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlIHdvdWxkIG9yZGluYXJpbHkgYWxsb3cgdGhlIHNvZnR3YXJlIG1vZHVsZSB0byBsaW5rIHdpdGgsIG9yIGZvcm0gbGFyZ2VyIHdvcmtzIHdpdGgsIG90aGVyIHNvZnR3YXJlIHRoYXQgaXMgbm90IHN1YmplY3QgdG8gdGhlIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2UuIEZvciBleGFtcGxlLCBhbHRob3VnaCB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSB2MS4xIGFsbG93cyBNb3ppbGxhIGNvZGUgdG8gYmUgY29tYmluZWQgd2l0aCBwcm9wcmlldGFyeSBzb2Z0d2FyZSB0aGF0IGlzIG5vdCBzdWJqZWN0IHRvIHRoZSBNUEwsIGlmIE1QTC1saWNlbnNlZCBjb2RlIGlzIHVzZWQgd2l0aCBDb3ZlcmVkIENvZGUgdGhlIE1QTC1saWNlbnNlZCBjb2RlIGNvdWxkIG5vdCBiZSBjb21iaW5lZCBvciBsaW5rZWQgd2l0aCBhbnkgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIE1QTC4gVGhlIGdlbmVyYWwgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiA0LjIgaXMgdG8gZW5hYmxlIHVzZSBvZiBDb3ZlcmVkIENvZGUgd2l0aCBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgd2hvbGx5IHN1YmplY3QgdG8gYW4gYWNjZXB0YWJsZSBvcGVuIHNvdXJjZSBsaWNlbnNlLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIHlvdXIgdXNlIG9mIHNvZnR3YXJlIHdpdGggQ292ZXJlZCBDb2RlIGlzIGFsbG93ZWQgdW5kZXIgWW91ciBsaWNlbnNlIHRvIHN1Y2ggc29mdHdhcmUuCisKKzQuMyBNZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIENvdmVyZWQgQ29kZSB3aXRoIHRoZSBDb3ZlcmVkIENvZGUgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBDb3ZlcmVkIENvZGUpIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkZWxpdmVyIHRoZSBDb3ZlcmVkIENvZGUgZm9yIGNvbWJpbmF0aW9uIGFuZC9vciBpbnRlZ3JhdGlvbiB3aXRoIGFuIGFwcGxpY2F0aW9uIHByZXZpb3VzbHkgcHJvdmlkZWQgYnkgWW91IChmb3IgZXhhbXBsZSwgdmlhIGF1dG9tYXRpYyB1cGRhdGluZyB0ZWNobm9sb2d5KSwgc3VjaCBjb21iaW5hdGlvbiBhbmQvb3IgaW50ZWdyYXRpb24gY29uc3RpdHV0ZXMgYSBEZXJpdmF0aXZlIFdvcmsgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCis1LiBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHRvIGdyYW50IGFueSByaWdodHMgdG8gdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIENvdmVyZWQgQ29kZS4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueSBjb2RlIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLiBNb2RpZmljYXRpb25zLCBEZXJpdmF0aXZlIFdvcmtzIGFuZC9vciBhbnkgdXNlIG9yIGNvbWJpbmF0aW9uIG9mIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIHRlY2hub2xvZ3kgcHJvdmlkZWQgYnkgTGljZW5zb3Igb3IgdGhpcmQgcGFydGllcyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIExpY2Vuc29yIHdoaWNoIExpY2Vuc29yIG1heSBncmFudCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHNlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3IgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuCisKKzUuMS4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIG93bmVkIGJ5IExpY2Vuc29yICgiTGljZW5zb3IgTWFya3MiIGRlZmluZWQgaW4gRXhoaWJpdCBDKSBvciB0byBhbnkgdHJhZGVtYXJrIG9yIHRyYWRlIG5hbWUgYmVsb25naW5nIHRvIGFueSBDb250cmlidXRvci4gTm8gTGljZW5zb3IgTWFya3MgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvdGhlciB0aGFuIGFzIHBlcm1pdHRlZCBieSB0aGUgTGljZW5zb3IgVHJhZGVtYXJrIFBvbGljeSBkZWZpbmVkIGluIEV4aGliaXQgQy4KKworNi4gQWRkaXRpb25hbCBUZXJtcy4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3Igb3RoZXIgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2NvcGUgb2YgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlaW4gKCJBZGRpdGlvbmFsIFRlcm1zIikgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIGFzIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBvYnRhaW4gdGhlIHJlY2lwaWVudGBzIGFncmVlbWVudCB0aGF0IGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBMaWNlbnNvciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QgTGljZW5zb3Igb3Igc3VjaCBDb250cmlidXRvciBieSByZWFzb24gb2YgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcy4KKworNy4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuIExpY2Vuc29yIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIE9uY2UgT3JpZ2luYWwgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHB1Ymxpc2hlZCBieSBMaWNlbnNvci4gTm8gb25lIG90aGVyIHRoYW4gTGljZW5zb3IgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis4LiBOTyBXQVJSQU5UWSBPUiBTVVBQT1JULiBUaGUgQ292ZXJlZCBDb2RlIG1heSBjb250YWluIGluIHdob2xlIG9yIGluIHBhcnQgcHJlLXJlbGVhc2UsIHVudGVzdGVkLCBvciBub3QgZnVsbHkgdGVzdGVkIHdvcmtzLiBUaGUgQ292ZXJlZCBDb2RlIG1heSBjb250YWluIGVycm9ycyB0aGF0IGNvdWxkIGNhdXNlIGZhaWx1cmVzIG9yIGxvc3Mgb2YgZGF0YSwgYW5kIG1heSBiZSBpbmNvbXBsZXRlIG9yIGNvbnRhaW4gaW5hY2N1cmFjaWVzLiBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLCBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBpcyBhdCBZb3VyIHNvbGUgYW5kIGVudGlyZSByaXNrLiBUSEUgQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFksIFVQR1JBREVTIE9SIFNVUFBPUlQgT0YgQU5ZIEtJTkQgQU5EIExJQ0VOU09SIEFORCBMSUNFTlNPUmBTIExJQ0VOU09SKFMpIChDT0xMRUNUSVZFTFkgUkVGRVJSRUQgVE8gQVMgIkxJQ0VOU09SIiBGT1IgVEhFIFBVUlBPU0VTIE9GIFNFQ1RJT05TIDggQU5EIDkpIEFORCBBTEwgQ09OVFJJQlVUT1JTIEVYUFJFU1NMWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIE9GIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBPRiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT0YgQUNDVVJBQ1ksIE9GIFFVSUVUIEVOSk9ZTUVOVCwgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIExJQ0VOU09SIEFORCBFQUNIIENPTlRSSUJVVE9SIERPRVMgTk9UIFdBUlJBTlQgQUdBSU5TVCBJTlRFUkZFUkVOQ0UgV0lUSCBZT1VSIEVOSk9ZTUVOVCBPRiBUSEUgQ09WRVJFRCBDT0RFLCBUSEFUIFRIRSBGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLCBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSwgT1IgVEhBVCBERUZFQ1RTIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBDT1JSRUNURUQuIE5PIE9SQUwgT1IgV1JJVFRFTiBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBPUiBBRFZJQ0UgR0lWRU4gQlkgTElDRU5TT1IsIEEgTElDRU5TT1IgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSBPUiBBTlkgQ09OVFJJQlVUT1IgU0hBTEwgQ1JFQVRFIEEgV0FSUkFOVFkuIFlvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gaGlnaCByaXNrIGFjdGl2aXRpZXMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUgZGVzaWduLCBjb25zdHJ1Y3Rpb24sIG9wZXJhdGlvbiBvciBtYWludGVuYW5jZSBvZiBudWNsZWFyIGZhY2lsaXRpZXMsIGFpcmNyYWZ0IG5hdmlnYXRpb24sIGFpcmNyYWZ0IGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBDb3ZlcmVkIENvZGUgY291bGQgbGVhZCB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuIExpY2Vuc29yIGRpc2NsYWltcyBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5IG9mIGZpdG5lc3MgZm9yIHN1Y2ggdXNlcy4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIFRPIFRIRSBFWFRFTlQgTk9UIFBST0hJQklURUQgQlkgTEFXLCBJTiBOTyBFVkVOVCBTSEFMTCBMSUNFTlNPUiBPUiBBTlkgQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRISVMgTElDRU5TRSBPUiBZT1VSIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBDT1ZFUkVEIENPREUsIE9SIEFOWSBQT1JUSU9OIFRIRVJFT0YsIFdIRVRIRVIgVU5ERVIgQSBUSEVPUlkgT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBTVFJJQ1QgTElBQklMSVRZKSwgUFJPRFVDVFMgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRiBMSUNFTlNPUiBPUiBTVUNIIENPTlRSSUJVVE9SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUyBBTkQgTk9UV0lUSFNUQU5ESU5HIFRIRSBGQUlMVVJFIE9GIEVTU0VOVElBTCBQVVJQT1NFIE9GIEFOWSBSRU1FRFkuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIExJTUlUQVRJT04gT0YgTElBQklMSVRZIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuIEluIG5vIGV2ZW50IHNoYWxsIExpY2Vuc29yYHMgdG90YWwgbGlhYmlsaXR5IHRvIFlvdSBmb3IgYWxsIGRhbWFnZXMgKG90aGVyIHRoYW4gYXMgbWF5IGJlIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3KSB1bmRlciB0aGlzIExpY2Vuc2UgZXhjZWVkIHRoZSBhbW91bnQgb2YgdGVuIGRvbGxhcnMgKCQxMC4wMCkuCisKKzEwLiBPd25lcnNoaXAuIFN1YmplY3QgdG8gdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggQ29udHJpYnV0b3IuIExpY2Vuc29yIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBvciBvbiBiZWhhbGYgb2YgTGljZW5zb3IgKCJMaWNlbnNvciBNb2RpZmljYXRpb25zIiksIGFuZCBzdWNoIExpY2Vuc29yIE1vZGlmaWNhdGlvbnMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gTGljZW5zb3IgbWF5LCBhdCBpdHMgc29sZSBkaXNjcmV0aW9uLCBjaG9vc2UgdG8gbGljZW5zZSBzdWNoIExpY2Vuc29yIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIG9yIG1heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuCisKKzExLiBUZXJtaW5hdGlvbi4KKworMTEuMSBUZXJtIGFuZCBUZXJtaW5hdGlvbi4gVGhlIHRlcm0gb2YgdGhpcyBMaWNlbnNlIGlzIHBlcnBldHVhbCB1bmxlc3MgdGVybWluYXRlZCBhcyBwcm92aWRlZCBiZWxvdy4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlOgorCisoYSkgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIExpY2Vuc29yIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoOworCisoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mIHRoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEyLjUoYik7IG9yCisKKyhjKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gTGljZW5zb3IgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBMaWNlbnNlLCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgYWdhaW5zdCBMaWNlbnNvciAoaW5jbHVkaW5nIGJ5IGNyb3NzLWNsYWltIG9yIGNvdW50ZXIgY2xhaW0gaW4gYSBsYXdzdWl0KTsKKworKGQpIHVwb24gd3JpdHRlbiBub3RpY2UgZnJvbSBMaWNlbnNvciBpZiBZb3UsIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgdGVybSBvZiB0aGlzIExpY2Vuc2UsIGNvbW1lbmNlIGFuIGFjdGlvbiBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCBhZ2FpbnN0IGFueSB0aGlyZCBwYXJ0eSBhbGxlZ2luZyB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBhbnkgcGF0ZW50IChpbmNsdWRpbmcgYnkgY3Jvc3MtY2xhaW0gb3IgY291bnRlciBjbGFpbSBpbiBhIGxhd3N1aXQpLgorCisxMS4yIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvIGltbWVkaWF0ZWx5IHN0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgdG8gZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGhhdmUgYmVlbiBwcm9wZXJseSBncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBzaG91bGQgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIFNlY3Rpb25zIDMsIDUsIDgsIDksIDEwLCAxMSwgMTIuMiBhbmQgMTMuIE5vIHBhcnR5IHdpbGwgYmUgbGlhYmxlIHRvIGFueSBvdGhlciBmb3IgY29tcGVuc2F0aW9uLCBpbmRlbW5pdHkgb3IgZGFtYWdlcyBvZiBhbnkgc29ydCBzb2xlbHkgYXMgYSByZXN1bHQgb2YgdGVybWluYXRpbmcgdGhpcyBMaWNlbnNlIGluIGFjY29yZGFuY2Ugd2l0aCBpdHMgdGVybXMsIGFuZCB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBiZSB3aXRob3V0IHByZWp1ZGljZSB0byBhbnkgb3RoZXIgcmlnaHQgb3IgcmVtZWR5IG9mIGFueSBwYXJ0eS4KKworMTIuIE1pc2NlbGxhbmVvdXMuCisKKzEyLjEgR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtIiBhcyBkZWZpbmVkIGluIEZBUiAyLjEwMS4gR292ZXJubWVudCBzb2Z0d2FyZSBhbmQgdGVjaG5pY2FsIGRhdGEgcmlnaHRzIGluIHRoZSBDb3ZlcmVkIENvZGUgaW5jbHVkZSBvbmx5IHRob3NlIHJpZ2h0cyBjdXN0b21hcmlseSBwcm92aWRlZCB0byB0aGUgcHVibGljIGFzIGRlZmluZWQgaW4gdGhpcyBMaWNlbnNlLiBUaGlzIGN1c3RvbWFyeSBjb21tZXJjaWFsIGxpY2Vuc2UgaW4gdGVjaG5pY2FsIGRhdGEgYW5kIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGluIGFjY29yZGFuY2Ugd2l0aCBGQVIgMTIuMjExIChUZWNobmljYWwgRGF0YSkgYW5kIDEyLjIxMiAoQ29tcHV0ZXIgU29mdHdhcmUpIGFuZCwgZm9yIERlcGFydG1lbnQgb2YgRGVmZW5zZSBwdXJjaGFzZXMsIERGQVIgMjUyLjIyNy03MDE1IChUZWNobmljYWwgRGF0YSAtLSBDb21tZXJjaWFsIEl0ZW1zKSBhbmQgMjI3LjcyMDItMyAoUmlnaHRzIGluIENvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUgb3IgQ29tcHV0ZXIgU29mdHdhcmUgRG9jdW1lbnRhdGlvbikuIEFjY29yZGluZ2x5LCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzEyLjIgUmVsYXRpb25zaGlwIG9mIFBhcnRpZXMuIFRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgY3JlYXRpbmcgYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSBvciBhbnkgb3RoZXIgZm9ybSBvZiBsZWdhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIG9yIGFtb25nIFlvdSwgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudCB0byB0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSBvciBvdGhlcndpc2UuCisKKzEyLjMgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyIExpY2Vuc29yYHMgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IgaXQsIG1hcmtldCBhbmQvb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwgTW9kaWZpY2F0aW9ucywgRGVyaXZhdGl2ZSBXb3JrcywgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IFlvdSBtYXkgZGV2ZWxvcCwgcHJvZHVjZSwgbWFya2V0IG9yIGRpc3RyaWJ1dGUuCisKKzEyLjQgV2FpdmVyOyBDb25zdHJ1Y3Rpb24uIEZhaWx1cmUgYnkgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIHRvIGVuZm9yY2UgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgZGVlbWVkIGEgd2FpdmVyIG9mIGZ1dHVyZSBlbmZvcmNlbWVudCBvZiB0aGF0IG9yIGFueSBvdGhlciBwcm92aXNpb24uIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHdpbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTIuNSBTZXZlcmFiaWxpdHkuIChhKSBJZiBmb3IgYW55IHJlYXNvbiBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24gZmluZHMgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIG9yIHBvcnRpb24gdGhlcmVvZiwgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhhdCBwcm92aXNpb24gb2YgdGhlIExpY2Vuc2Ugd2lsbCBiZSBlbmZvcmNlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWlzc2libGUgc28gYXMgdG8gZWZmZWN0IHRoZSBlY29ub21pYyBiZW5lZml0cyBhbmQgaW50ZW50IG9mIHRoZSBwYXJ0aWVzLCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuIChiKSBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgaWYgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIG9yIHJlc3RyaWN0cyBZb3UgZnJvbSBmdWxseSBhbmQvb3Igc3BlY2lmaWNhbGx5IGNvbXBseWluZyB3aXRoIFNlY3Rpb25zIDIgYW5kL29yIDMgb3IgcHJldmVudHMgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIGVpdGhlciBvZiB0aG9zZSBTZWN0aW9ucywgdGhpcyBMaWNlbnNlIHdpbGwgaW1tZWRpYXRlbHkgdGVybWluYXRlIGFuZCBZb3UgbXVzdCBpbW1lZGlhdGVseSBkaXNjb250aW51ZSBhbnkgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUgYW5kIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiBpdCB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4KKworMTIuNiBEaXNwdXRlIFJlc29sdXRpb24uIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbiBiZXR3ZWVuIFlvdSBhbmQgTGljZW5zb3IgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIHRha2UgcGxhY2UgaW4gdGhlIFNlYXR0bGUsIFdhc2hpbmd0b24sIGFuZCBZb3UgYW5kIExpY2Vuc29yIGhlcmVieSBjb25zZW50IHRvIHRoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlIGFuZCBmZWRlcmFsIGNvdXJ0cyB3aXRoaW4gdGhhdCBEaXN0cmljdCB3aXRoIHJlc3BlY3QgdG8gdGhpcyBMaWNlbnNlLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KKworMTIuNyBFeHBvcnQvSW1wb3J0IExhd3MuIFRoaXMgc29mdHdhcmUgaXMgc3ViamVjdCB0byBhbGwgZXhwb3J0IGFuZCBpbXBvcnQgbGF3cyBhbmQgcmVzdHJpY3Rpb25zIGFuZCByZWd1bGF0aW9ucyBvZiB0aGUgY291bnRyeSBpbiB3aGljaCB5b3UgcmVjZWl2ZSB0aGUgQ292ZXJlZCBDb2RlIGFuZCBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCBZb3UgZG8gbm90IGV4cG9ydCwgcmUtZXhwb3J0IG9yIGltcG9ydCB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBkaXJlY3QgcHJvZHVjdCB0aGVyZW9mIGluIHZpb2xhdGlvbiBvZiBhbnkgc3VjaCByZXN0cmljdGlvbnMsIGxhd3Mgb3IgcmVndWxhdGlvbnMsIG9yIHdpdGhvdXQgYWxsIG5lY2Vzc2FyeSBhdXRob3JpemF0aW9ucy4KKworMTIuOCBFbnRpcmUgQWdyZWVtZW50OyBHb3Zlcm5pbmcgTGF3LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCB0aGUgU3RhdGUgb2YgV2FzaGluZ3Rvbi4KKworV2hlcmUgWW91IGFyZSBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZyBjbGF1c2UgYXBwbGllczogVGhlIHBhcnRpZXMgaGVyZWJ5IGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgcmVxdWVzdGVkIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbGwgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiBMZXMgcGFydGllcyBvbnQgZXhpZyYjMjMzOyBxdWUgbGUgcHImIzIzMztzZW50IGNvbnRyYXQgZXQgdG91cyBsZXMgZG9jdW1lbnRzIGNvbm5leGVzIHNvaWVudCByJiMyMzM7ZGlnJiMyMzM7cyBlbiBhbmdsYWlzLgorCisKK0VYSElCSVQgQS4KKworIkNvcHlyaWdodCAmIzE2OTsgMTk5NS0yMDAyIFJlYWxOZXR3b3JrcywgSW5jLiBhbmQvb3IgaXRzIGxpY2Vuc29ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSwgYW5kIHRoZSBmaWxlcyBpbmNsdWRlZCB3aXRoIHRoaXMgZmlsZSwgYXJlIHN1YmplY3QgdG8gdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgUmVhbE5ldHdvcmtzIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlICJSUFNMIikgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmhlbGl4Y29tbXVuaXR5Lm9yZy9jb250ZW50L3Jwc2wgdW5sZXNzIHlvdSBoYXZlIGxpY2Vuc2VkIHRoZSBmaWxlIHVuZGVyIHRoZSBSZWFsTmV0d29ya3MgQ29tbXVuaXR5IFNvdXJjZSBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgIlJDU0wiKSBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuaGVsaXhjb21tdW5pdHkub3JnL2NvbnRlbnQvcmNzbCwgaW4gd2hpY2ggY2FzZSB0aGUgUkNTTCB3aWxsIGFwcGx5LiBZb3UgbWF5IGFsc28gb2J0YWluIHRoZSBsaWNlbnNlIHRlcm1zIGRpcmVjdGx5IGZyb20gUmVhbE5ldHdvcmtzLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIFJQU0wgb3IsIGlmIHlvdSBoYXZlIGEgdmFsaWQgUkNTTCB3aXRoIFJlYWxOZXR3b3JrcyBhcHBsaWNhYmxlIHRvIHRoaXMgZmlsZSwgdGhlIFJDU0wuIFBsZWFzZSBzZWUgdGhlIGFwcGxpY2FibGUgUlBTTCBvciBSQ1NMIGZvciB0aGUgcmlnaHRzLCBvYmxpZ2F0aW9ucyBhbmQgbGltaXRhdGlvbnMgZ292ZXJuaW5nIHVzZSBvZiB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBIZWxpeCBETkEgVGVjaG5vbG9neS4gUmVhbE5ldHdvcmtzIGlzIHRoZSBkZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIGNvZGUgYW5kIG93bnMgdGhlIGNvcHlyaWdodHMgaW4gdGhlIHBvcnRpb25zIGl0IGNyZWF0ZWQuCisKK1RoaXMgZmlsZSwgYW5kIHRoZSBmaWxlcyBpbmNsdWRlZCB3aXRoIHRoaXMgZmlsZSwgaXMgZGlzdHJpYnV0ZWQgYW5kIG1hZGUgYXZhaWxhYmxlIG9uIGFuIGBBUyBJU2AgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIEFORCBSRUFMTkVUV09SS1MgSEVSRUJZIERJU0NMQUlNUyBBTEwgU1VDSCBXQVJSQU5USUVTLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBRVUlFVCBFTkpPWU1FTlQgT1IgTk9OLUlORlJJTkdFTUVOVC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCitUZWNobm9sb2d5IENvbXBhdGliaWxpdHkgS2l0IFRlc3QgU3VpdGUocykgTG9jYXRpb24gKGlmIGxpY2Vuc2VkIHVuZGVyIHRoZSBSQ1NMKToKKworX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18iCisKK09iamVjdCBDb2RlIE5vdGljZTogSGVsaXggRE5BIENsaWVudCB0ZWNobm9sb2d5IGluY2x1ZGVkLiBDb3B5cmlnaHQgJiMxNjk7IFJlYWxOZXR3b3JrcywgSW5jLiwgMTk5NS0yMDAyLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitFWEhJQklUIEIKKworQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZXMgZm9yIHRoZSBSZWFsTmV0d29ya3MgUHVibGljIFNvdXJjZSBMaWNlbnNlLiBUaGUgZm9sbG93aW5nIGxpc3QgYXBwbGllcyB0byB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBhcyBvZiBPY3RvYmVyIDI1LCAyMDAyLCB1bmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZC4KKworQWNhZGVtaWMgRnJlZSBMaWNlbnNlCitBcGFjaGUgU29mdHdhcmUgTGljZW5zZQorQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlCitBcnRpc3RpYyBsaWNlbnNlCitBdHRyaWJ1dGlvbiBBc3N1cmFuY2UgTGljZW5zZXMKK0JTRCBsaWNlbnNlCitDb21tb24gUHVibGljIExpY2Vuc2UxCitFaWZmZWwgRm9ydW0gTGljZW5zZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkxCitHTlUgTGlicmFyeSBvciAiTGVzc2VyIiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChMR1BMKTEKK0lCTSBQdWJsaWMgTGljZW5zZQorSW50ZWwgT3BlbiBTb3VyY2UgTGljZW5zZQorSmFiYmVyIE9wZW4gU291cmNlIExpY2Vuc2UKK01JVCBsaWNlbnNlCitNSVRSRSBDb2xsYWJvcmF0aXZlIFZpcnR1YWwgV29ya3NwYWNlIExpY2Vuc2UgKENWVyBMaWNlbnNlKQorTW90b3NvdG8gTGljZW5zZQorTW96aWxsYSBQdWJsaWMgTGljZW5zZSAxLjAgKE1QTCkKK01vemlsbGEgUHVibGljIExpY2Vuc2UgMS4xIChNUEwpCitOb2tpYSBPcGVuIFNvdXJjZSBMaWNlbnNlCitPcGVuIEdyb3VwIFRlc3QgU3VpdGUgTGljZW5zZQorUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gTGljZW5zZQorUmljb2ggU291cmNlIENvZGUgUHVibGljIExpY2Vuc2UKK1N1biBJbmR1c3RyeSBTdGFuZGFyZHMgU291cmNlIExpY2Vuc2UgKFNJU1NMKQorU3VuIFB1YmxpYyBMaWNlbnNlCitVbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EgT3BlbiBTb3VyY2UgTGljZW5zZQorVm92aWRhIFNvZnR3YXJlIExpY2Vuc2Ugdi4gMS4wCitXM0MgTGljZW5zZQorWC5OZXQgTGljZW5zZQorWm9wZSBQdWJsaWMgTGljZW5zZQoremxpYi9saWJwbmcgbGljZW5zZQorMU5vdGU6IGJlY2F1c2UgdGhpcyBsaWNlbnNlIGNvbnRhaW5zIGNlcnRhaW4gcmVjaXByb2NhbCBsaWNlbnNpbmcgdGVybXMgdGhhdCBwdXJwb3J0IHRvIGV4dGVuZCB0byBpbmRlcGVuZGVudGx5IGRldmVsb3BlZCBjb2RlLCBZb3UgbWF5IGJlIHByb2hpYml0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgb3RoZXJ3aXNlIGNvbXBhdGlibGUgbGljZW5zZSBmcm9tIHVzaW5nIGNvZGUgbGljZW5zZWQgdW5kZXIgaXRzIHRlcm1zIHdpdGggQ292ZXJlZCBDb2RlIGJlY2F1c2UgQ292ZXJlZCBDb2RlIG1heSBvbmx5IGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBSZWFsTmV0d29ya3MgUHVibGljIFNvdXJjZSBMaWNlbnNlLiBBbnkgYXR0ZW1wdCB0byBhcHBseSBub24gUlBTTCBsaWNlbnNlIHRlcm1zLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBHUEwsIHRvIENvdmVyZWQgQ29kZSBpcyBleHByZXNzbHkgZm9yYmlkZGVuLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IFlvdXIgdXNlIG9mIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2VkIGNvZGUgZG9lcyBub3QgdmlvbGF0ZSBlaXRoZXIgdGhlIFJQU0wgb3IgdGhlIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2UuCisKK1RoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGxpc3QgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5oZWxpeGNvbW11bml0eS5vcmcvY29udGVudC9jb21wbGljZW5zZQorCitFWEhJQklUIEMKKworUmVhbE5ldHdvcmtzYCBUcmFkZW1hcmsgcG9saWN5LgorCitSZWFsTmV0d29ya3MgZGVmaW5lcyB0aGUgZm9sbG93aW5nIHRyYWRlbWFya3MgY29sbGVjdGl2ZWx5IGFzICJMaWNlbnNvciBUcmFkZW1hcmtzIjogIlJlYWxOZXR3b3JrcyIsICJSZWFsUGxheWVyIiwgIlJlYWxKdWtlYm94IiwgIlJlYWxTeXN0ZW0iLCAiUmVhbEF1ZGlvIiwgIlJlYWxWaWRlbyIsICJSZWFsT25lIFBsYXllciIsICJSZWFsTWVkaWEiLCAiSGVsaXgiIG9yIGFueSBvdGhlciB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIGJlbG9uZ2luZyB0byBSZWFsTmV0d29ya3MuCisKK1JlYWxOZXR3b3JrcyAiTGljZW5zb3IgVHJhZGVtYXJrIFBvbGljeSIgZm9yYmlkcyBhbnkgdXNlIG9mIExpY2Vuc29yIFRyYWRlbWFya3MgZXhjZXB0IGFzIHBlcm1pdHRlZCBieSBhbmQgaW4gc3RyaWN0IGNvbXBsaWFuY2UgYXQgYWxsIHRpbWVzIHdpdGggUmVhbE5ldHdvcmtzYCB0aGlyZCBwYXJ0eSB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcyB3aGljaCBhcmUgcG9zdGVkIGF0IHd3dy5yZWFsbmV0d29ya3MuY29tL2luZm8vaGVsaXhsb2dvLmh0bWwuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUlNDUEwgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JTQ1BMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZGJiYzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JTQ1BMCkBAIC0wLDAgKzEsMTkzIEBACisKK1JpY29oIFNvdXJjZSBDb2RlIFB1YmxpYyBMaWNlbnNlCisKK1ZlcnNpb24gMS4wCisKKworMS4gRGVmaW5pdGlvbnMuCisKKworMS4xLiAiQ29udHJpYnV0b3IiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworCisxLjIuICJDb250cmlidXRvciBWZXJzaW9uIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKworMS4zLiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIiBtZWFucyBhIHdlYnNpdGUgb3IgYW55IG90aGVyIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKworCisxLjQuICJFeGVjdXRhYmxlIENvZGUiIG1lYW5zIEdvdmVybmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKworCisxLjUuICJHb3Zlcm5lZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisKKzEuNi4gIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgR292ZXJuZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworCisxLjcuICJMaWNlbnNhYmxlIiBtZWFucyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorCisKKzEuOC4gIkxpY2Vuc2UiIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKworMS45LiAiTW9kaWZpY2F0aW9ucyIgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIEdvdmVybmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorCisKKyhhKSBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCisoYikgQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworCisKKzEuMTAuICJPcmlnaW5hbCBDb2RlIiBtZWFucyB0aGUgIlBsYXRmb3JtIGZvciBJbmZvcm1hdGlvbiBBcHBsaWNhdGlvbnMiIFNvdXJjZSBDb2RlIGFzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBieSBSU1YuCisKKworMS4xMSAiUGF0ZW50IENsYWltcyIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IHRoZSBncmFudG9yIG9mIGEgbGljZW5zZSB0aGVyZXRvLgorCisxLjEyLiAiUlNWIiBtZWFucyBSaWNvaCBTaWxpY29uIFZhbGxleSwgSW5jLiwgYSBDYWxpZm9ybmlhIGNvcnBvcmF0aW9uIHdpdGggb2ZmaWNlcyBhdCAyODgyIFNhbmQgSGlsbCBSb2FkLCBTdWl0ZSAxMTUsIE1lbmxvIFBhcmssIENBIDk0MDI1LTcwMjIuCisKKzEuMTMuICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBHb3Zlcm5lZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIEV4ZWN1dGFibGUgQ29kZSwgb3IgYSBsaXN0IG9mIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBHb3Zlcm5lZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworCisxLjE0LiAiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworCisKKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisKKzIuMS4gR3JhbnQgZnJvbSBSU1YuIFJTViBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKworCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3Igc2VsbGluZyBvZiBPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKworCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuIEVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgR292ZXJuZWQgQ29kZSBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6IChpKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAoaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KKworCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4gVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgR292ZXJuZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLiBBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgQ29kZSB2ZXJzaW9uIG9yIHZpYSBhbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSBDb2RlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIGFuIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLiBZb3UgbXVzdCBjYXVzZSBhbGwgR292ZXJuZWQgQ29kZSB0byB3aGljaCB5b3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBHb3Zlcm5lZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IFJTViBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIFJTViBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSBDb2RlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgR292ZXJuZWQgQ29kZS4KKworCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLgorCiszLjQuMS4gVGhpcmQgUGFydHkgQ2xhaW1zLiBJZiBZb3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIHBhcnR5IGNsYWltcyBhbiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaW4gcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IG9yIGNvZGUgKG9yIGl0cyB1dGlsaXphdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UpLCB5b3UgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIHlvdSBvYnRhaW4gc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgWW91IG1ha2UgWW91ciBNb2RpZmljYXRpb24gYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgWW91IHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIFlvdSBtYWtlIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBSU1YgYW5kIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIEdvdmVybmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLiBJbiB0aGUgZXZlbnQgdGhhdCBZb3UgYXJlIGEgQ29udHJpYnV0b3IsIFlvdSByZXByZXNlbnQgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBpbiB0aGUgTEVHQUwgZmlsZSwgeW91ciBNb2RpZmljYXRpb25zIGFyZSB5b3VyIG9yaWdpbmFsIGNyZWF0aW9ucyBhbmQsIHRvIHRoZSBiZXN0IG9mIHlvdXIga25vd2xlZGdlLCBubyB0aGlyZCBwYXJ0eSBoYXMgYW55IGNsYWltIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMpIHJlbGF0aW5nIHRvIHlvdXIgTW9kaWZpY2F0aW9ucy4gWW91IHJlcHJlc2VudCB0aGF0IHRoZSBMRUdBTCBmaWxlIGluY2x1ZGVzIGNvbXBsZXRlIGRldGFpbHMgb2YgYW55IGxpY2Vuc2Ugb3Igb3RoZXIgcmVzdHJpY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGFueSBwYXJ0IG9mIHlvdXIgTW9kaWZpY2F0aW9ucy4KKworMy40LjIuIENvbnRyaWJ1dG9yIEFQSXMuIElmIFlvdXIgTW9kaWZpY2F0aW9uIGlzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgWW91IG93biBvciBjb250cm9sIHBhdGVudHMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgeW91IG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisKKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLiBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSwgYW5kIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlLCB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIEdvdmVybmVkIENvZGUuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSwgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIHlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSBmaWxlKSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBHb3Zlcm5lZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiBSU1Ygb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgUlNWIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBSU1Ygb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBDb2RlIFZlcnNpb25zLiBZb3UgbWF5IGRpc3RyaWJ1dGUgR292ZXJuZWQgQ29kZSBpbiBFeGVjdXRhYmxlIENvZGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgR292ZXJuZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgcHJvbWluZW50IG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIEdvdmVybmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgR292ZXJuZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiBvZiBHb3Zlcm5lZCBDb2RlIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgUlNWIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgUlNWIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBSU1Ygb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKKworMy43LiBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIEdvdmVybmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBHb3Zlcm5lZCBDb2RlLgorCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGV0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBHb3Zlcm5lZCBDb2RlIGR1ZSB0byBzdGF0dXRlIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCisKKworNS4gVHJhZGVtYXJrIFVzYWdlLgorCisKKworNS4xLiBBZHZlcnRpc2luZyBNYXRlcmlhbHMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhlIEdvdmVybmVkIENvZGUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OiAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBSaWNvaCBTaWxpY29uIFZhbGxleSwgSW5jLiIKKworCis1LjIuIEVuZG9yc2VtZW50cy4gVGhlIG5hbWVzICJSaWNvaCwiICJSaWNvaCBTaWxpY29uIFZhbGxleSwiIGFuZCAiUlNWIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBDb250cmlidXRvciBWZXJzaW9ucyBvciBMYXJnZXIgV29ya3Mgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIFJTVi4KKworCis1LjMuIFByb2R1Y3QgTmFtZXMuIENvbnRyaWJ1dG9yIFZlcnNpb25zIGFuZCBMYXJnZXIgV29ya3MgbWF5IG5vdCBiZSBjYWxsZWQgIlJpY29oIiBub3IgbWF5IHRoZSB3b3JkICJSaWNvaCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBSU1YuCisKKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKworCis2LjEuIE5ldyBWZXJzaW9ucy4gUlNWIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuIE9uY2UgR292ZXJuZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIEdvdmVybmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFJTVi4gTm8gb25lIG90aGVyIHRoYW4gUlNWIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIEdvdmVybmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKworNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KKworR09WRVJORUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBHT1ZFUk5FRCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBHT1ZFUk5FRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIEdPVkVSTkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBSU1YgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIEdPVkVSTkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworCis4LiBUZXJtaW5hdGlvbi4KKworCisKKzguMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBHb3Zlcm5lZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworCis4LjIuIElmIFlvdSBpbml0aWF0ZSBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24gYWdhaW5zdCBSU1Ygb3IgYSBDb250cmlidXRvciAoUlNWIG9yIHRoZSBDb250cmlidXRvciBhZ2FpbnN0IHdob20gWW91IGZpbGUgc3VjaCBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgIlBhcnRpY2lwYW50IikgYWxsZWdpbmcgdGhhdDoKKworCisoYSkgc3VjaCBQYXJ0aWNpcGFudGBzIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorCisoYikgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlIHByb3ZpZGVkIHRvIFlvdSBieSB0aGUgUGFydGljaXBhbnQsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudGBzIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZCAyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE9yaWdpbmFsIENvZGUgb3IgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFBhcnRpY2lwYW50LgorCisKKworOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudGBzIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuCisKKworOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKworOS4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFJTViwgQU5ZIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgR09WRVJORUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBZT1UgT1IgQU5ZIE9USEVSIFBFUlNPTiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIQVQgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLiBUTyBUSEUgRVhURU5UIFRIQVQgQU5ZIEVYQ0xVU0lPTiBPRiBEQU1BR0VTIEFCT1ZFIElTIE5PVCBWQUxJRCwgWU9VIEFHUkVFIFRIQVQgSU4gTk8gRVZFTlQgV0lMTCBSU1ZTIExJQUJJTElUWSBVTkRFUiBPUiBSRUxBVEVEIFRPIFRISVMgQUdSRUVNRU5UIEVYQ0VFRCBGSVZFIFRIT1VTQU5EIERPTExBUlMgKCQ1LDAwMCkuIFRIRSBHT1ZFUk5FRCBDT0RFIElTIE5PVCBJTlRFTkRFRCBGT1IgVVNFIElOIENPTk5FQ1RJT04gV0lUSCBBTlkgTlVDTEVSLCBBVklBVElPTiwgTUFTUyBUUkFOU0lUIE9SIE1FRElDQUwgQVBQTElDQVRJT04gT1IgQU5ZIE9USEVSIElOSEVSRU5UTFkgREFOR0VST1VTIEFQUExJQ0FUSU9OIFRIQVQgQ09VTEQgUkVTVUxUIElOIERFQVRILCBQRVJTT05BTCBJTkpVUlksIENBVEFTVFJPUEhJQyBEQU1BR0UgT1IgTUFTUyBERVNUUlVDVElPTiwgQU5EIFlPVSBBR1JFRSBUSEFUIE5FSVRIRVIgUlNWIE5PUiBBTlkgQ09OVFJJQlVUT1IgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIE9GIEFOWSBOQVRVUkUgQVMgQSBSRVNVTFQgT0YgQU5ZIFNVQ0ggVVNFIE9GIFRIRSBHT1ZFUk5FRCBDT0RFLgorCisKKzEwLiBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzLgorCitUaGUgR292ZXJuZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUiIGFuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCIgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBHb3Zlcm5lZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworCisxMS4gTWlzY2VsbGFuZW91cy4KKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgcGFydGllcyBzdWJtaXQgdG8gcGVyc29uYWwganVyaXNkaWN0aW9uIGluIENhbGlmb3JuaWEgYW5kIGZ1cnRoZXIgYWdyZWUgdGhhdCBhbnkgY2F1c2Ugb2YgYWN0aW9uIGFyaXNpbmcgdW5kZXIgb3IgcmVsYXRlZCB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBicm91Z2h0IGluIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEuIFRoZSBsb3NpbmcgcGFydHkgc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMgZmVlcyBhbmQgZXhwZW5zZXMuIE5vdHdpdGhzdGFuZGluZyBhbnl0aGluZyB0byB0aGUgY29udHJhcnkgaGVyZWluLCBSU1YgbWF5IHNlZWsgaW5qdW5jdGl2ZSByZWxpZWYgcmVsYXRlZCB0byBhIGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudCBpbiBhbnkgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbi4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKworMTIuIFJlc3BvbnNpYmlsaXR5IGZvciBDbGFpbXMuCisKK0V4Y2VwdCBpbiBjYXNlcyB3aGVyZSBhbm90aGVyIENvbnRyaWJ1dG9yIGhhcyBmYWlsZWQgdG8gY29tcGx5IHdpdGggU2VjdGlvbiAzLjQsIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIFlvdXIgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgYmFzZWQgb24gdGhlIG51bWJlciBvZiBjb3BpZXMgb2YgR292ZXJuZWQgQ29kZSB5b3UgbWFkZSBhdmFpbGFibGUsIHRoZSByZXZlbnVlcyB5b3UgcmVjZWl2ZWQgZnJvbSB1dGlsaXppbmcgc3VjaCByaWdodHMsIGFuZCBvdGhlciByZWxldmFudCBmYWN0b3JzLiBZb3UgYWdyZWUgdG8gd29yayB3aXRoIGFmZmVjdGVkIHBhcnRpZXMgdG8gZGlzdHJpYnV0ZSByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuCisKKworCisgCisKK0VYSElCSVQgQQorCisiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgUmljb2ggU291cmNlIENvZGUgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LnJpc291cmNlLm9yZy9SUEwKKworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoaXMgY29kZSB3YXMgaW5pdGlhbGx5IGRldmVsb3BlZCBieSBSaWNvaCBTaWxpY29uIFZhbGxleSwgSW5jLiBQb3J0aW9ucyBjcmVhdGVkIGJ5IFJpY29oIFNpbGljb24gVmFsbGV5LCBJbmMuIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SdWJ5IGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SdWJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMmU1N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1J1YnkKQEAgLTAsMCArMSw2MCBAQAorCitSdWJ5IGlzIGNvcHlyaWdodGVkIGZyZWUgc29mdHdhcmUgYnkgWXVraWhpcm8gTWF0c3Vtb3RvIDxtYXR6QG5ldGxhYi5jby5qcD4uCitZb3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIGVpdGhlciB0aGUgdGVybXMgb2YgdGhlIEdQTAorKHNlZSBDT1BZSU5HLnR4dCBmaWxlKSwgb3IgdGhlIGNvbmRpdGlvbnMgYmVsb3c6CisKKyAgMS4gWW91IG1heSBtYWtlIGFuZCBnaXZlIGF3YXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBzb3VyY2UgZm9ybSBvZiB0aGUKKyAgICAgc29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZHVwbGljYXRlIGFsbCBvZiB0aGUKKyAgICAgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZXMgYW5kIGFzc29jaWF0ZWQgZGlzY2xhaW1lcnMuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBpbiBhbnkgd2F5LCBwcm92aWRlZCB0aGF0CisgICAgIHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIGEpIHBsYWNlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgUHVibGljIERvbWFpbiBvciBvdGhlcndpc2UKKyAgICAgICAgICBtYWtlIHRoZW0gRnJlZWx5IEF2YWlsYWJsZSwgc3VjaCBhcyBieSBwb3N0aW5nIHNhaWQKKyAgIG1vZGlmaWNhdGlvbnMgdG8gVXNlbmV0IG9yIGFuIGVxdWl2YWxlbnQgbWVkaXVtLCBvciBieSBhbGxvd2luZworICAgdGhlIGF1dGhvciB0byBpbmNsdWRlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgc29mdHdhcmUuCisKKyAgICAgICBiKSB1c2UgdGhlIG1vZGlmaWVkIHNvZnR3YXJlIG9ubHkgd2l0aGluIHlvdXIgY29ycG9yYXRpb24gb3IKKyAgICAgICAgICBvcmdhbml6YXRpb24uCisKKyAgICAgICBjKSByZW5hbWUgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBzbyB0aGUgbmFtZXMgZG8gbm90IGNvbmZsaWN0CisgICB3aXRoIHN0YW5kYXJkIGV4ZWN1dGFibGVzLCB3aGljaCBtdXN0IGFsc28gYmUgcHJvdmlkZWQuCisKKyAgICAgICBkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgYXV0aG9yLgorCisgIDMuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgc29mdHdhcmUgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZQorICAgICBmb3JtLCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIGEpIGRpc3RyaWJ1dGUgdGhlIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJ5IGZpbGVzIG9mIHRoZSBzb2Z0d2FyZSwKKyAgIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIChpbiB0aGUgbWFudWFsIHBhZ2Ugb3IgZXF1aXZhbGVudCkKKyAgIG9uIHdoZXJlIHRvIGdldCB0aGUgb3JpZ2luYWwgZGlzdHJpYnV0aW9uLgorCisgICAgICAgYikgYWNjb21wYW55IHRoZSBkaXN0cmlidXRpb24gd2l0aCB0aGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2Ugb2YKKyAgIHRoZSBzb2Z0d2FyZS4KKworICAgICAgIGMpIGdpdmUgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIG5vbi1zdGFuZGFyZCBuYW1lcywgd2l0aAorICAgICAgICAgIGluc3RydWN0aW9ucyBvbiB3aGVyZSB0byBnZXQgdGhlIG9yaWdpbmFsIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbi4KKworICAgICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBhdXRob3IuCisKKyAgNC4gWW91IG1heSBtb2RpZnkgYW5kIGluY2x1ZGUgdGhlIHBhcnQgb2YgdGhlIHNvZnR3YXJlIGludG8gYW55IG90aGVyCisgICAgIHNvZnR3YXJlIChwb3NzaWJseSBjb21tZXJjaWFsKS4gIEJ1dCBzb21lIGZpbGVzIGluIHRoZSBkaXN0cmlidXRpb24KKyAgICAgYXJlIG5vdCB3cml0dGVuIGJ5IHRoZSBhdXRob3IsIHNvIHRoYXQgdGhleSBhcmUgbm90IHVuZGVyIHRoaXMgdGVybXMuCisKKyAgICAgVGhleSBhcmUgZ2MuYyhwYXJ0bHkpLCB1dGlscy5jKHBhcnRseSksIHJlZ2V4LltjaF0sIHN0LltjaF0gYW5kIHNvbWUKKyAgICAgZmlsZXMgdW5kZXIgdGhlIC4vbWlzc2luZyBkaXJlY3RvcnkuICBTZWUgZWFjaCBmaWxlIGZvciB0aGUgY29weWluZworICAgICBjb25kaXRpb24uCisKKyAgNS4gVGhlIHNjcmlwdHMgYW5kIGxpYnJhcnkgZmlsZXMgc3VwcGxpZWQgYXMgaW5wdXQgdG8gb3IgcHJvZHVjZWQgYXMgCisgICAgIG91dHB1dCBmcm9tIHRoZSBzb2Z0d2FyZSBkbyBub3QgYXV0b21hdGljYWxseSBmYWxsIHVuZGVyIHRoZQorICAgICBjb3B5cmlnaHQgb2YgdGhlIHNvZnR3YXJlLCBidXQgYmVsb25nIHRvIHdob21ldmVyIGdlbmVyYXRlZCB0aGVtLCAKKyAgICAgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkIHdpdGggdGhpcworICAgICBzb2Z0d2FyZS4KKworICA2LiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAgICAgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAgICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICAgICBQVVJQT1NFLgorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU0FYLVBEIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TQVgtUEQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmZDExMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU0FYLVBECkBAIC0wLDAgKzEsMzMgQEAKKworQ29weXJpZ2h0IFN0YXR1cyBmb3IgU0FYCisKK1NBWCBpcyBmcmVlIQorCitJbiBmYWN0LCBpdGBzIG5vdCBwb3NzaWJsZSB0byBvd24gYSBsaWNlbnNlIHRvIFNBWCwgc2luY2UgaXRgcyBiZWVuIHBsYWNlZCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworTm8gV2FycmFudHkKKworQmVjYXVzZSBTQVggaXMgcmVsZWFzZWQgdG8gdGhlIHB1YmxpYyBkb21haW4sIHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZGVzaWduIG9yIGZvciB0aGUgc29mdHdhcmUgaW1wbGVtZW50YXRpb24sIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LiBFeGNlcHQgd2hlbiBvdGhlcndpc2Ugc3RhdGVkIGluIHdyaXRpbmcgdGhlIGNvcHlyaWdodCBob2xkZXJzIGFuZC9vciBvdGhlciBwYXJ0aWVzIHByb3ZpZGUgU0FYICJhcyBpcyIgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIFNBWCBpcyB3aXRoIHlvdS4gU2hvdWxkIFNBWCBwcm92ZSBkZWZlY3RpdmUsIHlvdSBhc3N1bWUgdGhlIGNvc3Qgb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciBvciBjb3JyZWN0aW9uLgorCitJbiBubyBldmVudCB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcgd2lsbCBhbnkgY29weXJpZ2h0IGhvbGRlciwgb3IgYW55IG90aGVyIHBhcnR5IHdobyBtYXkgbW9kaWZ5IGFuZC9vciByZWRpc3RyaWJ1dGUgU0FYLCBiZSBsaWFibGUgdG8geW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSBTQVggKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbG9zcyBvZiBkYXRhIG9yIGRhdGEgYmVpbmcgcmVuZGVyZWQgaW5hY2N1cmF0ZSBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5IHlvdSBvciB0aGlyZCBwYXJ0aWVzIG9yIGEgZmFpbHVyZSBvZiB0aGUgU0FYIHRvIG9wZXJhdGUgd2l0aCBhbnkgb3RoZXIgcHJvZ3JhbXMpLCBldmVuIGlmIHN1Y2ggaG9sZGVyIG9yIG90aGVyIHBhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworQ29weXJpZ2h0IERpc2NsYWltZXJzCisKK1RoaXMgcGFnZSBpbmNsdWRlcyBzdGF0ZW1lbnRzIHRvIHRoYXQgZWZmZWN0IGJ5IERhdmlkIE1lZ2dpbnNvbiwgd2hvIHdvdWxkIGhhdmUgYmVlbiBhYmxlIHRvIGNsYWltIGNvcHlyaWdodCBmb3IgdGhlIG9yaWdpbmFsIHdvcmsuCisKK1NBWCAxLjAKKworVmVyc2lvbiAxLjAgb2YgdGhlIFNpbXBsZSBBUEkgZm9yIFhNTCAoU0FYKSwgY3JlYXRlZCBjb2xsZWN0aXZlbHkgYnkgdGhlIG1lbWJlcnNoaXAgb2YgdGhlIFhNTC1ERVYgbWFpbGluZyBsaXN0LCBpcyBoZXJlYnkgcmVsZWFzZWQgaW50byB0aGUgcHVibGljIGRvbWFpbi4KKworTm8gb25lIG93bnMgU0FYOiB5b3UgbWF5IHVzZSBpdCBmcmVlbHkgaW4gYm90aCBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGJ1bmRsZSBpdCB3aXRoIHlvdXIgc29mdHdhcmUgZGlzdHJpYnV0aW9uLCBpbmNsdWRlIGl0IG9uIGEgQ0QtUk9NLCBsaXN0IHRoZSBzb3VyY2UgY29kZSBpbiBhIGJvb2ssIG1pcnJvciB0aGUgZG9jdW1lbnRhdGlvbiBhdCB5b3VyIG93biB3ZWIgc2l0ZSwgb3IgdXNlIGl0IGluIGFueSBvdGhlciB3YXkgeW91IHNlZSBmaXQuCisKK0RhdmlkIE1lZ2dpbnNvbiwgTWVnZ2luc29uIFRlY2hub2xvZ2llcyBMdGQuCisxOTk4LTA1LTExCisKK1NBWCAyLjAKKworSSBoZXJlYnkgYWJhbmRvbiBhbnkgcHJvcGVydHkgcmlnaHRzIHRvIFNBWCAyLjAgKHRoZSBTaW1wbGUgQVBJIGZvciBYTUwpLCBhbmQgcmVsZWFzZSBhbGwgb2YgdGhlIFNBWCAyLjAgc291cmNlIGNvZGUsIGNvbXBpbGVkIGNvZGUsIGFuZCBkb2N1bWVudGF0aW9uIGNvbnRhaW5lZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbnRvIHRoZSBQdWJsaWMgRG9tYWluLiBTQVggY29tZXMgd2l0aCBOTyBXQVJSQU5UWSBvciBndWFyYW50ZWUgb2YgZml0bmVzcyBmb3IgYW55IHB1cnBvc2UuCisKK0RhdmlkIE1lZ2dpbnNvbiwgTWVnZ2luc29uIFRlY2hub2xvZ2llcyBMdGQuCisyMDAwLTA1LTA1CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU0dJLTEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NHSS0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOTk4NTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NHSS0xCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAoYykgQ29weXJpZ2h0IDE5OTMsIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqIEFMTCBSSUdIVFMgUkVTRVJWRUQgCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciAKKyAqIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGUgY29weXJpZ2h0IG5vdGljZQorICogYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgCisgKiB0aGUgbmFtZSBvZiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nCisgKiBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCisgKiB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIAorICoKKyAqIFRIRSBNQVRFUklBTCBFTUJPRElFRCBPTiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIFRPIFlPVSAiQVMtSVMiCisgKiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUywgSU1QTElFRCBPUiBPVEhFUldJU0UsCisgKiBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIElOIE5PIEVWRU5UIFNIQUxMIFNJTElDT04KKyAqIEdSQVBISUNTLCBJTkMuICBCRSBMSUFCTEUgVE8gWU9VIE9SIEFOWU9ORSBFTFNFIEZPUiBBTlkgRElSRUNULAorICogU1BFQ0lBTCwgSU5DSURFTlRBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWQorICogS0lORCwgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwKKyAqIExPU1MgT0YgUFJPRklULCBMT1NTIE9GIFVTRSwgU0FWSU5HUyBPUiBSRVZFTlVFLCBPUiBUSEUgQ0xBSU1TIE9GCisgKiBUSElSRCBQQVJUSUVTLCBXSEVUSEVSIE9SIE5PVCBTSUxJQ09OIEdSQVBISUNTLCBJTkMuICBIQVMgQkVFTgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBMT1NTLCBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBQT1NTRVNTSU9OLCBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqIAorICogVVMgR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAKKyAqIFVzZSwgZHVwbGljYXRpb24sIG9yIGRpc2Nsb3N1cmUgYnkgdGhlIEdvdmVybm1lbnQgaXMgc3ViamVjdCB0bworICogcmVzdHJpY3Rpb25zIHNldCBmb3J0aCBpbiBGQVIgNTIuMjI3LjE5KGMpKDIpIG9yIHN1YnBhcmFncmFwaAorICogKGMpKDEpKGlpKSBvZiB0aGUgUmlnaHRzIGluIFRlY2huaWNhbCBEYXRhIGFuZCBDb21wdXRlciBTb2Z0d2FyZQorICogY2xhdXNlIGF0IERGQVJTIDI1Mi4yMjctNzAxMyBhbmQvb3IgaW4gc2ltaWxhciBvciBzdWNjZXNzb3IKKyAqIGNsYXVzZXMgaW4gdGhlIEZBUiBvciB0aGUgRE9EIG9yIE5BU0EgRkFSIFN1cHBsZW1lbnQuCisgKiBVbnB1Ymxpc2hlZC0tIHJpZ2h0cyByZXNlcnZlZCB1bmRlciB0aGUgY29weXJpZ2h0IGxhd3Mgb2YgdGhlCisgKiBVbml0ZWQgU3RhdGVzLiAgQ29udHJhY3Rvci9tYW51ZmFjdHVyZXIgaXMgU2lsaWNvbiBHcmFwaGljcywKKyAqIEluYy4sIDIwMTEgTi4gIFNob3JlbGluZSBCbHZkLiwgTW91bnRhaW4gVmlldywgQ0EgOTQwMzktNzMxMS4KKyAqCisgKiBPcGVuR0woVE0pIGlzIGEgdHJhZGVtYXJrIG9mIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TTUFJTF9HUEwgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NNQUlMX0dQTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmMzZmQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TTUFJTF9HUEwKQEAgLTAsMCArMSwxNjQgQEAKK1RoaXMgaXMgdGhlIERlYmlhbiBHTlUvTGludXggcGFja2FnZSBkZWJpYW51dGlscy4KKworSXQgaXMgYW4gb3JpZ2luYWwgRGViaWFuIHBhY2thZ2UuICBQcm9ncmFtcyBpbiBpdCB3ZXJlIG1haW50YWluZWQgYnkKK0d1eSBNYW9yIDxtYW9yQGRlYmlhbi5vcmc+LCBhbmQgYXJlIG5vdyBtYWludGFpbmVkIGJ5IENsaW50IEFkYW1zCis8c2NoaXpvQGRlYmlhbi5vcmc+LgorCitBbGwgaXRzIHByb2dyYW1zIGV4Y2VwdCByZWFkbGluaywgc2F2ZWxvZywgYW5kIHdoaWNoIG1heSBiZQorcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIFZlcnNpb24gMiBvciBsYXRlciwKK2ZvdW5kIG9uIERlYmlhbiBzeXN0ZW1zIGluIHRoZSBmaWxlIC91c3Ivc2hhcmUvY29tbW9uLWxpY2Vuc2VzL0dQTC4KKword2hpY2ggaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisKK3JlYWRsaW5rIGlzIENvcHlyaWdodCAoYykgMTk5NyBLZW5uZXRoIFN0YWlsZXksIGFuZCBtYXkgYWxzbyBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgY29weXJpZ2h0LgorCitzYXZlbG9nIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVybXM6IChUaGUgcmVzdCBvZgordGhpcyBmaWxlIGNvbnNpc3RzIG9mIHNhdmVsb2cncyBkaXN0cmlidXRpb24gdGVybXMuKQorCisjaWRlbnQJIkAoIylzbWFpbDpSRUxFQVNFLTNfMjpDT1BZSU5HLHYgMS4yIDE5OTYvMDYvMTQgMTg6NTk6MTAgd29vZHMgRXhwIgorCisJCSAgICAgU01BSUwgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgKENsYXJpZmllZCAxMSBGZWIgMTk4OCkKKworIENvcHlyaWdodCAoQykgIDE5ODggTGFuZG9uIEN1cnQgTm9sbCAmIFJvbmFsZCBTLiBLYXJyCisgQ29weXJpZ2h0IChDKSAgMTk5MiBSb25hbGQgUy4gS2FycgorIENvcHlsZWZ0IChHTlUpIDE5ODggTGFuZG9uIEN1cnQgTm9sbCAmIFJvbmFsZCBTLiBLYXJyCisKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4gIFlvdSBjYW4gYWxzbworIHVzZSB0aGlzIHdvcmRpbmcgdG8gbWFrZSB0aGUgdGVybXMgZm9yIG90aGVyIHByb2dyYW1zLgorCisgIFRoZSBsaWNlbnNlIGFncmVlbWVudHMgb2YgbW9zdCBzb2Z0d2FyZSBjb21wYW5pZXMga2VlcCB5b3UgYXQgdGhlCittZXJjeSBvZiB0aG9zZSBjb21wYW5pZXMuICBCeSBjb250cmFzdCwgb3VyIGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgaXMKK2ludGVuZGVkIHRvIGdpdmUgZXZlcnlvbmUgdGhlIHJpZ2h0IHRvIHNoYXJlIFNNQUlMLiAgVG8gbWFrZSBzdXJlIHRoYXQKK3lvdSBnZXQgdGhlIHJpZ2h0cyB3ZSB3YW50IHlvdSB0byBoYXZlLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zCit0aGF0IGZvcmJpZCBhbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyCit0aGUgcmlnaHRzLiAgSGVuY2UgdGhpcyBsaWNlbnNlIGFncmVlbWVudC4KKworICBTcGVjaWZpY2FsbHksIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHJpZ2h0IHRvIGdpdmUKK2F3YXkgY29waWVzIG9mIFNNQUlMLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGVsc2UgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgU01BSUwgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcKK2ZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIG1ha2Ugc3VyZSB0aGF0IGV2ZXJ5b25lIGhhcyBzdWNoIHJpZ2h0cywgd2UgaGF2ZSB0byBmb3JiaWQgeW91IHRvCitkZXByaXZlIGFueW9uZSBlbHNlIG9mIHRoZXNlIHJpZ2h0cy4gIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZQorY29waWVzIG9mIFNNQUlMLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgeW91CitoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCB0ZWxsIHRoZW0gdGhlaXIgcmlnaHRzLgorCisgIEFsc28sIGZvciBvdXIgb3duIHByb3RlY3Rpb24sIHdlIG11c3QgbWFrZSBjZXJ0YWluIHRoYXQgZXZlcnlvbmUKK2ZpbmRzIG91dCB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciBTTUFJTC4gIElmIFNNQUlMIGlzIG1vZGlmaWVkIGJ5Citzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2Ugd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdAordGhleSBoYXZlIGlzIG5vdCB3aGF0IHdlIGRpc3RyaWJ1dGVkLCBzbyB0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkCitieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiBvdXIgcmVwdXRhdGlvbi4KKworICBUaGVyZWZvcmUgd2UgKExhbmRvbiBDdXJ0IE5vbGwgYW5kIFJvbmFsZCBTLiBLYXJyKSBtYWtlIHRoZSBmb2xsb3dpbmcgCit0ZXJtcyB3aGljaCBzYXkgd2hhdCB5b3UgbXVzdCBkbyB0byBiZSBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUgb3IgY2hhbmdlIAorU01BSUwuCisKKworCQkJQ09QWUlORyBQT0xJQ0lFUworCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgU01BSUwgc291cmNlIGNvZGUKK2FzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAorYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhIHZhbGlkIGNvcHlyaWdodCBub3RpY2UgIkNvcHlyaWdodAorKEMpIDE5ODggTGFuZG9uIEN1cnQgTm9sbCAmIFJvbmFsZCBTLiBLYXJyIiAob3Igd2l0aCB3aGF0ZXZlciB5ZWFyIGlzCithcHByb3ByaWF0ZSk7IGtlZXAgaW50YWN0IHRoZSBub3RpY2VzIG9uIGFsbCBmaWxlcyB0aGF0IHJlZmVyIHRvIHRoaXMKK0xpY2Vuc2UgQWdyZWVtZW50IGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFueQorb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgU01BSUwgcHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCitBZ3JlZW1lbnQgYWxvbmcgd2l0aCB0aGUgcHJvZ3JhbS4gIFlvdSBtYXkgY2hhcmdlIGEgZGlzdHJpYnV0aW9uIGZlZQorZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIFNNQUlMIG9yIGFueSBwb3J0aW9uIG9mIGl0LAorYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIHVuZGVyIHRoZSB0ZXJtcyBvZgorUGFyYWdyYXBoIDEgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gdGhlIGZvbGxvd2luZzoKKworICAgIGEpIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nCisgICAgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2U7IGFuZAorCisgICAgYikgY2F1c2UgdGhlIHdob2xlIG9mIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwKKyAgICB0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgYSBkZXJpdmF0aXZlIG9mIFNNQUlMIG9yCisgICAgYW55IHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgb24gdGVybXMgaWRlbnRpY2FsIHRvIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UKKyAgICBBZ3JlZW1lbnQgKGV4Y2VwdCB0aGF0IHlvdSBtYXkgY2hvb3NlIHRvIGdyYW50IG1vcmUgZXh0ZW5zaXZlCisgICAgd2FycmFudHkgcHJvdGVjdGlvbiB0byBzb21lIG9yIGFsbCB0aGlyZCBwYXJ0aWVzLCBhdCB5b3VyIG9wdGlvbikuCisKKyAgICBjKSBZb3UgbWF5IGNoYXJnZSBhIGRpc3RyaWJ1dGlvbiBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YKKyAgICB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eQorICAgIHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCitNZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgdW5yZWxhdGVkIHByb2dyYW0gd2l0aCB0aGlzIHByb2dyYW0gKG9yIGl0cworZGVyaXZhdGl2ZSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcKK3RoZSBvdGhlciBwcm9ncmFtIHVuZGVyIHRoZSBzY29wZSBvZiB0aGVzZSB0ZXJtcy4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgU01BSUwgKG9yIGEgcG9ydGlvbiBvciBkZXJpdmF0aXZlIG9mIGl0LAordW5kZXIgUGFyYWdyYXBoIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1BhcmFncmFwaHMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgYWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgIFBhcmFncmFwaHMgMSBhbmQgMiBhYm92ZTsgb3IsCisKKyAgICBiKSBhY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSBmcmVlIChleGNlcHQgZm9yIGEgbm9taW5hbAorICAgIHNoaXBwaW5nIGNoYXJnZSkgYSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlCisgICAgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgICAgUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlOyBvciwKKworICAgIGMpIGFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gd2hlcmUgdGhlCisgICAgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uLWNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSBhbG9uZS4pCisKK0ZvciBhbiBleGVjdXRhYmxlIGZpbGUsIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yCithbGwgbW9kdWxlcyBpdCBjb250YWluczsgYnV0LCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpdCBuZWVkIG5vdCBpbmNsdWRlCitzb3VyY2UgY29kZSBmb3IgbW9kdWxlcyB3aGljaCBhcmUgc3RhbmRhcmQgbGlicmFyaWVzIHRoYXQgYWNjb21wYW55IHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBmaWxlIHJ1bnMuCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciBTTUFJTAorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBzdWJsaWNlbnNlLCBkaXN0cmlidXRlIG9yIHRyYW5zZmVyIFNNQUlMIGlzIHZvaWQgYW5kCit5b3VyIHJpZ2h0cyB0byB1c2UgdGhlIHByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIGFncmVlbWVudCBzaGFsbCBiZQorYXV0b21hdGljYWxseSB0ZXJtaW5hdGVkLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb21wdXRlcgorc29mdHdhcmUgcHJvZ3JhbXMgZnJvbSB5b3Ugd2l0aCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgbm90IGhhdmUKK3RoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiBTTUFJTCBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIExhbmRvbgorQ3VydCBOb2xsICYgUm9uYWxkIFMuIEthcnIgdmlhIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYXQgNTEKK0ZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBXZSBoYXZlIG5vdCB5ZXQKK3dvcmtlZCBvdXQgYSBzaW1wbGUgcnVsZSB0aGF0IGNhbiBiZSBzdGF0ZWQgaGVyZSwgYnV0IHdlIHdpbGwgb2Z0ZW4KK3Blcm1pdCB0aGlzLiAgV2Ugd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZQorZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcKK3RoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZS4KKworWW91ciBjb21tZW50cyBhbmQgc3VnZ2VzdGlvbnMgYWJvdXQgb3VyIGxpY2Vuc2luZyBwb2xpY2llcyBhbmQgb3VyCitzb2Z0d2FyZSBhcmUgd2VsY29tZSEgIFRoaXMgY29udHJhY3Qgd2FzIGJhc2VkIG9uIHRoZSBjb250cmFjdCBtYWRlIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgUGxlYXNlIGNvbnRhY3QgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorVVNBLCBvciBjYWxsICg2MTcpIDU0Mi01OTQyIGZvciBkZXRhaWxzIG9uIGNvcHlsZWZ0ZWQgbWF0ZXJpYWwgaW4KK2dlbmVyYWwuCisKKwkJICAgICAgIE5PIFdBUlJBTlRZCisKKyAgQkVDQVVTRSBTTUFJTCBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgV0UgUFJPVklERSBBQlNPTFVURUxZIE5PCitXQVJSQU5UWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBTVEFURSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HLCBMQU5ET04gQ1VSVCBOT0xMICYgUk9OQUxEIFMuIEtBUlIgQU5EL09SCitPVEhFUiBQQVJUSUVTIFBST1ZJREUgU01BSUwgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KK1RIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgU01BSUwgSVMgV0lUSAorWU9VLiAgU0hPVUxEIFNNQUlMIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwKK05FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBXSUxMIExBTkRPTiBDVVJUIE5PTEwgJgorUk9OQUxEIFMuIEtBUlIgQU5EL09SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQgUkVESVNUUklCVVRFCitTTUFJTCBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkKK0xPU1QgUFJPRklUUywgTE9TVCBNT05JRVMsIE9SIE9USEVSIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UKKyhJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVECitJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFCitQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpIFNNQUlMLCBFVkVOIElGIFlPVSBIQVZFCitCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUywgT1IgRk9SIEFOWSBDTEFJTSBCWQorQU5ZIE9USEVSIFBBUlRZLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TUEwtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NDhiMzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NQTC0xLjAKQEAgLTAsMCArMSw1MDcgQEAKKworU1VOIFBVQkxJQyBMSUNFTlNFIFZlcnNpb24gMS4wCisKKzEuIERlZmluaXRpb25zLgorCisxLjAuMS4gIkNvbW1lcmNpYWwgVXNlIiBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUKK0NvdmVyZWQgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKworMS4xLiAiQ29udHJpYnV0b3IiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0bwordGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwKK3ByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZQorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlCitjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlCitpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZiBhbmQgY29ycmVzcG9uZGluZyBkb2N1bWVudGF0aW9uIHJlbGVhc2VkCit3aXRoIHRoZSBzb3VyY2UgY29kZS4KKworMS40LiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIiBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkKK2FjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljCit0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuICJFeGVjdXRhYmxlIiBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UKK0NvZGUuCisKKzEuNi4gIkluaXRpYWwgRGV2ZWxvcGVyIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcwordGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdAorQS4KKworMS43LiAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IKK3BvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZS4KKworMS44LiAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS44LjEuICJMaWNlbnNhYmxlIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bQorZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yCitzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorCisxLjkuICJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUKK3N1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cworTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEKK01vZGlmaWNhdGlvbiBpczoKKworQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nCitPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yCitwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIuLi8gbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZQord2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzCitPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMC4xLiAiUGF0ZW50IENsYWltcyIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yCitoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kCithcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKworMS4xMS4gIlNvdXJjZSBDb2RlIi4uLyBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZQorZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzCithbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkCit0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlCitjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvcgorYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzCitjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sCitwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMKK3dpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworMS4xMi4gIllvdSIgKG9yICJZb3VyIikgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eQorZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzCitMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4KK0ZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMKK2NvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YKK3RoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiLi4vIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwKK3RvCitjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3QKK29yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUKK291dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gU291cmNlIENvZGUgTGljZW5zZS4KKworMi4xIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLAorbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eQorY2xhaW1zOgorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IKK3RyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LAorZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IKK3BvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhCitMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mCitPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3IKK3NhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMKK3RoZXJlb2YpLgorCisoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMShhKSBhbmQgKGIpIGFyZSBlZmZlY3RpdmUKK29uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIENvZGUgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyhkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzCitncmFudGVkOiAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikKK3NlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IG9yIDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZAorYnk6CisKK2kpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUKK09yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLgorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IKK2hlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50CitvcgordHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LAorZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkCitieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZAorYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIGFuZC9vciBhcyBwYXJ0IG9mIGEKK0xhcmdlciBXb3JrOyBhbmQKKworYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgb2YKK01vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4KK2NvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2gKK2NvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3IKK290aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IKK3BvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieQordGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoCitjb21iaW5hdGlvbikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlCitvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZiB0aGUgQ292ZXJlZAorQ29kZS4KKworKGQpIG5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMihiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMKK2dyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlCitDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IKK2luZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mIENvbnRyaWJ1dG9yCitWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvcgorVmVyc2lvbikgb3Igb3RoZXIgZGV2aWNlczsgb3IgNCkgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkKK0NvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorQ29udHJpYnV0b3IuCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZQorZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUKK2Rpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uCitvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEKK2NvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91CitkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZQordmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUKK2FuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbgorU2VjdGlvbiAzLjUuCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZQorbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCitlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZAorRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuCitFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMKK0Rpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikKK21vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4CisoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24KK2hhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IKK2Vuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUKK0VsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEKK2ZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZAordGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdAordGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsCitDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuCitFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUKK29yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycy4KKworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KKworSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5YHMKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cworZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yCittdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZAorIi4uL0xFR0FMYGAgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4KK3N1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYKK0NvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlCithdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseQorbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlCit0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZQorbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobworcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisKKyhiKSBDb250cmlidXRvciBBUElzLgorCitJZiBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZworaW50ZXJmYWNlICgiQVBJIi4uLykgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzCit3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0CithbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworKGMpIFJlcHJlc2VudGF0aW9ucy4KKworQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24KKzMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMKK2FyZSBDb250cmlidXRvcmBzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMKK3N1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcworTGljZW5zZQorCisuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4KKworWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlCitDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UKK0NvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEKK2xvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5Cit0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykKK1lvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluCitFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbgorZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIG9yIG93bmVyc2hpcAorcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0bworY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkKK29ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UKK21heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwKK0RldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuCithbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzCitvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwKK3N1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZQorcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwKK2FuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YKK3RoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCitpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUKK29ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZAoraW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvcgorY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZQorQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkCitDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkKK2NvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4KK2NvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUKK0V4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcworcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcworTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudAorbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyCitmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlCitJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkKK3RoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoCit0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNy4gTGFyZ2VyIFdvcmtzLgorCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlcgorY29kZQorbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlcgorV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZQorcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvCitzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGgKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpCitkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uCittdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdAorYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUKK2V4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlCitzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8KK3VuZGVyc3RhbmQgaXQuCisKKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzCithdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorCis2LjEuIE5ldyBWZXJzaW9ucy4KKworU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiAoIlN1biIpIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEKK2Rpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCisKK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZgordGhlCitMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQKK3ZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcworb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgU3VuLiBObyBvbmUKK290aGVyIHRoYW4gU3VuIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQKK0NvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4KKworSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91CittYXkKK29ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUKK2dvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIFlvdSBtdXN0OiAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0Cit0aGUgcGhyYXNlcyAiU3VuLCIgIlN1biBQdWJsaWMgTGljZW5zZSwiIG9yICJTUEwiLi4vIG9yIGFueSBjb25mdXNpbmdseQorc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91cgorbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyCit0aGF0IFlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUKK1N1biBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLAorT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEKK3NoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMKK0xpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICIuLi9BUyBJU2BgIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YKK0RFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4KK1RIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERQorSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwKK1lPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUKK0NPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIKK09GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GCitBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTCitESVNDTEFJTUVSLgorCis4LiBURVJNSU5BVElPTi4KKworOC4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUKK2F1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUKK3N1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbAorc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbAorc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpcgorbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UKK3NoYWxsIHN1cnZpdmUuCisKKzguMi4gSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudAorY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyCitvciBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tCitZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSBhbGxlZ2luZwordGhhdDoKKworKGEpIHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkKK2luZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2gKK1BhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2UKK3NoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksCit1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpCithZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlCityb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2gKK1BhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8KK3RoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMKK29mIG5vdGljZSwgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdAorbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbQoraXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlcgorU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YKK3RoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuCisKKyhiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudGBzCitDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuCithbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpCithbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwKK3NvbGQsIGRpc3RyaWJ1dGVkLCBvciBoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKK1BhcnRpY2lwYW50LgorCis4LjMuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQKK2FsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IKK2luZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcworYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcworZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4KK2ludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yCitsaWNlbnNlLgorCis4LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLAorYWxsCitlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykKK3doaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIKK3ByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTAorREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsCitPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SCitBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkKK0NIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwKK1dPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSCitDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOCitJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YKK0xJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkKK1JFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcKK1BST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFCitFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08KK1RISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KKworVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbgorNDgKK0MuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSIKK2FuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCIuLi8gYXMgc3VjaCB0ZXJtcyBhcmUKK3VzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4KKzEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwKK1UuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cworc2V0IGZvcnRoIGhlcmVpbi4KKworMTEuIE1JU0NFTExBTkVPVVMuCisKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0CittYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlCit1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQKK25lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkKK0NhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZgorYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLgorV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsCitvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4gdGhlIFVuaXRlZAorU3RhdGVzIG9mIEFtZXJpY2EsIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZQorc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4KK0Rpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LAorQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQKK2V4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24KK0NvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuCitBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdAorc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMKK0xpY2Vuc2UuCisKKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorCitBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzCityZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksCitvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0bword29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoCityZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yCitzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKworMTMuIE1VTFRJUExFLUxJQ0VOU0VEIENPREUuCisKK0luaXRpYWwgRGV2ZWxvcGVyIG1heSBkZXNpZ25hdGUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBhcworP011bHRpcGxlLUxpY2Vuc2VkPy4gP011bHRpcGxlLUxpY2Vuc2VkPyBtZWFucyB0aGF0IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgcGVybWl0cyB5b3UgdG8gdXRpbGl6ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyCitZb3VyIGNob2ljZSBvZiB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkIGJ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4KKworRXhoaWJpdCBBIC1TdW4gUHVibGljIExpY2Vuc2UgTm90aWNlLgorCitUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBTdW4gUHVibGljIExpY2Vuc2UKKworVmVyc2lvbiAxLjAgKHRoZSBMaWNlbnNlKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KKworY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgYXZhaWxhYmxlIGF0CisKK2h0dHA6Ly93d3cuc3VuLmNvbS8KKworVGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX18uIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUKKworT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fXy4gUG9ydGlvbnMgY3JlYXRlZCBieSBfX19fX18gYXJlIENvcHlyaWdodAorCisoQylfX19fX19fX18uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK0NvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KKworQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKKworb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSA/W19fX10gTGljZW5zZT8pLCBpbiB3aGljaCBjYXNlIHRoZQorCitwcm92aXNpb25zIG9mIFtfX19fX19dIExpY2Vuc2UgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4KKworSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUKKwordGVybXMgb2YgdGhlIFtfX19fXSBMaWNlbnNlIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisKK3ZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBTUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkgZGVsZXRpbmcKKwordGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kIG90aGVyCisKK3Byb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIFtfX19dIExpY2Vuc2UuIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZQorCitwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKworZWl0aGVyIHRoZSBTUEwgb3IgdGhlIFtfX19dIExpY2Vuc2UuCitbTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mCisKK3RoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IHNob3VsZAorCit1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlCisKK09yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU2ltcGxlLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU2ltcGxlLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjgzNTdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TaW1wbGUtMi4wCkBAIC0wLDAgKzEsMjcgQEAKKworU2ltcGxlIFB1YmxpYyBMaWNlbnNlIChTaW1QTCkKKworUHJlYW1ibGUKK1RoaXMgU2ltcGxlIFB1YmxpYyBMaWNlbnNlIDIuMCAoU2ltUEwgMi4wIGZvciBzaG9ydCkgaXMgYSBwbGFpbiBsYW5ndWFnZSBpbXBsZW1lbnRhdGlvbiBvZiBHUEwgMi4wLiAgVGhlIHdvcmRzIGFyZSBkaWZmZXJlbnQsIGJ1dCB0aGUgZ29hbCBpcyB0aGUgc2FtZSAtIHRvIGd1YXJhbnRlZSBmb3IgYWxsIHVzZXJzIHRoZSBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2Ugc29mdHdhcmUuICBJZiBhbnlvbmUgd29uZGVycyBhYm91dCB0aGUgbWVhbmluZyBvZiB0aGUgU2ltUEwsIHRoZXkgc2hvdWxkIGludGVycHJldCBpdCBhcyBjb25zaXN0ZW50IHdpdGggR1BMIDIuMC4KK1NpbXBsZSBQdWJsaWMgTGljZW5zZSAoU2ltUEwpIDIuMAorVGhlIFNpbVBMIGFwcGxpZXMgdG8gdGhlIHNvZnR3YXJlYHMgc291cmNlIGFuZCBvYmplY3QgY29kZSBhbmQgY29tZXMgd2l0aCBhbnkgcmlnaHRzIHRoYXQgSSBoYXZlIGluIGl0IChvdGhlciB0aGFuIHRyYWRlbWFya3MpLiBZb3UgYWdyZWUgdG8gdGhlIFNpbVBMIGJ5IGNvcHlpbmcsIGRpc3RyaWJ1dGluZywgb3IgbWFraW5nIGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBzb2Z0d2FyZS4KKworWW91IGdldCB0aGUgcm95YWx0eSBmcmVlIHJpZ2h0IHRvOgorVXNlIHRoZSBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2U7CitNYWtlIGRlcml2YXRpdmUgd29ya3Mgb2YgaXQgKHRoaXMgaXMgY2FsbGVkIGEgIkRlcml2ZWQgV29yayIpOworQ29weSBhbmQgZGlzdHJpYnV0ZSBpdCBhbmQgYW55IERlcml2ZWQgV29yay4KK0lmIHlvdSBkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBvciBhIERlcml2ZWQgV29yaywgeW91IG11c3QgZ2l2ZSBiYWNrIHRvIHRoZSBjb21tdW5pdHkgYnk6CitQcm9taW5lbnRseSBub3RpbmcgdGhlIGRhdGUgb2YgYW55IGNoYW5nZXMgeW91IG1ha2U7CitMZWF2aW5nIG90aGVyIHBlb3BsZWBzIGNvcHlyaWdodCBub3RpY2VzLCB3YXJyYW50eSBkaXNjbGFpbWVycywgYW5kIGxpY2Vuc2UgdGVybXMgIGluIHBsYWNlOworUHJvdmlkaW5nIHRoZSBzb3VyY2UgY29kZSwgYnVpbGQgc2NyaXB0cywgaW5zdGFsbGF0aW9uIHNjcmlwdHMsIGFuZCBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgaW4gYSBmb3JtIHRoYXQgaXMgZWFzeSB0byBnZXQgYW5kIGJlc3QgdG8gbW9kaWZ5OworTGljZW5zaW5nIGl0IHRvIGV2ZXJ5b25lIHVuZGVyIFNpbVBMLCBvciBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdGVybXMgKHN1Y2ggYXMgR1BMIDIuMCksIHdpdGhvdXQgYWRkaW5nIGZ1cnRoZXIgcmVzdHJpY3Rpb25zIHRvIHRoZSByaWdodHMgcHJvdmlkZWQ7CitDb25zcGljdW91c2x5IGFubm91bmNpbmcgdGhhdCBpdCBpcyBhdmFpbGFibGUgdW5kZXIgdGhhdCBsaWNlbnNlLgorVGhlcmUgYXJlIHNvbWUgdGhpbmdzIHRoYXQgeW91IG11c3Qgc2hvdWxkZXI6CitZb3UgZ2V0IE5PIFdBUlJBTlRJRVMuIE5vbmUgb2YgYW55IGtpbmQ7CitJZiB0aGUgc29mdHdhcmUgZGFtYWdlcyB5b3UgaW4gYW55IHdheSwgeW91IG1heSBvbmx5IHJlY292ZXIgZGlyZWN0IGRhbWFnZXMgdXAgdG8gdGhlIGFtb3VudCB5b3UgcGFpZCBmb3IgaXQgKHRoYXQgaXMgemVybyBpZiB5b3UgZGlkIG5vdCBwYXkgYW55dGhpbmcpLiBZb3UgbWF5IG5vdCByZWNvdmVyIGFueSBvdGhlciBkYW1hZ2VzLCBpbmNsdWRpbmcgdGhvc2UgY2FsbGVkICJjb25zZXF1ZW50aWFsIGRhbWFnZXMuIiAoVGhlIHN0YXRlIG9yIGNvdW50cnkgd2hlcmUgeW91IGxpdmUgbWF5IG5vdCBhbGxvdyB5b3UgdG8gbGltaXQgeW91ciBsaWFiaWxpdHkgaW4gdGhpcyB3YXksIHNvIHRoaXMgbWF5IG5vdCBhcHBseSB0byB5b3UpOworVGhlIFNpbVBMIGNvbnRpbnVlcyBwZXJwZXR1YWxseSwgZXhjZXB0IHRoYXQgeW91ciBsaWNlbnNlIHJpZ2h0cyBlbmQgYXV0b21hdGljYWxseSBpZjoKK1lvdSBkbyBub3QgYWJpZGUgYnkgdGhlICJnaXZlIGJhY2sgdG8gdGhlIGNvbW11bml0eSIgdGVybXMgKHlvdXIgbGljZW5zZWVzIGdldCB0byBrZWVwIHRoZWlyIHJpZ2h0cyBpZiB0aGV5IGFiaWRlKTsKK0FueW9uZSBwcmV2ZW50cyB5b3UgZnJvbSBkaXN0cmlidXRpbmcgdGhlIHNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgU2ltUEwuCitMaWNlbnNlIGZvciB0aGUgTGljZW5zZQorWW91IG1heSBkbyBhbnl0aGluZyB0aGF0IHlvdSB3YW50IHdpdGggdGhlIFNpbVBMIHRleHQ7IGl0YHMgYSBsaWNlbnNlIGZvcm0gdG8gdXNlIGluIGFueSB3YXkgdGhhdCB5b3UgZmluZCBoZWxwZnVsLiAgVG8gYXZvaWQgY29uZnVzaW9uLCBob3dldmVyLCBpZiB5b3UgY2hhbmdlIHRoZSB0ZXJtcyBpbiBhbnkgd2F5IHRoZW4geW91IG1heSBub3QgY2FsbCB5b3VyIGxpY2Vuc2UgdGhlIFNpbXBsZSBQdWJsaWMgTGljZW5zZSBvciB0aGUgU2ltUEwgKGJ1dCBmZWVsIGZyZWUgdG8gYWNrbm93bGVkZ2UgdGhhdCB5b3VyIGxpY2Vuc2UgaXMgImJhc2VkIG9uIHRoZSBTaW1wbGUgUHVibGljIExpY2Vuc2UiKS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TbGVlcHljYXQgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NsZWVweWNhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmU5ZDg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TbGVlcHljYXQKQEAgLTAsMCArMSw5MCBAQAorCitUaGUgU2xlZXB5Y2F0IExpY2Vuc2UKK0NvcHlyaWdodCAoYykgMTk5MC0xOTk5CitTbGVlcHljYXQgU29mdHdhcmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK2RvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitSZWRpc3RyaWJ1dGlvbnMgaW4gYW55IGZvcm0gbXVzdCBiZSBhY2NvbXBhbmllZCBieSBpbmZvcm1hdGlvbiBvbgoraG93IHRvIG9idGFpbiBjb21wbGV0ZSBzb3VyY2UgY29kZSBmb3IgdGhlIERCIHNvZnR3YXJlIGFuZCBhbnkKK2FjY29tcGFueWluZyBzb2Z0d2FyZSB0aGF0IHVzZXMgdGhlIERCIHNvZnR3YXJlLiBUaGUgc291cmNlIGNvZGUKK211c3QgZWl0aGVyIGJlIGluY2x1ZGVkIGluIHRoZSBkaXN0cmlidXRpb24gb3IgYmUgYXZhaWxhYmxlIGZvciBubworbW9yZSB0aGFuIHRoZSBjb3N0IG9mIGRpc3RyaWJ1dGlvbiBwbHVzIGEgbm9taW5hbCBmZWUsIGFuZCBtdXN0IGJlCitmcmVlbHkgcmVkaXN0cmlidXRhYmxlIHVuZGVyIHJlYXNvbmFibGUgY29uZGl0aW9ucy4gRm9yIGFuCitleGVjdXRhYmxlIGZpbGUsIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsCittb2R1bGVzIGl0IGNvbnRhaW5zLiBJdCBkb2VzIG5vdCBpbmNsdWRlIHNvdXJjZSBjb2RlIGZvciBtb2R1bGVzIG9yCitmaWxlcyB0aGF0IHR5cGljYWxseSBhY2NvbXBhbnkgdGhlIG1ham9yIGNvbXBvbmVudHMgb2YgdGhlIG9wZXJhdGluZworc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIGZpbGUgcnVucy4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgU0xFRVBZQ0FUIFNPRlRXQVJFIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1MKK09SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitOT04tSU5GUklOR0VNRU5ULCBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgU0xFRVBZQ0FUIFNPRlRXQVJFCitCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzLCAxOTk0LCAxOTk1CitUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKK21heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQord2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJU2BgIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKK0NvcHlyaWdodCAoYykgMTk5NSwgMTk5NgorVGhlIFByZXNpZGVudCBhbmQgRmVsbG93cyBvZiBIYXJ2YXJkIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK2RvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCit3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgSEFSVkFSRCBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTYGAgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgSEFSVkFSRCBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TdWdhckNSTS0xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TdWdhckNSTS0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYmI0ZTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1N1Z2FyQ1JNLTEKQEAgLTAsMCArMSw0MzEgQEAKKworU1VHQVJDUk0gUFVCTElDIExJQ0VOU0UKKworVmVyc2lvbiAxLjEuMworCitUaGUgU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAoIlNQTCIpIGNvbnNpc3RzIG9mIHRoZSBNb3ppbGxhCitQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwgbW9kaWZpZWQgdG8gYmUgc3BlY2lmaWMgdG8gU3VnYXJDUk0sIHdpdGggdGhlCitBZGRpdGlvbmFsIFRlcm1zIGluIEV4aGliaXQgQi4gVGhlIG9yaWdpbmFsIE1vemlsbGEgUHVibGljIExpY2Vuc2UgMS4xIGNhbiBiZQorZm91bmQgYXQ6IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbAorCisKKzEuIERlZmluaXRpb25zLgorCisxLjAuMS4gIkNvbW1lcmNpYWwgVXNlIiBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUKK0NvdmVyZWQgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKzEuMS4gJydDb250cmlidXRvcicnIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUKK2NyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gJydDb250cmlidXRvciBWZXJzaW9uJycgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvcgorTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKK3BhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gJydDb3ZlcmVkIENvZGUnJyBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZQorY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcKK3BvcnRpb25zIHRoZXJlb2YuCisKKzEuNC4gJydFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20nJyBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQKK2luIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisKKzEuNS4gJydFeGVjdXRhYmxlJycgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisKKzEuNi4gJydJbml0aWFsIERldmVsb3BlcicnIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisKKzEuNy4gJydMYXJnZXIgV29yaycnIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMKK3RoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjguICcnTGljZW5zZScnIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOC4xLiAiTGljZW5zYWJsZSIgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0KK2V4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkKK2FjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworMS45LiAnJ01vZGlmaWNhdGlvbnMnJyBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yCitzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuCitDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorCitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwKK0NvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzCitNb2RpZmljYXRpb25zLgorMS4xMC4gJydPcmlnaW5hbCBDb2RlJycgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcworZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZAord2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkCitDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKzEuMTAuMS4gIlBhdGVudCBDbGFpbXMiIG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvcgoraGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZAorYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisKKzEuMTEuICcnU291cmNlIENvZGUnJyBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nCittb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKK2ludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQKK2luc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdAorZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUKK0NvbnRyaWJ1dG9yJ3MgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLAorcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseQorYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKzEuMTIuICJZb3UnJyAob3IgIllvdXIiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5CitleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZQorb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwKK2VudGl0aWVzLCAiWW91JycgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IKK2lzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorImNvbnRyb2wnJyBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24KK29yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikKK293bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yCitiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gU291cmNlIENvZGUgTGljZW5zZS4KKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tCitleGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykKK0xpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwKK3N1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3IKK3dpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikgdW5kZXIgUGF0ZW50cyBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YgT3JpZ2luYWwKK0NvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3IKK290aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKworKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZQorZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlLgorKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yCitjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbAorQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbAorQ29kZSBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IKK2RldmljZXMuCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQorZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlCisKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspCitMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLAorc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yCitwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcworQ292ZXJlZCBDb2RlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mCitNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGgKK2l0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLAorb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUKK2J5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mCitNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvcgorcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZQorZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IKK2FueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgMikgc2VwYXJhdGUKK2Zyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkKK21vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMKK21hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMgcGFydCBvZiB0aGUgQ29udHJpYnV0b3IKK1ZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZQoraW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCisKKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieQordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZQorQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdQorbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UKK2Rpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24KK3RoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUKK3JlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50CitvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlCithdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUKK3NhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbgorTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZgorbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvcgorYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdAorbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbgoraGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZwordGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljCitEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZQorZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZgorYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzCitkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwKK0RldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZQorQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24KK2luIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHkncyBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvcgordW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZQorQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCcnIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eQorbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvCitjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZQorYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZQorTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlCitvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKQorcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldwora25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorKGIpIENvbnRyaWJ1dG9yIEFQSXMuCitJZiBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kCitDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8KK2ltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwKK2ZpbGUuCisoYykgUmVwcmVzZW50YXRpb25zLgorQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24gMy40KGEpCithYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJ3MKK29yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlCityaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYKK2l0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvCitpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhCityZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYKK1lvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvcgordG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4KK2FueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyBvcgorb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8KK2NoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZQorb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duCitiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0CittYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yCitsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5Cit0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwKK2luZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mCitTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhCitub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdQoraGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseQoraW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvcgorY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkCitDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgb3Igb3duZXJzaGlwCityaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbQordGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8KK2xpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUKK3JpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uCit1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcword2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjcuIExhcmdlciBXb3Jrcy4KK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90Citnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhCitzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMKK0xpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCit3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsCitvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZQorbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5CithZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4KK1NlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLgorRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdAorYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvCit1bmRlcnN0YW5kIGl0LgorCis1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlCitub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCis2LjEuIE5ldyBWZXJzaW9ucy4KK1N1Z2FyQ1JNIEluYy4gKCcnU3VnYXJDUk0nJykgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZQorTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uCitudW1iZXIuCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsCitZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvCitjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mCit0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgU3VnYXJDUk0uIE5vIG9uZSBvdGhlciB0aGFuIFN1Z2FyQ1JNIGhhcyB0aGUgcmlnaHQgdG8KK21vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4KK0lmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbworaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcworTGljZW5zZSksIFlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgJydTdWdhckNSTScnLAorJydTUEwnJyBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdAordG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0CitjbGVhciB0aGF0IFlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUKK1N1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsCitPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YKK3RoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBMaWNlbnNlLikKKworNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTJycgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVAorTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsCitGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFCitRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQKK0NPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZCitPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IKK0NPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTCitMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUworRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04uCis4LjEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5CitpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAKK2RheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2gKK2FyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucword2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcworTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorOC4yLiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltCisoZXhjbHVkaW5nIGRlY2xhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyIG9yIGEKK0NvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2gKK2FjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSBhbGxlZ2luZyB0aGF0OgorCisoYSkgc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55CitwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIKK1NlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tCitQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwgdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2YKK25vdGljZSBZb3UgZWl0aGVyOiAoaSkgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUKK3JlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoCitQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZQorQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuIElmIHdpdGhpbiA2MCBkYXlzIG9mIG5vdGljZSwgYQorcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4KK3dyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cworZ3JhbnRlZCBieSBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgYXV0b21hdGljYWxseQordGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuCisKKyhiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudCdzCitDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueQorcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZCAyLjIoYikgYXJlCityZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwgc29sZCwgZGlzdHJpYnV0ZWQsIG9yCitoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgUGFydGljaXBhbnQuCisKKzguMy4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZwordGhhdCBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcworYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkKK3ByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZQordmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yCitzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudAorb3IgbGljZW5zZS4KKworOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyCitsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuCit2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwKK3N1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkKK09USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZCitPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsCitPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwKK0RBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sCitPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwKK0hBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YKK0xJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HCitGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0gKK0xJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GCitJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVAorQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KK1RoZSBDb3ZlcmVkIENvZGUgaXMgYSAnJ2NvbW1lcmNpYWwgaXRlbSwnJyBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4KKzIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICcnY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZScnIGFuZAorJydjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sJycgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OAorQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4KKzIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycworYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMS4gTUlTQ0VMTEFORU9VUy4KK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlcgoraGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2gKK3Byb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQKK2VuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucworKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZworaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lCitwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbgordGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlCitzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZgorQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZworcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQKK3JlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucworQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5CitleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3QKK3NoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZQorZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uCitvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZAorQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcKK2hlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKworMTMuIE1VTFRJUExFLUxJQ0VOU0VEIENPREUuCitJbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMKKyJNdWx0aXBsZS1MaWNlbnNlZCIuICJNdWx0aXBsZS1MaWNlbnNlZCIgbWVhbnMgdGhhdCB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIHBlcm1pdHMgeW91IHRvIHV0aWxpemUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSB1bmRlcgorWW91ciBjaG9pY2Ugb2YgdGhlIFNQTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkIGJ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4KK1N1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIDEuMS4zIC0gRXhoaWJpdCBBCisKK1RoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKzEuMS4zCisoIkxpY2Vuc2UiKTsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQorTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuc3VnYXJjcm0uY29tL1NQTAorU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorYmFzaXMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yCit0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGlzOiBTdWdhckNSTSBPcGVuIFNvdXJjZQorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgU3VnYXJDUk0sIEluYy4KK1BvcnRpb25zIGNyZWF0ZWQgYnkgU3VnYXJDUk0gYXJlIENvcHlyaWdodCAoQykgMjAwNCBTdWdhckNSTSwgSW5jLjsKK0FsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCitbTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mIHRoZQorbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUuIFlvdSBzaG91bGQgdXNlIHRoZSB0ZXh0CitvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZQorZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCisKK1N1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIDEuMS4zIC0gRXhoaWJpdCBCCisKK0FkZGl0aW9uYWwgVGVybXMgYXBwbGljYWJsZSB0byB0aGUgU3VnYXJDUk0gUHVibGljIExpY2Vuc2UuCisKK0kuIEVmZmVjdC4KK1RoZXNlIGFkZGl0aW9uYWwgdGVybXMgZGVzY3JpYmVkIGluIHRoaXMgU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgJm5kYXNoOworQWRkaXRpb25hbCBUZXJtcyBzaGFsbCBhcHBseSB0byB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworSUkuIFN1Z2FyQ1JNIGFuZCBsb2dvLgorVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzCisiU3VnYXJDUk0iIGFuZCB0aGUgIlN1Z2FyQ1JNIiBsb2dvcyBldmVuIGlmIHN1Y2ggbWFya3MgYXJlCitpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zLgorCitIb3dldmVyLCBpbiBhZGRpdGlvbiB0byB0aGUgb3RoZXIgbm90aWNlIG9ibGlnYXRpb25zLCBhbGwgY29waWVzIG9mIHRoZSBDb3ZlcmVkCitDb2RlIGluIEV4ZWN1dGFibGUgYW5kIFNvdXJjZSBDb2RlIGZvcm0gZGlzdHJpYnV0ZWQgbXVzdCwgYXMgYSBmb3JtIG9mCithdHRyaWJ1dGlvbiBvZiB0aGUgb3JpZ2luYWwgYXV0aG9yLCBpbmNsdWRlIG9uIGVhY2ggdXNlciBpbnRlcmZhY2Ugc2NyZWVuIChpKQordGhlICJQb3dlcmVkIGJ5IFN1Z2FyQ1JNIiBsb2dvIGFuZCAoaWkpIHRoZSBjb3B5cmlnaHQgbm90aWNlIGluIHRoZQorc2FtZSBmb3JtIGFzIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IFN1Z2FyQ1JNLAorSW5jLiBhdCB0aGUgdGltZSBvZiBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3B5LiBJbiBhZGRpdGlvbiwgdGhlICJQb3dlcmVkCitieSBTdWdhckNSTSIgbG9nbyBtdXN0IGJlIHZpc2libGUgdG8gYWxsIHVzZXJzIGFuZCBiZSBsb2NhdGVkIGF0IHRoZSB2ZXJ5Citib3R0b20gY2VudGVyIG9mIGVhY2ggdXNlciBpbnRlcmZhY2Ugc2NyZWVuLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB0aGUKK2RpbWVuc2lvbnMgb2YgdGhlICJQb3dlcmVkIEJ5IFN1Z2FyQ1JNIiBsb2dvIG11c3QgYmUgYXQgbGVhc3QgMTA2IHgKKzIzIHBpeGVscy4gV2hlbiB1c2VycyBjbGljayBvbiB0aGUgIlBvd2VyZWQgYnkgU3VnYXJDUk0iIGxvZ28gaXQgbXVzdAorZGlyZWN0IHRoZW0gYmFjayB0byBodHRwOi8vd3d3LnN1Z2FyZm9yZ2Uub3JnLiBJbiBhZGRpdGlvbiwgdGhlIGNvcHlyaWdodAorbm90aWNlIG11c3QgcmVtYWluIHZpc2libGUgdG8gYWxsIHVzZXJzIGF0IGFsbCB0aW1lcyBhdCB0aGUgYm90dG9tIG9mIHRoZSB1c2VyCitpbnRlcmZhY2Ugc2NyZWVuLiBXaGVuIHVzZXJzIGNsaWNrIG9uIHRoZSBjb3B5cmlnaHQgbm90aWNlLCBpdCBtdXN0IGRpcmVjdCB0aGVtCitiYWNrIHRvIGh0dHA6Ly93d3cuc3VnYXJjcm0uY29tCisKKworCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1N1Z2FyQ1JNLTEuMS4zIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TdWdhckNSTS0xLjEuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDk2ODFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TdWdhckNSTS0xLjEuMwpAQCAtMCwwICsxLDE2MCBAQAorCitTVUdBUkNSTSBQVUJMSUMgTElDRU5TRQorCitWZXJzaW9uIDEuMS4zCisKK1RoZSBTdWdhckNSTSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uICgiU1BMIikgY29uc2lzdHMgb2YgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEsIG1vZGlmaWVkIHRvIGJlIHNwZWNpZmljIHRvIFN1Z2FyQ1JNLCB3aXRoIHRoZSBBZGRpdGlvbmFsIFRlcm1zIGluIEV4aGliaXQgQi4gVGhlIG9yaWdpbmFsIE1vemlsbGEgUHVibGljIExpY2Vuc2UgMS4xIGNhbiBiZSBmb3VuZCBhdDogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sCisKKworMS4gRGVmaW5pdGlvbnMuCisKKzEuMC4xLiAiQ29tbWVyY2lhbCBVc2UiIG1lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZSBDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuCisxLjEuIGBgQ29udHJpYnV0b3JgYCBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gYGBDb250cmlidXRvciBWZXJzaW9uYGAgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuIGBgQ292ZXJlZCBDb2RlYGAgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40LiBgYEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbWBgIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuIGBgRXhlY3V0YWJsZWBgIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorCisxLjYuIGBgSW5pdGlhbCBEZXZlbG9wZXJgYCBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisKKzEuNy4gYGBMYXJnZXIgV29ya2BgIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuOC4gYGBMaWNlbnNlYGAgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS44LjEuICJMaWNlbnNhYmxlIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworMS45LiBgYE1vZGlmaWNhdGlvbnNgYCBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKKworQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIAorMS4xMC4gYGBPcmlnaW5hbCBDb2RlYGAgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKzEuMTAuMS4gIlBhdGVudCBDbGFpbXMiIG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorCisxLjExLiBgYFNvdXJjZSBDb2RlYGAgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3JgcyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKzEuMTIuICJZb3VgYCAob3IgIllvdXIiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91YGAgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sYGAgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4gCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikgdW5kZXIgUGF0ZW50cyBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YgT3JpZ2luYWwgQ29kZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLiAKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuIAorU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLgorCisoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIENvZGUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCisKKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuIAorVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4gCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLiAKK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLiAKK0lmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eWBzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMYGAgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKyhiKSBDb250cmlidXRvciBBUElzLiAKK0lmIENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4gCisoYykgUmVwcmVzZW50YXRpb25zLgorQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24gMy40KGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3JgcyBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuIAorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgb3Igb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4gCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjcuIExhcmdlciBXb3Jrcy4gCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCisKKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorNi4xLiBOZXcgVmVyc2lvbnMuIAorU3VnYXJDUk0gSW5jLiAoYGBTdWdhckNSTWBgKSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuIAorT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFN1Z2FyQ1JNLiBObyBvbmUgb3RoZXIgdGhhbiBTdWdhckNSTSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4gCitJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyBgYFN1Z2FyQ1JNYGAsIGBgU1BMYGAgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91ciBsaWNlbnNlIChleGNlcHQgdG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBTdWdhckNSTSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVNgYCBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis4LiBURVJNSU5BVElPTi4KKzguMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorOC4yLiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSBhbGxlZ2luZyB0aGF0OgorCisoYSkgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwgdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKSBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorCisoYikgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlLCBvdGhlciB0aGFuIHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikgYW5kIDIuMihiKSBhcmUgcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsIHNvbGQsIGRpc3RyaWJ1dGVkLCBvciBoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgUGFydGljaXBhbnQuCisKKzguMy4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS4KKworOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KK1RoZSBDb3ZlcmVkIENvZGUgaXMgYSBgYGNvbW1lcmNpYWwgaXRlbSxgYCBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgYGBjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlYGAgYW5kIGBgY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLGBgIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTEuIE1JU0NFTExBTkVPVVMuCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCitBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCisKKzEzLiBNVUxUSVBMRS1MSUNFTlNFRCBDT0RFLgorSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzICYjODIyMDtNdWx0aXBsZS1MaWNlbnNlZCYjODIyMTsuICYjODIyMDtNdWx0aXBsZS1MaWNlbnNlZCYjODIyMTsgbWVhbnMgdGhhdCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgcGVybWl0cyB5b3UgdG8gdXRpbGl6ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyIFlvdXIgY2hvaWNlIG9mIHRoZSBTUEwgb3IgdGhlIGFsdGVybmF0aXZlIGxpY2Vuc2VzLCBpZiBhbnksIHNwZWNpZmllZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4KK1N1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIDEuMS4zIC0gRXhoaWJpdCBBCisKK1RoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLjMKKygiTGljZW5zZSIpOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIAorTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuc3VnYXJjcm0uY29tL1NQTAorU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IKK3RoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXM6IFN1Z2FyQ1JNIE9wZW4gU291cmNlCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBTdWdhckNSTSwgSW5jLgorUG9ydGlvbnMgY3JlYXRlZCBieSBTdWdhckNSTSBhcmUgQ29weXJpZ2h0IChDKSAyMDA0IFN1Z2FyQ1JNLCBJbmMuOworQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KK1tOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YgdGhlIG5vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3Ugc2hvdWxkIHVzZSB0aGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZSBmb3IgWW91ciBNb2RpZmljYXRpb25zLl0KKworU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgMS4xLjMgLSBFeGhpYml0IEIKKworQWRkaXRpb25hbCBUZXJtcyBhcHBsaWNhYmxlIHRvIHRoZSBTdWdhckNSTSBQdWJsaWMgTGljZW5zZS4KKworSS4gRWZmZWN0LgorVGhlc2UgYWRkaXRpb25hbCB0ZXJtcyBkZXNjcmliZWQgaW4gdGhpcyBTdWdhckNSTSBQdWJsaWMgTGljZW5zZSAmIzgyMTE7IEFkZGl0aW9uYWwgVGVybXMgc2hhbGwgYXBwbHkgdG8gdGhlIENvdmVyZWQgQ29kZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKK0lJLiBTdWdhckNSTSBhbmQgbG9nby4KK1RoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcyAiU3VnYXJDUk0iIGFuZCB0aGUgIlN1Z2FyQ1JNIiBsb2dvcyBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMuCisKK0hvd2V2ZXIsIGluIGFkZGl0aW9uIHRvIHRoZSBvdGhlciBub3RpY2Ugb2JsaWdhdGlvbnMsIGFsbCBjb3BpZXMgb2YgdGhlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGFuZCBTb3VyY2UgQ29kZSBmb3JtIGRpc3RyaWJ1dGVkIG11c3QsIGFzIGEgZm9ybSBvZiBhdHRyaWJ1dGlvbiBvZiB0aGUgb3JpZ2luYWwgYXV0aG9yLCBpbmNsdWRlIG9uIGVhY2ggdXNlciBpbnRlcmZhY2Ugc2NyZWVuIChpKSB0aGUgIlBvd2VyZWQgYnkgU3VnYXJDUk0iIGxvZ28gYW5kIChpaSkgdGhlIGNvcHlyaWdodCBub3RpY2UgaW4gdGhlIHNhbWUgZm9ybSBhcyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBkaXN0cmlidXRlZCBieSBTdWdhckNSTSwgSW5jLiBhdCB0aGUgdGltZSBvZiBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3B5LiBJbiBhZGRpdGlvbiwgdGhlICJQb3dlcmVkIGJ5IFN1Z2FyQ1JNIiBsb2dvIG11c3QgYmUgdmlzaWJsZSB0byBhbGwgdXNlcnMgYW5kIGJlIGxvY2F0ZWQgYXQgdGhlIHZlcnkgYm90dG9tIGNlbnRlciBvZiBlYWNoIHVzZXIgaW50ZXJmYWNlIHNjcmVlbi4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdGhlIGRpbWVuc2lvbnMgb2YgdGhlICJQb3dlcmVkIEJ5IFN1Z2FyQ1JNIiBsb2dvIG11c3QgYmUgYXQgbGVhc3QgMTA2IHggMjMgcGl4ZWxzLiBXaGVuIHVzZXJzIGNsaWNrIG9uIHRoZSAiUG93ZXJlZCBieSBTdWdhckNSTSIgbG9nbyBpdCBtdXN0IGRpcmVjdCB0aGVtIGJhY2sgdG8gaHR0cDovL3d3dy5zdWdhcmZvcmdlLm9yZy4gSW4gYWRkaXRpb24sIHRoZSBjb3B5cmlnaHQgbm90aWNlIG11c3QgcmVtYWluIHZpc2libGUgdG8gYWxsIHVzZXJzIGF0IGFsbCB0aW1lcyBhdCB0aGUgYm90dG9tIG9mIHRoZSB1c2VyIGludGVyZmFjZSBzY3JlZW4uIFdoZW4gdXNlcnMgY2xpY2sgb24gdGhlIGNvcHlyaWdodCBub3RpY2UsIGl0IG11c3QgZGlyZWN0IHRoZW0gYmFjayB0byBodHRwOi8vd3d3LnN1Z2FyY3JtLmNvbQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1VDQiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvVUNCCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YTc1N2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1VDQgpAQCAtMCwwICsxLDI2IEBACisgICBDb3B5cmlnaHQgKGMpIDE5ODcsIDE5ODksIDE5OTAsIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQKKyAgICAgICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgICBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAgIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgICBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICAgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICAgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICAgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICAgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1ZTTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1ZTTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZiYWU1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvVlNMLTEuMApAQCAtMCwwICsxLDQ5IEBACisKK1ZvdmlkYSBTb2Z0d2FyZSBMaWNlbnNlIHYuIDEuMAorCitUaGlzIGxpY2Vuc2UgYXBwbGllcyB0byBhbGwgc29mdHdhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSAiVm92aWRhCitPcGVuIENvbW11bmljYXRpb24gQXBwbGljYXRpb24gTGlicmFyeSIgZXhjZXB0IGZvciB0aG9zZSBwb3J0aW9ucworaW5jb3Jwb3JhdGluZyB0aGlyZCBwYXJ0eSBzb2Z0d2FyZSBzcGVjaWZpY2FsbHkgaWRlbnRpZmllZCBhcyBiZWluZworbGljZW5zZWQgdW5kZXIgc2VwYXJhdGUgbGljZW5zZS4KKworVGhlIFZvdmlkYSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMAorQ29weXJpZ2h0IChjKSAyMDAwIFZvdmlkYSBOZXR3b3JrcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgordGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorZGlzdHJpYnV0aW9uLgorCiszLiBUaGUgbmFtZXMgIlZPQ0FMIiwgIlZvdmlkYSBPcGVuIENvbW11bmljYXRpb24gQXBwbGljYXRpb24gTGlicmFyeSIsCithbmQgIlZvdmlkYSBPcGVuIENvbW11bmljYXRpb24gQXBwbGljYXRpb24gTGlicmFyeSAoVk9DQUwpIiBtdXN0Citub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKK3NvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgorcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3Qgdm9jYWxAdm92aWRhLm9yZy4KKworNC4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIlZPQ0FMIiwgbm9yCittYXkgIlZPQ0FMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuCitwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAorV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFORAorTk9OLUlORlJJTkdFTUVOVCBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVk9WSURBCitORVRXT1JLUywgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMKK0lOIEVYQ0VTUyBPRiAkMSwwMDAsIE5PUiBGT1IgQU5ZIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCitQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCitVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0UuCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1czQyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvVzNDCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YjhjNDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1czQwpAQCAtMCwwICsxLDE3IEBACisKK1czQyBTT0ZUV0FSRSBOT1RJQ0UgQU5EIExJQ0VOU0UKK1RoaXMgd29yayAoYW5kIGluY2x1ZGVkIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uIHN1Y2ggYXMgUkVBRE1Fcywgb3Igb3RoZXIgcmVsYXRlZCBpdGVtcykgaXMgYmVpbmcgcHJvdmlkZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZS4KK0xpY2Vuc2UKK0J5IG9idGFpbmluZywgdXNpbmcgYW5kL29yIGNvcHlpbmcgdGhpcyB3b3JrLCB5b3UgKHRoZSBsaWNlbnNlZSkgYWdyZWUgdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLCBhbmQgd2lsbCBjb21wbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLgorUGVybWlzc2lvbiB0byBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIG9yIHJveWFsdHkgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBvbiBBTEwgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbmNsdWRpbmcgbW9kaWZpY2F0aW9uczoKK1RoZSBmdWxsIHRleHQgb2YgdGhpcyBOT1RJQ0UgaW4gYSBsb2NhdGlvbiB2aWV3YWJsZSB0byB1c2VycyBvZiB0aGUgcmVkaXN0cmlidXRlZCBvciBkZXJpdmF0aXZlIHdvcmsuCitBbnkgcHJlLWV4aXN0aW5nIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBkaXNjbGFpbWVycywgbm90aWNlcywgb3IgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElmIG5vbmUgZXhpc3QsIHRoZSBXM0MgU29mdHdhcmUgU2hvcnQgTm90aWNlIHNob3VsZCBiZSBpbmNsdWRlZCAoaHlwZXJ0ZXh0IGlzIHByZWZlcnJlZCwgdGV4dCBpcyBwZXJtaXR0ZWQpIHdpdGhpbiB0aGUgYm9keSBvZiBhbnkgcmVkaXN0cmlidXRlZCBvciBkZXJpdmF0aXZlIGNvZGUuCitOb3RpY2Ugb2YgYW55IGNoYW5nZXMgb3IgbW9kaWZpY2F0aW9ucyB0byB0aGUgZmlsZXMsIGluY2x1ZGluZyB0aGUgZGF0ZSBjaGFuZ2VzIHdlcmUgbWFkZS4gKFdlIHJlY29tbWVuZCB5b3UgcHJvdmlkZSBVUklzIHRvIHRoZSBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBjb2RlIGlzIGRlcml2ZWQuKQorRGlzY2xhaW1lcnMKK1RISVMgU09GVFdBUkUgQU5EIERPQ1VNRU5UQVRJT04gSVMgUFJPVklERUQgIkFTIElTLCIgQU5EIENPUFlSSUdIVCBIT0xERVJTIE1BS0UgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTywgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04gV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFBBVEVOVFMsIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLgorQ09QWVJJR0hUIEhPTERFUlMgV0lMTCBOT1QgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgQU5ZIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTi4KK1RoZSBuYW1lIGFuZCB0cmFkZW1hcmtzIG9mIGNvcHlyaWdodCBob2xkZXJzIG1heSBOT1QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiBUaXRsZSB0byBjb3B5cmlnaHQgaW4gdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB3aWxsIGF0IGFsbCB0aW1lcyByZW1haW4gd2l0aCBjb3B5cmlnaHQgaG9sZGVycy4KK05vdGVzCitUaGlzIHZlcnNpb246IGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKK1RoaXMgZm9ybXVsYXRpb24gb2YgVzNDYHMgbm90aWNlIGFuZCBsaWNlbnNlIGJlY2FtZSBhY3RpdmUgb24gRGVjZW1iZXIgMzEgMjAwMi4gVGhpcyB2ZXJzaW9uIHJlbW92ZXMgdGhlIGNvcHlyaWdodCBvd25lcnNoaXAgbm90aWNlIHN1Y2ggdGhhdCB0aGlzIGxpY2Vuc2UgY2FuIGJlIHVzZWQgd2l0aCBtYXRlcmlhbHMgb3RoZXIgdGhhbiB0aG9zZSBvd25lZCBieSB0aGUgVzNDLCByZWZsZWN0cyB0aGF0IEVSQ0lNIGlzIG5vdyBhIGhvc3Qgb2YgdGhlIFczQywgaW5jbHVkZXMgcmVmZXJlbmNlcyB0byB0aGlzIHNwZWNpZmljIGRhdGVkIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UsIGFuZCByZW1vdmVzIHRoZSBhbWJpZ3VvdXMgZ3JhbnQgb2YgInVzZSIuIE90aGVyd2lzZSwgdGhpcyB2ZXJzaW9uIGlzIHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyB2ZXJzaW9uIGFuZCBpcyB3cml0dGVuIHNvIGFzIHRvIHByZXNlcnZlIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb25gcyBhc3Nlc3NtZW50IG9mIEdQTCBjb21wYXRpYmlsaXR5IGFuZCBPU0lgcyBjZXJ0aWZpY2F0aW9uIHVuZGVyIHRoZSBPcGVuIFNvdXJjZSBEZWZpbml0aW9uLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1dYd2luZG93cyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvV1h3aW5kb3dzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZTA5NDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1dYd2luZG93cwpAQCAtMCwwICsxLDU1IEBACisKKyAgICAgICAgICAgICAgICB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbmNlLCBWZXJzaW9uIDMuMQorICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDUgSnVsaWFuIFNtYXJ0LCBSb2JlcnQgUm9lYmxpbmcgZXQgYWwKKworICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyAgb2YgdGhpcyBsaWNlbmNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgV1hXSU5ET1dTIExJQlJBUlkgTElDRU5DRQorICAgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKyAgCisgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0CisgIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgCisgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMaWJyYXJ5CisgIEdlbmVyYWwgUHVibGljIExpY2VuY2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZSwgdXN1YWxseSBpbiBhIGZpbGUgbmFtZWQgQ09QWUlORy5MSUIuICBJZiBub3QsCisgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorCisgIEVYQ0VQVElPTiBOT1RJQ0UKKworICAxLiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YgdGhpcyBsaWJyYXJ5IGdpdmUKKyAgcGVybWlzc2lvbiBmb3IgYWRkaXRpb25hbCB1c2VzIG9mIHRoZSB0ZXh0IGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2Ugb2YKKyAgdGhlIGxpYnJhcnkgYXMgbGljZW5jZWQgdW5kZXIgdGhlIHd4V2luZG93cyBMaWJyYXJ5IExpY2VuY2UsIGFwcGx5aW5nCisgIGVpdGhlciB2ZXJzaW9uIDMuMSBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbiBvZgorICB0aGUgTGljZW5jZSBhcyBwdWJsaXNoZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHZlcnNpb24KKyAgMy4xIG9mIHRoZSBMaWNlbmNlIGRvY3VtZW50LgorCisgIDIuIFRoZSBleGNlcHRpb24gaXMgdGhhdCB5b3UgbWF5IHVzZSwgY29weSwgbGluaywgbW9kaWZ5IGFuZCBkaXN0cmlidXRlCisgIHVuZGVyIHlvdXIgb3duIHRlcm1zLCBiaW5hcnkgb2JqZWN0IGNvZGUgdmVyc2lvbnMgb2Ygd29ya3MgYmFzZWQKKyAgb24gdGhlIExpYnJhcnkuCisKKyAgMy4gSWYgeW91IGNvcHkgY29kZSBmcm9tIGZpbGVzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgIEdlbmVyYWwgUHVibGljIExpY2VuY2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2VuY2UgaW50byBhCisgIGNvcHkgb2YgdGhpcyBsaWJyYXJ5LCBhcyB0aGlzIGxpY2VuY2UgcGVybWl0cywgdGhlIGV4Y2VwdGlvbiBkb2VzIG5vdAorICBhcHBseSB0byB0aGUgY29kZSB0aGF0IHlvdSBhZGQgaW4gdGhpcyB3YXkuICBUbyBhdm9pZCBtaXNsZWFkaW5nIGFueW9uZSBhcworICB0byB0aGUgc3RhdHVzIG9mIHN1Y2ggbW9kaWZpZWQgZmlsZXMsIHlvdSBtdXN0IGRlbGV0ZSB0aGlzIGV4Y2VwdGlvbgorICBub3RpY2UgZnJvbSBzdWNoIGNvZGUgYW5kL29yIGFkanVzdCB0aGUgbGljZW5zaW5nIGNvbmRpdGlvbnMgbm90aWNlCisgIGFjY29yZGluZ2x5LgorCisgIDQuIElmIHlvdSB3cml0ZSBtb2RpZmljYXRpb25zIG9mIHlvdXIgb3duIGZvciB0aGlzIGxpYnJhcnksIGl0IGlzIHlvdXIKKyAgY2hvaWNlIHdoZXRoZXIgdG8gcGVybWl0IHRoaXMgZXhjZXB0aW9uIHRvIGFwcGx5IHRvIHlvdXIgbW9kaWZpY2F0aW9ucy4gCisgIElmIHlvdSBkbyBub3Qgd2lzaCB0aGF0LCB5b3UgbXVzdCBkZWxldGUgdGhlIGV4Y2VwdGlvbiBub3RpY2UgZnJvbSBzdWNoCisgIGNvZGUgYW5kL29yIGFkanVzdCB0aGUgbGljZW5zaW5nIGNvbmRpdGlvbnMgbm90aWNlIGFjY29yZGluZ2x5LgorCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9XYXRjb20tMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9XYXRjb20tMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYjYxOWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1dhdGNvbS0xLjAKQEAgLTAsMCArMSwxNDAgQEAKKworU3liYXNlIE9wZW4gV2F0Y29tIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMS4wCisKK1VTRSBPRiBUSEUgU1lCQVNFIE9QRU4gV0FUQ09NIFNPRlRXQVJFIERFU0NSSUJFRCBCRUxPVyAoIlNPRlRXQVJFIikgSVMgU1VCSkVDVCBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgU0VUIEZPUlRIIElOIFRIRSBTWUJBU0UgT1BFTiBXQVRDT00gUFVCTElDIExJQ0VOU0UgU0VUIEZPUlRIIEJFTE9XICgiTElDRU5TRSIpLiBZT1UgTUFZIE5PVCBVU0UgVEhFIFNPRlRXQVJFIElOIEFOWSBNQU5ORVIgVU5MRVNTIFlPVSBBQ0NFUFQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRIRSBMSUNFTlNFLiBZT1UgSU5ESUNBVEUgWU9VUiBBQ0NFUFRBTkNFIEJZIElOIEFOWSBNQU5ORVIgVVNJTkcgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQlkgUkVQUk9EVUNJTkcsIE1PRElGWUlORyBPUiBESVNUUklCVVRJTkcpIFRIRSBTT0ZUV0FSRS4gSUYgWU9VIERPIE5PVCBBQ0NFUFQgQUxMIE9GIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSEUgTElDRU5TRSwgRE8gTk9UIFVTRSBUSEUgU09GVFdBUkUgSU4gQU5ZIE1BTk5FUi4KKworU3liYXNlIE9wZW4gV2F0Y29tIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMS4wCisxLiBHZW5lcmFsOyBEZWZpbml0aW9ucy4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aGUgZm9sbG93aW5nIHNvZnR3YXJlIHByb2dyYW1zOiB0aGUgb3BlbiBzb3VyY2UgdmVyc2lvbnMgb2YgU3liYXNlYHMgV2F0Y29tIEMvQysrIGFuZCBGb3J0cmFuIGNvbXBpbGVyIHByb2R1Y3RzICgiU29mdHdhcmUiKSwgd2hpY2ggYXJlIG1vZGlmaWVkIHZlcnNpb25zIG9mLCB3aXRoIHNpZ25pZmljYW50IGNoYW5nZXMgZnJvbSwgdGhlIGxhc3QgdmVyc2lvbnMgbWFkZSBjb21tZXJjaWFsbHkgYXZhaWxhYmxlIGJ5IFN5YmFzZS4gQXMgdXNlZCBpbiB0aGlzIExpY2Vuc2U6CisKKworMS4xICJBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMiIG1lYW46IChhKSBpbiB0aGUgY2FzZSB3aGVyZSBTeWJhc2UgaXMgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCAoaSkgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gU3liYXNlIGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdCBtYXR0ZXIgY29udGFpbmVkIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBidXQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byB1c2UsIHJlcHJvZHVjZSBhbmQvb3IgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSB3aXRob3V0IGluZnJpbmdlbWVudDsgYW5kIChiKSBpbiB0aGUgY2FzZSB3aGVyZSBZb3UgYXJlIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIFlvdSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGluIFlvdXIgTW9kaWZpY2F0aW9ucywgdGFrZW4gYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aCBPcmlnaW5hbCBDb2RlLgorCisKKzEuMiAiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworCisxLjMgIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuCisKKworMS40ICJEZXBsb3kiIG1lYW5zIHRvIHVzZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBvdGhlciB0aGFuIGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCAoUiZhbXA7RCkgYW5kL29yIFBlcnNvbmFsIFVzZSwgYW5kIGluY2x1ZGVzIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IGFuZCBhbGwgaW50ZXJuYWwgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgd2l0aGluIFlvdXIgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uIGV4Y2VwdCBmb3IgUiZhbXA7RCB1c2UgYW5kL29yIFBlcnNvbmFsIFVzZSwgYXMgd2VsbCBhcyBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3VibGljZW5zaW5nIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgYnkgWW91IHRvIGFueSB0aGlyZCBwYXJ0eSBpbiBhbnkgZm9ybSBvciBtYW5uZXIuCisKKworMS41ICJMYXJnZXIgV29yayIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworCisxLjYgIk1vZGlmaWNhdGlvbnMiIG1lYW4gYW55IGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBhbmQvb3IgY2hhbmdlIHRvLCB0aGUgc3Vic3RhbmNlIGFuZC9vciBzdHJ1Y3R1cmUgb2YgdGhlIE9yaWdpbmFsIENvZGUsIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLiBXaGVuIGNvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOiAoYSkgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIENvdmVyZWQgQ29kZTsgYW5kL29yIChiKSBhbnkgbmV3IGZpbGUgb3Igb3RoZXIgcmVwcmVzZW50YXRpb24gb2YgY29tcHV0ZXIgcHJvZ3JhbSBzdGF0ZW1lbnRzIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgQ292ZXJlZCBDb2RlLgorCisKKzEuNyAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgKGEpIHRoZSBTb3VyY2UgQ29kZSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayBhcyBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IFN5YmFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgU291cmNlIENvZGUgb2YgYW55IHVwZGF0ZXMgb3IgdXBncmFkZXMgdG8gc3VjaCBwcm9ncmFtcyBvciB3b3JrcyBtYWRlIGF2YWlsYWJsZSBieSBTeWJhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgdGhhdCBoYXMgYmVlbiBleHByZXNzbHkgaWRlbnRpZmllZCBieSBTeWJhc2UgYXMgc3VjaCBpbiB0aGUgaGVhZGVyIGZpbGUocykgb2Ygc3VjaCB3b3JrOyBhbmQgKGIpIHRoZSBvYmplY3QgY29kZSBjb21waWxlZCBmcm9tIHN1Y2ggU291cmNlIENvZGUgYW5kIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgU3liYXNlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworCisxLjggIlBlcnNvbmFsIFVzZSIgbWVhbnMgdXNlIG9mIENvdmVyZWQgQ29kZSBieSBhbiBpbmRpdmlkdWFsIHNvbGVseSBmb3IgaGlzIG9yIGhlciBwZXJzb25hbCwgcHJpdmF0ZSBhbmQgbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMuIEFuIGluZGl2aWR1YWxgcyB1c2Ugb2YgQ292ZXJlZCBDb2RlIGluIGhpcyBvciBoZXIgY2FwYWNpdHkgYXMgYW4gb2ZmaWNlciwgZW1wbG95ZWUsIG1lbWJlciwgaW5kZXBlbmRlbnQgY29udHJhY3RvciBvciBhZ2VudCBvZiBhIGNvcnBvcmF0aW9uLCBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gKGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwpIGRvZXMgbm90IHF1YWxpZnkgYXMgUGVyc29uYWwgVXNlLgorCisKKzEuOSAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBodW1hbiByZWFkYWJsZSBmb3JtIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHRoYXQgaXMgc3VpdGFibGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZSAob2JqZWN0IGNvZGUpLgorCisKKzEuMTAgIllvdSIgb3IgIllvdXIiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoLCBZb3UsIHdoZXJlICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKworMi4gUGVybWl0dGVkIFVzZXM7IENvbmRpdGlvbnMgJmFtcDsgUmVzdHJpY3Rpb25zLlN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgU3liYXNlIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24gdGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgYW5kIGRvd25sb2FkIHRoZSBPcmlnaW5hbCBDb2RlLCBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mIFN5YmFzZWBzIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgY29weXJpZ2h0cyBjb3ZlcmluZyB0aGUgT3JpZ2luYWwgQ29kZSwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworCisyLjEgWW91IG1heSB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIE9yaWdpbmFsIENvZGUsIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBzb2xlbHkgZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IGFuZC9vciBQZXJzb25hbCBVc2UsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIFlvdSBtdXN0IHJldGFpbiBhbmQgcmVwcm9kdWNlIGluIGFsbCBjb3BpZXMgb2YgT3JpZ2luYWwgQ29kZSB0aGUgY29weXJpZ2h0IGFuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycyBvZiBTeWJhc2UgYXMgdGhleSBhcHBlYXIgaW4gdGhlIE9yaWdpbmFsIENvZGUsIGFuZCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBpbiB0aGUgT3JpZ2luYWwgQ29kZSB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZTsgYW5kIAorCisoYikgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgU291cmNlIENvZGUgb2YgQ292ZXJlZCBDb2RlIGFuZCBkb2N1bWVudGF0aW9uIFlvdSBkaXN0cmlidXRlLCBhbmQgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBzdWNoIFNvdXJjZSBDb2RlIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLCBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNi4KKworKGMpIFdoZW5ldmVyIHJlYXNvbmFibHkgZmVhc2libGUgeW91IHNob3VsZCBpbmNsdWRlIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZSBpbiBhIGNsaWNrLXdyYXAgZm9ybWF0LCB3aGljaCByZXF1aXJlcyBhZmZpcm1hdGl2ZSBhY2NlcHRhbmNlIGJ5IGNsaWNraW5nIG9uIGFuICJJIGFjY2VwdCIgYnV0dG9uIG9yIHNpbWlsYXIgbWVjaGFuaXNtLiBJZiBhIGNsaWNrLXdyYXAgZm9ybWF0IGlzIG5vdCBpbmNsdWRlZCwgeW91IG11c3QgaW5jbHVkZSBhIHN0YXRlbWVudCB0aGF0IGFueSB1c2UgKGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24gb3IgZGlzdHJpYnV0aW9uKSBvZiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgb3RoZXIgYWZmaXJtYXRpdmUgYWN0IHRoYXQgeW91IGRlZmluZSwgY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGUgTGljZW5zZSwgYW5kIGluc3RydWN0aW5nIHRoZSB1c2VyIG5vdCB0byB1c2UgdGhlIENvdmVyZWQgQ29kZSBpbiBhbnkgbWFubmVyIGlmIHRoZSB1c2VyIGRvZXMgbm90IGFjY2VwdCBhbGwgb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLgorCisKKzIuMiBZb3UgbWF5IHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnkgYW5kIERlcGxveSBDb3ZlcmVkIENvZGUsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIFlvdSBtdXN0IHNhdGlzZnkgYWxsIHRoZSBjb25kaXRpb25zIG9mIFNlY3Rpb24gMi4xIHdpdGggcmVzcGVjdCB0byB0aGUgU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZTsgCisKKyhiKSBZb3UgbXVzdCBkdXBsaWNhdGUsIHRvIHRoZSBleHRlbnQgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCwgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBNb2RpZmljYXRpb25zLCBhbmQgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2U7IAorCisoYykgWW91IG11c3QgbWFrZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIHB1YmxpY2x5IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgZ3JhbnRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDMgYmVsb3csIGZvciBhcyBsb25nIGFzIHlvdSBEZXBsb3kgdGhlIENvdmVyZWQgQ29kZSBvciB0d2VsdmUgKDEyKSBtb250aHMgZnJvbSB0aGUgZGF0ZSBvZiBpbml0aWFsIERlcGxveW1lbnQsIHdoaWNoZXZlciBpcyBsb25nZXIuIFlvdSBzaG91bGQgcHJlZmVyYWJseSBkaXN0cmlidXRlIHRoZSBTb3VyY2UgQ29kZSBvZiBZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgZWxlY3Ryb25pY2FsbHkgKGUuZy4gZG93bmxvYWQgZnJvbSBhIHdlYiBzaXRlKTsgCisKKyhkKSBpZiBZb3UgRGVwbG95IENvdmVyZWQgQ29kZSBpbiBvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlLCBpbiB0aGUgY29kZSBpdHNlbGYgYXMgd2VsbCBhcyBpbiByZWxhdGVkIGRvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZCB3aGVyZSB0byBvYnRhaW4gc3VjaCBTb3VyY2UgQ29kZTsgYW5kIAorCisoZSkgdGhlIG9iamVjdCBjb2RlIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgWW91ciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQgc3VjaCBsaWNlbnNlIGFncmVlbWVudCBjb250YWlucyB0ZXJtcyBubyBsZXNzIHByb3RlY3RpdmUgb2YgU3liYXNlIGFuZCBlYWNoIENvbnRyaWJ1dG9yIHRoYW4gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHN0YXRpbmcgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5LgorCisKKzIuMyBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IGFsdGhvdWdoIFN5YmFzZSBhbmQgZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIHRoZWlyIHJlc3BlY3RpdmUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBTeWJhc2Ugb3IgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gU3liYXNlIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltIGFueSBsaWFiaWxpdHkgdG8gWW91IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgWW91IGhlcmVieSBhc3N1bWUgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFlvdSB0byBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIENvZGUsIGl0IGlzIFlvdXIgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgQ292ZXJlZCBDb2RlLgorCisKKzMuIFlvdXIgR3JhbnRzLiBJbiBjb25zaWRlcmF0aW9uIG9mLCBhbmQgYXMgYSBjb25kaXRpb24gdG8sIHRoZSBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBoZXJlYnkgZ3JhbnQgdG8gU3liYXNlIGFuZCBhbGwgdGhpcmQgcGFydGllcyBhIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQpIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIG9mIHRoZSBzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMgU3liYXNlYHMgbGljZW5zZXMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZCAyLjIuCisKKworNC4gTGFyZ2VyIFdvcmtzLiBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBlYWNoIHN1Y2ggaW5zdGFuY2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YuCisKKworNS4gTGltaXRhdGlvbnMgb24gUGF0ZW50IExpY2Vuc2UuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb24gMiwgbm8gb3RoZXIgcGF0ZW50IHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBTeWJhc2UgaGVyZWluLiBNb2RpZmljYXRpb25zIGFuZC9vciBMYXJnZXIgV29ya3MgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCBwYXRlbnQgbGljZW5zZXMgZnJvbSBTeWJhc2Ugd2hpY2ggU3liYXNlIG1heSBncmFudCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLgorCisKKzYuIEFkZGl0aW9uYWwgVGVybXMuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIG90aGVyIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcyBMaWNlbnNlICgiQWRkaXRpb25hbCBUZXJtcyIpIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBhcyBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIGFuZCBub3Qgb24gYmVoYWxmIG9mIFN5YmFzZSBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG9idGFpbiB0aGUgcmVjaXBpZW50YHMgYWdyZWVtZW50IHRoYXQgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcyBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIFN5YmFzZSBhbmQgZXZlcnkgQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QgU3liYXNlIG9yIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uIG9mIGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMuCisKKworNy4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFN5YmFzZSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBPbmNlIE9yaWdpbmFsIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgWW91IG1heSBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBwdWJsaXNoZWQgYnkgU3liYXNlLiBObyBvbmUgb3RoZXIgdGhhbiBTeWJhc2UgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisKKzguIE5PIFdBUlJBTlRZIE9SIFNVUFBPUlQuIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gaW4gd2hvbGUgb3IgaW4gcGFydCBwcmUtcmVsZWFzZSwgdW50ZXN0ZWQsIG9yIG5vdCBmdWxseSB0ZXN0ZWQgd29ya3MuIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcyBvZiBkYXRhLCBhbmQgbWF5IGJlIGluY29tcGxldGUgb3IgY29udGFpbiBpbmFjY3VyYWNpZXMuIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUsIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIGlzIGF0IFlvdXIgc29sZSBhbmQgZW50aXJlIHJpc2suIFRIRSBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSwgVVBHUkFERVMgT1IgU1VQUE9SVCBPRiBBTlkgS0lORCBBTkQgU1lCQVNFIEFORCBTWUJBU0VgUyBMSUNFTlNPUihTKSAoQ09MTEVDVElWRUxZIFJFRkVSUkVEIFRPIEFTICJTWUJBU0UiIEZPUiBUSEUgUFVSUE9TRVMgT0YgU0VDVElPTlMgOCBBTkQgOSkgQU5EIEFMTCBDT05UUklCVVRPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgU0FUSVNGQUNUT1JZIFFVQUxJVFksIE9GIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPRiBBQ0NVUkFDWSwgT0YgUVVJRVQgRU5KT1lNRU5ULCBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gU1lCQVNFIEFORCBFQUNIIENPTlRSSUJVVE9SIERPRVMgTk9UIFdBUlJBTlQgQUdBSU5TVCBJTlRFUkZFUkVOQ0UgV0lUSCBZT1VSIEVOSk9ZTUVOVCBPRiBUSEUgQ09WRVJFRCBDT0RFLCBUSEFUIFRIRSBGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLCBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSwgT1IgVEhBVCBERUZFQ1RTIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBDT1JSRUNURUQuIE5PIE9SQUwgT1IgV1JJVFRFTiBJTkZPUk1BVElPTiBPUiBBRFZJQ0UgR0lWRU4gQlkgU1lCQVNFLCBBIFNZQkFTRSBBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFIE9SIEFOWSBDT05UUklCVVRPUiBTSEFMTCBDUkVBVEUgQSBXQVJSQU5UWS4gWW91IGFja25vd2xlZGdlIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBpcyBub3QgaW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQgbmF2aWdhdGlvbiwgY29tbXVuaWNhdGlvbiBzeXN0ZW1zLCBvciBhaXIgdHJhZmZpYyBjb250cm9sIG1hY2hpbmVzIGluIHdoaWNoIGNhc2UgdGhlIGZhaWx1cmUgb2YgdGhlIENvdmVyZWQgQ29kZSBjb3VsZCBsZWFkIHRvIGRlYXRoLCBwZXJzb25hbCBpbmp1cnksIG9yIHNldmVyZSBwaHlzaWNhbCBvciBlbnZpcm9ubWVudGFsIGRhbWFnZS4KKworCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gVE8gVEhFIEVYVEVOVCBOT1QgUFJPSElCSVRFRCBCWSBMQVcsIElOIE5PIEVWRU5UIFNIQUxMIFNZQkFTRSBPUiBBTlkgQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBJTkRJUkVDVCwgQ09OU0VRVUVOVElBTCBPUiBPVEhFUiBEQU1BR0VTIE9GIEFOWSBLSU5EIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRISVMgTElDRU5TRSBPUiBZT1VSIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBDT1ZFUkVEIENPREUsIE9SIEFOWSBQT1JUSU9OIFRIRVJFT0YsIFdIRVRIRVIgVU5ERVIgQSBUSEVPUlkgT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFBST0RVQ1RTIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYgU1lCQVNFIE9SIFNVQ0ggQ09OVFJJQlVUT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLCBBTkQgTk9UV0lUSFNUQU5ESU5HIFRIRSBGQUlMVVJFIE9GIEVTU0VOVElBTCBQVVJQT1NFIE9GIEFOWSBSRU1FRFkuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIExJTUlUQVRJT04gT0YgTElBQklMSVRZIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBPUiBPVEhFUiBEQU1BR0VTIE9GIEFOWSBLSU5ELCBTTyBUSElTIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuIEluIG5vIGV2ZW50IHNoYWxsIFN5YmFzZWBzIG9yIGFueSBDb250cmlidXRvcmBzIHRvdGFsIGxpYWJpbGl0eSB0byBZb3UgZm9yIGFsbCBkYW1hZ2VzIChvdGhlciB0aGFuIGFzIG1heSBiZSByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdykgdW5kZXIgdGhpcyBMaWNlbnNlIGV4Y2VlZCB0aGUgYW1vdW50IG9mIGZpdmUgaHVuZHJlZCBkb2xsYXJzICgkNTAwLjAwKS4KKworCisxMC4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzICJTeWJhc2UiIG9yIGFueSBvdGhlciB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIGJlbG9uZ2luZyB0byBTeWJhc2UgKGNvbGxlY3RpdmVseSAiU3liYXNlIE1hcmtzIikgb3IgdG8gYW55IHRyYWRlbWFyayBvciB0cmFkZSBuYW1lIGJlbG9uZ2luZyB0byBhbnkgQ29udHJpYnV0b3IoIkNvbnRyaWJ1dG9yIE1hcmtzIikuIE5vIFN5YmFzZSBNYXJrcyBvciBDb250cmlidXRvciBNYXJrcyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG9yIENvdmVyZWQgQ29kZSBvdGhlciB0aGFuIHdpdGggdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBTeWJhc2Ugb3IgdGhlIENvbnRyaWJ1dG9yLCBhcyBhcHBsaWNhYmxlLgorCisKKzExLiBPd25lcnNoaXAuIFN1YmplY3QgdG8gdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggQ29udHJpYnV0b3IuIFN5YmFzZSByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mIFN5YmFzZSAoIlN5YmFzZSBNb2RpZmljYXRpb25zIiksIGFuZCBzdWNoIFN5YmFzZSBNb2RpZmljYXRpb25zIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuIFN5YmFzZSBtYXksIGF0IGl0cyBzb2xlIGRpc2NyZXRpb24sIGNob29zZSB0byBsaWNlbnNlIHN1Y2ggU3liYXNlIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIG9yIG1heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuCisKKzEyLiBUZXJtaW5hdGlvbi4KKworCisxMi4xIFRlcm1pbmF0aW9uLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGU6CisKKyhhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoOworCisoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mIHRoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEzLjUoYik7IG9yCisKKyhjKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGlmIFlvdSwgYXQgYW55IHRpbWUgZHVyaW5nIHRoZSB0ZXJtIG9mIHRoaXMgTGljZW5zZSwgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IChpbmNsdWRpbmcgYXMgYSBjcm9zcyBjbGFpbSBvciBjb3VudGVyY2xhaW0pIGFnYWluc3QgU3liYXNlIG9yIGFueSBDb250cmlidXRvci4KKworCisxMi4yIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvIGltbWVkaWF0ZWx5IHN0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgdG8gZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgaGF2ZSBiZWVuIHByb3Blcmx5IGdyYW50ZWQgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIHNob3VsZCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gU2VjdGlvbnMgMywgNSwgOCwgOSwgMTAsIDExLCAxMi4yIGFuZCAxMy4gTm8gcGFydHkgd2lsbCBiZSBsaWFibGUgdG8gYW55IG90aGVyIGZvciBjb21wZW5zYXRpb24sIGluZGVtbml0eSBvciBkYW1hZ2VzIG9mIGFueSBzb3J0IHNvbGVseSBhcyBhIHJlc3VsdCBvZiB0ZXJtaW5hdGluZyB0aGlzIExpY2Vuc2UgaW4gYWNjb3JkYW5jZSB3aXRoIGl0cyB0ZXJtcywgYW5kIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIGJlIHdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodCBvciByZW1lZHkgb2YgYW55IHBhcnR5LgorCisKKzEzLiBNaXNjZWxsYW5lb3VzLgorCisKKzEzLjEgR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtIiBhcyBkZWZpbmVkIGluIEZBUiAyLjEwMS4gR292ZXJubWVudCBzb2Z0d2FyZSBhbmQgdGVjaG5pY2FsIGRhdGEgcmlnaHRzIGluIHRoZSBDb3ZlcmVkIENvZGUgaW5jbHVkZSBvbmx5IHRob3NlIHJpZ2h0cyBjdXN0b21hcmlseSBwcm92aWRlZCB0byB0aGUgcHVibGljIGFzIGRlZmluZWQgaW4gdGhpcyBMaWNlbnNlLiBUaGlzIGN1c3RvbWFyeSBjb21tZXJjaWFsIGxpY2Vuc2UgaW4gdGVjaG5pY2FsIGRhdGEgYW5kIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGluIGFjY29yZGFuY2Ugd2l0aCBGQVIgMTIuMjExIChUZWNobmljYWwgRGF0YSkgYW5kIDEyLjIxMiAoQ29tcHV0ZXIgU29mdHdhcmUpIGFuZCwgZm9yIERlcGFydG1lbnQgb2YgRGVmZW5zZSBwdXJjaGFzZXMsIERGQVIgMjUyLjIyNy03MDE1IChUZWNobmljYWwgRGF0YSAtLSBDb21tZXJjaWFsIEl0ZW1zKSBhbmQgMjI3LjcyMDItMyAoUmlnaHRzIGluIENvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUgb3IgQ29tcHV0ZXIgU29mdHdhcmUgRG9jdW1lbnRhdGlvbikuIEFjY29yZGluZ2x5LCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKworMTMuMiBSZWxhdGlvbnNoaXAgb2YgUGFydGllcy4gVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gb3IgYW1vbmcgeW91LCBTeWJhc2Ugb3IgYW55IENvbnRyaWJ1dG9yLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudCB0byB0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSBvciBvdGhlcndpc2UuCisKKworMTMuMyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugd2lsbCBpbXBhaXIgU3liYXNlYHMgb3IgYW55IENvbnRyaWJ1dG9yYHMgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IgaXQsIG1hcmtldCBhbmQvb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwgTW9kaWZpY2F0aW9ucywgTGFyZ2VyIFdvcmtzLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heSBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS4KKworCisxMy40IFdhaXZlcjsgQ29uc3RydWN0aW9uLiBGYWlsdXJlIGJ5IFN5YmFzZSBvciBhbnkgQ29udHJpYnV0b3IgdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2YgZnV0dXJlIGVuZm9yY2VtZW50IG9mIHRoYXQgb3IgYW55IG90aGVyIHByb3Zpc2lvbi4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgd2lsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisKKzEzLjUgU2V2ZXJhYmlsaXR5LiAoYSkgSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIGZpbmRzIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBvciBwb3J0aW9uIHRoZXJlb2YsIHRvIGJlIHVuZW5mb3JjZWFibGUsIHRoYXQgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUgZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdCB0aGUgZWNvbm9taWMgYmVuZWZpdHMgYW5kIGludGVudCBvZiB0aGUgcGFydGllcywgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LiAoYikgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIGlmIGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBvciByZXN0cmljdHMgWW91IGZyb20gZnVsbHkgYW5kL29yIHNwZWNpZmljYWxseSBjb21wbHlpbmcgd2l0aCBTZWN0aW9ucyAyIGFuZC9vciAzIG9yIHByZXZlbnRzIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiBlaXRoZXIgb2YgdGhvc2UgU2VjdGlvbnMsIHRoaXMgTGljZW5zZSB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBhbmQgWW91IG11c3QgaW1tZWRpYXRlbHkgZGlzY29udGludWUgYW55IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgaXQgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuCisKKworMTMuNiBEaXNwdXRlIFJlc29sdXRpb24uIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbiBiZXR3ZWVuIFlvdSBhbmQgU3liYXNlIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCBhbmQgWW91IGFuZCBTeWJhc2UgaGVyZWJ5IGNvbnNlbnQgdG8gdGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIHdpdGhpbiB0aGF0IERpc3RyaWN0IHdpdGggcmVzcGVjdCB0byB0aGlzIExpY2Vuc2UuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorCisKKzEzLjcgRW50aXJlIEFncmVlbWVudDsgR292ZXJuaW5nIExhdy4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2VwdCB0aGF0IGJvZHkgb2YgQ2FsaWZvcm5pYSBsYXcgY29uY2VybmluZyBjb25mbGljdHMgb2YgbGF3LgorV2hlcmUgWW91IGFyZSBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZyBjbGF1c2UgYXBwbGllczogVGhlIHBhcnRpZXMgaGVyZWJ5IGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgcmVxdWVzdGVkIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbGwgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiBMZXMgcGFydGllcyBvbnQgZXhpZyYjMjMyOyBxdWUgbGUgcHImIzIzMjtzZW50IGNvbnRyYXQgZXQgdG91cyBsZXMgZG9jdW1lbnRzIGNvbm5leGVzIHNvaWVudCByJiMyMzI7ZGkmIzIzMjtzIGVuIGFuZ2xhaXMuCisKKworRVhISUJJVCBBLiAKKworIlBvcnRpb25zIENvcHlyaWdodCAoYykgMTk4My0yMDAyIFN5YmFzZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorVGhpcyBmaWxlIGNvbnRhaW5zIE9yaWdpbmFsIENvZGUgYW5kL29yIE1vZGlmaWNhdGlvbnMgb2YgT3JpZ2luYWwgQ29kZSBhcyBkZWZpbmVkIGluIGFuZCB0aGF0IGFyZSBzdWJqZWN0IHRvIHRoZSBTeWJhc2UgT3BlbiBXYXRjb20gUHVibGljIExpY2Vuc2UgdmVyc2lvbiAxLjAgKHRoZSBgTGljZW5zZWApLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIEJZIFVTSU5HIFRISVMgRklMRSBZT1UgQUdSRUUgVE8gQUxMIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRIRSBMSUNFTlNFLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgcHJvdmlkZWQgd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IHd3dy5zeWJhc2UuY29tL2RldmVsb3Blci9vcGVuc291cmNlLiAKKworVGhlIE9yaWdpbmFsIENvZGUgYW5kIGFsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBhcmUgZGlzdHJpYnV0ZWQgb24gYW4gYEFTIElTYCBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIFNZQkFTRSBBTkQgQUxMIENPTlRSSUJVVE9SUyBIRVJFQlkgRElTQ0xBSU0gQUxMIFNVQ0ggV0FSUkFOVElFUywgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgUVVJRVQgRU5KT1lNRU5UIE9SIE5PTi1JTkZSSU5HRU1FTlQuIFBsZWFzZSBzZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWEZyZWU4Ni0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hGcmVlODYtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZjNiZjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hGcmVlODYtMS4wCkBAIC0wLDAgKzEsMjIgQEAKK0NvcHlyaWdodCAoQykgMTk5NC0yMDAzIFRoZSBYRnJlZTg2IFByb2plY3QsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KK3RoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KK3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCitvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KK3NvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCitjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK1hGUkVFODYgUFJPSkVDVCBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0FOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiB0aGUgWEZyZWU4NiBQcm9qZWN0IHNoYWxsIG5vdAorYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzCitpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIFhGcmVlODYgUHJvamVjdC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWEZyZWU4Ni0xLjEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hGcmVlODYtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYTVjYjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hGcmVlODYtMS4xCkBAIC0wLDAgKzEsMTggQEAKKworWEZyZWU4NiBMaWNlbnNlICh2ZXJzaW9uIDEuMSkKKworQ29weXJpZ2h0IChDKSAxOTk0LTIwMDYgVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgYW5kIGluIHRoZSBzYW1lIHBsYWNlIGFuZCBmb3JtIGFzIG90aGVyIGNvcHlyaWdodCwgbGljZW5zZSBhbmQgZGlzY2xhaW1lciBpbmZvcm1hdGlvbi4KKworMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFRoZSBYRnJlZTg2IFByb2plY3QsIEluYyAoaHR0cDovL3d3dy54ZnJlZTg2Lm9yZy8pIGFuZCBpdHMgY29udHJpYnV0b3JzIiwgaW4gdGhlIHNhbWUgcGxhY2UgYW5kIGZvcm0gYXMgb3RoZXIgdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzLiBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsIGluIHRoZSBzYW1lIGZvcm0gYW5kIGxvY2F0aW9uIGFzIG90aGVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzLgorCis0LiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBYRlJFRTg2IFBST0pFQ1QsIElOQyBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hTTCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWFNMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhODJkNjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hTTApAQCAtMCwwICsxLDQ4IEBACitDb3B5cmlnaHQKKy0tLS0tLS0tLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMDcgTm9ybWFuIFdhbHNoCitDb3B5cmlnaHQgKEMpIDIwMDMgSmnFmcOtIEtvc2VrCitDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBTdGV2ZSBCYWxsCitDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBUaGUgRG9jQm9vayBQcm9qZWN0CitDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBPJ1JlaWxseSBNZWRpYQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KK2ZpbGVzICh0aGUgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCitjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKK3NlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCitTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZXMgb2YgaW5kaXZpZHVhbHMKK2NyZWRpdGVkIHdpdGggY29udHJpYnV0aW9uIHRvIHRoaXMgc29mdHdhcmUgc2hhbGwgbm90IGJlIHVzZWQgaW4KK2FkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIKK2RlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24KK2Zyb20gdGhlIGluZGl2aWR1YWxzIGluIHF1ZXN0aW9uLgorCitBbnkgc3R5bGVzaGVldCBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB0aGF0IGlzIHB1YmxpY2FsbHkKK2Rpc3RyaWJ1dGVkIHdpbGwgYmUgaWRlbnRpZmllZCB3aXRoIGEgZGlmZmVyZW50IG5hbWUgYW5kIHRoZQordmVyc2lvbiBzdHJpbmdzIGluIGFueSBkZXJpdmVkIFNvZnR3YXJlIHdpbGwgYmUgY2hhbmdlZCBzbyB0aGF0CitubyBwb3NzaWJpbGl0eSBvZiBjb25mdXNpb24gYmV0d2VlbiB0aGUgZGVyaXZlZCBwYWNrYWdlIGFuZCB0aGlzCitTb2Z0d2FyZSB3aWxsIGV4aXN0LgorCitXYXJyYW50eQorLS0tLS0tLS0KK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgTk9STUFOIFdBTFNIIE9SIEFOWSBPVEhFUgorQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCitGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCitPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKK0NvbnRhY3RpbmcgdGhlIEF1dGhvcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgRG9jQm9vayBYU0wgc3R5bGVzaGVldHMgYXJlIG1haW50YWluZWQgYnkgTm9ybWFuIFdhbHNoLAorPG5kd0Bud2Fsc2guY29tPiwgYW5kIG1lbWJlcnMgb2YgdGhlIERvY0Jvb2sgUHJvamVjdCwKKzxkb2Nib29rLWRldmVsb3BlcnNAc2YubmV0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YbmV0IGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YbmV0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NDRlZGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1huZXQKQEAgLTAsMCArMSwyNyBAQAorCitUaGUgWC5OZXQsIEluYy4gTGljZW5zZQorVGhpcyBMaWNlbnNlIGhhcyBiZWVuIHZvbHVudGFyaWx5IGRlcHJlY2F0ZWQgYnkgaXRzIGF1dGhvci4KKworQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEgWC5OZXQsIEluYy4gTGFmYXlldHRlLCBDYWxpZm9ybmlhLCBVU0EKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCisKK1RoaXMgYWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGluIGFsbCByZXNwZWN0cyBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YKK0NhbGlmb3JuaWEgYW5kIGJ5IHRoZSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWVBMLTEuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWVBMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTE4ODBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9ZUEwtMS4xCkBAIC0wLDAgKzEsMzAgQEAKKworWWFob28hIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDEuMSAoWVBMKQorVGhpcyBZYWhvbyEgUHVibGljIExpY2Vuc2UgKHRoaXMgIkFncmVlbWVudCIpIGlzIGEgbGVnYWwgYWdyZWVtZW50IHRoYXQgZGVzY3JpYmVzIHRoZSB0ZXJtcyB1bmRlciB3aGljaCBZYWhvbyEgSW5jLiwgYSBEZWxhd2FyZSBjb3Jwb3JhdGlvbiBoYXZpbmcgaXRzIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBhdCA3MDEgRmlyc3QgQXZlbnVlLCBTdW5ueXZhbGUsIENhbGlmb3JuaWEgOTQwODkgKCJZYWhvbyEiKSB3aWxsIHByb3ZpZGUgc29mdHdhcmUgdG8geW91IHZpYSBkb3dubG9hZCBvciBvdGhlcndpc2UgKCJTb2Z0d2FyZSIpLiBCeSB1c2luZyB0aGUgU29mdHdhcmUsIHlvdSwgYW4gaW5kaXZpZHVhbCBvciBhbiBlbnRpdHkgKCJZb3UiKSBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgdGhlIG11dHVhbCBwcm9taXNlcyBhbmQgdXBvbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGJlbG93LCB0aGUgcGFydGllcyBhZ3JlZSBhcyBmb2xsb3dzOgorCitHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZQorMS4xIC0gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIFlhaG9vISBoZXJlYnkgZ3JhbnRzIHRvIFlvdSwgdW5kZXIgYW55IGFuZCBhbGwgb2YgaXRzIGNvcHlyaWdodCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIFNvZnR3YXJlLCBhIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSBsaWNlbnNlIHRvIGNvcHksIG1vZGlmeSwgY29tcGlsZSwgZXhlY3V0ZSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBNb2RpZmljYXRpb25zLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgQWdyZWVtZW50LCBhbnkgY2hhbmdlIHRvLCBhZGRpdGlvbiB0bywgb3IgYWJyaWRnZW1lbnQgb2YgdGhlIFNvZnR3YXJlIG1hZGUgYnkgWW91IGlzIGEgIk1vZGlmaWNhdGlvbjsiIGhvd2V2ZXIsIGFueSBmaWxlIFlvdSBhZGQgdG8gdGhlIFNvZnR3YXJlIHRoYXQgZG9lcyBub3QgY29udGFpbiBhbnkgcGFydCBvZiB0aGUgU29mdHdhcmUgaXMgbm90IGEgIk1vZGlmaWNhdGlvbi4iCisxLjIgLSBJZiBZb3UgYXJlIGFuIGluZGl2aWR1YWwgYWN0aW5nIG9uIGJlaGFsZiBvZiBhIGNvcnBvcmF0aW9uIG9yIG90aGVyIGVudGl0eSwgWW91ciB1c2Ugb2YgdGhlIFNvZnR3YXJlIG9yIGFueSBNb2RpZmljYXRpb24gaXMgc3ViamVjdCB0byBZb3VyIGhhdmluZyB0aGUgYXV0aG9yaXR5IHRvIGJpbmQgc3VjaCBjb3Jwb3JhdGlvbiBvciBlbnRpdHkgdG8gdGhpcyBBZ3JlZW1lbnQuIFByb3ZpZGluZyBjb3BpZXMgdG8gcGVyc29ucyB3aXRoaW4gc3VjaCBjb3Jwb3JhdGlvbiBvciBlbnRpdHkgaXMgbm90IGNvbnNpZGVyZWQgZGlzdHJpYnV0aW9uIGZvciBwdXJwb3NlcyBvZiB0aGlzIEFncmVlbWVudC4KKzEuMyAtIEZvciB0aGUgU29mdHdhcmUgb3IgYW55IE1vZGlmaWNhdGlvbiBZb3UgZGlzdHJpYnV0ZSBpbiBzb3VyY2UgY29kZSBmb3JtYXQsIFlvdSBtdXN0IGRvIHNvIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgd2l0aCBZb3VyIGRpc3RyaWJ1dGlvbi4gV2l0aCByZXNwZWN0IHRvIGFueSBNb2RpZmljYXRpb24gWW91IGRpc3RyaWJ1dGUgaW4gc291cmNlIGNvZGUgZm9ybWF0LCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBhcHBseSB0byBZb3UgaW4gdGhlIHNhbWUgd2F5IHRob3NlIHRlcm1zIGFwcGx5IHRvIFlhaG9vISB3aXRoIHJlc3BlY3QgdG8gdGhlIFNvZnR3YXJlLiBJbiBvdGhlciB3b3Jkcywgd2hlbiBZb3UgYXJlIGRpc3RyaWJ1dGluZyBNb2RpZmljYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBZb3UgInN0YW5kIGluIHRoZSBzaG9lcyIgb2YgWWFob28hIGluIHRlcm1zIG9mIHRoZSByaWdodHMgWW91IGdyYW50IGFuZCBob3cgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGFwcGx5IHRvIFlvdSBhbmQgdGhlIGxpY2Vuc2VlcyBvZiBZb3VyIE1vZGlmaWNhdGlvbnMuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCB3aGVuIFlvdSAic3RhbmQgaW4gdGhlIHNob2VzIiBvZiBZYWhvbyEsIFlvdSBhcmUgbm90IHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBwcm92aXNpb24gdW5kZXIgU2VjdGlvbiA3LCB3aGljaCByZXF1aXJlcyBhbGwgZGlzcHV0ZXMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdG8gYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIGZlZGVyYWwgb3Igc3RhdGUgY291cnRzIG9mIG5vcnRoZXJuIENhbGlmb3JuaWEuCisxLjQgLSBGb3IgdGhlIFNvZnR3YXJlIG9yIGFueSBNb2RpZmljYXRpb24gWW91IGRpc3RyaWJ1dGUgaW4gY29tcGlsZWQgb3Igb2JqZWN0IGNvZGUgZm9ybWF0LCBZb3UgbXVzdCBhbHNvIHByb3ZpZGUgcmVjaXBpZW50cyB3aXRoIGFjY2VzcyB0byB0aGUgU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9uIGluIHNvdXJjZSBjb2RlIGZvcm1hdCBhbG9uZyB3aXRoIGEgY29tcGxldGUgY29weSBvZiB0aGlzIEFncmVlbWVudC4gVGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9ucyBpbiBjb21waWxlZCBvciBvYmplY3QgY29kZSBmb3JtYXQgbWF5IGJlIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIEluIGFkZGl0aW9uLCBZb3UgbXVzdCBtYWtlIGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgbGljZW5zZSB0ZXJtcyBhcHBseWluZyB0byBzdWNoIFNvZnR3YXJlIG9yIE1vZGlmaWNhdGlvbiB0aGF0IGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSBhbmQgbm90IGJ5IFlhaG9vISwgYW5kIHRoYXQgc3VjaCBsaWNlbnNlIGRvZXMgbm90IHJlc3RyaWN0IHJlY2lwaWVudHMgZnJvbSBleGVyY2lzaW5nIHJpZ2h0cyBpbiB0aGUgc291cmNlIGNvZGUgdG8gdGhlIFNvZnR3YXJlIGdyYW50ZWQgYnkgWWFob28hIHVuZGVyIHRoaXMgQWdyZWVtZW50IG9yIHJpZ2h0cyBpbiB0aGUgc291cmNlIGNvZGUgdG8gYW55IE1vZGlmaWNhdGlvbiBncmFudGVkIGJ5IFlvdSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAxLjMuCisxLjUgLSBUaGlzIEFncmVlbWVudCBkb2VzIG5vdCBsaW1pdCBZb3VyIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgZmlsZXMgdGhhdCBhcmUgZW50aXJlbHkgWW91ciBvd24gd29yayAoaS5lLiwgd2hpY2ggZG8gbm90IGluY29ycG9yYXRlIGFueSBwb3J0aW9uIG9mIHRoZSBTb2Z0d2FyZSBhbmQgYXJlIG5vdCBNb2RpZmljYXRpb25zKSB1bmRlciBhbnkgdGVybXMgWW91IGNob29zZS4KK1N1cHBvcnQKK1lhaG9vISBoYXMgbm8gb2JsaWdhdGlvbiB0byBwcm92aWRlIHRlY2huaWNhbCBzdXBwb3J0IG9yIHVwZGF0ZXMgdG8gWW91LiBOb3RoaW5nIGluIHRoaXMgQWdyZWVtZW50IHJlcXVpcmVzIFlhaG9vISB0byBlbnRlciBpbnRvIGFueSBsaWNlbnNlIHdpdGggWW91IGZvciBhbnkgb3RoZXIgZWRpdGlvbiBvZiB0aGUgU29mdHdhcmUuCitJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzCiszLjEgLSBFeGNlcHQgZm9yIHRoZSBsaWNlbnNlIGV4cHJlc3NseSBncmFudGVkIHVuZGVyIGNvcHlyaWdodCBpbiBTZWN0aW9uIDEuMSwgbm8gcmlnaHRzLCBsaWNlbnNlcyBvciBmb3JiZWFyYW5jZXMgYXJlIGdyYW50ZWQgb3IgbWF5IGFyaXNlIGluIHJlbGF0aW9uIHRvIHRoaXMgQWdyZWVtZW50IHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXhoYXVzdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzLCBpbmNsdWRpbmcgYWxsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMsIHRoYXQgYXJlIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgaGVyZWJ5IHJlc2VydmVkLgorMy4yIC0gSW4gYW55IGNvcHkgb2YgdGhlIFNvZnR3YXJlIG9yIGluIGFueSBNb2RpZmljYXRpb24geW91IGNyZWF0ZSwgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UsIGFueSBhbmQgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZCBhdHRyaWJ1dGlvbiBub3RpY2VzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBTb2Z0d2FyZSBpbiB0aGUgc2FtZSBmb3JtIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBTb2Z0d2FyZS4gVGhpcyBpbmNsdWRlcyB0aGUgcHJlc2VydmF0aW9uIG9mIGF0dHJpYnV0aW9uIG5vdGljZXMgaW4gdGhlIGZvcm0gb2YgdHJhZGVtYXJrcyBvciBsb2dvcyB0aGF0IGV4aXN0IHdpdGhpbiBhIHVzZXIgaW50ZXJmYWNlIG9mIHRoZSBTb2Z0d2FyZS4KKzMuMyAtIFRoaXMgbGljZW5zZSBkb2VzIG5vdCBncmFudCBZb3UgcmlnaHRzIHRvIHVzZSBhbnkgcGFydHlgcyBuYW1lLCBsb2dvLCBvciB0cmFkZW1hcmtzLCBleGNlcHQgc29sZWx5IGFzIG5lY2Vzc2FyeSB0byBjb21wbHkgd2l0aCBTZWN0aW9uIDMuMi4KK0Rpc2NsYWltZXIgb2YgV2FycmFudGllcworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIFlBSE9PISBNQUtFUyBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQsIE9SIFNUQVRVVE9SWSBSRUdBUkRJTkcgT1IgUkVMQVRJTkcgVE8gVEhFIFNPRlRXQVJFLiBTUEVDSUZJQ0FMTFksIFlBSE9PISBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIFNPRlRXQVJFIFdJTEwgQkUgRVJST1IgRlJFRSBPUiBXSUxMIFBFUkZPUk0gSU4gQU4gVU5JTlRFUlJVUFRFRCBNQU5ORVIuIFRPIFRIRSBHUkVBVEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIFlBSE9PISBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSAoRVZFTiBJRiBZQUhPTyEgSEFEIEJFRU4gSU5GT1JNRUQgT0YgU1VDSCBQVVJQT1NFKSwgQU5EIE5PTklORlJJTkdFTUVOVCBXSVRIIFJFU1BFQ1QgVE8gVEhFIFNPRlRXQVJFLCBBTlkgTU9ESUZJQ0FUSU9OUyBUSEVSRVRPIEFORCBXSVRIIFJFU1BFQ1QgVE8gVEhFIFVTRSBPRiBUSEUgRk9SRUdPSU5HLgorTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkKK0lOIE5PIEVWRU5UIFdJTEwgWUFIT08hIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5EIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1MgT0YgUFJPRklUUywgTE9TUyBPRiBVU0UsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBEQVRBLCBDT1NUIE9GIENPVkVSKSBJTiBDT05ORUNUSU9OIFdJVEggT1IgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhFIEZVUk5JU0hJTkcsIFBFUkZPUk1BTkNFIE9SIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgQU5ZIE9USEVSIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgV0hFVEhFUiBBTExFR0VEIEFTIEEgQlJFQUNIIE9GIENPTlRSQUNUIE9SIFRPUlRJT1VTIENPTkRVQ1QsIElOQ0xVRElORyBORUdMSUdFTkNFLCBBTkQgRVZFTiBJRiBZQUhPTyEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorVGVybSBhbmQgVGVybWluYXRpb24KKzYuMSAtIFRoaXMgQWdyZWVtZW50IHdpbGwgY29udGludWUgaW4gZWZmZWN0IHVubGVzcyBhbmQgdW50aWwgdGVybWluYXRlZCBlYXJsaWVyIHB1cnN1YW50IHRvIHRoaXMgU2VjdGlvbiA2LgorNi4yIC0gSW4gdGhlIGV2ZW50IFlvdSB2aW9sYXRlIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgWWFob28hIG1heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQuCis2LjMgLSBBbGwgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIgc2hhbGwgdGVybWluYXRlIHVwb24gdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LiBUZXJtaW5hdGlvbiB3aWxsIGJlIGluIGFkZGl0aW9uIHRvIGFueSByaWdodHMgYW5kIHJlbWVkaWVzIGF2YWlsYWJsZSB0byBZYWhvbyEgYXQgbGF3IG9yIGVxdWl0eSBvciB1bmRlciB0aGlzIEFncmVlbWVudC4KKzYuNCAtIFRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGFmZmVjdCB0aGUgcHJvdmlzaW9ucyByZWdhcmRpbmcgcmVzZXJ2YXRpb24gb2YgcmlnaHRzIChTZWN0aW9uIDMuMSksIHByb3Zpc2lvbnMgZGlzY2xhaW1pbmcgb3IgbGltaXRpbmcgWWFob28hYHMgbGlhYmlsaXR5IChTZWN0aW9ucyA0IGFuZCA1KSwgVGVybWluYXRpb24gKFNlY3Rpb24gNikgb3IgTWlzY2VsbGFuZW91cyAoU2VjdGlvbiA3KSwgd2hpY2ggcHJvdmlzaW9ucyB3aWxsIHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCitNaXNjZWxsYW5lb3VzCitUaGlzIEFncmVlbWVudCBjb250YWlucyB0aGUgZW50aXJlIGFncmVlbWVudCBvZiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBzdXBlcnNlZGVzIGFsbCBwcmV2aW91cyBjb21tdW5pY2F0aW9ucywgcmVwcmVzZW50YXRpb25zLCB1bmRlcnN0YW5kaW5ncyBhbmQgYWdyZWVtZW50cywgZWl0aGVyIG9yYWwgb3Igd3JpdHRlbiwgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gc2FpZCBzdWJqZWN0IG1hdHRlci4gVGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUgcGFydGllcyBoZXJldW5kZXIgaXMgdGhhdCBvZiBpbmRlcGVuZGVudCBjb250cmFjdG9ycywgYW5kIHRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gdGhlIHBhcnRpZXMuIElmIGFueSB0ZXJtLCBjb25kaXRpb24sIG9yIHByb3Zpc2lvbiBpbiB0aGlzIEFncmVlbWVudCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLCB1bmxhd2Z1bCBvciB1bmVuZm9yY2VhYmxlIHRvIGFueSBleHRlbnQsIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgY29uc3RydWVkIGluIGEgbWFubmVyIHRoYXQgbW9zdCBjbG9zZWx5IGVmZmVjdHVhdGVzIHRoZSBpbnRlbnQgb2YgdGhpcyBBZ3JlZW1lbnQuIFN1Y2ggaW52YWxpZCB0ZXJtLCBjb25kaXRpb24gb3IgcHJvdmlzaW9uIHdpbGwgYmUgc2V2ZXJlZCBmcm9tIHRoZSByZW1haW5pbmcgdGVybXMsIGNvbmRpdGlvbnMgYW5kIHByb3Zpc2lvbnMsIHdoaWNoIHdpbGwgY29udGludWUgdG8gYmUgdmFsaWQgYW5kIGVuZm9yY2VhYmxlIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LiBUaGlzIEFncmVlbWVudCB3aWxsIGJlIGludGVycHJldGVkIGFuZCBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhIGFuZCB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCB3aXRob3V0IHJlZ2FyZCB0byBjb25mbGljdCBvZiBsYXcgcHJpbmNpcGxlcy4gVGhlIFUuTi4gQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgQWdyZWVtZW50LiBBbGwgZGlzcHV0ZXMgYXJpc2luZyBvdXQgb2YgdGhpcyBBZ3JlZW1lbnQgaW52b2x2aW5nIFlhaG9vISBvciBhbnkgb2YgaXRzIHN1YnNpZGlhcmllcyBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGZlZGVyYWwgb3Igc3RhdGUgY291cnRzIG9mIG5vcnRoZXJuIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLiBObyByaWdodHMgbWF5IGJlIGFzc2lnbmVkLCBubyBvYmxpZ2F0aW9ucyBtYXkgYmUgZGVsZWdhdGVkLCBhbmQgdGhpcyBBZ3JlZW1lbnQgbWF5IG5vdCBiZSB0cmFuc2ZlcnJlZCBieSBZb3UsIGluIHdob2xlIG9yIGluIHBhcnQsIHdoZXRoZXIgdm9sdW50YXJ5IG9yIGJ5IG9wZXJhdGlvbiBvZiBsYXcsIGluY2x1ZGluZyBieSB3YXkgb2Ygc2FsZSBvZiBhc3NldHMsIG1lcmdlciBvciBjb25zb2xpZGF0aW9uLCB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgWWFob28hLCBhbmQgYW55IHB1cnBvcnRlZCBhc3NpZ25tZW50LCBkZWxlZ2F0aW9uIG9yIHRyYW5zZmVyIHdpdGhvdXQgc3VjaCBjb25zZW50IHNoYWxsIGJlIHZvaWQgYWIgaW5pdGlvLiBBbnkgd2FpdmVyIG9mIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IG9yIG9mIGEgcGFydHlgcyByaWdodHMgb3IgcmVtZWRpZXMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbiB3cml0aW5nIHRvIGJlIGVmZmVjdGl2ZS4gRmFpbHVyZSwgbmVnbGVjdCBvciBkZWxheSBieSBhIHBhcnR5IHRvIGVuZm9yY2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgaXRzIHJpZ2h0cyBvciByZW1lZGllcyBhdCBhbnkgdGltZSwgd2lsbCBub3QgYmUgY29uc3RydWVkIG9yIGJlIGRlZW1lZCB0byBiZSBhIHdhaXZlciBvZiBzdWNoIHBhcnR5YHMgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCB3aWxsIG5vdCBpbiBhbnkgd2F5IGFmZmVjdCB0aGUgdmFsaWRpdHkgb2YgdGhlIHdob2xlIG9yIGFueSBwYXJ0IG9mIHRoaXMgQWdyZWVtZW50IG9yIHByZWp1ZGljZSBzdWNoIHBhcnR5YHMgcmlnaHQgdG8gdGFrZSBzdWJzZXF1ZW50IGFjdGlvbi4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aUEwtMS4xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aUEwtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YWFiZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1pQTC0xLjEKQEAgLTAsMCArMSwyOCBAQAorCitab3BlIFB1YmxpYyBMaWNlbnNlIChaUEwpIFZlcnNpb24gMS4xCisKK0NvcHlyaWdodCAoYykgWm9wZSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBsaWNlbnNlIGhhcyBiZWVuIGNlcnRpZmllZCBhcyBvcGVuIHNvdXJjZS4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCitSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK0FsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgYW5kIGRvY3VtZW50YXRpb24gbWVudGlvbmluZyBmZWF0dXJlcyBkZXJpdmVkIGZyb20gb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgWm9wZSBDb3Jwb3JhdGlvbiBmb3IgdXNlIGluIHRoZSBaIE9iamVjdCBQdWJsaXNoaW5nIEVudmlyb25tZW50IChodHRwOi8vd3d3LnpvcGUuY29tLykuIgorCitJbiB0aGUgZXZlbnQgdGhhdCB0aGUgcHJvZHVjdCBiZWluZyBhZHZlcnRpc2VkIGluY2x1ZGVzIGFuIGludGFjdCBab3BlIGRpc3RyaWJ1dGlvbiAod2l0aCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5jbHVkZWQpIHRoZW4gdGhpcyBjbGF1c2UgaXMgd2FpdmVkLgorCitOYW1lcyBhc3NvY2lhdGVkIHdpdGggWm9wZSBvciBab3BlIENvcnBvcmF0aW9uIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gWm9wZSBDb3Jwb3JhdGlvbi4KK01vZGlmaWVkIHJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBab3BlIENvcnBvcmF0aW9uIGZvciB1c2UgaW4gdGhlIFogT2JqZWN0IFB1Ymxpc2hpbmcgRW52aXJvbm1lbnQgKGh0dHA6Ly93d3cuem9wZS5jb20vKS4iCisKK0ludGFjdCAocmUtKWRpc3RyaWJ1dGlvbnMgb2YgYW55IG9mZmljaWFsIFpvcGUgcmVsZWFzZSBkbyBub3QgcmVxdWlyZSBhbiBleHRlcm5hbCBhY2tub3dsZWRnZW1lbnQuCisKK01vZGlmaWNhdGlvbnMgYXJlIGVuY291cmFnZWQgYnV0IG11c3QgYmUgcGFja2FnZWQgc2VwYXJhdGVseSBhcyBwYXRjaGVzIHRvIG9mZmljaWFsIFpvcGUgcmVsZWFzZXMuIERpc3RyaWJ1dGlvbnMgdGhhdCBkbyBub3QgY2xlYXJseSBzZXBhcmF0ZSB0aGUgcGF0Y2hlcyBmcm9tIHRoZSBvcmlnaW5hbCB3b3JrIG11c3QgYmUgY2xlYXJseSBsYWJlbGVkIGFzIHVub2ZmaWNpYWwgZGlzdHJpYnV0aW9ucy4gTW9kaWZpY2F0aW9ucyB3aGljaCBkbyBub3QgY2FycnkgdGhlIG5hbWUgWm9wZSBtYXkgYmUgcGFja2FnZWQgaW4gYW55IGZvcm0sIGFzIGxvbmcgYXMgdGhleSBjb25mb3JtIHRvIGFsbCBvZiB0aGUgY2xhdXNlcyBhYm92ZS4KK0Rpc2NsYWltZXIKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgWk9QRSBDT1JQT1JBVElPTiBgYEFTIElTYGAgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBaT1BFIENPUlBPUkFUSU9OIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK1RoaXMgc29mdHdhcmUgY29uc2lzdHMgb2YgY29udHJpYnV0aW9ucyBtYWRlIGJ5IFpvcGUgQ29ycG9yYXRpb24gYW5kIG1hbnkgaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIFpvcGUgQ29ycG9yYXRpb24uIFNwZWNpZmljIGF0dHJpYnV0aW9ucyBhcmUgbGlzdGVkIGluIHRoZSBhY2NvbXBhbnlpbmcgY3JlZGl0cyBmaWxlLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1pQTC0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1pQTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FlMjA4MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWlBMLTIuMApAQCAtMCwwICsxLDYxIEBACisKK1pvcGUgUHVibGljIExpY2Vuc2UgKFpQTCkgVmVyc2lvbiAyLjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc29mdHdhcmUgaXMgQ29weXJpZ2h0IChjKSBab3BlIENvcnBvcmF0aW9uICh0bSkgYW5kCitDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoaXMgbGljZW5zZSBoYXMgYmVlbiBjZXJ0aWZpZWQgYXMgb3BlbiBzb3VyY2UuIEl0IGhhcyBhbHNvCitiZWVuIGRlc2lnbmF0ZWQgYXMgR1BMIGNvbXBhdGlibGUgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24gKEZTRikuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKK3dpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlCitmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAgIGRpc2NsYWltZXIuCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKzMuIFRoZSBuYW1lIFpvcGUgQ29ycG9yYXRpb24gKHRtKSBtdXN0IG5vdCBiZSB1c2VkIHRvCisgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gWm9wZSBDb3Jwb3JhdGlvbi4KKworNC4gVGhlIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBvciB0byB1c2UgaXQgZm9yCisgICBhbnkgcHVycG9zZSBkb2VzIG5vdCBnaXZlIHlvdSB0aGUgcmlnaHQgdG8gdXNlIFNlcnZpY2VtYXJrcworICAgKHNtKSBvciBUcmFkZW1hcmtzICh0bSkgb2YgWm9wZSBDb3Jwb3JhdGlvbi4gVXNlIG9mIHRoZW0gaXMKKyAgIGNvdmVyZWQgaW4gYSBzZXBhcmF0ZSBhZ3JlZW1lbnQgKHNlZQorICAgaHR0cDovL3d3dy56b3BlLmNvbS9NYXJrcykuCisKKzUuIElmIGFueSBmaWxlcyBhcmUgbW9kaWZpZWQsIHlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZAorICAgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkCisgICB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKK0Rpc2NsYWltZXIKKworICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFpPUEUgQ09SUE9SQVRJT04gYGBBUyBJU2BgCisgIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQKKyAgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCisgIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCisgIE5PIEVWRU5UIFNIQUxMIFpPUEUgQ09SUE9SQVRJT04gT1IgSVRTIENPTlRSSUJVVE9SUyBCRQorICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgIERBTUFHRS4KKworCitUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBab3BlCitDb3Jwb3JhdGlvbiBhbmQgbWFueSBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgWm9wZQorQ29ycG9yYXRpb24uICBTcGVjaWZpYyBhdHRyaWJ1dGlvbnMgYXJlIGxpc3RlZCBpbiB0aGUKK2FjY29tcGFueWluZyBjcmVkaXRzIGZpbGUuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWlBMLTIuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWlBMLTIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDlkNDNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aUEwtMi4xCkBAIC0wLDAgKzEsMTggQEAKKworWlBMIDIuMQorWm9wZSBQdWJsaWMgTGljZW5zZSAoWlBMKSBWZXJzaW9uIDIuMQorCitBIGNvcHlyaWdodCBub3RpY2UgYWNjb21wYW5pZXMgdGhpcyBsaWNlbnNlIGRvY3VtZW50IHRoYXQgaWRlbnRpZmllcyB0aGUgY29weXJpZ2h0IGhvbGRlcnMuCisKK1RoaXMgbGljZW5zZSBoYXMgYmVlbiBjZXJ0aWZpZWQgYXMgb3BlbiBzb3VyY2UuIEl0IGhhcyBhbHNvIGJlZW4gZGVzaWduYXRlZCBhcyBHUEwgY29tcGF0aWJsZSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChGU0YpLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBpbiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWNjb21wYW55aW5nIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhY2NvbXBhbnlpbmcgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitOYW1lcyBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSB0aGUgY29weXJpZ2h0IGhvbGRlcnMuCitUaGUgcmlnaHQgdG8gZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIG9yIHRvIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UgZG9lcyBub3QgZ2l2ZSB5b3UgdGhlIHJpZ2h0IHRvIHVzZSBTZXJ2aWNlbWFya3MgKHNtKSBvciBUcmFkZW1hcmtzICh0bSkgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzLiBVc2Ugb2YgdGhlbSBpcyBjb3ZlcmVkIGJ5IHNlcGFyYXRlIGFncmVlbWVudCB3aXRoIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4KK0lmIGFueSBmaWxlcyBhcmUgbW9kaWZpZWQsIHlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorRGlzY2xhaW1lcgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1ppbWJyYS0xLjMgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1ppbWJyYS0xLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzliN2IzNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWmltYnJhLTEuMwpAQCAtMCwwICsxLDMwIEBACisKK1ppbWJyYSBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAxLjMgKFpQTCkKK1RoaXMgWmltYnJhIFB1YmxpYyBMaWNlbnNlICh0aGlzICJBZ3JlZW1lbnQiKSBpcyBhIGxlZ2FsIGFncmVlbWVudCB0aGF0IGRlc2NyaWJlcyB0aGUgdGVybXMgdW5kZXIgd2hpY2ggVk13YXJlLCBJbmMuLCBhIERlbGF3YXJlIGNvcnBvcmF0aW9uIGhhdmluZyBpdHMgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGF0IDM0MDEgSGlsbHZpZXcgQXZlbnVlLCBQYWxvIEFsdG8sIENhbGlmb3JuaWEgOTQzMDQgKCJWTXdhcmUiKSB3aWxsIHByb3ZpZGUgc29mdHdhcmUgdG8geW91IHZpYSBkb3dubG9hZCBvciBvdGhlcndpc2UgKCJTb2Z0d2FyZSIpLiBCeSB1c2luZyB0aGUgU29mdHdhcmUsIHlvdSwgYW4gaW5kaXZpZHVhbCBvciBhbiBlbnRpdHkgKCJZb3UiKSBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgdGhlIG11dHVhbCBwcm9taXNlcyBhbmQgdXBvbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGJlbG93LCB0aGUgcGFydGllcyBhZ3JlZSBhcyBmb2xsb3dzOgorCisxLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZQorMS4xIC0gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIFZNd2FyZSBoZXJlYnkgZ3JhbnRzIHRvIFlvdSwgdW5kZXIgYW55IGFuZCBhbGwgb2YgaXRzIGNvcHlyaWdodCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIFNvZnR3YXJlLCBhIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSBsaWNlbnNlIHRvIGNvcHksIG1vZGlmeSwgY29tcGlsZSwgZXhlY3V0ZSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBNb2RpZmljYXRpb25zLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgQWdyZWVtZW50LCBhbnkgY2hhbmdlIHRvLCBhZGRpdGlvbiB0bywgb3IgYWJyaWRnZW1lbnQgb2YgdGhlIFNvZnR3YXJlIG1hZGUgYnkgWW91IGlzIGEgIk1vZGlmaWNhdGlvbjsiIGhvd2V2ZXIsIGFueSBmaWxlIFlvdSBhZGQgdG8gdGhlIFNvZnR3YXJlIHRoYXQgZG9lcyBub3QgY29udGFpbiBhbnkgcGFydCBvZiB0aGUgU29mdHdhcmUgaXMgbm90IGEgIk1vZGlmaWNhdGlvbi4iCisxLjIgLSBJZiBZb3UgYXJlIGFuIGluZGl2aWR1YWwgYWN0aW5nIG9uIGJlaGFsZiBvZiBhIGNvcnBvcmF0aW9uIG9yIG90aGVyIGVudGl0eSwgWW91ciB1c2Ugb2YgdGhlIFNvZnR3YXJlIG9yIGFueSBNb2RpZmljYXRpb24gaXMgc3ViamVjdCB0byBZb3VyIGhhdmluZyB0aGUgYXV0aG9yaXR5IHRvIGJpbmQgc3VjaCBjb3Jwb3JhdGlvbiBvciBlbnRpdHkgdG8gdGhpcyBBZ3JlZW1lbnQuIFByb3ZpZGluZyBjb3BpZXMgdG8gcGVyc29ucyB3aXRoaW4gc3VjaCBjb3Jwb3JhdGlvbiBvciBlbnRpdHkgaXMgbm90IGNvbnNpZGVyZWQgZGlzdHJpYnV0aW9uIGZvciBwdXJwb3NlcyBvZiB0aGlzIEFncmVlbWVudC4KKzEuMyAtIEZvciB0aGUgU29mdHdhcmUgb3IgYW55IE1vZGlmaWNhdGlvbiBZb3UgZGlzdHJpYnV0ZSBpbiBzb3VyY2UgY29kZSBmb3JtYXQsIFlvdSBtdXN0IGRvIHNvIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgd2l0aCBZb3VyIGRpc3RyaWJ1dGlvbi4gV2l0aCByZXNwZWN0IHRvIGFueSBNb2RpZmljYXRpb24gWW91IGRpc3RyaWJ1dGUgaW4gc291cmNlIGNvZGUgZm9ybWF0LCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBhcHBseSB0byBZb3UgaW4gdGhlIHNhbWUgd2F5IHRob3NlIHRlcm1zIGFwcGx5IHRvIFZNd2FyZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFNvZnR3YXJlLiBJbiBvdGhlciB3b3Jkcywgd2hlbiBZb3UgYXJlIGRpc3RyaWJ1dGluZyBNb2RpZmljYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBZb3UgInN0YW5kIGluIHRoZSBzaG9lcyIgb2YgVk13YXJlIGluIHRlcm1zIG9mIHRoZSByaWdodHMgWW91IGdyYW50IGFuZCBob3cgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGFwcGx5IHRvIFlvdSBhbmQgdGhlIGxpY2Vuc2VlcyBvZiBZb3VyIE1vZGlmaWNhdGlvbnMuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCB3aGVuIFlvdSAic3RhbmQgaW4gdGhlIHNob2VzIiBvZiBWTXdhcmUsIFlvdSBhcmUgbm90IHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBwcm92aXNpb24gdW5kZXIgU2VjdGlvbiA3LCB3aGljaCByZXF1aXJlcyBhbGwgZGlzcHV0ZXMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdG8gYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIGZlZGVyYWwgb3Igc3RhdGUgY291cnRzIG9mIG5vcnRoZXJuIENhbGlmb3JuaWEuCisxLjQgLSBGb3IgdGhlIFNvZnR3YXJlIG9yIGFueSBNb2RpZmljYXRpb24gWW91IGRpc3RyaWJ1dGUgaW4gY29tcGlsZWQgb3Igb2JqZWN0IGNvZGUgZm9ybWF0LCBZb3UgbXVzdCBhbHNvIHByb3ZpZGUgcmVjaXBpZW50cyB3aXRoIGFjY2VzcyB0byB0aGUgU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9uIGluIHNvdXJjZSBjb2RlIGZvcm1hdCBhbG9uZyB3aXRoIGEgY29tcGxldGUgY29weSBvZiB0aGlzIEFncmVlbWVudC4gVGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9ucyBpbiBjb21waWxlZCBvciBvYmplY3QgY29kZSBmb3JtYXQgbWF5IGJlIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIEluIGFkZGl0aW9uLCBZb3UgbXVzdCBtYWtlIGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgbGljZW5zZSB0ZXJtcyBhcHBseWluZyB0byBzdWNoIFNvZnR3YXJlIG9yIE1vZGlmaWNhdGlvbiB0aGF0IGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSBhbmQgbm90IGJ5IFZNd2FyZSwgYW5kIHRoYXQgc3VjaCBsaWNlbnNlIGRvZXMgbm90IHJlc3RyaWN0IHJlY2lwaWVudHMgZnJvbSBleGVyY2lzaW5nIHJpZ2h0cyBpbiB0aGUgc291cmNlIGNvZGUgdG8gdGhlIFNvZnR3YXJlIGdyYW50ZWQgYnkgVk13YXJlIHVuZGVyIHRoaXMgQWdyZWVtZW50IG9yIHJpZ2h0cyBpbiB0aGUgc291cmNlIGNvZGUgdG8gYW55IE1vZGlmaWNhdGlvbiBncmFudGVkIGJ5IFlvdSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAxLjMuCisxLjUgLSBUaGlzIEFncmVlbWVudCBkb2VzIG5vdCBsaW1pdCBZb3VyIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgZmlsZXMgdGhhdCBhcmUgZW50aXJlbHkgWW91ciBvd24gd29yayAoaS5lLiwgd2hpY2ggZG8gbm90IGluY29ycG9yYXRlIGFueSBwb3J0aW9uIG9mIHRoZSBTb2Z0d2FyZSBhbmQgYXJlIG5vdCBNb2RpZmljYXRpb25zKSB1bmRlciBhbnkgdGVybXMgWW91IGNob29zZS4KKzIuIFN1cHBvcnQKK1ZNd2FyZSBoYXMgbm8gb2JsaWdhdGlvbiB0byBwcm92aWRlIHRlY2huaWNhbCBzdXBwb3J0IG9yIHVwZGF0ZXMgdG8gWW91LiBOb3RoaW5nIGluIHRoaXMgQWdyZWVtZW50IHJlcXVpcmVzIFZNd2FyZSB0byBlbnRlciBpbnRvIGFueSBsaWNlbnNlIHdpdGggWW91IGZvciBhbnkgb3RoZXIgZWRpdGlvbiBvZiB0aGUgU29mdHdhcmUuCiszLiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzCiszLjEgLSBFeGNlcHQgZm9yIHRoZSBsaWNlbnNlIGV4cHJlc3NseSBncmFudGVkIHVuZGVyIGNvcHlyaWdodCBpbiBTZWN0aW9uIDEuMSwgbm8gcmlnaHRzLCBsaWNlbnNlcyBvciBmb3JiZWFyYW5jZXMgYXJlIGdyYW50ZWQgb3IgbWF5IGFyaXNlIGluIHJlbGF0aW9uIHRvIHRoaXMgQWdyZWVtZW50IHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXhoYXVzdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzLCBpbmNsdWRpbmcgYWxsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMsIHRoYXQgYXJlIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgaGVyZWJ5IHJlc2VydmVkLgorMy4yIC0gSW4gYW55IGNvcHkgb2YgdGhlIFNvZnR3YXJlIG9yIGluIGFueSBNb2RpZmljYXRpb24geW91IGNyZWF0ZSwgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UsIGFueSBhbmQgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZCBhdHRyaWJ1dGlvbiBub3RpY2VzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBTb2Z0d2FyZSBpbiB0aGUgc2FtZSBmb3JtIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBTb2Z0d2FyZS4gVGhpcyBpbmNsdWRlcyB0aGUgcHJlc2VydmF0aW9uIG9mIGF0dHJpYnV0aW9uIG5vdGljZXMgaW4gdGhlIGZvcm0gb2YgdHJhZGVtYXJrcyBvciBsb2dvcyB0aGF0IGV4aXN0IHdpdGhpbiBhIHVzZXIgaW50ZXJmYWNlIG9mIHRoZSBTb2Z0d2FyZS4KKzMuMyAtIFRoaXMgbGljZW5zZSBkb2VzIG5vdCBncmFudCBZb3UgcmlnaHRzIHRvIHVzZSBhbnkgcGFydHlgcyBuYW1lLCBsb2dvLCBvciB0cmFkZW1hcmtzLCBleGNlcHQgc29sZWx5IGFzIG5lY2Vzc2FyeSB0byBjb21wbHkgd2l0aCBTZWN0aW9uIDMuMi4KKzQuIERpc2NsYWltZXIgb2YgV2FycmFudGllcworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIFZNV0FSRSBNQUtFUyBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQsIE9SIFNUQVRVVE9SWSBSRUdBUkRJTkcgT1IgUkVMQVRJTkcgVE8gVEhFIFNPRlRXQVJFLiBTUEVDSUZJQ0FMTFksIFZNV0FSRSBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIFNPRlRXQVJFIFdJTEwgQkUgRVJST1IgRlJFRSBPUiBXSUxMIFBFUkZPUk0gSU4gQU4gVU5JTlRFUlJVUFRFRCBNQU5ORVIuIFRPIFRIRSBHUkVBVEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIFZNV0FSRSBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSAoRVZFTiBJRiBWTVdBUkUgSEFEIEJFRU4gSU5GT1JNRUQgT0YgU1VDSCBQVVJQT1NFKSwgQU5EIE5PTklORlJJTkdFTUVOVCBXSVRIIFJFU1BFQ1QgVE8gVEhFIFNPRlRXQVJFLCBBTlkgTU9ESUZJQ0FUSU9OUyBUSEVSRVRPIEFORCBXSVRIIFJFU1BFQ1QgVE8gVEhFIFVTRSBPRiBUSEUgRk9SRUdPSU5HLgorNS4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkKK0lOIE5PIEVWRU5UIFdJTEwgVk1XQVJFIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5EIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1MgT0YgUFJPRklUUywgTE9TUyBPRiBVU0UsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBEQVRBLCBDT1NUIE9GIENPVkVSKSBJTiBDT05ORUNUSU9OIFdJVEggT1IgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhFIEZVUk5JU0hJTkcsIFBFUkZPUk1BTkNFIE9SIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgQU5ZIE9USEVSIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgV0hFVEhFUiBBTExFR0VEIEFTIEEgQlJFQUNIIE9GIENPTlRSQUNUIE9SIFRPUlRJT1VTIENPTkRVQ1QsIElOQ0xVRElORyBORUdMSUdFTkNFLCBBTkQgRVZFTiBJRiBWTVdBUkUgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorNi4gVGVybSBhbmQgVGVybWluYXRpb24KKzYuMSAtIFRoaXMgQWdyZWVtZW50IHdpbGwgY29udGludWUgaW4gZWZmZWN0IHVubGVzcyBhbmQgdW50aWwgdGVybWluYXRlZCBlYXJsaWVyIHB1cnN1YW50IHRvIHRoaXMgU2VjdGlvbiA2LgorNi4yIC0gSW4gdGhlIGV2ZW50IFlvdSB2aW9sYXRlIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgVk13YXJlIG1heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQuCis2LjMgLSBBbGwgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIgc2hhbGwgdGVybWluYXRlIHVwb24gdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LiBUZXJtaW5hdGlvbiB3aWxsIGJlIGluIGFkZGl0aW9uIHRvIGFueSByaWdodHMgYW5kIHJlbWVkaWVzIGF2YWlsYWJsZSB0byBWTXdhcmUgYXQgbGF3IG9yIGVxdWl0eSBvciB1bmRlciB0aGlzIEFncmVlbWVudC4KKzYuNCAtIFRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGFmZmVjdCB0aGUgcHJvdmlzaW9ucyByZWdhcmRpbmcgcmVzZXJ2YXRpb24gb2YgcmlnaHRzIChTZWN0aW9uIDMuMSksIHByb3Zpc2lvbnMgZGlzY2xhaW1pbmcgb3IgbGltaXRpbmcgVk13YXJlYHMgbGlhYmlsaXR5IChTZWN0aW9ucyA0IGFuZCA1KSwgVGVybWluYXRpb24gKFNlY3Rpb24gNikgb3IgTWlzY2VsbGFuZW91cyAoU2VjdGlvbiA3KSwgd2hpY2ggcHJvdmlzaW9ucyB3aWxsIHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCis3LiBNaXNjZWxsYW5lb3VzCitUaGlzIEFncmVlbWVudCBjb250YWlucyB0aGUgZW50aXJlIGFncmVlbWVudCBvZiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBzdXBlcnNlZGVzIGFsbCBwcmV2aW91cyBjb21tdW5pY2F0aW9ucywgcmVwcmVzZW50YXRpb25zLCB1bmRlcnN0YW5kaW5ncyBhbmQgYWdyZWVtZW50cywgZWl0aGVyIG9yYWwgb3Igd3JpdHRlbiwgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gc2FpZCBzdWJqZWN0IG1hdHRlci4gVGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUgcGFydGllcyBoZXJldW5kZXIgaXMgdGhhdCBvZiBpbmRlcGVuZGVudCBjb250cmFjdG9ycywgYW5kIHRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gdGhlIHBhcnRpZXMuIElmIGFueSB0ZXJtLCBjb25kaXRpb24sIG9yIHByb3Zpc2lvbiBpbiB0aGlzIEFncmVlbWVudCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLCB1bmxhd2Z1bCBvciB1bmVuZm9yY2VhYmxlIHRvIGFueSBleHRlbnQsIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgY29uc3RydWVkIGluIGEgbWFubmVyIHRoYXQgbW9zdCBjbG9zZWx5IGVmZmVjdHVhdGVzIHRoZSBpbnRlbnQgb2YgdGhpcyBBZ3JlZW1lbnQuIFN1Y2ggaW52YWxpZCB0ZXJtLCBjb25kaXRpb24gb3IgcHJvdmlzaW9uIHdpbGwgYmUgc2V2ZXJlZCBmcm9tIHRoZSByZW1haW5pbmcgdGVybXMsIGNvbmRpdGlvbnMgYW5kIHByb3Zpc2lvbnMsIHdoaWNoIHdpbGwgY29udGludWUgdG8gYmUgdmFsaWQgYW5kIGVuZm9yY2VhYmxlIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LiBUaGlzIEFncmVlbWVudCB3aWxsIGJlIGludGVycHJldGVkIGFuZCBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhIGFuZCB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCB3aXRob3V0IHJlZ2FyZCB0byBjb25mbGljdCBvZiBsYXcgcHJpbmNpcGxlcy4gVGhlIFUuTi4gQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgQWdyZWVtZW50LiBBbGwgZGlzcHV0ZXMgYXJpc2luZyBvdXQgb2YgdGhpcyBBZ3JlZW1lbnQgaW52b2x2aW5nIFZNd2FyZSBvciBhbnkgb2YgaXRzIHN1YnNpZGlhcmllcyBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGZlZGVyYWwgb3Igc3RhdGUgY291cnRzIG9mIG5vcnRoZXJuIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLiBObyByaWdodHMgbWF5IGJlIGFzc2lnbmVkLCBubyBvYmxpZ2F0aW9ucyBtYXkgYmUgZGVsZWdhdGVkLCBhbmQgdGhpcyBBZ3JlZW1lbnQgbWF5IG5vdCBiZSB0cmFuc2ZlcnJlZCBieSBZb3UsIGluIHdob2xlIG9yIGluIHBhcnQsIHdoZXRoZXIgdm9sdW50YXJ5IG9yIGJ5IG9wZXJhdGlvbiBvZiBsYXcsIGluY2x1ZGluZyBieSB3YXkgb2Ygc2FsZSBvZiBhc3NldHMsIG1lcmdlciBvciBjb25zb2xpZGF0aW9uLCB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgVk13YXJlLCBhbmQgYW55IHB1cnBvcnRlZCBhc3NpZ25tZW50LCBkZWxlZ2F0aW9uIG9yIHRyYW5zZmVyIHdpdGhvdXQgc3VjaCBjb25zZW50IHNoYWxsIGJlIHZvaWQgYWIgaW5pdGlvLiBBbnkgd2FpdmVyIG9mIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IG9yIG9mIGEgcGFydHlgcyByaWdodHMgb3IgcmVtZWRpZXMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbiB3cml0aW5nIHRvIGJlIGVmZmVjdGl2ZS4gRmFpbHVyZSwgbmVnbGVjdCBvciBkZWxheSBieSBhIHBhcnR5IHRvIGVuZm9yY2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgaXRzIHJpZ2h0cyBvciByZW1lZGllcyBhdCBhbnkgdGltZSwgd2lsbCBub3QgYmUgY29uc3RydWVkIG9yIGJlIGRlZW1lZCB0byBiZSBhIHdhaXZlciBvZiBzdWNoIHBhcnR5YHMgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCB3aWxsIG5vdCBpbiBhbnkgd2F5IGFmZmVjdCB0aGUgdmFsaWRpdHkgb2YgdGhlIHdob2xlIG9yIGFueSBwYXJ0IG9mIHRoaXMgQWdyZWVtZW50IG9yIHByZWp1ZGljZSBzdWNoIHBhcnR5YHMgcmlnaHQgdG8gdGFrZSBzdWJzZXF1ZW50IGFjdGlvbi4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9abGliIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9abGliCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YjM4ODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1psaWIKQEAgLTAsMCArMSwyMSBAQAorCit6bGliIExpY2Vuc2UKKworCisgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGFzLWlzYCwgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyAgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKworICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKyAgMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAgICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAgICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisgIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAgMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2J6aXAyIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9iemlwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWM1OTlkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9iemlwMgpAQCAtMCwwICsxLDQxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHByb2dyYW0sICJiemlwMiIsIHRoZSBhc3NvY2lhdGVkIGxpYnJhcnkgImxpYmJ6aXAyIiwgYW5kIGFsbAorZG9jdW1lbnRhdGlvbiwgYXJlIGNvcHlyaWdodCAoQykgMTk5Ni0yMDEwIEp1bGlhbiBSIFNld2FyZC4gIEFsbAorcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdAorICAgbm90IGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gIElmIHlvdSB1c2UgdGhpcworICAgc29mdHdhcmUgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdAorICAgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZSBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorCiszLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0CisgICBub3QgYmUgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorCis0LiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICAgcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MKK09SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURQorR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK0p1bGlhbiBTZXdhcmQsIGpzZXdhcmRAYnppcC5vcmcKK2J6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjYgb2YgNiBTZXB0ZW1iZXIgMjAxMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9lQ29zLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZUNvcy0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzliNWQ2MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZUNvcy0yLjAKQEAgLTAsMCArMSwxOCBAQAorCitUaGUgZUNvcyBsaWNlbnNlIHZlcnNpb24gMi4wCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGVDb3MsIHRoZSBFbWJlZGRlZCBDb25maWd1cmFibGUgT3BlcmF0aW5nIFN5c3RlbS4gQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KK2VDb3MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK2VDb3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggZUNvczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIHdvcmtzIHRvIHByb2R1Y2UgYSB3b3JrIGJhc2VkIG9uIHRoaXMgZmlsZSwgdGhpcyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIHdvcmsgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIEhvd2V2ZXIgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGlzIGZpbGUgbXVzdCBzdGlsbCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggc2VjdGlvbiAoMykgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCitUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSBhIHdvcmsgYmFzZWQgb24gdGhpcyBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCitBbHRlcm5hdGl2ZSBsaWNlbnNlcyBmb3IgZUNvcyBtYXkgYmUgYXJyYW5nZWQgYnkgY29udGFjdGluZyBSZWQgSGF0LCBJbmMuIGF0IGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vZWNvcy9lY29zLWxpY2Vuc2UvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyMjI0VDT1NHUExDT1BZUklHSFRFTkQjIyMjCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZ1NPQVAtMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZ1NPQVAtMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjg2MzhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9nU09BUC0xCkBAIC0wLDAgKzEsMzgwIEBACisKK2dTT0FQIFB1YmxpYyBMaWNlbnNlCisKK1ZlcnNpb24gMS4zYgorCitUaGUgZ1NPQVAgcHVibGljIGxpY2Vuc2UgaXMgZGVyaXZlZCBmcm9tIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIChNUEwxLjEpLgorVGhlIHNlY3Rpb25zIHRoYXQgd2VyZSBkZWxldGVkIGZyb20gdGhlIG9yaWdpbmFsIE1QTDEuMSB0ZXh0IGFyZSAxLjAuMSwgMi4xLgorKGMpLChkKSwgMi4yLihjKSwoZCksIDguMi4oYiksIDEwLCBhbmQgMTEuIFNlY3Rpb24gMy44IHdhcyBhZGRlZC4gVGhlIG1vZGlmaWVkCitzZWN0aW9ucyBhcmUgMi4xLihiKSwgMi4yLihiKSwgMy4yIChzaW1wbGlmaWVkKSwgMy41IChkZWxldGVkIHRoZSBsYXN0CitzZW50ZW5jZSksIGFuZCAzLjYgKHNpbXBsaWZpZWQpLgorVGhpcyBsaWNlbnNlIGFwcGxpZXMgdG8gdGhlIGdTT0FQIHNvZnR3YXJlIHBhY2thZ2UsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUKK3NvYXBjcHAyIGFuZCB3c2RsMmggc291cmNlIGNvZGUgbG9jYXRlZCBpbiBnc29hcC9zcmMgYW5kIGdzb2FwL3dzZGwsIGFsbCBjb2RlCitnZW5lcmF0ZWQgYnkgc29hcGNwcDIgYW5kIHdzZGwyaCwgdGhlIFVEREkgc291cmNlIGNvZGUgZ3NvYXAvdWRkaTIsIGFuZCB0aGUgV2ViCitzZXJ2ZXIgc2FtcGxlIHNvdXJjZSBjb2RlIHNhbXBsZXMvd2Vic2VydmVyLiBUbyB1c2UgYW55IG9mIHRoZXNlIHNvZnR3YXJlIHRvb2xzCithbmQgY29tcG9uZW50cyBjb21tZXJjaWFsbHksIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIHJlcXVpcmVkIGFuZCBjYW4gYmUKK29idGFpbmVkIGZyb20gd3d3Lmdlbml2aWEuY29tLgorMSBERUZJTklUSU9OUy4KKworMS4wLjEuCisxLjEuICJDb250cmlidXRvciIKK21lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iCittZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhCitDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorMS4zLiAiQ292ZXJlZCBDb2RlIgorbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbAorQ29kZSwgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKzEuNC4gIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIKK21lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvcgordGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKzEuNS4gIkV4ZWN1dGFibGUiCittZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKzEuNi4gIkluaXRpYWwgRGV2ZWxvcGVyIgorbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZQorU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKzEuNy4gIkxhcmdlciBXb3JrIgorbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QKK2dvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisxLjguICJMaWNlbnNlIgorbWVhbnMgdGhpcyBkb2N1bWVudC4KKzEuOC4xLiAiTGljZW5zYWJsZSIKK21lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUKK3RpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzCitjb252ZXllZCBoZXJlaW4uCisxLjkuICJNb2RpZmljYXRpb25zIgorbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZQorT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYQorc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKK0EuCitBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwKK0NvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KK0IuCitBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgb3IgcHJldmlvdXMKK01vZGlmaWNhdGlvbnMuCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIKK21lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UKK0NvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mCitpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMKK0xpY2Vuc2UuCisxLjEwLjEuICJQYXRlbnQgQ2xhaW1zIgorbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQKK2xpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieQorZ3JhbnRvci4KKzEuMTEuICJTb3VyY2UgQ29kZSIKK21lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwKK2luY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbgorZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwKK29yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvcgorYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlCitTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZQorZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorMS4xMi4gIllvdSIgKG9yICJZb3VyIikKK21lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcKK3dpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlCitpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55CitlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LgorRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsCitkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwKK3doZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50CisoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorMiBTT1VSQ0UgQ09ERSBMSUNFTlNFLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tCitleGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorKGEpCit1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUKK2J5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UKK2FuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQKK01vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorKGIpCit1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBJbml0aWFsIERldmVsb3BlciwgdG8KK21ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsICgib2ZmZXIgdG8gc2VsbCBhbmQgaW1wb3J0IikgdGhlCitPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCBvciBwb3J0aW9ucyB0aGVyZW9mLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQKK3RoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gdXRpbGl6ZSwgYWxvbmUgb3IKK2luIGNvbWJpbmF0aW9uIHdpdGggb3RoZXIgc29mdHdhcmUsIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCBvciBhbnkKK2NvbWJpbmF0aW9uIG9yIHBvcnRpb25zIHRoZXJlb2YuCisoYykKKyhkKQorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5CitncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKyhhKQordW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlCitieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQKK2Rpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKQorZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIGFuZC9vcgorYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKQordW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsIHRvIG1ha2UsCitoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoIm9mZmVyIHRvIHNlbGwgYW5kIGltcG9ydCIpIHRoZSBDb250cmlidXRvcgorVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcworcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byB1dGlsaXplLCBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoCitvdGhlciBzb2Z0d2FyZSwgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLgorKGMpCisoZCkKKzMgRElTVFJJQlVUSU9OIE9CTElHQVRJT05TLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCisKK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5Cit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlCitDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91CittdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdQorZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbgordGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZQorcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQKK29mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorCitBbnkgTW9kaWZpY2F0aW9uIGNyZWF0ZWQgYnkgWW91IHdpbGwgYmUgcHJvdmlkZWQgdG8gdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluCitTb3VyY2UgQ29kZSBmb3JtIGFuZCBhcmUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZQorZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZgorYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzCitkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwKK0RldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZQorQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24KK2luIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLgorKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KK0lmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eSdzIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yCit1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlCitDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUKK3BhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0bworY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUKK2F2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUKK0xFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZQorb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykKK3JlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcKK2tub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKyhiKSBDb250cmlidXRvciBBUElzLgorSWYgQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZAorQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvCitpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMCitmaWxlLgorKGMpIFJlcHJlc2VudGF0aW9ucy4KK0NvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKQorYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zIGFyZSBDb250cmlidXRvcidzCitvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZQorcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYKK2l0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvCitpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhCityZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYKK1lvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvcgordG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4KK2FueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyBvcgorb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8KK2NoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZQorb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duCitiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZgorU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlCitFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIKK2Nob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdQorYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUKK0V4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncyByaWdodHMgaW4KK3RoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UKK2Rpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQKK2Fic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5CitZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBJZiB5b3UgZGlzdHJpYnV0ZQorZXhlY3V0YWJsZSB2ZXJzaW9ucyBjb250YWluaW5nIENvdmVyZWQgQ29kZSBhcyBwYXJ0IG9mIGEgcHJvZHVjdCwgeW91IG11c3QKK3JlcHJvZHVjZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCitwcm92aWRlZCB3aXRoIHRoZSBwcm9kdWN0LgorCiszLjcuIExhcmdlciBXb3Jrcy4KKworWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QKK2dvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEKK3NpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcworTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjguIFJlc3RyaWN0aW9ucy4KKworWW91IG1heSBub3QgcmVtb3ZlIGFueSBwcm9kdWN0IGlkZW50aWZpY2F0aW9uLCBjb3B5cmlnaHQsIHByb3ByaWV0YXJ5IG5vdGljZXMKK29yIGxhYmVscyBmcm9tIGdTT0FQLgorNCBJTkFCSUxJVFkgVE8gQ09NUExZIERVRSBUTyBTVEFUVVRFIE9SIFJFR1VMQVRJT04uCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZQord2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLAorb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUKK21heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleQorYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluCitTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4KK0V4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QKK2JlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0bwordW5kZXJzdGFuZCBpdC4KKzUgQVBQTElDQVRJT04gT0YgVEhJUyBMSUNFTlNFLgorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlCitub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKzYgVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0UuCisKKzYuMS4gTmV3IFZlcnNpb25zLgorCitHcmFudG9yIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8KK3RpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KKworT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLAorWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbworY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZgordGhlIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4KKworSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvCitpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzCitMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlICJnU09BUCIKK29yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGluIHlvdXIgbGljZW5zZSAoZXhjZXB0IHRvIG5vdGUKK3RoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIKK3RoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBnU09BUAorUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvcgorQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlCitkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorNyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBPRiBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBJTlRFTExFQ1RVQUwgUFJPUEVSVFkKK1JJR0hUUywgQU5EIEFOWSBXQVJSQU5UWSBUSEFUIE1BWSBBUklTRSBCWSBSRUFTT04gT0YgVFJBREUgVVNBR0UsIENVU1RPTSwgT1IKK0NPVVJTRSBPRiBERUFMSU5HLiBXSVRIT1VUIExJTUlUSU5HIFRIRSBGT1JFR09JTkcsIFlPVSBBQ0tOT1dMRURHRSBUSEFUIFRIRQorU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhBVCBUSEUgQVVUSE9SUyBETyBOT1QgV0FSUkFOVCBUSEUKK1NPRlRXQVJFIFdJTEwgUlVOIFVOSU5URVJSVVBURUQgT1IgRVJST1IgRlJFRS4gTElNSVRFRCBMSUFCSUxJVFkgVEhFIEVOVElSRQorUklTSyBBUyBUTyBSRVNVTFRTIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgU09GVFdBUkUgSVMgQVNTVU1FRCBCWSBZT1UuIFVOREVSIE5PCitDSVJDVU1TVEFOQ0VTIFdJTEwgVEhFIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitFWEVNUExBUlkgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5EIE9SIE5BVFVSRSBXSEFUU09FVkVSLCBXSEVUSEVSCitCQVNFRCBPTiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUgorT1RIRVJXSVNFLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBFVkVOIElGIFRIRQorQVVUSE9SUyBIQVZFIEJFRU4gQURWSVNFRCBPTiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UgT1IgSUYgU1VDSCBEQU1BR0UKK0NPVUxEIEhBVkUgQkVFTiBSRUFTT05BQkxZIEZPUkVTRUVOLCBBTkQgTk9UV0lUSFNUQU5ESU5HIEFOWSBGQUlMVVJFIE9GCitFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkgRVhDTFVTSVZFIFJFTUVEWSBQUk9WSURFRC4gU1VDSCBMSU1JVEFUSU9OIE9OIERBTUFHRVMKK0lOQ0xVREVTLCBCVVQgSVMgTk9UIExJTUlURUQgVE8sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIExPU1QgUFJPRklUUywKK0xPU1MgT0YgREFUQSBPUiBTT0ZUV0FSRSwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiBPUgorSU1QQUlSTUVOVCBPRiBPVEhFUiBHT09EUy4gSU4gTk8gRVZFTlQgV0lMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgRk9SIFRIRSBDT1NUUworT0YgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBTT0ZUV0FSRSBPUiBTRVJWSUNFUy4gWU9VIEFDS05PV0xFREdFIFRIQVQgVEhJUworU09GVFdBUkUgSVMgTk9UIERFU0lHTkVEIEZPUiBVU0UgSU4gT04tTElORSBFUVVJUE1FTlQgSU4gSEFaQVJET1VTIEVOVklST05NRU5UUworU1VDSCBBUyBPUEVSQVRJT04gT0YgTlVDTEVBUiBGQUNJTElUSUVTLCBBSVJDUkFGVCBOQVZJR0FUSU9OIE9SIENPTlRST0wsIE9SCitMSUZFLUNSSVRJQ0FMIEFQUExJQ0FUSU9OUy4gVEhFIEFVVEhPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFOWSBMSUFCSUxJVFkKK1JFU1VMVElORyBGUk9NIFVTRSBPRiBUSEUgU09GVFdBUkUgSU4gQU5ZIFNVQ0ggT04tTElORSBFUVVJUE1FTlQgSU4gSEFaQVJET1VTCitFTlZJUk9OTUVOVFMgQU5EIEFDQ0VQVFMgTk8gTElBQklMSVRZIElOIFJFU1BFQ1QgT0YgQU5ZIEFDVElPTlMgT1IgQ0xBSU1TIEJBU0VECitPTiBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBJTiBBTlkgU1VDSCBPTi1MSU5FIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMKK0VOVklST05NRU5UUyBCWSBZT1UuIEZPUiBQVVJQT1NFUyBPRiBUSElTIFBBUkFHUkFQSCwgVEhFIFRFUk0gIkxJRkUtCitDUklUSUNBTCBBUFBMSUNBVElPTiIgTUVBTlMgQU4gQVBQTElDQVRJT04gSU4gV0hJQ0ggVEhFIEZVTkNUSU9OSU5HIE9SCitNQUxGVU5DVElPTklORyBPRiBUSEUgU09GVFdBUkUgTUFZIFJFU1VMVCBESVJFQ1RMWSBPUiBJTkRJUkVDVExZIElOIFBIWVNJQ0FMCitJTkpVUlkgT1IgTE9TUyBPRiBIVU1BTiBMSUZFLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4KK0VTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRAorSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCis4IFRFUk1JTkFUSU9OLgorCis4LjEuCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZgorWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwCitkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoCithcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMKK3doaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMKK0xpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKzguMi4KKzguMy4KK0lmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdAorc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55CitwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvCit0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YKK3RoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZQordGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IKK2xpY2Vuc2UuCis4LjQuCitJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyCitsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuCit2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwKK3N1cnZpdmUgdGVybWluYXRpb24uCis5IExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWQorT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkKK09GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwKK09SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLAorREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwKK09SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTAorSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRgorTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcKK0ZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSAorTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YKK0lOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UCitBUFBMWSBUTyBZT1UuCisxMCBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorCisxMSBNSVNDRUxMQU5FT1VTLgorCisxMiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorCitBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlCitmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24KK29mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kCitDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZworaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorRVhISUJJVCBBLgorCisiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZ1NPQVAgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorMS4zICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CitodHRwOi8vd3d3LmNzLmZzdS5lZHUvIGVuZ2VsZW4vc29hcGxpY2Vuc2UuaHRtbAorU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK1RoZSBPcmlnaW5hbCBDb2RlIG9mIHRoZSBnU09BUCBTb2Z0d2FyZSBpczogc3Rkc29hcC5oLCBzdGRzb2FwMi5oLCBzdGRzb2FwLmMsCitzdGRzb2FwMi5jLCBzdGRzb2FwLmNwcCwgc3Rkc29hcDIuY3BwLCBzb2FwY3BwMi5oLCBzb2FwY3BwMi5jLCBzb2FwY3BwMl9sZXgubCwKK3NvYXBjcHAyX3lhY2MueSwgZXJyb3IyLmgsIGVycm9yMi5jLCBzeW1ib2wyLmMsIGluaXQyLmMsIHNvYXBkb2MyLmh0bWwsIGFuZAorc29hcGRvYzIucGRmLCBodHRwZ2V0LmgsIGh0dHBnZXQuYywgc3RsLmgsIHN0bGRlcXVlLmgsIHN0bGxpc3QuaCwgc3RsdmVjdG9yLmgsCitzdGxzZXQuaC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBSb2JlcnQgQS4gdmFuIEVuZ2VsZW4uIFBvcnRpb25zCitjcmVhdGVkIGJ5IFJvYmVydCBBLiB2YW4gRW5nZWxlbiBhcmUgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgUm9iZXJ0IEEuIHZhbgorRW5nZWxlbiwgR2VuaXZpYSBpbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb250cmlidXRvcihzKToKKyJfX19fX19fX19fX19fX19fX19fX19fX18uIgorW05vdGU6IFRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIG1heSBkaWZmZXIgc2xpZ2h0bHkgZm9ybSB0aGUgdGV4dCBvZiB0aGUKK25vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBjb2RlLiBZb3Ugc2hvdWxkIHVzZSB0aGUgdGV4dAorb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUKK2ZvciBZb3VyIE1vZGlmaWNhdGlvbnMuXQorRVhISUJJVCBCLgorCisiUGFydCBvZiB0aGUgc29mdHdhcmUgZW1iZWRkZWQgaW4gdGhpcyBwcm9kdWN0IGlzIGdTT0FQIHNvZnR3YXJlLgorUG9ydGlvbnMgY3JlYXRlZCBieSBnU09BUCBhcmUgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDkgUm9iZXJ0IEEuIHZhbiBFbmdlbGVuLAorR2VuaXZpYSBpbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitUSEUgU09GVFdBUkUgSU4gVEhJUyBQUk9EVUNUIFdBUyBJTiBQQVJUIFBST1ZJREVEIEJZIEdFTklWSUEgSU5DIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIgorCisKKworCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9nU09BUC0xLjNiIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9nU09BUC0xLjNiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Yzk0MmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2dTT0FQLTEuM2IKQEAgLTAsMCArMSwxNTcgQEAKKworZ1NPQVAgUHVibGljIExpY2Vuc2UKKworVmVyc2lvbiAxLjNiCisKK1RoZSBnU09BUCBwdWJsaWMgbGljZW5zZSBpcyBkZXJpdmVkIGZyb20gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgKE1QTDEuMSkuIFRoZSBzZWN0aW9ucyB0aGF0IHdlcmUgZGVsZXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBNUEwxLjEgdGV4dCBhcmUgMS4wLjEsIDIuMS4oYyksKGQpLCAyLjIuKGMpLChkKSwgOC4yLihiKSwgMTAsIGFuZCAxMS4gU2VjdGlvbiAzLjggd2FzIGFkZGVkLiBUaGUgbW9kaWZpZWQgc2VjdGlvbnMgYXJlIDIuMS4oYiksIDIuMi4oYiksIDMuMiAoc2ltcGxpZmllZCksIDMuNSAoZGVsZXRlZCB0aGUgbGFzdCBzZW50ZW5jZSksIGFuZCAzLjYgKHNpbXBsaWZpZWQpLgorVGhpcyBsaWNlbnNlIGFwcGxpZXMgdG8gdGhlIGdTT0FQIHNvZnR3YXJlIHBhY2thZ2UsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgc29hcGNwcDIgYW5kIHdzZGwyaCBzb3VyY2UgY29kZSBsb2NhdGVkIGluIGdzb2FwL3NyYyBhbmQgZ3NvYXAvd3NkbCwgYWxsIGNvZGUgZ2VuZXJhdGVkIGJ5IHNvYXBjcHAyIGFuZCB3c2RsMmgsIHRoZSBVRERJIHNvdXJjZSBjb2RlIGdzb2FwL3VkZGkyLCBhbmQgdGhlIFdlYiBzZXJ2ZXIgc2FtcGxlIHNvdXJjZSBjb2RlIHNhbXBsZXMvd2Vic2VydmVyLiBUbyB1c2UgYW55IG9mIHRoZXNlIHNvZnR3YXJlIHRvb2xzIGFuZCBjb21wb25lbnRzIGNvbW1lcmNpYWxseSwgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgcmVxdWlyZWQgYW5kIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHd3dy5nZW5pdmlhLmNvbS4KKzEgIERFRklOSVRJT05TLgorCisxLjAuMS4KKzEuMS4gIkNvbnRyaWJ1dG9yIgorbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIKK21lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKzEuMy4gIkNvdmVyZWQgQ29kZSIKK21lYW5zIHRoZSBPcmlnaW5hbCBDb2RlLCBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKzEuNC4gIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIKK21lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorMS41LiAiRXhlY3V0YWJsZSIKK21lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorMS42LiAiSW5pdGlhbCBEZXZlbG9wZXIiCittZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisxLjcuICJMYXJnZXIgV29yayIKK21lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisxLjguICJMaWNlbnNlIgorbWVhbnMgdGhpcyBkb2N1bWVudC4KKzEuOC4xLiAiTGljZW5zYWJsZSIKK21lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorMS45LiAiTW9kaWZpY2F0aW9ucyIKK21lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorQS4KK0FueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCitCLgorQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUsIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIKK21lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisxLjEwLjEuICJQYXRlbnQgQ2xhaW1zIgorbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisxLjExLiAiU291cmNlIENvZGUiCittZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKzEuMTIuICJZb3UiIChvciAiWW91ciIpCittZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorMiAgU09VUkNFIENPREUgTElDRU5TRS4KKworMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisoYSkKK3VuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikKK3VuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoIm9mZmVyIHRvIHNlbGwgYW5kIGltcG9ydCIpIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCBvciBwb3J0aW9ucyB0aGVyZW9mLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byB1dGlsaXplLCBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoIG90aGVyIHNvZnR3YXJlLCB0aGUgT3JpZ2luYWwgQ29kZSwgTW9kaWZpY2F0aW9ucywgb3IgYW55IGNvbWJpbmF0aW9uIG9yIHBvcnRpb25zIHRoZXJlb2YuCisoYykKKyhkKQorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorKGEpCit1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikKK3VuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IENvbnRyaWJ1dG9yLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoIm9mZmVyIHRvIHNlbGwgYW5kIGltcG9ydCIpIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gdXRpbGl6ZSwgYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aCBvdGhlciBzb2Z0d2FyZSwgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLgorKGMpCisoZCkKKzMgIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OUy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4gCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorCitBbnkgTW9kaWZpY2F0aW9uIGNyZWF0ZWQgYnkgWW91IHdpbGwgYmUgcHJvdmlkZWQgdG8gdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIFNvdXJjZSBDb2RlIGZvcm0gYW5kIGFyZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLiAKKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycy4KKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHlgcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKyhiKSBDb250cmlidXRvciBBUElzLgorSWYgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorKGMpIFJlcHJlc2VudGF0aW9ucy4KK0NvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yYHMgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50YHMgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBJZiB5b3UgZGlzdHJpYnV0ZSBleGVjdXRhYmxlIHZlcnNpb25zIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlIGFzIHBhcnQgb2YgYSBwcm9kdWN0LCB5b3UgbXVzdCByZXByb2R1Y2UgdGhlIG5vdGljZSBpbiBFeGhpYml0IEIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBwcm9kdWN0LiAKKworMy43LiBMYXJnZXIgV29ya3MuCisKK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4gCisKKzMuOC4gUmVzdHJpY3Rpb25zLgorCitZb3UgbWF5IG5vdCByZW1vdmUgYW55IHByb2R1Y3QgaWRlbnRpZmljYXRpb24sIGNvcHlyaWdodCwgcHJvcHJpZXRhcnkgbm90aWNlcyBvciBsYWJlbHMgZnJvbSBnU09BUC4KKzQgIElOQUJJTElUWSBUTyBDT01QTFkgRFVFIFRPIFNUQVRVVEUgT1IgUkVHVUxBVElPTi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKzUgIEFQUExJQ0FUSU9OIE9GIFRISVMgTElDRU5TRS4KKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKzYgIFZFUlNJT05TIE9GIFRIRSBMSUNFTlNFLgorCis2LjEuIE5ldyBWZXJzaW9ucy4KKworR3JhbnRvciBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIAorCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCisKK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLiAKKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLgorCitJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlICJnU09BUCIgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91ciBsaWNlbnNlIChleGNlcHQgdG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBnU09BUCBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorNyAgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIE9GIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUywgQU5EIEFOWSBXQVJSQU5UWSBUSEFUIE1BWSBBUklTRSBCWSBSRUFTT04gT0YgVFJBREUgVVNBR0UsIENVU1RPTSwgT1IgQ09VUlNFIE9GIERFQUxJTkcuIFdJVEhPVVQgTElNSVRJTkcgVEhFIEZPUkVHT0lORywgWU9VIEFDS05PV0xFREdFIFRIQVQgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIQVQgVEhFIEFVVEhPUlMgRE8gTk9UIFdBUlJBTlQgVEhFIFNPRlRXQVJFIFdJTEwgUlVOIFVOSU5URVJSVVBURUQgT1IgRVJST1IgRlJFRS4gTElNSVRFRCBMSUFCSUxJVFkgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFJFU1VMVFMgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBTT0ZUV0FSRSBJUyBBU1NVTUVEIEJZIFlPVS4gVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBXSUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULCBJTkNJREVOVEFMLCBFWEVNUExBUlkgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5EIE9SIE5BVFVSRSBXSEFUU09FVkVSLCBXSEVUSEVSIEJBU0VEIE9OIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgRVZFTiBJRiBUSEUgQVVUSE9SUyBIQVZFIEJFRU4gQURWSVNFRCBPTiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UgT1IgSUYgU1VDSCBEQU1BR0UgQ09VTEQgSEFWRSBCRUVOIFJFQVNPTkFCTFkgRk9SRVNFRU4sIEFORCBOT1RXSVRIU1RBTkRJTkcgQU5ZIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIEVYQ0xVU0lWRSBSRU1FRFkgUFJPVklERUQuIFNVQ0ggTElNSVRBVElPTiBPTiBEQU1BR0VTIElOQ0xVREVTLCBCVVQgSVMgTk9UIExJTUlURUQgVE8sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIExPU1QgUFJPRklUUywgTE9TUyBPRiBEQVRBIE9SIFNPRlRXQVJFLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OIE9SIElNUEFJUk1FTlQgT0YgT1RIRVIgR09PRFMuIElOIE5PIEVWRU5UIFdJTEwgVEhFIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBUSEUgQ09TVFMgT0YgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBTT0ZUV0FSRSBPUiBTRVJWSUNFUy4gWU9VIEFDS05PV0xFREdFIFRIQVQgVEhJUyBTT0ZUV0FSRSBJUyBOT1QgREVTSUdORUQgRk9SIFVTRSBJTiBPTi1MSU5FIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMgRU5WSVJPTk1FTlRTIFNVQ0ggQVMgT1BFUkFUSU9OIE9GIE5VQ0xFQVIgRkFDSUxJVElFUywgQUlSQ1JBRlQgTkFWSUdBVElPTiBPUiBDT05UUk9MLCBPUiBMSUZFLUNSSVRJQ0FMIEFQUExJQ0FUSU9OUy4gVEhFIEFVVEhPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFOWSBMSUFCSUxJVFkgUkVTVUxUSU5HIEZST00gVVNFIE9GIFRIRSBTT0ZUV0FSRSBJTiBBTlkgU1VDSCBPTi1MSU5FIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMgRU5WSVJPTk1FTlRTIEFORCBBQ0NFUFRTIE5PIExJQUJJTElUWSBJTiBSRVNQRUNUIE9GIEFOWSBBQ1RJT05TIE9SIENMQUlNUyBCQVNFRCBPTiBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBJTiBBTlkgU1VDSCBPTi1MSU5FIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMgRU5WSVJPTk1FTlRTIEJZIFlPVS4gRk9SIFBVUlBPU0VTIE9GIFRISVMgUEFSQUdSQVBILCBUSEUgVEVSTSAiTElGRS1DUklUSUNBTCBBUFBMSUNBVElPTiIgTUVBTlMgQU4gQVBQTElDQVRJT04gSU4gV0hJQ0ggVEhFIEZVTkNUSU9OSU5HIE9SIE1BTEZVTkNUSU9OSU5HIE9GIFRIRSBTT0ZUV0FSRSBNQVkgUkVTVUxUIERJUkVDVExZIE9SIElORElSRUNUTFkgSU4gUEhZU0lDQUwgSU5KVVJZIE9SIExPU1MgT0YgSFVNQU4gTElGRS4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKzggIFRFUk1JTkFUSU9OLgorCis4LjEuCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCis4LjIuCis4LjMuCitJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLgorOC40LgorSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorOSAgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKzEwICBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorCisxMSAgTUlTQ0VMTEFORU9VUy4KKworMTIgIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCisKK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KK0VYSElCSVQgQS4KKworIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGdTT0FQIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4zICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK2h0dHA6Ly93d3cuY3MuZnN1LmVkdS8gZW5nZWxlbi9zb2FwbGljZW5zZS5odG1sCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK1RoZSBPcmlnaW5hbCBDb2RlIG9mIHRoZSBnU09BUCBTb2Z0d2FyZSBpczogc3Rkc29hcC5oLCBzdGRzb2FwMi5oLCBzdGRzb2FwLmMsIHN0ZHNvYXAyLmMsIHN0ZHNvYXAuY3BwLCBzdGRzb2FwMi5jcHAsIHNvYXBjcHAyLmgsIHNvYXBjcHAyLmMsIHNvYXBjcHAyX2xleC5sLCBzb2FwY3BwMl95YWNjLnksIGVycm9yMi5oLCBlcnJvcjIuYywgc3ltYm9sMi5jLCBpbml0Mi5jLCBzb2FwZG9jMi5odG1sLCBhbmQgc29hcGRvYzIucGRmLCBodHRwZ2V0LmgsIGh0dHBnZXQuYywgc3RsLmgsIHN0bGRlcXVlLmgsIHN0bGxpc3QuaCwgc3RsdmVjdG9yLmgsIHN0bHNldC5oLgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIFJvYmVydCBBLiB2YW4gRW5nZWxlbi4gUG9ydGlvbnMgY3JlYXRlZCBieSBSb2JlcnQgQS4gdmFuIEVuZ2VsZW4gYXJlIENvcHlyaWdodCAoQykgMjAwMS0yMDA0IFJvYmVydCBBLiB2YW4gRW5nZWxlbiwgR2VuaXZpYSBpbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb250cmlidXRvcihzKToKKyJfX19fX19fX19fX19fX19fX19fX19fX18uIgorW05vdGU6IFRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIG1heSBkaWZmZXIgc2xpZ2h0bHkgZm9ybSB0aGUgdGV4dCBvZiB0aGUgbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIGNvZGUuIFlvdSBzaG91bGQgdXNlIHRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGZvdW5kIGluIHRoZSBPcmlnaW5hbCBDb2RlIFNvdXJjZSBDb2RlIGZvciBZb3VyIE1vZGlmaWNhdGlvbnMuXQorRVhISUJJVCBCLgorCisiUGFydCBvZiB0aGUgc29mdHdhcmUgZW1iZWRkZWQgaW4gdGhpcyBwcm9kdWN0IGlzIGdTT0FQIHNvZnR3YXJlLgorUG9ydGlvbnMgY3JlYXRlZCBieSBnU09BUCBhcmUgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDkgUm9iZXJ0IEEuIHZhbiBFbmdlbGVuLCBHZW5pdmlhIGluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK1RIRSBTT0ZUV0FSRSBJTiBUSElTIFBST0RVQ1QgV0FTIElOIFBBUlQgUFJPVklERUQgQlkgR0VOSVZJQSBJTkMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvdGNsIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy90Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwNDljZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvdGNsCkBAIC0wLDAgKzEsNDAgQEAKK1RoaXMgc29mdHdhcmUgaXMgY29weXJpZ2h0ZWQgYnkgdGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YKK0NhbGlmb3JuaWEsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4sIFNjcmlwdGljcyBDb3Jwb3JhdGlvbiwgQWN0aXZlU3RhdGUKK0NvcnBvcmF0aW9uIGFuZCBvdGhlciBwYXJ0aWVzLiAgVGhlIGZvbGxvd2luZyB0ZXJtcyBhcHBseSB0byBhbGwgZmlsZXMKK2Fzc29jaWF0ZWQgd2l0aCB0aGUgc29mdHdhcmUgdW5sZXNzIGV4cGxpY2l0bHkgZGlzY2xhaW1lZCBpbgoraW5kaXZpZHVhbCBmaWxlcy4KKworVGhlIGF1dGhvcnMgaGVyZWJ5IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsCithbmQgbGljZW5zZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkCit0aGF0IGV4aXN0aW5nIGNvcHlyaWdodCBub3RpY2VzIGFyZSByZXRhaW5lZCBpbiBhbGwgY29waWVzIGFuZCB0aGF0IHRoaXMKK25vdGljZSBpcyBpbmNsdWRlZCB2ZXJiYXRpbSBpbiBhbnkgZGlzdHJpYnV0aW9ucy4gTm8gd3JpdHRlbiBhZ3JlZW1lbnQsCitsaWNlbnNlLCBvciByb3lhbHR5IGZlZSBpcyByZXF1aXJlZCBmb3IgYW55IG9mIHRoZSBhdXRob3JpemVkIHVzZXMuCitNb2RpZmljYXRpb25zIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIGNvcHlyaWdodGVkIGJ5IHRoZWlyIGF1dGhvcnMKK2FuZCBuZWVkIG5vdCBmb2xsb3cgdGhlIGxpY2Vuc2luZyB0ZXJtcyBkZXNjcmliZWQgaGVyZSwgcHJvdmlkZWQgdGhhdAordGhlIG5ldyB0ZXJtcyBhcmUgY2xlYXJseSBpbmRpY2F0ZWQgb24gdGhlIGZpcnN0IHBhZ2Ugb2YgZWFjaCBmaWxlIHdoZXJlCit0aGV5IGFwcGx5LgorCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBESVNUUklCVVRPUlMgQkUgTElBQkxFIFRPIEFOWSBQQVJUWQorRk9SIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBJVFMgRE9DVU1FTlRBVElPTiwgT1IgQU5ZCitERVJJVkFUSVZFUyBUSEVSRU9GLCBFVkVOIElGIFRIRSBBVVRIT1JTIEhBVkUgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK1RIRSBBVVRIT1JTIEFORCBESVNUUklCVVRPUlMgU1BFQ0lGSUNBTExZIERJU0NMQUlNIEFOWSBXQVJSQU5USUVTLAorSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULiAgVEhJUyBTT0ZUV0FSRQorSVMgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBBVVRIT1JTIEFORCBESVNUUklCVVRPUlMgSEFWRQorTk8gT0JMSUdBVElPTiBUTyBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SCitNT0RJRklDQVRJT05TLgorCitHT1ZFUk5NRU5UIFVTRTogSWYgeW91IGFyZSBhY3F1aXJpbmcgdGhpcyBzb2Z0d2FyZSBvbiBiZWhhbGYgb2YgdGhlCitVLlMuIGdvdmVybm1lbnQsIHRoZSBHb3Zlcm5tZW50IHNoYWxsIGhhdmUgb25seSAiUmVzdHJpY3RlZCBSaWdodHMiCitpbiB0aGUgc29mdHdhcmUgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBhcyBkZWZpbmVkIGluIHRoZSBGZWRlcmFsCitBY3F1aXNpdGlvbiBSZWd1bGF0aW9ucyAoRkFScykgaW4gQ2xhdXNlIDUyLjIyNy4xOSAoYykgKDIpLiAgSWYgeW91CithcmUgYWNxdWlyaW5nIHRoZSBzb2Z0d2FyZSBvbiBiZWhhbGYgb2YgdGhlIERlcGFydG1lbnQgb2YgRGVmZW5zZSwgdGhlCitzb2Z0d2FyZSBzaGFsbCBiZSBjbGFzc2lmaWVkIGFzICJDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIiBhbmQgdGhlCitHb3Zlcm5tZW50IHNoYWxsIGhhdmUgb25seSAiUmVzdHJpY3RlZCBSaWdodHMiIGFzIGRlZmluZWQgaW4gQ2xhdXNlCisyNTIuMjI3LTcwMTQgKGIpICgzKSBvZiBERkFScy4gIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCB0aGUKK2F1dGhvcnMgZ3JhbnQgdGhlIFUuUy4gR292ZXJubWVudCBhbmQgb3RoZXJzIGFjdGluZyBpbiBpdHMgYmVoYWxmCitwZXJtaXNzaW9uIHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGUgc29mdHdhcmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQordGVybXMgc3BlY2lmaWVkIGluIHRoaXMgbGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvdW5mczMgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL3VuZnMzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMmI1M2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL3VuZnMzCkBAIC0wLDAgKzEsMjQgQEAKK1VORlMzIHVzZXItc3BhY2UgTkZTdjMgc2VydmVyCisoQykgMjAwMywgUGFzY2FsIFNjaG1pZHQgPHVuZnMzLXNlcnZlckBld2V0ZWwubmV0PgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECitXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8KK0VWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOworT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvZGVwbG95ZGlyX3JlYWRtZS50eHQgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvZGVwbG95ZGlyX3JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdlYzE4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9kZXBsb3lkaXJfcmVhZG1lLnR4dApAQCAtMCwwICsxLDggQEAKK0ZpbGVzIGluIHRoZSBkZXBsb3kgZGlyZWN0b3J5IHdpbGwgbm90IGJlIHJlLWNyZWF0ZWQgYXV0b21hdGljYWxseSBpZiB5b3UKK2RlbGV0ZSB0aGVtLiBJZiB5b3UgZG8gZGVsZXRlIGEgZmlsZSwgeW91IHdpbGwgbmVlZCB0byBydW46CisKKyAgYml0YmFrZSAtYyBjbGVhbiBUQVJHRVQKKyAgYml0YmFrZSBUQVJHRVQKKword2hlcmUgVEFSR0VUIGlzIHRoZSBuYW1lIG9mIHRoZSBhcHByb3ByaWF0ZSBwYWNrYWdlIG9yIHRhcmdldCBlLmcuCisidmlydHVhbC9rZXJuZWwiIGZvciB0aGUga2VybmVsLCBhbiBpbWFnZSwgZXRjLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2RldmljZV90YWJsZS1taW5pbWFsLnR4dCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9kZXZpY2VfdGFibGUtbWluaW1hbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4OTFjYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9kZXZpY2VfdGFibGUtbWluaW1hbC50eHQKQEAgLTAsMCArMSwzNSBAQAorIzxwYXRoPgk8dHlwZT4gPG1vZGU+CTx1aWQ+CTxnaWQ+CTxtYWpvcj4JPG1pbm9yPgk8c3RhcnQ+CTxpbmM+CTxjb3VudD4KKyMvZGV2L21lbSAgICBjICAgICAgNjQwICAgICAgMCAgICAgICAwICAgICAgIDEgICAgICAgMSAgICAgICAwICAgICAgICAwICAgICAgICAtCisjCisjdHlwZSBjYW4gYmUgb25lIG9mOiAKKyMgICAgZglBIHJlZ3VsYXIgZmlsZQorIyAgICBkCURpcmVjdG9yeQorIyAgICBjCUNoYXJhY3RlciBzcGVjaWFsIGRldmljZSBmaWxlCisjICAgIGIJQmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZQorIyAgICBwCUZpZm8gKG5hbWVkIHBpcGUpCisKKy9kZXYJCWQJNzU1CXJvb3QJcm9vdAktCS0JLQktCS0KKy9kZXYvY29uc29sZQljCTY2Mglyb290CXR0eQk1CTEJLQktCS0KKy9kZXYvZmIwCWMJNjAwCXJvb3QJcm9vdAkyOQkwCS0JLQktCisvZGV2L2hkYQliCTY2MAlyb290CWRpc2sJMwkwCS0JLQktCisvZGV2L2hkYQliCTY2MAlyb290CWRpc2sJMwkxCTEJMQk0CisvZGV2L2ttZW0JYwk2NDAJcm9vdAlrbWVtCTEJMgktCS0JLQorL2Rldi9rbXNnCWMJNjAwCXJvb3QJcm9vdAkxCTExCS0JLQktCisvZGV2L21lbQljCTY0MAlyb290CWttZW0JMQkxCS0JLQktCisvZGV2L21tY2JsazAJYgk2NjAJcm9vdAlkaXNrCTE3OQkwCS0JLQktCisvZGV2L21tY2JsazBwCWIJNjYwCXJvb3QJZGlzawkxNzkJMQkxCTEJNAorL2Rldi9tdGQJYwk2NjAJcm9vdAlkaXNrCTkwCTAJMAkyCTgKKy9kZXYvbXRkYmxvY2sJYgk2NDAJcm9vdAlyb290CTMxCTAJMAkxCTgKKy9kZXYvbnVsbAljCTY2Nglyb290CXJvb3QJMQkzCS0JLQktCisvZGV2L3JhbQliCTY0MAlyb290CXJvb3QJMQkwCTAJMQk0CisvZGV2L3JhbmRvbQljCTY0NAlyb290CXJvb3QJMQk4CS0JLQktCisvZGV2L3J0YwljCTY0NAlyb290CXJvb3QJMjU0CTAJMAkxCTIKKy9kZXYvc2RhCWIJNjYwCXJvb3QJZGlzawk4CTAJLQktCS0KKy9kZXYvc2RhCWIJNjYwCXJvb3QJZGlzawk4CTEJMQkxCTQKKy9kZXYvc2RiCWIJNjYwCXJvb3QJZGlzawk4CTE2CS0JLQktCisvZGV2L3NkYgliCTY2MAlyb290CWRpc2sJOAkxNwkxCTEJNAorL2Rldi90dHkJYwk2NjIJcm9vdAl0dHkJNQkwCS0JLQktCisvZGV2L3R0eQljCTY2Nglyb290CXR0eQk0CTAJMAkxCTgKKy9kZXYvdHR5UwljCTY0MAlyb290CXR0eQk0CTY0CTAJMQkyCisvZGV2L3VyYW5kb20JYwk2NDQJcm9vdAlyb290CTEJOQktCS0JLQorL2Rldi96ZXJvCWMJNjQ0CXJvb3QJcm9vdAkxCTUJLQktCS0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9mcy1wZXJtcy50eHQgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvZnMtcGVybXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOWNiZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvZnMtcGVybXMudHh0CkBAIC0wLDAgKzEsNjcgQEAKKyMgVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2l0aCBrbm93biBwZXJtaXNzaW9ucy4KKyMgSXQgaXMgdXNlZCBieSB0aGUgcGFja2FnaW5nIGNsYXNzIHRvIGVuc3VyZSB0aGF0IHRoZSBwZXJtaXNzaW9ucywgb3duZXJzIGFuZAorIyBncm91cCBvZiBsaXN0ZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGFyZSBpbiBzeW5jIGFjcm9zcyB0aGUgc3lzdGVtLgorIworIyBUaGUgZm9ybWF0IG9mIHRoaXMgZmlsZSAKKyMKKyM8cGF0aD4JPG1vZGU+CTx1aWQ+CTxnaWQ+CTx3YWxrPgk8Zm1vZGU+CTxmdWlkPgk8ZmdpZD4KKyMKKyMgb3IKKyMKKyM8cGF0aD4gbGluayA8dGFyZ2V0PgorIworIyA8cGF0aD46IGRpcmVjdG9yeSBwYXRoCisjIDxtb2RlPjogbW9kZSBmb3IgZGlyZWN0b3J5CisjIDx1aWQ+OiAgdWlkIGZvciBkaXJlY3RvcnkKKyMgPGdpZD46ICBnaWQgZm9yIGRpcmVjdG9yeQorIyA8d2Fsaz46IHJlY3Vyc2l2ZWx5IHdhbGsgdGhlIGRpcmVjdG9yeT8gIHRydWUgb3IgZmFsc2UKKyMgPGZtb2RlPjogaWYgd2Fsa2luZywgbmV3IG1vZGUgZm9yIGZpbGVzCisjIDxmdWlkPjogIGlmIHdhbGtpbmcsIG5ldyB1aWQgZm9yIGZpbGVzCisjIDxmZ2lkPjogIGlmIHdhbGtpbmcsIG5ldyBnaWQgZm9yIGZpbGVzCisjIDx0YXJnZXQ+OiB0dXJuIHRoZSBkaXJlY3RvcnkgaW50byBhIHN5bWxpbmsgcG9pbnQgdG8gdGFyZ2V0CisjCisjIGluIG1vZGUsIHVpZCBvciBnaWQsIGEgIi0iIG1lYW5zIGRvbid0IGNoYW5nZSBhbnkgZXhpc3RpbmcgdmFsdWVzCisjCisjIC91c3Ivc3JjCQkwNzU1CXJvb3QJcm9vdAlmYWxzZQktCS0JLQorIyAvdXNyL3NoYXJlL21hbgkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290CisKKyMgTm90ZTogYWxsIHN0YW5kYXJkIGNvbmZpZyBkaXJlY3RvcmllcyBhcmUgYXV0b21hdGljYWxseSBhc3NpZ25lZCAiMDc1NSByb290IHJvb3QgZmFsc2UgLSAtIC0iCisKKyMgRG9jdW1lbnRhdGlvbiBzaG91bGQgYWx3YXlzIGJlIGNvcnJlY3RlZAorJHttYW5kaXJ9CQkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290Ciske2luZm9kaXJ9CQkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290Ciske2RvY2Rpcn0JCTA3NTUJcm9vdAlyb290CXRydWUJMDY0NAlyb290CXJvb3QKKyR7ZGF0YWRpcn0vZ3RrLWRvYwkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290CisKKyMgRml4dXAgbG9jYWxlcworJHtkYXRhZGlyfS9sb2NhbGUJMDc1NQlyb290CXJvb3QJdHJ1ZQkwNjQ0CXJvb3QJcm9vdAorCisjIENsZWFudXAgaGVhZGVycworJHtpbmNsdWRlZGlyfQkJMDc1NQlyb290CXJvb3QJdHJ1ZQkwNjQ0CXJvb3QJcm9vdAorJHtvbGRpbmNsdWRlZGlyfQkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290CisKKyMgQ2xlYW51cCBkZWJ1ZyBzcmMKKy91c3Ivc3JjL2RlYnVnCQkwNzU1CXJvb3QJcm9vdAl0cnVlCS0Jcm9vdAlyb290CisKKyMgSXRlbXMgZnJvbSBiYXNlLWZpbGVzCisjIExpbmtzCiske2xvY2Fsc3RhdGVkaXJ9L3J1bglsaW5rCS9ydW4KKyR7bG9jYWxzdGF0ZWRpcn0vbG9nCWxpbmsJdm9sYXRpbGUvbG9nCiske2xvY2Fsc3RhdGVkaXJ9L2xvY2sJbGluawkvcnVuL2xvY2sKKyR7bG9jYWxzdGF0ZWRpcn0vdG1wCWxpbmsJdm9sYXRpbGUvdG1wCisKKy9ob21lCQkJCTA3NTUJcm9vdAlyb290CWZhbHNlIC0gLSAtCisvc3J2CQkJCTA3NTUJcm9vdAlyb290CWZhbHNlIC0gLSAtCiske3ByZWZpeH0vc3JjCQkJMDc1NQlyb290CXJvb3QJZmFsc2UgLSAtIC0KKyR7bG9jYWxzdGF0ZWRpcn0vbG9jYWwJCTA3NTUJcm9vdAlyb290CWZhbHNlIC0gLSAtCisKKyMgU3BlY2lhbCBwZXJtaXNzaW9ucyBmcm9tIGJhc2UtZmlsZXMKKyMgU2V0IDE3NzcKKy90bXAJCQkJMDE3NzcJcm9vdAlyb290CWZhbHNlIC0gLSAtCiske2xvY2Fsc3RhdGVkaXJ9L3ZvbGF0aWxlL3RtcAkwMTc3Nwlyb290CXJvb3QJZmFsc2UgLSAtIC0KKworIyBTZXQgNzU1LWxzYgorL3NydgkJCQkwNzU1CXJvb3QJcm9vdAlmYWxzZSAtIC0gLQorCisjIFNldCAyNzc1LWxzYgorL3Zhci9tYWlsCQkJMDI3NzUJcm9vdAltYWlsCWZhbHNlIC0gLSAtCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItZXh0cmFjdC5zaCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy90b29sY2hhaW4tc2hhci1leHRyYWN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMGE1NDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItZXh0cmFjdC5zaApAQCAtMCwwICsxLDE4OSBAQAorIyEvYmluL2Jhc2gKKworSU5TVF9BUkNIPSQodW5hbWUgLW0gfCBzZWQgLWUgInMvaVszLTZdODYvaXg4Ni8iIC1lICJzL3g4NlstX102NC94ODZfNjQvIikKK1NES19BUkNIPSQoZWNobyBAU0RLX0FSQ0hAIHwgc2VkIC1lICJzL2lbMy02XTg2L2l4ODYvIiAtZSAicy94ODZbLV9dNjQveDg2XzY0LyIpCisKK3Zlcmx0ZSAoKSB7CisJWyAgIiQxIiA9ICJgcHJpbnRmICIkMVxuJDIiIHwgc29ydCAtViB8IGhlYWQgLW4xYCIgXQorfQorCit2ZXJsdCgpIHsKKwlbICIkMSIgPSAiJDIiIF0gJiYgcmV0dXJuIDEgfHwgdmVybHRlICQxICQyCit9CisKK3Zlcmx0IGB1bmFtZSAtcmAgQE9MREVTVF9LRVJORUxACitpZiBbICQ/ID0gMCBdOyB0aGVuCisJZWNobyAiRXJyb3I6IFRoZSBTREsgbmVlZHMgYSBrZXJuZWwgPiBAT0xERVNUX0tFUk5FTEAiCisJZXhpdCAxCitmaQorCitpZiBbICIkSU5TVF9BUkNIIiAhPSAiJFNES19BUkNIIiBdOyB0aGVuCisJIyBBbGxvdyBmb3IgaW5zdGFsbGF0aW9uIG9mIGl4ODYgU0RLIG9uIHg4Nl82NCBob3N0CisJaWYgWyAiJElOU1RfQVJDSCIgIT0geDg2XzY0IC1vICIkU0RLX0FSQ0giICE9IGl4ODYgXTsgdGhlbgorCQllY2hvICJFcnJvcjogSW5zdGFsbGF0aW9uIG1hY2hpbmUgbm90IHN1cHBvcnRlZCEiCisJCWV4aXQgMQorCWZpCitmaQorCitERUZBVUxUX0lOU1RBTExfRElSPSJAU0RLUEFUSEAiCitTVURPX0VYRUM9IiIKK3RhcmdldF9zZGtfZGlyPSIiCithbnN3ZXI9IiIKK3JlbG9jYXRlPTEKK3NhdmVzY3JpcHRzPTAKK3ZlcmJvc2U9MAord2hpbGUgZ2V0b3B0cyAiOnlkOm5EUlMiIE9QVDsgZG8KKwljYXNlICRPUFQgaW4KKwl5KQorCQlhbnN3ZXI9IlkiCisJCTs7CisJZCkKKwkJdGFyZ2V0X3Nka19kaXI9JE9QVEFSRworCQk7OworCW4pCisJCXByZXBhcmVfYnVpbGRzeXN0ZW09Im5vIgorCQk7OworCUQpCisJCXZlcmJvc2U9MQorCQk7OworCVIpCisJCXJlbG9jYXRlPTAKKwkJc2F2ZXNjcmlwdHM9MQorCQk7OworCVMpCisJCXNhdmVzY3JpcHRzPTEKKwkJOzsKKwkqKQorCQllY2hvICJVc2FnZTogJChiYXNlbmFtZSAkMCkgWy15XSBbLWQgPGRpcj5dIgorCQllY2hvICIgIC15ICAgICAgICAgQXV0b21hdGljIHllcyB0byBhbGwgcHJvbXB0cyIKKwkJZWNobyAiICAtZCA8ZGlyPiAgIEluc3RhbGwgdGhlIFNESyB0byA8ZGlyPiIKKwkJZWNobyAiPT09PT09PT0gRXh0ZW5zaWJsZSBTREsgb25seSBvcHRpb25zID09PT09PT09PT09PSIKKwkJZWNobyAiICAtbiAgICAgICAgIERvIG5vdCBwcmVwYXJlIHRoZSBidWlsZCBzeXN0ZW0iCisJCWVjaG8gIj09PT09PT09IEFkdmFuY2VkIERFQlVHR0lORyBPTkxZIE9QVElPTlMgPT09PT09PT0iCisJCWVjaG8gIiAgLVMgICAgICAgICBTYXZlIHJlbG9jYXRpb24gc2NyaXB0cyIKKwkJZWNobyAiICAtUiAgICAgICAgIERvIG5vdCByZWxvY2F0ZSBleGVjdXRhYmxlcyIKKwkJZWNobyAiICAtRCAgICAgICAgIHVzZSBzZXQgLXggdG8gc2VlIHdoYXQgaXMgZ29pbmcgb24iCisJCWV4aXQgMQorCQk7OworCWVzYWMKK2RvbmUKKworZWNobyAiQFNES19USVRMRUAgaW5zdGFsbGVyIHZlcnNpb24gQFNES19WRVJTSU9OQCIKK2VjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgorCitpZiBbICR2ZXJib3NlID0gMSBdIDsgdGhlbgorCXNldCAteAorZmkKKworQFNES19QUkVfSU5TVEFMTF9DT01NQU5EQAorCisjIFNES19FWFRFTlNJQkxFIGlzIGV4cG9zZWQgZnJvbSB0aGUgU0RLX1BSRV9JTlNUQUxMX0NPTU1BTkQgYWJvdmUKK2lmIFsgIiRTREtfRVhURU5TSUJMRSIgPSAiMSIgXTsgdGhlbgorCURFRkFVTFRfSU5TVEFMTF9ESVI9IkBTREtFWFRQQVRIQCIKK2ZpCisKK2lmIFsgIiR0YXJnZXRfc2RrX2RpciIgPSAiIiBdOyB0aGVuCisJaWYgWyAiJGFuc3dlciIgPSAiWSIgXTsgdGhlbgorCQl0YXJnZXRfc2RrX2Rpcj0iJERFRkFVTFRfSU5TVEFMTF9ESVIiCisJZWxzZQorCQlyZWFkIC1lIC1wICJFbnRlciB0YXJnZXQgZGlyZWN0b3J5IGZvciBTREsgKGRlZmF1bHQ6ICRERUZBVUxUX0lOU1RBTExfRElSKTogIiB0YXJnZXRfc2RrX2RpcgorCQlbICIkdGFyZ2V0X3Nka19kaXIiID0gIiIgXSAmJiB0YXJnZXRfc2RrX2Rpcj0kREVGQVVMVF9JTlNUQUxMX0RJUgorCWZpCitmaQorCitldmFsIHRhcmdldF9zZGtfZGlyPSQoZWNobyAiJHRhcmdldF9zZGtfZGlyInxzZWQgJ3MvIC9cXCAvZycpCitpZiBbIC1kICIkdGFyZ2V0X3Nka19kaXIiIF07IHRoZW4KKwl0YXJnZXRfc2RrX2Rpcj0kKGNkICIkdGFyZ2V0X3Nka19kaXIiOyBwd2QpCitlbHNlCisJdGFyZ2V0X3Nka19kaXI9JChyZWFkbGluayAtbSAiJHRhcmdldF9zZGtfZGlyIikKK2ZpCisKK2lmIFsgIiRTREtfRVhURU5TSUJMRSIgPSAiMSIgXTsgdGhlbgorCSMgV2UncmUgZ29pbmcgdG8gYmUgcnVubmluZyB0aGUgYnVpbGQgc3lzdGVtLCBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucyBhcHBseQorCWlmIGVjaG8gIiR0YXJnZXRfc2RrX2RpciIgfCBncmVwIC1xICdbK1wgQF0nOyB0aGVuCisJCWVjaG8gIlRoZSB0YXJnZXQgZGlyZWN0b3J5IHBhdGggKCR0YXJnZXRfc2RrX2RpcikgY29udGFpbnMgaWxsZWdhbCIgXAorCQkgICAgICJjaGFyYWN0ZXJzIHN1Y2ggYXMgc3BhY2VzLCBAIG9yICsuIEFib3J0ISIKKwkJZXhpdCAxCisJZmkKK2Vsc2UKKwlpZiBbIC1uICIkKGVjaG8gJHRhcmdldF9zZGtfZGlyfGdyZXAgJyAnKSIgXTsgdGhlbgorCQllY2hvICJUaGUgdGFyZ2V0IGRpcmVjdG9yeSBwYXRoICgkdGFyZ2V0X3Nka19kaXIpIGNvbnRhaW5zIHNwYWNlcy4gQWJvcnQhIgorCQlleGl0IDEKKwlmaQorZmkKKworaWYgWyAtZSAiJHRhcmdldF9zZGtfZGlyL2Vudmlyb25tZW50LXNldHVwLUBSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTQCIgXTsgdGhlbgorCWVjaG8gIlRoZSBkaXJlY3RvcnkgXCIkdGFyZ2V0X3Nka19kaXJcIiBhbHJlYWR5IGNvbnRhaW5zIGEgU0RLIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4iCisJcHJpbnRmICJJZiB5b3UgY29udGludWUsIGV4aXN0aW5nIGZpbGVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4hIFByb2NlZWRbeS9OXT8gIgorCisJZGVmYXVsdF9hbnN3ZXI9Im4iCitlbHNlCisJcHJpbnRmICJZb3UgYXJlIGFib3V0IHRvIGluc3RhbGwgdGhlIFNESyB0byBcIiR0YXJnZXRfc2RrX2RpclwiLiBQcm9jZWVkW1kvbl0/ICIKKworCWRlZmF1bHRfYW5zd2VyPSJ5IgorZmkKKworaWYgWyAiJGFuc3dlciIgPSAiIiBdOyB0aGVuCisJcmVhZCBhbnN3ZXIKKwlbICIkYW5zd2VyIiA9ICIiIF0gJiYgYW5zd2VyPSIkZGVmYXVsdF9hbnN3ZXIiCitlbHNlCisJZWNobyAkYW5zd2VyCitmaQorCitpZiBbICIkYW5zd2VyIiAhPSAiWSIgLWEgIiRhbnN3ZXIiICE9ICJ5IiBdOyB0aGVuCisJZWNobyAiSW5zdGFsbGF0aW9uIGFib3J0ZWQhIgorCWV4aXQgMQorZmkKKworIyBUcnkgdG8gY3JlYXRlIHRoZSBkaXJlY3RvcnkgKHRoaXMgd2lsbCBub3Qgc3VjY2VlZCBpZiB1c2VyIGRvZXNuJ3QgaGF2ZSByaWdodHMpCitta2RpciAtcCAkdGFyZ2V0X3Nka19kaXIgPi9kZXYvbnVsbCAyPiYxCisKKyMgaWYgZG9uJ3QgaGF2ZSB0aGUgcmlnaHQgdG8gYWNjZXNzIGRpciwgZ2FpbiBieSBzdWRvIAoraWYgWyAhIC14ICR0YXJnZXRfc2RrX2RpciAtbyAhIC13ICR0YXJnZXRfc2RrX2RpciAtbyAhIC1yICR0YXJnZXRfc2RrX2RpciBdOyB0aGVuIAorCWlmIFsgIiRTREtfRVhURU5TSUJMRSIgPSAiMSIgXTsgdGhlbgorCQllY2hvICJVbmFibGUgdG8gYWNjZXNzIFwiJHRhcmdldF9zZGtfZGlyXCIsIHdpbGwgbm90IGF0dGVtcHQgdG8gdXNlIiBcCisJCSAgICAgInN1ZG8gYXMgYXMgZXh0ZW5zaWJsZSBTREsgY2Fubm90IGJlIHVzZWQgYXMgcm9vdC4iCisJCWV4aXQgMQorCWZpCisKKwlTVURPX0VYRUM9JCh3aGljaCAic3VkbyIpCisJaWYgWyAteiAkU1VET19FWEVDIF07IHRoZW4KKwkJZWNobyAiTm8gY29tbWFuZCAnc3VkbycgZm91bmQsIHBsZWFzZSBpbnN0YWxsIHN1ZG8gZmlyc3QuIEFib3J0ISIKKwkJZXhpdCAxCisJZmkKKworCSMgdGVzdCBzdWRvIGNvdWxkIGdhaW4gcm9vdCByaWdodAorCSRTVURPX0VYRUMgcHdkID4vZGV2L251bGwgMj4mMQorCVsgJD8gLW5lIDAgXSAmJiBlY2hvICJTb3JyeSwgeW91IGFyZSBub3QgYWxsb3dlZCB0byBleGVjdXRlIGFzIHJvb3QuIiAmJiBleGl0IDEKKworCSMgbm93IHRoYXQgd2UgaGF2ZSBzdWRvIHJpZ2h0cywgY3JlYXRlIHRoZSBkaXJlY3RvcnkKKwkkU1VET19FWEVDIG1rZGlyIC1wICR0YXJnZXRfc2RrX2RpciA+L2Rldi9udWxsIDI+JjEKK2ZpCisKK3BheWxvYWRfb2Zmc2V0PSQoKCQoZ3JlcCAtbmEgLW0xICJeTUFSS0VSOiQiICQwfGN1dCAtZCc6JyAtZjEpICsgMSkpCisKK3ByaW50ZiAiRXh0cmFjdGluZyBTREsuLi4iCit0YWlsIC1uICskcGF5bG9hZF9vZmZzZXQgJDB8ICRTVURPX0VYRUMgdGFyIHhqIC1DICR0YXJnZXRfc2RrX2RpcgorZWNobyAiZG9uZSIKKworcHJpbnRmICJTZXR0aW5nIGl0IHVwLi4uIgorIyBmaXggZW52aXJvbm1lbnQgcGF0aHMKK2ZvciBlbnZfc2V0dXBfc2NyaXB0IGluIGBscyAkdGFyZ2V0X3Nka19kaXIvZW52aXJvbm1lbnQtc2V0dXAtKmA7IGRvCisJJFNVRE9fRVhFQyBzZWQgLWUgInM6QFNES1BBVEhAOiR0YXJnZXRfc2RrX2RpcjpnIiAtaSAkZW52X3NldHVwX3NjcmlwdAorZG9uZQorCitAU0RLX1BPU1RfSU5TVEFMTF9DT01NQU5EQAorCisjIGRlbGV0ZSB0aGUgcmVsb2NhdGluZyBzY3JpcHQsIHNvIHRoYXQgdXNlciBpcyBmb3JjZWQgdG8gcmUtcnVuIHRoZSBpbnN0YWxsZXIKKyMgaWYgaGUvc2hlIHdhbnRzIGFub3RoZXIgbG9jYXRpb24gZm9yIHRoZSBzZGsKK2lmIFsgJHNhdmVzY3JpcHRzID0gMCBdIDsgdGhlbgorCSRTVURPX0VYRUMgcm0gLWYgJHtlbnZfc2V0dXBfc2NyaXB0JS8qfS9yZWxvY2F0ZV9zZGsucHkgJHtlbnZfc2V0dXBfc2NyaXB0JS8qfS9yZWxvY2F0ZV9zZGsuc2gKK2ZpCisKK2VjaG8gIlNESyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2V0IHVwIGFuZCBpcyByZWFkeSB0byBiZSB1c2VkLiIKK2VjaG8gIkVhY2ggdGltZSB5b3Ugd2lzaCB0byB1c2UgdGhlIFNESyBpbiBhIG5ldyBzaGVsbCBzZXNzaW9uLCB5b3UgbmVlZCB0byBzb3VyY2UgdGhlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBlLmcuIgorZWNobyAiIFwkIC4gJHRhcmdldF9zZGtfZGlyL2Vudmlyb25tZW50LXNldHVwLUBSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTQCIKKworZXhpdCAwCisKK01BUktFUjoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy90b29sY2hhaW4tc2hhci1yZWxvY2F0ZS5zaCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy90b29sY2hhaW4tc2hhci1yZWxvY2F0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmI4ZTE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLXJlbG9jYXRlLnNoCkBAIC0wLDAgKzEsNTAgQEAKKyMgZml4IGR5bmFtaWMgbG9hZGVyIHBhdGhzIGluIGFsbCBFTEYgU0RLIGJpbmFyaWVzCituYXRpdmVfc3lzcm9vdD0kKCRTVURPX0VYRUMgY2F0ICRlbnZfc2V0dXBfc2NyaXB0IHxncmVwICdPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9J3xjdXQgLWQnPScgLWYyfHRyIC1kICciJykKK2RsX3BhdGg9JCgkU1VET19FWEVDIGZpbmQgJG5hdGl2ZV9zeXNyb290L2xpYiAtbmFtZSAibGQtbGludXgqIikKK2lmIFsgIiRkbF9wYXRoIiA9ICIiIF0gOyB0aGVuCisJZWNobyAiU0RLIGNvdWxkIG5vdCBiZSBzZXQgdXAuIFJlbG9jYXRlIHNjcmlwdCB1bmFibGUgdG8gZmluZCBsZC1saW51eC5zby4gQWJvcnQhIgorCWV4aXQgMQorZmkKK2V4ZWN1dGFibGVfZmlsZXM9JCgkU1VET19FWEVDIGZpbmQgJG5hdGl2ZV9zeXNyb290IC10eXBlIGYgXAorCVwoIC1wZXJtIC0wMTAwIC1vIC1wZXJtIC0wMDEwIC1vIC1wZXJtIC0wMDAxIFwpIC1wcmludGYgIiclaC8lZicgIikKKwordGRpcj1gbWt0ZW1wIC1kYAoraWYgWyB4JHRkaXIgPSB4IF0gOyB0aGVuCisgICBlY2hvICJTREsgcmVsb2NhdGUgZmFpbGVkLCBjb3VsZCBub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSIKKyAgIGV4aXQgMQorZmkKK2VjaG8gIiMhL2Jpbi9iYXNoIiA+ICR0ZGlyL3JlbG9jYXRlX3Nkay5zaAorZWNobyBleGVjICR7ZW52X3NldHVwX3NjcmlwdCUvKn0vcmVsb2NhdGVfc2RrLnB5ICR0YXJnZXRfc2RrX2RpciAkZGxfcGF0aCAkZXhlY3V0YWJsZV9maWxlcyA+PiAkdGRpci9yZWxvY2F0ZV9zZGsuc2gKKyRTVURPX0VYRUMgbXYgJHRkaXIvcmVsb2NhdGVfc2RrLnNoICR7ZW52X3NldHVwX3NjcmlwdCUvKn0vcmVsb2NhdGVfc2RrLnNoCiskU1VET19FWEVDIGNobW9kIDc1NSAke2Vudl9zZXR1cF9zY3JpcHQlLyp9L3JlbG9jYXRlX3Nkay5zaAorcm0gLXJmICR0ZGlyCitpZiBbICRyZWxvY2F0ZSA9IDEgXSA7IHRoZW4KKwkkU1VET19FWEVDICR7ZW52X3NldHVwX3NjcmlwdCUvKn0vcmVsb2NhdGVfc2RrLnNoCisJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCWVjaG8gIlNESyBjb3VsZCBub3QgYmUgc2V0IHVwLiBSZWxvY2F0ZSBzY3JpcHQgZmFpbGVkLiBBYm9ydCEiCisJCWV4aXQgMQorCWZpCitmaQorCisjIHJlcGxhY2UgQFNES1BBVEhAIHdpdGggdGhlIG5ldyBwcmVmaXggaW4gYWxsIHRleHQgZmlsZXM6IGNvbmZpZ3Mvc2NyaXB0cy9ldGMKK2ZvciByZXBsYWNlIGluICIkdGFyZ2V0X3Nka19kaXIgLW1heGRlcHRoIDEiICIkbmF0aXZlX3N5c3Jvb3QiOyBkbworCSRTVURPX0VYRUMgZmluZCAkcmVwbGFjZSAtdHlwZSBmIC1leGVjIGZpbGUgJ3t9JyBcOyB8IFwKKwkJZ3JlcCAiOi4qXChBU0NJSVx8c2NyaXB0XHxzb3VyY2VcKS4qdGV4dCIgfCBcCisJCWF3ayAtRic6JyAne3ByaW50ZiAiXCIlc1wiXG4iLCAkMX0nIHwgXAorCQlncmVwIC12ICIkdGFyZ2V0X3Nka19kaXIvZW52aXJvbm1lbnQtc2V0dXAtKiIgfCBcCisJCSRTVURPX0VYRUMgeGFyZ3MgLW4zMiBzZWQgLWkgLWUgInM6JERFRkFVTFRfSU5TVEFMTF9ESVI6JHRhcmdldF9zZGtfZGlyOmciCitkb25lCisKKyMgY2hhbmdlIGFsbCBzeW1saW5rcyBwb2ludGluZyB0byBAU0RLUEFUSEAKK2ZvciBsIGluICQoJFNVRE9fRVhFQyBmaW5kICRuYXRpdmVfc3lzcm9vdCAtdHlwZSBsKTsgZG8KKwkkU1VET19FWEVDIGxuIC1zZm4gJChyZWFkbGluayAkbHwkU1VET19FWEVDIHNlZCAtZSAiczokREVGQVVMVF9JTlNUQUxMX0RJUjokdGFyZ2V0X3Nka19kaXI6IikgJGwKK2RvbmUKKworIyBmaW5kIG91dCBhbGwgcGVybCBzY3JpcHRzIGluICRuYXRpdmVfc3lzcm9vdCBhbmQgbW9kaWZ5IHRoZW0gcmVwbGFjaW5nIHRoZQorIyBob3N0IHBlcmwgd2l0aCBTREsgcGVybC4KK2ZvciBwZXJsX3NjcmlwdCBpbiAkKCRTVURPX0VYRUMgZmluZCAkbmF0aXZlX3N5c3Jvb3QgLXR5cGUgZiAtZXhlYyBncmVwIC1sICJeIyEuKnBlcmwiICd7fScgXDspOyBkbworCSRTVURPX0VYRUMgc2VkIC1pIC1lICJzOl4jISAqL3Vzci9iaW4vcGVybC4qOiMhIC91c3IvYmluL2VudiBwZXJsOmciIC1lIFwKKwkJInM6IC91c3IvYmluL3Blcmw6IC91c3IvYmluL2VudiBwZXJsOmciICRwZXJsX3NjcmlwdAorZG9uZQorCitlY2hvIGRvbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvX19pbml0X18ucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZDk1MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMiBAQAorZnJvbSBwa2d1dGlsIGltcG9ydCBleHRlbmRfcGF0aAorX19wYXRoX18gPSBleHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL2J1aWxkaGlzdG9yeV9hbmFseXNpcy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvYnVpbGRoaXN0b3J5X2FuYWx5c2lzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzOTVjNzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2J1aWxkaGlzdG9yeV9hbmFseXNpcy5weQpAQCAtMCwwICsxLDQ1NiBAQAorIyBSZXBvcnQgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZXMgaW4gdGhlIGJ1aWxkaGlzdG9yeSByZXBvc2l0b3J5IHNpbmNlIGEgc3BlY2lmaWMgcmV2aXNpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCisjIEF1dGhvcjogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisjCisjIE5vdGU6IHJlcXVpcmVzIEdpdFB5dGhvbiAwLjMuMSsKKyMKKyMgWW91IGNhbiB1c2UgdGhpcyBmcm9tIHRoZSBjb21tYW5kIGxpbmUgYnkgcnVubmluZyBzY3JpcHRzL2J1aWxkaGlzdG9yeS1kaWZmCisjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgZGlmZmxpYgoraW1wb3J0IGdpdAoraW1wb3J0IHJlCitpbXBvcnQgYmIudXRpbHMKKworCisjIEhvdyB0byBkaXNwbGF5IGZpZWxkcworbGlzdF9maWVsZHMgPSBbJ0RFUEVORFMnLCAnUlBST1ZJREVTJywgJ1JERVBFTkRTJywgJ1JSRUNPTU1FTkRTJywgJ1JTVUdHRVNUUycsICdSUkVQTEFDRVMnLCAnUkNPTkZMSUNUUycsICdGSUxFUycsICdGSUxFTElTVCcsICdVU0VSX0NMQVNTRVMnLCAnSU1BR0VfQ0xBU1NFUycsICdJTUFHRV9GRUFUVVJFUycsICdJTUFHRV9MSU5HVUFTJywgJ0lNQUdFX0lOU1RBTEwnLCAnQkFEX1JFQ09NTUVOREFUSU9OUycsICdQQUNLQUdFX0VYQ0xVREUnXQorbGlzdF9vcmRlcl9maWVsZHMgPSBbJ1BBQ0tBR0VTJ10KK2RlZmF1bHR2YWxfbWFwID0geydQS0cnOiAnUEtHJywgJ1BLR0UnOiAnUEUnLCAnUEtHVic6ICdQVicsICdQS0dSJzogJ1BSJ30KK251bWVyaWNfZmllbGRzID0gWydQS0dTSVpFJywgJ0lNQUdFU0laRSddCisjIEZpZWxkcyB0byBtb25pdG9yCittb25pdG9yX2ZpZWxkcyA9IFsnUlBST1ZJREVTJywgJ1JERVBFTkRTJywgJ1JSRUNPTU1FTkRTJywgJ1JSRVBMQUNFUycsICdSQ09ORkxJQ1RTJywgJ1BBQ0tBR0VTJywgJ0ZJTEVMSVNUJywgJ1BLR1NJWkUnLCAnSU1BR0VTSVpFJywgJ1BLRyddCit2ZXJfbW9uaXRvcl9maWVsZHMgPSBbJ1BLR0UnLCAnUEtHVicsICdQS0dSJ10KKyMgUGVyY2VudGFnZSBjaGFuZ2UgdG8gYWxlcnQgZm9yIG51bWVyaWMgZmllbGRzCittb25pdG9yX251bWVyaWNfdGhyZXNob2xkID0gMTAKKyMgSW1hZ2UgZmlsZXMgdG8gbW9uaXRvciAobm90ZSB0aGF0IGltYWdlLWluZm8udHh0IGlzIGhhbmRsZWQgc2VwYXJhdGVseSkKK2ltZ19tb25pdG9yX2ZpbGVzID0gWydpbnN0YWxsZWQtcGFja2FnZS1uYW1lcy50eHQnLCAnZmlsZXMtaW4taW1hZ2UudHh0J10KKyMgUmVsYXRlZCBjb250ZXh0IGZpZWxkcyBmb3IgcmVwb3J0aW5nIChub3RlOiBQRSwgUFYgJiBQUiBhcmUgYWx3YXlzIHJlcG9ydGVkIGZvciBtb25pdG9yZWQgcGFja2FnZSBmaWVsZHMpCityZWxhdGVkX2ZpZWxkcyA9IHt9CityZWxhdGVkX2ZpZWxkc1snUkRFUEVORFMnXSA9IFsnREVQRU5EUyddCityZWxhdGVkX2ZpZWxkc1snUlJFQ09NTUVORFMnXSA9IFsnREVQRU5EUyddCityZWxhdGVkX2ZpZWxkc1snRklMRUxJU1QnXSA9IFsnRklMRVMnXQorcmVsYXRlZF9maWVsZHNbJ1BLR1NJWkUnXSA9IFsnRklMRUxJU1QnXQorcmVsYXRlZF9maWVsZHNbJ2ZpbGVzLWluLWltYWdlLnR4dCddID0gWydpbnN0YWxsZWQtcGFja2FnZS1uYW1lcy50eHQnLCAnVVNFUl9DTEFTU0VTJywgJ0lNQUdFX0NMQVNTRVMnLCAnUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQnLCAnSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORCddCityZWxhdGVkX2ZpZWxkc1snaW5zdGFsbGVkLXBhY2thZ2UtbmFtZXMudHh0J10gPSBbJ0lNQUdFX0ZFQVRVUkVTJywgJ0lNQUdFX0xJTkdVQVMnLCAnSU1BR0VfSU5TVEFMTCcsICdCQURfUkVDT01NRU5EQVRJT05TJywgJ05PX1JFQ09NTUVOREFUSU9OUycsICdQQUNLQUdFX0VYQ0xVREUnXQorCisKK2NsYXNzIENoYW5nZVJlY29yZDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgZmllbGRuYW1lLCBvbGR2YWx1ZSwgbmV3dmFsdWUsIG1vbml0b3JlZCk6CisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5maWVsZG5hbWUgPSBmaWVsZG5hbWUKKyAgICAgICAgc2VsZi5vbGR2YWx1ZSA9IG9sZHZhbHVlCisgICAgICAgIHNlbGYubmV3dmFsdWUgPSBuZXd2YWx1ZQorICAgICAgICBzZWxmLm1vbml0b3JlZCA9IG1vbml0b3JlZAorICAgICAgICBzZWxmLnJlbGF0ZWQgPSBbXQorICAgICAgICBzZWxmLmZpbGVjaGFuZ2VzID0gTm9uZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zdHJfaW50ZXJuYWwoVHJ1ZSkKKworICAgIGRlZiBfc3RyX2ludGVybmFsKHNlbGYsIG91dGVyKToKKyAgICAgICAgaWYgb3V0ZXI6CisgICAgICAgICAgICBpZiAnL2ltYWdlLWZpbGVzLycgaW4gc2VsZi5wYXRoOgorICAgICAgICAgICAgICAgIHByZWZpeCA9ICclczogJyAlIHNlbGYucGF0aC5zcGxpdCgnL2ltYWdlLWZpbGVzLycpWzBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByZWZpeCA9ICclczogJyAlIHNlbGYucGF0aAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJlZml4ID0gJycKKworICAgICAgICBkZWYgcGtnbGlzdF9jb21iaW5lKGRlcHZlcik6CisgICAgICAgICAgICBwa2dsaXN0ID0gW10KKyAgICAgICAgICAgIGZvciBrLHYgaW4gZGVwdmVyLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIHY6CisgICAgICAgICAgICAgICAgICAgIHBrZ2xpc3QuYXBwZW5kKCIlcyAoJXMpIiAlIChrLHYpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBrZ2xpc3QuYXBwZW5kKGspCisgICAgICAgICAgICByZXR1cm4gcGtnbGlzdAorCisgICAgICAgIGlmIHNlbGYuZmllbGRuYW1lIGluIGxpc3RfZmllbGRzIG9yIHNlbGYuZmllbGRuYW1lIGluIGxpc3Rfb3JkZXJfZmllbGRzOgorICAgICAgICAgICAgaWYgc2VsZi5maWVsZG5hbWUgaW4gWydSUFJPVklERVMnLCAnUkRFUEVORFMnLCAnUlJFQ09NTUVORFMnLCAnUlNVR0dFU1RTJywgJ1JSRVBMQUNFUycsICdSQ09ORkxJQ1RTJ106CisgICAgICAgICAgICAgICAgKGRlcHZlcmEsIGRlcHZlcmIpID0gY29tcGFyZV9wa2dfbGlzdHMoc2VsZi5vbGR2YWx1ZSwgc2VsZi5uZXd2YWx1ZSkKKyAgICAgICAgICAgICAgICBhaXRlbXMgPSBwa2dsaXN0X2NvbWJpbmUoZGVwdmVyYSkKKyAgICAgICAgICAgICAgICBiaXRlbXMgPSBwa2dsaXN0X2NvbWJpbmUoZGVwdmVyYikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYWl0ZW1zID0gc2VsZi5vbGR2YWx1ZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgYml0ZW1zID0gc2VsZi5uZXd2YWx1ZS5zcGxpdCgpCisgICAgICAgICAgICByZW1vdmVkID0gbGlzdChzZXQoYWl0ZW1zKSAtIHNldChiaXRlbXMpKQorICAgICAgICAgICAgYWRkZWQgPSBsaXN0KHNldChiaXRlbXMpIC0gc2V0KGFpdGVtcykpCisKKyAgICAgICAgICAgIGlmIHJlbW92ZWQgb3IgYWRkZWQ6CisgICAgICAgICAgICAgICAgaWYgcmVtb3ZlZCBhbmQgbm90IGJpdGVtczoKKyAgICAgICAgICAgICAgICAgICAgb3V0ID0gJyVzOiByZW1vdmVkIGFsbCBpdGVtcyAiJXMiJyAlIChzZWxmLmZpZWxkbmFtZSwgJyAnLmpvaW4ocmVtb3ZlZCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgb3V0ID0gJyVzOiVzJXMnICUgKHNlbGYuZmllbGRuYW1lLCAnIHJlbW92ZWQgIiVzIicgJSAnICcuam9pbihyZW1vdmVkKSBpZiByZW1vdmVkIGVsc2UgJycsICcgYWRkZWQgIiVzIicgJSAnICcuam9pbihhZGRlZCkgaWYgYWRkZWQgZWxzZSAnJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0ID0gJyVzIGNoYW5nZWQgb3JkZXInICUgc2VsZi5maWVsZG5hbWUKKyAgICAgICAgZWxpZiBzZWxmLmZpZWxkbmFtZSBpbiBudW1lcmljX2ZpZWxkczoKKyAgICAgICAgICAgIGF2YWwgPSBpbnQoc2VsZi5vbGR2YWx1ZSBvciAwKQorICAgICAgICAgICAgYnZhbCA9IGludChzZWxmLm5ld3ZhbHVlIG9yIDApCisgICAgICAgICAgICBpZiBhdmFsICE9IDA6CisgICAgICAgICAgICAgICAgcGVyY2VudGNoZyA9ICgoYnZhbCAtIGF2YWwpIC8gZmxvYXQoYXZhbCkpICogMTAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBlcmNlbnRjaGcgPSAxMDAKKyAgICAgICAgICAgIG91dCA9ICclcyBjaGFuZ2VkIGZyb20gJXMgdG8gJXMgKCVzJWQlJSknICUgKHNlbGYuZmllbGRuYW1lLCBzZWxmLm9sZHZhbHVlIG9yICInJyIsIHNlbGYubmV3dmFsdWUgb3IgIicnIiwgJysnIGlmIHBlcmNlbnRjaGcgPiAwIGVsc2UgJycsIHBlcmNlbnRjaGcpCisgICAgICAgIGVsaWYgc2VsZi5maWVsZG5hbWUgaW4gZGVmYXVsdHZhbF9tYXA6CisgICAgICAgICAgICBvdXQgPSAnJXMgY2hhbmdlZCBmcm9tICVzIHRvICVzJyAlIChzZWxmLmZpZWxkbmFtZSwgc2VsZi5vbGR2YWx1ZSwgc2VsZi5uZXd2YWx1ZSkKKyAgICAgICAgICAgIGlmIHNlbGYuZmllbGRuYW1lID09ICdQS0cnIGFuZCAnW2RlZmF1bHRdJyBpbiBzZWxmLm5ld3ZhbHVlOgorICAgICAgICAgICAgICAgIG91dCArPSAnIC0gbWF5IGluZGljYXRlIGRlYmlhbiByZW5hbWluZyBmYWlsdXJlJworICAgICAgICBlbGlmIHNlbGYuZmllbGRuYW1lIGluIFsncGtnX3ByZWluc3QnLCAncGtnX3Bvc3RpbnN0JywgJ3BrZ19wcmVybScsICdwa2dfcG9zdHJtJ106CisgICAgICAgICAgICBpZiBzZWxmLm9sZHZhbHVlIGFuZCBzZWxmLm5ld3ZhbHVlOgorICAgICAgICAgICAgICAgIG91dCA9ICclcyBjaGFuZ2VkOlxuICAnICUgc2VsZi5maWVsZG5hbWUKKyAgICAgICAgICAgIGVsaWYgc2VsZi5uZXd2YWx1ZToKKyAgICAgICAgICAgICAgICBvdXQgPSAnJXMgYWRkZWQ6XG4gICcgJSBzZWxmLmZpZWxkbmFtZQorICAgICAgICAgICAgZWxpZiBzZWxmLm9sZHZhbHVlOgorICAgICAgICAgICAgICAgIG91dCA9ICclcyBjbGVhcmVkOlxuICAnICUgc2VsZi5maWVsZG5hbWUKKyAgICAgICAgICAgIGFsaW5lcyA9IHNlbGYub2xkdmFsdWUuc3BsaXRsaW5lcygpCisgICAgICAgICAgICBibGluZXMgPSBzZWxmLm5ld3ZhbHVlLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgZGlmZiA9IGRpZmZsaWIudW5pZmllZF9kaWZmKGFsaW5lcywgYmxpbmVzLCBzZWxmLmZpZWxkbmFtZSwgc2VsZi5maWVsZG5hbWUsIGxpbmV0ZXJtPScnKQorICAgICAgICAgICAgb3V0ICs9ICdcbiAgJy5qb2luKGxpc3QoZGlmZilbMjpdKQorICAgICAgICAgICAgb3V0ICs9ICdcbiAgLS0nCisgICAgICAgIGVsaWYgc2VsZi5maWVsZG5hbWUgaW4gaW1nX21vbml0b3JfZmlsZXMgb3IgJy9pbWFnZS1maWxlcy8nIGluIHNlbGYucGF0aDoKKyAgICAgICAgICAgIGZpZWxkbmFtZSA9IHNlbGYuZmllbGRuYW1lCisgICAgICAgICAgICBpZiAnL2ltYWdlLWZpbGVzLycgaW4gc2VsZi5wYXRoOgorICAgICAgICAgICAgICAgIGZpZWxkbmFtZSA9IG9zLnBhdGguam9pbignLycgKyBzZWxmLnBhdGguc3BsaXQoJy9pbWFnZS1maWxlcy8nKVsxXSwgc2VsZi5maWVsZG5hbWUpCisgICAgICAgICAgICAgICAgb3V0ID0gJ0NoYW5nZXMgdG8gJXM6XG4gICcgJSBmaWVsZG5hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgb3V0ZXI6CisgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9ICdDaGFuZ2VzIHRvICVzICcgJSBzZWxmLnBhdGgKKyAgICAgICAgICAgICAgICBvdXQgPSAnKCVzKTpcbiAgJyAlIHNlbGYuZmllbGRuYW1lCisgICAgICAgICAgICBpZiBzZWxmLmZpbGVjaGFuZ2VzOgorICAgICAgICAgICAgICAgIG91dCArPSAnXG4gICcuam9pbihbJyVzJyAlIGkgZm9yIGkgaW4gc2VsZi5maWxlY2hhbmdlc10pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFsaW5lcyA9IHNlbGYub2xkdmFsdWUuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgYmxpbmVzID0gc2VsZi5uZXd2YWx1ZS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICBkaWZmID0gZGlmZmxpYi51bmlmaWVkX2RpZmYoYWxpbmVzLCBibGluZXMsIGZpZWxkbmFtZSwgZmllbGRuYW1lLCBsaW5ldGVybT0nJykKKyAgICAgICAgICAgICAgICBvdXQgKz0gJ1xuICAnLmpvaW4obGlzdChkaWZmKSkKKyAgICAgICAgICAgICAgICBvdXQgKz0gJ1xuICAtLScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dCA9ICclcyBjaGFuZ2VkIGZyb20gIiVzIiB0byAiJXMiJyAlIChzZWxmLmZpZWxkbmFtZSwgc2VsZi5vbGR2YWx1ZSwgc2VsZi5uZXd2YWx1ZSkKKworICAgICAgICBpZiBzZWxmLnJlbGF0ZWQ6CisgICAgICAgICAgICBmb3IgY2hnIGluIHNlbGYucmVsYXRlZDoKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3V0ZXIgYW5kIGNoZy5maWVsZG5hbWUgaW4gWydQRScsICdQVicsICdQUiddOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGNoZy5fc3RyX2ludGVybmFsKEZhbHNlKS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgICAgIG91dCArPSAnXG4gICogJXMnICUgbGluZQorCisgICAgICAgIHJldHVybiAnJXMlcycgJSAocHJlZml4LCBvdXQpCisKK2NsYXNzIEZpbGVDaGFuZ2U6CisgICAgY2hhbmdldHlwZV9hZGQgPSAnQScKKyAgICBjaGFuZ2V0eXBlX3JlbW92ZSA9ICdSJworICAgIGNoYW5nZXR5cGVfdHlwZSA9ICdUJworICAgIGNoYW5nZXR5cGVfcGVybXMgPSAnUCcKKyAgICBjaGFuZ2V0eXBlX293bmVyZ3JvdXAgPSAnTycKKyAgICBjaGFuZ2V0eXBlX2xpbmsgPSAnTCcKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoLCBjaGFuZ2V0eXBlLCBvbGR2YWx1ZSA9IE5vbmUsIG5ld3ZhbHVlID0gTm9uZSk6CisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5jaGFuZ2V0eXBlID0gY2hhbmdldHlwZQorICAgICAgICBzZWxmLm9sZHZhbHVlID0gb2xkdmFsdWUKKyAgICAgICAgc2VsZi5uZXd2YWx1ZSA9IG5ld3ZhbHVlCisKKyAgICBkZWYgX2Z0eXBlX3N0cihzZWxmLCBmdHlwZSk6CisgICAgICAgIGlmIGZ0eXBlID09ICctJzoKKyAgICAgICAgICAgIHJldHVybiAnZmlsZScKKyAgICAgICAgZWxpZiBmdHlwZSA9PSAnZCc6CisgICAgICAgICAgICByZXR1cm4gJ2RpcmVjdG9yeScKKyAgICAgICAgZWxpZiBmdHlwZSA9PSAnbCc6CisgICAgICAgICAgICByZXR1cm4gJ3N5bWxpbmsnCisgICAgICAgIGVsaWYgZnR5cGUgPT0gJ2MnOgorICAgICAgICAgICAgcmV0dXJuICdjaGFyIGRldmljZScKKyAgICAgICAgZWxpZiBmdHlwZSA9PSAnYic6CisgICAgICAgICAgICByZXR1cm4gJ2Jsb2NrIGRldmljZScKKyAgICAgICAgZWxpZiBmdHlwZSA9PSAncCc6CisgICAgICAgICAgICByZXR1cm4gJ2ZpZm8nCisgICAgICAgIGVsaWYgZnR5cGUgPT0gJ3MnOgorICAgICAgICAgICAgcmV0dXJuICdzb2NrZXQnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJ3Vua25vd24gKCVzKScgJSBmdHlwZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuY2hhbmdldHlwZSA9PSBzZWxmLmNoYW5nZXR5cGVfYWRkOgorICAgICAgICAgICAgcmV0dXJuICclcyB3YXMgYWRkZWQnICUgc2VsZi5wYXRoCisgICAgICAgIGVsaWYgc2VsZi5jaGFuZ2V0eXBlID09IHNlbGYuY2hhbmdldHlwZV9yZW1vdmU6CisgICAgICAgICAgICByZXR1cm4gJyVzIHdhcyByZW1vdmVkJyAlIHNlbGYucGF0aAorICAgICAgICBlbGlmIHNlbGYuY2hhbmdldHlwZSA9PSBzZWxmLmNoYW5nZXR5cGVfdHlwZToKKyAgICAgICAgICAgIHJldHVybiAnJXMgY2hhbmdlZCB0eXBlIGZyb20gJXMgdG8gJXMnICUgKHNlbGYucGF0aCwgc2VsZi5fZnR5cGVfc3RyKHNlbGYub2xkdmFsdWUpLCBzZWxmLl9mdHlwZV9zdHIoc2VsZi5uZXd2YWx1ZSkpCisgICAgICAgIGVsaWYgc2VsZi5jaGFuZ2V0eXBlID09IHNlbGYuY2hhbmdldHlwZV9wZXJtczoKKyAgICAgICAgICAgIHJldHVybiAnJXMgY2hhbmdlZCBwZXJtaXNzaW9ucyBmcm9tICVzIHRvICVzJyAlIChzZWxmLnBhdGgsIHNlbGYub2xkdmFsdWUsIHNlbGYubmV3dmFsdWUpCisgICAgICAgIGVsaWYgc2VsZi5jaGFuZ2V0eXBlID09IHNlbGYuY2hhbmdldHlwZV9vd25lcmdyb3VwOgorICAgICAgICAgICAgcmV0dXJuICclcyBjaGFuZ2VkIG93bmVyL2dyb3VwIGZyb20gJXMgdG8gJXMnICUgKHNlbGYucGF0aCwgc2VsZi5vbGR2YWx1ZSwgc2VsZi5uZXd2YWx1ZSkKKyAgICAgICAgZWxpZiBzZWxmLmNoYW5nZXR5cGUgPT0gc2VsZi5jaGFuZ2V0eXBlX2xpbms6CisgICAgICAgICAgICByZXR1cm4gJyVzIGNoYW5nZWQgc3ltbGluayB0YXJnZXQgZnJvbSAlcyB0byAlcycgJSAoc2VsZi5wYXRoLCBzZWxmLm9sZHZhbHVlLCBzZWxmLm5ld3ZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICclcyBjaGFuZ2VkICh1bmtub3duKScgJSBzZWxmLnBhdGgKKworCitkZWYgYmxvYl90b19kaWN0KGJsb2IpOgorICAgIGFsaW5lcyA9IGJsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLnNwbGl0bGluZXMoKQorICAgIGFkaWN0ID0ge30KKyAgICBmb3IgbGluZSBpbiBhbGluZXM6CisgICAgICAgIHNwbGl0diA9IFtpLnN0cmlwKCkgZm9yIGkgaW4gbGluZS5zcGxpdCgnPScsMSldCisgICAgICAgIGlmIGxlbihzcGxpdHYpID4gMToKKyAgICAgICAgICAgIGFkaWN0W3NwbGl0dlswXV0gPSBzcGxpdHZbMV0KKyAgICByZXR1cm4gYWRpY3QKKworCitkZWYgZmlsZV9saXN0X3RvX2RpY3QobGluZXMpOgorICAgIGFkaWN0ID0ge30KKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgIyBMZWF2ZSB0aGUgbGFzdCBmZXcgZmllbGRzIGludGFjdCBzbyB3ZSBoYW5kbGUgZmlsZSBuYW1lcyBjb250YWluaW5nIHNwYWNlcworICAgICAgICBzcGxpdHYgPSBsaW5lLnNwbGl0KE5vbmUsNCkKKyAgICAgICAgIyBHcmFiIHRoZSBwYXRoIGFuZCByZW1vdmUgdGhlIGxlYWRpbmcgLgorICAgICAgICBwYXRoID0gc3BsaXR2WzRdWzE6XS5zdHJpcCgpCisgICAgICAgICMgSGFuZGxlIHN5bWxpbmtzCisgICAgICAgIGlmKCcgLT4gJyBpbiBwYXRoKToKKyAgICAgICAgICAgIHRhcmdldCA9IHBhdGguc3BsaXQoJyAtPiAnKVsxXQorICAgICAgICAgICAgcGF0aCA9IHBhdGguc3BsaXQoJyAtPiAnKVswXQorICAgICAgICAgICAgYWRpY3RbcGF0aF0gPSBzcGxpdHZbMDozXSArIFt0YXJnZXRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhZGljdFtwYXRoXSA9IHNwbGl0dlswOjNdCisgICAgcmV0dXJuIGFkaWN0CisKKworZGVmIGNvbXBhcmVfZmlsZV9saXN0cyhhbGluZXMsIGJsaW5lcyk6CisgICAgYWRpY3QgPSBmaWxlX2xpc3RfdG9fZGljdChhbGluZXMpCisgICAgYmRpY3QgPSBmaWxlX2xpc3RfdG9fZGljdChibGluZXMpCisgICAgZmlsZWNoYW5nZXMgPSBbXQorICAgIGZvciBwYXRoLCBzcGxpdHYgaW4gYWRpY3QuaXRlcml0ZW1zKCk6CisgICAgICAgIG5ld3NwbGl0diA9IGJkaWN0LnBvcChwYXRoLCBOb25lKQorICAgICAgICBpZiBuZXdzcGxpdHY6CisgICAgICAgICAgICAjIENoZWNrIHR5cGUKKyAgICAgICAgICAgIG9sZHZhbHVlID0gc3BsaXR2WzBdWzBdCisgICAgICAgICAgICBuZXd2YWx1ZSA9IG5ld3NwbGl0dlswXVswXQorICAgICAgICAgICAgaWYgb2xkdmFsdWUgIT0gbmV3dmFsdWU6CisgICAgICAgICAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGF0aCwgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX3R5cGUsIG9sZHZhbHVlLCBuZXd2YWx1ZSkpCisgICAgICAgICAgICAjIENoZWNrIHBlcm1pc3Npb25zCisgICAgICAgICAgICBvbGR2YWx1ZSA9IHNwbGl0dlswXVsxOl0KKyAgICAgICAgICAgIG5ld3ZhbHVlID0gbmV3c3BsaXR2WzBdWzE6XQorICAgICAgICAgICAgaWYgb2xkdmFsdWUgIT0gbmV3dmFsdWU6CisgICAgICAgICAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGF0aCwgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX3Blcm1zLCBvbGR2YWx1ZSwgbmV3dmFsdWUpKQorICAgICAgICAgICAgIyBDaGVjayBvd25lci9ncm91cAorICAgICAgICAgICAgb2xkdmFsdWUgPSAnJXMvJXMnICUgKHNwbGl0dlsxXSwgc3BsaXR2WzJdKQorICAgICAgICAgICAgbmV3dmFsdWUgPSAnJXMvJXMnICUgKG5ld3NwbGl0dlsxXSwgbmV3c3BsaXR2WzJdKQorICAgICAgICAgICAgaWYgb2xkdmFsdWUgIT0gbmV3dmFsdWU6CisgICAgICAgICAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGF0aCwgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX293bmVyZ3JvdXAsIG9sZHZhbHVlLCBuZXd2YWx1ZSkpCisgICAgICAgICAgICAjIENoZWNrIHN5bWxpbmsgdGFyZ2V0CisgICAgICAgICAgICBpZiBuZXdzcGxpdHZbMF1bMF0gPT0gJ2wnOgorICAgICAgICAgICAgICAgIGlmIGxlbihzcGxpdHYpID4gMzoKKyAgICAgICAgICAgICAgICAgICAgb2xkdmFsdWUgPSBzcGxpdHZbM10KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvbGR2YWx1ZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBuZXd2YWx1ZSA9IG5ld3NwbGl0dlszXQorICAgICAgICAgICAgICAgIGlmIG9sZHZhbHVlICE9IG5ld3ZhbHVlOgorICAgICAgICAgICAgICAgICAgICBmaWxlY2hhbmdlcy5hcHBlbmQoRmlsZUNoYW5nZShwYXRoLCBGaWxlQ2hhbmdlLmNoYW5nZXR5cGVfbGluaywgb2xkdmFsdWUsIG5ld3ZhbHVlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpbGVjaGFuZ2VzLmFwcGVuZChGaWxlQ2hhbmdlKHBhdGgsIEZpbGVDaGFuZ2UuY2hhbmdldHlwZV9yZW1vdmUpKQorCisgICAgIyBXaGF0ZXZlciBpcyBsZWZ0IG92ZXIgaGFzIGJlZW4gYWRkZWQKKyAgICBmb3IgcGF0aCBpbiBiZGljdDoKKyAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGF0aCwgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX2FkZCkpCisKKyAgICByZXR1cm4gZmlsZWNoYW5nZXMKKworCitkZWYgY29tcGFyZV9saXN0cyhhbGluZXMsIGJsaW5lcyk6CisgICAgcmVtb3ZlZCA9IGxpc3Qoc2V0KGFsaW5lcykgLSBzZXQoYmxpbmVzKSkKKyAgICBhZGRlZCA9IGxpc3Qoc2V0KGJsaW5lcykgLSBzZXQoYWxpbmVzKSkKKworICAgIGZpbGVjaGFuZ2VzID0gW10KKyAgICBmb3IgcGtnIGluIHJlbW92ZWQ6CisgICAgICAgIGZpbGVjaGFuZ2VzLmFwcGVuZChGaWxlQ2hhbmdlKHBrZywgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX3JlbW92ZSkpCisgICAgZm9yIHBrZyBpbiBhZGRlZDoKKyAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGtnLCBGaWxlQ2hhbmdlLmNoYW5nZXR5cGVfYWRkKSkKKworICAgIHJldHVybiBmaWxlY2hhbmdlcworCisKK2RlZiBjb21wYXJlX3BrZ19saXN0cyhhc3RyLCBic3RyKToKKyAgICBkZXB2ZXJhID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGFzdHIpCisgICAgZGVwdmVyYiA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihic3RyKQorCisgICAgIyBTdHJpcCBvdXQgY2hhbmdlcyB3aGVyZSB0aGUgdmVyc2lvbiBoYXMgaW5jcmVhc2VkCisgICAgcmVtb3ZlID0gW10KKyAgICBmb3IgayBpbiBkZXB2ZXJhOgorICAgICAgICBpZiBrIGluIGRlcHZlcmI6CisgICAgICAgICAgICBkdmEgPSBkZXB2ZXJhW2tdCisgICAgICAgICAgICBkdmIgPSBkZXB2ZXJiW2tdCisgICAgICAgICAgICBpZiBkdmEgYW5kIGR2YiBhbmQgbGVuKGR2YSkgPT0gbGVuKGR2Yik6CisgICAgICAgICAgICAgICAgIyBTaW5jZSBsZW5ndGggaXMgdGhlIHNhbWUsIHNvcnQgc28gdGhhdCBwcmVmaXhlcyAoZS5nLiA+PSkgd2lsbCBsaW5lIHVwCisgICAgICAgICAgICAgICAgZHZhLnNvcnQoKQorICAgICAgICAgICAgICAgIGR2Yi5zb3J0KCkKKyAgICAgICAgICAgICAgICByZW1vdmVpdCA9IFRydWUKKyAgICAgICAgICAgICAgICBmb3IgZHZhaSwgZHZiaSBpbiB6aXAoZHZhLCBkdmIpOgorICAgICAgICAgICAgICAgICAgICBpZiBkdmFpICE9IGR2Ymk6CisgICAgICAgICAgICAgICAgICAgICAgICBhaXByZWZpeCA9IGR2YWkuc3BsaXQoJyAnKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgYmlwcmVmaXggPSBkdmJpLnNwbGl0KCcgJylbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFpcHJlZml4ID09IGJpcHJlZml4IGFuZCBhaXByZWZpeCBpbiBbJz49JywgJz0nXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBiYi51dGlscy52ZXJjbXAoYmIudXRpbHMuc3BsaXRfdmVyc2lvbihkdmFpKSwgYmIudXRpbHMuc3BsaXRfdmVyc2lvbihkdmJpKSkgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVpdCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWl0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIHJlbW92ZWl0OgorICAgICAgICAgICAgICAgICAgICByZW1vdmUuYXBwZW5kKGspCisKKyAgICBmb3IgayBpbiByZW1vdmU6CisgICAgICAgIGRlcHZlcmEucG9wKGspCisgICAgICAgIGRlcHZlcmIucG9wKGspCisKKyAgICByZXR1cm4gKGRlcHZlcmEsIGRlcHZlcmIpCisKKworZGVmIGNvbXBhcmVfZGljdF9ibG9icyhwYXRoLCBhYmxvYiwgYmJsb2IsIHJlcG9ydF9hbGwsIHJlcG9ydF92ZXIpOgorICAgIGFkaWN0ID0gYmxvYl90b19kaWN0KGFibG9iKQorICAgIGJkaWN0ID0gYmxvYl90b19kaWN0KGJibG9iKQorCisgICAgcGtnbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUocGF0aCkKKworICAgIGRlZmF1bHR2YWxzID0ge30KKyAgICBkZWZhdWx0dmFsc1snUEtHJ10gPSBwa2duYW1lCisgICAgZGVmYXVsdHZhbHNbJ1BLR0UnXSA9ICcwJworCisgICAgY2hhbmdlcyA9IFtdCisgICAga2V5cyA9IGxpc3Qoc2V0KGFkaWN0LmtleXMoKSkgfCBzZXQoYmRpY3Qua2V5cygpKSB8IHNldChkZWZhdWx0dmFsX21hcC5rZXlzKCkpKQorICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgYXN0ciA9IGFkaWN0LmdldChrZXksICcnKQorICAgICAgICBic3RyID0gYmRpY3QuZ2V0KGtleSwgJycpCisgICAgICAgIGlmIGtleSBpbiB2ZXJfbW9uaXRvcl9maWVsZHM6CisgICAgICAgICAgICBtb25pdG9yZWQgPSByZXBvcnRfdmVyIG9yIGFzdHIgb3IgYnN0cgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9uaXRvcmVkID0ga2V5IGluIG1vbml0b3JfZmllbGRzCisgICAgICAgIG1hcHBlZF9rZXkgPSBkZWZhdWx0dmFsX21hcC5nZXQoa2V5LCAnJykKKyAgICAgICAgaWYgbWFwcGVkX2tleToKKyAgICAgICAgICAgIGlmIG5vdCBhc3RyOgorICAgICAgICAgICAgICAgIGFzdHIgPSAnJXMgW2RlZmF1bHRdJyAlIGFkaWN0LmdldChtYXBwZWRfa2V5LCBkZWZhdWx0dmFscy5nZXQoa2V5LCAnJykpCisgICAgICAgICAgICBpZiBub3QgYnN0cjoKKyAgICAgICAgICAgICAgICBic3RyID0gJyVzIFtkZWZhdWx0XScgJSBiZGljdC5nZXQobWFwcGVkX2tleSwgZGVmYXVsdHZhbHMuZ2V0KGtleSwgJycpKQorCisgICAgICAgIGlmIGFzdHIgIT0gYnN0cjoKKyAgICAgICAgICAgIGlmIChub3QgcmVwb3J0X2FsbCkgYW5kIGtleSBpbiBudW1lcmljX2ZpZWxkczoKKyAgICAgICAgICAgICAgICBhdmFsID0gaW50KGFzdHIgb3IgMCkKKyAgICAgICAgICAgICAgICBidmFsID0gaW50KGJzdHIgb3IgMCkKKyAgICAgICAgICAgICAgICBpZiBhdmFsICE9IDA6CisgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRjaGcgPSAoKGJ2YWwgLSBhdmFsKSAvIGZsb2F0KGF2YWwpKSAqIDEwMAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRjaGcgPSAxMDAKKyAgICAgICAgICAgICAgICBpZiBhYnMocGVyY2VudGNoZykgPCBtb25pdG9yX251bWVyaWNfdGhyZXNob2xkOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxpZiAobm90IHJlcG9ydF9hbGwpIGFuZCBrZXkgaW4gbGlzdF9maWVsZHM6CisgICAgICAgICAgICAgICAgaWYga2V5ID09ICJGSUxFTElTVCIgYW5kIHBhdGguZW5kc3dpdGgoIi1kYmciKSBhbmQgYnN0ci5zdHJpcCgpICE9ICcnOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGtleSBpbiBbJ1JQUk9WSURFUycsICdSREVQRU5EUycsICdSUkVDT01NRU5EUycsICdSU1VHR0VTVFMnLCAnUlJFUExBQ0VTJywgJ1JDT05GTElDVFMnXToKKyAgICAgICAgICAgICAgICAgICAgKGRlcHZlcmEsIGRlcHZlcmIpID0gY29tcGFyZV9wa2dfbGlzdHMoYXN0ciwgYnN0cikKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwdmVyYSA9PSBkZXB2ZXJiOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBhbGlzdCA9IGFzdHIuc3BsaXQoKQorICAgICAgICAgICAgICAgIGFsaXN0LnNvcnQoKQorICAgICAgICAgICAgICAgIGJsaXN0ID0gYnN0ci5zcGxpdCgpCisgICAgICAgICAgICAgICAgYmxpc3Quc29ydCgpCisgICAgICAgICAgICAgICAgIyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSByZW1vdmFsIG9mIHNlbGYtZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgaWYgcGtnbmFtZSBpbiBhbGlzdCBhbmQgbm90IHBrZ25hbWUgaW4gYmxpc3Q6CisgICAgICAgICAgICAgICAgICAgIGFsaXN0LnJlbW92ZShwa2duYW1lKQorICAgICAgICAgICAgICAgIGlmICcgJy5qb2luKGFsaXN0KSA9PSAnICcuam9pbihibGlzdCk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBrZXksIGFzdHIsIGJzdHIsIG1vbml0b3JlZCkKKyAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKKyAgICByZXR1cm4gY2hhbmdlcworCisKK2RlZiBwcm9jZXNzX2NoYW5nZXMocmVwb3BhdGgsIHJldmlzaW9uMSwgcmV2aXNpb24yPSdIRUFEJywgcmVwb3J0X2FsbD1GYWxzZSwgcmVwb3J0X3Zlcj1GYWxzZSk6CisgICAgcmVwbyA9IGdpdC5SZXBvKHJlcG9wYXRoKQorICAgIGFzc2VydCByZXBvLmJhcmUgPT0gRmFsc2UKKyAgICBjb21taXQgPSByZXBvLmNvbW1pdChyZXZpc2lvbjEpCisgICAgZGlmZiA9IGNvbW1pdC5kaWZmKHJldmlzaW9uMikKKworICAgIGNoYW5nZXMgPSBbXQorICAgIGZvciBkIGluIGRpZmYuaXRlcl9jaGFuZ2VfdHlwZSgnTScpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKGQuYV9ibG9iLnBhdGgpCisgICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aCgncGFja2FnZXMvJyk6CisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZC5hX2Jsb2IucGF0aCkKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdsYXRlc3QnOgorICAgICAgICAgICAgICAgIGNoYW5nZXMuZXh0ZW5kKGNvbXBhcmVfZGljdF9ibG9icyhwYXRoLCBkLmFfYmxvYiwgZC5iX2Jsb2IsIHJlcG9ydF9hbGwsIHJlcG9ydF92ZXIpKQorICAgICAgICAgICAgZWxpZiBmaWxlbmFtZS5zdGFydHN3aXRoKCdsYXRlc3QuJyk6CisgICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lLCBkLmFfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCksIGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChjaGcpCisgICAgICAgIGVsaWYgcGF0aC5zdGFydHN3aXRoKCdpbWFnZXMvJyk6CisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZC5hX2Jsb2IucGF0aCkKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lIGluIGltZ19tb25pdG9yX2ZpbGVzOgorICAgICAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdmaWxlcy1pbi1pbWFnZS50eHQnOgorICAgICAgICAgICAgICAgICAgICBhbGluZXMgPSBkLmFfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCkuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgIGJsaW5lcyA9IGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICAgICAgZmlsZWNoYW5nZXMgPSBjb21wYXJlX2ZpbGVfbGlzdHMoYWxpbmVzLGJsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlsZWNoYW5nZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWUsIE5vbmUsIE5vbmUsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBjaGcuZmlsZWNoYW5nZXMgPSBmaWxlY2hhbmdlcworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hnKQorICAgICAgICAgICAgICAgIGVsaWYgZmlsZW5hbWUgPT0gJ2luc3RhbGxlZC1wYWNrYWdlLW5hbWVzLnR4dCc6CisgICAgICAgICAgICAgICAgICAgIGFsaW5lcyA9IGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICAgICAgYmxpbmVzID0gZC5iX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICAgICBmaWxlY2hhbmdlcyA9IGNvbXBhcmVfbGlzdHMoYWxpbmVzLGJsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlsZWNoYW5nZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWUsIE5vbmUsIE5vbmUsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBjaGcuZmlsZWNoYW5nZXMgPSBmaWxlY2hhbmdlcworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBmaWxlbmFtZSwgZC5hX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLCBkLmJfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCksIFRydWUpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKKyAgICAgICAgICAgIGVsaWYgZmlsZW5hbWUgPT0gJ2ltYWdlLWluZm8udHh0JzoKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLmV4dGVuZChjb21wYXJlX2RpY3RfYmxvYnMocGF0aCwgZC5hX2Jsb2IsIGQuYl9ibG9iLCByZXBvcnRfYWxsLCByZXBvcnRfdmVyKSkKKyAgICAgICAgICAgIGVsaWYgJy9pbWFnZS1maWxlcy8nIGluIHBhdGg6CisgICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lLCBkLmFfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCksIGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChjaGcpCisKKyAgICAjIExvb2sgZm9yIGFkZGVkIHByZWluc3QvcG9zdGluc3QvcHJlcm0vcG9zdHJtCisgICAgIyAod2l0aG91dCByZXBvcnRpbmcgbmV3bHkgYWRkZWQgcmVjaXBlcykKKyAgICBhZGRlZHBrZ3MgPSBbXQorICAgIGFkZGVkY2hhbmdlcyA9IFtdCisgICAgZm9yIGQgaW4gZGlmZi5pdGVyX2NoYW5nZV90eXBlKCdBJyk6CisgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoZC5iX2Jsb2IucGF0aCkKKyAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKCdwYWNrYWdlcy8nKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShkLmJfYmxvYi5wYXRoKQorICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ2xhdGVzdCc6CisgICAgICAgICAgICAgICAgYWRkZWRwa2dzLmFwcGVuZChwYXRoKQorICAgICAgICAgICAgZWxpZiBmaWxlbmFtZS5zdGFydHN3aXRoKCdsYXRlc3QuJyk6CisgICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lWzc6XSwgJycsIGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBhZGRlZGNoYW5nZXMuYXBwZW5kKGNoZykKKyAgICBmb3IgY2hnIGluIGFkZGVkY2hhbmdlczoKKyAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICBmb3IgcGtnIGluIGFkZGVkcGtnczoKKyAgICAgICAgICAgIGlmIGNoZy5wYXRoLnN0YXJ0c3dpdGgocGtnKToKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChjaGcpCisKKyAgICAjIExvb2sgZm9yIGNsZWFyZWQgcHJlaW5zdC9wb3N0aW5zdC9wcmVybS9wb3N0cm0KKyAgICBmb3IgZCBpbiBkaWZmLml0ZXJfY2hhbmdlX3R5cGUoJ0QnKToKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShkLmFfYmxvYi5wYXRoKQorICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgoJ3BhY2thZ2VzLycpOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGQuYV9ibG9iLnBhdGgpCisgICAgICAgICAgICBpZiBmaWxlbmFtZSAhPSAnbGF0ZXN0JyBhbmQgZmlsZW5hbWUuc3RhcnRzd2l0aCgnbGF0ZXN0LicpOgorICAgICAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBmaWxlbmFtZVs3Ol0sIGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgJycsIFRydWUpCisgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hnKQorCisgICAgIyBMaW5rIHJlbGF0ZWQgY2hhbmdlcworICAgIGZvciBjaGcgaW4gY2hhbmdlczoKKyAgICAgICAgaWYgY2hnLm1vbml0b3JlZDoKKyAgICAgICAgICAgIGZvciBjaGcyIGluIGNoYW5nZXM6CisgICAgICAgICAgICAgICAgIyAoQ2hlY2sgZGlybmFtZSBpbiB0aGUgY2FzZSBvZiBmaWVsZHMgZnJvbSByZWNpcGUgaW5mbyBmaWxlcykKKyAgICAgICAgICAgICAgICBpZiBjaGcucGF0aCA9PSBjaGcyLnBhdGggb3Igb3MucGF0aC5kaXJuYW1lKGNoZy5wYXRoKSA9PSBjaGcyLnBhdGg6CisgICAgICAgICAgICAgICAgICAgIGlmIGNoZzIuZmllbGRuYW1lIGluIHJlbGF0ZWRfZmllbGRzLmdldChjaGcuZmllbGRuYW1lLCBbXSk6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGcucmVsYXRlZC5hcHBlbmQoY2hnMikKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBjaGcucGF0aCA9PSBjaGcyLnBhdGggYW5kIGNoZy5wYXRoLnN0YXJ0c3dpdGgoJ3BhY2thZ2VzLycpIGFuZCBjaGcyLmZpZWxkbmFtZSBpbiBbJ1BFJywgJ1BWJywgJ1BSJ106CisgICAgICAgICAgICAgICAgICAgICAgICBjaGcucmVsYXRlZC5hcHBlbmQoY2hnMikKKworICAgIGlmIHJlcG9ydF9hbGw6CisgICAgICAgIHJldHVybiBjaGFuZ2VzCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIFtjaGcgZm9yIGNoZyBpbiBjaGFuZ2VzIGlmIGNoZy5tb25pdG9yZWRdCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL2NhY2hlZHBhdGgucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2NhY2hlZHBhdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg0MGNjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvY2FjaGVkcGF0aC5weQpAQCAtMCwwICsxLDIzMyBAQAorIworIyBCYXNlZCBvbiBzdGFuZGFyZCBweXRob24gbGlicmFyeSBmdW5jdGlvbnMgYnV0IGF2b2lkCisjIHJlcGVhdGVkIHN0YXQgY2FsbHMuIEl0cyBhc3N1bWVkIHRoZSBmaWxlcyB3aWxsIG5vdCBjaGFuZ2UgZnJvbSB1bmRlciB1cworIyBzbyB3ZSBjYW4gY2FjaGUgc3RhdCBjYWxscy4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzdGF0IGFzIHN0YXRtb2QKKworY2xhc3MgQ2FjaGVkUGF0aChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5zdGF0Y2FjaGUgPSB7fQorICAgICAgICBzZWxmLmxzdGF0Y2FjaGUgPSB7fQorICAgICAgICBzZWxmLm5vcm1wYXRoY2FjaGUgPSB7fQorICAgICAgICByZXR1cm4KKworICAgIGRlZiB1cGRhdGVjYWNoZShzZWxmLCB4KToKKyAgICAgICAgeCA9IHNlbGYubm9ybXBhdGgoeCkKKyAgICAgICAgaWYgeCBpbiBzZWxmLnN0YXRjYWNoZToKKyAgICAgICAgICAgIGRlbCBzZWxmLnN0YXRjYWNoZVt4XQorICAgICAgICBpZiB4IGluIHNlbGYubHN0YXRjYWNoZToKKyAgICAgICAgICAgIGRlbCBzZWxmLmxzdGF0Y2FjaGVbeF0KKworICAgIGRlZiBub3JtcGF0aChzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgcGF0aCBpbiBzZWxmLm5vcm1wYXRoY2FjaGU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5ub3JtcGF0aGNhY2hlW3BhdGhdCisgICAgICAgIG5ld3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpCisgICAgICAgIHNlbGYubm9ybXBhdGhjYWNoZVtwYXRoXSA9IG5ld3BhdGgKKyAgICAgICAgcmV0dXJuIG5ld3BhdGgKKworICAgIGRlZiBfY2FsbHN0YXQoc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHBhdGggaW4gc2VsZi5zdGF0Y2FjaGU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zdGF0Y2FjaGVbcGF0aF0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3QgPSBvcy5zdGF0KHBhdGgpCisgICAgICAgICAgICBzZWxmLnN0YXRjYWNoZVtwYXRoXSA9IHN0CisgICAgICAgICAgICByZXR1cm4gc3QKKyAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgc2VsZi5zdGF0Y2FjaGVbcGF0aF0gPSBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAjIFdlIG1pZ2h0IGFzIHdlbGwgY2FsbCBsc3RhdCBhbmQgdGhlbiBvbmx5IAorICAgICMgY2FsbCBzdGF0IGFzIHdlbGwgaW4gdGhlIHN5bWJvbGljIGxpbmsgY2FzZQorICAgICMgc2luY2UgdGhpcyB0dXJucyBvdXQgdG8gYmUgbXVjaCBtb3JlIG9wdGltYWwKKyAgICAjIGluIHJlYWwgd29ybGQgdXNhZ2Ugb2YgdGhpcyBjYWNoZQorICAgIGRlZiBjYWxsc3RhdChzZWxmLCBwYXRoKToKKyAgICAgICAgcGF0aCA9IHNlbGYubm9ybXBhdGgocGF0aCkKKyAgICAgICAgc2VsZi5jYWxsbHN0YXQocGF0aCkKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RhdGNhY2hlW3BhdGhdCisKKyAgICBkZWYgY2FsbGxzdGF0KHNlbGYsIHBhdGgpOgorICAgICAgICBwYXRoID0gc2VsZi5ub3JtcGF0aChwYXRoKQorICAgICAgICBpZiBwYXRoIGluIHNlbGYubHN0YXRjYWNoZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmxzdGF0Y2FjaGVbcGF0aF0KKyAgICAgICAgI2JiLmVycm9yKCJMU3RhdHBhdGg6IiArIHBhdGgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxzdCA9IG9zLmxzdGF0KHBhdGgpCisgICAgICAgICAgICBzZWxmLmxzdGF0Y2FjaGVbcGF0aF0gPSBsc3QKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0bW9kLlNfSVNMTksobHN0LnN0X21vZGUpOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGNhY2hlW3BhdGhdID0gbHN0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxzdGF0KHBhdGgpCisgICAgICAgICAgICByZXR1cm4gbHN0CisgICAgICAgIGV4Y2VwdCAob3MuZXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubHN0YXRjYWNoZVtwYXRoXSA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLnN0YXRjYWNoZVtwYXRoXSA9IEZhbHNlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMgVGhpcyBmb2xsb3dzIHN5bWJvbGljIGxpbmtzLCBzbyBib3RoIGlzbGluaygpIGFuZCBpc2RpcigpIGNhbiBiZSB0cnVlCisgICAgIyBmb3IgdGhlIHNhbWUgcGF0aCBvbm8gc3lzdGVtcyB0aGF0IHN1cHBvcnQgc3ltbGlua3MKKyAgICBkZWYgaXNmaWxlKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgcmVndWxhciBmaWxlIiIiCisgICAgICAgIHN0ID0gc2VsZi5jYWxsc3RhdChwYXRoKQorICAgICAgICBpZiBub3Qgc3Q6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIHN0YXRtb2QuU19JU1JFRyhzdC5zdF9tb2RlKQorCisgICAgIyBJcyBhIHBhdGggYSBkaXJlY3Rvcnk/CisgICAgIyBUaGlzIGZvbGxvd3Mgc3ltYm9saWMgbGlua3MsIHNvIGJvdGggaXNsaW5rKCkgYW5kIGlzZGlyKCkKKyAgICAjIGNhbiBiZSB0cnVlIGZvciB0aGUgc2FtZSBwYXRoIG9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IHN5bWxpbmtzCisgICAgZGVmIGlzZGlyKHNlbGYsIHMpOgorICAgICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aG5hbWUgcmVmZXJzIHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4iIiIKKyAgICAgICAgc3QgPSBzZWxmLmNhbGxzdGF0KHMpCisgICAgICAgIGlmIG5vdCBzdDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gc3RhdG1vZC5TX0lTRElSKHN0LnN0X21vZGUpCisKKyAgICBkZWYgaXNsaW5rKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgc3ltYm9saWMgbGluayIiIgorICAgICAgICBzdCA9IHNlbGYuY2FsbGxzdGF0KHBhdGgpCisgICAgICAgIGlmIG5vdCBzdDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gc3RhdG1vZC5TX0lTTE5LKHN0LnN0X21vZGUpCisKKyAgICAjIERvZXMgYSBwYXRoIGV4aXN0PworICAgICMgVGhpcyBpcyBmYWxzZSBmb3IgZGFuZ2xpbmcgc3ltYm9saWMgbGlua3Mgb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgdGhlbS4KKyAgICBkZWYgZXhpc3RzKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGV4aXN0cy4gIFJldHVybnMgRmFsc2UgZm9yIGJyb2tlbiBzeW1ib2xpYyBsaW5rcyIiIgorICAgICAgICBpZiBzZWxmLmNhbGxzdGF0KHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgbGV4aXN0cyhzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBleGlzdHMuICBSZXR1cm5zIFRydWUgZm9yIGJyb2tlbiBzeW1ib2xpYyBsaW5rcyIiIgorICAgICAgICBpZiBzZWxmLmNhbGxsc3RhdChwYXRoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHN0YXQoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmNhbGxzdGF0KHBhdGgpCisKKyAgICBkZWYgbHN0YXQoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmNhbGxsc3RhdChwYXRoKQorCisgICAgZGVmIHdhbGsoc2VsZiwgdG9wLCB0b3Bkb3duPVRydWUsIG9uZXJyb3I9Tm9uZSwgZm9sbG93bGlua3M9RmFsc2UpOgorICAgICAgICAjIE1hdGNoZXMgb3Mud2Fsaywgbm90IG9zLnBhdGgud2FsaygpCisKKyAgICAgICAgIyBXZSBtYXkgbm90IGhhdmUgcmVhZCBwZXJtaXNzaW9uIGZvciB0b3AsIGluIHdoaWNoIGNhc2Ugd2UgY2FuJ3QKKyAgICAgICAgIyBnZXQgYSBsaXN0IG9mIHRoZSBmaWxlcyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5zLiAgb3MucGF0aC53YWxrCisgICAgICAgICMgYWx3YXlzIHN1cHByZXNzZWQgdGhlIGV4Y2VwdGlvbiB0aGVuLCByYXRoZXIgdGhhbiBibG93IHVwIGZvciBhCisgICAgICAgICMgbWlub3IgcmVhc29uIHdoZW4gKHNheSkgYSB0aG91c2FuZCByZWFkYWJsZSBkaXJlY3RvcmllcyBhcmUgc3RpbGwKKyAgICAgICAgIyBsZWZ0IHRvIHZpc2l0LiAgVGhhdCBsb2dpYyBpcyBjb3BpZWQgaGVyZS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHRvcCkKKyAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGlmIG9uZXJyb3IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgb25lcnJvcihlcnIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBkaXJzLCBub25kaXJzID0gW10sIFtdCisgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgaWYgc2VsZi5pc2Rpcihvcy5wYXRoLmpvaW4odG9wLCBuYW1lKSk6CisgICAgICAgICAgICAgICAgZGlycy5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbm9uZGlycy5hcHBlbmQobmFtZSkKKworICAgICAgICBpZiB0b3Bkb3duOgorICAgICAgICAgICAgeWllbGQgdG9wLCBkaXJzLCBub25kaXJzCisgICAgICAgIGZvciBuYW1lIGluIGRpcnM6CisgICAgICAgICAgICBuZXdfcGF0aCA9IG9zLnBhdGguam9pbih0b3AsIG5hbWUpCisgICAgICAgICAgICBpZiBmb2xsb3dsaW5rcyBvciBub3Qgc2VsZi5pc2xpbmsobmV3X3BhdGgpOgorICAgICAgICAgICAgICAgIGZvciB4IGluIHNlbGYud2FsayhuZXdfcGF0aCwgdG9wZG93biwgb25lcnJvciwgZm9sbG93bGlua3MpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCB4CisgICAgICAgIGlmIG5vdCB0b3Bkb3duOgorICAgICAgICAgICAgeWllbGQgdG9wLCBkaXJzLCBub25kaXJzCisKKyAgICAjIyByZWFscGF0aCgpIHJlbGF0ZWQgZnVuY3Rpb25zCisgICAgZGVmIF9faXNfcGF0aF9iZWxvdyhzZWxmLCBmaWxlLCByb290KToKKyAgICAgICAgcmV0dXJuIChmaWxlICsgb3MucGF0aC5zZXApLnN0YXJ0c3dpdGgocm9vdCkKKworICAgIGRlZiBfX3JlYWxwYXRoX3JlbChzZWxmLCBzdGFydCwgcmVsX3BhdGgsIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKToKKyAgICAgICAgIiIiQ2FsY3VsYXRlcyByZWFsIHBhdGggb2Ygc3ltbGluayAnc3RhcnQnICsgJ3JlbF9wYXRoJyBiZWxvdworICAgICAgICAncm9vdCc7IG5vIHBhcnQgb2YgJ3N0YXJ0JyBiZWxvdyAncm9vdCcgbXVzdCBjb250YWluIHN5bWxpbmtzLiAiIiIKKyAgICAgICAgaGF2ZV9kaXIgPSBUcnVlCisKKyAgICAgICAgZm9yIGQgaW4gcmVsX3BhdGguc3BsaXQob3MucGF0aC5zZXApOgorICAgICAgICAgICAgaWYgbm90IGhhdmVfZGlyIGFuZCBub3QgYXNzdW1lX2RpcjoKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVOT0VOVCwgIm5vIHN1Y2ggZGlyZWN0b3J5ICVzIiAlIHN0YXJ0KQorCisgICAgICAgICAgICBpZiBkID09IG9zLnBhdGgucGFyZGlyOiAjICcuLicKKyAgICAgICAgICAgICAgICBpZiBsZW4oc3RhcnQpID49IGxlbihyb290KToKKyAgICAgICAgICAgICAgICAgICAgIyBkbyBub3QgZm9sbG93ICcuLicgYmVmb3JlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBvcy5wYXRoLmRpcm5hbWUoc3RhcnQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBlbWl0IHdhcm5pbmc/CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgKHN0YXJ0LCBoYXZlX2RpcikgPSBzZWxmLl9fcmVhbHBhdGgob3MucGF0aC5qb2luKHN0YXJ0LCBkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcikKKworICAgICAgICAgICAgYXNzZXJ0KHNlbGYuX19pc19wYXRoX2JlbG93KHN0YXJ0LCByb290KSkKKworICAgICAgICByZXR1cm4gc3RhcnQKKworICAgIGRlZiBfX3JlYWxwYXRoKHNlbGYsIGZpbGUsIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKToKKyAgICAgICAgd2hpbGUgc2VsZi5pc2xpbmsoZmlsZSkgYW5kIGxlbihmaWxlKSA+PSBsZW4ocm9vdCk6CisgICAgICAgICAgICBpZiBsb29wX2NudCA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUxPT1AsIGZpbGUpCisKKyAgICAgICAgICAgIGxvb3BfY250IC09IDEKKyAgICAgICAgICAgIHRhcmdldCA9IG9zLnBhdGgubm9ybXBhdGgob3MucmVhZGxpbmsoZmlsZSkpCisgICAgCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Ficyh0YXJnZXQpOgorICAgICAgICAgICAgICAgIHRkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZSkKKyAgICAgICAgICAgICAgICBhc3NlcnQoc2VsZi5fX2lzX3BhdGhfYmVsb3codGRpciwgcm9vdCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRkaXIgPSByb290CisKKyAgICAgICAgICAgIGZpbGUgPSBzZWxmLl9fcmVhbHBhdGhfcmVsKHRkaXIsIHRhcmdldCwgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaXNfZGlyID0gc2VsZi5pc2RpcihmaWxlKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpc19kaXIgPSBGYWxzZQorCisgICAgICAgIHJldHVybiAoZmlsZSwgaXNfZGlyKQorCisgICAgZGVmIHJlYWxwYXRoKHNlbGYsIGZpbGUsIHJvb3QsIHVzZV9waHlzZGlyID0gVHJ1ZSwgbG9vcF9jbnQgPSAxMDAsIGFzc3VtZV9kaXIgPSBGYWxzZSk6CisgICAgICAgICIiIiBSZXR1cm5zIHRoZSBjYW5vbmljYWwgcGF0aCBvZiAnZmlsZScgd2l0aCBhc3N1bWluZyBhCisgICAgICAgIHRvcGxldmVsICdyb290JyBkaXJlY3RvcnkuIFdoZW4gJ3VzZV9waHlzZGlyJyBpcyBzZXQsIGFsbAorICAgICAgICBwcmVjZWRpbmcgcGF0aCBjb21wb25lbnRzIG9mICdmaWxlJyB3aWxsIGJlIHJlc29sdmVkIGZpcnN0OworICAgICAgICB0aGlzIGZsYWcgc2hvdWxkIGJlIHNldCB1bmxlc3MgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IHRoZXJlIGlzCisgICAgICAgIG5vIHN5bWxpbmsgaW4gdGhlIHBhdGguIFdoZW4gJ2Fzc3VtZV9kaXInIGlzIG5vdCBzZXQsIG1pc3NpbmcKKyAgICAgICAgcGF0aCBjb21wb25lbnRzIHdpbGwgcmFpc2UgYW4gRU5PRU5UIGVycm9yIiIiCisKKyAgICAgICAgcm9vdCA9IG9zLnBhdGgubm9ybXBhdGgocm9vdCkKKyAgICAgICAgZmlsZSA9IG9zLnBhdGgubm9ybXBhdGgoZmlsZSkKKworICAgICAgICBpZiBub3Qgcm9vdC5lbmRzd2l0aChvcy5wYXRoLnNlcCk6CisgICAgICAgICAgICAjIGxldHRpbmcgcm9vdCBlbmQgd2l0aCAnLycgbWFrZXMgc29tZSB0aGluZ3MgZWFzaWVyCisgICAgICAgICAgICByb290ID0gcm9vdCArIG9zLnBhdGguc2VwCisKKyAgICAgICAgaWYgbm90IHNlbGYuX19pc19wYXRoX2JlbG93KGZpbGUsIHJvb3QpOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FSU5WQUwsICJmaWxlICclcycgaXMgbm90IGJlbG93IHJvb3QiICUgZmlsZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB1c2VfcGh5c2RpcjoKKyAgICAgICAgICAgICAgICBmaWxlID0gc2VsZi5fX3JlYWxwYXRoX3JlbChyb290LCBmaWxlWyhsZW4ocm9vdCkgLSAxKTpdLCByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmlsZSA9IHNlbGYuX19yZWFscGF0aChmaWxlLCByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcilbMF0KKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUxPT1A6CisgICAgICAgICAgICAgICAgIyBtYWtlIEVMT09QIG1vcmUgcmVhZGFibGU7IHdpdGhvdXQgY2F0Y2hpbmcgaXQsIHRoZXJlIHdpbGwKKyAgICAgICAgICAgICAgICAjIGJlIHByaW50ZWQgYSBiYWNrdHJhY2Ugd2l0aCAxMDBzIG9mIE9TRXJyb3IgZXhjZXB0aW9ucworICAgICAgICAgICAgICAgICMgZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUxPT1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9vIG11Y2ggcmVjdXJzaW9ucyB3aGlsZSByZXNvbHZpbmcgJyVzJzsgbG9vcCBpbiAnJXMnIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZSwgZS5zdHJlcnJvcikpCisKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgcmV0dXJuIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvY2xhc3NleHRlbmQucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2NsYXNzZXh0ZW5kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMDdlY2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2NsYXNzZXh0ZW5kLnB5CkBAIC0wLDAgKzEsMTIwIEBACitjbGFzcyBDbGFzc0V4dGVuZGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4dG5hbWUsIGQpOgorICAgICAgICBzZWxmLmV4dG5hbWUgPSBleHRuYW1lCisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi5wa2dzX21hcHBpbmcgPSBbXQorCisgICAgZGVmIGV4dGVuZF9uYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoImtlcm5lbC0iKSBvciBuYW1lID09ICJ2aXJ0dWFsL2tlcm5lbCI6CisgICAgICAgICAgICByZXR1cm4gbmFtZQorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoInJ0bGQiKToKKyAgICAgICAgICAgIHJldHVybiBuYW1lCisgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoIi1jcm9zc3NkayIpOgorICAgICAgICAgICAgcmV0dXJuIG5hbWUKKyAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgiLSIgKyBzZWxmLmV4dG5hbWUpOgorICAgICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgiLSIgKyBzZWxmLmV4dG5hbWUsICIiKQorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoInZpcnR1YWwvIik6CisgICAgICAgICAgICBzdWJzID0gbmFtZS5zcGxpdCgiLyIsIDEpWzFdCisgICAgICAgICAgICBpZiBub3Qgc3Vicy5zdGFydHN3aXRoKHNlbGYuZXh0bmFtZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJ2aXJ0dWFsLyIgKyBzZWxmLmV4dG5hbWUgKyAiLSIgKyBzdWJzCisgICAgICAgICAgICByZXR1cm4gbmFtZQorICAgICAgICBpZiBub3QgbmFtZS5zdGFydHN3aXRoKHNlbGYuZXh0bmFtZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5leHRuYW1lICsgIi0iICsgbmFtZQorICAgICAgICByZXR1cm4gbmFtZQorCisgICAgZGVmIG1hcF92YXJpYWJsZShzZWxmLCB2YXJuYW1lLCBzZXR2YXIgPSBUcnVlKToKKyAgICAgICAgdmFyID0gc2VsZi5kLmdldFZhcih2YXJuYW1lLCBUcnVlKQorICAgICAgICBpZiBub3QgdmFyOgorICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgIHZhciA9IHZhci5zcGxpdCgpCisgICAgICAgIG5ld3ZhciA9IFtdCisgICAgICAgIGZvciB2IGluIHZhcjoKKyAgICAgICAgICAgIG5ld3Zhci5hcHBlbmQoc2VsZi5leHRlbmRfbmFtZSh2KSkKKyAgICAgICAgbmV3ZGF0YSA9ICAiICIuam9pbihuZXd2YXIpCisgICAgICAgIGlmIHNldHZhcjoKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIodmFybmFtZSwgbmV3ZGF0YSkKKyAgICAgICAgcmV0dXJuIG5ld2RhdGEKKworICAgIGRlZiBtYXBfcmVnZXhwX3ZhcmlhYmxlKHNlbGYsIHZhcm5hbWUsIHNldHZhciA9IFRydWUpOgorICAgICAgICB2YXIgPSBzZWxmLmQuZ2V0VmFyKHZhcm5hbWUsIFRydWUpCisgICAgICAgIGlmIG5vdCB2YXI6CisgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgdmFyID0gdmFyLnNwbGl0KCkKKyAgICAgICAgbmV3dmFyID0gW10KKyAgICAgICAgZm9yIHYgaW4gdmFyOgorICAgICAgICAgICAgaWYgdi5zdGFydHN3aXRoKCJeIiArIHNlbGYuZXh0bmFtZSk6CisgICAgICAgICAgICAgICAgbmV3dmFyLmFwcGVuZCh2KQorICAgICAgICAgICAgZWxpZiB2LnN0YXJ0c3dpdGgoIl4iKToKKyAgICAgICAgICAgICAgICBuZXd2YXIuYXBwZW5kKCJeIiArIHNlbGYuZXh0bmFtZSArICItIiArIHZbMTpdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXd2YXIuYXBwZW5kKHNlbGYuZXh0ZW5kX25hbWUodikpCisgICAgICAgIG5ld2RhdGEgPSAgIiAiLmpvaW4obmV3dmFyKQorICAgICAgICBpZiBzZXR2YXI6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKHZhcm5hbWUsIG5ld2RhdGEpCisgICAgICAgIHJldHVybiBuZXdkYXRhCisKKyAgICBkZWYgbWFwX2RlcGVuZHMoc2VsZiwgZGVwKToKKyAgICAgICAgaWYgZGVwLmVuZHN3aXRoKCgiLW5hdGl2ZSIsICItbmF0aXZlLXJ1bnRpbWUiKSkgb3IgKCduYXRpdmVzZGstJyBpbiBkZXApIG9yICgnY3Jvc3MtY2FuYWRpYW4nIGluIGRlcCkgb3IgKCctY3Jvc3NzZGstJyBpbiBkZXApOgorICAgICAgICAgICAgcmV0dXJuIGRlcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBEbyBub3QgZXh0ZW5kIGZvciB0aGF0IGFscmVhZHkgaGF2ZSBtdWx0aWxpYiBwcmVmaXgKKyAgICAgICAgICAgIHZhciA9IHNlbGYuZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIHZhcjoKKyAgICAgICAgICAgICAgICB2YXIgPSB2YXIuc3BsaXQoKQorICAgICAgICAgICAgICAgIGZvciB2IGluIHZhcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwLnN0YXJ0c3dpdGgodik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVwCisgICAgICAgICAgICByZXR1cm4gc2VsZi5leHRlbmRfbmFtZShkZXApCisKKyAgICBkZWYgbWFwX2RlcGVuZHNfdmFyaWFibGUoc2VsZiwgdmFybmFtZSwgc3VmZml4ID0gIiIpOgorICAgICAgICAjIFdlIG5lZWQgdG8gcHJlc2VydmUgRVhURU5EUEtHViBzbyBpdCBjYW4gYmUgZXhwYW5kZWQgY29ycmVjdGx5IGxhdGVyCisgICAgICAgIGlmIHN1ZmZpeDoKKyAgICAgICAgICAgIHZhcm5hbWUgPSB2YXJuYW1lICsgIl8iICsgc3VmZml4CisgICAgICAgIG9yaWcgPSBzZWxmLmQuZ2V0VmFyKCJFWFRFTkRQS0dWIiwgRmFsc2UpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkVYVEVORFBLR1YiLCAiRVhURU5EUEtHViIpCisgICAgICAgIGRlcHMgPSBzZWxmLmQuZ2V0VmFyKHZhcm5hbWUsIFRydWUpCisgICAgICAgIGlmIG5vdCBkZXBzOgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiRVhURU5EUEtHViIsIG9yaWcpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZGVwcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkZXBzKQorICAgICAgICBuZXdkZXBzID0ge30KKyAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgbmV3ZGVwc1tzZWxmLm1hcF9kZXBlbmRzKGRlcCldID0gZGVwc1tkZXBdCisKKyAgICAgICAgc2VsZi5kLnNldFZhcih2YXJuYW1lLCBiYi51dGlscy5qb2luX2RlcHMobmV3ZGVwcywgRmFsc2UpLnJlcGxhY2UoIkVYVEVORFBLR1YiLCAiJHtFWFRFTkRQS0dWfSIpKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJFWFRFTkRQS0dWIiwgb3JpZykKKworICAgIGRlZiBtYXBfcGFja2FnZXZhcnMoc2VsZik6CisgICAgICAgIGZvciBwa2cgaW4gKHNlbGYuZC5nZXRWYXIoIlBBQ0tBR0VTIiwgVHJ1ZSkuc3BsaXQoKSArIFsiIl0pOgorICAgICAgICAgICAgc2VsZi5tYXBfZGVwZW5kc192YXJpYWJsZSgiUkRFUEVORFMiLCBwa2cpCisgICAgICAgICAgICBzZWxmLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJSUkVDT01NRU5EUyIsIHBrZykKKyAgICAgICAgICAgIHNlbGYubWFwX2RlcGVuZHNfdmFyaWFibGUoIlJTVUdHRVNUUyIsIHBrZykKKyAgICAgICAgICAgIHNlbGYubWFwX2RlcGVuZHNfdmFyaWFibGUoIlJQUk9WSURFUyIsIHBrZykKKyAgICAgICAgICAgIHNlbGYubWFwX2RlcGVuZHNfdmFyaWFibGUoIlJSRVBMQUNFUyIsIHBrZykKKyAgICAgICAgICAgIHNlbGYubWFwX2RlcGVuZHNfdmFyaWFibGUoIlJDT05GTElDVFMiLCBwa2cpCisgICAgICAgICAgICBzZWxmLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJQS0ciLCBwa2cpCisKKyAgICBkZWYgcmVuYW1lX3BhY2thZ2VzKHNlbGYpOgorICAgICAgICBmb3IgcGtnIGluIChzZWxmLmQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgcGtnLnN0YXJ0c3dpdGgoc2VsZi5leHRuYW1lKToKKyAgICAgICAgICAgICAgIHNlbGYucGtnc19tYXBwaW5nLmFwcGVuZChbcGtnLnNwbGl0KHNlbGYuZXh0bmFtZSArICItIilbMV0sIHBrZ10pCisgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5wa2dzX21hcHBpbmcuYXBwZW5kKFtwa2csIHNlbGYuZXh0ZW5kX25hbWUocGtnKV0pCisKKyAgICAgICAgc2VsZi5kLnNldFZhcigiUEFDS0FHRVMiLCAiICIuam9pbihbcm93WzFdIGZvciByb3cgaW4gc2VsZi5wa2dzX21hcHBpbmddKSkKKworICAgIGRlZiByZW5hbWVfcGFja2FnZV92YXJpYWJsZXMoc2VsZiwgdmFyaWFibGVzKToKKyAgICAgICAgZm9yIHBrZ19tYXBwaW5nIGluIHNlbGYucGtnc19tYXBwaW5nOgorICAgICAgICAgICAgZm9yIHN1YnMgaW4gdmFyaWFibGVzOgorICAgICAgICAgICAgICAgIHNlbGYuZC5yZW5hbWVWYXIoIiVzXyVzIiAlIChzdWJzLCBwa2dfbWFwcGluZ1swXSksICIlc18lcyIgJSAoc3VicywgcGtnX21hcHBpbmdbMV0pKQorCitjbGFzcyBOYXRpdmVzZGtDbGFzc0V4dGVuZGVyKENsYXNzRXh0ZW5kZXIpOgorICAgIGRlZiBtYXBfZGVwZW5kcyhzZWxmLCBkZXApOgorICAgICAgICBpZiBkZXAuc3RhcnRzd2l0aChzZWxmLmV4dG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIGRlcAorICAgICAgICBpZiBkZXAuZW5kc3dpdGgoKCItZ2NjLWluaXRpYWwiLCAiLWdjYyIsICItZysrIikpOgorICAgICAgICAgICAgcmV0dXJuIGRlcCArICItY3Jvc3NzZGsiCisgICAgICAgIGVsaWYgZGVwLmVuZHN3aXRoKCgiLW5hdGl2ZSIsICItbmF0aXZlLXJ1bnRpbWUiKSkgb3IgKCduYXRpdmVzZGstJyBpbiBkZXApIG9yICgnLWNyb3NzLScgaW4gZGVwKSBvciAoJy1jcm9zc3Nkay0nIGluIGRlcCk6CisgICAgICAgICAgICByZXR1cm4gZGVwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5leHRlbmRfbmFtZShkZXApCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL2NsYXNzdXRpbHMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2NsYXNzdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxODhmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvY2xhc3N1dGlscy5weQpAQCAtMCwwICsxLDQzIEBACitjbGFzcyBDbGFzc1JlZ2lzdHJ5KHR5cGUpOgorICAgICIiIk1haW50YWluIGEgcmVnaXN0cnkgb2YgY2xhc3NlcywgaW5kZXhlZCBieSBuYW1lLgorCitOb3RlIHRoYXQgdGhpcyBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyB0aGF0IHRoZSBuYW1lcyBiZSB1bmlxdWUsIGFzIGl0IHVzZXMKK2EgZGljdGlvbmFyeSB0byBob2xkIHRoZSBjbGFzc2VzIGJ5IG5hbWUuCisKK1RoZSBuYW1lIGluIHRoZSByZWdpc3RyeSBjYW4gYmUgb3ZlcnJpZGRlbiB2aWEgdGhlICduYW1lJyBhdHRyaWJ1dGUgb2YgdGhlCitjbGFzcywgYW5kIHRoZSAncHJpb3JpdHknIGF0dHJpYnV0ZSBjb250cm9scyBwcmlvcml0eS4gVGhlIHByaW9yaXRpemVkKCkKK21ldGhvZCByZXR1cm5zIHRoZSByZWdpc3RlcmVkIGNsYXNzZXMgaW4gcHJpb3JpdHkgb3JkZXIuCisKK1N1YmNsYXNzZXMgb2YgQ2xhc3NSZWdpc3RyeSBtYXkgZGVmaW5lIGFuICdpbXBsZW1lbnRlZCcgcHJvcGVydHkgdG8gZXhlcnQKK2NvbnRyb2wgb3ZlciB3aGV0aGVyIHRoZSBjbGFzcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZWdpc3RyeSAoZS5nLiB0byBrZWVwCithYnN0cmFjdCBiYXNlIGNsYXNzZXMgb3V0IG9mIHRoZSByZWdpc3RyeSkuIiIiCisgICAgcHJpb3JpdHkgPSAwCisgICAgY2xhc3MgX19tZXRhY2xhc3NfXyh0eXBlKToKKyAgICAgICAgIiIiR2l2ZSBlYWNoIENsYXNzUmVnaXN0cnkgdGhlaXIgb3duIHJlZ2lzdHJ5IiIiCisgICAgICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBhdHRycyk6CisgICAgICAgICAgICBjbHMucmVnaXN0cnkgPSB7fQorICAgICAgICAgICAgdHlwZS5fX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBhdHRycykKKworICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBhdHRycyk6CisgICAgICAgIHN1cGVyKENsYXNzUmVnaXN0cnksIGNscykuX19pbml0X18obmFtZSwgYmFzZXMsIGF0dHJzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3QgY2xzLmltcGxlbWVudGVkOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xzLm5hbWUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgY2xzLm5hbWUgPSBuYW1lCisgICAgICAgIGNscy5yZWdpc3RyeVtjbHMubmFtZV0gPSBjbHMKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwcmlvcml0aXplZCh0Y2xzKToKKyAgICAgICAgcmV0dXJuIHNvcnRlZCh0Y2xzLnJlZ2lzdHJ5LnZhbHVlcygpLAorICAgICAgICAgICAgICAgICAgICAgIGtleT1sYW1iZGEgdjogdi5wcmlvcml0eSwgcmV2ZXJzZT1UcnVlKQorCisgICAgZGVmIHVucmVnaXN0ZXIoY2xzKToKKyAgICAgICAgZm9yIGtleSBpbiBjbHMucmVnaXN0cnkua2V5cygpOgorICAgICAgICAgICAgaWYgY2xzLnJlZ2lzdHJ5W2tleV0gaXMgY2xzOgorICAgICAgICAgICAgICAgIGRlbCBjbHMucmVnaXN0cnlba2V5XQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jb3B5X2J1aWxkc3lzdGVtLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jb3B5X2J1aWxkc3lzdGVtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OTU3OGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2NvcHlfYnVpbGRzeXN0ZW0ucHkKQEAgLTAsMCArMSwxMDEgQEAKKyMgVGhpcyBjbGFzcyBzaG91bGQgcHJvdmlkZSBlYXN5IGFjY2VzcyB0byB0aGUgZGlmZmVyZW50IGFzcGVjdHMgb2YgdGhlCisjIGJ1aWxkc3lzdGVtIHN1Y2ggYXMgbGF5ZXJzLCBiaXRiYWtlIGxvY2F0aW9uLCBldGMuCitpbXBvcnQgc3RhdAoraW1wb3J0IHNodXRpbAorCitkZWYgX3NtYXJ0X2NvcHkoc3JjLCBkZXN0KToKKyAgICAjIHNtYXJ0X2NvcHkgd2lsbCBjaG9vc2UgdGhlIGNvcnJlY3QgZnVuY3Rpb24gZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlCisgICAgIyBzb3VyY2UgaXMgYSBmaWxlIG9yIGEgZGlyZWN0b3J5LgorICAgIG1vZGUgPSBvcy5zdGF0KHNyYykuc3RfbW9kZQorICAgIGlmIHN0YXQuU19JU0RJUihtb2RlKToKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNyYywgZGVzdCwgc3ltbGlua3M9VHJ1ZSkKKyAgICBlbHNlOgorICAgICAgICBzaHV0aWwuY29weWZpbGUoc3JjLCBkZXN0KQorICAgICAgICBzaHV0aWwuY29weW1vZGUoc3JjLCBkZXN0KQorCitjbGFzcyBCdWlsZFN5c3RlbShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLmxheWVyZGlycyA9IGQuZ2V0VmFyKCdCQkxBWUVSUycsIFRydWUpLnNwbGl0KCkKKworICAgIGRlZiBjb3B5X2JpdGJha2VfYW5kX2xheWVycyhzZWxmLCBkZXN0ZGlyKToKKyAgICAgICAgIyBDb3B5IGluIGFsbCBtZXRhZGF0YSBsYXllcnMgKyBiaXRiYWtlIChhcyByZXBvc2l0b3JpZXMpCisgICAgICAgIGxheWVyc19jb3BpZWQgPSBbXQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZGVzdGRpcikKKyAgICAgICAgbGF5ZXJzID0gbGlzdChzZWxmLmxheWVyZGlycykKKworICAgICAgICBjb3JlYmFzZSA9IHNlbGYuZC5nZXRWYXIoJ0NPUkVCQVNFJywgVHJ1ZSkKKyAgICAgICAgbGF5ZXJzLmFwcGVuZChjb3JlYmFzZSkKKworICAgICAgICBjb3JlYmFzZV9maWxlcyA9IHNlbGYuZC5nZXRWYXIoJ0NPUkVCQVNFX0ZJTEVTJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBjb3JlYmFzZV9maWxlcyA9IFtjb3JlYmFzZSArICcvJyAreCBmb3IgeCBpbiBjb3JlYmFzZV9maWxlc10KKyAgICAgICAgIyBNYWtlIHN1cmUgYml0YmFrZSBnb2VzIGluCisgICAgICAgIGJpdGJha2VfZGlyID0gYmIuX19maWxlX18ucnNwbGl0KCcvJywgMylbMF0KKyAgICAgICAgY29yZWJhc2VfZmlsZXMuYXBwZW5kKGJpdGJha2VfZGlyKQorCisgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICBsYXllcmNvbmYgPSBvcy5wYXRoLmpvaW4obGF5ZXIsICdjb25mJywgJ2xheWVyLmNvbmYnKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobGF5ZXJjb25mKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obGF5ZXJjb25mLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIGYucmVhZGxpbmUoKS5zdGFydHN3aXRoKCIjICMjIyB3b3Jrc3BhY2UgbGF5ZXIgYXV0by1nZW5lcmF0ZWQgYnkgZGV2dG9vbCAjIyMiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlNraXBwaW5nIGxvY2FsIHdvcmtzcGFjZSBsYXllciAlcyIgJSBsYXllcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgSWYgdGhlIGxheWVyIHdhcyBhbHJlYWR5IHVuZGVyIGNvcmViYXNlLCBsZWF2ZSBpdCB0aGVyZQorICAgICAgICAgICAgIyBzaW5jZSBsYXllcnMgc3VjaCBhcyBtZXRhIGhhdmUgaXNzdWVzIHdoZW4gbW92ZWQuCisgICAgICAgICAgICBsYXllcmRlc3RwYXRoID0gZGVzdGRpcgorICAgICAgICAgICAgaWYgY29yZWJhc2UgPT0gb3MucGF0aC5kaXJuYW1lKGxheWVyKToKKyAgICAgICAgICAgICAgICBsYXllcmRlc3RwYXRoICs9ICcvJyArIG9zLnBhdGguYmFzZW5hbWUoY29yZWJhc2UpCisgICAgICAgICAgICBsYXllcmRlc3RwYXRoICs9ICcvJyArIG9zLnBhdGguYmFzZW5hbWUobGF5ZXIpCisKKyAgICAgICAgICAgIGxheWVyX3JlbGF0aXZlID0gb3MucGF0aC5yZWxwYXRoKGxheWVyZGVzdHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ZGlyKQorICAgICAgICAgICAgbGF5ZXJzX2NvcGllZC5hcHBlbmQobGF5ZXJfcmVsYXRpdmUpCisKKyAgICAgICAgICAgICMgVHJlYXQgY29yZWJhc2UgYXMgc3BlY2lhbCBzaW5jZSBpdCB0eXBpY2FsbHkgd2lsbCBjb250YWluCisgICAgICAgICAgICAjIGJ1aWxkIGRpcmVjdG9yaWVzIG9yIG90aGVyIGN1c3RvbSBpdGVtcy4KKyAgICAgICAgICAgIGlmIGNvcmViYXNlID09IGxheWVyOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihsYXllcmRlc3RwYXRoKQorICAgICAgICAgICAgICAgIGZvciBmIGluIGNvcmViYXNlX2ZpbGVzOgorICAgICAgICAgICAgICAgICAgICBmX2Jhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShmKQorICAgICAgICAgICAgICAgICAgICBkZXN0bmFtZSA9IG9zLnBhdGguam9pbihsYXllcmRlc3RwYXRoLCBmX2Jhc2VuYW1lKQorICAgICAgICAgICAgICAgICAgICBfc21hcnRfY29weShmLCBkZXN0bmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobGF5ZXJkZXN0cGF0aCk6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIlNraXBwaW5nIGxheWVyICVzLCBhbHJlYWR5IGhhbmRsZWQiICUgbGF5ZXIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgX3NtYXJ0X2NvcHkobGF5ZXIsIGxheWVyZGVzdHBhdGgpCisKKyAgICAgICAgcmV0dXJuIGxheWVyc19jb3BpZWQKKworZGVmIGdlbmVyYXRlX2xvY2tlZF9zaWdzKHNpZ2ZpbGUsIGQpOgorICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoc2lnZmlsZSkpCisgICAgZGVwZCA9IGQuZ2V0VmFyKCdCQl9UQVNLREVQREFUQScsIFRydWUpCisgICAgdGFza3MgPSBbJyVzLiVzJyAlICh2WzJdLCB2WzFdKSBmb3IgdiBpbiBkZXBkLml0ZXJ2YWx1ZXMoKV0KKyAgICBiYi5wYXJzZS5zaWdnZW4uZHVtcF9sb2NrZWRzaWdzKHNpZ2ZpbGUsIHRhc2tzKQorCitkZWYgcHJ1bmVfbG9ja2Vkc2lncyhhbGxvd2VkX3Rhc2tzLCBleGNsdWRlZF90YXJnZXRzLCBsb2NrZWRzaWdzLCBwcnVuZWRfb3V0cHV0KToKKyAgICB3aXRoIG9wZW4obG9ja2Vkc2lncywgJ3InKSBhcyBpbmZpbGU6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUocHJ1bmVkX291dHB1dCkpCisgICAgICAgIHdpdGggb3BlbihwcnVuZWRfb3V0cHV0LCAndycpIGFzIGY6CisgICAgICAgICAgICBpbnZhbHVlID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGluZmlsZToKKyAgICAgICAgICAgICAgICBpZiBpbnZhbHVlOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKCdcXFxuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHZhbCA9IGxpbmUuc3RyaXAoKS5zcGxpdCgnOicpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzcGxpdHZhbFsxXSBpbiBhbGxvd2VkX3Rhc2tzIGFuZCBub3Qgc3BsaXR2YWxbMF0gaW4gZXhjbHVkZWRfdGFyZ2V0czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbHVlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnU0lHR0VOX0xPQ0tFRFNJR1MnKToKKyAgICAgICAgICAgICAgICAgICAgaW52YWx1ZSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShsaW5lKQorCitkZWYgY3JlYXRlX2xvY2tlZF9zc3RhdGVfY2FjaGUobG9ja2Vkc2lncywgaW5wdXRfc3N0YXRlX2NhY2hlLCBvdXRwdXRfc3N0YXRlX2NhY2hlLCBkLCBmaXhlZGxzYnN0cmluZz0iIik6CisgICAgYmIubm90ZSgnR2VuZXJhdGluZyBzc3RhdGUtY2FjaGUuLi4nKQorCisgICAgYmIucHJvY2Vzcy5ydW4oImdlbi1sb2NrZWRzaWctY2FjaGUgJXMgJXMgJXMiICUgKGxvY2tlZHNpZ3MsIGlucHV0X3NzdGF0ZV9jYWNoZSwgb3V0cHV0X3NzdGF0ZV9jYWNoZSkpCisgICAgaWYgZml4ZWRsc2JzdHJpbmc6CisgICAgICAgIG9zLnJlbmFtZShvdXRwdXRfc3N0YXRlX2NhY2hlICsgJy8nICsgZC5nZXRWYXIoJ05BVElWRUxTQlNUUklORycsIFRydWUpLAorICAgICAgICBvdXRwdXRfc3N0YXRlX2NhY2hlICsgJy8nICsgZml4ZWRsc2JzdHJpbmcpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL2RhdGEucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2RhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNjMGUwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvZGF0YS5weQpAQCAtMCwwICsxLDE3IEBACitpbXBvcnQgb2UubWFrZXR5cGUKKworZGVmIHR5cGVkX3ZhbHVlKGtleSwgZCk6CisgICAgIiIiQ29uc3RydWN0IGEgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgbWV0YWRhdGEgdmFyaWFibGUsIHVzaW5nIGl0cyBmbGFncworICAgIHRvIGRldGVybWluZSB0aGUgdHlwZSBhbmQgcGFyYW1ldGVycyBmb3IgY29uc3RydWN0aW9uLiIiIgorICAgIHZhcl90eXBlID0gZC5nZXRWYXJGbGFnKGtleSwgJ3R5cGUnKQorICAgIGZsYWdzID0gZC5nZXRWYXJGbGFncyhrZXkpCisgICAgaWYgZmxhZ3MgaXMgbm90IE5vbmU6CisgICAgICAgIGZsYWdzID0gZGljdCgoZmxhZywgZC5leHBhbmQodmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgZm9yIGZsYWcsIHZhbHVlIGluIGZsYWdzLml0ZXJpdGVtcygpKQorICAgIGVsc2U6CisgICAgICAgIGZsYWdzID0ge30KKworICAgIHRyeToKKyAgICAgICAgcmV0dXJuIG9lLm1ha2V0eXBlLmNyZWF0ZShkLmdldFZhcihrZXksIFRydWUpIG9yICcnLCB2YXJfdHlwZSwgKipmbGFncykKKyAgICBleGNlcHQgKFR5cGVFcnJvciwgVmFsdWVFcnJvciksIGV4YzoKKyAgICAgICAgYmIubXNnLmZhdGFsKCJEYXRhIiwgIiVzOiAlcyIgJSAoa2V5LCBzdHIoZXhjKSkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL2Rpc3Ryb19jaGVjay5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvZGlzdHJvX2NoZWNrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZDViMGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2Rpc3Ryb19jaGVjay5weQpAQCAtMCwwICsxLDM4MyBAQAorZGVmIGdldF9saW5rc19mcm9tX3VybCh1cmwpOgorICAgICJSZXR1cm4gYWxsIHRoZSBocmVmIGxpbmtzIGZvdW5kIG9uIHRoZSB3ZWIgbG9jYXRpb24iCisKKyAgICBpbXBvcnQgdXJsbGliLCBzZ21sbGliCisgICAgCisgICAgY2xhc3MgTGlua3NQYXJzZXIoc2dtbGxpYi5TR01MUGFyc2VyKToKKyAgICAgICAgZGVmIHBhcnNlKHNlbGYsIHMpOgorICAgICAgICAgICAgIlBhcnNlIHRoZSBnaXZlbiBzdHJpbmcgJ3MnLiIKKyAgICAgICAgICAgIHNlbGYuZmVlZChzKQorICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2ZXJib3NlPTApOgorICAgICAgICAgICAgIkluaXRpYWxpc2UgYW4gb2JqZWN0IHBhc3NpbmcgJ3ZlcmJvc2UnIHRvIHRoZSBzdXBlcmNsYXNzLiIKKyAgICAgICAgICAgIHNnbWxsaWIuU0dNTFBhcnNlci5fX2luaXRfXyhzZWxmLCB2ZXJib3NlKQorICAgICAgICAgICAgc2VsZi5oeXBlcmxpbmtzID0gW10KKyAgICAKKyAgICAgICAgZGVmIHN0YXJ0X2Eoc2VsZiwgYXR0cmlidXRlcyk6CisgICAgICAgICAgICAiUHJvY2VzcyBhIGh5cGVybGluayBhbmQgaXRzICdhdHRyaWJ1dGVzJy4iCisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gYXR0cmlidXRlczoKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJocmVmIjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oeXBlcmxpbmtzLmFwcGVuZCh2YWx1ZS5zdHJpcCgnLycpKQorICAgIAorICAgICAgICBkZWYgZ2V0X2h5cGVybGlua3Moc2VsZik6CisgICAgICAgICAgICAiUmV0dXJuIHRoZSBsaXN0IG9mIGh5cGVybGlua3MuIgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuaHlwZXJsaW5rcworCisgICAgc29jayA9IHVybGxpYi51cmxvcGVuKHVybCkKKyAgICB3ZWJwYWdlID0gc29jay5yZWFkKCkKKyAgICBzb2NrLmNsb3NlKCkKKworICAgIGxpbmtzcGFyc2VyID0gTGlua3NQYXJzZXIoKQorICAgIGxpbmtzcGFyc2VyLnBhcnNlKHdlYnBhZ2UpCisgICAgcmV0dXJuIGxpbmtzcGFyc2VyLmdldF9oeXBlcmxpbmtzKCkKKworZGVmIGZpbmRfbGF0ZXN0X251bWVyaWNfcmVsZWFzZSh1cmwpOgorICAgICJGaW5kIHRoZSBsYXRlc3QgbGlzdGVkIG51bWVyaWMgcmVsZWFzZSBvbiB0aGUgZ2l2ZW4gdXJsIgorICAgIG1heD0wCisgICAgbWF4c3RyPSIiCisgICAgZm9yIGxpbmsgaW4gZ2V0X2xpbmtzX2Zyb21fdXJsKHVybCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlbGVhc2UgPSBmbG9hdChsaW5rKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZWxlYXNlID0gMAorICAgICAgICBpZiByZWxlYXNlID4gbWF4OgorICAgICAgICAgICAgbWF4ID0gcmVsZWFzZQorICAgICAgICAgICAgbWF4c3RyID0gbGluaworICAgIHJldHVybiBtYXhzdHIKKworZGVmIGlzX3NyY19ycG0obmFtZSk6CisgICAgIkNoZWNrIGlmIHRoZSBsaW5rIGlzIHBvaW50aW5nIHRvIGEgc3JjLnJwbSBmaWxlIgorICAgIGlmIG5hbWVbLTg6XSA9PSAiLnNyYy5ycG0iOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBGYWxzZQorCitkZWYgcGFja2FnZV9uYW1lX2Zyb21fc3JwbShzcnBtKToKKyAgICAiU3RyaXAgb3V0IHRoZSBwYWNrYWdlIG5hbWUgZnJvbSB0aGUgc3JjLnJwbSBmaWxlbmFtZSIKKyAgICBzdHJpbmdzID0gc3JwbS5zcGxpdCgnLScpCisgICAgcGFja2FnZV9uYW1lID0gc3RyaW5nc1swXQorICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbiAoc3RyaW5ncykgLSAxKToKKyAgICAgICAgc3RyID0gc3RyaW5nc1tpXQorICAgICAgICBpZiBub3Qgc3RyWzBdLmlzZGlnaXQoKToKKyAgICAgICAgICAgIHBhY2thZ2VfbmFtZSArPSAnLScgKyBzdHIKKyAgICByZXR1cm4gcGFja2FnZV9uYW1lCisKK2RlZiBjbGVhbl9wYWNrYWdlX2xpc3QocGFja2FnZV9saXN0KToKKyAgICAiUmVtb3ZlcyBtdWx0aXBsZSBlbnRyaWVzIG9mIHBhY2thZ2VzIGFuZCBzb3J0cyB0aGUgbGlzdCIKKyAgICBzZXQgPSB7fQorICAgIG1hcChzZXQuX19zZXRpdGVtX18sIHBhY2thZ2VfbGlzdCwgW10pCisgICAgcmV0dXJuIHNldC5rZXlzKCkKKworCitkZWYgZ2V0X2xhdGVzdF9yZWxlYXNlZF9tZWVnb19zb3VyY2VfcGFja2FnZV9saXN0KCk6CisgICAgIlJldHVybnMgbGlzdCBvZiBhbGwgdGhlIG5hbWUgb3MgcGFja2FnZXMgaW4gdGhlIGxhdGVzdCBtZWVnbyBkaXN0cm8iCisKKyAgICBwYWNrYWdlX25hbWVzID0gW10KKyAgICB0cnk6CisgICAgICAgIGYgPSBvcGVuKCIvdG1wL01lZWdvLTEuMSIsICJyIikKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIHBhY2thZ2VfbmFtZXMuYXBwZW5kKGxpbmVbOi0xXSArICI6IiArICJtYWluIikgIyBBbHNvIHN0cmlwIHRoZSAnXG4nIGF0IHRoZSBlbmQKKyAgICBleGNlcHQgSU9FcnJvcjogcGFzcworICAgIHBhY2thZ2VfbGlzdD1jbGVhbl9wYWNrYWdlX2xpc3QocGFja2FnZV9uYW1lcykKKyAgICByZXR1cm4gIjEuMCIsIHBhY2thZ2VfbGlzdAorCitkZWYgZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwodXJsLCBzZWN0aW9uKToKKyAgICAiUmV0dXJuIGEgc2VjdGlvbmVkIGxpc3Qgb2YgcGFja2FnZSBuYW1lcyBmcm9tIGEgVVJMIGxpc3QiCisKKyAgICBiYi5ub3RlKCJSZWFkaW5nICVzOiAlcyIgJSAodXJsLCBzZWN0aW9uKSkKKyAgICBsaW5rcyA9IGdldF9saW5rc19mcm9tX3VybCh1cmwpCisgICAgc3JwbXMgPSBmaWx0ZXIoaXNfc3JjX3JwbSwgbGlua3MpCisgICAgbmFtZXNfbGlzdCA9IG1hcChwYWNrYWdlX25hbWVfZnJvbV9zcnBtLCBzcnBtcykKKworICAgIG5ld19wa2dzID0gW10KKyAgICBmb3IgcGtncyBpbiBuYW1lc19saXN0OgorICAgICAgIG5ld19wa2dzLmFwcGVuZChwa2dzICsgIjoiICsgc2VjdGlvbikKKworICAgIHJldHVybiBuZXdfcGtncworCitkZWYgZ2V0X2xhdGVzdF9yZWxlYXNlZF9mZWRvcmFfc291cmNlX3BhY2thZ2VfbGlzdCgpOgorICAgICJSZXR1cm5zIGxpc3Qgb2YgYWxsIHRoZSBuYW1lIG9zIHBhY2thZ2VzIGluIHRoZSBsYXRlc3QgZmVkb3JhIGRpc3RybyIKKyAgICBsYXRlc3QgPSBmaW5kX2xhdGVzdF9udW1lcmljX3JlbGVhc2UoImh0dHA6Ly9hcmNoaXZlLmZlZG9yYXByb2plY3Qub3JnL3B1Yi9mZWRvcmEvbGludXgvcmVsZWFzZXMvIikKKworICAgIHBhY2thZ2VfbmFtZXMgPSBnZXRfc291cmNlX3BhY2thZ2VfbGlzdF9mcm9tX3VybCgiaHR0cDovL2FyY2hpdmUuZmVkb3JhcHJvamVjdC5vcmcvcHViL2ZlZG9yYS9saW51eC9yZWxlYXNlcy8lcy9GZWRvcmEvc291cmNlL1NSUE1TLyIgJSBsYXRlc3QsICJtYWluIikKKworIyAgICBwYWNrYWdlX25hbWVzICs9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vZG93bmxvYWQuZmVkb3JhLnJlZGhhdC5jb20vcHViL2ZlZG9yYS9saW51eC9yZWxlYXNlcy8lcy9FdmVyeXRoaW5nL3NvdXJjZS9TUFJNUy8iICUgbGF0ZXN0LCAiZXZlcnl0aGluZyIpCisgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfc291cmNlX3BhY2thZ2VfbGlzdF9mcm9tX3VybCgiaHR0cDovL2FyY2hpdmUuZmVkb3JhcHJvamVjdC5vcmcvcHViL2ZlZG9yYS9saW51eC91cGRhdGVzLyVzL1NSUE1TLyIgJSBsYXRlc3QsICJ1cGRhdGVzIikKKworICAgIHBhY2thZ2VfbGlzdD1jbGVhbl9wYWNrYWdlX2xpc3QocGFja2FnZV9uYW1lcykKKyAgICAgICAgCisgICAgcmV0dXJuIGxhdGVzdCwgcGFja2FnZV9saXN0CisKK2RlZiBnZXRfbGF0ZXN0X3JlbGVhc2VkX29wZW5zdXNlX3NvdXJjZV9wYWNrYWdlX2xpc3QoKToKKyAgICAiUmV0dXJucyBsaXN0IG9mIGFsbCB0aGUgbmFtZSBvcyBwYWNrYWdlcyBpbiB0aGUgbGF0ZXN0IG9wZW5zdXNlIGRpc3RybyIKKyAgICBsYXRlc3QgPSBmaW5kX2xhdGVzdF9udW1lcmljX3JlbGVhc2UoImh0dHA6Ly9kb3dubG9hZC5vcGVuc3VzZS5vcmcvc291cmNlL2Rpc3RyaWJ1dGlvbi8iKQorCisgICAgcGFja2FnZV9uYW1lcyA9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vZG93bmxvYWQub3BlbnN1c2Uub3JnL3NvdXJjZS9kaXN0cmlidXRpb24vJXMvcmVwby9vc3Mvc3VzZS9zcmMvIiAlIGxhdGVzdCwgIm1haW4iKQorICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwoImh0dHA6Ly9kb3dubG9hZC5vcGVuc3VzZS5vcmcvdXBkYXRlLyVzL3JwbS9zcmMvIiAlIGxhdGVzdCwgInVwZGF0ZXMiKQorCisgICAgcGFja2FnZV9saXN0PWNsZWFuX3BhY2thZ2VfbGlzdChwYWNrYWdlX25hbWVzKQorICAgIHJldHVybiBsYXRlc3QsIHBhY2thZ2VfbGlzdAorCitkZWYgZ2V0X2xhdGVzdF9yZWxlYXNlZF9tYW5kcml2YV9zb3VyY2VfcGFja2FnZV9saXN0KCk6CisgICAgIlJldHVybnMgbGlzdCBvZiBhbGwgdGhlIG5hbWUgb3MgcGFja2FnZXMgaW4gdGhlIGxhdGVzdCBtYW5kcml2YSBkaXN0cm8iCisgICAgbGF0ZXN0ID0gZmluZF9sYXRlc3RfbnVtZXJpY19yZWxlYXNlKCJodHRwOi8vZGlzdHJpYi1jb2ZmZWUuaXBzbC5qdXNzaWV1LmZyL3B1Yi9saW51eC9NYW5kcml2YUxpbnV4L29mZmljaWFsLyIpCisgICAgcGFja2FnZV9uYW1lcyA9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vZGlzdHJpYi1jb2ZmZWUuaXBzbC5qdXNzaWV1LmZyL3B1Yi9saW51eC9NYW5kcml2YUxpbnV4L29mZmljaWFsLyVzL1NSUE1TL21haW4vcmVsZWFzZS8iICUgbGF0ZXN0LCAibWFpbiIpCisjICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwoImh0dHA6Ly9kaXN0cmliLWNvZmZlZS5pcHNsLmp1c3NpZXUuZnIvcHViL2xpbnV4L01hbmRyaXZhTGludXgvb2ZmaWNpYWwvJXMvU1JQTVMvY29udHJpYi9yZWxlYXNlLyIgJSBsYXRlc3QsICJjb250cmliIikKKyAgICBwYWNrYWdlX25hbWVzICs9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vZGlzdHJpYi1jb2ZmZWUuaXBzbC5qdXNzaWV1LmZyL3B1Yi9saW51eC9NYW5kcml2YUxpbnV4L29mZmljaWFsLyVzL1NSUE1TL21haW4vdXBkYXRlcy8iICUgbGF0ZXN0LCAidXBkYXRlcyIpCisKKyAgICBwYWNrYWdlX2xpc3Q9Y2xlYW5fcGFja2FnZV9saXN0KHBhY2thZ2VfbmFtZXMpCisgICAgcmV0dXJuIGxhdGVzdCwgcGFja2FnZV9saXN0CisKK2RlZiBmaW5kX2xhdGVzdF9kZWJpYW5fcmVsZWFzZSh1cmwpOgorICAgICJGaW5kIHRoZSBsYXRlc3QgbGlzdGVkIGRlYmlhbiByZWxlYXNlIG9uIHRoZSBnaXZlbiB1cmwiCisKKyAgICByZWxlYXNlcyA9IFtdCisgICAgZm9yIGxpbmsgaW4gZ2V0X2xpbmtzX2Zyb21fdXJsKHVybCk6CisgICAgICAgIGlmIGxpbmtbOjZdID09ICJEZWJpYW4iOgorICAgICAgICAgICAgaWYgJzsnIG5vdCBpbiBsaW5rOgorICAgICAgICAgICAgICAgIHJlbGVhc2VzLmFwcGVuZChsaW5rKQorICAgIHJlbGVhc2VzLnNvcnQoKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHJlbGVhc2VzLnBvcCgpWzY6XQorICAgIGV4Y2VwdDoKKyAgICAgICAgcmV0dXJuICJfTm90Rm91bmRfIgorCitkZWYgZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgc2VjdGlvbik6CisgICAgIlJldHVybiB0aGUgbGlzdCBvZiBwYWNrYWdlLW5hbWVzIHN0b3JlZCBpbiB0aGUgZGViaWFuIHN0eWxlIFNvdXJjZXMuZ3ogZmlsZSIKKyAgICBpbXBvcnQgdXJsbGliCisgICAgc29jayA9IHVybGxpYi51cmxvcGVuKHVybCkKKyAgICBpbXBvcnQgdGVtcGZpbGUKKyAgICB0bXBmaWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9J3diJywgcHJlZml4PSdvZWNvcmUuJywgc3VmZml4PScudG1wJywgZGVsZXRlPUZhbHNlKQorICAgIHRtcGZpbGVuYW1lPXRtcGZpbGUubmFtZQorICAgIHRtcGZpbGUud3JpdGUoc29jay5yZWFkKCkpCisgICAgc29jay5jbG9zZSgpCisgICAgdG1wZmlsZS5jbG9zZSgpCisgICAgaW1wb3J0IGd6aXAKKyAgICBiYi5ub3RlKCJSZWFkaW5nICVzOiAlcyIgJSAodXJsLCBzZWN0aW9uKSkKKworICAgIGYgPSBnemlwLm9wZW4odG1wZmlsZW5hbWUpCisgICAgcGFja2FnZV9uYW1lcyA9IFtdCisgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgaWYgbGluZVs6OV0gPT0gIlBhY2thZ2U6ICI6CisgICAgICAgICAgICBwYWNrYWdlX25hbWVzLmFwcGVuZChsaW5lWzk6LTFdICsgIjoiICsgc2VjdGlvbikgIyBBbHNvIHN0cmlwIHRoZSAnXG4nIGF0IHRoZSBlbmQKKyAgICBvcy51bmxpbmsodG1wZmlsZW5hbWUpCisKKyAgICByZXR1cm4gcGFja2FnZV9uYW1lcworCitkZWYgZ2V0X2xhdGVzdF9yZWxlYXNlZF9kZWJpYW5fc291cmNlX3BhY2thZ2VfbGlzdCgpOgorICAgICJSZXR1cm5zIGxpc3Qgb2YgYWxsIHRoZSBuYW1lIG9zIHBhY2thZ2VzIGluIHRoZSBsYXRlc3QgZGViaWFuIGRpc3RybyIKKyAgICBsYXRlc3QgPSBmaW5kX2xhdGVzdF9kZWJpYW5fcmVsZWFzZSgiaHR0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9kaXN0cy8iKQorICAgIHVybCA9ICJodHRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL2Rpc3RzL3N0YWJsZS9tYWluL3NvdXJjZS9Tb3VyY2VzLmd6IiAKKyAgICBwYWNrYWdlX25hbWVzID0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgIm1haW4iKQorIyAgICB1cmwgPSAiaHR0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9kaXN0cy9zdGFibGUvY29udHJpYi9zb3VyY2UvU291cmNlcy5neiIgCisjICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgImNvbnRyaWIiKQorICAgIHVybCA9ICJodHRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL2Rpc3RzL3N0YWJsZS1wcm9wb3NlZC11cGRhdGVzL21haW4vc291cmNlL1NvdXJjZXMuZ3oiIAorICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgInVwZGF0ZXMiKQorICAgIHBhY2thZ2VfbGlzdD1jbGVhbl9wYWNrYWdlX2xpc3QocGFja2FnZV9uYW1lcykKKyAgICByZXR1cm4gbGF0ZXN0LCBwYWNrYWdlX2xpc3QKKworZGVmIGZpbmRfbGF0ZXN0X3VidW50dV9yZWxlYXNlKHVybCk6CisgICAgIkZpbmQgdGhlIGxhdGVzdCBsaXN0ZWQgdWJ1bnR1IHJlbGVhc2Ugb24gdGhlIGdpdmVuIHVybCIKKyAgICB1cmwgKz0gIj9DPU07Tz1EIiAjIERlc2NlbmRpbmcgU29ydCBieSBMYXN0IE1vZGlmaWVkCisgICAgZm9yIGxpbmsgaW4gZ2V0X2xpbmtzX2Zyb21fdXJsKHVybCk6CisgICAgICAgIGlmIGxpbmtbLTg6XSA9PSAiLXVwZGF0ZXMiOgorICAgICAgICAgICAgcmV0dXJuIGxpbmtbOi04XQorICAgIHJldHVybiAiX05vdEZvdW5kXyIKKworZGVmIGdldF9sYXRlc3RfcmVsZWFzZWRfdWJ1bnR1X3NvdXJjZV9wYWNrYWdlX2xpc3QoKToKKyAgICAiUmV0dXJucyBsaXN0IG9mIGFsbCB0aGUgbmFtZSBvcyBwYWNrYWdlcyBpbiB0aGUgbGF0ZXN0IHVidW50dSBkaXN0cm8iCisgICAgbGF0ZXN0ID0gZmluZF9sYXRlc3RfdWJ1bnR1X3JlbGVhc2UoImh0dHA6Ly9hcmNoaXZlLnVidW50dS5jb20vdWJ1bnR1L2Rpc3RzLyIpCisgICAgdXJsID0gImh0dHA6Ly9hcmNoaXZlLnVidW50dS5jb20vdWJ1bnR1L2Rpc3RzLyVzL21haW4vc291cmNlL1NvdXJjZXMuZ3oiICUgbGF0ZXN0CisgICAgcGFja2FnZV9uYW1lcyA9IGdldF9kZWJpYW5fc3R5bGVfc291cmNlX3BhY2thZ2VfbGlzdCh1cmwsICJtYWluIikKKyMgICAgdXJsID0gImh0dHA6Ly9hcmNoaXZlLnVidW50dS5jb20vdWJ1bnR1L2Rpc3RzLyVzL211bHRpdmVyc2Uvc291cmNlL1NvdXJjZXMuZ3oiICUgbGF0ZXN0CisjICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgIm11bHRpdmVyc2UiKQorIyAgICB1cmwgPSAiaHR0cDovL2FyY2hpdmUudWJ1bnR1LmNvbS91YnVudHUvZGlzdHMvJXMvdW5pdmVyc2Uvc291cmNlL1NvdXJjZXMuZ3oiICUgbGF0ZXN0CisjICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgInVuaXZlcnNlIikKKyAgICB1cmwgPSAiaHR0cDovL2FyY2hpdmUudWJ1bnR1LmNvbS91YnVudHUvZGlzdHMvJXMtdXBkYXRlcy9tYWluL3NvdXJjZS9Tb3VyY2VzLmd6IiAlIGxhdGVzdAorICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgInVwZGF0ZXMiKQorICAgIHBhY2thZ2VfbGlzdD1jbGVhbl9wYWNrYWdlX2xpc3QocGFja2FnZV9uYW1lcykKKyAgICByZXR1cm4gbGF0ZXN0LCBwYWNrYWdlX2xpc3QKKworZGVmIGNyZWF0ZV9kaXN0cm9fcGFja2FnZXNfbGlzdChkaXN0cm9fY2hlY2tfZGlyKToKKyAgICBwa2dsc3RfZGlyID0gb3MucGF0aC5qb2luKGRpc3Ryb19jaGVja19kaXIsICJwYWNrYWdlX2xpc3RzIikKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpciAocGtnbHN0X2Rpcik6CisgICAgICAgIG9zLm1ha2VkaXJzKHBrZ2xzdF9kaXIpCisgICAgIyBmaXJzdCBjbGVhciBvbGQgc3R1ZmYKKyAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKHBrZ2xzdF9kaXIpOgorICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKHBrZ2xzdF9kaXIsIGZpbGUpKQorIAorICAgIHBlcl9kaXN0cm9fZnVuY3Rpb25zID0gWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiRGViaWFuIiwgZ2V0X2xhdGVzdF9yZWxlYXNlZF9kZWJpYW5fc291cmNlX3BhY2thZ2VfbGlzdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJVYnVudHUiLCBnZXRfbGF0ZXN0X3JlbGVhc2VkX3VidW50dV9zb3VyY2VfcGFja2FnZV9saXN0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIkZlZG9yYSIsIGdldF9sYXRlc3RfcmVsZWFzZWRfZmVkb3JhX3NvdXJjZV9wYWNrYWdlX2xpc3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiT3BlblN1U0UiLCBnZXRfbGF0ZXN0X3JlbGVhc2VkX29wZW5zdXNlX3NvdXJjZV9wYWNrYWdlX2xpc3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiTWFuZHJpdmEiLCBnZXRfbGF0ZXN0X3JlbGVhc2VkX21hbmRyaXZhX3NvdXJjZV9wYWNrYWdlX2xpc3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiTWVlZ28iLCBnZXRfbGF0ZXN0X3JlbGVhc2VkX21lZWdvX3NvdXJjZV9wYWNrYWdlX2xpc3RdCisgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgCisgICAgZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKKyAgICBiZWdpbiA9IGRhdGV0aW1lLm5vdygpCisgICAgZm9yIGRpc3RybyBpbiBwZXJfZGlzdHJvX2Z1bmN0aW9uczoKKyAgICAgICAgbmFtZSA9IGRpc3Ryb1swXQorICAgICAgICByZWxlYXNlLCBwYWNrYWdlX2xpc3QgPSBkaXN0cm9bMV0oKQorICAgICAgICBiYi5ub3RlKCJEaXN0cm86ICVzLCBMYXRlc3QgUmVsZWFzZTogJXMsICMgc3JjIHBhY2thZ2VzOiAlZCIgJSAobmFtZSwgcmVsZWFzZSwgbGVuKHBhY2thZ2VfbGlzdCkpKQorICAgICAgICBwYWNrYWdlX2xpc3RfZmlsZSA9IG9zLnBhdGguam9pbihwa2dsc3RfZGlyLCBuYW1lICsgIi0iICsgcmVsZWFzZSkKKyAgICAgICAgZiA9IG9wZW4ocGFja2FnZV9saXN0X2ZpbGUsICJ3K2IiKQorICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VfbGlzdDoKKyAgICAgICAgICAgIGYud3JpdGUocGtnICsgIlxuIikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgZW5kID0gZGF0ZXRpbWUubm93KCkKKyAgICBkZWx0YSA9IGVuZCAtIGJlZ2luCisgICAgYmIubm90ZSgicGFja2FnZV9saXN0IGdlbmVyYXRpb3NuIHRvb2sgdGhpcyBtdWNoIHRpbWU6ICVkIHNlY29uZHMiICUgZGVsdGEuc2Vjb25kcykKKworZGVmIHVwZGF0ZV9kaXN0cm9fZGF0YShkaXN0cm9fY2hlY2tfZGlyLCBkYXRldGltZSk6CisgICAgIiIiCisgICAgICAgIElmIGRpc3RybyBwYWNrYWdlcyBsaXN0IGRhdGEgaXMgb2xkIHRoZW4gcmVidWlsZCBpdC4KKyAgICAgICAgVGhlIG9wZXJhdGlvbnMgaGFzIHRvIGJlIHByb3RlY3RlZCBieSBhIGxvY2sgc28gdGhhdAorICAgICAgICBvbmx5IG9uZSB0aHJlYWQgcGVyZm9ybWVzIGl0IGF0IGEgdGltZS4KKyAgICAiIiIKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpciAoZGlzdHJvX2NoZWNrX2Rpcik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUgKCJNYWtpbmcgbmV3IGRpcmVjdG9yeTogJXMiICUgZGlzdHJvX2NoZWNrX2RpcikKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzIChkaXN0cm9fY2hlY2tfZGlyKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVW5hYmxlIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMnICUgKGRpc3Ryb19jaGVja19kaXIpKQorCisKKyAgICBkYXRldGltZV9maWxlID0gb3MucGF0aC5qb2luKGRpc3Ryb19jaGVja19kaXIsICJidWlsZF9kYXRldGltZSIpCisgICAgc2F2ZWRfZGF0ZXRpbWUgPSAiX2ludmFsaWRfIgorICAgIGltcG9ydCBmY250bAorICAgIHRyeToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRhdGV0aW1lX2ZpbGUpOgorICAgICAgICAgICAgb3BlbihkYXRldGltZV9maWxlLCAndytiJykuY2xvc2UoKSAjIHRvdWNoIHRoZSBmaWxlIHNvIHRoYXQgdGhlIG5leHQgb3BlbiB3b24ndCBmYWlsCisKKyAgICAgICAgZiA9IG9wZW4oZGF0ZXRpbWVfZmlsZSwgInIrYiIpCisgICAgICAgIGZjbnRsLmxvY2tmKGYsIGZjbnRsLkxPQ0tfRVgpCisgICAgICAgIHNhdmVkX2RhdGV0aW1lID0gZi5yZWFkKCkKKyAgICAgICAgaWYgc2F2ZWRfZGF0ZXRpbWVbMDo4XSAhPSBkYXRldGltZVswOjhdOgorICAgICAgICAgICAgYmIubm90ZSgiVGhlIGJ1aWxkIGRhdGV0aW1lIGRpZCBub3QgbWF0Y2g6IHNhdmVkOiVzIGN1cnJlbnQ6JXMiICUgKHNhdmVkX2RhdGV0aW1lLCBkYXRldGltZSkpCisgICAgICAgICAgICBiYi5ub3RlKCJSZWdlbmVyYXRpbmcgZGlzdHJvIHBhY2thZ2UgbGlzdHMiKQorICAgICAgICAgICAgY3JlYXRlX2Rpc3Ryb19wYWNrYWdlc19saXN0KGRpc3Ryb19jaGVja19kaXIpCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIGYud3JpdGUoZGF0ZXRpbWUpCisKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdVbmFibGUgdG8gcmVhZC93cml0ZSB0aGlzIGZpbGU6ICVzJyAlIChkYXRldGltZV9maWxlKSkKKyAgICBmaW5hbGx5OgorICAgICAgICBmY250bC5sb2NrZihmLCBmY250bC5MT0NLX1VOKQorICAgICAgICBmLmNsb3NlKCkKKyAKK2RlZiBjb21wYXJlX2luX2Rpc3Ryb19wYWNrYWdlc19saXN0KGRpc3Ryb19jaGVja19kaXIsIGQpOgorICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGRpc3Ryb19jaGVja19kaXIpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oImNvbXBhcmVfaW5fZGlzdHJvX3BhY2thZ2VzX2xpc3Q6IGludmFsaWQgZGlzdHJvX2NoZWNrX2RpciBwYXNzZWQiKQorICAgICAgICAKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBwa2dsc3RfZGlyID0gb3MucGF0aC5qb2luKGRpc3Ryb19jaGVja19kaXIsICJwYWNrYWdlX2xpc3RzIikKKyAgICBtYXRjaGluZ19kaXN0cm9zID0gW10KKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgcmVjaXBlX25hbWUgPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGJiLm5vdGUoIkNoZWNraW5nOiAlcyIgJSBwbikKKworICAgIHRyaW1fZGljdCA9IGRpY3QoeyItbmF0aXZlIjoiLW5hdGl2ZSIsICItY3Jvc3MiOiItY3Jvc3MiLCAiLWluaXRpYWwiOiItaW5pdGlhbCJ9KQorCisgICAgaWYgcG4uZmluZCgiLW5hdGl2ZSIpICE9IC0xOgorICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIi1uYXRpdmUiKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICByZWNpcGVfbmFtZSA9IHBuc3RyaXBwZWRbMF0KKworICAgIGlmIHBuLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKToKKyAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCJuYXRpdmVzZGstIikKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzFdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgcmVjaXBlX25hbWUgPSBwbnN0cmlwcGVkWzFdCisKKyAgICBpZiBwbi5maW5kKCItY3Jvc3MiKSAhPSAtMToKKyAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItY3Jvc3MiKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICByZWNpcGVfbmFtZSA9IHBuc3RyaXBwZWRbMF0KKworICAgIGlmIHBuLmZpbmQoIi1pbml0aWFsIikgIT0gLTE6CisgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLWluaXRpYWwiKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICByZWNpcGVfbmFtZSA9IHBuc3RyaXBwZWRbMF0KKworICAgIGJiLm5vdGUoIlJlY2lwZTogJXMiICUgcmVjaXBlX25hbWUpCisgICAgdG1wID0gbG9jYWxkYXRhLmdldFZhcignRElTVFJPX1BOX0FMSUFTJywgVHJ1ZSkKKworICAgIGRpc3Ryb19leGNlcHRpb25zID0gZGljdCh7Ik9FLUNvcmUiOidPRS1Db3JlJywgIk9wZW5lZEhhbmQiOidPcGVuZWRIYW5kJywgIkludGVsIjonSW50ZWwnLCAiVXBzdHJlYW0iOidVcHN0cmVhbScsICJXaW5kcml2ZXIiOidXaW5kcml2ZXInLCAiT1NQRFQiOidPU1BEVCBBcHByb3ZlZCcsICJQb2t5IjoncG9reSd9KQorCisgICAgaWYgdG1wOgorICAgICAgICBsaXN0ID0gdG1wLnNwbGl0KCcgJykKKyAgICAgICAgZm9yIHN0ciBpbiBsaXN0OgorICAgICAgICAgICAgaWYgc3RyIGFuZCBzdHIuZmluZCgiPSIpID09IC0xIGFuZCBkaXN0cm9fZXhjZXB0aW9uc1tzdHJdOgorICAgICAgICAgICAgICAgIG1hdGNoaW5nX2Rpc3Ryb3MuYXBwZW5kKHN0cikKKworICAgIGRpc3Ryb19wbl9hbGlhc2VzID0ge30KKyAgICBpZiB0bXA6CisgICAgICAgIGxpc3QgPSB0bXAuc3BsaXQoJyAnKQorICAgICAgICBmb3Igc3RyIGluIGxpc3Q6CisgICAgICAgICAgICBpZiBzdHIuZmluZCgiPSIpICE9IC0xOgorICAgICAgICAgICAgICAgIChkaXN0LCBwbl9hbGlhcykgPSBzdHIuc3BsaXQoJz0nKQorICAgICAgICAgICAgICAgIGRpc3Ryb19wbl9hbGlhc2VzW2Rpc3Quc3RyaXAoKS5sb3dlcigpXSA9IHBuX2FsaWFzLnN0cmlwKCkKKyAKKyAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKHBrZ2xzdF9kaXIpOgorICAgICAgICAoZGlzdHJvLCBkaXN0cm9fcmVsZWFzZSkgPSBmaWxlLnNwbGl0KCItIikKKyAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHBrZ2xzdF9kaXIsIGZpbGUpLCAicmIiKQorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgKHBrZywgc2VjdGlvbikgPSBsaW5lLnNwbGl0KCI6IikKKyAgICAgICAgICAgIGlmIGRpc3Ryby5sb3dlcigpIGluIGRpc3Ryb19wbl9hbGlhc2VzOgorICAgICAgICAgICAgICAgIHBuID0gZGlzdHJvX3BuX2FsaWFzZXNbZGlzdHJvLmxvd2VyKCldCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBuID0gcmVjaXBlX25hbWUKKyAgICAgICAgICAgIGlmIHBuID09IHBrZzoKKyAgICAgICAgICAgICAgICBtYXRjaGluZ19kaXN0cm9zLmFwcGVuZChkaXN0cm8gKyAiLSIgKyBzZWN0aW9uWzotMV0pICMgc3RyaXAgdGhlIFxuIGF0IHRoZSBlbmQKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBmLmNsb3NlKCkKKworICAgIAorICAgIGlmIHRtcCAhPSBOb25lOgorCWxpc3QgPSB0bXAuc3BsaXQoJyAnKQorCWZvciBpdGVtIGluIGxpc3Q6CisgICAgICAgICAgICBtYXRjaGluZ19kaXN0cm9zLmFwcGVuZChpdGVtKQorICAgIGJiLm5vdGUoIk1hdGNoaW5nOiAlcyIgJSBtYXRjaGluZ19kaXN0cm9zKQorICAgIHJldHVybiBtYXRjaGluZ19kaXN0cm9zCisKK2RlZiBjcmVhdGVfbG9nX2ZpbGUoZCwgbG9nbmFtZSk6CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICBsb2dwYXRoID0gZC5nZXRWYXIoJ0xPR19ESVInLCBUcnVlKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dwYXRoKQorICAgIGxvZ2ZuLCBsb2dzdWZmaXggPSBvcy5wYXRoLnNwbGl0ZXh0KGxvZ25hbWUpCisgICAgbG9nZmlsZSA9IG9zLnBhdGguam9pbihsb2dwYXRoLCAiJXMuJXMlcyIgJSAobG9nZm4sIGQuZ2V0VmFyKCdEQVRFVElNRScsIFRydWUpLCBsb2dzdWZmaXgpKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsb2dmaWxlKToKKyAgICAgICAgICAgIHNsb2dmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsIGxvZ25hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzbG9nZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShzbG9nZmlsZSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbCgidG91Y2ggJXMiICUgbG9nZmlsZSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIG9zLnN5bWxpbmsobG9nZmlsZSwgc2xvZ2ZpbGUpCisgICAgICAgICAgICBkLnNldFZhcignTE9HX0ZJTEUnLCBsb2dmaWxlKQorICAgIHJldHVybiBsb2dmaWxlCisKKworZGVmIHNhdmVfZGlzdHJvX2NoZWNrX3Jlc3VsdChyZXN1bHQsIGRhdGV0aW1lLCByZXN1bHRfZmlsZSwgZCk6CisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGxvZ2RpciA9IGQuZ2V0VmFyKCdMT0dfRElSJywgVHJ1ZSkKKyAgICBpZiBub3QgbG9nZGlyOgorICAgICAgICBiYi5lcnJvcigiTE9HX0RJUiB2YXJpYWJsZSBpcyBub3QgZGVmaW5lZCwgY2FuJ3Qgd3JpdGUgdGhlIGRpc3Ryb19jaGVjayByZXN1bHRzIikKKyAgICAgICAgcmV0dXJuCisgICAgaWYgbm90IG9zLnBhdGguaXNkaXIobG9nZGlyKToKKyAgICAgICAgb3MubWFrZWRpcnMobG9nZGlyKQorICAgIGxpbmUgPSBwbgorICAgIGZvciBpIGluIHJlc3VsdDoKKyAgICAgICAgbGluZSA9IGxpbmUgKyAiLCIgKyBpCisgICAgZiA9IG9wZW4ocmVzdWx0X2ZpbGUsICJhIikKKyAgICBpbXBvcnQgZmNudGwKKyAgICBmY250bC5sb2NrZihmLCBmY250bC5MT0NLX0VYKQorICAgIGYuc2VlaygwLCBvcy5TRUVLX0VORCkgIyBzZWVrIHRvIHRoZSBlbmQgb2YgZmlsZQorICAgIGYud3JpdGUobGluZSArICJcbiIpCisgICAgZmNudGwubG9ja2YoZiwgZmNudGwuTE9DS19VTikKKyAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvaW1hZ2UucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2ltYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNjE5NTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2ltYWdlLnB5CkBAIC0wLDAgKzEsMzg2IEBACitmcm9tIG9lLnV0aWxzIGltcG9ydCBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3MKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKKworCitkZWYgZ2VuZXJhdGVfaW1hZ2UoYXJnKToKKyAgICAodHlwZSwgc3ViaW1hZ2VzLCBjcmVhdGVfaW1nX2NtZCkgPSBhcmcKKworICAgIGJiLm5vdGUoIlJ1bm5pbmcgaW1hZ2UgY3JlYXRpb24gc2NyaXB0IGZvciAlczogJXMgLi4uIiAlCisgICAgICAgICAgICAodHlwZSwgY3JlYXRlX2ltZ19jbWQpKQorCisgICAgdHJ5OgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjcmVhdGVfaW1nX2NtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICByZXR1cm4oIkVycm9yOiBUaGUgaW1hZ2UgY3JlYXRpb24gc2NyaXB0ICclcycgcmV0dXJuZWQgJWQ6XG4lcyIgJQorICAgICAgICAgICAgICAgKGUuY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGJiLm5vdGUoIlNjcmlwdCBvdXRwdXQ6XG4lcyIgJSBvdXRwdXQpCisKKyAgICByZXR1cm4gTm9uZQorCisKKyIiIgorVGhpcyBjbGFzcyB3aWxsIGhlbHAgY29tcHV0ZSBJTUFHRV9GU1RZUEUgZGVwZW5kZW5jaWVzIGFuZCBncm91cCB0aGVtIGluIGJhdGNoZXMKK3RoYXQgY2FuIGJlIGV4ZWN1dGVkIGluIHBhcmFsbGVsLgorCitUaGUgbmV4dCBleGFtcGxlIGlzIGZvciBpbGx1c3RyYXRpb24gcHVycG9zZXMsIGhpZ2hseSB1bmxpa2VseSB0byBoYXBwZW4gaW4gcmVhbCBsaWZlLgorSXQncyBqdXN0IG9uZSBvZiB0aGUgdGVzdCBjYXNlcyBJIHVzZWQgdG8gdGVzdCB0aGUgYWxnb3JpdGhtOgorCitGb3I6CitJTUFHRV9GU1RZUEVTID0gImkxIGkyIGkzIGk0IGk1IgorSU1BR0VfVFlQRURFUF9pNCA9ICJpMiIKK0lNQUdFX1RZUEVERVBfaTUgPSAiaTYgaTQiCitJTUFHRV9UWVBFREVQX2k2ID0gImk3IgorSU1BR0VfVFlQRURFUF9pNyA9ICJpMiIKKworV2UgZ2V0IHRoZSBmb2xsb3dpbmcgbGlzdCBvZiBiYXRjaGVzIHRoYXQgY2FuIGJlIGV4ZWN1dGVkIGluIHBhcmFsbGVsLCBoYXZpbmcgdGhlCitkZXBlbmRlbmNpZXMgc2F0aXNmaWVkOgorCitbWydpMScsICdpMycsICdpMiddLCBbJ2k0JywgJ2k3J10sIFsnaTYnXSwgWydpNSddXQorIiIiCitjbGFzcyBJbWFnZURlcEdyYXBoKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYuZ3JhcGggPSBkaWN0KCkKKyAgICAgICAgc2VsZi5kZXBzX2FycmF5ID0gZGljdCgpCisKKyAgICBkZWYgX2NvbnN0cnVjdF9kZXBfZ3JhcGgoc2VsZiwgaW1hZ2VfZnN0eXBlcyk6CisgICAgICAgIGdyYXBoID0gZGljdCgpCisKKyAgICAgICAgZGVmIGFkZF9ub2RlKG5vZGUpOgorICAgICAgICAgICAgYmFzZV90eXBlID0gc2VsZi5faW1hZ2VfYmFzZV90eXBlKG5vZGUpCisgICAgICAgICAgICBkZXBzID0gKHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1RZUEVERVBfJyArIG5vZGUsIFRydWUpIG9yICIiKQorICAgICAgICAgICAgYmFzZV9kZXBzID0gKHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1RZUEVERVBfJyArIGJhc2VfdHlwZSwgVHJ1ZSkgb3IgIiIpCisgICAgICAgICAgICBpZiBkZXBzICE9ICIiIG9yIGJhc2VfZGVwcyAhPSAiIjoKKyAgICAgICAgICAgICAgICBncmFwaFtub2RlXSA9IGRlcHMKKworICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwcy5zcGxpdCgpICsgYmFzZV9kZXBzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkZXAgaW4gZ3JhcGg6CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRfbm9kZShkZXApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGdyYXBoW25vZGVdID0gIiIKKworICAgICAgICBmb3IgZnN0eXBlIGluIGltYWdlX2ZzdHlwZXM6CisgICAgICAgICAgICBhZGRfbm9kZShmc3R5cGUpCisKKyAgICAgICAgcmV0dXJuIGdyYXBoCisKKyAgICBkZWYgX2NsZWFuX2dyYXBoKHNlbGYpOgorICAgICAgICAjIExpdmUgYW5kIFZNREsvVkRJIGltYWdlcyB3aWxsIGJlIHByb2Nlc3NlZCB2aWEgaW5oZXJpdGluZworICAgICAgICAjIGJiY2xhc3MgYW5kIGRvZXMgbm90IGdldCBwcm9jZXNzZWQgaGVyZS4gUmVtb3ZlIHRoZW0gZnJvbSB0aGUgZnN0eXBlcworICAgICAgICAjIGdyYXBoLiBUaGVpciBkZXBlbmRlbmNpZXMgYXJlIGFscmVhZHkgYWRkZWQsIHNvIG5vIHdvcnJpZXMgaGVyZS4KKyAgICAgICAgcmVtb3ZlX2xpc3QgPSAoc2VsZi5kLmdldFZhcignSU1BR0VfVFlQRVNfTUFTS0VEJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgICAgICBmb3IgaXRlbSBpbiByZW1vdmVfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuZ3JhcGgucG9wKGl0ZW0sIE5vbmUpCisKKyAgICBkZWYgX2ltYWdlX2Jhc2VfdHlwZShzZWxmLCB0eXBlKToKKyAgICAgICAgY3R5cGVzID0gc2VsZi5kLmdldFZhcignQ09NUFJFU1NJT05UWVBFUycsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgaWYgdHlwZSBpbiBbInZtZGsiLCAidmRpIiwgInFjb3cyIiwgImxpdmUiLCAiaXNvIiwgImhkZGltZyJdOgorICAgICAgICAgICAgdHlwZSA9ICJleHQ0IgorICAgICAgICBiYXNldHlwZSA9IHR5cGUKKyAgICAgICAgZm9yIGN0eXBlIGluIGN0eXBlczoKKyAgICAgICAgICAgIGlmIHR5cGUuZW5kc3dpdGgoIi4iICsgY3R5cGUpOgorICAgICAgICAgICAgICAgIGJhc2V0eXBlID0gdHlwZVs6LWxlbigiLiIgKyBjdHlwZSldCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICByZXR1cm4gYmFzZXR5cGUKKworICAgIGRlZiBfY29tcHV0ZV9kZXBlbmRlbmNpZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICByZXR1cm5zIGRpY3Qgb2JqZWN0IG9mIG5vZGVzIHdpdGggW25vX29mX2RlcGVuZHNfb24sIG5vX29mX2RlcGVuZGVkX2J5XQorICAgICAgICBmb3IgZWFjaCBub2RlCisgICAgICAgICIiIgorICAgICAgICBkZXBzX2FycmF5ID0gZGljdCgpCisgICAgICAgIGZvciBub2RlIGluIHNlbGYuZ3JhcGg6CisgICAgICAgICAgICBkZXBzX2FycmF5W25vZGVdID0gWzAsIDBdCisKKyAgICAgICAgZm9yIG5vZGUgaW4gc2VsZi5ncmFwaDoKKyAgICAgICAgICAgIGRlcHMgPSBzZWxmLmdyYXBoW25vZGVdLnNwbGl0KCkKKyAgICAgICAgICAgIGRlcHNfYXJyYXlbbm9kZV1bMF0gKz0gbGVuKGRlcHMpCisgICAgICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICAgICAgZGVwc19hcnJheVtkZXBdWzFdICs9IDEKKworICAgICAgICByZXR1cm4gZGVwc19hcnJheQorCisgICAgZGVmIF9zb3J0X2dyYXBoKHNlbGYpOgorICAgICAgICBzb3J0ZWRfbGlzdCA9IFtdCisgICAgICAgIGdyb3VwID0gW10KKyAgICAgICAgZm9yIG5vZGUgaW4gc2VsZi5ncmFwaDoKKyAgICAgICAgICAgIGlmIG5vZGUgbm90IGluIHNlbGYuZGVwc19hcnJheToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBkZXBlbmRzX29uID0gc2VsZi5kZXBzX2FycmF5W25vZGVdWzBdCisKKyAgICAgICAgICAgIGlmIGRlcGVuZHNfb24gPT0gMDoKKyAgICAgICAgICAgICAgICBncm91cC5hcHBlbmQobm9kZSkKKworICAgICAgICBpZiBsZW4oZ3JvdXApID09IDAgYW5kIGxlbihzZWxmLmRlcHNfYXJyYXkpICE9IDA6CisgICAgICAgICAgICBiYi5mYXRhbCgicG9zc2libGUgZnN0eXBlIGNpcmN1bGFyIGRlcGVuZGVuY3kuLi4iKQorCisgICAgICAgIHNvcnRlZF9saXN0LmFwcGVuZChncm91cCkKKworICAgICAgICAjIHJlbW92ZSBhZGRlZCBub2RlcyBmcm9tIGRlcHNfYXJyYXkKKyAgICAgICAgZm9yIGl0ZW0gaW4gZ3JvdXA6CisgICAgICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLmdyYXBoOgorICAgICAgICAgICAgICAgIGlmIGl0ZW0gaW4gc2VsZi5ncmFwaFtub2RlXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRlcHNfYXJyYXlbbm9kZV1bMF0gLT0gMQorCisgICAgICAgICAgICBzZWxmLmRlcHNfYXJyYXkucG9wKGl0ZW0sIE5vbmUpCisKKyAgICAgICAgaWYgbGVuKHNlbGYuZGVwc19hcnJheSk6CisgICAgICAgICAgICAjIHJlY3Vyc2l2ZSBjYWxsLCB0byBmaW5kIHRoZSBuZXh0IGdyb3VwCisgICAgICAgICAgICBzb3J0ZWRfbGlzdCArPSBzZWxmLl9zb3J0X2dyYXBoKCkKKworICAgICAgICByZXR1cm4gc29ydGVkX2xpc3QKKworICAgIGRlZiBncm91cF9mc3R5cGVzKHNlbGYsIGltYWdlX2ZzdHlwZXMpOgorICAgICAgICBzZWxmLmdyYXBoID0gc2VsZi5fY29uc3RydWN0X2RlcF9ncmFwaChpbWFnZV9mc3R5cGVzKQorCisgICAgICAgIHNlbGYuX2NsZWFuX2dyYXBoKCkKKworICAgICAgICBzZWxmLmRlcHNfYXJyYXkgPSBzZWxmLl9jb21wdXRlX2RlcGVuZGVuY2llcygpCisKKyAgICAgICAgYWxsdHlwZXMgPSBbbm9kZSBmb3Igbm9kZSBpbiBzZWxmLmdyYXBoXQorCisgICAgICAgIHJldHVybiAoYWxsdHlwZXMsIHNlbGYuX3NvcnRfZ3JhcGgoKSkKKworCitjbGFzcyBJbWFnZShJbWFnZURlcEdyYXBoKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHNlbGYuZCA9IGQKKworICAgICAgICBzdXBlcihJbWFnZSwgc2VsZikuX19pbml0X18oZCkKKworICAgIGRlZiBfZ2V0X3Jvb3Rmc19zaXplKHNlbGYpOgorICAgICAgICAiIiJjb21wdXRlIHRoZSByb290ZnMgc2l6ZSIiIgorICAgICAgICByb290ZnNfYWxpZ25tZW50ID0gaW50KHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1JPT1RGU19BTElHTk1FTlQnLCBUcnVlKSkKKyAgICAgICAgb3ZlcmhlYWRfZmFjdG9yID0gZmxvYXQoc2VsZi5kLmdldFZhcignSU1BR0VfT1ZFUkhFQURfRkFDVE9SJywgVHJ1ZSkpCisgICAgICAgIHJvb3Rmc19yZXFfc2l6ZSA9IGludChzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ST09URlNfU0laRScsIFRydWUpKQorICAgICAgICByb290ZnNfZXh0cmFfc3BhY2UgPSBldmFsKHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRScsIFRydWUpKQorICAgICAgICByb290ZnNfbWF4c2l6ZSA9IHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1JPT1RGU19NQVhTSVpFJywgVHJ1ZSkKKworICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2R1JywgJy1rcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKV0pCisgICAgICAgIHNpemVfa2IgPSBpbnQob3V0cHV0LnNwbGl0KClbMF0pCisgICAgICAgIGJhc2Vfc2l6ZSA9IHNpemVfa2IgKiBvdmVyaGVhZF9mYWN0b3IKKyAgICAgICAgYmFzZV9zaXplID0gKGJhc2Vfc2l6ZSwgcm9vdGZzX3JlcV9zaXplKVtiYXNlX3NpemUgPCByb290ZnNfcmVxX3NpemVdICsgXAorICAgICAgICAgICAgcm9vdGZzX2V4dHJhX3NwYWNlCisKKyAgICAgICAgaWYgYmFzZV9zaXplICE9IGludChiYXNlX3NpemUpOgorICAgICAgICAgICAgYmFzZV9zaXplID0gaW50KGJhc2Vfc2l6ZSArIDEpCisKKyAgICAgICAgYmFzZV9zaXplICs9IHJvb3Rmc19hbGlnbm1lbnQgLSAxCisgICAgICAgIGJhc2Vfc2l6ZSAtPSBiYXNlX3NpemUgJSByb290ZnNfYWxpZ25tZW50CisKKyAgICAgICAgIyBDaGVjayB0aGUgcm9vdGZzIHNpemUgYWdhaW5zdCBJTUFHRV9ST09URlNfTUFYU0laRSAoaWYgc2V0KQorICAgICAgICBpZiByb290ZnNfbWF4c2l6ZToKKyAgICAgICAgICAgIHJvb3Rmc19tYXhzaXplX2ludCA9IGludChyb290ZnNfbWF4c2l6ZSkKKyAgICAgICAgICAgIGlmIGJhc2Vfc2l6ZSA+IHJvb3Rmc19tYXhzaXplX2ludDoKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiVGhlIHJvb3RmcyBzaXplICVkKEspIG92ZXJyaWRlcyB0aGUgbWF4IHNpemUgJWQoSykiICUgXAorICAgICAgICAgICAgICAgICAgICAoYmFzZV9zaXplLCByb290ZnNfbWF4c2l6ZV9pbnQpKQorCisgICAgICAgIHJldHVybiBiYXNlX3NpemUKKworICAgIGRlZiBfY3JlYXRlX3N5bWxpbmtzKHNlbGYsIHN1YmltYWdlcyk6CisgICAgICAgICIiImNyZWF0ZSBzeW1saW5rcyB0byB0aGUgbmV3bHkgY3JlYXRlZCBpbWFnZSIiIgorICAgICAgICBkZXBsb3lfZGlyID0gc2VsZi5kLmdldFZhcignREVQTE9ZX0RJUl9JTUFHRScsIFRydWUpCisgICAgICAgIGltZ19uYW1lID0gc2VsZi5kLmdldFZhcignSU1BR0VfTkFNRScsIFRydWUpCisgICAgICAgIGxpbmtfbmFtZSA9IHNlbGYuZC5nZXRWYXIoJ0lNQUdFX0xJTktfTkFNRScsIFRydWUpCisgICAgICAgIG1hbmlmZXN0X25hbWUgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9NQU5JRkVTVCcsIFRydWUpCisKKyAgICAgICAgb3MuY2hkaXIoZGVwbG95X2RpcikKKworICAgICAgICBpZiBsaW5rX25hbWU6CisgICAgICAgICAgICBmb3IgdHlwZSBpbiBzdWJpbWFnZXM6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoaW1nX25hbWUgKyAiLnJvb3Rmcy4iICsgdHlwZSk6CisgICAgICAgICAgICAgICAgICAgIGRzdCA9IGxpbmtfbmFtZSArICIuIiArIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgc3JjID0gaW1nX25hbWUgKyAiLnJvb3Rmcy4iICsgdHlwZQorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGluZyBzeW1saW5rOiAlcyAtPiAlcyIgJSAoZHN0LCBzcmMpKQorICAgICAgICAgICAgICAgICAgICBvcy5zeW1saW5rKHNyYywgZHN0KQorCisgICAgICAgICAgICBpZiBtYW5pZmVzdF9uYW1lIGlzIG5vdCBOb25lIGFuZCBcCisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZXhpc3RzKG1hbmlmZXN0X25hbWUpIGFuZCBcCisgICAgICAgICAgICAgICAgICAgIG5vdCBvcy5wYXRoLmV4aXN0cyhsaW5rX25hbWUgKyAiLm1hbmlmZXN0Iik6CisgICAgICAgICAgICAgICAgb3Muc3ltbGluayhvcy5wYXRoLmJhc2VuYW1lKG1hbmlmZXN0X25hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua19uYW1lICsgIi5tYW5pZmVzdCIpCisKKyAgICBkZWYgX3JlbW92ZV9vbGRfc3ltbGlua3Moc2VsZik6CisgICAgICAgICIiInJlbW92ZSB0aGUgc3ltbGlua3MgdG8gb2xkIGJpbmFyaWVzIiIiCisKKyAgICAgICAgaWYgc2VsZi5kLmdldFZhcignSU1BR0VfTElOS19OQU1FJywgVHJ1ZSk6CisgICAgICAgICAgICBkZXBsb3lfZGlyID0gc2VsZi5kLmdldFZhcignREVQTE9ZX0RJUl9JTUFHRScsIFRydWUpCisgICAgICAgICAgICBmb3IgaW1nIGluIG9zLmxpc3RkaXIoZGVwbG95X2Rpcik6CisgICAgICAgICAgICAgICAgaWYgaW1nLmZpbmQoc2VsZi5kLmdldFZhcignSU1BR0VfTElOS19OQU1FJywgVHJ1ZSkpID09IDA6CisgICAgICAgICAgICAgICAgICAgIGltZyA9IG9zLnBhdGguam9pbihkZXBsb3lfZGlyLCBpbWcpCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGltZyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdSTV9PTERfSU1BR0UnLCBUcnVlKSA9PSAiMSIgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5leGlzdHMob3MucGF0aC5yZWFscGF0aChpbWcpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5yZWFscGF0aChpbWcpKQorCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoaW1nKQorCisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGp1c3QgZmlsdGVyIG91dCB0aGUgY29tcHJlc3NlZCBpbWFnZSB0eXBlcyBmcm9tIHRoZQorICAgIGZzdHlwZSBncm91cHMgcmV0dXJuaW5nIGEgKGZpbHRlcmVkX2ZzdHlwZV9ncm91cHMsIGNpbWFnZXMpIHR1cGxlLgorICAgICIiIgorICAgIGRlZiBfZmlsdGVyX291dF9jb21tcHJlc3NlZChzZWxmLCBmc3R5cGVfZ3JvdXBzKToKKyAgICAgICAgY3R5cGVzID0gc2VsZi5kLmdldFZhcignQ09NUFJFU1NJT05UWVBFUycsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgY2ltYWdlcyA9IHt9CisKKyAgICAgICAgZmlsdGVyZWRfZ3JvdXBzID0gW10KKyAgICAgICAgZm9yIGdyb3VwIGluIGZzdHlwZV9ncm91cHM6CisgICAgICAgICAgICBmaWx0ZXJlZF9ncm91cCA9IFtdCisgICAgICAgICAgICBmb3IgdHlwZSBpbiBncm91cDoKKyAgICAgICAgICAgICAgICBiYXNldHlwZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3IgY3R5cGUgaW4gY3R5cGVzOgorICAgICAgICAgICAgICAgICAgICBpZiB0eXBlLmVuZHN3aXRoKCIuIiArIGN0eXBlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2V0eXBlID0gdHlwZVs6LWxlbigiLiIgKyBjdHlwZSldCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBiYXNldHlwZSBub3QgaW4gZmlsdGVyZWRfZ3JvdXA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRfZ3JvdXAuYXBwZW5kKGJhc2V0eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYmFzZXR5cGUgbm90IGluIGNpbWFnZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ltYWdlc1tiYXNldHlwZV0gPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgY3R5cGUgbm90IGluIGNpbWFnZXNbYmFzZXR5cGVdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpbWFnZXNbYmFzZXR5cGVdLmFwcGVuZChjdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbm90IGJhc2V0eXBlIGFuZCB0eXBlIG5vdCBpbiBmaWx0ZXJlZF9ncm91cDoKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRfZ3JvdXAuYXBwZW5kKHR5cGUpCisKKyAgICAgICAgICAgIGZpbHRlcmVkX2dyb3Vwcy5hcHBlbmQoZmlsdGVyZWRfZ3JvdXApCisKKyAgICAgICAgcmV0dXJuIChmaWx0ZXJlZF9ncm91cHMsIGNpbWFnZXMpCisKKyAgICBkZWYgX2dldF9pbWFnZV90eXBlcyhzZWxmKToKKyAgICAgICAgIiIicmV0dXJucyBhICh0eXBlcywgY2ltYWdlcykgdHVwbGUiIiIKKworICAgICAgICBhbGx0eXBlcywgZnN0eXBlX2dyb3VwcyA9IHNlbGYuZ3JvdXBfZnN0eXBlcyhzZWxmLmQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSkuc3BsaXQoKSkKKworICAgICAgICBmaWx0ZXJlZF9ncm91cHMsIGNpbWFnZXMgPSBzZWxmLl9maWx0ZXJfb3V0X2NvbW1wcmVzc2VkKGZzdHlwZV9ncm91cHMpCisKKyAgICAgICAgcmV0dXJuIChhbGx0eXBlcywgZmlsdGVyZWRfZ3JvdXBzLCBjaW1hZ2VzKQorCisgICAgZGVmIF93cml0ZV9zY3JpcHQoc2VsZiwgdHlwZSwgY21kcyk6CisgICAgICAgIHRlbXBkaXIgPSBzZWxmLmQuZ2V0VmFyKCdUJywgVHJ1ZSkKKyAgICAgICAgc2NyaXB0X25hbWUgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgImNyZWF0ZV9pbWFnZS4iICsgdHlwZSkKKyAgICAgICAgcm9vdGZzX3NpemUgPSBzZWxmLl9nZXRfcm9vdGZzX3NpemUoKQorCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ2ltZ19jcmVhdGlvbl9mdW5jJywgJ1xuJy5qb2luKGNtZHMpKQorICAgICAgICBzZWxmLmQuc2V0VmFyRmxhZygnaW1nX2NyZWF0aW9uX2Z1bmMnLCAnZnVuYycsIDEpCisgICAgICAgIHNlbGYuZC5zZXRWYXJGbGFnKCdpbWdfY3JlYXRpb25fZnVuYycsICdmYWtlcm9vdCcsIDEpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ1JPT1RGU19TSVpFJywgc3RyKHJvb3Rmc19zaXplKSkKKworICAgICAgICB3aXRoIG9wZW4oc2NyaXB0X25hbWUsICJ3KyIpIGFzIHNjcmlwdDoKKyAgICAgICAgICAgIHNjcmlwdC53cml0ZSgiJXMiICUgYmIuYnVpbGQuc2hlbGxfdHJhcF9jb2RlKCkpCisgICAgICAgICAgICBzY3JpcHQud3JpdGUoImV4cG9ydCBST09URlNfU0laRT0lZFxuIiAlIHJvb3Rmc19zaXplKQorICAgICAgICAgICAgYmIuZGF0YS5lbWl0X2Z1bmMoJ2ltZ19jcmVhdGlvbl9mdW5jJywgc2NyaXB0LCBzZWxmLmQpCisgICAgICAgICAgICBzY3JpcHQud3JpdGUoImltZ19jcmVhdGlvbl9mdW5jXG4iKQorCisgICAgICAgIG9zLmNobW9kKHNjcmlwdF9uYW1lLCAwNzc1KQorCisgICAgICAgIHJldHVybiBzY3JpcHRfbmFtZQorCisgICAgZGVmIF9nZXRfaW1hZ2VjbWRzKHNlbGYpOgorICAgICAgICBvbGRfb3ZlcnJpZGVzID0gc2VsZi5kLmdldFZhcignT1ZFUlJJREVTJywgMCkKKworICAgICAgICBhbGx0eXBlcywgZnN0eXBlX2dyb3VwcywgY2ltYWdlcyA9IHNlbGYuX2dldF9pbWFnZV90eXBlcygpCisKKyAgICAgICAgaW1hZ2VfY21kX2dyb3VwcyA9IFtdCisKKyAgICAgICAgYmIubm90ZSgiVGhlIGltYWdlIGNyZWF0aW9uIGdyb3VwcyBhcmU6ICVzIiAlIHN0cihmc3R5cGVfZ3JvdXBzKSkKKyAgICAgICAgZm9yIGZzdHlwZV9ncm91cCBpbiBmc3R5cGVfZ3JvdXBzOgorICAgICAgICAgICAgaW1hZ2VfY21kcyA9IFtdCisgICAgICAgICAgICBmb3IgdHlwZSBpbiBmc3R5cGVfZ3JvdXA6CisgICAgICAgICAgICAgICAgY21kcyA9IFtdCisgICAgICAgICAgICAgICAgc3ViaW1hZ2VzID0gW10KKworICAgICAgICAgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShzZWxmLmQpCisgICAgICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgJyVzOiVzJyAlICh0eXBlLCBvbGRfb3ZlcnJpZGVzKSkKKyAgICAgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCd0eXBlJywgdHlwZSkKKworICAgICAgICAgICAgICAgIGltYWdlX2NtZCA9IGxvY2FsZGF0YS5nZXRWYXIoIklNQUdFX0NNRCIsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgaW1hZ2VfY21kOgorICAgICAgICAgICAgICAgICAgICBjbWRzLmFwcGVuZCgiXHQiICsgaW1hZ2VfY21kKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJObyBJTUFHRV9DTUQgZGVmaW5lZCBmb3IgSU1BR0VfRlNUWVBFUyBlbnRyeSAnJXMnIC0gcG9zc2libHkgaW52YWxpZCB0eXBlIG5hbWUgb3IgbWlzc2luZyBzdXBwb3J0IGNsYXNzIiAlIHR5cGUpCisgICAgICAgICAgICAgICAgY21kcy5hcHBlbmQobG9jYWxkYXRhLmV4cGFuZCgiXHRjZCAke0RFUExPWV9ESVJfSU1BR0V9IikpCisKKyAgICAgICAgICAgICAgICBpZiB0eXBlIGluIGNpbWFnZXM6CisgICAgICAgICAgICAgICAgICAgIGZvciBjdHlwZSBpbiBjaW1hZ2VzW3R5cGVdOgorICAgICAgICAgICAgICAgICAgICAgICAgY21kcy5hcHBlbmQoIlx0IiArIGxvY2FsZGF0YS5nZXRWYXIoIkNPTVBSRVNTX0NNRF8iICsgY3R5cGUsIFRydWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3ViaW1hZ2VzLmFwcGVuZCh0eXBlICsgIi4iICsgY3R5cGUpCisKKyAgICAgICAgICAgICAgICBpZiB0eXBlIG5vdCBpbiBhbGx0eXBlczoKKyAgICAgICAgICAgICAgICAgICAgY21kcy5hcHBlbmQobG9jYWxkYXRhLmV4cGFuZCgiXHRybSAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9IikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3ViaW1hZ2VzLmFwcGVuZCh0eXBlKQorCisgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl93cml0ZV9zY3JpcHQodHlwZSwgY21kcykKKworICAgICAgICAgICAgICAgIGltYWdlX2NtZHMuYXBwZW5kKCh0eXBlLCBzdWJpbWFnZXMsIHNjcmlwdF9uYW1lKSkKKworICAgICAgICAgICAgaW1hZ2VfY21kX2dyb3Vwcy5hcHBlbmQoaW1hZ2VfY21kcykKKworICAgICAgICByZXR1cm4gaW1hZ2VfY21kX2dyb3VwcworCisgICAgZGVmIF93cml0ZV93aWNfZW52KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV3JpdGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHVzZWQgYnkgd2ljCisgICAgICAgIHRvIHRtcC9zeXNyb290cy88bWFjaGluZT4vaW1nZGF0YS88aW1hZ2U+LmVudgorICAgICAgICAiIiIKKyAgICAgICAgc3RkaXIgPSBzZWxmLmQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9UQVJHRVQnLCBUcnVlKQorICAgICAgICBvdXRkaXIgPSBvcy5wYXRoLmpvaW4oc3RkaXIsICdpbWdkYXRhJykKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG91dGRpcik6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhvdXRkaXIpCisgICAgICAgIGJhc2VuYW1lID0gc2VsZi5kLmdldFZhcignSU1BR0VfQkFTRU5BTUUnLCBUcnVlKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKG91dGRpciwgYmFzZW5hbWUpICsgJy5lbnYnLCAndycpIGFzIGVudmY6CisgICAgICAgICAgICBmb3IgdmFyIGluIHNlbGYuZC5nZXRWYXIoJ1dJQ1ZBUlMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZi5kLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGVudmYud3JpdGUoJyVzPSIlcyJcbicgJSAodmFyLCB2YWx1ZS5zdHJpcCgpKSkKKworICAgIGRlZiBjcmVhdGUoc2VsZik6CisgICAgICAgIGJiLm5vdGUoIiMjIyMjIyBHZW5lcmF0ZSBpbWFnZXMgIyMjIyMjIyIpCisgICAgICAgIHByZV9wcm9jZXNzX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCJJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQiLCBUcnVlKQorICAgICAgICBwb3N0X3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoIklNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQiLCBUcnVlKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHByZV9wcm9jZXNzX2NtZHMpCisKKyAgICAgICAgc2VsZi5fcmVtb3ZlX29sZF9zeW1saW5rcygpCisKKyAgICAgICAgaW1hZ2VfY21kX2dyb3VwcyA9IHNlbGYuX2dldF9pbWFnZWNtZHMoKQorCisgICAgICAgIHNlbGYuX3dyaXRlX3dpY19lbnYoKQorCisgICAgICAgIGZvciBpbWFnZV9jbWRzIGluIGltYWdlX2NtZF9ncm91cHM6CisgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgaW1hZ2VzIGluIHBhcmFsbGVsCisgICAgICAgICAgICBucHJvYyA9IG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKQorICAgICAgICAgICAgcG9vbCA9IGJiLnV0aWxzLm11bHRpcHJvY2Vzc2luZ3Bvb2wobnByb2MpCisgICAgICAgICAgICByZXN1bHRzID0gbGlzdChwb29sLmltYXAoZ2VuZXJhdGVfaW1hZ2UsIGltYWdlX2NtZHMpKQorICAgICAgICAgICAgcG9vbC5jbG9zZSgpCisgICAgICAgICAgICBwb29sLmpvaW4oKQorCisgICAgICAgICAgICBmb3IgcmVzdWx0IGluIHJlc3VsdHM6CisgICAgICAgICAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbChyZXN1bHQpCisKKyAgICAgICAgICAgIGZvciBpbWFnZV90eXBlLCBzdWJpbWFnZXMsIHNjcmlwdCBpbiBpbWFnZV9jbWRzOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIkNyZWF0aW5nIHN5bWxpbmtzIGZvciAlcyBpbWFnZSAuLi4iICUgaW1hZ2VfdHlwZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jcmVhdGVfc3ltbGlua3Moc3ViaW1hZ2VzKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHBvc3RfcHJvY2Vzc19jbWRzKQorCisKK2RlZiBjcmVhdGVfaW1hZ2UoZCk6CisgICAgSW1hZ2UoZCkuY3JlYXRlKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICAiIiIKKyAgICBJbWFnZSBjcmVhdGlvbiBjYW4gYmUgY2FsbGVkIGluZGVwZW5kZW50IGZyb20gYml0YmFrZSBlbnZpcm9ubWVudC4KKyAgICAiIiIKKyAgICAiIiIKKyAgICBUQkQKKyAgICAiIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbGljZW5zZS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbGljZW5zZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGY2NjFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9saWNlbnNlLnB5CkBAIC0wLDAgKzEsMjE3IEBACisjIHZpOnN0cz00OnN3PTQ6ZXQKKyIiIkNvZGUgZm9yIHBhcnNpbmcgT3BlbkVtYmVkZGVkIGxpY2Vuc2Ugc3RyaW5ncyIiIgorCitpbXBvcnQgYXN0CitpbXBvcnQgcmUKK2Zyb20gZm5tYXRjaCBpbXBvcnQgZm5tYXRjaGNhc2UgYXMgZm5tYXRjaAorCitkZWYgbGljZW5zZV9vayhsaWNlbnNlLCBkb250X3dhbnRfbGljZW5zZXMpOgorICAgICIiIiBSZXR1cm4gRmFsc2UgaWYgTGljZW5zZSBleGlzdCBpbiBkb250X3dhbnRfbGljZW5zZXMgZWxzZSBUcnVlICIiIgorICAgIGZvciBkd2wgaW4gZG9udF93YW50X2xpY2Vuc2VzOgorICAgICAgICAjIElmIHlvdSB3YW50IHRvIGV4Y2x1ZGUgbGljZW5zZSBuYW1lZCBnZW5lcmljYWxseSAnWCcsIHdlCisgICAgICAgICMgc3VyZWx5IHdhbnQgdG8gZXhjbHVkZSAnWCsnIGFzIHdlbGwuICBJbiBjb25zZXF1ZW5jZSwgd2UKKyAgICAgICAgIyB3aWxsIGV4Y2x1ZGUgYSB0cmFpbGluZyAnKycgY2hhcmFjdGVyIGZyb20gTElDRU5TRSBpbgorICAgICAgICAjIGNhc2UgSU5DT01QQVRJQkxFX0xJQ0VOU0UgaXMgbm90IGEgJ1grJyBsaWNlbnNlLgorICAgICAgICBsaWMgPSBsaWNlbnNlCisgICAgICAgIGlmIG5vdCByZS5zZWFyY2goJ1wrJCcsIGR3bCk6CisgICAgICAgICAgICBsaWMgPSByZS5zdWIoJ1wrJywgJycsIGxpY2Vuc2UpCisgICAgICAgIGlmIGZubWF0Y2gobGljLCBkd2wpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworY2xhc3MgTGljZW5zZUVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBMaWNlbnNlU3ludGF4RXJyb3IoTGljZW5zZUVycm9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGljZW5zZXN0ciwgZXhjKToKKyAgICAgICAgc2VsZi5saWNlbnNlc3RyID0gbGljZW5zZXN0cgorICAgICAgICBzZWxmLmV4YyA9IGV4YworICAgICAgICBMaWNlbnNlRXJyb3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gImVycm9yIGluICclcyc6ICVzIiAlIChzZWxmLmxpY2Vuc2VzdHIsIHNlbGYuZXhjKQorCitjbGFzcyBJbnZhbGlkTGljZW5zZShMaWNlbnNlRXJyb3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaWNlbnNlKToKKyAgICAgICAgc2VsZi5saWNlbnNlID0gbGljZW5zZQorICAgICAgICBMaWNlbnNlRXJyb3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gImludmFsaWQgY2hhcmFjdGVycyBpbiBsaWNlbnNlICclcyciICUgc2VsZi5saWNlbnNlCisKK2xpY2Vuc2Vfb3BlcmF0b3JfY2hhcnMgPSAnJnwoKSAnCitsaWNlbnNlX29wZXJhdG9yID0gcmUuY29tcGlsZSgnKFsnICsgbGljZW5zZV9vcGVyYXRvcl9jaGFycyArICddKScpCitsaWNlbnNlX3BhdHRlcm4gPSByZS5jb21waWxlKCdbYS16QS1aMC05LitfXC1dKyQnKQorCitjbGFzcyBMaWNlbnNlVmlzaXRvcihhc3QuTm9kZVZpc2l0b3IpOgorICAgICIiIkdldCBlbGVtZW50cyBiYXNlZCBvbiBPcGVuRW1iZWRkZWQgbGljZW5zZSBzdHJpbmdzIiIiCisgICAgZGVmIGdldF9lbGVtZW50cyhzZWxmLCBsaWNlbnNlc3RyKToKKyAgICAgICAgbmV3X2VsZW1lbnRzID0gW10KKyAgICAgICAgZWxlbWVudHMgPSBmaWx0ZXIobGFtYmRhIHg6IHguc3RyaXAoKSwgbGljZW5zZV9vcGVyYXRvci5zcGxpdChsaWNlbnNlc3RyKSkKKyAgICAgICAgZm9yIHBvcywgZWxlbWVudCBpbiBlbnVtZXJhdGUoZWxlbWVudHMpOgorICAgICAgICAgICAgaWYgbGljZW5zZV9wYXR0ZXJuLm1hdGNoKGVsZW1lbnQpOgorICAgICAgICAgICAgICAgIGlmIHBvcyA+IDAgYW5kIGxpY2Vuc2VfcGF0dGVybi5tYXRjaChlbGVtZW50c1twb3MtMV0pOgorICAgICAgICAgICAgICAgICAgICBuZXdfZWxlbWVudHMuYXBwZW5kKCcmJykKKyAgICAgICAgICAgICAgICBlbGVtZW50ID0gJyInICsgZWxlbWVudCArICciJworICAgICAgICAgICAgZWxpZiBub3QgbGljZW5zZV9vcGVyYXRvci5tYXRjaChlbGVtZW50KToKKyAgICAgICAgICAgICAgICByYWlzZSBJbnZhbGlkTGljZW5zZShlbGVtZW50KQorICAgICAgICAgICAgbmV3X2VsZW1lbnRzLmFwcGVuZChlbGVtZW50KQorCisgICAgICAgIHJldHVybiBuZXdfZWxlbWVudHMKKworICAgICIiIlN5bnRheCB0cmVlIHZpc2l0b3Igd2hpY2ggY2FuIGFjY2VwdCBlbGVtZW50cyBwcmV2aW91c2x5IGdlbmVyYXRlZCB3aXRoCisgICAgT3BlbkVtYmVkZGVkIGxpY2Vuc2Ugc3RyaW5nIiIiCisgICAgZGVmIHZpc2l0X2VsZW1lbnRzKHNlbGYsIGVsZW1lbnRzKToKKyAgICAgICAgc2VsZi52aXNpdChhc3QucGFyc2UoJyAnLmpvaW4oZWxlbWVudHMpKSkKKworICAgICIiIlN5bnRheCB0cmVlIHZpc2l0b3Igd2hpY2ggY2FuIGFjY2VwdCBPcGVuRW1iZWRkZWQgbGljZW5zZSBzdHJpbmdzIiIiCisgICAgZGVmIHZpc2l0X3N0cmluZyhzZWxmLCBsaWNlbnNlc3RyKToKKyAgICAgICAgc2VsZi52aXNpdF9lbGVtZW50cyhzZWxmLmdldF9lbGVtZW50cyhsaWNlbnNlc3RyKSkKKworY2xhc3MgRmxhdHRlblZpc2l0b3IoTGljZW5zZVZpc2l0b3IpOgorICAgICIiIkZsYXR0ZW4gYSBsaWNlbnNlIHRyZWUgKHBhcnNlZCBmcm9tIGEgc3RyaW5nKSBieSBzZWxlY3Rpbmcgb25lIG9mIGVhY2gKKyAgICBzZXQgb2YgT1Igb3B0aW9ucywgaW4gdGhlIHdheSB0aGUgdXNlciBzcGVjaWZpZXMiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2hvb3NlX2xpY2Vuc2VzKToKKyAgICAgICAgc2VsZi5jaG9vc2VfbGljZW5zZXMgPSBjaG9vc2VfbGljZW5zZXMKKyAgICAgICAgc2VsZi5saWNlbnNlcyA9IFtdCisgICAgICAgIExpY2Vuc2VWaXNpdG9yLl9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgdmlzaXRfU3RyKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLmxpY2Vuc2VzLmFwcGVuZChub2RlLnMpCisKKyAgICBkZWYgdmlzaXRfQmluT3Aoc2VsZiwgbm9kZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZS5vcCwgYXN0LkJpdE9yKToKKyAgICAgICAgICAgIGxlZnQgPSBGbGF0dGVuVmlzaXRvcihzZWxmLmNob29zZV9saWNlbnNlcykKKyAgICAgICAgICAgIGxlZnQudmlzaXQobm9kZS5sZWZ0KQorCisgICAgICAgICAgICByaWdodCA9IEZsYXR0ZW5WaXNpdG9yKHNlbGYuY2hvb3NlX2xpY2Vuc2VzKQorICAgICAgICAgICAgcmlnaHQudmlzaXQobm9kZS5yaWdodCkKKworICAgICAgICAgICAgc2VsZWN0ZWQgPSBzZWxmLmNob29zZV9saWNlbnNlcyhsZWZ0LmxpY2Vuc2VzLCByaWdodC5saWNlbnNlcykKKyAgICAgICAgICAgIHNlbGYubGljZW5zZXMuZXh0ZW5kKHNlbGVjdGVkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5nZW5lcmljX3Zpc2l0KG5vZGUpCisKK2RlZiBmbGF0dGVuZWRfbGljZW5zZXMobGljZW5zZXN0ciwgY2hvb3NlX2xpY2Vuc2VzKToKKyAgICAiIiJHaXZlbiBhIGxpY2Vuc2Ugc3RyaW5nIGFuZCBjaG9vc2VfbGljZW5zZXMgZnVuY3Rpb24sIHJldHVybiBhIGZsYXQgbGlzdCBvZiBsaWNlbnNlcyIiIgorICAgIGZsYXR0ZW4gPSBGbGF0dGVuVmlzaXRvcihjaG9vc2VfbGljZW5zZXMpCisgICAgdHJ5OgorICAgICAgICBmbGF0dGVuLnZpc2l0X3N0cmluZyhsaWNlbnNlc3RyKQorICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6CisgICAgICAgIHJhaXNlIExpY2Vuc2VTeW50YXhFcnJvcihsaWNlbnNlc3RyLCBleGMpCisgICAgcmV0dXJuIGZsYXR0ZW4ubGljZW5zZXMKKworZGVmIGlzX2luY2x1ZGVkKGxpY2Vuc2VzdHIsIHdoaXRlbGlzdD1Ob25lLCBibGFja2xpc3Q9Tm9uZSk6CisgICAgIiIiR2l2ZW4gYSBsaWNlbnNlIHN0cmluZyBhbmQgd2hpdGVsaXN0IGFuZCBibGFja2xpc3QsIGRldGVybWluZSBpZiB0aGUKKyAgICBsaWNlbnNlIHN0cmluZyBtYXRjaGVzIHRoZSB3aGl0ZWxpc3QgYW5kIGRvZXMgbm90IG1hdGNoIHRoZSBibGFja2xpc3QuCisKKyAgICBSZXR1cm5zIGEgdHVwbGUgaG9sZGluZyB0aGUgYm9vbGVhbiBzdGF0ZSBhbmQgYSBsaXN0IG9mIHRoZSBhcHBsaWNhYmxlCisgICAgbGljZW5zZXMgd2hpY2ggd2VyZSBleGNsdWRlZCAob3IgTm9uZSwgaWYgdGhlIHN0YXRlIGlzIFRydWUpCisgICAgIiIiCisKKyAgICBkZWYgaW5jbHVkZV9saWNlbnNlKGxpY2Vuc2UpOgorICAgICAgICByZXR1cm4gYW55KGZubWF0Y2gobGljZW5zZSwgcGF0dGVybikgZm9yIHBhdHRlcm4gaW4gd2hpdGVsaXN0KQorCisgICAgZGVmIGV4Y2x1ZGVfbGljZW5zZShsaWNlbnNlKToKKyAgICAgICAgcmV0dXJuIGFueShmbm1hdGNoKGxpY2Vuc2UsIHBhdHRlcm4pIGZvciBwYXR0ZXJuIGluIGJsYWNrbGlzdCkKKworICAgIGRlZiBjaG9vc2VfbGljZW5zZXMoYWxwaGEsIGJldGEpOgorICAgICAgICAiIiJTZWxlY3QgdGhlIG9wdGlvbiBpbiBhbiBPUiB3aGljaCBpcyB0aGUgJ2Jlc3QnIChoYXMgdGhlIG1vc3QKKyAgICAgICAgaW5jbHVkZWQgbGljZW5zZXMpLiIiIgorICAgICAgICBhbHBoYV93ZWlnaHQgPSBsZW4oZmlsdGVyKGluY2x1ZGVfbGljZW5zZSwgYWxwaGEpKQorICAgICAgICBiZXRhX3dlaWdodCA9IGxlbihmaWx0ZXIoaW5jbHVkZV9saWNlbnNlLCBiZXRhKSkKKyAgICAgICAgaWYgYWxwaGFfd2VpZ2h0ID4gYmV0YV93ZWlnaHQ6CisgICAgICAgICAgICByZXR1cm4gYWxwaGEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBiZXRhCisKKyAgICBpZiBub3Qgd2hpdGVsaXN0OgorICAgICAgICB3aGl0ZWxpc3QgPSBbJyonXQorCisgICAgaWYgbm90IGJsYWNrbGlzdDoKKyAgICAgICAgYmxhY2tsaXN0ID0gW10KKworICAgIGxpY2Vuc2VzID0gZmxhdHRlbmVkX2xpY2Vuc2VzKGxpY2Vuc2VzdHIsIGNob29zZV9saWNlbnNlcykKKyAgICBleGNsdWRlZCA9IGZpbHRlcihsYW1iZGEgbGljOiBleGNsdWRlX2xpY2Vuc2UobGljKSwgbGljZW5zZXMpCisgICAgaW5jbHVkZWQgPSBmaWx0ZXIobGFtYmRhIGxpYzogaW5jbHVkZV9saWNlbnNlKGxpYyksIGxpY2Vuc2VzKQorICAgIGlmIGV4Y2x1ZGVkOgorICAgICAgICByZXR1cm4gRmFsc2UsIGV4Y2x1ZGVkCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIFRydWUsIGluY2x1ZGVkCisKK2NsYXNzIE1hbmlmZXN0VmlzaXRvcihMaWNlbnNlVmlzaXRvcik6CisgICAgIiIiV2FsayBsaWNlbnNlIHRyZWUgKHBhcnNlZCBmcm9tIGEgc3RyaW5nKSByZW1vdmluZyB0aGUgaW5jb21wYXRpYmxlCisgICAgbGljZW5zZXMgc3BlY2lmaWVkIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRvbnRfd2FudF9saWNlbnNlcywgY2Fub25pY2FsX2xpY2Vuc2UsIGQpOgorICAgICAgICBzZWxmLl9kb250X3dhbnRfbGljZW5zZXMgPSBkb250X3dhbnRfbGljZW5zZXMKKyAgICAgICAgc2VsZi5fY2Fub25pY2FsX2xpY2Vuc2UgPSBjYW5vbmljYWxfbGljZW5zZQorICAgICAgICBzZWxmLl9kID0gZAorICAgICAgICBzZWxmLl9vcGVyYXRvcnMgPSBbXQorCisgICAgICAgIHNlbGYubGljZW5zZXMgPSBbXQorICAgICAgICBzZWxmLmxpY2Vuc2VzdHIgPSAnJworCisgICAgICAgIExpY2Vuc2VWaXNpdG9yLl9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgdmlzaXQoc2VsZiwgbm9kZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZSwgYXN0LlN0cik6CisgICAgICAgICAgICBsaWMgPSBub2RlLnMKKworICAgICAgICAgICAgaWYgbGljZW5zZV9vayhzZWxmLl9jYW5vbmljYWxfbGljZW5zZShzZWxmLl9kLCBsaWMpLAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9kb250X3dhbnRfbGljZW5zZXMpID09IFRydWU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fb3BlcmF0b3JzOgorICAgICAgICAgICAgICAgICAgICBvcHMgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3Igb3AgaW4gc2VsZi5fb3BlcmF0b3JzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3AgPT0gJ1snOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wcy5hcHBlbmQob3ApCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIG9wID09ICddJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHMuYXBwZW5kKG9wKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3BzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHMuYXBwZW5kKG9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgb3BzWy0xXSBpbiBbJ1snLCAnXSddOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHMuYXBwZW5kKG9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wc1stMV0gPSBvcCAKKworICAgICAgICAgICAgICAgICAgICBmb3Igb3AgaW4gb3BzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3AgPT0gJ1snIG9yIG9wID09ICddJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpY2Vuc2VzdHIgKz0gb3AKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5saWNlbnNlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpY2Vuc2VzdHIgKz0gJyAnICsgb3AgKyAnICcKKworICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcGVyYXRvcnMgPSBbXQorCisgICAgICAgICAgICAgICAgc2VsZi5saWNlbnNlc3RyICs9IGxpYworICAgICAgICAgICAgICAgIHNlbGYubGljZW5zZXMuYXBwZW5kKGxpYykKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIGFzdC5CaXRBbmQpOgorICAgICAgICAgICAgc2VsZi5fb3BlcmF0b3JzLmFwcGVuZCgiJiIpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBhc3QuQml0T3IpOgorICAgICAgICAgICAgc2VsZi5fb3BlcmF0b3JzLmFwcGVuZCgifCIpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBhc3QuTGlzdCk6CisgICAgICAgICAgICBzZWxmLl9vcGVyYXRvcnMuYXBwZW5kKCJbIikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIGFzdC5Mb2FkKToKKyAgICAgICAgICAgIHNlbGYubGljZW5zZXN0ciArPSAiXSIKKworICAgICAgICBzZWxmLmdlbmVyaWNfdmlzaXQobm9kZSkKKworZGVmIG1hbmlmZXN0X2xpY2Vuc2VzKGxpY2Vuc2VzdHIsIGRvbnRfd2FudF9saWNlbnNlcywgY2Fub25pY2FsX2xpY2Vuc2UsIGQpOgorICAgICIiIkdpdmVuIGEgbGljZW5zZSBzdHJpbmcgYW5kIGRvbnRfd2FudF9saWNlbnNlcyBsaXN0LAorICAgICAgIHJldHVybiBsaWNlbnNlIHN0cmluZyBmaWx0ZXJlZCBhbmQgYSBsaXN0IG9mIGxpY2Vuc2VzIiIiCisgICAgbWFuaWZlc3QgPSBNYW5pZmVzdFZpc2l0b3IoZG9udF93YW50X2xpY2Vuc2VzLCBjYW5vbmljYWxfbGljZW5zZSwgZCkKKworICAgIHRyeToKKyAgICAgICAgZWxlbWVudHMgPSBtYW5pZmVzdC5nZXRfZWxlbWVudHMobGljZW5zZXN0cikKKworICAgICAgICAjIFJlcGxhY2UgJygpJyB0byAnW10nIGZvciBoYW5kbGUgaW4gYXN0IGFzIExpc3QgYW5kIExvYWQgdHlwZXMuCisgICAgICAgIGVsZW1lbnRzID0gWydbJyBpZiBlID09ICcoJyBlbHNlIGUgZm9yIGUgaW4gZWxlbWVudHNdCisgICAgICAgIGVsZW1lbnRzID0gWyddJyBpZiBlID09ICcpJyBlbHNlIGUgZm9yIGUgaW4gZWxlbWVudHNdCisKKyAgICAgICAgbWFuaWZlc3QudmlzaXRfZWxlbWVudHMoZWxlbWVudHMpCisgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGV4YzoKKyAgICAgICAgcmFpc2UgTGljZW5zZVN5bnRheEVycm9yKGxpY2Vuc2VzdHIsIGV4YykKKworICAgICMgUmVwbGFjZSAnW10nIHRvICcoKScgZm9yIG91dHB1dCBjb3JyZWN0IGxpY2Vuc2UuCisgICAgbWFuaWZlc3QubGljZW5zZXN0ciA9IG1hbmlmZXN0LmxpY2Vuc2VzdHIucmVwbGFjZSgnWycsICcoJykucmVwbGFjZSgnXScsICcpJykKKworICAgIHJldHVybiAobWFuaWZlc3QubGljZW5zZXN0ciwgbWFuaWZlc3QubGljZW5zZXMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL2xzYi5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbHNiLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZmU3MWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2xzYi5weQpAQCAtMCwwICsxLDgzIEBACitkZWYgcmVsZWFzZV9kaWN0KCk6CisgICAgIiIiUmV0dXJuIHRoZSBvdXRwdXQgb2YgbHNiX3JlbGVhc2UgLWlyIGFzIGEgZGljdGlvbmFyeSIiIgorICAgIGZyb20gc3VicHJvY2VzcyBpbXBvcnQgUElQRQorCisgICAgdHJ5OgorICAgICAgICBvdXRwdXQsIGVyciA9IGJiLnByb2Nlc3MucnVuKFsnbHNiX3JlbGVhc2UnLCAnLWlyJ10sIHN0ZGVycj1QSVBFKQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkNtZEVycm9yIGFzIGV4YzoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRhdGEgPSB7fQorICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdGxpbmVzKCk6CisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiLWUiKTogbGluZSA9IGxpbmVbMzpdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSwgdmFsdWUgPSBsaW5lLnNwbGl0KCI6XHQiLCAxKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZQorICAgIHJldHVybiBkYXRhCisKK2RlZiByZWxlYXNlX2RpY3RfZmlsZSgpOgorICAgICIiIiBUcnkgdG8gZ2F0aGVyIExTQiByZWxlYXNlIGluZm9ybWF0aW9uIG1hbnVhbGx5IHdoZW4gbHNiX3JlbGVhc2UgdG9vbCBpcyB1bmF2YWlsYWJsZSAiIiIKKyAgICBkYXRhID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoJy9ldGMvbHNiLXJlbGVhc2UnKToKKyAgICAgICAgICAgIGRhdGEgPSB7fQorICAgICAgICAgICAgd2l0aCBvcGVuKCcvZXRjL2xzYi1yZWxlYXNlJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBrZXksIHZhbHVlID0gbGluZS5zcGxpdCgiPSIsIDEpCisgICAgICAgICAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlLnN0cmlwKCkKKyAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cygnL2V0Yy9yZWRoYXQtcmVsZWFzZScpOgorICAgICAgICAgICAgZGF0YSA9IHt9CisgICAgICAgICAgICB3aXRoIG9wZW4oJy9ldGMvcmVkaGF0LXJlbGVhc2UnKSBhcyBmOgorICAgICAgICAgICAgICAgIGRpc3RybyA9IGYucmVhZGxpbmUoKS5zdHJpcCgpCisgICAgICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgICAgIG1hdGNoID0gcmUubWF0Y2gocicoLiopIHJlbGVhc2UgKC4qKSBcKCguKilcKScsIGRpc3RybykKKyAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgIGRhdGFbJ0RJU1RSSUJfSUQnXSA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgZGF0YVsnRElTVFJJQl9SRUxFQVNFJ10gPSBtYXRjaC5ncm91cCgyKQorICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKCcvZXRjL29zLXJlbGVhc2UnKToKKyAgICAgICAgICAgIGRhdGEgPSB7fQorICAgICAgICAgICAgd2l0aCBvcGVuKCcvZXRjL29zLXJlbGVhc2UnKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnTkFNRT0nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbJ0RJU1RSSUJfSUQnXSA9IGxpbmVbNTpdLnJzdHJpcCgpLnN0cmlwKCciJykKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdWRVJTSU9OX0lEPScpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnRElTVFJJQl9SRUxFQVNFJ10gPSBsaW5lWzExOl0ucnN0cmlwKCkuc3RyaXAoJyInKQorICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKCcvZXRjL1N1U0UtcmVsZWFzZScpOgorICAgICAgICAgICAgZGF0YSA9IHt9CisgICAgICAgICAgICBkYXRhWydESVNUUklCX0lEJ10gPSAnU1VTRSBMSU5VWCcKKyAgICAgICAgICAgIHdpdGggb3BlbignL2V0Yy9TdVNFLXJlbGVhc2UnKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnVkVSU0lPTiA9ICcpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnRElTVFJJQl9SRUxFQVNFJ10gPSBsaW5lWzEwOl0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICByZXR1cm4gZGF0YQorCitkZWYgZGlzdHJvX2lkZW50aWZpZXIoYWRqdXN0X2hvb2s9Tm9uZSk6CisgICAgIiIiUmV0dXJuIGEgZGlzdHJvIGlkZW50aWZpZXIgc3RyaW5nIGJhc2VkIHVwb24gbHNiX3JlbGVhc2UgLXJpLAorICAgICAgIHdpdGggb3B0aW9uYWwgYWRqdXN0bWVudCB2aWEgYSBob29rIiIiCisKKyAgICBsc2JfZGF0YSA9IHJlbGVhc2VfZGljdCgpCisgICAgaWYgbHNiX2RhdGE6CisgICAgICAgIGRpc3Ryb19pZCwgcmVsZWFzZSA9IGxzYl9kYXRhWydEaXN0cmlidXRvciBJRCddLCBsc2JfZGF0YVsnUmVsZWFzZSddCisgICAgZWxzZToKKyAgICAgICAgbHNiX2RhdGFfZmlsZSA9IHJlbGVhc2VfZGljdF9maWxlKCkKKyAgICAgICAgaWYgbHNiX2RhdGFfZmlsZToKKyAgICAgICAgICAgIGRpc3Ryb19pZCwgcmVsZWFzZSA9IGxzYl9kYXRhX2ZpbGVbJ0RJU1RSSUJfSUQnXSwgbHNiX2RhdGFfZmlsZS5nZXQoJ0RJU1RSSUJfUkVMRUFTRScsIE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkaXN0cm9faWQsIHJlbGVhc2UgPSBOb25lLCBOb25lCisKKyAgICBpZiBhZGp1c3RfaG9vazoKKyAgICAgICAgZGlzdHJvX2lkLCByZWxlYXNlID0gYWRqdXN0X2hvb2soZGlzdHJvX2lkLCByZWxlYXNlKQorICAgIGlmIG5vdCBkaXN0cm9faWQ6CisgICAgICAgIHJldHVybiAiVW5rbm93biIKKyAgICBpZiByZWxlYXNlOgorICAgICAgICBpZF9zdHIgPSAnezB9LXsxfScuZm9ybWF0KGRpc3Ryb19pZCwgcmVsZWFzZSkKKyAgICBlbHNlOgorICAgICAgICBpZF9zdHIgPSBkaXN0cm9faWQKKyAgICByZXR1cm4gaWRfc3RyLnJlcGxhY2UoJyAnLCctJykucmVwbGFjZSgnLycsJy0nKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9tYWtldHlwZS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbWFrZXR5cGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM5ZjMzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbWFrZXR5cGUucHkKQEAgLTAsMCArMSw5OSBAQAorIiIiT3BlbkVtYmVkZGVkIHZhcmlhYmxlIHR5cGluZyBzdXBwb3J0CisKK1R5cGVzIGFyZSBkZWZpbmVkIGluIHRoZSBtZXRhZGF0YSBieSBuYW1lLCB1c2luZyB0aGUgJ3R5cGUnIGZsYWcgb24gYQordmFyaWFibGUuICBPdGhlciBmbGFncyBtYXkgYmUgdXRpbGl6ZWQgaW4gdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGUgdHlwZXMuICBTZWUKK3RoZSBhcmd1bWVudHMgb2YgdGhlIHR5cGUncyBmYWN0b3J5IGZvciBkZXRhaWxzLgorIiIiCisKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgdHlwZXMKKworYXZhaWxhYmxlX3R5cGVzID0ge30KKworY2xhc3MgTWlzc2luZ0ZsYWcoVHlwZUVycm9yKToKKyAgICAiIiJBIHBhcnRpY3VsYXIgZmxhZyBpcyByZXF1aXJlZCB0byBjb25zdHJ1Y3QgdGhlIHR5cGUsIGJ1dCBoYXMgbm90IGJlZW4KKyAgICBwcm92aWRlZC4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmxhZywgdHlwZSk6CisgICAgICAgIHNlbGYuZmxhZyA9IGZsYWcKKyAgICAgICAgc2VsZi50eXBlID0gdHlwZQorICAgICAgICBUeXBlRXJyb3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlR5cGUgJyVzJyByZXF1aXJlcyBmbGFnICclcyciICUgKHNlbGYudHlwZSwgc2VsZi5mbGFnKQorCitkZWYgZmFjdG9yeSh2YXJfdHlwZSk6CisgICAgIiIiUmV0dXJuIHRoZSBmYWN0b3J5IGZvciBhIHNwZWNpZmllZCB0eXBlLiIiIgorICAgIGlmIHZhcl90eXBlIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiTm8gdHlwZSBzcGVjaWZpZWQuIFZhbGlkIHR5cGVzOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgJywgJy5qb2luKGF2YWlsYWJsZV90eXBlcykpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gYXZhaWxhYmxlX3R5cGVzW3Zhcl90eXBlXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJJbnZhbGlkIHR5cGUgJyVzJzpcbiAgVmFsaWQgdHlwZXM6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAodmFyX3R5cGUsICcsICcuam9pbihhdmFpbGFibGVfdHlwZXMpKSkKKworZGVmIGNyZWF0ZSh2YWx1ZSwgdmFyX3R5cGUsICoqZmxhZ3MpOgorICAgICIiIkNyZWF0ZSBhbiBvYmplY3Qgb2YgdGhlIHNwZWNpZmllZCB0eXBlLCBnaXZlbiB0aGUgc3BlY2lmaWVkIGZsYWdzIGFuZAorICAgIHN0cmluZyB2YWx1ZS4iIiIKKyAgICBvYmogPSBmYWN0b3J5KHZhcl90eXBlKQorICAgIG9iamZsYWdzID0ge30KKyAgICBmb3IgZmxhZyBpbiBvYmouZmxhZ3M6CisgICAgICAgIGlmIGZsYWcgbm90IGluIGZsYWdzOgorICAgICAgICAgICAgaWYgZmxhZyBub3QgaW4gb2JqLm9wdGZsYWdzOgorICAgICAgICAgICAgICAgIHJhaXNlIE1pc3NpbmdGbGFnKGZsYWcsIHZhcl90eXBlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb2JqZmxhZ3NbZmxhZ10gPSBmbGFnc1tmbGFnXQorCisgICAgcmV0dXJuIG9iaih2YWx1ZSwgKipvYmpmbGFncykKKworZGVmIGdldF9jYWxsYWJsZV9hcmdzKG9iaik6CisgICAgIiIiR3JhYiBhbGwgYnV0IHRoZSBmaXJzdCBhcmd1bWVudCBvZiB0aGUgc3BlY2lmaWVkIGNhbGxhYmxlLCByZXR1cm5pbmcKKyAgICB0aGUgbGlzdCwgYXMgd2VsbCBhcyBhIGxpc3Qgb2Ygd2hpY2ggb2YgdGhlIGFyZ3VtZW50cyBoYXZlIGRlZmF1bHQKKyAgICB2YWx1ZXMuIiIiCisgICAgaWYgdHlwZShvYmopIGlzIHR5cGU6CisgICAgICAgIG9iaiA9IG9iai5fX2luaXRfXworCisgICAgYXJncywgdmFyYXJncywga2V5d29yZHMsIGRlZmF1bHRzID0gaW5zcGVjdC5nZXRhcmdzcGVjKG9iaikKKyAgICBmbGFnbGlzdCA9IFtdCisgICAgaWYgYXJnczoKKyAgICAgICAgaWYgbGVuKGFyZ3MpID4gMSBhbmQgYXJnc1swXSA9PSAnc2VsZic6CisgICAgICAgICAgICBhcmdzID0gYXJnc1sxOl0KKyAgICAgICAgZmxhZ2xpc3QuZXh0ZW5kKGFyZ3MpCisKKyAgICBvcHRpb25hbCA9IHNldCgpCisgICAgaWYgZGVmYXVsdHM6CisgICAgICAgIG9wdGlvbmFsIHw9IHNldChmbGFnbGlzdFstbGVuKGRlZmF1bHRzKTpdKQorICAgIHJldHVybiBmbGFnbGlzdCwgb3B0aW9uYWwKKworZGVmIGZhY3Rvcnlfc2V0dXAobmFtZSwgb2JqKToKKyAgICAiIiJQcmVwYXJlIGEgZmFjdG9yeSBmb3IgdXNlLiIiIgorICAgIGFyZ3MsIG9wdGlvbmFsID0gZ2V0X2NhbGxhYmxlX2FyZ3Mob2JqKQorICAgIGV4dHJhX2FyZ3MgPSBhcmdzWzE6XQorICAgIGlmIGV4dHJhX2FyZ3M6CisgICAgICAgIG9iai5mbGFncywgb3B0aW9uYWwgPSBleHRyYV9hcmdzLCBvcHRpb25hbAorICAgICAgICBvYmoub3B0ZmxhZ3MgPSBzZXQob3B0aW9uYWwpCisgICAgZWxzZToKKyAgICAgICAgb2JqLmZsYWdzID0gb2JqLm9wdGZsYWdzID0gKCkKKworICAgIGlmIG5vdCBoYXNhdHRyKG9iaiwgJ25hbWUnKToKKyAgICAgICAgb2JqLm5hbWUgPSBuYW1lCisKK2RlZiByZWdpc3RlcihuYW1lLCBmYWN0b3J5KToKKyAgICAiIiJSZWdpc3RlciBhIHR5cGUsIGdpdmVuIGl0cyBuYW1lIGFuZCBhIGZhY3RvcnkgY2FsbGFibGUuCisKKyAgICBEZXRlcm1pbmVzIHRoZSByZXF1aXJlZCBhbmQgb3B0aW9uYWwgZmxhZ3MgZnJvbSB0aGUgZmFjdG9yeSdzCisgICAgYXJndW1lbnRzLiIiIgorICAgIGZhY3Rvcnlfc2V0dXAobmFtZSwgZmFjdG9yeSkKKyAgICBhdmFpbGFibGVfdHlwZXNbZmFjdG9yeS5uYW1lXSA9IGZhY3RvcnkKKworCisjIFJlZ2lzdGVyIGFsbCBvdXIgaW5jbHVkZWQgdHlwZXMKK2ZvciBuYW1lIGluIGRpcih0eXBlcyk6CisgICAgaWYgbmFtZS5zdGFydHN3aXRoKCdfJyk6CisgICAgICAgIGNvbnRpbnVlCisKKyAgICBvYmogPSBnZXRhdHRyKHR5cGVzLCBuYW1lKQorICAgIGlmIG5vdCBjYWxsYWJsZShvYmopOgorICAgICAgICBjb250aW51ZQorCisgICAgcmVnaXN0ZXIobmFtZSwgb2JqKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9tYW5pZmVzdC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbWFuaWZlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI4MzJmMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbWFuaWZlc3QucHkKQEAgLTAsMCArMSwzNDUgQEAKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBiYgorCisKK2NsYXNzIE1hbmlmZXN0KG9iamVjdCk6CisgICAgIiIiCisgICAgVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcy4gRG8gbm90IGluc3RhbnRpYXRlIHRoaXMgZGlyZWN0bHkuCisgICAgIiIiCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIFBLR19UWVBFX01VU1RfSU5TVEFMTCA9ICJtaXAiCisgICAgUEtHX1RZUEVfTVVMVElMSUIgPSAibWxwIgorICAgIFBLR19UWVBFX0xBTkdVQUdFID0gImxncCIKKyAgICBQS0dfVFlQRV9BVFRFTVBUX09OTFkgPSAiYW9wIgorCisgICAgTUFOSUZFU1RfVFlQRV9JTUFHRSA9ICJpbWFnZSIKKyAgICBNQU5JRkVTVF9UWVBFX1NES19IT1NUID0gInNka19ob3N0IgorICAgIE1BTklGRVNUX1RZUEVfU0RLX1RBUkdFVCA9ICJzZGtfdGFyZ2V0IgorCisgICAgdmFyX21hcHMgPSB7CisgICAgICAgIE1BTklGRVNUX1RZUEVfSU1BR0U6IHsKKyAgICAgICAgICAgICJQQUNLQUdFX0lOU1RBTEwiOiBQS0dfVFlQRV9NVVNUX0lOU1RBTEwsCisgICAgICAgICAgICAiUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZIjogUEtHX1RZUEVfQVRURU1QVF9PTkxZLAorICAgICAgICAgICAgIkxJTkdVQVNfSU5TVEFMTCI6IFBLR19UWVBFX0xBTkdVQUdFCisgICAgICAgIH0sCisgICAgICAgIE1BTklGRVNUX1RZUEVfU0RLX0hPU1Q6IHsKKyAgICAgICAgICAgICJUT09MQ0hBSU5fSE9TVF9UQVNLIjogUEtHX1RZUEVfTVVTVF9JTlNUQUxMLAorICAgICAgICAgICAgIlRPT0xDSEFJTl9IT1NUX1RBU0tfQVRURU1QVE9OTFkiOiBQS0dfVFlQRV9BVFRFTVBUX09OTFkKKyAgICAgICAgfSwKKyAgICAgICAgTUFOSUZFU1RfVFlQRV9TREtfVEFSR0VUOiB7CisgICAgICAgICAgICAiVE9PTENIQUlOX1RBUkdFVF9UQVNLIjogUEtHX1RZUEVfTVVTVF9JTlNUQUxMLAorICAgICAgICAgICAgIlRPT0xDSEFJTl9UQVJHRVRfVEFTS19BVFRFTVBUT05MWSI6IFBLR19UWVBFX0FUVEVNUFRfT05MWQorICAgICAgICB9CisgICAgfQorCisgICAgSU5TVEFMTF9PUkRFUiA9IFsKKyAgICAgICAgUEtHX1RZUEVfTEFOR1VBR0UsCisgICAgICAgIFBLR19UWVBFX01VU1RfSU5TVEFMTCwKKyAgICAgICAgUEtHX1RZUEVfQVRURU1QVF9PTkxZLAorICAgICAgICBQS0dfVFlQRV9NVUxUSUxJQgorICAgIF0KKworICAgIGluaXRpYWxfbWFuaWZlc3RfZmlsZV9oZWFkZXIgPSBcCisgICAgICAgICIjIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYW5kIGNvbnRhaW5zIHRoZSBwYWNrYWdlc1xuIiBcCisgICAgICAgICIjIHBhc3NlZCBvbiB0byB0aGUgcGFja2FnZSBtYW5hZ2VyIGluIG9yZGVyIHRvIGNyZWF0ZSB0aGUgcm9vdGZzLlxuXG4iIFwKKyAgICAgICAgIiMgRm9ybWF0OlxuIiBcCisgICAgICAgICIjICA8cGFja2FnZV90eXBlPiw8cGFja2FnZV9uYW1lPlxuIiBcCisgICAgICAgICIjIHdoZXJlOlxuIiBcCisgICAgICAgICIjICAgPHBhY2thZ2VfdHlwZT4gY2FuIGJlOlxuIiBcCisgICAgICAgICIjICAgICAgJ21pcCcgPSBtdXN0IGluc3RhbGwgcGFja2FnZVxuIiBcCisgICAgICAgICIjICAgICAgJ2FvcCcgPSBhdHRlbXB0IG9ubHkgcGFja2FnZVxuIiBcCisgICAgICAgICIjICAgICAgJ21scCcgPSBtdWx0aWxpYiBwYWNrYWdlXG4iIFwKKyAgICAgICAgIiMgICAgICAnbGdwJyA9IGxhbmd1YWdlIHBhY2thZ2VcblxuIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcj1Ob25lLCBtYW5pZmVzdF90eXBlPU1BTklGRVNUX1RZUEVfSU1BR0UpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYubWFuaWZlc3RfdHlwZSA9IG1hbmlmZXN0X3R5cGUKKworICAgICAgICBpZiBtYW5pZmVzdF9kaXIgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIG1hbmlmZXN0X3R5cGUgIT0gc2VsZi5NQU5JRkVTVF9UWVBFX0lNQUdFOgorICAgICAgICAgICAgICAgIHNlbGYubWFuaWZlc3RfZGlyID0gc2VsZi5kLmdldFZhcignU0RLX0RJUicsIFRydWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYubWFuaWZlc3RfZGlyID0gc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm1hbmlmZXN0X2RpciA9IG1hbmlmZXN0X2RpcgorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLm1hbmlmZXN0X2RpcikKKworICAgICAgICBzZWxmLmluaXRpYWxfbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5tYW5pZmVzdF9kaXIsICIlc19pbml0aWFsX21hbmlmZXN0IiAlIG1hbmlmZXN0X3R5cGUpCisgICAgICAgIHNlbGYuZmluYWxfbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5tYW5pZmVzdF9kaXIsICIlc19maW5hbF9tYW5pZmVzdCIgJSBtYW5pZmVzdF90eXBlKQorICAgICAgICBzZWxmLmZ1bGxfbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5tYW5pZmVzdF9kaXIsICIlc19mdWxsX21hbmlmZXN0IiAlIG1hbmlmZXN0X3R5cGUpCisKKyAgICAgICAgIyBwYWNrYWdlcyBpbiB0aGUgZm9sbG93aW5nIHZhcnMgd2lsbCBiZSBzcGxpdCBpbiAnbXVzdCBpbnN0YWxsJyBhbmQKKyAgICAgICAgIyAnbXVsdGlsaWInCisgICAgICAgIHNlbGYudmFyc190b19zcGxpdCA9IFsiUEFDS0FHRV9JTlNUQUxMIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUT09MQ0hBSU5fSE9TVF9UQVNLIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUT09MQ0hBSU5fVEFSR0VUX1RBU0siXQorCisgICAgIiIiCisgICAgVGhpcyBjcmVhdGVzIGEgc3RhbmRhcmQgaW5pdGlhbCBtYW5pZmVzdCBmb3IgY29yZS1pbWFnZS0obWluaW1hbHxzYXRvfHNhdG8tc2RrKS4KKyAgICBUaGlzIHdpbGwgYmUgdXNlZCBmb3IgdGVzdGluZyB1bnRpbCB0aGUgY2xhc3MgaXMgaW1wbGVtZW50ZWQgcHJvcGVybHkhCisgICAgIiIiCisgICAgZGVmIF9jcmVhdGVfZHVtbXlfaW5pdGlhbChzZWxmKToKKyAgICAgICAgaW1hZ2Vfcm9vdGZzID0gc2VsZi5kLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSkKKyAgICAgICAgcGtnX2xpc3QgPSBkaWN0KCkKKyAgICAgICAgaWYgaW1hZ2Vfcm9vdGZzLmZpbmQoImNvcmUtaW1hZ2Utc2F0by1zZGsiKSA+IDA6CisgICAgICAgICAgICBwa2dfbGlzdFtzZWxmLlBLR19UWVBFX01VU1RfSU5TVEFMTF0gPSBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvLWdhbWVzIHBhY2thZ2Vncm91cC1iYXNlLWV4dGVuZGVkICIgXAorICAgICAgICAgICAgICAgICJwYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0byBwYWNrYWdlZ3JvdXAtY29yZS14MTEtYmFzZSAiIFwKKyAgICAgICAgICAgICAgICAicGFja2FnZWdyb3VwLWNvcmUtc2RrIHBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnICIgXAorICAgICAgICAgICAgICAgICJwYWNrYWdlZ3JvdXAtY29yZS1ib290IHBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXRlc3RhcHBzICIgXAorICAgICAgICAgICAgICAgICJwYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnIHBhY2thZ2Vncm91cC1jb3JlLXF0LWRlbW9hcHBzICIgXAorICAgICAgICAgICAgICAgICJhcHQgcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZSBwc3BsYXNoICIgXAorICAgICAgICAgICAgICAgICJwYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQgIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoIGRwa2cga2VybmVsLWRldiIKKyAgICAgICAgICAgIHBrZ19saXN0W3NlbGYuUEtHX1RZUEVfTEFOR1VBR0VdID0gXAorICAgICAgICAgICAgICAgICJsb2NhbGUtYmFzZS1lbi11cyBsb2NhbGUtYmFzZS1lbi1nYiIKKyAgICAgICAgZWxpZiBpbWFnZV9yb290ZnMuZmluZCgiY29yZS1pbWFnZS1zYXRvIikgPiAwOgorICAgICAgICAgICAgcGtnX2xpc3Rbc2VsZi5QS0dfVFlQRV9NVVNUX0lOU1RBTExdID0gXAorICAgICAgICAgICAgICAgICJwYWNrYWdlZ3JvdXAtY29yZS1zc2gtZHJvcGJlYXIgcGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8tZ2FtZXMgIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlIHBzcGxhc2ggYXB0IGRwa2cgcGFja2FnZWdyb3VwLWJhc2UtZXh0ZW5kZWQgIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvIHBhY2thZ2Vncm91cC1jb3JlLWJvb3QiCisgICAgICAgICAgICBwa2dfbGlzdFsnbGdwJ10gPSBcCisgICAgICAgICAgICAgICAgImxvY2FsZS1iYXNlLWVuLXVzIGxvY2FsZS1iYXNlLWVuLWdiIgorICAgICAgICBlbGlmIGltYWdlX3Jvb3Rmcy5maW5kKCJjb3JlLWltYWdlLW1pbmltYWwiKSA+IDA6CisgICAgICAgICAgICBwa2dfbGlzdFtzZWxmLlBLR19UWVBFX01VU1RfSU5TVEFMTF0gPSAicnVuLXBvc3RpbnN0cyBwYWNrYWdlZ3JvdXAtY29yZS1ib290IgorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmluaXRpYWxfbWFuaWZlc3QsICJ3KyIpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoc2VsZi5pbml0aWFsX21hbmlmZXN0X2ZpbGVfaGVhZGVyKQorCisgICAgICAgICAgICBmb3IgcGtnX3R5cGUgaW4gcGtnX2xpc3Q6CisgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBwa2dfbGlzdFtwa2dfdHlwZV0uc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoIiVzLCVzXG4iICUgKHBrZ190eXBlLCBwa2cpKQorCisgICAgIiIiCisgICAgVGhpcyB3aWxsIGNyZWF0ZSB0aGUgaW5pdGlhbCBtYW5pZmVzdCB3aGljaCB3aWxsIGJlIHVzZWQgYnkgUm9vdGZzIGNsYXNzIHRvCisgICAgZ2VuZXJhdGUgdGhlIHJvb3RmcworICAgICIiIgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBjcmVhdGVfaW5pdGlhbChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgIiIiCisgICAgVGhpcyBjcmVhdGVzIHRoZSBtYW5pZmVzdCBhZnRlciBldmVyeXRoaW5nIGhhcyBiZWVuIGluc3RhbGxlZC4KKyAgICAiIiIKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgY3JlYXRlX2ZpbmFsKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBUaGlzIGNyZWF0ZXMgdGhlIG1hbmlmZXN0IGFmdGVyIHRoZSBwYWNrYWdlIGluIGluaXRpYWwgbWFuaWZlc3QgaGFzIGJlZW4KKyAgICBkdW1teSBpbnN0YWxsZWQuIEl0IGxpc3RzIGFsbCAqdG8gYmUgaW5zdGFsbGVkKiBwYWNrYWdlcy4gVGhlcmUgaXMgbm8gcmVhbAorICAgIGluc3RhbGxhdGlvbiwganVzdCBhIHRlc3QuCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGNyZWF0ZV9mdWxsKHNlbGYsIHBtKToKKyAgICAgICAgcGFzcworCisgICAgIiIiCisgICAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBwYXJzZXMgYW4gaW5pdGlhbCBtYW5pZmVzdCBhbmQgcmV0dXJucyBhIGRpY3Rpb25hcnkKKyAgICBvYmplY3Qgd2l0aCB0aGUgbXVzdCBpbnN0YWxsLCBhdHRlbXB0IG9ubHksIG11bHRpbGliIGFuZCBsYW5ndWFnZSBwYWNrYWdlcy4KKyAgICAiIiIKKyAgICBkZWYgcGFyc2VfaW5pdGlhbF9tYW5pZmVzdChzZWxmKToKKyAgICAgICAgcGtncyA9IGRpY3QoKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmluaXRpYWxfbWFuaWZlc3QpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbWFuaWZlc3QucmVhZCgpLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIGNvbW1lbnQgPSByZS5tYXRjaCgiXiMuKiIsIGxpbmUpCisgICAgICAgICAgICAgICAgcGF0dGVybiA9ICJeKCVzfCVzfCVzfCVzKSwoLiopJCIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLlBLR19UWVBFX01VU1RfSU5TVEFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuUEtHX1RZUEVfQVRURU1QVF9PTkxZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5QS0dfVFlQRV9NVUxUSUxJQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuUEtHX1RZUEVfTEFOR1VBR0UpCisgICAgICAgICAgICAgICAgcGtnID0gcmUubWF0Y2gocGF0dGVybiwgbGluZSkKKworICAgICAgICAgICAgICAgIGlmIGNvbW1lbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBwa2cgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHBrZ190eXBlID0gcGtnLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgIHBrZ19uYW1lID0gcGtnLmdyb3VwKDIpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBrZ190eXBlIGluIHBrZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICBwa2dzW3BrZ190eXBlXSA9IFtwa2dfbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3NbcGtnX3R5cGVdLmFwcGVuZChwa2dfbmFtZSkKKworICAgICAgICByZXR1cm4gcGtncworCisgICAgJycnCisgICAgVGhpcyBmb2xsb3dpbmcgZnVuY3Rpb24gcGFyc2VzIGEgZnVsbCBtYW5pZmVzdCBhbmQgcmV0dXJuIGEgbGlzdAorICAgIG9iamVjdCB3aXRoIHBhY2thZ2VzLgorICAgICcnJworICAgIGRlZiBwYXJzZV9mdWxsX21hbmlmZXN0KHNlbGYpOgorICAgICAgICBpbnN0YWxsZWRfcGtncyA9IGxpc3QoKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5mdWxsX21hbmlmZXN0KToKKyAgICAgICAgICAgIGJiLm5vdGUoJ2Z1bGwgbWFuaWZlc3Qgbm90IGV4aXN0JykKKyAgICAgICAgICAgIHJldHVybiBpbnN0YWxsZWRfcGtncworCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZ1bGxfbWFuaWZlc3QsICdyJykgYXMgbWFuaWZlc3Q6CisgICAgICAgICAgICBmb3IgcGtnIGluIG1hbmlmZXN0LnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBpbnN0YWxsZWRfcGtncy5hcHBlbmQocGtnLnN0cmlwKCkpCisKKyAgICAgICAgcmV0dXJuIGluc3RhbGxlZF9wa2dzCisKKworY2xhc3MgUnBtTWFuaWZlc3QoTWFuaWZlc3QpOgorICAgICIiIgorICAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IG9iamVjdCB3aXRoIG1pcCBhbmQgbWxwIHBhY2thZ2VzLgorICAgICIiIgorICAgIGRlZiBfc3BsaXRfbXVsdGlsaWIoc2VsZiwgcGtnX2xpc3QpOgorICAgICAgICBwa2dzID0gZGljdCgpCisKKyAgICAgICAgZm9yIHBrZyBpbiBwa2dfbGlzdC5zcGxpdCgpOgorICAgICAgICAgICAgcGtnX3R5cGUgPSBzZWxmLlBLR19UWVBFX01VU1RfSU5TVEFMTAorCisgICAgICAgICAgICBtbF92YXJpYW50cyA9IHNlbGYuZC5nZXRWYXIoJ01VTFRJTElCX1ZBUklBTlRTJywgVHJ1ZSkuc3BsaXQoKQorCisgICAgICAgICAgICBmb3IgbWxfdmFyaWFudCBpbiBtbF92YXJpYW50czoKKyAgICAgICAgICAgICAgICBpZiBwa2cuc3RhcnRzd2l0aChtbF92YXJpYW50ICsgJy0nKToKKyAgICAgICAgICAgICAgICAgICAgcGtnX3R5cGUgPSBzZWxmLlBLR19UWVBFX01VTFRJTElCCisKKyAgICAgICAgICAgIGlmIG5vdCBwa2dfdHlwZSBpbiBwa2dzOgorICAgICAgICAgICAgICAgIHBrZ3NbcGtnX3R5cGVdID0gcGtnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBrZ3NbcGtnX3R5cGVdICs9ICIgIiArIHBrZworCisgICAgICAgIHJldHVybiBwa2dzCisKKyAgICBkZWYgY3JlYXRlX2luaXRpYWwoc2VsZik6CisgICAgICAgIHBrZ3MgPSBkaWN0KCkKKworICAgICAgICB3aXRoIG9wZW4oc2VsZi5pbml0aWFsX21hbmlmZXN0LCAidysiKSBhcyBtYW5pZmVzdDoKKyAgICAgICAgICAgIG1hbmlmZXN0LndyaXRlKHNlbGYuaW5pdGlhbF9tYW5pZmVzdF9maWxlX2hlYWRlcikKKworICAgICAgICAgICAgZm9yIHZhciBpbiBzZWxmLnZhcl9tYXBzW3NlbGYubWFuaWZlc3RfdHlwZV06CisgICAgICAgICAgICAgICAgaWYgdmFyIGluIHNlbGYudmFyc190b19zcGxpdDoKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRfcGtncyA9IHNlbGYuX3NwbGl0X211bHRpbGliKHNlbGYuZC5nZXRWYXIodmFyLCBUcnVlKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc3BsaXRfcGtncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3MgPSBkaWN0KHBrZ3MuaXRlbXMoKSArIHNwbGl0X3BrZ3MuaXRlbXMoKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwa2dfbGlzdCA9IHNlbGYuZC5nZXRWYXIodmFyLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBpZiBwa2dfbGlzdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3Nbc2VsZi52YXJfbWFwc1tzZWxmLm1hbmlmZXN0X3R5cGVdW3Zhcl1dID0gc2VsZi5kLmdldFZhcih2YXIsIFRydWUpCisKKyAgICAgICAgICAgIGZvciBwa2dfdHlwZSBpbiBwa2dzOgorICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gcGtnc1twa2dfdHlwZV0uc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoIiVzLCVzXG4iICUgKHBrZ190eXBlLCBwa2cpKQorCisgICAgZGVmIGNyZWF0ZV9maW5hbChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNyZWF0ZV9mdWxsKHNlbGYsIHBtKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIE9wa2dNYW5pZmVzdChNYW5pZmVzdCk6CisgICAgIiIiCisgICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgb2JqZWN0IHdpdGggbWlwIGFuZCBtbHAgcGFja2FnZXMuCisgICAgIiIiCisgICAgZGVmIF9zcGxpdF9tdWx0aWxpYihzZWxmLCBwa2dfbGlzdCk6CisgICAgICAgIHBrZ3MgPSBkaWN0KCkKKworICAgICAgICBmb3IgcGtnIGluIHBrZ19saXN0LnNwbGl0KCk6CisgICAgICAgICAgICBwa2dfdHlwZSA9IHNlbGYuUEtHX1RZUEVfTVVTVF9JTlNUQUxMCisKKyAgICAgICAgICAgIG1sX3ZhcmlhbnRzID0gc2VsZi5kLmdldFZhcignTVVMVElMSUJfVkFSSUFOVFMnLCBUcnVlKS5zcGxpdCgpCisKKyAgICAgICAgICAgIGZvciBtbF92YXJpYW50IGluIG1sX3ZhcmlhbnRzOgorICAgICAgICAgICAgICAgIGlmIHBrZy5zdGFydHN3aXRoKG1sX3ZhcmlhbnQgKyAnLScpOgorICAgICAgICAgICAgICAgICAgICBwa2dfdHlwZSA9IHNlbGYuUEtHX1RZUEVfTVVMVElMSUIKKworICAgICAgICAgICAgaWYgbm90IHBrZ190eXBlIGluIHBrZ3M6CisgICAgICAgICAgICAgICAgcGtnc1twa2dfdHlwZV0gPSBwa2cKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtnc1twa2dfdHlwZV0gKz0gIiAiICsgcGtnCisKKyAgICAgICAgcmV0dXJuIHBrZ3MKKworICAgIGRlZiBjcmVhdGVfaW5pdGlhbChzZWxmKToKKyAgICAgICAgcGtncyA9IGRpY3QoKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmluaXRpYWxfbWFuaWZlc3QsICJ3KyIpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoc2VsZi5pbml0aWFsX21hbmlmZXN0X2ZpbGVfaGVhZGVyKQorCisgICAgICAgICAgICBmb3IgdmFyIGluIHNlbGYudmFyX21hcHNbc2VsZi5tYW5pZmVzdF90eXBlXToKKyAgICAgICAgICAgICAgICBpZiB2YXIgaW4gc2VsZi52YXJzX3RvX3NwbGl0OgorICAgICAgICAgICAgICAgICAgICBzcGxpdF9wa2dzID0gc2VsZi5fc3BsaXRfbXVsdGlsaWIoc2VsZi5kLmdldFZhcih2YXIsIFRydWUpKQorICAgICAgICAgICAgICAgICAgICBpZiBzcGxpdF9wa2dzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtncyA9IGRpY3QocGtncy5pdGVtcygpICsgc3BsaXRfcGtncy5pdGVtcygpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBrZ19saXN0ID0gc2VsZi5kLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHBrZ19saXN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnc1tzZWxmLnZhcl9tYXBzW3NlbGYubWFuaWZlc3RfdHlwZV1bdmFyXV0gPSBzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkKKworICAgICAgICAgICAgZm9yIHBrZ190eXBlIGluIHBrZ3M6CisgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBwa2dzW3BrZ190eXBlXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdC53cml0ZSgiJXMsJXNcbiIgJSAocGtnX3R5cGUsIHBrZykpCisKKyAgICBkZWYgY3JlYXRlX2ZpbmFsKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgY3JlYXRlX2Z1bGwoc2VsZiwgcG0pOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5pbml0aWFsX21hbmlmZXN0KToKKyAgICAgICAgICAgIHNlbGYuY3JlYXRlX2luaXRpYWwoKQorCisgICAgICAgIGluaXRpYWxfbWFuaWZlc3QgPSBzZWxmLnBhcnNlX2luaXRpYWxfbWFuaWZlc3QoKQorICAgICAgICBwa2dzX3RvX2luc3RhbGwgPSBsaXN0KCkKKyAgICAgICAgZm9yIHBrZ190eXBlIGluIGluaXRpYWxfbWFuaWZlc3Q6CisgICAgICAgICAgICBwa2dzX3RvX2luc3RhbGwgKz0gaW5pdGlhbF9tYW5pZmVzdFtwa2dfdHlwZV0KKyAgICAgICAgaWYgbGVuKHBrZ3NfdG9faW5zdGFsbCkgPT0gMDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIG91dHB1dCA9IHBtLmR1bW15X2luc3RhbGwocGtnc190b19pbnN0YWxsKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZ1bGxfbWFuaWZlc3QsICd3KycpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgcGtnX3JlID0gcmUuY29tcGlsZSgnXkluc3RhbGxpbmcgKFteIF0rKSBbXiBdLionKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2V0KG91dHB1dC5zcGxpdCgnXG4nKSk6CisgICAgICAgICAgICAgICAgbSA9IHBrZ19yZS5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0LndyaXRlKG0uZ3JvdXAoMSkgKyAnXG4nKQorCisgICAgICAgIHJldHVybgorCisKK2NsYXNzIERwa2dNYW5pZmVzdChNYW5pZmVzdCk6CisgICAgZGVmIGNyZWF0ZV9pbml0aWFsKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5pbml0aWFsX21hbmlmZXN0LCAidysiKSBhcyBtYW5pZmVzdDoKKyAgICAgICAgICAgIG1hbmlmZXN0LndyaXRlKHNlbGYuaW5pdGlhbF9tYW5pZmVzdF9maWxlX2hlYWRlcikKKworICAgICAgICAgICAgZm9yIHZhciBpbiBzZWxmLnZhcl9tYXBzW3NlbGYubWFuaWZlc3RfdHlwZV06CisgICAgICAgICAgICAgICAgcGtnX2xpc3QgPSBzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkKKworICAgICAgICAgICAgICAgIGlmIHBrZ19saXN0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBrZ19saXN0LnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0LndyaXRlKCIlcywlc1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLnZhcl9tYXBzW3NlbGYubWFuaWZlc3RfdHlwZV1bdmFyXSwgcGtnKSkKKworICAgIGRlZiBjcmVhdGVfZmluYWwoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBjcmVhdGVfZnVsbChzZWxmLCBwbSk6CisgICAgICAgIHBhc3MKKworCitkZWYgY3JlYXRlX21hbmlmZXN0KGQsIGZpbmFsX21hbmlmZXN0PUZhbHNlLCBtYW5pZmVzdF9kaXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3RfdHlwZT1NYW5pZmVzdC5NQU5JRkVTVF9UWVBFX0lNQUdFKToKKyAgICBtYW5pZmVzdF9tYXAgPSB7J3JwbSc6IFJwbU1hbmlmZXN0LAorICAgICAgICAgICAgICAgICAgICAnaXBrJzogT3BrZ01hbmlmZXN0LAorICAgICAgICAgICAgICAgICAgICAnZGViJzogRHBrZ01hbmlmZXN0fQorCisgICAgbWFuaWZlc3QgPSBtYW5pZmVzdF9tYXBbZC5nZXRWYXIoJ0lNQUdFX1BLR1RZUEUnLCBUcnVlKV0oZCwgbWFuaWZlc3RfZGlyLCBtYW5pZmVzdF90eXBlKQorCisgICAgaWYgZmluYWxfbWFuaWZlc3Q6CisgICAgICAgIG1hbmlmZXN0LmNyZWF0ZV9maW5hbCgpCisgICAgZWxzZToKKyAgICAgICAgbWFuaWZlc3QuY3JlYXRlX2luaXRpYWwoKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNzY0NDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2UucHkKQEAgLTAsMCArMSwxMjUgQEAKK2RlZiBydW5zdHJpcChhcmcpOgorICAgICMgRnVuY3Rpb24gdG8gc3RyaXAgYSBzaW5nbGUgZmlsZSwgY2FsbGVkIGZyb20gc3BsaXRfYW5kX3N0cmlwX2ZpbGVzIGJlbG93CisgICAgIyBBIHdvcmtpbmcgJ2ZpbGUnIChvbmUgd2hpY2ggd29ya3Mgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUpCisgICAgIworICAgICMgVGhlIGVsZnR5cGUgaXMgYSBiaXQgcGF0dGVybiAoZXhwbGFpbmVkIGluIHNwbGl0X2FuZF9zdHJpcF9maWxlcykgdG8gdGVsbAorICAgICMgdXMgd2hhdCB0eXBlIG9mIGZpbGUgd2UncmUgcHJvY2Vzc2luZy4uLgorICAgICMgNCAtIGV4ZWN1dGFibGUKKyAgICAjIDggLSBzaGFyZWQgbGlicmFyeQorICAgICMgMTYgLSBrZXJuZWwgbW9kdWxlCisKKyAgICBpbXBvcnQgY29tbWFuZHMsIHN0YXQsIHN1YnByb2Nlc3MKKworICAgIChmaWxlLCBlbGZ0eXBlLCBzdHJpcCkgPSBhcmcKKworICAgIG5ld21vZGUgPSBOb25lCisgICAgaWYgbm90IG9zLmFjY2VzcyhmaWxlLCBvcy5XX09LKSBvciBvcy5hY2Nlc3MoZmlsZSwgb3MuUl9PSyk6CisgICAgICAgIG9yaWdtb2RlID0gb3Muc3RhdChmaWxlKVtzdGF0LlNUX01PREVdCisgICAgICAgIG5ld21vZGUgPSBvcmlnbW9kZSB8IHN0YXQuU19JV1JJVEUgfCBzdGF0LlNfSVJFQUQKKyAgICAgICAgb3MuY2htb2QoZmlsZSwgbmV3bW9kZSkKKworICAgIGV4dHJhZmxhZ3MgPSAiIgorCisgICAgIyBrZXJuZWwgbW9kdWxlICAgIAorICAgIGlmIGVsZnR5cGUgJiAxNjoKKyAgICAgICAgZXh0cmFmbGFncyA9ICItLXN0cmlwLWRlYnVnIC0tcmVtb3ZlLXNlY3Rpb249LmNvbW1lbnQgLS1yZW1vdmUtc2VjdGlvbj0ubm90ZSAtLXByZXNlcnZlLWRhdGVzIgorICAgICMgLnNvIGFuZCBzaGFyZWQgbGlicmFyeQorICAgIGVsaWYgIi5zbyIgaW4gZmlsZSBhbmQgZWxmdHlwZSAmIDg6CisgICAgICAgIGV4dHJhZmxhZ3MgPSAiLS1yZW1vdmUtc2VjdGlvbj0uY29tbWVudCAtLXJlbW92ZS1zZWN0aW9uPS5ub3RlIC0tc3RyaXAtdW5uZWVkZWQiCisgICAgIyBzaGFyZWQgb3IgZXhlY3V0YWJsZToKKyAgICBlbGlmIGVsZnR5cGUgJiA4IG9yIGVsZnR5cGUgJiA0OgorICAgICAgICBleHRyYWZsYWdzID0gIi0tcmVtb3ZlLXNlY3Rpb249LmNvbW1lbnQgLS1yZW1vdmUtc2VjdGlvbj0ubm90ZSIKKworICAgIHN0cmlwY21kID0gIiclcycgJXMgJyVzJyIgJSAoc3RyaXAsIGV4dHJhZmxhZ3MsIGZpbGUpCisgICAgYmIuZGVidWcoMSwgInJ1bnN0cmlwOiAlcyIgJSBzdHJpcGNtZCkKKworICAgIHRyeToKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoc3RyaXBjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgYmIuZXJyb3IoInJ1bnN0cmlwOiAnJXMnIHN0cmlwIGNvbW1hbmQgZmFpbGVkIHdpdGggJXMgKCVzKSIgJSAoc3RyaXBjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgaWYgbmV3bW9kZToKKyAgICAgICAgb3MuY2htb2QoZmlsZSwgb3JpZ21vZGUpCisKKyAgICByZXR1cm4KKworCitkZWYgZmlsZV90cmFuc2xhdGUoZmlsZSk6CisgICAgZnQgPSBmaWxlLnJlcGxhY2UoIkAiLCAiQGF0QCIpCisgICAgZnQgPSBmdC5yZXBsYWNlKCIgIiwgIkBzcGFjZUAiKQorICAgIGZ0ID0gZnQucmVwbGFjZSgiXHQiLCAiQHRhYkAiKQorICAgIGZ0ID0gZnQucmVwbGFjZSgiWyIsICJAb3BlbmJyYWNlQCIpCisgICAgZnQgPSBmdC5yZXBsYWNlKCJdIiwgIkBjbG9zZWJyYWNlQCIpCisgICAgZnQgPSBmdC5yZXBsYWNlKCJfIiwgIkB1bmRlcnNjb3JlQCIpCisgICAgcmV0dXJuIGZ0CisKK2RlZiBmaWxlZGVwcnVubmVyKGFyZyk6CisgICAgaW1wb3J0IHJlLCBzdWJwcm9jZXNzLCBzaGxleAorCisgICAgKHBrZywgcGtnZmlsZXMsIHJwbWRlcHMsIHBrZ2Rlc3QpID0gYXJnCisgICAgcHJvdmlkZXMgPSB7fQorICAgIHJlcXVpcmVzID0ge30KKworICAgIHIgPSByZS5jb21waWxlKHInWzw+PV0rICtbXiBdKicpCisKKyAgICBkZWYgcHJvY2Vzc19kZXBzKHBpcGUsIHBrZywgcGtnZGVzdCwgcHJvdmlkZXMsIHJlcXVpcmVzKToKKyAgICAgICAgZm9yIGxpbmUgaW4gcGlwZToKKyAgICAgICAgICAgIGYgPSBsaW5lLnNwbGl0KCIgIiwgMSlbMF0uc3RyaXAoKQorICAgICAgICAgICAgbGluZSA9IGxpbmUuc3BsaXQoIiAiLCAxKVsxXS5zdHJpcCgpCisKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiUmVxdWlyZXM6Iik6CisgICAgICAgICAgICAgICAgaSA9IHJlcXVpcmVzCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiUHJvdmlkZXM6Iik6CisgICAgICAgICAgICAgICAgaSA9IHByb3ZpZGVzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZpbGUgPSBmLnJlcGxhY2UocGtnZGVzdCArICIvIiArIHBrZywgIiIpCisgICAgICAgICAgICBmaWxlID0gZmlsZV90cmFuc2xhdGUoZmlsZSkKKyAgICAgICAgICAgIHZhbHVlID0gbGluZS5zcGxpdCgiOiIsIDEpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgIHZhbHVlID0gci5zdWIocicoXGc8MD4pJywgdmFsdWUpCisKKyAgICAgICAgICAgIGlmIHZhbHVlLnN0YXJ0c3dpdGgoInJwbWxpYigiKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgdmFsdWUgPT0gInB5dGhvbiI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGZpbGUgbm90IGluIGk6CisgICAgICAgICAgICAgICAgaVtmaWxlXSA9IFtdCisgICAgICAgICAgICBpW2ZpbGVdLmFwcGVuZCh2YWx1ZSkKKworICAgICAgICByZXR1cm4gcHJvdmlkZXMsIHJlcXVpcmVzCisKKyAgICB0cnk6CisgICAgICAgIGRlcF9wb3BlbiA9IHN1YnByb2Nlc3MuUG9wZW4oc2hsZXguc3BsaXQocnBtZGVwcykgKyBwa2dmaWxlcywgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgcHJvdmlkZXMsIHJlcXVpcmVzID0gcHJvY2Vzc19kZXBzKGRlcF9wb3Blbi5zdGRvdXQsIHBrZywgcGtnZGVzdCwgcHJvdmlkZXMsIHJlcXVpcmVzKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGJiLmVycm9yKCJycG1kZXBzOiAnJXMnIGNvbW1hbmQgZmFpbGVkLCAnJXMnIiAlIChzaGxleC5zcGxpdChycG1kZXBzKSArIHBrZ2ZpbGVzLCBlKSkKKyAgICAgICAgcmFpc2UgZQorCisgICAgcmV0dXJuIChwa2csIHByb3ZpZGVzLCByZXF1aXJlcykKKworCitkZWYgcmVhZF9zaGxpYl9wcm92aWRlcnMoZCk6CisgICAgaW1wb3J0IHJlCisKKyAgICBzaGxpYl9wcm92aWRlciA9IHt9CisgICAgc2hsaWJzX2RpcnMgPSBkLmdldFZhcignU0hMSUJTRElSUycsIFRydWUpLnNwbGl0KCkKKyAgICBsaXN0X3JlID0gcmUuY29tcGlsZSgnXiguKilcLmxpc3QkJykKKyAgICAjIEdvIGZyb20gbGVhc3QgdG8gbW9zdCBzcGVjaWZpYyBzaW5jZSB0aGUgbGFzdCBvbmUgZm91bmQgd2lucworICAgIGZvciBkaXIgaW4gcmV2ZXJzZWQoc2hsaWJzX2RpcnMpOgorICAgICAgICBiYi5kZWJ1ZygyLCAiUmVhZGluZyBzaGxpYiBwcm92aWRlcnMgaW4gJXMiICUgKGRpcikpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXIpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZm9yIGZpbGUgaW4gb3MubGlzdGRpcihkaXIpOgorICAgICAgICAgICAgbSA9IGxpc3RfcmUubWF0Y2goZmlsZSkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgZGVwX3BrZyA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBmZCA9IG9wZW4ob3MucGF0aC5qb2luKGRpciwgZmlsZSkpCisgICAgICAgICAgICAgICAgbGluZXMgPSBmZC5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgIGZkLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgcyA9IGwuc3RyaXAoKS5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgICAgIGlmIHNbMF0gbm90IGluIHNobGliX3Byb3ZpZGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgc2hsaWJfcHJvdmlkZXJbc1swXV0gPSB7fQorICAgICAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcltzWzBdXVtzWzFdXSA9IChkZXBfcGtnLCBzWzJdKQorICAgIHJldHVybiBzaGxpYl9wcm92aWRlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlX21hbmFnZXIucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2VfbWFuYWdlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTJlZDQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlX21hbmFnZXIucHkKQEAgLTAsMCArMSwxOTAwIEBACitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKK2ltcG9ydCBvcworaW1wb3J0IGdsb2IKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBiYgoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgb2UudXRpbHMKKworCisjIHRoaXMgY2FuIGJlIHVzZWQgYnkgYWxsIFBNIGJhY2tlbmRzIHRvIGNyZWF0ZSB0aGUgaW5kZXggZmlsZXMgaW4gcGFyYWxsZWwKK2RlZiBjcmVhdGVfaW5kZXgoYXJnKToKKyAgICBpbmRleF9jbWQgPSBhcmcKKworICAgIHRyeToKKyAgICAgICAgYmIubm90ZSgiRXhlY3V0aW5nICclcycgLi4uIiAlIGluZGV4X2NtZCkKKyAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoaW5kZXhfY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgIHJldHVybigiSW5kZXggY3JlYXRpb24gY29tbWFuZCAnJXMnIGZhaWxlZCB3aXRoIHJldHVybiBjb2RlICVkOlxuJXMiICUKKyAgICAgICAgICAgICAgIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBpZiByZXN1bHQ6CisgICAgICAgIGJiLm5vdGUocmVzdWx0KQorCisgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBJbmRleGVyKG9iamVjdCk6CisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBkZXBsb3lfZGlyKToKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLmRlcGxveV9kaXIgPSBkZXBsb3lfZGlyCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBScG1JbmRleGVyKEluZGV4ZXIpOgorICAgIGRlZiBnZXRfbWxfcHJlZml4X2FuZF9vc19saXN0KHNlbGYsIGFyY2hfdmFyPU5vbmUsIG9zX3Zhcj1Ob25lKToKKyAgICAgICAgcGFja2FnZV9hcmNocyA9IHsKKyAgICAgICAgICAgICdkZWZhdWx0JzogW10sCisgICAgICAgIH0KKworICAgICAgICB0YXJnZXRfb3MgPSB7CisgICAgICAgICAgICAnZGVmYXVsdCc6ICIiLAorICAgICAgICB9CisKKyAgICAgICAgaWYgYXJjaF92YXIgaXMgbm90IE5vbmUgYW5kIG9zX3ZhciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHBhY2thZ2VfYXJjaHNbJ2RlZmF1bHQnXSA9IHNlbGYuZC5nZXRWYXIoYXJjaF92YXIsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgICAgIHBhY2thZ2VfYXJjaHNbJ2RlZmF1bHQnXS5yZXZlcnNlKCkKKyAgICAgICAgICAgIHRhcmdldF9vc1snZGVmYXVsdCddID0gc2VsZi5kLmdldFZhcihvc192YXIsIFRydWUpLnN0cmlwKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhY2thZ2VfYXJjaHNbJ2RlZmF1bHQnXSA9IHNlbGYuZC5nZXRWYXIoIlBBQ0tBR0VfQVJDSFMiLCBUcnVlKS5zcGxpdCgpCisgICAgICAgICAgICAjIGFyY2ggb3JkZXIgaXMgcmV2ZXJzZWQuICBUaGlzIGVuc3VyZXMgdGhlIC1iZXN0LSBtYXRjaCBpcworICAgICAgICAgICAgIyBsaXN0ZWQgZmlyc3QhCisgICAgICAgICAgICBwYWNrYWdlX2FyY2hzWydkZWZhdWx0J10ucmV2ZXJzZSgpCisgICAgICAgICAgICB0YXJnZXRfb3NbJ2RlZmF1bHQnXSA9IHNlbGYuZC5nZXRWYXIoIlRBUkdFVF9PUyIsIFRydWUpLnN0cmlwKCkKKyAgICAgICAgICAgIG11bHRpbGlicyA9IHNlbGYuZC5nZXRWYXIoJ01VTFRJTElCUycsIFRydWUpIG9yICIiCisgICAgICAgICAgICBmb3IgZXh0IGluIG11bHRpbGlicy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGVleHQgPSBleHQuc3BsaXQoJzonKQorICAgICAgICAgICAgICAgIGlmIGxlbihlZXh0KSA+IDEgYW5kIGVleHRbMF0gPT0gJ211bHRpbGliJzoKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KHNlbGYuZCkKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF90dW5lX2tleSA9ICJERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItIiArIGVleHRbMV0KKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF90dW5lID0gbG9jYWxkYXRhLmdldFZhcihkZWZhdWx0X3R1bmVfa2V5LCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVmYXVsdF90dW5lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3R1bmVfa2V5ID0gIkRFRkFVTFRUVU5FX01MXyIgKyBlZXh0WzFdCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3R1bmUgPSBsb2NhbGRhdGEuZ2V0VmFyKGRlZmF1bHRfdHVuZV9rZXksIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBpZiBkZWZhdWx0X3R1bmU6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJERUZBVUxUVFVORSIsIGRlZmF1bHRfdHVuZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9hcmNoc1tlZXh0WzFdXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BBQ0tBR0VfQVJDSFMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9hcmNoc1tlZXh0WzFdXS5yZXZlcnNlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9vc1tlZXh0WzFdXSA9IGxvY2FsZGF0YS5nZXRWYXIoIlRBUkdFVF9PUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpLnN0cmlwKCkKKworICAgICAgICBtbF9wcmVmaXhfbGlzdCA9IGRpY3QoKQorICAgICAgICBmb3IgbWxpYiBpbiBwYWNrYWdlX2FyY2hzOgorICAgICAgICAgICAgaWYgbWxpYiA9PSAnZGVmYXVsdCc6CisgICAgICAgICAgICAgICAgbWxfcHJlZml4X2xpc3RbbWxpYl0gPSBwYWNrYWdlX2FyY2hzW21saWJdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1sX3ByZWZpeF9saXN0W21saWJdID0gbGlzdCgpCisgICAgICAgICAgICAgICAgZm9yIGFyY2ggaW4gcGFja2FnZV9hcmNoc1ttbGliXToKKyAgICAgICAgICAgICAgICAgICAgaWYgYXJjaCBpbiBbJ2FsbCcsICdub2FyY2gnLCAnYW55J106CisgICAgICAgICAgICAgICAgICAgICAgICBtbF9wcmVmaXhfbGlzdFttbGliXS5hcHBlbmQoYXJjaCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1sX3ByZWZpeF9saXN0W21saWJdLmFwcGVuZChtbGliICsgIl8iICsgYXJjaCkKKworICAgICAgICByZXR1cm4gKG1sX3ByZWZpeF9saXN0LCB0YXJnZXRfb3MpCisKKyAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CisgICAgICAgIHNka19wa2dfYXJjaHMgPSAoc2VsZi5kLmdldFZhcignU0RLX1BBQ0tBR0VfQVJDSFMnLCBUcnVlKSBvciAiIikucmVwbGFjZSgnLScsICdfJykuc3BsaXQoKQorICAgICAgICBhbGxfbWxiX3BrZ19hcmNocyA9IChzZWxmLmQuZ2V0VmFyKCdBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUycsIFRydWUpIG9yICIiKS5yZXBsYWNlKCctJywgJ18nKS5zcGxpdCgpCisKKyAgICAgICAgbWxiX3ByZWZpeF9saXN0ID0gc2VsZi5nZXRfbWxfcHJlZml4X2FuZF9vc19saXN0KClbMF0KKworICAgICAgICBhcmNocyA9IHNldCgpCisgICAgICAgIGZvciBpdGVtIGluIG1sYl9wcmVmaXhfbGlzdDoKKyAgICAgICAgICAgIGFyY2hzID0gYXJjaHMudW5pb24oc2V0KGkucmVwbGFjZSgnLScsICdfJykgZm9yIGkgaW4gbWxiX3ByZWZpeF9saXN0W2l0ZW1dKSkKKworICAgICAgICBpZiBsZW4oYXJjaHMpID09IDA6CisgICAgICAgICAgICBhcmNocyA9IGFyY2hzLnVuaW9uKHNldChhbGxfbWxiX3BrZ19hcmNocykpCisKKyAgICAgICAgYXJjaHMgPSBhcmNocy51bmlvbihzZXQoc2RrX3BrZ19hcmNocykpCisKKyAgICAgICAgcnBtX2NyZWF0ZXJlcG8gPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgImNyZWF0ZXJlcG8iKQorICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfU0lHTicsIFRydWUpID09ICcxJzoKKyAgICAgICAgICAgIHBrZ2ZlZWRfZ3BnX25hbWUgPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfR1BHX05BTUUnLCBUcnVlKQorICAgICAgICAgICAgcGtnZmVlZF9ncGdfcGFzcyA9IHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9HUEdfUEFTU1BIUkFTRV9GSUxFJywgVHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBrZ2ZlZWRfZ3BnX25hbWUgPSBOb25lCisgICAgICAgICAgICBwa2dmZWVkX2dwZ19wYXNzID0gTm9uZQorICAgICAgICBncGdfYmluID0gc2VsZi5kLmdldFZhcignR1BHX0JJTicsIFRydWUpIG9yIFwKKyAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiZ3BnIikKKworICAgICAgICBpbmRleF9jbWRzID0gW10KKyAgICAgICAgcmVwb19zaWduX2NtZHMgPSBbXQorICAgICAgICBycG1fZGlyc19mb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciBhcmNoIGluIGFyY2hzOgorICAgICAgICAgICAgZGJwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwgJ3JwbWRiJywgYXJjaCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRicGF0aCk6CisgICAgICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKGRicGF0aCwgVHJ1ZSkKKyAgICAgICAgICAgIGFyY2hfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgYXJjaCkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGFyY2hfZGlyKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpbmRleF9jbWRzLmFwcGVuZCgiJXMgLS1kYnBhdGggJXMgLS11cGRhdGUgLXEgJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnBtX2NyZWF0ZXJlcG8sIGRicGF0aCwgYXJjaF9kaXIpKQorICAgICAgICAgICAgaWYgcGtnZmVlZF9ncGdfbmFtZToKKyAgICAgICAgICAgICAgICByZXBvbWRfZmlsZSA9IG9zLnBhdGguam9pbihhcmNoX2RpciwgJ3JlcG9kYXRhJywgJ3JlcG9tZC54bWwnKQorICAgICAgICAgICAgICAgIGdwZ19jbWQgPSAiJXMgLS1kZXRhY2gtc2lnbiAtLWFybW9yIC0tYmF0Y2ggLS1uby10dHkgLS15ZXMgIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICItLXBhc3NwaHJhc2UtZmlsZSAnJXMnIC11ICclcycgJXMiICUgKGdwZ19iaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ2ZlZWRfZ3BnX3Bhc3MsIHBrZ2ZlZWRfZ3BnX25hbWUsIHJlcG9tZF9maWxlKQorICAgICAgICAgICAgICAgIHJlcG9fc2lnbl9jbWRzLmFwcGVuZChncGdfY21kKQorCisgICAgICAgICAgICBycG1fZGlyc19mb3VuZCA9IFRydWUKKworICAgICAgICBpZiBub3QgcnBtX2RpcnNfZm91bmQ6CisgICAgICAgICAgICBiYi5ub3RlKCJUaGVyZSBhcmUgbm8gcGFja2FnZXMgaW4gJXMiICUgc2VsZi5kZXBsb3lfZGlyKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBDcmVhdGUgcmVwb2RhdGEKKyAgICAgICAgcmVzdWx0ID0gb2UudXRpbHMubXVsdGlwcm9jZXNzX2V4ZWMoaW5kZXhfY21kcywgY3JlYXRlX2luZGV4KQorICAgICAgICBpZiByZXN1bHQ6CisgICAgICAgICAgICBiYi5mYXRhbCgnJXMnICUgKCdcbicuam9pbihyZXN1bHQpKSkKKyAgICAgICAgIyBTaWduIHJlcG9tZAorICAgICAgICByZXN1bHQgPSBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyhyZXBvX3NpZ25fY21kcywgY3JlYXRlX2luZGV4KQorICAgICAgICBpZiByZXN1bHQ6CisgICAgICAgICAgICBiYi5mYXRhbCgnJXMnICUgKCdcbicuam9pbihyZXN1bHQpKSkKKyAgICAgICAgIyBDb3B5IHB1YmtleShzKSB0byByZXBvCisgICAgICAgIGRpc3Ryb192ZXJzaW9uID0gc2VsZi5kLmdldFZhcignRElTVFJPX1ZFUlNJT04nLCBUcnVlKSBvciAib2UuMCIKKyAgICAgICAgaWYgc2VsZi5kLmdldFZhcignUlBNX1NJR05fUEFDS0FHRVMnLCBUcnVlKSA9PSAnMSc6CisgICAgICAgICAgICBzaHV0aWwuY29weTIoc2VsZi5kLmdldFZhcignUlBNX0dQR19QVUJLRVknLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUlBNLUdQRy1LRVktJXMnICUgZGlzdHJvX3ZlcnNpb24pKQorICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfU0lHTicsIFRydWUpID09ICcxJzoKKyAgICAgICAgICAgIHNodXRpbC5jb3B5MihzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfR1BHX1BVQktFWScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSRVBPREFUQS1HUEctS0VZLSVzJyAlIGRpc3Ryb192ZXJzaW9uKSkKKworCitjbGFzcyBPcGtnSW5kZXhlcihJbmRleGVyKToKKyAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CisgICAgICAgIGFyY2hfdmFycyA9IFsiQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFMiLAorICAgICAgICAgICAgICAgICAgICAgIlNES19QQUNLQUdFX0FSQ0hTIiwKKyAgICAgICAgICAgICAgICAgICAgICJNVUxUSUxJQl9BUkNIUyJdCisKKyAgICAgICAgb3BrZ19pbmRleF9jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgIm9wa2ctbWFrZS1pbmRleCIpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsICJQYWNrYWdlcyIpKToKKyAgICAgICAgICAgIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgIlBhY2thZ2VzIiksICJ3IikuY2xvc2UoKQorCisgICAgICAgIGluZGV4X2NtZHMgPSBbXQorICAgICAgICBmb3IgYXJjaF92YXIgaW4gYXJjaF92YXJzOgorICAgICAgICAgICAgYXJjaHMgPSBzZWxmLmQuZ2V0VmFyKGFyY2hfdmFyLCBUcnVlKQorICAgICAgICAgICAgaWYgYXJjaHMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmb3IgYXJjaCBpbiBhcmNocy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHBrZ3NfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgYXJjaCkKKyAgICAgICAgICAgICAgICBwa2dzX2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnc19kaXIsICJQYWNrYWdlcyIpCisKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihwa2dzX2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGtnc19maWxlKToKKyAgICAgICAgICAgICAgICAgICAgb3Blbihwa2dzX2ZpbGUsICJ3IikuY2xvc2UoKQorCisgICAgICAgICAgICAgICAgaW5kZXhfY21kcy5hcHBlbmQoJyVzIC1yICVzIC1wICVzIC1tICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wa2dfaW5kZXhfY21kLCBwa2dzX2ZpbGUsIHBrZ3NfZmlsZSwgcGtnc19kaXIpKQorCisgICAgICAgIGlmIGxlbihpbmRleF9jbWRzKSA9PSAwOgorICAgICAgICAgICAgYmIubm90ZSgiVGhlcmUgYXJlIG5vIHBhY2thZ2VzIGluICVzISIgJSBzZWxmLmRlcGxveV9kaXIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByZXN1bHQgPSBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyhpbmRleF9jbWRzLCBjcmVhdGVfaW5kZXgpCisgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCclcycgJSAoJ1xuJy5qb2luKHJlc3VsdCkpKQorCisKKworY2xhc3MgRHBrZ0luZGV4ZXIoSW5kZXhlcik6CisgICAgZGVmIF9jcmVhdGVfY29uZmlncyhzZWxmKToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuYXB0X2NvbmZfZGlyKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAibGlzdHMiLCAicGFydGlhbCIpKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAiYXB0LmNvbmYuZCIpKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAicHJlZmVyZW5jZXMuZCIpKQorCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5hcHRfY29uZl9kaXIsICJwcmVmZXJlbmNlcyIpLAorICAgICAgICAgICAgICAgICJ3IikgYXMgcHJlZnNfZmlsZToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgInNvdXJjZXMubGlzdCIpLAorICAgICAgICAgICAgICAgICJ3KyIpIGFzIHNvdXJjZXNfZmlsZToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB3aXRoIG9wZW4oc2VsZi5hcHRfY29uZl9maWxlLCAidyIpIGFzIGFwdF9jb25mOgorICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmQuZXhwYW5kKCIke1NUQUdJTkdfRVRDRElSX05BVElWRX0iKSwKKyAgICAgICAgICAgICAgICAiYXB0IiwgImFwdC5jb25mLnNhbXBsZSIpKSBhcyBhcHRfY29uZl9zYW1wbGU6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gYXB0X2NvbmZfc2FtcGxlLnJlYWQoKS5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHJlLnN1YigiI1JPT1RGUyMiLCAiL2Rldi9udWxsIiwgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHJlLnN1YigiI0FQVENPTkYjIiwgc2VsZi5hcHRfY29uZl9kaXIsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGFwdF9jb25mLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgZGVmIHdyaXRlX2luZGV4KHNlbGYpOgorICAgICAgICBzZWxmLmFwdF9jb25mX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmQuZXhwYW5kKCIke0FQVENPTkZfVEFSR0VUfSIpLAorICAgICAgICAgICAgICAgICJhcHQtZnRwYXJjaGl2ZSIpCisgICAgICAgIHNlbGYuYXB0X2NvbmZfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgImFwdC5jb25mIikKKyAgICAgICAgc2VsZi5fY3JlYXRlX2NvbmZpZ3MoKQorCisgICAgICAgIG9zLmVudmlyb25bJ0FQVF9DT05GSUcnXSA9IHNlbGYuYXB0X2NvbmZfZmlsZQorCisgICAgICAgIHBrZ19hcmNocyA9IHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSFMnLCBUcnVlKQorICAgICAgICBpZiBwa2dfYXJjaHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhcmNoX2xpc3QgPSBwa2dfYXJjaHMuc3BsaXQoKQorICAgICAgICBzZGtfcGtnX2FyY2hzID0gc2VsZi5kLmdldFZhcignU0RLX1BBQ0tBR0VfQVJDSFMnLCBUcnVlKQorICAgICAgICBpZiBzZGtfcGtnX2FyY2hzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIGEgaW4gc2RrX3BrZ19hcmNocy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGlmIGEgbm90IGluIHBrZ19hcmNoczoKKyAgICAgICAgICAgICAgICAgICAgYXJjaF9saXN0LmFwcGVuZChhKQorCisgICAgICAgIGFsbF9tbGJfcGtnX2FyY2hfbGlzdCA9IChzZWxmLmQuZ2V0VmFyKCdBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUycsIFRydWUpIG9yICIiKS5yZXBsYWNlKCctJywgJ18nKS5zcGxpdCgpCisgICAgICAgIGFyY2hfbGlzdC5leHRlbmQoYXJjaCBmb3IgYXJjaCBpbiBhbGxfbWxiX3BrZ19hcmNoX2xpc3QgaWYgYXJjaCBub3QgaW4gYXJjaF9saXN0KQorCisgICAgICAgIGFwdF9mdHBhcmNoaXZlID0gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJhcHQtZnRwYXJjaGl2ZSIpCisgICAgICAgIGd6aXAgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgImd6aXAiKQorCisgICAgICAgIGluZGV4X2NtZHMgPSBbXQorICAgICAgICBkZWJfZGlyc19mb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciBhcmNoIGluIGFyY2hfbGlzdDoKKyAgICAgICAgICAgIGFyY2hfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgYXJjaCkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGFyY2hfZGlyKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBjbWQgPSAiY2QgJXM7IFBTRVVET19VTkxPQUQ9MSAlcyBwYWNrYWdlcyAuID4gUGFja2FnZXM7IiAlIChhcmNoX2RpciwgYXB0X2Z0cGFyY2hpdmUpCisKKyAgICAgICAgICAgIGNtZCArPSAiJXMgLWZjIFBhY2thZ2VzID4gUGFja2FnZXMuZ3o7IiAlIGd6aXAKKworICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihhcmNoX2RpciwgIlJlbGVhc2UiKSwgIncrIikgYXMgcmVsZWFzZToKKyAgICAgICAgICAgICAgICByZWxlYXNlLndyaXRlKCJMYWJlbDogJXNcbiIgJSBhcmNoKQorCisgICAgICAgICAgICBjbWQgKz0gIlBTRVVET19VTkxPQUQ9MSAlcyByZWxlYXNlIC4gPj4gUmVsZWFzZSIgJSBhcHRfZnRwYXJjaGl2ZQorICAgICAgICAgICAgCisgICAgICAgICAgICBpbmRleF9jbWRzLmFwcGVuZChjbWQpCisKKyAgICAgICAgICAgIGRlYl9kaXJzX2ZvdW5kID0gVHJ1ZQorCisgICAgICAgIGlmIG5vdCBkZWJfZGlyc19mb3VuZDoKKyAgICAgICAgICAgIGJiLm5vdGUoIlRoZXJlIGFyZSBubyBwYWNrYWdlcyBpbiAlcyIgJSBzZWxmLmRlcGxveV9kaXIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByZXN1bHQgPSBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyhpbmRleF9jbWRzLCBjcmVhdGVfaW5kZXgpCisgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCclcycgJSAoJ1xuJy5qb2luKHJlc3VsdCkpKQorCisKKworY2xhc3MgUGtnc0xpc3Qob2JqZWN0KToKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIHJvb3Rmc19kaXIpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYucm9vdGZzX2RpciA9IHJvb3Rmc19kaXIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBsaXN0KHNlbGYsIGZvcm1hdD1Ob25lKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFJwbVBrZ3NMaXN0KFBrZ3NMaXN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgcm9vdGZzX2RpciwgYXJjaF92YXI9Tm9uZSwgb3NfdmFyPU5vbmUpOgorICAgICAgICBzdXBlcihScG1Qa2dzTGlzdCwgc2VsZikuX19pbml0X18oZCwgcm9vdGZzX2RpcikKKworICAgICAgICBzZWxmLnJwbV9jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgInJwbSIpCisgICAgICAgIHNlbGYuaW1hZ2VfcnBtbGliID0gb3MucGF0aC5qb2luKHNlbGYucm9vdGZzX2RpciwgJ3Zhci9saWIvcnBtJykKKworICAgICAgICBzZWxmLm1sX3ByZWZpeF9saXN0LCBzZWxmLm1sX29zX2xpc3QgPSBcCisgICAgICAgICAgICBScG1JbmRleGVyKGQsIHJvb3Rmc19kaXIpLmdldF9tbF9wcmVmaXhfYW5kX29zX2xpc3QoYXJjaF92YXIsIG9zX3ZhcikKKworICAgICAgICAjIERldGVybWluZSBycG0gdmVyc2lvbgorICAgICAgICBjbWQgPSAiJXMgLS12ZXJzaW9uIiAlIHNlbGYucnBtX2NtZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiR2V0dGluZyBycG0gdmVyc2lvbiBmYWlsZWQuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKyAgICAgICAgc2VsZi5ycG1fdmVyc2lvbiA9IGludChvdXRwdXQuc3BsaXQoKVstMV0uc3BsaXQoJy4nKVswXSkKKworICAgICcnJworICAgIFRyYW5zbGF0ZSB0aGUgUlBNL1NtYXJ0IGZvcm1hdCBuYW1lcyB0byB0aGUgT0UgbXVsdGlsaWIgZm9ybWF0IG5hbWVzCisgICAgJycnCisgICAgZGVmIF9wa2dfdHJhbnNsYXRlX3NtYXJ0X3RvX29lKHNlbGYsIHBrZywgYXJjaCk6CisgICAgICAgIG5ld19wa2cgPSBwa2cKKyAgICAgICAgbmV3X2FyY2ggPSBhcmNoCisgICAgICAgIGZpeGVkX2FyY2ggPSBhcmNoLnJlcGxhY2UoJ18nLCAnLScpCisgICAgICAgIGZvdW5kID0gMAorICAgICAgICBmb3IgbWxpYiBpbiBzZWxmLm1sX3ByZWZpeF9saXN0OgorICAgICAgICAgICAgZm9yIGNtcF9hcmNoIGluIHNlbGYubWxfcHJlZml4X2xpc3RbbWxpYl06CisgICAgICAgICAgICAgICAgZml4ZWRfY21wX2FyY2ggPSBjbXBfYXJjaC5yZXBsYWNlKCdfJywgJy0nKQorICAgICAgICAgICAgICAgIGlmIGZpeGVkX2FyY2ggPT0gZml4ZWRfY21wX2FyY2g6CisgICAgICAgICAgICAgICAgICAgIGlmIG1saWIgPT0gJ2RlZmF1bHQnOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BrZyA9IHBrZworICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2FyY2ggPSBjbXBfYXJjaAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BrZyA9IG1saWIgKyAnLScgKyBwa2cKKyAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgbmVlZCB0byBzdHJpcCBvZmYgdGhlICR7bWxpYn1fIHByZWZpeCBvbiB0aGUgYXJjaAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2FyY2ggPSBjbXBfYXJjaC5yZXBsYWNlKG1saWIgKyAnXycsICcnKQorCisgICAgICAgICAgICAgICAgICAgICMgV29ya2Fyb3VuZCBmb3IgYnVnIDM1NjUuIFNpbXBseSBsb29rIHRvIHNlZSBpZiB3ZQorICAgICAgICAgICAgICAgICAgICAjIGtub3cgb2YgYSBwYWNrYWdlIHdpdGggdGhhdCBuYW1lLCBpZiBub3QgdHJ5IGFnYWluIQorICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVudGltZS1yZXZlcnNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BrZykKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBmb3VuZCA9PSAxIGFuZCBmaXhlZF9hcmNoID09IGZpeGVkX2NtcF9hcmNoOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICNiYi5ub3RlKCclcywgJXMgLT4gJXMsICVzJyAlIChwa2csIGFyY2gsIG5ld19wa2csIG5ld19hcmNoKSkKKyAgICAgICAgcmV0dXJuIG5ld19wa2csIG5ld19hcmNoCisKKyAgICBkZWYgX2xpc3RfcGtnX2RlcHMoc2VsZik6CisgICAgICAgIGNtZCA9IFtiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgInJwbXJlc29sdmUiKSwKKyAgICAgICAgICAgICAgICItdCIsIHNlbGYuaW1hZ2VfcnBtbGliXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKS5zdHJpcCgpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBnZXQgdGhlIHBhY2thZ2UgZGVwZW5kZW5jaWVzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKCcgJy5qb2luKGNtZCksIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIGRlZiBsaXN0KHNlbGYsIGZvcm1hdD1Ob25lKToKKyAgICAgICAgaWYgZm9ybWF0ID09ICJkZXBzIjoKKyAgICAgICAgICAgIGlmIHNlbGYucnBtX3ZlcnNpb24gPT0gNDoKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiJ2RlcHMnIGZvcm1hdCBkZXBlbmRlbmN5IGxpc3RpbmdzIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggcnBtIDQgc2luY2UgcnBtcmVzb2x2ZSBkb2VzIG5vdCB3b3JrIikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9saXN0X3BrZ19kZXBzKCkKKworICAgICAgICBjbWQgPSBzZWxmLnJwbV9jbWQgKyAnIC0tcm9vdCAnICsgc2VsZi5yb290ZnNfZGlyCisgICAgICAgIGNtZCArPSAnIC1EICJfZGJwYXRoIC92YXIvbGliL3JwbSIgLXFhJworICAgICAgICBpZiBzZWxmLnJwbV92ZXJzaW9uID09IDQ6CisgICAgICAgICAgICBjbWQgKz0gIiAtLXFmICdbJXtOQU1FfSAle0FSQ0h9ICV7VkVSU0lPTn1cbl0nIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kICs9ICIgLS1xZiAnWyV7TkFNRX0gJXtBUkNIfSAle1ZFUlNJT059ICV7UEFDS0FHRU9SSUdJTn1cbl0nIgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgYmIubm90ZShjbWQpCisgICAgICAgICAgICB0bXBfb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpLnN0cmlwKCkKKworICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDYW5ub3QgZ2V0IHRoZSBpbnN0YWxsZWQgcGFja2FnZXMgbGlzdC4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIG91dHB1dCA9IGxpc3QoKQorICAgICAgICBmb3IgbGluZSBpbiB0bXBfb3V0cHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgaWYgbGVuKGxpbmUuc3RyaXAoKSkgPT0gMDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcGtnID0gbGluZS5zcGxpdCgpWzBdCisgICAgICAgICAgICBhcmNoID0gbGluZS5zcGxpdCgpWzFdCisgICAgICAgICAgICB2ZXIgPSBsaW5lLnNwbGl0KClbMl0KKyAgICAgICAgICAgICMgU2tpcCBHUEcga2V5cworICAgICAgICAgICAgaWYgcGtnID09ICdncGctcHVia2V5JzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgc2VsZi5ycG1fdmVyc2lvbiA9PSA0OgorICAgICAgICAgICAgICAgIHBrZ29yaWdpbiA9ICJ1bmtub3duIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dvcmlnaW4gPSBsaW5lLnNwbGl0KClbM10KKyAgICAgICAgICAgIG5ld19wa2csIG5ld19hcmNoID0gc2VsZi5fcGtnX3RyYW5zbGF0ZV9zbWFydF90b19vZShwa2csIGFyY2gpCisKKyAgICAgICAgICAgIGlmIGZvcm1hdCA9PSAiYXJjaCI6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnJXMgJXMnICUgKG5ld19wa2csIG5ld19hcmNoKSkKKyAgICAgICAgICAgIGVsaWYgZm9ybWF0ID09ICJmaWxlIjoKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCclcyAlcyAlcycgJSAobmV3X3BrZywgcGtnb3JpZ2luLCBuZXdfYXJjaCkpCisgICAgICAgICAgICBlbGlmIGZvcm1hdCA9PSAidmVyIjoKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCclcyAlcyAlcycgJSAobmV3X3BrZywgbmV3X2FyY2gsIHZlcikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyVzJyAlIChuZXdfcGtnKSkKKworICAgICAgICAgICAgb3V0cHV0LnNvcnQoKQorCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4ob3V0cHV0KQorCisKK2NsYXNzIE9wa2dQa2dzTGlzdChQa2dzTGlzdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIHJvb3Rmc19kaXIsIGNvbmZpZ19maWxlKToKKyAgICAgICAgc3VwZXIoT3BrZ1BrZ3NMaXN0LCBzZWxmKS5fX2luaXRfXyhkLCByb290ZnNfZGlyKQorCisgICAgICAgIHNlbGYub3BrZ19jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgIm9wa2ciKQorICAgICAgICBzZWxmLm9wa2dfYXJncyA9ICItZiAlcyAtbyAlcyAiICUgKGNvbmZpZ19maWxlLCByb290ZnNfZGlyKQorICAgICAgICBzZWxmLm9wa2dfYXJncyArPSBzZWxmLmQuZ2V0VmFyKCJPUEtHX0FSR1MiLCBUcnVlKQorCisgICAgZGVmIGxpc3Qoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICBvcGtnX3F1ZXJ5X2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAib3BrZy1xdWVyeS1oZWxwZXIucHkiKQorCisgICAgICAgIGlmIGZvcm1hdCA9PSAiYXJjaCI6CisgICAgICAgICAgICBjbWQgPSAiJXMgJXMgc3RhdHVzIHwgJXMgLWEiICUgXAorICAgICAgICAgICAgICAgIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncywgb3BrZ19xdWVyeV9jbWQpCisgICAgICAgIGVsaWYgZm9ybWF0ID09ICJmaWxlIjoKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBzdGF0dXMgfCAlcyAtZiIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCBvcGtnX3F1ZXJ5X2NtZCkKKyAgICAgICAgZWxpZiBmb3JtYXQgPT0gInZlciI6CisgICAgICAgICAgICBjbWQgPSAiJXMgJXMgc3RhdHVzIHwgJXMgLXYiICUgXAorICAgICAgICAgICAgICAgIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncywgb3BrZ19xdWVyeV9jbWQpCisgICAgICAgIGVsaWYgZm9ybWF0ID09ICJkZXBzIjoKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBzdGF0dXMgfCAlcyIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCBvcGtnX3F1ZXJ5X2NtZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBsaXN0X2luc3RhbGxlZCB8IGN1dCAtZCcgJyAtZjEiICUgXAorICAgICAgICAgICAgICAgIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkuc3RyaXAoKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDYW5ub3QgZ2V0IHRoZSBpbnN0YWxsZWQgcGFja2FnZXMgbGlzdC4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIGlmIG91dHB1dCBhbmQgZm9ybWF0ID09ICJmaWxlIjoKKyAgICAgICAgICAgIHRtcF9vdXRwdXQgPSAiIgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIHBrZywgcGtnX2ZpbGUsIHBrZ19hcmNoID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucm9vdGZzX2RpciwgcGtnX2FyY2gsIHBrZ19maWxlKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZ1bGxfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHRtcF9vdXRwdXQgKz0gIiVzICVzICVzXG4iICUgKHBrZywgZnVsbF9wYXRoLCBwa2dfYXJjaCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0bXBfb3V0cHV0ICs9ICIlcyAlcyAlc1xuIiAlIChwa2csIHBrZ19maWxlLCBwa2dfYXJjaCkKKworICAgICAgICAgICAgb3V0cHV0ID0gdG1wX291dHB1dAorCisgICAgICAgIHJldHVybiBvdXRwdXQKKworCitjbGFzcyBEcGtnUGtnc0xpc3QoUGtnc0xpc3QpOgorICAgIGRlZiBsaXN0KHNlbGYsIGZvcm1hdD1Ob25lKToKKyAgICAgICAgY21kID0gW2JiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiZHBrZy1xdWVyeSIpLAorICAgICAgICAgICAgICAgIi0tYWRtaW5kaXI9JXMvdmFyL2xpYi9kcGtnIiAlIHNlbGYucm9vdGZzX2RpciwKKyAgICAgICAgICAgICAgICItVyJdCisKKyAgICAgICAgaWYgZm9ybWF0ID09ICJhcmNoIjoKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoIi1mPSR7UGFja2FnZX0gJHtQYWNrYWdlQXJjaH1cbiIpCisgICAgICAgIGVsaWYgZm9ybWF0ID09ICJmaWxlIjoKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoIi1mPSR7UGFja2FnZX0gJHtQYWNrYWdlfV8ke1ZlcnNpb259XyR7QXJjaGl0ZWN0dXJlfS5kZWIgJHtQYWNrYWdlQXJjaH1cbiIpCisgICAgICAgIGVsaWYgZm9ybWF0ID09ICJ2ZXIiOgorICAgICAgICAgICAgY21kLmFwcGVuZCgiLWY9JHtQYWNrYWdlfSAke1BhY2thZ2VBcmNofSAke1ZlcnNpb259XG4iKQorICAgICAgICBlbGlmIGZvcm1hdCA9PSAiZGVwcyI6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCItZj1QYWNrYWdlOiAke1BhY2thZ2V9XG5EZXBlbmRzOiAke0RlcGVuZHN9XG5SZWNvbW1lbmRzOiAke1JlY29tbWVuZHN9XG5cbiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCItZj0ke1BhY2thZ2V9XG4iKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKS5zdHJpcCgpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBnZXQgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyBsaXN0LiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKCcgJy5qb2luKGNtZCksIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIGlmIGZvcm1hdCA9PSAiZmlsZSI6CisgICAgICAgICAgICB0bXBfb3V0cHV0ID0gIiIKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHR1cGxlKG91dHB1dC5zcGxpdCgnXG4nKSk6CisgICAgICAgICAgICAgICAgaWYgbm90IGxpbmUuc3RyaXAoKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBwa2csIHBrZ19maWxlLCBwa2dfYXJjaCA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnJvb3Rmc19kaXIsIHBrZ19hcmNoLCBwa2dfZmlsZSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmdWxsX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICB0bXBfb3V0cHV0ICs9ICIlcyAlcyAlc1xuIiAlIChwa2csIGZ1bGxfcGF0aCwgcGtnX2FyY2gpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdG1wX291dHB1dCArPSAiJXMgJXMgJXNcbiIgJSAocGtnLCBwa2dfZmlsZSwgcGtnX2FyY2gpCisKKyAgICAgICAgICAgIG91dHB1dCA9IHRtcF9vdXRwdXQKKyAgICAgICAgZWxpZiBmb3JtYXQgPT0gImRlcHMiOgorICAgICAgICAgICAgb3BrZ19xdWVyeV9jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgIm9wa2ctcXVlcnktaGVscGVyLnB5IikKKyAgICAgICAgICAgIGZpbGVfb3V0ID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgICAgIGZpbGVfb3V0LndyaXRlKG91dHB1dCkKKyAgICAgICAgICAgIGZpbGVfb3V0LmZsdXNoKCkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCJjYXQgJXMgfCAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlX291dC5uYW1lLCBvcGtnX3F1ZXJ5X2NtZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUpCisgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBmaWxlX291dC5jbG9zZSgpCisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBjb21wdXRlIHBhY2thZ2VzIGRlcGVuZGVuY2llcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoZS5jbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgICAgICBmaWxlX291dC5jbG9zZSgpCisKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisKK2NsYXNzIFBhY2thZ2VNYW5hZ2VyKG9iamVjdCk6CisgICAgIiIiCisgICAgVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcy4gRG8gbm90IGluc3RhbnRpYXRlIHRoaXMgZGlyZWN0bHkuCisgICAgIiIiCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLmRlcGxveV9kaXIgPSBOb25lCisgICAgICAgIHNlbGYuZGVwbG95X2xvY2sgPSBOb25lCisgICAgICAgIHNlbGYuZmVlZF91cmlzID0gc2VsZi5kLmdldFZhcignUEFDS0FHRV9GRUVEX1VSSVMnLCBUcnVlKSBvciAiIgorICAgICAgICBzZWxmLmZlZWRfcHJlZml4ID0gc2VsZi5kLmdldFZhcignUEFDS0FHRV9GRUVEX1BSRUZJWCcsIFRydWUpIG9yICIiCisKKyAgICAiIiIKKyAgICBVcGRhdGUgdGhlIHBhY2thZ2UgbWFuYWdlciBwYWNrYWdlIGRhdGFiYXNlLgorICAgICIiIgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgICIiIgorICAgIEluc3RhbGwgYSBsaXN0IG9mIHBhY2thZ2VzLiAncGtncycgaXMgYSBsaXN0IG9iamVjdC4gSWYgJ2F0dGVtcHRfb25seScgaXMKKyAgICBUcnVlLCBpbnN0YWxsYXRpb24gZmFpbHVyZXMgYXJlIGlnbm9yZWQuCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGluc3RhbGwoc2VsZiwgcGtncywgYXR0ZW1wdF9vbmx5PUZhbHNlKToKKyAgICAgICAgcGFzcworCisgICAgIiIiCisgICAgUmVtb3ZlIGEgbGlzdCBvZiBwYWNrYWdlcy4gJ3BrZ3MnIGlzIGEgbGlzdCBvYmplY3QuIElmICd3aXRoX2RlcGVuZGVuY2llcycKKyAgICBpcyBGYWxzZSwgdGhlIGFueSBkZXBlbmRlbmNpZXMgYXJlIGxlZnQgaW4gcGxhY2UuCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHJlbW92ZShzZWxmLCBwa2dzLCB3aXRoX2RlcGVuZGVuY2llcz1UcnVlKToKKyAgICAgICAgcGFzcworCisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSBpbmRleCBmaWxlcworICAgICIiIgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHJlbW92ZV9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGxpc3RfaW5zdGFsbGVkKHNlbGYsIGZvcm1hdD1Ob25lKToKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGluc2VydF9mZWVkc191cmlzKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBJbnN0YWxsIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgYmFzZWQgdXBvbiB0aGUgbGlzdCBvZiBjdXJyZW50bHkgaW5zdGFsbGVkCisgICAgcGFja2FnZXMgZS5nLiBsb2NhbGVzLCAqLWRldiwgKi1kYmcsIGV0Yy4gVGhpcyB3aWxsIG9ubHkgYXR0ZW1wdCB0byBpbnN0YWxsCisgICAgdGhlc2UgcGFja2FnZXMsIGlmIHRoZXkgZG9uJ3QgZXhpc3QgdGhlbiBubyBlcnJvciB3aWxsIG9jY3VyLiAgTm90ZTogZXZlcnkKKyAgICBiYWNrZW5kIG5lZWRzIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBleHBsaWNpdGx5IGFmdGVyIHRoZSBub3JtYWwgcGFja2FnZQorICAgIGluc3RhbGxhdGlvbgorICAgICIiIgorICAgIGRlZiBpbnN0YWxsX2NvbXBsZW1lbnRhcnkoc2VsZiwgZ2xvYnM9Tm9uZSk6CisgICAgICAgICMgd2UgbmVlZCB0byB3cml0ZSB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgcGFja2FnZXMgdG8gYSBmaWxlIGJlY2F1c2UgdGhlCisgICAgICAgICMgb2UtcGtnZGF0YS11dGlsIHJlYWRzIGl0IGZyb20gYSBmaWxlCisgICAgICAgIGluc3RhbGxlZF9wa2dzX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0YWxsZWRfcGtncy50eHQiKQorICAgICAgICB3aXRoIG9wZW4oaW5zdGFsbGVkX3BrZ3NfZmlsZSwgIncrIikgYXMgaW5zdGFsbGVkX3BrZ3M6CisgICAgICAgICAgICBpbnN0YWxsZWRfcGtncy53cml0ZShzZWxmLmxpc3RfaW5zdGFsbGVkKCJhcmNoIikpCisKKyAgICAgICAgaWYgZ2xvYnMgaXMgTm9uZToKKyAgICAgICAgICAgIGdsb2JzID0gc2VsZi5kLmdldFZhcignSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZJywgVHJ1ZSkKKyAgICAgICAgICAgIHNwbGl0X2xpbmd1YXMgPSBzZXQoKQorCisgICAgICAgICAgICBmb3IgdHJhbnNsYXRpb24gaW4gc2VsZi5kLmdldFZhcignSU1BR0VfTElOR1VBUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgc3BsaXRfbGluZ3Vhcy5hZGQodHJhbnNsYXRpb24pCisgICAgICAgICAgICAgICAgc3BsaXRfbGluZ3Vhcy5hZGQodHJhbnNsYXRpb24uc3BsaXQoJy0nKVswXSkKKworICAgICAgICAgICAgc3BsaXRfbGluZ3VhcyA9IHNvcnRlZChzcGxpdF9saW5ndWFzKQorCisgICAgICAgICAgICBmb3IgbGFuZyBpbiBzcGxpdF9saW5ndWFzOgorICAgICAgICAgICAgICAgIGdsb2JzICs9ICIgKi1sb2NhbGUtJXMiICUgbGFuZworCisgICAgICAgIGlmIGdsb2JzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBjbWQgPSBbYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJvZS1wa2dkYXRhLXV0aWwiKSwKKyAgICAgICAgICAgICAgICItcCIsIHNlbGYuZC5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSksICJnbG9iIiwgaW5zdGFsbGVkX3BrZ3NfZmlsZSwKKyAgICAgICAgICAgICAgIGdsb2JzXQorICAgICAgICBleGNsdWRlID0gc2VsZi5kLmdldFZhcignUEFDS0FHRV9FWENMVURFX0NPTVBMRU1FTlRBUlknLCBUcnVlKQorICAgICAgICBpZiBleGNsdWRlOgorICAgICAgICAgICAgY21kLmV4dGVuZChbJy14JywgZXhjbHVkZV0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgY29tcGxlbWVudGFyeSBwYWNrYWdlcyAuLi4iKQorICAgICAgICAgICAgY29tcGxlbWVudGFyeV9wa2dzID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNvdWxkIG5vdCBjb21wdXRlIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgbGlzdC4gQ29tbWFuZCAiCisgICAgICAgICAgICAgICAgICAgICAiJyVzJyByZXR1cm5lZCAlZDpcbiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAoJyAnLmpvaW4oY21kKSwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgc2VsZi5pbnN0YWxsKGNvbXBsZW1lbnRhcnlfcGtncy5zcGxpdCgpLCBhdHRlbXB0X29ubHk9VHJ1ZSkKKworICAgIGRlZiBkZXBsb3lfZGlyX2xvY2soc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGVwbG95X2RpciBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJkZXBsb3lfZGlyIGlzIG5vdCBzZXQhIikKKworICAgICAgICBsb2NrX2ZpbGVfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsICJkZXBsb3kubG9jayIpCisKKyAgICAgICAgc2VsZi5kZXBsb3lfbG9jayA9IGJiLnV0aWxzLmxvY2tmaWxlKGxvY2tfZmlsZV9uYW1lKQorCisgICAgZGVmIGRlcGxveV9kaXJfdW5sb2NrKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRlcGxveV9sb2NrIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKHNlbGYuZGVwbG95X2xvY2spCisKKyAgICAgICAgc2VsZi5kZXBsb3lfbG9jayA9IE5vbmUKKworCitjbGFzcyBScG1QTShQYWNrYWdlTWFuYWdlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIGQsCisgICAgICAgICAgICAgICAgIHRhcmdldF9yb290ZnMsCisgICAgICAgICAgICAgICAgIHRhcmdldF92ZW5kb3IsCisgICAgICAgICAgICAgICAgIHRhc2tfbmFtZT0ndGFyZ2V0JywKKyAgICAgICAgICAgICAgICAgcHJvdmlkZW5hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgYXJjaF92YXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgb3NfdmFyPU5vbmUpOgorICAgICAgICBzdXBlcihScG1QTSwgc2VsZikuX19pbml0X18oZCkKKyAgICAgICAgc2VsZi50YXJnZXRfcm9vdGZzID0gdGFyZ2V0X3Jvb3RmcworICAgICAgICBzZWxmLnRhcmdldF92ZW5kb3IgPSB0YXJnZXRfdmVuZG9yCisgICAgICAgIHNlbGYudGFza19uYW1lID0gdGFza19uYW1lCisgICAgICAgIHNlbGYucHJvdmlkZW5hbWUgPSBwcm92aWRlbmFtZQorICAgICAgICBzZWxmLmZ1bGxwa2dsaXN0ID0gbGlzdCgpCisgICAgICAgIHNlbGYuZGVwbG95X2RpciA9IHNlbGYuZC5nZXRWYXIoJ0RFUExPWV9ESVJfUlBNJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5ldGNycG1fZGlyID0gb3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywgImV0Yy9ycG0iKQorICAgICAgICBzZWxmLmluc3RhbGxfZGlyX25hbWUgPSAib2VfaW5zdGFsbCIKKyAgICAgICAgc2VsZi5pbnN0YWxsX2Rpcl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3Rmcywgc2VsZi5pbnN0YWxsX2Rpcl9uYW1lKQorICAgICAgICBzZWxmLnJwbV9jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgInJwbSIpCisgICAgICAgIHNlbGYuc21hcnRfY21kID0gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJzbWFydCIpCisgICAgICAgIHNlbGYuc21hcnRfb3B0ID0gIi0tbG9nLWxldmVsPXdhcm5pbmcgLS1kYXRhLWRpcj0iICsgb3MucGF0aC5qb2luKHRhcmdldF9yb290ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmFyL2xpYi9zbWFydCcpCisgICAgICAgIHNlbGYuc2NyaXB0bGV0X3dyYXBwZXIgPSBzZWxmLmQuZXhwYW5kKCcke1dPUktESVJ9L3NjcmlwdGxldF93cmFwcGVyJykKKyAgICAgICAgc2VsZi5zb2x1dGlvbl9tYW5pZmVzdCA9IHNlbGYuZC5leHBhbmQoJyR7VH0vc2F2ZWQvJXNfc29sdXRpb24nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXNrX25hbWUpCisgICAgICAgIHNlbGYuc2F2ZWRfcnBtbGliID0gc2VsZi5kLmV4cGFuZCgnJHtUfS9zYXZlZC8lcycgJSBzZWxmLnRhc2tfbmFtZSkKKyAgICAgICAgc2VsZi5pbWFnZV9ycG1saWIgPSBvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAndmFyL2xpYi9ycG0nKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmQuZXhwYW5kKCcke1R9L3NhdmVkJykpOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuZC5leHBhbmQoJyR7VH0vc2F2ZWQnKSkKKworICAgICAgICBzZWxmLmluZGV4ZXIgPSBScG1JbmRleGVyKHNlbGYuZCwgc2VsZi5kZXBsb3lfZGlyKQorICAgICAgICBzZWxmLnBrZ3NfbGlzdCA9IFJwbVBrZ3NMaXN0KHNlbGYuZCwgc2VsZi50YXJnZXRfcm9vdGZzLCBhcmNoX3Zhciwgb3NfdmFyKQorICAgICAgICBzZWxmLnJwbV92ZXJzaW9uID0gc2VsZi5wa2dzX2xpc3QucnBtX3ZlcnNpb24KKworICAgICAgICBzZWxmLm1sX3ByZWZpeF9saXN0LCBzZWxmLm1sX29zX2xpc3QgPSBzZWxmLmluZGV4ZXIuZ2V0X21sX3ByZWZpeF9hbmRfb3NfbGlzdChhcmNoX3Zhciwgb3NfdmFyKQorCisgICAgZGVmIGluc2VydF9mZWVkc191cmlzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmZlZWRfdXJpcyA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgTGlzdCBtdXN0IGJlIHByZWZlcmVkIHRvIGxlYXN0IHByZWZlcnJlZCBvcmRlcgorICAgICAgICBkZWZhdWx0X3BsYXRmb3JtX2V4dHJhID0gc2V0KCkKKyAgICAgICAgcGxhdGZvcm1fZXh0cmEgPSBzZXQoKQorICAgICAgICBiYmV4dGVuZHZhcmlhbnQgPSBzZWxmLmQuZ2V0VmFyKCdCQkVYVEVORFZBUklBTlQnLCBUcnVlKSBvciAiIgorICAgICAgICBmb3IgbWxpYiBpbiBzZWxmLm1sX29zX2xpc3Q6CisgICAgICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLm1sX3ByZWZpeF9saXN0W21saWJdOgorICAgICAgICAgICAgICAgIHBsdCA9IGFyY2gucmVwbGFjZSgnLScsICdfJykgKyAnLS4qLScgKyBzZWxmLm1sX29zX2xpc3RbbWxpYl0KKyAgICAgICAgICAgICAgICBpZiBtbGliID09IGJiZXh0ZW5kdmFyaWFudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfcGxhdGZvcm1fZXh0cmEuYWRkKHBsdCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1fZXh0cmEuYWRkKHBsdCkKKworICAgICAgICBwbGF0Zm9ybV9leHRyYSA9IHBsYXRmb3JtX2V4dHJhLnVuaW9uKGRlZmF1bHRfcGxhdGZvcm1fZXh0cmEpCisKKyAgICAgICAgYXJjaF9saXN0ID0gW10KKyAgICAgICAgZm9yIGNhbm9uaWNhbF9hcmNoIGluIHBsYXRmb3JtX2V4dHJhOgorICAgICAgICAgICAgYXJjaCA9IGNhbm9uaWNhbF9hcmNoLnNwbGl0KCctJylbMF0KKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGFyY2hfbGlzdC5hcHBlbmQoYXJjaCkKKworICAgICAgICB1cmlfaXRlcmF0b3IgPSAwCisgICAgICAgIGNoYW5uZWxfcHJpb3JpdHkgPSAxMCArIDUgKiBsZW4oc2VsZi5mZWVkX3VyaXMuc3BsaXQoKSkgKiBsZW4oYXJjaF9saXN0KQorCisgICAgICAgIGZvciB1cmkgaW4gc2VsZi5mZWVkX3VyaXMuc3BsaXQoKToKKyAgICAgICAgICAgIGZ1bGxfdXJpID0gdXJpCisgICAgICAgICAgICBpZiBzZWxmLmZlZWRfcHJlZml4OgorICAgICAgICAgICAgICAgIGZ1bGxfdXJpID0gb3MucGF0aC5qb2luKHVyaSwgc2VsZi5mZWVkX3ByZWZpeCkKKyAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hfbGlzdDoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCdOb3RlOiBhZGRpbmcgU21hcnQgY2hhbm5lbCB1cmwlZCVzICglcyknICUKKyAgICAgICAgICAgICAgICAgICAgICAgICh1cmlfaXRlcmF0b3IsIGFyY2gsIGNoYW5uZWxfcHJpb3JpdHkpKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY2hhbm5lbCAtLWFkZCB1cmwlZC0lcyB0eXBlPXJwbS1tZCBiYXNldXJsPSVzLyVzIC15JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICh1cmlfaXRlcmF0b3IsIGFyY2gsIGZ1bGxfdXJpLCBhcmNoKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NoYW5uZWwgLS1zZXQgdXJsJWQtJXMgcHJpb3JpdHk9JWQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVyaV9pdGVyYXRvciwgYXJjaCwgY2hhbm5lbF9wcmlvcml0eSkpCisgICAgICAgICAgICAgICAgY2hhbm5lbF9wcmlvcml0eSAtPSA1CisgICAgICAgICAgICB1cmlfaXRlcmF0b3IgKz0gMQorCisgICAgJycnCisgICAgQ3JlYXRlIGNvbmZpZ3MgZm9yIHJwbSBhbmQgc21hcnQsIGFuZCBtdWx0aWxpYiBpcyBzdXBwb3J0ZWQKKyAgICAnJycKKyAgICBkZWYgY3JlYXRlX2NvbmZpZ3Moc2VsZik6CisgICAgICAgIHRhcmdldF9hcmNoID0gc2VsZi5kLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKQorICAgICAgICBwbGF0Zm9ybSA9ICclcyVzLSVzJyAlICh0YXJnZXRfYXJjaC5yZXBsYWNlKCctJywgJ18nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXJnZXRfdmVuZG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1sX29zX2xpc3RbJ2RlZmF1bHQnXSkKKworICAgICAgICAjIExpc3QgbXVzdCBiZSBwcmVmZXJlZCB0byBsZWFzdCBwcmVmZXJyZWQgb3JkZXIKKyAgICAgICAgZGVmYXVsdF9wbGF0Zm9ybV9leHRyYSA9IGxpc3QoKQorICAgICAgICBwbGF0Zm9ybV9leHRyYSA9IGxpc3QoKQorICAgICAgICBiYmV4dGVuZHZhcmlhbnQgPSBzZWxmLmQuZ2V0VmFyKCdCQkVYVEVORFZBUklBTlQnLCBUcnVlKSBvciAiIgorICAgICAgICBmb3IgbWxpYiBpbiBzZWxmLm1sX29zX2xpc3Q6CisgICAgICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLm1sX3ByZWZpeF9saXN0W21saWJdOgorICAgICAgICAgICAgICAgIHBsdCA9IGFyY2gucmVwbGFjZSgnLScsICdfJykgKyAnLS4qLScgKyBzZWxmLm1sX29zX2xpc3RbbWxpYl0KKyAgICAgICAgICAgICAgICBpZiBtbGliID09IGJiZXh0ZW5kdmFyaWFudDoKKyAgICAgICAgICAgICAgICAgICAgaWYgcGx0IG5vdCBpbiBkZWZhdWx0X3BsYXRmb3JtX2V4dHJhOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9wbGF0Zm9ybV9leHRyYS5hcHBlbmQocGx0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIHBsdCBub3QgaW4gcGxhdGZvcm1fZXh0cmE6CisgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9leHRyYS5hcHBlbmQocGx0KQorICAgICAgICBwbGF0Zm9ybV9leHRyYSA9IGRlZmF1bHRfcGxhdGZvcm1fZXh0cmEgKyBwbGF0Zm9ybV9leHRyYQorCisgICAgICAgIHNlbGYuX2NyZWF0ZV9jb25maWdzKHBsYXRmb3JtLCBwbGF0Zm9ybV9leHRyYSkKKworICAgIGRlZiBfaW52b2tlX3NtYXJ0KHNlbGYsIGFyZ3MpOgorICAgICAgICBjbWQgPSAiJXMgJXMgJXMiICUgKHNlbGYuc21hcnRfY21kLCBzZWxmLnNtYXJ0X29wdCwgYXJncykKKyAgICAgICAgIyBiYi5ub3RlKGNtZCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29tcGxlbWVudGFyeV9wa2dzID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgICMgYmIubm90ZShjb21wbGVtZW50YXJ5X3BrZ3MpCisgICAgICAgICAgICByZXR1cm4gY29tcGxlbWVudGFyeV9wa2dzCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNvdWxkIG5vdCBpbnZva2Ugc21hcnQuIENvbW1hbmQgIgorICAgICAgICAgICAgICAgICAgICAgIiclcycgcmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGRlZiBfc2VhcmNoX3BrZ19uYW1lX2luX2ZlZWRzKHNlbGYsIHBrZywgZmVlZF9hcmNocyk6CisgICAgICAgIGZvciBhcmNoIGluIGZlZWRfYXJjaHM6CisgICAgICAgICAgICBhcmNoID0gYXJjaC5yZXBsYWNlKCctJywgJ18nKQorICAgICAgICAgICAgcmVnZXhfbWF0Y2ggPSByZS5jb21waWxlKHIiXiVzLVteLV0qLVteLV0qQCVzJCIgJSBcCisgICAgICAgICAgICAgICAgKHJlLmVzY2FwZShwa2cpLCByZS5lc2NhcGUoYXJjaCkpKQorICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5mdWxscGtnbGlzdDoKKyAgICAgICAgICAgICAgICBpZiByZWdleF9tYXRjaC5tYXRjaChwKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBGaXJzdCBmb3VuZCBpcyBiZXN0IG1hdGNoCisgICAgICAgICAgICAgICAgICAgICMgYmIubm90ZSgnJXMgLT4gJXMnICUgKHBrZywgcGtnICsgJ0AnICsgYXJjaCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwa2cgKyAnQCcgKyBhcmNoCisKKyAgICAgICAgIyBTZWFyY2ggcHJvdmlkZXMgaWYgbm90IGZvdW5kIGJ5IHBrZ25hbWUuCisgICAgICAgIGJiLm5vdGUoJ05vdCBmb3VuZCAlcyBieSBuYW1lLCBzZWFyY2hpbmcgcHJvdmlkZXMgLi4uJyAlIHBrZykKKyAgICAgICAgY21kID0gIiVzICVzIHF1ZXJ5IC0tcHJvdmlkZXMgJXMgLS1zaG93LWZvcm1hdD0nJG5hbWUtJHZlcnNpb24nIiAlIFwKKyAgICAgICAgICAgICAgICAoc2VsZi5zbWFydF9jbWQsIHNlbGYuc21hcnRfb3B0LCBwa2cpCisgICAgICAgIGNtZCArPSAiIHwgc2VkIC1uZSAncy8gKlByb3ZpZGVzOi8vcCciCisgICAgICAgIGJiLm5vdGUoJ2NtZDogJXMnICUgY21kKQorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgIyBGb3VuZCBhIHByb3ZpZGVyCisgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgIGJiLm5vdGUoJ0ZvdW5kIHByb3ZpZGVycyBmb3IgJXM6ICVzJyAlIChwa2csIG91dHB1dCkpCisgICAgICAgICAgICBmb3IgcCBpbiBvdXRwdXQuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBmb3IgYXJjaCBpbiBmZWVkX2FyY2hzOgorICAgICAgICAgICAgICAgICAgICBhcmNoID0gYXJjaC5yZXBsYWNlKCctJywgJ18nKQorICAgICAgICAgICAgICAgICAgICBpZiBwLnJzdHJpcCgpLmVuZHN3aXRoKCdAJyArIGFyY2gpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAKKworICAgICAgICByZXR1cm4gIiIKKworICAgICcnJworICAgIFRyYW5zbGF0ZSB0aGUgT0UgbXVsdGlsaWIgZm9ybWF0IG5hbWVzIHRvIHRoZSBSUE0vU21hcnQgZm9ybWF0IG5hbWVzCisgICAgSXQgc2VhcmNoZWQgdGhlIFJQTS9TbWFydCBmb3JtYXQgbmFtZXMgaW4gcHJvYmFibGUgbXVsdGlsaWIgZmVlZHMgZmlyc3QsCisgICAgYW5kIHRoZW4gc2VhcmNoZWQgdGhlIGRlZmF1bHQgYmFzZSBmZWVkLgorICAgICcnJworICAgIGRlZiBfcGtnX3RyYW5zbGF0ZV9vZV90b19zbWFydChzZWxmLCBwa2dzLCBhdHRlbXB0X29ubHk9RmFsc2UpOgorICAgICAgICBuZXdfcGtncyA9IGxpc3QoKQorCisgICAgICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgICAgIG5ld19wa2cgPSBwa2cKKyAgICAgICAgICAgICMgU2VhcmNoIG5ld19wa2cgaW4gcHJvYmFibGUgbXVsdGlsaWJzIGZpcnN0CisgICAgICAgICAgICBmb3IgbWxpYiBpbiBzZWxmLm1sX3ByZWZpeF9saXN0OgorICAgICAgICAgICAgICAgICMgSnVtcCB0aGUgZGVmYXVsdCBhcmNocworICAgICAgICAgICAgICAgIGlmIG1saWIgPT0gJ2RlZmF1bHQnOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgc3Vic3QgPSBwa2cucmVwbGFjZShtbGliICsgJy0nLCAnJykKKyAgICAgICAgICAgICAgICAjIGlmIHRoZSBwa2cgaW4gdGhpcyBtdWx0aWxpYiBmZWVkCisgICAgICAgICAgICAgICAgaWYgc3Vic3QgIT0gcGtnOgorICAgICAgICAgICAgICAgICAgICBmZWVkX2FyY2hzID0gc2VsZi5tbF9wcmVmaXhfbGlzdFttbGliXQorICAgICAgICAgICAgICAgICAgICBuZXdfcGtnID0gc2VsZi5fc2VhcmNoX3BrZ19uYW1lX2luX2ZlZWRzKHN1YnN0LCBmZWVkX2FyY2hzKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmV3X3BrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRmFpbGVkIHRvIHRyYW5zbGF0ZSwgcGFja2FnZSBub3QgZm91bmQhCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJfbXNnID0gJyVzIG5vdCBmb3VuZCBpbiB0aGUgJXMgZmVlZHMgKCVzKS5cbicgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZywgbWxpYiwgIiAiLmpvaW4oZmVlZF9hcmNocykpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgYXR0ZW1wdF9vbmx5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycl9tc2cgKz0gIiAiLmpvaW4oc2VsZi5mdWxscGtnbGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbChlcnJfbXNnKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybihlcnJfbXNnKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BrZ3MuYXBwZW5kKG5ld19wa2cpCisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgIyBBcHBhcmVudGx5IG5vdCBhIG11bHRpbGliIHBhY2thZ2UuLi4KKyAgICAgICAgICAgIGlmIHBrZyA9PSBuZXdfcGtnOgorICAgICAgICAgICAgICAgICMgU2VhcmNoIG5ld19wa2cgaW4gZGVmYXVsdCBhcmNocworICAgICAgICAgICAgICAgIGRlZmF1bHRfYXJjaHMgPSBzZWxmLm1sX3ByZWZpeF9saXN0WydkZWZhdWx0J10KKyAgICAgICAgICAgICAgICBuZXdfcGtnID0gc2VsZi5fc2VhcmNoX3BrZ19uYW1lX2luX2ZlZWRzKHBrZywgZGVmYXVsdF9hcmNocykKKyAgICAgICAgICAgICAgICBpZiBub3QgbmV3X3BrZzoKKyAgICAgICAgICAgICAgICAgICAgZXJyX21zZyA9ICclcyBub3QgZm91bmQgaW4gdGhlIGJhc2UgZmVlZHMgKCVzKS5cbicgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCAnICcuam9pbihkZWZhdWx0X2FyY2hzKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGF0dGVtcHRfb25seToKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycl9tc2cgKz0gIiAiLmpvaW4oc2VsZi5mdWxscGtnbGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKGVycl9tc2cpCisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oZXJyX21zZykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBuZXdfcGtncy5hcHBlbmQobmV3X3BrZykKKworICAgICAgICByZXR1cm4gbmV3X3BrZ3MKKworICAgIGRlZiBfY3JlYXRlX2NvbmZpZ3Moc2VsZiwgcGxhdGZvcm0sIHBsYXRmb3JtX2V4dHJhKToKKyAgICAgICAgIyBTZXR1cCBiYXNlIHN5c3RlbSBjb25maWd1cmF0aW9uCisgICAgICAgIGJiLm5vdGUoImNvbmZpZ3VyaW5nIFJQTSBwbGF0Zm9ybSBzZXR0aW5ncyIpCisKKyAgICAgICAgIyBDb25maWd1cmUgaW50ZXJuYWwgUlBNIGVudmlyb25tZW50IHdoZW4gdXNpbmcgU21hcnQKKyAgICAgICAgb3MuZW52aXJvblsnUlBNX0VUQ1JQTSddID0gc2VsZi5ldGNycG1fZGlyCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmV0Y3JwbV9kaXIpCisKKyAgICAgICAgIyBTZXR1cCB0ZW1wb3JhcnkgZGlyZWN0b3J5IC0tIGluc3RhbGwuLi4KKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5pbnN0YWxsX2Rpcl9wYXRoKToKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmluc3RhbGxfZGlyX3BhdGgsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oc2VsZi5pbnN0YWxsX2Rpcl9wYXRoLCAndG1wJykpCisKKyAgICAgICAgY2hhbm5lbF9wcmlvcml0eSA9IDUKKyAgICAgICAgcGxhdGZvcm1fZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZXRjcnBtX2RpciwgInBsYXRmb3JtIikKKyAgICAgICAgc2Rrb3MgPSBzZWxmLmQuZ2V0VmFyKCJTREtfT1MiLCBUcnVlKQorICAgICAgICB3aXRoIG9wZW4ocGxhdGZvcm1fZGlyLCAidysiKSBhcyBwbGF0Zm9ybV9mZDoKKyAgICAgICAgICAgIHBsYXRmb3JtX2ZkLndyaXRlKHBsYXRmb3JtICsgJ1xuJykKKyAgICAgICAgICAgIGZvciBwdCBpbiBwbGF0Zm9ybV9leHRyYToKKyAgICAgICAgICAgICAgICBjaGFubmVsX3ByaW9yaXR5ICs9IDUKKyAgICAgICAgICAgICAgICBpZiBzZGtvczoKKyAgICAgICAgICAgICAgICAgICAgdG1wID0gcmUuc3ViKCItJXMkIiAlIHNka29zLCAiLSVzXG4iICUgc2Rrb3MsIHB0KQorICAgICAgICAgICAgICAgIHRtcCA9IHJlLnN1YigiLWxpbnV4LiokIiwgIi1saW51eC4qXG4iLCB0bXApCisgICAgICAgICAgICAgICAgcGxhdGZvcm1fZmQud3JpdGUodG1wKQorCisgICAgICAgICMgVGVsbCBSUE0gdGhhdCB0aGUgIi8iIGRpcmVjdG9yeSBleGlzdCBhbmQgaXMgYXZhaWxhYmxlCisgICAgICAgIGJiLm5vdGUoImNvbmZpZ3VyaW5nIFJQTSBzeXN0ZW0gcHJvdmlkZXMiKQorICAgICAgICBzeXNpbmZvX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmV0Y3JwbV9kaXIsICJzeXNpbmZvIikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHN5c2luZm9fZGlyKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHN5c2luZm9fZGlyLCAiRGlybmFtZXMiKSwgIncrIikgYXMgZGlybmFtZXM6CisgICAgICAgICAgICBkaXJuYW1lcy53cml0ZSgiL1xuIikKKworICAgICAgICBpZiBzZWxmLnByb3ZpZGVuYW1lOgorICAgICAgICAgICAgcHJvdmlkZW5hbWVfZGlyID0gb3MucGF0aC5qb2luKHN5c2luZm9fZGlyLCAiUHJvdmlkZW5hbWUiKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHByb3ZpZGVuYW1lX2Rpcik6CisgICAgICAgICAgICAgICAgcHJvdmlkZW5hbWVfY29udGVudCA9ICdcbicuam9pbihzZWxmLnByb3ZpZGVuYW1lKQorICAgICAgICAgICAgICAgIHByb3ZpZGVuYW1lX2NvbnRlbnQgKz0gJ1xuJworICAgICAgICAgICAgICAgIG9wZW4ocHJvdmlkZW5hbWVfZGlyLCAidysiKS53cml0ZShwcm92aWRlbmFtZV9jb250ZW50KQorCisgICAgICAgICMgQ29uZmlndXJlIFJQTS4uLiB3ZSBlbmZvcmNlIHRoZXNlIHNldHRpbmdzIQorICAgICAgICBiYi5ub3RlKCJjb25maWd1cmluZyBSUE0gREIgc2V0dGluZ3MiKQorICAgICAgICAjIEFmdGVyIGNoYW5nZSB0aGUgX19kYi4qIGNhY2hlIHNpemUsIGxvZyBmaWxlIHdpbGwgbm90IGJlCisgICAgICAgICMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHksIHRoYXQgd2lsbCByYWlzZSBzb21lIHdhcm5pbmdzLAorICAgICAgICAjIHNvIHRvdWNoIGEgYmFyZSBsb2cgZm9yIHJwbSB3cml0ZSBpbnRvIGl0LgorICAgICAgICBpZiBzZWxmLnJwbV92ZXJzaW9uID09IDU6CisgICAgICAgICAgICBycG1saWJfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuaW1hZ2VfcnBtbGliLCAnbG9nJywgJ2xvZy4wMDAwMDAwMDAxJykKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhycG1saWJfbG9nKToKKyAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKHNlbGYuaW1hZ2VfcnBtbGliLCAnbG9nJykpCisgICAgICAgICAgICAgICAgb3BlbihycG1saWJfbG9nLCAndysnKS5jbG9zZSgpCisKKyAgICAgICAgICAgIERCX0NPTkZJR19DT05URU5UID0gIiMgPT09PT09PT09PT09PT09PSBFbnZpcm9ubWVudFxuIiBcCisgICAgICAgICAgICAgICAgInNldF9kYXRhX2RpciAuXG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2NyZWF0ZV9kaXIgLlxuIiBcCisgICAgICAgICAgICAgICAgInNldF9sZ19kaXIgLi9sb2dcbiIgXAorICAgICAgICAgICAgICAgICJzZXRfdG1wX2RpciAuL3RtcFxuIiBcCisgICAgICAgICAgICAgICAgInNldF9mbGFncyBkYl9sb2dfYXV0b3JlbW92ZSBvblxuIiBcCisgICAgICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICAgICAgIiMgLS0gdGhyZWFkX2NvdW50IG11c3QgYmUgPj0gOFxuIiBcCisgICAgICAgICAgICAgICAgInNldF90aHJlYWRfY291bnQgNjRcbiIgXAorICAgICAgICAgICAgICAgICJcbiIgXAorICAgICAgICAgICAgICAgICIjID09PT09PT09PT09PT09PT0gTG9nZ2luZ1xuIiBcCisgICAgICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICAgICAgIiMgPT09PT09PT09PT09PT09PSBNZW1vcnkgUG9vbFxuIiBcCisgICAgICAgICAgICAgICAgInNldF9jYWNoZXNpemUgMCAxMDQ4NTc2IDBcbiIgXAorICAgICAgICAgICAgICAgICJzZXRfbXBfbW1hcHNpemUgMjY4NDM1NDU2XG4iIFwKKyAgICAgICAgICAgICAgICAiXG4iIFwKKyAgICAgICAgICAgICAgICAiIyA9PT09PT09PT09PT09PT09IExvY2tpbmdcbiIgXAorICAgICAgICAgICAgICAgICJzZXRfbGtfbWF4X2xvY2tzIDE2Mzg0XG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2xrX21heF9sb2NrZXJzIDE2Mzg0XG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2xrX21heF9vYmplY3RzIDE2Mzg0XG4iIFwKKyAgICAgICAgICAgICAgICAibXV0ZXhfc2V0X21heCAxNjM4NDBcbiIgXAorICAgICAgICAgICAgICAgICJcbiIgXAorICAgICAgICAgICAgICAgICIjID09PT09PT09PT09PT09PT0gUmVwbGljYXRpb25cbiIKKworICAgICAgICAgICAgZGJfY29uZmlnX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmltYWdlX3JwbWxpYiwgJ0RCX0NPTkZJRycpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGJfY29uZmlnX2Rpcik6CisgICAgICAgICAgICAgICAgb3BlbihkYl9jb25maWdfZGlyLCAndysnKS53cml0ZShEQl9DT05GSUdfQ09OVEVOVCkKKworICAgICAgICAjIENyZWF0ZSBkYXRhYmFzZSBzbyB0aGF0IHNtYXJ0IGRvZXNuJ3QgY29tcGxhaW4gKGxhenkgaW5pdCkKKyAgICAgICAgb3B0ID0gIi1xYSIKKyAgICAgICAgaWYgc2VsZi5ycG1fdmVyc2lvbiA9PSA0OgorICAgICAgICAgICAgb3B0ID0gIi0taW5pdGRiIgorICAgICAgICBjbWQgPSAiJXMgLS1yb290ICVzIC0tZGJwYXRoIC92YXIvbGliL3JwbSAlcyA+IC9kZXYvbnVsbCIgJSAoCisgICAgICAgICAgICAgIHNlbGYucnBtX2NtZCwgc2VsZi50YXJnZXRfcm9vdGZzLCBvcHQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDcmVhdGUgcnBtIGRhdGFiYXNlIGZhaWxlZC4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorICAgICAgICAjIEltcG9ydCBHUEcga2V5IHRvIFJQTSBkYXRhYmFzZSBvZiB0aGUgdGFyZ2V0IHN5c3RlbQorICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdSUE1fU0lHTl9QQUNLQUdFUycsIFRydWUpID09ICcxJzoKKyAgICAgICAgICAgIHB1YmtleV9wYXRoID0gc2VsZi5kLmdldFZhcignUlBNX0dQR19QVUJLRVknLCBUcnVlKQorICAgICAgICAgICAgY21kID0gIiVzIC0tcm9vdCAlcyAtLWRicGF0aCAvdmFyL2xpYi9ycG0gLS1pbXBvcnQgJXMgPiAvZGV2L251bGwiICUgKAorICAgICAgICAgICAgICAgICAgc2VsZi5ycG1fY21kLCBzZWxmLnRhcmdldF9yb290ZnMsIHB1YmtleV9wYXRoKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisKKyAgICAgICAgIyBDb25maWd1cmUgc21hcnQKKyAgICAgICAgYmIubm90ZSgiY29uZmlndXJpbmcgU21hcnQgc2V0dGluZ3MiKQorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywgJ3Zhci9saWIvc21hcnQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1yb290PSVzJyAlIHNlbGYudGFyZ2V0X3Jvb3RmcykKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLWRicGF0aD0vdmFyL2xpYi9ycG0nKQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tZXh0cmEtbWFjcm9zLl92YXI9JXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ2xvY2Fsc3RhdGVkaXInLCBUcnVlKSkKKyAgICAgICAgY21kID0gImNvbmZpZyAtLXNldCBycG0tZXh0cmEtbWFjcm9zLl90bXBwYXRoPS8lcy90bXAiICUgKHNlbGYuaW5zdGFsbF9kaXJfbmFtZSkKKworICAgICAgICBwcmVmZXJfY29sb3IgPSBzZWxmLmQuZ2V0VmFyKCdSUE1fUFJFRkVSX0VMRl9BUkNIJywgVHJ1ZSkKKyAgICAgICAgaWYgcHJlZmVyX2NvbG9yOgorICAgICAgICAgICAgaWYgcHJlZmVyX2NvbG9yIG5vdCBpbiBbJzAnLCAnMScsICcyJywgJzQnXToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiSW52YWxpZCBSUE1fUFJFRkVSX0VMRl9BUkNIOiAlcywgaXQgc2hvdWxkIGJlIG9uZSBvZjpcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdDE6IEVMRjMyIHdpbnNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdDI6IEVMRjY0IHdpbnNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdDQ6IEVMRjY0IE4zMiB3aW5zIChtaXBzNjQgb3IgbWlwczY0ZWwgb25seSkiICUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWZlcl9jb2xvcikKKyAgICAgICAgICAgIGlmIHByZWZlcl9jb2xvciA9PSAiNCIgYW5kIHNlbGYuZC5nZXRWYXIoIlRVTkVfQVJDSCIsIFRydWUpIG5vdCBpbiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ21pcHM2NCcsICdtaXBzNjRlbCddOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJSUE1fUFJFRkVSX0VMRl9BUkNIID0gXCI0XCIgaXMgZm9yIG1pcHM2NCBvciBtaXBzNjRlbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm9ubHkuIikKKyAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1leHRyYS1tYWNyb3MuX3ByZWZlcl9jb2xvcj0lcycKKyAgICAgICAgICAgICAgICAgICAgICAgICUgcHJlZmVyX2NvbG9yKQorCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydChjbWQpCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1pZ25vcmVzaXplPTEnKQorCisgICAgICAgICMgV3JpdGUgY29tbW9uIGNvbmZpZ3VyYXRpb24gZm9yIGhvc3QgYW5kIHRhcmdldCB1c2FnZQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tbm9saW5rdG9zPTEnKQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tbm9wYXJlbnRkaXJzPTEnKQorICAgICAgICBjaGVja19zaWduYXR1cmUgPSBzZWxmLmQuZ2V0VmFyKCdSUE1fQ0hFQ0tfU0lHTkFUVVJFUycsIFRydWUpCisgICAgICAgIGlmIGNoZWNrX3NpZ25hdHVyZSBhbmQgY2hlY2tfc2lnbmF0dXJlLnN0cmlwKCkgPT0gIjAiOgorICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLWNoZWNrLXNpZ25hdHVyZXM9ZmFsc2UnKQorICAgICAgICBmb3IgaSBpbiBzZWxmLmQuZ2V0VmFyKCdCQURfUkVDT01NRU5EQVRJT05TJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnZmxhZyAtLXNldCBpZ25vcmUtcmVjb21tZW5kcyAlcycgJSBpKQorCisgICAgICAgICMgRG8gdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBoZXJlLCB0byBhdm9pZCB0aGVtIGJlaW5nCisgICAgICAgICMgc2F2ZWQgZm9yIGZpZWxkIHVwZ3JhZGUKKyAgICAgICAgaWYgc2VsZi5kLmdldFZhcignTk9fUkVDT01NRU5EQVRJT05TJywgVHJ1ZSkuc3RyaXAoKSA9PSAiMSI6CisgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBpZ25vcmUtYWxsLXJlY29tbWVuZHM9MScpCisgICAgICAgIHBrZ19leGNsdWRlID0gc2VsZi5kLmdldFZhcignUEFDS0FHRV9FWENMVURFJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgZm9yIGkgaW4gcGtnX2V4Y2x1ZGUuc3BsaXQoKToKKyAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnZmxhZyAtLXNldCBleGNsdWRlLXBhY2thZ2VzICVzJyAlIGkpCisKKyAgICAgICAgIyBPcHRpb25hbCBkZWJ1Z2dpbmcKKyAgICAgICAgIyBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tbG9nLWxldmVsPWRlYnVnJykKKyAgICAgICAgIyBjbWQgPSAnY29uZmlnIC0tc2V0IHJwbS1sb2ctZmlsZT0vdG1wL3NtYXJ0LWRlYnVnLWxvZ2ZpbGUnCisgICAgICAgICMgc2VsZi5faW52b2tlX3NtYXJ0KGNtZCkKKyAgICAgICAgY2hfYWxyZWFkeV9hZGRlZCA9IFtdCisgICAgICAgIGZvciBjYW5vbmljYWxfYXJjaCBpbiBwbGF0Zm9ybV9leHRyYToKKyAgICAgICAgICAgIGFyY2ggPSBjYW5vbmljYWxfYXJjaC5zcGxpdCgnLScpWzBdCisgICAgICAgICAgICBhcmNoX2NoYW5uZWwgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoYXJjaF9jaGFubmVsKSBhbmQgbm90IGFyY2ggaW4gY2hfYWxyZWFkeV9hZGRlZDoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCdOb3RlOiBhZGRpbmcgU21hcnQgY2hhbm5lbCAlcyAoJXMpJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAoYXJjaCwgY2hhbm5lbF9wcmlvcml0eSkpCisgICAgICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tYWRkICVzIHR5cGU9cnBtLW1kIGJhc2V1cmw9JXMgLXknCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGFyY2gsIGFyY2hfY2hhbm5lbCkpCisgICAgICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tc2V0ICVzIHByaW9yaXR5PSVkJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmNoLCBjaGFubmVsX3ByaW9yaXR5KSkKKyAgICAgICAgICAgICAgICBjaGFubmVsX3ByaW9yaXR5IC09IDUKKworICAgICAgICAgICAgICAgIGNoX2FscmVhZHlfYWRkZWQuYXBwZW5kKGFyY2gpCisKKyAgICAgICAgYmIubm90ZSgnYWRkaW5nIFNtYXJ0IFJQTSBEQiBjaGFubmVsJykKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tYWRkIHJwbXN5cyB0eXBlPXJwbS1zeXMgLXknKQorCisgICAgICAgICMgQ29uc3RydWN0IGluc3RhbGwgc2NyaXB0bGV0IHdyYXBwZXIuCisgICAgICAgICMgU2NyaXB0cyBuZWVkIHRvIGJlIG9yZGVyZWQgd2hlbiBleGVjdXRlZCwgdGhpcyBlbnN1cmVzIG51bWVyaWMgb3JkZXIuCisgICAgICAgICMgSWYgd2UgZXZlciBydW4gaW50byBuZWVkaW5nIG1vcmUgdGhlIDg5OSBzY3JpcHRzLCB3ZSdsbCBoYXZlIHRvLgorICAgICAgICAjIGNoYW5nZSBudW0gdG8gc3RhcnQgd2l0aCAxMDAwLgorICAgICAgICAjCisgICAgICAgIGlmIHNlbGYucnBtX3ZlcnNpb24gPT0gNDoKKyAgICAgICAgICAgIHNjcmlwdGxldGNtZCA9ICIkMiAkMyAkNFxuIgorICAgICAgICAgICAgc2NyaXB0cGF0aCA9ICIkMyIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNjcmlwdGxldGNtZCA9ICIkMiAkMS8kMyAkNFxuIgorICAgICAgICAgICAgc2NyaXB0cGF0aCA9ICIkMS8kMyIKKworICAgICAgICBTQ1JJUFRMRVRfRk9STUFUID0gIiMhL2Jpbi9iYXNoXG4iIFwKKyAgICAgICAgICAgICJcbiIgXAorICAgICAgICAgICAgImV4cG9ydCBQQVRIPSVzXG4iIFwKKyAgICAgICAgICAgICJleHBvcnQgRD0lc1xuIiBcCisgICAgICAgICAgICAnZXhwb3J0IE9GRkxJTkVfUk9PVD0iJEQiXG4nIFwKKyAgICAgICAgICAgICdleHBvcnQgSVBLR19PRkZMSU5FX1JPT1Q9IiREIlxuJyBcCisgICAgICAgICAgICAnZXhwb3J0IE9QS0dfT0ZGTElORV9ST09UPSIkRCJcbicgXAorICAgICAgICAgICAgImV4cG9ydCBJTlRFUkNFUFRfRElSPSVzXG4iIFwKKyAgICAgICAgICAgICJleHBvcnQgTkFUSVZFX1JPT1Q9JXNcbiIgXAorICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICArIHNjcmlwdGxldGNtZCArIFwKKyAgICAgICAgICAgICJpZiBbICQ/IC1uZSAwIF07IHRoZW5cbiIgXAorICAgICAgICAgICAgIiAgaWYgWyAkNCAtZXEgMSBdOyB0aGVuXG4iIFwKKyAgICAgICAgICAgICIgICAgbWtkaXIgLXAgJDEvZXRjL3JwbS1wb3N0aW5zdHNcbiIgXAorICAgICAgICAgICAgIiAgICBudW09MTAwXG4iIFwKKyAgICAgICAgICAgICIgICAgd2hpbGUgWyAtZSAkMS9ldGMvcnBtLXBvc3RpbnN0cy8ke251bX0tKiBdOyBkbyBudW09JCgobnVtICsgMSkpOyBkb25lXG4iIFwKKyAgICAgICAgICAgICIgICAgbmFtZT1gaGVhZCAtMSAiICsgc2NyaXB0cGF0aCArICIgfCBjdXQgLWRcJyBcJyAtZiAyYFxuIiBcCisgICAgICAgICAgICAnICAgIGVjaG8gIiMhJDIiID4gJDEvZXRjL3JwbS1wb3N0aW5zdHMvJHtudW19LSR7bmFtZX1cbicgXAorICAgICAgICAgICAgJyAgICBlY2hvICIjIEFyZzogJDQiID4+ICQxL2V0Yy9ycG0tcG9zdGluc3RzLyR7bnVtfS0ke25hbWV9XG4nIFwKKyAgICAgICAgICAgICIgICAgY2F0ICIgKyBzY3JpcHRwYXRoICsgIiA+PiAkMS9ldGMvcnBtLXBvc3RpbnN0cy8ke251bX0tJHtuYW1lfVxuIiBcCisgICAgICAgICAgICAiICAgIGNobW9kICt4ICQxL2V0Yy9ycG0tcG9zdGluc3RzLyR7bnVtfS0ke25hbWV9XG4iIFwKKyAgICAgICAgICAgICIgIGVsc2VcbiIgXAorICAgICAgICAgICAgJyAgICBlY2hvICJFcnJvcjogcHJlL3Bvc3QgcmVtb3ZlIHNjcmlwdGxldCBmYWlsZWQiXG4nIFwKKyAgICAgICAgICAgICIgIGZpXG4iIFwKKyAgICAgICAgICAgICJmaVxuIgorCisgICAgICAgIGludGVyY2VwdF9kaXIgPSBzZWxmLmQuZXhwYW5kKCcke1dPUktESVJ9L2ludGVyY2VwdF9zY3JpcHRzJykKKyAgICAgICAgbmF0aXZlX3Jvb3QgPSBzZWxmLmQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9OQVRJVkUnLCBUcnVlKQorICAgICAgICBzY3JpcHRsZXRfY29udGVudCA9IFNDUklQVExFVF9GT1JNQVQgJSAob3MuZW52aXJvblsnUEFUSCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXJnZXRfcm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJjZXB0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9yb290KQorICAgICAgICBvcGVuKHNlbGYuc2NyaXB0bGV0X3dyYXBwZXIsICd3KycpLndyaXRlKHNjcmlwdGxldF9jb250ZW50KQorCisgICAgICAgIGJiLm5vdGUoIk5vdGU6IGNvbmZpZ3VyaW5nIFJQTSBjcm9zcy1pbnN0YWxsIHNjcmlwdGxldF93cmFwcGVyIikKKyAgICAgICAgb3MuY2htb2Qoc2VsZi5zY3JpcHRsZXRfd3JhcHBlciwgMDc1NSkKKyAgICAgICAgY21kID0gJ2NvbmZpZyAtLXNldCBycG0tZXh0cmEtbWFjcm9zLl9jcm9zc19zY3JpcHRsZXRfd3JhcHBlcj0lcycgJSBcCisgICAgICAgICAgICAgIHNlbGYuc2NyaXB0bGV0X3dyYXBwZXIKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KGNtZCkKKworICAgICAgICAjIERlYnVnIHRvIHNob3cgc21hcnQgY29uZmlnIGluZm8KKyAgICAgICAgIyBiYi5ub3RlKHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2hvdycpKQorCisgICAgZGVmIHVwZGF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCd1cGRhdGUgcnBtc3lzJykKKworICAgICcnJworICAgIEluc3RhbGwgcGtncyB3aXRoIHNtYXJ0LCB0aGUgcGtnIG5hbWUgaXMgb2UgZm9ybWF0CisgICAgJycnCisgICAgZGVmIGluc3RhbGwoc2VsZiwgcGtncywgYXR0ZW1wdF9vbmx5PUZhbHNlKToKKworICAgICAgICBpZiBub3QgcGtnczoKKyAgICAgICAgICAgIGJiLm5vdGUoIlRoZXJlIGFyZSBubyBwYWNrYWdlcyB0byBpbnN0YWxsIikKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIHRoZSBmb2xsb3dpbmcgcGFja2FnZXM6ICVzIiAlICcgJy5qb2luKHBrZ3MpKQorICAgICAgICBwa2dzID0gc2VsZi5fcGtnX3RyYW5zbGF0ZV9vZV90b19zbWFydChwa2dzLCBhdHRlbXB0X29ubHkpCisKKyAgICAgICAgaWYgbm90IGF0dGVtcHRfb25seToKKyAgICAgICAgICAgIGJiLm5vdGUoJ3RvIGJlIGluc3RhbGxlZDogJXMnICUgJyAnLmpvaW4ocGtncykpCisgICAgICAgICAgICBjbWQgPSAiJXMgJXMgaW5zdGFsbCAteSAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAoc2VsZi5zbWFydF9jbWQsIHNlbGYuc21hcnRfb3B0LCAnICcuam9pbihwa2dzKSkKKyAgICAgICAgICAgIGJiLm5vdGUoY21kKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIubm90ZSgnaW5zdGFsbGluZyBhdHRlbXB0IG9ubHkgcGFja2FnZXMuLi4nKQorICAgICAgICAgICAgYmIubm90ZSgnQXR0ZW1wdGluZyAlcycgJSAnICcuam9pbihwa2dzKSkKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBpbnN0YWxsIC0tYXR0ZW1wdCAteSAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAoc2VsZi5zbWFydF9jbWQsIHNlbGYuc21hcnRfb3B0LCAnICcuam9pbihwa2dzKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgIGJiLm5vdGUob3V0cHV0KQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gaW5zdGFsbCBwYWNrYWdlcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgJycnCisgICAgUmVtb3ZlIHBrZ3Mgd2l0aCBzbWFydCwgdGhlIHBrZyBuYW1lIGlzIHNtYXJ0L3JwbSBmb3JtYXQKKyAgICAnJycKKyAgICBkZWYgcmVtb3ZlKHNlbGYsIHBrZ3MsIHdpdGhfZGVwZW5kZW5jaWVzPVRydWUpOgorICAgICAgICBiYi5ub3RlKCd0byBiZSByZW1vdmVkOiAnICsgJyAnLmpvaW4ocGtncykpCisKKyAgICAgICAgaWYgbm90IHdpdGhfZGVwZW5kZW5jaWVzOgorICAgICAgICAgICAgY21kID0gIiVzIC1lIC0tbm9kZXBzICIgJSBzZWxmLnJwbV9jbWQKKyAgICAgICAgICAgIGNtZCArPSAiLS1yb290PSVzICIgJSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgICAgIGNtZCArPSAiLS1kYnBhdGg9L3Zhci9saWIvcnBtICIKKyAgICAgICAgICAgIGNtZCArPSAiLS1kZWZpbmU9J19jcm9zc19zY3JpcHRsZXRfd3JhcHBlciAlcycgIiAlIFwKKyAgICAgICAgICAgICAgICAgICBzZWxmLnNjcmlwdGxldF93cmFwcGVyCisgICAgICAgICAgICBjbWQgKz0gIi0tZGVmaW5lPSdfdG1wcGF0aCAvJXMvdG1wJyAlcyIgJSAoc2VsZi5pbnN0YWxsX2Rpcl9uYW1lLCAnICcuam9pbihwa2dzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICAgICAgIyAgIGJiLm5vdGUoJ0RlYnVnOiBXaGF0IHJlcXVpcmVkOiAlcycgJSBwa2cpCisgICAgICAgICAgICAjICAgYmIubm90ZShzZWxmLl9pbnZva2Vfc21hcnQoJ3F1ZXJ5ICVzIC0tc2hvdy1yZXF1aXJlZGJ5JyAlIHBrZykpCisKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyByZW1vdmUgLXkgJXMiICUgKHNlbGYuc21hcnRfY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zbWFydF9vcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICcuam9pbihwa2dzKSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ub3RlKGNtZCkKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgYmIubm90ZShvdXRwdXQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIubm90ZSgiVW5hYmxlIHRvIHJlbW92ZSBwYWNrYWdlcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBkZWYgdXBncmFkZShzZWxmKToKKyAgICAgICAgYmIubm90ZSgnc21hcnQgdXBncmFkZScpCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgndXBncmFkZScpCisKKyAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW5kZXhlci53cml0ZV9pbmRleCgpCisKKyAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYmIuZmF0YWwocmVzdWx0KQorCisgICAgZGVmIHJlbW92ZV9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuaW1hZ2VfcnBtbGliLCBUcnVlKQorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywgJ3Zhci9saWIvc21hcnQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAndmFyL2xpYi9vcGtnJyksIFRydWUpCisKKyAgICAgICAgIyByZW1vdmUgdGVtcCBkaXJlY3RvcnkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuaW5zdGFsbF9kaXJfcGF0aCwgVHJ1ZSkKKworICAgIGRlZiBiYWNrdXBfcGFja2FnaW5nX2RhdGEoc2VsZik6CisgICAgICAgICMgU2F2ZSB0aGUgcnBtbGliIGZvciBpbmNyZW1lbnQgcnBtIGltYWdlIGdlbmVyYXRpb24KKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5zYXZlZF9ycG1saWIpOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuc2F2ZWRfcnBtbGliLCBUcnVlKQorICAgICAgICBzaHV0aWwuY29weXRyZWUoc2VsZi5pbWFnZV9ycG1saWIsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNhdmVkX3JwbWxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPVRydWUpCisKKyAgICBkZWYgcmVjb3ZlcnlfcGFja2FnaW5nX2RhdGEoc2VsZik6CisgICAgICAgICMgTW92ZSB0aGUgcnBtbGliIGJhY2sKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5zYXZlZF9ycG1saWIpOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5pbWFnZV9ycG1saWIpOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmltYWdlX3JwbWxpYiwgVHJ1ZSkKKworICAgICAgICAgICAgYmIubm90ZSgnUmVjb3ZlcnkgcGFja2FnaW5nIGRhdGEnKQorICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNlbGYuc2F2ZWRfcnBtbGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2VfcnBtbGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPVRydWUpCisKKyAgICBkZWYgbGlzdF9pbnN0YWxsZWQoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5wa2dzX2xpc3QubGlzdChmb3JtYXQpCisKKyAgICAnJycKKyAgICBJZiBpbmNyZW1lbnRhbCBpbnN0YWxsLCB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGF0IHdlJ3ZlIGdvdCwKKyAgICB3aGF0IHdlIG5lZWQgdG8gYWRkLCBhbmQgd2hhdCB0byByZW1vdmUuLi4KKyAgICBUaGUgZHVtcF9pbnN0YWxsX3NvbHV0aW9uIHdpbGwgZHVtcCBhbmQgc2F2ZSB0aGUgbmV3IGluc3RhbGwKKyAgICBzb2x1dGlvbi4KKyAgICAnJycKKyAgICBkZWYgZHVtcF9pbnN0YWxsX3NvbHV0aW9uKHNlbGYsIHBrZ3MpOgorICAgICAgICBiYi5ub3RlKCdjcmVhdGluZyBuZXcgaW5zdGFsbCBzb2x1dGlvbiBmb3IgaW5jcmVtZW50YWwgaW5zdGFsbCcpCisgICAgICAgIGlmIGxlbihwa2dzKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcGtncyA9IHNlbGYuX3BrZ190cmFuc2xhdGVfb2VfdG9fc21hcnQocGtncywgRmFsc2UpCisgICAgICAgIGluc3RhbGxfcGtncyA9IGxpc3QoKQorCisgICAgICAgIGNtZCA9ICIlcyAlcyBpbnN0YWxsIC15IC0tZHVtcCAlcyAyPiVzIiAlICBcCisgICAgICAgICAgICAgIChzZWxmLnNtYXJ0X2NtZCwKKyAgICAgICAgICAgICAgIHNlbGYuc21hcnRfb3B0LAorICAgICAgICAgICAgICAgJyAnLmpvaW4ocGtncyksCisgICAgICAgICAgICAgICBzZWxmLnNvbHV0aW9uX21hbmlmZXN0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIERpc2FibGUgcnBtc3lzIGNoYW5uZWwgZm9yIHRoZSBmYWtlIGluc3RhbGwKKyAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY2hhbm5lbCAtLWRpc2FibGUgcnBtc3lzJykKKworICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5zb2x1dGlvbl9tYW5pZmVzdCwgJ3InKSBhcyBtYW5pZmVzdDoKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIG1hbmlmZXN0LnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgaWYgJ0AnIGluIHBrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxfcGtncy5hcHBlbmQocGtnKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLm5vdGUoIlVuYWJsZSB0byBkdW1wIGluc3RhbGwgcGFja2FnZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorICAgICAgICAjIFJlY292ZXJ5IHJwbXN5cyBjaGFubmVsCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY2hhbm5lbCAtLWVuYWJsZSBycG1zeXMnKQorICAgICAgICByZXR1cm4gaW5zdGFsbF9wa2dzCisKKyAgICAnJycKKyAgICBJZiBpbmNyZW1lbnRhbCBpbnN0YWxsLCB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGF0IHdlJ3ZlIGdvdCwKKyAgICB3aGF0IHdlIG5lZWQgdG8gYWRkLCBhbmQgd2hhdCB0byByZW1vdmUuLi4KKyAgICBUaGUgbG9hZF9vbGRfaW5zdGFsbF9zb2x1dGlvbiB3aWxsIGxvYWQgdGhlIHByZXZpb3VzIGluc3RhbGwKKyAgICBzb2x1dGlvbgorICAgICcnJworICAgIGRlZiBsb2FkX29sZF9pbnN0YWxsX3NvbHV0aW9uKHNlbGYpOgorICAgICAgICBiYi5ub3RlKCdsb2FkIG9sZCBpbnN0YWxsIHNvbHV0aW9uIGZvciBpbmNyZW1lbnRhbCBpbnN0YWxsJykKKyAgICAgICAgaW5zdGFsbGVkX3BrZ3MgPSBsaXN0KCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuc29sdXRpb25fbWFuaWZlc3QpOgorICAgICAgICAgICAgYmIubm90ZSgnb2xkIGluc3RhbGwgc29sdXRpb24gbm90IGV4aXN0JykKKyAgICAgICAgICAgIHJldHVybiBpbnN0YWxsZWRfcGtncworCisgICAgICAgIHdpdGggb3BlbihzZWxmLnNvbHV0aW9uX21hbmlmZXN0LCAncicpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgZm9yIHBrZyBpbiBtYW5pZmVzdC5yZWFkKCkuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgaWYgJ0AnIGluIHBrZzoKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkX3BrZ3MuYXBwZW5kKHBrZy5zdHJpcCgpKQorCisgICAgICAgIHJldHVybiBpbnN0YWxsZWRfcGtncworCisgICAgJycnCisgICAgRHVtcCBhbGwgYXZhaWxhYmxlIHBhY2thZ2VzIGluIGZlZWRzLCBpdCBzaG91bGQgYmUgaW52b2tlZCBhZnRlciB0aGUKKyAgICBuZXdlc3QgcnBtIGluZGV4IHdhcyBjcmVhdGVkCisgICAgJycnCisgICAgZGVmIGR1bXBfYWxsX2F2YWlsYWJsZV9wa2dzKHNlbGYpOgorICAgICAgICBhdmFpbGFibGVfbWFuaWZlc3QgPSBzZWxmLmQuZXhwYW5kKCcke1R9L3NhdmVkL2F2YWlsYWJsZV9wa2dzLnR4dCcpCisgICAgICAgIGF2YWlsYWJsZV9wa2dzID0gbGlzdCgpCisgICAgICAgIGNtZCA9ICIlcyAlcyBxdWVyeSAtLW91dHB1dCAlcyIgJSAgXAorICAgICAgICAgICAgICAoc2VsZi5zbWFydF9jbWQsIHNlbGYuc21hcnRfb3B0LCBhdmFpbGFibGVfbWFuaWZlc3QpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgd2l0aCBvcGVuKGF2YWlsYWJsZV9tYW5pZmVzdCwgJ3InKSBhcyBtYW5pZmVzdDoKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIG1hbmlmZXN0LnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgaWYgJ0AnIGluIHBrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZV9wa2dzLmFwcGVuZChwa2cuc3RyaXAoKSkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5ub3RlKCJVbmFibGUgdG8gbGlzdCBhbGwgYXZhaWxhYmxlIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICBzZWxmLmZ1bGxwa2dsaXN0ID0gYXZhaWxhYmxlX3BrZ3MKKworICAgICAgICByZXR1cm4KKworICAgIGRlZiBzYXZlX3JwbXBvc3RpbnN0KHNlbGYsIHBrZyk6CisgICAgICAgIG1saWJzID0gKHNlbGYuZC5nZXRWYXIoJ01VTFRJTElCX0dMT0JBTF9WQVJJQU5UUycsIEZhbHNlKSBvciAiIikuc3BsaXQoKQorCisgICAgICAgIG5ld19wa2cgPSBwa2cKKyAgICAgICAgIyBSZW1vdmUgYW55IG11bHRpbGliIHByZWZpeCBmcm9tIHRoZSBwYWNrYWdlIG5hbWUKKyAgICAgICAgZm9yIG1saWIgaW4gbWxpYnM6CisgICAgICAgICAgICBpZiBtbGliIGluIHBrZzoKKyAgICAgICAgICAgICAgICBuZXdfcGtnID0gcGtnLnJlcGxhY2UobWxpYiArICctJywgJycpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBiYi5ub3RlKCcgICogcG9zdHBvbmluZyAlcycgJSBuZXdfcGtnKQorICAgICAgICBzYXZlZF9kaXIgPSBzZWxmLnRhcmdldF9yb290ZnMgKyBzZWxmLmQuZXhwYW5kKCcke3N5c2NvbmZkaXJ9L3JwbS1wb3N0aW5zdHMvJykgKyBuZXdfcGtnCisKKyAgICAgICAgY21kID0gc2VsZi5ycG1fY21kICsgJyAtcSAtLXNjcmlwdHMgLS1yb290ICcgKyBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgY21kICs9ICcgLS1kYnBhdGg9L3Zhci9saWIvcnBtICcgKyBuZXdfcGtnCisgICAgICAgIGNtZCArPSAnIHwgc2VkIC1uIC1lICIvXnBvc3RpbnN0YWxsIHNjcmlwdGxldCAodXNpbmcgLiopOiQvLC9eLiogc2NyaXB0bGV0ICh1c2luZyAuKik6JC8gey8uKi9wfSInCisgICAgICAgIGNtZCArPSAnIHwgc2VkIC1lICIvcG9zdGluc3RhbGwgc2NyaXB0bGV0ICh1c2luZyBcKC4qXCkpOiQvZCInCisgICAgICAgIGNtZCArPSAnIC1lICIvXi4qIHNjcmlwdGxldCAodXNpbmcgLiopOiQvZCIgPiAlcycgJSBzYXZlZF9kaXIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ub3RlKGNtZCkKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKS5zdHJpcCgpCisgICAgICAgICAgICBiYi5ub3RlKG91dHB1dCkKKyAgICAgICAgICAgIG9zLmNobW9kKHNhdmVkX2RpciwgMDc1NSkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiSW52b2tlIHNhdmVfcnBtcG9zdGluc3QgZmFpbGVkLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAnJydXcml0ZSBjb21tb24gY29uZmlndXJhdGlvbiBmb3IgdGFyZ2V0IHVzYWdlJycnCisgICAgZGVmIHJwbV9zZXR1cF9zbWFydF90YXJnZXRfY29uZmlnKHNlbGYpOgorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywgJ3Zhci9saWIvc21hcnQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCisKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLW5vbGlua3Rvcz0xJykKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLW5vcGFyZW50ZGlycz0xJykKKyAgICAgICAgZm9yIGkgaW4gc2VsZi5kLmdldFZhcignQkFEX1JFQ09NTUVOREFUSU9OUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2ZsYWcgLS1zZXQgaWdub3JlLXJlY29tbWVuZHMgJXMnICUgaSkKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tYWRkIHJwbXN5cyB0eXBlPXJwbS1zeXMgLXknKQorCisgICAgJycnCisgICAgVGhlIHJwbSBkYiBsb2NrIGZpbGVzIHdlcmUgcHJvZHVjZWQgYWZ0ZXIgaW52b2tpbmcgcnBtIHRvIHF1ZXJ5IG9uCisgICAgYnVpbGQgc3lzdGVtLCBhbmQgdGhleSBjYXVzZWQgdGhlIHJwbSBvbiB0YXJnZXQgZGlkbid0IHdvcmssIHNvIHdlCisgICAgbmVlZCB0byB1bmxvY2sgdGhlIHJwbSBkYiBieSByZW1vdmluZyB0aGUgbG9jayBmaWxlcy4KKyAgICAnJycKKyAgICBkZWYgdW5sb2NrX3JwbV9kYihzZWxmKToKKyAgICAgICAgIyBSZW1vdmUgcnBtIGRiIGxvY2sgZmlsZXMKKyAgICAgICAgcnBtX2RiX2xvY2tzID0gZ2xvYi5nbG9iKCclcy92YXIvbGliL3JwbS9fX2RiLionICUgc2VsZi50YXJnZXRfcm9vdGZzKQorICAgICAgICBmb3IgZiBpbiBycG1fZGJfbG9ja3M6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoZiwgVHJ1ZSkKKworCitjbGFzcyBPcGtnUE0oUGFja2FnZU1hbmFnZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCB0YXJnZXRfcm9vdGZzLCBjb25maWdfZmlsZSwgYXJjaHMsIHRhc2tfbmFtZT0ndGFyZ2V0Jyk6CisgICAgICAgIHN1cGVyKE9wa2dQTSwgc2VsZikuX19pbml0X18oZCkKKworICAgICAgICBzZWxmLnRhcmdldF9yb290ZnMgPSB0YXJnZXRfcm9vdGZzCisgICAgICAgIHNlbGYuY29uZmlnX2ZpbGUgPSBjb25maWdfZmlsZQorICAgICAgICBzZWxmLnBrZ19hcmNocyA9IGFyY2hzCisgICAgICAgIHNlbGYudGFza19uYW1lID0gdGFza19uYW1lCisKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyID0gc2VsZi5kLmdldFZhcigiREVQTE9ZX0RJUl9JUEsiLCBUcnVlKQorICAgICAgICBzZWxmLmRlcGxveV9sb2NrX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCAiZGVwbG95LmxvY2siKQorICAgICAgICBzZWxmLm9wa2dfY21kID0gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJvcGtnIikKKyAgICAgICAgc2VsZi5vcGtnX2FyZ3MgPSAiLS12b2xhdGlsZS1jYWNoZSAtZiAlcyAtbyAlcyAiICUgKHNlbGYuY29uZmlnX2ZpbGUsIHRhcmdldF9yb290ZnMpCisgICAgICAgIHNlbGYub3BrZ19hcmdzICs9IHNlbGYuZC5nZXRWYXIoIk9QS0dfQVJHUyIsIFRydWUpCisKKyAgICAgICAgb3BrZ19saWJfZGlyID0gc2VsZi5kLmdldFZhcignT1BLR0xJQkRJUicsIFRydWUpCisgICAgICAgIGlmIG9wa2dfbGliX2RpclswXSA9PSAiLyI6CisgICAgICAgICAgICBvcGtnX2xpYl9kaXIgPSBvcGtnX2xpYl9kaXJbMTpdCisKKyAgICAgICAgc2VsZi5vcGtnX2RpciA9IG9zLnBhdGguam9pbih0YXJnZXRfcm9vdGZzLCBvcGtnX2xpYl9kaXIsICJvcGtnIikKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5vcGtnX2RpcikKKworICAgICAgICBzZWxmLnNhdmVkX29wa2dfZGlyID0gc2VsZi5kLmV4cGFuZCgnJHtUfS9zYXZlZC8lcycgJSBzZWxmLnRhc2tfbmFtZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZC5leHBhbmQoJyR7VH0vc2F2ZWQnKSk6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5kLmV4cGFuZCgnJHtUfS9zYXZlZCcpKQorCisgICAgICAgIGlmIChzZWxmLmQuZ2V0VmFyKCdCVUlMRF9JTUFHRVNfRlJPTV9GRUVEUycsIFRydWUpIG9yICIiKSAhPSAiMSI6CisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfY29uZmlnKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9jdXN0b21fY29uZmlnKCkKKworICAgICAgICBzZWxmLmluZGV4ZXIgPSBPcGtnSW5kZXhlcihzZWxmLmQsIHNlbGYuZGVwbG95X2RpcikKKworICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGFuZ2UgYSBwYWNrYWdlJ3Mgc3RhdHVzIGluIC92YXIvbGliL29wa2cvc3RhdHVzIGZpbGUuCisgICAgSWYgJ3BhY2thZ2VzJyBpcyBOb25lIHRoZW4gdGhlIG5ld19zdGF0dXMgd2lsbCBiZSBhcHBsaWVkIHRvIGFsbAorICAgIHBhY2thZ2VzCisgICAgIiIiCisgICAgZGVmIG1hcmtfcGFja2FnZXMoc2VsZiwgc3RhdHVzX3RhZywgcGFja2FnZXM9Tm9uZSk6CisgICAgICAgIHN0YXR1c19maWxlID0gb3MucGF0aC5qb2luKHNlbGYub3BrZ19kaXIsICJzdGF0dXMiKQorCisgICAgICAgIHdpdGggb3BlbihzdGF0dXNfZmlsZSwgInIiKSBhcyBzZjoKKyAgICAgICAgICAgIHdpdGggb3BlbihzdGF0dXNfZmlsZSArICIudG1wIiwgIncrIikgYXMgdG1wX3NmOgorICAgICAgICAgICAgICAgIGlmIHBhY2thZ2VzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHRtcF9zZi53cml0ZShyZS5zdWIociJQYWNrYWdlOiAoLio/KVxuKCg/OlteXG5dK1xuKSo/KVN0YXR1czogKC4qKSg/OnVucGFja2VkfGluc3RhbGxlZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiUGFja2FnZTogXDFcblwyU3RhdHVzOiBcMyVzIiAlIHN0YXR1c190YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2YucmVhZCgpKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiB0eXBlKHBhY2thZ2VzKS5fX25hbWVfXyAhPSAibGlzdCI6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIidwYWNrYWdlcycgc2hvdWxkIGJlIGEgbGlzdCBvYmplY3QiKQorCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNmLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gcmUuc3ViKHIiUGFja2FnZTogJXNcbigoPzpbXlxuXStcbikqPylTdGF0dXM6ICguKikoPzp1bnBhY2tlZHxpbnN0YWxsZWQpIiAlIHBrZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlBhY2thZ2U6ICVzXG5cMVN0YXR1czogXDIlcyIgJSAocGtnLCBzdGF0dXNfdGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMpCisKKyAgICAgICAgICAgICAgICAgICAgdG1wX3NmLndyaXRlKHN0YXR1cykKKworICAgICAgICBvcy5yZW5hbWUoc3RhdHVzX2ZpbGUgKyAiLnRtcCIsIHN0YXR1c19maWxlKQorCisgICAgZGVmIF9jcmVhdGVfY3VzdG9tX2NvbmZpZyhzZWxmKToKKyAgICAgICAgYmIubm90ZSgiQnVpbGRpbmcgZnJvbSBmZWVkcyBhY3RpdmF0ZWQhIikKKworICAgICAgICB3aXRoIG9wZW4oc2VsZi5jb25maWdfZmlsZSwgIncrIikgYXMgY29uZmlnX2ZpbGU6CisgICAgICAgICAgICBwcmlvcml0eSA9IDEKKyAgICAgICAgICAgIGZvciBhcmNoIGluIHNlbGYucGtnX2FyY2hzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGUud3JpdGUoImFyY2ggJXMgJWRcbiIgJSAoYXJjaCwgcHJpb3JpdHkpKQorICAgICAgICAgICAgICAgIHByaW9yaXR5ICs9IDUKKworICAgICAgICAgICAgZm9yIGxpbmUgaW4gKHNlbGYuZC5nZXRWYXIoJ0lQS19GRUVEX1VSSVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBmZWVkX21hdGNoID0gcmUubWF0Y2goIl5bIFx0XSooLiopIyMoW14gXHRdKilbIFx0XSokIiwgbGluZSkKKworICAgICAgICAgICAgICAgIGlmIGZlZWRfbWF0Y2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGZlZWRfbmFtZSA9IGZlZWRfbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgZmVlZF91cmkgPSBmZWVkX21hdGNoLmdyb3VwKDIpCisKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiQWRkICVzIGZlZWQgd2l0aCBVUkwgJXMiICUgKGZlZWRfbmFtZSwgZmVlZF91cmkpKQorCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19maWxlLndyaXRlKCJzcmMvZ3ogJXMgJXNcbiIgJSAoZmVlZF9uYW1lLCBmZWVkX3VyaSkpCisKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgQWxsb3cgdG8gdXNlIHBhY2thZ2UgZGVwbG95IGRpcmVjdG9yeSBjb250ZW50cyBhcyBxdWljayBkZXZlbC10ZXN0aW5nCisgICAgICAgICAgICBmZWVkLiBUaGlzIGNyZWF0ZXMgaW5kaXZpZHVhbCBmZWVkIGNvbmZpZ3MgZm9yIGVhY2ggYXJjaCBzdWJkaXIgb2YgdGhvc2UKKyAgICAgICAgICAgIHNwZWNpZmllZCBhcyBjb21wYXRpYmxlIGZvciB0aGUgY3VycmVudCBtYWNoaW5lLgorICAgICAgICAgICAgTk9URTogRGV2ZWxvcG1lbnQtaGVscGVyIGZlYXR1cmUsIE5PVCBhIGZ1bGwtZmxlZGdlZCBmZWVkLgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBpZiAoc2VsZi5kLmdldFZhcignRkVFRF9ERVBMT1lESVJfQkFTRV9VUkknLCBUcnVlKSBvciAiIikgIT0gIiI6CisgICAgICAgICAgICAgICAgZm9yIGFyY2ggaW4gc2VsZi5wa2dfYXJjaHMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgY2ZnX2ZpbGVfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLnRhcmdldF9yb290ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcigic3lzY29uZmRpciIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGtnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9jYWwtJXMtZmVlZC5jb25mIiAlIGFyY2gpCisKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNmZ19maWxlX25hbWUsICJ3KyIpIGFzIGNmZ19maWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgY2ZnX2ZpbGUud3JpdGUoInNyYy9neiBsb2NhbC0lcyAlcy8lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignRkVFRF9ERVBMT1lESVJfQkFTRV9VUkknLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoKSkKKworICAgIGRlZiBfY3JlYXRlX2NvbmZpZyhzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuY29uZmlnX2ZpbGUsICJ3KyIpIGFzIGNvbmZpZ19maWxlOgorICAgICAgICAgICAgcHJpb3JpdHkgPSAxCisgICAgICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLnBrZ19hcmNocy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGNvbmZpZ19maWxlLndyaXRlKCJhcmNoICVzICVkXG4iICUgKGFyY2gsIHByaW9yaXR5KSkKKyAgICAgICAgICAgICAgICBwcmlvcml0eSArPSA1CisKKyAgICAgICAgICAgIGNvbmZpZ19maWxlLndyaXRlKCJzcmMgb2UgZmlsZTolc1xuIiAlIHNlbGYuZGVwbG95X2RpcikKKworICAgICAgICAgICAgZm9yIGFyY2ggaW4gc2VsZi5wa2dfYXJjaHMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBwa2dzX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsIGFyY2gpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihwa2dzX2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19maWxlLndyaXRlKCJzcmMgb2UtJXMgZmlsZTolc1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmNoLCBwa2dzX2RpcikpCisKKyAgICBkZWYgaW5zZXJ0X2ZlZWRzX3VyaXMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZmVlZF91cmlzID09ICIiOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcm9vdGZzX2NvbmZpZyA9IG9zLnBhdGguam9pbignJXMvZXRjL29wa2cvYmFzZS1mZWVkcy5jb25mJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi50YXJnZXRfcm9vdGZzKQorCisgICAgICAgIHdpdGggb3Blbihyb290ZnNfY29uZmlnLCAidysiKSBhcyBjb25maWdfZmlsZToKKyAgICAgICAgICAgIHVyaV9pdGVyYXRvciA9IDAKKyAgICAgICAgICAgIGZvciB1cmkgaW4gc2VsZi5mZWVkX3VyaXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBmdWxsX3VyaSA9IHVyaQorICAgICAgICAgICAgICAgIGlmIHNlbGYuZmVlZF9wcmVmaXg6CisgICAgICAgICAgICAgICAgICAgIGZ1bGxfdXJpID0gb3MucGF0aC5qb2luKHVyaSwgc2VsZi5mZWVkX3ByZWZpeCkKKworICAgICAgICAgICAgICAgIGZvciBhcmNoIGluIHNlbGYucGtnX2FyY2hzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCdOb3RlOiBhZGRpbmcgb3BrZyBmZWVkIHVybC0lcy0lZCAoJXMpJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAoYXJjaCwgdXJpX2l0ZXJhdG9yLCBmdWxsX3VyaSkpCisKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGUud3JpdGUoInNyYy9neiB1cmktJXMtJWQgJXMvJXNcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJjaCwgdXJpX2l0ZXJhdG9yLCBmdWxsX3VyaSwgYXJjaCkpCisgICAgICAgICAgICAgICAgdXJpX2l0ZXJhdG9yICs9IDEKKworICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICAgICAgIHNlbGYuZGVwbG95X2Rpcl9sb2NrKCkKKworICAgICAgICBjbWQgPSAiJXMgJXMgdXBkYXRlIiAlIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuZGVwbG95X2Rpcl91bmxvY2soKQorICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byB1cGRhdGUgdGhlIHBhY2thZ2UgaW5kZXggZmlsZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICBzZWxmLmRlcGxveV9kaXJfdW5sb2NrKCkKKworICAgIGRlZiBpbnN0YWxsKHNlbGYsIHBrZ3MsIGF0dGVtcHRfb25seT1GYWxzZSk6CisgICAgICAgIGlmIGF0dGVtcHRfb25seSBhbmQgbGVuKHBrZ3MpID09IDA6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBjbWQgPSAiJXMgJXMgaW5zdGFsbCAlcyIgJSAoc2VsZi5vcGtnX2NtZCwgc2VsZi5vcGtnX2FyZ3MsICcgJy5qb2luKHBrZ3MpKQorCisgICAgICAgIG9zLmVudmlyb25bJ0QnXSA9IHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBvcy5lbnZpcm9uWydPRkZMSU5FX1JPT1QnXSA9IHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBvcy5lbnZpcm9uWydJUEtHX09GRkxJTkVfUk9PVCddID0gc2VsZi50YXJnZXRfcm9vdGZzCisgICAgICAgIG9zLmVudmlyb25bJ09QS0dfT0ZGTElORV9ST09UJ10gPSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgb3MuZW52aXJvblsnSU5URVJDRVBUX0RJUiddID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmNlcHRfc2NyaXB0cyIpCisgICAgICAgIG9zLmVudmlyb25bJ05BVElWRV9ST09UJ10gPSBzZWxmLmQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9OQVRJVkUnLCBUcnVlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgdGhlIGZvbGxvd2luZyBwYWNrYWdlczogJXMiICUgJyAnLmpvaW4ocGtncykpCisgICAgICAgICAgICBiYi5ub3RlKGNtZCkKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZC5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICBiYi5ub3RlKG91dHB1dCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICAoYmIuZmF0YWwsIGJiLm5vdGUpW2F0dGVtcHRfb25seV0oIlVuYWJsZSB0byBpbnN0YWxsIHBhY2thZ2VzLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW1hbmQgJyVzJyByZXR1cm5lZCAlZDpcbiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBkZWYgcmVtb3ZlKHNlbGYsIHBrZ3MsIHdpdGhfZGVwZW5kZW5jaWVzPVRydWUpOgorICAgICAgICBpZiB3aXRoX2RlcGVuZGVuY2llczoKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyAtLWZvcmNlLWRlcGVuZHMgLS1mb3JjZS1yZW1vdmUgLS1mb3JjZS1yZW1vdmFsLW9mLWRlcGVuZGVudC1wYWNrYWdlcyByZW1vdmUgJXMiICUgXAorICAgICAgICAgICAgICAgIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncywgJyAnLmpvaW4ocGtncykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgPSAiJXMgJXMgLS1mb3JjZS1kZXBlbmRzIHJlbW92ZSAlcyIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCAnICcuam9pbihwa2dzKSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ub3RlKGNtZCkKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZC5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICBiYi5ub3RlKG91dHB1dCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIHJlbW92ZSBwYWNrYWdlcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CisgICAgICAgIHNlbGYuZGVwbG95X2Rpcl9sb2NrKCkKKworICAgICAgICByZXN1bHQgPSBzZWxmLmluZGV4ZXIud3JpdGVfaW5kZXgoKQorCisgICAgICAgIHNlbGYuZGVwbG95X2Rpcl91bmxvY2soKQorCisgICAgICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGJiLmZhdGFsKHJlc3VsdCkKKworICAgIGRlZiByZW1vdmVfcGFja2FnaW5nX2RhdGEoc2VsZik6CisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLm9wa2dfZGlyLCBUcnVlKQorICAgICAgICAjIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGJhY2ssIGl0J3MgbmVlZGVkIGJ5IFBNIGxvY2sKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYub3BrZ19kaXIpCisKKyAgICBkZWYgbGlzdF9pbnN0YWxsZWQoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICByZXR1cm4gT3BrZ1BrZ3NMaXN0KHNlbGYuZCwgc2VsZi50YXJnZXRfcm9vdGZzLCBzZWxmLmNvbmZpZ19maWxlKS5saXN0KGZvcm1hdCkKKworICAgIGRlZiBoYW5kbGVfYmFkX3JlY29tbWVuZGF0aW9ucyhzZWxmKToKKyAgICAgICAgYmFkX3JlY29tbWVuZGF0aW9ucyA9IHNlbGYuZC5nZXRWYXIoIkJBRF9SRUNPTU1FTkRBVElPTlMiLCBUcnVlKSBvciAiIgorICAgICAgICBpZiBiYWRfcmVjb21tZW5kYXRpb25zLnN0cmlwKCkgPT0gIiI6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzdGF0dXNfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLm9wa2dfZGlyLCAic3RhdHVzIikKKworICAgICAgICAjIElmIHN0YXR1cyBmaWxlIGV4aXN0ZWQsIGl0IG1lYW5zIHRoZSBiYWQgcmVjb21tZW5kYXRpb25zIGhhcyBhbHJlYWR5CisgICAgICAgICMgYmVlbiBoYW5kbGVkCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHN0YXR1c19maWxlKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGNtZCA9ICIlcyAlcyBpbmZvICIgJSAoc2VsZi5vcGtnX2NtZCwgc2VsZi5vcGtnX2FyZ3MpCisKKyAgICAgICAgd2l0aCBvcGVuKHN0YXR1c19maWxlLCAidysiKSBhcyBzdGF0dXM6CisgICAgICAgICAgICBmb3IgcGtnIGluIGJhZF9yZWNvbW1lbmRhdGlvbnMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBwa2dfaW5mbyA9IGNtZCArIHBrZworCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChwa2dfaW5mby5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBnZXQgcGFja2FnZSBpbmZvLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAocGtnX2luZm8sIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgICAgICAgICAgaWYgb3V0cHV0ID09ICIiOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJJZ25vcmVkIGJhZCByZWNvbW1lbmRhdGlvbjogJyVzJyBpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhIHBhY2thZ2UiICUgcGtnKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlN0YXR1czoiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy53cml0ZSgiU3RhdHVzOiBkZWluc3RhbGwgaG9sZCBub3QtaW5zdGFsbGVkXG4iKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgICAgICAgICAgICAgIyBBcHBlbmQgYSBibGFuayBsaW5lIGFmdGVyIGVhY2ggcGFja2FnZSBlbnRyeSB0byBlbnN1cmUgdGhhdCBpdAorICAgICAgICAgICAgICAgICMgaXMgc2VwYXJhdGVkIGZyb20gdGhlIGZvbGxvd2luZyBlbnRyeQorICAgICAgICAgICAgICAgIHN0YXR1cy53cml0ZSgiXG4iKQorCisgICAgJycnCisgICAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBkdW1teSBpbnN0YWxscyBwa2dzIGFuZCByZXR1cm5zIHRoZSBsb2cgb2Ygb3V0cHV0LgorICAgICcnJworICAgIGRlZiBkdW1teV9pbnN0YWxsKHNlbGYsIHBrZ3MpOgorICAgICAgICBpZiBsZW4ocGtncykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgQ3JlYXRlIGFuIHRlbXAgZGlyIGFzIG9wa2cgcm9vdCBmb3IgZHVtbXkgaW5zdGFsbGF0aW9uCisgICAgICAgIHRlbXBfcm9vdGZzID0gc2VsZi5kLmV4cGFuZCgnJHtUfS9vcGtnJykKKyAgICAgICAgdGVtcF9vcGtnX2RpciA9IG9zLnBhdGguam9pbih0ZW1wX3Jvb3RmcywgJ3Zhci9saWIvb3BrZycpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih0ZW1wX29wa2dfZGlyKQorCisgICAgICAgIG9wa2dfYXJncyA9ICItZiAlcyAtbyAlcyAiICUgKHNlbGYuY29uZmlnX2ZpbGUsIHRlbXBfcm9vdGZzKQorICAgICAgICBvcGtnX2FyZ3MgKz0gc2VsZi5kLmdldFZhcigiT1BLR19BUkdTIiwgVHJ1ZSkKKworICAgICAgICBjbWQgPSAiJXMgJXMgdXBkYXRlIiAlIChzZWxmLm9wa2dfY21kLCBvcGtnX2FyZ3MpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gdXBkYXRlLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgIyBEdW1teSBpbnN0YWxsYXRpb24KKyAgICAgICAgY21kID0gIiVzICVzIC0tbm9hY3Rpb24gaW5zdGFsbCAlcyAiICUgKHNlbGYub3BrZ19jbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGtnX2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICcuam9pbihwa2dzKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byBkdW1teSBpbnN0YWxsIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHRlbXBfcm9vdGZzLCBUcnVlKQorCisgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIGRlZiBiYWNrdXBfcGFja2FnaW5nX2RhdGEoc2VsZik6CisgICAgICAgICMgU2F2ZSB0aGUgb3BrZ2xpYiBmb3IgaW5jcmVtZW50IGlwayBpbWFnZSBnZW5lcmF0aW9uCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuc2F2ZWRfb3BrZ19kaXIpOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuc2F2ZWRfb3BrZ19kaXIsIFRydWUpCisgICAgICAgIHNodXRpbC5jb3B5dHJlZShzZWxmLm9wa2dfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zYXZlZF9vcGtnX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPVRydWUpCisKKyAgICBkZWYgcmVjb3Zlcl9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgIyBNb3ZlIHRoZSBvcGtnbGliIGJhY2sKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5zYXZlZF9vcGtnX2Rpcik6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLm9wa2dfZGlyKToKKyAgICAgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5vcGtnX2RpciwgVHJ1ZSkKKworICAgICAgICAgICAgYmIubm90ZSgnUmVjb3ZlciBwYWNrYWdpbmcgZGF0YScpCisgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc2VsZi5zYXZlZF9vcGtnX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wa2dfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPVRydWUpCisKKworY2xhc3MgRHBrZ1BNKFBhY2thZ2VNYW5hZ2VyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgdGFyZ2V0X3Jvb3RmcywgYXJjaHMsIGJhc2VfYXJjaHMsIGFwdF9jb25mX2Rpcj1Ob25lKToKKyAgICAgICAgc3VwZXIoRHBrZ1BNLCBzZWxmKS5fX2luaXRfXyhkKQorICAgICAgICBzZWxmLnRhcmdldF9yb290ZnMgPSB0YXJnZXRfcm9vdGZzCisgICAgICAgIHNlbGYuZGVwbG95X2RpciA9IHNlbGYuZC5nZXRWYXIoJ0RFUExPWV9ESVJfREVCJywgVHJ1ZSkKKyAgICAgICAgaWYgYXB0X2NvbmZfZGlyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmFwdF9jb25mX2RpciA9IHNlbGYuZC5leHBhbmQoIiR7QVBUQ09ORl9UQVJHRVR9L2FwdCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFwdF9jb25mX2RpciA9IGFwdF9jb25mX2RpcgorICAgICAgICBzZWxmLmFwdF9jb25mX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5hcHRfY29uZl9kaXIsICJhcHQuY29uZiIpCisgICAgICAgIHNlbGYuYXB0X2dldF9jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgImFwdC1nZXQiKQorCisgICAgICAgIHNlbGYuYXB0X2FyZ3MgPSBkLmdldFZhcigiQVBUX0FSR1MiLCBUcnVlKQorCisgICAgICAgIHNlbGYuYWxsX2FyY2hfbGlzdCA9IGFyY2hzLnNwbGl0KCkKKyAgICAgICAgYWxsX21sYl9wa2dfYXJjaF9saXN0ID0gKHNlbGYuZC5nZXRWYXIoJ0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTJywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoJy0nLCAnXycpLnNwbGl0KCkKKyAgICAgICAgc2VsZi5hbGxfYXJjaF9saXN0LmV4dGVuZChhcmNoIGZvciBhcmNoIGluIGFsbF9tbGJfcGtnX2FyY2hfbGlzdCBpZiBhcmNoIG5vdCBpbiBzZWxmLmFsbF9hcmNoX2xpc3QpCisKKyAgICAgICAgc2VsZi5fY3JlYXRlX2NvbmZpZ3MoYXJjaHMsIGJhc2VfYXJjaHMpCisKKyAgICAgICAgc2VsZi5pbmRleGVyID0gRHBrZ0luZGV4ZXIoc2VsZi5kLCBzZWxmLmRlcGxveV9kaXIpCisKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hhbmdlIGEgcGFja2FnZSdzIHN0YXR1cyBpbiAvdmFyL2xpYi9kcGtnL3N0YXR1cyBmaWxlLgorICAgIElmICdwYWNrYWdlcycgaXMgTm9uZSB0aGVuIHRoZSBuZXdfc3RhdHVzIHdpbGwgYmUgYXBwbGllZCB0byBhbGwKKyAgICBwYWNrYWdlcworICAgICIiIgorICAgIGRlZiBtYXJrX3BhY2thZ2VzKHNlbGYsIHN0YXR1c190YWcsIHBhY2thZ2VzPU5vbmUpOgorICAgICAgICBzdGF0dXNfZmlsZSA9IHNlbGYudGFyZ2V0X3Jvb3RmcyArICIvdmFyL2xpYi9kcGtnL3N0YXR1cyIKKworICAgICAgICB3aXRoIG9wZW4oc3RhdHVzX2ZpbGUsICJyIikgYXMgc2Y6CisgICAgICAgICAgICB3aXRoIG9wZW4oc3RhdHVzX2ZpbGUgKyAiLnRtcCIsICJ3KyIpIGFzIHRtcF9zZjoKKyAgICAgICAgICAgICAgICBpZiBwYWNrYWdlcyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICB0bXBfc2Yud3JpdGUocmUuc3ViKHIiUGFja2FnZTogKC4qPylcbigoPzpbXlxuXStcbikqPylTdGF0dXM6ICguKikoPzp1bnBhY2tlZHxpbnN0YWxsZWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlBhY2thZ2U6IFwxXG5cMlN0YXR1czogXDMlcyIgJSBzdGF0dXNfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmLnJlYWQoKSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgdHlwZShwYWNrYWdlcykuX19uYW1lX18gIT0gImxpc3QiOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCIncGFja2FnZXMnIHNob3VsZCBiZSBhIGxpc3Qgb2JqZWN0IikKKworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzZi5yZWFkKCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHJlLnN1YihyIlBhY2thZ2U6ICVzXG4oKD86W15cbl0rXG4pKj8pU3RhdHVzOiAoLiopKD86dW5wYWNrZWR8aW5zdGFsbGVkKSIgJSBwa2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJQYWNrYWdlOiAlc1xuXDFTdGF0dXM6IFwyJXMiICUgKHBrZywgc3RhdHVzX3RhZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzKQorCisgICAgICAgICAgICAgICAgICAgIHRtcF9zZi53cml0ZShzdGF0dXMpCisKKyAgICAgICAgb3MucmVuYW1lKHN0YXR1c19maWxlICsgIi50bXAiLCBzdGF0dXNfZmlsZSkKKworICAgICIiIgorICAgIFJ1biB0aGUgcHJlL3Bvc3QgaW5zdGFsbHMgZm9yIHBhY2thZ2UgInBhY2thZ2VfbmFtZSIuIElmIHBhY2thZ2VfbmFtZSBpcworICAgIE5vbmUsIHRoZW4gcnVuIGFsbCBwcmUvcG9zdCBpbnN0YWxsIHNjcmlwdGxldHMuCisgICAgIiIiCisgICAgZGVmIHJ1bl9wcmVfcG9zdF9pbnN0YWxscyhzZWxmLCBwYWNrYWdlX25hbWU9Tm9uZSk6CisgICAgICAgIGluZm9fZGlyID0gc2VsZi50YXJnZXRfcm9vdGZzICsgIi92YXIvbGliL2Rwa2cvaW5mbyIKKyAgICAgICAgc3VmZml4ZXMgPSBbKCIucHJlaW5zdCIsICJQcmVpbnN0YWxsIiksICgiLnBvc3RpbnN0IiwgIlBvc3RpbnN0YWxsIildCisgICAgICAgIHN0YXR1c19maWxlID0gc2VsZi50YXJnZXRfcm9vdGZzICsgIi92YXIvbGliL2Rwa2cvc3RhdHVzIgorICAgICAgICBpbnN0YWxsZWRfcGtncyA9IFtdCisKKyAgICAgICAgd2l0aCBvcGVuKHN0YXR1c19maWxlLCAiciIpIGFzIHN0YXR1czoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHN0YXR1cy5yZWFkKCkuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJeUGFja2FnZTogKC4qKSIsIGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkX3BrZ3MuYXBwZW5kKG0uZ3JvdXAoMSkpCisKKyAgICAgICAgaWYgcGFja2FnZV9uYW1lIGlzIG5vdCBOb25lIGFuZCBub3QgcGFja2FnZV9uYW1lIGluIGluc3RhbGxlZF9wa2dzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgb3MuZW52aXJvblsnRCddID0gc2VsZi50YXJnZXRfcm9vdGZzCisgICAgICAgIG9zLmVudmlyb25bJ09GRkxJTkVfUk9PVCddID0gc2VsZi50YXJnZXRfcm9vdGZzCisgICAgICAgIG9zLmVudmlyb25bJ0lQS0dfT0ZGTElORV9ST09UJ10gPSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgb3MuZW52aXJvblsnT1BLR19PRkZMSU5FX1JPT1QnXSA9IHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBvcy5lbnZpcm9uWydJTlRFUkNFUFRfRElSJ10gPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyY2VwdF9zY3JpcHRzIikKKyAgICAgICAgb3MuZW52aXJvblsnTkFUSVZFX1JPT1QnXSA9IHNlbGYuZC5nZXRWYXIoJ1NUQUdJTkdfRElSX05BVElWRScsIFRydWUpCisKKyAgICAgICAgZmFpbGVkX3BrZ3MgPSBbXQorICAgICAgICBmb3IgcGtnX25hbWUgaW4gaW5zdGFsbGVkX3BrZ3M6CisgICAgICAgICAgICBmb3Igc3VmZml4IGluIHN1ZmZpeGVzOgorICAgICAgICAgICAgICAgIHBfZnVsbCA9IG9zLnBhdGguam9pbihpbmZvX2RpciwgcGtnX25hbWUgKyBzdWZmaXhbMF0pCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocF9mdWxsKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiRXhlY3V0aW5nICVzIGZvciBwYWNrYWdlOiAlcyAuLi4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWZmaXhbMV0ubG93ZXIoKSwgcGtnX25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQocF9mdWxsLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiJXMgZm9yIHBhY2thZ2UgJXMgZmFpbGVkIHdpdGggJWQ6XG4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VmZml4WzFdLCBwa2dfbmFtZSwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWRfcGtncy5hcHBlbmQocGtnX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIGxlbihmYWlsZWRfcGtncyk6CisgICAgICAgICAgICBzZWxmLm1hcmtfcGFja2FnZXMoInVucGFja2VkIiwgZmFpbGVkX3BrZ3MpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAgICAgICBvcy5lbnZpcm9uWydBUFRfQ09ORklHJ10gPSBzZWxmLmFwdF9jb25mX2ZpbGUKKworICAgICAgICBzZWxmLmRlcGxveV9kaXJfbG9jaygpCisKKyAgICAgICAgY21kID0gIiVzIHVwZGF0ZSIgJSBzZWxmLmFwdF9nZXRfY21kCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIHVwZGF0ZSB0aGUgcGFja2FnZSBpbmRleCBmaWxlcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX3VubG9jaygpCisKKyAgICBkZWYgaW5zdGFsbChzZWxmLCBwa2dzLCBhdHRlbXB0X29ubHk9RmFsc2UpOgorICAgICAgICBpZiBhdHRlbXB0X29ubHkgYW5kIGxlbihwa2dzKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgb3MuZW52aXJvblsnQVBUX0NPTkZJRyddID0gc2VsZi5hcHRfY29uZl9maWxlCisKKyAgICAgICAgY21kID0gIiVzICVzIGluc3RhbGwgLS1mb3JjZS15ZXMgLS1hbGxvdy11bmF1dGhlbnRpY2F0ZWQgJXMiICUgXAorICAgICAgICAgICAgICAoc2VsZi5hcHRfZ2V0X2NtZCwgc2VsZi5hcHRfYXJncywgJyAnLmpvaW4ocGtncykpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyB0aGUgZm9sbG93aW5nIHBhY2thZ2VzOiAlcyIgJSAnICcuam9pbihwa2dzKSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZC5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgKGJiLmZhdGFsLCBiYi5ub3RlKVthdHRlbXB0X29ubHldKCJVbmFibGUgdG8gaW5zdGFsbCBwYWNrYWdlcy4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21tYW5kICclcycgcmV0dXJuZWQgJWQ6XG4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgICMgcmVuYW1lICouZHBrZy1uZXcgZmlsZXMvZGlycworICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnRhcmdldF9yb290ZnMpOgorICAgICAgICAgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAgICAgICAgIG5ld19kaXIgPSByZS5zdWIoIlwuZHBrZy1uZXciLCAiIiwgZGlyKQorICAgICAgICAgICAgICAgIGlmIGRpciAhPSBuZXdfZGlyOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUob3MucGF0aC5qb2luKHJvb3QsIGRpciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocm9vdCwgbmV3X2RpcikpCisKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIG5ld19maWxlID0gcmUuc3ViKCJcLmRwa2ctbmV3IiwgIiIsIGZpbGUpCisgICAgICAgICAgICAgICAgaWYgZmlsZSAhPSBuZXdfZmlsZToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKG9zLnBhdGguam9pbihyb290LCBmaWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihyb290LCBuZXdfZmlsZSkpCisKKworICAgIGRlZiByZW1vdmUoc2VsZiwgcGtncywgd2l0aF9kZXBlbmRlbmNpZXM9VHJ1ZSk6CisgICAgICAgIGlmIHdpdGhfZGVwZW5kZW5jaWVzOgorICAgICAgICAgICAgb3MuZW52aXJvblsnQVBUX0NPTkZJRyddID0gc2VsZi5hcHRfY29uZl9maWxlCisgICAgICAgICAgICBjbWQgPSAiJXMgcHVyZ2UgJXMiICUgKHNlbGYuYXB0X2dldF9jbWQsICcgJy5qb2luKHBrZ3MpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kID0gIiVzIC0tYWRtaW5kaXI9JXMvdmFyL2xpYi9kcGtnIC0taW5zdGRpcj0lcyIgXAorICAgICAgICAgICAgICAgICAgIiAtUCAtLWZvcmNlLWRlcGVuZHMgJXMiICUgXAorICAgICAgICAgICAgICAgICAgKGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiZHBrZyIpLAorICAgICAgICAgICAgICAgICAgIHNlbGYudGFyZ2V0X3Jvb3Rmcywgc2VsZi50YXJnZXRfcm9vdGZzLCAnICcuam9pbihwa2dzKSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gcmVtb3ZlIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGUuY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX2xvY2soKQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW5kZXhlci53cml0ZV9pbmRleCgpCisKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX3VubG9jaygpCisKKyAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYmIuZmF0YWwocmVzdWx0KQorCisgICAgZGVmIGluc2VydF9mZWVkc191cmlzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmZlZWRfdXJpcyA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNvdXJjZXNfY29uZiA9IG9zLnBhdGguam9pbigiJXMvZXRjL2FwdC9zb3VyY2VzLmxpc3QiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHNlbGYudGFyZ2V0X3Jvb3RmcykKKyAgICAgICAgYXJjaF9saXN0ID0gW10KKworICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLmFsbF9hcmNoX2xpc3Q6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgYXJjaCkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBhcmNoX2xpc3QuYXBwZW5kKGFyY2gpCisKKyAgICAgICAgd2l0aCBvcGVuKHNvdXJjZXNfY29uZiwgIncrIikgYXMgc291cmNlc19maWxlOgorICAgICAgICAgICAgZm9yIHVyaSBpbiBzZWxmLmZlZWRfdXJpcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGZ1bGxfdXJpID0gdXJpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5mZWVkX3ByZWZpeDoKKyAgICAgICAgICAgICAgICAgICAgZnVsbF91cmkgPSBvcy5wYXRoLmpvaW4odXJpLCBzZWxmLmZlZWRfcHJlZml4KQorICAgICAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hfbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgnTm90ZTogYWRkaW5nIGRwa2cgY2hhbm5lbCBhdCAoJXMpJyAlIHVyaSkKKyAgICAgICAgICAgICAgICAgICAgc291cmNlc19maWxlLndyaXRlKCJkZWIgJXMvJXMgLi9cbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bGxfdXJpLCBhcmNoKSkKKworICAgIGRlZiBfY3JlYXRlX2NvbmZpZ3Moc2VsZiwgYXJjaHMsIGJhc2VfYXJjaHMpOgorICAgICAgICBiYXNlX2FyY2hzID0gcmUuc3ViKCJfIiwgIi0iLCBiYXNlX2FyY2hzKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuYXB0X2NvbmZfZGlyKToKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmFwdF9jb25mX2RpciwgVHJ1ZSkKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5hcHRfY29uZl9kaXIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmFwdF9jb25mX2RpciArICIvbGlzdHMvcGFydGlhbC8iKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5hcHRfY29uZl9kaXIgKyAiL2FwdC5jb25mLmQvIikKKworICAgICAgICBhcmNoX2xpc3QgPSBbXQorICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLmFsbF9hcmNoX2xpc3Q6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgYXJjaCkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBhcmNoX2xpc3QuYXBwZW5kKGFyY2gpCisKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgInByZWZlcmVuY2VzIiksICJ3KyIpIGFzIHByZWZzX2ZpbGU6CisgICAgICAgICAgICBwcmlvcml0eSA9IDgwMQorICAgICAgICAgICAgZm9yIGFyY2ggaW4gYXJjaF9saXN0OgorICAgICAgICAgICAgICAgIHByZWZzX2ZpbGUud3JpdGUoCisgICAgICAgICAgICAgICAgICAgICJQYWNrYWdlOiAqXG4iCisgICAgICAgICAgICAgICAgICAgICJQaW46IHJlbGVhc2UgbD0lc1xuIgorICAgICAgICAgICAgICAgICAgICAiUGluLVByaW9yaXR5OiAlZFxuXG4iICUgKGFyY2gsIHByaW9yaXR5KSkKKworICAgICAgICAgICAgICAgIHByaW9yaXR5ICs9IDUKKworICAgICAgICAgICAgcGtnX2V4Y2x1ZGUgPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0VYQ0xVREUnLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgZm9yIHBrZyBpbiBwa2dfZXhjbHVkZS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHByZWZzX2ZpbGUud3JpdGUoCisgICAgICAgICAgICAgICAgICAgICJQYWNrYWdlOiAlc1xuIgorICAgICAgICAgICAgICAgICAgICAiUGluOiByZWxlYXNlICpcbiIKKyAgICAgICAgICAgICAgICAgICAgIlBpbi1Qcmlvcml0eTogLTFcblxuIiAlIHBrZykKKworICAgICAgICBhcmNoX2xpc3QucmV2ZXJzZSgpCisKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgInNvdXJjZXMubGlzdCIpLCAidysiKSBhcyBzb3VyY2VzX2ZpbGU6CisgICAgICAgICAgICBmb3IgYXJjaCBpbiBhcmNoX2xpc3Q6CisgICAgICAgICAgICAgICAgc291cmNlc19maWxlLndyaXRlKCJkZWIgZmlsZTolcy8gLi9cbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKSkKKworICAgICAgICBiYXNlX2FyY2hfbGlzdCA9IGJhc2VfYXJjaHMuc3BsaXQoKQorICAgICAgICBtdWx0aWxpYl92YXJpYW50cyA9IHNlbGYuZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSk7CisgICAgICAgIGZvciB2YXJpYW50IGluIG11bHRpbGliX3ZhcmlhbnRzLnNwbGl0KCk6CisgICAgICAgICAgICBpZiB2YXJpYW50ID09ICJsaWIzMiI6CisgICAgICAgICAgICAgICAgYmFzZV9hcmNoX2xpc3QuYXBwZW5kKCJpMzg2IikKKyAgICAgICAgICAgIGVsaWYgdmFyaWFudCA9PSAibGliNjQiOgorICAgICAgICAgICAgICAgIGJhc2VfYXJjaF9saXN0LmFwcGVuZCgiYW1kNjQiKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmFwdF9jb25mX2ZpbGUsICJ3KyIpIGFzIGFwdF9jb25mOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZC5leHBhbmQoIiR7U1RBR0lOR19FVENESVJfTkFUSVZFfS9hcHQvYXB0LmNvbmYuc2FtcGxlIikpIGFzIGFwdF9jb25mX3NhbXBsZToKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBhcHRfY29uZl9zYW1wbGUucmVhZCgpLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgICAgICBtYXRjaF9hcmNoID0gcmUubWF0Y2goIiAgQXJjaGl0ZWN0dXJlIFwiLipcIjskIiwgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcyA9ICIiCisgICAgICAgICAgICAgICAgICAgIGlmIG1hdGNoX2FyY2g6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYmFzZV9hcmNoIGluIGJhc2VfYXJjaF9saXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMgKz0gIlwiJXNcIjsiICUgYmFzZV9hcmNoCisgICAgICAgICAgICAgICAgICAgICAgICBhcHRfY29uZi53cml0ZSgiICBBcmNoaXRlY3R1cmVzIHslc307XG4iICUgYXJjaGl0ZWN0dXJlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHRfY29uZi53cml0ZSgiICBBcmNoaXRlY3R1cmUgXCIlc1wiO1xuIiAlIGJhc2VfYXJjaHMpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gcmUuc3ViKCIjUk9PVEZTIyIsIHNlbGYudGFyZ2V0X3Jvb3RmcywgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSByZS5zdWIoIiNBUFRDT05GIyIsIHNlbGYuYXB0X2NvbmZfZGlyLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgYXB0X2NvbmYud3JpdGUobGluZSArICJcbiIpCisKKyAgICAgICAgdGFyZ2V0X2Rwa2dfZGlyID0gIiVzL3Zhci9saWIvZHBrZyIgJSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbih0YXJnZXRfZHBrZ19kaXIsICJpbmZvIikpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbih0YXJnZXRfZHBrZ19kaXIsICJ1cGRhdGVzIikpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih0YXJnZXRfZHBrZ19kaXIsICJzdGF0dXMiKSk6CisgICAgICAgICAgICBvcGVuKG9zLnBhdGguam9pbih0YXJnZXRfZHBrZ19kaXIsICJzdGF0dXMiKSwgIncrIikuY2xvc2UoKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRhcmdldF9kcGtnX2RpciwgImF2YWlsYWJsZSIpKToKKyAgICAgICAgICAgIG9wZW4ob3MucGF0aC5qb2luKHRhcmdldF9kcGtnX2RpciwgImF2YWlsYWJsZSIpLCAidysiKS5jbG9zZSgpCisKKyAgICBkZWYgcmVtb3ZlX3BhY2thZ2luZ19kYXRhKHNlbGYpOgorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdvcGtnbGliZGlyJywgVHJ1ZSkpLCBUcnVlKQorICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi50YXJnZXRfcm9vdGZzICsgIi92YXIvbGliL2Rwa2cvIiwgVHJ1ZSkKKworICAgIGRlZiBmaXhfYnJva2VuX2RlcGVuZGVuY2llcyhzZWxmKToKKyAgICAgICAgb3MuZW52aXJvblsnQVBUX0NPTkZJRyddID0gc2VsZi5hcHRfY29uZl9maWxlCisKKyAgICAgICAgY21kID0gIiVzICVzIC1mIGluc3RhbGwiICUgKHNlbGYuYXB0X2dldF9jbWQsIHNlbGYuYXB0X2FyZ3MpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ2Fubm90IGZpeCBicm9rZW4gZGVwZW5kZW5jaWVzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBkZWYgbGlzdF9pbnN0YWxsZWQoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICByZXR1cm4gRHBrZ1BrZ3NMaXN0KHNlbGYuZCwgc2VsZi50YXJnZXRfcm9vdGZzKS5saXN0KCkKKworCitkZWYgZ2VuZXJhdGVfaW5kZXhfZmlsZXMoZCk6CisgICAgY2xhc3NlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFX0NMQVNTRVMnLCBUcnVlKS5yZXBsYWNlKCJwYWNrYWdlXyIsICIiKS5zcGxpdCgpCisKKyAgICBpbmRleGVyX21hcCA9IHsKKyAgICAgICAgInJwbSI6IChScG1JbmRleGVyLCBkLmdldFZhcignREVQTE9ZX0RJUl9SUE0nLCBUcnVlKSksCisgICAgICAgICJpcGsiOiAoT3BrZ0luZGV4ZXIsIGQuZ2V0VmFyKCdERVBMT1lfRElSX0lQSycsIFRydWUpKSwKKyAgICAgICAgImRlYiI6IChEcGtnSW5kZXhlciwgZC5nZXRWYXIoJ0RFUExPWV9ESVJfREVCJywgVHJ1ZSkpCisgICAgfQorCisgICAgcmVzdWx0ID0gTm9uZQorCisgICAgZm9yIHBrZ19jbGFzcyBpbiBjbGFzc2VzOgorICAgICAgICBpZiBub3QgcGtnX2NsYXNzIGluIGluZGV4ZXJfbWFwOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhpbmRleGVyX21hcFtwa2dfY2xhc3NdWzFdKToKKyAgICAgICAgICAgIHJlc3VsdCA9IGluZGV4ZXJfbWFwW3BrZ19jbGFzc11bMF0oZCwgaW5kZXhlcl9tYXBbcGtnX2NsYXNzXVsxXSkud3JpdGVfaW5kZXgoKQorCisgICAgICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwocmVzdWx0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgICIiIgorICAgIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJ1biB0aGlzIGFzIGEgc3RhbmRhbG9uZSBzY3JpcHQsIGZyb20gb3V0c2lkZSBiaXRiYWtlCisgICAgZW52aXJvbm1lbnQuCisgICAgIiIiCisgICAgIiIiCisgICAgVEJECisgICAgIiIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2VkYXRhLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDVmMDQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlZGF0YS5weQpAQCAtMCwwICsxLDk0IEBACitpbXBvcnQgY29kZWNzCisKK2RlZiBwYWNrYWdlZChwa2csIGQpOgorICAgIHJldHVybiBvcy5hY2Nlc3MoZ2V0X3N1YnBrZ2VkYXRhX2ZuKHBrZywgZCkgKyAnLnBhY2thZ2VkJywgb3MuUl9PSykKKworZGVmIHJlYWRfcGtnZGF0YWZpbGUoZm4pOgorICAgIHBrZ2RhdGEgPSB7fQorCisgICAgZGVmIGRlY29kZShzdHIpOgorICAgICAgICBjID0gY29kZWNzLmdldGRlY29kZXIoInN0cmluZ19lc2NhcGUiKQorICAgICAgICByZXR1cm4gYyhzdHIpWzBdCisKKyAgICBpZiBvcy5hY2Nlc3MoZm4sIG9zLlJfT0spOgorICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgZiA9IG9wZW4oZm4sICdyJykKKyAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICByID0gcmUuY29tcGlsZSgiKFteOl0rKTpccyooLiopIikKKyAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICBtID0gci5tYXRjaChsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBwa2dkYXRhW20uZ3JvdXAoMSldID0gZGVjb2RlKG0uZ3JvdXAoMikpCisKKyAgICByZXR1cm4gcGtnZGF0YQorCitkZWYgZ2V0X3N1YnBrZ2VkYXRhX2ZuKHBrZywgZCk6CisgICAgcmV0dXJuIGQuZXhwYW5kKCcke1BLR0RBVEFfRElSfS9ydW50aW1lLyVzJyAlIHBrZykKKworZGVmIGhhc19zdWJwa2dkYXRhKHBrZywgZCk6CisgICAgcmV0dXJuIG9zLmFjY2VzcyhnZXRfc3VicGtnZWRhdGFfZm4ocGtnLCBkKSwgb3MuUl9PSykKKworZGVmIHJlYWRfc3VicGtnZGF0YShwa2csIGQpOgorICAgIHJldHVybiByZWFkX3BrZ2RhdGFmaWxlKGdldF9zdWJwa2dlZGF0YV9mbihwa2csIGQpKQorCitkZWYgaGFzX3BrZ2RhdGEocG4sIGQpOgorICAgIGZuID0gZC5leHBhbmQoJyR7UEtHREFUQV9ESVJ9LyVzJyAlIHBuKQorICAgIHJldHVybiBvcy5hY2Nlc3MoZm4sIG9zLlJfT0spCisKK2RlZiByZWFkX3BrZ2RhdGEocG4sIGQpOgorICAgIGZuID0gZC5leHBhbmQoJyR7UEtHREFUQV9ESVJ9LyVzJyAlIHBuKQorICAgIHJldHVybiByZWFkX3BrZ2RhdGFmaWxlKGZuKQorCisjCisjIENvbGxhcHNlIEZPT19wa2cgdmFyaWFibGVzIGludG8gRk9PCisjCitkZWYgcmVhZF9zdWJwa2dkYXRhX2RpY3QocGtnLCBkKToKKyAgICByZXQgPSB7fQorICAgIHN1YmQgPSByZWFkX3BrZ2RhdGFmaWxlKGdldF9zdWJwa2dlZGF0YV9mbihwa2csIGQpKQorICAgIGZvciB2YXIgaW4gc3ViZDoKKyAgICAgICAgbmV3dmFyID0gdmFyLnJlcGxhY2UoIl8iICsgcGtnLCAiIikKKyAgICAgICAgaWYgbmV3dmFyID09IHZhciBhbmQgdmFyICsgIl8iICsgcGtnIGluIHN1YmQ6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICByZXRbbmV3dmFyXSA9IHN1YmRbdmFyXQorICAgIHJldHVybiByZXQKKworZGVmIF9wa2dtYXAoZCk6CisgICAgIiIiUmV0dXJuIGEgZGljdGlvbmFyeSBtYXBwaW5nIHBhY2thZ2UgdG8gcmVjaXBlIG5hbWUuIiIiCisKKyAgICBwa2dkYXRhZGlyID0gZC5nZXRWYXIoIlBLR0RBVEFfRElSIiwgVHJ1ZSkKKworICAgIHBrZ21hcCA9IHt9CisgICAgdHJ5OgorICAgICAgICBmaWxlcyA9IG9zLmxpc3RkaXIocGtnZGF0YWRpcikKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgYmIud2FybigiTm8gZmlsZXMgaW4gJXM/IiAlIHBrZ2RhdGFkaXIpCisgICAgICAgIGZpbGVzID0gW10KKworICAgIGZvciBwbiBpbiBmaWx0ZXIobGFtYmRhIGY6IG5vdCBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihwa2dkYXRhZGlyLCBmKSksIGZpbGVzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGtnZGF0YSA9IHJlYWRfcGtnZGF0YWZpbGUob3MucGF0aC5qb2luKHBrZ2RhdGFkaXIsIHBuKSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHBhY2thZ2VzID0gcGtnZGF0YS5nZXQoIlBBQ0tBR0VTIikgb3IgIiIKKyAgICAgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICAgICAgcGtnbWFwW3BrZ10gPSBwbgorCisgICAgcmV0dXJuIHBrZ21hcAorCitkZWYgcGtnbWFwKGQpOgorICAgICIiIlJldHVybiBhIGRpY3Rpb25hcnkgbWFwcGluZyBwYWNrYWdlIHRvIHJlY2lwZSBuYW1lLgorICAgIENhY2hlIHRoZSBtYXBwaW5nIGluIHRoZSBtZXRhZGF0YSIiIgorCisgICAgcGtnbWFwX2RhdGEgPSBkLmdldFZhcigiX19wa2dtYXBfZGF0YSIsIEZhbHNlKQorICAgIGlmIHBrZ21hcF9kYXRhIGlzIE5vbmU6CisgICAgICAgIHBrZ21hcF9kYXRhID0gX3BrZ21hcChkKQorICAgICAgICBkLnNldFZhcigiX19wa2dtYXBfZGF0YSIsIHBrZ21hcF9kYXRhKQorCisgICAgcmV0dXJuIHBrZ21hcF9kYXRhCisKK2RlZiByZWNpcGVuYW1lKHBrZywgZCk6CisgICAgIiIiUmV0dXJuIHRoZSByZWNpcGUgbmFtZSBmb3IgdGhlIGdpdmVuIGJpbmFyeSBwYWNrYWdlIG5hbWUuIiIiCisKKyAgICByZXR1cm4gcGtnbWFwKGQpLmdldChwa2cpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2Vncm91cC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGFja2FnZWdyb3VwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZWI0MjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2Vncm91cC5weQpAQCAtMCwwICsxLDM2IEBACitpbXBvcnQgaXRlcnRvb2xzCisKK2RlZiBpc19vcHRpb25hbChmZWF0dXJlLCBkKToKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCJGRUFUVVJFX1BBQ0tBR0VTXyVzIiAlIGZlYXR1cmUsIFRydWUpCisgICAgaWYgcGFja2FnZXM6CisgICAgICAgIHJldHVybiBib29sKGQuZ2V0VmFyRmxhZygiRkVBVFVSRV9QQUNLQUdFU18lcyIgJSBmZWF0dXJlLCAib3B0aW9uYWwiKSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gYm9vbChkLmdldFZhckZsYWcoIlBBQ0tBR0VfR1JPVVBfJXMiICUgZmVhdHVyZSwgIm9wdGlvbmFsIikpCisKK2RlZiBwYWNrYWdlcyhmZWF0dXJlcywgZCk6CisgICAgZm9yIGZlYXR1cmUgaW4gZmVhdHVyZXM6CisgICAgICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoIkZFQVRVUkVfUEFDS0FHRVNfJXMiICUgZmVhdHVyZSwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBhY2thZ2VzOgorICAgICAgICAgICAgcGFja2FnZXMgPSBkLmdldFZhcigiUEFDS0FHRV9HUk9VUF8lcyIgJSBmZWF0dXJlLCBUcnVlKQorICAgICAgICBmb3IgcGtnIGluIChwYWNrYWdlcyBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIHlpZWxkIHBrZworCitkZWYgcmVxdWlyZWRfcGFja2FnZXMoZmVhdHVyZXMsIGQpOgorICAgIHJlcSA9IGZpbHRlcihsYW1iZGEgZmVhdHVyZTogbm90IGlzX29wdGlvbmFsKGZlYXR1cmUsIGQpLCBmZWF0dXJlcykKKyAgICByZXR1cm4gcGFja2FnZXMocmVxLCBkKQorCitkZWYgb3B0aW9uYWxfcGFja2FnZXMoZmVhdHVyZXMsIGQpOgorICAgIG9wdCA9IGZpbHRlcihsYW1iZGEgZmVhdHVyZTogaXNfb3B0aW9uYWwoZmVhdHVyZSwgZCksIGZlYXR1cmVzKQorICAgIHJldHVybiBwYWNrYWdlcyhvcHQsIGQpCisKK2RlZiBhY3RpdmVfcGFja2FnZXMoZmVhdHVyZXMsIGQpOgorICAgIHJldHVybiBpdGVydG9vbHMuY2hhaW4ocmVxdWlyZWRfcGFja2FnZXMoZmVhdHVyZXMsIGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfcGFja2FnZXMoZmVhdHVyZXMsIGQpKQorCitkZWYgYWN0aXZlX3JlY2lwZXMoZmVhdHVyZXMsIGQpOgorICAgIGltcG9ydCBvZS5wYWNrYWdlZGF0YQorCisgICAgZm9yIHBrZyBpbiBhY3RpdmVfcGFja2FnZXMoZmVhdHVyZXMsIGQpOgorICAgICAgICByZWNpcGUgPSBvZS5wYWNrYWdlZGF0YS5yZWNpcGVuYW1lKHBrZywgZCkKKyAgICAgICAgaWYgcmVjaXBlOgorICAgICAgICAgICAgeWllbGQgcmVjaXBlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3BhdGNoLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYXRjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhiZjFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYXRjaC5weQpAQCAtMCwwICsxLDY1OSBAQAoraW1wb3J0IG9lLnBhdGgKKworY2xhc3MgTm90Rm91bmRFcnJvcihiYi5CQkhhbmRsZWRFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiRXJyb3I6ICVzIG5vdCBmb3VuZC4iICUgc2VsZi5wYXRoCisKK2NsYXNzIENtZEVycm9yKGJiLkJCSGFuZGxlZEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4aXRzdGF0dXMsIG91dHB1dCk6CisgICAgICAgIHNlbGYuc3RhdHVzID0gZXhpdHN0YXR1cworICAgICAgICBzZWxmLm91dHB1dCA9IG91dHB1dAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiQ29tbWFuZCBFcnJvcjogZXhpdCBzdGF0dXM6ICVkICBPdXRwdXQ6XG4lcyIgJSAoc2VsZi5zdGF0dXMsIHNlbGYub3V0cHV0KQorCisKK2RlZiBydW5jbWQoYXJncywgZGlyID0gTm9uZSk6CisgICAgaW1wb3J0IHBpcGVzCisKKyAgICBpZiBkaXI6CisgICAgICAgIG9sZGRpciA9IG9zLnBhdGguYWJzcGF0aChvcy5jdXJkaXIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXIpOgorICAgICAgICAgICAgcmFpc2UgTm90Rm91bmRFcnJvcihkaXIpCisgICAgICAgIG9zLmNoZGlyKGRpcikKKyAgICAgICAgIyBwcmludCgiY3dkOiAlcyAtPiAlcyIgJSAob2xkZGlyLCBkaXIpKQorCisgICAgdHJ5OgorICAgICAgICBhcmdzID0gWyBwaXBlcy5xdW90ZShzdHIoYXJnKSkgZm9yIGFyZyBpbiBhcmdzIF0KKyAgICAgICAgY21kID0gIiAiLmpvaW4oYXJncykKKyAgICAgICAgIyBwcmludCgiY21kOiAlcyIgJSBjbWQpCisgICAgICAgIChleGl0c3RhdHVzLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICAgICAgaWYgZXhpdHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgcmFpc2UgQ21kRXJyb3IoZXhpdHN0YXR1cyA+PiA4LCBvdXRwdXQpCisgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIGZpbmFsbHk6CisgICAgICAgIGlmIGRpcjoKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZGRpcikKKworY2xhc3MgUGF0Y2hFcnJvcihFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLm1zZyA9IG1zZworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiUGF0Y2ggRXJyb3I6ICVzIiAlIHNlbGYubXNnCisKK2NsYXNzIFBhdGNoU2V0KG9iamVjdCk6CisgICAgZGVmYXVsdHMgPSB7CisgICAgICAgICJzdHJpcHBhdGgiOiAxCisgICAgfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpciwgZCk6CisgICAgICAgIHNlbGYuZGlyID0gZGlyCisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi5wYXRjaGVzID0gW10KKyAgICAgICAgc2VsZi5fY3VycmVudCA9IE5vbmUKKworICAgIGRlZiBjdXJyZW50KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY3VycmVudAorCisgICAgZGVmIENsZWFuKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2xlYW4gb3V0IHRoZSBwYXRjaCBzZXQuICBHZW5lcmFsbHkgaW5jbHVkZXMgdW5hcHBseWluZyBhbGwKKyAgICAgICAgcGF0Y2hlcyBhbmQgd2lwaW5nIG91dCBhbGwgYXNzb2NpYXRlZCBtZXRhZGF0YS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIEltcG9ydChzZWxmLCBwYXRjaCwgZm9yY2UpOgorICAgICAgICBpZiBub3QgcGF0Y2guZ2V0KCJmaWxlIik6CisgICAgICAgICAgICBpZiBub3QgcGF0Y2guZ2V0KCJyZW1vdGUiKToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXRjaEVycm9yKCJQYXRjaCBmaWxlIG11c3QgYmUgc3BlY2lmaWVkIGluIHBhdGNoIGltcG9ydC4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXRjaFsiZmlsZSJdID0gYmIuZmV0Y2gyLmxvY2FscGF0aChwYXRjaFsicmVtb3RlIl0sIHNlbGYuZCkKKworICAgICAgICBmb3IgcGFyYW0gaW4gUGF0Y2hTZXQuZGVmYXVsdHM6CisgICAgICAgICAgICBpZiBub3QgcGF0Y2guZ2V0KHBhcmFtKToKKyAgICAgICAgICAgICAgICBwYXRjaFtwYXJhbV0gPSBQYXRjaFNldC5kZWZhdWx0c1twYXJhbV0KKworICAgICAgICBpZiBwYXRjaC5nZXQoInJlbW90ZSIpOgorICAgICAgICAgICAgcGF0Y2hbImZpbGUiXSA9IGJiLmRhdGEuZXhwYW5kKGJiLmZldGNoMi5sb2NhbHBhdGgocGF0Y2hbInJlbW90ZSJdLCBzZWxmLmQpLCBzZWxmLmQpCisKKyAgICAgICAgcGF0Y2hbImZpbGVtZDUiXSA9IGJiLnV0aWxzLm1kNV9maWxlKHBhdGNoWyJmaWxlIl0pCisKKyAgICBkZWYgUHVzaChzZWxmLCBmb3JjZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIFBvcChzZWxmLCBmb3JjZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIFJlZnJlc2goc2VsZiwgcmVtb3RlID0gTm9uZSwgYWxsID0gTm9uZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBnZXRQYXRjaGVkRmlsZXMocGF0Y2hmaWxlLCBzdHJpcGxldmVsLCBzcmNkaXI9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBSZWFkIGEgcGF0Y2ggZmlsZSBhbmQgZGV0ZXJtaW5lIHdoaWNoIGZpbGVzIGl0IHdpbGwgbW9kaWZ5LgorICAgICAgICBQYXJhbXM6CisgICAgICAgICAgICBwYXRjaGZpbGU6IHRoZSBwYXRjaCBmaWxlIHRvIHJlYWQKKyAgICAgICAgICAgIHN0cmlwbGV2ZWw6IHRoZSBzdHJpcCBsZXZlbCBhdCB3aGljaCB0aGUgcGF0Y2ggaXMgZ29pbmcgdG8gYmUgYXBwbGllZAorICAgICAgICAgICAgc3JjZGlyOiBvcHRpb25hbCBwYXRoIHRvIGpvaW4gb250byB0aGUgcGF0Y2hlZCBmaWxlIHBhdGhzCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIGxpc3Qgb2YgdHVwbGVzIG9mIGZpbGUgcGF0aCBhbmQgY2hhbmdlIG1vZGUgKCdBJyBmb3IgYWRkLAorICAgICAgICAgICAgJ0QnIGZvciBkZWxldGUgb3IgJ00nIGZvciBtb2RpZnkpCisgICAgICAgICIiIgorCisgICAgICAgIGRlZiBwYXRjaGVkcGF0aChwYXRjaGxpbmUpOgorICAgICAgICAgICAgZmlsZXB0aCA9IHBhdGNobGluZS5zcGxpdCgpWzFdCisgICAgICAgICAgICBpZiBmaWxlcHRoLmVuZHN3aXRoKCcvZGV2L251bGwnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJy9kZXYvbnVsbCcKKyAgICAgICAgICAgIGZpbGVzcGxpdCA9IGZpbGVwdGguc3BsaXQob3Muc2VwKQorICAgICAgICAgICAgaWYgc3RyaXBsZXZlbCA+IGxlbihmaWxlc3BsaXQpOgorICAgICAgICAgICAgICAgIGJiLmVycm9yKCdQYXRjaCAlcyBoYXMgaW52YWxpZCBzdHJpcCBsZXZlbCAlZCcgJSAocGF0Y2hmaWxlLCBzdHJpcGxldmVsKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgcmV0dXJuIG9zLnNlcC5qb2luKGZpbGVzcGxpdFtzdHJpcGxldmVsOl0pCisKKyAgICAgICAgY29waWVkbW9kZSA9IEZhbHNlCisgICAgICAgIGZpbGVsaXN0ID0gW10KKyAgICAgICAgd2l0aCBvcGVuKHBhdGNoZmlsZSkgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCctLS0gJyk6CisgICAgICAgICAgICAgICAgICAgIHBhdGNocHRoID0gcGF0Y2hlZHBhdGgobGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBhdGNocHRoOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaWYgY29waWVkbW9kZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkZmlsZSA9IHBhdGNocHRoCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkZmlsZSA9IHBhdGNocHRoCisgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJysrKyAnKToKKyAgICAgICAgICAgICAgICAgICAgYWRkZWRmaWxlID0gcGF0Y2hlZHBhdGgobGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGFkZGVkZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJyoqKiAnKToKKyAgICAgICAgICAgICAgICAgICAgY29waWVkbW9kZSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZGZpbGUgPSBwYXRjaGVkcGF0aChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVtb3ZlZGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRmaWxlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBhZGRlZGZpbGUgPSBOb25lCisKKyAgICAgICAgICAgICAgICBpZiBhZGRlZGZpbGUgYW5kIHJlbW92ZWRmaWxlOgorICAgICAgICAgICAgICAgICAgICBpZiByZW1vdmVkZmlsZSA9PSAnL2Rldi9udWxsJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAnQScKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBhZGRlZGZpbGUgPT0gJy9kZXYvbnVsbCc6CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gJ0QnCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gJ00nCisgICAgICAgICAgICAgICAgICAgIGlmIHNyY2RpcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihzcmNkaXIsIGFkZGVkZmlsZSkpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmdWxscGF0aCA9IGFkZGVkZmlsZQorICAgICAgICAgICAgICAgICAgICBmaWxlbGlzdC5hcHBlbmQoKGZ1bGxwYXRoLCBtb2RlKSkKKworICAgICAgICByZXR1cm4gZmlsZWxpc3QKKworCitjbGFzcyBQYXRjaFRyZWUoUGF0Y2hTZXQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXIsIGQpOgorICAgICAgICBQYXRjaFNldC5fX2luaXRfXyhzZWxmLCBkaXIsIGQpCisgICAgICAgIHNlbGYucGF0Y2hkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdwYXRjaGVzJykKKyAgICAgICAgc2VsZi5zZXJpZXNwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuZGlyLCAncGF0Y2hlcycsICdzZXJpZXMnKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5wYXRjaGRpcikKKworICAgIGRlZiBfYXBwZW5kUGF0Y2hGaWxlKHNlbGYsIHBhdGNoLCBzdHJpcHBhdGgpOgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5zZXJpZXNwYXRoLCAnYScpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpICsgIiwiICsgc3RyaXBwYXRoICsgIlxuIikKKyAgICAgICAgc2hlbGxjbWQgPSBbImNhdCIsIHBhdGNoLCAiPiIgLCBzZWxmLnBhdGNoZGlyICsgIi8iICsgb3MucGF0aC5iYXNlbmFtZShwYXRjaCldCisgICAgICAgIHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisKKyAgICBkZWYgX3JlbW92ZVBhdGNoKHNlbGYsIHApOgorICAgICAgICBwYXRjaCA9IHt9CisgICAgICAgIHBhdGNoWydmaWxlJ10gPSBwLnNwbGl0KCIsIilbMF0KKyAgICAgICAgcGF0Y2hbJ3N0cmlwcGF0aCddID0gcC5zcGxpdCgiLCIpWzFdCisgICAgICAgIHNlbGYuX2FwcGx5cGF0Y2gocGF0Y2gsIEZhbHNlLCBUcnVlKQorCisgICAgZGVmIF9yZW1vdmVQYXRjaEZpbGUoc2VsZiwgYWxsID0gRmFsc2UpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5zZXJpZXNwYXRoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5zZXJpZXNwYXRoLCAncisnKSBhcyBmOgorICAgICAgICAgICAgcGF0Y2hlcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgaWYgYWxsOgorICAgICAgICAgICAgZm9yIHAgaW4gcmV2ZXJzZWQocGF0Y2hlcyk6CisgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlUGF0Y2gob3MucGF0aC5qb2luKHNlbGYucGF0Y2hkaXIsIHAuc3RyaXAoKSkpCisgICAgICAgICAgICBwYXRjaGVzID0gW10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3JlbW92ZVBhdGNoKG9zLnBhdGguam9pbihzZWxmLnBhdGNoZGlyLCBwYXRjaGVzWy0xXS5zdHJpcCgpKSkKKyAgICAgICAgICAgIHBhdGNoZXMucG9wKCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuc2VyaWVzcGF0aCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZm9yIHAgaW4gcGF0Y2hlczoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHApCisgICAgICAgICAKKyAgICBkZWYgSW1wb3J0KHNlbGYsIHBhdGNoLCBmb3JjZSA9IE5vbmUpOgorICAgICAgICAiIiIiIiIKKyAgICAgICAgUGF0Y2hTZXQuSW1wb3J0KHNlbGYsIHBhdGNoLCBmb3JjZSkKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaSA9IHNlbGYuX2N1cnJlbnQgKyAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpID0gMAorICAgICAgICBzZWxmLnBhdGNoZXMuaW5zZXJ0KGksIHBhdGNoKQorCisgICAgZGVmIF9hcHBseXBhdGNoKHNlbGYsIHBhdGNoLCBmb3JjZSA9IEZhbHNlLCByZXZlcnNlID0gRmFsc2UsIHJ1biA9IFRydWUpOgorICAgICAgICBzaGVsbGNtZCA9IFsiY2F0IiwgcGF0Y2hbJ2ZpbGUnXSwgInwiLCAicGF0Y2giLCAiLXAiLCBwYXRjaFsnc3RyaXBwYXRoJ11dCisgICAgICAgIGlmIHJldmVyc2U6CisgICAgICAgICAgICBzaGVsbGNtZC5hcHBlbmQoJy1SJykKKworICAgICAgICBpZiBub3QgcnVuOgorICAgICAgICAgICAgcmV0dXJuICJzaCIgKyAiLWMiICsgIiAiLmpvaW4oc2hlbGxjbWQpCisKKyAgICAgICAgaWYgbm90IGZvcmNlOgorICAgICAgICAgICAgc2hlbGxjbWQuYXBwZW5kKCctLWRyeS1ydW4nKQorCisgICAgICAgIG91dHB1dCA9IHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisKKyAgICAgICAgaWYgZm9yY2U6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzaGVsbGNtZC5wb3AobGVuKHNoZWxsY21kKSAtIDEpCisgICAgICAgIG91dHB1dCA9IHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisKKyAgICAgICAgaWYgbm90IHJldmVyc2U6CisgICAgICAgICAgICBzZWxmLl9hcHBlbmRQYXRjaEZpbGUocGF0Y2hbJ2ZpbGUnXSwgcGF0Y2hbJ3N0cmlwcGF0aCddKQorCisgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIGRlZiBQdXNoKHNlbGYsIGZvcmNlID0gRmFsc2UsIGFsbCA9IEZhbHNlLCBydW4gPSBUcnVlKToKKyAgICAgICAgYmIubm90ZSgic2VsZi5fY3VycmVudCBpcyAlcyIgJSBzZWxmLl9jdXJyZW50KQorICAgICAgICBiYi5ub3RlKCJwYXRjaGVzIGlzICVzIiAlIHNlbGYucGF0Y2hlcykKKyAgICAgICAgaWYgYWxsOgorICAgICAgICAgICAgZm9yIGkgaW4gc2VsZi5wYXRjaGVzOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoImFwcGx5aW5nIHBhdGNoICVzIiAlIGkpCisgICAgICAgICAgICAgICAgc2VsZi5fYXBwbHlwYXRjaChpLCBmb3JjZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gaQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBuZXh0ID0gc2VsZi5fY3VycmVudCArIDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV4dCA9IDAKKworICAgICAgICAgICAgYmIubm90ZSgiYXBwbHlpbmcgcGF0Y2ggJXMiICUgc2VsZi5wYXRjaGVzW25leHRdKQorICAgICAgICAgICAgcmV0ID0gc2VsZi5fYXBwbHlwYXRjaChzZWxmLnBhdGNoZXNbbmV4dF0sIGZvcmNlKQorCisgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gbmV4dAorICAgICAgICAgICAgcmV0dXJuIHJldAorCisgICAgZGVmIFBvcChzZWxmLCBmb3JjZSA9IE5vbmUsIGFsbCA9IE5vbmUpOgorICAgICAgICBpZiBhbGw6CisgICAgICAgICAgICBzZWxmLl9yZW1vdmVQYXRjaEZpbGUoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnQgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9yZW1vdmVQYXRjaEZpbGUoRmFsc2UpCisKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudCA9PSAwOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IE5vbmUKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IHNlbGYuX2N1cnJlbnQgLSAxCisKKyAgICBkZWYgQ2xlYW4oc2VsZik6CisgICAgICAgICIiIiIiIgorICAgICAgICBzZWxmLlBvcChhbGw9VHJ1ZSkKKworY2xhc3MgR2l0QXBwbHlUcmVlKFBhdGNoVHJlZSk6CisgICAgcGF0Y2hfbGluZV9wcmVmaXggPSAnJSUgb3JpZ2luYWwgcGF0Y2gnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGlyLCBkKToKKyAgICAgICAgUGF0Y2hUcmVlLl9faW5pdF9fKHNlbGYsIGRpciwgZCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXh0cmFjdFBhdGNoSGVhZGVyKHBhdGNoZmlsZSk6CisgICAgICAgICIiIgorICAgICAgICBFeHRyYWN0IGp1c3QgdGhlIGhlYWRlciBsaW5lcyBmcm9tIHRoZSB0b3Agb2YgYSBwYXRjaCBmaWxlCisgICAgICAgICIiIgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIHdpdGggb3BlbihwYXRjaGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdJbmRleDogJykgb3IgbGluZS5zdGFydHN3aXRoKCdkaWZmIC0nKSBvciBsaW5lLnN0YXJ0c3dpdGgoJy0tLScpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICByZXR1cm4gbGluZXMKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcHJlcGFyZUNvbW1pdChwYXRjaGZpbGUpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBhIGdpdCBjb21taXQgY29tbWFuZCBsaW5lIGJhc2VkIG9uIHRoZSBoZWFkZXIgZnJvbSBhIHBhdGNoIGZpbGUKKyAgICAgICAgKHR5cGljYWxseSB0aGlzIGlzIHVzZWZ1bCBmb3IgcGF0Y2hlcyB0aGF0IGNhbm5vdCBiZSBhcHBsaWVkIHdpdGggImdpdCBhbSIgZHVlIHRvIGZvcm1hdHRpbmcpCisgICAgICAgICIiIgorICAgICAgICBpbXBvcnQgdGVtcGZpbGUKKyAgICAgICAgaW1wb3J0IHJlCisgICAgICAgIGF1dGhvcl9yZSA9IHJlLmNvbXBpbGUoJ1tcUyBdKyA8XFMrQFxTK1wuXFMrPicpCisgICAgICAgICMgUHJvY2VzcyBwYXRjaCBoZWFkZXIgYW5kIGV4dHJhY3QgdXNlZnVsIGluZm9ybWF0aW9uCisgICAgICAgIGxpbmVzID0gR2l0QXBwbHlUcmVlLmV4dHJhY3RQYXRjaEhlYWRlcihwYXRjaGZpbGUpCisgICAgICAgIG91dGxpbmVzID0gW10KKyAgICAgICAgYXV0aG9yID0gTm9uZQorICAgICAgICBkYXRlID0gTm9uZQorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnU3ViamVjdDogJyk6CisgICAgICAgICAgICAgICAgc3ViamVjdCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXQorICAgICAgICAgICAgICAgICMgUmVtb3ZlIGFueSBbUEFUQ0hdW29lLWNvcmVdIGV0Yy4KKyAgICAgICAgICAgICAgICBzdWJqZWN0ID0gcmUuc3ViKHInXFsuKz9cXVxzKicsICcnLCBzdWJqZWN0KQorICAgICAgICAgICAgICAgIG91dGxpbmVzLmluc2VydCgwLCAnJXNcblxuJyAlIHN1YmplY3Quc3RyaXAoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdGcm9tOiAnKSBvciBsaW5lLnN0YXJ0c3dpdGgoJ0F1dGhvcjogJyk6CisgICAgICAgICAgICAgICAgYXV0aG9ydmFsID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkucmVwbGFjZSgnIicsICcnKQorICAgICAgICAgICAgICAgICMgZ2l0IGlzIGZ1c3N5IGFib3V0IGF1dGhvciBmb3JtYXR0aW5nIGkuZS4gaXQgbXVzdCBiZSBOYW1lIDxlbWFpbEBkb21haW4+CisgICAgICAgICAgICAgICAgaWYgYXV0aG9yX3JlLm1hdGNoKGF1dGhvcnZhbCk6CisgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9IGF1dGhvcnZhbAorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdEYXRlOiAnKToKKyAgICAgICAgICAgICAgICBpZiBkYXRlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGRhdGV2YWwgPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAjIFZlcnkgY3J1ZGUgY2hlY2sgZm9yIGRhdGUgZm9ybWF0LCBzaW5jZSBnaXQgd2lsbCBibG93IHVwIGlmIGl0J3Mgbm90IGluIHRoZSByaWdodAorICAgICAgICAgICAgICAgICAgICAjIGZvcm1hdC4gV2l0aG91dCBlLmcuIGEgcHl0aG9uLWRhdGV1dGlscyBkZXBlbmRlbmN5IHdlIGNhbid0IGRvIGEgd2hvbGUgbG90IG1vcmUKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGRhdGV2YWwpID4gMTI6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRlID0gZGF0ZXZhbAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1NpZ25lZC1vZmYtYnk6ICcpOgorICAgICAgICAgICAgICAgIGF1dGhvcnZhbCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpLnJlcGxhY2UoJyInLCAnJykKKyAgICAgICAgICAgICAgICAjIGdpdCBpcyBmdXNzeSBhYm91dCBhdXRob3IgZm9ybWF0dGluZyBpLmUuIGl0IG11c3QgYmUgTmFtZSA8ZW1haWxAZG9tYWluPgorICAgICAgICAgICAgICAgIGlmIGF1dGhvcl9yZS5tYXRjaChhdXRob3J2YWwpOgorICAgICAgICAgICAgICAgICAgICBhdXRob3IgPSBhdXRob3J2YWwKKyAgICAgICAgICAgIG91dGxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAjIFdyaXRlIG91dCBjb21taXQgbWVzc2FnZSB0byBhIGZpbGUKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoJ3cnLCBkZWxldGU9RmFsc2UpIGFzIHRmOgorICAgICAgICAgICAgdG1wZmlsZSA9IHRmLm5hbWUKKyAgICAgICAgICAgIGZvciBsaW5lIGluIG91dGxpbmVzOgorICAgICAgICAgICAgICAgIHRmLndyaXRlKGxpbmUpCisgICAgICAgICMgUHJlcGFyZSBnaXQgY29tbWFuZAorICAgICAgICBjbWQgPSBbImdpdCIsICJjb21taXQiLCAiLUYiLCB0bXBmaWxlXQorICAgICAgICAjIGdpdCBkb2Vzbid0IGxpa2UgcGxhaW4gZW1haWwgYWRkcmVzc2VzIGFzIGF1dGhvcnMKKyAgICAgICAgaWYgYXV0aG9yIGFuZCAnPCcgaW4gYXV0aG9yOgorICAgICAgICAgICAgY21kLmFwcGVuZCgnLS1hdXRob3I9IiVzIicgJSBhdXRob3IpCisgICAgICAgIGlmIGRhdGU6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCctLWRhdGU9IiVzIicgJSBkYXRlKQorICAgICAgICByZXR1cm4gKHRtcGZpbGUsIGNtZCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXh0cmFjdFBhdGNoZXModHJlZSwgc3RhcnRjb21taXQsIG91dGRpcik6CisgICAgICAgIGltcG9ydCB0ZW1wZmlsZQorICAgICAgICBpbXBvcnQgc2h1dGlsCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nb2VwYXRjaCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNoZWxsY21kID0gWyJnaXQiLCAiZm9ybWF0LXBhdGNoIiwgc3RhcnRjb21taXQsICItbyIsIHRlbXBkaXJdCisgICAgICAgICAgICBvdXQgPSBydW5jbWQoWyJzaCIsICItYyIsICIgIi5qb2luKHNoZWxsY21kKV0sIHRyZWUpCisgICAgICAgICAgICBpZiBvdXQ6CisgICAgICAgICAgICAgICAgZm9yIHNyY2ZpbGUgaW4gb3V0LnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIHBhdGNobGluZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICBvdXRmaWxlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc3JjZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoR2l0QXBwbHlUcmVlLnBhdGNoX2xpbmVfcHJlZml4KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZmlsZSA9IGxpbmUuc3BsaXQoKVstMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNobGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvdXRmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZmlsZSA9IG9zLnBhdGguYmFzZW5hbWUoc3JjZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihvdXRkaXIsIG91dGZpbGUpLCAndycpIGFzIG9mOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gcGF0Y2hsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZi53cml0ZShsaW5lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorCisgICAgZGVmIF9hcHBseXBhdGNoKHNlbGYsIHBhdGNoLCBmb3JjZSA9IEZhbHNlLCByZXZlcnNlID0gRmFsc2UsIHJ1biA9IFRydWUpOgorICAgICAgICBpbXBvcnQgc2h1dGlsCisKKyAgICAgICAgZGVmIF9hcHBseXBhdGNoaGVscGVyKHNoZWxsY21kLCBwYXRjaCwgZm9yY2UgPSBGYWxzZSwgcmV2ZXJzZSA9IEZhbHNlLCBydW4gPSBUcnVlKToKKyAgICAgICAgICAgIGlmIHJldmVyc2U6CisgICAgICAgICAgICAgICAgc2hlbGxjbWQuYXBwZW5kKCctUicpCisKKyAgICAgICAgICAgIHNoZWxsY21kLmFwcGVuZChwYXRjaFsnZmlsZSddKQorCisgICAgICAgICAgICBpZiBub3QgcnVuOgorICAgICAgICAgICAgICAgIHJldHVybiAic2giICsgIi1jIiArICIgIi5qb2luKHNoZWxsY21kKQorCisgICAgICAgICAgICByZXR1cm4gcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKKworICAgICAgICAjIEFkZCBob29rcyB3aGljaCBhZGQgYSBwb2ludGVyIHRvIHRoZSBvcmlnaW5hbCBwYXRjaCBmaWxlIG5hbWUgaW4gdGhlIGNvbW1pdCBtZXNzYWdlCisgICAgICAgIHJlcG9yb290ID0gKHJ1bmNtZCgiZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwiLnNwbGl0KCksIHNlbGYuZGlyKSBvciAnJykuc3RyaXAoKQorICAgICAgICBpZiBub3QgcmVwb3Jvb3Q6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNhbm5vdCBnZXQgcmVwb3NpdG9yeSByb290IGZvciBkaXJlY3RvcnkgJXMiICUgc2VsZi5kaXIpCisgICAgICAgIGNvbW1pdGhvb2sgPSBvcy5wYXRoLmpvaW4ocmVwb3Jvb3QsICcuZ2l0JywgJ2hvb2tzJywgJ2NvbW1pdC1tc2cnKQorICAgICAgICBjb21taXRob29rX2JhY2t1cCA9IGNvbW1pdGhvb2sgKyAnLmRldnRvb2wtb3JpZycKKyAgICAgICAgYXBwbHlob29rID0gb3MucGF0aC5qb2luKHJlcG9yb290LCAnLmdpdCcsICdob29rcycsICdhcHBseXBhdGNoLW1zZycpCisgICAgICAgIGFwcGx5aG9va19iYWNrdXAgPSBhcHBseWhvb2sgKyAnLmRldnRvb2wtb3JpZycKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29tbWl0aG9vayk6CisgICAgICAgICAgICBzaHV0aWwubW92ZShjb21taXRob29rLCBjb21taXRob29rX2JhY2t1cCkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoYXBwbHlob29rKToKKyAgICAgICAgICAgIHNodXRpbC5tb3ZlKGFwcGx5aG9vaywgYXBwbHlob29rX2JhY2t1cCkKKyAgICAgICAgd2l0aCBvcGVuKGNvbW1pdGhvb2ssICd3JykgYXMgZjoKKyAgICAgICAgICAgICMgTk9URTogdGhlIGZvcm1hdHRpbmcgaGVyZSBpcyBzaWduaWZpY2FudDsgaWYgeW91IGNoYW5nZSBpdCB5b3UnbGwgYWxzbyBuZWVkIHRvCisgICAgICAgICAgICAjIGNoYW5nZSBvdGhlciBwbGFjZXMgd2hpY2ggcmVhZCBpdCBiYWNrCisgICAgICAgICAgICBmLndyaXRlKCdlY2hvID4+ICQxXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnZWNobyAiJXM6ICRQQVRDSEZJTEUiID4+ICQxXG4nICUgR2l0QXBwbHlUcmVlLnBhdGNoX2xpbmVfcHJlZml4KQorICAgICAgICBvcy5jaG1vZChjb21taXRob29rLCAwNzU1KQorICAgICAgICBzaHV0aWwuY29weTIoY29tbWl0aG9vaywgYXBwbHlob29rKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXRjaGZpbGV2YXIgPSAnUEFUQ0hGSUxFPSIlcyInICUgb3MucGF0aC5iYXNlbmFtZShwYXRjaFsnZmlsZSddKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNoZWxsY21kID0gW3BhdGNoZmlsZXZhciwgImdpdCIsICItLXdvcmstdHJlZT0lcyIgJSByZXBvcm9vdCwgImFtIiwgIi0zIiwgIi0ta2VlcC1jciIsICItcCVzIiAlIHBhdGNoWydzdHJpcHBhdGgnXV0KKyAgICAgICAgICAgICAgICByZXR1cm4gX2FwcGx5cGF0Y2hoZWxwZXIoc2hlbGxjbWQsIHBhdGNoLCBmb3JjZSwgcmV2ZXJzZSwgcnVuKQorICAgICAgICAgICAgZXhjZXB0IENtZEVycm9yOgorICAgICAgICAgICAgICAgICMgTmVlZCB0byBhYm9ydCB0aGUgZ2l0IGFtLCBvciB3ZSdsbCBzdGlsbCBiZSB3aXRoaW4gaXQgYXQgdGhlIGVuZAorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2hlbGxjbWQgPSBbImdpdCIsICItLXdvcmstdHJlZT0lcyIgJSByZXBvcm9vdCwgImFtIiwgIi0tYWJvcnQiXQorICAgICAgICAgICAgICAgICAgICBydW5jbWQoWyJzaCIsICItYyIsICIgIi5qb2luKHNoZWxsY21kKV0sIHNlbGYuZGlyKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBDbWRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICMgRmFsbCBiYWNrIHRvIGdpdCBhcHBseQorICAgICAgICAgICAgICAgIHNoZWxsY21kID0gWyJnaXQiLCAiLS1naXQtZGlyPSVzIiAlIHJlcG9yb290LCAiYXBwbHkiLCAiLXAlcyIgJSBwYXRjaFsnc3RyaXBwYXRoJ11dCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBfYXBwbHlwYXRjaGhlbHBlcihzaGVsbGNtZCwgcGF0Y2gsIGZvcmNlLCByZXZlcnNlLCBydW4pCisgICAgICAgICAgICAgICAgZXhjZXB0IENtZEVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIEZhbGwgYmFjayB0byBwYXRjaAorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBQYXRjaFRyZWUuX2FwcGx5cGF0Y2goc2VsZiwgcGF0Y2gsIGZvcmNlLCByZXZlcnNlLCBydW4pCisgICAgICAgICAgICAgICAgIyBBZGQgYWxsIGZpbGVzCisgICAgICAgICAgICAgICAgc2hlbGxjbWQgPSBbImdpdCIsICJhZGQiLCAiLWYiLCAiLUEiLCAiLiJdCisgICAgICAgICAgICAgICAgb3V0cHV0ICs9IHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisgICAgICAgICAgICAgICAgIyBFeGNsdWRlIHRoZSBwYXRjaGVzIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIHNoZWxsY21kID0gWyJnaXQiLCAicmVzZXQiLCAiSEVBRCIsIHNlbGYucGF0Y2hkaXJdCisgICAgICAgICAgICAgICAgb3V0cHV0ICs9IHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisgICAgICAgICAgICAgICAgIyBDb21taXQgdGhlIHJlc3VsdAorICAgICAgICAgICAgICAgICh0bXBmaWxlLCBzaGVsbGNtZCkgPSBzZWxmLnByZXBhcmVDb21taXQocGF0Y2hbJ2ZpbGUnXSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNoZWxsY21kLmluc2VydCgwLCBwYXRjaGZpbGV2YXIpCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBydW5jbWQoWyJzaCIsICItYyIsICIgIi5qb2luKHNoZWxsY21kKV0sIHNlbGYuZGlyKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0bXBmaWxlKQorICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZShjb21taXRob29rKQorICAgICAgICAgICAgb3MucmVtb3ZlKGFwcGx5aG9vaykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbW1pdGhvb2tfYmFja3VwKToKKyAgICAgICAgICAgICAgICBzaHV0aWwubW92ZShjb21taXRob29rX2JhY2t1cCwgY29tbWl0aG9vaykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGFwcGx5aG9va19iYWNrdXApOgorICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKGFwcGx5aG9va19iYWNrdXAsIGFwcGx5aG9vaykKKworCitjbGFzcyBRdWlsdFRyZWUoUGF0Y2hTZXQpOgorICAgIGRlZiBfcnVuY21kKHNlbGYsIGFyZ3MsIHJ1biA9IFRydWUpOgorICAgICAgICBxdWlsdHJjID0gc2VsZi5kLmdldFZhcignUVVJTFRSQ0ZJTEUnLCBUcnVlKQorICAgICAgICBpZiBub3QgcnVuOgorICAgICAgICAgICAgcmV0dXJuIFsicXVpbHQiXSArIFsiLS1xdWlsdHJjIl0gKyBbcXVpbHRyY10gKyBhcmdzCisgICAgICAgIHJ1bmNtZChbInF1aWx0Il0gKyBbIi0tcXVpbHRyYyJdICsgW3F1aWx0cmNdICsgYXJncywgc2VsZi5kaXIpCisKKyAgICBkZWYgX3F1aWx0cGF0Y2hwYXRoKHNlbGYsIGZpbGUpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuZGlyLCAicGF0Y2hlcyIsIG9zLnBhdGguYmFzZW5hbWUoZmlsZSkpCisKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXIsIGQpOgorICAgICAgICBQYXRjaFNldC5fX2luaXRfXyhzZWxmLCBkaXIsIGQpCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSBGYWxzZQorICAgICAgICBwID0gb3MucGF0aC5qb2luKHNlbGYuZGlyLCAncGF0Y2hlcycpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKHApCisKKyAgICBkZWYgQ2xlYW4oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3J1bmNtZChbInBvcCIsICItYSIsICItZiJdKQorICAgICAgICAgICAgb2UucGF0aC5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYuZGlyLCAicGF0Y2hlcyIsInNlcmllcyIpKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gVHJ1ZQorCisgICAgZGVmIEluaXRGcm9tRGlyKHNlbGYpOgorICAgICAgICAjIHJlYWQgc2VyaWVzIC0+IHNlbGYucGF0Y2hlcworICAgICAgICBzZXJpZXNwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuZGlyLCAncGF0Y2hlcycsICdzZXJpZXMnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5kaXIpOgorICAgICAgICAgICAgcmFpc2UgTm90Rm91bmRFcnJvcihzZWxmLmRpcikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VyaWVzcGF0aCk6CisgICAgICAgICAgICB3aXRoIG9wZW4oc2VyaWVzcGF0aCwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgICAgIHBhdGNoID0ge30KKyAgICAgICAgICAgICAgICAgICAgcGFydHMgPSBsaW5lLnN0cmlwKCkuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICBwYXRjaFsicXVpbHRmaWxlIl0gPSBzZWxmLl9xdWlsdHBhdGNocGF0aChwYXJ0c1swXSkKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hbInF1aWx0ZmlsZW1kNSJdID0gYmIudXRpbHMubWQ1X2ZpbGUocGF0Y2hbInF1aWx0ZmlsZSJdKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocGFydHMpID4gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoWyJzdHJpcHBhdGgiXSA9IHBhcnRzWzFdWzI6XQorICAgICAgICAgICAgICAgICAgICBzZWxmLnBhdGNoZXMuYXBwZW5kKHBhdGNoKQorCisgICAgICAgICAgICAjIGRldGVybWluZSB3aGljaCBwYXRjaGVzIGFyZSBhcHBsaWVkIC0+IHNlbGYuX2N1cnJlbnQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBydW5jbWQoWyJxdWlsdCIsICJhcHBsaWVkIl0sIHNlbGYuZGlyKQorICAgICAgICAgICAgZXhjZXB0IENtZEVycm9yOgorICAgICAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgICAgICBpZiBzeXMuZXhjX3ZhbHVlLm91dHB1dC5zdHJpcCgpID09ICJObyBwYXRjaGVzIGFwcGxpZWQiOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgb3V0cHV0ID0gW3ZhbCBmb3IgdmFsIGluIG91dHB1dC5zcGxpdCgnXG4nKSBpZiBub3QgdmFsLnN0YXJ0c3dpdGgoJyMnKV0KKyAgICAgICAgICAgIGZvciBwYXRjaCBpbiBzZWxmLnBhdGNoZXM6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5iYXNlbmFtZShwYXRjaFsicXVpbHRmaWxlIl0pID09IG91dHB1dFstMV06CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnQgPSBzZWxmLnBhdGNoZXMuaW5kZXgocGF0Y2gpCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSBUcnVlCisKKyAgICBkZWYgSW1wb3J0KHNlbGYsIHBhdGNoLCBmb3JjZSA9IE5vbmUpOgorICAgICAgICBpZiBub3Qgc2VsZi5pbml0aWFsaXplZDoKKyAgICAgICAgICAgIHNlbGYuSW5pdEZyb21EaXIoKQorICAgICAgICBQYXRjaFNldC5JbXBvcnQoc2VsZiwgcGF0Y2gsIGZvcmNlKQorICAgICAgICBvZS5wYXRoLnN5bWxpbmsocGF0Y2hbImZpbGUiXSwgc2VsZi5fcXVpbHRwYXRjaHBhdGgocGF0Y2hbImZpbGUiXSksIGZvcmNlPVRydWUpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICJwYXRjaGVzIiwgInNlcmllcyIpLCAiYSIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKG9zLnBhdGguYmFzZW5hbWUocGF0Y2hbImZpbGUiXSkgKyAiIC1wIiArIHBhdGNoWyJzdHJpcHBhdGgiXSArICJcbiIpCisgICAgICAgIHBhdGNoWyJxdWlsdGZpbGUiXSA9IHNlbGYuX3F1aWx0cGF0Y2hwYXRoKHBhdGNoWyJmaWxlIl0pCisgICAgICAgIHBhdGNoWyJxdWlsdGZpbGVtZDUiXSA9IGJiLnV0aWxzLm1kNV9maWxlKHBhdGNoWyJxdWlsdGZpbGUiXSkKKworICAgICAgICAjIFRPRE86IGRldGVybWluZSBpZiB0aGUgZmlsZSBiZWluZyBpbXBvcnRlZDoKKyAgICAgICAgIyAgICAgIDEpIGlzIGFscmVhZHkgaW1wb3J0ZWQsIGFuZCBpcyB0aGUgc2FtZQorICAgICAgICAjICAgICAgMikgaXMgYWxyZWFkeSBpbXBvcnRlZCwgYnV0IGRpZmZlcnMKKworICAgICAgICBzZWxmLnBhdGNoZXMuaW5zZXJ0KHNlbGYuX2N1cnJlbnQgb3IgMCwgcGF0Y2gpCisKKworICAgIGRlZiBQdXNoKHNlbGYsIGZvcmNlID0gRmFsc2UsIGFsbCA9IEZhbHNlLCBydW4gPSBUcnVlKToKKyAgICAgICAgIyBxdWlsdCBwdXNoIFstZl0KKworICAgICAgICBhcmdzID0gWyJwdXNoIl0KKyAgICAgICAgaWYgZm9yY2U6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgiLWYiKQorICAgICAgICBpZiBhbGw6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgiLWEiKQorICAgICAgICBpZiBub3QgcnVuOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bmNtZChhcmdzLCBydW4pCisKKyAgICAgICAgc2VsZi5fcnVuY21kKGFyZ3MpCisKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnQgPSBzZWxmLl9jdXJyZW50ICsgMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IDAKKworICAgIGRlZiBQb3Aoc2VsZiwgZm9yY2UgPSBOb25lLCBhbGwgPSBOb25lKToKKyAgICAgICAgIyBxdWlsdCBwb3AgWy1mXQorICAgICAgICBhcmdzID0gWyJwb3AiXQorICAgICAgICBpZiBmb3JjZToKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItZiIpCisgICAgICAgIGlmIGFsbDoKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItYSIpCisKKyAgICAgICAgc2VsZi5fcnVuY21kKGFyZ3MpCisKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudCA9PSAwOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IE5vbmUKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IHNlbGYuX2N1cnJlbnQgLSAxCisKKyAgICBkZWYgUmVmcmVzaChzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGt3YXJncy5nZXQoInJlbW90ZSIpOgorICAgICAgICAgICAgcGF0Y2ggPSBzZWxmLnBhdGNoZXNba3dhcmdzWyJwYXRjaCJdXQorICAgICAgICAgICAgaWYgbm90IHBhdGNoOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhdGNoRXJyb3IoIk5vIHBhdGNoIGZvdW5kIGF0IGluZGV4ICVzIGluIHBhdGNoc2V0LiIgJSBrd2FyZ3NbInBhdGNoIl0pCisgICAgICAgICAgICAodHlwZSwgaG9zdCwgcGF0aCwgdXNlciwgcHN3ZCwgcGFybSkgPSBiYi5mZXRjaC5kZWNvZGV1cmwocGF0Y2hbInJlbW90ZSJdKQorICAgICAgICAgICAgaWYgdHlwZSA9PSAiZmlsZSI6CisgICAgICAgICAgICAgICAgaW1wb3J0IHNodXRpbAorICAgICAgICAgICAgICAgIGlmIG5vdCBwYXRjaC5nZXQoImZpbGUiKSBhbmQgcGF0Y2guZ2V0KCJyZW1vdGUiKToKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hbImZpbGUiXSA9IGJiLmZldGNoMi5sb2NhbHBhdGgocGF0Y2hbInJlbW90ZSJdLCBzZWxmLmQpCisKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUocGF0Y2hbInF1aWx0ZmlsZSJdLCBwYXRjaFsiZmlsZSJdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXRjaEVycm9yKCJVbmFibGUgdG8gZG8gYSByZW1vdGUgcmVmcmVzaCBvZiAlcywgdW5zdXBwb3J0ZWQgcmVtb3RlIHVybCBzY2hlbWUgJXMuIiAlIChvcy5wYXRoLmJhc2VuYW1lKHBhdGNoWyJxdWlsdGZpbGUiXSksIHR5cGUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBxdWlsdCByZWZyZXNoCisgICAgICAgICAgICBhcmdzID0gWyJyZWZyZXNoIl0KKyAgICAgICAgICAgIGlmIGt3YXJncy5nZXQoInF1aWx0ZmlsZSIpOgorICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKG9zLnBhdGguYmFzZW5hbWUoa3dhcmdzWyJxdWlsdGZpbGUiXSkpCisgICAgICAgICAgICBlbGlmIGt3YXJncy5nZXQoInBhdGNoIik6CisgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQob3MucGF0aC5iYXNlbmFtZShzZWxmLnBhdGNoZXNba3dhcmdzWyJwYXRjaCJdXVsicXVpbHRmaWxlIl0pKQorICAgICAgICAgICAgc2VsZi5fcnVuY21kKGFyZ3MpCisKK2NsYXNzIFJlc29sdmVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGNoc2V0LCB0ZXJtaW5hbCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIFJlc29sdmUoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIFJldmVydChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgRmluYWxpemUoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCitjbGFzcyBOT09QUmVzb2x2ZXIoUmVzb2x2ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRjaHNldCwgdGVybWluYWwpOgorICAgICAgICBzZWxmLnBhdGNoc2V0ID0gcGF0Y2hzZXQKKyAgICAgICAgc2VsZi50ZXJtaW5hbCA9IHRlcm1pbmFsCisKKyAgICBkZWYgUmVzb2x2ZShzZWxmKToKKyAgICAgICAgb2xkZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLmN1cmRpcikKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5wYXRjaHNldC5kaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucGF0Y2hzZXQuUHVzaCgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBvcy5jaGRpcihvbGRkaXIpCisgICAgICAgICAgICByYWlzZQorCisjIFBhdGNoIHJlc29sdmVyIHdoaWNoIHJlbGllcyBvbiB0aGUgdXNlciBkb2luZyBhbGwgdGhlIHdvcmsgaW52b2x2ZWQgaW4gdGhlCisjIHJlc29sdXRpb24sIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiByZWZyZXNoaW5nIHRoZSByZW1vdGUgY29weSBvZiB0aGUgcGF0Y2gKKyMgZmlsZXMgKHRoZSB1cmxzKS4KK2NsYXNzIFVzZXJSZXNvbHZlcihSZXNvbHZlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGNoc2V0LCB0ZXJtaW5hbCk6CisgICAgICAgIHNlbGYucGF0Y2hzZXQgPSBwYXRjaHNldAorICAgICAgICBzZWxmLnRlcm1pbmFsID0gdGVybWluYWwKKworICAgICMgRm9yY2UgYSBwdXNoIGluIHRoZSBwYXRjaHNldCwgdGhlbiBkcm9wIHRvIGEgc2hlbGwgZm9yIHRoZSB1c2VyIHRvCisgICAgIyByZXNvbHZlIGFueSByZWplY3RlZCBodW5rcworICAgIGRlZiBSZXNvbHZlKHNlbGYpOgorICAgICAgICBvbGRkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MuY3VyZGlyKQorICAgICAgICBvcy5jaGRpcihzZWxmLnBhdGNoc2V0LmRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wYXRjaHNldC5QdXNoKEZhbHNlKQorICAgICAgICBleGNlcHQgQ21kRXJyb3IgYXMgdjoKKyAgICAgICAgICAgICMgUGF0Y2ggYXBwbGljYXRpb24gZmFpbGVkCisgICAgICAgICAgICBwYXRjaGNtZCA9IHNlbGYucGF0Y2hzZXQuUHVzaChUcnVlLCBGYWxzZSwgRmFsc2UpCisKKyAgICAgICAgICAgIHQgPSBzZWxmLnBhdGNoc2V0LmQuZ2V0VmFyKCdUJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCB0OgorICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiQnVpbGQiLCAiVCBub3Qgc2V0IikKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih0KQorICAgICAgICAgICAgaW1wb3J0IHJhbmRvbQorICAgICAgICAgICAgcmNmaWxlID0gIiVzL2Jhc2hyYy4lcy4lcyIgJSAodCwgc3RyKG9zLmdldHBpZCgpKSwgcmFuZG9tLnJhbmRvbSgpKQorICAgICAgICAgICAgd2l0aCBvcGVuKHJjZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoImVjaG8gJyoqKiBNYW51YWwgcGF0Y2ggcmVzb2x1dGlvbiBtb2RlICoqKidcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiZWNobyAnRHJvcHBpbmcgdG8gYSBzaGVsbCwgc28gcGF0Y2ggcmVqZWN0cyBjYW4gYmUgZml4ZWQgbWFudWFsbHkuJ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJlY2hvICdSdW4gXCJxdWlsdCByZWZyZXNoXCIgd2hlbiBwYXRjaCBpcyBjb3JyZWN0ZWQsIHByZXNzIENUUkwrRCB0byBleGl0LidcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiZWNobyAnJ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCIgIi5qb2luKHBhdGNoY21kKSArICJcbiIpCisgICAgICAgICAgICBvcy5jaG1vZChyY2ZpbGUsIDA3NzUpCisKKyAgICAgICAgICAgIHNlbGYudGVybWluYWwoImJhc2ggLS1yY2ZpbGUgIiArIHJjZmlsZSwgJ1BhdGNoIFJlamVjdHM6IFBsZWFzZSBmaXggcGF0Y2ggcmVqZWN0cyBtYW51YWxseScsIHNlbGYucGF0Y2hzZXQuZCkKKworICAgICAgICAgICAgIyBDb25zdHJ1Y3QgYSBuZXcgUGF0Y2hTZXQgYWZ0ZXIgdGhlIHVzZXIncyBjaGFuZ2VzLCBjb21wYXJlIHRoZQorICAgICAgICAgICAgIyBzZXRzLCBjaGVja2luZyBwYXRjaGVzIGZvciBtb2RpZmljYXRpb25zLCBhbmQgZG9pbmcgYSByZW1vdGUKKyAgICAgICAgICAgICMgcmVmcmVzaCBvbiBlYWNoLgorICAgICAgICAgICAgb2xkcGF0Y2hzZXQgPSBzZWxmLnBhdGNoc2V0CisgICAgICAgICAgICBzZWxmLnBhdGNoc2V0ID0gb2xkcGF0Y2hzZXQuX19jbGFzc19fKHNlbGYucGF0Y2hzZXQuZGlyLCBzZWxmLnBhdGNoc2V0LmQpCisKKyAgICAgICAgICAgIGZvciBwYXRjaCBpbiBzZWxmLnBhdGNoc2V0LnBhdGNoZXM6CisgICAgICAgICAgICAgICAgb2xkcGF0Y2ggPSBOb25lCisgICAgICAgICAgICAgICAgZm9yIG9wYXRjaCBpbiBvbGRwYXRjaHNldC5wYXRjaGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBvcGF0Y2hbInF1aWx0ZmlsZSJdID09IHBhdGNoWyJxdWlsdGZpbGUiXToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZHBhdGNoID0gb3BhdGNoCisKKyAgICAgICAgICAgICAgICBpZiBvbGRwYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hbInJlbW90ZSJdID0gb2xkcGF0Y2hbInJlbW90ZSJdCisgICAgICAgICAgICAgICAgICAgIGlmIHBhdGNoWyJxdWlsdGZpbGUiXSA9PSBvbGRwYXRjaFsicXVpbHRmaWxlIl06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwYXRjaFsicXVpbHRmaWxlbWQ1Il0gIT0gb2xkcGF0Y2hbInF1aWx0ZmlsZW1kNSJdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIlBhdGNoICVzIGhhcyBjaGFuZ2VkLCB1cGRhdGluZyByZW1vdGUgdXJsICVzIiAlIChvcy5wYXRoLmJhc2VuYW1lKHBhdGNoWyJxdWlsdGZpbGUiXSksIHBhdGNoWyJyZW1vdGUiXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1c2VyIGNoYW5nZT8gIHJlbW90ZSByZWZyZXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXRjaHNldC5SZWZyZXNoKHJlbW90ZT1UcnVlLCBwYXRjaD1zZWxmLnBhdGNoc2V0LnBhdGNoZXMuaW5kZXgocGF0Y2gpKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFVzZXIgZGlkIG5vdCBmaXggdGhlIHByb2JsZW0uICBBYm9ydC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBQYXRjaEVycm9yKCJQYXRjaCBhcHBsaWNhdGlvbiBmYWlsZWQsIGFuZCB1c2VyIGRpZCBub3QgZml4IGFuZCByZWZyZXNoIHRoZSBwYXRjaC4iKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgb3MuY2hkaXIob2xkZGlyKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgb3MuY2hkaXIob2xkZGlyKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYXRoLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYXRoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxM2ViZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3BhdGgucHkKQEAgLTAsMCArMSwyNDMgQEAKK2ltcG9ydCBlcnJubworaW1wb3J0IGdsb2IKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgb3MucGF0aAorCitkZWYgam9pbigqcGF0aHMpOgorICAgICIiIkxpa2Ugb3MucGF0aC5qb2luIGJ1dCBkb2Vzbid0IHRyZWF0IGFic29sdXRlIFJIUyBzcGVjaWFsbHkiIiIKKyAgICByZXR1cm4gb3MucGF0aC5ub3JtcGF0aCgiLyIuam9pbihwYXRocykpCisKK2RlZiByZWxhdGl2ZShzcmMsIGRlc3QpOgorICAgICIiIiBSZXR1cm4gYSByZWxhdGl2ZSBwYXRoIGZyb20gc3JjIHRvIGRlc3QuCisKKyAgICA+Pj4gcmVsYXRpdmUoIi91c3IvYmluIiwgIi90bXAvZm9vL2JhciIpCisgICAgLi4vLi4vdG1wL2Zvby9iYXIKKworICAgID4+PiByZWxhdGl2ZSgiL3Vzci9iaW4iLCAiL3Vzci9saWIiKQorICAgIC4uL2xpYgorCisgICAgPj4+IHJlbGF0aXZlKCIvdG1wIiwgIi90bXAvZm9vL2JhciIpCisgICAgZm9vL2JhcgorICAgICIiIgorCisgICAgcmV0dXJuIG9zLnBhdGgucmVscGF0aChkZXN0LCBzcmMpCisKK2RlZiBtYWtlX3JlbGF0aXZlX3N5bWxpbmsocGF0aCk6CisgICAgIiIiIENvbnZlcnQgYW4gYWJzb2x1dGUgc3ltbGluayB0byBhIHJlbGF0aXZlIG9uZSAiIiIKKyAgICBpZiBub3Qgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgIHJldHVybgorICAgIGxpbmsgPSBvcy5yZWFkbGluayhwYXRoKQorICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGxpbmspOgorICAgICAgICByZXR1cm4KKworICAgICMgZmluZCB0aGUgY29tbW9uIGFuY2VzdG9yIGRpcmVjdG9yeQorICAgIGFuY2VzdG9yID0gcGF0aAorICAgIGRlcHRoID0gMAorICAgIHdoaWxlIGFuY2VzdG9yIGFuZCBub3QgbGluay5zdGFydHN3aXRoKGFuY2VzdG9yKToKKyAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5ycGFydGl0aW9uKCcvJylbMF0KKyAgICAgICAgZGVwdGggKz0gMQorCisgICAgaWYgbm90IGFuY2VzdG9yOgorICAgICAgICBwcmludCgibWFrZV9yZWxhdGl2ZV9zeW1saW5rKCkgRXJyb3I6IHVuYWJsZSB0byBmaW5kIHRoZSBjb21tb24gYW5jZXN0b3Igb2YgJXMgYW5kIGl0cyB0YXJnZXQiICUgcGF0aCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBiYXNlID0gbGluay5wYXJ0aXRpb24oYW5jZXN0b3IpWzJdLnN0cmlwKCcvJykKKyAgICB3aGlsZSBkZXB0aCA+IDE6CisgICAgICAgIGJhc2UgPSAiLi4vIiArIGJhc2UKKyAgICAgICAgZGVwdGggLT0gMQorCisgICAgb3MucmVtb3ZlKHBhdGgpCisgICAgb3Muc3ltbGluayhiYXNlLCBwYXRoKQorCitkZWYgZm9ybWF0X2Rpc3BsYXkocGF0aCwgbWV0YWRhdGEpOgorICAgICIiIiBQcmVwYXJlIGEgcGF0aCBmb3IgZGlzcGxheSB0byB0aGUgdXNlci4gIiIiCisgICAgcmVsID0gcmVsYXRpdmUobWV0YWRhdGEuZ2V0VmFyKCJUT1BESVIiLCBUcnVlKSwgcGF0aCkKKyAgICBpZiBsZW4ocmVsKSA+IGxlbihwYXRoKToKKyAgICAgICAgcmV0dXJuIHBhdGgKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gcmVsCisKK2RlZiBjb3B5dHJlZShzcmMsIGRzdCk6CisgICAgIyBXZSBjb3VsZCB1c2Ugc29tZXRoaW5nIGxpa2Ugc2h1dGlsLmNvcHl0cmVlIGhlcmUgYnV0IGl0IHR1cm5zIG91dCB0bworICAgICMgdG8gYmUgc2xvdy4gSXQgdGFrZXMgdHdpY2UgYXMgbG9uZyBjb3B5aW5nIHRvIGFuIGVtcHR5IGRpcmVjdG9yeS4gCisgICAgIyBJZiBkc3QgYWxyZWFkeSBoYXMgY29udGVudHMgcGVyZm9ybWFuY2UgY2FuIGJlIDE1IHRpbWUgc2xvd2VyCisgICAgIyBUaGlzIHdheSB3ZSBhbHNvIHByZXNlcnZlIGhhcmRsaW5rcyBiZXR3ZWVuIGZpbGVzIGluIHRoZSB0cmVlLgorCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGRzdCkKKyAgICBjbWQgPSAndGFyIC1jZiAtIC1DICVzIC1wIC4gfCB0YXIgLXhmIC0gLUMgJXMnICUgKHNyYywgZHN0KQorICAgIGNoZWNrX291dHB1dChjbWQsIHNoZWxsPVRydWUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKworZGVmIGNvcHloYXJkbGlua3RyZWUoc3JjLCBkc3QpOgorICAgICIiIiBNYWtlIHRoZSBoYXJkIGxpbmsgd2hlbiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGNvcHkuICIiIgorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkc3QpCisgICAgaWYgb3MucGF0aC5pc2RpcihzcmMpIGFuZCBub3QgbGVuKG9zLmxpc3RkaXIoc3JjKSk6CisgICAgICAgIHJldHVybgkKKworICAgIGlmIChvcy5zdGF0KHNyYykuc3RfZGV2ID09ICBvcy5zdGF0KGRzdCkuc3RfZGV2KToKKyAgICAgICAgIyBOZWVkIHRvIGNvcHkgZGlyZWN0b3JpZXMgb25seSB3aXRoIHRhciBmaXJzdCBzaW5jZSBjcCB3aWxsIGVycm9yIGlmIHR3byAKKyAgICAgICAgIyB3cml0ZXJzIHRyeSBhbmQgY3JlYXRlIGEgZGlyZWN0b3J5IGF0IHRoZSBzYW1lIHRpbWUKKyAgICAgICAgY21kID0gJ2NkICVzOyBmaW5kIC4gLXR5cGUgZCAtcHJpbnQgfCB0YXIgLWNmIC0gLUMgJXMgLXAgLS1maWxlcy1mcm9tIC0gLS1uby1yZWN1cnNpb24gfCB0YXIgLXhmIC0gLUMgJXMnICUgKHNyYywgc3JjLCBkc3QpCisgICAgICAgIGNoZWNrX291dHB1dChjbWQsIHNoZWxsPVRydWUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgY21kID0gJ2NkICVzOyBmaW5kIC4gLXByaW50MCB8IGNwaW8gLS1udWxsIC1wZGx1ICVzJyAlIChzcmMsIGRzdCkKKyAgICAgICAgY2hlY2tfb3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgIGVsc2U6CisgICAgICAgIGNvcHl0cmVlKHNyYywgZHN0KQorCitkZWYgcmVtb3ZlKHBhdGgsIHJlY3Vyc2U9VHJ1ZSk6CisgICAgIiIiRXF1aXZhbGVudCB0byBybSAtZiBvciBybSAtcmYiIiIKKyAgICBmb3IgbmFtZSBpbiBnbG9iLmdsb2IocGF0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBpZiByZWN1cnNlIGFuZCBleGMuZXJybm8gPT0gZXJybm8uRUlTRElSOgorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUobmFtZSkKKyAgICAgICAgICAgIGVsaWYgZXhjLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorCitkZWYgc3ltbGluayhzb3VyY2UsIGRlc3RpbmF0aW9uLCBmb3JjZT1GYWxzZSk6CisgICAgIiIiQ3JlYXRlIGEgc3ltYm9saWMgbGluayIiIgorICAgIHRyeToKKyAgICAgICAgaWYgZm9yY2U6CisgICAgICAgICAgICByZW1vdmUoZGVzdGluYXRpb24pCisgICAgICAgIG9zLnN5bWxpbmsoc291cmNlLCBkZXN0aW5hdGlvbikKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVCBvciBvcy5yZWFkbGluayhkZXN0aW5hdGlvbikgIT0gc291cmNlOgorICAgICAgICAgICAgcmFpc2UKKworY2xhc3MgQ2FsbGVkUHJvY2Vzc0Vycm9yKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJldGNvZGUsIGNtZCwgb3V0cHV0ID0gTm9uZSk6CisgICAgICAgIHNlbGYucmV0Y29kZSA9IHJldGNvZGUKKyAgICAgICAgc2VsZi5jbWQgPSBjbWQKKyAgICAgICAgc2VsZi5vdXRwdXQgPSBvdXRwdXQKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJDb21tYW5kICclcycgcmV0dXJuZWQgbm9uLXplcm8gZXhpdCBzdGF0dXMgJWQgd2l0aCBvdXRwdXQgJXMiICUgKHNlbGYuY21kLCBzZWxmLnJldGNvZGUsIHNlbGYub3V0cHV0KQorCisjIE5vdCBuZWVkZWQgd2hlbiB3ZSBtb3ZlIHRvIHB5dGhvbiAyLjcKK2RlZiBjaGVja19vdXRwdXQoKnBvcGVuYXJncywgKiprd2FyZ3MpOgorICAgIHIiIiJSdW4gY29tbWFuZCB3aXRoIGFyZ3VtZW50cyBhbmQgcmV0dXJuIGl0cyBvdXRwdXQgYXMgYSBieXRlIHN0cmluZy4KKworICAgIElmIHRoZSBleGl0IGNvZGUgd2FzIG5vbi16ZXJvIGl0IHJhaXNlcyBhIENhbGxlZFByb2Nlc3NFcnJvci4gIFRoZQorICAgIENhbGxlZFByb2Nlc3NFcnJvciBvYmplY3Qgd2lsbCBoYXZlIHRoZSByZXR1cm4gY29kZSBpbiB0aGUgcmV0dXJuY29kZQorICAgIGF0dHJpYnV0ZSBhbmQgb3V0cHV0IGluIHRoZSBvdXRwdXQgYXR0cmlidXRlLgorCisgICAgVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yIHRoZSBQb3BlbiBjb25zdHJ1Y3Rvci4gIEV4YW1wbGU6CisKKyAgICA+Pj4gY2hlY2tfb3V0cHV0KFsibHMiLCAiLWwiLCAiL2Rldi9udWxsIl0pCisgICAgJ2Nydy1ydy1ydy0gMSByb290IHJvb3QgMSwgMyBPY3QgMTggIDIwMDcgL2Rldi9udWxsXG4nCisKKyAgICBUaGUgc3Rkb3V0IGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkIGFzIGl0IGlzIHVzZWQgaW50ZXJuYWxseS4KKyAgICBUbyBjYXB0dXJlIHN0YW5kYXJkIGVycm9yIGluIHRoZSByZXN1bHQsIHVzZSBzdGRlcnI9U1RET1VULgorCisgICAgPj4+IGNoZWNrX291dHB1dChbIi9iaW4vc2giLCAiLWMiLAorICAgIC4uLiAgICAgICAgICAgICAgICJscyAtbCBub25fZXhpc3RlbnRfZmlsZSA7IGV4aXQgMCJdLAorICAgIC4uLiAgICAgICAgICAgICAgc3RkZXJyPVNURE9VVCkKKyAgICAnbHM6IG5vbl9leGlzdGVudF9maWxlOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XG4nCisgICAgIiIiCisgICAgaWYgJ3N0ZG91dCcgaW4ga3dhcmdzOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzdGRvdXQgYXJndW1lbnQgbm90IGFsbG93ZWQsIGl0IHdpbGwgYmUgb3ZlcnJpZGRlbi4nKQorICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsICpwb3BlbmFyZ3MsICoqa3dhcmdzKQorICAgIG91dHB1dCwgdW51c2VkX2VyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgIHJldGNvZGUgPSBwcm9jZXNzLnBvbGwoKQorICAgIGlmIHJldGNvZGU6CisgICAgICAgIGNtZCA9IGt3YXJncy5nZXQoImFyZ3MiKQorICAgICAgICBpZiBjbWQgaXMgTm9uZToKKyAgICAgICAgICAgIGNtZCA9IHBvcGVuYXJnc1swXQorICAgICAgICByYWlzZSBDYWxsZWRQcm9jZXNzRXJyb3IocmV0Y29kZSwgY21kLCBvdXRwdXQ9b3V0cHV0KQorICAgIHJldHVybiBvdXRwdXQKKworZGVmIGZpbmQoZGlyLCAqKndhbGtvcHRpb25zKToKKyAgICAiIiIgR2l2ZW4gYSBkaXJlY3RvcnksIHJlY3Vyc2VzIGludG8gdGhhdCBkaXJlY3RvcnksCisgICAgcmV0dXJuaW5nIGFsbCBmaWxlcyBhcyBhYnNvbHV0ZSBwYXRocy4gIiIiCisKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkaXIsICoqd2Fsa29wdGlvbnMpOgorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIHlpZWxkIG9zLnBhdGguam9pbihyb290LCBmaWxlKQorCisKKyMjIHJlYWxwYXRoKCkgcmVsYXRlZCBmdW5jdGlvbnMKK2RlZiBfX2lzX3BhdGhfYmVsb3coZmlsZSwgcm9vdCk6CisgICAgcmV0dXJuIChmaWxlICsgb3MucGF0aC5zZXApLnN0YXJ0c3dpdGgocm9vdCkKKworZGVmIF9fcmVhbHBhdGhfcmVsKHN0YXJ0LCByZWxfcGF0aCwgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpOgorICAgICIiIkNhbGN1bGF0ZXMgcmVhbCBwYXRoIG9mIHN5bWxpbmsgJ3N0YXJ0JyArICdyZWxfcGF0aCcgYmVsb3cKKyAgICAncm9vdCc7IG5vIHBhcnQgb2YgJ3N0YXJ0JyBiZWxvdyAncm9vdCcgbXVzdCBjb250YWluIHN5bWxpbmtzLiAiIiIKKyAgICBoYXZlX2RpciA9IFRydWUKKworICAgIGZvciBkIGluIHJlbF9wYXRoLnNwbGl0KG9zLnBhdGguc2VwKToKKyAgICAgICAgaWYgbm90IGhhdmVfZGlyIGFuZCBub3QgYXNzdW1lX2RpcjoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRU5PRU5ULCAibm8gc3VjaCBkaXJlY3RvcnkgJXMiICUgc3RhcnQpCisKKyAgICAgICAgaWYgZCA9PSBvcy5wYXRoLnBhcmRpcjogIyAnLi4nCisgICAgICAgICAgICBpZiBsZW4oc3RhcnQpID49IGxlbihyb290KToKKyAgICAgICAgICAgICAgICAjIGRvIG5vdCBmb2xsb3cgJy4uJyBiZWZvcmUgcm9vdAorICAgICAgICAgICAgICAgIHN0YXJ0ID0gb3MucGF0aC5kaXJuYW1lKHN0YXJ0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGVtaXQgd2FybmluZz8KKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAoc3RhcnQsIGhhdmVfZGlyKSA9IF9fcmVhbHBhdGgob3MucGF0aC5qb2luKHN0YXJ0LCBkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcikKKworICAgICAgICBhc3NlcnQoX19pc19wYXRoX2JlbG93KHN0YXJ0LCByb290KSkKKworICAgIHJldHVybiBzdGFydAorCitkZWYgX19yZWFscGF0aChmaWxlLCByb290LCBsb29wX2NudCwgYXNzdW1lX2Rpcik6CisgICAgd2hpbGUgb3MucGF0aC5pc2xpbmsoZmlsZSkgYW5kIGxlbihmaWxlKSA+PSBsZW4ocm9vdCk6CisgICAgICAgIGlmIGxvb3BfY250ID09IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVMT09QLCBmaWxlKQorCisgICAgICAgIGxvb3BfY250IC09IDEKKyAgICAgICAgdGFyZ2V0ID0gb3MucGF0aC5ub3JtcGF0aChvcy5yZWFkbGluayhmaWxlKSkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Ficyh0YXJnZXQpOgorICAgICAgICAgICAgdGRpciA9IG9zLnBhdGguZGlybmFtZShmaWxlKQorICAgICAgICAgICAgYXNzZXJ0KF9faXNfcGF0aF9iZWxvdyh0ZGlyLCByb290KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRkaXIgPSByb290CisKKyAgICAgICAgZmlsZSA9IF9fcmVhbHBhdGhfcmVsKHRkaXIsIHRhcmdldCwgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpCisKKyAgICB0cnk6CisgICAgICAgIGlzX2RpciA9IG9zLnBhdGguaXNkaXIoZmlsZSkKKyAgICBleGNlcHQ6CisgICAgICAgIGlzX2RpciA9IGZhbHNlCisKKyAgICByZXR1cm4gKGZpbGUsIGlzX2RpcikKKworZGVmIHJlYWxwYXRoKGZpbGUsIHJvb3QsIHVzZV9waHlzZGlyID0gVHJ1ZSwgbG9vcF9jbnQgPSAxMDAsIGFzc3VtZV9kaXIgPSBGYWxzZSk6CisgICAgIiIiIFJldHVybnMgdGhlIGNhbm9uaWNhbCBwYXRoIG9mICdmaWxlJyB3aXRoIGFzc3VtaW5nIGEKKyAgICB0b3BsZXZlbCAncm9vdCcgZGlyZWN0b3J5LiBXaGVuICd1c2VfcGh5c2RpcicgaXMgc2V0LCBhbGwKKyAgICBwcmVjZWRpbmcgcGF0aCBjb21wb25lbnRzIG9mICdmaWxlJyB3aWxsIGJlIHJlc29sdmVkIGZpcnN0OworICAgIHRoaXMgZmxhZyBzaG91bGQgYmUgc2V0IHVubGVzcyBpdCBpcyBndWFyYW50ZWVkIHRoYXQgdGhlcmUgaXMKKyAgICBubyBzeW1saW5rIGluIHRoZSBwYXRoLiBXaGVuICdhc3N1bWVfZGlyJyBpcyBub3Qgc2V0LCBtaXNzaW5nCisgICAgcGF0aCBjb21wb25lbnRzIHdpbGwgcmFpc2UgYW4gRU5PRU5UIGVycm9yIiIiCisKKyAgICByb290ID0gb3MucGF0aC5ub3JtcGF0aChyb290KQorICAgIGZpbGUgPSBvcy5wYXRoLm5vcm1wYXRoKGZpbGUpCisKKyAgICBpZiBub3Qgcm9vdC5lbmRzd2l0aChvcy5wYXRoLnNlcCk6CisgICAgICAgICMgbGV0dGluZyByb290IGVuZCB3aXRoICcvJyBtYWtlcyBzb21lIHRoaW5ncyBlYXNpZXIKKyAgICAgICAgcm9vdCA9IHJvb3QgKyBvcy5wYXRoLnNlcAorCisgICAgaWYgbm90IF9faXNfcGF0aF9iZWxvdyhmaWxlLCByb290KToKKyAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FSU5WQUwsICJmaWxlICclcycgaXMgbm90IGJlbG93IHJvb3QiICUgZmlsZSkKKworICAgIHRyeToKKyAgICAgICAgaWYgdXNlX3BoeXNkaXI6CisgICAgICAgICAgICBmaWxlID0gX19yZWFscGF0aF9yZWwocm9vdCwgZmlsZVsobGVuKHJvb3QpIC0gMSk6XSwgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWxlID0gX19yZWFscGF0aChmaWxlLCByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcilbMF0KKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVMT09QOgorICAgICAgICAgICAgIyBtYWtlIEVMT09QIG1vcmUgcmVhZGFibGU7IHdpdGhvdXQgY2F0Y2hpbmcgaXQsIHRoZXJlIHdpbGwKKyAgICAgICAgICAgICMgYmUgcHJpbnRlZCBhIGJhY2t0cmFjZSB3aXRoIDEwMHMgb2YgT1NFcnJvciBleGNlcHRpb25zCisgICAgICAgICAgICAjIGVsc2UKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUxPT1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b28gbXVjaCByZWN1cnNpb25zIHdoaWxlIHJlc29sdmluZyAnJXMnOyBsb29wIGluICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUsIGUuc3RyZXJyb3IpKQorCisgICAgICAgIHJhaXNlCisKKyAgICByZXR1cm4gZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wcnNlcnZpY2UucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Byc2VydmljZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGNiY2IxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wcnNlcnZpY2UucHkKQEAgLTAsMCArMSwxMjYgQEAKKworZGVmIHByc2Vydl9tYWtlX2Nvbm4oZCwgY2hlY2sgPSBGYWxzZSk6CisgICAgaW1wb3J0IHByc2Vydi5zZXJ2CisgICAgaG9zdF9wYXJhbXMgPSBmaWx0ZXIoTm9uZSwgKGQuZ2V0VmFyKCJQUlNFUlZfSE9TVCIsIFRydWUpIG9yICcnKS5zcGxpdCgnOicpKQorICAgIHRyeToKKyAgICAgICAgY29ubiA9IE5vbmUKKyAgICAgICAgY29ubiA9IHByc2Vydi5zZXJ2LlBSU2VydmVyQ29ubmVjdGlvbihob3N0X3BhcmFtc1swXSwgaW50KGhvc3RfcGFyYW1zWzFdKSkKKyAgICAgICAgaWYgY2hlY2s6CisgICAgICAgICAgICBpZiBub3QgY29ubi5waW5nKCk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdzZXJ2aWNlIG5vdCBhdmFpbGFibGUnKQorICAgICAgICBkLnNldFZhcigiX19QUlNFUlZfQ09OTiIsY29ubikKKyAgICBleGNlcHQgRXhjZXB0aW9uLCBleGM6CisgICAgICAgIGJiLmZhdGFsKCJDb25uZWN0aW5nIHRvIFBSIHNlcnZpY2UgJXM6JXMgZmFpbGVkOiAlcyIgJSAoaG9zdF9wYXJhbXNbMF0sIGhvc3RfcGFyYW1zWzFdLCBzdHIoZXhjKSkpCisKKyAgICByZXR1cm4gY29ubgorCitkZWYgcHJzZXJ2X2R1bXBfZGIoZCk6CisgICAgaWYgbm90IGQuZ2V0VmFyKCdQUlNFUlZfSE9TVCcsIFRydWUpOgorICAgICAgICBiYi5lcnJvcigiTm90IHVzaW5nIG5ldHdvcmsgYmFzZWQgUFIgc2VydmljZSIpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBjb25uID0gZC5nZXRWYXIoIl9fUFJTRVJWX0NPTk4iLCBUcnVlKQorICAgIGlmIGNvbm4gaXMgTm9uZToKKyAgICAgICAgY29ubiA9IHByc2Vydl9tYWtlX2Nvbm4oZCkKKyAgICAgICAgaWYgY29ubiBpcyBOb25lOgorICAgICAgICAgICAgYmIuZXJyb3IoIk1ha2luZyBjb25uZWN0aW9uIGZhaWxlZCB0byByZW1vdGUgUFIgc2VydmljZSIpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgI2R1bXAgZGIKKyAgICBvcHRfdmVyc2lvbiA9IGQuZ2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9WRVJTSU9OJywgVHJ1ZSkKKyAgICBvcHRfcGtnYXJjaCA9IGQuZ2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9QS0dBUkNIJywgVHJ1ZSkKKyAgICBvcHRfY2hlY2tzdW0gPSBkLmdldFZhcignUFJTRVJWX0RVTVBPUFRfQ0hFQ0tTVU0nLCBUcnVlKQorICAgIG9wdF9jb2wgPSAoIjEiID09IGQuZ2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9DT0wnLCBUcnVlKSkKKyAgICByZXR1cm4gY29ubi5leHBvcnQob3B0X3ZlcnNpb24sIG9wdF9wa2dhcmNoLCBvcHRfY2hlY2tzdW0sIG9wdF9jb2wpCisKK2RlZiBwcnNlcnZfaW1wb3J0X2RiKGQsIGZpbHRlcl92ZXJzaW9uPU5vbmUsIGZpbHRlcl9wa2dhcmNoPU5vbmUsIGZpbHRlcl9jaGVja3N1bT1Ob25lKToKKyAgICBpZiBub3QgZC5nZXRWYXIoJ1BSU0VSVl9IT1NUJywgVHJ1ZSk6CisgICAgICAgIGJiLmVycm9yKCJOb3QgdXNpbmcgbmV0d29yayBiYXNlZCBQUiBzZXJ2aWNlIikKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGNvbm4gPSBkLmdldFZhcigiX19QUlNFUlZfQ09OTiIsIFRydWUpCisgICAgaWYgY29ubiBpcyBOb25lOgorICAgICAgICBjb25uID0gcHJzZXJ2X21ha2VfY29ubihkKQorICAgICAgICBpZiBjb25uIGlzIE5vbmU6CisgICAgICAgICAgICBiYi5lcnJvcigiTWFraW5nIGNvbm5lY3Rpb24gZmFpbGVkIHRvIHJlbW90ZSBQUiBzZXJ2aWNlIikKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgI2dldCB0aGUgZW50cnkgdmFsdWVzCisgICAgaW1wb3J0ZWQgPSBbXQorICAgIHByZWZpeCA9ICJQUkFVVE8kIgorICAgIGZvciB2IGluIGQua2V5cygpOgorICAgICAgICBpZiB2LnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgICAgIChyZW1haW4sIHNlcCwgY2hlY2tzdW0pID0gdi5ycGFydGl0aW9uKCckJykKKyAgICAgICAgICAgIChyZW1haW4sIHNlcCwgcGtnYXJjaCkgPSByZW1haW4ucnBhcnRpdGlvbignJCcpCisgICAgICAgICAgICAocmVtYWluLCBzZXAsIHZlcnNpb24pID0gcmVtYWluLnJwYXJ0aXRpb24oJyQnKQorICAgICAgICAgICAgaWYgKHJlbWFpbiArICckJyAhPSBwcmVmaXgpIG9yIFwKKyAgICAgICAgICAgICAgIChmaWx0ZXJfdmVyc2lvbiBhbmQgZmlsdGVyX3ZlcnNpb24gIT0gdmVyc2lvbikgb3IgXAorICAgICAgICAgICAgICAgKGZpbHRlcl9wa2dhcmNoIGFuZCBmaWx0ZXJfcGtnYXJjaCAhPSBwa2dhcmNoKSBvciBcCisgICAgICAgICAgICAgICAoZmlsdGVyX2NoZWNrc3VtIGFuZCBmaWx0ZXJfY2hlY2tzdW0gIT0gY2hlY2tzdW0pOgorICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGludChkLmdldFZhcihyZW1haW4gKyAnJCcgKyB2ZXJzaW9uICsgJyQnICsgcGtnYXJjaCArICckJyArIGNoZWNrc3VtLCBUcnVlKSkKKyAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBiYi5kZWJ1ZygiTm90IHZhbGlkIHZhbHVlIG9mICVzOiVzIiAlICh2LHN0cihleGMpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcmV0ID0gY29ubi5pbXBvcnRvbmUodmVyc2lvbixwa2dhcmNoLGNoZWNrc3VtLHZhbHVlKQorICAgICAgICAgICAgaWYgcmV0ICE9IHZhbHVlOgorICAgICAgICAgICAgICAgIGJiLmVycm9yKCJpbXBvcnRpbmcoJXMsJXMsJXMsJWQpIGZhaWxlZC4gREIgbWF5IGhhdmUgbGFyZ2VyIHZhbHVlICVkIiAlICh2ZXJzaW9uLHBrZ2FyY2gsY2hlY2tzdW0sdmFsdWUscmV0KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICBpbXBvcnRlZC5hcHBlbmQoKHZlcnNpb24scGtnYXJjaCxjaGVja3N1bSx2YWx1ZSkpCisgICAgcmV0dXJuIGltcG9ydGVkCisKK2RlZiBwcnNlcnZfZXhwb3J0X3RvZmlsZShkLCBtZXRhaW5mbywgZGF0YWluZm8sIGxvY2tkb3duLCBub21heD1GYWxzZSk6CisgICAgaW1wb3J0IGJiLnV0aWxzCisgICAgI2luaXRpbGl6ZSB0aGUgb3V0cHV0IGZpbGUKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5nZXRWYXIoJ1BSU0VSVl9EVU1QRElSJywgVHJ1ZSkpCisgICAgZGYgPSBkLmdldFZhcignUFJTRVJWX0RVTVBGSUxFJywgVHJ1ZSkKKyAgICAjd3JpdGUgZGF0YQorICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoIiVzLmxvY2siICUgZGYpCisgICAgZiA9IG9wZW4oZGYsICJhIikKKyAgICBpZiBtZXRhaW5mbzoKKyAgICAgICAgI2R1bXAgY29sdW1uIGluZm8gCisgICAgICAgIGYud3JpdGUoIiNQUl9jb3JlX3ZlciA9IFwiJXNcIlxuXG4iICUgbWV0YWluZm9bJ2NvcmVfdmVyJ10pOworICAgICAgICBmLndyaXRlKCIjVGFibGU6ICVzXG4iICUgbWV0YWluZm9bJ3RibF9uYW1lJ10pCisgICAgICAgIGYud3JpdGUoIiNDb2x1bW5zOlxuIikKKyAgICAgICAgZi53cml0ZSgiI25hbWUgICAgICBcdCB0eXBlICAgIFx0IG5vdG4gICAgXHQgZGZsdCAgICBcdCBwa1xuIikKKyAgICAgICAgZi53cml0ZSgiIy0tLS0tLS0tLS1cdCAtLS0tLS0tLVx0IC0tLS0tLS0tXHQgLS0tLS0tLS1cdCAtLS0tXG4iKQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4obWV0YWluZm9bJ2NvbF9pbmZvJ10pKToKKyAgICAgICAgICAgIGYud3JpdGUoIiMlMTBzXHQgJThzXHQgJThzXHQgJThzXHQgJTRzXG4iICUgCisgICAgICAgICAgICAgICAgICAgIChtZXRhaW5mb1snY29sX2luZm8nXVtpXVsnbmFtZSddLCAKKyAgICAgICAgICAgICAgICAgICAgIG1ldGFpbmZvWydjb2xfaW5mbyddW2ldWyd0eXBlJ10sIAorICAgICAgICAgICAgICAgICAgICAgbWV0YWluZm9bJ2NvbF9pbmZvJ11baV1bJ25vdG51bGwnXSwgCisgICAgICAgICAgICAgICAgICAgICBtZXRhaW5mb1snY29sX2luZm8nXVtpXVsnZGZsdF92YWx1ZSddLCAKKyAgICAgICAgICAgICAgICAgICAgIG1ldGFpbmZvWydjb2xfaW5mbyddW2ldWydwayddKSkKKyAgICAgICAgZi53cml0ZSgiXG4iKQorCisgICAgaWYgbG9ja2Rvd246CisgICAgICAgIGYud3JpdGUoIlBSU0VSVl9MT0NLRE9XTiA9IFwiMVwiXG5cbiIpCisKKyAgICBpZiBkYXRhaW5mbzoKKyAgICAgICAgaWR4ID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGRhdGFpbmZvKSk6CisgICAgICAgICAgICBwa2dhcmNoID0gZGF0YWluZm9baV1bJ3BrZ2FyY2gnXQorICAgICAgICAgICAgdmFsdWUgPSBkYXRhaW5mb1tpXVsndmFsdWUnXQorICAgICAgICAgICAgaWYgcGtnYXJjaCBub3QgaW4gaWR4OgorICAgICAgICAgICAgICAgIGlkeFtwa2dhcmNoXSA9IGkKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgPiBkYXRhaW5mb1tpZHhbcGtnYXJjaF1dWyd2YWx1ZSddOgorICAgICAgICAgICAgICAgIGlkeFtwa2dhcmNoXSA9IGkKKyAgICAgICAgICAgIGYud3JpdGUoIlBSQVVUTyQlcyQlcyQlcyA9IFwiJXNcIlxuIiAlIAorICAgICAgICAgICAgICAgIChzdHIoZGF0YWluZm9baV1bJ3ZlcnNpb24nXSksIHBrZ2FyY2gsIHN0cihkYXRhaW5mb1tpXVsnY2hlY2tzdW0nXSksIHN0cih2YWx1ZSkpKQorICAgICAgICBpZiBub3Qgbm9tYXg6CisgICAgICAgICAgICBmb3IgaSBpbiBpZHg6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiUFJBVVRPXyVzXyVzID0gXCIlc1wiXG4iICUgKHN0cihkYXRhaW5mb1tpZHhbaV1dWyd2ZXJzaW9uJ10pLHN0cihkYXRhaW5mb1tpZHhbaV1dWydwa2dhcmNoJ10pLHN0cihkYXRhaW5mb1tpZHhbaV1dWyd2YWx1ZSddKSkpCisgICAgZi5jbG9zZSgpCisgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKworZGVmIHByc2Vydl9jaGVja19hdmFpbChkKToKKyAgICBob3N0X3BhcmFtcyA9IGZpbHRlcihOb25lLCAoZC5nZXRWYXIoIlBSU0VSVl9IT1NUIiwgVHJ1ZSkgb3IgJycpLnNwbGl0KCc6JykpCisgICAgdHJ5OgorICAgICAgICBpZiBsZW4oaG9zdF9wYXJhbXMpICE9IDI6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGludChob3N0X3BhcmFtc1sxXSkKKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICBiYi5mYXRhbCgnVW5kZWZpbmVkL2luY29ycmVjdCBQUlNFUlZfSE9TVCB2YWx1ZS4gRm9ybWF0OiAiaG9zdDpwb3J0IicpCisgICAgZWxzZToKKyAgICAgICAgcHJzZXJ2X21ha2VfY29ubihkLCBUcnVlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9xYS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcWEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjZGFhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcWEucHkKQEAgLTAsMCArMSwxMTEgQEAKK2NsYXNzIEVMRkZpbGU6CisgICAgRUlfTklERU5UID0gMTYKKworICAgIEVJX0NMQVNTICAgICAgPSA0CisgICAgRUlfREFUQSAgICAgICA9IDUKKyAgICBFSV9WRVJTSU9OICAgID0gNgorICAgIEVJX09TQUJJICAgICAgPSA3CisgICAgRUlfQUJJVkVSU0lPTiA9IDgKKworICAgICMgcG9zc2libGUgdmFsdWVzIGZvciBFSV9DTEFTUworICAgIEVMRkNMQVNTTk9ORSA9IDAKKyAgICBFTEZDTEFTUzMyICAgPSAxCisgICAgRUxGQ0xBU1M2NCAgID0gMgorCisgICAgIyBwb3NzaWJsZSB2YWx1ZSBmb3IgRUlfVkVSU0lPTgorICAgIEVWX0NVUlJFTlQgICA9IDEKKworICAgICMgcG9zc2libGUgdmFsdWVzIGZvciBFSV9EQVRBCisgICAgRUxGREFUQU5PTkUgID0gMAorICAgIEVMRkRBVEEyTFNCICA9IDEKKyAgICBFTEZEQVRBMk1TQiAgPSAyCisKKyAgICBkZWYgbXlfYXNzZXJ0KHNlbGYsIGV4cGVjdGF0aW9uLCByZXN1bHQpOgorICAgICAgICBpZiBub3QgZXhwZWN0YXRpb24gPT0gcmVzdWx0OgorICAgICAgICAgICAgI3ByaW50ICInJXgnLCcleCcgJXMiICUgKG9yZChleHBlY3RhdGlvbiksIG9yZChyZXN1bHQpLCBzZWxmLm5hbWUpCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRoaXMgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZCIpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgYml0cyA9IDApOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuYml0cyA9IGJpdHMKKyAgICAgICAgc2VsZi5vYmpkdW1wX291dHB1dCA9IHt9CisKKyAgICBkZWYgb3BlbihzZWxmKToKKyAgICAgICAgc2VsZi5maWxlID0gZmlsZShzZWxmLm5hbWUsICJyIikKKyAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5maWxlLnJlYWQoRUxGRmlsZS5FSV9OSURFTlQrNCkKKworICAgICAgICBzZWxmLm15X2Fzc2VydChsZW4oc2VsZi5kYXRhKSwgRUxGRmlsZS5FSV9OSURFTlQrNCkKKyAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhWzBdLCBjaHIoMHg3ZikgKQorICAgICAgICBzZWxmLm15X2Fzc2VydChzZWxmLmRhdGFbMV0sICdFJykKKyAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhWzJdLCAnTCcpCisgICAgICAgIHNlbGYubXlfYXNzZXJ0KHNlbGYuZGF0YVszXSwgJ0YnKQorICAgICAgICBpZiBzZWxmLmJpdHMgPT0gMDoKKyAgICAgICAgICAgIGlmIHNlbGYuZGF0YVtFTEZGaWxlLkVJX0NMQVNTXSA9PSBjaHIoRUxGRmlsZS5FTEZDTEFTUzMyKToKKyAgICAgICAgICAgICAgICBzZWxmLmJpdHMgPSAzMgorICAgICAgICAgICAgZWxpZiBzZWxmLmRhdGFbRUxGRmlsZS5FSV9DTEFTU10gPT0gY2hyKEVMRkZpbGUuRUxGQ0xBU1M2NCk6CisgICAgICAgICAgICAgICAgc2VsZi5iaXRzID0gNjQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBOb3QgMzItYml0IG9yIDY0Li4gbGV0cyBhc3NlcnQKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkVMRiBidXQgbm90IDMyIG9yIDY0IGJpdC4iKQorICAgICAgICBlbGlmIHNlbGYuYml0cyA9PSAzMjoKKyAgICAgICAgICAgIHNlbGYubXlfYXNzZXJ0KHNlbGYuZGF0YVtFTEZGaWxlLkVJX0NMQVNTXSwgY2hyKEVMRkZpbGUuRUxGQ0xBU1MzMikpCisgICAgICAgIGVsaWYgc2VsZi5iaXRzID09IDY0OgorICAgICAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfQ0xBU1NdLCBjaHIoRUxGRmlsZS5FTEZDTEFTUzY0KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTXVzdCBzcGVjaWZ5IHVua25vd24sIDMyIG9yIDY0IGJpdCBzaXplLiIpCisgICAgICAgIHNlbGYubXlfYXNzZXJ0KHNlbGYuZGF0YVtFTEZGaWxlLkVJX1ZFUlNJT05dLCBjaHIoRUxGRmlsZS5FVl9DVVJSRU5UKSApCisKKyAgICAgICAgc2VsZi5zZXggPSBzZWxmLmRhdGFbRUxGRmlsZS5FSV9EQVRBXQorICAgICAgICBpZiBzZWxmLnNleCA9PSBjaHIoRUxGRmlsZS5FTEZEQVRBTk9ORSk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oInNlbGYuc2V4ID09IEVMRkRBVEFOT05FIikKKyAgICAgICAgZWxpZiBzZWxmLnNleCA9PSBjaHIoRUxGRmlsZS5FTEZEQVRBMkxTQik6CisgICAgICAgICAgICBzZWxmLnNleCA9ICI8IgorICAgICAgICBlbGlmIHNlbGYuc2V4ID09IGNocihFTEZGaWxlLkVMRkRBVEEyTVNCKToKKyAgICAgICAgICAgIHNlbGYuc2V4ID0gIj4iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gc2VsZi5zZXgiKQorCisgICAgZGVmIG9zQWJpKHNlbGYpOgorICAgICAgICByZXR1cm4gb3JkKHNlbGYuZGF0YVtFTEZGaWxlLkVJX09TQUJJXSkKKworICAgIGRlZiBhYmlWZXJzaW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gb3JkKHNlbGYuZGF0YVtFTEZGaWxlLkVJX0FCSVZFUlNJT05dKQorCisgICAgZGVmIGFiaVNpemUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJpdHMKKworICAgIGRlZiBpc0xpdHRsZUVuZGlhbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2V4ID09ICI8IgorCisgICAgZGVmIGlzQmlnRW5naWFuKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXggPT0gIj4iCisKKyAgICBkZWYgbWFjaGluZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdlIGtub3cgdGhlIHNleCBzdG9yZWQgaW4gc2VsZi5zZXggYW5kIHdlCisgICAgICAgIGtub3cgdGhlIHBvc2l0aW9uCisgICAgICAgICIiIgorICAgICAgICBpbXBvcnQgc3RydWN0CisgICAgICAgIChhLCkgPSBzdHJ1Y3QudW5wYWNrKHNlbGYuc2V4KyJIIiwgc2VsZi5kYXRhWzE4OjIwXSkKKyAgICAgICAgcmV0dXJuIGEKKworICAgIGRlZiBydW5fb2JqZHVtcChzZWxmLCBjbWQsIGQpOgorICAgICAgICBpbXBvcnQgYmIucHJvY2VzcworICAgICAgICBpbXBvcnQgc3lzCisKKyAgICAgICAgaWYgY21kIGluIHNlbGYub2JqZHVtcF9vdXRwdXQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5vYmpkdW1wX291dHB1dFtjbWRdCisKKyAgICAgICAgb2JqZHVtcCA9IGQuZ2V0VmFyKCdPQkpEVU1QJywgVHJ1ZSkKKworICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbIkxDX0FMTCJdID0gIkMiCisgICAgICAgIGVudlsiUEFUSCJdID0gZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoIiVzICVzICVzIiAlIChvYmpkdW1wLCBjbWQsIHNlbGYubmFtZSkpCisgICAgICAgICAgICBzZWxmLm9iamR1bXBfb3V0cHV0W2NtZF0gPSBiYi5wcm9jZXNzLnJ1bihbb2JqZHVtcCwgY21kLCBzZWxmLm5hbWVdLCBlbnY9ZW52LCBzaGVsbD1GYWxzZSlbMF0KKyAgICAgICAgICAgIHJldHVybiBzZWxmLm9iamR1bXBfb3V0cHV0W2NtZF0KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgYmIubm90ZSgiJXMgJXMgJXMgZmFpbGVkOiAlcyIgJSAob2JqZHVtcCwgY21kLCBzZWxmLm5hbWUsIGUpKQorICAgICAgICAgICAgcmV0dXJuICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3JlY2lwZXV0aWxzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9yZWNpcGV1dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGZhNzI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9yZWNpcGV1dGlscy5weQpAQCAtMCwwICsxLDc0MCBAQAorIyBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgbW9kaWZ5aW5nIHJlY2lwZXMKKyMKKyMgU29tZSBjb2RlIGJvcnJvd2VkIGZyb20gdGhlIE9FIGxheWVyIGluZGV4CisjCisjIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRleHR3cmFwCitpbXBvcnQgZGlmZmxpYgoraW1wb3J0IHV0aWxzCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgcmUKK2ltcG9ydCBmbm1hdGNoCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdCwgZGVmYXVsdGRpY3QKKworCisjIEhlbHAgdXMgdG8gZmluZCBwbGFjZXMgdG8gaW5zZXJ0IHZhbHVlcworcmVjaXBlX3Byb2dyZXNzaW9uID0gWydTVU1NQVJZJywgJ0RFU0NSSVBUSU9OJywgJ0hPTUVQQUdFJywgJ0JVR1RSQUNLRVInLCAnU0VDVElPTicsICdMSUNFTlNFJywgJ0xJQ19GSUxFU19DSEtTVU0nLCAnUFJPVklERVMnLCAnREVQRU5EUycsICdQUicsICdQVicsICdTUkNSRVYnLCAnU1JDX1VSSScsICdTJywgJ2RvX2ZldGNoJywgJ2RvX3VucGFjaycsICdkb19wYXRjaCcsICdFWFRSQV9PRUNPTkYnLCAnZG9fY29uZmlndXJlJywgJ0VYVFJBX09FTUFLRScsICdkb19jb21waWxlJywgJ2RvX2luc3RhbGwnLCAnZG9fcG9wdWxhdGVfc3lzcm9vdCcsICdJTklUU0NSSVBUJywgJ1VTRVJBREQnLCAnR1JPVVBBREQnLCAnUEFDS0FHRVMnLCAnRklMRVMnLCAnUkRFUEVORFMnLCAnUlJFQ09NTUVORFMnLCAnUlNVR0dFU1RTJywgJ1JQUk9WSURFUycsICdSUkVQTEFDRVMnLCAnUkNPTkZMSUNUUycsICdBTExPV19FTVBUWScsICdkb19wYWNrYWdlJywgJ2RvX2RlcGxveSddCisjIFZhcmlhYmxlcyB0aGF0IHNvbWV0aW1lcyBhcmUgYSBiaXQgbG9uZyBidXQgc2hvdWxkbid0IGJlIHdyYXBwZWQKK25vd3JhcF92YXJzID0gWydTVU1NQVJZJywgJ0hPTUVQQUdFJywgJ0JVR1RSQUNLRVInXQorbGlzdF92YXJzID0gWydTUkNfVVJJJywgJ0xJQ19GSUxFU19DSEtTVU0nXQorbWV0YV92YXJzID0gWydTVU1NQVJZJywgJ0RFU0NSSVBUSU9OJywgJ0hPTUVQQUdFJywgJ0JVR1RSQUNLRVInLCAnU0VDVElPTiddCisKKworZGVmIHBuX3RvX3JlY2lwZShjb29rZXIsIHBuKToKKyAgICAiIiJDb252ZXJ0IGEgcmVjaXBlIG5hbWUgKFBOKSB0byB0aGUgcGF0aCB0byB0aGUgcmVjaXBlIGZpbGUiIiIKKyAgICBpbXBvcnQgYmIucHJvdmlkZXJzCisKKyAgICBpZiBwbiBpbiBjb29rZXIucmVjaXBlY2FjaGUucGtnX3BuOgorICAgICAgICBmaWxlbmFtZXMgPSBjb29rZXIucmVjaXBlY2FjaGUucGtnX3BuW3BuXQorICAgICAgICBiZXN0ID0gYmIucHJvdmlkZXJzLmZpbmRCZXN0UHJvdmlkZXIocG4sIGNvb2tlci5kYXRhLCBjb29rZXIucmVjaXBlY2FjaGUsIGNvb2tlci5yZWNpcGVjYWNoZS5wa2dfcG4pCisgICAgICAgIHJldHVybiBiZXN0WzNdCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCitkZWYgZ2V0X3VuYXZhaWxhYmxlX3JlYXNvbnMoY29va2VyLCBwbik6CisgICAgIiIiSWYgYSByZWNpcGUgY291bGQgbm90IGJlIGZvdW5kLCBmaW5kIG91dCB3aHkgaWYgcG9zc2libGUiIiIKKyAgICBpbXBvcnQgYmIudGFza2RhdGEKKyAgICB0YXNrZGF0YSA9IGJiLnRhc2tkYXRhLlRhc2tEYXRhKE5vbmUsIHNraXBsaXN0PWNvb2tlci5za2lwbGlzdCkKKyAgICByZXR1cm4gdGFza2RhdGEuZ2V0X3JlYXNvbnMocG4pCisKKworZGVmIHBhcnNlX3JlY2lwZShmbiwgYXBwZW5kZmlsZXMsIGQpOgorICAgICIiIgorICAgIFBhcnNlIGFuIGluZGl2aWR1YWwgcmVjaXBlIGZpbGUsIG9wdGlvbmFsbHkgd2l0aCBhIGxpc3Qgb2YKKyAgICBiYmFwcGVuZCBmaWxlcy4KKyAgICAiIiIKKyAgICBpbXBvcnQgYmIuY2FjaGUKKyAgICBlbnZkYXRhID0gYmIuY2FjaGUuQ2FjaGUubG9hZERhdGFGdWxsKGZuLCBhcHBlbmRmaWxlcywgZCkKKyAgICByZXR1cm4gZW52ZGF0YQorCisKK2RlZiBwYXJzZV9yZWNpcGVfc2ltcGxlKGNvb2tlciwgcG4sIGQsIGFwcGVuZHM9VHJ1ZSk6CisgICAgIiIiCisgICAgUGFyc2UgYSByZWNpcGUgYW5kIG9wdGlvbmFsbHkgYWxsIGJiYXBwZW5kcyB0aGF0IGFwcGx5IHRvIGl0CisgICAgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAgICAiIiIKKyAgICBpbXBvcnQgYmIucHJvdmlkZXJzCisKKyAgICByZWNpcGVmaWxlID0gcG5fdG9fcmVjaXBlKGNvb2tlciwgcG4pCisgICAgaWYgbm90IHJlY2lwZWZpbGU6CisgICAgICAgIHNraXByZWFzb25zID0gZ2V0X3VuYXZhaWxhYmxlX3JlYXNvbnMoY29va2VyLCBwbikKKyAgICAgICAgIyBXZSBtYXkgYXMgd2VsbCByZS11c2UgYmIucHJvdmlkZXJzLk5vUHJvdmlkZXIgaGVyZQorICAgICAgICBpZiBza2lwcmVhc29uczoKKyAgICAgICAgICAgIHJhaXNlIGJiLnByb3ZpZGVycy5Ob1Byb3ZpZGVyKHNraXByZWFzb25zKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgYmIucHJvdmlkZXJzLk5vUHJvdmlkZXIoJ1VuYWJsZSB0byBmaW5kIGFueSByZWNpcGUgZmlsZSBtYXRjaGluZyAlcycgJSBwbikKKyAgICBpZiBhcHBlbmRzOgorICAgICAgICBhcHBlbmRmaWxlcyA9IGNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMocmVjaXBlZmlsZSkKKyAgICByZXR1cm4gcGFyc2VfcmVjaXBlKHJlY2lwZWZpbGUsIGFwcGVuZGZpbGVzLCBkKQorCisKK2RlZiBnZXRfdmFyX2ZpbGVzKGZuLCB2YXJsaXN0LCBkKToKKyAgICAiIiJGaW5kIHRoZSBmaWxlIGluIHdoaWNoIGVhY2ggb2YgYSBsaXN0IG9mIHZhcmlhYmxlcyBpcyBzZXQuCisgICAgTm90ZTogcmVxdWlyZXMgdmFyaWFibGUgaGlzdG9yeSB0byBiZSBlbmFibGVkIHdoZW4gcGFyc2luZy4KKyAgICAiIiIKKyAgICB2YXJmaWxlcyA9IHt9CisgICAgZm9yIHYgaW4gdmFybGlzdDoKKyAgICAgICAgaGlzdG9yeSA9IGQudmFyaGlzdG9yeS52YXJpYWJsZSh2KQorICAgICAgICBmaWxlcyA9IFtdCisgICAgICAgIGZvciBldmVudCBpbiBoaXN0b3J5OgorICAgICAgICAgICAgaWYgJ2ZpbGUnIGluIGV2ZW50IGFuZCBub3QgJ2ZsYWcnIGluIGV2ZW50OgorICAgICAgICAgICAgICAgIGZpbGVzLmFwcGVuZChldmVudFsnZmlsZSddKQorICAgICAgICBpZiBmaWxlczoKKyAgICAgICAgICAgIGFjdHVhbGZpbGUgPSBmaWxlc1stMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFjdHVhbGZpbGUgPSBOb25lCisgICAgICAgIHZhcmZpbGVzW3ZdID0gYWN0dWFsZmlsZQorCisgICAgcmV0dXJuIHZhcmZpbGVzCisKKworZGVmIHBhdGNoX3JlY2lwZV9maWxlKGZuLCB2YWx1ZXMsIHBhdGNoPUZhbHNlLCByZWxwYXRoPScnKToKKyAgICAiIiJVcGRhdGUgb3IgaW5zZXJ0IHZhcmlhYmxlIHZhbHVlcyBpbnRvIGEgcmVjaXBlIGZpbGUgKGFzc3VtaW5nIHlvdQorICAgICAgIGhhdmUgYWxyZWFkeSBpZGVudGlmaWVkIHRoZSBleGFjdCBmaWxlIHlvdSB3YW50IHRvIHVwZGF0ZS4pCisgICAgICAgTm90ZSB0aGF0IHNvbWUgbWFudWFsIGluc3BlY3Rpb24vaW50ZXJ2ZW50aW9uIG1heSBiZSByZXF1aXJlZAorICAgICAgIHNpbmNlIHRoaXMgY2Fubm90IGhhbmRsZSBhbGwgc2l0dWF0aW9ucy4KKyAgICAiIiIKKyAgICByZW1haW5pbmduYW1lcyA9IHt9CisgICAgZm9yIGsgaW4gdmFsdWVzLmtleXMoKToKKyAgICAgICAgcmVtYWluaW5nbmFtZXNba10gPSByZWNpcGVfcHJvZ3Jlc3Npb24uaW5kZXgoaykgaWYgayBpbiByZWNpcGVfcHJvZ3Jlc3Npb24gZWxzZSAtMQorICAgIHJlbWFpbmluZ25hbWVzID0gT3JkZXJlZERpY3Qoc29ydGVkKHJlbWFpbmluZ25hbWVzLml0ZXJpdGVtcygpLCBrZXk9bGFtYmRhIHg6IHhbMV0pKQorCisgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoJ3cnLCBkZWxldGU9RmFsc2UpIGFzIHRmOgorICAgICAgICBkZWYgb3V0cHV0dmFsdWUobmFtZSk6CisgICAgICAgICAgICByYXd0ZXh0ID0gJyVzID0gIiVzIlxuJyAlIChuYW1lLCB2YWx1ZXNbbmFtZV0pCisgICAgICAgICAgICBpZiBuYW1lIGluIG5vd3JhcF92YXJzOgorICAgICAgICAgICAgICAgIHRmLndyaXRlKHJhd3RleHQpCisgICAgICAgICAgICBlbGlmIG5hbWUgaW4gbGlzdF92YXJzOgorICAgICAgICAgICAgICAgIHNwbGl0dmFsdWUgPSB2YWx1ZXNbbmFtZV0uc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIGxlbihzcGxpdHZhbHVlKSA+IDE6CisgICAgICAgICAgICAgICAgICAgIGxpbmVzcGxpdCA9ICcgXFxcbicgKyAoJyAnICogKGxlbihuYW1lKSArIDQpKQorICAgICAgICAgICAgICAgICAgICB0Zi53cml0ZSgnJXMgPSAiJXMlcyJcbicgJSAobmFtZSwgbGluZXNwbGl0LmpvaW4oc3BsaXR2YWx1ZSksIGxpbmVzcGxpdCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGYud3JpdGUocmF3dGV4dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgd3JhcHBlZCA9IHRleHR3cmFwLndyYXAocmF3dGV4dCkKKyAgICAgICAgICAgICAgICBmb3Igd3JhcGxpbmUgaW4gd3JhcHBlZFs6LTFdOgorICAgICAgICAgICAgICAgICAgICB0Zi53cml0ZSgnJXMgXFxcbicgJSB3cmFwbGluZSkKKyAgICAgICAgICAgICAgICB0Zi53cml0ZSgnJXNcbicgJSB3cmFwcGVkWy0xXSkKKworICAgICAgICB0Zm4gPSB0Zi5uYW1lCisgICAgICAgIHdpdGggb3BlbihmbiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgIyBGaXJzdCBydW50aHJvdWdoIC0gZmluZCBleGlzdGluZyBuYW1lcyAoc28gd2Uga25vdyBub3QgdG8gaW5zZXJ0IGJhc2VkIG9uIHJlY2lwZV9wcm9ncmVzc2lvbikKKyAgICAgICAgICAgICMgU2Vjb25kIHJ1bnRocm91Z2ggLSBtYWtlIHRoZSBjaGFuZ2VzCisgICAgICAgICAgICBleGlzdGluZ25hbWVzID0gW10KKyAgICAgICAgICAgIGZvciBydW50aHJvdWdoIGluIFsxLCAyXToKKyAgICAgICAgICAgICAgICBjdXJybmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY3Vycm5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGsgaW4gcmVtYWluaW5nbmFtZXMua2V5cygpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHJlY2lwZV9wcm9ncmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goJ14lcyhfcHJlcGVuZHxfYXBwZW5kKSpbID86PShdJyAlIHAsIGxpbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVtYWluaW5nbmFtZXNba10gPiAtMSBhbmQgcmVjaXBlX3Byb2dyZXNzaW9uLmluZGV4KHApID4gcmVtYWluaW5nbmFtZXNba10gYW5kIHJ1bnRocm91Z2ggPiAxIGFuZCBub3QgayBpbiBleGlzdGluZ25hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHZhbHVlKGspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHJlbWFpbmluZ25hbWVzW2tdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGsgaW4gcmVtYWluaW5nbmFtZXMua2V5cygpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlLm1hdGNoKCdeJXNbID86PV0nICUgaywgbGluZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJuYW1lID0gaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBydW50aHJvdWdoID09IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ25hbWVzLmFwcGVuZChrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHJlbWFpbmluZ25hbWVzW2tdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJybmFtZSBhbmQgcnVudGhyb3VnaCA+IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0dmFsdWUoY3Vycm5hbWUpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgY3Vycm5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICBzbGluZSA9IGxpbmUucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzbGluZS5lbmRzd2l0aCgnXFwnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJybmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGlmIHJ1bnRocm91Z2ggPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgdGYud3JpdGUobGluZSkKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgaWYgcmVtYWluaW5nbmFtZXM6CisgICAgICAgICAgICB0Zi53cml0ZSgnXG4nKQorICAgICAgICAgICAgZm9yIGsgaW4gcmVtYWluaW5nbmFtZXMua2V5cygpOgorICAgICAgICAgICAgICAgIG91dHB1dHZhbHVlKGspCisKKyAgICB3aXRoIG9wZW4odGZuLCAnVScpIGFzIGY6CisgICAgICAgIHRvbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgaWYgcGF0Y2g6CisgICAgICAgIHdpdGggb3BlbihmbiwgJ1UnKSBhcyBmOgorICAgICAgICAgICAgZnJvbWxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICByZWxmbiA9IG9zLnBhdGgucmVscGF0aChmbiwgcmVscGF0aCkKKyAgICAgICAgZGlmZiA9IGRpZmZsaWIudW5pZmllZF9kaWZmKGZyb21saW5lcywgdG9saW5lcywgJ2EvJXMnICUgcmVsZm4sICdiLyVzJyAlIHJlbGZuKQorICAgICAgICBvcy5yZW1vdmUodGZuKQorICAgICAgICByZXR1cm4gZGlmZgorICAgIGVsc2U6CisgICAgICAgIHdpdGggb3BlbihmbiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZWxpbmVzKHRvbGluZXMpCisgICAgICAgIG9zLnJlbW92ZSh0Zm4pCisgICAgICAgIHJldHVybiBOb25lCisKK2RlZiBsb2NhbGlzZV9maWxlX3ZhcnMoZm4sIHZhcmZpbGVzLCB2YXJsaXN0KToKKyAgICAiIiJHaXZlbiBhIGxpc3Qgb2YgdmFyaWFibGVzIGFuZCB2YXJpYWJsZSBoaXN0b3J5IChmZXRjaGVkIHdpdGggZ2V0X3Zhcl9maWxlcygpKQorICAgIGZpbmQgd2hlcmUgZWFjaCB2YXJpYWJsZSBzaG91bGQgYmUgc2V0L2NoYW5nZWQuIFRoaXMgaGFuZGxlcyBmb3IgZXhhbXBsZSB3aGVyZSBhCisgICAgcmVjaXBlIGluY2x1ZGVzIGFuIGluYyBmaWxlIHdoZXJlIHZhcmlhYmxlcyBtaWdodCBiZSBjaGFuZ2VkIC0gaW4gbW9zdCBjYXNlcworICAgIHdlIHdhbnQgdG8gdXBkYXRlIHRoZSBpbmMgZmlsZSB3aGVuIGNoYW5naW5nIHRoZSB2YXJpYWJsZSB2YWx1ZSByYXRoZXIgdGhhbiBhZGRpbmcKKyAgICBpdCB0byB0aGUgcmVjaXBlIGl0c2VsZi4KKyAgICAiIiIKKyAgICBmbmRpciA9IG9zLnBhdGguZGlybmFtZShmbikgKyBvcy5zZXAKKworICAgIGZpcnN0X21ldGFfZmlsZSA9IE5vbmUKKyAgICBmb3IgdiBpbiBtZXRhX3ZhcnM6CisgICAgICAgIGYgPSB2YXJmaWxlcy5nZXQodiwgTm9uZSkKKyAgICAgICAgaWYgZjoKKyAgICAgICAgICAgIGFjdHVhbGRpciA9IG9zLnBhdGguZGlybmFtZShmKSArIG9zLnNlcAorICAgICAgICAgICAgaWYgYWN0dWFsZGlyLnN0YXJ0c3dpdGgoZm5kaXIpOgorICAgICAgICAgICAgICAgIGZpcnN0X21ldGFfZmlsZSA9IGYKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgZmlsZXZhcnMgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgIGZvciB2IGluIHZhcmxpc3Q6CisgICAgICAgIGYgPSB2YXJmaWxlc1t2XQorICAgICAgICAjIE9ubHkgcmV0dXJuIGZpbGVzIHRoYXQgYXJlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgcmVjaXBlIG9yIGluIHNvbWUgZGlyZWN0b3J5IGJlbG93IHRoZXJlCisgICAgICAgICMgKHRoaXMgZXhjbHVkZXMgYmJjbGFzcyBmaWxlcyBhbmQgY29tbW9uIGluYyBmaWxlcyB0aGF0IHdvdWxkbid0IGJlIGFwcHJvcHJpYXRlIHRvIHNldCB0aGUgdmFyaWFibGUKKyAgICAgICAgIyBpbiBpZiB3ZSB3ZXJlIGdvaW5nIHRvIHNldCBhIHZhbHVlIHNwZWNpZmljIHRvIHRoaXMgcmVjaXBlKQorICAgICAgICBpZiBmOgorICAgICAgICAgICAgYWN0dWFsZmlsZSA9IGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVmFyaWFibGUgaXNuJ3QgaW4gYSBmaWxlLCBpZiBpdCdzIG9uZSBvZiB0aGUgIm1ldGEiIHZhcnMsIHVzZSB0aGUgZmlyc3QgZmlsZSB3aXRoIGEgbWV0YSB2YXIgaW4gaXQKKyAgICAgICAgICAgIGlmIGZpcnN0X21ldGFfZmlsZToKKyAgICAgICAgICAgICAgICBhY3R1YWxmaWxlID0gZmlyc3RfbWV0YV9maWxlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFjdHVhbGZpbGUgPSBmbgorCisgICAgICAgIGFjdHVhbGRpciA9IG9zLnBhdGguZGlybmFtZShhY3R1YWxmaWxlKSArIG9zLnNlcAorICAgICAgICBpZiBub3QgYWN0dWFsZGlyLnN0YXJ0c3dpdGgoZm5kaXIpOgorICAgICAgICAgICAgYWN0dWFsZmlsZSA9IGZuCisgICAgICAgIGZpbGV2YXJzW2FjdHVhbGZpbGVdLmFwcGVuZCh2KQorCisgICAgcmV0dXJuIGZpbGV2YXJzCisKK2RlZiBwYXRjaF9yZWNpcGUoZCwgZm4sIHZhcnZhbHVlcywgcGF0Y2g9RmFsc2UsIHJlbHBhdGg9JycpOgorICAgICIiIk1vZGlmeSBhIGxpc3Qgb2YgdmFyaWFibGUgdmFsdWVzIGluIHRoZSBzcGVjaWZpZWQgcmVjaXBlLiBIYW5kbGVzIGluYyBmaWxlcyBpZgorICAgIHVzZWQgYnkgdGhlIHJlY2lwZS4KKyAgICAiIiIKKyAgICB2YXJsaXN0ID0gdmFydmFsdWVzLmtleXMoKQorICAgIHZhcmZpbGVzID0gZ2V0X3Zhcl9maWxlcyhmbiwgdmFybGlzdCwgZCkKKyAgICBsb2NzID0gbG9jYWxpc2VfZmlsZV92YXJzKGZuLCB2YXJmaWxlcywgdmFybGlzdCkKKyAgICBwYXRjaGVzID0gW10KKyAgICBmb3IgZix2IGluIGxvY3MuaXRlcml0ZW1zKCk6CisgICAgICAgIHZhbHMgPSB7azogdmFydmFsdWVzW2tdIGZvciBrIGluIHZ9CisgICAgICAgIHBhdGNoZGF0YSA9IHBhdGNoX3JlY2lwZV9maWxlKGYsIHZhbHMsIHBhdGNoLCByZWxwYXRoKQorICAgICAgICBpZiBwYXRjaDoKKyAgICAgICAgICAgIHBhdGNoZXMuYXBwZW5kKHBhdGNoZGF0YSkKKworICAgIGlmIHBhdGNoOgorICAgICAgICByZXR1cm4gcGF0Y2hlcworICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKKworCitkZWYgY29weV9yZWNpcGVfZmlsZXMoZCwgdGd0X2Rpciwgd2hvbGVfZGlyPUZhbHNlLCBkb3dubG9hZD1UcnVlKToKKyAgICAiIiJDb3B5IChsb2NhbCkgcmVjaXBlIGZpbGVzLCBpbmNsdWRpbmcgYm90aCBmaWxlcyBpbmNsdWRlZCB2aWEgaW5jbHVkZS9yZXF1aXJlLAorICAgIGFuZCBmaWxlcyByZWZlcnJlZCB0byBpbiB0aGUgU1JDX1VSSSB2YXJpYWJsZS4iIiIKKyAgICBpbXBvcnQgYmIuZmV0Y2gyCisgICAgaW1wb3J0IG9lLnBhdGgKKworICAgICMgRklYTUUgbmVlZCBhIHdhcm5pbmcgaWYgdGhlIHVuZXhwYW5kZWQgU1JDX1VSSSB2YWx1ZSBjb250YWlucyB2YXJpYWJsZSByZWZlcmVuY2VzCisKKyAgICB1cmlzID0gKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaCh1cmlzLCBkKQorICAgIGlmIGRvd25sb2FkOgorICAgICAgICBmZXRjaC5kb3dubG9hZCgpCisKKyAgICAjIENvcHkgbG9jYWwgZmlsZXMgdG8gdGFyZ2V0IGRpcmVjdG9yeSBhbmQgZ2F0aGVyIGFueSByZW1vdGUgZmlsZXMKKyAgICBiYl9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKSkgKyBvcy5zZXAKKyAgICByZW1vdGVzID0gW10KKyAgICBpbmNsdWRlcyA9IFtwYXRoIGZvciBwYXRoIGluIGQuZ2V0VmFyKCdCQklOQ0xVREVEJywgVHJ1ZSkuc3BsaXQoKSBpZgorICAgICAgICAgICAgICAgIHBhdGguc3RhcnRzd2l0aChiYl9kaXIpIGFuZCBvcy5wYXRoLmV4aXN0cyhwYXRoKV0KKyAgICBmb3IgcGF0aCBpbiBmZXRjaC5sb2NhbHBhdGhzKCkgKyBpbmNsdWRlczoKKyAgICAgICAgIyBPbmx5IGltcG9ydCBmaWxlcyB0aGF0IGFyZSB1bmRlciB0aGUgbWV0YSBkaXJlY3RvcnkKKyAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKGJiX2Rpcik6CisgICAgICAgICAgICBpZiBub3Qgd2hvbGVfZGlyOgorICAgICAgICAgICAgICAgIHJlbHBhdGggPSBvcy5wYXRoLnJlbHBhdGgocGF0aCwgYmJfZGlyKQorICAgICAgICAgICAgICAgIHN1YmRpciA9IG9zLnBhdGguam9pbih0Z3RfZGlyLCBvcy5wYXRoLmRpcm5hbWUocmVscGF0aCkpCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHN1YmRpcik6CisgICAgICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHN1YmRpcikKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weTIocGF0aCwgb3MucGF0aC5qb2luKHRndF9kaXIsIHJlbHBhdGgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVtb3Rlcy5hcHBlbmQocGF0aCkKKyAgICAjIFNpbXBseSBjb3B5IHdob2xlIG1ldGEgZGlyLCBpZiByZXF1ZXN0ZWQKKyAgICBpZiB3aG9sZV9kaXI6CisgICAgICAgIHNodXRpbC5jb3B5dHJlZShiYl9kaXIsIHRndF9kaXIpCisKKyAgICByZXR1cm4gcmVtb3RlcworCisKK2RlZiBnZXRfcmVjaXBlX3BhdGNoZXMoZCk6CisgICAgIiIiR2V0IGEgbGlzdCBvZiB0aGUgcGF0Y2hlcyBpbmNsdWRlZCBpbiBTUkNfVVJJIHdpdGhpbiBhIHJlY2lwZS4iIiIKKyAgICBwYXRjaGZpbGVzID0gW10KKyAgICAjIEV4ZWN1dGUgc3JjX3BhdGNoZXMoKSBkZWZpbmVkIGluIHBhdGNoLmJiY2xhc3MgLSB0aGlzIHdvcmtzIHNpbmNlIHRoYXQgY2xhc3MKKyAgICAjIGlzIGluaGVyaXRlZCBnbG9iYWxseQorICAgIHBhdGNoZXMgPSBiYi51dGlscy5leGVjX2ZsYXRfcHl0aG9uX2Z1bmMoJ3NyY19wYXRjaGVzJywgZCkKKyAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgXywgXywgbG9jYWwsIF8sIF8sIHBhcm0gPSBiYi5mZXRjaC5kZWNvZGV1cmwocGF0Y2gpCisgICAgICAgIHBhdGNoZmlsZXMuYXBwZW5kKGxvY2FsKQorICAgIHJldHVybiBwYXRjaGZpbGVzCisKKworZGVmIGdldF9yZWNpcGVfcGF0Y2hlZF9maWxlcyhkKToKKyAgICAiIiIKKyAgICBHZXQgdGhlIGxpc3Qgb2YgcGF0Y2hlcyBmb3IgYSByZWNpcGUgYWxvbmcgd2l0aCB0aGUgZmlsZXMgZWFjaCBwYXRjaCBtb2RpZmllcy4KKyAgICBQYXJhbXM6CisgICAgICAgIGQ6IHRoZSBkYXRhc3RvcmUgZm9yIHRoZSByZWNpcGUKKyAgICBSZXR1cm5zOgorICAgICAgICBhIGRpY3QgbWFwcGluZyBwYXRjaCBmaWxlIHBhdGggdG8gYSBsaXN0IG9mIHR1cGxlcyBvZiBjaGFuZ2VkIGZpbGVzIGFuZAorICAgICAgICBjaGFuZ2UgbW9kZSAoJ0EnIGZvciBhZGQsICdEJyBmb3IgZGVsZXRlIG9yICdNJyBmb3IgbW9kaWZ5KQorICAgICIiIgorICAgIGltcG9ydCBvZS5wYXRjaAorICAgICMgRXhlY3V0ZSBzcmNfcGF0Y2hlcygpIGRlZmluZWQgaW4gcGF0Y2guYmJjbGFzcyAtIHRoaXMgd29ya3Mgc2luY2UgdGhhdCBjbGFzcworICAgICMgaXMgaW5oZXJpdGVkIGdsb2JhbGx5CisgICAgcGF0Y2hlcyA9IGJiLnV0aWxzLmV4ZWNfZmxhdF9weXRob25fZnVuYygnc3JjX3BhdGNoZXMnLCBkKQorICAgIHBhdGNoZWRmaWxlcyA9IHt9CisgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CisgICAgICAgIF8sIF8sIHBhdGNoZmlsZSwgXywgXywgcGFybSA9IGJiLmZldGNoLmRlY29kZXVybChwYXRjaCkKKyAgICAgICAgc3RyaXBsZXZlbCA9IGludChwYXJtWydzdHJpcGxldmVsJ10pCisgICAgICAgIHBhdGNoZWRmaWxlc1twYXRjaGZpbGVdID0gb2UucGF0Y2guUGF0Y2hTZXQuZ2V0UGF0Y2hlZEZpbGVzKHBhdGNoZmlsZSwgc3RyaXBsZXZlbCwgb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdTJywgVHJ1ZSksIHBhcm0uZ2V0KCdwYXRjaGRpcicsICcnKSkpCisgICAgcmV0dXJuIHBhdGNoZWRmaWxlcworCisKK2RlZiB2YWxpZGF0ZV9wbihwbik6CisgICAgIiIiUGVyZm9ybSB2YWxpZGF0aW9uIG9uIGEgcmVjaXBlIG5hbWUgKFBOKSBmb3IgYSBuZXcgcmVjaXBlLiIiIgorICAgIHJlc2VydmVkX25hbWVzID0gWydmb3JjZXZhcmlhYmxlJywgJ2FwcGVuZCcsICdwcmVwZW5kJywgJ3JlbW92ZSddCisgICAgaWYgbm90IHJlLm1hdGNoKCdbMC05YS16LS5dKycsIHBuKToKKyAgICAgICAgcmV0dXJuICdSZWNpcGUgbmFtZSAiJXMiIGlzIGludmFsaWQ6IG9ubHkgY2hhcmFjdGVycyAwLTksIGEteiwgLSBhbmQgLiBhcmUgYWxsb3dlZCcgJSBwbgorICAgIGVsaWYgcG4gaW4gcmVzZXJ2ZWRfbmFtZXM6CisgICAgICAgIHJldHVybiAnUmVjaXBlIG5hbWUgIiVzIiBpcyBpbnZhbGlkOiBpcyBhIHJlc2VydmVkIGtleXdvcmQnICUgcG4KKyAgICBlbGlmIHBuLnN0YXJ0c3dpdGgoJ3BuLScpOgorICAgICAgICByZXR1cm4gJ1JlY2lwZSBuYW1lICIlcyIgaXMgaW52YWxpZDogbmFtZXMgc3RhcnRpbmcgd2l0aCAicG4tIiBhcmUgcmVzZXJ2ZWQnICUgcG4KKyAgICByZXR1cm4gJycKKworCitkZWYgZ2V0X2JiYXBwZW5kX3BhdGgoZCwgZGVzdGxheWVyZGlyLCB3aWxkY2FyZHZlcj1GYWxzZSk6CisgICAgIiIiRGV0ZXJtaW5lIGhvdyBhIGJiYXBwZW5kIGZvciBhIHJlY2lwZSBzaG91bGQgYmUgbmFtZWQgYW5kIGxvY2F0ZWQgd2l0aGluIGFub3RoZXIgbGF5ZXIiIiIKKworICAgIGltcG9ydCBiYi5jb29rZXJkYXRhCisKKyAgICBkZXN0bGF5ZXJkaXIgPSBvcy5wYXRoLmFic3BhdGgoZGVzdGxheWVyZGlyKQorICAgIHJlY2lwZWZpbGUgPSBkLmdldFZhcignRklMRScsIFRydWUpCisgICAgcmVjaXBlZm4gPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpWzBdCisgICAgaWYgd2lsZGNhcmR2ZXIgYW5kICdfJyBpbiByZWNpcGVmbjoKKyAgICAgICAgcmVjaXBlZm4gPSByZWNpcGVmbi5zcGxpdCgnXycsIDEpWzBdICsgJ18lJworICAgIGFwcGVuZGZuID0gcmVjaXBlZm4gKyAnLmJiYXBwZW5kJworCisgICAgIyBQYXJzZSB0aGUgc3BlY2lmaWVkIGxheWVyJ3MgbGF5ZXIuY29uZiBmaWxlIGRpcmVjdGx5LCBpbiBjYXNlIHRoZSBsYXllciBpc24ndCBpbiBiYmxheWVycy5jb25mCisgICAgY29uZmRhdGEgPSBkLmNyZWF0ZUNvcHkoKQorICAgIGNvbmZkYXRhLnNldFZhcignQkJGSUxFUycsICcnKQorICAgIGNvbmZkYXRhLnNldFZhcignTEFZRVJESVInLCBkZXN0bGF5ZXJkaXIpCisgICAgZGVzdGxheWVyY29uZiA9IG9zLnBhdGguam9pbihkZXN0bGF5ZXJkaXIsICJjb25mIiwgImxheWVyLmNvbmYiKQorICAgIGNvbmZkYXRhID0gYmIuY29va2VyZGF0YS5wYXJzZV9jb25maWdfZmlsZShkZXN0bGF5ZXJjb25mLCBjb25mZGF0YSkKKworICAgIG9yaWdsYXllcmRpciA9IGZpbmRfbGF5ZXJkaXIocmVjaXBlZmlsZSkKKyAgICBpZiBub3Qgb3JpZ2xheWVyZGlyOgorICAgICAgICByZXR1cm4gKE5vbmUsIEZhbHNlKQorICAgICMgTm93IGpvaW4gdGhpcyB0byB0aGUgcGF0aCB3aGVyZSB0aGUgYmJhcHBlbmQgaXMgZ29pbmcgYW5kIGNoZWNrIGlmIGl0IGlzIGNvdmVyZWQgYnkgQkJGSUxFUworICAgIGFwcGVuZHBhdGggPSBvcy5wYXRoLmpvaW4oZGVzdGxheWVyZGlyLCBvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCBvcmlnbGF5ZXJkaXIpLCBhcHBlbmRmbikKKyAgICBjbG9zZXBhdGggPSAnJworICAgIHBhdGhvayA9IFRydWUKKyAgICBmb3IgYmJmaWxlc3BlYyBpbiBjb25mZGF0YS5nZXRWYXIoJ0JCRklMRVMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKGFwcGVuZHBhdGgsIGJiZmlsZXNwZWMpOgorICAgICAgICAgICAgIyBPdXIgYXBwZW5kIHBhdGggd29ya3MsIHdlJ3JlIGRvbmUKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsaWYgYmJmaWxlc3BlYy5zdGFydHN3aXRoKGRlc3RsYXllcmRpcikgYW5kIGZubWF0Y2guZm5tYXRjaGNhc2UoJ3Rlc3QuYmJhcHBlbmQnLCBvcy5wYXRoLmJhc2VuYW1lKGJiZmlsZXNwZWMpKToKKyAgICAgICAgICAgICMgVHJ5IHRvIGZpbmQgdGhlIGxvbmdlc3QgbWF0Y2hpbmcgcGF0aAorICAgICAgICAgICAgaWYgbGVuKGJiZmlsZXNwZWMpID4gbGVuKGNsb3NlcGF0aCk6CisgICAgICAgICAgICAgICAgY2xvc2VwYXRoID0gYmJmaWxlc3BlYworICAgIGVsc2U6CisgICAgICAgICMgVW5mb3J0dW5hdGVseSB0aGUgYmJhcHBlbmQgbGF5ZXIgYW5kIHRoZSBvcmlnaW5hbCByZWNpcGUncyBsYXllciBkb24ndCBoYXZlIHRoZSBzYW1lIHN0cnVjdHVyZQorICAgICAgICBpZiBjbG9zZXBhdGg6CisgICAgICAgICAgICAjIGJiYXBwZW5kIGxheWVyJ3MgbGF5ZXIuY29uZiBhdCBsZWFzdCBoYXMgYSBzcGVjIHRoYXQgcGlja3MgdXAgLmJiYXBwZW5kIGZpbGVzCisgICAgICAgICAgICAjIE5vdyB3ZSBqdXN0IG5lZWQgdG8gc3Vic3RpdHV0ZSBvdXQgYW55IHdpbGRjYXJkcworICAgICAgICAgICAgYXBwZW5kc3ViZGlyID0gb3MucGF0aC5yZWxwYXRoKG9zLnBhdGguZGlybmFtZShjbG9zZXBhdGgpLCBkZXN0bGF5ZXJkaXIpCisgICAgICAgICAgICBpZiAncmVjaXBlcy0qJyBpbiBhcHBlbmRzdWJkaXI6CisgICAgICAgICAgICAgICAgIyBUcnkgdG8gY29weSB0aGlzIHBhcnQgZnJvbSB0aGUgb3JpZ2luYWwgcmVjaXBlIHBhdGgKKyAgICAgICAgICAgICAgICByZXMgPSByZS5zZWFyY2goJy9yZWNpcGVzLVteL10rLycsIHJlY2lwZWZpbGUpCisgICAgICAgICAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRzdWJkaXIgPSBhcHBlbmRzdWJkaXIucmVwbGFjZSgnL3JlY2lwZXMtKi8nLCByZXMuZ3JvdXAoMCkpCisgICAgICAgICAgICAjIFRoaXMgaXMgY3J1ZGUsIGJ1dCB3ZSBoYXZlIHRvIGRvIHNvbWV0aGluZworICAgICAgICAgICAgYXBwZW5kc3ViZGlyID0gYXBwZW5kc3ViZGlyLnJlcGxhY2UoJyonLCByZWNpcGVmbi5zcGxpdCgnXycpWzBdKQorICAgICAgICAgICAgYXBwZW5kc3ViZGlyID0gYXBwZW5kc3ViZGlyLnJlcGxhY2UoJz8nLCAnYScpCisgICAgICAgICAgICBhcHBlbmRwYXRoID0gb3MucGF0aC5qb2luKGRlc3RsYXllcmRpciwgYXBwZW5kc3ViZGlyLCBhcHBlbmRmbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhdGhvayA9IEZhbHNlCisgICAgcmV0dXJuIChhcHBlbmRwYXRoLCBwYXRob2spCisKKworZGVmIGJiYXBwZW5kX3JlY2lwZShyZCwgZGVzdGxheWVyZGlyLCBzcmNmaWxlcywgaW5zdGFsbD1Ob25lLCB3aWxkY2FyZHZlcj1GYWxzZSwgbWFjaGluZT1Ob25lLCBleHRyYWxpbmVzPU5vbmUsIHJlbW92ZXZhbHVlcz1Ob25lKToKKyAgICAiIiIKKyAgICBXcml0ZXMgYSBiYmFwcGVuZCBmaWxlIGZvciBhIHJlY2lwZQorICAgIFBhcmFtZXRlcnM6CisgICAgICAgIHJkOiBkYXRhIGRpY3Rpb25hcnkgZm9yIHRoZSByZWNpcGUKKyAgICAgICAgZGVzdGxheWVyZGlyOiBiYXNlIGRpcmVjdG9yeSBvZiB0aGUgbGF5ZXIgdG8gcGxhY2UgdGhlIGJiYXBwZW5kIGluCisgICAgICAgICAgICAoc3ViZGlyZWN0b3J5IHBhdGggZnJvbSB0aGVyZSB3aWxsIGJlIGRldGVybWluZWQgYXV0b21hdGljYWxseSkKKyAgICAgICAgc3JjZmlsZXM6IGRpY3Qgb2Ygc291cmNlIGZpbGVzIHRvIGFkZCB0byBTUkNfVVJJLCB3aGVyZSB0aGUgdmFsdWUKKyAgICAgICAgICAgIGlzIHRoZSBmdWxsIHBhdGggdG8gdGhlIGZpbGUgdG8gYmUgYWRkZWQsIGFuZCB0aGUgdmFsdWUgaXMgdGhlCisgICAgICAgICAgICBvcmlnaW5hbCBmaWxlbmFtZSBhcyBpdCB3b3VsZCBhcHBlYXIgaW4gU1JDX1VSSSBvciBOb25lIGlmIGl0CisgICAgICAgICAgICBpc24ndCBhbHJlYWR5IHByZXNlbnQuIFlvdSBtYXkgcGFzcyBOb25lIGZvciB0aGlzIHBhcmFtZXRlciBpZgorICAgICAgICAgICAgeW91IHNpbXBseSB3YW50IHRvIHNwZWNpZnkgeW91ciBvd24gY29udGVudCB2aWEgdGhlIGV4dHJhbGluZXMKKyAgICAgICAgICAgIHBhcmFtZXRlci4KKyAgICAgICAgaW5zdGFsbDogZGljdCBtYXBwaW5nIGVudHJpZXMgaW4gc3JjZmlsZXMgdG8gYSB0dXBsZSBvZiB0d28gZWxlbWVudHM6CisgICAgICAgICAgICBpbnN0YWxsIHBhdGggKCp3aXRob3V0KiAke0R9IHByZWZpeCkgYW5kIHBlcm1pc3Npb24gdmFsdWUgKGFzIGEKKyAgICAgICAgICAgIHN0cmluZywgZS5nLiAnMDY0NCcpLgorICAgICAgICB3aWxkY2FyZHZlcjogVHJ1ZSB0byB1c2UgYSAlIHdpbGRjYXJkIGluIHRoZSBiYmFwcGVuZCBmaWxlbmFtZSwgb3IKKyAgICAgICAgICAgIEZhbHNlIHRvIG1ha2UgdGhlIGJiYXBwZW5kIHNwZWNpZmljIHRvIHRoZSByZWNpcGUgdmVyc2lvbi4KKyAgICAgICAgbWFjaGluZToKKyAgICAgICAgICAgIElmIHNwZWNpZmllZCwgbWFrZSB0aGUgY2hhbmdlcyBpbiB0aGUgYmJhcHBlbmQgc3BlY2lmaWMgdG8gdGhpcworICAgICAgICAgICAgbWFjaGluZS4gVGhpcyB3aWxsIGFsc28gY2F1c2UgUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKyAgICAgICAgICAgIHRvIGJlIGFkZGVkIHRvIHRoZSBiYmFwcGVuZC4KKyAgICAgICAgZXh0cmFsaW5lczoKKyAgICAgICAgICAgIEV4dHJhIGxpbmVzIHRvIGFkZCB0byB0aGUgYmJhcHBlbmQuIFRoaXMgbWF5IGJlIGEgZGljdCBvZiBuYW1lCisgICAgICAgICAgICB2YWx1ZSBwYWlycywgb3Igc2ltcGx5IGEgbGlzdCBvZiB0aGUgbGluZXMuCisgICAgICAgIHJlbW92ZXZhbHVlczoKKyAgICAgICAgICAgIFZhcmlhYmxlIHZhbHVlcyB0byByZW1vdmUgLSBhIGRpY3Qgb2YgbmFtZXMvdmFsdWVzLgorICAgICIiIgorCisgICAgaWYgbm90IHJlbW92ZXZhbHVlczoKKyAgICAgICAgcmVtb3ZldmFsdWVzID0ge30KKworICAgICMgRGV0ZXJtaW5lIGhvdyB0aGUgYmJhcHBlbmQgc2hvdWxkIGJlIG5hbWVkCisgICAgYXBwZW5kcGF0aCwgcGF0aG9rID0gZ2V0X2JiYXBwZW5kX3BhdGgocmQsIGRlc3RsYXllcmRpciwgd2lsZGNhcmR2ZXIpCisgICAgaWYgbm90IGFwcGVuZHBhdGg6CisgICAgICAgIGJiLmVycm9yKCdVbmFibGUgdG8gZGV0ZXJtaW5lIGxheWVyIGRpcmVjdG9yeSBjb250YWluaW5nICVzJyAlIHJlY2lwZWZpbGUpCisgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSkKKyAgICBpZiBub3QgcGF0aG9rOgorICAgICAgICBiYi53YXJuKCdVbmFibGUgdG8gZGV0ZXJtaW5lIGNvcnJlY3Qgc3ViZGlyZWN0b3J5IHBhdGggZm9yIGJiYXBwZW5kIGZpbGUgLSBjaGVjayB0aGF0IHdoYXQgJXMgYWRkcyB0byBCQkZJTEVTIGFsc28gbWF0Y2hlcyAuYmJhcHBlbmQgZmlsZXMuIFVzaW5nICVzIGZvciBub3csIGJ1dCB1bnRpbCB5b3UgZml4IHRoaXMgdGhlIGJiYXBwZW5kIHdpbGwgbm90IGJlIGFwcGxpZWQuJyAlIChvcy5wYXRoLmpvaW4oZGVzdGxheWVyZGlyLCAnY29uZicsICdsYXllci5jb25mJyksIG9zLnBhdGguZGlybmFtZShhcHBlbmRwYXRoKSkpCisKKyAgICBhcHBlbmRkaXIgPSBvcy5wYXRoLmRpcm5hbWUoYXBwZW5kcGF0aCkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoYXBwZW5kZGlyKQorCisgICAgIyBGSVhNRSBjaGVjayBpZiB0aGUgYmJhcHBlbmQgZG9lc24ndCBnZXQgb3ZlcnJpZGRlbiBieSBhIGhpZ2hlciBwcmlvcml0eSBsYXllcj8KKworICAgIGxheWVyZGlycyA9IFtvcy5wYXRoLmFic3BhdGgobGF5ZXJkaXIpIGZvciBsYXllcmRpciBpbiByZC5nZXRWYXIoJ0JCTEFZRVJTJywgVHJ1ZSkuc3BsaXQoKV0KKyAgICBpZiBub3Qgb3MucGF0aC5hYnNwYXRoKGRlc3RsYXllcmRpcikgaW4gbGF5ZXJkaXJzOgorICAgICAgICBiYi53YXJuKCdTcGVjaWZpZWQgbGF5ZXIgaXMgbm90IGN1cnJlbnRseSBlbmFibGVkIGluIGJibGF5ZXJzLmNvbmYsIHlvdSB3aWxsIG5lZWQgdG8gYWRkIGl0IGJlZm9yZSB0aGlzIGJiYXBwZW5kIHdpbGwgYmUgYWN0aXZlJykKKworICAgIGJiYXBwZW5kbGluZXMgPSBbXQorICAgIGlmIGV4dHJhbGluZXM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXh0cmFsaW5lcywgZGljdCk6CisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gZXh0cmFsaW5lcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBiYmFwcGVuZGxpbmVzLmFwcGVuZCgobmFtZSwgJz0nLCB2YWx1ZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIERvIG91ciBiZXN0IHRvIHNwbGl0IGl0CisgICAgICAgICAgICBmb3IgbGluZSBpbiBleHRyYWxpbmVzOgorICAgICAgICAgICAgICAgIGlmIGxpbmVbLTFdID09ICdcbic6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KKyAgICAgICAgICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnNwbGl0KE5vbmUsIDIpCisgICAgICAgICAgICAgICAgaWYgbGVuKHNwbGl0bGluZSkgPT0gMzoKKyAgICAgICAgICAgICAgICAgICAgYmJhcHBlbmRsaW5lcy5hcHBlbmQodHVwbGUoc3BsaXRsaW5lKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ludmFsaWQgZXh0cmFsaW5lcyB2YWx1ZSBwYXNzZWQnKQorCisgICAgZGVmIHBvcGxpbmUodmFybmFtZSk6CisgICAgICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oYmJhcHBlbmRsaW5lcykpOgorICAgICAgICAgICAgaWYgYmJhcHBlbmRsaW5lc1tpXVswXSA9PSB2YXJuYW1lOgorICAgICAgICAgICAgICAgIGxpbmUgPSBiYmFwcGVuZGxpbmVzLnBvcChpKQorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgYXBwZW5kbGluZSh2YXJuYW1lLCBvcCwgdmFsdWUpOgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgbGVuKGJiYXBwZW5kbGluZXMpKToKKyAgICAgICAgICAgIGl0ZW0gPSBiYmFwcGVuZGxpbmVzW2ldCisgICAgICAgICAgICBpZiBpdGVtWzBdID09IHZhcm5hbWU6CisgICAgICAgICAgICAgICAgYmJhcHBlbmRsaW5lc1tpXSA9IChpdGVtWzBdLCBpdGVtWzFdLCBpdGVtWzJdICsgJyAnICsgdmFsdWUpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiYXBwZW5kbGluZXMuYXBwZW5kKCh2YXJuYW1lLCBvcCwgdmFsdWUpKQorCisgICAgZGVzdHN1YmRpciA9IHJkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGlmIHNyY2ZpbGVzOgorICAgICAgICBiYmFwcGVuZGxpbmVzLmFwcGVuZCgoJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kJywgJzo9JywgJyR7VEhJU0RJUn0vJHtQTn06JykpCisKKyAgICBhcHBlbmRvdmVycmlkZSA9ICcnCisgICAgaWYgbWFjaGluZToKKyAgICAgICAgYmJhcHBlbmRsaW5lcy5hcHBlbmQoKCdQQUNLQUdFX0FSQ0gnLCAnPScsICcke01BQ0hJTkVfQVJDSH0nKSkKKyAgICAgICAgYXBwZW5kb3ZlcnJpZGUgPSAnXyVzJyAlIG1hY2hpbmUKKyAgICBjb3B5ZmlsZXMgPSB7fQorICAgIGlmIHNyY2ZpbGVzOgorICAgICAgICBpbnN0ZnVuY2xpbmVzID0gW10KKyAgICAgICAgZm9yIG5ld2ZpbGUsIG9yaWdzcmNmaWxlIGluIHNyY2ZpbGVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc3JjZmlsZSA9IG9yaWdzcmNmaWxlCisgICAgICAgICAgICBzcmN1cmllbnRyeSA9IE5vbmUKKyAgICAgICAgICAgIGlmIG5vdCBzcmNmaWxlOgorICAgICAgICAgICAgICAgIHNyY2ZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKG5ld2ZpbGUpCisgICAgICAgICAgICAgICAgc3JjdXJpZW50cnkgPSAnZmlsZTovLyVzJyAlIHNyY2ZpbGUKKyAgICAgICAgICAgICAgICAjIERvdWJsZS1jaGVjayBpdCdzIG5vdCB0aGVyZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgIyBGSVhNRSBkbyB3ZSBjYXJlIGlmIHRoZSBlbnRyeSBpcyBhZGRlZCBieSBhbm90aGVyIGJiYXBwZW5kIHRoYXQgbWlnaHQgZ28gYXdheT8KKyAgICAgICAgICAgICAgICBpZiBub3Qgc3JjdXJpZW50cnkgaW4gcmQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbWFjaGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZGxpbmUoJ1NSQ19VUklfYXBwZW5kJXMnICUgYXBwZW5kb3ZlcnJpZGUsICc9JywgJyAnICsgc3JjdXJpZW50cnkpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRsaW5lKCdTUkNfVVJJJywgJys9Jywgc3JjdXJpZW50cnkpCisgICAgICAgICAgICBjb3B5ZmlsZXNbbmV3ZmlsZV0gPSBzcmNmaWxlCisgICAgICAgICAgICBpZiBpbnN0YWxsOgorICAgICAgICAgICAgICAgIGluc3RpdGVtID0gaW5zdGFsbC5wb3AobmV3ZmlsZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBpbnN0aXRlbToKKyAgICAgICAgICAgICAgICAgICAgKGRlc3RwYXRoLCBwZXJtcykgPSBpbnN0aXRlbQorICAgICAgICAgICAgICAgICAgICBpbnN0ZGVzdHBhdGggPSByZXBsYWNlX2Rpcl92YXJzKGRlc3RwYXRoLCByZCkKKyAgICAgICAgICAgICAgICAgICAgaW5zdGRpcmxpbmUgPSAnaW5zdGFsbCAtZCAke0R9JXMnICUgb3MucGF0aC5kaXJuYW1lKGluc3RkZXN0cGF0aCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGluc3RkaXJsaW5lIGluIGluc3RmdW5jbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZnVuY2xpbmVzLmFwcGVuZChpbnN0ZGlybGluZSkKKyAgICAgICAgICAgICAgICAgICAgaW5zdGZ1bmNsaW5lcy5hcHBlbmQoJ2luc3RhbGwgLW0gJXMgJHtXT1JLRElSfS8lcyAke0R9JXMnICUgKHBlcm1zLCBvcy5wYXRoLmJhc2VuYW1lKHNyY2ZpbGUpLCBpbnN0ZGVzdHBhdGgpKQorICAgICAgICBpZiBpbnN0ZnVuY2xpbmVzOgorICAgICAgICAgICAgYmJhcHBlbmRsaW5lcy5hcHBlbmQoKCdkb19pbnN0YWxsX2FwcGVuZCVzKCknICUgYXBwZW5kb3ZlcnJpZGUsICcnLCBpbnN0ZnVuY2xpbmVzKSkKKworICAgIGJiLm5vdGUoJ1dyaXRpbmcgYXBwZW5kIGZpbGUgJXMnICUgYXBwZW5kcGF0aCkKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKGFwcGVuZHBhdGgpOgorICAgICAgICAjIFdvcmsgYXJvdW5kIGxhY2sgb2Ygbm9ubG9jYWwgaW4gcHl0aG9uIDIKKyAgICAgICAgZXh0dmFycyA9IHsnZGVzdHN1YmRpcic6IGRlc3RzdWJkaXJ9CisKKyAgICAgICAgZGVmIGFwcGVuZGZpbGVfdmFyZnVuYyh2YXJuYW1lLCBvcmlndmFsdWUsIG9wLCBuZXdsaW5lcyk6CisgICAgICAgICAgICBpZiB2YXJuYW1lID09ICdGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCc6CisgICAgICAgICAgICAgICAgaWYgb3JpZ3ZhbHVlLnN0YXJ0c3dpdGgoJyR7VEhJU0RJUn0vJyk6CisgICAgICAgICAgICAgICAgICAgIHBvcGxpbmUoJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kJykKKyAgICAgICAgICAgICAgICAgICAgZXh0dmFyc1snZGVzdHN1YmRpciddID0gcmQuZXhwYW5kKG9yaWd2YWx1ZS5zcGxpdCgnJHtUSElTRElSfS8nLCAxKVsxXS5yc3RyaXAoJzonKSkKKyAgICAgICAgICAgIGVsaWYgdmFybmFtZSA9PSAnUEFDS0FHRV9BUkNIJzoKKyAgICAgICAgICAgICAgICBpZiBtYWNoaW5lOgorICAgICAgICAgICAgICAgICAgICBwb3BsaW5lKCdQQUNLQUdFX0FSQ0gnKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1hY2hpbmUsIE5vbmUsIDQsIEZhbHNlKQorICAgICAgICAgICAgZWxpZiB2YXJuYW1lLnN0YXJ0c3dpdGgoJ2RvX2luc3RhbGxfYXBwZW5kJyk6CisgICAgICAgICAgICAgICAgZnVuYyA9IHBvcGxpbmUodmFybmFtZSkKKyAgICAgICAgICAgICAgICBpZiBmdW5jOgorICAgICAgICAgICAgICAgICAgICBpbnN0ZnVuY2xpbmVzID0gW2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiBvcmlndmFsdWUuc3RyaXAoJ1xuJykuc3BsaXRsaW5lcygpXQorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmdW5jWzJdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmUgaW4gaW5zdGZ1bmNsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZnVuY2xpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGluc3RmdW5jbGluZXMsIE5vbmUsIDQsIEZhbHNlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzcGxpdHZhbCA9IG9yaWd2YWx1ZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgcmVtb3ZldmFyID0gdmFybmFtZQorICAgICAgICAgICAgICAgIGlmIHZhcm5hbWUgaW4gWydTUkNfVVJJJywgJ1NSQ19VUklfYXBwZW5kJXMnICUgYXBwZW5kb3ZlcnJpZGVdOgorICAgICAgICAgICAgICAgICAgICByZW1vdmV2YXIgPSAnU1JDX1VSSScKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHBvcGxpbmUodmFybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmVbMl0gbm90IGluIHNwbGl0dmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsLmFwcGVuZChsaW5lWzJdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHBvcGxpbmUodmFybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsID0gW2xpbmVbMl1dCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgaWYgcmVtb3ZldmFyIGluIHJlbW92ZXZhbHVlczoKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gcmVtb3ZldmFsdWVzW3JlbW92ZXZhcl0KKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZW1vdmUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVtb3ZlIGluIHNwbGl0dmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsLnJlbW92ZShyZW1vdmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciByZW1vdmVpdGVtIGluIHJlbW92ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZW1vdmVpdGVtIGluIHNwbGl0dmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHZhbC5yZW1vdmUocmVtb3ZlaXRlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKworICAgICAgICAgICAgICAgIGlmIGNoYW5nZWQ6CisgICAgICAgICAgICAgICAgICAgIG5ld3ZhbHVlID0gc3BsaXR2YWwKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKG5ld3ZhbHVlKSA9PSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBFbnN1cmUgaXQncyB3cml0dGVuIG91dCBhcyBvbmUgbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ19hcHBlbmQnIGluIHZhcm5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dmFsdWUgPSAnICcgKyBuZXd2YWx1ZVswXQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd2YWx1ZSA9IG5ld3ZhbHVlWzBdCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXd2YWx1ZSBhbmQgKG9wIGluIFsnKz0nLCAnLj0nXSBvciAnX2FwcGVuZCcgaW4gdmFybmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZXJlJ3Mgbm8gcG9pbnQgYXBwZW5kaW5nIG5vdGhpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3ZhbHVlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBpZiB2YXJuYW1lLmVuZHN3aXRoKCcoKScpOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gNAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gLTEKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChuZXd2YWx1ZSwgTm9uZSwgaW5kZW50LCBUcnVlKQorICAgICAgICAgICAgcmV0dXJuIChvcmlndmFsdWUsIE5vbmUsIDQsIEZhbHNlKQorCisgICAgICAgIHZhcm5hbWVzID0gW2l0ZW1bMF0gZm9yIGl0ZW0gaW4gYmJhcHBlbmRsaW5lc10KKyAgICAgICAgaWYgcmVtb3ZldmFsdWVzOgorICAgICAgICAgICAgdmFybmFtZXMuZXh0ZW5kKHJlbW92ZXZhbHVlcy5rZXlzKCkpCisKKyAgICAgICAgd2l0aCBvcGVuKGFwcGVuZHBhdGgsICdyJykgYXMgZjoKKyAgICAgICAgICAgICh1cGRhdGVkLCBuZXdsaW5lcykgPSBiYi51dGlscy5lZGl0X21ldGFkYXRhKGYsIHZhcm5hbWVzLCBhcHBlbmRmaWxlX3ZhcmZ1bmMpCisKKyAgICAgICAgZGVzdHN1YmRpciA9IGV4dHZhcnNbJ2Rlc3RzdWJkaXInXQorICAgIGVsc2U6CisgICAgICAgIHVwZGF0ZWQgPSBGYWxzZQorICAgICAgICBuZXdsaW5lcyA9IFtdCisKKyAgICBpZiBiYmFwcGVuZGxpbmVzOgorICAgICAgICBmb3IgbGluZSBpbiBiYmFwcGVuZGxpbmVzOgorICAgICAgICAgICAgaWYgbGluZVswXS5lbmRzd2l0aCgnKCknKToKKyAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzIHtcbiAgICAlc1xufVxuJyAlIChsaW5lWzBdLCAnXG4gICAgJy5qb2luKGxpbmVbMl0pKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyAlcyAiJXMiXG5cbicgJSBsaW5lKQorICAgICAgICB1cGRhdGVkID0gVHJ1ZQorCisgICAgaWYgdXBkYXRlZDoKKyAgICAgICAgd2l0aCBvcGVuKGFwcGVuZHBhdGgsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGVsaW5lcyhuZXdsaW5lcykKKworICAgIGlmIGNvcHlmaWxlczoKKyAgICAgICAgaWYgbWFjaGluZToKKyAgICAgICAgICAgIGRlc3RzdWJkaXIgPSBvcy5wYXRoLmpvaW4oZGVzdHN1YmRpciwgbWFjaGluZSkKKyAgICAgICAgZm9yIG5ld2ZpbGUsIHNyY2ZpbGUgaW4gY29weWZpbGVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZmlsZWRlc3QgPSBvcy5wYXRoLmpvaW4oYXBwZW5kZGlyLCBkZXN0c3ViZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHNyY2ZpbGUpKQorICAgICAgICAgICAgaWYgb3MucGF0aC5hYnNwYXRoKG5ld2ZpbGUpICE9IG9zLnBhdGguYWJzcGF0aChmaWxlZGVzdCk6CisgICAgICAgICAgICAgICAgYmIubm90ZSgnQ29weWluZyAlcyB0byAlcycgJSAobmV3ZmlsZSwgZmlsZWRlc3QpKQorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZmlsZWRlc3QpKQorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShuZXdmaWxlLCBmaWxlZGVzdCkKKworICAgIHJldHVybiAoYXBwZW5kcGF0aCwgb3MucGF0aC5qb2luKGFwcGVuZGRpciwgZGVzdHN1YmRpcikpCisKKworZGVmIGZpbmRfbGF5ZXJkaXIoZm4pOgorICAgICIiIiBGaWd1cmUgb3V0IHJlbGF0aXZlIHBhdGggdG8gYmFzZSBvZiBsYXllciBmb3IgYSBmaWxlIChlLmcuIGEgcmVjaXBlKSIiIgorICAgIHB0aCA9IG9zLnBhdGguZGlybmFtZShmbikKKyAgICBsYXllcmRpciA9ICcnCisgICAgd2hpbGUgcHRoOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocHRoLCAnY29uZicsICdsYXllci5jb25mJykpOgorICAgICAgICAgICAgbGF5ZXJkaXIgPSBwdGgKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHB0aCA9IG9zLnBhdGguZGlybmFtZShwdGgpCisgICAgcmV0dXJuIGxheWVyZGlyCisKKworZGVmIHJlcGxhY2VfZGlyX3ZhcnMocGF0aCwgZCk6CisgICAgIiIiUmVwbGFjZSBjb21tb24gZGlyZWN0b3J5IHBhdGhzIHdpdGggYXBwcm9wcmlhdGUgdmFyaWFibGUgcmVmZXJlbmNlcyAoZS5nLiAvZXRjIGJlY29tZXMgJHtzeXNjb25mZGlyfSkiIiIKKyAgICBkaXJ2YXJzID0ge30KKyAgICAjIFNvcnQgYnkgbGVuZ3RoIHNvIHdlIGdldCB0aGUgdmFyaWFibGVzIHdlJ3JlIGludGVyZXN0ZWQgaW4gZmlyc3QKKyAgICBmb3IgdmFyIGluIHNvcnRlZChkLmtleXMoKSwga2V5PWxlbik6CisgICAgICAgIGlmIHZhci5lbmRzd2l0aCgnZGlyJykgYW5kIHZhci5sb3dlcigpID09IHZhcjoKKyAgICAgICAgICAgIHZhbHVlID0gZC5nZXRWYXIodmFyLCBUcnVlKQorICAgICAgICAgICAgaWYgdmFsdWUuc3RhcnRzd2l0aCgnLycpIGFuZCBub3QgJ1xuJyBpbiB2YWx1ZSBhbmQgdmFsdWUgbm90IGluIGRpcnZhcnM6CisgICAgICAgICAgICAgICAgZGlydmFyc1t2YWx1ZV0gPSB2YXIKKyAgICBmb3IgZGlycGF0aCBpbiBzb3J0ZWQoZGlydmFycy5rZXlzKCksIHJldmVyc2U9VHJ1ZSk6CisgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoZGlycGF0aCwgJyR7JXN9JyAlIGRpcnZhcnNbZGlycGF0aF0pCisgICAgcmV0dXJuIHBhdGgKKworZGVmIGdldF9yZWNpcGVfcHZfd2l0aG91dF9zcmNwdihwdiwgdXJpX3R5cGUpOgorICAgICIiIgorICAgIEdldCBQViB3aXRob3V0IFNSQ1BWIGNvbW1vbiBpbiBTQ00ncyBmb3Igbm93IG9ubHkKKyAgICBzdXBwb3J0IGdpdC4KKworICAgIFJldHVybnMgdHVwbGUgd2l0aCBwdiwgcHJlZml4IGFuZCBzdWZmaXguCisgICAgIiIiCisgICAgcGZ4ID0gJycKKyAgICBzZnggPSAnJworCisgICAgaWYgdXJpX3R5cGUgPT0gJ2dpdCc6CisgICAgICAgIGdpdF9yZWdleCA9IHJlLmNvbXBpbGUoIig/UDxwZng+dj8pKD9QPHZlcj5bXlwrXSopKCg/UDxzZng+XCsoZ2l0KT9yPyhBVVRPSU5DXCspKSg/UDxyZXY+LiopKT8iKQorICAgICAgICBtID0gZ2l0X3JlZ2V4Lm1hdGNoKHB2KQorCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBwdiA9IG0uZ3JvdXAoJ3ZlcicpCisgICAgICAgICAgICBwZnggPSBtLmdyb3VwKCdwZngnKQorICAgICAgICAgICAgc2Z4ID0gbS5ncm91cCgnc2Z4JykKKyAgICBlbHNlOgorICAgICAgICByZWdleCA9IHJlLmNvbXBpbGUoIig/UDxwZng+KHZ8cik/KSg/UDx2ZXI+LiopIikKKyAgICAgICAgbSA9IHJlZ2V4Lm1hdGNoKHB2KQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgcHYgPSBtLmdyb3VwKCd2ZXInKQorICAgICAgICAgICAgcGZ4ID0gbS5ncm91cCgncGZ4JykKKworICAgIHJldHVybiAocHYsIHBmeCwgc2Z4KQorCitkZWYgZ2V0X3JlY2lwZV91cHN0cmVhbV92ZXJzaW9uKHJkKToKKyAgICAiIiIKKyAgICAgICAgR2V0IHVwc3RyZWFtIHZlcnNpb24gb2YgcmVjaXBlIHVzaW5nIGJiLmZldGNoMiBtZXRob2RzIHdpdGggc3VwcG9ydCBmb3IKKyAgICAgICAgaHR0cCwgaHR0cHMsIGZ0cCBhbmQgZ2l0LgorCisgICAgICAgIGJiLmZldGNoMiBleGNlcHRpb25zIGNhbiBiZSByYWlzZWQsCisgICAgICAgICAgICBGZXRjaEVycm9yIHdoZW4gZG9uJ3QgaGF2ZSBuZXR3b3JrIGFjY2VzcyBvciB1cHN0cmVhbSBzaXRlIGRvbid0IHJlc3BvbnNlLgorICAgICAgICAgICAgTm9NZXRob2RFcnJvciB3aGVuIHVyaSBsYXRlc3RfdmVyc2lvbnN0cmluZyBtZXRob2QgaXNuJ3QgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgUmV0dXJucyBhIGRpY3RvbmFyeSB3aXRoIHZlcnNpb24sIHR5cGUgYW5kIGRhdGV0aW1lLgorICAgICAgICBUeXBlIGNhbiBiZSBBIGZvciBBdXRvbWF0aWMsIE0gZm9yIE1hbnVhbCBhbmQgVSBmb3IgVW5rbm93bi4KKyAgICAiIiIKKyAgICBmcm9tIGJiLmZldGNoMiBpbXBvcnQgZGVjb2RldXJsCisgICAgZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKKworICAgIHJ1ID0ge30KKyAgICBydVsndmVyc2lvbiddID0gJycKKyAgICBydVsndHlwZSddID0gJ1UnCisgICAgcnVbJ2RhdGV0aW1lJ10gPSAnJworCisgICAgIyBYWFg6IElmIGRvbid0IGhhdmUgU1JDX1VSSSBtZWFucyB0aGF0IGRvbid0IGhhdmUgdXBzdHJlYW0gc291cmNlcyBzbworICAgICMgcmV0dXJucyAxLjAuCisgICAgc3JjX3VyaXMgPSByZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKQorICAgIGlmIG5vdCBzcmNfdXJpczoKKyAgICAgICAgcnVbJ3ZlcnNpb24nXSA9ICcxLjAnCisgICAgICAgIHJ1Wyd0eXBlJ10gPSAnTScKKyAgICAgICAgcnVbJ2RhdGV0aW1lJ10gPSBkYXRldGltZS5ub3coKQorICAgICAgICByZXR1cm4gcnUKKworICAgICMgWFhYOiB3ZSBzdXBwb3NlIHRoYXQgdGhlIGZpcnN0IGVudHJ5IHBvaW50cyB0byB0aGUgdXBzdHJlYW0gc291cmNlcworICAgIHNyY191cmkgPSBzcmNfdXJpcy5zcGxpdCgpWzBdCisgICAgdXJpX3R5cGUsIF8sIF8sIF8sIF8sIF8gPSAgZGVjb2RldXJsKHNyY191cmkpCisKKyAgICBwdiA9IHJkLmdldFZhcignUFYnLCBUcnVlKQorCisgICAgbWFudWFsX3Vwc3RyZWFtX3ZlcnNpb24gPSByZC5nZXRWYXIoIlJFQ0lQRV9VUFNUUkVBTV9WRVJTSU9OIiwgVHJ1ZSkKKyAgICBpZiBtYW51YWxfdXBzdHJlYW1fdmVyc2lvbjoKKyAgICAgICAgIyBtYW51YWwgdHJhY2tpbmcgb2YgdXBzdHJlYW0gdmVyc2lvbi4KKyAgICAgICAgcnVbJ3ZlcnNpb24nXSA9IG1hbnVhbF91cHN0cmVhbV92ZXJzaW9uCisgICAgICAgIHJ1Wyd0eXBlJ10gPSAnTScKKworICAgICAgICBtYW51YWxfdXBzdHJlYW1fZGF0ZSA9IHJkLmdldFZhcigiQ0hFQ0tfREFURSIsIFRydWUpCisgICAgICAgIGlmIG1hbnVhbF91cHN0cmVhbV9kYXRlOgorICAgICAgICAgICAgZGF0ZSA9IGRhdGV0aW1lLnN0cnB0aW1lKG1hbnVhbF91cHN0cmVhbV9kYXRlLCAiJWIgJWQsICVZIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGUgPSBkYXRldGltZS5ub3coKQorICAgICAgICBydVsnZGF0ZXRpbWUnXSA9IGRhdGUKKworICAgIGVsaWYgdXJpX3R5cGUgPT0gImZpbGUiOgorICAgICAgICAjIGZpbGVzIGFyZSBhbHdheXMgdXAtdG8tZGF0ZQorICAgICAgICBydVsndmVyc2lvbiddID0gIHB2CisgICAgICAgIHJ1Wyd0eXBlJ10gPSAnQScKKyAgICAgICAgcnVbJ2RhdGV0aW1lJ10gPSBkYXRldGltZS5ub3coKQorICAgIGVsc2U6CisgICAgICAgIHVkID0gYmIuZmV0Y2gyLkZldGNoRGF0YShzcmNfdXJpLCByZCkKKyAgICAgICAgcHVwdmVyID0gdWQubWV0aG9kLmxhdGVzdF92ZXJzaW9uc3RyaW5nKHVkLCByZCkKKyAgICAgICAgKHVwdmVyc2lvbiwgcmV2aXNpb24pID0gcHVwdmVyCisKKyAgICAgICAgIyBmb3JtYXQgZ2l0IHZlcnNpb24gdmVyc2lvbitnaXRBVVRPSU5DK0hBU0gKKyAgICAgICAgaWYgdXJpX3R5cGUgPT0gJ2dpdCc6CisgICAgICAgICAgICAocHYsIHBmeCwgc2Z4KSA9IGdldF9yZWNpcGVfcHZfd2l0aG91dF9zcmNwdihwdiwgdXJpX3R5cGUpCisKKyAgICAgICAgICAgICMgaWYgY29udGFpbnMgcmV2aXNpb24gYnV0IG5vdCB1cHZlcnNpb24gdXNlIGN1cnJlbnQgcHYKKyAgICAgICAgICAgIGlmIHVwdmVyc2lvbiA9PSAnJyBhbmQgcmV2aXNpb246CisgICAgICAgICAgICAgICAgdXB2ZXJzaW9uID0gcHYKKworICAgICAgICAgICAgaWYgdXB2ZXJzaW9uOgorICAgICAgICAgICAgICAgIHRtcCA9IHVwdmVyc2lvbgorICAgICAgICAgICAgICAgIHVwdmVyc2lvbiA9ICcnCisKKyAgICAgICAgICAgICAgICBpZiBwZng6CisgICAgICAgICAgICAgICAgICAgIHVwdmVyc2lvbiA9IHBmeCArIHRtcAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHVwdmVyc2lvbiA9IHRtcAorCisgICAgICAgICAgICAgICAgaWYgc2Z4OgorICAgICAgICAgICAgICAgICAgICB1cHZlcnNpb24gPSB1cHZlcnNpb24gKyBzZnggKyByZXZpc2lvbls6MTBdCisKKyAgICAgICAgaWYgdXB2ZXJzaW9uOgorICAgICAgICAgICAgcnVbJ3ZlcnNpb24nXSA9IHVwdmVyc2lvbgorICAgICAgICAgICAgcnVbJ3R5cGUnXSA9ICdBJworCisgICAgICAgIHJ1WydkYXRldGltZSddID0gZGF0ZXRpbWUubm93KCkKKworICAgIHJldHVybiBydQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9yb290ZnMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Jvb3Rmcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjUzZmNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9yb290ZnMucHkKQEAgLTAsMCArMSw5ODQgQEAKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAorZnJvbSBvZS51dGlscyBpbXBvcnQgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzCitmcm9tIG9lLnBhY2thZ2VfbWFuYWdlciBpbXBvcnQgKgorZnJvbSBvZS5tYW5pZmVzdCBpbXBvcnQgKgoraW1wb3J0IG9lLnBhdGgKK2ltcG9ydCBmaWxlY21wCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgcmUKKworCitjbGFzcyBSb290ZnMob2JqZWN0KToKKyAgICAiIiIKKyAgICBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzLiBEbyBub3QgaW5zdGFudGlhdGUgdGhpcyBkaXJlY3RseS4KKyAgICAiIiIKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYucG0gPSBOb25lCisgICAgICAgIHNlbGYuaW1hZ2Vfcm9vdGZzID0gc2VsZi5kLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX2ltYWdlID0gc2VsZi5kLmdldFZhcignREVQTE9ZX0RJUl9JTUFHRScsIFRydWUpCisKKyAgICAgICAgc2VsZi5pbnN0YWxsX29yZGVyID0gTWFuaWZlc3QuSU5TVEFMTF9PUkRFUgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9jcmVhdGUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfZ2V0X2RlbGF5ZWRfcG9zdGluc3RzKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX3NhdmVfcG9zdGluc3RzKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX2xvZ19jaGVjayhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9sb2dfY2hlY2tfd2FybihzZWxmKToKKyAgICAgICAgciA9IHJlLmNvbXBpbGUoJ14od2FybnxXYXJufE5PVEU6IHdhcm58Tk9URTogV2FybnxXQVJOSU5HOiknKQorICAgICAgICBsb2dfcGF0aCA9IHNlbGYuZC5leHBhbmQoIiR7VH0vbG9nLmRvX3Jvb3RmcyIpCisgICAgICAgIHdpdGggb3Blbihsb2dfcGF0aCwgJ3InKSBhcyBsb2c6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBsb2c6CisgICAgICAgICAgICAgICAgaWYgJ2xvZ19jaGVjaycgaW4gbGluZSBvciAnTk9URTonIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBtID0gci5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCdbbG9nX2NoZWNrXSAlczogZm91bmQgYSB3YXJuaW5nIG1lc3NhZ2UgaW4gdGhlIGxvZ2ZpbGUgKGtleXdvcmQgXCclc1wnKTpcbltsb2dfY2hlY2tdICVzJworCQkJCSAgICAlIChzZWxmLmQuZ2V0VmFyKCdQTicsIFRydWUpLCBtLmdyb3VwKCksIGxpbmUpKQorCisgICAgZGVmIF9sb2dfY2hlY2tfZXJyb3Ioc2VsZik6CisgICAgICAgIHIgPSByZS5jb21waWxlKHNlbGYubG9nX2NoZWNrX3JlZ2V4KQorICAgICAgICBsb2dfcGF0aCA9IHNlbGYuZC5leHBhbmQoIiR7VH0vbG9nLmRvX3Jvb3RmcyIpCisgICAgICAgIHdpdGggb3Blbihsb2dfcGF0aCwgJ3InKSBhcyBsb2c6CisgICAgICAgICAgICBmb3VuZF9lcnJvciA9IDAKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiXG4iCisgICAgICAgICAgICBmb3IgbGluZSBpbiBsb2c6CisgICAgICAgICAgICAgICAgaWYgJ2xvZ19jaGVjaycgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIG0gPSByLnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Vycm9yID0gMQorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCdbbG9nX2NoZWNrXSAlczogZm91bmQgYW4gZXJyb3IgbWVzc2FnZSBpbiB0aGUgbG9nZmlsZSAoa2V5d29yZCBcJyVzXCcpOlxuW2xvZ19jaGVja10gJXMnCisJCQkJICAgICUgKHNlbGYuZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIG0uZ3JvdXAoKSwgbGluZSkpCisKKyAgICAgICAgICAgICAgICBpZiBmb3VuZF9lcnJvciA+PSAxIGFuZCBmb3VuZF9lcnJvciA8PSA1OgorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IGxpbmUgKyAnXG4nCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Vycm9yICs9IDEKKworICAgICAgICAgICAgICAgIGlmIGZvdW5kX2Vycm9yID09IDY6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKG1lc3NhZ2UpCisKKyAgICBkZWYgX2luc2VydF9mZWVkX3VyaXMoc2VsZik6CisgICAgICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCJJTUFHRV9GRUFUVVJFUyIsICJwYWNrYWdlLW1hbmFnZW1lbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUsIEZhbHNlLCBzZWxmLmQpOgorICAgICAgICAgICAgc2VsZi5wbS5pbnNlcnRfZmVlZHNfdXJpcygpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX2hhbmRsZV9pbnRlcmNlcHRfZmFpbHVyZShzZWxmLCBmYWlsZWRfc2NyaXB0KToKKyAgICAgICAgcGFzcworCisgICAgIiIiCisgICAgVGhlIF9jbGVhbnVwKCkgbWV0aG9kIHNob3VsZCBiZSB1c2VkIHRvIGNsZWFuLXVwIHN0dWZmIHRoYXQgd2UgZG9uJ3QgcmVhbGx5CisgICAgd2FudCB0byBlbmQgdXAgb24gdGFyZ2V0LiBGb3IgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgUlBNLCB0aGUgREIgbG9ja3MuCisgICAgVGhlIG1ldGhvZCBpcyBjYWxsZWQsIG9uY2UsIGF0IHRoZSBlbmQgb2YgY3JlYXRlKCkgbWV0aG9kLgorICAgICIiIgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfY2xlYW51cChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9zZXR1cF9kYmdfcm9vdGZzKHNlbGYsIGRpcnMpOgorICAgICAgICBnZW5fZGVidWdmcyA9IHNlbGYuZC5nZXRWYXIoJ0lNQUdFX0dFTl9ERUJVR0ZTJywgVHJ1ZSkgb3IgJzAnCisgICAgICAgIGlmIGdlbl9kZWJ1Z2ZzICE9ICcxJzoKKyAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYmIubm90ZSgiICBSZW5hbWluZyB0aGUgb3JpZ2luYWwgcm9vdGZzLi4uIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmltYWdlX3Jvb3RmcyArICctb3JpZycpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb3MucmVuYW1lKHNlbGYuaW1hZ2Vfcm9vdGZzLCBzZWxmLmltYWdlX3Jvb3RmcyArICctb3JpZycpCisKKyAgICAgICAgYmIubm90ZSgiICBDcmVhdGluZyBkZWJ1ZyByb290ZnMuLi4iKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5pbWFnZV9yb290ZnMpCisKKyAgICAgICAgYmIubm90ZSgiICBDb3B5aW5nIGJhY2sgcGFja2FnZSBkYXRhYmFzZS4uLiIpCisgICAgICAgIGZvciBkaXIgaW4gZGlyczoKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmltYWdlX3Jvb3RmcyArIG9zLnBhdGguZGlybmFtZShkaXIpKQorICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJyArIGRpciwgc2VsZi5pbWFnZV9yb290ZnMgKyBkaXIpCisKKyAgICAgICAgY3BhdGggPSBvZS5jYWNoZWRwYXRoLkNhY2hlZFBhdGgoKQorICAgICAgICAjIENvcHkgZmlsZXMgbG9jYXRlZCBpbiAvdXNyL2xpYi9kZWJ1ZyBvciAvdXNyL3NyYy9kZWJ1ZworICAgICAgICBmb3IgZGlyIGluIFsiL3Vzci9saWIvZGVidWciLCAiL3Vzci9zcmMvZGVidWciXToKKyAgICAgICAgICAgIHNyYyA9IHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJyArIGRpcgorICAgICAgICAgICAgaWYgY3BhdGguZXhpc3RzKHNyYyk6CisgICAgICAgICAgICAgICAgZHN0ID0gc2VsZi5pbWFnZV9yb290ZnMgKyBkaXIKKyAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGRzdCkpCisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNyYywgZHN0KQorCisgICAgICAgICMgQ29weSBmaWxlcyB3aXRoIHN1ZmZpeCAnLmRlYnVnJyBvciBsb2NhdGVkIGluICcuZGVidWcnIGRpci4KKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIGNwYXRoLndhbGsoc2VsZi5pbWFnZV9yb290ZnMgKyAnLW9yaWcnKToKKyAgICAgICAgICAgIHJlbGF0aXZlX2RpciA9IHJvb3RbbGVuKHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJyk6XQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgZi5lbmRzd2l0aCgnLmRlYnVnJykgb3IgJy8uZGVidWcnIGluIHJlbGF0aXZlX2RpcjoKKyAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuaW1hZ2Vfcm9vdGZzICsgcmVsYXRpdmVfZGlyKQorICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weShvcy5wYXRoLmpvaW4ocm9vdCwgZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2Vfcm9vdGZzICsgcmVsYXRpdmVfZGlyKQorCisgICAgICAgIGJiLm5vdGUoIiAgSW5zdGFsbCBjb21wbGVtZW50YXJ5ICcqLWRiZycgcGFja2FnZXMuLi4iKQorICAgICAgICBzZWxmLnBtLmluc3RhbGxfY29tcGxlbWVudGFyeSgnKi1kYmcnKQorCisgICAgICAgIGJiLm5vdGUoIiAgUmVuYW1lIGRlYnVnIHJvb3Rmcy4uLiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5pbWFnZV9yb290ZnMgKyAnLWRiZycpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb3MucmVuYW1lKHNlbGYuaW1hZ2Vfcm9vdGZzLCBzZWxmLmltYWdlX3Jvb3RmcyArICctZGJnJykKKworICAgICAgICBiYi5ub3RlKCIgIFJlc3RvcmVpbmcgb3JpZ2luYWwgcm9vdGZzLi4uIikKKyAgICAgICAgb3MucmVuYW1lKHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJywgc2VsZi5pbWFnZV9yb290ZnMpCisKKyAgICBkZWYgX2V4ZWNfc2hlbGxfY21kKHNlbGYsIGNtZCk6CisgICAgICAgIGZha2Vyb290Y21kID0gc2VsZi5kLmdldFZhcignRkFLRVJPT1QnLCBUcnVlKQorICAgICAgICBpZiBmYWtlcm9vdGNtZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGV4ZWNfY21kID0gW2Zha2Vyb290Y21kLCBjbWRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleGVjX2NtZCA9IGNtZAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGV4ZWNfY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgcmV0dXJuKCJDb21tYW5kICclcycgcmV0dXJuZWQgJWQ6XG4lcyIgJSAoZS5jbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgY3JlYXRlKHNlbGYpOgorICAgICAgICBiYi5ub3RlKCIjIyMjIyMgR2VuZXJhdGUgcm9vdGZzICMjIyMjIyMiKQorICAgICAgICBwcmVfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcigiUk9PVEZTX1BSRVBST0NFU1NfQ09NTUFORCIsIFRydWUpCisgICAgICAgIHBvc3RfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcigiUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQiLCBUcnVlKQorCisgICAgICAgIHBvc3RpbnN0X2ludGVyY2VwdHNfZGlyID0gc2VsZi5kLmdldFZhcigiUE9TVElOU1RfSU5URVJDRVBUU19ESVIiLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdGluc3RfaW50ZXJjZXB0c19kaXI6CisgICAgICAgICAgICBwb3N0aW5zdF9pbnRlcmNlcHRzX2RpciA9IHNlbGYuZC5leHBhbmQoIiR7Q09SRUJBU0V9L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cyIpCisgICAgICAgIGludGVyY2VwdHNfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyY2VwdF9zY3JpcHRzIikKKworICAgICAgICBiYi51dGlscy5yZW1vdmUoaW50ZXJjZXB0c19kaXIsIFRydWUpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuaW1hZ2Vfcm9vdGZzKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmRlcGxveV9kaXJfaW1hZ2UpCisKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHBvc3RpbnN0X2ludGVyY2VwdHNfZGlyLCBpbnRlcmNlcHRzX2RpcikKKworICAgICAgICBzaHV0aWwuY29weShzZWxmLmQuZXhwYW5kKCIke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL2RlcGxveWRpcl9yZWFkbWUudHh0IiksCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVwbG95X2Rpcl9pbWFnZSArCisgICAgICAgICAgICAgICAgICAgICIvUkVBRE1FXy1fRE9fTk9UX0RFTEVURV9GSUxFU19JTl9USElTX0RJUkVDVE9SWS50eHQiKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHByZV9wcm9jZXNzX2NtZHMpCisKKyAgICAgICAgIyBjYWxsIHRoZSBwYWNrYWdlIG1hbmFnZXIgZGVwZW5kZW50IGNyZWF0ZSBtZXRob2QKKyAgICAgICAgc2VsZi5fY3JlYXRlKCkKKworICAgICAgICBzeXNjb25mZGlyID0gc2VsZi5pbWFnZV9yb290ZnMgKyBzZWxmLmQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHN5c2NvbmZkaXIpCisgICAgICAgIHdpdGggb3BlbihzeXNjb25mZGlyICsgIi92ZXJzaW9uIiwgIncrIikgYXMgdmVyOgorICAgICAgICAgICAgdmVyLndyaXRlKHNlbGYuZC5nZXRWYXIoJ0JVSUxETkFNRScsIFRydWUpICsgIlxuIikKKworICAgICAgICBzZWxmLl9ydW5faW50ZXJjZXB0cygpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcG9zdF9wcm9jZXNzX2NtZHMpCisKKyAgICAgICAgaWYgYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgInJlYWQtb25seS1yb290ZnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUsIEZhbHNlLCBzZWxmLmQpOgorICAgICAgICAgICAgZGVsYXllZF9wb3N0aW5zdHMgPSBzZWxmLl9nZXRfZGVsYXllZF9wb3N0aW5zdHMoKQorICAgICAgICAgICAgaWYgZGVsYXllZF9wb3N0aW5zdHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlRoZSBmb2xsb3dpbmcgcGFja2FnZXMgY291bGQgbm90IGJlIGNvbmZpZ3VyZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJvZmZsaW5lIGFuZCByb290ZnMgaXMgcmVhZC1vbmx5OiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5ZWRfcG9zdGluc3RzKQorCisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1VTRV9ERVZGUycsIFRydWUpICE9ICIxIjoKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9kZXZmcygpCisKKyAgICAgICAgc2VsZi5fdW5pbnN0YWxsX3VubmVlZGVkKCkKKworICAgICAgICBzZWxmLl9pbnNlcnRfZmVlZF91cmlzKCkKKworICAgICAgICBzZWxmLl9ydW5fbGRjb25maWcoKQorCisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1VTRV9ERVBNT0QnLCBUcnVlKSAhPSAiMCI6CisgICAgICAgICAgICBzZWxmLl9nZW5lcmF0ZV9rZXJuZWxfbW9kdWxlX2RlcHMoKQorCisgICAgICAgIHNlbGYuX2NsZWFudXAoKQorICAgICAgICBzZWxmLl9sb2dfY2hlY2soKQorCisgICAgZGVmIF91bmluc3RhbGxfdW5uZWVkZWQoc2VsZik6CisgICAgICAgICMgUmVtb3ZlIHVubmVlZGVkIGluaXQgc2NyaXB0IHN5bWxpbmtzCisgICAgICAgIGRlbGF5ZWRfcG9zdGluc3RzID0gc2VsZi5fZ2V0X2RlbGF5ZWRfcG9zdGluc3RzKCkKKyAgICAgICAgaWYgZGVsYXllZF9wb3N0aW5zdHMgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuZC5leHBhbmQoIiR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vaW5pdC5kL3J1bi1wb3N0aW5zdHMiKSk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlY19zaGVsbF9jbWQoWyJ1cGRhdGUtcmMuZCIsICItZiIsICItciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1JPT1RGUycsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnVuLXBvc3RpbnN0cyIsICJyZW1vdmUiXSkKKworICAgICAgICBydW50aW1lX3BrZ21hbmFnZSA9IGJiLnV0aWxzLmNvbnRhaW5zKCJJTUFHRV9GRUFUVVJFUyIsICJwYWNrYWdlLW1hbmFnZW1lbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUsIEZhbHNlLCBzZWxmLmQpCisgICAgICAgIHN5c3Zjb21wYXRfaW5fZGlzdHJvID0gYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsIFsgInN5c3RlbWQiLCAic3lzdmluaXQiIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkKKyAgICAgICAgaW1hZ2Vfcm9yZnMgPSBiYi51dGlscy5jb250YWlucygiSU1BR0VfRkVBVFVSRVMiLCAicmVhZC1vbmx5LXJvb3RmcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkKKyAgICAgICAgaWYgc3lzdmNvbXBhdF9pbl9kaXN0cm8gYW5kIG5vdCBpbWFnZV9yb3JmczoKKyAgICAgICAgICAgIHBrZ190b19yZW1vdmUgPSAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtnX3RvX3JlbW92ZSA9ICJ1cGRhdGUtcmMuZCIKKyAgICAgICAgaWYgbm90IHJ1bnRpbWVfcGtnbWFuYWdlOgorICAgICAgICAgICAgIyBSZW1vdmUgY29tcG9uZW50cyB0aGF0IHdlIGRvbid0IG5lZWQgaWYgd2UncmUgbm90IGdvaW5nIHRvIGluc3RhbGwKKyAgICAgICAgICAgICMgYWRkaXRpb25hbCBwYWNrYWdlcyBhdCBydW50aW1lCisgICAgICAgICAgICBpZiBkZWxheWVkX3Bvc3RpbnN0cyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGluc3RhbGxlZF9wa2dzX2RpciA9IHNlbGYuZC5leHBhbmQoJyR7V09SS0RJUn0vaW5zdGFsbGVkX3BrZ3MudHh0JykKKyAgICAgICAgICAgICAgICBwa2dzX3RvX3JlbW92ZSA9IGxpc3QoKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihpbnN0YWxsZWRfcGtnc19kaXIsICJyKyIpIGFzIGluc3RhbGxlZF9wa2dzOgorICAgICAgICAgICAgICAgICAgICBwa2dzX2luc3RhbGxlZCA9IGluc3RhbGxlZF9wa2dzLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBrZ19pbnN0YWxsZWQgaW4gcGtnc19pbnN0YWxsZWRbOl06CisgICAgICAgICAgICAgICAgICAgICAgICBwa2cgPSBwa2dfaW5zdGFsbGVkLnNwbGl0KClbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBrZyBpbiBbInVwZGF0ZS1yYy5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhc2UtcGFzc3dkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNoYWRvdyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1cGRhdGUtYWx0ZXJuYXRpdmVzIiwgcGtnX3RvX3JlbW92ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcigiUk9PVEZTX0JPT1RTVFJBUF9JTlNUQUxMIiwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dzX3RvX3JlbW92ZS5hcHBlbmQocGtnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3NfaW5zdGFsbGVkLnJlbW92ZShwa2dfaW5zdGFsbGVkKQorCisgICAgICAgICAgICAgICAgaWYgbGVuKHBrZ3NfdG9fcmVtb3ZlKSA+IDA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucG0ucmVtb3ZlKHBrZ3NfdG9fcmVtb3ZlLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgIyBVcGRhdGUgaW5zdGFsbGVkX3BrZ3MudHh0CisgICAgICAgICAgICAgICAgICAgIG9wZW4oaW5zdGFsbGVkX3BrZ3NfZGlyLCAidysiKS53cml0ZSgnXG4nLmpvaW4ocGtnc19pbnN0YWxsZWQpKQorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NhdmVfcG9zdGluc3RzKCkKKworICAgICAgICBwb3N0X3VuaW5zdGFsbF9jbWRzID0gc2VsZi5kLmdldFZhcigiUk9PVEZTX1BPU1RVTklOU1RBTExfQ09NTUFORCIsIFRydWUpCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHBvc3RfdW5pbnN0YWxsX2NtZHMpCisKKyAgICAgICAgaWYgbm90IHJ1bnRpbWVfcGtnbWFuYWdlOgorICAgICAgICAgICAgIyBSZW1vdmUgdGhlIHBhY2thZ2UgbWFuYWdlciBkYXRhIGZpbGVzCisgICAgICAgICAgICBzZWxmLnBtLnJlbW92ZV9wYWNrYWdpbmdfZGF0YSgpCisKKyAgICBkZWYgX3J1bl9pbnRlcmNlcHRzKHNlbGYpOgorICAgICAgICBpbnRlcmNlcHRzX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmNlcHRfc2NyaXB0cyIpCisKKyAgICAgICAgYmIubm90ZSgiUnVubmluZyBpbnRlcmNlcHQgc2NyaXB0czoiKQorICAgICAgICBvcy5lbnZpcm9uWydEJ10gPSBzZWxmLmltYWdlX3Jvb3RmcworICAgICAgICBmb3Igc2NyaXB0IGluIG9zLmxpc3RkaXIoaW50ZXJjZXB0c19kaXIpOgorICAgICAgICAgICAgc2NyaXB0X2Z1bGwgPSBvcy5wYXRoLmpvaW4oaW50ZXJjZXB0c19kaXIsIHNjcmlwdCkKKworICAgICAgICAgICAgaWYgc2NyaXB0ID09ICJwb3N0aW5zdF9pbnRlcmNlcHQiIG9yIG5vdCBvcy5hY2Nlc3Moc2NyaXB0X2Z1bGwsIG9zLlhfT0spOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGJiLm5vdGUoIj4gRXhlY3V0aW5nICVzIGludGVyY2VwdCAuLi4iICUgc2NyaXB0KQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKHNjcmlwdF9mdWxsKQorICAgICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIud2FybigiVGhlIHBvc3RpbnN0YWxsIGludGVyY2VwdCBob29rICclcycgZmFpbGVkIChleGl0IGNvZGU6ICVkKSEgU2VlIGxvZyBmb3IgZGV0YWlscyEiICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChzY3JpcHQsIGUucmV0dXJuY29kZSkpCisKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc2NyaXB0X2Z1bGwpIGFzIGludGVyY2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJlZF9wa2dzID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBpbnRlcmNlcHQucmVhZCgpLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJeIyNQS0dTOiguKikiLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmVkX3BrZ3MgPSBtLmdyb3VwKDEpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgICAgIGlmIHJlZ2lzdGVyZWRfcGtncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlRoZSBwb3N0aW5zdGFsbHMgZm9yIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lsbCBiZSBwb3N0cG9uZWQgZm9yIGZpcnN0IGJvb3Q6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRfcGtncykKKworICAgICAgICAgICAgICAgICAgICAgICAgIyBjYWxsIHRoZSBiYWNrZW5kIGRlcGVuZGVudCBoYW5kbGVyCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfaW50ZXJjZXB0X2ZhaWx1cmUocmVnaXN0ZXJlZF9wa2dzKQorCisgICAgZGVmIF9ydW5fbGRjb25maWcoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ0xEQ09ORklHREVQRU5EJywgVHJ1ZSk6CisgICAgICAgICAgICBiYi5ub3RlKCJFeGVjdXRpbmc6IGxkY29uZmlnIC1yIiArIHNlbGYuaW1hZ2Vfcm9vdGZzICsgIi1jIG5ldyAtdiIpCisgICAgICAgICAgICBzZWxmLl9leGVjX3NoZWxsX2NtZChbJ2xkY29uZmlnJywgJy1yJywgc2VsZi5pbWFnZV9yb290ZnMsICctYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ldycsICctdiddKQorCisgICAgZGVmIF9jaGVja19mb3Jfa2VybmVsX21vZHVsZXMoc2VsZiwgbW9kdWxlc19kaXIpOgorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhtb2R1bGVzX2RpciwgdG9wZG93bj1UcnVlKToKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZvdW5kX2tvID0gbmFtZS5lbmRzd2l0aCgiLmtvIikKKyAgICAgICAgICAgICAgICBpZiBmb3VuZF9rbzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kX2tvCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9nZW5lcmF0ZV9rZXJuZWxfbW9kdWxlX2RlcHMoc2VsZik6CisgICAgICAgIG1vZHVsZXNfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuaW1hZ2Vfcm9vdGZzLCAnbGliJywgJ21vZHVsZXMnKQorICAgICAgICAjIGlmIHdlIGRvbid0IGhhdmUgYW55IG1vZHVsZXMgZG9uJ3QgYm90aGVyIHRvIGRvIHRoZSBkZXBtb2QKKyAgICAgICAgaWYgbm90IHNlbGYuX2NoZWNrX2Zvcl9rZXJuZWxfbW9kdWxlcyhtb2R1bGVzX2Rpcik6CisgICAgICAgICAgICBiYi5ub3RlKCJObyBLZXJuZWwgTW9kdWxlcyBmb3VuZCwgbm90IHJ1bm5pbmcgZGVwbW9kIikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGtlcm5lbF9hYmlfdmVyX2ZpbGUgPSBvZS5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKSwgImtlcm5lbC1kZXBtb2QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrZXJuZWwtYWJpdmVyc2lvbicpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhrZXJuZWxfYWJpX3Zlcl9maWxlKToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJObyBrZXJuZWwtYWJpdmVyc2lvbiBmaWxlIGZvdW5kICglcyksIGNhbm5vdCBydW4gZGVwbW9kLCBhYm9ydGluZyIgJSBrZXJuZWxfYWJpX3Zlcl9maWxlKQorCisgICAgICAgIGtlcm5lbF92ZXIgPSBvcGVuKGtlcm5lbF9hYmlfdmVyX2ZpbGUpLnJlYWQoKS5zdHJpcCgnIFxuJykKKyAgICAgICAgdmVyc2lvbmVkX21vZHVsZXNfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuaW1hZ2Vfcm9vdGZzLCBtb2R1bGVzX2Rpciwga2VybmVsX3ZlcikKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodmVyc2lvbmVkX21vZHVsZXNfZGlyKQorCisgICAgICAgIHNlbGYuX2V4ZWNfc2hlbGxfY21kKFsnZGVwbW9kd3JhcHBlcicsICctYScsICctYicsIHNlbGYuaW1hZ2Vfcm9vdGZzLCBrZXJuZWxfdmVyXSkKKworICAgICIiIgorICAgIENyZWF0ZSBkZXZmczoKKyAgICAqIElNQUdFX0RFVklDRV9UQUJMRSBpcyB0aGUgb2xkIG5hbWUgdG8gYW4gYWJzb2x1dGUgcGF0aCB0byBhIGRldmljZSB0YWJsZSBmaWxlCisgICAgKiBJTUFHRV9ERVZJQ0VfVEFCTEVTIGlzIGEgbmV3IG5hbWUgZm9yIGEgZmlsZSwgb3IgbGlzdCBvZiBmaWxlcywgc2VhY2hlZAorICAgICAgZm9yIGluIHRoZSBCQlBBVEgKKyAgICBJZiBuZWl0aGVyIGFyZSBzcGVjaWZpZWQgdGhlbiB0aGUgZGVmYXVsdCBuYW1lIG9mIGZpbGVzL2RldmljZV90YWJsZS1taW5pbWFsLnR4dAorICAgIGlzIHNlYXJjaGVkIGZvciBpbiB0aGUgQkJQQVRIIChzYW1lIGFzIHRoZSBvbGQgdmVyc2lvbi4pCisgICAgIiIiCisgICAgZGVmIF9jcmVhdGVfZGV2ZnMoc2VsZik6CisgICAgICAgIGRldnRhYmxlX2xpc3QgPSBbXQorICAgICAgICBkZXZ0YWJsZSA9IHNlbGYuZC5nZXRWYXIoJ0lNQUdFX0RFVklDRV9UQUJMRScsIFRydWUpCisgICAgICAgIGlmIGRldnRhYmxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGV2dGFibGVfbGlzdC5hcHBlbmQoZGV2dGFibGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZXZ0YWJsZXMgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ERVZJQ0VfVEFCTEVTJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGRldnRhYmxlcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGRldnRhYmxlcyA9ICdmaWxlcy9kZXZpY2VfdGFibGUtbWluaW1hbC50eHQnCisgICAgICAgICAgICBmb3IgZGV2dGFibGUgaW4gZGV2dGFibGVzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgZGV2dGFibGVfbGlzdC5hcHBlbmQoIiVzIiAlIGJiLnV0aWxzLndoaWNoKHNlbGYuZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpLCBkZXZ0YWJsZSkpCisKKyAgICAgICAgZm9yIGRldnRhYmxlIGluIGRldnRhYmxlX2xpc3Q6CisgICAgICAgICAgICBzZWxmLl9leGVjX3NoZWxsX2NtZChbIm1ha2VkZXZzIiwgIi1yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmltYWdlX3Jvb3RmcywgIi1EIiwgZGV2dGFibGVdKQorCisKK2NsYXNzIFJwbVJvb3RmcyhSb290ZnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBtYW5pZmVzdF9kaXIpOgorICAgICAgICBzdXBlcihScG1Sb290ZnMsIHNlbGYpLl9faW5pdF9fKGQpCisgICAgICAgIHNlbGYubG9nX2NoZWNrX3JlZ2V4ID0gJyh1bnBhY2tpbmcgb2YgYXJjaGl2ZSBmYWlsZWR8Q2Fubm90IGZpbmQgcGFja2FnZSdcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3xleGl0IDF8RVJST1I6IHxFcnJvcjogfEVycm9yIHxFUlJPUiAnXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd8RmFpbGVkIHxGYWlsZWQ6IHxGYWlsZWQkfEZhaWxlZFwoXGQrXCk6KScKKyAgICAgICAgc2VsZi5tYW5pZmVzdCA9IFJwbU1hbmlmZXN0KGQsIG1hbmlmZXN0X2RpcikKKworICAgICAgICBzZWxmLnBtID0gUnBtUE0oZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ1RBUkdFVF9WRU5ET1InLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuaW5jX3JwbV9pbWFnZV9nZW4gPSBzZWxmLmQuZ2V0VmFyKCdJTkNfUlBNX0lNQUdFX0dFTicsIFRydWUpCisgICAgICAgIGlmIHNlbGYuaW5jX3JwbV9pbWFnZV9nZW4gIT0gIjEiOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuaW1hZ2Vfcm9vdGZzLCBUcnVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5wbS5yZWNvdmVyeV9wYWNrYWdpbmdfZGF0YSgpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmQuZ2V0VmFyKCdNVUxUSUxJQl9URU1QX1JPT1RGUycsIFRydWUpLCBUcnVlKQorCisgICAgICAgIHNlbGYucG0uY3JlYXRlX2NvbmZpZ3MoKQorCisgICAgJycnCisgICAgV2hpbGUgcnBtIGluY3JlbWVudGFsIGltYWdlIGdlbmVyYXRpb24gaXMgZW5hYmxlZCwgaXQgd2lsbCByZW1vdmUgdGhlCisgICAgdW5uZWVkZWQgcGtncyBieSBjb21wYXJpbmcgdGhlIG5ldyBpbnN0YWxsIHNvbHV0aW9uIG1hbmlmZXN0IGFuZCB0aGUKKyAgICBvbGQgaW5zdGFsbGVkIG1hbmlmZXN0LgorICAgICcnJworICAgIGRlZiBfY3JlYXRlX2luY3JlbWVudGFsKHNlbGYsIHBrZ3NfaW5pdGlhbF9pbnN0YWxsKToKKyAgICAgICAgaWYgc2VsZi5pbmNfcnBtX2ltYWdlX2dlbiA9PSAiMSI6CisKKyAgICAgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IGxpc3QoKQorICAgICAgICAgICAgZm9yIHBrZ190eXBlIGluIHBrZ3NfaW5pdGlhbF9pbnN0YWxsOgorICAgICAgICAgICAgICAgIHBrZ3NfdG9faW5zdGFsbCArPSBwa2dzX2luaXRpYWxfaW5zdGFsbFtwa2dfdHlwZV0KKworICAgICAgICAgICAgaW5zdGFsbGVkX21hbmlmZXN0ID0gc2VsZi5wbS5sb2FkX29sZF9pbnN0YWxsX3NvbHV0aW9uKCkKKyAgICAgICAgICAgIHNvbHV0aW9uX21hbmlmZXN0ID0gc2VsZi5wbS5kdW1wX2luc3RhbGxfc29sdXRpb24ocGtnc190b19pbnN0YWxsKQorCisgICAgICAgICAgICBwa2dfdG9fcmVtb3ZlID0gbGlzdCgpCisgICAgICAgICAgICBmb3IgcGtnIGluIGluc3RhbGxlZF9tYW5pZmVzdDoKKyAgICAgICAgICAgICAgICBpZiBwa2cgbm90IGluIHNvbHV0aW9uX21hbmlmZXN0OgorICAgICAgICAgICAgICAgICAgICBwa2dfdG9fcmVtb3ZlLmFwcGVuZChwa2cpCisKKyAgICAgICAgICAgIHNlbGYucG0udXBkYXRlKCkKKworICAgICAgICAgICAgYmIubm90ZSgnaW5jcmVtZW50YWwgdXBkYXRlIC0tIHVwZ3JhZGUgcGFja2FnZXMgaW4gcGxhY2UgJykKKyAgICAgICAgICAgIHNlbGYucG0udXBncmFkZSgpCisgICAgICAgICAgICBpZiBwa2dfdG9fcmVtb3ZlICE9IFtdOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoJ2luY3JlbWVudGFsIHJlbW92ZWQ6ICVzJyAlICcgJy5qb2luKHBrZ190b19yZW1vdmUpKQorICAgICAgICAgICAgICAgIHNlbGYucG0ucmVtb3ZlKHBrZ190b19yZW1vdmUpCisKKyAgICBkZWYgX2NyZWF0ZShzZWxmKToKKyAgICAgICAgcGtnc190b19pbnN0YWxsID0gc2VsZi5tYW5pZmVzdC5wYXJzZV9pbml0aWFsX21hbmlmZXN0KCkKKyAgICAgICAgcnBtX3ByZV9wcm9jZXNzX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCdSUE1fUFJFUFJPQ0VTU19DT01NQU5EUycsIFRydWUpCisgICAgICAgIHJwbV9wb3N0X3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoJ1JQTV9QT1NUUFJPQ0VTU19DT01NQU5EUycsIFRydWUpCisKKyAgICAgICAgIyB1cGRhdGUgUE0gaW5kZXggZmlsZXMKKyAgICAgICAgc2VsZi5wbS53cml0ZV9pbmRleCgpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcnBtX3ByZV9wcm9jZXNzX2NtZHMpCisKKyAgICAgICAgc2VsZi5wbS5kdW1wX2FsbF9hdmFpbGFibGVfcGtncygpCisKKyAgICAgICAgaWYgc2VsZi5pbmNfcnBtX2ltYWdlX2dlbiA9PSAiMSI6CisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfaW5jcmVtZW50YWwocGtnc190b19pbnN0YWxsKQorCisgICAgICAgIHNlbGYucG0udXBkYXRlKCkKKworICAgICAgICBwa2dzID0gW10KKyAgICAgICAgcGtnc19hdHRlbXB0ID0gW10KKyAgICAgICAgZm9yIHBrZ190eXBlIGluIHBrZ3NfdG9faW5zdGFsbDoKKyAgICAgICAgICAgIGlmIHBrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX0FUVEVNUFRfT05MWToKKyAgICAgICAgICAgICAgICBwa2dzX2F0dGVtcHQgKz0gcGtnc190b19pbnN0YWxsW3BrZ190eXBlXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dzICs9IHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0KKworICAgICAgICBzZWxmLnBtLmluc3RhbGwocGtncykKKworICAgICAgICBzZWxmLnBtLmluc3RhbGwocGtnc19hdHRlbXB0LCBUcnVlKQorCisgICAgICAgIHNlbGYucG0uaW5zdGFsbF9jb21wbGVtZW50YXJ5KCkKKworICAgICAgICBzZWxmLl9zZXR1cF9kYmdfcm9vdGZzKFsnL2V0Yy9ycG0nLCAnL3Zhci9saWIvcnBtJywgJy92YXIvbGliL3NtYXJ0J10pCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcnBtX3Bvc3RfcHJvY2Vzc19jbWRzKQorCisgICAgICAgIHNlbGYuX2xvZ19jaGVjaygpCisKKyAgICAgICAgaWYgc2VsZi5pbmNfcnBtX2ltYWdlX2dlbiA9PSAiMSI6CisgICAgICAgICAgICBzZWxmLnBtLmJhY2t1cF9wYWNrYWdpbmdfZGF0YSgpCisKKyAgICAgICAgc2VsZi5wbS5ycG1fc2V0dXBfc21hcnRfdGFyZ2V0X2NvbmZpZygpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9kZXBlbmRzX2xpc3QoKToKKyAgICAgICAgcmV0dXJuIFsnREVQTE9ZX0RJUl9SUE0nLCAnSU5DX1JQTV9JTUFHRV9HRU4nLCAnUlBNX1BSRVBST0NFU1NfQ09NTUFORFMnLAorICAgICAgICAgICAgICAgICdSUE1fUE9TVFBST0NFU1NfQ09NTUFORFMnLCAnUlBNX1BSRUZFUl9FTEZfQVJDSCddCisKKyAgICBkZWYgX2dldF9kZWxheWVkX3Bvc3RpbnN0cyhzZWxmKToKKyAgICAgICAgcG9zdGluc3RfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9ycG0tcG9zdGluc3RzIikKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihwb3N0aW5zdF9kaXIpOgorICAgICAgICAgICAgZmlsZXMgPSBvcy5saXN0ZGlyKHBvc3RpbnN0X2RpcikKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoJ0RlbGF5ZWQgcGFja2FnZSBzY3JpcHRsZXQ6ICVzJyAlIGYpCisgICAgICAgICAgICByZXR1cm4gZmlsZXMKKworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9zYXZlX3Bvc3RpbnN0cyhzZWxmKToKKyAgICAgICAgIyB0aGlzIGlzIGp1c3QgYSBzdHViLiBGb3IgUlBNLCB0aGUgZmFpbGVkIHBvc3RpbnN0YWxscyBhcmUKKyAgICAgICAgIyBhbHJlYWR5IHNhdmVkIGluIC9ldGMvcnBtLXBvc3RpbnN0cworICAgICAgICBwYXNzCisKKyAgICBkZWYgX2xvZ19jaGVja19lcnJvcihzZWxmKToKKyAgICAgICAgciA9IHJlLmNvbXBpbGUoJyh1bnBhY2tpbmcgb2YgYXJjaGl2ZSBmYWlsZWR8Q2Fubm90IGZpbmQgcGFja2FnZXxleGl0IDF8RVJSfEZhaWwpJykKKyAgICAgICAgbG9nX3BhdGggPSBzZWxmLmQuZXhwYW5kKCIke1R9L2xvZy5kb19yb290ZnMiKQorICAgICAgICB3aXRoIG9wZW4obG9nX3BhdGgsICdyJykgYXMgbG9nOgorICAgICAgICAgICAgZm91bmRfZXJyb3IgPSAwCisgICAgICAgICAgICBtZXNzYWdlID0gIlxuIgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbG9nLnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBpZiAnbG9nX2NoZWNrJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICMgc2ggLXggbWF5IGVtaXQgY29kZSB3aGljaCBpc24ndCBhY3R1YWxseSBleGVjdXRlZAorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnKycpOgorCQkgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIG0gPSByLnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Vycm9yID0gMQorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCdsb2dfY2hlY2s6IFRoZXJlIHdlcmUgZXJyb3IgbWVzc2FnZXMgaW4gdGhlIGxvZ2ZpbGUnKQorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCdsb2dfY2hlY2s6IE1hdGNoZWQga2V5d29yZDogWyVzXVxuXG4nICUgbS5ncm91cCgpKQorCisgICAgICAgICAgICAgICAgaWYgZm91bmRfZXJyb3IgPj0gMSBhbmQgZm91bmRfZXJyb3IgPD0gNToKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBsaW5lICsgJ1xuJworICAgICAgICAgICAgICAgICAgICBmb3VuZF9lcnJvciArPSAxCisKKyAgICAgICAgICAgICAgICBpZiBmb3VuZF9lcnJvciA9PSA2OgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbChtZXNzYWdlKQorCisgICAgZGVmIF9sb2dfY2hlY2soc2VsZik6CisgICAgICAgIHNlbGYuX2xvZ19jaGVja193YXJuKCkKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX2Vycm9yKCkKKworICAgIGRlZiBfaGFuZGxlX2ludGVyY2VwdF9mYWlsdXJlKHNlbGYsIHJlZ2lzdGVyZWRfcGtncyk6CisgICAgICAgIHJwbV9wb3N0aW5zdHNfZGlyID0gc2VsZi5pbWFnZV9yb290ZnMgKyBzZWxmLmQuZXhwYW5kKCcke3N5c2NvbmZkaXJ9L3JwbS1wb3N0aW5zdHMvJykKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHJwbV9wb3N0aW5zdHNfZGlyKQorCisgICAgICAgICMgU2F2ZSB0aGUgcGFja2FnZSBwb3N0aW5zdGFsbHMgaW4gL2V0Yy9ycG0tcG9zdGluc3RzCisgICAgICAgIGZvciBwa2cgaW4gcmVnaXN0ZXJlZF9wa2dzLnNwbGl0KCk6CisgICAgICAgICAgICBzZWxmLnBtLnNhdmVfcnBtcG9zdGluc3QocGtnKQorCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICAjIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHBvc3Rwcm9jZXNzIGNvbW1hbmRzLCBycG0gaXMgY2FsbGVkIHNldmVyYWwKKyAgICAgICAgIyB0aW1lcyB0byBnZXQgdGhlIGZpbGVzIGluc3RhbGxlZCwgZGVwZW5kZW5jaWVzLCBldGMuIFRoaXMgY3JlYXRlcyB0aGUKKyAgICAgICAgIyBfX2RiLjAwKiAoQmVya2VsZXkgREIgZmlsZXMgdGhhdCBob2xkIGxvY2tzLCBycG0gc3BlY2lmaWMgZW52aXJvbm1lbnQKKyAgICAgICAgIyBzZXR0aW5ncywgZXRjLiksIHRoYXQgc2hvdWxkIG5vdCBnZXQgaW50byB0aGUgZmluYWwgcm9vdGZzCisgICAgICAgIHNlbGYucG0udW5sb2NrX3JwbV9kYigpCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc2VsZi5wbS5pbnN0YWxsX2Rpcl9wYXRoICsgIi90bXAiKSBhbmQgbm90IG9zLmxpc3RkaXIoc2VsZi5wbS5pbnN0YWxsX2Rpcl9wYXRoICsgIi90bXAiKToKKyAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYucG0uaW5zdGFsbF9kaXJfcGF0aCArICIvdG1wIiwgVHJ1ZSkKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihzZWxmLnBtLmluc3RhbGxfZGlyX3BhdGgpIGFuZCBub3Qgb3MubGlzdGRpcihzZWxmLnBtLmluc3RhbGxfZGlyX3BhdGgpOgorICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5wbS5pbnN0YWxsX2Rpcl9wYXRoLCBUcnVlKQorCitjbGFzcyBEcGtnT3BrZ1Jvb3RmcyhSb290ZnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc3VwZXIoRHBrZ09wa2dSb290ZnMsIHNlbGYpLl9faW5pdF9fKGQpCisKKyAgICBkZWYgX2dldF9wa2dzX3Bvc3RpbnN0cyhzZWxmLCBzdGF0dXNfZmlsZSk6CisgICAgICAgIGRlZiBfZ2V0X3BrZ19kZXBlbmRzX2xpc3QocGtnX2RlcGVuZHMpOgorICAgICAgICAgICAgcGtnX2RlcGVuZHNfbGlzdCA9IFtdCisgICAgICAgICAgICAjIGZpbHRlciB2ZXJzaW9uIHJlcXVpcmVtZW50cyBsaWtlIGxpYmMgKD49IDEuMSkKKyAgICAgICAgICAgIGZvciBkZXAgaW4gcGtnX2RlcGVuZHMuc3BsaXQoJywgJyk6CisgICAgICAgICAgICAgICAgbV9kZXAgPSByZS5tYXRjaCgiXiguKikgXCguKlwpJCIsIGRlcCkKKyAgICAgICAgICAgICAgICBpZiBtX2RlcDoKKyAgICAgICAgICAgICAgICAgICAgZGVwID0gbV9kZXAuZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBwa2dfZGVwZW5kc19saXN0LmFwcGVuZChkZXApCisKKyAgICAgICAgICAgIHJldHVybiBwa2dfZGVwZW5kc19saXN0CisKKyAgICAgICAgcGtncyA9IHt9CisgICAgICAgIHBrZ19uYW1lID0gIiIKKyAgICAgICAgcGtnX3N0YXR1c19tYXRjaCA9IEZhbHNlCisgICAgICAgIHBrZ19kZXBlbmRzID0gIiIKKworICAgICAgICB3aXRoIG9wZW4oc3RhdHVzX2ZpbGUpIGFzIHN0YXR1czoKKyAgICAgICAgICAgIGRhdGEgPSBzdGF0dXMucmVhZCgpCisgICAgICAgICAgICBzdGF0dXMuY2xvc2UoKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZGF0YS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBtX3BrZyA9IHJlLm1hdGNoKCJeUGFja2FnZTogKC4qKSIsIGxpbmUpCisgICAgICAgICAgICAgICAgbV9zdGF0dXMgPSByZS5tYXRjaCgiXlN0YXR1czouKnVucGFja2VkIiwgbGluZSkKKyAgICAgICAgICAgICAgICBtX2RlcGVuZHMgPSByZS5tYXRjaCgiXkRlcGVuZHM6ICguKikiLCBsaW5lKQorCisgICAgICAgICAgICAgICAgaWYgbV9wa2cgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIHBrZ19uYW1lIGFuZCBwa2dfc3RhdHVzX21hdGNoOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnc1twa2dfbmFtZV0gPSBfZ2V0X3BrZ19kZXBlbmRzX2xpc3QocGtnX2RlcGVuZHMpCisKKyAgICAgICAgICAgICAgICAgICAgcGtnX25hbWUgPSBtX3BrZy5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICBwa2dfc3RhdHVzX21hdGNoID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgcGtnX2RlcGVuZHMgPSAiIgorICAgICAgICAgICAgICAgIGVsaWYgbV9zdGF0dXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHBrZ19zdGF0dXNfbWF0Y2ggPSBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiBtX2RlcGVuZHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHBrZ19kZXBlbmRzID0gbV9kZXBlbmRzLmdyb3VwKDEpCisKKyAgICAgICAgIyByZW1vdmUgcGFja2FnZSBkZXBlbmRlbmNpZXMgbm90IGluIHBvc3RpbnN0cworICAgICAgICBwa2dfbmFtZXMgPSBwa2dzLmtleXMoKQorICAgICAgICBmb3IgcGtnX25hbWUgaW4gcGtnX25hbWVzOgorICAgICAgICAgICAgZGVwcyA9IHBrZ3NbcGtnX25hbWVdWzpdCisKKyAgICAgICAgICAgIGZvciBkIGluIGRlcHM6CisgICAgICAgICAgICAgICAgaWYgZCBub3QgaW4gcGtnX25hbWVzOgorICAgICAgICAgICAgICAgICAgICBwa2dzW3BrZ19uYW1lXS5yZW1vdmUoZCkKKworICAgICAgICByZXR1cm4gcGtncworCisgICAgZGVmIF9nZXRfZGVsYXllZF9wb3N0aW5zdHNfY29tbW9uKHNlbGYsIHN0YXR1c19maWxlKToKKyAgICAgICAgZGVmIF9kZXBfcmVzb2x2ZShncmFwaCwgbm9kZSwgcmVzb2x2ZWQsIHNlZW4pOgorICAgICAgICAgICAgc2Vlbi5hcHBlbmQobm9kZSkKKworICAgICAgICAgICAgZm9yIGVkZ2UgaW4gZ3JhcGhbbm9kZV06CisgICAgICAgICAgICAgICAgaWYgZWRnZSBub3QgaW4gcmVzb2x2ZWQ6CisgICAgICAgICAgICAgICAgICAgIGlmIGVkZ2UgaW4gc2VlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiUGFja2FnZXMgJXMgYW5kICVzIGhhdmUgIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhIGNpcmN1bGFyIGRlcGVuZGVuY3kgaW4gcG9zdGluc3RzIHNjcmlwdHMuIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKG5vZGUsIGVkZ2UpKQorICAgICAgICAgICAgICAgICAgICBfZGVwX3Jlc29sdmUoZ3JhcGgsIGVkZ2UsIHJlc29sdmVkLCBzZWVuKQorCisgICAgICAgICAgICByZXNvbHZlZC5hcHBlbmQobm9kZSkKKworICAgICAgICBwa2dfbGlzdCA9IFtdCisKKyAgICAgICAgcGtncyA9IHNlbGYuX2dldF9wa2dzX3Bvc3RpbnN0cyhzdGF0dXNfZmlsZSkKKyAgICAgICAgaWYgcGtnczoKKyAgICAgICAgICAgIHJvb3QgPSAiX19wYWNrYWdlZ3JvdXBfcG9zdGluc3RfXyIKKyAgICAgICAgICAgIHBrZ3Nbcm9vdF0gPSBwa2dzLmtleXMoKQorICAgICAgICAgICAgX2RlcF9yZXNvbHZlKHBrZ3MsIHJvb3QsIHBrZ19saXN0LCBbXSkKKyAgICAgICAgICAgIHBrZ19saXN0LnJlbW92ZShyb290KQorCisgICAgICAgIGlmIGxlbihwa2dfbGlzdCkgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcmV0dXJuIHBrZ19saXN0CisKKyAgICBkZWYgX3NhdmVfcG9zdGluc3RzX2NvbW1vbihzZWxmLCBkc3RfcG9zdGluc3RfZGlyLCBzcmNfcG9zdGluc3RfZGlyKToKKyAgICAgICAgbnVtID0gMAorICAgICAgICBmb3IgcCBpbiBzZWxmLl9nZXRfZGVsYXllZF9wb3N0aW5zdHMoKToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkc3RfcG9zdGluc3RfZGlyKQorCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc3JjX3Bvc3RpbnN0X2RpciwgcCArICIucG9zdGluc3QiKSk6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkob3MucGF0aC5qb2luKHNyY19wb3N0aW5zdF9kaXIsIHAgKyAiLnBvc3RpbnN0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGRzdF9wb3N0aW5zdF9kaXIsICIlMDNkLSVzIiAlIChudW0sIHApKSkKKworICAgICAgICAgICAgbnVtICs9IDEKKworY2xhc3MgRHBrZ1Jvb3RmcyhEcGtnT3BrZ1Jvb3Rmcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcik6CisgICAgICAgIHN1cGVyKERwa2dSb290ZnMsIHNlbGYpLl9faW5pdF9fKGQpCisgICAgICAgIHNlbGYubG9nX2NoZWNrX3JlZ2V4ID0gJ15FOicKKworICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5pbWFnZV9yb290ZnMsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmQuZ2V0VmFyKCdNVUxUSUxJQl9URU1QX1JPT1RGUycsIFRydWUpLCBUcnVlKQorICAgICAgICBzZWxmLm1hbmlmZXN0ID0gRHBrZ01hbmlmZXN0KGQsIG1hbmlmZXN0X2RpcikKKyAgICAgICAgc2VsZi5wbSA9IERwa2dQTShkLCBkLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSFMnLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignRFBLR19BUkNIJywgVHJ1ZSkpCisKKworICAgIGRlZiBfY3JlYXRlKHNlbGYpOgorICAgICAgICBwa2dzX3RvX2luc3RhbGwgPSBzZWxmLm1hbmlmZXN0LnBhcnNlX2luaXRpYWxfbWFuaWZlc3QoKQorICAgICAgICBkZWJfcHJlX3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoJ0RFQl9QUkVQUk9DRVNTX0NPTU1BTkRTJywgVHJ1ZSkKKyAgICAgICAgZGViX3Bvc3RfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcignREVCX1BPU1RQUk9DRVNTX0NPTU1BTkRTJywgVHJ1ZSkKKworICAgICAgICBhbHRfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtJTUFHRV9ST09URlN9L3Zhci9saWIvZHBrZy9hbHRlcm5hdGl2ZXMiKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoYWx0X2RpcikKKworICAgICAgICAjIHVwZGF0ZSBQTSBpbmRleCBmaWxlcworICAgICAgICBzZWxmLnBtLndyaXRlX2luZGV4KCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBkZWJfcHJlX3Byb2Nlc3NfY21kcykKKworICAgICAgICBzZWxmLnBtLnVwZGF0ZSgpCisKKyAgICAgICAgZm9yIHBrZ190eXBlIGluIHNlbGYuaW5zdGFsbF9vcmRlcjoKKyAgICAgICAgICAgIGlmIHBrZ190eXBlIGluIHBrZ3NfdG9faW5zdGFsbDoKKyAgICAgICAgICAgICAgICBzZWxmLnBtLmluc3RhbGwocGtnc190b19pbnN0YWxsW3BrZ190eXBlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0ZhbHNlLCBUcnVlXVtwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9BVFRFTVBUX09OTFldKQorCisgICAgICAgIHNlbGYucG0uaW5zdGFsbF9jb21wbGVtZW50YXJ5KCkKKworICAgICAgICBzZWxmLl9zZXR1cF9kYmdfcm9vdGZzKFsnL3Zhci9saWIvZHBrZyddKQorCisgICAgICAgIHNlbGYucG0uZml4X2Jyb2tlbl9kZXBlbmRlbmNpZXMoKQorCisgICAgICAgIHNlbGYucG0ubWFya19wYWNrYWdlcygiaW5zdGFsbGVkIikKKworICAgICAgICBzZWxmLnBtLnJ1bl9wcmVfcG9zdF9pbnN0YWxscygpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgZGViX3Bvc3RfcHJvY2Vzc19jbWRzKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZGVwZW5kc19saXN0KCk6CisgICAgICAgIHJldHVybiBbJ0RFUExPWV9ESVJfREVCJywgJ0RFQl9TREtfQVJDSCcsICdBUFRDT05GX1RBUkdFVCcsICdBUFRfQVJHUycsICdEUEtHX0FSQ0gnLCAnREVCX1BSRVBST0NFU1NfQ09NTUFORFMnLCAnREVCX1BPU1RQUk9DRVNTX0NPTU1BTkRTJ10KKworICAgIGRlZiBfZ2V0X2RlbGF5ZWRfcG9zdGluc3RzKHNlbGYpOgorICAgICAgICBzdGF0dXNfZmlsZSA9IHNlbGYuaW1hZ2Vfcm9vdGZzICsgIi92YXIvbGliL2Rwa2cvc3RhdHVzIgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2RlbGF5ZWRfcG9zdGluc3RzX2NvbW1vbihzdGF0dXNfZmlsZSkKKworICAgIGRlZiBfc2F2ZV9wb3N0aW5zdHMoc2VsZik6CisgICAgICAgIGRzdF9wb3N0aW5zdF9kaXIgPSBzZWxmLmQuZXhwYW5kKCIke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2RlYi1wb3N0aW5zdHMiKQorICAgICAgICBzcmNfcG9zdGluc3RfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtJTUFHRV9ST09URlN9L3Zhci9saWIvZHBrZy9pbmZvIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NhdmVfcG9zdGluc3RzX2NvbW1vbihkc3RfcG9zdGluc3RfZGlyLCBzcmNfcG9zdGluc3RfZGlyKQorCisgICAgZGVmIF9oYW5kbGVfaW50ZXJjZXB0X2ZhaWx1cmUoc2VsZiwgcmVnaXN0ZXJlZF9wa2dzKToKKyAgICAgICAgc2VsZi5wbS5tYXJrX3BhY2thZ2VzKCJ1bnBhY2tlZCIsIHJlZ2lzdGVyZWRfcGtncy5zcGxpdCgpKQorCisgICAgZGVmIF9sb2dfY2hlY2soc2VsZik6CisgICAgICAgIHNlbGYuX2xvZ19jaGVja193YXJuKCkKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX2Vycm9yKCkKKworICAgIGRlZiBfY2xlYW51cChzZWxmKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIE9wa2dSb290ZnMoRHBrZ09wa2dSb290ZnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBtYW5pZmVzdF9kaXIpOgorICAgICAgICBzdXBlcihPcGtnUm9vdGZzLCBzZWxmKS5fX2luaXRfXyhkKQorICAgICAgICBzZWxmLmxvZ19jaGVja19yZWdleCA9ICcoZXhpdCAxfENvbGxlY3RlZCBlcnJvcnMpJworCisgICAgICAgIHNlbGYubWFuaWZlc3QgPSBPcGtnTWFuaWZlc3QoZCwgbWFuaWZlc3RfZGlyKQorICAgICAgICBzZWxmLm9wa2dfY29uZiA9IHNlbGYuZC5nZXRWYXIoIklQS0dDT05GX1RBUkdFVCIsIFRydWUpCisgICAgICAgIHNlbGYucGtnX2FyY2hzID0gc2VsZi5kLmdldFZhcigiQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFMiLCBUcnVlKQorCisgICAgICAgIHNlbGYuaW5jX29wa2dfaW1hZ2VfZ2VuID0gc2VsZi5kLmdldFZhcignSU5DX0lQS19JTUFHRV9HRU4nLCBUcnVlKSBvciAiIgorICAgICAgICBpZiBzZWxmLl9yZW1vdmVfb2xkX3Jvb3RmcygpOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuaW1hZ2Vfcm9vdGZzLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5wbSA9IE9wa2dQTShkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmltYWdlX3Jvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGtnX2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGtnX2FyY2hzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5wbSA9IE9wa2dQTShkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmltYWdlX3Jvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGtnX2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGtnX2FyY2hzKQorICAgICAgICAgICAgc2VsZi5wbS5yZWNvdmVyX3BhY2thZ2luZ19kYXRhKCkKKworICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5kLmdldFZhcignTVVMVElMSUJfVEVNUF9ST09URlMnLCBUcnVlKSwgVHJ1ZSkKKworICAgIGRlZiBfcHJlbGlua19maWxlKHNlbGYsIHJvb3RfZGlyLCBmaWxlbmFtZSk6CisgICAgICAgIGJiLm5vdGUoJ3ByZWxpbmsgJXMgaW4gJXMnICUgKGZpbGVuYW1lLCByb290X2RpcikpCisgICAgICAgIHByZWxpbmtfY2ZnID0gb2UucGF0aC5qb2luKHJvb3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZXhwYW5kKCcke3N5c2NvbmZkaXJ9L3ByZWxpbmsuY29uZicpKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocHJlbGlua19jZmcpOgorICAgICAgICAgICAgc2h1dGlsLmNvcHkoc2VsZi5kLmV4cGFuZCgnJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzeXNjb25mZGlyX25hdGl2ZX0vcHJlbGluay5jb25mJyksCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVsaW5rX2NmZykKKworICAgICAgICBjbWRfcHJlbGluayA9IHNlbGYuZC5leHBhbmQoJyR7U1RBR0lOR19ESVJfTkFUSVZFfSR7c2JpbmRpcl9uYXRpdmV9L3ByZWxpbmsnKQorICAgICAgICBzZWxmLl9leGVjX3NoZWxsX2NtZChbY21kX3ByZWxpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1yb290JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hbVInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1OJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZXhwYW5kKCcke3N5c2NvbmZkaXJ9L3ByZWxpbmsuY29uZicpXSkKKworICAgICcnJworICAgIENvbXBhcmUgdHdvIGZpbGVzIHdpdGggdGhlIHNhbWUga2V5IHR3aWNlIHRvIHNlZSBpZiB0aGV5IGFyZSBlcXVhbC4KKyAgICBJZiB0aGV5IGFyZSBub3QgZXF1YWwsIGl0IG1lYW5zIHRoZXkgYXJlIGR1cGxpY2F0ZWQgYW5kIGNvbWUgZnJvbQorICAgIGRpZmZlcmVudCBwYWNrYWdlcy4KKyAgICAxc3Q6IENvbWFwcmUgdGhlbSBkaXJlY3RseTsKKyAgICAybmQ6IFdoaWxlIGluY3JlbWVudGFsIGltYWdlIGNyZWF0aW9uIGlzIGVuYWJsZWQsIG9uZSBvZiB0aGUKKyAgICAgICAgIGZpbGVzIGNvdWxkIGJlIHByb2JhbHkgcHJlbGlua2VkIGluIHRoZSBwcmV2aW91cyBpbWFnZQorICAgICAgICAgY3JlYXRpb24gYW5kIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQsIHNvIHdlIG5lZWQgdG8KKyAgICAgICAgIHByZWxpbmsgdGhlIG90aGVyIG9uZSBhbmQgY29tcGFyZSB0aGVtLgorICAgICcnJworICAgIGRlZiBfZmlsZV9lcXVhbChzZWxmLCBrZXksIGYxLCBmMik6CisKKyAgICAgICAgIyBCb3RoIG9mIHRoZW0gYXJlIG5vdCBwcmVsaW5rZWQKKyAgICAgICAgaWYgZmlsZWNtcC5jbXAoZjEsIGYyKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgaWYgc2VsZi5pbWFnZV9yb290ZnMgbm90IGluIGYxOgorICAgICAgICAgICAgc2VsZi5fcHJlbGlua19maWxlKGYxLnJlcGxhY2Uoa2V5LCAnJyksIGYxKQorCisgICAgICAgIGlmIHNlbGYuaW1hZ2Vfcm9vdGZzIG5vdCBpbiBmMjoKKyAgICAgICAgICAgIHNlbGYuX3ByZWxpbmtfZmlsZShmMi5yZXBsYWNlKGtleSwgJycpLCBmMikKKworICAgICAgICAjIEJvdGggb2YgdGhlbSBhcmUgcHJlbGlua2VkCisgICAgICAgIGlmIGZpbGVjbXAuY21wKGYxLCBmMik6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgTm90IGVxdWFsCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiB3YXMgcmV1c2VkIGZyb20gdGhlIG9sZCBpbXBsZW1lbnRhdGlvbi4KKyAgICBTZWUgY29tbWl0OiAiaW1hZ2UuYmJjbGFzczogQWRkZWQgdmFyaWFibGVzIGZvciBtdWx0aWxpYiBzdXBwb3J0LiIgYnkKKyAgICBMaWFuaGFvIEx1LgorICAgICIiIgorICAgIGRlZiBfbXVsdGlsaWJfc2FuaXR5X3Rlc3Qoc2VsZiwgZGlycyk6CisKKyAgICAgICAgYWxsb3dfcmVwbGFjZSA9IHNlbGYuZC5nZXRWYXIoIk1VTFRJTElCUkVfQUxMT1dfUkVQIiwgVHJ1ZSkKKyAgICAgICAgaWYgYWxsb3dfcmVwbGFjZSBpcyBOb25lOgorICAgICAgICAgICAgYWxsb3dfcmVwbGFjZSA9ICIiCisKKyAgICAgICAgYWxsb3dfcmVwID0gcmUuY29tcGlsZShyZS5zdWIoIlx8JCIsICIiLCBhbGxvd19yZXBsYWNlKSkKKyAgICAgICAgZXJyb3JfcHJvbXB0ID0gIk11bHRpbGliIGNoZWNrIGVycm9yOiIKKworICAgICAgICBmaWxlcyA9IHt9CisgICAgICAgIGZvciBkaXIgaW4gZGlyczoKKyAgICAgICAgICAgIGZvciByb290LCBzdWJmb2xkZXJzLCBzdWJmaWxlcyBpbiBvcy53YWxrKGRpcik6CisgICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gc3ViZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZSkKKyAgICAgICAgICAgICAgICAgICAga2V5ID0gc3RyKG9zLnBhdGguam9pbigiLyIsIG9zLnBhdGgucmVscGF0aChpdGVtLCBkaXIpKSkKKworICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgaWYga2V5IGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgI2NoZWNrIHdoZXRoZXIgdGhlIGZpbGUgaXMgYWxsb3cgdG8gcmVwbGFjZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYWxsb3dfcmVwLm1hdGNoKGtleSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGVzW2tleV0pIGFuZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5leGlzdHMoaXRlbSkgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3Qgc2VsZi5fZmlsZV9lcXVhbChrZXksIGZpbGVzW2tleV0sIGl0ZW0pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCIlcyBkdXBsaWNhdGUgZmlsZXMgJXMgJXMgaXMgbm90IHRoZSBzYW1lXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yX3Byb21wdCwgaXRlbSwgZmlsZXNba2V5XSkpCisKKyAgICAgICAgICAgICAgICAgICAgI3Bhc3MgdGhlIGNoZWNrLCBhZGQgdG8gbGlzdAorICAgICAgICAgICAgICAgICAgICBpZiB2YWxpZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzW2tleV0gPSBpdGVtCisKKyAgICBkZWYgX211bHRpbGliX3Rlc3RfaW5zdGFsbChzZWxmLCBwa2dzKToKKyAgICAgICAgbWxfdGVtcCA9IHNlbGYuZC5nZXRWYXIoIk1VTFRJTElCX1RFTVBfUk9PVEZTIiwgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG1sX3RlbXApCisKKyAgICAgICAgZGlycyA9IFtzZWxmLmltYWdlX3Jvb3Rmc10KKworICAgICAgICBmb3IgdmFyaWFudCBpbiBzZWxmLmQuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICBtbF90YXJnZXRfcm9vdGZzID0gb3MucGF0aC5qb2luKG1sX3RlbXAsIHZhcmlhbnQpCisKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShtbF90YXJnZXRfcm9vdGZzLCBUcnVlKQorCisgICAgICAgICAgICBtbF9vcGtnX2NvbmYgPSBvcy5wYXRoLmpvaW4obWxfdGVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50ICsgIi0iICsgb3MucGF0aC5iYXNlbmFtZShzZWxmLm9wa2dfY29uZikpCisKKyAgICAgICAgICAgIG1sX3BtID0gT3BrZ1BNKHNlbGYuZCwgbWxfdGFyZ2V0X3Jvb3RmcywgbWxfb3BrZ19jb25mLCBzZWxmLnBrZ19hcmNocykKKworICAgICAgICAgICAgbWxfcG0udXBkYXRlKCkKKyAgICAgICAgICAgIG1sX3BtLmluc3RhbGwocGtncykKKworICAgICAgICAgICAgZGlycy5hcHBlbmQobWxfdGFyZ2V0X3Jvb3RmcykKKworICAgICAgICBzZWxmLl9tdWx0aWxpYl9zYW5pdHlfdGVzdChkaXJzKQorCisgICAgJycnCisgICAgV2hpbGUgaXBrIGluY3JlbWVudGFsIGltYWdlIGdlbmVyYXRpb24gaXMgZW5hYmxlZCwgaXQgd2lsbCByZW1vdmUgdGhlCisgICAgdW5uZWVkZWQgcGtncyBieSBjb21wYXJpbmcgdGhlIG9sZCBmdWxsIG1hbmlmZXN0IGluIHByZXZpb3VzIGV4aXN0aW5nCisgICAgaW1hZ2UgYW5kIHRoZSBuZXcgZnVsbCBtYW5pZmVzdCBpbiB0aGUgY3VycmVudCBpbWFnZS4KKyAgICAnJycKKyAgICBkZWYgX3JlbW92ZV9leHRyYV9wYWNrYWdlcyhzZWxmLCBwa2dzX2luaXRpYWxfaW5zdGFsbCk6CisgICAgICAgIGlmIHNlbGYuaW5jX29wa2dfaW1hZ2VfZ2VuID09ICIxIjoKKyAgICAgICAgICAgICMgUGFyc2UgZnVsbCBtYW5pZmVzdCBpbiBwcmV2aW91cyBleGlzdGluZyBpbWFnZSBjcmVhdGlvbiBzZXNzaW9uCisgICAgICAgICAgICBvbGRfZnVsbF9tYW5pZmVzdCA9IHNlbGYubWFuaWZlc3QucGFyc2VfZnVsbF9tYW5pZmVzdCgpCisKKyAgICAgICAgICAgICMgQ3JlYXRlIGZ1bGwgbWFuaWZlc3QgZm9yIHRoZSBjdXJyZW50IGltYWdlIHNlc3Npb24sIHRoZSBvbGQgb25lCisgICAgICAgICAgICAjIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIG5ldyBvbmUuCisgICAgICAgICAgICBzZWxmLm1hbmlmZXN0LmNyZWF0ZV9mdWxsKHNlbGYucG0pCisKKyAgICAgICAgICAgICMgUGFyc2UgZnVsbCBtYW5pZmVzdCBpbiBjdXJyZW50IGltYWdlIGNyZWF0aW9uIHNlc3Npb24KKyAgICAgICAgICAgIG5ld19mdWxsX21hbmlmZXN0ID0gc2VsZi5tYW5pZmVzdC5wYXJzZV9mdWxsX21hbmlmZXN0KCkKKworICAgICAgICAgICAgcGtnX3RvX3JlbW92ZSA9IGxpc3QoKQorICAgICAgICAgICAgZm9yIHBrZyBpbiBvbGRfZnVsbF9tYW5pZmVzdDoKKyAgICAgICAgICAgICAgICBpZiBwa2cgbm90IGluIG5ld19mdWxsX21hbmlmZXN0OgorICAgICAgICAgICAgICAgICAgICBwa2dfdG9fcmVtb3ZlLmFwcGVuZChwa2cpCisKKyAgICAgICAgICAgIGlmIHBrZ190b19yZW1vdmUgIT0gW106CisgICAgICAgICAgICAgICAgYmIubm90ZSgnZGVjcmVtZW50YWwgcmVtb3ZlZDogJXMnICUgJyAnLmpvaW4ocGtnX3RvX3JlbW92ZSkpCisgICAgICAgICAgICAgICAgc2VsZi5wbS5yZW1vdmUocGtnX3RvX3JlbW92ZSkKKworICAgICcnJworICAgIENvbXBhcmUgd2l0aCBwcmV2aW91cyBleGlzdGluZyBpbWFnZSBjcmVhdGlvbiwgaWYgc29tZSBjb25kaXRpb25zCisgICAgdHJpZ2dlcmVkLCB0aGUgcHJldmlvdXMgb2xkIGltYWdlIHNob3VsZCBiZSByZW1vdmVkLgorICAgIFRoZSBjb25kaXRpb25zIGluY2x1ZGUgYW55IG9mICdQQUNLQUdFX0VYQ0xVREUsIE5PX1JFQ09NTUVOREFUSU9OUworICAgIGFuZCBCQURfUkVDT01NRU5EQVRJT05TJyBoYXMgYmVlbiBjaGFuZ2VkLgorICAgICcnJworICAgIGRlZiBfcmVtb3ZlX29sZF9yb290ZnMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaW5jX29wa2dfaW1hZ2VfZ2VuICE9ICIxIjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdmFyc19saXN0X2ZpbGUgPSBzZWxmLmQuZXhwYW5kKCcke1R9L3ZhcnNfbGlzdCcpCisKKyAgICAgICAgb2xkX3ZhcnNfbGlzdCA9ICIiCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHZhcnNfbGlzdF9maWxlKToKKyAgICAgICAgICAgIG9sZF92YXJzX2xpc3QgPSBvcGVuKHZhcnNfbGlzdF9maWxlLCAncisnKS5yZWFkKCkKKworICAgICAgICBuZXdfdmFyc19saXN0ID0gJyVzOiVzOiVzXG4nICUgXAorICAgICAgICAgICAgICAgICgoc2VsZi5kLmdldFZhcignQkFEX1JFQ09NTUVOREFUSU9OUycsIFRydWUpIG9yICcnKS5zdHJpcCgpLAorICAgICAgICAgICAgICAgICAoc2VsZi5kLmdldFZhcignTk9fUkVDT01NRU5EQVRJT05TJywgVHJ1ZSkgb3IgJycpLnN0cmlwKCksCisgICAgICAgICAgICAgICAgIChzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0VYQ0xVREUnLCBUcnVlKSBvciAnJykuc3RyaXAoKSkKKyAgICAgICAgb3Blbih2YXJzX2xpc3RfZmlsZSwgJ3crJykud3JpdGUobmV3X3ZhcnNfbGlzdCkKKworICAgICAgICBpZiBvbGRfdmFyc19saXN0ICE9IG5ld192YXJzX2xpc3Q6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9jcmVhdGUoc2VsZik6CisgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IHNlbGYubWFuaWZlc3QucGFyc2VfaW5pdGlhbF9tYW5pZmVzdCgpCisgICAgICAgIG9wa2dfcHJlX3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoJ09QS0dfUFJFUFJPQ0VTU19DT01NQU5EUycsIFRydWUpCisgICAgICAgIG9wa2dfcG9zdF9wcm9jZXNzX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCdPUEtHX1BPU1RQUk9DRVNTX0NPTU1BTkRTJywgVHJ1ZSkKKyAgICAgICAgcm9vdGZzX3Bvc3RfaW5zdGFsbF9jbWRzID0gc2VsZi5kLmdldFZhcignUk9PVEZTX1BPU1RJTlNUQUxMX0NPTU1BTkQnLCBUcnVlKQorCisgICAgICAgICMgdXBkYXRlIFBNIGluZGV4IGZpbGVzLCB1bmxlc3MgdXNlcnMgcHJvdmlkZSB0aGVpciBvd24gZmVlZHMKKyAgICAgICAgaWYgKHNlbGYuZC5nZXRWYXIoJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywgVHJ1ZSkgb3IgIiIpICE9ICIxIjoKKyAgICAgICAgICAgIHNlbGYucG0ud3JpdGVfaW5kZXgoKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIG9wa2dfcHJlX3Byb2Nlc3NfY21kcykKKworICAgICAgICBzZWxmLnBtLnVwZGF0ZSgpCisKKyAgICAgICAgc2VsZi5wbS5oYW5kbGVfYmFkX3JlY29tbWVuZGF0aW9ucygpCisKKyAgICAgICAgaWYgc2VsZi5pbmNfb3BrZ19pbWFnZV9nZW4gPT0gIjEiOgorICAgICAgICAgICAgc2VsZi5fcmVtb3ZlX2V4dHJhX3BhY2thZ2VzKHBrZ3NfdG9faW5zdGFsbCkKKworICAgICAgICBmb3IgcGtnX3R5cGUgaW4gc2VsZi5pbnN0YWxsX29yZGVyOgorICAgICAgICAgICAgaWYgcGtnX3R5cGUgaW4gcGtnc190b19pbnN0YWxsOgorICAgICAgICAgICAgICAgICMgRm9yIG11bHRpbGliLCB3ZSBwZXJmb3JtIGEgc2FuaXR5IHRlc3QgYmVmb3JlIGZpbmFsIGluc3RhbGwKKyAgICAgICAgICAgICAgICAjIElmIHNhbml0eSB0ZXN0IGZhaWxzLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgZG8gYSBiYi5mYXRhbCgpCisgICAgICAgICAgICAgICAgIyBhbmQgdGhlIGluc3RhbGxhdGlvbiB3aWxsIHN0b3AKKyAgICAgICAgICAgICAgICBpZiBwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9NVUxUSUxJQjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbXVsdGlsaWJfdGVzdF9pbnN0YWxsKHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0pCisKKyAgICAgICAgICAgICAgICBzZWxmLnBtLmluc3RhbGwocGtnc190b19pbnN0YWxsW3BrZ190eXBlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0ZhbHNlLCBUcnVlXVtwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9BVFRFTVBUX09OTFldKQorCisgICAgICAgIHNlbGYucG0uaW5zdGFsbF9jb21wbGVtZW50YXJ5KCkKKworICAgICAgICBzZWxmLl9zZXR1cF9kYmdfcm9vdGZzKFsnL3Zhci9saWIvb3BrZyddKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIG9wa2dfcG9zdF9wcm9jZXNzX2NtZHMpCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHJvb3Rmc19wb3N0X2luc3RhbGxfY21kcykKKworICAgICAgICBpZiBzZWxmLmluY19vcGtnX2ltYWdlX2dlbiA9PSAiMSI6CisgICAgICAgICAgICBzZWxmLnBtLmJhY2t1cF9wYWNrYWdpbmdfZGF0YSgpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9kZXBlbmRzX2xpc3QoKToKKyAgICAgICAgcmV0dXJuIFsnSVBLR0NPTkZfU0RLJywgJ0lQS19GRUVEX1VSSVMnLCAnREVQTE9ZX0RJUl9JUEsnLCAnSVBLR0NPTkZfVEFSR0VUJywgJ0lOQ19JUEtfSU1BR0VfR0VOJywgJ09QS0dfQVJHUycsICdPUEtHTElCRElSJywgJ09QS0dfUFJFUFJPQ0VTU19DT01NQU5EUycsICdPUEtHX1BPU1RQUk9DRVNTX0NPTU1BTkRTJywgJ09QS0dMSUJESVInXQorCisgICAgZGVmIF9nZXRfZGVsYXllZF9wb3N0aW5zdHMoc2VsZik6CisgICAgICAgIHN0YXR1c19maWxlID0gb3MucGF0aC5qb2luKHNlbGYuaW1hZ2Vfcm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdPUEtHTElCRElSJywgVHJ1ZSkuc3RyaXAoJy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wa2ciLCAic3RhdHVzIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9kZWxheWVkX3Bvc3RpbnN0c19jb21tb24oc3RhdHVzX2ZpbGUpCisKKyAgICBkZWYgX3NhdmVfcG9zdGluc3RzKHNlbGYpOgorICAgICAgICBkc3RfcG9zdGluc3RfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9pcGstcG9zdGluc3RzIikKKyAgICAgICAgc3JjX3Bvc3RpbnN0X2RpciA9IHNlbGYuZC5leHBhbmQoIiR7SU1BR0VfUk9PVEZTfSR7T1BLR0xJQkRJUn0vb3BrZy9pbmZvIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NhdmVfcG9zdGluc3RzX2NvbW1vbihkc3RfcG9zdGluc3RfZGlyLCBzcmNfcG9zdGluc3RfZGlyKQorCisgICAgZGVmIF9oYW5kbGVfaW50ZXJjZXB0X2ZhaWx1cmUoc2VsZiwgcmVnaXN0ZXJlZF9wa2dzKToKKyAgICAgICAgc2VsZi5wbS5tYXJrX3BhY2thZ2VzKCJ1bnBhY2tlZCIsIHJlZ2lzdGVyZWRfcGtncy5zcGxpdCgpKQorCisgICAgZGVmIF9sb2dfY2hlY2soc2VsZik6CisgICAgICAgIHNlbGYuX2xvZ19jaGVja193YXJuKCkKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX2Vycm9yKCkKKworICAgIGRlZiBfY2xlYW51cChzZWxmKToKKyAgICAgICAgcGFzcworCitkZWYgZ2V0X2NsYXNzX2Zvcl90eXBlKGltZ3R5cGUpOgorICAgIHJldHVybiB7InJwbSI6IFJwbVJvb3RmcywKKyAgICAgICAgICAgICJpcGsiOiBPcGtnUm9vdGZzLAorICAgICAgICAgICAgImRlYiI6IERwa2dSb290ZnN9W2ltZ3R5cGVdCisKK2RlZiB2YXJpYWJsZV9kZXBlbmRzKGQsIG1hbmlmZXN0X2Rpcj1Ob25lKToKKyAgICBpbWdfdHlwZSA9IGQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICBjbHMgPSBnZXRfY2xhc3NfZm9yX3R5cGUoaW1nX3R5cGUpCisgICAgcmV0dXJuIGNscy5fZGVwZW5kc19saXN0KCkKKworZGVmIGNyZWF0ZV9yb290ZnMoZCwgbWFuaWZlc3RfZGlyPU5vbmUpOgorICAgIGVudl9ia3AgPSBvcy5lbnZpcm9uLmNvcHkoKQorCisgICAgaW1nX3R5cGUgPSBkLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpCisgICAgaWYgaW1nX3R5cGUgPT0gInJwbSI6CisgICAgICAgIFJwbVJvb3RmcyhkLCBtYW5pZmVzdF9kaXIpLmNyZWF0ZSgpCisgICAgZWxpZiBpbWdfdHlwZSA9PSAiaXBrIjoKKyAgICAgICAgT3BrZ1Jvb3RmcyhkLCBtYW5pZmVzdF9kaXIpLmNyZWF0ZSgpCisgICAgZWxpZiBpbWdfdHlwZSA9PSAiZGViIjoKKyAgICAgICAgRHBrZ1Jvb3RmcyhkLCBtYW5pZmVzdF9kaXIpLmNyZWF0ZSgpCisKKyAgICBvcy5lbnZpcm9uLmNsZWFyKCkKKyAgICBvcy5lbnZpcm9uLnVwZGF0ZShlbnZfYmtwKQorCisKK2RlZiBpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkLCBmb3JtYXQ9Tm9uZSwgcm9vdGZzX2Rpcj1Ob25lKToKKyAgICBpZiBub3Qgcm9vdGZzX2RpcjoKKyAgICAgICAgcm9vdGZzX2RpciA9IGQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKQorCisgICAgaW1nX3R5cGUgPSBkLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpCisgICAgaWYgaW1nX3R5cGUgPT0gInJwbSI6CisgICAgICAgIHJldHVybiBScG1Qa2dzTGlzdChkLCByb290ZnNfZGlyKS5saXN0KGZvcm1hdCkKKyAgICBlbGlmIGltZ190eXBlID09ICJpcGsiOgorICAgICAgICByZXR1cm4gT3BrZ1BrZ3NMaXN0KGQsIHJvb3Rmc19kaXIsIGQuZ2V0VmFyKCJJUEtHQ09ORl9UQVJHRVQiLCBUcnVlKSkubGlzdChmb3JtYXQpCisgICAgZWxpZiBpbWdfdHlwZSA9PSAiZGViIjoKKyAgICAgICAgcmV0dXJuIERwa2dQa2dzTGlzdChkLCByb290ZnNfZGlyKS5saXN0KGZvcm1hdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICAiIiIKKyAgICBXZSBzaG91bGQgYmUgYWJsZSB0byBydW4gdGhpcyBhcyBhIHN0YW5kYWxvbmUgc2NyaXB0LCBmcm9tIG91dHNpZGUgYml0YmFrZQorICAgIGVudmlyb25tZW50LgorICAgICIiIgorICAgICIiIgorICAgIFRCRAorICAgICIiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9zZGsucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Nkay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2RhMGYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9zZGsucHkKQEAgLTAsMCArMSwzNDkgQEAKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAorZnJvbSBvZS51dGlscyBpbXBvcnQgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzCitmcm9tIG9lLm1hbmlmZXN0IGltcG9ydCAqCitmcm9tIG9lLnBhY2thZ2VfbWFuYWdlciBpbXBvcnQgKgoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgZ2xvYgorCisKK2NsYXNzIFNkayhvYmplY3QpOgorICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyKToKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLnNka19vdXRwdXQgPSBzZWxmLmQuZ2V0VmFyKCdTREtfT1VUUFVUJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5zZGtfbmF0aXZlX3BhdGggPSBzZWxmLmQuZ2V0VmFyKCdTREtQQVRITkFUSVZFJywgVHJ1ZSkuc3RyaXAoJy8nKQorICAgICAgICBzZWxmLnRhcmdldF9wYXRoID0gc2VsZi5kLmdldFZhcignU0RLVEFSR0VUU1lTUk9PVCcsIFRydWUpLnN0cmlwKCcvJykKKyAgICAgICAgc2VsZi5zeXNjb25mZGlyID0gc2VsZi5kLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLnN0cmlwKCcvJykKKworICAgICAgICBzZWxmLnNka190YXJnZXRfc3lzcm9vdCA9IG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsIHNlbGYudGFyZ2V0X3BhdGgpCisgICAgICAgIHNlbGYuc2RrX2hvc3Rfc3lzcm9vdCA9IHNlbGYuc2RrX291dHB1dAorCisgICAgICAgIGlmIG1hbmlmZXN0X2RpciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5tYW5pZmVzdF9kaXIgPSBzZWxmLmQuZ2V0VmFyKCJTREtfRElSIiwgVHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubWFuaWZlc3RfZGlyID0gbWFuaWZlc3RfZGlyCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuc2RrX291dHB1dCwgVHJ1ZSkKKworICAgICAgICBzZWxmLmluc3RhbGxfb3JkZXIgPSBNYW5pZmVzdC5JTlNUQUxMX09SREVSCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX3BvcHVsYXRlKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcG9wdWxhdGUoc2VsZik6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLnNka19vdXRwdXQpCisKKyAgICAgICAgIyBjYWxsIGJhY2tlbmQgZGVwZW5kZW50IGltcGxlbWVudGF0aW9uCisgICAgICAgIHNlbGYuX3BvcHVsYXRlKCkKKworICAgICAgICAjIERvbid0IHNoaXAgYW55IGxpYkdMIGluIHRoZSBTREsKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsIHNlbGYuc2RrX25hdGl2ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ2xpYmRpcl9uYXRpdmVzZGsnLCBUcnVlKS5zdHJpcCgnLycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJHTCoiKSkKKworICAgICAgICAjIEZpeCBvciByZW1vdmUgYnJva2VuIC5sYSBmaWxlcworICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgc2VsZi5zZGtfbmF0aXZlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignbGliZGlyX25hdGl2ZXNkaycsIFRydWUpLnN0cmlwKCcvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIioubGEiKSkKKworICAgICAgICAjIExpbmsgdGhlIGxkLnNvLmNhY2hlIGZpbGUgaW50byB0aGUgaG9zdHMgZmlsZXN5c3RlbQorICAgICAgICBsaW5rX25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCBzZWxmLnNka19uYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3lzY29uZmRpciwgImxkLnNvLmNhY2hlIikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShsaW5rX25hbWUpKQorICAgICAgICBvcy5zeW1saW5rKCIvZXRjL2xkLnNvLmNhY2hlIiwgbGlua19uYW1lKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHNlbGYuZC5nZXRWYXIoJ1NES19QT1NUUFJPQ0VTU19DT01NQU5EJywgVHJ1ZSkpCisKKworY2xhc3MgUnBtU2RrKFNkayk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcj1Ob25lKToKKyAgICAgICAgc3VwZXIoUnBtU2RrLCBzZWxmKS5fX2luaXRfXyhkLCBtYW5pZmVzdF9kaXIpCisKKyAgICAgICAgc2VsZi50YXJnZXRfbWFuaWZlc3QgPSBScG1NYW5pZmVzdChkLCBzZWxmLm1hbmlmZXN0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19UQVJHRVQpCisgICAgICAgIHNlbGYuaG9zdF9tYW5pZmVzdCA9IFJwbU1hbmlmZXN0KGQsIHNlbGYubWFuaWZlc3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19IT1NUKQorCisgICAgICAgIHRhcmdldF9wcm92aWRlbmFtZSA9IFsnL2Jpbi9zaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL2Jpbi9iYXNoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2Jpbi9lbnYnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvYmluL3BlcmwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BrZ2NvbmZpZycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKworICAgICAgICBzZWxmLnRhcmdldF9wbSA9IFJwbVBNKGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZGtfdGFyZ2V0X3N5c3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignVEFSR0VUX1ZFTkRPUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0YXJnZXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9wcm92aWRlbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBzZGtfcHJvdmlkZW5hbWUgPSBbJy9iaW4vc2gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9iaW4vYmFzaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Vzci9iaW4vZW52JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2Jpbi9wZXJsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdwa2djb25maWcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpYkdMLnNvKCkoNjRiaXQpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWJHTC5zbycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKworICAgICAgICBzZWxmLmhvc3RfcG0gPSBScG1QTShkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNka19ob3N0X3N5c3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ1NES19WRU5ET1InLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hvc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGtfcHJvdmlkZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTREtfUEFDS0FHRV9BUkNIUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTREtfT1MiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgIGRlZiBfcG9wdWxhdGVfc3lzcm9vdChzZWxmLCBwbSwgbWFuaWZlc3QpOgorICAgICAgICBwa2dzX3RvX2luc3RhbGwgPSBtYW5pZmVzdC5wYXJzZV9pbml0aWFsX21hbmlmZXN0KCkKKworICAgICAgICBwbS5jcmVhdGVfY29uZmlncygpCisgICAgICAgIHBtLndyaXRlX2luZGV4KCkKKyAgICAgICAgcG0uZHVtcF9hbGxfYXZhaWxhYmxlX3BrZ3MoKQorICAgICAgICBwbS51cGRhdGUoKQorCisgICAgICAgIHBrZ3MgPSBbXQorICAgICAgICBwa2dzX2F0dGVtcHQgPSBbXQorICAgICAgICBmb3IgcGtnX3R5cGUgaW4gcGtnc190b19pbnN0YWxsOgorICAgICAgICAgICAgaWYgcGtnX3R5cGUgPT0gTWFuaWZlc3QuUEtHX1RZUEVfQVRURU1QVF9PTkxZOgorICAgICAgICAgICAgICAgIHBrZ3NfYXR0ZW1wdCArPSBwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBrZ3MgKz0gcGtnc190b19pbnN0YWxsW3BrZ190eXBlXQorCisgICAgICAgIHBtLmluc3RhbGwocGtncykKKworICAgICAgICBwbS5pbnN0YWxsKHBrZ3NfYXR0ZW1wdCwgVHJ1ZSkKKworICAgIGRlZiBfcG9wdWxhdGUoc2VsZik6CisgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgVEFSR0VUIHBhY2thZ2VzIikKKyAgICAgICAgc2VsZi5fcG9wdWxhdGVfc3lzcm9vdChzZWxmLnRhcmdldF9wbSwgc2VsZi50YXJnZXRfbWFuaWZlc3QpCisKKyAgICAgICAgc2VsZi50YXJnZXRfcG0uaW5zdGFsbF9jb21wbGVtZW50YXJ5KHNlbGYuZC5nZXRWYXIoJ1NES0lNQUdFX0lOU1RBTExfQ09NUExFTUVOVEFSWScsIFRydWUpKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHNlbGYuZC5nZXRWYXIoIlBPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EIiwgVHJ1ZSkpCisKKyAgICAgICAgc2VsZi50YXJnZXRfcG0ucmVtb3ZlX3BhY2thZ2luZ19kYXRhKCkKKworICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIE5BVElWRVNESyBwYWNrYWdlcyIpCisgICAgICAgIHNlbGYuX3BvcHVsYXRlX3N5c3Jvb3Qoc2VsZi5ob3N0X3BtLCBzZWxmLmhvc3RfbWFuaWZlc3QpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EIiwgVHJ1ZSkpCisKKyAgICAgICAgc2VsZi5ob3N0X3BtLnJlbW92ZV9wYWNrYWdpbmdfZGF0YSgpCisKKyAgICAgICAgIyBNb3ZlIGhvc3QgUlBNIGxpYnJhcnkgZGF0YQorICAgICAgICBuYXRpdmVfcnBtX3N0YXRlX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2RrX25hdGl2ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdsb2NhbHN0YXRlZGlyX25hdGl2ZXNkaycsIFRydWUpLnN0cmlwKCcvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnBtIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihuYXRpdmVfcnBtX3N0YXRlX2RpcikKKyAgICAgICAgZm9yIGYgaW4gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJwbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIioiKSk6CisgICAgICAgICAgICBiYi51dGlscy5tb3ZlZmlsZShmLCBuYXRpdmVfcnBtX3N0YXRlX2RpcikKKworICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgInZhciIpLCBUcnVlKQorCisgICAgICAgICMgTW92ZSBob3N0IHN5c2NvbmZpZyBkYXRhCisgICAgICAgIG5hdGl2ZV9zeXNjb25mX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNka19uYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ3N5c2NvbmZkaXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKS5zdHJpcCgnLycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobmF0aXZlX3N5c2NvbmZfZGlyKQorICAgICAgICBmb3IgZiBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgImV0YyIsICIqIikpOgorICAgICAgICAgICAgYmIudXRpbHMubW92ZWZpbGUoZiwgbmF0aXZlX3N5c2NvbmZfZGlyKQorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgImV0YyIpLCBUcnVlKQorCisKK2NsYXNzIE9wa2dTZGsoU2RrKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyPU5vbmUpOgorICAgICAgICBzdXBlcihPcGtnU2RrLCBzZWxmKS5fX2luaXRfXyhkLCBtYW5pZmVzdF9kaXIpCisKKyAgICAgICAgc2VsZi50YXJnZXRfY29uZiA9IHNlbGYuZC5nZXRWYXIoIklQS0dDT05GX1RBUkdFVCIsIFRydWUpCisgICAgICAgIHNlbGYuaG9zdF9jb25mID0gc2VsZi5kLmdldFZhcigiSVBLR0NPTkZfU0RLIiwgVHJ1ZSkKKworICAgICAgICBzZWxmLnRhcmdldF9tYW5pZmVzdCA9IE9wa2dNYW5pZmVzdChkLCBzZWxmLm1hbmlmZXN0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFuaWZlc3QuTUFOSUZFU1RfVFlQRV9TREtfVEFSR0VUKQorICAgICAgICBzZWxmLmhvc3RfbWFuaWZlc3QgPSBPcGtnTWFuaWZlc3QoZCwgc2VsZi5tYW5pZmVzdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19IT1NUKQorCisgICAgICAgIHNlbGYudGFyZ2V0X3BtID0gT3BrZ1BNKGQsIHNlbGYuc2RrX3RhcmdldF9zeXNyb290LCBzZWxmLnRhcmdldF9jb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCJBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUyIsIFRydWUpKQorCisgICAgICAgIHNlbGYuaG9zdF9wbSA9IE9wa2dQTShkLCBzZWxmLnNka19ob3N0X3N5c3Jvb3QsIHNlbGYuaG9zdF9jb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcigiU0RLX1BBQ0tBR0VfQVJDSFMiLCBUcnVlKSkKKworICAgIGRlZiBfcG9wdWxhdGVfc3lzcm9vdChzZWxmLCBwbSwgbWFuaWZlc3QpOgorICAgICAgICBwa2dzX3RvX2luc3RhbGwgPSBtYW5pZmVzdC5wYXJzZV9pbml0aWFsX21hbmlmZXN0KCkKKworICAgICAgICBpZiAoc2VsZi5kLmdldFZhcignQlVJTERfSU1BR0VTX0ZST01fRkVFRFMnLCBUcnVlKSBvciAiIikgIT0gIjEiOgorICAgICAgICAgICAgcG0ud3JpdGVfaW5kZXgoKQorCisgICAgICAgIHBtLnVwZGF0ZSgpCisKKyAgICAgICAgcGtncyA9IFtdCisgICAgICAgIHBrZ3NfYXR0ZW1wdCA9IFtdCisgICAgICAgIGZvciBwa2dfdHlwZSBpbiBwa2dzX3RvX2luc3RhbGw6CisgICAgICAgICAgICBpZiBwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9BVFRFTVBUX09OTFk6CisgICAgICAgICAgICAgICAgcGtnc19hdHRlbXB0ICs9IHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtncyArPSBwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdCisKKyAgICAgICAgcG0uaW5zdGFsbChwa2dzKQorCisgICAgICAgIHBtLmluc3RhbGwocGtnc19hdHRlbXB0LCBUcnVlKQorCisgICAgZGVmIF9wb3B1bGF0ZShzZWxmKToKKyAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyBUQVJHRVQgcGFja2FnZXMiKQorICAgICAgICBzZWxmLl9wb3B1bGF0ZV9zeXNyb290KHNlbGYudGFyZ2V0X3BtLCBzZWxmLnRhcmdldF9tYW5pZmVzdCkKKworICAgICAgICBzZWxmLnRhcmdldF9wbS5pbnN0YWxsX2NvbXBsZW1lbnRhcnkoc2VsZi5kLmdldFZhcignU0RLSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZJywgVHJ1ZSkpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQiLCBUcnVlKSkKKworICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIE5BVElWRVNESyBwYWNrYWdlcyIpCisgICAgICAgIHNlbGYuX3BvcHVsYXRlX3N5c3Jvb3Qoc2VsZi5ob3N0X3BtLCBzZWxmLmhvc3RfbWFuaWZlc3QpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EIiwgVHJ1ZSkpCisKKyAgICAgICAgdGFyZ2V0X3N5c2NvbmZkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5zZGtfdGFyZ2V0X3N5c3Jvb3QsIHNlbGYuc3lzY29uZmRpcikKKyAgICAgICAgaG9zdF9zeXNjb25mZGlyID0gb3MucGF0aC5qb2luKHNlbGYuc2RrX2hvc3Rfc3lzcm9vdCwgc2VsZi5zeXNjb25mZGlyKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih0YXJnZXRfc3lzY29uZmRpcikKKyAgICAgICAgc2h1dGlsLmNvcHkoc2VsZi50YXJnZXRfY29uZiwgdGFyZ2V0X3N5c2NvbmZkaXIpCisgICAgICAgIG9zLmNobW9kKG9zLnBhdGguam9pbih0YXJnZXRfc3lzY29uZmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoc2VsZi50YXJnZXRfY29uZikpLCAwNjQ0KQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihob3N0X3N5c2NvbmZkaXIpCisgICAgICAgIHNodXRpbC5jb3B5KHNlbGYuaG9zdF9jb25mLCBob3N0X3N5c2NvbmZkaXIpCisgICAgICAgIG9zLmNobW9kKG9zLnBhdGguam9pbihob3N0X3N5c2NvbmZkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKHNlbGYuaG9zdF9jb25mKSksIDA2NDQpCisKKyAgICAgICAgbmF0aXZlX29wa2dfc3RhdGVfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgc2VsZi5zZGtfbmF0aXZlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdsb2NhbHN0YXRlZGlyX25hdGl2ZXNkaycsIFRydWUpLnN0cmlwKCcvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGliIiwgIm9wa2ciKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobmF0aXZlX29wa2dfc3RhdGVfZGlyKQorICAgICAgICBmb3IgZiBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgInZhciIsICJsaWIiLCAib3BrZyIsICIqIikpOgorICAgICAgICAgICAgYmIudXRpbHMubW92ZWZpbGUoZiwgbmF0aXZlX29wa2dfc3RhdGVfZGlyKQorCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAidmFyIiksIFRydWUpCisKKworY2xhc3MgRHBrZ1NkayhTZGspOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBtYW5pZmVzdF9kaXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKERwa2dTZGssIHNlbGYpLl9faW5pdF9fKGQsIG1hbmlmZXN0X2RpcikKKworICAgICAgICBzZWxmLnRhcmdldF9jb25mX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCJBUFRDT05GX1RBUkdFVCIsIFRydWUpLCAiYXB0IikKKyAgICAgICAgc2VsZi5ob3N0X2NvbmZfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoIkFQVENPTkZfVEFSR0VUIiwgVHJ1ZSksICJhcHQtc2RrIikKKworICAgICAgICBzZWxmLnRhcmdldF9tYW5pZmVzdCA9IERwa2dNYW5pZmVzdChkLCBzZWxmLm1hbmlmZXN0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFuaWZlc3QuTUFOSUZFU1RfVFlQRV9TREtfVEFSR0VUKQorICAgICAgICBzZWxmLmhvc3RfbWFuaWZlc3QgPSBEcGtnTWFuaWZlc3QoZCwgc2VsZi5tYW5pZmVzdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19IT1NUKQorCisgICAgICAgIHNlbGYudGFyZ2V0X3BtID0gRHBrZ1BNKGQsIHNlbGYuc2RrX3RhcmdldF9zeXNyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCJQQUNLQUdFX0FSQ0hTIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoIkRQS0dfQVJDSCIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhcmdldF9jb25mX2RpcikKKworICAgICAgICBzZWxmLmhvc3RfcG0gPSBEcGtnUE0oZCwgc2VsZi5zZGtfaG9zdF9zeXNyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcigiU0RLX1BBQ0tBR0VfQVJDSFMiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoIkRFQl9TREtfQVJDSCIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3N0X2NvbmZfZGlyKQorCisgICAgZGVmIF9jb3B5X2FwdF9kaXJfdG8oc2VsZiwgZHN0X2Rpcik6CisgICAgICAgIHN0YWdpbmdfZXRjZGlyX25hdGl2ZSA9IHNlbGYuZC5nZXRWYXIoIlNUQUdJTkdfRVRDRElSX05BVElWRSIsIFRydWUpCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKGRzdF9kaXIsIFRydWUpCisKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKG9zLnBhdGguam9pbihzdGFnaW5nX2V0Y2Rpcl9uYXRpdmUsICJhcHQiKSwgZHN0X2RpcikKKworICAgIGRlZiBfcG9wdWxhdGVfc3lzcm9vdChzZWxmLCBwbSwgbWFuaWZlc3QpOgorICAgICAgICBwa2dzX3RvX2luc3RhbGwgPSBtYW5pZmVzdC5wYXJzZV9pbml0aWFsX21hbmlmZXN0KCkKKworICAgICAgICBwbS53cml0ZV9pbmRleCgpCisgICAgICAgIHBtLnVwZGF0ZSgpCisKKyAgICAgICAgcGtncyA9IFtdCisgICAgICAgIHBrZ3NfYXR0ZW1wdCA9IFtdCisgICAgICAgIGZvciBwa2dfdHlwZSBpbiBwa2dzX3RvX2luc3RhbGw6CisgICAgICAgICAgICBpZiBwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9BVFRFTVBUX09OTFk6CisgICAgICAgICAgICAgICAgcGtnc19hdHRlbXB0ICs9IHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtncyArPSBwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdCisKKyAgICAgICAgcG0uaW5zdGFsbChwa2dzKQorCisgICAgICAgIHBtLmluc3RhbGwocGtnc19hdHRlbXB0LCBUcnVlKQorCisgICAgZGVmIF9wb3B1bGF0ZShzZWxmKToKKyAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyBUQVJHRVQgcGFja2FnZXMiKQorICAgICAgICBzZWxmLl9wb3B1bGF0ZV9zeXNyb290KHNlbGYudGFyZ2V0X3BtLCBzZWxmLnRhcmdldF9tYW5pZmVzdCkKKworICAgICAgICBzZWxmLnRhcmdldF9wbS5pbnN0YWxsX2NvbXBsZW1lbnRhcnkoc2VsZi5kLmdldFZhcignU0RLSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZJywgVHJ1ZSkpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQiLCBUcnVlKSkKKworICAgICAgICBzZWxmLl9jb3B5X2FwdF9kaXJfdG8ob3MucGF0aC5qb2luKHNlbGYuc2RrX3RhcmdldF9zeXNyb290LCAiZXRjIiwgImFwdCIpKQorCisgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgTkFUSVZFU0RLIHBhY2thZ2VzIikKKyAgICAgICAgc2VsZi5fcG9wdWxhdGVfc3lzcm9vdChzZWxmLmhvc3RfcG0sIHNlbGYuaG9zdF9tYW5pZmVzdCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBzZWxmLmQuZ2V0VmFyKCJQT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkQiLCBUcnVlKSkKKworICAgICAgICBzZWxmLl9jb3B5X2FwdF9kaXJfdG8ob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgc2VsZi5zZGtfbmF0aXZlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV0YyIsICJhcHQiKSkKKworICAgICAgICBuYXRpdmVfZHBrZ19zdGF0ZV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCBzZWxmLnNka19uYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YXIiLCAibGliIiwgImRwa2ciKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobmF0aXZlX2Rwa2dfc3RhdGVfZGlyKQorICAgICAgICBmb3IgZiBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgInZhciIsICJsaWIiLCAiZHBrZyIsICIqIikpOgorICAgICAgICAgICAgYmIudXRpbHMubW92ZWZpbGUoZiwgbmF0aXZlX2Rwa2dfc3RhdGVfZGlyKQorCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAidmFyIiksIFRydWUpCisKKworZGVmIHNka19saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkLCB0YXJnZXQsIGZvcm1hdD1Ob25lLCByb290ZnNfZGlyPU5vbmUpOgorICAgIGlmIHJvb3Rmc19kaXIgaXMgTm9uZToKKyAgICAgICAgc2RrX291dHB1dCA9IGQuZ2V0VmFyKCdTREtfT1VUUFVUJywgVHJ1ZSkKKyAgICAgICAgdGFyZ2V0X3BhdGggPSBkLmdldFZhcignU0RLVEFSR0VUU1lTUk9PVCcsIFRydWUpLnN0cmlwKCcvJykKKworICAgICAgICByb290ZnNfZGlyID0gW3Nka19vdXRwdXQsIG9zLnBhdGguam9pbihzZGtfb3V0cHV0LCB0YXJnZXRfcGF0aCldW3RhcmdldCBpcyBUcnVlXQorCisgICAgaW1nX3R5cGUgPSBkLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpCisgICAgaWYgaW1nX3R5cGUgPT0gInJwbSI6CisgICAgICAgIGFyY2hfdmFyID0gWyJTREtfUEFDS0FHRV9BUkNIUyIsIE5vbmVdW3RhcmdldCBpcyBUcnVlXQorICAgICAgICBvc192YXIgPSBbIlNES19PUyIsIE5vbmVdW3RhcmdldCBpcyBUcnVlXQorICAgICAgICByZXR1cm4gUnBtUGtnc0xpc3QoZCwgcm9vdGZzX2RpciwgYXJjaF92YXIsIG9zX3ZhcikubGlzdChmb3JtYXQpCisgICAgZWxpZiBpbWdfdHlwZSA9PSAiaXBrIjoKKyAgICAgICAgY29uZl9maWxlX3ZhciA9IFsiSVBLR0NPTkZfU0RLIiwgIklQS0dDT05GX1RBUkdFVCJdW3RhcmdldCBpcyBUcnVlXQorICAgICAgICByZXR1cm4gT3BrZ1BrZ3NMaXN0KGQsIHJvb3Rmc19kaXIsIGQuZ2V0VmFyKGNvbmZfZmlsZV92YXIsIFRydWUpKS5saXN0KGZvcm1hdCkKKyAgICBlbGlmIGltZ190eXBlID09ICJkZWIiOgorICAgICAgICByZXR1cm4gRHBrZ1BrZ3NMaXN0KGQsIHJvb3Rmc19kaXIpLmxpc3QoZm9ybWF0KQorCitkZWYgcG9wdWxhdGVfc2RrKGQsIG1hbmlmZXN0X2Rpcj1Ob25lKToKKyAgICBlbnZfYmtwID0gb3MuZW52aXJvbi5jb3B5KCkKKworICAgIGltZ190eXBlID0gZC5nZXRWYXIoJ0lNQUdFX1BLR1RZUEUnLCBUcnVlKQorICAgIGlmIGltZ190eXBlID09ICJycG0iOgorICAgICAgICBScG1TZGsoZCwgbWFuaWZlc3RfZGlyKS5wb3B1bGF0ZSgpCisgICAgZWxpZiBpbWdfdHlwZSA9PSAiaXBrIjoKKyAgICAgICAgT3BrZ1NkayhkLCBtYW5pZmVzdF9kaXIpLnBvcHVsYXRlKCkKKyAgICBlbGlmIGltZ190eXBlID09ICJkZWIiOgorICAgICAgICBEcGtnU2RrKGQsIG1hbmlmZXN0X2RpcikucG9wdWxhdGUoKQorCisgICAgb3MuZW52aXJvbi5jbGVhcigpCisgICAgb3MuZW52aXJvbi51cGRhdGUoZW52X2JrcCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBwYXNzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3NzdGF0ZXNpZy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2Uvc3N0YXRlc2lnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNDY3MTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3NzdGF0ZXNpZy5weQpAQCAtMCwwICsxLDI5MSBAQAoraW1wb3J0IGJiLnNpZ2dlbgorCitkZWYgc3N0YXRlX3J1bmRlcGZpbHRlcihzaWdnZW4sIGZuLCByZWNpcGVuYW1lLCB0YXNrLCBkZXAsIGRlcG5hbWUsIGRhdGFDYWNoZSk6CisgICAgIyBSZXR1cm4gVHJ1ZSBpZiB3ZSBzaG91bGQga2VlcCB0aGUgZGVwZW5kZW5jeSwgRmFsc2UgdG8gZHJvcCBpdAorICAgIGRlZiBpc05hdGl2ZSh4KToKKyAgICAgICAgcmV0dXJuIHguZW5kc3dpdGgoIi1uYXRpdmUiKQorICAgIGRlZiBpc0Nyb3NzKHgpOgorICAgICAgICByZXR1cm4gIi1jcm9zcy0iIGluIHgKKyAgICBkZWYgaXNOYXRpdmVTREsoeCk6CisgICAgICAgIHJldHVybiB4LnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKQorICAgIGRlZiBpc0tlcm5lbChmbik6CisgICAgICAgIGluaGVyaXRzID0gIiAiLmpvaW4oZGF0YUNhY2hlLmluaGVyaXRzW2ZuXSkKKyAgICAgICAgcmV0dXJuIGluaGVyaXRzLmZpbmQoIi9tb2R1bGUtYmFzZS5iYmNsYXNzIikgIT0gLTEgb3IgaW5oZXJpdHMuZmluZCgiL2xpbnV4LWtlcm5lbC1iYXNlLmJiY2xhc3MiKSAhPSAtMQorICAgIGRlZiBpc1BhY2thZ2VHcm91cChmbik6CisgICAgICAgIGluaGVyaXRzID0gIiAiLmpvaW4oZGF0YUNhY2hlLmluaGVyaXRzW2ZuXSkKKyAgICAgICAgcmV0dXJuICIvcGFja2FnZWdyb3VwLmJiY2xhc3MiIGluIGluaGVyaXRzCisgICAgZGVmIGlzQWxsQXJjaChmbik6CisgICAgICAgIGluaGVyaXRzID0gIiAiLmpvaW4oZGF0YUNhY2hlLmluaGVyaXRzW2ZuXSkKKyAgICAgICAgcmV0dXJuICIvYWxsYXJjaC5iYmNsYXNzIiBpbiBpbmhlcml0cworICAgIGRlZiBpc0ltYWdlKGZuKToKKyAgICAgICAgcmV0dXJuICIvaW1hZ2UuYmJjbGFzcyIgaW4gIiAiLmpvaW4oZGF0YUNhY2hlLmluaGVyaXRzW2ZuXSkKKworICAgICMgQWx3YXlzIGluY2x1ZGUgb3VyIG93biBpbnRlci10YXNrIGRlcGVuZGVuY2llcworICAgIGlmIHJlY2lwZW5hbWUgPT0gZGVwbmFtZToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgUXVpbHQgKHBhdGNoIGFwcGxpY2F0aW9uKSBjaGFuZ2luZyBpc24ndCBsaWtlbHkgdG8gYWZmZWN0IGFueXRoaW5nCisgICAgZXhjbHVkZWxpc3QgPSBbJ3F1aWx0LW5hdGl2ZScsICdzdWJ2ZXJzaW9uLW5hdGl2ZScsICdnaXQtbmF0aXZlJ10KKyAgICBpZiBkZXBuYW1lIGluIGV4Y2x1ZGVsaXN0IGFuZCByZWNpcGVuYW1lICE9IGRlcG5hbWU6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIyBFeGNsdWRlIHdlbGwgZGVmaW5lZCByZWNpcGUtPmRlcGVuZGVuY3kKKyAgICBpZiAiJXMtPiVzIiAlIChyZWNpcGVuYW1lLCBkZXBuYW1lKSBpbiBzaWdnZW4uc2FmZXJlY2lwZWRlcHM6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIyBEb24ndCBjaGFuZ2UgbmF0aXZlL2Nyb3NzL25hdGl2ZXNkayByZWNpcGUgZGVwZW5kZW5jaWVzIGFueSBmdXJ0aGVyCisgICAgaWYgaXNOYXRpdmUocmVjaXBlbmFtZSkgb3IgaXNDcm9zcyhyZWNpcGVuYW1lKSBvciBpc05hdGl2ZVNESyhyZWNpcGVuYW1lKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgT25seSB0YXJnZXQgcGFja2FnZXMgYmV5b25kIGhlcmUKKworICAgICMgYWxsYXJjaCBwYWNrYWdlZ3JvdXBzIGFyZSBhc3N1bWVkIHRvIGhhdmUgd2VsbCBiZWhhdmVkIG5hbWVzIHdoaWNoIGRvbid0IGNoYW5nZSBiZXR3ZWVuIGFyY2hpdGVjdXJlcy90dW5lcworICAgIGlmIGlzUGFja2FnZUdyb3VwKGZuKSBhbmQgaXNBbGxBcmNoKGZuKToKKyAgICAgICAgcmV0dXJuIEZhbHNlICAKKworICAgICMgRXhjbHVkZSB3ZWxsIGRlZmluZWQgbWFjaGluZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB3aGljaCBkb24ndCBjaGFuZ2UgQUJJCisgICAgaWYgZGVwbmFtZSBpbiBzaWdnZW4uYWJpc2FmZXJlY2lwZXMgYW5kIG5vdCBpc0ltYWdlKGZuKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAjIEtlcm5lbCBtb2R1bGVzIGFyZSB3ZWxsIG5hbWVzcGFjZWQuIFdlIGRvbid0IHdhbnQgdG8gZGVwZW5kIG9uIHRoZSBrZXJuZWwncyBjaGVja3N1bQorICAgICMgaWYgd2UncmUganVzdCBkb2luZyBhbiBSUkVDT01NRU5EU194eHggPSAia2VybmVsLW1vZHVsZS0qIiwgbm90IGxlYXN0IGJlY2F1c2UgdGhlIGNoZWNrc3VtCisgICAgIyBpcyBtYWNoaW5lIHNwZWNpZmljLgorICAgICMgVGhlcmVmb3JlIGlmIHdlJ3JlIG5vdCBhIGtlcm5lbCBvciBhIG1vZHVsZSByZWNpcGUgKGluaGVyaXRpbmcgdGhlIGtlcm5lbCBjbGFzc2VzKQorICAgICMgYW5kIHdlIHJlY2NvbWVuZCBhIGtlcm5lbC1tb2R1bGUsIHdlIGV4Y2x1ZGUgdGhlIGRlcGVuZGVuY3kuCisgICAgZGVwZm4gPSBkZXAucnNwbGl0KCIuIiwgMSlbMF0KKyAgICBpZiBkYXRhQ2FjaGUgYW5kIGlzS2VybmVsKGRlcGZuKSBhbmQgbm90IGlzS2VybmVsKGZuKToKKyAgICAgICAgZm9yIHBrZyBpbiBkYXRhQ2FjaGUucnVucmVjc1tmbl06CisgICAgICAgICAgICBpZiAiICIuam9pbihkYXRhQ2FjaGUucnVucmVjc1tmbl1bcGtnXSkuZmluZCgia2VybmVsLW1vZHVsZS0iKSAhPSAtMToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMgRGVmYXVsdCB0byBrZWVwIGRlcGVuZGVuY2llcworICAgIHJldHVybiBUcnVlCisKK2RlZiBzc3RhdGVfbG9ja2Vkc2lncyhkKToKKyAgICBzaWdzID0ge30KKyAgICB0eXBlcyA9IChkLmdldFZhcigiU0lHR0VOX0xPQ0tFRFNJR1NfVFlQRVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGZvciB0IGluIHR5cGVzOgorICAgICAgICBsb2NrZWRzaWdzID0gKGQuZ2V0VmFyKCJTSUdHRU5fTE9DS0VEU0lHU18lcyIgJSB0LCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBmb3IgbHMgaW4gbG9ja2Vkc2lnczoKKyAgICAgICAgICAgIHBuLCB0YXNrLCBoID0gbHMuc3BsaXQoIjoiLCAyKQorICAgICAgICAgICAgaWYgcG4gbm90IGluIHNpZ3M6CisgICAgICAgICAgICAgICAgc2lnc1twbl0gPSB7fQorICAgICAgICAgICAgc2lnc1twbl1bdGFza10gPSBoCisgICAgcmV0dXJuIHNpZ3MKKworY2xhc3MgU2lnbmF0dXJlR2VuZXJhdG9yT0VCYXNpYyhiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWMpOgorICAgIG5hbWUgPSAiT0VCYXNpYyIKKyAgICBkZWYgaW5pdF9ydW5kZXBjaGVjayhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5hYmlzYWZlcmVjaXBlcyA9IChkYXRhLmdldFZhcigiU0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkUiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBzZWxmLnNhZmVyZWNpcGVkZXBzID0gKGRhdGEuZ2V0VmFyKCJTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgcGFzcworICAgIGRlZiBydW5kZXBfY2hlY2soc2VsZiwgZm4sIHJlY2lwZW5hbWUsIHRhc2ssIGRlcCwgZGVwbmFtZSwgZGF0YUNhY2hlID0gTm9uZSk6CisgICAgICAgIHJldHVybiBzc3RhdGVfcnVuZGVwZmlsdGVyKHNlbGYsIGZuLCByZWNpcGVuYW1lLCB0YXNrLCBkZXAsIGRlcG5hbWUsIGRhdGFDYWNoZSkKKworY2xhc3MgU2lnbmF0dXJlR2VuZXJhdG9yT0VCYXNpY0hhc2goYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvckJhc2ljSGFzaCk6CisgICAgbmFtZSA9ICJPRUJhc2ljSGFzaCIKKyAgICBkZWYgaW5pdF9ydW5kZXBjaGVjayhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5hYmlzYWZlcmVjaXBlcyA9IChkYXRhLmdldFZhcigiU0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkUiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBzZWxmLnNhZmVyZWNpcGVkZXBzID0gKGRhdGEuZ2V0VmFyKCJTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgc2VsZi5sb2NrZWRzaWdzID0gc3N0YXRlX2xvY2tlZHNpZ3MoZGF0YSkKKyAgICAgICAgc2VsZi5sb2NrZWRoYXNoZXMgPSB7fQorICAgICAgICBzZWxmLmxvY2tlZHBubWFwID0ge30KKyAgICAgICAgc2VsZi5sb2NrZWRoYXNoZm4gPSB7fQorICAgICAgICBzZWxmLm1hY2hpbmUgPSBkYXRhLmdldFZhcigiTUFDSElORSIsIFRydWUpCisgICAgICAgIHNlbGYubWlzbWF0Y2hfbXNncyA9IFtdCisgICAgICAgIHBhc3MKKyAgICBkZWYgcnVuZGVwX2NoZWNrKHNlbGYsIGZuLCByZWNpcGVuYW1lLCB0YXNrLCBkZXAsIGRlcG5hbWUsIGRhdGFDYWNoZSA9IE5vbmUpOgorICAgICAgICByZXR1cm4gc3N0YXRlX3J1bmRlcGZpbHRlcihzZWxmLCBmbiwgcmVjaXBlbmFtZSwgdGFzaywgZGVwLCBkZXBuYW1lLCBkYXRhQ2FjaGUpCisKKyAgICBkZWYgZ2V0X3Rhc2tkYXRhKHNlbGYpOgorICAgICAgICBkYXRhID0gc3VwZXIoYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvckJhc2ljSGFzaCwgc2VsZikuZ2V0X3Rhc2tkYXRhKCkKKyAgICAgICAgcmV0dXJuIChkYXRhLCBzZWxmLmxvY2tlZHBubWFwLCBzZWxmLmxvY2tlZGhhc2hmbikKKworICAgIGRlZiBzZXRfdGFza2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIGNvcmVkYXRhLCBzZWxmLmxvY2tlZHBubWFwLCBzZWxmLmxvY2tlZGhhc2hmbiA9IGRhdGEKKyAgICAgICAgc3VwZXIoYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvckJhc2ljSGFzaCwgc2VsZikuc2V0X3Rhc2tkYXRhKGNvcmVkYXRhKQorCisgICAgZGVmIGR1bXBfc2lncyhzZWxmLCBkYXRhQ2FjaGUsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLmR1bXBfbG9ja2Vkc2lncygpCisgICAgICAgIHJldHVybiBzdXBlcihiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWNIYXNoLCBzZWxmKS5kdW1wX3NpZ3MoZGF0YUNhY2hlLCBvcHRpb25zKQorCisgICAgZGVmIGdldF90YXNraGFzaChzZWxmLCBmbiwgdGFzaywgZGVwcywgZGF0YUNhY2hlKToKKyAgICAgICAgaCA9IHN1cGVyKGJiLnNpZ2dlbi5TaWduYXR1cmVHZW5lcmF0b3JCYXNpY0hhc2gsIHNlbGYpLmdldF90YXNraGFzaChmbiwgdGFzaywgZGVwcywgZGF0YUNhY2hlKQorCisgICAgICAgIHJlY2lwZW5hbWUgPSBkYXRhQ2FjaGUucGtnX2ZuW2ZuXQorICAgICAgICBzZWxmLmxvY2tlZHBubWFwW2ZuXSA9IHJlY2lwZW5hbWUKKyAgICAgICAgc2VsZi5sb2NrZWRoYXNoZm5bZm5dID0gZGF0YUNhY2hlLmhhc2hmbltmbl0KKyAgICAgICAgaWYgcmVjaXBlbmFtZSBpbiBzZWxmLmxvY2tlZHNpZ3M6CisgICAgICAgICAgICBpZiB0YXNrIGluIHNlbGYubG9ja2Vkc2lnc1tyZWNpcGVuYW1lXToKKyAgICAgICAgICAgICAgICBrID0gZm4gKyAiLiIgKyB0YXNrCisgICAgICAgICAgICAgICAgaF9sb2NrZWQgPSBzZWxmLmxvY2tlZHNpZ3NbcmVjaXBlbmFtZV1bdGFza10KKyAgICAgICAgICAgICAgICBzZWxmLmxvY2tlZGhhc2hlc1trXSA9IGhfbG9ja2VkCisgICAgICAgICAgICAgICAgc2VsZi50YXNraGFzaFtrXSA9IGhfbG9ja2VkCisgICAgICAgICAgICAgICAgI2JiLndhcm4oIlVzaW5nICVzICVzICVzIiAlIChyZWNpcGVuYW1lLCB0YXNrLCBoKSkKKworICAgICAgICAgICAgICAgIGlmIGggIT0gaF9sb2NrZWQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubWlzbWF0Y2hfbXNncy5hcHBlbmQoJ1RoZSAlczolcyBzaWcgKCVzKSBjaGFuZ2VkLCB1c2UgbG9ja2VkIHNpZyAlcyB0byBpbnN0ZWFkJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocmVjaXBlbmFtZSwgdGFzaywgaCwgaF9sb2NrZWQpKQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGhfbG9ja2VkCisgICAgICAgICNiYi53YXJuKCIlcyAlcyAlcyIgJSAocmVjaXBlbmFtZSwgdGFzaywgaCkpCisgICAgICAgIHJldHVybiBoCisKKyAgICBkZWYgZHVtcF9zaWd0YXNrKHNlbGYsIGZuLCB0YXNrLCBzdGFtcGJhc2UsIHJ1bnRpbWUpOgorICAgICAgICBrID0gZm4gKyAiLiIgKyB0YXNrCisgICAgICAgIGlmIGsgaW4gc2VsZi5sb2NrZWRoYXNoZXM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc3VwZXIoYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvckJhc2ljSGFzaCwgc2VsZikuZHVtcF9zaWd0YXNrKGZuLCB0YXNrLCBzdGFtcGJhc2UsIHJ1bnRpbWUpCisKKyAgICBkZWYgZHVtcF9sb2NrZWRzaWdzKHNlbGYsIHNpZ2ZpbGU9Tm9uZSwgdGFza2ZpbHRlcj1Ob25lKToKKyAgICAgICAgaWYgbm90IHNpZ2ZpbGU6CisgICAgICAgICAgICBzaWdmaWxlID0gb3MuZ2V0Y3dkKCkgKyAiL2xvY2tlZC1zaWdzLmluYyIKKworICAgICAgICBiYi5wbGFpbigiV3JpdGluZyBsb2NrZWQgc2lncyB0byAlcyIgJSBzaWdmaWxlKQorICAgICAgICB0eXBlcyA9IHt9CisgICAgICAgIGZvciBrIGluIHNlbGYucnVudGFza2RlcHM6CisgICAgICAgICAgICBpZiB0YXNrZmlsdGVyOgorICAgICAgICAgICAgICAgIGlmIG5vdCBrIGluIHRhc2tmaWx0ZXI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmbiA9IGsucnNwbGl0KCIuIiwxKVswXQorICAgICAgICAgICAgdCA9IHNlbGYubG9ja2VkaGFzaGZuW2ZuXS5zcGxpdCgiICIpWzFdLnNwbGl0KCI6IilbNV0KKyAgICAgICAgICAgIHQgPSAndC0nICsgdC5yZXBsYWNlKCdfJywgJy0nKQorICAgICAgICAgICAgaWYgdCBub3QgaW4gdHlwZXM6CisgICAgICAgICAgICAgICAgdHlwZXNbdF0gPSBbXQorICAgICAgICAgICAgdHlwZXNbdF0uYXBwZW5kKGspCisKKyAgICAgICAgd2l0aCBvcGVuKHNpZ2ZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGZvciB0IGluIHR5cGVzOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ1NJR0dFTl9MT0NLRURTSUdTXyVzID0gIlxcXG4nICUgdCkKKyAgICAgICAgICAgICAgICB0eXBlc1t0XS5zb3J0KCkKKyAgICAgICAgICAgICAgICBzb3J0ZWRrID0gc29ydGVkKHR5cGVzW3RdLCBrZXk9bGFtYmRhIGs6IHNlbGYubG9ja2VkcG5tYXBbay5yc3BsaXQoIi4iLDEpWzBdXSkKKyAgICAgICAgICAgICAgICBmb3IgayBpbiBzb3J0ZWRrOgorICAgICAgICAgICAgICAgICAgICBmbiA9IGsucnNwbGl0KCIuIiwxKVswXQorICAgICAgICAgICAgICAgICAgICB0YXNrID0gay5yc3BsaXQoIi4iLDEpWzFdCisgICAgICAgICAgICAgICAgICAgIGlmIGsgbm90IGluIHNlbGYudGFza2hhc2g6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIgICAgIiArIHNlbGYubG9ja2VkcG5tYXBbZm5dICsgIjoiICsgdGFzayArICI6IiArIHNlbGYudGFza2hhc2hba10gKyAiIFxcXG4iKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJyAgICAiXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnU0lHR0VOX0xPQ0tFRFNJR1NfVFlQRVNfJXMgPSAiJXMiJyAlIChzZWxmLm1hY2hpbmUsICIgIi5qb2luKHR5cGVzLmtleXMoKSkpKQorCisgICAgZGVmIGNoZWNraGFzaGVzKHNlbGYsIG1pc3NlZCwgcmV0LCBzcV9mbiwgc3FfdGFzaywgc3FfaGFzaCwgc3FfaGFzaGZuLCBkKToKKyAgICAgICAgY2hlY2tsZXZlbCA9IGQuZ2V0VmFyKCJTSUdHRU5fTE9DS0VEU0lHU19DSEVDS19MRVZFTCIsIFRydWUpCisgICAgICAgIGZvciB0YXNrIGluIHJhbmdlKGxlbihzcV9mbikpOgorICAgICAgICAgICAgaWYgdGFzayBub3QgaW4gcmV0OgorICAgICAgICAgICAgICAgIGZvciBwbiBpbiBzZWxmLmxvY2tlZHNpZ3M6CisgICAgICAgICAgICAgICAgICAgIGlmIHNxX2hhc2hbdGFza10gaW4gc2VsZi5sb2NrZWRzaWdzW3BuXS5pdGVydmFsdWVzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1pc21hdGNoX21zZ3MuYXBwZW5kKCJMb2NrZWQgc2lnIGlzIHNldCBmb3IgJXM6JXMgKCVzKSB5ZXQgbm90IGluIHNzdGF0ZSBjYWNoZT8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBuLCBzcV90YXNrW3Rhc2tdLCBzcV9oYXNoW3Rhc2tdKSkKKworICAgICAgICBpZiBzZWxmLm1pc21hdGNoX21zZ3MgYW5kIGNoZWNrbGV2ZWwgPT0gJ3dhcm4nOgorICAgICAgICAgICAgYmIud2FybigiXG4iLmpvaW4oc2VsZi5taXNtYXRjaF9tc2dzKSkKKyAgICAgICAgZWxpZiBzZWxmLm1pc21hdGNoX21zZ3MgYW5kIGNoZWNrbGV2ZWwgPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJcbiIuam9pbihzZWxmLm1pc21hdGNoX21zZ3MpKQorCisKKyMgSW5zZXJ0IHRoZXNlIGNsYXNzZXMgaW50byBzaWdnZW4ncyBuYW1lc3BhY2Ugc28gaXQgY2FuIHNlZSBhbmQgc2VsZWN0IHRoZW0KK2JiLnNpZ2dlbi5TaWduYXR1cmVHZW5lcmF0b3JPRUJhc2ljID0gU2lnbmF0dXJlR2VuZXJhdG9yT0VCYXNpYworYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvck9FQmFzaWNIYXNoID0gU2lnbmF0dXJlR2VuZXJhdG9yT0VCYXNpY0hhc2gKKworCitkZWYgZmluZF9zaWdpbmZvKHBuLCB0YXNrbmFtZSwgdGFza2hhc2hsaXN0LCBkKToKKyAgICAiIiIgRmluZCBzaWduYXR1cmUgZGF0YSBmaWxlcyBmb3IgY29tcGFyaXNvbiBwdXJwb3NlcyAiIiIKKworICAgIGltcG9ydCBmbm1hdGNoCisgICAgaW1wb3J0IGdsb2IKKworICAgIGlmIHRhc2toYXNobGlzdDoKKyAgICAgICAgaGFzaGZpbGVzID0ge30KKworICAgIGlmIG5vdCB0YXNrbmFtZToKKyAgICAgICAgIyBXZSBoYXZlIHRvIGRlcml2ZSBwbiBhbmQgdGFza25hbWUKKyAgICAgICAga2V5ID0gcG4KKyAgICAgICAgc3BsaXRpdCA9IGtleS5zcGxpdCgnLmJiLicpCisgICAgICAgIHRhc2tuYW1lID0gc3BsaXRpdFsxXQorICAgICAgICBwbiA9IG9zLnBhdGguYmFzZW5hbWUoc3BsaXRpdFswXSkuc3BsaXQoJ18nKVswXQorICAgICAgICBpZiBrZXkuc3RhcnRzd2l0aCgndmlydHVhbDpuYXRpdmU6Jyk6CisgICAgICAgICAgICBwbiA9IHBuICsgJy1uYXRpdmUnCisKKyAgICBmaWxlZGF0ZXMgPSB7fQorCisgICAgIyBGaXJzdCBzZWFyY2ggaW4gc3RhbXBzIGRpcgorICAgIGxvY2FsZGF0YSA9IGQuY3JlYXRlQ29weSgpCisgICAgbG9jYWxkYXRhLnNldFZhcignTVVMVElNQUNIX1RBUkdFVF9TWVMnLCAnKicpCisgICAgbG9jYWxkYXRhLnNldFZhcignUE4nLCBwbikKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdQVicsICcqJykKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdQUicsICcqJykKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdFWFRFTkRQRScsICcnKQorICAgIHN0YW1wID0gbG9jYWxkYXRhLmdldFZhcignU1RBTVAnLCBUcnVlKQorICAgIGZpbGVzcGVjID0gJyVzLiVzLnNpZ2RhdGEuKicgJSAoc3RhbXAsIHRhc2tuYW1lKQorICAgIGZvdW5kYWxsID0gRmFsc2UKKyAgICBpbXBvcnQgZ2xvYgorICAgIGZvciBmdWxscGF0aCBpbiBnbG9iLmdsb2IoZmlsZXNwZWMpOgorICAgICAgICBtYXRjaCA9IEZhbHNlCisgICAgICAgIGlmIHRhc2toYXNobGlzdDoKKyAgICAgICAgICAgIGZvciB0YXNraGFzaCBpbiB0YXNraGFzaGxpc3Q6CisgICAgICAgICAgICAgICAgaWYgZnVsbHBhdGguZW5kc3dpdGgoJy4lcycgJSB0YXNraGFzaCk6CisgICAgICAgICAgICAgICAgICAgIGhhc2hmaWxlc1t0YXNraGFzaF0gPSBmdWxscGF0aAorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oaGFzaGZpbGVzKSA9PSBsZW4odGFza2hhc2hsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kYWxsID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmaWxlZGF0ZXNbZnVsbHBhdGhdID0gb3Muc3RhdChmdWxscGF0aCkuc3RfbXRpbWUKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICBpZiBub3QgdGFza2hhc2hsaXN0IG9yIChsZW4oZmlsZWRhdGVzKSA8IDIgYW5kIG5vdCBmb3VuZGFsbCk6CisgICAgICAgICMgVGhhdCBkaWRuJ3Qgd29yaywgbG9vayBpbiBzc3RhdGUtY2FjaGUKKyAgICAgICAgaGFzaGVzID0gdGFza2hhc2hsaXN0IG9yIFsnKiddCisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBmb3IgaGFzaHZhbCBpbiBoYXNoZXM6CisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCAnKicpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdUQVJHRVRfVkVORE9SJywgJyonKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignVEFSR0VUX09TJywgJyonKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUE4nLCBwbikKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BWJywgJyonKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUFInLCAnKicpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdCQl9UQVNLSEFTSCcsIGhhc2h2YWwpCisgICAgICAgICAgICBzd3NwZWMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdTU1RBVEVfU1dTUEVDJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIHRhc2tuYW1lIGluIFsnZG9fZmV0Y2gnLCAnZG9fdW5wYWNrJywgJ2RvX3BhdGNoJywgJ2RvX3BvcHVsYXRlX2xpYycsICdkb19wcmVjb25maWd1cmUnXSBhbmQgc3dzcGVjOgorICAgICAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1NTVEFURV9QS0dTUEVDJywgJyR7U1NUQVRFX1NXU1BFQ30nKQorICAgICAgICAgICAgZWxpZiBwbi5lbmRzd2l0aCgnLW5hdGl2ZScpIG9yICItY3Jvc3MtIiBpbiBwbiBvciAiLWNyb3Nzc2RrLSIgaW4gcG46CisgICAgICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignU1NUQVRFX0VYVFJBUEFUSCcsICIke05BVElWRUxTQlNUUklOR30vIikKKyAgICAgICAgICAgIHNzdGF0ZW5hbWUgPSB0YXNrbmFtZVszOl0KKyAgICAgICAgICAgIGZpbGVzcGVjID0gJyVzXyVzLiouc2lnaW5mbycgJSAobG9jYWxkYXRhLmdldFZhcignU1NUQVRFX1BLRycsIFRydWUpLCBzc3RhdGVuYW1lKQorCisgICAgICAgICAgICBpZiBoYXNodmFsICE9ICcqJzoKKyAgICAgICAgICAgICAgICBzc3RhdGVkaXIgPSAiJXMvJXMiICUgKGQuZ2V0VmFyKCdTU1RBVEVfRElSJywgVHJ1ZSksIGhhc2h2YWxbOjJdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzc3RhdGVkaXIgPSBkLmdldFZhcignU1NUQVRFX0RJUicsIFRydWUpCisKKyAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNzdGF0ZWRpcik6CisgICAgICAgICAgICAgICAgZm9yIGZuIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmbikKKyAgICAgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoKGZ1bGxwYXRoLCBmaWxlc3BlYyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0YXNraGFzaGxpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGZpbGVzW2hhc2h2YWxdID0gZnVsbHBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlZGF0ZXNbZnVsbHBhdGhdID0gb3Muc3RhdChmdWxscGF0aCkuc3RfbXRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICBpZiB0YXNraGFzaGxpc3Q6CisgICAgICAgIHJldHVybiBoYXNoZmlsZXMKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gZmlsZWRhdGVzCisKK2JiLnNpZ2dlbi5maW5kX3NpZ2luZm8gPSBmaW5kX3NpZ2luZm8KKworCitkZWYgc3N0YXRlX2dldF9tYW5pZmVzdF9maWxlbmFtZSh0YXNrLCBkKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIHNzdGF0ZSBtYW5pZmVzdCBmaWxlIHBhdGggZm9yIGEgcGFydGljdWxhciB0YXNrLgorICAgIEFsc28gcmV0dXJucyB0aGUgZGF0YXN0b3JlIHRoYXQgY2FuIGJlIHVzZWQgdG8gcXVlcnkgcmVsYXRlZCB2YXJpYWJsZXMuCisgICAgIiIiCisgICAgZDIgPSBkLmNyZWF0ZUNvcHkoKQorICAgIGV4dHJhaW5mID0gZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3N0YW1wLWV4dHJhLWluZm8nLCBUcnVlKQorICAgIGlmIGV4dHJhaW5mOgorICAgICAgICBkMi5zZXRWYXIoIlNTVEFURV9NQU5NQUNIIiwgZXh0cmFpbmYpCisgICAgcmV0dXJuIChkMi5leHBhbmQoIiR7U1NUQVRFX01BTkZJTEVQUkVGSVh9LiVzIiAlIHRhc2spLCBkMikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdGVybWluYWwucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlcm1pbmFsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYTg5MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlcm1pbmFsLnB5CkBAIC0wLDAgKzEsMjYzIEBACitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9lLmNsYXNzdXRpbHMKK2ltcG9ydCBzaGxleAorZnJvbSBiYi5wcm9jZXNzIGltcG9ydCBQb3BlbiwgRXhlY3V0aW9uRXJyb3IKK2Zyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IExvb3NlVmVyc2lvbgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5PRS5UZXJtaW5hbCcpCisKKworY2xhc3MgVW5zdXBwb3J0ZWRUZXJtaW5hbChFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgTm9TdXBwb3J0ZWRUZXJtaW5hbHMoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgUmVnaXN0cnkob2UuY2xhc3N1dGlscy5DbGFzc1JlZ2lzdHJ5KToKKyAgICBjb21tYW5kID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGF0dHJzKToKKyAgICAgICAgc3VwZXIoUmVnaXN0cnksIGNscykuX19pbml0X18obmFtZS5sb3dlcigpLCBiYXNlcywgYXR0cnMpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaW1wbGVtZW50ZWQoY2xzKToKKyAgICAgICAgcmV0dXJuIGJvb2woY2xzLmNvbW1hbmQpCisKKworY2xhc3MgVGVybWluYWwoUG9wZW4pOgorICAgIF9fbWV0YWNsYXNzX18gPSBSZWdpc3RyeQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgICAgIGZtdF9zaF9jbWQgPSBzZWxmLmZvcm1hdF9jb21tYW5kKHNoX2NtZCwgdGl0bGUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIFBvcGVuLl9faW5pdF9fKHNlbGYsIGZtdF9zaF9jbWQsIGVudj1lbnYpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGltcG9ydCBlcnJubworICAgICAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZFRlcm1pbmFsKHNlbGYubmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBmb3JtYXRfY29tbWFuZChzZWxmLCBzaF9jbWQsIHRpdGxlKToKKyAgICAgICAgZm10ID0geyd0aXRsZSc6IHRpdGxlIG9yICdUZXJtaW5hbCcsICdjb21tYW5kJzogc2hfY21kfQorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuY29tbWFuZCwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICByZXR1cm4gc2hsZXguc3BsaXQoc2VsZi5jb21tYW5kLmZvcm1hdCgqKmZtdCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gW2VsZW1lbnQuZm9ybWF0KCoqZm10KSBmb3IgZWxlbWVudCBpbiBzZWxmLmNvbW1hbmRdCisKK2NsYXNzIFhUZXJtaW5hbChUZXJtaW5hbCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgICAgIFRlcm1pbmFsLl9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGUsIGVudiwgZCkKKyAgICAgICAgaWYgbm90IG9zLmVudmlyb24uZ2V0KCdESVNQTEFZJyk6CisgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZFRlcm1pbmFsKHNlbGYubmFtZSkKKworY2xhc3MgR25vbWUoWFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ2dub21lLXRlcm1pbmFsIC10ICJ7dGl0bGV9IiAtLWRpc2FibGUtZmFjdG9yeSAteCB7Y29tbWFuZH0nCisgICAgcHJpb3JpdHkgPSAyCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgIyBSZWNlbnQgdmVyc2lvbnMgb2YgZ25vbWUtdGVybWluYWwgZG9lcyBub3Qgc3VwcG9ydCBub24tVVRGOCBjaGFyc2V0OgorICAgICAgICAjIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzIxMjc7IGFzIGEgd29ya2Fyb3VuZCwKKyAgICAgICAgIyBjbGVhcmluZyB0aGUgTENfQUxMIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIGl0IHVzZXMgdGhlIGxvY2FsZS4KKyAgICAgICAgIyBPbmNlIGZpeGVkIG9uIHRoZSBnbm9tZS10ZXJtaW5hbCBwcm9qZWN0LCB0aGlzIHNob3VsZCBiZSByZW1vdmVkLgorICAgICAgICBpZiBvcy5nZXRlbnYoJ0xDX0FMTCcpOiBvcy5wdXRlbnYoJ0xDX0FMTCcsJycpCisKKyAgICAgICAgIyBDaGVjayB2ZXJzaW9uCisgICAgICAgIHZlcm51bSA9IGNoZWNrX3Rlcm1pbmFsX3ZlcnNpb24oImdub21lLXRlcm1pbmFsIikKKyAgICAgICAgaWYgdmVybnVtIGFuZCBMb29zZVZlcnNpb24odmVybnVtKSA+PSAnMy4xMCc6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgJ0dub21lLVRlcm1pbmFsIDMuMTAgb3IgbGF0ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLWRpc2FibGUtZmFjdG9yeScpCisgICAgICAgICAgICBzZWxmLmNvbW1hbmQgPSAnZ25vbWUtdGVybWluYWwgLXQgInt0aXRsZX0iIC14IHtjb21tYW5kfScKKyAgICAgICAgWFRlcm1pbmFsLl9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGUsIGVudiwgZCkKKworY2xhc3MgTWF0ZShYVGVybWluYWwpOgorICAgIGNvbW1hbmQgPSAnbWF0ZS10ZXJtaW5hbCAtdCAie3RpdGxlfSIgLXgge2NvbW1hbmR9JworICAgIHByaW9yaXR5ID0gMgorCitjbGFzcyBYZmNlKFhUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICd4ZmNlNC10ZXJtaW5hbCAtVCAie3RpdGxlfSIgLWUgIntjb21tYW5kfSInCisgICAgcHJpb3JpdHkgPSAyCisKK2NsYXNzIFRlcm1pbm9sb2d5KFhUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICd0ZXJtaW5vbG9neSAtVD0ie3RpdGxlfSIgLWUge2NvbW1hbmR9JworICAgIHByaW9yaXR5ID0gMgorCitjbGFzcyBLb25zb2xlKFhUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICdrb25zb2xlIC0tbm9mb3JrIC1wIHRhYnRpdGxlPSJ7dGl0bGV9IiAtZSB7Y29tbWFuZH0nCisgICAgcHJpb3JpdHkgPSAyCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgIyBDaGVjayB2ZXJzaW9uCisgICAgICAgIHZlcm51bSA9IGNoZWNrX3Rlcm1pbmFsX3ZlcnNpb24oImtvbnNvbGUiKQorICAgICAgICBpZiB2ZXJudW0gYW5kIExvb3NlVmVyc2lvbih2ZXJudW0pIDwgJzIuMC4wJzoKKyAgICAgICAgICAgICMgS29uc29sZSBmcm9tIEtERSAzLngKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZCA9ICdrb25zb2xlIC1UICJ7dGl0bGV9IiAtZSB7Y29tbWFuZH0nCisgICAgICAgIFhUZXJtaW5hbC5fX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisKK2NsYXNzIFhUZXJtKFhUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICd4dGVybSAtVCAie3RpdGxlfSIgLWUge2NvbW1hbmR9JworICAgIHByaW9yaXR5ID0gMQorCitjbGFzcyBSeHZ0KFhUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICdyeHZ0IC1UICJ7dGl0bGV9IiAtZSB7Y29tbWFuZH0nCisgICAgcHJpb3JpdHkgPSAxCisKK2NsYXNzIFNjcmVlbihUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICdzY3JlZW4gLUQgLW0gLXQgInt0aXRsZX0iIC1TIGRldnNoZWxsIHtjb21tYW5kfScKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgorICAgICAgICBzX2lkID0gImRldnNoZWxsXyVpIiAlIG9zLmdldHBpZCgpCisgICAgICAgIHNlbGYuY29tbWFuZCA9ICJzY3JlZW4gLUQgLW0gLXQgXCJ7dGl0bGV9XCIgLVMgJXMge2NvbW1hbmR9IiAlIHNfaWQKKyAgICAgICAgVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorICAgICAgICBtc2cgPSAnU2NyZWVuIHN0YXJ0ZWQuIFBsZWFzZSBjb25uZWN0IGluIGFub3RoZXIgdGVybWluYWwgd2l0aCAnIFwKKyAgICAgICAgICAgICcic2NyZWVuIC1yICVzIicgJSBzX2lkCisgICAgICAgIGlmIChkKToKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTG9nRXhlY1RUWShtc2csICJzY3JlZW4gLXIgJXMiICUgc19pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjUsIDEwKSwgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKG1zZykKKworY2xhc3MgVG11eFJ1bm5pbmcoVGVybWluYWwpOgorICAgICIiIk9wZW4gYSBuZXcgcGFuZSBpbiB0aGUgY3VycmVudCBydW5uaW5nIHRtdXggd2luZG93IiIiCisgICAgbmFtZSA9ICd0bXV4LXJ1bm5pbmcnCisgICAgY29tbWFuZCA9ICd0bXV4IHNwbGl0LXdpbmRvdyAie2NvbW1hbmR9IicKKyAgICBwcmlvcml0eSA9IDIuNzUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgorICAgICAgICBpZiBub3QgYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICd0bXV4Jyk6CisgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZFRlcm1pbmFsKCd0bXV4IGlzIG5vdCBpbnN0YWxsZWQnKQorCisgICAgICAgIGlmIG5vdCBvcy5nZXRlbnYoJ1RNVVgnKToKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoJ3RtdXggaXMgbm90IHJ1bm5pbmcnKQorCisgICAgICAgIGlmIG5vdCBjaGVja190bXV4X3BhbmVfc2l6ZSgndG11eCcpOgorICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRUZXJtaW5hbCgndG11eCBwYW5lIHRvbyBzbWFsbCcpCisKKyAgICAgICAgVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorCitjbGFzcyBUbXV4TmV3V2luZG93KFRlcm1pbmFsKToKKyAgICAiIiJPcGVuIGEgbmV3IHdpbmRvdyBpbiB0aGUgY3VycmVudCBydW5uaW5nIHRtdXggc2Vzc2lvbiIiIgorICAgIG5hbWUgPSAndG11eC1uZXctd2luZG93JworICAgIGNvbW1hbmQgPSAndG11eCBuZXctd2luZG93IC1uICJ7dGl0bGV9IiAie2NvbW1hbmR9IicKKyAgICBwcmlvcml0eSA9IDIuNzAKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgorICAgICAgICBpZiBub3QgYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICd0bXV4Jyk6CisgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZFRlcm1pbmFsKCd0bXV4IGlzIG5vdCBpbnN0YWxsZWQnKQorCisgICAgICAgIGlmIG5vdCBvcy5nZXRlbnYoJ1RNVVgnKToKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoJ3RtdXggaXMgbm90IHJ1bm5pbmcnKQorCisgICAgICAgIFRlcm1pbmFsLl9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGUsIGVudiwgZCkKKworY2xhc3MgVG11eChUZXJtaW5hbCk6CisgICAgIiIiU3RhcnQgYSBuZXcgdG11eCBzZXNzaW9uIGFuZCB3aW5kb3ciIiIKKyAgICBjb21tYW5kID0gJ3RtdXggbmV3IC1kIC1zIGRldnNoZWxsIC1uIGRldnNoZWxsICJ7Y29tbWFuZH0iJworICAgIHByaW9yaXR5ID0gMC43NQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgJ3RtdXgnKToKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoJ3RtdXggaXMgbm90IGluc3RhbGxlZCcpCisKKyAgICAgICAgIyBUT0RPOiBjb25zaWRlciB1c2luZyBhICdkZXZzaGVsbCcgc2Vzc2lvbiBzaGFyZWQgYW1vbmdzdCBhbGwKKyAgICAgICAgIyBkZXZzaGVsbHMsIGlmIGl0J3MgYWxyZWFkeSB0aGVyZSwgYWRkIGEgbmV3IHdpbmRvdyB0byBpdC4KKyAgICAgICAgd2luZG93X25hbWUgPSAnZGV2c2hlbGwtJWknICUgb3MuZ2V0cGlkKCkKKworICAgICAgICBzZWxmLmNvbW1hbmQgPSAndG11eCBuZXcgLWQgLXMgezB9IC1uIHswfSAie3tjb21tYW5kfX0iJy5mb3JtYXQod2luZG93X25hbWUpCisgICAgICAgIFRlcm1pbmFsLl9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGUsIGVudiwgZCkKKworICAgICAgICBhdHRhY2hfY21kID0gJ3RtdXggYXR0IC10IHswfScuZm9ybWF0KHdpbmRvd19uYW1lKQorICAgICAgICBtc2cgPSAnVG11eCBzdGFydGVkLiBQbGVhc2UgY29ubmVjdCBpbiBhbm90aGVyIHRlcm1pbmFsIHdpdGggYHRtdXggYXR0IC10IHswfWAnLmZvcm1hdCh3aW5kb3dfbmFtZSkKKyAgICAgICAgaWYgZDoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTG9nRXhlY1RUWShtc2csIGF0dGFjaF9jbWQsIDAuNSwgMTApLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4obXNnKQorCitjbGFzcyBDdXN0b20oVGVybWluYWwpOgorICAgIGNvbW1hbmQgPSAnZmFsc2UnICMgVGhpcyBpcyBhIHBsYWNlaG9sZGVyCisgICAgcHJpb3JpdHkgPSAzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgc2VsZi5jb21tYW5kID0gZCBhbmQgZC5nZXRWYXIoJ09FX1RFUk1JTkFMX0NVU1RPTUNNRCcsIFRydWUpCisgICAgICAgIGlmIHNlbGYuY29tbWFuZDoKKyAgICAgICAgICAgIGlmIG5vdCAne2NvbW1hbmR9JyBpbiBzZWxmLmNvbW1hbmQ6CisgICAgICAgICAgICAgICAgc2VsZi5jb21tYW5kICs9ICcge2NvbW1hbmR9JworICAgICAgICAgICAgVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0N1c3RvbSB0ZXJtaW5hbCB3YXMgc3RhcnRlZC4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdObyBjdXN0b20gdGVybWluYWwgKE9FX1RFUk1JTkFMX0NVU1RPTUNNRCkgc2V0JykKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoJ09FX1RFUk1JTkFMX0NVU1RPTUNNRCBub3Qgc2V0JykKKworCitkZWYgcHJpb3JpdGl6ZWQoKToKKyAgICByZXR1cm4gUmVnaXN0cnkucHJpb3JpdGl6ZWQoKQorCitkZWYgc3Bhd25fcHJlZmVycmVkKHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgIiIiU3Bhd24gdGhlIGZpcnN0IHN1cHBvcnRlZCB0ZXJtaW5hbCwgYnkgcHJpb3JpdHkiIiIKKyAgICBmb3IgdGVybWluYWwgaW4gcHJpb3JpdGl6ZWQoKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3Bhd24odGVybWluYWwubmFtZSwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZXhjZXB0IFVuc3VwcG9ydGVkVGVybWluYWw6CisgICAgICAgICAgICBjb250aW51ZQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIE5vU3VwcG9ydGVkVGVybWluYWxzKCkKKworZGVmIHNwYXduKG5hbWUsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgIiIiU3Bhd24gdGhlIHNwZWNpZmllZCB0ZXJtaW5hbCwgYnkgbmFtZSIiIgorICAgIGxvZ2dlci5kZWJ1ZygxLCAnQXR0ZW1wdGluZyB0byBzcGF3biB0ZXJtaW5hbCAiJXMiJywgbmFtZSkKKyAgICB0cnk6CisgICAgICAgIHRlcm1pbmFsID0gUmVnaXN0cnkucmVnaXN0cnlbbmFtZV0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwobmFtZSkKKworICAgIHBpcGUgPSB0ZXJtaW5hbChzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisgICAgb3V0cHV0ID0gcGlwZS5jb21tdW5pY2F0ZSgpWzBdCisgICAgaWYgcGlwZS5yZXR1cm5jb2RlICE9IDA6CisgICAgICAgIHJhaXNlIEV4ZWN1dGlvbkVycm9yKHNoX2NtZCwgcGlwZS5yZXR1cm5jb2RlLCBvdXRwdXQpCisKK2RlZiBjaGVja190bXV4X3BhbmVfc2l6ZSh0bXV4KToKKyAgICBpbXBvcnQgc3VicHJvY2VzcyBhcyBzdWIKKyAgICB0cnk6CisgICAgICAgIHAgPSBzdWIuUG9wZW4oJyVzIGxpc3QtcGFuZXMgLUYgIiN7P3BhbmVfYWN0aXZlLCN7cGFuZV9oZWlnaHR9LH0iJyAlIHRtdXgsCisgICAgICAgICAgICAgICAgc2hlbGw9VHJ1ZSxzdGRvdXQ9c3ViLlBJUEUsc3RkZXJyPXN1Yi5QSVBFKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzaXplID0gaW50KG91dC5zdHJpcCgpKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UKKyAgICBpZiBzaXplLzIgPj0gMTk6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBjaGVja190ZXJtaW5hbF92ZXJzaW9uKHRlcm1pbmFsTmFtZSk6CisgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3ViCisgICAgdHJ5OgorICAgICAgICBwID0gc3ViLlBvcGVuKFsnc2gnLCAnLWMnLCAnJXMgLS12ZXJzaW9uJyAlIHRlcm1pbmFsTmFtZV0sc3Rkb3V0PXN1Yi5QSVBFLHN0ZGVycj1zdWIuUElQRSkKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgdmVyX2luZm8gPSBvdXQucnN0cmlwKCkuc3BsaXQoJ1xuJykKKyAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgIGltcG9ydCBlcnJubworICAgICAgICBpZiBleGMuZXJybm8gPT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlCisgICAgdmVybnVtID0gTm9uZQorICAgIGZvciB2ZXIgaW4gdmVyX2luZm86CisgICAgICAgIGlmIHZlci5zdGFydHN3aXRoKCdLb25zb2xlJyk6CisgICAgICAgICAgICB2ZXJudW0gPSB2ZXIuc3BsaXQoJyAnKVstMV0KKyAgICAgICAgaWYgdmVyLnN0YXJ0c3dpdGgoJ0dOT01FIFRlcm1pbmFsJyk6CisgICAgICAgICAgICB2ZXJudW0gPSB2ZXIuc3BsaXQoJyAnKVstMV0KKyAgICByZXR1cm4gdmVybnVtCisKK2RlZiBkaXN0cm9fbmFtZSgpOgorICAgIHRyeToKKyAgICAgICAgcCA9IFBvcGVuKFsnbHNiX3JlbGVhc2UnLCAnLWknXSkKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgZGlzdHJvID0gb3V0LnNwbGl0KCc6JylbMV0uc3RyaXAoKS5sb3dlcigpCisgICAgZXhjZXB0OgorICAgICAgICBkaXN0cm8gPSAidW5rbm93biIKKyAgICByZXR1cm4gZGlzdHJvCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X2xpY2Vuc2UucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfbGljZW5zZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzg4ODg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X2xpY2Vuc2UucHkKQEAgLTAsMCArMSw2OCBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb2UubGljZW5zZQorCitjbGFzcyBTZWVuVmlzaXRvcihvZS5saWNlbnNlLkxpY2Vuc2VWaXNpdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc2VlbiA9IFtdCisgICAgICAgIG9lLmxpY2Vuc2UuTGljZW5zZVZpc2l0b3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiB2aXNpdF9TdHIoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYuc2Vlbi5hcHBlbmQobm9kZS5zKQorCitjbGFzcyBUZXN0U2luZ2xlTGljZW5zZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbGljZW5zZXMgPSBbCisgICAgICAgICJHUEx2MiIsCisgICAgICAgICJMR1BMLTIuMCIsCisgICAgICAgICJBcnRpc3RpYyIsCisgICAgICAgICJNSVQiLAorICAgICAgICAiR1BMdjMrIiwKKyAgICAgICAgIkZPT19CQVIiLAorICAgIF0KKyAgICBpbnZhbGlkX2xpY2Vuc2VzID0gWyJHUEwvQlNEIl0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcGFyc2UobGljZW5zZXN0cik6CisgICAgICAgIHZpc2l0b3IgPSBTZWVuVmlzaXRvcigpCisgICAgICAgIHZpc2l0b3IudmlzaXRfc3RyaW5nKGxpY2Vuc2VzdHIpCisgICAgICAgIHJldHVybiB2aXNpdG9yLnNlZW4KKworICAgIGRlZiB0ZXN0X3NpbmdsZV9saWNlbnNlcyhzZWxmKToKKyAgICAgICAgZm9yIGxpY2Vuc2UgaW4gc2VsZi5saWNlbnNlczoKKyAgICAgICAgICAgIGxpY2Vuc2VzID0gc2VsZi5wYXJzZShsaWNlbnNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwobGljZW5zZXMsIFtsaWNlbnNlXSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfbGljZW5zZXMoc2VsZik6CisgICAgICAgIGZvciBsaWNlbnNlIGluIHNlbGYuaW52YWxpZF9saWNlbnNlczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMob2UubGljZW5zZS5JbnZhbGlkTGljZW5zZSkgYXMgY206CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZShsaWNlbnNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubGljZW5zZSwgbGljZW5zZSkKKworY2xhc3MgVGVzdFNpbXBsZUNvbWJpbmF0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdGVzdHMgPSB7CisgICAgICAgICJGT08mQkFSIjogWyJGT08iLCAiQkFSIl0sCisgICAgICAgICJCQVogJiBNT08iOiBbIkJBWiIsICJNT08iXSwKKyAgICAgICAgIkFMUEhBfEJFVEEiOiBbIkFMUEhBIl0sCisgICAgICAgICJCQVomTU9PfEZPTyI6IFsiRk9PIl0sCisgICAgICAgICJGT08mQkFSfEJBWiI6IFsiRk9PIiwgIkJBUiJdLAorICAgIH0KKyAgICBwcmVmZXJyZWQgPSBbIkFMUEhBIiwgIkZPTyIsICJCQVIiXQorCisgICAgZGVmIHRlc3RfdGVzdHMoc2VsZik6CisgICAgICAgIGRlZiBjaG9vc2UoYSwgYik6CisgICAgICAgICAgICBpZiBhbGwobGljIGluIHNlbGYucHJlZmVycmVkIGZvciBsaWMgaW4gYik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGEKKworICAgICAgICBmb3IgbGljZW5zZSwgZXhwZWN0ZWQgaW4gc2VsZi50ZXN0cy5pdGVtcygpOgorICAgICAgICAgICAgbGljZW5zZXMgPSBvZS5saWNlbnNlLmZsYXR0ZW5lZF9saWNlbnNlcyhsaWNlbnNlLCBjaG9vc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChsaWNlbnNlcywgZXhwZWN0ZWQpCisKK2NsYXNzIFRlc3RDb21wbGV4Q29tYmluYXRpb25zKFRlc3RTaW1wbGVDb21iaW5hdGlvbnMpOgorICAgIHRlc3RzID0geworICAgICAgICAiRk9PICYgKEJBUiB8IEJBWikmTU9PIjogWyJGT08iLCAiQkFSIiwgIk1PTyJdLAorICAgICAgICAiKEFMUEhBfChCRVRBJlRIRVRBKXxPTUVHQSkmREVMVEEiOiBbIk9NRUdBIiwgIkRFTFRBIl0sCisgICAgICAgICIoKEFMUEhBfEJFVEEpJkZPTyl8QkFaIjogWyJCRVRBIiwgIkZPTyJdLAorICAgICAgICAiKEdQTC0yLjB8UHJvcHJpZXRhcnkpJkJTRC00LWNsYXVzZSZNSVQiOiBbIkdQTC0yLjAiLCAiQlNELTQtY2xhdXNlIiwgIk1JVCJdLAorICAgIH0KKyAgICBwcmVmZXJyZWQgPSBbIkJBUiIsICJPTUVHQSIsICJCRVRBIiwgIkdQTC0yLjAiXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3BhdGgucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfcGF0aC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDQxY2UxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3BhdGgucHkKQEAgLTAsMCArMSw4OSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb2UsIG9lLnBhdGgKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IG9zCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzaHV0aWwKKworY2xhc3MgVGVzdFJlYWxQYXRoKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBESVJTID0gWyAiYSIsICJiIiwgImV0YyIsICJzYmluIiwgInVzciIsICJ1c3IvYmluIiwgInVzci9iaW5YIiwgInVzci9zYmluIiwgInVzci9pbmNsdWRlIiwgInVzci9pbmNsdWRlL2dkYm0iIF0KKyAgICBGSUxFUyA9IFsgImV0Yy9wYXNzd2QiLCAiYi9maWxlIiBdCisgICAgTElOS1MgPSBbCisgICAgICAgICggImJpbiIsICAgICAgICAgICAgICIvdXNyL2JpbiIsICAgICAgICAgICAgICIvdXNyL2JpbiIgKSwKKyAgICAgICAgKCAiYmluWCIsICAgICAgICAgICAgInVzci9iaW5YIiwgICAgICAgICAgICAgIi91c3IvYmluWCIgKSwKKyAgICAgICAgKCAiYyIsICAgICAgICAgICAgICAgImJyb2tlbiIsICAgICAgICAgICAgICAgIi9icm9rZW4iICksCisgICAgICAgICggImV0Yy9wYXNzd2QtMSIsICAgICJwYXNzd2QiLCAgICAgICAgICAgICAgICIvZXRjL3Bhc3N3ZCIgKSwKKyAgICAgICAgKCAiZXRjL3Bhc3N3ZC0yIiwgICAgInBhc3N3ZC0xIiwgICAgICAgICAgICAgIi9ldGMvcGFzc3dkIiApLAorICAgICAgICAoICJldGMvcGFzc3dkLTMiLCAgICAiL2V0Yy9wYXNzd2QtMSIsICAgICAgICAiL2V0Yy9wYXNzd2QiICksCisgICAgICAgICggImV0Yy9zaGFkb3ctMSIsICAgICIvZXRjL3NoYWRvdyIsICAgICAgICAgICIvZXRjL3NoYWRvdyIgKSwKKyAgICAgICAgKCAiZXRjL3NoYWRvdy0yIiwgICAgIi9ldGMvc2hhZG93LTEiLCAgICAgICAgIi9ldGMvc2hhZG93IiApLAorICAgICAgICAoICJwcm9nLUEiLCAgICAgICAgICAiYmluL3Byb2ctQSIsICAgICAgICAgICAiL3Vzci9iaW4vcHJvZy1BIiApLAorICAgICAgICAoICJwcm9nLUIiLCAgICAgICAgICAiL2Jpbi9wcm9nLUIiLCAgICAgICAgICAiL3Vzci9iaW4vcHJvZy1CIiApLAorICAgICAgICAoICJ1c3IvYmluL3Byb2ctQyIsICAiLi4vLi4vc2Jpbi9wcm9nLUMiLCAgICAiL3NiaW4vcHJvZy1DIiApLAorICAgICAgICAoICJ1c3IvYmluL3Byb2ctRCIsICAiL3NiaW4vcHJvZy1EIiwgICAgICAgICAiL3NiaW4vcHJvZy1EIiApLAorICAgICAgICAoICJ1c3IvYmluWC9wcm9nLUUiLCAiLi4vc2Jpbi9wcm9nLUUiLCAgICAgICBOb25lICksCisgICAgICAgICggInVzci9iaW4vcHJvZy1GIiwgICIuLi8uLi8uLi9zYmluL3Byb2ctRiIsICIvc2Jpbi9wcm9nLUYiICksCisgICAgICAgICggImxvb3AiLCAgICAgICAgICAgICJhL2xvb3AiLCAgICAgICAgICAgICAgIE5vbmUgKSwKKyAgICAgICAgKCAiYS9sb29wIiwgICAgICAgICAgIi4uL2xvb3AiLCAgICAgICAgICAgICAgTm9uZSApLAorICAgICAgICAoICJiL3Rlc3QiLCAgICAgICAgICAiZmlsZS9mb28iLCAgICAgICAgICAgICAiL2IvZmlsZS9mb28iICksCisgICAgXQorCisgICAgTElOS1NfUEhZUyA9IFsKKyAgICAgICAgKCAiLi8iLCAgICAgICAgICAiLyIsICAgICAgICAgICAgICAgICIiICksCisgICAgICAgICggImJpblgvcHJvZy1FIiwgIi91c3Ivc2Jpbi9wcm9nLUUiLCAiL3NiaW4vcHJvZy1FIiApLAorICAgIF0KKworICAgIEVYQ0VQVElPTlMgPSBbCisgICAgICAgICggImxvb3AiLCAgIGVycm5vLkVMT09QICksCisgICAgICAgICggImIvdGVzdCIsIGVycm5vLkVOT0VOVCApLAorICAgIF0KKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjb3Muc3lzdGVtKCJ0cmVlIC1GICVzIiAlIHNlbGYudG1wZGlyKQorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnRtcGRpcikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4ID0gIm9lLXRlc3RfcGF0aCIpCisgICAgICAgIHNlbGYucm9vdCA9IG9zLnBhdGguam9pbihzZWxmLnRtcGRpciwgIlIiKQorCisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihzZWxmLnRtcGRpciwgIl9yZWFsIikpCisgICAgICAgIG9zLnN5bWxpbmsoIl9yZWFsIiwgc2VsZi5yb290KQorCisgICAgICAgIGZvciBkIGluIHNlbGYuRElSUzoKKyAgICAgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihzZWxmLnJvb3QsIGQpKQorICAgICAgICBmb3IgZiBpbiBzZWxmLkZJTEVTOgorICAgICAgICAgICAgZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5yb290LCBmKSwgInciKQorICAgICAgICBmb3IgbCBpbiBzZWxmLkxJTktTOgorICAgICAgICAgICAgb3Muc3ltbGluayhsWzFdLCBvcy5wYXRoLmpvaW4oc2VsZi5yb290LCBsWzBdKSkKKworICAgIGRlZiBfX3JlYWxwYXRoKHNlbGYsIGZpbGUsIHVzZV9waHlzZGlyLCBhc3N1bWVfZGlyID0gVHJ1ZSk6CisgICAgICAgIHJldHVybiBvZS5wYXRoLnJlYWxwYXRoKG9zLnBhdGguam9pbihzZWxmLnJvb3QsIGZpbGUpLCBzZWxmLnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9waHlzZGlyLCBhc3N1bWVfZGlyID0gYXNzdW1lX2RpcikKKworICAgIGRlZiB0ZXN0X25vcm0oc2VsZik6CisgICAgICAgIGZvciBsIGluIHNlbGYuTElOS1M6CisgICAgICAgICAgICBpZiBsWzJdID09IE5vbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgdGFyZ2V0X3AgPSBzZWxmLl9fcmVhbHBhdGgobFswXSwgVHJ1ZSkKKyAgICAgICAgICAgIHRhcmdldF9sID0gc2VsZi5fX3JlYWxwYXRoKGxbMF0sIEZhbHNlKQorCisgICAgICAgICAgICBpZiBsWzJdICE9IEZhbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyZ2V0X3AsIHRhcmdldF9sKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFsyXSwgdGFyZ2V0X3BbbGVuKHNlbGYucm9vdCk6XSkKKworICAgIGRlZiB0ZXN0X3BoeXMoc2VsZik6CisgICAgICAgIGZvciBsIGluIHNlbGYuTElOS1NfUEhZUzoKKyAgICAgICAgICAgIHRhcmdldF9wID0gc2VsZi5fX3JlYWxwYXRoKGxbMF0sIFRydWUpCisgICAgICAgICAgICB0YXJnZXRfbCA9IHNlbGYuX19yZWFscGF0aChsWzBdLCBGYWxzZSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzFdLCB0YXJnZXRfcFtsZW4oc2VsZi5yb290KTpdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzJdLCB0YXJnZXRfbFtsZW4oc2VsZi5yb290KTpdKQorCisgICAgZGVmIHRlc3RfbG9vcChzZWxmKToKKyAgICAgICAgZm9yIGUgaW4gc2VsZi5FWENFUFRJT05TOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoT1NFcnJvciwgcidcW0Vycm5vICV1XF0nICUgZVsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19yZWFscGF0aCwgZVswXSwgRmFsc2UsIEZhbHNlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3R5cGVzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3R5cGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2N2NjMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfdHlwZXMucHkKQEAgLTAsMCArMSw2MiBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lLm1ha2V0eXBlIGltcG9ydCBjcmVhdGUsIGZhY3RvcnkKKworY2xhc3MgVGVzdFR5cGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgYXNzZXJ0SXNJbnN0YW5jZShzZWxmLCBvYmosIGNscyk6CisgICAgICAgIHJldHVybiBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShvYmosIGNscykpCisKKyAgICBkZWYgYXNzZXJ0SXNOb3Qoc2VsZiwgb2JqLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLmFzc2VydEZhbHNlKG9iaiBpcyBvdGhlcikKKworICAgIGRlZiBhc3NlcnRGYWN0b3J5Q3JlYXRlZChzZWxmLCB2YWx1ZSwgdHlwZSwgKipmbGFncyk6CisgICAgICAgIGNscyA9IGZhY3RvcnkodHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChjbHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjcmVhdGUodmFsdWUsIHR5cGUsICoqZmxhZ3MpLCBjbHMpCisKK2NsYXNzIFRlc3RCb29sZWFuVHlwZShUZXN0VHlwZXMpOgorICAgIGRlZiB0ZXN0X2ludmFsaWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNyZWF0ZSwgJycsICdib29sZWFuJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3JlYXRlLCAnZm9vJywgJ2Jvb2xlYW4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNyZWF0ZSwgb2JqZWN0KCksICdib29sZWFuJykKKworICAgIGRlZiB0ZXN0X3RydWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJ3knLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCd5ZXMnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCcxJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyZWF0ZSgndCcsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJ3RydWUnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCdUUlVFJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyZWF0ZSgndHJ1RScsICdib29sZWFuJykpCisKKyAgICBkZWYgdGVzdF9mYWxzZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ24nLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnbm8nLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnMCcsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3JlYXRlKCdmJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ2ZhbHNlJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ0ZBTFNFJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ2ZhTHNlJywgJ2Jvb2xlYW4nKSkKKworICAgIGRlZiB0ZXN0X2Jvb2xfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlKCduJywgJ2Jvb2xlYW4nKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3JlYXRlKCduJywgJ2Jvb2xlYW4nKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGUoJ3knLCAnYm9vbGVhbicpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNyZWF0ZSgneScsICdib29sZWFuJyksIEZhbHNlKQorCitjbGFzcyBUZXN0TGlzdChUZXN0VHlwZXMpOgorICAgIGRlZiBhc3NlcnRMaXN0RXF1YWwoc2VsZiwgdmFsdWUsIHZhbGlkLCBzZXA9Tm9uZSk6CisgICAgICAgIG9iaiA9IGNyZWF0ZSh2YWx1ZSwgJ2xpc3QnLCBzZXBhcmF0b3I9c2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iaiwgdmFsaWQpCisgICAgICAgIGlmIHNlcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLnNlcGFyYXRvciwgc2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihvYmopLCBvYmouc2VwYXJhdG9yLmpvaW4ob2JqKSkKKworICAgIGRlZiB0ZXN0X2xpc3Rfbm9zZXAoc2VsZik6CisgICAgICAgIHRlc3RsaXN0ID0gWydhbHBoYScsICdiZXRhJywgJ3RoZXRhJ10KKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoJ2FscGhhIGJldGEgdGhldGEnLCB0ZXN0bGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoJ2FscGhhICBiZXRhXHR0aGV0YScsIHRlc3RsaXN0KQorICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCgnYWxwaGEnLCBbJ2FscGhhJ10pCisKKyAgICBkZWYgdGVzdF9saXN0X3VzZXJzZXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKCdmb286YmFyJywgWydmb28nLCAnYmFyJ10sICc6JykKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoJ2ZvbzpiYXI6YmF6JywgWydmb28nLCAnYmFyJywgJ2JheiddLCAnOicpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfdXRpbHMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5YWM1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF91dGlscy5weQpAQCAtMCwwICsxLDUxIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2UudXRpbHMgaW1wb3J0IHBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtCisKK2NsYXNzIFRlc3RQYWNrYWdlc0ZpbHRlck91dFN5c3RlbSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZmlsdGVyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCB0aGF0IG9lLnV0aWxzLnBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtIHdvcmtzLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGJiCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkNhbm5vdCBpbXBvcnQgYmIiKQorCisgICAgICAgIGQgPSBiYi5kYXRhX3NtYXJ0LkRhdGFTbWFydCgpCisgICAgICAgIGQuc2V0VmFyKCJQTiIsICJmb28iKQorCisgICAgICAgIGQuc2V0VmFyKCJQQUNLQUdFUyIsICJmb28gZm9vLWRvYyBmb28tZGV2IikKKyAgICAgICAgcGtncyA9IHBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtncywgW10pCisKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VTIiwgImZvbyBmb28tZG9jIGZvby1kYXRhIGZvby1kZXYiKQorICAgICAgICBwa2dzID0gcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dzLCBbImZvby1kYXRhIl0pCisKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VTIiwgImZvbyBmb28tbG9jYWxlLWVuLWdiIikKKyAgICAgICAgcGtncyA9IHBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtncywgW10pCisKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VTIiwgImZvbyBmb28tZGF0YSBmb28tbG9jYWxlLWVuLWdiIikKKyAgICAgICAgcGtncyA9IHBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtncywgWyJmb28tZGF0YSJdKQorCisKK2NsYXNzIFRlc3RUcmltVmVyc2lvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdmVyc2lvbl9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHRyaW1fdmVyc2lvbihOb25lLCAyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0cmltX3ZlcnNpb24oKDEsIDIsIDMpLCAyKQorCisgICAgZGVmIHRlc3RfbnVtX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHRyaW1fdmVyc2lvbigiMS4yLjMiLCAwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgdHJpbV92ZXJzaW9uKCIxLjIuMyIsIC0xKQorCisgICAgZGVmIHRlc3RfdmFsaWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJpbV92ZXJzaW9uKCIxLjIuMyIsIDEpLCAiMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJpbV92ZXJzaW9uKCIxLjIuMyIsIDIpLCAiMS4yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmltX3ZlcnNpb24oIjEuMi4zIiwgMyksICIxLjIuMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJpbV92ZXJzaW9uKCIxLjIuMyIsIDQpLCAiMS4yLjMiKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90eXBlcy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdHlwZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y0N2MxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdHlwZXMucHkKQEAgLTAsMCArMSwxNTMgQEAKK2ltcG9ydCBlcnJubworaW1wb3J0IHJlCitpbXBvcnQgb3MKKworCitjbGFzcyBPRUxpc3QobGlzdCk6CisgICAgIiIiT3BlbkVtYmVkZGVkICdsaXN0JyB0eXBlCisKKyAgICBBY3RzIGFzIGFuIG9yZGluYXJ5IGxpc3QsIGJ1dCBpcyBjb25zdHJ1Y3RlZCBmcm9tIGEgc3RyaW5nIHZhbHVlIGFuZCBhCisgICAgc2VwYXJhdG9yIChvcHRpb25hbCksIGFuZCByZS1qb2lucyBpdHNlbGYgd2hlbiBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgd2l0aAorICAgIHN0cigpLiAgU2V0IHRoZSB2YXJpYWJsZSB0eXBlIGZsYWcgdG8gJ2xpc3QnIHRvIHVzZSB0aGlzIHR5cGUsIGFuZCB0aGUKKyAgICAnc2VwYXJhdG9yJyBmbGFnIG1heSBiZSBzcGVjaWZpZWQgKGRlZmF1bHRpbmcgdG8gd2hpdGVzcGFjZSkuIiIiCisKKyAgICBuYW1lID0gImxpc3QiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUsIHNlcGFyYXRvciA9IE5vbmUpOgorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxpc3QuX19pbml0X18oc2VsZiwgdmFsdWUuc3BsaXQoc2VwYXJhdG9yKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpc3QuX19pbml0X18oc2VsZikKKworICAgICAgICBpZiBzZXBhcmF0b3IgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc2VwYXJhdG9yID0gIiAiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNlcGFyYXRvciA9IHNlcGFyYXRvcgorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlcGFyYXRvci5qb2luKHNlbGYpCisKK2RlZiBjaG9pY2UodmFsdWUsIGNob2ljZXMpOgorICAgICIiIk9wZW5FbWJlZGRlZCAnY2hvaWNlJyB0eXBlCisKKyAgICBBY3RzIGFzIGEgbXVsdGlwbGUgY2hvaWNlIGZvciB0aGUgdXNlci4gIFRvIHVzZSB0aGlzLCBzZXQgdGhlIHZhcmlhYmxlCisgICAgdHlwZSBmbGFnIHRvICdjaG9pY2UnLCBhbmQgc2V0IHRoZSAnY2hvaWNlcycgZmxhZyB0byBhIHNwYWNlIHNlcGFyYXRlZAorICAgIGxpc3Qgb2YgdmFsaWQgdmFsdWVzLiIiIgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJjaG9pY2UgYWNjZXB0cyBhIHN0cmluZywgbm90ICclcyciICUgdHlwZSh2YWx1ZSkpCisKKyAgICB2YWx1ZSA9IHZhbHVlLmxvd2VyKCkKKyAgICBjaG9pY2VzID0gY2hvaWNlcy5sb3dlcigpCisgICAgaWYgdmFsdWUgbm90IGluIGNob2ljZXMuc3BsaXQoKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBjaG9pY2UgJyVzJy4gIFZhbGlkIGNob2ljZXM6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlLCBjaG9pY2VzKSkKKyAgICByZXR1cm4gdmFsdWUKKworY2xhc3MgTm9NYXRjaChvYmplY3QpOgorICAgICIiIlN0dWIgcHl0aG9uIHJlZ2V4IHBhdHRlcm4gb2JqZWN0IHdoaWNoIG5ldmVyIG1hdGNoZXMgYW55dGhpbmciIiIKKyAgICBkZWYgZmluZGFsbChzZWxmLCBzdHJpbmcsIGZsYWdzPTApOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGZpbmRpdGVyKHNlbGYsIHN0cmluZywgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgbWF0Y2goc2VsZiwgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc2VhcmNoKHNlbGYsIHN0cmluZywgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc3BsaXQoc2VsZiwgc3RyaW5nLCBtYXhzcGxpdD0wKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzdWIocGF0dGVybiwgcmVwbCwgc3RyaW5nLCBjb3VudD0wKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzdWJuKHBhdHRlcm4sIHJlcGwsIHN0cmluZywgY291bnQ9MCk6CisgICAgICAgIHJldHVybiBOb25lCisKK05vTWF0Y2ggPSBOb01hdGNoKCkKKworZGVmIHJlZ2V4KHZhbHVlLCByZWdleGZsYWdzPU5vbmUpOgorICAgICIiIk9wZW5FbWJlZGRlZCAncmVnZXgnIHR5cGUKKworICAgIEFjdHMgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24sIHJldHVybmluZyB0aGUgcHJlLWNvbXBpbGVkIHJlZ3VsYXIKKyAgICBleHByZXNzaW9uIHBhdHRlcm4gb2JqZWN0LiAgVG8gdXNlIHRoaXMgdHlwZSwgc2V0IHRoZSB2YXJpYWJsZSB0eXBlIGZsYWcKKyAgICB0byAncmVnZXgnLCBhbmQgb3B0aW9uYWxseSwgc2V0IHRoZSAncmVnZXhmbGFncycgdHlwZSB0byBhIHNwYWNlIHNlcGFyYXRlZAorICAgIGxpc3Qgb2YgdGhlIGZsYWdzIHRvIGNvbnRyb2wgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyAoZS5nLgorICAgIEZPT1tyZWdleGZsYWdzXSArPSAnaWdub3JlY2FzZScpLiAgU2VlIHRoZSBweXRob24gZG9jdW1lbnRhdGlvbiBvbiB0aGUKKyAgICAncmUnIG1vZHVsZSBmb3IgYSBsaXN0IG9mIHZhbGlkIGZsYWdzLiIiIgorCisgICAgZmxhZ3ZhbCA9IDAKKyAgICBpZiByZWdleGZsYWdzOgorICAgICAgICBmb3IgZmxhZyBpbiByZWdleGZsYWdzLnNwbGl0KCk6CisgICAgICAgICAgICBmbGFnID0gZmxhZy51cHBlcigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmxhZ3ZhbCB8PSBnZXRhdHRyKHJlLCBmbGFnKQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgcmVnZXggZmxhZyAnJXMnIiAlIGZsYWcpCisKKyAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICMgTGV0J3MgZW5zdXJlIHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGFuIHVuZGVmaW5lZCBvciBlbXB0eQorICAgICAgICAjIHZhcmlhYmxlIGlzIHRvIG1hdGNoIG5vdGhpbmcuIElmIHRoZSB1c2VyIGV4cGxpY2l0bHkgd2FudHMgdG8gbWF0Y2gKKyAgICAgICAgIyBhbnl0aGluZywgdGhleSBjYW4gbWF0Y2ggJy4qJyBpbnN0ZWFkLgorICAgICAgICByZXR1cm4gTm9NYXRjaAorCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gcmUuY29tcGlsZSh2YWx1ZSwgZmxhZ3ZhbCkKKyAgICBleGNlcHQgcmUuZXJyb3IgYXMgZXhjOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHJlZ2V4IHZhbHVlICclcyc6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlLCBleGMuYXJnc1swXSkpCisKK2RlZiBib29sZWFuKHZhbHVlKToKKyAgICAiIiJPcGVuRW1iZWRkZWQgJ2Jvb2xlYW4nIHR5cGUKKworICAgIFZhbGlkIHZhbHVlcyBmb3IgdHJ1ZTogJ3llcycsICd5JywgJ3RydWUnLCAndCcsICcxJworICAgIFZhbGlkIHZhbHVlcyBmb3IgZmFsc2U6ICdubycsICduJywgJ2ZhbHNlJywgJ2YnLCAnMCcKKyAgICAiIiIKKworICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJib29sZWFuIGFjY2VwdHMgYSBzdHJpbmcsIG5vdCAnJXMnIiAlIHR5cGUodmFsdWUpKQorCisgICAgdmFsdWUgPSB2YWx1ZS5sb3dlcigpCisgICAgaWYgdmFsdWUgaW4gKCd5ZXMnLCAneScsICd0cnVlJywgJ3QnLCAnMScpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsaWYgdmFsdWUgaW4gKCdubycsICduJywgJ2ZhbHNlJywgJ2YnLCAnMCcpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIGJvb2xlYW4gdmFsdWUgJyVzJyIgJSB2YWx1ZSkKKworZGVmIGludGVnZXIodmFsdWUsIG51bWJlcmJhc2U9MTApOgorICAgICIiIk9wZW5FbWJlZGRlZCAnaW50ZWdlcicgdHlwZQorCisgICAgRGVmYXVsdHMgdG8gYmFzZSAxMCwgYnV0IHRoaXMgY2FuIGJlIHNwZWNpZmllZCB1c2luZyB0aGUgb3B0aW9uYWwKKyAgICAnbnVtYmVyYmFzZScgZmxhZy4iIiIKKworICAgIHJldHVybiBpbnQodmFsdWUsIGludChudW1iZXJiYXNlKSkKKworX2Zsb2F0ID0gZmxvYXQKK2RlZiBmbG9hdCh2YWx1ZSwgZnJvbWhleD0nZmFsc2UnKToKKyAgICAiIiJPcGVuRW1iZWRkZWQgZmxvYXRpbmcgcG9pbnQgdHlwZQorCisgICAgVG8gdXNlIHRoaXMgdHlwZSwgc2V0IHRoZSB0eXBlIGZsYWcgdG8gJ2Zsb2F0JywgYW5kIG9wdGlvbmFsbHkgc2V0IHRoZQorICAgICdmcm9taGV4JyBmbGFnIHRvIGEgdHJ1ZSB2YWx1ZSAob2JleWluZyB0aGUgc2FtZSBydWxlcyBhcyBmb3IgdGhlCisgICAgJ2Jvb2xlYW4nIHR5cGUpIGlmIHRoZSB2YWx1ZSBpcyBpbiBiYXNlIDE2IHJhdGhlciB0aGFuIGJhc2UgMTAuIiIiCisKKyAgICBpZiBib29sZWFuKGZyb21oZXgpOgorICAgICAgICByZXR1cm4gX2Zsb2F0LmZyb21oZXgodmFsdWUpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIF9mbG9hdCh2YWx1ZSkKKworZGVmIHBhdGgodmFsdWUsIHJlbGF0aXZldG89JycsIG5vcm1hbGl6ZT0ndHJ1ZScsIG11c3RleGlzdD0nZmFsc2UnKToKKyAgICB2YWx1ZSA9IG9zLnBhdGguam9pbihyZWxhdGl2ZXRvLCB2YWx1ZSkKKworICAgIGlmIGJvb2xlYW4obm9ybWFsaXplKToKKyAgICAgICAgdmFsdWUgPSBvcy5wYXRoLm5vcm1wYXRoKHZhbHVlKQorCisgICAgaWYgYm9vbGVhbihtdXN0ZXhpc3QpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcGVuKHZhbHVlLCAncicpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiezB9OiB7MX0iLmZvcm1hdCh2YWx1ZSwgb3Muc3RyZXJyb3IoZXJybm8uRU5PRU5UKSkpCisKKyAgICByZXR1cm4gdmFsdWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdXRpbHMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZTA4N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3V0aWxzLnB5CkBAIC0wLDAgKzEsMjczIEBACit0cnk6CisgICAgIyBQeXRob24gMgorICAgIGltcG9ydCBjb21tYW5kcyBhcyBjbWRzdGF0dXMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAjIFB5dGhvbiAzCisgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgY21kc3RhdHVzCisKK2RlZiByZWFkX2ZpbGUoZmlsZW5hbWUpOgorICAgIHRyeToKKyAgICAgICAgZiA9IG9wZW4oIGZpbGVuYW1lLCAiciIgKQorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIHJlYXNvbjoKKyAgICAgICAgcmV0dXJuICIiICMgV0FSTklORzogY2FuJ3QgcmFpc2UgYW4gZXJyb3Igbm93IGJlY2F1c2Ugb2YgdGhlIG5ldyBSREVQRU5EUyBoYW5kbGluZy4gVGhpcyBpcyBhIGJpdCB1Z2x5LiA6TToKKyAgICBlbHNlOgorICAgICAgICBkYXRhID0gZi5yZWFkKCkuc3RyaXAoKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIGRhdGEKKyAgICByZXR1cm4gTm9uZQorCitkZWYgaWZlbHNlKGNvbmRpdGlvbiwgaWZ0cnVlID0gVHJ1ZSwgaWZmYWxzZSA9IEZhbHNlKToKKyAgICBpZiBjb25kaXRpb246CisgICAgICAgIHJldHVybiBpZnRydWUKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gaWZmYWxzZQorCitkZWYgY29uZGl0aW9uYWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgaWYgZC5nZXRWYXIodmFyaWFibGUsMSkgPT0gY2hlY2t2YWx1ZToKKyAgICAgICAgcmV0dXJuIHRydWV2YWx1ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBmYWxzZXZhbHVlCisKK2RlZiBsZXNzX29yX2VxdWFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIGlmIGZsb2F0KGQuZ2V0VmFyKHZhcmlhYmxlLDEpKSA8PSBmbG9hdChjaGVja3ZhbHVlKToKKyAgICAgICAgcmV0dXJuIHRydWV2YWx1ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBmYWxzZXZhbHVlCisKK2RlZiB2ZXJzaW9uX2xlc3Nfb3JfZXF1YWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgcmVzdWx0ID0gYmIudXRpbHMudmVyY21wX3N0cmluZyhkLmdldFZhcih2YXJpYWJsZSxUcnVlKSwgY2hlY2t2YWx1ZSkKKyAgICBpZiByZXN1bHQgPD0gMDoKKyAgICAgICAgcmV0dXJuIHRydWV2YWx1ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBmYWxzZXZhbHVlCisKK2RlZiBib3RoX2NvbnRhaW4odmFyaWFibGUxLCB2YXJpYWJsZTIsIGNoZWNrdmFsdWUsIGQpOgorICAgIHZhbDEgPSBkLmdldFZhcih2YXJpYWJsZTEsIFRydWUpCisgICAgdmFsMiA9IGQuZ2V0VmFyKHZhcmlhYmxlMiwgVHJ1ZSkKKyAgICB2YWwxID0gc2V0KHZhbDEuc3BsaXQoKSkKKyAgICB2YWwyID0gc2V0KHZhbDIuc3BsaXQoKSkKKyAgICBpZiBpc2luc3RhbmNlKGNoZWNrdmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICBjaGVja3ZhbHVlID0gc2V0KGNoZWNrdmFsdWUuc3BsaXQoKSkKKyAgICBlbHNlOgorICAgICAgICBjaGVja3ZhbHVlID0gc2V0KGNoZWNrdmFsdWUpCisgICAgaWYgY2hlY2t2YWx1ZS5pc3N1YnNldCh2YWwxKSBhbmQgY2hlY2t2YWx1ZS5pc3N1YnNldCh2YWwyKToKKyAgICAgICAgcmV0dXJuICIgIi5qb2luKGNoZWNrdmFsdWUpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICIiCisKK2RlZiBzZXRfaW50ZXJzZWN0KHZhcmlhYmxlMSwgdmFyaWFibGUyLCBkKToKKyAgICAiIiIKKyAgICBFeHBhbmQgYm90aCB2YXJpYWJsZXMsIGludGVycHJldCB0aGVtIGFzIGxpc3RzIG9mIHN0cmluZ3MsIGFuZCByZXR1cm4gdGhlCisgICAgaW50ZXJzZWN0aW9uIGFzIGEgZmxhdHRlbmVkIHN0cmluZy4KKworICAgIEZvciBleGFtcGxlOgorICAgIHMxID0gImEgYiBjIgorICAgIHMyID0gImIgYyBkIgorICAgIHMzID0gc2V0X2ludGVyc2VjdChzMSwgczIpCisgICAgPT4gczMgPSAiYiBjIgorICAgICIiIgorICAgIHZhbDEgPSBzZXQoZC5nZXRWYXIodmFyaWFibGUxLCBUcnVlKS5zcGxpdCgpKQorICAgIHZhbDIgPSBzZXQoZC5nZXRWYXIodmFyaWFibGUyLCBUcnVlKS5zcGxpdCgpKQorICAgIHJldHVybiAiICIuam9pbih2YWwxICYgdmFsMikKKworZGVmIHBydW5lX3N1ZmZpeCh2YXIsIHN1ZmZpeGVzLCBkKToKKyAgICAjIFNlZSBpZiB2YXIgZW5kcyB3aXRoIGFueSBvZiB0aGUgc3VmZml4ZXMgbGlzdGVkIGFuZAorICAgICMgcmVtb3ZlIGl0IGlmIGZvdW5kCisgICAgZm9yIHN1ZmZpeCBpbiBzdWZmaXhlczoKKyAgICAgICAgaWYgdmFyLmVuZHN3aXRoKHN1ZmZpeCk6CisgICAgICAgICAgICB2YXIgPSB2YXIucmVwbGFjZShzdWZmaXgsICIiKQorCisgICAgcHJlZml4ID0gZC5nZXRWYXIoIk1MUFJFRklYIiwgVHJ1ZSkKKyAgICBpZiBwcmVmaXggYW5kIHZhci5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgIHZhciA9IHZhci5yZXBsYWNlKHByZWZpeCwgIiIpCisKKyAgICByZXR1cm4gdmFyCisKK2RlZiBzdHJfZmlsdGVyKGYsIHN0ciwgZCk6CisgICAgZnJvbSByZSBpbXBvcnQgbWF0Y2gKKyAgICByZXR1cm4gIiAiLmpvaW4oZmlsdGVyKGxhbWJkYSB4OiBtYXRjaChmLCB4LCAwKSwgc3RyLnNwbGl0KCkpKQorCitkZWYgc3RyX2ZpbHRlcl9vdXQoZiwgc3RyLCBkKToKKyAgICBmcm9tIHJlIGltcG9ydCBtYXRjaAorICAgIHJldHVybiAiICIuam9pbihmaWx0ZXIobGFtYmRhIHg6IG5vdCBtYXRjaChmLCB4LCAwKSwgc3RyLnNwbGl0KCkpKQorCitkZWYgcGFyYW1fYm9vbChjZmcsIGZpZWxkLCBkZmx0ID0gTm9uZSk6CisgICAgIiIiTG9va3VwIDxmaWVsZD4gaW4gPGNmZz4gbWFwIGFuZCBjb252ZXJ0IGl0IHRvIGEgYm9vbGVhbjsgdGFrZQorICAgIDxkZmx0PiB3aGVuIHRoaXMgPGZpZWxkPiBkb2VzIG5vdCBleGlzdCIiIgorICAgIHZhbHVlID0gY2ZnLmdldChmaWVsZCwgZGZsdCkKKyAgICBzdHJ2YWx1ZSA9IHN0cih2YWx1ZSkubG93ZXIoKQorICAgIGlmIHN0cnZhbHVlIGluICgneWVzJywgJ3knLCAndHJ1ZScsICd0JywgJzEnKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbGlmIHN0cnZhbHVlIGluICgnbm8nLCAnbicsICdmYWxzZScsICdmJywgJzAnKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCB2YWx1ZSBmb3IgYm9vbGVhbiBwYXJhbWV0ZXIgJyVzJzogJyVzJyIgJSAoZmllbGQsIHZhbHVlKSkKKworZGVmIGluaGVyaXRzKGQsICpjbGFzc2VzKToKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgbWV0YWRhdGEgaW5oZXJpdHMgYW55IG9mIHRoZSBzcGVjaWZpZWQgY2xhc3NlcyIiIgorICAgIHJldHVybiBhbnkoYmIuZGF0YS5pbmhlcml0c19jbGFzcyhjbHMsIGQpIGZvciBjbHMgaW4gY2xhc3NlcykKKworZGVmIGZlYXR1cmVzX2JhY2tmaWxsKHZhcixkKToKKyAgICAjIFRoaXMgY29uc3RydWN0IGFsbG93cyB0aGUgYWRkaXRpb24gb2YgbmV3IGZlYXR1cmVzIHRvIHZhcmlhYmxlIHNwZWNpZmllZAorICAgICMgYXMgdmFyCisgICAgIyBFeGFtcGxlIGZvciB2YXIgPSAiRElTVFJPX0ZFQVRVUkVTIgorICAgICMgVGhpcyBjb25zdHJ1Y3QgYWxsb3dzIHRoZSBhZGRpdGlvbiBvZiBuZXcgZmVhdHVyZXMgdG8gRElTVFJPX0ZFQVRVUkVTCisgICAgIyB0aGF0IGlmIG5vdCBwcmVzZW50IHdvdWxkIGRpc2FibGUgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSwgd2l0aG91dAorICAgICMgZGlzdHVyYmluZyBkaXN0cmlidXRpb25zIHRoYXQgaGF2ZSBhbHJlYWR5IHNldCBESVNUUk9fRkVBVFVSRVMuCisgICAgIyBEaXN0cmlidXRpb25zIHdhbnRpbmcgdG8gZWxpZGUgYSB2YWx1ZSBpbiBESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTEwgc2hvdWxkCisgICAgIyBhZGQgdGhlIGZlYXR1cmUgdG8gRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQKKyAgICBmZWF0dXJlcyA9IChkLmdldFZhcih2YXIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgYmFja2ZpbGwgPSAoZC5nZXRWYXIodmFyKyJfQkFDS0ZJTEwiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGNvbnNpZGVyZWQgPSAoZC5nZXRWYXIodmFyKyJfQkFDS0ZJTExfQ09OU0lERVJFRCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICBhZGRmZWF0dXJlcyA9IFtdCisgICAgZm9yIGZlYXR1cmUgaW4gYmFja2ZpbGw6CisgICAgICAgIGlmIGZlYXR1cmUgbm90IGluIGZlYXR1cmVzIGFuZCBmZWF0dXJlIG5vdCBpbiBjb25zaWRlcmVkOgorICAgICAgICAgICAgYWRkZmVhdHVyZXMuYXBwZW5kKGZlYXR1cmUpCisKKyAgICBpZiBhZGRmZWF0dXJlczoKKyAgICAgICAgZC5hcHBlbmRWYXIodmFyLCAiICIgKyAiICIuam9pbihhZGRmZWF0dXJlcykpCisKKworZGVmIHBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtKGQpOgorICAgICIiIgorICAgIFJldHVybiBhIGxpc3Qgb2YgcGFja2FnZXMgZnJvbSBQQUNLQUdFUyB3aXRoIHRoZSAic3lzdGVtIiBwYWNrYWdlcyBzdWNoIGFzCisgICAgUE4tZGJnIFBOLWRvYyBQTi1sb2NhbGUtZWItZ2IgcmVtb3ZlZC4KKyAgICAiIiIKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgYmxhY2tsaXN0ID0gbWFwKGxhbWJkYSBzdWZmaXg6IHBuICsgc3VmZml4LCAoJycsICctZGJnJywgJy1kZXYnLCAnLWRvYycsICctbG9jYWxlJywgJy1zdGF0aWNkZXYnKSkKKyAgICBsb2NhbGVwa2cgPSBwbiArICItbG9jYWxlLSIKKyAgICBwa2dzID0gW10KKworICAgIGZvciBwa2cgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgaWYgcGtnIG5vdCBpbiBibGFja2xpc3QgYW5kIGxvY2FsZXBrZyBub3QgaW4gcGtnOgorICAgICAgICAgICAgcGtncy5hcHBlbmQocGtnKQorICAgIHJldHVybiBwa2dzCisKK2RlZiBnZXRzdGF0dXNvdXRwdXQoY21kKToKKyAgICByZXR1cm4gY21kc3RhdHVzLmdldHN0YXR1c291dHB1dChjbWQpCisKKworZGVmIHRyaW1fdmVyc2lvbih2ZXJzaW9uLCBudW1fcGFydHM9Mik6CisgICAgIiIiCisgICAgUmV0dXJuIGp1c3QgdGhlIGZpcnN0IDxudW1fcGFydHM+IG9mIDx2ZXJzaW9uPiwgc3BsaXQgYnkgcGVyaW9kcy4gIEZvcgorICAgIGV4YW1wbGUsIHRyaW1fdmVyc2lvbigiMS4yLjMiLCAyKSB3aWxsIHJldHVybiAiMS4yIi4KKyAgICAiIiIKKyAgICBpZiB0eXBlKHZlcnNpb24pIGlzIG5vdCBzdHI6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVmVyc2lvbiBzaG91bGQgYmUgYSBzdHJpbmciKQorICAgIGlmIG51bV9wYXJ0cyA8IDE6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBzcGxpdCB0byBwYXJ0cyA8IDEiKQorCisgICAgcGFydHMgPSB2ZXJzaW9uLnNwbGl0KCIuIikKKyAgICB0cmltbWVkID0gIi4iLmpvaW4ocGFydHNbOm51bV9wYXJ0c10pCisgICAgcmV0dXJuIHRyaW1tZWQKKworZGVmIGNwdV9jb3VudCgpOgorICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKKyAgICByZXR1cm4gbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpCisKK2RlZiBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3MoZCwgY21kcyk6CisgICAgaWYgY21kcyBpcyBOb25lOgorICAgICAgICByZXR1cm4KKworICAgIGZvciBjbWQgaW4gY21kcy5zdHJpcCgpLnNwbGl0KCc7Jyk6CisgICAgICAgIGNtZCA9IGNtZC5zdHJpcCgpCisgICAgICAgIGlmIGNtZCAhPSAnJzoKKyAgICAgICAgICAgIGJiLm5vdGUoIkV4ZWN1dGluZyAlcyAuLi4iICUgY21kKQorICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGNtZCwgZCkKKworZGVmIG11bHRpcHJvY2Vzc19leGVjKGNvbW1hbmRzLCBmdW5jdGlvbik6CisgICAgaW1wb3J0IHNpZ25hbAorICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKKworICAgIGlmIG5vdCBjb21tYW5kczoKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBkZWYgaW5pdF93b3JrZXIoKToKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBzaWduYWwuU0lHX0lHTikKKworICAgIG5wcm9jID0gbWluKG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSwgbGVuKGNvbW1hbmRzKSkKKyAgICBwb29sID0gYmIudXRpbHMubXVsdGlwcm9jZXNzaW5ncG9vbChucHJvYywgaW5pdF93b3JrZXIpCisgICAgaW1hcCA9IHBvb2wuaW1hcChmdW5jdGlvbiwgY29tbWFuZHMpCisKKyAgICB0cnk6CisgICAgICAgIHJlcyA9IGxpc3QoaW1hcCkKKyAgICAgICAgcG9vbC5jbG9zZSgpCisgICAgICAgIHBvb2wuam9pbigpCisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICBmb3IgcmVzdWx0IGluIHJlczoKKyAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgIHBvb2wudGVybWluYXRlKCkKKyAgICAgICAgcG9vbC5qb2luKCkKKyAgICAgICAgcmFpc2UKKworZGVmIHNxdWFzaHNwYWNlcyhzdHJpbmcpOgorICAgIGltcG9ydCByZQorICAgIHJldHVybiByZS5zdWIoIlxzKyIsICIgIiwgc3RyaW5nKS5zdHJpcCgpCisKKyMKKyMgUHl0aG9uIDIuNyBkb2Vzbid0IGhhdmUgdGhyZWFkZWQgcG9vbHMgKGp1c3QgbXVsdGlwcm9jZXNzaW5nKQorIyBzbyBpbXBsZW1lbnQgYSB2ZXJzaW9uIGhlcmUKKyMKKworZnJvbSBRdWV1ZSBpbXBvcnQgUXVldWUKK2Zyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKKworY2xhc3MgVGhyZWFkZWRXb3JrZXIoVGhyZWFkKToKKyAgICAiIiJUaHJlYWQgZXhlY3V0aW5nIHRhc2tzIGZyb20gYSBnaXZlbiB0YXNrcyBxdWV1ZSIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrcywgd29ya2VyX2luaXQsIHdvcmtlcl9lbmQpOgorICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi50YXNrcyA9IHRhc2tzCisgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQorCisgICAgICAgIHNlbGYud29ya2VyX2luaXQgPSB3b3JrZXJfaW5pdAorICAgICAgICBzZWxmLndvcmtlcl9lbmQgPSB3b3JrZXJfZW5kCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBmcm9tIFF1ZXVlIGltcG9ydCBFbXB0eQorCisgICAgICAgIGlmIHNlbGYud29ya2VyX2luaXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLndvcmtlcl9pbml0KHNlbGYpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmdW5jLCBhcmdzLCBrYXJncyA9IHNlbGYudGFza3MuZ2V0KGJsb2NrPUZhbHNlKQorICAgICAgICAgICAgZXhjZXB0IEVtcHR5OgorICAgICAgICAgICAgICAgIGlmIHNlbGYud29ya2VyX2VuZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53b3JrZXJfZW5kKHNlbGYpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZ1bmMoc2VsZiwgKmFyZ3MsICoqa2FyZ3MpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIHByaW50IGUKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi50YXNrcy50YXNrX2RvbmUoKQorCitjbGFzcyBUaHJlYWRlZFBvb2w6CisgICAgIiIiUG9vbCBvZiB0aHJlYWRzIGNvbnN1bWluZyB0YXNrcyBmcm9tIGEgcXVldWUiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtX3dvcmtlcnMsIG51bV90YXNrcywgd29ya2VyX2luaXQ9Tm9uZSwKKyAgICAgICAgICAgIHdvcmtlcl9lbmQ9Tm9uZSk6CisgICAgICAgIHNlbGYudGFza3MgPSBRdWV1ZShudW1fdGFza3MpCisgICAgICAgIHNlbGYud29ya2VycyA9IFtdCisKKyAgICAgICAgZm9yIF8gaW4gcmFuZ2UobnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgd29ya2VyID0gVGhyZWFkZWRXb3JrZXIoc2VsZi50YXNrcywgd29ya2VyX2luaXQsIHdvcmtlcl9lbmQpCisgICAgICAgICAgICBzZWxmLndvcmtlcnMuYXBwZW5kKHdvcmtlcikKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgZm9yIHdvcmtlciBpbiBzZWxmLndvcmtlcnM6CisgICAgICAgICAgICB3b3JrZXIuc3RhcnQoKQorCisgICAgZGVmIGFkZF90YXNrKHNlbGYsIGZ1bmMsICphcmdzLCAqKmthcmdzKToKKyAgICAgICAgIiIiQWRkIGEgdGFzayB0byB0aGUgcXVldWUiIiIKKyAgICAgICAgc2VsZi50YXNrcy5wdXQoKGZ1bmMsIGFyZ3MsIGthcmdzKSkKKworICAgIGRlZiB3YWl0X2NvbXBsZXRpb24oc2VsZik6CisgICAgICAgICIiIldhaXQgZm9yIGNvbXBsZXRpb24gb2YgYWxsIHRoZSB0YXNrcyBpbiB0aGUgcXVldWUiIiIKKyAgICAgICAgc2VsZi50YXNrcy5qb2luKCkKKyAgICAgICAgZm9yIHdvcmtlciBpbiBzZWxmLndvcmtlcnM6CisgICAgICAgICAgICB3b3JrZXIuam9pbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvX19pbml0X18ucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZGE5MjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvX19pbml0X18ucHkKQEAgLTAsMCArMSwzIEBACisjIEVuYWJsZSBvdGhlciBsYXllcnMgdG8gaGF2ZSBtb2R1bGVzIGluIHRoZSBzYW1lIG5hbWVkIGRpcmVjdG9yeQorZnJvbSBwa2d1dGlsIGltcG9ydCBleHRlbmRfcGF0aAorX19wYXRoX18gPSBleHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvbWFzdGVyaW1hZ2UucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvbWFzdGVyaW1hZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIyZjllYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy9tYXN0ZXJpbWFnZS5weQpAQCAtMCwwICsxLDIwMSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IHRvIHRlc3RpbWFnZS5iYmNsYXNzIHRvIGRlcGxveSBpbWFnZXMgYW5kIHJ1bgorIyB0ZXN0cyB1c2luZyBhICJtYXN0ZXIgaW1hZ2UiIC0gdGhpcyBpcyBhICJrbm93biBnb29kIiBpbWFnZSB0aGF0IGlzCisjIGluc3RhbGxlZCBvbnRvIHRoZSBkZXZpY2UgYXMgcGFydCBvZiBpbml0aWFsIHNldHVwIGFuZCB3aWxsIGJlIGJvb3RlZCBpbnRvCisjIHdpdGggbm8gaW50ZXJhY3Rpb247IHdlIGNhbiB0aGVuIHVzZSBpdCB0byBkZXBsb3kgdGhlIGltYWdlIHRvIGJlIHRlc3RlZAorIyB0byBhIHNlY29uZCBwYXJ0aXRpb24gYmVmb3JlIHJ1bm5pbmcgdGhlIHRlc3RzLgorIworIyBGb3IgYW4gZXhhbXBsZSBtYXN0ZXIgaW1hZ2UsIHNlZSBjb3JlLWltYWdlLXRlc3RtYXN0ZXIKKyMgKG1ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS10ZXN0bWFzdGVyLmJiKQorCitpbXBvcnQgb3MKK2ltcG9ydCBiYgoraW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHRpbWUKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2ltcG9ydCBvZXFhLnRhcmdldGNvbnRyb2wKK2ltcG9ydCBvZXFhLnV0aWxzLnNzaGNvbnRyb2wgYXMgc3NoY29udHJvbAoraW1wb3J0IG9lcWEudXRpbHMuY29tbWFuZHMgYXMgY29tbWFuZHMKK2Zyb20gb2VxYS51dGlscyBpbXBvcnQgQ29tbWFuZEVycm9yCisKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAorCitjbGFzcyBNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0KG9lcWEudGFyZ2V0Y29udHJvbC5CYXNlVGFyZ2V0KToKKworICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBzdXBwb3J0ZWRfaW1hZ2VfZnN0eXBlcyA9IFsndGFyLmd6JywgJ3Rhci5iejInXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzdXBlcihNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0LCBzZWxmKS5fX2luaXRfXyhkKQorCisgICAgICAgICMgdGFyZ2V0IGlwCisgICAgICAgIGFkZHIgPSBkLmdldFZhcigiVEVTVF9UQVJHRVRfSVAiLCBUcnVlKSBvciBiYi5mYXRhbCgnUGxlYXNlIHNldCBURVNUX1RBUkdFVF9JUCB3aXRoIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBtYWNoaW5lIHlvdSB3YW50IHRvIHJ1biB0aGUgdGVzdHMgb24uJykKKyAgICAgICAgc2VsZi5pcCA9IGFkZHIuc3BsaXQoIjoiKVswXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnBvcnQgPSBhZGRyLnNwbGl0KCI6IilbMV0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBzZWxmLnBvcnQgPSBOb25lCisgICAgICAgIGJiLm5vdGUoIlRhcmdldCBJUDogJXMiICUgc2VsZi5pcCkKKyAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBkLmdldFZhcigiVEVTVF9TRVJWRVJfSVAiLCBUcnVlKQorICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXJfaXA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2lwJywgJ3JvdXRlJywgJ2dldCcsIHNlbGYuaXAgXSkuc3BsaXQoIlxuIilbMF0uc3BsaXQoKVstMV0KKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiRmFpbGVkIHRvIGRldGVybWluZSB0aGUgaG9zdCBJUCBhZGRyZXNzIChhbHRlcm5hdGl2ZWx5IHlvdSBjYW4gc2V0IFRFU1RfU0VSVkVSX0lQIHdpdGggdGhlIElQIGFkZHJlc3Mgb2YgdGhpcyBtYWNoaW5lKTogJXMiICUgZSkKKyAgICAgICAgYmIubm90ZSgiU2VydmVyIElQOiAlcyIgJSBzZWxmLnNlcnZlcl9pcCkKKworICAgICAgICAjIHRlc3Qgcm9vdGZzICsga2VybmVsCisgICAgICAgIHNlbGYuaW1hZ2VfZnN0eXBlID0gc2VsZi5nZXRfaW1hZ2VfZnN0eXBlKGQpCisgICAgICAgIHNlbGYucm9vdGZzID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksIGQuZ2V0VmFyKCJJTUFHRV9MSU5LX05BTUUiLCBUcnVlKSArICcuJyArIHNlbGYuaW1hZ2VfZnN0eXBlKQorICAgICAgICBzZWxmLmtlcm5lbCA9IG9zLnBhdGguam9pbihkLmdldFZhcigiREVQTE9ZX0RJUl9JTUFHRSIsIFRydWUpLCBkLmdldFZhcigiS0VSTkVMX0lNQUdFVFlQRSIsIEZhbHNlKSArICctJyArIGQuZ2V0VmFyKCdNQUNISU5FJywgRmFsc2UpICsgJy5iaW4nKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc2VsZi5yb290ZnMpOgorICAgICAgICAgICAgIyB3ZSBjb3VsZCd2ZSBjaGVja2VkIHRoYXQgSU1BR0VfRlNUWVBFUyBjb250YWlucyB0YXIuZ3ogYnV0IHRoZSBjb25maWcgZm9yIHJ1bm5pbmcgdGVzdGltYWdlIG1pZ2h0IG5vdCBiZQorICAgICAgICAgICAgIyB0aGUgc2FtZSBhcyB0aGUgY29uZmlnIHdpdGggd2hpY2ggdGhlIGltYWdlIHdhcyBidWlsZCwgaWUKKyAgICAgICAgICAgICMgeW91IGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIHdpdGggSU1BR0VfRlNUWVBFUyArPSAidGFyLmd6IgorICAgICAgICAgICAgIyBhbmQgeW91ciBhdXRvYnVpbGRlciBvdmVyd3JpdGVzIHRoZSBjb25maWcsIGFkZHMgdGhlIHRlc3QgYml0cyBhbmQgcnVucyBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byAtYyB0ZXN0aW1hZ2UKKyAgICAgICAgICAgIGJiLmZhdGFsKCJObyByb290ZnMgZm91bmQuIERpZCB5b3UgYnVpbGQgdGhlIGltYWdlID9cbklmIHllcywgZGlkIHlvdSBidWlsZCBpdCB3aXRoIElNQUdFX0ZTVFlQRVMgKz0gXCJ0YXIuZ3pcIiA/IFwKKyAgICAgICAgICAgICAgICAgICAgICBcbkV4cGVjdGVkIHBhdGg6ICVzIiAlIHNlbGYucm9vdGZzKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc2VsZi5rZXJuZWwpOgorICAgICAgICAgICAgYmIuZmF0YWwoIk5vIGtlcm5lbCBmb3VuZC4gRXhwZWN0ZWQgcGF0aDogJXMiICUgc2VsZi5rZXJuZWwpCisKKyAgICAgICAgIyBtYXN0ZXIgc3NoIGNvbm5lY3Rpb24KKyAgICAgICAgc2VsZi5tYXN0ZXIgPSBOb25lCisgICAgICAgICMgaWYgdGhlIHVzZXIga25vd3Mgd2hhdCB0aGV5IGFyZSBkb2luZywgdGhlbiBieSBhbGwgbWVhbnMuLi4KKyAgICAgICAgc2VsZi51c2VyX2NtZHMgPSBkLmdldFZhcigiVEVTVF9ERVBMT1lfQ01EUyIsIFRydWUpCisgICAgICAgIHNlbGYuZGVwbG95X2NtZHMgPSBOb25lCisKKyAgICAgICAgIyB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIHRoYXQgY29udHJvbHMgdGhlIHBvd2VyIGZvciBhIGJvYXJkCisgICAgICAgICMgZS5nOiBURVNUX1BPV0VSQ09OVFJPTF9DTUQgPSAiL2hvbWUvdXNlci9teXNjcmlwdHMvcG93ZXJjb250cm9sLnB5ICR7TUFDSElORX0gd2hhdC1ldmVyLW90aGVyLWFyZ3MtdGhlLXNjcmlwdC13YW50cyIKKyAgICAgICAgIyB0aGUgY29tbWFuZCBzaG91bGQgdGFrZSBhcyB0aGUgbGFzdCBhcmd1bWVudCAib2ZmIiBhbmQgIm9uIiBhbmQgImN5Y2xlIiAob2ZmLCBvbikKKyAgICAgICAgc2VsZi5wb3dlcmNvbnRyb2xfY21kID0gZC5nZXRWYXIoIlRFU1RfUE9XRVJDT05UUk9MX0NNRCIsIFRydWUpIG9yIE5vbmUKKyAgICAgICAgc2VsZi5wb3dlcmNvbnRyb2xfYXJncyA9IGQuZ2V0VmFyKCJURVNUX1BPV0VSQ09OVFJPTF9FWFRSQV9BUkdTIiwgRmFsc2UpIG9yICIiCisKKyAgICAgICAgc2VsZi5zZXJpYWxjb250cm9sX2NtZCA9IGQuZ2V0VmFyKCJURVNUX1NFUklBTENPTlRST0xfQ01EIiwgVHJ1ZSkgb3IgTm9uZQorICAgICAgICBzZWxmLnNlcmlhbGNvbnRyb2xfYXJncyA9IGQuZ2V0VmFyKCJURVNUX1NFUklBTENPTlRST0xfRVhUUkFfQVJHUyIsIEZhbHNlKSBvciAiIgorCisgICAgICAgIHNlbGYub3JpZ2VudiA9IG9zLmVudmlyb24KKyAgICAgICAgaWYgc2VsZi5wb3dlcmNvbnRyb2xfY21kIG9yIHNlbGYuc2VyaWFsY29udHJvbF9jbWQ6CisgICAgICAgICAgICAjIHRoZSBleHRlcm5hbCBzY3JpcHQgZm9yIGNvbnRyb2xsaW5nIHBvd2VyIG1pZ2h0IHVzZSBzc2gKKyAgICAgICAgICAgICMgc3NoICsga2V5cyBtZWFucyB3ZSBuZWVkIHRoZSBvcmlnaW5hbCB1c2VyIGVudgorICAgICAgICAgICAgYmJvcmlnZW52ID0gZC5nZXRWYXIoIkJCX09SSUdFTlYiLCBGYWxzZSkgb3Ige30KKyAgICAgICAgICAgIGZvciBrZXkgaW4gYmJvcmlnZW52OgorICAgICAgICAgICAgICAgIHZhbCA9IGJib3JpZ2Vudi5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICAgICAgICAgIGlmIHZhbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5vcmlnZW52W2tleV0gPSBzdHIodmFsKQorCisgICAgICAgIGlmIHNlbGYucG93ZXJjb250cm9sX2NtZDoKKyAgICAgICAgICAgIGlmIHNlbGYucG93ZXJjb250cm9sX2FyZ3M6CisgICAgICAgICAgICAgICAgc2VsZi5wb3dlcmNvbnRyb2xfY21kID0gIiVzICVzIiAlIChzZWxmLnBvd2VyY29udHJvbF9jbWQsIHNlbGYucG93ZXJjb250cm9sX2FyZ3MpCisgICAgICAgIGlmIHNlbGYuc2VyaWFsY29udHJvbF9jbWQ6CisgICAgICAgICAgICBpZiBzZWxmLnNlcmlhbGNvbnRyb2xfYXJnczoKKyAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbGNvbnRyb2xfY21kID0gIiVzICVzIiAlIChzZWxmLnNlcmlhbGNvbnRyb2xfY21kLCBzZWxmLnNlcmlhbGNvbnRyb2xfYXJncykKKworICAgIGRlZiBwb3dlcl9jdGwoc2VsZiwgbXNnKToKKyAgICAgICAgaWYgc2VsZi5wb3dlcmNvbnRyb2xfY21kOgorICAgICAgICAgICAgY21kID0gIiVzICVzIiAlIChzZWxmLnBvd2VyY29udHJvbF9jbWQsIG1zZykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb21tYW5kcy5ydW5DbWQoY21kLCBhc3NlcnRfZXJyb3I9RmFsc2UsIHByZWV4ZWNfZm49b3Muc2V0c2lkLCBlbnY9c2VsZi5vcmlnZW52KQorICAgICAgICAgICAgZXhjZXB0IENvbW1hbmRFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKHN0cihlKSkKKworICAgIGRlZiBwb3dlcl9jeWNsZShzZWxmLCBjb25uKToKKyAgICAgICAgaWYgc2VsZi5wb3dlcmNvbnRyb2xfY21kOgorICAgICAgICAgICAgIyBiZSBuaWNlLCBkb24ndCBqdXN0IGN1dCBwb3dlcgorICAgICAgICAgICAgY29ubi5ydW4oInNodXRkb3duIC1oIG5vdyIpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICAgICAgc2VsZi5wb3dlcl9jdGwoImN5Y2xlIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gY29ubi5ydW4oInJlYm9vdCIpCisgICAgICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgICAgICBiYi5lcnJvcigiRmFpbGVkIHJlYm9vdGluZyB0YXJnZXQgYW5kIG5vIHBvd2VyIGNvbnRyb2wgY29tbWFuZCBkZWZpbmVkLiBZb3UgbmVlZCB0byBtYW51YWxseSByZXNldCB0aGUgZGV2aWNlLlxuJXMiICUgb3V0cHV0KQorCisgICAgZGVmIF93YWl0X3VudGlsX2Jvb3RlZChzZWxmKToKKyAgICAgICAgJycnIFdhaXRzIHVudGlsIHRoZSB0YXJnZXQgZGV2aWNlIGhhcyBib290ZWQgKGlmIHdlIGhhdmUganVzdCBwb3dlciBjeWNsZWQgaXQpICcnJworICAgICAgICAjIFN1YmNsYXNzZXMgd2l0aCBiZXR0ZXIgbWV0aG9kcyBvZiBkZXRlcm1pbmluZyBib290IGNhbiBvdmVycmlkZSB0aGlzCisgICAgICAgIHRpbWUuc2xlZXAoMTIwKQorCisgICAgZGVmIGRlcGxveShzZWxmKToKKyAgICAgICAgIyBiYXNlIGNsYXNzIGp1c3Qgc2V0cyB0aGUgc3NoIGxvZyBmaWxlIGZvciB1cworICAgICAgICBzdXBlcihNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0LCBzZWxmKS5kZXBsb3koKQorICAgICAgICBzZWxmLm1hc3RlciA9IHNzaGNvbnRyb2wuU1NIQ29udHJvbChpcD1zZWxmLmlwLCBsb2dmaWxlPXNlbGYuc3NobG9nLCB0aW1lb3V0PTYwMCwgcG9ydD1zZWxmLnBvcnQpCisgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc2VsZi5tYXN0ZXIucnVuKCJjYXQgL2V0Yy9tYXN0ZXJpbWFnZSIpCisgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgIyBXZSdyZSBub3QgYm9vdGVkIGludG8gdGhlIG1hc3RlciBpbWFnZSwgc28gdHJ5IHJlYm9vdGluZworICAgICAgICAgICAgYmIucGxhaW4oIiVzIC0gYm9vdGluZyBpbnRvIHRoZSBtYXN0ZXIgaW1hZ2UiICUgc2VsZi5wbikKKyAgICAgICAgICAgIHNlbGYucG93ZXJfY3RsKCJjeWNsZSIpCisgICAgICAgICAgICBzZWxmLl93YWl0X3VudGlsX2Jvb3RlZCgpCisKKyAgICAgICAgYmIucGxhaW4oIiVzIC0gZGVwbG95aW5nIGltYWdlIG9uIHRhcmdldCIgJSBzZWxmLnBuKQorICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHNlbGYubWFzdGVyLnJ1bigiY2F0IC9ldGMvbWFzdGVyaW1hZ2UiKQorICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJObyBzc2ggY29ubmVjdGl2aXR5IG9yIHRhcmdldCBpc24ndCBydW5uaW5nIGEgbWFzdGVyIGltYWdlLlxuJXMiICUgb3V0cHV0KQorICAgICAgICBpZiBzZWxmLnVzZXJfY21kczoKKyAgICAgICAgICAgIHNlbGYuZGVwbG95X2NtZHMgPSBzZWxmLnVzZXJfY21kcy5zcGxpdCgiXG4iKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9kZXBsb3koKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiRmFpbGVkIGRlcGxveWluZyB0ZXN0IGltYWdlOiAlcyIgJSBlKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9kZXBsb3koc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIGJiLnBsYWluKCIlcyAtIGJvb3QgdGVzdCBpbWFnZSBvbiB0YXJnZXQiICUgc2VsZi5wbikKKyAgICAgICAgc2VsZi5fc3RhcnQoKQorICAgICAgICAjIHNldCB0aGUgc3NoIG9iamVjdCBmb3IgdGhlIHRhcmdldC90ZXN0IGltYWdlCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IHNzaGNvbnRyb2wuU1NIQ29udHJvbChzZWxmLmlwLCBsb2dmaWxlPXNlbGYuc3NobG9nLCBwb3J0PXNlbGYucG9ydCkKKyAgICAgICAgYmIucGxhaW4oIiVzIC0gc3RhcnQgcnVubmluZyB0ZXN0cyIgJSBzZWxmLnBuKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9zdGFydChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIGJiLnBsYWluKCIlcyAtIHJlYm9vdC9wb3dlcmN5Y2xlIHRhcmdldCIgJSBzZWxmLnBuKQorICAgICAgICBzZWxmLnBvd2VyX2N5Y2xlKHNlbGYuY29ubmVjdGlvbikKKworCitjbGFzcyBHdW1taWJvb3RUYXJnZXQoTWFzdGVySW1hZ2VIYXJkd2FyZVRhcmdldCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHN1cGVyKEd1bW1pYm9vdFRhcmdldCwgc2VsZikuX19pbml0X18oZCkKKyAgICAgICAgIyB0aGlzIHRoZSB2YWx1ZSB3ZSBuZWVkIHRvIHNldCBpbiB0aGUgTG9hZGVyRW50cnlPbmVTaG90IEVGSSB2YXJpYWJsZQorICAgICAgICAjIHNvIHRoZSBzeXN0ZW0gYm9vdHMgdGhlICd0ZXN0JyBib290bG9hZGVyIGxhYmVsIGFuZCBub3QgdGhlIGRlZmF1bHQKKyAgICAgICAgIyBUaGUgZmlyc3QgZm91ciBieXRlcyBhcmUgRUZJIGJpdHMsIGFuZCB0aGUgcmVzdCBpcyBhbiB1dGYtMTZsZSBzdHJpbmcKKyAgICAgICAgIyAoRUZJIHZhcnMgdmFsdWVzIG5lZWQgdG8gYmUgdXRmLTE2KQorICAgICAgICAjICQgZWNobyAtZW4gInRlc3RcMCIgfCBpY29udiAtZiBhc2NpaSAtdCB1dGYtMTZsZSB8IGhleGR1bXAgLUMKKyAgICAgICAgIyAwMDAwMDAwMCAgNzQgMDAgNjUgMDAgNzMgMDAgNzQgMDAgIDAwIDAwICAgICAgICAgICAgICAgICAgICB8dC5lLnMudC4uLnwKKyAgICAgICAgc2VsZi5lZml2YXJ2YWx1ZSA9IHInXHgwN1x4MDBceDAwXHgwMFx4NzRceDAwXHg2NVx4MDBceDczXHgwMFx4NzRceDAwXHgwMFx4MDAnCisgICAgICAgIHNlbGYuZGVwbG95X2NtZHMgPSBbCisgICAgICAgICAgICAgICAgJ21vdW50IC1MIGJvb3QgL2Jvb3QnLAorICAgICAgICAgICAgICAgICdta2RpciAtcCAvbW50L3Rlc3Ryb290ZnMnLAorICAgICAgICAgICAgICAgICdtb3VudCAtTCB0ZXN0cm9vdGZzIC9tbnQvdGVzdHJvb3RmcycsCisgICAgICAgICAgICAgICAgJ21vZHByb2JlIGVmaXZhcmZzJywKKyAgICAgICAgICAgICAgICAnbW91bnQgLXQgZWZpdmFyZnMgZWZpdmFyZnMgL3N5cy9maXJtd2FyZS9lZmkvZWZpdmFycycsCisgICAgICAgICAgICAgICAgJ2NwIH4vdGVzdC1rZXJuZWwgL2Jvb3QnLAorICAgICAgICAgICAgICAgICdybSAtcmYgL21udC90ZXN0cm9vdGZzLyonLAorICAgICAgICAgICAgICAgICd0YXIgeHZmIH4vdGVzdC1yb290ZnMuJXMgLUMgL21udC90ZXN0cm9vdGZzJyAlIHNlbGYuaW1hZ2VfZnN0eXBlLAorICAgICAgICAgICAgICAgICdwcmludGYgIiVzIiA+IC9zeXMvZmlybXdhcmUvZWZpL2VmaXZhcnMvTG9hZGVyRW50cnlPbmVTaG90LTRhNjdiMDgyLTBhNGMtNDFjZi1iNmM3LTQ0MGIyOWJiOGM0ZicgJSBzZWxmLmVmaXZhcnZhbHVlCisgICAgICAgICAgICAgICAgXQorCisgICAgZGVmIF9kZXBsb3koc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIHRoZXNlIGFyZW4ndCBtb3VudGVkCisgICAgICAgIHNlbGYubWFzdGVyLnJ1bigidW1vdW50IC9ib290OyB1bW91bnQgL21udC90ZXN0cm9vdGZzOyB1bW91bnQgL3N5cy9maXJtd2FyZS9lZmkvZWZpdmFyczsiKQorICAgICAgICAjIGZyb20gbm93IG9uLCBldmVyeSBkZXBsb3kgY21kIHNob3VsZCByZXR1cm4gMAorICAgICAgICAjIGVsc2UgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duIGJ5IHNzaGNvbnRyb2wKKyAgICAgICAgc2VsZi5tYXN0ZXIuaWdub3JlX3N0YXR1cyA9IEZhbHNlCisgICAgICAgIHNlbGYubWFzdGVyLmNvcHlfdG8oc2VsZi5yb290ZnMsICJ+L3Rlc3Qtcm9vdGZzLiIgKyBzZWxmLmltYWdlX2ZzdHlwZSkKKyAgICAgICAgc2VsZi5tYXN0ZXIuY29weV90byhzZWxmLmtlcm5lbCwgIn4vdGVzdC1rZXJuZWwiKQorICAgICAgICBmb3IgY21kIGluIHNlbGYuZGVwbG95X2NtZHM6CisgICAgICAgICAgICBzZWxmLm1hc3Rlci5ydW4oY21kKQorCisgICAgZGVmIF9zdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIHNlbGYucG93ZXJfY3ljbGUoc2VsZi5tYXN0ZXIpCisgICAgICAgICMgdGhlcmUgYXJlIGJldHRlciB3YXlzIHRoYW4gYSB0aW1lb3V0IGJ1dCB0aGlzIHNob3VsZCB3b3JrIGZvciBub3cKKyAgICAgICAgdGltZS5zbGVlcCgxMjApCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvdGVzdHRhcmdldGxvYWRlci5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy90ZXN0dGFyZ2V0bG9hZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYjdiMWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvdGVzdHRhcmdldGxvYWRlci5weQpAQCAtMCwwICsxLDcwIEBACitpbXBvcnQgdHlwZXMKK2ltcG9ydCBiYgoraW1wb3J0IG9zCisKKyMgVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZyBhIHRlc3QgdGFyZ2V0IGNvbnRyb2xsZXIKK2NsYXNzIFRlc3RUYXJnZXRMb2FkZXI6CisKKyAgICAjIFNlYXJjaCBvZXFhLmNvbnRyb2xsZXJzIG1vZHVsZSBkaXJlY3RvcnkgZm9yIGFuZCByZXR1cm4gYSBjb250cm9sbGVyICAKKyAgICAjIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHRhcmdldCBuYW1lLiAKKyAgICAjIEF0dHJpYnV0ZUVycm9yIHJhaXNlZCBpZiBub3QgZm91bmQuCisgICAgIyBJbXBvcnRFcnJvciByYWlzZWQgaWYgYSBwcm92aWRlZCBtb2R1bGUgY2FuIG5vdCBiZSBpbXBvcnRlZC4KKyAgICBkZWYgZ2V0X2NvbnRyb2xsZXJfbW9kdWxlKHNlbGYsIHRhcmdldCwgYmJwYXRoKToKKyAgICAgICAgY29udHJvbGxlcnNsaXN0ID0gc2VsZi5nZXRfY29udHJvbGxlcl9tb2R1bGVuYW1lcyhiYnBhdGgpCisgICAgICAgIGJiLm5vdGUoIkF2YWlsYWJsZSBjb250cm9sbGVyIG1vZHVsZXM6ICVzIiAlIHN0cihjb250cm9sbGVyc2xpc3QpKQorICAgICAgICBjb250cm9sbGVyID0gc2VsZi5sb2FkX2NvbnRyb2xsZXJfZnJvbV9uYW1lKHRhcmdldCwgY29udHJvbGxlcnNsaXN0KQorICAgICAgICByZXR1cm4gY29udHJvbGxlcgorCisgICAgIyBSZXR1cm4gYSBsaXN0IG9mIGFsbCBweXRob24gbW9kdWxlcyBpbiBsaWIvb2VxYS9jb250cm9sbGVycyBmb3IgZWFjaAorICAgICMgbGF5ZXIgaW4gYmJwYXRoCisgICAgZGVmIGdldF9jb250cm9sbGVyX21vZHVsZW5hbWVzKHNlbGYsIGJicGF0aCk6CisKKyAgICAgICAgY29udHJvbGxlcnNsaXN0ID0gW10KKworICAgICAgICBkZWYgYWRkX2NvbnRyb2xsZXJfbGlzdChwYXRoKToKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGF0aCwgJ19faW5pdF9fLnB5JykpOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCdDb250cm9sbGVycyBkaXJlY3RvcnkgJXMgZXhpc3RzIGJ1dCBpcyBtaXNzaW5nIF9faW5pdF9fLnB5JyAlIHBhdGgpCisgICAgICAgICAgICBmaWxlcyA9IHNvcnRlZChbZiBmb3IgZiBpbiBvcy5saXN0ZGlyKHBhdGgpIGlmIGYuZW5kc3dpdGgoJy5weScpIGFuZCBub3QgZi5zdGFydHN3aXRoKCdfJyldKQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gJ29lcWEuY29udHJvbGxlcnMuJyArIGZbOi0zXQorICAgICAgICAgICAgICAgIGlmIG1vZHVsZSBub3QgaW4gY29udHJvbGxlcnNsaXN0OgorICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyc2xpc3QuYXBwZW5kKG1vZHVsZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJEdXBsaWNhdGUgY29udHJvbGxlciBtb2R1bGUgZm91bmQgZm9yICVzLCBvbmx5IG9uZSBhZGRlZC4gTGF5ZXJzIHNob3VsZCBjcmVhdGUgdW5pcXVlIGNvbnRyb2xsZXIgbW9kdWxlIG5hbWVzIiAlIG1vZHVsZSkKKworICAgICAgICBmb3IgcCBpbiBiYnBhdGg6CisgICAgICAgICAgICBjb250cm9sbGVycGF0aCA9IG9zLnBhdGguam9pbihwLCAnbGliJywgJ29lcWEnLCAnY29udHJvbGxlcnMnKQorICAgICAgICAgICAgYmIuZGVidWcoMiwgJ1NlYXJjaGluZyBmb3IgdGFyZ2V0IGNvbnRyb2xsZXJzIGluICVzJyAlIGNvbnRyb2xsZXJwYXRoKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29udHJvbGxlcnBhdGgpOgorICAgICAgICAgICAgICAgIGFkZF9jb250cm9sbGVyX2xpc3QoY29udHJvbGxlcnBhdGgpCisgICAgICAgIHJldHVybiBjb250cm9sbGVyc2xpc3QKKworICAgICMgU2VhcmNoIGZvciBhbmQgcmV0dXJuIGEgY29udHJvbGxlciBmcm9tIGdpdmVuIHRhcmdldCBuYW1lIGFuZAorICAgICMgc2V0IG9mIG1vZHVsZSBuYW1lcy4gCisgICAgIyBSYWlzZSBBdHRyaWJ1dGVFcnJvciBpZiBub3QgZm91bmQuCisgICAgIyBSYWlzZSBJbXBvcnRFcnJvciBpZiBhIHByb3ZpZGVkIG1vZHVsZSBjYW4gbm90IGJlIGltcG9ydGVkCisgICAgZGVmIGxvYWRfY29udHJvbGxlcl9mcm9tX25hbWUoc2VsZiwgdGFyZ2V0LCBtb2R1bGVuYW1lcyk6CisgICAgICAgIGZvciBuYW1lIGluIG1vZHVsZW5hbWVzOgorICAgICAgICAgICAgb2JqID0gc2VsZi5sb2FkX2NvbnRyb2xsZXJfZnJvbV9tb2R1bGUodGFyZ2V0LCBuYW1lKQorICAgICAgICAgICAgaWYgb2JqOgorICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIlVuYWJsZSB0byBsb2FkIHswfSBmcm9tIGF2YWlsYWJsZSBtb2R1bGVzOiB7MX0iLmZvcm1hdCh0YXJnZXQsIHN0cihtb2R1bGVuYW1lcykpKQorCisgICAgIyBTZWFyY2ggZm9yIGFuZCByZXR1cm4gYSBjb250cm9sbGVyIG9yIE5vbmUgZnJvbSBnaXZlbiBtb2R1bGUgbmFtZQorICAgIGRlZiBsb2FkX2NvbnRyb2xsZXJfZnJvbV9tb2R1bGUoc2VsZiwgdGFyZ2V0LCBtb2R1bGVuYW1lKToKKyAgICAgICAgb2JqID0gTm9uZQorICAgICAgICAjIGltcG9ydCBtb2R1bGUsIGFsbG93aW5nIGl0IHRvIHJhaXNlIGltcG9ydCBleGNlcHRpb24KKyAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXyhtb2R1bGVuYW1lLCBnbG9iYWxzKCksIGxvY2FscygpLCBbdGFyZ2V0XSkKKyAgICAgICAgIyBsb29rIGZvciB0YXJnZXQgY2xhc3MgaW4gdGhlIG1vZHVsZSwgY2F0Y2hpbmcgYW55IGV4Y2VwdGlvbnMgYXMgaXQKKyAgICAgICAgIyBpcyB2YWxpZCB0aGF0IGEgbW9kdWxlIG1heSBub3QgaGF2ZSB0aGUgdGFyZ2V0IGNsYXNzLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG1vZHVsZSwgdGFyZ2V0KQorICAgICAgICAgICAgaWYgb2JqOiAKKyAgICAgICAgICAgICAgICBmcm9tIG9lcWEudGFyZ2V0Y29udHJvbCBpbXBvcnQgQmFzZVRhcmdldAorICAgICAgICAgICAgICAgIGlmIChub3QgaXNpbnN0YW5jZShvYmosICh0eXBlLCB0eXBlcy5DbGFzc1R5cGUpKSk6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlRhcmdldCB7MH0gZm91bmQsIGJ1dCBub3Qgb2YgdHlwZSBDbGFzcyIuZm9ybWF0KHRhcmdldCkpCisgICAgICAgICAgICAgICAgaWYoIG5vdCBpc3N1YmNsYXNzKG9iaiwgQmFzZVRhcmdldCkpOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJUYXJnZXQgezB9IGZvdW5kLCBidXQgc3ViY2xhc3MgaXMgbm90IEJhc2VUYXJnZXQiLmZvcm1hdCh0YXJnZXQpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBvYmogPSBOb25lCisgICAgICAgIHJldHVybiBvYmoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9vZXRlc3QucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvb2V0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZTY4ZDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvb2V0ZXN0LnB5CkBAIC0wLDAgKzEsMjE0IEBACisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBNYWluIHVuaXR0ZXN0IG1vZHVsZSB1c2VkIGJ5IHRlc3RpbWFnZS5iYmNsYXNzCisjIFRoaXMgcHJvdmlkZXMgdGhlIG9lUnVudGltZVRlc3QgYmFzZSBjbGFzcyB3aGljaCBpcyBpbmhlcml0ZWQgYnkgYWxsIHRlc3RzIGluIG1ldGEvbGliL29lcWEvcnVudGltZS4KKworIyBJdCBhbHNvIGhhcyBzb21lIGhlbHBlciBmdW5jdGlvbnMgYW5kIGl0J3MgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHN0YXJ0aW5nIHRoZSB0ZXN0cworCitpbXBvcnQgb3MsIHJlLCBtbWFwCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGJiCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgTG9nUmVzdWx0cywgZ2V0dGFnCitmcm9tIHN5cyBpbXBvcnQgZXhjX2luZm8sIGV4Y19jbGVhcgorCitkZWYgZ2V0VmFyKG9iaik6CisgICAgI2V4dGVuZCBmb3JtIGRpY3QsIGlmIGEgdmFyaWFibGUgZGlkbid0IGV4aXN0cywgbmVlZCBmaW5kIGl0IGluIHRlc3RjYXNlCisgICAgY2xhc3MgVmFyRGljdChkaWN0KToKKyAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICByZXR1cm4gZ2V0dGFnKG9iaiwga2V5KQorICAgIHJldHVybiBWYXJEaWN0KCkKKworZGVmIGNoZWNrVGFncyh0YywgdGFnZXhwKToKKyAgICByZXR1cm4gZXZhbCh0YWdleHAsIE5vbmUsIGdldFZhcih0YykpCisKKworZGVmIGZpbHRlckJ5VGFnRXhwKHRlc3RzdWl0ZSwgdGFnZXhwKToKKyAgICBpZiBub3QgdGFnZXhwOgorICAgICAgICByZXR1cm4gdGVzdHN1aXRlCisgICAgY2FzZUxpc3QgPSBbXQorICAgIGZvciBlYWNoIGluIHRlc3RzdWl0ZToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZWFjaCwgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZSk6CisgICAgICAgICAgICBpZiBjaGVja1RhZ3MoZWFjaCwgdGFnZXhwKToKKyAgICAgICAgICAgICAgICBjYXNlTGlzdC5hcHBlbmQoZWFjaCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNhc2VMaXN0LmFwcGVuZChmaWx0ZXJCeVRhZ0V4cChlYWNoLCB0YWdleHApKQorICAgIHJldHVybiB0ZXN0c3VpdGUuX19jbGFzc19fKGNhc2VMaXN0KQorCitkZWYgbG9hZFRlc3RzKHRjLCB0eXBlPSJydW50aW1lIik6CisgICAgaWYgdHlwZSA9PSAicnVudGltZSI6CisgICAgICAgICMgc2V0IHRoZSBjb250ZXh0IG9iamVjdCBwYXNzZWQgZnJvbSB0aGUgdGVzdCBjbGFzcworICAgICAgICBzZXRhdHRyKG9lVGVzdCwgInRjIiwgdGMpCisgICAgICAgICMgc2V0IHBzIGNvbW1hbmQgdG8gdXNlCisgICAgICAgIHNldGF0dHIob2VSdW50aW1lVGVzdCwgInBzY21kIiwgInBzIC1lZiIgaWYgb2VUZXN0Lmhhc1BhY2thZ2UoInByb2NwcyIpIGVsc2UgInBzIikKKyAgICAgICAgIyBwcmVwYXJlIHRlc3Qgc3VpdGUsIGxvYWRlciBhbmQgcnVubmVyCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBlbGlmIHR5cGUgPT0gInNkayI6CisgICAgICAgICMgc2V0IHRoZSBjb250ZXh0IG9iamVjdCBwYXNzZWQgZnJvbSB0aGUgdGVzdCBjbGFzcworICAgICAgICBzZXRhdHRyKG9lVGVzdCwgInRjIiwgdGMpCisgICAgdGVzdGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgIHRlc3Rsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSBOb25lCisgICAgc3VpdGVzID0gW3Rlc3Rsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUobmFtZSkgZm9yIG5hbWUgaW4gdGMudGVzdHNsaXN0XQorICAgIHN1aXRlcyA9IGZpbHRlckJ5VGFnRXhwKHN1aXRlcywgZ2V0YXR0cih0YywgInRhZ2V4cCIsIE5vbmUpKQorCisgICAgZGVmIGdldFRlc3RzKHRlc3QpOgorICAgICAgICAnJydSZXR1cm4gYWxsIGluZGl2aWR1YWwgdGVzdHMgZXhlY3V0ZWQgd2hlbiBydW5uaW5nIHRoZSBzdWl0ZS4nJycKKyAgICAgICAgIyBVbmZvcnR1bmF0ZWx5IHVuaXR0ZXN0IGRvZXMgbm90IGhhdmUgYW4gQVBJIGZvciB0aGlzLCBzbyB3ZSBoYXZlCisgICAgICAgICMgdG8gcmVseSBvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBUaGlzIG9ubHkgbmVlZHMgdG8gd29yaworICAgICAgICAjIGZvciBUZXN0U3VpdGUgY29udGFpbmluZyBUZXN0Q2FzZS4KKyAgICAgICAgbWV0aG9kID0gZ2V0YXR0cih0ZXN0LCAnX3Rlc3RNZXRob2ROYW1lJywgTm9uZSkKKyAgICAgICAgaWYgbWV0aG9kOgorICAgICAgICAgICAgIyBsZWFmIGNhc2U6IGEgVGVzdENhc2UKKyAgICAgICAgICAgIHlpZWxkIHRlc3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgTG9vayBpbnRvIFRlc3RTdWl0ZS4KKyAgICAgICAgICAgIHRlc3RzID0gZ2V0YXR0cih0ZXN0LCAnX3Rlc3RzJywgW10pCisgICAgICAgICAgICBmb3IgdDEgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgZm9yIHQyIGluIGdldFRlc3RzKHQxKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgdDIKKworICAgICMgRGV0ZXJtaW5lIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHN1aXRlcyBieSBsb29raW5nIGZvciBAc2tpcFVubGVzc1Bhc3NlZAorICAgICMgbWV0aG9kIGFubm90YXRpb25zLiBTdWl0ZSBBIGRlcGVuZHMgb24gc3VpdGUgQiBpZiBhbnkgbWV0aG9kIGluIEEKKyAgICAjIGRlcGVuZHMgb24gYSBtZXRob2Qgb24gQi4KKyAgICBmb3Igc3VpdGUgaW4gc3VpdGVzOgorICAgICAgICBzdWl0ZS5kZXBlbmRlbmNpZXMgPSBbXQorICAgICAgICBzdWl0ZS5kZXB0aCA9IDAKKyAgICAgICAgZm9yIHRlc3QgaW4gZ2V0VGVzdHMoc3VpdGUpOgorICAgICAgICAgICAgbWV0aG9kbmFtZSA9IGdldGF0dHIodGVzdCwgJ190ZXN0TWV0aG9kTmFtZScsIE5vbmUpCisgICAgICAgICAgICBpZiBtZXRob2RuYW1lOgorICAgICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIodGVzdCwgbWV0aG9kbmFtZSkKKyAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gZ2V0YXR0cihtZXRob2QsICdfZGVwZW5kc19vbicsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgZGVwZW5kc19vbjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlcF9zdWl0ZSBpbiBzdWl0ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXBlbmRzX29uIGluIFtnZXRhdHRyKHQsICdfdGVzdE1ldGhvZE5hbWUnLCBOb25lKSBmb3IgdCBpbiBnZXRUZXN0cyhkZXBfc3VpdGUpXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXBfc3VpdGUgbm90IGluIHN1aXRlLmRlcGVuZGVuY2llcyBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcF9zdWl0ZSBpcyBub3Qgc3VpdGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlLmRlcGVuZGVuY2llcy5hcHBlbmQoZGVwX3N1aXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJUZXN0ICVzIHdhcyBkZWNsYXJlZCBhcyBAc2tpcFVubGVzc1Bhc3NlZCgnJXMnKSBidXQgdGhhdCB0ZXN0IGlzIGVpdGhlciBub3QgZGVmaW5lZCBvciBub3QgYWN0aXZlLiBXaWxsIHJ1biB0aGUgdGVzdCBhbnl3YXkuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0LCBkZXBlbmRzX29uKSkKKyAgICAjIFVzZSBicnV0ZS1mb3JjZSB0b3BvbG9naWNhbCBzb3J0IHRvIGRldGVybWluZSBvcmRlcmluZy4gU29ydCBieQorICAgICMgZGVwdGggKGhpZ2hlciBkZXB0aCA9IG11c3QgcnVuIGxhdGVyKSwgd2l0aCBvcmlnaW5hbCBvcmRlcmluZyB0bworICAgICMgYnJlYWsgdGllcy4KKyAgICBkZWYgc2V0X3N1aXRlX2RlcHRoKHN1aXRlKToKKyAgICAgICAgZm9yIGRlcCBpbiBzdWl0ZS5kZXBlbmRlbmNpZXM6CisgICAgICAgICAgICBuZXdfZGVwdGggPSBzZXRfc3VpdGVfZGVwdGgoZGVwKSArIDEKKyAgICAgICAgICAgIGlmIG5ld19kZXB0aCA+IHN1aXRlLmRlcHRoOgorICAgICAgICAgICAgICAgIHN1aXRlLmRlcHRoID0gbmV3X2RlcHRoCisgICAgICAgIHJldHVybiBzdWl0ZS5kZXB0aAorICAgIGZvciBpbmRleCwgc3VpdGUgaW4gZW51bWVyYXRlKHN1aXRlcyk6CisgICAgICAgIHNldF9zdWl0ZV9kZXB0aChzdWl0ZSkKKyAgICAgICAgc3VpdGUuaW5kZXggPSBpbmRleAorICAgIHN1aXRlcy5zb3J0KGNtcD1sYW1iZGEgYSxiOiBjbXAoKGEuZGVwdGgsIGEuaW5kZXgpLCAoYi5kZXB0aCwgYi5pbmRleCkpKQorICAgIHJldHVybiB0ZXN0bG9hZGVyLnN1aXRlQ2xhc3Moc3VpdGVzKQorCitkZWYgcnVuVGVzdHModGMsIHR5cGU9InJ1bnRpbWUiKToKKworICAgIHN1aXRlID0gbG9hZFRlc3RzKHRjLCB0eXBlKQorICAgIGJiLm5vdGUoIlRlc3QgbW9kdWxlcyAgJXMiICUgdGMudGVzdHNsaXN0KQorICAgIGlmIGhhc2F0dHIodGMsICJ0YWdleHAiKSBhbmQgdGMudGFnZXhwOgorICAgICAgICBiYi5ub3RlKCJGaWx0ZXIgdGVzdCBjYXNlcyBieSB0YWdzOiAlcyIgJSB0Yy50YWdleHApCisgICAgYmIubm90ZSgiRm91bmQgJXMgdGVzdHMiICUgc3VpdGUuY291bnRUZXN0Q2FzZXMoKSkKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcih2ZXJib3NpdHk9MikKKyAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlKQorCisgICAgcmV0dXJuIHJlc3VsdAorCitATG9nUmVzdWx0cworY2xhc3Mgb2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGxvbmdNZXNzYWdlID0gVHJ1ZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGhhc1BhY2thZ2Uoc2VsZiwgcGtnKToKKyAgICAgICAgZm9yIGl0ZW0gaW4gb2VUZXN0LnRjLnBrZ21hbmlmZXN0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgaWYgcmUubWF0Y2gocGtnLCBpdGVtKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBoYXNGZWF0dXJlKHNlbGYsZmVhdHVyZSk6CisKKyAgICAgICAgaWYgZmVhdHVyZSBpbiBvZVRlc3QudGMuaW1hZ2VmZWF0dXJlcyBvciBcCisgICAgICAgICAgICAgICAgZmVhdHVyZSBpbiBvZVRlc3QudGMuZGlzdHJvZmVhdHVyZXM6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKK2NsYXNzIG9lUnVudGltZVRlc3Qob2VUZXN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgorICAgICAgICBzZWxmLnRhcmdldCA9IG9lUnVudGltZVRlc3QudGMudGFyZ2V0CisgICAgICAgIHN1cGVyKG9lUnVudGltZVRlc3QsIHNlbGYpLl9faW5pdF9fKG1ldGhvZE5hbWUpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgQ2hlY2sgaWYgdGVzdCBuZWVkcyB0byBydW4KKyAgICAgICAgaWYgc2VsZi50Yy5zaWd0ZXJtOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJHb3QgU0lHVEVSTSIpCisgICAgICAgIGVsaWYgKHR5cGUoc2VsZi50YXJnZXQpLl9fbmFtZV9fID09ICJRZW11VGFyZ2V0Iik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50YXJnZXQuY2hlY2soKSwgbXNnID0gIlFlbXUgbm90IHJ1bm5pbmc/IikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBJZiBhIHRlc3QgZmFpbHMgb3IgdGhlcmUgaXMgYW4gZXhjZXB0aW9uCisgICAgICAgIGlmIG5vdCBleGNfaW5mbygpID09IChOb25lLCBOb25lLCBOb25lKToKKyAgICAgICAgICAgIGV4Y19jbGVhcigpCisgICAgICAgICAgICAjT25seSBkdW1wIGZvciBRZW11VGFyZ2V0CisgICAgICAgICAgICBpZiAodHlwZShzZWxmLnRhcmdldCkuX19uYW1lX18gPT0gIlFlbXVUYXJnZXQiKToKKyAgICAgICAgICAgICAgICBzZWxmLnRjLmhvc3RfZHVtcGVyLmNyZWF0ZV9kaXIoc2VsZi5fdGVzdE1ldGhvZE5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi50Yy5ob3N0X2R1bXBlci5kdW1wX2hvc3QoKQorICAgICAgICAgICAgICAgIHNlbGYudGFyZ2V0LnRhcmdldF9kdW1wZXIuZHVtcF90YXJnZXQoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRjLmhvc3RfZHVtcGVyLmR1bXBfZGlyKQorICAgICAgICAgICAgICAgIHByaW50ICgiJXMgZHVtcCBkYXRhIHN0b3JlZCBpbiAlcyIgJSAoc2VsZi5fdGVzdE1ldGhvZE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50Yy5ob3N0X2R1bXBlci5kdW1wX2RpcikpCisKKyAgICAjVE9ETzogdXNlIHBhY2thZ2VfbWFuYWdlci5weSB0byBpbnN0YWxsIHBhY2thZ2VzIG9uIGFueSB0eXBlIG9mIGltYWdlCisgICAgZGVmIGluc3RhbGxfcGFja2FnZXMoc2VsZiwgcGFja2FnZWxpc3QpOgorICAgICAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlbGlzdDoKKyAgICAgICAgICAgIChzdGF0dXMsIHJlc3VsdCkgPSBzZWxmLnRhcmdldC5ydW4oInNtYXJ0IGluc3RhbGwgLXkgIitwYWNrYWdlKQorICAgICAgICAgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1cworCitjbGFzcyBvZVNES1Rlc3Qob2VUZXN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgorICAgICAgICBzZWxmLnNka3Rlc3RkaXIgPSBvZVNES1Rlc3QudGMuc2RrdGVzdGRpcgorICAgICAgICBzdXBlcihvZVNES1Rlc3QsIHNlbGYpLl9faW5pdF9fKG1ldGhvZE5hbWUpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaGFzSG9zdFBhY2thZ2Uoc2VsZiwgcGtnKToKKworICAgICAgICBpZiByZS5zZWFyY2gocGtnLCBvZVRlc3QudGMuaG9zdHBrZ21hbmlmZXN0KToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9ydW4oc2VsZiwgY21kKToKKyAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSkKKworZGVmIGdldG1vZHVsZShwb3M9Mik6CisgICAgIyBzdGFjayByZXR1cm5zIGEgbGlzdCBvZiB0dXBsZXMgY29udGFpbmcgZnJhbWUgaW5mb3JtYXRpb24KKyAgICAjIEZpcnN0IGVsZW1lbnQgb2YgdGhlIGxpc3QgdGhlIGlzIGN1cnJlbnQgZnJhbWUsIGNhbGxlciBpcyAxCisgICAgZnJhbWVpbmZvID0gaW5zcGVjdC5zdGFjaygpW3Bvc10KKyAgICBtb2RuYW1lID0gaW5zcGVjdC5nZXRtb2R1bGVuYW1lKGZyYW1laW5mb1sxXSkKKyAgICAjbW9kbmFtZSA9IGluc3BlY3QuZ2V0bW9kdWxlKGZyYW1laW5mb1swXSkuX19uYW1lX18KKyAgICByZXR1cm4gbW9kbmFtZQorCitkZWYgc2tpcE1vZHVsZShyZWFzb24sIHBvcz0yKToKKyAgICBtb2RuYW1lID0gZ2V0bW9kdWxlKHBvcykKKyAgICBpZiBtb2RuYW1lIG5vdCBpbiBvZVRlc3QudGMudGVzdHNyZXF1aXJlZDoKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIiVzOiAlcyIgJSAobW9kbmFtZSwgcmVhc29uKSkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIlxuVGVzdCAlcyB3YW50cyB0byBiZSBza2lwcGVkLlxuUmVhc29uIGlzOiAlcyIgXAorICAgICAgICAgICAgICAgICJcblRlc3Qgd2FzIHJlcXVpcmVkIGluIFRFU1RfU1VJVEVTLCBzbyBlaXRoZXIgdGhlIGNvbmRpdGlvbiBmb3Igc2tpcHBpbmcgaXMgd3JvbmciIFwKKyAgICAgICAgICAgICAgICAiXG5vciB0aGUgaW1hZ2UgcmVhbGx5IGRvZXNuJ3QgaGF2ZSB0aGUgcmVxdWlyZWQgZmVhdHVyZS9wYWNrYWdlIHdoZW4gaXQgc2hvdWxkLiIgJSAobW9kbmFtZSwgcmVhc29uKSkKKworZGVmIHNraXBNb2R1bGVJZihjb25kLCByZWFzb24pOgorCisgICAgaWYgY29uZDoKKyAgICAgICAgc2tpcE1vZHVsZShyZWFzb24sIDMpCisKK2RlZiBza2lwTW9kdWxlVW5sZXNzKGNvbmQsIHJlYXNvbik6CisKKyAgICBpZiBub3QgY29uZDoKKyAgICAgICAgc2tpcE1vZHVsZShyZWFzb24sIDMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVuZXhwb3J0ZWQucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVuZXhwb3J0ZWQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTY0NDJiMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW5leHBvcnRlZC5weQpAQCAtMCwwICsxLDE0NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKworIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBzY3JpcHQgc2hvdWxkIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgYnVpbGQgc3lzdGVtIHRvIHJ1biBpbWFnZSB0ZXN0cy4KKyMgSXQgbmVlZHMgYSBqc29uIGZpbGUgYXMgaW5wdXQgYXMgZXhwb3J0ZWQgYnkgdGhlIGJ1aWxkLgorIyBFLmcgZm9yIGFuIGFscmVhZHkgYnVpbHQgaW1hZ2U6CisjLSBleHBvcnQgdGhlIHRlc3RzOgorIyAgIFRFU1RfRVhQT1JUX09OTFkgPSAiMSIKKyMgICBURVNUX1RBUkdFVCAgPSAic2ltcGxlcmVtb3RlIgorIyAgIFRFU1RfVEFSR0VUX0lQID0gIjE5Mi4xNjguNy4yIgorIyAgIFRFU1RfU0VSVkVSX0lQID0gIjE5Mi4xNjguNy4xIgorIyBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byAtYyB0ZXN0aW1hZ2UKKyMgU2V0dXAgeW91ciB0YXJnZXQsIGUuZyBmb3IgcWVtdTogcnVucWVtdSBjb3JlLWltYWdlLXNhdG8KKyMgY2QgYnVpbGQvdG1wL3Rlc3RpbWFnZS9jb3JlLWltYWdlLXNhdG8KKyMgLi9ydW5leHBvcnRlZC5weSB0ZXN0ZGF0YS5qc29uCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorCit0cnk6CisgICAgaW1wb3J0IHNpbXBsZWpzb24gYXMganNvbgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBqc29uCisKK3N5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJvZXFhIikpKQorCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBydW5UZXN0cworZnJvbSBvZXFhLnV0aWxzLnNzaGNvbnRyb2wgaW1wb3J0IFNTSENvbnRyb2wKK2Zyb20gb2VxYS51dGlscy5kdW1wIGltcG9ydCBnZXRfaG9zdF9kdW1wZXIKKworIyB0aGlzIGlzbid0IHByZXR0eSBidXQgd2UgbmVlZCBhIGZha2UgdGFyZ2V0IG9iamVjdAorIyBmb3IgcnVubmluZyB0aGUgdGVzdHMgZXh0ZXJuYWxseSBhcyB3ZSBkb24ndCBjYXJlCisjIGFib3V0IGRlcGxveS9zdGFydCB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGNvbm5lY3Rpb24gbWV0aG9kcyAocnVuLCBjb3B5KQorY2xhc3MgRmFrZVRhcmdldChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gTm9uZQorICAgICAgICBzZWxmLmlwID0gTm9uZQorICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IE5vbmUKKyAgICAgICAgc2VsZi5kYXRldGltZSA9IHRpbWUuc3RyZnRpbWUoJyVZJW0lZCVIJU0lUycsdGltZS5nbXRpbWUoKSkKKyAgICAgICAgc2VsZi50ZXN0ZGlyID0gZC5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpCisgICAgICAgIHNlbGYucG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorCisgICAgZGVmIGV4cG9ydFN0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLnNzaGxvZyA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICJzc2hfdGFyZ2V0X2xvZy4lcyIgJSBzZWxmLmRhdGV0aW1lKQorICAgICAgICBzc2hsb2dsaW5rID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgInNzaF90YXJnZXRfbG9nIikKKyAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoc3NobG9nbGluayk6CisgICAgICAgICAgICBvcy51bmxpbmsoc3NobG9nbGluaykKKyAgICAgICAgb3Muc3ltbGluayhzZWxmLnNzaGxvZywgc3NobG9nbGluaykKKyAgICAgICAgcHJpbnQoIlNTSCBsb2cgZmlsZTogJXMiICUgIHNlbGYuc3NobG9nKQorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBTU0hDb250cm9sKHNlbGYuaXAsIGxvZ2ZpbGU9c2VsZi5zc2hsb2cpCisKKyAgICBkZWYgcnVuKHNlbGYsIGNtZCwgdGltZW91dD1Ob25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5ydW4oY21kLCB0aW1lb3V0KQorCisgICAgZGVmIGNvcHlfdG8oc2VsZiwgbG9jYWxwYXRoLCByZW1vdGVwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5jb3B5X3RvKGxvY2FscGF0aCwgcmVtb3RlcGF0aCkKKworICAgIGRlZiBjb3B5X2Zyb20oc2VsZiwgcmVtb3RlcGF0aCwgbG9jYWxwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5jb3B5X2Zyb20ocmVtb3RlcGF0aCwgbG9jYWxwYXRoKQorCisKK2NsYXNzIE15RGF0YURpY3QoZGljdCk6CisgICAgZGVmIGdldFZhcihzZWxmLCBrZXksIHVudXNlZCA9IE5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5nZXQoa2V5LCAiIikKKworY2xhc3MgVGVzdENvbnRleHQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZCA9IE5vbmUKKyAgICAgICAgc2VsZi50YXJnZXQgPSBOb25lCisKK2RlZiBtYWluKCk6CisKKyAgICB1c2FnZSA9ICJ1c2FnZTogJXByb2cgW29wdGlvbnNdIDxqc29uIGZpbGU+IgorICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZT11c2FnZSkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXQiLCAiLS10YXJnZXQtaXAiLCBkZXN0PSJpcCIsIGhlbHA9IlRoZSBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgbWFjaGluZS4gVXNlIHRoaXMgdG8gXAorICAgICAgICAgICAgb3ZlcndyaXRlIHRoZSB2YWx1ZSBkZXRlcm1pbmVkIGZyb20gVEVTVF9UQVJHRVRfSVAgYXQgYnVpbGQgdGltZSIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgIi0tc2VydmVyLWlwIiwgZGVzdD0ic2VydmVyX2lwIiwgaGVscD0iVGhlIElQIGFkZHJlc3Mgb2YgdGhpcyBtYWNoaW5lLiBVc2UgdGhpcyB0byBcCisgICAgICAgICAgICBvdmVyd3JpdGUgdGhlIHZhbHVlIGRldGVybWluZWQgZnJvbSBURVNUX1NFUlZFUl9JUCBhdCBidWlsZCB0aW1lLiIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1kIiwgIi0tZGVwbG95LWRpciIsIGRlc3Q9ImRlcGxveV9kaXIiLCBoZWxwPSJGdWxsIHBhdGggdG8gdGhlIHBhY2thZ2UgZmVlZHMsIHRoYXQgdGhpcyBcCisgICAgICAgICAgICB0aGUgY29udGVudHMgb2Ygd2hhdCB1c2VkIHRvIGJlIERFUExPWV9ESVIgb24gdGhlIGJ1aWxkIG1hY2hpbmUuIElmIG5vdCBzcGVjaWZpZWQgaXQgd2lsbCB1c2UgdGhlIHZhbHVlIFwKKyAgICAgICAgICAgIHNwZWNpZmllZCBpbiB0aGUganNvbiBpZiB0aGF0IGRpcmVjdG9yeSBhY3R1YWxseSBleGlzdHMgb3IgaXQgd2lsbCBlcnJvciBvdXQuIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWwiLCAiLS1sb2ctZGlyIiwgZGVzdD0ibG9nX2RpciIsIGhlbHA9IlRoaXMgc2V0cyB0aGUgcGF0aCBmb3IgVEVTVF9MT0dfRElSLiBJZiBub3Qgc3BlY2lmaWVkIFwKKyAgICAgICAgICAgIHRoZSBjdXJyZW50IGRpciBpcyB1c2VkLiBUaGlzIGlzIHVzZWQgZm9yIHVzdWFsbHkgY3JlYXRpbmcgYSBzc2ggbG9nIGZpbGUgYW5kIGEgc2NwIHRlc3QgZmlsZS4iKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICBwYXJzZXIuZXJyb3IoIkluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzLiBUaGUgb25lIGFuZCBvbmx5IGFyZ3VtZW50IHNob3VsZCBiZSBhIGpzb24gZmlsZSBleHBvcnRlZCBieSB0aGUgYnVpbGQgc3lzdGVtIikKKworICAgIHdpdGggb3BlbihhcmdzWzBdLCAiciIpIGFzIGY6CisgICAgICAgIGxvYWRlZCA9IGpzb24ubG9hZChmKQorCisgICAgaWYgb3B0aW9ucy5pcDoKKyAgICAgICAgbG9hZGVkWyJ0YXJnZXQiXVsiaXAiXSA9IG9wdGlvbnMuaXAKKyAgICBpZiBvcHRpb25zLnNlcnZlcl9pcDoKKyAgICAgICAgbG9hZGVkWyJ0YXJnZXQiXVsic2VydmVyX2lwIl0gPSBvcHRpb25zLnNlcnZlcl9pcAorCisgICAgZCA9IE15RGF0YURpY3QoKQorICAgIGZvciBrZXkgaW4gbG9hZGVkWyJkIl0ua2V5cygpOgorICAgICAgICBkW2tleV0gPSBsb2FkZWRbImQiXVtrZXldCisKKyAgICBpZiBvcHRpb25zLmxvZ19kaXI6CisgICAgICAgIGRbIlRFU1RfTE9HX0RJUiJdID0gb3B0aW9ucy5sb2dfZGlyCisgICAgZWxzZToKKyAgICAgICAgZFsiVEVTVF9MT0dfRElSIl0gPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKKyAgICBpZiBvcHRpb25zLmRlcGxveV9kaXI6CisgICAgICAgIGRbIkRFUExPWV9ESVIiXSA9IG9wdGlvbnMuZGVwbG95X2RpcgorICAgIGVsc2U6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGRbIkRFUExPWV9ESVIiXSk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRoZSBwYXRoIHRvIERFUExPWV9ESVIgZG9lcyBub3QgZXhpc3RzOiAlcyIgJSBkWyJERVBMT1lfRElSIl0pCisKKworICAgIHRhcmdldCA9IEZha2VUYXJnZXQoZCkKKyAgICBmb3Iga2V5IGluIGxvYWRlZFsidGFyZ2V0Il0ua2V5cygpOgorICAgICAgICBzZXRhdHRyKHRhcmdldCwga2V5LCBsb2FkZWRbInRhcmdldCJdW2tleV0pCisKKyAgICBob3N0X2R1bXBlciA9IGdldF9ob3N0X2R1bXBlcihkKQorICAgIGhvc3RfZHVtcGVyLnBhcmVudF9kaXIgPSBsb2FkZWRbImhvc3RfZHVtcGVyIl1bInBhcmVudF9kaXIiXQorICAgIGhvc3RfZHVtcGVyLmNtZHMgPSBsb2FkZWRbImhvc3RfZHVtcGVyIl1bImNtZHMiXQorCisgICAgdGMgPSBUZXN0Q29udGV4dCgpCisgICAgc2V0YXR0cih0YywgImQiLCBkKQorICAgIHNldGF0dHIodGMsICJ0YXJnZXQiLCB0YXJnZXQpCisgICAgc2V0YXR0cih0YywgImhvc3RfZHVtcGVyIiwgaG9zdF9kdW1wZXIpCisgICAgZm9yIGtleSBpbiBsb2FkZWQua2V5cygpOgorICAgICAgICBpZiBrZXkgIT0gImQiIGFuZCBrZXkgIT0gInRhcmdldCIgYW5kIGtleSAhPSAiaG9zdF9kdW1wZXIiOgorICAgICAgICAgICAgc2V0YXR0cih0Yywga2V5LCBsb2FkZWRba2V5XSkKKworICAgIHRhcmdldC5leHBvcnRTdGFydCgpCisgICAgcnVuVGVzdHModGMpCisKKyAgICByZXR1cm4gMAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZjNmYTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDMgQEAKKyMgRW5hYmxlIG90aGVyIGxheWVycyB0byBoYXZlIHRlc3RzIGluIHRoZSBzYW1lIG5hbWVkIGRpcmVjdG9yeQorZnJvbSBwa2d1dGlsIGltcG9ydCBleHRlbmRfcGF0aAorX19wYXRoX18gPSBleHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9fcHRlc3QucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9fcHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjOWM0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL19wdGVzdC5weQpAQCAtMCwwICsxLDEyNSBAQAoraW1wb3J0IHVuaXR0ZXN0LCBvcywgc2h1dGlsCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLmxvZ3BhcnNlciBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLmh0dHBzZXJ2ZXIgaW1wb3J0IEhUVFBTZXJ2aWNlCitpbXBvcnQgYmIKK2ltcG9ydCBnbG9iCitmcm9tIG9lLnBhY2thZ2VfbWFuYWdlciBpbXBvcnQgUnBtUGtnc0xpc3QKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInBhY2thZ2UtbWFuYWdlbWVudCIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgcGFja2FnZSBtYW5hZ2VtZW50IGZlYXR1cmUiKQorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInNtYXJ0Iik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSBzbWFydCBpbnN0YWxsZWQiKQorICAgIGlmICJwYWNrYWdlX3JwbSIgIT0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiUEFDS0FHRV9DTEFTU0VTIiwgVHJ1ZSkuc3BsaXQoKVswXToKKyAgICAgICAgc2tpcE1vZHVsZSgiUnBtIGlzIG5vdCB0aGUgcHJpbWFyeSBwYWNrYWdlIG1hbmFnZXIiKQorCitjbGFzcyBQdGVzdFJ1bm5lclRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICAjIGEgcHRlc3QgbG9nIHBhcnNlcgorICAgIGRlZiBwYXJzZV9wdGVzdChzZWxmLCBsb2dmaWxlKToKKyAgICAgICAgcGFyc2VyID0gTHBhcnNlcih0ZXN0XzBfcGFzc19yZWdleD0iXlBBU1M6KC4rKSIsIHRlc3RfMF9mYWlsX3JlZ2V4PSJeRkFJTDooLispIiwgc2VjdGlvbl8wX2JlZ2luX3JlZ2V4PSJeQkVHSU46IC4qLyguKykvcHRlc3QiLCBzZWN0aW9uXzBfZW5kX3JlZ2V4PSJeRU5EOiAuKi8oLispL3B0ZXN0IikKKyAgICAgICAgcGFyc2VyLmluaXQoKQorICAgICAgICByZXN1bHQgPSBSZXN1bHQoKQorCisgICAgICAgIHdpdGggb3Blbihsb2dmaWxlKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICByZXN1bHRfdHVwbGUgPSBwYXJzZXIucGFyc2VfbGluZShsaW5lKQorICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHRfdHVwbGU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcmVzdWx0X3R1cGxlID0gbGluZV90eXBlLCBjYXRlZ29yeSwgc3RhdHVzLCBuYW1lID0gcGFyc2VyLnBhcnNlX2xpbmUobGluZSkKKworICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAnc2VjdGlvbicgYW5kIHN0YXR1cyA9PSAnYmVnaW4nOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3NlY3Rpb24gPSBuYW1lCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBsaW5lX3R5cGUgPT0gJ3NlY3Rpb24nIGFuZCBzdGF0dXMgPT0gJ2VuZCc6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfc2VjdGlvbiA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAndGVzdCcgYW5kIHN0YXR1cyA9PSAncGFzcyc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdG9yZShjdXJyZW50X3NlY3Rpb24sIG5hbWUsIHN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAndGVzdCcgYW5kIHN0YXR1cyA9PSAnZmFpbCc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdG9yZShjdXJyZW50X3NlY3Rpb24sIG5hbWUsIHN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICByZXN1bHQuc29ydF90ZXN0cygpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICAjbm90ZSB0aGUgZXhpc3RpbmcgY2hhbm5lbHMgdGhhdCBhcmUgb24gdGhlIGJvYXJkIGJlZm9yZSBjcmVhdGluZyBuZXcgb25lcworIyAgICAgICAgc2VsZi5leGlzdGluZ2NoYW5uZWxzID0gc2V0KCkKKyMgICAgICAgIChzdGF0dXMsIHJlc3VsdCkgPSBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5ydW4oJ3NtYXJ0IGNoYW5uZWwgLS1zaG93IHwgZ3JlcCAiXFsiJywgMCkKKyMgICAgICAgIGZvciB4IGluIHJlc3VsdC5zcGxpdCgiXG4iKToKKyMgICAgICAgICAgICBzZWxmLmV4aXN0aW5nY2hhbm5lbHMuYWRkKHgpCisgICAgICAgIHNlbGYucmVwb19zZXJ2ZXIgPSBIVFRQU2VydmljZShvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdERVBMT1lfRElSJywgVHJ1ZSksIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnNlcnZlcl9pcCkKKyAgICAgICAgc2VsZi5yZXBvX3NlcnZlci5zdGFydCgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5yZXBvX3NlcnZlci5zdG9wKCkKKyAgICAgICAgI3JlbW92ZSBjcmVhdGVkIGNoYW5uZWxzIHRvIGJlIGFibGUgdG8gcmVwZWF0IHRoZSB0ZXN0cyBvbiBzYW1lIGltYWdlCisjICAgICAgICAoc3RhdHVzLCByZXN1bHQpID0gb2VSdW50aW1lVGVzdC50Yy50YXJnZXQucnVuKCdzbWFydCBjaGFubmVsIC0tc2hvdyB8IGdyZXAgIlxbIicsIDApCisjICAgICAgICBmb3IgeCBpbiByZXN1bHQuc3BsaXQoIlxuIik6CisjICAgICAgICAgICAgaWYgeCBub3QgaW4gc2VsZi5leGlzdGluZ2NoYW5uZWxzOgorIyAgICAgICAgICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5ydW4oJ3NtYXJ0IGNoYW5uZWwgLS1yZW1vdmUgJyt4WzE6LTFdKycgLXknLCAwKQorCisgICAgZGVmIGFkZF9zbWFydF9jaGFubmVsKHNlbGYpOgorICAgICAgICBpbWFnZV9wa2d0eXBlID0gc2VsZi50Yy5kLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpCisgICAgICAgIGRlcGxveV91cmwgPSAnaHR0cDovLyVzOiVzLyVzJyAlKHNlbGYudGFyZ2V0LnNlcnZlcl9pcCwgc2VsZi5yZXBvX3NlcnZlci5wb3J0LCBpbWFnZV9wa2d0eXBlKQorICAgICAgICBwa2dhcmNocyA9IHNlbGYudGMuZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSFMnLCBUcnVlKS5yZXBsYWNlKCItIiwiXyIpLnNwbGl0KCkKKyAgICAgICAgZm9yIGFyY2ggaW4gb3MubGlzdGRpcignJXMvJXMnICUgKHNlbGYucmVwb19zZXJ2ZXIucm9vdF9kaXIsIGltYWdlX3BrZ3R5cGUpKToKKyAgICAgICAgICAgIGlmIGFyY2ggaW4gcGtnYXJjaHM6CisgICAgICAgICAgICAgICAgc2VsZi50YXJnZXQucnVuKCdzbWFydCBjaGFubmVsIC15IC0tYWRkIHthfSB0eXBlPXJwbS1tZCBiYXNldXJsPXt1fS97YX0nLmZvcm1hdChhPWFyY2gsIHU9ZGVwbG95X3VybCksIDApCisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bignc21hcnQgdXBkYXRlJywgMCkKKworICAgIGRlZiBpbnN0YWxsX2NvbXBsZW1lbnRhcnkoc2VsZiwgZ2xvYnM9Tm9uZSk6CisgICAgICAgIGluc3RhbGxlZF9wa2dzX2ZpbGUgPSBvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignV09SS0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0YWxsZWRfcGtncy50eHQiKQorICAgICAgICBzZWxmLnBrZ3NfbGlzdCA9IFJwbVBrZ3NMaXN0KG9lUnVudGltZVRlc3QudGMuZCwgb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSksIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ2FyY2hfdmFyJywgVHJ1ZSksIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ29zX3ZhcicsIFRydWUpKQorICAgICAgICB3aXRoIG9wZW4oaW5zdGFsbGVkX3BrZ3NfZmlsZSwgIncrIikgYXMgaW5zdGFsbGVkX3BrZ3M6CisgICAgICAgICAgICBpbnN0YWxsZWRfcGtncy53cml0ZShzZWxmLnBrZ3NfbGlzdC5saXN0KCJhcmNoIikpCisKKyAgICAgICAgY21kID0gW2JiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAib2UtcGtnZGF0YS11dGlsIiksCisgICAgICAgICAgICAgICAiLXAiLCBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpLCAiZ2xvYiIsIGluc3RhbGxlZF9wa2dzX2ZpbGUsCisgICAgICAgICAgICAgICBnbG9ic10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIC4uLiIpCisgICAgICAgICAgICBjb21wbGVtZW50YXJ5X3BrZ3MgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ291bGQgbm90IGNvbXB1dGUgY29tcGxlbWVudGFyeSBwYWNrYWdlcyBsaXN0LiBDb21tYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICInJXMnIHJldHVybmVkICVkOlxuJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICgnICcuam9pbihjbWQpLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICByZXR1cm4gY29tcGxlbWVudGFyeV9wa2dzLnNwbGl0KCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wdGVzdF9sb2cgPSBvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVEVTVF9MT0dfRElSIixUcnVlKSwgInB0ZXN0LSVzLmxvZyIgJSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdEQVRFVElNRScsIFRydWUpKQorCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9wdGVzdHJ1bm5lcihzZWxmKToKKyAgICAgICAgc2VsZi5hZGRfc21hcnRfY2hhbm5lbCgpCisgICAgICAgIChydW5uZXJzdGF0dXMsIHJlc3VsdCkgPSBzZWxmLnRhcmdldC5ydW4oJ3doaWNoIHB0ZXN0LXJ1bm5lcicsIDApCisgICAgICAgIGNvbmQgPSBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInB0ZXN0LXJ1bm5lciIpIGFuZCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInB0ZXN0IikgYW5kIG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgiLXB0ZXN0IikgYW5kIChydW5uZXJzdGF0dXMgIT0gMCkKKyAgICAgICAgaWYgY29uZDoKKyAgICAgICAgICAgIHNlbGYuaW5zdGFsbF9wYWNrYWdlcyhzZWxmLmluc3RhbGxfY29tcGxlbWVudGFyeSgiKi1wdGVzdCIpKQorICAgICAgICAgICAgc2VsZi5pbnN0YWxsX3BhY2thZ2VzKFsncHRlc3QtcnVubmVyJ10pCisKKyAgICAgICAgKHJ1bm5lcnN0YXR1cywgcmVzdWx0KSA9IHNlbGYudGFyZ2V0LnJ1bignL3Vzci9iaW4vcHRlc3QtcnVubmVyID4gL3RtcC9wdGVzdC5sb2cgMj4mMScsIDApCisgICAgICAgICNleGl0IGNvZGUgaXMgIT0wIGV2ZW4gaWYgcHRlc3QtcnVubmVyIGV4ZWN1dGVzIGJlY2F1c2Ugc29tZSBwdGVzdCB0ZXN0cyBmYWlsLgorICAgICAgICBzZWxmLmFzc2VydFRydWUocnVubmVyc3RhdHVzICE9IDEyNywgbXNnPSJDYW5ub3QgZXhlY3V0ZSBwdGVzdC1ydW5uZXIhIikKKyAgICAgICAgc2VsZi50YXJnZXQuY29weV9mcm9tKCcvdG1wL3B0ZXN0LmxvZycsIHNlbGYucHRlc3RfbG9nKQorICAgICAgICBzaHV0aWwuY29weWZpbGUoc2VsZi5wdGVzdF9sb2csICJwdGVzdC5sb2ciKQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYucGFyc2VfcHRlc3QoInB0ZXN0LmxvZyIpCisgICAgICAgIGxvZ19yZXN1bHRzX3RvX2xvY2F0aW9uID0gIi4vcmVzdWx0cyIKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobG9nX3Jlc3VsdHNfdG9fbG9jYXRpb24pOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShsb2dfcmVzdWx0c190b19sb2NhdGlvbikKKyAgICAgICAgb3MubWFrZWRpcnMobG9nX3Jlc3VsdHNfdG9fbG9jYXRpb24pCisKKyAgICAgICAgcmVzdWx0LmxvZ19hc19maWxlcyhsb2dfcmVzdWx0c190b19sb2NhdGlvbiwgdGVzdF9zdGF0dXMgPSBbJ3Bhc3MnLCdmYWlsJ10pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9fcWVtdXRpbnkucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9fcWVtdXRpbnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjMjlmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL19xZW11dGlueS5weQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdAorZnJvbSBvZXFhLnV0aWxzLnFlbXV0aW55cnVubmVyIGltcG9ydCAqCisKK2NsYXNzIFFlbXVUaW55VGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIGRlZiB0ZXN0X2Jvb3RfdGlueShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bl9zZXJpYWwoJ3VuYW1lIC1hJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJ5b2N0by10aW55IiBpbiBvdXRwdXQsIG1zZz0iQ2Fubm90IGRldGVjdCBwb2t5IHRpbnkgYm9vdCEiKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkY3ZzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRjdnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2Y2JmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkY3ZzLnB5CkBAIC0wLDAgKzEsMzEgQEAKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMudGFyZ2V0YnVpbGQgaW1wb3J0IFRhcmdldEJ1aWxkUHJvamVjdAorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJ0b29scy1zZGsiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIHRvb2xzLXNkayBpbiBJTUFHRV9GRUFUVVJFUyIpCisKK2NsYXNzIEJ1aWxkQ3ZzVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QgPSBUYXJnZXRCdWlsZFByb2plY3Qob2VSdW50aW1lVGVzdC50Yy50YXJnZXQsIG9lUnVudGltZVRlc3QudGMuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZnRwLmdudS5vcmcvbm9uLWdudS9jdnMvc291cmNlL2ZlYXR1cmUvMS4xMi4xMy9jdnMtMS4xMi4xMy50YXIuYnoyIikKKyAgICAgICAgc2VsZi5wcm9qZWN0LmRvd25sb2FkX2FyY2hpdmUoKQorCisgICAgQHRlc3RjYXNlKDIwNSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0X2N2cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2NvbmZpZ3VyZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIGNvbmZpZ3VyZSBmYWlsZWQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9tYWtlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgbWFrZSBmYWlsZWQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9pbnN0YWxsKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgbWFrZSBpbnN0YWxsIGZhaWxlZCIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0LmNsZWFuKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkaXB0YWJsZXMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9idWlsZGlwdGFibGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZTI1MmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9idWlsZGlwdGFibGVzLnB5CkBAIC0wLDAgKzEsMzEgQEAKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMudGFyZ2V0YnVpbGQgaW1wb3J0IFRhcmdldEJ1aWxkUHJvamVjdAorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJ0b29scy1zZGsiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIHRvb2xzLXNkayBpbiBJTUFHRV9GRUFUVVJFUyIpCisKK2NsYXNzIEJ1aWxkSXB0YWJsZXNUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdCA9IFRhcmdldEJ1aWxkUHJvamVjdChvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldCwgb2VSdW50aW1lVGVzdC50Yy5kLAorICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9uZXRmaWx0ZXIub3JnL3Byb2plY3RzL2lwdGFibGVzL2ZpbGVzL2lwdGFibGVzLTEuNC4xMy50YXIuYnoyIikKKyAgICAgICAgc2VsZi5wcm9qZWN0LmRvd25sb2FkX2FyY2hpdmUoKQorCisgICAgQHRlc3RjYXNlKDIwNikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0X2lwdGFibGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2luc3RhbGwoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGluc3RhbGwgZmFpbGVkIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QuY2xlYW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRzdWRva3UucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9idWlsZHN1ZG9rdS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDJiMDYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRzdWRva3UucHkKQEAgLTAsMCArMSwyOCBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2Zyb20gb2VxYS51dGlscy50YXJnZXRidWlsZCBpbXBvcnQgVGFyZ2V0QnVpbGRQcm9qZWN0CisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInRvb2xzLXNkayIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgdG9vbHMtc2RrIGluIElNQUdFX0ZFQVRVUkVTIikKKworY2xhc3MgU3Vkb2t1VGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QgPSBUYXJnZXRCdWlsZFByb2plY3Qob2VSdW50aW1lVGVzdC50Yy50YXJnZXQsIG9lUnVudGltZVRlc3QudGMuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3N1ZG9rdS1zYXZhbnQvc3Vkb2t1LXNhdmFudC9zdWRva3Utc2F2YW50LTEuMy9zdWRva3Utc2F2YW50LTEuMy50YXIuYnoyIikKKyAgICAgICAgc2VsZi5wcm9qZWN0LmRvd25sb2FkX2FyY2hpdmUoKQorCisgICAgQHRlc3RjYXNlKDIwNykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0X3N1ZG9rdShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2NvbmZpZ3VyZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIGNvbmZpZ3VyZSBmYWlsZWQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9tYWtlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgbWFrZSBmYWlsZWQiKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdC5jbGVhbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9jb25ubWFuLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvY29ubm1hbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTY5ZTVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvY29ubm1hbi5weQpAQCAtMCwwICsxLDU0IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoImNvbm5tYW4iKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gY29ubm1hbiBwYWNrYWdlIGluIGltYWdlIikKKworCitjbGFzcyBDb25ubWFuVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIGRlZiBzZXJ2aWNlX3N0YXR1cyhzZWxmLCBzZXJ2aWNlKToKKyAgICAgICAgaWYgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJzeXN0ZW1kIik6CisgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdzeXN0ZW1jdGwgc3RhdHVzIC1sICVzJyAlIHNlcnZpY2UpCisgICAgICAgICAgICByZXR1cm4gb3V0cHV0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIlVuYWJsZSB0byBnZXQgc3RhdHVzIG9yIGxvZ3MgZm9yICVzIiAlIHNlcnZpY2UKKworICAgIEB0ZXN0Y2FzZSg5NjEpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9jb25ubWFuZF9oZWxwKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCcvdXNyL3NiaW4vY29ubm1hbmQgLS1oZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0ic3RhdHVzIGFuZCBvdXRwdXQ6ICVzIGFuZCAlcyIgJSAoc3RhdHVzLG91dHB1dCkpCisKKyAgICBAdGVzdGNhc2UoMjIxKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X2Nvbm5tYW5kX2hlbHAnKQorICAgIGRlZiB0ZXN0X2Nvbm5tYW5kX3J1bm5pbmcoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4ob2VSdW50aW1lVGVzdC5wc2NtZCArICcgfCBncmVwIFtjXW9ubm1hbmQnKQorICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIHByaW50IHNlbGYuc2VydmljZV9zdGF0dXMoImNvbm5tYW4iKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBjb25ubWFuZCBwcm9jZXNzIHJ1bm5pbmciKQorCisgICAgQHRlc3RjYXNlKDIyMykKKyAgICBkZWYgdGVzdF9vbmx5X29uZV9jb25ubWFuZF9pbl9iYWNrZ3JvdW5kKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgIE9ubHkgb25lIGNvbm5tYW5kIGluIGJhY2tncm91bmQKKyAgICAgICAgRXhwZWN0ZWQ6ICAgIFRoZXJlIHdpbGwgYmUgb25seSBvbmUgY29ubm1hbmQgaW5zdGFuY2UgaW4gYmFja2dyb3VuZC4KKyAgICAgICAgUHJvZHVjdDogICAgIEJTUHMKKyAgICAgICAgQXV0aG9yOiAgICAgIEFsZXhhbmRydSBHZW9yZ2VzY3UgPGFsZXhhbmRydS5jLmdlb3JnZXNjdUBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgJ2Nvbm5tYW5kJyBpcyBydW5uaW5nIGluIGJhY2tncm91bmQKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kICsgJyB8IGdyZXAgW2Ndb25ubWFuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzLCAnRmFpbGVkIHRvIGZpbmQgImNvbm5tYW5kIiBwcm9jZXNzIHJ1bm5pbmcgaW4gYmFja2dyb3VuZC4nKQorCisgICAgICAgICMgU3RhcnQgYSBuZXcgaW5zdGFuY2Ugb2YgJ2Nvbm5tYW5kJworICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdjb25ubWFuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzLCAnRmFpbGVkIHRvIHN0YXJ0IGEgbmV3ICJjb25ubWFuZCIgcHJvY2Vzcy4nKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgb25seSBvbmUgJ2Nvbm5tYW5kJyBpcyBydW5uaW5nIGluIGJhY2tncm91bmQKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kICsgJyB8IGdyZXAgW2Ndb25ubWFuZCB8IHdjIC1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICdGYWlsZWQgdG8gZmluZCAiY29ubm1hbmQiIHByb2Nlc3MgcnVubmluZyBpbiBiYWNrZ3JvdW5kLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgaW50KG91dHB1dCksICdGb3VuZCB7fSBjb25ubWFuZCBwcm9jZXNzZXMgcnVubmluZywgZXhwZWN0ZWQgMS4nLmZvcm1hdChvdXRwdXQpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZGF0ZS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2RhdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E4ZmU4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2RhdGUucHkKQEAgLTAsMCArMSwzMSBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdAorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2ltcG9ydCByZQorCitjbGFzcyBEYXRlVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciIsIFRydWUpID09ICJzeXN0ZW1kIjoKKyAgICAgICAgICAgIHNlbGYudGFyZ2V0LnJ1bignc3lzdGVtY3RsIHN0b3Agc3lzdGVtZC10aW1lc3luY2QnKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgVHJ1ZSkgPT0gInN5c3RlbWQiOgorICAgICAgICAgICAgc2VsZi50YXJnZXQucnVuKCdzeXN0ZW1jdGwgc3RhcnQgc3lzdGVtZC10aW1lc3luY2QnKQorCisgICAgQHRlc3RjYXNlKDIxMSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0X2RhdGUoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2RhdGUgKyIlWS0lbS0lZCAlVCInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJGYWlsZWQgdG8gZ2V0IGluaXRpYWwgZGF0ZSwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIG9sZERhdGUgPSBvdXRwdXQKKworICAgICAgICBzYW1wbGVEYXRlID0gJyIyMDE2LTA4LTA5IDEwOjAwOjAwIicKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigiZGF0ZSAtcyAlcyIgJSBzYW1wbGVEYXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJEYXRlIHNldCBmYWlsZWQsIG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oImRhdGUgLVIiKQorICAgICAgICBwID0gcmUubWF0Y2goJ1R1ZSwgMDkgQXVnIDIwMTYgMTA6MDA6Li4gXCswMDAwJywgb3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocCwgbXNnPSJUaGUgZGF0ZSB3YXMgbm90IHNldCBjb3JyZWN0bHksIG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2RhdGUgLXMgIiVzIicgJSBvbGREYXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJGYWlsZWQgdG8gcmVzZXQgZGF0ZSwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9kZi5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2RmLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NTY5ZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9kZi5weQpAQCAtMCwwICsxLDEyIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKKworY2xhc3MgRGZUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDIzNCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0X2RmKHNlbGYpOgorICAgICAgICAoc3RhdHVzLG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oImRmIC8gfCBzZWQgLW4gJzJwJyB8IGF3ayAne3ByaW50ICQ0fSciKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50KG91dHB1dCk+NTEyMCwgbXNnPSJOb3QgZW5vdWdoIHNwYWNlIG9uIGltYWdlLiBDdXJyZW50IHNpemUgaXMgJXMiICUgb3V0cHV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZG1lc2cucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9kbWVzZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODMxNDcxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZG1lc2cucHkKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0Citmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCisKK2NsYXNzIERtZXNnVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgyMTUpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9kbWVzZyhzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignZG1lc2cgfCBncmVwIC12IG1tY2ktcGwxOHggfCBncmVwIC12ICJlcnJvciBjaGFuZ2luZyBuZXQgaW50ZXJmYWNlIG5hbWUiIHwgZ3JlcCAtaXYgImRtYSB0aW1lb3V0IiB8IGdyZXAgLXYgdXNiaGlkIHwgZ3JlcCAtaSBlcnJvcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAxLCBtc2cgPSAiRXJyb3IgbWVzc2FnZXMgaW4gZG1lc2cgbG9nOiAlcyIgJSBvdXRwdXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy9oZWxsb21vZC5jIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvaGVsbG9tb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzgzMzk3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvaGVsbG9tb2QuYwpAQCAtMCwwICsxLDE5IEBACisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCitzdGF0aWMgaW50IF9faW5pdCBoZWxsb19pbml0KHZvaWQpCit7CisgICAgICAgIHByaW50ayhLRVJOX0lORk8gIkhlbGxvIHdvcmxkIVxuIik7CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaGVsbG9fY2xlYW51cCh2b2lkKQoreworICAgICAgICBwcmludGsoS0VSTl9JTkZPICJDbGVhbmluZyB1cCBoZWxsb21vZC5cbiIpOworfQorCittb2R1bGVfaW5pdChoZWxsb19pbml0KTsKK21vZHVsZV9leGl0KGhlbGxvX2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy9oZWxsb21vZF9tYWtlZmlsZSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL2hlbGxvbW9kX21ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MmQ1YzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy9oZWxsb21vZF9tYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKK29iai1tIDo9IGhlbGxvbW9kLm8KK0tESVIgOj0gL3Vzci9zcmMva2VybmVsCisKK2FsbDoKKwkkKE1BS0UpIC1DICQoS0RJUikgTT0kKFBXRCkgbW9kdWxlcworCitjbGVhbjoKKwkkKE1BS0UpIC1DICQoS0RJUikgTT0kKFBXRCkgY2xlYW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QuYyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDgzODljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5jCkBAIC0wLDAgKzEsMjYgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworZG91YmxlIGNvbnZlcnQobG9uZyBsb25nIGwpCit7CisgIHJldHVybiAoZG91YmxlKWw7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICogYXJndltdKSB7CisKKyAgbG9uZyBsb25nIGwgPSAxMDsKKyAgZG91YmxlIGY7CisgIGRvdWJsZSBjaGVjayA9IDEwLjA7CisKKyAgZiA9IGNvbnZlcnQobCk7CisgIHByaW50ZigiY29udmVydDogJWxsZCA9PiAlZlxuIiwgbCwgZik7CisgIGlmICggZiAhPSBjaGVjayApIGV4aXQoMSk7CisKKyAgZiA9IDEyMzQuNjc7CisgIGNoZWNrID0gMTIzNC4wOworICBwcmludGYoImZsb29yZiglZikgPSAlZlxuIiwgZiwgZmxvb3JmKGYpKTsKKyAgaWYgKCBmbG9vcmYoZikgIT0gY2hlY2spIGV4aXQoMSk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LmNwcCBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMWE3NjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LmNwcApAQCAtMCwwICsxLDMgQEAKKyNpbmNsdWRlIDxsaW1pdHM+CisKK2ludCBtYWluKCkge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LnBsIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODljOGYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5wbApAQCAtMCwwICsxLDIgQEAKKyRhID0gOS4wMWUrMjEgLSA5LjAxZSsyMSArIDAuMDE7CitwcmludCAoInRoZSB2YWx1ZSBvZiBhIGlzICIsICRhLCAiXG4iKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTIyNzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LnB5CkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IG9zCisKK29zLnN5c3RlbSgndG91Y2ggL3RtcC90ZXN0ZmlsZS5weXRob24nKQorCithID0gOS4wMWUrMjEgLSA5LjAxZSsyMSArIDAuMDEKK3ByaW50ICJ0aGUgdmFsdWUgb2YgYSBpcyAlcyIgJSBhCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0bWFrZWZpbGUgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0bWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ExODQ0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3RtYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKK3Rlc3Q6IHRlc3QubworCWdjYyAtbyB0ZXN0IHRlc3QubyAtbG0KK3Rlc3QubzogdGVzdC5jCisJZ2NjIC1jIHRlc3QuYworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9nY2MucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9nY2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkwY2QxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2djYy5weQpAQCAtMCwwICsxLDQ3IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgidG9vbHMtc2RrIik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSB0b29scy1zZGsgaW4gSU1BR0VfRkVBVFVSRVMiKQorCisKK2NsYXNzIEdjY0NvbXBpbGVUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LmNvcHlfdG8ob3MucGF0aC5qb2luKG9lUnVudGltZVRlc3QudGMuZmlsZXNkaXIsICJ0ZXN0LmMiKSwgIi90bXAvdGVzdC5jIikKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQuY29weV90byhvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5maWxlc2RpciwgInRlc3RtYWtlZmlsZSIpLCAiL3RtcC90ZXN0bWFrZWZpbGUiKQorICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5jb3B5X3RvKG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmZpbGVzZGlyLCAidGVzdC5jcHAiKSwgIi90bXAvdGVzdC5jcHAiKQorCisgICAgQHRlc3RjYXNlKDIwMykKKyAgICBkZWYgdGVzdF9nY2NfY29tcGlsZShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignZ2NjIC90bXAvdGVzdC5jIC1vIC90bXAvdGVzdCAtbG0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJnY2MgY29tcGlsZSBmYWlsZWQsIG91dHB1dDogJXMiICUgb3V0cHV0KQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCcvdG1wL3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJydW5uaW5nIGNvbXBpbGVkIGZpbGUgZmFpbGVkLCBvdXRwdXQgJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDIwMCkKKyAgICBkZWYgdGVzdF9ncHBfY29tcGlsZShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignZysrIC90bXAvdGVzdC5jIC1vIC90bXAvdGVzdCAtbG0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJnKysgY29tcGlsZSBmYWlsZWQsIG91dHB1dDogJXMiICUgb3V0cHV0KQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCcvdG1wL3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJydW5uaW5nIGNvbXBpbGVkIGZpbGUgZmFpbGVkLCBvdXRwdXQgJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExNDIpCisgICAgZGVmIHRlc3RfZ3BwMl9jb21waWxlKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdnKysgL3RtcC90ZXN0LmNwcCAtbyAvdG1wL3Rlc3QgLWxtJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iZysrIGNvbXBpbGUgZmFpbGVkLCBvdXRwdXQ6ICVzIiAlIG91dHB1dCkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignL3RtcC90ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0icnVubmluZyBjb21waWxlZCBmaWxlIGZhaWxlZCwgb3V0cHV0ICVzIiAlIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgyMDQpCisgICAgZGVmIHRlc3RfbWFrZShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignY2QgL3RtcDsgbWFrZSAtZiB0ZXN0bWFrZWZpbGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJydW5uaW5nIG1ha2UgZmFpbGVkLCBvdXRwdXQgJXMiICUgb3V0cHV0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnJ1bigicm0gL3RtcC90ZXN0LmMgL3RtcC90ZXN0Lm8gL3RtcC90ZXN0IC90bXAvdGVzdG1ha2VmaWxlIikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2tlcm5lbG1vZHVsZS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2tlcm5lbG1vZHVsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTgxNzIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUva2VybmVsbW9kdWxlLnB5CkBAIC0wLDAgKzEsMzQgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJ0b29scy1zZGsiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIHRvb2xzLXNkayBpbiBJTUFHRV9GRUFUVVJFUyIpCisKKworY2xhc3MgS2VybmVsTW9kdWxlVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50YXJnZXQuY29weV90byhvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5maWxlc2RpciwgImhlbGxvbW9kLmMiKSwgIi90bXAvaGVsbG9tb2QuYyIpCisgICAgICAgIHNlbGYudGFyZ2V0LmNvcHlfdG8ob3MucGF0aC5qb2luKG9lUnVudGltZVRlc3QudGMuZmlsZXNkaXIsICJoZWxsb21vZF9tYWtlZmlsZSIpLCAiL3RtcC9NYWtlZmlsZSIpCisKKyAgICBAdGVzdGNhc2UoJzMxNicpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9nY2NfY29tcGlsZScpCisgICAgZGVmIHRlc3Rfa2VybmVsX21vZHVsZShzZWxmKToKKyAgICAgICAgY21kcyA9IFsKKyAgICAgICAgICAgICdjZCAvdXNyL3NyYy9rZXJuZWwgJiYgbWFrZSBzY3JpcHRzJywKKyAgICAgICAgICAgICdjZCAvdG1wICYmIG1ha2UnLAorICAgICAgICAgICAgJ2NkIC90bXAgJiYgaW5zbW9kIGhlbGxvbW9kLmtvJywKKyAgICAgICAgICAgICdsc21vZCB8IGdyZXAgaGVsbG9tb2QnLAorICAgICAgICAgICAgJ2RtZXNnIHwgZ3JlcCBIZWxsbycsCisgICAgICAgICAgICAncm1tb2QgaGVsbG9tb2QnLCAnZG1lc2cgfCBncmVwICJDbGVhbmluZyB1cCBoZWxsb21vZCInCisgICAgICAgICAgICBdCisgICAgICAgIGZvciBjbWQgaW4gY21kczoKKyAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oY21kLCA5MDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJcbiIuam9pbihbY21kLCBvdXRwdXRdKSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCdybSAtZiAvdG1wL01ha2VmaWxlIC90bXAvaGVsbG9tb2QuYycpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9sZGQucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9sZGQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiMzg4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2xkZC5weQpAQCAtMCwwICsxLDIxIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInRvb2xzLXNkayIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgdG9vbHMtc2RrIGluIElNQUdFX0ZFQVRVUkVTIikKKworY2xhc3MgTGRkVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSg5NjIpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9sZGRfZXhpc3RzKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCd3aGljaCBsZGQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gImxkZCBkb2VzIG5vdCBleGlzdCBpbiBQQVRIOiB3aGljaCBsZGQ6ICVzIiAlIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgyMzkpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfbGRkX2V4aXN0cycpCisgICAgZGVmIHRlc3RfbGRkX3J0bGRsaXN0X2NoZWNrKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdmb3IgaSBpbiAkKHdoaWNoIGxkZCB8IHhhcmdzIGNhdCB8IGdyZXAgIl5SVExETElTVCJ8Y3V0IC1kXCc9XCcgLWYyfHRyIC1kIFwnIlwnKTsgZG8gdGVzdCAtZiAkaSAmJiBlY2hvICRpICYmIGJyZWFrOyBkb25lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJsZGQgcGF0aCBub3QgY29ycmVjdCBvciBSVExETElTVCBmaWxlcyBkb24ndCBleGlzdC4gIikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2xvZ3JvdGF0ZS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2xvZ3JvdGF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmQ3OTFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvbG9ncm90YXRlLnB5CkBAIC0wLDAgKzEsMjggQEAKKyMgVGhpcyB0ZXN0IHNob3VsZCBjb3ZlciBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvdHJfc2hvd19jYXNlLmNnaT9jYXNlX2lkPTI4OSB0ZXN0Y2FzZQorIyBOb3RlIHRoYXQgdGhlIGltYWdlIHVuZGVyIHRlc3QgbXVzdCBoYXZlIGxvZ3JvdGF0ZSBpbnN0YWxsZWQKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJsb2dyb3RhdGUiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gbG9ncm90YXRlIHBhY2thZ2UgaW4gaW1hZ2UiKQorCisKK2NsYXNzIExvZ3JvdGF0ZVRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0XzFfbG9ncm90YXRlX3NldHVwKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdta2RpciAvaG9tZS9yb290L2xvZ3JvdGF0ZV9kaXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gIkNvdWxkIG5vdCBjcmVhdGUgbG9ncm90YXRlX2Rpci4gT3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInNlZCAtaSAncyN3dG1wIHsjd3RtcCB7XFxuICAgIG9sZGRpciAvaG9tZS9yb290L2xvZ3JvdGF0ZV9kaXIjJyAvZXRjL2xvZ3JvdGF0ZS5jb25mIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJDb3VsZCBub3Qgd3JpdGUgdG8gbG9ncm90YXRlLmNvbmYgZmlsZS4gU3RhdHVzIGFuZCBvdXRwdXQ6ICVzIGFuZCAlcykiICUgKHN0YXR1cywgb3V0cHV0KSkKKworICAgIEB0ZXN0Y2FzZSgyODkpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoInRlc3RfMV9sb2dyb3RhdGVfc2V0dXAiKQorICAgIGRlZiB0ZXN0XzJfbG9ncm90YXRlKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdsb2dyb3RhdGUgLWYgL2V0Yy9sb2dyb3RhdGUuY29uZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAibG9ncm90YXRlIHNlcnZpY2UgY291bGQgbm90IGJlIHJlbG9hZGVkLiBTdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzIiAlIChzdGF0dXMsIG91dHB1dCkpCisgICAgICAgIG91dHB1dCA9IHNlbGYudGFyZ2V0LnJ1bignbHMgLWxhIC9ob21lL3Jvb3QvbG9ncm90YXRlX2Rpci8gfCB3YyAtbCcpWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQob3V0cHV0KT49MywgbXNnID0gIm5ldyBsb2dmaWxlIGNvdWxkIG5vdCBiZSBjcmVhdGVkLiBMaXN0IG9mIGZpbGVzIHdpdGhpbiBsb2cgZGlyZWN0b3J5OiAlcyIgJShzZWxmLnRhcmdldC5ydW4oJ2xzIC1sYSAvaG9tZS9yb290L2xvZ3JvdGF0ZV9kaXInKVsxXSkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9tdWx0aWxpYi5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL211bHRpbGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYmNjNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9tdWx0aWxpYi5weQpAQCAtMCwwICsxLDQ4IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIG11bHRpbGlicyA9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIk1VTFRJTElCUyIsIFRydWUpIG9yICIiCisgICAgaWYgIm11bHRpbGliOmxpYjMyIiBub3QgaW4gbXVsdGlsaWJzOgorICAgICAgICBza2lwTW9kdWxlKCJ0aGlzIGlzbid0IGEgbXVsdGlsaWI6bGliMzIgaW1hZ2UiKQorCisKK2NsYXNzIE11bHRpbGliVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIGRlZiBwYXJzZShzZWxmLCBzKToKKyAgICAgICAgIiIiCisgICAgICAgIFBhcnNlIHRoZSBvdXRwdXQgb2YgcmVhZGVsZiAtaCBhbmQgcmV0dXJuIHRoZSBiaW5hcnkgY2xhc3MsIG9yIGZhaWwuCisgICAgICAgICIiIgorICAgICAgICBsID0gW2wuc3BsaXQoKVsxXSBmb3IgbCBpbiBzLnNwbGl0KCdcbicpIGlmICJDbGFzczoiIGluIGxdCisgICAgICAgIGlmIGw6CisgICAgICAgICAgICByZXR1cm4gbFswXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJDYW5ub3QgcGFyc2UgcmVhZGVsZiBvdXRwdXRcbiIgKyBzKQorCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9jaGVja19tdWx0aWxpYl9saWJjKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdGhhdCBhIG11bHRpbGliIGltYWdlIGhhcyBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGxpYmMgaW4uCisgICAgICAgICIiIgorCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInJlYWRlbGYgLWggL2xpYi9saWJjLnNvLjYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgIkZhaWxlZCB0byByZWFkZWxmIC9saWIvbGliYy5zby42IikKKyAgICAgICAgY2xhc3MzMiA9IHNlbGYucGFyc2Uob3V0cHV0KQorCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInJlYWRlbGYgLWggL2xpYjY0L2xpYmMuc28uNiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCAiRmFpbGVkIHRvIHJlYWRlbGYgL2xpYjY0L2xpYmMuc28uNiIpCisgICAgICAgIGNsYXNzNjQgPSBzZWxmLnBhcnNlKG91dHB1dCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsYXNzMzIsICJFTEYzMiIsIG1zZz0iL2xpYi9saWJjLnNvLjYgaXNuJ3QgRUxGMzIgKGlzICVzKSIgJSBjbGFzczMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsYXNzNjQsICJFTEY2NCIsIG1zZz0iL2xpYjY0L2xpYmMuc28uNiBpc24ndCBFTEY2NCAoaXMgJXMpIiAlIGNsYXNzNjQpCisKKyAgICBAdGVzdGNhc2UoJzI3OScpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfY2hlY2tfbXVsdGlsaWJfbGliYycpCisgICAgZGVmIHRlc3RfZmlsZV9jb25ubWFuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCdsaWIzMi1jb25ubWFuLWdub21lJyksIG1zZz0iVGhpcyB0ZXN0IGFzc3VtZXMgbGliMzItY29ubm1hbi1nbm9tZSBpcyBpbnN0YWxsZWQiKQorCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInJlYWRlbGYgLWggL3Vzci9iaW4vY29ubm1hbi1hcHBsZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgIkZhaWxlZCB0byByZWFkZWxmIC91c3IvYmluL2Nvbm5tYW4tYXBwbGV0IikKKyAgICAgICAgdGhlY2xhc3MgPSBzZWxmLnBhcnNlKG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aGVjbGFzcywgIkVMRjMyIiwgbXNnPSJjb25ubWFuLWFwcGxldCBpc24ndCBFTEYzMiAoaXMgJXMpIiAlIHRoZWNsYXNzKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGFtLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGFtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MjA1YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9wYW0ucHkKQEAgLTAsMCArMSwyNSBAQAorIyBUaGlzIHRlc3Qgc2hvdWxkIGNvdmVyIGh0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy90cl9zaG93X2Nhc2UuY2dpP2Nhc2VfaWQ9Mjg3IHRlc3RjYXNlCisjIE5vdGUgdGhhdCB0aGUgaW1hZ2UgdW5kZXIgdGVzdCBtdXN0IGhhdmUgInBhbSIgaW4gRElTVFJPX0ZFQVRVUkVTCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgicGFtIik6CisgICAgICAgIHNraXBNb2R1bGUoInRhcmdldCBkb2Vzbid0IGhhdmUgJ3BhbScgaW4gRElTVFJPX0ZFQVRVUkVTIikKKworCitjbGFzcyBQYW1CYXNpY1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjg3KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3RfcGFtKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdsb2dpbiAtLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMSwgbXNnID0gImxvZ2luIGNvbW1hbmQgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZC4gU3RhdHVzIGFuZCBvdXRwdXQ6JXMgYW5kICVzIiAlKHN0YXR1cywgb3V0cHV0KSkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigncGFzc3dkIC0taGVscCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAicGFzc3dkIGNvbW1hbmQgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZC4gU3RhdHVzIGFuZCBvdXRwdXQ6JXMgYW5kICVzIiAlKHN0YXR1cywgb3V0cHV0KSkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignc3UgLS1oZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJzdSBjb21tYW5kIGRvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQuIFN0YXR1cyBhbmQgb3V0cHV0OiVzIGFuZCAlcyIgJShzdGF0dXMsIG91dHB1dCkpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3VzZXJhZGQgLS1oZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJ1c2VyYWRkIGNvbW1hbmQgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZC4gU3RhdHVzIGFuZCBvdXRwdXQ6JXMgYW5kICVzIiAlKHN0YXR1cywgb3V0cHV0KSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BhcnNlbG9ncy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BhcnNlbG9ncy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjA5NDdiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGFyc2Vsb2dzLnB5CkBAIC0wLDAgKzEsMjU3IEBACitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN1YnByb2Nlc3MKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKKyNpbiB0aGUgZnV0dXJlIHRoZXNlIGxpc3RzIGNvdWxkIGJlIG1vdmVkIG91dHNpZGUgb2YgbW9kdWxlCitlcnJvcnMgPSBbImVycm9yIiwgImNhbm5vdCIsICJjYW5cJ3QiLCAiZmFpbGVkIl0KKworY29tbW9uX2Vycm9ycyA9IFsKKyAgICAiKFdXKSB3YXJuaW5nLCAoRUUpIGVycm9yLCAoTkkpIG5vdCBpbXBsZW1lbnRlZCwgKD8/KSB1bmtub3duLiIsCisgICAgImRtYSB0aW1lb3V0IiwKKyAgICAiY2FuXCd0IGFkZCBoaWQgZGV2aWNlOiIsCisgICAgInVzYmhpZDogcHJvYmUgb2YgIiwKKyAgICAiX09TQyBmYWlsZWQgKEFFX0VSUk9SKSIsCisgICAgIl9PU0MgZmFpbGVkIChBRV9TVVBQT1JUKSIsCisgICAgIkFFX0FMUkVBRFlfRVhJU1RTIiwKKyAgICAiQUNQSSBfT1NDIHJlcXVlc3QgZmFpbGVkIChBRV9TVVBQT1JUKSIsCisgICAgImNhblwndCBkaXNhYmxlIEFTUE0iLAorICAgICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgXCJ2ZXNhXCIiLAorICAgICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgdmVzYSIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBcIm1vZGVzZXR0aW5nXCIiLAorICAgICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgbW9kZXNldHRpbmciLAorICAgICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgXCJnbHhcIiIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBcImZiZGV2XCIiLAorICAgICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgZmJkZXYiLAorICAgICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgZ2x4IiwKKyAgICAiW2RybV0gQ2Fubm90IGZpbmQgYW55IGNydGMgb3Igc2l6ZXMgLSBnb2luZyAxMDI0eDc2OCIsCisgICAgIl9PU0MgZmFpbGVkIChBRV9OT1RfRk9VTkQpOyBkaXNhYmxpbmcgQVNQTSIsCisgICAgIk9wZW4gQUNQSSBmYWlsZWQgKC92YXIvcnVuL2FjcGlkLnNvY2tldCkgKE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkpIiwKKyAgICAiTlggKEV4ZWN1dGUgRGlzYWJsZSkgcHJvdGVjdGlvbiBjYW5ub3QgYmUgZW5hYmxlZDogbm9uLVBBRSBrZXJuZWwhIiwKKyAgICAiaGQuOiBwb3NzaWJseSBmYWlsZWQgb3Bjb2RlIiwKKyAgICAnTkVUTElOSyBJTklUSUFMSVpBVElPTiBGQUlMRUQnLAorICAgICdrZXJuZWw6IENhbm5vdCBmaW5kIG1hcCBmaWxlJywKKyAgICAnb21hcF9od21vZDogZGVidWdzczogX3dhaXRfdGFyZ2V0X2Rpc2FibGUgZmFpbGVkJywKKyAgICAnVkdBIGFyYml0ZXI6IGNhbm5vdCBvcGVuIGtlcm5lbCBhcmJpdGVyLCBubyBtdWx0aS1jYXJkIHN1cHBvcnQnLAorICAgICdGYWlsZWQgdG8gZmluZCBVUkw6aHR0cDovL2lwdjQuY29ubm1hbi5uZXQvb25saW5lL3N0YXR1cy5odG1sJywKKyAgICAnT25saW5lIGNoZWNrIGZhaWxlZCBmb3InLAorICAgIF0KKworeDg2X2NvbW1vbiA9IFsKKyAgICAnW2RybTpwc2JfZG9faW5pdF0gKkVSUk9SKiBEZWJ1ZyBpcycsCisgICAgJ3dyb25nIEVMRiBjbGFzcycsCisgICAgJ0NvdWxkIG5vdCBlbmFibGUgUG93ZXJCdXR0b24gZXZlbnQnLAorICAgICdwcm9iZSBvZiBMTlhQV1JCTjowMCBmYWlsZWQgd2l0aCBlcnJvciAtMjInLAorXSArIGNvbW1vbl9lcnJvcnMKKworcWVtdXg4Nl9jb21tb24gPSBbCisgICAgJ0Zhc3QgVFNDIGNhbGlicmF0aW9uJywgCisgICAgJ3dyb25nIEVMRiBjbGFzcycsCisgICAgImZhaWwgdG8gYWRkIE1NQ09ORklHIGluZm9ybWF0aW9uLCBjYW4ndCBhY2Nlc3MgZXh0ZW5kZWQgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgdW5kZXIgdGhpcyBicmlkZ2UuIiwKKyAgICAiY2FuJ3QgY2xhaW0gQkFSICIsCitdICsgY29tbW9uX2Vycm9ycworCitpZ25vcmVfZXJyb3JzID0geyAKKyAgICAnZGVmYXVsdCcgOiBjb21tb25fZXJyb3JzLAorICAgICdxZW11eDg2JyA6IFsKKyAgICAgICAgJ0ZhaWxlZCB0byBhY2Nlc3MgcGVyZmN0ciBtc3IgKE1TUicsCisgICAgICAgIF0gKyBxZW11eDg2X2NvbW1vbiwKKyAgICAncWVtdXg4Ni02NCcgOiBxZW11eDg2X2NvbW1vbiwKKyAgICAncWVtdW1pcHMnIDogWworICAgICAgICAnRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJnbHgiJywKKyAgICAgICAgJ3BjaSAwMDAwOjAwOjAwLjA6IFtGaXJtd2FyZSBCdWddOiByZWcgMHguLjogaW52YWxpZCBCQVIgKGNhblwndCBzaXplKScsCisgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorICAgICdxZW11bWlwczY0JyA6IFsKKyAgICAgICAgJ3BjaSAwMDAwOjAwOjAwLjA6IFtGaXJtd2FyZSBCdWddOiByZWcgMHguLjogaW52YWxpZCBCQVIgKGNhblwndCBzaXplKScsCisgICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAncWVtdXBwYycgOiBbCisgICAgICAgICdQQ0kgMDAwMDowMCBDYW5ub3QgcmVzZXJ2ZSBMZWdhY3kgSU8gW2lvICAweDAwMDAtMHgwZmZmXScsCisgICAgICAgICdob3N0IHNpZGUgODAtd2lyZSBjYWJsZSBkZXRlY3Rpb24gZmFpbGVkLCBsaW1pdGluZyBtYXggc3BlZWQnLAorICAgICAgICAnbW9kZSAiNjQweDQ4MCIgdGVzdCBmYWlsZWQnLAorICAgICAgICAnRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJnbHgiJywKKyAgICAgICAgXSArIGNvbW1vbl9lcnJvcnMsCisgICAgJ3FlbXVhcm0nIDogWworICAgICAgICAnbW1jaS1wbDE4eDogcHJvYmUgb2YgZnBnYTowNSBmYWlsZWQgd2l0aCBlcnJvciAtMjInLAorICAgICAgICAnbW1jaS1wbDE4eDogcHJvYmUgb2YgZnBnYTowYiBmYWlsZWQgd2l0aCBlcnJvciAtMjInLAorICAgICAgICAnRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJnbHgiJworICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAncWVtdWFybTY0JyA6IFsKKyAgICAgICAgJ0ZhdGFsIHNlcnZlciBlcnJvcjonLAorICAgICAgICAnKEVFKSBTZXJ2ZXIgdGVybWluYXRlZCB3aXRoIGVycm9yICgxKS4gQ2xvc2luZyBsb2cgZmlsZS4nLAorICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAnZW1lbmxvdycgOiBbCisgICAgICAgICdbRmlybXdhcmUgQnVnXTogQUNQSTogTm8gX0JRQyBtZXRob2QsIGNhbm5vdCBkZXRlcm1pbmUgaW5pdGlhbCBicmlnaHRuZXNzJywKKyAgICAgICAgJyhFRSkgRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJwc2IiJywKKyAgICAgICAgJyhFRSkgRmFpbGVkIHRvIGxvYWQgbW9kdWxlIHBzYicsCisgICAgICAgICcoRUUpIEZhaWxlZCB0byBsb2FkIG1vZHVsZSAicHNiZHJ2IicsCisgICAgICAgICcoRUUpIEZhaWxlZCB0byBsb2FkIG1vZHVsZSBwc2JkcnYnLAorICAgICAgICAnKEVFKSBvcGVuIC9kZXYvZmIwOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JywKKyAgICAgICAgJyhFRSkgQUlHTFg6IHJldmVydGluZyB0byBzb2Z0d2FyZSByZW5kZXJpbmcnLAorICAgICAgICBdICsgeDg2X2NvbW1vbiwKKyAgICAnY29yZTJfMzInIDogWworICAgICAgICAnQUNQSTogTm8gX0JRQyBtZXRob2QsIGNhbm5vdCBkZXRlcm1pbmUgaW5pdGlhbCBicmlnaHRuZXNzJywKKyAgICAgICAgJ1tGaXJtd2FyZSBCdWddOiBBQ1BJOiBObyBfQlFDIG1ldGhvZCwgY2Fubm90IGRldGVybWluZSBpbml0aWFsIGJyaWdodG5lc3MnLAorICAgICAgICAnKEVFKSBGYWlsZWQgdG8gbG9hZCBtb2R1bGUgInBzYiInLAorICAgICAgICAnKEVFKSBGYWlsZWQgdG8gbG9hZCBtb2R1bGUgcHNiJywKKyAgICAgICAgJyhFRSkgRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJwc2JkcnYiJywKKyAgICAgICAgJyhFRSkgRmFpbGVkIHRvIGxvYWQgbW9kdWxlIHBzYmRydicsCisgICAgICAgICcoRUUpIG9wZW4gL2Rldi9mYjA6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknLAorICAgICAgICAnKEVFKSBBSUdMWDogcmV2ZXJ0aW5nIHRvIHNvZnR3YXJlIHJlbmRlcmluZycsCisgICAgICAgIF0gKyB4ODZfY29tbW9uLAorICAgICdpbnRlbC1jb3JlaTctNjQnIDogWworICAgICAgICAiY29udHJvbGxlciBjYW4ndCBkbyBERVZTTFAsIHR1cm5pbmcgb2ZmIiwKKyAgICAgICAgXSArIGNvbW1vbl9lcnJvcnMsCisgICAgJ2Nyb3duYmF5JyA6IHg4Nl9jb21tb24sCisgICAgJ2dlbmVyaWN4ODYnIDogeDg2X2NvbW1vbiwKKyAgICAnZ2VuZXJpY3g4Ni02NCcgOiB4ODZfY29tbW9uLAorICAgICdlZGdlcm91dGVyJyA6IFsKKyAgICAgICAgJ0ZhdGFsIHNlcnZlciBlcnJvcjonLAorICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAnbWlubm93JyA6IFsKKyAgICAgICAgJ25ldGxpbmsgaW5pdCBmYWlsZWQnLAorICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAnamFzcGVyZm9yZXN0JyA6IFsKKyAgICAgICAgJ0FjdGl2YXRlZCBzZXJ2aWNlIFwnb3JnLmJsdWV6XCcgZmFpbGVkOicsCisgICAgICAgICdVbmFibGUgdG8gZmluZCBORkMgbmV0bGluayBmYW1pbHknLAorICAgICAgICAnbmV0bGluayBpbml0IGZhaWxlZCcsCisgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorfQorCitsb2dfbG9jYXRpb25zID0gWyIvdmFyL2xvZy8iLCIvdmFyL2xvZy9kbWVzZyIsICIvdG1wL2RtZXNnX291dHB1dC5sb2ciXQorCitjbGFzcyBQYXJzZUxvZ3NUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYuZXJyb3JzID0gZXJyb3JzCisgICAgICAgIHNlbGYuaWdub3JlX2Vycm9ycyA9IGlnbm9yZV9lcnJvcnMKKyAgICAgICAgc2VsZi5sb2dfbG9jYXRpb25zID0gbG9nX2xvY2F0aW9ucworICAgICAgICBzZWxmLm1zZyA9ICIiCisKKyAgICBkZWYgZ2V0TWFjaGluZShzZWxmKToKKyAgICAgICAgcmV0dXJuIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIk1BQ0hJTkUiLCBUcnVlKQorCisgICAgI2dldCBzb21lIGluZm9ybWF0aW9uIG9uIHRoZSBDUFUgb2YgdGhlIG1hY2hpbmUgdG8gZGlzcGxheSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBvdXRwdXQuIFRoaXMgaW5mbyBtaWdodCBiZSB1c2VmdWwgaW4gc29tZSBjYXNlcy4KKyAgICBkZWYgZ2V0SGFyZHdhcmVJbmZvKHNlbGYpOgorICAgICAgICBod2kgPSAiIgorICAgICAgICAoc3RhdHVzLCBjcHVfbmFtZSkgPSBzZWxmLnRhcmdldC5ydW4oImNhdCAvcHJvYy9jcHVpbmZvIHwgZ3JlcCBcIm1vZGVsIG5hbWVcIiB8IGhlYWQgLW4xIHwgYXdrICdCRUdJTntGUz1cIjpcIn17cHJpbnQgJDJ9JyIpCisgICAgICAgIChzdGF0dXMsIGNwdV9waHlzaWNhbF9jb3JlcykgPSBzZWxmLnRhcmdldC5ydW4oImNhdCAvcHJvYy9jcHVpbmZvIHwgZ3JlcCBcImNwdSBjb3Jlc1wiIHwgaGVhZCAtbjEgfCBhd2sgeydwcmludCAkNCd9IikKKyAgICAgICAgKHN0YXR1cywgY3B1X2xvZ2ljYWxfY29yZXMpID0gc2VsZi50YXJnZXQucnVuKCJjYXQgL3Byb2MvY3B1aW5mbyB8IGdyZXAgXCJwcm9jZXNzb3JcIiB8IHdjIC1sIikKKyAgICAgICAgKHN0YXR1cywgY3B1X2FyY2gpID0gc2VsZi50YXJnZXQucnVuKCJ1bmFtZSAtbSIpCisgICAgICAgIGh3aSArPSAiTWFjaGluZSBpbmZvcm1hdGlvbjogXG4iCisgICAgICAgIGh3aSArPSAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIgorICAgICAgICBod2kgKz0gIk1hY2hpbmUgbmFtZTogIitzZWxmLmdldE1hY2hpbmUoKSsiXG4iCisgICAgICAgIGh3aSArPSAiQ1BVOiAiK3N0cihjcHVfbmFtZSkrIlxuIgorICAgICAgICBod2kgKz0gIkFyY2g6ICIrc3RyKGNwdV9hcmNoKSsiXG4iCisgICAgICAgIGh3aSArPSAiUGh5c2ljYWwgY29yZXM6ICIrc3RyKGNwdV9waHlzaWNhbF9jb3JlcykrIlxuIgorICAgICAgICBod2kgKz0gIkxvZ2ljYWwgY29yZXM6ICIrc3RyKGNwdV9sb2dpY2FsX2NvcmVzKSsiXG4iCisgICAgICAgIGh3aSArPSAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIgorICAgICAgICByZXR1cm4gaHdpCisKKyAgICAjZ28gdGhyb3VnaCB0aGUgbG9nIGxvY2F0aW9ucyBwcm92aWRlZCBhbmQgaWYgaXQncyBhIGZvbGRlciBjcmVhdGUgYSBsaXN0IHdpdGggYWxsIHRoZSAubG9nIGZpbGVzIGluIGl0LCBpZiBpdCdzIGEgZmlsZSBqdXN0IGFkZCAKKyAgICAjaXQgdG8gdGhhdCBsaXN0CisgICAgZGVmIGdldExvZ0xpc3Qoc2VsZiwgbG9nX2xvY2F0aW9ucyk6CisgICAgICAgIGxvZ3MgPSBbXQorICAgICAgICBmb3IgbG9jYXRpb24gaW4gbG9nX2xvY2F0aW9uczoKKyAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInRlc3QgLWYgIitzdHIobG9jYXRpb24pKQorICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSAwKToKKyAgICAgICAgICAgICAgICBsb2dzLmFwcGVuZChzdHIobG9jYXRpb24pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCJ0ZXN0IC1kICIrc3RyKGxvY2F0aW9uKSkKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IDApOgorICAgICAgICAgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCJmaW5kICIrc3RyKGxvY2F0aW9uKSsiLyoubG9nIC1tYXhkZXB0aCAxIC10eXBlIGYiKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IDApOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxvZ2ZpbGUgaW4gb3V0cHV0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ3MuYXBwZW5kKG9zLnBhdGguam9pbihsb2NhdGlvbixzdHIobG9nZmlsZSkpKQorICAgICAgICByZXR1cm4gbG9ncworCisgICAgI2NvcHkgdGhlIGxvZyBmaWxlcyB0byBiZSBwYXJzZWQgbG9jYWxseQorICAgIGRlZiB0cmFuc2Zlcl9sb2dzKHNlbGYsIGxvZ19saXN0KToKKyAgICAgICAgdGFyZ2V0X2xvZ3MgPSAndGFyZ2V0X2xvZ3MnCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0YXJnZXRfbG9ncyk6CisgICAgICAgICAgICBvcy5tYWtlZGlycyh0YXJnZXRfbG9ncykKKyAgICAgICAgZm9yIGYgaW4gbG9nX2xpc3Q6CisgICAgICAgICAgICBzZWxmLnRhcmdldC5jb3B5X2Zyb20oZiwgdGFyZ2V0X2xvZ3MpCisKKyAgICAjZ2V0IHRoZSBsb2NhbCBsaXN0IG9mIGxvZ3MKKyAgICBkZWYgZ2V0X2xvY2FsX2xvZ19saXN0KHNlbGYsIGxvZ19sb2NhdGlvbnMpOgorICAgICAgICBzZWxmLnRyYW5zZmVyX2xvZ3Moc2VsZi5nZXRMb2dMaXN0KGxvZ19sb2NhdGlvbnMpKQorICAgICAgICBsb2dzID0gWyBvcy5wYXRoLmpvaW4oJ3RhcmdldF9sb2dzJyxmKSBmb3IgZiBpbiBvcy5saXN0ZGlyKCd0YXJnZXRfbG9ncycpIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbigndGFyZ2V0X2xvZ3MnLGYpKSBdCisgICAgICAgIHJldHVybiBsb2dzCisKKyAgICAjYnVpbGQgdGhlIGdyZXAgY29tbWFuZCB0byBiZSB1c2VkIHdpdGggZmlsdGVycyBhbmQgZXhjbHVzaW9ucworICAgIGRlZiBidWlsZF9ncmVwY21kKHNlbGYsIGVycm9ycywgaWdub3JlX2Vycm9ycywgbG9nKToKKyAgICAgICAgZ3JlcGNtZCA9ICJncmVwICIKKyAgICAgICAgZ3JlcGNtZCArPSItRWkgXCIiCisgICAgICAgIGZvciBlcnJvciBpbiBlcnJvcnM6CisgICAgICAgICAgICBncmVwY21kICs9IGVycm9yKyJ8IgorICAgICAgICBncmVwY21kID0gZ3JlcGNtZFs6LTFdCisgICAgICAgIGdyZXBjbWQgKz0gIlwiICIrc3RyKGxvZykrIiB8IGdyZXAgLUVpdiBcJyIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXJyb3JsaXN0ID0gaWdub3JlX2Vycm9yc1tzZWxmLmdldE1hY2hpbmUoKV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5tc2cgKz0gIk5vIGlnbm9yZSBsaXN0IGZvdW5kIGZvciB0aGlzIG1hY2hpbmUsIHVzaW5nIGRlZmF1bHRcbiIKKyAgICAgICAgICAgIGVycm9ybGlzdCA9IGlnbm9yZV9lcnJvcnNbJ2RlZmF1bHQnXQorICAgICAgICBmb3IgaWdub3JlX2Vycm9yIGluIGVycm9ybGlzdDoKKyAgICAgICAgICAgIGlnbm9yZV9lcnJvciA9IGlnbm9yZV9lcnJvci5yZXBsYWNlKCIoIiwgIlwoIikKKyAgICAgICAgICAgIGlnbm9yZV9lcnJvciA9IGlnbm9yZV9lcnJvci5yZXBsYWNlKCIpIiwgIlwpIikKKyAgICAgICAgICAgIGlnbm9yZV9lcnJvciA9IGlnbm9yZV9lcnJvci5yZXBsYWNlKCInIiwgIi4iKQorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIj8iLCAiXD8iKQorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIlsiLCAiXFsiKQorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIl0iLCAiXF0iKQorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIioiLCAiXCoiKQorICAgICAgICAgICAgZ3JlcGNtZCArPSBpZ25vcmVfZXJyb3IrInwiCisgICAgICAgIGdyZXBjbWQgPSBncmVwY21kWzotMV0KKyAgICAgICAgZ3JlcGNtZCArPSAiXCciCisgICAgICAgIHJldHVybiBncmVwY21kCisKKyAgICAjZ3JlcCBvbmx5IHRoZSBlcnJvcnMgc28gdGhhdCB0aGVpciBjb250ZXh0IGNvdWxkIGJlIGNvbGxlY3RlZC4gRGVmYXVsdCBjb250ZXh0IGlzIDEwIGxpbmVzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGVycm9yIGl0c2VsZgorICAgIGRlZiBwYXJzZV9sb2dzKHNlbGYsIGVycm9ycywgaWdub3JlX2Vycm9ycywgbG9ncywgbGluZXNfYmVmb3JlID0gMTAsIGxpbmVzX2FmdGVyID0gMTApOgorICAgICAgICByZXN1bHRzID0ge30KKyAgICAgICAgcmV6ID0gW10KKyAgICAgICAgZ3JlcF9vdXRwdXQgPSAnJworICAgICAgICBmb3IgbG9nIGluIGxvZ3M6CisgICAgICAgICAgICByZXN1bHQgPSBOb25lCisgICAgICAgICAgICB0aGVncmVwID0gc2VsZi5idWlsZF9ncmVwY21kKGVycm9ycywgaWdub3JlX2Vycm9ycywgbG9nKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KHRoZWdyZXAsIHNoZWxsPVRydWUpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgKHJlc3VsdCBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICAgICAgcmVzdWx0c1tsb2cucmVwbGFjZSgndGFyZ2V0X2xvZ3MvJywnJyldID0ge30KKyAgICAgICAgICAgICAgICByZXogPSByZXN1bHQuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgZm9yIHhyZXogaW4gcmV6OgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gImdyZXAgXCJcXCIrc3RyKHhyZXopKyJcIiAtQiAiK3N0cihsaW5lc19iZWZvcmUpKyIgLUEgIitzdHIobGluZXNfYWZ0ZXIpKyIgIitzdHIobG9nKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBncmVwX291dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNvbW1hbmQsIHNoZWxsPVRydWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1tsb2cucmVwbGFjZSgndGFyZ2V0X2xvZ3MvJywnJyldW3hyZXpdPWdyZXBfb3V0cHV0CisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICAjZ2V0IHRoZSBvdXRwdXQgb2YgZG1lc2cgYW5kIHdyaXRlIGl0IGluIGEgZmlsZS4gVGhpcyBmaWxlIGlzIGFkZGVkIHRvIGxvZ19sb2NhdGlvbnMuCisgICAgZGVmIHdyaXRlX2RtZXNnKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBkbWVzZykgPSBzZWxmLnRhcmdldC5ydW4oImRtZXNnIikKKyAgICAgICAgKHN0YXR1cywgZG1lc2cyKSA9IHNlbGYudGFyZ2V0LnJ1bigiZWNobyBcIiIrc3RyKGRtZXNnKSsiXCIgPiAvdG1wL2RtZXNnX291dHB1dC5sb2ciKQorCisgICAgQHRlc3RjYXNlKDEwNTkpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9wYXJzZWxvZ3Moc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfZG1lc2coKQorICAgICAgICBsb2dfbGlzdCA9IHNlbGYuZ2V0X2xvY2FsX2xvZ19saXN0KHNlbGYubG9nX2xvY2F0aW9ucykKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5wYXJzZV9sb2dzKHNlbGYuZXJyb3JzLCBzZWxmLmlnbm9yZV9lcnJvcnMsIGxvZ19saXN0KQorICAgICAgICBwcmludCBzZWxmLmdldEhhcmR3YXJlSW5mbygpCisgICAgICAgIGVycmNvdW50ID0gMAorICAgICAgICBmb3IgbG9nIGluIHJlc3VsdDoKKyAgICAgICAgICAgIHNlbGYubXNnICs9ICJMb2c6ICIrbG9nKyJcbiIKKyAgICAgICAgICAgIHNlbGYubXNnICs9ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICAgICAgZm9yIGVycm9yIGluIHJlc3VsdFtsb2ddOgorICAgICAgICAgICAgICAgIGVycmNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICBzZWxmLm1zZyArPSAiQ2VudHJhbCBlcnJvcjogIitzdHIoZXJyb3IpKyJcbiIKKyAgICAgICAgICAgICAgICBzZWxmLm1zZyArPSAgIioqKioqKioqKioqKioqKioqKioqKioqXG4iCisgICAgICAgICAgICAgICAgc2VsZi5tc2cgKz0gIHJlc3VsdFtzdHIobG9nKV1bc3RyKGVycm9yKV0rIlxuIgorICAgICAgICAgICAgICAgIHNlbGYubXNnICs9ICAiKioqKioqKioqKioqKioqKioqKioqKipcbiIKKyAgICAgICAgc2VsZi5tc2cgKz0gIiVzIGVycm9ycyBmb3VuZCBpbiBsb2dzLiIgJSBlcnJjb3VudAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVycmNvdW50LCAwLCBtc2c9c2VsZi5tc2cpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9wZXJsLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGVybC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDQ0ZDBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGVybC5weQpAQCAtMCwwICsxLDMwIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgicGVybCIpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBwZXJsIHBhY2thZ2UgaW4gdGhlIGltYWdlIikKKworCitjbGFzcyBQZXJsVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5jb3B5X3RvKG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmZpbGVzZGlyLCAidGVzdC5wbCIpLCAiL3RtcC90ZXN0LnBsIikKKworICAgIEB0ZXN0Y2FzZSgxMTQxKQorICAgIGRlZiB0ZXN0X3BlcmxfZXhpc3RzKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCd3aGljaCBwZXJsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iUGVybCBiaW5hcnkgbm90IGluIFBBVEggb3Igbm90IG9uIHRhcmdldC4iKQorCisgICAgQHRlc3RjYXNlKDIwOCkKKyAgICBkZWYgdGVzdF9wZXJsX3dvcmtzKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdwZXJsIC90bXAvdGVzdC5wbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkV4aXQgc3RhdHVzIHdhcyBub3QgMC4gT3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAidGhlIHZhbHVlIG9mIGEgaXMgMC4wMSIsIG1zZz0iSW5jb3JyZWN0IG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnJ1bigicm0gL3RtcC90ZXN0LnBsIikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BpbmcucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9waW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYzQ2MDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9waW5nLnB5CkBAIC0wLDAgKzEsMjIgQEAKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0Citmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitjbGFzcyBQaW5nVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSg5NjQpCisgICAgZGVmIHRlc3RfcGluZyhzZWxmKToKKyAgICAgICAgb3V0cHV0ID0gJycKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArIDYwCisgICAgICAgIHdoaWxlIGNvdW50IDwgNSBhbmQgdGltZS50aW1lKCkgPCBlbmR0aW1lOgorICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oInBpbmcgLWMgMSAlcyIgJSBzZWxmLnRhcmdldC5pcCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgIG91dHB1dCArPSBwcm9jLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgICAgIGlmIHByb2MucG9sbCgpID09IDA6CisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgNSwgbXNnID0gIkV4cGVjdGVkIDUgY29uc2VjdXRpdmUgcmVwbGllcywgZ290ICVkLlxucGluZyBvdXRwdXQgaXM6XG4lcyIgJSAoY291bnQsb3V0cHV0KSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3B5dGhvbi5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3B5dGhvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmVkYjdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcHl0aG9uLnB5CkBAIC0wLDAgKzEsMzUgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJweXRob24iKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gcHl0aG9uIHBhY2thZ2UgaW4gdGhlIGltYWdlIikKKworCitjbGFzcyBQeXRob25UZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LmNvcHlfdG8ob3MucGF0aC5qb2luKG9lUnVudGltZVRlc3QudGMuZmlsZXNkaXIsICJ0ZXN0LnB5IiksICIvdG1wL3Rlc3QucHkiKQorCisgICAgQHRlc3RjYXNlKDExNDUpCisgICAgZGVmIHRlc3RfcHl0aG9uX2V4aXN0cyhzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignd2hpY2ggcHl0aG9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iUHl0aG9uIGJpbmFyeSBub3QgaW4gUEFUSCBvciBub3Qgb24gdGFyZ2V0LiIpCisKKyAgICBAdGVzdGNhc2UoOTY1KQorICAgIGRlZiB0ZXN0X3B5dGhvbl9zdGRvdXQoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3B5dGhvbiAvdG1wL3Rlc3QucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJFeGl0IHN0YXR1cyB3YXMgbm90IDAuIE91dHB1dDogJXMiICUgb3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgInRoZSB2YWx1ZSBvZiBhIGlzIDAuMDEiLCBtc2c9IkluY29ycmVjdCBvdXRwdXQ6ICVzIiAlIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTQ2KQorICAgIGRlZiB0ZXN0X3B5dGhvbl90ZXN0ZmlsZShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignbHMgL3RtcC90ZXN0ZmlsZS5weXRob24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJQeXRob24gdGVzdCBmaWxlIGdlbmVyYXRlIGZhaWxlZC4iKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnJ1bigicm0gL3RtcC90ZXN0LnB5IC90bXAvdGVzdGZpbGUucHl0aG9uIikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3JwbS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3JwbS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmFhZTI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcnBtLnB5CkBAIC0wLDAgKzEsMTAxIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGZubWF0Y2gKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInBhY2thZ2UtbWFuYWdlbWVudCIpOgorICAgICAgICAgICAgc2tpcE1vZHVsZSgicnBtIG1vZHVsZSBza2lwcGVkOiB0YXJnZXQgZG9lc24ndCBoYXZlIHBhY2thZ2UtbWFuYWdlbWVudCBpbiBJTUFHRV9GRUFUVVJFUyIpCisgICAgaWYgInBhY2thZ2VfcnBtIiAhPSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJQQUNLQUdFX0NMQVNTRVMiLCBUcnVlKS5zcGxpdCgpWzBdOgorICAgICAgICAgICAgc2tpcE1vZHVsZSgicnBtIG1vZHVsZSBza2lwcGVkOiB0YXJnZXQgZG9lc24ndCBoYXZlIHJwbSBhcyBwcmltYXJ5IHBhY2thZ2UgbWFuYWdlciIpCisKKworY2xhc3MgUnBtQmFzaWNUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDk2MCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3JwbV9oZWxwKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdycG0gLS1oZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0ic3RhdHVzIGFuZCBvdXRwdXQ6ICVzIGFuZCAlcyIgJSAoc3RhdHVzLG91dHB1dCkpCisKKyAgICBAdGVzdGNhc2UoMTkxKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3JwbV9oZWxwJykKKyAgICBkZWYgdGVzdF9ycG1fcXVlcnkoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3JwbSAtcSBycG0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJzdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzIiAlIChzdGF0dXMsb3V0cHV0KSkKKworY2xhc3MgUnBtSW5zdGFsbFJlbW92ZVRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgcGtnYXJjaCA9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ1RVTkVfUEtHQVJDSCcsIFRydWUpLnJlcGxhY2UoIi0iLCAiXyIpCisgICAgICAgIHJwbWRpciA9IG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdERVBMT1lfRElSJywgVHJ1ZSksICJycG0iLCBwa2dhcmNoKQorICAgICAgICAjIHBpY2sgcnBtLWRvYyBhcyBhIHRlc3QgZmlsZSB0byBnZXQgaW5zdGFsbGVkLCBiZWNhdXNlIGl0J3Mgc21hbGwgYW5kIGl0IHdpbGwgYWx3YXlzIGJlIGJ1aWx0IGZvciBzdGFuZGFyZCB0YXJnZXRzCisgICAgICAgIGZvciBmIGluIGZubWF0Y2guZmlsdGVyKG9zLmxpc3RkaXIocnBtZGlyKSwgInJwbS1kb2MtKi4lcy5ycG0iICUgcGtnYXJjaCk6CisgICAgICAgICAgICB0ZXN0cnBtZmlsZSA9IGYKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQuY29weV90byhvcy5wYXRoLmpvaW4ocnBtZGlyLHRlc3RycG1maWxlKSwgIi90bXAvcnBtLWRvYy5ycG0iKQorCisgICAgQHRlc3RjYXNlKDE5MikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9ycG1faGVscCcpCisgICAgZGVmIHRlc3RfcnBtX2luc3RhbGwoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3JwbSAtaXZoIC90bXAvcnBtLWRvYy5ycG0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJGYWlsZWQgdG8gaW5zdGFsbCBycG0tZG9jIHBhY2thZ2U6ICVzIiAlIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxOTQpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfcnBtX2luc3RhbGwnKQorICAgIGRlZiB0ZXN0X3JwbV9yZW1vdmUoc2VsZik6CisgICAgICAgIChzdGF0dXMsb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigncnBtIC1lIHJwbS1kb2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJGYWlsZWQgdG8gcmVtb3ZlIHJwbS1kb2MgcGFja2FnZTogJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwOTYpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9ycG1fcXVlcnlfbm9ucm9vdChzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigndXNlcmFkZCB0ZXN0MScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGF0dXMgPT0gMCwgbXNnPSJGYWlsZWQgdG8gY3JlYXRlIG5ldyB1c2VyIikKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignc3VkbyAtdSB0ZXN0MSBpZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnKHRlc3QxKScgaW4gb3V0cHV0LCBtc2c9IkZhaWxlZCB0byBleGVjdXRlIGFzIG5ldyB1c2VyIikKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignc3VkbyAtdSB0ZXN0MSBycG0gLXFhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0ic3RhdHVzOiAlcy4gQ2Fubm90IHJ1biBycG0gLXFhIiAlIHN0YXR1cykKKworICAgIEB0ZXN0Y2FzZSgxOTUpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfcnBtX2luc3RhbGwnKQorICAgIGRlZiB0ZXN0X2NoZWNrX3JwbV9pbnN0YWxsX3JlbW92YWxfbG9nX2ZpbGVfc2l6ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6ICAgICBDaGVjayBycG0gaW5zdGFsbC9yZW1vdmFsIGxvZyBmaWxlIHNpemUKKyAgICAgICAgRXhwZWN0ZWQ6ICAgIFRoZXJlIHNob3VsZCBiZSBzb21lIG1ldGhvZCB0byBrZWVwIHJwbSBsb2cgaW4gYSBzbWFsbCBzaXplIC4KKyAgICAgICAgUHJvZHVjdDogICAgIEJTUHMKKyAgICAgICAgQXV0aG9yOiAgICAgIEFsZXhhbmRydSBHZW9yZ2VzY3UgPGFsZXhhbmRydS5jLmdlb3JnZXNjdUBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorICAgICAgICBkYl9maWxlc19jbWQgPSAnbHMgL3Zhci9saWIvcnBtL19fZGIuKicKKyAgICAgICAgZ2V0X2xvZ19zaXplX2NtZCA9ICJkdSAvdmFyL2xpYi9ycG0vbG9nL2xvZy4qIHwgYXdrICd7cHJpbnQgJDF9JyIKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHNvbWUgZGF0YWJhc2UgZmlsZXMgYXJlIHVuZGVyIC92YXIvbGliL3JwbSBhcyAnX19kYi54eHgnCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oZGJfZmlsZXNfY21kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cywgJ0ZhaWxlZCB0byBmaW5kIGRhdGFiYXNlIGZpbGVzIHVuZGVyIC92YXIvbGliL3JwbS8gYXMgX19kYi54eHgnKQorCisgICAgICAgICMgUmVtb3ZlIHRoZSBwYWNrYWdlIGp1c3QgaW4gY2FzZQorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ3JwbSAtZSBycG0tZG9jJykKKworICAgICAgICAjIEluc3RhbGwvUmVtb3ZlIGEgcGFja2FnZSAxMCB0aW1lcworICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdycG0gLWl2aCAvdG1wL3JwbS1kb2MucnBtJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzLCAiRmFpbGVkIHRvIGluc3RhbGwgcnBtLWRvYyBwYWNrYWdlLiBSZWFzb246IHt9Ii5mb3JtYXQob3V0cHV0KSkKKworICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigncnBtIC1lIHJwbS1kb2MnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICJGYWlsZWQgdG8gcmVtb3ZlIHJwbS1kb2MgcGFja2FnZS4gUmVhc29uOiB7fSIuZm9ybWF0KG91dHB1dCkpCisKKyAgICAgICAgIyBHZXQgdGhlIHNpemUgb2YgbG9nIGZpbGUKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihnZXRfbG9nX3NpemVfY21kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cywgJ0ZhaWxlZCB0byBnZXQgdGhlIGZpbmFsIHNpemUgb2YgdGhlIGxvZyBmaWxlLicpCisKKyAgICAgICAgIyBDb21wYXJlIGVhY2ggbG9nIHNpemUKKyAgICAgICAgZm9yIGxvZ19maWxlX3NpemUgaW4gb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoaW50KGxvZ19maWxlX3NpemUpLCAxMTI2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xvZyBmaWxlIHNpemUgaXMgZ3JlYXRlciB0aGF0IGV4cGVjdGVkICh+MTBNQiksIGZvdW5kIHt9IGJ5dGVzJy5mb3JtYXQobG9nX2ZpbGVfc2l6ZSkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQucnVuKCdybSAtZiAvdG1wL3JwbS1kb2MucnBtJykKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2NhbmVsZi5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NjYW5lbGYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhMDI0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NjYW5lbGYucHkKQEAgLTAsMCArMSwyOCBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJwYXgtdXRpbHMiKToKKyAgICAgICAgc2tpcE1vZHVsZSgicGF4LXV0aWxzIHBhY2thZ2Ugbm90IGluc3RhbGxlZCIpCisKK2NsYXNzIFNjYW5lbGZUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNjYW5jbWQgPSAnc2NhbmVsZiAtLXF1aWV0IC0tcmVjdXJzaXZlIC0tbW91bnQgLS1sZHBhdGggLS1wYXRoJworCisgICAgQHRlc3RjYXNlKDk2NikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3NjYW5lbGZfdGV4dHJlbChzZWxmKToKKyAgICAgICAgIyBwcmludCBURVhUUkVMIGluZm9ybWF0aW9uCisgICAgICAgIHNlbGYuc2NhbmNtZCArPSAiIC0tdGV4dHJlbCIKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihzZWxmLnNjYW5jbWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnN0cmlwKCksICIiLCAiXG4iLmpvaW4oW3NlbGYuc2NhbmNtZCwgb3V0cHV0XSkpCisKKyAgICBAdGVzdGNhc2UoOTY3KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfc2NhbmVsZl9ycGF0aChzZWxmKToKKyAgICAgICAgIyBwcmludCBSUEFUSCBpbmZvcm1hdGlvbgorICAgICAgICBzZWxmLnNjYW5jbWQgKz0gIiAtLXJwYXRoIgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKHNlbGYuc2NhbmNtZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuc3RyaXAoKSwgIiIsICJcbiIuam9pbihbc2VsZi5zY2FuY21kLCBvdXRwdXRdKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NjcC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NjcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGU4N2QyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2NwLnB5CkBAIC0wLDAgKzEsMjIgQEAKK2ltcG9ydCBvcworZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHNraXBVbmxlc3NQYXNzZWQsIHRlc3RjYXNlCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCAob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJkcm9wYmVhciIpIG9yIG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgib3BlbnNzaC1zc2hkIikpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBzc2ggcGFja2FnZSBpbiBpbWFnZSIpCisKK2NsYXNzIFNjcFRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjIwKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfc2NwX2ZpbGUoc2VsZik6CisgICAgICAgIHRlc3RfbG9nX2RpciA9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpCisgICAgICAgIHRlc3RfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHRlc3RfbG9nX2RpciwgJ3Rlc3Rfc2NwX2ZpbGUnKQorICAgICAgICB3aXRoIG9wZW4odGVzdF9maWxlX3BhdGgsICd3JykgYXMgdGVzdF9zY3BfZmlsZToKKyAgICAgICAgICAgIHRlc3Rfc2NwX2ZpbGUuc2VlaygyICoqIDIyIC0gMSkKKyAgICAgICAgICAgIHRlc3Rfc2NwX2ZpbGUud3JpdGUob3MubGluZXNlcCkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LmNvcHlfdG8odGVzdF9maWxlX3BhdGgsICcvdG1wL3Rlc3Rfc2NwX2ZpbGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gIkZpbGUgY291bGQgbm90IGJlIGNvcGllZC4gT3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oImxzIC1sYSAvdG1wL3Rlc3Rfc2NwX2ZpbGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gIlNDUCB0ZXN0IGZhaWxlZCIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9za2VsZXRvbmluaXQucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9za2VsZXRvbmluaXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IwY2I5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NrZWxldG9uaW5pdC5weQpAQCAtMCwwICsxLDI5IEBACisjIFRoaXMgdGVzdCBzaG91bGQgY292ZXIgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3RyX3Nob3dfY2FzZS5jZ2k/Y2FzZV9pZD0yODQgdGVzdGNhc2UKKyMgTm90ZSB0aGF0IHRoZSBpbWFnZSB1bmRlciB0ZXN0IG11c3QgaGF2ZSBtZXRhLXNrZWxldG9uIGxheWVyIGluIGJibGF5ZXJzIGFuZCBJTUFHRV9JTlNUQUxMX2FwcGVuZCA9ICIgc2VydmljZSIgaW4gbG9jYWwuY29uZgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInNlcnZpY2UiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gc2VydmljZSBwYWNrYWdlIGluIGltYWdlIikKKworCitjbGFzcyBTa2VsZXRvbkJhc2ljVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgQHVuaXR0ZXN0LnNraXBJZigic3lzdGVtZCIgPT0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciIsIEZhbHNlKSwgIk5vdCBhcHByb3BpYXRlIGZvciBzeXN0ZW1kIGltYWdlIikKKyAgICBkZWYgdGVzdF9za2VsZXRvbl9hdmFpbGFiaWxpdHkoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2xzIC9ldGMvaW5pdC5kL3NrZWxldG9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJza2VsZXRvbiBpbml0IHNjcmlwdCBub3QgZm91bmQuIE91dHB1dDpcbiVzICIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSAgc2VsZi50YXJnZXQucnVuKCdscyAvdXNyL3NiaW4vc2tlbGV0b24tdGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAic2tlbGV0b24tdGVzdCBub3QgZm91bmQuIE91dHB1dDpcbiVzIiAlIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgyODQpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc2tlbGV0b25fYXZhaWxhYmlsaXR5JykKKyAgICBAdW5pdHRlc3Quc2tpcElmKCJzeXN0ZW1kIiA9PSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgRmFsc2UpLCAiTm90IGFwcHJvcGlhdGUgZm9yIHN5c3RlbWQgaW1hZ2UiKQorICAgIGRlZiB0ZXN0X3NrZWxldG9uX3NjcmlwdChzZWxmKToKKyAgICAgICAgb3V0cHV0MSA9IHNlbGYudGFyZ2V0LnJ1bigiL2V0Yy9pbml0LmQvc2tlbGV0b24gc3RhcnQiKVsxXQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQyKSA9IHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kICsgJyB8IGdyZXAgW3Nda2VsZXRvbi10ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJTa2VsZXRvbiBzY3JpcHQgY291bGQgbm90IGJlIHN0YXJ0ZWQ6XG4lc1xuJXMiICUgKG91dHB1dDEsIG91dHB1dDIpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc21hcnQucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zbWFydC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDE2NjhkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NtYXJ0LnB5CkBAIC0wLDAgKzEsMTc1IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCByZQorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2Zyb20gb2VxYS51dGlscy5odHRwc2VydmVyIGltcG9ydCBIVFRQU2VydmljZQorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJwYWNrYWdlLW1hbmFnZW1lbnQiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIHBhY2thZ2UgbWFuYWdlbWVudCBmZWF0dXJlIikKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJzbWFydCIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgc21hcnQgaW5zdGFsbGVkIikKKyAgICBpZiAicGFja2FnZV9ycG0iICE9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlBBQ0tBR0VfQ0xBU1NFUyIsIFRydWUpLnNwbGl0KClbMF06CisgICAgICAgIHNraXBNb2R1bGUoIlJwbSBpcyBub3QgdGhlIHByaW1hcnkgcGFja2FnZSBtYW5hZ2VyIikKKworY2xhc3MgU21hcnRUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc21hcnRfaGVscCcpCisgICAgZGVmIHNtYXJ0KHNlbGYsIGNvbW1hbmQsIGV4cGVjdGVkID0gMCk6CisgICAgICAgIGNvbW1hbmQgPSAnc21hcnQgJXMnICUgY29tbWFuZAorICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHNlbGYudGFyZ2V0LnJ1bihjb21tYW5kLCAxNTAwKQorICAgICAgICBtZXNzYWdlID0gb3MubGluZXNlcC5qb2luKFtjb21tYW5kLCBvdXRwdXRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgZXhwZWN0ZWQsIG1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkiIGluIG91dHB1dCwgbWVzc2FnZSkKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCitjbGFzcyBTbWFydEJhc2ljVGVzdChTbWFydFRlc3QpOgorCisgICAgQHRlc3RjYXNlKDcxNikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3NtYXJ0X2hlbHAoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJy0taGVscCcpCisKKyAgICBAdGVzdGNhc2UoOTY4KQorICAgIGRlZiB0ZXN0X3NtYXJ0X3ZlcnNpb24oc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJy0tdmVyc2lvbicpCisKKyAgICBAdGVzdGNhc2UoNzIxKQorICAgIGRlZiB0ZXN0X3NtYXJ0X2luZm8oc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ2luZm8gcHl0aG9uLXNtYXJ0cG0nKQorCisgICAgQHRlc3RjYXNlKDQyMSkKKyAgICBkZWYgdGVzdF9zbWFydF9xdWVyeShzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgncXVlcnkgcHl0aG9uLXNtYXJ0cG0nKQorCisgICAgQHRlc3RjYXNlKDcyMCkKKyAgICBkZWYgdGVzdF9zbWFydF9zZWFyY2goc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3NlYXJjaCBweXRob24tc21hcnRwbScpCisKKyAgICBAdGVzdGNhc2UoNzIyKQorICAgIGRlZiB0ZXN0X3NtYXJ0X3N0YXRzKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdzdGF0cycpCisKK2NsYXNzIFNtYXJ0UmVwb1Rlc3QoU21hcnRUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnJlcG9saXN0ID0gW10KKyAgICAgICAgc2VsZi5yZXBvX3NlcnZlciA9IEhUVFBTZXJ2aWNlKG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ0RFUExPWV9ESVInLCBUcnVlKSwgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQuc2VydmVyX2lwKQorICAgICAgICBzZWxmLnJlcG9fc2VydmVyLnN0YXJ0KCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnJlcG9fc2VydmVyLnN0b3AoKQorICAgICAgICBmb3IgaSBpbiBzZWxmLnJlcG9saXN0OgorICAgICAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQucnVuKCdzbWFydCBjaGFubmVsIC15IC0tcmVtb3ZlICcrc3RyKGkpKQorCisgICAgQHRlc3RjYXNlKDExNDMpCisgICAgZGVmIHRlc3Rfc21hcnRfY2hhbm5lbChzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCcsIDEpCisKKyAgICBAdGVzdGNhc2UoNzE5KQorICAgIGRlZiB0ZXN0X3NtYXJ0X2NoYW5uZWxfYWRkKHNlbGYpOgorICAgICAgICBpbWFnZV9wa2d0eXBlID0gc2VsZi50Yy5kLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpCisgICAgICAgIGRlcGxveV91cmwgPSAnaHR0cDovLyVzOiVzLyVzJyAlKHNlbGYudGFyZ2V0LnNlcnZlcl9pcCwgc2VsZi5yZXBvX3NlcnZlci5wb3J0LCBpbWFnZV9wa2d0eXBlKQorICAgICAgICBwa2dhcmNocyA9IHNlbGYudGMuZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSFMnLCBUcnVlKS5yZXBsYWNlKCItIiwiXyIpLnNwbGl0KCkKKyAgICAgICAgZm9yIGFyY2ggaW4gb3MubGlzdGRpcignJXMvJXMnICUgKHNlbGYucmVwb19zZXJ2ZXIucm9vdF9kaXIsIGltYWdlX3BrZ3R5cGUpKToKKyAgICAgICAgICAgIGlmIGFyY2ggaW4gcGtnYXJjaHM6CisgICAgICAgICAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAteSAtLWFkZCB7YX0gdHlwZT1ycG0tbWQgYmFzZXVybD17dX0ve2F9Jy5mb3JtYXQoYT1hcmNoLCB1PWRlcGxveV91cmwpKQorICAgICAgICAgICAgICAgIHNlbGYucmVwb2xpc3QuYXBwZW5kKGFyY2gpCisgICAgICAgIHNlbGYuc21hcnQoJ3VwZGF0ZScpCisKKyAgICBAdGVzdGNhc2UoOTY5KQorICAgIGRlZiB0ZXN0X3NtYXJ0X2NoYW5uZWxfaGVscChzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLWhlbHAnKQorCisgICAgQHRlc3RjYXNlKDk3MCkKKyAgICBkZWYgdGVzdF9zbWFydF9jaGFubmVsX2xpc3Qoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1saXN0JykKKworICAgIEB0ZXN0Y2FzZSg5NzEpCisgICAgZGVmIHRlc3Rfc21hcnRfY2hhbm5lbF9zaG93KHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tc2hvdycpCisKKyAgICBAdGVzdGNhc2UoNzE3KQorICAgIGRlZiB0ZXN0X3NtYXJ0X2NoYW5uZWxfcnBtc3lzKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tc2hvdyBycG1zeXMnKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tZGlzYWJsZSBycG1zeXMnKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tZW5hYmxlIHJwbXN5cycpCisKKyAgICBAdGVzdGNhc2UoMTE0NCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9jaGFubmVsX2FkZCcpCisgICAgZGVmIHRlc3Rfc21hcnRfaW5zdGFsbChzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgncmVtb3ZlIC15IHBzcGxhc2gtZGVmYXVsdCcpCisgICAgICAgIHNlbGYuc21hcnQoJ2luc3RhbGwgLXkgcHNwbGFzaC1kZWZhdWx0JykKKworICAgIEB0ZXN0Y2FzZSg3MjgpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc21hcnRfaW5zdGFsbCcpCisgICAgZGVmIHRlc3Rfc21hcnRfaW5zdGFsbF9kZXBlbmRlbmN5KHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdyZW1vdmUgLXkgcHNwbGFzaCcpCisgICAgICAgIHNlbGYuc21hcnQoJ2luc3RhbGwgLXkgcHNwbGFzaC1kZWZhdWx0JykKKworICAgIEB0ZXN0Y2FzZSg3MjMpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc21hcnRfY2hhbm5lbF9hZGQnKQorICAgIGRlZiB0ZXN0X3NtYXJ0X2luc3RhbGxfZnJvbV9kaXNrKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdyZW1vdmUgLXkgcHNwbGFzaC1kZWZhdWx0JykKKyAgICAgICAgc2VsZi5zbWFydCgnZG93bmxvYWQgcHNwbGFzaC1kZWZhdWx0JykKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCAteSAuL3BzcGxhc2gtZGVmYXVsdConKQorCisgICAgQHRlc3RjYXNlKDcyNSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9jaGFubmVsX2FkZCcpCisgICAgZGVmIHRlc3Rfc21hcnRfaW5zdGFsbF9mcm9tX2h0dHAoc2VsZik6CisgICAgICAgIG91dHB1dCA9IHNlbGYuc21hcnQoJ2Rvd25sb2FkIC0tdXJscyBwc3BsYXNoLWRlZmF1bHQnKQorICAgICAgICB1cmwgPSByZS5zZWFyY2goJyhodHRwOi8vLiovcHNwbGFzaC1kZWZhdWx0LipcLnJwbSknLCBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cmwsIG1zZz0iQ291bG4ndCBmaW5kIGRvd25sb2FkIHVybCBpbiAlcyIgJSBvdXRwdXQpCisgICAgICAgIHNlbGYuc21hcnQoJ3JlbW92ZSAteSBwc3BsYXNoLWRlZmF1bHQnKQorICAgICAgICBzZWxmLnNtYXJ0KCdpbnN0YWxsIC15ICVzJyAlIHVybC5ncm91cCgwKSkKKworICAgIEB0ZXN0Y2FzZSg3MjkpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc21hcnRfaW5zdGFsbCcpCisgICAgZGVmIHRlc3Rfc21hcnRfcmVpbnN0YWxsKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdyZWluc3RhbGwgLXkgcHNwbGFzaC1kZWZhdWx0JykKKworICAgIEB0ZXN0Y2FzZSg3MjcpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc21hcnRfY2hhbm5lbF9hZGQnKQorICAgIGRlZiB0ZXN0X3NtYXJ0X3JlbW90ZV9yZXBvKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCd1cGRhdGUnKQorICAgICAgICBzZWxmLnNtYXJ0KCdpbnN0YWxsIC15IHBzcGxhc2gnKQorICAgICAgICBzZWxmLnNtYXJ0KCdyZW1vdmUgLXkgcHNwbGFzaCcpCisKKyAgICBAdGVzdGNhc2UoNzI2KQorICAgIGRlZiB0ZXN0X3NtYXJ0X2xvY2FsX2RpcihzZWxmKToKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCdta2RpciAvdG1wL215cnBtZGlyJykKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLWFkZCBteXJwbWRpciB0eXBlPXJwbS1kaXIgcGF0aD0vdG1wL215cnBtZGlyIC15JykKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCdjZCAvdG1wL215cnBtZGlyJykKKyAgICAgICAgc2VsZi5zbWFydCgnZG93bmxvYWQgcHNwbGFzaCcpCisgICAgICAgIG91dHB1dCA9IHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1saXN0JykKKyAgICAgICAgZm9yIGkgaW4gb3V0cHV0LnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgaWYgKCJycG1zeXMiICE9IHN0cihpKSkgYW5kICgibXlycG1kaXIiICE9IHN0cihpKSk6CisgICAgICAgICAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLWRpc2FibGUgJytzdHIoaSkpCisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bignY2QgL2hvbWUvcm9vdCcpCisgICAgICAgIHNlbGYuc21hcnQoJ2luc3RhbGwgcHNwbGFzaCcpCisgICAgICAgIGZvciBpIGluIG91dHB1dC5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgIGlmICgicnBtc3lzIiAhPSBzdHIoaSkpIGFuZCAoIm15cnBtZGlyIiAhPSBzdHIoaSkpOgorICAgICAgICAgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1lbmFibGUgJytzdHIoaSkpCisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1yZW1vdmUgbXlycG1kaXIgLXknKQorICAgICAgICBzZWxmLnRhcmdldC5ydW4oInJtIC1yZiAvdG1wL215cnBtZGlyIikKKworICAgIEB0ZXN0Y2FzZSg3MTgpCisgICAgZGVmIHRlc3Rfc21hcnRfYWRkX3JwbWRpcihzZWxmKToKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCdta2RpciAvdG1wL215cnBtZGlyJykKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLWFkZCBteXJwbWRpciB0eXBlPXJwbS1kaXIgcGF0aD0vdG1wL215cnBtZGlyIC15JykKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLWRpc2FibGUgbXlycG1kaXIgLXknKQorICAgICAgICBvdXRwdXQgPSBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tc2hvdyBteXJwbWRpcicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiZGlzYWJsZWQgPSB5ZXMiIGluIG91dHB1dCwgbXNnPSJGYWlsZWQgdG8gZGlzYWJsZSBycG0gZGlyIikKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLWVuYWJsZSAgbXlycG1kaXIgLXknKQorICAgICAgICBvdXRwdXQgPSBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tc2hvdyBteXJwbWRpcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoImRpc2FibGVkID0geWVzIiBpbiBvdXRwdXQsIG1zZz0iRmFpbGVkIHRvIGVuYWJsZSBycG0gZGlyIikKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLXJlbW92ZSBteXJwbWRpciAteScpCisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bigicm0gLXJmIC90bXAvbXlycG1kaXIiKQorCisgICAgQHRlc3RjYXNlKDczMSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9jaGFubmVsX2FkZCcpCisgICAgZGVmIHRlc3Rfc21hcnRfcmVtb3ZlX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ2luc3RhbGwgLXkgcHNwbGFzaCcpCisgICAgICAgIHNlbGYuc21hcnQoJ3JlbW92ZSAteSBwc3BsYXNoJykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zc2gucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zc2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU3NmQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NzaC5weQpAQCAtMCwwICsxLDE5IEBACitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3QgKG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgiZHJvcGJlYXIiKSBvciBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoIm9wZW5zc2giKSk6CisgICAgICAgIHNraXBNb2R1bGUoIk5vIHNzaCBwYWNrYWdlIGluIGltYWdlIikKKworY2xhc3MgU3NoVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgyMjQpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfcGluZycpCisgICAgZGVmIHRlc3Rfc3NoKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCd1bmFtZSAtYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IlNTSCBUZXN0IGZhaWxlZDogJXMiICUgb3V0cHV0KQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdjYXQgL2V0Yy9tYXN0ZXJpbWFnZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAxLCBtc2c9IlRoaXMgaXNuJ3QgdGhlIHJpZ2h0IGltYWdlICAtIC9ldGMvbWFzdGVyaW1hZ2Ugc2hvdWxkbid0IGJlIGhlcmUgJXMiICUgb3V0cHV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc3lzbG9nLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc3lzbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MDFkZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zeXNsb2cucHkKQEAgLTAsMCArMSw0NSBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3QgKG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgiYnVzeWJveC1zeXNsb2ciKSBvciBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInN5c2tsb2dkIikpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBzeXNsb2cgcGFja2FnZSBpbiBpbWFnZSIpCisKK2NsYXNzIFN5c2xvZ1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjAxKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3N5c2xvZ19oZWxwIikKKyAgICBkZWYgdGVzdF9zeXNsb2dfcnVubmluZyhzZWxmKToKKyAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKG9lUnVudGltZVRlc3QucHNjbWQgKyAnIHwgZ3JlcCAtaSBbc115c2xvZ2QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJubyBzeXNsb2dkIHByb2Nlc3MsIHBzIG91dHB1dDogJXMiICUgc2VsZi50YXJnZXQucnVuKG9lUnVudGltZVRlc3QucHNjbWQpWzFdKQorCitjbGFzcyBTeXNsb2dUZXN0Q29uZmlnKG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDExNDkpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoInRlc3Rfc3lzbG9nX3J1bm5pbmciKQorICAgIGRlZiB0ZXN0X3N5c2xvZ19sb2dnZXIoc2VsZik6CisgICAgICAgIChzdGF0dXMsb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignbG9nZ2VyIGZvb2JhciAmJiB0ZXN0IC1lIC92YXIvbG9nL21lc3NhZ2VzICYmIGdyZXAgZm9vYmFyIC92YXIvbG9nL21lc3NhZ2VzIHx8IGxvZ3JlYWQgfCBncmVwIGZvb2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IlRlc3QgbG9nIHN0cmluZyBub3QgZm91bmQgaW4gL3Zhci9sb2cvbWVzc2FnZXMuIE91dHB1dDogJXMgIiAlIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTUwKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3N5c2xvZ19ydW5uaW5nIikKKyAgICBkZWYgdGVzdF9zeXNsb2dfcmVzdGFydChzZWxmKToKKyAgICAgICAgaWYgInN5c3RlbWQiICE9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIiLCBGYWxzZSk6CisgICAgICAgICAgICAoc3RhdHVzLG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJy9ldGMvaW5pdC5kL3N5c2xvZyByZXN0YXJ0JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIChzdGF0dXMsb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignc3lzdGVtY3RsIHJlc3RhcnQgc3lzbG9nLnNlcnZpY2UnKQorCisgICAgQHRlc3RjYXNlKDIwMikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zeXNsb2dfcmVzdGFydCIpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoInRlc3Rfc3lzbG9nX2xvZ2dlciIpCisgICAgQHVuaXR0ZXN0LnNraXBJZigic3lzdGVtZCIgPT0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciIsIEZhbHNlKSwgIk5vdCBhcHByb3BpYXRlIGZvciBzeXN0ZW1kIGltYWdlIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgic3lza2xvZ2QiKSBvciBub3Qgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJidXN5Ym94IiksICJOb24tYnVzeWJveCBzeXNsb2ciKQorICAgIGRlZiB0ZXN0X3N5c2xvZ19zdGFydHVwX2NvbmZpZyhzZWxmKToKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCdlY2hvICJMT0dGSUxFPS92YXIvbG9nL3Rlc3QiID4+IC9ldGMvc3lzbG9nLXN0YXJ0dXAuY29uZicpCisgICAgICAgIChzdGF0dXMsb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignL2V0Yy9pbml0LmQvc3lzbG9nIHJlc3RhcnQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJDb3VsZCBub3QgcmVzdGFydCBzeXNsb2cgc2VydmljZS4gU3RhdHVzIGFuZCBvdXRwdXQ6ICVzIGFuZCAlcyIgJSAoc3RhdHVzLG91dHB1dCkpCisgICAgICAgIChzdGF0dXMsb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignbG9nZ2VyIGZvb2JhciAmJiBncmVwIGZvb2JhciAvdmFyL2xvZy90ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iVGVzdCBsb2cgc3RyaW5nIG5vdCBmb3VuZC4gT3V0cHV0OiAlcyAiICUgb3V0cHV0KQorICAgICAgICBzZWxmLnRhcmdldC5ydW4oInNlZCAtaSAncyNMT0dGSUxFPS92YXIvbG9nL3Rlc3QjIycgL2V0Yy9zeXNsb2ctc3RhcnR1cC5jb25mIikKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCcvZXRjL2luaXQuZC9zeXNsb2cgcmVzdGFydCcpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zeXN0ZW1kLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc3lzdGVtZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzQzOTRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc3lzdGVtZC5weQpAQCAtMCwwICsxLDEwMSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgcmUKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInN5c3RlbWQiKToKKyAgICAgICAgICAgIHNraXBNb2R1bGUoInRhcmdldCBkb2Vzbid0IGhhdmUgc3lzdGVtZCBpbiBESVNUUk9fRkVBVFVSRVMiKQorICAgIGlmICJzeXN0ZW1kIiAhPSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgVHJ1ZSk6CisgICAgICAgICAgICBza2lwTW9kdWxlKCJzeXN0ZW1kIGlzIG5vdCB0aGUgaW5pdCBtYW5hZ2VyIGZvciB0aGlzIGltYWdlIikKKworCitjbGFzcyBTeXN0ZW1kVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIGRlZiBzeXN0ZW1jdGwoc2VsZiwgYWN0aW9uID0gJycsIHRhcmdldCA9ICcnLCBleHBlY3RlZCA9IDAsIHZlcmJvc2UgPSBGYWxzZSk6CisgICAgICAgIGNvbW1hbmQgPSAnc3lzdGVtY3RsICVzICVzJyAlIChhY3Rpb24sIHRhcmdldCkKKyAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBzZWxmLnRhcmdldC5ydW4oY29tbWFuZCkKKyAgICAgICAgbWVzc2FnZSA9ICdcbicuam9pbihbY29tbWFuZCwgb3V0cHV0XSkKKyAgICAgICAgaWYgc3RhdHVzICE9IGV4cGVjdGVkIGFuZCB2ZXJib3NlOgorICAgICAgICAgICAgbWVzc2FnZSArPSBzZWxmLnRhcmdldC5ydW4oJ3N5c3RlbWN0bCBzdGF0dXMgLS1mdWxsICVzJyAlIHRhcmdldClbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIGV4cGVjdGVkLCBtZXNzYWdlKQorICAgICAgICByZXR1cm4gb3V0cHV0CisKKworY2xhc3MgU3lzdGVtZEJhc2ljVGVzdHMoU3lzdGVtZFRlc3QpOgorCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9zeXN0ZW1kX2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLnN5c3RlbWN0bCgnLS12ZXJzaW9uJykKKworICAgIEB0ZXN0Y2FzZSg1NTEpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3lzdGVtX2Jhc2ljJykKKyAgICBkZWYgdGVzdF9zeXN0ZW1kX2xpc3Qoc2VsZik6CisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdsaXN0LXVuaXQtZmlsZXMnKQorCisgICAgZGVmIHNldHRsZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEJsb2NrIHVudGlsIHN5c3RlbWQgaGFzIGZpbmlzaGVkIGFjdGl2YXRpbmcgYW55IHVuaXRzIGJlaW5nIGFjdGl2YXRlZCwKKyAgICAgICAgb3IgdW50aWwgdHdvIG1pbnV0ZXMgaGFzIGVsYXBzZWQuCisKKyAgICAgICAgUmV0dXJucyBhIHR1cGxlLCBlaXRoZXIgKFRydWUsICcnKSBpZiBhbGwgdW5pdHMgaGF2ZSBmaW5pc2hlZAorICAgICAgICBhY3RpdmF0aW5nLCBvciAoRmFsc2UsIG1lc3NhZ2Ugc3RyaW5nKSBpZiB0aGVyZSBhcmUgc3RpbGwgdW5pdHMKKyAgICAgICAgYWN0aXZhdGluZyAoZ2VuZXJhbGx5LCBmYWlsaW5nIHVuaXRzIHRoYXQgcmVzdGFydCkuCisgICAgICAgICIiIgorICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICBlbmR0aW1lID0gdGltZS50aW1lKCkgKyAoNjAgKiAyKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBzZWxmLnRhcmdldC5ydW4oJ3N5c3RlbWN0bCAtLXN0YXRlPWFjdGl2YXRpbmcnKQorICAgICAgICAgICAgaWYgIjAgbG9hZGVkIHVuaXRzIGxpc3RlZCIgaW4gb3V0cHV0OgorICAgICAgICAgICAgICAgIHJldHVybiAoVHJ1ZSwgJycpCisgICAgICAgICAgICBpZiB0aW1lLnRpbWUoKSA+PSBlbmR0aW1lOgorICAgICAgICAgICAgICAgIHJldHVybiAoRmFsc2UsIG91dHB1dCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCisKKyAgICBAdGVzdGNhc2UoNTUwKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3N5c3RlbWRfYmFzaWMnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfZmFpbGVkKHNlbGYpOgorICAgICAgICBzZXR0bGVkLCBvdXRwdXQgPSBzZWxmLnNldHRsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXR0bGVkLCBtc2c9IlRpbWVkIG91dCB3YWl0aW5nIGZvciBzeXN0ZW1kIHRvIHNldHRsZTpcbiIgKyBvdXRwdXQpCisKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5zeXN0ZW1jdGwoJ2xpc3QtdW5pdHMnLCAnLS1mYWlsZWQnKQorICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaCgiMCBsb2FkZWQgdW5pdHMgbGlzdGVkIiwgb3V0cHV0KQorICAgICAgICBpZiBub3QgbWF0Y2g6CisgICAgICAgICAgICBvdXRwdXQgKz0gc2VsZi5zeXN0ZW1jdGwoJ3N0YXR1cyAtLWZ1bGwgLS1mYWlsZWQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2gsIG1zZz0iU29tZSBzeXN0ZW1kIHVuaXRzIGZhaWxlZDpcbiVzIiAlIG91dHB1dCkKKworCitjbGFzcyBTeXN0ZW1kU2VydmljZVRlc3RzKFN5c3RlbWRUZXN0KToKKworICAgIGRlZiBjaGVja19mb3JfYXZhaGkoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmhhc1BhY2thZ2UoJ2F2YWhpLWRhZW1vbicpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlRlc3RjYXNlIGRlcGVuZGVuY3kgbm90IG1ldDogbmVlZCBhdmFoaS1kYWVtb24gaW5zdGFsbGVkIG9uIHRhcmdldCIpCisKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zeXN0ZW1kX2Jhc2ljJykKKyAgICBkZWYgdGVzdF9zeXN0ZW1kX3N0YXR1cyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mb3JfYXZhaGkoKQorICAgICAgICBzZWxmLnN5c3RlbWN0bCgnc3RhdHVzIC0tZnVsbCcsICdhdmFoaS1kYWVtb24uc2VydmljZScpCisKKyAgICBAdGVzdGNhc2UoNjk1KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3N5c3RlbWRfc3RhdHVzJykKKyAgICBkZWYgdGVzdF9zeXN0ZW1kX3N0b3Bfc3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZm9yX2F2YWhpKCkKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ3N0b3AnLCAnYXZhaGktZGFlbW9uLnNlcnZpY2UnKQorICAgICAgICBzZWxmLnN5c3RlbWN0bCgnaXMtYWN0aXZlJywgJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJywgZXhwZWN0ZWQ9MywgdmVyYm9zZT1UcnVlKQorICAgICAgICBzZWxmLnN5c3RlbWN0bCgnc3RhcnQnLCdhdmFoaS1kYWVtb24uc2VydmljZScpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdpcy1hY3RpdmUnLCAnYXZhaGktZGFlbW9uLnNlcnZpY2UnLCB2ZXJib3NlPVRydWUpCisKKyAgICBAdGVzdGNhc2UoNjk2KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3N5c3RlbWRfYmFzaWMnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfZGlzYWJsZV9lbmFibGUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZm9yX2F2YWhpKCkKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ2Rpc2FibGUnLCAnYXZhaGktZGFlbW9uLnNlcnZpY2UnKQorICAgICAgICBzZWxmLnN5c3RlbWN0bCgnaXMtZW5hYmxlZCcsICdhdmFoaS1kYWVtb24uc2VydmljZScsIGV4cGVjdGVkPTEpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdlbmFibGUnLCAnYXZhaGktZGFlbW9uLnNlcnZpY2UnKQorICAgICAgICBzZWxmLnN5c3RlbWN0bCgnaXMtZW5hYmxlZCcsICdhdmFoaS1kYWVtb24uc2VydmljZScpCisKK2NsYXNzIFN5c3RlbWRKb3VybmFsVGVzdHMoU3lzdGVtZFRlc3QpOgorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfc3lzdGVtZF9qb3VybmFsKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdqb3VybmFsY3RsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG91dHB1dCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3ZuYy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3ZuYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzFkZWZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvdm5jLnB5CkBAIC0wLDAgKzEsMjAgQEAKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGVVbmxlc3MKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCitpbXBvcnQgcmUKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgc2tpcE1vZHVsZVVubGVzcyhvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoJ3gxMXZuYycpLCAiTm8geDExdm5jIHBhY2thZ2UgaW4gaW1hZ2UiKQorCitjbGFzcyBWTkNUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDIxMykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3ZuYyhzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigneDExdm5jIC1kaXNwbGF5IDowIC1iZyAtbyB4MTF2bmMubG9nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0ieDExdm5jIHNlcnZlciBmYWlsZWQgdG8gc3RhcnQ6ICVzIiAlIG91dHB1dCkKKyAgICAgICAgcG9ydCA9IHJlLnNlYXJjaCgnUE9SVD1bMC05XSonLCBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LCBtc2c9Ikxpc3RlbmluZyBwb3J0IG5vdCBzcGVjaWZpZWQgaW4gY29tbWFuZCBvdXRwdXQ6ICVzIiAlb3V0cHV0KQorCisgICAgICAgIHZuY3BvcnQgPSBwb3J0Lmdyb3VwKDApLnNwbGl0KCc9JylbMV0KKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignbmV0c3RhdCAtbnRsIHwgZ3JlcCAiOiVzIicgJSB2bmNwb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJ4MTF2bmMgc2VydmVyIG5vdCBydW5uaW5nIG9uIHBvcnQgJXNcblxuJXMiICUgKHZuY3BvcnQsIHNlbGYudGFyZ2V0LnJ1bignbmV0c3RhdCAtbnRsOyBjYXQgeDExdm5jLmxvZycpWzFdKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3gzMmxpYi5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3gzMmxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTVlMjE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUveDMybGliLnB5CkBAIC0wLDAgKzEsMTggQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgICAgICNjaGVjayBpZiBERUZBVUxUVFVORSBpcyBzZXQgYW5kIGl0J3MgdmFsdWUgaXM6IHg4Ni02NC14MzIKKyAgICAgICAgZGVmYXVsdHR1bmUgPSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJERUZBVUxUVFVORSIsIFRydWUpCisgICAgICAgIGlmICJ4ODYtNjQteDMyIiBub3QgaW4gZGVmYXVsdHR1bmU6CisgICAgICAgICAgICBza2lwTW9kdWxlKCJERUZBVUxUVFVORSBpcyBub3Qgc2V0IHRvIHg4Ni02NC14MzIiKQorCitjbGFzcyBYMzJsaWJUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDI4MSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0X3gzMl9maWxlKHNlbGYpOgorICAgICAgICBzdGF0dXMxID0gc2VsZi50YXJnZXQucnVuKCJyZWFkZWxmIC1oIC9iaW4vbHMgfCBncmVwIENsYXNzIHwgZ3JlcCBFTEYzMiIpWzBdCisgICAgICAgIHN0YXR1czIgPSBzZWxmLnRhcmdldC5ydW4oInJlYWRlbGYgLWggL2Jpbi9scyB8IGdyZXAgTWFjaGluZSB8IGdyZXAgWDg2LTY0IilbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YXR1czEgPT0gMCBhbmQgc3RhdHVzMiA9PSAwLCBtc2c9Ii9iaW4vbHMgaXNuJ3QgYW4gWDg2LTY0IEVMRjMyIGJpbmFyeS4gcmVhZGVsZiBzYXlzOiAlcyIgJSBzZWxmLnRhcmdldC5ydW4oInJlYWRlbGYgLWggL2Jpbi9scyIpWzFdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUveG9yZy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3hvcmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJiY2QzNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3hvcmcucHkKQEAgLTAsMCArMSwxNiBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJ4MTEtYmFzZSIpOgorICAgICAgICAgICAgc2tpcE1vZHVsZSgidGFyZ2V0IGRvZXNuJ3QgaGF2ZSB4MTEgaW4gSU1BR0VfRkVBVFVSRVMiKQorCisKK2NsYXNzIFhvcmdUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDExNTEpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF94b3JnX3J1bm5pbmcoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4ob2VSdW50aW1lVGVzdC5wc2NtZCArICcgfCAgZ3JlcCAtdiB4aW5pdCB8IGdyZXAgW1hdb3JnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iWG9yZyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgcnVubmluZyAlcyIgJSBzZWxmLnRhcmdldC5ydW4ob2VSdW50aW1lVGVzdC5wc2NtZClbMV0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2YzZmE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9fX2luaXRfXy5weQpAQCAtMCwwICsxLDMgQEAKKyMgRW5hYmxlIG90aGVyIGxheWVycyB0byBoYXZlIHRlc3RzIGluIHRoZSBzYW1lIG5hbWVkIGRpcmVjdG9yeQorZnJvbSBwa2d1dGlsIGltcG9ydCBleHRlbmRfcGF0aAorX19wYXRoX18gPSBleHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2J1aWxkY3ZzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9idWlsZGN2cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzE0NmZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9idWlsZGN2cy5weQpAQCAtMCwwICsxLDI1IEBACitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVNES1Rlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMudGFyZ2V0YnVpbGQgaW1wb3J0IFNES0J1aWxkUHJvamVjdAorCitjbGFzcyBCdWlsZEN2c1Rlc3Qob2VTREtUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QgPSBTREtCdWlsZFByb2plY3Qob2VTREtUZXN0LnRjLnNka3Rlc3RkaXIgKyAiL2N2cy8iLCBvZVNES1Rlc3QudGMuc2RrZW52LCBvZVNES1Rlc3QudGMuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZnRwLmdudS5vcmcvbm9uLWdudS9jdnMvc291cmNlL2ZlYXR1cmUvMS4xMi4xMy9jdnMtMS4xMi4xMy50YXIuYnoyIikKKyAgICAgICAgc2VsZi5wcm9qZWN0LmRvd25sb2FkX2FyY2hpdmUoKQorCisgICAgZGVmIHRlc3RfY3ZzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2luc3RhbGwoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGluc3RhbGwgZmFpbGVkIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QuY2xlYW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9idWlsZGlwdGFibGVzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9idWlsZGlwdGFibGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MmU1MzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2J1aWxkaXB0YWJsZXMucHkKQEAgLTAsMCArMSwyNiBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VTREtUZXN0Citmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLnRhcmdldGJ1aWxkIGltcG9ydCBTREtCdWlsZFByb2plY3QKKworCitjbGFzcyBCdWlsZElwdGFibGVzVGVzdChvZVNES1Rlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdCA9IFNES0J1aWxkUHJvamVjdChvZVNES1Rlc3QudGMuc2RrdGVzdGRpciArICIvaXB0YWJsZXMvIiwgb2VTREtUZXN0LnRjLnNka2Vudiwgb2VTREtUZXN0LnRjLmQsCisgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL25ldGZpbHRlci5vcmcvcHJvamVjdHMvaXB0YWJsZXMvZmlsZXMvaXB0YWJsZXMtMS40LjEzLnRhci5iejIiKQorICAgICAgICBzZWxmLnByb2plY3QuZG93bmxvYWRfYXJjaGl2ZSgpCisKKyAgICBkZWYgdGVzdF9pcHRhYmxlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2NvbmZpZ3VyZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIGNvbmZpZ3VyZSBmYWlsZWQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9tYWtlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgbWFrZSBmYWlsZWQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9pbnN0YWxsKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgbWFrZSBpbnN0YWxsIGZhaWxlZCIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0LmNsZWFuKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRzdWRva3UucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2J1aWxkc3Vkb2t1LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYTc3YzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2J1aWxkc3Vkb2t1LnB5CkBAIC0wLDAgKzEsMjYgQEAKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lU0RLVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2Zyb20gb2VxYS51dGlscy50YXJnZXRidWlsZCBpbXBvcnQgU0RLQnVpbGRQcm9qZWN0CisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVNES1Rlc3QuaGFzUGFja2FnZSgiZ3RrXCsiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIGd0aysgaW4gbWFuaWZlc3QiKQorCitjbGFzcyBTdWRva3VUZXN0KG9lU0RLVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gU0RLQnVpbGRQcm9qZWN0KG9lU0RLVGVzdC50Yy5zZGt0ZXN0ZGlyICsgIi9zdWRva3UvIiwgb2VTREtUZXN0LnRjLnNka2Vudiwgb2VTREtUZXN0LnRjLmQsCisgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zdWRva3Utc2F2YW50L3N1ZG9rdS1zYXZhbnQvc3Vkb2t1LXNhdmFudC0xLjMvc3Vkb2t1LXNhdmFudC0xLjMudGFyLmJ6MiIpCisgICAgICAgIHNlbGYucHJvamVjdC5kb3dubG9hZF9hcmNoaXZlKCkKKworICAgIGRlZiB0ZXN0X3N1ZG9rdShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2NvbmZpZ3VyZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIGNvbmZpZ3VyZSBmYWlsZWQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9tYWtlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgbWFrZSBmYWlsZWQiKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdC5jbGVhbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2djYy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvZ2NjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OTk0YjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2djYy5weQpAQCAtMCwwICsxLDM2IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VTREtUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBtYWNoaW5lID0gb2VTREtUZXN0LnRjLmQuZ2V0VmFyKCJNQUNISU5FIiwgVHJ1ZSkKKyAgICBpZiBub3Qgb2VTREtUZXN0Lmhhc0hvc3RQYWNrYWdlKCJwYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4tIiArIG1hY2hpbmUpOgorICAgICAgICBza2lwTW9kdWxlKCJTREsgZG9lc24ndCBjb250YWluIGEgY3Jvc3MtY2FuYWRpYW4gdG9vbGNoYWluIikKKworCitjbGFzcyBHY2NDb21waWxlVGVzdChvZVNES1Rlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIGZvciBmIGluIFsndGVzdC5jJywgJ3Rlc3QuY3BwJywgJ3Rlc3RtYWtlZmlsZSddOgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihzZWxmLnRjLmZpbGVzZGlyLCBmKSwgc2VsZi50Yy5zZGt0ZXN0ZGlyICsgZikKKworICAgIGRlZiB0ZXN0X2djY19jb21waWxlKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJyRDQyAlcy90ZXN0LmMgLW8gJXMvdGVzdCAtbG0nICUgKHNlbGYudGMuc2RrdGVzdGRpciwgc2VsZi50Yy5zZGt0ZXN0ZGlyKSkKKworICAgIGRlZiB0ZXN0X2dwcF9jb21waWxlKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJyRDWFggJXMvdGVzdC5jIC1vICVzL3Rlc3QgLWxtJyAlIChzZWxmLnRjLnNka3Rlc3RkaXIsIHNlbGYudGMuc2RrdGVzdGRpcikpCisKKyAgICBkZWYgdGVzdF9ncHAyX2NvbXBpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignJENYWCAlcy90ZXN0LmNwcCAtbyAlcy90ZXN0IC1sbScgJSAoc2VsZi50Yy5zZGt0ZXN0ZGlyLCBzZWxmLnRjLnNka3Rlc3RkaXIpKQorCisgICAgZGVmIHRlc3RfbWFrZShzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuKCdjZCAlczsgbWFrZSAtZiB0ZXN0bWFrZWZpbGUnICUgc2VsZi50Yy5zZGt0ZXN0ZGlyKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIGZpbGVzID0gW3NlbGYudGMuc2RrdGVzdGRpciArIGYgZm9yIGYgaW4gWyd0ZXN0LmMnLCAndGVzdC5jcHAnLCAndGVzdC5vJywgJ3Rlc3QnLCAndGVzdG1ha2VmaWxlJ11dCisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKGYpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL3BlcmwucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL3BlcmwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmNDIyZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvcGVybC5weQpAQCAtMCwwICsxLDI4IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VTREtUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VTREtUZXN0Lmhhc0hvc3RQYWNrYWdlKCJuYXRpdmVzZGstcGVybCIpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBwZXJsIHBhY2thZ2UgaW4gdGhlIFNESyIpCisKKworY2xhc3MgUGVybFRlc3Qob2VTREtUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiBbJ3Rlc3QucGwnXToKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4oc2VsZi50Yy5maWxlc2RpciwgZiksIHNlbGYudGMuc2RrdGVzdGRpciArIGYpCisgICAgICAgIHNlbGYudGVzdGZpbGUgPSBzZWxmLnRjLnNka3Rlc3RkaXIgKyAidGVzdC5wbCIKKworICAgIGRlZiB0ZXN0X3BlcmxfZXhpc3RzKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJ3doaWNoIHBlcmwnKQorCisgICAgZGVmIHRlc3RfcGVybF93b3JrcyhzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuKCdwZXJsICVzL3Rlc3QucGwnICUgc2VsZi50Yy5zZGt0ZXN0ZGlyKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSgiJXMvdGVzdC5wbCIgJSBzZWxmLnRjLnNka3Rlc3RkaXIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL3B5dGhvbi5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvcHl0aG9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NmZhYjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL3B5dGhvbi5weQpAQCAtMCwwICsxLDMyIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VTREtUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VTREtUZXN0Lmhhc0hvc3RQYWNrYWdlKCJuYXRpdmVzZGstcHl0aG9uIik6CisgICAgICAgIHNraXBNb2R1bGUoIk5vIHB5dGhvbiBwYWNrYWdlIGluIHRoZSBTREsiKQorCisKK2NsYXNzIFB5dGhvblRlc3Qob2VTREtUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiBbJ3Rlc3QucHknXToKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4oc2VsZi50Yy5maWxlc2RpciwgZiksIHNlbGYudGMuc2RrdGVzdGRpciArIGYpCisKKyAgICBkZWYgdGVzdF9weXRob25fZXhpc3RzKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJ3doaWNoIHB5dGhvbicpCisKKyAgICBkZWYgdGVzdF9weXRob25fc3Rkb3V0KHNlbGYpOgorICAgICAgICBvdXRwdXQgPSBzZWxmLl9ydW4oJ3B5dGhvbiAlcy90ZXN0LnB5JyAlIHNlbGYudGMuc2RrdGVzdGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuc3RyaXAoKSwgInRoZSB2YWx1ZSBvZiBhIGlzIDAuMDEiLCBtc2c9IkluY29ycmVjdCBvdXRwdXQ6ICVzIiAlIG91dHB1dCkKKworICAgIGRlZiB0ZXN0X3B5dGhvbl90ZXN0ZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuKCdscyAvdG1wL3Rlc3RmaWxlLnB5dGhvbicpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKCIlcy90ZXN0LnB5IiAlIHNlbGYudGMuc2RrdGVzdGRpcikKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKCIvdG1wL3Rlc3RmaWxlLnB5dGhvbiIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvX19pbml0X18ucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FkOTUxMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDIgQEAKK2Zyb20gcGtndXRpbCBpbXBvcnQgZXh0ZW5kX3BhdGgKK19fcGF0aF9fID0gZXh0ZW5kX3BhdGgoX19wYXRoX18sIF9fbmFtZV9fKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L19zc3RhdGV0ZXN0c19ub2F1dG8ucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvX3NzdGF0ZXRlc3RzX25vYXV0by5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzlhZTdlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L19zc3RhdGV0ZXN0c19ub2F1dG8ucHkKQEAgLTAsMCArMSw5NSBAQAoraW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgZ2V0X3Rlc3RfbGF5ZXIKK2Zyb20gb2VxYS5zZWxmdGVzdC5zc3RhdGUgaW1wb3J0IFNTdGF0ZUJhc2UKKworCitjbGFzcyBSZWJ1aWxkRnJvbVNTdGF0ZShTU3RhdGVCYXNlKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLmJ1aWxkZGlyID0gb3MucGF0aC5qb2luKG9zLmVudmlyb24uZ2V0KCdCVUlMRERJUicpKQorCisgICAgZGVmIGdldF9kZXBfdGFyZ2V0cyhzZWxmLCBwcmltYXJ5X3RhcmdldHMpOgorICAgICAgICBmb3VuZF90YXJnZXRzID0gW10KKyAgICAgICAgYml0YmFrZSgiLWcgIiArICcgJy5qb2luKG1hcChzdHIsIHByaW1hcnlfdGFyZ2V0cykpKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdwbi1idWlsZGxpc3QnKSwgJ3InKSBhcyBwbmZpbGU6CisgICAgICAgICAgICBmb3VuZF90YXJnZXRzID0gcG5maWxlLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgcmV0dXJuIGZvdW5kX3RhcmdldHMKKworICAgIGRlZiBjb25maWd1cmVfYnVpbGRkaXIoc2VsZiwgYnVpbGRkaXIpOgorICAgICAgICBvcy5ta2RpcihidWlsZGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChidWlsZGRpcikKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKGJ1aWxkZGlyLCAnY29uZicpKQorICAgICAgICBzaHV0aWwuY29weWZpbGUob3MucGF0aC5qb2luKG9zLmVudmlyb24uZ2V0KCdCVUlMRERJUicpLCAnY29uZi9sb2NhbC5jb25mJyksIG9zLnBhdGguam9pbihidWlsZGRpciwgJ2NvbmYvbG9jYWwuY29uZicpKQorICAgICAgICBjb25maWcgPSB7fQorICAgICAgICBjb25maWdbJ2RlZmF1bHRfc3N0YXRlX2RpciddID0gIlNTVEFURV9ESVIgPz0gXCIke1RPUERJUn0vc3N0YXRlLWNhY2hlXCIiCisgICAgICAgIGNvbmZpZ1snbnVsbF9zc3RhdGVfbWlycm9ycyddID0gIlNTVEFURV9NSVJST1JTID0gXCJcIiIKKyAgICAgICAgY29uZmlnWydkZWZhdWx0X3RtcF9kaXInXSA9ICJUTVBESVIgPSBcIiR7VE9QRElSfS90bXBcIiIKKyAgICAgICAgZm9yIGtleSBpbiBjb25maWc6CisgICAgICAgICAgICBmdG9vbHMuYXBwZW5kX2ZpbGUob3MucGF0aC5qb2luKGJ1aWxkZGlyLCAnY29uZi9zZWxmdGVzdC5pbmMnKSwgY29uZmlnW2tleV0pCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJyksICdjb25mL2JibGF5ZXJzLmNvbmYnKSwgb3MucGF0aC5qb2luKGJ1aWxkZGlyLCAnY29uZi9iYmxheWVycy5jb25mJykpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJyksICdjb25mL2F1dG8uY29uZicpLCBvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mL2F1dG8uY29uZicpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgaGFyZGxpbmtfdHJlZShzZWxmLCBzcmMsIGRzdCk6CisgICAgICAgIG9zLm1rZGlyKGRzdCkKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChkc3QpCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNyYyk6CisgICAgICAgICAgICBpZiByb290ID09IHNyYzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKGRzdCwgcm9vdC5zcGxpdChzcmMpWzFdWzE6XSkpCisgICAgICAgICAgICBmb3Igc3N0YXRlX2ZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgb3MubGluayhvcy5wYXRoLmpvaW4ocm9vdCwgc3N0YXRlX2ZpbGUpLCBvcy5wYXRoLmpvaW4oZHN0LCByb290LnNwbGl0KHNyYylbMV1bMTpdLCBzc3RhdGVfZmlsZSkpCisKKyAgICBkZWYgcnVuX3Rlc3Rfc3N0YXRlX3JlYnVpbGQoc2VsZiwgcHJpbWFyeV90YXJnZXRzLCByZWxvY2F0ZT1GYWxzZSwgcmVidWlsZF9kZXBlbmRlbmNpZXM9RmFsc2UpOgorICAgICAgICBidWlsZEEgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2J1aWxkQScpCisgICAgICAgIGlmIHJlbG9jYXRlOgorICAgICAgICAgICAgYnVpbGRCID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdidWlsZEInKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYnVpbGRCID0gYnVpbGRBCisKKyAgICAgICAgaWYgcmVidWlsZF9kZXBlbmRlbmNpZXM6CisgICAgICAgICAgICByZWJ1aWxkX3RhcmdldHMgPSBzZWxmLmdldF9kZXBfdGFyZ2V0cyhwcmltYXJ5X3RhcmdldHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZWJ1aWxkX3RhcmdldHMgPSBwcmltYXJ5X3RhcmdldHMKKworICAgICAgICBzZWxmLmNvbmZpZ3VyZV9idWlsZGRpcihidWlsZEEpCisgICAgICAgIHJ1bkNtZCgoIi4gJXMvb2UtaW5pdC1idWlsZC1lbnYgJXMgJiYgIiAlIChnZXRfYmJfdmFyKCdDT1JFQkFTRScpLCBidWlsZEEpKSArICdiaXRiYWtlICAnICsgJyAnLmpvaW4obWFwKHN0ciwgcHJpbWFyeV90YXJnZXRzKSksIHNoZWxsPVRydWUsIGV4ZWN1dGFibGU9Jy9iaW4vYmFzaCcpCisgICAgICAgIHNlbGYuaGFyZGxpbmtfdHJlZShvcy5wYXRoLmpvaW4oYnVpbGRBLCAnc3N0YXRlLWNhY2hlJyksIG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnc3N0YXRlLWNhY2hlLWJ1aWxkQScpKQorICAgICAgICBzaHV0aWwucm10cmVlKGJ1aWxkQSkKKworICAgICAgICBmYWlsZWRfcmVidWlsZCA9IFtdCisgICAgICAgIGZhaWxlZF9jbGVhbnNzdGF0ZSA9IFtdCisgICAgICAgIGZvciB0YXJnZXQgaW4gcmVidWlsZF90YXJnZXRzOgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmVfYnVpbGRkaXIoYnVpbGRCKQorICAgICAgICAgICAgc2VsZi5oYXJkbGlua190cmVlKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnc3N0YXRlLWNhY2hlLWJ1aWxkQScpLCBvcy5wYXRoLmpvaW4oYnVpbGRCLCAnc3N0YXRlLWNhY2hlJykpCisKKyAgICAgICAgICAgIHJlc3VsdF9jbGVhbnNzdGF0ZSA9IHJ1bkNtZCgoIi4gJXMvb2UtaW5pdC1idWlsZC1lbnYgJXMgJiYgIiAlIChnZXRfYmJfdmFyKCdDT1JFQkFTRScpLCBidWlsZEIpKSArICdiaXRiYWtlIC1jY2xlYW5zc3RhdGUgJyArIHRhcmdldCwgaWdub3JlX3N0YXR1cz1UcnVlLCBzaGVsbD1UcnVlLCBleGVjdXRhYmxlPScvYmluL2Jhc2gnKQorICAgICAgICAgICAgaWYgbm90IHJlc3VsdF9jbGVhbnNzdGF0ZS5zdGF0dXMgPT0gMDoKKyAgICAgICAgICAgICAgICBmYWlsZWRfY2xlYW5zc3RhdGUuYXBwZW5kKHRhcmdldCkKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGJ1aWxkQikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICByZXN1bHRfYnVpbGQgPSBydW5DbWQoKCIuICVzL29lLWluaXQtYnVpbGQtZW52ICVzICYmICIgJSAoZ2V0X2JiX3ZhcignQ09SRUJBU0UnKSwgYnVpbGRCKSkgKyAnYml0YmFrZSAnICsgdGFyZ2V0LCBpZ25vcmVfc3RhdHVzPVRydWUsIHNoZWxsPVRydWUsIGV4ZWN1dGFibGU9Jy9iaW4vYmFzaCcpCisgICAgICAgICAgICBpZiBub3QgcmVzdWx0X2J1aWxkLnN0YXR1cyA9PSAwOgorICAgICAgICAgICAgICAgIGZhaWxlZF9yZWJ1aWxkLmFwcGVuZCh0YXJnZXQpCisKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoYnVpbGRCKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmFpbGVkX3JlYnVpbGQsIG1zZz0iVGhlIGZvbGxvd2luZyByZWNpcGVzIGhhdmUgZmFpbGVkIHRvIHJlYnVpbGQ6ICVzIiAlICcgJy5qb2luKG1hcChzdHIsIGZhaWxlZF9yZWJ1aWxkKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmFpbGVkX2NsZWFuc3N0YXRlLCBtc2c9IlRoZSBmb2xsb3dpbmcgcmVjaXBlcyBoYXZlIGZhaWxlZCBjbGVhbnNzdGF0ZShhbGwgb3RoZXJzIGhhdmUgcGFzc2VkIGJvdGggY2xlYW5zc3RhdGUgYW5kIHJlYnVpbGQgZnJvbSBzc3RhdGUgdGVzdHMpOiAlcyIgJSAnICcuam9pbihtYXAoc3RyLCBmYWlsZWRfY2xlYW5zc3RhdGUpKSkKKworICAgIGRlZiB0ZXN0X3NzdGF0ZV9yZWxvY2F0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9yZWJ1aWxkKFsnY29yZS1pbWFnZS1zYXRvLXNkayddLCByZWxvY2F0ZT1UcnVlLCByZWJ1aWxkX2RlcGVuZGVuY2llcz1UcnVlKQorCisgICAgZGVmIHRlc3Rfc3N0YXRlX3JlYnVpbGQoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX3JlYnVpbGQoWydjb3JlLWltYWdlLXNhdG8tc2RrJ10sIHJlbG9jYXRlPUZhbHNlLCByZWJ1aWxkX2RlcGVuZGVuY2llcz1UcnVlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L190b2FzdGVyLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L190b2FzdGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MjQ2NTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvX3RvYXN0ZXIucHkKQEAgLTAsMCArMSwzMjAgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc2hsZXgsIHN1YnByb2Nlc3MKK2ltcG9ydCB1cmxsaWIsIGNvbW1hbmRzLCB0aW1lLCBnZXRwYXNzLCByZSwganNvbiwgc2hsZXgKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kCisKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLi8uLi8uLi8uLi8nLCAnYml0YmFrZS9saWIvdG9hc3RlcicpKSkKK29zLmVudmlyb24uc2V0ZGVmYXVsdCgiREpBTkdPX1NFVFRJTkdTX01PRFVMRSIsICJ0b2FzdGVybWFpbi5zZXR0aW5ncyIpCisKK2ltcG9ydCB0b2FzdGVybWFpbi5zZXR0aW5ncworZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0ICoKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBUb2FzdGVyU2V0dXAob2VTZWxmVGVzdCk6CisKKyAgICBkZWYgcmVjaXBlX3BhcnNlKHNlbGYsIGZpbGVfcGF0aCwgdmFyKToKKyAgICAgICAgZm9yIGxpbmUgaW4gb3BlbihmaWxlX3BhdGgsJ3InKToKKyAgICAgICAgICAgIGlmIGxpbmUuZmluZCh2YXIpID4gLTE6CisgICAgICAgICAgICAgICAgdmFsID0gbGluZS5zcGxpdCgiID0gIilbMV0ucmVwbGFjZSgiXCIiLCAiIikuc3RyaXAoKQorICAgICAgICAgICAgICAgIHJldHVybiB2YWwKKworICAgIGRlZiBmaXhfZmlsZV9wYXRoKHNlbGYsIGZpbGVfcGF0aCk6CisgICAgICAgIGlmICI6IiBpbiBmaWxlX3BhdGg6CisgICAgICAgICAgICBmaWxlX3BhdGg9ZmlsZV9wYXRoLnNwbGl0KCI6IilbMl0KKyAgICAgICAgcmV0dXJuIGZpbGVfcGF0aAorCitjbGFzcyBUb2FzdGVyX0RCX1Rlc3RzKFRvYXN0ZXJTZXR1cCk6CisKKyAgICAjIENoZWNrIGlmIGJ1aWxkIG5hbWUgaXMgdW5pcXVlIC0gdGNfaWQ9Nzk1CisgICAgQHRlc3RjYXNlKDc5NSkKKyAgICBkZWYgdGVzdF9CdWlsZF9VbmlxdWVfTmFtZShzZWxmKToKKyAgICAgICAgYWxsX2J1aWxkcyA9IEJ1aWxkLm9iamVjdHMuYWxsKCkuY291bnQoKQorICAgICAgICBkaXN0aW5jdF9idWlsZHMgPSBCdWlsZC5vYmplY3RzLnZhbHVlcygnaWQnKS5kaXN0aW5jdCgpLmNvdW50KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0aW5jdF9idWlsZHMsIGFsbF9idWlsZHMsIG1zZyA9ICdCdWlsZCBuYW1lIGlzIG5vdCB1bmlxdWUnKQorCisgICAgIyBDaGVjayBpZiBidWlsZCBjb29ja2VyIGxvZyBwYXRoIGlzIHVuaXF1ZSAtIHRjX2lkPTgxOQorICAgIEB0ZXN0Y2FzZSg4MTkpCisgICAgZGVmIHRlc3RfQnVpbGRfVW5pcXVlX0Nvb2tlcl9Mb2dfUGF0aChzZWxmKToKKyAgICAgICAgZGlzdGluY3RfcGF0aCA9IEJ1aWxkLm9iamVjdHMudmFsdWVzKCdjb29rZXJfbG9nX3BhdGgnKS5kaXN0aW5jdCgpLmNvdW50KCkKKyAgICAgICAgdG90YWxfYnVpbGRzID0gQnVpbGQub2JqZWN0cy52YWx1ZXMoJ2lkJykuY291bnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3RpbmN0X3BhdGgsIHRvdGFsX2J1aWxkcywgbXNnID0gJ0J1aWxkIGNvb2NrZXIgbG9nIHBhdGggaXMgbm90IHVuaXF1ZScpCisKKyAgICAjIENoZWNrIGlmIHRhc2sgb3JkZXIgaXMgdW5pcXVlIGZvciBvbmUgYnVpbGQgLSB0Yz04MjQKKyAgICBAdGVzdGNhc2UoODI0KQorICAgIGRlZiB0ZXN0X1Rhc2tfVW5pcXVlX09yZGVyKHNlbGYpOgorICAgICAgICBidWlsZHMgPSBCdWlsZC5vYmplY3RzLnZhbHVlcygnaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIGJ1aWxkIGluIGJ1aWxkczoKKyAgICAgICAgICAgIHRvdGFsX3Rhc2tfb3JkZXIgPSBUYXNrLm9iamVjdHMuZmlsdGVyKGJ1aWxkID0gYnVpbGRbJ2lkJ10pLnZhbHVlcygnb3JkZXInKS5jb3VudCgpCisgICAgICAgICAgICBkaXN0aW5jdF90YXNrX29yZGVyID0gVGFzay5vYmplY3RzLmZpbHRlcihidWlsZCA9IGJ1aWxkWydpZCddKS52YWx1ZXMoJ29yZGVyJykuZGlzdGluY3QoKS5jb3VudCgpCisgICAgICAgICAgICBpZiAodG90YWxfdGFza19vcmRlciAhPSBkaXN0aW5jdF90YXNrX29yZGVyKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChidWlsZFsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIGJ1aWxkIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayB0YXNrIG9yZGVyIHNlcXVlbmNlIGZvciBvbmUgYnVpbGQgLSB0Yz04MjUKKyAgICBAdGVzdGNhc2UoODI1KQorICAgIGRlZiB0ZXN0X1Rhc2tfT3JkZXJfU2VxdWVuY2Uoc2VsZik6CisgICAgICAgIGJ1aWxkcyA9IGJ1aWxkcyA9IEJ1aWxkLm9iamVjdHMudmFsdWVzKCdpZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgYnVpbGQgaW4gYnVpbGRzOgorICAgICAgICAgICAgdGFza3MgPSBUYXNrLm9iamVjdHMuZmlsdGVyKFEoYnVpbGQgPSBidWlsZFsnaWQnXSksIH5RKG9yZGVyID0gTm9uZSksIH5RKHRhc2tfbmFtZV9fY29udGFpbnMgPSAnX3NldHNjZW5lJykpLnZhbHVlcygnaWQnLCAnb3JkZXInKS5vcmRlcl9ieSgib3JkZXIiKQorICAgICAgICAgICAgY250X3Rhc2tzID0gMAorICAgICAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICAgICAgY250X3Rhc2tzICs9IDEKKyAgICAgICAgICAgICAgICBpZiAodGFza1snb3JkZXInXSAhPSBjbnRfdGFza3MpOgorICAgICAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXNrWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgZGlza19pbyBtYXRjaGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gRW5kVGltZUlPIGFuZCBTdGFydFRpbWVJTyBpbiBidWlsZCBzdGF0cyAtIHRjPTgyOAorICAgICMjIyB0aGlzIG5lZWRzIHRvIGJlIHVwZGF0ZWQgIyMjCisgICAgI2RlZiB0ZXN0X1Rhc2tfRGlza19JT19UQzgyOChzZWxmKToKKworICAgICMgQ2hlY2sgaWYgb3V0Y29tZSA9IDIgKFNTVEFURSkgdGhlbiBzc3RhdGVfcmVzdWx0IG11c3QgYmUgMyAoUkVTVE9SRUQpIC0gdGM9ODMyCisgICAgQHRlc3RjYXNlKDgzMikKKyAgICBkZWYgdGVzdF9UYXNrX0lmX091dGNvbWVfMl9Tc3RhdGVfUmVzdWx0X011c3RfQmVfMyhzZWxmKToKKyAgICAgICAgdGFza3MgPSBUYXNrLm9iamVjdHMuZmlsdGVyKG91dGNvbWUgPSAyKS52YWx1ZXMoJ2lkJywgJ3NzdGF0ZV9yZXN1bHQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiAocm93Wydzc3RhdGVfcmVzdWx0J10gIT0gMyk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFza1snaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhc2sgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIG91dGNvbWUgPSAxIChDT1ZFUkVEKSBvciAzIChFWElTVElORykgdGhlbiBzc3RhdGVfcmVzdWx0IG11c3QgYmUgMCAoU1NUQVRFX05BKSAtIHRjPTgzMworICAgIEB0ZXN0Y2FzZSg4MzMpCisgICAgZGVmIHRlc3RfVGFza19JZl9PdXRjb21lXzFfM19Tc3RhdGVfUmVzdWx0X011c3RfQmVfMChzZWxmKToKKyAgICAgICAgdGFza3MgPSBUYXNrLm9iamVjdHMuZmlsdGVyKG91dGNvbWVfX2luID0gKDEsIDMpKS52YWx1ZXMoJ2lkJywgJ3NzdGF0ZV9yZXN1bHQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiAodGFza1snc3N0YXRlX3Jlc3VsdCddICE9IDApOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBvdXRjb21lIGlzIDAgKFNVQ0NFU1MpIG9yIDQgKEZBSUxFRCkgdGhlbiBzc3RhdGVfcmVzdWx0IG11c3QgYmUgMCAoTkEpLCAxIChNSVNTKSBvciAyIChGQUlMRUQpIC0gdGM9ODM0CisgICAgQHRlc3RjYXNlKDgzNCkKKyAgICBkZWYgdGVzdF9UYXNrX0lmX091dGNvbWVfMF80X1NzdGF0ZV9SZXN1bHRfTXVzdF9CZV8wXzFfMihzZWxmKToKKyAgICAgICAgdGFza3MgPSBUYXNrLm9iamVjdHMuZmlsdGVyKG91dGNvbWVfX2luID0gKDAsIDQpKS52YWx1ZXMoJ2lkJywgJ3NzdGF0ZV9yZXN1bHQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiAodGFza1snc3N0YXRlX3Jlc3VsdCddIG5vdCBpbiBbMCwgMSwgMl0pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiB0YXNrX2V4ZWN1dGVkID0gVFJVRSAoMSksIHNjcmlwdF90eXBlIG11c3QgYmUgMCAoQ09ESU5HX05BKSwgMiAoQ09ESU5HX1BZVEhPTiksIDMgKENPRElOR19TSEVMTCkgLSB0Yz04OTEKKyAgICBAdGVzdGNhc2UoODkxKQorICAgIGRlZiB0ZXN0X1Rhc2tfSWZfVGFza19FeGVjdXRlZF9UcnVlX1NjcmlwdF9UeXBlXzBfMl8zKHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIodGFza19leGVjdXRlZCA9IDEpLnZhbHVlcygnaWQnLCAnc2NyaXB0X3R5cGUnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiAodGFza1snc2NyaXB0X3R5cGUnXSBub3QgaW4gWzAsIDIsIDNdKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXNrWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgdGFza19leGVjdXRlZCA9IFRSVUUgKDEpLCBvdXRjb21lIG11c3QgYmUgMCAoU1VDQ0VTUykgb3IgNCAoRkFJTEVEKSAtIHRjPTgzNgorICAgIEB0ZXN0Y2FzZSg4MzYpCisgICAgZGVmIHRlc3RfVGFza19JZl9UYXNrX0V4ZWN1dGVkX1RydWVfT3V0Y29tZV8wXzQoc2VsZik6CisgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcih0YXNrX2V4ZWN1dGVkID0gMSkudmFsdWVzKCdpZCcsICdvdXRjb21lJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciB0YXNrIGluIHRhc2tzOgorICAgICAgICAgICAgaWYgKHRhc2tbJ291dGNvbWUnXSBub3QgaW4gWzAsIDRdKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXNrWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgdGFza19leGVjdXRlZCA9IEZBTFNFICgwKSwgc2NyaXB0X3R5cGUgbXVzdCBiZSAwIC0gdGM9ODkwCisgICAgQHRlc3RjYXNlKDg5MCkKKyAgICBkZWYgdGVzdF9UYXNrX0lmX1Rhc2tfRXhlY3V0ZWRfRmFsc2VfU2NyaXB0X1R5cGVfMChzZWxmKToKKyAgICAgICAgdGFza3MgPSBUYXNrLm9iamVjdHMuZmlsdGVyKHRhc2tfZXhlY3V0ZWQgPSAwKS52YWx1ZXMoJ2lkJywgJ3NjcmlwdF90eXBlJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciB0YXNrIGluIHRhc2tzOgorICAgICAgICAgICAgaWYgKHRhc2tbJ3NjcmlwdF90eXBlJ10gIT0gMCk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFza1snaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhc2sgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIHRhc2tfZXhlY3V0ZWQgPSBGQUxTRSAoMCkgYW5kIGJ1aWxkIG91dGNvbWUgPSBTVUNDRUVERUQgKDApLCB0YXNrIG91dGNvbWUgbXVzdCBiZSAxIChDT1ZFUkVEKSwgMiAoQ0FDSEVEKSwgMyAoUFJFQlVJTFQpLCA1IChFTVBUWSkgLSB0Yz04MzcKKyAgICBAdGVzdGNhc2UoODM3KQorICAgIGRlZiB0ZXN0X1Rhc2tfSWZfVGFza19FeGVjdXRlZF9GYWxzZV9PdXRjb21lXzFfMl8zXzUoc2VsZik6CisgICAgICAgIGJ1aWxkcyA9IEJ1aWxkLm9iamVjdHMuZmlsdGVyKG91dGNvbWUgPSAwKS52YWx1ZXMoJ2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBidWlsZCBpbiBidWlsZHM6CisgICAgICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIoYnVpbGQgPSBidWlsZFsnaWQnXSwgdGFza19leGVjdXRlZCA9IDApLnZhbHVlcygnaWQnLCAnb3V0Y29tZScpCisgICAgICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgICAgICBpZiAodGFza1snb3V0Y29tZSddIG5vdCBpbiBbMSwgMiwgMywgNV0pOgorICAgICAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXNrWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgS2V5IHZlcmlmaWNhdGlvbiAtIHRjPTg4OAorICAgIEB0ZXN0Y2FzZSg4ODgpCisgICAgZGVmIHRlc3RfVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlKHNlbGYpOgorICAgICAgICByb3dzID0gVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlLm9iamVjdHMudmFsdWVzKCdpZCcsICd0YXJnZXRfaWQnLCAncGFja2FnZV9pZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3Igcm93IGluIHJvd3M6CisgICAgICAgICAgICB0YXJnZXQgPSBUYXJnZXQub2JqZWN0cy5maWx0ZXIoaWQgPSByb3dbJ3RhcmdldF9pZCddKS52YWx1ZXMoJ2lkJykKKyAgICAgICAgICAgIHBhY2thZ2UgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKGlkID0gcm93WydwYWNrYWdlX2lkJ10pLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgaWYgKG5vdCB0YXJnZXQgb3Igbm90IHBhY2thZ2UpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHJvd1snaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhcmdldCBpbnN0YWxsZWQgcGFja2FnZSBpZDogJXMnICUgY250X2VycikKKworICAgICMgS2V5IHZlcmlmaWNhdGlvbiAtIHRjPTg4OQorICAgIEB0ZXN0Y2FzZSg4ODkpCisgICAgZGVmIHRlc3RfVGFza19EZXBlbmRlbmN5KHNlbGYpOgorICAgICAgICByb3dzID0gVGFza19EZXBlbmRlbmN5Lm9iamVjdHMudmFsdWVzKCdpZCcsICd0YXNrX2lkJywgJ2RlcGVuZHNfb25faWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHJvdyBpbiByb3dzOgorICAgICAgICAgICAgdGFza19pZCA9IFRhc2sub2JqZWN0cy5maWx0ZXIoaWQgPSByb3dbJ3Rhc2tfaWQnXSkudmFsdWVzKCdpZCcpCisgICAgICAgICAgICBkZXBlbmRzX29uX2lkID0gVGFzay5vYmplY3RzLmZpbHRlcihpZCA9IHJvd1snZGVwZW5kc19vbl9pZCddKS52YWx1ZXMoJ2lkJykKKyAgICAgICAgICAgIGlmIChub3QgdGFza19pZCBvciBub3QgZGVwZW5kc19vbl9pZCk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQocm93WydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFzayBkZXBlbmRlbmN5IGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBidWlsZCB0YXJnZXQgZmlsZV9uYW1lIGlzIHBvcHVsYXRlZCBvbmx5IGlmIGlzX2ltYWdlPXRydWUgQU5EIG9ybV9idWlsZC5vdXRjb21lPTAgdGhlbiBpZiB0aGUgZmlsZSBleGlzdHMgYW5kIGl0cyBzaXplIG1hdGNoZXMgdGhlIGZpbGVfc2l6ZSB2YWx1ZQorICAgICMjIyBOZWVkIHRvIGFkZCB0aGUgdGMgaW4gdGhlIHRlc3QgcnVuCisgICAgQHRlc3RjYXNlKDEwMzcpCisgICAgZGVmIHRlc3RfVGFyZ2V0X0ZpbGVfTmFtZV9Qb3B1bGF0ZWQoc2VsZik6CisgICAgICAgIGJ1aWxkcyA9IEJ1aWxkLm9iamVjdHMuZmlsdGVyKG91dGNvbWUgPSAwKS52YWx1ZXMoJ2lkJykKKyAgICAgICAgZm9yIGJ1aWxkIGluIGJ1aWxkczoKKyAgICAgICAgICAgIHRhcmdldHMgPSBUYXJnZXQub2JqZWN0cy5maWx0ZXIoYnVpbGRfaWQgPSBidWlsZFsnaWQnXSwgaXNfaW1hZ2UgPSAxKS52YWx1ZXMoJ2lkJykKKyAgICAgICAgICAgIGZvciB0YXJnZXQgaW4gdGFyZ2V0czoKKyAgICAgICAgICAgICAgICB0YXJnZXRfZmlsZXMgPSBUYXJnZXRfSW1hZ2VfRmlsZS5vYmplY3RzLmZpbHRlcih0YXJnZXRfaWQgPSB0YXJnZXRbJ2lkJ10pLnZhbHVlcygnaWQnLCAnZmlsZV9uYW1lJywgJ2ZpbGVfc2l6ZScpCisgICAgICAgICAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGZpbGVfaW5mbyBpbiB0YXJnZXRfZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIHRhcmdldF9pZCA9IGZpbGVfaW5mb1snaWQnXQorICAgICAgICAgICAgICAgICAgICB0YXJnZXRfZmlsZV9uYW1lID0gZmlsZV9pbmZvWydmaWxlX25hbWUnXQorICAgICAgICAgICAgICAgICAgICB0YXJnZXRfZmlsZV9zaXplID0gZmlsZV9pbmZvWydmaWxlX3NpemUnXQorICAgICAgICAgICAgICAgICAgICBpZiAobm90IHRhcmdldF9maWxlX25hbWUgb3Igbm90IHRhcmdldF9maWxlX3NpemUpOgorICAgICAgICAgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFyZ2V0X2lkKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vdCBvcy5wYXRoLmV4aXN0cyh0YXJnZXRfZmlsZV9uYW1lKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFyZ2V0X2lkKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3MucGF0aC5nZXRzaXplKHRhcmdldF9maWxlX25hbWUpICE9IHRhcmdldF9maWxlX3NpemUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXJnZXRfaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXJnZXQgaW1hZ2UgZmlsZSBpZDogJXMnICUgY250X2VycikKKworICAgICMgS2V5IHZlcmlmaWNhdGlvbiAtIHRjPTg4NAorICAgIEB0ZXN0Y2FzZSg4ODQpCisgICAgZGVmIHRlc3RfUGFja2FnZV9EZXBlbmRlbmN5KHNlbGYpOgorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZGVwcyA9IFBhY2thZ2VfRGVwZW5kZW5jeS5vYmplY3RzLnZhbHVlcygnaWQnLCAncGFja2FnZV9pZCcsICdkZXBlbmRzX29uX2lkJykKKyAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgaWYgKGRlcFsncGFja2FnZV9pZCddID09IGRlcFsnZGVwZW5kc19vbl9pZCddKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChkZXBbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBwYWNrYWdlIGRlcGVuZGVuY3kgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIFJlY2lwZSBrZXkgdmVyaWZpY2F0aW9uLCByZWNpcGUgbmFtZSBkb2VzIG5vdCBkZXBlbmRzIG9uIGEgcmVjaXBlIGhhdmluZyB0aGUgc2FtZSBuYW1lIC0gdGM9ODgzCisgICAgQHRlc3RjYXNlKDg4MykKKyAgICBkZWYgdGVzdF9SZWNpcGVfRGVwZW5kZW5jeShzZWxmKToKKyAgICAgICAgZGVwcyA9IFJlY2lwZV9EZXBlbmRlbmN5Lm9iamVjdHMudmFsdWVzKCdpZCcsICdyZWNpcGVfaWQnLCAnZGVwZW5kc19vbl9pZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICBpZiAobm90IGRlcFsncmVjaXBlX2lkJ10gb3Igbm90IGRlcFsnZGVwZW5kc19vbl9pZCddKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChkZXBbJ2lkJ10pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5hbWUgPSBSZWNpcGUub2JqZWN0cy5maWx0ZXIoaWQgPSBkZXBbJ3JlY2lwZV9pZCddKS52YWx1ZXMoJ25hbWUnKQorICAgICAgICAgICAgICAgIGRlcF9uYW1lID0gUmVjaXBlLm9iamVjdHMuZmlsdGVyKGlkID0gZGVwWydkZXBlbmRzX29uX2lkJ10pLnZhbHVlcygnbmFtZScpCisgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gZGVwX25hbWUpOgorICAgICAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChkZXBbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciByZWNpcGUgZGVwZW5kZW5jeSBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgcGFja2FnZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggYSBudW1iZXIgKDAtOSkgLSB0Yz04NDYKKyAgICBAdGVzdGNhc2UoODQ2KQorICAgIGRlZiB0ZXN0X1BhY2thZ2VfTmFtZV9Gb3JfTnVtYmVyKHNlbGYpOgorICAgICAgICBwYWNrYWdlcyA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoflEoc2l6ZSA9IC0xKSkudmFsdWVzKCdpZCcsICduYW1lJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgaWYgKHBhY2thZ2VbJ25hbWUnXVswXS5pc2RpZ2l0KCkgaXMgVHJ1ZSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQocGFja2FnZVsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHBhY2thZ2UgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIHBhY2thZ2UgdmVyc2lvbiBzdGFydHMgd2l0aCBhIG51bWJlciAoMC05KSAtIHRjPTg0NworICAgIEB0ZXN0Y2FzZSg4NDcpCisgICAgZGVmIHRlc3RfUGFja2FnZV9WZXJzaW9uX1N0YXJ0c19XaXRoX051bWJlcihzZWxmKToKKyAgICAgICAgcGFja2FnZXMgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKH5RKHNpemUgPSAtMSkpLnZhbHVlcygnaWQnLCAndmVyc2lvbicpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgIGlmIChwYWNrYWdlWyd2ZXJzaW9uJ11bMF0uaXNkaWdpdCgpIGlzIEZhbHNlKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChwYWNrYWdlWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgcGFja2FnZSBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgcGFja2FnZSByZXZpc2lvbiBzdGFydHMgd2l0aCAncicgLSB0Yz04NDgKKyAgICBAdGVzdGNhc2UoODQ4KQorICAgIGRlZiB0ZXN0X1BhY2thZ2VfUmV2aXNpb25fU3RhcnRzX1dpdGhfcihzZWxmKToKKyAgICAgICAgcGFja2FnZXMgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKH5RKHNpemUgPSAtMSkpLnZhbHVlcygnaWQnLCAncmV2aXNpb24nKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICBpZiAocGFja2FnZVsncmV2aXNpb24nXVswXS5zdGFydHN3aXRoKCJyIikgaXMgRmFsc2UpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHBhY2thZ2VbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIHBhY2thZ2UgYnVpbGRfaWQKKyAgICAjIyMgVEMgbXVzdCBiZSBhZGRlZCBpbiB0ZXN0IHJ1bgorICAgIEB0ZXN0Y2FzZSgxMDM4KQorICAgIGRlZiB0ZXN0X1BhY2thZ2VfQnVpbGRfSWQoc2VsZik6CisgICAgICAgIHBhY2thZ2VzID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcih+UShzaXplID0gLTEpKS52YWx1ZXMoJ2lkJywgJ2J1aWxkX2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgYnVpbGRfaWQgPSBCdWlsZC5vYmplY3RzLmZpbHRlcihpZCA9IHBhY2thZ2VbJ2J1aWxkX2lkJ10pLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgaWYgKG5vdCBidWlsZF9pZCk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQocGFja2FnZVsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHBhY2thZ2UgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIHRoZSB2YWxpZGl0eSBvZiBwYWNrYWdlIHJlY2lwZV9pZAorICAgICMjIyBUQyBtdXN0IGJlIGFkZGVkIGluIHRlc3QgcnVuCisgICAgQHRlc3RjYXNlKDEwMzkpCisgICAgZGVmIHRlc3RfUGFja2FnZV9SZWNpcGVfSWQoc2VsZik6CisgICAgICAgIHBhY2thZ2VzID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcih+UShzaXplID0gLTEpKS52YWx1ZXMoJ2lkJywgJ3JlY2lwZV9pZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgIHJlY2lwZV9pZCA9IFJlY2lwZS5vYmplY3RzLmZpbHRlcihpZCA9IHBhY2thZ2VbJ3JlY2lwZV9pZCddKS52YWx1ZXMoJ2lkJykKKyAgICAgICAgICAgIGlmIChub3QgcmVjaXBlX2lkKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChwYWNrYWdlWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgcGFja2FnZSBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgcGFja2FnZSBpbnN0YWxsZWRfc2l6ZSBmaWVsZCBpcyBub3QgbnVsbAorICAgICMjIyBUQyBtdXN0IGJlIGFkZWQgaW4gdGVzdCBydW4KKyAgICBAdGVzdGNhc2UoMTA0MCkKKyAgICBkZWYgdGVzdF9QYWNrYWdlX0luc3RhbGxlZF9TaXplX05vdF9OVUxMKHNlbGYpOgorICAgICAgICBwYWNrYWdlcyA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoaW5zdGFsbGVkX3NpemVfX2lzbnVsbCA9IFRydWUpLnZhbHVlcygnaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChwYWNrYWdlWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgcGFja2FnZSBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgYWxsIGxheWVycyByZXF1ZXN0cyByZXR1cm4gZXhpdCBjb2RlIGlzIDIwMCAtIHRjPTg0MworICAgIEB0ZXN0Y2FzZSg4NDMpCisgICAgZGVmIHRlc3RfTGF5ZXJzX1JlcXVlc3RzX0V4aXRfQ29kZShzZWxmKToKKyAgICAgICAgbGF5ZXJzID0gTGF5ZXIub2JqZWN0cy52YWx1ZXMoJ2lkJywgJ2xheWVyX2luZGV4X3VybCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgorICAgICAgICAgICAgcmVzcCA9IHVybGxpYi51cmxvcGVuKGxheWVyWydsYXllcl9pbmRleF91cmwnXSkKKyAgICAgICAgICAgIGlmIChyZXNwLmdldGNvZGUoKSAhPSAyMDApOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGxheWVyWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgbGF5ZXIgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIGRqYW5nbyBzZXJ2ZXIgc3RhcnRzIHJlZ2FyZGxlc3Mgb2YgdGhlIHRpbWV6b25lIHNldCBvbiB0aGUgbWFjaGluZSAtIHRjPTkwNQorICAgIEB0ZXN0Y2FzZSg5MDUpCisgICAgZGVmIHRlc3RfU3RhcnRfRGphbmdvX1RpbWV6b25lKHNlbGYpOgorICAgICAgICBjdXJyZW50X3BhdGggPSBvcy5nZXRjd2QoKQorICAgICAgICB6b25lZmlsZWxpc3QgPSBbXQorICAgICAgICBaT05FSU5GT1BBVEggPSAnL3Vzci9zaGFyZS96b25laW5mby8nCisgICAgICAgIG9zLmNoZGlyKCIuLi9iaXRiYWtlL2xpYi90b2FzdGVyLyIpCisgICAgICAgIGNudF9lcnIgPSAwCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBvcy5saXN0ZGlyKFpPTkVJTkZPUEFUSCk6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oWk9ORUlORk9QQVRILCBmaWxlbmFtZSkpOgorICAgICAgICAgICAgICAgIHpvbmVmaWxlbGlzdC5hcHBlbmQoZmlsZW5hbWUpCisgICAgICAgIGZvciBrIGluIHJhbmdlKGxlbih6b25lZmlsZWxpc3QpKToKKyAgICAgICAgICAgIGlmIGsgPD0gNToKKyAgICAgICAgICAgICAgICBmaWxlcyA9IHpvbmVmaWxlbGlzdFtrXQorICAgICAgICAgICAgICAgIG9zLnN5c3RlbSgiZXhwb3J0IFRaPSIrc3RyKGZpbGVzKSsiOyBweXRob24gbWFuYWdlLnB5IHJ1bnNlcnZlciA+IC9kZXYvbnVsbCAyPiYxICYiKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMykKKyAgICAgICAgICAgICAgICBwaWQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgicHMgYXV4IHwgZ3JlcCAnWy91XXNyL2Jpbi9weXRob24gbWFuYWdlLnB5IHJ1bnNlcnZlcicgfCBhd2sgJ3twcmludCAkMn0nIiwgc2hlbGwgPSBUcnVlKQorICAgICAgICAgICAgICAgIGlmIHBpZDoKKyAgICAgICAgICAgICAgICAgICAgb3Muc3lzdGVtKCJraWxsIC05ICIrc3RyKHBpZCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQoem9uZWZpbGVsaXN0W2tdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNudF9lcnIsIDAsIG1zZyA9ICdFcnJvcnMgZGphbmdvIHNlcnZlciBkb2VzIG5vdCBzdGFydCB3aXRoIHRpbWV6b25lOiAlcycgJSBjbnRfZXJyKQorICAgICAgICBvcy5jaGRpcihjdXJyZW50X3BhdGgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmFzZS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZmFhNjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmFzZS5weQpAQCAtMCwwICsxLDE1MyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKworIyBERVNDUklQVElPTgorIyBCYXNlIGNsYXNzIGluaGVyaXRlZCBieSB0ZXN0IGNsYXNzZXMgaW4gbWV0YS9saWIvc2VsZnRlc3QKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgZXJybm8KKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF90ZXN0X2xheWVyCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgTG9nUmVzdWx0cworCitATG9nUmVzdWx0cworY2xhc3Mgb2VTZWxmVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcigic2VsZnRlc3QuYmFzZSIpCisgICAgbG9uZ01lc3NhZ2UgPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0icnVuVGVzdCIpOgorICAgICAgICBzZWxmLmJ1aWxkZGlyID0gb3MuZW52aXJvbi5nZXQoIkJVSUxERElSIikKKyAgICAgICAgc2VsZi5sb2NhbGNvbmZfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAiY29uZi9sb2NhbC5jb25mIikKKyAgICAgICAgc2VsZi50ZXN0aW5jX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgImNvbmYvc2VsZnRlc3QuaW5jIikKKyAgICAgICAgc2VsZi5sb2NhbF9iYmxheWVyc19wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJjb25mL2JibGF5ZXJzLmNvbmYiKQorICAgICAgICBzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAiY29uZi9iYmxheWVycy5pbmMiKQorICAgICAgICBzZWxmLnRlc3RsYXllcl9wYXRoID0gb2VTZWxmVGVzdC50ZXN0bGF5ZXJfcGF0aAorICAgICAgICBzZWxmLl9leHRyYV90ZWFyX2Rvd25fY29tbWFuZHMgPSBbXQorICAgICAgICBzZWxmLl90cmFja19mb3JfY2xlYW51cCA9IFtdCisgICAgICAgIHN1cGVyKG9lU2VsZlRlc3QsIHNlbGYpLl9faW5pdF9fKG1ldGhvZE5hbWUpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIG9zLmNoZGlyKHNlbGYuYnVpbGRkaXIpCisgICAgICAgICMgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBwcmV2aW91cyB0ZXN0IGxlZnQgYXJvdW5kIGluIGNvbmZpZyBvciBpbmMgZmlsZXMKKyAgICAgICAgIyBpZiBpdCBmYWlsZWQgc28gd2UgbmVlZCBhIGZyZXNoIHN0YXJ0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLnRlc3RpbmNfcGF0aCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGZvciByb290LCBfLCBmaWxlcyBpbiBvcy53YWxrKHNlbGYudGVzdGxheWVyX3BhdGgpOgorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgZiA9PSAndGVzdF9yZWNpcGUuaW5jJzoKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihyb290LCBmKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgIyB0ZXN0cyBtaWdodCBuZWVkIHRoZWlyIG93biBzZXR1cAorICAgICAgICAjIGJ1dCBpZiB0aGV5IG92ZXJ3cml0ZSB0aGlzIG9uZSB0aGV5IGhhdmUgdG8gY2FsbAorICAgICAgICAjIHN1cGVyIGVhY2ggdGltZSwgc28gbGV0J3MgZ2l2ZSB0aGVtIGFuIGFsdGVybmF0aXZlCisgICAgICAgIHNlbGYuc2V0VXBMb2NhbCgpCisKKyAgICBkZWYgc2V0VXBMb2NhbChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9leHRyYV90ZWFyX2Rvd25fY29tbWFuZHM6CisgICAgICAgICAgICBmYWlsZWRfZXh0cmFfY29tbWFuZHMgPSBbXQorICAgICAgICAgICAgZm9yIGNvbW1hbmQgaW4gc2VsZi5fZXh0cmFfdGVhcl9kb3duX2NvbW1hbmRzOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChjb21tYW5kLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgICAgICAgICAgaWYgbm90IHJlc3VsdC5zdGF0dXMgPT0gIDA6CisgICAgICAgICAgICAgICAgICAgIGZhaWxlZF9leHRyYV9jb21tYW5kcy5hcHBlbmQoY29tbWFuZCkKKyAgICAgICAgICAgIGlmIGZhaWxlZF9leHRyYV9jb21tYW5kczoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy53YXJuaW5nKCJ0ZWFyRG93biBjb21tYW5kcyBoYXZlIGZhaWxlZDogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIGZhaWxlZF9leHRyYV9jb21tYW5kcykpKQorICAgICAgICAgICAgICAgIHNlbGYubG9nLmRlYnVnKCJUcnlpbmcgdG8gbW92ZSBvbi4iKQorICAgICAgICAgICAgc2VsZi5fZXh0cmFfdGVhcl9kb3duX2NvbW1hbmRzID0gW10KKworICAgICAgICBpZiBzZWxmLl90cmFja19mb3JfY2xlYW51cDoKKyAgICAgICAgICAgIGZvciBwYXRoIGluIHNlbGYuX3RyYWNrX2Zvcl9jbGVhbnVwOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUocGF0aCkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHBhdGgpCisgICAgICAgICAgICBzZWxmLl90cmFja19mb3JfY2xlYW51cCA9IFtdCisKKyAgICAgICAgc2VsZi50ZWFyRG93bkxvY2FsKCkKKworICAgIGRlZiB0ZWFyRG93bkxvY2FsKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICAjIGFkZCB0ZXN0IHNwZWNpZmljIGNvbW1hbmRzIHRvIHRoZSB0ZWFyRG93biBtZXRob2QuCisgICAgZGVmIGFkZF9jb21tYW5kX3RvX3RlYXJEb3duKHNlbGYsIGNvbW1hbmQpOgorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiQWRkaW5nIGNvbW1hbmQgJyVzJyB0byB0ZWFyRG93biBmb3IgdGhpcyB0ZXN0LiIgJSBjb21tYW5kKQorICAgICAgICBzZWxmLl9leHRyYV90ZWFyX2Rvd25fY29tbWFuZHMuYXBwZW5kKGNvbW1hbmQpCisgICAgIyBhZGQgdGVzdCBzcGVjaWZpYyBmaWxlcyBvciBkaXJlY3RvcmllcyB0byBiZSByZW1vdmVkIGluIHRoZSB0ZWFyRG93biBtZXRob2QKKyAgICBkZWYgdHJhY2tfZm9yX2NsZWFudXAoc2VsZiwgcGF0aCk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJBZGRpbmcgcGF0aCAnJXMnIHRvIGJlIGNsZWFuZWQgdXAgd2hlbiB0ZXN0IGlzIG92ZXIiICUgcGF0aCkKKyAgICAgICAgc2VsZi5fdHJhY2tfZm9yX2NsZWFudXAuYXBwZW5kKHBhdGgpCisKKyAgICAjIHdyaXRlIHRvIDxidWlsZGRpcj4vY29uZi9zZWxmdGVzdC5pbmMKKyAgICBkZWYgd3JpdGVfY29uZmlnKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiV3JpdGluZyB0bzogJXNcbiVzXG4iICUgKHNlbGYudGVzdGluY19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLndyaXRlX2ZpbGUoc2VsZi50ZXN0aW5jX3BhdGgsIGRhdGEpCisKKyAgICAjIGFwcGVuZCB0byA8YnVpbGRkaXI+L2NvbmYvc2VsZnRlc3QuaW5jCisgICAgZGVmIGFwcGVuZF9jb25maWcoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJBcHBlbmRpbmcgdG86ICVzXG4lc1xuIiAlIChzZWxmLnRlc3RpbmNfcGF0aCwgZGF0YSkpCisgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShzZWxmLnRlc3RpbmNfcGF0aCwgZGF0YSkKKworICAgICMgcmVtb3ZlIGRhdGEgZnJvbSA8YnVpbGRkaXI+L2NvbmYvc2VsZnRlc3QuaW5jCisgICAgZGVmIHJlbW92ZV9jb25maWcoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJSZW1vdmluZyBmcm9tOiAlc1xuXCVzXG4iICUgKHNlbGYudGVzdGluY19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUoc2VsZi50ZXN0aW5jX3BhdGgsIGRhdGEpCisKKyAgICAjIHdyaXRlIHRvIG1ldGEtc2VmbHRlc3QvcmVjaXBlcy10ZXN0LzxyZWNpcGU+L3Rlc3RfcmVjaXBlLmluYworICAgIGRlZiB3cml0ZV9yZWNpcGVpbmMoc2VsZiwgcmVjaXBlLCBkYXRhKToKKyAgICAgICAgaW5jX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0bGF5ZXJfcGF0aCwgJ3JlY2lwZXMtdGVzdCcsIHJlY2lwZSwgJ3Rlc3RfcmVjaXBlLmluYycpCisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJXcml0aW5nIHRvOiAlc1xuJXNcbiIgJSAoaW5jX2ZpbGUsIGRhdGEpKQorICAgICAgICBmdG9vbHMud3JpdGVfZmlsZShpbmNfZmlsZSwgZGF0YSkKKworICAgICMgYXBwZW5kIGRhdGEgdG8gbWV0YS1zZWZsdGVzdC9yZWNpcGVzLXRlc3QvPHJlY2lwZT4vdGVzdF9yZWNpcGUuaW5jCisgICAgZGVmIGFwcGVuZF9yZWNpcGVpbmMoc2VsZiwgcmVjaXBlLCBkYXRhKToKKyAgICAgICAgaW5jX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0bGF5ZXJfcGF0aCwgJ3JlY2lwZXMtdGVzdCcsIHJlY2lwZSwgJ3Rlc3RfcmVjaXBlLmluYycpCisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJBcHBlbmRpbmcgdG86ICVzXG4lc1xuIiAlIChpbmNfZmlsZSwgZGF0YSkpCisgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShpbmNfZmlsZSwgZGF0YSkKKworICAgICMgcmVtb3ZlIGRhdGEgZnJvbSBtZXRhLXNlZmx0ZXN0L3JlY2lwZXMtdGVzdC88cmVjaXBlPi90ZXN0X3JlY2lwZS5pbmMKKyAgICBkZWYgcmVtb3ZlX3JlY2lwZWluYyhzZWxmLCByZWNpcGUsIGRhdGEpOgorICAgICAgICBpbmNfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RsYXllcl9wYXRoLCAncmVjaXBlcy10ZXN0JywgcmVjaXBlLCAndGVzdF9yZWNpcGUuaW5jJykKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIlJlbW92aW5nIGZyb206ICVzXG4lc1xuIiAlIChpbmNfZmlsZSwgZGF0YSkpCisgICAgICAgIGZ0b29scy5yZW1vdmVfZnJvbV9maWxlKGluY19maWxlLCBkYXRhKQorCisgICAgIyBkZWxldGUgbWV0YS1zZWZsdGVzdC9yZWNpcGVzLXRlc3QvPHJlY2lwZT4vdGVzdF9yZWNpcGUuaW5jIGZpbGUKKyAgICBkZWYgZGVsZXRlX3JlY2lwZWluYyhzZWxmLCByZWNpcGUpOgorICAgICAgICBpbmNfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RsYXllcl9wYXRoLCAncmVjaXBlcy10ZXN0JywgcmVjaXBlLCAndGVzdF9yZWNpcGUuaW5jJykKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIkRlbGV0aW5nIGZpbGU6ICVzIiAlIGluY19maWxlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW1vdmUoaW5jX2ZpbGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgIyB3cml0ZSB0byA8YnVpbGRkaXI+L2NvbmYvYmJsYXllcnMuaW5jCisgICAgZGVmIHdyaXRlX2JibGF5ZXJzX2NvbmZpZyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIldyaXRpbmcgdG86ICVzXG4lc1xuIiAlIChzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCwgZGF0YSkpCisgICAgICAgIGZ0b29scy53cml0ZV9maWxlKHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoLCBkYXRhKQorCisgICAgIyBhcHBlbmQgdG8gPGJ1aWxkZGlyPi9jb25mL2JibGF5ZXJzLmluYworICAgIGRlZiBhcHBlbmRfYmJsYXllcnNfY29uZmlnKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiQXBwZW5kaW5nIHRvOiAlc1xuJXNcbiIgJSAoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIGRhdGEpKQorICAgICAgICBmdG9vbHMuYXBwZW5kX2ZpbGUoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIGRhdGEpCisKKyAgICAjIHJlbW92ZSBkYXRhIGZyb20gPGJ1aWxkZGlyPi9jb25mL2JibGF5ZXJzLmluYworICAgIGRlZiByZW1vdmVfYmJsYXllcnNfY29uZmlnKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiUmVtb3ZpbmcgZnJvbTogJXNcblwlc1xuIiAlIChzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCwgZGF0YSkpCisgICAgICAgIGZ0b29scy5yZW1vdmVfZnJvbV9maWxlKHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoLCBkYXRhKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2JibGF5ZXJzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2JibGF5ZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYzE3ZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmJsYXllcnMucHkKQEAgLTAsMCArMSw2MiBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBnZXRfYmJfdmFyCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKKworY2xhc3MgQml0YmFrZUxheWVycyhvZVNlbGZUZXN0KToKKworICAgIEB0ZXN0Y2FzZSg3NTYpCisgICAgZGVmIHRlc3RfYml0YmFrZWxheWVyc19zaG93Y3Jvc3NkZXBlbmRzKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctY3Jvc3MtZGVwZW5kcycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYXNwZWxsJyBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiTm8gZGVwZW5kZW5jaWVzIHdlcmUgc2hvd24uIGJpdGJha2UtbGF5ZXJzIHNob3ctY3Jvc3MtZGVwZW5kcyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoODMpCisgICAgZGVmIHRlc3RfYml0YmFrZWxheWVyc19zaG93bGF5ZXJzKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdtZXRhLXNlbGZ0ZXN0JyBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiTm8gbGF5ZXJzIHdlcmUgc2hvd24uIGJpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSg5MykKKyAgICBkZWYgdGVzdF9iaXRiYWtlbGF5ZXJzX3Nob3dhcHBlbmRzKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctYXBwZW5kcycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgneGN1cnNvci10cmFuc3BhcmVudC10aGVtZV8wLjEuMS5iYmFwcGVuZCcgaW4gcmVzdWx0Lm91dHB1dCwgbXNnPSJ4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiYXBwZW5kIGZpbGUgd2FzIG5vdCByZWNvZ25pc2VkLiAgYml0YmFrZS1sYXllcnMgc2hvdy1hcHBlbmRzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSg5MCkKKyAgICBkZWYgdGVzdF9iaXRiYWtlbGF5ZXJzX3Nob3dvdmVybGF5ZWQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1vdmVybGF5ZWQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2FzcGVsbCcgaW4gcmVzdWx0Lm91dHB1dCwgbXNnPSJhc3BlbGwgb3ZlcmxheWVkIHJlY2lwZSB3YXMgbm90IHJlY29nbmlzZWQgYml0YmFrZS1sYXllcnMgc2hvdy1vdmVybGF5ZWQgJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSg5NSkKKyAgICBkZWYgdGVzdF9iaXRiYWtlbGF5ZXJzX2ZsYXR0ZW4oc2VsZik6CisgICAgICAgIHRlc3RvdXRkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3Rlc3RfYml0YmFrZWxheWVyc19mbGF0dGVuJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmlzZGlyKHRlc3RvdXRkaXIpLCBtc2cgPSAidGVzdF9iaXRiYWtlbGF5ZXJzX2ZsYXR0ZW4gc2hvdWxkIG5vdCBleGlzdCBhdCB0aGlzIHBvaW50IGluIHRpbWUiKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlc3RvdXRkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgZmxhdHRlbiAlcycgJSB0ZXN0b3V0ZGlyKQorICAgICAgICBiYl9maWxlID0gb3MucGF0aC5qb2luKHRlc3RvdXRkaXIsICdyZWNpcGVzLWdyYXBoaWNzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUveGN1cnNvci10cmFuc3BhcmVudC10aGVtZV8wLjEuMS5iYicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShiYl9maWxlKSwgbXNnID0gIkNhbm5vdCBmaW5kIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmIgaW4gdGhlIHRlc3RfYml0YmFrZWxheWVyc19mbGF0dGVuIGxvY2FsIGRpci4iKQorICAgICAgICBjb250ZW50cyA9IGZ0b29scy5yZWFkX2ZpbGUoYmJfZmlsZSkKKyAgICAgICAgZmluZF9pbl9jb250ZW50cyA9IHJlLnNlYXJjaCgiIyMjIyMgYmJhcHBlbmRlZCBmcm9tIG1ldGEtc2VsZnRlc3QgIyMjIyNcbiguKlxuKSppbmNsdWRlIHRlc3RfcmVjaXBlLmluYyIsIGNvbnRlbnRzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZF9pbl9jb250ZW50cywgbXNnID0gIkZsYXR0ZW5pbmcgbGF5ZXJzIGRpZCBub3Qgd29yay4gYml0YmFrZS1sYXllcnMgZmxhdHRlbiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE5NSkKKyAgICBkZWYgdGVzdF9iaXRiYWtlbGF5ZXJzX2FkZF9yZW1vdmUoc2VsZik6CisgICAgICAgIHRlc3RfbGF5ZXIgPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignQ09SRUJBU0UnKSwgJ21ldGEtc2tlbGV0b24nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbWV0YS1za2VsZXRvbicsIHJlc3VsdC5vdXRwdXQsICJUaGlzIHRlc3QgY2Fubm90IHJ1biB3aXRoIG1ldGEtc2tlbGV0b24gaW4gYmJsYXllcnMuY29uZi4gYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIGFkZC1sYXllciAlcycgJSB0ZXN0X2xheWVyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbWV0YS1za2VsZXRvbicsIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJTb21ldGhpbmcgd3JvbmcgaGFwcGVuZWQuIG1ldGEtc2tlbGV0b24gbGF5ZXIgd2FzIG5vdCBhZGRlZCB0byBjb25mL2JibGF5ZXJzLmNvbmYuICBiaXRiYWtlLWxheWVycyBzaG93LWxheWVycyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzJyAlIHRlc3RfbGF5ZXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtZXRhLXNrZWxldG9uJywgcmVzdWx0Lm91dHB1dCwgbXNnID0gIm1ldGEtc2tlbGV0b24gc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGF0IHRoaXMgc3RlcC4gIGJpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBhZGQtbGF5ZXIgJXMnICUgdGVzdF9sYXllcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWxheWVycycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ21ldGEtc2tlbGV0b24nLCByZXN1bHQub3V0cHV0LCBtc2cgPSAiU29tZXRoaW5nIHdyb25nIGhhcHBlbmVkLiBtZXRhLXNrZWxldG9uIGxheWVyIHdhcyBub3QgYWRkZWQgdG8gY29uZi9iYmxheWVycy5jb25mLiAgYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL21ldGEtc2tlbGV0b24nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbWV0YS1za2VsZXRvbicsIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJtZXRhLXNrZWxldG9uIHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBhdCB0aGlzIHN0ZXAuICBiaXRiYWtlLWxheWVycyBzaG93LWxheWVycyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmJ0ZXN0cy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYnRlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNjg2MGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmJ0ZXN0cy5weQpAQCAtMCwwICsxLDIwMSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKKworY2xhc3MgQml0YmFrZVRlc3RzKG9lU2VsZlRlc3QpOgorCisgICAgQHRlc3RjYXNlKDc4OSkKKyAgICBkZWYgdGVzdF9ydW5fYml0YmFrZV9mcm9tX2Rpcl8xKHNlbGYpOgorICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2NvbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaXRiYWtlKCctZScpLnN0YXR1cywgMCwgbXNnID0gImJpdGJha2UgY291bGRuJ3QgcnVuIGZyb20gXCJjb25mXCIgZGlyIikKKworICAgIEB0ZXN0Y2FzZSg3OTApCisgICAgZGVmIHRlc3RfcnVuX2JpdGJha2VfZnJvbV9kaXJfMihzZWxmKToKKyAgICAgICAgbXlfZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgbXlfZW52WydCQlBBVEgnXSA9IG15X2VudlsnQlVJTERESVInXQorICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmRpcm5hbWUob3MuZW52aXJvblsnQlVJTERESVInXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYml0YmFrZSgnLWUnLCBlbnY9bXlfZW52KS5zdGF0dXMsIDAsIG1zZyA9ICJiaXRiYWtlIGNvdWxkbid0IHJ1biBmcm9tIGJ1aWxkZGlyIikKKworICAgIEB0ZXN0Y2FzZSg4MDYpCisgICAgZGVmIHRlc3RfZXZlbnRfaGFuZGxlcihzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIklOSEVSSVQgKz0gXCJ0ZXN0X2V2ZW50c1wiIikKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnbTQtbmF0aXZlJykKKyAgICAgICAgZmluZF9idWlsZF9zdGFydGVkID0gcmUuc2VhcmNoKCJOT1RFOiBUZXN0IGZvciBiYlwuZXZlbnRcLkJ1aWxkU3RhcnRlZChcbi4qKSpOT1RFOiBQcmVwYXJpbmcgUnVuUXVldWUiLCByZXN1bHQub3V0cHV0KQorICAgICAgICBmaW5kX2J1aWxkX2NvbXBsZXRlZCA9IHJlLnNlYXJjaCgiVGFza3MgU3VtbWFyeTouKihcbi4qKSpOT1RFOiBUZXN0IGZvciBiYlwuZXZlbnRcLkJ1aWxkQ29tcGxldGVkIiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfYnVpbGRfc3RhcnRlZCwgbXNnID0gIk1hdGNoIGZhaWxlZCBpbjpcbiVzIiAgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZF9idWlsZF9jb21wbGV0ZWQsIG1zZyA9ICJNYXRjaCBmYWlsZWQgaW46XG4lcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdUZXN0IGZvciBiYi5ldmVudC5JbnZhbGlkRXZlbnQnIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJcIlRlc3QgZm9yIGJiLmV2ZW50LkludmFsaWRFdmVudFwiIG1lc3NhZ2UgZm91bmQgZHVyaW5nIGJpdGJha2UgcHJvY2Vzcy4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTAzKQorICAgIGRlZiB0ZXN0X2xvY2FsX3NzdGF0ZShzZWxmKToKKyAgICAgICAgYml0YmFrZSgnbTQtbmF0aXZlIC1jY2xlYW5zc3RhdGUnKQorICAgICAgICBiaXRiYWtlKCdtNC1uYXRpdmUnKQorICAgICAgICBiaXRiYWtlKCdtNC1uYXRpdmUgLWNjbGVhbicpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ200LW5hdGl2ZScpCisgICAgICAgIGZpbmRfc2V0c2NlbmUgPSByZS5zZWFyY2goIm00LW5hdGl2ZS4qZG9fLipfc2V0c2NlbmUiLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZF9zZXRzY2VuZSwgbXNnID0gIk5vIFwibTQtbmF0aXZlLipkb18uKl9zZXRzY2VuZVwiIG1lc3NhZ2UgZm91bmQgZHVyaW5nIGJpdGJha2UgbTQtbmF0aXZlLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCApCisKKyAgICBAdGVzdGNhc2UoMTA1KQorICAgIGRlZiB0ZXN0X2JpdGJha2VfaW52YWxpZF9yZWNpcGUoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJy1iIGFzZGYnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiRVJST1I6IFVuYWJsZSB0byBmaW5kIGFueSByZWNpcGUgZmlsZSBtYXRjaGluZyAnYXNkZiciIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJUaG91Z2ggYXNkZiByZWNpcGUgZG9lc24ndCBleGlzdCwgYml0YmFrZSBkaWRuJ3Qgb3V0cHV0IGFueSBlcnIuIG1lc3NhZ2UuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwNykKKyAgICBkZWYgdGVzdF9iaXRiYWtlX2ludmFsaWRfdGFyZ2V0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCdhc2RmJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIkVSUk9SOiBOb3RoaW5nIFBST1ZJREVTICdhc2RmJyIgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIlRob3VnaCBubyAnYXNkZicgdGFyZ2V0IGV4aXN0cywgYml0YmFrZSBkaWRuJ3Qgb3V0cHV0IGFueSBlcnIuIG1lc3NhZ2UuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwNikKKyAgICBkZWYgdGVzdF93YXJuaW5nc19lcnJvcnMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJy1iIGFzZGYnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIGZpbmRfd2FybmluZ3MgPSByZS5zZWFyY2goIlN1bW1hcnk6IFRoZXJlIHcuezIsM30/IFsxLTldWzAtOV0qIFdBUk5JTkcgbWVzc2FnZXMqIHNob3duIiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgZmluZF9lcnJvcnMgPSByZS5zZWFyY2goIlN1bW1hcnk6IFRoZXJlIHcuezIsM30/IFsxLTldWzAtOV0qIEVSUk9SIG1lc3NhZ2VzKiBzaG93biIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX3dhcm5pbmdzLCBtc2c9IkRpZCBub3QgZmluZCB0aGUgbXVtYmVyIG9mIHdhcm5pbmdzIGF0IHRoZSBlbmQgb2YgdGhlIGJ1aWxkOlxuIiArIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX2Vycm9ycywgbXNnPSJEaWQgbm90IGZpbmQgdGhlIG11bWJlciBvZiBlcnJvcnMgYXQgdGhlIGVuZCBvZiB0aGUgYnVpbGQ6XG4iICsgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMDgpCisgICAgZGVmIHRlc3RfaW52YWxpZF9wYXRjaChzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMoJ21hbicsICdTUkNfVVJJICs9ICJmaWxlOi8vbWFuLTEuNWgxLW1ha2UucGF0Y2giJykKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnbWFuIC1jIHBhdGNoJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmRlbGV0ZV9yZWNpcGVpbmMoJ21hbicpCisgICAgICAgIGJpdGJha2UoJy1jY2xlYW4gbWFuJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJFUlJPUjogRnVuY3Rpb24gZmFpbGVkOiBwYXRjaF9kb19wYXRjaCIgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIlRob3VnaCBubyBtYW4tMS41aDEtbWFrZS5wYXRjaCBmaWxlIGV4aXN0cywgYml0YmFrZSBkaWRuJ3Qgb3V0cHV0IGFueSBlcnIuIG1lc3NhZ2UuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDE2MykKKyAgICBkZWYgdGVzdF9mb3JjZV90YXNrKHNlbGYpOgorICAgICAgICBiaXRiYWtlKCdtNC1uYXRpdmUnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuIG00LW5hdGl2ZScpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJy1DIGNvbXBpbGUgbTQtbmF0aXZlJykKKyAgICAgICAgbG9va19mb3JfdGFza3MgPSBbJ2RvX2NvbXBpbGUnLCAnZG9faW5zdGFsbCcsICdkb19wb3B1bGF0ZV9zeXNyb290J10KKyAgICAgICAgZm9yIHRhc2sgaW4gbG9va19mb3JfdGFza3M6CisgICAgICAgICAgICBmaW5kX3Rhc2sgPSByZS5zZWFyY2goIm00LW5hdGl2ZS4qJXMiICUgdGFzaywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX3Rhc2ssIG1zZyA9ICJDb3VsZG4ndCBmaW5kICVzIHRhc2suIGJpdGJha2Ugb3V0cHV0ICVzIiAlICh0YXNrLCByZXN1bHQub3V0cHV0KSkKKworICAgIEB0ZXN0Y2FzZSgxNjcpCisgICAgZGVmIHRlc3RfYml0YmFrZV9nKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCctZyBjb3JlLWltYWdlLWZ1bGwtY21kbGluZScpCisgICAgICAgIGZvciBmIGluIFsncG4tYnVpbGRsaXN0JywgJ3BuLWRlcGVuZHMuZG90JywgJ3BhY2thZ2UtZGVwZW5kcy5kb3QnLCAndGFzay1kZXBlbmRzLmRvdCddOgorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLnJlbW92ZSwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdOT1RFOiBQTiBidWlsZCBsaXN0IHNhdmVkIHRvIFwncG4tYnVpbGRsaXN0XCcnIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJObyBkZXBlbmRlbmN5IFwicG4tYnVpbGRsaXN0XCIgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciB0aGUgZ2l2ZW4gdGFzayB0YXJnZXQuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ29wZW5zc2gnIGluIGZ0b29scy5yZWFkX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdwbi1idWlsZGxpc3QnKSksIG1zZyA9ICJObyBcIm9wZW5zc2hcIiBkZXBlbmRlbmN5IGZvdW5kIGluIHBuLWJ1aWxkbGlzdCBmaWxlLiIpCisKKyAgICBAdGVzdGNhc2UoODk5KQorICAgIGRlZiB0ZXN0X2ltYWdlX21hbmlmZXN0KHNlbGYpOgorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorICAgICAgICBkZXBsb3lkaXIgPSBnZXRfYmJfdmFyKCJERVBMT1lfRElSX0lNQUdFIiwgdGFyZ2V0PSJjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBpbWFnZW5hbWUgPSBnZXRfYmJfdmFyKCJJTUFHRV9MSU5LX05BTUUiLCB0YXJnZXQ9ImNvcmUtaW1hZ2UtbWluaW1hbCIpCisgICAgICAgIG1hbmlmZXN0ID0gb3MucGF0aC5qb2luKGRlcGxveWRpciwgaW1hZ2VuYW1lICsgIi5tYW5pZmVzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzbGluayhtYW5pZmVzdCksIG1zZz0iTm8gbWFuaWZlc3QgZmlsZSBjcmVhdGVkIGZvciBpbWFnZS4gSXQgc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVkIGluICVzIiAlIG1hbmlmZXN0KQorCisgICAgQHRlc3RjYXNlKDE2OCkKKyAgICBkZWYgdGVzdF9pbnZhbGlkX3JlY2lwZV9zcmNfdXJpKHNlbGYpOgorICAgICAgICBkYXRhID0gJ1NSQ19VUkkgPSAiZmlsZTovL2ludmFsaWQiJworICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygnbWFuJywgZGF0YSkKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiRExfRElSID0gXCIke1RPUERJUn0vZG93bmxvYWQtc2VsZnRlc3RcIgorU1NUQVRFX0RJUiA9IFwiJHtUT1BESVJ9L2Rvd25sb2FkLXNlbGZ0ZXN0XCIKKyIiIikKKyAgICAgICAgYml0YmFrZSgnLWNjbGVhbmFsbCBtYW4nKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCctYyBmZXRjaCBtYW4nLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIGJpdGJha2UoJy1jY2xlYW5hbGwgbWFuJykKKyAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKCdtYW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDEsIG1zZz0iQ29tbWFuZCBzdWNjZWRlZCB3aGVuIGl0IHNob3VsZCBoYXZlIGZhaWxlZC4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRmV0Y2hlciBmYWlsdXJlOiBVbmFibGUgdG8gZmluZCBmaWxlIGZpbGU6Ly9pbnZhbGlkIGFueXdoZXJlLiBUaGUgcGF0aHMgdGhhdCB3ZXJlIHNlYXJjaGVkIHdlcmU6JyBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiXCJpbnZhbGlkXCIgZmlsZSBcCitkb2Vzbid0IGV4aXN0LCB5ZXQgbm8gZXJyb3IgbWVzc2FnZSBlbmNvdW50ZXJlZC4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRVJST1I6IEZ1bmN0aW9uIGZhaWxlZDogRmV0Y2hlciBmYWlsdXJlIGZvciBVUkw6IFwnZmlsZTovL2ludmFsaWRcJy4gVW5hYmxlIHRvIGZldGNoIFVSTCBmcm9tIGFueSBzb3VyY2UuJyBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiXCJpbnZhbGlkXCIgZmlsZSBcCitkb2Vzbid0IGV4aXN0LCB5ZXQgZmV0Y2hlciBkaWRuJ3QgcmVwb3J0IGFueSBlcnJvci4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTcxKQorICAgIGRlZiB0ZXN0X3JlbmFtZV9kb3dubG9hZGVkX2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIkRMX0RJUiA9IFwiJHtUT1BESVJ9L2Rvd25sb2FkLXNlbGZ0ZXN0XCIKK1NTVEFURV9ESVIgPSBcIiR7VE9QRElSfS9kb3dubG9hZC1zZWxmdGVzdFwiCisiIiIpCisgICAgICAgIGRhdGEgPSAnU1JDX1VSSV9hcHBlbmQgPSAiO2Rvd25sb2FkZmlsZW5hbWU9dGVzdC1hc3BlbGwudGFyLmd6IicKKyAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMoJ2FzcGVsbCcsIGRhdGEpCisgICAgICAgIGJpdGJha2UoJy1jY2xlYW5hbGwgYXNwZWxsJykKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnLWMgZmV0Y2ggYXNwZWxsJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmRlbGV0ZV9yZWNpcGVpbmMoJ2FzcGVsbCcpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChiaXRiYWtlLCAnLWNjbGVhbmFsbCBhc3BlbGwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsIG1zZyA9ICJDb3VsZG4ndCBmZXRjaCBhc3BlbGwuICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcigiRExfRElSIiksICd0ZXN0LWFzcGVsbC50YXIuZ3onKSksIG1zZyA9ICJGaWxlIHJlbmFtZSBmYWlsZWQuIE5vIGNvcnJlc3BvbmRpbmcgdGVzdC1hc3BlbGwudGFyLmd6IGZpbGUgZm91bmQgdW5kZXIgJXMiICUgc3RyKGdldF9iYl92YXIoIkRMX0RJUiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJETF9ESVIiKSwgJ3Rlc3QtYXNwZWxsLnRhci5nei5kb25lJykpLCAiRmlsZSByZW5hbWUgZmFpbGVkLiBObyBjb3JyZXNwb25kaW5nIHRlc3QtYXNwZWxsLnRhci5nei5kb25lIGZpbGUgZm91bmQgdW5kZXIgJXMiICUgc3RyKGdldF9iYl92YXIoIkRMX0RJUiIpKSkKKworICAgIEB0ZXN0Y2FzZSgxMDI4KQorICAgIGRlZiB0ZXN0X2Vudmlyb25tZW50KHNlbGYpOgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoIlRFU1RfRU5WPVwibG9jYWxjb25mXCIiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5yZW1vdmVfY29uZmlnLCAiVEVTVF9FTlY9XCJsb2NhbGNvbmZcIiIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSAtZSB8IGdyZXAgVEVTVF9FTlY9JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdsb2NhbGNvbmYnIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJiaXRiYWtlIGRpZG4ndCByZXBvcnQgYW55IHZhbHVlIGZvciBURVNUX0VOViB2YXJpYWJsZS4gVG8gdGVzdCwgcnVuICdiaXRiYWtlIC1lIHwgZ3JlcCBURVNUX0VOVj0nIikKKworICAgIEB0ZXN0Y2FzZSgxMDI5KQorICAgIGRlZiB0ZXN0X2RyeV9ydW4oc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSAtbiBtNC1uYXRpdmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlc3VsdC5zdGF0dXMsICJiaXRiYWtlIGRyeSBydW4gZGlkbid0IHJ1biBhcyBleHBlY3RlZC4gJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMDMwKQorICAgIGRlZiB0ZXN0X2p1c3RfcGFyc2Uoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSAtcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cywgImVycm9ycyBlbmNvdW50ZXJlZCB3aGVuIHBhcnNpbmcgcmVjaXBlcy4gJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMDMxKQorICAgIGRlZiB0ZXN0X3ZlcnNpb24oc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSAtcyB8IGdyZXAgd2dldCcpCisgICAgICAgIGZpbmQgPSByZS5zZWFyY2goIndnZXQgKjooWzAtOWEtekEtWlwuXC1dKykiLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZCwgIk5vIHZlcnNpb24gcmV0dXJuZWQgZm9yIHNlYXJjaGVkIHJlY2lwZS4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTAzMikKKyAgICBkZWYgdGVzdF9wcmVmaWxlKHNlbGYpOgorICAgICAgICBwcmVjb25mID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdjb25mL3ByZWZpbGUuY29uZicpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAocHJlY29uZikKKyAgICAgICAgZnRvb2xzLndyaXRlX2ZpbGUocHJlY29uZiAsIlRFU1RfUFJFRklMRT1cInByZWZpbGVcIiIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSAtciBjb25mL3ByZWZpbGUuY29uZiAtZSB8IGdyZXAgVEVTVF9QUkVGSUxFPScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgncHJlZmlsZScgaW4gcmVzdWx0Lm91dHB1dCwgIlByZWNvbmZpZ3VyZSBmaWxlIFwicHJlZmlsZS5jb25mXCJ3YXMgbm90IHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gIikKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKCJURVNUX1BSRUZJTEU9XCJsb2NhbGNvbmZcIiIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLnJlbW92ZV9jb25maWcsICJURVNUX1BSRUZJTEU9XCJsb2NhbGNvbmZcIiIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSAtciBjb25mL3ByZWZpbGUuY29uZiAtZSB8IGdyZXAgVEVTVF9QUkVGSUxFPScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnbG9jYWxjb25mJyBpbiByZXN1bHQub3V0cHV0LCAiUHJlY29uZmlndXJlIGZpbGUgXCJwcmVmaWxlLmNvbmZcIndhcyBub3QgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiIpCisKKyAgICBAdGVzdGNhc2UoMTAzMykKKyAgICBkZWYgdGVzdF9wb3N0ZmlsZShzZWxmKToKKyAgICAgICAgcG9zdGNvbmYgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2NvbmYvcG9zdGZpbGUuY29uZicpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAocG9zdGNvbmYpCisgICAgICAgIGZ0b29scy53cml0ZV9maWxlKHBvc3Rjb25mICwgIlRFU1RfUE9TVEZJTEU9XCJwb3N0ZmlsZVwiIikKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKCJURVNUX1BPU1RGSUxFPVwibG9jYWxjb25mXCIiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5yZW1vdmVfY29uZmlnLCAiVEVTVF9QT1NURklMRT1cImxvY2FsY29uZlwiIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1SIGNvbmYvcG9zdGZpbGUuY29uZiAtZSB8IGdyZXAgVEVTVF9QT1NURklMRT0nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3Bvc3RmaWxlJyBpbiByZXN1bHQub3V0cHV0LCAiUG9zdGNvbmZpZ3VyZSBmaWxlIFwicG9zdGZpbGUuY29uZlwid2FzIG5vdCB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIikKKworICAgIEB0ZXN0Y2FzZSgxMDM0KQorICAgIGRlZiB0ZXN0X2NoZWNrdXJpKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgLWMgY2hlY2t1cmkgbTQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlc3VsdC5zdGF0dXMsIG1zZyA9ICJcImNoZWNrdXJpXCIgdGFzayB3YXMgbm90IGV4ZWN1dGVkLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMDM1KQorICAgIGRlZiB0ZXN0X2NvbnRpbnVlKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiJETF9ESVIgPSBcIiR7VE9QRElSfS9kb3dubG9hZC1zZWxmdGVzdFwiCitTU1RBVEVfRElSID0gXCIke1RPUERJUn0vZG93bmxvYWQtc2VsZnRlc3RcIgorIiIiKQorICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygnbWFuJywiXG5kb19mYWlsX3Rhc2sgKCkge1xuZXhpdCAxIFxufVxuXG5hZGR0YXNrIGRvX2ZhaWxfdGFzayBiZWZvcmUgZG9fZmV0Y2hcbiIgKQorICAgICAgICBydW5DbWQoJ2JpdGJha2UgLWMgY2xlYW5hbGwgbWFuIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgbWFuIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUgLWsnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIGVycm9ycG9zID0gcmVzdWx0Lm91dHB1dC5maW5kKCdFUlJPUjogRnVuY3Rpb24gZmFpbGVkOiBkb19mYWlsX3Rhc2snKQorICAgICAgICBtYW52ZXIgPSByZS5zZWFyY2goIk5PVEU6IHJlY2lwZSB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLSguKj8pOiB0YXNrIGRvX3VucGFjazogU3RhcnRlZCIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGNvbnRpbnVlcG9zID0gcmVzdWx0Lm91dHB1dC5maW5kKCdOT1RFOiByZWNpcGUgeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0lczogdGFzayBkb191bnBhY2s6IFN0YXJ0ZWQnICUgbWFudmVyLmdyb3VwKDEpKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoZXJyb3Jwb3MsY29udGludWVwb3MsIG1zZyA9ICJiaXRiYWtlIGRpZG4ndCBwYXNzIGRvX2ZhaWxfdGFzay4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTExOSkKKyAgICBkZWYgdGVzdF9ub25fZ3BsdjMoc2VsZik6CisgICAgICAgIGRhdGEgPSAnSU5DT01QQVRJQkxFX0xJQ0VOU0UgPSAiR1BMdjMiJworICAgICAgICBjb25mID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdjb25mL2xvY2FsLmNvbmYnKQorICAgICAgICBmdG9vbHMuYXBwZW5kX2ZpbGUoY29uZiAsZGF0YSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGZ0b29scy5yZW1vdmVfZnJvbV9maWxlLCBjb25mICxkYXRhKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCdyZWFkbGluZScsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCAiQml0YmFrZSBmYWlsZWQsIGV4aXQgY29kZSAlcywgb3V0cHV0ICVzIiAlIChyZXN1bHQuc3RhdHVzLCByZXN1bHQub3V0cHV0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3RtcC9kZXBsb3kvbGljZW5zZXMvcmVhZGxpbmUvZ2VuZXJpY19HUEx2MycpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAndG1wL2RlcGxveS9saWNlbnNlcy9yZWFkbGluZS9nZW5lcmljX0dQTHYyJykpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2J1aWxkaGlzdG9yeS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9idWlsZGhpc3RvcnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhjYWU0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9idWlsZGhpc3RvcnkucHkKQEAgLTAsMCArMSw0NSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IGRhdGV0aW1lCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IENvbW1hbmQsIHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgZ2V0X3Rlc3RfbGF5ZXIKKworCitjbGFzcyBCdWlsZGhpc3RvcnlCYXNlKG9lU2VsZlRlc3QpOgorCisgICAgZGVmIGNvbmZpZ19idWlsZGhpc3Rvcnkoc2VsZiwgdG1wX2JoX2xvY2F0aW9uPUZhbHNlKToKKyAgICAgICAgaWYgKG5vdCAnYnVpbGRoaXN0b3J5JyBpbiBnZXRfYmJfdmFyKCdVU0VSX0NMQVNTRVMnKSkgYW5kIChub3QgJ2J1aWxkaGlzdG9yeScgaW4gZ2V0X2JiX3ZhcignSU5IRVJJVCcpKToKKyAgICAgICAgICAgIGFkZF9idWlsZGhpc3RvcnlfY29uZmlnID0gJ0lOSEVSSVQgKz0gImJ1aWxkaGlzdG9yeSJcbkJVSUxESElTVE9SWV9DT01NSVQgPSAiMSInCisgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoYWRkX2J1aWxkaGlzdG9yeV9jb25maWcpCisKKyAgICAgICAgaWYgdG1wX2JoX2xvY2F0aW9uOgorICAgICAgICAgICAgIyBVc2luZyBhIHRlbXBvcmFyeSBidWlsZGhpc3RvcnkgbG9jYXRpb24gZm9yIHRlc3RpbmcKKyAgICAgICAgICAgIHRtcF9iaF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgInRtcF9idWlsZGhpc3RvcnlfJXMiICUgZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoJyVZJW0lZCVIJU0lUycpKQorICAgICAgICAgICAgYnVpbGRoaXN0b3J5X2Rpcl9jb25maWcgPSAiQlVJTERISVNUT1JZX0RJUiA9IFwiJXNcIiIgJSB0bXBfYmhfZGlyCisgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoYnVpbGRoaXN0b3J5X2Rpcl9jb25maWcpCisgICAgICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRtcF9iaF9kaXIpCisKKyAgICBkZWYgcnVuX2J1aWxkaGlzdG9yeV9vcGVyYXRpb24oc2VsZiwgdGFyZ2V0LCBnbG9iYWxfY29uZmlnPScnLCB0YXJnZXRfY29uZmlnPScnLCBjaGFuZ2VfYmhfbG9jYXRpb249RmFsc2UsIGV4cGVjdF9lcnJvcj1GYWxzZSwgZXJyb3JfcmVnZXg9JycpOgorICAgICAgICBpZiBjaGFuZ2VfYmhfbG9jYXRpb246CisgICAgICAgICAgICB0bXBfYmhfbG9jYXRpb24gPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0bXBfYmhfbG9jYXRpb24gPSBGYWxzZQorICAgICAgICBzZWxmLmNvbmZpZ19idWlsZGhpc3RvcnkodG1wX2JoX2xvY2F0aW9uKQorCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhnbG9iYWxfY29uZmlnKQorICAgICAgICBzZWxmLmFwcGVuZF9yZWNpcGVpbmModGFyZ2V0LCB0YXJnZXRfY29uZmlnKQorICAgICAgICBiaXRiYWtlKCItY2NsZWFuICVzIiAlIHRhcmdldCkKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSh0YXJnZXQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5yZW1vdmVfY29uZmlnKGdsb2JhbF9jb25maWcpCisgICAgICAgIHNlbGYucmVtb3ZlX3JlY2lwZWluYyh0YXJnZXQsIHRhcmdldF9jb25maWcpCisKKyAgICAgICAgaWYgZXhwZWN0X2Vycm9yOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAxLCBtc2c9IkVycm9yIGV4cGVjdGVkIGZvciBnbG9iYWwgY29uZmlnICclcycgYW5kIHRhcmdldCBjb25maWcgJyVzJyIgJSAoZ2xvYmFsX2NvbmZpZywgdGFyZ2V0X2NvbmZpZykpCisgICAgICAgICAgICBzZWFyY2hfZm9yX2Vycm9yID0gcmUuc2VhcmNoKGVycm9yX3JlZ2V4LCByZXN1bHQub3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlYXJjaF9mb3JfZXJyb3IsIG1zZz0iQ291bGQgbm90IGZpbmQgZGVzaXJlZCBlcnJvciBpbiBvdXRwdXQ6ICVzIiAlIGVycm9yX3JlZ2V4KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCBtc2c9IkNvbW1hbmQgJ2JpdGJha2UgJXMnIGhhcyBmYWlsZWQgdW5leHBlY3RlZGx5OiAlcyIgJSAodGFyZ2V0LCByZXN1bHQub3V0cHV0KSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9idWlsZG9wdGlvbnMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYnVpbGRvcHRpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MzgwM2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYnVpbGRvcHRpb25zLnB5CkBAIC0wLDAgKzEsMTQ5IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IGdsb2IgYXMgZworaW1wb3J0IHBleHBlY3QgYXMgcAorCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnNlbGZ0ZXN0LmJ1aWxkaGlzdG9yeSBpbXBvcnQgQnVpbGRoaXN0b3J5QmFzZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBJbWFnZU9wdGlvbnNUZXN0cyhvZVNlbGZUZXN0KToKKworICAgIEB0ZXN0Y2FzZSg3NjEpCisgICAgZGVmIHRlc3RfaW5jcmVtZW50YWxfaW1hZ2VfZ2VuZXJhdGlvbihzZWxmKToKKyAgICAgICAgaW1hZ2VfcGtndHlwZSA9IGdldF9iYl92YXIoIklNQUdFX1BLR1RZUEUiKQorICAgICAgICBpZiBpbWFnZV9wa2d0eXBlICE9ICdycG0nOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnTm90IHVzaW5nIFJQTSBhcyBtYWluIHBhY2thZ2UgZm9ybWF0JykKKyAgICAgICAgYml0YmFrZSgiLWMgY2xlYW5hbGwgY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoJ0lOQ19SUE1fSU1BR0VfR0VOID0gIjEiJykKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKCdJTUFHRV9GRUFUVVJFUyArPSAic3NoLXNlcnZlci1vcGVuc3NoIicpCisgICAgICAgIGJpdGJha2UoImNvcmUtaW1hZ2UtbWluaW1hbCIpCisgICAgICAgIGxvZ19kYXRhX2ZpbGUgPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcigiV09SS0RJUiIsICJjb3JlLWltYWdlLW1pbmltYWwiKSwgInRlbXAvbG9nLmRvX3Jvb3RmcyIpCisgICAgICAgIGxvZ19kYXRhX2NyZWF0ZWQgPSBmdG9vbHMucmVhZF9maWxlKGxvZ19kYXRhX2ZpbGUpCisgICAgICAgIGluY3JlbWVudGFsX2NyZWF0ZWQgPSByZS5zZWFyY2goIk5PVEU6IGxvYWQgb2xkIGluc3RhbGwgc29sdXRpb24gZm9yIGluY3JlbWVudGFsIGluc3RhbGxcbk5PVEU6IG9sZCBpbnN0YWxsIHNvbHV0aW9uIG5vdCBleGlzdFxuTk9URTogY3JlYXRpbmcgbmV3IGluc3RhbGwgc29sdXRpb24gZm9yIGluY3JlbWVudGFsIGluc3RhbGwoXG4uKikqTk9URTogSW5zdGFsbGluZyB0aGUgZm9sbG93aW5nIHBhY2thZ2VzOi4qcGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2giLCBsb2dfZGF0YV9jcmVhdGVkKQorICAgICAgICBzZWxmLnJlbW92ZV9jb25maWcoJ0lNQUdFX0ZFQVRVUkVTICs9ICJzc2gtc2VydmVyLW9wZW5zc2giJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluY3JlbWVudGFsX2NyZWF0ZWQsIG1zZyA9ICJNYXRjaCBmYWlsZWQgaW46XG4lcyIgJSBsb2dfZGF0YV9jcmVhdGVkKQorICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBsb2dfZGF0YV9yZW1vdmVkID0gZnRvb2xzLnJlYWRfZmlsZShsb2dfZGF0YV9maWxlKQorICAgICAgICBpbmNyZW1lbnRhbF9yZW1vdmVkID0gcmUuc2VhcmNoKCJOT1RFOiBsb2FkIG9sZCBpbnN0YWxsIHNvbHV0aW9uIGZvciBpbmNyZW1lbnRhbCBpbnN0YWxsXG5OT1RFOiBjcmVhdGluZyBuZXcgaW5zdGFsbCBzb2x1dGlvbiBmb3IgaW5jcmVtZW50YWwgaW5zdGFsbChcbi4qKSpOT1RFOiBpbmNyZW1lbnRhbCByZW1vdmVkOi4qb3BlbnNzaC1zc2hkLS4qIiwgbG9nX2RhdGFfcmVtb3ZlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluY3JlbWVudGFsX3JlbW92ZWQsIG1zZyA9ICJNYXRjaCBmYWlsZWQgaW46XG4lcyIgJSBsb2dfZGF0YV9yZW1vdmVkKQorCisgICAgQHRlc3RjYXNlKDkyNSkKKyAgICBkZWYgdGVzdF9ybV9vbGRfaW1hZ2Uoc2VsZik6CisgICAgICAgIGJpdGJha2UoImNvcmUtaW1hZ2UtbWluaW1hbCIpCisgICAgICAgIGRlcGxveWRpciA9IGdldF9iYl92YXIoIkRFUExPWV9ESVJfSU1BR0UiLCB0YXJnZXQ9ImNvcmUtaW1hZ2UtbWluaW1hbCIpCisgICAgICAgIGltYWdlbmFtZSA9IGdldF9iYl92YXIoIklNQUdFX0xJTktfTkFNRSIsIHRhcmdldD0iY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgZGVwbG95ZGlyX2ZpbGVzID0gb3MubGlzdGRpcihkZXBsb3lkaXIpCisgICAgICAgIHRyYWNrX29yaWdpbmFsX2ZpbGVzID0gW10KKyAgICAgICAgZm9yIGltYWdlX2ZpbGUgaW4gZGVwbG95ZGlyX2ZpbGVzOgorICAgICAgICAgICAgaWYgaW1hZ2VuYW1lIGluIGltYWdlX2ZpbGUgYW5kIG9zLnBhdGguaXNsaW5rKG9zLnBhdGguam9pbihkZXBsb3lkaXIsIGltYWdlX2ZpbGUpKToKKyAgICAgICAgICAgICAgICB0cmFja19vcmlnaW5hbF9maWxlcy5hcHBlbmQob3MucGF0aC5yZWFscGF0aChvcy5wYXRoLmpvaW4oZGVwbG95ZGlyLCBpbWFnZV9maWxlKSkpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygiUk1fT0xEX0lNQUdFID0gXCIxXCIiKQorICAgICAgICBiaXRiYWtlKCItQyByb290ZnMgY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgZGVwbG95ZGlyX2ZpbGVzID0gb3MubGlzdGRpcihkZXBsb3lkaXIpCisgICAgICAgIHJlbWFpbmluZ19ub3RfZXhwZWN0ZWQgPSBbcGF0aCBmb3IgcGF0aCBpbiB0cmFja19vcmlnaW5hbF9maWxlcyBpZiBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpIGluIGRlcGxveWRpcl9maWxlc10KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZW1haW5pbmdfbm90X2V4cGVjdGVkLCBtc2c9IlxuVGhlIGZvbGxvd2luZyBpbWFnZSBmaWxlcyB3ZXJlIG5vdCByZW1vdmVkOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgcmVtYWluaW5nX25vdF9leHBlY3RlZCkpKQorCisgICAgQHRlc3RjYXNlKDI4NikKKyAgICBkZWYgdGVzdF9jY2FjaGVfdG9vbChzZWxmKToKKyAgICAgICAgYml0YmFrZSgiY2NhY2hlLW5hdGl2ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignU1RBR0lOR19CSU5ESVJfTkFUSVZFJywgJ2NjYWNoZS1uYXRpdmUnKSwgImNjYWNoZSIpKSwgbXNnID0gIk5vIGNjYWNoZSBmb3VuZCB1bmRlciAlcyIgJSBzdHIoZ2V0X2JiX3ZhcignU1RBR0lOR19CSU5ESVJfTkFUSVZFJywgJ2NjYWNoZS1uYXRpdmUnKSkpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCdJTkhFUklUICs9ICJjY2FjaGUiJykKKyAgICAgICAgYml0YmFrZSgibTQgLWMgY2xlYW5zc3RhdGUiKQorICAgICAgICBiaXRiYWtlKCJtNCAtYyBjb21waWxlIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGJpdGJha2UsICdjY2FjaGUtbmF0aXZlIC1jY2xlYW5zc3RhdGUnKQorICAgICAgICByZXMgPSBydW5DbWQoImdyZXAgY2NhY2hlICVzIiAlIChvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcigiV09SS0RJUiIsIm00IiksInRlbXAvbG9nLmRvX2NvbXBpbGUiKSksIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXMuc3RhdHVzLCBtc2c9Ik5vIG1hdGNoIGZvciBjY2FjaGUgaW4gbTQgbG9nLmRvX2NvbXBpbGUuIEZvciBmdXJ0aGVyIGRldGFpbHM6ICVzIiAlIG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJXT1JLRElSIiwibTQiKSwidGVtcC9sb2cuZG9fY29tcGlsZSIpKQorCisKK2NsYXNzIERpc2tNb25UZXN0KG9lU2VsZlRlc3QpOgorCisgICAgQHRlc3RjYXNlKDI3NykKKyAgICBkZWYgdGVzdF9zdG9wdGFza19iZWhhdmlvcihzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoJ0JCX0RJU0tNT05fRElSUyA9ICJTVE9QVEFTS1MsJHtUTVBESVJ9LDEwMDAwMEcsMTAwSyInKQorICAgICAgICByZXMgPSBiaXRiYWtlKCJtNCIsIGlnbm9yZV9zdGF0dXMgPSBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0VSUk9SOiBObyBuZXcgdGFza3MgY2FuIGJlIGV4ZWN1dGVkIHNpbmNlIHRoZSBkaXNrIHNwYWNlIG1vbml0b3IgYWN0aW9uIGlzICJTVE9QVEFTS1MiIScgaW4gcmVzLm91dHB1dCwgbXNnID0gIlRhc2tzIHNob3VsZCBoYXZlIHN0b3BwZWQuIERpc2sgbW9uaXRvciBpcyBzZXQgdG8gU1RPUFRBU0s6ICVzIiAlIHJlcy5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMSwgbXNnID0gImJpdGJha2UgcmVwb3J0ZWQgZXhpdCBjb2RlICVzLiBJdCBzaG91bGQgaGF2ZSBiZWVuIDEuIEJpdGJha2Ugb3V0cHV0OiAlcyIgJSAoc3RyKHJlcy5zdGF0dXMpLCByZXMub3V0cHV0KSkKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoJ0JCX0RJU0tNT05fRElSUyA9ICJBQk9SVCwke1RNUERJUn0sMTAwMDAwRywxMDBLIicpCisgICAgICAgIHJlcyA9IGJpdGJha2UoIm00IiwgaWdub3JlX3N0YXR1cyA9IFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRVJST1I6IEltbWVkaWF0ZWx5IGFib3J0IHNpbmNlIHRoZSBkaXNrIHNwYWNlIG1vbml0b3IgYWN0aW9uIGlzICJBQk9SVCIhJyBpbiByZXMub3V0cHV0LCAiVGFza3Mgc2hvdWxkIGhhdmUgYmVlbiBhYm9ydGVkIGltbWVkaWF0ZWxseS4gRGlzayBtb25pdG9yIGlzIHNldCB0byBBQk9SVDogJXMiICUgcmVzLm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCAxLCBtc2cgPSAiYml0YmFrZSByZXBvcnRlZCBleGl0IGNvZGUgJXMuIEl0IHNob3VsZCBoYXZlIGJlZW4gMS4gQml0YmFrZSBvdXRwdXQ6ICVzIiAlIChzdHIocmVzLnN0YXR1cyksIHJlcy5vdXRwdXQpKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnQkJfRElTS01PTl9ESVJTID0gIldBUk4sJHtUTVBESVJ9LDEwMDAwMEcsMTAwSyInKQorICAgICAgICByZXMgPSBiaXRiYWtlKCJtNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnV0FSTklORzogVGhlIGZyZWUgc3BhY2UnIGluIHJlcy5vdXRwdXQsIG1zZyA9ICJBIHdhcm5pbmcgc2hvdWxkIGhhdmUgYmVlbiBkaXNwbGF5ZWQgZm9yIGRpc2sgbW9uaXRvciBpcyBzZXQgdG8gV0FSTjogJXMiICVyZXMub3V0cHV0KQorCitjbGFzcyBTYW5pdHlPcHRpb25zVGVzdChvZVNlbGZUZXN0KToKKworICAgIEB0ZXN0Y2FzZSg5MjcpCisgICAgZGVmIHRlc3Rfb3B0aW9uc193YXJucWFfZXJyb3JxYV9zd2l0Y2goc2VsZik6CisgICAgICAgIGJpdGJha2UoInhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUgLWNjbGVhbnNzdGF0ZSIpCisKKyAgICAgICAgaWYgInBhY2thZ2VzLWxpc3QiIG5vdCBpbiBnZXRfYmJfdmFyKCJFUlJPUl9RQSIpOgorICAgICAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIkVSUk9SX1FBX2FwcGVuZCA9IFwiIHBhY2thZ2VzLWxpc3RcIiIpCisKKyAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAnUEFDS0FHRVMgKz0gXCIke1BOfS1kYmdcIicpCisgICAgICAgIHJlcyA9IGJpdGJha2UoInhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUiLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuZGVsZXRlX3JlY2lwZWluYygneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiRVJST1I6IFFBIElzc3VlOiB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLWRiZyBpcyBsaXN0ZWQgaW4gUEFDS0FHRVMgbXVsdGlwbGUgdGltZXMsIHRoaXMgbGVhZHMgdG8gcGFja2FnaW5nIGVycm9ycy4iIGluIHJlcy5vdXRwdXQsIG1zZz1yZXMub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDEsIG1zZyA9ICJiaXRiYWtlIHJlcG9ydGVkIGV4aXQgY29kZSAlcy4gSXQgc2hvdWxkIGhhdmUgYmVlbiAxLiBCaXRiYWtlIG91dHB1dDogJXMiICUgKHN0cihyZXMuc3RhdHVzKSwgcmVzLm91dHB1dCkpCisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJywgJ1BBQ0tBR0VTICs9IFwiJHtQTn0tZGJnXCInKQorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoJ0VSUk9SX1FBX3JlbW92ZSA9ICJwYWNrYWdlcy1saXN0IicpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygnV0FSTl9RQV9hcHBlbmQgPSAiIHBhY2thZ2VzLWxpc3QiJykKKyAgICAgICAgYml0YmFrZSgieGN1cnNvci10cmFuc3BhcmVudC10aGVtZSAtY2NsZWFuc3N0YXRlIikKKyAgICAgICAgcmVzID0gYml0YmFrZSgieGN1cnNvci10cmFuc3BhcmVudC10aGVtZSIpCisgICAgICAgIHNlbGYuZGVsZXRlX3JlY2lwZWluYygneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiV0FSTklORzogUUEgSXNzdWU6IHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtZGJnIGlzIGxpc3RlZCBpbiBQQUNLQUdFUyBtdWx0aXBsZSB0aW1lcywgdGhpcyBsZWFkcyB0byBwYWNrYWdpbmcgZXJyb3JzLiIgaW4gcmVzLm91dHB1dCwgbXNnPXJlcy5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMjc4KQorICAgIGRlZiB0ZXN0X3Nhbml0eV91c2Vyc3BhY2VfZGVwZW5kZW5jeShzZWxmKToKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKCdXQVJOX1FBX2FwcGVuZCA9ICIgdW5zYWZlLXJlZmVyZW5jZXMtaW4tYmluYXJpZXMgdW5zYWZlLXJlZmVyZW5jZXMtaW4tc2NyaXB0cyInKQorICAgICAgICBiaXRiYWtlKCItY2NsZWFuc3N0YXRlIGd6aXAgbmZzLXV0aWxzIikKKyAgICAgICAgcmVzID0gYml0YmFrZSgiZ3ppcCBuZnMtdXRpbHMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIldBUk5JTkc6IFFBIElzc3VlOiBnemlwIiBpbiByZXMub3V0cHV0LCAiV0FSTklORzogUUEgSXNzdWU6IGd6aXAgbWVzc2FnZSBpcyBub3QgcHJlc2VudCBpbiBiaXRiYWtlJ3Mgb3V0cHV0OiAlcyIgJSByZXMub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIldBUk5JTkc6IFFBIElzc3VlOiBuZnMtdXRpbHMiIGluIHJlcy5vdXRwdXQsICJXQVJOSU5HOiBRQSBJc3N1ZTogbmZzLXV0aWxzIG1lc3NhZ2UgaXMgbm90IHByZXNlbnQgaW4gYml0YmFrZSdzIG91dHB1dDogJXMiICUgcmVzLm91dHB1dCkKKworY2xhc3MgQnVpbGRoaXN0b3J5VGVzdHMoQnVpbGRoaXN0b3J5QmFzZSk6CisKKyAgICBAdGVzdGNhc2UoMjkzKQorICAgIGRlZiB0ZXN0X2J1aWxkaGlzdG9yeV9iYXNpYyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fYnVpbGRoaXN0b3J5X29wZXJhdGlvbigneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKGdldF9iYl92YXIoJ0JVSUxESElTVE9SWV9ESVInKSksICJidWlsZGhpc3RvcnkgZGlyIHdhcyBub3QgY3JlYXRlZC4iKQorCisgICAgQHRlc3RjYXNlKDI5NCkKKyAgICBkZWYgdGVzdF9idWlsZGhpc3RvcnlfYnVpbGR0aW1lX3ByX2JhY2t3YXJkcyhzZWxmKToKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignY2xlYW51cC13b3JrZGlyJykKKyAgICAgICAgdGFyZ2V0ID0gJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnCisgICAgICAgIGVycm9yID0gIkVSUk9SOiBRQSBJc3N1ZTogUGFja2FnZSB2ZXJzaW9uIGZvciBwYWNrYWdlICVzIHdlbnQgYmFja3dhcmRzIHdoaWNoIHdvdWxkIGJyZWFrIHBhY2thZ2UgZmVlZHMgZnJvbSAoLiotcjEgdG8gLiotcjApIiAlIHRhcmdldAorICAgICAgICBzZWxmLnJ1bl9idWlsZGhpc3Rvcnlfb3BlcmF0aW9uKHRhcmdldCwgdGFyZ2V0X2NvbmZpZz0iUFIgPSBcInIxXCIiLCBjaGFuZ2VfYmhfbG9jYXRpb249VHJ1ZSkKKyAgICAgICAgc2VsZi5ydW5fYnVpbGRoaXN0b3J5X29wZXJhdGlvbih0YXJnZXQsIHRhcmdldF9jb25maWc9IlBSID0gXCJyMFwiIiwgY2hhbmdlX2JoX2xvY2F0aW9uPUZhbHNlLCBleHBlY3RfZXJyb3I9VHJ1ZSwgZXJyb3JfcmVnZXg9ZXJyb3IpCisKK2NsYXNzIEJ1aWxkSW1hZ2VzVGVzdChvZVNlbGZUZXN0KToKKyAgICBAdGVzdGNhc2UoNTYzKQorICAgIGRlZiB0ZXN0X2RpcmVjdGZiKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZCB0byB0ZXN0IHRoZSBidWlsZCBvZiBkaXJlY3RmYiBpbWFnZSBmb3IgYXJtIGFyY2guCisgICAgICAgIEluIGVzc2VuY2Ugd2UgYnVpbGQgYSBjb3JlaW1hZ2VkaXJlY3RmYiBhbmQgdGVzdCB0aGUgZXhpdGNvZGUgb2YgYml0YmFrZSB0aGF0IGluIGNhc2Ugb2Ygc3VjY2VzcyBpcyAwLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignY2xlYW51cHdvcmtkaXInKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiRElTVFJPX0ZFQVRVUkVTX3JlbW92ZSA9IFwieDExXCJcbkRJU1RST19GRUFUVVJFU19hcHBlbmQgPSBcIiBkaXJlY3RmYlwiXG5NQUNISU5FID8/PSBcInFlbXVhcm1cIiIpCisgICAgICAgIHJlcyA9IGJpdGJha2UoImNvcmUtaW1hZ2UtZGlyZWN0ZmIiLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMCwgIlxuY29yZWltYWdlZGlyZWN0ZmIgZmFpbGVkIHRvIGJ1aWxkLiBQbGVhc2UgY2hlY2sgbG9ncyBmb3IgZnVydGhlciBkZXRhaWxzLlxuYml0YmFrZSBvdXRwdXQgJXMiICUgcmVzLm91dHB1dCkKKworY2xhc3MgQXJjaGl2ZXJUZXN0KG9lU2VsZlRlc3QpOgorICAgIEB0ZXN0Y2FzZSg5MjYpCisgICAgZGVmIHRlc3RfYXJjaF93b3JrX2Rpcl9hbmRfZXhwb3J0X3NvdXJjZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgZm9yIGFyY2hpdmluZyB0aGUgd29yayBkaXJlY3RvcnkgYW5kIGV4cG9ydGluZyB0aGUgc291cmNlIGZpbGVzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignY2xlYW51cHdvcmtkaXInKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiSU5IRVJJVCA9IFwiYXJjaGl2ZXJcIlxuQVJDSElWRVJfTU9ERVtzcmNdID0gXCJvcmlnaW5hbFwiXG5BUkNISVZFUl9NT0RFW3NycG1dID0gXCIxXCIiKQorICAgICAgICByZXMgPSBiaXRiYWtlKCJ4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lIiwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDAsICJcbkNvdWxkbid0IGJ1aWxkIHhjdXJzb3J0cmFuc3BhcmVudHRoZW1lLlxuYml0YmFrZSBvdXRwdXQgJXMiICUgcmVzLm91dHB1dCkKKyAgICAgICAgcGtnc19wYXRoID0gZy5nbG9iKHN0cihzZWxmLmJ1aWxkZGlyKSArICIvdG1wL2RlcGxveS9zb3VyY2VzL2FsbGFyY2gqL3hjdXJzKiIpCisgICAgICAgIHNyY19maWxlX2dsb2IgPSBzdHIocGtnc19wYXRoWzBdKSArICIveGN1cnNvciouc3JjLnJwbSIKKyAgICAgICAgdGFyX2ZpbGVfZ2xvYiA9IHN0cihwa2dzX3BhdGhbMF0pICsgIi94Y3Vyc29yKi50YXIuZ3oiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoZy5nbG9iKHNyY19maWxlX2dsb2IpIGFuZCBnLmdsb2IodGFyX2ZpbGVfZ2xvYikpLCAiQ291bGRuJ3QgZmluZCAuc3JjLnJwbSBhbmQgLnRhci5neiBmaWxlcyB1bmRlciB0bXAvZGVwbG95L3NvdXJjZXMvYWxsYXJjaCoveGN1cnNvcioiKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2RldnRvb2wucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvZGV2dG9vbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTczMWQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2RldnRvb2wucHkKQEAgLTAsMCArMSw5NzEgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBnbG9iCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgY3JlYXRlX3RlbXBfbGF5ZXIsIHJ1bnFlbXUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBEZXZ0b29sQmFzZShvZVNlbGZUZXN0KToKKworICAgIGRlZiBfdGVzdF9yZWNpcGVfY29udGVudHMoc2VsZiwgcmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBjaGVja2luaGVyaXRzKToKKyAgICAgICAgd2l0aCBvcGVuKHJlY2lwZWZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgaWYgJz0nIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUuc3BsaXQoJz0nLCAxKQorICAgICAgICAgICAgICAgICAgICB2YXIgPSBzcGxpdGxpbmVbMF0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzcGxpdGxpbmVbMV0uc3RyaXAoKS5zdHJpcCgnIicpCisgICAgICAgICAgICAgICAgICAgIGlmIHZhciBpbiBjaGVja3ZhcnM6CisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkdmFsdWUgPSBjaGVja3ZhcnMucG9wKHZhcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIG5lZWR2YWx1ZSwgJ3ZhbHVlcyBmb3IgJXMgZG8gbm90IG1hdGNoJyAlIHZhcikKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ2luaGVyaXQgJyk6CisgICAgICAgICAgICAgICAgICAgIGluaGVyaXRzID0gbGluZS5zcGxpdCgpWzE6XQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hlY2t2YXJzLCB7fSwgJ1NvbWUgdmFyaWFibGVzIG5vdCBmb3VuZDogJXMnICUgY2hlY2t2YXJzKQorCisgICAgICAgIGZvciBpbmhlcml0IGluIGNoZWNraW5oZXJpdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGluaGVyaXQsIGluaGVyaXRzLCAnTWlzc2luZyBpbmhlcml0IG9mICVzJyAlIGluaGVyaXQpCisKKyAgICBkZWYgX2NoZWNrX2JiYXBwZW5kKHNlbGYsIHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIGFwcGVuZGRpcik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1hcHBlbmRzJywgY3dkPXNlbGYuYnVpbGRkaXIpCisgICAgICAgIHJlc3VsdGxpbmVzID0gcmVzdWx0Lm91dHB1dC5zcGxpdGxpbmVzKCkKKyAgICAgICAgaW5yZWNpcGUgPSBGYWxzZQorICAgICAgICBiYmFwcGVuZHMgPSBbXQorICAgICAgICBiYmFwcGVuZGZpbGUgPSBOb25lCisgICAgICAgIGZvciBsaW5lIGluIHJlc3VsdGxpbmVzOgorICAgICAgICAgICAgaWYgaW5yZWNpcGU6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcgJyk6CisgICAgICAgICAgICAgICAgICAgIGJiYXBwZW5kcy5hcHBlbmQobGluZS5zdHJpcCgpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIGxpbmUgPT0gJyVzOicgJSBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpOgorICAgICAgICAgICAgICAgIGlucmVjaXBlID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChsZW4oYmJhcHBlbmRzKSwgMiwgJyVzIHJlY2lwZSBpcyBiZWluZyBiYmFwcGVuZGVkIGJ5IGFub3RoZXIgbGF5ZXIgLSBiYmFwcGVuZHMgZm91bmQ6XG4gICVzJyAlICh0ZXN0cmVjaXBlLCAnXG4gICcuam9pbihiYmFwcGVuZHMpKSkKKyAgICAgICAgZm9yIGJiYXBwZW5kIGluIGJiYXBwZW5kczoKKyAgICAgICAgICAgIGlmIGJiYXBwZW5kLnN0YXJ0c3dpdGgoYXBwZW5kZGlyKToKKyAgICAgICAgICAgICAgICBiYmFwcGVuZGZpbGUgPSBiYmFwcGVuZAorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2JiYXBwZW5kIGZvciByZWNpcGUgJXMgZG9lcyBub3Qgc2VlbSB0byBiZSBjcmVhdGVkIGluIHRlc3QgbGF5ZXInICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmV0dXJuIGJiYXBwZW5kZmlsZQorCisgICAgZGVmIF9jcmVhdGVfdGVtcF9sYXllcihzZWxmLCB0ZW1wbGF5ZXJkaXIsIGFkZGxheWVyLCB0ZW1wbGF5ZXJuYW1lLCBwcmlvcml0eT05OTksIHJlY2lwZXBhdGhzcGVjPSdyZWNpcGVzLSovKicpOgorICAgICAgICBjcmVhdGVfdGVtcF9sYXllcih0ZW1wbGF5ZXJkaXIsIHRlbXBsYXllcm5hbWUsIHByaW9yaXR5LCByZWNpcGVwYXRoc3BlYykKKyAgICAgICAgaWYgYWRkbGF5ZXI6CisgICAgICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgJXMgfHwgdHJ1ZScgJSB0ZW1wbGF5ZXJkaXIpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIGFkZC1sYXllciAlcycgJSB0ZW1wbGF5ZXJkaXIsIGN3ZD1zZWxmLmJ1aWxkZGlyKQorCisgICAgZGVmIF9wcm9jZXNzX2xzX291dHB1dChzZWxmLCBvdXRwdXQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29udmVydCBscyAtbCBvdXRwdXQgdG8gYSBmb3JtYXQgd2UgY2FuIHJlYXNvbmFibHkgY29tcGFyZSBmcm9tIG9uZSBjb250ZXh0CisgICAgICAgIHRvIGFub3RoZXIgKGUuZy4gZnJvbSBob3N0IHRvIHRhcmdldCkKKyAgICAgICAgIiIiCisgICAgICAgIGZpbGVsaXN0ID0gW10KKyAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgIyBSZW1vdmUgdHJhaWxpbmcgLiBvbiBwZXJtcworICAgICAgICAgICAgc3BsaXRsaW5lWzBdID0gc3BsaXRsaW5lWzBdLnJzdHJpcCgnLicpCisgICAgICAgICAgICAjIFJlbW92ZSBsZWFkaW5nIC4gb24gcGF0aHMKKyAgICAgICAgICAgIHNwbGl0bGluZVstMV0gPSBzcGxpdGxpbmVbLTFdLmxzdHJpcCgnLicpCisgICAgICAgICAgICAjIERyb3AgZmllbGRzIHdlIGRvbid0IHdhbnQgdG8gY29tcGFyZQorICAgICAgICAgICAgZGVsIHNwbGl0bGluZVs3XQorICAgICAgICAgICAgZGVsIHNwbGl0bGluZVs2XQorICAgICAgICAgICAgZGVsIHNwbGl0bGluZVs1XQorICAgICAgICAgICAgZGVsIHNwbGl0bGluZVs0XQorICAgICAgICAgICAgZGVsIHNwbGl0bGluZVsxXQorICAgICAgICAgICAgZmlsZWxpc3QuYXBwZW5kKCcgJy5qb2luKHNwbGl0bGluZSkpCisgICAgICAgIHJldHVybiBmaWxlbGlzdAorCisKK2NsYXNzIERldnRvb2xUZXN0cyhEZXZ0b29sQmFzZSk6CisKKyAgICBAdGVzdGNhc2UoMTE1OCkKKyAgICBkZWYgdGVzdF9jcmVhdGVfd29ya3NwYWNlKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWxheWVycycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnL3dvcmtzcGFjZScgbm90IGluIHJlc3VsdC5vdXRwdXQsICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGxheWVyIGluIGJibGF5ZXJzLmNvbmYnKQorICAgICAgICAjIFRyeSBjcmVhdGluZyBhIHdvcmtzcGFjZSBsYXllciB3aXRoIGEgc3BlY2lmaWMgcGF0aAorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGNyZWF0ZS13b3Jrc3BhY2UgJXMnICUgdGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCBtc2cgPSAiTm8gd29ya3NwYWNlIGNyZWF0ZWQuIGRldnRvb2wgb3V0cHV0OiAlcyAiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWxheWVycycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVtcGRpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBUcnkgY3JlYXRpbmcgYSB3b3Jrc3BhY2UgbGF5ZXIgd2l0aCB0aGUgZGVmYXVsdCBwYXRoCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgY3JlYXRlLXdvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCBtc2cgPSAiTm8gd29ya3NwYWNlIGNyZWF0ZWQuIGRldnRvb2wgb3V0cHV0OiAlcyAiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWxheWVycycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odGVtcGRpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih3b3Jrc3BhY2VkaXIsIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE1OSkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2FkZChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgRmV0Y2ggc291cmNlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICB1cmwgPSAnaHR0cDovL3d3dy5pdmFyY2guY29tL3Byb2dyYW1zL3NvdXJjZXMvcHYtMS41LjMudGFyLmJ6MicKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCd3Z2V0ICVzJyAlIHVybCwgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgndGFyIHhmdiBwdi0xLjUuMy50YXIuYnoyJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNyY2RpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAncHYtMS41LjMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNyY2RpciwgJ2NvbmZpZ3VyZScpKSwgJ1VuYWJsZSB0byBmaW5kIGNvbmZpZ3VyZSBzY3JpcHQgaW4gc291cmNlIGRpcmVjdG9yeScpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGFkZAorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbnNzdGF0ZSBwdicpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgcHYgJXMnICUgc3JjZGlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKSwgJ1dvcmtzcGFjZSBkaXJlY3Rvcnkgbm90IGNyZWF0ZWQnKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3B2JywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2xlYW4gdXAgYW55dGhpbmcgaW4gdGhlIHdvcmtkaXIvc3lzcm9vdC9zc3RhdGUgY2FjaGUgKGhhdmUgdG8gZG8gdGhpcyAqYWZ0ZXIqIGRldnRvb2wgYWRkIHNpbmNlIHRoZSByZWNpcGUgb25seSBleGlzdHMgdGhlbikKKyAgICAgICAgYml0YmFrZSgncHYgLWMgY2xlYW5zc3RhdGUnKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBidWlsZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQgcHYnKQorICAgICAgICBpbnN0YWxsZGlyID0gZ2V0X2JiX3ZhcignRCcsICdwdicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnN0YWxsZGlyLCAnQ291bGQgbm90IHF1ZXJ5IGluc3RhbGxkaXIgdmFyaWFibGUnKQorICAgICAgICBiaW5kaXIgPSBnZXRfYmJfdmFyKCdiaW5kaXInLCAncHYnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmluZGlyLCAnQ291bGQgbm90IHF1ZXJ5IGJpbmRpciB2YXJpYWJsZScpCisgICAgICAgIGlmIGJpbmRpclswXSA9PSAnLyc6CisgICAgICAgICAgICBiaW5kaXIgPSBiaW5kaXJbMTpdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oaW5zdGFsbGRpciwgYmluZGlyLCAncHYnKSksICdwdiBiaW5hcnkgbm90IGZvdW5kIGluIEQnKQorCisgICAgQHRlc3RjYXNlKDExNjIpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9hZGRfbGlicmFyeShzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgV2UgZG9uJ3QgaGF2ZSB0aGUgYWJpbGl0eSB0byBwaWNrIHVwIHRoaXMgZGVwZW5kZW5jeSBhdXRvbWF0aWNhbGx5IHlldC4uLgorICAgICAgICBiaXRiYWtlKCdsaWJ1c2IxJykKKyAgICAgICAgIyBGZXRjaCBzb3VyY2UKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHVybCA9ICdodHRwOi8vd3d3LmludHJhMm5ldC5jb20vZW4vZGV2ZWxvcGVyL2xpYmZ0ZGkvZG93bmxvYWQvbGliZnRkaTEtMS4xLnRhci5iejInCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnd2dldCAlcycgJSB1cmwsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3RhciB4ZnYgbGliZnRkaTEtMS4xLnRhci5iejInLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdsaWJmdGRpMS0xLjEnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNyY2RpciwgJ0NNYWtlTGlzdHMudHh0JykpLCAnVW5hYmxlIHRvIGZpbmQgQ01ha2VMaXN0cy50eHQgaW4gc291cmNlIGRpcmVjdG9yeScpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGFkZCAoYW5kIHVzZSAtViBzbyB3ZSB0ZXN0IHRoYXQgdG9vKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGFkZCBsaWJmdGRpICVzIC1WIDEuMScgJSBzcmNkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZCcpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliZnRkaScsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3JjZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENsZWFuIHVwIGFueXRoaW5nIGluIHRoZSB3b3JrZGlyL3N5c3Jvb3Qvc3N0YXRlIGNhY2hlIChoYXZlIHRvIGRvIHRoaXMgKmFmdGVyKiBkZXZ0b29sIGFkZCBzaW5jZSB0aGUgcmVjaXBlIG9ubHkgZXhpc3RzIHRoZW4pCisgICAgICAgIGJpdGJha2UoJ2xpYmZ0ZGkgLWMgY2xlYW5zc3RhdGUnKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBidWlsZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQgbGliZnRkaScpCisgICAgICAgIHN0YWdpbmdfbGliZGlyID0gZ2V0X2JiX3ZhcignU1RBR0lOR19MSUJESVInLCAnbGliZnRkaScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFnaW5nX2xpYmRpciwgJ0NvdWxkIG5vdCBxdWVyeSBTVEFHSU5HX0xJQkRJUiB2YXJpYWJsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3RhZ2luZ19saWJkaXIsICdsaWJmdGRpMS5zby4yLjEuMCcpKSwgImxpYmZ0ZGkgYmluYXJ5IG5vdCBmb3VuZCBpbiBTVEFHSU5HX0xJQkRJUi4gT3V0cHV0IG9mIGRldnRvb2wgYnVpbGQgbGliZnRkaSAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAjIFRlc3QgZGV2dG9vbCByZXNldAorICAgICAgICBzdGFtcHByZWZpeCA9IGdldF9iYl92YXIoJ1NUQU1QJywgJ2xpYmZ0ZGknKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgbGliZnRkaScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdsaWJmdGRpJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YW1wcHJlZml4LCAnVW5hYmxlIHRvIGdldCBTVEFNUCB2YWx1ZSBmb3IgcmVjaXBlIGxpYmZ0ZGknKQorICAgICAgICBtYXRjaGVzID0gZ2xvYi5nbG9iKHN0YW1wcHJlZml4ICsgJyonKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1hdGNoZXMsICdTdGFtcCBmaWxlcyBleGlzdCBmb3IgcmVjaXBlIGxpYmZ0ZGkgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGNsZWFuZWQnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzdGFnaW5nX2xpYmRpciwgJ2xpYmZ0ZGkxLnNvLjIuMS4wJykpLCAnbGliZnRkaSBiaW5hcnkgc3RpbGwgZm91bmQgaW4gU1RBR0lOR19MSUJESVIgYWZ0ZXIgY2xlYW5pbmcnKQorCisgICAgQHRlc3RjYXNlKDExNjApCisgICAgZGVmIHRlc3RfZGV2dG9vbF9hZGRfZmV0Y2goc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICAjIEZldGNoIHNvdXJjZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgdGVzdHZlciA9ICcwLjIzJworICAgICAgICB1cmwgPSAnaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL00vTWFya3VwU2FmZS9NYXJrdXBTYWZlLSVzLnRhci5neicgJSB0ZXN0dmVyCisgICAgICAgIHRlc3RyZWNpcGUgPSAncHl0aG9uLW1hcmt1cHNhZmUnCisgICAgICAgIHNyY2RpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCB0ZXN0cmVjaXBlKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBhZGQKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW5zc3RhdGUgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGFkZCAlcyAlcyAtZiAlcycgJSAodGVzdHJlY2lwZSwgc3JjZGlyLCB1cmwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKSwgJ1dvcmtzcGFjZSBkaXJlY3Rvcnkgbm90IGNyZWF0ZWQuICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3JjZGlyLCAnc2V0dXAucHknKSksICdVbmFibGUgdG8gZmluZCBzZXR1cC5weSBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3JjZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHJlY2lwZQorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJyVzLmJiJyAlIHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsICdSZWNpcGUgZmlsZSBpbmNvcnJlY3RseSBuYW1lZCcpCisgICAgICAgIGNoZWNrdmFycyA9IHt9CisgICAgICAgIGNoZWNrdmFyc1snUyddID0gJyR7V09SS0RJUn0vTWFya3VwU2FmZS0lcycgJSB0ZXN0dmVyCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gdXJsCisgICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHJlY2lwZWZpbGUsIGNoZWNrdmFycywgW10pCisgICAgICAgICMgVHJ5IHdpdGggdmVyc2lvbiBzcGVjaWZpZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlc2V0IC1uICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHNodXRpbC5ybXRyZWUoc3JjZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkICVzICVzIC1mICVzIC1WICVzJyAlICh0ZXN0cmVjaXBlLCBzcmNkaXIsIHVybCwgdGVzdHZlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3JjZGlyLCAnc2V0dXAucHknKSksICdVbmFibGUgdG8gZmluZCBzZXR1cC5weSBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3JjZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHJlY2lwZQorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJyVzXyVzLmJiJyAlICh0ZXN0cmVjaXBlLCB0ZXN0dmVyKSwgcmVjaXBlZmlsZSwgJ1JlY2lwZSBmaWxlIGluY29ycmVjdGx5IG5hbWVkJykKKyAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgY2hlY2t2YXJzWydTJ10gPSAnJHtXT1JLRElSfS9NYXJrdXBTYWZlLSR7UFZ9JworICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9IHVybC5yZXBsYWNlKHRlc3R2ZXIsICcke1BWfScpCisgICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHJlY2lwZWZpbGUsIGNoZWNrdmFycywgW10pCisKKyAgICBAdGVzdGNhc2UoMTE2MSkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2FkZF9mZXRjaF9naXQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICAjIEZldGNoIHNvdXJjZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgdXJsID0gJ2dpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpYm1hdGNoYm94JworICAgICAgICBjaGVja3JldiA9ICc0NjJmMDY1MjA1NWQ4OWM2NDhkZGQ1NGZkN2IwM2YxNzVjMmM2OTczJworICAgICAgICB0ZXN0cmVjaXBlID0gJ2xpYm1hdGNoYm94MicKKyAgICAgICAgc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsIHRlc3RyZWNpcGUpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGFkZAorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbnNzdGF0ZSAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkICVzICVzIC1mICVzJyAlICh0ZXN0cmVjaXBlLCBzcmNkaXIsIHVybCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZDogJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdjb25maWd1cmUuYWMnKSksICdVbmFibGUgdG8gZmluZCBjb25maWd1cmUuYWMgaW4gc291cmNlIGRpcmVjdG9yeScpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0cmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHNyY2RpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayByZWNpcGUKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydEluKCdfZ2l0LmJiJywgcmVjaXBlZmlsZSwgJ1JlY2lwZSBmaWxlIGluY29ycmVjdGx5IG5hbWVkJykKKyAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgY2hlY2t2YXJzWydTJ10gPSAnJHtXT1JLRElSfS9naXQnCisgICAgICAgIGNoZWNrdmFyc1snUFYnXSA9ICcxLjArZ2l0JHtTUkNQVn0nCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gdXJsCisgICAgICAgIGNoZWNrdmFyc1snU1JDUkVWJ10gPSAnJHtBVVRPUkVWfScKKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKKyAgICAgICAgIyBUcnkgd2l0aCByZXZpc2lvbiBhbmQgdmVyc2lvbiBzcGVjaWZpZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlc2V0IC1uICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHNodXRpbC5ybXRyZWUoc3JjZGlyKQorICAgICAgICB1cmxfcmV2ID0gJyVzO3Jldj0lcycgJSAodXJsLCBjaGVja3JldikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGFkZCAlcyAlcyAtZiAiJXMiIC1WIDEuNScgJSAodGVzdHJlY2lwZSwgc3JjZGlyLCB1cmxfcmV2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdjb25maWd1cmUuYWMnKSksICdVbmFibGUgdG8gZmluZCBjb25maWd1cmUuYWMgaW4gc291cmNlIGRpcmVjdG9yeScpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0cmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHNyY2RpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayByZWNpcGUKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydEluKCdfZ2l0LmJiJywgcmVjaXBlZmlsZSwgJ1JlY2lwZSBmaWxlIGluY29ycmVjdGx5IG5hbWVkJykKKyAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgY2hlY2t2YXJzWydTJ10gPSAnJHtXT1JLRElSfS9naXQnCisgICAgICAgIGNoZWNrdmFyc1snUFYnXSA9ICcxLjUrZ2l0JHtTUkNQVn0nCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gdXJsCisgICAgICAgIGNoZWNrdmFyc1snU1JDUkVWJ10gPSBjaGVja3JldgorICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQorCisgICAgQHRlc3RjYXNlKDExNjQpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9tb2RpZnkoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICAjIENsZWFuIHVwIGFueXRoaW5nIGluIHRoZSB3b3JrZGlyL3N5c3Jvb3Qvc3N0YXRlIGNhY2hlCisgICAgICAgIGJpdGJha2UoJ21kYWRtIC1jIGNsZWFuc3N0YXRlJykKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIGEgcmVjaXBlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiBtZGFkbScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgbWRhZG0gLXggJXMnICUgdGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnTWFrZWZpbGUnKSksICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnLmdpdCcpKSwgJ2dpdCByZXBvc2l0b3J5IGZvciBleHRlcm5hbCBzb3VyY2UgdHJlZSBub3QgZm91bmQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKSwgJ1dvcmtzcGFjZSBkaXJlY3Rvcnkgbm90IGNyZWF0ZWQnKQorICAgICAgICBtYXRjaGVzID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdhcHBlbmRzJywgJ21kYWRtXyouYmJhcHBlbmQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoZXMsICdiYmFwcGVuZCBub3QgY3JlYXRlZCAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ21kYWRtJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIGdpdCByZXBvCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICdDcmVhdGVkIGdpdCByZXBvIGlzIG5vdCBjbGVhbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN5bWJvbGljLXJlZiBIRUFEJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAicmVmcy9oZWFkcy9kZXZ0b29sIiwgJ1dyb25nIGJyYW5jaCBpbiBnaXQgcmVwbycpCisgICAgICAgICMgVHJ5IGJ1aWxkaW5nCisgICAgICAgIGJpdGJha2UoJ21kYWRtJykKKyAgICAgICAgIyBUcnkgbWFraW5nIChtaW5vcikgbW9kaWZpY2F0aW9ucyB0byB0aGUgc291cmNlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgic2VkIC1pICdzIV5cLlRILiohLlRIIE1EQURNIDggXCJcIiB2OS45OTktY3VzdG9tIScgJXMiICUgb3MucGF0aC5qb2luKHRlbXBkaXIsICdtZGFkbS44LmluJykpCisgICAgICAgIGJpdGJha2UoJ21kYWRtIC1jIHBhY2thZ2UnKQorICAgICAgICBwa2dkID0gZ2V0X2JiX3ZhcignUEtHRCcsICdtZGFkbScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwa2dkLCAnQ291bGQgbm90IHF1ZXJ5IFBLR0QgdmFyaWFibGUnKQorICAgICAgICBtYW5kaXIgPSBnZXRfYmJfdmFyKCdtYW5kaXInLCAnbWRhZG0nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWFuZGlyLCAnQ291bGQgbm90IHF1ZXJ5IG1hbmRpciB2YXJpYWJsZScpCisgICAgICAgIGlmIG1hbmRpclswXSA9PSAnLyc6CisgICAgICAgICAgICBtYW5kaXIgPSBtYW5kaXJbMTpdCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocGtnZCwgbWFuZGlyLCAnbWFuOCcsICdtZGFkbS44JyksICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcuVEgnKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLnJzdHJpcCgpLCAnLlRIIE1EQURNIDggIiIgdjkuOTk5LWN1c3RvbScsICdtYW4gZmlsZSBub3QgbW9kaWZpZWQuIG1hbiBzZWFyY2hlZCBmaWxlIHBhdGg6ICVzJyAlIG9zLnBhdGguam9pbihwa2dkLCBtYW5kaXIsICdtYW44JywgJ21kYWRtLjgnKSkKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgcmVzZXQKKyAgICAgICAgc3RhbXBwcmVmaXggPSBnZXRfYmJfdmFyKCdTVEFNUCcsICdtZGFkbScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCBtZGFkbScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtZGFkbScsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFtcHByZWZpeCwgJ1VuYWJsZSB0byBnZXQgU1RBTVAgdmFsdWUgZm9yIHJlY2lwZSBtZGFkbScpCisgICAgICAgIG1hdGNoZXMgPSBnbG9iLmdsb2Ioc3RhbXBwcmVmaXggKyAnKicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0Y2hlcywgJ1N0YW1wIGZpbGVzIGV4aXN0IGZvciByZWNpcGUgbWRhZG0gdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGNsZWFuZWQnKQorCisgICAgQHRlc3RjYXNlKDExNjYpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9tb2RpZnlfaW52YWxpZChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgVHJ5IG1vZGlmeWluZyBzb21lIHJlY2lwZXMKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorCisgICAgICAgIHRlc3RyZWNpcGVzID0gJ3BlcmYga2VybmVsLWRldnNyYyBwYWNrYWdlLWluZGV4IGNvcmUtaW1hZ2UtbWluaW1hbCBtZXRhLXRvb2xjaGFpbiBwYWNrYWdlZ3JvdXAtY29yZS1zZGsgbWV0YS1pZGUtc3VwcG9ydCcuc3BsaXQoKQorICAgICAgICAjIEZpbmQgYWN0dWFsIG5hbWUgb2YgZ2NjLXNvdXJjZSBzaW5jZSBpdCBub3cgaW5jbHVkZXMgdGhlIHZlcnNpb24gLSBjcnVkZSwgYnV0IGdvb2QgZW5vdWdoIGZvciB0aGlzIHB1cnBvc2UKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LXJlY2lwZXMgZ2NjLXNvdXJjZSonKQorICAgICAgICByZWFkaW5nID0gRmFsc2UKKyAgICAgICAgZm9yIGxpbmUgaW4gcmVzdWx0Lm91dHB1dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJz09Jyk6CisgICAgICAgICAgICAgICAgcmVhZGluZyA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgcmVhZGluZyBhbmQgbm90IGxpbmUuc3RhcnRzd2l0aCgnICcpOgorICAgICAgICAgICAgICAgIHRlc3RyZWNpcGVzLmFwcGVuZChsaW5lLnNwbGl0KCc6JylbMF0pCisgICAgICAgIGZvciB0ZXN0cmVjaXBlIGluIHRlc3RyZWNpcGVzOgorICAgICAgICAgICAgIyBDaGVjayBpdCdzIGEgdmFsaWQgcmVjaXBlCisgICAgICAgICAgICBiaXRiYWtlKCclcyAtZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICAgICAgIyBkZXZ0b29sIGV4dHJhY3Qgc2hvdWxkIGZhaWwKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBleHRyYWN0ICVzICVzJyAlICh0ZXN0cmVjaXBlLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkpLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICdkZXZ0b29sIGV4dHJhY3Qgb24gJXMgc2hvdWxkIGhhdmUgZmFpbGVkLiBkZXZ0b29sIG91dHB1dDogJXMnICUgKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignRmV0Y2hpbmcgJywgcmVzdWx0Lm91dHB1dCwgJ2RldnRvb2wgZXh0cmFjdCBvbiAlcyBzaG91bGQgaGF2ZSBlcnJvcmVkIG91dCBiZWZvcmUgdHJ5aW5nIHRvIGZldGNoJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdFUlJPUjogJywgcmVzdWx0Lm91dHB1dCwgJ2RldnRvb2wgZXh0cmFjdCBvbiAlcyBzaG91bGQgaGF2ZSBnaXZlbiBhbiBFUlJPUicgJSB0ZXN0cmVjaXBlKQorICAgICAgICAgICAgIyBkZXZ0b29sIG1vZGlmeSBzaG91bGQgZmFpbAorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgb3MucGF0aC5qb2luKHRlbXBkaXIsIHRlc3RyZWNpcGUpKSwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCAnZGV2dG9vbCBtb2RpZnkgb24gJXMgc2hvdWxkIGhhdmUgZmFpbGVkLiBkZXZ0b29sIG91dHB1dDogJXMnICUgICh0ZXN0cmVjaXBlLCByZXN1bHQub3V0cHV0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0VSUk9SOiAnLCByZXN1bHQub3V0cHV0LCAnZGV2dG9vbCBtb2RpZnkgb24gJXMgc2hvdWxkIGhhdmUgZ2l2ZW4gYW4gRVJST1InICUgdGVzdHJlY2lwZSkKKworICAgIGRlZiB0ZXN0X2RldnRvb2xfbW9kaWZ5X25hdGl2ZShzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgVHJ5IG1vZGlmeWluZyBzb21lIHJlY2lwZXMKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorCisgICAgICAgIGJiY2xhc3NleHRlbmRlZCA9IEZhbHNlCisgICAgICAgIGluaGVyaXRuYXRpdmUgPSBGYWxzZQorICAgICAgICB0ZXN0cmVjaXBlcyA9ICdtdG9vbHMtbmF0aXZlIGFwdC1uYXRpdmUgZGVza3RvcC1maWxlLXV0aWxzLW5hdGl2ZScuc3BsaXQoKQorICAgICAgICBmb3IgdGVzdHJlY2lwZSBpbiB0ZXN0cmVjaXBlczoKKyAgICAgICAgICAgIGNoZWNrZXh0ZW5kID0gJ25hdGl2ZScgaW4gKGdldF9iYl92YXIoJ0JCQ0xBU1NFWFRFTkQnLCB0ZXN0cmVjaXBlKSBvciAnJykuc3BsaXQoKQorICAgICAgICAgICAgaWYgbm90IGJiY2xhc3NleHRlbmRlZDoKKyAgICAgICAgICAgICAgICBiYmNsYXNzZXh0ZW5kZWQgPSBjaGVja2V4dGVuZAorICAgICAgICAgICAgaWYgbm90IGluaGVyaXRuYXRpdmU6CisgICAgICAgICAgICAgICAgaW5oZXJpdG5hdGl2ZSA9IG5vdCBjaGVja2V4dGVuZAorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgb3MucGF0aC5qb2luKHRlbXBkaXIsIHRlc3RyZWNpcGUpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0VSUk9SOiAnLCByZXN1bHQub3V0cHV0LCAnRVJST1IgaW4gZGV2dG9vbCBtb2RpZnkgb3V0cHV0OiAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdFUlJPUjogJywgcmVzdWx0Lm91dHB1dCwgJ0VSUk9SIGluIGRldnRvb2wgYnVpbGQgb3V0cHV0OiAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlc2V0ICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdFUlJPUjogJywgcmVzdWx0Lm91dHB1dCwgJ0VSUk9SIGluIGRldnRvb2wgcmVzZXQgb3V0cHV0OiAlcycgJSByZXN1bHQub3V0cHV0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYmNsYXNzZXh0ZW5kZWQsICdOb25lIG9mIHRoZXNlIHJlY2lwZXMgYXJlIEJCQ0xBU1NFWFRFTkRlZCB0byBuYXRpdmUgLSBuZWVkIHRvIGFkanVzdCB0ZXN0cmVjaXBlcyBsaXN0OiAlcycgJSAnLCAnLmpvaW4odGVzdHJlY2lwZXMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5oZXJpdG5hdGl2ZSwgJ05vbmUgb2YgdGhlc2UgcmVjaXBlcyBkbyAiaW5oZXJpdCBuYXRpdmUiIC0gbmVlZCB0byBhZGp1c3QgdGVzdHJlY2lwZXMgbGlzdDogJXMnICUgJywgJy5qb2luKHRlc3RyZWNpcGVzKSkKKworCisgICAgQHRlc3RjYXNlKDExNjUpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9tb2RpZnlfZ2l0KHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdta2VsZmltYWdlJworICAgICAgICBzcmNfdXJpID0gZ2V0X2JiX3ZhcignU1JDX1VSSScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2dpdDovLycsIHNyY191cmksICdUaGlzIHRlc3QgZXhwZWN0cyB0aGUgJXMgcmVjaXBlIHRvIGJlIGEgZ2l0IHJlY2lwZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIENsZWFuIHVwIGFueXRoaW5nIGluIHRoZSB3b3JrZGlyL3N5c3Jvb3Qvc3N0YXRlIGNhY2hlCisgICAgICAgIGJpdGJha2UoJyVzIC1jIGNsZWFuc3N0YXRlJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgVHJ5IG1vZGlmeWluZyBhIHJlY2lwZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGRpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4odGVtcGRpciwgJ01ha2VmaWxlJykpLCAnRXh0cmFjdGVkIHNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4odGVtcGRpciwgJy5naXQnKSksICdnaXQgcmVwb3NpdG9yeSBmb3IgZXh0ZXJuYWwgc291cmNlIHRyZWUgbm90IGZvdW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkLiBkZXZ0b29sIG91dHB1dDogJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgbWF0Y2hlcyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnYXBwZW5kcycsICdta2VsZmltYWdlXyouYmJhcHBlbmQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoZXMsICdiYmFwcGVuZCBub3QgY3JlYXRlZCcpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0cmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJ0NyZWF0ZWQgZ2l0IHJlcG8gaXMgbm90IGNsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3ltYm9saWMtcmVmIEhFQUQnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICJyZWZzL2hlYWRzL2RldnRvb2wiLCAnV3JvbmcgYnJhbmNoIGluIGdpdCByZXBvJykKKyAgICAgICAgIyBUcnkgYnVpbGRpbmcKKyAgICAgICAgYml0YmFrZSh0ZXN0cmVjaXBlKQorCisgICAgQHRlc3RjYXNlKDExNjcpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9tb2RpZnlfbG9jYWxmaWxlcyhzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbGlnaHR0cGQnCisgICAgICAgIHNyY191cmkgPSAoZ2V0X2JiX3ZhcignU1JDX1VSSScsIHRlc3RyZWNpcGUpIG9yICcnKS5zcGxpdCgpCisgICAgICAgIGZvdW5kbG9jYWwgPSBGYWxzZQorICAgICAgICBmb3IgaXRlbSBpbiBzcmNfdXJpOgorICAgICAgICAgICAgaWYgaXRlbS5zdGFydHN3aXRoKCdmaWxlOi8vJykgYW5kICcucGF0Y2gnIG5vdCBpbiBpdGVtOgorICAgICAgICAgICAgICAgIGZvdW5kbG9jYWwgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kbG9jYWwsICdUaGlzIHRlc3QgZXhwZWN0cyB0aGUgJXMgcmVjaXBlIHRvIGZldGNoIGxvY2FsIGZpbGVzIGFuZCBpdCBzZWVtcyB0aGF0IGl0IG5vIGxvbmdlciBkb2VzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgQ2xlYW4gdXAgYW55dGhpbmcgaW4gdGhlIHdvcmtkaXIvc3lzcm9vdC9zc3RhdGUgY2FjaGUKKyAgICAgICAgYml0YmFrZSgnJXMgLWMgY2xlYW5zc3RhdGUnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIGEgcmVjaXBlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnY29uZmlndXJlLmFjJykpLCAnRXh0cmFjdGVkIHNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKSwgJ1dvcmtzcGFjZSBkaXJlY3Rvcnkgbm90IGNyZWF0ZWQnKQorICAgICAgICBtYXRjaGVzID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdhcHBlbmRzJywgJyVzXyouYmJhcHBlbmQnICUgdGVzdHJlY2lwZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaGVzLCAnYmJhcHBlbmQgbm90IGNyZWF0ZWQnKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIFRyeSBidWlsZGluZworICAgICAgICBiaXRiYWtlKHRlc3RyZWNpcGUpCisKKyAgICBAdGVzdGNhc2UoMTE2OSkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX3VwZGF0ZV9yZWNpcGUoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICB0ZXN0cmVjaXBlID0gJ21pbmljb20nCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc3JjX3VyaSA9IGdldF9iYl92YXIoJ1NSQ19VUkknLCB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdnaXQ6Ly8nLCBzcmNfdXJpLCAnVGhpcyB0ZXN0IGV4cGVjdHMgdGhlICVzIHJlY2lwZSB0byBOT1QgYmUgYSBnaXQgcmVjaXBlJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnJXMgcmVjaXBlIGlzIG5vdCBjbGVhbicgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIEZpcnN0LCBtb2RpZnkgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICAjIChkb24ndCBib3RoZXIgd2l0aCBjbGVhbmluZyB0aGUgcmVjaXBlIG9uIHRlYXJkb3duLCB3ZSB3b24ndCBiZSBidWlsZGluZyBpdCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGRpcikpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHRlbXBkaXIsICcuZ2l0JykpLCAnZ2l0IHJlcG9zaXRvcnkgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlIG5vdCBmb3VuZCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICdDcmVhdGVkIGdpdCByZXBvIGlzIG5vdCBjbGVhbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN5bWJvbGljLXJlZiBIRUFEJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAicmVmcy9oZWFkcy9kZXZ0b29sIiwgJ1dyb25nIGJyYW5jaCBpbiBnaXQgcmVwbycpCisgICAgICAgICMgQWRkIGEgY291cGxlIG9mIGNvbW1pdHMKKyAgICAgICAgIyBGSVhNRTogdGhpcyBvbmx5IHRlc3RzIGFkZGluZywgbmVlZCB0byBhbHNvIHRlc3QgdXBkYXRlIGFuZCByZW1vdmUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdlY2hvICJBZGRpdGlvbmFsIGxpbmUiID4+IFJFQURNRScsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLWEgLW0gIkNoYW5nZSB0aGUgUkVBRE1FIicsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2VjaG8gIkEgbmV3IGZpbGUiID4gZGV2dG9vbC1uZXctZmlsZScsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBhZGQgZGV2dG9vbC1uZXctZmlsZScsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLW0gIkFkZCBhIG5ldyBmaWxlIicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjZCAlczsgcm0gJXMvKi5wYXRjaDsgZ2l0IGNoZWNrb3V0ICVzICVzJyAlIChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRlc3RyZWNpcGUsIHRlc3RyZWNpcGUsIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLiAtLXBvcmNlbGFpbicsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJyVzIHJlY2lwZSBzaG91bGQgYmUgbW9kaWZpZWQnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc3RhdHVzID0gcmVzdWx0Lm91dHB1dC5zcGxpdGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3RhdHVzKSwgMywgJ0xlc3MvbW9yZSBmaWxlcyBtb2RpZmllZCB0aGFuIGV4cGVjdGVkLiBFbnRpcmUgc3RhdHVzOlxuJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgZm9yIGxpbmUgaW4gc3RhdHVzOgorICAgICAgICAgICAgaWYgbGluZS5lbmRzd2l0aCgnMDAwMS1DaGFuZ2UtdGhlLVJFQURNRS5wYXRjaCcpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZVs6M10sICc/PyAnLCAnVW5leHBlY3RlZCBzdGF0dXMgaW4gbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgICAgIGVsaWYgbGluZS5lbmRzd2l0aCgnMDAwMi1BZGQtYS1uZXctZmlsZS5wYXRjaCcpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZVs6M10sICc/PyAnLCAnVW5leHBlY3RlZCBzdGF0dXMgaW4gbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgICAgIGVsaWYgcmUuc2VhcmNoKCclc19bXl9dKi5iYiQnICUgdGVzdHJlY2lwZSwgbGluZSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lWzozXSwgJyBNICcsICdVbmV4cGVjdGVkIHN0YXR1cyBpbiBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignVW5leHBlY3RlZCBtb2RpZmllZCBmaWxlIGluIHN0YXR1czogJXMnICUgbGluZSkKKworICAgIEB0ZXN0Y2FzZSgxMTcyKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBkYXRlX3JlY2lwZV9naXQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICB0ZXN0cmVjaXBlID0gJ210ZC11dGlscycKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBzcmNfdXJpID0gZ2V0X2JiX3ZhcignU1JDX1VSSScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2dpdDovLycsIHNyY191cmksICdUaGlzIHRlc3QgZXhwZWN0cyB0aGUgJXMgcmVjaXBlIHRvIGJlIGEgZ2l0IHJlY2lwZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICBwYXRjaGVzID0gW10KKyAgICAgICAgZm9yIGVudHJ5IGluIHNyY191cmkuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGVudHJ5LnN0YXJ0c3dpdGgoJ2ZpbGU6Ly8nKSBhbmQgZW50cnkuZW5kc3dpdGgoJy5wYXRjaCcpOgorICAgICAgICAgICAgICAgIHBhdGNoZXMuYXBwZW5kKGVudHJ5Wzc6XS5zcGxpdCgnOycpWzBdKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKHBhdGNoZXMpLCAwLCAnVGhlICVzIHJlY2lwZSBkb2VzIG5vdCBhcHBlYXIgdG8gY29udGFpbiBhbnkgcGF0Y2hlcywgc28gdGhpcyB0ZXN0IHdpbGwgbm90IGJlIGVmZmVjdGl2ZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLiAtLXBvcmNlbGFpbicsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJyVzIHJlY2lwZSBpcyBub3QgY2xlYW4nICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBGaXJzdCwgbW9kaWZ5IGEgcmVjaXBlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgIyAoZG9uJ3QgYm90aGVyIHdpdGggY2xlYW5pbmcgdGhlIHJlY2lwZSBvbiB0ZWFyZG93biwgd2Ugd29uJ3QgYmUgYnVpbGRpbmcgaXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBkaXIpKQorICAgICAgICAjIENoZWNrIGdpdCByZXBvCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnLmdpdCcpKSwgJ2dpdCByZXBvc2l0b3J5IGZvciBleHRlcm5hbCBzb3VyY2UgdHJlZSBub3QgZm91bmQnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4nLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnQ3JlYXRlZCBnaXQgcmVwbyBpcyBub3QgY2xlYW4nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzeW1ib2xpYy1yZWYgSEVBRCcsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgInJlZnMvaGVhZHMvZGV2dG9vbCIsICdXcm9uZyBicmFuY2ggaW4gZ2l0IHJlcG8nKQorICAgICAgICAjIEFkZCBhIGNvdXBsZSBvZiBjb21taXRzCisgICAgICAgICMgRklYTUU6IHRoaXMgb25seSB0ZXN0cyBhZGRpbmcsIG5lZWQgdG8gYWxzbyB0ZXN0IHVwZGF0ZSBhbmQgcmVtb3ZlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZWNobyAiIyBBZGRpdGlvbmFsIGxpbmUiID4+IE1ha2VmaWxlJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIHRoZSBNYWtlZmlsZSInLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdlY2hvICJBIG5ldyBmaWxlIiA+IGRldnRvb2wtbmV3LWZpbGUnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgYWRkIGRldnRvb2wtbmV3LWZpbGUnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1tICJBZGQgYSBuZXcgZmlsZSInLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignY2QgJXM7IHJtIC1yZiAlczsgZ2l0IGNoZWNrb3V0ICVzICVzJyAlIChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRlc3RyZWNpcGUsIHRlc3RyZWNpcGUsIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAtbSBzcmNyZXYgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICclcyByZWNpcGUgc2hvdWxkIGJlIG1vZGlmaWVkJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHN0YXR1cyA9IHJlc3VsdC5vdXRwdXQuc3BsaXRsaW5lcygpCisgICAgICAgIGZvciBsaW5lIGluIHN0YXR1czoKKyAgICAgICAgICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuZW5kc3dpdGgocGF0Y2gpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVbOjNdLCAnIEQgJywgJ1VuZXhwZWN0ZWQgc3RhdHVzIGluIGxpbmU6ICVzJyAlIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHJlLnNlYXJjaCgnJXNfW15fXSouYmIkJyAlIHRlc3RyZWNpcGUsIGxpbmUpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVbOjNdLCAnIE0gJywgJ1VuZXhwZWN0ZWQgc3RhdHVzIGluIGxpbmU6ICVzJyAlIGxpbmUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ1VuZXhwZWN0ZWQgbW9kaWZpZWQgZmlsZSBpbiBzdGF0dXM6ICVzJyAlIGxpbmUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGRpZmYgJXMnICUgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSwgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgYWRkbGluZXMgPSBbJ1NSQ1JFViA9ICIuKiInLCAnU1JDX1VSSSA9ICJnaXQ6Ly9naXQuaW5mcmFkZWFkLm9yZy9tdGQtdXRpbHMuZ2l0IiddCisgICAgICAgIHNyY3VyaWxpbmVzID0gc3JjX3VyaS5zcGxpdCgpCisgICAgICAgIHNyY3VyaWxpbmVzWzBdID0gJ1NSQ19VUkkgPSAiJyArIHNyY3VyaWxpbmVzWzBdCisgICAgICAgIHNyY3VyaWxpbmVzLmFwcGVuZCgnIicpCisgICAgICAgIHJlbW92ZWxpbmVzID0gWydTUkNSRVYgPSAiLioiJ10gKyBzcmN1cmlsaW5lcworICAgICAgICBmb3IgbGluZSBpbiByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnKysrJykgb3IgbGluZS5zdGFydHN3aXRoKCctLS0nKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJysnKToKKyAgICAgICAgICAgICAgICBtYXRjaGVkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBhZGRsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goaXRlbSwgbGluZVsxOl0uc3RyaXAoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlZCwgJ1VuZXhwZWN0ZWQgZGlmZiBhZGQgbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCctJyk6CisgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gcmVtb3ZlbGluZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIHJlLm1hdGNoKGl0ZW0sIGxpbmVbMTpdLnN0cmlwKCkpOgorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoZWQsICdVbmV4cGVjdGVkIGRpZmYgcmVtb3ZlIGxpbmU6ICVzJyAlIGxpbmUpCisgICAgICAgICMgTm93IHRyeSB3aXRoIGF1dG8gbW9kZQorICAgICAgICBydW5DbWQoJ2NkICVzOyBnaXQgY2hlY2tvdXQgJXMgJXMnICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSwgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSkpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwnKQorICAgICAgICB0b3BsZXZlbGRpciA9IHJlc3VsdC5vdXRwdXQuc3RyaXAoKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLiAtLXBvcmNlbGFpbicsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHN0YXR1cyA9IHJlc3VsdC5vdXRwdXQuc3BsaXRsaW5lcygpCisgICAgICAgIHJlbHBhdGNocGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCB0b3BsZXZlbGRpciksIHRlc3RyZWNpcGUpCisgICAgICAgIGV4cGVjdGVkc3RhdHVzID0gWygnTScsIG9zLnBhdGgucmVscGF0aChyZWNpcGVmaWxlLCB0b3BsZXZlbGRpcikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJz8/JywgJyVzLzAwMDEtQ2hhbmdlLXRoZS1NYWtlZmlsZS5wYXRjaCcgJSByZWxwYXRjaHBhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJz8/JywgJyVzLzAwMDItQWRkLWEtbmV3LWZpbGUucGF0Y2gnICUgcmVscGF0Y2hwYXRoKV0KKyAgICAgICAgZm9yIGxpbmUgaW4gc3RhdHVzOgorICAgICAgICAgICAgc3RhdHVzbGluZSA9IGxpbmUuc3BsaXQoTm9uZSwgMSkKKyAgICAgICAgICAgIGZvciBmc3RhdHVzLCBmbiBpbiBleHBlY3RlZHN0YXR1czoKKyAgICAgICAgICAgICAgICBpZiBmbiA9PSBzdGF0dXNsaW5lWzFdOgorICAgICAgICAgICAgICAgICAgICBpZiBmc3RhdHVzICE9IHN0YXR1c2xpbmVbMF06CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1VuZXhwZWN0ZWQgc3RhdHVzIGluIGxpbmU6ICVzJyAlIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCBtb2RpZmllZCBmaWxlIGluIGxpbmU6ICVzJyAlIGxpbmUpCisKKyAgICBAdGVzdGNhc2UoMTE3MCkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX3VwZGF0ZV9yZWNpcGVfYXBwZW5kKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdtZGFkbScKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBzcmNfdXJpID0gZ2V0X2JiX3ZhcignU1JDX1VSSScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2dpdDovLycsIHNyY191cmksICdUaGlzIHRlc3QgZXhwZWN0cyB0aGUgJXMgcmVjaXBlIHRvIE5PVCBiZSBhIGdpdCByZWNpcGUnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICclcyByZWNpcGUgaXMgbm90IGNsZWFuJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgRmlyc3QsIG1vZGlmeSBhIHJlY2lwZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHRlbXBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ3NvdXJjZScpCisgICAgICAgIHRlbXBsYXllcmRpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnbGF5ZXInKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICAjIChkb24ndCBib3RoZXIgd2l0aCBjbGVhbmluZyB0aGUgcmVjaXBlIG9uIHRlYXJkb3duLCB3ZSB3b24ndCBiZSBidWlsZGluZyBpdCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcHNyY2RpcikpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHRlbXBzcmNkaXIsICcuZ2l0JykpLCAnZ2l0IHJlcG9zaXRvcnkgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlIG5vdCBmb3VuZCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICdDcmVhdGVkIGdpdCByZXBvIGlzIG5vdCBjbGVhbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN5bWJvbGljLXJlZiBIRUFEJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAicmVmcy9oZWFkcy9kZXZ0b29sIiwgJ1dyb25nIGJyYW5jaCBpbiBnaXQgcmVwbycpCisgICAgICAgICMgQWRkIGEgY29tbWl0CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgic2VkICdzIVxcKCNkZWZpbmUgVkVSU0lPTlxcVypcIlteXCJdKlxcKVwiIVxcMS1jdXN0b21cIiEnIC1pIFJlYWRNZS5jIiwgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYSAtbSAiQWRkIG91ciBjdXN0b20gdmVyc2lvbiInLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignY2QgJXM7IHJtIC1mICVzLyoucGF0Y2g7IGdpdCBjaGVja291dCAuJyAlIChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRlc3RyZWNpcGUpKQorICAgICAgICAjIENyZWF0ZSBhIHRlbXBvcmFyeSBsYXllciBhbmQgYWRkIGl0IHRvIGJibGF5ZXJzLmNvbmYKKyAgICAgICAgc2VsZi5fY3JlYXRlX3RlbXBfbGF5ZXIodGVtcGxheWVyZGlyLCBUcnVlLCAnc2VsZnRlc3R1cGRhdGVyZWNpcGUnKQorICAgICAgICAjIENyZWF0ZSB0aGUgYmJhcHBlbmQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgJXMgLWEgJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBsYXllcmRpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6JywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayByZWNpcGUgaXMgc3RpbGwgY2xlYW4KKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICclcyByZWNpcGUgaXMgbm90IGNsZWFuJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgQ2hlY2sgYmJhcHBlbmQgd2FzIGNyZWF0ZWQKKyAgICAgICAgc3BsaXRwYXRoID0gb3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLnNwbGl0KG9zLnNlcCkKKyAgICAgICAgYXBwZW5kZGlyID0gb3MucGF0aC5qb2luKHRlbXBsYXllcmRpciwgc3BsaXRwYXRoWy0yXSwgc3BsaXRwYXRoWy0xXSkKKyAgICAgICAgYmJhcHBlbmRmaWxlID0gc2VsZi5fY2hlY2tfYmJhcHBlbmQodGVzdHJlY2lwZSwgcmVjaXBlZmlsZSwgYXBwZW5kZGlyKQorICAgICAgICBwYXRjaGZpbGUgPSBvcy5wYXRoLmpvaW4oYXBwZW5kZGlyLCB0ZXN0cmVjaXBlLCAnMDAwMS1BZGQtb3VyLWN1c3RvbS12ZXJzaW9uLnBhdGNoJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHBhdGNoZmlsZSksICdQYXRjaCBmaWxlIG5vdCBjcmVhdGVkJykKKworICAgICAgICAjIENoZWNrIGJiYXBwZW5kIGNvbnRlbnRzCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtQWRkLW91ci1jdXN0b20tdmVyc2lvbi5wYXRjaCJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorCisgICAgICAgICMgQ2hlY2sgd2UgY2FuIHJ1biBpdCBhZ2FpbiBhbmQgYmJhcHBlbmQgaXNuJ3QgbW9kaWZpZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgJXMgLWEgJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBsYXllcmRpcikpCisgICAgICAgIHdpdGggb3BlbihiYmFwcGVuZGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lcywgZi5yZWFkbGluZXMoKSkKKyAgICAgICAgIyBEcm9wIG5ldyBjb21taXQgYW5kIGNoZWNrIHBhdGNoIGdldHMgZGVsZXRlZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCByZXNldCBIRUFEXicsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhwYXRjaGZpbGUpLCAnUGF0Y2ggZmlsZSBub3QgZGVsZXRlZCcpCisgICAgICAgIGV4cGVjdGVkbGluZXMyID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIHdpdGggb3BlbihiYmFwcGVuZGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lczIsIGYucmVhZGxpbmVzKCkpCisgICAgICAgICMgUHV0IGNvbW1pdCBiYWNrIGFuZCBjaGVjayB3ZSBjYW4gcnVuIGl0IGlmIGxheWVyIGlzbid0IGluIGJibGF5ZXJzLmNvbmYKKyAgICAgICAgb3MucmVtb3ZlKGJiYXBwZW5kZmlsZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1hIC1tICJBZGQgb3VyIGN1c3RvbSB2ZXJzaW9uIicsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAlcycgJSB0ZW1wbGF5ZXJkaXIsIGN3ZD1zZWxmLmJ1aWxkZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignV0FSTklORzogU3BlY2lmaWVkIGxheWVyIGlzIG5vdCBjdXJyZW50bHkgZW5hYmxlZCBpbiBiYmxheWVycy5jb25mJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHBhdGNoZmlsZSksICdQYXRjaCBmaWxlIG5vdCBjcmVhdGVkICh3aXRoIGRpc2FibGVkIGxheWVyKScpCisgICAgICAgIHdpdGggb3BlbihiYmFwcGVuZGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lcywgZi5yZWFkbGluZXMoKSkKKyAgICAgICAgIyBEZWxldGluZyBpc24ndCBleHBlY3RlZCB0byB3b3JrIHVuZGVyIHRoZXNlIGNpcmN1bXN0YW5jZXMKKworICAgIEB0ZXN0Y2FzZSgxMTcxKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBkYXRlX3JlY2lwZV9hcHBlbmRfZ2l0KHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdtdGQtdXRpbHMnCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc3JjX3VyaSA9IGdldF9iYl92YXIoJ1NSQ19VUkknLCB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydEluKCdnaXQ6Ly8nLCBzcmNfdXJpLCAnVGhpcyB0ZXN0IGV4cGVjdHMgdGhlICVzIHJlY2lwZSB0byBiZSBhIGdpdCByZWNpcGUnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgZm9yIGVudHJ5IGluIHNyY191cmkuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGVudHJ5LnN0YXJ0c3dpdGgoJ2dpdDovLycpOgorICAgICAgICAgICAgICAgIGdpdF91cmkgPSBlbnRyeQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnJXMgcmVjaXBlIGlzIG5vdCBjbGVhbicgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIEZpcnN0LCBtb2RpZnkgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICB0ZW1wc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdzb3VyY2UnKQorICAgICAgICB0ZW1wbGF5ZXJkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ2xheWVyJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgIyAoZG9uJ3QgYm90aGVyIHdpdGggY2xlYW5pbmcgdGhlIHJlY2lwZSBvbiB0ZWFyZG93biwgd2Ugd29uJ3QgYmUgYnVpbGRpbmcgaXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBzcmNkaXIpKQorICAgICAgICAjIENoZWNrIGdpdCByZXBvCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbih0ZW1wc3JjZGlyLCAnLmdpdCcpKSwgJ2dpdCByZXBvc2l0b3J5IGZvciBleHRlcm5hbCBzb3VyY2UgdHJlZSBub3QgZm91bmQnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4nLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnQ3JlYXRlZCBnaXQgcmVwbyBpcyBub3QgY2xlYW4nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzeW1ib2xpYy1yZWYgSEVBRCcsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgInJlZnMvaGVhZHMvZGV2dG9vbCIsICdXcm9uZyBicmFuY2ggaW4gZ2l0IHJlcG8nKQorICAgICAgICAjIEFkZCBhIGNvbW1pdAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2VjaG8gIiMgQWRkaXRpb25hbCBsaW5lIiA+PiBNYWtlZmlsZScsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLWEgLW0gIkNoYW5nZSB0aGUgTWFrZWZpbGUiJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2NkICVzOyBybSAtZiAlcy8qLnBhdGNoOyBnaXQgY2hlY2tvdXQgLicgJSAob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCB0ZXN0cmVjaXBlKSkKKyAgICAgICAgIyBDcmVhdGUgYSB0ZW1wb3JhcnkgbGF5ZXIKKyAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKHRlbXBsYXllcmRpciwgJ2NvbmYnKSkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih0ZW1wbGF5ZXJkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYmFwcGVuZCJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVfQ09MTEVDVElPTlMgKz0gIm9lc2VsZnRlc3R0ZW1wbGF5ZXIiXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BBVFRFUk5fb2VzZWxmdGVzdHRlbXBsYXllciA9ICJeJHtMQVlFUkRJUn0vIlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9QUklPUklUWV9vZXNlbGZ0ZXN0dGVtcGxheWVyID0gIjk5OSJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVfUEFUVEVSTl9JR05PUkVfRU1QVFlfb2VzZWxmdGVzdHRlbXBsYXllciA9ICIxIlxuJykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzIHx8IHRydWUnICUgdGVtcGxheWVyZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIGFkZC1sYXllciAlcycgJSB0ZW1wbGF5ZXJkaXIsIGN3ZD1zZWxmLmJ1aWxkZGlyKQorICAgICAgICAjIENyZWF0ZSB0aGUgYmJhcHBlbmQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgLW0gc3JjcmV2ICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOicsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgcmVjaXBlIGlzIHN0aWxsIGNsZWFuCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnJXMgcmVjaXBlIGlzIG5vdCBjbGVhbicgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIENoZWNrIGJiYXBwZW5kIHdhcyBjcmVhdGVkCisgICAgICAgIHNwbGl0cGF0aCA9IG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKS5zcGxpdChvcy5zZXApCisgICAgICAgIGFwcGVuZGRpciA9IG9zLnBhdGguam9pbih0ZW1wbGF5ZXJkaXIsIHNwbGl0cGF0aFstMl0sIHNwbGl0cGF0aFstMV0pCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIGFwcGVuZGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oYXBwZW5kZGlyLCB0ZXN0cmVjaXBlKSksICdQYXRjaCBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBiZSBjcmVhdGVkJykKKworICAgICAgICAjIENoZWNrIGJiYXBwZW5kIGNvbnRlbnRzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHJldi1wYXJzZSBIRUFEJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ1NSQ1JFViA9ICIlcyJcbicgJSByZXN1bHQub3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgPSAiJXMiXG4nICUgZ2l0X3VyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIGYucmVhZGxpbmVzKCkpCisKKyAgICAgICAgIyBDaGVjayB3ZSBjYW4gcnVuIGl0IGFnYWluIGFuZCBiYmFwcGVuZCBpc24ndCBtb2RpZmllZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAtbSBzcmNyZXYgJXMgLWEgJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBsYXllcmRpcikpCisgICAgICAgIHdpdGggb3BlbihiYmFwcGVuZGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lcywgZi5yZWFkbGluZXMoKSkKKyAgICAgICAgIyBEcm9wIG5ldyBjb21taXQgYW5kIGNoZWNrIFNSQ1JFViBjaGFuZ2VzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHJlc2V0IEhFQUReJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC1tIHNyY3JldiAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oYXBwZW5kZGlyLCB0ZXN0cmVjaXBlKSksICdQYXRjaCBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBiZSBjcmVhdGVkJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnU1JDUkVWID0gIiVzIlxuJyAlIHJlc3VsdC5vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSA9ICIlcyJcbicgJSBnaXRfdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIHdpdGggb3BlbihiYmFwcGVuZGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lcywgZi5yZWFkbGluZXMoKSkKKyAgICAgICAgIyBQdXQgY29tbWl0IGJhY2sgYW5kIGNoZWNrIHdlIGNhbiBydW4gaXQgaWYgbGF5ZXIgaXNuJ3QgaW4gYmJsYXllcnMuY29uZgorICAgICAgICBvcy5yZW1vdmUoYmJhcHBlbmRmaWxlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLWEgLW0gIkNoYW5nZSB0aGUgTWFrZWZpbGUiJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgY3dkPXNlbGYuYnVpbGRkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC1tIHNyY3JldiAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignV0FSTklORzogU3BlY2lmaWVkIGxheWVyIGlzIG5vdCBjdXJyZW50bHkgZW5hYmxlZCBpbiBiYmxheWVycy5jb25mJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oYXBwZW5kZGlyLCB0ZXN0cmVjaXBlKSksICdQYXRjaCBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBiZSBjcmVhdGVkJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnU1JDUkVWID0gIiVzIlxuJyAlIHJlc3VsdC5vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSA9ICIlcyJcbicgJSBnaXRfdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIHdpdGggb3BlbihiYmFwcGVuZGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lcywgZi5yZWFkbGluZXMoKSkKKyAgICAgICAgIyBEZWxldGluZyBpc24ndCBleHBlY3RlZCB0byB3b3JrIHVuZGVyIHRoZXNlIGNpcmN1bXN0YW5jZXMKKworICAgIEB0ZXN0Y2FzZSgxMTYzKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfZXh0cmFjdChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgIyBUcnkgZGV2dG9vbCBleHRyYWN0CisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBleHRyYWN0IHJlbWFrZSAlcycgJSB0ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRlbXBkaXIsICdNYWtlZmlsZS5hbScpKSwgJ0V4dHJhY3RlZCBzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHRlbXBkaXIsICcuZ2l0JykpLCAnZ2l0IHJlcG9zaXRvcnkgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlIG5vdCBmb3VuZCcpCisKKyAgICBAdGVzdGNhc2UoMTE2OCkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX3Jlc2V0X2FsbChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgdGVzdHJlY2lwZTEgPSAnbWRhZG0nCisgICAgICAgIHRlc3RyZWNpcGUyID0gJ2Nyb25pZScKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAteCAlcyAlcycgJSAodGVzdHJlY2lwZTEsIG9zLnBhdGguam9pbih0ZW1wZGlyLCB0ZXN0cmVjaXBlMSkpKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5IC14ICVzICVzJyAlICh0ZXN0cmVjaXBlMiwgb3MucGF0aC5qb2luKHRlbXBkaXIsIHRlc3RyZWNpcGUyKSkpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZCAlcycgJSB0ZXN0cmVjaXBlMSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkICVzJyAlIHRlc3RyZWNpcGUyKQorICAgICAgICBzdGFtcHByZWZpeDEgPSBnZXRfYmJfdmFyKCdTVEFNUCcsIHRlc3RyZWNpcGUxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhbXBwcmVmaXgxLCAnVW5hYmxlIHRvIGdldCBTVEFNUCB2YWx1ZSBmb3IgcmVjaXBlICVzJyAlIHRlc3RyZWNpcGUxKQorICAgICAgICBzdGFtcHByZWZpeDIgPSBnZXRfYmJfdmFyKCdTVEFNUCcsIHRlc3RyZWNpcGUyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhbXBwcmVmaXgyLCAnVW5hYmxlIHRvIGdldCBTVEFNUCB2YWx1ZSBmb3IgcmVjaXBlICVzJyAlIHRlc3RyZWNpcGUyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgLWEnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUxLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUyLCByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih0ZXN0cmVjaXBlMSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih0ZXN0cmVjaXBlMiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgbWF0Y2hlczEgPSBnbG9iLmdsb2Ioc3RhbXBwcmVmaXgxICsgJyonKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1hdGNoZXMxLCAnU3RhbXAgZmlsZXMgZXhpc3QgZm9yIHJlY2lwZSAlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCcgJSB0ZXN0cmVjaXBlMSkKKyAgICAgICAgbWF0Y2hlczIgPSBnbG9iLmdsb2Ioc3RhbXBwcmVmaXgyICsgJyonKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1hdGNoZXMyLCAnU3RhbXAgZmlsZXMgZXhpc3QgZm9yIHJlY2lwZSAlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCcgJSB0ZXN0cmVjaXBlMikKKworICAgIGRlZiB0ZXN0X2RldnRvb2xfZGVwbG95X3RhcmdldChzZWxmKToKKyAgICAgICAgIyBOT1RFOiBXaGlsc3QgdGhpcyB0ZXN0IHdvdWxkIHNlZW1pbmdseSBiZSBiZXR0ZXIgcGxhY2VkIGFzIGEgcnVudGltZSB0ZXN0LAorICAgICAgICAjIHVuZm9ydHVuYXRlbHkgdGhlIHJ1bnRpbWUgdGVzdHMgcnVuIHVuZGVyIGJpdGJha2UgYW5kIHlvdSBjYW4ndCBydW4KKyAgICAgICAgIyBkZXZ0b29sIHdpdGhpbiBiaXRiYWtlIChzaW5jZSBkZXZ0b29sIG5lZWRzIHRvIHJ1biBiaXRiYWtlIGl0c2VsZikuCisgICAgICAgICMgQWRkaXRpb25hbGx5IHdlIGFyZSB0ZXN0aW5nIGJ1aWxkLXRpbWUgZnVuY3Rpb25hbGl0eSBhcyB3ZWxsLCBzbworICAgICAgICAjIHJlYWxseSB0aGlzIGhhcyB0byBiZSBkb25lIGFzIGFuIG9lLXNlbGZ0ZXN0IHRlc3QuCisgICAgICAgICMKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIG1hY2hpbmUgPSBnZXRfYmJfdmFyKCdNQUNISU5FJykKKyAgICAgICAgaWYgbm90IG1hY2hpbmUuc3RhcnRzd2l0aCgncWVtdScpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnVGhpcyB0ZXN0IG9ubHkgd29ya3Mgd2l0aCBxZW11IG1hY2hpbmVzJykKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCcvZXRjL3J1bnFlbXUtbm9zdWRvJyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdZb3UgbXVzdCBzZXQgdXAgdGFwIGRldmljZXMgd2l0aCBzY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnMgYmVmb3JlIHJ1bm5pbmcgdGhpcyB0ZXN0JykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdQQVRIPSIkUEFUSDovc2JpbjovdXNyL3NiaW4iIGlwIHR1bnRhcCBzaG93JywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBpZiByZXN1bHQuc3RhdHVzICE9IDA6CisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ1BBVEg9IiRQQVRIOi9zYmluOi91c3Ivc2JpbiIgaWZjb25maWcgLWEnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgICAgICBpZiByZXN1bHQuc3RhdHVzICE9IDA6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnRmFpbGVkIHRvIGRldGVybWluZSBpZiB0YXAgZGV2aWNlcyBleGlzdCB3aXRoIGlmY29uZmlnIG9yIGlwOiAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBmb3IgbGluZSBpbiByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgndGFwJyk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ05vIHRhcCBkZXZpY2VzIGZvdW5kIC0geW91IG11c3Qgc2V0IHVwIHRhcCBkZXZpY2VzIHdpdGggc2NyaXB0cy9ydW5xZW11LWdlbi10YXBkZXZzIGJlZm9yZSBydW5uaW5nIHRoaXMgdGVzdCcpCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgRGVmaW5pdGlvbnMKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdtZGFkbScKKyAgICAgICAgdGVzdGZpbGUgPSAnL3NiaW4vbWRhZG0nCisgICAgICAgIHRlc3RpbWFnZSA9ICdvZS1zZWxmdGVzdC1pbWFnZScKKyAgICAgICAgdGVzdGNvbW1hbmQgPSAnL3NiaW4vbWRhZG0gLS1oZWxwJworICAgICAgICAjIEJ1aWxkIGFuIGltYWdlIHRvIHJ1bgorICAgICAgICBiaXRiYWtlKCIlcyBxZW11LW5hdGl2ZSBxZW11LWhlbHBlci1uYXRpdmUiICUgdGVzdGltYWdlKQorICAgICAgICBkZXBsb3lfZGlyX2ltYWdlID0gZ2V0X2JiX3ZhcignREVQTE9ZX0RJUl9JTUFHRScpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gJXMnICUgdGVzdGltYWdlKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdybSAtZiAlcy8lcyonICUgKGRlcGxveV9kaXJfaW1hZ2UsIHRlc3RpbWFnZSkpCisgICAgICAgICMgQ2xlYW4gcmVjaXBlIHNvIHRoZSBmaXJzdCBkZXBsb3kgd2lsbCBmYWlsCisgICAgICAgIGJpdGJha2UoIiVzIC1jIGNsZWFuIiAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgVHJ5IGRldnRvb2wgbW9kaWZ5CisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wZGlyKSkKKyAgICAgICAgIyBUZXN0IHRoYXQgZGVwbG95LXRhcmdldCBhdCB0aGlzIHBvaW50IGZhaWxzIChwcm9wZXJseSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGRlcGxveS10YXJnZXQgLW4gJXMgcm9vdEBsb2NhbGhvc3QnICUgdGVzdHJlY2lwZSwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5vdXRwdXQsIDAsICdkZXZ0b29sIGRlcGxveS10YXJnZXQgc2hvdWxkIGhhdmUgZmFpbGVkLCBvdXRwdXQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocmVzdWx0Lm91dHB1dCwgJ1RyYWNlYmFjaycsICdkZXZ0b29sIGRlcGxveS10YXJnZXQgc2hvdWxkIGhhdmUgZmFpbGVkIHdpdGggYSBwcm9wZXIgZXJyb3Igbm90IGEgdHJhY2ViYWNrLCBvdXRwdXQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZCAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIEZpcnN0IHRyeSBhIGRyeS1ydW4gb2YgZGVwbG95LXRhcmdldAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgZGVwbG95LXRhcmdldCAtbiAlcyByb290QGxvY2FsaG9zdCcgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydEluKCcgICVzJyAlIHRlc3RmaWxlLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIEJvb3QgdGhlIGltYWdlCisgICAgICAgIHdpdGggcnVucWVtdSh0ZXN0aW1hZ2UsIHNlbGYpIGFzIHFlbXU6CisgICAgICAgICAgICAjIE5vdyByZWFsbHkgdGVzdCBkZXBsb3ktdGFyZ2V0CisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgZGVwbG95LXRhcmdldCAtYyAlcyByb290QCVzJyAlICh0ZXN0cmVjaXBlLCBxZW11LmlwKSkKKyAgICAgICAgICAgICMgUnVuIGEgdGVzdCBjb21tYW5kIHRvIHNlZSBpZiBpdCB3YXMgaW5zdGFsbGVkIHByb3Blcmx5CisgICAgICAgICAgICBzc2hhcmdzID0gJy1vIFVzZXJLbm93bkhvc3RzRmlsZT0vZGV2L251bGwgLW8gU3RyaWN0SG9zdEtleUNoZWNraW5nPW5vJworICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdzc2ggJXMgcm9vdEAlcyAlcycgJSAoc3NoYXJncywgcWVtdS5pcCwgdGVzdGNvbW1hbmQpKQorICAgICAgICAgICAgIyBDaGVjayBpZiBpdCBkZXBsb3llZCBhbGwgb2YgdGhlIGZpbGVzIHdpdGggdGhlIHJpZ2h0IG93bmVyc2hpcC9wZXJtcworICAgICAgICAgICAgIyBGaXJzdCBsb29rIG9uIHRoZSBob3N0IC0gbmVlZCB0byBkbyB0aGlzIHVuZGVyIHBzZXVkbyB0byBnZXQgdGhlIGNvcnJlY3Qgb3duZXJzaGlwL3Blcm1zCisgICAgICAgICAgICBpbnN0YWxsZGlyID0gZ2V0X2JiX3ZhcignRCcsIHRlc3RyZWNpcGUpCisgICAgICAgICAgICBmYWtlcm9vdGVudiA9IGdldF9iYl92YXIoJ0ZBS0VST09URU5WJywgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIGZha2Vyb290Y21kID0gZ2V0X2JiX3ZhcignRkFLRVJPT1RDTUQnLCB0ZXN0cmVjaXBlKQorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCclcyAlcyBmaW5kIC4gLXR5cGUgZiAtZXhlYyBscyAtbCB7fSBcOycgJSAoZmFrZXJvb3RlbnYsIGZha2Vyb290Y21kKSwgY3dkPWluc3RhbGxkaXIpCisgICAgICAgICAgICBmaWxlbGlzdDEgPSBzZWxmLl9wcm9jZXNzX2xzX291dHB1dChyZXN1bHQub3V0cHV0KQorCisgICAgICAgICAgICAjIE5vdyBsb29rIG9uIHRoZSB0YXJnZXQKKyAgICAgICAgICAgIHRlbXBkaXIyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIyKQorICAgICAgICAgICAgdG1wZmlsZWxpc3QgPSBvcy5wYXRoLmpvaW4odGVtcGRpcjIsICdmaWxlcy50eHQnKQorICAgICAgICAgICAgd2l0aCBvcGVuKHRtcGZpbGVsaXN0LCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmlsZWxpc3QxOgorICAgICAgICAgICAgICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzcGxpdGxpbmVbLTFdICsgJ1xuJykKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnY2F0ICVzIHwgc3NoIC1xICVzIHJvb3RAJXMgXCd4YXJncyBscyAtbFwnJyAlICh0bXBmaWxlbGlzdCwgc3NoYXJncywgcWVtdS5pcCkpCisgICAgICAgICAgICBmaWxlbGlzdDIgPSBzZWxmLl9wcm9jZXNzX2xzX291dHB1dChyZXN1bHQub3V0cHV0KQorICAgICAgICAgICAgZmlsZWxpc3QxLnNvcnQoa2V5PWxhbWJkYSBpdGVtOiBpdGVtLnNwbGl0KClbLTFdKQorICAgICAgICAgICAgZmlsZWxpc3QyLnNvcnQoa2V5PWxhbWJkYSBpdGVtOiBpdGVtLnNwbGl0KClbLTFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlbGlzdDEsIGZpbGVsaXN0MikKKyAgICAgICAgICAgICMgVGVzdCB1bmRlcGxveS10YXJnZXQKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1bmRlcGxveS10YXJnZXQgLWMgJXMgcm9vdEAlcycgJSAodGVzdHJlY2lwZSwgcWVtdS5pcCkpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3NzaCAlcyByb290QCVzICVzJyAlIChzc2hhcmdzLCBxZW11LmlwLCB0ZXN0Y29tbWFuZCksIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0LCAwLCAndW5kZXBsb3ktdGFyZ2V0IGRpZCBub3QgcmVtb3ZlIGNvbW1hbmQgYXMgaXQgc2hvdWxkIGhhdmUnKQorCisgICAgZGVmIHRlc3RfZGV2dG9vbF9idWlsZF9pbWFnZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCBkZXZ0b29sIGJ1aWxkLWltYWdlIHBsdWdpbiIiIgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgaW1hZ2UgPSAnY29yZS1pbWFnZS1taW5pbWFsJworICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSBpbWFnZSkKKyAgICAgICAgYml0YmFrZSgnJXMgLWMgY2xlYW4nICUgaW1hZ2UpCisgICAgICAgICMgQWRkIHRhcmdldCBhbmQgbmF0aXZlIHJlY2lwZXMgdG8gd29ya3NwYWNlCisgICAgICAgIGZvciByZWNpcGUgaW4gKCdtZGFkbScsICdwYXJ0ZWQtbmF0aXZlJyk6CisgICAgICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHJlY2lwZSkKKyAgICAgICAgICAgIHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHJlY2lwZSwgdGVtcGRpcikpCisgICAgICAgICMgVHJ5IHRvIGJ1aWxkIGltYWdlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZC1pbWFnZSAlcycgJSBpbWFnZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQsIDAsICdkZXZ0b29sIGJ1aWxkLWltYWdlIGZhaWxlZCcpCisgICAgICAgICMgQ2hlY2sgaWYgaW1hZ2UuYmJhcHBlbmQgaGFzIHJlcXVpcmVkIGNvbnRlbnQKKyAgICAgICAgYmJhcHBlbmQgPSBvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnYXBwZW5kcycsIGltYWdlKycuYmJhcHBlbmQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoYmJhcHBlbmQpLCAnYmJhcHBlbmQgbm90IGNyZWF0ZWQgJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBOT1RFOiBuYXRpdmUgcmVjaXBlIHBhcnRlZC1uYXRpdmUgc2hvdWxkIG5vdCBiZSBpbiBJTUFHRV9JTlNUQUxMX2FwcGVuZAorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0lNQUdFX0lOU1RBTExfYXBwZW5kID0gIiBtZGFkbSJcbicgaW4gb3BlbihiYmFwcGVuZCkucmVhZGxpbmVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAnSU1BR0VfSU5TVEFMTF9hcHBlbmQgPSAiIG1kYWRtIiBub3QgZm91bmQgaW4gJXMnICUgYmJhcHBlbmQpCisKKyAgICBkZWYgdGVzdF9kZXZ0b29sX3VwZ3JhZGUoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICAjIENoZWNrIHBhcmFtZXRlcnMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZ3JhZGUgLWgnKQorICAgICAgICBmb3IgcGFyYW0gaW4gJ3JlY2lwZW5hbWUgc3JjdHJlZSAtLXZlcnNpb24gLVYgLS1icmFuY2ggLWIgLS1rZWVwLXRlbXAgLS1uby1wYXRjaCcuc3BsaXQoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocGFyYW0sIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgRm9yIHRoZSBtb21lbnQsIHdlIGFyZSB1c2luZyBhIHJlYWwgcmVjaXBlLgorICAgICAgICByZWNpcGU9J2RldnRvb2wtdXBncmFkZScKKyAgICAgICAgdmVyc2lvbj0nMC4yJworICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgICMgQ2hlY2sgdGhhdCByZWNpcGUgaXMgbm90IGFscmVhZHkgdW5kZXIgZGV2dG9vbCBjb250cm9sCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayB1cGdyYWRlLiBDb2RlIGRvZXMgbm90IGNoZWNrIGlmIG5ldyBQViBpcyBvbGRlciBvciBuZXdlciB0aGF0IGN1cnJlbnQgUFYsIHNvLCBpdCBtYXkgYmUgdGhhdAorICAgICAgICAjIHdlIGFyZSBkb3duZ3JhZGluZyBpbnN0ZWFkIG9mIHVwZ3JhZGluZy4KKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZ3JhZGUgJXMgJXMgLVYgJXMnICUgKHJlY2lwZSwgdGVtcGRpciwgdmVyc2lvbikpCisgICAgICAgICMgQ2hlY2sgaWYgc3JjdHJlZSBhdCBsZWFzdCBpcyBwb3B1bGF0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihvcy5saXN0ZGlyKHRlbXBkaXIpKSA+IDAsICdzY3J0cmVlICglcykgc2hvdWxkIGJlIHBvcHVsYXRlZCB3aXRoIG5ldyAoJXMpIHNvdXJjZSBjb2RlJyAlICh0ZW1wZGlyLCB2ZXJzaW9uKSkKKyAgICAgICAgIyBDaGVjayBuZXcgcmVjaXBlIGZvbGRlciBpcyBwcmVzZW50CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCdyZWNpcGVzJyxyZWNpcGUpKSwgJ1JlY2lwZSBmb2xkZXIgc2hvdWxkIGV4aXN0JykKKyAgICAgICAgIyBDaGVjayBuZXcgcmVjaXBlIGZpbGUgaXMgcHJlc2VudAorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwncmVjaXBlcycscmVjaXBlLCIlc18lcy5iYiIgJSAocmVjaXBlLHZlcnNpb24pKSksICdSZWNpcGUgZm9sZGVyIHNob3VsZCBleGlzdCcpCisgICAgICAgICMgQ2hlY2sgZGV2dG9vbCBzdGF0dXMgYW5kIG1ha2Ugc3VyZSByZWNpcGUgaXMgcHJlc2VudAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVtcGRpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayBkZXZ0b29sIHJlc2V0IHJlY2lwZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgJXMgLW4nICUgcmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvaW1hZ2VmZWF0dXJlcy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9pbWFnZWZlYXR1cmVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZmZjNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvaW1hZ2VmZWF0dXJlcy5weQpAQCAtMCwwICsxLDE2OCBAQAorZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBydW5xZW11Citmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKK2Zyb20gb2VxYS51dGlscy5zc2hjb250cm9sIGltcG9ydCBTU0hDb250cm9sCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCisKK2NsYXNzIEltYWdlRmVhdHVyZXMob2VTZWxmVGVzdCk6CisKKyAgICB0ZXN0X3VzZXIgPSAndGVzdGVyJworICAgIHJvb3RfdXNlciA9ICdyb290JworCisgICAgQHRlc3RjYXNlKDExMDcpCisgICAgZGVmIHRlc3Rfbm9uX3Jvb3RfdXNlcl9jYW5fY29ubmVjdF92aWFfc3NoX3dpdGhvdXRfcGFzc3dvcmQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiBDaGVjayBpZiBub24gcm9vdCB1c2VyIGNhbiBjb25uZWN0IHZpYSBzc2ggd2l0aG91dCBwYXNzd29yZAorICAgICAgICBFeHBlY3RlZDogMS4gQ29ubmVjdGlvbiB0byB0aGUgaW1hZ2UgdmlhIHNzaCB1c2luZyByb290IHVzZXIgd2l0aG91dCBwcm92aWRpbmcgYSBwYXNzd29yZCBzaG91bGQgYmUgYWxsb3dlZC4KKyAgICAgICAgICAgICAgICAgIDIuIENvbm5lY3Rpb24gdG8gdGhlIGltYWdlIHZpYSBzc2ggdXNpbmcgdGVzdGVyIHVzZXIgd2l0aG91dCBwcm92aWRpbmcgYSBwYXNzd29yZCBzaG91bGQgYmUgYWxsb3dlZC4KKyAgICAgICAgUHJvZHVjdDogb2UtY29yZQorICAgICAgICBBdXRob3I6IElvbnV0IENoaXNhbm92aWNpIDxpb251dHguY2hpc2Fub3ZpY2lAaW50ZWwuY29tPgorICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICBmZWF0dXJlcyA9ICdFWFRSQV9JTUFHRV9GRUFUVVJFUyA9ICJzc2gtc2VydmVyLW9wZW5zc2ggZW1wdHktcm9vdC1wYXNzd29yZCBhbGxvdy1lbXB0eS1wYXNzd29yZCJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0lOSEVSSVQgKz0gImV4dHJhdXNlcnMiXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdFWFRSQV9VU0VSU19QQVJBTVMgPSAidXNlcmFkZCAtcCBcJ1wnIHt9OyB1c2VybW9kIC1zIC9iaW4vc2gge307IicuZm9ybWF0KHNlbGYudGVzdF91c2VyLCBzZWxmLnRlc3RfdXNlcikKKworICAgICAgICAjIEFwcGVuZCAnZmVhdHVyZXMnIHRvIGxvY2FsLmNvbmYKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGZlYXR1cmVzKQorCisgICAgICAgICMgQnVpbGQgYSBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykKKworICAgICAgICB3aXRoIHJ1bnFlbXUoImNvcmUtaW1hZ2UtbWluaW1hbCIsIHNlbGYpIGFzIHFlbXU6CisgICAgICAgICAgICAjIEF0dGVtcHQgdG8gc3NoIHdpdGggZWFjaCB1c2VyIGludG8gcWVtdSB3aXRoIGVtcHR5IHBhc3N3b3JkCisgICAgICAgICAgICBmb3IgdXNlciBpbiBbc2VsZi5yb290X3VzZXIsIHNlbGYudGVzdF91c2VyXToKKyAgICAgICAgICAgICAgICBzc2ggPSBTU0hDb250cm9sKGlwPXFlbXUuaXAsIGxvZ2ZpbGU9cWVtdS5zc2hsb2csIHVzZXI9dXNlcikKKyAgICAgICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHNzaC5ydW4oInRydWUiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCAnc3NoIHRvIHVzZXIgJXMgZmFpbGVkIHdpdGggJXMnICUgKHVzZXIsIG91dHB1dCkpCisKKyAgICBAdGVzdGNhc2UoMTExNSkKKyAgICBkZWYgdGVzdF9hbGxfdXNlcnNfY2FuX2Nvbm5lY3RfdmlhX3NzaF93aXRob3V0X3Bhc3N3b3JkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgIENoZWNrIGlmIGFsbCB1c2VycyBjYW4gY29ubmVjdCB2aWEgc3NoIHdpdGhvdXQgcGFzc3dvcmQKKyAgICAgICAgRXhwZWN0ZWQ6IDEuIENvbm5lY3Rpb24gdG8gdGhlIGltYWdlIHZpYSBzc2ggdXNpbmcgcm9vdCB1c2VyIHdpdGhvdXQgcHJvdmlkaW5nIGEgcGFzc3dvcmQgc2hvdWxkIE5PVCBiZSBhbGxvd2VkLgorICAgICAgICAgICAgICAgICAgMi4gQ29ubmVjdGlvbiB0byB0aGUgaW1hZ2UgdmlhIHNzaCB1c2luZyB0ZXN0ZXIgdXNlciB3aXRob3V0IHByb3ZpZGluZyBhIHBhc3N3b3JkIHNob3VsZCBiZSBhbGxvd2VkLgorICAgICAgICBQcm9kdWN0OiAgICAgb2UtY29yZQorICAgICAgICBBdXRob3I6ICAgICAgSW9udXQgQ2hpc2Fub3ZpY2kgPGlvbnV0eC5jaGlzYW5vdmljaUBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgIGZlYXR1cmVzID0gJ0VYVFJBX0lNQUdFX0ZFQVRVUkVTID0gInNzaC1zZXJ2ZXItb3BlbnNzaCBhbGxvdy1lbXB0eS1wYXNzd29yZCJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0lOSEVSSVQgKz0gImV4dHJhdXNlcnMiXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdFWFRSQV9VU0VSU19QQVJBTVMgPSAidXNlcmFkZCAtcCBcJ1wnIHt9OyB1c2VybW9kIC1zIC9iaW4vc2gge307IicuZm9ybWF0KHNlbGYudGVzdF91c2VyLCBzZWxmLnRlc3RfdXNlcikKKworICAgICAgICAjIEFwcGVuZCAnZmVhdHVyZXMnIHRvIGxvY2FsLmNvbmYKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGZlYXR1cmVzKQorCisgICAgICAgICMgQnVpbGQgYSBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykKKworICAgICAgICB3aXRoIHJ1bnFlbXUoImNvcmUtaW1hZ2UtbWluaW1hbCIsIHNlbGYpIGFzIHFlbXU6CisgICAgICAgICAgICAjIEF0dGVtcHQgdG8gc3NoIHdpdGggZWFjaCB1c2VyIGludG8gcWVtdSB3aXRoIGVtcHR5IHBhc3N3b3JkCisgICAgICAgICAgICBmb3IgdXNlciBpbiBbc2VsZi5yb290X3VzZXIsIHNlbGYudGVzdF91c2VyXToKKyAgICAgICAgICAgICAgICBzc2ggPSBTU0hDb250cm9sKGlwPXFlbXUuaXAsIGxvZ2ZpbGU9cWVtdS5zc2hsb2csIHVzZXI9dXNlcikKKyAgICAgICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHNzaC5ydW4oInRydWUiKQorICAgICAgICAgICAgICAgIGlmIHVzZXIgPT0gJ3Jvb3QnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHN0YXR1cywgMCwgJ3NzaCB0byB1c2VyIHJvb3Qgd2FzIGFsbG93ZWQgd2hlbiBpdCBzaG91bGQgbm90IGhhdmUgYmVlbicpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICdzc2ggdG8gdXNlciB0ZXN0ZXIgZmFpbGVkIHdpdGggJXMnICUgb3V0cHV0KQorCisKKyAgICBAdGVzdGNhc2UoMTExNCkKKyAgICBkZWYgdGVzdF9ycG1fdmVyc2lvbl80X3N1cHBvcnRfb25faW1hZ2Uoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgcnBtIHZlcnNpb24gNCBzdXBwb3J0IG9uIGltYWdlCisgICAgICAgIEV4cGVjdGVkOiAgICBScG0gdmVyc2lvbiBtdXN0IGJlIDQueAorICAgICAgICBQcm9kdWN0OiAgICAgb2UtY29yZQorICAgICAgICBBdXRob3I6ICAgICAgSW9udXQgQ2hpc2Fub3ZpY2kgPGlvbnV0eC5jaGlzYW5vdmljaUBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgIGZlYXR1cmVzID0gJ1BSRUZFUlJFRF9WRVJTSU9OX3JwbSA9ICI0LiUiXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdQUkVGRVJSRURfVkVSU0lPTl9ycG0tbmF0aXZlID0gIjQuJSJcbicKKyAgICAgICAgIyBVc2Ugb3BlbnNzaCBpbiBJTUFHRV9JTlNUQUxMIGluc3RlYWQgb2Ygc3NoLXNlcnZlci1vcGVuc3NoIGluIEVYVFJBX0lNQUdFX0ZFQVRVUkVTIGFzIGEgd29ya2Fyb3VuZCBmb3IgYnVnIDgwNDcKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0lNQUdFX0lOU1RBTExfYXBwZW5kID0gIiBvcGVuc3NoIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAiZW1wdHktcm9vdC1wYXNzd29yZCBhbGxvdy1lbXB0eS1wYXNzd29yZCBwYWNrYWdlLW1hbmFnZW1lbnQiXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdSUE1ST09URlNERVBFTkRTX3JlbW92ZSA9ICJycG1yZXNvbHZlLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IicKKworICAgICAgICAjIEFwcGVuZCAnZmVhdHVyZXMnIHRvIGxvY2FsLmNvbmYKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGZlYXR1cmVzKQorCisgICAgICAgICMgQnVpbGQgYSBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykKKworICAgICAgICAjIENoZWNrIHRoZSBuYXRpdmUgdmVyc2lvbiBvZiBycG0gaXMgY29ycmVjdAorICAgICAgICBuYXRpdmVfYmluZGlyID0gZ2V0X2JiX3ZhcignU1RBR0lOR19CSU5ESVJfTkFUSVZFJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKG9zLnBhdGguam9pbihuYXRpdmVfYmluZGlyLCAncnBtJykgKyAnIC0tdmVyc2lvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3ZlcnNpb24gNC4nLCByZXN1bHQub3V0cHV0KQorCisgICAgICAgICMgQ2hlY2sgbWFuaWZlc3QgZm9yIHRoZSBycG0gcGFja2FnZQorICAgICAgICBkZXBsb3lkaXIgPSBnZXRfYmJfdmFyKCdERVBMT1lfRElSX0lNQUdFJykKKyAgICAgICAgaW1nbmFtZSA9IGdldF9iYl92YXIoJ0lNQUdFX0xJTktfTkFNRScsICdjb3JlLWltYWdlLW1pbmltYWwnKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGRlcGxveWRpciwgaW1nbmFtZSkgKyAnLm1hbmlmZXN0JywgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBpZiBsZW4oc3BsaXRsaW5lKSA+IDI6CisgICAgICAgICAgICAgICAgICAgIHJwbV92ZXJzaW9uID0gc3BsaXRsaW5lWzJdCisgICAgICAgICAgICAgICAgICAgIGlmIHNwbGl0bGluZVswXSA9PSAncnBtJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBycG1fdmVyc2lvbi5zdGFydHN3aXRoKCc0LicpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgncnBtIHZlcnNpb24gJXMgZm91bmQgaW4gaW1hZ2UsIGV4cGVjdGVkIDQueCcgJSBycG1fdmVyc2lvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnTm8gcnBtIHBhY2thZ2UgZm91bmQgaW4gaW1hZ2UnKQorCisgICAgICAgICMgTm93IGRvIGEgY291cGxlIG9mIHJ1bnRpbWUgdGVzdHMKKyAgICAgICAgd2l0aCBydW5xZW11KCJjb3JlLWltYWdlLW1pbmltYWwiLCBzZWxmKSBhcyBxZW11OgorICAgICAgICAgICAgY29tbWFuZCA9ICJycG0gLS12ZXJzaW9uIgorICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBxZW11LnJ1bihjb21tYW5kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICdGYWlsZWQgdG8gcnVuIGNvbW1hbmQgIiVzIjogJXMnICUgKGNvbW1hbmQsIG91dHB1dCkpCisgICAgICAgICAgICBmb3VuZF9ycG1fdmVyc2lvbiA9IG91dHB1dC5zdHJpcCgpCisKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSByZXRyaWV2ZWQgcnBtIHZlcnNpb24gaXMgdGhlIGV4cGVjdGVkIG9uZQorICAgICAgICAgICAgaWYgcnBtX3ZlcnNpb24gbm90IGluIGZvdW5kX3JwbV92ZXJzaW9uOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnUlBNIHZlcnNpb24gaXMgbm90IHt9LCBmb3VuZCBpbnN0ZWFkIHt9LicuZm9ybWF0KHJwbV92ZXJzaW9uLCBmb3VuZF9ycG1fdmVyc2lvbikpCisKKyAgICAgICAgICAgICMgVGVzdCB0aGF0IHRoZSBycG0gZGF0YWJhc2UgaXMgdGhlcmUgYW5kIHdvcmtpbmcKKyAgICAgICAgICAgIGNvbW1hbmQgPSAicnBtIC1xYSIKKyAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gcWVtdS5ydW4oY29tbWFuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzLCAnRmFpbGVkIHRvIHJ1biBjb21tYW5kICIlcyI6ICVzJyAlIChjb21tYW5kLCBvdXRwdXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncGFja2FnZWdyb3VwLWNvcmUtYm9vdCcsIG91dHB1dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2J1c3lib3gnLCBvdXRwdXQpCisKKworICAgIEB0ZXN0Y2FzZSgxMTE2KQorICAgIGRlZiB0ZXN0X2NsdXR0ZXJfaW1hZ2VfY2FuX2JlX2J1aWx0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgIENoZWNrIGlmIGNsdXR0ZXIgaW1hZ2UgY2FuIGJlIGJ1aWx0CisgICAgICAgIEV4cGVjdGVkOiAgICAxLiBjb3JlLWltYWdlLWNsdXR0ZXIgY2FuIGJlIGJ1aWx0CisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBJb251dCBDaGlzYW5vdmljaSA8aW9udXR4LmNoaXNhbm92aWNpQGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBCdWlsZCBhIGNvcmUtaW1hZ2UtY2x1dHRlcgorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLWNsdXR0ZXInKQorCisgICAgQHRlc3RjYXNlKDExMTcpCisgICAgZGVmIHRlc3Rfd2F5bGFuZF9zdXBwb3J0X2luX2ltYWdlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgIENoZWNrIFdheWxhbmQgc3VwcG9ydCBpbiBpbWFnZQorICAgICAgICBFeHBlY3RlZDogICAgMS4gV2F5bGFuZCBpbWFnZSBjYW4gYmUgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgIDIuIFdheWxhbmQgZmVhdHVyZSBjYW4gYmUgaW5zdGFsbGVkCisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBJb251dCBDaGlzYW5vdmljaSA8aW9udXR4LmNoaXNhbm92aWNpQGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZmVhdHVyZXMgPSAnRElTVFJPX0ZFQVRVUkVTX2FwcGVuZCA9ICIgd2F5bGFuZCJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0NPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTCArPSAid2F5bGFuZCB3ZXN0b24iJworCisgICAgICAgICMgQXBwZW5kICdmZWF0dXJlcycgdG8gbG9jYWwuY29uZgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgIyBCdWlsZCBhIGNvcmUtaW1hZ2Utd2VzdG9uCisgICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2Utd2VzdG9uJykKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2xheWVyYXBwZW5kLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2xheWVyYXBwZW5kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MmE2YzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvbGF5ZXJhcHBlbmQucHkKQEAgLTAsMCArMSw5NiBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKKworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS5zZWxmdGVzdC5idWlsZGhpc3RvcnkgaW1wb3J0IEJ1aWxkaGlzdG9yeUJhc2UKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKKworY2xhc3MgTGF5ZXJBcHBlbmRUZXN0cyhvZVNlbGZUZXN0KToKKyAgICBsYXllcmNvbmYgPSAiIiIKKyMgV2UgaGF2ZSBhIGNvbmYgYW5kIGNsYXNzZXMgZGlyZWN0b3J5LCBhcHBlbmQgdG8gQkJQQVRICitCQlBBVEggLj0gIjoke0xBWUVSRElSfSIKKworIyBXZSBoYXZlIGEgcmVjaXBlcyBkaXJlY3RvcnksIGFkZCB0byBCQkZJTEVTCitCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzKi8qLmJiICR7TEFZRVJESVJ9L3JlY2lwZXMqLyouYmJhcHBlbmQiCisKK0JCRklMRV9DT0xMRUNUSU9OUyArPSAibWV0YS1sYXllcklOVCIKK0JCRklMRV9QQVRURVJOX21ldGEtbGF5ZXJJTlQgOj0gIl4ke0xBWUVSRElSfS8iCitCQkZJTEVfUFJJT1JJVFlfbWV0YS1sYXllcklOVCA9ICI2IgorIiIiCisgICAgcmVjaXBlID0gIiIiCitMSUNFTlNFPSJDTE9TRUQiCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitweXRob24gZG9fYnVpbGQoKSB7CisgICAgYmIucGxhaW4oJ0J1aWxkaW5nIC4uLicpCit9CithZGR0YXNrIGJ1aWxkCisiIiIKKyAgICBhcHBlbmQgPSAiIiIKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKKworU1JDX1VSSV9hcHBlbmQgPSAiIGZpbGU6Ly9hcHBlbmR0ZXN0LnR4dCIKKworc3lzcm9vdF9zdGFnZV9hbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vYXBwZW5kdGVzdC50eHQgJHtTWVNST09UX0RFU1RESVJ9LworfQorCisiIiIKKworICAgIGFwcGVuZDIgPSAiIiIKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKKworU1JDX1VSSV9hcHBlbmQgKz0gImZpbGU6Ly9hcHBlbmR0ZXN0LnR4dCIKKyIiIgorICAgIGxheWVyYXBwZW5kID0gIkJCTEFZRVJTICs9IFwiQ09SRUJBU0UvbWV0YS1sYXllcnRlc3QwIENPUkVCQVNFL21ldGEtbGF5ZXJ0ZXN0MSBDT1JFQkFTRS9tZXRhLWxheWVydGVzdDJcIiIKKworICAgIGRlZiB0ZWFyRG93bkxvY2FsKHNlbGYpOgorICAgICAgICBmdG9vbHMucmVtb3ZlX2Zyb21fZmlsZShzZWxmLmJ1aWxkZGlyICsgIi9jb25mL2JibGF5ZXJzLmNvbmYiLCBzZWxmLmxheWVyYXBwZW5kLnJlcGxhY2UoIkNPUkVCQVNFIiwgc2VsZi5idWlsZGRpciArICIvLi4iKSkKKworICAgIEB0ZXN0Y2FzZSgxMTk2KQorICAgIGRlZiB0ZXN0X2xheWVyX2FwcGVuZHMoc2VsZik6CisgICAgICAgIGNvcmViYXNlID0gZ2V0X2JiX3ZhcigiQ09SRUJBU0UiKQorICAgICAgICBzdGFnaW5nZGlyID0gZ2V0X2JiX3ZhcigiU1RBR0lOR19ESVJfVEFSR0VUIikKKyAgICAgICAgZm9yIGwgaW4gWyIwIiwgIjEiLCAiMiJdOgorICAgICAgICAgICAgbGF5ZXIgPSBvcy5wYXRoLmpvaW4oY29yZWJhc2UsICJtZXRhLWxheWVydGVzdCIgKyBsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhsYXllcikpCisgICAgICAgICAgICBvcy5ta2RpcihsYXllcikKKyAgICAgICAgICAgIG9zLm1rZGlyKGxheWVyICsgIi9jb25mIikKKyAgICAgICAgICAgIHdpdGggb3BlbihsYXllciArICIvY29uZi9sYXllci5jb25mIiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5sYXllcmNvbmYucmVwbGFjZSgiSU5UIiwgbCkpCisgICAgICAgICAgICBvcy5ta2RpcihsYXllciArICIvcmVjaXBlcy10ZXN0IikKKyAgICAgICAgICAgIGlmIGwgPT0gIjAiOgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihsYXllciArICIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdC5iYiIsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLnJlY2lwZSkKKyAgICAgICAgICAgIGVsaWYgbCA9PSAiMSI6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0LmJiYXBwZW5kIiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYuYXBwZW5kKQorICAgICAgICAgICAgICAgIG9zLm1rZGlyKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0IikKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obGF5ZXIgKyAiL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QvYXBwZW5kdGVzdC50eHQiLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIkxheWVyIDEgdGVzdCIpCisgICAgICAgICAgICBlbGlmIGwgPT0gIjIiOgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihsYXllciArICIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdC5iYmFwcGVuZCIsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLmFwcGVuZDIpCisgICAgICAgICAgICAgICAgb3MubWtkaXIobGF5ZXIgKyAiL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QiKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihsYXllciArICIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdC9hcHBlbmR0ZXN0LnR4dCIsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiTGF5ZXIgMiB0ZXN0IikKKyAgICAgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAobGF5ZXIpCisgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShzZWxmLmJ1aWxkZGlyICsgIi9jb25mL2JibGF5ZXJzLmNvbmYiLCBzZWxmLmxheWVyYXBwZW5kLnJlcGxhY2UoIkNPUkVCQVNFIiwgc2VsZi5idWlsZGRpciArICIvLi4iKSkKKyAgICAgICAgYml0YmFrZSgibGF5ZXJhcHBlbmR0ZXN0IikKKyAgICAgICAgZGF0YSA9IGZ0b29scy5yZWFkX2ZpbGUoc3RhZ2luZ2RpciArICIvYXBwZW5kdGVzdC50eHQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICJMYXllciAyIHRlc3QiKQorICAgICAgICBvcy5yZW1vdmUoY29yZWJhc2UgKyAiL21ldGEtbGF5ZXJ0ZXN0Mi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0L2FwcGVuZHRlc3QudHh0IikKKyAgICAgICAgYml0YmFrZSgibGF5ZXJhcHBlbmR0ZXN0IikKKyAgICAgICAgZGF0YSA9IGZ0b29scy5yZWFkX2ZpbGUoc3RhZ2luZ2RpciArICIvYXBwZW5kdGVzdC50eHQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICJMYXllciAxIHRlc3QiKQorICAgICAgICB3aXRoIG9wZW4oY29yZWJhc2UgKyAiL21ldGEtbGF5ZXJ0ZXN0Mi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0L2FwcGVuZHRlc3QudHh0IiwgInciKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiTGF5ZXIgMiB0ZXN0IikKKyAgICAgICAgYml0YmFrZSgibGF5ZXJhcHBlbmR0ZXN0IikKKyAgICAgICAgZGF0YSA9IGZ0b29scy5yZWFkX2ZpbGUoc3RhZ2luZ2RpciArICIvYXBwZW5kdGVzdC50eHQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICJMYXllciAyIHRlc3QiKQorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9saWMtY2hlY2tzdW0ucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvbGljLWNoZWNrc3VtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkM2I5YTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvbGljLWNoZWNrc3VtLnB5CkBAIC0wLDAgKzEsMzEgQEAKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCisKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IGJpdGJha2UKK2Zyb20gb2VxYS51dGlscyBpbXBvcnQgQ29tbWFuZEVycm9yCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKKworY2xhc3MgTGljZW5zZVRlc3RzKG9lU2VsZlRlc3QpOgorCisgICAgIyBWZXJpZnkgdGhhdCBjaGFuZ2luZyBhIGxpY2Vuc2UgZmlsZSB0aGF0IGhhcyBhbiBhYnNvbHV0ZSBwYXRoIGNhdXNlcworICAgICMgdGhlIGxpY2Vuc2UgcWEgdG8gZmFpbCBkdWUgdG8gYSBtaXNtYXRjaGVkIG1kNXN1bS4KKyAgICBAdGVzdGNhc2UoMTE5NykKKyAgICBkZWYgdGVzdF9ub25tYXRjaGluZ19jaGVja3N1bShzZWxmKToKKyAgICAgICAgYml0YmFrZV9jbWQgPSAnLWMgY29uZmlndXJlIGVtcHR5dGVzdCcKKyAgICAgICAgZXJyb3JfbXNnID0gJ0VSUk9SOiBlbXB0eXRlc3Q6IFRoZSBuZXcgbWQ1IGNoZWNrc3VtIGlzIDhkNzc3ZjM4NWQzZGZlYzg4MTVkMjBmNzQ5NjAyNmRjJworCisgICAgICAgIGxpY19maWxlLCBsaWNfcGF0aCA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICBvcy5jbG9zZShsaWNfZmlsZSkKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChsaWNfcGF0aCkKKworICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygnZW1wdHl0ZXN0JywgJ0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiJykKKyAgICAgICAgc2VsZi5hcHBlbmRfcmVjaXBlaW5jKCdlbXB0eXRlc3QnLCAnTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJXM7bWQ1PWQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlIicgJSBsaWNfcGF0aCkKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZShiaXRiYWtlX2NtZCkKKworICAgICAgICB3aXRoIG9wZW4obGljX3BhdGgsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoImRhdGEiKQorCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoYml0YmFrZV9jbWQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgaWYgZXJyb3JfbXNnIG5vdCBpbiByZXN1bHQub3V0cHV0OgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IocmVzdWx0Lm91dHB1dCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9vZXNjcmlwdHMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvb2VzY3JpcHRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxY2Q1MDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvb2VzY3JpcHRzLnB5CkBAIC0wLDAgKzEsNTQgQEAKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnNlbGZ0ZXN0LmJ1aWxkaGlzdG9yeSBpbXBvcnQgQnVpbGRoaXN0b3J5QmFzZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBDb21tYW5kLCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF90ZXN0X2xheWVyCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKKworY2xhc3MgVGVzdFNjcmlwdHMob2VTZWxmVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMzAwKQorICAgIGRlZiB0ZXN0X2NsZWFudXBfd29ya2RpcihzZWxmKToKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShnZXRfYmJfdmFyKCdXT1JLRElSJywgJ2d6aXAnKSkKKyAgICAgICAgb2xkX3ZlcnNpb25fcmVjaXBlID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoJ0NPUkVCQVNFJyksICdtZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuMy4xMi5iYicpCisgICAgICAgIG9sZF92ZXJzaW9uID0gJzEuMy4xMicKKyAgICAgICAgYml0YmFrZSgiLWNjbGVhbnNzdGF0ZSBnemlwIikKKyAgICAgICAgYml0YmFrZSgiLWNjbGVhbnNzdGF0ZSAtYiAlcyIgJSBvbGRfdmVyc2lvbl9yZWNpcGUpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGdldF9iYl92YXIoJ1dPUktESVInLCAiLWIgJXMiICUgb2xkX3ZlcnNpb25fcmVjaXBlKSk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGdldF9iYl92YXIoJ1dPUktESVInLCAiLWIgJXMiICUgb2xkX3ZlcnNpb25fcmVjaXBlKSkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZ2V0X2JiX3ZhcignV09SS0RJUicsICdnemlwJykpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShnZXRfYmJfdmFyKCdXT1JLRElSJywgJ2d6aXAnKSkKKworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKKyAgICAgICAgICAgIGluaXRpYWxfY29udGVudHMgPSBvcy5saXN0ZGlyKHBhdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbml0aWFsX2NvbnRlbnRzID0gW10KKworICAgICAgICBiaXRiYWtlKCdnemlwJykKKyAgICAgICAgaW50ZXJtZWRpYXJ5X2NvbnRlbnRzID0gb3MubGlzdGRpcihwYXRoKQorICAgICAgICBiaXRiYWtlKCItYiAlcyIgJSBvbGRfdmVyc2lvbl9yZWNpcGUpCisgICAgICAgIHJ1bkNtZCgnY2xlYW51cC13b3JrZGlyJykKKyAgICAgICAgcmVtYWluaW5nX2NvbnRlbnRzID0gb3MubGlzdGRpcihwYXRoKQorCisgICAgICAgIGV4cGVjdGVkX2NvbnRlbnRzID0gW3ggZm9yIHggaW4gaW50ZXJtZWRpYXJ5X2NvbnRlbnRzIGlmIHggbm90IGluIGluaXRpYWxfY29udGVudHNdCisgICAgICAgIHJlbWFpbmluZ19ub3RfZXhwZWN0ZWQgPSBbeCBmb3IgeCBpbiByZW1haW5pbmdfY29udGVudHMgaWYgeCBub3QgaW4gZXhwZWN0ZWRfY29udGVudHNdCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVtYWluaW5nX25vdF9leHBlY3RlZCwgbXNnPSJOb3QgYWxsIG5lY2Vzc2FyeSBjb250ZW50IGhhcyBiZWVuIGRlbGV0ZWQgZnJvbSAlczogJXMiICUgKHBhdGgsICcsICcuam9pbihtYXAoc3RyLCByZW1haW5pbmdfbm90X2V4cGVjdGVkKSkpKQorICAgICAgICBleHBlY3RlZF9ub3RfcmVtYWluaW5nID0gW3ggZm9yIHggaW4gZXhwZWN0ZWRfY29udGVudHMgaWYgeCBub3QgaW4gcmVtYWluaW5nX2NvbnRlbnRzXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV4cGVjdGVkX25vdF9yZW1haW5pbmcsIG1zZz0iVGhlIHNjcmlwdCByZW1vdmVkIGV4dHJhIGNvbnRlbnRzIGZyb20gJXM6ICVzIiAlIChwYXRoLCAnLCAnLmpvaW4obWFwKHN0ciwgZXhwZWN0ZWRfbm90X3JlbWFpbmluZykpKSkKKworY2xhc3MgQnVpbGRoaXN0b3J5RGlmZlRlc3RzKEJ1aWxkaGlzdG9yeUJhc2UpOgorCisgICAgQHRlc3RjYXNlKDI5NSkKKyAgICBkZWYgdGVzdF9idWlsZGhpc3RvcnlfZGlmZihzZWxmKToKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignY2xlYW51cC13b3JrZGlyJykKKyAgICAgICAgdGFyZ2V0ID0gJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnCisgICAgICAgIHNlbGYucnVuX2J1aWxkaGlzdG9yeV9vcGVyYXRpb24odGFyZ2V0LCB0YXJnZXRfY29uZmlnPSJQUiA9IFwicjFcIiIsIGNoYW5nZV9iaF9sb2NhdGlvbj1UcnVlKQorICAgICAgICBzZWxmLnJ1bl9idWlsZGhpc3Rvcnlfb3BlcmF0aW9uKHRhcmdldCwgdGFyZ2V0X2NvbmZpZz0iUFIgPSBcInIwXCIiLCBjaGFuZ2VfYmhfbG9jYXRpb249RmFsc2UsIGV4cGVjdF9lcnJvcj1UcnVlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoImJ1aWxkaGlzdG9yeS1kaWZmIC1wICVzIiAlIGdldF9iYl92YXIoJ0JVSUxESElTVE9SWV9ESVInKSkKKyAgICAgICAgZXhwZWN0ZWRfb3V0cHV0ID0gJ1BSIGNoYW5nZWQgZnJvbSAicjEiIHRvICJyMCInCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RlZF9vdXRwdXQgaW4gcmVzdWx0Lm91dHB1dCwgbXNnPSJEaWQgbm90IGZpbmQgZXhwZWN0ZWQgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3BrZ2RhdGEucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvcGtnZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzhiMDNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3BrZ2RhdGEucHkKQEAgLTAsMCArMSwyMjYgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgZm5tYXRjaAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBPZVBrZ2RhdGFVdGlsVGVzdHMob2VTZWxmVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAjIEVuc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBkYXRhIGluIHBrZ2RhdGEKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInNlbGZ0ZXN0IikKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1J1bm5pbmcgYml0YmFrZSB0byBnZW5lcmF0ZSBwa2dkYXRhJykKKyAgICAgICAgYml0YmFrZSgnZ2xpYmMgYnVzeWJveCB6bGliIGJhc2gnKQorCisgICAgQHRlc3RjYXNlKDEyMDMpCisgICAgZGVmIHRlc3RfbG9va3VwX3BrZyhzZWxmKToKKyAgICAgICAgIyBGb3J3YXJkIHRlc3RzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgImdsaWJjIGJ1c3lib3giJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnbGliYzZcbmJ1c3lib3gnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcGtnIHpsaWItZGV2JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnbGliei1kZXYnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcGtnIG5vbmV4aXN0ZW50cGtnJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDEsICJTdGF0dXMgZGlmZmVyZW50IHRoYW4gMS4gb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdFUlJPUjogVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBjb3VsZCBub3QgYmUgZm91bmQ6IG5vbmV4aXN0ZW50cGtnJykKKyAgICAgICAgIyBSZXZlcnNlIHRlc3RzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgLXIgImxpYmM2IGJ1c3lib3giJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnZ2xpYmNcbmJ1c3lib3gnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcGtnIC1yIGxpYnotZGV2JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnemxpYi1kZXYnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcGtnIC1yIG5vbmV4aXN0ZW50cGtnJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDEsICJTdGF0dXMgZGlmZmVyZW50IHRoYW4gMS4gb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdFUlJPUjogVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBjb3VsZCBub3QgYmUgZm91bmQ6IG5vbmV4aXN0ZW50cGtnJykKKworICAgIEB0ZXN0Y2FzZSgxMjA1KQorICAgIGRlZiB0ZXN0X3JlYWRfdmFsdWUoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIHJlYWQtdmFsdWUgUE4gbGliejEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICd6bGliJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgcmVhZC12YWx1ZSBQS0dTSVpFIGJhc2gnKQorICAgICAgICBwa2dzaXplID0gaW50KHJlc3VsdC5vdXRwdXQuc3RyaXAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHBrZ3NpemUsIDEsICJTaXplIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMS4gJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTk4KQorICAgIGRlZiB0ZXN0X2ZpbmRfcGF0aChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgZmluZC1wYXRoIC9saWIvbGliYy5zby42JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnZ2xpYmM6IC9saWIvbGliYy5zby42JykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgZmluZC1wYXRoIC9iaW4vYmFzaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ2Jhc2g6IC9iaW4vYmFzaCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGZpbmQtcGF0aCAvbm90L2V4aXN0JywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDEsICJTdGF0dXMgZGlmZmVyZW50IHRoYW4gMS4gb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdFUlJPUjogVW5hYmxlIHRvIGZpbmQgYW55IHBhY2thZ2UgcHJvZHVjaW5nIHBhdGggL25vdC9leGlzdCcpCisKKyAgICBAdGVzdGNhc2UoMTIwNCkKKyAgICBkZWYgdGVzdF9sb29rdXBfcmVjaXBlKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcmVjaXBlICJsaWJjNi1zdGF0aWNkZXYgYnVzeWJveCInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdnbGliY1xuYnVzeWJveCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1yZWNpcGUgbGliei1kYmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICd6bGliJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXJlY2lwZSBub25leGlzdGVudHBrZycsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAxLCAiU3RhdHVzIGRpZmZlcmVudCB0aGFuIDEuIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnRVJST1I6IFRoZSBmb2xsb3dpbmcgcGFja2FnZXMgY291bGQgbm90IGJlIGZvdW5kOiBub25leGlzdGVudHBrZycpCisKKyAgICBAdGVzdGNhc2UoMTIwMikKKyAgICBkZWYgdGVzdF9saXN0X3BrZ3Moc2VsZik6CisgICAgICAgICMgTm8gYXJndW1lbnRzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncycpCisgICAgICAgIHBrZ2xpc3QgPSByZXN1bHQub3V0cHV0LnNwbGl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignZ2xpYmMtdXRpbHMnLCBwa2dsaXN0LCAiTGlzdGVkIHBhY2thZ2VzOiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRldicsIHBrZ2xpc3QsICJMaXN0ZWQgcGFja2FnZXM6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgTm8gcGtnc3BlYywgcnVudGltZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZ3MgLXInKQorICAgICAgICBwa2dsaXN0ID0gcmVzdWx0Lm91dHB1dC5zcGxpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYmM2LXV0aWxzJywgcGtnbGlzdCwgIkxpc3RlZCBwYWNrYWdlczogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kZXYnLCBwa2dsaXN0LCAiTGlzdGVkIHBhY2thZ2VzOiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAjIFdpdGggcmVjaXBlIHNwZWNpZmllZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZ3MgLXAgemxpYicpCisgICAgICAgIHBrZ2xpc3QgPSBzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwa2dsaXN0LnJlbW92ZSgnemxpYi1wdGVzdCcpICMgaW4gY2FzZSBwdGVzdCBpcyBkaXNhYmxlZAorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dsaXN0LCBbJ3psaWInLCAnemxpYi1kYmcnLCAnemxpYi1kZXYnLCAnemxpYi1kb2MnLCAnemxpYi1zdGF0aWNkZXYnXSwgIlBhY2thZ2VzIGxpc3RlZCBhZnRlciByZW1vdmU6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgV2l0aCByZWNpcGUgc3BlY2lmaWVkLCBydW50aW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcCB6bGliIC1yJykKKyAgICAgICAgcGtnbGlzdCA9IHNvcnRlZChyZXN1bHQub3V0cHV0LnNwbGl0KCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBrZ2xpc3QucmVtb3ZlKCdsaWJ6LXB0ZXN0JykgIyBpbiBjYXNlIHB0ZXN0IGlzIGRpc2FibGVkCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ2xpc3QsIFsnbGliei1kYmcnLCAnbGliei1kZXYnLCAnbGliei1kb2MnLCAnbGliei1zdGF0aWNkZXYnLCAnbGliejEnXSwgIlBhY2thZ2VzIGxpc3RlZCBhZnRlciByZW1vdmU6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgV2l0aCByZWNpcGUgc3BlY2lmaWVkIGFuZCB1bnBhY2thZ2VkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcCB6bGliIC11JykKKyAgICAgICAgcGtnbGlzdCA9IHNvcnRlZChyZXN1bHQub3V0cHV0LnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItbG9jYWxlJywgcGtnbGlzdCwgIkxpc3RlZCBwYWNrYWdlczogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBXaXRoIHJlY2lwZSBzcGVjaWZpZWQgYW5kIHVucGFja2FnZWQsIHJ1bnRpbWUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1wIHpsaWIgLXUgLXInKQorICAgICAgICBwa2dsaXN0ID0gc29ydGVkKHJlc3VsdC5vdXRwdXQuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1sb2NhbGUnLCBwa2dsaXN0LCAiTGlzdGVkIHBhY2thZ2VzOiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAjIFdpdGggcmVjaXBlIHNwZWNpZmllZCBhbmQgcGtnc3BlYworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZ3MgLXAgemxpYiAiKi1kKiInKQorICAgICAgICBwa2dsaXN0ID0gc29ydGVkKHJlc3VsdC5vdXRwdXQuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dsaXN0LCBbJ3psaWItZGJnJywgJ3psaWItZGV2JywgJ3psaWItZG9jJ10sICJQYWNrYWdlcyBsaXN0ZWQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgV2l0aCByZWNpcGUgc3BlY2lmaWVkIGFuZCBwa2dzcGVjLCBydW50aW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcCB6bGliIC1yICIqLWQqIicpCisgICAgICAgIHBrZ2xpc3QgPSBzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ2xpc3QsIFsnbGliei1kYmcnLCAnbGliei1kZXYnLCAnbGliei1kb2MnXSwgIlBhY2thZ2VzIGxpc3RlZDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMjAxKQorICAgIGRlZiB0ZXN0X2xpc3RfcGtnX2ZpbGVzKHNlbGYpOgorICAgICAgICBkZWYgc3BsaXRvdXRwdXQob3V0cHV0KToKKyAgICAgICAgICAgIGZpbGVzID0ge30KKyAgICAgICAgICAgIGN1cnBrZyA9IE5vbmUKKyAgICAgICAgICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdcdCcpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY3VycGtnLCAnVW5leHBlY3RlZCBub24tcGFja2FnZSBsaW5lOlxuJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgZmlsZXNbY3VycGtnXS5hcHBlbmQobGluZS5zdHJpcCgpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5lLnJzdHJpcCgpLmVuZHN3aXRoKCc6JyksICdJbnZhbGlkIHBhY2thZ2UgbGluZSBpbiBvdXRwdXQ6XG4lcycgJSBsaW5lKQorICAgICAgICAgICAgICAgICAgICBjdXJwa2cgPSBsaW5lLnNwbGl0KCc6JylbMF0KKyAgICAgICAgICAgICAgICAgICAgZmlsZXNbY3VycGtnXSA9IFtdCisgICAgICAgICAgICByZXR1cm4gZmlsZXMKKyAgICAgICAgYmFzZV9saWJkaXIgPSBnZXRfYmJfdmFyKCdiYXNlX2xpYmRpcicpCisgICAgICAgIGxpYmRpciA9IGdldF9iYl92YXIoJ2xpYmRpcicpCisgICAgICAgIGluY2x1ZGVkaXIgPSBnZXRfYmJfdmFyKCdpbmNsdWRlZGlyJykKKyAgICAgICAgbWFuZGlyID0gZ2V0X2JiX3ZhcignbWFuZGlyJykKKyAgICAgICAgIyBUZXN0IHJlY2lwZS1zcGFjZSBwYWNrYWdlIG5hbWUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2ctZmlsZXMgemxpYi1kZXYgemxpYi1kb2MnKQorICAgICAgICBmaWxlcyA9IHNwbGl0b3V0cHV0KHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItZGV2JywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItZG9jJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGluY2x1ZGVkaXIsICd6bGliLmgnKSwgZmlsZXNbJ3psaWItZGV2J10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKG1hbmRpciwgJ21hbjMvemxpYi4zJyksIGZpbGVzWyd6bGliLWRvYyddKQorICAgICAgICAjIFRlc3QgcnVudGltZSBwYWNrYWdlIG5hbWUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2ctZmlsZXMgLXIgbGliejEgbGliei1kZXYnKQorICAgICAgICBmaWxlcyA9IHNwbGl0b3V0cHV0KHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnoxJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGV2JywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4oZmlsZXNbJ2xpYnoxJ10pLCAxKQorICAgICAgICBsaWJzcGVjID0gb3MucGF0aC5qb2luKGJhc2VfbGliZGlyLCAnbGliei5zby4xLionKQorICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciBmaWxlaXRlbSBpbiBmaWxlc1snbGliejEnXToKKyAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaGNhc2UoZmlsZWl0ZW0sIGxpYnNwZWMpOgorICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCwgJ0NvdWxkIG5vdCBmaW5kIHpsaWIgbGlicmFyeSBmaWxlICVzIGluIGxpYnoxIHBhY2thZ2UgZmlsZSBsaXN0OiAlcycgJSAobGlic3BlYywgZmlsZXNbJ2xpYnoxJ10pKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihpbmNsdWRlZGlyLCAnemxpYi5oJyksIGZpbGVzWydsaWJ6LWRldiddKQorICAgICAgICAjIFRlc3QgcmVjaXBlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtnLWZpbGVzIC1wIHpsaWInKQorICAgICAgICBmaWxlcyA9IHNwbGl0b3V0cHV0KHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItZGJnJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItZG9jJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItZGV2JywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItc3RhdGljZGV2JywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWInLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignemxpYi1sb2NhbGUnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyAoaWdub3JlIHB0ZXN0LCBtaWdodCBub3QgYmUgdGhlcmUgZGVwZW5kaW5nIG9uIGNvbmZpZykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snemxpYi1kZXYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ3psaWItZG9jJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGxpYmRpciwgJ2xpYnouYScpLCBmaWxlc1snemxpYi1zdGF0aWNkZXYnXSkKKyAgICAgICAgIyBUZXN0IHJlY2lwZSwgcnVudGltZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyAtcCB6bGliIC1yJykKKyAgICAgICAgZmlsZXMgPSBzcGxpdG91dHB1dChyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRiZycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRvYycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LXN0YXRpY2RldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6MScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdsaWJ6LWxvY2FsZScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihpbmNsdWRlZGlyLCAnemxpYi5oJyksIGZpbGVzWydsaWJ6LWRldiddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihtYW5kaXIsICdtYW4zL3psaWIuMycpLCBmaWxlc1snbGliei1kb2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obGliZGlyLCAnbGliei5hJyksIGZpbGVzWydsaWJ6LXN0YXRpY2RldiddKQorICAgICAgICAjIFRlc3QgcmVjaXBlLCB1bnBhY2thZ2VkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtnLWZpbGVzIC1wIHpsaWIgLXUnKQorICAgICAgICBmaWxlcyA9IHNwbGl0b3V0cHV0KHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItZGJnJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItZG9jJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItZGV2JywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItc3RhdGljZGV2JywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWInLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1sb2NhbGUnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkgIyB0aGlzIGlzIHRoZSBrZXkgb25lCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGluY2x1ZGVkaXIsICd6bGliLmgnKSwgZmlsZXNbJ3psaWItZGV2J10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKG1hbmRpciwgJ21hbjMvemxpYi4zJyksIGZpbGVzWyd6bGliLWRvYyddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihsaWJkaXIsICdsaWJ6LmEnKSwgZmlsZXNbJ3psaWItc3RhdGljZGV2J10pCisgICAgICAgICMgVGVzdCByZWNpcGUsIHJ1bnRpbWUsIHVucGFja2FnZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2ctZmlsZXMgLXAgemxpYiAtciAtdScpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kYmcnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kb2MnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1zdGF0aWNkZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliejEnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1sb2NhbGUnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkgIyB0aGlzIGlzIHRoZSBrZXkgb25lCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGluY2x1ZGVkaXIsICd6bGliLmgnKSwgZmlsZXNbJ2xpYnotZGV2J10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKG1hbmRpciwgJ21hbjMvemxpYi4zJyksIGZpbGVzWydsaWJ6LWRvYyddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihsaWJkaXIsICdsaWJ6LmEnKSwgZmlsZXNbJ2xpYnotc3RhdGljZGV2J10pCisKKyAgICBAdGVzdGNhc2UoMTIwMCkKKyAgICBkZWYgdGVzdF9nbG9iKHNlbGYpOgorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3BrZ2RhdGFxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgcGtnbGlzdGZpbGUgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ3BrZ2xpc3QnKQorICAgICAgICB3aXRoIG9wZW4ocGtnbGlzdGZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ2xpYmM2XG4nKQorICAgICAgICAgICAgZi53cml0ZSgnbGliejFcbicpCisgICAgICAgICAgICBmLndyaXRlKCdidXN5Ym94XG4nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBnbG9iICVzICIqLWRldiInICUgcGtnbGlzdGZpbGUpCisgICAgICAgIGRlc2lyZWRyZXN1bHQgPSBbJ2xpYmM2LWRldicsICdsaWJ6LWRldicsICdidXN5Ym94LWRldiddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHJlc3VsdC5vdXRwdXQuc3BsaXQoKSksIHNvcnRlZChkZXNpcmVkcmVzdWx0KSkKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIHNob3VsZCBub3QgZXJyb3IgKGJlY2F1c2Ugd2hlbiB3ZSB1c2UgdGhpcyBkdXJpbmcgcm9vdGZzIGNvbnN0cnVjdGlvbiwgc29tZXRpbWVzIHRoZSBjb21wbGVtZW50YXJ5IHBhY2thZ2Ugd29uJ3QgZXhpc3QpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGdsb2IgJXMgIiotbm9uZXhpc3RlbnQiJyAlIHBrZ2xpc3RmaWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICcnKQorICAgICAgICAjIFRlc3QgZXhjbHVkZSBvcHRpb24KKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgZ2xvYiAlcyAiKi1kZXYgKi1kYmciIC14ICJebGlieiInICUgcGtnbGlzdGZpbGUpCisgICAgICAgIHJlc3VsdGxpc3QgPSByZXN1bHQub3V0cHV0LnNwbGl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbGliei1kZXYnLCByZXN1bHRsaXN0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdsaWJ6LWRiZycsIHJlc3VsdGxpc3QpCisKKyAgICBAdGVzdGNhc2UoMTIwNikKKyAgICBkZWYgdGVzdF9zcGVjaWZ5X3BrZ2RhdGFkaXIoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIC1wICVzIGxvb2t1cC1wa2cgZ2xpYmMnICUgZ2V0X2JiX3ZhcignUEtHREFUQV9ESVInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnbGliYzYnKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3Byc2VydmljZS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9wcnNlcnZpY2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4N2ZiZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9wcnNlcnZpY2UucHkKQEAgLTAsMCArMSwxMjEgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgZGF0ZXRpbWUKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKKworY2xhc3MgQml0YmFrZVByVGVzdHMob2VTZWxmVGVzdCk6CisKKyAgICBkZWYgZ2V0X3ByX3ZlcnNpb24oc2VsZiwgcGFja2FnZV9uYW1lKToKKyAgICAgICAgcGtnZGF0YV9kaXIgPSBnZXRfYmJfdmFyKCdQS0dEQVRBX0RJUicpCisgICAgICAgIHBhY2thZ2VfZGF0YV9maWxlID0gb3MucGF0aC5qb2luKHBrZ2RhdGFfZGlyLCAncnVudGltZScsIHBhY2thZ2VfbmFtZSkKKyAgICAgICAgcGFja2FnZV9kYXRhID0gZnRvb2xzLnJlYWRfZmlsZShwYWNrYWdlX2RhdGFfZmlsZSkKKyAgICAgICAgZmluZF9wciA9IHJlLnNlYXJjaCgiUEtHUjogclswLTldK1wuKFswLTldKykiLCBwYWNrYWdlX2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX3ByLCAiTm8gUEtHIHJldmlzaW9uIGZvdW5kIGluICVzIiAlIHBhY2thZ2VfZGF0YV9maWxlKQorICAgICAgICByZXR1cm4gaW50KGZpbmRfcHIuZ3JvdXAoMSkpCisKKyAgICBkZWYgZ2V0X3Rhc2tfc3RhbXAoc2VsZiwgcGFja2FnZV9uYW1lLCByZWNpcGVfdGFzayk6CisgICAgICAgIHN0YW1wZGF0YSA9IGdldF9iYl92YXIoJ1NUQU1QJywgdGFyZ2V0PXBhY2thZ2VfbmFtZSkuc3BsaXQoJy8nKQorICAgICAgICBwcmVmaXggPSBzdGFtcGRhdGFbLTFdCisgICAgICAgIHBhY2thZ2Vfc3RhbXBzX3BhdGggPSAiLyIuam9pbihzdGFtcGRhdGFbOi0xXSkKKyAgICAgICAgc3RhbXBzID0gW10KKyAgICAgICAgZm9yIHN0YW1wIGluIG9zLmxpc3RkaXIocGFja2FnZV9zdGFtcHNfcGF0aCk6CisgICAgICAgICAgICBmaW5kX3N0YW1wID0gcmUubWF0Y2goIiVzXC4lc1wuKFthLXowLTldezMyfSkiICUgKHByZWZpeCwgcmVjaXBlX3Rhc2spLCBzdGFtcCkKKyAgICAgICAgICAgIGlmIGZpbmRfc3RhbXA6CisgICAgICAgICAgICAgICAgc3RhbXBzLmFwcGVuZChmaW5kX3N0YW1wLmdyb3VwKDEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxlbihzdGFtcHMpID09IDAsIG1zZz0iQ291bmQgbm90IGZpbmQgc3RhbXAgZm9yIHRhc2sgJXMgZm9yIHJlY2lwZSAlcyIgJSAocmVjaXBlX3Rhc2ssIHBhY2thZ2VfbmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGVuKHN0YW1wcykgPiAxLCBtc2c9IkZvdW5kIG11bHRpcGxlICVzIHN0YW1wcyBmb3IgdGhlICVzIHJlY2lwZSBpbiB0aGUgJXMgZGlyZWN0b3J5LiIgJSAocmVjaXBlX3Rhc2ssIHBhY2thZ2VfbmFtZSwgcGFja2FnZV9zdGFtcHNfcGF0aCkpCisgICAgICAgIHJldHVybiBzdHIoc3RhbXBzWzBdKQorCisgICAgZGVmIGluY3JlbWVudF9wYWNrYWdlX3ByKHNlbGYsIHBhY2thZ2VfbmFtZSk6CisgICAgICAgIGluY19kYXRhID0gImRvX3BhY2thZ2VfYXBwZW5kKCkge1xuYmIuYnVpbGQuZXhlY19mdW5jKCdkb190ZXN0X3Byc2VydicsIGQpXG59XG5kb190ZXN0X3Byc2VydigpIHtcbmVjaG8gXCJUaGUgY3VycmVudCBkYXRlIGlzOiAlc1wiXG59IiAlIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpCisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKHBhY2thZ2VfbmFtZSwgaW5jX2RhdGEpCisgICAgICAgIGJpdGJha2UoIi1jY2xlYW5zc3RhdGUgJXMiICUgcGFja2FnZV9uYW1lKQorICAgICAgICByZXMgPSBiaXRiYWtlKHBhY2thZ2VfbmFtZSwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmRlbGV0ZV9yZWNpcGVpbmMocGFja2FnZV9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDAsIG1zZz1yZXMub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIk5PVEU6IFN0YXJ0ZWQgUFJTZXJ2ZXIgd2l0aCBEQmZpbGUiIGluIHJlcy5vdXRwdXQsIG1zZz1yZXMub3V0cHV0KQorCisgICAgZGVmIGNvbmZpZ19wcl90ZXN0cyhzZWxmLCBwYWNrYWdlX25hbWUsIHBhY2thZ2VfdHlwZT0ncnBtJywgcHJfc29ja2V0PSdsb2NhbGhvc3Q6MCcpOgorICAgICAgICBjb25maWdfcGFja2FnZV9kYXRhID0gJ1BBQ0tBR0VfQ0xBU1NFUyA9ICJwYWNrYWdlXyVzIicgJSBwYWNrYWdlX3R5cGUKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoY29uZmlnX3BhY2thZ2VfZGF0YSkKKyAgICAgICAgY29uZmlnX3NlcnZlcl9kYXRhID0gJ1BSU0VSVl9IT1NUID0gIiVzIicgJSBwcl9zb2NrZXQKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGNvbmZpZ19zZXJ2ZXJfZGF0YSkKKworICAgIGRlZiBydW5fdGVzdF9wcl9zZXJ2aWNlKHNlbGYsIHBhY2thZ2VfbmFtZSwgcGFja2FnZV90eXBlPSdycG0nLCB0cmFja190YXNrPSdkb19wYWNrYWdlJywgcHJfc29ja2V0PSdsb2NhbGhvc3Q6MCcpOgorICAgICAgICBzZWxmLmNvbmZpZ19wcl90ZXN0cyhwYWNrYWdlX25hbWUsIHBhY2thZ2VfdHlwZSwgcHJfc29ja2V0KQorCisgICAgICAgIHNlbGYuaW5jcmVtZW50X3BhY2thZ2VfcHIocGFja2FnZV9uYW1lKQorICAgICAgICBwcl8xID0gc2VsZi5nZXRfcHJfdmVyc2lvbihwYWNrYWdlX25hbWUpCisgICAgICAgIHN0YW1wXzEgPSBzZWxmLmdldF90YXNrX3N0YW1wKHBhY2thZ2VfbmFtZSwgdHJhY2tfdGFzaykKKworICAgICAgICBzZWxmLmluY3JlbWVudF9wYWNrYWdlX3ByKHBhY2thZ2VfbmFtZSkKKyAgICAgICAgcHJfMiA9IHNlbGYuZ2V0X3ByX3ZlcnNpb24ocGFja2FnZV9uYW1lKQorICAgICAgICBzdGFtcF8yID0gc2VsZi5nZXRfdGFza19zdGFtcChwYWNrYWdlX25hbWUsIHRyYWNrX3Rhc2spCisKKyAgICAgICAgYml0YmFrZSgiLWNjbGVhbnNzdGF0ZSAlcyIgJSBwYWNrYWdlX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcl8yIC0gcHJfMSA9PSAxLCAiU3RlcCBiZXR3ZWVuIHNhbWUgcGtnLiByZXZpc2lvbiBpcyBncmVhdGVyIHRoYW4gMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFtcF8xICE9IHN0YW1wXzIsICJEaWZmZXJlbnQgcGtnIHJldi4gYnV0IHNhbWUgc3RhbXA6ICVzIiAlIHN0YW1wXzEpCisKKyAgICBkZWYgcnVuX3Rlc3RfcHJfZXhwb3J0X2ltcG9ydChzZWxmLCBwYWNrYWdlX25hbWUsIHJlcGxhY2VfY3VycmVudF9kYj1UcnVlKToKKyAgICAgICAgc2VsZi5jb25maWdfcHJfdGVzdHMocGFja2FnZV9uYW1lKQorCisgICAgICAgIHNlbGYuaW5jcmVtZW50X3BhY2thZ2VfcHIocGFja2FnZV9uYW1lKQorICAgICAgICBwcl8xID0gc2VsZi5nZXRfcHJfdmVyc2lvbihwYWNrYWdlX25hbWUpCisKKyAgICAgICAgZXhwb3J0ZWRfZGJfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnZXhwb3J0LmluYycpCisgICAgICAgIGV4cG9ydF9yZXN1bHQgPSBydW5DbWQoImJpdGJha2UtcHJzZXJ2LXRvb2wgZXhwb3J0ICVzIiAlIGV4cG9ydGVkX2RiX3BhdGgsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBvcnRfcmVzdWx0LnN0YXR1cywgMCwgbXNnPSJQUiBTZXJ2aWNlIGRhdGFiYXNlIGV4cG9ydCBmYWlsZWQ6ICVzIiAlIGV4cG9ydF9yZXN1bHQub3V0cHV0KQorCisgICAgICAgIGlmIHJlcGxhY2VfY3VycmVudF9kYjoKKyAgICAgICAgICAgIGN1cnJlbnRfZGJfcGF0aCA9IG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCdQRVJTSVNURU5UX0RJUicpLCAncHJzZXJ2LnNxbGl0ZTMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGN1cnJlbnRfZGJfcGF0aCksIG1zZz0iUGF0aCB0byBjdXJyZW50IFBSIFNlcnZpY2UgZGF0YWJhc2UgaXMgaW52YWxpZDogJXMiICUgY3VycmVudF9kYl9wYXRoKQorICAgICAgICAgICAgb3MucmVtb3ZlKGN1cnJlbnRfZGJfcGF0aCkKKworICAgICAgICBpbXBvcnRfcmVzdWx0ID0gcnVuQ21kKCJiaXRiYWtlLXByc2Vydi10b29sIGltcG9ydCAlcyIgJSBleHBvcnRlZF9kYl9wYXRoLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIG9zLnJlbW92ZShleHBvcnRlZF9kYl9wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltcG9ydF9yZXN1bHQuc3RhdHVzLCAwLCBtc2c9IlBSIFNlcnZpY2UgZGF0YWJhc2UgaW1wb3J0IGZhaWxlZDogJXMiICUgaW1wb3J0X3Jlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgc2VsZi5pbmNyZW1lbnRfcGFja2FnZV9wcihwYWNrYWdlX25hbWUpCisgICAgICAgIHByXzIgPSBzZWxmLmdldF9wcl92ZXJzaW9uKHBhY2thZ2VfbmFtZSkKKworICAgICAgICBiaXRiYWtlKCItY2NsZWFuc3N0YXRlICVzIiAlIHBhY2thZ2VfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByXzIgLSBwcl8xID09IDEsICJTdGVwIGJldHdlZW4gc2FtZSBwa2cuIHJldmlzaW9uIGlzIGdyZWF0ZXIgdGhhbiAxIikKKworICAgIEB0ZXN0Y2FzZSg5MzApCisgICAgZGVmIHRlc3RfaW1wb3J0X2V4cG9ydF9yZXBsYWNlX2RiKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX2V4cG9ydF9pbXBvcnQoJ200JykKKworICAgIEB0ZXN0Y2FzZSg5MzEpCisgICAgZGVmIHRlc3RfaW1wb3J0X2V4cG9ydF9vdmVycmlkZV9kYihzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9wcl9leHBvcnRfaW1wb3J0KCdtNCcsIHJlcGxhY2VfY3VycmVudF9kYj1GYWxzZSkKKworICAgIEB0ZXN0Y2FzZSg5MzIpCisgICAgZGVmIHRlc3RfcHJfc2VydmljZV9ycG1fYXJjaF9kZXAoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfc2VydmljZSgnbTQnLCAncnBtJywgJ2RvX3BhY2thZ2UnKQorCisgICAgQHRlc3RjYXNlKDkzNCkKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX2RlYl9hcmNoX2RlcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9wcl9zZXJ2aWNlKCdtNCcsICdkZWInLCAnZG9fcGFja2FnZScpCisKKyAgICBAdGVzdGNhc2UoOTMzKQorICAgIGRlZiB0ZXN0X3ByX3NlcnZpY2VfaXBrX2FyY2hfZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ200JywgJ2lwaycsICdkb19wYWNrYWdlJykKKworICAgIEB0ZXN0Y2FzZSg5MzUpCisgICAgZGVmIHRlc3RfcHJfc2VydmljZV9ycG1fYXJjaF9pbmRlcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9wcl9zZXJ2aWNlKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJywgJ3JwbScsICdkb19wYWNrYWdlJykKKworICAgIEB0ZXN0Y2FzZSg5MzcpCisgICAgZGVmIHRlc3RfcHJfc2VydmljZV9kZWJfYXJjaF9pbmRlcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9wcl9zZXJ2aWNlKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJywgJ2RlYicsICdkb19wYWNrYWdlJykKKworICAgIEB0ZXN0Y2FzZSg5MzYpCisgICAgZGVmIHRlc3RfcHJfc2VydmljZV9pcGtfYXJjaF9pbmRlcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9wcl9zZXJ2aWNlKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJywgJ2lwaycsICdkb19wYWNrYWdlJykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9yZWNpcGV0b29sLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3JlY2lwZXRvb2wucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM0YWQ2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9yZWNpcGV0b29sLnB5CkBAIC0wLDAgKzEsNTU0IEBACitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1cmxwYXJzZQorCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgY3JlYXRlX3RlbXBfbGF5ZXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorZnJvbSBvZXFhLnNlbGZ0ZXN0IGltcG9ydCBkZXZ0b29sCisKKwordGVtcGxheWVyZGlyID0gTm9uZQorCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGdsb2JhbCB0ZW1wbGF5ZXJkaXIKKyAgICB0ZW1wbGF5ZXJkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0ncmVjaXBldG9vbHFhJykKKyAgICBjcmVhdGVfdGVtcF9sYXllcih0ZW1wbGF5ZXJkaXIsICdzZWxmdGVzdHJlY2lwZXRvb2wnKQorICAgIHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgYWRkLWxheWVyICVzJyAlIHRlbXBsYXllcmRpcikKKworCitkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAlcycgJSB0ZW1wbGF5ZXJkaXIsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICBydW5DbWQoJ3JtIC1yZiAlcycgJSB0ZW1wbGF5ZXJkaXIpCisKKworY2xhc3MgUmVjaXBldG9vbEJhc2UoZGV2dG9vbC5EZXZ0b29sQmFzZSk6CisgICAgZGVmIHNldFVwTG9jYWwoc2VsZik6CisgICAgICAgIHNlbGYudGVtcGxheWVyZGlyID0gdGVtcGxheWVyZGlyCisgICAgICAgIHNlbGYudGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdyZWNpcGV0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYudGVtcGRpcikKKyAgICAgICAgc2VsZi50ZXN0ZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICd0ZXN0ZmlsZScpCisgICAgICAgIHdpdGggb3BlbihzZWxmLnRlc3RmaWxlLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdUZXN0IGZpbGVcbicpCisKKyAgICBkZWYgdGVhckRvd25Mb2NhbChzZWxmKToKKyAgICAgICAgcnVuQ21kKCdybSAtcmYgJXMvcmVjaXBlcy0qJyAlIHNlbGYudGVtcGxheWVyZGlyKQorCisgICAgZGVmIF90cnlfcmVjaXBldG9vbF9hcHBlbmRjbWQoc2VsZiwgY21kLCB0ZXN0cmVjaXBlLCBleHBlY3RlZGZpbGVzLCBleHBlY3RlZGxpbmVzPU5vbmUpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoY21kKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdUcmFjZWJhY2snLCByZXN1bHQub3V0cHV0KQorCisgICAgICAgICMgQ2hlY2sgdGhlIGJiYXBwZW5kIHdhcyBjcmVhdGVkIGFuZCBhcHBsaWVzIHByb3Blcmx5CisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgYmJhcHBlbmRmaWxlID0gc2VsZi5fY2hlY2tfYmJhcHBlbmQodGVzdHJlY2lwZSwgcmVjaXBlZmlsZSwgc2VsZi50ZW1wbGF5ZXJkaXIpCisKKyAgICAgICAgIyBDaGVjayB0aGUgYmJhcHBlbmQgY29udGVudHMKKyAgICAgICAgaWYgZXhwZWN0ZWRsaW5lcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHdpdGggb3BlbihiYmFwcGVuZGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIGYucmVhZGxpbmVzKCksICJFeHBlY3RlZCBsaW5lcyBhcmUgbm90IHByZXNlbnQgaW4gJXMiICUgYmJhcHBlbmRmaWxlKQorCisgICAgICAgICMgQ2hlY2sgZmlsZSB3YXMgY29waWVkCisgICAgICAgIGZpbGVzZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShiYmFwcGVuZGZpbGUpLCB0ZXN0cmVjaXBlKQorICAgICAgICBmb3IgZXhwZWN0ZWRmaWxlIGluIGV4cGVjdGVkZmlsZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGZpbGVzZGlyLCBleHBlY3RlZGZpbGUpKSwgJ0V4cGVjdGVkIGZpbGUgJXMgdG8gYmUgY29waWVkIG5leHQgdG8gYmJhcHBlbmQsIGJ1dCBpdCB3YXNuXCd0JyAlIGV4cGVjdGVkZmlsZSkKKworICAgICAgICAjIENoZWNrIG5vIG90aGVyIGZpbGVzIGNyZWF0ZWQKKyAgICAgICAgY3JlYXRlZGZpbGVzID0gW10KKyAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsoZmlsZXNkaXIpOgorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgY3JlYXRlZGZpbGVzLmFwcGVuZChvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5qb2luKHJvb3QsIGYpLCBmaWxlc2RpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb3J0ZWQoY3JlYXRlZGZpbGVzKSwgc29ydGVkKGV4cGVjdGVkZmlsZXMpKQorCisgICAgICAgIHJldHVybiBiYmFwcGVuZGZpbGUsIHJlc3VsdC5vdXRwdXQKKworCitjbGFzcyBSZWNpcGV0b29sVGVzdHMoUmVjaXBldG9vbEJhc2UpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICMgRW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGRhdGEgaW4gc2hsaWJzL3BrZ2RhdGEKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInNlbGZ0ZXN0IikKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1J1bm5pbmcgYml0YmFrZSB0byBnZW5lcmF0ZSBwa2dkYXRhJykKKyAgICAgICAgYml0YmFrZSgnLWMgcGFja2FnZWRhdGEgYmFzZS1maWxlcyBjb3JldXRpbHMgYnVzeWJveCBzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgIyBTaG91bGRuJ3QgbGVhdmUgYW55IHRyYWNlcyBvZiB0aGlzIGFydGlmaWNpYWwgcmVjaXBlIGJlaGluZAorICAgICAgICBiaXRiYWtlKCctYyBjbGVhbnNzdGF0ZSBzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnKQorCisgICAgZGVmIF90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKHNlbGYsIHRlc3RyZWNpcGUsIGRlc3RmaWxlLCBuZXdmaWxlLCBvcHRpb25zLCBleHBlY3RlZGxpbmVzLCBleHBlY3RlZGZpbGVzKToKKyAgICAgICAgY21kID0gJ3JlY2lwZXRvb2wgYXBwZW5kZmlsZSAlcyAlcyAlcyAlcycgJSAoc2VsZi50ZW1wbGF5ZXJkaXIsIGRlc3RmaWxlLCBuZXdmaWxlLCBvcHRpb25zKQorICAgICAgICByZXR1cm4gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kY21kKGNtZCwgdGVzdHJlY2lwZSwgZXhwZWN0ZWRmaWxlcywgZXhwZWN0ZWRsaW5lcykKKworICAgIGRlZiBfdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9mYWlsKHNlbGYsIGRlc3RmaWxlLCBuZXdmaWxlLCBjaGVja2Vycm9yKToKKyAgICAgICAgY21kID0gJ3JlY2lwZXRvb2wgYXBwZW5kZmlsZSAlcyAlcyAlcycgJSAoc2VsZi50ZW1wbGF5ZXJkaXIsIGRlc3RmaWxlLCBuZXdmaWxlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoY21kLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgJ0NvbW1hbmQgIiVzIiBzaG91bGQgaGF2ZSBmYWlsZWQgYnV0IGRpZG5cJ3QnICUgY21kKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdUcmFjZWJhY2snLCByZXN1bHQub3V0cHV0KQorICAgICAgICBmb3IgZXJyb3JzdHIgaW4gY2hlY2tlcnJvcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXJyb3JzdHIsIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE3NykKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfYmFzaWMoc2VsZik6CisgICAgICAgICMgQmFzaWMgdGVzdAorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnYmFzZS1maWxlcycsICcvZXRjL21vdGQnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydtb3RkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTgzKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9pbnZhbGlkKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc29tZSBjb21tYW5kcyB0aGF0IHNob3VsZCBlcnJvcgorICAgICAgICBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ZhaWwoJy9ldGMvcGFzc3dkJywgc2VsZi50ZXN0ZmlsZSwgWydFUlJPUjogL2V0Yy9wYXNzd2QgY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyB0b29sJywgJ3VzZXJhZGQnLCAnZXh0cmF1c2VycyddKQorICAgICAgICBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ZhaWwoJy9ldGMvdGltZXN0YW1wJywgc2VsZi50ZXN0ZmlsZSwgWydFUlJPUjogL2V0Yy90aW1lc3RhbXAgY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyB0b29sJ10pCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZmFpbCgnL2Rldi9jb25zb2xlJywgc2VsZi50ZXN0ZmlsZSwgWydFUlJPUjogL2Rldi9jb25zb2xlIGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgdG9vbCddKQorCisgICAgQHRlc3RjYXNlKDExNzYpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2FsdGVybmF0aXZlcyhzZWxmKToKKyAgICAgICAgIyBOb3cgdHJ5IHdpdGggYSBmaWxlIHdlIGtub3cgc2hvdWxkIGJlIGFuIGFsdGVybmF0aXZlCisgICAgICAgICMgKHRoaXMgaXMgdmVyeSBtdWNoIGEgZmFrZSBleGFtcGxlLCBidXQgb25lIHdlIGtub3cgaXMgcmVsaWFibHkgYW4gYWx0ZXJuYXRpdmUpCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZmFpbCgnL2Jpbi9scycsIHNlbGYudGVzdGZpbGUsIFsnRVJST1I6IEZpbGUgL2Jpbi9scyBpcyBhbiBhbHRlcm5hdGl2ZSBwb3NzaWJseSBwcm92aWRlZCBieSB0aGUgZm9sbG93aW5nIHJlY2lwZXM6JywgJ2NvcmV1dGlscycsICdidXN5Ym94J10pCisgICAgICAgIGNvcmViYXNlID0gZ2V0X2JiX3ZhcignQ09SRUJBU0UnKQorICAgICAgICAjIE5lZWQgYSB0ZXN0IGZpbGUgLSBzaG91bGQgYmUgZXhlY3V0YWJsZQorICAgICAgICB0ZXN0ZmlsZTIgPSBvcy5wYXRoLmpvaW4oY29yZWJhc2UsICdvZS1pbml0LWJ1aWxkLWVudicpCisgICAgICAgIHRlc3RmaWxlMm5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHRlc3RmaWxlMikKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vJXMiXG4nICUgdGVzdGZpbGUybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9LyVzICR7RH0ke2Jhc2VfYmluZGlyfS9sc1xuJyAlIHRlc3RmaWxlMm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ2NvcmV1dGlscycsICcvYmluL2xzJywgdGVzdGZpbGUyLCAnLXIgY29yZXV0aWxzJywgZXhwZWN0ZWRsaW5lcywgW3Rlc3RmaWxlMm5hbWVdKQorICAgICAgICAjIE5vdyB0cnkgYmJhcHBlbmRpbmcgdGhlIHNhbWUgZmlsZSBhZ2FpbiwgY29udGVudHMgc2hvdWxkIG5vdCBjaGFuZ2UKKyAgICAgICAgYmJhcHBlbmRmaWxlLCBfID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnY29yZXV0aWxzJywgJy9iaW4vbHMnLCBzZWxmLnRlc3RmaWxlLCAnLXIgY29yZXV0aWxzJywgZXhwZWN0ZWRsaW5lcywgW3Rlc3RmaWxlMm5hbWVdKQorICAgICAgICAjIEJ1dCBmaWxlIHNob3VsZCBoYXZlCisgICAgICAgIGNvcGllZGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGJiYXBwZW5kZmlsZSksICdjb3JldXRpbHMnLCB0ZXN0ZmlsZTJuYW1lKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RpZmYgLXEgJXMgJXMnICUgKHRlc3RmaWxlMiwgY29waWVkZmlsZSksIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCAnTmV3IGZpbGUgc2hvdWxkIGhhdmUgYmVlbiBjb3BpZWQgYnV0IHdhcyBub3QgJXMnICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTc4KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9iaW5hcnkoc2VsZik6CisgICAgICAgICMgVHJ5IGFwcGVuZGluZyBhIGJpbmFyeSBmaWxlCisgICAgICAgICMgL2Jpbi9scyBjYW4gYmUgYSBzeW1saW5rIHRvIC91c3IvYmluL2xzCisgICAgICAgIGxzID0gb3MucGF0aC5yZWFscGF0aCgiL2Jpbi9scyIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgncmVjaXBldG9vbCBhcHBlbmRmaWxlICVzIC9iaW4vbHMgJXMgLXIgY29yZXV0aWxzJyAlIChzZWxmLnRlbXBsYXllcmRpciwgbHMpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdXQVJOSU5HOiAnLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdpcyBhIGJpbmFyeScsIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE3MykKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfYWRkKHNlbGYpOgorICAgICAgICBjb3JlYmFzZSA9IGdldF9iYl92YXIoJ0NPUkVCQVNFJykKKyAgICAgICAgIyBUcnkgYXJiaXRyYXJ5IGZpbGUgYWRkIHRvIGEgcmVjaXBlCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSArPSAiZmlsZTovL3Rlc3RmaWxlIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdGVzdGZpbGUgJHtEfSR7ZGF0YWRpcn0vc29tZXRoaW5nXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQorICAgICAgICBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCduZXRiYXNlJywgJy91c3Ivc2hhcmUvc29tZXRoaW5nJywgc2VsZi50ZXN0ZmlsZSwgJy1yIG5ldGJhc2UnLCBleHBlY3RlZGxpbmVzLCBbJ3Rlc3RmaWxlJ10pCisgICAgICAgICMgVHJ5IGFkZGluZyBhbm90aGVyIGZpbGUsIHRoaXMgdGltZSB3aGVyZSB0aGUgc291cmNlIGZpbGUgaXMgZXhlY3V0YWJsZQorICAgICAgICAjIChzbyB3ZSdyZSB0ZXN0aW5nIHRoYXQsIHBsdXMgbW9kaWZ5aW5nIGFuIGV4aXN0aW5nIGJiYXBwZW5kKQorICAgICAgICB0ZXN0ZmlsZTIgPSBvcy5wYXRoLmpvaW4oY29yZWJhc2UsICdvZS1pbml0LWJ1aWxkLWVudicpCisgICAgICAgIHRlc3RmaWxlMm5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHRlc3RmaWxlMikKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUgXFxcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIGZpbGU6Ly8lcyBcXFxuJyAlIHRlc3RmaWxlMm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NvbWV0aGluZ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9LyVzICR7RH0ke2RhdGFkaXJ9L3NjcmlwdG5hbWVcbicgJSB0ZXN0ZmlsZTJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQorICAgICAgICBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCduZXRiYXNlJywgJy91c3Ivc2hhcmUvc2NyaXB0bmFtZScsIHRlc3RmaWxlMiwgJy1yIG5ldGJhc2UnLCBleHBlY3RlZGxpbmVzLCBbJ3Rlc3RmaWxlJywgdGVzdGZpbGUybmFtZV0pCisKKyAgICBAdGVzdGNhc2UoMTE3NCkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfYWRkX2JpbmRpcihzZWxmKToKKyAgICAgICAgIyBUcnkgYXJiaXRyYXJ5IGZpbGUgYWRkIHRvIGEgcmVjaXBlLCB0aGlzIHRpbWUgdG8gYSBsb2NhdGlvbiBzdWNoIHRoYXQgc2hvdWxkIGJlIGluc3RhbGxlZCBhcyBleGVjdXRhYmxlCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSArPSAiZmlsZTovL3Rlc3RmaWxlIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtiaW5kaXJ9L3NlbGZ0ZXN0LXJlY2lwZXRvb2wtdGVzdGJpblxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnbmV0YmFzZScsICcvdXNyL2Jpbi9zZWxmdGVzdC1yZWNpcGV0b29sLXRlc3RiaW4nLCBzZWxmLnRlc3RmaWxlLCAnLXIgbmV0YmFzZScsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExNzUpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2FkZF9tYWNoaW5lKHNlbGYpOgorICAgICAgICAjIFRyeSBhcmJpdHJhcnkgZmlsZSBhZGQgdG8gYSByZWNpcGUsIHRoaXMgdGltZSB0byBhIGxvY2F0aW9uIHN1Y2ggdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkIGFzIGV4ZWN1dGFibGUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJX2FwcGVuZF9teW1hY2hpbmUgPSAiIGZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmRfbXltYWNoaW5lKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zb21ldGhpbmdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ25ldGJhc2UnLCAnL3Vzci9zaGFyZS9zb21ldGhpbmcnLCBzZWxmLnRlc3RmaWxlLCAnLXIgbmV0YmFzZSAtbSBteW1hY2hpbmUnLCBleHBlY3RlZGxpbmVzLCBbJ215bWFjaGluZS90ZXN0ZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4NCkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfb3JpZyhzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIFNSQ19VUkkgYW5kIGluIGRvX2luc3RhbGwgd2l0aCB0aGUgc2FtZSBuYW1lCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLW9yaWcnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydzZWxmdGVzdC1yZXBsYWNlbWUtb3JpZyddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE5MSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfdG9kaXIoc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbiBTUkNfVVJJIGFuZCBpbiBkb19pbnN0YWxsIHdpdGggZGVzdGluYXRpb24gZGlyZWN0b3J5IHJhdGhlciB0aGFuIGZpbGUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtdG9kaXInLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydzZWxmdGVzdC1yZXBsYWNlbWUtdG9kaXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExODcpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3JlbmFtZWQoc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbiBTUkNfVVJJIHdpdGggYSBkaWZmZXJlbnQgbmFtZSB0byB0aGUgZGVzdGluYXRpb24gZmlsZQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1yZW5hbWVkJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsnZmlsZTEnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExOTApCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3N1YmRpcihzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIFNSQ19VUkkgaW4gYSBzdWJkaXIKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtc3ViZGlyXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtc3ViZGlyJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExODkpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3NyY19nbG9iKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gU1JDX1VSSSBhcyBhIGdsb2IKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtc3JjLWdsb2JmaWxlXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtc3JjLWdsb2JmaWxlJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExODEpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2luc3RfZ2xvYihzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIGRvX2luc3RhbGwgYXMgYSBnbG9iCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZ2xvYmZpbGUnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydzZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1nbG9iZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4MikKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfaW5zdF90b2Rpcl9nbG9iKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gZG9faW5zdGFsbCBhcyBhIGdsb2Igd2l0aCBkZXN0aW5hdGlvbiBhcyBhIGRpcmVjdG9yeQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LXRvZGlyLWdsb2JmaWxlJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsnc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtdG9kaXItZ2xvYmZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExODUpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3BhdGNoKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgYWRkZWQgYnkgYSBwYXRjaCBpbiBTUkNfVVJJCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSArPSAiZmlsZTovL3Rlc3RmaWxlIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdGVzdGZpbGUgJHtEfSR7c3lzY29uZmRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLXBhdGNoZWRcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvZXRjL3NlbGZ0ZXN0LXJlcGxhY2VtZS1wYXRjaGVkJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKKyAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnV0FSTklORzogJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignYWRkLWZpbGUucGF0Y2gnLCBsaW5lLCAnVW5leHBlY3RlZCB3YXJuaW5nIGZvdW5kIGluIG91dHB1dDpcbiVzJyAlIGxpbmUpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnUGF0Y2ggd2FybmluZyBub3QgZm91bmQgaW4gb3V0cHV0OlxuJXMnICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExODgpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3NjcmlwdChzZWxmKToKKyAgICAgICAgIyBOb3csIGEgZmlsZSB0aGF0J3MgaW4gU1JDX1VSSSBidXQgaW5zdGFsbGVkIGJ5IGEgc2NyaXB0IChzbyBubyBtZW50aW9uIGluIGRvX2luc3RhbGwpCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSArPSAiZmlsZTovL3Rlc3RmaWxlIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdGVzdGZpbGUgJHtEfSR7ZGF0YWRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLXNjcmlwdGVkXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtc2NyaXB0ZWQnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4MCkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfaW5zdF9mdW5jKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW5zdGFsbGVkIGZyb20gYSBmdW5jdGlvbiBjYWxsZWQgYnkgZG9faW5zdGFsbAorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWZ1bmMnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydzZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1mdW5jJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTg2KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9wb3N0aW5zdGFsbChzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGNyZWF0ZWQgYnkgYSBwb3N0aW5zdGFsbCBzY3JpcHQgKGFuZCBleHBsaWNpdGx5IG1lbnRpb25lZCBpbiBpdCkKKyAgICAgICAgIyBGaXJzdCB0cnkgd2l0aG91dCBzcGVjaWZ5aW5nIHJlY2lwZQorICAgICAgICBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ZhaWwoJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLXBvc3RpbnN0Jywgc2VsZi50ZXN0ZmlsZSwgWydGaWxlIC91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLXBvc3RpbnN0IG1heSBiZSB3cml0dGVuIG91dCBpbiBhIHByZS9wb3N0aW5zdGFsbCBzY3JpcHQgb2YgdGhlIGZvbGxvd2luZyByZWNpcGVzOicsICdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnXSkKKyAgICAgICAgIyBOb3cgc3BlY2lmeSByZWNpcGUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtcG9zdGluc3RcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1wb3N0aW5zdCcsIHNlbGYudGVzdGZpbGUsICctciBzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCBleHBlY3RlZGxpbmVzLCBbJ3Rlc3RmaWxlJ10pCisKKyAgICBAdGVzdGNhc2UoMTE3OSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZXh0bGF5ZXIoc2VsZik6CisgICAgICAgICMgVHJ5IGNyZWF0aW5nIGEgYmJhcHBlbmQgaW4gYSBsYXllciB0aGF0J3Mgbm90IGluIGJibGF5ZXJzLmNvbmYgYW5kIGhhcyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUKKyAgICAgICAgZXh0dGVtcGxheWVyZGlyID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ2V4dGxheWVyJykKKyAgICAgICAgc2VsZi5fY3JlYXRlX3RlbXBfbGF5ZXIoZXh0dGVtcGxheWVyZGlyLCBGYWxzZSwgJ29lc2VsZnRlc3RleHRsYXllcicsIHJlY2lwZXBhdGhzcGVjPSdtZXRhZGF0YS9yZWNpcGVzL3JlY2lwZXMtKi8qJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGFwcGVuZGZpbGUgJXMgL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZyAlcycgJSAoZXh0dGVtcGxheWVyZGlyLCBzZWxmLnRlc3RmaWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVHJhY2ViYWNrJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgY3JlYXRlZGZpbGVzID0gW10KKyAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsoZXh0dGVtcGxheWVyZGlyKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGNyZWF0ZWRmaWxlcy5hcHBlbmQob3MucGF0aC5yZWxwYXRoKG9zLnBhdGguam9pbihyb290LCBmKSwgZXh0dGVtcGxheWVyZGlyKSkKKyAgICAgICAgY3JlYXRlZGZpbGVzLnJlbW92ZSgnY29uZi9sYXllci5jb25mJykKKyAgICAgICAgZXhwZWN0ZWRmaWxlcyA9IFsnbWV0YWRhdGEvcmVjaXBlcy9yZWNpcGVzLXRlc3Qvc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlL3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZS5iYmFwcGVuZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ21ldGFkYXRhL3JlY2lwZXMvcmVjaXBlcy10ZXN0L3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZS9zZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUvc2VsZnRlc3QtcmVwbGFjZW1lLW9yaWcnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChjcmVhdGVkZmlsZXMpLCBzb3J0ZWQoZXhwZWN0ZWRmaWxlcykpCisKKyAgICBAdGVzdGNhc2UoMTE5MikKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfd2lsZGNhcmQoc2VsZik6CisKKyAgICAgICAgZGVmIHRyeV9hcHBlbmRmaWxlX3djKG9wdGlvbnMpOgorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGFwcGVuZGZpbGUgJXMgL2V0Yy9wcm9maWxlICVzICVzJyAlIChzZWxmLnRlbXBsYXllcmRpciwgc2VsZi50ZXN0ZmlsZSwgb3B0aW9ucykpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdUcmFjZWJhY2snLCByZXN1bHQub3V0cHV0KQorICAgICAgICAgICAgYmJhcHBlbmRmaWxlID0gTm9uZQorICAgICAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsoc2VsZi50ZW1wbGF5ZXJkaXIpOgorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBmLmVuZHN3aXRoKCcuYmJhcHBlbmQnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiYXBwZW5kZmlsZSA9IGYKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBub3QgYmJhcHBlbmRmaWxlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnTm8gYmJhcHBlbmQgZmlsZSBjcmVhdGVkJykKKyAgICAgICAgICAgIHJ1bkNtZCgncm0gLXJmICVzL3JlY2lwZXMtKicgJSBzZWxmLnRlbXBsYXllcmRpcikKKyAgICAgICAgICAgIHJldHVybiBiYmFwcGVuZGZpbGUKKworICAgICAgICAjIENoZWNrIHdpdGhvdXQgd2lsZGNhcmQgb3B0aW9uCisgICAgICAgIHJlY2lwZWZuID0gb3MucGF0aC5iYXNlbmFtZShnZXRfYmJfdmFyKCdGSUxFJywgJ2Jhc2UtZmlsZXMnKSkKKyAgICAgICAgZmlsZW5hbWUgPSB0cnlfYXBwZW5kZmlsZV93YygnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlbmFtZSwgcmVjaXBlZm4ucmVwbGFjZSgnLmJiJywgJy5iYmFwcGVuZCcpKQorICAgICAgICAjIE5vdyBjaGVjayB3aXRoIHdpbGRjYXJkIG9wdGlvbgorICAgICAgICBmaWxlbmFtZSA9IHRyeV9hcHBlbmRmaWxlX3djKCctdycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW5hbWUsIHJlY2lwZWZuLnNwbGl0KCdfJylbMF0gKyAnXyUuYmJhcHBlbmQnKQorCisgICAgQHRlc3RjYXNlKDExOTMpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9jcmVhdGUoc2VsZik6CisgICAgICAgICMgVHJ5IGFkZGluZyBhIHJlY2lwZQorICAgICAgICB0ZW1wc3JjID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3NyY3RyZWUnKQorICAgICAgICBvcy5tYWtlZGlycyh0ZW1wc3JjKQorICAgICAgICByZWNpcGVmaWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ2xvZ3JvdGF0ZV8zLjguNy5iYicpCisgICAgICAgIHNyY3VyaSA9ICdodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvbC9vL2xvZ3JvdGF0ZS9sb2dyb3RhdGUtMy44LjcudGFyLmd6JworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3JlY2lwZXRvb2wgY3JlYXRlIC1vICVzICVzIC14ICVzJyAlIChyZWNpcGVmaWxlLCBzcmN1cmksIHRlbXBzcmMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUocmVjaXBlZmlsZSkpCisgICAgICAgIGNoZWNrdmFycyA9IHt9CisgICAgICAgIGNoZWNrdmFyc1snTElDRU5TRSddID0gJ0dQTHYyJworICAgICAgICBjaGVja3ZhcnNbJ0xJQ19GSUxFU19DSEtTVU0nXSA9ICdmaWxlOi8vQ09QWUlORzttZDU9MTg4MTA2NjlmMTNiODczNDg0NTllNjExZDMxYWI3NjAnCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gJ2h0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9sL28vbG9ncm90YXRlL2xvZ3JvdGF0ZS0ke1BWfS50YXIuZ3onCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSVttZDVzdW1dJ10gPSAnOTllMDg1MDNlZjI0YzNlMmUzZmY3NGNjNWYzYmUyMTMnCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSVtzaGEyNTZzdW1dJ10gPSAnZjZiYTY5MWY0MGUzMGU2NDBlZmEyNzUyYzFmOTQ5OWEzZjk3MzgyNTc2NjA5OTRkZTcwYTQ1ZmUwMGQxMmI2NCcKKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKKworICAgIEB0ZXN0Y2FzZSgxMTk0KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfY3JlYXRlX2dpdChzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgZGF0YSBpbiBzaGxpYnMvcGtnZGF0YQorICAgICAgICBiaXRiYWtlKCdsaWJwbmcgcGFuZ28gbGlieDExIGxpYnhleHQganBlZycpCisgICAgICAgICMgVHJ5IGFkZGluZyBhIHJlY2lwZQorICAgICAgICB0ZW1wc3JjID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3NyY3RyZWUnKQorICAgICAgICBvcy5tYWtlZGlycyh0ZW1wc3JjKQorICAgICAgICByZWNpcGVmaWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ2xpYm1hdGNoYm94LmJiJykKKyAgICAgICAgc3JjdXJpID0gJ2dpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpYm1hdGNoYm94JworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3JlY2lwZXRvb2wgY3JlYXRlIC1vICVzICVzIC14ICVzJyAlIChyZWNpcGVmaWxlLCBzcmN1cmksIHRlbXBzcmMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUocmVjaXBlZmlsZSksICdyZWNpcGV0b29sIGRpZCBub3QgY3JlYXRlIHJlY2lwZSBmaWxlOyBvdXRwdXQ6XG4lcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ0xJQ0VOU0UnXSA9ICdMR1BMdjIuMScKKyAgICAgICAgY2hlY2t2YXJzWydMSUNfRklMRVNfQ0hLU1VNJ10gPSAnZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0JworICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L2dpdCcKKyAgICAgICAgY2hlY2t2YXJzWydQViddID0gJzEuMCtnaXQke1NSQ1BWfScKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSBzcmN1cmkKKyAgICAgICAgY2hlY2t2YXJzWydERVBFTkRTJ10gPSAnbGlicG5nIHBhbmdvIGxpYngxMSBsaWJ4ZXh0IGpwZWcnCisgICAgICAgIGluaGVyaXRzID0gWydhdXRvdG9vbHMnLCAncGtnY29uZmlnJ10KKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBpbmhlcml0cykKKworCitjbGFzcyBSZWNpcGV0b29sQXBwZW5kc3JjQmFzZShSZWNpcGV0b29sQmFzZSk6CisgICAgZGVmIF90cnlfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlKHNlbGYsIHRlc3RyZWNpcGUsIG5ld2ZpbGUsIGRlc3RmaWxlLCBvcHRpb25zLCBleHBlY3RlZGxpbmVzLCBleHBlY3RlZGZpbGVzKToKKyAgICAgICAgY21kID0gJ3JlY2lwZXRvb2wgYXBwZW5kc3JjZmlsZSAlcyAlcyAlcyAlcyAlcycgJSAob3B0aW9ucywgc2VsZi50ZW1wbGF5ZXJkaXIsIHRlc3RyZWNpcGUsIG5ld2ZpbGUsIGRlc3RmaWxlKQorICAgICAgICByZXR1cm4gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kY21kKGNtZCwgdGVzdHJlY2lwZSwgZXhwZWN0ZWRmaWxlcywgZXhwZWN0ZWRsaW5lcykKKworICAgIGRlZiBfdHJ5X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZXMoc2VsZiwgdGVzdHJlY2lwZSwgbmV3ZmlsZXMsIGV4cGVjdGVkbGluZXM9Tm9uZSwgZXhwZWN0ZWRmaWxlcz1Ob25lLCBkZXN0ZGlyPU5vbmUsIG9wdGlvbnM9JycpOgorCisgICAgICAgIGlmIGRlc3RkaXI6CisgICAgICAgICAgICBvcHRpb25zICs9ICcgLUQgJXMnICUgZGVzdGRpcgorCisgICAgICAgIGlmIGV4cGVjdGVkZmlsZXMgaXMgTm9uZToKKyAgICAgICAgICAgIGV4cGVjdGVkZmlsZXMgPSBbb3MucGF0aC5iYXNlbmFtZShmKSBmb3IgZiBpbiBuZXdmaWxlc10KKworICAgICAgICBjbWQgPSAncmVjaXBldG9vbCBhcHBlbmRzcmNmaWxlcyAlcyAlcyAlcyAlcycgJSAob3B0aW9ucywgc2VsZi50ZW1wbGF5ZXJkaXIsIHRlc3RyZWNpcGUsICcgJy5qb2luKG5ld2ZpbGVzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGNtZChjbWQsIHRlc3RyZWNpcGUsIGV4cGVjdGVkZmlsZXMsIGV4cGVjdGVkbGluZXMpCisKKyAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfZmFpbChzZWxmLCB0ZXN0cmVjaXBlLCBuZXdmaWxlLCBkZXN0ZmlsZSwgY2hlY2tlcnJvcik6CisgICAgICAgIGNtZCA9ICdyZWNpcGV0b29sIGFwcGVuZHNyY2ZpbGUgJXMgJXMgJXMgJXMnICUgKHNlbGYudGVtcGxheWVyZGlyLCB0ZXN0cmVjaXBlLCBuZXdmaWxlLCBkZXN0ZmlsZSBvciAnJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKGNtZCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICdDb21tYW5kICIlcyIgc2hvdWxkIGhhdmUgZmFpbGVkIGJ1dCBkaWRuXCd0JyAlIGNtZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVHJhY2ViYWNrJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgZm9yIGVycm9yc3RyIGluIGNoZWNrZXJyb3I6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVycm9yc3RyLCByZXN1bHQub3V0cHV0KQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZ2V0X2ZpcnN0X2ZpbGVfdXJpKHJlY2lwZSk6CisgICAgICAgICcnJ1JldHVybiB0aGUgZmlyc3QgZmlsZTovLyBpbiBTUkNfVVJJIGZvciB0aGUgc3BlY2lmaWVkIHJlY2lwZS4nJycKKyAgICAgICAgc3JjX3VyaSA9IGdldF9iYl92YXIoJ1NSQ19VUkknLCByZWNpcGUpLnNwbGl0KCkKKyAgICAgICAgZm9yIHVyaSBpbiBzcmNfdXJpOgorICAgICAgICAgICAgcCA9IHVybHBhcnNlLnVybHBhcnNlKHVyaSkKKyAgICAgICAgICAgIGlmIHAuc2NoZW1lID09ICdmaWxlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gcC5uZXRsb2MgKyBwLnBhdGgKKworICAgIGRlZiBfdGVzdF9hcHBlbmRzcmNmaWxlKHNlbGYsIHRlc3RyZWNpcGUsIGZpbGVuYW1lPU5vbmUsIGRlc3RkaXI9Tm9uZSwgaGFzX3NyY191cmk9VHJ1ZSwgc3JjZGlyPU5vbmUsIG5ld2ZpbGU9Tm9uZSwgb3B0aW9ucz0nJyk6CisgICAgICAgIGlmIG5ld2ZpbGUgaXMgTm9uZToKKyAgICAgICAgICAgIG5ld2ZpbGUgPSBzZWxmLnRlc3RmaWxlCisKKyAgICAgICAgaWYgc3JjZGlyOgorICAgICAgICAgICAgaWYgZGVzdGRpcjoKKyAgICAgICAgICAgICAgICBleHBlY3RlZF9zdWJkaXIgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCBkZXN0ZGlyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZF9zdWJkaXIgPSBzcmNkaXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9wdGlvbnMgKz0gIiAtVyIKKyAgICAgICAgICAgIGV4cGVjdGVkX3N1YmRpciA9IGRlc3RkaXIKKworICAgICAgICBpZiBmaWxlbmFtZToKKyAgICAgICAgICAgIGlmIGRlc3RkaXI6CisgICAgICAgICAgICAgICAgZGVzdHBhdGggPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgZmlsZW5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlc3RwYXRoID0gZmlsZW5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShuZXdmaWxlKQorICAgICAgICAgICAgaWYgZGVzdGRpcjoKKyAgICAgICAgICAgICAgICBkZXN0cGF0aCA9IGRlc3RkaXIgKyBvcy5zZXAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVzdHBhdGggPSAnLicgKyBvcy5zZXAKKworICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIGlmIGhhc19zcmNfdXJpOgorICAgICAgICAgICAgdXJpID0gJ2ZpbGU6Ly8lcycgJSBmaWxlbmFtZQorICAgICAgICAgICAgaWYgZXhwZWN0ZWRfc3ViZGlyOgorICAgICAgICAgICAgICAgIHVyaSArPSAnO3N1YmRpcj0lcycgJSBleHBlY3RlZF9zdWJkaXIKKyAgICAgICAgICAgIGV4cGVjdGVkbGluZXNbMDowXSA9IFsnU1JDX1VSSSArPSAiJXMiXG4nICUgdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGUodGVzdHJlY2lwZSwgbmV3ZmlsZSwgZGVzdHBhdGgsIG9wdGlvbnMsIGV4cGVjdGVkbGluZXMsIFtmaWxlbmFtZV0pCisKKyAgICBkZWYgX3Rlc3RfYXBwZW5kc3JjZmlsZXMoc2VsZiwgdGVzdHJlY2lwZSwgbmV3ZmlsZXMsIGV4cGVjdGVkZmlsZXM9Tm9uZSwgZGVzdGRpcj1Ob25lLCBvcHRpb25zPScnKToKKyAgICAgICAgaWYgZXhwZWN0ZWRmaWxlcyBpcyBOb25lOgorICAgICAgICAgICAgZXhwZWN0ZWRmaWxlcyA9IFtvcy5wYXRoLmJhc2VuYW1lKG4pIGZvciBuIGluIG5ld2ZpbGVzXQorCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVzKHRlc3RyZWNpcGUsIG5ld2ZpbGVzLCBleHBlY3RlZGZpbGVzPWV4cGVjdGVkZmlsZXMsIGRlc3RkaXI9ZGVzdGRpciwgb3B0aW9ucz1vcHRpb25zKQorCisgICAgICAgIHNyY191cmkgPSBnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkuc3BsaXQoKQorICAgICAgICBmb3IgZiBpbiBleHBlY3RlZGZpbGVzOgorICAgICAgICAgICAgaWYgZGVzdGRpcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdmaWxlOi8vJXM7c3ViZGlyPSVzJyAlIChmLCBkZXN0ZGlyKSwgc3JjX3VyaSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignZmlsZTovLyVzJyAlIGYsIHNyY191cmkpCisKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBiYmFwcGVuZGZpbGUgPSBzZWxmLl9jaGVja19iYmFwcGVuZCh0ZXN0cmVjaXBlLCByZWNpcGVmaWxlLCBzZWxmLnRlbXBsYXllcmRpcikKKyAgICAgICAgZmlsZXNkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGJiYXBwZW5kZmlsZSksIHRlc3RyZWNpcGUpCisgICAgICAgIGZpbGVzZXh0cmFwYXRocyA9IGdldF9iYl92YXIoJ0ZJTEVTRVhUUkFQQVRIUycsIHRlc3RyZWNpcGUpLnNwbGl0KCc6JykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihmaWxlc2RpciwgZmlsZXNleHRyYXBhdGhzKQorCisKK2NsYXNzIFJlY2lwZXRvb2xBcHBlbmRzcmNUZXN0cyhSZWNpcGV0b29sQXBwZW5kc3JjQmFzZSk6CisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUoJ2Jhc2UtZmlsZXMnLCAnYS1maWxlJykKKworICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9iYXNpY193aWxkY2FyZChzZWxmKToKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdiYXNlLWZpbGVzJworICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUodGVzdHJlY2lwZSwgJ2EtZmlsZScsIG9wdGlvbnM9Jy13JykKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBiYmFwcGVuZGZpbGUgPSBzZWxmLl9jaGVja19iYmFwcGVuZCh0ZXN0cmVjaXBlLCByZWNpcGVmaWxlLCBzZWxmLnRlbXBsYXllcmRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmJhc2VuYW1lKGJiYXBwZW5kZmlsZSksICclc18lJS5iYmFwcGVuZCcgJSB0ZXN0cmVjaXBlKQorCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX3N1YmRpcl9iYXNpYyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9hcHBlbmRzcmNmaWxlKCdiYXNlLWZpbGVzJywgJ2EtZmlsZScsICd0bXAnKQorCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX3N1YmRpcl9iYXNpY19kaXJkZXN0KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUoJ2Jhc2UtZmlsZXMnLCBkZXN0ZGlyPSd0bXAnKQorCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX3NyY2Rpcl9iYXNpYyhzZWxmKToKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdiYXNoJworICAgICAgICBzcmNkaXIgPSBnZXRfYmJfdmFyKCdTJywgdGVzdHJlY2lwZSkKKyAgICAgICAgd29ya2RpciA9IGdldF9iYl92YXIoJ1dPUktESVInLCB0ZXN0cmVjaXBlKQorICAgICAgICBzdWJkaXIgPSBvcy5wYXRoLnJlbHBhdGgoc3JjZGlyLCB3b3JrZGlyKQorICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUodGVzdHJlY2lwZSwgJ2EtZmlsZScsIHNyY2Rpcj1zdWJkaXIpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfZXhpc3RpbmdfaW5fc3JjX3VyaShzZWxmKToKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdiYXNlLWZpbGVzJworICAgICAgICBmaWxlcGF0aCA9IHNlbGYuX2dldF9maXJzdF9maWxlX3VyaSh0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZXBhdGgsICdVbmFibGUgdG8gdGVzdCwgbm8gZmlsZTovLyB1cmkgZm91bmQgaW4gU1JDX1VSSSBmb3IgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5fdGVzdF9hcHBlbmRzcmNmaWxlKHRlc3RyZWNpcGUsIGZpbGVwYXRoLCBoYXNfc3JjX3VyaT1GYWxzZSkKKworICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9leGlzdGluZ19pbl9zcmNfdXJpX2RpZmZfcGFyYW1zKHNlbGYpOgorICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2UtZmlsZXMnCisgICAgICAgIHN1YmRpciA9ICd0bXAnCisgICAgICAgIGZpbGVwYXRoID0gc2VsZi5fZ2V0X2ZpcnN0X2ZpbGVfdXJpKHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlcGF0aCwgJ1VuYWJsZSB0byB0ZXN0LCBubyBmaWxlOi8vIHVyaSBmb3VuZCBpbiBTUkNfVVJJIGZvciAlcycgJSB0ZXN0cmVjaXBlKQorCisgICAgICAgIG91dHB1dCA9IHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCBmaWxlcGF0aCwgc3ViZGlyLCBoYXNfc3JjX3VyaT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVycycgaW4gbCBmb3IgbCBpbiBvdXRwdXQpKQorCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX3JlcGxhY2VfZmlsZV9zcmNkaXIoc2VsZik6CisgICAgICAgIHRlc3RyZWNpcGUgPSAnYmFzaCcKKyAgICAgICAgZmlsZXBhdGggPSAnTWFrZWZpbGUuaW4nCisgICAgICAgIHNyY2RpciA9IGdldF9iYl92YXIoJ1MnLCB0ZXN0cmVjaXBlKQorICAgICAgICB3b3JrZGlyID0gZ2V0X2JiX3ZhcignV09SS0RJUicsIHRlc3RyZWNpcGUpCisgICAgICAgIHN1YmRpciA9IG9zLnBhdGgucmVscGF0aChzcmNkaXIsIHdvcmtkaXIpCisKKyAgICAgICAgc2VsZi5fdGVzdF9hcHBlbmRzcmNmaWxlKHRlc3RyZWNpcGUsIGZpbGVwYXRoLCBzcmNkaXI9c3ViZGlyKQorICAgICAgICBiaXRiYWtlKCclczpkb191bnBhY2snICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVuKHNlbGYudGVzdGZpbGUsICdyJykucmVhZCgpLCBvcGVuKG9zLnBhdGguam9pbihzcmNkaXIsIGZpbGVwYXRoKSwgJ3InKS5yZWFkKCkpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVzX2Jhc2ljKHNlbGYsIGRlc3RkaXI9Tm9uZSk6CisgICAgICAgIG5ld2ZpbGVzID0gW3NlbGYudGVzdGZpbGVdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDUpOgorICAgICAgICAgICAgdGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAndGVzdGZpbGUlZCcgJSBpKQorICAgICAgICAgICAgd2l0aCBvcGVuKHRlc3RmaWxlLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnVGVzdCBmaWxlICVkXG4nICUgaSkKKyAgICAgICAgICAgIG5ld2ZpbGVzLmFwcGVuZCh0ZXN0ZmlsZSkKKyAgICAgICAgc2VsZi5fdGVzdF9hcHBlbmRzcmNmaWxlcygnZ2NjJywgbmV3ZmlsZXMsIGRlc3RkaXI9ZGVzdGRpciwgb3B0aW9ucz0nLVcnKQorCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlc19iYXNpY19zdWJkaXIoc2VsZik6CisgICAgICAgIHNlbGYudGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVzX2Jhc2ljKGRlc3RkaXI9J3Rlc3RkaXInKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3NzdGF0ZS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9zc3RhdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk4OTcyNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9zc3RhdGUucHkKQEAgLTAsMCArMSw1MyBAQAoraW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgZ2V0X3Rlc3RfbGF5ZXIKKworCitjbGFzcyBTU3RhdGVCYXNlKG9lU2VsZlRlc3QpOgorCisgICAgZGVmIHNldFVwTG9jYWwoc2VsZik6CisgICAgICAgIHNlbGYudGVtcF9zc3RhdGVfbG9jYXRpb24gPSBOb25lCisgICAgICAgIHNlbGYuc3N0YXRlX3BhdGggPSBnZXRfYmJfdmFyKCdTU1RBVEVfRElSJykKKyAgICAgICAgc2VsZi5kaXN0cm8gPSBnZXRfYmJfdmFyKCdOQVRJVkVMU0JTVFJJTkcnKQorICAgICAgICBzZWxmLmRpc3Ryb19zcGVjaWZpY19zc3RhdGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5zc3RhdGVfcGF0aCwgc2VsZi5kaXN0cm8pCisKKyAgICAjIENyZWF0ZXMgYSBzcGVjaWFsIHNzdGF0ZSBjb25maWd1cmF0aW9uIHdpdGggdGhlIG9wdGlvbiB0byBhZGQgc3N0YXRlIG1pcnJvcnMKKyAgICBkZWYgY29uZmlnX3NzdGF0ZShzZWxmLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1GYWxzZSwgYWRkX2xvY2FsX21pcnJvcnM9W10pOgorICAgICAgICBzZWxmLnRlbXBfc3N0YXRlX2xvY2F0aW9uID0gdGVtcF9zc3RhdGVfbG9jYXRpb24KKworICAgICAgICBpZiBzZWxmLnRlbXBfc3N0YXRlX2xvY2F0aW9uOgorICAgICAgICAgICAgdGVtcF9zc3RhdGVfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAidGVtcF9zc3RhdGVfJXMiICUgZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoJyVZJW0lZCVIJU0lUycpKQorICAgICAgICAgICAgY29uZmlnX3RlbXBfc3N0YXRlID0gIlNTVEFURV9ESVIgPSBcIiVzXCIiICUgdGVtcF9zc3RhdGVfcGF0aAorICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGNvbmZpZ190ZW1wX3NzdGF0ZSkKKyAgICAgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcF9zc3RhdGVfcGF0aCkKKyAgICAgICAgc2VsZi5zc3RhdGVfcGF0aCA9IGdldF9iYl92YXIoJ1NTVEFURV9ESVInKQorICAgICAgICBzZWxmLmRpc3RybyA9IGdldF9iYl92YXIoJ05BVElWRUxTQlNUUklORycpCisgICAgICAgIHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSA9IG9zLnBhdGguam9pbihzZWxmLnNzdGF0ZV9wYXRoLCBzZWxmLmRpc3RybykKKworICAgICAgICBpZiBhZGRfbG9jYWxfbWlycm9yczoKKyAgICAgICAgICAgIGNvbmZpZ19zZXRfc3N0YXRlX2lmX25vdF9zZXQgPSAnU1NUQVRFX01JUlJPUlMgPz0gIiInCisgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnX3NldF9zc3RhdGVfaWZfbm90X3NldCkKKyAgICAgICAgICAgIGZvciBsb2NhbF9taXJyb3IgaW4gYWRkX2xvY2FsX21pcnJvcnM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmpvaW4obG9jYWxfbWlycm9yKSA9PSBvcy5wYXRoLmpvaW4oc2VsZi5zc3RhdGVfcGF0aCksIG1zZz0nQ2Fubm90IGFkZCB0aGUgY3VycmVudCBzc3RhdGUgcGF0aCBhcyBhIHNzdGF0ZSBtaXJyb3InKQorICAgICAgICAgICAgICAgIGNvbmZpZ19zc3RhdGVfbWlycm9yID0gIlNTVEFURV9NSVJST1JTICs9IFwiZmlsZTovLy4qIGZpbGU6Ly8vJXMvUEFUSFwiIiAlIGxvY2FsX21pcnJvcgorICAgICAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhjb25maWdfc3N0YXRlX21pcnJvcikKKworICAgICMgUmV0dXJucyBhIGxpc3QgY29udGFpbmluZyBzc3RhdGUgZmlsZXMKKyAgICBkZWYgc2VhcmNoX3NzdGF0ZShzZWxmLCBmaWxlbmFtZV9yZWdleCwgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlKToKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc2VsZi5zc3RhdGVfcGF0aCk6CisgICAgICAgICAgICBpZiBkaXN0cm9fc3BlY2lmaWMgYW5kIHJlLnNlYXJjaCgiJXMvW2EtejAtOV17Mn0kIiAlIHNlbGYuZGlzdHJvLCByb290KToKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKGZpbGVuYW1lX3JlZ2V4LCBmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZikKKyAgICAgICAgICAgIGlmIGRpc3Ryb19ub25zcGVjaWZpYyBhbmQgcmUuc2VhcmNoKCIlcy9bYS16MC05XXsyfSQiICUgc2VsZi5zc3RhdGVfcGF0aCwgcm9vdCk6CisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIHJlLnNlYXJjaChmaWxlbmFtZV9yZWdleCwgZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGYpCisgICAgICAgIHJldHVybiByZXN1bHQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9zc3RhdGV0ZXN0cy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9zc3RhdGV0ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTA2YjIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3NzdGF0ZXRlc3RzLnB5CkBAIC0wLDAgKzEsMzA4IEBACitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgorZnJvbSBvZXFhLnNlbGZ0ZXN0LnNzdGF0ZSBpbXBvcnQgU1N0YXRlQmFzZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIFNTdGF0ZVRlc3RzKFNTdGF0ZUJhc2UpOgorCisgICAgIyBUZXN0IHNzdGF0ZSBmaWxlcyBjcmVhdGlvbiBhbmQgdGhlaXIgbG9jYXRpb24KKyAgICBkZWYgcnVuX3Rlc3Rfc3N0YXRlX2NyZWF0aW9uKHNlbGYsIHRhcmdldHMsIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSwgc2hvdWxkX3Bhc3M9VHJ1ZSk6CisgICAgICAgIHNlbGYuY29uZmlnX3NzdGF0ZSh0ZW1wX3NzdGF0ZV9sb2NhdGlvbikKKworICAgICAgICBpZiAgc2VsZi50ZW1wX3NzdGF0ZV9sb2NhdGlvbjoKKyAgICAgICAgICAgIGJpdGJha2UoWyctY2NsZWFuJ10gKyB0YXJnZXRzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYml0YmFrZShbJy1jY2xlYW5zc3RhdGUnXSArIHRhcmdldHMpCisKKyAgICAgICAgYml0YmFrZSh0YXJnZXRzKQorICAgICAgICBmaWxlX3RyYWNrZXIgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpLCBkaXN0cm9fc3BlY2lmaWMsIGRpc3Ryb19ub25zcGVjaWZpYykKKyAgICAgICAgaWYgc2hvdWxkX3Bhc3M6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZV90cmFja2VyICwgbXNnPSJDb3VsZCBub3QgZmluZCBzc3RhdGUgZmlsZXMgZm9yOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmaWxlX3RyYWNrZXIgLCBtc2c9IkZvdW5kIHNzdGF0ZSBmaWxlcyBpbiB0aGUgd3JvbmcgcGxhY2UgZm9yOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpKQorCisgICAgQHRlc3RjYXNlKDk3NSkKKyAgICBkZWYgdGVzdF9zc3RhdGVfY3JlYXRpb25fZGlzdHJvX3NwZWNpZmljX3Bhc3Moc2VsZik6CisgICAgICAgIHRhcmdldGFyY2ggPSBnZXRfYmJfdmFyKCdUVU5FX0FSQ0gnKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9jcmVhdGlvbihbJ2JpbnV0aWxzLWNyb3NzLScrIHRhcmdldGFyY2gsICdiaW51dGlscy1uYXRpdmUnXSwgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1GYWxzZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKKworICAgIEB0ZXN0Y2FzZSg5NzUpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2NyZWF0aW9uX2Rpc3Ryb19zcGVjaWZpY19mYWlsKHNlbGYpOgorICAgICAgICB0YXJnZXRhcmNoID0gZ2V0X2JiX3ZhcignVFVORV9BUkNIJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY3JlYXRpb24oWydiaW51dGlscy1jcm9zcy0nKyB0YXJnZXRhcmNoLCAnYmludXRpbHMtbmF0aXZlJ10sIGRpc3Ryb19zcGVjaWZpYz1GYWxzZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUsIHNob3VsZF9wYXNzPUZhbHNlKQorCisgICAgQHRlc3RjYXNlKDk3NikKKyAgICBkZWYgdGVzdF9zc3RhdGVfY3JlYXRpb25fZGlzdHJvX25vbnNwZWNpZmljX3Bhc3Moc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NyZWF0aW9uKFsnZ2xpYmMtaW5pdGlhbCddLCBkaXN0cm9fc3BlY2lmaWM9RmFsc2UsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQorCisgICAgQHRlc3RjYXNlKDk3NikKKyAgICBkZWYgdGVzdF9zc3RhdGVfY3JlYXRpb25fZGlzdHJvX25vbnNwZWNpZmljX2ZhaWwoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NyZWF0aW9uKFsnZ2xpYmMtaW5pdGlhbCddLCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPUZhbHNlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlLCBzaG91bGRfcGFzcz1GYWxzZSkKKworCisgICAgIyBUZXN0IHRoZSBzc3RhdGUgZmlsZXMgZGVsZXRpb24gcGFydCBvZiB0aGUgZG9fY2xlYW5zc3RhdGUgdGFzaworICAgIGRlZiBydW5fdGVzdF9jbGVhbnNzdGF0ZV90YXNrKHNlbGYsIHRhcmdldHMsIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSk6CisgICAgICAgIHNlbGYuY29uZmlnX3NzdGF0ZSh0ZW1wX3NzdGF0ZV9sb2NhdGlvbikKKworICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbnNzdGF0ZSddICsgdGFyZ2V0cykKKworICAgICAgICBiaXRiYWtlKHRhcmdldHMpCisgICAgICAgIHRnel9jcmVhdGVkID0gc2VsZi5zZWFyY2hfc3N0YXRlKCd8Jy5qb2luKG1hcChzdHIsIFtzICsgJy4qP1wudGd6JCcgZm9yIHMgaW4gdGFyZ2V0c10pKSwgZGlzdHJvX3NwZWNpZmljLCBkaXN0cm9fbm9uc3BlY2lmaWMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Z3pfY3JlYXRlZCwgbXNnPSJDb3VsZCBub3QgZmluZCBzc3RhdGUgLnRneiBmaWxlcyBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisKKyAgICAgICAgc2lnaW5mb19jcmVhdGVkID0gc2VsZi5zZWFyY2hfc3N0YXRlKCd8Jy5qb2luKG1hcChzdHIsIFtzICsgJy4qP1wuc2lnaW5mbyQnIGZvciBzIGluIHRhcmdldHNdKSksIGRpc3Ryb19zcGVjaWZpYywgZGlzdHJvX25vbnNwZWNpZmljKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2lnaW5mb19jcmVhdGVkLCBtc2c9IkNvdWxkIG5vdCBmaW5kIHNzdGF0ZSAuc2lnaW5mbyBmaWxlcyBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisKKyAgICAgICAgYml0YmFrZShbJy1jY2xlYW5zc3RhdGUnXSArIHRhcmdldHMpCisgICAgICAgIHRnel9yZW1vdmVkID0gc2VsZi5zZWFyY2hfc3N0YXRlKCd8Jy5qb2luKG1hcChzdHIsIFtzICsgJy4qP1wudGd6JCcgZm9yIHMgaW4gdGFyZ2V0c10pKSwgZGlzdHJvX3NwZWNpZmljLCBkaXN0cm9fbm9uc3BlY2lmaWMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdGd6X3JlbW92ZWQsIG1zZz0iZG9fY2xlYW5zc3RhdGUgZGlkbid0IHJlbW92ZSAudGd6IHNzdGF0ZSBmaWxlcyBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisKKyAgICBAdGVzdGNhc2UoOTc3KQorICAgIGRlZiB0ZXN0X2NsZWFuc3N0YXRlX3Rhc2tfZGlzdHJvX3NwZWNpZmljX25vbnNwZWNpZmljKHNlbGYpOgorICAgICAgICB0YXJnZXRhcmNoID0gZ2V0X2JiX3ZhcignVFVORV9BUkNIJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9jbGVhbnNzdGF0ZV90YXNrKFsnYmludXRpbHMtY3Jvc3MtJyArIHRhcmdldGFyY2gsICdiaW51dGlscy1uYXRpdmUnLCAnZ2xpYmMtaW5pdGlhbCddLCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKyAgICBAdGVzdGNhc2UoOTc3KQorICAgIGRlZiB0ZXN0X2NsZWFuc3N0YXRlX3Rhc2tfZGlzdHJvX25vbnNwZWNpZmljKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X2NsZWFuc3N0YXRlX3Rhc2soWydnbGliYy1pbml0aWFsJ10sIGRpc3Ryb19zcGVjaWZpYz1GYWxzZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKyAgICBAdGVzdGNhc2UoOTc3KQorICAgIGRlZiB0ZXN0X2NsZWFuc3N0YXRlX3Rhc2tfZGlzdHJvX3NwZWNpZmljKHNlbGYpOgorICAgICAgICB0YXJnZXRhcmNoID0gZ2V0X2JiX3ZhcignVFVORV9BUkNIJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9jbGVhbnNzdGF0ZV90YXNrKFsnYmludXRpbHMtY3Jvc3MtJysgdGFyZ2V0YXJjaCwgJ2JpbnV0aWxzLW5hdGl2ZScsICdnbGliYy1pbml0aWFsJ10sIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9RmFsc2UsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKworICAgICMgVGVzdCByZWJ1aWxkaW5nIG9mIGRpc3Ryby1zcGVjaWZpYyBzc3RhdGUgZmlsZXMKKyAgICBkZWYgcnVuX3Rlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlKHNlbGYsIHRhcmdldHMsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpOgorICAgICAgICBzZWxmLmNvbmZpZ19zc3RhdGUodGVtcF9zc3RhdGVfbG9jYXRpb24pCisKKyAgICAgICAgYml0YmFrZShbJy1jY2xlYW5zc3RhdGUnXSArIHRhcmdldHMpCisKKyAgICAgICAgYml0YmFrZSh0YXJnZXRzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zZWFyY2hfc3N0YXRlKCd8Jy5qb2luKG1hcChzdHIsIFtzICsgJy4qP1wudGd6JCcgZm9yIHMgaW4gdGFyZ2V0c10pKSwgZGlzdHJvX3NwZWNpZmljPUZhbHNlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSkgPT0gW10sIG1zZz0iRm91bmQgZGlzdHJvIG5vbi1zcGVjaWZpYyBzc3RhdGUgZm9yOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpKQorICAgICAgICBmaWxlX3RyYWNrZXJfMSA9IHNlbGYuc2VhcmNoX3NzdGF0ZSgnfCcuam9pbihtYXAoc3RyLCBbcyArICcuKj9cLnRneiQnIGZvciBzIGluIHRhcmdldHNdKSksIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZmlsZV90cmFja2VyXzEpID49IGxlbih0YXJnZXRzKSwgbXNnID0gIk5vdCBhbGwgc3N0YXRlIGZpbGVzIHdhcmUgY3JlYXRlZCBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLmRpc3Ryb19zcGVjaWZpY19zc3RhdGUgKyAiX29sZCIpCisgICAgICAgIHNodXRpbC5jb3B5dHJlZShzZWxmLmRpc3Ryb19zcGVjaWZpY19zc3RhdGUsIHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSArICJfb2xkIikKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmRpc3Ryb19zcGVjaWZpY19zc3RhdGUpCisKKyAgICAgICAgYml0YmFrZShbJy1jY2xlYW4nXSArIHRhcmdldHMpCisgICAgICAgIGJpdGJha2UodGFyZ2V0cykKKyAgICAgICAgZmlsZV90cmFja2VyXzIgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC50Z3okJyBmb3IgcyBpbiB0YXJnZXRzXSkpLCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGZpbGVfdHJhY2tlcl8yKSA+PSBsZW4odGFyZ2V0cyksIG1zZyA9ICJOb3QgYWxsIHNzdGF0ZSBmaWxlcyB3YXJlIGNyZWF0ZWQgZm9yOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpKQorCisgICAgICAgIG5vdF9yZWNyZWF0ZWQgPSBbeCBmb3IgeCBpbiBmaWxlX3RyYWNrZXJfMSBpZiB4IG5vdCBpbiBmaWxlX3RyYWNrZXJfMl0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdF9yZWNyZWF0ZWQgPT0gW10sIG1zZz0iVGhlIGZvbGxvd2luZyBzc3RhdGUgZmlsZXMgd2FyZSBub3QgcmVjcmVhdGVkOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgbm90X3JlY3JlYXRlZCkpKQorCisgICAgICAgIGNyZWF0ZWRfb25jZSA9IFt4IGZvciB4IGluIGZpbGVfdHJhY2tlcl8yIGlmIHggbm90IGluIGZpbGVfdHJhY2tlcl8xXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlZF9vbmNlID09IFtdLCBtc2c9IlRoZSBmb2xsb3dpbmcgc3N0YXRlIGZpbGVzIHdhcmUgY3JlYXRlZCBvbmx5IGluIHRoZSBzZWNvbmQgcnVuOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgY3JlYXRlZF9vbmNlKSkpCisKKyAgICBAdGVzdGNhc2UoMTc1KQorICAgIGRlZiB0ZXN0X3JlYnVpbGRfZGlzdHJvX3NwZWNpZmljX3NzdGF0ZV9jcm9zc19uYXRpdmVfdGFyZ2V0cyhzZWxmKToKKyAgICAgICAgdGFyZ2V0YXJjaCA9IGdldF9iYl92YXIoJ1RVTkVfQVJDSCcpCisgICAgICAgIHNlbGYucnVuX3Rlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlKFsnYmludXRpbHMtY3Jvc3MtJyArIHRhcmdldGFyY2gsICdiaW51dGlscy1uYXRpdmUnXSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKKworICAgIEB0ZXN0Y2FzZSgxNzUpCisgICAgZGVmIHRlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlX2Nyb3NzX3RhcmdldChzZWxmKToKKyAgICAgICAgdGFyZ2V0YXJjaCA9IGdldF9iYl92YXIoJ1RVTkVfQVJDSCcpCisgICAgICAgIHNlbGYucnVuX3Rlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlKFsnYmludXRpbHMtY3Jvc3MtJyArIHRhcmdldGFyY2hdLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQorCisgICAgQHRlc3RjYXNlKDE3NSkKKyAgICBkZWYgdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGVfbmF0aXZlX3RhcmdldChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGUoWydiaW51dGlscy1uYXRpdmUnXSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKKworCisgICAgIyBUZXN0IHRoZSBzc3RhdGUtY2FjaGUtbWFuYWdlbWVudCBzY3JpcHQuIEVhY2ggZWxlbWVudCBpbiB0aGUgZ2xvYmFsX2NvbmZpZyBsaXN0IGlzIHVzZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IGluIHRoZSB0YXJnZXRfY29uZmlnIGxpc3QKKyAgICAjIGdsb2JhbF9jb25maWcgZWxlbWVudHMgYXJlIGV4cGVjdGVkIHRvIG5vdCBnZW5lcmF0ZSBhbnkgc3N0YXRlIGZpbGVzIHRoYXQgd291bGQgYmUgcmVtb3ZlZCBieSBzc3RhdGUtY2FjaGUtbWFuYWdlbWVudC5zaCAoc3VjaCBhcyBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgTUFDSElORSkKKyAgICBkZWYgcnVuX3Rlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0KHNlbGYsIHRhcmdldCwgZ2xvYmFsX2NvbmZpZz1bJyddLCB0YXJnZXRfY29uZmlnPVsnJ10sIGlnbm9yZV9wYXR0ZXJucz1bXSk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnbG9iYWxfY29uZmlnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyZ2V0X2NvbmZpZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihnbG9iYWxfY29uZmlnKSA9PSBsZW4odGFyZ2V0X2NvbmZpZyksIG1zZz0nTGlzdHMgZ2xvYmFsX2NvbmZpZyBhbmQgdGFyZ2V0X2NvbmZpZyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgZWxlbWVudHMnKQorICAgICAgICBzZWxmLmNvbmZpZ19zc3RhdGUodGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSwgYWRkX2xvY2FsX21pcnJvcnM9W3NlbGYuc3N0YXRlX3BhdGhdKQorCisgICAgICAgICMgSWYgYnVpbGRoaXN0b3J5IGlzIGVuYWJsZWQsIHdlIG5lZWQgdG8gZGlzYWJsZSB2ZXJzaW9uLWdvaW5nLWJhY2t3YXJkcyBRQSBjaGVja3MgZm9yIHRoaXMgdGVzdC4gSXQgbWF5IHJlcG9ydCBlcnJvcnMgb3RoZXJ3aXNlLgorICAgICAgICBpZiAoJ2J1aWxkaGlzdG9yeScgaW4gZ2V0X2JiX3ZhcignVVNFUl9DTEFTU0VTJykpIG9yICgnYnVpbGRoaXN0b3J5JyBpbiBnZXRfYmJfdmFyKCdJTkhFUklUJykpOgorICAgICAgICAgICAgcmVtb3ZlX2Vycm9yc19jb25maWcgPSAnRVJST1JfUUFfcmVtb3ZlID0gInZlcnNpb24tZ29pbmctYmFja3dhcmRzIicKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhyZW1vdmVfZXJyb3JzX2NvbmZpZykKKworICAgICAgICAjIEZvciBub3QgdGhpcyBvbmx5IGNoZWNrcyBpZiByYW5kb20gc3N0YXRlIHRhc2tzIGFyZSBoYW5kbGVkIGNvcnJlY3RseSBhcyBhIGdyb3VwLgorICAgICAgICAjIEluIHRoZSBmdXR1cmUgd2Ugc2hvdWxkIGFkZCBjb250cm9sIG92ZXIgd2hhdCB0YXNrcyB3ZSBjaGVjayBmb3IuCisKKyAgICAgICAgc3N0YXRlX2FyY2hzX2xpc3QgPSBbXQorICAgICAgICBleHBlY3RlZF9yZW1haW5pbmdfc3N0YXRlID0gW10KKyAgICAgICAgZm9yIGlkeCBpbiByYW5nZShsZW4odGFyZ2V0X2NvbmZpZykpOgorICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGdsb2JhbF9jb25maWdbaWR4XSkKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX3JlY2lwZWluYyh0YXJnZXQsIHRhcmdldF9jb25maWdbaWR4XSkKKyAgICAgICAgICAgIHNzdGF0ZV9hcmNoID0gZ2V0X2JiX3ZhcignU1NUQVRFX1BLR0FSQ0gnLCB0YXJnZXQpCisgICAgICAgICAgICBpZiBub3Qgc3N0YXRlX2FyY2ggaW4gc3N0YXRlX2FyY2hzX2xpc3Q6CisgICAgICAgICAgICAgICAgc3N0YXRlX2FyY2hzX2xpc3QuYXBwZW5kKHNzdGF0ZV9hcmNoKQorICAgICAgICAgICAgaWYgdGFyZ2V0X2NvbmZpZ1tpZHhdID09IHRhcmdldF9jb25maWdbLTFdOgorICAgICAgICAgICAgICAgIHRhcmdldF9zc3RhdGVfYmVmb3JlX2J1aWxkID0gc2VsZi5zZWFyY2hfc3N0YXRlKHRhcmdldCArICcuKj9cLnRneiQnKQorICAgICAgICAgICAgYml0YmFrZSgiLWNjbGVhbiAlcyIgJSB0YXJnZXQpCisgICAgICAgICAgICByZXN1bHQgPSBiaXRiYWtlKHRhcmdldCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICAgICAgaWYgdGFyZ2V0X2NvbmZpZ1tpZHhdID09IHRhcmdldF9jb25maWdbLTFdOgorICAgICAgICAgICAgICAgIHRhcmdldF9zc3RhdGVfYWZ0ZXJfYnVpbGQgPSBzZWxmLnNlYXJjaF9zc3RhdGUodGFyZ2V0ICsgJy4qP1wudGd6JCcpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcmVtYWluaW5nX3NzdGF0ZSArPSBbeCBmb3IgeCBpbiB0YXJnZXRfc3N0YXRlX2FmdGVyX2J1aWxkIGlmIHggbm90IGluIHRhcmdldF9zc3RhdGVfYmVmb3JlX2J1aWxkIGlmIG5vdCBhbnkocGF0dGVybiBpbiB4IGZvciBwYXR0ZXJuIGluIGlnbm9yZV9wYXR0ZXJucyldCisgICAgICAgICAgICBzZWxmLnJlbW92ZV9jb25maWcoZ2xvYmFsX2NvbmZpZ1tpZHhdKQorICAgICAgICAgICAgc2VsZi5yZW1vdmVfcmVjaXBlaW5jKHRhcmdldCwgdGFyZ2V0X2NvbmZpZ1tpZHhdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCBtc2cgPSAiYnVpbGQgb2YgJXMgZmFpbGVkIHdpdGggJXMiICUgKHRhcmdldCwgcmVzdWx0Lm91dHB1dCkpCisKKyAgICAgICAgcnVuQ21kKCJzc3RhdGUtY2FjaGUtbWFuYWdlbWVudC5zaCAteSAtLWNhY2hlLWRpcj0lcyAtLXJlbW92ZS1kdXBsaWNhdGVkIC0tZXh0cmEtYXJjaHM9JXMiICUgKHNlbGYuc3N0YXRlX3BhdGgsICcsJy5qb2luKG1hcChzdHIsIHNzdGF0ZV9hcmNoc19saXN0KSkpKQorICAgICAgICBhY3R1YWxfcmVtYWluaW5nX3NzdGF0ZSA9IFt4IGZvciB4IGluIHNlbGYuc2VhcmNoX3NzdGF0ZSh0YXJnZXQgKyAnLio/XC50Z3okJykgaWYgbm90IGFueShwYXR0ZXJuIGluIHggZm9yIHBhdHRlcm4gaW4gaWdub3JlX3BhdHRlcm5zKV0KKworICAgICAgICBhY3R1YWxfbm90X2V4cGVjdGVkID0gW3ggZm9yIHggaW4gYWN0dWFsX3JlbWFpbmluZ19zc3RhdGUgaWYgeCBub3QgaW4gZXhwZWN0ZWRfcmVtYWluaW5nX3NzdGF0ZV0KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhY3R1YWxfbm90X2V4cGVjdGVkLCBtc2c9IkZpbGVzIHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBidXQgd2FyZSBub3Q6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCBhY3R1YWxfbm90X2V4cGVjdGVkKSkpCisgICAgICAgIGV4cGVjdGVkX25vdF9hY3R1YWwgPSBbeCBmb3IgeCBpbiBleHBlY3RlZF9yZW1haW5pbmdfc3N0YXRlIGlmIHggbm90IGluIGFjdHVhbF9yZW1haW5pbmdfc3N0YXRlXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV4cGVjdGVkX25vdF9hY3R1YWwsIG1zZz0iRXh0cmEgZmlsZXMgd2FyZSByZW1vdmVkOiAlcyIgJywgJy5qb2luKG1hcChzdHIsIGV4cGVjdGVkX25vdF9hY3R1YWwpKSkKKworICAgIEB0ZXN0Y2FzZSg5NzMpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0X3VzaW5nX3ByXzEoc2VsZik6CisgICAgICAgIGdsb2JhbF9jb25maWcgPSBbXQorICAgICAgICB0YXJnZXRfY29uZmlnID0gW10KKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJycpCisgICAgICAgIHRhcmdldF9jb25maWcuYXBwZW5kKCdQUiA9ICIwIicpCisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0KCdtNCcsIGdsb2JhbF9jb25maWcsICB0YXJnZXRfY29uZmlnLCBpZ25vcmVfcGF0dGVybnM9Wydwb3B1bGF0ZV9saWMnXSkKKworICAgIEB0ZXN0Y2FzZSg5NzgpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0X3VzaW5nX3ByXzIoc2VsZik6CisgICAgICAgIGdsb2JhbF9jb25maWcgPSBbXQorICAgICAgICB0YXJnZXRfY29uZmlnID0gW10KKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJycpCisgICAgICAgIHRhcmdldF9jb25maWcuYXBwZW5kKCdQUiA9ICIwIicpCisgICAgICAgIGdsb2JhbF9jb25maWcuYXBwZW5kKCcnKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnUFIgPSAiMSInKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9jYWNoZV9tYW5hZ2VtZW50X3NjcmlwdCgnbTQnLCBnbG9iYWxfY29uZmlnLCAgdGFyZ2V0X2NvbmZpZywgaWdub3JlX3BhdHRlcm5zPVsncG9wdWxhdGVfbGljJ10pCisKKyAgICBAdGVzdGNhc2UoOTc5KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9jYWNoZV9tYW5hZ2VtZW50X3NjcmlwdF91c2luZ19wcl8zKHNlbGYpOgorICAgICAgICBnbG9iYWxfY29uZmlnID0gW10KKyAgICAgICAgdGFyZ2V0X2NvbmZpZyA9IFtdCisgICAgICAgIGdsb2JhbF9jb25maWcuYXBwZW5kKCdNQUNISU5FID0gInFlbXV4ODYtNjQiJykKKyAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJ1BSID0gIjAiJykKKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoZ2xvYmFsX2NvbmZpZ1swXSkKKyAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJ1BSID0gIjEiJykKKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJ01BQ0hJTkUgPSAicWVtdXg4NiInKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnUFIgPSAiMSInKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9jYWNoZV9tYW5hZ2VtZW50X3NjcmlwdCgnbTQnLCBnbG9iYWxfY29uZmlnLCAgdGFyZ2V0X2NvbmZpZywgaWdub3JlX3BhdHRlcm5zPVsncG9wdWxhdGVfbGljJ10pCisKKyAgICBAdGVzdGNhc2UoOTc0KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9jYWNoZV9tYW5hZ2VtZW50X3NjcmlwdF91c2luZ19tYWNoaW5lKHNlbGYpOgorICAgICAgICBnbG9iYWxfY29uZmlnID0gW10KKyAgICAgICAgdGFyZ2V0X2NvbmZpZyA9IFtdCisgICAgICAgIGdsb2JhbF9jb25maWcuYXBwZW5kKCdNQUNISU5FID0gInFlbXV4ODYtNjQiJykKKyAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJycpCisgICAgICAgIGdsb2JhbF9jb25maWcuYXBwZW5kKCdNQUNISU5FID0gInFlbXV4ODYiJykKKyAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJycpCisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0KCdtNCcsIGdsb2JhbF9jb25maWcsICB0YXJnZXRfY29uZmlnLCBpZ25vcmVfcGF0dGVybnM9Wydwb3B1bGF0ZV9saWMnXSkKKworICAgIEB0ZXN0Y2FzZSgxMjcwKQorICAgIGRlZiB0ZXN0X3NzdGF0ZV8zMl82NF9zYW1lX2hhc2goc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgc3N0YXRlIGNoZWNrc3VtcyBmb3IgYm90aCBuYXRpdmUgYW5kIHRhcmdldCBzaG91bGQgbm90IHZhcnkgd2hldGhlcgorICAgICAgICB0aGV5J3JlIGJ1aWx0IG9uIGEgMzIgb3IgNjQgYml0IHN5c3RlbS4gUmF0aGVyIHRoYW4gcmVxdWlyaW5nIHR3byBkaWZmZXJlbnQgCisgICAgICAgIGJ1aWxkIG1hY2hpbmVzIGFuZCBydW5uaW5nIGEgYnVpbGRzLCBvdmVycmlkZSB0aGUgdmFyaWFibGVzIGNhbGxpbmcgdW5hbWUoKQorICAgICAgICBtYW51YWxseSBhbmQgY2hlY2sgdXNpbmcgYml0YmFrZSAtUy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgdG9wZGlyID0gZ2V0X2JiX3ZhcignVE9QRElSJykKKyAgICAgICAgdGFyZ2V0dmVuZG9yID0gZ2V0X2JiX3ZhcignVEFSR0VUX1ZFTkRPUicpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoXCIKK0JVSUxEX0FSQ0ggPSBcIng4Nl82NFwiCitCVUlMRF9PUyA9IFwibGludXhcIgorIiIiKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoIikKKyAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1zYXRvIC1TIG5vbmUiKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiIKK1RNUERJUiA9IFwiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaDJcIgorQlVJTERfQVJDSCA9IFwiaTY4NlwiCitCVUlMRF9PUyA9IFwibGludXhcIgorIiIiKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMiIpCisgICAgICAgIGJpdGJha2UoImNvcmUtaW1hZ2Utc2F0byAtUyBub25lIikKKworICAgICAgICBkZWYgZ2V0X2ZpbGVzKGQpOgorICAgICAgICAgICAgZiA9IFtdCisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkKToKKyAgICAgICAgICAgICAgICBmLmV4dGVuZChvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkgZm9yIG5hbWUgaW4gZmlsZXMpCisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBmaWxlczEgPSBnZXRfZmlsZXModG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gvc3RhbXBzLyIpCisgICAgICAgIGZpbGVzMiA9IGdldF9maWxlcyh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIvc3RhbXBzLyIpCisgICAgICAgIGZpbGVzMiA9IFt4LnJlcGxhY2UoInRtcC1zc3RhdGVzYW1laGFzaDIiLCAidG1wLXNzdGF0ZXNhbWVoYXNoIikucmVwbGFjZSgiaTY4Ni1saW51eCIsICJ4ODZfNjQtbGludXgiKS5yZXBsYWNlKCJpNjg2IiArIHRhcmdldHZlbmRvciArICItbGludXgiLCAieDg2XzY0IiArIHRhcmdldHZlbmRvciArICItbGludXgiLCApIGZvciB4IGluIGZpbGVzMl0KKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKGZpbGVzMSwgZmlsZXMyKQorCisKKyAgICBAdGVzdGNhc2UoMTI3MSkKKyAgICBkZWYgdGVzdF9zc3RhdGVfbmF0aXZlbHNic3RyaW5nX3NhbWVfaGFzaChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBzc3RhdGUgY2hlY2tzdW1zIHNob3VsZCBiZSBpbmRlcGVuZGVudCBvZiB3aGljaGV2ZXIgTkFUSVZFTFNCU1RSSU5HIGlzCisgICAgICAgIGRldGVjdGVkLiBSYXRoZXIgdGhhbiByZXF1aXJpbmcgdHdvIGRpZmZlcmVudCBidWlsZCBtYWNoaW5lcyBhbmQgcnVubmluZyAKKyAgICAgICAgYnVpbGRzLCBvdmVycmlkZSB0aGUgdmFyaWFibGVzIG1hbnVhbGx5IGFuZCBjaGVjayB1c2luZyBiaXRiYWtlIC1TLgorICAgICAgICAiIiIKKworICAgICAgICB0b3BkaXIgPSBnZXRfYmJfdmFyKCdUT1BESVInKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiIKK1RNUERJUiA9IFwiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaFwiCitOQVRJVkVMU0JTVFJJTkcgPSBcIkRpc3Ryb0FcIgorIiIiKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoIikKKyAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1zYXRvIC1TIG5vbmUiKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiIKK1RNUERJUiA9IFwiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaDJcIgorTkFUSVZFTFNCU1RSSU5HID0gXCJEaXN0cm9CXCIKKyIiIikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIiKQorICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLXNhdG8gLVMgbm9uZSIpCisKKyAgICAgICAgZGVmIGdldF9maWxlcyhkKToKKyAgICAgICAgICAgIGYgPSBbXQorICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZCk6CisgICAgICAgICAgICAgICAgZi5leHRlbmQob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpIGZvciBuYW1lIGluIGZpbGVzKQorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgZmlsZXMxID0gZ2V0X2ZpbGVzKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoL3N0YW1wcy8iKQorICAgICAgICBmaWxlczIgPSBnZXRfZmlsZXModG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyL3N0YW1wcy8iKQorICAgICAgICBmaWxlczIgPSBbeC5yZXBsYWNlKCJ0bXAtc3N0YXRlc2FtZWhhc2gyIiwgInRtcC1zc3RhdGVzYW1laGFzaCIpIGZvciB4IGluIGZpbGVzMl0KKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKGZpbGVzMSwgZmlsZXMyKQorCisgICAgZGVmIHRlc3Rfc3N0YXRlX2FsbGFyY2hfc2FtZXNpZ3Moc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgc3N0YXRlIGNoZWNrc3VtcyBvZmYgYWxsYXJjaCBwYWNrYWdlcyBzaG91bGQgYmUgaW5kZXBlbmRlbnQgb2Ygd2hpY2hldmVyIAorICAgICAgICBNQUNISU5FIGlzIHNldC4gQ2hlY2sgdGhpcyB1c2luZyBiaXRiYWtlIC1TLgorICAgICAgICAiIiIKKworICAgICAgICB0b3BkaXIgPSBnZXRfYmJfdmFyKCdUT1BESVInKQorICAgICAgICB0YXJnZXRvcyA9IGdldF9iYl92YXIoJ1RBUkdFVF9PUycpCisgICAgICAgIHRhcmdldHZlbmRvciA9IGdldF9iYl92YXIoJ1RBUkdFVF9WRU5ET1InKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiIKK1RNUERJUiA9IFwiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaFwiCitNQUNISU5FID0gXCJxZW11eDg2XCIKKyIiIikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaCIpCisgICAgICAgIGJpdGJha2UoIndvcmxkIC1TIG5vbmUiKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiIKK1RNUERJUiA9IFwiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaDJcIgorTUFDSElORSA9IFwicWVtdWFybVwiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyIikKKyAgICAgICAgYml0YmFrZSgid29ybGQgLVMgbm9uZSIpCisKKyAgICAgICAgZGVmIGdldF9maWxlcyhkKToKKyAgICAgICAgICAgIGYgPSBbXQorICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZCk6CisgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGlmICJkb19idWlsZCIgbm90IGluIG5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICBmLmFwcGVuZChvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkpCisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBmaWxlczEgPSBnZXRfZmlsZXModG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gvc3RhbXBzL2FsbCIgKyB0YXJnZXR2ZW5kb3IgKyAiLSIgKyB0YXJnZXRvcykKKyAgICAgICAgZmlsZXMyID0gZ2V0X2ZpbGVzKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMi9zdGFtcHMvYWxsIiArIHRhcmdldHZlbmRvciArICItIiArIHRhcmdldG9zKQorICAgICAgICBmaWxlczIgPSBbeC5yZXBsYWNlKCJ0bXAtc3N0YXRlc2FtZWhhc2gyIiwgInRtcC1zc3RhdGVzYW1laGFzaCIpIGZvciB4IGluIGZpbGVzMl0KKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoZmlsZXMxLCBmaWxlczIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvd2ljLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3dpYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGM1NGE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3dpYy5weQpAQCAtMCwwICsxLDIzNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTUsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQVVUSE9SUworIyBFZCBCYXJ0b3NoIDxlZC5iYXJ0b3NoQGxpbnV4LmludGVsLmNvbT4KKworIiIiVGVzdCBjYXNlcyBmb3Igd2ljLiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworZnJvbSBnbG9iIGltcG9ydCBnbG9iCitmcm9tIHNodXRpbCBpbXBvcnQgcm10cmVlCisKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhcgorCitjbGFzcyBXaWMob2VTZWxmVGVzdCk6CisgICAgIiIiV2ljIHRlc3QgY2xhc3MuIiIiCisKKyAgICByZXN1bHRkaXIgPSAiL3Zhci90bXAvd2ljL2J1aWxkLyIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICIiIkJ1aWxkIHdpYyBydW50aW1lIGRlcGVuZGVuY2llcy4iIiIKKyAgICAgICAgYml0YmFrZSgnc3lzbGludXggc3lzbGludXgtbmF0aXZlIHBhcnRlZC1uYXRpdmUgZ3B0ZmRpc2stbmF0aXZlICcKKyAgICAgICAgICAgICAgICAnZG9zZnN0b29scy1uYXRpdmUgbXRvb2xzLW5hdGl2ZScpCisgICAgICAgIFdpYy5pbWFnZV9pc19yZWFkeSA9IEZhbHNlCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICIiIlRoaXMgY29kZSBpcyBleGVjdXRlZCBiZWZvcmUgZWFjaCB0ZXN0IG1ldGhvZC4iIiIKKyAgICAgICAgaWYgbm90IFdpYy5pbWFnZV9pc19yZWFkeToKKyAgICAgICAgICAgICMgYnVpbGQgY29yZS1pbWFnZS1taW5pbWFsIHdpdGggcmVxdWlyZWQgZmVhdHVyZXMKKyAgICAgICAgICAgIGZlYXR1cmVzID0gJ0lNQUdFX0ZTVFlQRVMgKz0gIiBoZGRpbWciXG5NQUNISU5FX0ZFQVRVUkVTX2FwcGVuZCA9ICIgZWZpIlxuJworICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGZlYXR1cmVzKQorICAgICAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykKKyAgICAgICAgICAgICMgc2V0IHRoaXMgY2xhc3MgdmFyaWFibGUgdG8gYXZvaWQgYnVpZGluZyBpbWFnZSBtYW55IHRpbWVzCisgICAgICAgICAgICBXaWMuaW1hZ2VfaXNfcmVhZHkgPSBUcnVlCisKKyAgICAgICAgcm10cmVlKHNlbGYucmVzdWx0ZGlyLCBpZ25vcmVfZXJyb3JzPVRydWUpCisKKyAgICBkZWYgdGVzdDAxX2hlbHAoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIC0taGVscCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIC0taGVscCcpLnN0YXR1cykKKworICAgIGRlZiB0ZXN0MDJfY3JlYXRlaGVscChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgY3JlYXRlIC0taGVscCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIGNyZWF0ZSAtLWhlbHAnKS5zdGF0dXMpCisKKyAgICBkZWYgdGVzdDAzX2xpc3RoZWxwKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyBsaXN0IC0taGVscCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIGxpc3QgLS1oZWxwJykuc3RhdHVzKQorCisgICAgZGVmIHRlc3QwNF9idWlsZF9pbWFnZV9uYW1lKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyBjcmVhdGUgZGlyZWN0ZGlzayAtLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIGRpcmVjdGRpc2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lIGNvcmUtaW1hZ2UtbWluaW1hbCIpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJkaXJlY3RkaXNrLSouZGlyZWN0IikpKQorCisgICAgZGVmIHRlc3QwNV9idWlsZF9hcnRpZmFjdHMoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGNyZWF0ZSBkaXJlY3RkaXNrIHByb3ZpZGluZyBhbGwgYXJ0aWZhY3RzLiIiIgorICAgICAgICB2YXJzID0gZGljdCgodmFyLmxvd2VyKCksIGdldF9iYl92YXIodmFyLCAnY29yZS1pbWFnZS1taW5pbWFsJykpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB2YXIgaW4gKCdTVEFHSU5HX0RBVEFESVInLCAnREVQTE9ZX0RJUl9JTUFHRScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU1RBR0lOR19ESVJfTkFUSVZFJywgJ0lNQUdFX1JPT1RGUycpKQorICAgICAgICBzdGF0dXMgPSBydW5DbWQoIndpYyBjcmVhdGUgZGlyZWN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLWIgJShzdGFnaW5nX2RhdGFkaXIpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLWsgJShkZXBsb3lfZGlyX2ltYWdlKXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi1uICUoc3RhZ2luZ19kaXJfbmF0aXZlKXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi1yICUoaW1hZ2Vfcm9vdGZzKXMiICUgdmFycykuc3RhdHVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgImRpcmVjdGRpc2stKi5kaXJlY3QiKSkpCisKKyAgICBkZWYgdGVzdDA2X2dwdF9pbWFnZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjcmVhdGlvbiBvZiBjb3JlLWltYWdlLW1pbmltYWwgd2l0aCBncHQgdGFibGUgYW5kIFVVSUQgYm9vdCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSBkaXJlY3RkaXNrLWdwdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsIikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgImRpcmVjdGRpc2stKi5kaXJlY3QiKSkpCisKKyAgICBkZWYgdGVzdDA3X3Vuc3VwcG9ydGVkX3N1YmNvbW1hbmQoc2VsZik6CisgICAgICAgICIiIlRlc3QgdW5zdXBwb3J0ZWQgc3ViY29tbWFuZCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHJ1bkNtZCgnd2ljIHVuc3VwcG9ydGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVfc3RhdHVzPVRydWUpLnN0YXR1cykKKworICAgIGRlZiB0ZXN0MDhfbm9fY29tbWFuZChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgd2l0aG91dCBjb21tYW5kIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcnVuQ21kKCd3aWMnLCBpZ25vcmVfc3RhdHVzPVRydWUpLnN0YXR1cykKKworICAgIGRlZiB0ZXN0MDlfaGVscF9raWNrc3RhcnQoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGhlbHAgb3ZlcnZpZXciIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoJ3dpYyBoZWxwIG92ZXJ2aWV3Jykuc3RhdHVzKQorCisgICAgZGVmIHRlc3QxMF9oZWxwX3BsdWdpbnMoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGhlbHAgcGx1Z2lucyIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIGhlbHAgcGx1Z2lucycpLnN0YXR1cykKKworICAgIGRlZiB0ZXN0MTFfaGVscF9raWNrc3RhcnQoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGhlbHAga2lja3N0YXJ0IiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgaGVscCBraWNrc3RhcnQnKS5zdGF0dXMpCisKKyAgICBkZWYgdGVzdDEyX2NvbXByZXNzX2d6aXAoc2VsZik6CisgICAgICAgICIiIlRlc3QgY29tcHJlc3NpbmcgYW4gaW1hZ2Ugd2l0aCBnemlwIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIGRpcmVjdGRpc2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lIGNvcmUtaW1hZ2UtbWluaW1hbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyBnemlwIikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlyZWN0ZGlzay0qLmRpcmVjdC5neiIpKSkKKworICAgIGRlZiB0ZXN0MTNfY29tcHJlc3NfZ3ppcChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjb21wcmVzc2luZyBhbiBpbWFnZSB3aXRoIGJ6aXAyIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIGRpcmVjdGRpc2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lIGNvcmUtaW1hZ2UtbWluaW1hbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyBiemlwMiIpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpcmVjdGRpc2stKi5kaXJlY3QuYnoyIikpKQorCisgICAgZGVmIHRlc3QxNF9jb21wcmVzc19nemlwKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNvbXByZXNzaW5nIGFuIGltYWdlIHdpdGggeHoiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgZGlyZWN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIHh6Iikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlyZWN0ZGlzay0qLmRpcmVjdC54eiIpKSkKKworICAgIGRlZiB0ZXN0MTVfd3JvbmdfY29tcHJlc3NvcihzZWxmKToKKyAgICAgICAgIiIiVGVzdCBob3cgd2ljIGJyZWFrcyBpZiB3cm9uZyBjb21wcmVzc29yIGlzIHByb3ZpZGVkIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgcnVuQ21kKCJ3aWMgY3JlYXRlIGRpcmVjdGRpc2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lIGNvcmUtaW1hZ2UtbWluaW1hbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyB3cm9uZyIsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkuc3RhdHVzKQorCisgICAgZGVmIHRlc3QxNl9yb290ZnNfaW5kaXJlY3RfcmVjaXBlcyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB1c2FnZSBvZiByb290ZnMgcGx1Z2luIHdpdGggcm9vdGZzIHJlY2lwZXMiIiIKKyAgICAgICAgd2tzID0gImRpcmVjdGRpc2stbXVsdGktcm9vdGZzIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSAlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tcm9vdGZzIHJvb3RmczE9Y29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tcm9vdGZzIHJvb3RmczI9Y29yZS1pbWFnZS1taW5pbWFsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgd2tzKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiJXMqLmRpcmVjdCIgJSB3a3MpKSkKKworICAgIGRlZiB0ZXN0MTdfcm9vdGZzX2FydGlmYWN0cyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB1c2FnZSBvZiByb290ZnMgcGx1Z2luIHdpdGggcm9vdGZzIHBhdGhzIiIiCisgICAgICAgIHZhcnMgPSBkaWN0KCh2YXIubG93ZXIoKSwgZ2V0X2JiX3Zhcih2YXIsICdjb3JlLWltYWdlLW1pbmltYWwnKSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHZhciBpbiAoJ1NUQUdJTkdfREFUQURJUicsICdERVBMT1lfRElSX0lNQUdFJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTVEFHSU5HX0RJUl9OQVRJVkUnLCAnSU1BR0VfUk9PVEZTJykpCisgICAgICAgIHZhcnNbJ3drcyddID0gImRpcmVjdGRpc2stbXVsdGktcm9vdGZzIgorICAgICAgICBzdGF0dXMgPSBydW5DbWQoIndpYyBjcmVhdGUgJSh3a3MpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLWIgJShzdGFnaW5nX2RhdGFkaXIpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLWsgJShkZXBsb3lfZGlyX2ltYWdlKXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi1uICUoc3RhZ2luZ19kaXJfbmF0aXZlKXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi0tcm9vdGZzLWRpciByb290ZnMxPSUoaW1hZ2Vfcm9vdGZzKXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi0tcm9vdGZzLWRpciByb290ZnMyPSUoaW1hZ2Vfcm9vdGZzKXMiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICUgdmFycykuc3RhdHVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlKHdrcylzLSouZGlyZWN0IiAlIHZhcnMpKSkKKworICAgIGRlZiB0ZXN0MThfaXNvX2ltYWdlKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNyZWF0aW9uIG9mIGh5YnJpZCBpc28gaW1hZ2V3aXRoIGxlZ2FjeSBhbmQgRUZJIGJvb3QiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgbWtoeWJyaWRpc28gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lIGNvcmUtaW1hZ2UtbWluaW1hbCIpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJIWUJSSURfSVNPX0lNRy0qLmRpcmVjdCIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJIWUJSSURfSVNPX0lNRy0qLmlzbyIpKSkKKworICAgIGRlZiB0ZXN0MTlfaW1hZ2VfZW52KHNlbGYpOgorICAgICAgICAiIiJUZXN0IGdlbmVyYXRpb24gb2YgPGltYWdlPi5lbnYgZmlsZXMuIiIiCisgICAgICAgIGltYWdlID0gJ2NvcmUtaW1hZ2UtbWluaW1hbCcKKyAgICAgICAgc3RkaXIgPSBnZXRfYmJfdmFyKCdTVEFHSU5HX0RJUl9UQVJHRVQnLCBpbWFnZSkKKyAgICAgICAgaW1nZGF0YWRpciA9IG9zLnBhdGguam9pbihzdGRpciwgJ2ltZ2RhdGEnKQorCisgICAgICAgIGJhc2VuYW1lID0gZ2V0X2JiX3ZhcignSU1BR0VfQkFTRU5BTUUnLCBpbWFnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlbmFtZSwgaW1hZ2UpCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oaW1nZGF0YWRpciwgYmFzZW5hbWUpICsgJy5lbnYnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShwYXRoKSkKKworICAgICAgICB3aWN2YXJzID0gc2V0KGdldF9iYl92YXIoJ1dJQ1ZBUlMnLCBpbWFnZSkuc3BsaXQoKSkKKyAgICAgICAgIyBmaWx0ZXIgb3V0IG9wdGlvbmFsIHZhcmlhYmxlcworICAgICAgICB3aWN2YXJzID0gd2ljdmFycy5kaWZmZXJlbmNlKCgnSERERElSJywgJ0lNQUdFX0JPT1RfRklMRVMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSU5JVFJEJywgJ0lTT0RJUicpKQorICAgICAgICB3aXRoIG9wZW4ocGF0aCkgYXMgZW52ZmlsZToKKyAgICAgICAgICAgIGNvbnRlbnQgPSBkaWN0KGxpbmUuc3BsaXQoIj0iLCAxKSBmb3IgbGluZSBpbiBlbnZmaWxlKQorICAgICAgICAgICAgIyB0ZXN0IGlmIHZhcmlhYmxlcyB1c2VkIGJ5IHdpYyBwcmVzZW50IGluIHRoZSAuZW52IGZpbGUKKyAgICAgICAgICAgIGZvciB2YXIgaW4gd2ljdmFyczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmFyIGluIGNvbnRlbnQsICIlcyBpcyBub3QgaW4gLmVudiBmaWxlIiAlIHZhcikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29udGVudFt2YXJdKQorCisgICAgZGVmIHRlc3QyMF93aWNfaW1hZ2VfdHlwZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCBidWlsZGluZyB3aWMgaW1hZ2VzIGJ5IGJpdGJha2UiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBiaXRiYWtlKCd3aWMtaW1hZ2UtbWluaW1hbCcpLnN0YXR1cykKKworICAgICAgICBkZXBsb3lfZGlyID0gZ2V0X2JiX3ZhcignREVQTE9ZX0RJUl9JTUFHRScpCisgICAgICAgIG1hY2hpbmUgPSBnZXRfYmJfdmFyKCdNQUNISU5FJykKKyAgICAgICAgcHJlZml4ID0gb3MucGF0aC5qb2luKGRlcGxveV9kaXIsICd3aWMtaW1hZ2UtbWluaW1hbC0lcy4nICUgbWFjaGluZSkKKyAgICAgICAgIyBjaGVjayBpZiB3ZSBoYXZlIHJlc3VsdCBpbWFnZSBhbmQgbWFuaWZlc3RzIHN5bWxpbmtzCisgICAgICAgICMgcG9pbnRpbmcgdG8gZXhpc3RpbmcgZmlsZXMKKyAgICAgICAgZm9yIHN1ZmZpeCBpbiAoJ3dpYy5iejInLCAnbWFuaWZlc3QnKToKKyAgICAgICAgICAgIHBhdGggPSBwcmVmaXggKyBzdWZmaXgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzbGluayhwYXRoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLnJlYWxwYXRoKHBhdGgpKSkKKworICAgIGRlZiB0ZXN0MjFfcWVtdXg4Nl9kaXJlY3RkaXNrKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNyZWF0aW9uIG9mIHFlbXV4LTg2LWRpcmVjdGRpc2sgaW1hZ2UiIiIKKyAgICAgICAgaW1hZ2UgPSAicWVtdXg4Ni1kaXJlY3RkaXNrIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSAlcyAtZSBjb3JlLWltYWdlLW1pbmltYWwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBpbWFnZSkuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIiVzLSpkaXJlY3QiICUgaW1hZ2UpKSkKKworICAgIGRlZiB0ZXN0MjJfbWtndW1taWRpc2soc2VsZik6CisgICAgICAgICIiIlRlc3QgY3JlYXRpb24gb2YgbWtndW1taWRpc2sgaW1hZ2UiIiIKKyAgICAgICAgaW1hZ2UgPSAibWtndW1taWRpc2siCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlICVzIC1lIGNvcmUtaW1hZ2UtbWluaW1hbCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGltYWdlKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiJXMtKmRpcmVjdCIgJSBpbWFnZSkpKQorCisgICAgZGVmIHRlc3QyM19ta2VmaWRpc2soc2VsZik6CisgICAgICAgICIiIlRlc3QgY3JlYXRpb24gb2YgbWtlZmlkaXNrIGltYWdlIiIiCisgICAgICAgIGltYWdlID0gIm1rZWZpZGlzayIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgJXMgLWUgY29yZS1pbWFnZS1taW5pbWFsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgaW1hZ2UpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICIlcy0qZGlyZWN0IiAlIGltYWdlKSkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdGFyZ2V0Y29udHJvbC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS90YXJnZXRjb250cm9sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYzBkMDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdGFyZ2V0Y29udHJvbC5weQpAQCAtMCwwICsxLDI0MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBtb2R1bGUgaXMgdXNlZCBieSB0ZXN0aW1hZ2UuYmJjbGFzcyBmb3Igc2V0dGluZyB1cCBhbmQgY29udHJvbGxpbmcgYSB0YXJnZXQgbWFjaGluZS4KKworaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGJiCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgc3lzCitpbXBvcnQgbG9nZ2luZworZnJvbSBvZXFhLnV0aWxzLnNzaGNvbnRyb2wgaW1wb3J0IFNTSENvbnRyb2wKK2Zyb20gb2VxYS51dGlscy5xZW11cnVubmVyIGltcG9ydCBRZW11UnVubmVyCitmcm9tIG9lcWEudXRpbHMucWVtdXRpbnlydW5uZXIgaW1wb3J0IFFlbXVUaW55UnVubmVyCitmcm9tIG9lcWEudXRpbHMuZHVtcCBpbXBvcnQgVGFyZ2V0RHVtcGVyCitmcm9tIG9lcWEuY29udHJvbGxlcnMudGVzdHRhcmdldGxvYWRlciBpbXBvcnQgVGVzdFRhcmdldExvYWRlcgorZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCisKK2RlZiBnZXRfdGFyZ2V0X2NvbnRyb2xsZXIoZCk6CisgICAgdGVzdHRhcmdldCA9IGQuZ2V0VmFyKCJURVNUX1RBUkdFVCIsIFRydWUpCisgICAgIyBvbGQsIHNpbXBsZSBuYW1lcworICAgIGlmIHRlc3R0YXJnZXQgPT0gInFlbXUiOgorICAgICAgICByZXR1cm4gUWVtdVRhcmdldChkKQorICAgIGVsaWYgdGVzdHRhcmdldCA9PSAic2ltcGxlcmVtb3RlIjoKKyAgICAgICAgcmV0dXJuIFNpbXBsZVJlbW90ZVRhcmdldChkKQorICAgIGVsc2U6CisgICAgICAgICMgdXNlIHRoZSBjbGFzcyBuYW1lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgaXMgaXQgYSBjb3JlIGNsYXNzIGRlZmluZWQgaGVyZT8KKyAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBnZXRhdHRyKHN5cy5tb2R1bGVzW19fbmFtZV9fXSwgdGVzdHRhcmdldCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIyBub3BlLCBwZXJoYXBzIGEgbGF5ZXIgZGVmaW5lZCBvbmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBiYnBhdGggPSBkLmdldFZhcigiQkJQQVRIIiwgVHJ1ZSkuc3BsaXQoJzonKQorICAgICAgICAgICAgICAgIHRlc3R0YXJnZXRsb2FkZXIgPSBUZXN0VGFyZ2V0TG9hZGVyKCkKKyAgICAgICAgICAgICAgICBjb250cm9sbGVyID0gdGVzdHRhcmdldGxvYWRlci5nZXRfY29udHJvbGxlcl9tb2R1bGUodGVzdHRhcmdldCwgYmJwYXRoKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkZhaWxlZCB0byBpbXBvcnQgezB9IGZyb20gYXZhaWxhYmxlIGNvbnRyb2xsZXIgbW9kdWxlczpcbnsxfSIuZm9ybWF0KHRlc3R0YXJnZXQsdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiSW52YWxpZCBURVNUX1RBUkdFVCAtICIgKyBzdHIoZSkpCisgICAgICAgIHJldHVybiBjb250cm9sbGVyKGQpCisKKworY2xhc3MgQmFzZVRhcmdldChvYmplY3QpOgorCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIHN1cHBvcnRlZF9pbWFnZV9mc3R5cGVzID0gW10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gTm9uZQorICAgICAgICBzZWxmLmlwID0gTm9uZQorICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IE5vbmUKKyAgICAgICAgc2VsZi5kYXRldGltZSA9IGQuZ2V0VmFyKCdEQVRFVElNRScsIFRydWUpCisgICAgICAgIHNlbGYudGVzdGRpciA9IGQuZ2V0VmFyKCJURVNUX0xPR19ESVIiLCBUcnVlKQorICAgICAgICBzZWxmLnBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBkZXBsb3koc2VsZik6CisKKyAgICAgICAgc2VsZi5zc2hsb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGlyLCAic3NoX3RhcmdldF9sb2cuJXMiICUgc2VsZi5kYXRldGltZSkKKyAgICAgICAgc3NobG9nbGluayA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICJzc2hfdGFyZ2V0X2xvZyIpCisgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKHNzaGxvZ2xpbmspOgorICAgICAgICAgICAgb3MudW5saW5rKHNzaGxvZ2xpbmspCisgICAgICAgIG9zLnN5bWxpbmsoc2VsZi5zc2hsb2csIHNzaGxvZ2xpbmspCisgICAgICAgIGJiLm5vdGUoIlNTSCBsb2cgZmlsZTogJXMiICUgIHNlbGYuc3NobG9nKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHN0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBnZXRfZXh0cmFfZmlsZXMoc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbWF0Y2hfaW1hZ2VfZnN0eXBlKHNlbGYsIGQsIGltYWdlX2ZzdHlwZXM9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBpbWFnZV9mc3R5cGVzOgorICAgICAgICAgICAgaW1hZ2VfZnN0eXBlcyA9IGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSkuc3BsaXQoJyAnKQorICAgICAgICBwb3NzaWJsZV9pbWFnZV9mc3R5cGVzID0gW2ZzdHlwZSBmb3IgZnN0eXBlIGluIHNlbGYuc3VwcG9ydGVkX2ltYWdlX2ZzdHlwZXMgaWYgZnN0eXBlIGluIGltYWdlX2ZzdHlwZXNdCisgICAgICAgIGlmIHBvc3NpYmxlX2ltYWdlX2ZzdHlwZXM6CisgICAgICAgICAgICByZXR1cm4gcG9zc2libGVfaW1hZ2VfZnN0eXBlc1swXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBnZXRfaW1hZ2VfZnN0eXBlKHNlbGYsIGQpOgorICAgICAgICBpbWFnZV9mc3R5cGUgPSBzZWxmLm1hdGNoX2ltYWdlX2ZzdHlwZShkKQorICAgICAgICBpZiBpbWFnZV9mc3R5cGU6CisgICAgICAgICAgICByZXR1cm4gaW1hZ2VfZnN0eXBlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi5mYXRhbCgiSU1BR0VfRlNUWVBFUyBzaG91bGQgY29udGFpbiBhIFRhcmdldCBDb250cm9sbGVyIHN1cHBvcnRlZCBpbWFnZSBmc3R5cGU6ICVzICIgJSAnLCAnLmpvaW4obWFwKHN0ciwgc2VsZi5zdXBwb3J0ZWRfaW1hZ2VfZnN0eXBlcykpKQorCisgICAgZGVmIHJlc3RhcnQoc2VsZiwgcGFyYW1zPU5vbmUpOgorICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICBzZWxmLnN0YXJ0KHBhcmFtcykKKworICAgIGRlZiBydW4oc2VsZiwgY21kLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLnJ1bihjbWQsIHRpbWVvdXQpCisKKyAgICBkZWYgY29weV90byhzZWxmLCBsb2NhbHBhdGgsIHJlbW90ZXBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLmNvcHlfdG8obG9jYWxwYXRoLCByZW1vdGVwYXRoKQorCisgICAgZGVmIGNvcHlfZnJvbShzZWxmLCByZW1vdGVwYXRoLCBsb2NhbHBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLmNvcHlfZnJvbShyZW1vdGVwYXRoLCBsb2NhbHBhdGgpCisKKworCitjbGFzcyBRZW11VGFyZ2V0KEJhc2VUYXJnZXQpOgorCisgICAgc3VwcG9ydGVkX2ltYWdlX2ZzdHlwZXMgPSBbJ2V4dDMnLCAnZXh0NCcsICdjcGlvLmd6J10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKworICAgICAgICBzdXBlcihRZW11VGFyZ2V0LCBzZWxmKS5fX2luaXRfXyhkKQorCisgICAgICAgIHNlbGYuaW1hZ2VfZnN0eXBlID0gc2VsZi5nZXRfaW1hZ2VfZnN0eXBlKGQpCisgICAgICAgIHNlbGYucWVtdWxvZyA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICJxZW11X2Jvb3RfbG9nLiVzIiAlIHNlbGYuZGF0ZXRpbWUpCisgICAgICAgIHNlbGYub3JpZ3Jvb3RmcyA9IG9zLnBhdGguam9pbihkLmdldFZhcigiREVQTE9ZX0RJUl9JTUFHRSIsIFRydWUpLCAgZC5nZXRWYXIoIklNQUdFX0xJTktfTkFNRSIsIFRydWUpICsgJy4nICsgc2VsZi5pbWFnZV9mc3R5cGUpCisgICAgICAgIHNlbGYucm9vdGZzID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgZC5nZXRWYXIoIklNQUdFX0xJTktfTkFNRSIsIFRydWUpICsgJy10ZXN0aW1hZ2UuJyArIHNlbGYuaW1hZ2VfZnN0eXBlKQorICAgICAgICBzZWxmLmtlcm5lbCA9IG9zLnBhdGguam9pbihkLmdldFZhcigiREVQTE9ZX0RJUl9JTUFHRSIsIFRydWUpLCBkLmdldFZhcigiS0VSTkVMX0lNQUdFVFlQRSIsIEZhbHNlKSArICctJyArIGQuZ2V0VmFyKCdNQUNISU5FJywgRmFsc2UpICsgJy5iaW4nKQorICAgICAgICBkdW1wX3RhcmdldF9jbWRzID0gZC5nZXRWYXIoInRlc3RpbWFnZV9kdW1wX3RhcmdldCIsIFRydWUpCisgICAgICAgIGR1bXBfaG9zdF9jbWRzID0gZC5nZXRWYXIoInRlc3RpbWFnZV9kdW1wX2hvc3QiLCBUcnVlKQorICAgICAgICBkdW1wX2RpciA9IGQuZ2V0VmFyKCJURVNUSU1BR0VfRFVNUF9ESVIiLCBUcnVlKQorCisgICAgICAgICMgTG9nIFFlbXVSdW5uZXIgbG9nIG91dHB1dCB0byBhIGZpbGUKKyAgICAgICAgaW1wb3J0IG9lLnBhdGgKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYudGVzdGRpcikKKyAgICAgICAgc2VsZi5xZW11cnVubmVybG9nID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgJ3FlbXVydW5uZXJfbG9nLiVzJyAlIHNlbGYuZGF0ZXRpbWUpCisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdCaXRCYWtlLlFlbXVSdW5uZXInKQorICAgICAgICBsb2dnZXJoYW5kbGVyID0gbG9nZ2luZy5GaWxlSGFuZGxlcihzZWxmLnFlbXVydW5uZXJsb2cpCisgICAgICAgIGxvZ2dlcmhhbmRsZXIuc2V0Rm9ybWF0dGVyKGxvZ2dpbmcuRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpKQorICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihsb2dnZXJoYW5kbGVyKQorICAgICAgICBvZS5wYXRoLnN5bWxpbmsob3MucGF0aC5iYXNlbmFtZShzZWxmLnFlbXVydW5uZXJsb2cpLCBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGlyLCAncWVtdXJ1bm5lcl9sb2cnKSwgZm9yY2U9VHJ1ZSkKKworICAgICAgICBpZiBkLmdldFZhcigiRElTVFJPIiwgVHJ1ZSkgPT0gInBva3ktdGlueSI6CisgICAgICAgICAgICBzZWxmLnJ1bm5lciA9IFFlbXVUaW55UnVubmVyKG1hY2hpbmU9ZC5nZXRWYXIoIk1BQ0hJTkUiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290ZnM9c2VsZi5yb290ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wZGlyID0gZC5nZXRWYXIoIlRNUERJUiIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGxveV9kaXJfaW1hZ2UgPSBkLmdldFZhcigiREVQTE9ZX0RJUl9JTUFHRSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBkLmdldFZhcigiQkJfT1JJR0VOViIsIEZhbHNlKS5nZXRWYXIoIkRJU1BMQVkiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dmaWxlID0gc2VsZi5xZW11bG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbCA9IHNlbGYua2VybmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3R0aW1lID0gaW50KGQuZ2V0VmFyKCJURVNUX1FFTVVCT09UX1RJTUVPVVQiLCBUcnVlKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnJ1bm5lciA9IFFlbXVSdW5uZXIobWFjaGluZT1kLmdldFZhcigiTUFDSElORSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Rmcz1zZWxmLnJvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBkaXIgPSBkLmdldFZhcigiVE1QRElSIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwbG95X2Rpcl9pbWFnZSA9IGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSA9IGQuZ2V0VmFyKCJCQl9PUklHRU5WIiwgRmFsc2UpLmdldFZhcigiRElTUExBWSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ZpbGUgPSBzZWxmLnFlbXVsb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdHRpbWUgPSBpbnQoZC5nZXRWYXIoIlRFU1RfUUVNVUJPT1RfVElNRU9VVCIsIFRydWUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wX2RpciA9IGR1bXBfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBfaG9zdF9jbWRzID0gZC5nZXRWYXIoInRlc3RpbWFnZV9kdW1wX2hvc3QiLCBUcnVlKSkKKworICAgICAgICBzZWxmLnRhcmdldF9kdW1wZXIgPSBUYXJnZXREdW1wZXIoZHVtcF90YXJnZXRfY21kcywgZHVtcF9kaXIsIHNlbGYucnVubmVyKQorCisgICAgZGVmIGRlcGxveShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYudGVzdGRpcikKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzZWxmLm9yaWdyb290ZnMsIHNlbGYucm9vdGZzKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiRXJyb3IgY29weWluZyByb290ZnM6ICVzIiAlIGUpCisKKyAgICAgICAgcWVtdWxvZ2xpbmsgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGlyLCAicWVtdV9ib290X2xvZyIpCisgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKHFlbXVsb2dsaW5rKToKKyAgICAgICAgICAgIG9zLnVubGluayhxZW11bG9nbGluaykKKyAgICAgICAgb3Muc3ltbGluayhzZWxmLnFlbXVsb2csIHFlbXVsb2dsaW5rKQorCisgICAgICAgIGJiLm5vdGUoInJvb3RmcyBmaWxlOiAlcyIgJSAgc2VsZi5yb290ZnMpCisgICAgICAgIGJiLm5vdGUoIlFlbXUgbG9nIGZpbGU6ICVzIiAlIHNlbGYucWVtdWxvZykKKyAgICAgICAgc3VwZXIoUWVtdVRhcmdldCwgc2VsZikuZGVwbG95KCkKKworICAgIGRlZiBzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYucnVubmVyLnN0YXJ0KHBhcmFtcyk6CisgICAgICAgICAgICBzZWxmLmlwID0gc2VsZi5ydW5uZXIuaXAKKyAgICAgICAgICAgIHNlbGYuc2VydmVyX2lwID0gc2VsZi5ydW5uZXIuc2VydmVyX2lwCisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBTU0hDb250cm9sKGlwPXNlbGYuaXAsIGxvZ2ZpbGU9c2VsZi5zc2hsb2cpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5xZW11bG9nKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5xZW11bG9nLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGJiLmVycm9yKCJRZW11IGxvZyBvdXRwdXQgZnJvbSAlczpcbiVzIiAlIChzZWxmLnFlbXVsb2csIGYucmVhZCgpKSkKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIC0gRkFJTEVEIHRvIHN0YXJ0IHFlbXUgLSBjaGVjayB0aGUgdGFzayBsb2cgYW5kIHRoZSBib290IGxvZyIgJSBzZWxmLnBuKQorCisgICAgZGVmIGNoZWNrKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5uZXIuaXNfYWxpdmUoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYucnVubmVyLnN0b3AoKQorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBOb25lCisgICAgICAgIHNlbGYuaXAgPSBOb25lCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gTm9uZQorCisgICAgZGVmIHJlc3RhcnQoc2VsZiwgcGFyYW1zPU5vbmUpOgorICAgICAgICBpZiBzZWxmLnJ1bm5lci5yZXN0YXJ0KHBhcmFtcyk6CisgICAgICAgICAgICBzZWxmLmlwID0gc2VsZi5ydW5uZXIuaXAKKyAgICAgICAgICAgIHNlbGYuc2VydmVyX2lwID0gc2VsZi5ydW5uZXIuc2VydmVyX2lwCisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBTU0hDb250cm9sKGlwPXNlbGYuaXAsIGxvZ2ZpbGU9c2VsZi5zc2hsb2cpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyAtIEZBSUxFRCB0byByZS1zdGFydCBxZW11IC0gY2hlY2sgdGhlIHRhc2sgbG9nIGFuZCB0aGUgYm9vdCBsb2ciICUgc2VsZi5wbikKKworICAgIGRlZiBydW5fc2VyaWFsKHNlbGYsIGNvbW1hbmQpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5uZXIucnVuX3NlcmlhbChjb21tYW5kKQorCisKK2NsYXNzIFNpbXBsZVJlbW90ZVRhcmdldChCYXNlVGFyZ2V0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc3VwZXIoU2ltcGxlUmVtb3RlVGFyZ2V0LCBzZWxmKS5fX2luaXRfXyhkKQorICAgICAgICBhZGRyID0gZC5nZXRWYXIoIlRFU1RfVEFSR0VUX0lQIiwgVHJ1ZSkgb3IgYmIuZmF0YWwoJ1BsZWFzZSBzZXQgVEVTVF9UQVJHRVRfSVAgd2l0aCB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgbWFjaGluZSB5b3Ugd2FudCB0byBydW4gdGhlIHRlc3RzIG9uLicpCisgICAgICAgIHNlbGYuaXAgPSBhZGRyLnNwbGl0KCI6IilbMF0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wb3J0ID0gYWRkci5zcGxpdCgiOiIpWzFdCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgc2VsZi5wb3J0ID0gTm9uZQorICAgICAgICBiYi5ub3RlKCJUYXJnZXQgSVA6ICVzIiAlIHNlbGYuaXApCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gZC5nZXRWYXIoIlRFU1RfU0VSVkVSX0lQIiwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHNlbGYuc2VydmVyX2lwOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX2lwID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWydpcCcsICdyb3V0ZScsICdnZXQnLCBzZWxmLmlwIF0pLnNwbGl0KCJcbiIpWzBdLnNwbGl0KClbLTFdCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkZhaWxlZCB0byBkZXRlcm1pbmUgdGhlIGhvc3QgSVAgYWRkcmVzcyAoYWx0ZXJuYXRpdmVseSB5b3UgY2FuIHNldCBURVNUX1NFUlZFUl9JUCB3aXRoIHRoZSBJUCBhZGRyZXNzIG9mIHRoaXMgbWFjaGluZSk6ICVzIiAlIGUpCisgICAgICAgIGJiLm5vdGUoIlNlcnZlciBJUDogJXMiICUgc2VsZi5zZXJ2ZXJfaXApCisKKyAgICBkZWYgZGVwbG95KHNlbGYpOgorICAgICAgICBzdXBlcihTaW1wbGVSZW1vdGVUYXJnZXQsIHNlbGYpLmRlcGxveSgpCisKKyAgICBkZWYgc3RhcnQoc2VsZiwgcGFyYW1zPU5vbmUpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBTU0hDb250cm9sKHNlbGYuaXAsIGxvZ2ZpbGU9c2VsZi5zc2hsb2csIHBvcnQ9c2VsZi5wb3J0KQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5pcCA9IE5vbmUKKyAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBOb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvX19pbml0X18ucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI2MDA0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDE1IEBACisjIEVuYWJsZSBvdGhlciBsYXllcnMgdG8gaGF2ZSBtb2R1bGVzIGluIHRoZSBzYW1lIG5hbWVkIGRpcmVjdG9yeQorZnJvbSBwa2d1dGlsIGltcG9ydCBleHRlbmRfcGF0aAorX19wYXRoX18gPSBleHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCisKKworIyBCb3Jyb3dlZCBmcm9tIENhbGxlZFByb2Nlc3NFcnJvcgorCitjbGFzcyBDb21tYW5kRXJyb3IoRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmV0Y29kZSwgY21kLCBvdXRwdXQgPSBOb25lKToKKyAgICAgICAgc2VsZi5yZXRjb2RlID0gcmV0Y29kZQorICAgICAgICBzZWxmLmNtZCA9IGNtZAorICAgICAgICBzZWxmLm91dHB1dCA9IG91dHB1dAorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkNvbW1hbmQgJyVzJyByZXR1cm5lZCBub24temVybyBleGl0IHN0YXR1cyAlZCB3aXRoIG91dHB1dDogJXMiICUgKHNlbGYuY21kLCBzZWxmLnJldGNvZGUsIHNlbGYub3V0cHV0KQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvY29tbWFuZHMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvY29tbWFuZHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlMmNiYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9jb21tYW5kcy5weQpAQCAtMCwwICsxLDIyNCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBERVNDUklQVElPTgorIyBUaGlzIG1vZHVsZSBpcyBtYWlubHkgdXNlZCBieSBzY3JpcHRzL29lLXNlbGZ0ZXN0IGFuZCBtb2R1bGVzIHVuZGVyIG1ldGEvb2VxYS9zZWxmdGVzdAorIyBJdCBwcm92aWRlcyBhIGNsYXNzIGFuZCBtZXRob2RzIGZvciBydW5uaW5nIGNvbW1hbmRzIG9uIHRoZSBob3N0IGluIGEgY29udmllbmVudCB3YXkgZm9yIHRlc3RzLgorCisKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IGxvZ2dpbmcKK2Zyb20gb2VxYS51dGlscyBpbXBvcnQgQ29tbWFuZEVycm9yCitmcm9tIG9lcWEudXRpbHMgaW1wb3J0IGZ0b29scworaW1wb3J0IHJlCitpbXBvcnQgY29udGV4dGxpYgorCitjbGFzcyBDb21tYW5kKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmQsIGJnPUZhbHNlLCB0aW1lb3V0PU5vbmUsIGRhdGE9Tm9uZSwgKipvcHRpb25zKToKKworICAgICAgICBzZWxmLmRlZmF1bHRvcHRzID0geworICAgICAgICAgICAgInN0ZG91dCI6IHN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICJzdGRlcnIiOiBzdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgICAgICAgICJzdGRpbiI6IE5vbmUsCisgICAgICAgICAgICAic2hlbGwiOiBGYWxzZSwKKyAgICAgICAgICAgICJidWZzaXplIjogLTEsCisgICAgICAgIH0KKworICAgICAgICBzZWxmLmNtZCA9IGNvbW1hbmQKKyAgICAgICAgc2VsZi5iZyA9IGJnCisgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorCisgICAgICAgIHNlbGYub3B0aW9ucyA9IGRpY3Qoc2VsZi5kZWZhdWx0b3B0cykKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLmNtZCwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBzZWxmLm9wdGlvbnNbInNoZWxsIl0gPSBUcnVlCisgICAgICAgIGlmIHNlbGYuZGF0YToKKyAgICAgICAgICAgIHNlbGYub3B0aW9uc1snc3RkaW4nXSA9IHN1YnByb2Nlc3MuUElQRQorICAgICAgICBzZWxmLm9wdGlvbnMudXBkYXRlKG9wdGlvbnMpCisKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBOb25lCisgICAgICAgIHNlbGYub3V0cHV0ID0gTm9uZQorICAgICAgICBzZWxmLmVycm9yID0gTm9uZQorICAgICAgICBzZWxmLnRocmVhZCA9IE5vbmUKKworICAgICAgICBzZWxmLmxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ1dGlscy5jb21tYW5kcyIpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBzZWxmLnByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKHNlbGYuY21kLCAqKnNlbGYub3B0aW9ucykKKworICAgICAgICBkZWYgY29tbVRocmVhZCgpOgorICAgICAgICAgICAgc2VsZi5vdXRwdXQsIHNlbGYuZXJyb3IgPSBzZWxmLnByb2Nlc3MuY29tbXVuaWNhdGUoc2VsZi5kYXRhKQorCisgICAgICAgIHNlbGYudGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9Y29tbVRocmVhZCkKKyAgICAgICAgc2VsZi50aHJlYWQuc3RhcnQoKQorCisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJSdW5uaW5nIGNvbW1hbmQgJyVzJyIgJSBzZWxmLmNtZCkKKworICAgICAgICBpZiBub3Qgc2VsZi5iZzoKKyAgICAgICAgICAgIHNlbGYudGhyZWFkLmpvaW4oc2VsZi50aW1lb3V0KQorICAgICAgICAgICAgc2VsZi5zdG9wKCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnRocmVhZC5pc0FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLnByb2Nlc3MudGVybWluYXRlKCkKKyAgICAgICAgICAgICMgbGV0J3MgZ2l2ZSBpdCBtb3JlIHRpbWUgdG8gdGVybWluYXRlIGdyYWNlZnVsbHkgYmVmb3JlIGtpbGxpbmcgaXQKKyAgICAgICAgICAgIHNlbGYudGhyZWFkLmpvaW4oNSkKKyAgICAgICAgICAgIGlmIHNlbGYudGhyZWFkLmlzQWxpdmUoKToKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3Mua2lsbCgpCisgICAgICAgICAgICAgICAgc2VsZi50aHJlYWQuam9pbigpCisKKyAgICAgICAgc2VsZi5vdXRwdXQgPSBzZWxmLm91dHB1dC5yc3RyaXAoKQorICAgICAgICBzZWxmLnN0YXR1cyA9IHNlbGYucHJvY2Vzcy5wb2xsKCkKKworICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiQ29tbWFuZCAnJXMnIHJldHVybmVkICVkIGFzIGV4aXQgY29kZS4iICUgKHNlbGYuY21kLCBzZWxmLnN0YXR1cykpCisgICAgICAgICMgbG9nZ2luZyB0aGUgY29tcGxldGUgb3V0cHV0IGlzIGluc2FuZQorICAgICAgICAjIGJpdGJha2UgLWUgb3V0cHV0IGlzIHJlYWxseSBiaWcKKyAgICAgICAgIyBhbmQgbWFrZXMgdGhlIGxvZyBmaWxlIHVzZWxlc3MKKyAgICAgICAgaWYgc2VsZi5zdGF0dXM6CisgICAgICAgICAgICBsb3V0ID0gIlxuIi5qb2luKHNlbGYub3V0cHV0LnNwbGl0bGluZXMoKVstMjA6XSkKKyAgICAgICAgICAgIHNlbGYubG9nLmRlYnVnKCJMYXN0IDIwIGxpbmVzOlxuJXMiICUgbG91dCkKKworCitjbGFzcyBSZXN1bHQob2JqZWN0KToKKyAgICBwYXNzCisKKworZGVmIHJ1bkNtZChjb21tYW5kLCBpZ25vcmVfc3RhdHVzPUZhbHNlLCB0aW1lb3V0PU5vbmUsIGFzc2VydF9lcnJvcj1UcnVlLCAqKm9wdGlvbnMpOgorICAgIHJlc3VsdCA9IFJlc3VsdCgpCisKKyAgICBjbWQgPSBDb21tYW5kKGNvbW1hbmQsIHRpbWVvdXQ9dGltZW91dCwgKipvcHRpb25zKQorICAgIGNtZC5ydW4oKQorCisgICAgcmVzdWx0LmNvbW1hbmQgPSBjb21tYW5kCisgICAgcmVzdWx0LnN0YXR1cyA9IGNtZC5zdGF0dXMKKyAgICByZXN1bHQub3V0cHV0ID0gY21kLm91dHB1dAorICAgIHJlc3VsdC5waWQgPSBjbWQucHJvY2Vzcy5waWQKKworICAgIGlmIHJlc3VsdC5zdGF0dXMgYW5kIG5vdCBpZ25vcmVfc3RhdHVzOgorICAgICAgICBpZiBhc3NlcnRfZXJyb3I6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiQ29tbWFuZCAnJXMnIHJldHVybmVkIG5vbi16ZXJvIGV4aXQgc3RhdHVzICVkOlxuJXMiICUgKGNvbW1hbmQsIHJlc3VsdC5zdGF0dXMsIHJlc3VsdC5vdXRwdXQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQ29tbWFuZEVycm9yKHJlc3VsdC5zdGF0dXMsIGNvbW1hbmQsIHJlc3VsdC5vdXRwdXQpCisKKyAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIGJpdGJha2UoY29tbWFuZCwgaWdub3JlX3N0YXR1cz1GYWxzZSwgdGltZW91dD1Ob25lLCBwb3N0Y29uZmlnPU5vbmUsICoqb3B0aW9ucyk6CisKKyAgICBpZiBwb3N0Y29uZmlnOgorICAgICAgICBwb3N0Y29uZmlnX2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJyksICdvZXFhLXBvc3QuY29uZicpCisgICAgICAgIGZ0b29scy53cml0ZV9maWxlKHBvc3Rjb25maWdfZmlsZSwgcG9zdGNvbmZpZykKKyAgICAgICAgZXh0cmFfYXJncyA9ICItUiAlcyIgJSBwb3N0Y29uZmlnX2ZpbGUKKyAgICBlbHNlOgorICAgICAgICBleHRyYV9hcmdzID0gIiIKKworICAgIGlmIGlzaW5zdGFuY2UoY29tbWFuZCwgYmFzZXN0cmluZyk6CisgICAgICAgIGNtZCA9ICJiaXRiYWtlICIgKyBleHRyYV9hcmdzICsgIiAiICsgY29tbWFuZAorICAgIGVsc2U6CisgICAgICAgIGNtZCA9IFsgImJpdGJha2UiIF0gKyBbYSBmb3IgYSBpbiAoY29tbWFuZCArIGV4dHJhX2FyZ3Muc3BsaXQoIiAiKSkgaWYgYSBub3QgaW4gWyIiXV0KKworICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHJ1bkNtZChjbWQsIGlnbm9yZV9zdGF0dXMsIHRpbWVvdXQsICoqb3B0aW9ucykKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBwb3N0Y29uZmlnOgorICAgICAgICAgICAgb3MucmVtb3ZlKHBvc3Rjb25maWdfZmlsZSkKKworCitkZWYgZ2V0X2JiX2Vudih0YXJnZXQ9Tm9uZSwgcG9zdGNvbmZpZz1Ob25lKToKKyAgICBpZiB0YXJnZXQ6CisgICAgICAgIHJldHVybiBiaXRiYWtlKCItZSAlcyIgJSB0YXJnZXQsIHBvc3Rjb25maWc9cG9zdGNvbmZpZykub3V0cHV0CisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGJpdGJha2UoIi1lIiwgcG9zdGNvbmZpZz1wb3N0Y29uZmlnKS5vdXRwdXQKKworZGVmIGdldF9iYl92YXIodmFyLCB0YXJnZXQ9Tm9uZSwgcG9zdGNvbmZpZz1Ob25lKToKKyAgICB2YWwgPSBOb25lCisgICAgYmJlbnYgPSBnZXRfYmJfZW52KHRhcmdldCwgcG9zdGNvbmZpZz1wb3N0Y29uZmlnKQorICAgIGxhc3RsaW5lID0gTm9uZQorICAgIGZvciBsaW5lIGluIGJiZW52LnNwbGl0bGluZXMoKToKKyAgICAgICAgaWYgcmUuc2VhcmNoKCJeKGV4cG9ydCApPyVzPSIgJSB2YXIsIGxpbmUpOgorICAgICAgICAgICAgdmFsID0gbGluZS5zcGxpdCgnPScsIDEpWzFdCisgICAgICAgICAgICB2YWwgPSB2YWwuc3RyaXAoJ1wiJykKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsaWYgcmUubWF0Y2goInVuc2V0ICVzJCIgJSB2YXIsIGxpbmUpOgorICAgICAgICAgICAgIyBIYW5kbGUgW3VuZXhwb3J0XSB2YXJpYWJsZXMKKyAgICAgICAgICAgIGlmIGxhc3RsaW5lLnN0YXJ0c3dpdGgoJyMgICAiJyk6CisgICAgICAgICAgICAgICAgdmFsID0gbGFzdGxpbmUuc3BsaXQoJ1wiJylbMV0KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBsYXN0bGluZSA9IGxpbmUKKyAgICByZXR1cm4gdmFsCisKK2RlZiBnZXRfdGVzdF9sYXllcigpOgorICAgIGxheWVycyA9IGdldF9iYl92YXIoIkJCTEFZRVJTIikuc3BsaXQoKQorICAgIHRlc3RsYXllciA9IE5vbmUKKyAgICBmb3IgbCBpbiBsYXllcnM6CisgICAgICAgIGlmICd+JyBpbiBsOgorICAgICAgICAgICAgbCA9IG9zLnBhdGguZXhwYW5kdXNlcihsKQorICAgICAgICBpZiAiL21ldGEtc2VsZnRlc3QiIGluIGwgYW5kIG9zLnBhdGguaXNkaXIobCk6CisgICAgICAgICAgICB0ZXN0bGF5ZXIgPSBsCisgICAgICAgICAgICBicmVhaworICAgIHJldHVybiB0ZXN0bGF5ZXIKKworZGVmIGNyZWF0ZV90ZW1wX2xheWVyKHRlbXBsYXllcmRpciwgdGVtcGxheWVybmFtZSwgcHJpb3JpdHk9OTk5LCByZWNpcGVwYXRoc3BlYz0ncmVjaXBlcy0qLyonKToKKyAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmpvaW4odGVtcGxheWVyZGlyLCAnY29uZicpKQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4odGVtcGxheWVyZGlyLCAnY29uZicsICdsYXllci5jb25mJyksICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZSgnQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iXG4nKQorICAgICAgICBmLndyaXRlKCdCQkZJTEVTICs9ICIke0xBWUVSRElSfS8lcy8qLmJiIFxcJyAlIHJlY2lwZXBhdGhzcGVjKQorICAgICAgICBmLndyaXRlKCcgICAgICAgICAgICAke0xBWUVSRElSfS8lcy8qLmJiYXBwZW5kIlxuJyAlIHJlY2lwZXBhdGhzcGVjKQorICAgICAgICBmLndyaXRlKCdCQkZJTEVfQ09MTEVDVElPTlMgKz0gIiVzIlxuJyAlIHRlbXBsYXllcm5hbWUpCisgICAgICAgIGYud3JpdGUoJ0JCRklMRV9QQVRURVJOXyVzID0gIl4ke0xBWUVSRElSfS8iXG4nICUgdGVtcGxheWVybmFtZSkKKyAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BSSU9SSVRZXyVzID0gIiVkIlxuJyAlICh0ZW1wbGF5ZXJuYW1lLCBwcmlvcml0eSkpCisgICAgICAgIGYud3JpdGUoJ0JCRklMRV9QQVRURVJOX0lHTk9SRV9FTVBUWV8lcyA9ICIxIlxuJyAlIHRlbXBsYXllcm5hbWUpCisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBydW5xZW11KHBuLCB0ZXN0KToKKworICAgIGltcG9ydCBiYi50aW5mb2lsCisgICAgaW1wb3J0IGJiLmJ1aWxkCisKKyAgICB0aW5mb2lsID0gYmIudGluZm9pbC5UaW5mb2lsKCkKKyAgICB0aW5mb2lsLnByZXBhcmUoRmFsc2UpCisgICAgdHJ5OgorICAgICAgICB0aW5mb2lsLmxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLldBUk5JTkcpCisgICAgICAgIGltcG9ydCBvZXFhLnRhcmdldGNvbnRyb2wKKyAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5zZXRWYXIoIlRFU1RfTE9HX0RJUiIsICIke1dPUktESVJ9L3Rlc3RpbWFnZSIpCisgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuc2V0VmFyKCJURVNUX1FFTVVCT09UX1RJTUVPVVQiLCAiMTAwMCIpCisgICAgICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworICAgICAgICByZWNpcGVmaWxlID0gb2UucmVjaXBldXRpbHMucG5fdG9fcmVjaXBlKHRpbmZvaWwuY29va2VyLCBwbikKKyAgICAgICAgcmVjaXBlZGF0YSA9IG9lLnJlY2lwZXV0aWxzLnBhcnNlX3JlY2lwZShyZWNpcGVmaWxlLCBbXSwgdGluZm9pbC5jb25maWdfZGF0YSkKKworICAgICAgICAjIFRoZSBRZW11UnVubmVyIGxvZyBpcyBzYXZlZCBvdXQsIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSBpdCBpcyBhdCB0aGUgcmlnaHQKKyAgICAgICAgIyBsb2cgbGV2ZWwgKGFuZCB0aGVuIGVuc3VyZSB0aGF0IHNpbmNlIGl0J3MgYSBjaGlsZCBvZiB0aGUgQml0QmFrZSBsb2dnZXIsCisgICAgICAgICMgd2UgZGlzYWJsZSBwcm9wYWdhdGlvbiBzbyB3ZSBkb24ndCB0aGVuIHNlZSB0aGUgbG9nIGV2ZW50cyBvbiB0aGUgY29uc29sZSkKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuUWVtdVJ1bm5lcicpCisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gRmFsc2UKKyAgICAgICAgbG9nZGlyID0gcmVjaXBlZGF0YS5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpCisKKyAgICAgICAgcWVtdSA9IG9lcWEudGFyZ2V0Y29udHJvbC5RZW11VGFyZ2V0KHJlY2lwZWRhdGEpCisgICAgZmluYWxseToKKyAgICAgICAgIyBXZSBuZWVkIHRvIHNodXQgZG93biB0aW5mb2lsIGVhcmx5IGhlcmUgaW4gY2FzZSB3ZSBhY3R1YWxseSB3YW50CisgICAgICAgICMgdG8gcnVuIHRpbmZvaWwtdXNpbmcgdXRpbGl0aWVzIHdpdGggdGhlIHJ1bm5pbmcgUUVNVSBpbnN0YW5jZS4KKyAgICAgICAgIyBMdWNraWx5IFFlbXVUYXJnZXQgZG9lc24ndCBuZWVkIGl0IGFmdGVyIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCisKKyAgICB0cnk6CisgICAgICAgIHFlbXUuZGVwbG95KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcWVtdS5zdGFydCgpCisgICAgICAgIGV4Y2VwdCBiYi5idWlsZC5GdW5jRmFpbGVkOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdGYWlsZWQgdG8gc3RhcnQgUUVNVSAtIHNlZSB0aGUgbG9ncyBpbiAlcycgJSBsb2dkaXIpCisKKyAgICAgICAgeWllbGQgcWVtdQorCisgICAgZmluYWxseToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcWVtdS5zdG9wKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2RlY29yYXRvcnMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvZGVjb3JhdG9ycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjJhODhmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2RlY29yYXRvcnMucHkKQEAgLTAsMCArMSwyMjIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIFNvbWUgY3VzdG9tIGRlY29yYXRvcnMgdGhhdCBjYW4gYmUgdXNlZCBieSB1bml0dGVzdHMKKyMgTW9zdCB1c2VmdWwgaXMgc2tpcFVubGVzc1Bhc3NlZCB3aGljaCBjYW4gYmUgdXNlZCBmb3IKKyMgY3JlYXRpbmcgZGVwZW5kZWNpZXMgYmV0d2VlbiB0d28gdGVzdCBtZXRob2RzLgorCitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCBzaWduYWwKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcworCisjZ2V0IHRoZSAicmVzdWx0IiBvYmplY3QgZnJvbSBvbmUgb2YgdGhlIHVwcGVyIGZyYW1lcyBwcm92aWRlZCB0aGF0IG9uZSBvZiB0aGVzZSB1cHBlciBmcmFtZXMgaXMgYSB1bml0dGVzdC5jYXNlIGZyYW1lCitjbGFzcyBnZXRSZXN1bHRzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAjZHluYW1pY2FsbHkgZGV0ZXJtaW5lIHRoZSB1bml0dGVzdC5jYXNlIGZyYW1lIGFuZCB1c2UgaXQgdG8gZ2V0IHRoZSBuYW1lIG9mIHRoZSB0ZXN0IG1ldGhvZAorICAgICAgICBpZGVudCA9IHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLmlkZW50CisgICAgICAgIHVwcGVyZiA9IHN5cy5fY3VycmVudF9mcmFtZXMoKVtpZGVudF0KKyAgICAgICAgd2hpbGUgKHVwcGVyZi5mX2dsb2JhbHNbJ19fbmFtZV9fJ10gIT0gJ3VuaXR0ZXN0LmNhc2UnKToKKyAgICAgICAgICAgIHVwcGVyZiA9IHVwcGVyZi5mX2JhY2sKKworICAgICAgICBkZWYgaGFuZGxlTGlzdChpdGVtcyk6CisgICAgICAgICAgICByZXQgPSBbXQorICAgICAgICAgICAgIyBpdGVtcyBpcyBhIGxpc3Qgb2YgdHVwbGVzLCAodGVzdCwgZmFpbHVyZSkgb3IgKF9FcnJvckhhbmRsZXIoKSwgRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBmb3IgaSBpbiBpdGVtczoKKyAgICAgICAgICAgICAgICBzID0gaVswXS5pZCgpCisgICAgICAgICAgICAgICAgI0hhbmRsZSB0aGUgX0Vycm9ySG9sZGVyIG9iamVjdHMgZnJvbSBza2lwTW9kdWxlIGZhaWx1cmVzCisgICAgICAgICAgICAgICAgaWYgInNldFVwTW9kdWxlICgiIGluIHM6CisgICAgICAgICAgICAgICAgICAgIHJldC5hcHBlbmQocy5yZXBsYWNlKCJzZXRVcE1vZHVsZSAoIiwgIiIpLnJlcGxhY2UoIikiLCIiKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXQuYXBwZW5kKHMpCisgICAgICAgICAgICByZXR1cm4gcmV0CisgICAgICAgIHNlbGYuZmFpbGxpc3QgPSBoYW5kbGVMaXN0KHVwcGVyZi5mX2xvY2Fsc1sncmVzdWx0J10uZmFpbHVyZXMpCisgICAgICAgIHNlbGYuZXJyb3JsaXN0ID0gaGFuZGxlTGlzdCh1cHBlcmYuZl9sb2NhbHNbJ3Jlc3VsdCddLmVycm9ycykKKyAgICAgICAgc2VsZi5za2lwbGlzdCA9IGhhbmRsZUxpc3QodXBwZXJmLmZfbG9jYWxzWydyZXN1bHQnXS5za2lwcGVkKQorCisgICAgZGVmIGdldEZhaWxMaXN0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5mYWlsbGlzdAorCisgICAgZGVmIGdldEVycm9yTGlzdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZXJyb3JsaXN0CisKKyAgICBkZWYgZ2V0U2tpcExpc3Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNraXBsaXN0CisKK2NsYXNzIHNraXBJZkZhaWx1cmUob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLHRlc3RjYXNlKToKKyAgICAgICAgc2VsZi50ZXN0Y2FzZSA9IHRlc3RjYXNlCisKKyAgICBkZWYgX19jYWxsX18oc2VsZixmKToKKyAgICAgICAgZGVmIHdyYXBwZWRfZigqYXJncyk6CisgICAgICAgICAgICByZXMgPSBnZXRSZXN1bHRzKCkKKyAgICAgICAgICAgIGlmIHNlbGYudGVzdGNhc2UgaW4gKHJlcy5nZXRGYWlsTGlzdCgpIG9yIHJlcy5nZXRFcnJvckxpc3QoKSk6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlRlc3RjYXNlIGRlcGVuZGVuY3kgbm90IG1ldDogJXMiICUgc2VsZi50ZXN0Y2FzZSkKKyAgICAgICAgICAgIHJldHVybiBmKCphcmdzKQorICAgICAgICB3cmFwcGVkX2YuX19uYW1lX18gPSBmLl9fbmFtZV9fCisgICAgICAgIHJldHVybiB3cmFwcGVkX2YKKworY2xhc3Mgc2tpcElmU2tpcHBlZChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsdGVzdGNhc2UpOgorICAgICAgICBzZWxmLnRlc3RjYXNlID0gdGVzdGNhc2UKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLGYpOgorICAgICAgICBkZWYgd3JhcHBlZF9mKCphcmdzKToKKyAgICAgICAgICAgIHJlcyA9IGdldFJlc3VsdHMoKQorICAgICAgICAgICAgaWYgc2VsZi50ZXN0Y2FzZSBpbiByZXMuZ2V0U2tpcExpc3QoKToKKyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiVGVzdGNhc2UgZGVwZW5kZW5jeSBub3QgbWV0OiAlcyIgJSBzZWxmLnRlc3RjYXNlKQorICAgICAgICAgICAgcmV0dXJuIGYoKmFyZ3MpCisgICAgICAgIHdyYXBwZWRfZi5fX25hbWVfXyA9IGYuX19uYW1lX18KKyAgICAgICAgcmV0dXJuIHdyYXBwZWRfZgorCitjbGFzcyBza2lwVW5sZXNzUGFzc2VkKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZix0ZXN0Y2FzZSk6CisgICAgICAgIHNlbGYudGVzdGNhc2UgPSB0ZXN0Y2FzZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsZik6CisgICAgICAgIGRlZiB3cmFwcGVkX2YoKmFyZ3MpOgorICAgICAgICAgICAgcmVzID0gZ2V0UmVzdWx0cygpCisgICAgICAgICAgICBpZiBzZWxmLnRlc3RjYXNlIGluIHJlcy5nZXRTa2lwTGlzdCgpIG9yIFwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0Y2FzZSBpbiByZXMuZ2V0RmFpbExpc3QoKSBvciBcCisgICAgICAgICAgICAgICAgICAgIHNlbGYudGVzdGNhc2UgaW4gcmVzLmdldEVycm9yTGlzdCgpOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJUZXN0Y2FzZSBkZXBlbmRlbmN5IG5vdCBtZXQ6ICVzIiAlIHNlbGYudGVzdGNhc2UpCisgICAgICAgICAgICByZXR1cm4gZigqYXJncykKKyAgICAgICAgd3JhcHBlZF9mLl9fbmFtZV9fID0gZi5fX25hbWVfXworICAgICAgICB3cmFwcGVkX2YuX2RlcGVuZHNfb24gPSBzZWxmLnRlc3RjYXNlCisgICAgICAgIHJldHVybiB3cmFwcGVkX2YKKworY2xhc3MgdGVzdGNhc2Uob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X2Nhc2UpOgorICAgICAgICBzZWxmLnRlc3RfY2FzZSA9IHRlc3RfY2FzZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGZ1bmMpOgorICAgICAgICBkZWYgd3JhcHBlZF9mKCphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzKQorICAgICAgICB3cmFwcGVkX2YudGVzdF9jYXNlID0gc2VsZi50ZXN0X2Nhc2UKKyAgICAgICAgd3JhcHBlZF9mLl9fbmFtZV9fID0gZnVuYy5fX25hbWVfXworICAgICAgICByZXR1cm4gd3JhcHBlZF9mCisKK2NsYXNzIE5vUGFyc2luZ0ZpbHRlcihsb2dnaW5nLkZpbHRlcik6CisgICAgZGVmIGZpbHRlcihzZWxmLCByZWNvcmQpOgorICAgICAgICByZXR1cm4gcmVjb3JkLmxldmVsbm8gPT0gMTAwCisKK2RlZiBMb2dSZXN1bHRzKG9yaWdpbmFsX2NsYXNzKToKKyAgICBvcmlnX21ldGhvZCA9IG9yaWdpbmFsX2NsYXNzLnJ1bgorCisgICAgI3Jld3JpdGUgdGhlIHJ1biBtZXRob2Qgb2YgdW5pdHRlc3QuVGVzdENhc2UgdG8gYWRkIHRlc3RjYXNlIGxvZ2dpbmcKKyAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdCwgKmFyZ3MsICoqa3dzKToKKyAgICAgICAgb3JpZ19tZXRob2Qoc2VsZiwgcmVzdWx0LCAqYXJncywgKiprd3MpCisgICAgICAgIHBhc3NlZCA9IFRydWUKKyAgICAgICAgdGVzdE1ldGhvZCA9IGdldGF0dHIoc2VsZiwgc2VsZi5fdGVzdE1ldGhvZE5hbWUpCisgICAgICAgICNpZiB0ZXN0IGNhc2UgaXMgZGVjb3JhdGVkIHRoZW4gdXNlIGl0J3MgbnVtYmVyLCBlbHNlIHVzZSBpdCdzIG5hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9jYXNlID0gdGVzdE1ldGhvZC50ZXN0X2Nhc2UKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgdGVzdF9jYXNlID0gc2VsZi5fdGVzdE1ldGhvZE5hbWUKKworICAgICAgICBjbGFzc19uYW1lID0gc3RyKHRlc3RNZXRob2QuaW1fY2xhc3MpLnNwbGl0KCInIilbMV0KKworICAgICAgICAjY3JlYXRlIGN1c3RvbSBsb2dnaW5nIGxldmVsIGZvciBmaWx0ZXJpbmcuCisgICAgICAgIGN1c3RvbV9sb2dfbGV2ZWwgPSAxMDAKKyAgICAgICAgbG9nZ2luZy5hZGRMZXZlbE5hbWUoY3VzdG9tX2xvZ19sZXZlbCwgJ1JFU1VMVFMnKQorICAgICAgICBjYWxsZXIgPSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQorCisgICAgICAgIGRlZiByZXN1bHRzKHNlbGYsIG1lc3NhZ2UsICphcmdzLCAqKmt3cyk6CisgICAgICAgICAgICBpZiBzZWxmLmlzRW5hYmxlZEZvcihjdXN0b21fbG9nX2xldmVsKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZyhjdXN0b21fbG9nX2xldmVsLCBtZXNzYWdlLCAqYXJncywgKiprd3MpCisgICAgICAgIGxvZ2dpbmcuTG9nZ2VyLnJlc3VsdHMgPSByZXN1bHRzCisKKyAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZT1vcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksJ3Jlc3VsdHMtJytjYWxsZXIrJy5sb2cnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbW9kZT0ndycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSclKGFzY3RpbWUpcyAtICUobmFtZSlzIC0gJShsZXZlbG5hbWUpcyAtICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlZm10PSclSDolTTolUycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9Y3VzdG9tX2xvZ19sZXZlbCkKKyAgICAgICAgZm9yIGhhbmRsZXIgaW4gbG9nZ2luZy5yb290LmhhbmRsZXJzOgorICAgICAgICAgICAgaGFuZGxlci5hZGRGaWx0ZXIoTm9QYXJzaW5nRmlsdGVyKCkpCisgICAgICAgIGxvY2FsX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKGNhbGxlcikKKworICAgICAgICAjY2hlY2sgc3RhdHVzIG9mIHRlc3RzIGFuZCByZWNvcmQgaXQKKworICAgICAgICBmb3IgKG5hbWUsIG1zZykgaW4gcmVzdWx0LmVycm9yczoKKyAgICAgICAgICAgIGlmIChzZWxmLl90ZXN0TWV0aG9kTmFtZSA9PSBzdHIobmFtZSkuc3BsaXQoJyAnKVswXSkgYW5kIChjbGFzc19uYW1lIGluIHN0cihuYW1lKS5zcGxpdCgnICcpWzFdKToKKyAgICAgICAgICAgICAgICBsb2NhbF9sb2cucmVzdWx0cygiVGVzdGNhc2UgIitzdHIodGVzdF9jYXNlKSsiOiBFUlJPUiIpCisgICAgICAgICAgICAgICAgbG9jYWxfbG9nLnJlc3VsdHMoIlRlc3RjYXNlICIrc3RyKHRlc3RfY2FzZSkrIjpcbiIrbXNnKQorICAgICAgICAgICAgICAgIHBhc3NlZCA9IEZhbHNlCisgICAgICAgIGZvciAobmFtZSwgbXNnKSBpbiByZXN1bHQuZmFpbHVyZXM6CisgICAgICAgICAgICBpZiAoc2VsZi5fdGVzdE1ldGhvZE5hbWUgPT0gc3RyKG5hbWUpLnNwbGl0KCcgJylbMF0pIGFuZCAoY2xhc3NfbmFtZSBpbiBzdHIobmFtZSkuc3BsaXQoJyAnKVsxXSk6CisgICAgICAgICAgICAgICAgbG9jYWxfbG9nLnJlc3VsdHMoIlRlc3RjYXNlICIrc3RyKHRlc3RfY2FzZSkrIjogRkFJTEVEIikKKyAgICAgICAgICAgICAgICBsb2NhbF9sb2cucmVzdWx0cygiVGVzdGNhc2UgIitzdHIodGVzdF9jYXNlKSsiOlxuIittc2cpCisgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UKKyAgICAgICAgZm9yIChuYW1lLCBtc2cpIGluIHJlc3VsdC5za2lwcGVkOgorICAgICAgICAgICAgaWYgKHNlbGYuX3Rlc3RNZXRob2ROYW1lID09IHN0cihuYW1lKS5zcGxpdCgnICcpWzBdKSBhbmQgKGNsYXNzX25hbWUgaW4gc3RyKG5hbWUpLnNwbGl0KCcgJylbMV0pOgorICAgICAgICAgICAgICAgIGxvY2FsX2xvZy5yZXN1bHRzKCJUZXN0Y2FzZSAiK3N0cih0ZXN0X2Nhc2UpKyI6IFNLSVBQRUQiKQorICAgICAgICAgICAgICAgIHBhc3NlZCA9IEZhbHNlCisgICAgICAgIGlmIHBhc3NlZDoKKyAgICAgICAgICAgIGxvY2FsX2xvZy5yZXN1bHRzKCJUZXN0Y2FzZSAiK3N0cih0ZXN0X2Nhc2UpKyI6IFBBU1NFRCIpCisKKyAgICBvcmlnaW5hbF9jbGFzcy5ydW4gPSBydW4KKyAgICByZXR1cm4gb3JpZ2luYWxfY2xhc3MKKworY2xhc3MgVGltZU91dChCYXNlRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2RlZiB0aW1lb3V0KHNlY29uZHMpOgorICAgIGRlZiBkZWNvcmF0b3IoZm4pOgorICAgICAgICBpZiBoYXNhdHRyKHNpZ25hbCwgJ2FsYXJtJyk6CisgICAgICAgICAgICBAd3JhcHMoZm4pCisgICAgICAgICAgICBkZWYgd3JhcHBlZF9mKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgICAgICBjdXJyZW50X2ZyYW1lID0gc3lzLl9nZXRmcmFtZSgpCisgICAgICAgICAgICAgICAgZGVmIHJhaXNlVGltZU91dChzaWduYWwsIGZyYW1lKToKKyAgICAgICAgICAgICAgICAgICAgaWYgZnJhbWUgaXMgbm90IGN1cnJlbnRfZnJhbWU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUaW1lT3V0KCclcyBzZWNvbmRzJyAlIHNlY29uZHMpCisgICAgICAgICAgICAgICAgcHJldl9oYW5kbGVyID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgcmFpc2VUaW1lT3V0KQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKHNlY29uZHMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbigqYXJncywgKiprdykKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMCkKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgcHJldl9oYW5kbGVyKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRfZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGZuCisgICAgcmV0dXJuIGRlY29yYXRvcgorCitfX3RhZ19wcmVmaXggPSAidGFnX18iCitkZWYgdGFnKCphcmdzLCAqKmt3YXJncyk6CisgICAgIiIiRGVjb3JhdG9yIHRoYXQgYWRkcyBhdHRyaWJ1dGVzIHRvIGNsYXNzZXMgb3IgZnVuY3Rpb25zCisgICAgZm9yIHVzZSB3aXRoIHRoZSBBdHRyaWJ1dGUgKC1hKSBwbHVnaW4uCisgICAgIiIiCisgICAgZGVmIHdyYXBfb2Iob2IpOgorICAgICAgICBmb3IgbmFtZSBpbiBhcmdzOgorICAgICAgICAgICAgc2V0YXR0cihvYiwgX190YWdfcHJlZml4ICsgbmFtZSwgVHJ1ZSkKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGt3YXJncy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHNldGF0dHIob2IsIF9fdGFnX3ByZWZpeCArIG5hbWUsIHZhbHVlKQorICAgICAgICByZXR1cm4gb2IKKyAgICByZXR1cm4gd3JhcF9vYgorCitkZWYgZ2V0dGFnKG9iaiwga2V5LCBkZWZhdWx0PU5vbmUpOgorICAgIGtleSA9IF9fdGFnX3ByZWZpeCArIGtleQorICAgIGlmIG5vdCBpc2luc3RhbmNlKG9iaiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICByZXR1cm4gZ2V0YXR0cihvYmosIGtleSwgZGVmYXVsdCkKKyAgICB0Y19tZXRob2QgPSBnZXRhdHRyKG9iaiwgb2JqLl90ZXN0TWV0aG9kTmFtZSkKKyAgICByZXQgPSBnZXRhdHRyKHRjX21ldGhvZCwga2V5LCBnZXRhdHRyKG9iaiwga2V5LCBkZWZhdWx0KSkKKyAgICByZXR1cm4gcmV0CisKK2RlZiBnZXRBbGxUYWdzKG9iaik6CisgICAgZGVmIF9fZ2V0dGFncyhvKToKKyAgICAgICAgciA9IHtrW2xlbihfX3RhZ19wcmVmaXgpOl06Z2V0YXR0cihvLGspIGZvciBrIGluIGRpcihvKSBpZiBrLnN0YXJ0c3dpdGgoX190YWdfcHJlZml4KX0KKyAgICAgICAgcmV0dXJuIHIKKyAgICBpZiBub3QgaXNpbnN0YW5jZShvYmosIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgcmV0dXJuIF9fZ2V0dGFncyhvYmopCisgICAgdGNfbWV0aG9kID0gZ2V0YXR0cihvYmosIG9iai5fdGVzdE1ldGhvZE5hbWUpCisgICAgcmV0ID0gX19nZXR0YWdzKG9iaikKKyAgICByZXQudXBkYXRlKF9fZ2V0dGFncyh0Y19tZXRob2QpKQorICAgIHJldHVybiByZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9kdW1wLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2R1bXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlODcxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9kdW1wLnB5CkBAIC0wLDAgKzEsODcgQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGVycm5vCitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCBpdGVydG9vbHMKK2Zyb20gY29tbWFuZHMgaW1wb3J0IHJ1bkNtZAorCitkZWYgZ2V0X2hvc3RfZHVtcGVyKGQpOgorICAgIGNtZHMgPSBkLmdldFZhcigidGVzdGltYWdlX2R1bXBfaG9zdCIsIFRydWUpCisgICAgcGFyZW50X2RpciA9IGQuZ2V0VmFyKCJURVNUSU1BR0VfRFVNUF9ESVIiLCBUcnVlKQorICAgIHJldHVybiBIb3N0RHVtcGVyKGNtZHMsIHBhcmVudF9kaXIpCisKKworY2xhc3MgQmFzZUR1bXBlcihvYmplY3QpOgorICAgICIiIiBCYXNlIGNsYXNzIHRvIGR1bXAgY29tbWFuZHMgZnJvbSBob3N0L3RhcmdldCAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbWRzLCBwYXJlbnRfZGlyKToKKyAgICAgICAgc2VsZi5jbWRzID0gW10KKyAgICAgICAgc2VsZi5wYXJlbnRfZGlyID0gcGFyZW50X2RpcgorICAgICAgICBpZiBub3QgY21kczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBmb3IgY21kIGluIGNtZHMuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICBjbWQgPSBjbWQubHN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBjbWQgb3IgY21kWzBdID09ICcjJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5jbWRzLmFwcGVuZChjbWQpCisKKyAgICBkZWYgY3JlYXRlX2RpcihzZWxmLCBkaXJfc3VmZml4KToKKyAgICAgICAgZHVtcF9zdWJkaXIgPSAoIiVzXyVzIiAlICgKKyAgICAgICAgICAgICAgICBkYXRldGltZS5kYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVklbSVkJUglTScpLAorICAgICAgICAgICAgICAgIGRpcl9zdWZmaXgpKQorICAgICAgICBkdW1wX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnBhcmVudF9kaXIsIGR1bXBfc3ViZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhkdW1wX2RpcikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgaWYgZXJyLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAgICAgICByYWlzZSBlcnIKKyAgICAgICAgc2VsZi5kdW1wX2RpciA9IGR1bXBfZGlyCisKKyAgICBkZWYgX3dyaXRlX2R1bXAoc2VsZiwgY29tbWFuZCwgb3V0cHV0KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLCBIb3N0RHVtcGVyKToKKyAgICAgICAgICAgIHByZWZpeCA9ICJob3N0IgorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZiwgVGFyZ2V0RHVtcGVyKToKKyAgICAgICAgICAgIHByZWZpeCA9ICJ0YXJnZXQiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmVmaXggPSAidW5rbm93biIKKyAgICAgICAgZm9yIGkgaW4gaXRlcnRvb2xzLmNvdW50KCk6CisgICAgICAgICAgICBmaWxlbmFtZSA9ICIlc18lMDJkXyVzIiAlIChwcmVmaXgsIGksIGNvbW1hbmQpCisgICAgICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLmR1bXBfZGlyLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmdWxsbmFtZSk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgd2l0aCBvcGVuKGZ1bGxuYW1lLCAndycpIGFzIGR1bXBfZmlsZToKKyAgICAgICAgICAgIGR1bXBfZmlsZS53cml0ZShvdXRwdXQpCisKKworY2xhc3MgSG9zdER1bXBlcihCYXNlRHVtcGVyKToKKyAgICAiIiIgQ2xhc3MgdG8gZ2V0IGR1bXBzIGZyb20gdGhlIGhvc3QgcnVubmluZyB0aGUgdGVzdHMgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY21kcywgcGFyZW50X2Rpcik6CisgICAgICAgIHN1cGVyKEhvc3REdW1wZXIsIHNlbGYpLl9faW5pdF9fKGNtZHMsIHBhcmVudF9kaXIpCisKKyAgICBkZWYgZHVtcF9ob3N0KHNlbGYsIGR1bXBfZGlyPSIiKToKKyAgICAgICAgaWYgZHVtcF9kaXI6CisgICAgICAgICAgICBzZWxmLmR1bXBfZGlyID0gZHVtcF9kaXIKKyAgICAgICAgZm9yIGNtZCBpbiBzZWxmLmNtZHM6CisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoY21kLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgICAgICBzZWxmLl93cml0ZV9kdW1wKGNtZC5zcGxpdCgpWzBdLCByZXN1bHQub3V0cHV0KQorCisKK2NsYXNzIFRhcmdldER1bXBlcihCYXNlRHVtcGVyKToKKyAgICAiIiIgQ2xhc3MgdG8gZ2V0IGR1bXBzIGZyb20gdGFyZ2V0LCBpdCBvbmx5IHdvcmtzIHdpdGggUWVtdVJ1bm5lciAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbWRzLCBwYXJlbnRfZGlyLCBxZW11cnVubmVyKToKKyAgICAgICAgc3VwZXIoVGFyZ2V0RHVtcGVyLCBzZWxmKS5fX2luaXRfXyhjbWRzLCBwYXJlbnRfZGlyKQorICAgICAgICBzZWxmLnJ1bm5lciA9IHFlbXVydW5uZXIKKworICAgIGRlZiBkdW1wX3RhcmdldChzZWxmLCBkdW1wX2Rpcj0iIik6CisgICAgICAgIGlmIGR1bXBfZGlyOgorICAgICAgICAgICAgc2VsZi5kdW1wX2RpciA9IGR1bXBfZGlyCisgICAgICAgIGZvciBjbWQgaW4gc2VsZi5jbWRzOgorICAgICAgICAgICAgIyBXZSBjYW4gY29udGludWUgd2l0aCB0aGUgdGVzdGluZyBpZiBzZXJpYWwgY29tbWFuZHMgZmFpbAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnJ1bm5lci5ydW5fc2VyaWFsKGNtZCkKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9kdW1wKGNtZC5zcGxpdCgpWzBdLCBvdXRwdXQpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcHJpbnQoIlRyaWVkIHRvIGR1bXAgaW5mbyBmcm9tIHRhcmdldCBidXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgInNlcmlhbCBjb25zb2xlIGZhaWxlZCIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvZnRvb2xzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2Z0b29scy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGViZTNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2Z0b29scy5weQpAQCAtMCwwICsxLDI3IEBACitpbXBvcnQgb3MKK2ltcG9ydCByZQorCitkZWYgd3JpdGVfZmlsZShwYXRoLCBkYXRhKToKKyAgICB3ZGF0YSA9IGRhdGEucnN0cmlwKCkgKyAiXG4iCisgICAgd2l0aCBvcGVuKHBhdGgsICJ3IikgYXMgZjoKKyAgICAgICAgZi53cml0ZSh3ZGF0YSkKKworZGVmIGFwcGVuZF9maWxlKHBhdGgsIGRhdGEpOgorICAgIHdkYXRhID0gZGF0YS5yc3RyaXAoKSArICJcbiIKKyAgICB3aXRoIG9wZW4ocGF0aCwgImEiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSh3ZGF0YSkKKworZGVmIHJlYWRfZmlsZShwYXRoKToKKyAgICBkYXRhID0gTm9uZQorICAgIHdpdGggb3BlbihwYXRoKSBhcyBmOgorICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICByZXR1cm4gZGF0YQorCitkZWYgcmVtb3ZlX2Zyb21fZmlsZShwYXRoLCBkYXRhKToKKyAgICBsaW5lcyA9IHJlYWRfZmlsZShwYXRoKS5zcGxpdGxpbmVzKCkKKyAgICBybWRhdGEgPSBkYXRhLnN0cmlwKCkuc3BsaXRsaW5lcygpCisgICAgZm9yIGwgaW4gcm1kYXRhOgorICAgICAgICBmb3IgYyBpbiByYW5nZSgwLCBsaW5lcy5jb3VudChsKSk6CisgICAgICAgICAgICBpID0gbGluZXMuaW5kZXgobCkKKyAgICAgICAgICAgIGRlbChsaW5lc1tpXSkKKyAgICB3cml0ZV9maWxlKHBhdGgsICJcbiIuam9pbihsaW5lcykpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvaHR0cHNlcnZlci5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9odHRwc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NTE4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvaHR0cHNlcnZlci5weQpAQCAtMCwwICsxLDM1IEBACitpbXBvcnQgU2ltcGxlSFRUUFNlcnZlcgoraW1wb3J0IG11bHRpcHJvY2Vzc2luZworaW1wb3J0IG9zCisKK2NsYXNzIEhUVFBTZXJ2ZXIoU2ltcGxlSFRUUFNlcnZlci5CYXNlSFRUUFNlcnZlci5IVFRQU2VydmVyKToKKworICAgIGRlZiBzZXJ2ZXJfc3RhcnQoc2VsZiwgcm9vdF9kaXIpOgorICAgICAgICBpbXBvcnQgc2lnbmFsCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHNpZ25hbC5TSUdfREZMKQorICAgICAgICBvcy5jaGRpcihyb290X2RpcikKKyAgICAgICAgc2VsZi5zZXJ2ZV9mb3JldmVyKCkKKworY2xhc3MgSFRUUFJlcXVlc3RIYW5kbGVyKFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyKToKKworICAgIGRlZiBsb2dfbWVzc2FnZShzZWxmLCBmb3JtYXRfc3RyLCAqYXJncyk6CisgICAgICAgIHBhc3MKKworY2xhc3MgSFRUUFNlcnZpY2Uob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByb290X2RpciwgaG9zdD0nJyk6CisgICAgICAgIHNlbGYucm9vdF9kaXIgPSByb290X2RpcgorICAgICAgICBzZWxmLmhvc3QgPSBob3N0CisgICAgICAgIHNlbGYucG9ydCA9IDAKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBIVFRQU2VydmVyKChzZWxmLmhvc3QsIHNlbGYucG9ydCksIEhUVFBSZXF1ZXN0SGFuZGxlcikKKyAgICAgICAgaWYgc2VsZi5wb3J0ID09IDA6CisgICAgICAgICAgICBzZWxmLnBvcnQgPSBzZWxmLnNlcnZlci5zZXJ2ZXJfcG9ydAorICAgICAgICBzZWxmLnByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5zZXJ2ZXIuc2VydmVyX3N0YXJ0LCBhcmdzPVtzZWxmLnJvb3RfZGlyXSkKKyAgICAgICAgc2VsZi5wcm9jZXNzLnN0YXJ0KCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlci5zZXJ2ZXJfY2xvc2UoKQorICAgICAgICBzZWxmLnByb2Nlc3MudGVybWluYXRlKCkKKyAgICAgICAgc2VsZi5wcm9jZXNzLmpvaW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2xvZ3BhcnNlci5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9sb2dwYXJzZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdiNTAzNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9sb2dwYXJzZXIucHkKQEAgLTAsMCArMSwxMjUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IGZ0b29scworCisKKyMgQSBwYXJzZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBpZGVudGlmeSB3ZWF0aGVyIGEgbGluZSBpcyBhIHRlc3QgcmVzdWx0IG9yIGEgc2VjdGlvbiBzdGF0ZW1lbnQuCitjbGFzcyBMcGFyc2VyKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF8wX3Bhc3NfcmVnZXgsIHRlc3RfMF9mYWlsX3JlZ2V4LCBzZWN0aW9uXzBfYmVnaW5fcmVnZXg9Tm9uZSwgc2VjdGlvbl8wX2VuZF9yZWdleD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICMgSW5pdGlhbGl6ZSB0aGUgYXJndW1lbnRzIGRpY3Rpb25hcnkKKyAgICAgICAgaWYga3dhcmdzOgorICAgICAgICAgICAgc2VsZi5hcmdzID0ga3dhcmdzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFyZ3MgPSB7fQorCisgICAgICAgICMgQWRkIHRoZSBkZWZhdWx0IGFyZ3MgdG8gdGhlIGRpY3Rpb25hcnkKKyAgICAgICAgc2VsZi5hcmdzWyd0ZXN0XzBfcGFzc19yZWdleCddID0gdGVzdF8wX3Bhc3NfcmVnZXgKKyAgICAgICAgc2VsZi5hcmdzWyd0ZXN0XzBfZmFpbF9yZWdleCddID0gdGVzdF8wX2ZhaWxfcmVnZXgKKyAgICAgICAgaWYgc2VjdGlvbl8wX2JlZ2luX3JlZ2V4OgorICAgICAgICAgICAgc2VsZi5hcmdzWydzZWN0aW9uXzBfYmVnaW5fcmVnZXgnXSA9IHNlY3Rpb25fMF9iZWdpbl9yZWdleAorICAgICAgICBpZiBzZWN0aW9uXzBfZW5kX3JlZ2V4OgorICAgICAgICAgICAgc2VsZi5hcmdzWydzZWN0aW9uXzBfZW5kX3JlZ2V4J10gPSBzZWN0aW9uXzBfZW5kX3JlZ2V4CisKKyAgICAgICAgc2VsZi50ZXN0X3Bvc3NpYmxlX3N0YXR1cyA9IFsncGFzcycsICdmYWlsJywgJ2Vycm9yJ10KKyAgICAgICAgc2VsZi5zZWN0aW9uX3Bvc3NpYmxlX3N0YXR1cyA9IFsnYmVnaW4nLCAnZW5kJ10KKworICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gRmFsc2UKKworCisgICAgIyBJbml0aWFsaXplIHRoZSBwYXJzZXIgd2l0aCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uCisgICAgZGVmIGluaXQoc2VsZik6CisKKyAgICAgICAgIyBleHRyYSBhcmd1bWVudHMgY2FuIGJlIGFkZGVkIGJ5IHRoZSB1c2VyIHRvIGRlZmluZSBuZXcgdGVzdCBhbmQgc2VjdGlvbiBjYXRlZ29yaWVzLiBUaGV5IG11c3QgZm9sbG93IGEgcHJlLWRlZmluZWQgcGF0dGVybjogPHR5cGU+XzxjYXRlZ29yeV9uYW1lPl88c3RhdHVzPl9yZWdleAorICAgICAgICBzZWxmLnRlc3RfYXJndW1lbnRfcGF0dGVybiA9ICJedGVzdF8oLis/KV8oJXMpX3JlZ2V4IiAlICd8Jy5qb2luKG1hcChzdHIsIHNlbGYudGVzdF9wb3NzaWJsZV9zdGF0dXMpKQorICAgICAgICBzZWxmLnNlY3Rpb25fYXJndW1lbnRfcGF0dGVybiA9ICJec2VjdGlvbl8oLis/KV8oJXMpX3JlZ2V4IiAlICd8Jy5qb2luKG1hcChzdHIsIHNlbGYuc2VjdGlvbl9wb3NzaWJsZV9zdGF0dXMpKQorCisgICAgICAgICMgSW5pdGlhbGl6ZSB0aGUgdGVzdCBhbmQgc2VjdGlvbiByZWdleCBkaWN0aW9uYXJpZXMKKyAgICAgICAgc2VsZi50ZXN0X3JlZ2V4ID0ge30KKyAgICAgICAgc2VsZi5zZWN0aW9uX3JlZ2V4ID17fQorCisgICAgICAgIGZvciBhcmcsIHZhbHVlIGluIHNlbGYuYXJncy5pdGVtcygpOgorICAgICAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVGhlIHZhbHVlIG9mIHByb3ZpZGVkIGFyZ3VtZW50ICVzIGlzICVzLiBTaG91bGQgaGF2ZSBhIHZhbGlkIHZhbHVlLicgJSAoa2V5LCB2YWx1ZSkpCisgICAgICAgICAgICBpc190ZXN0ID0gIHJlLnNlYXJjaChzZWxmLnRlc3RfYXJndW1lbnRfcGF0dGVybiwgYXJnKQorICAgICAgICAgICAgaXNfc2VjdGlvbiA9IHJlLnNlYXJjaChzZWxmLnNlY3Rpb25fYXJndW1lbnRfcGF0dGVybiwgYXJnKQorICAgICAgICAgICAgaWYgaXNfdGVzdDoKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNfdGVzdC5ncm91cCgxKSBpbiBzZWxmLnRlc3RfcmVnZXg6CisgICAgICAgICAgICAgICAgICAgIHNlbGYudGVzdF9yZWdleFtpc190ZXN0Lmdyb3VwKDEpXSA9IHt9CisgICAgICAgICAgICAgICAgc2VsZi50ZXN0X3JlZ2V4W2lzX3Rlc3QuZ3JvdXAoMSldW2lzX3Rlc3QuZ3JvdXAoMildID0gcmUuY29tcGlsZSh2YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgaXNfc2VjdGlvbjoKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNfc2VjdGlvbi5ncm91cCgxKSBpbiBzZWxmLnNlY3Rpb25fcmVnZXg6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VjdGlvbl9yZWdleFtpc19zZWN0aW9uLmdyb3VwKDEpXSA9IHt9CisgICAgICAgICAgICAgICAgc2VsZi5zZWN0aW9uX3JlZ2V4W2lzX3NlY3Rpb24uZ3JvdXAoMSldW2lzX3NlY3Rpb24uZ3JvdXAoMildID0gcmUuY29tcGlsZSh2YWx1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBUT0RPOiBNYWtlIHRoZXNlIGNhbGwgYSB0cmFjZWJhY2sgaW5zdGVhZCBvZiBhIHNpbXBsZSBleGNlcHRpb24uLgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVGhlIHByb3ZpZGVkIGFyZ3VtZW50IG5hbWUgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbnkgdmFsaWQgdHlwZS4gUGxlYXNlIGdpdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdHlwZXM6XG5mb3IgdGVzdHM6ICVzXG5mb3Igc2VjdGlvbnM6ICVzIiAlIChzZWxmLnRlc3RfYXJndW1lbnRfcGF0dGVybiwgc2VsZi5zZWN0aW9uX2FyZ3VtZW50X3BhdHRlcm4pKQorCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSBUcnVlCisKKyAgICAjIFBhcnNlIGEgbGluZSBhbmQgcmV0dXJuIGEgdHVwbGUgY29udGFpbmluZyB0aGUgdHlwZSBvZiByZXN1bHQgKHRlc3Qvc2VjdGlvbikgYW5kIGl0cyBjYXRlZ29yeSwgc3RhdHVzIGFuZCBuYW1lCisgICAgZGVmIHBhcnNlX2xpbmUoc2VsZiwgbGluZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLmluaXRpYWxpemVkOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUaGUgcGFyc2VyIGlzIG5vdCBpbml0aWFsaXplZC4uIikKKworICAgICAgICBmb3IgdGVzdF9jYXRlZ29yeSwgdGVzdF9zdGF0dXNfbGlzdCBpbiBzZWxmLnRlc3RfcmVnZXguaXRlbXMoKToKKyAgICAgICAgICAgIGZvciB0ZXN0X3N0YXR1cywgc3RhdHVzX3JlZ2V4IGluIHRlc3Rfc3RhdHVzX2xpc3QuaXRlbXMoKToKKyAgICAgICAgICAgICAgICB0ZXN0X25hbWUgPSBzdGF0dXNfcmVnZXguc2VhcmNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgdGVzdF9uYW1lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyd0ZXN0JywgdGVzdF9jYXRlZ29yeSwgdGVzdF9zdGF0dXMsIHRlc3RfbmFtZS5ncm91cCgxKV0KKworICAgICAgICBmb3Igc2VjdGlvbl9jYXRlZ29yeSwgc2VjdGlvbl9zdGF0dXNfbGlzdCBpbiBzZWxmLnNlY3Rpb25fcmVnZXguaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBzZWN0aW9uX3N0YXR1cywgc3RhdHVzX3JlZ2V4IGluIHNlY3Rpb25fc3RhdHVzX2xpc3QuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZWN0aW9uX25hbWUgPSBzdGF0dXNfcmVnZXguc2VhcmNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgc2VjdGlvbl9uYW1lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gWydzZWN0aW9uJywgc2VjdGlvbl9jYXRlZ29yeSwgc2VjdGlvbl9zdGF0dXMsIHNlY3Rpb25fbmFtZS5ncm91cCgxKV0KKyAgICAgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBSZXN1bHQob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5yZXN1bHRfZGljdCA9IHt9CisKKyAgICBkZWYgc3RvcmUoc2VsZiwgc2VjdGlvbiwgdGVzdCwgc3RhdHVzKToKKyAgICAgICAgaWYgbm90IHNlY3Rpb24gaW4gc2VsZi5yZXN1bHRfZGljdDoKKyAgICAgICAgICAgIHNlbGYucmVzdWx0X2RpY3Rbc2VjdGlvbl0gPSBbXQorCisgICAgICAgIHNlbGYucmVzdWx0X2RpY3Rbc2VjdGlvbl0uYXBwZW5kKCh0ZXN0LCBzdGF0dXMpKQorCisgICAgIyBzb3J0IHRlc3RzIGJ5IHRoZSB0ZXN0IG5hbWUodGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHR1cGxlKSwgZm9yIGVhY2ggc2VjdGlvbi4gVGhpcyBjYW4gYmUgaGVscGZ1bCB3aGVuIHVzaW5nIGdpdCB0byBkaWZmIGZvciBjaGFuZ2VzIGJ5IG1ha2luZyBzdXJlIHRoZXkgYXJlIGFsd2F5cyBpbiB0aGUgc2FtZSBvcmRlci4KKyAgICBkZWYgc29ydF90ZXN0cyhzZWxmKToKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gc2VsZi5yZXN1bHRfZGljdDoKKyAgICAgICAgICAgIHNvcnRlZF9yZXN1bHRzID0gc29ydGVkKHNlbGYucmVzdWx0X2RpY3RbcGFja2FnZV0sIGtleT1sYW1iZGEgdHVwOiB0dXBbMF0pCisgICAgICAgICAgICBzZWxmLnJlc3VsdF9kaWN0W3BhY2thZ2VdID0gc29ydGVkX3Jlc3VsdHMKKworICAgICMgTG9nIHRoZSByZXN1bHRzIGFzIGZpbGVzLiBUaGUgZmlsZSBuYW1lIGlzIHRoZSBzZWN0aW9uIG5hbWUgYW5kIHRoZSBjb250ZW50cyBhcmUgdGhlIHRlc3RzIGluIHRoYXQgc2VjdGlvbi4KKyAgICBkZWYgbG9nX2FzX2ZpbGVzKHNlbGYsIHRhcmdldF9kaXIsIHRlc3Rfc3RhdHVzKToKKyAgICAgICAgc3RhdHVzX3JlZ2V4ID0gcmUuY29tcGlsZSgnfCcuam9pbihtYXAoc3RyLCB0ZXN0X3N0YXR1cykpKQorICAgICAgICBpZiBub3QgdHlwZSh0ZXN0X3N0YXR1cykgPT0gdHlwZShbXSk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oInRlc3Rfc3RhdHVzIHNob3VsZCBiZSBhIGxpc3QuIEdvdCAiICsgc3RyKHRlc3Rfc3RhdHVzKSArICIgaW5zdGVhZC4iKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModGFyZ2V0X2Rpcik6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRhcmdldCBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3Q6ICVzIiAlIHRhcmdldF9kaXIpCisKKyAgICAgICAgZm9yIHNlY3Rpb24sIHRlc3RfcmVzdWx0cyBpbiBzZWxmLnJlc3VsdF9kaWN0Lml0ZW1zKCk6CisgICAgICAgICAgICBwcmVmaXggPSAnJworICAgICAgICAgICAgZm9yIHggaW4gdGVzdF9zdGF0dXM6CisgICAgICAgICAgICAgICAgcHJlZml4ICs9eCsnLicKKyAgICAgICAgICAgIGlmIChzZWN0aW9uICE9ICcnKToKKyAgICAgICAgICAgICAgICBwcmVmaXggKz0gc2VjdGlvbgorICAgICAgICAgICAgc2VjdGlvbl9maWxlID0gb3MucGF0aC5qb2luKHRhcmdldF9kaXIsIHByZWZpeCkKKyAgICAgICAgICAgICMgcHVyZ2UgdGhlIGZpbGUgY29udGVudHMgaWYgaXQgZXhpc3RzCisgICAgICAgICAgICBvcGVuKHNlY3Rpb25fZmlsZSwgJ3cnKS5jbG9zZSgpCisgICAgICAgICAgICBmb3IgdGVzdF9yZXN1bHQgaW4gdGVzdF9yZXN1bHRzOgorICAgICAgICAgICAgICAgICh0ZXN0X25hbWUsIHN0YXR1cykgPSB0ZXN0X3Jlc3VsdAorICAgICAgICAgICAgICAgICMgd2UgbG9nIG9ubHkgdGhlIHRlc3RzIHdpdGggc3RhdHVzIGluIHRoZSB0ZXN0X3N0YXR1cyBsaXN0CisgICAgICAgICAgICAgICAgbWF0Y2hfc3RhdHVzID0gc3RhdHVzX3JlZ2V4LnNlYXJjaChzdGF0dXMpCisgICAgICAgICAgICAgICAgaWYgbWF0Y2hfc3RhdHVzOgorICAgICAgICAgICAgICAgICAgICBmdG9vbHMuYXBwZW5kX2ZpbGUoc2VjdGlvbl9maWxlLCBzdGF0dXMgKyAiOiAiICsgdGVzdF9uYW1lKQorCisgICAgIyBOb3QgeWV0IGltcGxlbWVudGVkIQorICAgIGRlZiBsb2dfdG9fbGF2YShzZWxmKToKKyAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXVydW5uZXIucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXJ1bm5lci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzJjOWRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXVydW5uZXIucHkKQEAgLTAsMCArMSw1MTkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgY2xhc3MgZm9yIHN0YXJ0aW5nIHFlbXUgaW1hZ2VzIHVzaW5nIHJ1bnFlbXUuCisjIEl0J3MgdXNlZCBieSB0ZXN0aW1hZ2UuYmJjbGFzcy4KKworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCByZQoraW1wb3J0IHNvY2tldAoraW1wb3J0IHNlbGVjdAoraW1wb3J0IGVycm5vCitpbXBvcnQgdGhyZWFkaW5nCitmcm9tIG9lcWEudXRpbHMuZHVtcCBpbXBvcnQgSG9zdER1bXBlcgorCitpbXBvcnQgbG9nZ2luZworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuUWVtdVJ1bm5lciIpCisKK2NsYXNzIFFlbXVSdW5uZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFjaGluZSwgcm9vdGZzLCBkaXNwbGF5LCB0bXBkaXIsIGRlcGxveV9kaXJfaW1hZ2UsIGxvZ2ZpbGUsIGJvb3R0aW1lLCBkdW1wX2RpciwgZHVtcF9ob3N0X2NtZHMpOgorCisgICAgICAgICMgUG9wZW4gb2JqZWN0IGZvciBydW5xZW11CisgICAgICAgIHNlbGYucnVucWVtdSA9IE5vbmUKKyAgICAgICAgIyBwaWQgb2YgdGhlIHFlbXUgcHJvY2VzcyB0aGF0IHJ1bnFlbXUgd2lsbCBzdGFydAorICAgICAgICBzZWxmLnFlbXVwaWQgPSBOb25lCisgICAgICAgICMgdGFyZ2V0IGlwIC0gZnJvbSB0aGUgY29tbWFuZCBsaW5lCisgICAgICAgIHNlbGYuaXAgPSBOb25lCisgICAgICAgICMgaG9zdCBpcCAtIHdoZXJlIHFlbXUgaXMgcnVubmluZworICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IE5vbmUKKworICAgICAgICBzZWxmLm1hY2hpbmUgPSBtYWNoaW5lCisgICAgICAgIHNlbGYucm9vdGZzID0gcm9vdGZzCisgICAgICAgIHNlbGYuZGlzcGxheSA9IGRpc3BsYXkKKyAgICAgICAgc2VsZi50bXBkaXIgPSB0bXBkaXIKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX2ltYWdlID0gZGVwbG95X2Rpcl9pbWFnZQorICAgICAgICBzZWxmLmxvZ2ZpbGUgPSBsb2dmaWxlCisgICAgICAgIHNlbGYuYm9vdHRpbWUgPSBib290dGltZQorICAgICAgICBzZWxmLmxvZ2dlZCA9IEZhbHNlCisgICAgICAgIHNlbGYudGhyZWFkID0gTm9uZQorCisgICAgICAgIHNlbGYucnVucWVtdXRpbWUgPSA2MAorICAgICAgICBzZWxmLmhvc3RfZHVtcGVyID0gSG9zdER1bXBlcihkdW1wX2hvc3RfY21kcywgZHVtcF9kaXIpCisKKyAgICBkZWYgY3JlYXRlX3NvY2tldChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoMCkKKyAgICAgICAgICAgIHNvY2suYmluZCgoIjEyNy4wLjAuMSIsMCkpCisgICAgICAgICAgICBzb2NrLmxpc3RlbigyKQorICAgICAgICAgICAgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVsxXQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNyZWF0ZWQgbGlzdGVuaW5nIHNvY2tldCBmb3IgcWVtdSBzZXJpYWwgY29uc29sZSBvbjogMTI3LjAuMC4xOiVzIiAlIHBvcnQpCisgICAgICAgICAgICByZXR1cm4gKHNvY2ssIHBvcnQpCisKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBsb2coc2VsZiwgbXNnKToKKyAgICAgICAgaWYgc2VsZi5sb2dmaWxlOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYubG9nZmlsZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIiVzIiAlIG1zZykKKworICAgIGRlZiBnZXRPdXRwdXQoc2VsZiwgbyk6CisgICAgICAgIGltcG9ydCBmY250bAorICAgICAgICBmbCA9IGZjbnRsLmZjbnRsKG8sIGZjbnRsLkZfR0VURkwpCisgICAgICAgIGZjbnRsLmZjbnRsKG8sIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKKyAgICAgICAgcmV0dXJuIG9zLnJlYWQoby5maWxlbm8oKSwgMTAwMDAwMCkKKworCisgICAgZGVmIGhhbmRsZVNJR0NITEQoc2VsZiwgc2lnbnVtLCBmcmFtZSk6CisgICAgICAgIGlmIHNlbGYucnVucWVtdSBhbmQgc2VsZi5ydW5xZW11LnBvbGwoKToKKyAgICAgICAgICAgIGlmIHNlbGYucnVucWVtdS5yZXR1cm5jb2RlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdydW5xZW11IGV4aXRlZCB3aXRoIGNvZGUgJWQnICUgc2VsZi5ydW5xZW11LnJldHVybmNvZGUpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIk91dHB1dCBmcm9tIHJ1bnFlbXU6XG4lcyIgJSBzZWxmLmdldE91dHB1dChzZWxmLnJ1bnFlbXUuc3Rkb3V0KSkKKyAgICAgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgICAgIHNlbGYuX2R1bXBfaG9zdCgpCisgICAgICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdAorCisgICAgZGVmIHN0YXJ0KHNlbGYsIHFlbXVwYXJhbXMgPSBOb25lKToKKyAgICAgICAgaWYgc2VsZi5kaXNwbGF5OgorICAgICAgICAgICAgb3MuZW52aXJvblsiRElTUExBWSJdID0gc2VsZi5kaXNwbGF5CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRvIHN0YXJ0IHFlbXUgSSBuZWVkIGEgWCBkZXNrdG9wLCBwbGVhc2Ugc2V0IERJU1BMQVkgY29ycmVjdGx5IChlLmcuIERJU1BMQVk9OjEpIikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5yb290ZnMpOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJJbnZhbGlkIHJvb3RmcyAlcyIgJSBzZWxmLnJvb3RmcykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi50bXBkaXIpOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJJbnZhbGlkIFRNUERJUiBwYXRoICVzIiAlIHNlbGYudG1wZGlyKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy5lbnZpcm9uWyJPRV9UTVBESVIiXSA9IHNlbGYudG1wZGlyCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmRlcGxveV9kaXJfaW1hZ2UpOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJJbnZhbGlkIERFUExPWV9ESVJfSU1BR0UgcGF0aCAlcyIgJSBzZWxmLmRlcGxveV9kaXJfaW1hZ2UpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmVudmlyb25bIkRFUExPWV9ESVJfSU1BR0UiXSA9IHNlbGYuZGVwbG95X2Rpcl9pbWFnZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRocmVhZHNvY2ssIHRocmVhZHBvcnQgPSBzZWxmLmNyZWF0ZV9zb2NrZXQoKQorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0LCBzZWxmLnNlcnZlcnBvcnQgPSBzZWxmLmNyZWF0ZV9zb2NrZXQoKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBtc2c6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgbGlzdGVuaW5nIHNvY2tldDogJXMiICUgbXNnWzFdKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgIyBTZXQgdGhpcyBmbGFnIHNvIHRoYXQgUWVtdSBkb2Vzbid0IGRvIGFueSBncmFicyBhcyBTREwgZ3JhYnMgaW50ZXJhY3QKKyAgICAgICAgIyBiYWRseSB3aXRoIHNjcmVlbnNhdmVycy4KKyAgICAgICAgb3MuZW52aXJvblsiUUVNVV9ET05UX0dSQUIiXSA9ICIxIgorICAgICAgICBzZWxmLnFlbXVwYXJhbXMgPSAnYm9vdHBhcmFtcz0iY29uc29sZT10dHkxIGNvbnNvbGU9dHR5UzAsMTE1MjAwbjgiIHFlbXVwYXJhbXM9Ii1zZXJpYWwgdGNwOjEyNy4wLjAuMTp7fSInLmZvcm1hdCh0aHJlYWRwb3J0KQorICAgICAgICBpZiBxZW11cGFyYW1zOgorICAgICAgICAgICAgc2VsZi5xZW11cGFyYW1zID0gc2VsZi5xZW11cGFyYW1zWzotMV0gKyAiICIgKyBxZW11cGFyYW1zICsgIiAiICsgJ1wiJworCisgICAgICAgIHNlbGYub3JpZ2NobGRoYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHQ0hMRCkKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQ0hMRCwgc2VsZi5oYW5kbGVTSUdDSExEKQorCisgICAgICAgIGxhdW5jaF9jbWQgPSAncnVucWVtdSB0Y3BzZXJpYWw9JXMgJXMgJXMgJXMnICUgKHNlbGYuc2VydmVycG9ydCwgc2VsZi5tYWNoaW5lLCBzZWxmLnJvb3Rmcywgc2VsZi5xZW11cGFyYW1zKQorICAgICAgICAjIEZJWE1FOiBXZSBwYXNzIGluIHN0ZGluPXN1YnByb2Nlc3MuUElQRSBoZXJlIHRvIHdvcmsgYXJvdW5kIHN0dHkKKyAgICAgICAgIyBibG9ja2luZyBhdCB0aGUgZW5kIG9mIHRoZSBydW5xZW11IHNjcmlwdCB3aGVuIHVzaW5nIHRoaXMgd2l0aGluCisgICAgICAgICMgb2Utc2VsZnRlc3QgKHRoaXMgbWFrZXMgc3R0eSBlcnJvciBvdXQgaW1tZWRpYXRlbHkpLiBUaGVyZSBvdWdodAorICAgICAgICAjIHRvIGJlIGEgcHJvcGVyIGZpeCBidXQgdGhpcyB3aWxsIHN1ZmZpY2UgZm9yIG5vdy4KKyAgICAgICAgc2VsZi5ydW5xZW11ID0gc3VicHJvY2Vzcy5Qb3BlbihsYXVuY2hfY21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgcHJlZXhlY19mbj1vcy5zZXRwZ3JwKQorICAgICAgICBvdXRwdXQgPSBzZWxmLnJ1bnFlbXUuc3Rkb3V0CisKKyAgICAgICAgIworICAgICAgICAjIFdlIG5lZWQgdGhlIHByZWV4ZWNfZm4gYWJvdmUgc28gdGhhdCBhbGwgcnVucWVtdSBwcm9jZXNzZXMgY2FuIGVhc2lseSBiZSBraWxsZWQgCisgICAgICAgICMgKGJ5IGtpbGxpbmcgdGhlaXIgcHJvY2VzcyBncm91cCkuIFRoaXMgcHJlc2VudHMgYSBwcm9ibGVtIGlmIHRoaXMgY29udHJvbGxpbmcKKyAgICAgICAgIyBwcm9jZXNzIGl0c2VsZiBpcyBraWxsZWQgaG93ZXZlciBzaW5jZSB0aG9zZSBwcm9jZXNzZXMgZG9uJ3Qgbm90aWNlIHRoZSBkZWF0aCAKKyAgICAgICAgIyBvZiB0aGUgcGFyZW50IGFuZCBtZXJyaWx5IGNvbnRpbnVlIG9uLgorICAgICAgICAjCisgICAgICAgICMgUmF0aGVyIHRoYW4gaGFjayBydW5xZW11IHRvIGRlYWwgd2l0aCB0aGlzLCB3ZSBhZGQgc29tZXRoaW5nIGhlcmUgaW5zdGVhZC4gCisgICAgICAgICMgQmFzaWNhbGx5IHdlIGZvcmsgb2ZmIGFub3RoZXIgcHJvY2VzcyB3aGljaCBob2xkcyBhbiBvcGVuIHBpcGUgdG8gdGhlIHBhcmVudAorICAgICAgICAjIGFuZCBhbHNvIGlzIHNldHBncnAuIElmL3doZW4gdGhlIHBpcGUgc2VlcyBFT0YgZnJvbSB0aGUgcGFyZW50IGRpZWluZywgaXQga2lsbHMKKyAgICAgICAgIyB0aGUgcHJvY2VzcyBncm91cC4gVGhpcyBpcyBsaWtlIHBjdHJsJ3MgUERFQVRIU0lHIGJ1dCBmb3IgYSBwcm9jZXNzIGdyb3VwCisgICAgICAgICMgcmF0aGVyIHRoYW4gYSBzaW5nbGUgcHJvY2Vzcy4KKyAgICAgICAgIworICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYubW9uaXRvcnBpZCA9IG9zLmZvcmsoKQorICAgICAgICBpZiBzZWxmLm1vbml0b3JwaWQ6CisgICAgICAgICAgICBvcy5jbG9zZShyKQorICAgICAgICAgICAgc2VsZi5tb25pdG9ycGlwZSA9IG9zLmZkb3Blbih3LCAidyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGNoaWxkIHByb2Nlc3MKKyAgICAgICAgICAgIG9zLnNldHBncnAoKQorICAgICAgICAgICAgb3MuY2xvc2UodykKKyAgICAgICAgICAgIHIgPSBvcy5mZG9wZW4ocikKKyAgICAgICAgICAgIHggPSByLnJlYWQoKQorICAgICAgICAgICAgb3Mua2lsbHBnKG9zLmdldHBnaWQoc2VsZi5ydW5xZW11LnBpZCksIHNpZ25hbC5TSUdURVJNKQorICAgICAgICAgICAgc3lzLmV4aXQoMCkKKworICAgICAgICBsb2dnZXIuaW5mbygicnVucWVtdSBzdGFydGVkLCBwaWQgaXMgJXMiICUgc2VsZi5ydW5xZW11LnBpZCkKKyAgICAgICAgbG9nZ2VyLmluZm8oIndhaXRpbmcgYXQgbW9zdCAlcyBzZWNvbmRzIGZvciBxZW11IHBpZCIgJSBzZWxmLnJ1bnFlbXV0aW1lKQorICAgICAgICBlbmR0aW1lID0gdGltZS50aW1lKCkgKyBzZWxmLnJ1bnFlbXV0aW1lCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLmlzX2FsaXZlKCkgYW5kIHRpbWUudGltZSgpIDwgZW5kdGltZToKKyAgICAgICAgICAgIGlmIHNlbGYucnVucWVtdS5wb2xsKCk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5ydW5xZW11LnJldHVybmNvZGU6CisgICAgICAgICAgICAgICAgICAgICMgTm8gcG9pbnQgd2FpdGluZyBhbnkgbG9uZ2VyCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdydW5xZW11IGV4aXRlZCB3aXRoIGNvZGUgJWQnICUgc2VsZi5ydW5xZW11LnJldHVybmNvZGUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2R1bXBfaG9zdCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJPdXRwdXQgZnJvbSBydW5xZW11OlxuJXMiICUgc2VsZi5nZXRPdXRwdXQob3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICAgICAgaWYgc2VsZi5pc19hbGl2ZSgpOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oInFlbXUgc3RhcnRlZCAtIHFlbXUgcHJvY2NlcyBwaWQgaXMgJXMiICUgc2VsZi5xZW11cGlkKQorICAgICAgICAgICAgY21kbGluZSA9ICcnCisgICAgICAgICAgICB3aXRoIG9wZW4oJy9wcm9jLyVzL2NtZGxpbmUnICUgc2VsZi5xZW11cGlkKSBhcyBwOgorICAgICAgICAgICAgICAgIGNtZGxpbmUgPSBwLnJlYWQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlwcyA9IHJlLmZpbmRhbGwoIigoPzpbMC05XXsxLDN9XC4pezN9WzAtOV17MSwzfSkiLCBjbWRsaW5lLnNwbGl0KCJpcD0iKVsxXSkKKyAgICAgICAgICAgICAgICBpZiBub3QgaXBzIG9yIGxlbihpcHMpICE9IDM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmlwID0gaXBzWzBdCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX2lwID0gaXBzWzFdCisgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvciwgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ291bGRuJ3QgZ2V0IGlwIGZyb20gcWVtdSBwcm9jZXNzIGFyZ3VtZW50cyEgSGVyZSBpcyB0aGUgcWVtdSBjb21tYW5kIGxpbmUgdXNlZDpcbiVzXG5hbmQgb3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIChjbWRsaW5lLCBzZWxmLmdldE91dHB1dChvdXRwdXQpKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9kdW1wX2hvc3QoKQorICAgICAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBsb2dnZXIuaW5mbygicWVtdSBjbWRsaW5lIHVzZWQ6XG57fSIuZm9ybWF0KGNtZGxpbmUpKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlRhcmdldCBJUDogJXMiICUgc2VsZi5pcCkKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTZXJ2ZXIgSVA6ICVzIiAlIHNlbGYuc2VydmVyX2lwKQorCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiU3RhcnRpbmcgbG9nZ2luZyB0aHJlYWQiKQorICAgICAgICAgICAgc2VsZi50aHJlYWQgPSBMb2dnaW5nVGhyZWFkKHNlbGYubG9nLCB0aHJlYWRzb2NrLCBsb2dnZXIpCisgICAgICAgICAgICBzZWxmLnRocmVhZC5zdGFydCgpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi50aHJlYWQuY29ubmVjdGlvbl9lc3RhYmxpc2hlZC53YWl0KHNlbGYuYm9vdHRpbWUpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRGlkbid0IHJlY2VpdmUgYSBjb25zb2xlIGNvbm5lY3Rpb24gZnJvbSBxZW11LiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZXJlIGlzIHRoZSBxZW11IGNvbW1hbmQgbGluZSB1c2VkOlxuJXNcbmFuZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXRwdXQgZnJvbSBydW5xZW11OlxuJXMiICUgKGNtZGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0T3V0cHV0KG91dHB1dCkpKQorICAgICAgICAgICAgICAgIHNlbGYuc3RvcF90aHJlYWQoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiV2FpdGluZyBhdCBtb3N0ICVkIHNlY29uZHMgZm9yIGxvZ2luIGJhbm5lciIgJSBzZWxmLmJvb3R0aW1lKQorICAgICAgICAgICAgZW5kdGltZSA9IHRpbWUudGltZSgpICsgc2VsZi5ib290dGltZQorICAgICAgICAgICAgc29ja2xpc3QgPSBbc2VsZi5zZXJ2ZXJfc29ja2V0XQorICAgICAgICAgICAgcmVhY2hlZGxvZ2luID0gRmFsc2UKKyAgICAgICAgICAgIHN0b3ByZWFkID0gRmFsc2UKKyAgICAgICAgICAgIHFlbXVzb2NrID0gTm9uZQorICAgICAgICAgICAgYm9vdGxvZyA9ICcnCisgICAgICAgICAgICB3aGlsZSB0aW1lLnRpbWUoKSA8IGVuZHRpbWUgYW5kIG5vdCBzdG9wcmVhZDoKKyAgICAgICAgICAgICAgICBzcmVhZCwgc3dyaXRlLCBzZXJyb3IgPSBzZWxlY3Quc2VsZWN0KHNvY2tsaXN0LCBbXSwgW10sIDUpCisgICAgICAgICAgICAgICAgZm9yIHNvY2sgaW4gc3JlYWQ6CisgICAgICAgICAgICAgICAgICAgIGlmIHNvY2sgaXMgc2VsZi5zZXJ2ZXJfc29ja2V0OgorICAgICAgICAgICAgICAgICAgICAgICAgcWVtdXNvY2ssIGFkZHIgPSBzZWxmLnNlcnZlcl9zb2NrZXQuYWNjZXB0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHFlbXVzb2NrLnNldGJsb2NraW5nKDApCisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGlzdC5hcHBlbmQocWVtdXNvY2spCisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGlzdC5yZW1vdmUoc2VsZi5zZXJ2ZXJfc29ja2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNvbm5lY3Rpb24gZnJvbSAlczolcyIgJSBhZGRyKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHNvY2sucmVjdigxMDI0KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290bG9nICs9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2goIi4qIGxvZ2luOiIsIGJvb3Rsb2cpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQgPSBxZW11c29jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcmVhZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY2hlZGxvZ2luID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiUmVhY2hlZCBsb2dpbiBiYW5uZXIiKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGlzdC5yZW1vdmUoc29jaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcmVhZCA9IFRydWUKKworICAgICAgICAgICAgaWYgbm90IHJlYWNoZWRsb2dpbjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiVGFyZ2V0IGRpZG4ndCByZWFjaGVkIGxvZ2luIGJvb3QgaW4gJWQgc2Vjb25kcyIgJSBzZWxmLmJvb3R0aW1lKQorICAgICAgICAgICAgICAgIGxpbmVzID0gIlxuIi5qb2luKGJvb3Rsb2cuc3BsaXRsaW5lcygpWy0yNTpdKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJMYXN0IDI1IGxpbmVzIG9mIHRleHQ6XG4lcyIgJSBsaW5lcykKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ2hlY2sgZnVsbCBib290IGxvZzogJXMiICUgc2VsZi5sb2dmaWxlKQorICAgICAgICAgICAgICAgIHNlbGYuX2R1bXBfaG9zdCgpCisgICAgICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAgICAgIyBJZiB3ZSBhcmUgbm90IGFibGUgdG8gbG9naW4gdGhlIHRlc3RzIGNhbiBjb250aW51ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnJ1bl9zZXJpYWwoInJvb3RcbiIsIHJhdz1UcnVlKQorICAgICAgICAgICAgICAgIGlmIHJlLnNlYXJjaCgicm9vdEBbYS16QS1aMC05XC1dKzp+IyIsIG91dHB1dCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiTG9nZ2VkIGFzIHJvb3QgaW4gc2VyaWFsIGNvbnNvbGUiKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDb3VsZG4ndCBsb2dpbiBpbnRvIHNlcmlhbCBjb25zb2xlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYXMgcm9vdCB1c2luZyBibGFuayBwYXNzd29yZCIpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNlcmlhbCBjb25zb2xlIGZhaWxlZCB3aGlsZSB0cnlpbmcgdG8gbG9naW4iKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiUWVtdSBwaWQgZGlkbid0IGFwcGVhcmVkIGluICVzIHNlY29uZHMiICUgc2VsZi5ydW5xZW11dGltZSkKKyAgICAgICAgICAgIHNlbGYuX2R1bXBfaG9zdCgpCisgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIk91dHB1dCBmcm9tIHJ1bnFlbXU6XG4lcyIgJSBzZWxmLmdldE91dHB1dChvdXRwdXQpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgcmV0dXJuIHNlbGYuaXNfYWxpdmUoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYuc3RvcF90aHJlYWQoKQorICAgICAgICBpZiBzZWxmLnJ1bnFlbXU6CisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdDSExELCBzZWxmLm9yaWdjaGxkaGFuZGxlcikKKyAgICAgICAgICAgIG9zLmtpbGwoc2VsZi5tb25pdG9ycGlkLCBzaWduYWwuU0lHS0lMTCkKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTZW5kaW5nIFNJR1RFUk0gdG8gcnVucWVtdSIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3Mua2lsbHBnKG9zLmdldHBnaWQoc2VsZi5ydW5xZW11LnBpZCksIHNpZ25hbC5TSUdURVJNKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVTUkNIOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZW5kdGltZSA9IHRpbWUudGltZSgpICsgc2VsZi5ydW5xZW11dGltZQorICAgICAgICAgICAgd2hpbGUgc2VsZi5ydW5xZW11LnBvbGwoKSBpcyBOb25lIGFuZCB0aW1lLnRpbWUoKSA8IGVuZHRpbWU6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICAgICAgaWYgc2VsZi5ydW5xZW11LnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTZW5kaW5nIFNJR0tJTEwgdG8gcnVucWVtdSIpCisgICAgICAgICAgICAgICAgb3Mua2lsbHBnKG9zLmdldHBnaWQoc2VsZi5ydW5xZW11LnBpZCksIHNpZ25hbC5TSUdLSUxMKQorICAgICAgICAgICAgc2VsZi5ydW5xZW11ID0gTm9uZQorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdzZXJ2ZXJfc29ja2V0JykgYW5kIHNlbGYuc2VydmVyX3NvY2tldDoKKyAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQgPSBOb25lCisgICAgICAgIHNlbGYucWVtdXBpZCA9IE5vbmUKKyAgICAgICAgc2VsZi5pcCA9IE5vbmUKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQ0hMRCwgc2VsZi5vcmlnY2hsZGhhbmRsZXIpCisKKyAgICBkZWYgc3RvcF90aHJlYWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYudGhyZWFkIGFuZCBzZWxmLnRocmVhZC5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi50aHJlYWQuc3RvcCgpCisgICAgICAgICAgICBzZWxmLnRocmVhZC5qb2luKCkKKworICAgIGRlZiByZXN0YXJ0KHNlbGYsIHFlbXVwYXJhbXMgPSBOb25lKToKKyAgICAgICAgbG9nZ2VyLmluZm8oIlJlc3RhcnRpbmcgcWVtdSBwcm9jZXNzIikKKyAgICAgICAgaWYgc2VsZi5ydW5xZW11LnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgaWYgc2VsZi5zdGFydChxZW11cGFyYW1zKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5ydW5xZW11OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHFlbXVfY2hpbGQgPSBzZWxmLmZpbmRfY2hpbGQoc3RyKHNlbGYucnVucWVtdS5waWQpKQorICAgICAgICBpZiBxZW11X2NoaWxkOgorICAgICAgICAgICAgc2VsZi5xZW11cGlkID0gcWVtdV9jaGlsZFswXQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIi9wcm9jLyIgKyBzdHIoc2VsZi5xZW11cGlkKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgZmluZF9jaGlsZChzZWxmLHBhcmVudF9waWQpOgorICAgICAgICAjCisgICAgICAgICMgV2FsayB0aGUgcHJvY2VzcyB0cmVlIGZyb20gdGhlIHByb2Nlc3Mgc3BlY2lmaWVkIGxvb2tpbmcgZm9yIGEgcWVtdS1zeXN0ZW0uIFJldHVybiBpdHMgW3BpZCdjbWRdCisgICAgICAgICMKKyAgICAgICAgcHMgPSBzdWJwcm9jZXNzLlBvcGVuKFsncHMnLCAnYXh3dycsICctbycsICdwaWQscHBpZCxjb21tYW5kJ10sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgcHJvY2Vzc2VzID0gcHMuc3BsaXQoJ1xuJykKKyAgICAgICAgbmZpZWxkcyA9IGxlbihwcm9jZXNzZXNbMF0uc3BsaXQoKSkgLSAxCisgICAgICAgIHBpZHMgPSB7fQorICAgICAgICBjb21tYW5kcyA9IHt9CisgICAgICAgIGZvciByb3cgaW4gcHJvY2Vzc2VzWzE6XToKKyAgICAgICAgICAgIGRhdGEgPSByb3cuc3BsaXQoTm9uZSwgbmZpZWxkcykKKyAgICAgICAgICAgIGlmIGxlbihkYXRhKSAhPSAzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBkYXRhWzFdIG5vdCBpbiBwaWRzOgorICAgICAgICAgICAgICAgIHBpZHNbZGF0YVsxXV0gPSBbXQorCisgICAgICAgICAgICBwaWRzW2RhdGFbMV1dLmFwcGVuZChkYXRhWzBdKQorICAgICAgICAgICAgY29tbWFuZHNbZGF0YVswXV0gPSBkYXRhWzJdCisKKyAgICAgICAgaWYgcGFyZW50X3BpZCBub3QgaW4gcGlkczoKKyAgICAgICAgICAgIHJldHVybiBbXQorCisgICAgICAgIHBhcmVudHMgPSBbXQorICAgICAgICBuZXdwYXJlbnRzID0gcGlkc1twYXJlbnRfcGlkXQorICAgICAgICB3aGlsZSBuZXdwYXJlbnRzOgorICAgICAgICAgICAgbmV4dCA9IFtdCisgICAgICAgICAgICBmb3IgcCBpbiBuZXdwYXJlbnRzOgorICAgICAgICAgICAgICAgIGlmIHAgaW4gcGlkczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIG4gaW4gcGlkc1twXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG4gbm90IGluIHBhcmVudHMgYW5kIG4gbm90IGluIG5leHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5hcHBlbmQobikKKyAgICAgICAgICAgICAgICBpZiBwIG5vdCBpbiBwYXJlbnRzOgorICAgICAgICAgICAgICAgICAgICBwYXJlbnRzLmFwcGVuZChwKQorICAgICAgICAgICAgICAgICAgICBuZXdwYXJlbnRzID0gbmV4dAorICAgICAgICAjcHJpbnQgIkNoaWxkcmVuIG1hdGNoaW5nICVzOiIgJSBzdHIocGFyZW50cykKKyAgICAgICAgZm9yIHAgaW4gcGFyZW50czoKKyAgICAgICAgICAgICMgTmVlZCB0byBiZSBjYXJlZnVsIGhlcmUgc2luY2UgcnVucWVtdS1pbnRlcm5hbCBydW5zICJsZGQgcWVtdS1zeXN0ZW0teHh4eCIKKyAgICAgICAgICAgICMgQWxzbywgb2xkIHZlcnNpb25zIG9mIGxkZCAoMi4xMSkgcnVuICJMRF9YWFhYIHFlbXUtc3lzdGVtLXh4eHgiCisgICAgICAgICAgICBiYXNlY21kID0gY29tbWFuZHNbcF0uc3BsaXQoKVswXQorICAgICAgICAgICAgYmFzZWNtZCA9IG9zLnBhdGguYmFzZW5hbWUoYmFzZWNtZCkKKyAgICAgICAgICAgIGlmICJxZW11LXN5c3RlbSIgaW4gYmFzZWNtZCBhbmQgIi1zZXJpYWwgdGNwIiBpbiBjb21tYW5kc1twXToKKyAgICAgICAgICAgICAgICByZXR1cm4gW2ludChwKSxjb21tYW5kc1twXV0KKworICAgIGRlZiBydW5fc2VyaWFsKHNlbGYsIGNvbW1hbmQsIHJhdz1GYWxzZSk6CisgICAgICAgICMgV2UgYXNzdW1lIHRhcmdldCBzeXN0ZW0gaGF2ZSBlY2hvIHRvIGdldCBjb21tYW5kIHN0YXR1cworICAgICAgICBpZiBub3QgcmF3OgorICAgICAgICAgICAgY29tbWFuZCA9ICIlczsgZWNobyAkP1xuIiAlIGNvbW1hbmQKKyAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0LnNlbmRhbGwoY29tbWFuZCkKKyAgICAgICAgZGF0YSA9ICcnCisgICAgICAgIHN0YXR1cyA9IDAKKyAgICAgICAgc3RvcHJlYWQgPSBGYWxzZQorICAgICAgICBlbmR0aW1lID0gdGltZS50aW1lKCkrNQorICAgICAgICB3aGlsZSB0aW1lLnRpbWUoKTxlbmR0aW1lIGFuZCBub3Qgc3RvcHJlYWQ6CisgICAgICAgICAgICBzcmVhZCwgXywgXyA9IHNlbGVjdC5zZWxlY3QoW3NlbGYuc2VydmVyX3NvY2tldF0sW10sW10sNSkKKyAgICAgICAgICAgIGZvciBzb2NrIGluIHNyZWFkOgorICAgICAgICAgICAgICAgIGFuc3dlciA9IHNvY2sucmVjdigxMDI0KQorICAgICAgICAgICAgICAgIGlmIGFuc3dlcjoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSArPSBhbnN3ZXIKKyAgICAgICAgICAgICAgICAgICAgIyBTZWFyY2ggdGhlIHByb21wdCB0byBzdG9wCisgICAgICAgICAgICAgICAgICAgIGlmIHJlLnNlYXJjaCgiW2EtekEtWjAtOV0rQFthLXpBLVowLTlcLV0rOn4jIiwgZGF0YSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcmVhZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJObyBkYXRhIG9uIHNlcmlhbCBjb25zb2xlIHNvY2tldCIpCisgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICBpZiByYXc6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFJlbW92ZSBmaXJzdCBsaW5lIChjb21tYW5kIGxpbmUpIGFuZCBsYXN0IGxpbmUgKHByb21wdCkKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVtkYXRhLmZpbmQoJyQ/XHJcbicpKzQ6ZGF0YS5yZmluZCgnXHJcbicpXQorICAgICAgICAgICAgICAgIGluZGV4ID0gZGF0YS5yZmluZCgnXHJcbicpCisgICAgICAgICAgICAgICAgaWYgaW5kZXggPT0gLTE6CisgICAgICAgICAgICAgICAgICAgIHN0YXR1c19jbWQgPSBkYXRhCisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSAiIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHN0YXR1c19jbWQgPSBkYXRhW2luZGV4KzI6XQorICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVs6aW5kZXhdCisgICAgICAgICAgICAgICAgaWYgKHN0YXR1c19jbWQgPT0gIjAiKToKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMQorICAgICAgICByZXR1cm4gKHN0YXR1cywgc3RyKGRhdGEpKQorCisKKyAgICBkZWYgX2R1bXBfaG9zdChzZWxmKToKKyAgICAgICAgc2VsZi5ob3N0X2R1bXBlci5jcmVhdGVfZGlyKCJxZW11IikKKyAgICAgICAgbG9nZ2VyLndhcm4oIlFlbXUgZW5kZWQgdW5leHBlY3RlZGx5LCBkdW1wIGRhdGEgZnJvbSBob3N0IgorICAgICAgICAgICAgICAgICIgaXMgaW4gJXMiICUgc2VsZi5ob3N0X2R1bXBlci5kdW1wX2RpcikKKyAgICAgICAgc2VsZi5ob3N0X2R1bXBlci5kdW1wX2hvc3QoKQorCisjIFRoaXMgY2xhc3MgaXMgZm9yIHJlYWRpbmcgZGF0YSBmcm9tIGEgc29ja2V0IGFuZCBwYXNzaW5nIGl0IHRvIGxvZ2Z1bmMKKyMgdG8gYmUgcHJvY2Vzc2VkLiBJdCdzIGNvbXBsZXRlbHkgZXZlbnQgZHJpdmVuIGFuZCBoYXMgYSBzdHJhaWdodGZvcndhcmQKKyMgZXZlbnQgbG9vcC4gVGhlIG1lY2hhbmlzbSBmb3Igc3RvcHBpbmcgdGhlIHRocmVhZCBpcyBhIHNpbXBsZSBwaXBlIHdoaWNoCisjIHdpbGwgd2FrZSB1cCB0aGUgcG9sbCBhbmQgYWxsb3cgZm9yIHRlYXJpbmcgZXZlcnl0aGluZyBkb3duLgorY2xhc3MgTG9nZ2luZ1RocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nZnVuYywgc29jaywgbG9nZ2VyKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uX2VzdGFibGlzaGVkID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgc2VsZi5zZXJ2ZXJzb2NrID0gc29jaworICAgICAgICBzZWxmLmxvZ2Z1bmMgPSBsb2dmdW5jCisgICAgICAgIHNlbGYubG9nZ2VyID0gbG9nZ2VyCisgICAgICAgIHNlbGYucmVhZHNvY2sgPSBOb25lCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5lcnJvcmV2ZW50cyA9IHNlbGVjdC5QT0xMRVJSIHwgc2VsZWN0LlBPTExIVVAgfCBzZWxlY3QuUE9MTE5WQUwKKyAgICAgICAgc2VsZi5yZWFkZXZlbnRzID0gc2VsZWN0LlBPTExJTiB8IHNlbGVjdC5QT0xMUFJJCisKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmLCB0YXJnZXQ9c2VsZi50aHJlYWR0YXJnZXQpCisKKyAgICBkZWYgdGhyZWFkdGFyZ2V0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmV2ZW50bG9vcCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnRlYXJkb3duKCkKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlN0YXJ0aW5nIGxvZ2dpbmcgdGhyZWFkIikKKyAgICAgICAgc2VsZi5yZWFkcGlwZSwgc2VsZi53cml0ZXBpcGUgPSBvcy5waXBlKCkKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5ydW4oc2VsZikKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJTdG9wcGluZyBsb2dnaW5nIHRocmVhZCIpCisgICAgICAgIGlmIHNlbGYucnVubmluZzoKKyAgICAgICAgICAgIG9zLndyaXRlKHNlbGYud3JpdGVwaXBlLCAic3RvcCIpCisKKyAgICBkZWYgdGVhcmRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlRlYXJpbmcgZG93biBsb2dnaW5nIHRocmVhZCIpCisgICAgICAgIHNlbGYuY2xvc2Vfc29ja2V0KHNlbGYuc2VydmVyc29jaykKKworICAgICAgICBpZiBzZWxmLnJlYWRzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5jbG9zZV9zb2NrZXQoc2VsZi5yZWFkc29jaykKKworICAgICAgICBzZWxmLmNsb3NlX2lnbm9yZV9lcnJvcihzZWxmLnJlYWRwaXBlKQorICAgICAgICBzZWxmLmNsb3NlX2lnbm9yZV9lcnJvcihzZWxmLndyaXRlcGlwZSkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKworICAgIGRlZiBldmVudGxvb3Aoc2VsZik6CisgICAgICAgIHBvbGwgPSBzZWxlY3QucG9sbCgpCisgICAgICAgIGV2ZW50bWFzayA9IHNlbGYuZXJyb3JldmVudHMgfCBzZWxmLnJlYWRldmVudHMKKyAgICAgICAgcG9sbC5yZWdpc3RlcihzZWxmLnNlcnZlcnNvY2suZmlsZW5vKCkpCisgICAgICAgIHBvbGwucmVnaXN0ZXIoc2VsZi5yZWFkcGlwZSwgZXZlbnRtYXNrKQorCisgICAgICAgIGJyZWFrb3V0ID0gRmFsc2UKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJTdGFydGluZyB0aHJlYWQgZXZlbnQgbG9vcCIpCisgICAgICAgIHdoaWxlIG5vdCBicmVha291dDoKKyAgICAgICAgICAgIGV2ZW50cyA9IHBvbGwucG9sbCgpCisgICAgICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgorICAgICAgICAgICAgICAgICMgQW4gZXJyb3Igb2NjdXJyZWQsIGJhaWwgb3V0CisgICAgICAgICAgICAgICAgaWYgZXZlbnRbMV0gJiBzZWxmLmVycm9yZXZlbnRzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oc2VsZi5zdHJpbmdpZnlfZXZlbnQoZXZlbnRbMV0pKQorCisgICAgICAgICAgICAgICAgIyBFdmVudCB0byBzdG9wIHRoZSB0aHJlYWQKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJlYWRwaXBlID09IGV2ZW50WzBdOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJTdG9wIGV2ZW50IHJlY2VpdmVkIikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWtvdXQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICAjIEEgY29ubmVjdGlvbiByZXF1ZXN0IHdhcyByZWNlaXZlZAorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5zZXJ2ZXJzb2NrLmZpbGVubygpID09IGV2ZW50WzBdOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJDb25uZWN0aW9uIHJlcXVlc3QgcmVjZWl2ZWQiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlYWRzb2NrLCBfID0gc2VsZi5zZXJ2ZXJzb2NrLmFjY2VwdCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVhZHNvY2suc2V0YmxvY2tpbmcoMCkKKyAgICAgICAgICAgICAgICAgICAgcG9sbC51bnJlZ2lzdGVyKHNlbGYuc2VydmVyc29jay5maWxlbm8oKSkKKyAgICAgICAgICAgICAgICAgICAgcG9sbC5yZWdpc3RlcihzZWxmLnJlYWRzb2NrLmZpbGVubygpKQorCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlNldHRpbmcgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCBldmVudCIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbl9lc3RhYmxpc2hlZC5zZXQoKQorCisgICAgICAgICAgICAgICAgIyBBY3R1YWwgZGF0YSB0byBiZSBsb2dnZWQKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYucmVhZHNvY2suZmlsZW5vKCkgPT0gZXZlbnRbMF06CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJlY3YoMTAyNCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dmdW5jKGRhdGEpCisKKyAgICAjIFNpbmNlIHRoZSBzb2NrZXQgaXMgbm9uLWJsb2NraW5nIG1ha2Ugc3VyZSB0byBob25vciBFQUdBSU4KKyAgICAjIGFuZCBFV09VTERCTE9DSy4KKyAgICBkZWYgcmVjdihzZWxmLCBjb3VudCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJlYWRzb2NrLnJlY3YoY291bnQpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUFHQUlOIG9yIGUuZXJybm8gPT0gZXJybm8uRVdPVUxEQkxPQ0s6CisgICAgICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgaWYgZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJObyBkYXRhIG9uIHJlYWQgcmVhZHkgc29ja2V0IikKKyAgICAgICAgZWxpZiBub3QgZGF0YToKKyAgICAgICAgICAgICMgVGhpcyBhY3R1YWxseSBtZWFucyBhbiBvcmRlcmx5IHNodXRkb3duCisgICAgICAgICAgICAjIGhhcHBlbmVkLiBCdXQgZm9yIHRoaXMgY29kZSBpdCBjb3VudHMgYXMgYW4KKyAgICAgICAgICAgICMgZXJyb3Igc2luY2UgdGhlIGNvbm5lY3Rpb24gc2hvdWxkbid0IGdvIGF3YXkKKyAgICAgICAgICAgICMgdW50aWwgcWVtdSBleGl0cy4KKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ29uc29sZSBjb25uZWN0aW9uIGNsb3NlZCB1bmV4cGVjdGVkbHkiKQorCisgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBkZWYgc3RyaW5naWZ5X2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICAgICAgdmFsID0gJycKKyAgICAgICAgaWYgc2VsZWN0LlBPTExFUlIgPT0gZXZlbnQ6CisgICAgICAgICAgICB2YWwgPSAnUE9MTEVSJworICAgICAgICBlbGlmIHNlbGVjdC5QT0xMSFVQID09IGV2ZW50OgorICAgICAgICAgICAgdmFsID0gJ1BPTExIVVAnCisgICAgICAgIGVsaWYgc2VsZWN0LlBPTExOVkFMID09IGV2ZW50OgorICAgICAgICAgICAgdmFsID0gJ1BPTExOVkFMJworICAgICAgICByZXR1cm4gdmFsCisKKyAgICBkZWYgY2xvc2Vfc29ja2V0KHNlbGYsIHNvY2spOgorICAgICAgICBzb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1JEV1IpCisgICAgICAgIHNvY2suY2xvc2UoKQorCisgICAgZGVmIGNsb3NlX2lnbm9yZV9lcnJvcihzZWxmLCBmZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9xZW11dGlueXJ1bm5lci5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9xZW11dGlueXJ1bm5lci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Zjk1MTAxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXV0aW55cnVubmVyLnB5CkBAIC0wLDAgKzEsMTcwIEBACisjIENvcHlyaWdodCAoQykgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGNsYXNzIGZvciBzdGFydGluZyBxZW11IGltYWdlcyBvZiBwb2t5IHRpbnkuCisjIEl0J3MgdXNlZCBieSB0ZXN0aW1hZ2UuYmJjbGFzcy4KKworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCByZQoraW1wb3J0IHNvY2tldAoraW1wb3J0IHNlbGVjdAoraW1wb3J0IGJiCitmcm9tIHFlbXVydW5uZXIgaW1wb3J0IFFlbXVSdW5uZXIKKworY2xhc3MgUWVtdVRpbnlSdW5uZXIoUWVtdVJ1bm5lcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFjaGluZSwgcm9vdGZzLCBkaXNwbGF5LCB0bXBkaXIsIGRlcGxveV9kaXJfaW1hZ2UsIGxvZ2ZpbGUsIGtlcm5lbCwgYm9vdHRpbWUpOgorCisgICAgICAgICMgUG9wZW4gb2JqZWN0IGZvciBydW5xZW11CisgICAgICAgIHNlbGYucnVucWVtdSA9IE5vbmUKKyAgICAgICAgIyBwaWQgb2YgdGhlIHFlbXUgcHJvY2VzcyB0aGF0IHJ1bnFlbXUgd2lsbCBzdGFydAorICAgICAgICBzZWxmLnFlbXVwaWQgPSBOb25lCisgICAgICAgICMgdGFyZ2V0IGlwIC0gZnJvbSB0aGUgY29tbWFuZCBsaW5lCisgICAgICAgIHNlbGYuaXAgPSBOb25lCisgICAgICAgICMgaG9zdCBpcCAtIHdoZXJlIHFlbXUgaXMgcnVubmluZworICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IE5vbmUKKworICAgICAgICBzZWxmLm1hY2hpbmUgPSBtYWNoaW5lCisgICAgICAgIHNlbGYucm9vdGZzID0gcm9vdGZzCisgICAgICAgIHNlbGYuZGlzcGxheSA9IGRpc3BsYXkKKyAgICAgICAgc2VsZi50bXBkaXIgPSB0bXBkaXIKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX2ltYWdlID0gZGVwbG95X2Rpcl9pbWFnZQorICAgICAgICBzZWxmLmxvZ2ZpbGUgPSBsb2dmaWxlCisgICAgICAgIHNlbGYuYm9vdHRpbWUgPSBib290dGltZQorCisgICAgICAgIHNlbGYucnVucWVtdXRpbWUgPSA2MAorICAgICAgICBzZWxmLnNvY2tldGZpbGUgPSAiY29uc29sZS5zb2NrIgorICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQgPSBOb25lCisgICAgICAgIHNlbGYua2VybmVsID0ga2VybmVsCisKKworICAgIGRlZiBjcmVhdGVfc29ja2V0KHNlbGYpOgorICAgICAgICB0cmllcyA9IDMKKyAgICAgICAgd2hpbGUgdHJpZXMgPiAwOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQuY29ubmVjdChzZWxmLnNvY2tldGZpbGUpCisgICAgICAgICAgICAgICAgYmIubm90ZSgiQ3JlYXRlZCBsaXN0ZW5pbmcgc29ja2V0IGZvciBxZW11IHNlcmlhbCBjb25zb2xlLiIpCisgICAgICAgICAgICAgICAgdHJpZXMgPSAwCisgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBtc2c6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0LmNsb3NlKCkKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiRmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0LiIpCisgICAgICAgICAgICAgICAgdHJpZXMgLT0gMQorCisgICAgZGVmIGxvZyhzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxmLmxvZ2ZpbGU6CisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5sb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiJXMiICUgbXNnKQorCisgICAgZGVmIHN0YXJ0KHNlbGYsIHFlbXVwYXJhbXMgPSBOb25lKToKKworICAgICAgICBpZiBzZWxmLmRpc3BsYXk6CisgICAgICAgICAgICBvcy5lbnZpcm9uWyJESVNQTEFZIl0gPSBzZWxmLmRpc3BsYXkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLmVycm9yKCJUbyBzdGFydCBxZW11IEkgbmVlZCBhIFggZGVza3RvcCwgcGxlYXNlIHNldCBESVNQTEFZIGNvcnJlY3RseSAoZS5nLiBESVNQTEFZPToxKSIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYucm9vdGZzKToKKyAgICAgICAgICAgIGJiLmVycm9yKCJJbnZhbGlkIHJvb3RmcyAlcyIgJSBzZWxmLnJvb3RmcykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi50bXBkaXIpOgorICAgICAgICAgICAgYmIuZXJyb3IoIkludmFsaWQgVE1QRElSIHBhdGggJXMiICUgc2VsZi50bXBkaXIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmVudmlyb25bIk9FX1RNUERJUiJdID0gc2VsZi50bXBkaXIKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZGVwbG95X2Rpcl9pbWFnZSk6CisgICAgICAgICAgICBiYi5lcnJvcigiSW52YWxpZCBERVBMT1lfRElSX0lNQUdFIHBhdGggJXMiICUgc2VsZi5kZXBsb3lfZGlyX2ltYWdlKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy5lbnZpcm9uWyJERVBMT1lfRElSX0lNQUdFIl0gPSBzZWxmLmRlcGxveV9kaXJfaW1hZ2UKKworICAgICAgICAjIFNldCB0aGlzIGZsYWcgc28gdGhhdCBRZW11IGRvZXNuJ3QgZG8gYW55IGdyYWJzIGFzIFNETCBncmFicyBpbnRlcmFjdAorICAgICAgICAjIGJhZGx5IHdpdGggc2NyZWVuc2F2ZXJzLgorICAgICAgICBvcy5lbnZpcm9uWyJRRU1VX0RPTlRfR1JBQiJdID0gIjEiCisgICAgICAgIHNlbGYucWVtdXBhcmFtcyA9ICctLWFwcGVuZCAicm9vdD0vZGV2L3JhbTAgY29uc29sZT10dHlTMCIgLW5vZ3JhcGhpYyAtc2VyaWFsIHVuaXg6JXMsc2VydmVyLG5vd2FpdCcgJSBzZWxmLnNvY2tldGZpbGUKKworICAgICAgICBsYXVuY2hfY21kID0gJ3FlbXUtc3lzdGVtLWkzODYgLWtlcm5lbCAlcyAtaW5pdHJkICVzICVzJyAlIChzZWxmLmtlcm5lbCwgc2VsZi5yb290ZnMsIHNlbGYucWVtdXBhcmFtcykKKyAgICAgICAgc2VsZi5ydW5xZW11ID0gc3VicHJvY2Vzcy5Qb3BlbihsYXVuY2hfY21kLHNoZWxsPVRydWUsc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSxzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQscHJlZXhlY19mbj1vcy5zZXRwZ3JwKQorCisgICAgICAgIGJiLm5vdGUoInJ1bnFlbXUgc3RhcnRlZCwgcGlkIGlzICVzIiAlIHNlbGYucnVucWVtdS5waWQpCisgICAgICAgIGJiLm5vdGUoIndhaXRpbmcgYXQgbW9zdCAlcyBzZWNvbmRzIGZvciBxZW11IHBpZCIgJSBzZWxmLnJ1bnFlbXV0aW1lKQorICAgICAgICBlbmR0aW1lID0gdGltZS50aW1lKCkgKyBzZWxmLnJ1bnFlbXV0aW1lCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLmlzX2FsaXZlKCkgYW5kIHRpbWUudGltZSgpIDwgZW5kdGltZToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgICAgICBpZiBzZWxmLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBiYi5ub3RlKCJxZW11IHN0YXJ0ZWQgLSBxZW11IHByb2NjZXMgcGlkIGlzICVzIiAlIHNlbGYucWVtdXBpZCkKKyAgICAgICAgICAgIHNlbGYuY3JlYXRlX3NvY2tldCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi5ub3RlKCJRZW11IHBpZCBkaWRuJ3QgYXBwZWFyZWQgaW4gJXMgc2Vjb25kcyIgJSBzZWxmLnJ1bnFlbXV0aW1lKQorICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5ydW5xZW11LnN0ZG91dAorICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgICAgIGJiLm5vdGUoIk91dHB1dCBmcm9tIHJ1bnFlbXU6XG4lcyIgJSBvdXRwdXQucmVhZCgpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgcmV0dXJuIHNlbGYuaXNfYWxpdmUoKQorCisgICAgZGVmIHJ1bl9zZXJpYWwoc2VsZiwgY29tbWFuZCk6CisgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldC5zZW5kYWxsKGNvbW1hbmQrJ1xuJykKKyAgICAgICAgZGF0YSA9ICcnCisgICAgICAgIHN0YXR1cyA9IDAKKyAgICAgICAgc3RvcHJlYWQgPSBGYWxzZQorICAgICAgICBlbmR0aW1lID0gdGltZS50aW1lKCkrNQorICAgICAgICB3aGlsZSB0aW1lLnRpbWUoKTxlbmR0aW1lIGFuZCBub3Qgc3RvcHJlYWQ6CisgICAgICAgICAgICAgICAgc3JlYWQsIF8sIF8gPSBzZWxlY3Quc2VsZWN0KFtzZWxmLnNlcnZlcl9zb2NrZXRdLFtdLFtdLDUpCisgICAgICAgICAgICAgICAgZm9yIHNvY2sgaW4gc3JlYWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBhbnN3ZXIgPSBzb2NrLnJlY3YoMTAyNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFuc3dlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSArPSBhbnN3ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcmVhZCA9IFRydWUKKyAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICBzdGF0dXMgPSAxCisgICAgICAgIHJldHVybiAoc3RhdHVzLCBzdHIoZGF0YSkpCisKKyAgICBkZWYgZmluZF9jaGlsZChzZWxmLHBhcmVudF9waWQpOgorICAgICAgICAjCisgICAgICAgICMgV2FsayB0aGUgcHJvY2VzcyB0cmVlIGZyb20gdGhlIHByb2Nlc3Mgc3BlY2lmaWVkIGxvb2tpbmcgZm9yIGEgcWVtdS1zeXN0ZW0uIFJldHVybiBpdHMgW3BpZCdjbWRdCisgICAgICAgICMKKyAgICAgICAgcHMgPSBzdWJwcm9jZXNzLlBvcGVuKFsncHMnLCAnYXh3dycsICctbycsICdwaWQscHBpZCxjb21tYW5kJ10sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgcHJvY2Vzc2VzID0gcHMuc3BsaXQoJ1xuJykKKyAgICAgICAgbmZpZWxkcyA9IGxlbihwcm9jZXNzZXNbMF0uc3BsaXQoKSkgLSAxCisgICAgICAgIHBpZHMgPSB7fQorICAgICAgICBjb21tYW5kcyA9IHt9CisgICAgICAgIGZvciByb3cgaW4gcHJvY2Vzc2VzWzE6XToKKyAgICAgICAgICAgIGRhdGEgPSByb3cuc3BsaXQoTm9uZSwgbmZpZWxkcykKKyAgICAgICAgICAgIGlmIGxlbihkYXRhKSAhPSAzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBkYXRhWzFdIG5vdCBpbiBwaWRzOgorICAgICAgICAgICAgICAgIHBpZHNbZGF0YVsxXV0gPSBbXQorCisgICAgICAgICAgICBwaWRzW2RhdGFbMV1dLmFwcGVuZChkYXRhWzBdKQorICAgICAgICAgICAgY29tbWFuZHNbZGF0YVswXV0gPSBkYXRhWzJdCisKKyAgICAgICAgaWYgcGFyZW50X3BpZCBub3QgaW4gcGlkczoKKyAgICAgICAgICAgIHJldHVybiBbXQorCisgICAgICAgIHBhcmVudHMgPSBbXQorICAgICAgICBuZXdwYXJlbnRzID0gcGlkc1twYXJlbnRfcGlkXQorICAgICAgICB3aGlsZSBuZXdwYXJlbnRzOgorICAgICAgICAgICAgbmV4dCA9IFtdCisgICAgICAgICAgICBmb3IgcCBpbiBuZXdwYXJlbnRzOgorICAgICAgICAgICAgICAgIGlmIHAgaW4gcGlkczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIG4gaW4gcGlkc1twXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG4gbm90IGluIHBhcmVudHMgYW5kIG4gbm90IGluIG5leHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5hcHBlbmQobikKKyAgICAgICAgICAgICAgICBpZiBwIG5vdCBpbiBwYXJlbnRzOgorICAgICAgICAgICAgICAgICAgICBwYXJlbnRzLmFwcGVuZChwKQorICAgICAgICAgICAgICAgICAgICBuZXdwYXJlbnRzID0gbmV4dAorICAgICAgICAjcHJpbnQgIkNoaWxkcmVuIG1hdGNoaW5nICVzOiIgJSBzdHIocGFyZW50cykKKyAgICAgICAgZm9yIHAgaW4gcGFyZW50czoKKyAgICAgICAgICAgICMgTmVlZCB0byBiZSBjYXJlZnVsIGhlcmUgc2luY2UgcnVucWVtdS1pbnRlcm5hbCBydW5zICJsZGQgcWVtdS1zeXN0ZW0teHh4eCIKKyAgICAgICAgICAgICMgQWxzbywgb2xkIHZlcnNpb25zIG9mIGxkZCAoMi4xMSkgcnVuICJMRF9YWFhYIHFlbXUtc3lzdGVtLXh4eHgiCisgICAgICAgICAgICBiYXNlY21kID0gY29tbWFuZHNbcF0uc3BsaXQoKVswXQorICAgICAgICAgICAgYmFzZWNtZCA9IG9zLnBhdGguYmFzZW5hbWUoYmFzZWNtZCkKKyAgICAgICAgICAgIGlmICJxZW11LXN5c3RlbSIgaW4gYmFzZWNtZCBhbmQgIi1zZXJpYWwgdW5peCIgaW4gY29tbWFuZHNbcF06CisgICAgICAgICAgICAgICAgcmV0dXJuIFtpbnQocCksY29tbWFuZHNbcF1dClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3NzaGNvbnRyb2wucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvc3NoY29udHJvbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGY1MDUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3NzaGNvbnRyb2wucHkKQEAgLTAsMCArMSwxNTQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIFByb3ZpZGVzIGEgY2xhc3MgZm9yIHNldHRpbmcgdXAgc3NoIGNvbm5lY3Rpb25zLAorIyBydW5uaW5nIGNvbW1hbmRzIGFuZCBjb3B5aW5nIGZpbGVzIHRvL2Zyb20gYSB0YXJnZXQuCisjIEl0J3MgdXNlZCBieSB0ZXN0aW1hZ2UuYmJjbGFzcyBhbmQgdGVzdHMgaW4gbGliL29lcWEvcnVudGltZS4KKworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0aW1lCitpbXBvcnQgb3MKK2ltcG9ydCBzZWxlY3QKKworCitjbGFzcyBTU0hQcm9jZXNzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqb3B0aW9ucyk6CisKKyAgICAgICAgc2VsZi5kZWZhdWx0b3B0cyA9IHsKKyAgICAgICAgICAgICJzdGRvdXQiOiBzdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAic3RkZXJyIjogc3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICAgICAic3RkaW4iOiBOb25lLAorICAgICAgICAgICAgInNoZWxsIjogRmFsc2UsCisgICAgICAgICAgICAiYnVmc2l6ZSI6IC0xLAorICAgICAgICAgICAgInByZWV4ZWNfZm4iOiBvcy5zZXRzaWQsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5vcHRpb25zID0gZGljdChzZWxmLmRlZmF1bHRvcHRzKQorICAgICAgICBzZWxmLm9wdGlvbnMudXBkYXRlKG9wdGlvbnMpCisgICAgICAgIHNlbGYuc3RhdHVzID0gTm9uZQorICAgICAgICBzZWxmLm91dHB1dCA9IE5vbmUKKyAgICAgICAgc2VsZi5wcm9jZXNzID0gTm9uZQorICAgICAgICBzZWxmLnN0YXJ0dGltZSA9IE5vbmUKKyAgICAgICAgc2VsZi5sb2dmaWxlID0gTm9uZQorCisgICAgICAgICMgVW5zZXQgRElTUExBWSB3aGljaCBtZWFucyB3ZSB3b24ndCB0cmlnZ2VyIFNTSF9BU0tQQVNTCisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGlmICJESVNQTEFZIiBpbiBlbnY6CisgICAgICAgICAgICBkZWwgZW52WydESVNQTEFZJ10KKyAgICAgICAgc2VsZi5vcHRpb25zWydlbnYnXSA9IGVudgorCisgICAgZGVmIGxvZyhzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxmLmxvZ2ZpbGU6CisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5sb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICBmLndyaXRlKCIlcyIgJSBtc2cpCisKKyAgICBkZWYgX3J1bihzZWxmLCBjb21tYW5kLCB0aW1lb3V0PU5vbmUsIGxvZ2ZpbGU9Tm9uZSk6CisgICAgICAgIHNlbGYubG9nZmlsZSA9IGxvZ2ZpbGUKKyAgICAgICAgc2VsZi5zdGFydHRpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBvdXRwdXQgPSAnJworICAgICAgICBzZWxmLnByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKGNvbW1hbmQsICoqc2VsZi5vcHRpb25zKQorICAgICAgICBpZiB0aW1lb3V0OgorICAgICAgICAgICAgZW5kdGltZSA9IHNlbGYuc3RhcnR0aW1lICsgdGltZW91dAorICAgICAgICAgICAgZW9mID0gRmFsc2UKKyAgICAgICAgICAgIHdoaWxlIHRpbWUudGltZSgpIDwgZW5kdGltZSBhbmQgbm90IGVvZjoKKyAgICAgICAgICAgICAgICBpZiBzZWxlY3Quc2VsZWN0KFtzZWxmLnByb2Nlc3Muc3Rkb3V0XSwgW10sIFtdLCA1KVswXSAhPSBbXToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG9zLnJlYWQoc2VsZi5wcm9jZXNzLnN0ZG91dC5maWxlbm8oKSwgMTAyNCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3Muc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVvZiA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZyhkYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgZW5kdGltZSA9IHRpbWUudGltZSgpICsgdGltZW91dAorCisKKyAgICAgICAgICAgICMgcHJvY2VzcyBoYXNuJ3QgcmV0dXJuZWQgeWV0CisgICAgICAgICAgICBpZiBub3QgZW9mOgorICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzcy50ZXJtaW5hdGUoKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzcy5raWxsKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGxhc3RsaW5lID0gIlxuUHJvY2VzcyBraWxsZWQgLSBubyBvdXRwdXQgZm9yICVkIHNlY29uZHMuIFRvdGFsIHJ1bm5pbmcgdGltZTogJWQgc2Vjb25kcy4iICUgKHRpbWVvdXQsIHRpbWUudGltZSgpIC0gc2VsZi5zdGFydHRpbWUpCisgICAgICAgICAgICAgICAgc2VsZi5sb2cobGFzdGxpbmUpCisgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGxhc3RsaW5lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRwdXQgPSBzZWxmLnByb2Nlc3MuY29tbXVuaWNhdGUoKVswXQorICAgICAgICAgICAgc2VsZi5sb2cob3V0cHV0LnJzdHJpcCgpKQorCisgICAgICAgIHNlbGYuc3RhdHVzID0gc2VsZi5wcm9jZXNzLndhaXQoKQorICAgICAgICBzZWxmLm91dHB1dCA9IG91dHB1dC5yc3RyaXAoKQorCisgICAgZGVmIHJ1bihzZWxmLCBjb21tYW5kLCB0aW1lb3V0PU5vbmUsIGxvZ2ZpbGU9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3J1bihjb21tYW5kLCB0aW1lb3V0LCBsb2dmaWxlKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAjIE5lZWQgdG8gZ3VhcmQgYWdhaW5zdCBhIFN5c3RlbUV4aXQgb3Igb3RoZXIgZXhjZXB0aW9uIG9jY3VyaW5nIHdoaWxzdCBydW5uaW5nCisgICAgICAgICAgICAjIGFuZCBlbnN1cmUgd2UgZG9uJ3QgbGVhdmUgYSBwcm9jZXNzIGJlaGluZC4KKyAgICAgICAgICAgIGlmIHNlbGYucHJvY2Vzcy5wb2xsKCkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3Mua2lsbCgpCisgICAgICAgICAgICAgICAgc2VsZi5zdGF0dXMgPSBzZWxmLnByb2Nlc3Mud2FpdCgpCisgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gKHNlbGYuc3RhdHVzLCBzZWxmLm91dHB1dCkKKworY2xhc3MgU1NIQ29udHJvbChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpcCwgbG9nZmlsZT1Ob25lLCB0aW1lb3V0PTMwMCwgdXNlcj0ncm9vdCcsIHBvcnQ9Tm9uZSk6CisgICAgICAgIHNlbGYuaXAgPSBpcAorICAgICAgICBzZWxmLmRlZmF1bHR0aW1lb3V0ID0gdGltZW91dAorICAgICAgICBzZWxmLmlnbm9yZV9zdGF0dXMgPSBUcnVlCisgICAgICAgIHNlbGYubG9nZmlsZSA9IGxvZ2ZpbGUKKyAgICAgICAgc2VsZi51c2VyID0gdXNlcgorICAgICAgICBzZWxmLnNzaF9vcHRpb25zID0gWworICAgICAgICAgICAgICAgICctbycsICdVc2VyS25vd25Ib3N0c0ZpbGU9L2Rldi9udWxsJywKKyAgICAgICAgICAgICAgICAnLW8nLCAnU3RyaWN0SG9zdEtleUNoZWNraW5nPW5vJywKKyAgICAgICAgICAgICAgICAnLW8nLCAnTG9nTGV2ZWw9RVJST1InCisgICAgICAgICAgICAgICAgXQorICAgICAgICBzZWxmLnNzaCA9IFsnc3NoJywgJy1sJywgc2VsZi51c2VyIF0gKyBzZWxmLnNzaF9vcHRpb25zCisgICAgICAgIHNlbGYuc2NwID0gWydzY3AnXSArIHNlbGYuc3NoX29wdGlvbnMKKyAgICAgICAgaWYgcG9ydDoKKyAgICAgICAgICAgIHNlbGYuc3NoID0gc2VsZi5zc2ggKyBbICctcCcsIHBvcnQgXQorICAgICAgICAgICAgc2VsZi5zY3AgPSBzZWxmLnNjcCArIFsgJy1QJywgcG9ydCBdCisKKyAgICBkZWYgbG9nKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYubG9nZmlsZToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCIlc1xuIiAlIG1zZykKKworICAgIGRlZiBfaW50ZXJuYWxfcnVuKHNlbGYsIGNvbW1hbmQsIHRpbWVvdXQ9Tm9uZSwgaWdub3JlX3N0YXR1cyA9IFRydWUpOgorICAgICAgICBzZWxmLmxvZygiW1J1bm5pbmddJCAlcyIgJSAiICIuam9pbihjb21tYW5kKSkKKworICAgICAgICBwcm9jID0gU1NIUHJvY2VzcygpCisgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gcHJvYy5ydW4oY29tbWFuZCwgdGltZW91dCwgbG9nZmlsZT1zZWxmLmxvZ2ZpbGUpCisKKyAgICAgICAgc2VsZi5sb2coIltDb21tYW5kIHJldHVybmVkICclZCcgYWZ0ZXIgJS4yZiBzZWNvbmRzXSIgJSAoc3RhdHVzLCB0aW1lLnRpbWUoKSAtIHByb2Muc3RhcnR0aW1lKSkKKworICAgICAgICBpZiBzdGF0dXMgYW5kIG5vdCBpZ25vcmVfc3RhdHVzOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIkNvbW1hbmQgJyVzJyByZXR1cm5lZCBub24temVybyBleGl0IHN0YXR1cyAlZDpcbiVzIiAlIChjb21tYW5kLCBzdGF0dXMsIG91dHB1dCkpCisKKyAgICAgICAgcmV0dXJuIChzdGF0dXMsIG91dHB1dCkKKworICAgIGRlZiBydW4oc2VsZiwgY29tbWFuZCwgdGltZW91dD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIGNvbW1hbmQgLSBzc2ggY29tbWFuZCB0byBydW4KKyAgICAgICAgdGltZW91dD08dmFsPiAtIGtpbGwgY29tbWFuZCBpZiB0aGVyZSBpcyBubyBvdXRwdXQgYWZ0ZXIgPHZhbD4gc2Vjb25kcworICAgICAgICB0aW1lb3V0PU5vbmUgLSBraWxsIGNvbW1hbmQgaWYgdGhlcmUgaXMgbm8gb3V0cHV0IGFmdGVyIGEgZGVmYXVsdCB2YWx1ZSBzZWNvbmRzCisgICAgICAgIHRpbWVvdXQ9MCAtIG5vIHRpbWVvdXQsIGxldCBjb21tYW5kIHJ1biB1bnRpbCBpdCByZXR1cm5zCisgICAgICAgICIiIgorCisgICAgICAgICMgV2UgbmVlZCB0byBzb3VyY2UgL2V0Yy9wcm9maWxlIGZvciBhIHByb3BlciBQQVRIIG9uIHRoZSB0YXJnZXQKKyAgICAgICAgY29tbWFuZCA9IHNlbGYuc3NoICsgW3NlbGYuaXAsICcgLiAvZXRjL3Byb2ZpbGU7ICcgKyBjb21tYW5kXQorCisgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnRlcm5hbF9ydW4oY29tbWFuZCwgc2VsZi5kZWZhdWx0dGltZW91dCwgc2VsZi5pZ25vcmVfc3RhdHVzKQorICAgICAgICBpZiB0aW1lb3V0ID09IDA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5faW50ZXJuYWxfcnVuKGNvbW1hbmQsIE5vbmUsIHNlbGYuaWdub3JlX3N0YXR1cykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ludGVybmFsX3J1bihjb21tYW5kLCB0aW1lb3V0LCBzZWxmLmlnbm9yZV9zdGF0dXMpCisKKyAgICBkZWYgY29weV90byhzZWxmLCBsb2NhbHBhdGgsIHJlbW90ZXBhdGgpOgorICAgICAgICBjb21tYW5kID0gc2VsZi5zY3AgKyBbbG9jYWxwYXRoLCAnJXNAJXM6JXMnICUgKHNlbGYudXNlciwgc2VsZi5pcCwgcmVtb3RlcGF0aCldCisgICAgICAgIHJldHVybiBzZWxmLl9pbnRlcm5hbF9ydW4oY29tbWFuZCwgaWdub3JlX3N0YXR1cz1GYWxzZSkKKworICAgIGRlZiBjb3B5X2Zyb20oc2VsZiwgcmVtb3RlcGF0aCwgbG9jYWxwYXRoKToKKyAgICAgICAgY29tbWFuZCA9IHNlbGYuc2NwICsgWyclc0AlczolcycgJSAoc2VsZi51c2VyLCBzZWxmLmlwLCByZW1vdGVwYXRoKSwgbG9jYWxwYXRoXQorICAgICAgICByZXR1cm4gc2VsZi5faW50ZXJuYWxfcnVuKGNvbW1hbmQsIGlnbm9yZV9zdGF0dXM9RmFsc2UpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvdGFyZ2V0YnVpbGQucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvdGFyZ2V0YnVpbGQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg1MGQ3OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy90YXJnZXRidWlsZC5weQpAQCAtMCwwICsxLDEzNyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgUHJvdmlkZXMgYSBjbGFzcyBmb3IgYXV0b21hdGluZyBidWlsZCB0ZXN0cyBmb3IgcHJvamVjdHMKKworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBiYi51dGlscworaW1wb3J0IHN1YnByb2Nlc3MKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAorCitjbGFzcyBCdWlsZFByb2plY3QoKToKKworICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgdXJpLCBmb2xkZXJuYW1lPU5vbmUsIHRtcGRpcj0iL3RtcC8iKToKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLnVyaSA9IHVyaQorICAgICAgICBzZWxmLmFyY2hpdmUgPSBvcy5wYXRoLmJhc2VuYW1lKHVyaSkKKyAgICAgICAgc2VsZi5sb2NhbGFyY2hpdmUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLHNlbGYuYXJjaGl2ZSkKKyAgICAgICAgc2VsZi5mbmFtZSA9IHJlLnN1YihyJy50YXIuYnoyfHRhci5neiQnLCAnJywgc2VsZi5hcmNoaXZlKQorICAgICAgICBpZiBmb2xkZXJuYW1lOgorICAgICAgICAgICAgc2VsZi5mbmFtZSA9IGZvbGRlcm5hbWUKKworICAgICMgRG93bmxvYWQgc2VsZi5hcmNoaXZlIHRvIHNlbGYubG9jYWxhcmNoaXZlCisgICAgZGVmIF9kb3dubG9hZF9hcmNoaXZlKHNlbGYpOgorCisgICAgICAgIGRsX2RpciA9IHNlbGYuZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpCisgICAgICAgIGlmIGRsX2RpciBhbmQgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGRsX2Rpciwgc2VsZi5hcmNoaXZlKSk6CisgICAgICAgICAgICBiYi51dGlscy5jb3B5ZmlsZShvcy5wYXRoLmpvaW4oZGxfZGlyLCBzZWxmLmFyY2hpdmUpLCBzZWxmLmxvY2FsYXJjaGl2ZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGV4cG9ydHZhcnMgPSBbJ0hUVFBfUFJPWFknLCAnaHR0cF9wcm94eScsCisgICAgICAgICAgICAgICAgICAgICAgJ0hUVFBTX1BST1hZJywgJ2h0dHBzX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICAgICAnRlRQX1BST1hZJywgJ2Z0cF9wcm94eScsCisgICAgICAgICAgICAgICAgICAgICAgJ0ZUUFNfUFJPWFknLCAnZnRwc19wcm94eScsCisgICAgICAgICAgICAgICAgICAgICAgJ05PX1BST1hZJywgJ25vX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICAgICAnQUxMX1BST1hZJywgJ2FsbF9wcm94eScsCisgICAgICAgICAgICAgICAgICAgICAgJ1NPQ0tTNV9VU0VSJywgJ1NPQ0tTNV9QQVNTV0QnXQorCisgICAgICAgIGNtZCA9ICcnCisgICAgICAgIGZvciB2YXIgaW4gZXhwb3J0dmFyczoKKyAgICAgICAgICAgIHZhbCA9IHNlbGYuZC5nZXRWYXIodmFyLCBUcnVlKQorICAgICAgICAgICAgaWYgdmFsOgorICAgICAgICAgICAgICAgIGNtZCA9ICdleHBvcnQgJyArIHZhciArICc9XCIlc1wiOyAlcycgJSAodmFsLCBjbWQpCisKKyAgICAgICAgY21kID0gY21kICsgIndnZXQgLU8gJXMgJXMiICUgKHNlbGYubG9jYWxhcmNoaXZlLCBzZWxmLnVyaSkKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKGNtZCwgc2hlbGw9VHJ1ZSkKKworICAgICMgVGhpcyBtZXRob2Qgc2hvdWxkIHByb3ZpZGUgYSB3YXkgdG8gcnVuIGEgY29tbWFuZCBpbiB0aGUgZGVzaXJlZCBlbnZpcm9ubWVudC4KKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX3J1bihzZWxmLCBjbWQpOgorICAgICAgICBwYXNzCisKKyAgICAjIFRoZSB0aW1lb3V0IHBhcmFtZXRlciBvZiB0YXJnZXQucnVuIGlzIHNldCB0byAwIHRvIG1ha2UgdGhlIHNzaCBjb21tYW5kCisgICAgIyBydW4gd2l0aCBubyB0aW1lb3V0LgorICAgIGRlZiBydW5fY29uZmlndXJlKHNlbGYsIGNvbmZpZ3VyZV9hcmdzPScnLCBleHRyYV9jbWRzPScnKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bignY2QgJXM7ICVzIC4vY29uZmlndXJlICVzJyAlIChzZWxmLnRhcmdldGRpciwgZXh0cmFfY21kcywgY29uZmlndXJlX2FyZ3MpKQorCisgICAgZGVmIHJ1bl9tYWtlKHNlbGYsIG1ha2VfYXJncz0nJyk6CisgICAgICAgIHJldHVybiBzZWxmLl9ydW4oJ2NkICVzOyBtYWtlICVzJyAlIChzZWxmLnRhcmdldGRpciwgbWFrZV9hcmdzKSkKKworICAgIGRlZiBydW5faW5zdGFsbChzZWxmLCBpbnN0YWxsX2FyZ3M9JycpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuKCdjZCAlczsgbWFrZSBpbnN0YWxsICVzJyAlIChzZWxmLnRhcmdldGRpciwgaW5zdGFsbF9hcmdzKSkKKworICAgIGRlZiBjbGVhbihzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuKCdybSAtcmYgJXMnICUgc2VsZi50YXJnZXRkaXIpCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbCgncm0gLWYgJXMnICUgc2VsZi5sb2NhbGFyY2hpdmUsIHNoZWxsPVRydWUpCisgICAgICAgIHBhc3MKKworY2xhc3MgVGFyZ2V0QnVpbGRQcm9qZWN0KEJ1aWxkUHJvamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFyZ2V0LCBkLCB1cmksIGZvbGRlcm5hbWU9Tm9uZSk6CisgICAgICAgIHNlbGYudGFyZ2V0ID0gdGFyZ2V0CisgICAgICAgIHNlbGYudGFyZ2V0ZGlyID0gIn4vIgorICAgICAgICBCdWlsZFByb2plY3QuX19pbml0X18oc2VsZiwgZCwgdXJpLCBmb2xkZXJuYW1lLCB0bXBkaXI9Ii90bXAiKQorCisgICAgZGVmIGRvd25sb2FkX2FyY2hpdmUoc2VsZik6CisKKyAgICAgICAgc2VsZi5fZG93bmxvYWRfYXJjaGl2ZSgpCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LmNvcHlfdG8oc2VsZi5sb2NhbGFyY2hpdmUsIHNlbGYudGFyZ2V0ZGlyKQorICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRmFpbGVkIHRvIGNvcHkgYXJjaGl2ZSB0byB0YXJnZXQsIG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3RhciB4ZiAlcyVzIC1DICVzJyAlIChzZWxmLnRhcmdldGRpciwgc2VsZi5hcmNoaXZlLCBzZWxmLnRhcmdldGRpcikpCisgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gZXh0cmFjdCBhcmNoaXZlLCBvdXRwdXQ6ICVzIiAlIG91dHB1dCkKKworICAgICAgICAjQ2hhbmdlIHRhcmdldGRpciB0byBwcm9qZWN0IGZvbGRlcgorICAgICAgICBzZWxmLnRhcmdldGRpciA9IHNlbGYudGFyZ2V0ZGlyICsgc2VsZi5mbmFtZQorCisgICAgIyBUaGUgdGltZW91dCBwYXJhbWV0ZXIgb2YgdGFyZ2V0LnJ1biBpcyBzZXQgdG8gMCB0byBtYWtlIHRoZSBzc2ggY29tbWFuZAorICAgICMgcnVuIHdpdGggbm8gdGltZW91dC4KKyAgICBkZWYgX3J1bihzZWxmLCBjbWQpOgorICAgICAgICByZXR1cm4gc2VsZi50YXJnZXQucnVuKGNtZCwgMClbMF0KKworCitjbGFzcyBTREtCdWlsZFByb2plY3QoQnVpbGRQcm9qZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0cGF0aCwgc2RrZW52LCBkLCB1cmksIGZvbGRlcm5hbWU9Tm9uZSk6CisgICAgICAgIHNlbGYuc2RrZW52ID0gc2RrZW52CisgICAgICAgIHNlbGYudGVzdGRpciA9IHRlc3RwYXRoCisgICAgICAgIHNlbGYudGFyZ2V0ZGlyID0gdGVzdHBhdGgKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHRlc3RwYXRoKQorICAgICAgICBzZWxmLmRhdGV0aW1lID0gZC5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkKKyAgICAgICAgc2VsZi50ZXN0bG9nZGlyID0gZC5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLnRlc3Rsb2dkaXIpCisgICAgICAgIHNlbGYubG9nZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3Rsb2dkaXIsICJzZGtfdGFyZ2V0X2xvZy4lcyIgJSBzZWxmLmRhdGV0aW1lKQorICAgICAgICBCdWlsZFByb2plY3QuX19pbml0X18oc2VsZiwgZCwgdXJpLCBmb2xkZXJuYW1lLCB0bXBkaXI9dGVzdHBhdGgpCisKKyAgICBkZWYgZG93bmxvYWRfYXJjaGl2ZShzZWxmKToKKworICAgICAgICBzZWxmLl9kb3dubG9hZF9hcmNoaXZlKCkKKworICAgICAgICBjbWQgPSAndGFyIHhmICVzJXMgLUMgJXMnICUgKHNlbGYudGFyZ2V0ZGlyLCBzZWxmLmFyY2hpdmUsIHNlbGYudGFyZ2V0ZGlyKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoY21kLCBzaGVsbD1UcnVlKQorCisgICAgICAgICNDaGFuZ2UgdGFyZ2V0ZGlyIHRvIHByb2plY3QgZm9sZGVyCisgICAgICAgIHNlbGYudGFyZ2V0ZGlyID0gc2VsZi50YXJnZXRkaXIgKyBzZWxmLmZuYW1lCisKKyAgICBkZWYgcnVuX2NvbmZpZ3VyZShzZWxmLCBjb25maWd1cmVfYXJncz0nJyk6CisgICAgICAgIHJldHVybiBzdXBlcihTREtCdWlsZFByb2plY3QsIHNlbGYpLnJ1bl9jb25maWd1cmUoY29uZmlndXJlX2FyZ3M9KGNvbmZpZ3VyZV9hcmdzIG9yICckQ09ORklHVVJFX0ZMQUdTJyksIGV4dHJhX2NtZHM9JyBnbnUtY29uZmlnaXplOyAnKQorCisgICAgZGVmIHJ1bl9pbnN0YWxsKHNlbGYsIGluc3RhbGxfYXJncz0nJyk6CisgICAgICAgIHJldHVybiBzdXBlcihTREtCdWlsZFByb2plY3QsIHNlbGYpLnJ1bl9pbnN0YWxsKGluc3RhbGxfYXJncz0oaW5zdGFsbF9hcmdzIG9yICJERVNURElSPSVzLy4uL2luc3RhbGwiICUgc2VsZi50YXJnZXRkaXIpKQorCisgICAgZGVmIGxvZyhzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxmLmxvZ2ZpbGU6CisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5sb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICBmLndyaXRlKCIlc1xuIiAlIG1zZykKKworICAgIGRlZiBfcnVuKHNlbGYsIGNtZCk6CisgICAgICAgIHNlbGYubG9nKCJSdW5uaW5nIC4gJXM7ICIgJSBzZWxmLnNka2VudiArIGNtZCkKKyAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuY2FsbCgiLiAlczsgIiAlIHNlbGYuc2RrZW52ICsgY21kLCBzaGVsbD1UcnVlKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDE1NjE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkLmluYwpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkEgZGFlbW9uIGZvciBkZWxpdmVyaW5nIEFDUEkgZXZlbnRzIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9hY3BpZC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MzMxNDAmYXRpZD00MDczNDEiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vYWNwaWQyL2FjcGlkLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgZmlsZTovL2FjcGlkLnNlcnZpY2UgXAorICAgICAgICAgICIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLXJjLmQgc3lzdGVtZAorCitJTklUU0NSSVBUX05BTUUgPSAiYWNwaWQiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImFjcGlkLnNlcnZpY2UiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCXNlZCAtZSAncywvdXNyL3NiaW4sJHtzYmluZGlyfSxnJyAke1dPUktESVJ9L2luaXQgPiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvYWNwaWQKKwljaG1vZCA3NTUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2FjcGlkCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FjcGkKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FjcGkvZXZlbnRzCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYWNwaWQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9hY3BpZC5zZXJ2aWNlCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQvYWNwaWQuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC9hY3BpZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MGU3NDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQvYWNwaWQuc2VydmljZQpAQCAtMCwwICsxLDEwIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPUFDUEkgRXZlbnQgRGFlbW9uCitBZnRlcj1zeXNsb2cudGFyZ2V0CisKK1tTZXJ2aWNlXQorVHlwZT1mb3JraW5nCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2FjcGlkCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC9pbml0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDBmZjM4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC9pbml0CkBAIC0wLDAgKzEsMzEgQEAKKyMhIC9iaW4vc2ggLWUKKwordGVzdCAteCAvdXNyL3NiaW4vYWNwaWQgfHwgZXhpdCAwCit0ZXN0IC1kIC9wcm9jL2FjcGkgfHwgZXhpdCAwCitta2RpciAtcCAvZXRjL2FjcGkvZXZlbnRzCisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKyAgICBlY2hvIC1uICJTdGFydGluZyBBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UgZGFlbW9uOiAiCisgICAgaWYgWyAhIC1kIC9ldGMvYWNwaS9ldmVudHMgXTsgdGhlbgorICAgICAgICBlY2hvICJUaGVyZSBpcyBub3QgYW55IHJ1bGUgY29uZmlndXJhdGlvbiBmaWxlLiIKKyAgICBlbHNlCisgICAgICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC1vIC1TIC14IC91c3Ivc2Jpbi9hY3BpZCAtLSAtYyAvZXRjL2FjcGkvZXZlbnRzCisgICAgICAgIGVjaG8gImFjcGlkLiIKKyAgICBmaQorICAgIDs7CisgIHN0b3ApCisgICAgZWNobyAtbiAiU3RvcHBpbmcgQWR2YW5jZWQgQ29uZmlndXJhdGlvbiBhbmQgUG93ZXIgSW50ZXJmYWNlIGRhZW1vbjogIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC1vIC1LIC14IC91c3Ivc2Jpbi9hY3BpZAorICAgIGVjaG8gImFjcGlkLiIKKyAgICA7OworICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkgCisgICAgJDAgc3RvcAorICAgICQwIHN0YXJ0CisgICAgOzsKKyAgKikKKyAgICBlY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvYWNwaWQge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR9IgorICAgIGV4aXQgMQorZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZF8yLjAuMjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWRfMi4wLjIzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MzE3YTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWRfMi4wLjIzLmJiCkBAIC0wLDAgKzEsNyBAQAorcmVxdWlyZSBhY3BpZC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OGNhNDNjYmM4NDJjMjMzNmU4MzU5MjZjMjE2NmMyOGIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYWNwaWQuaDtlbmRsaW5lPTI0O21kNT0zMjRhOWNmMjI1YWU2OWRkYWFkMWJmOWQ5NDIxMTViNSIKKworU1JDX1VSSVttZDVzdW1dID0gImQ3YmNkY2RlZmNkNTNiMDM3MzBlNTBiYTg0MjU1NGVhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQzOTZhYWVjMTM1MTBjM2ExZmFhOTQxYTE1YTRiNTMzNWI2YWU0ZmJlYzg0MzhiOTI0OWI4OGMzYjY2MTg3ZWUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGY3YmIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS5iYgpAQCAtMCwwICsxLDY3IEBACisjIENvcHlyaWdodCBNYXR0aGlhcyBIZW50Z2VzIDxkZXZlbEBoZW50Z2VzLm5ldD4gKGMpIDIwMDcKKyMgTGljZW5zZTogTUlUIChzZWUgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAKKyMgICAgICAgICAgICAgICBmb3IgYSBjb3B5IG9mIHRoZSBsaWNlbnNlKQorIworIyBGaWxlbmFtZTogYWxzYS1zdGF0ZS5iYgorCitTVU1NQVJZID0gIkFsc2Egc2NlbmFyaW8gZmlsZXMgdG8gZW5hYmxlIGFsc2Egc3RhdGUgcmVzdG9yYXRpb24iCitERVNDUklQVElPTiA9ICJBbHNhIFNjZW5hcmlvIEZpbGVzIC0gYW4gaW5pdCBzY3JpcHQgYW5kIHN0YXRlIGZpbGVzIHRvIHJlc3RvcmUgXAorc291bmQgc3RhdGUgYXQgc3lzdGVtIGJvb3QgYW5kIHNhdmUgaXQgYXQgc3lzdGVtIHNodXQgZG93bi4iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorUFYgPSAiMC4yLjAiCitQUiA9ICJyNSIKKworU1JDX1VSSSA9ICJcCisgIGZpbGU6Ly9hc291bmQuY29uZiBcCisgIGZpbGU6Ly9hc291bmQuc3RhdGUgXAorICBmaWxlOi8vYWxzYS1zdGF0ZS1pbml0IFwKKyIKKworUyA9ICIke1dPUktESVJ9IgorCisjIEFzIHRoZSByZWNpcGUgZG9lc24ndCBpbmhlcml0IHN5c3RlbWQuYmJjbGFzcywgd2UgbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZQorIyBtYW51YWxseSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBwb3N0aW5zdC9wcmVpbnN0IGdlbmVyYXRlZC4KK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgZC5zZXRWYXIoIklOSElCSVRfVVBEQVRFUkNEX0JCQ0xBU1MiLCAiMSIpCit9CisKK2luaGVyaXQgdXBkYXRlLXJjLmQKKworSU5JVFNDUklQVF9OQU1FID0gImFsc2Etc3RhdGUiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAzOSBTIC4gc3RvcCAzMSAwIDYgLiIKKworZG9faW5zdGFsbCgpIHsKKyAgICAjIE9ubHkgaW5zdGFsbCB0aGUgaW5pdCBzY3JpcHQgd2hlbiAnc3lzdmluaXQnIGlzIGluIERJU1RST19GRUFUVVJFUy4KKyAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdmluaXQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCXNlZCAtaSAtZSAiczojU1RBVEVESVIjOiR7bG9jYWxzdGF0ZWRpcn0vbGliL2Fsc2E6ZyIgJHtXT1JLRElSfS9hbHNhLXN0YXRlLWluaXQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2Fsc2Etc3RhdGUtaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvYWxzYS1zdGF0ZQorICAgIGZpCisKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYQorICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hc291bmQuY29uZiAke0R9JHtzeXNjb25mZGlyfQorICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9Lyouc3RhdGUgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2Fsc2EKK30KKworUEFDS0FHRVMgKz0gImFsc2Etc3RhdGVzIgorCitSUkVDT01NRU5EU19hbHNhLXN0YXRlID0gImFsc2Etc3RhdGVzIgorCitSREVQRU5EU18ke1BOfSA9ICJhbHNhLXV0aWxzLWFsc2FjdGwiCitGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZCAke3N5c2NvbmZkaXJ9L2Fzb3VuZC5jb25mIgorQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vYXNvdW5kLmNvbmYiCisKK0ZJTEVTX2Fsc2Etc3RhdGVzID0gIiR7bG9jYWxzdGF0ZWRpcn0vbGliL2Fsc2EvKi5zdGF0ZSIKKworcGtnX3Bvc3RpbnN0XyR7UE59KCkgeworCWlmIHRlc3QgLXogIiREIgorCXRoZW4KKwkJaWYgdGVzdCAteCAke3NiaW5kaXJ9L2Fsc2FjdGwKKwkJdGhlbgorCQkJJHtzYmluZGlyfS9hbHNhY3RsIC1mICR7bG9jYWxzdGF0ZWRpcn0vbGliL2Fsc2EvYXNvdW5kLnN0YXRlIHJlc3RvcmUKKwkJZmkKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLWluaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUtaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZWU1OWNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLWluaXQKQEAgLTAsMCArMSwzOSBAQAorIyEgL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgTWF0dGhpYXMgSGVudGdlcyA8ZGV2ZWxAaGVudGdlcy5uZXQ+IChjKSAyMDA3CisjIExpY2Vuc2U6IEdQTCAoc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwudHh0IGZvciBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UpCisjCisjIEZpbGVuYW1lOiBhbHNhLXN0YXRlCisjIERhdGU6IDIwMDcwMzA4IChZTUQpCisKKyMgc291cmNlIGZ1bmN0aW9uIGxpYnJhcnkKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK2Fzb3VuZF9yZXN0b3JlKCl7CisJZWNobyAiQUxTQTogUmVzdG9yaW5nIG1peGVyIHNldHRpbmdzLi4uIgorCWlmIHRlc3QgLXggL3Vzci9zYmluL2Fsc2FjdGwgLWEgLWUgI1NUQVRFRElSIy9hc291bmQuc3RhdGUKKwl0aGVuCisJCS91c3Ivc2Jpbi9hbHNhY3RsIC1mICNTVEFURURJUiMvYXNvdW5kLnN0YXRlIHJlc3RvcmUgJgorCWZpCit9CisKK2Fzb3VuZF9zdG9yZSgpeworCWVjaG8gIkFMU0E6IFN0b3JpbmcgbWl4ZXIgc2V0dGluZ3MuLi4iCisJaWYgdGVzdCAteCAvdXNyL3NiaW4vYWxzYWN0bAorCXRoZW4KKwkJL3Vzci9zYmluL2Fsc2FjdGwgLWYgI1NUQVRFRElSIy9hc291bmQuc3RhdGUgc3RvcmUKKwlmaQorfQorCitjYXNlICIkMSIgaW4KK3N0YXJ0KQkJYXNvdW5kX3Jlc3RvcmUgOzsKK3N0b3ApCQlhc291bmRfc3RvcmUgOzsKKyAgc3RhdHVzKQorICAgIHN0YXR1cyAvdXNyL3NiaW4vYWxzYWN0bDsKKyAgICBleGl0ICQ/CisgIDs7CisgICopCisgICAgZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL2Fsc2Etc3RhdGUge3N0YXJ0fHN0b3B8c3RhdHVzfSIKKyAgICBleGl0IDEKKyAgOzsKK2VzYWMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYXNvdW5kLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2Fzb3VuZC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNjUzY2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2Fzb3VuZC5jb25mCkBAIC0wLDAgKzEgQEAKKyMgR2xvYmFsIGFsc2EtbGliIGNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYXNvdW5kLnN0YXRlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hc291bmQuc3RhdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRkMWNjZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYXNvdW5kLnN0YXRlCkBAIC0wLDAgKzEgQEAKKyMgRHVtbXkgZmlsZSwgZG8gbm90IGRlbGV0ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9hcG1kLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmFiODIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9hcG1kLnNlcnZpY2UKQEAgLTAsMCArMSw3IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPUFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQgZGFlbW9uCitBZnRlcj1yZW1vdGUtZnMudGFyZ2V0CisKK1tTZXJ2aWNlXQorRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvZGVmYXVsdC9hcG1kCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2FwbWQgLVAgQFNZU0NPTkZESVJAL2FwbS9hcG1kX3Byb3h5ICRBUE1ECmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWRfcHJveHkgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWRfcHJveHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ4ZWU0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvYXBtZF9wcm94eQpAQCAtMCwwICsxLDkxIEBACisjIS9iaW4vc2gKKyMgCisjIGFwbWRfcHJveHkgLSBwcm9ncmFtIGRpc3BhdGNoZXIgZm9yIEFQTSBkYWVtb24KKyMKKyMgV3JpdHRlbiBieSBDcmFpZyBNYXJrd2FyZHQgKGNyYWlnbUBsaGVhbWFpbC5nc2ZjLm5hc2EuZ292KSAyMSBNYXkgMTk5OQorIyBNb2RpZmllZCBmb3IgRGViaWFuIGJ5IEF2ZXJ5IFBlbm5hcnVuCisjCisjIFRoaXMgc2hlbGwgc2NyaXB0IGlzIGNhbGxlZCBieSB0aGUgQVBNIGRhZW1vbiAoYXBtZCkgd2hlbiBhIHBvd2VyCisjIG1hbmFnZW1lbnQgZXZlbnQgb2NjdXJzLiAgSXRzIGZpcnN0IGFuZCBzZWNvbmQgYXJndW1lbnRzIGRlc2NyaWJlIHRoZQorIyBldmVudC4gIEZvciBleGFtcGxlLCBhcG1kIHdpbGwgY2FsbCAiYXBtZF9wcm94eSBzdXNwZW5kIHN5c3RlbSIganVzdAorIyBiZWZvcmUgdGhlIHN5c3RlbSBpcyBzdXNwZW5kZWQuCisjCisjIEhlcmUgYXJlIHRoZSBwb3NzaWJsZSBhcmd1bWVudHM6CisjCisjIHN0YXJ0ICAgICAgICAgICAgICAtIEFQTSBkYWVtb24gaGFzIHN0YXJ0ZWQKKyMgc3RvcCAgICAgICAgICAgICAgIC0gQVBNIGRhZW1vbiBpcyBzaHV0dGluZyBkb3duCisjIHN1c3BlbmQgY3JpdGljYWwgICAtIEFQTSBzeXN0ZW0gaW5kaWNhdGVzIGNyaXRpY2FsIHN1c3BlbmQgKCsrKQorIyBzdXNwZW5kIHN5c3RlbSAgICAgLSBBUE0gc3lzdGVtIGhhcyByZXF1ZXN0ZWQgc3VzcGVuZCBtb2RlCisjIHN1c3BlbmQgdXNlciAgICAgICAtIFVzZXIgaGFzIHJlcXVlc3RlZCBzdXNwZW5kIG1vZGUKKyMgc3RhbmRieSBzeXN0ZW0gICAgIC0gQVBNIHN5c3RlbSBoYXMgcmVxdWVzdGVkIHN0YW5kYnkgbW9kZSAKKyMgc3RhbmRieSB1c2VyICAgICAgIC0gVXNlciBoYXMgcmVxdWVzdGVkIHN0YW5kYnkgbW9kZQorIyByZXN1bWUgc3VzcGVuZCAgICAgLSBTeXN0ZW0gaGFzIHJlc3VtZWQgZnJvbSBzdXNwZW5kIG1vZGUKKyMgcmVzdW1lIHN0YW5kYnkgICAgIC0gU3lzdGVtIGhhcyByZXN1bWVkIGZyb20gc3RhbmRieSBtb2RlCisjIHJlc3VtZSBjcml0aWNhbCAgICAtIFN5c3RlbSBoYXMgcmVzdW1lZCBmcm9tIGNyaXRpY2FsIHN1c3BlbmQKKyMgY2hhbmdlIGJhdHRlcnkgICAgIC0gQVBNIHN5c3RlbSByZXBvcnRlZCBsb3cgYmF0dGVyeQorIyBjaGFuZ2UgcG93ZXIgICAgICAgLSBBUE0gc3lzdGVtIHJlcG9ydGVkIEFDL2JhdHRlcnkgY2hhbmdlCisjIGNoYW5nZSB0aW1lICAgICAgICAtIEFQTSBzeXN0ZW0gcmVwb3J0ZWQgdGltZSBjaGFuZ2UgKCopCisjIGNoYW5nZSBjYXBhYmlsaXR5ICAtIEFQTSBzeXN0ZW0gcmVwb3J0ZWQgY29uZmlnLiBjaGFuZ2UgKCspCisjCisjICgqKSAtIEFQTSBkYWVtb24gbWF5IGJlIGNvbmZpZ3VyZWQgdG8gbm90IGNhbGwgdGhlc2Ugc2VxdWVuY2VzCisjICgrKSAtIEF2YWlsYWJsZSBpZiBBUE0ga2VybmVsIHN1cHBvcnRzIGl0LgorIyAoKyspIC0gInN1c3BlbmQgY3JpdGljYWwiIGlzIG5ldmVyIHBhc3NlZCB0byBhcG1kIGZyb20gdGhlIGtlcm5lbCwKKyMgICBzbyB3ZSB3aWxsIG5ldmVyIHNlZSBpdCBoZXJlLiAgU2NyaXB0cyB0aGF0IHByb2Nlc3MgInJlc3VtZQorIyAgIGNyaXRpY2FsIiBldmVudHMgbmVlZCB0byB0YWtlIHRoaXMgaW50byBhY2NvdW50LgorIworIyBJdCBpcyB0aGUgcHJveHkgc2NyaXB0J3MgcmVzcG9uc2liaWxpdHkgdG8gZXhhbWluZSB0aGUgQVBNIHN0YXR1cworIyAodmlhIC9wcm9jL2FwbSkgb3Igb3RoZXIgc3RhdHVzIGFuZCB0byB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbnMuCisjIEZvciBleGFtcGxlLCB0aGUgc2NyaXB0IG1pZ2h0IHVubW91bnQgbmV0d29yayBkcml2ZXMgYmVmb3JlIHRoZQorIyBtYWNoaW5lIGlzIHN1c3BlbmRlZC4KKyMKKyMgSW4gRGViaWFuLCB0aGUgdXN1YWwgd2F5IG9mIGFkZGluZyBmdW5jdGlvbmFsaXR5IHRvIHRoZSBwcm94eSBpcyB0bworIyBhZGQgYSBzY3JpcHQgdG8gL2V0Yy9hcG0vZXZlbnQuZC4gIFRoaXMgc2NyaXB0IHdpbGwgYmUgY2FsbGVkIGJ5CisjIGFwbWRfcHJveHkgKHZpYSBydW4tcGFydHMpIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzLgorIworIyBJZiBpdCBpcyBpbXBvcnRhbnQgdGhhdCBhIGNlcnRhaW4gc2V0IG9mIHNjcmlwdCBiZSBydW4gaW4gYSBjZXJ0YWluCisjIG9yZGVyIG9uIHN1c3BlbmQgYW5kIGluIGEgZGlmZmVyZW50IG9yZGVyIG9uIHJlc3VtZSwgdGhlbiBwdXQgYWxsCisjIHRoZSBzY3JpcHRzIGluIC9ldGMvYXBtL3NjcmlwdHMuZCBpbnN0ZWFkIG9mIC9ldGMvYXBtL2V2ZW50LmQgYW5kCisjIHN5bWxpbmsgdG8gdGhlc2UgZnJvbSAvZXRjL2FwbS9zdXNwZW5kLmQsIC9ldGMvYXBtL3Jlc3VtZS5kIGFuZAorIyAvZXRjL2FwbS9vdGhlci5kIHVzaW5nIG5hbWVzIHdob3NlIGxleGljb2dyYXBoaWNhbCBvcmRlciBpcyB0aGUgc2FtZQorIyBhcyB0aGUgZGVzaXJlZCBvcmRlciBvZiBleGVjdXRpb24uCisjCisjIElmIHRoZSBrZXJuZWwncyBBUE0gZHJpdmVyIHN1cHBvcnRzIGl0LCBhcG1kX3Byb3h5IGNhbiByZXR1cm4gYSBub24temVybworIyBleGl0IHN0YXR1cyBvbiBzdXNwZW5kIGFuZCBzdGFuZGJ5IGV2ZW50cywgaW5kaWNhdGluZyB0aGF0IHRoZSBzdXNwZW5kCisjIG9yIHN0YW5kYnkgZXZlbnQgc2hvdWxkIGJlIHJlamVjdGVkLgorIworIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK3NldCAtZQorCisjIFRoZSBmb2xsb3dpbmcgZG9lc24ndCB5ZXQgd29yaywgYmVjYXVzZSBjdXJyZW50IGtlcm5lbHMgKHVwIHRvIGF0IGxlYXN0CisjIDIuNC4yMCkgZG8gbm90IHN1cHBvcnQgcmVqZWN0aW9uIG9mIEFQTSBldmVudHMuICBTdXBwb3J0aW5nIHRoaXMgd291bGQKKyMgcmVxdWlyZSBzdWJzdGFudGlhbCBtb2RpZmljYXRpb25zIHRvIHRoZSBBUE0gZHJpdmVyLiAgV2Ugd2lsbCByZS1lbmFibGUKKyMgdGhpcyBmZWF0dXJlIGlmIHRoZSBkcml2ZXIgaXMgZXZlciBtb2RpZmllZC4gICAgICAgLS0gY3BoQGRlYmlhbi5vcmcKKyMKKyNTVVNQRU5EX09OX0FDPWZhbHNlCisjWyAtciAvZXRjL2FwbS9hcG1kX3Byb3h5LmNvbmYgXSAmJiAuIC9ldGMvYXBtL2FwbWRfcHJveHkuY29uZgorIworI2lmIFsgIiR7U1VTUEVORF9PTl9BQ30iID0gImZhbHNlIiAtYSAiJHsyfSIgPSAic3lzdGVtIiBdIFwKKyMJJiYgb25fYWNfcG93ZXIgPi9kZXYvbnVsbDsgdGhlbgorIyAgICAjIFJlamVjdCBzeXN0ZW0gc3VzcGVuZHMgYW5kIHN0YW5kYnlzIGlmIHdlIGFyZSBvbiBBQyBwb3dlcgorIyAgICBleGl0IDEgICMgUmVqZWN0IChOT1RFIGtlcm5lbCBzdXBwb3J0IG11c3QgYmUgZW5hYmxlZCkKKyNmaQorCitpZiBbICIkezF9IiA9ICJzdXNwZW5kIiAtbyAiJHsxfSIgPSAic3RhbmRieSIgXTsgdGhlbgorICAgIHJ1bi1wYXJ0cyAtYSAiJHsxfSIgLWEgIiR7Mn0iIC9ldGMvYXBtL2V2ZW50LmQKKyAgICBpZiBbIC1kIC9ldGMvYXBtL3N1c3BlbmQuZCBdOyB0aGVuCisgICAgICAgIHJ1bi1wYXJ0cyAtYSAiJHsxfSIgLWEgIiR7Mn0iIC9ldGMvYXBtL3N1c3BlbmQuZAorICAgIGZpCitlbGlmIFsgIiR7MX0iID0gInJlc3VtZSIgXTsgdGhlbgorICAgIGlmIFsgLWQgL2V0Yy9hcG0vcmVzdW1lLmQgXTsgdGhlbgorICAgICAgICBydW4tcGFydHMgLWEgIiR7MX0iIC1hICIkezJ9IiAvZXRjL2FwbS9yZXN1bWUuZAorICAgIGZpCisgICAgcnVuLXBhcnRzIC1hICIkezF9IiAtYSAiJHsyfSIgL2V0Yy9hcG0vZXZlbnQuZAorZWxzZQorICAgIHJ1bi1wYXJ0cyAtYSAiJHsxfSIgLWEgIiR7Mn0iIC9ldGMvYXBtL2V2ZW50LmQKKyAgICBpZiBbIC1kIC9ldGMvYXBtL290aGVyLmQgXTsgdGhlbgorICAgICAgICBydW4tcGFydHMgLWEgIiR7MX0iIC1hICIkezJ9IiAvZXRjL2FwbS9vdGhlci5kCisgICAgZmkKK2ZpCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9hcG1kX3Byb3h5LmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWRfcHJveHkuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTExNDVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9hcG1kX3Byb3h5LmNvbmYKQEAgLTAsMCArMSwxNiBAQAorIyAvZXRjL2FwbS9hcG1kX3Byb3h5LmNvbmY6IGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgYXBtZC4KKyMKKyMgVGhpcyBmaWxlIGlzIG1hbmFnZWQgYnkgZGViY29uZiB3aGVuIGluc3RhbGxpbmcgb3IgcmVjb25maWd1cmluZyB0aGUKKyMgcGFja2FnZS4gIEl0IGlzIGdlbmVyYXRlZCBieSBtZXJnaW5nIHRoZSBhbnN3ZXJzIGdhdGhlcmVkIGJ5IGRlYmNvbmYKKyMgaW50byB0aGUgdGVtcGxhdGUgZmlsZSAiL3Vzci9zaGFyZS9hcG1kL2FwbWRfcHJveHkuY29uZiIuCisKKyMgVGhlIGZvbGxvd2luZyBkb2Vzbid0IHlldCB3b3JrLCBiZWNhdXNlIGN1cnJlbnQga2VybmVscyAodXAgdG8gYXQgbGVhc3QKKyMgMi40LjIwKSBkbyBub3Qgc3VwcG9ydCByZWplY3Rpb24gb2YgQVBNIGV2ZW50cy4gIFN1cHBvcnRpbmcgdGhpcyB3b3VsZAorIyByZXF1aXJlIHN1YnN0YW50aWFsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEFQTSBkcml2ZXIuICBXZSB3aWxsIHJlLWVuYWJsZQorIyB0aGlzIGZlYXR1cmUgaWYgdGhlIGRyaXZlciBpcyBldmVyIG1vZGlmaWVkLiAgICAgICAtLSBjcGhAZGViaWFuLm9yZworIworIyBTZXQgdGhlIGZvbGxvd2luZyB0byAiZmFsc2UiIGlmIHlvdSB3YW50IHRvIHJlamVjdCBzeXN0ZW0gc3VzcGVuZCBvcgorIyBzeXN0ZW0gc3RhbmRieSByZXF1ZXN0cyB3aGVuIHRoZSBjb21wdXRlciBpcyBydW5uaW5nIG9uIEFDIHBvd2VyLgorIyBPdGhlcndpc2Ugc2V0IHRoaXMgdG8gInRydWUiLiAgU3VjaCByZXF1ZXN0cyBhcmUgbmV2ZXIgcmVqZWN0ZWQgd2hlbgorIyB0aGUgY29tcHV0ZXIgaXMgcnVubmluZyBvbiBiYXR0ZXJ5IHBvd2VyLgorI1NVU1BFTkRfT05fQUM9dHJ1ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9kZWZhdWx0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNzk2NWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2RlZmF1bHQKQEAgLTAsMCArMSw4IEBACisjCisjIERlZmF1bHQgZm9yIC9ldGMvaW5pdC5kL2FwbWQKKyMKKworIyBBcyBhcG1kIGNhbiBiZSBjYWxsZWQgd2l0aCBhcmd1bWVudHMsIHdlIHVzZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlCisjIHRvIHN0b3JlIHRoZW0sIGUuZy4sIEFQTUQ9Ii13IDUgLXAgMiIuCisjIFNlZSB0aGUgbWFudWFsIHBhZ2UgYXBtZCg4KSBmb3IgZGV0YWlscy4KK0FQTUQ9Ii0tcHJveHktdGltZW91dCAzMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMGI0MWFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9pbml0CkBAIC0wLDAgKzEsNTEgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgYXBtZAorIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcworIyBSZXF1aXJlZC1TdG9wOiAgICAgJHJlbW90ZV9mcworIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQgZGFlbW9uCisjIyMgRU5EIElOSVQgSU5GTworCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworUEFUSD0vYmluOi91c3IvYmluOi9zYmluOi91c3Ivc2JpbgorCitbIC1mIC9ldGMvZGVmYXVsdC9yY1MgXSAmJiAuIC9ldGMvZGVmYXVsdC9yY1MKK1sgLWYgL2V0Yy9kZWZhdWx0L2FwbWQgXSAmJiAuIC9ldGMvZGVmYXVsdC9hcG1kCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nIGFkdmFuY2VkIHBvd2VyIG1hbmFnZW1lbnQgZGFlbW9uOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLVMgLXggL3Vzci9zYmluL2FwbWQgLS0gXAorCQktUCAvZXRjL2FwbS9hcG1kX3Byb3h5ICRBUE1ECisJaWYgWyAkPyA9IDAgXTsgdGhlbgorCSAgICBlY2hvICJhcG1kLiIKKwllbHNlCisJICAgIGVjaG8gIihmYWlsZWQuKSIKKwlmaQorCTs7CisgICAgc3RvcCkKKwllY2hvIC1uICJTdG9wcGluZyBhZHZhbmNlZCBwb3dlciBtYW5hZ2VtZW50IGRhZW1vbjogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIFwKKwkJLXggL3Vzci9zYmluL2FwbWQKKwllY2hvICJhcG1kLiIKKwk7OworICAgIHN0YXR1cykKKwlzdGF0dXMgL3Vzci9zYmluL2FwbWQ7CisJZXhpdCAkPworCTs7CisgICAgcmVzdGFydHxmb3JjZS1yZWxvYWQpIAorCSQwIHN0b3AKKwkkMCBzdGFydAorCWV4aXQKKwk7OworICAgICopCisJZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL2FwbWQge3N0YXJ0fHN0b3B8c3RhdHVzfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvbGVnYWN5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9sZWdhY3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRiODk1ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvbGVnYWN5LnBhdGNoCkBAIC0wLDAgKzEsMTMzIEBACitGcm9tIDM1OTU5MzNkMjIxZjBiYTgzNjkxN2RlYmMwNzc2Yjg3MjM5NzJlYzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMTEgQXVnIDIwMTUgMTc6NDA6NTAgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzNdIFBhdGNoIHdpdGggZml4ZXMgcHJvdmlkZWQgYnkgRGViaWFuLgorCitUaGlzIHBhdGNoIGlzIHRha2VuIGZyb20KK2Z0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vYS9hcG1kL2FwbWRfMy4yLjItMTUuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AbGludXguaW50ZWwuY29tPgorCistLS0KKyBNYWtlZmlsZSB8ICAyICstCisgYXBtLmMgICAgfCAgMyArKy0KKyBhcG0uaCAgICB8ICA5ICsrKysrKysrKworIGFwbWQuYyAgIHwgMTUgKysrKysrKystLS0tLS0tCisgNCBmaWxlcyBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggYmYzNDZkOS4uOTJmYzBmZCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTQzLDcgKzQzLDcgQEAgREVTVERJUj0KKyAKKyBDQz1nY2MKKyBDRkxBR1M9LU8gLWcKKy1YVFJBQ0ZMQUdTPS1XYWxsIC1waXBlIC1JLiAtSS91c3Ivc3JjL2xpbnV4L2luY2x1ZGUgXAorK1hUUkFDRkxBR1M9LVdhbGwgLXBpcGUgLUkuIC1JL3Vzci9zcmMvbGludXgvaW5jbHVkZSAtSS91c3IvWDExUjYvaW5jbHVkZSBcCisgCQktSS91c3Ivc3JjL2xpbnV4LTIuMi9pbmNsdWRlIC1JIC91c3Ivc3JjL2xpbnV4LTIuMC9pbmNsdWRlIFwKKyAJCS1EVkVSU0lPTj1cIiQoVkVSU0lPTilcIiBcCisgCQktRERFRkFVTFRfUFJPWFlfTkFNRT1cIiQoUFJPWFlfRElSKS9hcG1kX3Byb3h5XCIKK2RpZmYgLS1naXQgYS9hcG0uYyBiL2FwbS5jCitpbmRleCBiMjFjMDU3Li4wMzU5YjFjIDEwMDY0NAorLS0tIGEvYXBtLmMKKysrKyBiL2FwbS5jCitAQCAtMjE5LDEyICsyMTksMTMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJfQorIAl9CisgCQkJCQkJCQkJCQkJCSAgICAKKy0KKysjaWYgMAorICAgICBpZiAoIShpLmFwbV9mbGFncyAmIEFQTV8zMl9CSVRfU1VQUE9SVCkpCisgICAgIHsKKyAJZnByaW50ZihzdGRlcnIsICIzMi1iaXQgQVBNIGludGVyZmFjZSBub3Qgc3VwcG9ydGVkXG4iKTsKKyAJZXhpdCgxKTsKKyAgICAgfQorKyNlbmRpZgorIAorICAgICBpZiAodmVyYm9zZSAmJiAoaS5hcG1fZmxhZ3MgJiAweDEwKSkKKyAJcHJpbnRmKCJBUE0gQklPUyBQb3dlciBNYW5hZ2VtZW50IGlzIGN1cnJlbnRseSBkaXNhYmxlZFxuIik7CitkaWZmIC0tZ2l0IGEvYXBtLmggYi9hcG0uaAoraW5kZXggZmIyNGRmZC4uODI0Y2MwNiAxMDA2NDQKKy0tLSBhL2FwbS5oCisrKysgYi9hcG0uaAorQEAgLTIwLDYgKzIwLDEzIEBACisgICogJElkOiBhcG0uaCx2IDEuNyAxOTk5LzA3LzA1IDIyOjMxOjExIGFwZW53YXJyIEV4cCAkCisgICogCisgICovCisrI2lmbmRlZiBfQVBNX0gKKysjZGVmaW5lIF9BUE1fSCAxCisrCisrI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKKysjZGVmaW5lIF9fS0VSTkVMX1NUUklDVF9OQU1FUworKyNlbmRpZgorKworICNpbmNsdWRlIDxsaW51eC9hcG1fYmlvcy5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAKK0BAIC05MywzICsxMDAsNSBAQCBleHRlcm4gaW50IGFwbV9yZWplY3QoaW50IGZkKTsKKyAjZWxzZQorICNkZWZpbmUgYXBtX3JlamVjdChmZCkgICAoLUVJTlZBTCkKKyAjZW5kaWYKKysKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9hcG1kLmMgYi9hcG1kLmMKK2luZGV4IDQ5ZWQzYTEuLjU2MGY1MzYgMTAwNjQ0CistLS0gYS9hcG1kLmMKKysrKyBiL2FwbWQuYworQEAgLTM0Myw3ICszNDMsNyBAQCBzdGF0aWMgaW50IGNhbGxfcHJveHkoYXBtX2V2ZW50X3QgZXZlbnQpCisgCQkvKiBwYXJlbnQgKi8KKyAJCWludCBzdGF0dXMsIHJldHZhbDsKKyAJCXNzaXplX3QgbGVuOworLQkJdGltZV90IHRpbWVfbGltaXQ7CisrCQl0aW1lX3QgY291bnRkb3duOworIAorIAkJaWYgKHBpZCA8IDApIHsKKyAJCQkvKiBDb3VsZG4ndCBmb3JrICovCitAQCAtMzU2LDggKzM1Niw5IEBAIHN0YXRpYyBpbnQgY2FsbF9wcm94eShhcG1fZXZlbnRfdCBldmVudCkKKyAJCS8qIENhcHR1cmUgdGhlIGNoaWxkJ3Mgb3V0cHV0LCBpZiBhbnksIGJ1dCBvbmx5IHVudGlsIGl0IHRlcm1pbmF0ZXMgKi8KKyAJCWNsb3NlKGZkc1sxXSk7CisgCQlmY250bChmZHNbMF0sIEZfU0VURkwsIE9fUkRPTkxZfE9fTk9OQkxPQ0spOworLQkJdGltZV9saW1pdCA9IHRpbWUoMCkgKyBwcm94eV90aW1lb3V0OworKwkJY291bnRkb3duID0gcHJveHlfdGltZW91dDsKKyAJCWRvIHsKKysJCQljb3VudGRvd24gLT0gMTsKKyAJCQl3aGlsZSAoKGxlbiA9IHJlYWQoZmRzWzBdLCBsaW5lLCBzaXplb2YobGluZSktMSkpID4gMCkgeworIAkJCQlsaW5lW2xlbl0gPSAwOworIAkJCQlBUE1EX1NZU0xPRyhMT0dfSU5GTywgIisgJXMiLCBsaW5lKTsKK0BAIC0zNzIsMTYgKzM3MywxNiBAQCBzdGF0aWMgaW50IGNhbGxfcHJveHkoYXBtX2V2ZW50X3QgZXZlbnQpCisgCQkJCWdvdG8gcHJveHlfZG9uZTsKKyAJCQl9CisgCQkJCQorLQkJCXNsZWVwKDEpOworKwkJCXdoaWxlIChzbGVlcCgxKSA+IDApIDsKKyAJCX0gd2hpbGUgKAorLQkJCSh0aW1lKDApIDwgdGltZV9saW1pdCkKKysJCQkoY291bnRkb3duID49IDApCisgCQkJfHwgKHByb3h5X3RpbWVvdXQgPCAwKQorIAkJKTsKKyAKKyAJCUFQTURfU1lTTE9HKExPR19OT1RJQ0UsICJQcm94eSBoYXMgYmVlbiBydW5uaW5nIG1vcmUgdGhhbiAlZCBzZWNvbmRzOyBraWxsaW5nIGl0IiwgcHJveHlfdGltZW91dCk7CisgCisgCQlraWxsKHBpZCwgU0lHVEVSTSk7CistCQl0aW1lX2xpbWl0ID0gdGltZSgwKSArIDU7CisrCQljb3VudGRvd24gPSA1OworIAkJZG8geworIAkJCXJldHZhbCA9IHdhaXRwaWQocGlkLCAmc3RhdHVzLCBXTk9IQU5HKTsKKyAJCQlpZiAocmV0dmFsID09IHBpZCkKK0BAIC0zOTIsOSArMzkzLDkgQEAgc3RhdGljIGludCBjYWxsX3Byb3h5KGFwbV9ldmVudF90IGV2ZW50KQorIAkJCQlnb3RvIHByb3h5X2RvbmU7CisgCQkJfQorIAorLQkJCXNsZWVwKDEpOworKwkJCXdoaWxlIChzbGVlcCgxKSA+IDApIDsKKyAKKy0JCX0gd2hpbGUgKHRpbWUoMCkgPCB0aW1lX2xpbWl0KTsKKysJCX0gd2hpbGUgKGNvdW50ZG93biA+PSAwKTsKKyAKKyAJCWtpbGwocGlkLCBTSUdLSUxMKTsKKyAJCXN0YXR1cyA9IF9fV19FWElUQ09ERSgwLCBTSUdLSUxMKTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9saWJ0b29sLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNGVlMDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2xpYnRvb2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorQWRkIGJ5IFJQIHRvIGFkZHJlc3MgInVuYWJsZSB0byBpbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiIgZXJyb3I6CisgICBjb21taXQgMzVkZTA1ZTYxYjg4YzA4MDhhNWU4ODViYjBlZmRmNDIwNTU1ZDVhZAorICAgQXV0aG9yOiBSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBycHN5cy5uZXQ+CisgICBEYXRlOiAgIFN1biBKdW4gMSAxNjoxMzozOCAyMDA4ICswMDAwCisKKyAgIGFwbWQ6IFVzZSBsaWJ0b29sIC0tdGFnIG9wdGlvbnMgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBsaWJ0b29sIDIuMi40IChmcm9tIHBva3kpCisKK0hvd2V2ZXIgSSBkaWRuJ3Qgc2VlIHNhbWUgaXNzdWUgd2l0aCBjdXJyZW50IGxpYnRvb2wtMi4yLjEwLiBBbHNvIHBlciBteSB1bmRlcnN0YW5kaW5nLAordGhlIGRlZmF1bHQgdGFnLCBpZiBub3Qgc3BlY2lmaWVkLCBmYWxscyBiYWNrIHRvIENDLiBTbyBkaXNhYmxlIGl0IGZyb20gcGF0Y2hpbmcsIGJ1dAora2VlcCBpdCBoZXJlLiBJZiB3ZSBlbmNvdW50ZXIgc2ltaWxhciBpc3N1ZSBpbiB0aGUgZnV0dXJlLCB3ZSBjb3VsZCB0aGVuIHB1c2ggdXBzdHJlYW0KKworQ29tbWVudCBhZGRlZCBieSBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4sIDIwMTAtMDctMTYKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitJbmRleDogYXBtZC0zLjIuMi5vcmlnL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXBtZC0zLjIuMi5vcmlnLm9yaWcvTWFrZWZpbGUJMjAwNC0wMS0wNCAwODoxMzoxOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBhcG1kLTMuMi4yLm9yaWcvTWFrZWZpbGUJMjAwOC0wNC0yMSAxNzoxMDowMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC01OCw5ICs1Nyw4IEBACisgI0NGTEFHUz0tTzMgLW00ODYgLWZvbWl0LWZyYW1lLXBvaW50ZXIKKyAjTERGTEFHUz0tcworIAorLUxJQlRPT0w9bGlidG9vbCAtLXF1aWV0CistTFRfQ09NUElMRSA9ICQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDQykKKy1MVF9MSU5LID0gJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENDKQorK0xUX0NPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpCisrTFRfTElOSyA9ICQoTElCVE9PTCkgIC0tdGFnPUNDIC0tbW9kZT1saW5rICQoQ0MpCisgTFRfSU5TVEFMTCA9ICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgaW5zdGFsbAorIExUX0NMRUFOID0gJChMSUJUT09MKSAtLW1vZGU9Y2xlYW4gcm0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvdW5saW51eC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvdW5saW51eC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzgyMDZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC91bmxpbnV4LnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK2NvcHkgT0UgY29tbWl0IG1lc3NhZ2UgaGVyZToKKyAgIGNvbW1pdCA5NDU2Y2RjMWNmNDNlM2JhOWU2ZDg4YzYzNTYwYzFiNmZkZWU0MzU5CisgICBBdXRob3I6IE1pY2hhZWwgS3JlbGluIDxoYWNrZXJAa2xldmVyLm5ldD4KKyAgIERhdGU6ICAgVHVlIE1heSAyOSAxMjoyNzo0NSAyMDA3ICswMDAwCisKKyAgIGFwbWQ6IHByZXZlbnQgYnVpbGQgZnJvbSBpbnRlcmZlcnJpbmcgd2l0aCBob3N0IGtlcm5lbCBoZWFkZXJzLiBDbG9zZXMgIzEyNTcKKworY29tbWVudCBhZGRlZCBieSBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4sIDIwMTAtMDctMTMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gYXBtZC0zLjIuMi5vcmlnL01ha2VmaWxlCisrKysgYXBtZC0zLjIuMi9NYWtlZmlsZQorQEAgLTQzLDggKzQzLDcgQEAKKyAKKyBDQz1nY2MKKyBDRkxBR1M9LU8gLWcKKy1YVFJBQ0ZMQUdTPS1XYWxsIC1waXBlIC1JLiAtSS91c3Ivc3JjL2xpbnV4L2luY2x1ZGUgLUkvdXNyL1gxMVI2L2luY2x1ZGUgXAorLQkJLUkvdXNyL3NyYy9saW51eC0yLjIvaW5jbHVkZSAtSSAvdXNyL3NyYy9saW51eC0yLjAvaW5jbHVkZSBcCisrWFRSQUNGTEFHUz0tV2FsbCAtcGlwZSAtSS4gXAorIAkJLURWRVJTSU9OPVwiJChWRVJTSU9OKVwiIFwKKyAJCS1EREVGQVVMVF9QUk9YWV9OQU1FPVwiJChQUk9YWV9ESVIpL2FwbWRfcHJveHlcIgorIExERkxBR1M9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kXzMuMi4yLTE1LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZF8zLjIuMi0xNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTEwNTI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZF8zLjIuMi0xNS5iYgpAQCAtMCwwICsxLDc2IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBmb3IgQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCIKK0RFU0NSSVBUSU9OID0gIlRoZSBBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50IChBUE0pIHN1cHBvcnQgcHJvdmlkZXMgXAorYWNjZXNzIHRvIGJhdHRlcnkgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBhIHNldCBvZiB0b29scyBmb3IgbWFuYWdpbmcgXAorbm90ZWJvb2sgcG93ZXIgY29uc3VtcHRpb24uIgorSE9NRVBBR0UgPSAiaHR0cDovL2FwZW53YXJyLmNhL2FwbWQvIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hcG0uaDtiZWdpbmxpbmU9NjtlbmRsaW5lPTE4O21kNT03ZDRhY2MxMjUwOTEwYTg5Zjg0Y2UzY2M2NTU3YzRjMiIKK0RFUEVORFMgPSAibGlidG9vbC1jcm9zcyIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vYS9hcG1kL2FwbWRfMy4yLjIub3JpZy50YXIuZ3o7bmFtZT10YXJiYWxsIFwKKyAgICAgICAgICAgZmlsZTovL2xlZ2FjeS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VubGludXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZhdWx0IFwKKyAgICAgICAgICAgZmlsZTovL2FwbWRfcHJveHkgXAorICAgICAgICAgICBmaWxlOi8vYXBtZF9wcm94eS5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2FwbWQuc2VydmljZSIKKworU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiYjFlNjMwOWU4MzMxZTBmNGU2ZWZkMzExYzJkOTdmYTgiCitTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICI3ZjdkOWY2MGI3NzY2Yjg1Mjg4MWQ0MGI4ZmY5MWQ4ZTM5ZmNjYjBkMWQ5MTMxMDJhNWM3NWEyZGJiNTIzMzJkIgorCitTID0gIiR7V09SS0RJUn0vYXBtZC0zLjIuMi5vcmlnIgorCitpbmhlcml0IHVwZGF0ZS1yYy5kIHN5c3RlbWQKKworSU5JVFNDUklQVF9OQU1FID0gImFwbWQiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImFwbWQuc2VydmljZSIKK1NZU1RFTURfQVVUT19FTkFCTEUgPSAiZGlzYWJsZSIKKworZG9fY29tcGlsZSgpIHsKKwkjIGFwbWQgZG9lc24ndCB1c2Ugd2hvbGUgYXV0b3Rvb2xzLiBKdXN0IGxpYnRvb2wgZm9yIGluc3RhbGxhdGlvbgorCW9lX3J1bm1ha2UgIkxJQlRPT0w9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30vJHtIT1NUX1NZU30tbGlidG9vbCIgYXBtIGFwbWQKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcG0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwbS9ldmVudC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcG0vb3RoZXIuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXBtL3N1c3BlbmQuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXBtL3Jlc3VtZS5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcG0vc2NyaXB0cy5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9hcG1kCisJaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfQorCisJaW5zdGFsbCAtbSA0NzU1ICR7U30vLmxpYnMvYXBtICR7RH0ke2JpbmRpcn0vYXBtCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vLmxpYnMvYXBtZCAke0R9JHtzYmluZGlyfS9hcG1kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYXBtZF9wcm94eSAke0R9JHtzeXNjb25mZGlyfS9hcG0vCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYXBtZF9wcm94eS5jb25mICR7RH0ke2RhdGFkaXJ9L2FwbWQvCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGVmYXVsdCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2FwbWQKKwlvZV9saWJpbnN0YWxsIC1zbyBsaWJhcG0gJHtEfSR7bGliZGlyfQorCWluc3RhbGwgLW0gMDY0NCBhcG0uaCAke0R9JHtpbmNsdWRlZGlyfQorCisJc2VkIC1lICdzLC91c3Ivc2Jpbiwke3NiaW5kaXJ9LGc7IHMsL2V0Yywke3N5c2NvbmZkaXJ9LGc7JyAke1dPUktESVJ9L2luaXQgPiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvYXBtZAorCWNobW9kIDc1NSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvYXBtZAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2FwbWQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwlzZWQgLWkgLWUgJ3MsQFNZU0NPTkZESVJALCR7c3lzY29uZmRpcn0sZycgXAorCQktZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9hcG1kLnNlcnZpY2UKK30KKworUEFDS0FHRVMgPSsgImxpYmFwbSBhcG0iCisKK0ZJTEVTX2xpYmFwbSA9ICIke2xpYmRpcn0vbGliYXBtJHtTT0xJQlN9IgorRklMRVNfYXBtID0gIiR7YmluZGlyfS9hcG0qIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZWVlLWFjcGktc2NyaXB0c19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9lZWUtYWNwaS1zY3JpcHRzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmEwMmFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZWVlLWFjcGktc2NyaXB0c19naXQuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJlZWVQQyBzcGVjaWZpYyBBQ1BJIHNjcmlwdHMiCitIT01FUEFHRSA9ICJodHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvcHJvamVjdHMvZGViaWFuLWVlZXBjLyIKK1NFQ1RJT04gPSAiYmFzZSIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PTc3ZWY4M2FiNWY0YWY5MzhhOTNlZGI2MWY3Yjc0ZjJjIgorCitTUkNSRVYgPSAiOWQ0Y2RlZGNhMjViMzk2NDA1Zjg1ODdmOWM0ZmJmODIyOWUwNDFjMiIKK1BWID0gIjEuMS4xMitnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZGViaWFuLm9yZy9naXQvZGViaWFuLWVlZXBjL2VlZXBjLWFjcGktc2NyaXB0cy5naXQgXAorCSAgIGZpbGU6Ly9yZW1vdmUtZG9jLWNoZWNrLnBhdGNoIFwKKwkgICBmaWxlOi8vcG93ZXJidG4ucGF0Y2ggXAorCSAgIGZpbGU6Ly9wb2xpY3ktZnVuY3MgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitGSUxFU18ke1BOfSA9ICIke2RhdGFkaXJ9L2FjcGktc3VwcG9ydC8gXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9lZWVwYy1hY3BpLXNjcmlwdHMgXAorICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9kZWZhdWx0LyBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2FjcGkvIgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hY3BpL2FjdGlvbnMvCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hY3BpL2V2ZW50cy8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FjcGkvbGliL3VkZXYvcnVsZXMuZAorCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZWVlcGMtYWNwaS1zY3JpcHRzLworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vYWNwaS1zdXBwb3J0LworCWluc3RhbGwgLW0gNjQ0ICR7U30vZXZlbnRzLyogJHtEfSR7c3lzY29uZmRpcn0vYWNwaS9ldmVudHMvCisJaW5zdGFsbCAtbSA2NDQgJHtTfS9saWIvdWRldi9ydWxlcy5kLyogJHtEfSR7c3lzY29uZmRpcn0vYWNwaS9saWIvdWRldi9ydWxlcy5kLworCWluc3RhbGwgJHtTfS9hY3Rpb25zLyogJHtEfSR7c3lzY29uZmRpcn0vYWNwaS9hY3Rpb25zLworCWluc3RhbGwgLW0gMDY0NCAke1N9L2FjcGlsaWIvZnVuY3Rpb25zLnNoICR7RH0ke2RhdGFkaXJ9L2VlZXBjLWFjcGktc2NyaXB0cy8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wb2xpY3ktZnVuY3MgJHtEfSR7ZGF0YWRpcn0vYWNwaS1zdXBwb3J0LworCWluc3RhbGwgLW0gMDY0NCAke1N9L2RlYmlhbi9lZWVwYy1hY3BpLXNjcmlwdHMuZGVmYXVsdCogJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC8KK30KKworUkRFUEVORFNfJHtQTn0gPSAicG0tdXRpbHMiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2ZpbGVzL3BvbGljeS1mdW5jcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2ZpbGVzL3BvbGljeS1mdW5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDA5OWRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZmlsZXMvcG9saWN5LWZ1bmNzCkBAIC0wLDAgKzEsOCBAQAorQ2hlY2tQb2xpY3koKSB7CisJaWYgcGlkb2YgZ25vbWUtcG93ZXItbWFuYWdlciBrcG93ZXJzYXZlID4gL2Rldi9udWxsIHx8CisJICAgKHBpZG9mIGRjb3BzZXJ2ZXIgPiAvZGV2L251bGwgJiYgdGVzdCAteCAvdXNyL2Jpbi9kY29wICYmIC91c3IvYmluL2Rjb3Aga2RlZCBrZGVkIGxvYWRlZE1vZHVsZXMgfCBncmVwIC1xIGtsYXB0b3BkYWVtb24pIDsgdGhlbgorCQllY2hvIDA7CisJZWxzZQorCQllY2hvIDE7CisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2ZpbGVzL3Bvd2VyYnRuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZmlsZXMvcG93ZXJidG4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAzZTU1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2ZpbGVzL3Bvd2VyYnRuLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKKy0tLQorIGFjdGlvbnMvcG93ZXIuc2ggfCAgICAzICsrKworIGV2ZW50cy9wb3dlcmJ0biAgfCAgICAyICsrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbmFibGUgZmVhdHVyZV0KKworSW5kZXg6IGdpdC9ldmVudHMvcG93ZXJidG4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnaXQvZXZlbnRzL3Bvd2VyYnRuCTIwMDgtMTAtMDggMTc6NDM6MzUuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDIgQEAKKytldmVudD1idXR0b24vcG93ZXIgUFdSRgorK2FjdGlvbj0vZXRjL2FjcGkvYWN0aW9ucy9wb3dlci5zaAorSW5kZXg6IGdpdC9hY3Rpb25zL3Bvd2VyLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2l0L2FjdGlvbnMvcG93ZXIuc2gJMjAwOC0xMC0wOCAxNzo0NToyNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMyBAQAorKyMhL2Jpbi9zaAorKworKy9zYmluL3NodXRkb3duIC1oIG5vdyAiUG93ZXIgYnV0dG9uIHByZXNzZWQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9maWxlcy9yZW1vdmUtZG9jLWNoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZmlsZXMvcmVtb3ZlLWRvYy1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmIzZGNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZmlsZXMvcmVtb3ZlLWRvYy1jaGVjay5wYXRjaApAQCAtMCwwICsxLDYwIEBACistLS0KKyBhY3Rpb25zL2hvdGtleS5zaCAgICAgfCAgICAzIC0tLQorIGFjdGlvbnMvc3VzcGVuZC5zaCAgICB8ICAgIDMgLS0tCisgYWN0aW9ucy92Z2EtdG9nZ2xlLnNoIHwgICAgMyAtLS0KKyBhY3Rpb25zL3ZvbHVtZS5zaCAgICAgfCAgICAzIC0tLQorIDQgZmlsZXMgY2hhbmdlZCwgMTIgZGVsZXRpb25zKC0pCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGdpdC9lZWVwYy1hY3BpLXNjcmlwdHMvdm9sdW1lLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZWVlcGMtYWNwaS1zY3JpcHRzL3ZvbHVtZS5zaAkyMDExLTExLTI5IDE5OjIxOjU1LjAwMDAwMDAwMCArMDgwMAorKysrIGdpdC9lZWVwYy1hY3BpLXNjcmlwdHMvdm9sdW1lLnNoCTIwMTEtMTEtMjkgMTk6NDE6MzYuMDAwMDAwMDAwICswODAwCitAQCAtMywxMiArMywxMCBAQAorIFsgLWQgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2VlZXBjIF0gfHwgWyAtZCAvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMtd21pIF0gfHwgZXhpdCAwCisgIyBWb2x1bWUgY29udHJvbHMKKyAKKy0jIGRvIG5vdGhpbmcgaWYgcGFja2FnZSBpcyByZW1vdmVkCisgUEtHPWVlZXBjLWFjcGktc2NyaXB0cworIFBLR19ESVI9L3Vzci9zaGFyZS9hY3BpLXN1cHBvcnQvJFBLRworIEZVTkNfTElCPSRQS0dfRElSL2xpYi9mdW5jdGlvbnMuc2gKKyBERUZBVUxUPS9ldGMvZGVmYXVsdC8kUEtHCistWyAtZSAiJEZVTkNfTElCIiBdIHx8IGV4aXQgMAorIAorIC4gJEZVTkNfTElCCisgLiAkUEtHX0RJUi9saWIvc291bmQuc2gKK0luZGV4OiBnaXQvZWVlcGMtYWNwaS1zY3JpcHRzL2hvdGtleS5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2VlZXBjLWFjcGktc2NyaXB0cy9ob3RrZXkuc2gJMjAxMS0xMS0yOSAxOToyMTo1NS4wMDAwMDAwMDAgKzA4MDAKKysrKyBnaXQvZWVlcGMtYWNwaS1zY3JpcHRzL2hvdGtleS5zaAkyMDExLTExLTI5IDE5OjM5OjUxLjAwMDAwMDAwMCArMDgwMAorQEAgLTEsMTIgKzEsMTAgQEAKKyAjIS9iaW4vc2gKKyAKKyBbIC1kIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYyBdIHx8IFsgLWQgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2VlZXBjLXdtaSBdIHx8IGV4aXQgMAorLSMgZG8gbm90aGluZyBpZiBwYWNrYWdlIGlzIHJlbW92ZWQKKyBQS0c9ZWVlcGMtYWNwaS1zY3JpcHRzCisgUEtHX0RJUj0vdXNyL3NoYXJlL2FjcGktc3VwcG9ydC8kUEtHCisgRlVOQ19MSUI9JFBLR19ESVIvbGliL2Z1bmN0aW9ucy5zaAorIERFRkFVTFQ9L2V0Yy9kZWZhdWx0LyRQS0cKKy1bIC1lICIkRlVOQ19MSUIiIF0gfHwgZXhpdCAwCisgCisgY2FzZSAkKHJ1bmxldmVsKSBpbgorICAgICAqMHwqNikKK0luZGV4OiBnaXQvZWVlcGMtYWNwaS1zY3JpcHRzL3ZnYS10b2dnbGUuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9lZWVwYy1hY3BpLXNjcmlwdHMvdmdhLXRvZ2dsZS5zaAkyMDExLTExLTI5IDE5OjIxOjU1LjAwMDAwMDAwMCArMDgwMAorKysrIGdpdC9lZWVwYy1hY3BpLXNjcmlwdHMvdmdhLXRvZ2dsZS5zaAkyMDExLTExLTI5IDE5OjQwOjI0LjAwMDAwMDAwMCArMDgwMAorQEAgLTEsMTIgKzEsMTAgQEAKKyAjIS9iaW4vc2gKKyAKKyBbIC1kIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYyBdIHx8IFsgLWQgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2VlZXBjLXdtaSBdIHx8IGV4aXQgMAorLSMgZG8gbm90aGluZyBpZiBwYWNrYWdlIGlzIHJlbW92ZWQKKyBQS0c9ZWVlcGMtYWNwaS1zY3JpcHRzCisgUEtHX0RJUj0vdXNyL3NoYXJlL2FjcGktc3VwcG9ydC8kUEtHCisgRlVOQ19MSUI9JFBLR19ESVIvbGliL2Z1bmN0aW9ucy5zaAorIERFRkFVTFQ9L2V0Yy9kZWZhdWx0LyRQS0cKKy1bIC1lICIkRlVOQ19MSUIiIF0gfHwgZXhpdCAwCisgCisgaWYgWyAtZSAiJERFRkFVTFQiIF07IHRoZW4gLiAiJERFRkFVTFQiOyBmaQorIC4gJEZVTkNfTElCCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9jb25maWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDEwNjZkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL2NvbmZpZwpAQCAtMCwwICsxLDUwIEBACisjIS9iaW4vc2gKKworaWYgWyAtZSAvZXRjL2Zvcm1mYWN0b3IvbWFjaGNvbmZpZyBdOyB0aGVuCisgICAgLiAvZXRjL2Zvcm1mYWN0b3IvbWFjaGNvbmZpZworZmkKKworaWYgWyAteiAiJEhBVkVfVE9VQ0hTQ1JFRU4iIF07IHRoZW4KKyAgICBIQVZFX1RPVUNIU0NSRUVOPTAKK2ZpCisKK2lmIFsgLXogIiRIQVZFX0tFWUJPQVJEIiBdOyB0aGVuCisgICAgSEFWRV9LRVlCT0FSRD0wCitmaQorCitpZiBbIC16ICIkSEFWRV9LRVlCT0FSRF9QT1JUUkFJVCIgXTsgdGhlbgorICAgIEhBVkVfS0VZQk9BUkRfUE9SVFJBSVQ9MAorZmkKKworaWYgWyAteiAiJEhBVkVfS0VZQk9BUkRfTEFORFNDQVBFIiBdOyB0aGVuCisgICAgSEFWRV9LRVlCT0FSRF9MQU5EU0NBUEU9MAorZmkKKworaWYgWyAteiAiJERJU1BMQVlfQ0FOX1JPVEFURSIgXTsgdGhlbgorICAgIERJU1BMQVlfQ0FOX1JPVEFURT0wCitmaQorCitpZiBbIC16ICIkRElTUExBWV9PUklFTlRBVElPTiIgXTsgdGhlbgorICAgIERJU1BMQVlfT1JJRU5UQVRJT049MAorZmkKKworaWYgWyAtZSAiL2Rldi9mYiIgXTsgdGhlbgorICAgIGlmIFsgLXogIiRESVNQTEFZX1dJRFRIX1BJWEVMUyIgXTsgdGhlbgorICAgICAgICBESVNQTEFZX1dJRFRIX1BJWEVMUz1gL3Vzci9zYmluL2Zic2V0IHwgZ3JlcCBnZW9tZXRyeSB8IGF3ayAneyBwcmludCAkMiB9J2AKKyAgICBmaQorCisgICAgaWYgWyAteiAiJERJU1BMQVlfSEVJR0hUX1BJWEVMUyIgXTsgdGhlbgorICAgICAgICBESVNQTEFZX0hFSUdIVF9QSVhFTFM9YC91c3Ivc2Jpbi9mYnNldCB8IGdyZXAgZ2VvbWV0cnkgfCBhd2sgJ3sgcHJpbnQgJDMgfSdgCisgICAgZmkKKworICAgIGlmIFsgLXogIiRESVNQTEFZX0JQUCIgXTsgdGhlbgorICAgICAgICBESVNQTEFZX0JQUD1gL3Vzci9zYmluL2Zic2V0IHwgZ3JlcCBnZW9tZXRyeSB8IGF3ayAneyBwcmludCAkNiB9J2AKKyAgICBmaQorZmkKKworIyAKKyMgTm8gd2F5IHRvIGd1ZXNzIHRoZXNlIG9yIGhhdmUgYW55IGRlZmF1bHRzCisjCisjRElTUExBWV9XSURUSF9NTQorI0RJU1BMQVlfSEVJR0hUX01NCisjRElTUExBWV9TVUJQSVhFTF9PUkRFUj0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL21hY2hjb25maWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9tYWNoY29uZmlnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11YXJtL21hY2hjb25maWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11YXJtL21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTZhMmFlMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVhcm0vbWFjaGNvbmZpZwpAQCAtMCwwICsxLDEwIEBACitIQVZFX1RPVUNIU0NSRUVOPTEKK0hBVkVfS0VZQk9BUkQ9MQorIAorRElTUExBWV9DQU5fUk9UQVRFPTAKK0RJU1BMQVlfT1JJRU5UQVRJT049MAorI0RJU1BMQVlfV0lEVEhfUElYRUxTPTY0MAorI0RJU1BMQVlfSEVJR0hUX1BJWEVMUz00ODAKKyNESVNQTEFZX0JQUD0xNgorRElTUExBWV9EUEk9MTUwCitESVNQTEFZX1NVQlBJWEVMX09SREVSPXZyZ2IKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVhcm12Ni9tYWNoY29uZmlnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybXY2L21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTZhMmFlMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVhcm12Ni9tYWNoY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MQorSEFWRV9LRVlCT0FSRD0xCisgCitESVNQTEFZX0NBTl9ST1RBVEU9MAorRElTUExBWV9PUklFTlRBVElPTj0wCisjRElTUExBWV9XSURUSF9QSVhFTFM9NjQwCisjRElTUExBWV9IRUlHSFRfUElYRUxTPTQ4MAorI0RJU1BMQVlfQlBQPTE2CitESVNQTEFZX0RQST0xNTAKK0RJU1BMQVlfU1VCUElYRUxfT1JERVI9dnJnYgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybXY3L21hY2hjb25maWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11YXJtdjcvbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NmEyYWUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybXY3L21hY2hjb25maWcKQEAgLTAsMCArMSwxMCBAQAorSEFWRV9UT1VDSFNDUkVFTj0xCitIQVZFX0tFWUJPQVJEPTEKKyAKK0RJU1BMQVlfQ0FOX1JPVEFURT0wCitESVNQTEFZX09SSUVOVEFUSU9OPTAKKyNESVNQTEFZX1dJRFRIX1BJWEVMUz02NDAKKyNESVNQTEFZX0hFSUdIVF9QSVhFTFM9NDgwCisjRElTUExBWV9CUFA9MTYKK0RJU1BMQVlfRFBJPTE1MAorRElTUExBWV9TVUJQSVhFTF9PUkRFUj12cmdiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11bWlwcy9tYWNoY29uZmlnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdW1pcHMvbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41Njc3N2I2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdW1pcHMvbWFjaGNvbmZpZwpAQCAtMCwwICsxLDEwIEBACitIQVZFX1RPVUNIU0NSRUVOPTEKK0hBVkVfS0VZQk9BUkQ9MQorIAorRElTUExBWV9DQU5fUk9UQVRFPTAKK0RJU1BMQVlfT1JJRU5UQVRJT049MAorRElTUExBWV9XSURUSF9QSVhFTFM9NjQwCitESVNQTEFZX0hFSUdIVF9QSVhFTFM9NDgwCitESVNQTEFZX0JQUD0xNgorRElTUExBWV9EUEk9MTUwCisjRElTUExBWV9TVUJQSVhFTF9PUkRFUj12cmdiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11cHBjL21hY2hjb25maWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11cHBjL21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWVhMjI3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVwcGMvbWFjaGNvbmZpZwpAQCAtMCwwICsxLDEwIEBACitIQVZFX1RPVUNIU0NSRUVOPTEKK0hBVkVfS0VZQk9BUkQ9MQorIAorRElTUExBWV9DQU5fUk9UQVRFPTAKK0RJU1BMQVlfT1JJRU5UQVRJT049MAorRElTUExBWV9XSURUSF9QSVhFTFM9ODAwCitESVNQTEFZX0hFSUdIVF9QSVhFTFM9NjAwCitESVNQTEFZX0JQUD0xNgorRElTUExBWV9EUEk9MTUwCitESVNQTEFZX1NVQlBJWEVMX09SREVSPXZyZ2IKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXV4ODYtNjQvbWFjaGNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXV4ODYtNjQvbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NmEyYWUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdXg4Ni02NC9tYWNoY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MQorSEFWRV9LRVlCT0FSRD0xCisgCitESVNQTEFZX0NBTl9ST1RBVEU9MAorRElTUExBWV9PUklFTlRBVElPTj0wCisjRElTUExBWV9XSURUSF9QSVhFTFM9NjQwCisjRElTUExBWV9IRUlHSFRfUElYRUxTPTQ4MAorI0RJU1BMQVlfQlBQPTE2CitESVNQTEFZX0RQST0xNTAKK0RJU1BMQVlfU1VCUElYRUxfT1JERVI9dnJnYgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdXg4Ni9tYWNoY29uZmlnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdXg4Ni9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2YTJhZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11eDg2L21hY2hjb25maWcKQEAgLTAsMCArMSwxMCBAQAorSEFWRV9UT1VDSFNDUkVFTj0xCitIQVZFX0tFWUJPQVJEPTEKKyAKK0RJU1BMQVlfQ0FOX1JPVEFURT0wCitESVNQTEFZX09SSUVOVEFUSU9OPTAKKyNESVNQTEFZX1dJRFRIX1BJWEVMUz02NDAKKyNESVNQTEFZX0hFSUdIVF9QSVhFTFM9NDgwCisjRElTUExBWV9CUFA9MTYKK0RJU1BMQVlfRFBJPTE1MAorRElTUExBWV9TVUJQSVhFTF9PUkRFUj12cmdiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yXzAuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMzBiZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yXzAuMC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkRldmljZSBmb3JtZmFjdG9yIGluZm9ybWF0aW9uIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1BSID0gInI0NSIKKworU1JDX1VSSSA9ICJmaWxlOi8vY29uZmlnIGZpbGU6Ly9tYWNoY29uZmlnIgorUyA9ICIke1dPUktESVJ9IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworZG9faW5zdGFsbCgpIHsKKwkjIEluc3RhbGwgZmlsZSBvbmx5IGlmIGl0IGhhcyBjb250ZW50cworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2Zvcm1mYWN0b3IvCisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L2NvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9mb3JtZmFjdG9yLworCWlmIFsgLXMgIiR7U30vbWFjaGNvbmZpZyIgXTsgdGhlbgorCSAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vbWFjaGNvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9mb3JtZmFjdG9yLworCWZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL2dudS1lZmktTWFrZS1zZXRqbXAuUy1wb3J0YWJsZS10by1BUk0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL2dudS1lZmktTWFrZS1zZXRqbXAuUy1wb3J0YWJsZS10by1BUk0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VkMTI4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvZ251LWVmaS1NYWtlLXNldGptcC5TLXBvcnRhYmxlLXRvLUFSTS5wYXRjaApAQCAtMCwwICsxLDUwIEBACitGcm9tIDhhMzU2ZDRiNmEyNDJjZTYzYjczOTIwZDNlZDMzZjg4ZjllMTJmZTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IFN1biwgNiBTZXAgMjAxNSAwNToyMDo0MyAtMDQwMAorU3ViamVjdDogW1BBVENIXSBnbnUtZWZpOiBNYWtlIHNldGptcC5TIHBvcnRhYmxlIHRvIEFSTQorCitUaGlzIHBhdGNoIGZpeGVzIHRoZSBmb2xsb3dpbmcgZXJyb3I6CisKKyAgLi4uL2xpYi9hcm0vc2V0am1wLlM6MTg6IEVycm9yOiB1bnJlY29nbml6ZWQgc3ltYm9sIHR5cGUgIiIKKyAgLi4uL2xpYi9hcm0vc2V0am1wLlM6MjY6IEVycm9yOiB1bnJlY29nbml6ZWQgc3ltYm9sIHR5cGUgIiIKKworVGhlIHByb2JsZW0gaXMgdGhlIGFzc2VtYmx5IHN5bnRheCB0aGF0IGlzIHVzZWQgaXMgbm90IHBvcnRhYmxlIHRvIEFSTSwKK3doZXJlIHRoZSAnQCcgc3ltYm9sIGlzIGEgY29tbWVudDoKKworICA+IE5vdGUgb24gdGFyZ2V0cyB3aGVyZSB0aGUgQCBjaGFyYWN0ZXIgaXMgdGhlIHN0YXJ0IG9mIGEgY29tbWVudAorICA+IChlZyBBUk0pIHRoZW4gYW5vdGhlciBjaGFyYWN0ZXIgaXMgdXNlZCBpbnN0ZWFkLiBGb3IgZXhhbXBsZSB0aGUKKyAgPiBBUk0gcG9ydCB1c2VzIHRoZSAlIGNoYXJhY3Rlci4KKworKEZyb20gaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9iaW51dGlscy9kb2NzLTIuMjUvYXMvU2VjdGlvbi5odG1sI1NlY3Rpb24pCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYi9hcm0vc2V0am1wLlMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2FybS9zZXRqbXAuUyBiL2xpYi9hcm0vc2V0am1wLlMKK2luZGV4IDZlM2ZiZjAuLjg1Yzg3MDUgMTAwNjQ0CistLS0gYS9saWIvYXJtL3NldGptcC5TCisrKysgYi9saWIvYXJtL3NldGptcC5TCitAQCAtMTUsNyArMTUsNyBAQCBCQVNJUywKKyAJLnRleHQKKyAJLmFybQorIAkuZ2xvYmwJc2V0am1wCistCS50eXBlCXNldGptcCwgQGZ1bmN0aW9uCisrCS50eXBlCXNldGptcCwgJWZ1bmN0aW9uCisgc2V0am1wOgorIAltb3YJcjMsIHIxMworIAlzdG1pYQlyMCwge3IzLXIxMixyMTR9CitAQCAtMjMsNiArMjMsNiBAQCBzZXRqbXA6CisgCWJ4CWxyCisgCisgCS5nbG9ibAlsb25nam1wCistCS50eXBlCWxvbmdqbXAsIEBmdW5jdGlvbgorKwkudHlwZQlsb25nam1wLCAlZnVuY3Rpb24KKyBsb25nam1wOgorIAlsZG1pYQlyMCwge3IzLXIxMixyMTR9CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvbGliLU1ha2VmaWxlLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvbGliLU1ha2VmaWxlLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjJhZTFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9saWItTWFrZWZpbGUtZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gMGRhYTM1NGExNmFhM2NhZGU1NmVkNDIzZDBmOGEwNGNmMWMyMmY5ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAyMyBBcHIgMjAxNSAwMTo0OTozMSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBsaWIvTWFrZWZpbGU6IGZpeCBwYXJhbGxlbCBpc3N1ZQorCitGaXhlZDoKK0Fzc2VtYmxlciBtZXNzYWdlczoKK0ZhdGFsIGVycm9yOiBjYW4ndCBjcmVhdGUgcnVudGltZS9ydGxvY2subzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorQXNzZW1ibGVyIG1lc3NhZ2VzOgorRmF0YWwgZXJyb3I6IGNhbid0IGNyZWF0ZSBydW50aW1lL3J0ZGF0YS5vOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitBc3NlbWJsZXIgbWVzc2FnZXM6CitGYXRhbCBlcnJvcjogY2FuJ3QgY3JlYXRlIHJ1bnRpbWUvdm0ubzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorQXNzZW1ibGVyIG1lc3NhZ2VzOgorRmF0YWwgZXJyb3I6IGNhbid0IGNyZWF0ZSBydW50aW1lL2VmaXJ0bGliLm86IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGliL01ha2VmaWxlIHwgICAgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQoraW5kZXggZGM0Yjk0YS4uZjY0ZDFlZCAxMDA2NDQKKy0tLSBhL2xpYi9NYWtlZmlsZQorKysrIGIvbGliL01ha2VmaWxlCitAQCAtNzMsNiArNzMsOCBAQCBhbGw6IGxpYnN1YmRpcnMgbGliZWZpLmEKKyBsaWJzdWJkaXJzOgorIAlmb3Igc2RpciBpbiAkKFNVQkRJUlMpOyBkbyBta2RpciAtcCAkJHNkaXI7IGRvbmUKKyAKKyskKE9CSlMpOiBsaWJzdWJkaXJzCisrCisgbGliZWZpLmE6ICQoT0JKUykKKyAJJChBUikgcnYgJEAgJChPQkpTKQorIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvcGFyYWxsZWwtbWFrZS1hcmNoaXZlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvcGFyYWxsZWwtbWFrZS1hcmNoaXZlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWI0N2MxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9wYXJhbGxlbC1tYWtlLWFyY2hpdmVzLnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK0ZpeCBwYXJhbGxlbCBtYWtlIGZhaWx1cmUgZm9yIGFyY2hpdmVzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGUgbGliIGFuZCBnbnVlZmkgbWFrZWZpbGVzIHdlcmUgdXNpbmcgdGhlIGxpYi5hKCkgZm9ybSB3aGljaCBjb21waWxlcworYW5kIGFyJ3MgYXMgYSBwYWlyIGluc3RlYWQgb2YgY29tcGlsaW5nIGFsbCBhbmQgdGhlbiBhcidpbmcgd2hpY2ggY2FuCitwYXJhbGxlbGl6ZSBiZXR0ZXIuIFRoaXMgd2FzIHJlc3VsdGluZyBpbiBidWlsZCBmYWlsdXJlcyBvbiBsYXJnZXIgdmFsdWVzCitvZiAtai4KKworU2VlIGh0dHA6Ly93d3cuY2hlbWllLmZ1LWJlcmxpbi5kZS9jaGVtbmV0L3VzZS9pbmZvL21ha2UvbWFrZV90b2MuaHRtbCNUT0MxMDUKK2ZvciBkZXRhaWxzLgorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorLS0tCisgZ251ZWZpL01ha2VmaWxlIHwgICAgMyArKy0KKyBsaWIvTWFrZWZpbGUgICAgfCAgICAzICsrLQorIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDogZ251LWVmaS0zLjAvbGliL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251LWVmaS0zLjAub3JpZy9saWIvTWFrZWZpbGUKKysrKyBnbnUtZWZpLTMuMC9saWIvTWFrZWZpbGUKK0BAIC02Niw3ICs2Niw4IEBAIGFsbDogbGlic3ViZGlycyBsaWJlZmkuYQorIGxpYnN1YmRpcnM6CisgCWZvciBzZGlyIGluICQoU1VCRElSUyk7IGRvIG1rZGlyIC1wICQkc2RpcjsgZG9uZQorIAorLWxpYmVmaS5hOiAkKHBhdHN1YnN0ICUsbGliZWZpLmEoJSksJChPQkpTKSkKKytsaWJlZmkuYTogJChPQkpTKQorKwkkKEFSKSBydiAkQCAkKE9CSlMpCisgCisgY2xlYW46CisgCXJtIC1mIGxpYmVmaS5hICp+ICQoT0JKUykgKi8qLm8KK0luZGV4OiBnbnUtZWZpLTMuMC9nbnVlZmkvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnUtZWZpLTMuMC5vcmlnL2dudWVmaS9NYWtlZmlsZQorKysrIGdudS1lZmktMy4wL2dudWVmaS9NYWtlZmlsZQorQEAgLTUxLDcgKzUxLDggQEAgVEFSR0VUUwk9IGNydDAtZWZpLSQoQVJDSCkubyBsaWJnbnVlZmkuYQorIAorIGFsbDoJJChUQVJHRVRTKQorIAorLWxpYmdudWVmaS5hOiAkKHBhdHN1YnN0ICUsbGliZ251ZWZpLmEoJSksJChPQkpTKSkKKytsaWJnbnVlZmkuYTogJChPQkpTKQorKwkkKEFSKSBydiAkQCAkKE9CSlMpCisgCisgY2xlYW46CisgCXJtIC1mICQoVEFSR0VUUykgKn4gKi5vICQoT0JKUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmlfMy4wLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpXzMuMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMWJhNDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpXzMuMC4zLmJiCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiTGlicmFyaWVzIGZvciBwcm9kdWNpbmcgRUZJIGJpbmFyaWVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9nbnUtZWZpLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyKyB8IEJTRC0yLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2dudWVmaS9jcnQwLWVmaS1hcm0uUztiZWdpbmxpbmU9NDtlbmRsaW5lPTk7bWQ1PTIyNDBkN2JiZGYwOTI4Mjk0YzJmNGE2OGIxNGQ2NTkxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dudWVmaS9jcnQwLWVmaS1hYXJjaDY0LlM7YmVnaW5saW5lPTQ7ZW5kbGluZT0xNjttZDU9ZTU4Mjc2NGE0Nzc2ZTYwYzk1YmY5YWI2MTczNDNkMzYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jL2VmaXNoZWxsaW50Zi5oO2JlZ2lubGluZT0xMztlbmRsaW5lPTIwO21kNT0yMDI3NjZiNzlkNzA4ZWZmM2NjNzBmY2UxNWZiODBjNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmMvZWZpc2hlbGxwYXJtLmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0xMTttZDU9NDY4YjEyMzFiMDViYmM4NGJhZTNhMGQ1Nzc0ZTNiYjUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FybS9kaXY2NC5TO2JlZ2lubGluZT02O2VuZGxpbmU9MTI7bWQ1PWE5NmM4NGY1YWQxMmI0ZjAxMWY5OGI1ZDAzOTI0MmYyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9hcm0vbWF0aC5jO2JlZ2lubGluZT00O2VuZGxpbmU9MTA7bWQ1PTY0ZGQxOTg3Y2VlMWRjZjU5ZDExYWE1NzJjZmE2NDRlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9hcm0vaW5pdHBsYXQuYztiZWdpbmxpbmU9NDtlbmRsaW5lPTEwO21kNT02NGRkMTk4N2NlZTFkY2Y1OWQxMWFhNTcyY2ZhNjQ0ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvYXJtL2xpYjFmdW5jcy5TO2JlZ2lubGluZT05O2VuZGxpbmU9MzM7bWQ1PWY1NmQ1ZWJiYzg3MTM2YmM2NmNmZTI0ZGI4MmJjZjAxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9hYXJjaDY0L21hdGguYztiZWdpbmxpbmU9OTtlbmRsaW5lPTMzO21kNT1jZmFkZTRjNTYwZTAzM2E3YmIwMmRhYjI4Mjg3MmM3ZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvYWFyY2g2NC9pbml0cGxhdC5jO2JlZ2lubGluZT05O2VuZGxpbmU9MzM7bWQ1PTkwMGNiMWZmYmUzZTFkZWQzNDQxMDJiZTkyMTgzMGYxIFwKKyAgICAgICAgICAgICAgICAgICAiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9LyR7QlBOfS8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3BhcmFsbGVsLW1ha2UtYXJjaGl2ZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGliLU1ha2VmaWxlLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nbnUtZWZpLU1ha2Utc2V0am1wLlMtcG9ydGFibGUtdG8tQVJNLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNWE0YmNiYzE4YTlhNWU4MTEwZWQ5NTU5NzA2MjJlNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNTMwZjIxYTE1ZmQ5YzIxNGRkOTJkMjlhNmNhYTIwZmFjOTg5Mjg5MjY3NTEyMDIwYjZkYTFmNWU2ZjViNGNiIgorCitDT01QQVRJQkxFX0hPU1QgPSAiKHg4Nl82NC4qfGkuODYuKnxhYXJjaDY0Lip8YXJtLiopLWxpbnV4IgorCitkZWYgZ251X2VmaV9hcmNoKGQpOgorICAgIGltcG9ydCByZQorICAgIHRhcmNoID0gZC5nZXRWYXIoIlRBUkdFVF9BUkNIIiwgVHJ1ZSkKKyAgICBpZiByZS5tYXRjaCgiaVszNDU2Nzg5XTg2IiwgdGFyY2gpOgorICAgICAgICByZXR1cm4gImlhMzIiCisgICAgcmV0dXJuIHRhcmNoCisKK0VYVFJBX09FTUFLRSA9ICInQVJDSD0ke0BnbnVfZWZpX2FyY2goZCl9JyAnQ0M9JHtDQ30nICdBUz0ke0FTfScgJ0xEPSR7TER9JyAnQVI9JHtBUn0nIFwKKyAgICAgICAgICAgICAgICAnUkFOTElCPSR7UkFOTElCfScgJ09CSkNPUFk9JHtPQkpDT1BZfScgJ1BSRUZJWD0ke3ByZWZpeH0nICdMSUJESVI9JHtsaWJkaXJ9JyBcCisgICAgICAgICAgICAgICAgIgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGwgSU5TVEFMTFJPT1Q9IiR7RH0iCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vKi5sZHMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1GaXgtYnVpbGQtd2l0aC1nbGliYy0yLjIwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1GaXgtYnVpbGQtd2l0aC1nbGliYy0yLjIwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YWFhOTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLUZpeC1idWlsZC13aXRoLWdsaWJjLTIuMjAucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSAyNzVmZTAyNjllY2MwMGFmNDc4OGFmYWY5ZGMxNTFhNTBiMjU2NDViIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMjggQXVnIDIwMTQgMTk6MjY6MTQgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGJ1aWxkIHdpdGggZ2xpYmMgMi4yMAorCisqIGdydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYzogc3F1YWhlcyBiZWxvdyB3YXJuaW5nCisgIHdhcm5pbmc6ICN3YXJuaW5nICJfQlNEX1NPVVJDRSBhbmQgX1NWSURfU09VUkNFIGFyZSBkZXByZWNhdGVkLCB1c2UgX0RFRkFVTFRfU09VUkNFIgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCistLS0KKyBncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmMgYi9ncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmMKK2luZGV4IDdlNzI1ZjYuLjhkZDhlNjUgMTAwNjQ0CistLS0gYS9ncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmMKKysrKyBiL2dydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYworQEAgLTE5LDcgKzE5LDcgQEAKKyAKKyAjaW5jbHVkZSA8Y29uZmlnLXV0aWwuaD4KKyAKKy0jZGVmaW5lIF9CU0RfU09VUkNFCisrI2RlZmluZSBfREVGQVVMVF9TT1VSQ0UKKyAjaW5jbHVkZSA8Z3J1Yi9mcy5oPgorICNpbmNsdWRlIDxncnViL2ZpbGUuaD4KKyAjaW5jbHVkZSA8Z3J1Yi9kaXNrLmg+CistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZGMxMTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGdydWItMi4wMC9ncnViLWNvcmUvZ251bGliL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3J1Yi0yLjAwLm9yaWcvZ3J1Yi1jb3JlL2dudWxpYi9NYWtlZmlsZS5hbQorKysrIGdydWItMi4wMC9ncnViLWNvcmUvZ251bGliL01ha2VmaWxlLmFtCitAQCAtNDEwLDcgKzQxMCw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLXBhcnNlX2RoY3BfdmVuZG9yLUFkZC1taXNzaW5nLWNvbnN0LXF1YWxpZmllcnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLXBhcnNlX2RoY3BfdmVuZG9yLUFkZC1taXNzaW5nLWNvbnN0LXF1YWxpZmllcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU1ZTNlYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtcGFyc2VfZGhjcF92ZW5kb3ItQWRkLW1pc3NpbmctY29uc3QtcXVhbGlmaWVycy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK09yaWdpbmFsIGNvbW1pdDogaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvZ3J1Yi5naXQvY29tbWl0L2dydWItY29yZS9uZXQvYm9vdHAuYz9pZD1mMDZjMjE3MmMwYjMyMDUyZjIyZTM3NTIzNDQ1Y2Y4ZTdhZmZhZWEzCisKK0Zyb20gMTQ5ZDJhMTRmNDcyMzc3OGNlZDIzZjQzOTQ4NzIwMWNjYmYxYTJjOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDIzIEFwciAyMDE1IDA3OjAzOjM0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHBhcnNlX2RoY3BfdmVuZG9yOiBBZGQgbWlzc2luZyBjb25zdCBxdWFsaWZpZXJzLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ3J1Yi1jb3JlL25ldC9ib290cC5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dydWItY29yZS9uZXQvYm9vdHAuYyBiL2dydWItY29yZS9uZXQvYm9vdHAuYworaW5kZXggYmMwN2Q1My4uNDQxMzFlZCAxMDA2NDQKKy0tLSBhL2dydWItY29yZS9uZXQvYm9vdHAuYworKysrIGIvZ3J1Yi1jb3JlL25ldC9ib290cC5jCitAQCAtNTIsOSArNTIsOSBAQCBzZXRfZW52X2xpbW5fcm8gKGNvbnN0IGNoYXIgKmludGVybmFtZSwgY29uc3QgY2hhciAqc3VmZml4LAorIH0KKyAKKyBzdGF0aWMgdm9pZAorLXBhcnNlX2RoY3BfdmVuZG9yIChjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2ZW5kLCBpbnQgbGltaXQsIGludCAqbWFzaykKKytwYXJzZV9kaGNwX3ZlbmRvciAoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmVuZCwgaW50IGxpbWl0LCBpbnQgKm1hc2spCisgeworLSAgZ3J1Yl91aW50OF90ICpwdHIsICpwdHIwOworKyAgY29uc3QgZ3J1Yl91aW50OF90ICpwdHIsICpwdHIwOworIAorICAgcHRyID0gcHRyMCA9IHZlbmQ7CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2NmZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2NmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2E1M2QyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvY2ZnCkBAIC0wLDAgKzEsMiBAQAorc2VhcmNoLmZpbGUgKCRjbWRwYXRoKS9FRkkvQk9PVC9ncnViLmNmZyByb290CitzZXQgcHJlZml4PSgkcm9vdCkvRUZJL0JPT1QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2NoZWNrLWlmLWxpYmx6bWEtaXMtZGlzYWJsZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9jaGVjay1pZi1saWJsem1hLWlzLWRpc2FibGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZWNlMDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9jaGVjay1pZi1saWJsem1hLWlzLWRpc2FibGVkLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Rpc2FibGUgbGlibHptYSBpZiAtLWVuYWJsZS1saWJsem1hPW5vCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEwMjksMTAgKzEwMjksMjAgQEAgZmkKKyAKKyBBQ19TVUJTVChbTElCR0VPTV0pCisgCistQUNfQ0hFQ0tfTElCKFtsem1hXSwgW2x6bWFfY29kZV0sCistICAgICAgICAgICAgIFtMSUJMWk1BPSItbGx6bWEiCistICAgICAgICAgICAgICBBQ19ERUZJTkUoW0hBVkVfTElCTFpNQV0sIFsxXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIExaTUEgbGlicmFyeS5dKV0sKQorK0FDX0FSR19FTkFCTEUoW2xpYmx6bWFdLAorKyAgICAgICAgICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1saWJsem1hXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlIGxpYmx6bWEgaW50ZWdyYXRpb24gKGRlZmF1bHQ9Z3Vlc3NlZCldKV0pCisraWYgdGVzdCB4IiRlbmFibGVfbGlibHptYSIgPSB4bm8gOyB0aGVuCisrICBsaWJsem1hX2V4Y3VzZT0iZXhwbGljaXRseSBkaXNhYmxlZCIKKytmaQorKworK2lmIHRlc3QgeCIkbGlibHptYV9leGN1c2UiID0geCA7IHRoZW4KKysgIEFDX0NIRUNLX0xJQihbbHptYV0sIFtsem1hX2NvZGVdLAorKyAgICAgICAgICAgICAgIFtMSUJMWk1BPSItbGx6bWEiCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShbSEFWRV9MSUJMWk1BXSwgWzFdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBMWk1BIGxpYnJhcnkuXSldLCkKKytmaQorKworIEFDX1NVQlNUKFtMSUJMWk1BXSkKKyAKKyBBQ19BUkdfRU5BQkxFKFtsaWJ6ZnNdLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZml4LWVuZGlhbm5lc3MtcHJvYmxlbS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2ZpeC1lbmRpYW5uZXNzLXByb2JsZW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc5OTkyYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2ZpeC1lbmRpYW5uZXNzLXByb2JsZW0ucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorZ3J1Yi1jb3JlL25ldC90ZnRwLmM6IGZpeCBlbmRpYW5uZXNzIHByb2JsZW0uCisKKwkqIGdydWItY29yZS9uZXQvdGZ0cC5jIChhY2spOiBGaXggZW5kaWFubmVzcyBwcm9ibGVtLgorCSh0ZnRwX3JlY2VpdmUpOiBMaWtld2lzZS4KKwlSZXBvcnRlZCBieTogTWljaGFlbCBEYXZpZHNhdmVyLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKK2luZGV4IDgxYmRhZTkuLmMyZjQyZDUgMTAwNjQ0CistLS0gYS9DaGFuZ2VMb2cKKysrKyBiL0NoYW5nZUxvZworQEAgLTEsMyArMSw5IEBACisrMjAxMi0wNy0wMiAgVmxhZGltaXIgU2VyYmluZW5rbyAgPHBoY29kZXJAZ21haWwuY29tPgorKworKwkqIGdydWItY29yZS9uZXQvdGZ0cC5jIChhY2spOiBGaXggZW5kaWFubmVzcyBwcm9ibGVtLgorKwkodGZ0cF9yZWNlaXZlKTogTGlrZXdpc2UuCisrCVJlcG9ydGVkIGJ5OiBNaWNoYWVsIERhdmlkc2F2ZXIuCisrCisgMjAxMi0wNi0yNyAgVmxhZGltaXIgU2VyYmluZW5rbyAgPHBoY29kZXJAZ21haWwuY29tPgorIAorIAkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDIuMDAuCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL25ldC90ZnRwLmMgYi9ncnViLWNvcmUvbmV0L3RmdHAuYworaW5kZXggOWM3MGVmYi4uZDBmMzllYSAxMDA2NDQKKy0tLSBhL2dydWItY29yZS9uZXQvdGZ0cC5jCisrKysgYi9ncnViLWNvcmUvbmV0L3RmdHAuYworQEAgLTE0Myw3ICsxNDMsNyBAQCBhY2sgKHRmdHBfZGF0YV90IGRhdGEsIGdydWJfdWludDE2X3QgYmxvY2spCisgCisgICB0ZnRwaF9hY2sgPSAoc3RydWN0IHRmdHBoZHIgKikgbmJfYWNrLmRhdGE7CisgICB0ZnRwaF9hY2stPm9wY29kZSA9IGdydWJfY3B1X3RvX2JlMTYgKFRGVFBfQUNLKTsKKy0gIHRmdHBoX2Fjay0+dS5hY2suYmxvY2sgPSBibG9jazsKKysgIHRmdHBoX2Fjay0+dS5hY2suYmxvY2sgPSBncnViX2NwdV90b19iZTE2IChibG9jayk7CisgCisgICBlcnIgPSBncnViX25ldF9zZW5kX3VkcF9wYWNrZXQgKGRhdGEtPnNvY2ssICZuYl9hY2spOworICAgaWYgKGVycikKK0BAIC0yMjUsNyArMjI1LDcgQEAgdGZ0cF9yZWNlaXZlIChncnViX25ldF91ZHBfc29ja2V0X3Qgc29jayBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgCSAgICBncnViX3ByaW9yaXR5X3F1ZXVlX3BvcCAoZGF0YS0+cHEpOworIAorIAkgICAgaWYgKGZpbGUtPmRldmljZS0+bmV0LT5wYWNrcy5jb3VudCA8IDUwKQorLQkgICAgICBlcnIgPSBhY2sgKGRhdGEsIHRmdHBoLT51LmRhdGEuYmxvY2spOworKwkgICAgICBlcnIgPSBhY2sgKGRhdGEsIGRhdGEtPmJsb2NrICsgMSk7CisgCSAgICBlbHNlCisgCSAgICAgIHsKKyAJCWZpbGUtPmRldmljZS0+bmV0LT5zdGFsbCA9IDE7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9maXgtaXNzdWUtd2l0aC1mbGV4LTIuNS4zNy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2ZpeC1pc3N1ZS13aXRoLWZsZXgtMi41LjM3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYWUyZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9maXgtaXNzdWUtd2l0aC1mbGV4LTIuNS4zNy5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1RoaXMgZml4ZXMgY29tcGlsYXRpb24gaXNzdWVzIHdoZW4gdXNpbmcgZmxleC0yLjUuMzcuIEl0IHdhcyB0YWtlbiBmcm9tIHVwc3RyZWFtLgorCitPcmlnaW5hbCBhdXRob3IgaXM6IFZsYWRpbWlyIFNlcmJpbmVua28gIDxwaGNvZGVyQGdtYWlsLmNvbT4KKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorCitJbmRleDogZ3J1Yi0yLjAwL2dydWItY29yZS9zY3JpcHQveXlsZXgubAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdydWItMi4wMC5vcmlnL2dydWItY29yZS9zY3JpcHQveXlsZXgubAkyMDEyLTA2LTA4IDIzOjI0OjE1LjAwMDAwMDAwMCArMDMwMAorKysrIGdydWItMi4wMC9ncnViLWNvcmUvc2NyaXB0L3l5bGV4LmwJMjAxMy0wNy0zMSAxNDozNDo0MC43MDgxMDA5ODIgKzAzMDAKK0BAIC0yOSw2ICsyOSw4IEBACisgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3NpbmctcHJvdG90eXBlcyIKKyAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1kZWNsYXJhdGlvbnMiCisgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vuc2FmZS1sb29wLW9wdGltaXphdGlvbnMiCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc2lnbi1jb21wYXJlIgorIAorICNkZWZpbmUgeXlmcmVlICAgIGdydWJfbGV4ZXJfeXlmcmVlCisgI2RlZmluZSB5eWFsbG9jICAgZ3J1Yl9sZXhlcl95eWFsbG9jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtYWRkLW9lLWtlcm5lbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1hZGQtb2Uta2VybmVsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViODkxNmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtYWRkLW9lLWtlcm5lbC5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIDdhYjU3NmE3YzYxNDA2YjdlNjM3MzlkMWIxMTAxN2FlMzM2YjkwMDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMyBNYXIgMjAxNCAwMzozNDo0OCAtMDUwMAorU3ViamVjdDogW1BBVENIXSBncnViLmQvMTBfbGludXguaW46IGFkZCBvZSdzIGtlcm5lbCBuYW1lCisKK091ciBrZXJuZWwncyBuYW1lIGlzIGJ6SW1hZ2UsIHdlIG5lZWQgYWRkIGl0IHRvIGdydWIuZC8xMF9saW51eC5pbiBzbwordGhhdCB0aGUgZ3J1Yi1ta2NvbmZpZyBhbmQgZ3J1Yi1pbnN0YWxsIGNhbiB3b3JrIGNvcnJlY3RseS4KKworV2Ugb25seSBuZWVkIGFkZCB0aGUgYnpJbWFnZSB0byB1dGlsL2dydWIuZC8xMF9saW51eC5pbiwgYnV0IGFsc28gYWRkIGl0Cit0byB1dGlsL2dydWIuZC8yMF9saW51eF94ZW4uaW4gdG8ga2VlcCBjb21wYXRpYmlsaXR5LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHV0aWwvZ3J1Yi5kLzEwX2xpbnV4LmluICAgICB8ICAgIDQgKystLQorIHV0aWwvZ3J1Yi5kLzIwX2xpbnV4X3hlbi5pbiB8ICAgIDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3V0aWwvZ3J1Yi5kLzEwX2xpbnV4LmluIGIvdXRpbC9ncnViLmQvMTBfbGludXguaW4KK2luZGV4IDE0NDAyZTguLmM1OGY0MTcgMTAwNjQ0CistLS0gYS91dGlsL2dydWIuZC8xMF9saW51eC5pbgorKysrIGIvdXRpbC9ncnViLmQvMTBfbGludXguaW4KK0BAIC0xNTMsMTEgKzE1MywxMSBAQCBFT0YKKyBtYWNoaW5lPWB1bmFtZSAtbWAKKyBjYXNlICJ4JG1hY2hpbmUiIGluCisgICAgIHhpPzg2IHwgeHg4Nl82NCkKKy0JbGlzdD1gZm9yIGkgaW4gL2Jvb3Qvdm1saW51ei0qIC92bWxpbnV6LSogL2Jvb3Qva2VybmVsLSogOyBkbworKwlsaXN0PWBmb3IgaSBpbiAvYm9vdC9iekltYWdlLSogL2J6SW1hZ2UtKiAvYm9vdC92bWxpbnV6LSogL3ZtbGludXotKiAvYm9vdC9rZXJuZWwtKiA7IGRvCisgICAgICAgICAgICAgICAgICAgaWYgZ3J1Yl9maWxlX2lzX25vdF9nYXJiYWdlICIkaSIgOyB0aGVuIGVjaG8gLW4gIiRpICIgOyBmaQorICAgICAgICAgICAgICAgZG9uZWAgOzsKKyAgICAgKikgCistCWxpc3Q9YGZvciBpIGluIC9ib290L3ZtbGludXotKiAvYm9vdC92bWxpbnV4LSogL3ZtbGludXotKiAvdm1saW51eC0qIC9ib290L2tlcm5lbC0qIDsgZG8KKysJbGlzdD1gZm9yIGkgaW4gL2Jvb3QvYnpJbWFnZS0qIC9ib290L3ZtbGludXotKiAvYm9vdC92bWxpbnV4LSogL2J6SW1hZ2UtKiAvdm1saW51ei0qIC92bWxpbnV4LSogL2Jvb3Qva2VybmVsLSogOyBkbworICAgICAgICAgICAgICAgICAgIGlmIGdydWJfZmlsZV9pc19ub3RfZ2FyYmFnZSAiJGkiIDsgdGhlbiBlY2hvIC1uICIkaSAiIDsgZmkKKyAJICAgICBkb25lYCA7OworIGVzYWMKK2RpZmYgLS1naXQgYS91dGlsL2dydWIuZC8yMF9saW51eF94ZW4uaW4gYi91dGlsL2dydWIuZC8yMF9saW51eF94ZW4uaW4KK2luZGV4IDFkOTQ1MDIuLmIyZGVjZjMgMTAwNjQ0CistLS0gYS91dGlsL2dydWIuZC8yMF9saW51eF94ZW4uaW4KKysrKyBiL3V0aWwvZ3J1Yi5kLzIwX2xpbnV4X3hlbi5pbgorQEAgLTEzOCw3ICsxMzgsNyBAQCBFT0YKKyBFT0YKKyB9CisgCistbGludXhfbGlzdD1gZm9yIGkgaW4gL2Jvb3Qvdm1saW51W3h6XS0qIC92bWxpbnVbeHpdLSogL2Jvb3Qva2VybmVsLSo7IGRvCisrbGludXhfbGlzdD1gZm9yIGkgaW4gL2Jvb3QvYnpJbWFnZVt4el0tKiAvYnpJbWFnZVt4el0tKiAvYm9vdC92bWxpbnVbeHpdLSogL3ZtbGludVt4el0tKiAvYm9vdC9rZXJuZWwtKjsgZG8KKyAgICAgaWYgZ3J1Yl9maWxlX2lzX25vdF9nYXJiYWdlICIkaSI7IHRoZW4KKyAgICAgCWJhc2VuYW1lPSQoYmFzZW5hbWUgJGkpCisgCXZlcnNpb249JChlY2hvICRiYXNlbmFtZSB8IHNlZCAtZSAicyxeW14wLTldKi0sLGciKQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZml4LWVuYWJsZV9leGVjdXRlX3N0YWNrLWNoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi0yLjAwLWZpeC1lbmFibGVfZXhlY3V0ZV9zdGFjay1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWVmNGRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi0yLjAwLWZpeC1lbmFibGVfZXhlY3V0ZV9zdGFjay1jaGVjay5wYXRjaApAQCAtMCwwICsxLDI3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworCitUaGlzIHBhdGNoIGF2b2lkcyB0aGlzIGNvbmZpZ3VyZSBmYWlsdXJlCisKK2NvbmZpZ3VyZToyMDMwNjogY2hlY2tpbmcgd2hldGhlciBgY2NhY2hlIGk1ODYtcG9reS1saW51eC1nY2MgIC1tMzIgICAgLW1hcmNoPWNvcmUyIC1tc3NlMyAtbXR1bmU9Z2VuZXJpYyAtbWZwbWF0aD1zc2UgLS1zeXNyb290PS9idWlsZGRpc2svYnVpbGQvYnVpbGQwL3RtcC9zeXNyb290cy9lbWVubG93JyBnZW5lcmF0ZXMgY2FsbHMgdG8gYF9fZW5hYmxlX2V4ZWN1dGVfc3RhY2soKScKK2NvbmZpZ3VyZToyMDMyMDogY2NhY2hlIGk1ODYtcG9reS1saW51eC1nY2MgIC1tMzIgICAgLW1hcmNoPWNvcmUyIC1tc3NlMyAtbXR1bmU9Z2VuZXJpYyAtbWZwbWF0aD1zc2UgLS1zeXNyb290PS9idWlsZGRpc2svYnVpbGQvYnVpbGQwL3RtcC9zeXNyb290cy9lbWVubG93IC1PMiAtcGlwZSAtZyAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLVdhbGwgLVcgLVdzaGFkb3cgLVdwb2ludGVyLWFyaXRoIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XdW5kZWYgLVdzdHJpY3QtcHJvdG90eXBlcyAtZyAtZmFsaWduLWp1bXBzPTEgLWZhbGlnbi1sb29wcz0xIC1mYWxpZ24tZnVuY3Rpb25zPTEgLW1uby1tbXggLW1uby1zc2UgLW1uby1zc2UyIC1tbm8tM2Rub3cgLW1mcG1hdGg9Mzg3IC1mbm8tZHdhcmYyLWNmaS1hc20gLW0zMiAtZm5vLXN0YWNrLXByb3RlY3RvciAtbW5vLXN0YWNrLWFyZy1wcm9iZSAtV2Vycm9yIC1Xbm8tdHJhbXBvbGluZXMgLWZhbGlnbi1sb29wcz0xIC1TIGNvbmZ0ZXN0LmMKK2NvbmZ0ZXN0LmM6MzA4OjY6IGVycm9yOiBubyBwcmV2aW91cyBwcm90b3R5cGUgZm9yICdnJyBbLVdlcnJvcj1taXNzaW5nLXByb3RvdHlwZXNdCitjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworY29uZmlndXJlOjIwMzIzOiAkPyA9IDEKK2NvbmZpZ3VyZToyMDMyNzogZXJyb3I6IGNjYWNoZSBpNTg2LXBva3ktbGludXgtZ2NjICAtbTMyICAgIC1tYXJjaD1jb3JlMiAtbXNzZTMgLW10dW5lPWdlbmVyaWMgLW1mcG1hdGg9c3NlIC0tc3lzcm9vdD0vYnVpbGRkaXNrL2J1aWxkL2J1aWxkMC90bXAvc3lzcm9vdHMvZW1lbmxvdyBmYWlsZWQgdG8gcHJvZHVjZSBhc3NlbWJseSBjb2RlCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA0LzEzCisKK0luZGV4OiBncnViLTIuMDAvYWNpbmNsdWRlLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3J1Yi0yLjAwLm9yaWcvYWNpbmNsdWRlLm00CisrKysgZ3J1Yi0yLjAwL2FjaW5jbHVkZS5tNAorQEAgLTMxNyw2ICszMTcsNyBAQCBkbmwgQ2hlY2sgaWYgdGhlIEMgY29tcGlsZXIgZ2VuZXJhdGVzIGNhCisgQUNfREVGVU4oW2dydWJfQ0hFQ0tfRU5BQkxFX0VYRUNVVEVfU1RBQ0tdLFsKKyBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgYCRDQycgZ2VuZXJhdGVzIGNhbGxzIHRvIGBfX2VuYWJsZV9leGVjdXRlX3N0YWNrKCknXSkKKyBBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1NPVVJDRShbWworK3ZvaWQgZyAoaW50KTsKKyB2b2lkIGYgKGludCAoKnApICh2b2lkKSk7Cisgdm9pZCBnIChpbnQgaSkKKyB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZnBtYXRoLXNzZS0zODctZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi0yLjAwLWZwbWF0aC1zc2UtMzg3LWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTU3ZjEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi0yLjAwLWZwbWF0aC1zc2UtMzg3LWZpeC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKKworVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGNvbmZpZ3VyZSBpc3N1ZSBmb3IgZ3J1YiB3aGVuIC1tZnBtYXRoPXNzZSBpcyBpbiB0aGUgZ2NjIHBhcmFtZXRlcnMuCisKK2NvbmZpZ3VyZToyMDU3NDogaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAgICAtbWFyY2g9Y29yZTIgLW1zc2UzIC1tdHVuZT1nZW5lcmljIC1tZnBtYXRoPXNzZSAtLXN5c3Jvb3Q9L3Vzci9sb2NhbC9kZXYveW9jdG8vZ3J1YnRlc3QyL2J1aWxkL3RtcC9zeXNyb290cy9lbWVubG93IC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtZyAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLVdhbGwgLVcgLVdzaGFkb3cgLVdwb2ludGVyLWFyaXRoIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XdW5kZWYgLVdzdHJpY3QtcHJvdG90eXBlcyAtZyAtZmFsaWduLWp1bXBzPTEgLWZhbGlnbi1sb29wcz0xIC1mYWxpZ24tZnVuY3Rpb25zPTEgLW1uby1tbXggLW1uby1zc2UgLW1uby1zc2UyIC1tbm8tM2Rub3cgLWZuby1kd2FyZjItY2ZpLWFzbSAtbTMyIC1mbm8tc3RhY2stcHJvdGVjdG9yIC1tbm8tc3RhY2stYXJnLXByb2JlIC1XZXJyb3IgLW5vc3RkbGliIC1XbCwtLWRlZnN5bSxfX19tYWluPTB4ODEwMCAgLVdhbGwgLVcgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZSAgLURHUlVCX01BQ0hJTkVfUENCSU9TPTEgLURHUlVCX01BQ0hJTkU9STM4Nl9QQyAtV2wsLU8xIC1XbCwtLWhhc2gtc3R5bGU9Z251IC1XbCwtLWFzLW5lZWRlZCBjb25mdGVzdC5jICA+JjUKK2NvbmZ0ZXN0LmM6MTowOiBlcnJvcjogU1NFIGluc3RydWN0aW9uIHNldCBkaXNhYmxlZCwgdXNpbmcgMzg3IGFyaXRobWV0aWNzIFstV2Vycm9yXQorY2MxOiBhbGwgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDQvMTMKKworSW5kZXg6IGdydWItMS45OS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTEuOTkub3JpZy9jb25maWd1cmUuYWMKKysrKyBncnViLTEuOTkvY29uZmlndXJlLmFjCitAQCAtMzc4LDcgKzM3OCw3IEBAIGlmIHRlc3QgIngkdGFyZ2V0X2NwdSIgPSB4aTM4NjsgdGhlbgorIAorICAgIyBTb21lIHRvb2xjaGFpbnMgZW5hYmxlIHRoZXNlIGZlYXR1cmVzIGJ5IGRlZmF1bHQsIGJ1dCB0aGV5IG5lZWQKKyAgICMgcmVnaXN0ZXJzIHRoYXQgYXJlbid0IHNldCB1cCBwcm9wZXJseSBpbiBHUlVCLgorLSAgVEFSR0VUX0NGTEFHUz0iJFRBUkdFVF9DRkxBR1MgLW1uby1tbXggLW1uby1zc2UgLW1uby1zc2UyIC1tbm8tM2Rub3ciCisrICBUQVJHRVRfQ0ZMQUdTPSIkVEFSR0VUX0NGTEFHUyAtbW5vLW1teCAtbW5vLXNzZSAtbW5vLXNzZTIgLW1uby0zZG5vdyAtbWZwbWF0aD0zODciCisgZmkKKyAKKyAjIEJ5IGRlZmF1bHQsIEdDQyA0LjQgZ2VuZXJhdGVzIC5laF9mcmFtZSBzZWN0aW9ucyBjb250YWluaW5nIHVud2luZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1lZmktYWxsb3ctYS1jb21waWxhdGlvbi13aXRob3V0LW1jbW9kZWwtbGFyZ2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1hbGxvdy1hLWNvbXBpbGF0aW9uLXdpdGhvdXQtbWNtb2RlbC1sYXJnZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTg4ZmNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1lZmktYWxsb3ctYS1jb21waWxhdGlvbi13aXRob3V0LW1jbW9kZWwtbGFyZ2UucGF0Y2gKQEAgLTAsMCArMSwxMzEgQEAKK0FsbG93IGEgY29tcGlsYXRpb24gd2l0aG91dCAtbWNtb2RlbD1sYXJnZQorCitJdCdzIHByb3ZpZGVkIGJ5IFZsYWRpbWlyIFNlcmJpbmVua28sIGFuZCBoZSB3aWxsIGNvbW1pdAoraXQgdXBzdHJlYW0gc28gaXQgc2hvdWxkIGJlIGJhY2twb3J0IHBhdGNoLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CisKKy0tCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5ZjhmYjhhLi4yYzVlNmVkIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC03MjMsOSArNzIzLDcgQEAgaWYgdGVzdCAiJHRhcmdldF9jcHUiID0geDg2XzY0OyB0aGVuCisgCQkgICAgICBbZ3J1Yl9jdl9jY19tY21vZGVsPXllc10sCisgCQkgICAgICBbZ3J1Yl9jdl9jY19tY21vZGVsPW5vXSkKKyAgIF0pCistICBpZiB0ZXN0ICJ4JGdydWJfY3ZfY2NfbWNtb2RlbCIgPSB4bm87IHRoZW4KKy0gICAgQUNfTVNHX0VSUk9SKFstbWNtb2RlbD1sYXJnZSBub3Qgc3VwcG9ydGVkLiBVcGdyYWRlIHlvdXIgZ2NjLl0pCistICBlbHNlCisrICBpZiB0ZXN0ICJ4JGdydWJfY3ZfY2NfbWNtb2RlbCIgPSB4eWVzOyB0aGVuCisgICAgIFRBUkdFVF9DRkxBR1M9IiRUQVJHRVRfQ0ZMQUdTIC1tY21vZGVsPWxhcmdlIgorICAgZmkKKyBmaQorZGlmZiAtLWdpdCBhL2dydWItY29yZS9rZXJuL2VmaS9tbS5jIGIvZ3J1Yi1jb3JlL2tlcm4vZWZpL21tLmMKK2luZGV4IDE0MDliNWQuLjZlOWRhY2UgMTAwNjQ0CistLS0gYS9ncnViLWNvcmUva2Vybi9lZmkvbW0uYworKysrIGIvZ3J1Yi1jb3JlL2tlcm4vZWZpL21tLmMKK0BAIC0zMiw2ICszMiwxMiBAQAorICNkZWZpbmUgQllURVNfVE9fUEFHRVMoYnl0ZXMpCSgoKGJ5dGVzKSArIDB4ZmZmKSA+PiAxMikKKyAjZGVmaW5lIFBBR0VTX1RPX0JZVEVTKHBhZ2VzKQkoKHBhZ2VzKSA8PCAxMikKKworKyNpZiBkZWZpbmVkIChfX2NvZGVfbW9kZWxfbGFyZ2VfXykgfHwgIWRlZmluZWQgKF9feDg2XzY0X18pCisrI2RlZmluZSBNQVhfVVNBQkxFX0FERFJFU1MgMHhmZmZmZmZmZgorKyNlbHNlCisrI2RlZmluZSBNQVhfVVNBQkxFX0FERFJFU1MgMHg3ZmZmZmZmZgorKyNlbmRpZgorKworIC8qIFRoZSBzaXplIG9mIGEgbWVtb3J5IG1hcCBvYnRhaW5lZCBmcm9tIHRoZSBmaXJtd2FyZS4gVGhpcyBtdXN0IGJlCisgICAgYSBtdWx0aXBsaWVyIG9mIDRLQi4gICovCisgI2RlZmluZSBNRU1PUllfTUFQX1NJWkUJMHgzMDAwCitAQCAtNTgsNyArNjQsNyBAQCBncnViX2VmaV9hbGxvY2F0ZV9wYWdlcyAoZ3J1Yl9lZmlfcGh5c2ljYWxfYWRkcmVzc190IGFkZHJlc3MsCisKKyAjaWYgMQorICAgLyogTGltaXQgdGhlIG1lbW9yeSBhY2Nlc3MgdG8gbGVzcyB0aGFuIDRHQiBmb3IgMzItYml0IHBsYXRmb3Jtcy4gICovCistICBpZiAoYWRkcmVzcyA+IDB4ZmZmZmZmZmYpCisrICBpZiAoYWRkcmVzcyA+IE1BWF9VU0FCTEVfQUREUkVTUykKKyAgICAgcmV0dXJuIDA7CisgI2VuZGlmCisKK0BAIC02Niw3ICs3Miw3IEBAIGdydWJfZWZpX2FsbG9jYXRlX3BhZ2VzIChncnViX2VmaV9waHlzaWNhbF9hZGRyZXNzX3QgYWRkcmVzcywKKyAgIGlmIChhZGRyZXNzID09IDApCisgICAgIHsKKyAgICAgICB0eXBlID0gR1JVQl9FRklfQUxMT0NBVEVfTUFYX0FERFJFU1M7CistICAgICAgYWRkcmVzcyA9IDB4ZmZmZmZmZmY7CisrICAgICAgYWRkcmVzcyA9IE1BWF9VU0FCTEVfQUREUkVTUzsKKyAgICAgfQorICAgZWxzZQorICAgICB0eXBlID0gR1JVQl9FRklfQUxMT0NBVEVfQUREUkVTUzsKK0BAIC04Niw3ICs5Miw3IEBAIGdydWJfZWZpX2FsbG9jYXRlX3BhZ2VzIChncnViX2VmaV9waHlzaWNhbF9hZGRyZXNzX3QgYWRkcmVzcywKKyAgICAgeworICAgICAgIC8qIFVnZ2gsIHRoZSBhZGRyZXNzIDAgd2FzIGFsbG9jYXRlZC4uLiBUaGlzIGlzIHRvbyBhbm5veWluZywKKyAJIHNvIHJlYWxsb2NhdGUgYW5vdGhlciBvbmUuICAqLworLSAgICAgIGFkZHJlc3MgPSAweGZmZmZmZmZmOworKyAgICAgIGFkZHJlc3MgPSBNQVhfVVNBQkxFX0FERFJFU1M7CisgICAgICAgc3RhdHVzID0gZWZpX2NhbGxfNCAoYi0+YWxsb2NhdGVfcGFnZXMsIHR5cGUsIEdSVUJfRUZJX0xPQURFUl9EQVRBLCBwYWdlcywgJmFkZHJlc3MpOworICAgICAgIGdydWJfZWZpX2ZyZWVfcGFnZXMgKDAsIHBhZ2VzKTsKKyAgICAgICBpZiAoc3RhdHVzICE9IEdSVUJfRUZJX1NVQ0NFU1MpCitAQCAtMzE5LDcgKzMyNSw3IEBAIGZpbHRlcl9tZW1vcnlfbWFwIChncnViX2VmaV9tZW1vcnlfZGVzY3JpcHRvcl90ICptZW1vcnlfbWFwLAorICAgICB7CisgICAgICAgaWYgKGRlc2MtPnR5cGUgPT0gR1JVQl9FRklfQ09OVkVOVElPTkFMX01FTU9SWQorICNpZiAxCistCSAgJiYgZGVzYy0+cGh5c2ljYWxfc3RhcnQgPD0gMHhmZmZmZmZmZgorKwkgICYmIGRlc2MtPnBoeXNpY2FsX3N0YXJ0IDw9IE1BWF9VU0FCTEVfQUREUkVTUworICNlbmRpZgorIAkgICYmIGRlc2MtPnBoeXNpY2FsX3N0YXJ0ICsgUEFHRVNfVE9fQllURVMgKGRlc2MtPm51bV9wYWdlcykgPiAweDEwMDAwMAorIAkgICYmIGRlc2MtPm51bV9wYWdlcyAhPSAwKQorQEAgLTMzNyw5ICszNDMsOSBAQCBmaWx0ZXJfbWVtb3J5X21hcCAoZ3J1Yl9lZmlfbWVtb3J5X2Rlc2NyaXB0b3JfdCAqbWVtb3J5X21hcCwKKyAjaWYgMQorIAkgIGlmIChCWVRFU19UT19QQUdFUyAoZmlsdGVyZWRfZGVzYy0+cGh5c2ljYWxfc3RhcnQpCisgCSAgICAgICsgZmlsdGVyZWRfZGVzYy0+bnVtX3BhZ2VzCistCSAgICAgID4gQllURVNfVE9fUEFHRVMgKDB4MTAwMDAwMDAwTEwpKQorKwkgICAgICA+IEJZVEVTX1RPX1BBR0VTIChNQVhfVVNBQkxFX0FERFJFU1MrMUxMKSkKKyAJICAgIGZpbHRlcmVkX2Rlc2MtPm51bV9wYWdlcworLQkgICAgICA9IChCWVRFU19UT19QQUdFUyAoMHgxMDAwMDAwMDBMTCkKKysJICAgICAgPSAoQllURVNfVE9fUEFHRVMgKE1BWF9VU0FCTEVfQUREUkVTUysxTEwpCisgCQkgLSBCWVRFU19UT19QQUdFUyAoZmlsdGVyZWRfZGVzYy0+cGh5c2ljYWxfc3RhcnQpKTsKKyAjZW5kaWYKKworZGlmZiAtLWdpdCBhL2dydWItY29yZS9rZXJuL3g4Nl82NC9kbC5jIGIvZ3J1Yi1jb3JlL2tlcm4veDg2XzY0L2RsLmMKK2luZGV4IDY1ZjA5ZWYuLjE3YzEyMTUgMTAwNjQ0CistLS0gYS9ncnViLWNvcmUva2Vybi94ODZfNjQvZGwuYworKysrIGIvZ3J1Yi1jb3JlL2tlcm4veDg2XzY0L2RsLmMKK0BAIC0xMDAsMTQgKzEwMCwzMiBAQCBncnViX2FyY2hfZGxfcmVsb2NhdGVfc3ltYm9scyAoZ3J1Yl9kbF90IG1vZCwgdm9pZCAqZWhkcikKKyAJCSAgICBicmVhazsKKworIAkJICBjYXNlIFJfWDg2XzY0X1BDMzI6CistCQkgICAgKmFkZHIzMiArPSByZWwtPnJfYWRkZW5kICsgc3ltLT5zdF92YWx1ZSAtCistCQkgICAgICAgICAgICAgIChFbGY2NF9Yd29yZCkgc2VnLT5hZGRyIC0gcmVsLT5yX29mZnNldDsKKysJCSAgICB7CisrCQkgICAgICBncnViX2ludDY0X3QgdmFsdWU7CisrCQkgICAgICB2YWx1ZSA9ICgoZ3J1Yl9pbnQzMl90KSAqYWRkcjMyKSArIHJlbC0+cl9hZGRlbmQgKyBzeW0tPnN0X3ZhbHVlIC0KKysJCQkoRWxmNjRfWHdvcmQpIHNlZy0+YWRkciAtIHJlbC0+cl9vZmZzZXQ7CisrCQkgICAgICBpZiAodmFsdWUgIT0gKGdydWJfaW50MzJfdCkgdmFsdWUpCisrCQkJcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9NT0RVTEUsICJyZWxvY2F0aW9uIG91dCBvZiByYW5nZSIpOworKwkJICAgICAgKmFkZHIzMiA9IHZhbHVlOworKwkJICAgIH0KKyAJCSAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgIGNhc2UgUl9YODZfNjRfMzI6CisrCQkgICAgeworKwkJICAgICAgZ3J1Yl91aW50NjRfdCB2YWx1ZSA9ICphZGRyMzIgKyByZWwtPnJfYWRkZW5kICsgc3ltLT5zdF92YWx1ZTsKKysJCSAgICAgIGlmICh2YWx1ZSAhPSAoZ3J1Yl91aW50MzJfdCkgdmFsdWUpCisrCQkJcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9NT0RVTEUsICJyZWxvY2F0aW9uIG91dCBvZiByYW5nZSIpOworKwkJICAgICAgKmFkZHIzMiA9IHZhbHVlOworKwkJICAgIH0KKysJCSAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICBjYXNlIFJfWDg2XzY0XzMyUzoKKy0gICAgICAgICAgICAgICAgICAgICphZGRyMzIgKz0gcmVsLT5yX2FkZGVuZCArIHN5bS0+c3RfdmFsdWU7CistICAgICAgICAgICAgICAgICAgICBicmVhazsKKysJCSAgICB7CisrCQkgICAgICBncnViX2ludDY0X3QgdmFsdWUgPSAoKGdydWJfaW50MzJfdCkgKmFkZHIzMikgKyByZWwtPnJfYWRkZW5kICsgc3ltLT5zdF92YWx1ZTsKKysJCSAgICAgIGlmICh2YWx1ZSAhPSAoZ3J1Yl9pbnQzMl90KSB2YWx1ZSkKKysJCQlyZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX01PRFVMRSwgInJlbG9jYXRpb24gb3V0IG9mIHJhbmdlIik7CisrCQkgICAgICAqYWRkcjMyID0gdmFsdWU7CisrCQkgICAgfQorKwkJICAgIGJyZWFrOworCisgCQkgIGRlZmF1bHQ6CisgCQkgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX05PVF9JTVBMRU1FTlRFRF9ZRVQsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1maXgtd2l0aC1nbGliYy0yLjIwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1lZmktZml4LXdpdGgtZ2xpYmMtMi4yMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjEyNjI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1lZmktZml4LXdpdGgtZ2xpYmMtMi4yMC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIGViNjM2OGU2NWY2OTg4ZWViYWQyNmNlYmRlYzA1N2Y3OTdiY2ViNDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgOSBTZXAgMjAxNCAwMDowMjozMCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBGaXggYnVpbGQgd2l0aCBnbGliYyAyLjIwCisKKyogZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jOiBzcXVhaGVzIGJlbG93IHdhcm5pbmcKKyAgd2FybmluZzogI3dhcm5pbmcgIl9CU0RfU09VUkNFIGFuZCBfU1ZJRF9TT1VSQ0UgYXJlIGRlcHJlY2F0ZWQsIHVzZSBfREVGQVVMVF9TT1VSQ0UiCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2dydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYyBiL2dydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYworaW5kZXggM2NiMDg5Yy4uYTUxZWUzMiAxMDA2NDQKKy0tLSBhL2dydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYworKysrIGIvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jCitAQCAtMTYsNyArMTYsNyBAQAorICAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgICovCistI2RlZmluZSBfQlNEX1NPVVJDRQorKyNkZWZpbmUgX0RFRkFVTFRfU09VUkNFCisgI2luY2x1ZGUgPGdydWIvZnMuaD4KKyAjaW5jbHVkZSA8Z3J1Yi9maWxlLmg+CisgI2luY2x1ZGUgPGdydWIvZGlzay5oPgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItaW5zdGFsbC5pbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItaW5zdGFsbC5pbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjY5NTFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1pbnN0YWxsLmluLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK091ciB1c2Ugb2YgZ3J1Yi1pbnN0YWxsIGRvZXNuJ3QgcmVxdWlyZSB0aGUgLXggb3B0aW9uLCBzbyB3ZSBzaG91bGQgYmUKK2JlIGFibGUgbWFrZSB1c2Ugb2YgZ3JlcCB2ZXJzaW9ucyB0aGF0IGRvbid0IHN1cHBvcnQgaXQuCisKK1NpZ25lZC1vZmYtYnk6IFRvbSBaYW51c3NpIDx0b20uemFudXNzaUBpbnRlbC5jb20+CisKK0luZGV4OiBncnViLTEuOTkvdXRpbC9ncnViLWluc3RhbGwuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTEuOTkub3JpZy91dGlsL2dydWItaW5zdGFsbC5pbgkyMDExLTA5LTA5IDIyOjM3OjIwLjA5MzkwNjY3OSAtMDUwMAorKysrIGdydWItMS45OS91dGlsL2dydWItaW5zdGFsbC5pbgkyMDExLTA5LTA5IDIyOjM3OjMwLjg1NDczNzg4MiAtMDUwMAorQEAgLTUxMCw3ICs1MTAsNyBAQAorIAorIGlmIFsgIngke2RldmFic3RyYWN0aW9uX21vZHVsZX0iID0gIngiIF0gOyB0aGVuCisgICAgIGlmIFsgeCIke2luc3RhbGxfZGV2aWNlfSIgIT0geCBdOyB0aGVuCistICAgICAgaWYgZWNobyAiJHtpbnN0YWxsX2RldmljZX0iIHwgZ3JlcCAtcXggIiguKikiIDsgdGhlbgorKyAgICAgIGlmIGVjaG8gIiR7aW5zdGFsbF9kZXZpY2V9IiB8IGdyZXAgLXEgIiguKikiIDsgdGhlbgorICAgICAgICAgaW5zdGFsbF9kcml2ZT0iJHtpbnN0YWxsX2RldmljZX0iCisgICAgICAgZWxzZQorICAgICAgICAgaW5zdGFsbF9kcml2ZT0iYCIkZ3J1Yl9wcm9iZSIgLS1kZXZpY2UtbWFwPSIke2RldmljZV9tYXB9IiAtLXRhcmdldD1kcml2ZSAtLWRldmljZSAiJHtpbnN0YWxsX2RldmljZX0iYCIgfHwgZXhpdCAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLW5vLXVudXNlZC1yZXN1bHQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLW5vLXVudXNlZC1yZXN1bHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNiZDA4MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItbm8tdW51c2VkLXJlc3VsdC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitTaWduZWQtb2ZmLWJ5OiBSYWR1IE1vaXNhbiA8cmFkdS5tb2lzYW5AaW50ZWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0kgaGFkIGFuIGVycm9yIGJlY2F1c2Ugb2YgYW4gdW51c2VkIHJldHVybiB2YWx1ZSBmb3IgcmVhZCgpLgorSSBhZGRlZCAtV25vLXVudXNlZC1yZXN1bHQuCisKK0luZGV4OiBncnViLTIuMDAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3J1Yi0yLjAwLm9yaWcvY29uZmlndXJlLmFjCTIwMTItMDgtMTMgMTY6MzI6MzMuMDAwMDAwMDAwICswMzAwCisrKysgZ3J1Yi0yLjAwL2NvbmZpZ3VyZS5hYwkyMDEyLTA4LTEzIDE2OjM4OjIyLjAwMDAwMDAwMCArMDMwMAorQEAgLTM5NCw3ICszOTQsNyBAQAorIExJQlM9IiIKKyAKKyAjIGRlYnVnIGZsYWdzLgorLVdBUk5fRkxBR1M9Ii1XYWxsIC1XIC1Xc2hhZG93IC1Xb2xkLXN0eWxlLWRlZmluaXRpb24gLVdwb2ludGVyLWFyaXRoIC1XdW5kZWYgLVdleHRyYSAtV2FkZHJlc3MgLVdhdHRyaWJ1dGVzIC1XY2FzdC1hbGlnbiAtV2NoYXItc3Vic2NyaXB0cyAtV2NvbW1lbnQgLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyAtV2Rpc2FibGVkLW9wdGltaXphdGlvbiAtV2Rpdi1ieS16ZXJvIC1XZW1wdHktYm9keSAtV2VuZGlmLWxhYmVscyAtV2Zsb2F0LWVxdWFsIC1XZm9ybWF0LWV4dHJhLWFyZ3MgLVdmb3JtYXQtc2VjdXJpdHkgLVdmb3JtYXQteTJrIC1XaW1wbGljaXQgLVdpbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbiAtV2ltcGxpY2l0LWludCAtV2luaXQtc2VsZiAtV2ludC10by1wb2ludGVyLWNhc3QgLVdpbnZhbGlkLXBjaCAtV21haW4gLVdtaXNzaW5nLWJyYWNlcyAtV21pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzIC1XbWlzc2luZy1mb3JtYXQtYXR0cmlidXRlIC1XbWlzc2luZy1ub3JldHVybiAtV211bHRpY2hhciAtV25vbm51bGwgLVdvdmVyZmxvdyAtV3BhcmVudGhlc2VzIC1XcG9pbnRlci1hcml0aCAtV3BvaW50ZXItdG8taW50LWNhc3QgLVdyZXR1cm4tdHlwZSAtV3NlcXVlbmNlLXBvaW50IC1Xc2hhZG93IC1Xc2lnbi1jb21wYXJlIC1Xc3RyaWN0LWFsaWFzaW5nIC1Xc3dpdGNoIC1XdHJpZ3JhcGhzIC1XdW5kZWYgLVd1bmtub3duLXByYWdtYXMgLVd1bnVzZWQgLVd1bnVzZWQtZnVuY3Rpb24gLVd1bnVzZWQtbGFiZWwgLVd1bnVzZWQtcGFyYW1ldGVyIC1XdW51c2VkLXZhbHVlICAtV3VudXNlZC12YXJpYWJsZSAtV3ZhcmlhZGljLW1hY3JvcyAtV3ZvbGF0aWxlLXJlZ2lzdGVyLXZhciAtV3dyaXRlLXN0cmluZ3MgLVduZXN0ZWQtZXh0ZXJucyAtV3N0cmljdC1wcm90b3R5cGVzIC1XcG9pbnRlci1zaWduIgorK1dBUk5fRkxBR1M9Ii1XYWxsIC1XIC1Xc2hhZG93IC1Xb2xkLXN0eWxlLWRlZmluaXRpb24gLVdwb2ludGVyLWFyaXRoIC1XdW5kZWYgLVdleHRyYSAtV2FkZHJlc3MgLVdhdHRyaWJ1dGVzIC1XY2FzdC1hbGlnbiAtV2NoYXItc3Vic2NyaXB0cyAtV2NvbW1lbnQgLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyAtV2Rpc2FibGVkLW9wdGltaXphdGlvbiAtV2Rpdi1ieS16ZXJvIC1XZW1wdHktYm9keSAtV2VuZGlmLWxhYmVscyAtV2Zsb2F0LWVxdWFsIC1XZm9ybWF0LWV4dHJhLWFyZ3MgLVdmb3JtYXQtc2VjdXJpdHkgLVdmb3JtYXQteTJrIC1XaW1wbGljaXQgLVdpbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbiAtV2ltcGxpY2l0LWludCAtV2luaXQtc2VsZiAtV2ludC10by1wb2ludGVyLWNhc3QgLVdpbnZhbGlkLXBjaCAtV21haW4gLVdtaXNzaW5nLWJyYWNlcyAtV21pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzIC1XbWlzc2luZy1mb3JtYXQtYXR0cmlidXRlIC1XbWlzc2luZy1ub3JldHVybiAtV211bHRpY2hhciAtV25vbm51bGwgLVdvdmVyZmxvdyAtV3BhcmVudGhlc2VzIC1XcG9pbnRlci1hcml0aCAtV3BvaW50ZXItdG8taW50LWNhc3QgLVdyZXR1cm4tdHlwZSAtV3NlcXVlbmNlLXBvaW50IC1Xc2hhZG93IC1Xc2lnbi1jb21wYXJlIC1Xc3RyaWN0LWFsaWFzaW5nIC1Xc3dpdGNoIC1XdHJpZ3JhcGhzIC1XdW5kZWYgLVd1bmtub3duLXByYWdtYXMgLVd1bnVzZWQgLVd1bnVzZWQtZnVuY3Rpb24gLVd1bnVzZWQtbGFiZWwgLVd1bnVzZWQtcGFyYW1ldGVyIC1XdW51c2VkLXZhbHVlICAtV3VudXNlZC12YXJpYWJsZSAtV25vLXVudXNlZC1yZXN1bHQgLVd2YXJpYWRpYy1tYWNyb3MgLVd2b2xhdGlsZS1yZWdpc3Rlci12YXIgLVd3cml0ZS1zdHJpbmdzIC1XbmVzdGVkLWV4dGVybnMgLVdzdHJpY3QtcHJvdG90eXBlcyAtV3BvaW50ZXItc2lnbiIKKyBIT1NUX0NGTEFHUz0iJEhPU1RfQ0ZMQUdTICRXQVJOX0ZMQUdTIgorIFRBUkdFVF9DRkxBR1M9IiRUQVJHRVRfQ0ZMQUdTICRXQVJOX0ZMQUdTIC1nIC1XcmVkdW5kYW50LWRlY2xzIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMiCisgVEFSR0VUX0NDQVNGTEFHUz0iJFRBUkdFVF9DQ0FTRkxBR1MgLWciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViMi1maXgtaW5pdHJkLXNpemUtYnVnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1YjItZml4LWluaXRyZC1zaXplLWJ1Zy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTE0ZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1YjItZml4LWluaXRyZC1zaXplLWJ1Zy5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitGcm9tIDhmYmIxNTBhNTY5NjZlZGRlNGRjMDdiOGQwMWJlNWViMTQ5YjY1YWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDb2xpbiBXYXRzb24gPGNqd2F0c29uQHVidW50dS5jb20+CitEYXRlOiBTdW4sIDIwIEphbiAyMDEzIDIzOjAzOjM1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8xXSAqIGdydWItY29yZS9sb2FkZXIvaTM4Ni9saW51eC5jIChncnViX2NtZF9pbml0cmQpOiBEb24ndAorIGFkZCB0aGUgaW5pdHJkIHNpemUgdG8gYWRkcl9taW4sIHNpbmNlIHRoZSBpbml0cmQgd2lsbCBiZSBhbGxvY2F0ZWQgYWZ0ZXIKKyB0aGlzIGFkZHJlc3MuCisKK2NvbW1pdCA2YTBkZWJiZDkxNjdlOGY3OWNkZWY1NDk3YTczZDIzZTU4MGMwY2Q0IHVwc3RyZWFtCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogU2hhbiBIYWkgPHNoYW4uaGFpQHdpbmRyaXZlci5jb20+CistLS0KKyBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICB8IDYgKysrKysrCisgZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMgfCAzICstLQorIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCitpbmRleCBjMmY0MmQ1Li40MGNiNTA4IDEwMDY0NAorLS0tIGEvQ2hhbmdlTG9nCisrKysgYi9DaGFuZ2VMb2cKK0BAIC0xLDMgKzEsOSBAQAorKzIwMTMtMDEtMjAgIENvbGluIFdhdHNvbiAgPGNqd2F0c29uQHVidW50dS5jb20+CisrCisrCSogZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMgKGdydWJfY21kX2luaXRyZCk6IERvbid0IGFkZCB0aGUKKysJaW5pdHJkIHNpemUgdG8gYWRkcl9taW4sIHNpbmNlIHRoZSBpbml0cmQgd2lsbCBiZSBhbGxvY2F0ZWQgYWZ0ZXIKKysJdGhpcyBhZGRyZXNzLgorKworIDIwMTItMDctMDIgIFZsYWRpbWlyIFNlcmJpbmVua28gIDxwaGNvZGVyQGdtYWlsLmNvbT4KKyAKKyAJKiBncnViLWNvcmUvbmV0L3RmdHAuYyAoYWNrKTogRml4IGVuZGlhbm5lc3MgcHJvYmxlbS4KK2RpZmYgLS1naXQgYS9ncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYyBiL2dydWItY29yZS9sb2FkZXIvaTM4Ni9saW51eC5jCitpbmRleCA2MjA4N2NmLi5lMjQyNWM4IDEwMDY0NAorLS0tIGEvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMKKysrKyBiL2dydWItY29yZS9sb2FkZXIvaTM4Ni9saW51eC5jCitAQCAtMTA5OCw4ICsxMDk4LDcgQEAgZ3J1Yl9jbWRfaW5pdHJkIChncnViX2NvbW1hbmRfdCBjbWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorICAgICAgd29yc2UgdGhhbiB0aGF0IG9mIExpbnV4IDIuMy54eCwgc28gYXZvaWQgdGhlIGxhc3QgNjRrYi4gICovCisgICBhZGRyX21heCAtPSAweDEwMDAwOworIAorLSAgYWRkcl9taW4gPSAoZ3J1Yl9hZGRyX3QpIHByb3RfbW9kZV90YXJnZXQgKyBwcm90X2luaXRfc3BhY2UKKy0gICAgICAgICAgICAgKyBwYWdlX2FsaWduIChzaXplKTsKKysgIGFkZHJfbWluID0gKGdydWJfYWRkcl90KSBwcm90X21vZGVfdGFyZ2V0ICsgcHJvdF9pbml0X3NwYWNlOworIAorICAgLyogUHV0IHRoZSBpbml0cmQgYXMgaGlnaCBhcyBwb3NzaWJsZSwgNEtpQiBhbGlnbmVkLiAgKi8KKyAgIGFkZHIgPSAoYWRkcl9tYXggLSBzaXplKSAmIH4weEZGRjsKKy0tIAorMS44LjUuMi4yMzMuZzkzMmY3ZTQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1YjItcmVtb3ZlLXNwYXJjNjQtc2V0dXAtZnJvbS14ODYtYnVpbGRzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1YjItcmVtb3ZlLXNwYXJjNjQtc2V0dXAtZnJvbS14ODYtYnVpbGRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNTlhMWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViMi1yZW1vdmUtc3BhcmM2NC1zZXR1cC1mcm9tLXg4Ni1idWlsZHMucGF0Y2gKQEAgLTAsMCArMSwxMDQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK3JlbW92ZSB0aGUgZ3J1Yi1zcGFyYzY0LXNldHVwIGZpbGVzIGZyb20gdGhlIHg4NiBidWlsZHMuCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKKy0tLSBhL01ha2VmaWxlLnV0aWwuYW0JMjAxNC0wOC0xNSAxMTo0MTowMi40NDEwMTEyNzggLTA3MDAKKysrKyBiL01ha2VmaWxlLnV0aWwuYW0JMjAxNC0wOC0xNSAxMTo0NDoyNi4yNDUwMjExNDIgLTA3MDAKK0BAIC00NjkyLDkgKzQ2OTIsOSBAQAorIGVuZGlmCisgCisgaWYgQ09ORF9lbXUKKy1zYmluX1BST0dSQU1TICs9IGdydWItc3BhcmM2NC1zZXR1cAorK3NiaW5fUFJPR1JBTVMgKz0KKyBpZiBDT05EX01BTl9QQUdFUworLW1hbl9NQU5TICs9IGdydWItc3BhcmM2NC1zZXR1cC44CisrbWFuX01BTlMgKz0KKyAKKyBncnViLXNwYXJjNjQtc2V0dXAuODogZ3J1Yi1zcGFyYzY0LXNldHVwCisgCWNobW9kIGEreCBncnViLXNwYXJjNjQtc2V0dXAKK0BAIC00NzE1LDkgKzQ3MTUsOSBAQAorIGVuZGlmCisgCisgaWYgQ09ORF9pMzg2X3BjCistc2Jpbl9QUk9HUkFNUyArPSBncnViLXNwYXJjNjQtc2V0dXAKKytzYmluX1BST0dSQU1TICs9CisgaWYgQ09ORF9NQU5fUEFHRVMKKy1tYW5fTUFOUyArPSBncnViLXNwYXJjNjQtc2V0dXAuOAorK21hbl9NQU5TICs9CisgCisgZ3J1Yi1zcGFyYzY0LXNldHVwLjg6IGdydWItc3BhcmM2NC1zZXR1cAorIAljaG1vZCBhK3ggZ3J1Yi1zcGFyYzY0LXNldHVwCitAQCAtNDczOCw5ICs0NzM4LDkgQEAKKyBlbmRpZgorIAorIGlmIENPTkRfaTM4Nl9lZmkKKy1zYmluX1BST0dSQU1TICs9IGdydWItc3BhcmM2NC1zZXR1cAorK3NiaW5fUFJPR1JBTVMgKz0KKyBpZiBDT05EX01BTl9QQUdFUworLW1hbl9NQU5TICs9IGdydWItc3BhcmM2NC1zZXR1cC44CisrbWFuX01BTlMgKz0KKyAKKyBncnViLXNwYXJjNjQtc2V0dXAuODogZ3J1Yi1zcGFyYzY0LXNldHVwCisgCWNobW9kIGEreCBncnViLXNwYXJjNjQtc2V0dXAKK0BAIC00NzYxLDkgKzQ3NjEsOSBAQAorIGVuZGlmCisgCisgaWYgQ09ORF9pMzg2X3FlbXUKKy1zYmluX1BST0dSQU1TICs9IGdydWItc3BhcmM2NC1zZXR1cAorK3NiaW5fUFJPR1JBTVMgKz0KKyBpZiBDT05EX01BTl9QQUdFUworLW1hbl9NQU5TICs9IGdydWItc3BhcmM2NC1zZXR1cC44CisrbWFuX01BTlMgKz0KKyAKKyBncnViLXNwYXJjNjQtc2V0dXAuODogZ3J1Yi1zcGFyYzY0LXNldHVwCisgCWNobW9kIGEreCBncnViLXNwYXJjNjQtc2V0dXAKK0BAIC00Nzg0LDkgKzQ3ODQsOSBAQAorIGVuZGlmCisgCisgaWYgQ09ORF9pMzg2X2NvcmVib290Cistc2Jpbl9QUk9HUkFNUyArPSBncnViLXNwYXJjNjQtc2V0dXAKKytzYmluX1BST0dSQU1TICs9CisgaWYgQ09ORF9NQU5fUEFHRVMKKy1tYW5fTUFOUyArPSBncnViLXNwYXJjNjQtc2V0dXAuOAorK21hbl9NQU5TICs9CisgCisgZ3J1Yi1zcGFyYzY0LXNldHVwLjg6IGdydWItc3BhcmM2NC1zZXR1cAorIAljaG1vZCBhK3ggZ3J1Yi1zcGFyYzY0LXNldHVwCitAQCAtNDgwNyw5ICs0ODA3LDkgQEAKKyBlbmRpZgorIAorIGlmIENPTkRfaTM4Nl9tdWx0aWJvb3QKKy1zYmluX1BST0dSQU1TICs9IGdydWItc3BhcmM2NC1zZXR1cAorK3NiaW5fUFJPR1JBTVMgKz0KKyBpZiBDT05EX01BTl9QQUdFUworLW1hbl9NQU5TICs9IGdydWItc3BhcmM2NC1zZXR1cC44CisrbWFuX01BTlMgKz0KKyAKKyBncnViLXNwYXJjNjQtc2V0dXAuODogZ3J1Yi1zcGFyYzY0LXNldHVwCisgCWNobW9kIGEreCBncnViLXNwYXJjNjQtc2V0dXAKK0BAIC00ODMwLDkgKzQ4MzAsOSBAQAorIGVuZGlmCisgCisgaWYgQ09ORF9pMzg2X2llZWUxMjc1Cistc2Jpbl9QUk9HUkFNUyArPSBncnViLXNwYXJjNjQtc2V0dXAKKytzYmluX1BST0dSQU1TICs9CisgaWYgQ09ORF9NQU5fUEFHRVMKKy1tYW5fTUFOUyArPSBncnViLXNwYXJjNjQtc2V0dXAuOAorK21hbl9NQU5TICs9CisgCisgZ3J1Yi1zcGFyYzY0LXNldHVwLjg6IGdydWItc3BhcmM2NC1zZXR1cAorIAljaG1vZCBhK3ggZ3J1Yi1zcGFyYzY0LXNldHVwCitAQCAtNDg1Myw5ICs0ODUzLDkgQEAKKyBlbmRpZgorIAorIGlmIENPTkRfeDg2XzY0X2VmaQorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvcmVtb3ZlLWdldHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9yZW1vdmUtZ2V0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjNmNzg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvcmVtb3ZlLWdldHMucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorSVNPIEMxMSByZW1vdmVzIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGdldHMoKSBmcm9tIHRoZSBDIGxhbmd1YWdlLCBlZ2xpYmMgMi4xNisgcmVtb3ZlZCBpdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK0luZGV4OiBncnViLTEuOTkvZ3J1Yi1jb3JlL2dudWxpYi9zdGRpby5pbi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3J1Yi0xLjk5Lm9yaWcvZ3J1Yi1jb3JlL2dudWxpYi9zdGRpby5pbi5oCTIwMTAtMTItMDEgMDY6NDU6NDMuMDAwMDAwMDAwIC0wODAwCisrKysgZ3J1Yi0xLjk5L2dydWItY29yZS9nbnVsaWIvc3RkaW8uaW4uaAkyMDEyLTA3LTA0IDEyOjI1OjAyLjA1NzA5OTEwNyAtMDcwMAorQEAgLTE0MCw4ICsxNDAsMTAgQEAKKyAvKiBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCB0aGUgZGV2ZWxvcGVyIGV2ZXIgaGFzIGZ1bGwgY29udHJvbCBvZiBzdGRpbiwKKyAgICBzbyBhbnkgdXNlIG9mIGdldHMgd2FycmFudHMgYW4gdW5jb25kaXRpb25hbCB3YXJuaW5nLiAgQXNzdW1lIGl0IGlzCisgICAgYWx3YXlzIGRlY2xhcmVkLCBzaW5jZSBpdCBpcyByZXF1aXJlZCBieSBDODkuICAqLworKyNpZiBkZWZpbmVkIGdldHMKKyAjdW5kZWYgZ2V0cworIF9HTF9XQVJOX09OX1VTRSAoZ2V0cywgImdldHMgaXMgYSBzZWN1cml0eSBob2xlIC0gdXNlIGZnZXRzIGluc3RlYWQiKTsKKysjZW5kaWYKKyAKKyAjaWYgQEdOVUxJQl9GT1BFTkAKKyAjIGlmIEBSRVBMQUNFX0ZPUEVOQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L2F1dG9oZWxsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L2F1dG9oZWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NjIwN2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvYXV0b2hlbGwucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0KKyBjb25maWd1cmUuYWMgfCAgICA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDogZ3J1Yi0wLjk3L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdydWItMC45Ny5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA4LTA5LTEyIDE3OjM5OjUyLjAwMDAwMDAwMCArMDIwMAorKysrIGdydWItMC45Ny9jb25maWd1cmUuYWMJMjAwOC0wOS0xMiAxNzo0MDoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC02MCw4ICs2MCw4IEBAIEFDX1BST0dfQ0MKKyBfQU1fREVQRU5ERU5DSUVTKENDKQorIAorIGRubCBCZWNhdXNlIHJlY2VudCBhdXRvbWFrZSBjb21wbGFpbnMgYWJvdXQgQVMsIHNldCBpdCBoZXJlLgorLUNDQVM9IiRDQyIKKy1BQ19TVUJTVChDQ0FTKQorK0FNX1BST0dfQVMKKytBQ19TVUJTVChBUykKKyAKKyBBQ19BUkdfV0lUSChiaW51dGlscywKKyAgIFsgIC0td2l0aC1iaW51dGlscz1ESVIgICAgIHNlYXJjaCB0aGUgZGlyZWN0b3J5IERJUiB0byBmaW5kIGJpbnV0aWxzXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9ncnViLXN1cHBvcnQtMjU2Ynl0ZS1pbm9kZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9ncnViLXN1cHBvcnQtMjU2Ynl0ZS1pbm9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjI1ZDEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L2dydWItc3VwcG9ydC0yNTZieXRlLWlub2RlLnBhdGNoCkBAIC0wLDAgKzEsMTAxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW05vIExvbmdlciBNYWludGFpbmVkXQorCitkaWZmIC1OYXVyIGdydWItMC45Ny04MDAvc3RhZ2UyL2ZzeXNfZXh0MmZzLmMgZ3J1Yi0wLjk3LTgxMC9zdGFnZTIvZnN5c19leHQyZnMuYworLS0tIGdydWItMC45Ny04MDAvc3RhZ2UyL2ZzeXNfZXh0MmZzLmMJMjAwOC0wNy0yMSAwMDo0MDoyMS42Njg4Nzk0NzUgLTA2MDAKKysrKyBncnViLTAuOTctODEwL3N0YWdlMi9mc3lzX2V4dDJmcy5jCTIwMDgtMDctMjEgMDE6MDE6MTEuMDYzOTUzNzczIC0wNjAwCitAQCAtNzksNyArNzksNTIgQEAKKyAgICAgX191MzIgc19yZXZfbGV2ZWw7CQkvKiBSZXZpc2lvbiBsZXZlbCAqLworICAgICBfX3UxNiBzX2RlZl9yZXN1aWQ7CQkvKiBEZWZhdWx0IHVpZCBmb3IgcmVzZXJ2ZWQgYmxvY2tzICovCisgICAgIF9fdTE2IHNfZGVmX3Jlc2dpZDsJCS8qIERlZmF1bHQgZ2lkIGZvciByZXNlcnZlZCBibG9ja3MgKi8KKy0gICAgX191MzIgc19yZXNlcnZlZFsyMzVdOwkvKiBQYWRkaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrICovCisrICAgIC8qCisrICAgICAqIFRoZXNlIGZpZWxkcyBhcmUgZm9yIEVYVDJfRFlOQU1JQ19SRVYgc3VwZXJibG9ja3Mgb25seS4KKysgICAgICoKKysgICAgICogTm90ZTogdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY29tcGF0aWJsZSBmZWF0dXJlIHNldCBhbmQKKysgICAgICogdGhlIGluY29tcGF0aWJsZSBmZWF0dXJlIHNldCBpcyB0aGF0IGlmIHRoZXJlIGlzIGEgYml0IHNldAorKyAgICAgKiBpbiB0aGUgaW5jb21wYXRpYmxlIGZlYXR1cmUgc2V0IHRoYXQgdGhlIGtlcm5lbCBkb2Vzbid0CisrICAgICAqIGtub3cgYWJvdXQsIGl0IHNob3VsZCByZWZ1c2UgdG8gbW91bnQgdGhlIGZpbGVzeXN0ZW0uCisrICAgICAqCisrICAgICAqIGUyZnNjaydzIHJlcXVpcmVtZW50cyBhcmUgbW9yZSBzdHJpY3Q7IGlmIGl0IGRvZXNuJ3Qga25vdworKyAgICAgKiBhYm91dCBhIGZlYXR1cmUgaW4gZWl0aGVyIHRoZSBjb21wYXRpYmxlIG9yIGluY29tcGF0aWJsZQorKyAgICAgKiBmZWF0dXJlIHNldCwgaXQgbXVzdCBhYm9ydCBhbmQgbm90IHRyeSB0byBtZWRkbGUgd2l0aAorKyAgICAgKiB0aGluZ3MgaXQgZG9lc24ndCB1bmRlcnN0YW5kLi4uCisrICAgICAqLworKyAgICBfX3UzMiBzX2ZpcnN0X2lubzsJCS8qIEZpcnN0IG5vbi1yZXNlcnZlZCBpbm9kZSAqLworKyAgICBfX3UxNiBzX2lub2RlX3NpemU7CQkvKiBzaXplIG9mIGlub2RlIHN0cnVjdHVyZSAqLworKyAgICBfX3UxNiBzX2Jsb2NrX2dyb3VwX25yOwkvKiBibG9jayBncm91cCAjIG9mIHRoaXMgc3VwZXJibG9jayAqLworKyAgICBfX3UzMiBzX2ZlYXR1cmVfY29tcGF0OwkvKiBjb21wYXRpYmxlIGZlYXR1cmUgc2V0ICovCisrICAgIF9fdTMyIHNfZmVhdHVyZV9pbmNvbXBhdDsJLyogaW5jb21wYXRpYmxlIGZlYXR1cmUgc2V0ICovCisrICAgIF9fdTMyIHNfZmVhdHVyZV9yb19jb21wYXQ7CS8qIHJlYWRvbmx5LWNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKysgICAgX191OCAgc191dWlkWzE2XTsJCS8qIDEyOC1iaXQgdXVpZCBmb3Igdm9sdW1lICovCisrICAgIGNoYXIgIHNfdm9sdW1lX25hbWVbMTZdOwkvKiB2b2x1bWUgbmFtZSAqLworKyAgICBjaGFyICBzX2xhc3RfbW91bnRlZFs2NF07CS8qIGRpcmVjdG9yeSB3aGVyZSBsYXN0IG1vdW50ZWQgKi8KKysgICAgX191MzIgc19hbGdvcml0aG1fdXNhZ2VfYml0bWFwOyAvKiBGb3IgY29tcHJlc3Npb24gKi8KKysgICAgLyoKKysgICAgICogUGVyZm9ybWFuY2UgaGludHMuICBEaXJlY3RvcnkgcHJlYWxsb2NhdGlvbiBzaG91bGQgb25seQorKyAgICAgKiBoYXBwZW4gaWYgdGhlIEVYVDJfRkVBVFVSRV9DT01QQVRfRElSX1BSRUFMTE9DIGZsYWcgaXMgb24uCisrICAgICAqLworKyAgICBfX3U4ICBzX3ByZWFsbG9jX2Jsb2NrczsJLyogTnIgb2YgYmxvY2tzIHRvIHRyeSB0byBwcmVhbGxvY2F0ZSovCisrICAgIF9fdTggIHNfcHJlYWxsb2NfZGlyX2Jsb2NrczsJLyogTnIgdG8gcHJlYWxsb2NhdGUgZm9yIGRpcnMgKi8KKysgICAgX191MTYgc19yZXNlcnZlZF9nZHRfYmxvY2tzOy8qIFBlciBncm91cCB0YWJsZSBmb3Igb25saW5lIGdyb3d0aCAqLworKyAgICAvKgorKyAgICAgKiBKb3VybmFsaW5nIHN1cHBvcnQgdmFsaWQgaWYgRVhUMl9GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCBzZXQuCisrICAgICAqLworKyAgICBfX3U4IHNfam91cm5hbF91dWlkWzE2XTsJLyogdXVpZCBvZiBqb3VybmFsIHN1cGVyYmxvY2sgKi8KKysgICAgX191MzIgc19qb3VybmFsX2ludW07CS8qIGlub2RlIG51bWJlciBvZiBqb3VybmFsIGZpbGUgKi8KKysgICAgX191MzIgc19qb3VybmFsX2RldjsJLyogZGV2aWNlIG51bWJlciBvZiBqb3VybmFsIGZpbGUgKi8KKysgICAgX191MzIgc19sYXN0X29ycGhhbjsJLyogc3RhcnQgb2YgbGlzdCBvZiBpbm9kZXMgdG8gZGVsZXRlICovCisrICAgIF9fdTMyIHNfaGFzaF9zZWVkWzRdOwkvKiBIVFJFRSBoYXNoIHNlZWQgKi8KKysgICAgX191OCAgc19kZWZfaGFzaF92ZXJzaW9uOwkvKiBEZWZhdWx0IGhhc2ggdmVyc2lvbiB0byB1c2UgKi8KKysgICAgX191OCAgc19qbmxfYmFja3VwX3R5cGU7IAkvKiBEZWZhdWx0IHR5cGUgb2Ygam91cm5hbCBiYWNrdXAgKi8KKysgICAgX191MTYgc19yZXNlcnZlZF93b3JkX3BhZDsKKysgICAgX191MzIgc19kZWZhdWx0X21vdW50X29wdHM7CisrICAgIF9fdTMyIHNfZmlyc3RfbWV0YV9iZzsJLyogRmlyc3QgbWV0YWJsb2NrIGdyb3VwICovCisrICAgIF9fdTMyIHNfbWtmc190aW1lOwkJLyogV2hlbiB0aGUgZmlsZXN5c3RlbSB3YXMgY3JlYXRlZCAqLworKyAgICBfX3UzMiBzX2pubF9ibG9ja3NbMTddOyAJLyogQmFja3VwIG9mIHRoZSBqb3VybmFsIGlub2RlICovCisrICAgIF9fdTMyIHNfcmVzZXJ2ZWRbMTcyXTsJLyogUGFkZGluZyB0byB0aGUgZW5kIG9mIHRoZSBibG9jayAqLworICAgfTsKKyAKKyBzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjCitAQCAtMjE4LDYgKzI2MywxNCBAQAorICNkZWZpbmUgRVhUMl9BRERSX1BFUl9CTE9DSyhzKSAgICAgICAgICAoRVhUMl9CTE9DS19TSVpFKHMpIC8gc2l6ZW9mIChfX3UzMikpCisgI2RlZmluZSBFWFQyX0FERFJfUEVSX0JMT0NLX0JJVFMocykJCShsb2cyKEVYVDJfQUREUl9QRVJfQkxPQ0socykpKQorIAorKyNkZWZpbmUgRVhUMl9HT09EX09MRF9SRVYgICAwICAgLyogVGhlIGdvb2Qgb2xkIChvcmlnaW5hbCkgZm9ybWF0ICovCisrI2RlZmluZSBFWFQyX0RZTkFNSUNfUkVWICAgIDEgICAvKiBWMiBmb3JtYXQgdy8gZHluYW1pYyBpbm9kZSBzaXplcyAqLworKyNkZWZpbmUgRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFIDEyOAorKyNkZWZpbmUgRVhUMl9JTk9ERV9TSVpFKHMpICAoKChzKS0+c19yZXZfbGV2ZWwgPT0gRVhUMl9HT09EX09MRF9SRVYpID8gXAorKyAgICAgICAgICAgICAgICAgRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFIDogXAorKyAgICAgICAgICAgICAgICAgKHMpLT5zX2lub2RlX3NpemUpCisrI2RlZmluZSBFWFQyX0lOT0RFU19QRVJfQkxPQ0socykJKEVYVDJfQkxPQ0tfU0laRShzKS9FWFQyX0lOT0RFX1NJWkUocykpCisrCisgLyogbGludXgvZXh0Ml9mcy5oICovCisgI2RlZmluZSBFWFQyX0JMT0NLX1NJWkVfQklUUyhzKSAgICAgICAgKChzKS0+c19sb2dfYmxvY2tfc2l6ZSArIDEwKQorIC8qIGtpbmQgb2YgZnJvbSBleHQyL3N1cGVyLmMgKi8KK0BAIC01NTMsNyArNjA2LDcgQEAKKyAgICAgICBnZHAgPSBHUk9VUF9ERVNDOworICAgICAgIGlub19ibGsgPSBnZHBbZGVzY10uYmdfaW5vZGVfdGFibGUgKworIAkoKChjdXJyZW50X2lubyAtIDEpICUgKFNVUEVSQkxPQ0stPnNfaW5vZGVzX3Blcl9ncm91cCkpCistCSA+PiBsb2cyIChFWFQyX0JMT0NLX1NJWkUgKFNVUEVSQkxPQ0spIC8gc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9pbm9kZSkpKTsKKysJID4+IGxvZzIgKEVYVDJfSU5PREVTX1BFUl9CTE9DSyAoU1VQRVJCTE9DSykpKTsKKyAjaWZkZWYgRTJERUJVRworICAgICAgIHByaW50ZiAoImlub2RlIHRhYmxlIGZzYmxvY2s9JWRcbiIsIGlub19ibGspOworICNlbmRpZiAvKiBFMkRFQlVHICovCitAQCAtNTY1LDEzICs2MTgsMTIgQEAKKyAgICAgICAvKiByZXNldCBpbmRpcmVjdCBibG9ja3MhICovCisgICAgICAgbWFwYmxvY2syID0gbWFwYmxvY2sxID0gLTE7CisgCistICAgICAgcmF3X2lub2RlID0gSU5PREUgKworLQkoKGN1cnJlbnRfaW5vIC0gMSkKKy0JICYgKEVYVDJfQkxPQ0tfU0laRSAoU1VQRVJCTE9DSykgLyBzaXplb2YgKHN0cnVjdCBleHQyX2lub2RlKSAtIDEpKTsKKysgICAgICByYXdfaW5vZGUgPSAoc3RydWN0IGV4dDJfaW5vZGUgKikoKGNoYXIgKilJTk9ERSArCisrCSgoY3VycmVudF9pbm8gLSAxKSAmIChFWFQyX0lOT0RFU19QRVJfQkxPQ0sgKFNVUEVSQkxPQ0spIC0gMSkpICoKKysJRVhUMl9JTk9ERV9TSVpFIChTVVBFUkJMT0NLKSk7CisgI2lmZGVmIEUyREVCVUcKKyAgICAgICBwcmludGYgKCJpcGI9JWQsIHNpemVvZihpbm9kZSk9JWRcbiIsCistCSAgICAgIChFWFQyX0JMT0NLX1NJWkUgKFNVUEVSQkxPQ0spIC8gc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9pbm9kZSkpLAorLQkgICAgICBzaXplb2YgKHN0cnVjdCBleHQyX2lub2RlKSk7CisrCSAgICAgIEVYVDJfSU5PREVTX1BFUl9CTE9DSyAoU1VQRVJCTE9DSyksIEVYVDJfSU5PREVfU0laRSAoU1VQRVJCTE9DSykpOworICAgICAgIHByaW50ZiAoImlub2RlPSV4LCByYXdfaW5vZGU9JXhcbiIsIElOT0RFLCByYXdfaW5vZGUpOworICAgICAgIHByaW50ZiAoIm9mZnNldCBpbnRvIGlub2RlIHRhYmxlIGJsb2NrPSVkXG4iLCAoaW50KSByYXdfaW5vZGUgLSAoaW50KSBJTk9ERSk7CisgICAgICAgZm9yIChpID0gKHVuc2lnbmVkIGNoYXIgKikgSU5PREU7IGkgPD0gKHVuc2lnbmVkIGNoYXIgKikgcmF3X2lub2RlOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L2dydWJfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L2dydWJfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZjdkYzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvZ3J1Yl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSw3NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1N1YmplY3Q6IFtQQVRDSF0gZ3J1YjogZml4IGZvciBhdXRvbWFrZS0xLjEyCisKK2F1dG9tYWtlIDEuMTIgaGFzIGRlcHJpY2F0ZWQgYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydAorCit0aGlzIHBhdGNoIGF2b2lkcyB0aGVzZSBraW5kcyBvZiBlcnJvcnM6CisKK3wgc3RhZ2UxL01ha2VmaWxlLmFtOjI6IGVycm9yOiAncGtnbGliZGlyJyBpcyBub3QgYSBsZWdpdGltYXRlIGRpcmVjdG9yeSBmb3IgJ0RBVEEnCit8IHN0YWdlMi9NYWtlZmlsZS5hbTozNTogZXJyb3I6ICdwa2dsaWJkaXInIGlzIG5vdCBhIGxlZ2l0aW1hdGUgZGlyZWN0b3J5IGZvciAnREFUQScKK3wgc3RhZ2UyL01ha2VmaWxlLmFtOjQ2OiBlcnJvcjogJ3BrZ2xpYmRpcicgaXMgbm90IGEgbGVnaXRpbWF0ZSBkaXJlY3RvcnkgZm9yICdEQVRBJworfCBhdXRvcmVjb25mOiBhdXRvbWFrZSBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorfCBFUlJPUjogYXV0b3JlY29uZiBleGVjdXRpb24gZmFpbGVkLgorCitUaGUgdXBzdHJlYW0gc3RhdHVzIGlzIG1hcmtlZCBhcyAnSW5hcHByb3ByaWF0ZScgYmVjYXVzZSB0aGlzIHByb2JsZW0gaXMgbm90IHVuY29tbW9uLAoraXQgaGFzIGJlZW4gdGhlcmUgZm9yIGEgbG9uZyB0aW1lIGFuZCBubyBjaGFuZ2UgaW4gdXBzdHJlYW0uCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKworSW5kZXg6IGdydWItMC45Ny9zdGFnZTEvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL3N0YWdlMS9NYWtlZmlsZS5hbQorKysrIGIvc3RhZ2UxL01ha2VmaWxlLmFtCitAQCAtMSw3ICsxLDcgQEAKKy1wa2dsaWJkaXIgPSAkKGxpYmRpcikvJChQQUNLQUdFKS8kKGhvc3RfY3B1KS0kKGhvc3RfdmVuZG9yKQorLW5vZGlzdF9wa2dsaWJfREFUQSA9IHN0YWdlMQorK3BrZ2RhdGFkaXIgPSAkKGxpYmRpcikvJChQQUNLQUdFKS8kKGhvc3RfY3B1KS0kKGhvc3RfdmVuZG9yKQorK25vZGlzdF9wa2dkYXRhX0RBVEEgPSBzdGFnZTEKKyAKKy1DTEVBTkZJTEVTID0gJChub2Rpc3RfcGtnbGliX0RBVEEpCisrQ0xFQU5GSUxFUyA9ICQobm9kaXN0X3BrZ2RhdGFfREFUQSkKKyAKKyAjIFdlIGNhbid0IHVzZSBidWlsdGlucyBvciBzdGFuZGFyZCBpbmNsdWRlcy4KKyBBTV9DQ0FTRkxBR1MgPSAkKFNUQUdFMV9DRkxBR1MpIC1mbm8tYnVpbHRpbiAtbm9zdGRpbmMKK0luZGV4OiBncnViLTAuOTcvc3RhZ2UyL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9zdGFnZTIvTWFrZWZpbGUuYW0KKysrKyBiL3N0YWdlMi9NYWtlZmlsZS5hbQorQEAgLTI3LDEyICsyNywxMiBAQCBsaWJncnViX2FfQ0ZMQUdTID0gJChHUlVCX0NGTEFHUykgLUkkKHRvcF9zcmNkaXIpL2xpYiBcCisgCS1EVVNFX01ENV9QQVNTV09SRFM9MSAtRFNVUFBPUlRfU0VSSUFMPTEgLURTVVBQT1JUX0hFUkNVTEVTPTEKKyAKKyAjIFN0YWdlIDIgYW5kIFN0YWdlIDEuNSdzLgorLXBrZ2xpYmRpciA9ICQobGliZGlyKS8kKFBBQ0tBR0UpLyQoaG9zdF9jcHUpLSQoaG9zdF92ZW5kb3IpCisrcGtnZGF0YWRpciA9ICQobGliZGlyKS8kKFBBQ0tBR0UpLyQoaG9zdF9jcHUpLSQoaG9zdF92ZW5kb3IpCisgCisgRVhUUkFfUFJPR1JBTVMgPSBuYmxvYWRlci5leGVjIHB4ZWxvYWRlci5leGVjIGRpc2tsZXNzLmV4ZWMKKyAKKyBpZiBESVNLTEVTU19TVVBQT1JUCistcGtnbGliX0RBVEEgPSBzdGFnZTIgc3RhZ2UyX2VsdG9yaXRvIGUyZnNfc3RhZ2UxXzUgZmF0X3N0YWdlMV81IFwKKytwa2dkYXRhX0RBVEEgPSBzdGFnZTIgc3RhZ2UyX2VsdG9yaXRvIGUyZnNfc3RhZ2UxXzUgZmF0X3N0YWdlMV81IFwKKyAJZmZzX3N0YWdlMV81IGlzbzk2NjBfc3RhZ2UxXzUgamZzX3N0YWdlMV81IG1pbml4X3N0YWdlMV81IFwKKyAJcmVpc2VyZnNfc3RhZ2UxXzUgdWZzMl9zdGFnZTFfNSB2c3RhZnNfc3RhZ2UxXzUgeGZzX3N0YWdlMV81IFwKKyAJbmJncnViIHB4ZWdydWIKK0BAIC00Myw3ICs0Myw3IEBAIG5vaW5zdF9QUk9HUkFNUyA9IHByZV9zdGFnZTIuZXhlYyBzdGFydC5leGVjIHN0YXJ0X2VsdG9yaXRvLmV4ZWMgXAorIAlyZWlzZXJmc19zdGFnZTFfNS5leGVjIHVmczJfc3RhZ2UxXzUuZXhlYyB2c3RhZnNfc3RhZ2UxXzUuZXhlYyBcCisgCXhmc19zdGFnZTFfNS5leGVjIG5ibG9hZGVyLmV4ZWMgcHhlbG9hZGVyLmV4ZWMgZGlza2xlc3MuZXhlYworIGVsc2UKKy1wa2dsaWJfREFUQSA9IHN0YWdlMiBzdGFnZTJfZWx0b3JpdG8gZTJmc19zdGFnZTFfNSBmYXRfc3RhZ2UxXzUgXAorK3BrZ2RhdGFfREFUQSA9IHN0YWdlMiBzdGFnZTJfZWx0b3JpdG8gZTJmc19zdGFnZTFfNSBmYXRfc3RhZ2UxXzUgXAorIAlmZnNfc3RhZ2UxXzUgaXNvOTY2MF9zdGFnZTFfNSBqZnNfc3RhZ2UxXzUgbWluaXhfc3RhZ2UxXzUgXAorIAlyZWlzZXJmc19zdGFnZTFfNSB1ZnMyX3N0YWdlMV81IHZzdGFmc19zdGFnZTFfNSB4ZnNfc3RhZ2UxXzUKKyBub2luc3RfREFUQSA9IHByZV9zdGFnZTIgc3RhcnQgc3RhcnRfZWx0b3JpdG8KK0BAIC0xMDUsNyArMTA1LDcgQEAgZWxzZQorIEJVSUxUX1NPVVJDRVMgPSBzdGFnZTJfc2l6ZS5oCisgZW5kaWYKKyAKKy1DTEVBTkZJTEVTID0gJChwa2dsaWJfREFUQSkgJChub2luc3RfREFUQSkgJChCVUlMVF9TT1VSQ0VTKQorK0NMRUFORklMRVMgPSAkKHBrZ2RhdGFfREFUQSkgJChub2luc3RfREFUQSkgJChCVUlMVF9TT1VSQ0VTKQorIAorIHN0YWdlMl9zaXplLmg6IHByZV9zdGFnZTIKKyAJLXJtIC1mIHN0YWdlMl9zaXplLmgKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvbm8tcmVvcmRlci1mdW5jdGlvbnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvbm8tcmVvcmRlci1mdW5jdGlvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAwMzdlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9uby1yZW9yZGVyLWZ1bmN0aW9ucy5wYXRjaApAQCAtMCwwICsxLDMxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworQWZ0ZXIgdGhlIGNvbW1pdCAidGNtb2RlLWRlZmF1bHQ6IHN3aXRjaCB0byBnY2MgNC42LjAgZm9yIHg4NiwgeDg2LTY0ICYgYXJtIiwKK3dlIGdvdCBidWcgMTA5OSAoaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTkpOgorCitSdW5uaW5nICJpbnN0YWxsIC0tc3RhZ2UyPS9zc2QvYm9vdC9ncnViL3N0YWdlMiAvYm9vdC9ncnViL3N0YWdlMShoZDApCisgICAgIC9ib290L2dydWIvc3RhZ2UyIHAgL2Jvb3QvZ3J1Yi9tZW51IGxpc3QiIGZhaWxlZAorRXJyb3IgNjogTWlzbWF0Y2hlZCBvciBjb3JydXB0IHZlcnNpb24gb2Ygc3RhZ2UxL3N0YWdlMgorCitUaGlzIHR1cm5lZCBvdXQgdG8gYmUgYSBnY2MncyBidWcuIFNlZQoraHR0cHM6Ly9idWdzLmdlbnRvby5vcmcvc2hvd19idWcuY2dpP2lkPTM2MDUxMworaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0zOTMzMworCitVcHN0cmVhbSBnY2Mgc2VlbXMgdW5pbnRlcmVzdGVkIGluIHRoZSBidWcsIHNvIGF0IHByZXNlbnQgd2UgY2FuIGRpc2FibGUgdGhlCitvcHRpb24gYXMgYSB3b3JrYXJvdW5kLiBUaGFua3MgUnlhbiBIaWxsIGZvciB0aGUgaW52ZXN0aWdhdGlvbiBhbmQgdGhlCit3b3JrYXJvdW5kIHBhdGNoLgorCitEZXh1YW4gQ3VpIDxkZXh1YW4uY3VpQGludGVsLmNvbT4KK1dlZCBKdW4gMjkgMjA6MjE6MzkgQ1NUIDIwMTEKKworLS0tIGdydWItMC45Ny9zdGFnZTIvTWFrZWZpbGUuYW0ub3JpZworKysrIGdydWItMC45Ny9zdGFnZTIvTWFrZWZpbGUuYW0KK0BAIC03OSw3ICs3OSw3IEBACisgSEVSQ1VMRVNfRkxBR1MgPQorIGVuZGlmCisgCistU1RBR0UyX0NPTVBJTEUgPSAkKFNUQUdFMl9DRkxBR1MpIC1mbm8tYnVpbHRpbiAtbm9zdGRpbmMgXAorK1NUQUdFMl9DT01QSUxFID0gJChTVEFHRTJfQ0ZMQUdTKSAtZm5vLXJlb3JkZXItZnVuY3Rpb25zIC1mbm8tYnVpbHRpbiAtbm9zdGRpbmMgXAorIAkkKE5FVEJPT1RfRkxBR1MpICQoU0VSSUFMX0ZMQUdTKSAkKEhFUkNVTEVTX0ZMQUdTKQorIAorIFNUQUdFMV81X0xJTksgPSAtbm9zdGRsaWIgLVdsLC1OIC1XbCwtVHRleHQgLVdsLDIwMDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9vYmpjb3B5LWFic29sdXRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L29iamNvcHktYWJzb2x1dGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ4ZTBhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9vYmpjb3B5LWFic29sdXRlLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKKworVGhpcyBwYXRjaCBpcyBmcm9tIHVidW50dToKKyAgKiBvYmpjb3B5LWFic29sdXRlLmRpZmYgKHVwZGF0ZSk6IFJlbW92ZSAubm90ZSwgLmNvbW1lbnQsIGFuZAorICAgIC5ub3RlLmdudS5idWlsZC1pZCBzZWN0aW9ucyBmcm9tIGltYWdlcyAoTFA6ICM0NDQ3MDMpLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW25vIGxvbmdlciBtYWludGFpbmVkXQorCitJbmRleDogYi9hY2luY2x1ZGUubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL2FjaW5jbHVkZS5tNAorKysrIGIvYWNpbmNsdWRlLm00CitAQCAtNjEsNyArNjEsNyBAQAorICAgZWxzZQorICAgICBBQ19NU0dfRVJST1IoWyR7Q0MtY2N9IGNhbm5vdCBsaW5rIGF0IGFkZHJlc3MgJGxpbmtfYWRkcl0pCisgICBmaQorLSAgaWYgQUNfVFJZX0NPTU1BTkQoWyR7T0JKQ09QWS1vYmpjb3B5fSAtTyBiaW5hcnkgY29uZnRlc3QuZXhlYyBjb25mdGVzdF0pOyB0aGVuIDoKKysgIGlmIEFDX1RSWV9DT01NQU5EKFske09CSkNPUFktb2JqY29weX0gLS1vbmx5LXNlY3Rpb249LnRleHQgLU8gYmluYXJ5IGNvbmZ0ZXN0LmV4ZWMgY29uZnRlc3RdKTsgdGhlbiA6CisgICBlbHNlCisgICAgIEFDX01TR19FUlJPUihbJHtPQkpDT1BZLW9iamNvcHl9IGNhbm5vdCBjcmVhdGUgYmluYXJ5IGZpbGVzXSkKKyAgIGZpCitJbmRleDogYi9zdGFnZTEvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL3N0YWdlMS9NYWtlZmlsZS5hbQorKysrIGIvc3RhZ2UxL01ha2VmaWxlLmFtCitAQCAtMTIsNCArMTIsNCBAQAorCisgU1VGRklYRVMgPSAuZXhlYworIC5leGVjOgorLQkkKE9CSkNPUFkpIC1PIGJpbmFyeSAkPCAkQAorKwkkKE9CSkNPUFkpIC1PIGJpbmFyeSAtUiAubm90ZSAtUiAuY29tbWVudCAtUiAubm90ZS5nbnUuYnVpbGQtaWQgJDwgJEAKK0luZGV4OiBiL3N0YWdlMi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvc3RhZ2UyL01ha2VmaWxlLmFtCisrKysgYi9zdGFnZTIvTWFrZWZpbGUuYW0KK0BAIC0yOTMsNCArMjkzLDQgQEAKKyAjIEdlbmVyYWwgcnVsZSBmb3IgbWFraW5nIGEgcmF3IGJpbmFyeS4KKyBTVUZGSVhFUyA9IC5leGVjCisgLmV4ZWM6CistCSQoT0JKQ09QWSkgLU8gYmluYXJ5ICQ8ICRACisrCSQoT0JKQ09QWSkgLU8gYmluYXJ5IC1SIC5ub3RlIC1SIC5jb21tZW50IC1SIC5ub3RlLmdudS5idWlsZC1pZCAkPCAkQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi1lZmlfMi4wMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItZWZpXzIuMDAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I0NGVhYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItZWZpXzIuMDAuYmIKQEAgLTAsMCArMSw2NiBAQAorcmVxdWlyZSBncnViMi5pbmMKKworREVQRU5EU19jbGFzcy10YXJnZXQgPSAiZ3J1Yi1lZmktbmF0aXZlIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtdGFyZ2V0ID0gImRpZmZ1dGlscyBmcmVldHlwZSIKK1BSID0gInIzIgorCitTUkNfVVJJICs9ICIgXAorICAgICAgICAgICBmaWxlOi8vY2ZnIFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9ncnViLSR7UFZ9IgorCisjIERldGVybWluZSB0aGUgdGFyZ2V0IGFyY2ggZm9yIHRoZSBncnViIG1vZHVsZXMKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgaW1wb3J0IHJlCisgICAgdGFyZ2V0ID0gZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkKKyAgICBpZiB0YXJnZXQgPT0gIng4Nl82NCI6CisgICAgICAgIGdydWJ0YXJnZXQgPSAneDg2XzY0JworICAgICAgICBncnViaW1hZ2UgPSAiYm9vdHg2NC5lZmkiCisgICAgZWxpZiByZS5tYXRjaCgnaS44NicsIHRhcmdldCk6CisgICAgICAgIGdydWJ0YXJnZXQgPSAnaTM4NicKKyAgICAgICAgZ3J1YmltYWdlID0gImJvb3RpYTMyLmVmaSIKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiZ3J1Yi1lZmkgaXMgaW5jb21wYXRpYmxlIHdpdGggdGFyZ2V0ICVzIiAlIHRhcmdldCkKKyAgICBkLnNldFZhcigiR1JVQl9UQVJHRVQiLCBncnVidGFyZ2V0KQorICAgIGQuc2V0VmFyKCJHUlVCX0lNQUdFIiwgZ3J1YmltYWdlKQorfQorCitpbmhlcml0IGRlcGxveQorCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9IRUxQMk1BTj0iCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXBsYXRmb3JtPWVmaSAtLWRpc2FibGUtZ3J1Yi1ta2ZvbnQgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWVmaWVtdT1ubyAtLXByb2dyYW0tcHJlZml4PScnIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1saWJsem1hPW5vIC0tZW5hYmxlLWRldmljZS1tYXBwZXI9bm8gLS1lbmFibGUtbGliemZzPW5vIgorCitkb19pbnN0YWxsX2NsYXNzLW5hdGl2ZSgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDc1NSBncnViLW1raW1hZ2UgJHtEfSR7YmluZGlyfQorfQorCitHUlVCX0JVSUxESU4gPz0gImJvb3QgbGludXggZXh0MiBmYXQgc2VyaWFsIHBhcnRfbXNkb3MgcGFydF9ncHQgbm9ybWFsIGVmaV9nb3AgaXNvOTY2MCBzZWFyY2giCisKK2RvX2RlcGxveSgpIHsKKwkjIFNlYXJjaCBmb3IgdGhlIGdydWIuY2ZnIG9uIHRoZSBsb2NhbCBib290IG1lZGlhIGJ5IHVzaW5nIHRoZQorCSMgYnVpbHQgaW4gY2ZnIGZpbGUgcHJvdmlkZWQgdmlhIHRoaXMgcmVjaXBlCisJZ3J1Yi1ta2ltYWdlIC1jIC4uL2NmZyAtcCAvRUZJL0JPT1QgLWQgLi9ncnViLWNvcmUvIFwKKwkgICAgICAgICAgICAgICAtTyAke0dSVUJfVEFSR0VUfS1lZmkgLW8gLi8ke0dSVUJfSU1BR0V9IFwKKwkgICAgICAgICAgICAgICAke0dSVUJfQlVJTERJTn0KKwlpbnN0YWxsIC1tIDY0NCAke0J9LyR7R1JVQl9JTUFHRX0gJHtERVBMT1lESVJ9Cit9CisKK2RvX2RlcGxveV9jbGFzcy1uYXRpdmUoKSB7CisJOgorfQorCithZGR0YXNrIGRlcGxveSBhZnRlciBkb19pbnN0YWxsIGJlZm9yZSBkb19idWlsZAorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9ncnViLyR7R1JVQl9UQVJHRVR9LWVmaS8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgIC9ib290L2VmaS9FRkkvQk9PVC8ke0dSVUJfVEFSR0VUfS1lZmkvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9ncnViLyR7R1JVQl9UQVJHRVR9LWVmaSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9ncnViIFwKKyAgICAgICAgICAgICAgICAiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViL2F1dG9nZW4uc2gtZXhjbHVkZS1wYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIvYXV0b2dlbi5zaC1leGNsdWRlLXBjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNWFhNGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViL2F1dG9nZW4uc2gtZXhjbHVkZS1wYy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIGZmOGY2OGNjNDhmZDNjMzBkNTVlMWQ1NzBkNTFmMmUwOTUyYzk2OGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFNhdCwgMjUgSmFuIDIwMTQgMjM6NDk6NDQgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gYXV0b2dlbi5zaDogZXhjbHVkZSAucGMgZnJvbSBwby9QT1RGSUxFUy5pbgorCitFeGNsdWRlIHRoZSAucGMgZnJvbSBwby9QT1RGSUxFUy5pbiBzaW5jZSBxdWlsdCB1c2VzICJwYXRjaCAtLWJhY2t1cCIsCit3aGljaCB3aWxsIGNyZWF0ZSB0aGUgYmFja3VwIGZpbGUgdW5kZXIgLnBjLCB0aGlzIG1heSBjYXVzZSB1bmV4cGVjdGVkCitlcnJvcnMsIGZvciBleGFtcGxlLCBvbiBDZW50T1MgNS54LCBpZiB0aGUgYmFja3VwIGZpbGUgaXMgbnVsbAorKG5ld2ZpbGUpLCBpdCdzIG1vZGUgd2lsbCBiZSAwMDAsIHRoZW4gd2Ugd2lsbCBnZXQgZXJyb3JzIHdoZW4geGdldHRleHQKK3RyeSB0byByZWFkIGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGF1dG9nZW4uc2ggfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9hdXRvZ2VuLnNoIGIvYXV0b2dlbi5zaAoraW5kZXggNzQyNDQyOC4uODQzNjE5ZSAxMDA3NTUKKy0tLSBhL2F1dG9nZW4uc2gKKysrKyBiL2F1dG9nZW4uc2gKK0BAIC01LDcgKzUsNyBAQCBzZXQgLWUKKyBleHBvcnQgTENfQ09MTEFURT1DCisgdW5zZXQgTENfQUxMCisgCistZmluZCAuIC1pbmFtZSAnKi5bY2hdJyAhIC1pcGF0aCAnLi9ncnViLWNvcmUvbGliL2xpYmdjcnlwdC1ncnViLyonICEgLWlwYXRoICcuL2J1aWxkLWF1eC8qJyAhIC1pcGF0aCAnLi9ncnViLWNvcmUvbGliL2xpYmdjcnlwdC9zcmMvbWlzYy5jJyAhIC1pcGF0aCAnLi9ncnViLWNvcmUvbGliL2xpYmdjcnlwdC9zcmMvZ2xvYmFsLmMnICEgLWlwYXRoICcuL2dydWItY29yZS9saWIvbGliZ2NyeXB0L3NyYy9zZWNtZW0uYycgICEgLWlwYXRoICcuL3V0aWwvZ3J1Yi1nZW4td2lkdGhzcGVjLmMnICEgLWlwYXRoICcuL3V0aWwvZ3J1Yi1nZW4tYXNjaWloLmMnIHxzb3J0ID4gcG8vUE9URklMRVMuaW4KKytmaW5kIC4gLWluYW1lICcqLltjaF0nICEgLWlwYXRoICcuL2dydWItY29yZS9saWIvbGliZ2NyeXB0LWdydWIvKicgISAtaXBhdGggJy4vYnVpbGQtYXV4LyonICEgLWlwYXRoICcuL2dydWItY29yZS9saWIvbGliZ2NyeXB0L3NyYy9taXNjLmMnICEgLWlwYXRoICcuL2dydWItY29yZS9saWIvbGliZ2NyeXB0L3NyYy9nbG9iYWwuYycgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQvc3JjL3NlY21lbS5jJyAgISAtaXBhdGggJy4vdXRpbC9ncnViLWdlbi13aWR0aHNwZWMuYycgISAtaXBhdGggJy4vdXRpbC9ncnViLWdlbi1hc2NpaWguYycgISAtcGF0aCAnLi8ucGMvKicgfCBzb3J0ID4gcG8vUE9URklMRVMuaW4KKyBmaW5kIHV0aWwgLWluYW1lICcqLmluJyAhIC1uYW1lIE1ha2VmaWxlLmluICB8c29ydCA+IHBvL1BPVEZJTEVTLXNoZWxsLmluCisgCisgZWNobyAiSW1wb3J0aW5nIHVuaWNvZGUuLi4iCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIyLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTI3NzFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1YjIuaW5jCkBAIC0wLDAgKzEsNTEgQEAKK1NVTU1BUlkgPSAiR1JVQjIgaXMgdGhlIG5leHQtZ2VuZXJhdGlvbiBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIiCisKK0RFU0NSSVBUSU9OID0gIkdSVUIyIGlzIHRoZSBuZXh0IGdlbmVyYWlvbiBvZiBhIEdQTGVkIGJvb3Rsb2FkZXIgXAoraW50ZW5kZWQgdG8gdW5pZnkgYm9vdGxvYWRpbmcgYWNyb3NzIHg4NiBvcGVyYXRpbmcgc3lzdGVtcy4gSW4gXAorYWRkaXRpb24gdG8gbG9hZGluZyB0aGUgTGludXgga2VybmVsLCBpdCBpbXBsZW1lbnRzIHRoZSBNdWx0aWJvb3QgXAorc3RhbmRhcmQsIHdoaWNoIGFsbG93cyBmb3IgZmxleGlibGUgbG9hZGluZyBvZiBtdWx0aXBsZSBib290IGltYWdlcy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ncnViLyIKK1NFQ1RJT04gPSAiYm9vdGxvYWRlcnMiCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvZ3J1Yi9ncnViLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLTIuMDAtZnBtYXRoLXNzZS0zODctZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NoZWNrLWlmLWxpYmx6bWEtaXMtZGlzYWJsZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWlzc3VlLXdpdGgtZmxleC0yLjUuMzcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi0yLjAwLWFkZC1vZS1rZXJuZWwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi1pbnN0YWxsLmluLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS1nZXRzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1lbmRpYW5uZXNzLXByb2JsZW0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1YjItcmVtb3ZlLXNwYXJjNjQtc2V0dXAtZnJvbS14ODYtYnVpbGRzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dydWItMi4wMC1maXgtZW5hYmxlX2V4ZWN1dGVfc3RhY2stY2hlY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi1uby11bnVzZWQtcmVzdWx0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dydWItZWZpLWFsbG93LWEtY29tcGlsYXRpb24td2l0aG91dC1tY21vZGVsLWxhcmdlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dydWItZWZpLWZpeC13aXRoLWdsaWJjLTIuMjAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBhcnNlX2RoY3BfdmVuZG9yLUFkZC1taXNzaW5nLWNvbnN0LXF1YWxpZmllcnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1YjItZml4LWluaXRyZC1zaXplLWJ1Zy5wYXRjaCBcCisgICAgICAgICAgICAiCisKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIHh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTkyNzU0MGI2ZWRhOGIwMjRmYjAzOTFlZWFhNDA5MWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjViMzlhMDU1OGY4YzgwMjIwOWM1NzRmNGQwMmNhMjYzYTgwNGU4YTU2NGJjNmNhZjFjZDBmZDNiM2NjMTFlMyIKKworQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjQuKnxpLjg2LiopLShsaW51eHxmcmVlYnNkLiopJworCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbZ3J1Yi1tb3VudF0gPSAiLS1lbmFibGUtZ3J1Yi1tb3VudCwtLWRpc2FibGUtZ3J1Yi1tb3VudCxmdXNlIgorUEFDS0FHRUNPTkZJR1tkZXZpY2UtbWFwcGVyXSA9ICItLWVuYWJsZS1kZXZpY2UtbWFwcGVyLC0tZGlzYWJsZS1kZXZpY2UtbWFwcGVyLGx2bTIiCisKKyMgZ3J1YiBhbmQgZ3J1Yi1lZmkncyBzeXNyb290LyR7ZGF0YWRpcn0vZ3J1Yi9ncnViLW1rY29uZmlnX2xpYiBhcmUKKyMgY29uZmxpY3RlZCwgcmVtb3ZlIGl0IHNpbmNlIG5vIG9uZSB1c2VzIGl0LgorU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTX2NsYXNzLXRhcmdldCArPSAicmVtb3ZlX3N5c3Jvb3RfbWtjb25maWdfbGliIgorcmVtb3ZlX3N5c3Jvb3RfbWtjb25maWdfbGliKCkgeworICAgIHJtIC1yICIke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9L2dydWIvZ3J1Yi1ta2NvbmZpZ19saWIiCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfMC45Ny5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfMC45Ny5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTdhMDQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8wLjk3LmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiR1JVQiBpcyB0aGUgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyIgorREVTQ1JJUFRJT04gPSAiR1JVQiBpcyBhIEdQTGVkIGJvb3Rsb2FkZXIgaW50ZW5kZWQgdG8gdW5pZnkgYm9vdGxvYWRpbmcgYWNyb3NzIHg4NiBcCitvcGVyYXRpbmcgc3lzdGVtcy4gSW4gYWRkaXRpb24gdG8gbG9hZGluZyB0aGUgTGludXgga2VybmVsLCBpdCBpbXBsZW1lbnRzIHRoZSBNdWx0aWJvb3QgXAorc3RhbmRhcmQsIHdoaWNoIGFsbG93cyBmb3IgZmxleGlibGUgbG9hZGluZyBvZiBtdWx0aXBsZSBib290IGltYWdlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ3J1Yi8iCitTRUNUSU9OID0gImJvb3Rsb2FkZXJzIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM5M2MwNTUwYmQzMTczZjQ1MDRiMmNiZDg5OTFlNTBiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dydWIvbWFpbi5jO2JlZ2lubGluZT0zO2VuZGxpbmU9OTttZDU9MjJhNWYyOGQyMTMwZmZmOWYyYTE3ZWQ1NGJlOTBlZDYiCisKK1JERVBFTkRTXyR7UE59ID0gImRpZmZ1dGlscyIKK1BSID0gInI2IgorCitTUkNfVVJJID0gImZ0cDovL2FscGhhLmdudS5vcmcvZ251L2dydWIvZ3J1Yi0ke1BWfS50YXIuZ3o7IFwKKyAgICAgICAgICAgZmlsZTovL25vLXJlb3JkZXItZnVuY3Rpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2F1dG9oZWxsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dydWJfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL29iamNvcHktYWJzb2x1dGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi1zdXBwb3J0LTI1NmJ5dGUtaW5vZGUucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2QzZjNlYjU0NDQ2YmU2MDAzMTU2MTU4ZDUxZjQ4ODQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGUxZDE1ZDEyZGJkM2U5MjA4MTExZDZiODA2YWQ1YTk4NTdjYTg4NTBjNDc4NzdkMzY1NzViOTA0NTU5MjYwYiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitDT01QQVRJQkxFX0hPU1QgPSAiaS44Ni4qLWxpbnV4IgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LWN1cnNlcyIKKworZG9faW5zdGFsbF9hcHBlbmRfdm13YXJlKCkgeworCW1rZGlyIC1wICR7RH0vYm9vdC8KKwlsbiAtc2YgLi4vdXNyL2xpYi9ncnViL3skVEFSR0VUX0FSQ0h9eyRUQVJHRVRfVkVORE9SfS8gJHtEfS9ib290L2dydWIKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfMi4wMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfMi4wMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGE3MDllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8yLjAwLmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgZ3J1YjIuaW5jCisKK1JERVBFTkRTXyR7UE59ID0gImRpZmZ1dGlscyBmcmVldHlwZSIKK1BSID0gInIxIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke0JQTn0vaTM4Ni1wYy8uZGVidWciCisKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1wbGF0Zm9ybT1wYyAtLWRpc2FibGUtZ3J1Yi1ta2ZvbnQgLS1wcm9ncmFtLXByZWZpeD0iIiBcCisgICAgICAgICAgICAgICAtLWVuYWJsZS1saWJsem1hPW5vIC0tZW5hYmxlLWRldmljZS1tYXBwZXI9bm8gLS1lbmFibGUtbGliemZzPW5vIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9ncnViLmQKK30KKworSU5TQU5FX1NLSVBfJHtQTn0gPSAiYXJjaCIKK0lOU0FORV9TS0lQXyR7UE59LWRiZyA9ICJhcmNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjc2MGM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl9naXQuYmIKQEAgLTAsMCArMSw1MCBAQAorcmVxdWlyZSBncnViMi5pbmMKKworREVQRU5EUyArPSAiYXV0b2dlbi1uYXRpdmUiCisKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKK0RFRkFVTFRfUFJFRkVSRU5DRV9hcm0gPSAiMSIKKworUFYgPSAiMi4wMCske1NSQ1BWfSIKK1NSQ1JFViA9ICI4N2RlNjZkOWQ4MzQ0NmVjZGRiMjljZmJkZjczNjkxMDJjOGUyMDllIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9ncnViLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLTIuMDAtZnBtYXRoLXNzZS0zODctZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2F1dG9nZW4uc2gtZXhjbHVkZS1wYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLTIuMDAtYWRkLW9lLWtlcm5lbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1idWlsZC13aXRoLWdsaWJjLTIuMjAucGF0Y2ggXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjQuKnxpLjg2Lip8YXJtLip8YWFyY2g2NC4qKS0obGludXguKnxmcmVlYnNkLiopJworCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworIyBjb25maWd1cmUuYWMgaGFzIGNvZGUgdG8gc2V0IHRoaXMgYXV0b21hZ2ljYWxseSBmcm9tIHRoZSB0YXJnZXQgdHVwbGUKKyMgYnV0IHRoZSBPRSBmcmVlZm9ybSBvbmUgKGNvcmUyLWZvby1iYXItbGludXgpIGRvbid0IHdvcmsgd2l0aCB0aGF0LgorCitHUlVCUExBVEZPUk1fYXJtID0gInVib290IgorR1JVQlBMQVRGT1JNX2FhcmNoNjQgPSAiZWZpIgorR1JVQlBMQVRGT1JNID8/PSAicGMiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtcGxhdGZvcm09JHtHUlVCUExBVEZPUk19IC0tZGlzYWJsZS1ncnViLW1rZm9udCAtLXByb2dyYW0tcHJlZml4PSIiIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1saWJsem1hPW5vIC0tZW5hYmxlLWRldmljZS1tYXBwZXI9bm8gLS1lbmFibGUtbGliemZzPW5vIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAoIGNkICR7U30KKyAgICAgICR7U30vYXV0b2dlbi5zaCApCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2dydWIuZAorIAorfQorCisjIGRlYnVnZWRpdCBjaG9rZXMgb24gYmFyZSBtZXRhbCBiaW5hcmllcworSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUID0gIjEiCisKK1JERVBFTkRTXyR7UE59ID0gImRpZmZ1dGlscyBmcmVldHlwZSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qLy5kZWJ1ZyIKKworSU5TQU5FX1NLSVBfJHtQTn0gPSAiYXJjaCIKK0lOU0FORV9TS0lQXyR7UE59LWRiZyA9ICJhcmNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2d1bW1pYm9vdC9ndW1taWJvb3QvZml4LW9iamNvcHkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3VtbWlib290L2d1bW1pYm9vdC9maXgtb2JqY29weS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWY1NTkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2d1bW1pYm9vdC9ndW1taWJvb3QvZml4LW9iamNvcHkucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSAwZjdmOWUzYmIxZDBlMWI5M2YzYWQ4YTFkNWQ3YmRkM2ZiZjI3NDk0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDI3IE1hciAyMDE0IDA3OjIwOjMzICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlLmFtOiB1c2Ugb2JqY29weSBmcm9tIHRoZSBlbnYKKworSXQgdXNlcyB0aGUgIm9iamNvcHkiIGRpcmVjdGx5LCB3aGljaCBpcyBub3Qgc3VpdGFibGUgZm9yIGNyb3NzIGNvbXBpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtIHwgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ2l0L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvTWFrZWZpbGUuYW0KKysrKyBnaXQvTWFrZWZpbGUuYW0KK0BAIC0xOSw2ICsxOSw4IEBACisgQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQgJHtBQ0xPQ0FMX0ZMQUdTfQorIEFNX01BS0VGTEFHUyA9IC0tbm8tcHJpbnQtZGlyZWN0b3J5CisgCisrT0JKQ09QWSA/PSBvYmpjb3B5CisrCisgZ3VtbWlib290bGliZGlyID0gJChwcmVmaXgpL2xpYi9ndW1taWJvb3QKKyAKKyBBTV9DUFBGTEFHUyA9IC1pbmNsdWRlIGNvbmZpZy5oCitAQCAtMTQ4LDcgKzE1MCw3IEBAICQoZ3VtbWlib290X3NvbGliKTogJChndW1taWJvb3Rfb2JqZWN0cykKKyAuREVMRVRFX09OX0VSUk9SOiAkKGd1bW1ib290X3NvbGliKQorIAorICQoZ3VtbWlib290KTogJChndW1taWJvb3Rfc29saWIpCistCSQoQU1fVl9HRU4pIG9iamNvcHkgLWogLnRleHQgLWogLnNkYXRhIC1qIC5kYXRhIC1qIC5keW5hbWljIFwKKysJJChBTV9WX0dFTikgJChPQkpDT1BZKSAtaiAudGV4dCAtaiAuc2RhdGEgLWogLmRhdGEgLWogLmR5bmFtaWMgXAorIAkgIC1qIC5keW5zeW0gLWogLnJlbCAtaiAucmVsYSAtaiAucmVsb2MgXAorIAkgIC0tdGFyZ2V0PWVmaS1hcHAtJChBUkNIKSAkPCAkQAorIAorQEAgLTE4Myw3ICsxODUsNyBAQCAkKHN0dWJfc29saWIpOiAkKHN0dWJfb2JqZWN0cykKKyAuREVMRVRFX09OX0VSUk9SOiAkKGd1bW1ib290X3NvbGliKQorIAorICQoc3R1Yik6ICQoc3R1Yl9zb2xpYikKKy0JJChBTV9WX0dFTikgb2JqY29weSAtaiAudGV4dCAtaiAuc2RhdGEgLWogLmRhdGEgLWogLmR5bmFtaWMgXAorKwkkKEFNX1ZfR0VOKSAkKE9CSkNPUFkpIC1qIC50ZXh0IC1qIC5zZGF0YSAtaiAuZGF0YSAtaiAuZHluYW1pYyBcCisgCSAgLWogLmR5bnN5bSAtaiAucmVsIC1qIC5yZWxhIC1qIC5yZWxvYyBcCisgCSAgLS10YXJnZXQ9ZWZpLWFwcC0kKEFSQ0gpICQ8ICRACisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3VtbWlib290L2d1bW1pYm9vdF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3VtbWlib290L2d1bW1pYm9vdF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjM2RiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ndW1taWJvb3QvZ3VtbWlib290X2dpdC5iYgpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIkd1bW1pYm9vdCBpcyBhIHNpbXBsZSBVRUZJIGJvb3QgbWFuYWdlciB3aGljaCBleGVjdXRlcyBjb25maWd1cmVkIEVGSSBpbWFnZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2d1bW1pYm9vdCIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgorCitERVBFTkRTID0gImdudS1lZmkgdXRpbC1saW51eCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCitpbmhlcml0IGRlcGxveQorCitQViA9ICI0OCtnaXQke1NSQ1BWfSIKK1NSQ1JFViA9ICIyYmNkOTE5YzY4MWM5NTJlYjg2N2VmMWJkYjQ1OGYxYmM0OWMyZDU1IgorU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9ndW1taWJvb3QgXAorICAgICAgICAgICBmaWxlOi8vZml4LW9iamNvcHkucGF0Y2ggXAorICAgICAgICAgICIKKworIyBOb3RlOiBBZGQgQ09NUEFUSUJMRV9IT1NUIGhlcmUgaXMgb25seSBiZWNhdXNlIGl0IGRlcGVuZHMgb24gZ251LWVmaQorIyB3aGljaCBoYXMgc2V0IHRoZSBDT01QQVRJQkxFX0hPU1QsIHRoZSBndW1taWJvb3QgaXRzZWxmIG1heSB3b3JrIG9uCisjIG1vcmUgaG9zdHMuCitDT01QQVRJQkxFX0hPU1QgPSAiKHg4Nl82NC4qfGkuODYuKiktbGludXgiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtbWFucGFnZXMgLS13aXRoLWVmaS1pbmNsdWRlZGlyPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtZWZpLWxkc2Rpcj0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICAgICAgICAgLS13aXRoLWVmaS1saWJkaXI9JHtTVEFHSU5HX0xJQkRJUn0iCisKK0VYVFJBX09FTUFLRSArPSAiZ3VtbWlib290bGliZGlyPSR7bGliZGlyfS9ndW1taWJvb3QiCisKK2RvX2RlcGxveSAoKSB7CisgICAgICAgIGluc3RhbGwgJHtCfS9ndW1taWJvb3QqLmVmaSAke0RFUExPWURJUn0KK30KK2FkZHRhc2sgZGVwbG95IGJlZm9yZSBkb19idWlsZCBhZnRlciBkb19jb21waWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL0NPUFlJTkcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL0NPUFlJTkcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVjNzBjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvQ09QWUlORy5wYXRjaApAQCAtMCwwICsxLDM0NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKworZGlmZiAtcnVOIGhvc3RhcC1jb25mLTEuMC1vcmlnL0NPUFlJTkcgaG9zdGFwLWNvbmYtMS4wL0NPUFlJTkcKKy0tLSBob3N0YXAtY29uZi0xLjAtb3JpZy9DT1BZSU5HCTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgaG9zdGFwLWNvbmYtMS4wL0NPUFlJTkcJMjAxMC0xMi0wOSAxNjozNjo0OC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0wLDAgKzEsMzQwIEBACisrCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKysJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorKworKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgICAgICAgICAgICAgICAgICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisrIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKysKKysJCQkgICAgUHJlYW1ibGUKKysKKysgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKKytmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKKytzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bworK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKKyt0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KKyt5b3VyIHByb2dyYW1zLCB0b28uCisrCisrICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CisrcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQorK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKKyt0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKKytpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAorK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKysKKysgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKKythbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCisrVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKKytkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisrCisrICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCisrZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0CisreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKKytzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCisrcmlnaHRzLgorKworKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCisrZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKysKKysgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCisrdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKKytzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKKyt3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbworK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCisrYXV0aG9ycycgcmVwdXRhdGlvbnMuCisrCisrICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKKytwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCisrcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CisrcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKysKKysgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCisrbW9kaWZpY2F0aW9uIGZvbGxvdy4KKysMCisrCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKysgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKysKKysgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKKythIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAorK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKKytyZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKKyttZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgorK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCisrZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKKytsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCisrdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisrCisrQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKKytjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCisrcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQorK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KKytXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKysKKysgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKKytjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCisrbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKKythbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorKworK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAorK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisrCisrICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCisrb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisrCisrICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorKworKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKysgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisrICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisrICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKysKKysgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisrICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKysgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisrICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisrICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisrICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisrICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKysgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisrDAorK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKKytpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgorK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKKytzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKKytkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKKytvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKKyt0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKysKKytUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKKyt5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KKytleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKKytjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorKworK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KKyt3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKKythIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgorK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKKyt1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKKytTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisrCisrICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKysgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisrICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorKworKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisrICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKysgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKysgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorKworKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisrICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorKworK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKKyttYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55CisrYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCisrY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5CisrZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKKytvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAorK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKysKKytJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCisrYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisrDAorKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisrZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcworK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KKytIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgorK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCisrcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorKworKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90Cisrc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKKytkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKKytwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5CisrbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKKythbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCisrdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisrCisrICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKKytvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCisrdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKKytyZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisrWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KKyt0aGlzIExpY2Vuc2UuCisrCisrICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CisraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKKytjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCisrb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CisrZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKKyttYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CisrbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgorK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KKytyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorKworK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KKythcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorK2NpcmN1bXN0YW5jZXMuCisrCisrSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55Cisrc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQorK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKKyt0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKKyt0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKKytpbXBvc2UgdGhhdCBjaG9pY2UuCisrCisrVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCisrYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisrDAorKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KKytjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKKytvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCisrbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCisrdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcworK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKKytvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKKytiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KKythZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKysKKytFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCisrc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKKytsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCisrZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCisrdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24uCisrCisrICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCisrcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgorK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCisrb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorKworKwkJCSAgICBOTyBXQVJSQU5UWQorKworKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCisrRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCisrT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECisrT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCisrVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorKworKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKKytSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKKytUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKKytZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKysKKysJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisrDAorKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisrCisrICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CisrcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorKworKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKKyt0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CisrY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKKyt0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKysKKysgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKysgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKysKKysgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKworKworK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorKworK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKKyt3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorKworKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKysgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisrICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKysKKytUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKKytwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CisrYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCisrbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKysKKytZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCisrbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorKworKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisrCisrICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKysgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisrCisrVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCisrcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKKytjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKKytsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKKytQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwLWZ3LWxvYWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcC1mdy1sb2FkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MGJkYzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcC1mdy1sb2FkLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cuaG9sZ2Vyc2NodXJpZy5kZS9wYXRjaGVyLmh0bWwKKyMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0gaG9zdGFwLXV0aWxzLTAuMi40L2hvc3RhcF9md19sb2Fkfmhvc3RhcC1mdy1sb2FkCisrKysgaG9zdGFwLXV0aWxzLTAuMi40L2hvc3RhcF9md19sb2FkCitAQCAtNiw5ICs2LDkgQEAKKyAjIEZpcm13YXJlIGltYWdlcyBmb3IgdGhlIGNhcmQKKyAjIFRPRE86IGNvdWxkIHRyeSB0byBzZWxlY3QgY29ycmVjdCBmaXJtd2FyZSB0eXBlIGF1dG9tYXRpY2FsbHkKKyAKKy1QUkk9L2V0Yy9wY21jaWEvUE0wMTAxMDIuSEVYCistU1RBPS9ldGMvcGNtY2lhL1JGMDEwODAyLkhFWAorLVBSSVNNMl9TUkVDPS91c3IvbG9jYWwvYmluL3ByaXNtMl9zcmVjCisrUFJJPS9ldGMvcGNtY2lhL3BtMDEwMTAyLmhleAorK1NUQT0vZXRjL3BjbWNpYS9yZjAxMDgwNC5oZXgKKytQUklTTTJfU1JFQz0vdXNyL3NiaW4vcHJpc20yX3NyZWMKKyAKKyBzZXQgLWUKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwX2NzLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcF9jcy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZGE4MmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcF9jcy5jb25mCkBAIC0wLDAgKzEsMTkzIEBACittb2R1bGUgImhvc3RhcF9jcyIgb3B0cyAiY2hhbm5lbD0zIGl3X21vZGU9MiBlc3NpZD1hbnkgaWdub3JlX2Npc192Y2M9MSIKKworY2FyZCAiQWN0aW9udGVjIDgwMkNJMiIKKyAgbWFuZmlkIDB4MTY2OCwgMHgwMTAxCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQWlyV2F5IDgwMi4xMSBBZGFwdGVyIChQQ01DSUEpIgorICAjdmVyc2lvbiAiQWlyV2F5IiwgIjgwMi4xMSBBZGFwdGVyIChQQ01DSUEpIgorICBtYW5maWQgMHgwMjYxLCAweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBc3VzIFNwYWNlTGluayBXTDExMCIKKyAgIG1hbmZpZCAweDAyYWEsMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKKyMjIGhhbmRoZWxkcy5vcmcgYnVnIDk2NAorY2FyZCAiQmVsa2luIEY1RDYwNjAgRXRoZXJuZXQiCisgICAjdmVyc2lvbiAiUENNQ0lBIiwgIjExTSBXTEFOIENhcmQgdjIuNSIsICJJU0wzNzMwMFAiLCAiUmV2QSIKKyAgIG1hbmZpZCAweDAyNzQsIDB4MTYxMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJDb21wYXEgMTFNYnBzIFdpcmVsZXNzIFBDIENhcmQiCisgIG1hbmZpZCAweDAyOGEsIDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkNvbXBhcSBXTDEwMCAxMSBNYnBzIFdpcmVsZXNzIEFkYXB0ZXIiCisgIG1hbmZpZCAweDAxMzgsIDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkNvbXBhcSBITlctMTAwIDExIE1icHMgV2lyZWxlc3MgQWRhcHRlciIKKyAgbWFuZmlkIDB4MDI4YSwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiRC1MaW5rIERXTC02NTAiCisgIHZlcnNpb24gIkQiLCAiTGluayBEV0wtNjUwIDExTWJwcyBXTEFOIENhcmQiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiRC1MaW5rIERSQy02NTAiCisgIHZlcnNpb24gIkQiLCAiTGluayBEUkMtNjUwIDExTWJwcyBXTEFOIENhcmQiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiRC1MaW5rIERDRjY2MCIKKyAgbWFuZmlkIDB4ZDYwMSwgMHgwMDA1CisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiRmFyYWxsb24gU2t5TElORSIKKyAgdmVyc2lvbiAiSU5URVJTSUwiLCAiSEZBMzg0eC9JRUVFIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkh5cGVyTGluayBXaXJlbGVzcyBQQyBDYXJkIDExTWJwcyIKKyAgdmVyc2lvbiAiSHlwZXJMaW5rIiwgIldpcmVsZXNzIFBDIENhcmQgMTFNYnBzIgorICBiaW5kICJob3N0YXBfY3MiCisKKyMgY2FyZCAiSW50ZXJzaWwgUFJJU00yIDExIE1icHMgV2lyZWxlc3MgQWRhcHRlciIKKyMgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyMgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTEE0MTExIFNwZWN0cnVtMjQgV2lyZWxlc3MgTEFOIFBDIENhcmQiCisgIHZlcnNpb24gIlN5bWJvbCBUZWNobm9sb2dpZXMiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGlua3N5cyBXUEMxMSAxMU1icHMgODAyLjExYiBXTEFOIENhcmQiCisgIHZlcnNpb24gIkluc3RhbnQgV2lyZWxlc3MgIiwgIiBOZXR3b3JrIFBDIENBUkQiLCAiVmVyc2lvbiAwMS4wMiIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMaW5rc3lzIFdDRjExIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweDAyNzQsIDB4MzMwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICBiaW5kICJob3N0YXBfY3MiIAorCisjIyBoYW5kaGVsZHMub3JnIGJ1ZyAjNzkwCitjYXJkICJMaW5rc3lzIFdpcmVsZXNzIENvbXBhY3RGbGFzaCBDYXJkIFdDRjEyIgorICBtYW5maWQgMHgwMjhhLCAweDA2NzMKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMaW5rc3lzIFdMQU4gQ0YgQ2FyZCIKKyAgbWFuZmlkIDB4MDI3NCwgMHgzMzAxCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTkVUR0VBUiBNQTcwMSBXaXJlbGVzcyBDRiBDYXJkIgorICBtYW5maWQgMHhkNjAxLCAweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJOb3J0ZWwgTmV0d29ya3MgZU1vYmlsaXR5IDgwMi4xMSBXaXJlbGVzcyBBZGFwdGVyIgorICBtYW5maWQgMHgwMWViLCAweDA4MGEKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJQTEFORVggR2VvV2F2ZSBHVy1DRjExMCIKKyAgdmVyc2lvbiAiUExBTkVYIiwgIkdlb1dhdmUvR1ctQ0YxMTAiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiUFJPWElNIExBTiBQQyBDQVJEIEhBUk1PTlkgODAyMTFCIgorICB2ZXJzaW9uICJQUk9YSU0iLCAiTEFOIFBDIENBUkQgSEFSTU9OWSA4MDIxMUIiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiUHJveGltIFJhbmdlTEFOL0RTIgorICB2ZXJzaW9uICJQUk9YSU0iLCJSYW5nZUxBTi1EUy9MQU4gUEMgQ0FSRCIKKyAgbWFuZmlkIDB4MDEyNiwgMHg4MDAwCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU2FmZXdheSA4MDIuMTFiIFdpcmVsZXNzIEFkYXB0ZXIiCisgIG1hbmZpZCAweGQ2MDEsIDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNBTVNVTkcgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgdmVyc2lvbiAiU0FNU1VORyIsICIxMU1icHMgV0xBTiBDYXJkIgorICBiaW5kICJob3N0YXBfY3MiCisKKyMgbmVlZHMgZmlybXdhcmUgdXBsb2FkIHZpYSBob3N0YXBfZndfbG9hZAorY2FyZCAiU2FuRGlzayBDb25uZWN0UGx1cyBPRU0gKDBNQikiCisgICBtYW5maWQgMHhkNjAxLCAweDAwMTAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworIyBuZWVkcyBzcGVjaWFsIGFjdGl2YXRpb24gKD49aG9zdGFwIDAuMy4yIG9ubHkpIHBsdXMgZmlybXdhcmUgdXBsb2FkCitjYXJkICJTYW5EaXNrIENvbm5lY3RQbHVzIHcvIE1lbW9yeSIKKyAgIHZlcnNpb24gIlNhbkRpc2siLCAiQ29ubmVjdFBsdXMiCisgICBtYW5maWQgMHhkNjAxLCAweDAxMDEKKyAgIGJpbmQgImhvc3RhcF9jcyIgdG8gMAorIyAgIGJpbmQgImlkZS1jcyIgdG8gMQorCitjYXJkICJTZW5hby9PcmlnbyA4MDIxMWIgV0xBTiBDYXJkIgorICAgbWFuZmlkIDB4MDAwYiwweDcxMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU2l0ZWNvbSBXTC0wMDcgV0xBTiBDRiBDYXJkIgorICBtYW5maWQgMHhkNjAxLCAweDAwMDQKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTTUMyNjMyIDgwMi4xMSAocHJpc20yKSBDYXJkIgorICB2ZXJzaW9uICJTTUMiLCAiU01DMjYzMlciLCAiVmVyc2lvbiAwMS4wMiIsICIiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU3BlZWRTdHJlYW0gU1MxMDIxIFdpcmVsZXNzIEFkYXB0ZXIiCisgICN2ZXJzaW9uICJTaWVtZW5zIiwgIlNwZWVkU3RyZWFtIFdpcmVsZXNzIFBDTUNJQSIKKyAgbWFuZmlkIDB4MDJhYywgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiWkNPTUFYIEFpclJ1bm5lci9YSS0zMDAiCisgICN2ZXJzaW9uICJaQ09NQVgiLCAiQWlyUnVubmVyL1hJLTMwMCIKKyAgbWFuZmlkIDB4ZDYwMSwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiWm9uZXQgWkNGMTEwMCIKKyAgbWFuZmlkIDB4MDAwYiwgMHg3MTAwCisgIGJpbmQgImhvc3RhcF9jcyIKKyAgCitjYXJkICJXaXJlbGVzcyBMQU4gQWRhcHRlciBWZXJzaW9uIDAxLjAyIgorICAgdmVyc2lvbiAiV2lyZWxlc3MiLCAiTEFOIEFkYXB0ZXIiLCAiVmVyc2lvbiAwMS4wMiIKKyMgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQW1iaWNvbSBXTDExMDBDIDExTWJzIENhcmQgODAyLjExYiIKKyAgdmVyc2lvbiAiQW1iaUNvbSIsICJXTDExMDBDIDgwMi4xMWIgQ0YtQ2FyZCIsICIyLjIiCisgIG1hbmZpZCAweGQ2MDEsMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQW1iaWNvbSBXTDExMDBDIDExTWJzIENhcmQgODAyLjExYiIKKyAgbWFuZmlkIDB4ZDYwMSwweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTYW5kaXNrIENvbm5lY3QgU0RXQ0ZCLTAwMCIKKyAgbWFuZmlkIDB4ZDYwMSwweDAwMDUKKyAgYmluZCAiaG9zdGFwX2NzIgorCisjIENhcmRzIHdpdGggSW50ZXJzaWwgZmlybXdhcmUgKFByaXNtIGNoaXBzZXQpCisKK2NhcmQgIkxpbmtzeXMgV1BDMTEgMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkIgorICB2ZXJzaW9uICJUaGUgTGlua3N5cyBHcm91cCwgSW5jLiIsICJJbnN0YW50IFdpcmVsZXNzIE5ldHdvcmsgUEMgQ2FyZCIsICJJU0wzNzMwMFAiLCAiUmV2QSIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMaW5rc3lzIENvbXBhY3RGbGFzaCBXaXJlbGVzcyBDYXJkIgorICB2ZXJzaW9uICJMaW5rc3lzIiwgIldpcmVsZXNzIENvbXBhY3RGbGFzaCBDYXJkIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkFDVElPTlRFQyBQUklTTSBXaXJlbGVzcyBMQU4gUEMgQ2FyZCIKKyAgdmVyc2lvbiAiQUNUSU9OVEVDIiwgIlBSSVNNIFdpcmVsZXNzIExBTiBQQyBDYXJkIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxpbmtzeXMgV1BDMTEgVmVyc2lvbiAzIgorICBtYW5maWQgMHgwMjc0LDB4MTYxMworICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkJFTlEgQVdMMTAwIgorICB2ZXJzaW9uICJCRU5RIiwgIkFXTDEwMCBQQ01DSUEgQURBUFRFUiIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJQcmV0ZWMgV0xBTiIKKyAgdmVyc2lvbiAiUHJldGVjIiwgIkNvbXBhY3RXTEFOIENhcmQgODAyLjExYiIsICIyLjUiCisgIG1hbmZpZCAweDAxNTYsIDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlRyZW5kTmV0IFRFVyBQQzE2IgorICBtYW5maWQgMHgwMjc0LCAweDE2MDEKKyAgYmluZCAiaG9zdGFwX2NzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MuY29uZi11cHN0cmVhbSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwX2NzLmNvbmYtdXBzdHJlYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI3Mzg1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwX2NzLmNvbmYtdXBzdHJlYW0KQEAgLTAsMCArMSwxOTEgQEAKK2RldmljZSAiaG9zdGFwX2NzIgorICAgY2xhc3MgIm5ldHdvcmsiIG1vZHVsZSAiaG9zdGFwIiwgImhvc3RhcF9jcyIKKworY2FyZCAiSW50ZXJzaWwgUFJJU00yIFJlZmVyZW5jZSBEZXNpZ24gMTFNYi9zIFdMQU4gQ2FyZCIKKyAgIHZlcnNpb24gIklOVEVSU0lMIiwgIkhGQTM4NHgvSUVFRSIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQ29tcGFxIFdMMTAwIDExTWIvcyBXTEFOIENhcmQiCisgICBtYW5maWQgMHgwMTM4LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQ29tcGFxIFdMMjAwIgorICAgdmVyc2lvbiAiQ29tcGFxIiwgIldMMjAwXzExTWJwc19XaXJlbGVzc19QQ0lfQ2FyZCIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiRU1UQUMgQTI0MjRpIDExTWJwcyBXTEFOIENhcmQiCisgICBtYW5maWQgMHhjMjUwLCAweDAwMDIKKyMgICBjaXMgImNpcy9FbXRhYy5kYXQiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxpbmtzeXMgV1BDMTEgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgIHZlcnNpb24gIkluc3RhbnQgV2lyZWxlc3MgIiwgIiBOZXR3b3JrIFBDIENBUkQiLCAiVmVyc2lvbiAwMS4wMiIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGlua3N5cyBXUEMxMSBWZXIgMi41IDExTWJwcyBXTEFOIENhcmQiCisgICBtYW5maWQgMHgwMjc0LCAweDE2MTIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGlua3N5cyBXUEMxMSBWZXIgMyAxMU1icHMgV0xBTiBDYXJkIgorICAgbWFuZmlkIDB4MDI3NCwgMHgxNjEzCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxpbmtzeXMgV0NGMTIgV2lyZWxlc3MgQ29tcGFjdEZsYXNoIENhcmQiCisgICB2ZXJzaW9uICJMaW5rc3lzIiwgIldpcmVsZXNzIENvbXBhY3RGbGFzaCBDYXJkIgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJELUxpbmsgRFdMLTY1MCAxMU1icHMgV0xBTiBDYXJkIgorICAgdmVyc2lvbiAiRCIsICJMaW5rIERXTC02NTAgMTFNYnBzIFdMQU4gQ2FyZCIsICJWZXJzaW9uIDAxLjAyIgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJELUxpbmsgRFJDLTY1MCAxMU1icHMgV0xBTiBDYXJkIgorIyAgdmVyc2lvbiAiRCIsICJMaW5rIERSQy02NTAgMTFNYnBzIFdMQU4gQ2FyZCIsICJWZXJzaW9uIDAxLjAyIgorICAgbWFuZmlkIDB4MDI4YSwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlpvb21BaXIgNDEwMCAxMU1iL3MgV0xBTiBDYXJkIgorICAgdmVyc2lvbiAiWm9vbUFpciAxMU1icHMgSGlnaCIsICJSYXRlIHdpcmVsZXNzIE5ldHdvcmtpbmciCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkFkZHRyb24gQVdQLTEwMCAxMU1icHMgV0xBTiBDYXJkIgorICAgdmVyc2lvbiAiQWRkdHJvbiIsICJBV1AtMTAwIFdpcmVsZXNzIFBDTUNJQSIsICJWZXJzaW9uIDAxLjAyIgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTYW1zdW5nIFNXTDIwMDAtTiAxMU1iL3MgV0xBTiBDYXJkIgorICAgbWFuZmlkIDB4MDI1MCwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNNQyAyNjMyVyAxMU1icHMgV0xBTiBDYXJkIgorICAgdmVyc2lvbiAiU01DIiwgIlNNQzI2MzJXIiwgIlZlcnNpb24gMDEuMDIiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkJyb01heCBGcmVlcG9ydCAxMU1icHMgV0xBTiBDYXJkIgorICAgdmVyc2lvbiAiSW50ZXJzaWwiLCAiUFJJU00gMl81IFBDTUNJQSBBREFQVEVSIiwgIklTTDM3MzAwUCIsICJFdmFsLVJldkEiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlotQ29tIFhJMzAwIDExTWIvcyBXTEFOIENhcmQiCisgICBtYW5maWQgMHhkNjAxLCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiWmNvbWF4IFhJLTMyNUggMjAwbVciCisjICAgdmVyc2lvbiAiICIsICJJRUVFIDgwMi4xMSBXaXJlbGVzcyBMQU4vUEMgQ2FyZCIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDAwNQorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICIzQ29tIEFpckNvbm5lY3QgUENJIDc3N0EiCisgICBtYW5maWQgMHgwMTAxLCAweDA3NzcKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiVS5TLiBSb2JvdGljcyBJRUVFIDgwMi4xMWIgUEMtQ0FSRCIKKyAgIHZlcnNpb24gIlUuUy4gUm9ib3RpY3MiLCAiSUVFRSA4MDIuMTFiIFBDLUNBUkQiLCAiVmVyc2lvbiAwMS4wMiIKKyMgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTG9uZ3NoaW5lIExDUi04NTMxIDExTWJwcyBXTEFOIFBDTUNJQSBDQVJEIgorICAgdmVyc2lvbiAiT0VNIiwgIlBSSVNNMiBJRUVFIDgwMi4xMSBQQy1DYXJkIiwgIlZlcnNpb24gMDEuMDIiCisjICAgbWFuZmlkIDB4MDE1NiwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlBoaWxpcHMgODAyLjExYiBXTEFOIFBDTUNJQSIKKyAgIG1hbmZpZCAweDAwMGIsIDB4NzMwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJQcm94aW0gUmFuZ2VMQU4iCisjICAgdmVyc2lvbiAiUFJPWElNIiwgIlJhbmdlTEFOLURTL0xBTiBQQyBDQVJEIgorICAgbWFuZmlkIDB4MDEyNiwgMHg4MDAwCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkJ1ZmZhbG8gV0xJLUNGLVMxMUciCisgICB2ZXJzaW9uICJCVUZGQUxPIiwgIldMSS1DRi1TMTFHIgorIyAgbWFuZmlkIDB4MDI2ZiwgMHgwMzBiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxldmVsLU9uZSBXUEMtMDEwMCIKKyAgIHZlcnNpb24gIkRpZ2l0YWwgRGF0YSBDb21tdW5pY2F0aW9ucyIsICJXUEMtMDEwMCIsICJWZXJzaW9uIDAwLjAwIgorICAgbWFuZmlkIDB4MDE1NiwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkJlbGtpbiA4MDIuMTFiIFdMQU4gUENNQ0lBIgorICAgdmVyc2lvbiAiQmVsa2luIiwgIjExTWJwcyBXaXJlbGVzcyBOb3RlYm9vayBOZXR3b3JrIEFkYXB0ZXIiLCAiVmVyc2lvbiAwMS4wMiIKKyAgIG1hbmZpZCAweDAxNTYsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTZW5hbyBTTC0yMDExQ0QvU0wtMjAxMUNEUExVUyIKKyAgIHZlcnNpb24gIklOVEVSU0lMIiwgIkhGQTM4NHgvSUVFRSIsICJWZXJzaW9uIDAxLjAyIgorICAgbWFuZmlkIDB4MDE1NiwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkZ1bGJvbmQgQWlyYm9uZCBYSS0zMDBCIgorICAgdmVyc2lvbiAiICIsICJJRUVFIDgwMi4xMSBXaXJlbGVzcyBMQU4vUEMgQ2FyZCIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJOZXRnZWFyIE1BNDAxIgorICAgdmVyc2lvbiAiTkVUR0VBUiBNQTQwMSBXaXJlbGVzcyBQQyIsICJDYXJkIiwgIlZlcnNpb24gMDEuMDAiCisjICAgbWFuZmlkIDB4MDE1NiwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkQtTGluayBEV0wtNjUwIFJldi4gUDEiCisgICB2ZXJzaW9uICJELUxpbmsiLCAiRFdMLTY1MCBXaXJlbGVzcyBQQyBDYXJkIFJldlAiLCAiSVNMMzcxMDFQLTEwIiwgIkEzIgorIyAgIG1hbmZpZCAweDAwMGIsIDB4NzExMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTb25pY1dBTEwgTG9uZyBSYW5nZSBXaXJlbGVzcyBDYXJkIgorICAgdmVyc2lvbiAiU29uaWNXQUxMIiwgIkxvbmcgUmFuZ2UgV2lyZWxlc3MgQ2FyZCIsICJJU0wzNzEwMFAiLCAiMS4wIgorICAgbWFuZmlkIDB4MDAwYiwgMHg3MTAwCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNlbmFvIE5MLTIwMTFDRCBQTFVTIEV4dDIgTWVyY3VyeSIKKyAgIHZlcnNpb24gIldMQU4iLCAiMTFNYnBzX1BDLUNhcmRfMy4wIiwgIklTTDM3MTAwUCIsICJFdmFsLVJldkEiCisgICBtYW5maWQgMHgwMDBiLCAweDcxMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQWlydmFzdCBXTDEwMCIKKyAgIHZlcnNpb24gIkFJUlZBU1QiLCAiSUVFRSA4MDIuMTFiIFdpcmVsZXNzIFBDTUNJQSBDYXJkIiwgIkhGQTM4NjMiCisgICBtYW5maWQgMHg1MGMyLCAweDAwMDEKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTWljcm9zb2Z0IFdpcmVsZXNzIE5vdGVib29rIEFkYXB0ZXIgTU4tNTIwIDEuMC4zIgorICAgdmVyc2lvbiAiTWljcm9zb2Z0IiwgIldpcmVsZXNzIE5vdGVib29rIEFkYXB0ZXIgTU4tNTIwIiwgIiIsICIxLjAuMyIKKyAgIG1hbmZpZCAweDAyZDIsIDB4MDAwMQorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJORVRHRUFSIE1BNDAxUkEiCisgICB2ZXJzaW9uICJORVRHRUFSIE1BNDAxUkEgV2lyZWxlc3MgUEMiLCAiQ2FyZCIsICJJU0wzNzMwMFAiLCAiRXZhbC1SZXZBIgorICAgbWFuZmlkIDB4MDAwYiwgMHg3MzAwCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkFsbGllZCBUZWxlc3luIEFULVdDTDQ1MiIKKyAgIHZlcnNpb24gIkFsbGllZCBUZWxlc3luIiwgIkFULVdDTDQ1MiBXaXJlbGVzcyBQQ01DSUEgUmFkaW8iLCAiVmVyLiAxLjAwIgorICAgbWFuZmlkIDB4YzAwZiwgMHgwMDAwCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgImNvcmVnYSBXTCBQQ0NMLTExIgorICAgdmVyc2lvbiAiY29yZWdhIiwgIldMIFBDQ0wtMTEiLCAiSVNMMzczMDBQIiwgIlJldkEiCisgICBtYW5maWQgMHhjMDBmLCAweDAwMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU2FuRGlzayBDb25uZWN0UGx1cyIKKyAgIHZlcnNpb24gIlNhbkRpc2siLCAiQ29ubmVjdFBsdXMiCisgICBtYW5maWQgMHhkNjAxLCAweDAxMDEKKyAgIGJpbmQgImhvc3RhcF9jcyIgdG8gMAorICAgYmluZCAiaWRlLWNzIiB0byAxCisKK2NhcmQgIkFTVVMgV0wtMTAwIDgwMTFiIFdMQU4gUEMgQ2FyZCIKKyAgIHZlcnNpb24gIkFTVVMiLCAiODAyXzExYl9QQ19DQVJEXzI1IiwgIlZlcnNpb24gMDEuMDAiCisgICBtYW5maWQgMHgwMmFhLCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiWnlYZWwgWnlhaXIgQi0xMDEgODAyLjExYiBXTEFOIGNhcmQiCisgICB2ZXJzaW9uICIgIiwgIklFRUUgODAyLjExIFdpcmVsZXNzIExBTi9QQyBDYXJkIgorICAgbWFuZmlkIDB4ZDYwMSwgMHgwMDEwCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIldMQU4gUFJJU00gUENNQ0lBIENBUkQgMzczMDBQIFJldkI2IgorICAgdmVyc2lvbiAiV0xBTiIsICJQUklTTSBQQ01DSUEgQ0FSRCIsICIzNzMwMFAiLCAiUmV2aXNpb24gQjYiCisgICBtYW5maWQgMHg1MGMyLCAweDczMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworCisjIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgaG9zdGFwX2NzLm8KKyMgbW9kdWxlICJob3N0YXBfY3MiIG9wdHMgImNoYW5uZWw9MyBpd19tb2RlPTMgZXNzaWQ9dGVzdCBpZ25vcmVfY2lzX3ZjYz0wIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MubW9kYWxpYXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcF9jcy5tb2RhbGlhcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODQ4MzUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MubW9kYWxpYXMKQEAgLTAsMCArMSwyOCBAQAorIyBwcm9kdWN0IGluZm86ICJQcmV0ZWMiLCAiQ29tcGFjdFdMQU4gQ2FyZCA4MDIuMTFiIiwgIjIuNSIKK2FsaWFzIHBjbWNpYTptMDE1NmMwMDAyZjA2Zm4wMHBmbjAwcGExQ0FERDNFNXBiRTY5NzYzNkNwYzdBNUJGQ0YxcGQwMDAwMDAwMCBob3N0YXBfY3MKKworIyBtYW51ZmFjdHVyZXIgSUQgd2hpY2ggZXhpc3QgaW4gb3Jpbm9jb19jcyBBTkQgaW4gaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTAwMEJjNzEwMGYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptMDAwQmM3MzAwZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm0wMTI2YzgwMDBmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTAxMzhjMDAwMmYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptMDI1MGMwMDAyZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm0wMjc0YzE2MTJmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTAyNzRjMTYxM2YwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptMDI4QWMwMDAyZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm0wMkFBYzAwMDJmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTUwQzJjNzMwMGYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptRDYwMWMwMDAyZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm1ENjAxYzAwMDVmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCisKKyMgcHJvZHVjdCBpbmZvOiAiTGlua3N5cyIsICJXaXJlbGVzcyBDb21wYWN0Rmxhc2ggQ2FyZCIsICIiLCAiIgorYWxpYXMgcGNtY2lhOm0wMjhBYzA2NzNmMDZmbjAwcGZuMDBwYTA3MzNDQzgxcGIwQzUyRjM5NXBjMDAwMDAwMDBwZDAwMDAwMDAwIGhvc3RhcF9jcworCisjIHByb2R1Y3QgaW5mbzoiUExBTkVYIENPTU1VTklDQVRJT04gSU5DIiwiUExBTkVYIEdXLUNGMTFYIFdpcmVsZXNzIENGIENhcmQiLCAiIiwgIiIKK2FsaWFzIHBjbWNpYTptRDYwMWMwMDEwZjA2Zm4wMHBmbjAwcGE0NzAzQ0Y2OHBiRkFENzMxOERwYzAwMDAwMDAwcGQwMDAwMDAwMCBob3N0YXBfY3MKKworIyAweDAxNTYsIDB4MDAwMiBhbmQgIlZlcnNpb24gMDEuMDIiIG9ubHkgYXBwZWFyIGZvciBQcmlzbSBiYXNlZCBjYXJkcy4KK2FsaWFzIHBjbWNpYTptMDE1NmMwMDAyZjA2Zm4wMHBmbjAwcGEqcGIqcGM0Qjc0QkFBMHBkMDAwMDAwMDAgaG9zdGFwX2NzCisKKyMgIkJVRkZBTE8iLCAiV0xJLUNGLVMxMUciLCAiIiwgIiIKK2FsaWFzIHBjbWNpYTptMDI2RmMwMzBCZjA2Zm4wMHBmbjAwcGEyREVDRUNFM3BiODIwNjdDMThwYzAwMDAwMDAwcGQwMDAwMDAwMCBob3N0YXBfY3MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLWNvbmZfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtY29uZl8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFkNGM1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLWNvbmZfMS4wLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiQ29uZmlndXJhdGlvbiBmaWxlcyBmb3IgSG9zdEFQICh3aWZpKSBkcml2ZXIiCitERVNDUklQVElPTiA9ICJQQ01DSUEtY3MgY29uZmlndXJhdGlvbiBmaWxlcyBmb3Igd2lyZWxlc3MgTEFOIGNhcmRzIGJhc2VkIG9uIEludGVyc2lsJ3MgUHJpc20yLzIuNS8zIGNoaXBzZXQuIgorU0VDVElPTiA9ICJrZXJuZWwvbW9kdWxlcyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKK1BSID0gInIxNSIKKworU1JDX1VSSSA9ICJmaWxlOi8vaG9zdGFwX2NzLm1vZGFsaWFzIFwKKyAgICAgICAgICAgZmlsZTovL0NPUFlJTkcucGF0Y2giCisKK2luaGVyaXQgYWxsYXJjaAorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2NvbXBpbGUoKSB7Cit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9tb2Rwcm9iZS5kCisKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ob3N0YXBfY3MubW9kYWxpYXMgJHtEfSR7c3lzY29uZmRpcn0vbW9kcHJvYmUuZC9ob3N0YXBfY3MuY29uZgorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlscy0wLjQuNy9sZGZsYWdzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtdXRpbHMtMC40LjcvbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTk5ZDBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtdXRpbHMtMC40LjcvbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDI3IEBACitPYmV5IExERkxBR1MKKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gaG9zdGFwLXV0aWxzLTAuNC43Lm9yaWcvTWFrZWZpbGUKKysrKyBob3N0YXAtdXRpbHMtMC40LjcvTWFrZWZpbGUKK0BAIC0xNCwxNyArMTQsMTcgQEAgcHJpc20yX3NyZWMubzogcHJpc20yX3NyZWMuYyB1dGlsLmgKKyBob3N0YXBfY3J5cHRfY29uZjogaG9zdGFwX2NyeXB0X2NvbmYuYworCisgaG9zdGFwX2RpYWc6IGhvc3RhcF9kaWFnLm8gdXRpbC5vCistCSQoQ0MpIC1vIGhvc3RhcF9kaWFnICQoQ0ZMQUdTKSBob3N0YXBfZGlhZy5vIHV0aWwubworKwkkKENDKSAtbyBob3N0YXBfZGlhZyAkKENGTEFHUykgJChMREZMQUdTKSBob3N0YXBfZGlhZy5vIHV0aWwubworCisgaG9zdGFwX2RpYWcubzogaG9zdGFwX2RpYWcuYyB1dGlsLmgKKworIHV0aWwubzogdXRpbC5jIHV0aWwuaAorCisgaG9zdGFwX2lvX2RlYnVnOiBob3N0YXBfaW9fZGVidWcuYworLQkkKENDKSAtbyBob3N0YXBfaW9fZGVidWcgJChDRkxBR1MpIGhvc3RhcF9pb19kZWJ1Zy5jCisrCSQoQ0MpIC1vIGhvc3RhcF9pb19kZWJ1ZyAkKENGTEFHUykgJChMREZMQUdTKSBob3N0YXBfaW9fZGVidWcuYworCisgaG9zdGFwX3JpZDogaG9zdGFwX3JpZC5vIHV0aWwubworLQkkKENDKSAtbyBob3N0YXBfcmlkICQoQ0ZMQUdTKSBob3N0YXBfcmlkLm8gdXRpbC5vCisrCSQoQ0MpIC1vIGhvc3RhcF9yaWQgJChDRkxBR1MpICQoTERGTEFHUykgaG9zdGFwX3JpZC5vIHV0aWwubworCisgaG9zdGFwX3JpZC5vOiBob3N0YXBfcmlkLmMgdXRpbC5oCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlscy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlscy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkOTc3YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzLmluYwpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIlVzZXIgbW9kZSBoZWxwZXJzIGZvciB0aGUgaG9zdGFwIGRyaXZlciIKK0RFU0NSSVBUSU9OID0gIlRoZSBob3N0YXAgZHJpdmVyIHN1cHBvcnRzIEhvc3QgQVAgbW9kZSwgaXQgYWxsb3dzIGZvciBJRUVFIDgwMi4xMSBcCittYW5hZ2VtZW50IGZ1bmN0aW9ucyBvbiB0aGUgaG9zdCBjb21wdXRlciBhbmQgYWxsb3dzIHRoZSBzeXN0ZW0gdG8gYWN0IGFzIGFuIGFjY2VzcyBwb2ludC4iCitIT01FUEFHRSA9ICJodHRwOi8vaG9zdGFwLmVwaXRlc3QuZmkiCitCVUdUUkFDS0VSID0gImh0dHA6Ly9ob3N0YXAuZXBpdGVzdC5maS9idWd6LyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyBcCisJCQlmaWxlOi8vdXRpbC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9OTttZDU9ZDNiOTI4MDg1MTMwMmU1YmEzNGU1ZmI3MTc0ODliNmQiCitTRUNUSU9OID0gImtlcm5lbC91c2VybGFuZCIKK1BSID0gInI0IgorCitTUkNfVVJJID0gImh0dHA6Ly9ob3N0YXAuZXBpdGVzdC5maS9yZWxlYXNlcy9ob3N0YXAtdXRpbHMtJHtQVn0udGFyLmd6IFwKKwkgICBmaWxlOi8vaG9zdGFwLWZ3LWxvYWQucGF0Y2giCitTID0gIiR7V09SS0RJUn0vaG9zdGFwLXV0aWxzLSR7UFZ9IgorCitCSU5BUklFUyA9ICJob3N0YXBfY3J5cHRfY29uZiBob3N0YXBfZGlhZyBob3N0YXBfZndfbG9hZCBob3N0YXBfaW9fZGVidWcgXAorCSAgICBob3N0YXBfcmlkIHByaXNtMl9wYXJhbSBwcmlzbTJfc3JlYyBzcGxpdF9jb21iaW5lZF9oZXgiCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfS8KKwlmb3IgZiBpbiAke0JJTkFSSUVTfQorCWRvCisJCWluc3RhbGwgLW0gMDc1NSAkZiAke0R9JHtzYmluZGlyfS8KKwlkb25lCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzXzAuNC43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtdXRpbHNfMC40LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1NDgxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzXzAuNC43LmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSBob3N0YXAtdXRpbHMuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9sZGZsYWdzLnBhdGNoIgorU1JDX1VSSVttZDVzdW1dID0gImFmZTA0MTU4MWI4ZjAxNjY2ZTM1M2JlYzIwOTE3Yzg1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM2ZjU5OGQ4ZTM1NmMxNjIwZmEwMDllY2EwYTcwMGJmMTEwNWUxNjgxN2VlZmQ3N2Q4OTE5OTQyNjEwMDkzNTUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Ava2V5bWFwcy9maWxlcy9HUEx2Mi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2ZpbGVzL0dQTHYyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZTgxODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Ava2V5bWFwcy9maWxlcy9HUEx2Mi5wYXRjaApAQCAtMCwwICsxLDM0NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK2RpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ1MTE5MDUKKy0tLSAvZGV2L251bGwKKysrKyBiL0NPUFlJTkcKK0BAIC0wLDAgKzEsMzM5IEBACisrCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKysJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorKworKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKysKKysJCQkgICAgUHJlYW1ibGUKKysKKysgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKKytmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKKytzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bworK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKKyt0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworK3lvdXIgcHJvZ3JhbXMsIHRvby4KKysKKysgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKKytwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CisraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgorK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAorK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CisraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorKworKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KKytUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKysKKysgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKKytncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKKyt5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKKytyaWdodHMuCisrCisrICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisrKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKKytkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorKworKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KKyt0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQorK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCisrdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKKythdXRob3JzJyByZXB1dGF0aW9ucy4KKysKKysgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCisrcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKKytwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKKytwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorKworKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKKyttb2RpZmljYXRpb24gZm9sbG93LgorKworKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisrCisrICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCisrYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKKyt1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCisrcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCisrbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKKyt0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCisrbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgorK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorKworK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CisrY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KKytpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCisrV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisrCisrICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKKytzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKKytjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCisrY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKKythbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCisrYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKysKKytZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKKyt5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorKworKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKKytkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKKythYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorKworKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKysgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKysKKysgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisrICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisrCisrICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKysgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisrICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKysgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisrICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorKworK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKKytpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgorK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKKytzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKKytkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKKytvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKKyt0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKysKKytUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKKyt5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KKytleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKKytjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorKworK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KKyt3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKKythIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgorK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKKyt1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKKytTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisrCisrICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKysgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisrICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorKworKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisrICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKysgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKysgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorKworKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisrICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorKworK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKKyttYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55CisrYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCisrY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5CisrZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKKytvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAorK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKysKKytJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCisrYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisrCisrICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKytleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0Cisrb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCisrdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCisrdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKKytwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisrCisrICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKKytzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKKyttb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKKyt0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKysKKysgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KKyt0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KKytZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bworK3RoaXMgTGljZW5zZS4KKysKKysgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKKytpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKKytvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CisrZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKKytkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCisrTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKKytsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CisrYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCisrdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisrCisrSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCisrYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCisrY2lyY3Vtc3RhbmNlcy4KKysKKytJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CisrcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKKytzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCisraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCisraW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCisrZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAorK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0Cisrc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZworK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAorK2ltcG9zZSB0aGF0IGNob2ljZS4KKysKKytUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KKytiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCisrY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCisrb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZworK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKKytjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKKyt0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCisrb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCisrYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCisrYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisrCisrRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CisrbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgorK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uLgorKworKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKKyt0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKKyttYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscworK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKKytvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKysKKysJCQkgICAgTk8gV0FSUkFOVFkKKysKKysgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKKytQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKKytQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKKytSRVBBSVIgT1IgQ09SUkVDVElPTi4KKysKKysgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKKytXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCisrUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKKytJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKKytPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECisrVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCisrWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKKytQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKKytQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisrCisrCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworKworKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisrCisrICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CisrcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorKworKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKKyt0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CisrY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKKyt0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKysKKysgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKysgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKysKKysgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKysgICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKysKKytBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKysKKytJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCisrd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKysKKysgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisrICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKysgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisrCisrVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCisrcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisrCisrWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKKytzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKysKKysgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKysgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorKworKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisrICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorKworK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5CisrY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCisrbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKytQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2ZpbGVzL2tleW1hcC5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2ZpbGVzL2tleW1hcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZWJjNjM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2tleW1hcHMvZmlsZXMva2V5bWFwLnNoCkBAIC0wLDAgKzEsMTYgQEAKKyMhL2Jpbi9zaAorIworIyBsb2FkIGtleW1hcCwgaWYgZXhpc3RpbmcKKworS0VSTkVMX01BSk1JTj1gdW5hbWUgLXIgfCBjdXQgLWQgJy4nIC1mIDEsMmAKK2lmIFsgLWUgL2V0Yy9rZXltYXAtJEtFUk5FTF9NQUpNSU4ubWFwIF07IHRoZW4KKwlsb2Fka2V5cyAvZXRjL2tleW1hcC0kS0VSTkVMX01BSk1JTi5tYXAKK2ZpCisKK2lmICggbHMgIi9ldGMiIHwgZ3JlcCAtcSAia2V5bWFwLWV4dGVuc2lvbi0ke0tFUk5FTF9NQUpNSU59IiApCit0aGVuCisJZm9yIGV4dGVuc2lvbiBpbiBgbHMgLTEgL2V0Yy9rZXltYXAtZXh0ZW5zaW9uLSRLRVJORUxfTUFKTUlOKmAgCisJZG8JCisJCWxvYWRrZXlzICIkZXh0ZW5zaW9uIgorCWRvbmUKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Ava2V5bWFwcy9rZXltYXBzXzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2tleW1hcHNfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3OTNhNzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Ava2V5bWFwcy9rZXltYXBzXzEuMC5iYgpAQCAtMCwwICsxLDUwIEBACitTVU1NQVJZID0gIktleWJvYXJkIG1hcHMiCitERVNDUklQVElPTiA9ICJLZXltYXBzIGFuZCBpbml0c2NyaXB0IHRvIHNldCB0aGUga2V5bWFwIG9uIGJvb3R1cC4iCitTRUNUSU9OID0gImJhc2UiCisKK1JERVBFTkRTXyR7UE59ID0gImtiZCIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKK1BSID0gInIzMSIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworIyBBcyB0aGUgcmVjaXBlIGRvZXNuJ3QgaW5oZXJpdCBzeXN0ZW1kLmJiY2xhc3MsIHdlIG5lZWQgdG8gc2V0IHRoaXMgdmFyaWFibGUKKyMgbWFudWFsbHkgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcG9zdGluc3QvcHJlaW5zdCBnZW5lcmF0ZWQuCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgIjEiKQorfQorCitpbmhlcml0IHVwZGF0ZS1yYy5kCisKK1NSQ19VUkkgPSAiZmlsZTovL2tleW1hcC5zaCBcCisJICAgZmlsZTovL0dQTHYyLnBhdGNoIgorCitJTklUU0NSSVBUX05BTUUgPSAia2V5bWFwLnNoIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMDEgUyAuIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwgKCkgeworICAgICMgT25seSBpbnN0YWxsIHRoZSBzY3JpcHQgaWYgJ3N5c3Zpbml0JyBpcyBpbiBESVNUUk9fRkVBVFVSRVMKKyAgICAjIFRIZSB1bGl0aXR5IHRoaXMgc2NyaXB0IHByb3ZpZGVzIGNvdWxkIGJlIGFjaGlldmVkIGJ5IHN5c3RlbWQtdmNvbnNvbGUtc2V0dXAuc2VydmljZQorICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0va2V5bWFwLnNoICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKyAgICBmaQorfQorCitERVBFTkRTX2FwcGVuZCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCdzeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUnLCcnLGQpfSIKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQgc3lzdmluaXQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCQlpZiBbIC1uICIkRCIgXTsgdGhlbgorCQkJT1BUUz0iLS1yb290PSREIgorCQlmaQorCQlzeXN0ZW1jdGwgJE9QVFMgbWFzayBrZXltYXAuc2VydmljZQorCWZpCit9CisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9sZGZsYWdzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzQyNGMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDQxIEBACitsaWJhY3BpOiBSZW1vdmUgUUEgd2FybmluZzogTm8gR05VX0hBU0ggaW4gdGhlIGVsZiBiaW5hcnkKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKyAgVXNlZnVsIHdpdGhpbiBiaXRiYWtlIGVudmlyb25tZW50IG9ubHkuCisKK1NpZ25lZC1vZmYtYnk6IE11aGFtbWFkIFNoYWtlZWwgPG11aGFtbWFkX3NoYWtlZWxAbWVudG9yLmNvbT4KKworLS0tCisgTWFrZWZpbGUgIHwgICAgMyArKy0KKyBjb25maWcubWsgfCAgICAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCistLS0gbGliYWNwaS0wLjIub3JpZy9NYWtlZmlsZQorKysrIGxpYmFjcGktMC4yL01ha2VmaWxlCitAQCAtMTksNiArMTksNyBAQCBvcHRpb25zOgorIAlAZWNobyAiQ0ZMQUdTICAgPSAke0NGTEFHU30iCisgCUBlY2hvICJDQyAgICAgICA9ICR7Q0N9IgorIAlAZWNobyAiU09GTEFHUyAgPSAke1NPRkxBR1N9IgorKwlAZWNobyAiTERGTEFHUyAgPSAke0xERkxBR1N9IgorIAlAZWNobyAiTEQgICAgICAgPSAke0xEfSIKKyAKKyAuYy5vOgorQEAgLTM0LDcgKzM1LDcgQEAgbGliYWNwaS5hOiAke09CSn0KKyAKKyBsaWJhY3BpLnNvOiAke09CSn0KKyAJQGVjaG8gTEQgJEAKKy0JQCR7Q0N9ICR7U09GTEFHU30gLW8gJEAuJHtTT1ZFUlNJT059ICR7T0JKfQorKwlAJHtDQ30gJHtTT0ZMQUdTfSAke0xERkxBR1N9IC1vICRALiR7U09WRVJTSU9OfSAke09CSn0KKyAKKyB0ZXN0LWxpYmFjcGk6ICR7T0JKX3Rlc3R9CisgCUBlY2hvIExEICRACistLS0gbGliYWNwaS0wLjIub3JpZy9jb25maWcubWsKKysrKyBsaWJhY3BpLTAuMi9jb25maWcubWsKK0BAIC0xMCw2ICsxMCw3IEBAIE1BTlBSRUZJWCA9ICR7UFJFRklYfS9zaGFyZS9tYW4KKyBTT0ZMQUdTID0gLXNoYXJlZCAtV2wsLXNvbmFtZSwke1NPTkFNRX0KKyBDRkxBR1MgKz0gLWZQSUMgLWcgLS1wZWRhbnRpYyAtV2FsbCAtV2V4dHJhCisgQVJGTEFHUyA9IGNyCisrTERGTEFHUyA9CisgCisgIyBDb21waWxlciBhbmQgbGlua2VyCisgQ0MgPSBjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbGliYWNwaV9maXhfZm9yX3gzMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL2xpYmFjcGlfZml4X2Zvcl94MzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlZDM0NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL2xpYmFjcGlfZml4X2Zvcl94MzIucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0ZpeCBsaWJhY3BpIGZvciB4MzIKKyAgICAKKyAgICBsaWJhY3BpIGRvZXNuJ3QgdXNlIGJhc2VfbGliZGlyIGZvciBpbnN0YWxsLiAgVGhpcyBwYXRjaCBhZGRzCisgICAgYmFzZV9saWJkaXIgc3VwcG9ydCBzbyB0aGF0IHgzMiBsaWJyYXJpZXMgYXJlIGluc3RhbGxlZCBwcm9wZXJseS4KKworUGF0Y2ggUmVjZWl2ZWQgZnJvbTogIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMDUKKworSW5kZXg6IGxpYmFjcGktMC4yL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYWNwaS0wLjIub3JpZy9NYWtlZmlsZQorKysrIGxpYmFjcGktMC4yL01ha2VmaWxlCitAQCAtOCw2ICs4LDEwIEBAIFNSQ190ZXN0ID0gdGVzdC1saWJhY3BpLmMgbGliYWNwaS5jIGxpc3QKKyBPQkogPSAke1NSQzouYz0ub30KKyBPQkpfdGVzdCA9ICR7U1JDX3Rlc3Q6LmM9Lm99CisgCisraWZuZGVmIGJhc2VfbGliZGlyCisrYmFzZV9saWJkaXI9L2xpYgorK2VuZGlmCisrCisgYWxsOiBvcHRpb25zIGxpYmFjcGkuYSBsaWJhY3BpLnNvIHRlc3QtbGliYWNwaQorIAorIG9wdGlvbnM6CitAQCAtNDIsMTMgKzQ2LDEzIEBAIGluc3RhbGw6IGFsbAorIAlAbWtkaXIgLXAgJHtERVNURElSfSR7UFJFRklYfS9pbmNsdWRlCisgCUBjcCAtZiBsaWJhY3BpLmggJHtERVNURElSfSR7UFJFRklYfS9pbmNsdWRlCisgCUBjaG1vZCA2NDQgJHtERVNURElSfSR7UFJFRklYfS9pbmNsdWRlL2xpYmFjcGkuaAorLQlAZWNobyBpbnN0YWxsaW5nIGxpYnJhcnkgdG8gJHtERVNURElSfSR7UFJFRklYfS9saWIKKy0JQG1rZGlyIC1wICR7REVTVERJUn0ke1BSRUZJWH0vbGliCistCUBjcCAtZiBsaWJhY3BpLmEgJHtERVNURElSfSR7UFJFRklYfS9saWIKKy0JQGNobW9kIDY0NCAke0RFU1RESVJ9JHtQUkVGSVh9L2xpYi9saWJhY3BpLmEKKy0JQGNwIC1mICR7U09OQU1FfSAke0RFU1RESVJ9JHtQUkVGSVh9L2xpYi8KKy0JQGNobW9kIDY0NCAke0RFU1RESVJ9JHtQUkVGSVh9L2xpYi8ke1NPTkFNRX0KKy0JQGxuIC1zICR7U09OQU1FfSAke0RFU1RESVJ9JHtQUkVGSVh9L2xpYi9saWJhY3BpLnNvCisrCUBlY2hvIGluc3RhbGxpbmcgbGlicmFyeSB0byAke0RFU1RESVJ9JHtQUkVGSVh9JHtiYXNlX2xpYmRpcn0KKysJQG1rZGlyIC1wICR7REVTVERJUn0ke1BSRUZJWH0ke2Jhc2VfbGliZGlyfQorKwlAY3AgLWYgbGliYWNwaS5hICR7REVTVERJUn0ke1BSRUZJWH0ke2Jhc2VfbGliZGlyfQorKwlAY2htb2QgNjQ0ICR7REVTVERJUn0ke1BSRUZJWH0ke2Jhc2VfbGliZGlyfS9saWJhY3BpLmEKKysJQGNwIC1mICR7U09OQU1FfSAke0RFU1RESVJ9JHtQUkVGSVh9JHtiYXNlX2xpYmRpcn0vCisrCUBjaG1vZCA2NDQgJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9LyR7U09OQU1FfQorKwlAbG4gLXMgJHtTT05BTUV9ICR7REVTVERJUn0ke1BSRUZJWH0ke2Jhc2VfbGliZGlyfS9saWJhY3BpLnNvCisgCUBlY2hvIGluc3RhbGxpbmcgdGVzdC1saWJhY3BpIHRvICR7REVTVERJUn0ke1BSRUZJWH0vYmluCisgCUBta2RpciAtcCAke0RFU1RESVJ9JHtQUkVGSVh9L2JpbgorIAlAY3AgLWYgdGVzdC1saWJhY3BpICR7REVTVERJUn0ke1BSRUZJWH0vYmluCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9tYWtlZmlsZS1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9tYWtlZmlsZS1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM0ZWYzNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL21ha2VmaWxlLWZpeC5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tCisgTWFrZWZpbGUgIHwgICAgNiArKystLS0KKyBjb25maWcubWsgfCAgICAzICsrLQorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitJbmRleDogbGliYWNwaS0wLjIvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhY3BpLTAuMi5vcmlnL01ha2VmaWxlCTIwMDctMDctMjkgMTQ6MDk6MzQuMDAwMDAwMDAwICswMjAwCisrKysgbGliYWNwaS0wLjIvTWFrZWZpbGUJMjAwOC0wOS0yNiAxMDozNDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNSwxNiArMjUsMTYgQEAgJHtPQkp9OiBjb25maWcubWsgbGliYWNwaS5oCisgCisgbGliYWNwaS5hOiAke09CSn0KKyAJQGVjaG8gQVIgJEAKKy0JQCR7QVJ9ICRAICR7T0JKfQorKwkke0FSfSAke0FSRkxBR1N9ICRAICR7T0JKfQorIAlAJHtSQU5MSUJ9ICRACisgCisgbGliYWNwaS5zbzogJHtPQkp9CisgCUBlY2hvIExEICRACistCUAke0xEfSAke1NPRkxBR1N9IC1vICRALiR7U09WRVJTSU9OfSAke09CSn0KKysJQCR7Q0N9ICR7U09GTEFHU30gLW8gJEAuJHtTT1ZFUlNJT059ICR7T0JKfQorIAorIHRlc3QtbGliYWNwaTogJHtPQkpfdGVzdH0KKyAJQGVjaG8gTEQgJEAKKy0JQCR7TER9IC1vICRAICR7T0JKX3Rlc3R9ICR7TERGTEFHU30KKysJQCR7Q0N9IC1vICRAICR7T0JKX3Rlc3R9ICR7TERGTEFHU30KKyAJQHN0cmlwICRACisgCisgaW5zdGFsbDogYWxsCitJbmRleDogbGliYWNwaS0wLjIvY29uZmlnLm1rCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYWNwaS0wLjIub3JpZy9jb25maWcubWsJMjAwNy0wNy0yOSAxNDowOTozNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJhY3BpLTAuMi9jb25maWcubWsJMjAwOC0wOS0yNiAxMDozNDozMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC05LDkgKzksMTAgQEAgTUFOUFJFRklYID0gJHtQUkVGSVh9L3NoYXJlL21hbgorICMgZmxhZ3MKKyBTT0ZMQUdTID0gLXNoYXJlZCAtV2wsLXNvbmFtZSwke1NPTkFNRX0KKyBDRkxBR1MgKz0gLWZQSUMgLWcgLS1wZWRhbnRpYyAtV2FsbCAtV2V4dHJhCisrQVJGTEFHUyA9IGNyCisgCisgIyBDb21waWxlciBhbmQgbGlua2VyCisgQ0MgPSBjYworIExEID0gJHtDQ30KKy1BUiA9IGFyIGNyCisrQVIgPSBhcgorIFJBTkxJQiA9IHJhbmxpYgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvdXNlX2NvcnJlY3Rfc3RyaXBfaW5fY3Jvc3NfZW52aXJvbm1lbnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy91c2VfY29ycmVjdF9zdHJpcF9pbl9jcm9zc19lbnZpcm9ubWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2E3NWZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvdXNlX2NvcnJlY3Rfc3RyaXBfaW5fY3Jvc3NfZW52aXJvbm1lbnQucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1VzZWQgdGhlIGNyb3NzIHN0cmlwIGluc3RlYWQgb2YgaG9zdCBzdHJpcCB0byBhdm9pZCB0aGlzIGJ1aWxkIGVycm9yOgorCit8IHN0cmlwOiBVbmFibGUgdG8gcmVjb2duaXNlIHRoZSBmb3JtYXQgb2YgdGhlIGlucHV0IGZpbGUgYHRlc3QtbGliYWNwaScKK3wgbWFrZTogKioqIFt0ZXN0LWxpYmFjcGldIEVycm9yIDEKK3wgRVJST1I6IG9lX3J1bm1ha2UgZmFpbGVkCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMDcKKworSW5kZXg6IGxpYmFjcGktMC4yL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYWNwaS0wLjIub3JpZy9NYWtlZmlsZQorKysrIGxpYmFjcGktMC4yL01ha2VmaWxlCitAQCAtMzksNyArMzksNyBAQCBsaWJhY3BpLnNvOiAke09CSn0KKyB0ZXN0LWxpYmFjcGk6ICR7T0JKX3Rlc3R9CisgCUBlY2hvIExEICRACisgCUAke0NDfSAtbyAkQCAke09CSl90ZXN0fSAke0xERkxBR1N9CistCUBzdHJpcCAkQAorKwlAJHtTVFJJUH0gJEAKKyAKKyBpbnN0YWxsOiBhbGwKKyAJQGVjaG8gaW5zdGFsbGluZyBoZWFkZXIgdG8gJHtERVNURElSfSR7UFJFRklYfS9pbmNsdWRlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9saWJhY3BpXzAuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2xpYmFjcGlfMC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMzAyZjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9saWJhY3BpXzAuMi5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkFDUEkgZGF0YSBnYXRoZXJpbmcgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkdlbmVyYWwgcHVycG9zZSBzaGFyZWQgbGlicmFyeSBmb3IgcHJvZ3JhbXMgZ2F0aGVyaW5nIEFDUEkgZGF0YSBvbiBMaW51eC4gXAorVGhlcm1hbCB6b25lcywgYmF0dGVyeSBpbmZvbXJhdGlvbiwgZmFuIGluZm9ybWF0aW9uIGFuZCBBQyBzdGF0ZXMgYXJlIGltcGxlbWVudGVkLiIKK1NFQ1RJT04gPSAiYmFzZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubmdvbGRlLmRlL2xpYmFjcGkuaHRtbCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZmVjMTdmODJmMTY2MzBhZGYyZGZiN2QyYTQ2ZjIxYzUiCitQUiA9ICJyNiIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm5nb2xkZS5kZS9kb3dubG9hZC9saWJhY3BpLSR7UFZ9LnRhci5neiBcCisJICAgZmlsZTovL21ha2VmaWxlLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL2xpYmFjcGlfZml4X2Zvcl94MzIucGF0Y2ggXAorCSAgIGZpbGU6Ly91c2VfY29ycmVjdF9zdHJpcF9pbl9jcm9zc19lbnZpcm9ubWVudC5wYXRjaCBcCisJICAgZmlsZTovL2xkZmxhZ3MucGF0Y2ggIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDViNTNkZDdiZWFkNjZkZGEzNWZlYzUwMmI5MTA2NmMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTMwODZlMzFkNDI4YjljMTI1OTU0ZDQ4YWM0OTdiNzU0YmJiY2UyZWYzNGVhMjllY2Q5MDNlODJlMjViYWQyOSIKKworaW5oZXJpdCBsaWJfcGFja2FnZQorCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NHxpLjg2KS4qLShsaW51eHxmcmVlYnNkLiopJworCitDRkxBR1MgKz0gIi1mUElDIgorRVhUUkFfT0VNQUtFICs9ICdTVFJJUD0iZWNobyInCisKK1RBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0gUFJFRklYPSR7ZXhlY19wcmVmaXh9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9hY2RlZmluZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2FjZGVmaW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MmNmNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9hY2RlZmluZS5wYXRjaApAQCAtMCwwICsxLDE5IEBACitBZGQgYSBkZXNjcmlwdGlvbiB0byB0aGUgQUNfREVGSU5FIGZvciBMT0NBTEVESVIgc28gdGhhdCBpdCBhcHBlYXJzIGluIGNvbmZpZy5oCithbmQgc2lsZW5jZXMgYSBmYXRhbCB3YXJuaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6UGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggYzEwNDYwYy4uYWEyMDI2MyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMjU4LDcgKzI1OCw3IEBAIEFDX1NVQlNUKExJQlMpCisgCisgQU1fR05VX0dFVFRFWFQKKyAKKy1BQ19ERUZJTkVfVU5RVU9URUQoTE9DQUxFRElSLCIkcHJlZml4LyREQVRBRElSTkFNRSIpCisrQUNfREVGSU5FX1VOUVVPVEVEKExPQ0FMRURJUiwiJHByZWZpeC8kREFUQURJUk5BTUUiLFtsb2NhbGUgZGlyZWN0b3J5XSkKKyAKKyBBQ19PVVRQVVQoW01ha2VmaWxlIGludGwvTWFrZWZpbGUgbGliL01ha2VmaWxlIHRlc3RzdWl0ZS9NYWtlZmlsZSAgbTQvTWFrZWZpbGUgXAorIG1hbi9NYWtlZmlsZSBwby9NYWtlZmlsZS5pbiBzcmMvTWFrZWZpbGUgZGViaWFuL3J1bGVzIFNwZWNmaWxlIHN5c3R5cGUgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvYXV0b3Rvb2xzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvYXV0b3Rvb2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NDUxOTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9hdXRvdG9vbHMucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0gbHJ6c3otMC4xMi4yMC9hY2luY2x1ZGUubTR+YXV0b3Rvb2xzCTE5OTgtMTItMjcgMTc6MDg6NTkuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9hY2luY2x1ZGUubTQJMjAwNC0wNS0wOSAyMjoyNjoxOS4wMDAwMDAwMDAgLTA0MDAKK0BAIC0xLDEyICsxLDExIEBACisgZG5sIEFDX1JFUExBQ0VfR05VX0dFVE9QVAorLUFDX0RFRlVOKEFDX1JFUExBQ0VfR05VX0dFVE9QVCwKKy1bQUNfQ0hFQ0tfRlVOQyhnZXRvcHRfbG9uZywgLCBbTElCT0JKUz0iJExJQk9CSlMgZ2V0b3B0MS5vIGdldG9wdC5vIl0pCistQUNfU1VCU1QoTElCT0JKUylkbmwKKy1dKQorK0FDX0RFRlVOKFtBQ19SRVBMQUNFX0dOVV9HRVRPUFRdLAorK1tBQ19DSEVDS19GVU5DKGdldG9wdF9sb25nLCAsIFtBQ19MSUJPQkooW2dldG9wdDFdKQorK0FDX0xJQk9CSihbZ2V0b3B0XSlkbmxdKV0pCisgCisgZG5sCisgZG5sIHRha2VuIGZyb20gdGF5bG9yIHV1Y3AKKy1BQ19ERUZVTihMUlpTWl9FUlJOT19ERUNMLFsKKytBQ19ERUZVTihbTFJaU1pfRVJSTk9fREVDTF0sWworIEFDX01TR19DSEVDS0lORyhmb3IgZXJybm8gZGVjbGFyYXRpb24pCisgQUNfQ0FDSEVfVkFMKGxyenN6X2N2X2RlY2xfZXJybm8sCisgW0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8ZXJybm8uaD5dLCBbaW50IGkgPSBlcnJubzsgZXJybm8gPSAxO10sCitAQCAtMjMsNyArMjEsNyBAQAorIF0pCisgCisgZG5sIExSWlNaX1RZUEVfU1BFRURfVAorLUFDX0RFRlVOKExSWlNaX1RZUEVfU1BFRURfVCxbCisrQUNfREVGVU4oW0xSWlNaX1RZUEVfU1BFRURfVF0sWworIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSlkbmwKKyBBQ19SRVFVSVJFKFtMUlpTWl9IRUFERVJTX1RFUk1fSU9dKWRubAorIEFDX01TR19DSEVDS0lORyhmb3Igc3BlZWRfdCkKK0BAIC02MSw3ICs1OSw3IEBACisgZmkKKyBdKQorIAorLUFDX0RFRlVOKGxyenN6X0hFQURFUl9TWVNfU0VMRUNULAorK0FDX0RFRlVOKFtscnpzel9IRUFERVJfU1lTX1NFTEVDVF0sCisgW0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHN5cy90aW1lLmggYW5kIHN5cy9zZWxlY3QuaCBtYXkgYm90aCBiZSBpbmNsdWRlZF0sCisgICBscnpzel9jdl9oZWFkZXJfc3lzX3NlbGVjdCwKKyBbQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2dldHRleHQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9nZXR0ZXh0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMjRhMWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9nZXR0ZXh0LnBhdGNoCkBAIC0wLDAgKzEsMjE4ODQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9BQk9VVC1OTFMJMTk5OC0wNC0yNiAwOToyMjozMC4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL0FCT1VULU5MUwkyMDA0LTA5LTEyIDE0OjQwOjM0LjMyMzc1Mjk1MiAtMDQwMAorQEAgLTEsMTQgKzEsMTQgQEAKKyBOb3RlcyBvbiB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIAorLSAgIEZyZWUgc29mdHdhcmUgaXMgZ29pbmcgaW50ZXJuYXRpb25hbCEgIFRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QKKy1pcyBhIHdheSB0byBnZXQgbWFpbnRhaW5lcnMgb2YgZnJlZSBzb2Z0d2FyZSwgdHJhbnNsYXRvcnMsIGFuZCB1c2VycyBhbGwKKytGcmVlIHNvZnR3YXJlIGlzIGdvaW5nIGludGVybmF0aW9uYWwhICBUaGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IGlzCisrYSB3YXkgdG8gZ2V0IG1haW50YWluZXJzIG9mIGZyZWUgc29mdHdhcmUsIHRyYW5zbGF0b3JzLCBhbmQgdXNlcnMgYWxsCisgdG9nZXRoZXIsIHNvIHRoYXQgd2lsbCBncmFkdWFsbHkgYmVjb21lIGFibGUgdG8gc3BlYWsgbWFueSBsYW5ndWFnZXMuCisgQSBmZXcgcGFja2FnZXMgYWxyZWFkeSBwcm92aWRlIHRyYW5zbGF0aW9ucyBmb3IgdGhlaXIgbWVzc2FnZXMuCisgCisgICAgSWYgeW91IGZvdW5kIHRoaXMgYEFCT1VULU5MUycgZmlsZSBpbnNpZGUgYSBkaXN0cmlidXRpb24sIHlvdSBtYXkKKyBhc3N1bWUgdGhhdCB0aGUgZGlzdHJpYnV0ZWQgcGFja2FnZSBkb2VzIHVzZSBHTlUgYGdldHRleHQnIGludGVybmFsbHksCistaXRzZWxmIGF2YWlsYWJsZSBhdCB5b3VyIG5lYXJlc3QgR05VIGFyY2hpdmUgc2l0ZS4gIEJ1dCB5b3UgZG8gKm5vdCoKKytpdHNlbGYgYXZhaWxhYmxlIGF0IHlvdXIgbmVhcmVzdCBHTlUgYXJjaGl2ZSBzaXRlLiAgQnV0IHlvdSBkbyBfbm90XworIG5lZWQgdG8gaW5zdGFsbCBHTlUgYGdldHRleHQnIHByaW9yIHRvIGNvbmZpZ3VyaW5nLCBpbnN0YWxsaW5nIG9yIHVzaW5nCisgdGhpcyBwYWNrYWdlIHdpdGggbWVzc2FnZXMgdHJhbnNsYXRlZC4KKyAKK0BAIC0yMiwxMCArMjIsMTAgQEAKKyBgZ2V0dGV4dCcgd2hpY2ggaXMgdXNlZC4gIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlCisgYGludGwvVkVSU0lPTicgZmlsZSwgaW4gaW50ZXJuYXRpb25hbGl6ZWQgcGFja2FnZXMuCisgCistT25lIGFkdmlzZSBpbiBhZHZhbmNlCistPT09PT09PT09PT09PT09PT09PT09CisrUXVpY2sgY29uZmlndXJhdGlvbiBhZHZpY2UKKys9PT09PT09PT09PT09PT09PT09PT09PT09PQorIAorLSAgIElmIHlvdSB3YW50IHRvIGV4cGxvaXQgdGhlIGZ1bGwgcG93ZXIgb2YgaW50ZXJuYXRpb25hbGl6YXRpb24sIHlvdQorK0lmIHlvdSB3YW50IHRvIGV4cGxvaXQgdGhlIGZ1bGwgcG93ZXIgb2YgaW50ZXJuYXRpb25hbGl6YXRpb24sIHlvdQorIHNob3VsZCBjb25maWd1cmUgaXQgdXNpbmcKKyAKKyAgICAgIC4vY29uZmlndXJlIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0CitAQCAtMzQsNDIgKzM0LDQwIEBACisgcGFja2FnZSwgZGVzcGl0ZSB0aGUgZXhpc3RlbmNlIG9mIGludGVybmF0aW9uYWxpemluZyBjYXBhYmlsaXRpZXMgaW4gdGhlCisgb3BlcmF0aW5nIHN5c3RlbSB3aGVyZSB0aGlzIHBhY2thZ2UgaXMgYmVpbmcgaW5zdGFsbGVkLiAgU28gZmFyLCBvbmx5CisgdGhlIGBnZXR0ZXh0JyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgR05VIEMgbGlicmFyeSB2ZXJzaW9uIDIgcHJvdmlkZXMgYXMKKy1tYW55IGZlYXR1cmVzIChzdWNoIGFzIGxvY2FsZSBhbGlhcyBvciBtZXNzYWdlIGluaGVyaXRhbmNlKSBhcyB0aGUKKy1pbXBsZW1lbnRhdGlvbiBoZXJlLiAgSXQgaXMgYWxzbyBub3QgcG9zc2libGUgdG8gb2ZmZXIgdGhpcyBhZGRpdGlvbmFsCistZnVuY3Rpb25hbGl0eSBvbiB0b3Agb2YgYSBgY2F0Z2V0cycgaW1wbGVtZW50YXRpb24uICBGdXR1cmUgdmVyc2lvbnMgb2YKKy1HTlUgYGdldHRleHQnIHdpbGwgdmVyeSBsaWtlbHkgY29udmV5IGV2ZW4gbW9yZSBmdW5jdGlvbmFsaXR5LiAgU28gaXQKKy1taWdodCBiZSBhIGdvb2QgaWRlYSB0byBjaGFuZ2UgdG8gR05VIGBnZXR0ZXh0JyBhcyBzb29uIGFzIHBvc3NpYmxlLgorK21hbnkgZmVhdHVyZXMgKHN1Y2ggYXMgbG9jYWxlIGFsaWFzLCBtZXNzYWdlIGluaGVyaXRhbmNlLCBhdXRvbWF0aWMKKytjaGFyc2V0IGNvbnZlcnNpb24gb3IgcGx1cmFsIGZvcm0gaGFuZGxpbmcpIGFzIHRoZSBpbXBsZW1lbnRhdGlvbiBoZXJlLgorK0l0IGlzIGFsc28gbm90IHBvc3NpYmxlIHRvIG9mZmVyIHRoaXMgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IG9uIHRvcAorK29mIGEgYGNhdGdldHMnIGltcGxlbWVudGF0aW9uLiAgRnV0dXJlIHZlcnNpb25zIG9mIEdOVSBgZ2V0dGV4dCcgd2lsbAorK3ZlcnkgbGlrZWx5IGNvbnZleSBldmVuIG1vcmUgZnVuY3Rpb25hbGl0eS4gIFNvIGl0IG1pZ2h0IGJlIGEgZ29vZCBpZGVhCisrdG8gY2hhbmdlIHRvIEdOVSBgZ2V0dGV4dCcgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAKKy0gICBTbyB5b3UgbmVlZCBub3QgcHJvdmlkZSB0aGlzIG9wdGlvbiBpZiB5b3UgYXJlIHVzaW5nIEdOVSBsaWJjIDIgb3IKKysgICBTbyB5b3UgbmVlZCBfbm90XyBwcm92aWRlIHRoaXMgb3B0aW9uIGlmIHlvdSBhcmUgdXNpbmcgR05VIGxpYmMgMiBvcgorIHlvdSBoYXZlIGluc3RhbGxlZCBhIHJlY2VudCBjb3B5IG9mIHRoZSBHTlUgZ2V0dGV4dCBwYWNrYWdlIHdpdGggdGhlCisgaW5jbHVkZWQgYGxpYmludGwnLgorIAorIElOU1RBTEwgTWF0dGVycworID09PT09PT09PT09PT09PQorIAorLSAgIFNvbWUgcGFja2FnZXMgYXJlICJsb2NhbGl6YWJsZSIgd2hlbiBwcm9wZXJseSBpbnN0YWxsZWQ7IHRoZQorLXByb2dyYW1zIHRoZXkgY29udGFpbiBjYW4gYmUgbWFkZSB0byBzcGVhayB5b3VyIG93biBuYXRpdmUgbGFuZ3VhZ2UuCistTW9zdCBzdWNoIHBhY2thZ2VzIHVzZSBHTlUgYGdldHRleHQnLiAgT3RoZXIgcGFja2FnZXMgaGF2ZSB0aGVpciBvd24KKy13YXlzIHRvIGludGVybmF0aW9uYWxpemF0aW9uLCBwcmVkYXRpbmcgR05VIGBnZXR0ZXh0Jy4KKytTb21lIHBhY2thZ2VzIGFyZSAibG9jYWxpemFibGUiIHdoZW4gcHJvcGVybHkgaW5zdGFsbGVkOyB0aGUgcHJvZ3JhbXMKKyt0aGV5IGNvbnRhaW4gY2FuIGJlIG1hZGUgdG8gc3BlYWsgeW91ciBvd24gbmF0aXZlIGxhbmd1YWdlLiAgTW9zdCBzdWNoCisrcGFja2FnZXMgdXNlIEdOVSBgZ2V0dGV4dCcuICBPdGhlciBwYWNrYWdlcyBoYXZlIHRoZWlyIG93biB3YXlzIHRvCisraW50ZXJuYXRpb25hbGl6YXRpb24sIHByZWRhdGluZyBHTlUgYGdldHRleHQnLgorIAorICAgIEJ5IGRlZmF1bHQsIHRoaXMgcGFja2FnZSB3aWxsIGJlIGluc3RhbGxlZCB0byBhbGxvdyB0cmFuc2xhdGlvbiBvZgorLW1lc3NhZ2VzLiAgSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGV0aGVyIHRoZSBzeXN0ZW0gcHJvdmlkZXMKKy11c2FibGUgYGNhdGdldHMnIChpZiB1c2luZyB0aGlzIGlzIHNlbGVjdGVkIGJ5IHRoZSBpbnN0YWxsZXIpIG9yCistYGdldHRleHQnIGZ1bmN0aW9ucy4gIElmIG5laXRoZXIgaXMgYXZhaWxhYmxlLCB0aGUgR05VIGBnZXR0ZXh0JyBvd24KKyttZXNzYWdlcy4gIEl0IHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3Qgd2hldGhlciB0aGUgc3lzdGVtIGFscmVhZHkKKytwcm92aWRlcyB0aGUgR05VIGBnZXR0ZXh0JyBmdW5jdGlvbnMuICBJZiBub3QsIHRoZSBHTlUgYGdldHRleHQnIG93bgorIGxpYnJhcnkgd2lsbCBiZSB1c2VkLiAgVGhpcyBsaWJyYXJ5IGlzIHdob2xseSBjb250YWluZWQgd2l0aGluIHRoaXMKKyBwYWNrYWdlLCB1c3VhbGx5IGluIHRoZSBgaW50bC8nIHN1YmRpcmVjdG9yeSwgc28gcHJpb3IgaW5zdGFsbGF0aW9uIG9mCistdGhlIEdOVSBgZ2V0dGV4dCcgcGFja2FnZSBpcyAqbm90KiByZXF1aXJlZC4gIEluc3RhbGxlcnMgbWF5IHVzZQorK3RoZSBHTlUgYGdldHRleHQnIHBhY2thZ2UgaXMgX25vdF8gcmVxdWlyZWQuICBJbnN0YWxsZXJzIG1heSB1c2UKKyBzcGVjaWFsIG9wdGlvbnMgYXQgY29uZmlndXJhdGlvbiB0aW1lIGZvciBjaGFuZ2luZyB0aGUgZGVmYXVsdAorIGJlaGF2aW91ci4gIFRoZSBjb21tYW5kczoKKyAKKyAgICAgIC4vY29uZmlndXJlIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0CistICAgICAuL2NvbmZpZ3VyZSAtLXdpdGgtY2F0Z2V0cworICAgICAgLi9jb25maWd1cmUgLS1kaXNhYmxlLW5scworIAorLXdpbGwgcmVzcGVjdGl2ZWx5IGJ5cGFzcyBhbnkgcHJlLWV4aXN0aW5nIGBjYXRnZXRzJyBvciBgZ2V0dGV4dCcgdG8gdXNlCistdGhlIGludGVybmF0aW9uYWxpemluZyByb3V0aW5lcyBwcm92aWRlZCB3aXRoaW4gdGhpcyBwYWNrYWdlLCBlbmFibGUKKy10aGUgdXNlIG9mIHRoZSBgY2F0Z2V0cycgZnVuY3Rpb25zIChpZiBmb3VuZCBvbiB0aGUgbG9jYWxlIHN5c3RlbSksIG9yCistZWxzZSwgKnRvdGFsbHkqIGRpc2FibGUgdHJhbnNsYXRpb24gb2YgbWVzc2FnZXMuCisrd2lsbCByZXNwZWN0aXZlbHkgYnlwYXNzIGFueSBwcmUtZXhpc3RpbmcgYGdldHRleHQnIHRvIHVzZSB0aGUKKytpbnRlcm5hdGlvbmFsaXppbmcgcm91dGluZXMgcHJvdmlkZWQgd2l0aGluIHRoaXMgcGFja2FnZSwgb3IgZWxzZSwKKytfdG90YWxseV8gZGlzYWJsZSB0cmFuc2xhdGlvbiBvZiBtZXNzYWdlcy4KKyAKKyAgICBXaGVuIHlvdSBhbHJlYWR5IGhhdmUgR05VIGBnZXR0ZXh0JyBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0gYW5kIHJ1bgorIGNvbmZpZ3VyZSB3aXRob3V0IGFuIG9wdGlvbiBmb3IgeW91ciBuZXcgcGFja2FnZSwgYGNvbmZpZ3VyZScgd2lsbAorQEAgLTgzLDE4ICs4MSwxMCBAQAorIAorIHRvIHByZXZlbnQgYXV0by1kZXRlY3Rpb24uCisgCistICAgQnkgZGVmYXVsdCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIHdpbGwgbm90IHRlc3QgZm9yIHRoZSBgY2F0Z2V0cycKKy1mdW5jdGlvbiBhbmQgdGhlcmVmb3JlIHRoZXkgd2lsbCBub3QgYmUgdXNlZC4gIFRoZSByZWFzb25zIGFyZSBhbHJlYWR5CistZ2l2ZW4gYWJvdmU6IHRoZSBlbXVsYXRpb24gb24gdG9wIG9mIGBjYXRnZXRzJyBjYW5ub3QgcHJvdmlkZSBhbGwgdGhlCistZXh0ZW5zaW9ucyBwcm92aWRlZCBieSB0aGUgR05VIGBnZXR0ZXh0JyBsaWJyYXJ5LiAgSWYgeW91IG5ldmVydGhlbGVzcworLXdhbnQgdG8gdXNlIHRoZSBgY2F0Z2V0cycgZnVuY3Rpb25zIHVzZQorLQorLSAgICAgLi9jb25maWd1cmUgLS13aXRoLWNhdGdldHMKKy0KKy10byBlbmFibGUgdGhlIHRlc3QgZm9yIGBjYXRnZXRzJyAodGhpcyBjYXVzZXMgbm8gaGFybSBpZiBgY2F0Z2V0cycgaXMKKy1ub3QgYXZhaWxhYmxlIG9uIHlvdXIgc3lzdGVtKS4gIElmIHlvdSByZWFsbHkgc2VsZWN0IHRoaXMgb3B0aW9uIHdlCistd291bGQgbGlrZSB0byBoZWFyIGFib3V0IHRoZSByZWFzb25zIGJlY2F1c2Ugd2UgY2Fubm90IHRoaW5rIG9mIGFueQorLWdvb2Qgb25lIG91cnNlbGYuCisrICAgVGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyB3aWxsIG5vdCB0ZXN0IGZvciB0aGUgYGNhdGdldHMnIGZ1bmN0aW9uCisrYW5kIHRoZXJlZm9yZSBpdCB3aWxsIG5vdCBiZSB1c2VkLiAgVGhlIHJlYXNvbiBpcyB0aGF0IGV2ZW4gYW4KKytlbXVsYXRpb24gb2YgYGdldHRleHQnIG9uIHRvcCBvZiBgY2F0Z2V0cycgY291bGQgbm90IHByb3ZpZGUgYWxsIHRoZQorK2V4dGVuc2lvbnMgb2YgdGhlIEdOVSBgZ2V0dGV4dCcgbGlicmFyeS4KKyAKKyAgICBJbnRlcm5hdGlvbmFsaXplZCBwYWNrYWdlcyBoYXZlIHVzdWFsbHkgbWFueSBgcG8vTEwucG8nIGZpbGVzLCB3aGVyZQorIExMIGdpdmVzIGFuIElTTyA2MzkgdHdvLWxldHRlciBjb2RlIGlkZW50aWZ5aW5nIHRoZSBsYW5ndWFnZS4gIFVubGVzcworQEAgLTEwOCw1NyArOTgsNzMgQEAKKyBVc2luZyBUaGlzIFBhY2thZ2UKKyA9PT09PT09PT09PT09PT09PT0KKyAKKy0gICBBcyBhIHVzZXIsIGlmIHlvdXIgbGFuZ3VhZ2UgaGFzIGJlZW4gaW5zdGFsbGVkIGZvciB0aGlzIHBhY2thZ2UsIHlvdQorK0FzIGEgdXNlciwgaWYgeW91ciBsYW5ndWFnZSBoYXMgYmVlbiBpbnN0YWxsZWQgZm9yIHRoaXMgcGFja2FnZSwgeW91Cisgb25seSBoYXZlIHRvIHNldCB0aGUgYExBTkcnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBhcHByb3ByaWF0ZQorLUlTTyA2MzkgYExMJyB0d28tbGV0dGVyIGNvZGUgcHJpb3IgdG8gdXNpbmcgdGhlIHByb2dyYW1zIGluIHRoZQorLXBhY2thZ2UuICBGb3IgZXhhbXBsZSwgbGV0J3Mgc3VwcG9zZSB0aGF0IHlvdSBzcGVhayBHZXJtYW4uICBBdCB0aGUKKy1zaGVsbCBwcm9tcHQsIG1lcmVseSBleGVjdXRlIGBzZXRlbnYgTEFORyBkZScgKGluIGBjc2gnKSwKKy1gZXhwb3J0IExBTkc7IExBTkc9ZGUnIChpbiBgc2gnKSBvciBgZXhwb3J0IExBTkc9ZGUnIChpbiBgYmFzaCcpLiAgVGhpcworLWNhbiBiZSBkb25lIGZyb20geW91ciBgLmxvZ2luJyBvciBgLnByb2ZpbGUnIGZpbGUsIG9uY2UgYW5kIGZvciBhbGwuCisrYExMX0NDJyBjb21iaW5hdGlvbi4gIEhlcmUgYExMJyBpcyBhbiBJU08gNjM5IHR3by1sZXR0ZXIgbGFuZ3VhZ2UgY29kZSwKKythbmQgYENDJyBpcyBhbiBJU08gMzE2NiB0d28tbGV0dGVyIGNvdW50cnkgY29kZS4gIEZvciBleGFtcGxlLCBsZXQncworK3N1cHBvc2UgdGhhdCB5b3Ugc3BlYWsgR2VybWFuIGFuZCBsaXZlIGluIEdlcm1hbnkuICBBdCB0aGUgc2hlbGwKKytwcm9tcHQsIG1lcmVseSBleGVjdXRlIGBzZXRlbnYgTEFORyBkZV9ERScgKGluIGBjc2gnKSwKKytgZXhwb3J0IExBTkc7IExBTkc9ZGVfREUnIChpbiBgc2gnKSBvciBgZXhwb3J0IExBTkc9ZGVfREUnIChpbiBgYmFzaCcpLgorK1RoaXMgY2FuIGJlIGRvbmUgZnJvbSB5b3VyIGAubG9naW4nIG9yIGAucHJvZmlsZScgZmlsZSwgb25jZSBhbmQgZm9yCisrYWxsLgorIAorLSAgIEFuIG9wZXJhdGluZyBzeXN0ZW0gbWlnaHQgYWxyZWFkeSBvZmZlciBtZXNzYWdlIGxvY2FsaXphdGlvbiBmb3IKKy1tYW55IG9mIGl0cyBwcm9ncmFtcywgd2hpbGUgb3RoZXIgcHJvZ3JhbXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBsb2NhbGx5Cistd2l0aCB0aGUgZnVsbCBjYXBhYmlsaXRpZXMgb2YgR05VIGBnZXR0ZXh0Jy4gIEp1c3QgdXNpbmcgYGdldHRleHQnCistZXh0ZW5kZWQgc3ludGF4IGZvciBgTEFORycgd291bGQgYnJlYWsgcHJvcGVyIGxvY2FsaXphdGlvbiBvZiBhbHJlYWR5CistYXZhaWxhYmxlIG9wZXJhdGluZyBzeXN0ZW0gcHJvZ3JhbXMuICBJbiB0aGlzIGNhc2UsIHVzZXJzIHNob3VsZCBzZXQKKy1ib3RoIGBMQU5HVUFHRScgYW5kIGBMQU5HJyB2YXJpYWJsZXMgaW4gdGhlaXIgZW52aXJvbm1lbnQsIGFzIHByb2dyYW1zCistdXNpbmcgR05VIGBnZXR0ZXh0JyBnaXZlIHByZWZlcmVuY2UgdG8gYExBTkdVQUdFJy4gIEZvciBleGFtcGxlLCBzb21lCistU3dlZGlzaCB1c2VycyB3b3VsZCByYXRoZXIgcmVhZCB0cmFuc2xhdGlvbnMgaW4gR2VybWFuIHRoYW4gRW5nbGlzaCBmb3IKKy13aGVuIFN3ZWRpc2ggaXMgbm90IGF2YWlsYWJsZS4gIFRoaXMgaXMgZWFzaWx5IGFjY29tcGxpc2hlZCBieSBzZXR0aW5nCistYExBTkdVQUdFJyB0byBgc3Y6ZGUnIHdoaWxlIGxlYXZpbmcgYExBTkcnIHRvIGBzdicuCisrICAgWW91IG1pZ2h0IHRoaW5rIHRoYXQgdGhlIGNvdW50cnkgY29kZSBzcGVjaWZpY2F0aW9uIGlzIHJlZHVuZGFudC4KKytCdXQgaW4gZmFjdCwgc29tZSBsYW5ndWFnZXMgaGF2ZSBkaWFsZWN0cyBpbiBkaWZmZXJlbnQgY291bnRyaWVzLiAgRm9yCisrZXhhbXBsZSwgYGRlX0FUJyBpcyB1c2VkIGZvciBBdXN0cmlhLCBhbmQgYHB0X0JSJyBmb3IgQnJhemlsLiAgVGhlCisrY291bnRyeSBjb2RlIHNlcnZlcyB0byBkaXN0aW5ndWlzaCB0aGUgZGlhbGVjdHMuCisrCisrICAgVGhlIGxvY2FsZSBuYW1pbmcgY29udmVudGlvbiBvZiBgTExfQ0MnLCB3aXRoIGBMTCcgZGVub3RpbmcgdGhlCisrbGFuZ3VhZ2UgYW5kIGBDQycgZGVub3RpbmcgdGhlIGNvdW50cnksIGlzIHRoZSBvbmUgdXNlIG9uIHN5c3RlbXMgYmFzZWQKKytvbiBHTlUgbGliYy4gIE9uIG90aGVyIHN5c3RlbXMsIHNvbWUgdmFyaWF0aW9ucyBvZiB0aGlzIHNjaGVtZSBhcmUKKyt1c2VkLCBzdWNoIGFzIGBMTCcgb3IgYExMX0NDLkVOQ09ESU5HJy4gIFlvdSBjYW4gZ2V0IHRoZSBsaXN0IG9mCisrbG9jYWxlcyBzdXBwb3J0ZWQgYnkgeW91ciBzeXN0ZW0gZm9yIHlvdXIgY291bnRyeSBieSBydW5uaW5nIHRoZSBjb21tYW5kCisrYGxvY2FsZSAtYSB8IGdyZXAgJ15MTCcnLgorKworKyAgIE5vdCBhbGwgcHJvZ3JhbXMgaGF2ZSB0cmFuc2xhdGlvbnMgZm9yIGFsbCBsYW5ndWFnZXMuICBCeSBkZWZhdWx0LCBhbgorK0VuZ2xpc2ggbWVzc2FnZSBpcyBzaG93biBpbiBwbGFjZSBvZiBhIG5vbmV4aXN0ZW50IHRyYW5zbGF0aW9uLiAgSWYgeW91CisrdW5kZXJzdGFuZCBvdGhlciBsYW5ndWFnZXMsIHlvdSBjYW4gc2V0IHVwIGEgcHJpb3JpdHkgbGlzdCBvZiBsYW5ndWFnZXMuCisrVGhpcyBpcyBkb25lIHRocm91Z2ggYSBkaWZmZXJlbnQgZW52aXJvbm1lbnQgdmFyaWFibGUsIGNhbGxlZAorK2BMQU5HVUFHRScuICBHTlUgYGdldHRleHQnIGdpdmVzIHByZWZlcmVuY2UgdG8gYExBTkdVQUdFJyBvdmVyIGBMQU5HJworK2ZvciB0aGUgcHVycG9zZSBvZiBtZXNzYWdlIGhhbmRsaW5nLCBidXQgeW91IHN0aWxsIG5lZWQgdG8gaGF2ZSBgTEFORycKKytzZXQgdG8gdGhlIHByaW1hcnkgbGFuZ3VhZ2U7IHRoaXMgaXMgcmVxdWlyZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlCisrc3lzdGVtIGxpYnJhcmllcy4gIEZvciBleGFtcGxlLCBzb21lIFN3ZWRpc2ggdXNlcnMgd2hvIHdvdWxkIHJhdGhlcgorK3JlYWQgdHJhbnNsYXRpb25zIGluIEdlcm1hbiB0aGFuIEVuZ2xpc2ggZm9yIHdoZW4gU3dlZGlzaCBpcyBub3QKKythdmFpbGFibGUsIHNldCBgTEFOR1VBR0UnIHRvIGBzdjpkZScgd2hpbGUgbGVhdmluZyBgTEFORycgdG8gYHN2X1NFJy4KKysKKysgICBTcGVjaWFsIGFkdmljZSBmb3IgTm9yd2VnaWFuIHVzZXJzOiBUaGUgbGFuZ3VhZ2UgY29kZSBmb3IgTm9yd2VnaWFuCisrYm9rbWEqbCBjaGFuZ2VkIGZyb20gYG5vJyB0byBgbmInIHJlY2VudGx5IChpbiAyMDAzKS4gIER1cmluZyB0aGUKKyt0cmFuc2l0aW9uIHBlcmlvZCwgd2hpbGUgc29tZSBtZXNzYWdlIGNhdGFsb2dzIGZvciB0aGlzIGxhbmd1YWdlIGFyZQorK2luc3RhbGxlZCB1bmRlciBgbmInIGFuZCBzb21lIG9sZGVyIG9uZXMgdW5kZXIgYG5vJywgaXQncyByZWNvbW1lbmRlZAorK2ZvciBOb3J3ZWdpYW4gdXNlcnMgdG8gc2V0IGBMQU5HVUFHRScgdG8gYG5iOm5vJyBzbyB0aGF0IGJvdGggbmV3ZXIgYW5kCisrb2xkZXIgdHJhbnNsYXRpb25zIGFyZSB1c2VkLgorKworKyAgIEluIHRoZSBgTEFOR1VBR0UnIGVudmlyb25tZW50IHZhcmlhYmxlLCBidXQgbm90IGluIHRoZSBgTEFORycKKytlbnZpcm9ubWVudCB2YXJpYWJsZSwgYExMX0NDJyBjb21iaW5hdGlvbnMgY2FuIGJlIGFiYnJldmlhdGVkIGFzIGBMTCcKKyt0byBkZW5vdGUgdGhlIGxhbmd1YWdlJ3MgbWFpbiBkaWFsZWN0LiAgRm9yIGV4YW1wbGUsIGBkZScgaXMgZXF1aXZhbGVudAorK3RvIGBkZV9ERScgKEdlcm1hbiBhcyBzcG9rZW4gaW4gR2VybWFueSksIGFuZCBgcHQnIHRvIGBwdF9QVCcKKysoUG9ydHVndWVzZSBhcyBzcG9rZW4gaW4gUG9ydHVnYWwpIGluIHRoaXMgY29udGV4dC4KKyAKKyBUcmFuc2xhdGluZyBUZWFtcworID09PT09PT09PT09PT09PT09CisgCistICAgRm9yIHRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgdG8gYmUgYSBzdWNjZXNzLCB3ZSBuZWVkIGludGVyZXN0ZWQKKytGb3IgdGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdCB0byBiZSBhIHN1Y2Nlc3MsIHdlIG5lZWQgaW50ZXJlc3RlZAorIHBlb3BsZSB3aG8gbGlrZSB0aGVpciBvd24gbGFuZ3VhZ2UgYW5kIHdyaXRlIGl0IHdlbGwsIGFuZCB3aG8gYXJlIGFsc28KKyBhYmxlIHRvIHN5bmVyZ2l6ZSB3aXRoIG90aGVyIHRyYW5zbGF0b3JzIHNwZWFraW5nIHRoZSBzYW1lIGxhbmd1YWdlLgorLUVhY2ggdHJhbnNsYXRpb24gdGVhbSBoYXMgaXRzIG93biBtYWlsaW5nIGxpc3QsIGNvdXJ0ZXN5IG9mIExpbnV4CistSW50ZXJuYXRpb25hbC4gIFlvdSBtYXkgcmVhY2ggeW91ciB0cmFuc2xhdGlvbiB0ZWFtIGF0IHRoZSBhZGRyZXNzCistYExMQGxpLm9yZycsIHJlcGxhY2luZyBMTCBieSB0aGUgdHdvLWxldHRlciBJU08gNjM5IGNvZGUgZm9yIHlvdXIKKy1sYW5ndWFnZS4gIExhbmd1YWdlIGNvZGVzIGFyZSAqbm90KiB0aGUgc2FtZSBhcyB0aGUgY291bnRyeSBjb2RlcyBnaXZlbgorLWluIElTTyAzMTY2LiAgVGhlIGZvbGxvd2luZyB0cmFuc2xhdGlvbiB0ZWFtcyBleGlzdCwgYXMgb2YgQXVndXN0IDE5OTc6CistCistICAgICBDaGluZXNlIGB6aCcsIEN6ZWNoIGBjcycsIERhbmlzaCBgZGEnLCBEdXRjaCBgbmwnLCBFbmdsaXNoIGBlbicsCistICAgICBFc3BlcmFudG8gYGVvJywgRmlubmlzaCBgZmknLCBGcmVuY2ggYGZyJywgR2VybWFuIGBkZScsIEh1bmdhcmlhbgorLSAgICAgYGh1JywgSXJpc2ggYGdhJywgSXRhbGlhbiBgaXQnLCBJbmRvbmVzaWFuIGBpZCcsIEphcGFuZXNlIGBqYScsCistICAgICBLb3JlYW4gYGtvJywgTGF0aW4gYGxhJywgTm9yd2VnaWFuIGBubycsIFBlcnNpYW4gYGZhJywgUG9saXNoCistICAgICBgcGwnLCBQb3J0dWd1ZXNlIGBwdCcsIFJ1c3NpYW4gYHJ1JywgU2xvdmVuaWFuIGBzbCcsIFNwYW5pc2ggYGVzJywKKy0gICAgIFN3ZWRpc2ggYHN2JywgYW5kIFR1cmtpc2ggYHRyJy4KKy0KKy1Gb3IgZXhhbXBsZSwgeW91IG1heSByZWFjaCB0aGUgQ2hpbmVzZSB0cmFuc2xhdGlvbiB0ZWFtIGJ5IHdyaXRpbmcgdG8KKy1gemhAbGkub3JnJy4KKytFYWNoIHRyYW5zbGF0aW9uIHRlYW0gaGFzIGl0cyBvd24gbWFpbGluZyBsaXN0LiAgVGhlIHVwLXRvLWRhdGUgbGlzdCBvZgorK3RlYW1zIGNhbiBiZSBmb3VuZCBhdCB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0J3MgaG9tZXBhZ2UsCisrYGh0dHA6Ly93d3cuaXJvLnVtb250cmVhbC5jYS9jb250cmliL3BvL0hUTUwvJywgaW4gdGhlICJOYXRpb25hbCB0ZWFtcyIKKythcmVhLgorIAorLSAgIElmIHlvdSdkIGxpa2UgdG8gdm9sdW50ZWVyIHRvICp3b3JrKiBhdCB0cmFuc2xhdGluZyBtZXNzYWdlcywgeW91CisrICAgSWYgeW91J2QgbGlrZSB0byB2b2x1bnRlZXIgdG8gX3dvcmtfIGF0IHRyYW5zbGF0aW5nIG1lc3NhZ2VzLCB5b3UKKyBzaG91bGQgYmVjb21lIGEgbWVtYmVyIG9mIHRoZSB0cmFuc2xhdGluZyB0ZWFtIGZvciB5b3VyIG93biBsYW5ndWFnZS4KKy1UaGUgc3Vic2NyaWJpbmcgYWRkcmVzcyBpcyAqbm90KiB0aGUgc2FtZSBhcyB0aGUgbGlzdCBpdHNlbGYsIGl0IGhhcworK1RoZSBzdWJzY3JpYmluZyBhZGRyZXNzIGlzIF9ub3RfIHRoZSBzYW1lIGFzIHRoZSBsaXN0IGl0c2VsZiwgaXQgaGFzCisgYC1yZXF1ZXN0JyBhcHBlbmRlZC4gIEZvciBleGFtcGxlLCBzcGVha2VycyBvZiBTd2VkaXNoIGNhbiBzZW5kIGEKKyBtZXNzYWdlIHRvIGBzdi1yZXF1ZXN0QGxpLm9yZycsIGhhdmluZyB0aGlzIG1lc3NhZ2UgYm9keToKKyAKKyAgICAgIHN1YnNjcmliZQorIAorICAgIEtlZXAgaW4gbWluZCB0aGF0IHRlYW0gbWVtYmVycyBhcmUgZXhwZWN0ZWQgdG8gcGFydGljaXBhdGUKKy0qYWN0aXZlbHkqIGluIHRyYW5zbGF0aW9ucywgb3IgYXQgc29sdmluZyB0cmFuc2xhdGlvbmFsIGRpZmZpY3VsdGllcywKKytfYWN0aXZlbHlfIGluIHRyYW5zbGF0aW9ucywgb3IgYXQgc29sdmluZyB0cmFuc2xhdGlvbmFsIGRpZmZpY3VsdGllcywKKyByYXRoZXIgdGhhbiBtZXJlbHkgbHVya2luZyBhcm91bmQuICBJZiB5b3VyIHRlYW0gZG9lcyBub3QgZXhpc3QgeWV0IGFuZAorIHlvdSB3YW50IHRvIHN0YXJ0IG9uZSwgb3IgaWYgeW91IGFyZSB1bnN1cmUgYWJvdXQgd2hhdCB0byBkbyBvciBob3cgdG8KKyBnZXQgc3RhcnRlZCwgcGxlYXNlIHdyaXRlIHRvIGB0cmFuc2xhdGlvbkBpcm8udW1vbnRyZWFsLmNhJyB0byByZWFjaCB0aGUKK0BAIC0xNzEsNDMgKzE3Nyw1NTkgQEAKKyBBdmFpbGFibGUgUGFja2FnZXMKKyA9PT09PT09PT09PT09PT09PT0KKyAKKy0gICBMYW5ndWFnZXMgYXJlIG5vdCBlcXVhbGx5IHN1cHBvcnRlZCBpbiBhbGwgcGFja2FnZXMuICBUaGUgZm9sbG93aW5nCistbWF0cml4IHNob3dzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGludGVybmF0aW9uYWxpemF0aW9uLCBhcyBvZiBBdWd1c3QKKy0xOTk3LiAgVGhlIG1hdHJpeCBzaG93cywgaW4gcmVnYXJkIG9mIGVhY2ggcGFja2FnZSwgZm9yIHdoaWNoIGxhbmd1YWdlcworLVBPIGZpbGVzIGhhdmUgYmVlbiBzdWJtaXR0ZWQgdG8gdHJhbnNsYXRpb24gY29vcmRpbmF0aW9uLgorK0xhbmd1YWdlcyBhcmUgbm90IGVxdWFsbHkgc3VwcG9ydGVkIGluIGFsbCBwYWNrYWdlcy4gIFRoZSBmb2xsb3dpbmcKKyttYXRyaXggc2hvd3MgdGhlIGN1cnJlbnQgc3RhdGUgb2YgaW50ZXJuYXRpb25hbGl6YXRpb24sIGFzIG9mIEphbnVhcnkKKysyMDA0LiAgVGhlIG1hdHJpeCBzaG93cywgaW4gcmVnYXJkIG9mIGVhY2ggcGFja2FnZSwgZm9yIHdoaWNoIGxhbmd1YWdlcworK1BPIGZpbGVzIGhhdmUgYmVlbiBzdWJtaXR0ZWQgdG8gdHJhbnNsYXRpb24gY29vcmRpbmF0aW9uLCB3aXRoIGEKKyt0cmFuc2xhdGlvbiBwZXJjZW50YWdlIG9mIGF0IGxlYXN0IDUwJS4KKyAKKy0gICAgIFJlYWR5IFBPIGZpbGVzICAgIGNzIGRhIGRlIGVuIGVzIGZpIGZyIGl0IGphIGtvIG5sIG5vIHBsIHB0IHNsIHN2CistICAgICAgICAgICAgICAgICAgICAgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCistICAgICBiYXNoICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8ICAzCistICAgICBiaXNvbiAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8ICAzCistICAgICBjbGlzcCAgICAgICAgICAgfCAgICAgICBbXSBbXSBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CistICAgICBjcGlvICAgICAgICAgICAgfCAgICAgICBbXSAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICAgICB8ICA1CistICAgICBkaWZmdXRpbHMgICAgICAgfCAgICAgICBbXSAgICBbXSAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8ICA1CistICAgICBlbnNjcmlwdCAgICAgICAgfCAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgICAgICBbXSAgICAgICAgICBbXSAgICB8ICA2CistICAgICBmaWxldXRpbHMgICAgICAgfCBbXSAgICBbXSAgICBbXSAgICBbXSAgICAgICBbXSBbXSAgICBbXSBbXSBbXSBbXSB8IDEwCistICAgICBmaW5kdXRpbHMgICAgICAgfCAgICAgICBbXSAgICBbXSAgICBbXSBbXSAgICBbXSBbXSAgICBbXSAgICAgICBbXSB8ICA4CistICAgICBmbGV4ICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICBbXSB8ICA0CistICAgICBnY2FsICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSB8ICA1CistICAgICBnZXR0ZXh0ICAgICAgICAgfCAgICAgICBbXSAgICBbXSAgICBbXSAgICAgICBbXSBbXSBbXSBbXSBbXSBbXSBbXSB8IDExCistICAgICBncmVwICAgICAgICAgICAgfCAgICAgICBbXSAgICBbXSAgICBbXSAgICAgICBbXSBbXSBbXSBbXSAgICBbXSBbXSB8ICA5CistICAgICBoZWxsbyAgICAgICAgICAgfCAgICAgICBbXSAgICBbXSAgICBbXSAgICAgICBbXSBbXSBbXSBbXSBbXSBbXSBbXSB8IDEwCistICAgICBpZC11dGlscyAgICAgICAgfCAgICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8ICAzCistICAgICBpbmRlbnQgICAgICAgICAgfCAgICBbXSBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICB8ICA0CistICAgICBsaWJjICAgICAgICAgICAgfCAgICAgICBbXSAgICBbXSAgICBbXSAgICAgICBbXSBbXSAgICBbXSAgICAgICBbXSB8ICA3CistICAgICBtNCAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICBbXSAgICBbXSAgICBbXSAgICAgICAgICAgICBbXSB8ICA1CistICAgICBtYWtlICAgICAgICAgICAgfCAgICAgICBbXSAgICBbXSAgICBbXSAgICAgICBbXSBbXSAgICBbXSAgICAgICAgICB8ICA2CistICAgICBtdXNpYyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8ICAyCistICAgICBwdHggICAgICAgICAgICAgfCAgICAgICBbXSAgICBbXSAgICBbXSAgICAgICAgICBbXSBbXSBbXSBbXSAgICBbXSB8ICA4CistICAgICByZWNvZGUgICAgICAgICAgfCAgICBbXSBbXSAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICBbXSBbXSBbXSBbXSB8ICA5CistICAgICBzaC11dGlscyAgICAgICAgfCAgICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSBbXSBbXSAgICBbXSB8ICA3CistICAgICBzaGFydXRpbHMgICAgICAgfCAgICAgICBbXSAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICAgICAgICAgICBbXSB8ICA1CistICAgICB0YXIgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICBbXSBbXSAgICBbXSBbXSBbXSBbXSBbXSBbXSBbXSB8IDEwCistICAgICB0ZXhpbmZvICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCistICAgICB0ZXh0dXRpbHMgICAgICAgfCBbXSAgICBbXSAgICBbXSAgICBbXSAgICAgICBbXSBbXSBbXSBbXSAgICAgICBbXSB8ICA5CistICAgICB3ZGlmZiAgICAgICAgICAgfCBbXSAgICBbXSAgICBbXSAgICBbXSAgICAgICAgICBbXSBbXSBbXSAgICAgICBbXSB8ICA4CistICAgICAgICAgICAgICAgICAgICAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nCistICAgICAgIDE2IGxhbmd1YWdlcyAgICBjcyBkYSBkZSBlbiBlcyBmaSBmciBpdCBqYSBrbyBubCBubyBwbCBwdCBzbCBzdgorLSAgICAgICAyNyBwYWNrYWdlcyAgICAgIDMgIDIgMjQgIDEgMTcgIDEgMjYgIDIgIDEgMTEgMjAgIDkgMTkgIDcgIDcgMTcgIDE2NworKyAgICAgUmVhZHkgUE8gZmlsZXMgICAgICAgYWYgYW0gYXIgYXogYmUgYmcgYnMgY2EgY3MgZGEgZGUgZWwgZW4gZW5fR0IgZW8gZXMKKysgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgIGEycHMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgICAgICAgICAgIHwKKysgICAgIGFlZ2lzICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGFwLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGJhc2ggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgIFtdIFtdIHwKKysgICAgIGJhdGNoZWxvciAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGJmZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGJpc29uICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGJsdWV6LXBpbiAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIFtdIHwKKysgICAgIGNvbnNvbGUtdG9vbHMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGNvcmV1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGNwaW8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGRhcmtzdGF0ICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGRpZmZ1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdIFtdIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGVuc2NyaXB0ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICBbXSAgICAgICAgIHwKKysgICAgIGVycm9yICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICBbXSAgICAgIFtdIHwKKysgICAgIGZldGNobWFpbCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICgpIFtdIFtdIFtdICAgICAgICAgICAgIFtdIHwKKysgICAgIGZpbGV1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgIFtdIFtdIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIGZsZXggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGdhd2sgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGdiaWZmICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdjYyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGdldHRleHQgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGdldHRleHQtZXhhbXBsZXMgICB8IFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGdldHRleHQtcnVudGltZSAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGdldHRleHQtdG9vbHMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGdpbXAtcHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgICBbXSAgICAgIFtdIHwKKysgICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdsdW5hcmNsb2NrICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdudWNhc2ggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICgpICAgICAgICBbXSAgICAgIFtdIHwKKysgICAgIGdudWNhc2gtZ2xvc3NhcnkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICgpICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGdudXBnICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICgpICAgIFtdIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1hZXJpYWwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1iZWFtICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1jYWxlbmRhciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1jbG9jayAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1jb25mICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1lZGl0ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1nbyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1sb2dpbiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1vd25lcmluZm8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1za2V0Y2hib29rICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS1zdSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS10YXNrbWFuYWdlciAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS10aW1lc2hlZXQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS10b2RheSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwZS10b2RvICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdwaG90bzIgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGdwcm9mICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICgpICAgICAgICAgICgpIHwKKysgICAgIGdyYW1hZG9pciAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgIFtdIHwKKysgICAgIGdyZXRsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGd0aWNrICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGhlbGxvICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIGlkLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGluZGVudCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgIFtdIFtdIHwKKysgICAgIGlzb18zMTY2ICAgICAgICAgICB8ICAgICAgICAgIFtdICAgIFtdIFtdIFtdIFtdIFtdIFtdIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIGlzb18zMTY2XzEgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdIFtdIFtdICAgICAgICAgICAgIFtdIHwKKysgICAgIGlzb18zMTY2XzIgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGlzb18zMTY2XzMgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGlzb180MjE3ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGlzb182MzkgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGpwaWxvdCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGp0YWcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGp3aG9pcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGtiZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdIFtdICAgICAgICAgICAgIFtdIHwKKysgICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxkICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGxpYmMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdIFtdIFtdICAgICAgICAgICAgIFtdIHwKKysgICAgIGxpYmdwZXdpZGdldCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxpYmljb252ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgIFtdIFtdIHwKKysgICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICgpICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxpbHlwb25kICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxpbmdvdGVhY2hfbGVzc29ucyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICgpIHwKKysgICAgIGx5bnggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIG00ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdIFtdICAgICAgICAgICAgICAgIHwKKysgICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIG1ha2UgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIG1hbi1kYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICgpIFtdIFtdICAgICAgICAgICAgICAgICgpIHwKKysgICAgIG1pbmljb20gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIG15c2VjcmV0ZGlhcnkgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICgpIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIG5hbm9fMV8wICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICgpIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIG9wY29kZXMgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHBhcnRlZCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHB0eCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgIFtdIFtdIHwKKysgICAgIHB5dGhvbiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHJhZGl1cyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgIFtdIFtdIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIHJwbSAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHNjcmVlbSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHNlZCAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgIFtdIFtdIHwKKysgICAgIHNoLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHNoYXJlZC1taW1lLWluZm8gICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHNoYXJ1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdIFtdIFtdICAgICAgICAgICAgIFtdIHwKKysgICAgIHNpbGt5ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICgpICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHNrZXRjaCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICgpICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHNvdW5kdHJhY2tlciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHRhciAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHRleGluZm8gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIHRleHR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAoKSAgICAgICAgIHwKKysgICAgIHRwLXJvYm90ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHR1eHBhaW50ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdIFtdIFtdICAgICBbXSAgICAgIFtdIHwKKysgICAgIHVuaWNvZGUtaGFuLXRyYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHV0aWwtbGludXggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHdhc3Rlc2VkZ2UgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHdkaWZmICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHdnZXQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdIFtdIFtdICAgICAgICAgICAgIFtdIHwKKysgICAgIHhjaGF0ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgIFtdIHwKKysgICAgIHhmcmVlODZfeGtiX3htbCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHhwYWQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGFmIGFtIGFyIGF6IGJlIGJnIGJzIGNhIGNzIGRhIGRlIGVsIGVuIGVuX0dCIGVvIGVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgMCAgMCAgMSAgOSAgNCAgMSA0MCA0MSA2MCA3OCAxNyAgMSAgIDUgICAxMyA2OAorKyAgICAgCisrICAgICAgICAgICAgICAgICAgICAgICAgICBldCBldSBmYSBmaSBmciBnYSBnbCBoZSBociBodSBpZCBpcyBpdCBqYSBrbyBsZworKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKyAgICAgYTJwcyAgICAgICAgICAgICAgIHwgW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgKCkgICAgKCkgICAgfAorKyAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYW51YmlzICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYmFzaCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgYmF0Y2hlbG9yICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorKyAgICAgYmlzb24gICAgICAgICAgICAgIHwgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgfAorKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgICAgICAgICAgW10gW10gW10gICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgY29yZXV0aWxzICAgICAgICAgIHwgW10gICAgICAgW10gW10gW10gICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgfAorKyAgICAgY3BpbyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgW10gICAgfAorKyAgICAgZGFya3N0YXQgICAgICAgICAgIHwgICAgICAgICAgICAgKCkgW10gICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorKyAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgICAgW10gICAgICAgfAorKyAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZXJyb3IgICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorKyAgICAgZmlsZXV0aWxzICAgICAgICAgIHwgW10gICAgICAgICAgW10gW10gICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgfAorKyAgICAgZmluZHV0aWxzICAgICAgICAgIHwgW10gICAgICAgW10gW10gW10gW10gICAgW10gW10gW10gICAgW10gW10gW10gICAgfAorKyAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgfAorKyAgICAgZ2JpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2V0dGV4dCAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgfAorKyAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorKyAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgfAorKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgfAorKyAgICAgZ2ltcC1wcmludCAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorKyAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgW10gICAgW10gW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ251YmlmZiAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorKyAgICAgZ251Y2FzaC1nbG9zc2FyeSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorKyAgICAgZ251cGcgICAgICAgICAgICAgIHwgW10gICAgICAgW10gW10gICAgW10gICAgICAgICAgW10gICAgW10gW10gICAgICAgfAorKyAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgfAorKyAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorKyAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgKCkgKCkgICAgICAgfAorKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgW10gICAgICAgW10gW10gW10gW10gW10gW10gW10gW10gICAgW10gW10gICAgICAgfAorKyAgICAgZ3JldGwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgaGVsbG8gICAgICAgICAgICAgIHwgW10gICAgW10gW10gW10gW10gW10gW10gW10gW10gW10gICAgW10gW10gW10gICAgfAorKyAgICAgaWQtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgW10gICAgICAgICAgfAorKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgW10gICAgICAgW10gW10gW10gW10gICAgICAgW10gW10gICAgW10gW10gICAgICAgfAorKyAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgICAgW10gICAgICAgW10gW10gICAgICAgW10gW10gW10gICAgW10gICAgICAgICAgfAorKyAgICAgaXNvXzMxNjZfMSAgICAgICAgIHwgICAgW10gICAgICAgW10gW10gICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgaXNvXzMxNjZfMyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgaXNvXzQyMTcgICAgICAgICAgIHwgW10gICAgICAgICAgW10gICAgW10gICAgICAgW10gICAgICAgW10gW10gICAgICAgfAorKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAganBpbG90ICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgfAorKyAgICAganRhZyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgW10gICAgICAgICAgfAorKyAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGF0cmluZSAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGliYyAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgW10gICAgICAgW10gICAgICAgICAgW10gW10gICAgfAorKyAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgW10gICAgICAgW10gW10gW10gW10gICAgW10gW10gW10gICAgW10gICAgICAgICAgfAorKyAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorKyAgICAgbGluZ290ZWFjaF9sZXNzb25zIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbHlueCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgfAorKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gICAgICAgW10gICAgICAgfAorKyAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbWFrZSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgW10gW10gW10gICAgICAgICAgICAgW10gW10gICAgfAorKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgKCkgICAgICAgfAorKyAgICAgbWluaWNvbSAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgfAorKyAgICAgbXlzZWNyZXRkaWFyeSAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gICAgW10gICAgICAgICAgfAorKyAgICAgbmFub18xXzAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gICAgW10gICAgICAgICAgfAorKyAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorKyAgICAgcHR4ICAgICAgICAgICAgICAgIHwgW10gICAgICAgW10gW10gW10gW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorKyAgICAgcHl0aG9uICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgcmVjb2RlICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgW10gW10gICAgW10gW10gICAgW10gICAgICAgICAgfAorKyAgICAgcnBtICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2Nyb2xsa2VlcGVyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2VkICAgICAgICAgICAgICAgIHwgW10gICAgICAgW10gW10gW10gW10gICAgICAgW10gW10gICAgW10gW10gICAgICAgfAorKyAgICAgc2gtdXRpbHMgICAgICAgICAgIHwgW10gICAgICAgW10gW10gW10gICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgfAorKyAgICAgc2hhcmVkLW1pbWUtaW5mbyAgIHwgICAgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgW10gICAgICAgICAgW10gICAgW10gICAgICAgW10gICAgICAgICAgW10gICAgICAgfAorKyAgICAgc2lsa3kgICAgICAgICAgICAgIHwgICAgICAgICAgKCkgW10gICAgICAgICAgICAgKCkgICAgICAgKCkgICAgICAgICAgfAorKyAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2tldGNoICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorKyAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgfAorKyAgICAgdGFyICAgICAgICAgICAgICAgIHwgW10gICAgICAgW10gW10gICAgW10gICAgW10gW10gW10gICAgW10gW10gICAgICAgfAorKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgICAgfAorKyAgICAgdGV4dHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gW10gICAgICAgW10gICAgICAgICAgW10gW10gICAgfAorKyAgICAgdGluICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdHAtcm9ib3QgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdHV4cGFpbnQgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgICAgW10gICAgW10gW10gW10gW10gW10gW10gICAgfAorKyAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdXRpbC1saW51eCAgICAgICAgIHwgW10gICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgICAgKCkgW10gICAgICAgfAorKyAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgd2RpZmYgICAgICAgICAgICAgIHwgW10gICAgICAgICAgW10gW10gW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorKyAgICAgd2dldCAgICAgICAgICAgICAgIHwgW10gICAgICAgW10gW10gICAgW10gICAgW10gW10gICAgICAgICAgW10gICAgICAgfAorKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgeGZyZWU4Nl94a2JfeG1sICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgeHBhZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXQgZXUgZmEgZmkgZnIgZ2EgZ2wgaGUgaHIgaHUgaWQgaXMgaXQgamEga28gbGcKKysgICAgICAgICAgICAgICAgICAgICAgICAgIDIyICAyICAxIDI2IDEwNiAyOCAyNCAgOCAxMCA0MSAzMyAgMSAyNiAzMyAxMiAgMAorKyAgICAgCisrICAgICAgICAgICAgICAgICAgICAgICAgICBsdCBsdiBtayBtbiBtcyBtdCBuYiBubCBubiBubyBuc28gcGwgcHQgcHRfQlIgcm8gcnUKKysgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAoKSAgICAgKCkgICAgIFtdICAgW10gW10gfAorKyAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICgpICgpIHwKKysgICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgW10gICAgICAgICAgW10gW10gfAorKyAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICgpICAgICAgICAgIFtdICAgIHwKKysgICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgW10gW10gfAorKyAgICAgYmF0Y2hlbG9yICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGJmZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGJsdWV6LXBpbiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICB8CisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGNvbnNvbGUtdG9vbHMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICBjb3JldXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gfAorKyAgICAgY3BpbyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGRhcmtzdGF0ICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICBbXSAgICB8CisrICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgW10gICAgIFtdICAgW10gW10gfAorKyAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKysgICAgIGVuc2NyaXB0ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICBbXSBbXSB8CisrICAgICBlcnJvciAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gICAgfAorKyAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAoKSAgICAgIFtdIHwKKysgICAgIGZpbGV1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBmaW5kdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgIFtdICAgW10gW10gfAorKyAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSAgIFtdICAgIHwKKysgICAgIGdiaWZmICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBnY2FsICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGdldHRleHQgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICAgICAgW10gICAgfAorKyAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIGdldHRleHQtdG9vbHMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICB8CisrICAgICBnaW1wLXByaW50ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgIFtdICAgIHwKKysgICAgIGdsdW5hcmNsb2NrICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSB8CisrICAgICBnbnViaWZmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAoKSAgICAgIFtdIHwKKysgICAgIGdudWNhc2gtZ2xvc3NhcnkgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICAgICAgICB8CisrICAgICBnbnVwZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1iZWFtICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1jb25mICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtY29udGFjdHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1nbyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSB8CisrICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1za2V0Y2hib29rICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtc3UgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS10aW1lc2hlZXQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtdG9kYXkgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwaG90bzIgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBncHJvZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgW10gICAgfAorKyAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgKCkgICAgKCkgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGdyYW1hZG9pciAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBncmVwICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gIFtdICAgW10gW10gfAorKyAgICAgZ3JldGwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGd0aWNrICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSB8CisrICAgICBoZWxsbyAgICAgICAgICAgICAgfCAgICBbXSAgICAgICBbXSAgICBbXSBbXSBbXSBbXSAgICAgW10gICAgIFtdICAgW10gW10gfAorKyAgICAgaWQtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGluZGVudCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICBbXSBbXSB8CisrICAgICBpc29fMzE2NiAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgaXNvXzMxNjZfMSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGlzb18zMTY2XzIgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8zICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgaXNvXzQyMTcgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgW10gW10gW10gICAgIFtdIFtdICBbXSAgICAgIFtdIHwKKysgICAgIGlzb182MzkgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBqcGlsb3QgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAganRhZyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGp3aG9pcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgW10gICBbXSAoKSB8CisrICAgICBrYmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICAgICAgW10gICAgfAorKyAgICAgbGF0cmluZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGxkICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaWJjICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgW10gICAgIFtdICAgICAgICAgfAorKyAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdICAgIHwKKysgICAgIGxpYmljb252ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaW5nb3RlYWNoX2xlc3NvbnMgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgIFtdIHwKKysgICAgIG00ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gW10gfAorKyAgICAgbWFrZSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICBbXSAgICAgIFtdIHwKKysgICAgIG1hbi1kYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBtaW5pY29tICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgW10gW10gfAorKyAgICAgbXlzZWNyZXRkaWFyeSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgIFtdICAgIHwKKysgICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBuYW5vXzFfMCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICBbXSAgICAgICAgW10gICAgICAgICAgW10gW10gfAorKyAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIHBhcnRlZCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICBbXSBbXSAgW10gICAgICAgICB8CisrICAgICBwdHggICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSAgICAgW10gW10gIFtdICAgW10gW10gfAorKyAgICAgcHl0aG9uICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHJhZGl1cyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSB8CisrICAgICByZWNvZGUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgW10gW10gfAorKyAgICAgcnBtICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgIFtdIHwKKysgICAgIHNjcmVlbSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgW10gICAgICAgICAgW10gW10gfAorKyAgICAgc2VkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSAgIFtdICAgIHwKKysgICAgIHNoLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICBzaGFyZWQtbWltZS1pbmZvICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHNpbGt5ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSB8CisrICAgICBza2VuY2lsICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgfAorKyAgICAgc2tldGNoICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgIHwKKysgICAgIHNvdW5kdHJhY2tlciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdGFyICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgW10gICAgICAgW10gICAgIFtdICAgICBbXSAgIFtdICAgIHwKKysgICAgIHRleGluZm8gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICB0ZXh0dXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHRwLXJvYm90ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB0dXhwYWludCAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgW10gW10gIFtdICAgW10gICAgfAorKyAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gfAorKyAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIHwKKysgICAgIHdhc3Rlc2VkZ2UgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB3ZGlmZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgW10gW10gfAorKyAgICAgd2dldCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIHhjaGF0ICAgICAgICAgICAgICB8ICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICB4ZnJlZTg2X3hrYl94bWwgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgeHBhZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrICAgICAgICAgICAgICAgICAgICAgICAgICBsdCBsdiBtayBtbiBtcyBtdCBuYiBubCBubiBubyBuc28gcGwgcHQgcHRfQlIgcm8gcnUKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAyICAwICAzIDEyICAwIDEwIDY5ICA2ICA3ICAxICA0MCAyNiAgMzYgICA3NiA2MworKyAgICAgCisrICAgICAgICAgICAgICAgICAgICAgICAgICBzayBzbCBzciBzdiB0YSB0aCB0ciB1ayB2ZW4gdmkgd2EgeGggemhfQ04gemhfVFcgenUKKysgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICBbXSAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNgorKyAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKKysgICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOQorKyAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisrICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOQorKyAgICAgYmF0Y2hlbG9yICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGJmZCAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisrICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAgOAorKyAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQKKysgICAgIGJsdWV6LXBpbiAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8IDE0CisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgIGNvbnNvbGUtdG9vbHMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICBjb3JldXRpbHMgICAgICAgICAgfCAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxNgorKyAgICAgY3BpbyAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTQKKysgICAgIGRhcmtzdGF0ICAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgKCkgICAgICB8IDEyCisrICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAyMworKyAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKysgICAgIGVuc2NyaXB0ICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyCisrICAgICBlcnJvciAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxNQorKyAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEKKysgICAgIGZpbGV1dGlscyAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICB8IDE3CisrICAgICBmaW5kdXRpbHMgICAgICAgICAgfCBbXSBbXSBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAyOQorKyAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTMKKysgICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTIKKysgICAgIGdiaWZmICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisrICAgICBnY2FsICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorKyAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKysgICAgIGdldHRleHQgICAgICAgICAgICB8IFtdIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE2CisrICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCBbXSAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAxNAorKyAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgW10gW10gW10gW10gICAgICAgW10gW10gICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIHwgMjIKKysgICAgIGdldHRleHQtdG9vbHMgICAgICB8IFtdIFtdIFtdIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDE0CisrICAgICBnaW1wLXByaW50ICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAorKyAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGdsdW5hcmNsb2NrICAgICAgICB8ICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8IDEzCisrICAgICBnbnViaWZmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgIDkKKysgICAgIGdudWNhc2gtZ2xvc3NhcnkgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8ICA4CisrICAgICBnbnVwZyAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxNworKyAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKysgICAgIGdwZS1iZWFtICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4CisrICAgICBncGUtY2FsZW5kYXIgICAgICAgfCBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgfCAxMworKyAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAKKysgICAgIGdwZS1jb25mICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisrICAgICBncGUtY29udGFjdHMgICAgICAgfCBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxMQorKyAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgIHwgMTIKKysgICAgIGdwZS1nbyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisrICAgICBncGUtbG9naW4gICAgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgfCAxMworKyAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTMKKysgICAgIGdwZS1za2V0Y2hib29rICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisrICAgICBncGUtc3UgICAgICAgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAorKyAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAKKysgICAgIGdwZS10aW1lc2hlZXQgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDEyCisrICAgICBncGUtdG9kYXkgICAgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgfCAxMworKyAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgIHwgMTIKKysgICAgIGdwaG90bzIgICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDExCisrICAgICBncHJvZiAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOQorKyAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGdyYW1hZG9pciAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisrICAgICBncmVwICAgICAgICAgICAgICAgfCAgICBbXSBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNgorKyAgICAgZ3JldGwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGd0aWNrICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisrICAgICBoZWxsbyAgICAgICAgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzNAorKyAgICAgaWQtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTIKKysgICAgIGluZGVudCAgICAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIxCisrICAgICBpc29fMzE2NiAgICAgICAgICAgfCBbXSBbXSBbXSBbXSAgICAgICBbXSAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgfCAyNworKyAgICAgaXNvXzMxNjZfMSAgICAgICAgIHwgW10gW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTYKKysgICAgIGlzb18zMTY2XzIgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisrICAgICBpc29fMzE2Nl8zICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorKyAgICAgaXNvXzQyMTcgICAgICAgICAgIHwgW10gW10gICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMjQKKysgICAgIGlzb182MzkgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCisrICAgICBqcGlsb3QgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgW10gICAgICAgIFtdICAgIFtdICAgICAgfCAgOQorKyAgICAganRhZyAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKysgICAgIGp3aG9pcyAgICAgICAgICAgICB8ICAgICAgICAgICgpICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDExCisrICAgICBrYmQgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQorKyAgICAgbGF0cmluZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKysgICAgIGxkICAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisrICAgICBsaWJjICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAyMAorKyAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwgMTMKKysgICAgIGxpYmljb252ICAgICAgICAgICB8IFtdIFtdIFtdIFtdICAgICAgIFtdIFtdICAgICAgICBbXSAgICAgW10gICAgICAgICAgICB8IDI3CisrICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorKyAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisrICAgICBsaW5nb3RlYWNoX2xlc3NvbnMgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgfCAgMAorKyAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQKKysgICAgIG00ICAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDE1CisrICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorKyAgICAgbWFrZSAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTYKKysgICAgIG1hbi1kYiAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisrICAgICBtaW5pY29tICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQorKyAgICAgbXlzZWNyZXRkaWFyeSAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAKKysgICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgIFtdIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE3CisrICAgICBuYW5vXzFfMCAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNworKyAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKysgICAgIHBhcnRlZCAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDE1CisrICAgICBwdHggICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMgorKyAgICAgcHl0aG9uICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKKysgICAgIHJhZGl1cyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisrICAgICByZWNvZGUgICAgICAgICAgICAgfCAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMAorKyAgICAgcnBtICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKysgICAgIHNjcmVlbSAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8ICAyCisrICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNQorKyAgICAgc2VkICAgICAgICAgICAgICAgIHwgW10gW10gW10gW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjQKKysgICAgIHNoLXV0aWxzICAgICAgICAgICB8ICAgIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0CisrICAgICBzaGFyZWQtbWltZS1pbmZvICAgfCAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNworKyAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTcKKysgICAgIHNpbGt5ICAgICAgICAgICAgICB8ICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICBza2VuY2lsICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorKyAgICAgc2tldGNoICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKysgICAgIHNvdW5kdHJhY2tlciAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisrICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgdGFyICAgICAgICAgICAgICAgIHwgW10gW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMjQKKysgICAgIHRleGluZm8gICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDE0CisrICAgICB0ZXh0dXRpbHMgICAgICAgICAgfCAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxNgorKyAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKKysgICAgIHRwLXJvYm90ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisrICAgICB0dXhwYWludCAgICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgfCAyOQorKyAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKKysgICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisrICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNQorKyAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDgKKysgICAgIHdhc3Rlc2VkZ2UgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisrICAgICB3ZGlmZiAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxOAorKyAgICAgd2dldCAgICAgICAgICAgICAgIHwgW10gW10gW10gW10gICAgICAgW10gW10gICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIHwgMjQKKysgICAgIHhjaGF0ICAgICAgICAgICAgICB8IFtdIFtdIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDE1CisrICAgICB4ZnJlZTg2X3hrYl94bWwgICAgfCBbXSAgICBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAxMQorKyAgICAgeHBhZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrICAgICAgIDYzIHRlYW1zICAgICAgICAgICBzayBzbCBzciBzdiB0YSB0aCB0ciB1ayB2ZW4gdmkgd2EgeGggemhfQ04gemhfVFcgenUKKysgICAgICAxMzEgZG9tYWlucyAgICAgICAgIDQ3IDE5IDI4IDgzICAwICAwIDU5IDEzICAxICAgMSAxMSAgMCAgMjIgICAgMjIgICAgMCAgMTM3MworIAorICAgIFNvbWUgY291bnRlcnMgaW4gdGhlIHByZWNlZGluZyBtYXRyaXggYXJlIGhpZ2hlciB0aGFuIHRoZSBudW1iZXIgb2YKKyB2aXNpYmxlIGJsb2NrcyBsZXQgdXMgZXhwZWN0LiAgVGhpcyBpcyBiZWNhdXNlIGEgZmV3IGV4dHJhIFBPIGZpbGVzIGFyZQorQEAgLTIyMCw2ICs3NDIsMjcgQEAKKyBsYWcgYmV0d2VlbiB0aGUgbWVyZSBleGlzdGVuY2UgYSBQTyBmaWxlIGFuZCBpdHMgd2lkZSBhdmFpbGFiaWxpdHkgaW4gYQorIGRpc3RyaWJ1dGlvbi4KKyAKKy0gICBJZiBBdWd1c3QgMTk5NyBzZWVtcyB0byBiZSBvbGQsIHlvdSBtYXkgZmV0Y2ggYSBtb3JlIHJlY2VudCBjb3B5IG9mCistdGhpcyBgQUJPVVQtTkxTJyBmaWxlIG9uIG1vc3QgR05VIGFyY2hpdmUgc2l0ZXMuCisrICAgSWYgSmFudWFyeSAyMDA0IHNlZW1zIHRvIGJlIG9sZCwgeW91IG1heSBmZXRjaCBhIG1vcmUgcmVjZW50IGNvcHkgb2YKKyt0aGlzIGBBQk9VVC1OTFMnIGZpbGUgb24gbW9zdCBHTlUgYXJjaGl2ZSBzaXRlcy4gIFRoZSBtb3N0IHVwLXRvLWRhdGUKKyttYXRyaXggd2l0aCBmdWxsIHBlcmNlbnRhZ2UgZGV0YWlscyBjYW4gYmUgZm91bmQgYXQKKytgaHR0cDovL3d3dy5pcm8udW1vbnRyZWFsLmNhL2NvbnRyaWIvcG8vSFRNTC9tYXRyaXguaHRtbCcuCisrCisrVXNpbmcgYGdldHRleHQnIGluIG5ldyBwYWNrYWdlcworKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysKKytJZiB5b3UgYXJlIHdyaXRpbmcgYSBmcmVlbHkgYXZhaWxhYmxlIHByb2dyYW0gYW5kIHdhbnQgdG8KKytpbnRlcm5hdGlvbmFsaXplIGl0IHlvdSBhcmUgd2VsY29tZSB0byB1c2UgR05VIGBnZXR0ZXh0JyBpbiB5b3VyCisrcGFja2FnZS4gIE9mIGNvdXJzZSB5b3UgaGF2ZSB0byByZXNwZWN0IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK0xpY2Vuc2Ugd2hpY2ggY292ZXJzIHRoZSB1c2Ugb2YgdGhlIEdOVSBgZ2V0dGV4dCcgbGlicmFyeS4gIFRoaXMgbWVhbnMKKytpbiBwYXJ0aWN1bGFyIHRoYXQgZXZlbiBub24tZnJlZSBwcm9ncmFtcyBjYW4gdXNlIGBsaWJpbnRsJyBhcyBhIHNoYXJlZAorK2xpYnJhcnksIHdoZXJlYXMgb25seSBmcmVlIHNvZnR3YXJlIGNhbiB1c2UgYGxpYmludGwnIGFzIGEgc3RhdGljCisrbGlicmFyeSBvciB1c2UgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYGxpYmludGwnLgorKworKyAgIE9uY2UgdGhlIHNvdXJjZXMgYXJlIGNoYW5nZWQgYXBwcm9wcmlhdGVseSBhbmQgdGhlIHNldHVwIGNhbiBoYW5kbGUKKyt0aGUgdXNlIG9mIGBnZXR0ZXh0JyB0aGUgb25seSB0aGluZyBtaXNzaW5nIGFyZSB0aGUgdHJhbnNsYXRpb25zLiAgVGhlCisrRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IGlzIGFsc28gYXZhaWxhYmxlIGZvciBwYWNrYWdlcyB3aGljaCBhcmUgbm90CisrZGV2ZWxvcGVkIGluc2lkZSB0aGUgR05VIHByb2plY3QuICBUaGVyZWZvcmUgdGhlIGluZm9ybWF0aW9uIGdpdmVuIGFib3ZlCisrYXBwbGllcyBhbHNvIGZvciBldmVyeSBvdGhlciBGcmVlIFNvZnR3YXJlIFByb2plY3QuICBDb250YWN0CisrYHRyYW5zbGF0aW9uQGlyby51bW9udHJlYWwuY2EnIHRvIG1ha2UgdGhlIGAucG90JyBmaWxlcyBhdmFpbGFibGUgdG8KKyt0aGUgdHJhbnNsYXRpb24gdGVhbXMuCisgCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL0NoYW5nZUxvZwkxOTk4LTEyLTI5IDE3OjQ5OjU2LjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvQ2hhbmdlTG9nCTIwMDQtMDktMTIgMTQ6NDA6MzUuODQ2NTIxNDU2IC0wNDAwCitAQCAtMSwzICsxLDExIEBACisrMjAwNC0wOS0xMiAgZ2V0dGV4dGl6ZSAgPGJ1Zy1nbnUtZ2V0dGV4dEBnbnUub3JnPgorKworKwkqIE1ha2VmaWxlLmFtIChBQ0xPQ0FMX0FNRkxBR1MpOiBOZXcgdmFyaWFibGUuCisrCShFWFRSQV9ESVNUKTogQWRkIGNvbmZpZy5ycGF0aC4KKysJKiBjb25maWd1cmUuaW4gKEFDX09VVFBVVCk6IEFkZCBtNC9NYWtlZmlsZS4KKysJKEFDX09VVFBVVCk6IFJlbW92ZSBjb21tYW5kIHRoYXQgY3JlYXRlZCBwby9NYWtlZmlsZS4KKysJKEFDX0xJTktfRklMRVMpOiBSZW1vdmUgaW52b2NhdGlvbi4KKysKKyAxOTk4LTEyLTI5CVV3ZSBPaHNlICA8dXdlQG9oc2UuZGU+CisgCisgCSogc3JjL2xyei5jOiByZW1vdmVkIHN0cGNweSBjYWxsLgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9jb25maWcucnBhdGgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2NvbmZpZy5ycGF0aAkyMDA0LTA5LTEyIDE0OjQwOjM0LjMyOTc1MjA0MCAtMDQwMAorQEAgLTAsMCArMSw1NDggQEAKKysjISAvYmluL3NoCisrIyBPdXRwdXQgYSBzeXN0ZW0gZGVwZW5kZW50IHNldCBvZiB2YXJpYWJsZXMsIGRlc2NyaWJpbmcgaG93IHRvIHNldCB0aGUKKysjIHJ1biB0aW1lIHNlYXJjaCBwYXRoIG9mIHNoYXJlZCBsaWJyYXJpZXMgaW4gYW4gZXhlY3V0YWJsZS4KKysjCisrIyAgIENvcHlyaWdodCAxOTk2LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgIFRha2VuIGZyb20gR05VIGxpYnRvb2wsIDIwMDEKKysjICAgT3JpZ2luYWxseSBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrIyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrIyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysjICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKysjCisrIyAgIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKysjICAgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisrIyAgIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisrIyAgIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysjCisrIyBUaGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgZmlsZSBpcyB0aGUgY2Fub25pY2FsIGhvc3Qgc3BlY2lmaWNhdGlvbiwKKysjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisrIyBvcgorKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisrIyBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIENDLCBHQ0MsIExERkxBR1MsIExELCB3aXRoX2dudV9sZAorKyMgc2hvdWxkIGJlIHNldCBieSB0aGUgY2FsbGVyLgorKyMKKysjIFRoZSBzZXQgb2YgZGVmaW5lZCB2YXJpYWJsZXMgaXMgYXQgdGhlIGVuZCBvZiB0aGlzIHNjcmlwdC4KKysKKysjIEtub3duIGxpbWl0YXRpb25zOgorKyMgLSBPbiBJUklYIDYuNSB3aXRoIENDPSJjYyIsIHRoZSBydW4gdGltZSBzZWFyY2ggcGF0Y2ggbXVzdCBub3QgYmUgbG9uZ2VyCisrIyAgIHRoYW4gMjU2IGJ5dGVzLCBvdGhlcndpc2UgdGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGR1bXAgY29yZS4gVGhlIG9ubHkKKysjICAga25vd24gd29ya2Fyb3VuZCBpcyB0byBjaG9vc2Ugc2hvcnRlciBkaXJlY3RvcnkgbmFtZXMgZm9yIHRoZSBidWlsZAorKyMgICBkaXJlY3RvcnkgYW5kL29yIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorKworKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNJFZDLAorKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KKytsaWJleHQ9YQorK3NocmV4dD0uc28KKysKKytob3N0PSIkMSIKKytob3N0X2NwdT1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKKytob3N0X3ZlbmRvcj1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKKytob3N0X29zPWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorKworKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDLgorKworK3dsPQorK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICB3bD0nLVdsLCcKKytlbHNlCisrICBjYXNlICIkaG9zdF9vcyIgaW4KKysgICAgYWl4KikKKysgICAgICB3bD0nLVdsLCcKKysgICAgICA7OworKyAgICBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisrICAgICAgOzsKKysgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisrICAgICAgd2w9Jy1XbCwnCisrICAgICAgOzsKKysgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKysgICAgICB3bD0nLVdsLCcKKysgICAgICA7OworKyAgICBuZXdzb3M2KQorKyAgICAgIDs7CisrICAgIGxpbnV4KikKKysgICAgICBjYXNlICRDQyBpbgorKyAgICAgICAgaWNjfGVjYykKKysgICAgICAgICAgd2w9Jy1XbCwnCisrICAgICAgICAgIDs7CisrICAgICAgICBjY2MpCisrICAgICAgICAgIHdsPSctV2wsJworKyAgICAgICAgICA7OworKyAgICAgIGVzYWMKKysgICAgICA7OworKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisrICAgICAgd2w9Jy1XbCwnCisrICAgICAgOzsKKysgICAgc2NvMy4ydjUqKQorKyAgICAgIDs7CisrICAgIHNvbGFyaXMqKQorKyAgICAgIHdsPSctV2wsJworKyAgICAgIDs7CisrICAgIHN1bm9zNCopCisrICAgICAgd2w9Jy1Rb3B0aW9uIGxkICcKKysgICAgICA7OworKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisrICAgICAgd2w9Jy1XbCwnCisrICAgICAgOzsKKysgICAgc3lzdjQqTVAqKQorKyAgICAgIDs7CisrICAgIHV0czQqKQorKyAgICAgIDs7CisrICBlc2FjCisrZmkKKysKKysjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUy4KKysKKytoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CisraGFyZGNvZGVfZGlyZWN0PW5vCisraGFyZGNvZGVfbWludXNfTD1ubworKworK2Nhc2UgIiRob3N0X29zIiBpbgorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorKyAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisrICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisrICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisrICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorKyAgICAgIHdpdGhfZ251X2xkPW5vCisrICAgIGZpCisrICAgIDs7CisrICBvcGVuYnNkKikKKysgICAgd2l0aF9nbnVfbGQ9bm8KKysgICAgOzsKKytlc2FjCisrCisrbGRfc2hsaWJzPXllcworK2lmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKysgIGNhc2UgIiRob3N0X29zIiBpbgorKyAgICBhaXgzKiB8IGFpeDQqIHwgYWl4NSopCisrICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgorKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorKyAgICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBhbWlnYW9zKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKysgICAgICAjIFNhbXVlbCBBLiBGYWx2byBJSSA8a2M1dGphQGRvbHBoaW4ub3BlbnByb2plY3RzLm5ldD4gcmVwb3J0cworKyAgICAgICMgdGhhdCB0aGUgc2VtYW50aWNzIG9mIGR5bmFtaWMgbGlicmFyaWVzIG9uIEFtaWdhT1MsIGF0IGxlYXN0IHVwCisrICAgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCisrICAgICAgIyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbGlicmFyeS4gIFNpbmNlIHRoaXMgZG9lc24ndCBtYXRjaCB0aGUKKysgICAgICAjIGJlaGF2aW9yIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gb3RoZXIgcGxhdGZvcm1zLCB3ZSBjYW4gdXNlCisrICAgICAgIyB0aGVtLgorKyAgICAgIGxkX3NobGlicz1ubworKyAgICAgIDs7CisrICAgIGJlb3MqKQorKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgOgorKyAgICAgIGVsc2UKKysgICAgICAgIGxkX3NobGlicz1ubworKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKysgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKysgICAgICAgIDoKKysgICAgICBlbHNlCisrICAgICAgICBsZF9zaGxpYnM9bm8KKysgICAgICBmaQorKyAgICAgIDs7CisrICAgIG5ldGJzZCopCisrICAgICAgOzsKKysgICAgc29sYXJpcyogfCBzeXN2NSopCisrICAgICAgaWYgJExEIC12IDI+JjEgfCBncmVwICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKysgICAgICAgIGxkX3NobGlicz1ubworKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisrICAgICAgICA6CisrICAgICAgZWxzZQorKyAgICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBzdW5vczQqKQorKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgOgorKyAgICAgIGVsc2UKKysgICAgICAgIGxkX3NobGlicz1ubworKyAgICAgIGZpCisrICAgICAgOzsKKysgIGVzYWMKKysgIGlmIHRlc3QgIiRsZF9zaGxpYnMiID0geWVzOyB0aGVuCisrICAgICMgVW5saWtlIGxpYnRvb2wsIHdlIHVzZSAtcnBhdGggaGVyZSwgbm90IC0tcnBhdGgsIHNpbmNlIHRoZSBkb2N1bWVudGVkCisrICAgICMgb3B0aW9uIG9mIEdOVSBsZCBpcyBjYWxsZWQgLXJwYXRoLCBub3QgLS1ycGF0aC4KKysgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworKyAgZmkKKytlbHNlCisrICBjYXNlICIkaG9zdF9vcyIgaW4KKysgICAgYWl4MyopCisrICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKysgICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCisrICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKysgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgICAgIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisrICAgICAgICAjIGJyb2tlbiBjb2xsZWN0Mi4KKysgICAgICAgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgYWl4NCogfCBhaXg1KikKKysgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorKyAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorKyAgICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisrICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisrICAgICAgZWxzZQorKyAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworKyAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisrICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKysgICAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisrICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXg1KikKKysgICAgICAgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisrICAgICAgICAgICAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKysgICAgICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisrICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgIGZpCisrICAgICAgICAgIGRvbmUKKysgICAgICAgIGVzYWMKKysgICAgICBmaQorKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQorKyAgICAgICAgICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisrICAgICAgICAgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKKysgICAgICAgICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisrICAgICAgICAgIHRoZW4KKysgICAgICAgICAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKysgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisrICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisrICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKysgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKysgICAgICAgICAgZmkKKysgICAgICAgIGVzYWMKKysgICAgICBmaQorKyAgICAgICMgQmVnaW4gX0xUX0FDX1NZU19MSUJQQVRIX0FJWC4KKysgICAgICBlY2hvICdpbnQgbWFpbiAoKSB7IHJldHVybiAwOyB9JyA+IGNvbmZ0ZXN0LmMKKysgICAgICAke0NDfSAke0xERkxBR1N9IGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QKKysgICAgICBhaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9CisrfSdgCisrICAgICAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorKyAgICAgICAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorK30nYAorKyAgICAgIGZpCisrICAgICAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorKyAgICAgICAgYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC5jIGNvbmZ0ZXN0CisrICAgICAgIyBFbmQgX0xUX0FDX1NZU19MSUJQQVRIX0FJWC4KKysgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKysgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisrICAgICAgZWxzZQorKyAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKysgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisrICAgICAgICBlbHNlCisrICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgYW1pZ2FvcyopCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIHRoZSBHTlUgbGQgc2VjdGlvbgorKyAgICAgIGxkX3NobGlicz1ubworKyAgICAgIDs7CisrICAgIGJzZGk0KikKKysgICAgICA7OworKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisrICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKysgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKysgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrICAgICAgbGliZXh0PWxpYgorKyAgICAgIDs7CisrICAgIGRhcndpbiogfCByaGFwc29keSopCisrICAgICAgaWYgJENDIC12IDI+JjEgfCBncmVwICdBcHBsZScgPi9kZXYvbnVsbCA7IHRoZW4KKysgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgZGd1eCopCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworKyAgICAgIDs7CisrICAgIGZyZWVic2QxKikKKysgICAgICBsZF9zaGxpYnM9bm8KKysgICAgICA7OworKyAgICBmcmVlYnNkMi4yKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIDs7CisrICAgIGZyZWVic2QyKikKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKysgICAgICA7OworKyAgICBmcmVlYnNkKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIDs7CisrICAgIGhwdXg5KikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKysgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKysgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKysgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgIDs7CisrICAgIGhwdXgxMCogfCBocHV4MTEqKQorKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorKyAgICAgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorKyAgICAgICAgICBocHBhKjY0KikKKysgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKysgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKysgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKysgICAgICAgICAgICA7OworKyAgICAgICAgICBpYTY0KikKKysgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisrICAgICAgICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKysgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKysgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgICAgICAgIDs7CisrICAgICAgICAgICopCisrICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisrICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisrICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgICAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisrICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisrICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKysgICAgICAgICAgICA7OworKyAgICAgICAgZXNhYworKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisrICAgICAgOzsKKysgICAgbmV0YnNkKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIDs7CisrICAgIG5ld3NvczYpCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKysgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKysgICAgICA7OworKyAgICBvcGVuYnNkKikKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisrICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworKyAgICAgIGVsc2UKKysgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorKyAgICAgICAgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQorKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKysgICAgICAgICAgICA7OworKyAgICAgICAgICAqKQorKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisrICAgICAgICAgICAgOzsKKysgICAgICAgIGVzYWMKKysgICAgICBmaQorKyAgICAgIDs7CisrICAgIG9zMiopCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgOzsKKysgICAgb3NmMyopCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgIDs7CisrICAgIG9zZjQqIHwgb3NmNSopCisrICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKysgICAgICBlbHNlCisrICAgICAgICAjIEJvdGggY2MgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLXJwYXRoICRsaWJkaXInCisrICAgICAgZmkKKysgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKysgICAgICA7OworKyAgICBzY28zLjJ2NSopCisrICAgICAgOzsKKysgICAgc29sYXJpcyopCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworKyAgICAgIDs7CisrICAgIHN1bm9zNCopCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgIDs7CisrICAgIHN5c3Y0KQorKyAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisrICAgICAgICBzbmkpCisrICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/CisrICAgICAgICAgIDs7CisrICAgICAgICBzaWVtZW5zKQorKyAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKysgICAgICAgICAgOzsKKysgICAgICAgIG1vdG9yb2xhKQorKyAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQorKyAgICAgICAgICA7OworKyAgICAgIGVzYWMKKysgICAgICA7OworKyAgICBzeXN2NC4zKikKKysgICAgICA7OworKyAgICBzeXN2NCpNUCopCisrICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorKyAgICAgICAgbGRfc2hsaWJzPXllcworKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgc3lzdjQuMnV3MiopCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9bm8KKysgICAgICA7OworKyAgICBzeXN2NU9wZW5VTklYOCogfCBzeXN2NVVuaXhXYXJlNyogfCAgc3lzdjV1d1s3OF0qIHwgdW5peHdhcmU3KikKKysgICAgICA7OworKyAgICBzeXN2NSopCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKysgICAgICA7OworKyAgICB1dHM0KikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBsZF9zaGxpYnM9bm8KKysgICAgICA7OworKyAgZXNhYworK2ZpCisrCisrIyBDaGVjayBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MKKysjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIuCisrbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKKytjYXNlICIkaG9zdF9vcyIgaW4KKysgIGFpeDMqKQorKyAgICA7OworKyAgYWl4NCogfCBhaXg1KikKKysgICAgOzsKKysgIGFtaWdhb3MqKQorKyAgICA7OworKyAgYmVvcyopCisrICAgIDs7CisrICBic2RpNCopCisrICAgIDs7CisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisrICAgIHNocmV4dD0uZGxsCisrICAgIDs7CisrICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorKyAgICBzaHJleHQ9LmR5bGliCisrICAgIDs7CisrICBkZ3V4KikKKysgICAgOzsKKysgIGZyZWVic2QxKikKKysgICAgOzsKKysgIGZyZWVic2QqKQorKyAgICA7OworKyAgZ251KikKKysgICAgOzsKKysgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorKyAgICBjYXNlICIkaG9zdF9jcHUiIGluCisrICAgICAgaWE2NCopCisrICAgICAgICBzaHJleHQ9LnNvCisrICAgICAgICA7OworKyAgICAgIGhwcGEqNjQqKQorKyAgICAgICAgc2hyZXh0PS5zbAorKyAgICAgICAgOzsKKysgICAgICAqKQorKyAgICAgICAgc2hyZXh0PS5zbAorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKysgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisrICAgICAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKysgICAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKysgICAgICAgIDs7CisrICAgICAgKikKKysgICAgICAgIGNhc2UgJExEIGluCisrICAgICAgICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpIGxpYnN1ZmY9IHNobGlic3VmZj0gOzsKKysgICAgICAgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIDs7CisrICAgICAgICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKSBsaWJzdWZmPTY0IHNobGlic3VmZj02NCA7OworKyAgICAgICAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IDs7CisrICAgICAgICBlc2FjCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICBsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorKyAgICA7OworKyAgbGludXgqKQorKyAgICA7OworKyAgbmV0YnNkKikKKysgICAgOzsKKysgIG5ld3NvczYpCisrICAgIDs7CisrICBudG8tcW54KQorKyAgICA7OworKyAgb3BlbmJzZCopCisrICAgIDs7CisrICBvczIqKQorKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworKyAgICBzaHJleHQ9LmRsbAorKyAgICA7OworKyAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorKyAgICA7OworKyAgc2NvMy4ydjUqKQorKyAgICA7OworKyAgc29sYXJpcyopCisrICAgIDs7CisrICBzdW5vczQqKQorKyAgICA7OworKyAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQorKyAgICA7OworKyAgc3lzdjQqTVAqKQorKyAgICA7OworKyAgdXRzNCopCisrICAgIDs7CisrZXNhYworKworK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFsiYCRcXF1cKS9cXFwxL2cnCisrZXNjYXBlZF93bD1gZWNobyAiWCR3bCIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorK3NobGliZXh0PWBlY2hvICIkc2hyZXh0IiB8IHNlZCAtZSAncyxeXC4sLCdgCisrZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPWBlY2hvICJYJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysKKytzZWQgLWUgJ3MvXlwoW2EtekEtWjAtOV9dKlwpPS9hY2xfY3ZfXDE9LycgPDxFT0YKKysKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9IiRlc2NhcGVkX3dsIgorKworKyMgU3RhdGljIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiYSIpLgorK2xpYmV4dD0iJGxpYmV4dCIKKysKKysjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgInNvIikuCisrc2hsaWJleHQ9IiRzaGxpYmV4dCIKKysKKysjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKysjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCisraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGVzY2FwZWRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKKysKKysjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgorK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgorKworKyMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRS5zbyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisrIyByZXN1bHRpbmcgYmluYXJ5LgorK2hhcmRjb2RlX2RpcmVjdD0iJGhhcmRjb2RlX2RpcmVjdCIKKysKKysjIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorKyMgcmVzdWx0aW5nIGJpbmFyeS4KKytoYXJkY29kZV9taW51c19MPSIkaGFyZGNvZGVfbWludXNfTCIKKysKKytFT0YKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvY29uZmlndXJlLmluCTIwMDQtMDktMTIgMTQ6Mzk6NTUuMTYxNzA2NDg4IC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9jb25maWd1cmUuaW4JMjAwNC0wOS0xMiAxNDo0MDozNS44MTY1MjYwMTYgLTA0MDAKK0BAIC0yNjAsMTEgKzI2MCwxMCBAQAorIEFNX0dOVV9HRVRURVhUCisgCisgQUNfREVGSU5FX1VOUVVPVEVEKExPQ0FMRURJUiwiJHByZWZpeC8kREFUQURJUk5BTUUiKQorLUFDX0xJTktfRklMRVMoJG5sc19jdl9oZWFkZXJfbGliZ3QsICRubHNfY3ZfaGVhZGVyX2ludGwpCisgCistQUNfT1VUUFVUKFtNYWtlZmlsZSBpbnRsL01ha2VmaWxlIGxpYi9NYWtlZmlsZSB0ZXN0c3VpdGUvTWFrZWZpbGUgXAorK0FDX09VVFBVVChbTWFrZWZpbGUgaW50bC9NYWtlZmlsZSBsaWIvTWFrZWZpbGUgdGVzdHN1aXRlL01ha2VmaWxlICBtNC9NYWtlZmlsZSBcCisgbWFuL01ha2VmaWxlIHBvL01ha2VmaWxlLmluIHNyYy9NYWtlZmlsZSBkZWJpYW4vcnVsZXMgU3BlY2ZpbGUgc3lzdHlwZSBcCisgc3JjL2xyenN6YnVnXSwKKy1bc2VkIC1lICIvUE9URklMRVMgPS9yIHBvL1BPVEZJTEVTIiBwby9NYWtlZmlsZS5pbiA+IHBvL01ha2VmaWxlOyAKKytbCisgY2htb2QgK3ggZGViaWFuL3J1bGVzOworIHRlc3QgLXogIiRDT05GSUdfSEVBREVSUyIgfHwgZWNobyB0aW1lc3RhbXAgPiBzdGFtcC1oXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9iaW5kdGV4dGRvbS5jCTE5OTgtMDQtMjYgMDk6MjI6MzYuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2JpbmR0ZXh0ZG9tLmMJMjAwNC0wOS0xMiAxNDo0MDozNC4zNDM3NDk5MTIgLTA0MDAKK0BAIC0xLDU5ICsxLDc1IEBACisgLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGJpbmR0ZXh0ZG9tYWluKDMpIGZ1bmN0aW9uCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk4LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorICNpZmRlZiBIQVZFX0NPTkZJR19ICisgIyBpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RkbGliLmg+CistI2Vsc2UKKy0jIGlmZGVmIEhBVkVfTUFMTE9DX0gKKy0jICBpbmNsdWRlIDxtYWxsb2MuaD4KKy0jIGVsc2UKKy12b2lkIGZyZWUgKCk7CistIyBlbmRpZgorLSNlbmRpZgorKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorIAorLSNpZiBkZWZpbmVkIEhBVkVfU1RSSU5HX0ggfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2Vsc2UKKy0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KKy0jIGlmbmRlZiBtZW1jcHkKKy0jICBkZWZpbmUgbWVtY3B5KERzdCwgU3JjLCBOdW0pIGJjb3B5IChTcmMsIERzdCwgTnVtKQorLSMgZW5kaWYKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKyAjZW5kaWYKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAKKyAjaWZkZWYgX0xJQkMKKy0jIGluY2x1ZGUgPGxpYmludGwuaD4KKysvKiBXZSBoYXZlIHRvIGhhbmRsZSBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMuICAqLworKyMgaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKyAjZWxzZQorLSMgaW5jbHVkZSAibGliZ2V0dGV4dC5oIgorKy8qIFByb3ZpZGUgZHVtbXkgaW1wbGVtZW50YXRpb24gaWYgdGhpcyBpcyBvdXRzaWRlIGdsaWJjLiAgKi8KKysjIGRlZmluZSBfX2xpYmNfcndsb2NrX2RlZmluZShDTEFTUywgTkFNRSkKKysjIGRlZmluZSBfX2xpYmNfcndsb2NrX3dybG9jayhOQU1FKQorKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfdW5sb2NrKE5BTUUpCisrI2VuZGlmCisrCisrLyogVGhlIGludGVybmFsIHZhcmlhYmxlcyBpbiB0aGUgc3RhbmRhbG9uZSBsaWJpbnRsLmEgbXVzdCBoYXZlIGRpZmZlcmVudAorKyAgIG5hbWVzIHRoYW4gdGhlIGludGVybmFsIHZhcmlhYmxlcyBpbiBHTlUgbGliYywgb3RoZXJ3aXNlIHByb2dyYW1zCisrICAgdXNpbmcgbGliaW50bC5hIGNhbm5vdCBiZSBsaW5rZWQgc3RhdGljYWxseS4gICovCisrI2lmICFkZWZpbmVkIF9MSUJDCisrIyBkZWZpbmUgX25sX2RlZmF1bHRfZGlybmFtZSBsaWJpbnRsX25sX2RlZmF1bHRfZGlybmFtZQorKyMgZGVmaW5lIF9ubF9kb21haW5fYmluZGluZ3MgbGliaW50bF9ubF9kb21haW5fYmluZGluZ3MKKysjZW5kaWYKKysKKysvKiBTb21lIGNvbXBpbGVycywgbGlrZSBTdW5PUzQgY2MsIGRvbid0IGhhdmUgb2Zmc2V0b2YgaW4gPHN0ZGRlZi5oPi4gICovCisrI2lmbmRlZiBvZmZzZXRvZgorKyMgZGVmaW5lIG9mZnNldG9mKHR5cGUsaWRlbnQpICgoc2l6ZV90KSYoKCh0eXBlKikwKS0+aWRlbnQpKQorICNlbmRpZgorLSNpbmNsdWRlICJnZXR0ZXh0LmgiCistI2luY2x1ZGUgImdldHRleHRQLmgiCisgCisgLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworIAorIC8qIENvbnRhaW5zIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBtZXNzYWdlIGNhdGFsb2dzLiAgKi8KKyBleHRlcm4gY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kaXJuYW1lW107CisrI2lmZGVmIF9MSUJDCisrZXh0ZXJuIGNvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGlybmFtZV9pbnRlcm5hbFtdIGF0dHJpYnV0ZV9oaWRkZW47CisrI2Vsc2UKKysjIGRlZmluZSBJTlRVU0UobmFtZSkgbmFtZQorKyNlbmRpZgorIAorIC8qIExpc3Qgd2l0aCBiaW5kaW5ncyBvZiBzcGVjaWZpYyBkb21haW5zLiAgKi8KKyBleHRlcm4gc3RydWN0IGJpbmRpbmcgKl9ubF9kb21haW5fYmluZGluZ3M7CisgCisrLyogTG9jayB2YXJpYWJsZSB0byBwcm90ZWN0IHRoZSBnbG9iYWwgZGF0YSBpbiB0aGUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbi4gICovCisrX19saWJjX3J3bG9ja19kZWZpbmUgKGV4dGVybiwgX25sX3N0YXRlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKysKKyAKKyAvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisgICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorQEAgLTYxLDIzICs3Nyw0MSBAQAorICAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisgI2lmZGVmIF9MSUJDCisgIyBkZWZpbmUgQklORFRFWFRET01BSU4gX19iaW5kdGV4dGRvbWFpbgorLSMgZGVmaW5lIHN0cmR1cChzdHIpIF9fc3RyZHVwIChzdHIpCisrIyBkZWZpbmUgQklORF9URVhURE9NQUlOX0NPREVTRVQgX19iaW5kX3RleHRkb21haW5fY29kZXNldAorKyMgaWZuZGVmIHN0cmR1cAorKyMgIGRlZmluZSBzdHJkdXAoc3RyKSBfX3N0cmR1cCAoc3RyKQorKyMgZW5kaWYKKyAjZWxzZQorLSMgZGVmaW5lIEJJTkRURVhURE9NQUlOIGJpbmR0ZXh0ZG9tYWluX18KKysjIGRlZmluZSBCSU5EVEVYVERPTUFJTiBsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluCisrIyBkZWZpbmUgQklORF9URVhURE9NQUlOX0NPREVTRVQgbGliaW50bF9iaW5kX3RleHRkb21haW5fY29kZXNldAorICNlbmRpZgorIAorLS8qIFNwZWNpZnkgdGhhdCB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgd2lsbCBiZSBmb3VuZAorLSAgIGluIERJUk5BTUUgcmF0aGVyIHRoYW4gaW4gdGhlIHN5c3RlbSBsb2NhbGUgZGF0YSBiYXNlLiAgKi8KKy1jaGFyICoKKy1CSU5EVEVYVERPTUFJTiAoZG9tYWlubmFtZSwgZGlybmFtZSkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CistICAgICBjb25zdCBjaGFyICpkaXJuYW1lOworKy8qIFNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IG5hbWUgKkRJUk5BTUVQIGFuZCB0aGUgb3V0cHV0IGNvZGVzZXQgKkNPREVTRVRQCisrICAgdG8gYmUgdXNlZCBmb3IgdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nLgorKyAgIElmICpESVJOQU1FUCBvciAqQ09ERVNFVFAgaXMgTlVMTCwgdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGlzIG5vdAorKyAgIG1vZGlmaWVkLCBvbmx5IHRoZSBjdXJyZW50IHZhbHVlIGlzIHJldHVybmVkLgorKyAgIElmIERJUk5BTUVQIG9yIENPREVTRVRQIGlzIE5VTEwsIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZSBpcyBuZWl0aGVyCisrICAgbW9kaWZpZWQgbm9yIHJldHVybmVkLiAgKi8KKytzdGF0aWMgdm9pZAorK3NldF9iaW5kaW5nX3ZhbHVlcyAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCSAgICBjb25zdCBjaGFyICoqZGlybmFtZXAsIGNvbnN0IGNoYXIgKipjb2Rlc2V0cCkKKyB7CisgICBzdHJ1Y3QgYmluZGluZyAqYmluZGluZzsKKysgIGludCBtb2RpZmllZDsKKyAKKyAgIC8qIFNvbWUgc2FuaXR5IGNoZWNrcy4gICovCisgICBpZiAoZG9tYWlubmFtZSA9PSBOVUxMIHx8IGRvbWFpbm5hbWVbMF0gPT0gJ1wwJykKKy0gICAgcmV0dXJuIE5VTEw7CisrICAgIHsKKysgICAgICBpZiAoZGlybmFtZXApCisrCSpkaXJuYW1lcCA9IE5VTEw7CisrICAgICAgaWYgKGNvZGVzZXRwKQorKwkqY29kZXNldHAgPSBOVUxMOworKyAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgX19saWJjX3J3bG9ja193cmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKysKKysgIG1vZGlmaWVkID0gMDsKKyAKKyAgIGZvciAoYmluZGluZyA9IF9ubF9kb21haW5fYmluZGluZ3M7IGJpbmRpbmcgIT0gTlVMTDsgYmluZGluZyA9IGJpbmRpbmctPm5leHQpCisgICAgIHsKK0BAIC05Myw4MSArMTI3LDE3MyBAQAorIAl9CisgICAgIH0KKyAKKy0gIGlmIChkaXJuYW1lID09IE5VTEwpCistICAgIC8qIFRoZSBjdXJyZW50IGJpbmRpbmcgaGFzIGJlIHRvIHJldHVybmVkLiAgKi8KKy0gICAgcmV0dXJuIGJpbmRpbmcgPT0gTlVMTCA/IChjaGFyICopIF9ubF9kZWZhdWx0X2Rpcm5hbWUgOiBiaW5kaW5nLT5kaXJuYW1lOworLQorICAgaWYgKGJpbmRpbmcgIT0gTlVMTCkKKyAgICAgeworLSAgICAgIC8qIFRoZSBkb21haW4gaXMgYWxyZWFkeSBib3VuZC4gIElmIHRoZSBuZXcgdmFsdWUgYW5kIHRoZSBvbGQKKy0JIG9uZSBhcmUgZXF1YWwgd2Ugc2ltcGx5IGRvIG5vdGhpbmcuICBPdGhlcndpc2UgcmVwbGFjZSB0aGUKKy0JIG9sZCBiaW5kaW5nLiAgKi8KKy0gICAgICBpZiAoc3RyY21wIChkaXJuYW1lLCBiaW5kaW5nLT5kaXJuYW1lKSAhPSAwKQorKyAgICAgIGlmIChkaXJuYW1lcCkKKyAJeworLQkgIGNoYXIgKm5ld19kaXJuYW1lOworKwkgIGNvbnN0IGNoYXIgKmRpcm5hbWUgPSAqZGlybmFtZXA7CisgCistCSAgaWYgKHN0cmNtcCAoZGlybmFtZSwgX25sX2RlZmF1bHRfZGlybmFtZSkgPT0gMCkKKy0JICAgIG5ld19kaXJuYW1lID0gKGNoYXIgKikgX25sX2RlZmF1bHRfZGlybmFtZTsKKysJICBpZiAoZGlybmFtZSA9PSBOVUxMKQorKwkgICAgLyogVGhlIGN1cnJlbnQgYmluZGluZyBoYXMgYmUgdG8gcmV0dXJuZWQuICAqLworKwkgICAgKmRpcm5hbWVwID0gYmluZGluZy0+ZGlybmFtZTsKKyAJICBlbHNlCisgCSAgICB7CisrCSAgICAgIC8qIFRoZSBkb21haW4gaXMgYWxyZWFkeSBib3VuZC4gIElmIHRoZSBuZXcgdmFsdWUgYW5kIHRoZSBvbGQKKysJCSBvbmUgYXJlIGVxdWFsIHdlIHNpbXBseSBkbyBub3RoaW5nLiAgT3RoZXJ3aXNlIHJlcGxhY2UgdGhlCisrCQkgb2xkIGJpbmRpbmcuICAqLworKwkgICAgICBjaGFyICpyZXN1bHQgPSBiaW5kaW5nLT5kaXJuYW1lOworKwkgICAgICBpZiAoc3RyY21wIChkaXJuYW1lLCByZXN1bHQpICE9IDApCisrCQl7CisrCQkgIGlmIChzdHJjbXAgKGRpcm5hbWUsIElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKSkgPT0gMCkKKysJCSAgICByZXN1bHQgPSAoY2hhciAqKSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSk7CisrCQkgIGVsc2UKKysJCSAgICB7CisgI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1NUUkRVUAorLQkgICAgICBuZXdfZGlybmFtZSA9IHN0cmR1cCAoZGlybmFtZSk7CistCSAgICAgIGlmIChuZXdfZGlybmFtZSA9PSBOVUxMKQorLQkJcmV0dXJuIE5VTEw7CisrCQkgICAgICByZXN1bHQgPSBzdHJkdXAgKGRpcm5hbWUpOworICNlbHNlCistCSAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGRpcm5hbWUpICsgMTsKKy0JICAgICAgbmV3X2Rpcm5hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CistCSAgICAgIGlmIChuZXdfZGlybmFtZSA9PSBOVUxMKQorLQkJcmV0dXJuIE5VTEw7CistCistCSAgICAgIG1lbWNweSAobmV3X2Rpcm5hbWUsIGRpcm5hbWUsIGxlbik7CisrCQkgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChkaXJuYW1lKSArIDE7CisrCQkgICAgICByZXN1bHQgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CisrCQkgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ICE9IE5VTEwsIDEpKQorKwkJCW1lbWNweSAocmVzdWx0LCBkaXJuYW1lLCBsZW4pOworICNlbmRpZgorKwkJICAgIH0KKysKKysJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCAhPSBOVUxMLCAxKSkKKysJCSAgICB7CisrCQkgICAgICBpZiAoYmluZGluZy0+ZGlybmFtZSAhPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSkpCisrCQkJZnJlZSAoYmluZGluZy0+ZGlybmFtZSk7CisrCisrCQkgICAgICBiaW5kaW5nLT5kaXJuYW1lID0gcmVzdWx0OworKwkJICAgICAgbW9kaWZpZWQgPSAxOworKwkJICAgIH0KKysJCX0KKysJICAgICAgKmRpcm5hbWVwID0gcmVzdWx0OworIAkgICAgfQorKwl9CisgCistCSAgaWYgKGJpbmRpbmctPmRpcm5hbWUgIT0gX25sX2RlZmF1bHRfZGlybmFtZSkKKy0JICAgIGZyZWUgKGJpbmRpbmctPmRpcm5hbWUpOworKyAgICAgIGlmIChjb2Rlc2V0cCkKKysJeworKwkgIGNvbnN0IGNoYXIgKmNvZGVzZXQgPSAqY29kZXNldHA7CisgCistCSAgYmluZGluZy0+ZGlybmFtZSA9IG5ld19kaXJuYW1lOworKwkgIGlmIChjb2Rlc2V0ID09IE5VTEwpCisrCSAgICAvKiBUaGUgY3VycmVudCBiaW5kaW5nIGhhcyBiZSB0byByZXR1cm5lZC4gICovCisrCSAgICAqY29kZXNldHAgPSBiaW5kaW5nLT5jb2Rlc2V0OworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgLyogVGhlIGRvbWFpbiBpcyBhbHJlYWR5IGJvdW5kLiAgSWYgdGhlIG5ldyB2YWx1ZSBhbmQgdGhlIG9sZAorKwkJIG9uZSBhcmUgZXF1YWwgd2Ugc2ltcGx5IGRvIG5vdGhpbmcuICBPdGhlcndpc2UgcmVwbGFjZSB0aGUKKysJCSBvbGQgYmluZGluZy4gICovCisrCSAgICAgIGNoYXIgKnJlc3VsdCA9IGJpbmRpbmctPmNvZGVzZXQ7CisrCSAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCB8fCBzdHJjbXAgKGNvZGVzZXQsIHJlc3VsdCkgIT0gMCkKKysJCXsKKysjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCisrCQkgIHJlc3VsdCA9IHN0cmR1cCAoY29kZXNldCk7CisrI2Vsc2UKKysJCSAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoY29kZXNldCkgKyAxOworKwkJICByZXN1bHQgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CisrCQkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgIT0gTlVMTCwgMSkpCisrCQkgICAgbWVtY3B5IChyZXN1bHQsIGNvZGVzZXQsIGxlbik7CisrI2VuZGlmCisrCisrCQkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgIT0gTlVMTCwgMSkpCisrCQkgICAgeworKwkJICAgICAgaWYgKGJpbmRpbmctPmNvZGVzZXQgIT0gTlVMTCkKKysJCQlmcmVlIChiaW5kaW5nLT5jb2Rlc2V0KTsKKysKKysJCSAgICAgIGJpbmRpbmctPmNvZGVzZXQgPSByZXN1bHQ7CisrCQkgICAgICBiaW5kaW5nLT5jb2Rlc2V0X2NudHIrKzsKKysJCSAgICAgIG1vZGlmaWVkID0gMTsKKysJCSAgICB9CisrCQl9CisrCSAgICAgICpjb2Rlc2V0cCA9IHJlc3VsdDsKKysJICAgIH0KKyAJfQorICAgICB9CisrICBlbHNlIGlmICgoZGlybmFtZXAgPT0gTlVMTCB8fCAqZGlybmFtZXAgPT0gTlVMTCkKKysJICAgJiYgKGNvZGVzZXRwID09IE5VTEwgfHwgKmNvZGVzZXRwID09IE5VTEwpKQorKyAgICB7CisrICAgICAgLyogU2ltcGx5IHJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZXMuICAqLworKyAgICAgIGlmIChkaXJuYW1lcCkKKysJKmRpcm5hbWVwID0gSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpOworKyAgICAgIGlmIChjb2Rlc2V0cCkKKysJKmNvZGVzZXRwID0gTlVMTDsKKysgICAgfQorICAgZWxzZQorICAgICB7CisgICAgICAgLyogV2UgaGF2ZSB0byBjcmVhdGUgYSBuZXcgYmluZGluZy4gICovCistICAgICAgc2l6ZV90IGxlbjsKKysgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChkb21haW5uYW1lKSArIDE7CisgICAgICAgc3RydWN0IGJpbmRpbmcgKm5ld19iaW5kaW5nID0KKy0JKHN0cnVjdCBiaW5kaW5nICopIG1hbGxvYyAoc2l6ZW9mICgqbmV3X2JpbmRpbmcpKTsKKysJKHN0cnVjdCBiaW5kaW5nICopIG1hbGxvYyAob2Zmc2V0b2YgKHN0cnVjdCBiaW5kaW5nLCBkb21haW5uYW1lKSArIGxlbik7CisgCistICAgICAgaWYgKG5ld19iaW5kaW5nID09IE5VTEwpCistCXJldHVybiBOVUxMOworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChuZXdfYmluZGluZyA9PSBOVUxMLCAwKSkKKysJZ290byBmYWlsZWQ7CisgCisrICAgICAgbWVtY3B5IChuZXdfYmluZGluZy0+ZG9tYWlubmFtZSwgZG9tYWlubmFtZSwgbGVuKTsKKysKKysgICAgICBpZiAoZGlybmFtZXApCisrCXsKKysJICBjb25zdCBjaGFyICpkaXJuYW1lID0gKmRpcm5hbWVwOworKworKwkgIGlmIChkaXJuYW1lID09IE5VTEwpCisrCSAgICAvKiBUaGUgZGVmYXVsdCB2YWx1ZS4gICovCisrCSAgICBkaXJuYW1lID0gSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpOworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgaWYgKHN0cmNtcCAoZGlybmFtZSwgSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpKSA9PSAwKQorKwkJZGlybmFtZSA9IElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKTsKKysJICAgICAgZWxzZQorKwkJeworKwkJICBjaGFyICpyZXN1bHQ7CisgI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1NUUkRVUAorLSAgICAgIG5ld19iaW5kaW5nLT5kb21haW5uYW1lID0gc3RyZHVwIChkb21haW5uYW1lKTsKKy0gICAgICBpZiAobmV3X2JpbmRpbmctPmRvbWFpbm5hbWUgPT0gTlVMTCkKKy0JcmV0dXJuIE5VTEw7CisrCQkgIHJlc3VsdCA9IHN0cmR1cCAoZGlybmFtZSk7CisrCQkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgPT0gTlVMTCwgMCkpCisrCQkgICAgZ290byBmYWlsZWRfZGlybmFtZTsKKyAjZWxzZQorLSAgICAgIGxlbiA9IHN0cmxlbiAoZG9tYWlubmFtZSkgKyAxOworLSAgICAgIG5ld19iaW5kaW5nLT5kb21haW5uYW1lID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworLSAgICAgIGlmIChuZXdfYmluZGluZy0+ZG9tYWlubmFtZSA9PSBOVUxMKQorLQlyZXR1cm4gTlVMTDsKKy0gICAgICBtZW1jcHkgKG5ld19iaW5kaW5nLT5kb21haW5uYW1lLCBkb21haW5uYW1lLCBsZW4pOworKwkJICBzaXplX3QgbGVuID0gc3RybGVuIChkaXJuYW1lKSArIDE7CisrCQkgIHJlc3VsdCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKysJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCA9PSBOVUxMLCAwKSkKKysJCSAgICBnb3RvIGZhaWxlZF9kaXJuYW1lOworKwkJICBtZW1jcHkgKHJlc3VsdCwgZGlybmFtZSwgbGVuKTsKKyAjZW5kaWYKKy0KKy0gICAgICBpZiAoc3RyY21wIChkaXJuYW1lLCBfbmxfZGVmYXVsdF9kaXJuYW1lKSA9PSAwKQorLQluZXdfYmluZGluZy0+ZGlybmFtZSA9IChjaGFyICopIF9ubF9kZWZhdWx0X2Rpcm5hbWU7CisrCQkgIGRpcm5hbWUgPSByZXN1bHQ7CisrCQl9CisrCSAgICB9CisrCSAgKmRpcm5hbWVwID0gZGlybmFtZTsKKysJICBuZXdfYmluZGluZy0+ZGlybmFtZSA9IChjaGFyICopIGRpcm5hbWU7CisrCX0KKyAgICAgICBlbHNlCisrCS8qIFRoZSBkZWZhdWx0IHZhbHVlLiAgKi8KKysJbmV3X2JpbmRpbmctPmRpcm5hbWUgPSAoY2hhciAqKSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSk7CisrCisrICAgICAgbmV3X2JpbmRpbmctPmNvZGVzZXRfY250ciA9IDA7CisrCisrICAgICAgaWYgKGNvZGVzZXRwKQorIAl7CisrCSAgY29uc3QgY2hhciAqY29kZXNldCA9ICpjb2Rlc2V0cDsKKysKKysJICBpZiAoY29kZXNldCAhPSBOVUxMKQorKwkgICAgeworKwkgICAgICBjaGFyICpyZXN1bHQ7CisrCisgI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1NUUkRVUAorLQkgIG5ld19iaW5kaW5nLT5kaXJuYW1lID0gc3RyZHVwIChkaXJuYW1lKTsKKy0JICBpZiAobmV3X2JpbmRpbmctPmRpcm5hbWUgPT0gTlVMTCkKKy0JICAgIHJldHVybiBOVUxMOworKwkgICAgICByZXN1bHQgPSBzdHJkdXAgKGNvZGVzZXQpOworKwkgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ID09IE5VTEwsIDApKQorKwkJZ290byBmYWlsZWRfY29kZXNldDsKKyAjZWxzZQorLQkgIGxlbiA9IHN0cmxlbiAoZGlybmFtZSkgKyAxOworLQkgIG5ld19iaW5kaW5nLT5kaXJuYW1lID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworLQkgIGlmIChuZXdfYmluZGluZy0+ZGlybmFtZSA9PSBOVUxMKQorLQkgICAgcmV0dXJuIE5VTEw7CistCSAgbWVtY3B5IChuZXdfYmluZGluZy0+ZGlybmFtZSwgZGlybmFtZSwgbGVuKTsKKysJICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoY29kZXNldCkgKyAxOworKwkgICAgICByZXN1bHQgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CisrCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgPT0gTlVMTCwgMCkpCisrCQlnb3RvIGZhaWxlZF9jb2Rlc2V0OworKwkgICAgICBtZW1jcHkgKHJlc3VsdCwgY29kZXNldCwgbGVuKTsKKyAjZW5kaWYKKysJICAgICAgY29kZXNldCA9IHJlc3VsdDsKKysJICAgICAgbmV3X2JpbmRpbmctPmNvZGVzZXRfY250cisrOworKwkgICAgfQorKwkgICpjb2Rlc2V0cCA9IGNvZGVzZXQ7CisrCSAgbmV3X2JpbmRpbmctPmNvZGVzZXQgPSAoY2hhciAqKSBjb2Rlc2V0OworIAl9CisrICAgICAgZWxzZQorKwluZXdfYmluZGluZy0+Y29kZXNldCA9IE5VTEw7CisgCisgICAgICAgLyogTm93IGVucXVldWUgaXQuICAqLworICAgICAgIGlmIChfbmxfZG9tYWluX2JpbmRpbmdzID09IE5VTEwKK0BAIC0xODcsMTMgKzMxMyw1MSBAQAorIAkgIGJpbmRpbmctPm5leHQgPSBuZXdfYmluZGluZzsKKyAJfQorIAorLSAgICAgIGJpbmRpbmcgPSBuZXdfYmluZGluZzsKKysgICAgICBtb2RpZmllZCA9IDE7CisrCisrICAgICAgLyogSGVyZSB3ZSBkZWFsIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMuICAqLworKyAgICAgIGlmICgwKQorKwl7CisrCWZhaWxlZF9jb2Rlc2V0OgorKwkgIGlmIChuZXdfYmluZGluZy0+ZGlybmFtZSAhPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSkpCisrCSAgICBmcmVlIChuZXdfYmluZGluZy0+ZGlybmFtZSk7CisrCWZhaWxlZF9kaXJuYW1lOgorKwkgIGZyZWUgKG5ld19iaW5kaW5nKTsKKysJZmFpbGVkOgorKwkgIGlmIChkaXJuYW1lcCkKKysJICAgICpkaXJuYW1lcCA9IE5VTEw7CisrCSAgaWYgKGNvZGVzZXRwKQorKwkgICAgKmNvZGVzZXRwID0gTlVMTDsKKysJfQorICAgICB9CisgCistICByZXR1cm4gYmluZGluZy0+ZGlybmFtZTsKKysgIC8qIElmIHdlIG1vZGlmaWVkIGFueSBiaW5kaW5nLCB3ZSBmbHVzaCB0aGUgY2FjaGVzLiAgKi8KKysgIGlmIChtb2RpZmllZCkKKysgICAgKytfbmxfbXNnX2NhdF9jbnRyOworKworKyAgX19saWJjX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKyt9CisrCisrLyogU3BlY2lmeSB0aGF0IHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIGZvdW5kCisrICAgaW4gRElSTkFNRSByYXRoZXIgdGhhbiBpbiB0aGUgc3lzdGVtIGxvY2FsZSBkYXRhIGJhc2UuICAqLworK2NoYXIgKgorK0JJTkRURVhURE9NQUlOIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICpkaXJuYW1lKQorK3sKKysgIHNldF9iaW5kaW5nX3ZhbHVlcyAoZG9tYWlubmFtZSwgJmRpcm5hbWUsIE5VTEwpOworKyAgcmV0dXJuIChjaGFyICopIGRpcm5hbWU7CisrfQorKworKy8qIFNwZWNpZnkgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBpbiB3aGljaCB0aGUgbWVzc2FnZXMgZnJvbSB0aGUKKysgICBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIHJldHVybmVkLiAgKi8KKytjaGFyICoKKytCSU5EX1RFWFRET01BSU5fQ09ERVNFVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqY29kZXNldCkKKyt7CisrICBzZXRfYmluZGluZ192YWx1ZXMgKGRvbWFpbm5hbWUsIE5VTEwsICZjb2Rlc2V0KTsKKysgIHJldHVybiAoY2hhciAqKSBjb2Rlc2V0OworIH0KKyAKKyAjaWZkZWYgX0xJQkMKKy0vKiBBbGlhcyBmb3IgZnVuY3Rpb24gbmFtZSBpbiBHTlUgQyBMaWJyYXJ5LiAgKi8KKysvKiBBbGlhc2VzIGZvciBmdW5jdGlvbiBuYW1lcyBpbiBHTlUgQyBMaWJyYXJ5LiAgKi8KKyB3ZWFrX2FsaWFzIChfX2JpbmR0ZXh0ZG9tYWluLCBiaW5kdGV4dGRvbWFpbik7Cisrd2Vha19hbGlhcyAoX19iaW5kX3RleHRkb21haW5fY29kZXNldCwgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQpOworICNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2NhdC1jb21wYXQuYwkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9jYXQtY29tcGF0LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xLDI2MiArMCwwIEBACistLyogQ29tcGF0aWJpbGl0eSBjb2RlIGZvciBnZXR0ZXh0LXVzaW5nLWNhdGdldHMgaW50ZXJmYWNlLgorLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworLQorLSNpZmRlZiBIQVZFX0NPTkZJR19ICistIyBpbmNsdWRlIDxjb25maWcuaD4KKy0jZW5kaWYKKy0KKy0jaW5jbHVkZSA8c3RkaW8uaD4KKy0KKy0jaWZkZWYgU1REQ19IRUFERVJTCistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKy0jIGluY2x1ZGUgPHN0cmluZy5oPgorLSNlbHNlCistY2hhciAqZ2V0ZW52ICgpOworLSMgaWZkZWYgSEFWRV9NQUxMT0NfSAorLSMgIGluY2x1ZGUgPG1hbGxvYy5oPgorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0jaWZkZWYgSEFWRV9OTF9UWVBFU19ICistIyBpbmNsdWRlIDxubF90eXBlcy5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlICJsaWJnZXR0ZXh0LmgiCistCistLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworLQorLS8qIFhQRzMgZGVmaW5lcyB0aGUgcmVzdWx0IG9mIGBzZXRsb2NhbGUgKGNhdGVnb3J5LCBOVUxMKScgYXM6CistICAgYGBEaXJlY3RzIGBzZXRsb2NhbGUoKScgdG8gcXVlcnkgYGNhdGVnb3J5JyBhbmQgcmV0dXJuIHRoZSBjdXJyZW50CistICAgICBzZXR0aW5nIG9mIGBsb2NhbCcuJycKKy0gICBIb3dldmVyIGl0IGRvZXMgbm90IHNwZWNpZnkgdGhlIGV4YWN0IGZvcm1hdC4gIEFuZCBldmVuIHdvcnNlOiBQT1NJWAorLSAgIGRlZmluZXMgdGhpcyBub3QgYXQgYWxsLiAgU28gd2UgY2FuIHVzZSB0aGlzIGZlYXR1cmUgb25seSBvbiBzZWxlY3RlZAorLSAgIHN5c3RlbSAoZS5nLiB0aG9zZSB1c2luZyBHTlUgQyBMaWJyYXJ5KS4gICovCistI2lmZGVmIF9MSUJDCistIyBkZWZpbmUgSEFWRV9MT0NBTEVfTlVMTAorLSNlbmRpZgorLQorLS8qIFRoZSBjYXRhbG9nIGRlc2NyaXB0b3IuICAqLworLXN0YXRpYyBubF9jYXRkIGNhdGFsb2cgPSAobmxfY2F0ZCkgLTE7CistCistLyogTmFtZSBvZiB0aGUgZGVmYXVsdCBjYXRhbG9nLiAgKi8KKy1zdGF0aWMgY29uc3QgY2hhciBkZWZhdWx0X2NhdGFsb2dfbmFtZVtdID0gIm1lc3NhZ2VzIjsKKy0KKy0vKiBOYW1lIG9mIGN1cnJlbnRseSB1c2VkIGNhdGFsb2cuICAqLworLXN0YXRpYyBjb25zdCBjaGFyICpjYXRhbG9nX25hbWUgPSBkZWZhdWx0X2NhdGFsb2dfbmFtZTsKKy0KKy0vKiBHZXQgSUQgZm9yIGdpdmVuIHN0cmluZy4gIElmIG5vdCBmb3VuZCByZXR1cm4gLTEuICAqLworLXN0YXRpYyBpbnQgbXNnX3RvX2NhdF9pZCBQQVJBTVMgKChjb25zdCBjaGFyICptc2cpKTsKKy0KKy0vKiBTdWJzdGl0dXRpb24gZm9yIHN5c3RlbXMgbGFja2luZyB0aGlzIGZ1bmN0aW9uIGluIHRoZWlyIEMgbGlicmFyeS4gICovCistI2lmICFfTElCQyAmJiAhSEFWRV9TVFBDUFkKKy1zdGF0aWMgY2hhciAqc3RwY3B5IFBBUkFNUyAoKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYykpOworLSNlbmRpZgorLQorLQorLS8qIFNldCBjdXJyZW50bHkgdXNlZCBkb21haW4vY2F0YWxvZy4gICovCistY2hhciAqCistdGV4dGRvbWFpbiAoZG9tYWlubmFtZSkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CisteworLSAgbmxfY2F0ZCBuZXdfY2F0YWxvZzsKKy0gIGNoYXIgKm5ld19uYW1lOworLSAgc2l6ZV90IG5ld19uYW1lX2xlbjsKKy0gIGNoYXIgKmxhbmc7CistCistI2lmIGRlZmluZWQgSEFWRV9TRVRMT0NBTEUgJiYgZGVmaW5lZCBIQVZFX0xDX01FU1NBR0VTIFwKKy0gICAgJiYgZGVmaW5lZCBIQVZFX0xPQ0FMRV9OVUxMCistICBsYW5nID0gc2V0bG9jYWxlIChMQ19NRVNTQUdFUywgTlVMTCk7CistI2Vsc2UKKy0gIGxhbmcgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKy0gIGlmIChsYW5nID09IE5VTEwgfHwgbGFuZ1swXSA9PSAnXDAnKQorLSAgICB7CistICAgICAgbGFuZyA9IGdldGVudiAoIkxDX01FU1NBR0VTIik7CistICAgICAgaWYgKGxhbmcgPT0gTlVMTCB8fCBsYW5nWzBdID09ICdcMCcpCistCWxhbmcgPSBnZXRlbnYgKCJMQU5HIik7CistICAgIH0KKy0jZW5kaWYKKy0gIGlmIChsYW5nID09IE5VTEwgfHwgbGFuZ1swXSA9PSAnXDAnKQorLSAgICBsYW5nID0gIkMiOworLQorLSAgLyogU2VlIHdoZXRoZXIgbmFtZSBvZiBjdXJyZW50bHkgdXNlZCBkb21haW4gaXMgYXNrZWQuICAqLworLSAgaWYgKGRvbWFpbm5hbWUgPT0gTlVMTCkKKy0gICAgcmV0dXJuIChjaGFyICopIGNhdGFsb2dfbmFtZTsKKy0KKy0gIGlmIChkb21haW5uYW1lWzBdID09ICdcMCcpCistICAgIGRvbWFpbm5hbWUgPSBkZWZhdWx0X2NhdGFsb2dfbmFtZTsKKy0KKy0gIC8qIENvbXB1dGUgbGVuZ3RoIG9mIGFkZGVkIHBhdGggZWxlbWVudC4gICovCistICBuZXdfbmFtZV9sZW4gPSBzaXplb2YgKExPQ0FMRURJUikgLSAxICsgMSArIHN0cmxlbiAobGFuZykKKy0JCSArIHNpemVvZiAoIi9MQ19NRVNTQUdFUy8iKSAtIDEgKyBzaXplb2YgKFBBQ0tBR0UpIC0gMQorLQkJICsgc2l6ZW9mICgiLmNhdCIpOworLQorLSAgbmV3X25hbWUgPSAoY2hhciAqKSBtYWxsb2MgKG5ld19uYW1lX2xlbik7CistICBpZiAobmV3X25hbWUgPT0gTlVMTCkKKy0gICAgcmV0dXJuIE5VTEw7CistCistICBzdHJjcHkgKG5ld19uYW1lLCBQQUNLQUdFKTsKKy0gIG5ld19jYXRhbG9nID0gY2F0b3BlbiAobmV3X25hbWUsIDApOworLQorLSAgaWYgKG5ld19jYXRhbG9nID09IChubF9jYXRkKSAtMSkKKy0gICAgeworLSAgICAgIC8qIE5MU1BBVEggc2VhcmNoIGRpZG4ndCB3b3JrLCB0cnkgYWJzb2x1dGUgcGF0aCAqLworLSAgICAgIHNwcmludGYgKG5ld19uYW1lLCAiJXMvJXMvTENfTUVTU0FHRVMvJXMuY2F0IiwgTE9DQUxFRElSLCBsYW5nLAorLQkgICAgICAgUEFDS0FHRSk7CistICAgICAgbmV3X2NhdGFsb2cgPSBjYXRvcGVuIChuZXdfbmFtZSwgMCk7CistCistICAgICAgaWYgKG5ld19jYXRhbG9nID09IChubF9jYXRkKSAtMSkKKy0JeworLQkgIGZyZWUgKG5ld19uYW1lKTsKKy0JICByZXR1cm4gKGNoYXIgKikgY2F0YWxvZ19uYW1lOworLQl9CistICAgIH0KKy0KKy0gIC8qIENsb3NlIG9sZCBjYXRhbG9nLiAgKi8KKy0gIGlmIChjYXRhbG9nICE9IChubF9jYXRkKSAtMSkKKy0gICAgY2F0Y2xvc2UgKGNhdGFsb2cpOworLSAgaWYgKGNhdGFsb2dfbmFtZSAhPSBkZWZhdWx0X2NhdGFsb2dfbmFtZSkKKy0gICAgZnJlZSAoKGNoYXIgKikgY2F0YWxvZ19uYW1lKTsKKy0KKy0gIGNhdGFsb2cgPSBuZXdfY2F0YWxvZzsKKy0gIGNhdGFsb2dfbmFtZSA9IG5ld19uYW1lOworLQorLSAgcmV0dXJuIChjaGFyICopIGNhdGFsb2dfbmFtZTsKKy19CistCistY2hhciAqCistYmluZHRleHRkb21haW4gKGRvbWFpbm5hbWUsIGRpcm5hbWUpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworLSAgICAgY29uc3QgY2hhciAqZGlybmFtZTsKKy17CistI2lmIEhBVkVfU0VURU5WIHx8IEhBVkVfUFVURU5WCistICBjaGFyICpvbGRfdmFsLCAqbmV3X3ZhbCwgKmNwOworLSAgc2l6ZV90IG5ld192YWxfbGVuOworLQorLSAgLyogVGhpcyBkb2VzIG5vdCBtYWtlIG11Y2ggc2Vuc2UgaGVyZSBidXQgdG8gYmUgY29tcGF0aWJsZSBkbyBpdC4gICovCistICBpZiAoZG9tYWlubmFtZSA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0KKy0gIC8qIENvbXB1dGUgbGVuZ3RoIG9mIGFkZGVkIHBhdGggZWxlbWVudC4gIElmIHdlIHVzZSBzZXRlbnYgd2UgZG9uJ3QgbmVlZAorLSAgICAgdGhlIGZpcnN0IGJ5dHMgZm9yIE5MU1BBVEg9LCBidXQgd2h5IGNvbXBsaWNhdGUgdGhlIGNvZGUgZm9yIHRoaXMKKy0gICAgIHBlYW51dHMuICAqLworLSAgbmV3X3ZhbF9sZW4gPSBzaXplb2YgKCJOTFNQQVRIPSIpIC0gMSArIHN0cmxlbiAoZGlybmFtZSkKKy0JCSsgc2l6ZW9mICgiLyVML0xDX01FU1NBR0VTLyVOLmNhdCIpOworLQorLSAgb2xkX3ZhbCA9IGdldGVudiAoIk5MU1BBVEgiKTsKKy0gIGlmIChvbGRfdmFsID09IE5VTEwgfHwgb2xkX3ZhbFswXSA9PSAnXDAnKQorLSAgICB7CistICAgICAgb2xkX3ZhbCA9IE5VTEw7CistICAgICAgbmV3X3ZhbF9sZW4gKz0gMSArIHNpemVvZiAoTE9DQUxFRElSKSAtIDEKKy0JICAgICAgICAgICAgICsgc2l6ZW9mICgiLyVML0xDX01FU1NBR0VTLyVOLmNhdCIpOworLSAgICB9CistICBlbHNlCistICAgIG5ld192YWxfbGVuICs9IHN0cmxlbiAob2xkX3ZhbCk7CistCistICBuZXdfdmFsID0gKGNoYXIgKikgbWFsbG9jIChuZXdfdmFsX2xlbik7CistICBpZiAobmV3X3ZhbCA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0KKy0jIGlmIEhBVkVfU0VURU5WCistICBjcCA9IG5ld192YWw7CistIyBlbHNlCistICBjcCA9IHN0cGNweSAobmV3X3ZhbCwgIk5MU1BBVEg9Iik7CistIyBlbmRpZgorLQorLSAgY3AgPSBzdHBjcHkgKGNwLCBkaXJuYW1lKTsKKy0gIGNwID0gc3RwY3B5IChjcCwgIi8lTC9MQ19NRVNTQUdFUy8lTi5jYXQ6Iik7CistCistICBpZiAob2xkX3ZhbCA9PSBOVUxMKQorLSAgICB7CistIyBpZiBfX1NURENfXworLSAgICAgIHN0cGNweSAoY3AsIExPQ0FMRURJUiAiLyVML0xDX01FU1NBR0VTLyVOLmNhdCIpOworLSMgZWxzZQorLQorLSAgICAgIGNwID0gc3RwY3B5IChjcCwgTE9DQUxFRElSKTsKKy0gICAgICBzdHBjcHkgKGNwLCAiLyVML0xDX01FU1NBR0VTLyVOLmNhdCIpOworLSMgZW5kaWYKKy0gICAgfQorLSAgZWxzZQorLSAgICBzdHBjcHkgKGNwLCBvbGRfdmFsKTsKKy0KKy0jIGlmIEhBVkVfU0VURU5WCistICBzZXRlbnYgKCJOTFNQQVRIIiwgbmV3X3ZhbCwgMSk7CistICBmcmVlIChuZXdfdmFsKTsKKy0jIGVsc2UKKy0gIHB1dGVudiAobmV3X3ZhbCk7CistICAvKiBEbyAqbm90KiBmcmVlIHRoZSBlbnZpcm9ubWVudCBlbnRyeSB3ZSBqdXN0IGVudGVyZWQuICBJdCBpcyB1c2VkCistICAgICBmcm9tIG5vdyBvbi4gICAqLworLSMgZW5kaWYKKy0KKy0jZW5kaWYKKy0KKy0gIHJldHVybiAoY2hhciAqKSBkb21haW5uYW1lOworLX0KKy0KKy0jdW5kZWYgZ2V0dGV4dAorLWNoYXIgKgorLWdldHRleHQgKG1zZykKKy0gICAgIGNvbnN0IGNoYXIgKm1zZzsKKy17CistICBpbnQgbXNnaWQ7CistCistICBpZiAobXNnID09IE5VTEwgfHwgY2F0YWxvZyA9PSAobmxfY2F0ZCkgLTEpCistICAgIHJldHVybiAoY2hhciAqKSBtc2c7CistCistICAvKiBHZXQgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgY2F0YWxvZy4gIFdlIGFsd2F5cyB1c2Ugc2V0IG51bWJlciAxLgorLSAgICAgVGhlIG1lc3NhZ2UgSUQgaXMgY29tcHV0ZWQgYnkgdGhlIGZ1bmN0aW9uIGBtc2dfdG9fY2F0X2lkJworLSAgICAgd2hpY2ggd29ya3Mgb24gdGhlIHRhYmxlIGdlbmVyYXRlZCBieSBgcG8tdG8tdGJsJy4gICovCistICBtc2dpZCA9IG1zZ190b19jYXRfaWQgKG1zZyk7CistICBpZiAobXNnaWQgPT0gLTEpCistICAgIHJldHVybiAoY2hhciAqKSBtc2c7CistCistICByZXR1cm4gY2F0Z2V0cyAoY2F0YWxvZywgMSwgbXNnaWQsIChjaGFyICopIG1zZyk7CistfQorLQorLS8qIExvb2sgdGhyb3VnaCB0aGUgdGFibGUgYF9tc2dfdGJsJyB3aGljaCBoYXMgYF9tc2dfdGJsX2xlbmd0aCcgZW50cmllcworLSAgIGZvciB0aGUgb25lIGVxdWFsIHRvIG1zZy4gIElmIGl0IGlzIGZvdW5kIHJldHVybiB0aGUgSUQuICBJbiBjYXNlIHdoZW4KKy0gICB0aGUgc3RyaW5nIGlzIG5vdCBmb3VuZCByZXR1cm4gLTEuICAqLworLXN0YXRpYyBpbnQKKy1tc2dfdG9fY2F0X2lkIChtc2cpCistICAgICBjb25zdCBjaGFyICptc2c7CisteworLSAgaW50IGNudDsKKy0KKy0gIGZvciAoY250ID0gMDsgY250IDwgX21zZ190YmxfbGVuZ3RoOyArK2NudCkKKy0gICAgaWYgKHN0cmNtcCAobXNnLCBfbXNnX3RibFtjbnRdLl9tc2cpID09IDApCistICAgICAgcmV0dXJuIF9tc2dfdGJsW2NudF0uX21zZ19udW1iZXI7CistCistICByZXR1cm4gLTE7CistfQorLQorLQorLS8qIEBAIGJlZ2luIG9mIGVwaWxvZyBAQCAqLworLQorLS8qIFdlIGRvbid0IHdhbnQgbGliaW50bC5hIHRvIGRlcGVuZCBvbiBhbnkgb3RoZXIgbGlicmFyeS4gIFNvIHdlCistICAgYXZvaWQgdGhlIG5vbi1zdGFuZGFyZCBmdW5jdGlvbiBzdHBjcHkuICBJbiBHTlUgQyBMaWJyYXJ5IHRoaXMKKy0gICBmdW5jdGlvbiBpcyBhdmFpbGFibGUsIHRob3VnaC4gIEFsc28gYWxsb3cgdGhlIHN5bWJvbCBIQVZFX1NUUENQWQorLSAgIHRvIGJlIGRlZmluZWQuICAqLworLSNpZiAhX0xJQkMgJiYgIUhBVkVfU1RQQ1BZCistc3RhdGljIGNoYXIgKgorLXN0cGNweSAoZGVzdCwgc3JjKQorLSAgICAgY2hhciAqZGVzdDsKKy0gICAgIGNvbnN0IGNoYXIgKnNyYzsKKy17CistICB3aGlsZSAoKCpkZXN0KysgPSAqc3JjKyspICE9ICdcMCcpCistICAgIC8qIERvIG5vdGhpbmcuICovIDsKKy0gIHJldHVybiBkZXN0IC0gMTsKKy19CistI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvQ2hhbmdlTG9nCTE5OTgtMDQtMjYgMDk6MjI6MzUuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL0NoYW5nZUxvZwkyMDA0LTA5LTEyIDE0OjQwOjM0LjM0OTc0OTAwMCAtMDQwMAorQEAgLTEsMTAyMiArMSw0IEBACistMTk5Ny0wOS0wNiAwMjoxMCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogaW50bGguaW5zdC5pbjogUmVmb3JtYXQgY29weXJpZ2h0LgorLQorLTE5OTctMDgtMTkgMTU6MjIgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIGRjZ2V0dGV4dC5jIChEQ0dFVFRFWFQpOiBSZW1vdmUgd3JvbmcgY29tbWVudC4KKy0KKy0xOTk3LTA4LTE2IDAwOjEzICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1kYXRhKTogRG9uJ3QgY2hhbmdlIGRpcmVjdG9yeSB0byBpbnN0YWxsLgorLQorLTE5OTctMDgtMDEgMTQ6MzAgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIGNhdC1jb21wYXQuYzogRml4IGNvcHlyaWdodC4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jOiBEb24ndCBkZWZpbmUgc3RyY2hyIHVubGVzcyAhSEFWRV9TVFJDSFIuCistCistCSogbG9hZG1zZ2NhdC5jOiBVcGRhdGUgY29weXJpZ2h0LiAgRml4IHR5cG9zLgorLQorLQkqIGwxMG5mbGlzdC5jOiBEb24ndCBkZWZpbmUgc3RyY2hyIHVubGVzcyAhSEFWRV9TVFJDSFIuCistCShfbmxfbWFrZV9sMTBuZmxpc3QpOiBIYW5kbGUgc3BvbnNvciBhbmQgcmV2aXNpb24gY29ycmVjdGx5LgorLQorLQkqIGdldHRleHQuYzogVXBkYXRlIGNvcHlyaWdodC4KKy0JKiBnZXR0ZXh0Lmg6IExpa2V3aXNlLgorLQkqIGhhc2gtc3RyaW5nLmg6IExpa2V3aXNlLgorLQorLQkqIGZpbmRkb21haW4uYzogUmVtb2F2ZSBkZWFkIGNvZGUuICBEZWZpbmUgc3RyY2hyIG9ubHkgaWYKKy0JIUhBVkVfU1RSQ0hSLgorLQorLQkqIGV4cGxvZGVuYW1lLmM6IEluY2x1ZGUgPHN5cy90eXBlcy5oPi4KKy0KKy0JKiBleHBsb2RlbmFtZS5jOiBSZWZvcm1hdCBjb3B5cmlnaHQgdGV4dC4KKy0JKF9ubF9leHBsb2RlX25hbWUpOiBGaXggdHlwby4KKy0KKy0JKiBkY2dldHRleHQuYzogRGVmaW5lIGFuZCB1c2UgX19zZXRfZXJybm8uCistCShndWVzc19jYXRlZ29yeV92YWx1ZSk6IERvbid0IHVzZSBzZXRsb2NhbGUgaWYgSEFWRV9MQ19NRVNTQUdFUyBpcworLQlub3QgZGVmaW5lZC4KKy0KKy0JKiBiaW5kdGV4dGRvbS5jOiBQcmV0dHkgcHJpbnRpbmcuCistCistMTk5Ny0wNS0wMSAwMjoyNSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogZGNnZXR0ZXh0LmMgKGd1ZXNzX2NhdGVnb3J5X3ZhbHVlKTogRG9uJ3QgZGVwZW5kIG9uCistCUhBVkVfTENfTUVTU0FHRVMuICBXZSBkb24ndCBuZWVkIHRoZSBtYWNybyBoZXJlLgorLQlQYXRjaCBieSBCcnVubyBIYWlibGUgPGhhaWJsZUBpbG9nLmZyPi4KKy0KKy0JKiBjYXQtY29tcGF0LmMgKHRleHRkb21haW4pOiBEb04ndCByZWZlciB0byBIQVZFX1NFVExPQ0FMRV9OVUxMCistCW1hY3JvLiAgSW5zdGVhZCB1c2UgSEFWRV9MT0NBTEVfTlVMTCBhbmQgZGVmaW5lIGl0IHdoZW4gdXNpbmcKKy0JZ2xpYmMsIGFzIGluIGRjZ2V0dGV4dC5jLgorLQlQYXRjaCBieSBCcnVubyBIYWlibGUgPGhhaWJsZUBpbG9nLmZyPi4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoQ1BQRkxBR1MpOiBOZXcgdmFyaWFibGUuICBSZXBvcnRlZCBieSBGcmFuYyxvaXMKKy0JUGluYXJkLgorLQorLU1vbiBNYXIgMTAgMDY6NTE6MTcgMTk5NyAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogTWFrZWZpbGUuaW46IEltcGxlbWVudCBoYW5kbGluZyBvZiBsaWJ0b29sLgorLQorLQkqIGdldHRleHRQLmg6IENoYW5nZSBkYXRhIHN0cnVjdHVyZXMgZm9yIHVzZSBvZiBnZW5lcmljIGxvd2xldmVsCistCWkxOG4gZmlsZSBoYW5kbGluZy4KKy0KKy1XZWQgRGVjICA0IDIwOjIxOjE4IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIHRleHRkb21haW4uYzogUHV0IHBhcmVudGhlc2VzIGFyb3VuZCBhcmd1bWVudHMgb2YgbWVtY3B5IG1hY3JvCistCWRlZmluaXRpb24uCistCSogbG9jYWxlYWxpYXMuYzogTGlrZXdpc2UuCistCSogbDEwbmZsaXN0LmM6IExpa2V3aXNlLgorLQkqIGZpbmRkb21haW4uYzogTGlrZXdpc2UuCistCSogYmluZHRleHRkb20uYzogTGlrZXdpc2UuCistCVJlcG9ydGVkIGJ5IFRob21hcyBFc2tlbi4KKy0KKy1Nb24gTm92IDI1IDIyOjU3OjUxIDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIHRleHRkb21haW4uYzogTW92ZSBkZWZpbml0aW9uIG9mIGBtZW1jcHlgIG1hY3JvIHRvIHJpZ2h0CistCXBvc2l0aW9uLgorLQorLUZyaSBOb3YgMjIgMDQ6MDE6NTggMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogZmluZGRvbWFpbi5jIFshSEFWRV9TVFJJTkdfSCAmJiAhX0xJQkNdOiBEZWZpbmUgbWVtY3B5IHVzaW5nCistIAliY29weSBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLiAgUmVwb3J0ZWQgYnkgVGhvbWFzIEVza2VuLgorLQkqIGJpbmR0ZXh0ZG9tLmM6IExpa2V3aXNlLgorLQkqIGwxMG5mbGlzdC5jOiBMaWtld2lzZS4KKy0JKiBsb2NhbGVhbGlhcy5jOiBMaWtld2lzZS4KKy0JKiB0ZXh0ZG9tYWluLmM6IExpa2V3aXNlLgorLQorLVR1ZSBPY3QgMjkgMTE6MTA6MjcgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogTWFrZWZpbGUuaW4gKGxpYmRpcik6IENoYW5nZSB0byB1c2UgZXhlY19wcmVmaXggaW5zdGVhZCBvZgorLSAJcHJlZml4LiAgUmVwb3J0ZWQgYnkgS251dC1I5XZhcmRBa3NuZXMgPGV0b2tuYUBldG8uZXJpY3Nzb24uc2U+LgorLQorLVNhdCBBdWcgMzEgMDM6MDc6MDkgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogbDEwbmZsaXN0LmMgKF9ubF9ub3JtYWxpemVfY29kZXNldCk6IFdlIGNvbnZlcnQgdG8gbG93ZXIgY2FzZSwKKy0Jc28gZG9uJ3QgcHJlcGVuZCB1cHBlcmNhc2UgYElTTycgZm9yIG9ubHkgbnVtZXJpYyBhcmcuCistCistRnJpIEp1bCAxOSAwMDoxNTo0NiAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBsMTBuZmxpc3QuYzogTW92ZSBpbmNsdXNpb24gb2YgYXJnei5oLCBjdHlwZS5oLCBzdGRsaWIuaCBhZnRlcgorLQlkZWZpbml0aW9uIG9mIF9HTlVfU09VUkNFLiAgUGF0Y2ggYnkgUm9sYW5kIE1jR3JhdGguCistCistCSogTWFrZWZpbGUuaW4gKHVuaW5zdGFsbCk6IEZpeCBhbm90aGVyIGJ1ZyB3aXRoIGBmb3InIGxvb3AgYW5kCistCWVtcHR5IGFyZ3VtZW50cy4gIFBhdGNoIGJ5IEppbSBNZXllcmluZy4gIENvcnJlY3QgbmFtZSBvcworLQl1bmluc3RhbGxlZCBmaWxlczogbm8gaW50bC0gcHJlZml4IGFueW1vcmUuCistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtZGF0YSk6IEFnYWluIHdvcmsgYXJvdW5kIHNoZWxscyB3aGljaAorLQljYW5ub3QgaGFuZGxlIG1wdHkgZm9yIGxpc3QuICBSZXBvcnRlZCBieSBKaW0gTWV5ZXJpbmcuCistCistU2F0IEp1bCAxMyAxODoxMTozNSAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IFNwbGl0IGdvYWwuICBOb3cgZGVwZW5kIG9uIGluc3RhbGwtZXhlYworLSAgICAgICAgYW5kIGluc3RhbGwtZGF0YS4KKy0JKGluc3RhbGwtZXhlYywgaW5zdGFsbC1kYXRhKTogTmV3IGdvYWxzLiAgQ3JlYXRlZCBmcm9tIGZvcm1lcgorLQlpbnN0YWxsIGdvYWwuCistCVJlcG9ydGVkIGJ5IEthcmwgQmVycnkuCistCistU2F0IEp1biAyMiAwNDo1ODoxNCAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoTUtJTlNUQUxMRElSUyk6IE5ldyB2YXJpYWJsZS4gIFBhdGggdG8KKy0gICAgICAgIG1raW5zdGFsbGRpcnMgc2NyaXB0LgorLQkoaW5zdGFsbCk6IHVzZSBNS0lOU1RBTExESVJTIHZhcmlhYmxlIG9yIGlmIHRoZSBzY3JpcHQgaXMgbm90IHByZXNlbnQKKy0JdHJ5IHRvIGZpbmQgaXQgaW4gdGhlICR0b3Bfc2NyZGlyKS4KKy0KKy1XZWQgSnVuIDE5IDAyOjU2OjU2IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIGwxMG5mbGlzdC5jOiBMaW51eCBsaWJjICpwYXJ0bHkqIGluY2x1ZGVzIHRoZSBhcmd6XyogZnVuY3Rpb25zLgorLQlHcnIuICBXb3JrIGFyb3VuZCBieSByZW5hbWluZyB0aGUgc3RhdGljIHZlcnNpb24gYW5kIHVzZSBtYWNyb3MKKy0JZm9yIHJlbmFtaW5nLgorLQorLVR1ZSBKdW4gMTggMjA6MTE6MTcgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogbDEwbmZsaXN0LmM6IENvcnJlY3QgcHJlc2VuY2UgdGVzdCBtYWNyb3Mgb2YgX19hcmd6XyogZnVuY3Rpb25zLgorLQorLQkqIGwxMG5mbGlzdC5jOiBJbmNsdWRlIDxhcmd6Lmg+IGJhc2VkIG9uIHRlc3Qgb2YgaXQgaW5zdGVhZCB3aGVuCistCV9fYXJnel8qIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlLgorLQlSZXBvcnRlZCBieSBBbmRyZWFzIFNjaHdhYi4KKy0KKy1UaHUgSnVuIDEzIDE1OjE3OjQ0IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIGV4cGxvZGVuYW1lLmMsIGwxMG5mbGlzdC5jOiBEZWZpbmUgTlVMTCBmb3IgZHVtYiBzeXN0ZW1zLgorLQorLVR1ZSBKdW4gMTEgMTc6MDU6MTMgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogaW50bGguaW5zdC5pbiwgbGliZ2V0dGV4dC5oIChkY2dldHRleHQpOiBSZW5hbWUgbG9jYWwgdmFyaWFibGUKKy0JcmVzdWx0IHRvIF9fcmVzdWx0IHRvIHByZXZlbnQgbmFtZSBjbGFzaC4KKy0KKy0JKiBsMTBuZmxpc3QuYywgbG9jYWxlYWxpYXMuYywgZGNnZXR0ZXh0LmM6IERlZmluZSBfR05VX1NPVVJDRSB0bworLSAgICAgICAgZ2V0IHByb3RvdHlwZSBmb3Igc3RwY3B5IGFuZCBzdHJjYXNlY21wLgorLQorLQkqIGludGxoLmluc3QuaW4sIGxpYmdldHRleHQuaDogTW92ZSBkZWNsYXJhdGlvbiBvZgorLQlgX25sX21zZ19jYXRfY250cicgb3V0c2lkZSBfX2V4dGVuc2lvbl9fIGJsb2NrIHRvIHByZXZlbnQgd2FybmluZworLQlmcm9tIGdjYydzIC1XbmVzdGVkLWV4dGVybiBvcHRpb24uCistCistRnJpIEp1biAgNyAwMTo1ODowMCAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IFJlbW92ZSBjb21tZW50LgorLQorLVRodSBKdW4gIDYgMTc6Mjg6MTcgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBXb3JrIGFyb3VuZCBmb3IgYW5vdGhlciBCdWdsaXggc3R1cGlkaXR5LgorLQlBbHdheXMgdXNlIGFuIGBlbHNlJyBjbG9zZSBmb3IgYGlmJ3MuICBSZXBvcnRlZCBieSBOZWxzb24gQmVlYmUuCistCistCSogTWFrZWZpbGUuaW4gKGludGxoLmluc3QpOiBDb3JyZWN0IHR5cG8gaW4gcGhvbnkgcnVsZS4KKy0JUmVwb3J0ZWQgYnkgTmVsc29uIEJlZWJlLgorLQorLVRodSBKdW4gIDYgMDE6NDk6NTIgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogZGNnZXR0ZXh0LmMgKHJlYWRfYWxpYXNfZmlsZSk6IFJlbmFtZSB2YXJpYWJsZSBhbGxvY2FfbGlzdCB0bworLQlibG9ja19saXN0IGFzIHRoZSBtYWNybyBjYWxscyBhc3N1bWUuCistCVBhdGNoIGJ5IEVyaWMgQmFja3VzLgorLQorLQkqIGxvY2FsZWFsaWFzLmMgWyFIQVZFX0FMTE9DQV06IERlZmluZSBhbGxvY2EgYXMgbWFjcm8gdXNpbmcKKy0gICAgICAgIG1hbGxvYy4KKy0JKHJlYWRfYWxpYXNfZmlsZSk6IFJlbmFtZSB2YXJyaWFiZSBhbGxvY2FfbGlzdCB0byBibG9ja19saXN0IGFzIHRoZQorLQltYWNybyBjYWxscyBhc3N1bWUuCistCVBhdGNoIGJ5IEVyaWMgQmFja3VzLgorLQorLQkqIGwxMG5mbGlzdC5jOiBDb3JyZWN0IGNvbmRpdGlvbmFsIGZvciA8YXJnei5oPiBpbmNsdXNpb24uCistCVJlcG9ydGVkIGJ5IFJvbGFuZCBNY0dyYXRoLgorLQorLQkqIE1ha2VmaWxlLmluIChhbGwpOiBEZXBlbmQgb24gYWxsLUBVU0VfSU5DTFVERURfTElCSU5UTEAsIG5vdAorLSAgICAgICAgYWxsLUBVU0VfTkxTQC4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IGludGxoLmluc3QgY29tZXMgZnJvbSBsb2NhbCBkaXIsIG5vdAorLSAgICAgICAgJChzcmNkaXIpLgorLQorLQkqIE1ha2VmaWxlLmluIChpbnRsaC5pbnN0KTogU3BlY2lhbCBoYW5kbGluZyBvZiB0aGlzIGdvYWwuICBJZgorLQl1c2VkIGluIGdldHRleHQsIHRoaXMgaXMgcmVhbGx5IGEgcnVsIHRvIGNvbnN0cnVjdCB0aGlzIGZpbGUuICBJZgorLQl1c2VkIGluIGFueSBvdGhlciBwYWNrYWdlIGl0IGlzIGRlZmluZWQgYXMgYSAuUEhPTlkgcnVsZSB3aXRoCistCWVtcHR5IGJvZHkuCistCistCSogZmluZGRvbWFpbi5jOiBFeHRyYWN0IGxvY2FsZSBmaWxlIGluZm9ybWF0aW9uIGhhbmRsaW5nIGludG8KKy0JbDEwbmZpbGUuYy4gIFJlbmFtZSBsb2NhbCBzdHBjcHlfXyBmdW5jdGlvbiB0byBzdHBjcHkuCistCistCSogZGNnZXR0ZXh0LmMgKHN0cGNweSk6IEFkZCBsb2NhbCBkZWZpbml0aW9uLgorLQorLQkqIGwxMG5mbGlzdC5jOiBTb2x2ZSBzb21lIHBvcnRhYmlsaXR5IHByb2JsZW1zLiAgUGF0Y2hlcyBwYXJ0bHkgYnkKKy0JVGhvbWFzIEVza2VuLiAgQWRkIGxvY2FsIGRlZmluaXRpb24gb2Ygc3RwY3B5LgorLQorLVR1ZSBKdW4gIDQgMDI6NDc6NDkgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogaW50bGguaW5zdC5pbjogRG9uJ3QgZGVwZW5kIGluY2x1ZGluZyA8bG9jYWxlLmg+IG9uCistCUhBVkVfTE9DQUxFX0guICBJbnN0ZWFkIGNvbmZpZ3VyZSBtdXN0IHJld3JpdGUgdGhpcyBmaWlsZQorLQlkZXBlbmRpbmcgb24gdGhlIHJlc3VsdCBvZiB0aGUgY29uZmlndXJlIHJ1bi4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IGxpYmludGwuaW5zdCBpcyBub3cgY2FsbGVkIGludGxoLmluc3QuCistCUFkZCBydWxlcyBmb3IgdXBkYXRpbmcgaW50bGguaW5zdCBmcm9tIGludGxoLmluc3QuaW4uCistCistCSogbGliaW50bC5pbnN0OiBSZW5hbWVkIHRvIGludGxoLmluc3QuaW4uCistCistCSogbG9jYWxlYWxpYXMuYywgZGNnZXR0ZXh0LmMgW19fR05VQ19fXTogRGVmaW5lIEhBVkVfQUxMT0NBIHRvIDEKKy0gICAgICAgIGJlY2F1c2UgZ2NjIGhhcyBfX2J1aXRsaW5fYWxsb2NhLgorLQlSZXBvcnRlZCBieSBSb2xhbmQgTWNHcmF0aC4KKy0KKy1Nb24gSnVuICAzIDAwOjMyOjE2IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsY2hlY2spOiBOZXcgZ29hbCB0byBmdWxmaWxsIG5lZWRzIG9mCistICAgICAgICBhdXRvbWFrZSdzIGRpc3RjaGVjay4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IFJlb3JkZXIgY29tbWFuZHMgc28gdGhhdCBWRVJTSU9OIGlzCistICAgICAgICBmb3VuZC4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoZ2V0dGV4dHNyY2Rpcik6IE5vdyB1c2Ugc3ViZGlyZWN0b3J5IGludGwvIGluCistICAgICAgICBAZGF0YWRpckAvZ2V0dGV4dC4KKy0JKENPTVNSQ1MpOiBBZGQgbDEwbmZpbGUuYy4KKy0JKE9CSkVDVFMpOiBBZGQgbDEwbmZpbGUuby4KKy0JKERJU1RGSUxFUyk6IFJlbmFtZSB0byBESVNURklMRS5ub3JtYWwuICBSZW1vdmUgJChESVNURklMRVMuY29tbW9uKS4KKy0JKERJU1RGSUxFLmdldHRleHQpOiBSZW1vdmUgJChESVNURklMRVMuY29tbW9uKS4KKy0JKGFsbC1nZXR0ZXh0KTogUmVtb3ZlIGdvYWwuCistCShpbnN0YWxsKTogSWYgJChQQUNLQUdFKSA9IGdldHRleHQgaW5zdGFsbCwgb3RoZXJ3b3NlIGRvIG5vdGhpbmcuICBObworLQlwYWNrYWdlIGJ1dCBnZXR0ZXh0IGl0c2VsZiBzaG91bGQgaW5zdGFsbCBsaWJpbnRsLmggKyBoZWFkZXJzLgorLQkoZGlzdCk6IEV4dGVuZCBnb2FsIHRvIHdvcmsgZm9yIGdldHRleHQsIHRvby4KKy0JKGRpc3QtZ2V0dGV4dCk6IFJlbW92ZSBnb2FsLgorLQorLQkqIGRjZ2V0dGV4dC5jIFshSEFWRV9BTExPQ0FdOiBEZWZpbmUgbWFjcm8gYWxsb2NhIGJ5IHVzaW5nIG1hbGxvYy4KKy0KKy1TdW4gSnVuICAyIDE3OjMzOjA2IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIGxvYWRtc2djYXQuYyAoX25sX2xvYWRfZG9tYWluKTogUGFyYW1ldGVyIGlzIG5vdyBjb21lcyBmcm9tCistICAgICAgICBmaW5kX2wxMG5maWxlLgorLQorLVNhdCBKdW4gIDEgMDI6MjM6MDMgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogbDEwbmZsaXN0LmMgKF9fYXJnel9uZXh0KTogQWRkIGRlZmluaXRpb24uCistCistCSogZGNnZXR0ZXh0LmMgWyFIQVZFX0FMTE9DQV06IEFkZCBjb2RlIGZvciBoYW5kbGluZyBtaXNzaW5nIGFsbG9jYQorLQljb2RlLiAgVXNlIG5ldyBsMTBuZmlsZSBoYW5kbGluZy4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIFshSEFWRV9BTExPQ0FdOiBBZGQgY29kZSBmb3IgaGFuZGxpbmcgbWlzc2luZworLSAgICAgICAgYWxsb2NhIGNvZGUuCistCistCSogbDEwbmZsaXN0LmM6IEluaXRpYWwgcmV2aXNpb24uCistCistVHVlIEFwciAgMiAxODo1MToxOCAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChhbGwtZ2V0dGV4dCk6IE5ldyBnb2FsLiAgU2FtZSBhcyBhbGwteWVzLgorLQorLVRodSBNYXIgMjggMjM6MDE6MjIgMTk5NiAgS2FybCBFaWNod2FsZGVyICA8a2VAa2UuY2VudHJhbC5kZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoZ2V0dGV4dHNyY2Rpcik6IERlZmluZSB1c2luZyBAZGF0YWRpckAuCistCistVHVlIE1hciAyNiAxMjozOToxNCAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYzogSW5jbHVkZSA8Y3R5cGUuaD4uICBSZXBvcnRlZCBieSBSb2xhbmQgTWNHcmF0aC4KKy0KKy1TYXQgTWFyIDIzIDAyOjAwOjM1IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZmluZGRvbWFpbi5jIChzdHBjcHkpOiBSZW5hbWUgdG8gc3RwY3B5X18gdG8gcHJldmVudCBjbGFzaGluZworLSAgICAgICAgd2l0aCBleHRlcm5hbCBkZWNsYXJhdGlvbi4KKy0KKy1TYXQgTWFyICAyIDAwOjQ3OjA5IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKGFsbC1ubyk6IFJlbmFtZSBmcm9tIGFsbF9uby4KKy0KKy1TYXQgRmViIDE3IDAwOjI1OjU5IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZ2V0dGV4dFAuaCBbbG9hZGVkX2RvbWFpbl06IEFycmF5IGBzdWNjZXNzb3InIG11c3Qgbm93IGNvbnRhaW4gdXAKKy0gICAgICAgIHRvIDYzIGVsZW1lbnRzIChiZWNhdXNlIG9mIGNvZGVzZXQgbmFtZSBub3JtYWxpemF0aW9uKS4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEltcGxlbWVudCBjb2Rlc2V0IG5hbWUgbm9ybWFsaXphdGlvbi4KKy0KKy1UaHUgRmViIDE1IDA0OjM5OjA5IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKGFsbCk6IERlZmluZSB0byBgYWxsLUBVU0VfTkxTQCcuCistCShhbGwteWVzLCBhbGxfbm8pOiBOZXcgZ29hbHMuICBgYWxsLW5vJyBpcyBub29wLCBgYWxsLXllcycKKy0JaXMgZm9ybWVyIGFsbC4KKy0KKy1Nb24gSmFuIDE1IDIxOjQ2OjAxIDE5OTYgIEhvd2FyZCBHYXlsZSAgPGhvd2FyZEBoYWwuY29tPgorLQorLQkqIGxvY2FsZWFsaWFzLmMgKGFsaWFzX2NvbXBhcmUpOiBJbmNyZW1lbnQgc3RyaW5nIHBvaW50ZXJzIGluIGxvb3AKKy0gICAgICAgIG9mIHN0cmNhc2VjbXAgcmVwbGFjZW1lbnQuCistCistRnJpIERlYyAyOSAyMToxNjozNCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsLXNyYyk6IFdobyBjb21tZW50ZWQgdGhpcyBnb2FsIG91dCA/IDotKQorLQorLUZyaSBEZWMgMjkgMTU6MDg6MTYgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBkY2dldHRleHQuYyAoRENHRVRURVhUKTogU2F2ZSBgZXJybm8nLiAgRmFpbGluZyBzeXN0ZW0gY2FsbHMKKy0Jc2hvdWxkIG5vdCBlZmZlY3QgaXQgYmVjYXVzZSBhIG1pc3NpbmcgY2F0YWxvZyBpcyBubyBlcnJvci4KKy0JUmVwb3J0ZWQgYnkgSGFyYWxkIEs8bzo+bmlnIDxrb2VuaWdAdGF0LnBoeXNpay51bmktdHVlYmluZ2VuLmRlPi4KKy0KKy1UdWUgRGVjIDE5IDIyOjA5OjEzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKE1ha2VmaWxlKTogRXhwbGljaXRseSB1c2UgJChTSEVMTCkgZm9yIHJ1bm5pbmcKKy0gICAgICAgIHNoZWxsIHNjcmlwdHMuCistCistRnJpIERlYyAxNSAxNzozNDo1OSAxOTk1ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1zcmMpOiBPbmx5IGluc3RhbGwgbGlicmFyeSBhbmQgaGVhZGVyIHdoZW4KKy0Jd2UgdXNlIHRoZSBvd24gaW1wbGVtZW50YXRpb24uICBEb24ndCBkbyBpdCB3aGVuIHVzaW5nIHRoZQorLQlzeXN0ZW0ncyBnZXR0ZXh0IG9yIGNhdGdldHMgZnVuY3Rpb25zLgorLQorLQkqIGRjZ2V0dGV4dC5jIChmaW5kX21zZyk6IE11c3Qgbm90IHN3YXAgZG9tYWluLT5oYXNoX3NpemUgaGVyZS4KKy0KKy1TYXQgRGVjICA5IDE2OjI0OjM3IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbG9jYWxlYWxpYXMuYywgbGliaW50bC5pbnN0LCBsaWJnZXR0ZXh0LmgsIGhhc2gtc3RyaW5nLmgsCistCWdldHRleHRQLmgsIGZpbmRkb21haW4uYywgZGNnZXR0ZXh0LmMsIGNhdC1jb21wYXQuYzoKKy0JVXNlIFBBUkFNUyBpbnN0ZWFkIG9mIF9fUC4gIFN1Z2dlc3RlZCBieSBSb2xhbmQgTWNHcmF0aC4KKy0KKy1UdWUgRGVjICA1IDExOjM5OjE0IDE5OTUgIExhcnJ5IFNjaHdpbW1lciAgPHJvc2VidWRAY3ljbG9uZS5zdGFuZm9yZC5lZHU+CistCistCSogbGliZ2V0dGV4dC5oOiBVc2UgYCNpZiAhZGVmaW5lZCAoX0xJQklOVExfSCknIGluc3RlYWQgb2YgYCNpZgorLQkhX0xJQklOVExfSCcgYmVjYXVzZSBTb2xhcmlzIGRlZmluZXMgX0xJQklOVExfSCBhcyBlbXB0eS4KKy0KKy1Nb24gRGVjICA0IDE1OjQyOjA3IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtc3JjKToKKy0JSW5zdGFsbCBsaWJpbnRsLmluc3QgaW5zdGVhZCBvZiBsaWJpbnRsLmguaW5zdGFsbC4KKy0KKy1TYXQgRGVjICAyIDIyOjUxOjM4IDE5OTUgIE1hcmN1cyBEYW5pZWxzICA8bWFyY3VzQHN5c2MucGR4LmVkdT4KKy0KKy0JKiBjYXQtY29tcGF0LmMgKHRleHRkb21haW4pOgorLQlSZXZlcnNlIG9yZGVyIGluIHdoaWNoIGZpbGVzIGFyZSB0cmllZCB5b3UgbG9hZC4gIEZpcnN0CistCXRyeSBsb2NhbCBmaWxlLCB3aGVuIHRoaXMgZmFpbGVkIGFic29sdXRlIHBhdGguCistCistV2VkIE5vdiAyOSAwMjowMzo1MyAxOTk1ICBOZWxzb24gSC4gRi4gQmVlYmUgIDxiZWViZUBtYXRoLnV0YWguZWR1PgorLQorLQkqIGNhdC1jb21wYXQuYyAoYmluZHRleHRkb21haW4pOiBBZGQgbWlzc2luZyB7IH0uCistCistU3VuIE5vdiAyNiAxODoyMTo0MSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxpYmludGwuaW5zdDogQWRkIG1pc3NpbmcgX19QIGRlZmluaXRpb24uICBSZXBvcnRlZCBieSBOZWxzb24gQmVlYmUuCistCistCSogTWFrZWZpbGUuaW46CistCUFkZCBkdW1teSBgYWxsJyBhbmQgYGR2aScgZ29hbHMuICBSZXBvcnRlZCBieSBUb20gVHJvbWV5LgorLQorLVNhdCBOb3YgMjUgMTY6MTI6MDEgMTk5NSAgRnJhbmMsb2lzIFBpbmFyZCAgPHBpbmFyZEBpcm8udW1vbnRyZWFsLmNhPgorLQorLQkqIGhhc2gtc3RyaW5nLmg6IENhcGl0YWxpemUgYXJndW1lbnRzIG9mIG1hY3Jvcy4KKy0KKy1TYXQgTm92IDI1IDEyOjAxOjM2IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKERJU1RGSUxFUyk6IFByZXZlbnQgZmlsZXMgbmFtZXMgbG9uZ2VyIHRoYW4gMTMKKy0JY2hhcmFjdGVycy4gIGxpYmludGwuaC5nbGliYy0+bGliaW50bC5nbGliYywKKy0JbGliaW50bC5oLmluc3RhbGwtPmxpYmludGwuaW5zdC4gIFJlcG9ydGVkIGJ5IEpvc2h1YSBSLiBQb3Vsc29uLgorLQorLVNhdCBOb3YgMjUgMTE6MzE6MTIgMTk5NSAgRXJpYyBCYWNrdXMgIDxlcmljYkBsc2lkLmhwLmNvbT4KKy0KKy0JKiBkY2dldHRleHQuYzogRml4IGJ1ZyBpbiBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWxzLgorLQorLVNhdCBOb3YgMjUgMDI6MzU6MjcgMTk5NSAgTmVsc29uIEguIEYuIEJlZWJlICA8YmVlYmVAbWF0aC51dGFoLmVkdT4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6IFNvbGFyaXMgY2MgZG9lcyBub3QgdW5kZXJzdGFuZAorLQkgI2lmICFTWU1CT0wxICYmICFTWU1CT0wyLiAgU2FkCWJ1dCB0cnVlLgorLQorLVRodSBOb3YgMjMgMTY6MjI6MTQgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBoYXNoLXN0cmluZy5oIChoYXNoX3N0cmluZyk6CistCUZpeCBmb3IgbWFjaGluZSB3aXRoID4zMiBiaXQgYHVuc2lnbmVkIGxvbmcncy4KKy0KKy0JKiBkY2dldHRleHQuYyAoRENHRVRURVhUKToKKy0JRml4IGhvcnJpYmxlIGJ1ZyBpbiBsb29wIGZvciBhbHRlcm5hdGl2ZSB0cmFuc2xhdGlvbi4KKy0KKy1UaHUgTm92IDIzIDAxOjQ1OjI5IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogcG8ydGJsLnNlZC5pbiwgbGludXgtbXNnLnNlZCwgeG9wZW4tbXNnLnNlZDoKKy0JU29tZSBmdXJ0aGVyIHNpbXBsaWZpY2F0aW9ucyBpbiBtZXNzYWdlIG51bWJlciBnZW5lcmF0aW9uLgorLQorLU1vbiBOb3YgMjAgMjE6MDg6NDMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsaWJpbnRsLmguZ2xpYmM6IFVzZSBfX2NvbnN0IGluc3RlYWQgb2YgY29uc3QgaW4gcHJvdG90eXBlcy4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1zcmMpOgorLQlJbnN0YWxsIGxpYmludGwuaC5pbnN0YWxsIGluc3RlYWQgb2YgbGliaW50bC5oLiAgVGhpcworLQlpcyBhIHN0cmlwcGVkLWRvd24gdmVyc2lvbi4gIFN1Z2dlc3RlZCBieSBQZXRlciBNaWxsZXIuCistCistCSogbGliaW50bC5oLmluc3RhbGwsIGxpYmludGwuaC5nbGliYzogSW5pdGlhbCByZXZpc2lvbi4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChfbmxfZXhwYW5kX2FsaWFzLCByZWFkX2FsaWFzX2ZpbGUpOgorLQlQcm90ZWN0IHByb3RvdHlwZXMgaW4gdHlwZSBjYXN0cyBieSBfX1AuCistCistVHVlIE5vdiAxNCAxNjo0Mzo1OCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGhhc2gtc3RyaW5nLmg6IENvcnJlY3QgcHJvdG90eXBlIGZvciBoYXNoX3N0cmluZy4KKy0KKy1TdW4gTm92IDEyIDEyOjQyOjMwIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogaGFzaC1zdHJpbmcuaCAoaGFzaF9zdHJpbmcpOiBBZGQgcHJvdG90eXBlLgorLQorLQkqIGdldHRleHRQLmg6IEZpeCBjb3B5cmlnaHQuCistCShTV0FQKTogQWRkIHByb3RvdHlwZS4KKy0KKy1XZWQgTm92ICA4IDIyOjU2OjMzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbG9jYWxlYWxpYXMuYyAocmVhZF9hbGlhc19maWxlKTogRm9yZ290IHNpemVvZi4KKy0JQXZvaWQgY2FsbGluZyAqcHJpbnRmIGZ1bmN0aW9uLiAgVGhpcyBpbnRyb2R1Y2VzIGEgYmlnIG92ZXJoZWFkLgorLQlQYXRjaCBieSBSb2xhbmQgTWNHcmF0aC4KKy0KKy1UdWUgTm92ICA3IDE0OjIxOjA4IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZmluZGRvbWFpbi5jLCBjYXQtY29tcGF0LmM6IFdyb25nIGluZGVudGF0aW9uIGluICNpZiBmb3Igc3RwY3B5LgorLQorLQkqIGZpbmRkb21haW4uYyAoc3RwY3B5KToKKy0JRGVmaW5lIHN1YnN0aXR1dGlvbiBmdW5jdGlvbiBsb2NhbC4gIFRoZSBtYWNybyB3YXMgdG8gZmxha3kuCistCistCSogY2F0LWNvbXBhdC5jOiBGaXggdHlwby4KKy0KKy0JKiB4b3Blbi1tc2cuc2VkLCBsaW51eC1tc2cuc2VkOgorLQlXaGlsZSBicmluZ2luZyBtZXNzYWdlIG51bWJlciB0byByaWdodCBwbGFjZSBvbmx5IGFjY2VwdCBkaWdpdHMuCistCistCSogbGludXgtbXNnLnNlZCwgeG9wZW4tbXNnLnNlZDogTm93IHRoYXQgdGhlIGNvdW50ZXIgZG9lcyBub3QgaGF2ZQorLQlsZWFkaW5nIDBzIHdlIGRvbid0IG5lZWQgdG8gcmVtb3ZlIHRoZW0uICBSZXBvcnRlZCBieSBNYXJjdXMKKy0JRGFuaWVscy4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoLi4vcG8vY2F0LWlkLXRibC5vKTogVXNlICQodG9wX3NyZGlyKSBpbgorLQlkZXBlbmRlbmN5LiAgUmVwb3J0ZWQgYnkgTWFyY3VzIERhbmllbHMuCistCistCSogY2F0LWNvbXBhdC5jOiAoc3RwY3B5KSBbIV9MSUJDICYmICFIQVZFX1NUUENQWV06IERlZmluZSByZXBsYWNlbWVudC4KKy0JR2VuZXJhbGx5IGNsZWFudXAgdXNpbmcgI2lmIGluc3RlYWQgb2YgI2lmbmRlZi4KKy0KKy0JKiBNYWtlZmlsZS5pbjogQ29ycmVjdCB0eXBvcyBpbiBjb21tZW50LiAgQnkgRnJhbmMsb2lzIFBpbmFyZC4KKy0KKy1Nb24gTm92ICA2IDAwOjI3OjAyIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtc3JjKTogRG9uJ3QgaW5zdGFsbCBsaWJpbnRsLmggYW5kIGxpYmludGwuYQorLQlpZiB3ZSB1c2UgYW4gYXZhaWxhYmxlIGdldHRleHQgaW1wbGVtZW50YXRpb24uCistCistU3VuIE5vdiAgNSAyMjowMjowOCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxpYmdldHRleHQuaDogRml4IHR5cG86IEhBVkVfQ0FUR0VUVFMgLT4gSEFWRV9DQVRHRVRTLiAgUmVwb3J0ZWQKKy0JYnkgRnJhbmMsb2lzIFBpbmFyZC4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6IFVzZSAjaWYgaW5zdGVhZCBvZiAjaWZkZWYvI2lmbmRlZi4KKy0KKy0JKiBmaW5kZG9tYWluLmM6CistCUNvbW1lbnRzIGRlc2NyaWJpbmcgd2hhdCBoYXMgdG8gYmUgZG9uZSBzaG91bGQgc3RhcnQgd2l0aCBGSVhNRS4KKy0KKy1TdW4gTm92ICA1IDE5OjM4OjAxIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKERJU1RGSUxFUyk6IFNwbGl0LiAgVXNlIERJU1RGSUxFUyB3aXRoIG5vcm1hbCBtZWFuaW5nLgorLQlESVNURklMRVMuY29tbW9uIG5hbWVzIHRoZSBmaWxlcyBjb21tb24gdG8gYm90aCBkaXN0IGdvYWxzLgorLQlESVNURklMRVMuZ2V0dGV4dCBhcmUgdGhlIGZpbGVzIG9ubHkgZGlzdHJpYnV0ZWQgaW4gR05VIGdldHRleHQuCistCistU3VuIE5vdiAgNSAxNzozMjo1NCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGRjZ2V0dGV4dC5jIChEQ0dFVFRFWFQpOiBDb3JyZWN0IHNlYXJjaGluZyBpbiBkZXJpdmVkIGxvY2FsZXMuCistCVRoaXMgd2FzIG5lY2Vzc2FyeSBzaW5jZSBhIGNoYW5nZSBpbiBfbmxfZmluZF9tc2cgc2V2ZXJhbCB3ZWVrcworLQlhZ28uICBJIHJlYWxseSBkb24ndCBrbm93IHRoaXMgaXMgc3RpbGwgbm90IGZpeGVkLgorLQorLVN1biBOb3YgIDUgMTI6NDM6MTIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsb2FkbXNnY2F0LmMgKF9ubF9sb2FkX2RvbWFpbik6IFRlc3QgZm9yIEZJTEVOQU1FID09IE5VTEwuICBUaGlzCistCW1pZ2h0IG1hcmsgYSBzcGVjaWFsIGNvbmRpdGlvbi4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKG1ha2VfZW50cnlfcmVjKTogRG9uJ3QgbWFrZSBpbGxlZ2FsIGVudHJ5IGFzIGRlY2lkZWQuCistCistCSogTWFrZWZpbGUuaW4gKGRpc3QpOiBTdXBwcmVzcyBlcnJvciBtZXNzYWdlIHdoZW4gbG4gZmFpbGVkLgorLQlHZXQgZmlsZXMgZnJvbSAkKHNyY2RpcikgZXhwbGljaXRseS4KKy0KKy0JKiBsaWJnZXR0ZXh0LmggKGdldHRleHRfY29uc3QpOiBSZW5hbWUgdG8gZ2V0dGV4dF9ub29wLgorLQorLUZyaSBOb3YgIDMgMDc6MzY6NTAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKG1ha2VfZW50cnlfcmVjKToKKy0JUHJvdGVjdCBhZ2FpbnN0IHdyb25nIGxvY2FsZSBuYW1lcyBieSB0ZXN0aW5nIG1hc2suCistCistCSogbGliZ2V0dGV4dC5oIChnZXR0ZXh0X2NvbnN0KTogQWRkIG1hY3JvIGRlZmluaXRpb24uCistCUNhcGl0YWxpemUgbWFjcm8gYXJndW1lbnRzLgorLQorLVRodSBOb3YgIDIgMjM6MTU6NTEgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKF9ubF9maW5kX2RvbWFpbik6CistCVRlc3QgZm9yIHBvaW50ZXIgIT0gTlVMTCBiZWZvcmUgYWNjZXNzaW5nIHZhbHVlLgorLQlSZXBvcnRlZCBieSBUb20gVHJvbWV5LgorLQorLQkqIGdldHRleHQuYyAoTlVMTCk6CistCURlZmluZSBhcyAodm9pZCopMCBpbnN0YWQgb2YgMC4gIFJlcG9ydGVkIGJ5IEZyYW5jLG9pcyBQaW5hcmQuCistCistTW9uIE9jdCAzMCAyMToyODo1MiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIHBvMnRibC5zZWQuaW46IFNlcmlvdXMgdHlwbyBidWcgZml4ZWQgYnkgSmltIE1leWVyaW5nLgorLQorLVNhdCBPY3QgMjggMjM6MjA6NDcgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6IERpc2FibGUgZGNnZXR0ZXh0IG9wdGltaXphdGlvbiBmb3IgU29sYXJpcyAyLjMuCistCistCSogbG9jYWxlYWxpYXMuYyAoYWxpYXNfY29tcGFyZSk6CistCVBldGVyIE1pbGxlciByZXBvcnRlZCB0aGF0IHRvbG93ZXIgaW4gc29tZSBzeXN0ZW1zIGlzCistCWV2ZW4gZHVtYmVyIHRoYW4gSSB0aG91Z2h0LiAgUHJvdGVjdCBjYWxsIGJ5IGBpc3VwcGVyJy4KKy0KKy1GcmkgT2N0IDI3IDIyOjIyOjUxIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKGxpYmRpciwgaW5jbHVkZWRpcik6IE5ldyB2YXJpYWJsZXMuCistCShpbnN0YWxsLXNyYyk6IEluc3RhbGwgbGliaW50bC5hIGFuZCBsaWJpbnRsLmggaW4gY29ycmVjdCBkaXJzLgorLQorLUZyaSBPY3QgMjcgMjI6MDc6MjkgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoU09VUkNFUyk6IEZpeCB0eXBvOiBpbnRybC5jb21wYXQuYyAtPiBpbnRsLWNvbXBhdC5jLgorLQorLQkqIHBvMnRibC5zZWQuaW46IFBhdGNoIGZvciBidWdneSBTRURzIGJ5IENocmlzdGlhbiB2b24gUm9xdWVzLgorLQorLQkqIGxvY2FsZWFsaWFzLmM6CistCUZpeCB0eXBvIGFuZCBzdXBlcmZsb3VzIHRlc3QuICBSZXBvcnRlZCBieSBDaHJpc3RpYW4gdm9uIFJvcXVlcy4KKy0KKy1GcmkgT2N0ICA2IDExOjUyOjA1IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZmluZGRvbWFpbi5jIChfbmxfZmluZF9kb21haW4pOgorLQlDb3JyZWN0IHNvbWUgcmVtYWluZGVyIGZyb20gdGhlIHByZS1DRU4gc3ludGF4LiAgTm93CistCXdlIGRvbid0IGhhdmUgYSBjb25zdGFudCBudW1iZXIgb2Ygc3VjY2Vzc29ycyBhbnltb3JlLgorLQorLVdlZCBTZXAgMjcgMjE6NDE6MTMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKTogQWRkIGxpYmludGwuaC5nbGliYy4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoZGlzdC1saWJjKTogQWRkIGdvYWwgZm9yIHBhY2tpbmcgc291cmNlcyBmb3IgZ2xpYmMuCistCShDT01TUkNTLCBDT01IRFJTKTogU3BsaXR0ZWQgdG8gc2VwYXJhdGUgc291cmNlcyBzaGFyZWQgd2l0aCBnbGliYy4KKy0KKy0JKiBsb2FkbXNnY2F0LmM6IEZvcmdldCB0byBjb250aW51ZSAjaWYgbGluZS4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jOgorLQlbX0xJQkNdOiBSZW5hbWUgc3RyY2FzZWNtcCB0byBfX3N0cmNhc2VjbXAgdG8ga2VlcCBBTlNJIEMgbmFtZQorLQlzcGFjZSBjbGVhbi4KKy0KKy0JKiBkY2dldHRleHQuYywgZmluZGRvbWFpbi5jOiBCZXR0ZXIgY29tbWVudCB0byBsYXN0IGNoYW5nZS4KKy0KKy0JKiBsb2FkbXNnY2F0LmM6CistCVtfTElCQ106IFJlbmFtZSBmc3RhdCwgb3BlbiwgY2xvc2UsIHJlYWQsIG1tYXAsIGFuZCBtdW5tYXAgdG8KKy0JX19mc3RhdCwgX19vcGVuLCBfX2Nsb3NlLCBfX3JlYWQsIF9fbW1hcCwgYW5kIF9fbXVubWFwIHJlc3AKKy0JdG8ga2VlcCBBTlNJIEMgbmFtZSBzcGFjZSBjbGVhbi4KKy0KKy0JKiBmaW5kZG9tYWluLmM6CistCVtfTElCQ106IFJlbmFtZSBzdHBjcHkgdG8gX19zdHBjcHkgdG8ga2VlcCBBTlNJIEMgbmFtZSBzcGFjZSBjbGVhbi4KKy0KKy0JKiBkY2dldHRleHQuYzoKKy0JW19MSUJDXTogUmVuYW1lIGdldGNlZCBhbmQgc3RwY3B5IHRvIF9fZ2V0Y3dkIGFuZCBfX3N0cGNweSByZXNwIHRvCistCWtlZXAgQU5TSSBDIG5hbWUgc3BhY2UgY2xlYW4uCistCistCSogbGliZ2V0dGV4dC5oOgorLQlJbmNsdWRlIHN5cy90eXBlcy5oIGZvciB0aG9zZSBvbGQgU3lzViBzeXN0ZW1zIG91dCB0aGVyZS4KKy0JUmVwb3J0ZWQgYnkgRnJhbmNlc2NvIFBvdG9ydGlgLgorLQorLQkqIGxvYWRtc2djYXQuYyAodXNlX21tYXApOiBEZWZpbmUgaWYgY29tcGlsZWQgZm9yIGdsaWJjLgorLQorLQkqIGJpbmR0ZXh0ZG9tLmM6IEluY2x1ZGUgYWxsIHRob3NlIHN0YW5kYXJkIGhlYWRlcnMKKy0JdW5jb25kaXRpb25hbGx5IGlmIF9MSUJDIGlzIGRlZmluZWQuCistCistCSogZmluZGRvbWFpbi5jOiBGaXggMiB0aW1lcyBkZWZpZW5kIC0+IGRlZmluZWQuCistCistCSogdGV4dGRvbWFpbi5jOiBJbmNsdWRlIGxpYmludGwuaCBpbnN0ZWFkIG9mIGxpYmdldHRleHQuaCB3aGVuCistCWNvbXBpbGluZyBmb3IgZ2xpYmMuICBJbmNsdWRlIGFsbCB0aG9zZSBzdGFuZGFyZCBoZWFkZXJzCistCXVuY29uZGl0aW9uYWxseSBpZiBfTElCQyBpcyBkZWZpbmVkLgorLQorLQkqIGxvY2FsZWFsaWFzLmMsIGxvYWRtc2djYXQuYzogUHJlcGFyZSB0byBiZSBjb21waWxlZCBpbiBnbGliYy4KKy0KKy0JKiBnZXR0ZXh0LmM6CistCUluY2x1ZGUgbGliaW50bC5oIGluc3RlYWQgb2YgbGliZ2V0dGV4dC5oIHdoZW4gY29tcGlsaW5nIGZvciBnbGliYy4KKy0JR2V0IE5VTEwgZnJvbSBzdGRkZWYuaCBpZiB3ZSBjb21waWxlIGZvciBnbGliYy4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEluY2x1ZGUgbGliaW50bC5oIGluc3RlYWQgb2YgbGliZ2V0dGV4dC5oIHdoZW4KKy0JY29tcGlsaW5nIGZvciBnbGliYy4gIEluY2x1ZGUgYWxsIHRob3NlIHN0YW5kYXJkIGhlYWRlcnMKKy0JdW5jb25kaXRpb25hbGx5IGlmIF9MSUJDIGlzIGRlZmluZWQuCistCistCSogZGNnZXR0ZXh0LmM6IEluY2x1ZGUgYWxsIHRob3NlIHN0YW5kYXJkIGhlYWRlcnMgdW5jb25kaXRpb25hbGx5CistCWlmIF9MSUJDIGlzIGRlZmluZWQuCistCistCSogZGdldHRleHQuYzogSWYgY29tcGlsZWQgaW4gZ2xpYmMgaW5jbHVkZSBsaWJpbnRsLmggaW5zdGVhZCBvZgorLQlsaWJnZXR0ZXh0LmguCistCShsb2NhbGUuaCk6IERvbid0IHJlbHkgb24gSEFWRV9MT0NBTEVfSCB3aGVuIGNvbXBpbGluZyBmb3IgZ2xpYmMuCistCistCSogZGNnZXR0ZXh0LmM6IElmIGNvbXBpbGVkIGluIGdsaWJjIGluY2x1ZGUgbGliaW50bC5oIGluc3RlYWQgb2YKKy0JbGliZ2V0dGV4dC5oLgorLQkoZ2V0Y3dkKTogRG9uJ3QgcmVseSBvbiBIQVZFX0dFVENXRCB3aGVuIGNvbXBpbGluZyBmb3IgZ2xpYmMuCistCistCSogYmluZHRleHRkb20uYzoKKy0JSWYgY29tcGlsZWQgaW4gZ2xpYmMgaW5jbHVkZSBsaWJpbnRsLmggaW5zdGVhZCBvZiBsaWJnZXR0ZXh0LmguCistCistTW9uIFNlcCAyNSAyMjoyMzowNiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvY2FsZWFsaWFzLmMgKF9ubF9leHBhbmRfYWxpYXMpOiBEb24ndCBjYWxsIGJzZWFyY2ggaWYgTk1BUCA8PSAwLgorLQlSZXBvcnRlZCBieSBNYXJjdXMgRGFuaWVscy4KKy0KKy0JKiBjYXQtY29tcGF0LmMgKGJpbmR0ZXh0ZG9tYWluKToKKy0JU3RyaW5nIHVzZWQgaW4gcHV0ZW52IG11c3Qgbm90IGJlIHJlY3ljbGVkLgorLQlSZXBvcnRlZCBieSBNYXJjdXMgRGFuaWVscy4KKy0KKy0JKiBsaWJnZXR0ZXh0LmggKF9fVVNFX0dOVV9HRVRURVhUKToKKy0JQWRkaXRpb25hbCBzeW1ib2wgdG8gc2lnbmFsIHRoYXQgd2UgdXNlIEdOVSBnZXR0ZXh0CistCWxpYnJhcnkuCistCistCSogY2F0LWNvbXBhdC5jIChiaW5kdGV4dGRvbWFpbik6CistCUZpeCBidWcgd2l0aCB0aGUgc3RyYW5nZSBzdHBjcHkgcmVwbGFjZW1lbnQuCistCVJlcG9ydGVkIGJ5IE5lbHNvbiBCZWViZS4KKy0KKy1TYXQgU2VwIDIzIDA4OjIzOjUxIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogY2F0LWNvbXBhdC5jOiBJbmNsdWRlIDxzdHJpbmcuaD4gZm9yIHN0cGNweSBwcm90b3R5cGUuCistCistCSogbG9jYWxlYWxpYXMuYyAocmVhZF9hbGlhc19maWxlKToKKy0JV2hpbGUgZXhwYW5kIHN0cmR1cCBjb2RlIHRlbXBvcmFyeSB2YXJpYWJsZSBgY3AnIGhpZGVkCistCWhpZ2hlciBsZXZlbCB2YXJpYWJsZSB3aXRoIHNhbWUgbmFtZS4gIFJlbmFtZSB0byBgdHAnLgorLQorLQkqIHRleHRkb21haW4uYyAodGV4dGRvbWFpbik6CistCUF2b2lkIHdhcm5pbmcgYnkgdXNpbmcgdGVtcG9yYXJ5IHZhcmlhYmxlIGluIHN0cmR1cCBjb2RlLgorLQorLQkqIGZpbmRkb21haW4uYyAoX25sX2ZpbmRfZG9tYWluKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgYXBwbGljYXRpb24nLgorLQorLVRodSBTZXAgMjEgMTU6NTE6NDQgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChhbGlhc19jb21wYXJlKToKKy0JVXNlIHN0cmNhc2VjbXAoKSBvbmx5IGlmIGF2YWlsYWJsZS4gIEVsc2UgdXNlCistCWltcGxlbWVudGF0aW9uIGluIHBsYWNlLgorLQorLQkqIGludGwtY29tcGF0LmM6CistCVdyYXBwZXIgZnVuY3Rpb25zIG5vdyBjYWxsICpfXyBmdW5jdGlvbnMgaW5zdGVhZCBvZiBfXyouCistCistCSogbGliZ2V0dGV4dC5oOiBEZWNsYXJlIHByb3RvdHlwZXMgZm9yICpfXyBmdW5jdGlvbnMgaW5zdGVhZCBmb3IgX18qLgorLQorLQkqIGNhdC1jb21wYXQuYywgbG9hZG1zZ2NhdC5jOgorLQlEb24ndCB1c2UgeG1hbGxvYywgeHN0cmR1cCwgYW5kIHN0cGNweS4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQKKy0Jb2YgdGhlIHN0YW5kYXJkIGxpYmMgYW5kIHNvIHByZXZlbnQgbGliaW50bC5hIGZyb20gYmVpbmcgdXNlZAorLQlzdGFuZGFsb25lLgorLQorLQkqIGJpbmR0ZXh0ZG9tLmM6CistCURvbid0IHVzZSB4bWFsbG9jLCB4c3RyZHVwLCBhbmQgc3RwY3B5LiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgcGFydAorLQlvZiB0aGUgc3RhbmRhcmQgbGliYyBhbmQgc28gcHJldmVudCBsaWJpbnRsLmEgZnJvbSBiZWluZyB1c2VkCistCXN0YW5kYWxvbmUuCistCVJlbmFtZSB0byBiaW5kdGV4dGRvbWFpbl9fIGlmIG5vdCB1c2VkIGluIEdOVSBDIExpYnJhcnkuCistCistCSogZGdldHRleHQuYzoKKy0JUmVuYW1lIGZ1bmN0aW9uIHRvIGRnZXR0ZXh0X18gaWYgbm90IHVzZWQgaW4gR05VIEMgTGlicmFyeS4KKy0KKy0JKiBnZXR0ZXh0LmM6CistCURvbid0IHVzZSB4bWFsbG9jLCB4c3RyZHVwLCBhbmQgc3RwY3B5LiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgcGFydAorLQlvZiB0aGUgc3RhbmRhcmQgbGliYyBhbmQgc28gcHJldmVudCBsaWJpbnRsLmEgZnJvbSBiZWluZyB1c2VkCistCXN0YW5kYWxvbmUuCistCUZ1bmN0aW9ucyBub3cgY2FsbGVkIGdldHRleHRfXyBpZiBub3QgdXNlZCBpbiBHTlUgQyBMaWJyYXJ5LgorLQorLQkqIGRjZ2V0dGV4dC5jLCBsb2NhbGVhbGlhcy5jLCB0ZXh0ZG9tYWluLmMsIGZpbmRkb21haW4uYzoKKy0JRG9uJ3QgdXNlIHhtYWxsb2MsIHhzdHJkdXAsIGFuZCBzdHBjcHkuICBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwYXJ0CistCW9mIHRoZSBzdGFuZGFyZCBsaWJjIGFuZCBzbyBwcmV2ZW50IGxpYmludGwuYSBmcm9tIGJlaW5nIHVzZWQKKy0Jc3RhbmRhbG9uZS4KKy0KKy1TdW4gU2VwIDE3IDIzOjE0OjQ5IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZmluZGRvbWFpbi5jOiBDb3JyZWN0IHNvbWUgYnVncyBpbiBoYW5kbGluZyBvZiBDRU4gc3RhbmRhcmQKKy0gCWxvY2FsZSBkZWZpbml0aW9ucy4KKy0KKy1UaHUgU2VwICA3IDAxOjQ5OjI4IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZmluZGRvbWFpbi5jOiBJbXBsZW1lbnQgQ0VOIHN5bnRheC4KKy0KKy0JKiBnZXR0ZXh0UC5oIChsb2FkZWRfZG9tYWluKTogRXh0ZW5kIG51bWJlciBvZiBzdWNjZXNzb3JzIHRvIDMxLgorLQorLVNhdCBBdWcgMTkgMTk6MjU6MjkgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoYWxpYXNwYXRoKTogUmVtb3ZlIHBhdGggdG8gWDExIGxvY2FsZSBkaXIuCistCistCSogTWFrZWZpbGUuaW46IE1ha2UgaW5zdGFsbC1zcmMgZGVwZW5kIG9uIGluc3RhbGwuICBUaGlzIGhlbHBzCistIAlnZXR0ZXh0IHRvIGluc3RhbGwgdGhlIHNvdXJjZXMgYW5kIG90aGVyIHBhY2thZ2VzIGNhbiB1c2UgdGhlCistIAlpbnN0YWxsIGdvYWwuCistCistU2F0IEF1ZyAxOSAxNToxOTozMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluICh1bmluc3RhbGwpOiBSZW1vdmUgc3R1ZmYgaW5zdGFsbGVkIGJ5IGluc3RhbGwtc3JjLgorLQorLVR1ZSBBdWcgMTUgMTM6MTM6NTMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBWRVJTSU9OLmluOiBJbml0aWFsIHJldmlzaW9uLgorLQorLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOgorLQlBZGQgVkVSU0lPTiBmaWxlLiAgVGhpcyBpcyBub3QgbmVjZXNzYXJ5IGZvciBnZXR0ZXh0LCBidXQKKy0JZm9yIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoaXMgbGlicmFyeS4KKy0KKy1UdWUgQXVnIDE1IDA2OjE2OjQ0IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZ2V0dGV4dFAuaCAoX25sX2ZpbmRfZG9tYWluKToKKy0JTmV3IHByb3RvdHlwZSBhZnRlciBjaGFuZ2luZyBzZWFyY2ggc3RyYXRlZ3kuCistCistCSogZmluZGRvbWFpbi5jIChfbmxfZmluZF9kb21haW4pOgorLQlXZSBub3cgdHJ5IG9ubHkgdG8gZmluZCBhIHNwZWNpZmllZCBjYXRhbG9nLiAgRmFsbCBiYWNrIHRvIG90aGVyCistCWNhdGFsb2dzIGxpc3RlZCBpbiB0aGUgbG9jYWxlIGxpc3QgaXMgbm93IGRvbmUgaW4gX19kY2dldHRleHQuCistCistCSogZGNnZXR0ZXh0LmMgKF9fZGNnZXR0ZXh0KToKKy0JTm93IHdlIHByb3ZpZGUgbWVzc2FnZSBmYWxsIGJhY2sgZXZlbiB0byBkaWZmZXJlbnQgbGFuZ3VhZ2VzLgorLQlJLmUuIGlmIGEgbWVzc2FnZSBpcyBub3QgYXZhaWxhYmxlIGluIG9uZSBsYW5ndWFnZSBhbGwgdGhlIG90aGVyCistIAlpbiB0aGUgbG9jYWxlIGxpc3QgYSB0cmllZC4gIEZvcm1lcmx5IGZhbGwgYmFjayB3YXMgb25seSBwb3NzaWJsZQorLSAJd2l0aGluIG9uZSBsYW5ndWFnZS4gIEltcGxlbWVudGVkIGJ5IG1vdmluZyBvbmUgbG9vcCBmcm9tCistIAlfbmxfZmluZF9kb21haW4gdG8gaGVyZS4KKy0KKy1Nb24gQXVnIDE0IDIzOjQ1OjUwIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKGdldHRleHRzcmNkaXIpOgorLQlEaXJlY3Rvcnkgd2hlcmUgc291cmNlIG9mIEdOVSBnZXR0ZXh0IGxpYnJhcnkgYXJlIG1hZGUKKy0JYXZhaWxhYmxlLgorLQkoSU5TVEFMTCwgSU5TVEFMTF9EQVRBKTogUHJvZ3JhbXMgdXNlZCBmb3IgaW5zdGFsbGluZyBzb3VyY2VzLgorLQkoZ2V0dGV4dC1zcmMpOiBOZXcuICBSdWxlIHRvIGluc3RhbGwgR05VIGdldHRleHQgc291cmNlcyBmb3IgdXNlIGluCistCWdldHRleHRpemUgc2hlbGwgc2NyaXB0LgorLQorLVN1biBBdWcgMTMgMTQ6NDA6NDggMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsb2FkbXNnY2F0LmMgKF9ubF9sb2FkX2RvbWFpbik6CistCVVzZSBtbWFwIGZvciBsb2FkaW5nIG9ubHkgd2hlbiBtdW5tYXAgZnVuY3Rpb24gaXMKKy0JYWxzbyBhdmFpbGFibGUuCistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBEZXBlbmQgb24gYGFsbCcgZ29hbC4KKy0KKy1XZWQgQXVnICA5IDExOjA0OjMzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbG9jYWxlYWxpYXMuYyAocmVhZF9hbGlhc19maWxlKToKKy0JRG8gbm90IG92ZXJ3cml0ZSAnXG4nIHdoZW4gdGVybWluYXRpbmcgYWxpYXMgdmFsdWUgc3RyaW5nLgorLQorLQkqIGxvY2FsZWFsaWFzLmMgKHJlYWRfYWxpYXNfZmlsZSk6CistCUhhbmRsZSBsb25nIGxpbmVzLiAgSWdub3JlIHRoZSByZXN0IG5vdCBmaXR0aW5nIGluCistCXRoZSBidWZmZXIgYWZ0ZXIgdGhlIGluaXRpYWwgYGZnZXRzJyBjYWxsLgorLQorLVdlZCBBdWcgIDkgMDA6NTQ6MjkgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBnZXR0ZXh0UC5oIChfbmxfbG9hZF9kb21haW4pOgorLQlBZGQgcHJvdG90eXBlLCByZXBsYWNpbmcgcHJvdG90eXBlIGZvciBfbmxfbG9hZF9tc2dfY2F0LgorLQorLQkqIGZpbmRkb21haW4uYyAoX25sX2ZpbmRfZG9tYWluKToKKy0JUmVtb3ZlIHVubmVlZGVkIHZhcmlhYmxlIGZpbGVuYW1lIGFuZCBmaWxlbmFtZV9sZW4uCistCShleHBhbmRfYWxpYXMpOiBSZW1vdmUgcHJvdG90eXBlIGJlY2F1c2UgZnVuY3Rpb25zIGRvZXMgbm90CistIAlleGlzdCBhbnltb3JlLgorLQorLQkqIGxvY2FsZWFsaWFzLmMgKHJlYWRfYWxpYXNfZmlsZSk6CistCUNoYW5nZSB0eXBlIG9mIGZuYW1lX2xlbiBwYXJhbWV0ZXIgdG8gaW50LgorLQkoeG1hbGxvYyk6IEFkZCBwcm90b3R5cGUuCistCistCSogbG9hZG1zZ2NhdC5jOiBCZXR0ZXIgcHJvdG90eXBlcyBmb3IgeG1hbGxvYy4KKy0KKy1UdWUgQXVnICA4IDIyOjMwOjM5IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZmluZGRvbWFpbi5jIChfbmxfZmluZF9kb21haW4pOgorLQlBbGxvdyBhbGlhcyBuYW1lIHRvIGJlIGNvbnN0cnVjdGVkIGZyb20gdGhlIGZvdXIgY29tcG9uZW50cy4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoYWxpYXNwYXRoKTogTmV3IHZhcmlhYmxlLiAgU2V0IHRvIHByZWxpbWluYXJ5IHZhbHVlLgorLQkoU09VUkNFUyk6IEFkZCBsb2NhbGVhbGlhcy5jLgorLQkoT0JKRUNUUyk6IEFkZCBsb2NhbGVhbGlhcy5vLgorLQorLQkqIGdldHRleHRQLmg6IEFkZCBwcm90b3R5cGUgZm9yIF9ubF9leHBhbmRfYWxpYXMuCistCistCSogZmluZGRvbWFpbi5jOiBBbGlhc2luZyBoYW5kbGVkIGluIGludGwvbG9jYWxlYWxpYXMuYy4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jOiBBbGlhc2luZyBmb3IgbG9jYWxlIG5hbWVzLgorLQorLQkqIGJpbmR0ZXh0ZG9tLmM6IEJldHRlciBwcm90b3R5cGVzIGZvciB4bWFsbG9jIGFuZCB4c3RyZHVwLgorLQorLU1vbiBBdWcgIDcgMjM6NDc6NDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKTogZ2V0dGV4dC5wZXJsIGlzIG5vdyBmb3VuZCBpbiBtaXNjLy4KKy0KKy0JKiBjYXQtY29tcGF0LmMgKGJpbmR0ZXh0ZG9tYWluKToKKy0JQ29ycmVjdCBpbXBsZW1lbnRhdGlvbi4gIGRpcm5hbWUgcGFyYW1ldGVyIHdhcyBub3QgdXNlZC4KKy0JUmVwb3J0ZWQgYnkgTWFyY3VzIERhbmllbHMuCistCistCSogZ2V0dGV4dFAuaCAobG9hZGVkX2RvbWFpbik6CistCU5ldyBmaWVsZHMgYHN1Y2Nlc3NvcicgYW5kIGBkZWNpZGVkJyBmb3Igb28sIGxhenkKKy0JbWVzc2FnZSBoYW5kbGluZyBpbXBsZW1lbnRhdGlvbi4KKy0KKy0JKiBkY2dldHRleHQuYzoKKy0JQWRvcHQgZm9yIG9vLCBsYXp5IG1lc3NhZ2UgaGFuZGxpaW5nLgorLSAgCU5vdyB3ZSBjYW4gaW5oZXJpdCB0cmFuc2xhdGlvbnMgZnJvbSBsZXNzIHNwZWNpZmljIGxvY2FsZXMuCistCShmaW5kX21zZyk6IE5ldyBmdW5jdGlvbi4KKy0KKy0JKiBsb2FkbXNnY2F0LmMsIGZpbmRkb21haW4uYzoKKy0JQ29tcGxldGUgcmV3cml0ZS4gIEltcGxlbWVudCBvbywgbGF6eSBtZXNzYWdlIGhhbmRsaW5nIDotKS4KKy0gIAlXZSBub3cgaGF2ZSBhbiBhZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlIGBMQU5HVUFHRScgd2l0aAorLSAJYSBoaWdoZXIgcHJpb3JpdHkgdGhhbiBMQ19BTEwgZm9yIHRoZSBMQ19NRVNTQUdFIGxvY2FsZS4KKy0gIAlIZXJlIHdlIGNhbiBzZXQgYSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBzcGVjaWZpY2F0aW9ucyBlYWNoCistIAlvZiB0aGUgZm9ybSBgbGFuZ3VhZ2VbX3RlcnJpdG9yeVsuY29kZXNldF1dW0Btb2RpZmllcl0nLgorLQorLVNhdCBBdWcgIDUgMDk6NTU6NDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKHVuaXN0ZC5oKToKKy0JSW5jbHVkZSB0byBnZXQgX1BDX1BBVEhfTUFYIGRlZmluZWQgb24gc3lzdGVtIGhhdmluZyBpdC4KKy0KKy1GcmkgQXVnICA0IDIyOjQyOjAwIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZmluZGRvbWFpbi5jIChzdHBjcHkpOiBJbmNsdWRlIHByb3RvdHlwZS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoZGlzdCk6IFJlbW92ZSBgY29weWluZyBpbnN0ZWFkJyBtZXNzYWdlLgorLQorLVdlZCBBdWcgIDIgMTg6NTI6MDMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoSUQsIFRBR1MpOiBEbyBub3QgdXNlICReLgorLQorLVR1ZSBBdWcgIDEgMjA6MDc6MTEgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoVEFHUywgSUQpOiBVc2UgJF4gYXMgY29tbWFuZCBhcmd1bWVudC4KKy0JKFRBR1MpOiBHaXZlIGV0YWdzIC1vIG9wdGlvbiB0IHdyaXRlIHRvIGN1cnJlbnQgZGlyZWN0b3J5LAorLSAJbm90ICQoc3JjZGlyKS4KKy0JKElEKTogVXNlICQoc3JjZGlyKSBpbnN0ZWFkIG9zICQodG9wX3NyY2Rpcikvc3JjLgorLQkoZGlzdGNsZWFuKTogUmVtb3ZlIElELgorLQorLVN1biBKdWwgMzAgMTE6NTE6NDYgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoZ251bG9jYWxlZGlyKToKKy0JTmV3IHZhcmlhYmxlLCBhbHdheXMgdXNpbmcgc2hhcmUvIGZvciBkYXRhIGRpcmVjdG9yeS4KKy0JKERFRlMpOiBBZGQgR05VTE9DQUxFRElSLCB1c2VkIGluIGZpbmRkb21haW4uYy4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKF9ubF9kZWZhdWx0X2Rpcm5hbWUpOgorLQlTZXQgdG8gR05VTE9DQUxFRElSLCBiZWNhdXNlIGl0IGFsd2F5cyBoYXMgdG8gcG9pbnQKKy0JdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBHTlUgZ2V0dGV4dCBMaWJyYXJ5IHdyaXRlcyBpdCB0by4KKy0KKy0JKiBpbnRsLWNvbXBhdC5jICh0ZXh0ZG9tYWluLCBiaW5kdGV4dGRvbWFpbik6CistCVVuZGVmaW5lIG1hY3JvcyBiZWZvcmUgZnVuY3Rpb24gZGVmaW5pdGlvbi4KKy0KKy1TYXQgSnVsIDIyIDAxOjEwOjAyIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbGliZ2V0dGV4dC5oIChfTElCSU5UTF9IKToKKy0JUHJvdGVjdCBkZWZpbml0aW9uIGluIGNhc2Ugd2hlcmUgdGhpcyBmaWxlIGlzIGluY2x1ZGVkIGFzCistCWxpYmdldHRleHQuaCBvbiBTb2xhcmlzIG1hY2hpbmVzLiAgQWRkIGNvbW1lbnQgYWJvdXQgdGhpcy4KKy0KKy1XZWQgSnVsIDE5IDAyOjM2OjQyIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogaW50bC1jb21wYXQuYyAodGV4dGRvbWFpbik6IENvcnJlY3QgdHlwby4KKy0KKy1XZWQgSnVsIDE5IDAxOjUxOjM1IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZGNnZXR0ZXh0LmMgKGRjZ2V0dGV4dCk6IEZ1bmN0aW9uIG5vdyBjYWxsZWQgX19kY2dldHRleHQuCistCistCSogZGdldHRleHQuYyAoZGdldHRleHQpOiBOb3cgY2FsbGVkIF9fZGdldHRleHQgYW5kIGNhbGxzCistIAlfX2RjZ2V0dGV4dC4KKy0KKy0JKiBnZXR0ZXh0LmMgKGdldHRleHQpOgorLQlGdW5jdGlvbiBub3cgY2FsbGVkIF9fZ2V0dGV4dCBhbmQgY2FsbHMgX19kZ2V0dGV4dC4KKy0KKy0JKiB0ZXh0ZG9tYWluLmMgKHRleHRkb21haW4pOiBGdW5jdGlvbiBub3cgY2FsbGVkIF9fdGV4dGRvbWFpbi4KKy0KKy0JKiBiaW5kdGV4dGRvbS5jIChiaW5kdGV4dGRvbWFpbik6IEZ1bmN0aW9uIG5vdyBjYWxsZWQKKy0gCV9fYmluZHRleHRkb21haW4uCistCistCSogaW50bC1jb21wYXQuYzogSW5pdGlhbCByZXZpc2lvbi4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoU09VUkNFUyk6IEFkZCBpbnRsLWNvbXBhdC5jLgorLQkoT0JKRUNUUyk6IFdlIGFsd2F5cyBjb21waWxlIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGZ1bmN0aW9ucy4KKy0gIAlPQkpFQ1RTIGNvbnRhaW5zIGFsbCBvYmplY3RzIGJ1dCBjYXQtY29tcGF0Lm8sIC4uL3BvL2NhdC1pZi10YmwubywKKy0gCWFuZCBpbnRsLWNvbXBhdC5vLgorLSAgCShHRVRUT0JKUyk6IENvbnRhaW5zIG5vdyBvbmx5IGludGwtY29tcGF0Lm8uCistCistCSogbGliZ2V0dGV4dC5oOgorLQlSZS1pbmNsdWRlIHByb3RlY3Rpb24gbWF0Y2hlcyBkdWFsaXN0aWMgY2hhcmFjdGVyIG9mIGxpYmdldHRleHQuaC4KKy0JRm9yIGFsbCBmdW5jdGlvbnMgaW4gR05VIGdldHRleHQgbGlicmFyeSBkZWZpbmUgX18gY291bnRlciBwYXJ0LgorLQorLQkqIGZpbmRkb21haW4uYyAoc3RyY2hyKTogRGVmaW5lIGFzIGluZGV4IGlmIG5vdCBmb3VuZCBpbiBDIGxpYnJhcnkuCistCShfbmxfZmluZF9kb21haW4pOiBGb3IgcmVsYXRpdmUgcGF0aHMgcGFzdGUgLyBpbiBiZXR3ZWVuLgorLQorLVR1ZSBKdWwgMTggMTY6Mzc6NDUgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsb2FkbXNnY2F0LmMsIGZpbmRkb21haW4uYzogQWRkIGluY2x1c2lvbiBvZiBzeXMvdHlwZXMuaC4KKy0KKy0JKiB4b3Blbi1tc2cuc2VkOiBGaXggYnVnIHdpdGggYG1zZ3N0ciAiIicgbGluZXMuCistCUEgbGl0dGxlIGJpdCBiZXR0ZXIgY29tbWVudHMuCistCistVHVlIEp1bCAxOCAwMToxODoyNyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluOgorLQlwby1tb2RlLmVsLCBtYWtlbGlua3MsIGNvbWJpbmUtc2ggYXJlIG5vdyBmb3VuZCBpbiAuLi9taXNjLgorLQorLQkqIHBvLW1vZGUuZWwsIG1ha2VsaW5rcywgY29tYmluZS1zaCwgZWxpc3AtY29tcDoKKy0JTW92ZWQgdG8gLi4vbWlzYy8uCistCistCSogbGliZ2V0dGV4dC5oLCBnZXR0ZXh0UC5oLCBnZXR0ZXh0Lmg6IFVuaWZvcm0gdGVzdCBmb3IgX19TVERDX18uCistCistU3VuIEp1bCAxNiAyMjozMzowMiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChJTlNUQUxMLCBJTlNUQUxMX0RBVEEpOiBOZXcgdmFyaWFibGVzLgorLQkoaW5zdGFsbC1kYXRhLCB1bmluc3RhbGwpOiBJbnN0YWxsL3VuaW5zdGFsbCAuZWxjIGZpbGUuCistCistCSogcG8tbW9kZS5lbCAoSW5zdGFsbGF0aW9uIGNvbW1lbnQpOgorLQlBZGQgLnBveCBhcyBwb3NzaWJsZSBleHRlbnNpb24gb2YgLnBvIGZpbGVzLgorLQorLVN1biBKdWwgMTYgMTM6MjM6MjcgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBlbGlzcC1jb21wOiBDb21wbGV0ZSBuZXcgdmVyc2lvbiBieSBGcmFuYyxvaXM6IFRoaXMgZG9lcyBub3QKKy0gCWZhaWwgd2hlbiBub3QgY29tcGlsaW5nIGluIHRoZSBzb3VyY2UgZGlyZWN0b3J5LgorLQorLVN1biBKdWwgMTYgMDA6MTI6MTcgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoLi4vcG8vY2F0LWlkLXRibC5vKToKKy0JVXNlICQoTUFLRSkgaW5zdGVhZCBvZiBtYWtlIGZvciByZWN1cnNpdmUgbWFrZS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoLmVsLmVsYyk6IFVzZSAkKFNIRUxMKSBpbnN0ZWFkIG9mIC9iaW4vc2guCistCShpbnN0YWxsLWV4ZWMpOiBBZGQgbWlzc2luZyBkdW1teSBnb2FsLgorLQkoaW5zdGFsbC1kYXRhLCB1bmluc3RhbGwpOiBAIGluIG11bHRpLWxpbmUgc2hlbGwgY29tbWFuZCBhdAorLSAJYmVnaW5uaW5nLCBub3QgaW4gZnJvbnQgb2YgZWNoby4gIFJlcG9ydGVkIGJ5IEVyaWMgQmFja3VzLgorLQorLVNhdCBKdWwgMTUgMDA6MjE6MjggMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKToKKy0JUmVuYW1lIGxpYmdldHRleHQucGVybCB0byBnZXR0ZXh0LnBlcmwgdG8gZml0IGluIDE0IGNoYXJzCistCWZpbGUgc3lzdGVtcy4KKy0KKy0JKiBnZXR0ZXh0LnBlcmw6CistIAlSZW5hbWUgdG8gZ2V0dGV4dC5wZXJsIHRvIGZpdCBpbiAxNCBjaGFycyBmaWxlIHN5c3RlbXMuCistCistVGh1IEp1bCAxMyAyMzoxNzoyMCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGNhdC1jb21wYXQuYzogSWYgIVNURENfSEVBREVSUyB0cnkgdG8gaW5jbHVkZSBtYWxsb2MuaC4KKy0KKy1UaHUgSnVsIDEzIDIwOjU1OjAyIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogcG8ydGJsLnNlZC5pbjogUHJldHR5IHByaW50aW5nLgorLQorLQkqIGxpbnV4LW1zZy5zZWQsIHhvcGVuLW1zZy5zZWQ6CistCUNvcnJlY3QgYnVncyB3aXRoIGhhbmRsaW5nIHN1YnN0aXR1dGUgZmxhZ3MgaW4gYnJhbmNoZXMuCistCistCSogaGFzaC1zdHJpbmcuaCAoaGFzaF9zdHJpbmcpOgorLQlPbGQgSyZSIGNvbXBpbGVycyBkb24ndCB1bmRlciBzdGFuZCBgdW5zaWduZWQgY2hhcicuCistCistCSogZ2V0dGV4dC5oIChubHNfdWludDMyKToKKy0JU29tZSBvbGQgSyZSIGNvbXBpbGVycyAoZWcgSFApIGRvbid0IHVuZGVyc3RhbmQgYHVuc2lnbmVkIGludCcuCistCistCSogY2F0LWNvbXBhdC5jIChtc2dfdG9fY2F0X2lkKTogRGUtQU5TSS1meSBwcm90b3R5cGVzLgorLQorLVRodSBKdWwgMTMgMDE6MzQ6MzMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoRUxDRklMRVMpOiBOZXcgdmFyaWFibGUuCistCShESVNURklMRVMpOiBBZGQgZWxpc3AtY29tcC4KKy0JQWRkIGltcGxpY2l0IHJ1bGUgZm9yIC5lbCAtPiAuZWxjIGNvbXBpbGF0aW9uLgorLQkoaW5zdGFsbC1kYXRhKTogaW5zdGFsbCAkRUxDRklMRVMKKy0JKGNsZWFuKTogcmVuYW1lZCBwby10by10YmwgYW5kIHBvLXRvLW1zZyB0byBwbzJ0YmwgYW5kIHBvMm1zZyByZXNwLgorLQorLQkqIGVsaXNwLWNvbXA6IEluaXRpYWwgcmV2aXNpb24KKy0KKy1XZWQgSnVsIDEyIDE2OjE0OjUyIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW46CistCWNhdC1pZC10YmwuYyBpcyBub3cgZm91bmQgaW4gcG8vLiAgVGhpcyBlbmFibGVzIHVzIHRvIHVzZSBhbiBpZGVudGljYWwKKy0JaW50bC8gZGlyZWN0b3J5IGluIGFsbCBwYWNrYWdlcy4KKy0KKy0JKiBkY2dldHRleHQuYyAoZGNnZXR0ZXh0KTogaGFzaGluZyBkb2VzIG5vdCB3b3JrIGZvciB0YWJsZSBzaXplIDw9IDIuCistCistCSogdGV4dGRvbWFpbi5jOiBmaXggdHlwbyAoI2lmIGRlZiAtPiAjaWYgZGVmaW5lZCkKKy0KKy1UdWUgSnVsIDExIDE4OjQ0OjQzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKHN0YW1wLWNhdC1pZCk6IHVzZSB0b3Bfc3JjZGlyIHRvIGFkZHJlc3Mgc291cmNlIGZpbGVzCistCShESVNURklMRVMsZGlzdGNsZWFuKTogbW92ZSB0dXBkYXRlLnBlcmwgdG8gc3JjLworLQorLQkqIHBvLXRvLXRibC5zZWQuaW46CistCWFkZCBhZGRpdGlvbmFsIGp1bXAgdG8gY2xlYXIgY2hhbmdlIGZsYWcgdG8gcmVjb2duaXplIG11bHRpbGluZSBzdHJpbmdzCistCistVHVlIEp1bCAxMSAwMTozMjo1MCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIHRleHRkb21haW4uYzogUHJvdGVjdCBpbmNsdXNpb24gb2Ygc3RkbGliLmggYW5kIHN0cmluZy5oLgorLQorLQkqIGxvYWRtc2djYXQuYzogUHJvdGVjdCBpbmNsdXNpb24gb2Ygc3RkbGliLmguCistCistCSogbGliZ2V0dGV4dC5oOiBQcm90ZWN0IGluY2x1c2lvbiBvZiBsb2NhbGUuaC4KKy0JQWxsb3cgdXNlIGluIEMrKyBwcm9ncmFtcy4KKy0JRGVmaW5lIE5VTEwgaXMgbm90IGhhcHBlbmVkIGFscmVhZHkuCistCistCSogTWFrZWZpbGUuaW4gKERJU1RGSUxFUyk6IHNoaXAgcG8tdG8tdGJsLnNlZC5pbiBpbnN0ZWFkIG9mCistCXBvLXRvLXRibC5zZWQuCistCShkaXN0Y2xlYW4pOiByZW1vdmUgcG8tdG8tdGJsLnNlZCBhbmQgdHVwZGF0ZS5wZXJsLgorLQorLQkqIHR1cGRhdGUucGVybC5pbjogU3Vic3RpdHV0ZSBQZXJsIHBhdGggZXZlbiBpbiBleGVjIGxpbmUuCistCURvbid0IGluY2x1ZGUgZW50cmllcyB3aXRob3V0IHRyYW5zbGF0aW9uIGZyb20gb2xkIC5wbyBmaWxlLgorLQorLVR1ZSBKdWwgIDQgMDA6NDE6NTEgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiB0dXBkYXRlLnBlcmwuaW46IHVzZSAiVXBkYXRlZDogIiBpbiBtc2dpZCAiIi4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IEZpeCB0eXBvIChMT0NBTERJUiAtPiBMT0NBTEVESVIpLgorLSAJRGVmaW5lIGdldGVudiBpZiAhX19TVERDX18uCistCistCSogYmluZHRleHRkb20uYzogUHJvdGVjdCBzdGRsaWIuaCBhbmQgc3RyaW5nLmggaW5jbHVzaW9uLgorLSAJRGVmaW5lIGZyZWUgaWYgIV9fU1REQ19fLgorLQorLQkqIGZpbmRkb21haW4uYzogQ2hhbmdlIERFRl9NU0dfRE9NX0RJUiB0byBMT0NBTEVESVIuCistIAlEZWZpbmUgZnJlZSBpZiAhX19TVERDX18uCistCistCSogY2F0LWNvbXBhdC5jOiBDaGFuZ2UgREVGX01TR19ET01fRElSIHRvIExPQ0FMRURJUi4KKy0KKy1Nb24gSnVsICAzIDIzOjU2OjMwIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW46IFVzZSBMT0NBTEVESVIgaW5zdGVhZCBvZiBERUZfTVNHX0RPTV9ESVIuCistCVJlbW92ZSB1bm5lZWRlZCAkKHNyY2RpcikgZnJvbSBNYWtlZmlsZS5pbiBkZXBlbmRlbmN5LgorLQorLQkqIG1ha2VsaW5rczogQWRkIGNvcHlyaWdodCBhbmQgc2hvcnQgZGVzY3JpcHRpb24uCistCistCSogcG8tbW9kZS5lbDogTGFzdCB2ZXJzaW9uIGZvciAwLjcuCistCistCSogdHVwZGF0ZS5wZXJsLmluOiBGaXggZGllIG1lc3NhZ2UuCistCistCSogZGNnZXR0ZXh0LmM6IFByb3RlY3QgaW5jbHVkZSBvZiBzdHJpbmcuaC4KKy0KKy0JKiBnZXR0ZXh0LmM6IFByb3RlY3QgaW5jbHVkZSBvZiBzdGRsaWIuaCBhbmQgZnVydGhlciB0cmllcyB0byBnZXQgTlVMTC4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IFNvbWUgY29ycmVjdGlvbnMgaW4gaW5jbHVkZXMuCistCistCSogTWFrZWZpbGUuaW4gKElOQ0xVREVTKTogUHJ1bmUgbGlzdCBjb3JyZWN0IHBhdGggdG8gTWFrZWZpbGUuaW4uCistCistCSogcG8tdG8tdGJsLnNlZDogQWRvcHQgZm9yIG5ldyAucG8gZmlsZSBmb3JtYXQuCistCistCSogbGludXgtbXNnLnNlZCwgeG9wZW4tbXNnLnNlZDogQWRvcHQgZm9yIG5ldyAucG8gZmlsZSBmb3JtYXQuCistCistU3VuIEp1bCAgMiAyMzo1NTowMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIHR1cGRhdGUucGVybC5pbjogQ29tcGxldGUgcmV3cml0ZSBmb3IgbmV3IC5wbyBmaWxlIGZvcm1hdC4KKysyMDA0LTAxLTI5ICBHTlUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKyAKKy1TdW4gSnVsICAyIDAyOjA2OjUwIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CisrCSogVmVyc2lvbiAwLjE0LjEgcmVsZWFzZWQuCisgCistCSogRmlyc3Qgb2ZmaWNpYWwgcmVsZWFzZS4gIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGFsbCB0aGUgY29kZQorLQluZWVkZWQgdG8gaW50ZXJuYXRpb25hbGl6ZSBvd24gcGFja2FnZXMuICBJdCBwcm92aWRlcyBmdW5jdGlvbnMKKy0Jd2hpY2ggYWxsb3cgdG8gdXNlIHRoZSBYL09wZW4gY2F0Z2V0cyBmdW5jdGlvbiB3aXRoIGFuIGludGVyZmFjZQorLQlsaWtlIHRoZSBVbmlmb3J1bSBnZXR0ZXh0IGZ1bmN0aW9uLiAgRm9yIHN5c3RlbSB3aGljaCBkb2VzIG5vdAorLQloYXZlIG5laXRoZXIgb2YgdGhvc2UgYSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBpcyBwcm92aWRlZC4KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9jb25maWcuY2hhcnNldAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9jb25maWcuY2hhcnNldAkyMDA0LTA5LTEyIDE0OjQwOjM0LjM1NDc0ODI0MCAtMDQwMAorQEAgLTAsMCArMSw2MDggQEAKKysjISAvYmluL3NoCisrIyBPdXRwdXQgYSBzeXN0ZW0gZGVwZW5kZW50IHRhYmxlIG9mIGNoYXJhY3RlciBlbmNvZGluZyBhbGlhc2VzLgorKyMKKysjICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIworKyMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyMgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrIyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysjICAgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysjICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyMgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyMgICBVU0EuCisrIworKyMgVGhlIHRhYmxlIGNvbnNpc3RzIG9mIGxpbmVzIG9mIHRoZSBmb3JtCisrIyAgICBBTElBUyAgQ0FOT05JQ0FMCisrIworKyMgQUxJQVMgaXMgdGhlIChzeXN0ZW0gZGVwZW5kZW50KSByZXN1bHQgb2YgIm5sX2xhbmdpbmZvIChDT0RFU0VUKSIuCisrIyBBTElBUyBpcyBjb21wYXJlZCBpbiBhIGNhc2Ugc2Vuc2l0aXZlIHdheS4KKysjCisrIyBDQU5PTklDQUwgaXMgdGhlIEdOVSBjYW5vbmljYWwgbmFtZSBmb3IgdGhpcyBjaGFyYWN0ZXIgZW5jb2RpbmcuCisrIyBJdCBtdXN0IGJlIGFuIGVuY29kaW5nIHN1cHBvcnRlZCBieSBsaWJpY29udi4gU3VwcG9ydCBieSBHTlUgbGliYyBpcworKyMgYWxzbyBkZXNpcmFibGUuIENBTk9OSUNBTCBpcyBjYXNlIGluc2Vuc2l0aXZlLiBVc3VhbGx5IGFuIHVwcGVyIGNhc2UKKysjIE1JTUUgY2hhcnNldCBuYW1lIGlzIHByZWZlcnJlZC4KKysjIFRoZSBjdXJyZW50IGxpc3Qgb2YgR05VIGNhbm9uaWNhbCBjaGFyc2V0IG5hbWVzIGlzIGFzIGZvbGxvd3MuCisrIworKyMgICAgICAgbmFtZSAgICAgICAgICAgICAgTUlNRT8gICAgICAgICAgICAgdXNlZCBieSB3aGljaCBzeXN0ZW1zCisrIyAgIEFTQ0lJLCBBTlNJX1gzLjQtMTk2OCAgICAgICBnbGliYyBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisrIyAgIElTTy04ODU5LTEgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisrIyAgIElTTy04ODU5LTIgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisrIyAgIElTTy04ODU5LTMgICAgICAgICAgICAgIFkgICBnbGliYyBzb2xhcmlzCisrIyAgIElTTy04ODU5LTQgICAgICAgICAgICAgIFkgICBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBJU08tODg1OS01ICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBJU08tODg1OS02ICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggc29sYXJpcworKyMgICBJU08tODg1OS03ICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcworKyMgICBJU08tODg1OS04ICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggb3NmIHNvbGFyaXMKKysjICAgSVNPLTg4NTktOSAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMKKysjICAgSVNPLTg4NTktMTMgICAgICAgICAgICAgICAgIGdsaWJjCisrIyAgIElTTy04ODU5LTE0ICAgICAgICAgICAgICAgICBnbGliYworKyMgICBJU08tODg1OS0xNSAgICAgICAgICAgICAgICAgZ2xpYmMgYWl4IG9zZiBzb2xhcmlzIGZyZWVic2QKKysjICAgS09JOC1SICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgS09JOC1VICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGZyZWVic2QgZGFyd2luCisrIyAgIEtPSTgtVCAgICAgICAgICAgICAgICAgICAgICBnbGliYworKyMgICBDUDQzNyAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQNzc1ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKysjICAgQ1A4NTAgICAgICAgICAgICAgICAgICAgICAgIGFpeCBvc2YgZG9zCisrIyAgIENQODUyICAgICAgICAgICAgICAgICAgICAgICBkb3MKKysjICAgQ1A4NTUgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg1NiAgICAgICAgICAgICAgICAgICAgICAgYWl4CisrIyAgIENQODU3ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKysjICAgQ1A4NjEgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg2MiAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQODY0ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKysjICAgQ1A4NjUgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg2NiAgICAgICAgICAgICAgICAgICAgICAgZnJlZWJzZCBkYXJ3aW4gZG9zCisrIyAgIENQODY5ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKysjICAgQ1A4NzQgICAgICAgICAgICAgICAgICAgICAgIHdvZTMyIGRvcworKyMgICBDUDkyMiAgICAgICAgICAgICAgICAgICAgICAgYWl4CisrIyAgIENQOTMyICAgICAgICAgICAgICAgICAgICAgICBhaXggd29lMzIgZG9zCisrIyAgIENQOTQzICAgICAgICAgICAgICAgICAgICAgICBhaXgKKysjICAgQ1A5NDkgICAgICAgICAgICAgICAgICAgICAgIG9zZiB3b2UzMiBkb3MKKysjICAgQ1A5NTAgICAgICAgICAgICAgICAgICAgICAgIHdvZTMyIGRvcworKyMgICBDUDEwNDYgICAgICAgICAgICAgICAgICAgICAgYWl4CisrIyAgIENQMTEyNCAgICAgICAgICAgICAgICAgICAgICBhaXgKKysjICAgQ1AxMTI1ICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDExMjkgICAgICAgICAgICAgICAgICAgICAgYWl4CisrIyAgIENQMTI1MCAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorKyMgICBDUDEyNTEgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgc29sYXJpcyBkYXJ3aW4gd29lMzIKKysjICAgQ1AxMjUyICAgICAgICAgICAgICAgICAgICAgIGFpeCB3b2UzMgorKyMgICBDUDEyNTMgICAgICAgICAgICAgICAgICAgICAgd29lMzIKKysjICAgQ1AxMjU0ICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCisrIyAgIENQMTI1NSAgICAgICAgICAgICAgICAgICAgICBnbGliYyB3b2UzMgorKyMgICBDUDEyNTYgICAgICAgICAgICAgICAgICAgICAgd29lMzIKKysjICAgQ1AxMjU3ICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCisrIyAgIEdCMjMxMiAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgRVVDLUpQICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgRVVDLUtSICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgRVVDLVRXICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMKKysjICAgQklHNSAgICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisrIyAgIEJJRzUtSEtTQ1MgICAgICAgICAgICAgICAgICBnbGliYyBzb2xhcmlzCisrIyAgIEdCSyAgICAgICAgICAgICAgICAgICAgICAgICBnbGliYyBhaXggb3NmIHNvbGFyaXMgd29lMzIgZG9zCisrIyAgIEdCMTgwMzAgICAgICAgICAgICAgICAgICAgICBnbGliYyBzb2xhcmlzCisrIyAgIFNISUZUX0pJUyAgICAgICAgICAgICAgIFkgICBocHV4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisrIyAgIEpPSEFCICAgICAgICAgICAgICAgICAgICAgICBnbGliYyBzb2xhcmlzIHdvZTMyCisrIyAgIFRJUy02MjAgICAgICAgICAgICAgICAgICAgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcworKyMgICBWSVNDSUkgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMKKysjICAgVENWTjU3MTItMSAgICAgICAgICAgICAgICAgIGdsaWJjCisrIyAgIEdFT1JHSUFOLVBTICAgICAgICAgICAgICAgICBnbGliYworKyMgICBIUC1ST01BTjggICAgICAgICAgICAgICAgICAgaHB1eAorKyMgICBIUC1BUkFCSUM4ICAgICAgICAgICAgICAgICAgaHB1eAorKyMgICBIUC1HUkVFSzggICAgICAgICAgICAgICAgICAgaHB1eAorKyMgICBIUC1IRUJSRVc4ICAgICAgICAgICAgICAgICAgaHB1eAorKyMgICBIUC1UVVJLSVNIOCAgICAgICAgICAgICAgICAgaHB1eAorKyMgICBIUC1LQU5BOCAgICAgICAgICAgICAgICAgICAgaHB1eAorKyMgICBERUMtS0FOSkkgICAgICAgICAgICAgICAgICAgb3NmCisrIyAgIERFQy1IQU5ZVSAgICAgICAgICAgICAgICAgICBvc2YKKysjICAgVVRGLTggICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IG9zZiBzb2xhcmlzCisrIworKyMgTm90ZTogTmFtZXMgd2hpY2ggYXJlIG5vdCBtYXJrZWQgYXMgYmVpbmcgYSBNSU1FIG5hbWUgc2hvdWxkIG5vdCBiZSB1c2VkIGluCisrIyBJbnRlcm5ldCBwcm90b2NvbHMgZm9yIGluZm9ybWF0aW9uIGludGVyY2hhbmdlIChtYWlsLCBuZXdzLCBldGMuKS4KKysjCisrIyBOb3RlOiBBU0NJSSBhbmQgQU5TSV9YMy40LTE5NjggYXJlIHN5bm9ueW1vdXMgY2Fub25pY2FsIG5hbWVzLiBBcHBsaWNhdGlvbnMKKysjIG11c3QgdW5kZXJzdGFuZCBib3RoIG5hbWVzIGFuZCB0cmVhdCB0aGVtIGFzIGVxdWl2YWxlbnQuCisrIworKyMgVGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIGZpbGUgaXMgdGhlIGNhbm9uaWNhbCBob3N0IHNwZWNpZmljYXRpb24sCisrIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorKyMgb3IKKysjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorKworK2hvc3Q9IiQxIgorK29zPWBlY2hvICIkaG9zdCIgfCBzZWQgLWUgJ3MvXlteLV0qLVteLV0qLVwoLipcKSQvXDEvJ2AKKytlY2hvICIjIFRoaXMgZmlsZSBjb250YWlucyBhIHRhYmxlIG9mIGNoYXJhY3RlciBlbmNvZGluZyBhbGlhc2VzLCIKKytlY2hvICIjIHN1aXRhYmxlIGZvciBvcGVyYXRpbmcgc3lzdGVtICcke29zfScuIgorK2VjaG8gIiMgSXQgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29uZmlnLmNoYXJzZXQuIgorKyMgTGlzdCBvZiByZWZlcmVuY2VzLCB1cGRhdGVkIGR1cmluZyBpbnN0YWxsYXRpb246CisrZWNobyAiIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6ICIKKytjYXNlICIkb3MiIGluCisrICAgIGxpbnV4LWdudWxpYmMxKikKKysJIyBMaW51eCBsaWJjNSBkb2Vzbid0IGhhdmUgbmxfbGFuZ2luZm8oQ09ERVNFVCk7IHRoZXJlZm9yZQorKwkjIGxvY2FsY2hhcnNldC5jIGZhbGxzIGJhY2sgdG8gdXNpbmcgdGhlIGZ1bGwgbG9jYWxlIG5hbWUKKysJIyBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisrCWVjaG8gIkMgQVNDSUkiCisrCWVjaG8gIlBPU0lYIEFTQ0lJIgorKwlmb3IgbCBpbiBhZiBhZl9aQSBjYSBjYV9FUyBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBcCisrCSAgICAgICAgIGVuIGVuX0FVIGVuX0JXIGVuX0NBIGVuX0RLIGVuX0dCIGVuX0lFIGVuX05aIGVuX1VTIGVuX1pBIFwKKysJICAgICAgICAgZW5fWlcgZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgXAorKwkgICAgICAgICBlc19ITiBlc19NWCBlc19QQSBlc19QRSBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBcCisrCSAgICAgICAgIGV0X0VFIGV1IGV1X0VTIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIFwKKysJICAgICAgICAgZnJfTFUgZ2EgZ2FfSUUgZ2wgZ2xfRVMgaWQgaWRfSUQgaW4gaW5fSUQgaXMgaXNfSVMgaXQgaXRfQ0ggXAorKwkgICAgICAgICBpdF9JVCBrbCBrbF9HTCBubCBubF9CRSBubF9OTCBubyBub19OTyBwdCBwdF9CUiBwdF9QVCBzdiBcCisrCSAgICAgICAgIHN2X0ZJIHN2X1NFOyBkbworKwkgIGVjaG8gIiRsIElTTy04ODU5LTEiCisrCSAgZWNobyAiJGwuaXNvLTg4NTktMSBJU08tODg1OS0xIgorKwkgIGVjaG8gIiRsLmlzby04ODU5LTE1IElTTy04ODU5LTE1IgorKwkgIGVjaG8gIiRsLmlzby04ODU5LTE1QGV1cm8gSVNPLTg4NTktMTUiCisrCSAgZWNobyAiJGxAZXVybyBJU08tODg1OS0xNSIKKysJICBlY2hvICIkbC5jcC00MzcgQ1A0MzciCisrCSAgZWNobyAiJGwuY3AtODUwIENQODUwIgorKwkgIGVjaG8gIiRsLmNwLTEyNTIgQ1AxMjUyIgorKwkgIGVjaG8gIiRsLmNwLTEyNTJAZXVybyBDUDEyNTIiCisrCSAgI2VjaG8gIiRsLmF0YXJpLXN0IEFUQVJJLVNUIiAjIG5vdCBhIGNvbW1vbmx5IHVzZWQgZW5jb2RpbmcKKysJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKysJICBlY2hvICIkbC51dGYtOEBldXJvIFVURi04IgorKwlkb25lCisrCWZvciBsIGluIGNzIGNzX0NaIGhyIGhyX0hSIGh1IGh1X0hVIHBsIHBsX1BMIHJvIHJvX1JPIHNrIHNrX1NLIHNsIFwKKysJICAgICAgICAgc2xfU0kgc3Igc3JfQ1Mgc3JfWVU7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktMiIKKysJICBlY2hvICIkbC5pc28tODg1OS0yIElTTy04ODU5LTIiCisrCSAgZWNobyAiJGwuY3AtODUyIENQODUyIgorKwkgIGVjaG8gIiRsLmNwLTEyNTAgQ1AxMjUwIgorKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwlkb25lCisrCWZvciBsIGluIG1rIG1rX01LIHJ1IHJ1X1JVOyBkbworKwkgIGVjaG8gIiRsIElTTy04ODU5LTUiCisrCSAgZWNobyAiJGwuaXNvLTg4NTktNSBJU08tODg1OS01IgorKwkgIGVjaG8gIiRsLmtvaTgtciBLT0k4LVIiCisrCSAgZWNobyAiJGwuY3AtODY2IENQODY2IgorKwkgIGVjaG8gIiRsLmNwLTEyNTEgQ1AxMjUxIgorKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwlkb25lCisrCWZvciBsIGluIGFyIGFyX1NBOyBkbworKwkgIGVjaG8gIiRsIElTTy04ODU5LTYiCisrCSAgZWNobyAiJGwuaXNvLTg4NTktNiBJU08tODg1OS02IgorKwkgIGVjaG8gIiRsLmNwLTg2NCBDUDg2NCIKKysJICAjZWNobyAiJGwuY3AtODY4IENQODY4IiAjIG5vdCBhIGNvbW1vbmx5IHVzZWQgZW5jb2RpbmcKKysJICBlY2hvICIkbC5jcC0xMjU2IENQMTI1NiIKKysJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKysJZG9uZQorKwlmb3IgbCBpbiBlbCBlbF9HUiBnciBncl9HUjsgZG8KKysJICBlY2hvICIkbCBJU08tODg1OS03IgorKwkgIGVjaG8gIiRsLmlzby04ODU5LTcgSVNPLTg4NTktNyIKKysJICBlY2hvICIkbC5jcC04NjkgQ1A4NjkiCisrCSAgZWNobyAiJGwuY3AtMTI1MyBDUDEyNTMiCisrCSAgZWNobyAiJGwuY3AtMTI1M0BldXJvIENQMTI1MyIKKysJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKysJICBlY2hvICIkbC51dGYtOEBldXJvIFVURi04IgorKwlkb25lCisrCWZvciBsIGluIGhlIGhlX0lMIGl3IGl3X0lMOyBkbworKwkgIGVjaG8gIiRsIElTTy04ODU5LTgiCisrCSAgZWNobyAiJGwuaXNvLTg4NTktOCBJU08tODg1OS04IgorKwkgIGVjaG8gIiRsLmNwLTg2MiBDUDg2MiIKKysJICBlY2hvICIkbC5jcC0xMjU1IENQMTI1NSIKKysJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKysJZG9uZQorKwlmb3IgbCBpbiB0ciB0cl9UUjsgZG8KKysJICBlY2hvICIkbCBJU08tODg1OS05IgorKwkgIGVjaG8gIiRsLmlzby04ODU5LTkgSVNPLTg4NTktOSIKKysJICBlY2hvICIkbC5jcC04NTcgQ1A4NTciCisrCSAgZWNobyAiJGwuY3AtMTI1NCBDUDEyNTQiCisrCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gbHQgbHRfTFQgbHYgbHZfTFY7IGRvCisrCSAgI2VjaG8gIiRsIEJBTFRJQyIgIyBub3QgYSBjb21tb25seSB1c2VkIGVuY29kaW5nLCB3cm9uZyBlbmNvZGluZyBuYW1lCisrCSAgZWNobyAiJGwgSVNPLTg4NTktMTMiCisrCWRvbmUKKysJZm9yIGwgaW4gcnVfVUEgdWsgdWtfVUE7IGRvCisrCSAgZWNobyAiJGwgS09JOC1VIgorKwlkb25lCisrCWZvciBsIGluIHpoIHpoX0NOOyBkbworKwkgICNlY2hvICIkbCBHQl8yMzEyLTgwIiAjIG5vdCBhIGNvbW1vbmx5IHVzZWQgZW5jb2RpbmcsIHdyb25nIGVuY29kaW5nIG5hbWUKKysJICBlY2hvICIkbCBHQjIzMTIiCisrCWRvbmUKKysJZm9yIGwgaW4gamEgamFfSlAgamFfSlAuRVVDOyBkbworKwkgIGVjaG8gIiRsIEVVQy1KUCIKKysJZG9uZQorKwlmb3IgbCBpbiBrbyBrb19LUjsgZG8KKysJICBlY2hvICIkbCBFVUMtS1IiCisrCWRvbmUKKysJZm9yIGwgaW4gdGggdGhfVEg7IGRvCisrCSAgZWNobyAiJGwgVElTLTYyMCIKKysJZG9uZQorKwlmb3IgbCBpbiBmYSBmYV9JUjsgZG8KKysJICAjZWNobyAiJGwgSVNJUkktMzM0MiIgIyBhIGJyb2tlbiBlbmNvZGluZworKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwlkb25lCisrCTs7CisrICAgIGxpbnV4KiB8ICotZ251KikKKysJIyBXaXRoIGdsaWJjLTIuMSBvciBuZXdlciwgd2UgZG9uJ3QgbmVlZCBhbnkgY2Fub25pY2FsaXphdGlvbiwKKysJIyBiZWNhdXNlIGdsaWJjIGhhcyBpY29udiBhbmQgYm90aCBnbGliYyBhbmQgbGliaWNvbnYgc3VwcG9ydCBhbGwKKysJIyBHTlUgY2Fub25pY2FsIG5hbWVzIGRpcmVjdGx5LiBUaGVyZWZvcmUsIHRoZSBNYWtlZmlsZSBkb2VzIG5vdAorKwkjIG5lZWQgdG8gaW5zdGFsbCB0aGUgYWxpYXMgZmlsZSBhdCBhbGwuCisrCSMgVGhlIGZvbGxvd2luZyBhcHBsaWVzIG9ubHkgdG8gZ2xpYmMtMi4wLnggYW5kIG9sZGVyIGxpYmNzLgorKwllY2hvICJJU09fNjQ2LklSVjoxOTgzIEFTQ0lJIgorKwk7OworKyAgICBhaXgqKQorKwllY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKysJZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCisrCWVjaG8gIklTTzg4NTktNSBJU08tODg1OS01IgorKwllY2hvICJJU084ODU5LTYgSVNPLTg4NTktNiIKKysJZWNobyAiSVNPODg1OS03IElTTy04ODU5LTciCisrCWVjaG8gIklTTzg4NTktOCBJU08tODg1OS04IgorKwllY2hvICJJU084ODU5LTkgSVNPLTg4NTktOSIKKysJZWNobyAiSVNPODg1OS0xNSBJU08tODg1OS0xNSIKKysJZWNobyAiSUJNLTg1MCBDUDg1MCIKKysJZWNobyAiSUJNLTg1NiBDUDg1NiIKKysJZWNobyAiSUJNLTkyMSBJU08tODg1OS0xMyIKKysJZWNobyAiSUJNLTkyMiBDUDkyMiIKKysJZWNobyAiSUJNLTkzMiBDUDkzMiIKKysJZWNobyAiSUJNLTk0MyBDUDk0MyIKKysJZWNobyAiSUJNLTEwNDYgQ1AxMDQ2IgorKwllY2hvICJJQk0tMTEyNCBDUDExMjQiCisrCWVjaG8gIklCTS0xMTI5IENQMTEyOSIKKysJZWNobyAiSUJNLTEyNTIgQ1AxMjUyIgorKwllY2hvICJJQk0tZXVjQ04gR0IyMzEyIgorKwllY2hvICJJQk0tZXVjSlAgRVVDLUpQIgorKwllY2hvICJJQk0tZXVjS1IgRVVDLUtSIgorKwllY2hvICJJQk0tZXVjVFcgRVVDLVRXIgorKwllY2hvICJiaWc1IEJJRzUiCisrCWVjaG8gIkdCSyBHQksiCisrCWVjaG8gIlRJUy02MjAgVElTLTYyMCIKKysJZWNobyAiVVRGLTggVVRGLTgiCisrCTs7CisrICAgIGhwdXgqKQorKwllY2hvICJpc284ODU5MSBJU08tODg1OS0xIgorKwllY2hvICJpc284ODU5MiBJU08tODg1OS0yIgorKwllY2hvICJpc284ODU5NSBJU08tODg1OS01IgorKwllY2hvICJpc284ODU5NiBJU08tODg1OS02IgorKwllY2hvICJpc284ODU5NyBJU08tODg1OS03IgorKwllY2hvICJpc284ODU5OCBJU08tODg1OS04IgorKwllY2hvICJpc284ODU5OSBJU08tODg1OS05IgorKwllY2hvICJpc284ODU5MTUgSVNPLTg4NTktMTUiCisrCWVjaG8gInJvbWFuOCBIUC1ST01BTjgiCisrCWVjaG8gImFyYWJpYzggSFAtQVJBQklDOCIKKysJZWNobyAiZ3JlZWs4IEhQLUdSRUVLOCIKKysJZWNobyAiaGVicmV3OCBIUC1IRUJSRVc4IgorKwllY2hvICJ0dXJraXNoOCBIUC1UVVJLSVNIOCIKKysJZWNobyAia2FuYTggSFAtS0FOQTgiCisrCWVjaG8gInRpczYyMCBUSVMtNjIwIgorKwllY2hvICJiaWc1IEJJRzUiCisrCWVjaG8gImV1Y0pQIEVVQy1KUCIKKysJZWNobyAiZXVjS1IgRVVDLUtSIgorKwllY2hvICJldWNUVyBFVUMtVFciCisrCWVjaG8gImhwMTVDTiBHQjIzMTIiCisrCSNlY2hvICJjY2RjID8iICMgd2hhdCBpcyB0aGlzPworKwllY2hvICJTSklTIFNISUZUX0pJUyIKKysJZWNobyAidXRmOCBVVEYtOCIKKysJOzsKKysgICAgaXJpeCopCisrCWVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorKwllY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKysJZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCisrCWVjaG8gIklTTzg4NTktNyBJU08tODg1OS03IgorKwllY2hvICJJU084ODU5LTkgSVNPLTg4NTktOSIKKysJZWNobyAiZXVjQ04gR0IyMzEyIgorKwllY2hvICJldWNKUCBFVUMtSlAiCisrCWVjaG8gImV1Y0tSIEVVQy1LUiIKKysJZWNobyAiZXVjVFcgRVVDLVRXIgorKwk7OworKyAgICBvc2YqKQorKwllY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKysJZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCisrCWVjaG8gIklTTzg4NTktNCBJU08tODg1OS00IgorKwllY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKysJZWNobyAiSVNPODg1OS03IElTTy04ODU5LTciCisrCWVjaG8gIklTTzg4NTktOCBJU08tODg1OS04IgorKwllY2hvICJJU084ODU5LTkgSVNPLTg4NTktOSIKKysJZWNobyAiSVNPODg1OS0xNSBJU08tODg1OS0xNSIKKysJZWNobyAiY3A4NTAgQ1A4NTAiCisrCWVjaG8gImJpZzUgQklHNSIKKysJZWNobyAiZGVjaGFueXUgREVDLUhBTllVIgorKwllY2hvICJkZWNoYW56aSBHQjIzMTIiCisrCWVjaG8gImRlY2thbmppIERFQy1LQU5KSSIKKysJZWNobyAiZGVja29yZWFuIEVVQy1LUiIKKysJZWNobyAiZXVjSlAgRVVDLUpQIgorKwllY2hvICJldWNLUiBFVUMtS1IiCisrCWVjaG8gImV1Y1RXIEVVQy1UVyIKKysJZWNobyAiR0JLIEdCSyIKKysJZWNobyAiS1NDNTYwMSBDUDk0OSIKKysJZWNobyAic2RlY2thbmppIEVVQy1KUCIKKysJZWNobyAiU0pJUyBTSElGVF9KSVMiCisrCWVjaG8gIlRBQ1RJUyBUSVMtNjIwIgorKwllY2hvICJVVEYtOCBVVEYtOCIKKysJOzsKKysgICAgc29sYXJpcyopCisrCWVjaG8gIjY0NiBBU0NJSSIKKysJZWNobyAiSVNPODg1OS0xIElTTy04ODU5LTEiCisrCWVjaG8gIklTTzg4NTktMiBJU08tODg1OS0yIgorKwllY2hvICJJU084ODU5LTMgSVNPLTg4NTktMyIKKysJZWNobyAiSVNPODg1OS00IElTTy04ODU5LTQiCisrCWVjaG8gIklTTzg4NTktNSBJU08tODg1OS01IgorKwllY2hvICJJU084ODU5LTYgSVNPLTg4NTktNiIKKysJZWNobyAiSVNPODg1OS03IElTTy04ODU5LTciCisrCWVjaG8gIklTTzg4NTktOCBJU08tODg1OS04IgorKwllY2hvICJJU084ODU5LTkgSVNPLTg4NTktOSIKKysJZWNobyAiSVNPODg1OS0xNSBJU08tODg1OS0xNSIKKysJZWNobyAia29pOC1yIEtPSTgtUiIKKysJZWNobyAiYW5zaS0xMjUxIENQMTI1MSIKKysJZWNobyAiQklHNSBCSUc1IgorKwllY2hvICJCaWc1LUhLU0NTIEJJRzUtSEtTQ1MiCisrCWVjaG8gImdiMjMxMiBHQjIzMTIiCisrCWVjaG8gIkdCSyBHQksiCisrCWVjaG8gIkdCMTgwMzAgR0IxODAzMCIKKysJZWNobyAiY25zMTE2NDMgRVVDLVRXIgorKwllY2hvICI1NjAxIEVVQy1LUiIKKysJZWNobyAia29fS1Iuam9oYXA5MiBKT0hBQiIKKysJZWNobyAiZXVjSlAgRVVDLUpQIgorKwllY2hvICJQQ0sgU0hJRlRfSklTIgorKwllY2hvICJUSVM2MjAuMjUzMyBUSVMtNjIwIgorKwkjZWNobyAic3VuX2V1X2dyZWVrID8iICMgd2hhdCBpcyB0aGlzPworKwllY2hvICJVVEYtOCBVVEYtOCIKKysJOzsKKysgICAgZnJlZWJzZCogfCBvczIqKQorKwkjIEZyZWVCU0QgNC4yIGRvZXNuJ3QgaGF2ZSBubF9sYW5naW5mbyhDT0RFU0VUKTsgdGhlcmVmb3JlCisrCSMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorKwkjIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKysJIyBMaWtld2lzZSBmb3IgT1MvMi4gT1MvMiBoYXMgWEZyZWU4NiBqdXN0IGxpa2UgRnJlZUJTRC4gSnVzdAorKwkjIHJldXNlIEZyZWVCU0QncyBsb2NhbGUgZGF0YSBmb3IgT1MvMi4KKysJZWNobyAiQyBBU0NJSSIKKysJZWNobyAiVVMtQVNDSUkgQVNDSUkiCisrCWZvciBsIGluIGxhX0xOIGx0X0xOOyBkbworKwkgIGVjaG8gIiRsLkFTQ0lJIEFTQ0lJIgorKwlkb25lCisrCWZvciBsIGluIGRhX0RLIGRlX0FUIGRlX0NIIGRlX0RFIGVuX0FVIGVuX0NBIGVuX0dCIGVuX1VTIGVzX0VTIFwKKysJICAgICAgICAgZmlfRkkgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgaXNfSVMgaXRfQ0ggaXRfSVQgbGFfTE4gXAorKwkgICAgICAgICBsdF9MTiBubF9CRSBubF9OTCBub19OTyBwdF9QVCBzdl9TRTsgZG8KKysJICBlY2hvICIkbC5JU09fODg1OS0xIElTTy04ODU5LTEiCisrCSAgZWNobyAiJGwuRElTXzg4NTktMTUgSVNPLTg4NTktMTUiCisrCWRvbmUKKysJZm9yIGwgaW4gY3NfQ1ogaHJfSFIgaHVfSFUgbGFfTE4gbHRfTE4gcGxfUEwgc2xfU0k7IGRvCisrCSAgZWNobyAiJGwuSVNPXzg4NTktMiBJU08tODg1OS0yIgorKwlkb25lCisrCWZvciBsIGluIGxhX0xOIGx0X0xUOyBkbworKwkgIGVjaG8gIiRsLklTT184ODU5LTQgSVNPLTg4NTktNCIKKysJZG9uZQorKwlmb3IgbCBpbiBydV9SVSBydV9TVTsgZG8KKysJICBlY2hvICIkbC5LT0k4LVIgS09JOC1SIgorKwkgIGVjaG8gIiRsLklTT184ODU5LTUgSVNPLTg4NTktNSIKKysJICBlY2hvICIkbC5DUDg2NiBDUDg2NiIKKysJZG9uZQorKwllY2hvICJ1a19VQS5LT0k4LVUgS09JOC1VIgorKwllY2hvICJ6aF9UVy5CSUc1IEJJRzUiCisrCWVjaG8gInpoX1RXLkJpZzUgQklHNSIKKysJZWNobyAiemhfQ04uRVVDIEdCMjMxMiIKKysJZWNobyAiamFfSlAuRVVDIEVVQy1KUCIKKysJZWNobyAiamFfSlAuU0pJUyBTSElGVF9KSVMiCisrCWVjaG8gImphX0pQLlNoaWZ0X0pJUyBTSElGVF9KSVMiCisrCWVjaG8gImtvX0tSLkVVQyBFVUMtS1IiCisrCTs7CisrICAgIG5ldGJzZCopCisrCWVjaG8gIjY0NiBBU0NJSSIKKysJZWNobyAiSVNPODg1OS0xIElTTy04ODU5LTEiCisrCWVjaG8gIklTTzg4NTktMiBJU08tODg1OS0yIgorKwllY2hvICJJU084ODU5LTQgSVNPLTg4NTktNCIKKysJZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCisrCWVjaG8gIklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisrCWVjaG8gImV1Y0NOIEdCMjMxMiIKKysJZWNobyAiZXVjSlAgRVVDLUpQIgorKwllY2hvICJldWNLUiBFVUMtS1IiCisrCWVjaG8gImV1Y1RXIEVVQy1UVyIKKysJZWNobyAiQklHNSBCSUc1IgorKwllY2hvICJTSklTIFNISUZUX0pJUyIKKysJOzsKKysgICAgZGFyd2luKikKKysJIyBEYXJ3aW4gNi44IGRvZXNuJ3QgaGF2ZSBubF9sYW5naW5mbyhDT0RFU0VUKTsgdGhlcmVmb3JlCisrCSMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorKwkjIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKysJZWNobyAiQyBBU0NJSSIKKysJZm9yIGwgaW4gZW5fQVUgZW5fQ0EgZW5fR0IgZW5fVVMgbGFfTE47IGRvCisrCSAgZWNobyAiJGwuVVMtQVNDSUkgQVNDSUkiCisrCWRvbmUKKysJZm9yIGwgaW4gZGFfREsgZGVfQVQgZGVfQ0ggZGVfREUgZW5fQVUgZW5fQ0EgZW5fR0IgZW5fVVMgZXNfRVMgXAorKwkgICAgICAgICBmaV9GSSBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBpc19JUyBpdF9DSCBpdF9JVCBubF9CRSBcCisrCSAgICAgICAgIG5sX05MIG5vX05PIHB0X1BUIHN2X1NFOyBkbworKwkgIGVjaG8gIiRsIElTTy04ODU5LTEiCisrCSAgZWNobyAiJGwuSVNPODg1OS0xIElTTy04ODU5LTEiCisrCSAgZWNobyAiJGwuSVNPODg1OS0xNSBJU08tODg1OS0xNSIKKysJZG9uZQorKwlmb3IgbCBpbiBsYV9MTjsgZG8KKysJICBlY2hvICIkbC5JU084ODU5LTEgSVNPLTg4NTktMSIKKysJICBlY2hvICIkbC5JU084ODU5LTE1IElTTy04ODU5LTE1IgorKwlkb25lCisrCWZvciBsIGluIGNzX0NaIGhyX0hSIGh1X0hVIGxhX0xOIHBsX1BMIHNsX1NJOyBkbworKwkgIGVjaG8gIiRsLklTTzg4NTktMiBJU08tODg1OS0yIgorKwlkb25lCisrCWZvciBsIGluIGxhX0xOIGx0X0xUOyBkbworKwkgIGVjaG8gIiRsLklTTzg4NTktNCBJU08tODg1OS00IgorKwlkb25lCisrCWZvciBsIGluIHJ1X1JVOyBkbworKwkgIGVjaG8gIiRsLktPSTgtUiBLT0k4LVIiCisrCSAgZWNobyAiJGwuSVNPODg1OS01IElTTy04ODU5LTUiCisrCSAgZWNobyAiJGwuQ1A4NjYgQ1A4NjYiCisrCWRvbmUKKysJZm9yIGwgaW4gYmdfQkc7IGRvCisrCSAgZWNobyAiJGwuQ1AxMjUxIENQMTI1MSIKKysJZG9uZQorKwllY2hvICJ1a19VQS5LT0k4LVUgS09JOC1VIgorKwllY2hvICJ6aF9UVy5CSUc1IEJJRzUiCisrCWVjaG8gInpoX1RXLkJpZzUgQklHNSIKKysJZWNobyAiemhfQ04uRVVDIEdCMjMxMiIKKysJZWNobyAiamFfSlAuRVVDIEVVQy1KUCIKKysJZWNobyAiamFfSlAuU0pJUyBTSElGVF9KSVMiCisrCWVjaG8gImtvX0tSLkVVQyBFVUMtS1IiCisrCTs7CisrICAgIGJlb3MqKQorKwkjIEJlT1MgaGFzIGEgc2luZ2xlIGxvY2FsZSwgYW5kIGl0IGhhcyBVVEYtOCBlbmNvZGluZy4KKysJZWNobyAiKiBVVEYtOCIKKysJOzsKKysgICAgbXNkb3NkamdwcCopCisrCSMgREpHUFAgMi4wMyBkb2Vzbid0IGhhdmUgbmxfbGFuZ2luZm8oQ09ERVNFVCk7IHRoZXJlZm9yZQorKwkjIGxvY2FsY2hhcnNldC5jIGZhbGxzIGJhY2sgdG8gdXNpbmcgdGhlIGZ1bGwgbG9jYWxlIG5hbWUKKysJIyBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisrCWVjaG8gIiMiCisrCWVjaG8gIiMgVGhlIGVuY29kaW5ncyBnaXZlbiBoZXJlIG1heSBub3QgYWxsIGJlIGNvcnJlY3QuIgorKwllY2hvICIjIElmIHlvdSBmaW5kIHRoYXQgdGhlIGVuY29kaW5nIGdpdmVuIGZvciB5b3VyIGxhbmd1YWdlIGFuZCIKKysJZWNobyAiIyBjb3VudHJ5IGlzIG5vdCB0aGUgb25lIHlvdXIgRE9TIG1hY2hpbmUgYWN0dWFsbHkgdXNlcywganVzdCIKKysJZWNobyAiIyBjb3JyZWN0IGl0IGluIHRoaXMgZmlsZSwgYW5kIHNlbmQgYSBtYWlsIHRvIgorKwllY2hvICIjIEp1YW4gTWFudWVsIEd1ZXJyZXJvIDxzdDAwMTkwNkBocnoxLmhyei50dS1kYXJtc3RhZHQuZGU+IgorKwllY2hvICIjIGFuZCBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4uIgorKwllY2hvICIjIgorKwllY2hvICJDIEFTQ0lJIgorKwkjIElTTy04ODU5LTEgbGFuZ3VhZ2VzCisrCWVjaG8gImNhIENQODUwIgorKwllY2hvICJjYV9FUyBDUDg1MCIKKysJZWNobyAiZGEgQ1A4NjUiICAgICMgbm90IENQODUwID8/CisrCWVjaG8gImRhX0RLIENQODY1IiAjIG5vdCBDUDg1MCA/PworKwllY2hvICJkZSBDUDg1MCIKKysJZWNobyAiZGVfQVQgQ1A4NTAiCisrCWVjaG8gImRlX0NIIENQODUwIgorKwllY2hvICJkZV9ERSBDUDg1MCIKKysJZWNobyAiZW4gQ1A4NTAiCisrCWVjaG8gImVuX0FVIENQODUwIiAjIG5vdCBDUDQzNyA/PworKwllY2hvICJlbl9DQSBDUDg1MCIKKysJZWNobyAiZW5fR0IgQ1A4NTAiCisrCWVjaG8gImVuX05aIENQNDM3IgorKwllY2hvICJlbl9VUyBDUDQzNyIKKysJZWNobyAiZW5fWkEgQ1A4NTAiICMgbm90IENQNDM3ID8/CisrCWVjaG8gImVzIENQODUwIgorKwllY2hvICJlc19BUiBDUDg1MCIKKysJZWNobyAiZXNfQk8gQ1A4NTAiCisrCWVjaG8gImVzX0NMIENQODUwIgorKwllY2hvICJlc19DTyBDUDg1MCIKKysJZWNobyAiZXNfQ1IgQ1A4NTAiCisrCWVjaG8gImVzX0NVIENQODUwIgorKwllY2hvICJlc19ETyBDUDg1MCIKKysJZWNobyAiZXNfRUMgQ1A4NTAiCisrCWVjaG8gImVzX0VTIENQODUwIgorKwllY2hvICJlc19HVCBDUDg1MCIKKysJZWNobyAiZXNfSE4gQ1A4NTAiCisrCWVjaG8gImVzX01YIENQODUwIgorKwllY2hvICJlc19OSSBDUDg1MCIKKysJZWNobyAiZXNfUEEgQ1A4NTAiCisrCWVjaG8gImVzX1BZIENQODUwIgorKwllY2hvICJlc19QRSBDUDg1MCIKKysJZWNobyAiZXNfU1YgQ1A4NTAiCisrCWVjaG8gImVzX1VZIENQODUwIgorKwllY2hvICJlc19WRSBDUDg1MCIKKysJZWNobyAiZXQgQ1A4NTAiCisrCWVjaG8gImV0X0VFIENQODUwIgorKwllY2hvICJldSBDUDg1MCIKKysJZWNobyAiZXVfRVMgQ1A4NTAiCisrCWVjaG8gImZpIENQODUwIgorKwllY2hvICJmaV9GSSBDUDg1MCIKKysJZWNobyAiZnIgQ1A4NTAiCisrCWVjaG8gImZyX0JFIENQODUwIgorKwllY2hvICJmcl9DQSBDUDg1MCIKKysJZWNobyAiZnJfQ0ggQ1A4NTAiCisrCWVjaG8gImZyX0ZSIENQODUwIgorKwllY2hvICJnYSBDUDg1MCIKKysJZWNobyAiZ2FfSUUgQ1A4NTAiCisrCWVjaG8gImdkIENQODUwIgorKwllY2hvICJnZF9HQiBDUDg1MCIKKysJZWNobyAiZ2wgQ1A4NTAiCisrCWVjaG8gImdsX0VTIENQODUwIgorKwllY2hvICJpZCBDUDg1MCIgICAgIyBub3QgQ1A0MzcgPz8KKysJZWNobyAiaWRfSUQgQ1A4NTAiICMgbm90IENQNDM3ID8/CisrCWVjaG8gImlzIENQODYxIiAgICAjIG5vdCBDUDg1MCA/PworKwllY2hvICJpc19JUyBDUDg2MSIgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAiaXQgQ1A4NTAiCisrCWVjaG8gIml0X0NIIENQODUwIgorKwllY2hvICJpdF9JVCBDUDg1MCIKKysJZWNobyAibHQgQ1A3NzUiCisrCWVjaG8gImx0X0xUIENQNzc1IgorKwllY2hvICJsdiBDUDc3NSIKKysJZWNobyAibHZfTFYgQ1A3NzUiCisrCWVjaG8gIm5iIENQODY1IiAgICAjIG5vdCBDUDg1MCA/PworKwllY2hvICJuYl9OTyBDUDg2NSIgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAibmwgQ1A4NTAiCisrCWVjaG8gIm5sX0JFIENQODUwIgorKwllY2hvICJubF9OTCBDUDg1MCIKKysJZWNobyAibm4gQ1A4NjUiICAgICMgbm90IENQODUwID8/CisrCWVjaG8gIm5uX05PIENQODY1IiAjIG5vdCBDUDg1MCA/PworKwllY2hvICJubyBDUDg2NSIgICAgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAibm9fTk8gQ1A4NjUiICMgbm90IENQODUwID8/CisrCWVjaG8gInB0IENQODUwIgorKwllY2hvICJwdF9CUiBDUDg1MCIKKysJZWNobyAicHRfUFQgQ1A4NTAiCisrCWVjaG8gInN2IENQODUwIgorKwllY2hvICJzdl9TRSBDUDg1MCIKKysJIyBJU08tODg1OS0yIGxhbmd1YWdlcworKwllY2hvICJjcyBDUDg1MiIKKysJZWNobyAiY3NfQ1ogQ1A4NTIiCisrCWVjaG8gImhyIENQODUyIgorKwllY2hvICJocl9IUiBDUDg1MiIKKysJZWNobyAiaHUgQ1A4NTIiCisrCWVjaG8gImh1X0hVIENQODUyIgorKwllY2hvICJwbCBDUDg1MiIKKysJZWNobyAicGxfUEwgQ1A4NTIiCisrCWVjaG8gInJvIENQODUyIgorKwllY2hvICJyb19STyBDUDg1MiIKKysJZWNobyAic2sgQ1A4NTIiCisrCWVjaG8gInNrX1NLIENQODUyIgorKwllY2hvICJzbCBDUDg1MiIKKysJZWNobyAic2xfU0kgQ1A4NTIiCisrCWVjaG8gInNxIENQODUyIgorKwllY2hvICJzcV9BTCBDUDg1MiIKKysJZWNobyAic3IgQ1A4NTIiICAgICMgQ1A4NTIgb3IgQ1A4NjYgb3IgQ1A4NTUgPz8KKysJZWNobyAic3JfQ1MgQ1A4NTIiICMgQ1A4NTIgb3IgQ1A4NjYgb3IgQ1A4NTUgPz8KKysJZWNobyAic3JfWVUgQ1A4NTIiICMgQ1A4NTIgb3IgQ1A4NjYgb3IgQ1A4NTUgPz8KKysJIyBJU08tODg1OS0zIGxhbmd1YWdlcworKwllY2hvICJtdCBDUDg1MCIKKysJZWNobyAibXRfTVQgQ1A4NTAiCisrCSMgSVNPLTg4NTktNSBsYW5ndWFnZXMKKysJZWNobyAiYmUgQ1A4NjYiCisrCWVjaG8gImJlX0JFIENQODY2IgorKwllY2hvICJiZyBDUDg2NiIgICAgIyBub3QgQ1A4NTUgPz8KKysJZWNobyAiYmdfQkcgQ1A4NjYiICMgbm90IENQODU1ID8/CisrCWVjaG8gIm1rIENQODY2IiAgICAjIG5vdCBDUDg1NSA/PworKwllY2hvICJta19NSyBDUDg2NiIgIyBub3QgQ1A4NTUgPz8KKysJZWNobyAicnUgQ1A4NjYiCisrCWVjaG8gInJ1X1JVIENQODY2IgorKwllY2hvICJ1ayBDUDExMjUiCisrCWVjaG8gInVrX1VBIENQMTEyNSIKKysJIyBJU08tODg1OS02IGxhbmd1YWdlcworKwllY2hvICJhciBDUDg2NCIKKysJZWNobyAiYXJfQUUgQ1A4NjQiCisrCWVjaG8gImFyX0RaIENQODY0IgorKwllY2hvICJhcl9FRyBDUDg2NCIKKysJZWNobyAiYXJfSVEgQ1A4NjQiCisrCWVjaG8gImFyX0lSIENQODY0IgorKwllY2hvICJhcl9KTyBDUDg2NCIKKysJZWNobyAiYXJfS1cgQ1A4NjQiCisrCWVjaG8gImFyX01BIENQODY0IgorKwllY2hvICJhcl9PTSBDUDg2NCIKKysJZWNobyAiYXJfUUEgQ1A4NjQiCisrCWVjaG8gImFyX1NBIENQODY0IgorKwllY2hvICJhcl9TWSBDUDg2NCIKKysJIyBJU08tODg1OS03IGxhbmd1YWdlcworKwllY2hvICJlbCBDUDg2OSIKKysJZWNobyAiZWxfR1IgQ1A4NjkiCisrCSMgSVNPLTg4NTktOCBsYW5ndWFnZXMKKysJZWNobyAiaGUgQ1A4NjIiCisrCWVjaG8gImhlX0lMIENQODYyIgorKwkjIElTTy04ODU5LTkgbGFuZ3VhZ2VzCisrCWVjaG8gInRyIENQODU3IgorKwllY2hvICJ0cl9UUiBDUDg1NyIKKysJIyBKYXBhbmVzZQorKwllY2hvICJqYSBDUDkzMiIKKysJZWNobyAiamFfSlAgQ1A5MzIiCisrCSMgQ2hpbmVzZQorKwllY2hvICJ6aF9DTiBHQksiCisrCWVjaG8gInpoX1RXIENQOTUwIiAjIG5vdCBDUDkzOCA/PworKwkjIEtvcmVhbgorKwllY2hvICJrciBDUDk0OSIgICAgIyBub3QgQ1A5MzQgPz8KKysJZWNobyAia3JfS1IgQ1A5NDkiICMgbm90IENQOTM0ID8/CisrCSMgVGhhaQorKwllY2hvICJ0aCBDUDg3NCIKKysJZWNobyAidGhfVEggQ1A4NzQiCisrCSMgT3RoZXIKKysJZWNobyAiZW8gQ1A4NTAiCisrCWVjaG8gImVvX0VPIENQODUwIgorKwk7OworK2VzYWMKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9kY2dldHRleHQuYwkxOTk4LTA0LTI2IDA5OjIyOjM2LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9kY2dldHRleHQuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjM1OTc0NzQ4MCAtMDQwMAorQEAgLTEsNTkzICsxLDU2IEBACistLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGRjZ2V0dGV4dCgzKSBmdW5jdGlvbgorLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGNnZXR0ZXh0KDMpIGZ1bmN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorICNpZmRlZiBIQVZFX0NPTkZJR19ICisgIyBpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistCistI2lmZGVmIF9fR05VQ19fCistIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKy0jIGRlZmluZSBIQVZFX0FMTE9DQSAxCistI2Vsc2UKKy0jIGlmIGRlZmluZWQgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCistIyAgaW5jbHVkZSA8YWxsb2NhLmg+CistIyBlbHNlCistIyAgaWZkZWYgX0FJWAorLSAjcHJhZ21hIGFsbG9jYQorLSMgIGVsc2UKKy0jICAgaWZuZGVmIGFsbG9jYQorLWNoYXIgKmFsbG9jYSAoKTsKKy0jICAgZW5kaWYKKy0jICBlbmRpZgorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0jaW5jbHVkZSA8ZXJybm8uaD4KKy0jaWZuZGVmIGVycm5vCistZXh0ZXJuIGludCBlcnJubzsKKy0jZW5kaWYKKy0jaWZuZGVmIF9fc2V0X2Vycm5vCistIyBkZWZpbmUgX19zZXRfZXJybm8odmFsKSBlcnJubyA9ICh2YWwpCistI2VuZGlmCistCistI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHN0ZGxpYi5oPgorLSNlbHNlCistY2hhciAqZ2V0ZW52ICgpOworLSMgaWZkZWYgSEFWRV9NQUxMT0NfSAorLSMgIGluY2x1ZGUgPG1hbGxvYy5oPgorLSMgZWxzZQorLXZvaWQgZnJlZSAoKTsKKy0jIGVuZGlmCistI2VuZGlmCistCistI2lmIGRlZmluZWQgSEFWRV9TVFJJTkdfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgX0dOVV9TT1VSQ0UKKy0jICBkZWZpbmUgX0dOVV9TT1VSQ0UJMQorLSMgZW5kaWYKKy0jIGluY2x1ZGUgPHN0cmluZy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxzdHJpbmdzLmg+CistI2VuZGlmCistI2lmICFIQVZFX1NUUkNIUiAmJiAhZGVmaW5lZCBfTElCQworLSMgaWZuZGVmIHN0cmNocgorLSMgIGRlZmluZSBzdHJjaHIgaW5kZXgKKy0jIGVuZGlmCistI2VuZGlmCistCistI2lmIGRlZmluZWQgSEFWRV9VTklTVERfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDx1bmlzdGQuaD4KKy0jZW5kaWYKKy0KKy0jaW5jbHVkZSAiZ2V0dGV4dC5oIgorICNpbmNsdWRlICJnZXR0ZXh0UC5oIgorICNpZmRlZiBfTElCQworICMgaW5jbHVkZSA8bGliaW50bC5oPgorICNlbHNlCistIyBpbmNsdWRlICJsaWJnZXR0ZXh0LmgiCisrIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisgI2VuZGlmCistI2luY2x1ZGUgImhhc2gtc3RyaW5nLmgiCisgCisgLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworIAorLSNpZmRlZiBfTElCQworLS8qIFJlbmFtZSB0aGUgbm9uIEFOU0kgQyBmdW5jdGlvbnMuICBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZAorLSAgIGJlY2F1c2Ugc29tZSBBTlNJIEMgZnVuY3Rpb25zIHdpbGwgcmVxdWlyZSBsaW5raW5nIHdpdGggdGhpcyBvYmplY3QKKy0gICBmaWxlIGFuZCB0aGUgbmFtZSBzcGFjZSBtdXN0IG5vdCBiZSBwb2xsdXRlZC4gICovCistIyBkZWZpbmUgZ2V0Y3dkIF9fZ2V0Y3dkCistIyBkZWZpbmUgc3RwY3B5IF9fc3RwY3B5CistI2Vsc2UKKy0jIGlmICFkZWZpbmVkIEhBVkVfR0VUQ1dECistY2hhciAqZ2V0d2QgKCk7CistIyAgZGVmaW5lIGdldGN3ZChidWYsIG1heCkgZ2V0d2QgKGJ1ZikKKy0jIGVsc2UKKy1jaGFyICpnZXRjd2QgKCk7CistIyBlbmRpZgorLSMgaWZuZGVmIEhBVkVfU1RQQ1BZCistc3RhdGljIGNoYXIgKnN0cGNweSBQQVJBTVMgKChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpKTsKKy0jIGVuZGlmCistI2VuZGlmCistCistLyogQW1vdW50IHRvIGluY3JlYXNlIGJ1ZmZlciBzaXplIGJ5IGluIGVhY2ggdHJ5LiAgKi8KKy0jZGVmaW5lIFBBVEhfSU5DUiAzMgorLQorLS8qIFRoZSBmb2xsb3dpbmcgaXMgZnJvbSBwYXRobWF4LmguICAqLworLS8qIE5vbi1QT1NJWCBCU0Qgc3lzdGVtcyBtaWdodCBoYXZlIGdjYydzIGxpbWl0cy5oLCB3aGljaCBkb2Vzbid0IGRlZmluZQorLSAgIFBBVEhfTUFYIGJ1dCBtaWdodCBjYXVzZSByZWRlZmluaXRpb24gd2FybmluZ3Mgd2hlbiBzeXMvcGFyYW0uaCBpcworLSAgIGxhdGVyIGluY2x1ZGVkIChhcyBvbiBNT1JFL0JTRCA0LjMpLiAgKi8KKy0jaWYgZGVmaW5lZChfUE9TSVhfVkVSU0lPTikgfHwgKGRlZmluZWQoSEFWRV9MSU1JVFNfSCkgJiYgIWRlZmluZWQoX19HTlVDX18pKQorLSMgaW5jbHVkZSA8bGltaXRzLmg+CistI2VuZGlmCistCistI2lmbmRlZiBfUE9TSVhfUEFUSF9NQVgKKy0jIGRlZmluZSBfUE9TSVhfUEFUSF9NQVggMjU1CistI2VuZGlmCistCistI2lmICFkZWZpbmVkKFBBVEhfTUFYKSAmJiBkZWZpbmVkKF9QQ19QQVRIX01BWCkKKy0jIGRlZmluZSBQQVRIX01BWCAocGF0aGNvbmYgKCIvIiwgX1BDX1BBVEhfTUFYKSA8IDEgPyAxMDI0IDogcGF0aGNvbmYgKCIvIiwgX1BDX1BBVEhfTUFYKSkKKy0jZW5kaWYKKy0KKy0vKiBEb24ndCBpbmNsdWRlIHN5cy9wYXJhbS5oIGlmIGl0IGFscmVhZHkgaGFzIGJlZW4uICAqLworLSNpZiBkZWZpbmVkKEhBVkVfU1lTX1BBUkFNX0gpICYmICFkZWZpbmVkKFBBVEhfTUFYKSAmJiAhZGVmaW5lZChNQVhQQVRITEVOKQorLSMgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CistI2VuZGlmCistCistI2lmICFkZWZpbmVkKFBBVEhfTUFYKSAmJiBkZWZpbmVkKE1BWFBBVEhMRU4pCistIyBkZWZpbmUgUEFUSF9NQVggTUFYUEFUSExFTgorLSNlbmRpZgorLQorLSNpZm5kZWYgUEFUSF9NQVgKKy0jIGRlZmluZSBQQVRIX01BWCBfUE9TSVhfUEFUSF9NQVgKKy0jZW5kaWYKKy0KKy0vKiBYUEczIGRlZmluZXMgdGhlIHJlc3VsdCBvZiBgc2V0bG9jYWxlIChjYXRlZ29yeSwgTlVMTCknIGFzOgorLSAgIGBgRGlyZWN0cyBgc2V0bG9jYWxlKCknIHRvIHF1ZXJ5IGBjYXRlZ29yeScgYW5kIHJldHVybiB0aGUgY3VycmVudAorLSAgICAgc2V0dGluZyBvZiBgbG9jYWwnLicnCistICAgSG93ZXZlciBpdCBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBleGFjdCBmb3JtYXQuICBBbmQgZXZlbiB3b3JzZTogUE9TSVgKKy0gICBkZWZpbmVzIHRoaXMgbm90IGF0IGFsbC4gIFNvIHdlIGNhbiB1c2UgdGhpcyBmZWF0dXJlIG9ubHkgb24gc2VsZWN0ZWQKKy0gICBzeXN0ZW0gKGUuZy4gdGhvc2UgdXNpbmcgR05VIEMgTGlicmFyeSkuICAqLworLSNpZmRlZiBfTElCQworLSMgZGVmaW5lIEhBVkVfTE9DQUxFX05VTEwKKy0jZW5kaWYKKy0KKy0vKiBOYW1lIG9mIHRoZSBkZWZhdWx0IGRvbWFpbiB1c2VkIGZvciBnZXR0ZXh0KDMpIHByaW9yIGFueSBjYWxsIHRvCistICAgdGV4dGRvbWFpbigzKS4gIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIGlzICJtZXNzYWdlcyIuICAqLworLWNvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW5bXSA9ICJtZXNzYWdlcyI7CistCistLyogVmFsdWUgdXNlZCBhcyB0aGUgZGVmYXVsdCBkb21haW4gZm9yIGdldHRleHQoMykuICAqLworLWNvbnN0IGNoYXIgKl9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluID0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW47CistCistLyogQ29udGFpbnMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIG1lc3NhZ2UgY2F0YWxvZ3MuICAqLworLWNvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGlybmFtZVtdID0gR05VTE9DQUxFRElSOworLQorLS8qIExpc3Qgd2l0aCBiaW5kaW5ncyBvZiBzcGVjaWZpYyBkb21haW5zIGNyZWF0ZWQgYnkgYmluZHRleHRkb21haW4oKQorLSAgIGNhbGxzLiAgKi8KKy1zdHJ1Y3QgYmluZGluZyAqX25sX2RvbWFpbl9iaW5kaW5nczsKKy0KKy0vKiBQcm90b3R5cGVzIGZvciBsb2NhbCBmdW5jdGlvbnMuICAqLworLXN0YXRpYyBjaGFyICpmaW5kX21zZyBQQVJBTVMgKChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZSwKKy0JCQkgICAgICAgY29uc3QgY2hhciAqbXNnaWQpKTsKKy1zdGF0aWMgY29uc3QgY2hhciAqY2F0ZWdvcnlfdG9fbmFtZSBQQVJBTVMgKChpbnQgY2F0ZWdvcnkpKTsKKy1zdGF0aWMgY29uc3QgY2hhciAqZ3Vlc3NfY2F0ZWdvcnlfdmFsdWUgUEFSQU1TICgoaW50IGNhdGVnb3J5LAorLQkJCQkJCSBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWUpKTsKKy0KKy0KKy0vKiBGb3IgdGhvc2UgbG9vc2luZyBzeXN0ZW1zIHdoaWNoIGRvbid0IGhhdmUgYGFsbG9jYScgd2UgaGF2ZSB0byBhZGQKKy0gICBzb21lIGFkZGl0aW9uYWwgY29kZSBlbXVsYXRpbmcgaXQuICAqLworLSNpZmRlZiBIQVZFX0FMTE9DQQorLS8qIE5vdGhpbmcgaGFzIHRvIGJlIGRvbmUuICAqLworLSMgZGVmaW5lIEFERF9CTE9DSyhsaXN0LCBhZGRyZXNzKSAvKiBub3RoaW5nICovCistIyBkZWZpbmUgRlJFRV9CTE9DS1MobGlzdCkgLyogbm90aGluZyAqLworLSNlbHNlCistc3RydWN0IGJsb2NrX2xpc3QKKy17CistICB2b2lkICphZGRyZXNzOworLSAgc3RydWN0IGJsb2NrX2xpc3QgKm5leHQ7CistfTsKKy0jIGRlZmluZSBBRERfQkxPQ0sobGlzdCwgYWRkcikJCQkJCQkgICAgICBcCistICBkbyB7CQkJCQkJCQkJICAgICAgXAorLSAgICBzdHJ1Y3QgYmxvY2tfbGlzdCAqbmV3cCA9IChzdHJ1Y3QgYmxvY2tfbGlzdCAqKSBtYWxsb2MgKHNpemVvZiAoKm5ld3ApKTsgIFwKKy0gICAgLyogSWYgd2UgY2Fubm90IGdldCBhIGZyZWUgYmxvY2sgd2UgY2Fubm90IGFkZCB0aGUgbmV3IGVsZW1lbnQgdG8JICAgICAgXAorLSAgICAgICB0aGUgbGlzdC4gICovCQkJCQkJCSAgICAgIFwKKy0gICAgaWYgKG5ld3AgIT0gTlVMTCkgewkJCQkJCQkgICAgICBcCistICAgICAgbmV3cC0+YWRkcmVzcyA9IChhZGRyKTsJCQkJCQkgICAgICBcCistICAgICAgbmV3cC0+bmV4dCA9IChsaXN0KTsJCQkJCQkgICAgICBcCistICAgICAgKGxpc3QpID0gbmV3cDsJCQkJCQkJICAgICAgXAorLSAgICB9CQkJCQkJCQkJICAgICAgXAorLSAgfSB3aGlsZSAoMCkKKy0jIGRlZmluZSBGUkVFX0JMT0NLUyhsaXN0KQkJCQkJCSAgICAgIFwKKy0gIGRvIHsJCQkJCQkJCQkgICAgICBcCistICAgIHdoaWxlIChsaXN0ICE9IE5VTEwpIHsJCQkJCQkgICAgICBcCistICAgICAgc3RydWN0IGJsb2NrX2xpc3QgKm9sZCA9IGxpc3Q7CQkJCQkgICAgICBcCistICAgICAgbGlzdCA9IGxpc3QtPm5leHQ7CQkJCQkJICAgICAgXAorLSAgICAgIGZyZWUgKG9sZCk7CQkJCQkJCSAgICAgIFwKKy0gICAgfQkJCQkJCQkJCSAgICAgIFwKKy0gIH0gd2hpbGUgKDApCistIyB1bmRlZiBhbGxvY2EKKy0jIGRlZmluZSBhbGxvY2Eoc2l6ZSkgKG1hbGxvYyAoc2l6ZSkpCistI2VuZGlmCS8qIGhhdmUgYWxsb2NhICovCistCistCisgLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorICAgIHdpdGggZXhpc3RpbmcgbmFtZXMgYW5kIHRoZXkgc2hvdWxkIGZvbGxvdyBBTlNJIEMuICBCdXQgdGhpcyBzb3VyY2UKKyAgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKyAgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworICNpZmRlZiBfTElCQworICMgZGVmaW5lIERDR0VUVEVYVCBfX2RjZ2V0dGV4dAorKyMgZGVmaW5lIERDSUdFVFRFWFQgX19kY2lnZXR0ZXh0CisgI2Vsc2UKKy0jIGRlZmluZSBEQ0dFVFRFWFQgZGNnZXR0ZXh0X18KKysjIGRlZmluZSBEQ0dFVFRFWFQgbGliaW50bF9kY2dldHRleHQKKysjIGRlZmluZSBEQ0lHRVRURVhUIGxpYmludGxfZGNpZ2V0dGV4dAorICNlbmRpZgorIAorIC8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudCBDQVRFR09SWQorICAgIGxvY2FsZS4gICovCisgY2hhciAqCistRENHRVRURVhUIChkb21haW5uYW1lLCBtc2dpZCwgY2F0ZWdvcnkpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworLSAgICAgY29uc3QgY2hhciAqbXNnaWQ7CistICAgICBpbnQgY2F0ZWdvcnk7CisrRENHRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KQorIHsKKy0jaWZuZGVmIEhBVkVfQUxMT0NBCistICBzdHJ1Y3QgYmxvY2tfbGlzdCAqYmxvY2tfbGlzdCA9IE5VTEw7CistI2VuZGlmCistICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW47CistICBzdHJ1Y3QgYmluZGluZyAqYmluZGluZzsKKy0gIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZTsKKy0gIGNvbnN0IGNoYXIgKmNhdGVnb3J5dmFsdWU7CistICBjaGFyICpkaXJuYW1lLCAqeGRvbWFpbm5hbWU7CistICBjaGFyICpzaW5nbGVfbG9jYWxlOworLSAgY2hhciAqcmV0dmFsOworLSAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87CistCistICAvKiBJZiBubyByZWFsIE1TR0lEIGlzIGdpdmVuIHJldHVybiBOVUxMLiAgKi8KKy0gIGlmIChtc2dpZCA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0KKy0gIC8qIElmIERPTUFJTk5BTUUgaXMgTlVMTCwgd2UgYXJlIGludGVyZXN0ZWQgaW4gdGhlIGRlZmF1bHQgZG9tYWluLiAgSWYKKy0gICAgIENBVEVHT1JZIGlzIG5vdCBMQ19NRVNTQUdFUyB0aGlzIG1pZ2h0IG5vdCBtYWtlIG11Y2ggc2Vuc2UgYnV0IHRoZQorLSAgICAgZGVmaW50aW9uIGxlZnQgdGhpcyB1bmRlZmluZWQuICAqLworLSAgaWYgKGRvbWFpbm5hbWUgPT0gTlVMTCkKKy0gICAgZG9tYWlubmFtZSA9IF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworLQorLSAgLyogRmlyc3QgZmluZCBtYXRjaGluZyBiaW5kaW5nLiAgKi8KKy0gIGZvciAoYmluZGluZyA9IF9ubF9kb21haW5fYmluZGluZ3M7IGJpbmRpbmcgIT0gTlVMTDsgYmluZGluZyA9IGJpbmRpbmctPm5leHQpCistICAgIHsKKy0gICAgICBpbnQgY29tcGFyZSA9IHN0cmNtcCAoZG9tYWlubmFtZSwgYmluZGluZy0+ZG9tYWlubmFtZSk7CistICAgICAgaWYgKGNvbXBhcmUgPT0gMCkKKy0JLyogV2UgZm91bmQgaXQhICAqLworLQlicmVhazsKKy0gICAgICBpZiAoY29tcGFyZSA8IDApCistCXsKKy0JICAvKiBJdCBpcyBub3QgaW4gdGhlIGxpc3QuICAqLworLQkgIGJpbmRpbmcgPSBOVUxMOworLQkgIGJyZWFrOworLQl9CistICAgIH0KKy0KKy0gIGlmIChiaW5kaW5nID09IE5VTEwpCistICAgIGRpcm5hbWUgPSAoY2hhciAqKSBfbmxfZGVmYXVsdF9kaXJuYW1lOworLSAgZWxzZSBpZiAoYmluZGluZy0+ZGlybmFtZVswXSA9PSAnLycpCistICAgIGRpcm5hbWUgPSBiaW5kaW5nLT5kaXJuYW1lOworLSAgZWxzZQorLSAgICB7CistICAgICAgLyogV2UgaGF2ZSBhIHJlbGF0aXZlIHBhdGguICBNYWtlIGl0IGFic29sdXRlIG5vdy4gICovCistICAgICAgc2l6ZV90IGRpcm5hbWVfbGVuID0gc3RybGVuIChiaW5kaW5nLT5kaXJuYW1lKSArIDE7CistICAgICAgc2l6ZV90IHBhdGhfbWF4OworLSAgICAgIGNoYXIgKnJldDsKKy0KKy0gICAgICBwYXRoX21heCA9ICh1bnNpZ25lZCkgUEFUSF9NQVg7CistICAgICAgcGF0aF9tYXggKz0gMjsJCS8qIFRoZSBnZXRjd2QgZG9jcyBzYXkgdG8gZG8gdGhpcy4gICovCistCistICAgICAgZGlybmFtZSA9IChjaGFyICopIGFsbG9jYSAocGF0aF9tYXggKyBkaXJuYW1lX2xlbik7CistICAgICAgQUREX0JMT0NLIChibG9ja19saXN0LCBkaXJuYW1lKTsKKy0KKy0gICAgICBfX3NldF9lcnJubyAoMCk7CistICAgICAgd2hpbGUgKChyZXQgPSBnZXRjd2QgKGRpcm5hbWUsIHBhdGhfbWF4KSkgPT0gTlVMTCAmJiBlcnJubyA9PSBFUkFOR0UpCistCXsKKy0JICBwYXRoX21heCArPSBQQVRIX0lOQ1I7CistCSAgZGlybmFtZSA9IChjaGFyICopIGFsbG9jYSAocGF0aF9tYXggKyBkaXJuYW1lX2xlbik7CistCSAgQUREX0JMT0NLIChibG9ja19saXN0LCBkaXJuYW1lKTsKKy0JICBfX3NldF9lcnJubyAoMCk7CistCX0KKy0KKy0gICAgICBpZiAocmV0ID09IE5VTEwpCistCXsKKy0JICAvKiBXZSBjYW5ub3QgZ2V0IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiAgRG9uJ3Qgc2lnbmFsIGFuCistCSAgICAgZXJyb3IgYnV0IHNpbXBseSByZXR1cm4gdGhlIGRlZmF1bHQgc3RyaW5nLiAgKi8KKy0JICBGUkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CistCSAgX19zZXRfZXJybm8gKHNhdmVkX2Vycm5vKTsKKy0JICByZXR1cm4gKGNoYXIgKikgbXNnaWQ7CistCX0KKy0KKy0gICAgICBzdHBjcHkgKHN0cGNweSAoc3RyY2hyIChkaXJuYW1lLCAnXDAnKSwgIi8iKSwgYmluZGluZy0+ZGlybmFtZSk7CistICAgIH0KKy0KKy0gIC8qIE5vdyBkZXRlcm1pbmUgdGhlIHN5bWJvbGljIG5hbWUgb2YgQ0FURUdPUlkgYW5kIGl0cyB2YWx1ZS4gICovCistICBjYXRlZ29yeW5hbWUgPSBjYXRlZ29yeV90b19uYW1lIChjYXRlZ29yeSk7CistICBjYXRlZ29yeXZhbHVlID0gZ3Vlc3NfY2F0ZWdvcnlfdmFsdWUgKGNhdGVnb3J5LCBjYXRlZ29yeW5hbWUpOworLQorLSAgeGRvbWFpbm5hbWUgPSAoY2hhciAqKSBhbGxvY2EgKHN0cmxlbiAoY2F0ZWdvcnluYW1lKQorLQkJCQkgKyBzdHJsZW4gKGRvbWFpbm5hbWUpICsgNSk7CistICBBRERfQkxPQ0sgKGJsb2NrX2xpc3QsIHhkb21haW5uYW1lKTsKKy0KKy0gIHN0cGNweSAoc3RwY3B5IChzdHBjcHkgKHN0cGNweSAoeGRvbWFpbm5hbWUsIGNhdGVnb3J5bmFtZSksICIvIiksCistCQkgIGRvbWFpbm5hbWUpLAorLQkgICIubW8iKTsKKy0KKy0gIC8qIENyZWF0aW5nIHdvcmtpbmcgYXJlYS4gICovCistICBzaW5nbGVfbG9jYWxlID0gKGNoYXIgKikgYWxsb2NhIChzdHJsZW4gKGNhdGVnb3J5dmFsdWUpICsgMSk7CistICBBRERfQkxPQ0sgKGJsb2NrX2xpc3QsIHNpbmdsZV9sb2NhbGUpOworLQorLQorLSAgLyogU2VhcmNoIGZvciB0aGUgZ2l2ZW4gc3RyaW5nLiAgVGhpcyBpcyBhIGxvb3AgYmVjYXVzZSB3ZSBwZXJoYXBzCistICAgICBnb3QgYW4gb3JkZXJlZCBsaXN0IG9mIGxhbmd1YWdlcyB0byBjb25zaWRlciBmb3IgdGggdHJhbnNsYXRpb24uICAqLworLSAgd2hpbGUgKDEpCistICAgIHsKKy0gICAgICAvKiBNYWtlIENBVEVHT1JZVkFMVUUgcG9pbnQgdG8gdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgbGlzdC4gICovCistICAgICAgd2hpbGUgKGNhdGVnb3J5dmFsdWVbMF0gIT0gJ1wwJyAmJiBjYXRlZ29yeXZhbHVlWzBdID09ICc6JykKKy0JKytjYXRlZ29yeXZhbHVlOworLSAgICAgIGlmIChjYXRlZ29yeXZhbHVlWzBdID09ICdcMCcpCistCXsKKy0JICAvKiBUaGUgd2hvbGUgY29udGVudHMgb2YgQ0FURUdPUllWQUxVRSBoYXMgYmVlbiBzZWFyY2hlZCBidXQKKy0JICAgICBubyB2YWxpZCBlbnRyeSBoYXMgYmVlbiBmb3VuZC4gIFdlIHNvbHZlIHRoaXMgc2l0dWF0aW9uCistCSAgICAgYnkgaW1wbGljaXRseSBhcHBlbmRpbmcgYSAiQyIgZW50cnksIGkuZS4gbm8gdHJhbnNsYXRpb24KKy0JICAgICB3aWxsIHRha2UgcGxhY2UuICAqLworLQkgIHNpbmdsZV9sb2NhbGVbMF0gPSAnQyc7CistCSAgc2luZ2xlX2xvY2FsZVsxXSA9ICdcMCc7CistCX0KKy0gICAgICBlbHNlCistCXsKKy0JICBjaGFyICpjcCA9IHNpbmdsZV9sb2NhbGU7CistCSAgd2hpbGUgKGNhdGVnb3J5dmFsdWVbMF0gIT0gJ1wwJyAmJiBjYXRlZ29yeXZhbHVlWzBdICE9ICc6JykKKy0JICAgICpjcCsrID0gKmNhdGVnb3J5dmFsdWUrKzsKKy0JICAqY3AgPSAnXDAnOworLQl9CistCistICAgICAgLyogSWYgdGhlIGN1cnJlbnQgbG9jYWxlIHZhbHVlIGlzIEMgKG9yIFBPU0lYKSB3ZSBkb24ndCBsb2FkIGEKKy0JIGRvbWFpbi4gIFJldHVybiB0aGUgTVNHSUQuICAqLworLSAgICAgIGlmIChzdHJjbXAgKHNpbmdsZV9sb2NhbGUsICJDIikgPT0gMAorLQkgIHx8IHN0cmNtcCAoc2luZ2xlX2xvY2FsZSwgIlBPU0lYIikgPT0gMCkKKy0JeworLQkgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKy0JICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOworLQkgIHJldHVybiAoY2hhciAqKSBtc2dpZDsKKy0JfQorLQorLQorLSAgICAgIC8qIEZpbmQgc3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgY2F0YWxvZyBtYXRjaGluZyB0aGUKKy0JIERPTUFJTk5BTUUgYW5kIENBVEVHT1JZLiAgKi8KKy0gICAgICBkb21haW4gPSBfbmxfZmluZF9kb21haW4gKGRpcm5hbWUsIHNpbmdsZV9sb2NhbGUsIHhkb21haW5uYW1lKTsKKy0KKy0gICAgICBpZiAoZG9tYWluICE9IE5VTEwpCistCXsKKy0JICByZXR2YWwgPSBmaW5kX21zZyAoZG9tYWluLCBtc2dpZCk7CistCistCSAgaWYgKHJldHZhbCA9PSBOVUxMKQorLQkgICAgeworLQkgICAgICBpbnQgY250OworLQorLQkgICAgICBmb3IgKGNudCA9IDA7IGRvbWFpbi0+c3VjY2Vzc29yW2NudF0gIT0gTlVMTDsgKytjbnQpCistCQl7CistCQkgIHJldHZhbCA9IGZpbmRfbXNnIChkb21haW4tPnN1Y2Nlc3NvcltjbnRdLCBtc2dpZCk7CistCistCQkgIGlmIChyZXR2YWwgIT0gTlVMTCkKKy0JCSAgICBicmVhazsKKy0JCX0KKy0JICAgIH0KKy0KKy0JICBpZiAocmV0dmFsICE9IE5VTEwpCistCSAgICB7CistCSAgICAgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKy0JICAgICAgX19zZXRfZXJybm8gKHNhdmVkX2Vycm5vKTsKKy0JICAgICAgcmV0dXJuIHJldHZhbDsKKy0JICAgIH0KKy0JfQorLSAgICB9CistICAvKiBOT1RSRUFDSEVEICovCisrICByZXR1cm4gRENJR0VUVEVYVCAoZG9tYWlubmFtZSwgbXNnaWQsIE5VTEwsIDAsIDAsIGNhdGVnb3J5KTsKKyB9CisgCisgI2lmZGVmIF9MSUJDCisgLyogQWxpYXMgZm9yIGZ1bmN0aW9uIG5hbWUgaW4gR05VIEMgTGlicmFyeS4gICovCisrSU5UREVGKF9fZGNnZXR0ZXh0KQorIHdlYWtfYWxpYXMgKF9fZGNnZXR0ZXh0LCBkY2dldHRleHQpOworICNlbmRpZgorLQorLQorLXN0YXRpYyBjaGFyICoKKy1maW5kX21zZyAoZG9tYWluX2ZpbGUsIG1zZ2lkKQorLSAgICAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluX2ZpbGU7CistICAgICBjb25zdCBjaGFyICptc2dpZDsKKy17CistICBzaXplX3QgdG9wLCBhY3QsIGJvdHRvbTsKKy0gIHN0cnVjdCBsb2FkZWRfZG9tYWluICpkb21haW47CistCistICBpZiAoZG9tYWluX2ZpbGUtPmRlY2lkZWQgPT0gMCkKKy0gICAgX25sX2xvYWRfZG9tYWluIChkb21haW5fZmlsZSk7CistCistICBpZiAoZG9tYWluX2ZpbGUtPmRhdGEgPT0gTlVMTCkKKy0gICAgcmV0dXJuIE5VTEw7CistCistICBkb21haW4gPSAoc3RydWN0IGxvYWRlZF9kb21haW4gKikgZG9tYWluX2ZpbGUtPmRhdGE7CistCistICAvKiBMb2NhdGUgdGhlIE1TR0lEIGFuZCBpdHMgdHJhbnNsYXRpb24uICAqLworLSAgaWYgKGRvbWFpbi0+aGFzaF9zaXplID4gMiAmJiBkb21haW4tPmhhc2hfdGFiICE9IE5VTEwpCistICAgIHsKKy0gICAgICAvKiBVc2UgdGhlIGhhc2hpbmcgdGFibGUuICAqLworLSAgICAgIG5sc191aW50MzIgbGVuID0gc3RybGVuIChtc2dpZCk7CistICAgICAgbmxzX3VpbnQzMiBoYXNoX3ZhbCA9IGhhc2hfc3RyaW5nIChtc2dpZCk7CistICAgICAgbmxzX3VpbnQzMiBpZHggPSBoYXNoX3ZhbCAlIGRvbWFpbi0+aGFzaF9zaXplOworLSAgICAgIG5sc191aW50MzIgaW5jciA9IDEgKyAoaGFzaF92YWwgJSAoZG9tYWluLT5oYXNoX3NpemUgLSAyKSk7CistICAgICAgbmxzX3VpbnQzMiBuc3RyID0gVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+aGFzaF90YWJbaWR4XSk7CistCistICAgICAgaWYgKG5zdHIgPT0gMCkKKy0JLyogSGFzaCB0YWJsZSBlbnRyeSBpcyBlbXB0eS4gICovCistCXJldHVybiBOVUxMOworLQorLSAgICAgIGlmIChXIChkb21haW4tPm11c3Rfc3dhcCwgZG9tYWluLT5vcmlnX3RhYltuc3RyIC0gMV0ubGVuZ3RoKSA9PSBsZW4KKy0JICAmJiBzdHJjbXAgKG1zZ2lkLAorLQkJICAgICBkb21haW4tPmRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKy0JCQkJICAgICAgIGRvbWFpbi0+b3JpZ190YWJbbnN0ciAtIDFdLm9mZnNldCkpID09IDApCistCXJldHVybiAoY2hhciAqKSBkb21haW4tPmRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKy0JCQkJCSAgZG9tYWluLT50cmFuc190YWJbbnN0ciAtIDFdLm9mZnNldCk7CistCistICAgICAgd2hpbGUgKDEpCistCXsKKy0JICBpZiAoaWR4ID49IGRvbWFpbi0+aGFzaF9zaXplIC0gaW5jcikKKy0JICAgIGlkeCAtPSBkb21haW4tPmhhc2hfc2l6ZSAtIGluY3I7CistCSAgZWxzZQorLQkgICAgaWR4ICs9IGluY3I7CistCistCSAgbnN0ciA9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPmhhc2hfdGFiW2lkeF0pOworLQkgIGlmIChuc3RyID09IDApCistCSAgICAvKiBIYXNoIHRhYmxlIGVudHJ5IGlzIGVtcHR5LiAgKi8KKy0JICAgIHJldHVybiBOVUxMOworLQorLQkgIGlmIChXIChkb21haW4tPm11c3Rfc3dhcCwgZG9tYWluLT5vcmlnX3RhYltuc3RyIC0gMV0ubGVuZ3RoKSA9PSBsZW4KKy0JICAgICAgJiYgc3RyY21wIChtc2dpZCwKKy0JCQkgZG9tYWluLT5kYXRhICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCistCQkJCQkgICBkb21haW4tPm9yaWdfdGFiW25zdHIgLSAxXS5vZmZzZXQpKQorLQkgICAgICAgICA9PSAwKQorLQkgICAgcmV0dXJuIChjaGFyICopIGRvbWFpbi0+ZGF0YQorLQkgICAgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPnRyYW5zX3RhYltuc3RyIC0gMV0ub2Zmc2V0KTsKKy0JfQorLSAgICAgIC8qIE5PVFJFQUNIRUQgKi8KKy0gICAgfQorLQorLSAgLyogTm93IHdlIHRyeSB0aGUgZGVmYXVsdCBtZXRob2Q6ICBiaW5hcnkgc2VhcmNoIGluIHRoZSBzb3J0ZWQKKy0gICAgIGFycmF5IG9mIG1lc3NhZ2VzLiAgKi8KKy0gIGJvdHRvbSA9IDA7CistICB0b3AgPSBkb21haW4tPm5zdHJpbmdzOworLSAgd2hpbGUgKGJvdHRvbSA8IHRvcCkKKy0gICAgeworLSAgICAgIGludCBjbXBfdmFsOworLQorLSAgICAgIGFjdCA9IChib3R0b20gKyB0b3ApIC8gMjsKKy0gICAgICBjbXBfdmFsID0gc3RyY21wIChtc2dpZCwgZG9tYWluLT5kYXRhCistCQkJICAgICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCistCQkJCSAgICBkb21haW4tPm9yaWdfdGFiW2FjdF0ub2Zmc2V0KSk7CistICAgICAgaWYgKGNtcF92YWwgPCAwKQorLQl0b3AgPSBhY3Q7CistICAgICAgZWxzZSBpZiAoY21wX3ZhbCA+IDApCistCWJvdHRvbSA9IGFjdCArIDE7CistICAgICAgZWxzZQorLQlicmVhazsKKy0gICAgfQorLQorLSAgLyogSWYgYW4gdHJhbnNsYXRpb24gaXMgZm91bmQgcmV0dXJuIHRoaXMuICAqLworLSAgcmV0dXJuIGJvdHRvbSA+PSB0b3AgPyBOVUxMIDogKGNoYXIgKikgZG9tYWluLT5kYXRhCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorLQkJCQkgICAgIGRvbWFpbi0+dHJhbnNfdGFiW2FjdF0ub2Zmc2V0KTsKKy19CistCistCistLyogUmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBsb2NhbGUgQ0FURUdPUlkuICAqLworLXN0YXRpYyBjb25zdCBjaGFyICoKKy1jYXRlZ29yeV90b19uYW1lIChjYXRlZ29yeSkKKy0gICAgIGludCBjYXRlZ29yeTsKKy17CistICBjb25zdCBjaGFyICpyZXR2YWw7CistCistICBzd2l0Y2ggKGNhdGVnb3J5KQorLSAgeworLSNpZmRlZiBMQ19DT0xMQVRFCistICBjYXNlIExDX0NPTExBVEU6CistICAgIHJldHZhbCA9ICJMQ19DT0xMQVRFIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistI2lmZGVmIExDX0NUWVBFCistICBjYXNlIExDX0NUWVBFOgorLSAgICByZXR2YWwgPSAiTENfQ1RZUEUiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0jaWZkZWYgTENfTU9ORVRBUlkKKy0gIGNhc2UgTENfTU9ORVRBUlk6CistICAgIHJldHZhbCA9ICJMQ19NT05FVEFSWSI7CistICAgIGJyZWFrOworLSNlbmRpZgorLSNpZmRlZiBMQ19OVU1FUklDCistICBjYXNlIExDX05VTUVSSUM6CistICAgIHJldHZhbCA9ICJMQ19OVU1FUklDIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistI2lmZGVmIExDX1RJTUUKKy0gIGNhc2UgTENfVElNRToKKy0gICAgcmV0dmFsID0gIkxDX1RJTUUiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0jaWZkZWYgTENfTUVTU0FHRVMKKy0gIGNhc2UgTENfTUVTU0FHRVM6CistICAgIHJldHZhbCA9ICJMQ19NRVNTQUdFUyI7CistICAgIGJyZWFrOworLSNlbmRpZgorLSNpZmRlZiBMQ19SRVNQT05TRQorLSAgY2FzZSBMQ19SRVNQT05TRToKKy0gICAgcmV0dmFsID0gIkxDX1JFU1BPTlNFIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistI2lmZGVmIExDX0FMTAorLSAgY2FzZSBMQ19BTEw6CistICAgIC8qIFRoaXMgbWlnaHQgbm90IG1ha2Ugc2Vuc2UgYnV0IGlzIHBlcmhhcHMgYmV0dGVyIHRoYW4gYW55IG90aGVyCistICAgICAgIHZhbHVlLiAgKi8KKy0gICAgcmV0dmFsID0gIkxDX0FMTCI7CistICAgIGJyZWFrOworLSNlbmRpZgorLSAgZGVmYXVsdDoKKy0gICAgLyogSWYgeW91IGhhdmUgYSBiZXR0ZXIgaWRlYSBmb3IgYSBkZWZhdWx0IHZhbHVlIGxldCBtZSBrbm93LiAgKi8KKy0gICAgcmV0dmFsID0gIkxDX1hYWCI7CistICB9CistCistICByZXR1cm4gcmV0dmFsOworLX0KKy0KKy0vKiBHdWVzcyB2YWx1ZSBvZiBjdXJyZW50IGxvY2FsZSBmcm9tIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICAqLworLXN0YXRpYyBjb25zdCBjaGFyICoKKy1ndWVzc19jYXRlZ29yeV92YWx1ZSAoY2F0ZWdvcnksIGNhdGVnb3J5bmFtZSkKKy0gICAgIGludCBjYXRlZ29yeTsKKy0gICAgIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZTsKKy17CistICBjb25zdCBjaGFyICpyZXR2YWw7CistCistICAvKiBUaGUgaGlnaGVzdCBwcmlvcml0eSB2YWx1ZSBpcyB0aGUgYExBTkdVQUdFJyBlbnZpcm9ubWVudAorLSAgICAgdmFyaWFibGUuICBUaGlzIGlzIGEgR05VIGV4dGVuc2lvbi4gICovCistICByZXR2YWwgPSBnZXRlbnYgKCJMQU5HVUFHRSIpOworLSAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorLSAgICByZXR1cm4gcmV0dmFsOworLQorLSAgLyogYExBTkdVQUdFJyBpcyBub3Qgc2V0LiAgU28gd2UgaGF2ZSB0byBwcm9jZWVkIHdpdGggdGhlIFBPU0lYCistICAgICBtZXRob2RzIG9mIGxvb2tpbmcgdG8gYExDX0FMTCcsIGBMQ194eHgnLCBhbmQgYExBTkcnLiAgT24gc29tZQorLSAgICAgc3lzdGVtcyB0aGlzIGNhbiBiZSBkb25lIGJ5IHRoZSBgc2V0bG9jYWxlJyBmdW5jdGlvbiBpdHNlbGYuICAqLworLSNpZiBkZWZpbmVkIEhBVkVfU0VUTE9DQUxFICYmIGRlZmluZWQgSEFWRV9MQ19NRVNTQUdFUyAmJiBkZWZpbmVkIEhBVkVfTE9DQUxFX05VTEwKKy0gIHJldHVybiBzZXRsb2NhbGUgKGNhdGVnb3J5LCBOVUxMKTsKKy0jZWxzZQorLSAgLyogU2V0dGluZyBvZiBMQ19BTEwgb3ZlcndyaXRlcyBhbGwgb3RoZXIuICAqLworLSAgcmV0dmFsID0gZ2V0ZW52ICgiTENfQUxMIik7CistICBpZiAocmV0dmFsICE9IE5VTEwgJiYgcmV0dmFsWzBdICE9ICdcMCcpCistICAgIHJldHVybiByZXR2YWw7CistCistICAvKiBOZXh0IGNvbWVzIHRoZSBuYW1lIG9mIHRoZSBkZXNpcmVkIGNhdGVnb3J5LiAgKi8KKy0gIHJldHZhbCA9IGdldGVudiAoY2F0ZWdvcnluYW1lKTsKKy0gIGlmIChyZXR2YWwgIT0gTlVMTCAmJiByZXR2YWxbMF0gIT0gJ1wwJykKKy0gICAgcmV0dXJuIHJldHZhbDsKKy0KKy0gIC8qIExhc3QgcG9zc2liaWxpdHkgaXMgdGhlIExBTkcgZW52aXJvbm1lbnQgdmFyaWFibGUuICAqLworLSAgcmV0dmFsID0gZ2V0ZW52ICgiTEFORyIpOworLSAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorLSAgICByZXR1cm4gcmV0dmFsOworLQorLSAgLyogV2UgdXNlIEMgYXMgdGhlIGRlZmF1bHQgZG9tYWluLiAgUE9TSVggc2F5cyB0aGlzIGlzIGltcGxlbWVudGF0aW9uCistICAgICBkZWZpbmVkLiAgKi8KKy0gIHJldHVybiAiQyI7CistI2VuZGlmCistfQorLQorLS8qIEBAIGJlZ2luIG9mIGVwaWxvZyBAQCAqLworLQorLS8qIFdlIGRvbid0IHdhbnQgbGliaW50bC5hIHRvIGRlcGVuZCBvbiBhbnkgb3RoZXIgbGlicmFyeS4gIFNvIHdlCistICAgYXZvaWQgdGhlIG5vbi1zdGFuZGFyZCBmdW5jdGlvbiBzdHBjcHkuICBJbiBHTlUgQyBMaWJyYXJ5IHRoaXMKKy0gICBmdW5jdGlvbiBpcyBhdmFpbGFibGUsIHRob3VnaC4gIEFsc28gYWxsb3cgdGhlIHN5bWJvbCBIQVZFX1NUUENQWQorLSAgIHRvIGJlIGRlZmluZWQuICAqLworLSNpZiAhX0xJQkMgJiYgIUhBVkVfU1RQQ1BZCistc3RhdGljIGNoYXIgKgorLXN0cGNweSAoZGVzdCwgc3JjKQorLSAgICAgY2hhciAqZGVzdDsKKy0gICAgIGNvbnN0IGNoYXIgKnNyYzsKKy17CistICB3aGlsZSAoKCpkZXN0KysgPSAqc3JjKyspICE9ICdcMCcpCistICAgIC8qIERvIG5vdGhpbmcuICovIDsKKy0gIHJldHVybiBkZXN0IC0gMTsKKy19CistI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZGNpZ2V0dGV4dC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2RjaWdldHRleHQuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjM2OTc0NTk2MCAtMDQwMAorQEAgLTAsMCArMSwxMjE5IEBACisrLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGludGVybmFsIGRjaWdldHRleHQgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrLyogVGVsbCBnbGliYydzIDxzdHJpbmcuaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3IgbWVtcGNweSgpLgorKyAgIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+IGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZQorKyAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KKysjaWZuZGVmIF9HTlVfU09VUkNFCisrIyBkZWZpbmUgX0dOVV9TT1VSQ0UJMQorKyNlbmRpZgorKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisrI2lmZGVmIF9fR05VQ19fCisrIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKysjIGRlZmluZSBIQVZFX0FMTE9DQSAxCisrI2Vsc2UKKysjIGlmZGVmIF9NU0NfVkVSCisrIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisrIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisrIyBlbHNlCisrIyAgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKysjICAgaW5jbHVkZSA8YWxsb2NhLmg+CisrIyAgZWxzZQorKyMgICBpZmRlZiBfQUlYCisrICNwcmFnbWEgYWxsb2NhCisrIyAgIGVsc2UKKysjICAgIGlmbmRlZiBhbGxvY2EKKytjaGFyICphbGxvY2EgKCk7CisrIyAgICBlbmRpZgorKyMgICBlbmRpZgorKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpZm5kZWYgZXJybm8KKytleHRlcm4gaW50IGVycm5vOworKyNlbmRpZgorKyNpZm5kZWYgX19zZXRfZXJybm8KKysjIGRlZmluZSBfX3NldF9lcnJubyh2YWwpIGVycm5vID0gKHZhbCkKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKysjaWYgZGVmaW5lZCBIQVZFX1VOSVNURF9IIHx8IGRlZmluZWQgX0xJQkMKKysjIGluY2x1ZGUgPHVuaXN0ZC5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxsb2NhbGUuaD4KKysKKysjaWZkZWYgX0xJQkMKKysgIC8qIEd1ZXNzIHdoZXRoZXIgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyBzaWduYWwgU0lHRlBFLgorKyAgICAgU2V0IHRvIDEgb25seSBpZiB5b3Uga25vdyBmb3Igc3VyZS4gIEluIGNhc2Ugb2YgZG91YnQsIHNldCB0byAwLiAgKi8KKysjIGlmIGRlZmluZWQgX19hbHBoYV9fIHx8IGRlZmluZWQgX19hcm1fXyB8fCBkZWZpbmVkIF9faTM4Nl9fIFwKKysgICAgIHx8IGRlZmluZWQgX19tNjhrX18gfHwgZGVmaW5lZCBfX3MzOTBfXworKyMgIGRlZmluZSBJTlRESVYwX1JBSVNFU19TSUdGUEUgMQorKyMgZWxzZQorKyMgIGRlZmluZSBJTlRESVYwX1JBSVNFU19TSUdGUEUgMAorKyMgZW5kaWYKKysjZW5kaWYKKysjaWYgIUlOVERJVjBfUkFJU0VTX1NJR0ZQRQorKyMgaW5jbHVkZSA8c2lnbmFsLmg+CisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgSEFWRV9TWVNfUEFSQU1fSCB8fCBkZWZpbmVkIF9MSUJDCisrIyBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKysjaW5jbHVkZSAicGx1cmFsLWV4cC5oIgorKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8bGliaW50bC5oPgorKyNlbHNlCisrIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisrI2VuZGlmCisrI2luY2x1ZGUgImhhc2gtc3RyaW5nLmgiCisrCisrLyogVGhyZWFkIHNhZmV0eW5lc3MuICAqLworKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKysjZWxzZQorKy8qIFByb3ZpZGUgZHVtbXkgaW1wbGVtZW50YXRpb24gaWYgdGhpcyBpcyBvdXRzaWRlIGdsaWJjLiAgKi8KKysjIGRlZmluZSBfX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoQ0xBU1MsIE5BTUUpCisrIyBkZWZpbmUgX19saWJjX2xvY2tfbG9jayhOQU1FKQorKyMgZGVmaW5lIF9fbGliY19sb2NrX3VubG9jayhOQU1FKQorKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKENMQVNTLCBOQU1FKQorKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfcmRsb2NrKE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja191bmxvY2soTkFNRSkKKysjZW5kaWYKKysKKysvKiBBbGlnbm1lbnQgb2YgdHlwZXMuICAqLworKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmIF9fR05VQ19fID49IDIKKysjIGRlZmluZSBhbGlnbm9mKFRZUEUpIF9fYWxpZ25vZl9fIChUWVBFKQorKyNlbHNlCisrIyBkZWZpbmUgYWxpZ25vZihUWVBFKSBcCisrICAgICgoaW50KSAmKChzdHJ1Y3QgeyBjaGFyIGR1bW15MTsgVFlQRSBkdW1teTI7IH0gKikgMCktPmR1bW15MikKKysjZW5kaWYKKysKKysvKiBUaGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIHRoZSBzdGFuZGFsb25lIGxpYmludGwuYSBtdXN0IGhhdmUgZGlmZmVyZW50CisrICAgbmFtZXMgdGhhbiB0aGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIEdOVSBsaWJjLCBvdGhlcndpc2UgcHJvZ3JhbXMKKysgICB1c2luZyBsaWJpbnRsLmEgY2Fubm90IGJlIGxpbmtlZCBzdGF0aWNhbGx5LiAgKi8KKysjaWYgIWRlZmluZWQgX0xJQkMKKysjIGRlZmluZSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbiBsaWJpbnRsX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4KKysjIGRlZmluZSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiBsaWJpbnRsX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4KKysjIGRlZmluZSBfbmxfZGVmYXVsdF9kaXJuYW1lIGxpYmludGxfbmxfZGVmYXVsdF9kaXJuYW1lCisrIyBkZWZpbmUgX25sX2RvbWFpbl9iaW5kaW5ncyBsaWJpbnRsX25sX2RvbWFpbl9iaW5kaW5ncworKyNlbmRpZgorKworKy8qIFNvbWUgY29tcGlsZXJzLCBsaWtlIFN1bk9TNCBjYywgZG9uJ3QgaGF2ZSBvZmZzZXRvZiBpbiA8c3RkZGVmLmg+LiAgKi8KKysjaWZuZGVmIG9mZnNldG9mCisrIyBkZWZpbmUgb2Zmc2V0b2YodHlwZSxpZGVudCkgKChzaXplX3QpJigoKHR5cGUqKTApLT5pZGVudCkpCisrI2VuZGlmCisrCisrLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworKworKyNpZmRlZiBfTElCQworKy8qIFJlbmFtZSB0aGUgbm9uIEFOU0kgQyBmdW5jdGlvbnMuICBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZAorKyAgIGJlY2F1c2Ugc29tZSBBTlNJIEMgZnVuY3Rpb25zIHdpbGwgcmVxdWlyZSBsaW5raW5nIHdpdGggdGhpcyBvYmplY3QKKysgICBmaWxlIGFuZCB0aGUgbmFtZSBzcGFjZSBtdXN0IG5vdCBiZSBwb2xsdXRlZC4gICovCisrIyBkZWZpbmUgZ2V0Y3dkIF9fZ2V0Y3dkCisrIyBpZm5kZWYgc3RwY3B5CisrIyAgZGVmaW5lIHN0cGNweSBfX3N0cGNweQorKyMgZW5kaWYKKysjIGRlZmluZSB0ZmluZCBfX3RmaW5kCisrI2Vsc2UKKysjIGlmICFkZWZpbmVkIEhBVkVfR0VUQ1dECisrY2hhciAqZ2V0d2QgKCk7CisrIyAgZGVmaW5lIGdldGN3ZChidWYsIG1heCkgZ2V0d2QgKGJ1ZikKKysjIGVsc2UKKysjICBpZiBWTVMKKysjICAgZGVmaW5lIGdldGN3ZChidWYsIG1heCkgKGdldGN3ZCkgKGJ1ZiwgbWF4LCAwKQorKyMgIGVsc2UKKytjaGFyICpnZXRjd2QgKCk7CisrIyAgZW5kaWYKKysjIGVuZGlmCisrIyBpZm5kZWYgSEFWRV9TVFBDUFkKKytzdGF0aWMgY2hhciAqc3RwY3B5IChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpOworKyMgZW5kaWYKKysjIGlmbmRlZiBIQVZFX01FTVBDUFkKKytzdGF0aWMgdm9pZCAqbWVtcGNweSAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgbik7CisrIyBlbmRpZgorKyNlbmRpZgorKworKy8qIEFtb3VudCB0byBpbmNyZWFzZSBidWZmZXIgc2l6ZSBieSBpbiBlYWNoIHRyeS4gICovCisrI2RlZmluZSBQQVRIX0lOQ1IgMzIKKysKKysvKiBUaGUgZm9sbG93aW5nIGlzIGZyb20gcGF0aG1heC5oLiAgKi8KKysvKiBOb24tUE9TSVggQlNEIHN5c3RlbXMgbWlnaHQgaGF2ZSBnY2MncyBsaW1pdHMuaCwgd2hpY2ggZG9lc24ndCBkZWZpbmUKKysgICBQQVRIX01BWCBidXQgbWlnaHQgY2F1c2UgcmVkZWZpbml0aW9uIHdhcm5pbmdzIHdoZW4gc3lzL3BhcmFtLmggaXMKKysgICBsYXRlciBpbmNsdWRlZCAoYXMgb24gTU9SRS9CU0QgNC4zKS4gICovCisrI2lmIGRlZmluZWQgX1BPU0lYX1ZFUlNJT04gfHwgKGRlZmluZWQgSEFWRV9MSU1JVFNfSCAmJiAhZGVmaW5lZCBfX0dOVUNfXykKKysjIGluY2x1ZGUgPGxpbWl0cy5oPgorKyNlbmRpZgorKworKyNpZm5kZWYgX1BPU0lYX1BBVEhfTUFYCisrIyBkZWZpbmUgX1BPU0lYX1BBVEhfTUFYIDI1NQorKyNlbmRpZgorKworKyNpZiAhZGVmaW5lZCBQQVRIX01BWCAmJiBkZWZpbmVkIF9QQ19QQVRIX01BWAorKyMgZGVmaW5lIFBBVEhfTUFYIChwYXRoY29uZiAoIi8iLCBfUENfUEFUSF9NQVgpIDwgMSA/IDEwMjQgOiBwYXRoY29uZiAoIi8iLCBfUENfUEFUSF9NQVgpKQorKyNlbmRpZgorKworKy8qIERvbid0IGluY2x1ZGUgc3lzL3BhcmFtLmggaWYgaXQgYWxyZWFkeSBoYXMgYmVlbi4gICovCisrI2lmIGRlZmluZWQgSEFWRV9TWVNfUEFSQU1fSCAmJiAhZGVmaW5lZCBQQVRIX01BWCAmJiAhZGVmaW5lZCBNQVhQQVRITEVOCisrIyBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjZW5kaWYKKysKKysjaWYgIWRlZmluZWQgUEFUSF9NQVggJiYgZGVmaW5lZCBNQVhQQVRITEVOCisrIyBkZWZpbmUgUEFUSF9NQVggTUFYUEFUSExFTgorKyNlbmRpZgorKworKyNpZm5kZWYgUEFUSF9NQVgKKysjIGRlZmluZSBQQVRIX01BWCBfUE9TSVhfUEFUSF9NQVgKKysjZW5kaWYKKysKKysvKiBQYXRobmFtZSBzdXBwb3J0LgorKyAgIElTU0xBU0goQykgICAgICAgICAgIHRlc3RzIHdoZXRoZXIgQyBpcyBhIGRpcmVjdG9yeSBzZXBhcmF0b3IgY2hhcmFjdGVyLgorKyAgIElTX0FCU09MVVRFX1BBVEgoUCkgIHRlc3RzIHdoZXRoZXIgUCBpcyBhbiBhYnNvbHV0ZSBwYXRoLiAgSWYgaXQgaXMgbm90LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IG1heSBiZSBjb25jYXRlbmF0ZWQgdG8gYSBkaXJlY3RvcnkgcGF0aG5hbWUuCisrICAgSVNfUEFUSF9XSVRIX0RJUihQKSAgdGVzdHMgd2hldGhlciBQIGNvbnRhaW5zIGEgZGlyZWN0b3J5IHNwZWNpZmljYXRpb24uCisrICovCisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworKyAgLyogV2luMzIsIE9TLzIsIERPUyAqLworKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycgfHwgKEMpID09ICdcXCcpCisrIyBkZWZpbmUgSEFTX0RFVklDRShQKSBcCisrICAgICgoKChQKVswXSA+PSAnQScgJiYgKFApWzBdIDw9ICdaJykgfHwgKChQKVswXSA+PSAnYScgJiYgKFApWzBdIDw9ICd6JykpIFwKKysgICAgICYmIChQKVsxXSA9PSAnOicpCisrIyBkZWZpbmUgSVNfQUJTT0xVVEVfUEFUSChQKSAoSVNTTEFTSCAoKFApWzBdKSB8fCBIQVNfREVWSUNFIChQKSkKKysjIGRlZmluZSBJU19QQVRIX1dJVEhfRElSKFApIFwKKysgICAgKHN0cmNociAoUCwgJy8nKSAhPSBOVUxMIHx8IHN0cmNociAoUCwgJ1xcJykgIT0gTlVMTCB8fCBIQVNfREVWSUNFIChQKSkKKysjZWxzZQorKyAgLyogVW5peCAqLworKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycpCisrIyBkZWZpbmUgSVNfQUJTT0xVVEVfUEFUSChQKSBJU1NMQVNIICgoUClbMF0pCisrIyBkZWZpbmUgSVNfUEFUSF9XSVRIX0RJUihQKSAoc3RyY2hyIChQLCAnLycpICE9IE5VTEwpCisrI2VuZGlmCisrCisrLyogVGhpcyBpcyB0aGUgdHlwZSB1c2VkIGZvciB0aGUgc2VhcmNoIHRyZWUgd2hlcmUga25vd24gdHJhbnNsYXRpb25zCisrICAgYXJlIHN0b3JlZC4gICovCisrc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QKKyt7CisrICAvKiBEb21haW4gaW4gd2hpY2ggdG8gc2VhcmNoLiAgKi8KKysgIGNoYXIgKmRvbWFpbm5hbWU7CisrCisrICAvKiBUaGUgY2F0ZWdvcnkuICAqLworKyAgaW50IGNhdGVnb3J5OworKworKyAgLyogU3RhdGUgb2YgdGhlIGNhdGFsb2cgY291bnRlciBhdCB0aGUgcG9pbnQgdGhlIHN0cmluZyB3YXMgZm91bmQuICAqLworKyAgaW50IGNvdW50ZXI7CisrCisrICAvKiBDYXRhbG9nIHdoZXJlIHRoZSBzdHJpbmcgd2FzIGZvdW5kLiAgKi8KKysgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbjsKKysKKysgIC8qIEFuZCBmaW5hbGx5IHRoZSB0cmFuc2xhdGlvbi4gICovCisrICBjb25zdCBjaGFyICp0cmFuc2xhdGlvbjsKKysgIHNpemVfdCB0cmFuc2xhdGlvbl9sZW5ndGg7CisrCisrICAvKiBQb2ludGVyIHRvIHRoZSBzdHJpbmcgaW4gcXVlc3Rpb24uICAqLworKyAgY2hhciBtc2dpZFtaRVJPXTsKKyt9OworKworKy8qIFJvb3Qgb2YgdGhlIHNlYXJjaCB0cmVlIHdpdGgga25vd24gdHJhbnNsYXRpb25zLiAgV2UgY2FuIHVzZSB0aGlzCisrICAgb25seSBpZiB0aGUgc3lzdGVtIHByb3ZpZGVzIHRoZSBgdHNlYXJjaCcgZnVuY3Rpb24gZmFtaWx5LiAgKi8KKysjaWYgZGVmaW5lZCBIQVZFX1RTRUFSQ0ggfHwgZGVmaW5lZCBfTElCQworKyMgaW5jbHVkZSA8c2VhcmNoLmg+CisrCisrc3RhdGljIHZvaWQgKnJvb3Q7CisrCisrIyBpZmRlZiBfTElCQworKyMgIGRlZmluZSB0c2VhcmNoIF9fdHNlYXJjaAorKyMgZW5kaWYKKysKKysvKiBGdW5jdGlvbiB0byBjb21wYXJlIHR3byBlbnRyaWVzIGluIHRoZSB0YWJsZSBvZiBrbm93biB0cmFuc2xhdGlvbnMuICAqLworK3N0YXRpYyBpbnQKKyt0cmFuc2NtcCAoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQorK3sKKysgIGNvbnN0IHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICpzMTsKKysgIGNvbnN0IHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICpzMjsKKysgIGludCByZXN1bHQ7CisrCisrICBzMSA9IChjb25zdCBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKSBwMTsKKysgIHMyID0gKGNvbnN0IHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICopIHAyOworKworKyAgcmVzdWx0ID0gc3RyY21wIChzMS0+bXNnaWQsIHMyLT5tc2dpZCk7CisrICBpZiAocmVzdWx0ID09IDApCisrICAgIHsKKysgICAgICByZXN1bHQgPSBzdHJjbXAgKHMxLT5kb21haW5uYW1lLCBzMi0+ZG9tYWlubmFtZSk7CisrICAgICAgaWYgKHJlc3VsdCA9PSAwKQorKwkvKiBXZSBjb21wYXJlIHRoZSBjYXRlZ29yeSBsYXN0ICh0aG91Z2ggdGhpcyBpcyB0aGUgY2hlYXBlc3QKKysJICAgb3BlcmF0aW9uKSBzaW5jZSBpdCBpcyBob3BlZnVsbHkgYWx3YXlzIHRoZSBzYW1lIChuYW1lbHkKKysJICAgTENfTUVTU0FHRVMpLiAgKi8KKysJcmVzdWx0ID0gczEtPmNhdGVnb3J5IC0gczItPmNhdGVnb3J5OworKyAgICB9CisrCisrICByZXR1cm4gcmVzdWx0OworK30KKysjZW5kaWYKKysKKysjaWZuZGVmIElOVFZBUkRFRgorKyMgZGVmaW5lIElOVFZBUkRFRihuYW1lKQorKyNlbmRpZgorKyNpZm5kZWYgSU5UVVNFCisrIyBkZWZpbmUgSU5UVVNFKG5hbWUpIG5hbWUKKysjZW5kaWYKKysKKysvKiBOYW1lIG9mIHRoZSBkZWZhdWx0IGRvbWFpbiB1c2VkIGZvciBnZXR0ZXh0KDMpIHByaW9yIGFueSBjYWxsIHRvCisrICAgdGV4dGRvbWFpbigzKS4gIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIGlzICJtZXNzYWdlcyIuICAqLworK2NvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW5bXSBhdHRyaWJ1dGVfaGlkZGVuID0gIm1lc3NhZ2VzIjsKKysKKysvKiBWYWx1ZSB1c2VkIGFzIHRoZSBkZWZhdWx0IGRvbWFpbiBmb3IgZ2V0dGV4dCgzKS4gICovCisrY29uc3QgY2hhciAqX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gYXR0cmlidXRlX2hpZGRlbgorKyAgICAgPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbjsKKysKKysvKiBDb250YWlucyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbWVzc2FnZSBjYXRhbG9ncy4gICovCisrI2lmIGRlZmluZWQgX19FTVhfXworK2V4dGVybiBjb25zdCBjaGFyIF9ubF9kZWZhdWx0X2Rpcm5hbWVbXTsKKysjZWxzZQorK2NvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGlybmFtZVtdID0gTE9DQUxFRElSOworK0lOVFZBUkRFRiAoX25sX2RlZmF1bHRfZGlybmFtZSkKKysjZW5kaWYKKysKKysvKiBMaXN0IHdpdGggYmluZGluZ3Mgb2Ygc3BlY2lmaWMgZG9tYWlucyBjcmVhdGVkIGJ5IGJpbmR0ZXh0ZG9tYWluKCkKKysgICBjYWxscy4gICovCisrc3RydWN0IGJpbmRpbmcgKl9ubF9kb21haW5fYmluZGluZ3M7CisrCisrLyogUHJvdG90eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zLiAgKi8KKytzdGF0aWMgY2hhciAqcGx1cmFsX2xvb2t1cCAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluLAorKwkJCSAgICB1bnNpZ25lZCBsb25nIGludCBuLAorKwkJCSAgICBjb25zdCBjaGFyICp0cmFuc2xhdGlvbiwgc2l6ZV90IHRyYW5zbGF0aW9uX2xlbikKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworK3N0YXRpYyBjb25zdCBjaGFyICpndWVzc19jYXRlZ29yeV92YWx1ZSAoaW50IGNhdGVnb3J5LAorKwkJCQkJIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZSkKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCIKKysjIGRlZmluZSBjYXRlZ29yeV90b19uYW1lKGNhdGVnb3J5KQlfbmxfY2F0ZWdvcnlfbmFtZXNbY2F0ZWdvcnldCisrI2Vsc2UKKytzdGF0aWMgY29uc3QgY2hhciAqY2F0ZWdvcnlfdG9fbmFtZSAoaW50IGNhdGVnb3J5KSBpbnRlcm5hbF9mdW5jdGlvbjsKKysjZW5kaWYKKysKKysKKysvKiBGb3IgdGhvc2UgbG9vc2luZyBzeXN0ZW1zIHdoaWNoIGRvbid0IGhhdmUgYGFsbG9jYScgd2UgaGF2ZSB0byBhZGQKKysgICBzb21lIGFkZGl0aW9uYWwgY29kZSBlbXVsYXRpbmcgaXQuICAqLworKyNpZmRlZiBIQVZFX0FMTE9DQQorKy8qIE5vdGhpbmcgaGFzIHRvIGJlIGRvbmUuICAqLworKyMgZGVmaW5lIGZyZWVhKHApIC8qIG5vdGhpbmcgKi8KKysjIGRlZmluZSBBRERfQkxPQ0sobGlzdCwgYWRkcmVzcykgLyogbm90aGluZyAqLworKyMgZGVmaW5lIEZSRUVfQkxPQ0tTKGxpc3QpIC8qIG5vdGhpbmcgKi8KKysjZWxzZQorK3N0cnVjdCBibG9ja19saXN0CisreworKyAgdm9pZCAqYWRkcmVzczsKKysgIHN0cnVjdCBibG9ja19saXN0ICpuZXh0OworK307CisrIyBkZWZpbmUgQUREX0JMT0NLKGxpc3QsIGFkZHIpCQkJCQkJICAgICAgXAorKyAgZG8gewkJCQkJCQkJCSAgICAgIFwKKysgICAgc3RydWN0IGJsb2NrX2xpc3QgKm5ld3AgPSAoc3RydWN0IGJsb2NrX2xpc3QgKikgbWFsbG9jIChzaXplb2YgKCpuZXdwKSk7ICBcCisrICAgIC8qIElmIHdlIGNhbm5vdCBnZXQgYSBmcmVlIGJsb2NrIHdlIGNhbm5vdCBhZGQgdGhlIG5ldyBlbGVtZW50IHRvCSAgICAgIFwKKysgICAgICAgdGhlIGxpc3QuICAqLwkJCQkJCQkgICAgICBcCisrICAgIGlmIChuZXdwICE9IE5VTEwpIHsJCQkJCQkJICAgICAgXAorKyAgICAgIG5ld3AtPmFkZHJlc3MgPSAoYWRkcik7CQkJCQkJICAgICAgXAorKyAgICAgIG5ld3AtPm5leHQgPSAobGlzdCk7CQkJCQkJICAgICAgXAorKyAgICAgIChsaXN0KSA9IG5ld3A7CQkJCQkJCSAgICAgIFwKKysgICAgfQkJCQkJCQkJCSAgICAgIFwKKysgIH0gd2hpbGUgKDApCisrIyBkZWZpbmUgRlJFRV9CTE9DS1MobGlzdCkJCQkJCQkgICAgICBcCisrICBkbyB7CQkJCQkJCQkJICAgICAgXAorKyAgICB3aGlsZSAobGlzdCAhPSBOVUxMKSB7CQkJCQkJICAgICAgXAorKyAgICAgIHN0cnVjdCBibG9ja19saXN0ICpvbGQgPSBsaXN0OwkJCQkJICAgICAgXAorKyAgICAgIGxpc3QgPSBsaXN0LT5uZXh0OwkJCQkJCSAgICAgIFwKKysgICAgICBmcmVlIChvbGQtPmFkZHJlc3MpOwkJCQkJCSAgICAgIFwKKysgICAgICBmcmVlIChvbGQpOwkJCQkJCQkgICAgICBcCisrICAgIH0JCQkJCQkJCQkgICAgICBcCisrICB9IHdoaWxlICgwKQorKyMgdW5kZWYgYWxsb2NhCisrIyBkZWZpbmUgYWxsb2NhKHNpemUpIChtYWxsb2MgKHNpemUpKQorKyMgZGVmaW5lIGZyZWVhKHApIGZyZWUgKHApCisrI2VuZGlmCS8qIGhhdmUgYWxsb2NhICovCisrCisrCisrI2lmZGVmIF9MSUJDCisrLyogTGlzdCBvZiBibG9ja3MgYWxsb2NhdGVkIGZvciB0cmFuc2xhdGlvbnMuICAqLworK3R5cGVkZWYgc3RydWN0IHRyYW5zbWVtX2xpc3QKKyt7CisrICBzdHJ1Y3QgdHJhbnNtZW1fbGlzdCAqbmV4dDsKKysgIGNoYXIgZGF0YVtaRVJPXTsKKyt9IHRyYW5zbWVtX2Jsb2NrX3Q7Cisrc3RhdGljIHN0cnVjdCB0cmFuc21lbV9saXN0ICp0cmFuc21lbV9saXN0OworKyNlbHNlCisrdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHRyYW5zbWVtX2Jsb2NrX3Q7CisrI2VuZGlmCisrCisrCisrLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorKyAgIHdpdGggZXhpc3RpbmcgbmFtZXMgYW5kIHRoZXkgc2hvdWxkIGZvbGxvdyBBTlNJIEMuICBCdXQgdGhpcyBzb3VyY2UKKysgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKysgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworKyNpZmRlZiBfTElCQworKyMgZGVmaW5lIERDSUdFVFRFWFQgX19kY2lnZXR0ZXh0CisrI2Vsc2UKKysjIGRlZmluZSBEQ0lHRVRURVhUIGxpYmludGxfZGNpZ2V0dGV4dAorKyNlbmRpZgorKworKy8qIExvY2sgdmFyaWFibGUgdG8gcHJvdGVjdCB0aGUgZ2xvYmFsIGRhdGEgaW4gdGhlIGdldHRleHQgaW1wbGVtZW50YXRpb24uICAqLworKyNpZmRlZiBfTElCQworK19fbGliY19yd2xvY2tfZGVmaW5lX2luaXRpYWxpemVkICgsIF9ubF9zdGF0ZV9sb2NrIGF0dHJpYnV0ZV9oaWRkZW4pCisrI2VuZGlmCisrCisrLyogQ2hlY2tpbmcgd2hldGhlciB0aGUgYmluYXJpZXMgcnVucyBTVUlEIG11c3QgYmUgZG9uZSBhbmQgZ2xpYmMgcHJvdmlkZXMKKysgICBlYXNpZXIgbWV0aG9kcyB0aGVyZWZvcmUgd2UgbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisrI2lmZGVmIF9MSUJDCisrIyBkZWZpbmUgRU5BQkxFX1NFQ1VSRSBfX2xpYmNfZW5hYmxlX3NlY3VyZQorKyMgZGVmaW5lIERFVEVSTUlORV9TRUNVUkUKKysjZWxzZQorKyMgaWZuZGVmIEhBVkVfR0VUVUlECisrIyAgZGVmaW5lIGdldHVpZCgpIDAKKysjIGVuZGlmCisrIyBpZm5kZWYgSEFWRV9HRVRHSUQKKysjICBkZWZpbmUgZ2V0Z2lkKCkgMAorKyMgZW5kaWYKKysjIGlmbmRlZiBIQVZFX0dFVEVVSUQKKysjICBkZWZpbmUgZ2V0ZXVpZCgpIGdldHVpZCgpCisrIyBlbmRpZgorKyMgaWZuZGVmIEhBVkVfR0VURUdJRAorKyMgIGRlZmluZSBnZXRlZ2lkKCkgZ2V0Z2lkKCkKKysjIGVuZGlmCisrc3RhdGljIGludCBlbmFibGVfc2VjdXJlOworKyMgZGVmaW5lIEVOQUJMRV9TRUNVUkUgKGVuYWJsZV9zZWN1cmUgPT0gMSkKKysjIGRlZmluZSBERVRFUk1JTkVfU0VDVVJFIFwKKysgIGlmIChlbmFibGVfc2VjdXJlID09IDApCQkJCQkJICAgICAgXAorKyAgICB7CQkJCQkJCQkJICAgICAgXAorKyAgICAgIGlmIChnZXR1aWQgKCkgIT0gZ2V0ZXVpZCAoKSB8fCBnZXRnaWQgKCkgIT0gZ2V0ZWdpZCAoKSkJCSAgICAgIFwKKysJZW5hYmxlX3NlY3VyZSA9IDE7CQkJCQkJICAgICAgXAorKyAgICAgIGVsc2UJCQkJCQkJCSAgICAgIFwKKysJZW5hYmxlX3NlY3VyZSA9IC0xOwkJCQkJCSAgICAgIFwKKysgICAgfQorKyNlbmRpZgorKworKy8qIEdldCB0aGUgZnVuY3Rpb24gdG8gZXZhbHVhdGUgdGhlIHBsdXJhbCBleHByZXNzaW9uLiAgKi8KKysjaW5jbHVkZSAiZXZhbC1wbHVyYWwuaCIKKysKKysvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKysgICBDQVRFR09SWSBsb2NhbGUgYW5kLCBpZiBQTFVSQUwgaXMgbm9uemVybywgc2VhcmNoIG92ZXIgc3RyaW5nCisrICAgZGVwZW5kaW5nIG9uIHRoZSBwbHVyYWwgZm9ybSBkZXRlcm1pbmVkIGJ5IE4uICAqLworK2NoYXIgKgorK0RDSUdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLAorKwkgICAgaW50IHBsdXJhbCwgdW5zaWduZWQgbG9uZyBpbnQgbiwgaW50IGNhdGVnb3J5KQorK3sKKysjaWZuZGVmIEhBVkVfQUxMT0NBCisrICBzdHJ1Y3QgYmxvY2tfbGlzdCAqYmxvY2tfbGlzdCA9IE5VTEw7CisrI2VuZGlmCisrICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW47CisrICBzdHJ1Y3QgYmluZGluZyAqYmluZGluZzsKKysgIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZTsKKysgIGNvbnN0IGNoYXIgKmNhdGVnb3J5dmFsdWU7CisrICBjaGFyICpkaXJuYW1lLCAqeGRvbWFpbm5hbWU7CisrICBjaGFyICpzaW5nbGVfbG9jYWxlOworKyAgY2hhciAqcmV0dmFsOworKyAgc2l6ZV90IHJldGxlbjsKKysgIGludCBzYXZlZF9lcnJubzsKKysjaWYgZGVmaW5lZCBIQVZFX1RTRUFSQ0ggfHwgZGVmaW5lZCBfTElCQworKyAgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKnNlYXJjaDsKKysgIHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICoqZm91bmRwID0gTlVMTDsKKysgIHNpemVfdCBtc2dpZF9sZW47CisrI2VuZGlmCisrICBzaXplX3QgZG9tYWlubmFtZV9sZW47CisrCisrICAvKiBJZiBubyByZWFsIE1TR0lEIGlzIGdpdmVuIHJldHVybiBOVUxMLiAgKi8KKysgIGlmIChtc2dpZDEgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrI2lmZGVmIF9MSUJDCisrICBpZiAoY2F0ZWdvcnkgPCAwIHx8IGNhdGVnb3J5ID49IF9fTENfTEFTVCB8fCBjYXRlZ29yeSA9PSBMQ19BTEwpCisrICAgIC8qIEJvZ3VzLiAgKi8KKysgICAgcmV0dXJuIChwbHVyYWwgPT0gMAorKwkgICAgPyAoY2hhciAqKSBtc2dpZDEKKysJICAgIC8qIFVzZSB0aGUgR2VybWFuaWMgcGx1cmFsIHJ1bGUuICAqLworKwkgICAgOiBuID09IDEgPyAoY2hhciAqKSBtc2dpZDEgOiAoY2hhciAqKSBtc2dpZDIpOworKyNlbmRpZgorKworKyAgX19saWJjX3J3bG9ja19yZGxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKysKKysgIC8qIElmIERPTUFJTk5BTUUgaXMgTlVMTCwgd2UgYXJlIGludGVyZXN0ZWQgaW4gdGhlIGRlZmF1bHQgZG9tYWluLiAgSWYKKysgICAgIENBVEVHT1JZIGlzIG5vdCBMQ19NRVNTQUdFUyB0aGlzIG1pZ2h0IG5vdCBtYWtlIG11Y2ggc2Vuc2UgYnV0IHRoZQorKyAgICAgZGVmaW5pdGlvbiBsZWZ0IHRoaXMgdW5kZWZpbmVkLiAgKi8KKysgIGlmIChkb21haW5uYW1lID09IE5VTEwpCisrICAgIGRvbWFpbm5hbWUgPSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKysKKysgIC8qIE9TLzIgc3BlY2lmaWM6IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBsaWJpbnRsIHZlcnNpb25zICAqLworKyNpZmRlZiBMQ19NRVNTQUdFU19DT01QQVQKKysgIGlmIChjYXRlZ29yeSA9PSBMQ19NRVNTQUdFU19DT01QQVQpCisrICAgIGNhdGVnb3J5ID0gTENfTUVTU0FHRVM7CisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgSEFWRV9UU0VBUkNIIHx8IGRlZmluZWQgX0xJQkMKKysgIG1zZ2lkX2xlbiA9IHN0cmxlbiAobXNnaWQxKSArIDE7CisrCisrICAvKiBUcnkgdG8gZmluZCB0aGUgdHJhbnNsYXRpb24gYW1vbmcgdGhvc2Ugd2hpY2ggd2UgZm91bmQgYXQKKysgICAgIHNvbWUgdGltZS4gICovCisrICBzZWFyY2ggPSAoc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKikKKysJICAgYWxsb2NhIChvZmZzZXRvZiAoc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QsIG1zZ2lkKSArIG1zZ2lkX2xlbik7CisrICBtZW1jcHkgKHNlYXJjaC0+bXNnaWQsIG1zZ2lkMSwgbXNnaWRfbGVuKTsKKysgIHNlYXJjaC0+ZG9tYWlubmFtZSA9IChjaGFyICopIGRvbWFpbm5hbWU7CisrICBzZWFyY2gtPmNhdGVnb3J5ID0gY2F0ZWdvcnk7CisrCisrICBmb3VuZHAgPSAoc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKiopIHRmaW5kIChzZWFyY2gsICZyb290LCB0cmFuc2NtcCk7CisrICBmcmVlYSAoc2VhcmNoKTsKKysgIGlmIChmb3VuZHAgIT0gTlVMTCAmJiAoKmZvdW5kcCktPmNvdW50ZXIgPT0gX25sX21zZ19jYXRfY250cikKKysgICAgeworKyAgICAgIC8qIE5vdyBkZWFsIHdpdGggcGx1cmFsLiAgKi8KKysgICAgICBpZiAocGx1cmFsKQorKwlyZXR2YWwgPSBwbHVyYWxfbG9va3VwICgoKmZvdW5kcCktPmRvbWFpbiwgbiwgKCpmb3VuZHApLT50cmFuc2xhdGlvbiwKKysJCQkJKCpmb3VuZHApLT50cmFuc2xhdGlvbl9sZW5ndGgpOworKyAgICAgIGVsc2UKKysJcmV0dmFsID0gKGNoYXIgKikgKCpmb3VuZHApLT50cmFuc2xhdGlvbjsKKysKKysgICAgICBfX2xpYmNfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworKyAgICAgIHJldHVybiByZXR2YWw7CisrICAgIH0KKysjZW5kaWYKKysKKysgIC8qIFByZXNlcnZlIHRoZSBgZXJybm8nIHZhbHVlLiAgKi8KKysgIHNhdmVkX2Vycm5vID0gZXJybm87CisrCisrICAvKiBTZWUgd2hldGhlciB0aGlzIGlzIGEgU1VJRCBiaW5hcnkgb3Igbm90LiAgKi8KKysgIERFVEVSTUlORV9TRUNVUkU7CisrCisrICAvKiBGaXJzdCBmaW5kIG1hdGNoaW5nIGJpbmRpbmcuICAqLworKyAgZm9yIChiaW5kaW5nID0gX25sX2RvbWFpbl9iaW5kaW5nczsgYmluZGluZyAhPSBOVUxMOyBiaW5kaW5nID0gYmluZGluZy0+bmV4dCkKKysgICAgeworKyAgICAgIGludCBjb21wYXJlID0gc3RyY21wIChkb21haW5uYW1lLCBiaW5kaW5nLT5kb21haW5uYW1lKTsKKysgICAgICBpZiAoY29tcGFyZSA9PSAwKQorKwkvKiBXZSBmb3VuZCBpdCEgICovCisrCWJyZWFrOworKyAgICAgIGlmIChjb21wYXJlIDwgMCkKKysJeworKwkgIC8qIEl0IGlzIG5vdCBpbiB0aGUgbGlzdC4gICovCisrCSAgYmluZGluZyA9IE5VTEw7CisrCSAgYnJlYWs7CisrCX0KKysgICAgfQorKworKyAgaWYgKGJpbmRpbmcgPT0gTlVMTCkKKysgICAgZGlybmFtZSA9IChjaGFyICopIElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKTsKKysgIGVsc2UgaWYgKElTX0FCU09MVVRFX1BBVEggKGJpbmRpbmctPmRpcm5hbWUpKQorKyAgICBkaXJuYW1lID0gYmluZGluZy0+ZGlybmFtZTsKKysgIGVsc2UKKysgICAgeworKyAgICAgIC8qIFdlIGhhdmUgYSByZWxhdGl2ZSBwYXRoLiAgTWFrZSBpdCBhYnNvbHV0ZSBub3cuICAqLworKyAgICAgIHNpemVfdCBkaXJuYW1lX2xlbiA9IHN0cmxlbiAoYmluZGluZy0+ZGlybmFtZSkgKyAxOworKyAgICAgIHNpemVfdCBwYXRoX21heDsKKysgICAgICBjaGFyICpyZXQ7CisrCisrICAgICAgcGF0aF9tYXggPSAodW5zaWduZWQgaW50KSBQQVRIX01BWDsKKysgICAgICBwYXRoX21heCArPSAyOwkJLyogVGhlIGdldGN3ZCBkb2NzIHNheSB0byBkbyB0aGlzLiAgKi8KKysKKysgICAgICBmb3IgKDs7KQorKwl7CisrCSAgZGlybmFtZSA9IChjaGFyICopIGFsbG9jYSAocGF0aF9tYXggKyBkaXJuYW1lX2xlbik7CisrCSAgQUREX0JMT0NLIChibG9ja19saXN0LCBkaXJuYW1lKTsKKysKKysJICBfX3NldF9lcnJubyAoMCk7CisrCSAgcmV0ID0gZ2V0Y3dkIChkaXJuYW1lLCBwYXRoX21heCk7CisrCSAgaWYgKHJldCAhPSBOVUxMIHx8IGVycm5vICE9IEVSQU5HRSkKKysJICAgIGJyZWFrOworKworKwkgIHBhdGhfbWF4ICs9IHBhdGhfbWF4IC8gMjsKKysJICBwYXRoX21heCArPSBQQVRIX0lOQ1I7CisrCX0KKysKKysgICAgICBpZiAocmV0ID09IE5VTEwpCisrCS8qIFdlIGNhbm5vdCBnZXQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuICBEb24ndCBzaWduYWwgYW4KKysJICAgZXJyb3IgYnV0IHNpbXBseSByZXR1cm4gdGhlIGRlZmF1bHQgc3RyaW5nLiAgKi8KKysJZ290byByZXR1cm5fdW50cmFuc2xhdGVkOworKworKyAgICAgIHN0cGNweSAoc3RwY3B5IChzdHJjaHIgKGRpcm5hbWUsICdcMCcpLCAiLyIpLCBiaW5kaW5nLT5kaXJuYW1lKTsKKysgICAgfQorKworKyAgLyogTm93IGRldGVybWluZSB0aGUgc3ltYm9saWMgbmFtZSBvZiBDQVRFR09SWSBhbmQgaXRzIHZhbHVlLiAgKi8KKysgIGNhdGVnb3J5bmFtZSA9IGNhdGVnb3J5X3RvX25hbWUgKGNhdGVnb3J5KTsKKysgIGNhdGVnb3J5dmFsdWUgPSBndWVzc19jYXRlZ29yeV92YWx1ZSAoY2F0ZWdvcnksIGNhdGVnb3J5bmFtZSk7CisrCisrICBkb21haW5uYW1lX2xlbiA9IHN0cmxlbiAoZG9tYWlubmFtZSk7CisrICB4ZG9tYWlubmFtZSA9IChjaGFyICopIGFsbG9jYSAoc3RybGVuIChjYXRlZ29yeW5hbWUpCisrCQkJCSArIGRvbWFpbm5hbWVfbGVuICsgNSk7CisrICBBRERfQkxPQ0sgKGJsb2NrX2xpc3QsIHhkb21haW5uYW1lKTsKKysKKysgIHN0cGNweSAobWVtcGNweSAoc3RwY3B5IChzdHBjcHkgKHhkb21haW5uYW1lLCBjYXRlZ29yeW5hbWUpLCAiLyIpLAorKwkJICBkb21haW5uYW1lLCBkb21haW5uYW1lX2xlbiksCisrCSAgIi5tbyIpOworKworKyAgLyogQ3JlYXRpbmcgd29ya2luZyBhcmVhLiAgKi8KKysgIHNpbmdsZV9sb2NhbGUgPSAoY2hhciAqKSBhbGxvY2EgKHN0cmxlbiAoY2F0ZWdvcnl2YWx1ZSkgKyAxKTsKKysgIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgc2luZ2xlX2xvY2FsZSk7CisrCisrCisrICAvKiBTZWFyY2ggZm9yIHRoZSBnaXZlbiBzdHJpbmcuICBUaGlzIGlzIGEgbG9vcCBiZWNhdXNlIHdlIHBlcmhhcHMKKysgICAgIGdvdCBhbiBvcmRlcmVkIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRvIGNvbnNpZGVyIGZvciB0aGUgdHJhbnNsYXRpb24uICAqLworKyAgd2hpbGUgKDEpCisrICAgIHsKKysgICAgICAvKiBNYWtlIENBVEVHT1JZVkFMVUUgcG9pbnQgdG8gdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgbGlzdC4gICovCisrICAgICAgd2hpbGUgKGNhdGVnb3J5dmFsdWVbMF0gIT0gJ1wwJyAmJiBjYXRlZ29yeXZhbHVlWzBdID09ICc6JykKKysJKytjYXRlZ29yeXZhbHVlOworKyAgICAgIGlmIChjYXRlZ29yeXZhbHVlWzBdID09ICdcMCcpCisrCXsKKysJICAvKiBUaGUgd2hvbGUgY29udGVudHMgb2YgQ0FURUdPUllWQUxVRSBoYXMgYmVlbiBzZWFyY2hlZCBidXQKKysJICAgICBubyB2YWxpZCBlbnRyeSBoYXMgYmVlbiBmb3VuZC4gIFdlIHNvbHZlIHRoaXMgc2l0dWF0aW9uCisrCSAgICAgYnkgaW1wbGljaXRseSBhcHBlbmRpbmcgYSAiQyIgZW50cnksIGkuZS4gbm8gdHJhbnNsYXRpb24KKysJICAgICB3aWxsIHRha2UgcGxhY2UuICAqLworKwkgIHNpbmdsZV9sb2NhbGVbMF0gPSAnQyc7CisrCSAgc2luZ2xlX2xvY2FsZVsxXSA9ICdcMCc7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBjaGFyICpjcCA9IHNpbmdsZV9sb2NhbGU7CisrCSAgd2hpbGUgKGNhdGVnb3J5dmFsdWVbMF0gIT0gJ1wwJyAmJiBjYXRlZ29yeXZhbHVlWzBdICE9ICc6JykKKysJICAgICpjcCsrID0gKmNhdGVnb3J5dmFsdWUrKzsKKysJICAqY3AgPSAnXDAnOworKworKwkgIC8qIFdoZW4gdGhpcyBpcyBhIFNVSUQgYmluYXJ5IHdlIG11c3Qgbm90IGFsbG93IGFjY2Vzc2luZyBmaWxlcworKwkgICAgIG91dHNpZGUgdGhlIGRlZGljYXRlZCBkaXJlY3Rvcmllcy4gICovCisrCSAgaWYgKEVOQUJMRV9TRUNVUkUgJiYgSVNfUEFUSF9XSVRIX0RJUiAoc2luZ2xlX2xvY2FsZSkpCisrCSAgICAvKiBJbmdvcmUgdGhpcyBlbnRyeS4gICovCisrCSAgICBjb250aW51ZTsKKysJfQorKworKyAgICAgIC8qIElmIHRoZSBjdXJyZW50IGxvY2FsZSB2YWx1ZSBpcyBDIChvciBQT1NJWCkgd2UgZG9uJ3QgbG9hZCBhCisrCSBkb21haW4uICBSZXR1cm4gdGhlIE1TR0lELiAgKi8KKysgICAgICBpZiAoc3RyY21wIChzaW5nbGVfbG9jYWxlLCAiQyIpID09IDAKKysJICB8fCBzdHJjbXAgKHNpbmdsZV9sb2NhbGUsICJQT1NJWCIpID09IDApCisrCWJyZWFrOworKworKyAgICAgIC8qIEZpbmQgc3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgY2F0YWxvZyBtYXRjaGluZyB0aGUKKysJIERPTUFJTk5BTUUgYW5kIENBVEVHT1JZLiAgKi8KKysgICAgICBkb21haW4gPSBfbmxfZmluZF9kb21haW4gKGRpcm5hbWUsIHNpbmdsZV9sb2NhbGUsIHhkb21haW5uYW1lLCBiaW5kaW5nKTsKKysKKysgICAgICBpZiAoZG9tYWluICE9IE5VTEwpCisrCXsKKysJICByZXR2YWwgPSBfbmxfZmluZF9tc2cgKGRvbWFpbiwgYmluZGluZywgbXNnaWQxLCAmcmV0bGVuKTsKKysKKysJICBpZiAocmV0dmFsID09IE5VTEwpCisrCSAgICB7CisrCSAgICAgIGludCBjbnQ7CisrCisrCSAgICAgIGZvciAoY250ID0gMDsgZG9tYWluLT5zdWNjZXNzb3JbY250XSAhPSBOVUxMOyArK2NudCkKKysJCXsKKysJCSAgcmV0dmFsID0gX25sX2ZpbmRfbXNnIChkb21haW4tPnN1Y2Nlc3NvcltjbnRdLCBiaW5kaW5nLAorKwkJCQkJIG1zZ2lkMSwgJnJldGxlbik7CisrCisrCQkgIGlmIChyZXR2YWwgIT0gTlVMTCkKKysJCSAgICB7CisrCQkgICAgICBkb21haW4gPSBkb21haW4tPnN1Y2Nlc3NvcltjbnRdOworKwkJICAgICAgYnJlYWs7CisrCQkgICAgfQorKwkJfQorKwkgICAgfQorKworKwkgIGlmIChyZXR2YWwgIT0gTlVMTCkKKysJICAgIHsKKysJICAgICAgLyogRm91bmQgdGhlIHRyYW5zbGF0aW9uIG9mIE1TR0lEMSBpbiBkb21haW4gRE9NQUlOOgorKwkJIHN0YXJ0aW5nIGF0IFJFVFZBTCwgUkVUTEVOIGJ5dGVzLiAgKi8KKysJICAgICAgRlJFRV9CTE9DS1MgKGJsb2NrX2xpc3QpOworKyNpZiBkZWZpbmVkIEhBVkVfVFNFQVJDSCB8fCBkZWZpbmVkIF9MSUJDCisrCSAgICAgIGlmIChmb3VuZHAgPT0gTlVMTCkKKysJCXsKKysJCSAgLyogQ3JlYXRlIGEgbmV3IGVudHJ5IGFuZCBhZGQgaXQgdG8gdGhlIHNlYXJjaCB0cmVlLiAgKi8KKysJCSAgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKm5ld3A7CisrCisrCQkgIG5ld3AgPSAoc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKikKKysJCSAgICBtYWxsb2MgKG9mZnNldG9mIChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCwgbXNnaWQpCisrCQkJICAgICsgbXNnaWRfbGVuICsgZG9tYWlubmFtZV9sZW4gKyAxKTsKKysJCSAgaWYgKG5ld3AgIT0gTlVMTCkKKysJCSAgICB7CisrCQkgICAgICBuZXdwLT5kb21haW5uYW1lID0KKysJCQltZW1wY3B5IChuZXdwLT5tc2dpZCwgbXNnaWQxLCBtc2dpZF9sZW4pOworKwkJICAgICAgbWVtY3B5IChuZXdwLT5kb21haW5uYW1lLCBkb21haW5uYW1lLCBkb21haW5uYW1lX2xlbiArIDEpOworKwkJICAgICAgbmV3cC0+Y2F0ZWdvcnkgPSBjYXRlZ29yeTsKKysJCSAgICAgIG5ld3AtPmNvdW50ZXIgPSBfbmxfbXNnX2NhdF9jbnRyOworKwkJICAgICAgbmV3cC0+ZG9tYWluID0gZG9tYWluOworKwkJICAgICAgbmV3cC0+dHJhbnNsYXRpb24gPSByZXR2YWw7CisrCQkgICAgICBuZXdwLT50cmFuc2xhdGlvbl9sZW5ndGggPSByZXRsZW47CisrCisrCQkgICAgICAvKiBJbnNlcnQgdGhlIGVudHJ5IGluIHRoZSBzZWFyY2ggdHJlZS4gICovCisrCQkgICAgICBmb3VuZHAgPSAoc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKiopCisrCQkJdHNlYXJjaCAobmV3cCwgJnJvb3QsIHRyYW5zY21wKTsKKysJCSAgICAgIGlmIChmb3VuZHAgPT0gTlVMTAorKwkJCSAgfHwgX19idWlsdGluX2V4cGVjdCAoKmZvdW5kcCAhPSBuZXdwLCAwKSkKKysJCQkvKiBUaGUgaW5zZXJ0IGZhaWxlZC4gICovCisrCQkJZnJlZSAobmV3cCk7CisrCQkgICAgfQorKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIC8qIFdlIGNhbiB1cGRhdGUgdGhlIGV4aXN0aW5nIGVudHJ5LiAgKi8KKysJCSAgKCpmb3VuZHApLT5jb3VudGVyID0gX25sX21zZ19jYXRfY250cjsKKysJCSAgKCpmb3VuZHApLT5kb21haW4gPSBkb21haW47CisrCQkgICgqZm91bmRwKS0+dHJhbnNsYXRpb24gPSByZXR2YWw7CisrCQkgICgqZm91bmRwKS0+dHJhbnNsYXRpb25fbGVuZ3RoID0gcmV0bGVuOworKwkJfQorKyNlbmRpZgorKwkgICAgICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOworKworKwkgICAgICAvKiBOb3cgZGVhbCB3aXRoIHBsdXJhbC4gICovCisrCSAgICAgIGlmIChwbHVyYWwpCisrCQlyZXR2YWwgPSBwbHVyYWxfbG9va3VwIChkb21haW4sIG4sIHJldHZhbCwgcmV0bGVuKTsKKysKKysJICAgICAgX19saWJjX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKysJICAgICAgcmV0dXJuIHJldHZhbDsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrIHJldHVybl91bnRyYW5zbGF0ZWQ6CisrICAvKiBSZXR1cm4gdGhlIHVudHJhbnNsYXRlZCBNU0dJRC4gICovCisrICBGUkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CisrICBfX2xpYmNfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworKyNpZm5kZWYgX0xJQkMKKysgIGlmICghRU5BQkxFX1NFQ1VSRSkKKysgICAgeworKyAgICAgIGV4dGVybiB2b2lkIF9ubF9sb2dfdW50cmFuc2xhdGVkIChjb25zdCBjaGFyICpsb2dmaWxlbmFtZSwKKysJCQkJCWNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJCQljb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwKKysJCQkJCWludCBwbHVyYWwpOworKyAgICAgIGNvbnN0IGNoYXIgKmxvZ2ZpbGVuYW1lID0gZ2V0ZW52ICgiR0VUVEVYVF9MT0dfVU5UUkFOU0xBVEVEIik7CisrCisrICAgICAgaWYgKGxvZ2ZpbGVuYW1lICE9IE5VTEwgJiYgbG9nZmlsZW5hbWVbMF0gIT0gJ1wwJykKKysJX25sX2xvZ191bnRyYW5zbGF0ZWQgKGxvZ2ZpbGVuYW1lLCBkb21haW5uYW1lLCBtc2dpZDEsIG1zZ2lkMiwgcGx1cmFsKTsKKysgICAgfQorKyNlbmRpZgorKyAgX19zZXRfZXJybm8gKHNhdmVkX2Vycm5vKTsKKysgIHJldHVybiAocGx1cmFsID09IDAKKysJICA/IChjaGFyICopIG1zZ2lkMQorKwkgIC8qIFVzZSB0aGUgR2VybWFuaWMgcGx1cmFsIHJ1bGUuICAqLworKwkgIDogbiA9PSAxID8gKGNoYXIgKikgbXNnaWQxIDogKGNoYXIgKikgbXNnaWQyKTsKKyt9CisrCisrCisrY2hhciAqCisraW50ZXJuYWxfZnVuY3Rpb24KKytfbmxfZmluZF9tc2cgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlLAorKwkgICAgICBzdHJ1Y3QgYmluZGluZyAqZG9tYWluYmluZGluZywgY29uc3QgY2hhciAqbXNnaWQsCisrCSAgICAgIHNpemVfdCAqbGVuZ3RocCkKKyt7CisrICBzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluOworKyAgbmxzX3VpbnQzMiBuc3RyaW5nczsKKysgIHNpemVfdCBhY3Q7CisrICBjaGFyICpyZXN1bHQ7CisrICBzaXplX3QgcmVzdWx0bGVuOworKworKyAgaWYgKGRvbWFpbl9maWxlLT5kZWNpZGVkID09IDApCisrICAgIF9ubF9sb2FkX2RvbWFpbiAoZG9tYWluX2ZpbGUsIGRvbWFpbmJpbmRpbmcpOworKworKyAgaWYgKGRvbWFpbl9maWxlLT5kYXRhID09IE5VTEwpCisrICAgIHJldHVybiBOVUxMOworKworKyAgZG9tYWluID0gKHN0cnVjdCBsb2FkZWRfZG9tYWluICopIGRvbWFpbl9maWxlLT5kYXRhOworKworKyAgbnN0cmluZ3MgPSBkb21haW4tPm5zdHJpbmdzOworKworKyAgLyogTG9jYXRlIHRoZSBNU0dJRCBhbmQgaXRzIHRyYW5zbGF0aW9uLiAgKi8KKysgIGlmIChkb21haW4tPmhhc2hfdGFiICE9IE5VTEwpCisrICAgIHsKKysgICAgICAvKiBVc2UgdGhlIGhhc2hpbmcgdGFibGUuICAqLworKyAgICAgIG5sc191aW50MzIgbGVuID0gc3RybGVuIChtc2dpZCk7CisrICAgICAgbmxzX3VpbnQzMiBoYXNoX3ZhbCA9IGhhc2hfc3RyaW5nIChtc2dpZCk7CisrICAgICAgbmxzX3VpbnQzMiBpZHggPSBoYXNoX3ZhbCAlIGRvbWFpbi0+aGFzaF9zaXplOworKyAgICAgIG5sc191aW50MzIgaW5jciA9IDEgKyAoaGFzaF92YWwgJSAoZG9tYWluLT5oYXNoX3NpemUgLSAyKSk7CisrCisrICAgICAgd2hpbGUgKDEpCisrCXsKKysJICBubHNfdWludDMyIG5zdHIgPQorKwkgICAgVyAoZG9tYWluLT5tdXN0X3N3YXBfaGFzaF90YWIsIGRvbWFpbi0+aGFzaF90YWJbaWR4XSk7CisrCisrCSAgaWYgKG5zdHIgPT0gMCkKKysJICAgIC8qIEhhc2ggdGFibGUgZW50cnkgaXMgZW1wdHkuICAqLworKwkgICAgcmV0dXJuIE5VTEw7CisrCisrCSAgbnN0ci0tOworKworKwkgIC8qIENvbXBhcmUgbXNnaWQgd2l0aCB0aGUgb3JpZ2luYWwgc3RyaW5nIGF0IGluZGV4IG5zdHIuCisrCSAgICAgV2UgY29tcGFyZSB0aGUgbGVuZ3RocyB3aXRoID49LCBub3QgPT0sIGJlY2F1c2UgcGx1cmFsIGVudHJpZXMKKysJICAgICBhcmUgcmVwcmVzZW50ZWQgYnkgc3RyaW5ncyB3aXRoIGFuIGVtYmVkZGVkIE5VTC4gICovCisrCSAgaWYgKG5zdHIgPCBuc3RyaW5ncworKwkgICAgICA/IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPm9yaWdfdGFiW25zdHJdLmxlbmd0aCkgPj0gbGVuCisrCQkmJiAoc3RyY21wIChtc2dpZCwKKysJCQkgICAgZG9tYWluLT5kYXRhICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCisrCQkJCQkgICAgICBkb21haW4tPm9yaWdfdGFiW25zdHJdLm9mZnNldCkpCisrCQkgICAgPT0gMCkKKysJICAgICAgOiBkb21haW4tPm9yaWdfc3lzZGVwX3RhYltuc3RyIC0gbnN0cmluZ3NdLmxlbmd0aCA+IGxlbgorKwkJJiYgKHN0cmNtcCAobXNnaWQsCisrCQkJICAgIGRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiW25zdHIgLSBuc3RyaW5nc10ucG9pbnRlcikKKysJCSAgICA9PSAwKSkKKysJICAgIHsKKysJICAgICAgYWN0ID0gbnN0cjsKKysJICAgICAgZ290byBmb3VuZDsKKysJICAgIH0KKysKKysJICBpZiAoaWR4ID49IGRvbWFpbi0+aGFzaF9zaXplIC0gaW5jcikKKysJICAgIGlkeCAtPSBkb21haW4tPmhhc2hfc2l6ZSAtIGluY3I7CisrCSAgZWxzZQorKwkgICAgaWR4ICs9IGluY3I7CisrCX0KKysgICAgICAvKiBOT1RSRUFDSEVEICovCisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIC8qIFRyeSB0aGUgZGVmYXVsdCBtZXRob2Q6ICBiaW5hcnkgc2VhcmNoIGluIHRoZSBzb3J0ZWQgYXJyYXkgb2YKKysJIG1lc3NhZ2VzLiAgKi8KKysgICAgICBzaXplX3QgdG9wLCBib3R0b207CisrCisrICAgICAgYm90dG9tID0gMDsKKysgICAgICB0b3AgPSBuc3RyaW5nczsKKysgICAgICB3aGlsZSAoYm90dG9tIDwgdG9wKQorKwl7CisrCSAgaW50IGNtcF92YWw7CisrCisrCSAgYWN0ID0gKGJvdHRvbSArIHRvcCkgLyAyOworKwkgIGNtcF92YWwgPSBzdHJjbXAgKG1zZ2lkLCAoZG9tYWluLT5kYXRhCisrCQkJCSAgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorKwkJCQkJIGRvbWFpbi0+b3JpZ190YWJbYWN0XS5vZmZzZXQpKSk7CisrCSAgaWYgKGNtcF92YWwgPCAwKQorKwkgICAgdG9wID0gYWN0OworKwkgIGVsc2UgaWYgKGNtcF92YWwgPiAwKQorKwkgICAgYm90dG9tID0gYWN0ICsgMTsKKysJICBlbHNlCisrCSAgICBnb3RvIGZvdW5kOworKwl9CisrICAgICAgLyogTm8gdHJhbnNsYXRpb24gd2FzIGZvdW5kLiAgKi8KKysgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKworKyBmb3VuZDoKKysgIC8qIFRoZSB0cmFuc2xhdGlvbiB3YXMgZm91bmQgYXQgaW5kZXggQUNULiAgSWYgd2UgaGF2ZSB0byBjb252ZXJ0IHRoZQorKyAgICAgc3RyaW5nIHRvIHVzZSBhIGRpZmZlcmVudCBjaGFyYWN0ZXIgc2V0LCB0aGlzIGlzIHRoZSB0aW1lLiAgKi8KKysgIGlmIChhY3QgPCBuc3RyaW5ncykKKysgICAgeworKyAgICAgIHJlc3VsdCA9IChjaGFyICopCisrCShkb21haW4tPmRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZG9tYWluLT50cmFuc190YWJbYWN0XS5vZmZzZXQpKTsKKysgICAgICByZXN1bHRsZW4gPSBXIChkb21haW4tPm11c3Rfc3dhcCwgZG9tYWluLT50cmFuc190YWJbYWN0XS5sZW5ndGgpICsgMTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgcmVzdWx0ID0gKGNoYXIgKikgZG9tYWluLT50cmFuc19zeXNkZXBfdGFiW2FjdCAtIG5zdHJpbmdzXS5wb2ludGVyOworKyAgICAgIHJlc3VsdGxlbiA9IGRvbWFpbi0+dHJhbnNfc3lzZGVwX3RhYlthY3QgLSBuc3RyaW5nc10ubGVuZ3RoOworKyAgICB9CisrCisrI2lmIGRlZmluZWQgX0xJQkMgfHwgSEFWRV9JQ09OVgorKyAgaWYgKGRvbWFpbi0+Y29kZXNldF9jbnRyCisrICAgICAgIT0gKGRvbWFpbmJpbmRpbmcgIT0gTlVMTCA/IGRvbWFpbmJpbmRpbmctPmNvZGVzZXRfY250ciA6IDApKQorKyAgICB7CisrICAgICAgLyogVGhlIGRvbWFpbidzIGNvZGVzZXQgaGFzIGNoYW5nZWQgdGhyb3VnaCBiaW5kX3RleHRkb21haW5fY29kZXNldCgpCisrCSBzaW5jZSB0aGUgbWVzc2FnZSBjYXRhbG9nIHdhcyBpbml0aWFsaXplZCBvciBsYXN0IGFjY2Vzc2VkLiAgV2UKKysJIGhhdmUgdG8gcmVpbml0aWFsaXplIHRoZSBjb252ZXJ0ZXIuICAqLworKyAgICAgIF9ubF9mcmVlX2RvbWFpbl9jb252IChkb21haW4pOworKyAgICAgIF9ubF9pbml0X2RvbWFpbl9jb252IChkb21haW5fZmlsZSwgZG9tYWluLCBkb21haW5iaW5kaW5nKTsKKysgICAgfQorKworKyAgaWYgKAorKyMgaWZkZWYgX0xJQkMKKysgICAgICBkb21haW4tPmNvbnYgIT0gKF9fZ2NvbnZfdCkgLTEKKysjIGVsc2UKKysjICBpZiBIQVZFX0lDT05WCisrICAgICAgZG9tYWluLT5jb252ICE9IChpY29udl90KSAtMQorKyMgIGVuZGlmCisrIyBlbmRpZgorKyAgICAgICkKKysgICAgeworKyAgICAgIC8qIFdlIGFyZSBzdXBwb3NlZCB0byBkbyBhIGNvbnZlcnNpb24uICBGaXJzdCBhbGxvY2F0ZSBhbgorKwkgYXBwcm9wcmlhdGUgdGFibGUgd2l0aCB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgdGhlIHRhYmxlCisrCSBvZiB0cmFuc2xhdGlvbnMgaW4gdGhlIGZpbGUsIHdoZXJlIHdlIGNhbiBwdXQgdGhlIHBvaW50ZXJzCisrCSB0byB0aGUgY29udmVydGVkIHN0cmluZ3MgaW4uCisrCSBUaGVyZSBpcyBhIHNsaWdodCBjb21wbGljYXRpb24gd2l0aCBwbHVyYWwgZW50cmllcy4gIFRoZXkKKysJIGFyZSByZXByZXNlbnRlZCBieSBjb25zZWN1dGl2ZSBOVUwgdGVybWluYXRlZCBzdHJpbmdzLiAgV2UKKysJIGhhbmRsZSB0aGlzIGNhc2UgYnkgY29udmVydGluZyBSRVNVTFRMRU4gYnl0ZXMsIGluY2x1ZGluZworKwkgTlVMcy4gICovCisrCisrICAgICAgaWYgKGRvbWFpbi0+Y29udl90YWIgPT0gTlVMTAorKwkgICYmICgoZG9tYWluLT5jb252X3RhYiA9CisrCQkgKGNoYXIgKiopIGNhbGxvYyAobnN0cmluZ3MgKyBkb21haW4tPm5fc3lzZGVwX3N0cmluZ3MsCisrCQkJCSAgIHNpemVvZiAoY2hhciAqKSkpCisrCSAgICAgID09IE5VTEwpKQorKwkvKiBNYXJrIHRoYXQgd2UgZGlkbid0IHN1Y2NlZWQgYWxsb2NhdGluZyBhIHRhYmxlLiAgKi8KKysJZG9tYWluLT5jb252X3RhYiA9IChjaGFyICoqKSAtMTsKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoZG9tYWluLT5jb252X3RhYiA9PSAoY2hhciAqKikgLTEsIDApKQorKwkvKiBOb3RoaW5nIHdlIGNhbiBkbywgbm8gbW9yZSBtZW1vcnkuICAqLworKwlnb3RvIGNvbnZlcnRlZDsKKysKKysgICAgICBpZiAoZG9tYWluLT5jb252X3RhYlthY3RdID09IE5VTEwpCisrCXsKKysJICAvKiBXZSBoYXZlbid0IHVzZWQgdGhpcyBzdHJpbmcgc28gZmFyLCBzbyBpdCBpcyBub3QKKysJICAgICB0cmFuc2xhdGVkIHlldC4gIERvIHRoaXMgbm93LiAgKi8KKysJICAvKiBXZSB1c2UgYSBiaXQgbW9yZSBlZmZpY2llbnQgbWVtb3J5IGhhbmRsaW5nLgorKwkgICAgIFdlIGFsbG9jYXRlIGFsd2F5cyBsYXJnZXIgYmxvY2tzIHdoaWNoIGdldCB1c2VkIG92ZXIKKysJICAgICB0aW1lLiAgVGhpcyBpcyBmYXN0ZXIgdGhhbiBtYW55IHNtYWxsIGFsbG9jYXRpb25zLiAgICovCisrCSAgX19saWJjX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkIChzdGF0aWMsIGxvY2spCisrIyBkZWZpbmUgSU5JVElBTF9CTE9DS19TSVpFCTQwODAKKysJICBzdGF0aWMgdW5zaWduZWQgY2hhciAqZnJlZW1lbTsKKysJICBzdGF0aWMgc2l6ZV90IGZyZWVtZW1fc2l6ZTsKKysKKysJICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1ZjsKKysJICB1bnNpZ25lZCBjaGFyICpvdXRidWY7CisrCSAgaW50IG1hbGxvY19jb3VudDsKKysjIGlmbmRlZiBfTElCQworKwkgIHRyYW5zbWVtX2Jsb2NrX3QgKnRyYW5zbWVtX2xpc3QgPSBOVUxMOworKyMgZW5kaWYKKysKKysJICBfX2xpYmNfbG9ja19sb2NrIChsb2NrKTsKKysKKysJICBpbmJ1ZiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHJlc3VsdDsKKysJICBvdXRidWYgPSBmcmVlbWVtICsgc2l6ZW9mIChzaXplX3QpOworKworKwkgIG1hbGxvY19jb3VudCA9IDA7CisrCSAgd2hpbGUgKDEpCisrCSAgICB7CisrCSAgICAgIHRyYW5zbWVtX2Jsb2NrX3QgKm5ld21lbTsKKysjIGlmZGVmIF9MSUJDCisrCSAgICAgIHNpemVfdCBub25fcmV2ZXJzaWJsZTsKKysJICAgICAgaW50IHJlczsKKysKKysJICAgICAgaWYgKGZyZWVtZW1fc2l6ZSA8IHNpemVvZiAoc2l6ZV90KSkKKysJCWdvdG8gcmVzaXplX2ZyZWVtZW07CisrCisrCSAgICAgIHJlcyA9IF9fZ2NvbnYgKGRvbWFpbi0+Y29udiwKKysJCQkgICAgICZpbmJ1ZiwgaW5idWYgKyByZXN1bHRsZW4sCisrCQkJICAgICAmb3V0YnVmLAorKwkJCSAgICAgb3V0YnVmICsgZnJlZW1lbV9zaXplIC0gc2l6ZW9mIChzaXplX3QpLAorKwkJCSAgICAgJm5vbl9yZXZlcnNpYmxlKTsKKysKKysJICAgICAgaWYgKHJlcyA9PSBfX0dDT05WX09LIHx8IHJlcyA9PSBfX0dDT05WX0VNUFRZX0lOUFVUKQorKwkJYnJlYWs7CisrCisrCSAgICAgIGlmIChyZXMgIT0gX19HQ09OVl9GVUxMX09VVFBVVCkKKysJCXsKKysJCSAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKysJCSAgZ290byBjb252ZXJ0ZWQ7CisrCQl9CisrCisrCSAgICAgIGluYnVmID0gcmVzdWx0OworKyMgZWxzZQorKyMgIGlmIEhBVkVfSUNPTlYKKysJICAgICAgY29uc3QgY2hhciAqaW5wdHIgPSAoY29uc3QgY2hhciAqKSBpbmJ1ZjsKKysJICAgICAgc2l6ZV90IGlubGVmdCA9IHJlc3VsdGxlbjsKKysJICAgICAgY2hhciAqb3V0cHRyID0gKGNoYXIgKikgb3V0YnVmOworKwkgICAgICBzaXplX3Qgb3V0bGVmdDsKKysKKysJICAgICAgaWYgKGZyZWVtZW1fc2l6ZSA8IHNpemVvZiAoc2l6ZV90KSkKKysJCWdvdG8gcmVzaXplX2ZyZWVtZW07CisrCisrCSAgICAgIG91dGxlZnQgPSBmcmVlbWVtX3NpemUgLSBzaXplb2YgKHNpemVfdCk7CisrCSAgICAgIGlmIChpY29udiAoZG9tYWluLT5jb252LAorKwkJCSAoSUNPTlZfQ09OU1QgY2hhciAqKikgJmlucHRyLCAmaW5sZWZ0LAorKwkJCSAmb3V0cHRyLCAmb3V0bGVmdCkKKysJCSAgIT0gKHNpemVfdCkgKC0xKSkKKysJCXsKKysJCSAgb3V0YnVmID0gKHVuc2lnbmVkIGNoYXIgKikgb3V0cHRyOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgaWYgKGVycm5vICE9IEUyQklHKQorKwkJeworKwkJICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKwkJICBnb3RvIGNvbnZlcnRlZDsKKysJCX0KKysjICBlbmRpZgorKyMgZW5kaWYKKysKKysJICAgIHJlc2l6ZV9mcmVlbWVtOgorKwkgICAgICAvKiBXZSBtdXN0IGFsbG9jYXRlIGEgbmV3IGJ1ZmZlciBvciByZXNpemUgdGhlIG9sZCBvbmUuICAqLworKwkgICAgICBpZiAobWFsbG9jX2NvdW50ID4gMCkKKysJCXsKKysJCSAgKyttYWxsb2NfY291bnQ7CisrCQkgIGZyZWVtZW1fc2l6ZSA9IG1hbGxvY19jb3VudCAqIElOSVRJQUxfQkxPQ0tfU0laRTsKKysJCSAgbmV3bWVtID0gKHRyYW5zbWVtX2Jsb2NrX3QgKikgcmVhbGxvYyAodHJhbnNtZW1fbGlzdCwKKysJCQkJCQkJIGZyZWVtZW1fc2l6ZSk7CisrIyBpZmRlZiBfTElCQworKwkJICBpZiAobmV3bWVtICE9IE5VTEwpCisrCQkgICAgdHJhbnNtZW1fbGlzdCA9IHRyYW5zbWVtX2xpc3QtPm5leHQ7CisrCQkgIGVsc2UKKysJCSAgICB7CisrCQkgICAgICBzdHJ1Y3QgdHJhbnNtZW1fbGlzdCAqb2xkID0gdHJhbnNtZW1fbGlzdDsKKysKKysJCSAgICAgIHRyYW5zbWVtX2xpc3QgPSB0cmFuc21lbV9saXN0LT5uZXh0OworKwkJICAgICAgZnJlZSAob2xkKTsKKysJCSAgICB9CisrIyBlbmRpZgorKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIG1hbGxvY19jb3VudCA9IDE7CisrCQkgIGZyZWVtZW1fc2l6ZSA9IElOSVRJQUxfQkxPQ0tfU0laRTsKKysJCSAgbmV3bWVtID0gKHRyYW5zbWVtX2Jsb2NrX3QgKikgbWFsbG9jIChmcmVlbWVtX3NpemUpOworKwkJfQorKwkgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAobmV3bWVtID09IE5VTEwsIDApKQorKwkJeworKwkJICBmcmVlbWVtID0gTlVMTDsKKysJCSAgZnJlZW1lbV9zaXplID0gMDsKKysJCSAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKysJCSAgZ290byBjb252ZXJ0ZWQ7CisrCQl9CisrCisrIyBpZmRlZiBfTElCQworKwkgICAgICAvKiBBZGQgdGhlIGJsb2NrIHRvIHRoZSBsaXN0IG9mIGJsb2NrcyB3ZSBoYXZlIHRvIGZyZWUKKysgICAgICAgICAgICAgICAgIGF0IHNvbWUgcG9pbnQuICAqLworKwkgICAgICBuZXdtZW0tPm5leHQgPSB0cmFuc21lbV9saXN0OworKwkgICAgICB0cmFuc21lbV9saXN0ID0gbmV3bWVtOworKworKwkgICAgICBmcmVlbWVtID0gbmV3bWVtLT5kYXRhOworKwkgICAgICBmcmVlbWVtX3NpemUgLT0gb2Zmc2V0b2YgKHN0cnVjdCB0cmFuc21lbV9saXN0LCBkYXRhKTsKKysjIGVsc2UKKysJICAgICAgdHJhbnNtZW1fbGlzdCA9IG5ld21lbTsKKysJICAgICAgZnJlZW1lbSA9IG5ld21lbTsKKysjIGVuZGlmCisrCisrCSAgICAgIG91dGJ1ZiA9IGZyZWVtZW0gKyBzaXplb2YgKHNpemVfdCk7CisrCSAgICB9CisrCisrCSAgLyogV2UgaGF2ZSBub3cgaW4gb3VyIGJ1ZmZlciBhIGNvbnZlcnRlZCBzdHJpbmcuICBQdXQgdGhpcworKwkgICAgIGludG8gdGhlIHRhYmxlIG9mIGNvbnZlcnNpb25zLiAgKi8KKysJICAqKHNpemVfdCAqKSBmcmVlbWVtID0gb3V0YnVmIC0gZnJlZW1lbSAtIHNpemVvZiAoc2l6ZV90KTsKKysJICBkb21haW4tPmNvbnZfdGFiW2FjdF0gPSAoY2hhciAqKSBmcmVlbWVtOworKwkgIC8qIFNocmluayBmcmVlbWVtLCBidXQga2VlcCBpdCBhbGlnbmVkLiAgKi8KKysJICBmcmVlbWVtX3NpemUgLT0gb3V0YnVmIC0gZnJlZW1lbTsKKysJICBmcmVlbWVtID0gb3V0YnVmOworKwkgIGZyZWVtZW0gKz0gZnJlZW1lbV9zaXplICYgKGFsaWdub2YgKHNpemVfdCkgLSAxKTsKKysJICBmcmVlbWVtX3NpemUgPSBmcmVlbWVtX3NpemUgJiB+IChhbGlnbm9mIChzaXplX3QpIC0gMSk7CisrCisrCSAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKysJfQorKworKyAgICAgIC8qIE5vdyBkb21haW4tPmNvbnZfdGFiW2FjdF0gY29udGFpbnMgdGhlIHRyYW5zbGF0aW9uIG9mIGFsbAorKwkgdGhlIHBsdXJhbCB2YXJpYW50cy4gICovCisrICAgICAgcmVzdWx0ID0gZG9tYWluLT5jb252X3RhYlthY3RdICsgc2l6ZW9mIChzaXplX3QpOworKyAgICAgIHJlc3VsdGxlbiA9ICooc2l6ZV90ICopIGRvbWFpbi0+Y29udl90YWJbYWN0XTsKKysgICAgfQorKworKyBjb252ZXJ0ZWQ6CisrICAvKiBUaGUgcmVzdWx0IHN0cmluZyBpcyBjb252ZXJ0ZWQuICAqLworKworKyNlbmRpZiAvKiBfTElCQyB8fCBIQVZFX0lDT05WICovCisrCisrICAqbGVuZ3RocCA9IHJlc3VsdGxlbjsKKysgIHJldHVybiByZXN1bHQ7CisrfQorKworKworKy8qIExvb2sgdXAgYSBwbHVyYWwgdmFyaWFudC4gICovCisrc3RhdGljIGNoYXIgKgorK2ludGVybmFsX2Z1bmN0aW9uCisrcGx1cmFsX2xvb2t1cCAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGludCBuLAorKwkgICAgICAgY29uc3QgY2hhciAqdHJhbnNsYXRpb24sIHNpemVfdCB0cmFuc2xhdGlvbl9sZW4pCisreworKyAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbmRhdGEgPSAoc3RydWN0IGxvYWRlZF9kb21haW4gKikgZG9tYWluLT5kYXRhOworKyAgdW5zaWduZWQgbG9uZyBpbnQgaW5kZXg7CisrICBjb25zdCBjaGFyICpwOworKworKyAgaW5kZXggPSBwbHVyYWxfZXZhbCAoZG9tYWluZGF0YS0+cGx1cmFsLCBuKTsKKysgIGlmIChpbmRleCA+PSBkb21haW5kYXRhLT5ucGx1cmFscykKKysgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgSXQgbWVhbnMgdGhlIHBsdXJhbCBleHByZXNzaW9uIGFuZCB0aGUKKysgICAgICAgZ2l2ZW4gbWF4aW11bSB2YWx1ZSBkbyBub3QgbWF0Y2guICAqLworKyAgICBpbmRleCA9IDA7CisrCisrICAvKiBTa2lwIElOREVYIHN0cmluZ3MgYXQgVFJBTlNMQVRJT04uICAqLworKyAgcCA9IHRyYW5zbGF0aW9uOworKyAgd2hpbGUgKGluZGV4LS0gPiAwKQorKyAgICB7CisrI2lmZGVmIF9MSUJDCisrICAgICAgcCA9IF9fcmF3bWVtY2hyIChwLCAnXDAnKTsKKysjZWxzZQorKyAgICAgIHAgPSBzdHJjaHIgKHAsICdcMCcpOworKyNlbmRpZgorKyAgICAgIC8qIEFuZCBza2lwIG92ZXIgdGhlIE5VTCBieXRlLiAgKi8KKysgICAgICBwKys7CisrCisrICAgICAgaWYgKHAgPj0gdHJhbnNsYXRpb24gKyB0cmFuc2xhdGlvbl9sZW4pCisrCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gIEl0IG1lYW5zIHRoZSBwbHVyYWwgZXhwcmVzc2lvbgorKwkgICBldmFsdWF0ZWQgdG8gYSB2YWx1ZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHZhcmlhbnRzCisrCSAgIGF2YWlsYWJsZSBmb3IgTVNHSUQxLiAgKi8KKysJcmV0dXJuIChjaGFyICopIHRyYW5zbGF0aW9uOworKyAgICB9CisrICByZXR1cm4gKGNoYXIgKikgcDsKKyt9CisrCisrI2lmbmRlZiBfTElCQworKy8qIFJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgbG9jYWxlIENBVEVHT1JZLiAgKi8KKytzdGF0aWMgY29uc3QgY2hhciAqCisraW50ZXJuYWxfZnVuY3Rpb24KKytjYXRlZ29yeV90b19uYW1lIChpbnQgY2F0ZWdvcnkpCisreworKyAgY29uc3QgY2hhciAqcmV0dmFsOworKworKyAgc3dpdGNoIChjYXRlZ29yeSkKKysgIHsKKysjaWZkZWYgTENfQ09MTEFURQorKyAgY2FzZSBMQ19DT0xMQVRFOgorKyAgICByZXR2YWwgPSAiTENfQ09MTEFURSI7CisrICAgIGJyZWFrOworKyNlbmRpZgorKyNpZmRlZiBMQ19DVFlQRQorKyAgY2FzZSBMQ19DVFlQRToKKysgICAgcmV0dmFsID0gIkxDX0NUWVBFIjsKKysgICAgYnJlYWs7CisrI2VuZGlmCisrI2lmZGVmIExDX01PTkVUQVJZCisrICBjYXNlIExDX01PTkVUQVJZOgorKyAgICByZXR2YWwgPSAiTENfTU9ORVRBUlkiOworKyAgICBicmVhazsKKysjZW5kaWYKKysjaWZkZWYgTENfTlVNRVJJQworKyAgY2FzZSBMQ19OVU1FUklDOgorKyAgICByZXR2YWwgPSAiTENfTlVNRVJJQyI7CisrICAgIGJyZWFrOworKyNlbmRpZgorKyNpZmRlZiBMQ19USU1FCisrICBjYXNlIExDX1RJTUU6CisrICAgIHJldHZhbCA9ICJMQ19USU1FIjsKKysgICAgYnJlYWs7CisrI2VuZGlmCisrI2lmZGVmIExDX01FU1NBR0VTCisrICBjYXNlIExDX01FU1NBR0VTOgorKyAgICByZXR2YWwgPSAiTENfTUVTU0FHRVMiOworKyAgICBicmVhazsKKysjZW5kaWYKKysjaWZkZWYgTENfUkVTUE9OU0UKKysgIGNhc2UgTENfUkVTUE9OU0U6CisrICAgIHJldHZhbCA9ICJMQ19SRVNQT05TRSI7CisrICAgIGJyZWFrOworKyNlbmRpZgorKyNpZmRlZiBMQ19BTEwKKysgIGNhc2UgTENfQUxMOgorKyAgICAvKiBUaGlzIG1pZ2h0IG5vdCBtYWtlIHNlbnNlIGJ1dCBpcyBwZXJoYXBzIGJldHRlciB0aGFuIGFueSBvdGhlcgorKyAgICAgICB2YWx1ZS4gICovCisrICAgIHJldHZhbCA9ICJMQ19BTEwiOworKyAgICBicmVhazsKKysjZW5kaWYKKysgIGRlZmF1bHQ6CisrICAgIC8qIElmIHlvdSBoYXZlIGEgYmV0dGVyIGlkZWEgZm9yIGEgZGVmYXVsdCB2YWx1ZSBsZXQgbWUga25vdy4gICovCisrICAgIHJldHZhbCA9ICJMQ19YWFgiOworKyAgfQorKworKyAgcmV0dXJuIHJldHZhbDsKKyt9CisrI2VuZGlmCisrCisrLyogR3Vlc3MgdmFsdWUgb2YgY3VycmVudCBsb2NhbGUgZnJvbSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgKi8KKytzdGF0aWMgY29uc3QgY2hhciAqCisraW50ZXJuYWxfZnVuY3Rpb24KKytndWVzc19jYXRlZ29yeV92YWx1ZSAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWUpCisreworKyAgY29uc3QgY2hhciAqbGFuZ3VhZ2U7CisrICBjb25zdCBjaGFyICpyZXR2YWw7CisrCisrICAvKiBUaGUgaGlnaGVzdCBwcmlvcml0eSB2YWx1ZSBpcyB0aGUgYExBTkdVQUdFJyBlbnZpcm9ubWVudAorKyAgICAgdmFyaWFibGUuICBCdXQgd2UgZG9uJ3QgdXNlIHRoZSB2YWx1ZSBpZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkCisrICAgICBsb2NhbGUgaXMgdGhlIEMgbG9jYWxlLiAgVGhpcyBpcyBhIEdOVSBleHRlbnNpb24uICAqLworKyAgbGFuZ3VhZ2UgPSBnZXRlbnYgKCJMQU5HVUFHRSIpOworKyAgaWYgKGxhbmd1YWdlICE9IE5VTEwgJiYgbGFuZ3VhZ2VbMF0gPT0gJ1wwJykKKysgICAgbGFuZ3VhZ2UgPSBOVUxMOworKworKyAgLyogV2UgaGF2ZSB0byBwcm9jZWVkIHdpdGggdGhlIFBPU0lYIG1ldGhvZHMgb2YgbG9va2luZyB0byBgTENfQUxMJywKKysgICAgIGBMQ194eHgnLCBhbmQgYExBTkcnLiAgT24gc29tZSBzeXN0ZW1zIHRoaXMgY2FuIGJlIGRvbmUgYnkgdGhlCisrICAgICBgc2V0bG9jYWxlJyBmdW5jdGlvbiBpdHNlbGYuICAqLworKyNpZmRlZiBfTElCQworKyAgcmV0dmFsID0gX19jdXJyZW50X2xvY2FsZV9uYW1lIChjYXRlZ29yeSk7CisrI2Vsc2UKKysgIHJldHZhbCA9IF9ubF9sb2NhbGVfbmFtZSAoY2F0ZWdvcnksIGNhdGVnb3J5bmFtZSk7CisrI2VuZGlmCisrCisrICAvKiBJZ25vcmUgTEFOR1VBR0UgaWYgdGhlIGxvY2FsZSBpcyBzZXQgdG8gIkMiIGJlY2F1c2UKKysgICAgIDEuICJDIiBsb2NhbGUgdXN1YWxseSB1c2VzIHRoZSBBU0NJSSBlbmNvZGluZywgYW5kIG1vc3QgaW50ZXJuYXRpb25hbAorKwltZXNzYWdlcyB1c2Ugbm9uLUFTQ0lJIGNoYXJhY3RlcnMuIFRoZXNlIGNoYXJhY3RlcnMgZ2V0IGRpc3BsYXllZAorKwlhcyBxdWVzdGlvbiBtYXJrcyAoaWYgdXNpbmcgZ2xpYmMncyBpY29udigpKSBvciBhcyBpbnZhbGlkIDgtYml0CisrCWNoYXJhY3RlcnMgKGJlY2F1c2Ugb3RoZXIgaWNvbnYoKXMgcmVmdXNlIHRvIGNvbnZlcnQgbW9zdCBub24tQVNDSUkKKysJY2hhcmFjdGVycyB0byBBU0NJSSkuIEluIGFueSBjYXNlLCB0aGUgb3V0cHV0IGlzIHVnbHkuCisrICAgICAyLiBUaGUgcHJlY2lzZSBvdXRwdXQgb2Ygc29tZSBwcm9ncmFtcyBpbiB0aGUgIkMiIGxvY2FsZSBpcyBzcGVjaWZpZWQKKysJYnkgUE9TSVggYW5kIHNob3VsZCBub3QgZGVwZW5kIG9uIGVudmlyb25tZW50IHZhcmlhYmxlcyBsaWtlCisrCSJMQU5HVUFHRSIuICBXZSBhbGxvdyBzdWNoIHByb2dyYW1zIHRvIHVzZSBnZXR0ZXh0KCkuICAqLworKyAgcmV0dXJuIGxhbmd1YWdlICE9IE5VTEwgJiYgc3RyY21wIChyZXR2YWwsICJDIikgIT0gMCA/IGxhbmd1YWdlIDogcmV0dmFsOworK30KKysKKysvKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKysKKysvKiBXZSBkb24ndCB3YW50IGxpYmludGwuYSB0byBkZXBlbmQgb24gYW55IG90aGVyIGxpYnJhcnkuICBTbyB3ZQorKyAgIGF2b2lkIHRoZSBub24tc3RhbmRhcmQgZnVuY3Rpb24gc3RwY3B5LiAgSW4gR05VIEMgTGlicmFyeSB0aGlzCisrICAgZnVuY3Rpb24gaXMgYXZhaWxhYmxlLCB0aG91Z2guICBBbHNvIGFsbG93IHRoZSBzeW1ib2wgSEFWRV9TVFBDUFkKKysgICB0byBiZSBkZWZpbmVkLiAgKi8KKysjaWYgIV9MSUJDICYmICFIQVZFX1NUUENQWQorK3N0YXRpYyBjaGFyICoKKytzdHBjcHkgKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYykKKyt7CisrICB3aGlsZSAoKCpkZXN0KysgPSAqc3JjKyspICE9ICdcMCcpCisrICAgIC8qIERvIG5vdGhpbmcuICovIDsKKysgIHJldHVybiBkZXN0IC0gMTsKKyt9CisrI2VuZGlmCisrCisrI2lmICFfTElCQyAmJiAhSEFWRV9NRU1QQ1BZCisrc3RhdGljIHZvaWQgKgorK21lbXBjcHkgKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCisreworKyAgcmV0dXJuICh2b2lkICopICgoY2hhciAqKSBtZW1jcHkgKGRlc3QsIHNyYywgbikgKyBuKTsKKyt9CisrI2VuZGlmCisrCisrCisrI2lmZGVmIF9MSUJDCisrLyogSWYgd2Ugd2FudCB0byBmcmVlIGFsbCByZXNvdXJjZXMgd2UgaGF2ZSB0byBkbyBzb21lIHdvcmsgYXQKKysgICBwcm9ncmFtJ3MgZW5kLiAgKi8KKytsaWJjX2ZyZWVyZXNfZm4gKGZyZWVfbWVtKQorK3sKKysgIHZvaWQgKm9sZDsKKysKKysgIHdoaWxlIChfbmxfZG9tYWluX2JpbmRpbmdzICE9IE5VTEwpCisrICAgIHsKKysgICAgICBzdHJ1Y3QgYmluZGluZyAqb2xkcCA9IF9ubF9kb21haW5fYmluZGluZ3M7CisrICAgICAgX25sX2RvbWFpbl9iaW5kaW5ncyA9IF9ubF9kb21haW5fYmluZGluZ3MtPm5leHQ7CisrICAgICAgaWYgKG9sZHAtPmRpcm5hbWUgIT0gSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpKQorKwkvKiBZZXMsIHRoaXMgaXMgYSBwb2ludGVyIGNvbXBhcmlzb24uICAqLworKwlmcmVlIChvbGRwLT5kaXJuYW1lKTsKKysgICAgICBmcmVlIChvbGRwLT5jb2Rlc2V0KTsKKysgICAgICBmcmVlIChvbGRwKTsKKysgICAgfQorKworKyAgaWYgKF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluICE9IF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluKQorKyAgICAvKiBZZXMsIGFnYWluIGEgcG9pbnRlciBjb21wYXJpc29uLiAgKi8KKysgICAgZnJlZSAoKGNoYXIgKikgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4pOworKworKyAgLyogUmVtb3ZlIHRoZSBzZWFyY2ggdHJlZSB3aXRoIHRoZSBrbm93biB0cmFuc2xhdGlvbnMuICAqLworKyAgX190ZGVzdHJveSAocm9vdCwgZnJlZSk7CisrICByb290ID0gTlVMTDsKKysKKysgIHdoaWxlICh0cmFuc21lbV9saXN0ICE9IE5VTEwpCisrICAgIHsKKysgICAgICBvbGQgPSB0cmFuc21lbV9saXN0OworKyAgICAgIHRyYW5zbWVtX2xpc3QgPSB0cmFuc21lbV9saXN0LT5uZXh0OworKyAgICAgIGZyZWUgKG9sZCk7CisrICAgIH0KKyt9CisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZGNuZ2V0dGV4dC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2RjbmdldHRleHQuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjM3NTc0NTA0OCAtMDQwMAorQEAgLTAsMCArMSw1NyBAQAorKy8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSBkY25nZXR0ZXh0KDMpIGZ1bmN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxpYmludGwuaD4KKysjZWxzZQorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorKyNlbmRpZgorKworKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKysKKysvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisrICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorKyAgIGNvZGUgaXMgYWxzbyB1c2VkIGluIEdOVSBDIExpYnJhcnkgd2hlcmUgdGhlIG5hbWVzIGhhdmUgYSBfXworKyAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisrI2lmZGVmIF9MSUJDCisrIyBkZWZpbmUgRENOR0VUVEVYVCBfX2RjbmdldHRleHQKKysjIGRlZmluZSBEQ0lHRVRURVhUIF9fZGNpZ2V0dGV4dAorKyNlbHNlCisrIyBkZWZpbmUgRENOR0VUVEVYVCBsaWJpbnRsX2RjbmdldHRleHQKKysjIGRlZmluZSBEQ0lHRVRURVhUIGxpYmludGxfZGNpZ2V0dGV4dAorKyNlbmRpZgorKworKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudCBDQVRFR09SWQorKyAgIGxvY2FsZS4gICovCisrY2hhciAqCisrRENOR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJICAgIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBuLAorKwkgICAgaW50IGNhdGVnb3J5KQorK3sKKysgIHJldHVybiBEQ0lHRVRURVhUIChkb21haW5uYW1lLCBtc2dpZDEsIG1zZ2lkMiwgMSwgbiwgY2F0ZWdvcnkpOworK30KKysKKysjaWZkZWYgX0xJQkMKKysvKiBBbGlhcyBmb3IgZnVuY3Rpb24gbmFtZSBpbiBHTlUgQyBMaWJyYXJ5LiAgKi8KKyt3ZWFrX2FsaWFzIChfX2RjbmdldHRleHQsIGRjbmdldHRleHQpOworKyNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2RnZXR0ZXh0LmMJMTk5OC0wNC0yNiAwOToyMDo1Mi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZGdldHRleHQuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjM4MDc0NDI4OCAtMDQwMAorQEAgLTEsMzIgKzEsMzMgQEAKKy0vKiBkZ2V0dGV4dC5jIC0tIGltcGxlbWVudGF0aW9uIG9mIHRoZSBkZ2V0dGV4dCgzKSBmdW5jdGlvbgorLSAgIENvcHlyaWdodCAoQykgMTk5NSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGRnZXR0ZXh0KDMpIGZ1bmN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgCistVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy1pdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy1hbnkgbGF0ZXIgdmVyc2lvbi4KKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisgCistVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy1NRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy1hbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLUZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpZiBkZWZpbmVkIEhBVkVfTE9DQUxFX0ggfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8bG9jYWxlLmg+CistI2VuZGlmCisrI2luY2x1ZGUgImdldHRleHRQLmgiCisrCisrI2luY2x1ZGUgPGxvY2FsZS5oPgorIAorICNpZmRlZiBfTElCQworICMgaW5jbHVkZSA8bGliaW50bC5oPgorICNlbHNlCistIyBpbmNsdWRlICJsaWJnZXR0ZXh0LmgiCisrIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisgI2VuZGlmCisgCisgLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworQEAgLTM3LDE4ICszOCwxNiBAQAorICAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisgI2lmZGVmIF9MSUJDCisgIyBkZWZpbmUgREdFVFRFWFQgX19kZ2V0dGV4dAorLSMgZGVmaW5lIERDR0VUVEVYVCBfX2RjZ2V0dGV4dAorKyMgZGVmaW5lIERDR0VUVEVYVCBJTlRVU0UoX19kY2dldHRleHQpCisgI2Vsc2UKKy0jIGRlZmluZSBER0VUVEVYVCBkZ2V0dGV4dF9fCistIyBkZWZpbmUgRENHRVRURVhUIGRjZ2V0dGV4dF9fCisrIyBkZWZpbmUgREdFVFRFWFQgbGliaW50bF9kZ2V0dGV4dAorKyMgZGVmaW5lIERDR0VUVEVYVCBsaWJpbnRsX2RjZ2V0dGV4dAorICNlbmRpZgorIAorIC8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIG9mIHRoZSBjdXJyZW50CisgICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgKi8KKyBjaGFyICoKKy1ER0VUVEVYVCAoZG9tYWlubmFtZSwgbXNnaWQpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworLSAgICAgY29uc3QgY2hhciAqbXNnaWQ7CisrREdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkKQorIHsKKyAgIHJldHVybiBEQ0dFVFRFWFQgKGRvbWFpbm5hbWUsIG1zZ2lkLCBMQ19NRVNTQUdFUyk7CisgfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2RuZ2V0dGV4dC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2RuZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzg1NzQzNTI4IC0wNDAwCitAQCAtMCwwICsxLDU5IEBACisrLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGRuZ2V0dGV4dCgzKSBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NywgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgImdldHRleHRQLmgiCisrCisrI2luY2x1ZGUgPGxvY2FsZS5oPgorKworKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8bGliaW50bC5oPgorKyNlbHNlCisrIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisrI2VuZGlmCisrCisrLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworKworKy8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKKysgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCisrICAgY29kZSBpcyBhbHNvIHVzZWQgaW4gR05VIEMgTGlicmFyeSB3aGVyZSB0aGUgbmFtZXMgaGF2ZSBhIF9fCisrICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBETkdFVFRFWFQgX19kbmdldHRleHQKKysjIGRlZmluZSBEQ05HRVRURVhUIF9fZGNuZ2V0dGV4dAorKyNlbHNlCisrIyBkZWZpbmUgRE5HRVRURVhUIGxpYmludGxfZG5nZXR0ZXh0CisrIyBkZWZpbmUgRENOR0VUVEVYVCBsaWJpbnRsX2RjbmdldHRleHQKKysjZW5kaWYKKysKKysvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBvZiB0aGUgY3VycmVudAorKyAgIExDX01FU1NBR0VTIGxvY2FsZSBhbmQgc2tpcCBtZXNzYWdlIGFjY29yZGluZyB0byB0aGUgcGx1cmFsIGZvcm0uICAqLworK2NoYXIgKgorK0ROR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4pCisreworKyAgcmV0dXJuIERDTkdFVFRFWFQgKGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCBuLCBMQ19NRVNTQUdFUyk7CisrfQorKworKyNpZmRlZiBfTElCQworKy8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworK3dlYWtfYWxpYXMgKF9fZG5nZXR0ZXh0LCBkbmdldHRleHQpOworKyNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2V2YWwtcGx1cmFsLmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZXZhbC1wbHVyYWwuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjM5MDc0Mjc2OCAtMDQwMAorQEAgLTAsMCArMSwxMDggQEAKKysvKiBQbHVyYWwgZXhwcmVzc2lvbiBldmFsdWF0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIFNUQVRJQworKyNkZWZpbmUgU1RBVElDIHN0YXRpYworKyNlbmRpZgorKworKy8qIEV2YWx1YXRlIHRoZSBwbHVyYWwgZXhwcmVzc2lvbiBhbmQgcmV0dXJuIGFuIGluZGV4IHZhbHVlLiAgKi8KKytTVEFUSUMKKyt1bnNpZ25lZCBsb25nIGludAorK2ludGVybmFsX2Z1bmN0aW9uCisrcGx1cmFsX2V2YWwgKHN0cnVjdCBleHByZXNzaW9uICpwZXhwLCB1bnNpZ25lZCBsb25nIGludCBuKQorK3sKKysgIHN3aXRjaCAocGV4cC0+bmFyZ3MpCisrICAgIHsKKysgICAgY2FzZSAwOgorKyAgICAgIHN3aXRjaCAocGV4cC0+b3BlcmF0aW9uKQorKwl7CisrCWNhc2UgdmFyOgorKwkgIHJldHVybiBuOworKwljYXNlIG51bToKKysJICByZXR1cm4gcGV4cC0+dmFsLm51bTsKKysJZGVmYXVsdDoKKysJICBicmVhazsKKysJfQorKyAgICAgIC8qIE5PVFJFQUNIRUQgKi8KKysgICAgICBicmVhazsKKysgICAgY2FzZSAxOgorKyAgICAgIHsKKysJLyogcGV4cC0+b3BlcmF0aW9uIG11c3QgYmUgbG5vdC4gICovCisrCXVuc2lnbmVkIGxvbmcgaW50IGFyZyA9IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1swXSwgbik7CisrCXJldHVybiAhIGFyZzsKKysgICAgICB9CisrICAgIGNhc2UgMjoKKysgICAgICB7CisrCXVuc2lnbmVkIGxvbmcgaW50IGxlZnRhcmcgPSBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMF0sIG4pOworKwlpZiAocGV4cC0+b3BlcmF0aW9uID09IGxvcikKKysJICByZXR1cm4gbGVmdGFyZyB8fCBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMV0sIG4pOworKwllbHNlIGlmIChwZXhwLT5vcGVyYXRpb24gPT0gbGFuZCkKKysJICByZXR1cm4gbGVmdGFyZyAmJiBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMV0sIG4pOworKwllbHNlCisrCSAgeworKwkgICAgdW5zaWduZWQgbG9uZyBpbnQgcmlnaHRhcmcgPSBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMV0sIG4pOworKworKwkgICAgc3dpdGNoIChwZXhwLT5vcGVyYXRpb24pCisrCSAgICAgIHsKKysJICAgICAgY2FzZSBtdWx0OgorKwkJcmV0dXJuIGxlZnRhcmcgKiByaWdodGFyZzsKKysJICAgICAgY2FzZSBkaXZpZGU6CisrI2lmICFJTlRESVYwX1JBSVNFU19TSUdGUEUKKysJCWlmIChyaWdodGFyZyA9PSAwKQorKwkJICByYWlzZSAoU0lHRlBFKTsKKysjZW5kaWYKKysJCXJldHVybiBsZWZ0YXJnIC8gcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgbW9kdWxlOgorKyNpZiAhSU5URElWMF9SQUlTRVNfU0lHRlBFCisrCQlpZiAocmlnaHRhcmcgPT0gMCkKKysJCSAgcmFpc2UgKFNJR0ZQRSk7CisrI2VuZGlmCisrCQlyZXR1cm4gbGVmdGFyZyAlIHJpZ2h0YXJnOworKwkgICAgICBjYXNlIHBsdXM6CisrCQlyZXR1cm4gbGVmdGFyZyArIHJpZ2h0YXJnOworKwkgICAgICBjYXNlIG1pbnVzOgorKwkJcmV0dXJuIGxlZnRhcmcgLSByaWdodGFyZzsKKysJICAgICAgY2FzZSBsZXNzX3RoYW46CisrCQlyZXR1cm4gbGVmdGFyZyA8IHJpZ2h0YXJnOworKwkgICAgICBjYXNlIGdyZWF0ZXJfdGhhbjoKKysJCXJldHVybiBsZWZ0YXJnID4gcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgbGVzc19vcl9lcXVhbDoKKysJCXJldHVybiBsZWZ0YXJnIDw9IHJpZ2h0YXJnOworKwkgICAgICBjYXNlIGdyZWF0ZXJfb3JfZXF1YWw6CisrCQlyZXR1cm4gbGVmdGFyZyA+PSByaWdodGFyZzsKKysJICAgICAgY2FzZSBlcXVhbDoKKysJCXJldHVybiBsZWZ0YXJnID09IHJpZ2h0YXJnOworKwkgICAgICBjYXNlIG5vdF9lcXVhbDoKKysJCXJldHVybiBsZWZ0YXJnICE9IHJpZ2h0YXJnOworKwkgICAgICBkZWZhdWx0OgorKwkJYnJlYWs7CisrCSAgICAgIH0KKysJICB9CisrCS8qIE5PVFJFQUNIRUQgKi8KKysJYnJlYWs7CisrICAgICAgfQorKyAgICBjYXNlIDM6CisrICAgICAgeworKwkvKiBwZXhwLT5vcGVyYXRpb24gbXVzdCBiZSBxbW9wLiAgKi8KKysJdW5zaWduZWQgbG9uZyBpbnQgYm9vbGFyZyA9IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1swXSwgbik7CisrCXJldHVybiBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbYm9vbGFyZyA/IDEgOiAyXSwgbik7CisrICAgICAgfQorKyAgICB9CisrICAvKiBOT1RSRUFDSEVEICovCisrICByZXR1cm4gMDsKKyt9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZXhwbG9kZW5hbWUuYwkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9leHBsb2RlbmFtZS5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzk1NzQyMDA4IC0wNDAwCitAQCAtMSwxOSArMSwyMCBAQAorLS8qIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgIENvbnRyaWJ1dGVkIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorQEAgLTM2LDE4ICszNywyMyBAQAorIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKyAKKytjaGFyICoKKytfbmxfZmluZF9sYW5ndWFnZSAoY29uc3QgY2hhciAqbmFtZSkKKyt7CisrICB3aGlsZSAobmFtZVswXSAhPSAnXDAnICYmIG5hbWVbMF0gIT0gJ18nICYmIG5hbWVbMF0gIT0gJ0AnCisrCSAmJiBuYW1lWzBdICE9ICcrJyAmJiBuYW1lWzBdICE9ICcsJykKKysgICAgKytuYW1lOworKworKyAgcmV0dXJuIChjaGFyICopIG5hbWU7CisrfQorKworKworIGludAorLV9ubF9leHBsb2RlX25hbWUgKG5hbWUsIGxhbmd1YWdlLCBtb2RpZmllciwgdGVycml0b3J5LCBjb2Rlc2V0LAorLQkJICBub3JtYWxpemVkX2NvZGVzZXQsIHNwZWNpYWwsIHNwb25zb3IsIHJldmlzaW9uKQorLSAgICAgY2hhciAqbmFtZTsKKy0gICAgIGNvbnN0IGNoYXIgKipsYW5ndWFnZTsKKy0gICAgIGNvbnN0IGNoYXIgKiptb2RpZmllcjsKKy0gICAgIGNvbnN0IGNoYXIgKip0ZXJyaXRvcnk7CistICAgICBjb25zdCBjaGFyICoqY29kZXNldDsKKy0gICAgIGNvbnN0IGNoYXIgKipub3JtYWxpemVkX2NvZGVzZXQ7CistICAgICBjb25zdCBjaGFyICoqc3BlY2lhbDsKKy0gICAgIGNvbnN0IGNoYXIgKipzcG9uc29yOworLSAgICAgY29uc3QgY2hhciAqKnJldmlzaW9uOworK19ubF9leHBsb2RlX25hbWUgKGNoYXIgKm5hbWUsCisrCQkgIGNvbnN0IGNoYXIgKipsYW5ndWFnZSwgY29uc3QgY2hhciAqKm1vZGlmaWVyLAorKwkJICBjb25zdCBjaGFyICoqdGVycml0b3J5LCBjb25zdCBjaGFyICoqY29kZXNldCwKKysJCSAgY29uc3QgY2hhciAqKm5vcm1hbGl6ZWRfY29kZXNldCwgY29uc3QgY2hhciAqKnNwZWNpYWwsCisrCQkgIGNvbnN0IGNoYXIgKipzcG9uc29yLCBjb25zdCBjaGFyICoqcmV2aXNpb24pCisgeworICAgZW51bSB7IHVuZGVjaWRlZCwgeHBnLCBjZW4gfSBzeW50YXg7CisgICBjaGFyICpjcDsKK0BAIC02Nyw5ICs3Myw3IEBACisgICBtYXNrID0gMDsKKyAgIHN5bnRheCA9IHVuZGVjaWRlZDsKKyAgICpsYW5ndWFnZSA9IGNwID0gbmFtZTsKKy0gIHdoaWxlIChjcFswXSAhPSAnXDAnICYmIGNwWzBdICE9ICdfJyAmJiBjcFswXSAhPSAnQCcKKy0JICYmIGNwWzBdICE9ICcrJyAmJiBjcFswXSAhPSAnLCcpCistICAgICsrY3A7CisrICBjcCA9IF9ubF9maW5kX2xhbmd1YWdlICgqbGFuZ3VhZ2UpOworIAorICAgaWYgKCpsYW5ndWFnZSA9PSBjcCkKKyAgICAgLyogVGhpcyBkb2VzIG5vdCBtYWtlIHNlbnNlOiBsYW5ndWFnZSBoYXMgdG8gYmUgc3BlY2lmaWVkLiAgVXNlCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZmluZGRvbWFpbi5jCTE5OTgtMDQtMjYgMDk6MjI6MzYuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2ZpbmRkb21haW4uYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjQxNTczODk2OCAtMDQwMAorQEAgLTEsNjQgKzEsNDAgQEAKKyAvKiBIYW5kbGUgbGlzdCBvZiBuZWVkZWQgbWVzc2FnZSBjYXRhbG9ncworLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251Lm9yZz4sIDE5OTUuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorICNpZmRlZiBIQVZFX0NPTkZJR19ICisgIyBpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKy0jaW5jbHVkZSA8Y3R5cGUuaD4KKy0jaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistCistI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHN0ZGxpYi5oPgorLSNlbHNlCistIyBpZmRlZiBIQVZFX01BTExPQ19ICistIyAgaW5jbHVkZSA8bWFsbG9jLmg+CistIyBlbHNlCistdm9pZCBmcmVlICgpOworLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZCBIQVZFX1NUUklOR19IIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHN0cmluZy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxzdHJpbmdzLmg+CistIyBpZm5kZWYgbWVtY3B5CistIyAgZGVmaW5lIG1lbWNweShEc3QsIFNyYywgTnVtKSBiY29weSAoU3JjLCBEc3QsIE51bSkKKy0jIGVuZGlmCistI2VuZGlmCistI2lmICFIQVZFX1NUUkNIUiAmJiAhZGVmaW5lZCBfTElCQworLSMgaWZuZGVmIHN0cmNocgorLSMgIGRlZmluZSBzdHJjaHIgaW5kZXgKKy0jIGVuZGlmCistI2VuZGlmCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKyAjaWYgZGVmaW5lZCBIQVZFX1VOSVNURF9IIHx8IGRlZmluZWQgX0xJQkMKKyAjIGluY2x1ZGUgPHVuaXN0ZC5oPgorICNlbmRpZgorIAorLSNpbmNsdWRlICJnZXR0ZXh0LmgiCisgI2luY2x1ZGUgImdldHRleHRQLmgiCisgI2lmZGVmIF9MSUJDCisgIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2Vsc2UKKy0jIGluY2x1ZGUgImxpYmdldHRleHQuaCIKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKyAjZW5kaWYKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCitAQCAtNzAsMTAgKzQ2LDkgQEAKKyAgICB0aGUgRE9NQUlOTkFNRSBhbmQgQ0FURUdPUlkgcGFyYW1ldGVycyB3aXRoIHJlc3BlY3QgdG8gdGhlIGN1cnJlbnRseQorICAgIGVzdGFibGlzaGVkIGJpbmRpbmdzLiAgKi8KKyBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoKKy1fbmxfZmluZF9kb21haW4gKGRpcm5hbWUsIGxvY2FsZSwgZG9tYWlubmFtZSkKKy0gICAgIGNvbnN0IGNoYXIgKmRpcm5hbWU7CistICAgICBjaGFyICpsb2NhbGU7CistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworK2ludGVybmFsX2Z1bmN0aW9uCisrX25sX2ZpbmRfZG9tYWluIChjb25zdCBjaGFyICpkaXJuYW1lLCBjaGFyICpsb2NhbGUsCisrCQkgY29uc3QgY2hhciAqZG9tYWlubmFtZSwgc3RydWN0IGJpbmRpbmcgKmRvbWFpbmJpbmRpbmcpCisgeworICAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqcmV0dmFsOworICAgY29uc3QgY2hhciAqbGFuZ3VhZ2U7CitAQCAtOTUsOSArNzAsOSBAQAorIAorIAlsYW5ndWFnZVtfdGVycml0b3J5XVsrYXVkaWVuY2VdWytzcGVjaWFsXVssW3Nwb25zb3JdW19yZXZpc2lvbl1dCisgCistICAgICBCZXNpZGUgdGhlIGZpcnN0IGFsbCBvZiB0aGVtIGFyZSBhbGxvd2VkIHRvIGJlIG1pc3NpbmcuICBJZiB0aGUKKy0gICAgIGZ1bGwgc3BlY2lmaWVkIGxvY2FsZSBpcyBub3QgZm91bmQsIHRoZSBsZXNzIHNwZWNpZmljIG9uZSBhcmUKKy0gICAgIGxvb2tlZCBmb3IuICBUaGUgdmFyaW91cyBwYXJ0IHdpbGwgYmUgc3RyaXBwZWQgb2YgYWNjb3JkaW5nIHRvCisrICAgICBCZXNpZGUgdGhlIGZpcnN0IHBhcnQgYWxsIG9mIHRoZW0gYXJlIGFsbG93ZWQgdG8gYmUgbWlzc2luZy4gIElmCisrICAgICB0aGUgZnVsbCBzcGVjaWZpZWQgbG9jYWxlIGlzIG5vdCBmb3VuZCwgdGhlIGxlc3Mgc3BlY2lmaWMgb25lIGFyZQorKyAgICAgbG9va2VkIGZvci4gIFRoZSB2YXJpb3VzIHBhcnRzIHdpbGwgYmUgc3RyaXBwZWQgb2ZmIGFjY29yZGluZyB0bworICAgICAgdGhlIGZvbGxvd2luZyBvcmRlcjoKKyAJCSgxKSByZXZpc2lvbgorIAkJKDIpIHNwb25zb3IKK0BAIC0xMTksNyArOTQsNyBAQAorICAgICAgIGludCBjbnQ7CisgCisgICAgICAgaWYgKHJldHZhbC0+ZGVjaWRlZCA9PSAwKQorLQlfbmxfbG9hZF9kb21haW4gKHJldHZhbCk7CisrCV9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLCBkb21haW5iaW5kaW5nKTsKKyAKKyAgICAgICBpZiAocmV0dmFsLT5kYXRhICE9IE5VTEwpCisgCXJldHVybiByZXR2YWw7CitAQCAtMTI3LDcgKzEwMiw3IEBACisgICAgICAgZm9yIChjbnQgPSAwOyByZXR2YWwtPnN1Y2Nlc3NvcltjbnRdICE9IE5VTEw7ICsrY250KQorIAl7CisgCSAgaWYgKHJldHZhbC0+c3VjY2Vzc29yW2NudF0tPmRlY2lkZWQgPT0gMCkKKy0JICAgIF9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLT5zdWNjZXNzb3JbY250XSk7CisrCSAgICBfbmxfbG9hZF9kb21haW4gKHJldHZhbC0+c3VjY2Vzc29yW2NudF0sIGRvbWFpbmJpbmRpbmcpOworIAorIAkgIGlmIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdLT5kYXRhICE9IE5VTEwpCisgCSAgICBicmVhazsKK0BAIC0xNDIsMTIgKzExNywxOCBAQAorICAgYWxpYXNfdmFsdWUgPSBfbmxfZXhwYW5kX2FsaWFzIChsb2NhbGUpOworICAgaWYgKGFsaWFzX3ZhbHVlICE9IE5VTEwpCisgICAgIHsKKysjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCisrICAgICAgbG9jYWxlID0gc3RyZHVwIChhbGlhc192YWx1ZSk7CisrICAgICAgaWYgKGxvY2FsZSA9PSBOVUxMKQorKwlyZXR1cm4gTlVMTDsKKysjZWxzZQorICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGFsaWFzX3ZhbHVlKSArIDE7CisgICAgICAgbG9jYWxlID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworICAgICAgIGlmIChsb2NhbGUgPT0gTlVMTCkKKyAJcmV0dXJuIE5VTEw7CisgCisgICAgICAgbWVtY3B5IChsb2NhbGUsIGFsaWFzX3ZhbHVlLCBsZW4pOworKyNlbmRpZgorICAgICB9CisgCisgICAvKiBOb3cgd2UgZGV0ZXJtaW5lIHRoZSBzaW5nbGUgcGFydHMgb2YgdGhlIGxvY2FsZSBuYW1lLiAgRmlyc3QKK0BAIC0xNjgsMTQgKzE0OSwxNCBAQAorICAgICByZXR1cm4gTlVMTDsKKyAKKyAgIGlmIChyZXR2YWwtPmRlY2lkZWQgPT0gMCkKKy0gICAgX25sX2xvYWRfZG9tYWluIChyZXR2YWwpOworKyAgICBfbmxfbG9hZF9kb21haW4gKHJldHZhbCwgZG9tYWluYmluZGluZyk7CisgICBpZiAocmV0dmFsLT5kYXRhID09IE5VTEwpCisgICAgIHsKKyAgICAgICBpbnQgY250OworICAgICAgIGZvciAoY250ID0gMDsgcmV0dmFsLT5zdWNjZXNzb3JbY250XSAhPSBOVUxMOyArK2NudCkKKyAJeworIAkgIGlmIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdLT5kZWNpZGVkID09IDApCistCSAgICBfbmxfbG9hZF9kb21haW4gKHJldHZhbC0+c3VjY2Vzc29yW2NudF0pOworKwkgICAgX25sX2xvYWRfZG9tYWluIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdLCBkb21haW5iaW5kaW5nKTsKKyAJICBpZiAocmV0dmFsLT5zdWNjZXNzb3JbY250XS0+ZGF0YSAhPSBOVUxMKQorIAkgICAgYnJlYWs7CisgCX0KK0BAIC0xODUsNSArMTY2LDI3IEBACisgICBpZiAoYWxpYXNfdmFsdWUgIT0gTlVMTCkKKyAgICAgZnJlZSAobG9jYWxlKTsKKyAKKysgIC8qIFRoZSBzcGFjZSBmb3Igbm9ybWFsaXplZF9jb2Rlc2V0IGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4gIEZyZWUgaXQuICAqLworKyAgaWYgKG1hc2sgJiBYUEdfTk9STV9DT0RFU0VUKQorKyAgICBmcmVlICgodm9pZCAqKSBub3JtYWxpemVkX2NvZGVzZXQpOworKworICAgcmV0dXJuIHJldHZhbDsKKyB9CisrCisrCisrI2lmZGVmIF9MSUJDCisrbGliY19mcmVlcmVzX2ZuIChmcmVlX21lbSkKKyt7CisrICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpydW5wID0gX25sX2xvYWRlZF9kb21haW5zOworKworKyAgd2hpbGUgKHJ1bnAgIT0gTlVMTCkKKysgICAgeworKyAgICAgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmhlcmUgPSBydW5wOworKyAgICAgIGlmIChydW5wLT5kYXRhICE9IE5VTEwpCisrCV9ubF91bmxvYWRfZG9tYWluICgoc3RydWN0IGxvYWRlZF9kb21haW4gKikgcnVucC0+ZGF0YSk7CisrICAgICAgcnVucCA9IHJ1bnAtPm5leHQ7CisrICAgICAgZnJlZSAoKGNoYXIgKikgaGVyZS0+ZmlsZW5hbWUpOworKyAgICAgIGZyZWUgKGhlcmUpOworKyAgICB9CisrfQorKyNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2dldHRleHQuYwkxOTk4LTA0LTI2IDA5OjIyOjM2LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9nZXR0ZXh0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC40MjA3MzgyMDggLTA0MDAKK0BAIC0xLDE5ICsxLDIwIEBACistLyogSW1wbGVtZW50YXRpb24gb2YgZ2V0dGV4dCgzKSBmdW5jdGlvbgorLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvKiBJbXBsZW1lbnRhdGlvbiBvZiBnZXR0ZXh0KDMpIGZ1bmN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NywgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CitAQCAtMjMsMjEgKzI0LDE0IEBACisgIyBkZWZpbmUgX19uZWVkX05VTEwKKyAjIGluY2x1ZGUgPHN0ZGRlZi5oPgorICNlbHNlCistIyBpZmRlZiBTVERDX0hFQURFUlMKKy0jICBpbmNsdWRlIDxzdGRsaWIuaD4JCS8qIEp1c3QgZm9yIE5VTEwuICAqLworLSMgZWxzZQorLSMgIGlmZGVmIEhBVkVfU1RSSU5HX0gKKy0jICAgaW5jbHVkZSA8c3RyaW5nLmg+CistIyAgZWxzZQorLSMgICBkZWZpbmUgTlVMTCAoKHZvaWQgKikgMCkKKy0jICBlbmRpZgorLSMgZW5kaWYKKysjIGluY2x1ZGUgPHN0ZGxpYi5oPgkJLyogSnVzdCBmb3IgTlVMTC4gICovCisgI2VuZGlmCisgCisrI2luY2x1ZGUgImdldHRleHRQLmgiCisgI2lmZGVmIF9MSUJDCisgIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2Vsc2UKKy0jIGluY2x1ZGUgImxpYmdldHRleHQuaCIKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKyAjZW5kaWYKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCitAQCAtNDgsMjAgKzQyLDE5IEBACisgICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKyAjaWZkZWYgX0xJQkMKKyAjIGRlZmluZSBHRVRURVhUIF9fZ2V0dGV4dAorLSMgZGVmaW5lIERHRVRURVhUIF9fZGdldHRleHQKKysjIGRlZmluZSBEQ0dFVFRFWFQgSU5UVVNFKF9fZGNnZXR0ZXh0KQorICNlbHNlCistIyBkZWZpbmUgR0VUVEVYVCBnZXR0ZXh0X18KKy0jIGRlZmluZSBER0VUVEVYVCBkZ2V0dGV4dF9fCisrIyBkZWZpbmUgR0VUVEVYVCBsaWJpbnRsX2dldHRleHQKKysjIGRlZmluZSBEQ0dFVFRFWFQgbGliaW50bF9kY2dldHRleHQKKyAjZW5kaWYKKyAKKyAvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBjdXJyZW50IGRlZmF1bHQgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorICAgIExDX01FU1NBR0VTIGxvY2FsZS4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBNU0dJRCBpdHNlbGYgKHRoZSBkZWZhdWx0CisgICAgdGV4dCkuICAqLworIGNoYXIgKgorLUdFVFRFWFQgKG1zZ2lkKQorLSAgICAgY29uc3QgY2hhciAqbXNnaWQ7CisrR0VUVEVYVCAoY29uc3QgY2hhciAqbXNnaWQpCisgeworLSAgcmV0dXJuIERHRVRURVhUIChOVUxMLCBtc2dpZCk7CisrICByZXR1cm4gRENHRVRURVhUIChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpOworIH0KKyAKKyAjaWZkZWYgX0xJQkMKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9nZXR0ZXh0LmgJMTk5OC0wNC0yNiAwOToyMjozNS4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZ2V0dGV4dC5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCitAQCAtMSwxMDUgKzAsMCBAQAorLS8qIEludGVybmFsIGhlYWRlciBmb3IgR05VIGdldHRleHQgaW50ZXJuYXRpb25hbGl6YXRpb24gZnVuY3Rpb25zCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LAorLSAgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKy0gICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCistCistI2lmbmRlZiBfR0VUVEVYVF9ICistI2RlZmluZSBfR0VUVEVYVF9IIDEKKy0KKy0jaW5jbHVkZSA8c3RkaW8uaD4KKy0KKy0jaWYgSEFWRV9MSU1JVFNfSCB8fCBfTElCQworLSMgaW5jbHVkZSA8bGltaXRzLmg+CistI2VuZGlmCistCistLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworLQorLS8qIFRoZSBtYWdpYyBudW1iZXIgb2YgdGhlIEdOVSBtZXNzYWdlIGNhdGFsb2cgZm9ybWF0LiAgKi8KKy0jZGVmaW5lIF9NQUdJQyAweDk1MDQxMmRlCistI2RlZmluZSBfTUFHSUNfU1dBUFBFRCAweGRlMTIwNDk1CistCistLyogUmV2aXNpb24gbnVtYmVyIG9mIHRoZSBjdXJyZW50bHkgdXNlZCAubW8gKGJpbmFyeSkgZmlsZSBmb3JtYXQuICAqLworLSNkZWZpbmUgTU9fUkVWSVNJT05fTlVNQkVSIDAKKy0KKy0vKiBUaGUgZm9sbG93aW5nIGNvbnRvcnRpb25zIGFyZSBhbiBhdHRlbXB0IHRvIHVzZSB0aGUgQyBwcmVwcm9jZXNzb3IKKy0gICB0byBkZXRlcm1pbmUgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZSB0aGF0IGlzIDMyIGJpdHMgd2lkZS4gIEFuCistICAgYWx0ZXJuYXRpdmUgYXBwcm9hY2ggaXMgdG8gdXNlIGF1dG9jb25mJ3MgQUNfQ0hFQ0tfU0laRU9GIG1hY3JvLCBidXQKKy0gICBkb2luZyB0aGF0IHdvdWxkIHJlcXVpcmUgdGhhdCB0aGUgY29uZmlndXJlIHNjcmlwdCBjb21waWxlIGFuZCAqcnVuKgorLSAgIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZS4gIExvY2FsbHkgcnVubmluZyBjcm9zcy1jb21waWxlZCBleGVjdXRhYmxlcworLSAgIGlzIHVzdWFsbHkgbm90IHBvc3NpYmxlLiAgKi8KKy0KKy0jaWYgX19TVERDX18KKy0jIGRlZmluZSBVSU5UX01BWF8zMl9CSVRTIDQyOTQ5NjcyOTVVCistI2Vsc2UKKy0jIGRlZmluZSBVSU5UX01BWF8zMl9CSVRTIDB4RkZGRkZGRkYKKy0jZW5kaWYKKy0KKy0vKiBJZiBVSU5UX01BWCBpc24ndCBkZWZpbmVkLCBhc3N1bWUgaXQncyBhIDMyLWJpdCB0eXBlLgorLSAgIFRoaXMgc2hvdWxkIGJlIHZhbGlkIGZvciBhbGwgc3lzdGVtcyBHTlUgY2FyZXMgYWJvdXQgYmVjYXVzZQorLSAgIHRoYXQgZG9lc24ndCBpbmNsdWRlIDE2LWJpdCBzeXN0ZW1zLCBhbmQgb25seSBtb2Rlcm4gc3lzdGVtcworLSAgICh0aGF0IGNlcnRhaW5seSBoYXZlIDxsaW1pdHMuaD4pIGhhdmUgNjQrLWJpdCBpbnRlZ3JhbCB0eXBlcy4gICovCistCistI2lmbmRlZiBVSU5UX01BWAorLSMgZGVmaW5lIFVJTlRfTUFYIFVJTlRfTUFYXzMyX0JJVFMKKy0jZW5kaWYKKy0KKy0jaWYgVUlOVF9NQVggPT0gVUlOVF9NQVhfMzJfQklUUworLXR5cGVkZWYgdW5zaWduZWQgbmxzX3VpbnQzMjsKKy0jZWxzZQorLSMgaWYgVVNIUlRfTUFYID09IFVJTlRfTUFYXzMyX0JJVFMKKy10eXBlZGVmIHVuc2lnbmVkIHNob3J0IG5sc191aW50MzI7CistIyBlbHNlCistIyAgaWYgVUxPTkdfTUFYID09IFVJTlRfTUFYXzMyX0JJVFMKKy10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbmxzX3VpbnQzMjsKKy0jICBlbHNlCistICAvKiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgaW50ZW5kZWQgdG8gdGhyb3cgYW4gZXJyb3IuICBVc2luZyAjZXJyb3IgaXMKKy0gICAgIG5vdCBwb3J0YWJsZSBlbm91Z2guICAqLworLSAgIkNhbm5vdCBkZXRlcm1pbmUgdW5zaWduZWQgMzItYml0IGRhdGEgdHlwZS4iCistIyAgZW5kaWYKKy0jIGVuZGlmCistI2VuZGlmCistCistCistLyogSGVhZGVyIGZvciBiaW5hcnkgLm1vIGZpbGUgZm9ybWF0LiAgKi8KKy1zdHJ1Y3QgbW9fZmlsZV9oZWFkZXIKKy17CistICAvKiBUaGUgbWFnaWMgbnVtYmVyLiAgKi8KKy0gIG5sc191aW50MzIgbWFnaWM7CistICAvKiBUaGUgcmV2aXNpb24gbnVtYmVyIG9mIHRoZSBmaWxlIGZvcm1hdC4gICovCistICBubHNfdWludDMyIHJldmlzaW9uOworLSAgLyogVGhlIG51bWJlciBvZiBzdHJpbmdzIHBhaXJzLiAgKi8KKy0gIG5sc191aW50MzIgbnN0cmluZ3M7CistICAvKiBPZmZzZXQgb2YgdGFibGUgd2l0aCBzdGFydCBvZmZzZXRzIG9mIG9yaWdpbmFsIHN0cmluZ3MuICAqLworLSAgbmxzX3VpbnQzMiBvcmlnX3RhYl9vZmZzZXQ7CistICAvKiBPZmZzZXQgb2YgdGFibGUgd2l0aCBzdGFydCBvZmZzZXRzIG9mIHRyYW5zbGF0aW9uIHN0cmluZ3MuICAqLworLSAgbmxzX3VpbnQzMiB0cmFuc190YWJfb2Zmc2V0OworLSAgLyogU2l6ZSBvZiBoYXNoaW5nIHRhYmxlLiAgKi8KKy0gIG5sc191aW50MzIgaGFzaF90YWJfc2l6ZTsKKy0gIC8qIE9mZnNldCBvZiBmaXJzdCBoYXNoaW5nIGVudHJ5LiAgKi8KKy0gIG5sc191aW50MzIgaGFzaF90YWJfb2Zmc2V0OworLX07CistCistc3RydWN0IHN0cmluZ19kZXNjCisteworLSAgLyogTGVuZ3RoIG9mIGFkZHJlc3NlZCBzdHJpbmcuICAqLworLSAgbmxzX3VpbnQzMiBsZW5ndGg7CistICAvKiBPZmZzZXQgb2Ygc3RyaW5nIGluIGZpbGUuICAqLworLSAgbmxzX3VpbnQzMiBvZmZzZXQ7CistfTsKKy0KKy0vKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKy0KKy0jZW5kaWYJLyogZ2V0dGV4dC5oICAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2dldHRleHRQLmgJMTk5OC0wNC0yNiAwOToyMjozNS4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZ2V0dGV4dFAuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjQyNjczNzI5NiAtMDQwMAorQEAgLTEsMzMgKzEsNTMgQEAKKy0vKiBIZWFkZXIgZGVzY3JpYmluZyBpbnRlcm5hbHMgb2YgZ2V0dGV4dCBsaWJyYXJ5CistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIEhlYWRlciBkZXNjcmliaW5nIGludGVybmFscyBvZiBsaWJpbnRsIGxpYnJhcnkuCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZuZGVmIF9HRVRURVhUUF9ICisgI2RlZmluZSBfR0VUVEVYVFBfSAorIAorKyNpbmNsdWRlIDxzdGRkZWYuaD4JCS8qIEdldCBzaXplX3QuICAqLworKworKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSAiLi4vaWNvbnYvZ2NvbnZfaW50LmgiCisrI2Vsc2UKKysjIGlmIEhBVkVfSUNPTlYKKysjICBpbmNsdWRlIDxpY29udi5oPgorKyMgZW5kaWYKKysjZW5kaWYKKysKKyAjaW5jbHVkZSAibG9hZGluZm8uaCIKKyAKKysjaW5jbHVkZSAiZ21vLmgiCQkvKiBHZXQgbmxzX3VpbnQzMi4gICovCisrCisgLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworIAorLSNpZm5kZWYgUEFSQU1TCistIyBpZiBfX1NURENfXworLSMgIGRlZmluZSBQQVJBTVMoYXJncykgYXJncworLSMgZWxzZQorLSMgIGRlZmluZSBQQVJBTVMoYXJncykgKCkKKy0jIGVuZGlmCisrI2lmbmRlZiBpbnRlcm5hbF9mdW5jdGlvbgorKyMgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uCisrI2VuZGlmCisrCisrI2lmbmRlZiBhdHRyaWJ1dGVfaGlkZGVuCisrIyBkZWZpbmUgYXR0cmlidXRlX2hpZGRlbgorKyNlbmRpZgorKworKy8qIFRlbGwgdGhlIGNvbXBpbGVyIHdoZW4gYSBjb25kaXRpb25hbCBvciBpbnRlZ2VyIGV4cHJlc3Npb24gaXMKKysgICBhbG1vc3QgYWx3YXlzIHRydWUgb3IgYWxtb3N0IGFsd2F5cyBmYWxzZS4gICovCisrI2lmbmRlZiBIQVZFX0JVSUxUSU5fRVhQRUNUCisrIyBkZWZpbmUgX19idWlsdGluX2V4cGVjdChleHByLCB2YWwpIChleHByKQorICNlbmRpZgorIAorICNpZm5kZWYgVworQEAgLTM1LDM4ICs1NSwxNjAgQEAKKyAjZW5kaWYKKyAKKyAKKy1zdGF0aWMgbmxzX3VpbnQzMiBTV0FQIFBBUkFNUyAoKG5sc191aW50MzIgaSkpOworLQorKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKysjIGRlZmluZSBTV0FQKGkpIGJzd2FwXzMyIChpKQorKyNlbHNlCisgc3RhdGljIGlubGluZSBubHNfdWludDMyCisgU1dBUCAoaSkKKyAgICAgIG5sc191aW50MzIgaTsKKyB7CisgICByZXR1cm4gKGkgPDwgMjQpIHwgKChpICYgMHhmZjAwKSA8PCA4KSB8ICgoaSA+PiA4KSAmIDB4ZmYwMCkgfCAoaSA+PiAyNCk7CisgfQorKyNlbmRpZgorKworIAorKy8qIEluLW1lbW9yeSByZXByZXNlbnRhdGlvbiBvZiBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZy4gICovCisrc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYworK3sKKysgIC8qIExlbmd0aCBvZiBhZGRyZXNzZWQgc3RyaW5nLCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gICovCisrICBzaXplX3QgbGVuZ3RoOworKyAgLyogUG9pbnRlciB0byBhZGRyZXNzZWQgc3RyaW5nLiAgKi8KKysgIGNvbnN0IGNoYXIgKnBvaW50ZXI7CisrfTsKKyAKKysvKiBUaGUgcmVwcmVzZW50YXRpb24gb2YgYW4gb3BlbmVkIG1lc3NhZ2UgY2F0YWxvZy4gICovCisgc3RydWN0IGxvYWRlZF9kb21haW4KKyB7CisrICAvKiBQb2ludGVyIHRvIG1lbW9yeSBjb250YWluaW5nIHRoZSAubW8gZmlsZS4gICovCisgICBjb25zdCBjaGFyICpkYXRhOworKyAgLyogMSBpZiB0aGUgbWVtb3J5IGlzIG1tYXAoKWVkLCAwIGlmIHRoZSBtZW1vcnkgaXMgbWFsbG9jKCllZC4gICovCisrICBpbnQgdXNlX21tYXA7CisrICAvKiBTaXplIG9mIG1tYXAoKWVkIG1lbW9yeS4gICovCisrICBzaXplX3QgbW1hcF9zaXplOworKyAgLyogMSBpZiB0aGUgLm1vIGZpbGUgdXNlcyBhIGRpZmZlcmVudCBlbmRpYW5uZXNzIHRoYW4gdGhpcyBtYWNoaW5lLiAgKi8KKyAgIGludCBtdXN0X3N3YXA7CisrICAvKiBQb2ludGVyIHRvIGFkZGl0aW9uYWwgbWFsbG9jKCllZCBtZW1vcnkuICAqLworKyAgdm9pZCAqbWFsbG9jZWQ7CisrCisrICAvKiBOdW1iZXIgb2Ygc3RhdGljIHN0cmluZ3MgcGFpcnMuICAqLworICAgbmxzX3VpbnQzMiBuc3RyaW5nczsKKy0gIHN0cnVjdCBzdHJpbmdfZGVzYyAqb3JpZ190YWI7CistICBzdHJ1Y3Qgc3RyaW5nX2Rlc2MgKnRyYW5zX3RhYjsKKysgIC8qIFBvaW50ZXIgdG8gZGVzY3JpcHRvcnMgb2Ygb3JpZ2luYWwgc3RyaW5ncyBpbiB0aGUgZmlsZS4gICovCisrICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2Rlc2MgKm9yaWdfdGFiOworKyAgLyogUG9pbnRlciB0byBkZXNjcmlwdG9ycyBvZiB0cmFuc2xhdGVkIHN0cmluZ3MgaW4gdGhlIGZpbGUuICAqLworKyAgY29uc3Qgc3RydWN0IHN0cmluZ19kZXNjICp0cmFuc190YWI7CisrCisrICAvKiBOdW1iZXIgb2Ygc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzIHBhaXJzLiAgKi8KKysgIG5sc191aW50MzIgbl9zeXNkZXBfc3RyaW5nczsKKysgIC8qIFBvaW50ZXIgdG8gZGVzY3JpcHRvcnMgb2Ygb3JpZ2luYWwgc3lzZGVwIHN0cmluZ3MuICAqLworKyAgY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqb3JpZ19zeXNkZXBfdGFiOworKyAgLyogUG9pbnRlciB0byBkZXNjcmlwdG9ycyBvZiB0cmFuc2xhdGVkIHN5c2RlcCBzdHJpbmdzLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKnRyYW5zX3N5c2RlcF90YWI7CisrCisrICAvKiBTaXplIG9mIGhhc2ggdGFibGUuICAqLworICAgbmxzX3VpbnQzMiBoYXNoX3NpemU7CistICBubHNfdWludDMyICpoYXNoX3RhYjsKKysgIC8qIFBvaW50ZXIgdG8gaGFzaCB0YWJsZS4gICovCisrICBjb25zdCBubHNfdWludDMyICpoYXNoX3RhYjsKKysgIC8qIDEgaWYgdGhlIGhhc2ggdGFibGUgdXNlcyBhIGRpZmZlcmVudCBlbmRpYW5uZXNzIHRoYW4gdGhpcyBtYWNoaW5lLiAgKi8KKysgIGludCBtdXN0X3N3YXBfaGFzaF90YWI7CisrCisrICBpbnQgY29kZXNldF9jbnRyOworKyNpZmRlZiBfTElCQworKyAgX19nY29udl90IGNvbnY7CisrI2Vsc2UKKysjIGlmIEhBVkVfSUNPTlYKKysgIGljb252X3QgY29udjsKKysjIGVuZGlmCisrI2VuZGlmCisrICBjaGFyICoqY29udl90YWI7CisrCisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqcGx1cmFsOworKyAgdW5zaWduZWQgbG9uZyBpbnQgbnBsdXJhbHM7CisgfTsKKyAKKysvKiBXZSB3YW50IHRvIGFsbG9jYXRlIGEgc3RyaW5nIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdC4gIEJ1dCBJU08gQworKyAgIGRvZXNuJ3QgYWxsb3cgemVybyBzaXplZCBhcnJheXMuICAqLworKyNpZmRlZiBfX0dOVUNfXworKyMgZGVmaW5lIFpFUk8gMAorKyNlbHNlCisrIyBkZWZpbmUgWkVSTyAxCisrI2VuZGlmCisrCisrLyogQSBzZXQgb2Ygc2V0dGluZ3MgYm91bmQgdG8gYSBtZXNzYWdlIGRvbWFpbi4gIFVzZWQgdG8gc3RvcmUgc2V0dGluZ3MKKysgICBmcm9tIGJpbmR0ZXh0ZG9tYWluKCkgYW5kIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KCkuICAqLworIHN0cnVjdCBiaW5kaW5nCisgeworICAgc3RydWN0IGJpbmRpbmcgKm5leHQ7CistICBjaGFyICpkb21haW5uYW1lOworICAgY2hhciAqZGlybmFtZTsKKysgIGludCBjb2Rlc2V0X2NudHI7CS8qIEluY3JlbWVudGVkIGVhY2ggdGltZSBjb2Rlc2V0IGNoYW5nZXMuICAqLworKyAgY2hhciAqY29kZXNldDsKKysgIGNoYXIgZG9tYWlubmFtZVtaRVJPXTsKKyB9OworIAorLXN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKl9ubF9maW5kX2RvbWFpbiBQQVJBTVMgKChjb25zdCBjaGFyICpfX2Rpcm5hbWUsCistCQkJCQkJIGNoYXIgKl9fbG9jYWxlLAorLQkJCQkJCSBjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpKTsKKy12b2lkIF9ubF9sb2FkX2RvbWFpbiBQQVJBTVMgKChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpfX2RvbWFpbikpOworKy8qIEEgY291bnRlciB3aGljaCBpcyBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgc29tZSBwcmV2aW91cyB0cmFuc2xhdGlvbnMKKysgICBiZWNvbWUgaW52YWxpZC4KKysgICBUaGlzIHZhcmlhYmxlIGlzIHBhcnQgb2YgdGhlIGV4dGVybmFsIEFCSSBvZiB0aGUgR05VIGxpYmludGwuICAqLworK2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKKysKKysjaWZuZGVmIF9MSUJDCisrY29uc3QgY2hhciAqX25sX2xvY2FsZV9uYW1lIChpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZSk7CisrI2VuZGlmCisrCisrc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqX25sX2ZpbmRfZG9tYWluIChjb25zdCBjaGFyICpfX2Rpcm5hbWUsIGNoYXIgKl9fbG9jYWxlLAorKwkJCQkJIGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJCSBzdHJ1Y3QgYmluZGluZyAqX19kb21haW5iaW5kaW5nKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247Cisrdm9pZCBfbmxfbG9hZF9kb21haW4gKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKl9fZG9tYWluLAorKwkJICAgICAgc3RydWN0IGJpbmRpbmcgKl9fZG9tYWluYmluZGluZykKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworK3ZvaWQgX25sX3VubG9hZF9kb21haW4gKHN0cnVjdCBsb2FkZWRfZG9tYWluICpfX2RvbWFpbikKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworK2NvbnN0IGNoYXIgKl9ubF9pbml0X2RvbWFpbl9jb252IChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpfX2RvbWFpbl9maWxlLAorKwkJCQkgIHN0cnVjdCBsb2FkZWRfZG9tYWluICpfX2RvbWFpbiwKKysJCQkJICBzdHJ1Y3QgYmluZGluZyAqX19kb21haW5iaW5kaW5nKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247Cisrdm9pZCBfbmxfZnJlZV9kb21haW5fY29udiAoc3RydWN0IGxvYWRlZF9kb21haW4gKl9fZG9tYWluKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrCisrY2hhciAqX25sX2ZpbmRfbXNnIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZSwKKysJCSAgICBzdHJ1Y3QgYmluZGluZyAqZG9tYWluYmluZGluZywgY29uc3QgY2hhciAqbXNnaWQsCisrCQkgICAgc2l6ZV90ICpsZW5ndGhwKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrCisrI2lmZGVmIF9MSUJDCisrZXh0ZXJuIGNoYXIgKl9fZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZCk7CisrZXh0ZXJuIGNoYXIgKl9fZGdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCk7CisrZXh0ZXJuIGNoYXIgKl9fZGNnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQsCisrCQkJICBpbnQgX19jYXRlZ29yeSk7CisrZXh0ZXJuIGNoYXIgKl9fbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkgdW5zaWduZWQgbG9uZyBpbnQgX19uKTsKKytleHRlcm4gY2hhciAqX19kbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkgIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkgIHVuc2lnbmVkIGxvbmcgaW50IG4pOworK2V4dGVybiBjaGFyICpfX2RjbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkgICBjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJICAgdW5zaWduZWQgbG9uZyBpbnQgX19uLCBpbnQgX19jYXRlZ29yeSk7CisrZXh0ZXJuIGNoYXIgKl9fZGNpZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCSAgIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkgICBpbnQgX19wbHVyYWwsIHVuc2lnbmVkIGxvbmcgaW50IF9fbiwKKysJCQkgICBpbnQgX19jYXRlZ29yeSk7CisrZXh0ZXJuIGNoYXIgKl9fdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lKTsKKytleHRlcm4gY2hhciAqX19iaW5kdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCSAgICAgICBjb25zdCBjaGFyICpfX2Rpcm5hbWUpOworK2V4dGVybiBjaGFyICpfX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJCQljb25zdCBjaGFyICpfX2NvZGVzZXQpOworKyNlbHNlCisrLyogRGVjbGFyZSB0aGUgZXhwb3J0ZWQgbGliaW50bF8qIGZ1bmN0aW9ucywgaW4gYSB3YXkgdGhhdCBhbGxvd3MgdXMgdG8KKysgICBjYWxsIHRoZW0gdW5kZXIgdGhlaXIgcmVhbCBuYW1lLiAgKi8KKysjIHVuZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorKyMgdW5kZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisrZXh0ZXJuIGNoYXIgKmxpYmludGxfZGNpZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkgY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCQkgaW50IF9fcGx1cmFsLCB1bnNpZ25lZCBsb25nIGludCBfX24sCisrCQkJCSBpbnQgX19jYXRlZ29yeSk7CisrI2VuZGlmCisgCisgLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICovCisgCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZ21vLmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZ21vLmgJMjAwNC0wOS0xMiAxNDo0MDozNC40MzE3MzY1MzYgLTA0MDAKK0BAIC0wLDAgKzEsMTQ5IEBACisrLyogRGVzY3JpcHRpb24gb2YgR05VIG1lc3NhZ2UgY2F0YWxvZyBmb3JtYXQ6IGdlbmVyYWwgZmlsZSBsYXlvdXQuCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3LCAyMDAwLTIwMDIsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX0dFVFRFWFRfSAorKyNkZWZpbmUgX0dFVFRFWFRfSCAxCisrCisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKworKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKysKKysvKiBUaGUgbWFnaWMgbnVtYmVyIG9mIHRoZSBHTlUgbWVzc2FnZSBjYXRhbG9nIGZvcm1hdC4gICovCisrI2RlZmluZSBfTUFHSUMgMHg5NTA0MTJkZQorKyNkZWZpbmUgX01BR0lDX1NXQVBQRUQgMHhkZTEyMDQ5NQorKworKy8qIFJldmlzaW9uIG51bWJlciBvZiB0aGUgY3VycmVudGx5IHVzZWQgLm1vIChiaW5hcnkpIGZpbGUgZm9ybWF0LiAgKi8KKysjZGVmaW5lIE1PX1JFVklTSU9OX05VTUJFUiAwCisrI2RlZmluZSBNT19SRVZJU0lPTl9OVU1CRVJfV0lUSF9TWVNERVBfSSAxCisrCisrLyogVGhlIGZvbGxvd2luZyBjb250b3J0aW9ucyBhcmUgYW4gYXR0ZW1wdCB0byB1c2UgdGhlIEMgcHJlcHJvY2Vzc29yCisrICAgdG8gZGV0ZXJtaW5lIGFuIHVuc2lnbmVkIGludGVncmFsIHR5cGUgdGhhdCBpcyAzMiBiaXRzIHdpZGUuICBBbgorKyAgIGFsdGVybmF0aXZlIGFwcHJvYWNoIGlzIHRvIHVzZSBhdXRvY29uZidzIEFDX0NIRUNLX1NJWkVPRiBtYWNybywgYnV0CisrICAgYXMgb2YgdmVyc2lvbiBhdXRvY29uZi0yLjEzLCB0aGUgQUNfQ0hFQ0tfU0laRU9GIG1hY3JvIGRvZXNuJ3Qgd29yaworKyAgIHdoZW4gY3Jvc3MtY29tcGlsaW5nLiAgKi8KKysKKysjaWYgX19TVERDX18KKysjIGRlZmluZSBVSU5UX01BWF8zMl9CSVRTIDQyOTQ5NjcyOTVVCisrI2Vsc2UKKysjIGRlZmluZSBVSU5UX01BWF8zMl9CSVRTIDB4RkZGRkZGRkYKKysjZW5kaWYKKysKKysvKiBJZiBVSU5UX01BWCBpc24ndCBkZWZpbmVkLCBhc3N1bWUgaXQncyBhIDMyLWJpdCB0eXBlLgorKyAgIFRoaXMgc2hvdWxkIGJlIHZhbGlkIGZvciBhbGwgc3lzdGVtcyBHTlUgY2FyZXMgYWJvdXQgYmVjYXVzZQorKyAgIHRoYXQgZG9lc24ndCBpbmNsdWRlIDE2LWJpdCBzeXN0ZW1zLCBhbmQgb25seSBtb2Rlcm4gc3lzdGVtcworKyAgICh0aGF0IGNlcnRhaW5seSBoYXZlIDxsaW1pdHMuaD4pIGhhdmUgNjQrLWJpdCBpbnRlZ3JhbCB0eXBlcy4gICovCisrCisrI2lmbmRlZiBVSU5UX01BWAorKyMgZGVmaW5lIFVJTlRfTUFYIFVJTlRfTUFYXzMyX0JJVFMKKysjZW5kaWYKKysKKysjaWYgVUlOVF9NQVggPT0gVUlOVF9NQVhfMzJfQklUUworK3R5cGVkZWYgdW5zaWduZWQgbmxzX3VpbnQzMjsKKysjZWxzZQorKyMgaWYgVVNIUlRfTUFYID09IFVJTlRfTUFYXzMyX0JJVFMKKyt0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG5sc191aW50MzI7CisrIyBlbHNlCisrIyAgaWYgVUxPTkdfTUFYID09IFVJTlRfTUFYXzMyX0JJVFMKKyt0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbmxzX3VpbnQzMjsKKysjICBlbHNlCisrICAvKiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgaW50ZW5kZWQgdG8gdGhyb3cgYW4gZXJyb3IuICBVc2luZyAjZXJyb3IgaXMKKysgICAgIG5vdCBwb3J0YWJsZSBlbm91Z2guICAqLworKyAgIkNhbm5vdCBkZXRlcm1pbmUgdW5zaWduZWQgMzItYml0IGRhdGEgdHlwZS4iCisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrCisrLyogSGVhZGVyIGZvciBiaW5hcnkgLm1vIGZpbGUgZm9ybWF0LiAgKi8KKytzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIKKyt7CisrICAvKiBUaGUgbWFnaWMgbnVtYmVyLiAgKi8KKysgIG5sc191aW50MzIgbWFnaWM7CisrICAvKiBUaGUgcmV2aXNpb24gbnVtYmVyIG9mIHRoZSBmaWxlIGZvcm1hdC4gICovCisrICBubHNfdWludDMyIHJldmlzaW9uOworKworKyAgLyogVGhlIGZvbGxvd2luZyBhcmUgb25seSB1c2VkIGluIC5tbyBmaWxlcyB3aXRoIG1ham9yIHJldmlzaW9uIDAgb3IgMS4gICovCisrCisrICAvKiBUaGUgbnVtYmVyIG9mIHN0cmluZ3MgcGFpcnMuICAqLworKyAgbmxzX3VpbnQzMiBuc3RyaW5nczsKKysgIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2Ygb3JpZ2luYWwgc3RyaW5ncy4gICovCisrICBubHNfdWludDMyIG9yaWdfdGFiX29mZnNldDsKKysgIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2YgdHJhbnNsYXRlZCBzdHJpbmdzLiAgKi8KKysgIG5sc191aW50MzIgdHJhbnNfdGFiX29mZnNldDsKKysgIC8qIFNpemUgb2YgaGFzaCB0YWJsZS4gICovCisrICBubHNfdWludDMyIGhhc2hfdGFiX3NpemU7CisrICAvKiBPZmZzZXQgb2YgZmlyc3QgaGFzaCB0YWJsZSBlbnRyeS4gICovCisrICBubHNfdWludDMyIGhhc2hfdGFiX29mZnNldDsKKysKKysgIC8qIFRoZSBmb2xsb3dpbmcgYXJlIG9ubHkgdXNlZCBpbiAubW8gZmlsZXMgd2l0aCBtaW5vciByZXZpc2lvbiA+PSAxLiAgKi8KKysKKysgIC8qIFRoZSBudW1iZXIgb2Ygc3lzdGVtIGRlcGVuZGVudCBzZWdtZW50cy4gICovCisrICBubHNfdWludDMyIG5fc3lzZGVwX3NlZ21lbnRzOworKyAgLyogT2Zmc2V0IG9mIHRhYmxlIGRlc2NyaWJpbmcgc3lzdGVtIGRlcGVuZGVudCBzZWdtZW50cy4gICovCisrICBubHNfdWludDMyIHN5c2RlcF9zZWdtZW50c19vZmZzZXQ7CisrICAvKiBUaGUgbnVtYmVyIG9mIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5ncyBwYWlycy4gICovCisrICBubHNfdWludDMyIG5fc3lzZGVwX3N0cmluZ3M7CisrICAvKiBPZmZzZXQgb2YgdGFibGUgd2l0aCBzdGFydCBvZmZzZXRzIG9mIG9yaWdpbmFsIHN5c2RlcCBzdHJpbmdzLiAgKi8KKysgIG5sc191aW50MzIgb3JpZ19zeXNkZXBfdGFiX29mZnNldDsKKysgIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2YgdHJhbnNsYXRlZCBzeXNkZXAgc3RyaW5ncy4gICovCisrICBubHNfdWludDMyIHRyYW5zX3N5c2RlcF90YWJfb2Zmc2V0OworK307CisrCisrLyogRGVzY3JpcHRvciBmb3Igc3RhdGljIHN0cmluZyBjb250YWluZWQgaW4gdGhlIGJpbmFyeSAubW8gZmlsZS4gICovCisrc3RydWN0IHN0cmluZ19kZXNjCisreworKyAgLyogTGVuZ3RoIG9mIGFkZHJlc3NlZCBzdHJpbmcsIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gICovCisrICBubHNfdWludDMyIGxlbmd0aDsKKysgIC8qIE9mZnNldCBvZiBzdHJpbmcgaW4gZmlsZS4gICovCisrICBubHNfdWludDMyIG9mZnNldDsKKyt9OworKworKy8qIFRoZSBmb2xsb3dpbmcgYXJlIG9ubHkgdXNlZCBpbiAubW8gZmlsZXMgd2l0aCBtaW5vciByZXZpc2lvbiA+PSAxLiAgKi8KKysKKysvKiBEZXNjcmlwdG9yIGZvciBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZyBzZWdtZW50LiAgKi8KKytzdHJ1Y3Qgc3lzZGVwX3NlZ21lbnQKKyt7CisrICAvKiBMZW5ndGggb2YgYWRkcmVzc2VkIHN0cmluZywgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuICAqLworKyAgbmxzX3VpbnQzMiBsZW5ndGg7CisrICAvKiBPZmZzZXQgb2Ygc3RyaW5nIGluIGZpbGUuICAqLworKyAgbmxzX3VpbnQzMiBvZmZzZXQ7CisrfTsKKysKKysvKiBEZXNjcmlwdG9yIGZvciBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZy4gICovCisrc3RydWN0IHN5c2RlcF9zdHJpbmcKKyt7CisrICAvKiBPZmZzZXQgb2Ygc3RhdGljIHN0cmluZyBzZWdtZW50cyBpbiBmaWxlLiAgKi8KKysgIG5sc191aW50MzIgb2Zmc2V0OworKyAgLyogQWx0ZXJuYXRpbmcgc2VxdWVuY2Ugb2Ygc3RhdGljIGFuZCBzeXN0ZW0gZGVwZW5kZW50IHNlZ21lbnRzLgorKyAgICAgVGhlIGxhc3Qgc2VnbWVudCBpcyBhIHN0YXRpYyBzZWdtZW50LCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gICovCisrICBzdHJ1Y3Qgc2VnbWVudF9wYWlyCisrICB7CisrICAgIC8qIFNpemUgb2Ygc3RhdGljIHNlZ21lbnQuICAqLworKyAgICBubHNfdWludDMyIHNlZ3NpemU7CisrICAgIC8qIFJlZmVyZW5jZSB0byBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZyBzZWdtZW50LCBvciB+MCBhdCB0aGUgZW5kLiAgKi8KKysgICAgbmxzX3VpbnQzMiBzeXNkZXByZWY7CisrICB9IHNlZ21lbnRzWzFdOworK307CisrCisrLyogTWFya2VyIGZvciB0aGUgZW5kIG9mIHRoZSBzZWdtZW50c1tdIGFycmF5LiAgVGhpcyBoYXMgdGhlIHZhbHVlIDB4RkZGRkZGRkYsCisrICAgcmVnYXJkbGVzcyB3aGV0aGVyICdpbnQnIGlzIDE2IGJpdCwgMzIgYml0LCBvciA2NCBiaXQuICAqLworKyNkZWZpbmUgU0VHTUVOVFNfRU5EICgobmxzX3VpbnQzMikgfjApCisrCisrLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICovCisrCisrI2VuZGlmCS8qIGdldHRleHQuaCAgKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9oYXNoLXN0cmluZy5oCTE5OTgtMDQtMjYgMDk6MjI6MzYuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2hhc2gtc3RyaW5nLmgJMjAwNC0wOS0xMiAxNDo0MDozNC40MzY3MzU3NzYgLTA0MDAKK0BAIC0xLDM1ICsxLDIzIEBACistLyogSW1wbGVtZW50cyBhIHN0cmluZyBoYXNoaW5nIGZ1bmN0aW9uLgorLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvKiBEZXNjcmlwdGlvbiBvZiBHTlUgbWVzc2FnZSBjYXRhbG9nIGZvcm1hdDogc3RyaW5nIGhhc2hpbmcgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3LTE5OTgsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKy0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwKKy0gICB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCistICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworLQorLSNpZmRlZiBIQVZFX1ZBTFVFU19ICistIyBpbmNsdWRlIDx2YWx1ZXMuaD4KKy0jZW5kaWYKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCistI2lmbmRlZiBQQVJBTVMKKy0jIGlmIF9fU1REQ19fCistIyAgZGVmaW5lIFBBUkFNUyhBcmdzKSBBcmdzCistIyBlbHNlCistIyAgZGVmaW5lIFBBUkFNUyhBcmdzKSAoKQorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKyAvKiBXZSBhc3N1bWUgdG8gaGF2ZSBgdW5zaWduZWQgbG9uZyBpbnQnIHZhbHVlIHdpdGggYXQgbGVhc3QgMzIgYml0cy4gICovCisgI2RlZmluZSBIQVNIV09SREJJVFMgMzIKKyAKK0BAIC0zNywxMSArMjUsOCBAQAorIC8qIERlZmluZXMgdGhlIHNvIGNhbGxlZCBgaGFzaHBqdycgZnVuY3Rpb24gYnkgUC5KLiBXZWluYmVyZ2VyCisgICAgW3NlZSBBaG8vU2V0aGkvVWxsbWFuLCBDT01QSUxFUlM6IFByaW5jaXBsZXMsIFRlY2huaXF1ZXMgYW5kIFRvb2xzLAorICAgIDE5ODYsIDE5ODcgQmVsbCBUZWxlcGhvbmUgTGFib3JhdG9yaWVzLCBJbmMuXSAgKi8KKy1zdGF0aWMgdW5zaWduZWQgbG9uZyBoYXNoX3N0cmluZyBQQVJBTVMgKChjb25zdCBjaGFyICpfX3N0cl9wYXJhbSkpOworLQorLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworLWhhc2hfc3RyaW5nIChzdHJfcGFyYW0pCistICAgICBjb25zdCBjaGFyICpzdHJfcGFyYW07Cisrc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGludAorK2hhc2hfc3RyaW5nIChjb25zdCBjaGFyICpzdHJfcGFyYW0pCisgeworICAgdW5zaWduZWQgbG9uZyBpbnQgaHZhbCwgZzsKKyAgIGNvbnN0IGNoYXIgKnN0ciA9IHN0cl9wYXJhbTsKK0BAIC01MSw4ICszNiw4IEBACisgICB3aGlsZSAoKnN0ciAhPSAnXDAnKQorICAgICB7CisgICAgICAgaHZhbCA8PD0gNDsKKy0gICAgICBodmFsICs9ICh1bnNpZ25lZCBsb25nKSAqc3RyKys7CistICAgICAgZyA9IGh2YWwgJiAoKHVuc2lnbmVkIGxvbmcpIDB4ZiA8PCAoSEFTSFdPUkRCSVRTIC0gNCkpOworKyAgICAgIGh2YWwgKz0gKHVuc2lnbmVkIGNoYXIpICpzdHIrKzsKKysgICAgICBnID0gaHZhbCAmICgodW5zaWduZWQgbG9uZyBpbnQpIDB4ZiA8PCAoSEFTSFdPUkRCSVRTIC0gNCkpOworICAgICAgIGlmIChnICE9IDApCisgCXsKKyAJICBodmFsIF49IGcgPj4gKEhBU0hXT1JEQklUUyAtIDgpOworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2ludGwtY29tcGF0LmMJMTk5OC0wNC0yNiAwOToyMDo1Mi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvaW50bC1jb21wYXQuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjQ0MTczNTAxNiAtMDQwMAorQEAgLTEsNzYgKzEsMTMxIEBACisgLyogaW50bC1jb21wYXQuYyAtIFN0dWIgZnVuY3Rpb25zIHRvIGNhbGwgZ2V0dGV4dCBmdW5jdGlvbnMgZnJvbSBHTlUgZ2V0dGV4dAorICAgIExpYnJhcnkuCistICAgQ29weXJpZ2h0IChDKSAxOTk1IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDIwMDAtMjAwMyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgCistVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy1pdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy1hbnkgbGF0ZXIgdmVyc2lvbi4KKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisgCistVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy1NRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy1hbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLUZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpbmNsdWRlICJsaWJnZXR0ZXh0LmgiCisrI2luY2x1ZGUgImdldHRleHRQLmgiCisgCisgLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworIAorKy8qIFRoaXMgZmlsZSByZWRpcmVjdHMgdGhlIGdldHRleHQgZnVuY3Rpb25zICh3aXRob3V0IHByZWZpeCkgdG8gdGhvc2UKKysgICBkZWZpbmVkIGluIHRoZSBpbmNsdWRlZCBHTlUgbGliaW50bCBsaWJyYXJ5ICh3aXRoICJsaWJpbnRsXyIgcHJlZml4KS4KKysgICBJdCBpcyBjb21waWxlZCBpbnRvIGxpYmludGwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgQU1fR05VX0dFVFRFWFQgdGVzdAorKyAgIG9mIGdldHRleHQgPD0gMC4xMS4yIHdvcmsgd2l0aCB0aGUgbGliaW50bCBsaWJyYXJ5ID49IDAuMTEuMyB3aGljaAorKyAgIGhhcyB0aGUgcmVkaXJlY3Rpb25zIHByaW1hcmlseSBpbiB0aGUgPGxpYmludGwuaD4gaW5jbHVkZSBmaWxlLgorKyAgIEl0IGlzIGFsc28gY29tcGlsZWQgaW50byBsaWJnbnVpbnRsIHNvIHRoYXQgbGliZ251aW50bC5zbyBjYW4gYmUgdXNlZAorKyAgIGFzIExEX1BSRUxPQURhYmxlIGxpYnJhcnkgb24gZ2xpYmMgc3lzdGVtcywgdG8gcHJvdmlkZSB0aGUgZXh0cmEKKysgICBmZWF0dXJlcyB0aGF0IHRoZSBmdW5jdGlvbnMgaW4gdGhlIGxpYmMgZG9uJ3QgaGF2ZSAobmFtZWx5LCBsb2dnaW5nKS4gICovCisrCisgCisgI3VuZGVmIGdldHRleHQKKyAjdW5kZWYgZGdldHRleHQKKyAjdW5kZWYgZGNnZXR0ZXh0CisrI3VuZGVmIG5nZXR0ZXh0CisrI3VuZGVmIGRuZ2V0dGV4dAorKyN1bmRlZiBkY25nZXR0ZXh0CisgI3VuZGVmIHRleHRkb21haW4KKyAjdW5kZWYgYmluZHRleHRkb21haW4KKysjdW5kZWYgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKKysKKysKKysvKiBXaGVuIGJ1aWxkaW5nIGEgRExMLCB3ZSBtdXN0IGV4cG9ydCBzb21lIGZ1bmN0aW9ucy4gIE5vdGUgdGhhdCBiZWNhdXNlCisrICAgdGhlIGZ1bmN0aW9ucyBhcmUgb25seSBkZWZpbmVkIGZvciBiaW5hcnkgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgd2UKKysgICBkb24ndCBuZWVkIHRvIHVzZSBfX2RlY2xzcGVjKGRsbGltcG9ydCkgaW4gYW55IGNhc2UuICAqLworKyNpZiBkZWZpbmVkIF9NU0NfVkVSICYmIEJVSUxESU5HX0RMTAorKyMgZGVmaW5lIERMTF9FWFBPUlRFRCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKysjZWxzZQorKyMgZGVmaW5lIERMTF9FWFBPUlRFRAorKyNlbmRpZgorIAorIAorK0RMTF9FWFBPUlRFRAorIGNoYXIgKgorLWJpbmR0ZXh0ZG9tYWluIChkb21haW5uYW1lLCBkaXJuYW1lKQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKy0gICAgIGNvbnN0IGNoYXIgKmRpcm5hbWU7CisrZ2V0dGV4dCAoY29uc3QgY2hhciAqbXNnaWQpCisgeworLSAgcmV0dXJuIGJpbmR0ZXh0ZG9tYWluX18gKGRvbWFpbm5hbWUsIGRpcm5hbWUpOworKyAgcmV0dXJuIGxpYmludGxfZ2V0dGV4dCAobXNnaWQpOworIH0KKyAKKyAKKytETExfRVhQT1JURUQKKyBjaGFyICoKKy1kY2dldHRleHQgKGRvbWFpbm5hbWUsIG1zZ2lkLCBjYXRlZ29yeSkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CistICAgICBjb25zdCBjaGFyICptc2dpZDsKKy0gICAgIGludCBjYXRlZ29yeTsKKytkZ2V0dGV4dCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQpCisgeworLSAgcmV0dXJuIGRjZ2V0dGV4dF9fIChkb21haW5uYW1lLCBtc2dpZCwgY2F0ZWdvcnkpOworKyAgcmV0dXJuIGxpYmludGxfZGdldHRleHQgKGRvbWFpbm5hbWUsIG1zZ2lkKTsKKyB9CisgCisgCisrRExMX0VYUE9SVEVECisgY2hhciAqCistZGdldHRleHQgKGRvbWFpbm5hbWUsIG1zZ2lkKQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKy0gICAgIGNvbnN0IGNoYXIgKm1zZ2lkOworK2RjZ2V0dGV4dCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQsIGludCBjYXRlZ29yeSkKKyB7CistICByZXR1cm4gZGdldHRleHRfXyAoZG9tYWlubmFtZSwgbXNnaWQpOworKyAgcmV0dXJuIGxpYmludGxfZGNnZXR0ZXh0IChkb21haW5uYW1lLCBtc2dpZCwgY2F0ZWdvcnkpOworIH0KKyAKKyAKKytETExfRVhQT1JURUQKKyBjaGFyICoKKy1nZXR0ZXh0IChtc2dpZCkKKy0gICAgIGNvbnN0IGNoYXIgKm1zZ2lkOworK25nZXR0ZXh0IChjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgbikKKyB7CistICByZXR1cm4gZ2V0dGV4dF9fIChtc2dpZCk7CisrICByZXR1cm4gbGliaW50bF9uZ2V0dGV4dCAobXNnaWQxLCBtc2dpZDIsIG4pOworIH0KKyAKKyAKKytETExfRVhQT1JURUQKKyBjaGFyICoKKy10ZXh0ZG9tYWluIChkb21haW5uYW1lKQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKytkbmdldHRleHQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCSAgIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBuKQorIHsKKy0gIHJldHVybiB0ZXh0ZG9tYWluX18gKGRvbWFpbm5hbWUpOworKyAgcmV0dXJuIGxpYmludGxfZG5nZXR0ZXh0IChkb21haW5uYW1lLCBtc2dpZDEsIG1zZ2lkMiwgbik7CisrfQorKworKworK0RMTF9FWFBPUlRFRAorK2NoYXIgKgorK2RjbmdldHRleHQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCSAgICBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgbiwKKysJICAgIGludCBjYXRlZ29yeSkKKyt7CisrICByZXR1cm4gbGliaW50bF9kY25nZXR0ZXh0IChkb21haW5uYW1lLCBtc2dpZDEsIG1zZ2lkMiwgbiwgY2F0ZWdvcnkpOworK30KKysKKysKKytETExfRVhQT1JURUQKKytjaGFyICoKKyt0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpkb21haW5uYW1lKQorK3sKKysgIHJldHVybiBsaWJpbnRsX3RleHRkb21haW4gKGRvbWFpbm5hbWUpOworK30KKysKKysKKytETExfRVhQT1JURUQKKytjaGFyICoKKytiaW5kdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqZGlybmFtZSkKKyt7CisrICByZXR1cm4gbGliaW50bF9iaW5kdGV4dGRvbWFpbiAoZG9tYWlubmFtZSwgZGlybmFtZSk7CisrfQorKworKworK0RMTF9FWFBPUlRFRAorK2NoYXIgKgorK2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICpjb2Rlc2V0KQorK3sKKysgIHJldHVybiBsaWJpbnRsX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChkb21haW5uYW1lLCBjb2Rlc2V0KTsKKyB9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbDEwbmZsaXN0LmMJMTk5OC0wNC0yNiAwOToyMjozNy4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvbDEwbmZsaXN0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC40NTc3MzI1ODQgLTA0MDAKK0BAIC0xLDUyICsxLDQwIEBACistLyogSGFuZGxlIGxpc3Qgb2YgbmVlZGVkIG1lc3NhZ2UgY2F0YWxvZ3MKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCisrLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBDb250cmlidXRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFRlbGwgZ2xpYmMncyA8c3RyaW5nLmg+IHRvIHByb3ZpZGUgYSBwcm90b3R5cGUgZm9yIHN0cGNweSgpLgorKyAgIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+IGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZQorKyAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KKysjaWZuZGVmIF9HTlVfU09VUkNFCisrIyBkZWZpbmUgX0dOVV9TT1VSQ0UJMQorKyNlbmRpZgorIAorICNpZmRlZiBIQVZFX0NPTkZJR19ICisgIyBpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKy0KKy0jaWYgZGVmaW5lZCBIQVZFX1NUUklOR19IIHx8IGRlZmluZWQgX0xJQkMKKy0jIGlmbmRlZiBfR05VX1NPVVJDRQorLSMgIGRlZmluZSBfR05VX1NPVVJDRQkxCistIyBlbmRpZgorLSMgaW5jbHVkZSA8c3RyaW5nLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KKy0jIGlmbmRlZiBtZW1jcHkKKy0jICBkZWZpbmUgbWVtY3B5KERzdCwgU3JjLCBOdW0pIGJjb3B5IChTcmMsIERzdCwgTnVtKQorLSMgZW5kaWYKKy0jZW5kaWYKKy0jaWYgIUhBVkVfU1RSQ0hSICYmICFkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgc3RyY2hyCistIyAgZGVmaW5lIHN0cmNociBpbmRleAorLSMgZW5kaWYKKy0jZW5kaWYKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgCisgI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX0FSR1pfSAorICMgaW5jbHVkZSA8YXJnei5oPgorICNlbmRpZgorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0KKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RkbGliLmg+CistI2VuZGlmCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorIAorICNpbmNsdWRlICJsb2FkaW5mby5oIgorIAorQEAgLTY1LDIzICs1MywzOSBAQAorIC8qIFJlbmFtZSB0aGUgbm9uIEFOU0kgQyBmdW5jdGlvbnMuICBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZAorICAgIGJlY2F1c2Ugc29tZSBBTlNJIEMgZnVuY3Rpb25zIHdpbGwgcmVxdWlyZSBsaW5raW5nIHdpdGggdGhpcyBvYmplY3QKKyAgICBmaWxlIGFuZCB0aGUgbmFtZSBzcGFjZSBtdXN0IG5vdCBiZSBwb2xsdXRlZC4gICovCistIyBkZWZpbmUgc3RwY3B5KGRlc3QsIHNyYykgX19zdHBjcHkoZGVzdCwgc3JjKQorKyMgaWZuZGVmIHN0cGNweQorKyMgIGRlZmluZSBzdHBjcHkoZGVzdCwgc3JjKSBfX3N0cGNweShkZXN0LCBzcmMpCisrIyBlbmRpZgorICNlbHNlCisgIyBpZm5kZWYgSEFWRV9TVFBDUFkKKy1zdGF0aWMgY2hhciAqc3RwY3B5IFBBUkFNUyAoKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYykpOworK3N0YXRpYyBjaGFyICpzdHBjcHkgKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYyk7CisgIyBlbmRpZgorICNlbmRpZgorIAorKy8qIFBhdGhuYW1lIHN1cHBvcnQuCisrICAgSVNTTEFTSChDKSAgICAgICAgICAgdGVzdHMgd2hldGhlciBDIGlzIGEgZGlyZWN0b3J5IHNlcGFyYXRvciBjaGFyYWN0ZXIuCisrICAgSVNfQUJTT0xVVEVfUEFUSChQKSAgdGVzdHMgd2hldGhlciBQIGlzIGFuIGFic29sdXRlIHBhdGguICBJZiBpdCBpcyBub3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgaXQgbWF5IGJlIGNvbmNhdGVuYXRlZCB0byBhIGRpcmVjdG9yeSBwYXRobmFtZS4KKysgKi8KKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisrICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisrIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJyB8fCAoQykgPT0gJ1xcJykKKysjIGRlZmluZSBIQVNfREVWSUNFKFApIFwKKysgICAgKCgoKFApWzBdID49ICdBJyAmJiAoUClbMF0gPD0gJ1onKSB8fCAoKFApWzBdID49ICdhJyAmJiAoUClbMF0gPD0gJ3onKSkgXAorKyAgICAgJiYgKFApWzFdID09ICc6JykKKysjIGRlZmluZSBJU19BQlNPTFVURV9QQVRIKFApIChJU1NMQVNIICgoUClbMF0pIHx8IEhBU19ERVZJQ0UgKFApKQorKyNlbHNlCisrICAvKiBVbml4ICovCisrIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJykKKysjIGRlZmluZSBJU19BQlNPTFVURV9QQVRIKFApIElTU0xBU0ggKChQKVswXSkKKysjZW5kaWYKKysKKyAvKiBEZWZpbmUgZnVuY3Rpb24gd2hpY2ggYXJlIHVzdWFsbHkgbm90IGF2YWlsYWJsZS4gICovCisgCisgI2lmICFkZWZpbmVkIF9MSUJDICYmICFkZWZpbmVkIEhBVkVfX19BUkdaX0NPVU5UCisgLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN0cmluZ3MgaW4gQVJHWi4gICovCistc3RhdGljIHNpemVfdCBhcmd6X2NvdW50X18gUEFSQU1TICgoY29uc3QgY2hhciAqYXJneiwgc2l6ZV90IGxlbikpOworLQorIHN0YXRpYyBzaXplX3QKKy1hcmd6X2NvdW50X18gKGFyZ3osIGxlbikKKy0gICAgIGNvbnN0IGNoYXIgKmFyZ3o7CistICAgICBzaXplX3QgbGVuOworK2FyZ3pfY291bnRfXyAoY29uc3QgY2hhciAqYXJneiwgc2l6ZV90IGxlbikKKyB7CisgICBzaXplX3QgY291bnQgPSAwOworICAgd2hpbGUgKGxlbiA+IDApCitAQCAtOTUsMTggKzk5LDE3IEBACisgfQorICMgdW5kZWYgX19hcmd6X2NvdW50CisgIyBkZWZpbmUgX19hcmd6X2NvdW50KGFyZ3osIGxlbikgYXJnel9jb3VudF9fIChhcmd6LCBsZW4pCisrI2Vsc2UKKysjIGlmZGVmIF9MSUJDCisrIyAgZGVmaW5lIF9fYXJnel9jb3VudChhcmd6LCBsZW4pIElOVFVTRShfX2FyZ3pfY291bnQpIChhcmd6LCBsZW4pCisrIyBlbmRpZgorICNlbmRpZgkvKiAhX0xJQkMgJiYgIUhBVkVfX19BUkdaX0NPVU5UICovCisgCisgI2lmICFkZWZpbmVkIF9MSUJDICYmICFkZWZpbmVkIEhBVkVfX19BUkdaX1NUUklOR0lGWQorIC8qIE1ha2UgJ1wwJyBzZXBhcmF0ZWQgYXJnIHZlY3RvciBBUkdaIHByaW50YWJsZSBieSBjb252ZXJ0aW5nIGFsbCB0aGUgJ1wwJ3MKKyAgICBleGNlcHQgdGhlIGxhc3QgaW50byB0aGUgY2hhcmFjdGVyIFNFUC4gICovCistc3RhdGljIHZvaWQgYXJnel9zdHJpbmdpZnlfXyBQQVJBTVMgKChjaGFyICphcmd6LCBzaXplX3QgbGVuLCBpbnQgc2VwKSk7CistCisgc3RhdGljIHZvaWQKKy1hcmd6X3N0cmluZ2lmeV9fIChhcmd6LCBsZW4sIHNlcCkKKy0gICAgIGNoYXIgKmFyZ3o7CistICAgICBzaXplX3QgbGVuOworLSAgICAgaW50IHNlcDsKKythcmd6X3N0cmluZ2lmeV9fIChjaGFyICphcmd6LCBzaXplX3QgbGVuLCBpbnQgc2VwKQorIHsKKyAgIHdoaWxlIChsZW4gPiAwKQorICAgICB7CitAQCAtMTE5LDE3ICsxMjIsMTYgQEAKKyB9CisgIyB1bmRlZiBfX2FyZ3pfc3RyaW5naWZ5CisgIyBkZWZpbmUgX19hcmd6X3N0cmluZ2lmeShhcmd6LCBsZW4sIHNlcCkgYXJnel9zdHJpbmdpZnlfXyAoYXJneiwgbGVuLCBzZXApCisrI2Vsc2UKKysjIGlmZGVmIF9MSUJDCisrIyAgZGVmaW5lIF9fYXJnel9zdHJpbmdpZnkoYXJneiwgbGVuLCBzZXApIFwKKysgIElOVFVTRShfX2FyZ3pfc3RyaW5naWZ5KSAoYXJneiwgbGVuLCBzZXApCisrIyBlbmRpZgorICNlbmRpZgkvKiAhX0xJQkMgJiYgIUhBVkVfX19BUkdaX1NUUklOR0lGWSAqLworIAorICNpZiAhZGVmaW5lZCBfTElCQyAmJiAhZGVmaW5lZCBIQVZFX19fQVJHWl9ORVhUCistc3RhdGljIGNoYXIgKmFyZ3pfbmV4dF9fIFBBUkFNUyAoKGNoYXIgKmFyZ3osIHNpemVfdCBhcmd6X2xlbiwKKy0JCQkJICBjb25zdCBjaGFyICplbnRyeSkpOworLQorIHN0YXRpYyBjaGFyICoKKy1hcmd6X25leHRfXyAoYXJneiwgYXJnel9sZW4sIGVudHJ5KQorLSAgICAgY2hhciAqYXJnejsKKy0gICAgIHNpemVfdCBhcmd6X2xlbjsKKy0gICAgIGNvbnN0IGNoYXIgKmVudHJ5OworK2FyZ3pfbmV4dF9fIChjaGFyICphcmd6LCBzaXplX3QgYXJnel9sZW4sIGNvbnN0IGNoYXIgKmVudHJ5KQorIHsKKyAgIGlmIChlbnRyeSkKKyAgICAgeworQEAgLTE1MCwxMSArMTUyLDggQEAKKyAKKyAKKyAvKiBSZXR1cm4gbnVtYmVyIG9mIGJpdHMgc2V0IGluIFguICAqLworLXN0YXRpYyBpbnQgcG9wIFBBUkFNUyAoKGludCB4KSk7CistCisgc3RhdGljIGlubGluZSBpbnQKKy1wb3AgKHgpCistICAgICBpbnQgeDsKKytwb3AgKGludCB4KQorIHsKKyAgIC8qIFdlIGFzc3VtZSB0aGF0IG5vIG1vcmUgdGhhbiAxNiBiaXRzIGFyZSB1c2VkLiAgKi8KKyAgIHggPSAoKHggJiB+MHg1NTU1KSA+PiAxKSArICh4ICYgMHg1NTU1KTsKK0BAIC0xNjcsMzEgKzE2NiwyNyBAQAorIAorIAwKKyBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoKKy1fbmxfbWFrZV9sMTBuZmxpc3QgKGwxMG5maWxlX2xpc3QsIGRpcmxpc3QsIGRpcmxpc3RfbGVuLCBtYXNrLCBsYW5ndWFnZSwKKy0JCSAgICB0ZXJyaXRvcnksIGNvZGVzZXQsIG5vcm1hbGl6ZWRfY29kZXNldCwgbW9kaWZpZXIsIHNwZWNpYWwsCistCQkgICAgc3BvbnNvciwgcmV2aXNpb24sIGZpbGVuYW1lLCBkb19hbGxvY2F0ZSkKKy0gICAgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKipsMTBuZmlsZV9saXN0OworLSAgICAgY29uc3QgY2hhciAqZGlybGlzdDsKKy0gICAgIHNpemVfdCBkaXJsaXN0X2xlbjsKKy0gICAgIGludCBtYXNrOworLSAgICAgY29uc3QgY2hhciAqbGFuZ3VhZ2U7CistICAgICBjb25zdCBjaGFyICp0ZXJyaXRvcnk7CistICAgICBjb25zdCBjaGFyICpjb2Rlc2V0OworLSAgICAgY29uc3QgY2hhciAqbm9ybWFsaXplZF9jb2Rlc2V0OworLSAgICAgY29uc3QgY2hhciAqbW9kaWZpZXI7CistICAgICBjb25zdCBjaGFyICpzcGVjaWFsOworLSAgICAgY29uc3QgY2hhciAqc3BvbnNvcjsKKy0gICAgIGNvbnN0IGNoYXIgKnJldmlzaW9uOworLSAgICAgY29uc3QgY2hhciAqZmlsZW5hbWU7CistICAgICBpbnQgZG9fYWxsb2NhdGU7CisrX25sX21ha2VfbDEwbmZsaXN0IChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoqbDEwbmZpbGVfbGlzdCwKKysJCSAgICBjb25zdCBjaGFyICpkaXJsaXN0LCBzaXplX3QgZGlybGlzdF9sZW4sCisrCQkgICAgaW50IG1hc2ssIGNvbnN0IGNoYXIgKmxhbmd1YWdlLCBjb25zdCBjaGFyICp0ZXJyaXRvcnksCisrCQkgICAgY29uc3QgY2hhciAqY29kZXNldCwgY29uc3QgY2hhciAqbm9ybWFsaXplZF9jb2Rlc2V0LAorKwkJICAgIGNvbnN0IGNoYXIgKm1vZGlmaWVyLCBjb25zdCBjaGFyICpzcGVjaWFsLAorKwkJICAgIGNvbnN0IGNoYXIgKnNwb25zb3IsIGNvbnN0IGNoYXIgKnJldmlzaW9uLAorKwkJICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZG9fYWxsb2NhdGUpCisgeworICAgY2hhciAqYWJzX2ZpbGVuYW1lOworLSAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqbGFzdCA9IE5VTEw7CisrICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoqbGFzdHA7CisgICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpyZXR2YWw7CisgICBjaGFyICpjcDsKKysgIHNpemVfdCBkaXJsaXN0X2NvdW50OworICAgc2l6ZV90IGVudHJpZXM7CisgICBpbnQgY250OworIAorKyAgLyogSWYgTEFOR1VBR0UgY29udGFpbnMgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IHNwZWNpZmljYXRpb24sIHdlIGlnbm9yZQorKyAgICAgRElSTElTVC4gICovCisrICBpZiAoSVNfQUJTT0xVVEVfUEFUSCAobGFuZ3VhZ2UpKQorKyAgICBkaXJsaXN0X2xlbiA9IDA7CisrCisgICAvKiBBbGxvY2F0ZSByb29tIGZvciB0aGUgZnVsbCBmaWxlIG5hbWUuICAqLworICAgYWJzX2ZpbGVuYW1lID0gKGNoYXIgKikgbWFsbG9jIChkaXJsaXN0X2xlbgorIAkJCQkgICsgc3RybGVuIChsYW5ndWFnZSkKK0BAIC0yMDksNyArMjA0LDcgQEAKKyAJCQkJICArICgoKG1hc2sgJiBDRU5fU1BPTlNPUikgIT0gMAorIAkJCQkgICAgICB8fCAobWFzayAmIENFTl9SRVZJU0lPTikgIT0gMCkKKyAJCQkJICAgICA/ICgxICsgKChtYXNrICYgQ0VOX1NQT05TT1IpICE9IDAKKy0JCQkJCSAgICAgPyBzdHJsZW4gKHNwb25zb3IpICsgMSA6IDApCisrCQkJCQkgICAgID8gc3RybGVuIChzcG9uc29yKSA6IDApCisgCQkJCQkrICgobWFzayAmIENFTl9SRVZJU0lPTikgIT0gMAorIAkJCQkJICAgPyBzdHJsZW4gKHJldmlzaW9uKSArIDEgOiAwKSkgOiAwKQorIAkJCQkgICsgMSArIHN0cmxlbiAoZmlsZW5hbWUpICsgMSk7CitAQCAtMjE3LDE0ICsyMTIsMTYgQEAKKyAgIGlmIChhYnNfZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgcmV0dXJuIE5VTEw7CisgCistICByZXR2YWwgPSBOVUxMOworLSAgbGFzdCA9IE5VTEw7CistCisgICAvKiBDb25zdHJ1Y3QgZmlsZSBuYW1lLiAgKi8KKy0gIG1lbWNweSAoYWJzX2ZpbGVuYW1lLCBkaXJsaXN0LCBkaXJsaXN0X2xlbik7CistICBfX2FyZ3pfc3RyaW5naWZ5IChhYnNfZmlsZW5hbWUsIGRpcmxpc3RfbGVuLCAnOicpOworLSAgY3AgPSBhYnNfZmlsZW5hbWUgKyAoZGlybGlzdF9sZW4gLSAxKTsKKy0gICpjcCsrID0gJy8nOworKyAgY3AgPSBhYnNfZmlsZW5hbWU7CisrICBpZiAoZGlybGlzdF9sZW4gPiAwKQorKyAgICB7CisrICAgICAgbWVtY3B5IChjcCwgZGlybGlzdCwgZGlybGlzdF9sZW4pOworKyAgICAgIF9fYXJnel9zdHJpbmdpZnkgKGNwLCBkaXJsaXN0X2xlbiwgUEFUSF9TRVBBUkFUT1IpOworKyAgICAgIGNwICs9IGRpcmxpc3RfbGVuOworKyAgICAgIGNwWy0xXSA9ICcvJzsKKysgICAgfQorKworICAgY3AgPSBzdHBjcHkgKGNwLCBsYW5ndWFnZSk7CisgCisgICBpZiAoKG1hc2sgJiBURVJSSVRPUlkpICE9IDApCitAQCAtMjcxLDcgKzI2OCw3IEBACisgCisgICAvKiBMb29rIGluIGxpc3Qgb2YgYWxyZWFkeSBsb2FkZWQgZG9tYWlucyB3aGV0aGVyIGl0IGlzIGFscmVhZHkKKyAgICAgIGF2YWlsYWJsZS4gICovCistICBsYXN0ID0gTlVMTDsKKysgIGxhc3RwID0gbDEwbmZpbGVfbGlzdDsKKyAgIGZvciAocmV0dmFsID0gKmwxMG5maWxlX2xpc3Q7IHJldHZhbCAhPSBOVUxMOyByZXR2YWwgPSByZXR2YWwtPm5leHQpCisgICAgIGlmIChyZXR2YWwtPmZpbGVuYW1lICE9IE5VTEwpCisgICAgICAgeworQEAgLTI4Niw3ICsyODMsNyBAQAorIAkgICAgYnJlYWs7CisgCSAgfQorIAorLQlsYXN0ID0gcmV0dmFsOworKwlsYXN0cCA9ICZyZXR2YWwtPm5leHQ7CisgICAgICAgfQorIAorICAgaWYgKHJldHZhbCAhPSBOVUxMIHx8IGRvX2FsbG9jYXRlID09IDApCitAQCAtMjk1LDQ4ICsyOTIsNjYgQEAKKyAgICAgICByZXR1cm4gcmV0dmFsOworICAgICB9CisgCistICByZXR2YWwgPSAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKQorLSAgICBtYWxsb2MgKHNpemVvZiAoKnJldHZhbCkgKyAoX19hcmd6X2NvdW50IChkaXJsaXN0LCBkaXJsaXN0X2xlbikKKy0JCQkJKiAoMSA8PCBwb3AgKG1hc2spKQorLQkJCQkqIHNpemVvZiAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKSkpOworKyAgZGlybGlzdF9jb3VudCA9IChkaXJsaXN0X2xlbiA+IDAgPyBfX2FyZ3pfY291bnQgKGRpcmxpc3QsIGRpcmxpc3RfbGVuKSA6IDEpOworKworKyAgLyogQWxsb2NhdGUgYSBuZXcgbG9hZGVkX2wxMG5maWxlLiAgKi8KKysgIHJldHZhbCA9CisrICAgIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICopCisrICAgIG1hbGxvYyAoc2l6ZW9mICgqcmV0dmFsKQorKwkgICAgKyAoKChkaXJsaXN0X2NvdW50IDw8IHBvcCAobWFzaykpICsgKGRpcmxpc3RfY291bnQgPiAxID8gMSA6IDApKQorKwkgICAgICAgKiBzaXplb2YgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKikpKTsKKyAgIGlmIChyZXR2YWwgPT0gTlVMTCkKKyAgICAgcmV0dXJuIE5VTEw7CisgCisgICByZXR2YWwtPmZpbGVuYW1lID0gYWJzX2ZpbGVuYW1lOworLSAgcmV0dmFsLT5kZWNpZGVkID0gKF9fYXJnel9jb3VudCAoZGlybGlzdCwgZGlybGlzdF9sZW4pICE9IDEKKysKKysgIC8qIFdlIHNldCByZXR2YWwtPmRhdGEgdG8gTlVMTCBoZXJlOyBpdCBpcyBmaWxsZWQgaW4gbGF0ZXIuCisrICAgICBTZXR0aW5nIHJldHZhbC0+ZGVjaWRlZCB0byAxIGhlcmUgbWVhbnMgdGhhdCByZXR2YWwgZG9lcyBub3QKKysgICAgIGNvcnJlc3BvbmQgdG8gYSByZWFsIGZpbGUgKGRpcmxpc3RfY291bnQgPiAxKSBvciBpcyBub3Qgd29ydGgKKysgICAgIGxvb2tpbmcgdXAgKGlmIGFuIHVubm9ybWFsaXplZCBjb2Rlc2V0IHdhcyBzcGVjaWZpZWQpLiAgKi8KKysgIHJldHZhbC0+ZGVjaWRlZCA9IChkaXJsaXN0X2NvdW50ID4gMQorIAkJICAgICB8fCAoKG1hc2sgJiBYUEdfQ09ERVNFVCkgIT0gMAorIAkJCSAmJiAobWFzayAmIFhQR19OT1JNX0NPREVTRVQpICE9IDApKTsKKyAgIHJldHZhbC0+ZGF0YSA9IE5VTEw7CisgCistICBpZiAobGFzdCA9PSBOVUxMKQorLSAgICB7CistICAgICAgcmV0dmFsLT5uZXh0ID0gKmwxMG5maWxlX2xpc3Q7CistICAgICAgKmwxMG5maWxlX2xpc3QgPSByZXR2YWw7CistICAgIH0KKy0gIGVsc2UKKy0gICAgeworLSAgICAgIHJldHZhbC0+bmV4dCA9IGxhc3QtPm5leHQ7CistICAgICAgbGFzdC0+bmV4dCA9IHJldHZhbDsKKy0gICAgfQorKyAgcmV0dmFsLT5uZXh0ID0gKmxhc3RwOworKyAgKmxhc3RwID0gcmV0dmFsOworIAorICAgZW50cmllcyA9IDA7CistICAvKiBJZiB0aGUgRElSTElTVCBpcyBhIHJlYWwgbGlzdCB0aGUgUkVUVkFMIGVudHJ5IGNvcnJlc3BvbmRzIG5vdCB0bworLSAgICAgYSByZWFsIGZpbGUuICBTbyB3ZSBoYXZlIHRvIHVzZSB0aGUgRElSTElTVCBzZXBhcmF0aW9uIG1lY2hhbmlzbQorLSAgICAgb2YgdGhlIGlubmVyIGxvb3AuICAqLworLSAgY250ID0gX19hcmd6X2NvdW50IChkaXJsaXN0LCBkaXJsaXN0X2xlbikgPT0gMSA/IG1hc2sgLSAxIDogbWFzazsKKy0gIGZvciAoOyBjbnQgPj0gMDsgLS1jbnQpCisrICAvKiBSZWN1cnNlIHRvIGZpbGwgdGhlIGluaGVyaXRhbmNlIGxpc3Qgb2YgUkVUVkFMLgorKyAgICAgSWYgdGhlIERJUkxJU1QgaXMgYSByZWFsIGxpc3QgKGkuZS4gRElSTElTVF9DT1VOVCA+IDEpLCB0aGUgUkVUVkFMCisrICAgICBlbnRyeSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgcmVhbCBmaWxlOyByZXR2YWwtPmZpbGVuYW1lIGNvbnRhaW5zCisrICAgICBjb2xvbnMuICBJbiB0aGlzIGNhc2Ugd2UgbG9vcCBhY3Jvc3MgYWxsIGVsZW1lbnRzIG9mIERJUkxJU1QgYW5kCisrICAgICBhY3Jvc3MgYWxsIGJpdCBwYXR0ZXJucyBkb21pbmF0ZWQgYnkgTUFTSy4KKysgICAgIElmIHRoZSBESVJMSVNUIGlzIGEgc2luZ2xlIGRpcmVjdG9yeSBvciBlbnRpcmVseSByZWR1bmRhbnQgKGkuZS4KKysgICAgIERJUkxJU1RfQ09VTlQgPT0gMSksIHdlIGxvb3AgYWNyb3NzIGFsbCBiaXQgcGF0dGVybnMgZG9taW5hdGVkIGJ5CisrICAgICBNQVNLLCBleGNsdWRpbmcgTUFTSyBpdHNlbGYuCisrICAgICBJbiBlaXRoZXIgY2FzZSwgd2UgbG9vcCBkb3duIGZyb20gTUFTSyB0byAwLiAgVGhpcyBoYXMgdGhlIGVmZmVjdAorKyAgICAgdGhhdCB0aGUgZXh0cmEgYml0cyBpbiB0aGUgbG9jYWxlIG5hbWUgYXJlIGRyb3BwZWQgaW4gdGhpcyBvcmRlcjoKKysgICAgIGZpcnN0IHRoZSBtb2RpZmllciwgdGhlbiB0aGUgdGVycml0b3J5LCB0aGVuIHRoZSBjb2Rlc2V0LCB0aGVuIHRoZQorKyAgICAgbm9ybWFsaXplZF9jb2Rlc2V0LiAgKi8KKysgIGZvciAoY250ID0gZGlybGlzdF9jb3VudCA+IDEgPyBtYXNrIDogbWFzayAtIDE7IGNudCA+PSAwOyAtLWNudCkKKyAgICAgaWYgKChjbnQgJiB+bWFzaykgPT0gMAorIAkmJiAoKGNudCAmIENFTl9TUEVDSUZJQykgPT0gMCB8fCAoY250ICYgWFBHX1NQRUNJRklDKSA9PSAwKQorIAkmJiAoKGNudCAmIFhQR19DT0RFU0VUKSA9PSAwIHx8IChjbnQgJiBYUEdfTk9STV9DT0RFU0VUKSA9PSAwKSkKKyAgICAgICB7CistCS8qIEl0ZXJhdGUgb3ZlciBhbGwgZWxlbWVudHMgb2YgdGhlIERJUkxJU1QuICAqLworLQljaGFyICpkaXIgPSBOVUxMOworKwlpZiAoZGlybGlzdF9jb3VudCA+IDEpCisrCSAgeworKwkgICAgLyogSXRlcmF0ZSBvdmVyIGFsbCBlbGVtZW50cyBvZiB0aGUgRElSTElTVC4gICovCisrCSAgICBjaGFyICpkaXIgPSBOVUxMOworIAorLQl3aGlsZSAoKGRpciA9IF9fYXJnel9uZXh0ICgoY2hhciAqKSBkaXJsaXN0LCBkaXJsaXN0X2xlbiwgZGlyKSkKKy0JICAgICAgICE9IE5VTEwpCisrCSAgICB3aGlsZSAoKGRpciA9IF9fYXJnel9uZXh0ICgoY2hhciAqKSBkaXJsaXN0LCBkaXJsaXN0X2xlbiwgZGlyKSkKKysJCSAgICE9IE5VTEwpCisrCSAgICAgIHJldHZhbC0+c3VjY2Vzc29yW2VudHJpZXMrK10KKysJCT0gX25sX21ha2VfbDEwbmZsaXN0IChsMTBuZmlsZV9saXN0LCBkaXIsIHN0cmxlbiAoZGlyKSArIDEsCisrCQkJCSAgICAgIGNudCwgbGFuZ3VhZ2UsIHRlcnJpdG9yeSwgY29kZXNldCwKKysJCQkJICAgICAgbm9ybWFsaXplZF9jb2Rlc2V0LCBtb2RpZmllciwgc3BlY2lhbCwKKysJCQkJICAgICAgc3BvbnNvciwgcmV2aXNpb24sIGZpbGVuYW1lLCAxKTsKKysJICB9CisrCWVsc2UKKyAJICByZXR2YWwtPnN1Y2Nlc3NvcltlbnRyaWVzKytdCistCSAgICA9IF9ubF9tYWtlX2wxMG5mbGlzdCAobDEwbmZpbGVfbGlzdCwgZGlyLCBzdHJsZW4gKGRpcikgKyAxLCBjbnQsCistCQkJCSAgbGFuZ3VhZ2UsIHRlcnJpdG9yeSwgY29kZXNldCwKKysJICAgID0gX25sX21ha2VfbDEwbmZsaXN0IChsMTBuZmlsZV9saXN0LCBkaXJsaXN0LCBkaXJsaXN0X2xlbiwKKysJCQkJICBjbnQsIGxhbmd1YWdlLCB0ZXJyaXRvcnksIGNvZGVzZXQsCisgCQkJCSAgbm9ybWFsaXplZF9jb2Rlc2V0LCBtb2RpZmllciwgc3BlY2lhbCwKKyAJCQkJICBzcG9uc29yLCByZXZpc2lvbiwgZmlsZW5hbWUsIDEpOworICAgICAgIH0KK0BAIC0zNDcsMTEgKzM2MiwxMCBAQAorIAwKKyAvKiBOb3JtYWxpemUgY29kZXNldCBuYW1lLiAgVGhlcmUgaXMgbm8gc3RhbmRhcmQgZm9yIHRoZSBjb2Rlc2V0CisgICAgbmFtZXMuICBOb3JtYWxpemF0aW9uIGFsbG93cyB0aGUgdXNlciB0byB1c2UgYW55IG9mIHRoZSBjb21tb24KKy0gICBuYW1lcy4gICovCisrICAgbmFtZXMuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgaGFzIHRvIGJlCisrICAgZnJlZWQgYnkgdGhlIGNhbGxlci4gICovCisgY29uc3QgY2hhciAqCistX25sX25vcm1hbGl6ZV9jb2Rlc2V0IChjb2Rlc2V0LCBuYW1lX2xlbikKKy0gICAgIGNvbnN0IGNoYXIgKmNvZGVzZXQ7CistICAgICBzaXplX3QgbmFtZV9sZW47CisrX25sX25vcm1hbGl6ZV9jb2Rlc2V0IChjb25zdCBjaGFyICpjb2Rlc2V0LCBzaXplX3QgbmFtZV9sZW4pCisgeworICAgaW50IGxlbiA9IDA7CisgICBpbnQgb25seV9kaWdpdCA9IDE7CitAQCAtMzYwLDExICszNzQsMTEgQEAKKyAgIHNpemVfdCBjbnQ7CisgCisgICBmb3IgKGNudCA9IDA7IGNudCA8IG5hbWVfbGVuOyArK2NudCkKKy0gICAgaWYgKGlzYWxudW0gKGNvZGVzZXRbY250XSkpCisrICAgIGlmIChpc2FsbnVtICgodW5zaWduZWQgY2hhcikgY29kZXNldFtjbnRdKSkKKyAgICAgICB7CisgCSsrbGVuOworIAorLQlpZiAoaXNhbHBoYSAoY29kZXNldFtjbnRdKSkKKysJaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSBjb2Rlc2V0W2NudF0pKQorIAkgIG9ubHlfZGlnaXQgPSAwOworICAgICAgIH0KKyAKK0BAIC0zNzgsOSArMzkyLDkgQEAKKyAJd3AgPSByZXR2YWw7CisgCisgICAgICAgZm9yIChjbnQgPSAwOyBjbnQgPCBuYW1lX2xlbjsgKytjbnQpCistCWlmIChpc2FscGhhIChjb2Rlc2V0W2NudF0pKQorLQkgICp3cCsrID0gdG9sb3dlciAoY29kZXNldFtjbnRdKTsKKy0JZWxzZSBpZiAoaXNkaWdpdCAoY29kZXNldFtjbnRdKSkKKysJaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSBjb2Rlc2V0W2NudF0pKQorKwkgICp3cCsrID0gdG9sb3dlciAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSk7CisrCWVsc2UgaWYgKGlzZGlnaXQgKCh1bnNpZ25lZCBjaGFyKSBjb2Rlc2V0W2NudF0pKQorIAkgICp3cCsrID0gY29kZXNldFtjbnRdOworIAorICAgICAgICp3cCA9ICdcMCc7CitAQCAtMzk4LDkgKzQxMiw3IEBACisgICAgdG8gYmUgZGVmaW5lZC4gICovCisgI2lmICFfTElCQyAmJiAhSEFWRV9TVFBDUFkKKyBzdGF0aWMgY2hhciAqCistc3RwY3B5IChkZXN0LCBzcmMpCistICAgICBjaGFyICpkZXN0OworLSAgICAgY29uc3QgY2hhciAqc3JjOworK3N0cGNweSAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKQorIHsKKyAgIHdoaWxlICgoKmRlc3QrKyA9ICpzcmMrKykgIT0gJ1wwJykKKyAgICAgLyogRG8gbm90aGluZy4gKi8gOworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xpYmdldHRleHQuaAkxOTk4LTA0LTI2IDA5OjIyOjM2LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9saWJnZXR0ZXh0LmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xLDE4MiArMCwwIEBACistLyogTWVzc2FnZSBjYXRhbG9ncyBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb24uCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCistCistLyogQmVjYXVzZSBvbiBzb21lIHN5c3RlbXMgKGUuZy4gU29sYXJpcykgd2Ugc29tZXRpbWVzIGhhdmUgdG8gaW5jbHVkZQorLSAgIHRoZSBzeXN0ZW1zIGxpYmludGwuaCBhcyB3ZWxsIGFzIHRoaXMgZmlsZSB3ZSBoYXZlIG1vcmUgY29tcGxleAorLSAgIGluY2x1ZGUgcHJvdGVjdGlvbiBhYm92ZS4gIEJ1dCB0aGUgc3lzdGVtcyBoZWFkZXIgbWlnaHQgcGVyaGFwcyBhbHNvCistICAgZGVmaW5lIF9MSUJJTlRMX0ggYW5kIHRoZXJlZm9yZSB3ZSBoYXZlIHRvIHByb3RlY3QgdGhlIGRlZmluaXRpb24gaGVyZS4gICovCistCistI2lmICFkZWZpbmVkIChfTElCSU5UTF9IKSB8fCAhZGVmaW5lZCAoX0xJQkdFVFRFWFRfSCkKKy0jaWYgIWRlZmluZWQgKF9MSUJJTlRMX0gpCistIyBkZWZpbmUgX0xJQklOVExfSAkxCistI2VuZGlmCistI2RlZmluZSBfTElCR0VUVEVYVF9ICTEKKy0KKy0vKiBXZSBkZWZpbmUgYW4gYWRkaXRpb25hbCBzeW1ib2wgdG8gc2lnbmFsIHRoYXQgd2UgdXNlIHRoZSBHTlUKKy0gICBpbXBsZW1lbnRhdGlvbiBvZiBnZXR0ZXh0LiAgKi8KKy0jZGVmaW5lIF9fVVNFX0dOVV9HRVRURVhUIDEKKy0KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistCistI2lmIEhBVkVfTE9DQUxFX0gKKy0jIGluY2x1ZGUgPGxvY2FsZS5oPgorLSNlbmRpZgorLQorLQorLSNpZmRlZiBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIgeworLSNlbmRpZgorLQorLS8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKy0KKy0jaWZuZGVmIFBBUkFNUworLSMgaWYgX19TVERDX18KKy0jICBkZWZpbmUgUEFSQU1TKGFyZ3MpIGFyZ3MKKy0jIGVsc2UKKy0jICBkZWZpbmUgUEFSQU1TKGFyZ3MpICgpCistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZm5kZWYgTlVMTAorLSMgaWYgIWRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfX0dOVUNfXworLSMgIGRlZmluZSBOVUxMICgodm9pZCAqKSAwKQorLSMgZWxzZQorLSMgIGRlZmluZSBOVUxMICgwKQorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0jaWYgIUhBVkVfTENfTUVTU0FHRVMKKy0vKiBUaGlzIHZhbHVlIGRldGVybWluZXMgdGhlIGJlaGF2aW91ciBvZiB0aGUgZ2V0dGV4dCgpIGFuZCBkZ2V0dGV4dCgpCistICAgZnVuY3Rpb24uICBCdXQgc29tZSBzeXN0ZW0gZG9lcyBub3QgaGF2ZSB0aGlzIGRlZmluZWQuICBEZWZpbmUgaXQKKy0gICB0byBhIGRlZmF1bHQgdmFsdWUuICAqLworLSMgZGVmaW5lIExDX01FU1NBR0VTICgtMSkKKy0jZW5kaWYKKy0KKy0KKy0vKiBEZWNsYXJhdGlvbnMgZm9yIGdldHRleHQtdXNpbmctY2F0Z2V0cyBpbnRlcmZhY2UuICBEZXJpdmVkIGZyb20KKy0gICBKaW0gTWV5ZXJpbmcncyBsaWJpbnRsLmguICAqLworLXN0cnVjdCBfbXNnX2VudAorLXsKKy0gIGNvbnN0IGNoYXIgKl9tc2c7CistICBpbnQgX21zZ19udW1iZXI7CistfTsKKy0KKy0KKy0jaWYgSEFWRV9DQVRHRVRTCistLyogVGhlc2UgdHdvIHZhcmlhYmxlcyBhcmUgZGVmaW5lZCBpbiB0aGUgYXV0b21hdGljYWxseSBieSBwby10by10Ymwuc2VkCistICAgZ2VuZXJhdGVkIGZpbGUgYGNhdC1pZC10YmwuYycuICAqLworLWV4dGVybiBjb25zdCBzdHJ1Y3QgX21zZ19lbnQgX21zZ190YmxbXTsKKy1leHRlcm4gaW50IF9tc2dfdGJsX2xlbmd0aDsKKy0jZW5kaWYKKy0KKy0KKy0vKiBGb3IgYXV0b21hdGljYWwgZXh0cmFjdGlvbiBvZiBtZXNzYWdlcyBzb21ldGltZXMgbm8gcmVhbAorLSAgIHRyYW5zbGF0aW9uIGlzIG5lZWRlZC4gIEluc3RlYWQgdGhlIHN0cmluZyBpdHNlbGYgaXMgdGhlIHJlc3VsdC4gICovCistI2RlZmluZSBnZXR0ZXh0X25vb3AoU3RyKSAoU3RyKQorLQorLS8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIGN1cnJlbnQgZGVmYXVsdCBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50CistICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIE1TR0lEIGl0c2VsZiAodGhlIGRlZmF1bHQKKy0gICB0ZXh0KS4gICovCistZXh0ZXJuIGNoYXIgKmdldHRleHQgUEFSQU1TICgoY29uc3QgY2hhciAqX19tc2dpZCkpOworLWV4dGVybiBjaGFyICpnZXR0ZXh0X18gUEFSQU1TICgoY29uc3QgY2hhciAqX19tc2dpZCkpOworLQorLS8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorLSAgIExDX01FU1NBR0VTIGxvY2FsZS4gICovCistZXh0ZXJuIGNoYXIgKmRnZXR0ZXh0IFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCkpOworLWV4dGVybiBjaGFyICpkZ2V0dGV4dF9fIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKy0JCQkJIGNvbnN0IGNoYXIgKl9fbXNnaWQpKTsKKy0KKy0vKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQgQ0FURUdPUlkKKy0gICBsb2NhbGUuICAqLworLWV4dGVybiBjaGFyICpkY2dldHRleHQgUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkLAorLQkJCQlpbnQgX19jYXRlZ29yeSkpOworLWV4dGVybiBjaGFyICpkY2dldHRleHRfXyBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCistCQkJCSAgY29uc3QgY2hhciAqX19tc2dpZCwgaW50IF9fY2F0ZWdvcnkpKTsKKy0KKy0KKy0vKiBTZXQgdGhlIGN1cnJlbnQgZGVmYXVsdCBtZXNzYWdlIGNhdGFsb2cgdG8gRE9NQUlOTkFNRS4KKy0gICBJZiBET01BSU5OQU1FIGlzIG51bGwsIHJldHVybiB0aGUgY3VycmVudCBkZWZhdWx0LgorLSAgIElmIERPTUFJTk5BTUUgaXMgIiIsIHJlc2V0IHRvIHRoZSBkZWZhdWx0IG9mICJtZXNzYWdlcyIuICAqLworLWV4dGVybiBjaGFyICp0ZXh0ZG9tYWluIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkpOworLWV4dGVybiBjaGFyICp0ZXh0ZG9tYWluX18gUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lKSk7CistCistLyogU3BlY2lmeSB0aGF0IHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIGZvdW5kCistICAgaW4gRElSTkFNRSByYXRoZXIgdGhhbiBpbiB0aGUgc3lzdGVtIGxvY2FsZSBkYXRhIGJhc2UuICAqLworLWV4dGVybiBjaGFyICpiaW5kdGV4dGRvbWFpbiBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCistCQkJCSAgY29uc3QgY2hhciAqX19kaXJuYW1lKSk7CistZXh0ZXJuIGNoYXIgKmJpbmR0ZXh0ZG9tYWluX18gUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorLQkJCQkgICAgY29uc3QgY2hhciAqX19kaXJuYW1lKSk7CistCistI2lmIEVOQUJMRV9OTFMKKy0KKy0vKiBTb2xhcmlzIDIuMyBoYXMgdGhlIGdldHRleHQgZnVuY3Rpb24gYnV0IGRjZ2V0dGV4dCBpcyBtaXNzaW5nLgorLSAgIFNvIHdlIG9taXQgdGhpcyBvcHRpbWl6YXRpb24gZm9yIFNvbGFyaXMgMi4zLiAgQlRXLCBTb2xhcmlzIDIuNAorLSAgIGhhcyBkY2dldHRleHQuICAqLworLSMgaWYgIUhBVkVfQ0FUR0VUUyAmJiAoIUhBVkVfR0VUVEVYVCB8fCBIQVZFX0RDR0VUVEVYVCkKKy0KKy0jICBkZWZpbmUgZ2V0dGV4dChNc2dpZCkJCQkJCQkgICAgICBcCistICAgICBkZ2V0dGV4dCAoTlVMTCwgTXNnaWQpCistCistIyAgZGVmaW5lIGRnZXR0ZXh0KERvbWFpbm5hbWUsIE1zZ2lkKQkJCQkJICAgICAgXAorLSAgICAgZGNnZXR0ZXh0IChEb21haW5uYW1lLCBNc2dpZCwgTENfTUVTU0FHRVMpCistCistIyAgaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiBfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDcKKy0vKiBUaGlzIGdsb2JhbCB2YXJpYWJsZSBpcyBkZWZpbmVkIGluIGxvYWRtc2djYXQuYy4gIFdlIG5lZWQgYSBzaWduLAorLSAgIHdoZXRoZXIgYSBuZXcgY2F0YWxvZyB3YXMgbG9hZGVkLCB3aGljaCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGFsbAorLSAgIHRyYW5zbGF0aW9ucy4gICovCistZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworLQorLSMgICBkZWZpbmUgZGNnZXR0ZXh0KERvbWFpbm5hbWUsIE1zZ2lkLCBDYXRlZ29yeSkJCQkgICAgICBcCistICAoX19leHRlbnNpb25fXwkJCQkJCQkgICAgICBcCistICAgKHsJCQkJCQkJCQkgICAgICBcCistICAgICBjaGFyICpfX3Jlc3VsdDsJCQkJCQkJICAgICAgXAorLSAgICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChNc2dpZCkpCQkJCQkgICAgICBcCistICAgICAgIHsJCQkJCQkJCSAgICAgIFwKKy0JIHN0YXRpYyBjaGFyICpfX3RyYW5zbGF0aW9uX187CQkJCQkgICAgICBcCistCSBzdGF0aWMgaW50IF9fY2F0YWxvZ19jb3VudGVyX187CQkJCSAgICAgIFwKKy0JIGlmICghIF9fdHJhbnNsYXRpb25fXyB8fCBfX2NhdGFsb2dfY291bnRlcl9fICE9IF9ubF9tc2dfY2F0X2NudHIpICAgIFwKKy0JICAgewkJCQkJCQkJICAgICAgXAorLQkgICAgIF9fdHJhbnNsYXRpb25fXyA9CQkJCQkJICAgICAgXAorLQkgICAgICAgZGNnZXR0ZXh0X18gKERvbWFpbm5hbWUsIE1zZ2lkLCBDYXRlZ29yeSk7CQkgICAgICBcCistCSAgICAgX19jYXRhbG9nX2NvdW50ZXJfXyA9IF9ubF9tc2dfY2F0X2NudHI7CQkJICAgICAgXAorLQkgICB9CQkJCQkJCQkgICAgICBcCistCSBfX3Jlc3VsdCA9IF9fdHJhbnNsYXRpb25fXzsJCQkJCSAgICAgIFwKKy0gICAgICAgfQkJCQkJCQkJICAgICAgXAorLSAgICAgZWxzZQkJCQkJCQkJICAgICAgXAorLSAgICAgICBfX3Jlc3VsdCA9IGRjZ2V0dGV4dF9fIChEb21haW5uYW1lLCBNc2dpZCwgQ2F0ZWdvcnkpOwkJICAgICAgXAorLSAgICAgX19yZXN1bHQ7CQkJCQkJCQkgICAgICBcCistICAgIH0pKQorLSMgIGVuZGlmCistIyBlbmRpZgorLQorLSNlbHNlCistCistIyBkZWZpbmUgZ2V0dGV4dChNc2dpZCkgKE1zZ2lkKQorLSMgZGVmaW5lIGRnZXR0ZXh0KERvbWFpbm5hbWUsIE1zZ2lkKSAoTXNnaWQpCistIyBkZWZpbmUgZGNnZXR0ZXh0KERvbWFpbm5hbWUsIE1zZ2lkLCBDYXRlZ29yeSkgKE1zZ2lkKQorLSMgZGVmaW5lIHRleHRkb21haW4oRG9tYWlubmFtZSkgd2hpbGUgKDApIC8qIG5vdGhpbmcgKi8KKy0jIGRlZmluZSBiaW5kdGV4dGRvbWFpbihEb21haW5uYW1lLCBEaXJuYW1lKSB3aGlsZSAoMCkgLyogbm90aGluZyAqLworLQorLSNlbmRpZgorLQorLS8qIEBAIGJlZ2luIG9mIGVwaWxvZyBAQCAqLworLQorLSNpZmRlZiBfX2NwbHVzcGx1cworLX0KKy0jZW5kaWYKKy0KKy0jZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9saWJnbnVpbnRsLmguaW4JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvbGliZ251aW50bC5oLmluCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDYyNzMxODI0IC0wNDAwCitAQCAtMCwwICsxLDM4MyBAQAorKy8qIE1lc3NhZ2UgY2F0YWxvZ3MgZm9yIGludGVybmF0aW9uYWxpemF0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX0xJQklOVExfSAorKyNkZWZpbmUgX0xJQklOVExfSAkxCisrCisrI2luY2x1ZGUgPGxvY2FsZS5oPgorKworKy8qIFRoZSBMQ19NRVNTQUdFUyBsb2NhbGUgY2F0ZWdvcnkgaXMgdGhlIGNhdGVnb3J5IHVzZWQgYnkgdGhlIGZ1bmN0aW9ucworKyAgIGdldHRleHQoKSBhbmQgZGdldHRleHQoKS4gIEl0IGlzIHNwZWNpZmllZCBpbiBQT1NJWCwgYnV0IG5vdCBpbiBBTlNJIEMuCisrICAgT24gc3lzdGVtcyB0aGF0IGRvbid0IGRlZmluZSBpdCwgdXNlIGFuIGFyYml0cmFyeSB2YWx1ZSBpbnN0ZWFkLgorKyAgIE9uIFNvbGFyaXMsIDxsb2NhbGUuaD4gZGVmaW5lcyBfX0xPQ0FMRV9IIChvciBfTE9DQUxFX0ggaW4gU29sYXJpcyAyLjUpCisrICAgdGhlbiBpbmNsdWRlcyA8bGliaW50bC5oPiAoaS5lLiB0aGlzIGZpbGUhKSBhbmQgdGhlbiBvbmx5IGRlZmluZXMKKysgICBMQ19NRVNTQUdFUy4gIFRvIGF2b2lkIGEgcmVkZWZpbml0aW9uIHdhcm5pbmcsIGRvbid0IGRlZmluZSBMQ19NRVNTQUdFUworKyAgIGluIHRoaXMgY2FzZS4gICovCisrI2lmICFkZWZpbmVkIExDX01FU1NBR0VTICYmICEoZGVmaW5lZCBfX0xPQ0FMRV9IIHx8IChkZWZpbmVkIF9MT0NBTEVfSCAmJiBkZWZpbmVkIF9fc3VuKSkKKysjIGRlZmluZSBMQ19NRVNTQUdFUyAxNzI5CisrI2VuZGlmCisrCisrLyogV2UgZGVmaW5lIGFuIGFkZGl0aW9uYWwgc3ltYm9sIHRvIHNpZ25hbCB0aGF0IHdlIHVzZSB0aGUgR05VCisrICAgaW1wbGVtZW50YXRpb24gb2YgZ2V0dGV4dC4gICovCisrI2RlZmluZSBfX1VTRV9HTlVfR0VUVEVYVCAxCisrCisrLyogUHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3VwcG9ydGVkIGZpbGUgZm9ybWF0cy4gIFJldHVybnMgdGhlCisrICAgbWF4aW11bSBtaW5vciByZXZpc2lvbiBudW1iZXIgc3VwcG9ydGVkIGZvciBhIGdpdmVuIG1ham9yIHJldmlzaW9uLiAgKi8KKysjZGVmaW5lIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKG1ham9yKSBcCisrICAoKG1ham9yKSA9PSAwID8gMSA6IC0xKQorKworKy8qIFJlc29sdmUgYSBwbGF0Zm9ybSBzcGVjaWZpYyBjb25mbGljdCBvbiBESkdQUC4gIEdOVSBnZXR0ZXh0IHRha2VzCisrICAgcHJlY2VkZW5jZSBvdmVyIF9jb25pb19nZXR0ZXh0LiAgKi8KKysjaWZkZWYgX19ESkdQUF9fCisrIyB1bmRlZiBnZXR0ZXh0CisrI2VuZGlmCisrCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrCisrLyogV2UgcmVkaXJlY3QgdGhlIGZ1bmN0aW9ucyB0byB0aG9zZSBwcmVmaXhlZCB3aXRoICJsaWJpbnRsXyIuICBUaGlzIGlzCisrICAgbmVjZXNzYXJ5LCBiZWNhdXNlIHNvbWUgc3lzdGVtcyBkZWZpbmUgZ2V0dGV4dC90ZXh0ZG9tYWluLy4uLiBpbiB0aGUgQworKyAgIGxpYnJhcnkgKG5hbWVseSwgU29sYXJpcyAyLjQgYW5kIG5ld2VyLCBhbmQgR05VIGxpYmMgMi4wIGFuZCBuZXdlcikuCisrICAgSWYgd2UgdXNlZCB0aGUgdW5wcmVmaXhlZCBuYW1lcywgdGhlcmUgd291bGQgYmUgY2FzZXMgd2hlcmUgdGhlCisrICAgZGVmaW5pdGlvbiBpbiB0aGUgQyBsaWJyYXJ5IHdvdWxkIG92ZXJyaWRlIHRoZSBvbmUgaW4gdGhlIGxpYmludGwuc28KKysgICBzaGFyZWQgbGlicmFyeS4gIFJlY2FsbCB0aGF0IG9uIEVMRiBzeXN0ZW1zLCB0aGUgc3ltYm9scyBhcmUgbG9va2VkCisrICAgdXAgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKKysgICAgIDEuIGluIHRoZSBleGVjdXRhYmxlLAorKyAgICAgMi4gaW4gdGhlIHNoYXJlZCBsaWJyYXJpZXMgc3BlY2lmaWVkIG9uIHRoZSBsaW5rIGNvbW1hbmQgbGluZSwgaW4gb3JkZXIsCisrICAgICAzLiBpbiB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBzaGFyZWQgbGlicmFyaWVzIHNwZWNpZmllZCBvbiB0aGUgbGluaworKyAgICAgICAgY29tbWFuZCBsaW5lLAorKyAgICAgNC4gaW4gdGhlIGRsb3BlbigpZWQgc2hhcmVkIGxpYnJhcmllcywgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZQorKyAgICAgICAgZGxvcGVuKCllZC4KKysgICBUaGUgZGVmaW5pdGlvbiBpbiB0aGUgQyBsaWJyYXJ5IHdvdWxkIG92ZXJyaWRlIHRoZSBvbmUgaW4gbGliaW50bC5zbyBpZgorKyAgIGVpdGhlcgorKyAgICAgKiAtbGMgaXMgZ2l2ZW4gb24gdGhlIGxpbmsgY29tbWFuZCBsaW5lIGFuZCAtbGludGwgaXNuJ3QsIG9yCisrICAgICAqIC1sYyBpcyBnaXZlbiBvbiB0aGUgbGluayBjb21tYW5kIGxpbmUgYmVmb3JlIC1saW50bCwgb3IKKysgICAgICogbGliaW50bC5zbyBpcyBhIGRlcGVuZGVuY3kgb2YgYSBkbG9wZW4oKWVkIHNoYXJlZCBsaWJyYXJ5IGJ1dCBub3QKKysgICAgICAgbGlua2VkIHRvIHRoZSBleGVjdXRhYmxlIGF0IGxpbmsgdGltZS4KKysgICBTaW5jZSBTb2xhcmlzIGdldHRleHQoKSBiZWhhdmVzIGRpZmZlcmVudGx5IHRoYW4gR05VIGdldHRleHQoKSwgdGhpcworKyAgIHdvdWxkIGJlIHVuYWNjZXB0YWJsZS4KKysKKysgICBUaGUgcmVkaXJlY3Rpb24gaGFwcGVucyBieSBkZWZhdWx0IHRocm91Z2ggbWFjcm9zIGluIEMsIHNvIHRoYXQgJmdldHRleHQKKysgICBpcyBpbmRlcGVuZGVudCBvZiB0aGUgY29tcGlsYXRpb24gdW5pdCwgYnV0IHRocm91Z2ggaW5saW5lIGZ1bmN0aW9ucyBpbgorKyAgIEMrKywgaW4gb3JkZXIgbm90IHRvIGludGVyZmVyZSB3aXRoIHRoZSBuYW1lIG1hbmdsaW5nIG9mIGNsYXNzIGZpZWxkcyBvcgorKyAgIGNsYXNzIG1ldGhvZHMgY2FsbGVkICdnZXR0ZXh0Jy4gICovCisrCisrLyogVGhlIHVzZXIgY2FuIGRlZmluZSBfSU5UTF9SRURJUkVDVF9JTkxJTkUgb3IgX0lOVExfUkVESVJFQ1RfTUFDUk9TLgorKyAgIElmIGhlIGRvZXNuJ3QsIHdlIGNob29zZSB0aGUgbWV0aG9kLiAgQSB0aGlyZCBwb3NzaWJsZSBtZXRob2QgaXMKKysgICBfSU5UTF9SRURJUkVDVF9BU00sIHN1cHBvcnRlZCBvbmx5IGJ5IEdDQy4gICovCisrI2lmICEoZGVmaW5lZCBfSU5UTF9SRURJUkVDVF9JTkxJTkUgfHwgZGVmaW5lZCBfSU5UTF9SRURJUkVDVF9NQUNST1MpCisrIyBpZiBfX0dOVUNfXyA+PSAyICYmICFkZWZpbmVkIF9fQVBQTEVfQ0NfXyAmJiAhZGVmaW5lZCBfX01JTkdXMzJfXyAmJiAhKF9fR05VQ19fID09IDIgJiYgZGVmaW5lZCBfQUlYKSAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzKQorKyMgIGRlZmluZSBfSU5UTF9SRURJUkVDVF9BU00KKysjIGVsc2UKKysjICBpZmRlZiBfX2NwbHVzcGx1cworKyMgICBkZWZpbmUgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrIyAgZWxzZQorKyMgICBkZWZpbmUgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrLyogQXV4aWxpYXJ5IG1hY3Jvcy4gICovCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX0FTTQorKyMgZGVmaW5lIF9JTlRMX0FTTShjbmFtZSkgX19hc21fXyAoX0lOVExfQVNNTkFNRSAoX19VU0VSX0xBQkVMX1BSRUZJWF9fLCAjY25hbWUpKQorKyMgZGVmaW5lIF9JTlRMX0FTTU5BTUUocHJlZml4LGNuYW1lc3RyaW5nKSBfSU5UTF9TVFJJTkdJRlkgKHByZWZpeCkgY25hbWVzdHJpbmcKKysjIGRlZmluZSBfSU5UTF9TVFJJTkdJRlkocHJlZml4KSAjcHJlZml4CisrI2Vsc2UKKysjIGRlZmluZSBfSU5UTF9BU00oY25hbWUpCisrI2VuZGlmCisrCisrLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKysgICBMQ19NRVNTQUdFUyBsb2NhbGUuICBJZiBub3QgZm91bmQsIHJldHVybnMgTVNHSUQgaXRzZWxmICh0aGUgZGVmYXVsdAorKyAgIHRleHQpLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrZXh0ZXJuIGNoYXIgKmxpYmludGxfZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZCk7Cisrc3RhdGljIGlubGluZSBjaGFyICpnZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkKQorK3sKKysgIHJldHVybiBsaWJpbnRsX2dldHRleHQgKF9fbXNnaWQpOworK30KKysjZWxzZQorKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGRlZmluZSBnZXR0ZXh0IGxpYmludGxfZ2V0dGV4dAorKyNlbmRpZgorK2V4dGVybiBjaGFyICpnZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkKQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfZ2V0dGV4dCk7CisrI2VuZGlmCisrCisrLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50CisrICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrZXh0ZXJuIGNoYXIgKmxpYmludGxfZGdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCk7Cisrc3RhdGljIGlubGluZSBjaGFyICpkZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKQorK3sKKysgIHJldHVybiBsaWJpbnRsX2RnZXR0ZXh0IChfX2RvbWFpbm5hbWUsIF9fbXNnaWQpOworK30KKysjZWxzZQorKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGRlZmluZSBkZ2V0dGV4dCBsaWJpbnRsX2RnZXR0ZXh0CisrI2VuZGlmCisrZXh0ZXJuIGNoYXIgKmRnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQpCisrICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9kZ2V0dGV4dCk7CisrI2VuZGlmCisrCisrLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50IENBVEVHT1JZCisrICAgbG9jYWxlLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrZXh0ZXJuIGNoYXIgKmxpYmludGxfZGNnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQsCisrCQkJCWludCBfX2NhdGVnb3J5KTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKmRjZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkLAorKwkJCSAgICAgICBpbnQgX19jYXRlZ29yeSkKKyt7CisrICByZXR1cm4gbGliaW50bF9kY2dldHRleHQgKF9fZG9tYWlubmFtZSwgX19tc2dpZCwgX19jYXRlZ29yeSk7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGRjZ2V0dGV4dCBsaWJpbnRsX2RjZ2V0dGV4dAorKyNlbmRpZgorK2V4dGVybiBjaGFyICpkY2dldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCwKKysJCQlpbnQgX19jYXRlZ29yeSkKKysgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2RjZ2V0dGV4dCk7CisrI2VuZGlmCisrCisrCisrLyogU2ltaWxhciB0byBgZ2V0dGV4dCcgYnV0IHNlbGVjdCB0aGUgcGx1cmFsIGZvcm0gY29ycmVzcG9uZGluZyB0byB0aGUKKysgICBudW1iZXIgTi4gICovCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorK2V4dGVybiBjaGFyICpsaWJpbnRsX25nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbik7Cisrc3RhdGljIGlubGluZSBjaGFyICpuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKKyt7CisrICByZXR1cm4gbGliaW50bF9uZ2V0dGV4dCAoX19tc2dpZDEsIF9fbXNnaWQyLCBfX24pOworK30KKysjZWxzZQorKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGRlZmluZSBuZ2V0dGV4dCBsaWJpbnRsX25nZXR0ZXh0CisrI2VuZGlmCisrZXh0ZXJuIGNoYXIgKm5nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgX19uKQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfbmdldHRleHQpOworKyNlbmRpZgorKworKy8qIFNpbWlsYXIgdG8gYGRnZXR0ZXh0JyBidXQgc2VsZWN0IHRoZSBwbHVyYWwgZm9ybSBjb3JyZXNwb25kaW5nIHRvIHRoZQorKyAgIG51bWJlciBOLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrZXh0ZXJuIGNoYXIgKmxpYmludGxfZG5nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQxLAorKwkJCQljb25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgX19uKTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKmRuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkMSwKKysJCQkgICAgICAgY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKKyt7CisrICByZXR1cm4gbGliaW50bF9kbmdldHRleHQgKF9fZG9tYWlubmFtZSwgX19tc2dpZDEsIF9fbXNnaWQyLCBfX24pOworK30KKysjZWxzZQorKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGRlZmluZSBkbmdldHRleHQgbGliaW50bF9kbmdldHRleHQKKysjZW5kaWYKKytleHRlcm4gY2hhciAqZG5nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCXVuc2lnbmVkIGxvbmcgaW50IF9fbikKKysgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2RuZ2V0dGV4dCk7CisrI2VuZGlmCisrCisrLyogU2ltaWxhciB0byBgZGNnZXR0ZXh0JyBidXQgc2VsZWN0IHRoZSBwbHVyYWwgZm9ybSBjb3JyZXNwb25kaW5nIHRvIHRoZQorKyAgIG51bWJlciBOLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrZXh0ZXJuIGNoYXIgKmxpYmludGxfZGNuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkgY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCQkgdW5zaWduZWQgbG9uZyBpbnQgX19uLCBpbnQgX19jYXRlZ29yeSk7Cisrc3RhdGljIGlubGluZSBjaGFyICpkY25nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJCWNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkJdW5zaWduZWQgbG9uZyBpbnQgX19uLCBpbnQgX19jYXRlZ29yeSkKKyt7CisrICByZXR1cm4gbGliaW50bF9kY25nZXR0ZXh0IChfX2RvbWFpbm5hbWUsIF9fbXNnaWQxLCBfX21zZ2lkMiwgX19uLCBfX2NhdGVnb3J5KTsKKyt9CisrI2Vsc2UKKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgZGNuZ2V0dGV4dCBsaWJpbnRsX2RjbmdldHRleHQKKysjZW5kaWYKKytleHRlcm4gY2hhciAqZGNuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCSBjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJIHVuc2lnbmVkIGxvbmcgaW50IF9fbiwgaW50IF9fY2F0ZWdvcnkpCisrICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9kY25nZXR0ZXh0KTsKKysjZW5kaWYKKysKKysKKysvKiBTZXQgdGhlIGN1cnJlbnQgZGVmYXVsdCBtZXNzYWdlIGNhdGFsb2cgdG8gRE9NQUlOTkFNRS4KKysgICBJZiBET01BSU5OQU1FIGlzIG51bGwsIHJldHVybiB0aGUgY3VycmVudCBkZWZhdWx0LgorKyAgIElmIERPTUFJTk5BTUUgaXMgIiIsIHJlc2V0IHRvIHRoZSBkZWZhdWx0IG9mICJtZXNzYWdlcyIuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF90ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpOworK3N0YXRpYyBpbmxpbmUgY2hhciAqdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lKQorK3sKKysgIHJldHVybiBsaWJpbnRsX3RleHRkb21haW4gKF9fZG9tYWlubmFtZSk7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIHRleHRkb21haW4gbGliaW50bF90ZXh0ZG9tYWluCisrI2VuZGlmCisrZXh0ZXJuIGNoYXIgKnRleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkKKysgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX3RleHRkb21haW4pOworKyNlbmRpZgorKworKy8qIFNwZWNpZnkgdGhhdCB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgd2lsbCBiZSBmb3VuZAorKyAgIGluIERJUk5BTUUgcmF0aGVyIHRoYW4gaW4gdGhlIHN5c3RlbSBsb2NhbGUgZGF0YSBiYXNlLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrZXh0ZXJuIGNoYXIgKmxpYmludGxfYmluZHRleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJICAgICBjb25zdCBjaGFyICpfX2Rpcm5hbWUpOworK3N0YXRpYyBpbmxpbmUgY2hhciAqYmluZHRleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJICAgIGNvbnN0IGNoYXIgKl9fZGlybmFtZSkKKyt7CisrICByZXR1cm4gbGliaW50bF9iaW5kdGV4dGRvbWFpbiAoX19kb21haW5uYW1lLCBfX2Rpcm5hbWUpOworK30KKysjZWxzZQorKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGRlZmluZSBiaW5kdGV4dGRvbWFpbiBsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluCisrI2VuZGlmCisrZXh0ZXJuIGNoYXIgKmJpbmR0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fZGlybmFtZSkKKysgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluKTsKKysjZW5kaWYKKysKKysvKiBTcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgaW4gd2hpY2ggdGhlIG1lc3NhZ2VzIGZyb20gdGhlCisrICAgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgd2lsbCBiZSByZXR1cm5lZC4gICovCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorK2V4dGVybiBjaGFyICpsaWJpbnRsX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJCQkgICAgICBjb25zdCBjaGFyICpfX2NvZGVzZXQpOworK3N0YXRpYyBpbmxpbmUgY2hhciAqYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJCSAgICAgY29uc3QgY2hhciAqX19jb2Rlc2V0KQorK3sKKysgIHJldHVybiBsaWJpbnRsX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChfX2RvbWFpbm5hbWUsIF9fY29kZXNldCk7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IGxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKKysjZW5kaWYKKytleHRlcm4gY2hhciAqYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJICAgICAgY29uc3QgY2hhciAqX19jb2Rlc2V0KQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQpOworKyNlbmRpZgorKworKworKy8qIFN1cHBvcnQgZm9yIGZvcm1hdCBzdHJpbmdzIHdpdGggcG9zaXRpb25zIGluICpwcmludGYoKSwgZm9sbG93aW5nIHRoZQorKyAgIFBPU0lYL1hTSSBzcGVjaWZpY2F0aW9uLgorKyAgIE5vdGU6IFRoZXNlIHJlcGxhY2VtZW50cyBmb3IgdGhlICpwcmludGYoKSBmdW5jdGlvbnMgYXJlIHZpc2libGUgb25seQorKyAgIGluIHNvdXJjZSBmaWxlcyB0aGF0ICNpbmNsdWRlIDxsaWJpbnRsLmg+IG9yICNpbmNsdWRlICJnZXR0ZXh0LmgiLgorKyAgIFBhY2thZ2VzIHRoYXQgdXNlICpwcmludGYoKSBpbiBzb3VyY2UgZmlsZXMgdGhhdCBkb24ndCByZWZlciB0byBfKCkKKysgICBvciBnZXR0ZXh0KCkgYnV0IGZvciB3aGljaCB0aGUgZm9ybWF0IHN0cmluZyBjb3VsZCBiZSB0aGUgcmV0dXJuIHZhbHVlCisrICAgb2YgXygpIG9yIGdldHRleHQoKSBuZWVkIHRvIGFkZCB0aGlzICNpbmNsdWRlLiAgT2ggd2VsbC4gICovCisrCisrI2lmICFASEFWRV9QT1NJWF9QUklOVEZACisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKy8qIEdldCB2YV9saXN0LiAgKi8KKysjaWYgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSCisrIyBpbmNsdWRlIDxzdGRhcmcuaD4KKysjZWxzZQorKyMgaW5jbHVkZSA8dmFyYXJncy5oPgorKyNlbmRpZgorKworKyN1bmRlZiBmcHJpbnRmCisrI2RlZmluZSBmcHJpbnRmIGxpYmludGxfZnByaW50ZgorK2V4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CisrI3VuZGVmIHZmcHJpbnRmCisrI2RlZmluZSB2ZnByaW50ZiBsaWJpbnRsX3ZmcHJpbnRmCisrZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqLCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworKworKyN1bmRlZiBwcmludGYKKysjZGVmaW5lIHByaW50ZiBsaWJpbnRsX3ByaW50ZgorK2V4dGVybiBpbnQgcHJpbnRmIChjb25zdCBjaGFyICosIC4uLik7CisrI3VuZGVmIHZwcmludGYKKysjZGVmaW5lIHZwcmludGYgbGliaW50bF92cHJpbnRmCisrZXh0ZXJuIGludCB2cHJpbnRmIChjb25zdCBjaGFyICosIHZhX2xpc3QpOworKworKyN1bmRlZiBzcHJpbnRmCisrI2RlZmluZSBzcHJpbnRmIGxpYmludGxfc3ByaW50ZgorK2V4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CisrI3VuZGVmIHZzcHJpbnRmCisrI2RlZmluZSB2c3ByaW50ZiBsaWJpbnRsX3ZzcHJpbnRmCisrZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqLCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworKworKyNpZiBASEFWRV9TTlBSSU5URkAKKysKKysjdW5kZWYgc25wcmludGYKKysjZGVmaW5lIHNucHJpbnRmIGxpYmludGxfc25wcmludGYKKytleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOworKyN1bmRlZiB2c25wcmludGYKKysjZGVmaW5lIHZzbnByaW50ZiBsaWJpbnRsX3ZzbnByaW50ZgorK2V4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKKysKKysjZW5kaWYKKysKKysjaWYgQEhBVkVfQVNQUklOVEZACisrCisrI3VuZGVmIGFzcHJpbnRmCisrI2RlZmluZSBhc3ByaW50ZiBsaWJpbnRsX2FzcHJpbnRmCisrZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKiwgY29uc3QgY2hhciAqLCAuLi4pOworKyN1bmRlZiB2YXNwcmludGYKKysjZGVmaW5lIHZhc3ByaW50ZiBsaWJpbnRsX3Zhc3ByaW50ZgorK2V4dGVybiBpbnQgdmFzcHJpbnRmIChjaGFyICoqLCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworKworKyNlbmRpZgorKworKyNpZiBASEFWRV9XUFJJTlRGQAorKworKyN1bmRlZiBmd3ByaW50ZgorKyNkZWZpbmUgZndwcmludGYgbGliaW50bF9md3ByaW50ZgorK2V4dGVybiBpbnQgZndwcmludGYgKEZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOworKyN1bmRlZiB2ZndwcmludGYKKysjZGVmaW5lIHZmd3ByaW50ZiBsaWJpbnRsX3Zmd3ByaW50ZgorK2V4dGVybiBpbnQgdmZ3cHJpbnRmIChGSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgdmFfbGlzdCk7CisrCisrI3VuZGVmIHdwcmludGYKKysjZGVmaW5lIHdwcmludGYgbGliaW50bF93cHJpbnRmCisrZXh0ZXJuIGludCB3cHJpbnRmIChjb25zdCB3Y2hhcl90ICosIC4uLik7CisrI3VuZGVmIHZ3cHJpbnRmCisrI2RlZmluZSB2d3ByaW50ZiBsaWJpbnRsX3Z3cHJpbnRmCisrZXh0ZXJuIGludCB2d3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqLCB2YV9saXN0KTsKKysKKysjdW5kZWYgc3dwcmludGYKKysjZGVmaW5lIHN3cHJpbnRmIGxpYmludGxfc3dwcmludGYKKytleHRlcm4gaW50IHN3cHJpbnRmICh3Y2hhcl90ICosIHNpemVfdCwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOworKyN1bmRlZiB2c3dwcmludGYKKysjZGVmaW5lIHZzd3ByaW50ZiBsaWJpbnRsX3Zzd3ByaW50ZgorK2V4dGVybiBpbnQgdnN3cHJpbnRmICh3Y2hhcl90ICosIHNpemVfdCwgY29uc3Qgd2NoYXJfdCAqLCB2YV9saXN0KTsKKysKKysjZW5kaWYKKysKKysjZW5kaWYKKysKKysKKysvKiBTdXBwb3J0IGZvciByZWxvY2F0YWJsZSBwYWNrYWdlcy4gICovCisrCisrLyogU2V0cyB0aGUgb3JpZ2luYWwgYW5kIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXggb2YgdGhlIHBhY2thZ2UuCisrICAgUmVsb2NhdGlvbiBzaW1wbHkgcmVwbGFjZXMgYSBwYXRobmFtZSBzdGFydGluZyB3aXRoIHRoZSBvcmlnaW5hbCBwcmVmaXgKKysgICBieSB0aGUgY29ycmVzcG9uZGluZyBwYXRobmFtZSB3aXRoIHRoZSBjdXJyZW50IHByZWZpeCBpbnN0ZWFkLiAgQm90aAorKyAgIHByZWZpeGVzIHNob3VsZCBiZSBkaXJlY3RvcnkgbmFtZXMgd2l0aG91dCB0cmFpbGluZyBzbGFzaCAoaS5lLiB1c2UgIiIKKysgICBpbnN0ZWFkIG9mICIvIikuICAqLworKyNkZWZpbmUgbGliaW50bF9zZXRfcmVsb2NhdGlvbl9wcmVmaXggbGliaW50bF9zZXRfcmVsb2NhdGlvbl9wcmVmaXgKKytleHRlcm4gdm9pZAorKyAgICAgICBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXgsCisrCQkJCSAgICAgIGNvbnN0IGNoYXIgKmN1cnJfcHJlZml4KTsKKysKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIGxpYmludGwuaCAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xpbnV4LW1zZy5zZWQJMTk5OC0wNC0yNiAwOToyMDo1Mi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvbGludXgtbXNnLnNlZAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorQEAgLTEsMTAwICswLDAgQEAKKy0jIHBvMm1zZy5zZWQgLSBDb252ZXJ0IFVuaWZvcnVtIHN0eWxlIC5wbyBmaWxlIHRvIExpbnV4IHN0eWxlIC5tc2cgZmlsZQorLSMgQ29weXJpZ2h0IChDKSAxOTk1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSMgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorLSMKKy0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSMgYW55IGxhdGVyIHZlcnNpb24uCistIworLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0jCistIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCistIworLSMKKy0jIFRoZSBmaXJzdCBkaXJlY3RpdmUgaW4gdGhlIC5tc2cgc2hvdWxkIGJlIHRoZSBkZWZpbml0aW9uIG9mIHRoZQorLSMgbWVzc2FnZSBzZXQgbnVtYmVyLiAgV2UgdXNlIGFsd2F5cyBzZXQgbnVtYmVyIDEuCistIworLTEgeworLSAgaVwKKy0kc2V0IDEgIyBBdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgcG8ybXNnLnNlZAorLSAgaAorLSAgcy8uKi8wLworLSAgeAorLX0KKy0jCistIyBNaXRjaCdzIG9sZCBjYXRhbG9nIGZvcm1hdCBkb2VzIG5vdCBhbGxvdyBjb21tZW50cy4KKy0jCistIyBXZSBjb3B5IHRoZSBvcmlnaW5hbCBtZXNzYWdlIGFzIGEgY29tbWVudCBpbnRvIHRoZSAubXNnIGZpbGUuCistIworLS9ebXNnaWQvIHsKKy0gIHMvbXNnaWRbIAldKiIvLworLSMKKy0jIFRoaXMgZG9lcyBub3Qgd29yayBub3cgd2l0aCB0aGUgbmV3IGZvcm1hdC4KKy0jIC8iJC8hIHsKKy0jICAgcy9cXCQvLworLSMgICBzLyQvIC4uLiAobW9yZSBsaW5lcyBmb2xsb3dpbmcpIi8KKy0jIH0KKy0gIHgKKy0jIFRoZSBmb2xsb3dpbmcgbmljZSBzb2x1dGlvbiBpcyBieQorLSMgQnJ1bm8gPEhhaWJsZUBtYTJzMi5tYXRoZW1hdGlrLnVuaS1rYXJsc3J1aGUuZGU+CistICB0ZAorLSMgSW5jcmVtZW50IGEgZGVjaW1hbCBudW1iZXIgaW4gcGF0dGVybiBzcGFjZS4KKy0jIEZpcnN0IGhpZGUgdHJhaWxpbmcgYDknIGRpZ2l0cy4KKy0gIDpkCistICBzLzlcKF8qXCkkL19cMS8KKy0gIHRkCistIyBBc3N1cmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGlzIGF2YWlsYWJsZS4KKy0gIHMvXlwoXypcKSQvMFwxLworLSMgSW5jcmVtZW50IHRoZSBsYXN0IGRpZ2l0LgorLSAgcy84XChfKlwpJC85XDEvCistICBzLzdcKF8qXCkkLzhcMS8KKy0gIHMvNlwoXypcKSQvN1wxLworLSAgcy81XChfKlwpJC82XDEvCistICBzLzRcKF8qXCkkLzVcMS8KKy0gIHMvM1woXypcKSQvNFwxLworLSAgcy8yXChfKlwpJC8zXDEvCistICBzLzFcKF8qXCkkLzJcMS8KKy0gIHMvMFwoXypcKSQvMVwxLworLSMgQ29udmVydCB0aGUgaGlkZGVuIGA5JyBkaWdpdHMgdG8gYDAncy4KKy0gIHMvXy8wL2cKKy0gIHgKKy0gIEcKKy0gIHMvXCguKlwpIlxuXChbMC05XSpcKS8kICNcMiBPcmlnaW5hbCBNZXNzYWdlOihcMSkvcAorLX0KKy0jCistIyBUaGUgLm1zZyBmaWxlIGNvbnRhaW5zLCBvdGhlciB0aGVuIHRoZSAucG8gZmlsZSwgb25seSB0aGUgdHJhbnNsYXRpb25zCistIyBidXQgZWFjaCBnaXZlbiBhIHVuaXF1ZSBJRC4gIFN0YXJ0aW5nIGZyb20gMSBhbmQgaW5jcmVtZW50aW5nIGJ5IDEgZm9yCistIyBlYWNoIG1lc3NhZ2Ugd2UgYXNzaWduIHRoZW0gdG8gdGhlIG1lc3NhZ2VzLgorLSMgSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIC5wbyBmaWxlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGNhdC1pZC10YmwuYyBmaWxlCistIyAod2l0aCBwby10by10YmwpIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgdXNlZCBoZXJlLiAgKEF0IGxlYXN0IHRoZSBvcmRlcgorLSMgb2YgZGVjbGFyYXRpb25zIG11c3Qgbm90IGJlIGNoYW5nZWQuKQorLSMKKy0vXm1zZ3N0ci8geworLSAgcy9tc2dzdHJbIAldKiJcKC4qXCkiLyMgXDEvCistIyBDbGVhciBzdWJzdGl0dXRpb24gZmxhZy4KKy0gIHRiCistIyBBcHBlbmQgdGhlIG5leHQgbGluZS4KKy0gIDpiCistICBOCistIyBMb29rIHdoZXRoZXIgc2Vjb25kIHBhcnQgaXMgY29udGludWF0aW9uIGxpbmUuCistICBzL1woLipcblwpIlwoLipcKSIvXDFcMi8KKy0jIFllcywgdGhlbiBicmFuY2guCistICB0YQorLSAgUAorLSAgRAorLSMgTm90ZSB0aGF0IEQgaW5jbHVkZXMgYSBqdW1wIHRvIHRoZSBzdGFydCEhCistIyBXZSBmb3VuZCBhIGNvbnRpbnVhdGlvbiBsaW5lLiAgQnV0IGJlZm9yZSBwcmludGluZyBpbnNlcnQgJ1wnLgorLSAgOmEKKy0gIHMvXCguKlwpXChcbi4qXCkvXDFcXFwyLworLSAgUAorLSMgV2UgY2Fubm90IHVzZSBEIGhlcmUuCistICBzLy4qXG5cKC4qXCkvXDEvCistICB0YgorLX0KKy1kCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbG9hZGluZm8uaAkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sb2FkaW5mby5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDY4NzMwOTEyIC0wNDAwCitAQCAtMSw5ICsxLDU0IEBACistI2lmbmRlZiBQQVJBTVMKKy0jIGlmIF9fU1REQ19fCistIyAgZGVmaW5lIFBBUkFNUyhhcmdzKSBhcmdzCistIyBlbHNlCistIyAgZGVmaW5lIFBBUkFNUyhhcmdzKSAoKQorLSMgZW5kaWYKKysvKiBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIENvbnRyaWJ1dGVkIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk2LgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9MT0FESU5GT19ICisrI2RlZmluZSBfTE9BRElORk9fSAkxCisrCisrLyogRGVjbGFyYXRpb25zIG9mIGxvY2FsZSBkZXBlbmRlbnQgY2F0YWxvZyBsb29rdXAgZnVuY3Rpb25zLgorKyAgIEltcGxlbWVudGVkIGluCisrCisrICAgICBsb2NhbGVhbGlhcy5jICAgIFBvc3NpYmx5IHJlcGxhY2UgYSBsb2NhbGUgbmFtZSBieSBhbm90aGVyLgorKyAgICAgZXhwbG9kZW5hbWUuYyAgICBTcGxpdCBhIGxvY2FsZSBuYW1lIGludG8gaXRzIHZhcmlvdXMgZmllbGRzLgorKyAgICAgbDEwbmZsaXN0LmMgICAgICBHZW5lcmF0ZSBhIGxpc3Qgb2YgZmlsZW5hbWVzIG9mIHBvc3NpYmxlIG1lc3NhZ2UgY2F0YWxvZ3MuCisrICAgICBmaW5kZG9tYWluLmMgICAgIEZpbmQgYW5kIG9wZW4gdGhlIHJlbGV2YW50IG1lc3NhZ2UgY2F0YWxvZ3MuCisrCisrICAgVGhlIG1haW4gZnVuY3Rpb24gX25sX2ZpbmRfZG9tYWluKCkgaW4gZmluZGRvbWFpbi5jIGlzIGRlY2xhcmVkCisrICAgaW4gZ2V0dGV4dFAuaC4KKysgKi8KKysKKysjaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCisrIyBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKysjZW5kaWYKKysKKysvKiBUZWxsIHRoZSBjb21waWxlciB3aGVuIGEgY29uZGl0aW9uYWwgb3IgaW50ZWdlciBleHByZXNzaW9uIGlzCisrICAgYWxtb3N0IGFsd2F5cyB0cnVlIG9yIGFsbW9zdCBhbHdheXMgZmFsc2UuICAqLworKyNpZm5kZWYgSEFWRV9CVUlMVElOX0VYUEVDVAorKyMgZGVmaW5lIF9fYnVpbHRpbl9leHBlY3QoZXhwciwgdmFsKSAoZXhwcikKKysjZW5kaWYKKysKKysvKiBTZXBhcmF0b3IgaW4gUEFUSCBsaWtlIGxpc3RzIG9mIHBhdGhuYW1lcy4gICovCisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworKyAgLyogV2luMzIsIE9TLzIsIERPUyAqLworKyMgZGVmaW5lIFBBVEhfU0VQQVJBVE9SICc7JworKyNlbHNlCisrICAvKiBVbml4ICovCisrIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzonCisgI2VuZGlmCisgCisgLyogRW5jb2Rpbmcgb2YgbG9jYWxlIG5hbWUgcGFydHMuICAqLworQEAgLTMyLDI3ICs3Nyw2OSBAQAorIH07CisgCisgCistZXh0ZXJuIGNvbnN0IGNoYXIgKl9ubF9ub3JtYWxpemVfY29kZXNldCBQQVJBTVMgKChjb25zdCBjaGFyICpjb2Rlc2V0LAorLQkJCQkJCSAgc2l6ZV90IG5hbWVfbGVuKSk7CisrLyogTm9ybWFsaXplIGNvZGVzZXQgbmFtZS4gIFRoZXJlIGlzIG5vIHN0YW5kYXJkIGZvciB0aGUgY29kZXNldAorKyAgIG5hbWVzLiAgTm9ybWFsaXphdGlvbiBhbGxvd3MgdGhlIHVzZXIgdG8gdXNlIGFueSBvZiB0aGUgY29tbW9uCisrICAgbmFtZXMuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgaGFzIHRvIGJlCisrICAgZnJlZWQgYnkgdGhlIGNhbGxlci4gICovCisrZXh0ZXJuIGNvbnN0IGNoYXIgKl9ubF9ub3JtYWxpemVfY29kZXNldCAoY29uc3QgY2hhciAqY29kZXNldCwKKysJCQkJCSAgc2l6ZV90IG5hbWVfbGVuKTsKKyAKKysvKiBMb29rdXAgYSBsb2NhbGUgZGVwZW5kZW50IGZpbGUuCisrICAgKkwxME5GSUxFX0xJU1QgZGVub3RlcyBhIHBvb2wgb2YgbG9va3VwIHJlc3VsdHMgb2YgbG9jYWxlIGRlcGVuZGVudAorKyAgIGZpbGVzIG9mIHRoZSBzYW1lIGtpbmQsIHNvcnRlZCBpbiBkZWNyZWFzaW5nIG9yZGVyIG9mIC0+ZmlsZW5hbWUuCisrICAgRElSTElTVCBhbmQgRElSTElTVF9MRU4gYXJlIGFuIGFyZ3ogbGlzdCBvZiBkaXJlY3RvcmllcyBpbiB3aGljaCB0bworKyAgIGxvb2ssIGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIGRpcmVjdG9yeSAoaS5lLiBESVJMSVNUX0xFTiA+IDApLgorKyAgIE1BU0ssIExBTkdVQUdFLCBURVJSSVRPUlksIENPREVTRVQsIE5PUk1BTElaRURfQ09ERVNFVCwgTU9ESUZJRVIsCisrICAgU1BFQ0lBTCwgU1BPTlNPUiwgUkVWSVNJT04gYXJlIHRoZSBwaWVjZXMgb2YgdGhlIGxvY2FsZSBuYW1lLCBhcworKyAgIHByb2R1Y2VkIGJ5IF9ubF9leHBsb2RlX25hbWUoKS4gIEZJTEVOQU1FIGlzIHRoZSBmaWxlbmFtZSBzdWZmaXguCisrICAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbG9va3VwIHJlc3VsdCwgZWl0aGVyIGZvdW5kIGluICpMMTBORklMRV9MSVNULAorKyAgIG9yIC0gaWYgRE9fQUxMT0NBVEUgaXMgbm9uemVybyAtIGZyZXNobHkgYWxsb2NhdGVkLCBvciBwb3NzaWJseSBOVUxMLgorKyAgIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgbm9uLU5VTEwsIGl0IGlzIGFkZGVkIHRvICpMMTBORklMRV9MSVNULCBhbmQKKysgICBpdHMgLT5uZXh0IGZpZWxkIGRlbm90ZXMgdGhlIGNoYWluaW5nIGluc2lkZSAqTDEwTkZJTEVfTElTVCwgYW5kCisrICAgZnVydGhlcm1vcmUgaXRzIC0+c3VjY2Vzc29yW10gZmllbGQgY29udGFpbnMgYSBsaXN0IG9mIG90aGVyIGxvb2t1cAorKyAgIHJlc3VsdHMgZnJvbSB3aGljaCB0aGlzIGxvb2t1cCByZXN1bHQgaW5oZXJpdHMuICAqLworIGV4dGVybiBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoKKy1fbmxfbWFrZV9sMTBuZmxpc3QgUEFSQU1TICgoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKmwxMG5maWxlX2xpc3QsCistCQkJICAgIGNvbnN0IGNoYXIgKmRpcmxpc3QsIHNpemVfdCBkaXJsaXN0X2xlbiwgaW50IG1hc2ssCistCQkJICAgIGNvbnN0IGNoYXIgKmxhbmd1YWdlLCBjb25zdCBjaGFyICp0ZXJyaXRvcnksCistCQkJICAgIGNvbnN0IGNoYXIgKmNvZGVzZXQsCistCQkJICAgIGNvbnN0IGNoYXIgKm5vcm1hbGl6ZWRfY29kZXNldCwKKy0JCQkgICAgY29uc3QgY2hhciAqbW9kaWZpZXIsIGNvbnN0IGNoYXIgKnNwZWNpYWwsCistCQkJICAgIGNvbnN0IGNoYXIgKnNwb25zb3IsIGNvbnN0IGNoYXIgKnJldmlzaW9uLAorLQkJCSAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGRvX2FsbG9jYXRlKSk7CisrX25sX21ha2VfbDEwbmZsaXN0IChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoqbDEwbmZpbGVfbGlzdCwKKysJCSAgICBjb25zdCBjaGFyICpkaXJsaXN0LCBzaXplX3QgZGlybGlzdF9sZW4sIGludCBtYXNrLAorKwkJICAgIGNvbnN0IGNoYXIgKmxhbmd1YWdlLCBjb25zdCBjaGFyICp0ZXJyaXRvcnksCisrCQkgICAgY29uc3QgY2hhciAqY29kZXNldCwgY29uc3QgY2hhciAqbm9ybWFsaXplZF9jb2Rlc2V0LAorKwkJICAgIGNvbnN0IGNoYXIgKm1vZGlmaWVyLCBjb25zdCBjaGFyICpzcGVjaWFsLAorKwkJICAgIGNvbnN0IGNoYXIgKnNwb25zb3IsIGNvbnN0IGNoYXIgKnJldmlzaW9uLAorKwkJICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZG9fYWxsb2NhdGUpOworIAorKy8qIExvb2t1cCB0aGUgcmVhbCBsb2NhbGUgbmFtZSBmb3IgYSBsb2NhbGUgYWxpYXMgTkFNRSwgb3IgTlVMTCBpZgorKyAgIE5BTUUgaXMgbm90IGEgbG9jYWxlIGFsaWFzIChidXQgcG9zc2libHkgYSByZWFsIGxvY2FsZSBuYW1lKS4KKysgICBUaGUgcmV0dXJuIHZhbHVlIGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCBtdXN0IG5vdCBiZSBmcmVlZC4gICovCisrZXh0ZXJuIGNvbnN0IGNoYXIgKl9ubF9leHBhbmRfYWxpYXMgKGNvbnN0IGNoYXIgKm5hbWUpOworIAorLWV4dGVybiBjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIFBBUkFNUyAoKGNvbnN0IGNoYXIgKm5hbWUpKTsKKysvKiBTcGxpdCBhIGxvY2FsZSBuYW1lIE5BTUUgaW50byBpdHMgcGllY2VzOiBsYW5ndWFnZSwgbW9kaWZpZXIsCisrICAgdGVycml0b3J5LCBjb2Rlc2V0LCBzcGVjaWFsLCBzcG9uc29yLCByZXZpc2lvbi4KKysgICBOQU1FIGdldHMgZGVzdHJ1Y3RpdmVseSBtb2RpZmllZDogTlVMIGJ5dGVzIGFyZSBpbnNlcnRlZCBoZXJlIGFuZAorKyAgIHRoZXJlLiAgKkxBTkdVQUdFIGdldHMgYXNzaWduZWQgTkFNRS4gIEVhY2ggb2YgKk1PRElGSUVSLCAqVEVSUklUT1JZLAorKyAgICpDT0RFU0VULCAqU1BFQ0lBTCwgKlNQT05TT1IsICpSRVZJU0lPTiBnZXRzIGFzc2lnbmVkIGVpdGhlciBhCisrICAgcG9pbnRlciBpbnRvIHRoZSBvbGQgTkFNRSBzdHJpbmcsIG9yIE5VTEwuICAqTk9STUFMSVpFRF9DT0RFU0VUCisrICAgZ2V0cyBhc3NpZ25lZCB0aGUgZXhwYW5kZWQgKkNPREVTRVQsIGlmIGl0IGlzIGRpZmZlcmVudCBmcm9tICpDT0RFU0VUOworKyAgIHRoaXMgb25lIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgaGFzIHRvIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuCisrICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIGJpdG1hc2ssIHdoZXJlIGVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIG9uZQorKyAgIGZpbGxlZC1pbiB2YWx1ZToKKysgICAgIFhQR19NT0RJRklFUiwgQ0VOX0FVRElFTkNFICBmb3IgKk1PRElGSUVSLAorKyAgICAgVEVSUklUT1JZICAgICAgICAgICAgICAgICAgIGZvciAqVEVSUklUT1JZLAorKyAgICAgWFBHX0NPREVTRVQgICAgICAgICAgICAgICAgIGZvciAqQ09ERVNFVCwKKysgICAgIFhQR19OT1JNX0NPREVTRVQgICAgICAgICAgICBmb3IgKk5PUk1BTElaRURfQ09ERVNFVCwKKysgICAgIENFTl9TUEVDSUFMICAgICAgICAgICAgICAgICBmb3IgKlNQRUNJQUwsCisrICAgICBDRU5fU1BPTlNPUiAgICAgICAgICAgICAgICAgZm9yICpTUE9OU09SLAorKyAgICAgQ0VOX1JFVklTSU9OICAgICAgICAgICAgICAgIGZvciAqUkVWSVNJT04uCisrICovCisrZXh0ZXJuIGludCBfbmxfZXhwbG9kZV9uYW1lIChjaGFyICpuYW1lLCBjb25zdCBjaGFyICoqbGFuZ3VhZ2UsCisrCQkJICAgICBjb25zdCBjaGFyICoqbW9kaWZpZXIsIGNvbnN0IGNoYXIgKip0ZXJyaXRvcnksCisrCQkJICAgICBjb25zdCBjaGFyICoqY29kZXNldCwKKysJCQkgICAgIGNvbnN0IGNoYXIgKipub3JtYWxpemVkX2NvZGVzZXQsCisrCQkJICAgICBjb25zdCBjaGFyICoqc3BlY2lhbCwgY29uc3QgY2hhciAqKnNwb25zb3IsCisrCQkJICAgICBjb25zdCBjaGFyICoqcmV2aXNpb24pOworIAorLWV4dGVybiBpbnQgX25sX2V4cGxvZGVfbmFtZSBQQVJBTVMgKChjaGFyICpuYW1lLCBjb25zdCBjaGFyICoqbGFuZ3VhZ2UsCistCQkJCSAgICAgY29uc3QgY2hhciAqKm1vZGlmaWVyLAorLQkJCQkgICAgIGNvbnN0IGNoYXIgKip0ZXJyaXRvcnksCistCQkJCSAgICAgY29uc3QgY2hhciAqKmNvZGVzZXQsCistCQkJCSAgICAgY29uc3QgY2hhciAqKm5vcm1hbGl6ZWRfY29kZXNldCwKKy0JCQkJICAgICBjb25zdCBjaGFyICoqc3BlY2lhbCwKKy0JCQkJICAgICBjb25zdCBjaGFyICoqc3BvbnNvciwKKy0JCQkJICAgICBjb25zdCBjaGFyICoqcmV2aXNpb24pKTsKKysvKiBTcGxpdCBhIGxvY2FsZSBuYW1lIE5BTUUgaW50byBhIGxlYWRpbmcgbGFuZ3VhZ2UgcGFydCBhbmQgYWxsIHRoZQorKyAgIHJlc3QuICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGxhbmd1YWdlLAorKyAgIGkuZS4gdG8gdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHJlc3QuICAqLworK2V4dGVybiBjaGFyICpfbmxfZmluZF9sYW5ndWFnZSAoY29uc3QgY2hhciAqbmFtZSk7CisrCisrI2VuZGlmCS8qIGxvYWRpbmZvLmggKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9sb2FkbXNnY2F0LmMJMTk5OC0wNC0yNiAwOToyMjozNy4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvbG9hZG1zZ2NhdC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDczNzMwMTUyIC0wNDAwCitAQCAtMSw0MiArMSw0NTUgQEAKKy0vKiBMb2FkIG5lZWRlZCBtZXNzYWdlIGNhdGFsb2dzCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIExvYWQgbmVlZGVkIG1lc3NhZ2UgY2F0YWxvZ3MuCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrLyogVGVsbCBnbGliYydzIDxzdHJpbmcuaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3IgbWVtcGNweSgpLgorKyAgIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+IGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZQorKyAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KKysjaWZuZGVmIF9HTlVfU09VUkNFCisrIyBkZWZpbmUgX0dOVV9TT1VSQ0UgICAgMQorKyNlbmRpZgorIAorICNpZmRlZiBIQVZFX0NPTkZJR19ICisgIyBpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgCistI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHN0ZGxpYi5oPgorKyNpZmRlZiBfX0dOVUNfXworKyMgdW5kZWYgIGFsbG9jYQorKyMgZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCisrIyBkZWZpbmUgSEFWRV9BTExPQ0EgMQorKyNlbHNlCisrIyBpZmRlZiBfTVNDX1ZFUgorKyMgIGluY2x1ZGUgPG1hbGxvYy5oPgorKyMgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorKyMgZWxzZQorKyMgIGlmIGRlZmluZWQgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCisrIyAgIGluY2x1ZGUgPGFsbG9jYS5oPgorKyMgIGVsc2UKKysjICAgaWZkZWYgX0FJWAorKyAjcHJhZ21hIGFsbG9jYQorKyMgICBlbHNlCisrIyAgICBpZm5kZWYgYWxsb2NhCisrY2hhciAqYWxsb2NhICgpOworKyMgICAgZW5kaWYKKysjICAgZW5kaWYKKysjICBlbmRpZgorKyMgZW5kaWYKKyAjZW5kaWYKKyAKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworICNpZiBkZWZpbmVkIEhBVkVfVU5JU1REX0ggfHwgZGVmaW5lZCBfTElCQworICMgaW5jbHVkZSA8dW5pc3RkLmg+CisgI2VuZGlmCisgCistI2lmIChkZWZpbmVkIEhBVkVfTU1BUCAmJiBkZWZpbmVkIEhBVkVfTVVOTUFQKSB8fCBkZWZpbmVkIF9MSUJDCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxsYW5naW5mby5oPgorKyMgaW5jbHVkZSA8bG9jYWxlLmg+CisrI2VuZGlmCisrCisrI2lmIChkZWZpbmVkIEhBVkVfTU1BUCAmJiBkZWZpbmVkIEhBVkVfTVVOTUFQICYmICFkZWZpbmVkIERJU0FMTE9XX01NQVApIFwKKysgICAgfHwgKGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBfUE9TSVhfTUFQUEVEX0ZJTEVTKQorICMgaW5jbHVkZSA8c3lzL21tYW4uaD4KKysjIHVuZGVmIEhBVkVfTU1BUAorKyMgZGVmaW5lIEhBVkVfTU1BUAkxCisrI2Vsc2UKKysjIHVuZGVmIEhBVkVfTU1BUAorICNlbmRpZgorIAorLSNpbmNsdWRlICJnZXR0ZXh0LmgiCisrI2lmIGRlZmluZWQgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVggfHwgZGVmaW5lZCBfTElCQworKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisrI2VuZGlmCisrI2lmIGRlZmluZWQgSEFWRV9JTlRUWVBFU19IIHx8IGRlZmluZWQgX0xJQkMKKysjIGluY2x1ZGUgPGludHR5cGVzLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgImdtby5oIgorICNpbmNsdWRlICJnZXR0ZXh0UC5oIgorKyNpbmNsdWRlICJoYXNoLXN0cmluZy5oIgorKyNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCisrCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIgorKyNlbmRpZgorKworKy8qIFByb3ZpZGUgZmFsbGJhY2sgdmFsdWVzIGZvciBtYWNyb3MgdGhhdCBvdWdodCB0byBiZSBkZWZpbmVkIGluIDxpbnR0eXBlcy5oPi4KKysgICBOb3RlIHRoYXQgb3VyIGZhbGxiYWNrIHZhbHVlcyBuZWVkIG5vdCBiZSBsaXRlcmFsIHN0cmluZ3MsIGJlY2F1c2Ugd2UgZG9uJ3QKKysgICB1c2UgdGhlbSB3aXRoIHByZXByb2Nlc3NvciBzdHJpbmcgY29uY2F0ZW5hdGlvbi4gICovCisrI2lmICFkZWZpbmVkIFBSSWQ4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkOAorKyMgZGVmaW5lIFBSSWQ4ICJkIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaTgKKysjIGRlZmluZSBQUklpOCAiaSIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJbzggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW84CisrIyBkZWZpbmUgUFJJbzggIm8iCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXU4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1OAorKyMgZGVmaW5lIFBSSXU4ICJ1IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4OCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeDgKKysjIGRlZmluZSBQUkl4OCAieCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJWDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVg4CisrIyBkZWZpbmUgUFJJWDggIlgiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWQxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZDE2CisrIyBkZWZpbmUgUFJJZDE2ICJkIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWkxNgorKyMgZGVmaW5lIFBSSWkxNiAiaSIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJbzE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvMTYKKysjIGRlZmluZSBQUklvMTYgIm8iCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXUxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdTE2CisrIyBkZWZpbmUgUFJJdTE2ICJ1IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4MTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXgxNgorKyMgZGVmaW5lIFBSSXgxNiAieCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJWDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYMTYKKysjIGRlZmluZSBQUklYMTYgIlgiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWQzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZDMyCisrIyBkZWZpbmUgUFJJZDMyICJkIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWkzMgorKyMgZGVmaW5lIFBSSWkzMiAiaSIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJbzMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvMzIKKysjIGRlZmluZSBQUklvMzIgIm8iCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXUzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdTMyCisrIyBkZWZpbmUgUFJJdTMyICJ1IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4MzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXgzMgorKyMgZGVmaW5lIFBSSXgzMiAieCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJWDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYMzIKKysjIGRlZmluZSBQUklYMzIgIlgiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWQ2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZDY0CisrIyBkZWZpbmUgUFJJZDY0IChzaXplb2YgKGxvbmcpID09IDggPyAibGQiIDogImxsZCIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWk2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaTY0CisrIyBkZWZpbmUgUFJJaTY0IChzaXplb2YgKGxvbmcpID09IDggPyAibGkiIDogImxsaSIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW82NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJbzY0CisrIyBkZWZpbmUgUFJJbzY0IChzaXplb2YgKGxvbmcpID09IDggPyAibG8iIDogImxsbyIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXU2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdTY0CisrIyBkZWZpbmUgUFJJdTY0IChzaXplb2YgKGxvbmcpID09IDggPyAibHUiIDogImxsdSIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXg2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeDY0CisrIyBkZWZpbmUgUFJJeDY0IChzaXplb2YgKGxvbmcpID09IDggPyAibHgiIDogImxseCIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVg2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWDY0CisrIyBkZWZpbmUgUFJJWDY0IChzaXplb2YgKGxvbmcpID09IDggPyAibFgiIDogImxsWCIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWRMRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRMRUFTVDgKKysjIGRlZmluZSBQUklkTEVBU1Q4ICJkIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpTEVBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpTEVBU1Q4CisrIyBkZWZpbmUgUFJJaUxFQVNUOCAiaSIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJb0xFQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb0xFQVNUOAorKyMgZGVmaW5lIFBSSW9MRUFTVDggIm8iCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXVMRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVMRUFTVDgKKysjIGRlZmluZSBQUkl1TEVBU1Q4ICJ1IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4TEVBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4TEVBU1Q4CisrIyBkZWZpbmUgUFJJeExFQVNUOCAieCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJWExFQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWExFQVNUOAorKyMgZGVmaW5lIFBSSVhMRUFTVDggIlgiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWRMRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkTEVBU1QxNgorKyMgZGVmaW5lIFBSSWRMRUFTVDE2ICJkIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpTEVBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaUxFQVNUMTYKKysjIGRlZmluZSBQUklpTEVBU1QxNiAiaSIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJb0xFQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9MRUFTVDE2CisrIyBkZWZpbmUgUFJJb0xFQVNUMTYgIm8iCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXVMRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1TEVBU1QxNgorKyMgZGVmaW5lIFBSSXVMRUFTVDE2ICJ1IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4TEVBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeExFQVNUMTYKKysjIGRlZmluZSBQUkl4TEVBU1QxNiAieCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJWExFQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhMRUFTVDE2CisrIyBkZWZpbmUgUFJJWExFQVNUMTYgIlgiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWRMRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkTEVBU1QzMgorKyMgZGVmaW5lIFBSSWRMRUFTVDMyICJkIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpTEVBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaUxFQVNUMzIKKysjIGRlZmluZSBQUklpTEVBU1QzMiAiaSIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJb0xFQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9MRUFTVDMyCisrIyBkZWZpbmUgUFJJb0xFQVNUMzIgIm8iCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXVMRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1TEVBU1QzMgorKyMgZGVmaW5lIFBSSXVMRUFTVDMyICJ1IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4TEVBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeExFQVNUMzIKKysjIGRlZmluZSBQUkl4TEVBU1QzMiAieCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJWExFQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhMRUFTVDMyCisrIyBkZWZpbmUgUFJJWExFQVNUMzIgIlgiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWRMRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkTEVBU1Q2NAorKyMgZGVmaW5lIFBSSWRMRUFTVDY0IFBSSWQ2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpTEVBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaUxFQVNUNjQKKysjIGRlZmluZSBQUklpTEVBU1Q2NCBQUklpNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJb0xFQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9MRUFTVDY0CisrIyBkZWZpbmUgUFJJb0xFQVNUNjQgUFJJbzY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXVMRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1TEVBU1Q2NAorKyMgZGVmaW5lIFBSSXVMRUFTVDY0IFBSSXU2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4TEVBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeExFQVNUNjQKKysjIGRlZmluZSBQUkl4TEVBU1Q2NCBQUkl4NjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJWExFQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhMRUFTVDY0CisrIyBkZWZpbmUgUFJJWExFQVNUNjQgUFJJWDY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWRGQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZEZBU1Q4CisrIyBkZWZpbmUgUFJJZEZBU1Q4ICJkIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpRkFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlGQVNUOAorKyMgZGVmaW5lIFBSSWlGQVNUOCAiaSIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJb0ZBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvRkFTVDgKKysjIGRlZmluZSBQUklvRkFTVDggIm8iCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXVGQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUZBU1Q4CisrIyBkZWZpbmUgUFJJdUZBU1Q4ICJ1IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4RkFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhGQVNUOAorKyMgZGVmaW5lIFBSSXhGQVNUOCAieCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJWEZBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYRkFTVDgKKysjIGRlZmluZSBQUklYRkFTVDggIlgiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWRGQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRGQVNUMTYKKysjIGRlZmluZSBQUklkRkFTVDE2ICJkIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpRkFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpRkFTVDE2CisrIyBkZWZpbmUgUFJJaUZBU1QxNiAiaSIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJb0ZBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb0ZBU1QxNgorKyMgZGVmaW5lIFBSSW9GQVNUMTYgIm8iCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXVGQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVGQVNUMTYKKysjIGRlZmluZSBQUkl1RkFTVDE2ICJ1IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4RkFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4RkFTVDE2CisrIyBkZWZpbmUgUFJJeEZBU1QxNiAieCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJWEZBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWEZBU1QxNgorKyMgZGVmaW5lIFBSSVhGQVNUMTYgIlgiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWRGQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRGQVNUMzIKKysjIGRlZmluZSBQUklkRkFTVDMyICJkIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpRkFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpRkFTVDMyCisrIyBkZWZpbmUgUFJJaUZBU1QzMiAiaSIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJb0ZBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb0ZBU1QzMgorKyMgZGVmaW5lIFBSSW9GQVNUMzIgIm8iCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXVGQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVGQVNUMzIKKysjIGRlZmluZSBQUkl1RkFTVDMyICJ1IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4RkFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4RkFTVDMyCisrIyBkZWZpbmUgUFJJeEZBU1QzMiAieCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJWEZBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWEZBU1QzMgorKyMgZGVmaW5lIFBSSVhGQVNUMzIgIlgiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWRGQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRGQVNUNjQKKysjIGRlZmluZSBQUklkRkFTVDY0IFBSSWQ2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpRkFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpRkFTVDY0CisrIyBkZWZpbmUgUFJJaUZBU1Q2NCBQUklpNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJb0ZBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb0ZBU1Q2NAorKyMgZGVmaW5lIFBSSW9GQVNUNjQgUFJJbzY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXVGQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVGQVNUNjQKKysjIGRlZmluZSBQUkl1RkFTVDY0IFBSSXU2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4RkFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4RkFTVDY0CisrIyBkZWZpbmUgUFJJeEZBU1Q2NCBQUkl4NjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJWEZBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWEZBU1Q2NAorKyMgZGVmaW5lIFBSSVhGQVNUNjQgUFJJWDY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWRNQVggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRNQVgKKysjIGRlZmluZSBQUklkTUFYIChzaXplb2YgKHVpbnRtYXhfdCkgPT0gc2l6ZW9mIChsb25nKSA/ICJsZCIgOiAibGxkIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJaU1BWCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaU1BWAorKyMgZGVmaW5lIFBSSWlNQVggKHNpemVvZiAodWludG1heF90KSA9PSBzaXplb2YgKGxvbmcpID8gImxpIiA6ICJsbGkiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvTUFYIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvTUFYCisrIyBkZWZpbmUgUFJJb01BWCAoc2l6ZW9mICh1aW50bWF4X3QpID09IHNpemVvZiAobG9uZykgPyAibG8iIDogImxsbyIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXVNQVggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVNQVgKKysjIGRlZmluZSBQUkl1TUFYIChzaXplb2YgKHVpbnRtYXhfdCkgPT0gc2l6ZW9mIChsb25nKSA/ICJsdSIgOiAibGx1IikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJeE1BWCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeE1BWAorKyMgZGVmaW5lIFBSSXhNQVggKHNpemVvZiAodWludG1heF90KSA9PSBzaXplb2YgKGxvbmcpID8gImx4IiA6ICJsbHgiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYTUFYIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYTUFYCisrIyBkZWZpbmUgUFJJWE1BWCAoc2l6ZW9mICh1aW50bWF4X3QpID09IHNpemVvZiAobG9uZykgPyAibFgiIDogImxsWCIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWRQVFIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRQVFIKKysjIGRlZmluZSBQUklkUFRSIFwKKysgIChzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChsb25nKSA/ICJsZCIgOiBcCisrICAgc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAoaW50KSA/ICJkIiA6IFwKKysgICAibGxkIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJaVBUUiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaVBUUgorKyMgZGVmaW5lIFBSSWlQVFIgXAorKyAgKHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGxvbmcpID8gImxpIiA6IFwKKysgICBzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChpbnQpID8gImkiIDogXAorKyAgICJsbGkiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvUFRSIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvUFRSCisrIyBkZWZpbmUgUFJJb1BUUiBcCisrICAoc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAobG9uZykgPyAibG8iIDogXAorKyAgIHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGludCkgPyAibyIgOiBcCisrICAgImxsbyIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXVQVFIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVQVFIKKysjIGRlZmluZSBQUkl1UFRSIFwKKysgIChzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChsb25nKSA/ICJsdSIgOiBcCisrICAgc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAoaW50KSA/ICJ1IiA6IFwKKysgICAibGx1IikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJeFBUUiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeFBUUgorKyMgZGVmaW5lIFBSSXhQVFIgXAorKyAgKHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGxvbmcpID8gImx4IiA6IFwKKysgICBzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChpbnQpID8gIngiIDogXAorKyAgICJsbHgiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYUFRSIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYUFRSCisrIyBkZWZpbmUgUFJJWFBUUiBcCisrICAoc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAobG9uZykgPyAibFgiIDogXAorKyAgIHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGludCkgPyAiWCIgOiBcCisrICAgImxsWCIpCisrI2VuZGlmCisgCisgLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworIAorQEAgLTQ0LDcgKzQ1Nyw2IEBACisgLyogUmVuYW1lIHRoZSBub24gSVNPIEMgZnVuY3Rpb25zLiAgVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQKKyAgICBiZWNhdXNlIHNvbWUgSVNPIEMgZnVuY3Rpb25zIHdpbGwgcmVxdWlyZSBsaW5raW5nIHdpdGggdGhpcyBvYmplY3QKKyAgICBmaWxlIGFuZCB0aGUgbmFtZSBzcGFjZSBtdXN0IG5vdCBiZSBwb2xsdXRlZC4gICovCistIyBkZWZpbmUgZnN0YXQgIF9fZnN0YXQKKyAjIGRlZmluZSBvcGVuICAgX19vcGVuCisgIyBkZWZpbmUgY2xvc2UgIF9fY2xvc2UKKyAjIGRlZmluZSByZWFkICAgX19yZWFkCitAQCAtNTIsMzAgKzQ2NCw0NzEgQEAKKyAjIGRlZmluZSBtdW5tYXAgX19tdW5tYXAKKyAjZW5kaWYKKyAKKysvKiBGb3IgdGhvc2UgbG9zaW5nIHN5c3RlbXMgd2hpY2ggZG9uJ3QgaGF2ZSBgYWxsb2NhJyB3ZSBoYXZlIHRvIGFkZAorKyAgIHNvbWUgYWRkaXRpb25hbCBjb2RlIGVtdWxhdGluZyBpdC4gICovCisrI2lmZGVmIEhBVkVfQUxMT0NBCisrIyBkZWZpbmUgZnJlZWEocCkgLyogbm90aGluZyAqLworKyNlbHNlCisrIyBkZWZpbmUgYWxsb2NhKG4pIG1hbGxvYyAobikKKysjIGRlZmluZSBmcmVlYShwKSBmcmVlIChwKQorKyNlbmRpZgorKworKy8qIEZvciBzeXN0ZW1zIHRoYXQgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0ZXh0IGFuZCBiaW5hcnkgSS9PLgorKyAgIE9fQklOQVJZIGlzIHVzdWFsbHkgZGVjbGFyZWQgaW4gPGZjbnRsLmg+LiAqLworKyNpZiAhZGVmaW5lZCBPX0JJTkFSWSAmJiBkZWZpbmVkIF9PX0JJTkFSWQorKyAgLyogRm9yIE1TQy1jb21wYXRpYmxlIGNvbXBpbGVycy4gICovCisrIyBkZWZpbmUgT19CSU5BUlkgX09fQklOQVJZCisrIyBkZWZpbmUgT19URVhUIF9PX1RFWFQKKysjZW5kaWYKKysjaWZkZWYgX19CRU9TX18KKysgIC8qIEJlT1MgNSBoYXMgT19CSU5BUlkgYW5kIE9fVEVYVCwgYnV0IHRoZXkgaGF2ZSBubyBlZmZlY3QuICAqLworKyMgdW5kZWYgT19CSU5BUlkKKysjIHVuZGVmIE9fVEVYVAorKyNlbmRpZgorKy8qIE9uIHJlYXNvbmFibGUgc3lzdGVtcywgYmluYXJ5IEkvTyBpcyB0aGUgZGVmYXVsdC4gICovCisrI2lmbmRlZiBPX0JJTkFSWQorKyMgZGVmaW5lIE9fQklOQVJZIDAKKysjZW5kaWYKKysKKysKKyAvKiBXZSBuZWVkIGEgc2lnbiwgd2hldGhlciBhIG5ldyBjYXRhbG9nIHdhcyBsb2FkZWQsIHdoaWNoIGNhbiBiZSBhc3NvY2lhdGVkCisgICAgd2l0aCBhbGwgdHJhbnNsYXRpb25zLiAgVGhpcyBpcyBpbXBvcnRhbnQgaWYgdGhlIHRyYW5zbGF0aW9ucyBhcmUKKyAgICBjYWNoZWQgYnkgb25lIG9mIEdDQydzIGZlYXR1cmVzLiAgKi8KKy1pbnQgX25sX21zZ19jYXRfY250ciA9IDA7CisraW50IF9ubF9tc2dfY2F0X2NudHI7CisgCisgCisrLyogRXhwYW5kIGEgc3lzdGVtIGRlcGVuZGVudCBzdHJpbmcgc2VnbWVudC4gIFJldHVybiBOVUxMIGlmIHVuc3VwcG9ydGVkLiAgKi8KKytzdGF0aWMgY29uc3QgY2hhciAqCisrZ2V0X3N5c2RlcF9zZWdtZW50X3ZhbHVlIChjb25zdCBjaGFyICpuYW1lKQorK3sKKysgIC8qIFRlc3QgZm9yIGFuIElTTyBDIDk5IHNlY3Rpb24gNy44LjEgZm9ybWF0IHN0cmluZyBkaXJlY3RpdmUuCisrICAgICBTeW50YXg6CisrICAgICBQIFIgSSB7IGQgfCBpIHwgbyB8IHUgfCB4IHwgWCB9CisrICAgICB7IHsgfCBMRUFTVCB8IEZBU1QgfSB7IDggfCAxNiB8IDMyIHwgNjQgfSB8IE1BWCB8IFBUUiB9ICAqLworKyAgLyogV2UgZG9uJ3QgdXNlIGEgdGFibGUgb2YgMTQgdGltZXMgNiAnY29uc3QgY2hhciAqJyBzdHJpbmdzIGhlcmUsIGJlY2F1c2UKKysgICAgIGRhdGEgcmVsb2NhdGlvbnMgY29zdCBzdGFydHVwIHRpbWUuICAqLworKyAgaWYgKG5hbWVbMF0gPT0gJ1AnICYmIG5hbWVbMV0gPT0gJ1InICYmIG5hbWVbMl0gPT0gJ0knKQorKyAgICB7CisrICAgICAgaWYgKG5hbWVbM10gPT0gJ2QnIHx8IG5hbWVbM10gPT0gJ2knIHx8IG5hbWVbM10gPT0gJ28nIHx8IG5hbWVbM10gPT0gJ3UnCisrCSAgfHwgbmFtZVszXSA9PSAneCcgfHwgbmFtZVszXSA9PSAnWCcpCisrCXsKKysJICBpZiAobmFtZVs0XSA9PSAnOCcgJiYgbmFtZVs1XSA9PSAnXDAnKQorKwkgICAgeworKwkgICAgICBpZiAobmFtZVszXSA9PSAnZCcpCisrCQlyZXR1cm4gUFJJZDg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpODsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ28nKQorKwkJcmV0dXJuIFBSSW84OworKwkgICAgICBpZiAobmFtZVszXSA9PSAndScpCisrCQlyZXR1cm4gUFJJdTg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4ODsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ1gnKQorKwkJcmV0dXJuIFBSSVg4OworKwkgICAgICBhYm9ydCAoKTsKKysJICAgIH0KKysJICBpZiAobmFtZVs0XSA9PSAnMScgJiYgbmFtZVs1XSA9PSAnNicgJiYgbmFtZVs2XSA9PSAnXDAnKQorKwkgICAgeworKwkgICAgICBpZiAobmFtZVszXSA9PSAnZCcpCisrCQlyZXR1cm4gUFJJZDE2OworKwkgICAgICBpZiAobmFtZVszXSA9PSAnaScpCisrCQlyZXR1cm4gUFJJaTE2OworKwkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCisrCQlyZXR1cm4gUFJJbzE2OworKwkgICAgICBpZiAobmFtZVszXSA9PSAndScpCisrCQlyZXR1cm4gUFJJdTE2OworKwkgICAgICBpZiAobmFtZVszXSA9PSAneCcpCisrCQlyZXR1cm4gUFJJeDE2OworKwkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQlyZXR1cm4gUFJJWDE2OworKwkgICAgICBhYm9ydCAoKTsKKysJICAgIH0KKysJICBpZiAobmFtZVs0XSA9PSAnMycgJiYgbmFtZVs1XSA9PSAnMicgJiYgbmFtZVs2XSA9PSAnXDAnKQorKwkgICAgeworKwkgICAgICBpZiAobmFtZVszXSA9PSAnZCcpCisrCQlyZXR1cm4gUFJJZDMyOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnaScpCisrCQlyZXR1cm4gUFJJaTMyOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCisrCQlyZXR1cm4gUFJJbzMyOworKwkgICAgICBpZiAobmFtZVszXSA9PSAndScpCisrCQlyZXR1cm4gUFJJdTMyOworKwkgICAgICBpZiAobmFtZVszXSA9PSAneCcpCisrCQlyZXR1cm4gUFJJeDMyOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQlyZXR1cm4gUFJJWDMyOworKwkgICAgICBhYm9ydCAoKTsKKysJICAgIH0KKysJICBpZiAobmFtZVs0XSA9PSAnNicgJiYgbmFtZVs1XSA9PSAnNCcgJiYgbmFtZVs2XSA9PSAnXDAnKQorKwkgICAgeworKwkgICAgICBpZiAobmFtZVszXSA9PSAnZCcpCisrCQlyZXR1cm4gUFJJZDY0OworKwkgICAgICBpZiAobmFtZVszXSA9PSAnaScpCisrCQlyZXR1cm4gUFJJaTY0OworKwkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCisrCQlyZXR1cm4gUFJJbzY0OworKwkgICAgICBpZiAobmFtZVszXSA9PSAndScpCisrCQlyZXR1cm4gUFJJdTY0OworKwkgICAgICBpZiAobmFtZVszXSA9PSAneCcpCisrCQlyZXR1cm4gUFJJeDY0OworKwkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQlyZXR1cm4gUFJJWDY0OworKwkgICAgICBhYm9ydCAoKTsKKysJICAgIH0KKysJICBpZiAobmFtZVs0XSA9PSAnTCcgJiYgbmFtZVs1XSA9PSAnRScgJiYgbmFtZVs2XSA9PSAnQScKKysJICAgICAgJiYgbmFtZVs3XSA9PSAnUycgJiYgbmFtZVs4XSA9PSAnVCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzldID09ICc4JyAmJiBuYW1lWzEwXSA9PSAnXDAnKQorKwkJeworKwkJICBpZiAobmFtZVszXSA9PSAnZCcpCisrCQkgICAgcmV0dXJuIFBSSWRMRUFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUxFQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ28nKQorKwkJICAgIHJldHVybiBQUklvTEVBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAndScpCisrCQkgICAgcmV0dXJuIFBSSXVMRUFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeExFQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ1gnKQorKwkJICAgIHJldHVybiBQUklYTEVBU1Q4OworKwkJICBhYm9ydCAoKTsKKysJCX0KKysJICAgICAgaWYgKG5hbWVbOV0gPT0gJzEnICYmIG5hbWVbMTBdID09ICc2JyAmJiBuYW1lWzExXSA9PSAnXDAnKQorKwkJeworKwkJICBpZiAobmFtZVszXSA9PSAnZCcpCisrCQkgICAgcmV0dXJuIFBSSWRMRUFTVDE2OworKwkJICBpZiAobmFtZVszXSA9PSAnaScpCisrCQkgICAgcmV0dXJuIFBSSWlMRUFTVDE2OworKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisrCQkgICAgcmV0dXJuIFBSSW9MRUFTVDE2OworKwkJICBpZiAobmFtZVszXSA9PSAndScpCisrCQkgICAgcmV0dXJuIFBSSXVMRUFTVDE2OworKwkJICBpZiAobmFtZVszXSA9PSAneCcpCisrCQkgICAgcmV0dXJuIFBSSXhMRUFTVDE2OworKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQkgICAgcmV0dXJuIFBSSVhMRUFTVDE2OworKwkJICBhYm9ydCAoKTsKKysJCX0KKysJICAgICAgaWYgKG5hbWVbOV0gPT0gJzMnICYmIG5hbWVbMTBdID09ICcyJyAmJiBuYW1lWzExXSA9PSAnXDAnKQorKwkJeworKwkJICBpZiAobmFtZVszXSA9PSAnZCcpCisrCQkgICAgcmV0dXJuIFBSSWRMRUFTVDMyOworKwkJICBpZiAobmFtZVszXSA9PSAnaScpCisrCQkgICAgcmV0dXJuIFBSSWlMRUFTVDMyOworKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisrCQkgICAgcmV0dXJuIFBSSW9MRUFTVDMyOworKwkJICBpZiAobmFtZVszXSA9PSAndScpCisrCQkgICAgcmV0dXJuIFBSSXVMRUFTVDMyOworKwkJICBpZiAobmFtZVszXSA9PSAneCcpCisrCQkgICAgcmV0dXJuIFBSSXhMRUFTVDMyOworKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQkgICAgcmV0dXJuIFBSSVhMRUFTVDMyOworKwkJICBhYm9ydCAoKTsKKysJCX0KKysJICAgICAgaWYgKG5hbWVbOV0gPT0gJzYnICYmIG5hbWVbMTBdID09ICc0JyAmJiBuYW1lWzExXSA9PSAnXDAnKQorKwkJeworKwkJICBpZiAobmFtZVszXSA9PSAnZCcpCisrCQkgICAgcmV0dXJuIFBSSWRMRUFTVDY0OworKwkJICBpZiAobmFtZVszXSA9PSAnaScpCisrCQkgICAgcmV0dXJuIFBSSWlMRUFTVDY0OworKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisrCQkgICAgcmV0dXJuIFBSSW9MRUFTVDY0OworKwkJICBpZiAobmFtZVszXSA9PSAndScpCisrCQkgICAgcmV0dXJuIFBSSXVMRUFTVDY0OworKwkJICBpZiAobmFtZVszXSA9PSAneCcpCisrCQkgICAgcmV0dXJuIFBSSXhMRUFTVDY0OworKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQkgICAgcmV0dXJuIFBSSVhMRUFTVDY0OworKwkJICBhYm9ydCAoKTsKKysJCX0KKysJICAgIH0KKysJICBpZiAobmFtZVs0XSA9PSAnRicgJiYgbmFtZVs1XSA9PSAnQScgJiYgbmFtZVs2XSA9PSAnUycKKysJICAgICAgJiYgbmFtZVs3XSA9PSAnVCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzhdID09ICc4JyAmJiBuYW1lWzldID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZEZBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAnaScpCisrCQkgICAgcmV0dXJuIFBSSWlGQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ28nKQorKwkJICAgIHJldHVybiBQUklvRkFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUZBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAneCcpCisrCQkgICAgcmV0dXJuIFBSSXhGQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ1gnKQorKwkJICAgIHJldHVybiBQUklYRkFTVDg7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgICBpZiAobmFtZVs4XSA9PSAnMScgJiYgbmFtZVs5XSA9PSAnNicgJiYgbmFtZVsxMF0gPT0gJ1wwJykKKysJCXsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJICAgIHJldHVybiBQUklkRkFTVDE2OworKwkJICBpZiAobmFtZVszXSA9PSAnaScpCisrCQkgICAgcmV0dXJuIFBSSWlGQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0ZBU1QxNjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJICAgIHJldHVybiBQUkl1RkFTVDE2OworKwkJICBpZiAobmFtZVszXSA9PSAneCcpCisrCQkgICAgcmV0dXJuIFBSSXhGQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWEZBU1QxNjsKKysJCSAgYWJvcnQgKCk7CisrCQl9CisrCSAgICAgIGlmIChuYW1lWzhdID09ICczJyAmJiBuYW1lWzldID09ICcyJyAmJiBuYW1lWzEwXSA9PSAnXDAnKQorKwkJeworKwkJICBpZiAobmFtZVszXSA9PSAnZCcpCisrCQkgICAgcmV0dXJuIFBSSWRGQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUZBU1QzMjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ28nKQorKwkJICAgIHJldHVybiBQUklvRkFTVDMyOworKwkJICBpZiAobmFtZVszXSA9PSAndScpCisrCQkgICAgcmV0dXJuIFBSSXVGQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeEZBU1QzMjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ1gnKQorKwkJICAgIHJldHVybiBQUklYRkFTVDMyOworKwkJICBhYm9ydCAoKTsKKysJCX0KKysJICAgICAgaWYgKG5hbWVbOF0gPT0gJzYnICYmIG5hbWVbOV0gPT0gJzQnICYmIG5hbWVbMTBdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZEZBU1Q2NDsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJICAgIHJldHVybiBQUklpRkFTVDY0OworKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisrCQkgICAgcmV0dXJuIFBSSW9GQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUZBU1Q2NDsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJICAgIHJldHVybiBQUkl4RkFTVDY0OworKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQkgICAgcmV0dXJuIFBSSVhGQVNUNjQ7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICdNJyAmJiBuYW1lWzVdID09ICdBJyAmJiBuYW1lWzZdID09ICdYJworKwkgICAgICAmJiBuYW1lWzddID09ICdcMCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKysJCXJldHVybiBQUklkTUFYOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnaScpCisrCQlyZXR1cm4gUFJJaU1BWDsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ28nKQorKwkJcmV0dXJuIFBSSW9NQVg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKysJCXJldHVybiBQUkl1TUFYOworKwkgICAgICBpZiAobmFtZVszXSA9PSAneCcpCisrCQlyZXR1cm4gUFJJeE1BWDsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ1gnKQorKwkJcmV0dXJuIFBSSVhNQVg7CisrCSAgICAgIGFib3J0ICgpOworKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICdQJyAmJiBuYW1lWzVdID09ICdUJyAmJiBuYW1lWzZdID09ICdSJworKwkgICAgICAmJiBuYW1lWzddID09ICdcMCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKysJCXJldHVybiBQUklkUFRSOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnaScpCisrCQlyZXR1cm4gUFJJaVBUUjsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ28nKQorKwkJcmV0dXJuIFBSSW9QVFI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKysJCXJldHVybiBQUkl1UFRSOworKwkgICAgICBpZiAobmFtZVszXSA9PSAneCcpCisrCQlyZXR1cm4gUFJJeFBUUjsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ1gnKQorKwkJcmV0dXJuIFBSSVhQVFI7CisrCSAgICAgIGFib3J0ICgpOworKwkgICAgfQorKwl9CisrICAgIH0KKysgIC8qIFRlc3QgZm9yIGEgZ2xpYmMgc3BlY2lmaWMgcHJpbnRmKCkgZm9ybWF0IGRpcmVjdGl2ZSBmbGFnLiAgKi8KKysgIGlmIChuYW1lWzBdID09ICdJJyAmJiBuYW1lWzFdID09ICdcMCcpCisrICAgIHsKKysjaWYgZGVmaW5lZCBfTElCQyB8fCBfX0dMSUJDX18gPiAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMikKKysgICAgICAvKiBUaGUgJ0knIGZsYWcsIGluIG51bWVyaWMgZm9ybWF0IGRpcmVjdGl2ZXMsIHJlcGxhY2VzIEFTQ0lJIGRpZ2l0cworKwkgd2l0aCB0aGUgJ291dGRpZ2l0cycgZGVmaW5lZCBpbiB0aGUgTENfQ1RZUEUgbG9jYWxlIGZhY2V0LiAgVGhpcyBpcworKwkgdXNlZCBmb3IgRmFyc2kgKFBlcnNpYW4pIGFuZCBtYXliZSBBcmFiaWMuICAqLworKyAgICAgIHJldHVybiAiSSI7CisrI2Vsc2UKKysgICAgICByZXR1cm4gIiI7CisrI2VuZGlmCisrICAgIH0KKysgIC8qIE90aGVyIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5ncyBhcmUgbm90IHZhbGlkLiAgKi8KKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBJbml0aWFsaXplIHRoZSBjb2Rlc2V0IGRlcGVuZGVudCBwYXJ0cyBvZiBhbiBvcGVuZWQgbWVzc2FnZSBjYXRhbG9nLgorKyAgIFJldHVybiB0aGUgaGVhZGVyIGVudHJ5LiAgKi8KKytjb25zdCBjaGFyICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK19ubF9pbml0X2RvbWFpbl9jb252IChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZSwKKysJCSAgICAgIHN0cnVjdCBsb2FkZWRfZG9tYWluICpkb21haW4sCisrCQkgICAgICBzdHJ1Y3QgYmluZGluZyAqZG9tYWluYmluZGluZykKKyt7CisrICAvKiBGaW5kIG91dCBhYm91dCB0aGUgY2hhcmFjdGVyIHNldCB0aGUgZmlsZSBpcyBlbmNvZGVkIHdpdGguCisrICAgICBUaGlzIGNhbiBiZSBmb3VuZCAoaW4gdGV4dHVhbCBmb3JtKSBpbiB0aGUgZW50cnkgIiIuICBJZiB0aGlzCisrICAgICBlbnRyeSBkb2VzIG5vdCBleGlzdCBvciBpZiB0aGlzIGRvZXMgbm90IGNvbnRhaW4gdGhlIGBjaGFyc2V0PScKKysgICAgIGluZm9ybWF0aW9uLCB3ZSB3aWxsIGFzc3VtZSB0aGUgY2hhcnNldCBtYXRjaGVzIHRoZSBvbmUgdGhlCisrICAgICBjdXJyZW50IGxvY2FsZSBhbmQgd2UgZG9uJ3QgaGF2ZSB0byBwZXJmb3JtIGFueSBjb252ZXJzaW9uLiAgKi8KKysgIGNoYXIgKm51bGxlbnRyeTsKKysgIHNpemVfdCBudWxsZW50cnlsZW47CisrCisrICAvKiBQcmVpbml0aWFsaXplIGZpZWxkcywgdG8gYXZvaWQgcmVjdXJzaW9uIGR1cmluZyBfbmxfZmluZF9tc2cuICAqLworKyAgZG9tYWluLT5jb2Rlc2V0X2NudHIgPQorKyAgICAoZG9tYWluYmluZGluZyAhPSBOVUxMID8gZG9tYWluYmluZGluZy0+Y29kZXNldF9jbnRyIDogMCk7CisrI2lmZGVmIF9MSUJDCisrICBkb21haW4tPmNvbnYgPSAoX19nY29udl90KSAtMTsKKysjZWxzZQorKyMgaWYgSEFWRV9JQ09OVgorKyAgZG9tYWluLT5jb252ID0gKGljb252X3QpIC0xOworKyMgZW5kaWYKKysjZW5kaWYKKysgIGRvbWFpbi0+Y29udl90YWIgPSBOVUxMOworKworKyAgLyogR2V0IHRoZSBoZWFkZXIgZW50cnkuICAqLworKyAgbnVsbGVudHJ5ID0gX25sX2ZpbmRfbXNnIChkb21haW5fZmlsZSwgZG9tYWluYmluZGluZywgIiIsICZudWxsZW50cnlsZW4pOworKworKyAgaWYgKG51bGxlbnRyeSAhPSBOVUxMKQorKyAgICB7CisrI2lmIGRlZmluZWQgX0xJQkMgfHwgSEFWRV9JQ09OVgorKyAgICAgIGNvbnN0IGNoYXIgKmNoYXJzZXRzdHI7CisrCisrICAgICAgY2hhcnNldHN0ciA9IHN0cnN0ciAobnVsbGVudHJ5LCAiY2hhcnNldD0iKTsKKysgICAgICBpZiAoY2hhcnNldHN0ciAhPSBOVUxMKQorKwl7CisrCSAgc2l6ZV90IGxlbjsKKysJICBjaGFyICpjaGFyc2V0OworKwkgIGNvbnN0IGNoYXIgKm91dGNoYXJzZXQ7CisrCisrCSAgY2hhcnNldHN0ciArPSBzdHJsZW4gKCJjaGFyc2V0PSIpOworKwkgIGxlbiA9IHN0cmNzcG4gKGNoYXJzZXRzdHIsICIgXHRcbiIpOworKworKwkgIGNoYXJzZXQgPSAoY2hhciAqKSBhbGxvY2EgKGxlbiArIDEpOworKyMgaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX01FTVBDUFkKKysJICAqKChjaGFyICopIG1lbXBjcHkgKGNoYXJzZXQsIGNoYXJzZXRzdHIsIGxlbikpID0gJ1wwJzsKKysjIGVsc2UKKysJICBtZW1jcHkgKGNoYXJzZXQsIGNoYXJzZXRzdHIsIGxlbik7CisrCSAgY2hhcnNldFtsZW5dID0gJ1wwJzsKKysjIGVuZGlmCisrCisrCSAgLyogVGhlIG91dHB1dCBjaGFyc2V0IHNob3VsZCBub3JtYWxseSBiZSBkZXRlcm1pbmVkIGJ5IHRoZQorKwkgICAgIGxvY2FsZS4gIEJ1dCBzb21ldGltZXMgdGhlIGxvY2FsZSBpcyBub3QgdXNlZCBvciBub3QgY29ycmVjdGx5CisrCSAgICAgc2V0IHVwLCBzbyB3ZSBwcm92aWRlIGEgcG9zc2liaWxpdHkgZm9yIHRoZSB1c2VyIHRvIG92ZXJyaWRlCisrCSAgICAgdGhpcy4gIE1vcmVvdmVyLCB0aGUgdmFsdWUgc3BlY2lmaWVkIHRocm91Z2gKKysJICAgICBiaW5kX3RleHRkb21haW5fY29kZXNldCBvdmVycmlkZXMgYm90aC4gICovCisrCSAgaWYgKGRvbWFpbmJpbmRpbmcgIT0gTlVMTCAmJiBkb21haW5iaW5kaW5nLT5jb2Rlc2V0ICE9IE5VTEwpCisrCSAgICBvdXRjaGFyc2V0ID0gZG9tYWluYmluZGluZy0+Y29kZXNldDsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIG91dGNoYXJzZXQgPSBnZXRlbnYgKCJPVVRQVVRfQ0hBUlNFVCIpOworKwkgICAgICBpZiAob3V0Y2hhcnNldCA9PSBOVUxMIHx8IG91dGNoYXJzZXRbMF0gPT0gJ1wwJykKKysJCXsKKysjIGlmZGVmIF9MSUJDCisrCQkgIG91dGNoYXJzZXQgPSBfTkxfQ1VSUkVOVCAoTENfQ1RZUEUsIENPREVTRVQpOworKyMgZWxzZQorKyMgIGlmIEhBVkVfSUNPTlYKKysJCSAgZXh0ZXJuIGNvbnN0IGNoYXIgKmxvY2FsZV9jaGFyc2V0ICh2b2lkKTsKKysJCSAgb3V0Y2hhcnNldCA9IGxvY2FsZV9jaGFyc2V0ICgpOworKyMgIGVuZGlmCisrIyBlbmRpZgorKwkJfQorKwkgICAgfQorKworKyMgaWZkZWYgX0xJQkMKKysJICAvKiBXZSBhbHdheXMgd2FudCB0byB1c2UgdHJhbnNsaXRlcmF0aW9uLiAgKi8KKysJICBvdXRjaGFyc2V0ID0gbm9ybV9hZGRfc2xhc2hlcyAob3V0Y2hhcnNldCwgIlRSQU5TTElUIik7CisrCSAgY2hhcnNldCA9IG5vcm1fYWRkX3NsYXNoZXMgKGNoYXJzZXQsIE5VTEwpOworKwkgIGlmIChfX2djb252X29wZW4gKG91dGNoYXJzZXQsIGNoYXJzZXQsICZkb21haW4tPmNvbnYsCisrCQkJICAgIEdDT05WX0FWT0lEX05PQ09OVikKKysJICAgICAgIT0gX19HQ09OVl9PSykKKysJICAgIGRvbWFpbi0+Y29udiA9IChfX2djb252X3QpIC0xOworKyMgZWxzZQorKyMgIGlmIEhBVkVfSUNPTlYKKysJICAvKiBXaGVuIHVzaW5nIEdOVSBsaWJjID49IDIuMiBvciBHTlUgbGliaWNvbnYgPj0gMS41LAorKwkgICAgIHdlIHdhbnQgdG8gdXNlIHRyYW5zbGl0ZXJhdGlvbi4gICovCisrIyAgIGlmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMikgfHwgX19HTElCQ19fID4gMiBcCisrICAgICAgIHx8IF9MSUJJQ09OVl9WRVJTSU9OID49IDB4MDEwNQorKwkgIGlmIChzdHJjaHIgKG91dGNoYXJzZXQsICcvJykgPT0gTlVMTCkKKysJICAgIHsKKysJICAgICAgY2hhciAqdG1wOworKworKwkgICAgICBsZW4gPSBzdHJsZW4gKG91dGNoYXJzZXQpOworKwkgICAgICB0bXAgPSAoY2hhciAqKSBhbGxvY2EgKGxlbiArIDEwICsgMSk7CisrCSAgICAgIG1lbWNweSAodG1wLCBvdXRjaGFyc2V0LCBsZW4pOworKwkgICAgICBtZW1jcHkgKHRtcCArIGxlbiwgIi8vVFJBTlNMSVQiLCAxMCArIDEpOworKwkgICAgICBvdXRjaGFyc2V0ID0gdG1wOworKworKwkgICAgICBkb21haW4tPmNvbnYgPSBpY29udl9vcGVuIChvdXRjaGFyc2V0LCBjaGFyc2V0KTsKKysKKysJICAgICAgZnJlZWEgKG91dGNoYXJzZXQpOworKwkgICAgfQorKwkgIGVsc2UKKysjICAgZW5kaWYKKysJICAgIGRvbWFpbi0+Y29udiA9IGljb252X29wZW4gKG91dGNoYXJzZXQsIGNoYXJzZXQpOworKyMgIGVuZGlmCisrIyBlbmRpZgorKworKwkgIGZyZWVhIChjaGFyc2V0KTsKKysJfQorKyNlbmRpZiAvKiBfTElCQyB8fCBIQVZFX0lDT05WICovCisrICAgIH0KKysKKysgIHJldHVybiBudWxsZW50cnk7CisrfQorKworKy8qIEZyZWVzIHRoZSBjb2Rlc2V0IGRlcGVuZGVudCBwYXJ0cyBvZiBhbiBvcGVuZWQgbWVzc2FnZSBjYXRhbG9nLiAgKi8KKyt2b2lkCisraW50ZXJuYWxfZnVuY3Rpb24KKytfbmxfZnJlZV9kb21haW5fY29udiAoc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbikKKyt7CisrICBpZiAoZG9tYWluLT5jb252X3RhYiAhPSBOVUxMICYmIGRvbWFpbi0+Y29udl90YWIgIT0gKGNoYXIgKiopIC0xKQorKyAgICBmcmVlIChkb21haW4tPmNvbnZfdGFiKTsKKysKKysjaWZkZWYgX0xJQkMKKysgIGlmIChkb21haW4tPmNvbnYgIT0gKF9fZ2NvbnZfdCkgLTEpCisrICAgIF9fZ2NvbnZfY2xvc2UgKGRvbWFpbi0+Y29udik7CisrI2Vsc2UKKysjIGlmIEhBVkVfSUNPTlYKKysgIGlmIChkb21haW4tPmNvbnYgIT0gKGljb252X3QpIC0xKQorKyAgICBpY29udl9jbG9zZSAoZG9tYWluLT5jb252KTsKKysjIGVuZGlmCisrI2VuZGlmCisrfQorKworIC8qIExvYWQgdGhlIG1lc3NhZ2UgY2F0YWxvZ3Mgc3BlY2lmaWVkIGJ5IEZJTEVOQU1FLiAgSWYgaXQgaXMgbm8gdmFsaWQKKyAgICBtZXNzYWdlIGNhdGFsb2cgZG8gbm90aGluZy4gICovCisgdm9pZAorLV9ubF9sb2FkX2RvbWFpbiAoZG9tYWluX2ZpbGUpCistICAgICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZTsKKytpbnRlcm5hbF9mdW5jdGlvbgorK19ubF9sb2FkX2RvbWFpbiAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluX2ZpbGUsCisrCQkgc3RydWN0IGJpbmRpbmcgKmRvbWFpbmJpbmRpbmcpCisgeworICAgaW50IGZkOworKyAgc2l6ZV90IHNpemU7CisrI2lmZGVmIF9MSUJDCisrICBzdHJ1Y3Qgc3RhdDY0IHN0OworKyNlbHNlCisgICBzdHJ1Y3Qgc3RhdCBzdDsKKysjZW5kaWYKKyAgIHN0cnVjdCBtb19maWxlX2hlYWRlciAqZGF0YSA9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgLTE7CistI2lmIChkZWZpbmVkIEhBVkVfTU1BUCAmJiBkZWZpbmVkIEhBVkVfTVVOTUFQICYmICFkZWZpbmVkIERJU0FMTE9XX01NQVApIFwKKy0gICAgfHwgZGVmaW5lZCBfTElCQworICAgaW50IHVzZV9tbWFwID0gMDsKKy0jZW5kaWYKKyAgIHN0cnVjdCBsb2FkZWRfZG9tYWluICpkb21haW47CisrICBpbnQgcmV2aXNpb247CisrICBjb25zdCBjaGFyICpudWxsZW50cnk7CisgCisgICBkb21haW5fZmlsZS0+ZGVjaWRlZCA9IDE7CisgICBkb21haW5fZmlsZS0+ZGF0YSA9IE5VTEw7CisgCisrICAvKiBOb3RlIHRoYXQgaXQgd291bGQgYmUgdXNlbGVzcyB0byBzdG9yZSBkb21haW5iaW5kaW5nIGluIGRvbWFpbl9maWxlCisrICAgICBiZWNhdXNlIGRvbWFpbmJpbmRpbmcgbWlnaHQgYmUgPT0gTlVMTCBub3cgYnV0ICE9IE5VTEwgbGF0ZXIgKGFmdGVyCisrICAgICBhIGNhbGwgdG8gYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQpLiAgKi8KKysKKyAgIC8qIElmIHRoZSByZWNvcmQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsaWQgbG9jYWxlIHRoZSBGSUxFTkFNRQorICAgICAgbWlnaHQgYmUgTlVMTC4gIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4KKyAgICAgIHNwZWNpZmljYXRpb24gdGhlIGxvY2FsZSBmaWxlIG5hbWUgaXMgZGlmZmVyZW50IGZvciBYUEcgYW5kIENFTgorQEAgLTg0LDI3ICs5MzcsMzIgQEAKKyAgICAgcmV0dXJuOworIAorICAgLyogVHJ5IHRvIG9wZW4gdGhlIGFkZHJlc3NlZCBmaWxlLiAgKi8KKy0gIGZkID0gb3BlbiAoZG9tYWluX2ZpbGUtPmZpbGVuYW1lLCBPX1JET05MWSk7CisrICBmZCA9IG9wZW4gKGRvbWFpbl9maWxlLT5maWxlbmFtZSwgT19SRE9OTFkgfCBPX0JJTkFSWSk7CisgICBpZiAoZmQgPT0gLTEpCisgICAgIHJldHVybjsKKyAKKyAgIC8qIFdlIG11c3Qga25vdyBhYm91dCB0aGUgc2l6ZSBvZiB0aGUgZmlsZS4gICovCistICBpZiAoZnN0YXQgKGZkLCAmc3QpICE9IDAKKy0gICAgICAmJiBzdC5zdF9zaXplIDwgKG9mZl90KSBzaXplb2YgKHN0cnVjdCBtb19maWxlX2hlYWRlcikpCisrICBpZiAoCisrI2lmZGVmIF9MSUJDCisrICAgICAgX19idWlsdGluX2V4cGVjdCAoZnN0YXQ2NCAoZmQsICZzdCkgIT0gMCwgMCkKKysjZWxzZQorKyAgICAgIF9fYnVpbHRpbl9leHBlY3QgKGZzdGF0IChmZCwgJnN0KSAhPSAwLCAwKQorKyNlbmRpZgorKyAgICAgIHx8IF9fYnVpbHRpbl9leHBlY3QgKChzaXplID0gKHNpemVfdCkgc3Quc3Rfc2l6ZSkgIT0gc3Quc3Rfc2l6ZSwgMCkKKysgICAgICB8fCBfX2J1aWx0aW5fZXhwZWN0IChzaXplIDwgc2l6ZW9mIChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIpLCAwKSkKKyAgICAgeworICAgICAgIC8qIFNvbWV0aGluZyB3ZW50IHdyb25nLiAgKi8KKyAgICAgICBjbG9zZSAoZmQpOworICAgICAgIHJldHVybjsKKyAgICAgfQorIAorLSNpZiAoZGVmaW5lZCBIQVZFX01NQVAgJiYgZGVmaW5lZCBIQVZFX01VTk1BUCAmJiAhZGVmaW5lZCBESVNBTExPV19NTUFQKSBcCistICAgIHx8IGRlZmluZWQgX0xJQkMKKysjaWZkZWYgSEFWRV9NTUFQCisgICAvKiBOb3cgd2UgYXJlIHJlYWR5IHRvIGxvYWQgdGhlIGZpbGUuICBJZiBtbWFwKCkgaXMgYXZhaWxhYmxlIHdlIHRyeQorICAgICAgdGhpcyBmaXJzdC4gIElmIG5vdCBhdmFpbGFibGUgb3IgaXQgZmFpbGVkIHdlIHRyeSB0byBsb2FkIGl0LiAgKi8KKy0gIGRhdGEgPSAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyICopIG1tYXAgKE5VTEwsIHN0LnN0X3NpemUsIFBST1RfUkVBRCwKKysgIGRhdGEgPSAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyICopIG1tYXAgKE5VTEwsIHNpemUsIFBST1RfUkVBRCwKKyAJCQkJCSBNQVBfUFJJVkFURSwgZmQsIDApOworIAorLSAgaWYgKGRhdGEgIT0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSAtMSkKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChkYXRhICE9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgLTEsIDEpKQorICAgICB7CisgICAgICAgLyogbW1hcCgpIGNhbGwgd2FzIHN1Y2Nlc3NmdWwuICAqLworICAgICAgIGNsb3NlIChmZCk7CitAQCAtMTE2LDI0ICs5NzQsMjcgQEAKKyAgICAgIGl0IG1hbnVhbGx5LiAgKi8KKyAgIGlmIChkYXRhID09IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgLTEpCisgICAgIHsKKy0gICAgICBvZmZfdCB0b19yZWFkOworKyAgICAgIHNpemVfdCB0b19yZWFkOworICAgICAgIGNoYXIgKnJlYWRfcHRyOworIAorLSAgICAgIGRhdGEgPSAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyICopIG1hbGxvYyAoc3Quc3Rfc2l6ZSk7CisrICAgICAgZGF0YSA9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgbWFsbG9jIChzaXplKTsKKyAgICAgICBpZiAoZGF0YSA9PSBOVUxMKQorIAlyZXR1cm47CisgCistICAgICAgdG9fcmVhZCA9IHN0LnN0X3NpemU7CisrICAgICAgdG9fcmVhZCA9IHNpemU7CisgICAgICAgcmVhZF9wdHIgPSAoY2hhciAqKSBkYXRhOworICAgICAgIGRvCisgCXsKKyAJICBsb25nIGludCBuYiA9IChsb25nIGludCkgcmVhZCAoZmQsIHJlYWRfcHRyLCB0b19yZWFkKTsKKy0JICBpZiAobmIgPT0gLTEpCisrCSAgaWYgKG5iIDw9IDApCisgCSAgICB7CisrI2lmZGVmIEVJTlRSCisrCSAgICAgIGlmIChuYiA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikKKysJCWNvbnRpbnVlOworKyNlbmRpZgorIAkgICAgICBjbG9zZSAoZmQpOworIAkgICAgICByZXR1cm47CisgCSAgICB9CistCisgCSAgcmVhZF9wdHIgKz0gbmI7CisgCSAgdG9fcmVhZCAtPSBuYjsKKyAJfQorQEAgLTE0NCw0NyArMTAwNSwzNzggQEAKKyAKKyAgIC8qIFVzaW5nIHRoZSBtYWdpYyBudW1iZXIgd2UgY2FuIHRlc3Qgd2hldGhlciBpdCByZWFsbHkgaXMgYSBtZXNzYWdlCisgICAgICBjYXRhbG9nIGZpbGUuICAqLworLSAgaWYgKGRhdGEtPm1hZ2ljICE9IF9NQUdJQyAmJiBkYXRhLT5tYWdpYyAhPSBfTUFHSUNfU1dBUFBFRCkKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChkYXRhLT5tYWdpYyAhPSBfTUFHSUMgJiYgZGF0YS0+bWFnaWMgIT0gX01BR0lDX1NXQVBQRUQsCisrCQkJMCkpCisgICAgIHsKKyAgICAgICAvKiBUaGUgbWFnaWMgbnVtYmVyIGlzIHdyb25nOiBub3QgYSBtZXNzYWdlIGNhdGFsb2cgZmlsZS4gICovCistI2lmIChkZWZpbmVkIEhBVkVfTU1BUCAmJiBkZWZpbmVkIEhBVkVfTVVOTUFQICYmICFkZWZpbmVkIERJU0FMTE9XX01NQVApIFwKKy0gICAgfHwgZGVmaW5lZCBfTElCQworKyNpZmRlZiBIQVZFX01NQVAKKyAgICAgICBpZiAodXNlX21tYXApCistCW11bm1hcCAoKGNhZGRyX3QpIGRhdGEsIHN0LnN0X3NpemUpOworKwltdW5tYXAgKChjYWRkcl90KSBkYXRhLCBzaXplKTsKKyAgICAgICBlbHNlCisgI2VuZGlmCisgCWZyZWUgKGRhdGEpOworICAgICAgIHJldHVybjsKKyAgICAgfQorIAorLSAgZG9tYWluX2ZpbGUtPmRhdGEKKy0gICAgPSAoc3RydWN0IGxvYWRlZF9kb21haW4gKikgbWFsbG9jIChzaXplb2YgKHN0cnVjdCBsb2FkZWRfZG9tYWluKSk7CistICBpZiAoZG9tYWluX2ZpbGUtPmRhdGEgPT0gTlVMTCkKKysgIGRvbWFpbiA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGxvYWRlZF9kb21haW4pKTsKKysgIGlmIChkb21haW4gPT0gTlVMTCkKKyAgICAgcmV0dXJuOworKyAgZG9tYWluX2ZpbGUtPmRhdGEgPSBkb21haW47CisgCistICBkb21haW4gPSAoc3RydWN0IGxvYWRlZF9kb21haW4gKikgZG9tYWluX2ZpbGUtPmRhdGE7CisgICBkb21haW4tPmRhdGEgPSAoY2hhciAqKSBkYXRhOworKyAgZG9tYWluLT51c2VfbW1hcCA9IHVzZV9tbWFwOworKyAgZG9tYWluLT5tbWFwX3NpemUgPSBzaXplOworICAgZG9tYWluLT5tdXN0X3N3YXAgPSBkYXRhLT5tYWdpYyAhPSBfTUFHSUM7CisrICBkb21haW4tPm1hbGxvY2VkID0gTlVMTDsKKyAKKyAgIC8qIEZpbGwgaW4gdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhdmFpbGFibGUgdGFibGVzLiAgKi8KKy0gIHN3aXRjaCAoVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPnJldmlzaW9uKSkKKysgIHJldmlzaW9uID0gVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPnJldmlzaW9uKTsKKysgIC8qIFdlIHN1cHBvcnQgb25seSB0aGUgbWFqb3IgcmV2aXNpb25zIDAgYW5kIDEuICAqLworKyAgc3dpdGNoIChyZXZpc2lvbiA+PiAxNikKKyAgICAgeworICAgICBjYXNlIDA6CisrICAgIGNhc2UgMToKKyAgICAgICBkb21haW4tPm5zdHJpbmdzID0gVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPm5zdHJpbmdzKTsKKy0gICAgICBkb21haW4tPm9yaWdfdGFiID0gKHN0cnVjdCBzdHJpbmdfZGVzYyAqKQorKyAgICAgIGRvbWFpbi0+b3JpZ190YWIgPSAoY29uc3Qgc3RydWN0IHN0cmluZ19kZXNjICopCisgCSgoY2hhciAqKSBkYXRhICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPm9yaWdfdGFiX29mZnNldCkpOworLSAgICAgIGRvbWFpbi0+dHJhbnNfdGFiID0gKHN0cnVjdCBzdHJpbmdfZGVzYyAqKQorKyAgICAgIGRvbWFpbi0+dHJhbnNfdGFiID0gKGNvbnN0IHN0cnVjdCBzdHJpbmdfZGVzYyAqKQorIAkoKGNoYXIgKikgZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT50cmFuc190YWJfb2Zmc2V0KSk7CisgICAgICAgZG9tYWluLT5oYXNoX3NpemUgPSBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+aGFzaF90YWJfc2l6ZSk7CistICAgICAgZG9tYWluLT5oYXNoX3RhYiA9IChubHNfdWludDMyICopCistCSgoY2hhciAqKSBkYXRhICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPmhhc2hfdGFiX29mZnNldCkpOworKyAgICAgIGRvbWFpbi0+aGFzaF90YWIgPQorKwkoZG9tYWluLT5oYXNoX3NpemUgPiAyCisrCSA/IChjb25zdCBubHNfdWludDMyICopCisrCSAgICgoY2hhciAqKSBkYXRhICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPmhhc2hfdGFiX29mZnNldCkpCisrCSA6IE5VTEwpOworKyAgICAgIGRvbWFpbi0+bXVzdF9zd2FwX2hhc2hfdGFiID0gZG9tYWluLT5tdXN0X3N3YXA7CisrCisrICAgICAgLyogTm93IGRpc3BhdGNoIG9uIHRoZSBtaW5vciByZXZpc2lvbi4gICovCisrICAgICAgc3dpdGNoIChyZXZpc2lvbiAmIDB4ZmZmZikKKysJeworKwljYXNlIDA6CisrCSAgZG9tYWluLT5uX3N5c2RlcF9zdHJpbmdzID0gMDsKKysJICBkb21haW4tPm9yaWdfc3lzZGVwX3RhYiA9IE5VTEw7CisrCSAgZG9tYWluLT50cmFuc19zeXNkZXBfdGFiID0gTlVMTDsKKysJICBicmVhazsKKysJY2FzZSAxOgorKwlkZWZhdWx0OgorKwkgIHsKKysJICAgIG5sc191aW50MzIgbl9zeXNkZXBfc3RyaW5nczsKKysKKysJICAgIGlmIChkb21haW4tPmhhc2hfdGFiID09IE5VTEwpCisrCSAgICAgIC8qIFRoaXMgaXMgaW52YWxpZC4gIFRoZXNlIG1pbm9yIHJldmlzaW9ucyBuZWVkIGEgaGFzaCB0YWJsZS4gICovCisrCSAgICAgIGdvdG8gaW52YWxpZDsKKysKKysJICAgIG5fc3lzZGVwX3N0cmluZ3MgPQorKwkgICAgICBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+bl9zeXNkZXBfc3RyaW5ncyk7CisrCSAgICBpZiAobl9zeXNkZXBfc3RyaW5ncyA+IDApCisrCSAgICAgIHsKKysJCW5sc191aW50MzIgbl9zeXNkZXBfc2VnbWVudHM7CisrCQljb25zdCBzdHJ1Y3Qgc3lzZGVwX3NlZ21lbnQgKnN5c2RlcF9zZWdtZW50czsKKysJCWNvbnN0IGNoYXIgKipzeXNkZXBfc2VnbWVudF92YWx1ZXM7CisrCQljb25zdCBubHNfdWludDMyICpvcmlnX3N5c2RlcF90YWI7CisrCQljb25zdCBubHNfdWludDMyICp0cmFuc19zeXNkZXBfdGFiOworKwkJbmxzX3VpbnQzMiBuX2lubWVtX3N5c2RlcF9zdHJpbmdzOworKwkJc2l6ZV90IG1lbW5lZWQ7CisrCQljaGFyICptZW07CisrCQlzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjICppbm1lbV9vcmlnX3N5c2RlcF90YWI7CisrCQlzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjICppbm1lbV90cmFuc19zeXNkZXBfdGFiOworKwkJbmxzX3VpbnQzMiAqaW5tZW1faGFzaF90YWI7CisrCQl1bnNpZ25lZCBpbnQgaSwgajsKKysKKysJCS8qIEdldCB0aGUgdmFsdWVzIG9mIHRoZSBzeXN0ZW0gZGVwZW5kZW50IHNlZ21lbnRzLiAgKi8KKysJCW5fc3lzZGVwX3NlZ21lbnRzID0KKysJCSAgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPm5fc3lzZGVwX3NlZ21lbnRzKTsKKysJCXN5c2RlcF9zZWdtZW50cyA9IChjb25zdCBzdHJ1Y3Qgc3lzZGVwX3NlZ21lbnQgKikKKysJCSAgKChjaGFyICopIGRhdGEKKysJCSAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPnN5c2RlcF9zZWdtZW50c19vZmZzZXQpKTsKKysJCXN5c2RlcF9zZWdtZW50X3ZhbHVlcyA9CisrCQkgIGFsbG9jYSAobl9zeXNkZXBfc2VnbWVudHMgKiBzaXplb2YgKGNvbnN0IGNoYXIgKikpOworKwkJZm9yIChpID0gMDsgaSA8IG5fc3lzZGVwX3NlZ21lbnRzOyBpKyspCisrCQkgIHsKKysJCSAgICBjb25zdCBjaGFyICpuYW1lID0KKysJCSAgICAgIChjaGFyICopIGRhdGEKKysJCSAgICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIHN5c2RlcF9zZWdtZW50c1tpXS5vZmZzZXQpOworKwkJICAgIG5sc191aW50MzIgbmFtZWxlbiA9CisrCQkgICAgICBXIChkb21haW4tPm11c3Rfc3dhcCwgc3lzZGVwX3NlZ21lbnRzW2ldLmxlbmd0aCk7CisrCisrCQkgICAgaWYgKCEobmFtZWxlbiA+IDAgJiYgbmFtZVtuYW1lbGVuIC0gMV0gPT0gJ1wwJykpCisrCQkgICAgICB7CisrCQkJZnJlZWEgKHN5c2RlcF9zZWdtZW50X3ZhbHVlcyk7CisrCQkJZ290byBpbnZhbGlkOworKwkJICAgICAgfQorKworKwkJICAgIHN5c2RlcF9zZWdtZW50X3ZhbHVlc1tpXSA9IGdldF9zeXNkZXBfc2VnbWVudF92YWx1ZSAobmFtZSk7CisrCQkgIH0KKysKKysJCW9yaWdfc3lzZGVwX3RhYiA9IChjb25zdCBubHNfdWludDMyICopCisrCQkgICgoY2hhciAqKSBkYXRhCisrCQkgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5vcmlnX3N5c2RlcF90YWJfb2Zmc2V0KSk7CisrCQl0cmFuc19zeXNkZXBfdGFiID0gKGNvbnN0IG5sc191aW50MzIgKikKKysJCSAgKChjaGFyICopIGRhdGEKKysJCSAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPnRyYW5zX3N5c2RlcF90YWJfb2Zmc2V0KSk7CisrCisrCQkvKiBDb21wdXRlIHRoZSBhbW91bnQgb2YgYWRkaXRpb25hbCBtZW1vcnkgbmVlZGVkIGZvciB0aGUKKysJCSAgIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5ncyBhbmQgdGhlIGF1Z21lbnRlZCBoYXNoIHRhYmxlLgorKwkJICAgQXQgdGhlIHNhbWUgdGltZSwgYWxzbyBkcm9wIHN0cmluZyBwYWlycyB3aGljaCByZWZlciB0bworKwkJICAgYW4gdW5kZWZpbmVkIHN5c3RlbSBkZXBlbmRlbnQgc2VnbWVudC4gICovCisrCQluX2lubWVtX3N5c2RlcF9zdHJpbmdzID0gMDsKKysJCW1lbW5lZWQgPSBkb21haW4tPmhhc2hfc2l6ZSAqIHNpemVvZiAobmxzX3VpbnQzMik7CisrCQlmb3IgKGkgPSAwOyBpIDwgbl9zeXNkZXBfc3RyaW5nczsgaSsrKQorKwkJICB7CisrCQkgICAgaW50IHZhbGlkID0gMTsKKysJCSAgICBzaXplX3QgbmVlZHNbMl07CisrCisrCQkgICAgZm9yIChqID0gMDsgaiA8IDI7IGorKykKKysJCSAgICAgIHsKKysJCQljb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZyAqc3lzZGVwX3N0cmluZyA9CisrCQkJICAoY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmcgKikKKysJCQkgICgoY2hhciAqKSBkYXRhCisrCQkJICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKysJCQkJaiA9PSAwCisrCQkJCT8gb3JpZ19zeXNkZXBfdGFiW2ldCisrCQkJCTogdHJhbnNfc3lzZGVwX3RhYltpXSkpOworKwkJCXNpemVfdCBuZWVkID0gMDsKKysJCQljb25zdCBzdHJ1Y3Qgc2VnbWVudF9wYWlyICpwID0gc3lzZGVwX3N0cmluZy0+c2VnbWVudHM7CisrCisrCQkJaWYgKFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zeXNkZXByZWYpICE9IFNFR01FTlRTX0VORCkKKysJCQkgIGZvciAocCA9IHN5c2RlcF9zdHJpbmctPnNlZ21lbnRzOzsgcCsrKQorKwkJCSAgICB7CisrCQkJICAgICAgbmxzX3VpbnQzMiBzeXNkZXByZWY7CisrCisrCQkJICAgICAgbmVlZCArPSBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c2Vnc2l6ZSk7CisrCisrCQkJICAgICAgc3lzZGVwcmVmID0gVyAoZG9tYWluLT5tdXN0X3N3YXAsIHAtPnN5c2RlcHJlZik7CisrCQkJICAgICAgaWYgKHN5c2RlcHJlZiA9PSBTRUdNRU5UU19FTkQpCisrCQkJCWJyZWFrOworKworKwkJCSAgICAgIGlmIChzeXNkZXByZWYgPj0gbl9zeXNkZXBfc2VnbWVudHMpCisrCQkJCXsKKysJCQkJICAvKiBJbnZhbGlkLiAgKi8KKysJCQkJICBmcmVlYSAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzKTsKKysJCQkJICBnb3RvIGludmFsaWQ7CisrCQkJCX0KKysKKysJCQkgICAgICBpZiAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzW3N5c2RlcHJlZl0gPT0gTlVMTCkKKysJCQkJeworKwkJCQkgIC8qIFRoaXMgcGFydGljdWxhciBzdHJpbmcgcGFpciBpcyBpbnZhbGlkLiAgKi8KKysJCQkJICB2YWxpZCA9IDA7CisrCQkJCSAgYnJlYWs7CisrCQkJCX0KKysKKysJCQkgICAgICBuZWVkICs9IHN0cmxlbiAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzW3N5c2RlcHJlZl0pOworKwkJCSAgICB9CisrCisrCQkJbmVlZHNbal0gPSBuZWVkOworKwkJCWlmICghdmFsaWQpCisrCQkJICBicmVhazsKKysJCSAgICAgIH0KKysKKysJCSAgICBpZiAodmFsaWQpCisrCQkgICAgICB7CisrCQkJbl9pbm1lbV9zeXNkZXBfc3RyaW5ncysrOworKwkJCW1lbW5lZWQgKz0gbmVlZHNbMF0gKyBuZWVkc1sxXTsKKysJCSAgICAgIH0KKysJCSAgfQorKwkJbWVtbmVlZCArPSAyICogbl9pbm1lbV9zeXNkZXBfc3RyaW5ncworKwkJCSAgICogc2l6ZW9mIChzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjKTsKKysKKysJCWlmIChuX2lubWVtX3N5c2RlcF9zdHJpbmdzID4gMCkKKysJCSAgeworKwkJICAgIHVuc2lnbmVkIGludCBrOworKworKwkJICAgIC8qIEFsbG9jYXRlIGFkZGl0aW9uYWwgbWVtb3J5LiAgKi8KKysJCSAgICBtZW0gPSAoY2hhciAqKSBtYWxsb2MgKG1lbW5lZWQpOworKwkJICAgIGlmIChtZW0gPT0gTlVMTCkKKysJCSAgICAgIGdvdG8gaW52YWxpZDsKKysKKysJCSAgICBkb21haW4tPm1hbGxvY2VkID0gbWVtOworKwkJICAgIGlubWVtX29yaWdfc3lzZGVwX3RhYiA9IChzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjICopIG1lbTsKKysJCSAgICBtZW0gKz0gbl9pbm1lbV9zeXNkZXBfc3RyaW5ncworKwkJCSAgICogc2l6ZW9mIChzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjKTsKKysJCSAgICBpbm1lbV90cmFuc19zeXNkZXBfdGFiID0gKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKikgbWVtOworKwkJICAgIG1lbSArPSBuX2lubWVtX3N5c2RlcF9zdHJpbmdzCisrCQkJICAgKiBzaXplb2YgKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MpOworKwkJICAgIGlubWVtX2hhc2hfdGFiID0gKG5sc191aW50MzIgKikgbWVtOworKwkJICAgIG1lbSArPSBkb21haW4tPmhhc2hfc2l6ZSAqIHNpemVvZiAobmxzX3VpbnQzMik7CisrCisrCQkgICAgLyogQ29tcHV0ZSB0aGUgc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzLiAgKi8KKysJCSAgICBrID0gMDsKKysJCSAgICBmb3IgKGkgPSAwOyBpIDwgbl9zeXNkZXBfc3RyaW5nczsgaSsrKQorKwkJICAgICAgeworKwkJCWludCB2YWxpZCA9IDE7CisrCisrCQkJZm9yIChqID0gMDsgaiA8IDI7IGorKykKKysJCQkgIHsKKysJCQkgICAgY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmcgKnN5c2RlcF9zdHJpbmcgPQorKwkJCSAgICAgIChjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZyAqKQorKwkJCSAgICAgICgoY2hhciAqKSBkYXRhCisrCQkJICAgICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCisrCQkJCSAgICBqID09IDAKKysJCQkJICAgID8gb3JpZ19zeXNkZXBfdGFiW2ldCisrCQkJCSAgICA6IHRyYW5zX3N5c2RlcF90YWJbaV0pKTsKKysJCQkgICAgY29uc3Qgc3RydWN0IHNlZ21lbnRfcGFpciAqcCA9CisrCQkJICAgICAgc3lzZGVwX3N0cmluZy0+c2VnbWVudHM7CisrCisrCQkJICAgIGlmIChXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKQorKwkJCQkhPSBTRUdNRU5UU19FTkQpCisrCQkJICAgICAgZm9yIChwID0gc3lzZGVwX3N0cmluZy0+c2VnbWVudHM7OyBwKyspCisrCQkJCXsKKysJCQkJICBubHNfdWludDMyIHN5c2RlcHJlZjsKKysKKysJCQkJICBzeXNkZXByZWYgPQorKwkJCQkgICAgVyAoZG9tYWluLT5tdXN0X3N3YXAsIHAtPnN5c2RlcHJlZik7CisrCQkJCSAgaWYgKHN5c2RlcHJlZiA9PSBTRUdNRU5UU19FTkQpCisrCQkJCSAgICBicmVhazsKKysKKysJCQkJICBpZiAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzW3N5c2RlcHJlZl0gPT0gTlVMTCkKKysJCQkJICAgIHsKKysJCQkJICAgICAgLyogVGhpcyBwYXJ0aWN1bGFyIHN0cmluZyBwYWlyIGlzCisrCQkJCQkgaW52YWxpZC4gICovCisrCQkJCSAgICAgIHZhbGlkID0gMDsKKysJCQkJICAgICAgYnJlYWs7CisrCQkJCSAgICB9CisrCQkJCX0KKysKKysJCQkgICAgaWYgKCF2YWxpZCkKKysJCQkgICAgICBicmVhazsKKysJCQkgIH0KKysKKysJCQlpZiAodmFsaWQpCisrCQkJICB7CisrCQkJICAgIGZvciAoaiA9IDA7IGogPCAyOyBqKyspCisrCQkJICAgICAgeworKwkJCQljb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZyAqc3lzZGVwX3N0cmluZyA9CisrCQkJCSAgKGNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICopCisrCQkJCSAgKChjaGFyICopIGRhdGEKKysJCQkJICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKysJCQkJCWogPT0gMAorKwkJCQkJPyBvcmlnX3N5c2RlcF90YWJbaV0KKysJCQkJCTogdHJhbnNfc3lzZGVwX3RhYltpXSkpOworKwkJCQljb25zdCBjaGFyICpzdGF0aWNfc2VnbWVudHMgPQorKwkJCQkgIChjaGFyICopIGRhdGEKKysJCQkJICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBzeXNkZXBfc3RyaW5nLT5vZmZzZXQpOworKwkJCQljb25zdCBzdHJ1Y3Qgc2VnbWVudF9wYWlyICpwID0KKysJCQkJICBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czsKKysKKysJCQkJLyogQ29uY2F0ZW5hdGUgdGhlIHNlZ21lbnRzLCBhbmQgZmlsbAorKwkJCQkgICBpbm1lbV9vcmlnX3N5c2RlcF90YWJba10gKGZvciBqID09IDApIGFuZAorKwkJCQkgICBpbm1lbV90cmFuc19zeXNkZXBfdGFiW2tdIChmb3IgaiA9PSAxKS4gICovCisrCisrCQkJCXN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKmlubWVtX3RhYl9lbnRyeSA9CisrCQkJCSAgKGogPT0gMAorKwkJCQkgICA/IGlubWVtX29yaWdfc3lzZGVwX3RhYgorKwkJCQkgICA6IGlubWVtX3RyYW5zX3N5c2RlcF90YWIpCisrCQkJCSAgKyBrOworKworKwkJCQlpZiAoVyAoZG9tYWluLT5tdXN0X3N3YXAsIHAtPnN5c2RlcHJlZikKKysJCQkJICAgID09IFNFR01FTlRTX0VORCkKKysJCQkJICB7CisrCQkJCSAgICAvKiBPbmx5IG9uZSBzdGF0aWMgc2VnbWVudC4gICovCisrCQkJCSAgICBpbm1lbV90YWJfZW50cnktPmxlbmd0aCA9CisrCQkJCSAgICAgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zZWdzaXplKTsKKysJCQkJICAgIGlubWVtX3RhYl9lbnRyeS0+cG9pbnRlciA9IHN0YXRpY19zZWdtZW50czsKKysJCQkJICB9CisrCQkJCWVsc2UKKysJCQkJICB7CisrCQkJCSAgICBpbm1lbV90YWJfZW50cnktPnBvaW50ZXIgPSBtZW07CisrCisrCQkJCSAgICBmb3IgKHAgPSBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czs7IHArKykKKysJCQkJICAgICAgeworKwkJCQkJbmxzX3VpbnQzMiBzZWdzaXplID0KKysJCQkJCSAgVyAoZG9tYWluLT5tdXN0X3N3YXAsIHAtPnNlZ3NpemUpOworKwkJCQkJbmxzX3VpbnQzMiBzeXNkZXByZWYgPQorKwkJCQkJICBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKTsKKysJCQkJCXNpemVfdCBuOworKworKwkJCQkJaWYgKHNlZ3NpemUgPiAwKQorKwkJCQkJICB7CisrCQkJCQkgICAgbWVtY3B5IChtZW0sIHN0YXRpY19zZWdtZW50cywgc2Vnc2l6ZSk7CisrCQkJCQkgICAgbWVtICs9IHNlZ3NpemU7CisrCQkJCQkgICAgc3RhdGljX3NlZ21lbnRzICs9IHNlZ3NpemU7CisrCQkJCQkgIH0KKysKKysJCQkJCWlmIChzeXNkZXByZWYgPT0gU0VHTUVOVFNfRU5EKQorKwkJCQkJICBicmVhazsKKysKKysJCQkJCW4gPSBzdHJsZW4gKHN5c2RlcF9zZWdtZW50X3ZhbHVlc1tzeXNkZXByZWZdKTsKKysJCQkJCW1lbWNweSAobWVtLCBzeXNkZXBfc2VnbWVudF92YWx1ZXNbc3lzZGVwcmVmXSwgbik7CisrCQkJCQltZW0gKz0gbjsKKysJCQkJICAgICAgfQorKworKwkJCQkgICAgaW5tZW1fdGFiX2VudHJ5LT5sZW5ndGggPQorKwkJCQkgICAgICBtZW0gLSBpbm1lbV90YWJfZW50cnktPnBvaW50ZXI7CisrCQkJCSAgfQorKwkJCSAgICAgIH0KKysKKysJCQkgICAgaysrOworKwkJCSAgfQorKwkJICAgICAgfQorKwkJICAgIGlmIChrICE9IG5faW5tZW1fc3lzZGVwX3N0cmluZ3MpCisrCQkgICAgICBhYm9ydCAoKTsKKysKKysJCSAgICAvKiBDb21wdXRlIHRoZSBhdWdtZW50ZWQgaGFzaCB0YWJsZS4gICovCisrCQkgICAgZm9yIChpID0gMDsgaSA8IGRvbWFpbi0+aGFzaF9zaXplOyBpKyspCisrCQkgICAgICBpbm1lbV9oYXNoX3RhYltpXSA9CisrCQkJVyAoZG9tYWluLT5tdXN0X3N3YXBfaGFzaF90YWIsIGRvbWFpbi0+aGFzaF90YWJbaV0pOworKwkJICAgIGZvciAoaSA9IDA7IGkgPCBuX2lubWVtX3N5c2RlcF9zdHJpbmdzOyBpKyspCisrCQkgICAgICB7CisrCQkJY29uc3QgY2hhciAqbXNnaWQgPSBpbm1lbV9vcmlnX3N5c2RlcF90YWJbaV0ucG9pbnRlcjsKKysJCQlubHNfdWludDMyIGhhc2hfdmFsID0gaGFzaF9zdHJpbmcgKG1zZ2lkKTsKKysJCQlubHNfdWludDMyIGlkeCA9IGhhc2hfdmFsICUgZG9tYWluLT5oYXNoX3NpemU7CisrCQkJbmxzX3VpbnQzMiBpbmNyID0KKysJCQkgIDEgKyAoaGFzaF92YWwgJSAoZG9tYWluLT5oYXNoX3NpemUgLSAyKSk7CisrCisrCQkJZm9yICg7OykKKysJCQkgIHsKKysJCQkgICAgaWYgKGlubWVtX2hhc2hfdGFiW2lkeF0gPT0gMCkKKysJCQkgICAgICB7CisrCQkJCS8qIEhhc2ggdGFibGUgZW50cnkgaXMgZW1wdHkuICBVc2UgaXQuICAqLworKwkJCQlpbm1lbV9oYXNoX3RhYltpZHhdID0gMSArIGRvbWFpbi0+bnN0cmluZ3MgKyBpOworKwkJCQlicmVhazsKKysJCQkgICAgICB9CisrCisrCQkJICAgIGlmIChpZHggPj0gZG9tYWluLT5oYXNoX3NpemUgLSBpbmNyKQorKwkJCSAgICAgIGlkeCAtPSBkb21haW4tPmhhc2hfc2l6ZSAtIGluY3I7CisrCQkJICAgIGVsc2UKKysJCQkgICAgICBpZHggKz0gaW5jcjsKKysJCQkgIH0KKysJCSAgICAgIH0KKysKKysJCSAgICBkb21haW4tPm5fc3lzZGVwX3N0cmluZ3MgPSBuX2lubWVtX3N5c2RlcF9zdHJpbmdzOworKwkJICAgIGRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiID0gaW5tZW1fb3JpZ19zeXNkZXBfdGFiOworKwkJICAgIGRvbWFpbi0+dHJhbnNfc3lzZGVwX3RhYiA9IGlubWVtX3RyYW5zX3N5c2RlcF90YWI7CisrCisrCQkgICAgZG9tYWluLT5oYXNoX3RhYiA9IGlubWVtX2hhc2hfdGFiOworKwkJICAgIGRvbWFpbi0+bXVzdF9zd2FwX2hhc2hfdGFiID0gMDsKKysJCSAgfQorKwkJZWxzZQorKwkJICB7CisrCQkgICAgZG9tYWluLT5uX3N5c2RlcF9zdHJpbmdzID0gMDsKKysJCSAgICBkb21haW4tPm9yaWdfc3lzZGVwX3RhYiA9IE5VTEw7CisrCQkgICAgZG9tYWluLT50cmFuc19zeXNkZXBfdGFiID0gTlVMTDsKKysJCSAgfQorKworKwkJZnJlZWEgKHN5c2RlcF9zZWdtZW50X3ZhbHVlcyk7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJZG9tYWluLT5uX3N5c2RlcF9zdHJpbmdzID0gMDsKKysJCWRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiID0gTlVMTDsKKysJCWRvbWFpbi0+dHJhbnNfc3lzZGVwX3RhYiA9IE5VTEw7CisrCSAgICAgIH0KKysJICB9CisrCSAgYnJlYWs7CisrCX0KKyAgICAgICBicmVhazsKKyAgICAgZGVmYXVsdDoKKy0gICAgICAvKiBUaGlzIGlzIGFuIGlsbGVnYWwgcmV2aXNpb24uICAqLworLSNpZiAoZGVmaW5lZCBIQVZFX01NQVAgJiYgZGVmaW5lZCBIQVZFX01VTk1BUCAmJiAhZGVmaW5lZCBESVNBTExPV19NTUFQKSBcCistICAgIHx8IGRlZmluZWQgX0xJQkMKKysgICAgICAvKiBUaGlzIGlzIGFuIGludmFsaWQgcmV2aXNpb24uICAqLworKyAgICBpbnZhbGlkOgorKyAgICAgIC8qIFRoaXMgaXMgYW4gaW52YWxpZCAubW8gZmlsZS4gICovCisrICAgICAgaWYgKGRvbWFpbi0+bWFsbG9jZWQpCisrCWZyZWUgKGRvbWFpbi0+bWFsbG9jZWQpOworKyNpZmRlZiBIQVZFX01NQVAKKyAgICAgICBpZiAodXNlX21tYXApCistCW11bm1hcCAoKGNhZGRyX3QpIGRhdGEsIHN0LnN0X3NpemUpOworKwltdW5tYXAgKChjYWRkcl90KSBkYXRhLCBzaXplKTsKKyAgICAgICBlbHNlCisgI2VuZGlmCisgCWZyZWUgKGRhdGEpOworQEAgLTE5Myw3ICsxMzg1LDM2IEBACisgICAgICAgcmV0dXJuOworICAgICB9CisgCistICAvKiBTaG93IHRoYXQgb25lIGRvbWFpbiBpcyBjaGFuZ2VkLiAgVGhpcyBtaWdodCBtYWtlIHNvbWUgY2FjaGVkCistICAgICB0cmFuc2xhdGlvbnMgaW52YWxpZC4gICovCistICArK19ubF9tc2dfY2F0X2NudHI7CisrICAvKiBOb3cgaW5pdGlhbGl6ZSB0aGUgY2hhcmFjdGVyIHNldCBjb252ZXJ0ZXIgZnJvbSB0aGUgY2hhcmFjdGVyIHNldAorKyAgICAgdGhlIGZpbGUgaXMgZW5jb2RlZCB3aXRoIChmb3VuZCBpbiB0aGUgaGVhZGVyIGVudHJ5KSB0byB0aGUgZG9tYWluJ3MKKysgICAgIHNwZWNpZmllZCBjaGFyYWN0ZXIgc2V0IG9yIHRoZSBsb2NhbGUncyBjaGFyYWN0ZXIgc2V0LiAgKi8KKysgIG51bGxlbnRyeSA9IF9ubF9pbml0X2RvbWFpbl9jb252IChkb21haW5fZmlsZSwgZG9tYWluLCBkb21haW5iaW5kaW5nKTsKKysKKysgIC8qIEFsc28gbG9vayBmb3IgYSBwbHVyYWwgc3BlY2lmaWNhdGlvbi4gICovCisrICBFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIChudWxsZW50cnksICZkb21haW4tPnBsdXJhbCwgJmRvbWFpbi0+bnBsdXJhbHMpOworIH0KKysKKysKKysjaWZkZWYgX0xJQkMKKyt2b2lkCisraW50ZXJuYWxfZnVuY3Rpb24KKytfbmxfdW5sb2FkX2RvbWFpbiAoc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbikKKyt7CisrICBpZiAoZG9tYWluLT5wbHVyYWwgIT0gJl9fZ2V0dGV4dF9nZXJtYW5pY19wbHVyYWwpCisrICAgIF9fZ2V0dGV4dF9mcmVlX2V4cCAoZG9tYWluLT5wbHVyYWwpOworKworKyAgX25sX2ZyZWVfZG9tYWluX2NvbnYgKGRvbWFpbik7CisrCisrICBpZiAoZG9tYWluLT5tYWxsb2NlZCkKKysgICAgZnJlZSAoZG9tYWluLT5tYWxsb2NlZCk7CisrCisrIyBpZmRlZiBfUE9TSVhfTUFQUEVEX0ZJTEVTCisrICBpZiAoZG9tYWluLT51c2VfbW1hcCkKKysgICAgbXVubWFwICgoY2FkZHJfdCkgZG9tYWluLT5kYXRhLCBkb21haW4tPm1tYXBfc2l6ZSk7CisrICBlbHNlCisrIyBlbmRpZgkvKiBfUE9TSVhfTUFQUEVEX0ZJTEVTICovCisrICAgIGZyZWUgKCh2b2lkICopIGRvbWFpbi0+ZGF0YSk7CisrCisrICBmcmVlIChkb21haW4pOworK30KKysjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9sb2NhbGNoYXJzZXQuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sb2NhbGNoYXJzZXQuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjQ3ODcyOTM5MiAtMDQwMAorQEAgLTAsMCArMSwzOTggQEAKKysvKiBEZXRlcm1pbmUgYSBjYW5vbmljYWwgbmFtZSBmb3IgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgY2hhcmFjdGVyIGVuY29kaW5nLgorKworKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKy8qIFNwZWNpZmljYXRpb24uICAqLworKyNpbmNsdWRlICJsb2NhbGNoYXJzZXQuaCIKKysKKysjaWYgSEFWRV9TVERERUZfSAorKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2lmIEhBVkVfU1RSSU5HX0gKKysjIGluY2x1ZGUgPHN0cmluZy5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDxzdHJpbmdzLmg+CisrI2VuZGlmCisrI2lmIEhBVkVfU1RETElCX0gKKysjIGluY2x1ZGUgPHN0ZGxpYi5oPgorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXworKyMgdW5kZWYgV0lOMzIgICAvKiBhdm9pZCB3YXJuaW5nIG9uIG1pbmd3MzIgKi8KKysjIGRlZmluZSBXSU4zMgorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9fRU1YX18KKysvKiBBc3N1bWUgRU1YIHByb2dyYW0gcnVucyBvbiBPUy8yLCBldmVuIGlmIGNvbXBpbGVkIHVuZGVyIERPUy4gICovCisrIyBkZWZpbmUgT1MyCisrI2VuZGlmCisrCisrI2lmICFkZWZpbmVkIFdJTjMyCisrIyBpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKysjICBpbmNsdWRlIDxsYW5naW5mby5oPgorKyMgZWxzZQorKyMgIGlmIEhBVkVfU0VUTE9DQUxFCisrIyAgIGluY2x1ZGUgPGxvY2FsZS5oPgorKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbGlmIGRlZmluZWQgV0lOMzIKKysjIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisrIyBpbmNsdWRlIDx3aW5kb3dzLmg+CisrI2VuZGlmCisrI2lmIGRlZmluZWQgT1MyCisrIyBkZWZpbmUgSU5DTF9ET1MKKysjIGluY2x1ZGUgPG9zMi5oPgorKyNlbmRpZgorKworKyNpZiBFTkFCTEVfUkVMT0NBVEFCTEUKKysjIGluY2x1ZGUgInJlbG9jYXRhYmxlLmgiCisrI2Vsc2UKKysjIGRlZmluZSByZWxvY2F0ZShwYXRobmFtZSkgKHBhdGhuYW1lKQorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXyB8fCBkZWZpbmVkIF9fRU1YX18gfHwgZGVmaW5lZCBfX0RKR1BQX18KKysgIC8qIFdpbjMyLCBPUy8yLCBET1MgKi8KKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nIHx8IChDKSA9PSAnXFwnKQorKyNlbmRpZgorKworKyNpZm5kZWYgRElSRUNUT1JZX1NFUEFSQVRPUgorKyMgZGVmaW5lIERJUkVDVE9SWV9TRVBBUkFUT1IgJy8nCisrI2VuZGlmCisrCisrI2lmbmRlZiBJU1NMQVNICisrIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09IERJUkVDVE9SWV9TRVBBUkFUT1IpCisrI2VuZGlmCisrCisrI2lmIEhBVkVfREVDTF9HRVRDX1VOTE9DS0VECisrIyB1bmRlZiBnZXRjCisrIyBkZWZpbmUgZ2V0YyBnZXRjX3VubG9ja2VkCisrI2VuZGlmCisrCisrLyogVGhlIGZvbGxvd2luZyBzdGF0aWMgdmFyaWFibGUgaXMgZGVjbGFyZWQgJ3ZvbGF0aWxlJyB0byBhdm9pZCBhCisrICAgcG9zc2libGUgbXVsdGl0aHJlYWQgcHJvYmxlbSBpbiB0aGUgZnVuY3Rpb24gZ2V0X2NoYXJzZXRfYWxpYXNlcy4gSWYgd2UKKysgICBhcmUgcnVubmluZyBpbiBhIHRocmVhZGVkIGVudmlyb25tZW50LCBhbmQgaWYgdHdvIHRocmVhZHMgaW5pdGlhbGl6ZQorKyAgICdjaGFyc2V0X2FsaWFzZXMnIHNpbXVsdGFuZW91c2x5LCBib3RoIHdpbGwgcHJvZHVjZSB0aGUgc2FtZSB2YWx1ZSwKKysgICBhbmQgZXZlcnl0aGluZyB3aWxsIGJlIG9rIGlmIHRoZSB0d28gYXNzaWdubWVudHMgdG8gJ2NoYXJzZXRfYWxpYXNlcycKKysgICBhcmUgYXRvbWljLiBCdXQgSSBkb24ndCBrbm93IHdoYXQgd2lsbCBoYXBwZW4gaWYgdGhlIHR3byBhc3NpZ25tZW50cyBtaXguICAqLworKyNpZiBfX1NURENfXyAhPSAxCisrIyBkZWZpbmUgdm9sYXRpbGUgLyogZW1wdHkgKi8KKysjZW5kaWYKKysvKiBQb2ludGVyIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhcnNldC5hbGlhcyBmaWxlLCBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuCisrICAgcmVhZCwgZWxzZSBOVUxMLiAgSXRzIGZvcm1hdCBpczoKKysgICBBTElBU18xICdcMCcgQ0FOT05JQ0FMXzEgJ1wwJyAuLi4gQUxJQVNfbiAnXDAnIENBTk9OSUNBTF9uICdcMCcgJ1wwJyAgKi8KKytzdGF0aWMgY29uc3QgY2hhciAqIHZvbGF0aWxlIGNoYXJzZXRfYWxpYXNlczsKKysKKysvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhcnNldC5hbGlhcyBmaWxlLiAgKi8KKytzdGF0aWMgY29uc3QgY2hhciAqCisrZ2V0X2NoYXJzZXRfYWxpYXNlcyAoKQorK3sKKysgIGNvbnN0IGNoYXIgKmNwOworKworKyAgY3AgPSBjaGFyc2V0X2FsaWFzZXM7CisrICBpZiAoY3AgPT0gTlVMTCkKKysgICAgeworKyNpZiAhKGRlZmluZWQgVk1TIHx8IGRlZmluZWQgV0lOMzIpCisrICAgICAgRklMRSAqZnA7CisrICAgICAgY29uc3QgY2hhciAqZGlyID0gcmVsb2NhdGUgKExJQkRJUik7CisrICAgICAgY29uc3QgY2hhciAqYmFzZSA9ICJjaGFyc2V0LmFsaWFzIjsKKysgICAgICBjaGFyICpmaWxlX25hbWU7CisrCisrICAgICAgLyogQ29uY2F0ZW5hdGUgZGlyIGFuZCBiYXNlIGludG8gZnJlc2hseSBhbGxvY2F0ZWQgZmlsZV9uYW1lLiAgKi8KKysgICAgICB7CisrCXNpemVfdCBkaXJfbGVuID0gc3RybGVuIChkaXIpOworKwlzaXplX3QgYmFzZV9sZW4gPSBzdHJsZW4gKGJhc2UpOworKwlpbnQgYWRkX3NsYXNoID0gKGRpcl9sZW4gPiAwICYmICFJU1NMQVNIIChkaXJbZGlyX2xlbiAtIDFdKSk7CisrCWZpbGVfbmFtZSA9IChjaGFyICopIG1hbGxvYyAoZGlyX2xlbiArIGFkZF9zbGFzaCArIGJhc2VfbGVuICsgMSk7CisrCWlmIChmaWxlX25hbWUgIT0gTlVMTCkKKysJICB7CisrCSAgICBtZW1jcHkgKGZpbGVfbmFtZSwgZGlyLCBkaXJfbGVuKTsKKysJICAgIGlmIChhZGRfc2xhc2gpCisrCSAgICAgIGZpbGVfbmFtZVtkaXJfbGVuXSA9IERJUkVDVE9SWV9TRVBBUkFUT1I7CisrCSAgICBtZW1jcHkgKGZpbGVfbmFtZSArIGRpcl9sZW4gKyBhZGRfc2xhc2gsIGJhc2UsIGJhc2VfbGVuICsgMSk7CisrCSAgfQorKyAgICAgIH0KKysKKysgICAgICBpZiAoZmlsZV9uYW1lID09IE5VTEwgfHwgKGZwID0gZm9wZW4gKGZpbGVfbmFtZSwgInIiKSkgPT0gTlVMTCkKKysJLyogT3V0IG9mIG1lbW9yeSBvciBmaWxlIG5vdCBmb3VuZCwgdHJlYXQgaXQgYXMgZW1wdHkuICAqLworKwljcCA9ICIiOworKyAgICAgIGVsc2UKKysJeworKwkgIC8qIFBhcnNlIHRoZSBmaWxlJ3MgY29udGVudHMuICAqLworKwkgIGludCBjOworKwkgIGNoYXIgYnVmMVs1MCsxXTsKKysJICBjaGFyIGJ1ZjJbNTArMV07CisrCSAgY2hhciAqcmVzX3B0ciA9IE5VTEw7CisrCSAgc2l6ZV90IHJlc19zaXplID0gMDsKKysJICBzaXplX3QgbDEsIGwyOworKworKwkgIGZvciAoOzspCisrCSAgICB7CisrCSAgICAgIGMgPSBnZXRjIChmcCk7CisrCSAgICAgIGlmIChjID09IEVPRikKKysJCWJyZWFrOworKwkgICAgICBpZiAoYyA9PSAnXG4nIHx8IGMgPT0gJyAnIHx8IGMgPT0gJ1x0JykKKysJCWNvbnRpbnVlOworKwkgICAgICBpZiAoYyA9PSAnIycpCisrCQl7CisrCQkgIC8qIFNraXAgY29tbWVudCwgdG8gZW5kIG9mIGxpbmUuICAqLworKwkJICBkbworKwkJICAgIGMgPSBnZXRjIChmcCk7CisrCQkgIHdoaWxlICghKGMgPT0gRU9GIHx8IGMgPT0gJ1xuJykpOworKwkJICBpZiAoYyA9PSBFT0YpCisrCQkgICAgYnJlYWs7CisrCQkgIGNvbnRpbnVlOworKwkJfQorKwkgICAgICB1bmdldGMgKGMsIGZwKTsKKysJICAgICAgaWYgKGZzY2FuZiAoZnAsICIlNTBzICU1MHMiLCBidWYxLCBidWYyKSA8IDIpCisrCQlicmVhazsKKysJICAgICAgbDEgPSBzdHJsZW4gKGJ1ZjEpOworKwkgICAgICBsMiA9IHN0cmxlbiAoYnVmMik7CisrCSAgICAgIGlmIChyZXNfc2l6ZSA9PSAwKQorKwkJeworKwkJICByZXNfc2l6ZSA9IGwxICsgMSArIGwyICsgMTsKKysJCSAgcmVzX3B0ciA9IChjaGFyICopIG1hbGxvYyAocmVzX3NpemUgKyAxKTsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICByZXNfc2l6ZSArPSBsMSArIDEgKyBsMiArIDE7CisrCQkgIHJlc19wdHIgPSAoY2hhciAqKSByZWFsbG9jIChyZXNfcHRyLCByZXNfc2l6ZSArIDEpOworKwkJfQorKwkgICAgICBpZiAocmVzX3B0ciA9PSBOVUxMKQorKwkJeworKwkJICAvKiBPdXQgb2YgbWVtb3J5LiAqLworKwkJICByZXNfc2l6ZSA9IDA7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgICBzdHJjcHkgKHJlc19wdHIgKyByZXNfc2l6ZSAtIChsMiArIDEpIC0gKGwxICsgMSksIGJ1ZjEpOworKwkgICAgICBzdHJjcHkgKHJlc19wdHIgKyByZXNfc2l6ZSAtIChsMiArIDEpLCBidWYyKTsKKysJICAgIH0KKysJICBmY2xvc2UgKGZwKTsKKysJICBpZiAocmVzX3NpemUgPT0gMCkKKysJICAgIGNwID0gIiI7CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICAqKHJlc19wdHIgKyByZXNfc2l6ZSkgPSAnXDAnOworKwkgICAgICBjcCA9IHJlc19wdHI7CisrCSAgICB9CisrCX0KKysKKysgICAgICBpZiAoZmlsZV9uYW1lICE9IE5VTEwpCisrCWZyZWUgKGZpbGVfbmFtZSk7CisrCisrI2Vsc2UKKysKKysjIGlmIGRlZmluZWQgVk1TCisrICAgICAgLyogVG8gYXZvaWQgdGhlIHRyb3VibGVzIG9mIGFuIGV4dHJhIGZpbGUgY2hhcnNldC5hbGlhc192bXMgaW4gdGhlCisrCSBzb3VyY2VzIG9mIG1hbnkgR05VIHBhY2thZ2VzLCBzaW1wbHkgaW5saW5lIHRoZSBhbGlhc2VzIGhlcmUuICAqLworKyAgICAgIC8qIFRoZSBsaXN0IG9mIGVuY29kaW5ncyBpcyB0YWtlbiBmcm9tIHRoZSBPcGVuVk1TIDcuMy0xIGRvY3VtZW50YXRpb24KKysJICJDb21wYXEgQyBSdW4tVGltZSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwgZm9yIE9wZW5WTVMgc3lzdGVtcyIKKysJIHNlY3Rpb24gMTAuNyAiSGFuZGxpbmcgRGlmZmVyZW50IENoYXJhY3RlciBTZXRzIi4gICovCisrICAgICAgY3AgPSAiSVNPODg1OS0xIiAiXDAiICJJU08tODg1OS0xIiAiXDAiCisrCSAgICJJU084ODU5LTIiICJcMCIgIklTTy04ODU5LTIiICJcMCIKKysJICAgIklTTzg4NTktNSIgIlwwIiAiSVNPLTg4NTktNSIgIlwwIgorKwkgICAiSVNPODg1OS03IiAiXDAiICJJU08tODg1OS03IiAiXDAiCisrCSAgICJJU084ODU5LTgiICJcMCIgIklTTy04ODU5LTgiICJcMCIKKysJICAgIklTTzg4NTktOSIgIlwwIiAiSVNPLTg4NTktOSIgIlwwIgorKwkgICAvKiBKYXBhbmVzZSAqLworKwkgICAiZXVjSlAiICJcMCIgIkVVQy1KUCIgIlwwIgorKwkgICAiU0pJUyIgIlwwIiAiU0hJRlRfSklTIiAiXDAiCisrCSAgICJERUNLQU5KSSIgIlwwIiAiREVDLUtBTkpJIiAiXDAiCisrCSAgICJTREVDS0FOSkkiICJcMCIgIkVVQy1KUCIgIlwwIgorKwkgICAvKiBDaGluZXNlICovCisrCSAgICJldWNUVyIgIlwwIiAiRVVDLVRXIiAiXDAiCisrCSAgICJERUNIQU5ZVSIgIlwwIiAiREVDLUhBTllVIiAiXDAiCisrCSAgICJERUNIQU5aSSIgIlwwIiAiR0IyMzEyIiAiXDAiCisrCSAgIC8qIEtvcmVhbiAqLworKwkgICAiREVDS09SRUFOIiAiXDAiICJFVUMtS1IiICJcMCI7CisrIyBlbmRpZgorKworKyMgaWYgZGVmaW5lZCBXSU4zMgorKyAgICAgIC8qIFRvIGF2b2lkIHRoZSB0cm91YmxlcyBvZiBpbnN0YWxsaW5nIGEgc2VwYXJhdGUgZmlsZSBpbiB0aGUgc2FtZQorKwkgZGlyZWN0b3J5IGFzIHRoZSBETEwgYW5kIG9mIHJldHJpZXZpbmcgdGhlIERMTCdzIGRpcmVjdG9yeSBhdAorKwkgcnVudGltZSwgc2ltcGx5IGlubGluZSB0aGUgYWxpYXNlcyBoZXJlLiAgKi8KKysKKysgICAgICBjcCA9ICJDUDkzNiIgIlwwIiAiR0JLIiAiXDAiCisrCSAgICJDUDEzNjEiICJcMCIgIkpPSEFCIiAiXDAiCisrCSAgICJDUDIwMTI3IiAiXDAiICJBU0NJSSIgIlwwIgorKwkgICAiQ1AyMDg2NiIgIlwwIiAiS09JOC1SIiAiXDAiCisrCSAgICJDUDIxODY2IiAiXDAiICJLT0k4LVJVIiAiXDAiCisrCSAgICJDUDI4NTkxIiAiXDAiICJJU08tODg1OS0xIiAiXDAiCisrCSAgICJDUDI4NTkyIiAiXDAiICJJU08tODg1OS0yIiAiXDAiCisrCSAgICJDUDI4NTkzIiAiXDAiICJJU08tODg1OS0zIiAiXDAiCisrCSAgICJDUDI4NTk0IiAiXDAiICJJU08tODg1OS00IiAiXDAiCisrCSAgICJDUDI4NTk1IiAiXDAiICJJU08tODg1OS01IiAiXDAiCisrCSAgICJDUDI4NTk2IiAiXDAiICJJU08tODg1OS02IiAiXDAiCisrCSAgICJDUDI4NTk3IiAiXDAiICJJU08tODg1OS03IiAiXDAiCisrCSAgICJDUDI4NTk4IiAiXDAiICJJU08tODg1OS04IiAiXDAiCisrCSAgICJDUDI4NTk5IiAiXDAiICJJU08tODg1OS05IiAiXDAiCisrCSAgICJDUDI4NjA1IiAiXDAiICJJU08tODg1OS0xNSIgIlwwIjsKKysjIGVuZGlmCisrI2VuZGlmCisrCisrICAgICAgY2hhcnNldF9hbGlhc2VzID0gY3A7CisrICAgIH0KKysKKysgIHJldHVybiBjcDsKKyt9CisrCisrLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IGxvY2FsZSdzIGNoYXJhY3RlciBlbmNvZGluZywgYW5kIGNhbm9uaWNhbGl6ZSBpdAorKyAgIGludG8gb25lIG9mIHRoZSBjYW5vbmljYWwgbmFtZXMgbGlzdGVkIGluIGNvbmZpZy5jaGFyc2V0LgorKyAgIFRoZSByZXN1bHQgbXVzdCBub3QgYmUgZnJlZWQ7IGl0IGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkLgorKyAgIElmIHRoZSBjYW5vbmljYWwgbmFtZSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCwgdGhlIHJlc3VsdCBpcyBhIG5vbi1jYW5vbmljYWwKKysgICBuYW1lLiAgKi8KKysKKysjaWZkZWYgU1RBVElDCisrU1RBVElDCisrI2VuZGlmCisrY29uc3QgY2hhciAqCisrbG9jYWxlX2NoYXJzZXQgKCkKKyt7CisrICBjb25zdCBjaGFyICpjb2Rlc2V0OworKyAgY29uc3QgY2hhciAqYWxpYXNlczsKKysKKysjaWYgIShkZWZpbmVkIFdJTjMyIHx8IGRlZmluZWQgT1MyKQorKworKyMgaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisrCisrICAvKiBNb3N0IHN5c3RlbXMgc3VwcG9ydCBubF9sYW5naW5mbyAoQ09ERVNFVCkgbm93YWRheXMuICAqLworKyAgY29kZXNldCA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsKKysKKysjIGVsc2UKKysKKysgIC8qIE9uIG9sZCBzeXN0ZW1zIHdoaWNoIGxhY2sgaXQsIHVzZSBzZXRsb2NhbGUgb3IgZ2V0ZW52LiAgKi8KKysgIGNvbnN0IGNoYXIgKmxvY2FsZSA9IE5VTEw7CisrCisrICAvKiBCdXQgbW9zdCBvbGQgc3lzdGVtcyBkb24ndCBoYXZlIGEgY29tcGxldGUgc2V0IG9mIGxvY2FsZXMuICBTb21lCisrICAgICAobGlrZSBTdW5PUyA0IG9yIERKR1BQKSBoYXZlIG9ubHkgdGhlIEMgbG9jYWxlLiAgVGhlcmVmb3JlIHdlIGRvbid0CisrICAgICB1c2Ugc2V0bG9jYWxlIGhlcmU7IGl0IHdvdWxkIHJldHVybiAiQyIgd2hlbiBpdCBkb2Vzbid0IHN1cHBvcnQgdGhlCisrICAgICBsb2NhbGUgbmFtZSB0aGUgdXNlciBoYXMgc2V0LiAgKi8KKysjICBpZiBIQVZFX1NFVExPQ0FMRSAmJiAwCisrICBsb2NhbGUgPSBzZXRsb2NhbGUgKExDX0NUWVBFLCBOVUxMKTsKKysjICBlbmRpZgorKyAgaWYgKGxvY2FsZSA9PSBOVUxMIHx8IGxvY2FsZVswXSA9PSAnXDAnKQorKyAgICB7CisrICAgICAgbG9jYWxlID0gZ2V0ZW52ICgiTENfQUxMIik7CisrICAgICAgaWYgKGxvY2FsZSA9PSBOVUxMIHx8IGxvY2FsZVswXSA9PSAnXDAnKQorKwl7CisrCSAgbG9jYWxlID0gZ2V0ZW52ICgiTENfQ1RZUEUiKTsKKysJICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCisrCSAgICBsb2NhbGUgPSBnZXRlbnYgKCJMQU5HIik7CisrCX0KKysgICAgfQorKworKyAgLyogT24gc29tZSBvbGQgc3lzdGVtcywgb25lIHVzZWQgdG8gc2V0IGxvY2FsZSA9ICJpc284ODU5XzEiLiBPbiBvdGhlcnMsCisrICAgICB5b3Ugc2V0IGl0IHRvICJsYW5ndWFnZV9DT1VOVFJZLmNoYXJzZXQiLiBJbiBhbnkgY2FzZSwgd2UgcmVzb2x2ZSBpdAorKyAgICAgdGhyb3VnaCB0aGUgY2hhcnNldC5hbGlhcyBmaWxlLiAgKi8KKysgIGNvZGVzZXQgPSBsb2NhbGU7CisrCisrIyBlbmRpZgorKworKyNlbGlmIGRlZmluZWQgV0lOMzIKKysKKysgIHN0YXRpYyBjaGFyIGJ1ZlsyICsgMTAgKyAxXTsKKysKKysgIC8qIFdvZTMyIGhhcyBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgbG9jYWxlJ3MgY29kZXBhZ2UgYXMgYSBudW1iZXIuICAqLworKyAgc3ByaW50ZiAoYnVmLCAiQ1AldSIsIEdldEFDUCAoKSk7CisrICBjb2Rlc2V0ID0gYnVmOworKworKyNlbGlmIGRlZmluZWQgT1MyCisrCisrICBjb25zdCBjaGFyICpsb2NhbGU7CisrICBzdGF0aWMgY2hhciBidWZbMiArIDEwICsgMV07CisrICBVTE9ORyBjcFszXTsKKysgIFVMT05HIGNwbGVuOworKworKyAgLyogQWxsb3cgdXNlciB0byBvdmVycmlkZSB0aGUgY29kZXNldCwgYXMgc2V0IGluIHRoZSBvcGVyYXRpbmcgc3lzdGVtLAorKyAgICAgd2l0aCBzdGFuZGFyZCBsYW5ndWFnZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICAqLworKyAgbG9jYWxlID0gZ2V0ZW52ICgiTENfQUxMIik7CisrICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCisrICAgIHsKKysgICAgICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19DVFlQRSIpOworKyAgICAgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKysJbG9jYWxlID0gZ2V0ZW52ICgiTEFORyIpOworKyAgICB9CisrICBpZiAobG9jYWxlICE9IE5VTEwgJiYgbG9jYWxlWzBdICE9ICdcMCcpCisrICAgIHsKKysgICAgICAvKiBJZiB0aGUgbG9jYWxlIG5hbWUgY29udGFpbnMgYW4gZW5jb2RpbmcgYWZ0ZXIgdGhlIGRvdCwgcmV0dXJuIGl0LiAgKi8KKysgICAgICBjb25zdCBjaGFyICpkb3QgPSBzdHJjaHIgKGxvY2FsZSwgJy4nKTsKKysKKysgICAgICBpZiAoZG90ICE9IE5VTEwpCisrCXsKKysJICBjb25zdCBjaGFyICptb2RpZmllcjsKKysKKysJICBkb3QrKzsKKysJICAvKiBMb29rIGZvciB0aGUgcG9zc2libGUgQC4uLiB0cmFpbGVyIGFuZCByZW1vdmUgaXQsIGlmIGFueS4gICovCisrCSAgbW9kaWZpZXIgPSBzdHJjaHIgKGRvdCwgJ0AnKTsKKysJICBpZiAobW9kaWZpZXIgPT0gTlVMTCkKKysJICAgIHJldHVybiBkb3Q7CisrCSAgaWYgKG1vZGlmaWVyIC0gZG90IDwgc2l6ZW9mIChidWYpKQorKwkgICAgeworKwkgICAgICBtZW1jcHkgKGJ1ZiwgZG90LCBtb2RpZmllciAtIGRvdCk7CisrCSAgICAgIGJ1ZiBbbW9kaWZpZXIgLSBkb3RdID0gJ1wwJzsKKysJICAgICAgcmV0dXJuIGJ1ZjsKKysJICAgIH0KKysJfQorKworKyAgICAgIC8qIFJlc29sdmUgdGhyb3VnaCB0aGUgY2hhcnNldC5hbGlhcyBmaWxlLiAgKi8KKysgICAgICBjb2Rlc2V0ID0gbG9jYWxlOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAvKiBPUy8yIGhhcyBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgbG9jYWxlJ3MgY29kZXBhZ2UgYXMgYSBudW1iZXIuICAqLworKyAgICAgIGlmIChEb3NRdWVyeUNwIChzaXplb2YgKGNwKSwgY3AsICZjcGxlbikpCisrCWNvZGVzZXQgPSAiIjsKKysgICAgICBlbHNlCisrCXsKKysJICBzcHJpbnRmIChidWYsICJDUCV1IiwgY3BbMF0pOworKwkgIGNvZGVzZXQgPSBidWY7CisrCX0KKysgICAgfQorKworKyNlbmRpZgorKworKyAgaWYgKGNvZGVzZXQgPT0gTlVMTCkKKysgICAgLyogVGhlIGNhbm9uaWNhbCBuYW1lIGNhbm5vdCBiZSBkZXRlcm1pbmVkLiAgKi8KKysgICAgY29kZXNldCA9ICIiOworKworKyAgLyogUmVzb2x2ZSBhbGlhcy4gKi8KKysgIGZvciAoYWxpYXNlcyA9IGdldF9jaGFyc2V0X2FsaWFzZXMgKCk7CisrICAgICAgICphbGlhc2VzICE9ICdcMCc7CisrICAgICAgIGFsaWFzZXMgKz0gc3RybGVuIChhbGlhc2VzKSArIDEsIGFsaWFzZXMgKz0gc3RybGVuIChhbGlhc2VzKSArIDEpCisrICAgIGlmIChzdHJjbXAgKGNvZGVzZXQsIGFsaWFzZXMpID09IDAKKysJfHwgKGFsaWFzZXNbMF0gPT0gJyonICYmIGFsaWFzZXNbMV0gPT0gJ1wwJykpCisrICAgICAgeworKwljb2Rlc2V0ID0gYWxpYXNlcyArIHN0cmxlbiAoYWxpYXNlcykgKyAxOworKwlicmVhazsKKysgICAgICB9CisrCisrICAvKiBEb24ndCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLiAgR05VIGxpYmMgYW5kIEdOVSBsaWJpY29udiBpbnRlcnByZXQKKysgICAgIHRoZSBlbXB0eSBzdHJpbmcgYXMgZGVub3RpbmcgInRoZSBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmciLAorKyAgICAgdGh1cyBHTlUgbGliaWNvbnYgd291bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGEgc2Vjb25kIHRpbWUuICAqLworKyAgaWYgKGNvZGVzZXRbMF0gPT0gJ1wwJykKKysgICAgY29kZXNldCA9ICJBU0NJSSI7CisrCisrICByZXR1cm4gY29kZXNldDsKKyt9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbG9jYWxjaGFyc2V0LmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvbG9jYWxjaGFyc2V0LmgJMjAwNC0wOS0xMiAxNDo0MDozNC40ODM3Mjg2MzIgLTA0MDAKK0BAIC0wLDAgKzEsNDIgQEAKKysvKiBEZXRlcm1pbmUgYSBjYW5vbmljYWwgbmFtZSBmb3IgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgY2hhcmFjdGVyIGVuY29kaW5nLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQ0hBUlNFVCBMaWJyYXJ5LgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9MT0NBTENIQVJTRVRfSAorKyNkZWZpbmUgX0xPQ0FMQ0hBUlNFVF9ICisrCisrCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrCisrLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IGxvY2FsZSdzIGNoYXJhY3RlciBlbmNvZGluZywgYW5kIGNhbm9uaWNhbGl6ZSBpdAorKyAgIGludG8gb25lIG9mIHRoZSBjYW5vbmljYWwgbmFtZXMgbGlzdGVkIGluIGNvbmZpZy5jaGFyc2V0LgorKyAgIFRoZSByZXN1bHQgbXVzdCBub3QgYmUgZnJlZWQ7IGl0IGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkLgorKyAgIElmIHRoZSBjYW5vbmljYWwgbmFtZSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCwgdGhlIHJlc3VsdCBpcyBhIG5vbi1jYW5vbmljYWwKKysgICBuYW1lLiAgKi8KKytleHRlcm4gY29uc3QgY2hhciAqIGxvY2FsZV9jaGFyc2V0ICh2b2lkKTsKKysKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrCisrCisrI2VuZGlmIC8qIF9MT0NBTENIQVJTRVRfSCAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xvY2FsZS5hbGlhcwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sb2NhbGUuYWxpYXMJMjAwNC0wOS0xMiAxNDo0MDozNC40OTk3MjYyMDAgLTA0MDAKK0BAIC0wLDAgKzEsNzggQEAKKysjIExvY2FsZSBuYW1lIGFsaWFzIGRhdGEgYmFzZS4KKysjIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxLDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysjIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysjIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrIyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrIyBVU0EuCisrCisrIyBUaGUgZm9ybWF0IG9mIHRoaXMgZmlsZSBpcyB0aGUgc2FtZSBhcyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZmlsZSBvZgorKyMgdGhlIFggV2luZG93IFN5c3RlbSwgd2hpY2ggbm9ybWFsbHkgY2FuIGJlIGZvdW5kIGluCisrIwkvdXNyL2xpYi9YMTEvbG9jYWxlL2xvY2FsZS5hbGlhcworKyMgQSBzaW5nbGUgbGluZSBjb250YWlucyB0d28gZmllbGRzOiBhbiBhbGlhcyBhbmQgYSBzdWJzdGl0dXRpb24gdmFsdWUuCisrIyBBbGwgZW50cmllcyBhcmUgY2FzZSBpbmRlcGVuZGVudC4KKysKKysjIE5vdGU6IFRoaXMgZmlsZSBpcyBmYXIgZnJvbSBiZWluZyBjb21wbGV0ZS4gIElmIHlvdSBoYXZlIGEgdmFsdWUgZm9yCisrIyB5b3VyIG93biBzaXRlIHdoaWNoIHlvdSB0aGluayBtaWdodCBiZSB1c2VmdWwgZm9yIG90aGVycyB0b28sIHNoYXJlCisrIyBpdCB3aXRoIHRoZSByZXN0IG9mIHVzLiAgU2VuZCBpdCB1c2luZyB0aGUgYGdsaWJjYnVnJyBzY3JpcHQgdG8KKysjIGJ1Z3NAZ251Lm9yZy4KKysKKysjIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTogCisrCisrYm9rbWFsCQluYl9OTy5JU08tODg1OS0xCisrYm9rbeVsCQluYl9OTy5JU08tODg1OS0xCisrY2F0YWxhbgkJY2FfRVMuSVNPLTg4NTktMQorK2Nyb2F0aWFuCWhyX0hSLklTTy04ODU5LTIKKytjemVjaAkJY3NfQ1ouSVNPLTg4NTktMgorK2RhbmlzaCAgICAgICAgICBkYV9ESy5JU08tODg1OS0xCisrZGFuc2sJCWRhX0RLLklTTy04ODU5LTEKKytkZXV0c2NoCQlkZV9ERS5JU08tODg1OS0xCisrZHV0Y2gJCW5sX05MLklTTy04ODU5LTEKKytlZXN0aQkJZXRfRUUuSVNPLTg4NTktMQorK2VzdG9uaWFuCWV0X0VFLklTTy04ODU5LTEKKytmaW5uaXNoICAgICAgICAgZmlfRkkuSVNPLTg4NTktMQorK2ZyYW7nYWlzCWZyX0ZSLklTTy04ODU5LTEKKytmcmVuY2gJCWZyX0ZSLklTTy04ODU5LTEKKytnYWxlZ28JCWdsX0VTLklTTy04ODU5LTEKKytnYWxpY2lhbglnbF9FUy5JU08tODg1OS0xCisrZ2VybWFuCQlkZV9ERS5JU08tODg1OS0xCisrZ3JlZWsgICAgICAgICAgIGVsX0dSLklTTy04ODU5LTcKKytoZWJyZXcgICAgICAgICAgaGVfSUwuSVNPLTg4NTktOAorK2hydmF0c2tpCWhyX0hSLklTTy04ODU5LTIKKytodW5nYXJpYW4gICAgICAgaHVfSFUuSVNPLTg4NTktMgorK2ljZWxhbmRpYyAgICAgICBpc19JUy5JU08tODg1OS0xCisraXRhbGlhbiAgICAgICAgIGl0X0lULklTTy04ODU5LTEKKytqYXBhbmVzZQlqYV9KUC5ldWNKUAorK2phcGFuZXNlLmV1YwlqYV9KUC5ldWNKUAorK2phX0pQCQlqYV9KUC5ldWNKUAorK2phX0pQLnVqaXMJamFfSlAuZXVjSlAKKytqYXBhbmVzZS5zamlzCWphX0pQLlNKSVMKKytrb3JlYW4JCWtvX0tSLmV1Y0tSCisra29yZWFuLmV1YyAJa29fS1IuZXVjS1IKKytrb19LUgkJa29fS1IuZXVjS1IKKytsaXRodWFuaWFuICAgICAgbHRfTFQuSVNPLTg4NTktMTMKKytub19OTwkJbmJfTk8uSVNPLTg4NTktMQorK25vX05PLklTTy04ODU5LTEgbmJfTk8uSVNPLTg4NTktMQorK25vcndlZ2lhbiAgICAgICBuYl9OTy5JU08tODg1OS0xCisrbnlub3JzawkJbm5fTk8uSVNPLTg4NTktMQorK3BvbGlzaCAgICAgICAgICBwbF9QTC5JU08tODg1OS0yCisrcG9ydHVndWVzZSAgICAgIHB0X1BULklTTy04ODU5LTEKKytyb21hbmlhbiAgICAgICAgcm9fUk8uSVNPLTg4NTktMgorK3J1c3NpYW4gICAgICAgICBydV9SVS5JU08tODg1OS01Cisrc2xvdmFrICAgICAgICAgIHNrX1NLLklTTy04ODU5LTIKKytzbG92ZW5lICAgICAgICAgc2xfU0kuSVNPLTg4NTktMgorK3Nsb3ZlbmlhbiAgICAgICBzbF9TSS5JU08tODg1OS0yCisrc3BhbmlzaCAgICAgICAgIGVzX0VTLklTTy04ODU5LTEKKytzd2VkaXNoICAgICAgICAgc3ZfU0UuSVNPLTg4NTktMQorK3RoYWkJCXRoX1RILlRJUy02MjAKKyt0dXJraXNoICAgICAgICAgdHJfVFIuSVNPLTg4NTktOQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xvY2FsZWFsaWFzLmMJMTk5OC0wNC0yNiAwOToyMjozNy4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvbG9jYWxlYWxpYXMuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjUwNTcyNTI4OCAtMDQwMAorQEAgLTEsMjAgKzEsMjcgQEAKKy0vKiBIYW5kbGUgYWxpYXNlcyBmb3IgbG9jYWxlIG5hbWVzCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorKy8qIEhhbmRsZSBhbGlhc2VzIGZvciBsb2NhbGUgbmFtZXMuCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwMSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrLyogVGVsbCBnbGliYydzIDxzdHJpbmcuaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3IgbWVtcGNweSgpLgorKyAgIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+IGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZQorKyAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KKysjaWZuZGVmIF9HTlVfU09VUkNFCisrIyBkZWZpbmUgX0dOVV9TT1VSQ0UgICAgMQorKyNlbmRpZgorIAorICNpZmRlZiBIQVZFX0NPTkZJR19ICisgIyBpbmNsdWRlIDxjb25maWcuaD4KK0BAIC0yMiw1NiArMjksNDUgQEAKKyAKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKysjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfX19GU0VUTE9DS0lORworKyMgaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorICNpZmRlZiBfX0dOVUNfXworKyMgdW5kZWYgYWxsb2NhCisgIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKyAjIGRlZmluZSBIQVZFX0FMTE9DQSAxCisgI2Vsc2UKKy0jIGlmIGRlZmluZWQgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCistIyAgaW5jbHVkZSA8YWxsb2NhLmg+CisrIyBpZmRlZiBfTVNDX1ZFUgorKyMgIGluY2x1ZGUgPG1hbGxvYy5oPgorKyMgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorICMgZWxzZQorLSMgIGlmZGVmIF9BSVgKKy0gI3ByYWdtYSBhbGxvY2EKKysjICBpZiBkZWZpbmVkIEhBVkVfQUxMT0NBX0ggfHwgZGVmaW5lZCBfTElCQworKyMgICBpbmNsdWRlIDxhbGxvY2EuaD4KKyAjICBlbHNlCistIyAgIGlmbmRlZiBhbGxvY2EKKysjICAgaWZkZWYgX0FJWAorKyAjcHJhZ21hIGFsbG9jYQorKyMgICBlbHNlCisrIyAgICBpZm5kZWYgYWxsb2NhCisgY2hhciAqYWxsb2NhICgpOworKyMgICAgZW5kaWYKKyAjICAgZW5kaWYKKyAjICBlbmRpZgorICMgZW5kaWYKKyAjZW5kaWYKKyAKKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RkbGliLmg+CistI2Vsc2UKKy1jaGFyICpnZXRlbnYgKCk7CistIyBpZmRlZiBIQVZFX01BTExPQ19ICistIyAgaW5jbHVkZSA8bWFsbG9jLmg+CistIyBlbHNlCistdm9pZCBmcmVlICgpOworLSMgZW5kaWYKKy0jZW5kaWYKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorIAorLSNpZiBkZWZpbmVkIEhBVkVfU1RSSU5HX0ggfHwgZGVmaW5lZCBfTElCQworLSMgaWZuZGVmIF9HTlVfU09VUkNFCistIyAgZGVmaW5lIF9HTlVfU09VUkNFCTEKKy0jIGVuZGlmCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKysKKysjaWYgRU5BQkxFX1JFTE9DQVRBQkxFCisrIyBpbmNsdWRlICJyZWxvY2F0YWJsZS5oIgorICNlbHNlCistIyBpbmNsdWRlIDxzdHJpbmdzLmg+CistIyBpZm5kZWYgbWVtY3B5CistIyAgZGVmaW5lIG1lbWNweShEc3QsIFNyYywgTnVtKSBiY29weSAoU3JjLCBEc3QsIE51bSkKKy0jIGVuZGlmCistI2VuZGlmCistI2lmICFIQVZFX1NUUkNIUiAmJiAhZGVmaW5lZCBfTElCQworLSMgaWZuZGVmIHN0cmNocgorLSMgIGRlZmluZSBzdHJjaHIgaW5kZXgKKy0jIGVuZGlmCisrIyBkZWZpbmUgcmVsb2NhdGUocGF0aG5hbWUpIChwYXRobmFtZSkKKyAjZW5kaWYKKyAKKy0jaW5jbHVkZSAiZ2V0dGV4dC5oIgorLSNpbmNsdWRlICJnZXR0ZXh0UC5oIgorLQorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKyAKKyAjaWZkZWYgX0xJQkMKK0BAIC03OSw0MyArNzUsNDkgQEAKKyAgICBiZWNhdXNlIHNvbWUgQU5TSSBDIGZ1bmN0aW9ucyB3aWxsIHJlcXVpcmUgbGlua2luZyB3aXRoIHRoaXMgb2JqZWN0CisgICAgZmlsZSBhbmQgdGhlIG5hbWUgc3BhY2UgbXVzdCBub3QgYmUgcG9sbHV0ZWQuICAqLworICMgZGVmaW5lIHN0cmNhc2VjbXAgX19zdHJjYXNlY21wCisrCisrIyBpZm5kZWYgbWVtcGNweQorKyMgIGRlZmluZSBtZW1wY3B5IF9fbWVtcGNweQorKyMgZW5kaWYKKysjIGRlZmluZSBIQVZFX01FTVBDUFkJMQorKyMgZGVmaW5lIEhBVkVfX19GU0VUTE9DS0lORwkxCisrCisrLyogV2UgbmVlZCBsb2NraW5nIGhlcmUgc2luY2Ugd2UgY2FuIGJlIGNhbGxlZCBmcm9tIGRpZmZlcmVudCBwbGFjZXMuICAqLworKyMgaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKysKKytfX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKHN0YXRpYywgbG9jayk7CisrI2VuZGlmCisrCisrI2lmbmRlZiBpbnRlcm5hbF9mdW5jdGlvbgorKyMgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uCisgI2VuZGlmCisgCisrLyogU29tZSBvcHRpbWl6YXRpb25zIGZvciBnbGliYy4gICovCisrI2lmZGVmIF9MSUJDCisrIyBkZWZpbmUgRkVPRihmcCkJCWZlb2ZfdW5sb2NrZWQgKGZwKQorKyMgZGVmaW5lIEZHRVRTKGJ1ZiwgbiwgZnApCWZnZXRzX3VubG9ja2VkIChidWYsIG4sIGZwKQorKyNlbHNlCisrIyBkZWZpbmUgRkVPRihmcCkJCWZlb2YgKGZwKQorKyMgZGVmaW5lIEZHRVRTKGJ1ZiwgbiwgZnApCWZnZXRzIChidWYsIG4sIGZwKQorKyNlbmRpZgorIAorLS8qIEZvciB0aG9zZSBsb29zaW5nIHN5c3RlbXMgd2hpY2ggZG9uJ3QgaGF2ZSBgYWxsb2NhJyB3ZSBoYXZlIHRvIGFkZAorKy8qIEZvciB0aG9zZSBsb3Npbmcgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIGBhbGxvY2EnIHdlIGhhdmUgdG8gYWRkCisgICAgc29tZSBhZGRpdGlvbmFsIGNvZGUgZW11bGF0aW5nIGl0LiAgKi8KKyAjaWZkZWYgSEFWRV9BTExPQ0EKKy0vKiBOb3RoaW5nIGhhcyB0byBiZSBkb25lLiAgKi8KKy0jIGRlZmluZSBBRERfQkxPQ0sobGlzdCwgYWRkcmVzcykgLyogbm90aGluZyAqLworLSMgZGVmaW5lIEZSRUVfQkxPQ0tTKGxpc3QpIC8qIG5vdGhpbmcgKi8KKysjIGRlZmluZSBmcmVlYShwKSAvKiBub3RoaW5nICovCisgI2Vsc2UKKy1zdHJ1Y3QgYmxvY2tfbGlzdAorLXsKKy0gIHZvaWQgKmFkZHJlc3M7CistICBzdHJ1Y3QgYmxvY2tfbGlzdCAqbmV4dDsKKy19OworLSMgZGVmaW5lIEFERF9CTE9DSyhsaXN0LCBhZGRyKQkJCQkJCSAgICAgIFwKKy0gIGRvIHsJCQkJCQkJCQkgICAgICBcCistICAgIHN0cnVjdCBibG9ja19saXN0ICpuZXdwID0gKHN0cnVjdCBibG9ja19saXN0ICopIG1hbGxvYyAoc2l6ZW9mICgqbmV3cCkpOyAgXAorLSAgICAvKiBJZiB3ZSBjYW5ub3QgZ2V0IGEgZnJlZSBibG9jayB3ZSBjYW5ub3QgYWRkIHRoZSBuZXcgZWxlbWVudCB0bwkgICAgICBcCistICAgICAgIHRoZSBsaXN0LiAgKi8JCQkJCQkJICAgICAgXAorLSAgICBpZiAobmV3cCAhPSBOVUxMKSB7CQkJCQkJCSAgICAgIFwKKy0gICAgICBuZXdwLT5hZGRyZXNzID0gKGFkZHIpOwkJCQkJCSAgICAgIFwKKy0gICAgICBuZXdwLT5uZXh0ID0gKGxpc3QpOwkJCQkJCSAgICAgIFwKKy0gICAgICAobGlzdCkgPSBuZXdwOwkJCQkJCQkgICAgICBcCistICAgIH0JCQkJCQkJCQkgICAgICBcCistICB9IHdoaWxlICgwKQorLSMgZGVmaW5lIEZSRUVfQkxPQ0tTKGxpc3QpCQkJCQkJICAgICAgXAorLSAgZG8gewkJCQkJCQkJCSAgICAgIFwKKy0gICAgd2hpbGUgKGxpc3QgIT0gTlVMTCkgewkJCQkJCSAgICAgIFwKKy0gICAgICBzdHJ1Y3QgYmxvY2tfbGlzdCAqb2xkID0gbGlzdDsJCQkJCSAgICAgIFwKKy0gICAgICBsaXN0ID0gbGlzdC0+bmV4dDsJCQkJCQkgICAgICBcCistICAgICAgZnJlZSAob2xkKTsJCQkJCQkJICAgICAgXAorLSAgICB9CQkJCQkJCQkJICAgICAgXAorLSAgfSB3aGlsZSAoMCkKKy0jIHVuZGVmIGFsbG9jYQorLSMgZGVmaW5lIGFsbG9jYShzaXplKSAobWFsbG9jIChzaXplKSkKKy0jZW5kaWYJLyogaGF2ZSBhbGxvY2EgKi8KKysjIGRlZmluZSBhbGxvY2EobikgbWFsbG9jIChuKQorKyMgZGVmaW5lIGZyZWVhKHApIGZyZWUgKHApCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX0xJQkNfUkVFTlRSQU5UIHx8IEhBVkVfREVDTF9GR0VUU19VTkxPQ0tFRAorKyMgdW5kZWYgZmdldHMKKysjIGRlZmluZSBmZ2V0cyhidWYsIGxlbiwgcykgZmdldHNfdW5sb2NrZWQgKGJ1ZiwgbGVuLCBzKQorKyNlbmRpZgorKyNpZiBkZWZpbmVkIF9MSUJDX1JFRU5UUkFOVCB8fCBIQVZFX0RFQ0xfRkVPRl9VTkxPQ0tFRAorKyMgdW5kZWYgZmVvZgorKyMgZGVmaW5lIGZlb2YocykgZmVvZl91bmxvY2tlZCAocykKKysjZW5kaWYKKyAKKyAKKyBzdHJ1Y3QgYWxpYXNfbWFwCitAQCAtMTI1LDI2ICsxMjcsNDEgQEAKKyB9OworIAorIAorLXN0YXRpYyBzdHJ1Y3QgYWxpYXNfbWFwICptYXA7Cistc3RhdGljIHNpemVfdCBubWFwID0gMDsKKy1zdGF0aWMgc2l6ZV90IG1heG1hcCA9IDA7CisrI2lmbmRlZiBfTElCQworKyMgZGVmaW5lIGxpYmNfZnJlZXJlc19wdHIoZGVjbCkgZGVjbAorKyNlbmRpZgorKworK2xpYmNfZnJlZXJlc19wdHIgKHN0YXRpYyBjaGFyICpzdHJpbmdfc3BhY2UpOworK3N0YXRpYyBzaXplX3Qgc3RyaW5nX3NwYWNlX2FjdDsKKytzdGF0aWMgc2l6ZV90IHN0cmluZ19zcGFjZV9tYXg7CisrbGliY19mcmVlcmVzX3B0ciAoc3RhdGljIHN0cnVjdCBhbGlhc19tYXAgKm1hcCk7Cisrc3RhdGljIHNpemVfdCBubWFwOworK3N0YXRpYyBzaXplX3QgbWF4bWFwOworIAorIAorIC8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucy4gICovCistc3RhdGljIHNpemVfdCByZWFkX2FsaWFzX2ZpbGUgUEFSQU1TICgoY29uc3QgY2hhciAqZm5hbWUsIGludCBmbmFtZV9sZW4pKTsKKy1zdGF0aWMgdm9pZCBleHRlbmRfYWxpYXNfdGFibGUgUEFSQU1TICgodm9pZCkpOworLXN0YXRpYyBpbnQgYWxpYXNfY29tcGFyZSBQQVJBTVMgKChjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAxLAorLQkJCQkgIGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDIpKTsKKytzdGF0aWMgc2l6ZV90IHJlYWRfYWxpYXNfZmlsZSAoY29uc3QgY2hhciAqZm5hbWUsIGludCBmbmFtZV9sZW4pCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKytzdGF0aWMgaW50IGV4dGVuZF9hbGlhc190YWJsZSAodm9pZCk7Cisrc3RhdGljIGludCBhbGlhc19jb21wYXJlIChjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAxLAorKwkJCSAgY29uc3Qgc3RydWN0IGFsaWFzX21hcCAqbWFwMik7CisgCisgCisgY29uc3QgY2hhciAqCistX25sX2V4cGFuZF9hbGlhcyAobmFtZSkKKy0gICAgY29uc3QgY2hhciAqbmFtZTsKKytfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICpuYW1lKQorIHsKKy0gIHN0YXRpYyBjb25zdCBjaGFyICpsb2NhbGVfYWxpYXNfcGF0aCA9IExPQ0FMRV9BTElBU19QQVRIOworKyAgc3RhdGljIGNvbnN0IGNoYXIgKmxvY2FsZV9hbGlhc19wYXRoOworICAgc3RydWN0IGFsaWFzX21hcCAqcmV0dmFsOworKyAgY29uc3QgY2hhciAqcmVzdWx0ID0gTlVMTDsKKyAgIHNpemVfdCBhZGRlZDsKKyAKKysjaWZkZWYgX0xJQkMKKysgIF9fbGliY19sb2NrX2xvY2sgKGxvY2spOworKyNlbmRpZgorKworKyAgaWYgKGxvY2FsZV9hbGlhc19wYXRoID09IE5VTEwpCisrICAgIGxvY2FsZV9hbGlhc19wYXRoID0gTE9DQUxFX0FMSUFTX1BBVEg7CisrCisgICBkbworICAgICB7CisgICAgICAgc3RydWN0IGFsaWFzX21hcCBpdGVtOworQEAgLTE1NCwxNSArMTcxLDE4IEBACisgICAgICAgaWYgKG5tYXAgPiAwKQorIAlyZXR2YWwgPSAoc3RydWN0IGFsaWFzX21hcCAqKSBic2VhcmNoICgmaXRlbSwgbWFwLCBubWFwLAorIAkJCQkJICAgICAgIHNpemVvZiAoc3RydWN0IGFsaWFzX21hcCksCistCQkJCQkgICAgICAgKGludCAoKikgUEFSQU1TICgoY29uc3Qgdm9pZCAqLAorLQkJCQkJCQkJIGNvbnN0IHZvaWQgKikpCisrCQkJCQkgICAgICAgKGludCAoKikgKGNvbnN0IHZvaWQgKiwKKysJCQkJCQkJIGNvbnN0IHZvaWQgKikKKyAJCQkJCQkpIGFsaWFzX2NvbXBhcmUpOworICAgICAgIGVsc2UKKyAJcmV0dmFsID0gTlVMTDsKKyAKKyAgICAgICAvKiBXZSByZWFsbHkgZm91bmQgYW4gYWxpYXMuICBSZXR1cm4gdGhlIHZhbHVlLiAgKi8KKyAgICAgICBpZiAocmV0dmFsICE9IE5VTEwpCistCXJldHVybiByZXR2YWwtPnZhbHVlOworKwl7CisrCSAgcmVzdWx0ID0gcmV0dmFsLT52YWx1ZTsKKysJICBicmVhazsKKysJfQorIAorICAgICAgIC8qIFBlcmhhcHMgd2UgY2FuIGZpbmQgYW5vdGhlciBhbGlhcyBmaWxlLiAgKi8KKyAgICAgICBhZGRlZCA9IDA7CitAQCAtMTcwLDExICsxOTAsMTIgQEAKKyAJeworIAkgIGNvbnN0IGNoYXIgKnN0YXJ0OworIAorLQkgIHdoaWxlIChsb2NhbGVfYWxpYXNfcGF0aFswXSA9PSAnOicpCisrCSAgd2hpbGUgKGxvY2FsZV9hbGlhc19wYXRoWzBdID09IFBBVEhfU0VQQVJBVE9SKQorIAkgICAgKytsb2NhbGVfYWxpYXNfcGF0aDsKKyAJICBzdGFydCA9IGxvY2FsZV9hbGlhc19wYXRoOworIAorLQkgIHdoaWxlIChsb2NhbGVfYWxpYXNfcGF0aFswXSAhPSAnXDAnICYmIGxvY2FsZV9hbGlhc19wYXRoWzBdICE9ICc6JykKKysJICB3aGlsZSAobG9jYWxlX2FsaWFzX3BhdGhbMF0gIT0gJ1wwJworKwkJICYmIGxvY2FsZV9hbGlhc19wYXRoWzBdICE9IFBBVEhfU0VQQVJBVE9SKQorIAkgICAgKytsb2NhbGVfYWxpYXNfcGF0aDsKKyAKKyAJICBpZiAoc3RhcnQgPCBsb2NhbGVfYWxpYXNfcGF0aCkKK0BAIC0xODMsNzggKzIwNCw4NyBAQAorICAgICB9CisgICB3aGlsZSAoYWRkZWQgIT0gMCk7CisgCistICByZXR1cm4gTlVMTDsKKysjaWZkZWYgX0xJQkMKKysgIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisrI2VuZGlmCisrCisrICByZXR1cm4gcmVzdWx0OworIH0KKyAKKyAKKyBzdGF0aWMgc2l6ZV90CistcmVhZF9hbGlhc19maWxlIChmbmFtZSwgZm5hbWVfbGVuKQorLSAgICAgY29uc3QgY2hhciAqZm5hbWU7CistICAgICBpbnQgZm5hbWVfbGVuOworK2ludGVybmFsX2Z1bmN0aW9uCisrcmVhZF9hbGlhc19maWxlIChjb25zdCBjaGFyICpmbmFtZSwgaW50IGZuYW1lX2xlbikKKyB7CistI2lmbmRlZiBIQVZFX0FMTE9DQQorLSAgc3RydWN0IGJsb2NrX2xpc3QgKmJsb2NrX2xpc3QgPSBOVUxMOworLSNlbmRpZgorICAgRklMRSAqZnA7CisgICBjaGFyICpmdWxsX2ZuYW1lOworICAgc2l6ZV90IGFkZGVkOworICAgc3RhdGljIGNvbnN0IGNoYXIgYWxpYXNmaWxlW10gPSAiL2xvY2FsZS5hbGlhcyI7CisgCisgICBmdWxsX2ZuYW1lID0gKGNoYXIgKikgYWxsb2NhIChmbmFtZV9sZW4gKyBzaXplb2YgYWxpYXNmaWxlKTsKKy0gIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgZnVsbF9mbmFtZSk7CisrI2lmZGVmIEhBVkVfTUVNUENQWQorKyAgbWVtcGNweSAobWVtcGNweSAoZnVsbF9mbmFtZSwgZm5hbWUsIGZuYW1lX2xlbiksCisrCSAgIGFsaWFzZmlsZSwgc2l6ZW9mIGFsaWFzZmlsZSk7CisrI2Vsc2UKKyAgIG1lbWNweSAoZnVsbF9mbmFtZSwgZm5hbWUsIGZuYW1lX2xlbik7CisgICBtZW1jcHkgKCZmdWxsX2ZuYW1lW2ZuYW1lX2xlbl0sIGFsaWFzZmlsZSwgc2l6ZW9mIGFsaWFzZmlsZSk7CisrI2VuZGlmCisgCistICBmcCA9IGZvcGVuIChmdWxsX2ZuYW1lLCAiciIpOworKyAgZnAgPSBmb3BlbiAocmVsb2NhdGUgKGZ1bGxfZm5hbWUpLCAiciIpOworKyAgZnJlZWEgKGZ1bGxfZm5hbWUpOworICAgaWYgKGZwID09IE5VTEwpCistICAgIHsKKy0gICAgICBGUkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKysgICAgcmV0dXJuIDA7CisrCisrI2lmZGVmIEhBVkVfX19GU0VUTE9DS0lORworKyAgLyogTm8gdGhyZWFkcyBwcmVzZW50LiAgKi8KKysgIF9fZnNldGxvY2tpbmcgKGZwLCBGU0VUTE9DS0lOR19CWUNBTExFUik7CisrI2VuZGlmCisgCisgICBhZGRlZCA9IDA7CistICB3aGlsZSAoIWZlb2YgKGZwKSkKKysgIHdoaWxlICghRkVPRiAoZnApKQorICAgICB7CisgICAgICAgLyogSXQgaXMgYSByZWFzb25hYmxlIGFwcHJvYWNoIHRvIHVzZSBhIGZpeCBidWZmZXIgaGVyZSBiZWNhdXNlCisgCSBhKSB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBmaXJzdCB0d28gZmllbGRzCisgCSBiKSB0aGVzZSBmaWVsZHMgbXVzdCBiZSB1c2FibGUgYXMgZmlsZSBuYW1lcyBhbmQgc28gbXVzdCBub3QKKyAJICAgIGJlIHRoYXQgbG9uZworLSAgICAgICAqLworLSAgICAgIGNoYXIgYnVmW0JVRlNJWl07CisrCSBXZSBhdm9pZCBhIG11bHRpLWtpbG9ieXRlIGJ1ZmZlciBoZXJlIHNpbmNlIHRoaXMgd291bGQgdXNlIHVwCisrCSBzdGFjayBzcGFjZSB3aGljaCB3ZSBtaWdodCBub3QgaGF2ZSBpZiB0aGUgcHJvZ3JhbSByYW4gb3V0IG9mCisrCSBtZW1vcnkuICAqLworKyAgICAgIGNoYXIgYnVmWzQwMF07CisgICAgICAgY2hhciAqYWxpYXM7CisgICAgICAgY2hhciAqdmFsdWU7CisgICAgICAgY2hhciAqY3A7CisgCistICAgICAgaWYgKGZnZXRzIChidWYsIEJVRlNJWiwgZnApID09IE5VTEwpCisrICAgICAgaWYgKEZHRVRTIChidWYsIHNpemVvZiBidWYsIGZwKSA9PSBOVUxMKQorIAkvKiBFT0YgcmVhY2hlZC4gICovCisgCWJyZWFrOworIAorICAgICAgIGNwID0gYnVmOworICAgICAgIC8qIElnbm9yZSBsZWFkaW5nIHdoaXRlIHNwYWNlLiAgKi8KKy0gICAgICB3aGlsZSAoaXNzcGFjZSAoY3BbMF0pKQorKyAgICAgIHdoaWxlIChpc3NwYWNlICgodW5zaWduZWQgY2hhcikgY3BbMF0pKQorIAkrK2NwOworIAorICAgICAgIC8qIEEgbGVhZGluZyAnIycgc2lnbmFscyBhIGNvbW1lbnQgbGluZS4gICovCisgICAgICAgaWYgKGNwWzBdICE9ICdcMCcgJiYgY3BbMF0gIT0gJyMnKQorIAl7CisgCSAgYWxpYXMgPSBjcCsrOworLQkgIHdoaWxlIChjcFswXSAhPSAnXDAnICYmICFpc3NwYWNlIChjcFswXSkpCisrCSAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgIWlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSBjcFswXSkpCisgCSAgICArK2NwOworIAkgIC8qIFRlcm1pbmF0ZSBhbGlhcyBuYW1lLiAgKi8KKyAJICBpZiAoY3BbMF0gIT0gJ1wwJykKKyAJICAgICpjcCsrID0gJ1wwJzsKKyAKKyAJICAvKiBOb3cgbG9vayBmb3IgdGhlIGJlZ2lubmluZyBvZiB0aGUgdmFsdWUuICAqLworLQkgIHdoaWxlIChpc3NwYWNlIChjcFswXSkpCisrCSAgd2hpbGUgKGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSBjcFswXSkpCisgCSAgICArK2NwOworIAorIAkgIGlmIChjcFswXSAhPSAnXDAnKQorIAkgICAgeworLQkgICAgICBjaGFyICp0cDsKKy0JICAgICAgc2l6ZV90IGxlbjsKKysJICAgICAgc2l6ZV90IGFsaWFzX2xlbjsKKysJICAgICAgc2l6ZV90IHZhbHVlX2xlbjsKKyAKKyAJICAgICAgdmFsdWUgPSBjcCsrOworLQkgICAgICB3aGlsZSAoY3BbMF0gIT0gJ1wwJyAmJiAhaXNzcGFjZSAoY3BbMF0pKQorKwkgICAgICB3aGlsZSAoY3BbMF0gIT0gJ1wwJyAmJiAhaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpIGNwWzBdKSkKKyAJCSsrY3A7CisgCSAgICAgIC8qIFRlcm1pbmF0ZSB2YWx1ZS4gICovCisgCSAgICAgIGlmIChjcFswXSA9PSAnXG4nKQorQEAgLTI2OSwyOCArMjk5LDQ0IEBACisgCQkqY3ArKyA9ICdcMCc7CisgCisgCSAgICAgIGlmIChubWFwID49IG1heG1hcCkKKy0JCWV4dGVuZF9hbGlhc190YWJsZSAoKTsKKy0KKy0JICAgICAgLyogV2UgY2Fubm90IGRlcGVuZCBvbiBzdHJkdXAgYXZhaWxhYmxlIGluIHRoZSBsaWJjLiAgU2lnaCEgICovCistCSAgICAgIGxlbiA9IHN0cmxlbiAoYWxpYXMpICsgMTsKKy0JICAgICAgdHAgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CistCSAgICAgIGlmICh0cCA9PSBOVUxMKQorLQkJeworLQkJICBGUkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CisrCQlpZiAoX19idWlsdGluX2V4cGVjdCAoZXh0ZW5kX2FsaWFzX3RhYmxlICgpLCAwKSkKKyAJCSAgcmV0dXJuIGFkZGVkOworLQkJfQorLQkgICAgICBtZW1jcHkgKHRwLCBhbGlhcywgbGVuKTsKKy0JICAgICAgbWFwW25tYXBdLmFsaWFzID0gdHA7CisgCistCSAgICAgIGxlbiA9IHN0cmxlbiAodmFsdWUpICsgMTsKKy0JICAgICAgdHAgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CistCSAgICAgIGlmICh0cCA9PSBOVUxMKQorKwkgICAgICBhbGlhc19sZW4gPSBzdHJsZW4gKGFsaWFzKSArIDE7CisrCSAgICAgIHZhbHVlX2xlbiA9IHN0cmxlbiAodmFsdWUpICsgMTsKKysKKysJICAgICAgaWYgKHN0cmluZ19zcGFjZV9hY3QgKyBhbGlhc19sZW4gKyB2YWx1ZV9sZW4gPiBzdHJpbmdfc3BhY2VfbWF4KQorIAkJeworLQkJICBGUkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CistCQkgIHJldHVybiBhZGRlZDsKKysJCSAgLyogSW5jcmVhc2Ugc2l6ZSBvZiBtZW1vcnkgcG9vbC4gICovCisrCQkgIHNpemVfdCBuZXdfc2l6ZSA9IChzdHJpbmdfc3BhY2VfbWF4CisrCQkJCSAgICAgKyAoYWxpYXNfbGVuICsgdmFsdWVfbGVuID4gMTAyNAorKwkJCQkJPyBhbGlhc19sZW4gKyB2YWx1ZV9sZW4gOiAxMDI0KSk7CisrCQkgIGNoYXIgKm5ld19wb29sID0gKGNoYXIgKikgcmVhbGxvYyAoc3RyaW5nX3NwYWNlLCBuZXdfc2l6ZSk7CisrCQkgIGlmIChuZXdfcG9vbCA9PSBOVUxMKQorKwkJICAgIHJldHVybiBhZGRlZDsKKysKKysJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHN0cmluZ19zcGFjZSAhPSBuZXdfcG9vbCwgMCkpCisrCQkgICAgeworKwkJICAgICAgc2l6ZV90IGk7CisrCisrCQkgICAgICBmb3IgKGkgPSAwOyBpIDwgbm1hcDsgaSsrKQorKwkJCXsKKysJCQkgIG1hcFtpXS5hbGlhcyArPSBuZXdfcG9vbCAtIHN0cmluZ19zcGFjZTsKKysJCQkgIG1hcFtpXS52YWx1ZSArPSBuZXdfcG9vbCAtIHN0cmluZ19zcGFjZTsKKysJCQl9CisrCQkgICAgfQorKworKwkJICBzdHJpbmdfc3BhY2UgPSBuZXdfcG9vbDsKKysJCSAgc3RyaW5nX3NwYWNlX21heCA9IG5ld19zaXplOworIAkJfQorLQkgICAgICBtZW1jcHkgKHRwLCB2YWx1ZSwgbGVuKTsKKy0JICAgICAgbWFwW25tYXBdLnZhbHVlID0gdHA7CisrCisrCSAgICAgIG1hcFtubWFwXS5hbGlhcyA9IG1lbWNweSAoJnN0cmluZ19zcGFjZVtzdHJpbmdfc3BhY2VfYWN0XSwKKysJCQkJCWFsaWFzLCBhbGlhc19sZW4pOworKwkgICAgICBzdHJpbmdfc3BhY2VfYWN0ICs9IGFsaWFzX2xlbjsKKysKKysJICAgICAgbWFwW25tYXBdLnZhbHVlID0gbWVtY3B5ICgmc3RyaW5nX3NwYWNlW3N0cmluZ19zcGFjZV9hY3RdLAorKwkJCQkJdmFsdWUsIHZhbHVlX2xlbik7CisrCSAgICAgIHN0cmluZ19zcGFjZV9hY3QgKz0gdmFsdWVfbGVuOworIAorIAkgICAgICArK25tYXA7CisgCSAgICAgICsrYWRkZWQ7CitAQCAtMjk5LDE0ICszNDUsMTEgQEAKKyAKKyAgICAgICAvKiBQb3NzaWJseSBub3QgdGhlIHdob2xlIGxpbmUgZml0cyBpbnRvIHRoZSBidWZmZXIuICBJZ25vcmUKKyAJIHRoZSByZXN0IG9mIHRoZSBsaW5lLiAgKi8KKy0gICAgICB3aGlsZSAoc3RyY2hyIChjcCwgJ1xuJykgPT0gTlVMTCkKKy0JeworLQkgIGNwID0gYnVmOworLQkgIGlmIChmZ2V0cyAoYnVmLCBCVUZTSVosIGZwKSA9PSBOVUxMKQorLQkgICAgLyogTWFrZSBzdXJlIHRoZSBpbm5lciBsb29wIHdpbGwgYmUgbGVmdC4gIFRoZSBvdXRlciBsb29wCistCSAgICAgICB3aWxsIGV4aXQgYXQgdGhlIGBmZW9mJyB0ZXN0LiAgKi8KKy0JICAgICpjcCA9ICdcbic7CistCX0KKysgICAgICB3aGlsZSAoc3RyY2hyIChidWYsICdcbicpID09IE5VTEwpCisrCWlmIChGR0VUUyAoYnVmLCBzaXplb2YgYnVmLCBmcCkgPT0gTlVMTCkKKysJICAvKiBNYWtlIHN1cmUgdGhlIGlubmVyIGxvb3Agd2lsbCBiZSBsZWZ0LiAgVGhlIG91dGVyIGxvb3AKKysJICAgICB3aWxsIGV4aXQgYXQgdGhlIGBmZW9mJyB0ZXN0LiAgKi8KKysJICBicmVhazsKKyAgICAgfQorIAorICAgLyogU2hvdWxkIHdlIHRlc3QgZm9yIGZlcnJvcigpPyAgSSB0aGluayB3ZSBoYXZlIHRvIHNpbGVudGx5IGlnbm9yZQorQEAgLTMxNSw0MCArMzU4LDMzIEBACisgCisgICBpZiAoYWRkZWQgPiAwKQorICAgICBxc29ydCAobWFwLCBubWFwLCBzaXplb2YgKHN0cnVjdCBhbGlhc19tYXApLAorLQkgICAoaW50ICgqKSBQQVJBTVMgKChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpKSBhbGlhc19jb21wYXJlKTsKKysJICAgKGludCAoKikgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkgYWxpYXNfY29tcGFyZSk7CisgCistICBGUkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CisgICByZXR1cm4gYWRkZWQ7CisgfQorIAorIAorLXN0YXRpYyB2b2lkCisrc3RhdGljIGludAorIGV4dGVuZF9hbGlhc190YWJsZSAoKQorIHsKKyAgIHNpemVfdCBuZXdfc2l6ZTsKKyAgIHN0cnVjdCBhbGlhc19tYXAgKm5ld19tYXA7CisgCisgICBuZXdfc2l6ZSA9IG1heG1hcCA9PSAwID8gMTAwIDogMiAqIG1heG1hcDsKKy0gIG5ld19tYXAgPSAoc3RydWN0IGFsaWFzX21hcCAqKSBtYWxsb2MgKG5ld19zaXplCistCQkJCQkgKiBzaXplb2YgKHN0cnVjdCBhbGlhc19tYXApKTsKKysgIG5ld19tYXAgPSAoc3RydWN0IGFsaWFzX21hcCAqKSByZWFsbG9jIChtYXAsIChuZXdfc2l6ZQorKwkJCQkJCSogc2l6ZW9mIChzdHJ1Y3QgYWxpYXNfbWFwKSkpOworICAgaWYgKG5ld19tYXAgPT0gTlVMTCkKKyAgICAgLyogU2ltcGx5IGRvbid0IGV4dGVuZDogd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSBjb3JlLiAgKi8KKy0gICAgcmV0dXJuOworLQorLSAgbWVtY3B5IChuZXdfbWFwLCBtYXAsIG5tYXAgKiBzaXplb2YgKHN0cnVjdCBhbGlhc19tYXApKTsKKy0KKy0gIGlmIChtYXhtYXAgIT0gMCkKKy0gICAgZnJlZSAobWFwKTsKKysgICAgcmV0dXJuIC0xOworIAorICAgbWFwID0gbmV3X21hcDsKKyAgIG1heG1hcCA9IG5ld19zaXplOworKyAgcmV0dXJuIDA7CisgfQorIAorIAorIHN0YXRpYyBpbnQKKy1hbGlhc19jb21wYXJlIChtYXAxLCBtYXAyKQorLSAgICAgY29uc3Qgc3RydWN0IGFsaWFzX21hcCAqbWFwMTsKKy0gICAgIGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDI7CisrYWxpYXNfY29tcGFyZSAoY29uc3Qgc3RydWN0IGFsaWFzX21hcCAqbWFwMSwgY29uc3Qgc3RydWN0IGFsaWFzX21hcCAqbWFwMikKKyB7CisgI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1NUUkNBU0VDTVAKKyAgIHJldHVybiBzdHJjYXNlY21wIChtYXAxLT5hbGlhcywgbWFwMi0+YWxpYXMpOworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xvY2FsZW5hbWUuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sb2NhbGVuYW1lLmMJMjAwNC0wOS0xMiAxNDo0MDozNC41MTA3MjQ1MjggLTA0MDAKK0BAIC0wLDAgKzEsMTE0MiBAQAorKy8qIERldGVybWluZSB0aGUgY3VycmVudCBzZWxlY3RlZCBsb2NhbGUuCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrLyogV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUub3JnPiwgMTk5NS4gICovCisrLyogV2luMzIgY29kZSB3cml0dGVuIGJ5IFRvciBMaWxscXZpc3QgPHRtbEBpa2kuZmk+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxsb2NhbGUuaD4KKysKKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18KKysjIHVuZGVmIFdJTjMyICAgLyogYXZvaWQgd2FybmluZyBvbiBtaW5ndzMyICovCisrIyBkZWZpbmUgV0lOMzIKKysjZW5kaWYKKysKKysjaWZkZWYgV0lOMzIKKysjIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisrIyBpbmNsdWRlIDx3aW5kb3dzLmg+CisrLyogTGlzdCBvZiBsYW5ndWFnZSBjb2Rlcywgc29ydGVkIGJ5IHZhbHVlOgorKyAgIDB4MDEgTEFOR19BUkFCSUMKKysgICAweDAyIExBTkdfQlVMR0FSSUFOCisrICAgMHgwMyBMQU5HX0NBVEFMQU4KKysgICAweDA0IExBTkdfQ0hJTkVTRQorKyAgIDB4MDUgTEFOR19DWkVDSAorKyAgIDB4MDYgTEFOR19EQU5JU0gKKysgICAweDA3IExBTkdfR0VSTUFOCisrICAgMHgwOCBMQU5HX0dSRUVLCisrICAgMHgwOSBMQU5HX0VOR0xJU0gKKysgICAweDBhIExBTkdfU1BBTklTSAorKyAgIDB4MGIgTEFOR19GSU5OSVNICisrICAgMHgwYyBMQU5HX0ZSRU5DSAorKyAgIDB4MGQgTEFOR19IRUJSRVcKKysgICAweDBlIExBTkdfSFVOR0FSSUFOCisrICAgMHgwZiBMQU5HX0lDRUxBTkRJQworKyAgIDB4MTAgTEFOR19JVEFMSUFOCisrICAgMHgxMSBMQU5HX0pBUEFORVNFCisrICAgMHgxMiBMQU5HX0tPUkVBTgorKyAgIDB4MTMgTEFOR19EVVRDSAorKyAgIDB4MTQgTEFOR19OT1JXRUdJQU4KKysgICAweDE1IExBTkdfUE9MSVNICisrICAgMHgxNiBMQU5HX1BPUlRVR1VFU0UKKysgICAweDE3IExBTkdfUkhBRVRPX1JPTUFOQ0UKKysgICAweDE4IExBTkdfUk9NQU5JQU4KKysgICAweDE5IExBTkdfUlVTU0lBTgorKyAgIDB4MWEgTEFOR19DUk9BVElBTiA9PSBMQU5HX1NFUkJJQU4KKysgICAweDFiIExBTkdfU0xPVkFLCisrICAgMHgxYyBMQU5HX0FMQkFOSUFOCisrICAgMHgxZCBMQU5HX1NXRURJU0gKKysgICAweDFlIExBTkdfVEhBSQorKyAgIDB4MWYgTEFOR19UVVJLSVNICisrICAgMHgyMCBMQU5HX1VSRFUKKysgICAweDIxIExBTkdfSU5ET05FU0lBTgorKyAgIDB4MjIgTEFOR19VS1JBSU5JQU4KKysgICAweDIzIExBTkdfQkVMQVJVU0lBTgorKyAgIDB4MjQgTEFOR19TTE9WRU5JQU4KKysgICAweDI1IExBTkdfRVNUT05JQU4KKysgICAweDI2IExBTkdfTEFUVklBTgorKyAgIDB4MjcgTEFOR19MSVRIVUFOSUFOCisrICAgMHgyOCBMQU5HX1RBSklLCisrICAgMHgyOSBMQU5HX0ZBUlNJCisrICAgMHgyYSBMQU5HX1ZJRVROQU1FU0UKKysgICAweDJiIExBTkdfQVJNRU5JQU4KKysgICAweDJjIExBTkdfQVpFUkkKKysgICAweDJkIExBTkdfQkFTUVVFCisrICAgMHgyZSBMQU5HX1NPUkJJQU4KKysgICAweDJmIExBTkdfTUFDRURPTklBTgorKyAgIDB4MzAgTEFOR19TVVRVCisrICAgMHgzMSBMQU5HX1RTT05HQQorKyAgIDB4MzIgTEFOR19UU1dBTkEKKysgICAweDMzIExBTkdfVkVOREEKKysgICAweDM0IExBTkdfWEhPU0EKKysgICAweDM1IExBTkdfWlVMVQorKyAgIDB4MzYgTEFOR19BRlJJS0FBTlMKKysgICAweDM3IExBTkdfR0VPUkdJQU4KKysgICAweDM4IExBTkdfRkFFUk9FU0UKKysgICAweDM5IExBTkdfSElOREkKKysgICAweDNhIExBTkdfTUFMVEVTRQorKyAgIDB4M2IgTEFOR19TQUFNSQorKyAgIDB4M2MgTEFOR19HQUVMSUMKKysgICAweDNkIExBTkdfWUlERElTSAorKyAgIDB4M2UgTEFOR19NQUxBWQorKyAgIDB4M2YgTEFOR19LQVpBSworKyAgIDB4NDAgTEFOR19LWVJHWVoKKysgICAweDQxIExBTkdfU1dBSElMSQorKyAgIDB4NDIgTEFOR19UVVJLTUVOCisrICAgMHg0MyBMQU5HX1VaQkVLCisrICAgMHg0NCBMQU5HX1RBVEFSCisrICAgMHg0NSBMQU5HX0JFTkdBTEkKKysgICAweDQ2IExBTkdfUFVOSkFCSQorKyAgIDB4NDcgTEFOR19HVUpBUkFUSQorKyAgIDB4NDggTEFOR19PUklZQQorKyAgIDB4NDkgTEFOR19UQU1JTAorKyAgIDB4NGEgTEFOR19URUxVR1UKKysgICAweDRiIExBTkdfS0FOTkFEQQorKyAgIDB4NGMgTEFOR19NQUxBWUFMQU0KKysgICAweDRkIExBTkdfQVNTQU1FU0UKKysgICAweDRlIExBTkdfTUFSQVRISQorKyAgIDB4NGYgTEFOR19TQU5TS1JJVAorKyAgIDB4NTAgTEFOR19NT05HT0xJQU4KKysgICAweDUxIExBTkdfVElCRVRBTgorKyAgIDB4NTIgTEFOR19XRUxTSAorKyAgIDB4NTMgTEFOR19DQU1CT0RJQU4KKysgICAweDU0IExBTkdfTEFPCisrICAgMHg1NSBMQU5HX0JVUk1FU0UKKysgICAweDU2IExBTkdfR0FMSUNJQU4KKysgICAweDU3IExBTkdfS09OS0FOSQorKyAgIDB4NTggTEFOR19NQU5JUFVSSQorKyAgIDB4NTkgTEFOR19TSU5ESEkKKysgICAweDVhIExBTkdfU1lSSUFDCisrICAgMHg1YiBMQU5HX1NJTkhBTEVTRQorKyAgIDB4NWMgTEFOR19DSEVST0tFRQorKyAgIDB4NWQgTEFOR19JTlVLVElUVVQKKysgICAweDVlIExBTkdfQU1IQVJJQworKyAgIDB4NWYgTEFOR19UQU1BWklHSFQKKysgICAweDYwIExBTkdfS0FTSE1JUkkKKysgICAweDYxIExBTkdfTkVQQUxJCisrICAgMHg2MiBMQU5HX0ZSSVNJQU4KKysgICAweDYzIExBTkdfUEFTSFRPCisrICAgMHg2NCBMQU5HX1RBR0FMT0cKKysgICAweDY1IExBTkdfRElWRUhJCisrICAgMHg2NiBMQU5HX0VETworKyAgIDB4NjcgTEFOR19GVUxGVUxERQorKyAgIDB4NjggTEFOR19IQVVTQQorKyAgIDB4NjkgTEFOR19JQklCSU8KKysgICAweDZhIExBTkdfWU9SVUJBCisrICAgMHg3MCBMQU5HX0lHQk8KKysgICAweDcxIExBTkdfS0FOVVJJCisrICAgMHg3MiBMQU5HX09ST01PCisrICAgMHg3MyBMQU5HX1RJR1JJTllBCisrICAgMHg3NCBMQU5HX0dVQVJBTkkKKysgICAweDc1IExBTkdfSEFXQUlJQU4KKysgICAweDc2IExBTkdfTEFUSU4KKysgICAweDc3IExBTkdfU09NQUxJCisrICAgMHg3OCBMQU5HX1lJCisrICAgMHg3OSBMQU5HX1BBUElBTUVOVFUKKysqLworKy8qIE1pbmd3IGhlYWRlcnMgZG9uJ3QgaGF2ZSBsYXRlc3QgbGFuZ3VhZ2UgYW5kIHN1Ymxhbmd1YWdlIGNvZGVzLiAgKi8KKysjIGlmbmRlZiBMQU5HX0FGUklLQUFOUworKyMgZGVmaW5lIExBTkdfQUZSSUtBQU5TIDB4MzYKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19BTEJBTklBTgorKyMgZGVmaW5lIExBTkdfQUxCQU5JQU4gMHgxYworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0FNSEFSSUMKKysjIGRlZmluZSBMQU5HX0FNSEFSSUMgMHg1ZQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0FSQUJJQworKyMgZGVmaW5lIExBTkdfQVJBQklDIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19BUk1FTklBTgorKyMgZGVmaW5lIExBTkdfQVJNRU5JQU4gMHgyYgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0FTU0FNRVNFCisrIyBkZWZpbmUgTEFOR19BU1NBTUVTRSAweDRkCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQVpFUkkKKysjIGRlZmluZSBMQU5HX0FaRVJJIDB4MmMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19CQVNRVUUKKysjIGRlZmluZSBMQU5HX0JBU1FVRSAweDJkCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQkVMQVJVU0lBTgorKyMgZGVmaW5lIExBTkdfQkVMQVJVU0lBTiAweDIzCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQkVOR0FMSQorKyMgZGVmaW5lIExBTkdfQkVOR0FMSSAweDQ1CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQlVSTUVTRQorKyMgZGVmaW5lIExBTkdfQlVSTUVTRSAweDU1CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQ0FNQk9ESUFOCisrIyBkZWZpbmUgTEFOR19DQU1CT0RJQU4gMHg1MworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0NBVEFMQU4KKysjIGRlZmluZSBMQU5HX0NBVEFMQU4gMHgwMworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0NIRVJPS0VFCisrIyBkZWZpbmUgTEFOR19DSEVST0tFRSAweDVjCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfRElWRUhJCisrIyBkZWZpbmUgTEFOR19ESVZFSEkgMHg2NQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0VETworKyMgZGVmaW5lIExBTkdfRURPIDB4NjYKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19FU1RPTklBTgorKyMgZGVmaW5lIExBTkdfRVNUT05JQU4gMHgyNQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0ZBRVJPRVNFCisrIyBkZWZpbmUgTEFOR19GQUVST0VTRSAweDM4CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfRkFSU0kKKysjIGRlZmluZSBMQU5HX0ZBUlNJIDB4MjkKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19GUklTSUFOCisrIyBkZWZpbmUgTEFOR19GUklTSUFOIDB4NjIKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19GVUxGVUxERQorKyMgZGVmaW5lIExBTkdfRlVMRlVMREUgMHg2NworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0dBRUxJQworKyMgZGVmaW5lIExBTkdfR0FFTElDIDB4M2MKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19HQUxJQ0lBTgorKyMgZGVmaW5lIExBTkdfR0FMSUNJQU4gMHg1NgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0dFT1JHSUFOCisrIyBkZWZpbmUgTEFOR19HRU9SR0lBTiAweDM3CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfR1VBUkFOSQorKyMgZGVmaW5lIExBTkdfR1VBUkFOSSAweDc0CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfR1VKQVJBVEkKKysjIGRlZmluZSBMQU5HX0dVSkFSQVRJIDB4NDcKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19IQVVTQQorKyMgZGVmaW5lIExBTkdfSEFVU0EgMHg2OAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0hBV0FJSUFOCisrIyBkZWZpbmUgTEFOR19IQVdBSUlBTiAweDc1CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSEVCUkVXCisrIyBkZWZpbmUgTEFOR19IRUJSRVcgMHgwZAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0hJTkRJCisrIyBkZWZpbmUgTEFOR19ISU5ESSAweDM5CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSUJJQklPCisrIyBkZWZpbmUgTEFOR19JQklCSU8gMHg2OQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0lHQk8KKysjIGRlZmluZSBMQU5HX0lHQk8gMHg3MAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0lORE9ORVNJQU4KKysjIGRlZmluZSBMQU5HX0lORE9ORVNJQU4gMHgyMQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0lOVUtUSVRVVAorKyMgZGVmaW5lIExBTkdfSU5VS1RJVFVUIDB4NWQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19LQU5OQURBCisrIyBkZWZpbmUgTEFOR19LQU5OQURBIDB4NGIKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19LQU5VUkkKKysjIGRlZmluZSBMQU5HX0tBTlVSSSAweDcxCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfS0FTSE1JUkkKKysjIGRlZmluZSBMQU5HX0tBU0hNSVJJIDB4NjAKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19LQVpBSworKyMgZGVmaW5lIExBTkdfS0FaQUsgMHgzZgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0tPTktBTkkKKysjIGRlZmluZSBMQU5HX0tPTktBTkkgMHg1NworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0tZUkdZWgorKyMgZGVmaW5lIExBTkdfS1lSR1laIDB4NDAKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19MQU8KKysjIGRlZmluZSBMQU5HX0xBTyAweDU0CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTEFUSU4KKysjIGRlZmluZSBMQU5HX0xBVElOIDB4NzYKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19MQVRWSUFOCisrIyBkZWZpbmUgTEFOR19MQVRWSUFOIDB4MjYKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19MSVRIVUFOSUFOCisrIyBkZWZpbmUgTEFOR19MSVRIVUFOSUFOIDB4MjcKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19NQUNFRE9OSUFOCisrIyBkZWZpbmUgTEFOR19NQUNFRE9OSUFOIDB4MmYKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19NQUxBWQorKyMgZGVmaW5lIExBTkdfTUFMQVkgMHgzZQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01BTEFZQUxBTQorKyMgZGVmaW5lIExBTkdfTUFMQVlBTEFNIDB4NGMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19NQUxURVNFCisrIyBkZWZpbmUgTEFOR19NQUxURVNFIDB4M2EKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19NQU5JUFVSSQorKyMgZGVmaW5lIExBTkdfTUFOSVBVUkkgMHg1OAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01BUkFUSEkKKysjIGRlZmluZSBMQU5HX01BUkFUSEkgMHg0ZQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01PTkdPTElBTgorKyMgZGVmaW5lIExBTkdfTU9OR09MSUFOIDB4NTAKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19ORVBBTEkKKysjIGRlZmluZSBMQU5HX05FUEFMSSAweDYxCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfT1JJWUEKKysjIGRlZmluZSBMQU5HX09SSVlBIDB4NDgKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19PUk9NTworKyMgZGVmaW5lIExBTkdfT1JPTU8gMHg3MgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1BBUElBTUVOVFUKKysjIGRlZmluZSBMQU5HX1BBUElBTUVOVFUgMHg3OQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1BBU0hUTworKyMgZGVmaW5lIExBTkdfUEFTSFRPIDB4NjMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19QVU5KQUJJCisrIyBkZWZpbmUgTEFOR19QVU5KQUJJIDB4NDYKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19SSEFFVE9fUk9NQU5DRQorKyMgZGVmaW5lIExBTkdfUkhBRVRPX1JPTUFOQ0UgMHgxNworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NBQU1JCisrIyBkZWZpbmUgTEFOR19TQUFNSSAweDNiCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfU0FOU0tSSVQKKysjIGRlZmluZSBMQU5HX1NBTlNLUklUIDB4NGYKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TRVJCSUFOCisrIyBkZWZpbmUgTEFOR19TRVJCSUFOIDB4MWEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TSU5ESEkKKysjIGRlZmluZSBMQU5HX1NJTkRISSAweDU5CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfU0lOSEFMRVNFCisrIyBkZWZpbmUgTEFOR19TSU5IQUxFU0UgMHg1YgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NMT1ZBSworKyMgZGVmaW5lIExBTkdfU0xPVkFLIDB4MWIKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TT01BTEkKKysjIGRlZmluZSBMQU5HX1NPTUFMSSAweDc3CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfU09SQklBTgorKyMgZGVmaW5lIExBTkdfU09SQklBTiAweDJlCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfU1VUVQorKyMgZGVmaW5lIExBTkdfU1VUVSAweDMwCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfU1dBSElMSQorKyMgZGVmaW5lIExBTkdfU1dBSElMSSAweDQxCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfU1lSSUFDCisrIyBkZWZpbmUgTEFOR19TWVJJQUMgMHg1YQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1RBR0FMT0cKKysjIGRlZmluZSBMQU5HX1RBR0FMT0cgMHg2NAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1RBSklLCisrIyBkZWZpbmUgTEFOR19UQUpJSyAweDI4CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVEFNQVpJR0hUCisrIyBkZWZpbmUgTEFOR19UQU1BWklHSFQgMHg1ZgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1RBTUlMCisrIyBkZWZpbmUgTEFOR19UQU1JTCAweDQ5CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVEFUQVIKKysjIGRlZmluZSBMQU5HX1RBVEFSIDB4NDQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19URUxVR1UKKysjIGRlZmluZSBMQU5HX1RFTFVHVSAweDRhCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVEhBSQorKyMgZGVmaW5lIExBTkdfVEhBSSAweDFlCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVElCRVRBTgorKyMgZGVmaW5lIExBTkdfVElCRVRBTiAweDUxCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVElHUklOWUEKKysjIGRlZmluZSBMQU5HX1RJR1JJTllBIDB4NzMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19UU09OR0EKKysjIGRlZmluZSBMQU5HX1RTT05HQSAweDMxCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVFNXQU5BCisrIyBkZWZpbmUgTEFOR19UU1dBTkEgMHgzMgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1RVUktNRU4KKysjIGRlZmluZSBMQU5HX1RVUktNRU4gMHg0MgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1VLUkFJTklBTgorKyMgZGVmaW5lIExBTkdfVUtSQUlOSUFOIDB4MjIKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19VUkRVCisrIyBkZWZpbmUgTEFOR19VUkRVIDB4MjAKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19VWkJFSworKyMgZGVmaW5lIExBTkdfVVpCRUsgMHg0MworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1ZFTkRBCisrIyBkZWZpbmUgTEFOR19WRU5EQSAweDMzCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVklFVE5BTUVTRQorKyMgZGVmaW5lIExBTkdfVklFVE5BTUVTRSAweDJhCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfV0VMU0gKKysjIGRlZmluZSBMQU5HX1dFTFNIIDB4NTIKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19YSE9TQQorKyMgZGVmaW5lIExBTkdfWEhPU0EgMHgzNAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1lJCisrIyBkZWZpbmUgTEFOR19ZSSAweDc4CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfWUlERElTSAorKyMgZGVmaW5lIExBTkdfWUlERElTSCAweDNkCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfWU9SVUJBCisrIyBkZWZpbmUgTEFOR19ZT1JVQkEgMHg2YQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1pVTFUKKysjIGRlZmluZSBMQU5HX1pVTFUgMHgzNQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19TQVVESV9BUkFCSUEKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19TQVVESV9BUkFCSUEgMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19JUkFRCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfSVJBUSAweDAyCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0VHWVBUCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfRUdZUFQgMHgwMworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19MSUJZQQorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX0xJQllBIDB4MDQKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfQUxHRVJJQQorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX0FMR0VSSUEgMHgwNQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19NT1JPQ0NPCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfTU9ST0NDTyAweDA2CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1RVTklTSUEKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19UVU5JU0lBIDB4MDcKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfT01BTgorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX09NQU4gMHgwOAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19ZRU1FTgorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1lFTUVOIDB4MDkKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfU1lSSUEKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19TWVJJQSAweDBhCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0pPUkRBTgorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX0pPUkRBTiAweDBiCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0xFQkFOT04KKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19MRUJBTk9OIDB4MGMKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfS1VXQUlUCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfS1VXQUlUIDB4MGQKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfVUFFCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfVUFFIDB4MGUKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfQkFIUkFJTgorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX0JBSFJBSU4gMHgwZgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19RQVRBUgorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1FBVEFSIDB4MTAKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BWkVSSV9MQVRJTgorKyMgZGVmaW5lIFNVQkxBTkdfQVpFUklfTEFUSU4gMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FaRVJJX0NZUklMTElDCisrIyBkZWZpbmUgU1VCTEFOR19BWkVSSV9DWVJJTExJQyAweDAyCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQkVOR0FMSV9JTkRJQQorKyMgZGVmaW5lIFNVQkxBTkdfQkVOR0FMSV9JTkRJQSAweDAwCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQkVOR0FMSV9CQU5HTEFERVNICisrIyBkZWZpbmUgU1VCTEFOR19CRU5HQUxJX0JBTkdMQURFU0ggMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0NISU5FU0VfTUFDQVUKKysjIGRlZmluZSBTVUJMQU5HX0NISU5FU0VfTUFDQVUgMHgwNQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfU09VVEhfQUZSSUNBCisrIyBkZWZpbmUgU1VCTEFOR19FTkdMSVNIX1NPVVRIX0FGUklDQSAweDA3CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9KQU1BSUNBCisrIyBkZWZpbmUgU1VCTEFOR19FTkdMSVNIX0pBTUFJQ0EgMHgwOAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfQ0FSSUJCRUFOCisrIyBkZWZpbmUgU1VCTEFOR19FTkdMSVNIX0NBUklCQkVBTiAweDA5CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9CRUxJWkUKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfQkVMSVpFIDB4MGEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX1RSSU5JREFECisrIyBkZWZpbmUgU1VCTEFOR19FTkdMSVNIX1RSSU5JREFEIDB4MGIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX1pJTUJBQldFCisrIyBkZWZpbmUgU1VCTEFOR19FTkdMSVNIX1pJTUJBQldFIDB4MGMKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX1BISUxJUFBJTkVTCisrIyBkZWZpbmUgU1VCTEFOR19FTkdMSVNIX1BISUxJUFBJTkVTIDB4MGQKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX0lORE9ORVNJQQorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9JTkRPTkVTSUEgMHgwZQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfSE9OR0tPTkcKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfSE9OR0tPTkcgMHgwZgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfSU5ESUEKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfSU5ESUEgMHgxMAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfTUFMQVlTSUEKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfTUFMQVlTSUEgMHgxMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfU0lOR0FQT1JFCisrIyBkZWZpbmUgU1VCTEFOR19FTkdMSVNIX1NJTkdBUE9SRSAweDEyCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX0xVWEVNQk9VUkcKKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9MVVhFTUJPVVJHIDB4MDUKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfTU9OQUNPCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfTU9OQUNPIDB4MDYKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfV0VTVElORElFUworKyMgZGVmaW5lIFNVQkxBTkdfRlJFTkNIX1dFU1RJTkRJRVMgMHgwNworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9SRVVOSU9OCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfUkVVTklPTiAweDA4CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX0NPTkdPCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfQ09OR08gMHgwOQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9TRU5FR0FMCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfU0VORUdBTCAweDBhCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX0NBTUVST09OCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfQ0FNRVJPT04gMHgwYgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9DT1RFRElWT0lSRQorKyMgZGVmaW5lIFNVQkxBTkdfRlJFTkNIX0NPVEVESVZPSVJFIDB4MGMKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfTUFMSQorKyMgZGVmaW5lIFNVQkxBTkdfRlJFTkNIX01BTEkgMHgwZAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9NT1JPQ0NPCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfTU9ST0NDTyAweDBlCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX0hBSVRJCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfSEFJVEkgMHgwZgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0dFUk1BTl9MVVhFTUJPVVJHCisrIyBkZWZpbmUgU1VCTEFOR19HRVJNQU5fTFVYRU1CT1VSRyAweDA0CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfR0VSTUFOX0xJRUNIVEVOU1RFSU4KKysjIGRlZmluZSBTVUJMQU5HX0dFUk1BTl9MSUVDSFRFTlNURUlOIDB4MDUKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19LQVNITUlSSV9JTkRJQQorKyMgZGVmaW5lIFNVQkxBTkdfS0FTSE1JUklfSU5ESUEgMHgwMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX01BTEFZX01BTEFZU0lBCisrIyBkZWZpbmUgU1VCTEFOR19NQUxBWV9NQUxBWVNJQSAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfTUFMQVlfQlJVTkVJX0RBUlVTU0FMQU0KKysjIGRlZmluZSBTVUJMQU5HX01BTEFZX0JSVU5FSV9EQVJVU1NBTEFNIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19ORVBBTElfSU5ESUEKKysjIGRlZmluZSBTVUJMQU5HX05FUEFMSV9JTkRJQSAweDAyCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfUFVOSkFCSV9JTkRJQQorKyMgZGVmaW5lIFNVQkxBTkdfUFVOSkFCSV9JTkRJQSAweDAwCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfUFVOSkFCSV9QQUtJU1RBTgorKyMgZGVmaW5lIFNVQkxBTkdfUFVOSkFCSV9QQUtJU1RBTiAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfUk9NQU5JQU5fUk9NQU5JQQorKyMgZGVmaW5lIFNVQkxBTkdfUk9NQU5JQU5fUk9NQU5JQSAweDAwCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfUk9NQU5JQU5fTU9MRE9WQQorKyMgZGVmaW5lIFNVQkxBTkdfUk9NQU5JQU5fTU9MRE9WQSAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU0VSQklBTl9MQVRJTgorKyMgZGVmaW5lIFNVQkxBTkdfU0VSQklBTl9MQVRJTiAweDAyCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU0VSQklBTl9DWVJJTExJQworKyMgZGVmaW5lIFNVQkxBTkdfU0VSQklBTl9DWVJJTExJQyAweDAzCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU0lOREhJX0lORElBCisrIyBkZWZpbmUgU1VCTEFOR19TSU5ESElfSU5ESUEgMHgwMAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NJTkRISV9QQUtJU1RBTgorKyMgZGVmaW5lIFNVQkxBTkdfU0lOREhJX1BBS0lTVEFOIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0dVQVRFTUFMQQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9HVUFURU1BTEEgMHgwNAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfQ09TVEFfUklDQQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9DT1NUQV9SSUNBIDB4MDUKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1BBTkFNQQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QQU5BTUEgMHgwNgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfRE9NSU5JQ0FOX1JFUFVCTElDCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0RPTUlOSUNBTl9SRVBVQkxJQyAweDA3CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9WRU5FWlVFTEEKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfVkVORVpVRUxBIDB4MDgKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0NPTE9NQklBCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0NPTE9NQklBIDB4MDkKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1BFUlUKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfUEVSVSAweDBhCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9BUkdFTlRJTkEKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfQVJHRU5USU5BIDB4MGIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0VDVUFET1IKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfRUNVQURPUiAweDBjCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9DSElMRQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9DSElMRSAweDBkCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9VUlVHVUFZCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX1VSVUdVQVkgMHgwZQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfUEFSQUdVQVkKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfUEFSQUdVQVkgMHgwZgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfQk9MSVZJQQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9CT0xJVklBIDB4MTAKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0VMX1NBTFZBRE9SCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0VMX1NBTFZBRE9SIDB4MTEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0hPTkRVUkFTCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0hPTkRVUkFTIDB4MTIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX05JQ0FSQUdVQQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9OSUNBUkFHVUEgMHgxMworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfUFVFUlRPX1JJQ08KKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfUFVFUlRPX1JJQ08gMHgxNAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NXRURJU0hfRklOTEFORAorKyMgZGVmaW5lIFNVQkxBTkdfU1dFRElTSF9GSU5MQU5EIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19UQU1BWklHSFRfQVJBQklDCisrIyBkZWZpbmUgU1VCTEFOR19UQU1BWklHSFRfQVJBQklDIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19UQU1BWklHSFRfTEFUSU4KKysjIGRlZmluZSBTVUJMQU5HX1RBTUFaSUdIVF9MQVRJTiAweDAyCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfVElHUklOWUFfRVRISU9QSUEKKysjIGRlZmluZSBTVUJMQU5HX1RJR1JJTllBX0VUSElPUElBIDB4MDAKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19USUdSSU5ZQV9FUklUUkVBCisrIyBkZWZpbmUgU1VCTEFOR19USUdSSU5ZQV9FUklUUkVBIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19VUkRVX1BBS0lTVEFOCisrIyBkZWZpbmUgU1VCTEFOR19VUkRVX1BBS0lTVEFOIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19VUkRVX0lORElBCisrIyBkZWZpbmUgU1VCTEFOR19VUkRVX0lORElBIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19VWkJFS19MQVRJTgorKyMgZGVmaW5lIFNVQkxBTkdfVVpCRUtfTEFUSU4gMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1VaQkVLX0NZUklMTElDCisrIyBkZWZpbmUgU1VCTEFOR19VWkJFS19DWVJJTExJQyAweDAyCisrIyBlbmRpZgorKyNlbmRpZgorKworKy8qIFhQRzMgZGVmaW5lcyB0aGUgcmVzdWx0IG9mICdzZXRsb2NhbGUgKGNhdGVnb3J5LCBOVUxMKScgYXM6CisrICAgIkRpcmVjdHMgJ3NldGxvY2FsZSgpJyB0byBxdWVyeSAnY2F0ZWdvcnknIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQKKysgICAgc2V0dGluZyBvZiAnbG9jYWwnLiIKKysgICBIb3dldmVyIGl0IGRvZXMgbm90IHNwZWNpZnkgdGhlIGV4YWN0IGZvcm1hdC4gIE5laXRoZXIgZG8gU1VTVjIgYW5kCisrICAgSVNPIEMgOTkuICBTbyB3ZSBjYW4gdXNlIHRoaXMgZmVhdHVyZSBvbmx5IG9uIHNlbGVjdGVkIHN5c3RlbXMgKGUuZy4KKysgICB0aG9zZSB1c2luZyBHTlUgQyBMaWJyYXJ5KS4gICovCisrI2lmIGRlZmluZWQgX0xJQkMgfHwgKGRlZmluZWQgX19HTlVfTElCUkFSWV9fICYmIF9fR05VX0xJQlJBUllfXyA+PSAyKQorKyMgZGVmaW5lIEhBVkVfTE9DQUxFX05VTEwKKysjZW5kaWYKKysKKysvKiBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgbmFtZSwgYW5kIGNhbm9uaWNhbGl6ZSBpdCBpbnRvIFhQRyBzeW50YXgKKysgICAgIGxhbmd1YWdlW190ZXJyaXRvcnlbLmNvZGVzZXRdXVtAbW9kaWZpZXJdCisrICAgVGhlIGNvZGVzZXQgcGFydCBpbiB0aGUgcmVzdWx0IGlzIG5vdCByZWxpYWJsZTsgdGhlIGxvY2FsZV9jaGFyc2V0KCkKKysgICBzaG91bGQgYmUgdXNlZCBmb3IgY29kZXNldCBpbmZvcm1hdGlvbiBpbnN0ZWFkLgorKyAgIFRoZSByZXN1bHQgbXVzdCBub3QgYmUgZnJlZWQ7IGl0IGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkLiAgKi8KKysKKytjb25zdCBjaGFyICoKKytfbmxfbG9jYWxlX25hbWUgKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lKQorK3sKKysgIGNvbnN0IGNoYXIgKnJldHZhbDsKKysKKysjaWZuZGVmIFdJTjMyCisrCisrICAvKiBVc2UgdGhlIFBPU0lYIG1ldGhvZHMgb2YgbG9va2luZyB0byAnTENfQUxMJywgJ0xDX3h4eCcsIGFuZCAnTEFORycuCisrICAgICBPbiBzb21lIHN5c3RlbXMgdGhpcyBjYW4gYmUgZG9uZSBieSB0aGUgJ3NldGxvY2FsZScgZnVuY3Rpb24gaXRzZWxmLiAgKi8KKysjIGlmIGRlZmluZWQgSEFWRV9TRVRMT0NBTEUgJiYgZGVmaW5lZCBIQVZFX0xDX01FU1NBR0VTICYmIGRlZmluZWQgSEFWRV9MT0NBTEVfTlVMTAorKyAgcmV0dmFsID0gc2V0bG9jYWxlIChjYXRlZ29yeSwgTlVMTCk7CisrIyBlbHNlCisrICAvKiBTZXR0aW5nIG9mIExDX0FMTCBvdmVyd3JpdGVzIGFsbCBvdGhlci4gICovCisrICByZXR2YWwgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKysgIGlmIChyZXR2YWwgPT0gTlVMTCB8fCByZXR2YWxbMF0gPT0gJ1wwJykKKysgICAgeworKyAgICAgIC8qIE5leHQgY29tZXMgdGhlIG5hbWUgb2YgdGhlIGRlc2lyZWQgY2F0ZWdvcnkuICAqLworKyAgICAgIHJldHZhbCA9IGdldGVudiAoY2F0ZWdvcnluYW1lKTsKKysgICAgICBpZiAocmV0dmFsID09IE5VTEwgfHwgcmV0dmFsWzBdID09ICdcMCcpCisrCXsKKysJICAvKiBMYXN0IHBvc3NpYmlsaXR5IGlzIHRoZSBMQU5HIGVudmlyb25tZW50IHZhcmlhYmxlLiAgKi8KKysJICByZXR2YWwgPSBnZXRlbnYgKCJMQU5HIik7CisrCSAgaWYgKHJldHZhbCA9PSBOVUxMIHx8IHJldHZhbFswXSA9PSAnXDAnKQorKwkgICAgLyogV2UgdXNlIEMgYXMgdGhlIGRlZmF1bHQgZG9tYWluLiAgUE9TSVggc2F5cyB0aGlzIGlzCisrCSAgICAgICBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLiAgKi8KKysJICAgIHJldHZhbCA9ICJDIjsKKysJfQorKyAgICB9CisrIyBlbmRpZgorKworKyAgcmV0dXJuIHJldHZhbDsKKysKKysjZWxzZSAvKiBXSU4zMiAqLworKworKyAgLyogUmV0dXJuIGFuIFhQRyBzdHlsZSBsb2NhbGUgbmFtZSBsYW5ndWFnZVtfdGVycml0b3J5XVtAbW9kaWZpZXJdLgorKyAgICAgRG9uJ3QgZXZlbiBib3RoZXIgZGV0ZXJtaW5pbmcgdGhlIGNvZGVzZXQ7IGl0J3Mgbm90IHVzZWZ1bCBpbiB0aGlzCisrICAgICBjb250ZXh0LCBiZWNhdXNlIG1lc3NhZ2UgY2F0YWxvZ3MgYXJlIG5vdCBzcGVjaWZpYyB0byBhIHNpbmdsZQorKyAgICAgY29kZXNldC4gICovCisrCisrICBMQ0lEIGxjaWQ7CisrICBMQU5HSUQgbGFuZ2lkOworKyAgaW50IHByaW1hcnksIHN1YjsKKysKKysgIC8qIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgc3lzdGVtIHNldHRpbmdzIHRocm91Z2ggZW52aXJvbm1lbnQKKysgICAgIHZhcmlhYmxlcywgYXMgb24gUE9TSVggc3lzdGVtcy4gICovCisrICByZXR2YWwgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKysgIGlmIChyZXR2YWwgIT0gTlVMTCAmJiByZXR2YWxbMF0gIT0gJ1wwJykKKysgICAgcmV0dXJuIHJldHZhbDsKKysgIHJldHZhbCA9IGdldGVudiAoY2F0ZWdvcnluYW1lKTsKKysgIGlmIChyZXR2YWwgIT0gTlVMTCAmJiByZXR2YWxbMF0gIT0gJ1wwJykKKysgICAgcmV0dXJuIHJldHZhbDsKKysgIHJldHZhbCA9IGdldGVudiAoIkxBTkciKTsKKysgIGlmIChyZXR2YWwgIT0gTlVMTCAmJiByZXR2YWxbMF0gIT0gJ1wwJykKKysgICAgcmV0dXJuIHJldHZhbDsKKysKKysgIC8qIFVzZSBuYXRpdmUgV2luMzIgQVBJIGxvY2FsZSBJRC4gICovCisrICBsY2lkID0gR2V0VGhyZWFkTG9jYWxlICgpOworKworKyAgLyogU3RyaXAgb2ZmIHRoZSBzb3J0aW5nIHJ1bGVzLCBrZWVwIG9ubHkgdGhlIGxhbmd1YWdlIHBhcnQuICAqLworKyAgbGFuZ2lkID0gTEFOR0lERlJPTUxDSUQgKGxjaWQpOworKworKyAgLyogU3BsaXQgaW50byBsYW5ndWFnZSBhbmQgdGVycml0b3J5IHBhcnQuICAqLworKyAgcHJpbWFyeSA9IFBSSU1BUllMQU5HSUQgKGxhbmdpZCk7CisrICBzdWIgPSBTVUJMQU5HSUQgKGxhbmdpZCk7CisrCisrICAvKiBEaXNwYXRjaCBvbiBsYW5ndWFnZS4KKysgICAgIFNlZSBhbHNvIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvdW5pY29kZS9vbmxpbmVkYXQvbGFuZ3VhZ2VzLmh0bWwgLgorKyAgICAgRm9yIGRldGFpbHMgYWJvdXQgbGFuZ3VhZ2VzLCBzZWUgaHR0cDovL3d3dy5ldGhub2xvZ3VlLmNvbS8gLiAgKi8KKysgIHN3aXRjaCAocHJpbWFyeSkKKysgICAgeworKyAgICBjYXNlIExBTkdfQUZSSUtBQU5TOiByZXR1cm4gImFmX1pBIjsKKysgICAgY2FzZSBMQU5HX0FMQkFOSUFOOiByZXR1cm4gInNxX0FMIjsKKysgICAgY2FzZSBMQU5HX0FNSEFSSUM6IHJldHVybiAiYW1fRVQiOworKyAgICBjYXNlIExBTkdfQVJBQklDOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfU0FVRElfQVJBQklBOiByZXR1cm4gImFyX1NBIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19JUkFROiByZXR1cm4gImFyX0lRIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19FR1lQVDogcmV0dXJuICJhcl9FRyI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfTElCWUE6IHJldHVybiAiYXJfTFkiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0FMR0VSSUE6IHJldHVybiAiYXJfRFoiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX01PUk9DQ086IHJldHVybiAiYXJfTUEiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX1RVTklTSUE6IHJldHVybiAiYXJfVE4iOworKwljYXNlIFNVQkxBTkdfQVJBQklDX09NQU46IHJldHVybiAiYXJfT00iOworKwljYXNlIFNVQkxBTkdfQVJBQklDX1lFTUVOOiByZXR1cm4gImFyX1lFIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19TWVJJQTogcmV0dXJuICJhcl9TWSI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfSk9SREFOOiByZXR1cm4gImFyX0pPIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19MRUJBTk9OOiByZXR1cm4gImFyX0xCIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19LVVdBSVQ6IHJldHVybiAiYXJfS1ciOworKwljYXNlIFNVQkxBTkdfQVJBQklDX1VBRTogcmV0dXJuICJhcl9BRSI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfQkFIUkFJTjogcmV0dXJuICJhcl9CSCI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfUUFUQVI6IHJldHVybiAiYXJfUUEiOworKwl9CisrICAgICAgcmV0dXJuICJhciI7CisrICAgIGNhc2UgTEFOR19BUk1FTklBTjogcmV0dXJuICJoeV9BTSI7CisrICAgIGNhc2UgTEFOR19BU1NBTUVTRTogcmV0dXJuICJhc19JTiI7CisrICAgIGNhc2UgTEFOR19BWkVSSToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwkvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBBemVyYmFpamFuaSBsb2NhbGVzIGFwcGVhciBvbiBVbml4LiAgKi8KKysJY2FzZSBTVUJMQU5HX0FaRVJJX0xBVElOOiByZXR1cm4gImF6X0FaQGxhdGluIjsKKysJY2FzZSBTVUJMQU5HX0FaRVJJX0NZUklMTElDOiByZXR1cm4gImF6X0FaQGN5cmlsbGljIjsKKysJfQorKyAgICAgIHJldHVybiAiYXoiOworKyAgICBjYXNlIExBTkdfQkFTUVVFOgorKyAgICAgIHJldHVybiAiZXUiOyAvKiBBbWJpZ3VvdXM6IGNvdWxkIGJlICJldV9FUyIgb3IgImV1X0ZSIi4gICovCisrICAgIGNhc2UgTEFOR19CRUxBUlVTSUFOOiByZXR1cm4gImJlX0JZIjsKKysgICAgY2FzZSBMQU5HX0JFTkdBTEk6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0JFTkdBTElfSU5ESUE6IHJldHVybiAiYm5fSU4iOworKwljYXNlIFNVQkxBTkdfQkVOR0FMSV9CQU5HTEFERVNIOiByZXR1cm4gImJuX0JEIjsKKysJfQorKyAgICAgIHJldHVybiAiYm4iOworKyAgICBjYXNlIExBTkdfQlVMR0FSSUFOOiByZXR1cm4gImJnX0JHIjsKKysgICAgY2FzZSBMQU5HX0JVUk1FU0U6IHJldHVybiAibXlfTU0iOworKyAgICBjYXNlIExBTkdfQ0FNQk9ESUFOOiByZXR1cm4gImttX0tIIjsKKysgICAgY2FzZSBMQU5HX0NBVEFMQU46IHJldHVybiAiY2FfRVMiOworKyAgICBjYXNlIExBTkdfQ0hFUk9LRUU6IHJldHVybiAiY2hyX1VTIjsKKysgICAgY2FzZSBMQU5HX0NISU5FU0U6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0NISU5FU0VfVFJBRElUSU9OQUw6IHJldHVybiAiemhfVFciOworKwljYXNlIFNVQkxBTkdfQ0hJTkVTRV9TSU1QTElGSUVEOiByZXR1cm4gInpoX0NOIjsKKysJY2FzZSBTVUJMQU5HX0NISU5FU0VfSE9OR0tPTkc6IHJldHVybiAiemhfSEsiOworKwljYXNlIFNVQkxBTkdfQ0hJTkVTRV9TSU5HQVBPUkU6IHJldHVybiAiemhfU0ciOworKwljYXNlIFNVQkxBTkdfQ0hJTkVTRV9NQUNBVTogcmV0dXJuICJ6aF9NTyI7CisrCX0KKysgICAgICByZXR1cm4gInpoIjsKKysgICAgY2FzZSBMQU5HX0NST0FUSUFOOgkJLyogTEFOR19DUk9BVElBTiA9PSBMQU5HX1NFUkJJQU4KKysJCQkJICogV2hhdCB1c2VkIHRvIGJlIGNhbGxlZCBTZXJiby1Dcm9hdGlhbgorKwkJCQkgKiBzaG91bGQgcmVhbGx5IG5vdyBiZSB0d28gc2VwYXJhdGUKKysJCQkJICogbGFuZ3VhZ2VzIGJlY2F1c2Ugb2YgcG9saXRpY2FsIHJlYXNvbnMuCisrCQkJCSAqIChTYXlzIHRtbCwgd2hvIGtub3dzIG5vdGhpbmcgYWJvdXQgU2VyYmlhbgorKwkJCQkgKiBvciBDcm9hdGlhbi4pCisrCQkJCSAqIChJIGNhbiBmZWVsIHRob3NlIGZsYW1lcyBjb21pbmcgYWxyZWFkeS4pCisrCQkJCSAqLworKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19ERUZBVUxUOiByZXR1cm4gImhyX0hSIjsKKysJY2FzZSBTVUJMQU5HX1NFUkJJQU5fTEFUSU46IHJldHVybiAic3JfQ1MiOworKwljYXNlIFNVQkxBTkdfU0VSQklBTl9DWVJJTExJQzogcmV0dXJuICJzcl9DU0BjeXJpbGxpYyI7CisrCX0KKysgICAgICByZXR1cm4gImhyIjsKKysgICAgY2FzZSBMQU5HX0NaRUNIOiByZXR1cm4gImNzX0NaIjsKKysgICAgY2FzZSBMQU5HX0RBTklTSDogcmV0dXJuICJkYV9ESyI7CisrICAgIGNhc2UgTEFOR19ESVZFSEk6IHJldHVybiAiZHZfTVYiOworKyAgICBjYXNlIExBTkdfRFVUQ0g6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0RVVENIOiByZXR1cm4gIm5sX05MIjsKKysJY2FzZSBTVUJMQU5HX0RVVENIX0JFTEdJQU46IC8qIEZMRU1JU0gsIFZMQUFNUyAqLyByZXR1cm4gIm5sX0JFIjsKKysJfQorKyAgICAgIHJldHVybiAibmwiOworKyAgICBjYXNlIExBTkdfRURPOiByZXR1cm4gImJpbl9ORyI7CisrICAgIGNhc2UgTEFOR19FTkdMSVNIOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCS8qIFNVQkxBTkdfRU5HTElTSF9VUyA9PSBTVUJMQU5HX0RFRkFVTFQuIEhlaC4gSSB0aG91Z2h0CisrCSAqIEVuZ2xpc2ggd2FzIHRoZSBsYW5ndWFnZSBzcG9rZW4gaW4gRW5nbGFuZC4KKysJICogT2ggd2VsbC4KKysJICovCisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX1VTOiByZXR1cm4gImVuX1VTIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfVUs6IHJldHVybiAiZW5fR0IiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9BVVM6IHJldHVybiAiZW5fQVUiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9DQU46IHJldHVybiAiZW5fQ0EiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9OWjogcmV0dXJuICJlbl9OWiI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0VJUkU6IHJldHVybiAiZW5fSUUiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9TT1VUSF9BRlJJQ0E6IHJldHVybiAiZW5fWkEiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9KQU1BSUNBOiByZXR1cm4gImVuX0pNIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfQ0FSSUJCRUFOOiByZXR1cm4gImVuX0dEIjsgLyogR3JlbmFkYT8gKi8KKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfQkVMSVpFOiByZXR1cm4gImVuX0JaIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfVFJJTklEQUQ6IHJldHVybiAiZW5fVFQiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9aSU1CQUJXRTogcmV0dXJuICJlbl9aVyI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX1BISUxJUFBJTkVTOiByZXR1cm4gImVuX1BIIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfSU5ET05FU0lBOiByZXR1cm4gImVuX0lEIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfSE9OR0tPTkc6IHJldHVybiAiZW5fSEsiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9JTkRJQTogcmV0dXJuICJlbl9JTiI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX01BTEFZU0lBOiByZXR1cm4gImVuX01ZIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfU0lOR0FQT1JFOiByZXR1cm4gImVuX1NHIjsKKysJfQorKyAgICAgIHJldHVybiAiZW4iOworKyAgICBjYXNlIExBTkdfRVNUT05JQU46IHJldHVybiAiZXRfRUUiOworKyAgICBjYXNlIExBTkdfRkFFUk9FU0U6IHJldHVybiAiZm9fRk8iOworKyAgICBjYXNlIExBTkdfRkFSU0k6IHJldHVybiAiZmFfSVIiOworKyAgICBjYXNlIExBTkdfRklOTklTSDogcmV0dXJuICJmaV9GSSI7CisrICAgIGNhc2UgTEFOR19GUkVOQ0g6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSDogcmV0dXJuICJmcl9GUiI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfQkVMR0lBTjogLyogV0FMTE9PTiAqLyByZXR1cm4gImZyX0JFIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9DQU5BRElBTjogcmV0dXJuICJmcl9DQSI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfU1dJU1M6IHJldHVybiAiZnJfQ0giOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX0xVWEVNQk9VUkc6IHJldHVybiAiZnJfTFUiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX01PTkFDTzogcmV0dXJuICJmcl9NQyI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfV0VTVElORElFUzogcmV0dXJuICJmciI7IC8qIENhcmliYmVhbj8gKi8KKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9SRVVOSU9OOiByZXR1cm4gImZyX1JFIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9DT05HTzogcmV0dXJuICJmcl9DRyI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfU0VORUdBTDogcmV0dXJuICJmcl9TTiI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfQ0FNRVJPT046IHJldHVybiAiZnJfQ00iOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX0NPVEVESVZPSVJFOiByZXR1cm4gImZyX0NJIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9NQUxJOiByZXR1cm4gImZyX01MIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9NT1JPQ0NPOiByZXR1cm4gImZyX01BIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9IQUlUSTogcmV0dXJuICJmcl9IVCI7CisrCX0KKysgICAgICByZXR1cm4gImZyIjsKKysgICAgY2FzZSBMQU5HX0ZSSVNJQU46IHJldHVybiAiZnlfTkwiOworKyAgICBjYXNlIExBTkdfRlVMRlVMREU6CisrICAgICAgLyogU3Bva2VuIGluIE5pZ2VyaWEsIEd1aW5lYSwgU2VuZWdhbCwgTWFsaSwgTmlnZXIsIENhbWVyb29uLCBCZW5pbi4gKi8KKysgICAgICByZXR1cm4gImZmX05HIjsKKysgICAgY2FzZSBMQU5HX0dBRUxJQzoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIDB4MDE6IC8qIFNDT1RUSVNIICovIHJldHVybiAiZ2RfR0IiOworKwljYXNlIDB4MDI6IC8qIElSSVNIICovIHJldHVybiAiZ2FfSUUiOworKwl9CisrICAgICAgcmV0dXJuICJDIjsKKysgICAgY2FzZSBMQU5HX0dBTElDSUFOOiByZXR1cm4gImdsX0VTIjsKKysgICAgY2FzZSBMQU5HX0dFT1JHSUFOOiByZXR1cm4gImthX0dFIjsKKysgICAgY2FzZSBMQU5HX0dFUk1BTjoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfR0VSTUFOOiByZXR1cm4gImRlX0RFIjsKKysJY2FzZSBTVUJMQU5HX0dFUk1BTl9TV0lTUzogcmV0dXJuICJkZV9DSCI7CisrCWNhc2UgU1VCTEFOR19HRVJNQU5fQVVTVFJJQU46IHJldHVybiAiZGVfQVQiOworKwljYXNlIFNVQkxBTkdfR0VSTUFOX0xVWEVNQk9VUkc6IHJldHVybiAiZGVfTFUiOworKwljYXNlIFNVQkxBTkdfR0VSTUFOX0xJRUNIVEVOU1RFSU46IHJldHVybiAiZGVfTEkiOworKwl9CisrICAgICAgcmV0dXJuICJkZSI7CisrICAgIGNhc2UgTEFOR19HUkVFSzogcmV0dXJuICJlbF9HUiI7CisrICAgIGNhc2UgTEFOR19HVUFSQU5JOiByZXR1cm4gImduX1BZIjsKKysgICAgY2FzZSBMQU5HX0dVSkFSQVRJOiByZXR1cm4gImd1X0lOIjsKKysgICAgY2FzZSBMQU5HX0hBVVNBOiByZXR1cm4gImhhX05HIjsKKysgICAgY2FzZSBMQU5HX0hBV0FJSUFOOgorKyAgICAgIC8qIEZJWE1FOiBEbyB0aGV5IG1lYW4gSGF3YWlpYW4gKCJoYXdfVVMiLCAxMDAwIHNwZWFrZXJzKQorKwkgb3IgSGF3YWlpIENyZW9sZSBFbmdsaXNoICgiY3BlX1VTIiwgNjAwMDAwIHNwZWFrZXJzKT8gICovCisrICAgICAgcmV0dXJuICJjcGVfVVMiOworKyAgICBjYXNlIExBTkdfSEVCUkVXOiByZXR1cm4gImhlX0lMIjsKKysgICAgY2FzZSBMQU5HX0hJTkRJOiByZXR1cm4gImhpX0lOIjsKKysgICAgY2FzZSBMQU5HX0hVTkdBUklBTjogcmV0dXJuICJodV9IVSI7CisrICAgIGNhc2UgTEFOR19JQklCSU86IHJldHVybiAibmljX05HIjsKKysgICAgY2FzZSBMQU5HX0lDRUxBTkRJQzogcmV0dXJuICJpc19JUyI7CisrICAgIGNhc2UgTEFOR19JR0JPOiByZXR1cm4gImlnX05HIjsKKysgICAgY2FzZSBMQU5HX0lORE9ORVNJQU46IHJldHVybiAiaWRfSUQiOworKyAgICBjYXNlIExBTkdfSU5VS1RJVFVUOiByZXR1cm4gIml1X0NBIjsKKysgICAgY2FzZSBMQU5HX0lUQUxJQU46CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0lUQUxJQU46IHJldHVybiAiaXRfSVQiOworKwljYXNlIFNVQkxBTkdfSVRBTElBTl9TV0lTUzogcmV0dXJuICJpdF9DSCI7CisrCX0KKysgICAgICByZXR1cm4gIml0IjsKKysgICAgY2FzZSBMQU5HX0pBUEFORVNFOiByZXR1cm4gImphX0pQIjsKKysgICAgY2FzZSBMQU5HX0tBTk5BREE6IHJldHVybiAia25fSU4iOworKyAgICBjYXNlIExBTkdfS0FOVVJJOiByZXR1cm4gImtyX05HIjsKKysgICAgY2FzZSBMQU5HX0tBU0hNSVJJOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19ERUZBVUxUOiByZXR1cm4gImtzX1BLIjsKKysJY2FzZSBTVUJMQU5HX0tBU0hNSVJJX0lORElBOiByZXR1cm4gImtzX0lOIjsKKysJfQorKyAgICAgIHJldHVybiAia3MiOworKyAgICBjYXNlIExBTkdfS0FaQUs6IHJldHVybiAia2tfS1oiOworKyAgICBjYXNlIExBTkdfS09OS0FOSToKKysgICAgICAvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBzdWNoIGxvY2FsZXMgYXBwZWFyIG9uIFVuaXguICAqLworKyAgICAgIHJldHVybiAia29rX0lOIjsKKysgICAgY2FzZSBMQU5HX0tPUkVBTjogcmV0dXJuICJrb19LUiI7CisrICAgIGNhc2UgTEFOR19LWVJHWVo6IHJldHVybiAia3lfS0ciOworKyAgICBjYXNlIExBTkdfTEFPOiByZXR1cm4gImxvX0xBIjsKKysgICAgY2FzZSBMQU5HX0xBVElOOiByZXR1cm4gImxhX1ZBIjsKKysgICAgY2FzZSBMQU5HX0xBVFZJQU46IHJldHVybiAibHZfTFYiOworKyAgICBjYXNlIExBTkdfTElUSFVBTklBTjogcmV0dXJuICJsdF9MVCI7CisrICAgIGNhc2UgTEFOR19NQUNFRE9OSUFOOiByZXR1cm4gIm1rX01LIjsKKysgICAgY2FzZSBMQU5HX01BTEFZOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19NQUxBWV9NQUxBWVNJQTogcmV0dXJuICJtc19NWSI7CisrCWNhc2UgU1VCTEFOR19NQUxBWV9CUlVORUlfREFSVVNTQUxBTTogcmV0dXJuICJtc19CTiI7CisrCX0KKysgICAgICByZXR1cm4gIm1zIjsKKysgICAgY2FzZSBMQU5HX01BTEFZQUxBTTogcmV0dXJuICJtbF9JTiI7CisrICAgIGNhc2UgTEFOR19NQUxURVNFOiByZXR1cm4gIm10X01UIjsKKysgICAgY2FzZSBMQU5HX01BTklQVVJJOgorKyAgICAgIC8qIEZJWE1FOiBBZGp1c3QgdGhpcyB3aGVuIHN1Y2ggbG9jYWxlcyBhcHBlYXIgb24gVW5peC4gICovCisrICAgICAgcmV0dXJuICJtbmlfSU4iOworKyAgICBjYXNlIExBTkdfTUFSQVRISTogcmV0dXJuICJtcl9JTiI7CisrICAgIGNhc2UgTEFOR19NT05HT0xJQU46CisrICAgICAgcmV0dXJuICJtbiI7IC8qIEFtYmlndW91czogY291bGQgYmUgIm1uX0NOIiBvciAibW5fTU4iLiAgKi8KKysgICAgY2FzZSBMQU5HX05FUEFMSToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfREVGQVVMVDogcmV0dXJuICJuZV9OUCI7CisrCWNhc2UgU1VCTEFOR19ORVBBTElfSU5ESUE6IHJldHVybiAibmVfSU4iOworKwl9CisrICAgICAgcmV0dXJuICJuZSI7CisrICAgIGNhc2UgTEFOR19OT1JXRUdJQU46CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX05PUldFR0lBTl9CT0tNQUw6IHJldHVybiAibm9fTk8iOworKwljYXNlIFNVQkxBTkdfTk9SV0VHSUFOX05ZTk9SU0s6IHJldHVybiAibm5fTk8iOworKwl9CisrICAgICAgcmV0dXJuICJubyI7CisrICAgIGNhc2UgTEFOR19PUklZQTogcmV0dXJuICJvcl9JTiI7CisrICAgIGNhc2UgTEFOR19PUk9NTzogcmV0dXJuICJvbV9FVCI7CisrICAgIGNhc2UgTEFOR19QQVBJQU1FTlRVOiByZXR1cm4gInBhcF9BTiI7CisrICAgIGNhc2UgTEFOR19QQVNIVE86CisrICAgICAgcmV0dXJuICJwcyI7IC8qIEFtYmlndW91czogY291bGQgYmUgInBzX1BLIiBvciAicHNfQUYiLiAgKi8KKysgICAgY2FzZSBMQU5HX1BPTElTSDogcmV0dXJuICJwbF9QTCI7CisrICAgIGNhc2UgTEFOR19QT1JUVUdVRVNFOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19QT1JUVUdVRVNFOiByZXR1cm4gInB0X1BUIjsKKysJLyogSG1tLiBTVUJMQU5HX1BPUlRVR1VFU0VfQlJBWklMSUFOID09IFNVQkxBTkdfREVGQVVMVC4KKysJICAgU2FtZSBwaGVub21lbm9uIGFzIFNVQkxBTkdfRU5HTElTSF9VUyA9PSBTVUJMQU5HX0RFRkFVTFQuICovCisrCWNhc2UgU1VCTEFOR19QT1JUVUdVRVNFX0JSQVpJTElBTjogcmV0dXJuICJwdF9CUiI7CisrCX0KKysgICAgICByZXR1cm4gInB0IjsKKysgICAgY2FzZSBMQU5HX1BVTkpBQkk6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1BVTkpBQklfSU5ESUE6IHJldHVybiAicGFfSU4iOyAvKiBHdXJtdWtoaSBzY3JpcHQgKi8KKysJY2FzZSBTVUJMQU5HX1BVTkpBQklfUEFLSVNUQU46IHJldHVybiAicGFfUEsiOyAvKiBBcmFiaWMgc2NyaXB0ICovCisrCX0KKysgICAgICByZXR1cm4gInBhIjsKKysgICAgY2FzZSBMQU5HX1JIQUVUT19ST01BTkNFOiByZXR1cm4gInJtX0NIIjsKKysgICAgY2FzZSBMQU5HX1JPTUFOSUFOOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19ST01BTklBTl9ST01BTklBOiByZXR1cm4gInJvX1JPIjsKKysJY2FzZSBTVUJMQU5HX1JPTUFOSUFOX01PTERPVkE6IHJldHVybiAicm9fTUQiOworKwl9CisrICAgICAgcmV0dXJuICJybyI7CisrICAgIGNhc2UgTEFOR19SVVNTSUFOOgorKyAgICAgIHJldHVybiAicnUiOyAvKiBBbWJpZ3VvdXM6IGNvdWxkIGJlICJydV9SVSIgb3IgInJ1X1VBIiBvciAicnVfTUQiLiAgKi8KKysgICAgY2FzZSBMQU5HX1NBQU1JOiAvKiBhY3R1YWxseSBOb3J0aGVybiBTYW1pICovIHJldHVybiAic2VfTk8iOworKyAgICBjYXNlIExBTkdfU0FOU0tSSVQ6IHJldHVybiAic2FfSU4iOworKyAgICBjYXNlIExBTkdfU0lOREhJOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19TSU5ESElfSU5ESUE6IHJldHVybiAic2RfSU4iOworKwljYXNlIFNVQkxBTkdfU0lOREhJX1BBS0lTVEFOOiByZXR1cm4gInNkX1BLIjsKKysJfQorKyAgICAgIHJldHVybiAic2QiOworKyAgICBjYXNlIExBTkdfU0lOSEFMRVNFOiByZXR1cm4gInNpX0xLIjsKKysgICAgY2FzZSBMQU5HX1NMT1ZBSzogcmV0dXJuICJza19TSyI7CisrICAgIGNhc2UgTEFOR19TTE9WRU5JQU46IHJldHVybiAic2xfU0kiOworKyAgICBjYXNlIExBTkdfU09NQUxJOiByZXR1cm4gInNvX1NPIjsKKysgICAgY2FzZSBMQU5HX1NPUkJJQU46CisrICAgICAgLyogRklYTUU6IEFkanVzdCB0aGlzIHdoZW4gc3VjaCBsb2NhbGVzIGFwcGVhciBvbiBVbml4LiAgKi8KKysgICAgICByZXR1cm4gIndlbl9ERSI7CisrICAgIGNhc2UgTEFOR19TUEFOSVNIOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIOiByZXR1cm4gImVzX0VTIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfTUVYSUNBTjogcmV0dXJuICJlc19NWCI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX01PREVSTjoKKysJICByZXR1cm4gImVzX0VTQG1vZGVybiI7CS8qIG5vdCBzZWVuIG9uIFVuaXggKi8KKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfR1VBVEVNQUxBOiByZXR1cm4gImVzX0dUIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfQ09TVEFfUklDQTogcmV0dXJuICJlc19DUiI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX1BBTkFNQTogcmV0dXJuICJlc19QQSI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX0RPTUlOSUNBTl9SRVBVQkxJQzogcmV0dXJuICJlc19ETyI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX1ZFTkVaVUVMQTogcmV0dXJuICJlc19WRSI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX0NPTE9NQklBOiByZXR1cm4gImVzX0NPIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfUEVSVTogcmV0dXJuICJlc19QRSI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX0FSR0VOVElOQTogcmV0dXJuICJlc19BUiI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX0VDVUFET1I6IHJldHVybiAiZXNfRUMiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9DSElMRTogcmV0dXJuICJlc19DTCI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX1VSVUdVQVk6IHJldHVybiAiZXNfVVkiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9QQVJBR1VBWTogcmV0dXJuICJlc19QWSI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX0JPTElWSUE6IHJldHVybiAiZXNfQk8iOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9FTF9TQUxWQURPUjogcmV0dXJuICJlc19TViI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX0hPTkRVUkFTOiByZXR1cm4gImVzX0hOIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfTklDQVJBR1VBOiByZXR1cm4gImVzX05JIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfUFVFUlRPX1JJQ086IHJldHVybiAiZXNfUFIiOworKwl9CisrICAgICAgcmV0dXJuICJlcyI7CisrICAgIGNhc2UgTEFOR19TVVRVOiByZXR1cm4gImJudF9UWiI7IC8qIG9yICJzdF9MUyIgb3IgIm5zb19aQSI/ICovCisrICAgIGNhc2UgTEFOR19TV0FISUxJOiByZXR1cm4gInN3X0tFIjsKKysgICAgY2FzZSBMQU5HX1NXRURJU0g6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0RFRkFVTFQ6IHJldHVybiAic3ZfU0UiOworKwljYXNlIFNVQkxBTkdfU1dFRElTSF9GSU5MQU5EOiByZXR1cm4gInN2X0ZJIjsKKysJfQorKyAgICAgIHJldHVybiAic3YiOworKyAgICBjYXNlIExBTkdfU1lSSUFDOiByZXR1cm4gInN5cl9UUiI7IC8qIEFuIGV4dGluY3QgbGFuZ3VhZ2UuICAqLworKyAgICBjYXNlIExBTkdfVEFHQUxPRzogcmV0dXJuICJ0bF9QSCI7CisrICAgIGNhc2UgTEFOR19UQUpJSzogcmV0dXJuICJ0Z19USiI7CisrICAgIGNhc2UgTEFOR19UQU1BWklHSFQ6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJLyogRklYTUU6IEFkanVzdCB0aGlzIHdoZW4gVGFtYXppZ2h0IGxvY2FsZXMgYXBwZWFyIG9uIFVuaXguICAqLworKwljYXNlIFNVQkxBTkdfVEFNQVpJR0hUX0FSQUJJQzogcmV0dXJuICJiZXJfTUFAYXJhYmljIjsKKysJY2FzZSBTVUJMQU5HX1RBTUFaSUdIVF9MQVRJTjogcmV0dXJuICJiZXJfTUFAbGF0aW4iOworKwl9CisrICAgICAgcmV0dXJuICJiZXJfTUEiOworKyAgICBjYXNlIExBTkdfVEFNSUw6CisrICAgICAgcmV0dXJuICJ0YSI7IC8qIEFtYmlndW91czogY291bGQgYmUgInRhX0lOIiBvciAidGFfTEsiIG9yICJ0YV9TRyIuICAqLworKyAgICBjYXNlIExBTkdfVEFUQVI6IHJldHVybiAidHRfUlUiOworKyAgICBjYXNlIExBTkdfVEVMVUdVOiByZXR1cm4gInRlX0lOIjsKKysgICAgY2FzZSBMQU5HX1RIQUk6IHJldHVybiAidGhfVEgiOworKyAgICBjYXNlIExBTkdfVElCRVRBTjogcmV0dXJuICJib19DTiI7CisrICAgIGNhc2UgTEFOR19USUdSSU5ZQToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfVElHUklOWUFfRVRISU9QSUE6IHJldHVybiAidGlfRVQiOworKwljYXNlIFNVQkxBTkdfVElHUklOWUFfRVJJVFJFQTogcmV0dXJuICJ0aV9FUiI7CisrCX0KKysgICAgICByZXR1cm4gInRpIjsKKysgICAgY2FzZSBMQU5HX1RTT05HQTogcmV0dXJuICJ0c19aQSI7CisrICAgIGNhc2UgTEFOR19UU1dBTkE6IHJldHVybiAidG5fQlciOworKyAgICBjYXNlIExBTkdfVFVSS0lTSDogcmV0dXJuICJ0cl9UUiI7CisrICAgIGNhc2UgTEFOR19UVVJLTUVOOiByZXR1cm4gInRrX1RNIjsKKysgICAgY2FzZSBMQU5HX1VLUkFJTklBTjogcmV0dXJuICJ1a19VQSI7CisrICAgIGNhc2UgTEFOR19VUkRVOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19VUkRVX1BBS0lTVEFOOiByZXR1cm4gInVyX1BLIjsKKysJY2FzZSBTVUJMQU5HX1VSRFVfSU5ESUE6IHJldHVybiAidXJfSU4iOworKwl9CisrICAgICAgcmV0dXJuICJ1ciI7CisrICAgIGNhc2UgTEFOR19VWkJFSzoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfVVpCRUtfTEFUSU46IHJldHVybiAidXpfVVoiOworKwljYXNlIFNVQkxBTkdfVVpCRUtfQ1lSSUxMSUM6IHJldHVybiAidXpfVVpAY3lyaWxsaWMiOworKwl9CisrICAgICAgcmV0dXJuICJ1eiI7CisrICAgIGNhc2UgTEFOR19WRU5EQTogcmV0dXJuICJ2ZV9aQSI7CisrICAgIGNhc2UgTEFOR19WSUVUTkFNRVNFOiByZXR1cm4gInZpX1ZOIjsKKysgICAgY2FzZSBMQU5HX1dFTFNIOiByZXR1cm4gImN5X0dCIjsKKysgICAgY2FzZSBMQU5HX1hIT1NBOiByZXR1cm4gInhoX1pBIjsKKysgICAgY2FzZSBMQU5HX1lJOiByZXR1cm4gInNpdF9DTiI7CisrICAgIGNhc2UgTEFOR19ZSURESVNIOiByZXR1cm4gInlpX0lMIjsKKysgICAgY2FzZSBMQU5HX1lPUlVCQTogcmV0dXJuICJ5b19ORyI7CisrICAgIGNhc2UgTEFOR19aVUxVOiByZXR1cm4gInp1X1pBIjsKKysgICAgZGVmYXVsdDogcmV0dXJuICJDIjsKKysgICAgfQorKworKyNlbmRpZgorK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9sb2cuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sb2cuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjUxNTcyMzc2OCAtMDQwMAorQEAgLTAsMCArMSw5OCBAQAorKy8qIExvZyBmaWxlIG91dHB1dC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKysvKiBQcmludCBhbiBBU0NJSSBzdHJpbmcgd2l0aCBxdW90ZXMgYW5kIGVzY2FwZSBzZXF1ZW5jZXMgd2hlcmUgbmVlZGVkLiAgKi8KKytzdGF0aWMgdm9pZAorK3ByaW50X2VzY2FwZWQgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqc3RyKQorK3sKKysgIHB1dGMgKCciJywgc3RyZWFtKTsKKysgIGZvciAoOyAqc3RyICE9ICdcMCc7IHN0cisrKQorKyAgICBpZiAoKnN0ciA9PSAnXG4nKQorKyAgICAgIHsKKysJZnB1dHMgKCJcXG5cIiIsIHN0cmVhbSk7CisrCWlmIChzdHJbMV0gPT0gJ1wwJykKKysJICByZXR1cm47CisrCWZwdXRzICgiXG5cIiIsIHN0cmVhbSk7CisrICAgICAgfQorKyAgICBlbHNlCisrICAgICAgeworKwlpZiAoKnN0ciA9PSAnIicgfHwgKnN0ciA9PSAnXFwnKQorKwkgIHB1dGMgKCdcXCcsIHN0cmVhbSk7CisrCXB1dGMgKCpzdHIsIHN0cmVhbSk7CisrICAgICAgfQorKyAgcHV0YyAoJyInLCBzdHJlYW0pOworK30KKysKKysvKiBBZGQgdG8gdGhlIGxvZyBmaWxlIGFuIGVudHJ5IGRlbm90aW5nIGEgZmFpbGVkIHRyYW5zbGF0aW9uLiAgKi8KKyt2b2lkCisrX25sX2xvZ191bnRyYW5zbGF0ZWQgKGNvbnN0IGNoYXIgKmxvZ2ZpbGVuYW1lLCBjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJICAgICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIGludCBwbHVyYWwpCisreworKyAgc3RhdGljIGNoYXIgKmxhc3RfbG9nZmlsZW5hbWUgPSBOVUxMOworKyAgc3RhdGljIEZJTEUgKmxhc3RfbG9nZmlsZSA9IE5VTEw7CisrICBGSUxFICpsb2dmaWxlOworKworKyAgLyogQ2FuIHdlIHJldXNlIHRoZSBsYXN0IG9wZW5lZCBsb2dmaWxlPyAgKi8KKysgIGlmIChsYXN0X2xvZ2ZpbGVuYW1lID09IE5VTEwgfHwgc3RyY21wIChsb2dmaWxlbmFtZSwgbGFzdF9sb2dmaWxlbmFtZSkgIT0gMCkKKysgICAgeworKyAgICAgIC8qIENsb3NlIHRoZSBsYXN0IHVzZWQgbG9nZmlsZS4gICovCisrICAgICAgaWYgKGxhc3RfbG9nZmlsZW5hbWUgIT0gTlVMTCkKKysJeworKwkgIGlmIChsYXN0X2xvZ2ZpbGUgIT0gTlVMTCkKKysJICAgIHsKKysJICAgICAgZmNsb3NlIChsYXN0X2xvZ2ZpbGUpOworKwkgICAgICBsYXN0X2xvZ2ZpbGUgPSBOVUxMOworKwkgICAgfQorKwkgIGZyZWUgKGxhc3RfbG9nZmlsZW5hbWUpOworKwkgIGxhc3RfbG9nZmlsZW5hbWUgPSBOVUxMOworKwl9CisrICAgICAgLyogT3BlbiB0aGUgbG9nZmlsZS4gICovCisrICAgICAgbGFzdF9sb2dmaWxlbmFtZSA9IChjaGFyICopIG1hbGxvYyAoc3RybGVuIChsb2dmaWxlbmFtZSkgKyAxKTsKKysgICAgICBpZiAobGFzdF9sb2dmaWxlbmFtZSA9PSBOVUxMKQorKwlyZXR1cm47CisrICAgICAgc3RyY3B5IChsYXN0X2xvZ2ZpbGVuYW1lLCBsb2dmaWxlbmFtZSk7CisrICAgICAgbGFzdF9sb2dmaWxlID0gZm9wZW4gKGxvZ2ZpbGVuYW1lLCAiYSIpOworKyAgICAgIGlmIChsYXN0X2xvZ2ZpbGUgPT0gTlVMTCkKKysJcmV0dXJuOworKyAgICB9CisrICBsb2dmaWxlID0gbGFzdF9sb2dmaWxlOworKworKyAgZnByaW50ZiAobG9nZmlsZSwgImRvbWFpbiAiKTsKKysgIHByaW50X2VzY2FwZWQgKGxvZ2ZpbGUsIGRvbWFpbm5hbWUpOworKyAgZnByaW50ZiAobG9nZmlsZSwgIlxubXNnaWQgIik7CisrICBwcmludF9lc2NhcGVkIChsb2dmaWxlLCBtc2dpZDEpOworKyAgaWYgKHBsdXJhbCkKKysgICAgeworKyAgICAgIGZwcmludGYgKGxvZ2ZpbGUsICJcbm1zZ2lkX3BsdXJhbCAiKTsKKysgICAgICBwcmludF9lc2NhcGVkIChsb2dmaWxlLCBtc2dpZDIpOworKyAgICAgIGZwcmludGYgKGxvZ2ZpbGUsICJcbm1zZ3N0clswXSBcIlwiXG4iKTsKKysgICAgfQorKyAgZWxzZQorKyAgICBmcHJpbnRmIChsb2dmaWxlLCAiXG5tc2dzdHIgXCJcIlxuIik7CisrICBwdXRjICgnXG4nLCBsb2dmaWxlKTsKKyt9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvTWFrZWZpbGUuaW4JMTk5OC0wNC0yNiAwOToyMjozNS4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvTWFrZWZpbGUuaW4JMjAwNC0wOS0xMiAxNDo0MDozNC41MjE3MjI4NTYgLTA0MDAKK0BAIC0xLDE5ICsxLDIwIEBACistIyBNYWtlZmlsZSBmb3IgZGlyZWN0b3J5IHdpdGggbWVzc2FnZSBjYXRhbG9nIGhhbmRsaW5nIGluIEdOVSBOTFMgVXRpbGl0aWVzLgorLSMgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgTWFrZWZpbGUgZm9yIGRpcmVjdG9yeSB3aXRoIG1lc3NhZ2UgY2F0YWxvZyBoYW5kbGluZyBsaWJyYXJ5IG9mIEdOVSBnZXR0ZXh0CisrIyBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMKKy0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysjIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAjIGFueSBsYXRlciB2ZXJzaW9uLgorICMKKyAjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyMgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgIworLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyMgVVNBLgorIAorIFBBQ0tBR0UgPSBAUEFDS0FHRUAKKyBWRVJTSU9OID0gQFZFUlNJT05ACitAQCAtMjMsMTE4ICsyNCwzNDEgQEAKKyBzcmNkaXIgPSBAc3JjZGlyQAorIHRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKyB0b3BfYnVpbGRkaXIgPSAuLgorLVZQQVRIID0gQHNyY2RpckAKKysjVlBBVEggPSAkKHNyY2RpcikKKyAKKyBwcmVmaXggPSBAcHJlZml4QAorIGV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorIHRyYW5zZm9ybSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorLWxpYmRpciA9ICQoZXhlY19wcmVmaXgpL2xpYgorLWluY2x1ZGVkaXIgPSAkKHByZWZpeCkvaW5jbHVkZQorLWRhdGFkaXIgPSAkKHByZWZpeCkvQERBVEFESVJOQU1FQAorK2xpYmRpciA9IEBsaWJkaXJACisraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAorK2RhdGFkaXIgPSBAZGF0YWRpckAKKyBsb2NhbGVkaXIgPSAkKGRhdGFkaXIpL2xvY2FsZQorLWdudWxvY2FsZWRpciA9ICQocHJlZml4KS9zaGFyZS9sb2NhbGUKKy1nZXR0ZXh0c3JjZGlyID0gQGRhdGFkaXJAL2dldHRleHQvaW50bAorLWFsaWFzcGF0aCA9ICQobG9jYWxlZGlyKTouCisrZ2V0dGV4dHNyY2RpciA9ICQoZGF0YWRpcikvZ2V0dGV4dC9pbnRsCisrYWxpYXNwYXRoID0gJChsb2NhbGVkaXIpCisgc3ViZGlyID0gaW50bAorIAorIElOU1RBTEwgPSBASU5TVEFMTEAKKyBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorIE1LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKKytta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJChNS0lOU1RBTExESVJTKQorIAorLWwgPSBAbEAKKytsID0gQElOVExfTElCVE9PTF9TVUZGSVhfUFJFRklYQAorIAorIEFSID0gYXIKKyBDQyA9IEBDQ0AKKyBMSUJUT09MID0gQExJQlRPT0xACisgUkFOTElCID0gQFJBTkxJQkAKKytZQUNDID0gQElOVExCSVNPTkAgLXkgLWQKKytZRkxBR1MgPSAtLW5hbWUtcHJlZml4PV9fZ2V0dGV4dAorIAorLURFRlMgPSAtRExPQ0FMRURJUj1cIiQobG9jYWxlZGlyKVwiIC1ER05VTE9DQUxFRElSPVwiJChnbnVsb2NhbGVkaXIpXCIgXAorLS1ETE9DQUxFX0FMSUFTX1BBVEg9XCIkKGFsaWFzcGF0aClcIiBAREVGU0AKKytERUZTID0gLURMT0NBTEVESVI9XCIkKGxvY2FsZWRpcilcIiAtRExPQ0FMRV9BTElBU19QQVRIPVwiJChhbGlhc3BhdGgpXCIgXAorKy1ETElCRElSPVwiJChsaWJkaXIpXCIgLURJTl9MSUJJTlRMIFwKKystREVOQUJMRV9SRUxPQ0FUQUJMRT0xIC1ESU5fTElCUkFSWSAtRElOU1RBTExESVI9XCIkKGxpYmRpcilcIiAtRE5PX1hNQUxMT0MgXAorKy1Ec2V0X3JlbG9jYXRpb25fcHJlZml4PWxpYmludGxfc2V0X3JlbG9jYXRpb25fcHJlZml4IFwKKystRHJlbG9jYXRlPWxpYmludGxfcmVsb2NhdGUgXAorKy1EREVQRU5EU19PTl9MSUJJQ09OVj0xIEBERUZTQAorIENQUEZMQUdTID0gQENQUEZMQUdTQAorIENGTEFHUyA9IEBDRkxBR1NACisgTERGTEFHUyA9IEBMREZMQUdTQAorK0xJQlMgPSBATElCU0AKKyAKKyBDT01QSUxFID0gJChDQykgLWMgJChERUZTKSAkKElOQ0xVREVTKSAkKENQUEZMQUdTKSAkKENGTEFHUykgJChYQ0ZMQUdTKQorIAorLUhFQURFUlMgPSAkKENPTUhEUlMpIGxpYmdldHRleHQuaCBsb2FkaW5mby5oCistQ09NSERSUyA9IGdldHRleHQuaCBnZXR0ZXh0UC5oIGhhc2gtc3RyaW5nLmgKKy1TT1VSQ0VTID0gJChDT01TUkNTKSBpbnRsLWNvbXBhdC5jIGNhdC1jb21wYXQuYworLUNPTVNSQ1MgPSBiaW5kdGV4dGRvbS5jIGRjZ2V0dGV4dC5jIGRnZXR0ZXh0LmMgZ2V0dGV4dC5jIFwKKy1maW5kZG9tYWluLmMgbG9hZG1zZ2NhdC5jIGxvY2FsZWFsaWFzLmMgdGV4dGRvbWFpbi5jIGwxMG5mbGlzdC5jIFwKKy1leHBsb2RlbmFtZS5jCistT0JKRUNUUyA9IEBJTlRMT0JKU0AgYmluZHRleHRkb20uJGxvIGRjZ2V0dGV4dC4kbG8gZGdldHRleHQuJGxvIGdldHRleHQuJGxvIFwKKy1maW5kZG9tYWluLiRsbyBsb2FkbXNnY2F0LiRsbyBsb2NhbGVhbGlhcy4kbG8gdGV4dGRvbWFpbi4kbG8gbDEwbmZsaXN0LiRsbyBcCistZXhwbG9kZW5hbWUuJGxvCistQ0FUT0JKUyA9IGNhdC1jb21wYXQuJGxvIC4uL3BvL2NhdC1pZC10YmwuJGxvCistR0VUVE9CSlMgPSBpbnRsLWNvbXBhdC4kbG8KKy1ESVNURklMRVMuY29tbW9uID0gQ2hhbmdlTG9nIE1ha2VmaWxlLmluIGxpbnV4LW1zZy5zZWQgcG8ydGJsLnNlZC5pbiBcCisteG9wZW4tbXNnLnNlZCAkKEhFQURFUlMpICQoU09VUkNFUykKKytIRUFERVJTID0gXAorKyAgZ21vLmggXAorKyAgZ2V0dGV4dFAuaCBcCisrICBoYXNoLXN0cmluZy5oIFwKKysgIGxvYWRpbmZvLmggXAorKyAgcGx1cmFsLWV4cC5oIFwKKysgIGV2YWwtcGx1cmFsLmggXAorKyAgbG9jYWxjaGFyc2V0LmggXAorKyAgcmVsb2NhdGFibGUuaCBcCisrICB4c2l6ZS5oIFwKKysgIHByaW50Zi1hcmdzLmggcHJpbnRmLWFyZ3MuYyBcCisrICBwcmludGYtcGFyc2UuaCB3cHJpbnRmLXBhcnNlLmggcHJpbnRmLXBhcnNlLmMgXAorKyAgdmFzbnByaW50Zi5oIHZhc253cHJpbnRmLmggdmFzbnByaW50Zi5jIFwKKysgIG9zMmNvbXBhdC5oIFwKKysgIGxpYmdudWludGwuaC5pbgorK1NPVVJDRVMgPSBcCisrICBiaW5kdGV4dGRvbS5jIFwKKysgIGRjZ2V0dGV4dC5jIFwKKysgIGRnZXR0ZXh0LmMgXAorKyAgZ2V0dGV4dC5jIFwKKysgIGZpbmRkb21haW4uYyBcCisrICBsb2FkbXNnY2F0LmMgXAorKyAgbG9jYWxlYWxpYXMuYyBcCisrICB0ZXh0ZG9tYWluLmMgXAorKyAgbDEwbmZsaXN0LmMgXAorKyAgZXhwbG9kZW5hbWUuYyBcCisrICBkY2lnZXR0ZXh0LmMgXAorKyAgZGNuZ2V0dGV4dC5jIFwKKysgIGRuZ2V0dGV4dC5jIFwKKysgIG5nZXR0ZXh0LmMgXAorKyAgcGx1cmFsLnkgXAorKyAgcGx1cmFsLWV4cC5jIFwKKysgIGxvY2FsY2hhcnNldC5jIFwKKysgIHJlbG9jYXRhYmxlLmMgXAorKyAgbG9jYWxlbmFtZS5jIFwKKysgIGxvZy5jIFwKKysgIHByaW50Zi5jIFwKKysgIG9zZGVwLmMgXAorKyAgb3MyY29tcGF0LmMgXAorKyAgaW50bC1jb21wYXQuYworK09CSkVDVFMgPSBcCisrICBiaW5kdGV4dGRvbS4kbG8gXAorKyAgZGNnZXR0ZXh0LiRsbyBcCisrICBkZ2V0dGV4dC4kbG8gXAorKyAgZ2V0dGV4dC4kbG8gXAorKyAgZmluZGRvbWFpbi4kbG8gXAorKyAgbG9hZG1zZ2NhdC4kbG8gXAorKyAgbG9jYWxlYWxpYXMuJGxvIFwKKysgIHRleHRkb21haW4uJGxvIFwKKysgIGwxMG5mbGlzdC4kbG8gXAorKyAgZXhwbG9kZW5hbWUuJGxvIFwKKysgIGRjaWdldHRleHQuJGxvIFwKKysgIGRjbmdldHRleHQuJGxvIFwKKysgIGRuZ2V0dGV4dC4kbG8gXAorKyAgbmdldHRleHQuJGxvIFwKKysgIHBsdXJhbC4kbG8gXAorKyAgcGx1cmFsLWV4cC4kbG8gXAorKyAgbG9jYWxjaGFyc2V0LiRsbyBcCisrICByZWxvY2F0YWJsZS4kbG8gXAorKyAgbG9jYWxlbmFtZS4kbG8gXAorKyAgbG9nLiRsbyBcCisrICBwcmludGYuJGxvIFwKKysgIG9zZGVwLiRsbyBcCisrICBpbnRsLWNvbXBhdC4kbG8KKytESVNURklMRVMuY29tbW9uID0gTWFrZWZpbGUuaW4gXAorK2NvbmZpZy5jaGFyc2V0IGxvY2FsZS5hbGlhcyByZWYtYWRkLnNpbiByZWYtZGVsLnNpbiAkKEhFQURFUlMpICQoU09VUkNFUykKKytESVNURklMRVMuZ2VuZXJhdGVkID0gcGx1cmFsLmMKKyBESVNURklMRVMubm9ybWFsID0gVkVSU0lPTgorLURJU1RGSUxFUy5nZXR0ZXh0ID0gbGliaW50bC5nbGliYyBpbnRsaC5pbnN0LmluCisrRElTVEZJTEVTLmdldHRleHQgPSBDT1BZSU5HLkxJQi0yLjAgQ09QWUlORy5MSUItMi4xIGxpYmludGwuZ2xpYmMgXAorK2xpYmdudWludGwuaF92bXMgTWFrZWZpbGUudm1zIFwKKytsaWJnbnVpbnRsLmgubXN2Yy1zdGF0aWMgbGliZ251aW50bC5oLm1zdmMtc2hhcmVkIFJFQURNRS53b2UzMiBNYWtlZmlsZS5tc3ZjCisrRElTVEZJTEVTLm9ic29sZXRlID0geG9wZW4tbXNnLnNlZCBsaW51eC1tc2cuc2VkIHBvMnRibC5zZWQuaW4gY2F0LWNvbXBhdC5jIFwKKytDT1BZSU5HLkxJQi0yIGdldHRleHQuaCBsaWJnZXR0ZXh0LmggcGx1cmFsLWV2YWwuYyBsaWJnbnVpbnRsLmgKKysKKythbGw6IGFsbC1AVVNFX0lOQ0xVREVEX0xJQklOVExACisrYWxsLXllczogbGliaW50bC4kbGEgbGliaW50bC5oIGNoYXJzZXQuYWxpYXMgcmVmLWFkZC5zZWQgcmVmLWRlbC5zZWQKKythbGwtbm86IGFsbC1uby1AQlVJTERfSU5DTFVERURfTElCSU5UTEAKKythbGwtbm8teWVzOiBsaWJnbnVpbnRsLiRsYQorK2FsbC1uby1ubzoKKysKKytsaWJpbnRsLmEgbGliZ251aW50bC5hOiAkKE9CSkVDVFMpCisrCXJtIC1mICRACisrCSQoQVIpIGNydSAkQCAkKE9CSkVDVFMpCisrCSQoUkFOTElCKSAkQAorKworK2xpYmludGwubGEgbGliZ251aW50bC5sYTogJChPQkpFQ1RTKQorKwkkKExJQlRPT0wpIC0tbW9kZT1saW5rIFwKKysJICAkKENDKSAkKENQUEZMQUdTKSAkKENGTEFHUykgJChYQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRAIFwKKysJICAkKE9CSkVDVFMpIEBMVExJQklDT05WQCAkKExJQlMpIC1sYyBcCisrCSAgLXZlcnNpb24taW5mbyAkKExUVl9DVVJSRU5UKTokKExUVl9SRVZJU0lPTik6JChMVFZfQUdFKSBcCisrCSAgLXJwYXRoICQobGliZGlyKSBcCisrCSAgLW5vLXVuZGVmaW5lZAorKworKyMgTGlidG9vbCdzIGxpYnJhcnkgdmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgbGliaW50bC4KKysjIEJlZm9yZSBtYWtpbmcgYSBnZXR0ZXh0IHJlbGVhc2UsIHRoZSBnZXR0ZXh0IG1haW50YWluZXIgbXVzdCBjaGFuZ2UgdGhpcworKyMgYWNjb3JkaW5nIHRvIHRoZSBsaWJ0b29sIGRvY3VtZW50YXRpb24sIHNlY3Rpb24gIkxpYnJhcnkgaW50ZXJmYWNlIHZlcnNpb25zIi4KKysjIE1haW50YWluZXJzIG9mIG90aGVyIHBhY2thZ2VzIHRoYXQgaW5jbHVkZSB0aGUgaW50bCBkaXJlY3RvcnkgbXVzdCAqbm90KgorKyMgY2hhbmdlIHRoZXNlIHZhbHVlcy4KKytMVFZfQ1VSUkVOVD03CisrTFRWX1JFVklTSU9OPTAKKytMVFZfQUdFPTQKKyAKKyAuU1VGRklYRVM6CistLlNVRkZJWEVTOiAuYyAubyAubG8KKysuU1VGRklYRVM6IC5jIC55IC5vIC5sbyAuc2luIC5zZWQKKysKKyAuYy5vOgorIAkkKENPTVBJTEUpICQ8CistLmMubG86CistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkPAorIAorLUlOQ0xVREVTID0gLUkuLiAtSS4gLUkkKHRvcF9zcmNkaXIpL2ludGwgLUkkKHRvcF9zcmNkaXIpL2xpYgorKy55LmM6CisrCSQoWUFDQykgJChZRkxBR1MpIC0tb3V0cHV0ICRAICQ8CisrCXJtIC1mICQqLmgKKyAKKy1hbGw6IGFsbC1AVVNFX0lOQ0xVREVEX0xJQklOVExACisrYmluZHRleHRkb20ubG86ICQoc3JjZGlyKS9iaW5kdGV4dGRvbS5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvYmluZHRleHRkb20uYworK2RjZ2V0dGV4dC5sbzogJChzcmNkaXIpL2RjZ2V0dGV4dC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZGNnZXR0ZXh0LmMKKytkZ2V0dGV4dC5sbzogJChzcmNkaXIpL2RnZXR0ZXh0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9kZ2V0dGV4dC5jCisrZ2V0dGV4dC5sbzogJChzcmNkaXIpL2dldHRleHQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2dldHRleHQuYworK2ZpbmRkb21haW4ubG86ICQoc3JjZGlyKS9maW5kZG9tYWluLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9maW5kZG9tYWluLmMKKytsb2FkbXNnY2F0LmxvOiAkKHNyY2RpcikvbG9hZG1zZ2NhdC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbG9hZG1zZ2NhdC5jCisrbG9jYWxlYWxpYXMubG86ICQoc3JjZGlyKS9sb2NhbGVhbGlhcy5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbG9jYWxlYWxpYXMuYworK3RleHRkb21haW4ubG86ICQoc3JjZGlyKS90ZXh0ZG9tYWluLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS90ZXh0ZG9tYWluLmMKKytsMTBuZmxpc3QubG86ICQoc3JjZGlyKS9sMTBuZmxpc3QuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2wxMG5mbGlzdC5jCisrZXhwbG9kZW5hbWUubG86ICQoc3JjZGlyKS9leHBsb2RlbmFtZS5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZXhwbG9kZW5hbWUuYworK2RjaWdldHRleHQubG86ICQoc3JjZGlyKS9kY2lnZXR0ZXh0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9kY2lnZXR0ZXh0LmMKKytkY25nZXR0ZXh0LmxvOiAkKHNyY2RpcikvZGNuZ2V0dGV4dC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZGNuZ2V0dGV4dC5jCisrZG5nZXR0ZXh0LmxvOiAkKHNyY2RpcikvZG5nZXR0ZXh0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9kbmdldHRleHQuYworK25nZXR0ZXh0LmxvOiAkKHNyY2RpcikvbmdldHRleHQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL25nZXR0ZXh0LmMKKytwbHVyYWwubG86ICQoc3JjZGlyKS9wbHVyYWwuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL3BsdXJhbC5jCisrcGx1cmFsLWV4cC5sbzogJChzcmNkaXIpL3BsdXJhbC1leHAuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL3BsdXJhbC1leHAuYworK2xvY2FsY2hhcnNldC5sbzogJChzcmNkaXIpL2xvY2FsY2hhcnNldC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbG9jYWxjaGFyc2V0LmMKKytyZWxvY2F0YWJsZS5sbzogJChzcmNkaXIpL3JlbG9jYXRhYmxlLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9yZWxvY2F0YWJsZS5jCisrbG9jYWxlbmFtZS5sbzogJChzcmNkaXIpL2xvY2FsZW5hbWUuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2xvY2FsZW5hbWUuYworK2xvZy5sbzogJChzcmNkaXIpL2xvZy5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbG9nLmMKKytwcmludGYubG86ICQoc3JjZGlyKS9wcmludGYuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL3ByaW50Zi5jCisrb3NkZXAubG86ICQoc3JjZGlyKS9vc2RlcC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2Rpcikvb3NkZXAuYworK2ludGwtY29tcGF0LmxvOiAkKHNyY2RpcikvaW50bC1jb21wYXQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2ludGwtY29tcGF0LmMKKyAKKy1hbGwteWVzOiBsaWJpbnRsLiRsYSBpbnRsaC5pbnN0CistYWxsLW5vOgorK3JlZi1hZGQuc2VkOiAkKHNyY2RpcikvcmVmLWFkZC5zaW4KKysJc2VkIC1lICcvXiMvZCcgLWUgJ3MvQCcnUEFDS0FHRScnQC9AUEFDS0FHRUAvZycgJChzcmNkaXIpL3JlZi1hZGQuc2luID4gdC1yZWYtYWRkLnNlZAorKwltdiB0LXJlZi1hZGQuc2VkIHJlZi1hZGQuc2VkCisrcmVmLWRlbC5zZWQ6ICQoc3JjZGlyKS9yZWYtZGVsLnNpbgorKwlzZWQgLWUgJy9eIy9kJyAtZSAncy9AJydQQUNLQUdFJydAL0BQQUNLQUdFQC9nJyAkKHNyY2RpcikvcmVmLWRlbC5zaW4gPiB0LXJlZi1kZWwuc2VkCisrCW12IHQtcmVmLWRlbC5zZWQgcmVmLWRlbC5zZWQKKyAKKy1saWJpbnRsLmE6ICQoT0JKRUNUUykKKy0Jcm0gLWYgJEAKKy0JJChBUikgY3J1ICRAICQoT0JKRUNUUykKKy0JJChSQU5MSUIpICRACisrSU5DTFVERVMgPSAtSS4gLUkkKHNyY2RpcikgLUkuLgorIAorLWxpYmludGwubGE6ICQoT0JKRUNUUykKKy0JJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENDKSAkKExERkxBR1MpIC1vICRAICQoT0JKRUNUUykgXAorLQkJICAgLXZlcnNpb24taW5mbyAxOjAgLXJwYXRoICQobGliZGlyKQorK2xpYmdudWludGwuaDogJChzcmNkaXIpL2xpYmdudWludGwuaC5pbgorKwlzZWQgLWUgJ3MsQCcnSEFWRV9QT1NJWF9QUklOVEYnJ0AsQEhBVkVfUE9TSVhfUFJJTlRGQCxnJyBcCisrCSAgICAtZSAncyxAJydIQVZFX0FTUFJJTlRGJydALEBIQVZFX0FTUFJJTlRGQCxnJyBcCisrCSAgICAtZSAncyxAJydIQVZFX1NOUFJJTlRGJydALEBIQVZFX1NOUFJJTlRGQCxnJyBcCisrCSAgICAtZSAncyxAJydIQVZFX1dQUklOVEYnJ0AsQEhBVkVfV1BSSU5URkAsZycgXAorKwkgIDwgJChzcmNkaXIpL2xpYmdudWludGwuaC5pbiA+IGxpYmdudWludGwuaAorIAorLS4uL3BvL2NhdC1pZC10YmwuJGxvOiAuLi9wby9jYXQtaWQtdGJsLmMgJCh0b3Bfc3JjZGlyKS9wby8kKFBBQ0tBR0UpLnBvdAorLQljZCAuLi9wbyAmJiAkKE1BS0UpIGNhdC1pZC10YmwuJGxvCisrbGliaW50bC5oOiBsaWJnbnVpbnRsLmgKKysJY3AgbGliZ251aW50bC5oIGxpYmludGwuaAorIAorLWNoZWNrOiBhbGwKKytjaGFyc2V0LmFsaWFzOiAkKHNyY2RpcikvY29uZmlnLmNoYXJzZXQKKysJJChTSEVMTCkgJChzcmNkaXIpL2NvbmZpZy5jaGFyc2V0ICdAaG9zdEAnID4gdC0kQAorKwltdiB0LSRAICRACisgCistIyBUaGlzIGluc3RhbGxhdGlvbiBnb2FsIGlzIG9ubHkgdXNlZCBpbiBHTlUgZ2V0dGV4dC4gIFBhY2thZ2VzIHdoaWNoCistIyBvbmx5IHVzZSB0aGUgbGlicmFyeSBzaG91bGQgdXNlIGluc3RhbGwgaW5zdGVhZC4KKytjaGVjazogYWxsCisgCisgIyBXZSBtdXN0IG5vdCBpbnN0YWxsIHRoZSBsaWJpbnRsLmgvbGliaW50bC5hIGZpbGVzIGlmIHdlIGFyZSBvbiBhCistIyBzeXN0ZW0gd2hpY2ggaGFzIHRoZSBnZXR0ZXh0KCkgZnVuY3Rpb24gaW4gaXRzIEMgbGlicmFyeSBvciBpbiBhCistIyBzZXBhcmF0ZSBsaWJyYXJ5IG9yIHVzZSB0aGUgY2F0Z2V0cyBpbnRlcmZhY2UuICBBIHNwZWNpYWwgY2FzZSBpcworLSMgd2hlcmUgY29uZmlndXJlIGZvdW5kIGEgcHJldmlvdXNseSBpbnN0YWxsZWQgR05VIGdldHRleHQgbGlicmFyeS4KKysjIHN5c3RlbSB3aGljaCBoYXMgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaW4gaXRzIEMgbGlicmFyeSBvciBpbiBhCisrIyBzZXBhcmF0ZSBsaWJyYXJ5LgorICMgSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBvbmUgd2hpY2ggY29tZXMgd2l0aCB0aGlzIHZlcnNpb24gb2YgdGhlCisgIyBwYWNrYWdlLCB5b3UgaGF2ZSB0byB1c2UgYGNvbmZpZ3VyZSAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dCcuCisgaW5zdGFsbDogaW5zdGFsbC1leGVjIGluc3RhbGwtZGF0YQorIGluc3RhbGwtZXhlYzogYWxsCistCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQiIFwKKy0JICAgJiYgdGVzdCAnQElOVExPQkpTQCcgPSAnJChHRVRUT0JKUyknOyB0aGVuIFwKKy0JICBpZiB0ZXN0IC1yICQoTUtJTlNUQUxMRElSUyk7IHRoZW4gXAorLQkgICAgJChNS0lOU1RBTExESVJTKSAkKGxpYmRpcikgJChpbmNsdWRlZGlyKTsgXAorLQkgIGVsc2UgXAorLQkgICAgJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQobGliZGlyKSAkKGluY2x1ZGVkaXIpOyBcCisrCWlmIHsgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC1ydW50aW1lIiB8fCB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgfSBcCisrCSAgICYmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0geWVzOyB0aGVuIFwKKysJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGxpYmRpcikgJChERVNURElSKSQoaW5jbHVkZWRpcik7IFwKKysJICAkKElOU1RBTExfREFUQSkgbGliaW50bC5oICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2xpYmludGwuaDsgXAorKwkgICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgXAorKwkgICAgJChJTlNUQUxMX0RBVEEpIGxpYmludGwuJGxhICQoREVTVERJUikkKGxpYmRpcikvbGliaW50bC4kbGE7IFwKKysJICBpZiB0ZXN0ICJAUkVMT0NBVEFCTEVAIiA9IHllczsgdGhlbiBcCisrCSAgICBkZXBlbmRlbmNpZXM9YHNlZCAtbiAtZSAncyxeZGVwZW5kZW5jeV9saWJzPVwoLipcKSxcMSxwJyA8ICQoREVTVERJUikkKGxpYmRpcikvbGliaW50bC5sYSB8IHNlZCAtZSAicyxeJywsIiAtZSAicywnXCQkLCwiYDsgXAorKwkgICAgaWYgdGVzdCAtbiAiJCRkZXBlbmRlbmNpZXMiOyB0aGVuIFwKKysJICAgICAgcm0gLWYgJChERVNURElSKSQobGliZGlyKS9saWJpbnRsLmxhOyBcCisrCSAgICBmaTsgXAorIAkgIGZpOyBcCistCSAgJChJTlNUQUxMX0RBVEEpIGludGxoLmluc3QgJChpbmNsdWRlZGlyKS9saWJpbnRsLmg7IFwKKy0JICAkKElOU1RBTExfREFUQSkgbGliaW50bC5hICQobGliZGlyKS9saWJpbnRsLmE7IFwKKyAJZWxzZSBcCisgCSAgOiA7IFwKKyAJZmkKKy1pbnN0YWxsLWRhdGE6IGFsbAorLQlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0IjsgdGhlbiBcCistCSAgaWYgdGVzdCAtciAkKE1LSU5TVEFMTERJUlMpOyB0aGVuIFwKKy0JICAgICQoTUtJTlNUQUxMRElSUykgJChnZXR0ZXh0c3JjZGlyKTsgXAorKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIiBcCisrCSAgICYmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0gbm87IHRoZW4gXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKTsgXAorKwkgICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgXAorKwkgICAgJChJTlNUQUxMX0RBVEEpIGxpYmdudWludGwuJGxhICQoREVTVERJUikkKGxpYmRpcikvbGliZ251aW50bC4kbGE7IFwKKysJICBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL3ByZWxvYWRhYmxlX2xpYmludGwuc287IFwKKysJICAkKElOU1RBTExfREFUQSkgJChERVNURElSKSQobGliZGlyKS9saWJnbnVpbnRsLnNvICQoREVTVERJUikkKGxpYmRpcikvcHJlbG9hZGFibGVfbGliaW50bC5zbzsgXAorKwkgICQoTElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBcCisrCSAgICBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYmdudWludGwuJGxhOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0geWVzOyB0aGVuIFwKKysJICB0ZXN0IEBHTElCQzIxQCAhPSBubyB8fCAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGxpYmRpcik7IFwKKysJICB0ZW1wPSQoREVTVERJUikkKGxpYmRpcikvdC1jaGFyc2V0LmFsaWFzOyBcCisrCSAgZGVzdD0kKERFU1RESVIpJChsaWJkaXIpL2NoYXJzZXQuYWxpYXM7IFwKKysJICBpZiB0ZXN0IC1mICQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgdGhlbiBcCisrCSAgICBvcmlnPSQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgXAorKwkgICAgc2VkIC1mIHJlZi1hZGQuc2VkICQkb3JpZyA+ICQkdGVtcDsgXAorKwkgICAgJChJTlNUQUxMX0RBVEEpICQkdGVtcCAkJGRlc3Q7IFwKKysJICAgIHJtIC1mICQkdGVtcDsgXAorIAkgIGVsc2UgXAorLQkgICAgJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoZ2V0dGV4dHNyY2Rpcik7IFwKKysJICAgIGlmIHRlc3QgQEdMSUJDMjFAID0gbm87IHRoZW4gXAorKwkgICAgICBvcmlnPWNoYXJzZXQuYWxpYXM7IFwKKysJICAgICAgc2VkIC1mIHJlZi1hZGQuc2VkICQkb3JpZyA+ICQkdGVtcDsgXAorKwkgICAgICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorKwkgICAgICBybSAtZiAkJHRlbXA7IFwKKysJICAgIGZpOyBcCisgCSAgZmk7IFwKKy0JICAkKElOU1RBTExfREFUQSkgVkVSU0lPTiAkKGdldHRleHRzcmNkaXIpL1ZFUlNJT047IFwKKy0JICBkaXN0cz0iJChESVNURklMRVMuY29tbW9uKSI7IFwKKysJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGxvY2FsZWRpcik7IFwKKysJICB0ZXN0IC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzIFwKKysJICAgICYmIG9yaWc9JChERVNURElSKSQobG9jYWxlZGlyKS9sb2NhbGUuYWxpYXMgXAorKwkgICAgfHwgb3JpZz0kKHNyY2RpcikvbG9jYWxlLmFsaWFzOyBcCisrCSAgdGVtcD0kKERFU1RESVIpJChsb2NhbGVkaXIpL3QtbG9jYWxlLmFsaWFzOyBcCisrCSAgZGVzdD0kKERFU1RESVIpJChsb2NhbGVkaXIpL2xvY2FsZS5hbGlhczsgXAorKwkgIHNlZCAtZiByZWYtYWRkLnNlZCAkJG9yaWcgPiAkJHRlbXA7IFwKKysJICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorKwkgIHJtIC1mICQkdGVtcDsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorK2luc3RhbGwtZGF0YTogYWxsCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKysJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisrCSAgJChJTlNUQUxMX0RBVEEpIFZFUlNJT04gJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvVkVSU0lPTjsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSBDaGFuZ2VMb2cuaW5zdCAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS9DaGFuZ2VMb2c7IFwKKysJICBkaXN0cz0iQ09QWUlORy5MSUItMi4wIENPUFlJTkcuTElCLTIuMSAkKERJU1RGSUxFUy5jb21tb24pIjsgXAorIAkgIGZvciBmaWxlIGluICQkZGlzdHM7IGRvIFwKKy0JICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRmaWxlICQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisrCSAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkZmlsZSBcCisrCQkJICAgICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorIAkgIGRvbmU7IFwKKysJICBjaG1vZCBhK3ggJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvY29uZmlnLmNoYXJzZXQ7IFwKKysJICBkaXN0cz0iJChESVNURklMRVMuZ2VuZXJhdGVkKSI7IFwKKysJICBmb3IgZmlsZSBpbiAkJGRpc3RzOyBkbyBcCisrCSAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBkaXI9LjsgZWxzZSBkaXI9JChzcmNkaXIpOyBmaTsgXAorKwkgICAgJChJTlNUQUxMX0RBVEEpICQkZGlyLyQkZmlsZSBcCisrCQkJICAgICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorKwkgIGRvbmU7IFwKKysJICBkaXN0cz0iJChESVNURklMRVMub2Jzb2xldGUpIjsgXAorKwkgIGZvciBmaWxlIGluICQkZGlzdHM7IGRvIFwKKysJICAgIHJtIC1mICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorKwkgIGRvbmU7IFwKKysJZWxzZSBcCisrCSAgOiA7IFwKKysJZmkKKysKKytpbnN0YWxsLXN0cmlwOiBpbnN0YWxsCisrCisraW5zdGFsbGRpcnM6CisrCWlmIHsgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC1ydW50aW1lIiB8fCB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgfSBcCisrCSAgICYmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0geWVzOyB0aGVuIFwKKysJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGxpYmRpcikgJChERVNURElSKSQoaW5jbHVkZWRpcik7IFwKKysJZWxzZSBcCisrCSAgOiA7IFwKKysJZmkKKysJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyIgXAorKwkgICAmJiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IG5vOyB0aGVuIFwKKysJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGxpYmRpcik7IFwKKysJZWxzZSBcCisrCSAgOiA7IFwKKysJZmkKKysJaWYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorKwkgIHRlc3QgQEdMSUJDMjFAICE9IG5vIHx8ICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKTsgXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobG9jYWxlZGlyKTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisrCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKTsgXAorIAllbHNlIFwKKyAJICA6IDsgXAorIAlmaQorQEAgLTE0MywyMiArMzY3LDc2IEBACisgaW5zdGFsbGNoZWNrOgorIAorIHVuaW5zdGFsbDoKKy0JZGlzdHM9IiQoRElTVEZJTEVTLmNvbW1vbikiOyBcCistCWZvciBmaWxlIGluICQkZGlzdHM7IGRvIFwKKy0JICBybSAtZiAkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorLQlkb25lCisrCWlmIHsgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC1ydW50aW1lIiB8fCB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgfSBcCisrCSAgICYmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0geWVzOyB0aGVuIFwKKysJICBybSAtZiAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9saWJpbnRsLmg7IFwKKysJICAkKExJQlRPT0wpIC0tbW9kZT11bmluc3RhbGwgXAorKwkgICAgcm0gLWYgJChERVNURElSKSQobGliZGlyKS9saWJpbnRsLiRsYTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIiBcCisrCSAgICYmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0gbm87IHRoZW4gXAorKwkgIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvcHJlbG9hZGFibGVfbGliaW50bC5zbzsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorKwlpZiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IHllczsgdGhlbiBcCisrCSAgaWYgdGVzdCAtZiAkKERFU1RESVIpJChsaWJkaXIpL2NoYXJzZXQuYWxpYXM7IHRoZW4gXAorKwkgICAgdGVtcD0kKERFU1RESVIpJChsaWJkaXIpL3QtY2hhcnNldC5hbGlhczsgXAorKwkgICAgZGVzdD0kKERFU1RESVIpJChsaWJkaXIpL2NoYXJzZXQuYWxpYXM7IFwKKysJICAgIHNlZCAtZiByZWYtZGVsLnNlZCAkJGRlc3QgPiAkJHRlbXA7IFwKKysJICAgIGlmIGdyZXAgJ14jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTogJCQnICQkdGVtcCA+IC9kZXYvbnVsbDsgdGhlbiBcCisrCSAgICAgIHJtIC1mICQkZGVzdDsgXAorKwkgICAgZWxzZSBcCisrCSAgICAgICQoSU5TVEFMTF9EQVRBKSAkJHRlbXAgJCRkZXN0OyBcCisrCSAgICBmaTsgXAorKwkgICAgcm0gLWYgJCR0ZW1wOyBcCisrCSAgZmk7IFwKKysJICBpZiB0ZXN0IC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzOyB0aGVuIFwKKysJICAgIHRlbXA9JChERVNURElSKSQobG9jYWxlZGlyKS90LWxvY2FsZS5hbGlhczsgXAorKwkgICAgZGVzdD0kKERFU1RESVIpJChsb2NhbGVkaXIpL2xvY2FsZS5hbGlhczsgXAorKwkgICAgc2VkIC1mIHJlZi1kZWwuc2VkICQkZGVzdCA+ICQkdGVtcDsgXAorKwkgICAgaWYgZ3JlcCAnXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAkJCcgJCR0ZW1wID4gL2Rldi9udWxsOyB0aGVuIFwKKysJICAgICAgcm0gLWYgJCRkZXN0OyBcCisrCSAgICBlbHNlIFwKKysJICAgICAgJChJTlNUQUxMX0RBVEEpICQkdGVtcCAkJGRlc3Q7IFwKKysJICAgIGZpOyBcCisrCSAgICBybSAtZiAkJHRlbXA7IFwKKysJICBmaTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisrCSAgZm9yIGZpbGUgaW4gVkVSU0lPTiBDaGFuZ2VMb2cgQ09QWUlORy5MSUItMi4wIENPUFlJTkcuTElCLTIuMSAkKERJU1RGSUxFUy5jb21tb24pICQoRElTVEZJTEVTLmdlbmVyYXRlZCk7IGRvIFwKKysJICAgIHJtIC1mICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorKwkgIGRvbmU7IFwKKysJZWxzZSBcCisrCSAgOiA7IFwKKysJZmkKKyAKKy1pbmZvIGR2aToKKytpbmZvIGR2aSBwcyBwZGYgaHRtbDoKKyAKKy0kKE9CSkVDVFMpOiAuLi9jb25maWcuaCBsaWJnZXR0ZXh0LmgKKy1iaW5kdGV4dGRvbS4kbG8gZmluZGRvbWFpbi4kbG8gbG9hZG1zZ2NhdC4kbG86IGdldHRleHRQLmggZ2V0dGV4dC5oIGxvYWRpbmZvLmgKKy1kY2dldHRleHQuJGxvOiBnZXR0ZXh0UC5oIGdldHRleHQuaCBoYXNoLXN0cmluZy5oIGxvYWRpbmZvLmgKKyskKE9CSkVDVFMpOiAuLi9jb25maWcuaCBsaWJnbnVpbnRsLmgKKytiaW5kdGV4dGRvbS4kbG8gZGNnZXR0ZXh0LiRsbyBkY2lnZXR0ZXh0LiRsbyBkY25nZXR0ZXh0LiRsbyBkZ2V0dGV4dC4kbG8gZG5nZXR0ZXh0LiRsbyBmaW5kZG9tYWluLiRsbyBnZXR0ZXh0LiRsbyBpbnRsLWNvbXBhdC4kbG8gbG9hZG1zZ2NhdC4kbG8gbG9jYWxlYWxpYXMuJGxvIG5nZXR0ZXh0LiRsbyB0ZXh0ZG9tYWluLiRsbzogJChzcmNkaXIpL2dldHRleHRQLmggJChzcmNkaXIpL2dtby5oICQoc3JjZGlyKS9sb2FkaW5mby5oCisrZGNpZ2V0dGV4dC4kbG8gbG9hZG1zZ2NhdC4kbG86ICQoc3JjZGlyKS9oYXNoLXN0cmluZy5oCisrZXhwbG9kZW5hbWUuJGxvIGwxMG5mbGlzdC4kbG86ICQoc3JjZGlyKS9sb2FkaW5mby5oCisrZGNpZ2V0dGV4dC4kbG8gbG9hZG1zZ2NhdC4kbG8gcGx1cmFsLiRsbyBwbHVyYWwtZXhwLiRsbzogJChzcmNkaXIpL3BsdXJhbC1leHAuaAorK2RjaWdldHRleHQuJGxvOiAkKHNyY2RpcikvZXZhbC1wbHVyYWwuaAorK2xvY2FsY2hhcnNldC4kbG86ICQoc3JjZGlyKS9sb2NhbGNoYXJzZXQuaAorK2xvY2FsZWFsaWFzLiRsbyBsb2NhbGNoYXJzZXQuJGxvIHJlbG9jYXRhYmxlLiRsbzogJChzcmNkaXIpL3JlbG9jYXRhYmxlLmgKKytwcmludGYuJGxvOiAkKHNyY2RpcikvcHJpbnRmLWFyZ3MuaCAkKHNyY2RpcikvcHJpbnRmLWFyZ3MuYyAkKHNyY2RpcikvcHJpbnRmLXBhcnNlLmggJChzcmNkaXIpL3dwcmludGYtcGFyc2UuaCAkKHNyY2RpcikveHNpemUuaCAkKHNyY2RpcikvcHJpbnRmLXBhcnNlLmMgJChzcmNkaXIpL3Zhc25wcmludGYuaCAkKHNyY2RpcikvdmFzbndwcmludGYuaCAkKHNyY2RpcikvdmFzbnByaW50Zi5jCisgCisgdGFnczogVEFHUworIAorIFRBR1M6ICQoSEVBREVSUykgJChTT1VSQ0VTKQorIAloZXJlPWBwd2RgOyBjZCAkKHNyY2RpcikgJiYgZXRhZ3MgLW8gJCRoZXJlL1RBR1MgJChIRUFERVJTKSAkKFNPVVJDRVMpCisgCisrY3RhZ3M6IENUQUdTCisrCisrQ1RBR1M6ICQoSEVBREVSUykgJChTT1VSQ0VTKQorKwloZXJlPWBwd2RgOyBjZCAkKHNyY2RpcikgJiYgY3RhZ3MgLW8gJCRoZXJlL0NUQUdTICQoSEVBREVSUykgJChTT1VSQ0VTKQorKworIGlkOiBJRAorIAorIElEOiAkKEhFQURFUlMpICQoU09VUkNFUykKK0BAIC0xNjYsMTIgKzQ0NCwxOSBAQAorIAorIAorIG1vc3RseWNsZWFuOgorLQlybSAtZiAqLmEgKi5vICoubG8gY29yZSBjb3JlLioKKysJcm0gLWYgKi5hICoubGEgKi5vICoub2JqICoubG8gY29yZSBjb3JlLioKKysJcm0gLWYgbGliZ251aW50bC5oIGxpYmludGwuaCBjaGFyc2V0LmFsaWFzIHJlZi1hZGQuc2VkIHJlZi1kZWwuc2VkCisrCXJtIC1mIC1yIC5saWJzIF9saWJzCisgCisgY2xlYW46IG1vc3RseWNsZWFuCisgCisgZGlzdGNsZWFuOiBjbGVhbgorLQlybSAtZiBNYWtlZmlsZSBJRCBUQUdTIHBvMm1zZy5zZWQgcG8ydGJsLnNlZCBsaWJpbnRsLmgKKysJcm0gLWYgTWFrZWZpbGUgSUQgVEFHUworKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiIHx8IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKysJICBybSAtZiBDaGFuZ2VMb2cuaW5zdCAkKERJU1RGSUxFUy5ub3JtYWwpOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisgCisgbWFpbnRhaW5lci1jbGVhbjogZGlzdGNsZWFuCisgCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZTsiCitAQCAtMTgxLDMzICs0NjYsMjcgQEAKKyAjIEdOVSBnZXR0ZXh0IG5lZWRzIG5vdCBjb250YWluIHRoZSBmaWxlIGBWRVJTSU9OJyBidXQgY29udGFpbnMgc29tZQorICMgb3RoZXIgZmlsZXMgd2hpY2ggc2hvdWxkIG5vdCBiZSBkaXN0cmlidXRlZCBpbiBvdGhlciBwYWNrYWdlcy4KKyBkaXN0ZGlyID0gLi4vJChQQUNLQUdFKS0kKFZFUlNJT04pLyQoc3ViZGlyKQorLWRpc3QgZGlzdGRpcjogTWFrZWZpbGUgJChESVNURklMRVMpCistCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gZ2V0dGV4dDsgdGhlbiBcCistCSAgYWRkaXRpb25hbD0iJChESVNURklMRVMuZ2V0dGV4dCkiOyBcCisrZGlzdCBkaXN0ZGlyOiBNYWtlZmlsZQorKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisrCSAgOiA7IFwKKyAJZWxzZSBcCistCSAgYWRkaXRpb25hbD0iJChESVNURklMRVMubm9ybWFsKSI7IFwKKy0JZmk7IFwKKy0JZm9yIGZpbGUgaW4gJChESVNURklMRVMuY29tbW9uKSAkJGFkZGl0aW9uYWw7IGRvIFwKKy0JICBsbiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikgMj4gL2Rldi9udWxsIFwKKy0JICAgIHx8IGNwIC1wICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKTsgXAorLQlkb25lCistCistZGlzdC1saWJjOgorLQl0YXIgemN2ZiBpbnRsLWdsaWJjLnRhci5neiAkKENPTVNSQ1MpICQoQ09NSERSUykgbGliaW50bC5oLmdsaWJjCistCistTWFrZWZpbGU6IE1ha2VmaWxlLmluIC4uL2NvbmZpZy5zdGF0dXMKKy0JY2QgLi4gXAorLQkgICYmIENPTkZJR19GSUxFUz0kKHN1YmRpcikvJEAgQ09ORklHX0hFQURFUlM9ICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cworKwkgIGlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtcnVudGltZSI7IHRoZW4gXAorKwkgICAgYWRkaXRpb25hbD0iJChESVNURklMRVMuZ2V0dGV4dCkiOyBcCisrCSAgZWxzZSBcCisrCSAgICBhZGRpdGlvbmFsPSIkKERJU1RGSUxFUy5ub3JtYWwpIjsgXAorKwkgIGZpOyBcCisrCSAgJChNQUtFKSAkKERJU1RGSUxFUy5jb21tb24pICQoRElTVEZJTEVTLmdlbmVyYXRlZCkgJCRhZGRpdGlvbmFsOyBcCisrCSAgZm9yIGZpbGUgaW4gQ2hhbmdlTG9nICQoRElTVEZJTEVTLmNvbW1vbikgJChESVNURklMRVMuZ2VuZXJhdGVkKSAkJGFkZGl0aW9uYWw7IGRvIFwKKysJICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIGRpcj0uOyBlbHNlIGRpcj0kKHNyY2Rpcik7IGZpOyBcCisrCSAgICBjcCAtcCAkJGRpci8kJGZpbGUgJChkaXN0ZGlyKTsgXAorKwkgIGRvbmU7IFwKKysJZmkKKyAKKy0jIFRoZSBkZXBlbmRlbmN5IGZvciBpbnRsaC5pbnN0IGlzIGRpZmZlcmVudCBpbiBnZXR0ZXh0IGFuZCBhbGwgb3RoZXIKKy0jIHBhY2thZ2VzLiAgQmVjYXVzZSB3ZSBjYW5ub3QgeW91IEdOVSBtYWtlIGZlYXR1cmVzIHdlIGhhdmUgdG8gc29sdmUKKy0jIHRoZSBwcm9ibGVtIHdoaWxlIHJld3JpdGluZyBNYWtlZmlsZS5pbi4KKy1AR1RfWUVTQGludGxoLmluc3Q6IGludGxoLmluc3QuaW4gLi4vY29uZmlnLnN0YXR1cworLUBHVF9ZRVNACWNkIC4uIFwKKy1AR1RfWUVTQAkmJiBDT05GSUdfRklMRVM9JChzdWJkaXIpLyRAIENPTkZJR19IRUFERVJTPSBcCistQEdUX1lFU0AJICAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMKKy1AR1RfTk9ALlBIT05ZOiBpbnRsaC5pbnN0CistQEdUX05PQGludGxoLmluc3Q6CisrTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCisrIyBUaGlzIHdvdWxkIGJlIG1vcmUgZWZmaWNpZW50LCBidXQgZG9lc24ndCB3b3JrIGFueSBtb3JlIHdpdGggYXV0b2NvbmYtMi41NywKKysjIHdoZW4gQUNfQ09ORklHX0ZJTEVTKFtpbnRsL01ha2VmaWxlOnNvbWVkaXIvTWFrZWZpbGUuaW5dKSBpcyB1c2VkLgorKyMJY2QgJCh0b3BfYnVpbGRkaXIpICYmIENPTkZJR19GSUxFUz0kKHN1YmRpcikvJEAgQ09ORklHX0hFQURFUlM9ICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cworIAorICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSBub3QgdG8gZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisgIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbmdldHRleHQuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9uZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTMzNzIxMDMyIC0wNDAwCitAQCAtMCwwICsxLDY1IEBACisrLyogSW1wbGVtZW50YXRpb24gb2YgbmdldHRleHQoMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBfX25lZWRfTlVMTAorKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgPHN0ZGxpYi5oPgkJLyogSnVzdCBmb3IgTlVMTC4gICovCisrI2VuZGlmCisrCisrI2luY2x1ZGUgImdldHRleHRQLmgiCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8bG9jYWxlLmg+CisrCisrLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworKworKy8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKKysgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCisrICAgY29kZSBpcyBhbHNvIHVzZWQgaW4gR05VIEMgTGlicmFyeSB3aGVyZSB0aGUgbmFtZXMgaGF2ZSBhIF9fCisrICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBOR0VUVEVYVCBfX25nZXR0ZXh0CisrIyBkZWZpbmUgRENOR0VUVEVYVCBfX2RjbmdldHRleHQKKysjZWxzZQorKyMgZGVmaW5lIE5HRVRURVhUIGxpYmludGxfbmdldHRleHQKKysjIGRlZmluZSBEQ05HRVRURVhUIGxpYmludGxfZGNuZ2V0dGV4dAorKyNlbmRpZgorKworKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIGN1cnJlbnQgZGVmYXVsdCBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50CisrICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIE1TR0lEIGl0c2VsZiAodGhlIGRlZmF1bHQKKysgICB0ZXh0KS4gICovCisrY2hhciAqCisrTkdFVFRFWFQgKGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBuKQorK3sKKysgIHJldHVybiBEQ05HRVRURVhUIChOVUxMLCBtc2dpZDEsIG1zZ2lkMiwgbiwgTENfTUVTU0FHRVMpOworK30KKysKKysjaWZkZWYgX0xJQkMKKysvKiBBbGlhcyBmb3IgZnVuY3Rpb24gbmFtZSBpbiBHTlUgQyBMaWJyYXJ5LiAgKi8KKyt3ZWFrX2FsaWFzIChfX25nZXR0ZXh0LCBuZ2V0dGV4dCk7CisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvb3MyY29tcGF0LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvb3MyY29tcGF0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC41Mzk3MjAxMjAgLTA0MDAKK0BAIC0wLDAgKzEsOTggQEAKKysvKiBPUy8yIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zLgorKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjZGVmaW5lIE9TMl9BV0FSRQorKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorKworKy8qIEEgdmVyc2lvbiBvZiBnZXRlbnYoKSB0aGF0IHdvcmtzIGZyb20gRExMcyAqLworK2V4dGVybiB1bnNpZ25lZCBsb25nIERvc1NjYW5FbnYgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzek5hbWUsIHVuc2lnbmVkIGNoYXIgKipwcHN6VmFsdWUpOworKworK2NoYXIgKgorK19ubF9nZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUpCisreworKyAgdW5zaWduZWQgY2hhciAqdmFsdWU7CisrICBpZiAoRG9zU2NhbkVudiAobmFtZSwgJnZhbHVlKSkKKysgICAgcmV0dXJuIE5VTEw7CisrICBlbHNlCisrICAgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrLyogQSBmaXhlZCBzaXplIGJ1ZmZlci4gICovCisrY2hhciBsaWJpbnRsX25sX2RlZmF1bHRfZGlybmFtZVtNQVhQQVRITEVOKzFdOworKworK2NoYXIgKl9ubG9zMl9saWJkaXIgPSBOVUxMOworK2NoYXIgKl9ubG9zMl9sb2NhbGVhbGlhc3BhdGggPSBOVUxMOworK2NoYXIgKl9ubG9zMl9sb2NhbGVkaXIgPSBOVUxMOworKworK3N0YXRpYyBfX2F0dHJpYnV0ZV9fKChjb25zdHJ1Y3RvcikpIHZvaWQKKytubG9zMl9pbml0aWFsaXplICgpCisreworKyAgY2hhciAqcm9vdCA9IGdldGVudiAoIlVOSVhST09UIik7CisrICBjaGFyICpnbnVsb2NhbGVkaXIgPSBnZXRlbnYgKCJHTlVMT0NBTEVESVIiKTsKKysKKysgIF9ubG9zMl9saWJkaXIgPSBnbnVsb2NhbGVkaXI7CisrICBpZiAoIV9ubG9zMl9saWJkaXIpCisrICAgIHsKKysgICAgICBpZiAocm9vdCkKKysgICAgICAgIHsKKysgICAgICAgICAgc2l6ZV90IHNsID0gc3RybGVuIChyb290KTsKKysgICAgICAgICAgX25sb3MyX2xpYmRpciA9IChjaGFyICopIG1hbGxvYyAoc2wgKyBzdHJsZW4gKExJQkRJUikgKyAxKTsKKysgICAgICAgICAgbWVtY3B5IChfbmxvczJfbGliZGlyLCByb290LCBzbCk7CisrICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xpYmRpciArIHNsLCBMSUJESVIsIHN0cmxlbiAoTElCRElSKSArIDEpOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIF9ubG9zMl9saWJkaXIgPSBMSUJESVI7CisrICAgIH0KKysKKysgIF9ubG9zMl9sb2NhbGVhbGlhc3BhdGggPSBnbnVsb2NhbGVkaXI7CisrICBpZiAoIV9ubG9zMl9sb2NhbGVhbGlhc3BhdGgpCisrICAgIHsKKysgICAgICBpZiAocm9vdCkKKysgICAgICAgIHsKKysgICAgICAgICAgc2l6ZV90IHNsID0gc3RybGVuIChyb290KTsKKysgICAgICAgICAgX25sb3MyX2xvY2FsZWFsaWFzcGF0aCA9IChjaGFyICopIG1hbGxvYyAoc2wgKyBzdHJsZW4gKExPQ0FMRV9BTElBU19QQVRIKSArIDEpOworKyAgICAgICAgICBtZW1jcHkgKF9ubG9zMl9sb2NhbGVhbGlhc3BhdGgsIHJvb3QsIHNsKTsKKysgICAgICAgICAgbWVtY3B5IChfbmxvczJfbG9jYWxlYWxpYXNwYXRoICsgc2wsIExPQ0FMRV9BTElBU19QQVRILCBzdHJsZW4gKExPQ0FMRV9BTElBU19QQVRIKSArIDEpOworKyAgICAgICAgfQorKyAgICAgZWxzZQorKyAgICAgICAgX25sb3MyX2xvY2FsZWFsaWFzcGF0aCA9IExPQ0FMRV9BTElBU19QQVRIOworKyAgICB9CisrCisrICBfbmxvczJfbG9jYWxlZGlyID0gZ251bG9jYWxlZGlyOworKyAgaWYgKCFfbmxvczJfbG9jYWxlZGlyKQorKyAgICB7CisrICAgICAgaWYgKHJvb3QpCisrICAgICAgICB7CisrICAgICAgICAgIHNpemVfdCBzbCA9IHN0cmxlbiAocm9vdCk7CisrICAgICAgICAgIF9ubG9zMl9sb2NhbGVkaXIgPSAoY2hhciAqKSBtYWxsb2MgKHNsICsgc3RybGVuIChMT0NBTEVESVIpICsgMSk7CisrICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWRpciwgcm9vdCwgc2wpOworKyAgICAgICAgICBtZW1jcHkgKF9ubG9zMl9sb2NhbGVkaXIgKyBzbCwgTE9DQUxFRElSLCBzdHJsZW4gKExPQ0FMRURJUikgKyAxKTsKKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICBfbmxvczJfbG9jYWxlZGlyID0gTE9DQUxFRElSOworKyAgICB9CisrCisrICBpZiAoc3RybGVuIChfbmxvczJfbG9jYWxlZGlyKSA8PSBNQVhQQVRITEVOKQorKyAgICBzdHJjcHkgKGxpYmludGxfbmxfZGVmYXVsdF9kaXJuYW1lLCBfbmxvczJfbG9jYWxlZGlyKTsKKyt9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvb3MyY29tcGF0LmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvb3MyY29tcGF0LmgJMjAwNC0wOS0xMiAxNDo0MDozNC41NDQ3MTkzNjAgLTA0MDAKK0BAIC0wLDAgKzEsNDYgQEAKKysvKiBPUy8yIGNvbXBhdGliaWxpdHkgZGVmaW5lcy4KKysgICBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgaW5jbHVkZWQgZnJvbSBjb25maWcuaAorKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBXaGVuIGluY2x1ZGVkIGZyb20gb3MyY29tcGF0Lmggd2UgbmVlZCBhbGwgdGhlIG9yaWdpbmFsIGRlZmluaXRpb25zICovCisrI2lmbmRlZiBPUzJfQVdBUkUKKysKKysjdW5kZWYgTElCRElSCisrI2RlZmluZSBMSUJESVIJCQlfbmxvczJfbGliZGlyCisrZXh0ZXJuIGNoYXIgKl9ubG9zMl9saWJkaXI7CisrCisrI3VuZGVmIExPQ0FMRURJUgorKyNkZWZpbmUgTE9DQUxFRElSCQlfbmxvczJfbG9jYWxlZGlyCisrZXh0ZXJuIGNoYXIgKl9ubG9zMl9sb2NhbGVkaXI7CisrCisrI3VuZGVmIExPQ0FMRV9BTElBU19QQVRICisrI2RlZmluZSBMT0NBTEVfQUxJQVNfUEFUSAlfbmxvczJfbG9jYWxlYWxpYXNwYXRoCisrZXh0ZXJuIGNoYXIgKl9ubG9zMl9sb2NhbGVhbGlhc3BhdGg7CisrCisrI2VuZGlmCisrCisrI3VuZGVmIEhBVkVfU1RSQ0FTRUNNUAorKyNkZWZpbmUgSEFWRV9TVFJDQVNFQ01QIDEKKysjZGVmaW5lIHN0cmNhc2VjbXAgc3RyaWNtcAorKyNkZWZpbmUgc3RybmNhc2VjbXAgc3RybmljbXAKKysKKysvKiBXZSBoYXZlIG91ciBvd24gZ2V0ZW52KCkgd2hpY2ggd29ya3MgZXZlbiBpZiBsaWJyYXJ5IGlzIGNvbXBpbGVkIGFzIERMTCAqLworKyNkZWZpbmUgZ2V0ZW52IF9ubF9nZXRlbnYKKysKKysvKiBPbGRlciB2ZXJzaW9ucyBvZiBnZXR0ZXh0IHVzZWQgLTEgYXMgdGhlIHZhbHVlIG9mIExDX01FU1NBR0VTICovCisrI2RlZmluZSBMQ19NRVNTQUdFU19DT01QQVQgKC0xKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL29zZGVwLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvb3NkZXAuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjU1MDcxODQ0OCAtMDQwMAorQEAgLTAsMCArMSwyNCBAQAorKy8qIE9TIGRlcGVuZGVudCBwYXJ0cyBvZiBsaWJpbnRsLgorKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWYgZGVmaW5lZCBfX0VNWF9fCisrIyBpbmNsdWRlICJvczJjb21wYXQuYyIKKysjZWxzZQorKy8qIEF2b2lkIEFJWCBjb21waWxlciB3YXJuaW5nLiAgKi8KKyt0eXBlZGVmIGludCBkdW1teTsKKysjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wbHVyYWwuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wbHVyYWwuYwkyMDA0LTA5LTEyIDE0OjQwOjM2LjU3MTQxMTI1NiAtMDQwMAorQEAgLTAsMCArMSwxNDkwIEBACisrLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgZnJvbSBwbHVyYWwueQorKyAgIGJ5IEdOVSBiaXNvbiAxLjM1LiAgKi8KKysKKysjZGVmaW5lIFlZQklTT04gMSAgLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KKysKKysjZGVmaW5lIHl5cGFyc2UgX19nZXR0ZXh0cGFyc2UKKysjZGVmaW5lIHl5bGV4IF9fZ2V0dGV4dGxleAorKyNkZWZpbmUgeXllcnJvciBfX2dldHRleHRlcnJvcgorKyNkZWZpbmUgeXlsdmFsIF9fZ2V0dGV4dGx2YWwKKysjZGVmaW5lIHl5Y2hhciBfX2dldHRleHRjaGFyCisrI2RlZmluZSB5eWRlYnVnIF9fZ2V0dGV4dGRlYnVnCisrI2RlZmluZSB5eW5lcnJzIF9fZ2V0dGV4dG5lcnJzCisrIyBkZWZpbmUJRVFVT1AyCTI1NworKyMgZGVmaW5lCUNNUE9QMgkyNTgKKysjIGRlZmluZQlBRERPUDIJMjU5CisrIyBkZWZpbmUJTVVMT1AyCTI2MAorKyMgZGVmaW5lCU5VTUJFUgkyNjEKKysKKysjbGluZSAxICJwbHVyYWwueSIKKysKKysvKiBFeHByZXNzaW9uIHBhcnNpbmcgZm9yIHBsdXJhbCBmb3JtIHNlbGVjdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAyMDAwLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBUaGUgYmlzb24gZ2VuZXJhdGVkIHBhcnNlciB1c2VzIGFsbG9jYS4gIEFJWCAzIGZvcmNlcyB1cyB0byBwdXQgdGhpcworKyAgIGRlY2xhcmF0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuICBUaGUgZGVjbGFyYXRpb24gaW4gYmlzb24ncworKyAgIHNrZWxldG9uIGZpbGUgY29tZXMgdG9vIGxhdGUuICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPgorKyAgIGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZSBhcmJpdHJhcnkgc3lzdGVtIGhlYWRlcnMuICAqLworKyNpZiBkZWZpbmVkIF9BSVggJiYgIWRlZmluZWQgX19HTlVDX18KKysgI3ByYWdtYSBhbGxvY2EKKysjZW5kaWYKKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSAicGx1cmFsLWV4cC5oIgorKworKy8qIFRoZSBtYWluIGZ1bmN0aW9uIGdlbmVyYXRlZCBieSB0aGUgcGFyc2VyIGlzIGNhbGxlZCBfX2dldHRleHRwYXJzZSwKKysgICBidXQgd2Ugd2FudCBpdCB0byBiZSBjYWxsZWQgUExVUkFMX1BBUlNFLiAgKi8KKysjaWZuZGVmIF9MSUJDCisrIyBkZWZpbmUgX19nZXR0ZXh0cGFyc2UgUExVUkFMX1BBUlNFCisrI2VuZGlmCisrCisrI2RlZmluZSBZWUxFWF9QQVJBTQkmKChzdHJ1Y3QgcGFyc2VfYXJncyAqKSBhcmcpLT5jcAorKyNkZWZpbmUgWVlQQVJTRV9QQVJBTQlhcmcKKysKKysjbGluZSA0OSAicGx1cmFsLnkiCisrI2lmbmRlZiBZWVNUWVBFCisrdHlwZWRlZiB1bmlvbiB7CisrICB1bnNpZ25lZCBsb25nIGludCBudW07CisrICBlbnVtIG9wZXJhdG9yIG9wOworKyAgc3RydWN0IGV4cHJlc3Npb24gKmV4cDsKKyt9IHl5c3R5cGU7CisrIyBkZWZpbmUgWVlTVFlQRSB5eXN0eXBlCisrIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKysjZW5kaWYKKysjbGluZSA1NSAicGx1cmFsLnkiCisrCisrLyogUHJvdG90eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zLiAgKi8KKytzdGF0aWMgaW50IHl5bGV4IChZWVNUWVBFICpsdmFsLCBjb25zdCBjaGFyICoqcGV4cCk7Cisrc3RhdGljIHZvaWQgeXllcnJvciAoY29uc3QgY2hhciAqc3RyKTsKKysKKysvKiBBbGxvY2F0aW9uIG9mIGV4cHJlc3Npb25zLiAgKi8KKysKKytzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHAgKGludCBuYXJncywgZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKiBjb25zdCAqYXJncykKKyt7CisrICBpbnQgaTsKKysgIHN0cnVjdCBleHByZXNzaW9uICpuZXdwOworKworKyAgLyogSWYgYW55IG9mIHRoZSBhcmd1bWVudCBjb3VsZCBub3QgYmUgbWFsbG9jJ2VkLCBqdXN0IHJldHVybiBOVUxMLiAgKi8KKysgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCisrICAgIGlmIChhcmdzW2ldID09IE5VTEwpCisrICAgICAgZ290byBmYWlsOworKworKyAgLyogQWxsb2NhdGUgYSBuZXcgZXhwcmVzc2lvbi4gICovCisrICBuZXdwID0gKHN0cnVjdCBleHByZXNzaW9uICopIG1hbGxvYyAoc2l6ZW9mICgqbmV3cCkpOworKyAgaWYgKG5ld3AgIT0gTlVMTCkKKysgICAgeworKyAgICAgIG5ld3AtPm5hcmdzID0gbmFyZ3M7CisrICAgICAgbmV3cC0+b3BlcmF0aW9uID0gb3A7CisrICAgICAgZm9yIChpID0gbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKysJbmV3cC0+dmFsLmFyZ3NbaV0gPSBhcmdzW2ldOworKyAgICAgIHJldHVybiBuZXdwOworKyAgICB9CisrCisrIGZhaWw6CisrICBmb3IgKGkgPSBuYXJncyAtIDE7IGkgPj0gMDsgaS0tKQorKyAgICBGUkVFX0VYUFJFU1NJT04gKGFyZ3NbaV0pOworKworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHBfMCAoZW51bSBvcGVyYXRvciBvcCkKKyt7CisrICByZXR1cm4gbmV3X2V4cCAoMCwgb3AsIE5VTEwpOworK30KKysKKytzdGF0aWMgaW5saW5lIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwXzEgKGVudW0gb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICpyaWdodCkKKyt7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1sxXTsKKysKKysgIGFyZ3NbMF0gPSByaWdodDsKKysgIHJldHVybiBuZXdfZXhwICgxLCBvcCwgYXJncyk7CisrfQorKworK3N0YXRpYyBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cF8yIChlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqbGVmdCwgc3RydWN0IGV4cHJlc3Npb24gKnJpZ2h0KQorK3sKKysgIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzJdOworKworKyAgYXJnc1swXSA9IGxlZnQ7CisrICBhcmdzWzFdID0gcmlnaHQ7CisrICByZXR1cm4gbmV3X2V4cCAoMiwgb3AsIGFyZ3MpOworK30KKysKKytzdGF0aWMgaW5saW5lIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwXzMgKGVudW0gb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICpiZXhwLAorKwkgICBzdHJ1Y3QgZXhwcmVzc2lvbiAqdGJyYW5jaCwgc3RydWN0IGV4cHJlc3Npb24gKmZicmFuY2gpCisreworKyAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbM107CisrCisrICBhcmdzWzBdID0gYmV4cDsKKysgIGFyZ3NbMV0gPSB0YnJhbmNoOworKyAgYXJnc1syXSA9IGZicmFuY2g7CisrICByZXR1cm4gbmV3X2V4cCAoMywgb3AsIGFyZ3MpOworK30KKysKKysjaWZuZGVmIFlZREVCVUcKKysjIGRlZmluZSBZWURFQlVHIDAKKysjZW5kaWYKKysKKysKKysKKysjZGVmaW5lCVlZRklOQUwJCTI3CisrI2RlZmluZQlZWUZMQUcJCS0zMjc2OAorKyNkZWZpbmUJWVlOVEJBU0UJMTYKKysKKysvKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICovCisrI2RlZmluZSBZWVRSQU5TTEFURSh4KSAoKHVuc2lnbmVkKSh4KSA8PSAyNjEgPyB5eXRyYW5zbGF0ZVt4XSA6IDE4KQorKworKy8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNvbiB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gKi8KKytzdGF0aWMgY29uc3QgY2hhciB5eXRyYW5zbGF0ZVtdID0KKyt7CisrICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgMTAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNSwgICAgIDIsCisrICAgICAgMTQsICAgIDE1LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAxMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgMTMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA0LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisrICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICA2LCAgICAgNywgICAgIDgsCisrICAgICAgIDksICAgIDExCisrfTsKKysKKysjaWYgWVlERUJVRworK3N0YXRpYyBjb25zdCBzaG9ydCB5eXByaHNbXSA9CisreworKyAgICAgICAwLCAgICAgMCwgICAgIDIsICAgICA4LCAgICAxMiwgICAgMTYsICAgIDIwLCAgICAyNCwgICAgMjgsICAgIDMyLAorKyAgICAgIDM1LCAgICAzNywgICAgMzkKKyt9OworK3N0YXRpYyBjb25zdCBzaG9ydCB5eXJoc1tdID0KKyt7CisrICAgICAgMTcsICAgICAwLCAgICAxNywgICAgIDMsICAgIDE3LCAgICAxMiwgICAgMTcsICAgICAwLCAgICAxNywgICAgIDQsCisrICAgICAgMTcsICAgICAwLCAgICAxNywgICAgIDUsICAgIDE3LCAgICAgMCwgICAgMTcsICAgICA2LCAgICAxNywgICAgIDAsCisrICAgICAgMTcsICAgICA3LCAgICAxNywgICAgIDAsICAgIDE3LCAgICAgOCwgICAgMTcsICAgICAwLCAgICAxNywgICAgIDksCisrICAgICAgMTcsICAgICAwLCAgICAxMCwgICAgMTcsICAgICAwLCAgICAxMywgICAgIDAsICAgIDExLCAgICAgMCwgICAgMTQsCisrICAgICAgMTcsICAgIDE1LCAgICAgMAorK307CisrCisrI2VuZGlmCisrCisrI2lmIFlZREVCVUcKKysvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAqLworK3N0YXRpYyBjb25zdCBzaG9ydCB5eXJsaW5lW10gPQorK3sKKysgICAgICAgMCwgICAxNTAsICAgMTU4LCAgIDE2MiwgICAxNjYsICAgMTcwLCAgIDE3NCwgICAxNzgsICAgMTgyLCAgIDE4NiwKKysgICAgIDE5MCwgICAxOTQsICAgMTk5CisrfTsKKysjZW5kaWYKKysKKysKKysjaWYgKFlZREVCVUcpIHx8IGRlZmluZWQgWVlFUlJPUl9WRVJCT1NFCisrCisrLyogWVlUTkFNRVtUT0tFTl9OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSB0b2tlbiBUT0tFTl9OVU0uICovCisrc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9CisreworKyAgIiQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZC4iLCAiJz8nIiwgIid8JyIsICInJiciLCAiRVFVT1AyIiwgIkNNUE9QMiIsIAorKyAgIkFERE9QMiIsICJNVUxPUDIiLCAiJyEnIiwgIk5VTUJFUiIsICInOiciLCAiJ24nIiwgIicoJyIsICInKSciLCAKKysgICJzdGFydCIsICJleHAiLCAwCisrfTsKKysjZW5kaWYKKysKKysvKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAqLworK3N0YXRpYyBjb25zdCBzaG9ydCB5eXIxW10gPQorK3sKKysgICAgICAgMCwgICAgMTYsICAgIDE3LCAgICAxNywgICAgMTcsICAgIDE3LCAgICAxNywgICAgMTcsICAgIDE3LCAgICAxNywKKysgICAgICAxNywgICAgMTcsICAgIDE3CisrfTsKKysKKysvKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gKi8KKytzdGF0aWMgY29uc3Qgc2hvcnQgeXlyMltdID0KKyt7CisrICAgICAgIDAsICAgICAxLCAgICAgNSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDIsCisrICAgICAgIDEsICAgICAxLCAgICAgMworK307CisrCisrLyogWVlERUZBQ1RbU10gLS0gZGVmYXVsdCBydWxlIHRvIHJlZHVjZSB3aXRoIGluIHN0YXRlIFMgd2hlbiBZWVRBQkxFCisrICAgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybyBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbgorKyAgIGVycm9yLiAqLworK3N0YXRpYyBjb25zdCBzaG9ydCB5eWRlZmFjdFtdID0KKyt7CisrICAgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTAsICAgICAwLCAgICAgMSwgICAgIDksICAgICAwLCAgICAgMCwgICAgIDAsCisrICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgIDAsICAgICAzLCAgICAgNCwgICAgIDUsCisrICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDAsICAgICAyLCAgICAgMCwgICAgIDAsICAgICAwCisrfTsKKysKKytzdGF0aWMgY29uc3Qgc2hvcnQgeXlkZWZnb3RvW10gPQorK3sKKysgICAgICAyNSwgICAgIDUKKyt9OworKworK3N0YXRpYyBjb25zdCBzaG9ydCB5eXBhY3RbXSA9CisreworKyAgICAgIC05LCAgICAtOSwtMzI3NjgsLTMyNzY4LCAgICAtOSwgICAgMzQsLTMyNzY4LCAgICAxMSwgICAgLTksICAgIC05LAorKyAgICAgIC05LCAgICAtOSwgICAgLTksICAgIC05LCAgICAtOSwtMzI3NjgsICAgIDI0LCAgICAzOSwgICAgNDMsICAgIDE2LAorKyAgICAgIDI2LCAgICAtMywtMzI3NjgsICAgIC05LCAgICAzNCwgICAgMjEsICAgIDUzLC0zMjc2OAorK307CisrCisrc3RhdGljIGNvbnN0IHNob3J0IHl5cGdvdG9bXSA9CisreworKyAgLTMyNzY4LCAgICAtMQorK307CisrCisrCisrI2RlZmluZQlZWUxBU1QJCTUzCisrCisrCisrc3RhdGljIGNvbnN0IHNob3J0IHl5dGFibGVbXSA9CisreworKyAgICAgICA2LCAgICAgMSwgICAgIDIsICAgICA3LCAgICAgMywgICAgIDQsICAgIDE0LCAgICAxNiwgICAgMTcsICAgIDE4LAorKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAorKyAgICAgIDE0LCAgICAyNiwgICAgMjQsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAgOCwgICAgIDksICAgIDEwLAorKyAgICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxMywgICAgMTQsICAgIDIzLCAgICAgOCwgICAgIDksICAgIDEwLAorKyAgICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDExLAorKyAgICAgIDEyLCAgICAxMywgICAgMTQsICAgIDI3CisrfTsKKysKKytzdGF0aWMgY29uc3Qgc2hvcnQgeXljaGVja1tdID0KKyt7CisrICAgICAgIDEsICAgIDEwLCAgICAxMSwgICAgIDQsICAgIDEzLCAgICAxNCwgICAgIDksICAgICA4LCAgICAgOSwgICAgMTAsCisrICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCisrICAgICAgIDksICAgICAwLCAgICAyMywgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTUsICAgICAzLCAgICAgNCwgICAgIDUsCisrICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgICA4LCAgICAgOSwgICAgMTIsICAgICAzLCAgICAgNCwgICAgIDUsCisrICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDYsCisrICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDAKKyt9OworKyNkZWZpbmUgWVlQVVJFIDEKKysKKysvKiAtKi1DLSotICBOb3RlIHNvbWUgY29tcGlsZXJzIGNob2tlIG9uIGNvbW1lbnRzIG9uIGAjbGluZScgbGluZXMuICAqLworKyNsaW5lIDMgIi91c3IvbG9jYWwvc2hhcmUvYmlzb24vYmlzb24uc2ltcGxlIgorKworKy8qIFNrZWxldG9uIG91dHB1dCBwYXJzZXIgZm9yIGJpc29uLAorKworKyAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorKyAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysKKysvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGVuIHRoaXMgZmlsZSBpcyBjb3BpZWQgYnkgQmlzb24gaW50byBhCisrICAgQmlzb24gb3V0cHV0IGZpbGUsIHlvdSBtYXkgdXNlIHRoYXQgb3V0cHV0IGZpbGUgd2l0aG91dCByZXN0cmljdGlvbi4KKysgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisrICAgaW4gdmVyc2lvbiAxLjI0IG9mIEJpc29uLiAgKi8KKysKKysvKiBUaGlzIGlzIHRoZSBwYXJzZXIgY29kZSB0aGF0IGlzIHdyaXR0ZW4gaW50byBlYWNoIGJpc29uIHBhcnNlciB3aGVuCisrICAgdGhlICVzZW1hbnRpY19wYXJzZXIgZGVjbGFyYXRpb24gaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgZ3JhbW1hci4KKysgICBJdCB3YXMgd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFuIGJ5IHNpbXBsaWZ5aW5nIHRoZSBoYWlyeSBwYXJzZXIKKysgICB1c2VkIHdoZW4gJXNlbWFudGljX3BhcnNlciBpcyBzcGVjaWZpZWQuICAqLworKworKy8qIEFsbCBzeW1ib2xzIGRlZmluZWQgYmVsb3cgc2hvdWxkIGJlZ2luIHdpdGggeXkgb3IgWVksIHRvIGF2b2lkCisrICAgaW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCisrICAgdmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1hY3Jvcy4KKysgICBUaGVyZSBhcmUgc29tZSB1bmF2b2lkYWJsZSBleGNlcHRpb25zIHdpdGhpbiBpbmNsdWRlIGZpbGVzIHRvCisrICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJTkZSSU5HRVMgT04KKysgICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8KKysKKysjaWYgISBkZWZpbmVkICh5eW92ZXJmbG93KSB8fCBkZWZpbmVkIChZWUVSUk9SX1ZFUkJPU0UpCisrCisrLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLworKworKyMgaWYgWVlTVEFDS19VU0VfQUxMT0NBCisrIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisrIyBlbHNlCisrIyAgaWZuZGVmIFlZU1RBQ0tfVVNFX0FMTE9DQQorKyMgICBpZiBkZWZpbmVkIChhbGxvY2EpIHx8IGRlZmluZWQgKF9BTExPQ0FfSCkKKysjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQorKyMgICBlbHNlCisrIyAgICBpZmRlZiBfX0dOVUNfXworKyMgICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKKysjICAgIGVuZGlmCisrIyAgIGVuZGlmCisrIyAgZW5kaWYKKysjIGVuZGlmCisrCisrIyBpZmRlZiBZWVNUQUNLX0FMTE9DCisrICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5JyB3YXJuaW5nLiAqLworKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxlICgwKQorKyMgZWxzZQorKyMgIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKKysjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKysjICAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAorKyMgIGVuZGlmCisrIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgbWFsbG9jCisrIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRSBmcmVlCisrIyBlbmRpZgorKyNlbmRpZiAvKiAhIGRlZmluZWQgKHl5b3ZlcmZsb3cpIHx8IGRlZmluZWQgKFlZRVJST1JfVkVSQk9TRSkgKi8KKysKKysKKysjaWYgKCEgZGVmaW5lZCAoeXlvdmVyZmxvdykgXAorKyAgICAgJiYgKCEgZGVmaW5lZCAoX19jcGx1c3BsdXMpIFwKKysJIHx8IChZWUxUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCisrCisrLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCisrdW5pb24geXlhbGxvYworK3sKKysgIHNob3J0IHl5c3M7CisrICBZWVNUWVBFIHl5dnM7CisrIyBpZiBZWUxTUF9ORUVERUQKKysgIFlZTFRZUEUgeXlsczsKKysjIGVuZGlmCisrfTsKKysKKysvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLworKyMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWCAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCisrCisrLyogVGhlIHNpemUgb2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0YWNrcywgZWFjaCB3aXRoCisrICAgTiBlbGVtZW50cy4gICovCisrIyBpZiBZWUxTUF9ORUVERUQKKysjICBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCisrICAgICAoKE4pICogKHNpemVvZiAoc2hvcnQpICsgc2l6ZW9mIChZWVNUWVBFKSArIHNpemVvZiAoWVlMVFlQRSkpCVwKKysgICAgICArIDIgKiBZWVNUQUNLX0dBUF9NQVgpCisrIyBlbHNlCisrIyAgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAorKyAgICAgKChOKSAqIChzaXplb2YgKHNob3J0KSArIHNpemVvZiAoWVlTVFlQRSkpCQkJCVwKKysgICAgICArIFlZU1RBQ0tfR0FQX01BWCkKKysjIGVuZGlmCisrCisrLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gRlJPTSB0byBUTy4gIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvCisrICAgbm90IG92ZXJsYXAuICAqLworKyMgaWZuZGVmIFlZQ09QWQorKyMgIGlmIDEgPCBfX0dOVUNfXworKyMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkgXAorKyAgICAgIF9fYnVpbHRpbl9tZW1jcHkgKFRvLCBGcm9tLCAoQ291bnQpICogc2l6ZW9mICgqKEZyb20pKSkKKysjICBlbHNlCisrIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KQkJXAorKyAgICAgIGRvCQkJCQlcCisrCXsJCQkJCVwKKysJICByZWdpc3RlciBZWVNJWkVfVCB5eWk7CQlcCisrCSAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykJXAorKwkgICAgKFRvKVt5eWldID0gKEZyb20pW3l5aV07CQlcCisrCX0JCQkJCVwKKysgICAgICB3aGlsZSAoMCkKKysjICBlbmRpZgorKyMgZW5kaWYKKysKKysvKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9jYXRpb24gdG8gdGhlIG5ldyBvbmUuICBUaGUKKysgICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKKysgICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQorKyAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0CisrICAgc3RhY2suICAqLworKyMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2spCQkJCQlcCisrICAgIGRvCQkJCQkJCQkJXAorKyAgICAgIHsJCQkJCQkJCQlcCisrCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAorKwlZWUNPUFkgKCZ5eXB0ci0+U3RhY2ssIFN0YWNrLCB5eXNpemUpOwkJCQlcCisrCVN0YWNrID0gJnl5cHRyLT5TdGFjazsJCQkJCQlcCisrCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWDsJXAorKwl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCisrICAgICAgfQkJCQkJCQkJCVwKKysgICAgd2hpbGUgKDApCisrCisrI2VuZGlmCisrCisrCisrI2lmICEgZGVmaW5lZCAoWVlTSVpFX1QpICYmIGRlZmluZWQgKF9fU0laRV9UWVBFX18pCisrIyBkZWZpbmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXworKyNlbmRpZgorKyNpZiAhIGRlZmluZWQgKFlZU0laRV9UKSAmJiBkZWZpbmVkIChzaXplX3QpCisrIyBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisrI2VuZGlmCisrI2lmICEgZGVmaW5lZCAoWVlTSVpFX1QpCisrIyBpZiBkZWZpbmVkIChfX1NURENfXykgfHwgZGVmaW5lZCAoX19jcGx1c3BsdXMpCisrIyAgaW5jbHVkZSA8c3RkZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKysjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisrIyBlbmRpZgorKyNlbmRpZgorKyNpZiAhIGRlZmluZWQgKFlZU0laRV9UKQorKyMgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAorKyNlbmRpZgorKworKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKKysjZGVmaW5lIHl5Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKKysjZGVmaW5lIFlZRU1QVFkJCS0yCisrI2RlZmluZSBZWUVPRgkJMAorKyNkZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFjY2VwdGxhYgorKyNkZWZpbmUgWVlBQk9SVCAJZ290byB5eWFib3J0bGFiCisrI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJybGFiMQorKy8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKKysgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgorKyAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KKysjZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQorKyNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKQkJCQkJXAorK2RvCQkJCQkJCQlcCisrICBpZiAoeXljaGFyID09IFlZRU1QVFkgJiYgeXlsZW4gPT0gMSkJCQkJXAorKyAgICB7CQkJCQkJCQlcCisrICAgICAgeXljaGFyID0gKFRva2VuKTsJCQkJCQlcCisrICAgICAgeXlsdmFsID0gKFZhbHVlKTsJCQkJCQlcCisrICAgICAgeXljaGFyMSA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwkJCQlcCisrICAgICAgWVlQT1BTVEFDSzsJCQkJCQlcCisrICAgICAgZ290byB5eWJhY2t1cDsJCQkJCQlcCisrICAgIH0JCQkJCQkJCVwKKysgIGVsc2UJCQkJCQkJCVwKKysgICAgeyAJCQkJCQkJCVwKKysgICAgICB5eWVycm9yICgic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpOwkJCVwKKysgICAgICBZWUVSUk9SOwkJCQkJCQlcCisrICAgIH0JCQkJCQkJCVwKKyt3aGlsZSAoMCkKKysKKysjZGVmaW5lIFlZVEVSUk9SCTEKKysjZGVmaW5lIFlZRVJSQ09ERQkyNTYKKysKKysKKysvKiBZWUxMT0NfREVGQVVMVCAtLSBDb21wdXRlIHRoZSBkZWZhdWx0IGxvY2F0aW9uIChiZWZvcmUgdGhlIGFjdGlvbnMKKysgICBhcmUgcnVuKS4KKysKKysgICBXaGVuIFlZTExPQ19ERUZBVUxUIGlzIHJ1biwgQ1VSUkVOVCBpcyBzZXQgdGhlIGxvY2F0aW9uIG9mIHRoZQorKyAgIGZpcnN0IHRva2VuLiAgQnkgZGVmYXVsdCwgdG8gaW1wbGVtZW50IHN1cHBvcnQgZm9yIHJhbmdlcywgZXh0ZW5kCisrICAgaXRzIHJhbmdlIHRvIHRoZSBsYXN0IHN5bWJvbC4gICovCisrCisrI2lmbmRlZiBZWUxMT0NfREVGQVVMVAorKyMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAgICAgCVwKKysgICBDdXJyZW50Lmxhc3RfbGluZSAgID0gUmhzW05dLmxhc3RfbGluZTsJXAorKyAgIEN1cnJlbnQubGFzdF9jb2x1bW4gPSBSaHNbTl0ubGFzdF9jb2x1bW47CisrI2VuZGlmCisrCisrCisrLyogWVlMRVggLS0gY2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCisrCisrI2lmIFlZUFVSRQorKyMgaWYgWVlMU1BfTkVFREVECisrIyAgaWZkZWYgWVlMRVhfUEFSQU0KKysjICAgZGVmaW5lIFlZTEVYCQl5eWxleCAoJnl5bHZhbCwgJnl5bGxvYywgWVlMRVhfUEFSQU0pCisrIyAgZWxzZQorKyMgICBkZWZpbmUgWVlMRVgJCXl5bGV4ICgmeXlsdmFsLCAmeXlsbG9jKQorKyMgIGVuZGlmCisrIyBlbHNlIC8qICFZWUxTUF9ORUVERUQgKi8KKysjICBpZmRlZiBZWUxFWF9QQVJBTQorKyMgICBkZWZpbmUgWVlMRVgJCXl5bGV4ICgmeXlsdmFsLCBZWUxFWF9QQVJBTSkKKysjICBlbHNlCisrIyAgIGRlZmluZSBZWUxFWAkJeXlsZXggKCZ5eWx2YWwpCisrIyAgZW5kaWYKKysjIGVuZGlmIC8qICFZWUxTUF9ORUVERUQgKi8KKysjZWxzZSAvKiAhWVlQVVJFICovCisrIyBkZWZpbmUgWVlMRVgJCQl5eWxleCAoKQorKyNlbmRpZiAvKiAhWVlQVVJFICovCisrCisrCisrLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAqLworKyNpZiBZWURFQlVHCisrCisrIyBpZm5kZWYgWVlGUFJJTlRGCisrIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworKyMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgorKyMgZW5kaWYKKysKKysjIGRlZmluZSBZWURQUklOVEYoQXJncykJCQlcCisrZG8gewkJCQkJCVwKKysgIGlmICh5eWRlYnVnKQkJCQkJXAorKyAgICBZWUZQUklOVEYgQXJnczsJCQkJXAorK30gd2hpbGUgKDApCisrLyogTm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0CisrICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCisraW50IHl5ZGVidWc7CisrI2Vsc2UgLyogIVlZREVCVUcgKi8KKysjIGRlZmluZSBZWURQUklOVEYoQXJncykKKysjZW5kaWYgLyogIVlZREVCVUcgKi8KKysKKysvKiBZWUlOSVRERVBUSCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICovCisrI2lmbmRlZglZWUlOSVRERVBUSAorKyMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAorKyNlbmRpZgorKworKy8qIFlZTUFYREVQVEggLS0gbWF4aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2ZSBvbmx5CisrICAgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2QgaXMgdXNlZCkuCisrCisrICAgRG8gbm90IG1ha2UgdGhpcyB2YWx1ZSB0b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYKKysgICBTSVpFX01BWCA8IFlZU1RBQ0tfQllURVMgKFlZTUFYREVQVEgpCisrICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gICovCisrCisrI2lmIFlZTUFYREVQVEggPT0gMAorKyMgdW5kZWYgWVlNQVhERVBUSAorKyNlbmRpZgorKworKyNpZm5kZWYgWVlNQVhERVBUSAorKyMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKKysjZW5kaWYKKysMCisrI2lmZGVmIFlZRVJST1JfVkVSQk9TRQorKworKyMgaWZuZGVmIHl5c3RybGVuCisrIyAgaWYgZGVmaW5lZCAoX19HTElCQ19fKSAmJiBkZWZpbmVkIChfU1RSSU5HX0gpCisrIyAgIGRlZmluZSB5eXN0cmxlbiBzdHJsZW4KKysjICBlbHNlCisrLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLworK3N0YXRpYyBZWVNJWkVfVAorKyMgICBpZiBkZWZpbmVkIChfX1NURENfXykgfHwgZGVmaW5lZCAoX19jcGx1c3BsdXMpCisreXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQorKyMgICBlbHNlCisreXlzdHJsZW4gKHl5c3RyKQorKyAgICAgY29uc3QgY2hhciAqeXlzdHI7CisrIyAgIGVuZGlmCisreworKyAgcmVnaXN0ZXIgY29uc3QgY2hhciAqeXlzID0geXlzdHI7CisrCisrICB3aGlsZSAoKnl5cysrICE9ICdcMCcpCisrICAgIGNvbnRpbnVlOworKworKyAgcmV0dXJuIHl5cyAtIHl5c3RyIC0gMTsKKyt9CisrIyAgZW5kaWYKKysjIGVuZGlmCisrCisrIyBpZm5kZWYgeXlzdHBjcHkKKysjICBpZiBkZWZpbmVkIChfX0dMSUJDX18pICYmIGRlZmluZWQgKF9TVFJJTkdfSCkgJiYgZGVmaW5lZCAoX0dOVV9TT1VSQ0UpCisrIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkKKysjICBlbHNlCisrLyogQ29weSBZWVNSQyB0byBZWURFU1QsIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRpbmcgJ1wwJyBpbgorKyAgIFlZREVTVC4gICovCisrc3RhdGljIGNoYXIgKgorKyMgICBpZiBkZWZpbmVkIChfX1NURENfXykgfHwgZGVmaW5lZCAoX19jcGx1c3BsdXMpCisreXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlzcmMpCisrIyAgIGVsc2UKKyt5eXN0cGNweSAoeXlkZXN0LCB5eXNyYykKKysgICAgIGNoYXIgKnl5ZGVzdDsKKysgICAgIGNvbnN0IGNoYXIgKnl5c3JjOworKyMgICBlbmRpZgorK3sKKysgIHJlZ2lzdGVyIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKKysgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3JjOworKworKyAgd2hpbGUgKCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCisrICAgIGNvbnRpbnVlOworKworKyAgcmV0dXJuIHl5ZCAtIDE7CisrfQorKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKwwKKysjbGluZSAzMTUgIi91c3IvbG9jYWwvc2hhcmUvYmlzb24vYmlzb24uc2ltcGxlIgorKworKworKy8qIFRoZSB1c2VyIGNhbiBkZWZpbmUgWVlQQVJTRV9QQVJBTSBhcyB0aGUgbmFtZSBvZiBhbiBhcmd1bWVudCB0byBiZSBwYXNzZWQKKysgICBpbnRvIHl5cGFyc2UuICBUaGUgYXJndW1lbnQgc2hvdWxkIGhhdmUgdHlwZSB2b2lkICouCisrICAgSXQgc2hvdWxkIGFjdHVhbGx5IHBvaW50IHRvIGFuIG9iamVjdC4KKysgICBHcmFtbWFyIGFjdGlvbnMgY2FuIGFjY2VzcyB0aGUgdmFyaWFibGUgYnkgY2FzdGluZyBpdAorKyAgIHRvIHRoZSBwcm9wZXIgcG9pbnRlciB0eXBlLiAgKi8KKysKKysjaWZkZWYgWVlQQVJTRV9QQVJBTQorKyMgaWYgZGVmaW5lZCAoX19TVERDX18pIHx8IGRlZmluZWQgKF9fY3BsdXNwbHVzKQorKyMgIGRlZmluZSBZWVBBUlNFX1BBUkFNX0FSRyB2b2lkICpZWVBBUlNFX1BBUkFNCisrIyAgZGVmaW5lIFlZUEFSU0VfUEFSQU1fREVDTAorKyMgZWxzZQorKyMgIGRlZmluZSBZWVBBUlNFX1BBUkFNX0FSRyBZWVBBUlNFX1BBUkFNCisrIyAgZGVmaW5lIFlZUEFSU0VfUEFSQU1fREVDTCB2b2lkICpZWVBBUlNFX1BBUkFNOworKyMgZW5kaWYKKysjZWxzZSAvKiAhWVlQQVJTRV9QQVJBTSAqLworKyMgZGVmaW5lIFlZUEFSU0VfUEFSQU1fQVJHCisrIyBkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMCisrI2VuZGlmIC8qICFZWVBBUlNFX1BBUkFNICovCisrCisrLyogUHJldmVudCB3YXJuaW5nIGlmIC1Xc3RyaWN0LXByb3RvdHlwZXMuICAqLworKyNpZmRlZiBfX0dOVUNfXworKyMgaWZkZWYgWVlQQVJTRV9QQVJBTQorK2ludCB5eXBhcnNlICh2b2lkICopOworKyMgZWxzZQorK2ludCB5eXBhcnNlICh2b2lkKTsKKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyogWVlfREVDTF9WQVJJQUJMRVMgLS0gZGVwZW5kaW5nIHdoZXRoZXIgd2UgdXNlIGEgcHVyZSBwYXJzZXIsCisrICAgdmFyaWFibGVzIGFyZSBnbG9iYWwsIG9yIGxvY2FsIHRvIFlZUEFSU0UuICAqLworKworKyNkZWZpbmUgWVlfREVDTF9OT05fTFNQX1ZBUklBQkxFUwkJCVwKKysvKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCQkJCVwKKytpbnQgeXljaGFyOwkJCQkJCVwKKysJCQkJCQkJXAorKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJvbC4gKi8JXAorK1lZU1RZUEUgeXlsdmFsOwkJCQkJCVwKKysJCQkJCQkJXAorKy8qIE51bWJlciBvZiBwYXJzZSBlcnJvcnMgc28gZmFyLiAgKi8JCQlcCisraW50IHl5bmVycnM7CisrCisrI2lmIFlZTFNQX05FRURFRAorKyMgZGVmaW5lIFlZX0RFQ0xfVkFSSUFCTEVTCQkJXAorK1lZX0RFQ0xfTk9OX0xTUF9WQVJJQUJMRVMJCQlcCisrCQkJCQkJXAorKy8qIExvY2F0aW9uIGRhdGEgZm9yIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8JXAorK1lZTFRZUEUgeXlsbG9jOworKyNlbHNlCisrIyBkZWZpbmUgWVlfREVDTF9WQVJJQUJMRVMJCQlcCisrWVlfREVDTF9OT05fTFNQX1ZBUklBQkxFUworKyNlbmRpZgorKworKworKy8qIElmIG5vbnJlZW50cmFudCwgZ2VuZXJhdGUgdGhlIHZhcmlhYmxlcyBoZXJlLiAqLworKworKyNpZiAhWVlQVVJFCisrWVlfREVDTF9WQVJJQUJMRVMKKysjZW5kaWYgIC8qICFZWVBVUkUgKi8KKysKKytpbnQKKyt5eXBhcnNlIChZWVBBUlNFX1BBUkFNX0FSRykKKysgICAgIFlZUEFSU0VfUEFSQU1fREVDTAorK3sKKysgIC8qIElmIHJlZW50cmFudCwgZ2VuZXJhdGUgdGhlIHZhcmlhYmxlcyBoZXJlLiAqLworKyNpZiBZWVBVUkUKKysgIFlZX0RFQ0xfVkFSSUFCTEVTCisrI2VuZGlmICAvKiAhWVlQVVJFICovCisrCisrICByZWdpc3RlciBpbnQgeXlzdGF0ZTsKKysgIHJlZ2lzdGVyIGludCB5eW47CisrICBpbnQgeXlyZXN1bHQ7CisrICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KKysgIGludCB5eWVycnN0YXR1czsKKysgIC8qIExvb2thaGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKysgIGludCB5eWNoYXIxID0gMDsKKysKKysgIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CisrICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAorKyAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcywKKysgICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCisrCisrICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKKysgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLworKworKyAgLyogVGhlIHN0YXRlIHN0YWNrLiAqLworKyAgc2hvcnQJeXlzc2FbWVlJTklUREVQVEhdOworKyAgc2hvcnQgKnl5c3MgPSB5eXNzYTsKKysgIHJlZ2lzdGVyIHNob3J0ICp5eXNzcDsKKysKKysgIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCisrICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKysgIFlZU1RZUEUgKnl5dnMgPSB5eXZzYTsKKysgIHJlZ2lzdGVyIFlZU1RZUEUgKnl5dnNwOworKworKyNpZiBZWUxTUF9ORUVERUQKKysgIC8qIFRoZSBsb2NhdGlvbiBzdGFjay4gICovCisrICBZWUxUWVBFIHl5bHNhW1lZSU5JVERFUFRIXTsKKysgIFlZTFRZUEUgKnl5bHMgPSB5eWxzYTsKKysgIFlZTFRZUEUgKnl5bHNwOworKyNlbmRpZgorKworKyNpZiBZWUxTUF9ORUVERUQKKysjIGRlZmluZSBZWVBPUFNUQUNLICAgKHl5dnNwLS0sIHl5c3NwLS0sIHl5bHNwLS0pCisrI2Vsc2UKKysjIGRlZmluZSBZWVBPUFNUQUNLICAgKHl5dnNwLS0sIHl5c3NwLS0pCisrI2VuZGlmCisrCisrICBZWVNJWkVfVCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworKworKworKyAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKKysgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCisrICBZWVNUWVBFIHl5dmFsOworKyNpZiBZWUxTUF9ORUVERUQKKysgIFlZTFRZUEUgeXlsb2M7CisrI2VuZGlmCisrCisrICAvKiBXaGVuIHJlZHVjaW5nLCB0aGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZAorKyAgICAgcnVsZS4gKi8KKysgIGludCB5eWxlbjsKKysKKysgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CisrCisrICB5eXN0YXRlID0gMDsKKysgIHl5ZXJyc3RhdHVzID0gMDsKKysgIHl5bmVycnMgPSAwOworKyAgeXljaGFyID0gWVlFTVBUWTsJCS8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCisrCisrICAvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgorKyAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCisrICAgICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCisrICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXplZC4gICovCisrCisrICB5eXNzcCA9IHl5c3M7CisrICB5eXZzcCA9IHl5dnM7CisrI2lmIFlZTFNQX05FRURFRAorKyAgeXlsc3AgPSB5eWxzOworKyNlbmRpZgorKyAgZ290byB5eXNldHN0YXRlOworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKyB5eW5ld3N0YXRlOgorKyAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKKysgICAgIGhhdmUganVzdCBiZWVuIHB1c2hlZC4gc28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4KKysgICAgICovCisrICB5eXNzcCsrOworKworKyB5eXNldHN0YXRlOgorKyAgKnl5c3NwID0geXlzdGF0ZTsKKysKKysgIGlmICh5eXNzcCA+PSB5eXNzICsgeXlzdGFja3NpemUgLSAxKQorKyAgICB7CisrICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4gICovCisrICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKKysKKysjaWZkZWYgeXlvdmVyZmxvdworKyAgICAgIHsKKysJLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrLiBVc2UgY29waWVzIG9mCisrCSAgIHRoZXNlIHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KKysJICAgbWVtb3J5LiAgKi8KKysJWVlTVFlQRSAqeXl2czEgPSB5eXZzOworKwlzaG9ydCAqeXlzczEgPSB5eXNzOworKworKwkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKKysJICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICAqLworKyMgaWYgWVlMU1BfTkVFREVECisrCVlZTFRZUEUgKnl5bHMxID0geXlsczsKKysJLyogVGhpcyB1c2VkIHRvIGJlIGEgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLAorKwkgICBidXQgdGhhdCBtaWdodCBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KKysJeXlvdmVyZmxvdyAoInBhcnNlciBzdGFjayBvdmVyZmxvdyIsCisrCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCisrCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCisrCQkgICAgJnl5bHMxLCB5eXNpemUgKiBzaXplb2YgKCp5eWxzcCksCisrCQkgICAgJnl5c3RhY2tzaXplKTsKKysJeXlscyA9IHl5bHMxOworKyMgZWxzZQorKwl5eW92ZXJmbG93ICgicGFyc2VyIHN0YWNrIG92ZXJmbG93IiwKKysJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKysJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKysJCSAgICAmeXlzdGFja3NpemUpOworKyMgZW5kaWYKKysJeXlzcyA9IHl5c3MxOworKwl5eXZzID0geXl2czE7CisrICAgICAgfQorKyNlbHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKysjIGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCisrICAgICAgZ290byB5eW92ZXJmbG93bGFiOworKyMgZWxzZQorKyAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLworKyAgICAgIGlmICh5eXN0YWNrc2l6ZSA+PSBZWU1BWERFUFRIKQorKwlnb3RvIHl5b3ZlcmZsb3dsYWI7CisrICAgICAgeXlzdGFja3NpemUgKj0gMjsKKysgICAgICBpZiAoeXlzdGFja3NpemUgPiBZWU1BWERFUFRIKQorKwl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisrCisrICAgICAgeworKwlzaG9ydCAqeXlzczEgPSB5eXNzOworKwl1bmlvbiB5eWFsbG9jICp5eXB0ciA9CisrCSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKKysJaWYgKCEgeXlwdHIpCisrCSAgZ290byB5eW92ZXJmbG93bGFiOworKwlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKKysJWVlTVEFDS19SRUxPQ0FURSAoeXl2cyk7CisrIyBpZiBZWUxTUF9ORUVERUQKKysJWVlTVEFDS19SRUxPQ0FURSAoeXlscyk7CisrIyBlbmRpZgorKyMgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQorKwlpZiAoeXlzczEgIT0geXlzc2EpCisrCSAgWVlTVEFDS19GUkVFICh5eXNzMSk7CisrICAgICAgfQorKyMgZW5kaWYKKysjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLworKworKyAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7CisrICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKKysjaWYgWVlMU1BfTkVFREVECisrICAgICAgeXlsc3AgPSB5eWxzICsgeXlzaXplIC0gMTsKKysjZW5kaWYKKysKKysgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCisrCQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKKysKKysgICAgICBpZiAoeXlzc3AgPj0geXlzcyArIHl5c3RhY2tzaXplIC0gMSkKKysJWVlBQk9SVDsKKysgICAgfQorKworKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKKysKKysgIGdvdG8geXliYWNrdXA7CisrCisrCisrLyotLS0tLS0tLS0tLS4KKyt8IHl5YmFja3VwLiAgfAorK2AtLS0tLS0tLS0tLSovCisreXliYWNrdXA6CisrCisrLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gICovCisrLyogUmVhZCBhIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisrLyogeXlyZXN1bWU6ICovCisrCisrICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KKysKKysgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKysgIGlmICh5eW4gPT0gWVlGTEFHKQorKyAgICBnb3RvIHl5ZGVmYXVsdDsKKysKKysgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisrCisrICAvKiB5eWNoYXIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0YKKysgICAgIG9yIGEgdmFsaWQgdG9rZW4gaW4gZXh0ZXJuYWwgZm9ybS4gICovCisrCisrICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisrICAgIHsKKysgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKKysgICAgICB5eWNoYXIgPSBZWUxFWDsKKysgICAgfQorKworKyAgLyogQ29udmVydCB0b2tlbiB0byBpbnRlcm5hbCBmb3JtIChpbiB5eWNoYXIxKSBmb3IgaW5kZXhpbmcgdGFibGVzIHdpdGggKi8KKysKKysgIGlmICh5eWNoYXIgPD0gMCkJCS8qIFRoaXMgbWVhbnMgZW5kIG9mIGlucHV0LiAqLworKyAgICB7CisrICAgICAgeXljaGFyMSA9IDA7CisrICAgICAgeXljaGFyID0gWVlFT0Y7CQkvKiBEb24ndCBjYWxsIFlZTEVYIGFueSBtb3JlICovCisrCisrICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgeXljaGFyMSA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworKworKyNpZiBZWURFQlVHCisrICAgICAvKiBXZSBoYXZlIHRvIGtlZXAgdGhpcyBgI2lmIFlZREVCVUcnLCBzaW5jZSB3ZSB1c2UgdmFyaWFibGVzCisrCXdoaWNoIGFyZSBkZWZpbmVkIG9ubHkgaWYgYFlZREVCVUcnIGlzIHNldC4gICovCisrICAgICAgaWYgKHl5ZGVidWcpCisrCXsKKysJICBZWUZQUklOVEYgKHN0ZGVyciwgIk5leHQgdG9rZW4gaXMgJWQgKCVzIiwKKysJCSAgICAgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKTsKKysJICAvKiBHaXZlIHRoZSBpbmRpdmlkdWFsIHBhcnNlciBhIHdheSB0byBwcmludCB0aGUgcHJlY2lzZQorKwkgICAgIG1lYW5pbmcgb2YgYSB0b2tlbiwgZm9yIGZ1cnRoZXIgZGVidWdnaW5nIGluZm8uICAqLworKyMgaWZkZWYgWVlQUklOVAorKwkgIFlZUFJJTlQgKHN0ZGVyciwgeXljaGFyLCB5eWx2YWwpOworKyMgZW5kaWYKKysJICBZWUZQUklOVEYgKHN0ZGVyciwgIilcbiIpOworKwl9CisrI2VuZGlmCisrICAgIH0KKysKKysgIHl5biArPSB5eWNoYXIxOworKyAgaWYgKHl5biA8IDAgfHwgeXluID4gWVlMQVNUIHx8IHl5Y2hlY2tbeXluXSAhPSB5eWNoYXIxKQorKyAgICBnb3RvIHl5ZGVmYXVsdDsKKysKKysgIHl5biA9IHl5dGFibGVbeXluXTsKKysKKysgIC8qIHl5biBpcyB3aGF0IHRvIGRvIGZvciB0aGlzIHRva2VuIHR5cGUgaW4gdGhpcyBzdGF0ZS4KKysgICAgIE5lZ2F0aXZlID0+IHJlZHVjZSwgLXl5biBpcyBydWxlIG51bWJlci4KKysgICAgIFBvc2l0aXZlID0+IHNoaWZ0LCB5eW4gaXMgbmV3IHN0YXRlLgorKyAgICAgICBOZXcgc3RhdGUgaXMgZmluYWwgc3RhdGUgPT4gZG9uJ3QgYm90aGVyIHRvIHNoaWZ0LAorKyAgICAgICBqdXN0IHJldHVybiBzdWNjZXNzLgorKyAgICAgMCwgb3IgbW9zdCBuZWdhdGl2ZSBudW1iZXIgPT4gZXJyb3IuICAqLworKworKyAgaWYgKHl5biA8IDApCisrICAgIHsKKysgICAgICBpZiAoeXluID09IFlZRkxBRykKKysJZ290byB5eWVycmxhYjsKKysgICAgICB5eW4gPSAteXluOworKyAgICAgIGdvdG8geXlyZWR1Y2U7CisrICAgIH0KKysgIGVsc2UgaWYgKHl5biA9PSAwKQorKyAgICBnb3RvIHl5ZXJybGFiOworKworKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorKyAgICBZWUFDQ0VQVDsKKysKKysgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLworKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU2hpZnRpbmcgdG9rZW4gJWQgKCVzKSwgIiwKKysJICAgICAgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKSk7CisrCisrICAvKiBEaXNjYXJkIHRoZSB0b2tlbiBiZWluZyBzaGlmdGVkIHVubGVzcyBpdCBpcyBlb2YuICAqLworKyAgaWYgKHl5Y2hhciAhPSBZWUVPRikKKysgICAgeXljaGFyID0gWVlFTVBUWTsKKysKKysgICorK3l5dnNwID0geXlsdmFsOworKyNpZiBZWUxTUF9ORUVERUQKKysgICorK3l5bHNwID0geXlsbG9jOworKyNlbmRpZgorKworKyAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgorKyAgICAgc3RhdHVzLiAgKi8KKysgIGlmICh5eWVycnN0YXR1cykKKysgICAgeXllcnJzdGF0dXMtLTsKKysKKysgIHl5c3RhdGUgPSB5eW47CisrICBnb3RvIHl5bmV3c3RhdGU7CisrCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyt8IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXlkZWZhdWx0OgorKyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07CisrICBpZiAoeXluID09IDApCisrICAgIGdvdG8geXllcnJsYWI7CisrICBnb3RvIHl5cmVkdWNlOworKworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eXJlZHVjZSAtLSBEbyBhIHJlZHVjdGlvbi4gIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5cmVkdWNlOgorKyAgLyogeXluIGlzIHRoZSBudW1iZXIgb2YgYSBydWxlIHRvIHJlZHVjZSB3aXRoLiAgKi8KKysgIHl5bGVuID0geXlyMlt5eW5dOworKworKyAgLyogSWYgWVlMRU4gaXMgbm9uemVybywgaW1wbGVtZW50IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb246CisrICAgICBgJCQgPSAkMScuCisrCisrICAgICBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgbGluZSBzZXRzIFlZVkFMIHRvIHRoZSBzZW1hbnRpYyB2YWx1ZSBvZgorKyAgICAgdGhlIGxvb2thaGVhZCB0b2tlbi4gIFRoaXMgYmVoYXZpb3IgaXMgdW5kb2N1bWVudGVkIGFuZCBCaXNvbgorKyAgICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKKysgICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQorKyAgICAgR0NDIHdhcm5pbmcgdGhhdCBZWVZBTCBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkLiAgKi8KKysgIHl5dmFsID0geXl2c3BbMS15eWxlbl07CisrCisrI2lmIFlZTFNQX05FRURFRAorKyAgLyogU2ltaWxhcmx5IGZvciB0aGUgZGVmYXVsdCBsb2NhdGlvbi4gIExldCB0aGUgdXNlciBydW4gYWRkaXRpb25hbAorKyAgICAgY29tbWFuZHMgaWYgZm9yIGluc3RhbmNlIGxvY2F0aW9ucyBhcmUgcmFuZ2VzLiAgKi8KKysgIHl5bG9jID0geXlsc3BbMS15eWxlbl07CisrICBZWUxMT0NfREVGQVVMVCAoeXlsb2MsICh5eWxzcCAtIHl5bGVuKSwgeXlsZW4pOworKyNlbmRpZgorKworKyNpZiBZWURFQlVHCisrICAvKiBXZSBoYXZlIHRvIGtlZXAgdGhpcyBgI2lmIFlZREVCVUcnLCBzaW5jZSB3ZSB1c2UgdmFyaWFibGVzIHdoaWNoCisrICAgICBhcmUgZGVmaW5lZCBvbmx5IGlmIGBZWURFQlVHJyBpcyBzZXQuICAqLworKyAgaWYgKHl5ZGVidWcpCisrICAgIHsKKysgICAgICBpbnQgeXlpOworKworKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgdmlhIHJ1bGUgJWQgKGxpbmUgJWQpLCAiLAorKwkJIHl5biwgeXlybGluZVt5eW5dKTsKKysKKysgICAgICAvKiBQcmludCB0aGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLCBhbmQgdGhlaXIgcmVzdWx0LiAgKi8KKysgICAgICBmb3IgKHl5aSA9IHl5cHJoc1t5eW5dOyB5eXJoc1t5eWldID4gMDsgeXlpKyspCisrCVlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgeXl0bmFtZVt5eXJoc1t5eWldXSk7CisrICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgLT4gJXNcbiIsIHl5dG5hbWVbeXlyMVt5eW5dXSk7CisrICAgIH0KKysjZW5kaWYKKysKKysgIHN3aXRjaCAoeXluKSB7CisrCisrY2FzZSAxOgorKyNsaW5lIDE1MSAicGx1cmFsLnkiCisreworKwkgICAgaWYgKHl5dnNwWzBdLmV4cCA9PSBOVUxMKQorKwkgICAgICBZWUFCT1JUOworKwkgICAgKChzdHJ1Y3QgcGFyc2VfYXJncyAqKSBhcmcpLT5yZXMgPSB5eXZzcFswXS5leHA7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDI6CisrI2xpbmUgMTU5ICJwbHVyYWwueSIKKyt7CisrCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzMgKHFtb3AsIHl5dnNwWy00XS5leHAsIHl5dnNwWy0yXS5leHAsIHl5dnNwWzBdLmV4cCk7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDM6CisrI2xpbmUgMTYzICJwbHVyYWwueSIKKyt7CisrCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzIgKGxvciwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgNDoKKysjbGluZSAxNjcgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMiAobGFuZCwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgNToKKysjbGluZSAxNzEgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMiAoeXl2c3BbLTFdLm9wLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSA2OgorKyNsaW5lIDE3NSAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8yICh5eXZzcFstMV0ub3AsIHl5dnNwWy0yXS5leHAsIHl5dnNwWzBdLmV4cCk7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDc6CisrI2xpbmUgMTc5ICJwbHVyYWwueSIKKyt7CisrCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzIgKHl5dnNwWy0xXS5vcCwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgODoKKysjbGluZSAxODMgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMiAoeXl2c3BbLTFdLm9wLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSA5OgorKyNsaW5lIDE4NyAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8xIChsbm90LCB5eXZzcFswXS5leHApOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSAxMDoKKysjbGluZSAxOTEgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMCAodmFyKTsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgMTE6CisrI2xpbmUgMTk1ICJwbHVyYWwueSIKKyt7CisrCSAgICBpZiAoKHl5dmFsLmV4cCA9IG5ld19leHBfMCAobnVtKSkgIT0gTlVMTCkKKysJICAgICAgeXl2YWwuZXhwLT52YWwubnVtID0geXl2c3BbMF0ubnVtOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSAxMjoKKysjbGluZSAyMDAgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IHl5dnNwWy0xXS5leHA7CisrCSAgfQorKyAgICBicmVhazsKKyt9CisrCisrI2xpbmUgNzA1ICIvdXNyL2xvY2FsL3NoYXJlL2Jpc29uL2Jpc29uLnNpbXBsZSIKKysKKysMCisrICB5eXZzcCAtPSB5eWxlbjsKKysgIHl5c3NwIC09IHl5bGVuOworKyNpZiBZWUxTUF9ORUVERUQKKysgIHl5bHNwIC09IHl5bGVuOworKyNlbmRpZgorKworKyNpZiBZWURFQlVHCisrICBpZiAoeXlkZWJ1ZykKKysgICAgeworKyAgICAgIHNob3J0ICp5eXNzcDEgPSB5eXNzIC0gMTsKKysgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgInN0YXRlIHN0YWNrIG5vdyIpOworKyAgICAgIHdoaWxlICh5eXNzcDEgIT0geXlzc3ApCisrCVlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgKisreXlzc3AxKTsKKysgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CisrICAgIH0KKysjZW5kaWYKKysKKysgICorK3l5dnNwID0geXl2YWw7CisrI2lmIFlZTFNQX05FRURFRAorKyAgKisreXlsc3AgPSB5eWxvYzsKKysjZW5kaWYKKysKKysgIC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCisrICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKKysgICAgIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KKysKKysgIHl5biA9IHl5cjFbeXluXTsKKysKKysgIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRCQVNFXSArICp5eXNzcDsKKysgIGlmICh5eXN0YXRlID49IDAgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCisrICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOworKyAgZWxzZQorKyAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRCQVNFXTsKKysKKysgIGdvdG8geXluZXdzdGF0ZTsKKysKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyt8IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyt5eWVycmxhYjoKKysgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLworKyAgaWYgKCF5eWVycnN0YXR1cykKKysgICAgeworKyAgICAgICsreXluZXJyczsKKysKKysjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisrICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOworKworKyAgICAgIGlmICh5eW4gPiBZWUZMQUcgJiYgeXluIDwgWVlMQVNUKQorKwl7CisrCSAgWVlTSVpFX1QgeXlzaXplID0gMDsKKysJICBjaGFyICp5eW1zZzsKKysJICBpbnQgeXl4LCB5eWNvdW50OworKworKwkgIHl5Y291bnQgPSAwOworKwkgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KKysJICAgICBZWUNIRUNLLiAgKi8KKysJICBmb3IgKHl5eCA9IHl5biA8IDAgPyAteXluIDogMDsKKysJICAgICAgIHl5eCA8IChpbnQpIChzaXplb2YgKHl5dG5hbWUpIC8gc2l6ZW9mIChjaGFyICopKTsgeXl4KyspCisrCSAgICBpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCkKKysJICAgICAgeXlzaXplICs9IHl5c3RybGVuICh5eXRuYW1lW3l5eF0pICsgMTUsIHl5Y291bnQrKzsKKysJICB5eXNpemUgKz0geXlzdHJsZW4gKCJwYXJzZSBlcnJvciwgdW5leHBlY3RlZCAiKSArIDE7CisrCSAgeXlzaXplICs9IHl5c3RybGVuICh5eXRuYW1lW1lZVFJBTlNMQVRFICh5eWNoYXIpXSk7CisrCSAgeXltc2cgPSAoY2hhciAqKSBZWVNUQUNLX0FMTE9DICh5eXNpemUpOworKwkgIGlmICh5eW1zZyAhPSAwKQorKwkgICAgeworKwkgICAgICBjaGFyICp5eXAgPSB5eXN0cGNweSAoeXltc2csICJwYXJzZSBlcnJvciwgdW5leHBlY3RlZCAiKTsKKysJICAgICAgeXlwID0geXlzdHBjcHkgKHl5cCwgeXl0bmFtZVtZWVRSQU5TTEFURSAoeXljaGFyKV0pOworKworKwkgICAgICBpZiAoeXljb3VudCA8IDUpCisrCQl7CisrCQkgIHl5Y291bnQgPSAwOworKwkJICBmb3IgKHl5eCA9IHl5biA8IDAgPyAteXluIDogMDsKKysJCSAgICAgICB5eXggPCAoaW50KSAoc2l6ZW9mICh5eXRuYW1lKSAvIHNpemVvZiAoY2hhciAqKSk7CisrCQkgICAgICAgeXl4KyspCisrCQkgICAgaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXgpCisrCQkgICAgICB7CisrCQkJY29uc3QgY2hhciAqeXlxID0gISB5eWNvdW50ID8gIiwgZXhwZWN0aW5nICIgOiAiIG9yICI7CisrCQkJeXlwID0geXlzdHBjcHkgKHl5cCwgeXlxKTsKKysJCQl5eXAgPSB5eXN0cGNweSAoeXlwLCB5eXRuYW1lW3l5eF0pOworKwkJCXl5Y291bnQrKzsKKysJCSAgICAgIH0KKysJCX0KKysJICAgICAgeXllcnJvciAoeXltc2cpOworKwkgICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB5eWVycm9yICgicGFyc2UgZXJyb3I7IGFsc28gdmlydHVhbCBtZW1vcnkgZXhoYXVzdGVkIik7CisrCX0KKysgICAgICBlbHNlCisrI2VuZGlmIC8qIGRlZmluZWQgKFlZRVJST1JfVkVSQk9TRSkgKi8KKysJeXllcnJvciAoInBhcnNlIGVycm9yIik7CisrICAgIH0KKysgIGdvdG8geXllcnJsYWIxOworKworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eWVycmxhYjEgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgYW4gYWN0aW9uIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5ZXJybGFiMToKKysgIGlmICh5eWVycnN0YXR1cyA9PSAzKQorKyAgICB7CisrICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBhbgorKwkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLworKworKyAgICAgIC8qIHJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dCAqLworKyAgICAgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisrCVlZQUJPUlQ7CisrICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRGlzY2FyZGluZyB0b2tlbiAlZCAoJXMpLlxuIiwKKysJCSAgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKSk7CisrICAgICAgeXljaGFyID0gWVlFTVBUWTsKKysgICAgfQorKworKyAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisrICAgICB0b2tlbi4gICovCisrCisrICB5eWVycnN0YXR1cyA9IDM7CQkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMgKi8KKysKKysgIGdvdG8geXllcnJoYW5kbGU7CisrCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXllcnJkZWZhdWx0IC0tIGN1cnJlbnQgc3RhdGUgZG9lcyBub3QgZG8gYW55dGhpbmcgc3BlY2lhbCBmb3IgdGhlIHwKKyt8IGVycm9yIHRva2VuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5ZXJyZGVmYXVsdDoKKysjaWYgMAorKyAgLyogVGhpcyBpcyB3cm9uZzsgb25seSBzdGF0ZXMgdGhhdCBleHBsaWNpdGx5IHdhbnQgZXJyb3IgdG9rZW5zCisrICAgICBzaG91bGQgc2hpZnQgdGhlbS4gICovCisrCisrICAvKiBJZiBpdHMgZGVmYXVsdCBpcyB0byBhY2NlcHQgYW55IHRva2VuLCBvay4gIE90aGVyd2lzZSBwb3AgaXQuICAqLworKyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07CisrICBpZiAoeXluKQorKyAgICBnb3RvIHl5ZGVmYXVsdDsKKysjZW5kaWYKKysKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyt8IHl5ZXJycG9wIC0tIHBvcCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIHwKKyt8IGVycm9yIHRva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyt5eWVycnBvcDoKKysgIGlmICh5eXNzcCA9PSB5eXNzKQorKyAgICBZWUFCT1JUOworKyAgeXl2c3AtLTsKKysgIHl5c3RhdGUgPSAqLS15eXNzcDsKKysjaWYgWVlMU1BfTkVFREVECisrICB5eWxzcC0tOworKyNlbmRpZgorKworKyNpZiBZWURFQlVHCisrICBpZiAoeXlkZWJ1ZykKKysgICAgeworKyAgICAgIHNob3J0ICp5eXNzcDEgPSB5eXNzIC0gMTsKKysgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIkVycm9yOiBzdGF0ZSBzdGFjayBub3ciKTsKKysgICAgICB3aGlsZSAoeXlzc3AxICE9IHl5c3NwKQorKwlZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICorK3l5c3NwMSk7CisrICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworKyAgICB9CisrI2VuZGlmCisrCisrLyotLS0tLS0tLS0tLS0tLS4KKyt8IHl5ZXJyaGFuZGxlLiAgfAorK2AtLS0tLS0tLS0tLS0tLSovCisreXllcnJoYW5kbGU6CisrICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisrICBpZiAoeXluID09IFlZRkxBRykKKysgICAgZ290byB5eWVycmRlZmF1bHQ7CisrCisrICB5eW4gKz0gWVlURVJST1I7CisrICBpZiAoeXluIDwgMCB8fCB5eW4gPiBZWUxBU1QgfHwgeXljaGVja1t5eW5dICE9IFlZVEVSUk9SKQorKyAgICBnb3RvIHl5ZXJyZGVmYXVsdDsKKysKKysgIHl5biA9IHl5dGFibGVbeXluXTsKKysgIGlmICh5eW4gPCAwKQorKyAgICB7CisrICAgICAgaWYgKHl5biA9PSBZWUZMQUcpCisrCWdvdG8geXllcnJwb3A7CisrICAgICAgeXluID0gLXl5bjsKKysgICAgICBnb3RvIHl5cmVkdWNlOworKyAgICB9CisrICBlbHNlIGlmICh5eW4gPT0gMCkKKysgICAgZ290byB5eWVycnBvcDsKKysKKysgIGlmICh5eW4gPT0gWVlGSU5BTCkKKysgICAgWVlBQ0NFUFQ7CisrCisrICBZWURQUklOVEYgKChzdGRlcnIsICJTaGlmdGluZyBlcnJvciB0b2tlbiwgIikpOworKworKyAgKisreXl2c3AgPSB5eWx2YWw7CisrI2lmIFlZTFNQX05FRURFRAorKyAgKisreXlsc3AgPSB5eWxsb2M7CisrI2VuZGlmCisrCisrICB5eXN0YXRlID0geXluOworKyAgZ290byB5eW5ld3N0YXRlOworKworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyt8IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8CisrYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5YWNjZXB0bGFiOgorKyAgeXlyZXN1bHQgPSAwOworKyAgZ290byB5eXJldHVybjsKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUuICB8CisrYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyt5eWFib3J0bGFiOgorKyAgeXlyZXN1bHQgPSAxOworKyAgZ290byB5eXJldHVybjsKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyt8IHl5b3ZlcmZsb3dhYiAtLSBwYXJzZXIgb3ZlcmZsb3cgY29tZXMgaGVyZS4gIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyt5eW92ZXJmbG93bGFiOgorKyAgeXllcnJvciAoInBhcnNlciBzdGFjayBvdmVyZmxvdyIpOworKyAgeXlyZXN1bHQgPSAyOworKyAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKysKKyt5eXJldHVybjoKKysjaWZuZGVmIHl5b3ZlcmZsb3cKKysgIGlmICh5eXNzICE9IHl5c3NhKQorKyAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOworKyNlbmRpZgorKyAgcmV0dXJuIHl5cmVzdWx0OworK30KKysjbGluZSAyMDUgInBsdXJhbC55IgorKworKworK3ZvaWQKKytpbnRlcm5hbF9mdW5jdGlvbgorK0ZSRUVfRVhQUkVTU0lPTiAoc3RydWN0IGV4cHJlc3Npb24gKmV4cCkKKyt7CisrICBpZiAoZXhwID09IE5VTEwpCisrICAgIHJldHVybjsKKysKKysgIC8qIEhhbmRsZSB0aGUgcmVjdXJzaXZlIGNhc2UuICAqLworKyAgc3dpdGNoIChleHAtPm5hcmdzKQorKyAgICB7CisrICAgIGNhc2UgMzoKKysgICAgICBGUkVFX0VYUFJFU1NJT04gKGV4cC0+dmFsLmFyZ3NbMl0pOworKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisrICAgIGNhc2UgMjoKKysgICAgICBGUkVFX0VYUFJFU1NJT04gKGV4cC0+dmFsLmFyZ3NbMV0pOworKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisrICAgIGNhc2UgMToKKysgICAgICBGUkVFX0VYUFJFU1NJT04gKGV4cC0+dmFsLmFyZ3NbMF0pOworKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisrICAgIGRlZmF1bHQ6CisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgIGZyZWUgKGV4cCk7CisrfQorKworKworK3N0YXRpYyBpbnQKKyt5eWxleCAoWVlTVFlQRSAqbHZhbCwgY29uc3QgY2hhciAqKnBleHApCisreworKyAgY29uc3QgY2hhciAqZXhwID0gKnBleHA7CisrICBpbnQgcmVzdWx0OworKworKyAgd2hpbGUgKDEpCisrICAgIHsKKysgICAgICBpZiAoZXhwWzBdID09ICdcMCcpCisrCXsKKysJICAqcGV4cCA9IGV4cDsKKysJICByZXR1cm4gWVlFT0Y7CisrCX0KKysKKysgICAgICBpZiAoZXhwWzBdICE9ICcgJyAmJiBleHBbMF0gIT0gJ1x0JykKKysJYnJlYWs7CisrCisrICAgICAgKytleHA7CisrICAgIH0KKysKKysgIHJlc3VsdCA9ICpleHArKzsKKysgIHN3aXRjaCAocmVzdWx0KQorKyAgICB7CisrICAgIGNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKysgICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorKyAgICAgIHsKKysJdW5zaWduZWQgbG9uZyBpbnQgbiA9IHJlc3VsdCAtICcwJzsKKysJd2hpbGUgKGV4cFswXSA+PSAnMCcgJiYgZXhwWzBdIDw9ICc5JykKKysJICB7CisrCSAgICBuICo9IDEwOworKwkgICAgbiArPSBleHBbMF0gLSAnMCc7CisrCSAgICArK2V4cDsKKysJICB9CisrCWx2YWwtPm51bSA9IG47CisrCXJlc3VsdCA9IE5VTUJFUjsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJz0nOgorKyAgICAgIGlmIChleHBbMF0gPT0gJz0nKQorKwl7CisrCSAgKytleHA7CisrCSAgbHZhbC0+b3AgPSBlcXVhbDsKKysJICByZXN1bHQgPSBFUVVPUDI7CisrCX0KKysgICAgICBlbHNlCisrCXJlc3VsdCA9IFlZRVJSQ09ERTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnISc6CisrICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisrCXsKKysJICArK2V4cDsKKysJICBsdmFsLT5vcCA9IG5vdF9lcXVhbDsKKysJICByZXN1bHQgPSBFUVVPUDI7CisrCX0KKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnJic6CisrICAgIGNhc2UgJ3wnOgorKyAgICAgIGlmIChleHBbMF0gPT0gcmVzdWx0KQorKwkrK2V4cDsKKysgICAgICBlbHNlCisrCXJlc3VsdCA9IFlZRVJSQ09ERTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnPCc6CisrICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisrCXsKKysJICArK2V4cDsKKysJICBsdmFsLT5vcCA9IGxlc3Nfb3JfZXF1YWw7CisrCX0KKysgICAgICBlbHNlCisrCWx2YWwtPm9wID0gbGVzc190aGFuOworKyAgICAgIHJlc3VsdCA9IENNUE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnPic6CisrICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisrCXsKKysJICArK2V4cDsKKysJICBsdmFsLT5vcCA9IGdyZWF0ZXJfb3JfZXF1YWw7CisrCX0KKysgICAgICBlbHNlCisrCWx2YWwtPm9wID0gZ3JlYXRlcl90aGFuOworKyAgICAgIHJlc3VsdCA9IENNUE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnKic6CisrICAgICAgbHZhbC0+b3AgPSBtdWx0OworKyAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnLyc6CisrICAgICAgbHZhbC0+b3AgPSBkaXZpZGU7CisrICAgICAgcmVzdWx0ID0gTVVMT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICclJzoKKysgICAgICBsdmFsLT5vcCA9IG1vZHVsZTsKKysgICAgICByZXN1bHQgPSBNVUxPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJysnOgorKyAgICAgIGx2YWwtPm9wID0gcGx1czsKKysgICAgICByZXN1bHQgPSBBRERPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJy0nOgorKyAgICAgIGx2YWwtPm9wID0gbWludXM7CisrICAgICAgcmVzdWx0ID0gQURET1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICduJzoKKysgICAgY2FzZSAnPyc6CisrICAgIGNhc2UgJzonOgorKyAgICBjYXNlICcoJzoKKysgICAgY2FzZSAnKSc6CisrICAgICAgLyogTm90aGluZywganVzdCByZXR1cm4gdGhlIGNoYXJhY3Rlci4gICovCisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJzsnOgorKyAgICBjYXNlICdcbic6CisrICAgIGNhc2UgJ1wwJzoKKysgICAgICAvKiBCZSBzYWZlIGFuZCBsZXQgdGhlIHVzZXIgY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluLiAgKi8KKysgICAgICAtLWV4cDsKKysgICAgICByZXN1bHQgPSBZWUVPRjsKKysgICAgICBicmVhazsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICByZXN1bHQgPSBZWUVSUkNPREU7CisrI2lmIFlZREVCVUcgIT0gMAorKyAgICAgIC0tZXhwOworKyNlbmRpZgorKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICAqcGV4cCA9IGV4cDsKKysKKysgIHJldHVybiByZXN1bHQ7CisrfQorKworKworK3N0YXRpYyB2b2lkCisreXllcnJvciAoY29uc3QgY2hhciAqc3RyKQorK3sKKysgIC8qIERvIG5vdGhpbmcuICBXZSBkb24ndCBwcmludCBlcnJvciBtZXNzYWdlcyBoZXJlLiAgKi8KKyt9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcGx1cmFsLWV4cC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3BsdXJhbC1leHAuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjU3ODcxNDE5MiAtMDQwMAorQEAgLTAsMCArMSwxNTQgQEAKKysvKiBFeHByZXNzaW9uIHBhcnNpbmcgZm9yIHBsdXJhbCBmb3JtIHNlbGVjdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAyMDAwLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKysjaW5jbHVkZSAicGx1cmFsLWV4cC5oIgorKworKyNpZiAoZGVmaW5lZCBfX0dOVUNfXyAmJiAhZGVmaW5lZCBfX0FQUExFX0NDX18pIFwKKysgICAgfHwgKGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCisrCisrLyogVGhlc2Ugc3RydWN0cyBhcmUgdGhlIGNvbnN0YW50IGV4cHJlc3Npb24gZm9yIHRoZSBnZXJtYW5pYyBwbHVyYWwKKysgICBmb3JtIGRldGVybWluYXRpb24uICBJdCByZXByZXNlbnRzIHRoZSBleHByZXNzaW9uICAibiAhPSAxIi4gICovCisrc3RhdGljIGNvbnN0IHN0cnVjdCBleHByZXNzaW9uIHBsdmFyID0KKyt7CisrICAubmFyZ3MgPSAwLAorKyAgLm9wZXJhdGlvbiA9IHZhciwKKyt9OworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXhwcmVzc2lvbiBwbG9uZSA9CisreworKyAgLm5hcmdzID0gMCwKKysgIC5vcGVyYXRpb24gPSBudW0sCisrICAudmFsID0KKysgIHsKKysgICAgLm51bSA9IDEKKysgIH0KKyt9OworK3N0cnVjdCBleHByZXNzaW9uIEdFUk1BTklDX1BMVVJBTCA9CisreworKyAgLm5hcmdzID0gMiwKKysgIC5vcGVyYXRpb24gPSBub3RfZXF1YWwsCisrICAudmFsID0KKysgIHsKKysgICAgLmFyZ3MgPQorKyAgICB7CisrICAgICAgWzBdID0gKHN0cnVjdCBleHByZXNzaW9uICopICZwbHZhciwKKysgICAgICBbMV0gPSAoc3RydWN0IGV4cHJlc3Npb24gKikgJnBsb25lCisrICAgIH0KKysgIH0KKyt9OworKworKyMgZGVmaW5lIElOSVRfR0VSTUFOSUNfUExVUkFMKCkKKysKKysjZWxzZQorKworKy8qIEZvciBjb21waWxlcnMgd2l0aG91dCBzdXBwb3J0IGZvciBJU08gQyA5OSBzdHJ1Y3QvdW5pb24gaW5pdGlhbGl6ZXJzOgorKyAgIEluaXRpYWxpemF0aW9uIGF0IHJ1bi10aW1lLiAgKi8KKysKKytzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gcGx2YXI7Cisrc3RhdGljIHN0cnVjdCBleHByZXNzaW9uIHBsb25lOworK3N0cnVjdCBleHByZXNzaW9uIEdFUk1BTklDX1BMVVJBTDsKKysKKytzdGF0aWMgdm9pZAorK2luaXRfZ2VybWFuaWNfcGx1cmFsICgpCisreworKyAgaWYgKHBsb25lLnZhbC5udW0gPT0gMCkKKysgICAgeworKyAgICAgIHBsdmFyLm5hcmdzID0gMDsKKysgICAgICBwbHZhci5vcGVyYXRpb24gPSB2YXI7CisrCisrICAgICAgcGxvbmUubmFyZ3MgPSAwOworKyAgICAgIHBsb25lLm9wZXJhdGlvbiA9IG51bTsKKysgICAgICBwbG9uZS52YWwubnVtID0gMTsKKysKKysgICAgICBHRVJNQU5JQ19QTFVSQUwubmFyZ3MgPSAyOworKyAgICAgIEdFUk1BTklDX1BMVVJBTC5vcGVyYXRpb24gPSBub3RfZXF1YWw7CisrICAgICAgR0VSTUFOSUNfUExVUkFMLnZhbC5hcmdzWzBdID0gJnBsdmFyOworKyAgICAgIEdFUk1BTklDX1BMVVJBTC52YWwuYXJnc1sxXSA9ICZwbG9uZTsKKysgICAgfQorK30KKysKKysjIGRlZmluZSBJTklUX0dFUk1BTklDX1BMVVJBTCgpIGluaXRfZ2VybWFuaWNfcGx1cmFsICgpCisrCisrI2VuZGlmCisrCisrdm9pZAorK2ludGVybmFsX2Z1bmN0aW9uCisrRVhUUkFDVF9QTFVSQUxfRVhQUkVTU0lPTiAoY29uc3QgY2hhciAqbnVsbGVudHJ5LCBzdHJ1Y3QgZXhwcmVzc2lvbiAqKnBsdXJhbHAsCisrCQkJICAgdW5zaWduZWQgbG9uZyBpbnQgKm5wbHVyYWxzcCkKKyt7CisrICBpZiAobnVsbGVudHJ5ICE9IE5VTEwpCisrICAgIHsKKysgICAgICBjb25zdCBjaGFyICpwbHVyYWw7CisrICAgICAgY29uc3QgY2hhciAqbnBsdXJhbHM7CisrCisrICAgICAgcGx1cmFsID0gc3Ryc3RyIChudWxsZW50cnksICJwbHVyYWw9Iik7CisrICAgICAgbnBsdXJhbHMgPSBzdHJzdHIgKG51bGxlbnRyeSwgIm5wbHVyYWxzPSIpOworKyAgICAgIGlmIChwbHVyYWwgPT0gTlVMTCB8fCBucGx1cmFscyA9PSBOVUxMKQorKwlnb3RvIG5vX3BsdXJhbDsKKysgICAgICBlbHNlCisrCXsKKysJICBjaGFyICplbmRwOworKwkgIHVuc2lnbmVkIGxvbmcgaW50IG47CisrCSAgc3RydWN0IHBhcnNlX2FyZ3MgYXJnczsKKysKKysJICAvKiBGaXJzdCBnZXQgdGhlIG51bWJlci4gICovCisrCSAgbnBsdXJhbHMgKz0gOTsKKysJICB3aGlsZSAoKm5wbHVyYWxzICE9ICdcMCcgJiYgaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpICpucGx1cmFscykpCisrCSAgICArK25wbHVyYWxzOworKwkgIGlmICghKCpucGx1cmFscyA+PSAnMCcgJiYgKm5wbHVyYWxzIDw9ICc5JykpCisrCSAgICBnb3RvIG5vX3BsdXJhbDsKKysjaWYgZGVmaW5lZCBIQVZFX1NUUlRPVUwgfHwgZGVmaW5lZCBfTElCQworKwkgIG4gPSBzdHJ0b3VsIChucGx1cmFscywgJmVuZHAsIDEwKTsKKysjZWxzZQorKwkgIGZvciAoZW5kcCA9IG5wbHVyYWxzLCBuID0gMDsgKmVuZHAgPj0gJzAnICYmICplbmRwIDw9ICc5JzsgZW5kcCsrKQorKwkgICAgbiA9IG4gKiAxMCArICgqZW5kcCAtICcwJyk7CisrI2VuZGlmCisrCSAgaWYgKG5wbHVyYWxzID09IGVuZHApCisrCSAgICBnb3RvIG5vX3BsdXJhbDsKKysJICAqbnBsdXJhbHNwID0gbjsKKysKKysJICAvKiBEdWUgdG8gdGhlIHJlc3RyaWN0aW9ucyBiaXNvbiBpbXBvc2VzIG9udG8gdGhlIGludGVyZmFjZSBvZiB0aGUKKysJICAgICBzY2FubmVyIGZ1bmN0aW9uIHdlIGhhdmUgdG8gcHV0IHRoZSBpbnB1dCBzdHJpbmcgYW5kIHRoZSByZXN1bHQKKysJICAgICBwYXNzZWQgdXAgZnJvbSB0aGUgcGFyc2VyIGludG8gdGhlIHNhbWUgc3RydWN0dXJlIHdoaWNoIGFkZHJlc3MKKysJICAgICBpcyBwYXNzZWQgZG93biB0byB0aGUgcGFyc2VyLiAgKi8KKysJICBwbHVyYWwgKz0gNzsKKysJICBhcmdzLmNwID0gcGx1cmFsOworKwkgIGlmIChQTFVSQUxfUEFSU0UgKCZhcmdzKSAhPSAwKQorKwkgICAgZ290byBub19wbHVyYWw7CisrCSAgKnBsdXJhbHAgPSBhcmdzLnJlczsKKysJfQorKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAvKiBCeSBkZWZhdWx0IHdlIGFyZSB1c2luZyB0aGUgR2VybWFuaWMgZm9ybTogc2luZ3VsYXIgZm9ybSBvbmx5CisrICAgICAgICAgZm9yIGBvbmUnLCB0aGUgcGx1cmFsIGZvcm0gb3RoZXJ3aXNlLiAgWWVzLCB0aGlzIGlzIGFsc28gd2hhdAorKyAgICAgICAgIEVuZ2xpc2ggaXMgdXNpbmcgc2luY2UgRW5nbGlzaCBpcyBhIEdlcm1hbmljIGxhbmd1YWdlLiAgKi8KKysgICAgbm9fcGx1cmFsOgorKyAgICAgIElOSVRfR0VSTUFOSUNfUExVUkFMICgpOworKyAgICAgICpwbHVyYWxwID0gJkdFUk1BTklDX1BMVVJBTDsKKysgICAgICAqbnBsdXJhbHNwID0gMjsKKysgICAgfQorK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wbHVyYWwtZXhwLmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcGx1cmFsLWV4cC5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTg0NzEzMjgwIC0wNDAwCitAQCAtMCwwICsxLDExOCBAQAorKy8qIEV4cHJlc3Npb24gcGFyc2luZyBhbmQgZXZhbHVhdGlvbiBmb3IgcGx1cmFsIGZvcm0gc2VsZWN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDIwMDAuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX1BMVVJBTF9FWFBfSAorKyNkZWZpbmUgX1BMVVJBTF9FWFBfSAorKworKyNpZm5kZWYgaW50ZXJuYWxfZnVuY3Rpb24KKysjIGRlZmluZSBpbnRlcm5hbF9mdW5jdGlvbgorKyNlbmRpZgorKworKyNpZm5kZWYgYXR0cmlidXRlX2hpZGRlbgorKyMgZGVmaW5lIGF0dHJpYnV0ZV9oaWRkZW4KKysjZW5kaWYKKysKKysKKysvKiBUaGlzIGlzIHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXhwcmVzc2lvbnMgdG8gZGV0ZXJtaW5lIHRoZQorKyAgIHBsdXJhbCBmb3JtLiAgKi8KKytzdHJ1Y3QgZXhwcmVzc2lvbgorK3sKKysgIGludCBuYXJnczsJCQkvKiBOdW1iZXIgb2YgYXJndW1lbnRzLiAgKi8KKysgIGVudW0gb3BlcmF0b3IKKysgIHsKKysgICAgLyogV2l0aG91dCBhcmd1bWVudHM6ICAqLworKyAgICB2YXIsCQkJLyogVGhlIHZhcmlhYmxlICJuIi4gICovCisrICAgIG51bSwJCQkvKiBEZWNpbWFsIG51bWJlci4gICovCisrICAgIC8qIFVuYXJ5IG9wZXJhdG9yczogICovCisrICAgIGxub3QsCQkJLyogTG9naWNhbCBOT1QuICAqLworKyAgICAvKiBCaW5hcnkgb3BlcmF0b3JzOiAgKi8KKysgICAgbXVsdCwJCQkvKiBNdWx0aXBsaWNhdGlvbi4gICovCisrICAgIGRpdmlkZSwJCQkvKiBEaXZpc2lvbi4gICovCisrICAgIG1vZHVsZSwJCQkvKiBNb2R1bG8gb3BlcmF0aW9uLiAgKi8KKysgICAgcGx1cywJCQkvKiBBZGRpdGlvbi4gICovCisrICAgIG1pbnVzLAkJCS8qIFN1YnRyYWN0aW9uLiAgKi8KKysgICAgbGVzc190aGFuLAkJCS8qIENvbXBhcmlzb24uICAqLworKyAgICBncmVhdGVyX3RoYW4sCQkvKiBDb21wYXJpc29uLiAgKi8KKysgICAgbGVzc19vcl9lcXVhbCwJCS8qIENvbXBhcmlzb24uICAqLworKyAgICBncmVhdGVyX29yX2VxdWFsLAkJLyogQ29tcGFyaXNvbi4gICovCisrICAgIGVxdWFsLAkJCS8qIENvbXBhcmlzb24gZm9yIGVxdWFsaXR5LiAgKi8KKysgICAgbm90X2VxdWFsLAkJCS8qIENvbXBhcmlzb24gZm9yIGluZXF1YWxpdHkuICAqLworKyAgICBsYW5kLAkJCS8qIExvZ2ljYWwgQU5ELiAgKi8KKysgICAgbG9yLAkJCS8qIExvZ2ljYWwgT1IuICAqLworKyAgICAvKiBUZXJuYXJ5IG9wZXJhdG9yczogICovCisrICAgIHFtb3AJCQkvKiBRdWVzdGlvbiBtYXJrIG9wZXJhdG9yLiAgKi8KKysgIH0gb3BlcmF0aW9uOworKyAgdW5pb24KKysgIHsKKysgICAgdW5zaWduZWQgbG9uZyBpbnQgbnVtOwkvKiBOdW1iZXIgdmFsdWUgZm9yIGBudW0nLiAgKi8KKysgICAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbM107CS8qIFVwIHRvIHRocmVlIGFyZ3VtZW50cy4gICovCisrICB9IHZhbDsKKyt9OworKworKy8qIFRoaXMgaXMgdGhlIGRhdGEgc3RydWN0dXJlIHRvIHBhc3MgaW5mb3JtYXRpb24gdG8gdGhlIHBhcnNlciBhbmQgZ2V0CisrICAgdGhlIHJlc3VsdCBpbiBhIHRocmVhZC1zYWZlIHdheS4gICovCisrc3RydWN0IHBhcnNlX2FyZ3MKKyt7CisrICBjb25zdCBjaGFyICpjcDsKKysgIHN0cnVjdCBleHByZXNzaW9uICpyZXM7CisrfTsKKysKKysKKysvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGlzIHNvdXJjZSBjb2RlIGlzIHVzZWQKKysgICAxLiBpbiB0aGUgR05VIEMgTGlicmFyeSBsaWJyYXJ5LAorKyAgIDIuIGluIHRoZSBHTlUgbGliaW50bCBsaWJyYXJ5LAorKyAgIDMuIGluIHRoZSBHTlUgZ2V0dGV4dCB0b29scy4KKysgICBUaGUgZnVuY3Rpb24gbmFtZXMgaW4gZWFjaCBzaXR1YXRpb24gbXVzdCBiZSBkaWZmZXJlbnQsIHRvIGFsbG93IGZvcgorKyAgIGJpbmFyeSBpbmNvbXBhdGlibGUgY2hhbmdlcyBpbiAnc3RydWN0IGV4cHJlc3Npb24nLiAgRnVydGhlcm1vcmUsCisrICAgMS4gaW4gdGhlIEdOVSBDIExpYnJhcnkgbGlicmFyeSwgdGhlIG5hbWVzIGhhdmUgYSBfXyBwcmVmaXgsCisrICAgMi4rMy4gaW4gdGhlIEdOVSBsaWJpbnRsIGxpYnJhcnkgYW5kIGluIHRoZSBHTlUgZ2V0dGV4dCB0b29scywgdGhlIG5hbWVzCisrICAgICAgICAgbXVzdCBmb2xsb3cgQU5TSSBDIGFuZCBub3Qgc3RhcnQgd2l0aCBfXy4KKysgICBTbyB3ZSBoYXZlIHRvIGRpc3Rpbmd1aXNoIHRoZSB0aHJlZSBjYXNlcy4gICovCisrI2lmZGVmIF9MSUJDCisrIyBkZWZpbmUgRlJFRV9FWFBSRVNTSU9OIF9fZ2V0dGV4dF9mcmVlX2V4cAorKyMgZGVmaW5lIFBMVVJBTF9QQVJTRSBfX2dldHRleHRwYXJzZQorKyMgZGVmaW5lIEdFUk1BTklDX1BMVVJBTCBfX2dldHRleHRfZ2VybWFuaWNfcGx1cmFsCisrIyBkZWZpbmUgRVhUUkFDVF9QTFVSQUxfRVhQUkVTU0lPTiBfX2dldHRleHRfZXh0cmFjdF9wbHVyYWwKKysjZWxpZiBkZWZpbmVkIChJTl9MSUJJTlRMKQorKyMgZGVmaW5lIEZSRUVfRVhQUkVTU0lPTiBsaWJpbnRsX2dldHRleHRfZnJlZV9leHAKKysjIGRlZmluZSBQTFVSQUxfUEFSU0UgbGliaW50bF9nZXR0ZXh0cGFyc2UKKysjIGRlZmluZSBHRVJNQU5JQ19QTFVSQUwgbGliaW50bF9nZXR0ZXh0X2dlcm1hbmljX3BsdXJhbAorKyMgZGVmaW5lIEVYVFJBQ1RfUExVUkFMX0VYUFJFU1NJT04gbGliaW50bF9nZXR0ZXh0X2V4dHJhY3RfcGx1cmFsCisrI2Vsc2UKKysjIGRlZmluZSBGUkVFX0VYUFJFU1NJT04gZnJlZV9wbHVyYWxfZXhwcmVzc2lvbgorKyMgZGVmaW5lIFBMVVJBTF9QQVJTRSBwYXJzZV9wbHVyYWxfZXhwcmVzc2lvbgorKyMgZGVmaW5lIEdFUk1BTklDX1BMVVJBTCBnZXJtYW5pY19wbHVyYWwKKysjIGRlZmluZSBFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIGV4dHJhY3RfcGx1cmFsX2V4cHJlc3Npb24KKysjZW5kaWYKKysKKytleHRlcm4gdm9pZCBGUkVFX0VYUFJFU1NJT04gKHN0cnVjdCBleHByZXNzaW9uICpleHApCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKytleHRlcm4gaW50IFBMVVJBTF9QQVJTRSAodm9pZCAqYXJnKTsKKytleHRlcm4gc3RydWN0IGV4cHJlc3Npb24gR0VSTUFOSUNfUExVUkFMIGF0dHJpYnV0ZV9oaWRkZW47CisrZXh0ZXJuIHZvaWQgRVhUUkFDVF9QTFVSQUxfRVhQUkVTU0lPTiAoY29uc3QgY2hhciAqbnVsbGVudHJ5LAorKwkJCQkgICAgICAgc3RydWN0IGV4cHJlc3Npb24gKipwbHVyYWxwLAorKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgKm5wbHVyYWxzcCkKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworKworKyNpZiAhZGVmaW5lZCAoX0xJQkMpICYmICFkZWZpbmVkIChJTl9MSUJJTlRMKQorK2V4dGVybiB1bnNpZ25lZCBsb25nIGludCBwbHVyYWxfZXZhbCAoc3RydWN0IGV4cHJlc3Npb24gKnBleHAsCisrCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaW50IG4pOworKyNlbmRpZgorKworKyNlbmRpZiAvKiBfUExVUkFMX0VYUF9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcGx1cmFsLnkJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcGx1cmFsLnkJMjAwNC0wOS0xMiAxNDo0MDozNC41ODk3MTI1MjAgLTA0MDAKK0BAIC0wLDAgKzEsMzgxIEBACisrJXsKKysvKiBFeHByZXNzaW9uIHBhcnNpbmcgZm9yIHBsdXJhbCBmb3JtIHNlbGVjdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAyMDAwLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBUaGUgYmlzb24gZ2VuZXJhdGVkIHBhcnNlciB1c2VzIGFsbG9jYS4gIEFJWCAzIGZvcmNlcyB1cyB0byBwdXQgdGhpcworKyAgIGRlY2xhcmF0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuICBUaGUgZGVjbGFyYXRpb24gaW4gYmlzb24ncworKyAgIHNrZWxldG9uIGZpbGUgY29tZXMgdG9vIGxhdGUuICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPgorKyAgIGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZSBhcmJpdHJhcnkgc3lzdGVtIGhlYWRlcnMuICAqLworKyNpZiBkZWZpbmVkIF9BSVggJiYgIWRlZmluZWQgX19HTlVDX18KKysgI3ByYWdtYSBhbGxvY2EKKysjZW5kaWYKKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSAicGx1cmFsLWV4cC5oIgorKworKy8qIFRoZSBtYWluIGZ1bmN0aW9uIGdlbmVyYXRlZCBieSB0aGUgcGFyc2VyIGlzIGNhbGxlZCBfX2dldHRleHRwYXJzZSwKKysgICBidXQgd2Ugd2FudCBpdCB0byBiZSBjYWxsZWQgUExVUkFMX1BBUlNFLiAgKi8KKysjaWZuZGVmIF9MSUJDCisrIyBkZWZpbmUgX19nZXR0ZXh0cGFyc2UgUExVUkFMX1BBUlNFCisrI2VuZGlmCisrCisrI2RlZmluZSBZWUxFWF9QQVJBTQkmKChzdHJ1Y3QgcGFyc2VfYXJncyAqKSBhcmcpLT5jcAorKyNkZWZpbmUgWVlQQVJTRV9QQVJBTQlhcmcKKyslfQorKyVwdXJlX3BhcnNlcgorKyVleHBlY3QgNworKworKyV1bmlvbiB7CisrICB1bnNpZ25lZCBsb25nIGludCBudW07CisrICBlbnVtIG9wZXJhdG9yIG9wOworKyAgc3RydWN0IGV4cHJlc3Npb24gKmV4cDsKKyt9CisrCisrJXsKKysvKiBQcm90b3R5cGVzIGZvciBsb2NhbCBmdW5jdGlvbnMuICAqLworK3N0YXRpYyBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWwsIGNvbnN0IGNoYXIgKipwZXhwKTsKKytzdGF0aWMgdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICpzdHIpOworKworKy8qIEFsbG9jYXRpb24gb2YgZXhwcmVzc2lvbnMuICAqLworKworK3N0YXRpYyBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cCAoaW50IG5hcmdzLCBlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqIGNvbnN0ICphcmdzKQorK3sKKysgIGludCBpOworKyAgc3RydWN0IGV4cHJlc3Npb24gKm5ld3A7CisrCisrICAvKiBJZiBhbnkgb2YgdGhlIGFyZ3VtZW50IGNvdWxkIG5vdCBiZSBtYWxsb2MnZWQsIGp1c3QgcmV0dXJuIE5VTEwuICAqLworKyAgZm9yIChpID0gbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKysgICAgaWYgKGFyZ3NbaV0gPT0gTlVMTCkKKysgICAgICBnb3RvIGZhaWw7CisrCisrICAvKiBBbGxvY2F0ZSBhIG5ldyBleHByZXNzaW9uLiAgKi8KKysgIG5ld3AgPSAoc3RydWN0IGV4cHJlc3Npb24gKikgbWFsbG9jIChzaXplb2YgKCpuZXdwKSk7CisrICBpZiAobmV3cCAhPSBOVUxMKQorKyAgICB7CisrICAgICAgbmV3cC0+bmFyZ3MgPSBuYXJnczsKKysgICAgICBuZXdwLT5vcGVyYXRpb24gPSBvcDsKKysgICAgICBmb3IgKGkgPSBuYXJncyAtIDE7IGkgPj0gMDsgaS0tKQorKwluZXdwLT52YWwuYXJnc1tpXSA9IGFyZ3NbaV07CisrICAgICAgcmV0dXJuIG5ld3A7CisrICAgIH0KKysKKysgZmFpbDoKKysgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCisrICAgIEZSRUVfRVhQUkVTU0lPTiAoYXJnc1tpXSk7CisrCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cF8wIChlbnVtIG9wZXJhdG9yIG9wKQorK3sKKysgIHJldHVybiBuZXdfZXhwICgwLCBvcCwgTlVMTCk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHBfMSAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKnJpZ2h0KQorK3sKKysgIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzFdOworKworKyAgYXJnc1swXSA9IHJpZ2h0OworKyAgcmV0dXJuIG5ld19leHAgKDEsIG9wLCBhcmdzKTsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwXzIgKGVudW0gb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICpsZWZ0LCBzdHJ1Y3QgZXhwcmVzc2lvbiAqcmlnaHQpCisreworKyAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbMl07CisrCisrICBhcmdzWzBdID0gbGVmdDsKKysgIGFyZ3NbMV0gPSByaWdodDsKKysgIHJldHVybiBuZXdfZXhwICgyLCBvcCwgYXJncyk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHBfMyAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKmJleHAsCisrCSAgIHN0cnVjdCBleHByZXNzaW9uICp0YnJhbmNoLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqZmJyYW5jaCkKKyt7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1szXTsKKysKKysgIGFyZ3NbMF0gPSBiZXhwOworKyAgYXJnc1sxXSA9IHRicmFuY2g7CisrICBhcmdzWzJdID0gZmJyYW5jaDsKKysgIHJldHVybiBuZXdfZXhwICgzLCBvcCwgYXJncyk7CisrfQorKworKyV9CisrCisrLyogVGhpcyBkZWNsYXJlcyB0aGF0IGFsbCBvcGVyYXRvcnMgaGF2ZSB0aGUgc2FtZSBhc3NvY2lhdGl2aXR5IGFuZCB0aGUKKysgICBwcmVjZWRlbmNlIG9yZGVyIGFzIGluIEMuICBTZWUgW0hhcmJpc29uLCBTdGVlbGU6IEMsIEEgUmVmZXJlbmNlIE1hbnVhbF0uCisrICAgVGhlcmUgaXMgbm8gdW5hcnkgbWludXMgYW5kIG5vIGJpdHdpc2Ugb3BlcmF0b3JzLgorKyAgIE9wZXJhdG9ycyB3aXRoIHRoZSBzYW1lIHN5bnRhY3RpYyBiZWhhdmlvdXIgaGF2ZSBiZWVuIG1lcmdlZCBpbnRvIGEgc2luZ2xlCisrICAgdG9rZW4sIHRvIHNhdmUgc3BhY2UgaW4gdGhlIGFycmF5IGdlbmVyYXRlZCBieSBiaXNvbi4gICovCisrJXJpZ2h0ICc/JwkJLyogICA/CQkqLworKyVsZWZ0ICd8JwkJLyogICB8fAkJKi8KKyslbGVmdCAnJicJCS8qICAgJiYJCSovCisrJWxlZnQgRVFVT1AyCQkvKiAgID09ICE9CSovCisrJWxlZnQgQ01QT1AyCQkvKiAgIDwgPiA8PSA+PQkqLworKyVsZWZ0IEFERE9QMgkJLyogICArIC0JKi8KKyslbGVmdCBNVUxPUDIJCS8qICAgKiAvICUJKi8KKyslcmlnaHQgJyEnCQkvKiAgICEJCSovCisrCisrJXRva2VuIDxvcD4gRVFVT1AyIENNUE9QMiBBRERPUDIgTVVMT1AyCisrJXRva2VuIDxudW0+IE5VTUJFUgorKyV0eXBlIDxleHA+IGV4cAorKworKyUlCisrCisrc3RhcnQ6CSAgZXhwCisrCSAgeworKwkgICAgaWYgKCQxID09IE5VTEwpCisrCSAgICAgIFlZQUJPUlQ7CisrCSAgICAoKHN0cnVjdCBwYXJzZV9hcmdzICopIGFyZyktPnJlcyA9ICQxOworKwkgIH0KKysJOworKworK2V4cDoJICBleHAgJz8nIGV4cCAnOicgZXhwCisrCSAgeworKwkgICAgJCQgPSBuZXdfZXhwXzMgKHFtb3AsICQxLCAkMywgJDUpOworKwkgIH0KKysJfCBleHAgJ3wnIGV4cAorKwkgIHsKKysJICAgICQkID0gbmV3X2V4cF8yIChsb3IsICQxLCAkMyk7CisrCSAgfQorKwl8IGV4cCAnJicgZXhwCisrCSAgeworKwkgICAgJCQgPSBuZXdfZXhwXzIgKGxhbmQsICQxLCAkMyk7CisrCSAgfQorKwl8IGV4cCBFUVVPUDIgZXhwCisrCSAgeworKwkgICAgJCQgPSBuZXdfZXhwXzIgKCQyLCAkMSwgJDMpOworKwkgIH0KKysJfCBleHAgQ01QT1AyIGV4cAorKwkgIHsKKysJICAgICQkID0gbmV3X2V4cF8yICgkMiwgJDEsICQzKTsKKysJICB9CisrCXwgZXhwIEFERE9QMiBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CisrCSAgfQorKwl8IGV4cCBNVUxPUDIgZXhwCisrCSAgeworKwkgICAgJCQgPSBuZXdfZXhwXzIgKCQyLCAkMSwgJDMpOworKwkgIH0KKysJfCAnIScgZXhwCisrCSAgeworKwkgICAgJCQgPSBuZXdfZXhwXzEgKGxub3QsICQyKTsKKysJICB9CisrCXwgJ24nCisrCSAgeworKwkgICAgJCQgPSBuZXdfZXhwXzAgKHZhcik7CisrCSAgfQorKwl8IE5VTUJFUgorKwkgIHsKKysJICAgIGlmICgoJCQgPSBuZXdfZXhwXzAgKG51bSkpICE9IE5VTEwpCisrCSAgICAgICQkLT52YWwubnVtID0gJDE7CisrCSAgfQorKwl8ICcoJyBleHAgJyknCisrCSAgeworKwkgICAgJCQgPSAkMjsKKysJICB9CisrCTsKKysKKyslJQorKworK3ZvaWQKKytpbnRlcm5hbF9mdW5jdGlvbgorK0ZSRUVfRVhQUkVTU0lPTiAoc3RydWN0IGV4cHJlc3Npb24gKmV4cCkKKyt7CisrICBpZiAoZXhwID09IE5VTEwpCisrICAgIHJldHVybjsKKysKKysgIC8qIEhhbmRsZSB0aGUgcmVjdXJzaXZlIGNhc2UuICAqLworKyAgc3dpdGNoIChleHAtPm5hcmdzKQorKyAgICB7CisrICAgIGNhc2UgMzoKKysgICAgICBGUkVFX0VYUFJFU1NJT04gKGV4cC0+dmFsLmFyZ3NbMl0pOworKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisrICAgIGNhc2UgMjoKKysgICAgICBGUkVFX0VYUFJFU1NJT04gKGV4cC0+dmFsLmFyZ3NbMV0pOworKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisrICAgIGNhc2UgMToKKysgICAgICBGUkVFX0VYUFJFU1NJT04gKGV4cC0+dmFsLmFyZ3NbMF0pOworKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisrICAgIGRlZmF1bHQ6CisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgIGZyZWUgKGV4cCk7CisrfQorKworKworK3N0YXRpYyBpbnQKKyt5eWxleCAoWVlTVFlQRSAqbHZhbCwgY29uc3QgY2hhciAqKnBleHApCisreworKyAgY29uc3QgY2hhciAqZXhwID0gKnBleHA7CisrICBpbnQgcmVzdWx0OworKworKyAgd2hpbGUgKDEpCisrICAgIHsKKysgICAgICBpZiAoZXhwWzBdID09ICdcMCcpCisrCXsKKysJICAqcGV4cCA9IGV4cDsKKysJICByZXR1cm4gWVlFT0Y7CisrCX0KKysKKysgICAgICBpZiAoZXhwWzBdICE9ICcgJyAmJiBleHBbMF0gIT0gJ1x0JykKKysJYnJlYWs7CisrCisrICAgICAgKytleHA7CisrICAgIH0KKysKKysgIHJlc3VsdCA9ICpleHArKzsKKysgIHN3aXRjaCAocmVzdWx0KQorKyAgICB7CisrICAgIGNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKysgICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorKyAgICAgIHsKKysJdW5zaWduZWQgbG9uZyBpbnQgbiA9IHJlc3VsdCAtICcwJzsKKysJd2hpbGUgKGV4cFswXSA+PSAnMCcgJiYgZXhwWzBdIDw9ICc5JykKKysJICB7CisrCSAgICBuICo9IDEwOworKwkgICAgbiArPSBleHBbMF0gLSAnMCc7CisrCSAgICArK2V4cDsKKysJICB9CisrCWx2YWwtPm51bSA9IG47CisrCXJlc3VsdCA9IE5VTUJFUjsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJz0nOgorKyAgICAgIGlmIChleHBbMF0gPT0gJz0nKQorKwl7CisrCSAgKytleHA7CisrCSAgbHZhbC0+b3AgPSBlcXVhbDsKKysJICByZXN1bHQgPSBFUVVPUDI7CisrCX0KKysgICAgICBlbHNlCisrCXJlc3VsdCA9IFlZRVJSQ09ERTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnISc6CisrICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisrCXsKKysJICArK2V4cDsKKysJICBsdmFsLT5vcCA9IG5vdF9lcXVhbDsKKysJICByZXN1bHQgPSBFUVVPUDI7CisrCX0KKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnJic6CisrICAgIGNhc2UgJ3wnOgorKyAgICAgIGlmIChleHBbMF0gPT0gcmVzdWx0KQorKwkrK2V4cDsKKysgICAgICBlbHNlCisrCXJlc3VsdCA9IFlZRVJSQ09ERTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnPCc6CisrICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisrCXsKKysJICArK2V4cDsKKysJICBsdmFsLT5vcCA9IGxlc3Nfb3JfZXF1YWw7CisrCX0KKysgICAgICBlbHNlCisrCWx2YWwtPm9wID0gbGVzc190aGFuOworKyAgICAgIHJlc3VsdCA9IENNUE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnPic6CisrICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisrCXsKKysJICArK2V4cDsKKysJICBsdmFsLT5vcCA9IGdyZWF0ZXJfb3JfZXF1YWw7CisrCX0KKysgICAgICBlbHNlCisrCWx2YWwtPm9wID0gZ3JlYXRlcl90aGFuOworKyAgICAgIHJlc3VsdCA9IENNUE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnKic6CisrICAgICAgbHZhbC0+b3AgPSBtdWx0OworKyAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnLyc6CisrICAgICAgbHZhbC0+b3AgPSBkaXZpZGU7CisrICAgICAgcmVzdWx0ID0gTVVMT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICclJzoKKysgICAgICBsdmFsLT5vcCA9IG1vZHVsZTsKKysgICAgICByZXN1bHQgPSBNVUxPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJysnOgorKyAgICAgIGx2YWwtPm9wID0gcGx1czsKKysgICAgICByZXN1bHQgPSBBRERPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJy0nOgorKyAgICAgIGx2YWwtPm9wID0gbWludXM7CisrICAgICAgcmVzdWx0ID0gQURET1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICduJzoKKysgICAgY2FzZSAnPyc6CisrICAgIGNhc2UgJzonOgorKyAgICBjYXNlICcoJzoKKysgICAgY2FzZSAnKSc6CisrICAgICAgLyogTm90aGluZywganVzdCByZXR1cm4gdGhlIGNoYXJhY3Rlci4gICovCisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJzsnOgorKyAgICBjYXNlICdcbic6CisrICAgIGNhc2UgJ1wwJzoKKysgICAgICAvKiBCZSBzYWZlIGFuZCBsZXQgdGhlIHVzZXIgY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluLiAgKi8KKysgICAgICAtLWV4cDsKKysgICAgICByZXN1bHQgPSBZWUVPRjsKKysgICAgICBicmVhazsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICByZXN1bHQgPSBZWUVSUkNPREU7CisrI2lmIFlZREVCVUcgIT0gMAorKyAgICAgIC0tZXhwOworKyNlbmRpZgorKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICAqcGV4cCA9IGV4cDsKKysKKysgIHJldHVybiByZXN1bHQ7CisrfQorKworKworK3N0YXRpYyB2b2lkCisreXllcnJvciAoY29uc3QgY2hhciAqc3RyKQorK3sKKysgIC8qIERvIG5vdGhpbmcuICBXZSBkb24ndCBwcmludCBlcnJvciBtZXNzYWdlcyBoZXJlLiAgKi8KKyt9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcG8ydGJsLnNlZC5pbgkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wbzJ0Ymwuc2VkLmluCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCitAQCAtMSwxMDIgKzAsMCBAQAorLSMgcG8ydGJsLnNlZCAtIENvbnZlcnQgVW5pZm9ydW0gc3R5bGUgLnBvIGZpbGUgdG8gbG9va3VwIHRhYmxlIGZvciBjYXRnZXRzCistIyBDb3B5cmlnaHQgKEMpIDE5OTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistIyBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCistIworLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0jCistIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLSMKKy0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKy0jCistMSB7CistICBpXAorLS8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IHBvMnRibC5zZWQgZnJvbSBAUEFDS0FHRSBOQU1FQC5wb3QuICAqL1wKKy1cCistI2lmIEhBVkVfQ09ORklHX0hcCistIyBpbmNsdWRlIDxjb25maWcuaD5cCistI2VuZGlmXAorLVwKKy0jaW5jbHVkZSAibGliZ2V0dGV4dC5oIlwKKy1cCistY29uc3Qgc3RydWN0IF9tc2dfZW50IF9tc2dfdGJsW10gPSB7CistICBoCistICBzLy4qLzAvCistICB4CistfQorLSMKKy0jIFdyaXRlIG1zZ2lkIGVudHJpZXMgaW4gQyBhcnJheSBmb3JtLgorLSMKKy0vXm1zZ2lkLyB7CistICBzL21zZ2lkWyAJXSpcKCIuKiJcKS8gIHtcMS8KKy0gIHRiCistIyBBcHBlbmQgdGhlIG5leHQgbGluZQorLSAgOmIKKy0gIE4KKy0jIExvb2sgd2hldGhlciBzZWNvbmQgcGFydCBpcyBjb250aW51YXRpb24gbGluZS4KKy0gIHMvXCguKlwpIlwoXG5cKSJcKC4qIlwpL1wxXDJcMy8KKy0jIFllcywgdGhlbiBicmFuY2guCistICB0YQorLSMgQmVjYXVzZSB3ZSBhc3N1bWUgdGhhdCB0aGUgaW5wdXQgZmlsZSBjb3JyZWN0bHkgZm9ybWVkIHRoZSBsaW5lCistIyBqdXN0IHJlYWQgY2Fubm90IGJlIGFnYWluIGJlIGEgbXNnaWQgbGluZS4gIFNvIGl0J3Mgc2FmZSB0byBpZ25vcmUKKy0jIGl0LgorLSAgcy9cKC4qXClcbi4qL1wxLworLSAgYmMKKy0jIFdlIGZvdW5kIGEgY29udGludWF0aW9uIGxpbmUuICBCdXQgYmVmb3JlIHByaW50aW5nIGluc2VydCAnXCcuCistICA6YQorLSAgcy9cKC4qXClcKFxuLipcKS9cMVxcXDIvCistICBQCistIyBXZSBjYW5ub3QgdXNlIEQgaGVyZS4KKy0gIHMvLipcblwoLipcKS9cMS8KKy0jIFNvbWUgYnVnZ3kgc2VkcyBkbyBub3QgY2xlYXIgdGhlIGBzdWNjZXNzZnVsIHN1YnN0aXR1dGlvbiBzaW5jZSBsYXN0IGBgdCcnJworLSMgZmxhZyBvbiBgTicsIHNvIHdlIGRvIGEgYHQnIGhlcmUgdG8gY2xlYXIgaXQuCistICB0YgorLSMgTm90IHJlYWNoZWQKKy0gIDpjCistICB4CistIyBUaGUgZm9sbG93aW5nIG5pY2Ugc29sdXRpb24gaXMgYnkKKy0jIEJydW5vIDxIYWlibGVAbWEyczIubWF0aGVtYXRpay51bmkta2FybHNydWhlLmRlPgorLSAgdGQKKy0jIEluY3JlbWVudCBhIGRlY2ltYWwgbnVtYmVyIGluIHBhdHRlcm4gc3BhY2UuCistIyBGaXJzdCBoaWRlIHRyYWlsaW5nIGA5JyBkaWdpdHMuCistICA6ZAorLSAgcy85XChfKlwpJC9fXDEvCistICB0ZAorLSMgQXNzdXJlIGF0IGxlYXN0IG9uZSBkaWdpdCBpcyBhdmFpbGFibGUuCistICBzL15cKF8qXCkkLzBcMS8KKy0jIEluY3JlbWVudCB0aGUgbGFzdCBkaWdpdC4KKy0gIHMvOFwoXypcKSQvOVwxLworLSAgcy83XChfKlwpJC84XDEvCistICBzLzZcKF8qXCkkLzdcMS8KKy0gIHMvNVwoXypcKSQvNlwxLworLSAgcy80XChfKlwpJC81XDEvCistICBzLzNcKF8qXCkkLzRcMS8KKy0gIHMvMlwoXypcKSQvM1wxLworLSAgcy8xXChfKlwpJC8yXDEvCistICBzLzBcKF8qXCkkLzFcMS8KKy0jIENvbnZlcnQgdGhlIGhpZGRlbiBgOScgZGlnaXRzIHRvIGAwJ3MuCistICBzL18vMC9nCistICB4CistICBHCistICBzL1woLipcKVxuXChbMC05XSpcKS9cMSwgXDJ9LC8KKy0gIHMvXCguKlwpIiQvXDEvCistICBwCistfQorLSMKKy0jIExhc3QgbGluZS4KKy0jCistJCB7CistICBpXAorLX07XAorLQorLSAgZworLSAgcy8wKlwoLipcKS9pbnQgX21zZ190YmxfbGVuZ3RoID0gXDE7L3AKKy19CistZAorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3ByaW50Zi1hcmdzLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcHJpbnRmLWFyZ3MuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjU5NTcxMTYwOCAtMDQwMAorQEAgLTAsMCArMSwxMTkgQEAKKysvKiBEZWNvbXBvc2VkIHByaW50ZiBhcmd1bWVudCBsaXN0LgorKyAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrLyogU3BlY2lmaWNhdGlvbi4gICovCisrI2luY2x1ZGUgInByaW50Zi1hcmdzLmgiCisrCisrI2lmZGVmIFNUQVRJQworK1NUQVRJQworKyNlbmRpZgorK2ludAorK3ByaW50Zl9mZXRjaGFyZ3MgKHZhX2xpc3QgYXJncywgYXJndW1lbnRzICphKQorK3sKKysgIHNpemVfdCBpOworKyAgYXJndW1lbnQgKmFwOworKworKyAgZm9yIChpID0gMCwgYXAgPSAmYS0+YXJnWzBdOyBpIDwgYS0+Y291bnQ7IGkrKywgYXArKykKKysgICAgc3dpdGNoIChhcC0+dHlwZSkKKysgICAgICB7CisrICAgICAgY2FzZSBUWVBFX1NDSEFSOgorKwlhcC0+YS5hX3NjaGFyID0gdmFfYXJnIChhcmdzLCAvKnNpZ25lZCBjaGFyKi8gaW50KTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX1VDSEFSOgorKwlhcC0+YS5hX3VjaGFyID0gdmFfYXJnIChhcmdzLCAvKnVuc2lnbmVkIGNoYXIqLyBpbnQpOworKwlicmVhazsKKysgICAgICBjYXNlIFRZUEVfU0hPUlQ6CisrCWFwLT5hLmFfc2hvcnQgPSB2YV9hcmcgKGFyZ3MsIC8qc2hvcnQqLyBpbnQpOworKwlicmVhazsKKysgICAgICBjYXNlIFRZUEVfVVNIT1JUOgorKwlhcC0+YS5hX3VzaG9ydCA9IHZhX2FyZyAoYXJncywgLyp1bnNpZ25lZCBzaG9ydCovIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9JTlQ6CisrCWFwLT5hLmFfaW50ID0gdmFfYXJnIChhcmdzLCBpbnQpOworKwlicmVhazsKKysgICAgICBjYXNlIFRZUEVfVUlOVDoKKysJYXAtPmEuYV91aW50ID0gdmFfYXJnIChhcmdzLCB1bnNpZ25lZCBpbnQpOworKwlicmVhazsKKysgICAgICBjYXNlIFRZUEVfTE9OR0lOVDoKKysJYXAtPmEuYV9sb25naW50ID0gdmFfYXJnIChhcmdzLCBsb25nIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9VTE9OR0lOVDoKKysJYXAtPmEuYV91bG9uZ2ludCA9IHZhX2FyZyAoYXJncywgdW5zaWduZWQgbG9uZyBpbnQpOworKwlicmVhazsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysgICAgICBjYXNlIFRZUEVfTE9OR0xPTkdJTlQ6CisrCWFwLT5hLmFfbG9uZ2xvbmdpbnQgPSB2YV9hcmcgKGFyZ3MsIGxvbmcgbG9uZyBpbnQpOworKwlicmVhazsKKysgICAgICBjYXNlIFRZUEVfVUxPTkdMT05HSU5UOgorKwlhcC0+YS5hX3Vsb25nbG9uZ2ludCA9IHZhX2FyZyAoYXJncywgdW5zaWduZWQgbG9uZyBsb25nIGludCk7CisrCWJyZWFrOworKyNlbmRpZgorKyAgICAgIGNhc2UgVFlQRV9ET1VCTEU6CisrCWFwLT5hLmFfZG91YmxlID0gdmFfYXJnIChhcmdzLCBkb3VibGUpOworKwlicmVhazsKKysjaWZkZWYgSEFWRV9MT05HX0RPVUJMRQorKyAgICAgIGNhc2UgVFlQRV9MT05HRE9VQkxFOgorKwlhcC0+YS5hX2xvbmdkb3VibGUgPSB2YV9hcmcgKGFyZ3MsIGxvbmcgZG91YmxlKTsKKysJYnJlYWs7CisrI2VuZGlmCisrICAgICAgY2FzZSBUWVBFX0NIQVI6CisrCWFwLT5hLmFfY2hhciA9IHZhX2FyZyAoYXJncywgaW50KTsKKysJYnJlYWs7CisrI2lmZGVmIEhBVkVfV0lOVF9UCisrICAgICAgY2FzZSBUWVBFX1dJREVfQ0hBUjoKKysJYXAtPmEuYV93aWRlX2NoYXIgPSB2YV9hcmcgKGFyZ3MsIHdpbnRfdCk7CisrCWJyZWFrOworKyNlbmRpZgorKyAgICAgIGNhc2UgVFlQRV9TVFJJTkc6CisrCWFwLT5hLmFfc3RyaW5nID0gdmFfYXJnIChhcmdzLCBjb25zdCBjaGFyICopOworKwlicmVhazsKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrICAgICAgY2FzZSBUWVBFX1dJREVfU1RSSU5HOgorKwlhcC0+YS5hX3dpZGVfc3RyaW5nID0gdmFfYXJnIChhcmdzLCBjb25zdCB3Y2hhcl90ICopOworKwlicmVhazsKKysjZW5kaWYKKysgICAgICBjYXNlIFRZUEVfUE9JTlRFUjoKKysJYXAtPmEuYV9wb2ludGVyID0gdmFfYXJnIChhcmdzLCB2b2lkICopOworKwlicmVhazsKKysgICAgICBjYXNlIFRZUEVfQ09VTlRfU0NIQVJfUE9JTlRFUjoKKysJYXAtPmEuYV9jb3VudF9zY2hhcl9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBzaWduZWQgY2hhciAqKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX0NPVU5UX1NIT1JUX1BPSU5URVI6CisrCWFwLT5hLmFfY291bnRfc2hvcnRfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgc2hvcnQgKik7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9JTlRfUE9JTlRFUjoKKysJYXAtPmEuYV9jb3VudF9pbnRfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgaW50ICopOworKwlicmVhazsKKysgICAgICBjYXNlIFRZUEVfQ09VTlRfTE9OR0lOVF9QT0lOVEVSOgorKwlhcC0+YS5hX2NvdW50X2xvbmdpbnRfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgbG9uZyBpbnQgKik7CisrCWJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9MT05HTE9OR0lOVF9QT0lOVEVSOgorKwlhcC0+YS5hX2NvdW50X2xvbmdsb25naW50X3BvaW50ZXIgPSB2YV9hcmcgKGFyZ3MsIGxvbmcgbG9uZyBpbnQgKik7CisrCWJyZWFrOworKyNlbmRpZgorKyAgICAgIGRlZmF1bHQ6CisrCS8qIFVua25vd24gdHlwZS4gICovCisrCXJldHVybiAtMTsKKysgICAgICB9CisrICByZXR1cm4gMDsKKyt9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcHJpbnRmLWFyZ3MuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wcmludGYtYXJncy5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjAxNzEwNjk2IC0wNDAwCitAQCAtMCwwICsxLDEzNyBAQAorKy8qIERlY29tcG9zZWQgcHJpbnRmIGFyZ3VtZW50IGxpc3QuCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX1BSSU5URl9BUkdTX0gKKysjZGVmaW5lIF9QUklOVEZfQVJHU19ICisrCisrLyogR2V0IHNpemVfdC4gICovCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKy8qIEdldCB3Y2hhcl90LiAgKi8KKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrIyBpbmNsdWRlIDxzdGRkZWYuaD4KKysjZW5kaWYKKysKKysvKiBHZXQgd2ludF90LiAgKi8KKysjaWZkZWYgSEFWRV9XSU5UX1QKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrI2VuZGlmCisrCisrLyogR2V0IHZhX2xpc3QuICAqLworKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysKKysKKysvKiBBcmd1bWVudCB0eXBlcyAqLworK3R5cGVkZWYgZW51bQorK3sKKysgIFRZUEVfTk9ORSwKKysgIFRZUEVfU0NIQVIsCisrICBUWVBFX1VDSEFSLAorKyAgVFlQRV9TSE9SVCwKKysgIFRZUEVfVVNIT1JULAorKyAgVFlQRV9JTlQsCisrICBUWVBFX1VJTlQsCisrICBUWVBFX0xPTkdJTlQsCisrICBUWVBFX1VMT05HSU5ULAorKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgVFlQRV9MT05HTE9OR0lOVCwKKysgIFRZUEVfVUxPTkdMT05HSU5ULAorKyNlbmRpZgorKyAgVFlQRV9ET1VCTEUsCisrI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKKysgIFRZUEVfTE9OR0RPVUJMRSwKKysjZW5kaWYKKysgIFRZUEVfQ0hBUiwKKysjaWZkZWYgSEFWRV9XSU5UX1QKKysgIFRZUEVfV0lERV9DSEFSLAorKyNlbmRpZgorKyAgVFlQRV9TVFJJTkcsCisrI2lmZGVmIEhBVkVfV0NIQVJfVAorKyAgVFlQRV9XSURFX1NUUklORywKKysjZW5kaWYKKysgIFRZUEVfUE9JTlRFUiwKKysgIFRZUEVfQ09VTlRfU0NIQVJfUE9JTlRFUiwKKysgIFRZUEVfQ09VTlRfU0hPUlRfUE9JTlRFUiwKKysgIFRZUEVfQ09VTlRfSU5UX1BPSU5URVIsCisrICBUWVBFX0NPVU5UX0xPTkdJTlRfUE9JTlRFUgorKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKywgVFlQRV9DT1VOVF9MT05HTE9OR0lOVF9QT0lOVEVSCisrI2VuZGlmCisrfSBhcmdfdHlwZTsKKysKKysvKiBQb2x5bW9ycGhpYyBhcmd1bWVudCAqLworK3R5cGVkZWYgc3RydWN0CisreworKyAgYXJnX3R5cGUgdHlwZTsKKysgIHVuaW9uCisrICB7CisrICAgIHNpZ25lZCBjaGFyCQkJYV9zY2hhcjsKKysgICAgdW5zaWduZWQgY2hhcgkJYV91Y2hhcjsKKysgICAgc2hvcnQJCQlhX3Nob3J0OworKyAgICB1bnNpZ25lZCBzaG9ydAkJYV91c2hvcnQ7CisrICAgIGludAkJCQlhX2ludDsKKysgICAgdW5zaWduZWQgaW50CQlhX3VpbnQ7CisrICAgIGxvbmcgaW50CQkJYV9sb25naW50OworKyAgICB1bnNpZ25lZCBsb25nIGludAkJYV91bG9uZ2ludDsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysgICAgbG9uZyBsb25nIGludAkJYV9sb25nbG9uZ2ludDsKKysgICAgdW5zaWduZWQgbG9uZyBsb25nIGludAlhX3Vsb25nbG9uZ2ludDsKKysjZW5kaWYKKysgICAgZmxvYXQJCQlhX2Zsb2F0OworKyAgICBkb3VibGUJCQlhX2RvdWJsZTsKKysjaWZkZWYgSEFWRV9MT05HX0RPVUJMRQorKyAgICBsb25nIGRvdWJsZQkJCWFfbG9uZ2RvdWJsZTsKKysjZW5kaWYKKysgICAgaW50CQkJCWFfY2hhcjsKKysjaWZkZWYgSEFWRV9XSU5UX1QKKysgICAgd2ludF90CQkJYV93aWRlX2NoYXI7CisrI2VuZGlmCisrICAgIGNvbnN0IGNoYXIqCQkJYV9zdHJpbmc7CisrI2lmZGVmIEhBVkVfV0NIQVJfVAorKyAgICBjb25zdCB3Y2hhcl90KgkJYV93aWRlX3N0cmluZzsKKysjZW5kaWYKKysgICAgdm9pZCoJCQlhX3BvaW50ZXI7CisrICAgIHNpZ25lZCBjaGFyICoJCWFfY291bnRfc2NoYXJfcG9pbnRlcjsKKysgICAgc2hvcnQgKgkJCWFfY291bnRfc2hvcnRfcG9pbnRlcjsKKysgICAgaW50ICoJCQlhX2NvdW50X2ludF9wb2ludGVyOworKyAgICBsb25nIGludCAqCQkJYV9jb3VudF9sb25naW50X3BvaW50ZXI7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgIGxvbmcgbG9uZyBpbnQgKgkJYV9jb3VudF9sb25nbG9uZ2ludF9wb2ludGVyOworKyNlbmRpZgorKyAgfQorKyAgYTsKKyt9CisrYXJndW1lbnQ7CisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBzaXplX3QgY291bnQ7CisrICBhcmd1bWVudCAqYXJnOworK30KKythcmd1bWVudHM7CisrCisrCisrLyogRmV0Y2ggdGhlIGFyZ3VtZW50cywgcHV0dGluZyB0aGVtIGludG8gYS4gKi8KKysjaWZkZWYgU1RBVElDCisrU1RBVElDCisrI2Vsc2UKKytleHRlcm4KKysjZW5kaWYKKytpbnQgcHJpbnRmX2ZldGNoYXJncyAodmFfbGlzdCBhcmdzLCBhcmd1bWVudHMgKmEpOworKworKyNlbmRpZiAvKiBfUFJJTlRGX0FSR1NfSCAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3ByaW50Zi5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3ByaW50Zi5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjA3NzA5Nzg0IC0wNDAwCitAQCAtMCwwICsxLDM3MSBAQAorKy8qIEZvcm1hdHRlZCBvdXRwdXQgdG8gc3RyaW5ncywgdXNpbmcgUE9TSVgvWFNJIGZvcm1hdCBzdHJpbmdzIHdpdGggcG9zaXRpb25zLgorKyAgIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAwMy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpZmRlZiBfX0dOVUNfXworKyMgZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCisrIyBkZWZpbmUgSEFWRV9BTExPQ0EgMQorKyNlbHNlCisrIyBpZmRlZiBfTVNDX1ZFUgorKyMgIGluY2x1ZGUgPG1hbGxvYy5oPgorKyMgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorKyMgZWxzZQorKyMgIGlmIGRlZmluZWQgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCisrIyAgIGluY2x1ZGUgPGFsbG9jYS5oPgorKyMgIGVsc2UKKysjICAgaWZkZWYgX0FJWAorKyAjcHJhZ21hIGFsbG9jYQorKyMgICBlbHNlCisrIyAgICBpZm5kZWYgYWxsb2NhCisrY2hhciAqYWxsb2NhICgpOworKyMgICAgZW5kaWYKKysjICAgZW5kaWYKKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysKKysjaWYgIUhBVkVfUE9TSVhfUFJJTlRGCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKysvKiBXaGVuIGJ1aWxkaW5nIGEgRExMLCB3ZSBtdXN0IGV4cG9ydCBzb21lIGZ1bmN0aW9ucy4gIE5vdGUgdGhhdCBiZWNhdXNlCisrICAgdGhlIGZ1bmN0aW9ucyBhcmUgb25seSBkZWZpbmVkIGZvciBiaW5hcnkgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgd2UKKysgICBkb24ndCBuZWVkIHRvIHVzZSBfX2RlY2xzcGVjKGRsbGltcG9ydCkgaW4gYW55IGNhc2UuICAqLworKyNpZiBkZWZpbmVkIF9NU0NfVkVSICYmIEJVSUxESU5HX0RMTAorKyMgZGVmaW5lIERMTF9FWFBPUlRFRCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKysjZWxzZQorKyMgZGVmaW5lIERMTF9FWFBPUlRFRAorKyNlbmRpZgorKworKyNkZWZpbmUgU1RBVElDIHN0YXRpYworKworKy8qIERlZmluZSBhdXhpbGlhcnkgZnVuY3Rpb25zIGRlY2xhcmVkIGluICJwcmludGYtYXJncy5oIi4gICovCisrI2luY2x1ZGUgInByaW50Zi1hcmdzLmMiCisrCisrLyogRGVmaW5lIGF1eGlsaWFyeSBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gInByaW50Zi1wYXJzZS5oIi4gICovCisrI2luY2x1ZGUgInByaW50Zi1wYXJzZS5jIgorKworKy8qIERlZmluZSBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gInZhc25wcmludGYuaCIuICAqLworKyNkZWZpbmUgdmFzbnByaW50ZiBsaWJpbnRsX3Zhc25wcmludGYKKysjaW5jbHVkZSAidmFzbnByaW50Zi5jIgorKyNpZiAwIC8qIG5vdCBuZWVkZWQgKi8KKysjZGVmaW5lIGFzbnByaW50ZiBsaWJpbnRsX2FzbnByaW50ZgorKyNpbmNsdWRlICJhc25wcmludGYuYyIKKysjZW5kaWYKKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3ZmcHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorK3sKKysgIGlmIChzdHJjaHIgKGZvcm1hdCwgJyQnKSA9PSBOVUxMKQorKyAgICByZXR1cm4gdmZwcmludGYgKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKKysgIGVsc2UKKysgICAgeworKyAgICAgIHNpemVfdCBsZW5ndGg7CisrICAgICAgY2hhciAqcmVzdWx0ID0gbGliaW50bF92YXNucHJpbnRmIChOVUxMLCAmbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgICAgIGludCByZXR2YWwgPSAtMTsKKysgICAgICBpZiAocmVzdWx0ICE9IE5VTEwpCisrCXsKKysJICBpZiAoZndyaXRlIChyZXN1bHQsIDEsIGxlbmd0aCwgc3RyZWFtKSA9PSBsZW5ndGgpCisrCSAgICByZXR2YWwgPSBsZW5ndGg7CisrCSAgZnJlZSAocmVzdWx0KTsKKysJfQorKyAgICAgIHJldHVybiByZXR2YWw7CisrICAgIH0KKyt9CisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF9mcHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGludCByZXR2YWw7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIHJldHZhbCA9IGxpYmludGxfdmZwcmludGYgKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3ZwcmludGYgKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorK3sKKysgIHJldHVybiBsaWJpbnRsX3ZmcHJpbnRmIChzdGRvdXQsIGZvcm1hdCwgYXJncyk7CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfcHJpbnRmIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyt7CisrICB2YV9saXN0IGFyZ3M7CisrICBpbnQgcmV0dmFsOworKworKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisrICByZXR2YWwgPSBsaWJpbnRsX3ZwcmludGYgKGZvcm1hdCwgYXJncyk7CisrICB2YV9lbmQgKGFyZ3MpOworKyAgcmV0dXJuIHJldHZhbDsKKyt9CisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF92c3ByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyt7CisrICBpZiAoc3RyY2hyIChmb3JtYXQsICckJykgPT0gTlVMTCkKKysgICAgcmV0dXJuIHZzcHJpbnRmIChyZXN1bHRidWYsIGZvcm1hdCwgYXJncyk7CisrICBlbHNlCisrICAgIHsKKysgICAgICBzaXplX3QgbGVuZ3RoID0gKHNpemVfdCkgfjAgLyAoNCAqIHNpemVvZiAoY2hhcikpOworKyAgICAgIGNoYXIgKnJlc3VsdCA9IGxpYmludGxfdmFzbnByaW50ZiAocmVzdWx0YnVmLCAmbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0YnVmKQorKwl7CisrCSAgZnJlZSAocmVzdWx0KTsKKysJICByZXR1cm4gLTE7CisrCX0KKysgICAgICBlbHNlCisrCXJldHVybiBsZW5ndGg7CisrICAgIH0KKyt9CisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF9zcHJpbnRmIChjaGFyICpyZXN1bHRidWYsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGludCByZXR2YWw7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIHJldHZhbCA9IGxpYmludGxfdnNwcmludGYgKHJlc3VsdGJ1ZiwgZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKysjaWYgSEFWRV9TTlBSSU5URgorKworKyMgaWYgSEFWRV9ERUNMX19TTlBSSU5URgorKyAgIC8qIFdpbmRvd3MuICAqLworKyMgIGRlZmluZSBzeXN0ZW1fdnNucHJpbnRmIF92c25wcmludGYKKysjIGVsc2UKKysgICAvKiBVbml4LiAgKi8KKysjICBkZWZpbmUgc3lzdGVtX3ZzbnByaW50ZiB2c25wcmludGYKKysjIGVuZGlmCisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF92c25wcmludGYgKGNoYXIgKnJlc3VsdGJ1Ziwgc2l6ZV90IGxlbmd0aCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgaWYgKHN0cmNociAoZm9ybWF0LCAnJCcpID09IE5VTEwpCisrICAgIHJldHVybiBzeXN0ZW1fdnNucHJpbnRmIChyZXN1bHRidWYsIGxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgIGVsc2UKKysgICAgeworKyAgICAgIHNpemVfdCBtYXhsZW5ndGggPSBsZW5ndGg7CisrICAgICAgY2hhciAqcmVzdWx0ID0gbGliaW50bF92YXNucHJpbnRmIChyZXN1bHRidWYsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYpCisrCXsKKysJICBpZiAobWF4bGVuZ3RoID4gMCkKKysJICAgIHsKKysJICAgICAgaWYgKGxlbmd0aCA8IG1heGxlbmd0aCkKKysJCWFib3J0ICgpOworKwkgICAgICBtZW1jcHkgKHJlc3VsdGJ1ZiwgcmVzdWx0LCBtYXhsZW5ndGggLSAxKTsKKysJICAgICAgcmVzdWx0YnVmW21heGxlbmd0aCAtIDFdID0gJ1wwJzsKKysJICAgIH0KKysJICBmcmVlIChyZXN1bHQpOworKwkgIHJldHVybiAtMTsKKysJfQorKyAgICAgIGVsc2UKKysJcmV0dXJuIGxlbmd0aDsKKysgICAgfQorK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3NucHJpbnRmIChjaGFyICpyZXN1bHRidWYsIHNpemVfdCBsZW5ndGgsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGludCByZXR2YWw7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIHJldHZhbCA9IGxpYmludGxfdnNucHJpbnRmIChyZXN1bHRidWYsIGxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKysjZW5kaWYKKysKKysjaWYgSEFWRV9BU1BSSU5URgorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfdmFzcHJpbnRmIChjaGFyICoqcmVzdWx0cCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgc2l6ZV90IGxlbmd0aDsKKysgIGNoYXIgKnJlc3VsdCA9IGxpYmludGxfdmFzbnByaW50ZiAoTlVMTCwgJmxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgIGlmIChyZXN1bHQgPT0gTlVMTCkKKysgICAgcmV0dXJuIC0xOworKyAgKnJlc3VsdHAgPSByZXN1bHQ7CisrICByZXR1cm4gbGVuZ3RoOworK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX2FzcHJpbnRmIChjaGFyICoqcmVzdWx0cCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92YXNwcmludGYgKHJlc3VsdHAsIGZvcm1hdCwgYXJncyk7CisrICB2YV9lbmQgKGFyZ3MpOworKyAgcmV0dXJuIHJldHZhbDsKKyt9CisrCisrI2VuZGlmCisrCisrI2lmIEhBVkVfRldQUklOVEYKKysKKysjaW5jbHVkZSA8d2NoYXIuaD4KKysKKysjZGVmaW5lIFdJREVfQ0hBUl9WRVJTSU9OIDEKKysKKysvKiBEZWZpbmUgYXV4aWxpYXJ5IGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAid3ByaW50Zi1wYXJzZS5oIi4gICovCisrI2luY2x1ZGUgInByaW50Zi1wYXJzZS5jIgorKworKy8qIERlZmluZSBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gInZhc25wcmludGYuaCIuICAqLworKyNkZWZpbmUgdmFzbndwcmludGYgbGliaW50bF92YXNud3ByaW50ZgorKyNpbmNsdWRlICJ2YXNucHJpbnRmLmMiCisrI2lmIDAgLyogbm90IG5lZWRlZCAqLworKyNkZWZpbmUgYXNud3ByaW50ZiBsaWJpbnRsX2FzbndwcmludGYKKysjaW5jbHVkZSAiYXNucHJpbnRmLmMiCisrI2VuZGlmCisrCisrIyBpZiBIQVZFX0RFQ0xfX1NOV1BSSU5URgorKyAgIC8qIFdpbmRvd3MuICAqLworKyMgIGRlZmluZSBzeXN0ZW1fdnN3cHJpbnRmIF92c253cHJpbnRmCisrIyBlbHNlCisrICAgLyogVW5peC4gICovCisrIyAgZGVmaW5lIHN5c3RlbV92c3dwcmludGYgdnN3cHJpbnRmCisrIyBlbmRpZgorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfdmZ3cHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorK3sKKysgIGlmICh3Y3NjaHIgKGZvcm1hdCwgJyQnKSA9PSBOVUxMKQorKyAgICByZXR1cm4gdmZ3cHJpbnRmIChzdHJlYW0sIGZvcm1hdCwgYXJncyk7CisrICBlbHNlCisrICAgIHsKKysgICAgICBzaXplX3QgbGVuZ3RoOworKyAgICAgIHdjaGFyX3QgKnJlc3VsdCA9IGxpYmludGxfdmFzbndwcmludGYgKE5VTEwsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICAgICAgaW50IHJldHZhbCA9IC0xOworKyAgICAgIGlmIChyZXN1bHQgIT0gTlVMTCkKKysJeworKwkgIHNpemVfdCBpOworKwkgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKysJICAgIGlmIChmcHV0d2MgKHJlc3VsdFtpXSwgc3RyZWFtKSA9PSBXRU9GKQorKwkgICAgICBicmVhazsKKysJICBpZiAoaSA9PSBsZW5ndGgpCisrCSAgICByZXR2YWwgPSBsZW5ndGg7CisrCSAgZnJlZSAocmVzdWx0KTsKKysJfQorKyAgICAgIHJldHVybiByZXR2YWw7CisrICAgIH0KKyt9CisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF9md3ByaW50ZiAoRklMRSAqc3RyZWFtLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIC4uLikKKyt7CisrICB2YV9saXN0IGFyZ3M7CisrICBpbnQgcmV0dmFsOworKworKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisrICByZXR2YWwgPSBsaWJpbnRsX3Zmd3ByaW50ZiAoc3RyZWFtLCBmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysgIHJldHVybiByZXR2YWw7CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfdndwcmludGYgKGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorK3sKKysgIHJldHVybiBsaWJpbnRsX3Zmd3ByaW50ZiAoc3Rkb3V0LCBmb3JtYXQsIGFyZ3MpOworK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3dwcmludGYgKGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGludCByZXR2YWw7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIHJldHZhbCA9IGxpYmludGxfdndwcmludGYgKGZvcm1hdCwgYXJncyk7CisrICB2YV9lbmQgKGFyZ3MpOworKyAgcmV0dXJuIHJldHZhbDsKKyt9CisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF92c3dwcmludGYgKHdjaGFyX3QgKnJlc3VsdGJ1Ziwgc2l6ZV90IGxlbmd0aCwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgaWYgKHdjc2NociAoZm9ybWF0LCAnJCcpID09IE5VTEwpCisrICAgIHJldHVybiBzeXN0ZW1fdnN3cHJpbnRmIChyZXN1bHRidWYsIGxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgIGVsc2UKKysgICAgeworKyAgICAgIHNpemVfdCBtYXhsZW5ndGggPSBsZW5ndGg7CisrICAgICAgd2NoYXJfdCAqcmVzdWx0ID0gbGliaW50bF92YXNud3ByaW50ZiAocmVzdWx0YnVmLCAmbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0YnVmKQorKwl7CisrCSAgaWYgKG1heGxlbmd0aCA+IDApCisrCSAgICB7CisrCSAgICAgIGlmIChsZW5ndGggPCBtYXhsZW5ndGgpCisrCQlhYm9ydCAoKTsKKysJICAgICAgbWVtY3B5IChyZXN1bHRidWYsIHJlc3VsdCwgKG1heGxlbmd0aCAtIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CisrCSAgICAgIHJlc3VsdGJ1ZlttYXhsZW5ndGggLSAxXSA9IDA7CisrCSAgICB9CisrCSAgZnJlZSAocmVzdWx0KTsKKysJICByZXR1cm4gLTE7CisrCX0KKysgICAgICBlbHNlCisrCXJldHVybiBsZW5ndGg7CisrICAgIH0KKyt9CisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF9zd3ByaW50ZiAod2NoYXJfdCAqcmVzdWx0YnVmLCBzaXplX3QgbGVuZ3RoLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIC4uLikKKyt7CisrICB2YV9saXN0IGFyZ3M7CisrICBpbnQgcmV0dmFsOworKworKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisrICByZXR2YWwgPSBsaWJpbnRsX3Zzd3ByaW50ZiAocmVzdWx0YnVmLCBsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICB2YV9lbmQgKGFyZ3MpOworKyAgcmV0dXJuIHJldHZhbDsKKyt9CisrCisrI2VuZGlmCisrCisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcHJpbnRmLXBhcnNlLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcHJpbnRmLXBhcnNlLmMJMjAwNC0wOS0xMiAxNDo0MDozNC42MjI3MDc1MDQgLTA0MDAKK0BAIC0wLDAgKzEsNTM3IEBACisrLyogRm9ybWF0dGVkIG91dHB1dCB0byBzdHJpbmdzLgorKyAgIENvcHlyaWdodCAoQykgMTk5OS0yMDAwLCAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKysjaWYgV0lERV9DSEFSX1ZFUlNJT04KKysjIGluY2x1ZGUgIndwcmludGYtcGFyc2UuaCIKKysjZWxzZQorKyMgaW5jbHVkZSAicHJpbnRmLXBhcnNlLmgiCisrI2VuZGlmCisrCisrLyogR2V0IHNpemVfdCwgTlVMTC4gICovCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKy8qIEdldCBpbnRtYXhfdC4gICovCisrI2lmIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYCisrIyBpbmNsdWRlIDxzdGRpbnQuaD4KKysjZW5kaWYKKysjaWYgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWAorKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKysjZW5kaWYKKysKKysvKiBtYWxsb2MoKSwgcmVhbGxvYygpLCBmcmVlKCkuICAqLworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysKKysvKiBDaGVja2VkIHNpemVfdCBjb21wdXRhdGlvbnMuICAqLworKyNpbmNsdWRlICJ4c2l6ZS5oIgorKworKyNpZiBXSURFX0NIQVJfVkVSU0lPTgorKyMgZGVmaW5lIFBSSU5URl9QQVJTRSB3cHJpbnRmX3BhcnNlCisrIyBkZWZpbmUgQ0hBUl9UIHdjaGFyX3QKKysjIGRlZmluZSBESVJFQ1RJVkUgd2NoYXJfdF9kaXJlY3RpdmUKKysjIGRlZmluZSBESVJFQ1RJVkVTIHdjaGFyX3RfZGlyZWN0aXZlcworKyNlbHNlCisrIyBkZWZpbmUgUFJJTlRGX1BBUlNFIHByaW50Zl9wYXJzZQorKyMgZGVmaW5lIENIQVJfVCBjaGFyCisrIyBkZWZpbmUgRElSRUNUSVZFIGNoYXJfZGlyZWN0aXZlCisrIyBkZWZpbmUgRElSRUNUSVZFUyBjaGFyX2RpcmVjdGl2ZXMKKysjZW5kaWYKKysKKysjaWZkZWYgU1RBVElDCisrU1RBVElDCisrI2VuZGlmCisraW50CisrUFJJTlRGX1BBUlNFIChjb25zdCBDSEFSX1QgKmZvcm1hdCwgRElSRUNUSVZFUyAqZCwgYXJndW1lbnRzICphKQorK3sKKysgIGNvbnN0IENIQVJfVCAqY3AgPSBmb3JtYXQ7CQkvKiBwb2ludGVyIGludG8gZm9ybWF0ICovCisrICBzaXplX3QgYXJnX3Bvc24gPSAwOwkJLyogbnVtYmVyIG9mIHJlZ3VsYXIgYXJndW1lbnRzIGNvbnN1bWVkICovCisrICBzaXplX3QgZF9hbGxvY2F0ZWQ7CQkJLyogYWxsb2NhdGVkIGVsZW1lbnRzIG9mIGQtPmRpciAqLworKyAgc2l6ZV90IGFfYWxsb2NhdGVkOwkJCS8qIGFsbG9jYXRlZCBlbGVtZW50cyBvZiBhLT5hcmcgKi8KKysgIHNpemVfdCBtYXhfd2lkdGhfbGVuZ3RoID0gMDsKKysgIHNpemVfdCBtYXhfcHJlY2lzaW9uX2xlbmd0aCA9IDA7CisrCisrICBkLT5jb3VudCA9IDA7CisrICBkX2FsbG9jYXRlZCA9IDE7CisrICBkLT5kaXIgPSBtYWxsb2MgKGRfYWxsb2NhdGVkICogc2l6ZW9mIChESVJFQ1RJVkUpKTsKKysgIGlmIChkLT5kaXIgPT0gTlVMTCkKKysgICAgLyogT3V0IG9mIG1lbW9yeS4gICovCisrICAgIHJldHVybiAtMTsKKysKKysgIGEtPmNvdW50ID0gMDsKKysgIGFfYWxsb2NhdGVkID0gMDsKKysgIGEtPmFyZyA9IE5VTEw7CisrCisrI2RlZmluZSBSRUdJU1RFUl9BUkcoX2luZGV4XyxfdHlwZV8pIFwKKysgIHsJCQkJCQkJCQlcCisrICAgIHNpemVfdCBuID0gKF9pbmRleF8pOwkJCQkJCVwKKysgICAgaWYgKG4gPj0gYV9hbGxvY2F0ZWQpCQkJCQkJXAorKyAgICAgIHsJCQkJCQkJCQlcCisrCXNpemVfdCBtZW1vcnlfc2l6ZTsJCQkJCQlcCisrCWFyZ3VtZW50ICptZW1vcnk7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysJYV9hbGxvY2F0ZWQgPSB4dGltZXMgKGFfYWxsb2NhdGVkLCAyKTsJCQkJXAorKwlpZiAoYV9hbGxvY2F0ZWQgPD0gbikJCQkJCQlcCisrCSAgYV9hbGxvY2F0ZWQgPSB4c3VtIChuLCAxKTsJCQkJCVwKKysJbWVtb3J5X3NpemUgPSB4dGltZXMgKGFfYWxsb2NhdGVkLCBzaXplb2YgKGFyZ3VtZW50KSk7CQlcCisrCWlmIChzaXplX292ZXJmbG93X3AgKG1lbW9yeV9zaXplKSkJCQkJXAorKwkgIC8qIE92ZXJmbG93LCB3b3VsZCBsZWFkIHRvIG91dCBvZiBtZW1vcnkuICAqLwkJCVwKKysJICBnb3RvIGVycm9yOwkJCQkJCQlcCisrCW1lbW9yeSA9IChhLT5hcmcJCQkJCQlcCisrCQkgID8gcmVhbGxvYyAoYS0+YXJnLCBtZW1vcnlfc2l6ZSkJCQlcCisrCQkgIDogbWFsbG9jIChtZW1vcnlfc2l6ZSkpOwkJCQlcCisrCWlmIChtZW1vcnkgPT0gTlVMTCkJCQkJCQlcCisrCSAgLyogT3V0IG9mIG1lbW9yeS4gICovCQkJCQkJXAorKwkgIGdvdG8gZXJyb3I7CQkJCQkJCVwKKysJYS0+YXJnID0gbWVtb3J5OwkJCQkJCVwKKysgICAgICB9CQkJCQkJCQkJXAorKyAgICB3aGlsZSAoYS0+Y291bnQgPD0gbikJCQkJCQlcCisrICAgICAgYS0+YXJnW2EtPmNvdW50KytdLnR5cGUgPSBUWVBFX05PTkU7CQkJCVwKKysgICAgaWYgKGEtPmFyZ1tuXS50eXBlID09IFRZUEVfTk9ORSkJCQkJCVwKKysgICAgICBhLT5hcmdbbl0udHlwZSA9IChfdHlwZV8pOwkJCQkJXAorKyAgICBlbHNlIGlmIChhLT5hcmdbbl0udHlwZSAhPSAoX3R5cGVfKSkJCQkJXAorKyAgICAgIC8qIEFtYmlndW91cyB0eXBlIGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50LiAgKi8JCQlcCisrICAgICAgZ290byBlcnJvcjsJCQkJCQkJXAorKyAgfQorKworKyAgd2hpbGUgKCpjcCAhPSAnXDAnKQorKyAgICB7CisrICAgICAgQ0hBUl9UIGMgPSAqY3ArKzsKKysgICAgICBpZiAoYyA9PSAnJScpCisrCXsKKysJICBzaXplX3QgYXJnX2luZGV4ID0gQVJHX05PTkU7CisrCSAgRElSRUNUSVZFICpkcCA9ICZkLT5kaXJbZC0+Y291bnRdOy8qIHBvaW50ZXIgdG8gbmV4dCBkaXJlY3RpdmUgKi8KKysKKysJICAvKiBJbml0aWFsaXplIHRoZSBuZXh0IGRpcmVjdGl2ZS4gICovCisrCSAgZHAtPmRpcl9zdGFydCA9IGNwIC0gMTsKKysJICBkcC0+ZmxhZ3MgPSAwOworKwkgIGRwLT53aWR0aF9zdGFydCA9IE5VTEw7CisrCSAgZHAtPndpZHRoX2VuZCA9IE5VTEw7CisrCSAgZHAtPndpZHRoX2FyZ19pbmRleCA9IEFSR19OT05FOworKwkgIGRwLT5wcmVjaXNpb25fc3RhcnQgPSBOVUxMOworKwkgIGRwLT5wcmVjaXNpb25fZW5kID0gTlVMTDsKKysJICBkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA9IEFSR19OT05FOworKwkgIGRwLT5hcmdfaW5kZXggPSBBUkdfTk9ORTsKKysKKysJICAvKiBUZXN0IGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50LiAgKi8KKysJICBpZiAoKmNwID49ICcwJyAmJiAqY3AgPD0gJzknKQorKwkgICAgeworKwkgICAgICBjb25zdCBDSEFSX1QgKm5wOworKworKwkgICAgICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKKysJCTsKKysJICAgICAgaWYgKCpucCA9PSAnJCcpCisrCQl7CisrCQkgIHNpemVfdCBuID0gMDsKKysKKysJCSAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCisrCQkgICAgbiA9IHhzdW0gKHh0aW1lcyAobiwgMTApLCAqbnAgLSAnMCcpOworKwkJICBpZiAobiA9PSAwKQorKwkJICAgIC8qIFBvc2l0aW9uYWwgYXJndW1lbnQgMC4gICovCisrCQkgICAgZ290byBlcnJvcjsKKysJCSAgaWYgKHNpemVfb3ZlcmZsb3dfcCAobikpCisrCQkgICAgLyogbiB0b28gbGFyZ2UsIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeSBsYXRlci4gICovCisrCQkgICAgZ290byBlcnJvcjsKKysJCSAgYXJnX2luZGV4ID0gbiAtIDE7CisrCQkgIGNwID0gbnAgKyAxOworKwkJfQorKwkgICAgfQorKworKwkgIC8qIFJlYWQgdGhlIGZsYWdzLiAgKi8KKysJICBmb3IgKDs7KQorKwkgICAgeworKwkgICAgICBpZiAoKmNwID09ICdcJycpCisrCQl7CisrCQkgIGRwLT5mbGFncyB8PSBGTEFHX0dST1VQOworKwkJICBjcCsrOworKwkJfQorKwkgICAgICBlbHNlIGlmICgqY3AgPT0gJy0nKQorKwkJeworKwkJICBkcC0+ZmxhZ3MgfD0gRkxBR19MRUZUOworKwkJICBjcCsrOworKwkJfQorKwkgICAgICBlbHNlIGlmICgqY3AgPT0gJysnKQorKwkJeworKwkJICBkcC0+ZmxhZ3MgfD0gRkxBR19TSE9XU0lHTjsKKysJCSAgY3ArKzsKKysJCX0KKysJICAgICAgZWxzZSBpZiAoKmNwID09ICcgJykKKysJCXsKKysJCSAgZHAtPmZsYWdzIHw9IEZMQUdfU1BBQ0U7CisrCQkgIGNwKys7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKCpjcCA9PSAnIycpCisrCQl7CisrCQkgIGRwLT5mbGFncyB8PSBGTEFHX0FMVDsKKysJCSAgY3ArKzsKKysJCX0KKysJICAgICAgZWxzZSBpZiAoKmNwID09ICcwJykKKysJCXsKKysJCSAgZHAtPmZsYWdzIHw9IEZMQUdfWkVSTzsKKysJCSAgY3ArKzsKKysJCX0KKysJICAgICAgZWxzZQorKwkJYnJlYWs7CisrCSAgICB9CisrCisrCSAgLyogUGFyc2UgdGhlIGZpZWxkIHdpZHRoLiAgKi8KKysJICBpZiAoKmNwID09ICcqJykKKysJICAgIHsKKysJICAgICAgZHAtPndpZHRoX3N0YXJ0ID0gY3A7CisrCSAgICAgIGNwKys7CisrCSAgICAgIGRwLT53aWR0aF9lbmQgPSBjcDsKKysJICAgICAgaWYgKG1heF93aWR0aF9sZW5ndGggPCAxKQorKwkJbWF4X3dpZHRoX2xlbmd0aCA9IDE7CisrCisrCSAgICAgIC8qIFRlc3QgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQuICAqLworKwkgICAgICBpZiAoKmNwID49ICcwJyAmJiAqY3AgPD0gJzknKQorKwkJeworKwkJICBjb25zdCBDSEFSX1QgKm5wOworKworKwkJICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKKysJCSAgICA7CisrCQkgIGlmICgqbnAgPT0gJyQnKQorKwkJICAgIHsKKysJCSAgICAgIHNpemVfdCBuID0gMDsKKysKKysJCSAgICAgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKQorKwkJCW4gPSB4c3VtICh4dGltZXMgKG4sIDEwKSwgKm5wIC0gJzAnKTsKKysJCSAgICAgIGlmIChuID09IDApCisrCQkJLyogUG9zaXRpb25hbCBhcmd1bWVudCAwLiAgKi8KKysJCQlnb3RvIGVycm9yOworKwkJICAgICAgaWYgKHNpemVfb3ZlcmZsb3dfcCAobikpCisrCQkJLyogbiB0b28gbGFyZ2UsIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeSBsYXRlci4gICovCisrCQkJZ290byBlcnJvcjsKKysJCSAgICAgIGRwLT53aWR0aF9hcmdfaW5kZXggPSBuIC0gMTsKKysJCSAgICAgIGNwID0gbnAgKyAxOworKwkJICAgIH0KKysJCX0KKysJICAgICAgaWYgKGRwLT53aWR0aF9hcmdfaW5kZXggPT0gQVJHX05PTkUpCisrCQl7CisrCQkgIGRwLT53aWR0aF9hcmdfaW5kZXggPSBhcmdfcG9zbisrOworKwkJICBpZiAoZHAtPndpZHRoX2FyZ19pbmRleCA9PSBBUkdfTk9ORSkKKysJCSAgICAvKiBhcmdfcG9zbiB3cmFwcGVkIGFyb3VuZC4gICovCisrCQkgICAgZ290byBlcnJvcjsKKysJCX0KKysJICAgICAgUkVHSVNURVJfQVJHIChkcC0+d2lkdGhfYXJnX2luZGV4LCBUWVBFX0lOVCk7CisrCSAgICB9CisrCSAgZWxzZSBpZiAoKmNwID49ICcwJyAmJiAqY3AgPD0gJzknKQorKwkgICAgeworKwkgICAgICBzaXplX3Qgd2lkdGhfbGVuZ3RoOworKworKwkgICAgICBkcC0+d2lkdGhfc3RhcnQgPSBjcDsKKysJICAgICAgZm9yICg7ICpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JzsgY3ArKykKKysJCTsKKysJICAgICAgZHAtPndpZHRoX2VuZCA9IGNwOworKwkgICAgICB3aWR0aF9sZW5ndGggPSBkcC0+d2lkdGhfZW5kIC0gZHAtPndpZHRoX3N0YXJ0OworKwkgICAgICBpZiAobWF4X3dpZHRoX2xlbmd0aCA8IHdpZHRoX2xlbmd0aCkKKysJCW1heF93aWR0aF9sZW5ndGggPSB3aWR0aF9sZW5ndGg7CisrCSAgICB9CisrCisrCSAgLyogUGFyc2UgdGhlIHByZWNpc2lvbi4gICovCisrCSAgaWYgKCpjcCA9PSAnLicpCisrCSAgICB7CisrCSAgICAgIGNwKys7CisrCSAgICAgIGlmICgqY3AgPT0gJyonKQorKwkJeworKwkJICBkcC0+cHJlY2lzaW9uX3N0YXJ0ID0gY3AgLSAxOworKwkJICBjcCsrOworKwkJICBkcC0+cHJlY2lzaW9uX2VuZCA9IGNwOworKwkJICBpZiAobWF4X3ByZWNpc2lvbl9sZW5ndGggPCAyKQorKwkJICAgIG1heF9wcmVjaXNpb25fbGVuZ3RoID0gMjsKKysKKysJCSAgLyogVGVzdCBmb3IgcG9zaXRpb25hbCBhcmd1bWVudC4gICovCisrCQkgIGlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCisrCQkgICAgeworKwkJICAgICAgY29uc3QgQ0hBUl9UICpucDsKKysKKysJCSAgICAgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKQorKwkJCTsKKysJCSAgICAgIGlmICgqbnAgPT0gJyQnKQorKwkJCXsKKysJCQkgIHNpemVfdCBuID0gMDsKKysKKysJCQkgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKQorKwkJCSAgICBuID0geHN1bSAoeHRpbWVzIChuLCAxMCksICpucCAtICcwJyk7CisrCQkJICBpZiAobiA9PSAwKQorKwkJCSAgICAvKiBQb3NpdGlvbmFsIGFyZ3VtZW50IDAuICAqLworKwkJCSAgICBnb3RvIGVycm9yOworKwkJCSAgaWYgKHNpemVfb3ZlcmZsb3dfcCAobikpCisrCQkJICAgIC8qIG4gdG9vIGxhcmdlLCB3b3VsZCBsZWFkIHRvIG91dCBvZiBtZW1vcnkKKysJCQkgICAgICAgbGF0ZXIuICAqLworKwkJCSAgICBnb3RvIGVycm9yOworKwkJCSAgZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggPSBuIC0gMTsKKysJCQkgIGNwID0gbnAgKyAxOworKwkJCX0KKysJCSAgICB9CisrCQkgIGlmIChkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA9PSBBUkdfTk9ORSkKKysJCSAgICB7CisrCQkgICAgICBkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA9IGFyZ19wb3NuKys7CisrCQkgICAgICBpZiAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggPT0gQVJHX05PTkUpCisrCQkJLyogYXJnX3Bvc24gd3JhcHBlZCBhcm91bmQuICAqLworKwkJCWdvdG8gZXJyb3I7CisrCQkgICAgfQorKwkJICBSRUdJU1RFUl9BUkcgKGRwLT5wcmVjaXNpb25fYXJnX2luZGV4LCBUWVBFX0lOVCk7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgc2l6ZV90IHByZWNpc2lvbl9sZW5ndGg7CisrCisrCQkgIGRwLT5wcmVjaXNpb25fc3RhcnQgPSBjcCAtIDE7CisrCQkgIGZvciAoOyAqY3AgPj0gJzAnICYmICpjcCA8PSAnOSc7IGNwKyspCisrCQkgICAgOworKwkJICBkcC0+cHJlY2lzaW9uX2VuZCA9IGNwOworKwkJICBwcmVjaXNpb25fbGVuZ3RoID0gZHAtPnByZWNpc2lvbl9lbmQgLSBkcC0+cHJlY2lzaW9uX3N0YXJ0OworKwkJICBpZiAobWF4X3ByZWNpc2lvbl9sZW5ndGggPCBwcmVjaXNpb25fbGVuZ3RoKQorKwkJICAgIG1heF9wcmVjaXNpb25fbGVuZ3RoID0gcHJlY2lzaW9uX2xlbmd0aDsKKysJCX0KKysJICAgIH0KKysKKysJICB7CisrCSAgICBhcmdfdHlwZSB0eXBlOworKworKwkgICAgLyogUGFyc2UgYXJndW1lbnQgdHlwZS9zaXplIHNwZWNpZmllcnMuICAqLworKwkgICAgeworKwkgICAgICBpbnQgZmxhZ3MgPSAwOworKworKwkgICAgICBmb3IgKDs7KQorKwkJeworKwkJICBpZiAoKmNwID09ICdoJykKKysJCSAgICB7CisrCQkgICAgICBmbGFncyB8PSAoMSA8PCAoZmxhZ3MgJiAxKSk7CisrCQkgICAgICBjcCsrOworKwkJICAgIH0KKysJCSAgZWxzZSBpZiAoKmNwID09ICdMJykKKysJCSAgICB7CisrCQkgICAgICBmbGFncyB8PSA0OworKwkJICAgICAgY3ArKzsKKysJCSAgICB9CisrCQkgIGVsc2UgaWYgKCpjcCA9PSAnbCcpCisrCQkgICAgeworKwkJICAgICAgZmxhZ3MgKz0gODsKKysJCSAgICAgIGNwKys7CisrCQkgICAgfQorKyNpZmRlZiBIQVZFX0lOVE1BWF9UCisrCQkgIGVsc2UgaWYgKCpjcCA9PSAnaicpCisrCQkgICAgeworKwkJICAgICAgaWYgKHNpemVvZiAoaW50bWF4X3QpID4gc2l6ZW9mIChsb25nKSkKKysJCQl7CisrCQkJICAvKiBpbnRtYXhfdCA9IGxvbmcgbG9uZyAqLworKwkJCSAgZmxhZ3MgKz0gMTY7CisrCQkJfQorKwkJICAgICAgZWxzZSBpZiAoc2l6ZW9mIChpbnRtYXhfdCkgPiBzaXplb2YgKGludCkpCisrCQkJeworKwkJCSAgLyogaW50bWF4X3QgPSBsb25nICovCisrCQkJICBmbGFncyArPSA4OworKwkJCX0KKysJCSAgICAgIGNwKys7CisrCQkgICAgfQorKyNlbmRpZgorKwkJICBlbHNlIGlmICgqY3AgPT0gJ3onIHx8ICpjcCA9PSAnWicpCisrCQkgICAgeworKwkJICAgICAgLyogJ3onIGlzIHN0YW5kYXJkaXplZCBpbiBJU08gQyA5OSwgYnV0IGdsaWJjIHVzZXMgJ1onCisrCQkJIGJlY2F1c2UgdGhlIHdhcm5pbmcgZmFjaWxpdHkgaW4gZ2NjLTIuOTUuMiB1bmRlcnN0YW5kcworKwkJCSBvbmx5ICdaJyAoc2VlIGdjYy0yLjk1LjIvZ2NjL2MtY29tbW9uLmM6MTc4NCkuICAqLworKwkJICAgICAgaWYgKHNpemVvZiAoc2l6ZV90KSA+IHNpemVvZiAobG9uZykpCisrCQkJeworKwkJCSAgLyogc2l6ZV90ID0gbG9uZyBsb25nICovCisrCQkJICBmbGFncyArPSAxNjsKKysJCQl9CisrCQkgICAgICBlbHNlIGlmIChzaXplb2YgKHNpemVfdCkgPiBzaXplb2YgKGludCkpCisrCQkJeworKwkJCSAgLyogc2l6ZV90ID0gbG9uZyAqLworKwkJCSAgZmxhZ3MgKz0gODsKKysJCQl9CisrCQkgICAgICBjcCsrOworKwkJICAgIH0KKysJCSAgZWxzZSBpZiAoKmNwID09ICd0JykKKysJCSAgICB7CisrCQkgICAgICBpZiAoc2l6ZW9mIChwdHJkaWZmX3QpID4gc2l6ZW9mIChsb25nKSkKKysJCQl7CisrCQkJICAvKiBwdHJkaWZmX3QgPSBsb25nIGxvbmcgKi8KKysJCQkgIGZsYWdzICs9IDE2OworKwkJCX0KKysJCSAgICAgIGVsc2UgaWYgKHNpemVvZiAocHRyZGlmZl90KSA+IHNpemVvZiAoaW50KSkKKysJCQl7CisrCQkJICAvKiBwdHJkaWZmX3QgPSBsb25nICovCisrCQkJICBmbGFncyArPSA4OworKwkJCX0KKysJCSAgICAgIGNwKys7CisrCQkgICAgfQorKwkJICBlbHNlCisrCQkgICAgYnJlYWs7CisrCQl9CisrCisrCSAgICAgIC8qIFJlYWQgdGhlIGNvbnZlcnNpb24gY2hhcmFjdGVyLiAgKi8KKysJICAgICAgYyA9ICpjcCsrOworKwkgICAgICBzd2l0Y2ggKGMpCisrCQl7CisrCQljYXNlICdkJzogY2FzZSAnaSc6CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrCQkgIGlmIChmbGFncyA+PSAxNiB8fCAoZmxhZ3MgJiA0KSkKKysJCSAgICB0eXBlID0gVFlQRV9MT05HTE9OR0lOVDsKKysJCSAgZWxzZQorKyNlbmRpZgorKwkJICBpZiAoZmxhZ3MgPj0gOCkKKysJCSAgICB0eXBlID0gVFlQRV9MT05HSU5UOworKwkJICBlbHNlIGlmIChmbGFncyAmIDIpCisrCQkgICAgdHlwZSA9IFRZUEVfU0NIQVI7CisrCQkgIGVsc2UgaWYgKGZsYWdzICYgMSkKKysJCSAgICB0eXBlID0gVFlQRV9TSE9SVDsKKysJCSAgZWxzZQorKwkJICAgIHR5cGUgPSBUWVBFX0lOVDsKKysJCSAgYnJlYWs7CisrCQljYXNlICdvJzogY2FzZSAndSc6IGNhc2UgJ3gnOiBjYXNlICdYJzoKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgaWYgKGZsYWdzID49IDE2IHx8IChmbGFncyAmIDQpKQorKwkJICAgIHR5cGUgPSBUWVBFX1VMT05HTE9OR0lOVDsKKysJCSAgZWxzZQorKyNlbmRpZgorKwkJICBpZiAoZmxhZ3MgPj0gOCkKKysJCSAgICB0eXBlID0gVFlQRV9VTE9OR0lOVDsKKysJCSAgZWxzZSBpZiAoZmxhZ3MgJiAyKQorKwkJICAgIHR5cGUgPSBUWVBFX1VDSEFSOworKwkJICBlbHNlIGlmIChmbGFncyAmIDEpCisrCQkgICAgdHlwZSA9IFRZUEVfVVNIT1JUOworKwkJICBlbHNlCisrCQkgICAgdHlwZSA9IFRZUEVfVUlOVDsKKysJCSAgYnJlYWs7CisrCQljYXNlICdmJzogY2FzZSAnRic6IGNhc2UgJ2UnOiBjYXNlICdFJzogY2FzZSAnZyc6IGNhc2UgJ0cnOgorKwkJY2FzZSAnYSc6IGNhc2UgJ0EnOgorKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrCQkgIGlmIChmbGFncyA+PSAxNiB8fCAoZmxhZ3MgJiA0KSkKKysJCSAgICB0eXBlID0gVFlQRV9MT05HRE9VQkxFOworKwkJICBlbHNlCisrI2VuZGlmCisrCQkgIHR5cGUgPSBUWVBFX0RPVUJMRTsKKysJCSAgYnJlYWs7CisrCQljYXNlICdjJzoKKysJCSAgaWYgKGZsYWdzID49IDgpCisrI2lmZGVmIEhBVkVfV0lOVF9UCisrCQkgICAgdHlwZSA9IFRZUEVfV0lERV9DSEFSOworKyNlbHNlCisrCQkgICAgZ290byBlcnJvcjsKKysjZW5kaWYKKysJCSAgZWxzZQorKwkJICAgIHR5cGUgPSBUWVBFX0NIQVI7CisrCQkgIGJyZWFrOworKyNpZmRlZiBIQVZFX1dJTlRfVAorKwkJY2FzZSAnQyc6CisrCQkgIHR5cGUgPSBUWVBFX1dJREVfQ0hBUjsKKysJCSAgYyA9ICdjJzsKKysJCSAgYnJlYWs7CisrI2VuZGlmCisrCQljYXNlICdzJzoKKysJCSAgaWYgKGZsYWdzID49IDgpCisrI2lmZGVmIEhBVkVfV0NIQVJfVAorKwkJICAgIHR5cGUgPSBUWVBFX1dJREVfU1RSSU5HOworKyNlbHNlCisrCQkgICAgZ290byBlcnJvcjsKKysjZW5kaWYKKysJCSAgZWxzZQorKwkJICAgIHR5cGUgPSBUWVBFX1NUUklORzsKKysJCSAgYnJlYWs7CisrI2lmZGVmIEhBVkVfV0NIQVJfVAorKwkJY2FzZSAnUyc6CisrCQkgIHR5cGUgPSBUWVBFX1dJREVfU1RSSU5HOworKwkJICBjID0gJ3MnOworKwkJICBicmVhazsKKysjZW5kaWYKKysJCWNhc2UgJ3AnOgorKwkJICB0eXBlID0gVFlQRV9QT0lOVEVSOworKwkJICBicmVhazsKKysJCWNhc2UgJ24nOgorKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKwkJICBpZiAoZmxhZ3MgPj0gMTYgfHwgKGZsYWdzICYgNCkpCisrCQkgICAgdHlwZSA9IFRZUEVfQ09VTlRfTE9OR0xPTkdJTlRfUE9JTlRFUjsKKysJCSAgZWxzZQorKyNlbmRpZgorKwkJICBpZiAoZmxhZ3MgPj0gOCkKKysJCSAgICB0eXBlID0gVFlQRV9DT1VOVF9MT05HSU5UX1BPSU5URVI7CisrCQkgIGVsc2UgaWYgKGZsYWdzICYgMikKKysJCSAgICB0eXBlID0gVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSOworKwkJICBlbHNlIGlmIChmbGFncyAmIDEpCisrCQkgICAgdHlwZSA9IFRZUEVfQ09VTlRfU0hPUlRfUE9JTlRFUjsKKysJCSAgZWxzZQorKwkJICAgIHR5cGUgPSBUWVBFX0NPVU5UX0lOVF9QT0lOVEVSOworKwkJICBicmVhazsKKysJCWNhc2UgJyUnOgorKwkJICB0eXBlID0gVFlQRV9OT05FOworKwkJICBicmVhazsKKysJCWRlZmF1bHQ6CisrCQkgIC8qIFVua25vd24gY29udmVyc2lvbiBjaGFyYWN0ZXIuICAqLworKwkJICBnb3RvIGVycm9yOworKwkJfQorKwkgICAgfQorKworKwkgICAgaWYgKHR5cGUgIT0gVFlQRV9OT05FKQorKwkgICAgICB7CisrCQlkcC0+YXJnX2luZGV4ID0gYXJnX2luZGV4OworKwkJaWYgKGRwLT5hcmdfaW5kZXggPT0gQVJHX05PTkUpCisrCQkgIHsKKysJCSAgICBkcC0+YXJnX2luZGV4ID0gYXJnX3Bvc24rKzsKKysJCSAgICBpZiAoZHAtPmFyZ19pbmRleCA9PSBBUkdfTk9ORSkKKysJCSAgICAgIC8qIGFyZ19wb3NuIHdyYXBwZWQgYXJvdW5kLiAgKi8KKysJCSAgICAgIGdvdG8gZXJyb3I7CisrCQkgIH0KKysJCVJFR0lTVEVSX0FSRyAoZHAtPmFyZ19pbmRleCwgdHlwZSk7CisrCSAgICAgIH0KKysJICAgIGRwLT5jb252ZXJzaW9uID0gYzsKKysJICAgIGRwLT5kaXJfZW5kID0gY3A7CisrCSAgfQorKworKwkgIGQtPmNvdW50Kys7CisrCSAgaWYgKGQtPmNvdW50ID49IGRfYWxsb2NhdGVkKQorKwkgICAgeworKwkgICAgICBzaXplX3QgbWVtb3J5X3NpemU7CisrCSAgICAgIERJUkVDVElWRSAqbWVtb3J5OworKworKwkgICAgICBkX2FsbG9jYXRlZCA9IHh0aW1lcyAoZF9hbGxvY2F0ZWQsIDIpOworKwkgICAgICBtZW1vcnlfc2l6ZSA9IHh0aW1lcyAoZF9hbGxvY2F0ZWQsIHNpemVvZiAoRElSRUNUSVZFKSk7CisrCSAgICAgIGlmIChzaXplX292ZXJmbG93X3AgKG1lbW9yeV9zaXplKSkKKysJCS8qIE92ZXJmbG93LCB3b3VsZCBsZWFkIHRvIG91dCBvZiBtZW1vcnkuICAqLworKwkJZ290byBlcnJvcjsKKysJICAgICAgbWVtb3J5ID0gcmVhbGxvYyAoZC0+ZGlyLCBtZW1vcnlfc2l6ZSk7CisrCSAgICAgIGlmIChtZW1vcnkgPT0gTlVMTCkKKysJCS8qIE91dCBvZiBtZW1vcnkuICAqLworKwkJZ290byBlcnJvcjsKKysJICAgICAgZC0+ZGlyID0gbWVtb3J5OworKwkgICAgfQorKwl9CisrICAgIH0KKysgIGQtPmRpcltkLT5jb3VudF0uZGlyX3N0YXJ0ID0gY3A7CisrCisrICBkLT5tYXhfd2lkdGhfbGVuZ3RoID0gbWF4X3dpZHRoX2xlbmd0aDsKKysgIGQtPm1heF9wcmVjaXNpb25fbGVuZ3RoID0gbWF4X3ByZWNpc2lvbl9sZW5ndGg7CisrICByZXR1cm4gMDsKKysKKytlcnJvcjoKKysgIGlmIChhLT5hcmcpCisrICAgIGZyZWUgKGEtPmFyZyk7CisrICBpZiAoZC0+ZGlyKQorKyAgICBmcmVlIChkLT5kaXIpOworKyAgcmV0dXJuIC0xOworK30KKysKKysjdW5kZWYgRElSRUNUSVZFUworKyN1bmRlZiBESVJFQ1RJVkUKKysjdW5kZWYgQ0hBUl9UCisrI3VuZGVmIFBSSU5URl9QQVJTRQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3ByaW50Zi1wYXJzZS5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3ByaW50Zi1wYXJzZS5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjI4NzA2NTkyIC0wNDAwCitAQCAtMCwwICsxLDc1IEBACisrLyogUGFyc2UgcHJpbnRmIGZvcm1hdCBzdHJpbmcuCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX1BSSU5URl9QQVJTRV9ICisrI2RlZmluZSBfUFJJTlRGX1BBUlNFX0gKKysKKysjaW5jbHVkZSAicHJpbnRmLWFyZ3MuaCIKKysKKysKKysvKiBGbGFncyAqLworKyNkZWZpbmUgRkxBR19HUk9VUAkgMQkvKiAnIGZsYWcgKi8KKysjZGVmaW5lIEZMQUdfTEVGVAkgMgkvKiAtIGZsYWcgKi8KKysjZGVmaW5lIEZMQUdfU0hPV1NJR04JIDQJLyogKyBmbGFnICovCisrI2RlZmluZSBGTEFHX1NQQUNFCSA4CS8qIHNwYWNlIGZsYWcgKi8KKysjZGVmaW5lIEZMQUdfQUxUCTE2CS8qICMgZmxhZyAqLworKyNkZWZpbmUgRkxBR19aRVJPCTMyCisrCisrLyogYXJnX2luZGV4IHZhbHVlIGluZGljYXRpbmcgdGhhdCBubyBhcmd1bWVudCBpcyBjb25zdW1lZC4gICovCisrI2RlZmluZSBBUkdfTk9ORQkofihzaXplX3QpMCkKKysKKysvKiBBIHBhcnNlZCBkaXJlY3RpdmUuICAqLworK3R5cGVkZWYgc3RydWN0CisreworKyAgY29uc3QgY2hhciogZGlyX3N0YXJ0OworKyAgY29uc3QgY2hhciogZGlyX2VuZDsKKysgIGludCBmbGFnczsKKysgIGNvbnN0IGNoYXIqIHdpZHRoX3N0YXJ0OworKyAgY29uc3QgY2hhciogd2lkdGhfZW5kOworKyAgc2l6ZV90IHdpZHRoX2FyZ19pbmRleDsKKysgIGNvbnN0IGNoYXIqIHByZWNpc2lvbl9zdGFydDsKKysgIGNvbnN0IGNoYXIqIHByZWNpc2lvbl9lbmQ7CisrICBzaXplX3QgcHJlY2lzaW9uX2FyZ19pbmRleDsKKysgIGNoYXIgY29udmVyc2lvbjsgLyogZCBpIG8gdSB4IFggZiBlIEUgZyBHIGMgcyBwIG4gVSAlIGJ1dCBub3QgQyBTICovCisrICBzaXplX3QgYXJnX2luZGV4OworK30KKytjaGFyX2RpcmVjdGl2ZTsKKysKKysvKiBBIHBhcnNlZCBmb3JtYXQgc3RyaW5nLiAgKi8KKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIHNpemVfdCBjb3VudDsKKysgIGNoYXJfZGlyZWN0aXZlICpkaXI7CisrICBzaXplX3QgbWF4X3dpZHRoX2xlbmd0aDsKKysgIHNpemVfdCBtYXhfcHJlY2lzaW9uX2xlbmd0aDsKKyt9CisrY2hhcl9kaXJlY3RpdmVzOworKworKworKy8qIFBhcnNlcyB0aGUgZm9ybWF0IHN0cmluZy4gIEZpbGxzIGluIHRoZSBudW1iZXIgTiBvZiBkaXJlY3RpdmVzLCBhbmQgZmlsbHMKKysgICBpbiBkaXJlY3RpdmVzWzBdLCAuLi4sIGRpcmVjdGl2ZXNbTi0xXSwgYW5kIHNldHMgZGlyZWN0aXZlc1tOXS5kaXJfc3RhcnQKKysgICB0byB0aGUgZW5kIG9mIHRoZSBmb3JtYXQgc3RyaW5nLiAgQWxzbyBmaWxscyBpbiB0aGUgYXJnX3R5cGUgZmllbGRzIG9mIHRoZQorKyAgIGFyZ3VtZW50cyBhbmQgdGhlIG5lZWRlZCBjb3VudCBvZiBhcmd1bWVudHMuICAqLworKyNpZmRlZiBTVEFUSUMKKytTVEFUSUMKKysjZWxzZQorK2V4dGVybgorKyNlbmRpZgorK2ludCBwcmludGZfcGFyc2UgKGNvbnN0IGNoYXIgKmZvcm1hdCwgY2hhcl9kaXJlY3RpdmVzICpkLCBhcmd1bWVudHMgKmEpOworKworKyNlbmRpZiAvKiBfUFJJTlRGX1BBUlNFX0ggKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9yZWYtYWRkLnNpbgkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9yZWYtYWRkLnNpbgkyMDA0LTA5LTEyIDE0OjQwOjM0LjYzMzcwNTgzMiAtMDQwMAorQEAgLTAsMCArMSwzMSBAQAorKyMgQWRkIHRoaXMgcGFja2FnZSB0byBhIGxpc3Qgb2YgcmVmZXJlbmNlcyBzdG9yZWQgaW4gYSB0ZXh0IGZpbGUuCisrIworKyMgICBDb3B5cmlnaHQgKEMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIworKyMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyMgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrIyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysjICAgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysjICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyMgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyMgICBVU0EuCisrIworKyMgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4uCisrIworKy9eIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6IC8geworKyAgcy8jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTovLworKyAgdGEKKysgIDphCisrICBzLyBAUEFDS0FHRUAgLyBAUEFDS0FHRUAgLworKyAgdGIKKysgIHMvICQvIEBQQUNLQUdFQCAvCisrICA6YgorKyAgcy9eLyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOi8KKyt9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcmVmLWRlbC5zaW4JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcmVmLWRlbC5zaW4JMjAwNC0wOS0xMiAxNDo0MDozNC42Mzg3MDUwNzIgLTA0MDAKK0BAIC0wLDAgKzEsMjYgQEAKKysjIFJlbW92ZSB0aGlzIHBhY2thZ2UgZnJvbSBhIGxpc3Qgb2YgcmVmZXJlbmNlcyBzdG9yZWQgaW4gYSB0ZXh0IGZpbGUuCisrIworKyMgICBDb3B5cmlnaHQgKEMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIworKyMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyMgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrIyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysjICAgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysjICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyMgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyMgICBVU0EuCisrIworKyMgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4uCisrIworKy9eIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6IC8geworKyAgcy8jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTovLworKyAgcy8gQFBBQ0tBR0VAIC8gLworKyAgcy9eLyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOi8KKyt9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcmVsb2NhdGFibGUuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9yZWxvY2F0YWJsZS5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjQ0NzA0MTYwIC0wNDAwCitAQCAtMCwwICsxLDQ0OSBAQAorKy8qIFByb3ZpZGUgcmVsb2NhdGFibGUgcGFja2FnZXMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDAzLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysKKysvKiBUZWxsIGdsaWJjJ3MgPHN0ZGlvLmg+IHRvIHByb3ZpZGUgYSBwcm90b3R5cGUgZm9yIGdldGxpbmUoKS4KKysgICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPiBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUKKysgICA8ZmVhdHVyZXMuaD4sIGFuZCBvbmNlIDxmZWF0dXJlcy5oPiBoYXMgYmVlbiBpbmNsdWRlZCwgaXQncyB0b28gbGF0ZS4gICovCisrI2lmbmRlZiBfR05VX1NPVVJDRQorKyMgZGVmaW5lIF9HTlVfU09VUkNFCTEKKysjZW5kaWYKKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisrCisrLyogU3BlY2lmaWNhdGlvbi4gICovCisrI2luY2x1ZGUgInJlbG9jYXRhYmxlLmgiCisrCisrI2lmIEVOQUJMRV9SRUxPQ0FUQUJMRQorKworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKyNpZmRlZiBOT19YTUFMTE9DCisrIyBkZWZpbmUgeG1hbGxvYyBtYWxsb2MKKysjZWxzZQorKyMgaW5jbHVkZSAieGFsbG9jLmgiCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCisrIyBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorKyMgaW5jbHVkZSA8d2luZG93cy5oPgorKyNlbmRpZgorKworKyNpZiBERVBFTkRTX09OX0xJQkNIQVJTRVQKKysjIGluY2x1ZGUgPGxpYmNoYXJzZXQuaD4KKysjZW5kaWYKKysjaWYgREVQRU5EU19PTl9MSUJJQ09OViAmJiBIQVZFX0lDT05WCisrIyBpbmNsdWRlIDxpY29udi5oPgorKyNlbmRpZgorKyNpZiBERVBFTkRTX09OX0xJQklOVEwgJiYgRU5BQkxFX05MUworKyMgaW5jbHVkZSA8bGliaW50bC5oPgorKyNlbmRpZgorKworKy8qIEZha2VkIGNoZWFwICdib29sJy4gICovCisrI3VuZGVmIGJvb2wKKysjdW5kZWYgZmFsc2UKKysjdW5kZWYgdHJ1ZQorKyNkZWZpbmUgYm9vbCBpbnQKKysjZGVmaW5lIGZhbHNlIDAKKysjZGVmaW5lIHRydWUgMQorKworKy8qIFBhdGhuYW1lIHN1cHBvcnQuCisrICAgSVNTTEFTSChDKSAgICAgICAgICAgdGVzdHMgd2hldGhlciBDIGlzIGEgZGlyZWN0b3J5IHNlcGFyYXRvciBjaGFyYWN0ZXIuCisrICAgSVNfUEFUSF9XSVRIX0RJUihQKSAgdGVzdHMgd2hldGhlciBQIGNvbnRhaW5zIGEgZGlyZWN0b3J5IHNwZWNpZmljYXRpb24uCisrICovCisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworKyAgLyogV2luMzIsIE9TLzIsIERPUyAqLworKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycgfHwgKEMpID09ICdcXCcpCisrIyBkZWZpbmUgSEFTX0RFVklDRShQKSBcCisrICAgICgoKChQKVswXSA+PSAnQScgJiYgKFApWzBdIDw9ICdaJykgfHwgKChQKVswXSA+PSAnYScgJiYgKFApWzBdIDw9ICd6JykpIFwKKysgICAgICYmIChQKVsxXSA9PSAnOicpCisrIyBkZWZpbmUgSVNfUEFUSF9XSVRIX0RJUihQKSBcCisrICAgIChzdHJjaHIgKFAsICcvJykgIT0gTlVMTCB8fCBzdHJjaHIgKFAsICdcXCcpICE9IE5VTEwgfHwgSEFTX0RFVklDRSAoUCkpCisrIyBkZWZpbmUgRklMRVNZU1RFTV9QUkVGSVhfTEVOKFApIChIQVNfREVWSUNFIChQKSA/IDIgOiAwKQorKyNlbHNlCisrICAvKiBVbml4ICovCisrIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJykKKysjIGRlZmluZSBJU19QQVRIX1dJVEhfRElSKFApIChzdHJjaHIgKFAsICcvJykgIT0gTlVMTCkKKysjIGRlZmluZSBGSUxFU1lTVEVNX1BSRUZJWF9MRU4oUCkgMAorKyNlbmRpZgorKworKy8qIE9yaWdpbmFsIGluc3RhbGxhdGlvbiBwcmVmaXguICAqLworK3N0YXRpYyBjaGFyICpvcmlnX3ByZWZpeDsKKytzdGF0aWMgc2l6ZV90IG9yaWdfcHJlZml4X2xlbjsKKysvKiBDdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXguICAqLworK3N0YXRpYyBjaGFyICpjdXJyX3ByZWZpeDsKKytzdGF0aWMgc2l6ZV90IGN1cnJfcHJlZml4X2xlbjsKKysvKiBUaGVzZSBwcmVmaXhlcyBkbyBub3QgZW5kIGluIGEgc2xhc2guICBBbnl0aGluZyB0aGF0IHdpbGwgYmUgY29uY2F0ZW5hdGVkCisrICAgdG8gdGhlbSBtdXN0IHN0YXJ0IHdpdGggYSBzbGFzaC4gICovCisrCisrLyogU2V0cyB0aGUgb3JpZ2luYWwgYW5kIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXggb2YgdGhpcyBtb2R1bGUuCisrICAgUmVsb2NhdGlvbiBzaW1wbHkgcmVwbGFjZXMgYSBwYXRobmFtZSBzdGFydGluZyB3aXRoIHRoZSBvcmlnaW5hbCBwcmVmaXgKKysgICBieSB0aGUgY29ycmVzcG9uZGluZyBwYXRobmFtZSB3aXRoIHRoZSBjdXJyZW50IHByZWZpeCBpbnN0ZWFkLiAgQm90aAorKyAgIHByZWZpeGVzIHNob3VsZCBiZSBkaXJlY3RvcnkgbmFtZXMgd2l0aG91dCB0cmFpbGluZyBzbGFzaCAoaS5lLiB1c2UgIiIKKysgICBpbnN0ZWFkIG9mICIvIikuICAqLworK3N0YXRpYyB2b2lkCisrc2V0X3RoaXNfcmVsb2NhdGlvbl9wcmVmaXggKGNvbnN0IGNoYXIgKm9yaWdfcHJlZml4X2FyZywKKysJCQkgICAgY29uc3QgY2hhciAqY3Vycl9wcmVmaXhfYXJnKQorK3sKKysgIGlmIChvcmlnX3ByZWZpeF9hcmcgIT0gTlVMTCAmJiBjdXJyX3ByZWZpeF9hcmcgIT0gTlVMTAorKyAgICAgIC8qIE9wdGltaXphdGlvbjogaWYgb3JpZ19wcmVmaXggYW5kIGN1cnJfcHJlZml4IGFyZSBlcXVhbCwgdGhlCisrCSByZWxvY2F0aW9uIGlzIGEgbm9wLiAgKi8KKysgICAgICAmJiBzdHJjbXAgKG9yaWdfcHJlZml4X2FyZywgY3Vycl9wcmVmaXhfYXJnKSAhPSAwKQorKyAgICB7CisrICAgICAgLyogRHVwbGljYXRlIHRoZSBhcmd1bWVudCBzdHJpbmdzLiAgKi8KKysgICAgICBjaGFyICptZW1vcnk7CisrCisrICAgICAgb3JpZ19wcmVmaXhfbGVuID0gc3RybGVuIChvcmlnX3ByZWZpeF9hcmcpOworKyAgICAgIGN1cnJfcHJlZml4X2xlbiA9IHN0cmxlbiAoY3Vycl9wcmVmaXhfYXJnKTsKKysgICAgICBtZW1vcnkgPSAoY2hhciAqKSB4bWFsbG9jIChvcmlnX3ByZWZpeF9sZW4gKyAxICsgY3Vycl9wcmVmaXhfbGVuICsgMSk7CisrI2lmZGVmIE5PX1hNQUxMT0MKKysgICAgICBpZiAobWVtb3J5ICE9IE5VTEwpCisrI2VuZGlmCisrCXsKKysJICBtZW1jcHkgKG1lbW9yeSwgb3JpZ19wcmVmaXhfYXJnLCBvcmlnX3ByZWZpeF9sZW4gKyAxKTsKKysJICBvcmlnX3ByZWZpeCA9IG1lbW9yeTsKKysJICBtZW1vcnkgKz0gb3JpZ19wcmVmaXhfbGVuICsgMTsKKysJICBtZW1jcHkgKG1lbW9yeSwgY3Vycl9wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9sZW4gKyAxKTsKKysJICBjdXJyX3ByZWZpeCA9IG1lbW9yeTsKKysJICByZXR1cm47CisrCX0KKysgICAgfQorKyAgb3JpZ19wcmVmaXggPSBOVUxMOworKyAgY3Vycl9wcmVmaXggPSBOVUxMOworKyAgLyogRG9uJ3Qgd29ycnkgYWJvdXQgd2FzdGVkIG1lbW9yeSBoZXJlIC0gdGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IG9ubHkKKysgICAgIGNhbGxlZCBvbmNlLiAgKi8KKyt9CisrCisrLyogU2V0cyB0aGUgb3JpZ2luYWwgYW5kIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXggb2YgdGhlIHBhY2thZ2UuCisrICAgUmVsb2NhdGlvbiBzaW1wbHkgcmVwbGFjZXMgYSBwYXRobmFtZSBzdGFydGluZyB3aXRoIHRoZSBvcmlnaW5hbCBwcmVmaXgKKysgICBieSB0aGUgY29ycmVzcG9uZGluZyBwYXRobmFtZSB3aXRoIHRoZSBjdXJyZW50IHByZWZpeCBpbnN0ZWFkLiAgQm90aAorKyAgIHByZWZpeGVzIHNob3VsZCBiZSBkaXJlY3RvcnkgbmFtZXMgd2l0aG91dCB0cmFpbGluZyBzbGFzaCAoaS5lLiB1c2UgIiIKKysgICBpbnN0ZWFkIG9mICIvIikuICAqLworK3ZvaWQKKytzZXRfcmVsb2NhdGlvbl9wcmVmaXggKGNvbnN0IGNoYXIgKm9yaWdfcHJlZml4X2FyZywgY29uc3QgY2hhciAqY3Vycl9wcmVmaXhfYXJnKQorK3sKKysgIHNldF90aGlzX3JlbG9jYXRpb25fcHJlZml4IChvcmlnX3ByZWZpeF9hcmcsIGN1cnJfcHJlZml4X2FyZyk7CisrCisrICAvKiBOb3cgbm90aWZ5IGFsbCBkZXBlbmRlbnQgbGlicmFyaWVzLiAgKi8KKysjaWYgREVQRU5EU19PTl9MSUJDSEFSU0VUCisrICBsaWJjaGFyc2V0X3NldF9yZWxvY2F0aW9uX3ByZWZpeCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpOworKyNlbmRpZgorKyNpZiBERVBFTkRTX09OX0xJQklDT05WICYmIEhBVkVfSUNPTlYgJiYgX0xJQklDT05WX1ZFUlNJT04gPj0gMHgwMTA5CisrICBsaWJpY29udl9zZXRfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfcHJlZml4X2FyZywgY3Vycl9wcmVmaXhfYXJnKTsKKysjZW5kaWYKKysjaWYgREVQRU5EU19PTl9MSUJJTlRMICYmIEVOQUJMRV9OTFMgJiYgZGVmaW5lZCBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeAorKyAgbGliaW50bF9zZXRfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfcHJlZml4X2FyZywgY3Vycl9wcmVmaXhfYXJnKTsKKysjZW5kaWYKKyt9CisrCisrI2lmICFkZWZpbmVkIElOX0xJQlJBUlkgfHwgKGRlZmluZWQgUElDICYmIGRlZmluZWQgSU5TVEFMTERJUikKKysKKysvKiBDb252ZW5pZW5jZSBmdW5jdGlvbjoKKysgICBDb21wdXRlcyB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gcHJlZml4LCBiYXNlZCBvbiB0aGUgb3JpZ2luYWwKKysgICBpbnN0YWxsYXRpb24gcHJlZml4LCB0aGUgb3JpZ2luYWwgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBvZiBhIHBhcnRpY3VsYXIKKysgICBmaWxlLCBhbmQgdGhlIGN1cnJlbnQgcGF0aG5hbWUgb2YgdGhpcyBmaWxlLiAgUmV0dXJucyBOVUxMIHVwb24gZmFpbHVyZS4gICovCisrI2lmZGVmIElOX0xJQlJBUlkKKysjZGVmaW5lIGNvbXB1dGVfY3Vycl9wcmVmaXggbG9jYWxfY29tcHV0ZV9jdXJyX3ByZWZpeAorK3N0YXRpYworKyNlbmRpZgorK2NvbnN0IGNoYXIgKgorK2NvbXB1dGVfY3Vycl9wcmVmaXggKGNvbnN0IGNoYXIgKm9yaWdfaW5zdGFsbHByZWZpeCwKKysJCSAgICAgY29uc3QgY2hhciAqb3JpZ19pbnN0YWxsZGlyLAorKwkJICAgICBjb25zdCBjaGFyICpjdXJyX3BhdGhuYW1lKQorK3sKKysgIGNvbnN0IGNoYXIgKmN1cnJfaW5zdGFsbGRpcjsKKysgIGNvbnN0IGNoYXIgKnJlbF9pbnN0YWxsZGlyOworKworKyAgaWYgKGN1cnJfcGF0aG5hbWUgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICAvKiBEZXRlcm1pbmUgdGhlIHJlbGF0aXZlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnksIHJlbGF0aXZlIHRvIHRoZSBwcmVmaXguCisrICAgICBUaGlzIGlzIHNpbXBseSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9yaWdfaW5zdGFsbHByZWZpeCBhbmQKKysgICAgIG9yaWdfaW5zdGFsbGRpci4gICovCisrICBpZiAoc3RybmNtcCAob3JpZ19pbnN0YWxscHJlZml4LCBvcmlnX2luc3RhbGxkaXIsIHN0cmxlbiAob3JpZ19pbnN0YWxscHJlZml4KSkKKysgICAgICAhPSAwKQorKyAgICAvKiBTaG91bGRuJ3QgaGFwcGVuIC0gbm90aGluZyBzaG91bGQgYmUgaW5zdGFsbGVkIG91dHNpZGUgJChwcmVmaXgpLiAgKi8KKysgICAgcmV0dXJuIE5VTEw7CisrICByZWxfaW5zdGFsbGRpciA9IG9yaWdfaW5zdGFsbGRpciArIHN0cmxlbiAob3JpZ19pbnN0YWxscHJlZml4KTsKKysKKysgIC8qIERldGVybWluZSB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LiAgKi8KKysgIHsKKysgICAgY29uc3QgY2hhciAqcF9iYXNlID0gY3Vycl9wYXRobmFtZSArIEZJTEVTWVNURU1fUFJFRklYX0xFTiAoY3Vycl9wYXRobmFtZSk7CisrICAgIGNvbnN0IGNoYXIgKnAgPSBjdXJyX3BhdGhuYW1lICsgc3RybGVuIChjdXJyX3BhdGhuYW1lKTsKKysgICAgY2hhciAqcTsKKysKKysgICAgd2hpbGUgKHAgPiBwX2Jhc2UpCisrICAgICAgeworKwlwLS07CisrCWlmIChJU1NMQVNIICgqcCkpCisrCSAgYnJlYWs7CisrICAgICAgfQorKworKyAgICBxID0gKGNoYXIgKikgeG1hbGxvYyAocCAtIGN1cnJfcGF0aG5hbWUgKyAxKTsKKysjaWZkZWYgTk9fWE1BTExPQworKyAgICBpZiAocSA9PSBOVUxMKQorKyAgICAgIHJldHVybiBOVUxMOworKyNlbmRpZgorKyAgICBtZW1jcHkgKHEsIGN1cnJfcGF0aG5hbWUsIHAgLSBjdXJyX3BhdGhuYW1lKTsKKysgICAgcVtwIC0gY3Vycl9wYXRobmFtZV0gPSAnXDAnOworKyAgICBjdXJyX2luc3RhbGxkaXIgPSBxOworKyAgfQorKworKyAgLyogQ29tcHV0ZSB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gcHJlZml4IGJ5IHJlbW92aW5nIHRoZSB0cmFpbGluZworKyAgICAgcmVsX2luc3RhbGxkaXIgZnJvbSBpdC4gICovCisrICB7CisrICAgIGNvbnN0IGNoYXIgKnJwID0gcmVsX2luc3RhbGxkaXIgKyBzdHJsZW4gKHJlbF9pbnN0YWxsZGlyKTsKKysgICAgY29uc3QgY2hhciAqY3AgPSBjdXJyX2luc3RhbGxkaXIgKyBzdHJsZW4gKGN1cnJfaW5zdGFsbGRpcik7CisrICAgIGNvbnN0IGNoYXIgKmNwX2Jhc2UgPQorKyAgICAgIGN1cnJfaW5zdGFsbGRpciArIEZJTEVTWVNURU1fUFJFRklYX0xFTiAoY3Vycl9pbnN0YWxsZGlyKTsKKysKKysgICAgd2hpbGUgKHJwID4gcmVsX2luc3RhbGxkaXIgJiYgY3AgPiBjcF9iYXNlKQorKyAgICAgIHsKKysJYm9vbCBzYW1lID0gZmFsc2U7CisrCWNvbnN0IGNoYXIgKnJwaSA9IHJwOworKwljb25zdCBjaGFyICpjcGkgPSBjcDsKKysKKysJd2hpbGUgKHJwaSA+IHJlbF9pbnN0YWxsZGlyICYmIGNwaSA+IGNwX2Jhc2UpCisrCSAgeworKwkgICAgcnBpLS07CisrCSAgICBjcGktLTsKKysJICAgIGlmIChJU1NMQVNIICgqcnBpKSB8fCBJU1NMQVNIICgqY3BpKSkKKysJICAgICAgeworKwkJaWYgKElTU0xBU0ggKCpycGkpICYmIElTU0xBU0ggKCpjcGkpKQorKwkJICBzYW1lID0gdHJ1ZTsKKysJCWJyZWFrOworKwkgICAgICB9CisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworKwkgICAgLyogV2luMzIsIE9TLzIsIERPUyAtIGNhc2UgaW5zaWduaWZpY2FudCBmaWxlc3lzdGVtICovCisrCSAgICBpZiAoKCpycGkgPj0gJ2EnICYmICpycGkgPD0gJ3onID8gKnJwaSAtICdhJyArICdBJyA6ICpycGkpCisrCQkhPSAoKmNwaSA+PSAnYScgJiYgKmNwaSA8PSAneicgPyAqY3BpIC0gJ2EnICsgJ0EnIDogKmNwaSkpCisrCSAgICAgIGJyZWFrOworKyNlbHNlCisrCSAgICBpZiAoKnJwaSAhPSAqY3BpKQorKwkgICAgICBicmVhazsKKysjZW5kaWYKKysJICB9CisrCWlmICghc2FtZSkKKysJICBicmVhazsKKysJLyogVGhlIGxhc3QgcGF0aG5hbWUgY29tcG9uZW50IHdhcyB0aGUgc2FtZS4gIG9waSBhbmQgY3BpIG5vdyBwb2ludAorKwkgICB0byB0aGUgc2xhc2ggYmVmb3JlIGl0LiAgKi8KKysJcnAgPSBycGk7CisrCWNwID0gY3BpOworKyAgICAgIH0KKysKKysgICAgaWYgKHJwID4gcmVsX2luc3RhbGxkaXIpCisrICAgICAgLyogVW5leHBlY3RlZDogVGhlIGN1cnJfaW5zdGFsbGRpciBkb2VzIG5vdCBlbmQgd2l0aCByZWxfaW5zdGFsbGRpci4gICovCisrICAgICAgcmV0dXJuIE5VTEw7CisrCisrICAgIHsKKysgICAgICBzaXplX3QgY3Vycl9wcmVmaXhfbGVuID0gY3AgLSBjdXJyX2luc3RhbGxkaXI7CisrICAgICAgY2hhciAqY3Vycl9wcmVmaXg7CisrCisrICAgICAgY3Vycl9wcmVmaXggPSAoY2hhciAqKSB4bWFsbG9jIChjdXJyX3ByZWZpeF9sZW4gKyAxKTsKKysjaWZkZWYgTk9fWE1BTExPQworKyAgICAgIGlmIChjdXJyX3ByZWZpeCA9PSBOVUxMKQorKwlyZXR1cm4gTlVMTDsKKysjZW5kaWYKKysgICAgICBtZW1jcHkgKGN1cnJfcHJlZml4LCBjdXJyX2luc3RhbGxkaXIsIGN1cnJfcHJlZml4X2xlbik7CisrICAgICAgY3Vycl9wcmVmaXhbY3Vycl9wcmVmaXhfbGVuXSA9ICdcMCc7CisrCisrICAgICAgcmV0dXJuIGN1cnJfcHJlZml4OworKyAgICB9CisrICB9CisrfQorKworKyNlbmRpZiAvKiAhSU5fTElCUkFSWSB8fCBQSUMgKi8KKysKKysjaWYgZGVmaW5lZCBQSUMgJiYgZGVmaW5lZCBJTlNUQUxMRElSCisrCisrLyogRnVsbCBwYXRobmFtZSBvZiBzaGFyZWQgbGlicmFyeSwgb3IgTlVMTC4gICovCisrc3RhdGljIGNoYXIgKnNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lOworKworKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXworKworKy8qIERldGVybWluZSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgd2hlbiBpdCBpcyBsb2FkZWQuICAqLworKworK0JPT0wgV0lOQVBJCisrRGxsTWFpbiAoSElOU1RBTkNFIG1vZHVsZV9oYW5kbGUsIERXT1JEIGV2ZW50LCBMUFZPSUQgcmVzZXJ2ZWQpCisreworKyAgKHZvaWQpIHJlc2VydmVkOworKworKyAgaWYgKGV2ZW50ID09IERMTF9QUk9DRVNTX0FUVEFDSCkKKysgICAgeworKyAgICAgIC8qIFRoZSBETEwgaXMgYmVpbmcgbG9hZGVkIGludG8gYW4gYXBwbGljYXRpb24ncyBhZGRyZXNzIHJhbmdlLiAgKi8KKysgICAgICBzdGF0aWMgY2hhciBsb2NhdGlvbltNQVhfUEFUSF07CisrCisrICAgICAgaWYgKCFHZXRNb2R1bGVGaWxlTmFtZSAobW9kdWxlX2hhbmRsZSwgbG9jYXRpb24sIHNpemVvZiAobG9jYXRpb24pKSkKKysJLyogU2hvdWxkbid0IGhhcHBlbi4gICovCisrCXJldHVybiBGQUxTRTsKKysKKysgICAgICBpZiAoIUlTX1BBVEhfV0lUSF9ESVIgKGxvY2F0aW9uKSkKKysJLyogU2hvdWxkbid0IGhhcHBlbi4gICovCisrCXJldHVybiBGQUxTRTsKKysKKysgICAgICBzaGFyZWRfbGlicmFyeV9mdWxsbmFtZSA9IHN0cmR1cCAobG9jYXRpb24pOworKyAgICB9CisrCisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrI2Vsc2UgLyogVW5peCAqLworKworK3N0YXRpYyB2b2lkCisrZmluZF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSAoKQorK3sKKysjaWYgZGVmaW5lZCBfX2xpbnV4X18gJiYgX19HTElCQ19fID49IDIKKysgIC8qIExpbnV4IGhhcyAvcHJvYy9zZWxmL21hcHMuIGdsaWJjIDIgaGFzIHRoZSBnZXRsaW5lKCkgZnVuY3Rpb24uICAqLworKyAgRklMRSAqZnA7CisrCisrICAvKiBPcGVuIHRoZSBjdXJyZW50IHByb2Nlc3MnIG1hcHMgZmlsZS4gIEl0IGRlc2NyaWJlcyBvbmUgVk1BIHBlciBsaW5lLiAgKi8KKysgIGZwID0gZm9wZW4gKCIvcHJvYy9zZWxmL21hcHMiLCAiciIpOworKyAgaWYgKGZwKQorKyAgICB7CisrICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpICZmaW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lOworKyAgICAgIGZvciAoOzspCisrCXsKKysJICB1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CisrCSAgaW50IGM7CisrCisrCSAgaWYgKGZzY2FuZiAoZnAsICIlbHgtJWx4IiwgJnN0YXJ0LCAmZW5kKSAhPSAyKQorKwkgICAgYnJlYWs7CisrCSAgaWYgKGFkZHJlc3MgPj0gc3RhcnQgJiYgYWRkcmVzcyA8PSBlbmQgLSAxKQorKwkgICAgeworKwkgICAgICAvKiBGb3VuZCBpdC4gIE5vdyBzZWUgaWYgdGhpcyBsaW5lIGNvbnRhaW5zIGEgZmlsZW5hbWUuICAqLworKwkgICAgICB3aGlsZSAoYyA9IGdldGMgKGZwKSwgYyAhPSBFT0YgJiYgYyAhPSAnXG4nICYmIGMgIT0gJy8nKQorKwkJY29udGludWU7CisrCSAgICAgIGlmIChjID09ICcvJykKKysJCXsKKysJCSAgc2l6ZV90IHNpemU7CisrCQkgIGludCBsZW47CisrCisrCQkgIHVuZ2V0YyAoYywgZnApOworKwkJICBzaGFyZWRfbGlicmFyeV9mdWxsbmFtZSA9IE5VTEw7IHNpemUgPSAwOworKwkJICBsZW4gPSBnZXRsaW5lICgmc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUsICZzaXplLCBmcCk7CisrCQkgIGlmIChsZW4gPj0gMCkKKysJCSAgICB7CisrCQkgICAgICAvKiBTdWNjZXNzOiBmaWxsZWQgc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUuICAqLworKwkJICAgICAgaWYgKGxlbiA+IDAgJiYgc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWVbbGVuIC0gMV0gPT0gJ1xuJykKKysJCQlzaGFyZWRfbGlicmFyeV9mdWxsbmFtZVtsZW4gLSAxXSA9ICdcMCc7CisrCQkgICAgfQorKwkJfQorKwkgICAgICBicmVhazsKKysJICAgIH0KKysJICB3aGlsZSAoYyA9IGdldGMgKGZwKSwgYyAhPSBFT0YgJiYgYyAhPSAnXG4nKQorKwkgICAgY29udGludWU7CisrCX0KKysgICAgICBmY2xvc2UgKGZwKTsKKysgICAgfQorKyNlbmRpZgorK30KKysKKysjZW5kaWYgLyogV0lOMzIgLyBVbml4ICovCisrCisrLyogUmV0dXJuIHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBjdXJyZW50IHNoYXJlZCBsaWJyYXJ5LgorKyAgIFJldHVybiBOVUxMIGlmIHVua25vd24uCisrICAgR3VhcmFudGVlZCB0byB3b3JrIG9ubHkgb24gTGludXggYW5kIFdvZTMyLiAgKi8KKytzdGF0aWMgY2hhciAqCisrZ2V0X3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lICgpCisreworKyNpZiAhKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKQorKyAgc3RhdGljIGJvb2wgdHJpZWRfZmluZF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZTsKKysgIGlmICghdHJpZWRfZmluZF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSkKKysgICAgeworKyAgICAgIGZpbmRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgKCk7CisrICAgICAgdHJpZWRfZmluZF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSA9IHRydWU7CisrICAgIH0KKysjZW5kaWYKKysgIHJldHVybiBzaGFyZWRfbGlicmFyeV9mdWxsbmFtZTsKKyt9CisrCisrI2VuZGlmIC8qIFBJQyAqLworKworKy8qIFJldHVybnMgdGhlIHBhdGhuYW1lLCByZWxvY2F0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbgorKyAgIGRpcmVjdG9yeS4gICovCisrY29uc3QgY2hhciAqCisrcmVsb2NhdGUgKGNvbnN0IGNoYXIgKnBhdGhuYW1lKQorK3sKKysjaWYgZGVmaW5lZCBQSUMgJiYgZGVmaW5lZCBJTlNUQUxMRElSCisrICBzdGF0aWMgaW50IGluaXRpYWxpemVkOworKworKyAgLyogSW5pdGlhbGl6YXRpb24gY29kZSBmb3IgYSBzaGFyZWQgbGlicmFyeS4gICovCisrICBpZiAoIWluaXRpYWxpemVkKQorKyAgICB7CisrICAgICAgLyogQXQgdGhpcyBwb2ludCwgb3JpZ19wcmVmaXggYW5kIGN1cnJfcHJlZml4IGxpa2VseSBoYXZlIGFscmVhZHkgYmVlbgorKwkgc2V0IHRocm91Z2ggdGhlIG1haW4gcHJvZ3JhbSdzIHNldF9wcm9ncmFtX25hbWVfYW5kX2luc3RhbGxkaXIKKysJIGZ1bmN0aW9uLiAgVGhpcyBpcyBzdWZmaWNpZW50IGluIHRoZSBjYXNlIHRoYXQgdGhlIGxpYnJhcnkgaGFzCisrCSBpbml0aWFsbHkgYmVlbiBpbnN0YWxsZWQgaW4gdGhlIHNhbWUgb3JpZ19wcmVmaXguICBCdXQgd2UgY2FuIGRvCisrCSBiZXR0ZXIsIHRvIGFsc28gY292ZXIgdGhlIGNhc2VzIHRoYXQgMS4gaXQgaGFzIGJlZW4gaW5zdGFsbGVkCisrCSBpbiBhIGRpZmZlcmVudCBwcmVmaXggYmVmb3JlIGJlaW5nIG1vdmVkIHRvIG9yaWdfcHJlZml4IGFuZCAobGF0ZXIpCisrCSB0byBjdXJyX3ByZWZpeCwgMi4gdW5saWtlIHRoZSBwcm9ncmFtLCBpdCBoYXMgbm90IG1vdmVkIGF3YXkgZnJvbQorKwkgb3JpZ19wcmVmaXguICAqLworKyAgICAgIGNvbnN0IGNoYXIgKm9yaWdfaW5zdGFsbHByZWZpeCA9IElOU1RBTExQUkVGSVg7CisrICAgICAgY29uc3QgY2hhciAqb3JpZ19pbnN0YWxsZGlyID0gSU5TVEFMTERJUjsKKysgICAgICBjb25zdCBjaGFyICpjdXJyX3ByZWZpeF9iZXR0ZXI7CisrCisrICAgICAgY3Vycl9wcmVmaXhfYmV0dGVyID0KKysJY29tcHV0ZV9jdXJyX3ByZWZpeCAob3JpZ19pbnN0YWxscHJlZml4LCBvcmlnX2luc3RhbGxkaXIsCisrCQkJICAgICBnZXRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgKCkpOworKyAgICAgIGlmIChjdXJyX3ByZWZpeF9iZXR0ZXIgPT0gTlVMTCkKKysJY3Vycl9wcmVmaXhfYmV0dGVyID0gY3Vycl9wcmVmaXg7CisrCisrICAgICAgc2V0X3JlbG9jYXRpb25fcHJlZml4IChvcmlnX2luc3RhbGxwcmVmaXgsIGN1cnJfcHJlZml4X2JldHRlcik7CisrCisrICAgICAgaW5pdGlhbGl6ZWQgPSAxOworKyAgICB9CisrI2VuZGlmCisrCisrICAvKiBOb3RlOiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHBlcmZvcm0gY2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJpc29uIGhlcmUsCisrICAgICBldmVuIGZvciBET1MtbGlrZSBmaWxlc3lzdGVtcywgYmVjYXVzZSB0aGUgcGF0aG5hbWUgYXJndW1lbnQgd2FzCisrICAgICB0eXBpY2FsbHkgY3JlYXRlZCBmcm9tIHRoZSBzYW1lIE1ha2VmaWxlIHZhcmlhYmxlIGFzIG9yaWdfcHJlZml4IGNhbWUKKysgICAgIGZyb20uICAqLworKyAgaWYgKG9yaWdfcHJlZml4ICE9IE5VTEwgJiYgY3Vycl9wcmVmaXggIT0gTlVMTAorKyAgICAgICYmIHN0cm5jbXAgKHBhdGhuYW1lLCBvcmlnX3ByZWZpeCwgb3JpZ19wcmVmaXhfbGVuKSA9PSAwKQorKyAgICB7CisrICAgICAgaWYgKHBhdGhuYW1lW29yaWdfcHJlZml4X2xlbl0gPT0gJ1wwJykKKysJLyogcGF0aG5hbWUgZXF1YWxzIG9yaWdfcHJlZml4LiAgKi8KKysJcmV0dXJuIGN1cnJfcHJlZml4OworKyAgICAgIGlmIChJU1NMQVNIIChwYXRobmFtZVtvcmlnX3ByZWZpeF9sZW5dKSkKKysJeworKwkgIC8qIHBhdGhuYW1lIHN0YXJ0cyB3aXRoIG9yaWdfcHJlZml4LiAgKi8KKysJICBjb25zdCBjaGFyICpwYXRobmFtZV90YWlsID0gJnBhdGhuYW1lW29yaWdfcHJlZml4X2xlbl07CisrCSAgY2hhciAqcmVzdWx0ID0KKysJICAgIChjaGFyICopIHhtYWxsb2MgKGN1cnJfcHJlZml4X2xlbiArIHN0cmxlbiAocGF0aG5hbWVfdGFpbCkgKyAxKTsKKysKKysjaWZkZWYgTk9fWE1BTExPQworKwkgIGlmIChyZXN1bHQgIT0gTlVMTCkKKysjZW5kaWYKKysJICAgIHsKKysJICAgICAgbWVtY3B5IChyZXN1bHQsIGN1cnJfcHJlZml4LCBjdXJyX3ByZWZpeF9sZW4pOworKwkgICAgICBzdHJjcHkgKHJlc3VsdCArIGN1cnJfcHJlZml4X2xlbiwgcGF0aG5hbWVfdGFpbCk7CisrCSAgICAgIHJldHVybiByZXN1bHQ7CisrCSAgICB9CisrCX0KKysgICAgfQorKyAgLyogTm90aGluZyB0byByZWxvY2F0ZS4gICovCisrICByZXR1cm4gcGF0aG5hbWU7CisrfQorKworKyNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3JlbG9jYXRhYmxlLmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcmVsb2NhdGFibGUuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjY1MTcwMzA5NiAtMDQwMAorQEAgLTAsMCArMSw3NyBAQAorKy8qIFByb3ZpZGUgcmVsb2NhdGFibGUgcGFja2FnZXMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDAzLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9SRUxPQ0FUQUJMRV9ICisrI2RlZmluZSBfUkVMT0NBVEFCTEVfSAorKworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworKworKy8qIFRoaXMgY2FuIGJlIGVuYWJsZWQgdGhyb3VnaCB0aGUgY29uZmlndXJlIC0tZW5hYmxlLXJlbG9jYXRhYmxlIG9wdGlvbi4gICovCisrI2lmIEVOQUJMRV9SRUxPQ0FUQUJMRQorKworKy8qIFdoZW4gYnVpbGRpbmcgYSBETEwsIHdlIG11c3QgZXhwb3J0IHNvbWUgZnVuY3Rpb25zLiAgTm90ZSB0aGF0IGJlY2F1c2UKKysgICB0aGlzIGlzIGEgcHJpdmF0ZSAuaCBmaWxlLCB3ZSBkb24ndCBuZWVkIHRvIHVzZSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKysgICBpbiBhbnkgY2FzZS4gICovCisrI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgQlVJTERJTkdfRExMCisrIyBkZWZpbmUgUkVMT0NBVEFCTEVfRExMX0VYUE9SVEVEIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorKyNlbHNlCisrIyBkZWZpbmUgUkVMT0NBVEFCTEVfRExMX0VYUE9SVEVECisrI2VuZGlmCisrCisrLyogU2V0cyB0aGUgb3JpZ2luYWwgYW5kIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXggb2YgdGhlIHBhY2thZ2UuCisrICAgUmVsb2NhdGlvbiBzaW1wbHkgcmVwbGFjZXMgYSBwYXRobmFtZSBzdGFydGluZyB3aXRoIHRoZSBvcmlnaW5hbCBwcmVmaXgKKysgICBieSB0aGUgY29ycmVzcG9uZGluZyBwYXRobmFtZSB3aXRoIHRoZSBjdXJyZW50IHByZWZpeCBpbnN0ZWFkLiAgQm90aAorKyAgIHByZWZpeGVzIHNob3VsZCBiZSBkaXJlY3RvcnkgbmFtZXMgd2l0aG91dCB0cmFpbGluZyBzbGFzaCAoaS5lLiB1c2UgIiIKKysgICBpbnN0ZWFkIG9mICIvIikuICAqLworK2V4dGVybiBSRUxPQ0FUQUJMRV9ETExfRVhQT1JURUQgdm9pZAorKyAgICAgICBzZXRfcmVsb2NhdGlvbl9wcmVmaXggKGNvbnN0IGNoYXIgKm9yaWdfcHJlZml4LAorKwkJCSAgICAgIGNvbnN0IGNoYXIgKmN1cnJfcHJlZml4KTsKKysKKysvKiBSZXR1cm5zIHRoZSBwYXRobmFtZSwgcmVsb2NhdGVkIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24KKysgICBkaXJlY3RvcnkuICAqLworK2V4dGVybiBjb25zdCBjaGFyICogcmVsb2NhdGUgKGNvbnN0IGNoYXIgKnBhdGhuYW1lKTsKKysKKysvKiBNZW1vcnkgbWFuYWdlbWVudDogcmVsb2NhdGUoKSBsZWFrcyBtZW1vcnksIGJlY2F1c2UgaXQgaGFzIHRvIGNvbnN0cnVjdAorKyAgIGEgZnJlc2ggcGF0aG5hbWUuICBJZiB0aGlzIGlzIGEgcHJvYmxlbSBiZWNhdXNlIHlvdXIgcHJvZ3JhbSBjYWxscworKyAgIHJlbG9jYXRlKCkgZnJlcXVlbnRseSwgdGhpbmsgYWJvdXQgY2FjaGluZyB0aGUgcmVzdWx0LiAgKi8KKysKKysvKiBDb252ZW5pZW5jZSBmdW5jdGlvbjoKKysgICBDb21wdXRlcyB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gcHJlZml4LCBiYXNlZCBvbiB0aGUgb3JpZ2luYWwKKysgICBpbnN0YWxsYXRpb24gcHJlZml4LCB0aGUgb3JpZ2luYWwgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBvZiBhIHBhcnRpY3VsYXIKKysgICBmaWxlLCBhbmQgdGhlIGN1cnJlbnQgcGF0aG5hbWUgb2YgdGhpcyBmaWxlLiAgUmV0dXJucyBOVUxMIHVwb24gZmFpbHVyZS4gICovCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb21wdXRlX2N1cnJfcHJlZml4IChjb25zdCBjaGFyICpvcmlnX2luc3RhbGxwcmVmaXgsCisrCQkJCQkgY29uc3QgY2hhciAqb3JpZ19pbnN0YWxsZGlyLAorKwkJCQkJIGNvbnN0IGNoYXIgKmN1cnJfcGF0aG5hbWUpOworKworKyNlbHNlCisrCisrLyogQnkgZGVmYXVsdCwgd2UgdXNlIHRoZSBoYXJkd2lyZWQgcGF0aG5hbWVzLiAgKi8KKysjZGVmaW5lIHJlbG9jYXRlKHBhdGhuYW1lKSAocGF0aG5hbWUpCisrCisrI2VuZGlmCisrCisrCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBfUkVMT0NBVEFCTEVfSCAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3RleHRkb21haW4uYwkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC90ZXh0ZG9tYWluLmMJMjAwNC0wOS0xMiAxNDo0MDozNC42NTY3MDIzMzYgLTA0MDAKK0BAIC0xLDUxICsxLDYwIEBACistLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIHRleHRkb21haW4oMykgZnVuY3Rpb24KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCisrLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIHRleHRkb21haW4oMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTgsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKy0jZW5kaWYKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorIAorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIEhBVkVfU1RSSU5HX0ggfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2Vsc2UKKy0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KKy0jIGlmbmRlZiBtZW1jcHkKKy0jICBkZWZpbmUgbWVtY3B5KERzdCwgU3JjLCBOdW0pIGJjb3B5IChTcmMsIERzdCwgTnVtKQorLSMgZW5kaWYKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKyAjZW5kaWYKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAKKyAjaWZkZWYgX0xJQkMKKy0jIGluY2x1ZGUgPGxpYmludGwuaD4KKysvKiBXZSBoYXZlIHRvIGhhbmRsZSBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMuICAqLworKyMgaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKyAjZWxzZQorLSMgaW5jbHVkZSAibGliZ2V0dGV4dC5oIgorKy8qIFByb3ZpZGUgZHVtbXkgaW1wbGVtZW50YXRpb24gaWYgdGhpcyBpcyBvdXRzaWRlIGdsaWJjLiAgKi8KKysjIGRlZmluZSBfX2xpYmNfcndsb2NrX2RlZmluZShDTEFTUywgTkFNRSkKKysjIGRlZmluZSBfX2xpYmNfcndsb2NrX3dybG9jayhOQU1FKQorKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfdW5sb2NrKE5BTUUpCisrI2VuZGlmCisrCisrLyogVGhlIGludGVybmFsIHZhcmlhYmxlcyBpbiB0aGUgc3RhbmRhbG9uZSBsaWJpbnRsLmEgbXVzdCBoYXZlIGRpZmZlcmVudAorKyAgIG5hbWVzIHRoYW4gdGhlIGludGVybmFsIHZhcmlhYmxlcyBpbiBHTlUgbGliYywgb3RoZXJ3aXNlIHByb2dyYW1zCisrICAgdXNpbmcgbGliaW50bC5hIGNhbm5vdCBiZSBsaW5rZWQgc3RhdGljYWxseS4gICovCisrI2lmICFkZWZpbmVkIF9MSUJDCisrIyBkZWZpbmUgX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4gbGliaW50bF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluCisrIyBkZWZpbmUgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gbGliaW50bF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluCisgI2VuZGlmCisgCisgLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworIAorIC8qIE5hbWUgb2YgdGhlIGRlZmF1bHQgdGV4dCBkb21haW4uICAqLworLWV4dGVybiBjb25zdCBjaGFyIF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluW107CisrZXh0ZXJuIGNvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW5bXSBhdHRyaWJ1dGVfaGlkZGVuOworIAorIC8qIERlZmF1bHQgdGV4dCBkb21haW4gaW4gd2hpY2ggZW50cmllcyBmb3IgZ2V0dGV4dCgzKSBhcmUgdG8gYmUgZm91bmQuICAqLworLWV4dGVybiBjb25zdCBjaGFyICpfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKytleHRlcm4gY29uc3QgY2hhciAqX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gYXR0cmlidXRlX2hpZGRlbjsKKyAKKyAKKyAvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCitAQCAtNTQsNTAgKzYzLDc2IEBACisgICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKyAjaWZkZWYgX0xJQkMKKyAjIGRlZmluZSBURVhURE9NQUlOIF9fdGV4dGRvbWFpbgorLSMgZGVmaW5lIHN0cmR1cChzdHIpIF9fc3RyZHVwIChzdHIpCisrIyBpZm5kZWYgc3RyZHVwCisrIyAgZGVmaW5lIHN0cmR1cChzdHIpIF9fc3RyZHVwIChzdHIpCisrIyBlbmRpZgorICNlbHNlCistIyBkZWZpbmUgVEVYVERPTUFJTiB0ZXh0ZG9tYWluX18KKysjIGRlZmluZSBURVhURE9NQUlOIGxpYmludGxfdGV4dGRvbWFpbgorICNlbmRpZgorIAorKy8qIExvY2sgdmFyaWFibGUgdG8gcHJvdGVjdCB0aGUgZ2xvYmFsIGRhdGEgaW4gdGhlIGdldHRleHQgaW1wbGVtZW50YXRpb24uICAqLworK19fbGliY19yd2xvY2tfZGVmaW5lIChleHRlcm4sIF9ubF9zdGF0ZV9sb2NrIGF0dHJpYnV0ZV9oaWRkZW4pCisrCisgLyogU2V0IHRoZSBjdXJyZW50IGRlZmF1bHQgbWVzc2FnZSBjYXRhbG9nIHRvIERPTUFJTk5BTUUuCisgICAgSWYgRE9NQUlOTkFNRSBpcyBudWxsLCByZXR1cm4gdGhlIGN1cnJlbnQgZGVmYXVsdC4KKyAgICBJZiBET01BSU5OQU1FIGlzICIiLCByZXNldCB0byB0aGUgZGVmYXVsdCBvZiAibWVzc2FnZXMiLiAgKi8KKyBjaGFyICoKKy1URVhURE9NQUlOIChkb21haW5uYW1lKQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKytURVhURE9NQUlOIChjb25zdCBjaGFyICpkb21haW5uYW1lKQorIHsKKy0gIGNoYXIgKm9sZDsKKysgIGNoYXIgKm5ld19kb21haW47CisrICBjaGFyICpvbGRfZG9tYWluOworIAorICAgLyogQSBOVUxMIHBvaW50ZXIgcmVxdWVzdHMgdGhlIGN1cnJlbnQgc2V0dGluZy4gICovCisgICBpZiAoZG9tYWlubmFtZSA9PSBOVUxMKQorICAgICByZXR1cm4gKGNoYXIgKikgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW47CisgCistICBvbGQgPSAoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKysgIF9fbGliY19yd2xvY2tfd3Jsb2NrIChfbmxfc3RhdGVfbG9jayk7CisrCisrICBvbGRfZG9tYWluID0gKGNoYXIgKikgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW47CisgCisgICAvKiBJZiBkb21haW4gbmFtZSBpcyB0aGUgbnVsbCBzdHJpbmcgc2V0IHRvIGRlZmF1bHQgZG9tYWluICJtZXNzYWdlcyIuICAqLworICAgaWYgKGRvbWFpbm5hbWVbMF0gPT0gJ1wwJworICAgICAgIHx8IHN0cmNtcCAoZG9tYWlubmFtZSwgX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4pID09IDApCistICAgIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluID0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW47CisrICAgIHsKKysgICAgICBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiA9IF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluOworKyAgICAgIG5ld19kb21haW4gPSAoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKysgICAgfQorKyAgZWxzZSBpZiAoc3RyY21wIChkb21haW5uYW1lLCBvbGRfZG9tYWluKSA9PSAwKQorKyAgICAvKiBUaGlzIGNhbiBoYXBwZW4gYW5kIHBlb3BsZSB3aWxsIHVzZSBpdCB0byBzaWduYWwgdGhhdCBzb21lCisrICAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlIGNoYW5nZWQuICAqLworKyAgICBuZXdfZG9tYWluID0gb2xkX2RvbWFpbjsKKyAgIGVsc2UKKyAgICAgeworICAgICAgIC8qIElmIHRoZSBmb2xsb3dpbmcgbWFsbG9jIGZhaWxzIGBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbicKKyAJIHdpbGwgYmUgTlVMTC4gIFRoaXMgdmFsdWUgd2lsbCBiZSByZXR1cm5lZCBhbmQgc28gc2lnbmFscyB3ZQorIAkgYXJlIG91dCBvZiBjb3JlLiAgKi8KKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCistICAgICAgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBzdHJkdXAgKGRvbWFpbm5hbWUpOworKyAgICAgIG5ld19kb21haW4gPSBzdHJkdXAgKGRvbWFpbm5hbWUpOworICNlbHNlCisgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoZG9tYWlubmFtZSkgKyAxOworLSAgICAgIGNoYXIgKmNwID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworLSAgICAgIGlmIChjcCAhPSBOVUxMKQorLQltZW1jcHkgKGNwLCBkb21haW5uYW1lLCBsZW4pOworLSAgICAgIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluID0gY3A7CisrICAgICAgbmV3X2RvbWFpbiA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKysgICAgICBpZiAobmV3X2RvbWFpbiAhPSBOVUxMKQorKwltZW1jcHkgKG5ld19kb21haW4sIGRvbWFpbm5hbWUsIGxlbik7CisgI2VuZGlmCisrCisrICAgICAgaWYgKG5ld19kb21haW4gIT0gTlVMTCkKKysJX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBuZXdfZG9tYWluOworICAgICB9CisgCistICBpZiAob2xkICE9IF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluKQorLSAgICBmcmVlIChvbGQpOworKyAgLyogV2UgdXNlIHRoaXMgcG9zc2liaWxpdHkgdG8gc2lnbmFsIGEgY2hhbmdlIG9mIHRoZSBsb2FkZWQgY2F0YWxvZ3MKKysgICAgIHNpbmNlIHRoaXMgaXMgbW9zdCBsaWtlbHkgdGhlIGNhc2UgYW5kIHRoZXJlIGlzIG5vIG90aGVyIGVhc3kgd2UKKysgICAgIHRvIGRvIGl0LiAgRG8gaXQgb25seSB3aGVuIHRoZSBjYWxsIHdhcyBzdWNjZXNzZnVsLiAgKi8KKysgIGlmIChuZXdfZG9tYWluICE9IE5VTEwpCisrICAgIHsKKysgICAgICArK19ubF9tc2dfY2F0X2NudHI7CisgCistICByZXR1cm4gKGNoYXIgKikgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW47CisrICAgICAgaWYgKG9sZF9kb21haW4gIT0gbmV3X2RvbWFpbiAmJiBvbGRfZG9tYWluICE9IF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluKQorKwlmcmVlIChvbGRfZG9tYWluKTsKKysgICAgfQorKworKyAgX19saWJjX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKysKKysgIHJldHVybiBuZXdfZG9tYWluOworIH0KKyAKKyAjaWZkZWYgX0xJQkMKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC92YXNucHJpbnRmLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvdmFzbnByaW50Zi5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjYyNzAxNDI0IC0wNDAwCitAQCAtMCwwICsxLDg4NyBAQAorKy8qIHZzcHJpbnRmIHdpdGggYXV0b21hdGljIG1lbW9yeSBhbGxvY2F0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBUZWxsIGdsaWJjJ3MgPHN0ZGlvLmg+IHRvIHByb3ZpZGUgYSBwcm90b3R5cGUgZm9yIHNucHJpbnRmKCkuCisrICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisrICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRSAgICAxCisrI2VuZGlmCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKyNpZm5kZWYgSU5fTElCSU5UTAorKyMgaW5jbHVkZSA8YWxsb2NhLmg+CisrI2VuZGlmCisrCisrLyogU3BlY2lmaWNhdGlvbi4gICovCisrI2lmIFdJREVfQ0hBUl9WRVJTSU9OCisrIyBpbmNsdWRlICJ2YXNud3ByaW50Zi5oIgorKyNlbHNlCisrIyBpbmNsdWRlICJ2YXNucHJpbnRmLmgiCisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CS8qIHNucHJpbnRmKCksIHNwcmludGYoKSAqLworKyNpbmNsdWRlIDxzdGRsaWIuaD4JLyogYWJvcnQoKSwgbWFsbG9jKCksIHJlYWxsb2MoKSwgZnJlZSgpICovCisrI2luY2x1ZGUgPHN0cmluZy5oPgkvKiBtZW1jcHkoKSwgc3RybGVuKCkgKi8KKysjaW5jbHVkZSA8ZXJybm8uaD4JLyogZXJybm8gKi8KKysjaW5jbHVkZSA8bGltaXRzLmg+CS8qIENIQVJfQklUICovCisrI2luY2x1ZGUgPGZsb2F0Lmg+CS8qIERCTF9NQVhfRVhQLCBMREJMX01BWF9FWFAgKi8KKysjaWYgV0lERV9DSEFSX1ZFUlNJT04KKysjIGluY2x1ZGUgIndwcmludGYtcGFyc2UuaCIKKysjZWxzZQorKyMgaW5jbHVkZSAicHJpbnRmLXBhcnNlLmgiCisrI2VuZGlmCisrCisrLyogQ2hlY2tlZCBzaXplX3QgY29tcHV0YXRpb25zLiAgKi8KKysjaW5jbHVkZSAieHNpemUuaCIKKysKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrIyBpZmRlZiBIQVZFX1dDU0xFTgorKyMgIGRlZmluZSBsb2NhbF93Y3NsZW4gd2NzbGVuCisrIyBlbHNlCisrICAgLyogU29sYXJpcyAyLjUuMSBoYXMgd2NzbGVuKCkgaW4gYSBzZXBhcmF0ZSBsaWJyYXJ5IGxpYncuc28uIFRvIGF2b2lkCisrICAgICAgYSBkZXBlbmRlbmN5IHRvd2FyZHMgdGhpcyBsaWJyYXJ5LCBoZXJlIGlzIGEgbG9jYWwgc3Vic3RpdHV0ZS4KKysgICAgICBEZWZpbmUgdGhpcyBzdWJzdGl0dXRlIG9ubHkgb25jZSwgZXZlbiBpZiB0aGlzIGZpbGUgaXMgaW5jbHVkZWQKKysgICAgICB0d2ljZSBpbiB0aGUgc2FtZSBjb21waWxhdGlvbiB1bml0LiAgKi8KKysjICBpZm5kZWYgbG9jYWxfd2NzbGVuX2RlZmluZWQKKysjICAgZGVmaW5lIGxvY2FsX3djc2xlbl9kZWZpbmVkIDEKKytzdGF0aWMgc2l6ZV90CisrbG9jYWxfd2NzbGVuIChjb25zdCB3Y2hhcl90ICpzKQorK3sKKysgIGNvbnN0IHdjaGFyX3QgKnB0cjsKKysKKysgIGZvciAocHRyID0gczsgKnB0ciAhPSAod2NoYXJfdCkgMDsgcHRyKyspCisrICAgIDsKKysgIHJldHVybiBwdHIgLSBzOworK30KKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaWYgV0lERV9DSEFSX1ZFUlNJT04KKysjIGRlZmluZSBWQVNOUFJJTlRGIHZhc253cHJpbnRmCisrIyBkZWZpbmUgQ0hBUl9UIHdjaGFyX3QKKysjIGRlZmluZSBESVJFQ1RJVkUgd2NoYXJfdF9kaXJlY3RpdmUKKysjIGRlZmluZSBESVJFQ1RJVkVTIHdjaGFyX3RfZGlyZWN0aXZlcworKyMgZGVmaW5lIFBSSU5URl9QQVJTRSB3cHJpbnRmX3BhcnNlCisrIyBkZWZpbmUgVVNFX1NOUFJJTlRGIDEKKysjIGlmIEhBVkVfREVDTF9fU05XUFJJTlRGCisrICAgLyogT24gV2luZG93cywgdGhlIGZ1bmN0aW9uIHN3cHJpbnRmKCkgaGFzIGEgZGlmZmVyZW50IHNpZ25hdHVyZSB0aGFuCisrICAgICAgb24gVW5peDsgd2UgdXNlIHRoZSBfc253cHJpbnRmKCkgZnVuY3Rpb24gaW5zdGVhZC4gICovCisrIyAgZGVmaW5lIFNOUFJJTlRGIF9zbndwcmludGYKKysjIGVsc2UKKysgICAvKiBVbml4LiAgKi8KKysjICBkZWZpbmUgU05QUklOVEYgc3dwcmludGYKKysjIGVuZGlmCisrI2Vsc2UKKysjIGRlZmluZSBWQVNOUFJJTlRGIHZhc25wcmludGYKKysjIGRlZmluZSBDSEFSX1QgY2hhcgorKyMgZGVmaW5lIERJUkVDVElWRSBjaGFyX2RpcmVjdGl2ZQorKyMgZGVmaW5lIERJUkVDVElWRVMgY2hhcl9kaXJlY3RpdmVzCisrIyBkZWZpbmUgUFJJTlRGX1BBUlNFIHByaW50Zl9wYXJzZQorKyMgZGVmaW5lIFVTRV9TTlBSSU5URiAoSEFWRV9ERUNMX19TTlBSSU5URiB8fCBIQVZFX1NOUFJJTlRGKQorKyMgaWYgSEFWRV9ERUNMX19TTlBSSU5URgorKyAgIC8qIFdpbmRvd3MuICAqLworKyMgIGRlZmluZSBTTlBSSU5URiBfc25wcmludGYKKysjIGVsc2UKKysgICAvKiBVbml4LiAgKi8KKysjICBkZWZpbmUgU05QUklOVEYgc25wcmludGYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrQ0hBUl9UICoKKytWQVNOUFJJTlRGIChDSEFSX1QgKnJlc3VsdGJ1Ziwgc2l6ZV90ICpsZW5ndGhwLCBjb25zdCBDSEFSX1QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorK3sKKysgIERJUkVDVElWRVMgZDsKKysgIGFyZ3VtZW50cyBhOworKworKyAgaWYgKFBSSU5URl9QQVJTRSAoZm9ybWF0LCAmZCwgJmEpIDwgMCkKKysgICAgeworKyAgICAgIGVycm5vID0gRUlOVkFMOworKyAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrCisrI2RlZmluZSBDTEVBTlVQKCkgXAorKyAgZnJlZSAoZC5kaXIpOwkJCQkJCQkJXAorKyAgaWYgKGEuYXJnKQkJCQkJCQkJXAorKyAgICBmcmVlIChhLmFyZyk7CisrCisrICBpZiAocHJpbnRmX2ZldGNoYXJncyAoYXJncywgJmEpIDwgMCkKKysgICAgeworKyAgICAgIENMRUFOVVAgKCk7CisrICAgICAgZXJybm8gPSBFSU5WQUw7CisrICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysgIHsKKysgICAgc2l6ZV90IGJ1Zl9uZWVkZWRsZW5ndGg7CisrICAgIENIQVJfVCAqYnVmOworKyAgICBDSEFSX1QgKmJ1Zl9tYWxsb2NlZDsKKysgICAgY29uc3QgQ0hBUl9UICpjcDsKKysgICAgc2l6ZV90IGk7CisrICAgIERJUkVDVElWRSAqZHA7CisrICAgIC8qIE91dHB1dCBzdHJpbmcgYWNjdW11bGF0b3IuICAqLworKyAgICBDSEFSX1QgKnJlc3VsdDsKKysgICAgc2l6ZV90IGFsbG9jYXRlZDsKKysgICAgc2l6ZV90IGxlbmd0aDsKKysKKysgICAgLyogQWxsb2NhdGUgYSBzbWFsbCBidWZmZXIgdGhhdCB3aWxsIGhvbGQgYSBkaXJlY3RpdmUgcGFzc2VkIHRvCisrICAgICAgIHNwcmludGYgb3Igc25wcmludGYuICAqLworKyAgICBidWZfbmVlZGVkbGVuZ3RoID0KKysgICAgICB4c3VtNCAoNywgZC5tYXhfd2lkdGhfbGVuZ3RoLCBkLm1heF9wcmVjaXNpb25fbGVuZ3RoLCA2KTsKKysjaWYgSEFWRV9BTExPQ0EKKysgICAgaWYgKGJ1Zl9uZWVkZWRsZW5ndGggPCA0MDAwIC8gc2l6ZW9mIChDSEFSX1QpKQorKyAgICAgIHsKKysJYnVmID0gKENIQVJfVCAqKSBhbGxvY2EgKGJ1Zl9uZWVkZWRsZW5ndGggKiBzaXplb2YgKENIQVJfVCkpOworKwlidWZfbWFsbG9jZWQgPSBOVUxMOworKyAgICAgIH0KKysgICAgZWxzZQorKyNlbmRpZgorKyAgICAgIHsKKysJc2l6ZV90IGJ1Zl9tZW1zaXplID0geHRpbWVzIChidWZfbmVlZGVkbGVuZ3RoLCBzaXplb2YgKENIQVJfVCkpOworKwlpZiAoc2l6ZV9vdmVyZmxvd19wIChidWZfbWVtc2l6ZSkpCisrCSAgZ290byBvdXRfb2ZfbWVtb3J5XzE7CisrCWJ1ZiA9IChDSEFSX1QgKikgbWFsbG9jIChidWZfbWVtc2l6ZSk7CisrCWlmIChidWYgPT0gTlVMTCkKKysJICBnb3RvIG91dF9vZl9tZW1vcnlfMTsKKysJYnVmX21hbGxvY2VkID0gYnVmOworKyAgICAgIH0KKysKKysgICAgaWYgKHJlc3VsdGJ1ZiAhPSBOVUxMKQorKyAgICAgIHsKKysJcmVzdWx0ID0gcmVzdWx0YnVmOworKwlhbGxvY2F0ZWQgPSAqbGVuZ3RocDsKKysgICAgICB9CisrICAgIGVsc2UKKysgICAgICB7CisrCXJlc3VsdCA9IE5VTEw7CisrCWFsbG9jYXRlZCA9IDA7CisrICAgICAgfQorKyAgICBsZW5ndGggPSAwOworKyAgICAvKiBJbnZhcmlhbnRzOgorKyAgICAgICByZXN1bHQgaXMgZWl0aGVyID09IHJlc3VsdGJ1ZiBvciA9PSBOVUxMIG9yIG1hbGxvYy1hbGxvY2F0ZWQuCisrICAgICAgIElmIGxlbmd0aCA+IDAsIHRoZW4gcmVzdWx0ICE9IE5VTEwuICAqLworKworKyAgICAvKiBFbnN1cmVzIHRoYXQgYWxsb2NhdGVkID49IG5lZWRlZC4gIEFib3J0cyB0aHJvdWdoIGEganVtcCB0bworKyAgICAgICBvdXRfb2ZfbWVtb3J5IGlmIG5lZWRlZCBpcyBTSVpFX01BWCBvciBvdGhlcndpc2UgdG9vIGJpZy4gICovCisrI2RlZmluZSBFTlNVUkVfQUxMT0NBVElPTihuZWVkZWQpIFwKKysgICAgaWYgKChuZWVkZWQpID4gYWxsb2NhdGVkKQkJCQkJCSAgICAgXAorKyAgICAgIHsJCQkJCQkJCQkgICAgIFwKKysJc2l6ZV90IG1lbW9yeV9zaXplOwkJCQkJCSAgICAgXAorKwlDSEFSX1QgKm1lbW9yeTsJCQkJCQkJICAgICBcCisrCQkJCQkJCQkJICAgICBcCisrCWFsbG9jYXRlZCA9IChhbGxvY2F0ZWQgPiAwID8geHRpbWVzIChhbGxvY2F0ZWQsIDIpIDogMTIpOwkgICAgIFwKKysJaWYgKChuZWVkZWQpID4gYWxsb2NhdGVkKQkJCQkJICAgICBcCisrCSAgYWxsb2NhdGVkID0gKG5lZWRlZCk7CQkJCQkJICAgICBcCisrCW1lbW9yeV9zaXplID0geHRpbWVzIChhbGxvY2F0ZWQsIHNpemVvZiAoQ0hBUl9UKSk7CQkgICAgIFwKKysJaWYgKHNpemVfb3ZlcmZsb3dfcCAobWVtb3J5X3NpemUpKQkJCQkgICAgIFwKKysJICBnb3RvIG91dF9vZl9tZW1vcnk7CQkJCQkJICAgICBcCisrCWlmIChyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKQkJCSAgICAgXAorKwkgIG1lbW9yeSA9IChDSEFSX1QgKikgbWFsbG9jIChtZW1vcnlfc2l6ZSk7CQkJICAgICBcCisrCWVsc2UJCQkJCQkJCSAgICAgXAorKwkgIG1lbW9yeSA9IChDSEFSX1QgKikgcmVhbGxvYyAocmVzdWx0LCBtZW1vcnlfc2l6ZSk7CQkgICAgIFwKKysJaWYgKG1lbW9yeSA9PSBOVUxMKQkJCQkJCSAgICAgXAorKwkgIGdvdG8gb3V0X29mX21lbW9yeTsJCQkJCQkgICAgIFwKKysJaWYgKHJlc3VsdCA9PSByZXN1bHRidWYgJiYgbGVuZ3RoID4gMCkJCQkJICAgICBcCisrCSAgbWVtY3B5IChtZW1vcnksIHJlc3VsdCwgbGVuZ3RoICogc2l6ZW9mIChDSEFSX1QpKTsJCSAgICAgXAorKwlyZXN1bHQgPSBtZW1vcnk7CQkJCQkJICAgICBcCisrICAgICAgfQorKworKyAgICBmb3IgKGNwID0gZm9ybWF0LCBpID0gMCwgZHAgPSAmZC5kaXJbMF07IDsgY3AgPSBkcC0+ZGlyX2VuZCwgaSsrLCBkcCsrKQorKyAgICAgIHsKKysJaWYgKGNwICE9IGRwLT5kaXJfc3RhcnQpCisrCSAgeworKwkgICAgc2l6ZV90IG4gPSBkcC0+ZGlyX3N0YXJ0IC0gY3A7CisrCSAgICBzaXplX3QgYXVnbWVudGVkX2xlbmd0aCA9IHhzdW0gKGxlbmd0aCwgbik7CisrCisrCSAgICBFTlNVUkVfQUxMT0NBVElPTiAoYXVnbWVudGVkX2xlbmd0aCk7CisrCSAgICBtZW1jcHkgKHJlc3VsdCArIGxlbmd0aCwgY3AsIG4gKiBzaXplb2YgKENIQVJfVCkpOworKwkgICAgbGVuZ3RoID0gYXVnbWVudGVkX2xlbmd0aDsKKysJICB9CisrCWlmIChpID09IGQuY291bnQpCisrCSAgYnJlYWs7CisrCisrCS8qIEV4ZWN1dGUgYSBzaW5nbGUgZGlyZWN0aXZlLiAgKi8KKysJaWYgKGRwLT5jb252ZXJzaW9uID09ICclJykKKysJICB7CisrCSAgICBzaXplX3QgYXVnbWVudGVkX2xlbmd0aDsKKysKKysJICAgIGlmICghKGRwLT5hcmdfaW5kZXggPT0gQVJHX05PTkUpKQorKwkgICAgICBhYm9ydCAoKTsKKysJICAgIGF1Z21lbnRlZF9sZW5ndGggPSB4c3VtIChsZW5ndGgsIDEpOworKwkgICAgRU5TVVJFX0FMTE9DQVRJT04gKGF1Z21lbnRlZF9sZW5ndGgpOworKwkgICAgcmVzdWx0W2xlbmd0aF0gPSAnJSc7CisrCSAgICBsZW5ndGggPSBhdWdtZW50ZWRfbGVuZ3RoOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIGlmICghKGRwLT5hcmdfaW5kZXggIT0gQVJHX05PTkUpKQorKwkgICAgICBhYm9ydCAoKTsKKysKKysJICAgIGlmIChkcC0+Y29udmVyc2lvbiA9PSAnbicpCisrCSAgICAgIHsKKysJCXN3aXRjaCAoYS5hcmdbZHAtPmFyZ19pbmRleF0udHlwZSkKKysJCSAgeworKwkJICBjYXNlIFRZUEVfQ09VTlRfU0NIQVJfUE9JTlRFUjoKKysJCSAgICAqYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NvdW50X3NjaGFyX3BvaW50ZXIgPSBsZW5ndGg7CisrCQkgICAgYnJlYWs7CisrCQkgIGNhc2UgVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSOgorKwkJICAgICphLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfY291bnRfc2hvcnRfcG9pbnRlciA9IGxlbmd0aDsKKysJCSAgICBicmVhazsKKysJCSAgY2FzZSBUWVBFX0NPVU5UX0lOVF9QT0lOVEVSOgorKwkJICAgICphLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfY291bnRfaW50X3BvaW50ZXIgPSBsZW5ndGg7CisrCQkgICAgYnJlYWs7CisrCQkgIGNhc2UgVFlQRV9DT1VOVF9MT05HSU5UX1BPSU5URVI6CisrCQkgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9sb25naW50X3BvaW50ZXIgPSBsZW5ndGg7CisrCQkgICAgYnJlYWs7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrCQkgIGNhc2UgVFlQRV9DT1VOVF9MT05HTE9OR0lOVF9QT0lOVEVSOgorKwkJICAgICphLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfY291bnRfbG9uZ2xvbmdpbnRfcG9pbnRlciA9IGxlbmd0aDsKKysJCSAgICBicmVhazsKKysjZW5kaWYKKysJCSAgZGVmYXVsdDoKKysJCSAgICBhYm9ydCAoKTsKKysJCSAgfQorKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCWFyZ190eXBlIHR5cGUgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS50eXBlOworKwkJQ0hBUl9UICpwOworKwkJdW5zaWduZWQgaW50IHByZWZpeF9jb3VudDsKKysJCWludCBwcmVmaXhlc1syXTsKKysjaWYgIVVTRV9TTlBSSU5URgorKwkJc2l6ZV90IHRtcF9sZW5ndGg7CisrCQlDSEFSX1QgdG1wYnVmWzcwMF07CisrCQlDSEFSX1QgKnRtcDsKKysKKysJCS8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBvZiBzdWZmaWNpZW50IHNpemUgZm9yIGNhbGxpbmcKKysJCSAgIHNwcmludGYuICAqLworKwkJeworKwkJICBzaXplX3Qgd2lkdGg7CisrCQkgIHNpemVfdCBwcmVjaXNpb247CisrCisrCQkgIHdpZHRoID0gMDsKKysJCSAgaWYgKGRwLT53aWR0aF9zdGFydCAhPSBkcC0+d2lkdGhfZW5kKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChkcC0+d2lkdGhfYXJnX2luZGV4ICE9IEFSR19OT05FKQorKwkJCXsKKysJCQkgIGludCBhcmc7CisrCisrCQkJICBpZiAoIShhLmFyZ1tkcC0+d2lkdGhfYXJnX2luZGV4XS50eXBlID09IFRZUEVfSU5UKSkKKysJCQkgICAgYWJvcnQgKCk7CisrCQkJICBhcmcgPSBhLmFyZ1tkcC0+d2lkdGhfYXJnX2luZGV4XS5hLmFfaW50OworKwkJCSAgd2lkdGggPSAoYXJnIDwgMCA/ICh1bnNpZ25lZCBpbnQpICgtYXJnKSA6IGFyZyk7CisrCQkJfQorKwkJICAgICAgZWxzZQorKwkJCXsKKysJCQkgIGNvbnN0IENIQVJfVCAqZGlnaXRwID0gZHAtPndpZHRoX3N0YXJ0OworKworKwkJCSAgZG8KKysJCQkgICAgd2lkdGggPSB4c3VtICh4dGltZXMgKHdpZHRoLCAxMCksICpkaWdpdHArKyAtICcwJyk7CisrCQkJICB3aGlsZSAoZGlnaXRwICE9IGRwLT53aWR0aF9lbmQpOworKwkJCX0KKysJCSAgICB9CisrCisrCQkgIHByZWNpc2lvbiA9IDY7CisrCQkgIGlmIChkcC0+cHJlY2lzaW9uX3N0YXJ0ICE9IGRwLT5wcmVjaXNpb25fZW5kKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCAhPSBBUkdfTk9ORSkKKysJCQl7CisrCQkJICBpbnQgYXJnOworKworKwkJCSAgaWYgKCEoYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9JTlQpKQorKwkJCSAgICBhYm9ydCAoKTsKKysJCQkgIGFyZyA9IGEuYXJnW2RwLT5wcmVjaXNpb25fYXJnX2luZGV4XS5hLmFfaW50OworKwkJCSAgcHJlY2lzaW9uID0gKGFyZyA8IDAgPyAwIDogYXJnKTsKKysJCQl9CisrCQkgICAgICBlbHNlCisrCQkJeworKwkJCSAgY29uc3QgQ0hBUl9UICpkaWdpdHAgPSBkcC0+cHJlY2lzaW9uX3N0YXJ0ICsgMTsKKysKKysJCQkgIHByZWNpc2lvbiA9IDA7CisrCQkJICBkbworKwkJCSAgICBwcmVjaXNpb24gPSB4c3VtICh4dGltZXMgKHByZWNpc2lvbiwgMTApLCAqZGlnaXRwKysgLSAnMCcpOworKwkJCSAgd2hpbGUgKGRpZ2l0cCAhPSBkcC0+cHJlY2lzaW9uX2VuZCk7CisrCQkJfQorKwkJICAgIH0KKysKKysJCSAgc3dpdGNoIChkcC0+Y29udmVyc2lvbikKKysJCSAgICB7CisrCisrCQkgICAgY2FzZSAnZCc6IGNhc2UgJ2knOiBjYXNlICd1JzoKKysjIGlmZGVmIEhBVkVfTE9OR19MT05HCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdMT05HSU5UIHx8IHR5cGUgPT0gVFlQRV9VTE9OR0xPTkdJTlQpCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nIGxvbmcpICogQ0hBUl9CSVQKKysJCQkJCSAgKiAwLjMwMTAzIC8qIGJpbmFyeSAtPiBkZWNpbWFsICovCisrCQkJCQkgICogMiAvKiBlc3RpbWF0ZSBmb3IgRkxBR19HUk9VUCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKysJCSAgICAgIGVsc2UKKysjIGVuZGlmCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HSU5UKQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZykgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMzAxMDMgLyogYmluYXJ5IC0+IGRlY2ltYWwgKi8KKysJCQkJCSAgKiAyIC8qIGVzdGltYXRlIGZvciBGTEFHX0dST1VQICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDE7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiAqLworKwkJICAgICAgZWxzZQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgaW50KSAqIENIQVJfQklUCisrCQkJCQkgICogMC4zMDEwMyAvKiBiaW5hcnkgLT4gZGVjaW1hbCAqLworKwkJCQkJICAqIDIgLyogZXN0aW1hdGUgZm9yIEZMQUdfR1JPVVAgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMTsgLyogYWNjb3VudCBmb3IgbGVhZGluZyBzaWduICovCisrCQkgICAgICBicmVhazsKKysKKysJCSAgICBjYXNlICdvJzoKKysjIGlmZGVmIEhBVkVfTE9OR19MT05HCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdMT05HSU5UIHx8IHR5cGUgPT0gVFlQRV9VTE9OR0xPTkdJTlQpCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nIGxvbmcpICogQ0hBUl9CSVQKKysJCQkJCSAgKiAwLjMzMzMzNCAvKiBiaW5hcnkgLT4gb2N0YWwgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMTsgLyogYWNjb3VudCBmb3IgbGVhZGluZyBzaWduICovCisrCQkgICAgICBlbHNlCisrIyBlbmRpZgorKwkJICAgICAgaWYgKHR5cGUgPT0gVFlQRV9MT05HSU5UIHx8IHR5cGUgPT0gVFlQRV9VTE9OR0lOVCkKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcpICogQ0hBUl9CSVQKKysJCQkJCSAgKiAwLjMzMzMzNCAvKiBiaW5hcnkgLT4gb2N0YWwgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMTsgLyogYWNjb3VudCBmb3IgbGVhZGluZyBzaWduICovCisrCQkgICAgICBlbHNlCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBpbnQpICogQ0hBUl9CSVQKKysJCQkJCSAgKiAwLjMzMzMzNCAvKiBiaW5hcnkgLT4gb2N0YWwgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMTsgLyogYWNjb3VudCBmb3IgbGVhZGluZyBzaWduICovCisrCQkgICAgICBicmVhazsKKysKKysJCSAgICBjYXNlICd4JzogY2FzZSAnWCc6CisrIyBpZmRlZiBIQVZFX0xPTkdfTE9ORworKwkJICAgICAgaWYgKHR5cGUgPT0gVFlQRV9MT05HTE9OR0lOVCB8fCB0eXBlID09IFRZUEVfVUxPTkdMT05HSU5UKQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZyBsb25nKSAqIENIQVJfQklUCisrCQkJCQkgICogMC4yNSAvKiBiaW5hcnkgLT4gaGV4YWRlY2ltYWwgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMjsgLyogYWNjb3VudCBmb3IgbGVhZGluZyBzaWduIG9yIGFsdGVybmF0ZSBmb3JtICovCisrCQkgICAgICBlbHNlCisrIyBlbmRpZgorKwkJICAgICAgaWYgKHR5cGUgPT0gVFlQRV9MT05HSU5UIHx8IHR5cGUgPT0gVFlQRV9VTE9OR0lOVCkKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcpICogQ0hBUl9CSVQKKysJCQkJCSAgKiAwLjI1IC8qIGJpbmFyeSAtPiBoZXhhZGVjaW1hbCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAyOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gb3IgYWx0ZXJuYXRlIGZvcm0gKi8KKysJCSAgICAgIGVsc2UKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGludCkgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMjUgLyogYmluYXJ5IC0+IGhleGFkZWNpbWFsICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDI7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiBvciBhbHRlcm5hdGUgZm9ybSAqLworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgY2FzZSAnZic6IGNhc2UgJ0YnOgorKyMgaWZkZWYgSEFWRV9MT05HX0RPVUJMRQorKwkJICAgICAgaWYgKHR5cGUgPT0gVFlQRV9MT05HRE9VQkxFKQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKExEQkxfTUFYX0VYUAorKwkJCQkJICAqIDAuMzAxMDMgLyogYmluYXJ5IC0+IGRlY2ltYWwgKi8KKysJCQkJCSAgKiAyIC8qIGVzdGltYXRlIGZvciBGTEFHX0dST1VQICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDEwOyAvKiBzaWduLCBkZWNpbWFsIHBvaW50IGV0Yy4gKi8KKysJCSAgICAgIGVsc2UKKysjIGVuZGlmCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoREJMX01BWF9FWFAKKysJCQkJCSAgKiAwLjMwMTAzIC8qIGJpbmFyeSAtPiBkZWNpbWFsICovCisrCQkJCQkgICogMiAvKiBlc3RpbWF0ZSBmb3IgRkxBR19HUk9VUCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxMDsgLyogc2lnbiwgZGVjaW1hbCBwb2ludCBldGMuICovCisrCQkgICAgICB0bXBfbGVuZ3RoID0geHN1bSAodG1wX2xlbmd0aCwgcHJlY2lzaW9uKTsKKysJCSAgICAgIGJyZWFrOworKworKwkJICAgIGNhc2UgJ2UnOiBjYXNlICdFJzogY2FzZSAnZyc6IGNhc2UgJ0cnOgorKwkJICAgIGNhc2UgJ2EnOiBjYXNlICdBJzoKKysJCSAgICAgIHRtcF9sZW5ndGggPQorKwkJCTEyOyAvKiBzaWduLCBkZWNpbWFsIHBvaW50LCBleHBvbmVudCBldGMuICovCisrCQkgICAgICB0bXBfbGVuZ3RoID0geHN1bSAodG1wX2xlbmd0aCwgcHJlY2lzaW9uKTsKKysJCSAgICAgIGJyZWFrOworKworKwkJICAgIGNhc2UgJ2MnOgorKyMgaWYgZGVmaW5lZCBIQVZFX1dJTlRfVCAmJiAhV0lERV9DSEFSX1ZFUlNJT04KKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfV0lERV9DSEFSKQorKwkJCXRtcF9sZW5ndGggPSBNQl9DVVJfTUFYOworKwkJICAgICAgZWxzZQorKyMgZW5kaWYKKysJCQl0bXBfbGVuZ3RoID0gMTsKKysJCSAgICAgIGJyZWFrOworKworKwkJICAgIGNhc2UgJ3MnOgorKyMgaWZkZWYgSEFWRV9XQ0hBUl9UCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX1dJREVfU1RSSU5HKQorKwkJCXsKKysJCQkgIHRtcF9sZW5ndGggPQorKwkJCSAgICBsb2NhbF93Y3NsZW4gKGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV93aWRlX3N0cmluZyk7CisrCisrIyAgaWYgIVdJREVfQ0hBUl9WRVJTSU9OCisrCQkJICB0bXBfbGVuZ3RoID0geHRpbWVzICh0bXBfbGVuZ3RoLCBNQl9DVVJfTUFYKTsKKysjICBlbmRpZgorKwkJCX0KKysJCSAgICAgIGVsc2UKKysjIGVuZGlmCisrCQkJdG1wX2xlbmd0aCA9IHN0cmxlbiAoYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3N0cmluZyk7CisrCQkgICAgICBicmVhazsKKysKKysJCSAgICBjYXNlICdwJzoKKysJCSAgICAgIHRtcF9sZW5ndGggPQorKwkJCSh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHZvaWQgKikgKiBDSEFSX0JJVAorKwkJCQkJKiAwLjI1IC8qIGJpbmFyeSAtPiBoZXhhZGVjaW1hbCAqLworKwkJCQkgICAgICAgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDI7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgMHggKi8KKysJCSAgICAgIGJyZWFrOworKworKwkJICAgIGRlZmF1bHQ6CisrCQkgICAgICBhYm9ydCAoKTsKKysJCSAgICB9CisrCisrCQkgIGlmICh0bXBfbGVuZ3RoIDwgd2lkdGgpCisrCQkgICAgdG1wX2xlbmd0aCA9IHdpZHRoOworKworKwkJICB0bXBfbGVuZ3RoID0geHN1bSAodG1wX2xlbmd0aCwgMSk7IC8qIGFjY291bnQgZm9yIHRyYWlsaW5nIE5VTCAqLworKwkJfQorKworKwkJaWYgKHRtcF9sZW5ndGggPD0gc2l6ZW9mICh0bXBidWYpIC8gc2l6ZW9mIChDSEFSX1QpKQorKwkJICB0bXAgPSB0bXBidWY7CisrCQllbHNlCisrCQkgIHsKKysJCSAgICBzaXplX3QgdG1wX21lbXNpemUgPSB4dGltZXMgKHRtcF9sZW5ndGgsIHNpemVvZiAoQ0hBUl9UKSk7CisrCisrCQkgICAgaWYgKHNpemVfb3ZlcmZsb3dfcCAodG1wX21lbXNpemUpKQorKwkJICAgICAgLyogT3ZlcmZsb3csIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeS4gICovCisrCQkgICAgICBnb3RvIG91dF9vZl9tZW1vcnk7CisrCQkgICAgdG1wID0gKENIQVJfVCAqKSBtYWxsb2MgKHRtcF9tZW1zaXplKTsKKysJCSAgICBpZiAodG1wID09IE5VTEwpCisrCQkgICAgICAvKiBPdXQgb2YgbWVtb3J5LiAgKi8KKysJCSAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsKKysJCSAgfQorKyNlbmRpZgorKworKwkJLyogQ29uc3RydWN0IHRoZSBmb3JtYXQgc3RyaW5nIGZvciBjYWxsaW5nIHNucHJpbnRmIG9yCisrCQkgICBzcHJpbnRmLiAgKi8KKysJCXAgPSBidWY7CisrCQkqcCsrID0gJyUnOworKwkJaWYgKGRwLT5mbGFncyAmIEZMQUdfR1JPVVApCisrCQkgICpwKysgPSAnXCcnOworKwkJaWYgKGRwLT5mbGFncyAmIEZMQUdfTEVGVCkKKysJCSAgKnArKyA9ICctJzsKKysJCWlmIChkcC0+ZmxhZ3MgJiBGTEFHX1NIT1dTSUdOKQorKwkJICAqcCsrID0gJysnOworKwkJaWYgKGRwLT5mbGFncyAmIEZMQUdfU1BBQ0UpCisrCQkgICpwKysgPSAnICc7CisrCQlpZiAoZHAtPmZsYWdzICYgRkxBR19BTFQpCisrCQkgICpwKysgPSAnIyc7CisrCQlpZiAoZHAtPmZsYWdzICYgRkxBR19aRVJPKQorKwkJICAqcCsrID0gJzAnOworKwkJaWYgKGRwLT53aWR0aF9zdGFydCAhPSBkcC0+d2lkdGhfZW5kKQorKwkJICB7CisrCQkgICAgc2l6ZV90IG4gPSBkcC0+d2lkdGhfZW5kIC0gZHAtPndpZHRoX3N0YXJ0OworKwkJICAgIG1lbWNweSAocCwgZHAtPndpZHRoX3N0YXJ0LCBuICogc2l6ZW9mIChDSEFSX1QpKTsKKysJCSAgICBwICs9IG47CisrCQkgIH0KKysJCWlmIChkcC0+cHJlY2lzaW9uX3N0YXJ0ICE9IGRwLT5wcmVjaXNpb25fZW5kKQorKwkJICB7CisrCQkgICAgc2l6ZV90IG4gPSBkcC0+cHJlY2lzaW9uX2VuZCAtIGRwLT5wcmVjaXNpb25fc3RhcnQ7CisrCQkgICAgbWVtY3B5IChwLCBkcC0+cHJlY2lzaW9uX3N0YXJ0LCBuICogc2l6ZW9mIChDSEFSX1QpKTsKKysJCSAgICBwICs9IG47CisrCQkgIH0KKysKKysJCXN3aXRjaCAodHlwZSkKKysJCSAgeworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKwkJICBjYXNlIFRZUEVfTE9OR0xPTkdJTlQ6CisrCQkgIGNhc2UgVFlQRV9VTE9OR0xPTkdJTlQ6CisrCQkgICAgKnArKyA9ICdsJzsKKysJCSAgICAvKkZBTExUSFJPVUdIKi8KKysjZW5kaWYKKysJCSAgY2FzZSBUWVBFX0xPTkdJTlQ6CisrCQkgIGNhc2UgVFlQRV9VTE9OR0lOVDoKKysjaWZkZWYgSEFWRV9XSU5UX1QKKysJCSAgY2FzZSBUWVBFX1dJREVfQ0hBUjoKKysjZW5kaWYKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrCQkgIGNhc2UgVFlQRV9XSURFX1NUUklORzoKKysjZW5kaWYKKysJCSAgICAqcCsrID0gJ2wnOworKwkJICAgIGJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrCQkgIGNhc2UgVFlQRV9MT05HRE9VQkxFOgorKwkJICAgICpwKysgPSAnTCc7CisrCQkgICAgYnJlYWs7CisrI2VuZGlmCisrCQkgIGRlZmF1bHQ6CisrCQkgICAgYnJlYWs7CisrCQkgIH0KKysJCSpwID0gZHAtPmNvbnZlcnNpb247CisrI2lmIFVTRV9TTlBSSU5URgorKwkJcFsxXSA9ICclJzsKKysJCXBbMl0gPSAnbic7CisrCQlwWzNdID0gJ1wwJzsKKysjZWxzZQorKwkJcFsxXSA9ICdcMCc7CisrI2VuZGlmCisrCisrCQkvKiBDb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyBmb3IgY2FsbGluZyBzbnByaW50ZiBvciBzcHJpbnRmLiAgKi8KKysJCXByZWZpeF9jb3VudCA9IDA7CisrCQlpZiAoZHAtPndpZHRoX2FyZ19pbmRleCAhPSBBUkdfTk9ORSkKKysJCSAgeworKwkJICAgIGlmICghKGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9JTlQpKQorKwkJICAgICAgYWJvcnQgKCk7CisrCQkgICAgcHJlZml4ZXNbcHJlZml4X2NvdW50KytdID0gYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0uYS5hX2ludDsKKysJCSAgfQorKwkJaWYgKGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ICE9IEFSR19OT05FKQorKwkJICB7CisrCQkgICAgaWYgKCEoYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9JTlQpKQorKwkJICAgICAgYWJvcnQgKCk7CisrCQkgICAgcHJlZml4ZXNbcHJlZml4X2NvdW50KytdID0gYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLmEuYV9pbnQ7CisrCQkgIH0KKysKKysjaWYgVVNFX1NOUFJJTlRGCisrCQkvKiBQcmVwYXJlIGNoZWNraW5nIHdoZXRoZXIgc25wcmludGYgcmV0dXJucyB0aGUgY291bnQKKysJCSAgIHZpYSAlbi4gICovCisrCQlFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCAxKSk7CisrCQlyZXN1bHRbbGVuZ3RoXSA9ICdcMCc7CisrI2VuZGlmCisrCisrCQlmb3IgKDs7KQorKwkJICB7CisrCQkgICAgc2l6ZV90IG1heGxlbjsKKysJCSAgICBpbnQgY291bnQ7CisrCQkgICAgaW50IHJldGNvdW50OworKworKwkJICAgIG1heGxlbiA9IGFsbG9jYXRlZCAtIGxlbmd0aDsKKysJCSAgICBjb3VudCA9IC0xOworKwkJICAgIHJldGNvdW50ID0gMDsKKysKKysjaWYgVVNFX1NOUFJJTlRGCisrIyBkZWZpbmUgU05QUklOVEZfQlVGKGFyZykgXAorKwkJICAgIHN3aXRjaCAocHJlZml4X2NvdW50KQkJCQkgICAgXAorKwkJICAgICAgewkJCQkJCQkgICAgXAorKwkJICAgICAgY2FzZSAwOgkJCQkJCSAgICBcCisrCQkJcmV0Y291bnQgPSBTTlBSSU5URiAocmVzdWx0ICsgbGVuZ3RoLCBtYXhsZW4sIGJ1ZiwgIFwKKysJCQkJCSAgICAgYXJnLCAmY291bnQpOwkJICAgIFwKKysJCQlicmVhazsJCQkJCQkgICAgXAorKwkJICAgICAgY2FzZSAxOgkJCQkJCSAgICBcCisrCQkJcmV0Y291bnQgPSBTTlBSSU5URiAocmVzdWx0ICsgbGVuZ3RoLCBtYXhsZW4sIGJ1ZiwgIFwKKysJCQkJCSAgICAgcHJlZml4ZXNbMF0sIGFyZywgJmNvdW50KTsJICAgIFwKKysJCQlicmVhazsJCQkJCQkgICAgXAorKwkJICAgICAgY2FzZSAyOgkJCQkJCSAgICBcCisrCQkJcmV0Y291bnQgPSBTTlBSSU5URiAocmVzdWx0ICsgbGVuZ3RoLCBtYXhsZW4sIGJ1ZiwgIFwKKysJCQkJCSAgICAgcHJlZml4ZXNbMF0sIHByZWZpeGVzWzFdLCBhcmcsIFwKKysJCQkJCSAgICAgJmNvdW50KTsJCQkgICAgXAorKwkJCWJyZWFrOwkJCQkJCSAgICBcCisrCQkgICAgICBkZWZhdWx0OgkJCQkJCSAgICBcCisrCQkJYWJvcnQgKCk7CQkJCQkgICAgXAorKwkJICAgICAgfQorKyNlbHNlCisrIyBkZWZpbmUgU05QUklOVEZfQlVGKGFyZykgXAorKwkJICAgIHN3aXRjaCAocHJlZml4X2NvdW50KQkJCQkgICAgXAorKwkJICAgICAgewkJCQkJCQkgICAgXAorKwkJICAgICAgY2FzZSAwOgkJCQkJCSAgICBcCisrCQkJY291bnQgPSBzcHJpbnRmICh0bXAsIGJ1ZiwgYXJnKTsJCSAgICBcCisrCQkJYnJlYWs7CQkJCQkJICAgIFwKKysJCSAgICAgIGNhc2UgMToJCQkJCQkgICAgXAorKwkJCWNvdW50ID0gc3ByaW50ZiAodG1wLCBidWYsIHByZWZpeGVzWzBdLCBhcmcpOwkgICAgXAorKwkJCWJyZWFrOwkJCQkJCSAgICBcCisrCQkgICAgICBjYXNlIDI6CQkJCQkJICAgIFwKKysJCQljb3VudCA9IHNwcmludGYgKHRtcCwgYnVmLCBwcmVmaXhlc1swXSwgcHJlZml4ZXNbMV0sXAorKwkJCQkJIGFyZyk7CQkJCSAgICBcCisrCQkJYnJlYWs7CQkJCQkJICAgIFwKKysJCSAgICAgIGRlZmF1bHQ6CQkJCQkJICAgIFwKKysJCQlhYm9ydCAoKTsJCQkJCSAgICBcCisrCQkgICAgICB9CisrI2VuZGlmCisrCisrCQkgICAgc3dpdGNoICh0eXBlKQorKwkJICAgICAgeworKwkJICAgICAgY2FzZSBUWVBFX1NDSEFSOgorKwkJCXsKKysJCQkgIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfc2NoYXI7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKwkJICAgICAgY2FzZSBUWVBFX1VDSEFSOgorKwkJCXsKKysJCQkgIHVuc2lnbmVkIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdWNoYXI7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKwkJICAgICAgY2FzZSBUWVBFX1NIT1JUOgorKwkJCXsKKysJCQkgIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfc2hvcnQ7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKwkJICAgICAgY2FzZSBUWVBFX1VTSE9SVDoKKysJCQl7CisrCQkJICB1bnNpZ25lZCBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3VzaG9ydDsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgICBjYXNlIFRZUEVfSU5UOgorKwkJCXsKKysJCQkgIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfaW50OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9VSU5UOgorKwkJCXsKKysJCQkgIHVuc2lnbmVkIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdWludDsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgICBjYXNlIFRZUEVfTE9OR0lOVDoKKysJCQl7CisrCQkJICBsb25nIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfbG9uZ2ludDsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgICBjYXNlIFRZUEVfVUxPTkdJTlQ6CisrCQkJeworKwkJCSAgdW5zaWduZWQgbG9uZyBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3Vsb25naW50OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgICAgIGNhc2UgVFlQRV9MT05HTE9OR0lOVDoKKysJCQl7CisrCQkJICBsb25nIGxvbmcgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9sb25nbG9uZ2ludDsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgICBjYXNlIFRZUEVfVUxPTkdMT05HSU5UOgorKwkJCXsKKysJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3Vsb25nbG9uZ2ludDsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrI2VuZGlmCisrCQkgICAgICBjYXNlIFRZUEVfRE9VQkxFOgorKwkJCXsKKysJCQkgIGRvdWJsZSBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfZG91YmxlOworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysjaWZkZWYgSEFWRV9MT05HX0RPVUJMRQorKwkJICAgICAgY2FzZSBUWVBFX0xPTkdET1VCTEU6CisrCQkJeworKwkJCSAgbG9uZyBkb3VibGUgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2xvbmdkb3VibGU7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNlbmRpZgorKwkJICAgICAgY2FzZSBUWVBFX0NIQVI6CisrCQkJeworKwkJCSAgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jaGFyOworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysjaWZkZWYgSEFWRV9XSU5UX1QKKysJCSAgICAgIGNhc2UgVFlQRV9XSURFX0NIQVI6CisrCQkJeworKwkJCSAgd2ludF90IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV93aWRlX2NoYXI7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNlbmRpZgorKwkJICAgICAgY2FzZSBUWVBFX1NUUklORzoKKysJCQl7CisrCQkJICBjb25zdCBjaGFyICphcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfc3RyaW5nOworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrCQkgICAgICBjYXNlIFRZUEVfV0lERV9TVFJJTkc6CisrCQkJeworKwkJCSAgY29uc3Qgd2NoYXJfdCAqYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3dpZGVfc3RyaW5nOworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysjZW5kaWYKKysJCSAgICAgIGNhc2UgVFlQRV9QT0lOVEVSOgorKwkJCXsKKysJCQkgIHZvaWQgKmFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9wb2ludGVyOworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGRlZmF1bHQ6CisrCQkJYWJvcnQgKCk7CisrCQkgICAgICB9CisrCisrI2lmIFVTRV9TTlBSSU5URgorKwkJICAgIC8qIFBvcnRhYmlsaXR5OiBOb3QgYWxsIGltcGxlbWVudGF0aW9ucyBvZiBzbnByaW50ZigpCisrCQkgICAgICAgYXJlIElTTyBDIDk5IGNvbXBsaWFudC4gIERldGVybWluZSB0aGUgbnVtYmVyIG9mCisrCQkgICAgICAgYnl0ZXMgdGhhdCBzbnByaW50ZigpIGhhcyBwcm9kdWNlZCBvciB3b3VsZCBoYXZlCisrCQkgICAgICAgcHJvZHVjZWQuICAqLworKwkJICAgIGlmIChjb3VudCA+PSAwKQorKwkJICAgICAgeworKwkJCS8qIFZlcmlmeSB0aGF0IHNucHJpbnRmKCkgaGFzIE5VTC10ZXJtaW5hdGVkIGl0cworKwkJCSAgIHJlc3VsdC4gICovCisrCQkJaWYgKGNvdW50IDwgbWF4bGVuICYmIHJlc3VsdFtsZW5ndGggKyBjb3VudF0gIT0gJ1wwJykKKysJCQkgIGFib3J0ICgpOworKwkJCS8qIFBvcnRhYmlsaXR5IGhhY2suICAqLworKwkJCWlmIChyZXRjb3VudCA+IGNvdW50KQorKwkJCSAgY291bnQgPSByZXRjb3VudDsKKysJCSAgICAgIH0KKysJCSAgICBlbHNlCisrCQkgICAgICB7CisrCQkJLyogc25wcmludGYoKSBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlICclbicKKysJCQkgICBkaXJlY3RpdmUuICAqLworKwkJCWlmIChwWzFdICE9ICdcMCcpCisrCQkJICB7CisrCQkJICAgIC8qIERvbid0IHVzZSB0aGUgJyVuJyBkaXJlY3RpdmU7IGluc3RlYWQsIGxvb2sKKysJCQkgICAgICAgYXQgdGhlIHNucHJpbnRmKCkgcmV0dXJuIHZhbHVlLiAgKi8KKysJCQkgICAgcFsxXSA9ICdcMCc7CisrCQkJICAgIGNvbnRpbnVlOworKwkJCSAgfQorKwkJCWVsc2UKKysJCQkgIHsKKysJCQkgICAgLyogTG9vayBhdCB0aGUgc25wcmludGYoKSByZXR1cm4gdmFsdWUuICAqLworKwkJCSAgICBpZiAocmV0Y291bnQgPCAwKQorKwkJCSAgICAgIHsKKysJCQkJLyogSFAtVVggMTAuMjAgc25wcmludGYoKSBpcyBkb3VibHkgZGVmaWNpZW50OgorKwkJCQkgICBJdCBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlICclbicgZGlyZWN0aXZlLAorKwkJCQkgICAqYW5kKiBpdCByZXR1cm5zIC0xIChyYXRoZXIgdGhhbiB0aGUgbGVuZ3RoCisrCQkJCSAgIHRoYXQgd291bGQgaGF2ZSBiZWVuIHJlcXVpcmVkKSB3aGVuIHRoZQorKwkJCQkgICBidWZmZXIgaXMgdG9vIHNtYWxsLiAgKi8KKysJCQkJc2l6ZV90IGJpZ2dlcl9uZWVkID0KKysJCQkJICB4c3VtICh4dGltZXMgKGFsbG9jYXRlZCwgMiksIDEyKTsKKysJCQkJRU5TVVJFX0FMTE9DQVRJT04gKGJpZ2dlcl9uZWVkKTsKKysJCQkJY29udGludWU7CisrCQkJICAgICAgfQorKwkJCSAgICBlbHNlCisrCQkJICAgICAgY291bnQgPSByZXRjb3VudDsKKysJCQkgIH0KKysJCSAgICAgIH0KKysjZW5kaWYKKysKKysJCSAgICAvKiBBdHRlbXB0IHRvIGhhbmRsZSBmYWlsdXJlLiAgKi8KKysJCSAgICBpZiAoY291bnQgPCAwKQorKwkJICAgICAgeworKwkJCWlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQorKwkJCSAgZnJlZSAocmVzdWx0KTsKKysJCQlpZiAoYnVmX21hbGxvY2VkICE9IE5VTEwpCisrCQkJICBmcmVlIChidWZfbWFsbG9jZWQpOworKwkJCUNMRUFOVVAgKCk7CisrCQkJZXJybm8gPSBFSU5WQUw7CisrCQkJcmV0dXJuIE5VTEw7CisrCQkgICAgICB9CisrCisrI2lmICFVU0VfU05QUklOVEYKKysJCSAgICBpZiAoY291bnQgPj0gdG1wX2xlbmd0aCkKKysJCSAgICAgIC8qIHRtcF9sZW5ndGggd2FzIGluY29ycmVjdGx5IGNhbGN1bGF0ZWQgLSBmaXggdGhlCisrCQkJIGNvZGUgYWJvdmUhICAqLworKwkJICAgICAgYWJvcnQgKCk7CisrI2VuZGlmCisrCisrCQkgICAgLyogTWFrZSByb29tIGZvciB0aGUgcmVzdWx0LiAgKi8KKysJCSAgICBpZiAoY291bnQgPj0gbWF4bGVuKQorKwkJICAgICAgeworKwkJCS8qIE5lZWQgYXQgbGVhc3QgY291bnQgYnl0ZXMuICBCdXQgYWxsb2NhdGUKKysJCQkgICBwcm9wb3J0aW9uYWxseSwgdG8gYXZvaWQgbG9vcGluZyBldGVybmFsbHkgaWYKKysJCQkgICBzbnByaW50ZigpIHJlcG9ydHMgYSB0b28gc21hbGwgY291bnQuICAqLworKwkJCXNpemVfdCBuID0KKysJCQkgIHhtYXggKHhzdW0gKGxlbmd0aCwgY291bnQpLCB4dGltZXMgKGFsbG9jYXRlZCwgMikpOworKworKwkJCUVOU1VSRV9BTExPQ0FUSU9OIChuKTsKKysjaWYgVVNFX1NOUFJJTlRGCisrCQkJY29udGludWU7CisrI2VuZGlmCisrCQkgICAgICB9CisrCisrI2lmIFVTRV9TTlBSSU5URgorKwkJICAgIC8qIFRoZSBzbnByaW50ZigpIHJlc3VsdCBkaWQgZml0LiAgKi8KKysjZWxzZQorKwkJICAgIC8qIEFwcGVuZCB0aGUgc3ByaW50ZigpIHJlc3VsdC4gICovCisrCQkgICAgbWVtY3B5IChyZXN1bHQgKyBsZW5ndGgsIHRtcCwgY291bnQgKiBzaXplb2YgKENIQVJfVCkpOworKwkJICAgIGlmICh0bXAgIT0gdG1wYnVmKQorKwkJICAgICAgZnJlZSAodG1wKTsKKysjZW5kaWYKKysKKysJCSAgICBsZW5ndGggKz0gY291bnQ7CisrCQkgICAgYnJlYWs7CisrCQkgIH0KKysJICAgICAgfQorKwkgIH0KKysgICAgICB9CisrCisrICAgIC8qIEFkZCB0aGUgZmluYWwgTlVMLiAgKi8KKysgICAgRU5TVVJFX0FMTE9DQVRJT04gKHhzdW0gKGxlbmd0aCwgMSkpOworKyAgICByZXN1bHRbbGVuZ3RoXSA9ICdcMCc7CisrCisrICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0YnVmICYmIGxlbmd0aCArIDEgPCBhbGxvY2F0ZWQpCisrICAgICAgeworKwkvKiBTaHJpbmsgdGhlIGFsbG9jYXRlZCBtZW1vcnkgaWYgcG9zc2libGUuICAqLworKwlDSEFSX1QgKm1lbW9yeTsKKysKKysJbWVtb3J5ID0gKENIQVJfVCAqKSByZWFsbG9jIChyZXN1bHQsIChsZW5ndGggKyAxKSAqIHNpemVvZiAoQ0hBUl9UKSk7CisrCWlmIChtZW1vcnkgIT0gTlVMTCkKKysJICByZXN1bHQgPSBtZW1vcnk7CisrICAgICAgfQorKworKyAgICBpZiAoYnVmX21hbGxvY2VkICE9IE5VTEwpCisrICAgICAgZnJlZSAoYnVmX21hbGxvY2VkKTsKKysgICAgQ0xFQU5VUCAoKTsKKysgICAgKmxlbmd0aHAgPSBsZW5ndGg7CisrICAgIHJldHVybiByZXN1bHQ7CisrCisrICBvdXRfb2ZfbWVtb3J5OgorKyAgICBpZiAoIShyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKSkKKysgICAgICBmcmVlIChyZXN1bHQpOworKyAgICBpZiAoYnVmX21hbGxvY2VkICE9IE5VTEwpCisrICAgICAgZnJlZSAoYnVmX21hbGxvY2VkKTsKKysgIG91dF9vZl9tZW1vcnlfMToKKysgICAgQ0xFQU5VUCAoKTsKKysgICAgZXJybm8gPSBFTk9NRU07CisrICAgIHJldHVybiBOVUxMOworKyAgfQorK30KKysKKysjdW5kZWYgU05QUklOVEYKKysjdW5kZWYgVVNFX1NOUFJJTlRGCisrI3VuZGVmIFBSSU5URl9QQVJTRQorKyN1bmRlZiBESVJFQ1RJVkVTCisrI3VuZGVmIERJUkVDVElWRQorKyN1bmRlZiBDSEFSX1QKKysjdW5kZWYgVkFTTlBSSU5URgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3Zhc25wcmludGYuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC92YXNucHJpbnRmLmgJMjAwNC0wOS0xMiAxNDo0MDozNC42Njc3MDA2NjQgLTA0MDAKK0BAIC0wLDAgKzEsNjEgQEAKKysvKiB2c3ByaW50ZiB3aXRoIGF1dG9tYXRpYyBtZW1vcnkgYWxsb2NhdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfVkFTTlBSSU5URl9ICisrI2RlZmluZSBfVkFTTlBSSU5URl9ICisrCisrLyogR2V0IHZhX2xpc3QuICAqLworKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysKKysvKiBHZXQgc2l6ZV90LiAgKi8KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2lmbmRlZiBfX2F0dHJpYnV0ZV9fCisrLyogVGhpcyBmZWF0dXJlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgMi41IGFuZCBsYXRlci4gICovCisrIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA1KSB8fCBfX1NUUklDVF9BTlNJX18KKysjICBkZWZpbmUgX19hdHRyaWJ1dGVfXyhTcGVjKSAvKiBlbXB0eSAqLworKyMgZW5kaWYKKysvKiBUaGUgX18tcHJvdGVjdGVkIHZhcmlhbnRzIG9mIGBmb3JtYXQnIGFuZCBgcHJpbnRmJyBhdHRyaWJ1dGVzCisrICAgYXJlIGFjY2VwdGVkIGJ5IGdjYyB2ZXJzaW9ucyAyLjYuNCAoZWZmZWN0aXZlbHkgMi43KSBhbmQgbGF0ZXIuICAqLworKyMgaWYgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNykKKysjICBkZWZpbmUgX19mb3JtYXRfXyBmb3JtYXQKKysjICBkZWZpbmUgX19wcmludGZfXyBwcmludGYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2lmZGVmCV9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrLyogV3JpdGUgZm9ybWF0dGVkIG91dHB1dCB0byBhIHN0cmluZyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MoKS4KKysgICBZb3UgY2FuIHBhc3MgYSBwcmVhbGxvY2F0ZWQgYnVmZmVyIGZvciB0aGUgcmVzdWx0IGluIFJFU1VMVEJVRiBhbmQgaXRzCisrICAgc2l6ZSBpbiAqTEVOR1RIUDsgb3RoZXJ3aXNlIHlvdSBwYXNzIFJFU1VMVEJVRiA9IE5VTEwuCisrICAgSWYgc3VjY2Vzc2Z1bCwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdHJpbmcgKHRoaXMgbWF5IGJlID0gUkVTVUxUQlVGCisrICAgaWYgbm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiB3YXMgbmVjZXNzYXJ5KSBhbmQgc2V0ICpMRU5HVEhQIHRvIHRoZQorKyAgIG51bWJlciBvZiByZXN1bHRpbmcgYnl0ZXMsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgVXBvbiBlcnJvciwgc2V0CisrICAgZXJybm8gYW5kIHJldHVybiBOVUxMLiAgKi8KKytleHRlcm4gY2hhciAqIGFzbnByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBzaXplX3QgKmxlbmd0aHAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorKyAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKKytleHRlcm4gY2hhciAqIHZhc25wcmludGYgKGNoYXIgKnJlc3VsdGJ1Ziwgc2l6ZV90ICpsZW5ndGhwLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKysgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CisrCisrI2lmZGVmCV9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBfVkFTTlBSSU5URl9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvdmFzbndwcmludGYuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC92YXNud3ByaW50Zi5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjczNjk5NzUyIC0wNDAwCitAQCAtMCwwICsxLDQ2IEBACisrLyogdnN3cHJpbnRmIHdpdGggYXV0b21hdGljIG1lbW9yeSBhbGxvY2F0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9WQVNOV1BSSU5URl9ICisrI2RlZmluZSBfVkFTTldQUklOVEZfSAorKworKy8qIEdldCB2YV9saXN0LiAgKi8KKysjaW5jbHVkZSA8c3RkYXJnLmg+CisrCisrLyogR2V0IHdjaGFyX3QsIHNpemVfdC4gICovCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKyNpZmRlZglfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworKy8qIFdyaXRlIGZvcm1hdHRlZCBvdXRwdXQgdG8gYSBzdHJpbmcgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHdpdGggbWFsbG9jKCkuCisrICAgWW91IGNhbiBwYXNzIGEgcHJlYWxsb2NhdGVkIGJ1ZmZlciBmb3IgdGhlIHJlc3VsdCBpbiBSRVNVTFRCVUYgYW5kIGl0cworKyAgIHNpemUgaW4gKkxFTkdUSFA7IG90aGVyd2lzZSB5b3UgcGFzcyBSRVNVTFRCVUYgPSBOVUxMLgorKyAgIElmIHN1Y2Nlc3NmdWwsIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgc3RyaW5nICh0aGlzIG1heSBiZSA9IFJFU1VMVEJVRgorKyAgIGlmIG5vIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gd2FzIG5lY2Vzc2FyeSkgYW5kIHNldCAqTEVOR1RIUCB0byB0aGUKKysgICBudW1iZXIgb2YgcmVzdWx0aW5nIGJ5dGVzLCBleGNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gIFVwb24gZXJyb3IsIHNldAorKyAgIGVycm5vIGFuZCByZXR1cm4gTlVMTC4gICovCisrZXh0ZXJuIHdjaGFyX3QgKiBhc253cHJpbnRmICh3Y2hhcl90ICpyZXN1bHRidWYsIHNpemVfdCAqbGVuZ3RocCwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pOworK2V4dGVybiB3Y2hhcl90ICogdmFzbndwcmludGYgKHdjaGFyX3QgKnJlc3VsdGJ1Ziwgc2l6ZV90ICpsZW5ndGhwLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIHZhX2xpc3QgYXJncyk7CisrCisrI2lmZGVmCV9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBfVkFTTldQUklOVEZfSCAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL1ZFUlNJT04JMTk5OC0wNC0yNiAwOToyMjozNy4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvVkVSU0lPTgkyMDA0LTA5LTEyIDE0OjQwOjM0LjY3OTY5ODg0MCAtMDQwMAorQEAgLTEgKzEgQEAKKy1HTlUgZ2V0dGV4dCBsaWJyYXJ5IGZyb20gZ2V0dGV4dC0wLjEwLjMyCisrR05VIGdldHRleHQgbGlicmFyeSBmcm9tIGdldHRleHQtMC4xNC4xCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvd3ByaW50Zi1wYXJzZS5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3dwcmludGYtcGFyc2UuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjY5NTY5NjQwOCAtMDQwMAorQEAgLTAsMCArMSw3NSBAQAorKy8qIFBhcnNlIHByaW50ZiBmb3JtYXQgc3RyaW5nLgorKyAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9XUFJJTlRGX1BBUlNFX0gKKysjZGVmaW5lIF9XUFJJTlRGX1BBUlNFX0gKKysKKysjaW5jbHVkZSAicHJpbnRmLWFyZ3MuaCIKKysKKysKKysvKiBGbGFncyAqLworKyNkZWZpbmUgRkxBR19HUk9VUAkgMQkvKiAnIGZsYWcgKi8KKysjZGVmaW5lIEZMQUdfTEVGVAkgMgkvKiAtIGZsYWcgKi8KKysjZGVmaW5lIEZMQUdfU0hPV1NJR04JIDQJLyogKyBmbGFnICovCisrI2RlZmluZSBGTEFHX1NQQUNFCSA4CS8qIHNwYWNlIGZsYWcgKi8KKysjZGVmaW5lIEZMQUdfQUxUCTE2CS8qICMgZmxhZyAqLworKyNkZWZpbmUgRkxBR19aRVJPCTMyCisrCisrLyogYXJnX2luZGV4IHZhbHVlIGluZGljYXRpbmcgdGhhdCBubyBhcmd1bWVudCBpcyBjb25zdW1lZC4gICovCisrI2RlZmluZSBBUkdfTk9ORQkofihzaXplX3QpMCkKKysKKysvKiBBIHBhcnNlZCBkaXJlY3RpdmUuICAqLworK3R5cGVkZWYgc3RydWN0CisreworKyAgY29uc3Qgd2NoYXJfdCogZGlyX3N0YXJ0OworKyAgY29uc3Qgd2NoYXJfdCogZGlyX2VuZDsKKysgIGludCBmbGFnczsKKysgIGNvbnN0IHdjaGFyX3QqIHdpZHRoX3N0YXJ0OworKyAgY29uc3Qgd2NoYXJfdCogd2lkdGhfZW5kOworKyAgc2l6ZV90IHdpZHRoX2FyZ19pbmRleDsKKysgIGNvbnN0IHdjaGFyX3QqIHByZWNpc2lvbl9zdGFydDsKKysgIGNvbnN0IHdjaGFyX3QqIHByZWNpc2lvbl9lbmQ7CisrICBzaXplX3QgcHJlY2lzaW9uX2FyZ19pbmRleDsKKysgIHdjaGFyX3QgY29udmVyc2lvbjsgLyogZCBpIG8gdSB4IFggZiBlIEUgZyBHIGMgcyBwIG4gVSAlIGJ1dCBub3QgQyBTICovCisrICBzaXplX3QgYXJnX2luZGV4OworK30KKyt3Y2hhcl90X2RpcmVjdGl2ZTsKKysKKysvKiBBIHBhcnNlZCBmb3JtYXQgc3RyaW5nLiAgKi8KKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIHNpemVfdCBjb3VudDsKKysgIHdjaGFyX3RfZGlyZWN0aXZlICpkaXI7CisrICBzaXplX3QgbWF4X3dpZHRoX2xlbmd0aDsKKysgIHNpemVfdCBtYXhfcHJlY2lzaW9uX2xlbmd0aDsKKyt9Cisrd2NoYXJfdF9kaXJlY3RpdmVzOworKworKworKy8qIFBhcnNlcyB0aGUgZm9ybWF0IHN0cmluZy4gIEZpbGxzIGluIHRoZSBudW1iZXIgTiBvZiBkaXJlY3RpdmVzLCBhbmQgZmlsbHMKKysgICBpbiBkaXJlY3RpdmVzWzBdLCAuLi4sIGRpcmVjdGl2ZXNbTi0xXSwgYW5kIHNldHMgZGlyZWN0aXZlc1tOXS5kaXJfc3RhcnQKKysgICB0byB0aGUgZW5kIG9mIHRoZSBmb3JtYXQgc3RyaW5nLiAgQWxzbyBmaWxscyBpbiB0aGUgYXJnX3R5cGUgZmllbGRzIG9mIHRoZQorKyAgIGFyZ3VtZW50cyBhbmQgdGhlIG5lZWRlZCBjb3VudCBvZiBhcmd1bWVudHMuICAqLworKyNpZmRlZiBTVEFUSUMKKytTVEFUSUMKKysjZWxzZQorK2V4dGVybgorKyNlbmRpZgorK2ludCB3cHJpbnRmX3BhcnNlIChjb25zdCB3Y2hhcl90ICpmb3JtYXQsIHdjaGFyX3RfZGlyZWN0aXZlcyAqZCwgYXJndW1lbnRzICphKTsKKysKKysjZW5kaWYgLyogX1dQUklOVEZfUEFSU0VfSCAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3hvcGVuLW1zZy5zZWQJMTk5OC0wNC0yNiAwOToyMDo1Mi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwveG9wZW4tbXNnLnNlZAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorQEAgLTEsMTA0ICswLDAgQEAKKy0jIHBvMm1zZy5zZWQgLSBDb252ZXJ0IFVuaWZvcnVtIHN0eWxlIC5wbyBmaWxlIHRvIFgvT3BlbiBzdHlsZSAubXNnIGZpbGUKKy0jIENvcHlyaWdodCAoQykgMTk5NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0jIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKy0jCistIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0jIGFueSBsYXRlciB2ZXJzaW9uLgorLSMKKy0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistIworLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorLSMKKy0jCistIyBUaGUgZmlyc3QgZGlyZWN0aXZlIGluIHRoZSAubXNnIHNob3VsZCBiZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUKKy0jIG1lc3NhZ2Ugc2V0IG51bWJlci4gIFdlIHVzZSBhbHdheXMgc2V0IG51bWJlciAxLgorLSMKKy0xIHsKKy0gIGlcCistJHNldCAxICMgQXV0b21hdGljYWxseSBjcmVhdGVkIGJ5IHBvMm1zZy5zZWQKKy0gIGgKKy0gIHMvLiovMC8KKy0gIHgKKy19CistIworLSMgV2UgY29weSBhbGwgY29tbWVudHMgaW50byB0aGUgLm1zZyBmaWxlLiAgUGVyaGFwcyB0aGV5IGNhbiBoZWxwLgorLSMKKy0vXiMvIHMvXiNbIAldKi8kIC9wCistIworLSMgV2UgY29weSB0aGUgb3JpZ2luYWwgbWVzc2FnZSBhcyBhIGNvbW1lbnQgaW50byB0aGUgLm1zZyBmaWxlLgorLSMKKy0vXm1zZ2lkLyB7CistIyBEb2VzIG5vdCB3b3JrIG5vdworLSMgIC8iJC8hIHsKKy0jICAgIHMvXFwkLy8KKy0jICAgIHMvJC8gLi4uIChtb3JlIGxpbmVzIGZvbGxvd2luZykiLworLSMgIH0KKy0gIHMvXm1zZ2lkWyAJXSoiXCguKlwpIiQvJCBPcmlnaW5hbCBNZXNzYWdlOiBcMS8KKy0gIHAKKy19CistIworLSMgVGhlIC5tc2cgZmlsZSBjb250YWlucywgb3RoZXIgdGhlbiB0aGUgLnBvIGZpbGUsIG9ubHkgdGhlIHRyYW5zbGF0aW9ucworLSMgYnV0IGVhY2ggZ2l2ZW4gYSB1bmlxdWUgSUQuICBTdGFydGluZyBmcm9tIDEgYW5kIGluY3JlbWVudGluZyBieSAxIGZvcgorLSMgZWFjaCBtZXNzYWdlIHdlIGFzc2lnbiB0aGVtIHRvIHRoZSBtZXNzYWdlcy4KKy0jIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSAucG8gZmlsZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBjYXQtaWQtdGJsLmMgZmlsZQorLSMgKHdpdGggcG8tdG8tdGJsKSBpcyB0aGUgc2FtZSBhcyB0aGUgb25lIHVzZWQgaGVyZS4gIChBdCBsZWFzdCB0aGUgb3JkZXIKKy0jIG9mIGRlY2xhcmF0aW9ucyBtdXN0IG5vdCBiZSBjaGFuZ2VkLikKKy0jCistL15tc2dzdHIvIHsKKy0gIHMvbXNnc3RyWyAJXSoiXCguKlwpIi9cMS8KKy0gIHgKKy0jIFRoZSBmb2xsb3dpbmcgbmljZSBzb2x1dGlvbiBpcyBieQorLSMgQnJ1bm8gPEhhaWJsZUBtYTJzMi5tYXRoZW1hdGlrLnVuaS1rYXJsc3J1aGUuZGU+CistICB0ZAorLSMgSW5jcmVtZW50IGEgZGVjaW1hbCBudW1iZXIgaW4gcGF0dGVybiBzcGFjZS4KKy0jIEZpcnN0IGhpZGUgdHJhaWxpbmcgYDknIGRpZ2l0cy4KKy0gIDpkCistICBzLzlcKF8qXCkkL19cMS8KKy0gIHRkCistIyBBc3N1cmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGlzIGF2YWlsYWJsZS4KKy0gIHMvXlwoXypcKSQvMFwxLworLSMgSW5jcmVtZW50IHRoZSBsYXN0IGRpZ2l0LgorLSAgcy84XChfKlwpJC85XDEvCistICBzLzdcKF8qXCkkLzhcMS8KKy0gIHMvNlwoXypcKSQvN1wxLworLSAgcy81XChfKlwpJC82XDEvCistICBzLzRcKF8qXCkkLzVcMS8KKy0gIHMvM1woXypcKSQvNFwxLworLSAgcy8yXChfKlwpJC8zXDEvCistICBzLzFcKF8qXCkkLzJcMS8KKy0gIHMvMFwoXypcKSQvMVwxLworLSMgQ29udmVydCB0aGUgaGlkZGVuIGA5JyBkaWdpdHMgdG8gYDAncy4KKy0gIHMvXy8wL2cKKy0gIHgKKy0jIEJyaW5nIHRoZSBsaW5lIGluIHRoZSBmb3JtYXQgYDxudW1iZXI+IDxtZXNzYWdlPicKKy0gIEcKKy0gIHMvXlteXG5dKiQvJiAvCistICBzL1woLipcKVxuXChbMC05XSpcKS9cMiBcMS8KKy0jIENsZWFyIGZsYWcgZnJvbSBsYXN0IHN1YnN0aXR1dGlvbi4KKy0gIHRiCistIyBBcHBlbmQgdGhlIG5leHQgbGluZS4KKy0gIDpiCistICBOCistIyBMb29rIHdoZXRoZXIgc2Vjb25kIHBhcnQgaXMgYSBjb250aW51YXRpb24gbGluZS4KKy0gIHMvXCguKlxuXCkiXCguKlwpIi9cMVwyLworLSMgWWVzLCB0aGVuIGJyYW5jaC4KKy0gIHRhCistICBQCistICBECistIyBOb3RlIHRoYXQgYEQnIGluY2x1ZGVzIGEganVtcCB0byB0aGUgc3RhcnQhIQorLSMgV2UgZm91bmQgYSBjb250aW51YXRpb24gbGluZS4gIEJ1dCBiZWZvcmUgcHJpbnRpbmcgaW5zZXJ0ICdcJy4KKy0gIDphCistICBzL1woLipcKVwoXG4uKlwpL1wxXFxcMi8KKy0gIFAKKy0jIFdlIGNhbm5vdCB1c2UgdGhlIHNlZCBjb21tYW5kIGBEJyBoZXJlCistICBzLy4qXG5cKC4qXCkvXDEvCistICB0YgorLX0KKy1kCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwveHNpemUuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC94c2l6ZS5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNzAwNjk1NjQ4IC0wNDAwCitAQCAtMCwwICsxLDEwOSBAQAorKy8qIHhzaXplLmggLS0gQ2hlY2tlZCBzaXplX3QgY29tcHV0YXRpb25zLgorKworKyAgIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfWFNJWkVfSAorKyNkZWZpbmUgX1hTSVpFX0gKKysKKysvKiBHZXQgc2l6ZV90LiAgKi8KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrLyogR2V0IFNJWkVfTUFYLiAgKi8KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrI2lmIEhBVkVfU1RESU5UX0gKKysjIGluY2x1ZGUgPHN0ZGludC5oPgorKyNlbmRpZgorKworKy8qIFRoZSBzaXplIG9mIG1lbW9yeSBvYmplY3RzIGlzIG9mdGVuIGNvbXB1dGVkIHRocm91Z2ggZXhwcmVzc2lvbnMgb2YKKysgICB0eXBlIHNpemVfdC4gRXhhbXBsZToKKysgICAgICB2b2lkKiBwID0gbWFsbG9jIChoZWFkZXJfc2l6ZSArIG4gKiBlbGVtZW50X3NpemUpLgorKyAgIFRoZXNlIGNvbXB1dGF0aW9ucyBjYW4gbGVhZCB0byBvdmVyZmxvdy4gIFdoZW4gdGhpcyBoYXBwZW5zLCBtYWxsb2MoKQorKyAgIHJldHVybnMgYSBwaWVjZSBvZiBtZW1vcnkgdGhhdCBpcyB3YXkgdG9vIHNtYWxsLCBhbmQgdGhlIHByb2dyYW0gdGhlbgorKyAgIGNyYXNoZXMgd2hpbGUgYXR0ZW1wdGluZyB0byBmaWxsIHRoZSBtZW1vcnkuCisrICAgVG8gYXZvaWQgdGhpcywgdGhlIGZ1bmN0aW9ucyBhbmQgbWFjcm9zIGluIHRoaXMgZmlsZSBjaGVjayBmb3Igb3ZlcmZsb3cuCisrICAgVGhlIGNvbnZlbnRpb24gaXMgdGhhdCBTSVpFX01BWCByZXByZXNlbnRzIG92ZXJmbG93LgorKyAgIG1hbGxvYyAoU0laRV9NQVgpIGlzIG5vdCBndWFyYW50ZWVkIHRvIGZhaWwgLS0gdGhpbmsgb2YgYSBtYWxsb2MKKysgICBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgbW1hcCAtLSwgaXQncyByZWNvbW1lbmRlZCB0byB1c2Ugc2l6ZV9vdmVyZmxvd19wKCkKKysgICBvciBzaXplX2luX2JvdW5kc19wKCkgYmVmb3JlIGludm9raW5nIG1hbGxvYygpLgorKyAgIFRoZSBleGFtcGxlIHRodXMgYmVjb21lczoKKysgICAgICBzaXplX3Qgc2l6ZSA9IHhzdW0gKGhlYWRlcl9zaXplLCB4dGltZXMgKG4sIGVsZW1lbnRfc2l6ZSkpOworKyAgICAgIHZvaWQgKnAgPSAoc2l6ZV9pbl9ib3VuZHNfcCAoc2l6ZSkgPyBtYWxsb2MgKHNpemUpIDogTlVMTCk7CisrKi8KKysKKysvKiBDb252ZXJ0IGFuIGFyYml0cmFyeSB2YWx1ZSA+PSAwIHRvIHR5cGUgc2l6ZV90LiAgKi8KKysjZGVmaW5lIHhjYXN0X3NpemVfdChOKSBcCisrICAoKE4pIDw9IFNJWkVfTUFYID8gKHNpemVfdCkgKE4pIDogU0laRV9NQVgpCisrCisrLyogU3VtIG9mIHR3byBzaXplcywgd2l0aCBvdmVyZmxvdyBjaGVjay4gICovCisrc3RhdGljIGlubGluZSBzaXplX3QKKysjaWYgX19HTlVDX18gPj0gMworK19fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCisrI2VuZGlmCisreHN1bSAoc2l6ZV90IHNpemUxLCBzaXplX3Qgc2l6ZTIpCisreworKyAgc2l6ZV90IHN1bSA9IHNpemUxICsgc2l6ZTI7CisrICByZXR1cm4gKHN1bSA+PSBzaXplMSA/IHN1bSA6IFNJWkVfTUFYKTsKKyt9CisrCisrLyogU3VtIG9mIHRocmVlIHNpemVzLCB3aXRoIG92ZXJmbG93IGNoZWNrLiAgKi8KKytzdGF0aWMgaW5saW5lIHNpemVfdAorKyNpZiBfX0dOVUNfXyA+PSAzCisrX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKysjZW5kaWYKKyt4c3VtMyAoc2l6ZV90IHNpemUxLCBzaXplX3Qgc2l6ZTIsIHNpemVfdCBzaXplMykKKyt7CisrICByZXR1cm4geHN1bSAoeHN1bSAoc2l6ZTEsIHNpemUyKSwgc2l6ZTMpOworK30KKysKKysvKiBTdW0gb2YgZm91ciBzaXplcywgd2l0aCBvdmVyZmxvdyBjaGVjay4gICovCisrc3RhdGljIGlubGluZSBzaXplX3QKKysjaWYgX19HTlVDX18gPj0gMworK19fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCisrI2VuZGlmCisreHN1bTQgKHNpemVfdCBzaXplMSwgc2l6ZV90IHNpemUyLCBzaXplX3Qgc2l6ZTMsIHNpemVfdCBzaXplNCkKKyt7CisrICByZXR1cm4geHN1bSAoeHN1bSAoeHN1bSAoc2l6ZTEsIHNpemUyKSwgc2l6ZTMpLCBzaXplNCk7CisrfQorKworKy8qIE1heGltdW0gb2YgdHdvIHNpemVzLCB3aXRoIG92ZXJmbG93IGNoZWNrLiAgKi8KKytzdGF0aWMgaW5saW5lIHNpemVfdAorKyNpZiBfX0dOVUNfXyA+PSAzCisrX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKysjZW5kaWYKKyt4bWF4IChzaXplX3Qgc2l6ZTEsIHNpemVfdCBzaXplMikKKyt7CisrICAvKiBObyBleHBsaWNpdCBjaGVjayBpcyBuZWVkZWQgaGVyZSwgYmVjYXVzZSBmb3IgYW55IG46CisrICAgICBtYXggKFNJWkVfTUFYLCBuKSA9PSBTSVpFX01BWCBhbmQgbWF4IChuLCBTSVpFX01BWCkgPT0gU0laRV9NQVguICAqLworKyAgcmV0dXJuIChzaXplMSA+PSBzaXplMiA/IHNpemUxIDogc2l6ZTIpOworK30KKysKKysvKiBNdWx0aXBsaWNhdGlvbiBvZiBhIGNvdW50IHdpdGggYW4gZWxlbWVudCBzaXplLCB3aXRoIG92ZXJmbG93IGNoZWNrLgorKyAgIFRoZSBjb3VudCBtdXN0IGJlID49IDAgYW5kIHRoZSBlbGVtZW50IHNpemUgbXVzdCBiZSA+IDAuCisrICAgVGhpcyBpcyBhIG1hY3JvLCBub3QgYW4gaW5saW5lIGZ1bmN0aW9uLCBzbyB0aGF0IGl0IHdvcmtzIGNvcnJlY3RseSBldmVuCisrICAgd2hlbiBOIGlzIG9mIGEgd2lkZXIgdHVwZSBhbmQgTiA+IFNJWkVfTUFYLiAgKi8KKysjZGVmaW5lIHh0aW1lcyhOLCBFTFNJWkUpIFwKKysgICgoTikgPD0gU0laRV9NQVggLyAoRUxTSVpFKSA/IChzaXplX3QpIChOKSAqIChFTFNJWkUpIDogU0laRV9NQVgpCisrCisrLyogQ2hlY2sgZm9yIG92ZXJmbG93LiAgKi8KKysjZGVmaW5lIHNpemVfb3ZlcmZsb3dfcChTSVpFKSBcCisrICAoKFNJWkUpID09IFNJWkVfTUFYKQorKy8qIENoZWNrIGFnYWluc3Qgb3ZlcmZsb3cuICAqLworKyNkZWZpbmUgc2l6ZV9pbl9ib3VuZHNfcChTSVpFKSBcCisrICAoKFNJWkUpICE9IFNJWkVfTUFYKQorKworKyNlbmRpZiAvKiBfWFNJWkVfSCAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9DaGFuZ2VMb2cJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L0NoYW5nZUxvZwkyMDA0LTA5LTEyIDE0OjQwOjM1LjA1NDY0MTg0MCAtMDQwMAorQEAgLTAsMCArMSwzMiBAQAorKzIwMDQtMDktMTIgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKysKKysJKiBjb2Rlc2V0Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBnZXR0ZXh0Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBnbGliYzIxLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpY29udi5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogaW50ZGl2MC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogaW50bWF4Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnR0eXBlcy5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogaW50dHlwZXNfaC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogaW50dHlwZXMtcHJpLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpc2MtcG9zaXgubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGxjbWVzc2FnZS5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogbGliLWxkLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBsaWItbGluay5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogbGliLXByZWZpeC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogbG9uZ2RvdWJsZS5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogbG9uZ2xvbmcubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIG5scy5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogcG8ubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHByaW50Zi1wb3NpeC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogcHJvZ3Rlc3QubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHNpZ25lZC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogc2l6ZV9tYXgubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHN0ZGludF9oLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiB1aW50bWF4X3QubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHVsb25nbG9uZy5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogd2NoYXJfdC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogd2ludF90Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiB4c2l6ZS5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogTWFrZWZpbGUuYW06IE5ldyBmaWxlLgorKworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9jb2Rlc2V0Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9jb2Rlc2V0Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuODIwNjc3NDA4IC0wNDAwCitAQCAtMCwwICsxLDIzIEBACisrIyBjb2Rlc2V0Lm00IHNlcmlhbCBBTTEgKGdldHRleHQtMC4xMC40MCkKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW0FNX0xBTkdJTkZPX0NPREVTRVRdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbmxfbGFuZ2luZm8gYW5kIENPREVTRVRdLCBhbV9jdl9sYW5naW5mb19jb2Rlc2V0LAorKyAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsYW5naW5mby5oPl0sCisrICAgICAgW2NoYXIqIGNzID0gbmxfbGFuZ2luZm8oQ09ERVNFVCk7XSwKKysgICAgICBhbV9jdl9sYW5naW5mb19jb2Rlc2V0PXllcywKKysgICAgICBhbV9jdl9sYW5naW5mb19jb2Rlc2V0PW5vKQorKyAgICBdKQorKyAgaWYgdGVzdCAkYW1fY3ZfbGFuZ2luZm9fY29kZXNldCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9MQU5HSU5GT19DT0RFU0VULCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgPGxhbmdpbmZvLmg+IGFuZCBubF9sYW5naW5mbyhDT0RFU0VUKS5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9nZXR0ZXh0Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9nZXR0ZXh0Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuODI2Njc2NDk2IC0wNDAwCitAQCAtMCwwICsxLDQ4NyBAQAorKyMgZ2V0dGV4dC5tNCBzZXJpYWwgMjggKGdldHRleHQtMC4xMykKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKytkbmwKKytkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKytkbmwgZnVuY3Rpb25hbGl0eS4KKytkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKytkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorKworK2RubCBBdXRob3JzOgorK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LTIwMDAuCisrZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDMuCisrCisrZG5sIE1hY3JvIHRvIGFkZCBmb3IgdXNpbmcgR05VIGdldHRleHQuCisrCisrZG5sIFVzYWdlOiBBTV9HTlVfR0VUVEVYVChbSU5UTFNZTUJPTF0sIFtORUVEU1lNQk9MXSwgW0lOVExESVJdKS4KKytkbmwgSU5UTFNZTUJPTCBjYW4gYmUgb25lIG9mICdleHRlcm5hbCcsICduby1saWJ0b29sJywgJ3VzZS1saWJ0b29sJy4gVGhlCisrZG5sICAgIGRlZmF1bHQgKGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQgb3IgZW1wdHkpIGlzICduby1saWJ0b29sJy4KKytkbmwgICAgSU5UTFNZTUJPTCBzaG91bGQgYmUgJ2V4dGVybmFsJyBmb3IgcGFja2FnZXMgd2l0aCBubyBpbnRsIGRpcmVjdG9yeSwKKytkbmwgICAgYW5kICduby1saWJ0b29sJyBvciAndXNlLWxpYnRvb2wnIGZvciBwYWNrYWdlcyB3aXRoIGFuIGludGwgZGlyZWN0b3J5LgorK2RubCAgICBJZiBJTlRMU1lNQk9MIGlzICd1c2UtbGlidG9vbCcsIHRoZW4gYSBsaWJ0b29sIGxpYnJhcnkKKytkbmwgICAgJCh0b3BfYnVpbGRkaXIpL2ludGwvbGliaW50bC5sYSB3aWxsIGJlIGNyZWF0ZWQgKHNoYXJlZCBhbmQvb3Igc3RhdGljLAorK2RubCAgICBkZXBlbmRpbmcgb24gLS17ZW5hYmxlLGRpc2FibGV9LXtzaGFyZWQsc3RhdGljfSBhbmQgb24gdGhlIHByZXNlbmNlIG9mCisrZG5sICAgIEFNLURJU0FCTEUtU0hBUkVEKS4gSWYgSU5UTFNZTUJPTCBpcyAnbm8tbGlidG9vbCcsIGEgc3RhdGljIGxpYnJhcnkKKytkbmwgICAgJCh0b3BfYnVpbGRkaXIpL2ludGwvbGliaW50bC5hIHdpbGwgYmUgY3JlYXRlZC4KKytkbmwgSWYgTkVFRFNZTUJPTCBpcyBzcGVjaWZpZWQgYW5kIGlzICduZWVkLW5nZXR0ZXh0JywgdGhlbiBHTlUgZ2V0dGV4dAorK2RubCAgICBpbXBsZW1lbnRhdGlvbnMgKGluIGxpYmMgb3IgbGliaW50bCkgd2l0aG91dCB0aGUgbmdldHRleHQoKSBmdW5jdGlvbgorK2RubCAgICB3aWxsIGJlIGlnbm9yZWQuICBJZiBORUVEU1lNQk9MIGlzIHNwZWNpZmllZCBhbmQgaXMKKytkbmwgICAgJ25lZWQtZm9ybWF0c3RyaW5nLW1hY3JvcycsIHRoZW4gR05VIGdldHRleHQgaW1wbGVtZW50YXRpb25zIHRoYXQgZG9uJ3QKKytkbmwgICAgc3VwcG9ydCB0aGUgSVNPIEMgOTkgPGludHR5cGVzLmg+IGZvcm1hdHN0cmluZyBtYWNyb3Mgd2lsbCBiZSBpZ25vcmVkLgorK2RubCBJTlRMRElSIGlzIHVzZWQgdG8gZmluZCB0aGUgaW50bCBsaWJyYXJpZXMuICBJZiBlbXB0eSwKKytkbmwgICAgdGhlIHZhbHVlIGAkKHRvcF9idWlsZGRpcikvaW50bC8nIGlzIHVzZWQuCisrZG5sCisrZG5sIFRoZSByZXN1bHQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gaXMgb25lIG9mIHRocmVlIGNhc2VzOgorK2RubCAxKSBHTlUgZ2V0dGV4dCwgYXMgaW5jbHVkZWQgaW4gdGhlIGludGwgc3ViZGlyZWN0b3J5LCB3aWxsIGJlIGNvbXBpbGVkCisrZG5sICAgIGFuZCB1c2VkLgorK2RubCAgICBDYXRhbG9nIGZvcm1hdDogR05VIC0tPiBpbnN0YWxsIGluICQoZGF0YWRpcikKKytkbmwgICAgQ2F0YWxvZyBleHRlbnNpb246IC5tbyBhZnRlciBpbnN0YWxsYXRpb24sIC5nbW8gaW4gc291cmNlIHRyZWUKKytkbmwgMikgR05VIGdldHRleHQgaGFzIGJlZW4gZm91bmQgaW4gdGhlIHN5c3RlbSdzIEMgbGlicmFyeS4KKytkbmwgICAgQ2F0YWxvZyBmb3JtYXQ6IEdOVSAtLT4gaW5zdGFsbCBpbiAkKGRhdGFkaXIpCisrZG5sICAgIENhdGFsb2cgZXh0ZW5zaW9uOiAubW8gYWZ0ZXIgaW5zdGFsbGF0aW9uLCAuZ21vIGluIHNvdXJjZSB0cmVlCisrZG5sIDMpIE5vIGludGVybmF0aW9uYWxpemF0aW9uLCBhbHdheXMgdXNlIEVuZ2xpc2ggbXNnaWQuCisrZG5sICAgIENhdGFsb2cgZm9ybWF0OiBub25lCisrZG5sICAgIENhdGFsb2cgZXh0ZW5zaW9uOiBub25lCisrZG5sIElmIElOVExTWU1CT0wgaXMgJ2V4dGVybmFsJywgb25seSBjYXNlcyAyIGFuZCAzIGNhbiBvY2N1ci4KKytkbmwgVGhlIHVzZSBvZiAuZ21vIGlzIGhpc3RvcmljYWwgKGl0IHdhcyBuZWVkZWQgdG8gYXZvaWQgb3ZlcndyaXRpbmcgdGhlCisrZG5sIEdOVSBmb3JtYXQgY2F0YWxvZ3Mgd2hlbiBidWlsZGluZyBvbiBhIHBsYXRmb3JtIHdpdGggYW4gWC9PcGVuIGdldHRleHQpLAorK2RubCBidXQgd2Uga2VlcCBpdCBpbiBvcmRlciBub3QgdG8gZm9yY2UgaXJyZWxldmFudCBmaWxlbmFtZSBjaGFuZ2VzIG9uIHRoZQorK2RubCBtYWludGFpbmVycy4KKytkbmwKKytBQ19ERUZVTihbQU1fR05VX0dFVFRFWFRdLAorK1sKKysgIGRubCBBcmd1bWVudCBjaGVja2luZy4KKysgIGlmZWxzZShbJDFdLCBbXSwgLCBbaWZlbHNlKFskMV0sIFtleHRlcm5hbF0sICwgW2lmZWxzZShbJDFdLCBbbm8tbGlidG9vbF0sICwgW2lmZWxzZShbJDFdLCBbdXNlLWxpYnRvb2xdLCAsCisrICAgIFtlcnJwcmludChbRVJST1I6IGludmFsaWQgZmlyc3QgYXJndW1lbnQgdG8gQU1fR05VX0dFVFRFWFQKKytdKV0pXSldKV0pCisrICBpZmVsc2UoWyQyXSwgW10sICwgW2lmZWxzZShbJDJdLCBbbmVlZC1uZ2V0dGV4dF0sICwgW2lmZWxzZShbJDJdLCBbbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zXSwgLAorKyAgICBbZXJycHJpbnQoW0VSUk9SOiBpbnZhbGlkIHNlY29uZCBhcmd1bWVudCB0byBBTV9HTlVfR0VUVEVYVAorK10pXSldKV0pCisrICBkZWZpbmUoZ3RfaW5jbHVkZWRfaW50bCwgaWZlbHNlKFskMV0sIFtleHRlcm5hbF0sIFtub10sIFt5ZXNdKSkKKysgIGRlZmluZShndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXgsIGlmZWxzZShbJDFdLCBbdXNlLWxpYnRvb2xdLCBbbF0sIFtdKSkKKysKKysgIEFDX1JFUVVJUkUoW0FNX1BPX1NVQkRJUlNdKWRubAorKyAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworKyAgICBBQ19SRVFVSVJFKFtBTV9JTlRMX1NVQkRJUl0pZG5sCisrICBdKQorKworKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgQUNfTElCX0xJTktGTEFHU19CT0RZLgorKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisrCisrICBkbmwgU29tZXRpbWVzIGxpYmludGwgcmVxdWlyZXMgbGliaWNvbnYsIHNvIGZpcnN0IHNlYXJjaCBmb3IgbGliaWNvbnYuCisrICBkbmwgSWRlYWxseSB3ZSB3b3VsZCBkbyB0aGlzIHNlYXJjaCBvbmx5IGFmdGVyIHRoZQorKyAgZG5sICAgICAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKysgIGRubCAgICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjIiAhPSAieWVzIjsgdGhlbgorKyAgZG5sIHRlc3RzLiBCdXQgaWYgY29uZmlndXJlLmluIGludm9rZXMgQU1fSUNPTlYgYWZ0ZXIgQU1fR05VX0dFVFRFWFQKKysgIGRubCB0aGUgY29uZmlndXJlIHNjcmlwdCB3b3VsZCBuZWVkIHRvIGNvbnRhaW4gdGhlIHNhbWUgc2hlbGwgY29kZQorKyAgZG5sIGFnYWluLCBvdXRzaWRlIGFueSAnaWYnLiBUaGVyZSBhcmUgdHdvIHNvbHV0aW9uczoKKysgIGRubCAtIEludm9rZSBBTV9JQ09OVl9MSU5LRkxBR1NfQk9EWSBoZXJlLCBvdXRzaWRlIGFueSAnaWYnLgorKyAgZG5sIC0gQ29udHJvbCB0aGUgZXhwYW5zaW9ucyBpbiBtb3JlIGRldGFpbCB1c2luZyBBQ19QUk9WSURFX0lGRUxTRS4KKysgIGRubCBTaW5jZSBBQ19QUk9WSURFX0lGRUxTRSBpcyBvbmx5IGluIGF1dG9jb25mID49IDIuNTIgYW5kIG5vdAorKyAgZG5sIGRvY3VtZW50ZWQsIHdlIGF2b2lkIGl0LgorKyAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgLCBbCisrICAgIEFDX1JFUVVJUkUoW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSkKKysgIF0pCisrCisrICBkbmwgU2V0IFVTRV9OTFMuCisrICBBTV9OTFMKKysKKysgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKKysgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD1ubworKyAgICBVU0VfSU5DTFVERURfTElCSU5UTD1ubworKyAgXSkKKysgIExJQklOVEw9CisrICBMVExJQklOVEw9CisrICBQT1NVQj0KKysKKysgIGRubCBJZiB3ZSB1c2UgTkxTIGZpZ3VyZSBvdXQgd2hhdCBtZXRob2QKKysgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisrICAgIGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dD1ubworKyAgICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisrICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGluY2x1ZGVkIGdldHRleHQgaXMgcmVxdWVzdGVkXSkKKysgICAgICBBQ19BUkdfV0lUSChpbmNsdWRlZC1nZXR0ZXh0LAorKyAgICAgICAgWyAgLS13aXRoLWluY2x1ZGVkLWdldHRleHQgdXNlIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGluY2x1ZGVkIGhlcmVdLAorKyAgICAgICAgbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dD0kd2l0aHZhbCwKKysgICAgICAgIG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQ9bm8pCisrICAgICAgQUNfTVNHX1JFU1VMVCgkbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dCkKKysKKysgICAgICBubHNfY3ZfdXNlX2dudV9nZXR0ZXh0PSIkbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dCIKKysgICAgICBpZiB0ZXN0ICIkbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dCIgIT0gInllcyI7IHRoZW4KKysgICAgXSkKKysgICAgICAgIGRubCBVc2VyIGRvZXMgbm90IGluc2lzdCBvbiB1c2luZyBHTlUgTkxTIGxpYnJhcnkuICBGaWd1cmUgb3V0IHdoYXQKKysgICAgICAgIGRubCB0byB1c2UuICBJZiBHTlUgZ2V0dGV4dCBpcyBhdmFpbGFibGUgd2UgdXNlIHRoaXMuICBFbHNlIHdlIGhhdmUKKysgICAgICAgIGRubCB0byBmYWxsIGJhY2sgdG8gR05VIE5MUyBsaWJyYXJ5LgorKworKyAgICAgICAgZG5sIEFkZCBhIHZlcnNpb24gbnVtYmVyIHRvIHRoZSBjYWNoZSBtYWNyb3MuCisrICAgICAgICBkZWZpbmUoW2d0X2FwaV92ZXJzaW9uXSwgaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLCAzLCBpZmVsc2UoWyQyXSwgW25lZWQtbmdldHRleHRdLCAyLCAxKSkpCisrICAgICAgICBkZWZpbmUoW2d0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjXSwgW2d0X2N2X2Z1bmNfZ251Z2V0dGV4dF1ndF9hcGlfdmVyc2lvbltfbGliY10pCisrICAgICAgICBkZWZpbmUoW2d0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsXSwgW2d0X2N2X2Z1bmNfZ251Z2V0dGV4dF1ndF9hcGlfdmVyc2lvbltfbGliaW50bF0pCisrCisrICAgICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIEdOVSBnZXR0ZXh0IGluIGxpYmNdLCBndF9jdl9mdW5jX2dudWdldHRleHRfbGliYywKKysgICAgICAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsaWJpbnRsLmg+CisrXWlmZWxzZShbJDJdLCBbbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zXSwKKytbI2lmbmRlZiBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTgorKyNkZWZpbmUgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04obWFqb3IpICgobWFqb3IpID09IDAgPyAwIDogLTEpCisrI2VuZGlmCisrY2hhbmdlcXVvdGUoLClkbmwKKyt0eXBlZGVmIGludCBhcnJheSBbMiAqIChfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTigwKSA+PSAxKSAtIDFdOworK2NoYW5nZXF1b3RlKFssXSlkbmwKKytdLCBbXSlbZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworK2V4dGVybiBpbnQgKl9ubF9kb21haW5fYmluZGluZ3M7XSwKKysgICAgICAgICAgICBbYmluZHRleHRkb21haW4gKCIiLCAiIik7CisrcmV0dXJuIChpbnQpIGdldHRleHQgKCIiKV1pZmVsc2UoWyQyXSwgW25lZWQtbmdldHRleHRdLCBbICsgKGludCkgbmdldHRleHQgKCIiLCAiIiwgMCldLCBbXSlbICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZG9tYWluX2JpbmRpbmdzXSwKKysgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliYz15ZXMsCisrICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmM9bm8pXSkKKysKKysgICAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHRfbGliYyIgIT0gInllcyI7IHRoZW4KKysgICAgICAgICAgZG5sIFNvbWV0aW1lcyBsaWJpbnRsIHJlcXVpcmVzIGxpYmljb252LCBzbyBmaXJzdCBzZWFyY2ggZm9yIGxpYmljb252LgorKyAgICAgICAgICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCAsIFsKKysgICAgICAgICAgICBBTV9JQ09OVl9MSU5LCisrICAgICAgICAgIF0pCisrICAgICAgICAgIGRubCBTZWFyY2ggZm9yIGxpYmludGwgYW5kIGRlZmluZSBMSUJJTlRMLCBMVExJQklOVEwgYW5kIElOQ0lOVEwKKysgICAgICAgICAgZG5sIGFjY29yZGluZ2x5LiBEb24ndCB1c2UgQUNfTElCX0xJTktGTEFHU19CT0RZKFtpbnRsXSxbaWNvbnZdKQorKyAgICAgICAgICBkbmwgYmVjYXVzZSB0aGF0IHdvdWxkIGFkZCAiLWxpY29udiIgdG8gTElCSU5UTCBhbmQgTFRMSUJJTlRMCisrICAgICAgICAgIGRubCBldmVuIGlmIGxpYmljb252IGRvZXNuJ3QgZXhpc3QuCisrICAgICAgICAgIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbaW50bF0pCisrICAgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgR05VIGdldHRleHQgaW4gbGliaW50bF0sCisrICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwsCisrICAgICAgICAgICBbZ3Rfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorKyAgICAgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJElOQ0lOVEwiCisrICAgICAgICAgICAgZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKKysgICAgICAgICAgICBMSUJTPSIkTElCUyAkTElCSU5UTCIKKysgICAgICAgICAgICBkbmwgTm93IHNlZSB3aGV0aGVyIGxpYmludGwgZXhpc3RzIGFuZCBkb2VzIG5vdCBkZXBlbmQgb24gbGliaWNvbnYuCisrICAgICAgICAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsaWJpbnRsLmg+CisrXWlmZWxzZShbJDJdLCBbbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zXSwKKytbI2lmbmRlZiBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTgorKyNkZWZpbmUgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04obWFqb3IpICgobWFqb3IpID09IDAgPyAwIDogLTEpCisrI2VuZGlmCisrY2hhbmdlcXVvdGUoLClkbmwKKyt0eXBlZGVmIGludCBhcnJheSBbMiAqIChfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTigwKSA+PSAxKSAtIDFdOworK2NoYW5nZXF1b3RlKFssXSlkbmwKKytdLCBbXSlbZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworK2V4dGVybgorKyNpZmRlZiBfX2NwbHVzcGx1cworKyJDIgorKyNlbmRpZgorK2NvbnN0IGNoYXIgKl9ubF9leHBhbmRfYWxpYXMgKCk7XSwKKysgICAgICAgICAgICAgIFtiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKKytyZXR1cm4gKGludCkgZ2V0dGV4dCAoIiIpXWlmZWxzZShbJDJdLCBbbmVlZC1uZ2V0dGV4dF0sIFsgKyAoaW50KSBuZ2V0dGV4dCAoIiIsICIiLCAwKV0sIFtdKVsgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9leHBhbmRfYWxpYXMgKDApXSwKKysgICAgICAgICAgICAgIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPXllcywKKysgICAgICAgICAgICAgIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPW5vKQorKyAgICAgICAgICAgIGRubCBOb3cgc2VlIHdoZXRoZXIgbGliaW50bCBleGlzdHMgYW5kIGRlcGVuZHMgb24gbGliaWNvbnYuCisrICAgICAgICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIiAhPSB5ZXMgJiYgdGVzdCAtbiAiJExJQklDT05WIjsgdGhlbgorKyAgICAgICAgICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgorKyAgICAgICAgICAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsaWJpbnRsLmg+CisrXWlmZWxzZShbJDJdLCBbbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zXSwKKytbI2lmbmRlZiBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTgorKyNkZWZpbmUgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04obWFqb3IpICgobWFqb3IpID09IDAgPyAwIDogLTEpCisrI2VuZGlmCisrY2hhbmdlcXVvdGUoLClkbmwKKyt0eXBlZGVmIGludCBhcnJheSBbMiAqIChfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTigwKSA+PSAxKSAtIDFdOworK2NoYW5nZXF1b3RlKFssXSlkbmwKKytdLCBbXSlbZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworK2V4dGVybgorKyNpZmRlZiBfX2NwbHVzcGx1cworKyJDIgorKyNlbmRpZgorK2NvbnN0IGNoYXIgKl9ubF9leHBhbmRfYWxpYXMgKCk7XSwKKysgICAgICAgICAgICAgICAgW2JpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOworK3JldHVybiAoaW50KSBnZXR0ZXh0ICgiIildaWZlbHNlKFskMl0sIFtuZWVkLW5nZXR0ZXh0XSwgWyArIChpbnQpIG5nZXR0ZXh0ICgiIiwgIiIsIDApXSwgW10pWyArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2V4cGFuZF9hbGlhcyAoMCldLAorKyAgICAgICAgICAgICAgIFtMSUJJTlRMPSIkTElCSU5UTCAkTElCSUNPTlYiCisrICAgICAgICAgICAgICAgIExUTElCSU5UTD0iJExUTElCSU5UTCAkTFRMSUJJQ09OViIKKysgICAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9eWVzCisrICAgICAgICAgICAgICAgXSkKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIENQUEZMQUdTPSIkZ3Rfc2F2ZV9DUFBGTEFHUyIKKysgICAgICAgICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIl0pCisrICAgICAgICBmaQorKworKyAgICAgICAgZG5sIElmIGFuIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQgR05VIGdldHRleHQoKSBpcyBmb3VuZCwKKysgICAgICAgIGRubCB1c2UgaXQuICBCdXQgaWYgdGhpcyBtYWNybyBpcyB1c2VkIGluIEdOVSBnZXR0ZXh0LCBhbmQgR05VCisrICAgICAgICBkbmwgZ2V0dGV4dCBpcyBhbHJlYWR5IHByZWluc3RhbGxlZCBpbiBsaWJpbnRsLCB3ZSB1cGRhdGUgdGhpcworKyAgICAgICAgZG5sIGxpYmludGwuICAoQ2YuIHRoZSBpbnN0YWxsIHJ1bGUgaW4gaW50bC9NYWtlZmlsZS5pbi4pCisrICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmMiID0gInllcyIgXAorKyAgICAgICAgICAgfHwgeyB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiID0gInllcyIgXAorKyAgICAgICAgICAgICAgICAmJiB0ZXN0ICIkUEFDS0FHRSIgIT0gZ2V0dGV4dC1ydW50aW1lIFwKKysgICAgICAgICAgICAgICAgJiYgdGVzdCAiJFBBQ0tBR0UiICE9IGdldHRleHQtdG9vbHM7IH07IHRoZW4KKysgICAgICAgICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PXllcworKyAgICAgICAgZWxzZQorKyAgICAgICAgICBkbmwgUmVzZXQgdGhlIHZhbHVlcyBzZXQgYnkgc2VhcmNoaW5nIGZvciBsaWJpbnRsLgorKyAgICAgICAgICBMSUJJTlRMPQorKyAgICAgICAgICBMVExJQklOVEw9CisrICAgICAgICAgIElOQ0lOVEw9CisrICAgICAgICBmaQorKworKyAgICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisrICAgICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiAhPSAieWVzIjsgdGhlbgorKyAgICAgICAgICBkbmwgR05VIGdldHRleHQgaXMgbm90IGZvdW5kIGluIHRoZSBDIGxpYnJhcnkuCisrICAgICAgICAgIGRubCBGYWxsIGJhY2sgb24gaW5jbHVkZWQgR05VIGdldHRleHQgbGlicmFyeS4KKysgICAgICAgICAgbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dD15ZXMKKysgICAgICAgIGZpCisrICAgICAgZmkKKysKKysgICAgICBpZiB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgorKyAgICAgICAgZG5sIE1hcmsgYWN0aW9ucyB1c2VkIHRvIGdlbmVyYXRlIEdOVSBOTFMgbGlicmFyeS4KKysgICAgICAgIEJVSUxEX0lOQ0xVREVEX0xJQklOVEw9eWVzCisrICAgICAgICBVU0VfSU5DTFVERURfTElCSU5UTD15ZXMKKysgICAgICAgIExJQklOVEw9ImlmZWxzZShbJDNdLFtdLFwke3RvcF9idWlsZGRpcn0vaW50bCxbJDNdKS9saWJpbnRsLltdZ3RfbGlidG9vbF9zdWZmaXhfcHJlZml4W11hICRMSUJJQ09OViIKKysgICAgICAgIExUTElCSU5UTD0iaWZlbHNlKFskM10sW10sXCR7dG9wX2J1aWxkZGlyfS9pbnRsLFskM10pL2xpYmludGwuW11ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhbXWEgJExUTElCSUNPTlYiCisrICAgICAgICBMSUJTPWBlY2hvICIgJExJQlMgIiB8IHNlZCAtZSAncy8gLWxpbnRsIC8gLycgLWUgJ3MvXiAvLycgLWUgJ3MvICQvLydgCisrICAgICAgZmkKKysKKysgICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKKysgICAgICAgICB8fCB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgorKyAgICAgICAgZG5sIE1hcmsgYWN0aW9ucyB0byB1c2UgR05VIGdldHRleHQgdG9vbHMuCisrICAgICAgICBDQVRPQkpFWFQ9LmdtbworKyAgICAgIGZpCisrICAgIF0pCisrCisrICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAorKyAgICAgICB8fCB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgorKyAgICAgIEFDX0RFRklORShFTkFCTEVfTkxTLCAxLAorKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHRyYW5zbGF0aW9uIG9mIHByb2dyYW0gbWVzc2FnZXMgdG8gdGhlIHVzZXIncyBuYXRpdmUgbGFuZ3VhZ2UKKysgICBpcyByZXF1ZXN0ZWQuXSkKKysgICAgZWxzZQorKyAgICAgIFVTRV9OTFM9bm8KKysgICAgZmkKKysgIGZpCisrCisrICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gdXNlIE5MU10pCisrICBBQ19NU0dfUkVTVUxUKFskVVNFX05MU10pCisrICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXJlIHRoZSBnZXR0ZXh0IGZ1bmN0aW9uIGNvbWVzIGZyb21dKQorKyAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisrICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIiA9ICJ5ZXMiOyB0aGVuCisrICAgICAgICBndF9zb3VyY2U9ImV4dGVybmFsIGxpYmludGwiCisrICAgICAgZWxzZQorKyAgICAgICAgZ3Rfc291cmNlPSJsaWJjIgorKyAgICAgIGZpCisrICAgIGVsc2UKKysgICAgICBndF9zb3VyY2U9ImluY2x1ZGVkIGludGwgZGlyZWN0b3J5IgorKyAgICBmaQorKyAgICBBQ19NU0dfUkVTVUxUKFskZ3Rfc291cmNlXSkKKysgIGZpCisrCisrICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorKworKyAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisrICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIiA9ICJ5ZXMiOyB0aGVuCisrICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBsaW5rIHdpdGggbGliaW50bF0pCisrICAgICAgICBBQ19NU0dfUkVTVUxUKFskTElCSU5UTF0pCisrICAgICAgICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNJTlRMXSkKKysgICAgICBmaQorKworKyAgICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBwYWNrYWdlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKysgICAgICBBQ19ERUZJTkUoSEFWRV9HRVRURVhULCAxLAorKyAgICAgICBbRGVmaW5lIGlmIHRoZSBHTlUgZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuXSkKKysgICAgICBBQ19ERUZJTkUoSEFWRV9EQ0dFVFRFWFQsIDEsCisrICAgICAgIFtEZWZpbmUgaWYgdGhlIEdOVSBkY2dldHRleHQoKSBmdW5jdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkLl0pCisrICAgIGZpCisrCisrICAgIGRubCBXZSBuZWVkIHRvIHByb2Nlc3MgdGhlIHBvLyBkaXJlY3RvcnkuCisrICAgIFBPU1VCPXBvCisrICBmaQorKworKyAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworKyAgICBkbmwgSWYgdGhpcyBpcyB1c2VkIGluIEdOVSBnZXR0ZXh0IHdlIGhhdmUgdG8gc2V0IEJVSUxEX0lOQ0xVREVEX0xJQklOVEwKKysgICAgZG5sIHRvICd5ZXMnIGJlY2F1c2Ugc29tZSBvZiB0aGUgdGVzdHN1aXRlIHJlcXVpcmVzIGl0LgorKyAgICBpZiB0ZXN0ICIkUEFDS0FHRSIgPSBnZXR0ZXh0LXJ1bnRpbWUgfHwgdGVzdCAiJFBBQ0tBR0UiID0gZ2V0dGV4dC10b29sczsgdGhlbgorKyAgICAgIEJVSUxEX0lOQ0xVREVEX0xJQklOVEw9eWVzCisrICAgIGZpCisrCisrICAgIGRubCBNYWtlIGFsbCB2YXJpYWJsZXMgd2UgdXNlIGtub3duIHRvIGF1dG9jb25mLgorKyAgICBBQ19TVUJTVChCVUlMRF9JTkNMVURFRF9MSUJJTlRMKQorKyAgICBBQ19TVUJTVChVU0VfSU5DTFVERURfTElCSU5UTCkKKysgICAgQUNfU1VCU1QoQ0FUT0JKRVhUKQorKworKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgY29uZmlndXJlLmlucyBtYXkgYmUgdXNpbmcgdGhpcy4KKysgICAgbmxzX2N2X2hlYWRlcl9pbnRsPQorKyAgICBubHNfY3ZfaGVhZGVyX2xpYmd0PQorKworKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorKyAgICBEQVRBRElSTkFNRT1zaGFyZQorKyAgICBBQ19TVUJTVChEQVRBRElSTkFNRSkKKysKKysgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKysgICAgSU5TVE9CSkVYVD0ubW8KKysgICAgQUNfU1VCU1QoSU5TVE9CSkVYVCkKKysKKysgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKysgICAgR0VOQ0FUPWdlbmNhdAorKyAgICBBQ19TVUJTVChHRU5DQVQpCisrCisrICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisrICAgIGlmIHRlc3QgIiRVU0VfSU5DTFVERURfTElCSU5UTCIgPSB5ZXM7IHRoZW4KKysgICAgICBJTlRMT0JKUz0iXCQoR0VUVE9CSlMpIgorKyAgICBmaQorKyAgICBBQ19TVUJTVChJTlRMT0JKUykKKysKKysgICAgZG5sIEVuYWJsZSBsaWJ0b29sIHN1cHBvcnQgaWYgdGhlIHN1cnJvdW5kaW5nIHBhY2thZ2Ugd2lzaGVzIGl0LgorKyAgICBJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWD1ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXgKKysgICAgQUNfU1VCU1QoSU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVgpCisrICBdKQorKworKyAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKysgIElOVExMSUJTPSIkTElCSU5UTCIKKysgIEFDX1NVQlNUKElOVExMSUJTKQorKworKyAgZG5sIE1ha2UgYWxsIGRvY3VtZW50ZWQgdmFyaWFibGVzIGtub3duIHRvIGF1dG9jb25mLgorKyAgQUNfU1VCU1QoTElCSU5UTCkKKysgIEFDX1NVQlNUKExUTElCSU5UTCkKKysgIEFDX1NVQlNUKFBPU1VCKQorK10pCisrCisrCisrZG5sIENoZWNrcyBmb3IgYWxsIHByZXJlcXVpc2l0ZXMgb2YgdGhlIGludGwgc3ViZGlyZWN0b3J5LAorK2RubCBleGNlcHQgZm9yIElOVExfTElCVE9PTF9TVUZGSVhfUFJFRklYIChhbmQgcG9zc2libHkgTElCVE9PTCksIElOVExPQkpTLAorK2RubCAgICAgICAgICAgIFVTRV9JTkNMVURFRF9MSUJJTlRMLCBCVUlMRF9JTkNMVURFRF9MSUJJTlRMLgorK0FDX0RFRlVOKFtBTV9JTlRMX1NVQkRJUl0sCisrWworKyAgQUNfUkVRVUlSRShbQUNfUFJPR19JTlNUQUxMXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FNX01LSU5TVEFMTERJUlNdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX1JBTkxJQl0pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19JU0NfUE9TSVhdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfQ19DT05TVF0pZG5sCisrICBBQ19SRVFVSVJFKFtiaF9DX1NJR05FRF0pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19DX0lOTElORV0pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19UWVBFX09GRl9UXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX1RZUEVfU0laRV9UXSlkbmwKKysgIEFDX1JFUVVJUkUoW2ptX0FDX1RZUEVfTE9OR19MT05HXSlkbmwKKysgIEFDX1JFUVVJUkUoW2d0X1RZUEVfTE9OR0RPVUJMRV0pZG5sCisrICBBQ19SRVFVSVJFKFtndF9UWVBFX1dDSEFSX1RdKWRubAorKyAgQUNfUkVRVUlSRShbZ3RfVFlQRV9XSU5UX1RdKWRubAorKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX0lOVFRZUEVTX0hdKQorKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX1NURElOVF9IXSkKKysgIEFDX1JFUVVJUkUoW2d0X1RZUEVfSU5UTUFYX1RdKQorKyAgQUNfUkVRVUlSRShbZ3RfUFJJTlRGX1BPU0lYXSkKKysgIEFDX1JFUVVJUkUoW0FDX0ZVTkNfQUxMT0NBXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0ZVTkNfTU1BUF0pZG5sCisrICBBQ19SRVFVSVJFKFtqbV9HTElCQzIxXSlkbmwKKysgIEFDX1JFUVVJUkUoW2d0X0lOVERJVjBdKWRubAorKyAgQUNfUkVRVUlSRShbam1fQUNfVFlQRV9VSU5UTUFYX1RdKWRubAorKyAgQUNfUkVRVUlSRShbZ3RfSEVBREVSX0lOVFRZUEVTX0hdKWRubAorKyAgQUNfUkVRVUlSRShbZ3RfSU5UVFlQRVNfUFJJXSlkbmwKKysgIEFDX1JFUVVJUkUoW2dsX1hTSVpFXSlkbmwKKysKKysgIEFDX0NIRUNLX1RZUEUoW3B0cmRpZmZfdF0sICwKKysgICAgW0FDX0RFRklORShbcHRyZGlmZl90XSwgW2xvbmddLAorKyAgICAgICBbRGVmaW5lIGFzIHRoZSB0eXBlIG9mIHRoZSByZXN1bHQgb2Ygc3VidHJhY3RpbmcgdHdvIHBvaW50ZXJzLCBpZiB0aGUgc3lzdGVtIGRvZXNuJ3QgZGVmaW5lIGl0Ll0pCisrICAgIF0pCisrICBBQ19DSEVDS19IRUFERVJTKFthcmd6LmggbGltaXRzLmggbG9jYWxlLmggbmxfdHlwZXMuaCBtYWxsb2MuaCBzdGRkZWYuaCBcCisrc3RkbGliLmggc3RyaW5nLmggdW5pc3RkLmggc3lzL3BhcmFtLmhdKQorKyAgQUNfQ0hFQ0tfRlVOQ1MoW2FzcHJpbnRmIGZ3cHJpbnRmIGdldGN3ZCBnZXRlZ2lkIGdldGV1aWQgZ2V0Z2lkIGdldHVpZCBcCisrbWVtcGNweSBtdW5tYXAgcHV0ZW52IHNldGVudiBzZXRsb2NhbGUgc25wcmludGYgc3RwY3B5IHN0cmNhc2VjbXAgc3RyZHVwIFwKKytzdHJ0b3VsIHRzZWFyY2ggd2NzbGVuIF9fYXJnel9jb3VudCBfX2FyZ3pfc3RyaW5naWZ5IF9fYXJnel9uZXh0IFwKKytfX2ZzZXRsb2NraW5nXSkKKysKKysgIGRubCBVc2UgdGhlIF9zbnByaW50ZiBmdW5jdGlvbiBvbmx5IGlmIGl0IGlzIGRlY2xhcmVkIChiZWNhdXNlIG9uIE5ldEJTRCBpdAorKyAgZG5sIGlzIGRlZmluZWQgYXMgYSB3ZWFrIGFsaWFzIG9mIHNucHJpbnRmOyB3ZSBwcmVmZXIgdG8gdXNlIHRoZSBsYXR0ZXIpLgorKyAgZ3RfQ0hFQ0tfREVDTChfc25wcmludGYsIFsjaW5jbHVkZSA8c3RkaW8uaD5dKQorKyAgZ3RfQ0hFQ0tfREVDTChfc253cHJpbnRmLCBbI2luY2x1ZGUgPHN0ZGlvLmg+XSkKKysKKysgIGRubCBVc2UgdGhlICpfdW5sb2NrZWQgZnVuY3Rpb25zIG9ubHkgaWYgdGhleSBhcmUgZGVjbGFyZWQuCisrICBkbmwgKGJlY2F1c2Ugc29tZSBvZiB0aGVtIHdlcmUgZGVmaW5lZCB3aXRob3V0IGJlaW5nIGRlY2xhcmVkIGluIFNvbGFyaXMKKysgIGRubCAyLjUuMSBidXQgd2VyZSByZW1vdmVkIGluIFNvbGFyaXMgMi42LCB3aGVyZWFzIHdlIHdhbnQgYmluYXJpZXMgYnVpbHQKKysgIGRubCBvbiBTb2xhcmlzIDIuNS4xIHRvIHJ1biBvbiBTb2xhcmlzIDIuNikuCisrICBkbmwgRG9uJ3QgdXNlIEFDX0NIRUNLX0RFQ0xTIGJlY2F1c2UgaXQgaXNuJ3Qgc3VwcG9ydGVkIGluIGF1dG9jb25mLTIuMTMuCisrICBndF9DSEVDS19ERUNMKGZlb2ZfdW5sb2NrZWQsIFsjaW5jbHVkZSA8c3RkaW8uaD5dKQorKyAgZ3RfQ0hFQ0tfREVDTChmZ2V0c191bmxvY2tlZCwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisrICBndF9DSEVDS19ERUNMKGdldGNfdW5sb2NrZWQsIFsjaW5jbHVkZSA8c3RkaW8uaD5dKQorKworKyAgY2FzZSAkZ3RfY3ZfZnVuY19wcmludGZfcG9zaXggaW4KKysgICAgKnllcykgSEFWRV9QT1NJWF9QUklOVEY9MSA7OworKyAgICAqKSBIQVZFX1BPU0lYX1BSSU5URj0wIDs7CisrICBlc2FjCisrICBBQ19TVUJTVChbSEFWRV9QT1NJWF9QUklOVEZdKQorKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfYXNwcmludGYiID0geWVzOyB0aGVuCisrICAgIEhBVkVfQVNQUklOVEY9MQorKyAgZWxzZQorKyAgICBIQVZFX0FTUFJJTlRGPTAKKysgIGZpCisrICBBQ19TVUJTVChbSEFWRV9BU1BSSU5URl0pCisrICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19zbnByaW50ZiIgPSB5ZXM7IHRoZW4KKysgICAgSEFWRV9TTlBSSU5URj0xCisrICBlbHNlCisrICAgIEhBVkVfU05QUklOVEY9MAorKyAgZmkKKysgIEFDX1NVQlNUKFtIQVZFX1NOUFJJTlRGXSkKKysgIGlmIHRlc3QgIiRhY19jdl9mdW5jX3dwcmludGYiID0geWVzOyB0aGVuCisrICAgIEhBVkVfV1BSSU5URj0xCisrICBlbHNlCisrICAgIEhBVkVfV1BSSU5URj0wCisrICBmaQorKyAgQUNfU1VCU1QoW0hBVkVfV1BSSU5URl0pCisrCisrICBBTV9JQ09OVgorKyAgQU1fTEFOR0lORk9fQ09ERVNFVAorKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2xvY2FsZV9oID0geWVzOyB0aGVuCisrICAgIEFNX0xDX01FU1NBR0VTCisrICBmaQorKworKyAgZG5sIGludGwvcGx1cmFsLmMgaXMgZ2VuZXJhdGVkIGZyb20gaW50bC9wbHVyYWwueS4gSXQgcmVxdWlyZXMgYmlzb24sCisrICBkbmwgYmVjYXVzZSBwbHVyYWwueSB1c2VzIGJpc29uIHNwZWNpZmljIGZlYXR1cmVzLiBJdCByZXF1aXJlcyBhdCBsZWFzdAorKyAgZG5sIGJpc29uLTEuMjYgYmVjYXVzZSBlYXJsaWVyIHZlcnNpb25zIGdlbmVyYXRlIGEgcGx1cmFsLmMgdGhhdCBkb2Vzbid0CisrICBkbmwgY29tcGlsZS4KKysgIGRubCBiaXNvbiBpcyBvbmx5IG5lZWRlZCBmb3IgdGhlIG1haW50YWluZXIgKHdobyB0b3VjaGVzIHBsdXJhbC55KS4gQnV0IGluCisrICBkbmwgb3JkZXIgdG8gYXZvaWQgc2VwYXJhdGUgTWFrZWZpbGVzIG9yIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSwgd2UgcHV0CisrICBkbmwgdGhlIHJ1bGUgaW4gZ2VuZXJhbCBNYWtlZmlsZS4gTm93LCBzb21lIHBlb3BsZSBjYXJlbGVzc2x5IHRvdWNoIHRoZQorKyAgZG5sIGZpbGVzIG9yIGhhdmUgYSBicm9rZW4gIm1ha2UiIHByb2dyYW0sIGhlbmNlIHRoZSBwbHVyYWwuYyBydWxlIHdpbGwKKysgIGRubCBzb21ldGltZXMgZmlyZS4gVG8gYXZvaWQgYW4gZXJyb3IsIGRlZmluZXMgQklTT04gdG8gIjoiIGlmIGl0IGlzIG5vdAorKyAgZG5sIHByZXNlbnQgb3IgdG9vIG9sZC4KKysgIEFDX0NIRUNLX1BST0dTKFtJTlRMQklTT05dLCBbYmlzb25dKQorKyAgaWYgdGVzdCAteiAiJElOVExCSVNPTiI7IHRoZW4KKysgICAgYWNfdmVyY19mYWlsPXllcworKyAgZWxzZQorKyAgICBkbmwgRm91bmQgaXQsIG5vdyBjaGVjayB0aGUgdmVyc2lvbi4KKysgICAgQUNfTVNHX0NIRUNLSU5HKFt2ZXJzaW9uIG9mIGJpc29uXSkKKytjaGFuZ2VxdW90ZSg8PCw+PilkbmwKKysgICAgYWNfcHJvZ192ZXJzaW9uPWAkSU5UTEJJU09OIC0tdmVyc2lvbiAyPiYxIHwgc2VkIC1uICdzL14uKkdOVSBCaXNvbi4qIFwoWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCisrICAgIGNhc2UgJGFjX3Byb2dfdmVyc2lvbiBpbgorKyAgICAgICcnKSBhY19wcm9nX3ZlcnNpb249InYuID8uPz8sIGJhZCI7IGFjX3ZlcmNfZmFpbD15ZXM7OworKyAgICAgIDEuMls2LTldKiB8IDEuWzMtOV1bMC05XSogfCBbMi05XS4qKQorK2NoYW5nZXF1b3RlKFssXSlkbmwKKysgICAgICAgICBhY19wcm9nX3ZlcnNpb249IiRhY19wcm9nX3ZlcnNpb24sIG9rIjsgYWNfdmVyY19mYWlsPW5vOzsKKysgICAgICAqKSBhY19wcm9nX3ZlcnNpb249IiRhY19wcm9nX3ZlcnNpb24sIGJhZCI7IGFjX3ZlcmNfZmFpbD15ZXM7OworKyAgICBlc2FjCisrICAgIEFDX01TR19SRVNVTFQoWyRhY19wcm9nX3ZlcnNpb25dKQorKyAgZmkKKysgIGlmIHRlc3QgJGFjX3ZlcmNfZmFpbCA9IHllczsgdGhlbgorKyAgICBJTlRMQklTT049OgorKyAgZmkKKytdKQorKworKworK2RubCBndF9DSEVDS19ERUNMKEZVTkMsIElOQ0xVREVTKQorK2RubCBDaGVjayB3aGV0aGVyIGEgZnVuY3Rpb24gaXMgZGVjbGFyZWQuCisrQUNfREVGVU4oW2d0X0NIRUNLX0RFQ0xdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICQxIGlzIGRlY2xhcmVkXSwgYWNfY3ZfaGF2ZV9kZWNsXyQxLAorKyAgICBbQUNfVFJZX0NPTVBJTEUoWyQyXSwgWworKyNpZm5kZWYgJDEKKysgIGNoYXIgKnAgPSAoY2hhciAqKSAkMTsKKysjZW5kaWYKKytdLCBhY19jdl9oYXZlX2RlY2xfJDE9eWVzLCBhY19jdl9oYXZlX2RlY2xfJDE9bm8pXSkKKysgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF8kMSA9IHllczsgdGhlbgorKyAgICBndF92YWx1ZT0xCisrICBlbHNlCisrICAgIGd0X3ZhbHVlPTAKKysgIGZpCisrICBBQ19ERUZJTkVfVU5RVU9URUQoW0hBVkVfREVDTF9ddHJhbnNsaXQoJDEsIFthLXpdLCBbQS1aXSksIFskZ3RfdmFsdWVdLAorKyAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGAkMScsIGFuZCB0byAwIGlmIHlvdSBkb24ndC5dKQorK10pCisrCisrCisrZG5sIFVzYWdlOiBBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKFtnZXR0ZXh0LXZlcnNpb25dKQorK0FDX0RFRlVOKFtBTV9HTlVfR0VUVEVYVF9WRVJTSU9OXSwgW10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2dsaWJjMjEubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2dsaWJjMjEubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44MzM2NzU0MzIgLTA0MDAKK0BAIC0wLDAgKzEsMzIgQEAKKysjIGdsaWJjMjEubTQgc2VyaWFsIDIgKGZpbGV1dGlscy00LjEuMywgZ2V0dGV4dC0wLjEwLjQwKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworKyMgVGVzdCBmb3IgdGhlIEdOVSBDIExpYnJhcnksIHZlcnNpb24gMi4xIG9yIG5ld2VyLgorKyMgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW2ptX0dMSUJDMjFdLAorKyAgWworKyAgICBBQ19DQUNIRV9DSEVDSyh3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgTGlicmFyeSAyLjEgb3IgbmV3ZXIsCisrICAgICAgYWNfY3ZfZ251X2xpYnJhcnlfMl8xLAorKyAgICAgIFtBQ19FR1JFUF9DUFAoW0x1Y2t5IEdOVSB1c2VyXSwKKysJWworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX0dOVV9MSUJSQVJZX18KKysgI2lmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSkgfHwgKF9fR0xJQkNfXyA+IDIpCisrICBMdWNreSBHTlUgdXNlcgorKyAjZW5kaWYKKysjZW5kaWYKKysJXSwKKysJYWNfY3ZfZ251X2xpYnJhcnlfMl8xPXllcywKKysJYWNfY3ZfZ251X2xpYnJhcnlfMl8xPW5vKQorKyAgICAgIF0KKysgICAgKQorKyAgICBBQ19TVUJTVChHTElCQzIxKQorKyAgICBHTElCQzIxPSIkYWNfY3ZfZ251X2xpYnJhcnlfMl8xIgorKyAgXQorKykKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvaWNvbnYubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2ljb252Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuODM5Njc0NTIwIC0wNDAwCitAQCAtMCwwICsxLDEwMyBAQAorKyMgaWNvbnYubTQgc2VyaWFsIEFNNCAoZ2V0dGV4dC0wLjExLjMpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtBTV9JQ09OVl9MSU5LRkxBR1NfQk9EWV0sCisrWworKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgQUNfTElCX0xJTktGTEFHU19CT0RZLgorKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisrCisrICBkbmwgU2VhcmNoIGZvciBsaWJpY29udiBhbmQgZGVmaW5lIExJQklDT05WLCBMVExJQklDT05WIGFuZCBJTkNJQ09OVgorKyAgZG5sIGFjY29yZGluZ2x5LgorKyAgQUNfTElCX0xJTktGTEFHU19CT0RZKFtpY29udl0pCisrXSkKKysKKytBQ19ERUZVTihbQU1fSUNPTlZfTElOS10sCisrWworKyAgZG5sIFNvbWUgc3lzdGVtcyBoYXZlIGljb252IGluIGxpYmMsIHNvbWUgaGF2ZSBpdCBpbiBsaWJpY29udiAoT1NGLzEgYW5kCisrICBkbmwgdGhvc2Ugd2l0aCB0aGUgc3RhbmRhbG9uZSBwb3J0YWJsZSBHTlUgbGliaWNvbnYgaW5zdGFsbGVkKS4KKysKKysgIGRubCBTZWFyY2ggZm9yIGxpYmljb252IGFuZCBkZWZpbmUgTElCSUNPTlYsIExUTElCSUNPTlYgYW5kIElOQ0lDT05WCisrICBkbmwgYWNjb3JkaW5nbHkuCisrICBBQ19SRVFVSVJFKFtBTV9JQ09OVl9MSU5LRkxBR1NfQk9EWV0pCisrCisrICBkbmwgQWRkICRJTkNJQ09OViB0byBDUFBGTEFHUyBiZWZvcmUgcGVyZm9ybWluZyB0aGUgZm9sbG93aW5nIGNoZWNrcywKKysgIGRubCBiZWNhdXNlIGlmIHRoZSB1c2VyIGhhcyBpbnN0YWxsZWQgbGliaWNvbnYgYW5kIG5vdCBkaXNhYmxlZCBpdHMgdXNlCisrICBkbmwgdmlhIC0td2l0aG91dC1saWJpY29udi1wcmVmaXgsIGhlIHdhbnRzIHRvIHVzZSBpdC4gVGhlIGZpcnN0CisrICBkbmwgQUNfVFJZX0xJTksgd2lsbCB0aGVuIGZhaWwsIHRoZSBzZWNvbmQgQUNfVFJZX0xJTksgd2lsbCBzdWNjZWVkLgorKyAgYW1fc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorKyAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DSUNPTlZdKQorKworKyAgQUNfQ0FDSEVfQ0hFQ0soZm9yIGljb252LCBhbV9jdl9mdW5jX2ljb252LCBbCisrICAgIGFtX2N2X2Z1bmNfaWNvbnY9Im5vLCBjb25zaWRlciBpbnN0YWxsaW5nIEdOVSBsaWJpY29udiIKKysgICAgYW1fY3ZfbGliX2ljb252PW5vCisrICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGljb252Lmg+XSwKKysgICAgICBbaWNvbnZfdCBjZCA9IGljb252X29wZW4oIiIsIiIpOworKyAgICAgICBpY29udihjZCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKysgICAgICAgaWNvbnZfY2xvc2UoY2QpO10sCisrICAgICAgYW1fY3ZfZnVuY19pY29udj15ZXMpCisrICAgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiAhPSB5ZXM7IHRoZW4KKysgICAgICBhbV9zYXZlX0xJQlM9IiRMSUJTIgorKyAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKKysgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxpY29udi5oPl0sCisrICAgICAgICBbaWNvbnZfdCBjZCA9IGljb252X29wZW4oIiIsIiIpOworKyAgICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworKyAgICAgICAgIGljb252X2Nsb3NlKGNkKTtdLAorKyAgICAgICAgYW1fY3ZfbGliX2ljb252PXllcworKyAgICAgICAgYW1fY3ZfZnVuY19pY29udj15ZXMpCisrICAgICAgTElCUz0iJGFtX3NhdmVfTElCUyIKKysgICAgZmkKKysgIF0pCisrICBpZiB0ZXN0ICIkYW1fY3ZfZnVuY19pY29udiIgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfSUNPTlYsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGljb252KCkgZnVuY3Rpb24uXSkKKysgIGZpCisrICBpZiB0ZXN0ICIkYW1fY3ZfbGliX2ljb252IiA9IHllczsgdGhlbgorKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBsaW5rIHdpdGggbGliaWNvbnZdKQorKyAgICBBQ19NU0dfUkVTVUxUKFskTElCSUNPTlZdKQorKyAgZWxzZQorKyAgICBkbmwgSWYgJExJQklDT05WIGRpZG4ndCBsZWFkIHRvIGEgdXNhYmxlIGxpYnJhcnksIHdlIGRvbid0IG5lZWQgJElOQ0lDT05WCisrICAgIGRubCBlaXRoZXIuCisrICAgIENQUEZMQUdTPSIkYW1fc2F2ZV9DUFBGTEFHUyIKKysgICAgTElCSUNPTlY9CisrICAgIExUTElCSUNPTlY9CisrICBmaQorKyAgQUNfU1VCU1QoTElCSUNPTlYpCisrICBBQ19TVUJTVChMVExJQklDT05WKQorK10pCisrCisrQUNfREVGVU4oW0FNX0lDT05WXSwKKytbCisrICBBTV9JQ09OVl9MSU5LCisrICBpZiB0ZXN0ICIkYW1fY3ZfZnVuY19pY29udiIgPSB5ZXM7IHRoZW4KKysgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgaWNvbnYgZGVjbGFyYXRpb25dKQorKyAgICBBQ19DQUNIRV9WQUwoYW1fY3ZfcHJvdG9faWNvbnYsIFsKKysgICAgICBBQ19UUllfQ09NUElMRShbCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxpY29udi5oPgorK2V4dGVybgorKyNpZmRlZiBfX2NwbHVzcGx1cworKyJDIgorKyNlbmRpZgorKyNpZiBkZWZpbmVkKF9fU1REQ19fKSB8fCBkZWZpbmVkKF9fY3BsdXNwbHVzKQorK3NpemVfdCBpY29udiAoaWNvbnZfdCBjZCwgY2hhciAqICppbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwgY2hhciAqICpvdXRidWYsIHNpemVfdCAqb3V0Ynl0ZXNsZWZ0KTsKKysjZWxzZQorK3NpemVfdCBpY29udigpOworKyNlbmRpZgorK10sIFtdLCBhbV9jdl9wcm90b19pY29udl9hcmcxPSIiLCBhbV9jdl9wcm90b19pY29udl9hcmcxPSJjb25zdCIpCisrICAgICAgYW1fY3ZfcHJvdG9faWNvbnY9ImV4dGVybiBzaXplX3QgaWNvbnYgKGljb252X3QgY2QsICRhbV9jdl9wcm90b19pY29udl9hcmcxIGNoYXIgKiAqaW5idWYsIHNpemVfdCAqaW5ieXRlc2xlZnQsIGNoYXIgKiAqb3V0YnVmLCBzaXplX3QgKm91dGJ5dGVzbGVmdCk7Il0pCisrICAgIGFtX2N2X3Byb3RvX2ljb252PWBlY2hvICJbJF1hbV9jdl9wcm90b19pY29udiIgfCB0ciAtcyAnICcgfCBzZWQgLWUgJ3MvKCAvKC8nYAorKyAgICBBQ19NU0dfUkVTVUxUKFskXXthY190Oi0KKysgICAgICAgICB9WyRdYW1fY3ZfcHJvdG9faWNvbnYpCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChJQ09OVl9DT05TVCwgJGFtX2N2X3Byb3RvX2ljb252X2FyZzEsCisrICAgICAgW0RlZmluZSBhcyBjb25zdCBpZiB0aGUgZGVjbGFyYXRpb24gb2YgaWNvbnYoKSBuZWVkcyBjb25zdC5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9pbnRkaXYwLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9pbnRkaXYwLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuODQ1NjczNjA4IC0wNDAwCitAQCAtMCwwICsxLDcyIEBACisrIyBpbnRkaXYwLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTEuMykKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtndF9JTlRESVYwXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKysKKysgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgU0lHRlBFXSwKKysgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGUsCisrICAgIFsKKysgICAgICBBQ19UUllfUlVOKFsKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHNpZ25hbC5oPgorKworK3N0YXRpYyB2b2lkCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrc2lnZnBlX2hhbmRsZXIgKGludCBzaWcpCisrI2Vsc2UKKytzaWdmcGVfaGFuZGxlciAoc2lnKSBpbnQgc2lnOworKyNlbmRpZgorK3sKKysgIC8qIEV4aXQgd2l0aCBjb2RlIDAgaWYgU0lHRlBFLCB3aXRoIGNvZGUgMSBpZiBhbnkgb3RoZXIgc2lnbmFsLiAgKi8KKysgIGV4aXQgKHNpZyAhPSBTSUdGUEUpOworK30KKysKKytpbnQgeCA9IDE7CisraW50IHkgPSAwOworK2ludCB6OworK2ludCBuYW47CisrCisraW50IG1haW4gKCkKKyt7CisrICBzaWduYWwgKFNJR0ZQRSwgc2lnZnBlX2hhbmRsZXIpOworKy8qIElSSVggYW5kIEFJWCAod2hlbiAieGxjIC1xY2hlY2siIGlzIHVzZWQpIHlpZWxkIHNpZ25hbCBTSUdUUkFQLiAgKi8KKysjaWYgKGRlZmluZWQgKF9fc2dpKSB8fCBkZWZpbmVkIChfQUlYKSkgJiYgZGVmaW5lZCAoU0lHVFJBUCkKKysgIHNpZ25hbCAoU0lHVFJBUCwgc2lnZnBlX2hhbmRsZXIpOworKyNlbmRpZgorKy8qIExpbnV4L1NQQVJDIHlpZWxkcyBzaWduYWwgU0lHSUxMLiAgKi8KKysjaWYgZGVmaW5lZCAoX19zcGFyY19fKSAmJiBkZWZpbmVkIChfX2xpbnV4X18pCisrICBzaWduYWwgKFNJR0lMTCwgc2lnZnBlX2hhbmRsZXIpOworKyNlbmRpZgorKworKyAgeiA9IHggLyB5OworKyAgbmFuID0geSAvIHk7CisrICBleGl0ICgxKTsKKyt9CisrXSwgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9eWVzLCBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT1ubywKKysgICAgICAgIFsKKysgICAgICAgICAgIyBHdWVzcyBiYXNlZCBvbiB0aGUgQ1BVLgorKyAgICAgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisrICAgICAgICAgICAgYWxwaGEqIHwgaVszNDU2N104NiB8IG02OGsgfCBzMzkwKikKKysgICAgICAgICAgICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPSJndWVzc2luZyB5ZXMiOzsKKysgICAgICAgICAgICAqKQorKyAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIG5vIjs7CisrICAgICAgICAgIGVzYWMKKysgICAgICAgIF0pCisrICAgIF0pCisrICBjYXNlICIkZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGUiIGluCisrICAgICp5ZXMpIHZhbHVlPTE7OworKyAgICAqKSB2YWx1ZT0wOzsKKysgIGVzYWMKKysgIEFDX0RFRklORV9VTlFVT1RFRChJTlRESVYwX1JBSVNFU19TSUdGUEUsICR2YWx1ZSwKKysgICAgW0RlZmluZSBpZiBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIHNpZ25hbCBTSUdGUEUuXSkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9pbnRtYXgubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2ludG1heC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljg1NTY3MjA4OCAtMDQwMAorQEAgLTAsMCArMSwzMiBAQAorKyMgaW50bWF4Lm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorK2RubCBUZXN0IHdoZXRoZXIgdGhlIHN5c3RlbSBoYXMgdGhlICdpbnRtYXhfdCcgdHlwZSwgYnV0IGRvbid0IGF0dGVtcHQgdG8KKytkbmwgZmluZCBhIHJlcGxhY2VtZW50IGlmIGl0IGlzIGxhY2tpbmcuCisrCisrQUNfREVGVU4oW2d0X1RZUEVfSU5UTUFYX1RdLAorK1sKKysgIEFDX1JFUVVJUkUoW2ptX0FDX0hFQURFUl9JTlRUWVBFU19IXSkKKysgIEFDX1JFUVVJUkUoW2ptX0FDX0hFQURFUl9TVERJTlRfSF0pCisrICBBQ19DQUNIRV9DSEVDSyhmb3IgaW50bWF4X3QsIGd0X2N2X2NfaW50bWF4X3QsCisrICAgIFtBQ19UUllfQ09NUElMRShbCisrI2luY2x1ZGUgPHN0ZGRlZi5oPiAKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2lmIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYCisrI2luY2x1ZGUgPHN0ZGludC5oPgorKyNlbmRpZgorKyNpZiBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYCisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrI2VuZGlmCisrXSwgW2ludG1heF90IHggPSAtMTtdLCBndF9jdl9jX2ludG1heF90PXllcywgZ3RfY3ZfY19pbnRtYXhfdD1ubyldKQorKyAgaWYgdGVzdCAkZ3RfY3ZfY19pbnRtYXhfdCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9JTlRNQVhfVCwgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaW50bWF4X3QnIHR5cGUgaW4gPHN0ZGludC5oPiBvciA8aW50dHlwZXMuaD4uXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvaW50dHlwZXNfaC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvaW50dHlwZXNfaC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljg2ODY3MDExMiAtMDQwMAorQEAgLTAsMCArMSwyOCBAQAorKyMgaW50dHlwZXNfaC5tNCBzZXJpYWwgNSAoZ2V0dGV4dC0wLjEyKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworKyMgRGVmaW5lIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVggaWYgPGludHR5cGVzLmg+IGV4aXN0cywKKysjIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQgZGVjbGFyZXMgdWludG1heF90LgorKworK0FDX0RFRlVOKFtqbV9BQ19IRUFERVJfSU5UVFlQRVNfSF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBpbnR0eXBlcy5oXSwgam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2gsCisrICBbQUNfVFJZX0NPTVBJTEUoCisrICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+XSwKKysgICAgW3VpbnRtYXhfdCBpID0gKHVpbnRtYXhfdCkgLTE7XSwKKysgICAgam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2g9eWVzLAorKyAgICBqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaD1ubyldKQorKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVgsIDEsCisrICAgICAgW0RlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwKKysgICAgICAgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4gXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvaW50dHlwZXMubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2ludHR5cGVzLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuODYxNjcxMTc2IC0wNDAwCitAQCAtMCwwICsxLDI3IEBACisrIyBpbnR0eXBlcy5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjExLjQpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrIyBEZWZpbmUgSEFWRV9JTlRUWVBFU19IIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRvZXNuJ3QgY2xhc2ggd2l0aAorKyMgPHN5cy90eXBlcy5oPi4KKysKKytBQ19ERUZVTihbZ3RfSEVBREVSX0lOVFRZUEVTX0hdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgaW50dHlwZXMuaF0sIGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oLAorKyAgWworKyAgICBBQ19UUllfQ09NUElMRSgKKysgICAgICBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPl0sCisrICAgICAgW10sIGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oPXllcywgZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2g9bm8pCisrICBdKQorKyAgaWYgdGVzdCAkZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfSU5UVFlQRVNfSCwgMSwKKysgICAgICBbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+Ll0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2ludHR5cGVzLXByaS5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvaW50dHlwZXMtcHJpLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuODc0NjY5MjAwIC0wNDAwCitAQCAtMCwwICsxLDMyIEBACisrIyBpbnR0eXBlcy1wcmkubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMS40KQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKysjIERlZmluZSBQUklfTUFDUk9TX0JST0tFTiBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkZWZpbmVzIHRoZSBQUkkqCisrIyBtYWNyb3MgdG8gbm9uLXN0cmluZyB2YWx1ZXMuICBUaGlzIGlzIHRoZSBjYXNlIG9uIEFJWCA0LjMuMy4KKysKKytBQ19ERUZVTihbZ3RfSU5UVFlQRVNfUFJJXSwKKytbCisrICBBQ19SRVFVSVJFKFtndF9IRUFERVJfSU5UVFlQRVNfSF0pCisrICBpZiB0ZXN0ICRndF9jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgaW50dHlwZXMuaCBQUkl4Tk4gbWFjcm9zIGFyZSBicm9rZW5dLAorKyAgICAgIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4sCisrICAgICAgWworKyAgICAgICAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKyNpZmRlZiBQUklkMzIKKytjaGFyICpwID0gUFJJZDMyOworKyNlbmRpZgorK10sIFtdLCBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuPW5vLCBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuPXllcykKKysgICAgICBdKQorKyAgZmkKKysgIGlmIHRlc3QgIiRndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuIiA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoUFJJX01BQ1JPU19CUk9LRU4sIDEsCisrICAgICAgW0RlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkZWZpbmVzIHVudXNhYmxlIFBSSSogbWFjcm9zLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2lzYy1wb3NpeC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvaXNjLXBvc2l4Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuODg1NjY3NTI4IC0wNDAwCitAQCAtMCwwICsxLDI2IEBACisrIyBpc2MtcG9zaXgubTQgc2VyaWFsIDIgKGdldHRleHQtMC4xMS4yKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworKyMgVGhpcyBmaWxlIGlzIG5vdCBuZWVkZWQgd2l0aCBhdXRvY29uZi0yLjUzIGFuZCBuZXdlci4gIFJlbW92ZSBpdCBpbiAyMDA1LgorKworKyMgVGhpcyB0ZXN0IHJlcGxhY2VzIHRoZSBvbmUgaW4gYXV0b2NvbmYuCisrIyBDdXJyZW50bHkgdGhpcyBtYWNybyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBhdXRvY29uZiBtYWNybworKyMgYmVjYXVzZSBnZXR0ZXh0J3MgZ2V0dGV4dC5tNCAoZGlzdHJpYnV0ZWQgaW4gdGhlIGF1dG9tYWtlIHBhY2thZ2UpCisrIyBzdGlsbCB1c2VzIGl0LiAgT3RoZXJ3aXNlLCB0aGUgdXNlIGluIGdldHRleHQubTQgbWFrZXMgYXV0b2hlYWRlcgorKyMgZ2l2ZSB0aGVzZSBkaWFnbm9zdGljczoKKysjICAgY29uZmlndXJlLmluOjU1NjogQUNfVFJZX0NPTVBJTEUgd2FzIGNhbGxlZCBiZWZvcmUgQUNfSVNDX1BPU0lYCisrIyAgIGNvbmZpZ3VyZS5pbjo1NTY6IEFDX1RSWV9SVU4gd2FzIGNhbGxlZCBiZWZvcmUgQUNfSVNDX1BPU0lYCisrCisrdW5kZWZpbmUoW0FDX0lTQ19QT1NJWF0pCisrCisrQUNfREVGVU4oW0FDX0lTQ19QT1NJWF0sCisrICBbCisrICAgIGRubCBUaGlzIHRlc3QgcmVwbGFjZXMgdGhlIG9ic29sZXNjZW50IEFDX0lTQ19QT1NJWCBrbHVkZ2UuCisrICAgIEFDX0NIRUNLX0xJQihjcG9zaXgsIHN0cmVycm9yLCBbTElCUz0iJExJQlMgLWxjcG9zaXgiXSkKKysgIF0KKyspCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2xjbWVzc2FnZS5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvbGNtZXNzYWdlLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTAyNjY0OTQ0IC0wNDAwCitAQCAtMCwwICsxLDMyIEBACisrIyBsY21lc3NhZ2UubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMS4zKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorK2RubAorK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCisrZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKytkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorK2RubCBmdW5jdGlvbmFsaXR5LgorK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCisrZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKytkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisrCisrZG5sIEF1dGhvcnM6CisrZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUuCisrCisrIyBDaGVjayB3aGV0aGVyIExDX01FU1NBR0VTIGlzIGF2YWlsYWJsZSBpbiA8bG9jYWxlLmg+LgorKworK0FDX0RFRlVOKFtBTV9MQ19NRVNTQUdFU10sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBMQ19NRVNTQUdFU10sIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUywKKysgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bG9jYWxlLmg+XSwgW3JldHVybiBMQ19NRVNTQUdFU10sCisrICAgICAgIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz15ZXMsIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz1ubyldKQorKyAgaWYgdGVzdCAkYW1fY3ZfdmFsX0xDX01FU1NBR0VTID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX0xDX01FU1NBR0VTLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91ciA8bG9jYWxlLmg+IGZpbGUgZGVmaW5lcyBMQ19NRVNTQUdFUy5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9saWItbGQubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2xpYi1sZC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0LjkwODY2NDAzMiAtMDQwMAorQEAgLTAsMCArMSwxMTIgQEAKKysjIGxpYi1sZC5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjEzKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBTdWJyb3V0aW5lcyBvZiBsaWJ0b29sLm00LAorK2RubCB3aXRoIHJlcGxhY2VtZW50cyBzL0FDXy9BQ19MSUIvIGFuZCBzL2x0X2N2L2FjbF9jdi8gdG8gYXZvaWQgY29sbGlzaW9uCisrZG5sIHdpdGggbGlidG9vbC5tNC4KKysKKytkbmwgRnJvbSBsaWJ0b29sLTEuNC4gU2V0cyB0aGUgdmFyaWFibGUgd2l0aF9nbnVfbGQgdG8geWVzIG9yIG5vLgorK0FDX0RFRlVOKFtBQ19MSUJfUFJPR19MRF9HTlVdLAorK1tBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBhY2xfY3ZfcHJvZ19nbnVfbGQsCisrWyMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkJ3Mgb25seSBhY2NlcHQgLXYuCisrY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKysqR05VKiB8ICond2l0aCBCRkQnKikKKysgIGFjbF9jdl9wcm9nX2dudV9sZD15ZXMgOzsKKysqKQorKyAgYWNsX2N2X3Byb2dfZ251X2xkPW5vIDs7CisrZXNhY10pCisrd2l0aF9nbnVfbGQ9JGFjbF9jdl9wcm9nX2dudV9sZAorK10pCisrCisrZG5sIEZyb20gbGlidG9vbC0xLjQuIFNldHMgdGhlIHZhcmlhYmxlIExELgorK0FDX0RFRlVOKFtBQ19MSUJfUFJPR19MRF0sCisrW0FDX0FSR19XSVRIKGdudS1sZCwKKytbICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dXSwKKyt0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMsIHdpdGhfZ251X2xkPW5vKQorK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKysjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisrIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCisraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKysgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKysgIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKKysgIGNobW9kICt4IGNvbmYkJC5zaAorKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisrICBlbHNlCisrICAgIFBBVEhfU0VQQVJBVE9SPToKKysgIGZpCisrICBybSAtZiBjb25mJCQuc2gKKytmaQorK2FjX3Byb2c9bGQKKytpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisrICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsZCB1c2VkIGJ5IEdDQ10pCisrICBjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqKQorKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisrICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKysgICopCisrICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKysgIGVzYWMKKysgIGNhc2UgJGFjX3Byb2cgaW4KKysgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisrICAgIFtbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopXQorKyAgICAgIFtyZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nXQorKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRoIG9mIGxkCisrICAgICAgYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgc2VkICdzJVxcXFwlLyVnJ2AKKysgICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKysJYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgc2VkICJzJSRyZV9kaXJlbHQlLyUiYAorKyAgICAgIGRvbmUKKysgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKysgICAgICA7OworKyAgIiIpCisrICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorKyAgICBhY19wcm9nPWxkCisrICAgIDs7CisrICAqKQorKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisrICAgIHdpdGhfZ251X2xkPXVua25vd24KKysgICAgOzsKKysgIGVzYWMKKytlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKysgIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCisrZWxzZQorKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igbm9uLUdOVSBsZF0pCisrZmkKKytBQ19DQUNIRV9WQUwoYWNsX2N2X3BhdGhfTEQsCisrW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KKysgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSR7UEFUSF9TRVBBUkFUT1ItOn0iCisrICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKysgICAgICBhY2xfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKysgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisrICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgorKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorKyAgICAgIGNhc2UgYCIkYWNsX2N2X3BhdGhfTEQiIC12IDI+JjEgPCAvZGV2L251bGxgIGluCisrICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisrCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsgOzsKKysgICAgICAqKQorKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhayA7OworKyAgICAgIGVzYWMKKysgICAgZmkKKysgIGRvbmUKKysgIElGUz0iJGFjX3NhdmVfaWZzIgorK2Vsc2UKKysgIGFjbF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorK2ZpXSkKKytMRD0iJGFjbF9jdl9wYXRoX0xEIgorK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKysgIEFDX01TR19SRVNVTFQoJExEKQorK2Vsc2UKKysgIEFDX01TR19SRVNVTFQobm8pCisrZmkKKyt0ZXN0IC16ICIkTEQiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEhdKQorK0FDX0xJQl9QUk9HX0xEX0dOVQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2xpYi1saW5rLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9saWItbGluay5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0LjkxNDY2MzEyMCAtMDQwMAorQEAgLTAsMCArMSw1NTEgQEAKKysjIGxpYi1saW5rLm00IHNlcmlhbCA0IChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK2RubCBBQ19MSUJfTElOS0ZMQUdTKG5hbWUgWywgZGVwZW5kZW5jaWVzXSkgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kCisrZG5sIHRoZSBsaWJyYXJpZXMgY29ycmVzcG9uZGluZyB0byBleHBsaWNpdCBhbmQgaW1wbGljaXQgZGVwZW5kZW5jaWVzLgorK2RubCBTZXRzIGFuZCBBQ19TVUJTVHMgdGhlIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kCisrZG5sIGF1Z21lbnRzIHRoZSBDUFBGTEFHUyB2YXJpYWJsZS4KKytBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU10sCisrWworKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisrICBkZWZpbmUoW05hbWVdLFt0cmFuc2xpdChbJDFdLFsuLy1dLCBbX19fXSldKQorKyAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisrICBBQ19DQUNIRV9DSEVDSyhbaG93IHRvIGxpbmsgd2l0aCBsaWJbXSQxXSwgW2FjX2N2X2xpYltdTmFtZVtdX2xpYnNdLCBbCisrICAgIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbJDFdLCBbJDJdKQorKyAgICBhY19jdl9saWJbXU5hbWVbXV9saWJzPSIkTElCW11OQU1FIgorKyAgICBhY19jdl9saWJbXU5hbWVbXV9sdGxpYnM9IiRMVExJQltdTkFNRSIKKysgICAgYWNfY3ZfbGliW11OYW1lW11fY3BwZmxhZ3M9IiRJTkNbXU5BTUUiCisrICBdKQorKyAgTElCW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fbGlicyIKKysgIExUTElCW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fbHRsaWJzIgorKyAgSU5DW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fY3BwZmxhZ3MiCisrICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNdTkFNRSkKKysgIEFDX1NVQlNUKFtMSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMVExJQl1OQU1FKQorKyAgZG5sIEFsc28gc2V0IEhBVkVfTElCW11OQU1FIHNvIHRoYXQgQUNfTElCX0hBVkVfTElOS0ZMQUdTIGNhbiByZXVzZSB0aGUKKysgIGRubCByZXN1bHRzIG9mIHRoaXMgc2VhcmNoIHdoZW4gdGhpcyBsaWJyYXJ5IGFwcGVhcnMgYXMgYSBkZXBlbmRlbmN5LgorKyAgSEFWRV9MSUJbXU5BTUU9eWVzCisrICB1bmRlZmluZShbTmFtZV0pCisrICB1bmRlZmluZShbTkFNRV0pCisrXSkKKysKKytkbmwgQUNfTElCX0hBVkVfTElOS0ZMQUdTKG5hbWUsIGRlcGVuZGVuY2llcywgaW5jbHVkZXMsIHRlc3Rjb2RlKQorK2RubCBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZAorK2RubCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMsIHRvZ2V0aGVyIHdpdGggdGhlIHNwZWNpZmllZCBpbmNsdWRlIGZpbGVzIGFuZAorK2RubCB0aGUgYWJpbGl0eSB0byBjb21waWxlIGFuZCBsaW5rIHRoZSBzcGVjaWZpZWQgdGVzdGNvZGUuIElmIGZvdW5kLCBpdAorK2RubCBzZXRzIGFuZCBBQ19TVUJTVHMgSEFWRV9MSUIke05BTUV9PXllcyBhbmQgdGhlIExJQiR7TkFNRX0gYW5kCisrZG5sIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kIGF1Z21lbnRzIHRoZSBDUFBGTEFHUyB2YXJpYWJsZSwgYW5kCisrZG5sICNkZWZpbmVzIEhBVkVfTElCJHtOQU1FfSB0byAxLiBPdGhlcndpc2UsIGl0IHNldHMgYW5kIEFDX1NVQlNUcworK2RubCBIQVZFX0xJQiR7TkFNRX09bm8gYW5kIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB0byBlbXB0eS4KKytBQ19ERUZVTihbQUNfTElCX0hBVkVfTElOS0ZMQUdTXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysgIGRlZmluZShbTmFtZV0sW3RyYW5zbGl0KFskMV0sWy4vLV0sIFtfX19dKV0pCisrICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKysKKysgIGRubCBTZWFyY2ggZm9yIGxpYltdTmFtZSBhbmQgZGVmaW5lIExJQltdTkFNRSwgTFRMSUJbXU5BTUUgYW5kIElOQ1tdTkFNRQorKyAgZG5sIGFjY29yZGluZ2x5LgorKyAgQUNfTElCX0xJTktGTEFHU19CT0RZKFskMV0sIFskMl0pCisrCisrICBkbmwgQWRkICRJTkNbXU5BTUUgdG8gQ1BQRkxBR1MgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGZvbGxvd2luZyBjaGVja3MsCisrICBkbmwgYmVjYXVzZSBpZiB0aGUgdXNlciBoYXMgaW5zdGFsbGVkIGxpYltdTmFtZSBhbmQgbm90IGRpc2FibGVkIGl0cyB1c2UKKysgIGRubCB2aWEgLS13aXRob3V0LWxpYltdTmFtZS1wcmVmaXgsIGhlIHdhbnRzIHRvIHVzZSBpdC4KKysgIGFjX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKysgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQorKworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBsaWJbXSQxXSwgW2FjX2N2X2xpYltdTmFtZV0sIFsKKysgICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKysgICAgTElCUz0iJExJQlMgJExJQltdTkFNRSIKKysgICAgQUNfVFJZX0xJTksoWyQzXSwgWyQ0XSwgW2FjX2N2X2xpYltdTmFtZT15ZXNdLCBbYWNfY3ZfbGliW11OYW1lPW5vXSkKKysgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKysgIF0pCisrICBpZiB0ZXN0ICIkYWNfY3ZfbGliW11OYW1lIiA9IHllczsgdGhlbgorKyAgICBIQVZFX0xJQltdTkFNRT15ZXMKKysgICAgQUNfREVGSU5FKFtIQVZFX0xJQl1OQU1FLCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAkMSBsaWJyYXJ5Ll0pCisrICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJbXSQxXSkKKysgICAgQUNfTVNHX1JFU1VMVChbJExJQltdTkFNRV0pCisrICBlbHNlCisrICAgIEhBVkVfTElCW11OQU1FPW5vCisrICAgIGRubCBJZiAkTElCW11OQU1FIGRpZG4ndCBsZWFkIHRvIGEgdXNhYmxlIGxpYnJhcnksIHdlIGRvbid0IG5lZWQKKysgICAgZG5sICRJTkNbXU5BTUUgZWl0aGVyLgorKyAgICBDUFBGTEFHUz0iJGFjX3NhdmVfQ1BQRkxBR1MiCisrICAgIExJQltdTkFNRT0KKysgICAgTFRMSUJbXU5BTUU9CisrICBmaQorKyAgQUNfU1VCU1QoW0hBVkVfTElCXU5BTUUpCisrICBBQ19TVUJTVChbTElCXU5BTUUpCisrICBBQ19TVUJTVChbTFRMSUJdTkFNRSkKKysgIHVuZGVmaW5lKFtOYW1lXSkKKysgIHVuZGVmaW5lKFtOQU1FXSkKKytdKQorKworK2RubCBEZXRlcm1pbmUgdGhlIHBsYXRmb3JtIGRlcGVuZGVudCBwYXJhbWV0ZXJzIG5lZWRlZCB0byB1c2UgcnBhdGg6CisrZG5sIGxpYmV4dCwgc2hsaWJleHQsIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsCisrZG5sIGhhcmRjb2RlX2RpcmVjdCwgaGFyZGNvZGVfbWludXNfTC4KKytBQ19ERUZVTihbQUNfTElCX1JQQVRIXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkgICAgICAgICAgICAgICAgZG5sIHdlIHVzZSAkQ0MsICRHQ0MsICRMREZMQUdTCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJPR19MRF0pICAgICAgICAgICAgZG5sIHdlIHVzZSAkTEQsICR3aXRoX2dudV9sZAorKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSAgICAgICAgIGRubCB3ZSB1c2UgJGhvc3QKKysgIEFDX1JFUVVJUkUoW0FDX0NPTkZJR19BVVhfRElSX0RFRkFVTFRdKSBkbmwgd2UgdXNlICRhY19hdXhfZGlyCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbl0sIGFjbF9jdl9ycGF0aCwgWworKyAgICBDQz0iJENDIiBHQ0M9IiRHQ0MiIExERkxBR1M9IiRMREZMQUdTIiBMRD0iJExEIiB3aXRoX2dudV9sZD0iJHdpdGhfZ251X2xkIiBcCisrICAgICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICIkYWNfYXV4X2Rpci9jb25maWcucnBhdGgiICIkaG9zdCIgPiBjb25mdGVzdC5zaAorKyAgICAuIC4vY29uZnRlc3Quc2gKKysgICAgcm0gLWYgLi9jb25mdGVzdC5zaAorKyAgICBhY2xfY3ZfcnBhdGg9ZG9uZQorKyAgXSkKKysgIHdsPSIkYWNsX2N2X3dsIgorKyAgbGliZXh0PSIkYWNsX2N2X2xpYmV4dCIKKysgIHNobGliZXh0PSIkYWNsX2N2X3NobGliZXh0IgorKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorKyAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgorKyAgaGFyZGNvZGVfZGlyZWN0PSIkYWNsX2N2X2hhcmRjb2RlX2RpcmVjdCIKKysgIGhhcmRjb2RlX21pbnVzX0w9IiRhY2xfY3ZfaGFyZGNvZGVfbWludXNfTCIKKysgIGRubCBEZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciB3YW50cyBycGF0aCBoYW5kbGluZyBhdCBhbGwuCisrICBBQ19BUkdfRU5BQkxFKHJwYXRoLAorKyAgICBbICAtLWRpc2FibGUtcnBhdGggICAgICAgICBkbyBub3QgaGFyZGNvZGUgcnVudGltZSBsaWJyYXJ5IHBhdGhzXSwKKysgICAgOiwgZW5hYmxlX3JwYXRoPXllcykKKytdKQorKworK2RubCBBQ19MSUJfTElOS0ZMQUdTX0JPRFkobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKKytkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCisrZG5sIFNldHMgdGhlIExJQiR7TkFNRX0sIExUTElCJHtOQU1FfSBhbmQgSU5DJHtOQU1FfSB2YXJpYWJsZXMuCisrQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NfQk9EWV0sCisrWworKyAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisrICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KKysgIHVzZV9hZGRpdGlvbmFsPXllcworKyAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKysgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisrICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKysgIF0pCisrICBBQ19MSUJfQVJHX1dJVEgoW2xpYiQxLXByZWZpeF0sCisrWyAgLS13aXRoLWxpYiQxLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWIkMSBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorKyAgLS13aXRob3V0LWxpYiQxLXByZWZpeCAgICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWIkMSBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdLAorK1sKKysgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYbm8iOyB0aGVuCisrICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KKysgICAgZWxzZQorKyAgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWCI7IHRoZW4KKysgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisrICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisrICAgICAgICBdKQorKyAgICAgIGVsc2UKKysgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJHdpdGh2YWwvaW5jbHVkZSIKKysgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC9saWIiCisrICAgICAgZmkKKysgICAgZmkKKytdKQorKyAgZG5sIFNlYXJjaCB0aGUgbGlicmFyeSBhbmQgaXRzIGRlcGVuZGVuY2llcyBpbiAkYWRkaXRpb25hbF9saWJkaXIgYW5kCisrICBkbmwgJExERkxBR1MuIFVzaW5nIGJyZWFkdGgtZmlyc3Qtc2VhY2guCisrICBMSUJbXU5BTUU9CisrICBMVExJQltdTkFNRT0KKysgIElOQ1tdTkFNRT0KKysgIHJwYXRoZGlycz0KKysgIGx0cnBhdGhkaXJzPQorKyAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPQorKyAgbmFtZXNfbmV4dF9yb3VuZD0nJDEgJDInCisrICB3aGlsZSB0ZXN0IC1uICIkbmFtZXNfbmV4dF9yb3VuZCI7IGRvCisrICAgIG5hbWVzX3RoaXNfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kIgorKyAgICBuYW1lc19uZXh0X3JvdW5kPQorKyAgICBmb3IgbmFtZSBpbiAkbmFtZXNfdGhpc19yb3VuZDsgZG8KKysgICAgICBhbHJlYWR5X2hhbmRsZWQ9CisrICAgICAgZm9yIG4gaW4gJG5hbWVzX2FscmVhZHlfaGFuZGxlZDsgZG8KKysgICAgICAgIGlmIHRlc3QgIiRuIiA9ICIkbmFtZSI7IHRoZW4KKysgICAgICAgICAgYWxyZWFkeV9oYW5kbGVkPXllcworKyAgICAgICAgICBicmVhaworKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgICAgaWYgdGVzdCAteiAiJGFscmVhZHlfaGFuZGxlZCI7IHRoZW4KKysgICAgICAgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0iJG5hbWVzX2FscmVhZHlfaGFuZGxlZCAkbmFtZSIKKysgICAgICAgIGRubCBTZWUgaWYgaXQgd2FzIGFscmVhZHkgbG9jYXRlZCBieSBhbiBlYXJsaWVyIEFDX0xJQl9MSU5LRkxBR1MKKysgICAgICAgIGRubCBvciBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FsbC4KKysgICAgICAgIHVwcGVybmFtZT1gZWNobyAiJG5hbWUiIHwgc2VkIC1lICd5fGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tfEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19ffCdgCisrICAgICAgICBldmFsIHZhbHVlPVwiXCRIQVZFX0xJQiR1cHBlcm5hbWVcIgorKyAgICAgICAgaWYgdGVzdCAtbiAiJHZhbHVlIjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0ICIkdmFsdWUiID0geWVzOyB0aGVuCisrICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTElCJHVwcGVybmFtZVwiCisrICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSR2YWx1ZSIKKysgICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMVExJQiR1cHBlcm5hbWVcIgorKyAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0kdmFsdWUiCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBkbmwgQW4gZWFybGllciBjYWxsIHRvIEFDX0xJQl9IQVZFX0xJTktGTEFHUyBoYXMgZGV0ZXJtaW5lZAorKyAgICAgICAgICAgIGRubCB0aGF0IHRoaXMgbGlicmFyeSBkb2Vzbid0IGV4aXN0LiBTbyBqdXN0IGRyb3AgaXQuCisrICAgICAgICAgICAgOgorKyAgICAgICAgICBmaQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICBkbmwgU2VhcmNoIHRoZSBsaWJyYXJ5IGxpYiRuYW1lIGluICRhZGRpdGlvbmFsX2xpYmRpciBhbmQgJExERkxBR1MKKysgICAgICAgICAgZG5sIGFuZCB0aGUgYWxyZWFkeSBjb25zdHJ1Y3RlZCAkTElCTkFNRS8kTFRMSUJOQU1FLgorKyAgICAgICAgICBmb3VuZF9kaXI9CisrICAgICAgICAgIGZvdW5kX2xhPQorKyAgICAgICAgICBmb3VuZF9zbz0KKysgICAgICAgICAgZm91bmRfYT0KKysgICAgICAgICAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJleHQiICYmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgIGZvdW5kX3NvPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IgorKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kbGliZXh0IgorKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSIKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgZmkKKysgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisrICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCW11OQU1FOyBkbworKyAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgIGNhc2UgIiR4IiBpbgorKyAgICAgICAgICAgICAgICAtTCopCisrICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJHgiIHwgc2VkIC1lICdzL15YLUwvLydgCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGliZXh0IiAmJiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCIKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLiRsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci9saWIkbmFtZS4kbGliZXh0IgorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgZmkKKysgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgIGRubCBGb3VuZCB0aGUgbGlicmFyeS4KKysgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorKyAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfc28iICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgICAgZG5sIExpbmtpbmcgd2l0aCBhIHNoYXJlZCBsaWJyYXJ5LiBXZSBhdHRlbXB0IHRvIGhhcmRjb2RlIGl0cworKyAgICAgICAgICAgICAgZG5sIGRpcmVjdG9yeSBpbnRvIHRoZSBleGVjdXRhYmxlJ3MgcnVucGF0aCwgdW5sZXNzIGl0J3MgdGhlCisrICAgICAgICAgICAgICBkbmwgc3RhbmRhcmQgL3Vzci9saWIuCisrICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiA9IG5vIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci9saWIiOyB0aGVuCisrICAgICAgICAgICAgICAgIGRubCBObyBoYXJkY29kaW5nIGlzIG5lZWRlZC4KKysgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisrICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIGRubCBVc2UgYW4gZXhwbGljaXQgb3B0aW9uIHRvIGhhcmRjb2RlIERJUiBpbnRvIHRoZSByZXN1bHRpbmcKKysgICAgICAgICAgICAgICAgZG5sIGJpbmFyeS4KKysgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gbHRycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgIGRubCBUaGUgbHRycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTFRMSUJOQU1FIGF0IHRoZSBlbmQuCisrICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGRubCBUaGUgaGFyZGNvZGluZyBpbnRvICRMSUJOQU1FIGlzIHN5c3RlbSBkZXBlbmRlbnQuCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisrICAgICAgICAgICAgICAgICAgZG5sIFVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKysgICAgICAgICAgICAgICAgICBkbmwgcmVzdWx0aW5nIGJpbmFyeS4KKysgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworKyAgICAgICAgICAgICAgICAgICAgZG5sIGJpbmFyeS4KKysgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gcnBhdGhkaXJzLgorKyAgICAgICAgICAgICAgICAgICAgZG5sIFRoZSBycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTElCTkFNRSBhdCB0aGUgZW5kLgorKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZm91bmRfZGlyIgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICBkbmwgUmVseSBvbiAiLUwkZm91bmRfZGlyIi4KKysgICAgICAgICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0IGlmIGl0J3MgYWxyZWFkeSBjb250YWluZWQgaW4gdGhlIExERkxBR1MKKysgICAgICAgICAgICAgICAgICAgIGRubCBvciB0aGUgYWxyZWFkeSBjb25zdHJ1Y3RlZCAkTElCTkFNRQorKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQltdTkFNRTsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkZm91bmRfZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBGSVhNRTogTm90IHN1cmUgd2hldGhlciB3ZSBzaG91bGQgdXNlCisrICAgICAgICAgICAgICAgICAgICAgIGRubCAiLUwkZm91bmRfZGlyIC1sJG5hbWUiIG9yICItTCRmb3VuZF9kaXIgJGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZS4KKysgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBXZSBjYW5ub3QgdXNlICRoYXJkY29kZV9ydW5wYXRoX3ZhciBhbmQgTERfUlVOX1BBVEgKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUsIGJlY2F1c2UgdGhpcyBkb2Vzbid0IGZpdCBpbiBmbGFncyBwYXNzZWQgdG8gdGhlCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBjb21waWxlci4gU28gZ2l2ZSB1cC4gTm8gaGFyZGNvZGluZy4gVGhpcyBhZmZlY3RzIG9ubHkKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIHZlcnkgb2xkIHN5c3RlbXMuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBGSVhNRTogTm90IHN1cmUgd2hldGhlciB3ZSBzaG91bGQgdXNlCisrICAgICAgICAgICAgICAgICAgICAgIGRubCAiLUwkZm91bmRfZGlyIC1sJG5hbWUiIG9yICItTCRmb3VuZF9kaXIgJGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZS4KKysgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tbCRuYW1lIgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2EiICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgICAgICBkbmwgTGlua2luZyB3aXRoIGEgc3RhdGljIGxpYnJhcnkuCisrICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX2EiCisrICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIGRubCBXZSBzaG91bGRuJ3QgY29tZSBoZXJlLCBidXQgYW55d2F5IGl0J3MgZ29vZCB0byBoYXZlIGEKKysgICAgICAgICAgICAgICAgZG5sIGZhbGxiYWNrLgorKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGRubCBBc3N1bWUgdGhlIGluY2x1ZGUgZmlsZXMgYXJlIG5lYXJieS4KKysgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9CisrICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2RpciIgaW4KKysgICAgICAgICAgICAgICovbGliIHwgKi9saWIvKQorKyAgICAgICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBzZWQgLWUgJ3MsXlgsLCcgLWUgJ3MsL2xpYi8qJCwsJ2AKKysgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkYmFzZWRpci9pbmNsdWRlIgorKyAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJElOQ05BTUUuCisrICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorKyAgICAgICAgICAgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9pbmNsdWRlLAorKyAgICAgICAgICAgICAgZG5sICAgMi4gaWYgaXQncyAvdXNyL2xvY2FsL2luY2x1ZGUgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisrICAgICAgICAgICAgICBkbmwgICAzLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkQ1BQRkxBR1Mgb3IgdGhlIGFscmVhZHkKKysgICAgICAgICAgICAgIGRubCAgICAgIGNvbnN0cnVjdGVkICRJTkNOQU1FLAorKyAgICAgICAgICAgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKysgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KKysgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgPSAiWC91c3IvbG9jYWwvaW5jbHVkZSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgICAgICAgICBsaW51eCopIGhhdmVpdD15ZXM7OworKyAgICAgICAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJENQUEZMQUdTICRJTkNbXU5BTUU7IGRvCisrICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkSU5DTkFNRS4KKysgICAgICAgICAgICAgICAgICAgICAgSU5DW11OQU1FPSIke0lOQ1tdTkFNRX0ke0lOQ1tdTkFNRTorIH0tSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG5sIExvb2sgZm9yIGRlcGVuZGVuY2llcy4KKysgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZm91bmRfbGEiOyB0aGVuCisrICAgICAgICAgICAgICBkbmwgUmVhZCB0aGUgLmxhIGZpbGUuIEl0IGRlZmluZXMgdGhlIHZhcmlhYmxlcworKyAgICAgICAgICAgICAgZG5sIGRsbmFtZSwgbGlicmFyeV9uYW1lcywgb2xkX2xpYnJhcnksIGRlcGVuZGVuY3lfbGlicywgY3VycmVudCwKKysgICAgICAgICAgICAgIGRubCBhZ2UsIHJldmlzaW9uLCBpbnN0YWxsZWQsIGRsb3BlbiwgZGxwcmVvcGVuLCBsaWJkaXIuCisrICAgICAgICAgICAgICBzYXZlX2xpYmRpcj0iJGxpYmRpciIKKysgICAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9sYSIgaW4KKysgICAgICAgICAgICAgICAgKi8qIHwgKlxcKikgLiAiJGZvdW5kX2xhIiA7OworKyAgICAgICAgICAgICAgICAqKSAuICIuLyRmb3VuZF9sYSIgOzsKKysgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgIGxpYmRpcj0iJHNhdmVfbGliZGlyIgorKyAgICAgICAgICAgICAgZG5sIFdlIHVzZSBvbmx5IGRlcGVuZGVuY3lfbGlicy4KKysgICAgICAgICAgICAgIGZvciBkZXAgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKysgICAgICAgICAgICAgICAgY2FzZSAiJGRlcCIgaW4KKysgICAgICAgICAgICAgICAgICAtTCopCisrICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLUwvLydgCisrICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTElCTkFNRSBhbmQgJExUTElCTkFNRS4KKysgICAgICAgICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgICAgICAgICAgICAgICAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2xpYiwKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDIuIGlmIGl0J3MgL3Vzci9sb2NhbC9saWIgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisrICAgICAgICAgICAgICAgICAgICBkbmwgICAzLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkTERGTEFHUyBvciB0aGUgYWxyZWFkeQorKyAgICAgICAgICAgICAgICAgICAgZG5sICAgICAgY29uc3RydWN0ZWQgJExJQk5BTUUsCisrICAgICAgICAgICAgICAgICAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyL2xpYiI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC9saWIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCW11OQU1FOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExJQk5BTUUuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQltdTkFNRTsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMVExJQk5BTUUuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAtUiopCisrICAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1SLy8nYAorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgIT0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gcnBhdGhkaXJzLgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMSUJOQU1FIGF0IHRoZSBlbmQuCisrICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIGx0cnBhdGhkaXJzLgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIGx0cnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExUTElCTkFNRSBhdCB0aGUgZW5kLgorKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgLWwqKQorKyAgICAgICAgICAgICAgICAgICAgZG5sIEhhbmRsZSB0aGlzIGluIHRoZSBuZXh0IHJvdW5kLgorKyAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtbC8vJ2AKKysgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgKi5sYSkKKysgICAgICAgICAgICAgICAgICAgIGRubCBIYW5kbGUgdGhpcyBpbiB0aGUgbmV4dCByb3VuZC4gVGhyb3cgYXdheSB0aGUgLmxhJ3MKKysgICAgICAgICAgICAgICAgICAgIGRubCBkaXJlY3Rvcnk7IGl0IGlzIGFscmVhZHkgY29udGFpbmVkIGluIGEgcHJlY2VkaW5nIC1MCisrICAgICAgICAgICAgICAgICAgICBkbmwgb3B0aW9uLgorKyAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MsXlguKi8sLCcgLWUgJ3MsXmxpYiwsJyAtZSAncyxcLmxhJCwsJ2AKKysgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgKikKKysgICAgICAgICAgICAgICAgICAgIGRubCBNb3N0IGxpa2VseSBhbiBpbW1lZGlhdGUgbGlicmFyeSBuYW1lLgorKyAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZGVwIgorKyAgICAgICAgICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0kZGVwIgorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBkbmwgRGlkbid0IGZpbmQgdGhlIGxpYnJhcnk7IGFzc3VtZSBpdCBpcyBpbiB0aGUgc3lzdGVtIGRpcmVjdG9yaWVzCisrICAgICAgICAgICAgZG5sIGtub3duIHRvIHRoZSBsaW5rZXIgYW5kIHJ1bnRpbWUgbG9hZGVyLiAoQWxsIHRoZSBzeXN0ZW0KKysgICAgICAgICAgICBkbmwgZGlyZWN0b3JpZXMga25vd24gdG8gdGhlIGxpbmtlciBzaG91bGQgYWxzbyBiZSBrbm93biB0byB0aGUKKysgICAgICAgICAgICBkbmwgcnVudGltZSBsb2FkZXIsIG90aGVyd2lzZSB0aGUgc3lzdGVtIGlzIHNldmVyZWx5IG1pc2NvbmZpZ3VyZWQuKQorKyAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKysgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1sJG5hbWUiCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgIGRvbmUKKysgIGRvbmUKKysgIGlmIHRlc3QgIlgkcnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KKysgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisrICAgICAgZG5sIFdlaXJkIHBsYXRmb3JtOiBvbmx5IHRoZSBsYXN0IC1ycGF0aCBvcHRpb24gY291bnRzLCB0aGUgdXNlciBtdXN0CisrICAgICAgZG5sIHBhc3MgYWxsIHBhdGggZWxlbWVudHMgaW4gb25lIG9wdGlvbi4gV2UgY2FuIGFycmFuZ2UgdGhhdCBmb3IgYQorKyAgICAgIGRubCBzaW5nbGUgbGlicmFyeSwgYnV0IG5vdCB3aGVuIG1vcmUgdGhhbiBvbmUgJExJQk5BTUVzIGFyZSB1c2VkLgorKyAgICAgIGFsbGRpcnM9CisrICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKKysgICAgICBkb25lCisrICAgICAgZG5sIE5vdGU6IGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgdXNlcyAkbGliZGlyIGFuZCAkd2wuCisrICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorKyAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCisrICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKysgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmbGFnIgorKyAgICBlbHNlCisrICAgICAgZG5sIFRoZSAtcnBhdGggb3B0aW9ucyBhcmUgY3VtdWxhdGl2ZS4KKysgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisrICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisrICAgICAgICBsaWJkaXI9IiRmb3VuZF9kaXIiCisrICAgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisrICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmbGFnIgorKyAgICAgIGRvbmUKKysgICAgZmkKKysgIGZpCisrICBpZiB0ZXN0ICJYJGx0cnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KKysgICAgZG5sIFdoZW4gdXNpbmcgbGlidG9vbCwgdGhlIG9wdGlvbiB0aGF0IHdvcmtzIGZvciBib3RoIGxpYnJhcmllcyBhbmQKKysgICAgZG5sIGV4ZWN1dGFibGVzIGlzIC1SLiBUaGUgLVIgb3B0aW9ucyBhcmUgY3VtdWxhdGl2ZS4KKysgICAgZm9yIGZvdW5kX2RpciBpbiAkbHRycGF0aGRpcnM7IGRvCisrICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tUiRmb3VuZF9kaXIiCisrICAgIGRvbmUKKysgIGZpCisrXSkKKysKKytkbmwgQUNfTElCX0FQUEVORFRPVkFSKFZBUiwgQ09OVEVOVFMpIGFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIENPTlRFTlRTIHRvIFZBUiwKKytkbmwgdW5sZXNzIGFscmVhZHkgcHJlc2VudCBpbiBWQVIuCisrZG5sIFdvcmtzIG9ubHkgZm9yIENQUEZMQUdTLCBub3QgZm9yIExJQiogdmFyaWFibGVzIGJlY2F1c2UgdGhhdCBzb21ldGltZXMKKytkbmwgY29udGFpbnMgdHdvIG9yIHRocmVlIGNvbnNlY3V0aXZlIGVsZW1lbnRzIHRoYXQgYmVsb25nIHRvZ2V0aGVyLgorK0FDX0RFRlVOKFtBQ19MSUJfQVBQRU5EVE9WQVJdLAorK1sKKysgIGZvciBlbGVtZW50IGluIFskMl07IGRvCisrICAgIGhhdmVpdD0KKysgICAgZm9yIHggaW4gJFskMV07IGRvCisrICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZWxlbWVudCI7IHRoZW4KKysgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgIGJyZWFrCisrICAgICAgZmkKKysgICAgZG9uZQorKyAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgIFskMV09IiR7WyQxXX0ke1skMV06KyB9JGVsZW1lbnQiCisrICAgIGZpCisrICBkb25lCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvbGliLXByZWZpeC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvbGliLXByZWZpeC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0LjkyMTY2MjA1NiAtMDQwMAorQEAgLTAsMCArMSwxNTUgQEAKKysjIGxpYi1wcmVmaXgubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMykKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrZG5sIEFDX0xJQl9BUkdfV0lUSCBpcyBzeW5vbnltb3VzIHRvIEFDX0FSR19XSVRIIGluIGF1dG9jb25mLTIuMTMsIGFuZAorK2RubCBzaW1pbGFyIHRvIEFDX0FSR19XSVRIIGluIGF1dG9jb25mIDIuNTIuLi4yLjU3IGV4Y2VwdCB0aGF0IGlzIGRvZXNuJ3QKKytkbmwgcmVxdWlyZSBleGNlc3NpdmUgYnJhY2tldGluZy4KKytpZmRlZihbQUNfSEVMUF9TVFJJTkddLAorK1tBQ19ERUZVTihbQUNfTElCX0FSR19XSVRIXSwgW0FDX0FSR19XSVRIKFskMV0sW1skMl1dLFskM10sWyQ0XSldKV0sCisrW0FDX0RFRlVOKFtBQ19dW0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFskMl0sWyQzXSxbJDRdKV0pXSkKKysKKytkbmwgQUNfTElCX1BSRUZJWCBhZGRzIHRvIHRoZSBDUFBGTEFHUyBhbmQgTERGTEFHUyB0aGUgZmxhZ3MgdGhhdCBhcmUgbmVlZGVkCisrZG5sIHRvIGFjY2VzcyBwcmV2aW91c2x5IGluc3RhbGxlZCBsaWJyYXJpZXMuIFRoZSBiYXNpYyBhc3N1bXB0aW9uIGlzIHRoYXQKKytkbmwgYSB1c2VyIHdpbGwgd2FudCBwYWNrYWdlcyB0byB1c2Ugb3RoZXIgcGFja2FnZXMgaGUgcHJldmlvdXNseSBpbnN0YWxsZWQKKytkbmwgd2l0aCB0aGUgc2FtZSAtLXByZWZpeCBvcHRpb24uCisrZG5sIFRoaXMgbWFjcm8gaXMgbm90IG5lZWRlZCBpZiBvbmx5IEFDX0xJQl9MSU5LRkxBR1MgaXMgdXNlZCB0byBsb2NhdGUKKytkbmwgbGlicmFyaWVzLCBidXQgaXMgb3RoZXJ3aXNlIHZlcnkgY29udmVuaWVudC4KKytBQ19ERUZVTihbQUNfTElCX1BSRUZJWF0sCisrWworKyAgQUNfQkVGT1JFKFskMF0sIFtBQ19MSUJfTElOS0ZMQUdTXSkKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKysgIGRubCBCeSBkZWZhdWx0LCBsb29rIGluICRpbmNsdWRlZGlyIGFuZCAkbGliZGlyLgorKyAgdXNlX2FkZGl0aW9uYWw9eWVzCisrICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworKyAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKysgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorKyAgXSkKKysgIEFDX0xJQl9BUkdfV0lUSChbbGliLXByZWZpeF0sCisrWyAgLS13aXRoLWxpYi1wcmVmaXhbPURJUl0gc2VhcmNoIGZvciBsaWJyYXJpZXMgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKysgIC0td2l0aG91dC1saWItcHJlZml4ICAgIGRvbid0IHNlYXJjaCBmb3IgbGlicmFyaWVzIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcl0sCisrWworKyAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KKysgICAgICB1c2VfYWRkaXRpb25hbD1ubworKyAgICBlbHNlCisrICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgorKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKysgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisrICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKysgICAgICAgIF0pCisrICAgICAgZWxzZQorKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorKyAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsL2xpYiIKKysgICAgICBmaQorKyAgICBmaQorK10pCisrICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorKyAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJENQUEZMQUdTLgorKyAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorKyAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2luY2x1ZGUsCisrICAgIGRubCAgIDIuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRDUFBGTEFHUywKKysgICAgZG5sICAgMy4gaWYgaXQncyAvdXNyL2xvY2FsL2luY2x1ZGUgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisrICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisrICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KKysgICAgICBoYXZlaXQ9CisrICAgICAgZm9yIHggaW4gJENQUEZMQUdTOyBkbworKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKysgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICBicmVhaworKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorKyAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7CisrICAgICAgICAgICAgZXNhYworKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisrICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCisrICAgICAgICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9JHtDUFBGTEFHUzorIH0tSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgIGZpCisrICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMREZMQUdTLgorKyAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorKyAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2xpYiwKKysgICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJExERkxBR1MsCisrICAgIGRubCAgIDMuIGlmIGl0J3MgL3Vzci9sb2NhbC9saWIgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisrICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisrICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci9saWIiOyB0aGVuCisrICAgICAgaGF2ZWl0PQorKyAgICAgIGZvciB4IGluICRMREZMQUdTOyBkbworKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgIGJyZWFrCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvbGliIjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorKyAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7CisrICAgICAgICAgICAgZXNhYworKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExERkxBR1MuCisrICAgICAgICAgICAgTERGTEFHUz0iJHtMREZMQUdTfSR7TERGTEFHUzorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZmkKKysgIGZpCisrXSkKKysKKytkbmwgQUNfTElCX1BSRVBBUkVfUFJFRklYIGNyZWF0ZXMgdmFyaWFibGVzIGFjbF9maW5hbF9wcmVmaXgsCisrZG5sIGFjbF9maW5hbF9leGVjX3ByZWZpeCwgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIHdoaWNoICRwcmVmaXggYW5kCisrZG5sICRleGVjX3ByZWZpeCB3aWxsIGV4cGFuZCBhdCB0aGUgZW5kIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgorK0FDX0RFRlVOKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdLAorK1sKKysgIGRubCBVbmZvcnR1bmF0ZWx5LCBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGdldCBvbmx5IGZpbmFsbHkgZGV0ZXJtaW5lZAorKyAgZG5sIGF0IHRoZSBlbmQgb2YgY29uZmlndXJlLgorKyAgaWYgdGVzdCAiWCRwcmVmaXgiID0gIlhOT05FIjsgdGhlbgorKyAgICBhY2xfZmluYWxfcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCisrICBlbHNlCisrICAgIGFjbF9maW5hbF9wcmVmaXg9IiRwcmVmaXgiCisrICBmaQorKyAgaWYgdGVzdCAiWCRleGVjX3ByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCisrICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0nJHtwcmVmaXh9JworKyAgZWxzZQorKyAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKysgIGZpCisrICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisrICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorKyAgZXZhbCBhY2xfZmluYWxfZXhlY19wcmVmaXg9XCIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4XCIKKysgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKytdKQorKworK2RubCBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW3N0YXRlbWVudF0pIGV2YWx1YXRlcyBzdGF0ZW1lbnQsIHdpdGggdGhlCisrZG5sIHZhcmlhYmxlcyBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGJvdW5kIHRvIHRoZSB2YWx1ZXMgdGhleSB3aWxsIGhhdmUKKytkbmwgYXQgdGhlIGVuZCBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4KKytBQ19ERUZVTihbQUNfTElCX1dJVEhfRklOQUxfUFJFRklYXSwKKytbCisrICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisrICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKysgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorKyAgJDEKKysgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisrICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvbG9uZ2RvdWJsZS5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvbG9uZ2RvdWJsZS5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljk0MjY1ODg2NCAtMDQwMAorQEAgLTAsMCArMSwzMCBAQAorKyMgbG9uZ2RvdWJsZS5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjEyKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKytkbmwgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgJ2xvbmcgZG91YmxlJyB0eXBlLgorK2RubCBQcmVyZXF1aXNpdGU6IEFDX1BST0dfQ0MKKysKKytBQ19ERUZVTihbZ3RfVFlQRV9MT05HRE9VQkxFXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxvbmcgZG91YmxlXSwgZ3RfY3ZfY19sb25nX2RvdWJsZSwKKysgICAgW2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICAgIGd0X2N2X2NfbG9uZ19kb3VibGU9eWVzCisrICAgICBlbHNlCisrICAgICAgIEFDX1RSWV9DT01QSUxFKFsKKysgICAgICAgICAvKiBUaGUgU3RhcmRlbnQgVmlzdHJhIGtub3dzIHNpemVvZihsb25nIGRvdWJsZSksIGJ1dCBkb2VzIG5vdCBzdXBwb3J0IGl0LiAgKi8KKysgICAgICAgICBsb25nIGRvdWJsZSBmb28gPSAwLjA7CisrICAgICAgICAgLyogT24gVWx0cml4IDQuMyBjYywgbG9uZyBkb3VibGUgaXMgNCBhbmQgZG91YmxlIGlzIDguICAqLworKyAgICAgICAgIGludCBhcnJheSBbMiooc2l6ZW9mKGxvbmcgZG91YmxlKSA+PSBzaXplb2YoZG91YmxlKSkgLSAxXTsKKysgICAgICAgICBdLCAsCisrICAgICAgICAgZ3RfY3ZfY19sb25nX2RvdWJsZT15ZXMsIGd0X2N2X2NfbG9uZ19kb3VibGU9bm8pCisrICAgICBmaV0pCisrICBpZiB0ZXN0ICRndF9jdl9jX2xvbmdfZG91YmxlID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX0xPTkdfRE9VQkxFLCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnbG9uZyBkb3VibGUnIHR5cGUuXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvbG9uZ2xvbmcubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2xvbmdsb25nLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTQ5NjU3ODAwIC0wNDAwCitAQCAtMCwwICsxLDI1IEBACisrIyBsb25nbG9uZy5tNCBzZXJpYWwgNAorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworKyMgRGVmaW5lIEhBVkVfTE9OR19MT05HIGlmICdsb25nIGxvbmcnIHdvcmtzLgorKworK0FDX0RFRlVOKFtqbV9BQ19UWVBFX0xPTkdfTE9OR10sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBsb25nIGxvbmddLCBhY19jdl90eXBlX2xvbmdfbG9uZywKKysgIFtBQ19UUllfTElOSyhbbG9uZyBsb25nIGxsID0gMUxMOyBpbnQgaSA9IDYzO10sCisrICAgIFtsb25nIGxvbmcgbGxtYXggPSAobG9uZyBsb25nKSAtMTsKKysgICAgIHJldHVybiBsbCA8PCBpIHwgbGwgPj4gaSB8IGxsbWF4IC8gbGwgfCBsbG1heCAlIGxsO10sCisrICAgIGFjX2N2X3R5cGVfbG9uZ19sb25nPXllcywKKysgICAgYWNfY3ZfdHlwZV9sb25nX2xvbmc9bm8pXSkKKysgIGlmIHRlc3QgJGFjX2N2X3R5cGVfbG9uZ19sb25nID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX0xPTkdfTE9ORywgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnbG9uZyBsb25nJyB0eXBlLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L01ha2VmaWxlLmFtCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9NYWtlZmlsZS5hbQkyMDA0LTA5LTEyIDE0OjQwOjM1LjA0ODY0Mjc1MiAtMDQwMAorQEAgLTAsMCArMSBAQAorK0VYVFJBX0RJU1QgPSBjb2Rlc2V0Lm00IGdldHRleHQubTQgZ2xpYmMyMS5tNCBpY29udi5tNCBpbnRkaXYwLm00IGludG1heC5tNCBpbnR0eXBlcy5tNCBpbnR0eXBlc19oLm00IGludHR5cGVzLXByaS5tNCBpc2MtcG9zaXgubTQgbGNtZXNzYWdlLm00IGxpYi1sZC5tNCBsaWItbGluay5tNCBsaWItcHJlZml4Lm00IGxvbmdkb3VibGUubTQgbG9uZ2xvbmcubTQgbmxzLm00IHBvLm00IHByaW50Zi1wb3NpeC5tNCBwcm9ndGVzdC5tNCBzaWduZWQubTQgc2l6ZV9tYXgubTQgc3RkaW50X2gubTQgdWludG1heF90Lm00IHVsb25nbG9uZy5tNCB3Y2hhcl90Lm00IHdpbnRfdC5tNCB4c2l6ZS5tNAorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9ubHMubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L25scy5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljk1NTY1Njg4OCAtMDQwMAorQEAgLTAsMCArMSw0OSBAQAorKyMgbmxzLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgorK2RubCAgIEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPiwgMjAwMC0yMDAzLgorKworK0FDX0RFRlVOKFtBTV9OTFNdLAorK1sKKysgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkXSkKKysgIGRubCBEZWZhdWx0IGlzIGVuYWJsZWQgTkxTCisrICBBQ19BUkdfRU5BQkxFKG5scywKKysgICAgWyAgLS1kaXNhYmxlLW5scyAgICAgICAgICAgZG8gbm90IHVzZSBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydF0sCisrICAgIFVTRV9OTFM9JGVuYWJsZXZhbCwgVVNFX05MUz15ZXMpCisrICBBQ19NU0dfUkVTVUxUKCRVU0VfTkxTKQorKyAgQUNfU1VCU1QoVVNFX05MUykKKytdKQorKworK0FDX0RFRlVOKFtBTV9NS0lOU1RBTExESVJTXSwKKytbCisrICBkbmwgSWYgdGhlIEFDX0NPTkZJR19BVVhfRElSIG1hY3JvIGZvciBhdXRvY29uZiBpcyB1c2VkIHdlIHBvc3NpYmx5CisrICBkbmwgZmluZCB0aGUgbWtpbnN0YWxsZGlycyBzY3JpcHQgaW4gYW5vdGhlciBzdWJkaXIgYnV0ICQodG9wX3NyY2RpcikuCisrICBkbmwgVHJ5IHRvIGxvY2F0ZSBpdC4KKysgIE1LSU5TVEFMTERJUlM9CisrICBpZiB0ZXN0IC1uICIkYWNfYXV4X2RpciI7IHRoZW4KKysgICAgY2FzZSAiJGFjX2F1eF9kaXIiIGluCisrICAgICAgLyopIE1LSU5TVEFMTERJUlM9IiRhY19hdXhfZGlyL21raW5zdGFsbGRpcnMiIDs7CisrICAgICAgKikgTUtJTlNUQUxMRElSUz0iXCQodG9wX2J1aWxkZGlyKS8kYWNfYXV4X2Rpci9ta2luc3RhbGxkaXJzIiA7OworKyAgICBlc2FjCisrICBmaQorKyAgaWYgdGVzdCAteiAiJE1LSU5TVEFMTERJUlMiOyB0aGVuCisrICAgIE1LSU5TVEFMTERJUlM9IlwkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMiCisrICBmaQorKyAgQUNfU1VCU1QoTUtJTlNUQUxMRElSUykKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9wby5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvcG8ubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45NjE2NTU5NzYgLTA0MDAKK0BAIC0wLDAgKzEsNDI2IEBACisrIyBwby5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjE0KQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorK2RubAorK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCisrZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKytkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorK2RubCBmdW5jdGlvbmFsaXR5LgorK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCisrZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKytkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisrCisrZG5sIEF1dGhvcnM6CisrZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUtMjAwMC4KKytkbmwgICBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4sIDIwMDAtMjAwMy4KKysKKytkbmwgQ2hlY2tzIGZvciBhbGwgcHJlcmVxdWlzaXRlcyBvZiB0aGUgcG8gc3ViZGlyZWN0b3J5LgorK0FDX0RFRlVOKFtBTV9QT19TVUJESVJTXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX01BS0VfU0VUXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfSU5TVEFMTF0pZG5sCisrICBBQ19SRVFVSVJFKFtBTV9NS0lOU1RBTExESVJTXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FNX05MU10pZG5sCisrCisrICBkbmwgUGVyZm9ybSB0aGUgZm9sbG93aW5nIHRlc3RzIGFsc28gaWYgLS1kaXNhYmxlLW5scyBoYXMgYmVlbiBnaXZlbiwKKysgIGRubCBiZWNhdXNlIHRoZXkgYXJlIG5lZWRlZCBmb3IgIm1ha2UgZGlzdCIgdG8gd29yay4KKysKKysgIGRubCBTZWFyY2ggZm9yIEdOVSBtc2dmbXQgaW4gdGhlIFBBVEguCisrICBkbmwgVGhlIGZpcnN0IHRlc3QgZXhjbHVkZXMgU29sYXJpcyBtc2dmbXQgYW5kIGVhcmx5IEdOVSBtc2dmbXQgdmVyc2lvbnMuCisrICBkbmwgVGhlIHNlY29uZCB0ZXN0IGV4Y2x1ZGVzIEZyZWVCU0QgbXNnZm10LgorKyAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChNU0dGTVQsIG1zZ2ZtdCwKKysgICAgWyRhY19kaXIvJGFjX3dvcmQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjEgJiYKKysgICAgIChpZiAkYWNfZGlyLyRhY193b3JkIC0tc3RhdGlzdGljcyAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKV0sCisrICAgIDopCisrICBBQ19QQVRIX1BST0coR01TR0ZNVCwgZ21zZ2ZtdCwgJE1TR0ZNVCkKKysKKysgIGRubCBTZWFyY2ggZm9yIEdOVSB4Z2V0dGV4dCAwLjEyIG9yIG5ld2VyIGluIHRoZSBQQVRILgorKyAgZG5sIFRoZSBmaXJzdCB0ZXN0IGV4Y2x1ZGVzIFNvbGFyaXMgeGdldHRleHQgYW5kIGVhcmx5IEdOVSB4Z2V0dGV4dCB2ZXJzaW9ucy4KKysgIGRubCBUaGUgc2Vjb25kIHRlc3QgZXhjbHVkZXMgRnJlZUJTRCB4Z2V0dGV4dC4KKysgIEFNX1BBVEhfUFJPR19XSVRIX1RFU1QoWEdFVFRFWFQsIHhnZXR0ZXh0LAorKyAgICBbJGFjX2Rpci8kYWNfd29yZCAtLW9taXQtaGVhZGVyIC0tY29weXJpZ2h0LWhvbGRlcj0gLS1tc2dpZC1idWdzLWFkZHJlc3M9IC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjEgJiYKKysgICAgIChpZiAkYWNfZGlyLyRhY193b3JkIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSldLAorKyAgICA6KQorKyAgZG5sIFJlbW92ZSBsZWZ0b3ZlciBmcm9tIEZyZWVCU0QgeGdldHRleHQgY2FsbC4KKysgIHJtIC1mIG1lc3NhZ2VzLnBvCisrCisrICBkbmwgU2VhcmNoIGZvciBHTlUgbXNnbWVyZ2UgMC4xMSBvciBuZXdlciBpbiB0aGUgUEFUSC4KKysgIEFNX1BBVEhfUFJPR19XSVRIX1RFU1QoTVNHTUVSR0UsIG1zZ21lcmdlLAorKyAgICBbJGFjX2Rpci8kYWNfd29yZCAtLXVwZGF0ZSAtcSAvZGV2L251bGwgL2Rldi9udWxsID4vZGV2L251bGwgMj4mMV0sIDopCisrCisrICBkbmwgVGhpcyBjb3VsZCBnbyBhd2F5IHNvbWUgZGF5OyB0aGUgUEFUSF9QUk9HX1dJVEhfVEVTVCBhbHJlYWR5IGRvZXMgaXQuCisrICBkbmwgVGVzdCB3aGV0aGVyIHdlIHJlYWxseSBmb3VuZCBHTlUgbXNnZm10LgorKyAgaWYgdGVzdCAiJEdNU0dGTVQiICE9ICI6IjsgdGhlbgorKyAgICBkbmwgSWYgaXQgaXMgbm8gR05VIG1zZ2ZtdCB3ZSBkZWZpbmUgaXQgYXMgOiBzbyB0aGF0IHRoZQorKyAgICBkbmwgTWFrZWZpbGVzIHN0aWxsIGNhbiB3b3JrLgorKyAgICBpZiAkR01TR0ZNVCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmJgorKyAgICAgICAoaWYgJEdNU0dGTVQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpOyB0aGVuCisrICAgICAgOiA7CisrICAgIGVsc2UKKysgICAgICBHTVNHRk1UPWBlY2hvICIkR01TR0ZNVCIgfCBzZWQgLWUgJ3MsXi4qLywsJ2AKKysgICAgICBBQ19NU0dfUkVTVUxUKAorKyAgICAgICAgW2ZvdW5kICRHTVNHRk1UIHByb2dyYW0gaXMgbm90IEdOVSBtc2dmbXQ7IGlnbm9yZSBpdF0pCisrICAgICAgR01TR0ZNVD0iOiIKKysgICAgZmkKKysgIGZpCisrCisrICBkbmwgVGhpcyBjb3VsZCBnbyBhd2F5IHNvbWUgZGF5OyB0aGUgUEFUSF9QUk9HX1dJVEhfVEVTVCBhbHJlYWR5IGRvZXMgaXQuCisrICBkbmwgVGVzdCB3aGV0aGVyIHdlIHJlYWxseSBmb3VuZCBHTlUgeGdldHRleHQuCisrICBpZiB0ZXN0ICIkWEdFVFRFWFQiICE9ICI6IjsgdGhlbgorKyAgICBkbmwgSWYgaXQgaXMgbm8gR05VIHhnZXR0ZXh0IHdlIGRlZmluZSBpdCBhcyA6IHNvIHRoYXQgdGhlCisrICAgIGRubCBNYWtlZmlsZXMgc3RpbGwgY2FuIHdvcmsuCisrICAgIGlmICRYR0VUVEVYVCAtLW9taXQtaGVhZGVyIC0tY29weXJpZ2h0LWhvbGRlcj0gLS1tc2dpZC1idWdzLWFkZHJlc3M9IC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjEgJiYKKysgICAgICAgKGlmICRYR0VUVEVYVCAtLW9taXQtaGVhZGVyIC0tY29weXJpZ2h0LWhvbGRlcj0gLS1tc2dpZC1idWdzLWFkZHJlc3M9IC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpOyB0aGVuCisrICAgICAgOiA7CisrICAgIGVsc2UKKysgICAgICBBQ19NU0dfUkVTVUxUKAorKyAgICAgICAgW2ZvdW5kIHhnZXR0ZXh0IHByb2dyYW0gaXMgbm90IEdOVSB4Z2V0dGV4dDsgaWdub3JlIGl0XSkKKysgICAgICBYR0VUVEVYVD0iOiIKKysgICAgZmkKKysgICAgZG5sIFJlbW92ZSBsZWZ0b3ZlciBmcm9tIEZyZWVCU0QgeGdldHRleHQgY2FsbC4KKysgICAgcm0gLWYgbWVzc2FnZXMucG8KKysgIGZpCisrCisrICBBQ19PVVRQVVRfQ09NTUFORFMoWworKyAgICBmb3IgYWNfZmlsZSBpbiAkQ09ORklHX0ZJTEVTOyBkbworKyAgICAgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIKKysgICAgICBjYXNlICIkYWNfZmlsZSIgaW4KKysgICAgICAgICo6KikgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyU6LiolJSdgIDs7CisrICAgICAgZXNhYworKyAgICAgICMgUE8gZGlyZWN0b3JpZXMgaGF2ZSBhIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBmcm9tIE1ha2VmaWxlLmluLmluLgorKyAgICAgIGNhc2UgIiRhY19maWxlIiBpbiAqL01ha2VmaWxlLmluKQorKyAgICAgICAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIuCisrICAgICAgICBhY19kaXI9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCisrICAgICAgICBhY19kaXJfc3VmZml4PSIvYGVjaG8gIiRhY19kaXIifHNlZCAncyVeXC4vJSUnYCIKKysgICAgICAgIGFjX2RvdHM9YGVjaG8gIiRhY19kaXJfc3VmZml4InxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKKysgICAgICAgICMgSW4gYXV0b2NvbmYtMi4xMyBpdCBpcyBjYWxsZWQgJGFjX2dpdmVuX3NyY2Rpci4KKysgICAgICAgICMgSW4gYXV0b2NvbmYtMi41MCBpdCBpcyBjYWxsZWQgJHNyY2Rpci4KKysgICAgICAgIHRlc3QgLW4gIiRhY19naXZlbl9zcmNkaXIiIHx8IGFjX2dpdmVuX3NyY2Rpcj0iJHNyY2RpciIKKysgICAgICAgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisrICAgICAgICAgIC4pICB0b3Bfc3JjZGlyPWBlY2hvICRhY19kb3RzfHNlZCAncyUvJCUlJ2AgOzsKKysgICAgICAgICAgLyopIHRvcF9zcmNkaXI9IiRhY19naXZlbl9zcmNkaXIiIDs7CisrICAgICAgICAgICopICB0b3Bfc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIiIDs7CisrICAgICAgICBlc2FjCisrICAgICAgICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iOyB0aGVuCisrICAgICAgICAgIHJtIC1mICIkYWNfZGlyL1BPVEZJTEVTIgorKyAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIgfHwgZWNobyAiY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIKKysgICAgICAgICAgY2F0ICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iIHwgc2VkIC1lICIvXiMvZCIgLWUgIi9eWyAJXSpcJC9kIiAtZSAicywuKiwgICAgICR0b3Bfc3JjZGlyLyYgXFxcXCwiIHwgc2VkIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiA+ICIkYWNfZGlyL1BPVEZJTEVTIgorKyAgICAgICAgICBQT01BS0VGSUxFREVQUz0iUE9URklMRVMuaW4iCisrICAgICAgICAgICMgQUxMX0xJTkdVQVMsIFBPRklMRVMsIFVQREFURVBPRklMRVMsIERVTU1ZUE9GSUxFUywgR01PRklMRVMgZGVwZW5kCisrICAgICAgICAgICMgb24gJGFjX2RpciBidXQgZG9uJ3QgZGVwZW5kIG9uIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24KKysgICAgICAgICAgIyBwYXJhbWV0ZXJzLgorKyAgICAgICAgICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyI7IHRoZW4KKysgICAgICAgICAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgorKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRPQlNPTEVURV9BTExfTElOR1VBUyI7IHRoZW4KKysgICAgICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIgfHwgZWNobyAic2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBBTExfTElOR1VBU189YHNlZCAtZSAiL14jL2QiICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCisrICAgICAgICAgICAgIyBIaWRlIHRoZSBBTExfTElOR1VBUyBhc3NpZ21lbnQgZnJvbSBhdXRvbWFrZS4KKysgICAgICAgICAgICBldmFsICdBTExfTElOR1VBUycnPSRBTExfTElOR1VBU18nCisrICAgICAgICAgICAgUE9NQUtFRklMRURFUFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgorKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgIyBUaGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMgd2FzIGdpdmVuIGluIGNvbmZpZ3VyZS5pbi4KKysgICAgICAgICAgICBldmFsICdBTExfTElOR1VBUycnPSRPQlNPTEVURV9BTExfTElOR1VBUycKKysgICAgICAgICAgZmkKKysgICAgICAgICAgIyBDb21wdXRlIFBPRklMRVMKKysgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykucG8pCisrICAgICAgICAgICMgQ29tcHV0ZSBVUERBVEVQT0ZJTEVTCisrICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykucG8tdXBkYXRlKQorKyAgICAgICAgICAjIENvbXB1dGUgRFVNTVlQT0ZJTEVTCisrICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykubm9wKQorKyAgICAgICAgICAjIENvbXB1dGUgR01PRklMRVMKKysgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykuZ21vKQorKyAgICAgICAgICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorKyAgICAgICAgICAgIC4pIHNyY2RpcnByZT0gOzsKKysgICAgICAgICAgICAqKSBzcmNkaXJwcmU9JyQoc3JjZGlyKS8nIDs7CisrICAgICAgICAgIGVzYWMKKysgICAgICAgICAgUE9GSUxFUz0KKysgICAgICAgICAgVVBEQVRFUE9GSUxFUz0KKysgICAgICAgICAgRFVNTVlQT0ZJTEVTPQorKyAgICAgICAgICBHTU9GSUxFUz0KKysgICAgICAgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworKyAgICAgICAgICAgIFBPRklMRVM9IiRQT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5wbyIKKysgICAgICAgICAgICBVUERBVEVQT0ZJTEVTPSIkVVBEQVRFUE9GSUxFUyAkbGFuZy5wby11cGRhdGUiCisrICAgICAgICAgICAgRFVNTVlQT0ZJTEVTPSIkRFVNTVlQT0ZJTEVTICRsYW5nLm5vcCIKKysgICAgICAgICAgICBHTU9GSUxFUz0iJEdNT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5nbW8iCisrICAgICAgICAgIGRvbmUKKysgICAgICAgICAgIyBDQVRBTE9HUyBkZXBlbmRzIG9uIGJvdGggJGFjX2RpciBhbmQgdGhlIHVzZXIncyBMSU5HVUFTCisrICAgICAgICAgICMgZW52aXJvbm1lbnQgdmFyaWFibGUuCisrICAgICAgICAgIElOU1RfTElOR1VBUz0KKysgICAgICAgICAgaWYgdGVzdCAtbiAiJEFMTF9MSU5HVUFTIjsgdGhlbgorKyAgICAgICAgICAgIGZvciBwcmVzZW50bGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisrICAgICAgICAgICAgICB1c2VpdD1ubworKyAgICAgICAgICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiRMSU5HVUFTIjsgdGhlbgorKyAgICAgICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkTElOR1VBUyIKKysgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJEFMTF9MSU5HVUFTIgorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgIGZvciBkZXNpcmVkbGFuZyBpbiAkZGVzaXJlZGxhbmd1YWdlczsgZG8KKysgICAgICAgICAgICAgICAgIyBVc2UgdGhlIHByZXNlbnRsYW5nIGNhdGFsb2cgaWYgZGVzaXJlZGxhbmcgaXMKKysgICAgICAgICAgICAgICAgIyAgIGEuIGVxdWFsIHRvIHByZXNlbnRsYW5nLCBvcgorKyAgICAgICAgICAgICAgICAjICAgYi4gYSB2YXJpYW50IG9mIHByZXNlbnRsYW5nIChiZWNhdXNlIGluIHRoaXMgY2FzZSwKKysgICAgICAgICAgICAgICAgIyAgICAgIHByZXNlbnRsYW5nIGNhbiBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIG1lc3NhZ2VzCisrICAgICAgICAgICAgICAgICMgICAgICB3aGljaCBhcmUgbm90IHRyYW5zbGF0ZWQgaW4gdGhlIGRlc2lyZWRsYW5nIGNhdGFsb2cpLgorKyAgICAgICAgICAgICAgICBjYXNlICIkZGVzaXJlZGxhbmciIGluCisrICAgICAgICAgICAgICAgICAgIiRwcmVzZW50bGFuZyIqKSB1c2VpdD15ZXM7OworKyAgICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICBpZiB0ZXN0ICR1c2VpdCA9IHllczsgdGhlbgorKyAgICAgICAgICAgICAgICBJTlNUX0xJTkdVQVM9IiRJTlNUX0xJTkdVQVMgJHByZXNlbnRsYW5nIgorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBkb25lCisrICAgICAgICAgIGZpCisrICAgICAgICAgIENBVEFMT0dTPQorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkSU5TVF9MSU5HVUFTIjsgdGhlbgorKyAgICAgICAgICAgIGZvciBsYW5nIGluICRJTlNUX0xJTkdVQVM7IGRvCisrICAgICAgICAgICAgICBDQVRBTE9HUz0iJENBVEFMT0dTICRsYW5nLmdtbyIKKysgICAgICAgICAgICBkb25lCisrICAgICAgICAgIGZpCisrICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZGlyL01ha2VmaWxlIiB8fCBlY2hvICJjcmVhdGluZyAkYWNfZGlyL01ha2VmaWxlIgorKyAgICAgICAgICBzZWQgLWUgIi9eUE9URklMRVMgPS9yICRhY19kaXIvUE9URklMRVMiIC1lICIvXiMgTWFrZXZhcnMvciAkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTWFrZXZhcnMiIC1lICJzfEBQT0ZJTEVTQHwkUE9GSUxFU3xnIiAtZSAic3xAVVBEQVRFUE9GSUxFU0B8JFVQREFURVBPRklMRVN8ZyIgLWUgInN8QERVTU1ZUE9GSUxFU0B8JERVTU1ZUE9GSUxFU3xnIiAtZSAic3xAR01PRklMRVNAfCRHTU9GSUxFU3xnIiAtZSAic3xAQ0FUQUxPR1NAfCRDQVRBTE9HU3xnIiAtZSAic3xAUE9NQUtFRklMRURFUFNAfCRQT01BS0VGSUxFREVQU3xnIiAiJGFjX2Rpci9NYWtlZmlsZS5pbiIgPiAiJGFjX2Rpci9NYWtlZmlsZSIKKysgICAgICAgICAgZm9yIGYgaW4gIiRhY19naXZlbl9zcmNkaXIvJGFjX2RpciIvUnVsZXMtKjsgZG8KKysgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KKysgICAgICAgICAgICAgIGNhc2UgIiRmIiBpbgorKyAgICAgICAgICAgICAgICAqLm9yaWcgfCAqLmJhayB8ICp+KSA7OworKyAgICAgICAgICAgICAgICAqKSBjYXQgIiRmIiA+PiAiJGFjX2Rpci9NYWtlZmlsZSIgOzsKKysgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICBkb25lCisrICAgICAgICBmaQorKyAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgIGRvbmVdLAorKyAgIFsjIENhcHR1cmUgdGhlIHZhbHVlIG9mIG9ic29sZXRlIEFMTF9MSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlCisrICAgICMgUE9GSUxFUywgVVBEQVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUywgQ0FUQUxPR1MuIEJ1dCBoaWRlIGl0CisrICAgICMgZnJvbSBhdXRvbWFrZS4KKysgICAgZXZhbCAnT0JTT0xFVEVfQUxMX0xJTkdVQVMnJz0iJEFMTF9MSU5HVUFTIicKKysgICAgIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlIENBVEFMT0dTLgorKyAgICBMSU5HVUFTPSIke0xJTkdVQVMtJVVOU0VUJX0iCisrICAgXSkKKytdKQorKworK2RubCBQb3N0cHJvY2Vzc2VzIGEgTWFrZWZpbGUgaW4gYSBkaXJlY3RvcnkgY29udGFpbmluZyBQTyBmaWxlcy4KKytBQ19ERUZVTihbQU1fUE9TVFBST0NFU1NfUE9fTUFLRUZJTEVdLAorK1sKKysgICMgV2hlbiB0aGlzIGNvZGUgaXMgcnVuLCBpbiBjb25maWcuc3RhdHVzLCB0d28gdmFyaWFibGVzIGhhdmUgYWxyZWFkeSBiZWVuCisrICAjIHNldDoKKysgICMgLSBPQlNPTEVURV9BTExfTElOR1VBUyBpcyB0aGUgdmFsdWUgb2YgTElOR1VBUyBzZXQgaW4gY29uZmlndXJlLmluLAorKyAgIyAtIExJTkdVQVMgaXMgdGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMSU5HVUFTIGF0IGNvbmZpZ3VyZQorKyAgIyAgIHRpbWUuCisrCisrY2hhbmdlcXVvdGUoLClkbmwKKysgICMgQWRqdXN0IGEgcmVsYXRpdmUgc3JjZGlyLgorKyAgYWNfZGlyPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJS9bXi9dW14vXSokJSUnYAorKyAgYWNfZGlyX3N1ZmZpeD0iL2BlY2hvICIkYWNfZGlyInxzZWQgJ3MlXlwuLyUlJ2AiCisrICBhY19kb3RzPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCJ8c2VkICdzJS9bXi9dKiUuLi8lZydgCisrICAjIEluIGF1dG9jb25mLTIuMTMgaXQgaXMgY2FsbGVkICRhY19naXZlbl9zcmNkaXIuCisrICAjIEluIGF1dG9jb25mLTIuNTAgaXQgaXMgY2FsbGVkICRzcmNkaXIuCisrICB0ZXN0IC1uICIkYWNfZ2l2ZW5fc3JjZGlyIiB8fCBhY19naXZlbl9zcmNkaXI9IiRzcmNkaXIiCisrICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorKyAgICAuKSAgdG9wX3NyY2Rpcj1gZWNobyAkYWNfZG90c3xzZWQgJ3MlLyQlJSdgIDs7CisrICAgIC8qKSB0b3Bfc3JjZGlyPSIkYWNfZ2l2ZW5fc3JjZGlyIiA7OworKyAgICAqKSAgdG9wX3NyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyIiA7OworKyAgZXNhYworKworKyAgIyBGaW5kIGEgd2F5IHRvIGVjaG8gc3RyaW5ncyB3aXRob3V0IGludGVycHJldGluZyBiYWNrc2xhc2guCisrICBpZiB0ZXN0ICJYYChlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JzsgdGhlbgorKyAgICBndF9lY2hvPSdlY2hvJworKyAgZWxzZQorKyAgICBpZiB0ZXN0ICJYYChwcmludGYgJyVzXG4nICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JzsgdGhlbgorKyAgICAgIGd0X2VjaG89J3ByaW50ZiAlc1xuJworKyAgICBlbHNlCisrICAgICAgZWNob19mdW5jICgpIHsKKysgICAgICAgIGNhdCA8PEVPVAorKyQqCisrRU9UCisrICAgICAgfQorKyAgICAgIGd0X2VjaG89J2VjaG9fZnVuYycKKysgICAgZmkKKysgIGZpCisrCisrICAjIEEgc2VkIHNjcmlwdCB0aGF0IGV4dHJhY3RzIHRoZSB2YWx1ZSBvZiBWQVJJQUJMRSBmcm9tIGEgTWFrZWZpbGUuCisrICBzZWRfeF92YXJpYWJsZT0nCisrIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5LgorK3gKKytzL1AvUC8KKyt4CisrdGEKKysjIFllcyBpdCB3YXMgZW1wdHkuIExvb2sgaWYgd2UgaGF2ZSB0aGUgZXhwZWN0ZWQgdmFyaWFibGUgZGVmaW5pdGlvbi4KKysvXlsJIF0qVkFSSUFCTEVbCSBdKj0veworKyAgIyBTZWVuIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uLgorKyAgcy9eWwkgXSpWQVJJQUJMRVsJIF0qPS8vCisrICBiYQorK30KKytiZAorKzphCisrIyBIZXJlIHdlIGFyZSBwcm9jZXNzaW5nIGEgbGluZSBmcm9tIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uLgorKyMgUmVtb3ZlIGNvbW1lbnQsIG1vcmUgcHJlY2lzZWx5IHJlcGxhY2UgaXQgd2l0aCBhIHNwYWNlLgorK3MvIy4qJC8gLworKyMgU2VlIGlmIHRoZSBsaW5lIGVuZHMgaW4gYSBiYWNrc2xhc2guCisrdGIKKys6YgorK3MvXFwkLy8KKysjIFByaW50IHRoZSBsaW5lLCB3aXRob3V0IHRoZSB0cmFpbGluZyBiYWNrc2xhc2guCisrcAorK3RjCisrIyBUaGVyZSB3YXMgbm8gdHJhaWxpbmcgYmFja3NsYXNoLiBUaGUgZW5kIG9mIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGlzCisrIyByZWFjaGVkLiBDbGVhciB0aGUgaG9sZCBzcGFjZS4KKytzL14uKiQvLworK3gKKytiZAorKzpjCisrIyBBIHRyYWlsaW5nIGJhY2tzbGFzaCBtZWFucyB0aGF0IHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGNvbnRpbnVlcyBpbiB0aGUKKysjIG5leHQgbGluZS4gUHV0IGEgbm9uZW1wdHkgc3RyaW5nIGludG8gdGhlIGhvbGQgc3BhY2UgdG8gaW5kaWNhdGUgdGhpcy4KKytzL14uKiQvUC8KKyt4CisrOmQKKysnCisrY2hhbmdlcXVvdGUoWyxdKWRubAorKworKyAgIyBTZXQgUE9URklMRVMgdG8gdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSBQT1RGSUxFUy4KKysgIHNlZF94X1BPVEZJTEVTPSJgJGd0X2VjaG8gXCIkc2VkX3hfdmFyaWFibGVcIiB8IHNlZCAtZSAnL14gKiMvZCcgLWUgJ3MvVkFSSUFCTEUvUE9URklMRVMvZydgIgorKyAgUE9URklMRVM9YHNlZCAtbiAtZSAiJHNlZF94X1BPVEZJTEVTIiA8ICIkYWNfZmlsZSJgCisrICAjIENvbXB1dGUgUE9URklMRVNfREVQUyBhcworKyAgIyAgICQoZm9yZWFjaCBmaWxlLCAkKFBPVEZJTEVTKSwgJCh0b3Bfc3JjZGlyKS8kKGZpbGUpKQorKyAgUE9URklMRVNfREVQUz0KKysgIGZvciBmaWxlIGluICRQT1RGSUxFUzsgZG8KKysgICAgUE9URklMRVNfREVQUz0iJFBPVEZJTEVTX0RFUFMgIickKHRvcF9zcmNkaXIpLyciJGZpbGUiCisrICBkb25lCisrICBQT01BS0VGSUxFREVQUz0iIgorKworKyAgaWYgdGVzdCAtbiAiJE9CU09MRVRFX0FMTF9MSU5HVUFTIjsgdGhlbgorKyAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgorKyAgZmkKKysgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTIjsgdGhlbgorKyAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgorKyAgICBBTExfTElOR1VBU189YHNlZCAtZSAiL14jL2QiICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCisrICAgIFBPTUFLRUZJTEVERVBTPSIkUE9NQUtFRklMRURFUFMgTElOR1VBUyIKKysgIGVsc2UKKysgICAgIyBTZXQgQUxMX0xJTkdVQVMgdG8gdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSBMSU5HVUFTLgorKyAgICBzZWRfeF9MSU5HVUFTPSJgJGd0X2VjaG8gXCIkc2VkX3hfdmFyaWFibGVcIiB8IHNlZCAtZSAnL14gKiMvZCcgLWUgJ3MvVkFSSUFCTEUvTElOR1VBUy9nJ2AiCisrICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1uIC1lICIkc2VkX3hfTElOR1VBUyIgPCAiJGFjX2ZpbGUiYAorKyAgZmkKKysgICMgSGlkZSB0aGUgQUxMX0xJTkdVQVMgYXNzaWdtZW50IGZyb20gYXV0b21ha2UuCisrICBldmFsICdBTExfTElOR1VBUycnPSRBTExfTElOR1VBU18nCisrICAjIENvbXB1dGUgUE9GSUxFUworKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykucG8pCisrICAjIENvbXB1dGUgVVBEQVRFUE9GSUxFUworKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5wby11cGRhdGUpCisrICAjIENvbXB1dGUgRFVNTVlQT0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLm5vcCkKKysgICMgQ29tcHV0ZSBHTU9GSUxFUworKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykuZ21vKQorKyAgIyBDb21wdXRlIFBST1BFUlRJRVNGSUxFUworKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJCh0b3Bfc3JjZGlyKS8kKERPTUFJTilfJChsYW5nKS5wcm9wZXJ0aWVzKQorKyAgIyBDb21wdXRlIENMQVNTRklMRVMKKysgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQodG9wX3NyY2RpcikvJChET01BSU4pXyQobGFuZykuY2xhc3MpCisrICAjIENvbXB1dGUgUU1GSUxFUworKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykucW0pCisrICAjIENvbXB1dGUgTVNHRklMRVMKKysgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGZyb2IgJChsYW5nKSkubXNnKQorKyAgIyBDb21wdXRlIFJFU09VUkNFU0RMTEZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChmcm9iICQobGFuZykpLyQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsKQorKyAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKysgICAgLikgc3JjZGlycHJlPSA7OworKyAgICAqKSBzcmNkaXJwcmU9JyQoc3JjZGlyKS8nIDs7CisrICBlc2FjCisrICBQT0ZJTEVTPQorKyAgVVBEQVRFUE9GSUxFUz0KKysgIERVTU1ZUE9GSUxFUz0KKysgIEdNT0ZJTEVTPQorKyAgUFJPUEVSVElFU0ZJTEVTPQorKyAgQ0xBU1NGSUxFUz0KKysgIFFNRklMRVM9CisrICBNU0dGSUxFUz0KKysgIFJFU09VUkNFU0RMTEZJTEVTPQorKyAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworKyAgICBQT0ZJTEVTPSIkUE9GSUxFUyAkc3JjZGlycHJlJGxhbmcucG8iCisrICAgIFVQREFURVBPRklMRVM9IiRVUERBVEVQT0ZJTEVTICRsYW5nLnBvLXVwZGF0ZSIKKysgICAgRFVNTVlQT0ZJTEVTPSIkRFVNTVlQT0ZJTEVTICRsYW5nLm5vcCIKKysgICAgR01PRklMRVM9IiRHTU9GSUxFUyAkc3JjZGlycHJlJGxhbmcuZ21vIgorKyAgICBQUk9QRVJUSUVTRklMRVM9IiRQUk9QRVJUSUVTRklMRVMgXCQodG9wX3NyY2RpcikvXCQoRE9NQUlOKV8kbGFuZy5wcm9wZXJ0aWVzIgorKyAgICBDTEFTU0ZJTEVTPSIkQ0xBU1NGSUxFUyBcJCh0b3Bfc3JjZGlyKS9cJChET01BSU4pXyRsYW5nLmNsYXNzIgorKyAgICBRTUZJTEVTPSIkUU1GSUxFUyAkc3JjZGlycHJlJGxhbmcucW0iCisrICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL1wuLiokLy8nIC1lICd5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LydgCisrICAgIE1TR0ZJTEVTPSIkTVNHRklMRVMgJHNyY2RpcnByZSRmcm9iYmVkbGFuZy5tc2ciCisrICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL18vLS9nJ2AKKysgICAgUkVTT1VSQ0VTRExMRklMRVM9IiRSRVNPVVJDRVNETExGSUxFUyAkc3JjZGlycHJlJGZyb2JiZWRsYW5nL1wkKERPTUFJTikucmVzb3VyY2VzLmRsbCIKKysgIGRvbmUKKysgICMgQ0FUQUxPR1MgZGVwZW5kcyBvbiBib3RoICRhY19kaXIgYW5kIHRoZSB1c2VyJ3MgTElOR1VBUworKyAgIyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKysgIElOU1RfTElOR1VBUz0KKysgIGlmIHRlc3QgLW4gIiRBTExfTElOR1VBUyI7IHRoZW4KKysgICAgZm9yIHByZXNlbnRsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKysgICAgICB1c2VpdD1ubworKyAgICAgIGlmIHRlc3QgIiVVTlNFVCUiICE9ICIkTElOR1VBUyI7IHRoZW4KKysgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRMSU5HVUFTIgorKyAgICAgIGVsc2UKKysgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRBTExfTElOR1VBUyIKKysgICAgICBmaQorKyAgICAgIGZvciBkZXNpcmVkbGFuZyBpbiAkZGVzaXJlZGxhbmd1YWdlczsgZG8KKysgICAgICAgICMgVXNlIHRoZSBwcmVzZW50bGFuZyBjYXRhbG9nIGlmIGRlc2lyZWRsYW5nIGlzCisrICAgICAgICAjICAgYS4gZXF1YWwgdG8gcHJlc2VudGxhbmcsIG9yCisrICAgICAgICAjICAgYi4gYSB2YXJpYW50IG9mIHByZXNlbnRsYW5nIChiZWNhdXNlIGluIHRoaXMgY2FzZSwKKysgICAgICAgICMgICAgICBwcmVzZW50bGFuZyBjYW4gYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBtZXNzYWdlcworKyAgICAgICAgIyAgICAgIHdoaWNoIGFyZSBub3QgdHJhbnNsYXRlZCBpbiB0aGUgZGVzaXJlZGxhbmcgY2F0YWxvZykuCisrICAgICAgICBjYXNlICIkZGVzaXJlZGxhbmciIGluCisrICAgICAgICAgICIkcHJlc2VudGxhbmciKikgdXNlaXQ9eWVzOzsKKysgICAgICAgIGVzYWMKKysgICAgICBkb25lCisrICAgICAgaWYgdGVzdCAkdXNlaXQgPSB5ZXM7IHRoZW4KKysgICAgICAgIElOU1RfTElOR1VBUz0iJElOU1RfTElOR1VBUyAkcHJlc2VudGxhbmciCisrICAgICAgZmkKKysgICAgZG9uZQorKyAgZmkKKysgIENBVEFMT0dTPQorKyAgSkFWQUNBVEFMT0dTPQorKyAgUVRDQVRBTE9HUz0KKysgIFRDTENBVEFMT0dTPQorKyAgQ1NIQVJQQ0FUQUxPR1M9CisrICBpZiB0ZXN0IC1uICIkSU5TVF9MSU5HVUFTIjsgdGhlbgorKyAgICBmb3IgbGFuZyBpbiAkSU5TVF9MSU5HVUFTOyBkbworKyAgICAgIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgorKyAgICAgIEpBVkFDQVRBTE9HUz0iJEpBVkFDQVRBTE9HUyBcJChET01BSU4pXyRsYW5nLnByb3BlcnRpZXMiCisrICAgICAgUVRDQVRBTE9HUz0iJFFUQ0FUQUxPR1MgJGxhbmcucW0iCisrICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKysgICAgICBUQ0xDQVRBTE9HUz0iJFRDTENBVEFMT0dTICRmcm9iYmVkbGFuZy5tc2ciCisrICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnYAorKyAgICAgIENTSEFSUENBVEFMT0dTPSIkQ1NIQVJQQ0FUQUxPR1MgJGZyb2JiZWRsYW5nL1wkKERPTUFJTikucmVzb3VyY2VzLmRsbCIKKysgICAgZG9uZQorKyAgZmkKKysKKysgIHNlZCAtZSAic3xAUE9URklMRVNfREVQU0B8JFBPVEZJTEVTX0RFUFN8ZyIgLWUgInN8QFBPRklMRVNAfCRQT0ZJTEVTfGciIC1lICJzfEBVUERBVEVQT0ZJTEVTQHwkVVBEQVRFUE9GSUxFU3xnIiAtZSAic3xARFVNTVlQT0ZJTEVTQHwkRFVNTVlQT0ZJTEVTfGciIC1lICJzfEBHTU9GSUxFU0B8JEdNT0ZJTEVTfGciIC1lICJzfEBQUk9QRVJUSUVTRklMRVNAfCRQUk9QRVJUSUVTRklMRVN8ZyIgLWUgInN8QENMQVNTRklMRVNAfCRDTEFTU0ZJTEVTfGciIC1lICJzfEBRTUZJTEVTQHwkUU1GSUxFU3xnIiAtZSAic3xATVNHRklMRVNAfCRNU0dGSUxFU3xnIiAtZSAic3xAUkVTT1VSQ0VTRExMRklMRVNAfCRSRVNPVVJDRVNETExGSUxFU3xnIiAtZSAic3xAQ0FUQUxPR1NAfCRDQVRBTE9HU3xnIiAtZSAic3xASkFWQUNBVEFMT0dTQHwkSkFWQUNBVEFMT0dTfGciIC1lICJzfEBRVENBVEFMT0dTQHwkUVRDQVRBTE9HU3xnIiAtZSAic3xAVENMQ0FUQUxPR1NAfCRUQ0xDQVRBTE9HU3xnIiAtZSAic3xAQ1NIQVJQQ0FUQUxPR1NAfCRDU0hBUlBDQVRBTE9HU3xnIiAtZSAncyxeI2Rpc3RkaXI6LGRpc3RkaXI6LCcgPCAiJGFjX2ZpbGUiID4gIiRhY19maWxlLnRtcCIKKysgIGlmIGdyZXAgLWwgJ0BUQ0xDQVRBTE9HU0AnICIkYWNfZmlsZSIgPiAvZGV2L251bGw7IHRoZW4KKysgICAgIyBBZGQgZGVwZW5kZW5jaWVzIHRoYXQgY2Fubm90IGJlIGZvcm11bGF0ZWQgYXMgYSBzaW1wbGUgc3VmZml4IHJ1bGUuCisrICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKysgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9cLi4qJC8vJyAtZSAneS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAorKyAgICAgIGNhdCA+PiAiJGFjX2ZpbGUudG1wIiA8PEVPRgorKyRmcm9iYmVkbGFuZy5tc2c6ICRsYW5nLnBvCisrCUBlY2hvICJcJChNU0dGTVQpIC1jIC0tdGNsIC1kIFwkKHNyY2RpcikgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIjsgXAorKwlcJChNU0dGTVQpIC1jIC0tdGNsIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9CisrRU9GCisrICAgIGRvbmUKKysgIGZpCisrICBpZiBncmVwIC1sICdAQ1NIQVJQQ0FUQUxPR1NAJyAiJGFjX2ZpbGUiID4gL2Rldi9udWxsOyB0aGVuCisrICAgICMgQWRkIGRlcGVuZGVuY2llcyB0aGF0IGNhbm5vdCBiZSBmb3JtdWxhdGVkIGFzIGEgc2ltcGxlIHN1ZmZpeCBydWxlLgorKyAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisrICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnYAorKyAgICAgIGNhdCA+PiAiJGFjX2ZpbGUudG1wIiA8PEVPRgorKyRmcm9iYmVkbGFuZy9cJChET01BSU4pLnJlc291cmNlcy5kbGw6ICRsYW5nLnBvCisrCUBlY2hvICJcJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kIFwkKHNyY2RpcikgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIC1yIFwkKERPTUFJTikiOyBcCisrCVwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyAtciAiXCQoRE9NQUlOKSIgfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9CisrRU9GCisrICAgIGRvbmUKKysgIGZpCisrICBpZiB0ZXN0IC1uICIkUE9NQUtFRklMRURFUFMiOyB0aGVuCisrICAgIGNhdCA+PiAiJGFjX2ZpbGUudG1wIiA8PEVPRgorK01ha2VmaWxlOiAkUE9NQUtFRklMRURFUFMKKytFT0YKKysgIGZpCisrICBtdiAiJGFjX2ZpbGUudG1wIiAiJGFjX2ZpbGUiCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvcHJpbnRmLXBvc2l4Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9wcmludGYtcG9zaXgubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45NzQ2NTQwMDAgLTA0MDAKK0BAIC0wLDAgKzEsNDYgQEAKKysjIHByaW50Zi1wb3NpeC5tNCBzZXJpYWwgMiAoZ2V0dGV4dC0wLjEzLjEpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKytkbmwgVGVzdCB3aGV0aGVyIHRoZSBwcmludGYoKSBmdW5jdGlvbiBzdXBwb3J0cyBQT1NJWC9YU0kgZm9ybWF0IHN0cmluZ3Mgd2l0aAorK2RubCBwb3NpdGlvbnMuCisrCisrQUNfREVGVU4oW2d0X1BSSU5URl9QT1NJWF0sCisrWworKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisrICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBwcmludGYoKSBzdXBwb3J0cyBQT1NJWC9YU0kgZm9ybWF0IHN0cmluZ3NdLAorKyAgICBndF9jdl9mdW5jX3ByaW50Zl9wb3NpeCwKKysgICAgWworKyAgICAgIEFDX1RSWV9SVU4oWworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysvKiBUaGUgc3RyaW5nICIlMiRkICUxJGQiLCB3aXRoIGRvbGxhciBjaGFyYWN0ZXJzIHByb3RlY3RlZCBmcm9tIHRoZSBzaGVsbCdzCisrICAgZG9sbGFyIGV4cGFuc2lvbiAocG9zc2libHkgYW4gYXV0b2NvbmYgYnVnKS4gICovCisrc3RhdGljIGNoYXIgZm9ybWF0W10gPSB7ICclJywgJzInLCAnJCcsICdkJywgJyAnLCAnJScsICcxJywgJyQnLCAnZCcsICdcMCcgfTsKKytzdGF0aWMgY2hhciBidWZbMTAwXTsKKytpbnQgbWFpbiAoKQorK3sKKysgIHNwcmludGYgKGJ1ZiwgZm9ybWF0LCAzMywgNTUpOworKyAgcmV0dXJuIChzdHJjbXAgKGJ1ZiwgIjU1IDMzIikgIT0gMCk7CisrfV0sIGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4PXllcywgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9bm8sCisrICAgICAgWworKyAgICAgICAgQUNfRUdSRVBfQ1BQKG5vdHBvc2l4LCBbCisrI2lmIGRlZmluZWQgX19OZXRCU0RfXyB8fCBkZWZpbmVkIF9NU0NfVkVSIHx8IGRlZmluZWQgX19NSU5HVzMyX18gfHwgZGVmaW5lZCBfX0NZR1dJTl9fCisrICBub3Rwb3NpeAorKyNlbmRpZgorKyAgICAgICAgXSwgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9Imd1ZXNzaW5nIG5vIiwKKysgICAgICAgICAgIGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4PSJndWVzc2luZyB5ZXMiKQorKyAgICAgIF0pCisrICAgIF0pCisrICBjYXNlICRndF9jdl9mdW5jX3ByaW50Zl9wb3NpeCBpbgorKyAgICAqeWVzKQorKyAgICAgIEFDX0RFRklORShIQVZFX1BPU0lYX1BSSU5URiwgMSwKKysgICAgICAgIFtEZWZpbmUgaWYgeW91ciBwcmludGYoKSBmdW5jdGlvbiBzdXBwb3J0cyBmb3JtYXQgc3RyaW5ncyB3aXRoIHBvc2l0aW9ucy5dKQorKyAgICAgIDs7CisrICBlc2FjCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvcHJvZ3Rlc3QubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L3Byb2d0ZXN0Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTkwNjUxNTY4IC0wNDAwCitAQCAtMCwwICsxLDkxIEBACisrIyBwcm9ndGVzdC5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjEyKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorK2RubAorK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCisrZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKytkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorK2RubCBmdW5jdGlvbmFsaXR5LgorK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCisrZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKytkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisrCisrZG5sIEF1dGhvcnM6CisrZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTYuCisrCisrIyBTZWFyY2ggcGF0aCBmb3IgYSBwcm9ncmFtIHdoaWNoIHBhc3NlcyB0aGUgZ2l2ZW4gdGVzdC4KKysKKytkbmwgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChWQVJJQUJMRSwgUFJPRy1UTy1DSEVDSy1GT1IsCisrZG5sICAgVEVTVC1QRVJGT1JNRUQtT04tRk9VTkRfUFJPR1JBTSBbLCBWQUxVRS1JRi1OT1QtRk9VTkQgWywgUEFUSF1dKQorK0FDX0RFRlVOKFtBTV9QQVRIX1BST0dfV0lUSF9URVNUXSwKKytbCisrIyBQcmVwYXJlIFBBVEhfU0VQQVJBVE9SLgorKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgorK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisrICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCisrICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisrICBjaG1vZCAreCBjb25mJCQuc2gKKysgIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgIFBBVEhfU0VQQVJBVE9SPSc7JworKyAgZWxzZQorKyAgICBQQVRIX1NFUEFSQVRPUj06CisrICBmaQorKyAgcm0gLWYgY29uZiQkLnNoCisrZmkKKysKKysjIEZpbmQgb3V0IGhvdyB0byB0ZXN0IGZvciBleGVjdXRhYmxlIGZpbGVzLiBEb24ndCB1c2UgYSB6ZXJvLWJ5dGUgZmlsZSwKKysjIGFzIHN5c3RlbXMgbWF5IHVzZSBtZXRob2RzIG90aGVyIHRoYW4gbW9kZSBiaXRzIHRvIGRldGVybWluZSBleGVjdXRhYmlsaXR5LgorK2NhdCA+Y29uZiQkLmZpbGUgPDxfQVNFT0YKKysjISAvYmluL3NoCisrZXhpdCAwCisrX0FTRU9GCisrY2htb2QgK3ggY29uZiQkLmZpbGUKKytpZiB0ZXN0IC14IGNvbmYkJC5maWxlID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC14IgorK2Vsc2UKKysgIGFjX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKKytmaQorK3JtIC1mIGNvbmYkJC5maWxlCisrCisrIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkMiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICQyOyBhY193b3JkPVskXTIKKytBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkYWNfd29yZF0pCisrQUNfQ0FDSEVfVkFMKGFjX2N2X3BhdGhfJDEsCisrW2Nhc2UgIlskXSQxIiBpbgorKyAgW1tcXC9dXSogfCA/OltbXFwvXV0qKQorKyAgICBhY19jdl9wYXRoXyQxPSJbJF0kMSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisrICAgIDs7CisrICAqKQorKyAgICBhY19zYXZlX0lGUz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKysgICAgZm9yIGFjX2RpciBpbiBpZmVsc2UoWyQ1XSwgLCAkUEFUSCwgWyQ1XSk7IGRvCisrICAgICAgSUZTPSIkYWNfc2F2ZV9JRlMiCisrICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKysgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgICAgICAgIGlmICRhY19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisrICAgICAgICAgIGlmIFskM107IHRoZW4KKysgICAgICAgICAgICBhY19jdl9wYXRoXyQxPSIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorKyAgICAgICAgICAgIGJyZWFrIDIKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZG9uZQorKyAgICBkb25lCisrICAgIElGUz0iJGFjX3NhdmVfSUZTIgorK2RubCBJZiBubyA0dGggYXJnIGlzIGdpdmVuLCBsZWF2ZSB0aGUgY2FjaGUgdmFyaWFibGUgdW5zZXQsCisrZG5sIHNvIEFDX1BBVEhfUFJPR1Mgd2lsbCBrZWVwIGxvb2tpbmcuCisraWZlbHNlKFskNF0sICwgLCBbICB0ZXN0IC16ICJbJF1hY19jdl9wYXRoXyQxIiAmJiBhY19jdl9wYXRoXyQxPSIkNCIKKytdKWRubAorKyAgICA7OworK2VzYWNdKWRubAorKyQxPSIkYWNfY3ZfcGF0aF8kMSIKKytpZiB0ZXN0IGlmZWxzZShbJDRdLCAsIFstbiAiWyRdJDEiXSwgWyJbJF0kMSIgIT0gIiQ0Il0pOyB0aGVuCisrICBBQ19NU0dfUkVTVUxUKFskXSQxKQorK2Vsc2UKKysgIEFDX01TR19SRVNVTFQobm8pCisrZmkKKytBQ19TVUJTVCgkMSlkbmwKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9zaWduZWQubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L3NpZ25lZC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljk5NjY1MDY1NiAtMDQwMAorQEAgLTAsMCArMSwxOSBAQAorKyMgc2lnbmVkLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTAuNDApCisrZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtiaF9DX1NJR05FRF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzaWduZWRdLCBiaF9jdl9jX3NpZ25lZCwKKysgICBbQUNfVFJZX0NPTVBJTEUoLCBbc2lnbmVkIGNoYXIgeDtdLCBiaF9jdl9jX3NpZ25lZD15ZXMsIGJoX2N2X2Nfc2lnbmVkPW5vKV0pCisrICBpZiB0ZXN0ICRiaF9jdl9jX3NpZ25lZCA9IG5vOyB0aGVuCisrICAgIEFDX0RFRklORShzaWduZWQsICwKKysgICAgICAgICAgICAgIFtEZWZpbmUgdG8gZW1wdHkgaWYgdGhlIEMgY29tcGlsZXIgZG9lc24ndCBzdXBwb3J0IHRoaXMga2V5d29yZC5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9zaXplX21heC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvc2l6ZV9tYXgubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wMDM2NDk1OTIgLTA0MDAKK0BAIC0wLDAgKzEsNjEgQEAKKysjIHNpemVfbWF4Lm00IHNlcmlhbCAyCisrZG5sIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbZ2xfU0laRV9NQVhdLAorK1sKKysgIEFDX0NIRUNLX0hFQURFUlMoc3RkaW50LmgpCisrICBkbmwgRmlyc3QgdGVzdCB3aGV0aGVyIHRoZSBzeXN0ZW0gYWxyZWFkeSBoYXMgU0laRV9NQVguCisrICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBTSVpFX01BWF0pCisrICByZXN1bHQ9CisrICBBQ19FR1JFUF9DUFAoW0ZvdW5kIGl0XSwgWworKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaWYgSEFWRV9TVERJTlRfSAorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysjZW5kaWYKKysjaWZkZWYgU0laRV9NQVgKKytGb3VuZCBpdAorKyNlbmRpZgorK10sIHJlc3VsdD15ZXMpCisrICBpZiB0ZXN0IC16ICIkcmVzdWx0IjsgdGhlbgorKyAgICBkbmwgRGVmaW5lIGl0IG91cnNlbHZlcy4gSGVyZSB3ZSBhc3N1bWUgdGhhdCB0aGUgdHlwZSAnc2l6ZV90JyBpcyBub3Qgd2lkZXIKKysgICAgZG5sIHRoYW4gdGhlIHR5cGUgJ3Vuc2lnbmVkIGxvbmcnLgorKyAgICBkbmwgVGhlIF9BQ19DT01QVVRFX0lOVCBtYWNybyB3b3JrcyB1cCB0byBMT05HX01BWCwgc2luY2UgaXQgdXNlcyAnZXhwcicsCisrICAgIGRubCB3aGljaCBpcyBndWFyYW50ZWVkIHRvIHdvcmsgZnJvbSBMT05HX01JTiB0byBMT05HX01BWC4KKysgICAgX0FDX0NPTVBVVEVfSU5UKFt+KHNpemVfdCkwIC8gMTBdLCByZXNfaGksCisrICAgICAgWyNpbmNsdWRlIDxzdGRkZWYuaD5dLCByZXN1bHQ9PykKKysgICAgX0FDX0NPTVBVVEVfSU5UKFt+KHNpemVfdCkwICUgMTBdLCByZXNfbG8sCisrICAgICAgWyNpbmNsdWRlIDxzdGRkZWYuaD5dLCByZXN1bHQ9PykKKysgICAgX0FDX0NPTVBVVEVfSU5UKFtzaXplb2YgKHNpemVfdCkgPD0gc2l6ZW9mICh1bnNpZ25lZCBpbnQpXSwgZml0c19pbl91aW50LAorKyAgICAgIFsjaW5jbHVkZSA8c3RkZGVmLmg+XSwgcmVzdWx0PT8pCisrICAgIGlmIHRlc3QgIiRmaXRzX2luX3VpbnQiID0gMTsgdGhlbgorKyAgICAgIGRubCBFdmVuIHRob3VnaCBTSVpFX01BWCBmaXRzIGluIGFuIHVuc2lnbmVkIGludCwgaXQgbXVzdCBiZSBvZiB0eXBlCisrICAgICAgZG5sICd1bnNpZ25lZCBsb25nJyBpZiB0aGUgdHlwZSAnc2l6ZV90JyBpcyB0aGUgc2FtZSBhcyAndW5zaWduZWQgbG9uZycuCisrICAgICAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRkZWYuaD4KKysgICAgICAgIGV4dGVybiBzaXplX3QgZm9vOworKyAgICAgICAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZm9vOworKyAgICAgICAgXSwgW10sIGZpdHNfaW5fdWludD0wKQorKyAgICBmaQorKyAgICBpZiB0ZXN0IC16ICIkcmVzdWx0IjsgdGhlbgorKyAgICAgIGlmIHRlc3QgIiRmaXRzX2luX3VpbnQiID0gMTsgdGhlbgorKyAgICAgICAgcmVzdWx0PSIkcmVzX2hpJHJlc19sbyJVCisrICAgICAgZWxzZQorKyAgICAgICAgcmVzdWx0PSIkcmVzX2hpJHJlc19sbyJVTAorKyAgICAgIGZpCisrICAgIGVsc2UKKysgICAgICBkbmwgU2hvdWxkbid0IGhhcHBlbiwgYnV0IHdobyBrbm93cy4uLgorKyAgICAgIHJlc3VsdD0nfihzaXplX3QpMCcKKysgICAgZmkKKysgIGZpCisrICBBQ19NU0dfUkVTVUxUKFskcmVzdWx0XSkKKysgIGlmIHRlc3QgIiRyZXN1bHQiICE9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoW1NJWkVfTUFYXSwgWyRyZXN1bHRdLAorKyAgICAgIFtEZWZpbmUgYXMgdGhlIG1heGltdW0gdmFsdWUgb2YgdHlwZSAnc2l6ZV90JywgaWYgdGhlIHN5c3RlbSBkb2Vzbid0IGRlZmluZSBpdC5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9zdGRpbnRfaC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvc3RkaW50X2gubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wMDk2NDg2ODAgLTA0MDAKK0BAIC0wLDAgKzEsMjggQEAKKysjIHN0ZGludF9oLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrIyBEZWZpbmUgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVggaWYgPHN0ZGludC5oPiBleGlzdHMsCisrIyBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4KKysKKytBQ19ERUZVTihbam1fQUNfSEVBREVSX1NURElOVF9IXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHN0ZGludC5oXSwgam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oLAorKyAgW0FDX1RSWV9DT01QSUxFKAorKyAgICBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD5dLAorKyAgICBbdWludG1heF90IGkgPSAodWludG1heF90KSAtMTtdLAorKyAgICBqbV9hY19jdl9oZWFkZXJfc3RkaW50X2g9eWVzLAorKyAgICBqbV9hY19jdl9oZWFkZXJfc3RkaW50X2g9bm8pXSkKKysgIGlmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgsIDEsCisrICAgICAgW0RlZmluZSBpZiA8c3RkaW50Lmg+IGV4aXN0cywgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sCisrICAgICAgIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuIF0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3VpbnRtYXhfdC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvdWludG1heF90Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzUuMDIxNjQ2ODU2IC0wNDAwCitAQCAtMCwwICsxLDMyIEBACisrIyB1aW50bWF4X3QubTQgc2VyaWFsIDcgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKytBQ19QUkVSRVEoMi4xMykKKysKKysjIERlZmluZSB1aW50bWF4X3QgdG8gJ3Vuc2lnbmVkIGxvbmcnIG9yICd1bnNpZ25lZCBsb25nIGxvbmcnCisrIyBpZiBpdCBpcyBub3QgYWxyZWFkeSBkZWZpbmVkIGluIDxzdGRpbnQuaD4gb3IgPGludHR5cGVzLmg+LgorKworK0FDX0RFRlVOKFtqbV9BQ19UWVBFX1VJTlRNQVhfVF0sCisrWworKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX0lOVFRZUEVTX0hdKQorKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX1NURElOVF9IXSkKKysgIGlmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0gbm8gJiYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0gbm87IHRoZW4KKysgICAgQUNfUkVRVUlSRShbam1fQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkddKQorKyAgICB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZyA9IHllcyBcCisrICAgICAgJiYgYWNfdHlwZT0ndW5zaWduZWQgbG9uZyBsb25nJyBcCisrICAgICAgfHwgYWNfdHlwZT0ndW5zaWduZWQgbG9uZycKKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKHVpbnRtYXhfdCwgJGFjX3R5cGUsCisrICAgICAgW0RlZmluZSB0byB1bnNpZ25lZCBsb25nIG9yIHVuc2lnbmVkIGxvbmcgbG9uZworKyAgICAgICBpZiA8c3RkaW50Lmg+IGFuZCA8aW50dHlwZXMuaD4gZG9uJ3QgZGVmaW5lLl0pCisrICBlbHNlCisrICAgIEFDX0RFRklORShIQVZFX1VJTlRNQVhfVCwgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAndWludG1heF90JyB0eXBlIGluIDxzdGRpbnQuaD4gb3IgPGludHR5cGVzLmg+Ll0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3Vsb25nbG9uZy5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvdWxvbmdsb25nLm00CTIwMDQtMDktMTIgMTQ6NDA6MzUuMDI4NjQ1NzkyIC0wNDAwCitAQCAtMCwwICsxLDI1IEBACisrIyB1bG9uZ2xvbmcubTQgc2VyaWFsIDMKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKysjIERlZmluZSBIQVZFX1VOU0lHTkVEX0xPTkdfTE9ORyBpZiAndW5zaWduZWQgbG9uZyBsb25nJyB3b3Jrcy4KKysKKytBQ19ERUZVTihbam1fQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkddLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgdW5zaWduZWQgbG9uZyBsb25nXSwgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmcsCisrICBbQUNfVFJZX0xJTksoW3Vuc2lnbmVkIGxvbmcgbG9uZyB1bGwgPSAxVUxMOyBpbnQgaSA9IDYzO10sCisrICAgIFt1bnNpZ25lZCBsb25nIGxvbmcgdWxsbWF4ID0gKHVuc2lnbmVkIGxvbmcgbG9uZykgLTE7CisrICAgICByZXR1cm4gdWxsIDw8IGkgfCB1bGwgPj4gaSB8IHVsbG1heCAvIHVsbCB8IHVsbG1heCAlIHVsbDtdLAorKyAgICBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZz15ZXMsCisrICAgIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nPW5vKV0pCisrICBpZiB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZyA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9VTlNJR05FRF9MT05HX0xPTkcsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3Vuc2lnbmVkIGxvbmcgbG9uZycgdHlwZS5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC93Y2hhcl90Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC93Y2hhcl90Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzUuMDM0NjQ0ODgwIC0wNDAwCitAQCAtMCwwICsxLDIyIEBACisrIyB3Y2hhcl90Lm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorK2RubCBUZXN0IHdoZXRoZXIgPHN0ZGRlZi5oPiBoYXMgdGhlICd3Y2hhcl90JyB0eXBlLgorK2RubCBQcmVyZXF1aXNpdGU6IEFDX1BST0dfQ0MKKysKKytBQ19ERUZVTihbZ3RfVFlQRV9XQ0hBUl9UXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHdjaGFyX3RdLCBndF9jdl9jX3djaGFyX3QsCisrICAgIFtBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyAgICAgICB3Y2hhcl90IGZvbyA9ICh3Y2hhcl90KSdcMCc7XSwgLAorKyAgICAgICBndF9jdl9jX3djaGFyX3Q9eWVzLCBndF9jdl9jX3djaGFyX3Q9bm8pXSkKKysgIGlmIHRlc3QgJGd0X2N2X2Nfd2NoYXJfdCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9XQ0hBUl9ULCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnd2NoYXJfdCcgdHlwZS5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC93aW50X3QubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L3dpbnRfdC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM1LjA0MDY0Mzk2OCAtMDQwMAorQEAgLTAsMCArMSwyMiBAQAorKyMgd2ludF90Lm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKytkbmwgVGVzdCB3aGV0aGVyIDx3Y2hhci5oPiBoYXMgdGhlICd3aW50X3QnIHR5cGUuCisrZG5sIFByZXJlcXVpc2l0ZTogQUNfUFJPR19DQworKworK0FDX0RFRlVOKFtndF9UWVBFX1dJTlRfVF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3aW50X3RdLCBndF9jdl9jX3dpbnRfdCwKKysgICAgW0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8d2NoYXIuaD4KKysgICAgICAgd2ludF90IGZvbyA9ICh3Y2hhcl90KSdcMCc7XSwgLAorKyAgICAgICBndF9jdl9jX3dpbnRfdD15ZXMsIGd0X2N2X2Nfd2ludF90PW5vKV0pCisrICBpZiB0ZXN0ICRndF9jdl9jX3dpbnRfdCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9XSU5UX1QsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd3aW50X3QnIHR5cGUuXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQveHNpemUubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L3hzaXplLm00CTIwMDQtMDktMTIgMTQ6NDA6MzUuMDQ3NjQyOTA0IC0wNDAwCitAQCAtMCwwICsxLDE0IEBACisrIyB4c2l6ZS5tNCBzZXJpYWwgMgorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytBQ19ERUZVTihbZ2xfWFNJWkVdLAorK1sKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi94c2l6ZS5oLgorKyAgQUNfUkVRVUlSRShbZ2xfU0laRV9NQVhdKQorKyAgQUNfQ0hFQ0tfSEVBREVSUyhzdGRpbnQuaCkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9NYWtlZmlsZS5hbQkxOTk4LTEyLTMwIDA2OjE5OjQwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvTWFrZWZpbGUuYW0JMjAwNC0wOS0xMiAxNDo0MDozNS4xMjE2MzE2NTYgLTA0MDAKK0BAIC0xLDUgKzEsNSBAQAorIFNVQkRJUlMgPSBsaWIgaW50bCBzcmMgcG8gbWFuIHRlc3RzdWl0ZQorLUVYVFJBX0RJU1QgPSBjaGVjay5scnpzeiBDT01QQVRBQklMSVRZIFJFQURNRS5jdnMgUkVBRE1FLmlzZG40bGludXggXAorK0VYVFJBX0RJU1QgPSBjb25maWcucnBhdGggIGNoZWNrLmxyenN6IENPTVBBVEFCSUxJVFkgUkVBRE1FLmN2cyBSRUFETUUuaXNkbjRsaW51eCBcCisgCVJFQURNRS5nZXR0ZXh0IHJwbXJjIGJ1aWxkcnBtIHN5c3R5cGUuaW4gZmFzdGNoZWNrLnNoIFJFQURNRS50ZXN0cyBcCisgCWJlb3MtcnVucGlwZWQuYyBmYXN0Y2hlY2suYmVvcworIG5vaW5zdF9TQ1JJUFRTPXN5c3R5cGUKK0BAIC04MywzICs4Myw1IEBACisgcnBtOiAkKFBSKS50YXIuZ3ogU3BlY2ZpbGUKKyAJJChzcmNkaXIpL2J1aWxkcnBtICQoc3JjZGlyKQorIAorKworK0FDTE9DQUxfQU1GTEFHUyA9IC1JIG00CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL01ha2VmaWxlLmluCTE5OTgtMTItMzAgMTE6MzE6NDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9NYWtlZmlsZS5pbgkyMDA0LTA5LTEyIDE0OjQwOjM1LjEwOTYzMzQ4MCAtMDQwMAorQEAgLTEyNSw3ICsxMjUsNyBAQAorIAkgICYmIENPTkZJR19GSUxFUz0kQCBDT05GSUdfSEVBREVSUz0gJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCisgCisgJChBQ0xPQ0FMX000KTogIGNvbmZpZ3VyZS5pbiAgYWNpbmNsdWRlLm00CistCWNkICQoc3JjZGlyKSAmJiAkKEFDTE9DQUwpCisrCWNkICQoc3JjZGlyKSAmJiAkKEFDTE9DQUwpIC1JIG00CisgCisgY29uZmlnLnN0YXR1czogJChzcmNkaXIpL2NvbmZpZ3VyZQorIAkkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL21raW5zdGFsbGRpcnMJMTk5OC0wNC0yNiAwOToyMDo1Mi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL21raW5zdGFsbGRpcnMJMjAwNC0wOS0xMiAxNDo0MDozNC4zMzc3NTA4MjQgLTA0MDAKK0BAIC0xLDM0ICsxLDE1MCBAQAorICMhIC9iaW4vc2gKKyAjIG1raW5zdGFsbGRpcnMgLS0tIG1ha2UgZGlyZWN0b3J5IGhpZXJhcmNoeQorLSMgQXV0aG9yOiBOb2FoIEZyaWVkbWFuIDxmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHU+CisrCisrc2NyaXB0dmVyc2lvbj0yMDA0LTAyLTE1LjIwCisrCisrIyBPcmlnaW5hbCBhdXRob3I6IE5vYWggRnJpZWRtYW4gPGZyaWVkbWFuQHByZXAuYWkubWl0LmVkdT4KKyAjIENyZWF0ZWQ6IDE5OTMtMDUtMTYKKy0jIExhc3QgbW9kaWZpZWQ6IDE5OTUtMDMtMDUKKy0jIFB1YmxpYyBkb21haW4KKysjIFB1YmxpYyBkb21haW4uCisrIworKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKysjIGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPiBvciBzZW5kIHBhdGNoZXMgdG8KKysjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorIAorIGVycnN0YXR1cz0wCisrZGlybW9kZT0iIgorIAorLWZvciBmaWxlIGluICR7MSsiJEAifSA7IGRvCistICAgc2V0IGZub3JkIGBlY2hvICI6JGZpbGUiIHwgc2VkIC1uZSAncy9eOlwvLyMvO3MvXjovLztzL1wvLyAvZztzL14jL1wvLztwJ2AKKy0gICBzaGlmdAorK3VzYWdlPSJcCisrVXNhZ2U6IG1raW5zdGFsbGRpcnMgWy1oXSBbLS1oZWxwXSBbLS12ZXJzaW9uXSBbLW0gTU9ERV0gRElSIC4uLgorIAorLSAgIHBhdGhjb21wPQorLSAgIGZvciBkIGluICR7MSsiJEAifSA7IGRvCistICAgICBwYXRoY29tcD0iJHBhdGhjb21wJGQiCistICAgICBjYXNlICIkcGF0aGNvbXAiIGluCistICAgICAgIC0qICkgcGF0aGNvbXA9Li8kcGF0aGNvbXAgOzsKKy0gICAgIGVzYWMKKytDcmVhdGUgZWFjaCBkaXJlY3RvcnkgRElSICh3aXRoIG1vZGUgTU9ERSwgaWYgc3BlY2lmaWVkKSwgaW5jbHVkaW5nIGFsbAorK2xlYWRpbmcgZmlsZSBuYW1lIGNvbXBvbmVudHMuCisgCistICAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KKy0gICAgICAgIGVjaG8gIm1rZGlyICRwYXRoY29tcCIgMT4mMgorLSAgICAgICAgbWtkaXIgIiRwYXRoY29tcCIgPiAvZGV2L251bGwgMj4mMSB8fCBsYXN0ZXJyPSQ/CistICAgICBmaQorK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uIgorIAorLSAgICAgaWYgdGVzdCAhIC1kICIkcGF0aGNvbXAiOyB0aGVuCisrIyBwcm9jZXNzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKyt3aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KKysgIGNhc2UgJDEgaW4KKysgICAgLWggfCAtLWhlbHAgfCAtLWgqKSAgICAgICAgICMgLWggZm9yIGhlbHAKKysgICAgICBlY2hvICIkdXNhZ2UiCisrICAgICAgZXhpdCAwCisrICAgICAgOzsKKysgICAgLW0pICAgICAgICAgICAgICAgICAgICAgICAgICMgLW0gUEVSTSBhcmcKKysgICAgICBzaGlmdAorKyAgICAgIHRlc3QgJCMgLWVxIDAgJiYgeyBlY2hvICIkdXNhZ2UiIDE+JjI7IGV4aXQgMTsgfQorKyAgICAgIGRpcm1vZGU9JDEKKysgICAgICBzaGlmdAorKyAgICAgIDs7CisrICAgIC0tdmVyc2lvbikKKysgICAgICBlY2hvICIkMCAkc2NyaXB0dmVyc2lvbiIKKysgICAgICBleGl0IDAKKysgICAgICA7OworKyAgICAtLSkgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisrICAgICAgc2hpZnQKKysgICAgICBicmVhaworKyAgICAgIDs7CisrICAgIC0qKSAgICAgICAgICAgICAgICAgICAgICAgICAjIHVua25vd24gb3B0aW9uCisrICAgICAgZWNobyAiJHVzYWdlIiAxPiYyCisrICAgICAgZXhpdCAxCisrICAgICAgOzsKKysgICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmlyc3Qgbm9uLW9wdCBhcmcKKysgICAgICBicmVhaworKyAgICAgIDs7CisrICBlc2FjCisrZG9uZQorKworK2ZvciBmaWxlCisrZG8KKysgIGlmIHRlc3QgLWQgIiRmaWxlIjsgdGhlbgorKyAgICBzaGlmdAorKyAgZWxzZQorKyAgICBicmVhaworKyAgZmkKKytkb25lCisrCisrY2FzZSAkIyBpbgorKyAgMCkgZXhpdCAwIDs7CisrZXNhYworKworKyMgU29sYXJpcyA4J3MgbWtkaXIgLXAgaXNuJ3QgdGhyZWFkLXNhZmUuICBJZiB5b3UgbWtkaXIgLXAgYS9iIGFuZAorKyMgbWtkaXIgLXAgYS9jIGF0IHRoZSBzYW1lIHRpbWUsIGJvdGggd2lsbCBkZXRlY3QgdGhhdCBhIGlzIG1pc3NpbmcsCisrIyBvbmUgd2lsbCBjcmVhdGUgYSwgdGhlbiB0aGUgb3RoZXIgd2lsbCB0cnkgdG8gY3JlYXRlIGEgYW5kIGRpZSB3aXRoCisrIyBhICJGaWxlIGV4aXN0cyIgZXJyb3IuICBUaGlzIGlzIGEgcHJvYmxlbSB3aGVuIGNhbGxpbmcgbWtpbnN0YWxsZGlycworKyMgZnJvbSBhIHBhcmFsbGVsIG1ha2UuICBXZSB1c2UgLS12ZXJzaW9uIGluIHRoZSBwcm9iZSB0byByZXN0cmljdAorKyMgb3Vyc2VsdmVzIHRvIEdOVSBta2Rpciwgd2hpY2ggaXMgdGhyZWFkLXNhZmUuCisrY2FzZSAkZGlybW9kZSBpbgorKyAgJycpCisrICAgIGlmIG1rZGlyIC1wIC0tdmVyc2lvbiAuID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICEgLWQgLi8tLXZlcnNpb247IHRoZW4KKysgICAgICBlY2hvICJta2RpciAtcCAtLSAkKiIKKysgICAgICBleGVjIG1rZGlyIC1wIC0tICIkQCIKKysgICAgZWxzZQorKyAgICAgICMgT24gTmV4dFN0ZXAgYW5kIE9wZW5TdGVwLCB0aGUgYG1rZGlyJyBjb21tYW5kIGRvZXMgbm90CisrICAgICAgIyByZWNvZ25pemUgYW55IG9wdGlvbi4gIEl0IHdpbGwgaW50ZXJwcmV0IGFsbCBvcHRpb25zIGFzCisrICAgICAgIyBkaXJlY3RvcmllcyB0byBjcmVhdGUsIGFuZCB0aGVuIGFib3J0IGJlY2F1c2UgYC4nIGFscmVhZHkKKysgICAgICAjIGV4aXN0cy4KKysgICAgICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorKyAgICAgIHRlc3QgLWQgLi8tLXZlcnNpb24gJiYgcm1kaXIgLi8tLXZlcnNpb24KKysgICAgZmkKKysgICAgOzsKKysgICopCisrICAgIGlmIG1rZGlyIC1tICIkZGlybW9kZSIgLXAgLS12ZXJzaW9uIC4gPi9kZXYvbnVsbCAyPiYxICYmCisrICAgICAgIHRlc3QgISAtZCAuLy0tdmVyc2lvbjsgdGhlbgorKyAgICAgIGVjaG8gIm1rZGlyIC1tICRkaXJtb2RlIC1wIC0tICQqIgorKyAgICAgIGV4ZWMgbWtkaXIgLW0gIiRkaXJtb2RlIiAtcCAtLSAiJEAiCisrICAgIGVsc2UKKysgICAgICAjIENsZWFuIHVwIGFmdGVyIE5leHRTdGVwIGFuZCBPcGVuU3RlcCBta2Rpci4KKysgICAgICBmb3IgZCBpbiAuLy1tIC4vLXAgLi8tLXZlcnNpb24gIi4vJGRpcm1vZGUiOworKyAgICAgIGRvCisrICAgICAgICB0ZXN0IC1kICRkICYmIHJtZGlyICRkCisrICAgICAgZG9uZQorKyAgICBmaQorKyAgICA7OworK2VzYWMKKysKKytmb3IgZmlsZQorK2RvCisrICBzZXQgZm5vcmQgYGVjaG8gIjokZmlsZSIgfCBzZWQgLW5lICdzL146XC8vIy87cy9eOi8vO3MvXC8vIC9nO3MvXiMvXC8vO3AnYAorKyAgc2hpZnQKKysKKysgIHBhdGhjb21wPQorKyAgZm9yIGQKKysgIGRvCisrICAgIHBhdGhjb21wPSIkcGF0aGNvbXAkZCIKKysgICAgY2FzZSAkcGF0aGNvbXAgaW4KKysgICAgICAtKikgcGF0aGNvbXA9Li8kcGF0aGNvbXAgOzsKKysgICAgZXNhYworKworKyAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KKysgICAgICBlY2hvICJta2RpciAkcGF0aGNvbXAiCisrCisrICAgICAgbWtkaXIgIiRwYXRoY29tcCIgfHwgbGFzdGVycj0kPworKworKyAgICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorIAllcnJzdGF0dXM9JGxhc3RlcnIKKy0gICAgIGZpCisrICAgICAgZWxzZQorKwlpZiB0ZXN0ICEgLXogIiRkaXJtb2RlIjsgdGhlbgorKwkgIGVjaG8gImNobW9kICRkaXJtb2RlICRwYXRoY29tcCIKKysJICBsYXN0ZXJyPSIiCisrCSAgY2htb2QgIiRkaXJtb2RlIiAiJHBhdGhjb21wIiB8fCBsYXN0ZXJyPSQ/CisgCistICAgICBwYXRoY29tcD0iJHBhdGhjb21wLyIKKy0gICBkb25lCisrCSAgaWYgdGVzdCAhIC16ICIkbGFzdGVyciI7IHRoZW4KKysJICAgIGVycnN0YXR1cz0kbGFzdGVycgorKwkgIGZpCisrCWZpCisrICAgICAgZmkKKysgICAgZmkKKysKKysgICAgcGF0aGNvbXA9IiRwYXRoY29tcC8iCisrICBkb25lCisgZG9uZQorIAorIGV4aXQgJGVycnN0YXR1cworKworKyMgTG9jYWwgVmFyaWFibGVzOgorKyMgbW9kZTogc2hlbGwtc2NyaXB0CisrIyBzaC1pbmRlbnRhdGlvbjogMgorKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisrIyB0aW1lLXN0YW1wLWVuZDogIiQiCisrIyBFbmQ6CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL2JvbGRxdW90LnNlZAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvcG8vYm9sZHF1b3Quc2VkCTIwMDQtMDktMTIgMTQ6NDA6MzQuNzIzNjkyMTUyIC0wNDAwCitAQCAtMCwwICsxLDEwIEBACisrcy8iXChbXiJdKlwpIi/igJxcMeKAnS9nCisrcy9gXChbXmAnXSpcKScv4oCYXDHigJkvZworK3MvICdcKFteYCddKlwpJyAvIOKAmFwx4oCZIC9nCisrcy8gJ1woW15gJ10qXCknJC8g4oCYXDHigJkvZworK3MvXidcKFteYCddKlwpJyAv4oCYXDHigJkgL2cKKytzL+KAnOKAnS8iIi9nCisrcy/igJwv4oCcG1sxbS9nCisrcy/igJ0vG1swbeKAnS9nCisrcy/igJgv4oCYG1sxbS9nCisrcy/igJkvG1swbeKAmS9nCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL2NhdC1pZC10YmwuYwkxOTk4LTEyLTI5IDA0OjI0OjI0LjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvcG8vY2F0LWlkLXRibC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCitAQCAtMSwyMzQgKzAsMCBAQAorLS8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IHBvMnRibC5zZWQgZnJvbSBscnpzei5wb3QuICAqLworLQorLSNpZiBIQVZFX0NPTkZJR19ICistIyBpbmNsdWRlIDxjb25maWcuaD4KKy0jZW5kaWYKKy0KKy0jaW5jbHVkZSAibGliZ2V0dGV4dC5oIgorLQorLWNvbnN0IHN0cnVjdCBfbXNnX2VudCBfbXNnX3RibFtdID0geworLSAgeyIiLCAxfSwKKy0gIHsiaW9fbW9kZSgsMikgaW4gcmJzYi5jIG5vdCBpbXBsZW1lbnRlZFxuIiwgMn0sCistICB7ImNhdWdodCBzaWduYWwgJWQ7IGV4aXRpbmciLCAzfSwKKy0gIHsiY29tbWFuZCB0cmllcyIsIDR9LAorLSAgeyJwYWNrZXRsZW5ndGgiLCA1fSwKKy0gIHsicGFja2V0bGVuZ3RoIG91dCBvZiByYW5nZSAyNC4uJWxkIiwgNn0sCistICB7ImZyYW1lbGVuZ3RoIiwgN30sCistICB7ImZyYW1lbGVuZ3RoIG91dCBvZiByYW5nZSAzMi4uJWxkIiwgOH0sCistICB7Im1pbl9icHMiLCA5fSwKKy0gIHsibWluX2JwcyBtdXN0IGJlID49IDAiLCAxMH0sCistICB7Im1pbl9icHNfdGltZSIsIDExfSwKKy0gIHsibWluX2Jwc190aW1lIG11c3QgYmUgPiAxIiwgMTJ9LAorLSAgeyJob3VyIHRvIGxhcmdlICgwLi4yMykiLCAxM30sCistICB7InVucGFyc2FibGUgc3RvcCB0aW1lXG4iLCAxNH0sCistICB7Im1pbnV0ZSB0byBsYXJnZSAoMC4uNTkpIiwgMTV9LAorLSAgeyJzdG9wIHRpbWUgdG8gc21hbGwiLCAxNn0sCistICB7InN0b3AtYXQiLCAxN30sCistICB7InRpbWVvdXQiLCAxOH0sCistICB7InRpbWVvdXQgb3V0IG9mIHJhbmdlIDEwLi4xMDAwIiwgMTl9LAorLSAgeyJzZWN1cml0eSB2aW9sYXRpb246IGNhbid0IGRvIHRoYXQgdW5kZXIgcmVzdHJpY3RlZCBzaGVsbFxuIiwgMjB9LAorLSAgeyJ3aW5kb3cgc2l6ZSIsIDIxfSwKKy0gIHsiY2Fubm90IHR1cm5vZmYgc3lzbG9nIiwgMjJ9LAorLSAgeyJzdGFydHVwIGRlbGF5IiwgMjN9LAorLSAgeyJvdXQgb2YgbWVtb3J5IiwgMjR9LAorLSAgeyJ0aGlzIHByb2dyYW0gd2FzIG5ldmVyIGludGVuZGVkIHRvIGJlIHVzZWQgc2V0dWlkXG4iLCAyNX0sCistICB7Im5lZWQgYXQgbGVhc3Qgb25lIGZpbGUgdG8gc2VuZCIsIDI2fSwKKy0gIHsiQ2FuJ3Qgc2VuZCBjb21tYW5kIGluIHJlc3RyaWN0ZWQgbW9kZVxuIiwgMjd9LAorLSAgeyJob3N0bmFtZSB0b28gbG9uZ1xuIiwgMjh9LAorLSAgeyJpbGxlZ2FsIHNlcnZlciBhZGRyZXNzXG4iLCAyOX0sCistICB7ImNhbiByZWFkIG9ubHkgb25lIGZpbGUgZnJvbSBzdGRpbiIsIDMwfSwKKy0gIHsiVHJhbnNmZXIgaW5jb21wbGV0ZVxuIiwgMzF9LAorLSAgeyJUcmFuc2ZlciBjb21wbGV0ZVxuIiwgMzJ9LAorLSAgeyJzZW5kX3BzZXVkbyAlczogY2Fubm90IG9wZW4gdG1wZmlsZSAlczogJXMiLCAzM30sCistICB7InNlbmRfcHNldWRvICVzOiBjYW5ub3QgbHN0YXQgdG1wZmlsZSAlczogJXMiLCAzNH0sCistICB7InNlbmRfcHNldWRvICVzOiBhdm9pZGluZyBzeW1saW5rIHRyYXAiLCAzNX0sCistICB7InNlbmRfcHNldWRvICVzOiBjYW5ub3Qgd3JpdGUgdG8gdG1wZmlsZSAlczogJXMiLCAzNn0sCistICB7InNlbmRfcHNldWRvICVzOiBmYWlsZWQiLCAzN30sCistICB7InNlbmRfcHNldWRvICVzOiBvayIsIDM4fSwKKy0gIHsidGNwIHByb3RvY29sIGluaXQgZmFpbGVkXG4iLCAzOX0sCistICB7IkFuc3dlcmluZyBUSU1FU1lOQyBhdCAlcyIsIDQwfSwKKy0gIHsidGltZXpvbmUiLCA0MX0sCistICB7InRpbWV6b25lIHVua25vd24iLCA0Mn0sCistICB7IkNhbid0IG9wZW4gYW55IHJlcXVlc3RlZCBmaWxlcy4iLCA0M30sCistICB7InNlY3VyaXR5IHZpb2xhdGlvbjogbm90IGFsbG93ZWQgdG8gdXBsb2FkIGZyb20gJXMiLCA0NH0sCistICB7ImNhbm5vdCBvcGVuICVzIiwgNDV9LAorLSAgeyJpcyBub3QgYSBmaWxlOiAlcyIsIDQ2fSwKKy0gIHsiJXMvJXM6IGVycm9yIG9jY3VyZWQiLCA0N30sCistICB7InNraXBwZWQ6ICVzIiwgNDh9LAorLSAgeyIlcy8lczogc2tpcHBlZCIsIDQ5fSwKKy0gIHsiQnl0ZXMgU2VudDolN2xkICAgQlBTOiUtOGxkICAgICAgICAgICAgICAgICAgICAgICAgXG4iLCA1MH0sCistICB7IlNlbmRpbmcgJXMsICVsZCBibG9ja3M6ICIsIDUxfSwKKy0gIHsiR2l2ZSB5b3VyIGxvY2FsIFhNT0RFTSByZWNlaXZlIGNvbW1hbmQgbm93LiIsIDUyfSwKKy0gIHsiU2VuZGluZzogJXNcbiIsIDUzfSwKKy0gIHsiVGltZW91dCBvbiBwYXRobmFtZSIsIDU0fSwKKy0gIHsiUmVjZWl2ZXIgQ2FuY2VsbGVkIiwgNTV9LAorLSAgeyJObyBBQ0sgb24gRU9UIiwgNTZ9LAorLSAgeyJYbW9kZW0gc2VjdG9ycy9rYnl0ZXMgc2VudDogJTNkLyUyZGsiLCA1N30sCistICB7Illtb2RlbSBzZWN0b3JzL2tieXRlcyBzZW50OiAlM2QvJTJkayIsIDU4fSwKKy0gIHsiQ2FuY2VsbGVkIiwgNTl9LAorLSAgeyJUaW1lb3V0IG9uIHNlY3RvciBBQ0siLCA2MH0sCistICB7Ik5BSyBvbiBzZWN0b3IiLCA2MX0sCistICB7IkdvdCBidXJzdCBmb3Igc2VjdG9yIEFDSyIsIDYyfSwKKy0gIHsiR290ICUwMnggZm9yIHNlY3RvciBBQ0siLCA2M30sCistICB7IlJldHJ5IENvdW50IEV4Y2VlZGVkIiwgNjR9LAorLSAgeyJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iLCA2NX0sCistICB7IiVzIHZlcnNpb24gJXNcbiIsIDY2fSwKKy0gIHsiVXNhZ2U6ICVzIFtvcHRpb25zXSBmaWxlIC4uLlxuIiwgNjd9LAorLSAgeyIgICBvcjogJXMgW29wdGlvbnNdIC17Y3xpfSBDT01NQU5EXG4iLCA2OH0sCistICB7IlNlbmQgZmlsZShzKSB3aXRoIFpNT0RFTS9ZTU9ERU0vWE1PREVNIHByb3RvY29sXG4iLCA2OX0sCistICB7IlwKKy0gICAgKFgpID0gb3B0aW9uIGFwcGxpZXMgdG8gWE1PREVNIG9ubHlcblwKKy0gICAgKFkpID0gb3B0aW9uIGFwcGxpZXMgdG8gWU1PREVNIG9ubHlcblwKKy0gICAgKFopID0gb3B0aW9uIGFwcGxpZXMgdG8gWk1PREVNIG9ubHlcbiIsIDcwfSwKKy0gIHsiXAorLSAgLSssIC0tYXBwZW5kICAgICAgICAgICAgICAgIGFwcGVuZCB0byBleGlzdGluZyBkZXN0aW5hdGlvbiBmaWxlIChaKVxuXAorLSAgLTIsIC0tdHdvc3RvcCAgICAgICAgICAgICAgIHVzZSAyIHN0b3AgYml0c1xuXAorLSAgLTQsIC0tdHJ5LTRrICAgICAgICAgICAgICAgIGdvIHVwIHRvIDRLIGJsb2Nrc2l6ZVxuXAorLSAgICAgIC0tc3RhcnQtNGsgICAgICAgICAgICAgIHN0YXJ0IHdpdGggNEsgYmxvY2tzaXplIChkb2Vzbid0IHRyeSA4KVxuXAorLSAgLTgsIC0tdHJ5LThrICAgICAgICAgICAgICAgIGdvIHVwIHRvIDhLIGJsb2Nrc2l6ZVxuXAorLSAgICAgIC0tc3RhcnQtOGsgICAgICAgICAgICAgIHN0YXJ0IHdpdGggOEsgYmxvY2tzaXplXG5cCistICAtYSwgLS1hc2NpaSAgICAgICAgICAgICAgICAgQVNDSUkgdHJhbnNmZXIgKGNoYW5nZSBDUi9MRiB0byBMRilcblwKKy0gIC1iLCAtLWJpbmFyeSAgICAgICAgICAgICAgICBiaW5hcnkgdHJhbnNmZXJcblwKKy0gIC1CLCAtLWJ1ZnNpemUgTiAgICAgICAgICAgICBidWZmZXIgTiBieXRlcyAoTj09YXV0bzogYnVmZmVyIHdob2xlIGZpbGUpXG5cCistICAtYywgLS1jb21tYW5kIENPTU1BTkQgICAgICAgZXhlY3V0ZSByZW1vdGUgY29tbWFuZCBDT01NQU5EIChaKVxuXAorLSAgLUMsIC0tY29tbWFuZC10cmllcyBOICAgICAgIHRyeSBOIHRpbWVzIHRvIGV4ZWN1dGUgYSBjb21tYW5kIChaKVxuXAorLSAgLWQsIC0tZG90LXRvLXNsYXNoICAgICAgICAgIGNoYW5nZSAnLicgdG8gJy8nIGluIHBhdGhuYW1lcyAoWS9aKVxuXAorLSAgICAgIC0tZGVsYXktc3RhcnR1cCBOICAgICAgIHNsZWVwIE4gc2Vjb25kcyBiZWZvcmUgZG9pbmcgYW55dGhpbmdcblwKKy0gIC1lLCAtLWVzY2FwZSAgICAgICAgICAgICAgICBlc2NhcGUgYWxsIGNvbnRyb2wgY2hhcmFjdGVycyAoWilcblwKKy0gIC1FLCAtLXJlbmFtZSAgICAgICAgICAgICAgICBmb3JjZSByZWNlaXZlciB0byByZW5hbWUgZmlsZXMgaXQgYWxyZWFkeSBoYXNcblwKKy0gIC1mLCAtLWZ1bGwtcGF0aCAgICAgICAgICAgICBzZW5kIGZ1bGwgcGF0aG5hbWUgKFkvWilcblwKKy0gIC1pLCAtLWltbWVkaWF0ZS1jb21tYW5kIENNRCBzZW5kIHJlbW90ZSBDTUQsIHJldHVybiBpbW1lZGlhdGVseSAoWilcblwKKy0gIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgICBwcmludCB0aGlzIHVzYWdlIG1lc3NhZ2VcblwKKy0gIC1rLCAtLTFrICAgICAgICAgICAgICAgICAgICBzZW5kIDEwMjQgYnl0ZSBwYWNrZXRzIChYKVxuXAorLSAgLUwsIC0tcGFja2V0bGVuIE4gICAgICAgICAgIGxpbWl0IHN1YnBhY2tldCBsZW5ndGggdG8gTiBieXRlcyAoWilcblwKKy0gIC1sLCAtLWZyYW1lbGVuIE4gICAgICAgICAgICBsaW1pdCBmcmFtZSBsZW5ndGggdG8gTiBieXRlcyAobD49TCkgKFopXG5cCistICAtbSwgLS1taW4tYnBzIE4gICAgICAgICAgICAgc3RvcCB0cmFuc21pc3Npb24gaWYgQlBTIGJlbG93IE5cblwKKy0gIC1NLCAtLW1pbi1icHMtdGltZSBOICAgICAgICAgIGZvciBhdCBsZWFzdCBOIHNlY29uZHMgKGRlZmF1bHQ6IDEyMClcbiIsIDcxfSwKKy0gIHsiXAorLSAgLW4sIC0tbmV3ZXIgICAgICAgICAgICAgICAgIHNlbmQgZmlsZSBpZiBzb3VyY2UgbmV3ZXIgKFopXG5cCistICAtTiwgLS1uZXdlci1vci1sb25nZXIgICAgICAgc2VuZCBmaWxlIGlmIHNvdXJjZSBuZXdlciBvciBsb25nZXIgKFopXG5cCistICAtbywgLS0xNi1iaXQtY3JjICAgICAgICAgICAgdXNlIDE2IGJpdCBDUkMgaW5zdGVhZCBvZiAzMiBiaXQgQ1JDIChaKVxuXAorLSAgLU8sIC0tZGlzYWJsZS10aW1lb3V0cyAgICAgIGRpc2FibGUgdGltZW91dCBjb2RlLCB3YWl0IGZvcmV2ZXJcblwKKy0gIC1wLCAtLXByb3RlY3QgICAgICAgICAgICAgICBwcm90ZWN0IGV4aXN0aW5nIGRlc3RpbmF0aW9uIGZpbGUgKFopXG5cCistICAtciwgLS1yZXN1bWUgICAgICAgICAgICAgICAgcmVzdW1lIGludGVycnVwdGVkIGZpbGUgdHJhbnNmZXIgKFopXG5cCistICAtUiwgLS1yZXN0cmljdGVkICAgICAgICAgICAgcmVzdHJpY3RlZCwgbW9yZSBzZWN1cmUgbW9kZVxuXAorLSAgLXEsIC0tcXVpZXQgICAgICAgICAgICAgICAgIHF1aWV0IChubyBwcm9ncmVzcyByZXBvcnRzKVxuXAorLSAgLXMsIC0tc3RvcC1hdCB7SEg6TU18K059ICAgIHN0b3AgdHJhbnNtaXNzaW9uIGF0IEhIOk1NIG9yIGluIE4gc2Vjb25kc1xuXAorLSAgICAgIC0tdGNwICAgICAgICAgICAgICAgICAgIGJ1aWxkIGEgVENQIGNvbm5lY3Rpb24gdG8gdHJhbnNtaXQgZmlsZXNcblwKKy0gICAgICAtLXRjcC1zZXJ2ZXIgICAgICAgICAgICBvcGVuIHNvY2tldCwgd2FpdCBmb3IgY29ubmVjdGlvblxuXAorLSAgLXUsIC0tdW5saW5rICAgICAgICAgICAgICAgIHVubGluayBmaWxlIGFmdGVyIHRyYW5zbWlzc2lvblxuXAorLSAgLVUsIC0tdW5yZXN0cmljdCAgICAgICAgICAgIHR1cm4gb2ZmIHJlc3RyaWN0ZWQgbW9kZSAoaWYgYWxsb3dlZCB0bylcblwKKy0gIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgICBiZSB2ZXJib3NlLCBwcm92aWRlIGRlYnVnZ2luZyBpbmZvcm1hdGlvblxuXAorLSAgLXcsIC0td2luZG93c2l6ZSBOICAgICAgICAgIFdpbmRvdyBpcyBOIGJ5dGVzIChaKVxuXAorLSAgLVgsIC0teG1vZGVtICAgICAgICAgICAgICAgIHVzZSBYTU9ERU0gcHJvdG9jb2xcblwKKy0gIC15LCAtLW92ZXJ3cml0ZSAgICAgICAgICAgICBvdmVyd3JpdGUgZXhpc3RpbmcgZmlsZXNcblwKKy0gIC1ZLCAtLW92ZXJ3cml0ZS1vci1za2lwICAgICBvdmVyd3JpdGUgZXhpc3RpbmcgZmlsZXMsIGVsc2Ugc2tpcFxuXAorLSAgICAgIC0teW1vZGVtICAgICAgICAgICAgICAgIHVzZSBZTU9ERU0gcHJvdG9jb2xcblwKKy0gIC1aLCAtLXptb2RlbSAgICAgICAgICAgICAgICB1c2UgWk1PREVNIHByb3RvY29sXG5cCistXG5cCistc2hvcnQgb3B0aW9ucyB1c2UgdGhlIHNhbWUgYXJndW1lbnRzIGFzIHRoZSBsb25nIG9uZXNcbiIsIDcyfSwKKy0gIHsiZ290IFpSUUlOSVQiLCA3M30sCistICB7ImdvdCBaQ0FOIiwgNzR9LAorLSAgeyJibGtsZW4gbm93ICVkXG4iLCA3NX0sCistICB7InpzZW5kZmRhdGE6IGJwcyByYXRlICVsZCBiZWxvdyBtaW4gJWxkIiwgNzZ9LAorLSAgeyJ6c2VuZGZkYXRhOiByZWFjaGVkIHN0b3AgdGltZSIsIDc3fSwKKy0gIHsiQnl0ZXMgU2VudDolN2xkLyU3bGQgICBCUFM6JS04bGQgRVRBICUwMmQ6JTAyZCAgIiwgNzh9LAorLSAgeyJjYWxjX2Jsa2xlbjogcmVkdWNlZCB0byAlZCBkdWUgdG8gZXJyb3JcbiIsIDc5fSwKKy0gIHsiY2FsY19ibGtsZW46IHJldHVybmVkIG9sZCB2YWx1ZSAlZCBkdWUgdG8gbG93IGJwZSBkaWZmXG4iLCA4MH0sCistICB7ImNhbGNfYmxrbGVuOiBvbGQgJWxkLCBuZXcgJWxkLCBkICVsZFxuIiwgODF9LAorLSAgeyJjYWxjX2Jsa2xlbjogY2FsYyB0b3RhbF9ieXRlcz0lbGQsIGJwZT0lbGQsIGVjPSVsZFxuIiwgODJ9LAorLSAgeyJjYWxjX2Jsa2xlbjogYmxrbGVuICVkLCBvayAlbGQsIGZhaWxlZCAlbGQgLT4gJWx1XG4iLCA4M30sCistICB7ImNhbGNfYmxrbGVuOiByZXR1cm5lZCAlZCBhcyBiZXN0XG4iLCA4NH0sCistICB7IlwKKy1cblwKKy1jb3VudGVtOiBUb3RhbCAlZCAlbGRcbiIsIDg1fSwKKy0gIHsiQmFkIGVzY2FwZSBzZXF1ZW5jZSAleCIsIDg2fSwKKy0gIHsiU2VuZGVyIENhbmNlbGVkIiwgODd9LAorLSAgeyJUSU1FT1VUIiwgODh9LAorLSAgeyJCYWQgZGF0YSBzdWJwYWNrZXQiLCA4OX0sCistICB7IkRhdGEgc3VicGFja2V0IHRvbyBsb25nIiwgOTB9LAorLSAgeyJHYXJiYWdlIGNvdW50IGV4Y2VlZGVkIiwgOTF9LAorLSAgeyJHb3QgJXMiLCA5Mn0sCistICB7IlJldHJ5ICVkOiAiLCA5M30sCistICB7ImRvbid0IGhhdmUgc2V0dGltZW9mZGF5LCB3aWxsIG5vdCBzZXQgdGltZVxuIiwgOTR9LAorLSAgeyJub3QgcnVubmluZyBhcyByb290ICh0aGlzIGlzIGdvb2QhKSwgY2FuIG5vdCBzZXQgdGltZVxuIiwgOTV9LAorLSAgeyJieXRlc19wZXJfZXJyb3IiLCA5Nn0sCistICB7ImJ5dGVzLXBlci1lcnJvciBzaG91bGQgYmUgPjEwMCIsIDk3fSwKKy0gIHsiT19TWU5DIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGtlcm5lbCIsIDk4fSwKKy0gIHsiZ2FyYmFnZSBvbiBjb21tYW5kbGluZSIsIDk5fSwKKy0gIHsiVXNhZ2U6ICVzIFtvcHRpb25zXSBbZmlsZW5hbWUuaWYueG1vZGVtXVxuIiwgMTAwfSwKKy0gIHsiUmVjZWl2ZSBmaWxlcyB3aXRoIFpNT0RFTS9ZTU9ERU0vWE1PREVNIHByb3RvY29sXG4iLCAxMDF9LAorLSAgeyJcCistICAtKywgLS1hcHBlbmQgICAgICAgICAgICAgICAgYXBwZW5kIHRvIGV4aXN0aW5nIGZpbGVzXG5cCistICAtYSwgLS1hc2NpaSAgICAgICAgICAgICAgICAgQVNDSUkgdHJhbnNmZXIgKGNoYW5nZSBDUi9MRiB0byBMRilcblwKKy0gIC1iLCAtLWJpbmFyeSAgICAgICAgICAgICAgICBiaW5hcnkgdHJhbnNmZXJcblwKKy0gIC1CLCAtLWJ1ZnNpemUgTiAgICAgICAgICAgICBidWZmZXIgTiBieXRlcyAoTj09YXV0bzogYnVmZmVyIHdob2xlIGZpbGUpXG5cCistICAtYywgLS13aXRoLWNyYyAgICAgICAgICAgICAgVXNlIDE2IGJpdCBDUkMgKFgpXG5cCistICAtQywgLS1hbGxvdy1yZW1vdGUtY29tbWFuZHMgYWxsb3cgZXhlY3V0aW9uIG9mIHJlbW90ZSBjb21tYW5kcyAoWilcblwKKy0gIC1ELCAtLW51bGwgICAgICAgICAgICAgICAgICB3cml0ZSBhbGwgcmVjZWl2ZWQgZGF0YSB0byAvZGV2L251bGxcblwKKy0gICAgICAtLWRlbGF5LXN0YXJ0dXAgTiAgICAgICBzbGVlcCBOIHNlY29uZHMgYmVmb3JlIGRvaW5nIGFueXRoaW5nXG5cCistICAtZSwgLS1lc2NhcGUgICAgICAgICAgICAgICAgRXNjYXBlIGNvbnRyb2wgY2hhcmFjdGVycyAoWilcblwKKy0gIC1FLCAtLXJlbmFtZSAgICAgICAgICAgICAgICByZW5hbWUgYW55IGZpbGVzIGFscmVhZHkgZXhpc3RpbmdcblwKKy0gICAgICAtLWVycm9ycyBOICAgICAgICAgICAgICBnZW5lcmF0ZSBDUkMgZXJyb3IgZXZlcnkgTiBieXRlcyAoZGVidWdnaW5nKVxuXAorLSAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgIEhlbHAsIHByaW50IHRoaXMgdXNhZ2UgbWVzc2FnZVxuXAorLSAgLW0sIC0tbWluLWJwcyBOICAgICAgICAgICAgIHN0b3AgdHJhbnNtaXNzaW9uIGlmIEJQUyBiZWxvdyBOXG5cCistICAtTSwgLS1taW4tYnBzLXRpbWUgTiAgICAgICAgICBmb3IgYXQgbGVhc3QgTiBzZWNvbmRzIChkZWZhdWx0OiAxMjApXG5cCistICAtTywgLS1kaXNhYmxlLXRpbWVvdXRzICAgICAgZGlzYWJsZSB0aW1lb3V0IGNvZGUsIHdhaXQgZm9yZXZlciBmb3IgZGF0YVxuXAorLSAgICAgIC0tby1zeW5jICAgICAgICAgICAgICAgIG9wZW4gb3V0cHV0IGZpbGUocykgaW4gc3luY2hyb25vdXMgd3JpdGUgbW9kZVxuXAorLSAgLXAsIC0tcHJvdGVjdCAgICAgICAgICAgICAgIHByb3RlY3QgZXhpc3RpbmcgZmlsZXNcblwKKy0gIC1xLCAtLXF1aWV0ICAgICAgICAgICAgICAgICBxdWlldCwgbm8gcHJvZ3Jlc3MgcmVwb3J0c1xuXAorLSAgLXIsIC0tcmVzdW1lICAgICAgICAgICAgICAgIHRyeSB0byByZXN1bWUgaW50ZXJydXB0ZWQgZmlsZSB0cmFuc2ZlciAoWilcblwKKy0gIC1SLCAtLXJlc3RyaWN0ZWQgICAgICAgICAgICByZXN0cmljdGVkLCBtb3JlIHNlY3VyZSBtb2RlXG5cCistICAtcywgLS1zdG9wLWF0IHtISDpNTXwrTn0gICAgc3RvcCB0cmFuc21pc3Npb24gYXQgSEg6TU0gb3IgaW4gTiBzZWNvbmRzXG5cCistICAtUywgLS10aW1lc3luYyAgICAgICAgICAgICAgcmVxdWVzdCByZW1vdGUgdGltZSAodHdpY2U6IHNldCBsb2NhbCB0aW1lKVxuXAorLSAgICAgIC0tc3lzbG9nWz1vZmZdICAgICAgICAgIHR1cm4gc3lzbG9nIG9uIG9yIG9mZiwgaWYgcG9zc2libGVcblwKKy0gIC10LCAtLXRpbWVvdXQgTiAgICAgICAgICAgICBzZXQgdGltZW91dCB0byBOIHRlbnRocyBvZiBhIHNlY29uZFxuXAorLSAgLXUsIC0ta2VlcC11cHBlcmNhc2UgICAgICAgIGtlZXAgdXBwZXIgY2FzZSBmaWxlbmFtZXNcblwKKy0gIC1VLCAtLXVucmVzdHJpY3QgICAgICAgICAgICBkaXNhYmxlIHJlc3RyaWN0ZWQgbW9kZSAoaWYgYWxsb3dlZCB0bylcblwKKy0gIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgICBiZSB2ZXJib3NlLCBwcm92aWRlIGRlYnVnZ2luZyBpbmZvcm1hdGlvblxuXAorLSAgLXcsIC0td2luZG93c2l6ZSBOICAgICAgICAgIFdpbmRvdyBpcyBOIGJ5dGVzIChaKVxuXAorLSAgLVggIC0teG1vZGVtICAgICAgICAgICAgICAgIHVzZSBYTU9ERU0gcHJvdG9jb2xcblwKKy0gIC15LCAtLW92ZXJ3cml0ZSAgICAgICAgICAgICBZZXMsIGNsb2JiZXIgZXhpc3RpbmcgZmlsZSBpZiBhbnlcblwKKy0gICAgICAtLXltb2RlbSAgICAgICAgICAgICAgICB1c2UgWU1PREVNIHByb3RvY29sXG5cCistICAtWiwgLS16bW9kZW0gICAgICAgICAgICAgICAgdXNlIFpNT0RFTSBwcm90b2NvbFxuXAorLVxuXAorLXNob3J0IG9wdGlvbnMgdXNlIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyB0aGUgbG9uZyBvbmVzXG4iLCAxMDJ9LAorLSAgeyIlcyB3YWl0aW5nIHRvIHJlY2VpdmUuIiwgMTAzfSwKKy0gIHsiXHJCeXRlcyByZWNlaXZlZDogJTdsZC8lN2xkICAgQlBTOiUtNmxkICAgICAgICAgICAgICAgIFxyXG4iLCAxMDR9LAorLSAgeyIlczogcmVhZHkgdG8gcmVjZWl2ZSAlcyIsIDEwNX0sCistICB7IlxyQnl0ZXMgcmVjZWl2ZWQ6ICU3bGQgICBCUFM6JS02bGQgICAgICAgICAgICAgICAgXHJcbiIsIDEwNn0sCistICB7IlwKKy1cclxuXAorLSVzOiAlcyByZW1vdmVkLlxyXG4iLCAxMDd9LAorLSAgeyJQYXRobmFtZSBmZXRjaCByZXR1cm5lZCBFT1QiLCAxMDh9LAorLSAgeyJSZWNlaXZlZCBkdXAgU2VjdG9yIiwgMTA5fSwKKy0gIHsiU3luYyBFcnJvciIsIDExMH0sCistICB7IkNSQyIsIDExMX0sCistICB7IkNoZWNrc3VtIiwgMTEyfSwKKy0gIHsiU2VjdG9yIG51bWJlciBnYXJibGVkIiwgMTEzfSwKKy0gIHsiU2VuZGVyIENhbmNlbGxlZCIsIDExNH0sCistICB7IkdvdCAwJW8gc2VjdG9yIGhlYWRlciIsIDExNX0sCistICB7ImZpbGUgbmFtZSBlbmRzIHdpdGggYSAvLCBza2lwcGVkOiAlc1xuIiwgMTE2fSwKKy0gIHsiem1hbmFnPSVkLCBMem1hbmFnPSVkXG4iLCAxMTd9LAorLSAgeyJ6Y29udj0lZFxuIiwgMTE4fSwKKy0gIHsiZmlsZSBleGlzdHMsIHNraXBwZWQ6ICVzXG4iLCAxMTl9LAorLSAgeyJUSU1FU1lOQzogaGVyZSAlbGQsIHJlbW90ZSAlbGQsIGRpZmYgJWxkIHNlY29uZHNcbiIsIDEyMH0sCistICB7IlRJTUVTWU5DOiBjYW5ub3Qgc2V0IHRpbWU6ICVzXG4iLCAxMjF9LAorLSAgeyJjYW5ub3QgdG1wZmlsZSgpIGZvciB0Y3AgcHJvdG9jb2wgc3luY2hyb25pemF0aW9uIiwgMTIyfSwKKy0gIHsiVG9waXBlIiwgMTIzfSwKKy0gIHsiUmVjZWl2aW5nOiAlc1xuIiwgMTI0fSwKKy0gIHsiQmxvY2tzIHJlY2VpdmVkOiAlZCIsIDEyNX0sCistICB7IiVzOiAlcyBleGlzdHNcbiIsIDEyNn0sCistICB7IiVzOlx0U2VjdXJpdHkgVmlvbGF0aW9uIiwgMTI3fSwKKy0gIHsicmVtb3RlIGNvbW1hbmQgZXhlY3V0aW9uIHJlcXVlc3RlZCIsIDEyOH0sCistICB7Im5vdCBleGVjdXRlZCIsIDEyOX0sCistICB7ImdvdCBaUklOSVQiLCAxMzB9LAorLSAgeyJTa2lwcGVkIiwgMTMxfSwKKy0gIHsicnpmaWxlOiBicHMgcmF0ZSAlbGQgYmVsb3cgbWluICVsZCIsIDEzMn0sCistICB7InJ6ZmlsZTogcmVhY2hlZCBzdG9wIHRpbWUiLCAxMzN9LAorLSAgeyJcckJ5dGVzIHJlY2VpdmVkOiAlN2xkLyU3bGQgICBCUFM6JS02bGQgRVRBICUwMmQ6JTAyZCAgIiwgMTM0fSwKKy0gIHsiZmdldHMgZm9yIHRjcCBwcm90b2NvbCBzeW5jaHJvbml6YXRpb24gZmFpbGVkOiAiLCAxMzV9LAorLSAgeyJmaWxlIGNsb3NlIGVycm9yIiwgMTM2fSwKKy19OworLQorLWludCBfbXNnX3RibF9sZW5ndGggPSAxMzY7CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL0NoYW5nZUxvZwkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvcG8vQ2hhbmdlTG9nCTIwMDQtMDktMTIgMTQ6NDA6MzQuNzkzNjgxNTEyIC0wNDAwCitAQCAtMSwzICsxLDE1IEBACisrMjAwNC0wOS0xMiAgZ2V0dGV4dGl6ZSAgPGJ1Zy1nbnUtZ2V0dGV4dEBnbnUub3JnPgorKworKwkqIGJvbGRxdW90LnNlZDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogZW5AYm9sZHF1b3QuaGVhZGVyOiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBlbkBxdW90LmhlYWRlcjogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogaW5zZXJ0LWhlYWRlci5zaW46IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHF1b3Quc2VkOiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiByZW1vdmUtcG90Y2RhdGUuc2luOiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBSdWxlcy1xdW90OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBjYXQtaWQtdGJsLmM6IFJlbW92ZSBmaWxlLgorKwkqIHN0YW1wLWNhdC1pZDogUmVtb3ZlIGZpbGUuCisrCisgLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgcG8ydGJsLnNlZCBmcm9tIGxyenN6LnBvdC4gICovCisgCisgI2lmIEhBVkVfQ09ORklHX0gKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vZW5AYm9sZHF1b3QuaGVhZGVyCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9lbkBib2xkcXVvdC5oZWFkZXIJMjAwNC0wOS0xMiAxNDo0MDozNC43MzE2OTA5MzYgLTA0MDAKK0BAIC0wLDAgKzEsMjUgQEAKKysjIEFsbCB0aGlzIGNhdGFsb2cgInRyYW5zbGF0ZXMiIGFyZSBxdW90YXRpb24gY2hhcmFjdGVycy4KKysjIFRoZSBtc2dpZHMgbXVzdCBiZSBBU0NJSSBhbmQgdGhlcmVmb3JlIGNhbm5vdCBjb250YWluIHJlYWwgcXVvdGF0aW9uCisrIyBjaGFyYWN0ZXJzLCBvbmx5IHN1YnN0aXR1dGVzIGxpa2UgZ3JhdmUgYWNjZW50ICgweDYwKSwgYXBvc3Ryb3BoZSAoMHgyNykKKysjIGFuZCBkb3VibGUgcXVvdGUgKDB4MjIpLiBUaGVzZSBzdWJzdGl0dXRlcyBsb29rIHN0cmFuZ2U7IHNlZQorKyMgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3Vjcy9xdW90ZXMuaHRtbAorKyMKKysjIFRoaXMgY2F0YWxvZyB0cmFuc2xhdGVzIGdyYXZlIGFjY2VudCAoMHg2MCkgYW5kIGFwb3N0cm9waGUgKDB4MjcpIHRvCisrIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE4KSBhbmQgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTkpLgorKyMgSXQgYWxzbyB0cmFuc2xhdGVzIHBhaXJzIG9mIGFwb3N0cm9waGUgKDB4MjcpIHRvCisrIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE4KSBhbmQgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTkpCisrIyBhbmQgcGFpcnMgb2YgcXVvdGF0aW9uIG1hcmsgKDB4MjIpIHRvCisrIyBsZWZ0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFDKSBhbmQgcmlnaHQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIChVKzIwMUQpLgorKyMKKysjIFdoZW4gb3V0cHV0IHRvIGFuIFVURi04IHRlcm1pbmFsLCB0aGUgcXVvdGF0aW9uIGNoYXJhY3RlcnMgYXBwZWFyIHBlcmZlY3RseS4KKysjIFdoZW4gb3V0cHV0IHRvIGFuIElTTy04ODU5LTEgdGVybWluYWwsIHRoZSBzaW5nbGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorKyMgdHJhbnNsaXRlcmF0ZWQgdG8gYXBvc3Ryb3BoZXMgKGJ5IGljb252IGluIGdsaWJjIDIuMiBvciBuZXdlcikgb3IgdG8KKysjIGdyYXZlL2FjdXRlIGFjY2VudCAoYnkgbGliaWNvbnYpLCBhbmQgdGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgYXJlCisrIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgorKyMgV2hlbiBvdXRwdXQgdG8gYW4gQVNDSUkgdGVybWluYWwsIHRoZSBzaW5nbGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorKyMgdHJhbnNsaXRlcmF0ZWQgdG8gYXBvc3Ryb3BoZXMsIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKysjIHRyYW5zbGl0ZXJhdGVkIHRvIDB4MjIuCisrIworKyMgVGhpcyBjYXRhbG9nIGZ1cnRoZXJtb3JlIGRpc3BsYXlzIHRoZSB0ZXh0IGJldHdlZW4gdGhlIHF1b3RhdGlvbiBtYXJrcyBpbgorKyMgYm9sZCBmYWNlLCBhc3N1bWluZyB0aGUgVlQxMDAvWFRlcm0gZXNjYXBlIHNlcXVlbmNlcy4KKysjCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL2VuQHF1b3QuaGVhZGVyCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9lbkBxdW90LmhlYWRlcgkyMDA0LTA5LTEyIDE0OjQwOjM0LjczNzY5MDAyNCAtMDQwMAorQEAgLTAsMCArMSwyMiBAQAorKyMgQWxsIHRoaXMgY2F0YWxvZyAidHJhbnNsYXRlcyIgYXJlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzLgorKyMgVGhlIG1zZ2lkcyBtdXN0IGJlIEFTQ0lJIGFuZCB0aGVyZWZvcmUgY2Fubm90IGNvbnRhaW4gcmVhbCBxdW90YXRpb24KKysjIGNoYXJhY3RlcnMsIG9ubHkgc3Vic3RpdHV0ZXMgbGlrZSBncmF2ZSBhY2NlbnQgKDB4NjApLCBhcG9zdHJvcGhlICgweDI3KQorKyMgYW5kIGRvdWJsZSBxdW90ZSAoMHgyMikuIFRoZXNlIHN1YnN0aXR1dGVzIGxvb2sgc3RyYW5nZTsgc2VlCisrIyBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdWNzL3F1b3Rlcy5odG1sCisrIworKyMgVGhpcyBjYXRhbG9nIHRyYW5zbGF0ZXMgZ3JhdmUgYWNjZW50ICgweDYwKSBhbmQgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKysjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkuCisrIyBJdCBhbHNvIHRyYW5zbGF0ZXMgcGFpcnMgb2YgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKysjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkKKysjIGFuZCBwYWlycyBvZiBxdW90YXRpb24gbWFyayAoMHgyMikgdG8KKysjIGxlZnQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIChVKzIwMUMpIGFuZCByaWdodCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxRCkuCisrIworKyMgV2hlbiBvdXRwdXQgdG8gYW4gVVRGLTggdGVybWluYWwsIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBhcHBlYXIgcGVyZmVjdGx5LgorKyMgV2hlbiBvdXRwdXQgdG8gYW4gSVNPLTg4NTktMSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCisrIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcyAoYnkgaWNvbnYgaW4gZ2xpYmMgMi4yIG9yIG5ld2VyKSBvciB0bworKyMgZ3JhdmUvYWN1dGUgYWNjZW50IChieSBsaWJpY29udiksIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKysjIHRyYW5zbGl0ZXJhdGVkIHRvIDB4MjIuCisrIyBXaGVuIG91dHB1dCB0byBhbiBBU0NJSSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCisrIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcywgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKysjCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL2luc2VydC1oZWFkZXIuc2luCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9pbnNlcnQtaGVhZGVyLnNpbgkyMDA0LTA5LTEyIDE0OjQwOjM0Ljc0MzY4OTExMiAtMDQwMAorQEAgLTAsMCArMSwyMyBAQAorKyMgU2VkIHNjcmlwdCB0aGF0IGluc2VydHMgdGhlIGZpbGUgY2FsbGVkIEhFQURFUiBiZWZvcmUgdGhlIGhlYWRlciBlbnRyeS4KKysjCisrIyBBdCBlYWNoIG9jY3VycmVuY2Ugb2YgYSBsaW5lIHN0YXJ0aW5nIHdpdGggIm1zZ2lkICIsIHdlIGV4ZWN1dGUgdGhlIGZvbGxvd2luZworKyMgY29tbWFuZHMuIEF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlLCBpbnNlcnQgdGhlIGZpbGUuIEF0IHRoZSBmb2xsb3dpbmcKKysjIG9jY3VycmVuY2VzLCBkbyBub3RoaW5nLiBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHRoZSBmb2xsb3dpbmcKKysjIG9jY3VycmVuY2VzIGlzIGFjaGlldmVkIGJ5IGxvb2tpbmcgYXQgdGhlIGhvbGQgc3BhY2UuCisrL15tc2dpZCAveworK3gKKysjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCisrcy9tL20vCisrdGEKKysjIFllcyBpdCB3YXMgZW1wdHkuIEZpcnN0IG9jY3VycmVuY2UuIFJlYWQgdGhlIGZpbGUuCisrciBIRUFERVIKKysjIE91dHB1dCB0aGUgZmlsZSdzIGNvbnRlbnRzIGJ5IHJlYWRpbmcgdGhlIG5leHQgbGluZS4gQnV0IGRvbid0IGxvc2UgdGhlCisrIyBjdXJyZW50IGxpbmUgd2hpbGUgZG9pbmcgdGhpcy4KKytnCisrTgorK2JiCisrOmEKKysjIFRoZSBob2xkIHNwYWNlIHdhcyBub25lbXB0eS4gRm9sbG93aW5nIG9jY3VycmVuY2VzLiBEbyBub3RoaW5nLgorK3gKKys6YgorK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vTWFrZXZhcnMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL01ha2V2YXJzCTIwMDQtMDktMTIgMTQ6NDA6MzQuNzQ4Njg4MzUyIC0wNDAwCitAQCAtMCwwICsxLDQxIEBACisrIyBNYWtlZmlsZSB2YXJpYWJsZXMgZm9yIFBPIGRpcmVjdG9yeSBpbiBhbnkgcGFja2FnZSB1c2luZyBHTlUgZ2V0dGV4dC4KKysKKysjIFVzdWFsbHkgdGhlIG1lc3NhZ2UgZG9tYWluIGlzIHRoZSBzYW1lIGFzIHRoZSBwYWNrYWdlIG5hbWUuCisrRE9NQUlOID0gJChQQUNLQUdFKQorKworKyMgVGhlc2UgdHdvIHZhcmlhYmxlcyBkZXBlbmQgb24gdGhlIGxvY2F0aW9uIG9mIHRoaXMgZGlyZWN0b3J5LgorK3N1YmRpciA9IHBvCisrdG9wX2J1aWxkZGlyID0gLi4KKysKKysjIFRoZXNlIG9wdGlvbnMgZ2V0IHBhc3NlZCB0byB4Z2V0dGV4dC4KKytYR0VUVEVYVF9PUFRJT05TID0gLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fCisrCisrIyBUaGlzIGlzIHRoZSBjb3B5cmlnaHQgaG9sZGVyIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIHRoZSBoZWFkZXIgb2YgdGhlCisrIyAkKERPTUFJTikucG90IGZpbGUuICBTZXQgdGhpcyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgc3Vycm91bmRpbmcKKysjIHBhY2thZ2UuICAoTm90ZSB0aGF0IHRoZSBtc2dzdHIgc3RyaW5ncywgZXh0cmFjdGVkIGZyb20gdGhlIHBhY2thZ2UncworKyMgc291cmNlcywgYmVsb25nIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBwYWNrYWdlLikgIFRyYW5zbGF0b3JzIGFyZQorKyMgZXhwZWN0ZWQgdG8gdHJhbnNmZXIgdGhlIGNvcHlyaWdodCBmb3IgdGhlaXIgdHJhbnNsYXRpb25zIHRvIHRoaXMgcGVyc29uCisrIyBvciBlbnRpdHksIG9yIHRvIGRpc2NsYWltIHRoZWlyIGNvcHlyaWdodC4gIFRoZSBlbXB0eSBzdHJpbmcgc3RhbmRzIGZvcgorKyMgdGhlIHB1YmxpYyBkb21haW47IGluIHRoaXMgY2FzZSB0aGUgdHJhbnNsYXRvcnMgYXJlIGV4cGVjdGVkIHRvIGRpc2NsYWltCisrIyB0aGVpciBjb3B5cmlnaHQuCisrQ09QWVJJR0hUX0hPTERFUiA9IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBpcyB0aGUgZW1haWwgYWRkcmVzcyBvciBVUkwgdG8gd2hpY2ggdGhlIHRyYW5zbGF0b3JzIHNoYWxsIHJlcG9ydAorKyMgYnVncyBpbiB0aGUgdW50cmFuc2xhdGVkIHN0cmluZ3M6CisrIyAtIFN0cmluZ3Mgd2hpY2ggYXJlIG5vdCBlbnRpcmUgc2VudGVuY2VzLCBzZWUgdGhlIG1haW50YWluZXIgZ3VpZGVsaW5lcworKyMgICBpbiB0aGUgR05VIGdldHRleHQgZG9jdW1lbnRhdGlvbiwgc2VjdGlvbiAnUHJlcGFyaW5nIFN0cmluZ3MnLgorKyMgLSBTdHJpbmdzIHdoaWNoIHVzZSB1bmNsZWFyIHRlcm1zIG9yIHJlcXVpcmUgYWRkaXRpb25hbCBjb250ZXh0IHRvIGJlCisrIyAgIHVuZGVyc3Rvb2QuCisrIyAtIFN0cmluZ3Mgd2hpY2ggbWFrZSBpbnZhbGlkIGFzc3VtcHRpb25zIGFib3V0IG5vdGF0aW9uIG9mIGRhdGUsIHRpbWUgb3IKKysjICAgbW9uZXkuCisrIyAtIFBsdXJhbGlzYXRpb24gcHJvYmxlbXMuCisrIyAtIEluY29ycmVjdCBFbmdsaXNoIHNwZWxsaW5nLgorKyMgLSBJbmNvcnJlY3QgZm9ybWF0dGluZy4KKysjIEl0IGNhbiBiZSB5b3VyIGVtYWlsIGFkZHJlc3MsIG9yIGEgbWFpbGluZyBsaXN0IGFkZHJlc3Mgd2hlcmUgdHJhbnNsYXRvcnMKKysjIGNhbiB3cml0ZSB0byB3aXRob3V0IGJlaW5nIHN1YnNjcmliZWQsIG9yIHRoZSBVUkwgb2YgYSB3ZWIgcGFnZSB0aHJvdWdoCisrIyB3aGljaCB0aGUgdHJhbnNsYXRvcnMgY2FuIGNvbnRhY3QgeW91LgorK01TR0lEX0JVR1NfQUREUkVTUyA9CisrCisrIyBUaGlzIGlzIHRoZSBsaXN0IG9mIGxvY2FsZSBjYXRlZ29yaWVzLCBiZXlvbmQgTENfTUVTU0FHRVMsIGZvciB3aGljaCB0aGUKKysjIG1lc3NhZ2UgY2F0YWxvZ3Mgc2hhbGwgYmUgdXNlZC4gIEl0IGlzIHVzdWFsbHkgZW1wdHkuCisrRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMgPQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9xdW90LnNlZAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvcG8vcXVvdC5zZWQJMjAwNC0wOS0xMiAxNDo0MDozNC43NTQ2ODc0NDAgLTA0MDAKK0BAIC0wLDAgKzEsNiBAQAorK3MvIlwoW14iXSpcKSIv4oCcXDHigJ0vZworK3MvYFwoW15gJ10qXCknL+KAmFwx4oCZL2cKKytzLyAnXChbXmAnXSpcKScgLyDigJhcMeKAmSAvZworK3MvICdcKFteYCddKlwpJyQvIOKAmFwx4oCZL2cKKytzL14nXChbXmAnXSpcKScgL+KAmFwx4oCZIC9nCisrcy/igJzigJ0vIiIvZworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9yZW1vdmUtcG90Y2RhdGUuc2luCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9yZW1vdmUtcG90Y2RhdGUuc2luCTIwMDQtMDktMTIgMTQ6NDA6MzQuNzYyNjg2MjI0IC0wNDAwCitAQCAtMCwwICsxLDE5IEBACisrIyBTZWQgc2NyaXB0IHRoYXQgcmVtb3ZlIHRoZSBQT1QtQ3JlYXRpb24tRGF0ZSBsaW5lIGluIHRoZSBoZWFkZXIgZW50cnkKKysjIGZyb20gYSBQT1QgZmlsZS4KKysjCisrIyBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHRoZSBmb2xsb3dpbmcgb2NjdXJyZW5jZXMgb2YgdGhlCisrIyBwYXR0ZXJuIGlzIGFjaGlldmVkIGJ5IGxvb2tpbmcgYXQgdGhlIGhvbGQgc3BhY2UuCisrL14iUE9ULUNyZWF0aW9uLURhdGU6IC4qIiQveworK3gKKysjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCisrcy9QL1AvCisrdGEKKysjIFllcyBpdCB3YXMgZW1wdHkuIEZpcnN0IG9jY3VycmVuY2UuIFJlbW92ZSB0aGUgbGluZS4KKytnCisrZAorK2JiCisrOmEKKysjIFRoZSBob2xkIHNwYWNlIHdhcyBub25lbXB0eS4gRm9sbG93aW5nIG9jY3VycmVuY2VzLiBEbyBub3RoaW5nLgorK3gKKys6YgorK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vUnVsZXMtcXVvdAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvcG8vUnVsZXMtcXVvdAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljc3ODY4Mzc5MiAtMDQwMAorQEAgLTAsMCArMSw0NyBAQAorKyMgU3BlY2lhbCBNYWtlZmlsZSBydWxlcyBmb3IgRW5nbGlzaCBtZXNzYWdlIGNhdGFsb2dzIHdpdGggcXVvdGF0aW9uIG1hcmtzLgorKworK0RJU1RGSUxFUy5jb21tb24uZXh0cmExID0gcXVvdC5zZWQgYm9sZHF1b3Quc2VkIGVuQHF1b3QuaGVhZGVyIGVuQGJvbGRxdW90LmhlYWRlciBpbnNlcnQtaGVhZGVyLnNpbiBSdWxlcy1xdW90CisrCisrLlNVRkZJWEVTOiAuaW5zZXJ0LWhlYWRlciAucG8tdXBkYXRlLWVuCisrCisrZW5AcXVvdC5wby1jcmVhdGU6CisrCSQoTUFLRSkgZW5AcXVvdC5wby11cGRhdGUKKytlbkBib2xkcXVvdC5wby1jcmVhdGU6CisrCSQoTUFLRSkgZW5AYm9sZHF1b3QucG8tdXBkYXRlCisrCisrZW5AcXVvdC5wby11cGRhdGU6IGVuQHF1b3QucG8tdXBkYXRlLWVuCisrZW5AYm9sZHF1b3QucG8tdXBkYXRlOiBlbkBib2xkcXVvdC5wby11cGRhdGUtZW4KKysKKysuaW5zZXJ0LWhlYWRlci5wby11cGRhdGUtZW46CisrCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzL1wucG8tdXBkYXRlLWVuJCQvLydgOyBcCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQiOyB0aGVuIFBBVEg9YHB3ZGAvLi4vc3JjOiQkUEFUSDsgR0VUVEVYVExJQkRJUj1gY2QgJCh0b3Bfc3JjZGlyKS9zcmMgJiYgcHdkYDsgZXhwb3J0IEdFVFRFWFRMSUJESVI7IGZpOyBcCisrCXRtcGRpcj1gcHdkYDsgXAorKwllY2hvICIkJGxhbmc6IjsgXAorKwlsbD1gZWNobyAkJGxhbmcgfCBzZWQgLWUgJ3MvQC4qLy8nYDsgXAorKwlMQ19BTEw9QzsgZXhwb3J0IExDX0FMTDsgXAorKwljZCAkKHNyY2Rpcik7IFwKKysJaWYgJChNU0dJTklUKSAtaSAkKERPTUFJTikucG90IC0tbm8tdHJhbnNsYXRvciAtbCAkJGxsIC1vIC0gMj4vZGV2L251bGwgfCBzZWQgLWYgJCR0bXBkaXIvJCRsYW5nLmluc2VydC1oZWFkZXIgfCAkKE1TR0NPTlYpIC10IFVURi04IHwgJChNU0dGSUxURVIpIHNlZCAtZiBgZWNobyAkJGxhbmcgfCBzZWQgLWUgJ3MvLipALy8nYC5zZWQgMj4vZGV2L251bGwgPiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyB0aGVuIFwKKysJICBpZiBjbXAgJCRsYW5nLnBvICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKysJICAgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKKysJICBlbHNlIFwKKysJICAgIGlmIG12IC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gJCRsYW5nLnBvOyB0aGVuIFwKKysJICAgICAgOjsgXAorKwkgICAgZWxzZSBcCisrCSAgICAgIGVjaG8gImNyZWF0aW9uIG9mICQkbGFuZy5wbyBmYWlsZWQ6IGNhbm5vdCBtb3ZlICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gdG8gJCRsYW5nLnBvIiAxPiYyOyBcCisrCSAgICAgIGV4aXQgMTsgXAorKwkgICAgZmk7IFwKKysJICBmaTsgXAorKwllbHNlIFwKKysJICBlY2hvICJjcmVhdGlvbiBvZiAkJGxhbmcucG8gZmFpbGVkISIgMT4mMjsgXAorKwkgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKKysJZmkKKysKKytlbkBxdW90Lmluc2VydC1oZWFkZXI6IGluc2VydC1oZWFkZXIuc2luCisrCXNlZCAtZSAnL14jL2QnIC1lICdzL0hFQURFUi9lbkBxdW90LmhlYWRlci9nJyAkKHNyY2RpcikvaW5zZXJ0LWhlYWRlci5zaW4gPiBlbkBxdW90Lmluc2VydC1oZWFkZXIKKysKKytlbkBib2xkcXVvdC5pbnNlcnQtaGVhZGVyOiBpbnNlcnQtaGVhZGVyLnNpbgorKwlzZWQgLWUgJy9eIy9kJyAtZSAncy9IRUFERVIvZW5AYm9sZHF1b3QuaGVhZGVyL2cnICQoc3JjZGlyKS9pbnNlcnQtaGVhZGVyLnNpbiA+IGVuQGJvbGRxdW90Lmluc2VydC1oZWFkZXIKKysKKyttb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcXVvdAorK21vc3RseWNsZWFuLXF1b3Q6CisrCXJtIC1mICouaW5zZXJ0LWhlYWRlcgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9zdGFtcC1jYXQtaWQJMTk5OC0xMi0zMCAwMjo1MDowMS4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL3N0YW1wLWNhdC1pZAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorQEAgLTEgKzAsMCBAQAorLXRpbWVzdGFtcAorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9zcmMvTWFrZWZpbGUuYW0JMTk5OC0xMi0yOCAwMzozODo0Ny4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3NyYy9NYWtlZmlsZS5hbQkyMDA0LTA5LTEyIDE0OjQwOjUzLjY2NTgxMjUxMiAtMDQwMAorQEAgLTIsMTIgKzIsMTIgQEAKKyBscnpfU09VUkNFUz1scnouYyB0aW1pbmcuYyB6cGVyci5jIHpyZWFkbGluZS5jIGNyY3RhYi5jIHJic2IuYyB6bS5jIHByb3RuYW1lLmMgdGNwLmMgbHN5c2xvZy5jIGNhbml0LmMKKyBsc3pfU09VUkNFUz1sc3ouYyB0aW1pbmcuYyB6cGVyci5jIHpyZWFkbGluZS5jIGNyY3RhYi5jIHJic2IuYyB6bS5jIHByb3RuYW1lLmMgdGNwLmMgbHN5c2xvZy5jIGNhbml0LmMKKyBub2luc3RfSEVBREVSUyA9IHRpbWluZy5oIHpnbG9iYWwuaCB6bW9kZW0uaAorLWRhdGFkaXIgPSAkKHByZWZpeCkvQERBVEFESVJOQU1FQAorK2RhdGFkaXIgPSAkKHByZWZpeCkvc2hhcmUKKyBsb2NhbGVkaXIgPSAkKGRhdGFkaXIpL2xvY2FsZQorIENGTEFHUz1AQ0ZMQUdTQAorIERJU1RDTEVBTl9GSUxFUz1scnpzemJ1ZworIAorLUxEQUREID0gLi4vbGliL2xpYnptb2RlbS5hIEBJTlRMTElCU0AKKytMREFERCA9IC4uL2xpYi9saWJ6bW9kZW0uYSBATElCSU5UTEAKKyBBVVRPTUFLRV9PUFRJT05TPWFuc2kya25yCisgRVhUUkFfRElTVCA9IGFuc2kya25yLjEgYW5zaTJrbnIuYyBscnpzemJ1Zy5pbgorIElOQ0xVREVTID0gLUkuLiAtSSQoc3JjZGlyKSAtSSQodG9wX3NyY2Rpcikvc3JjIC1JLi4vaW50bCAtSSQodG9wX3NyY2RpcikvbGliCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9scnpzei1jaGVjay1sb2NhbGUuaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2xyenN6LWNoZWNrLWxvY2FsZS5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNDZkZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9scnpzei1jaGVjay1sb2NhbGUuaC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDI4YjQ3M2MzYzk2NjgyYTgyMGUyOTJjYzFiZTAwNmUxOWFlZTExYmMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAyNCBNYXkgMjAxMyAwMTowNzoyNCAtMDQwMAorU3ViamVjdDogW1BBVENIXSBscnpzeiBjaGVjayBsb2NhbGUuaAorCitmaXggdGhlIGJ1aWxkIGZhaWx1cmUgd2hlbiB1c2luZyAtTzAgaW4gYSBkZWJ1ZyBidWlsZDoKK2xyei5jOjI4NDoxMzogZXJyb3I6ICdMQ19BTEwnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbdXdlQG9oc2UuZGVdCisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IDZlMjA2NGMuLmMxMDQ2MGMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTEzMCw3ICsxMzAsNyBAQCBBQ19DSEVDS19IRUFERVJTKGZjbnRsLmggbGltaXRzLmggc3lzL2lvY3RsLmggc3lzL3RpbWUuaCB1bmlzdGQuaCBzeXMvdGltZXMuaCkKKyBMUlpTWl9IRUFERVJTX1RFUk1fSU8KKyBBQ19DSEVDS19IRUFERVJTKHRlcm1pb3MuaCBzeXMvdGVybWlvcy5oIHRlcm1pby5oIHN5cy90ZXJtaW8uaCBzZ3R0eS5oKQorIEFDX0NIRUNLX0hFQURFUlMoc3lzL21tYW4uaCB1dGltZS5oIHN5c2xvZy5oIHN5cy9zeXNsb2cuaCBzeXMvcGFyYW0uaCkKKy1BQ19DSEVDS19IRUFERVJTKHN5cy9zZWxlY3QuaCBzdHJpbmdzLmggYXJwYS9pbmV0LmgpCisrQUNfQ0hFQ0tfSEVBREVSUyhzeXMvc2VsZWN0Lmggc3RyaW5ncy5oIGxvY2FsZS5oIGFycGEvaW5ldC5oKQorIAorIGRubCBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorIEFDX1RZUEVfU0laRV9UCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbHJ6c3pfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbHJ6c3pfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NTI5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9scnpzel9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgcGF0Y2ggZml4ZXMgZm9sbG93aW5nIGlzc3VlIHdpdGggYXV0b21ha2UgMS4xMgorCit8IGNvbmZpZ3VyZS5pbjo5NTogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorLi4uCit8IGxpYi9NYWtlZmlsZS5hbTozOiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCit8IGxpYi9NYWtlZmlsZS5hbTogaW5zdGFsbGluZyAnLi9kZXBjb21wJworfCBzcmMvTWFrZWZpbGUuYW06MTE6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKKworCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wMworCitJbmRleDogbHJ6c3otMC4xMi4yMC9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBscnpzei0wLjEyLjIwLm9yaWcvY29uZmlndXJlLmluCisrKysgbHJ6c3otMC4xMi4yMC9jb25maWd1cmUuaW4KK0BAIC05Miw3ICs5Miw2IEBAIEFDX1BST0dfUkFOTElCCisgQUNfSVNDX1BPU0lYCisgQUNfQUlYCisgQUNfTUlOSVgKKy1BTV9DX1BST1RPVFlQRVMKKyBBQ19DX0NPTlNUCisgQUNfQ19JTkxJTkUKKyAKK0luZGV4OiBscnpzei0wLjEyLjIwL2xpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxyenN6LTAuMTIuMjAub3JpZy9saWIvTWFrZWZpbGUuYW0KKysrKyBscnpzei0wLjEyLjIwL2xpYi9NYWtlZmlsZS5hbQorQEAgLTEsNiArMSw1IEBACisgbm9pbnN0X0xJQlJBUklFUz1saWJ6bW9kZW0uYQorIENGTEFHUz1AQ0ZMQUdTQAorLUFVVE9NQUtFX09QVElPTlM9YW5zaTJrbnIKKyAKKyBFWFRSQV9ESVNUID0gYWxsb2NhLmMgYW5zaTJrbnIuMSBhbnNpMmtuci5jIFwKKyAJZ2V0b3B0LmMgZ2V0b3B0MS5jIG1rZGlyLmMgbWt0aW1lLmMgXAorSW5kZXg6IGxyenN6LTAuMTIuMjAvc3JjL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbHJ6c3otMC4xMi4yMC5vcmlnL3NyYy9NYWtlZmlsZS5hbQorKysrIGxyenN6LTAuMTIuMjAvc3JjL01ha2VmaWxlLmFtCitAQCAtOCw3ICs4LDYgQEAgQ0ZMQUdTPUBDRkxBR1NACisgRElTVENMRUFOX0ZJTEVTPWxyenN6YnVnCisgCisgTERBREQgPSAuLi9saWIvbGliem1vZGVtLmEgQExJQklOVExACistQVVUT01BS0VfT1BUSU9OUz1hbnNpMmtucgorIEVYVFJBX0RJU1QgPSBhbnNpMmtuci4xIGFuc2kya25yLmMgbHJ6c3pidWcuaW4KKyBJTkNMVURFUyA9IC1JLi4gLUkkKHNyY2RpcikgLUkkKHRvcF9zcmNkaXIpL3NyYyAtSS4uL2ludGwgLUkkKHRvcF9zcmNkaXIpL2xpYgorICNERUZTID0gLURMT0NBTEVESVI9XCIkKGxvY2FsZWRpcilcIiAtRE9TPVwiQGhvc3Rfb3NAXCIgLURDUFU9XCJAaG9zdF9jcHVAXCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL21ha2VmaWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlNTkyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL21ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtcnVOIGxyenN6LTAuMTIuMjBfb3JnL3NyYy9NYWtlZmlsZS5pbiBscnpzei0wLjEyLjIwX3BhdGNoL3NyYy9NYWtlZmlsZS5pbgorLS0tIGxyenN6LTAuMTIuMjBfb3JnL3NyYy9NYWtlZmlsZS5pbgkxOTk4LTEyLTMwIDE3OjMxOjQ2LjAwMDAwMDAwMCArMDEwMAorKysrIGxyenN6LTAuMTIuMjBfcGF0Y2gvc3JjL01ha2VmaWxlLmluCTIwMDQtMDQtMjkgMTM6NTc6MzMuNDM0OTA5NjU2ICswMjAwCitAQCAtMzcyLDEzICszNzIsMTMgQEAKKyAJcm0gLWYgJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHNiIHwgc2VkIC1lICckKHRyYW5zZm9ybSknYAorIAlsbiAkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBsc3ogfHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AgXAorIAkJJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHNiIHxzZWQgLWUgJyQodHJhbnNmb3JtKSdgIAorLQlybSAtZiAkKGJpbmRpcikvYGVjaG8gbHN4IHwgc2VkIC1lICckKHRyYW5zZm9ybSknYAorKwlybSAtZiAkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBsc3ggfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCisgCWxuICQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxzeiB8c2VkIC1lICckKHRyYW5zZm9ybSknYCBcCisgCQkkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBsc3ggfHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AgCistCXJtIC1mICQoYmluZGlyKS9gZWNobyBscmIgfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCisrCXJtIC1mICQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxyYiB8IHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AKKyAJbG4gJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHJ6IHxzZWQgLWUgJyQodHJhbnNmb3JtKSdgIFwKKyAJCSQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxyYiB8c2VkIC1lICckKHRyYW5zZm9ybSknYCAKKy0Jcm0gLWYgJChiaW5kaXIpL2BlY2hvIGxyeCB8IHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AKKysJcm0gLWYgJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHJ4IHwgc2VkIC1lICckKHRyYW5zZm9ybSknYAorIAlsbiAkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBscnogfHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AgXAorIAkJJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHJ4IHxzZWQgLWUgJyQodHJhbnNmb3JtKSdgIAorICMJcm0gLWYgJChiaW5kaXIpL2BlY2hvIGxyenN6YnVnIHwgc2VkIC1lICckKHRyYW5zZm9ybSknYApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6XzAuMTIuMjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3pfMC4xMi4yMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGNlNTdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6XzAuMTIuMjAuYmIKQEAgLTAsMCArMSw0NiBAQAorU1VNTUFSWSA9ICJUb29scyBmb3Igem1vZGVtL3htb2RlbS95bW9kZW0gZmlsZSB0cmFuc2ZlciIKK0RFU0NSSVBUSU9OID0gIkxyenN6IGlzIGEgY29zbWV0aWNhbGx5IG1vZGlmaWVkIHptb2RlbS95bW9kZW0veG1vZGVtIHBhY2thZ2UgYnVpbHQgZnJvbSBcCit0aGUgcHVibGljLWRvbWFpbiB2ZXJzaW9uIG9mIENodWNrIEZvcnNiZXJnJ3MgcnpzeiBwYWNrYWdlLiBcCitUaGVzZSBwcm9ncmFtcyB1c2UgZXJyb3IgY29ycmVjdGluZyBwcm90b2NvbHMgKHt6LHgseX1tb2RlbSkgdG8gc2VuZCAoc3osIHN4LCBzYikgYW5kIFwKK3JlY2VpdmUgKHJ6LCByeCwgcmIpIGZpbGVzIG92ZXIgYSBkaWFsLWluIHNlcmlhbCBwb3J0IGZyb20gYSB2YXJpZXR5IG9mIHByb2dyYW1zIFwKK3J1bm5pbmcgdW5kZXIgdmFyaW91cyBvcGVyYXRpbmcgc3lzdGVtcy4gIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vaHNlLmRlL3V3ZS9zb2Z0d2FyZS9scnpzei5odG1sIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyBcCisJCQlmaWxlOi8vc3JjL2xyei5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTA7bWQ1PTUyNzY5NTYzNzNmZjdkODc1ODgzN2Y2Mzk5YTEwNDVmIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitERVBFTkRTID0gIiIKK1BSID0gInI2IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cub2hzZS5kZS91d2UvcmVsZWFzZXMvbHJ6c3otJHtQVn0udGFyLmd6IFwKKwkgICBmaWxlOi8vYXV0b3Rvb2xzLnBhdGNoIFwKKwkgICBmaWxlOi8vbWFrZWZpbGUucGF0Y2ggXAorCSAgIGZpbGU6Ly9nZXR0ZXh0LnBhdGNoIFwKKwkgICBmaWxlOi8vYWNkZWZpbmUucGF0Y2ggXAorCSAgIGZpbGU6Ly9scnpzel9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbHJ6c3otY2hlY2stbG9jYWxlLmgucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiNWNlNmE3NGFiYzliOWViMmFmOTRkZmZkZmQzNzJhNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjMjhiMzZiMTRiZGRiMDE0ZDllOWM5N2M1MjQ1OTg1MmY5N2JkNDA1Zjg5MTEzZjMwYmVlNDVlZDkyNzI4ZmYxIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBzcmMvbHJ6IHNyYy9sc3ogJHtEfSR7YmluZGlyfS8KK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAicnogcnggcmIgc3ogc3ggc2IiCisKK0FMVEVSTkFUSVZFX1RBUkdFVFtyel0gPSAiJHtiaW5kaXJ9L2xyeiIKK0FMVEVSTkFUSVZFX1RBUkdFVFtyeF0gPSAiJHtiaW5kaXJ9L2xyeiIKK0FMVEVSTkFUSVZFX1RBUkdFVFtyYl0gPSAiJHtiaW5kaXJ9L2xyeiIKKworQUxURVJOQVRJVkVfVEFSR0VUW3N6XSA9ICIke2JpbmRpcn0vbHN6IgorQUxURVJOQVRJVkVfVEFSR0VUW3N4XSA9ICIke2JpbmRpcn0vbHN6IgorQUxURVJOQVRJVkVfVEFSR0VUW3NiXSA9ICIke2JpbmRpcn0vbHN6IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2NvbmZpZ3VyZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZjOWY5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9jb25maWd1cmUucGF0Y2gKQEAgLTAsMCArMSwxMDQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3Lm1uLWxvZ2lzdGlrLmRlL3Vuc3VwcG9ydGVkL3B4YTI1MC9wYXRjaGVyCisjCistLS0KKworNy8zMC8yMDEwIC0gcmViYXNlZCB0byAzLjEuNSBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKzEvMjIvMjAxMiAtIHJlYmFzZWQgdG8gMy4xLjkgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisKK2RpZmYgLXIgYWYyYjEwY2MzYzE0IE1ha2VmaWxlCistLS0gYS9NYWtlZmlsZQlTdW4gSmFuIDIyIDE4OjM2OjM0IDIwMTIgKzA4MDAKKysrKyBiL01ha2VmaWxlCVN1biBKYW4gMjIgMTg6Mzg6NTQgMjAxMiArMDgwMAorQEAgLTM3LDcgKzM3LDYgQEAKKyAjIENvbW1hbmRzCisgSU5TVEFMTD1pbnN0YWxsCisgRElSSU5TVEFMTD1pbnN0YWxsIC1kCistU1RSSVA9LXMKKyBDQz0kKENST1NTX0NPTVBJTEUpZ2NjCisgQVI9JChDUk9TU19DT01QSUxFKWFyCisgUkFOTElCPSQoQ1JPU1NfQ09NUElMRSlyYW5saWIKK0BAIC04Niw3ICs4NSw3IEBACisgZXhhbXBsZS5vOiBleGFtcGxlLmMgJChQQ0lJTkMpCisgCisgJTogJS5vCistCSQoQ0MpICQoTERGTEFHUykgJChUQVJHRVRfQVJDSCkgJF4gJChMRExJQlMpIC1vICRACisrCSQoQ0MpICQoTERGTEFHUykgJChUQVJHRVRfQVJDSCkgJF4gJChMSUJfTERMSUJTKSAtbyAkQAorIAorICUuOCAlLjc6ICUubWFuCisgCU09YGVjaG8gJChEQVRFKSB8IHNlZCAncy8tMDEtLy1KYW51YXJ5LS87cy8tMDItLy1GZWJydWFyeS0vO3MvLTAzLS8tTWFyY2gtLztzLy0wNC0vLUFwcmlsLS87cy8tMDUtLy1NYXktLztzLy0wNi0vLUp1bmUtLztzLy0wNy0vLUp1bHktLztzLy0wOC0vLUF1Z3VzdC0vO3MvLTA5LS8tU2VwdGVtYmVyLS87cy8tMTAtLy1PY3RvYmVyLS87cy8tMTEtLy1Ob3ZlbWJlci0vO3MvLTEyLS8tRGVjZW1iZXItLztzL1woLipcKS1cKC4qXCktXCguKlwpL1wzIFwyIFwxLydgIDsgc2VkIDwkPCA+JEAgInMvQFRPREFZQC8kJE0vO3MvQFZFUlNJT05AL3BjaXV0aWxzLSQoVkVSU0lPTikvO3MjQElEU0RJUkAjJChJRFNESVIpIyIKK0BAIC0xMDEsNyArMTAwLDcgQEAKKyBpbnN0YWxsOiBhbGwKKyAjIC1jIGlzIGlnbm9yZWQgb24gTGludXgsIGJ1dCByZXF1aXJlZCBvbiBGcmVlQlNECisgCSQoRElSSU5TVEFMTCkgLW0gNzU1ICQoREVTVERJUikkKFNCSU5ESVIpICQoREVTVERJUikkKElEU0RJUikgJChERVNURElSKSQoTUFORElSKS9tYW44ICQoREVTVERJUikkKE1BTkRJUikvbWFuNworLQkkKElOU1RBTEwpIC1jIC1tIDc1NSAkKFNUUklQKSBsc3BjaSBzZXRwY2kgJChERVNURElSKSQoU0JJTkRJUikKKysJJChJTlNUQUxMKSAtYyAtbSA3NTUgbHNwY2kgc2V0cGNpICQoREVTVERJUikkKFNCSU5ESVIpCisgCSQoSU5TVEFMTCkgLWMgLW0gNzU1IHVwZGF0ZS1wY2lpZHMgJChERVNURElSKSQoU0JJTkRJUikKKyAJJChJTlNUQUxMKSAtYyAtbSA2NDQgJChQQ0lfSURTKSAkKERFU1RESVIpJChJRFNESVIpCisgCSQoSU5TVEFMTCkgLWMgLW0gNjQ0IGxzcGNpLjggc2V0cGNpLjggdXBkYXRlLXBjaWlkcy44ICQoREVTVERJUikkKE1BTkRJUikvbWFuOAorZGlmZiAtciBhZjJiMTBjYzNjMTQgbGliL2NvbmZpZ3VyZQorLS0tIGEvbGliL2NvbmZpZ3VyZQlTdW4gSmFuIDIyIDE4OjM2OjM0IDIwMTIgKzA4MDAKKysrKyBiL2xpYi9jb25maWd1cmUJU3VuIEphbiAyMiAxODozODo1NCAyMDEyICswODAwCitAQCAtMTQsNiArMTQsMTAgQEAKKyAJZmkKKyB9CisgCisrVkVSU0lPTj0kMQorK0lEU0RJUj0kMgorK0ROUz15ZXMKKysKKyBpZiBbIC16ICIkVkVSU0lPTiIgLW8gLXogIiRJRFNESVIiIF0gOyB0aGVuCisgCWVjaG8gPiYyICJQbGVhc2UgcnVuIHRoZSBjb25maWd1cmUgc2NyaXB0IGZyb20gdGhlIHRvcC1sZXZlbCBNYWtlZmlsZSIKKyAJZXhpdCAxCitAQCAtMjEsOCArMjUsOCBAQAorIAorIGVjaG9fbiAiQ29uZmlndXJpbmcgbGlicGNpIGZvciB5b3VyIHN5c3RlbS4uLiIKKyBpZiBbIC16ICIkSE9TVCIgXSA7IHRoZW4KKy0Jc3lzPWB1bmFtZSAtc2AKKy0JcmVsPWB1bmFtZSAtcmAKKysJc3lzPSR7MzotYHVuYW1lIC1zYH0KKysJcmVsPQorIAlyZWFsc3lzPSIkc3lzIgorIAlpZiBbICIkc3lzIiA9ICJBSVgiIC1hIC14IC91c3IvYmluL29zbGV2ZWwgLWEgLXggL3Vzci9zYmluL2xzYXR0ciBdCisgCXRoZW4KK0BAIC0zMCw3ICszNCw3IEBACisgCQlwcm9jPWAvdXNyL3NiaW4vbHNkZXYgLUMgLWMgcHJvY2Vzc29yIC1TIGF2YWlsYWJsZSAtRiBuYW1lIHwgaGVhZCAtMWAKKyAJCWNwdT1gL3Vzci9zYmluL2xzYXR0ciAtRiB2YWx1ZSAtbCAkcHJvYyAtYSB0eXBlIHwgc2VkICdzL18uKi8vJ2AKKyAJZWxzZQorLQkJY3B1PWB1bmFtZSAtbSB8IHNlZCAncy9eaS44NiQvaTM4Ni87cy9ec3VuNHUkL3NwYXJjNjQvO3MvXmk4NnBjJC9pMzg2LztzL15CZVBDJC9pMzg2LztzL15CZU1hYyQvcG93ZXJwYy87cy9eQmVCb3gkL3Bvd2VycGMvJ2AKKysJCWNwdT0kezQ6LWB1bmFtZSAtbSB8IHNlZCAncy9eaS44NiQvaTM4Ni87cy9ec3VuNHUkL3NwYXJjNjQvO3MvXmk4NnBjJC9pMzg2LztzL15CZVBDJC9pMzg2LztzL15CZU1hYyQvcG93ZXJwYy87cy9eQmVCb3gkL3Bvd2VycGMvJ2B9CisgCWZpCisgCWlmIFsgIiRzeXMiID0gIkdOVS9rRnJlZUJTRCIgLW8gIiRzeXMiID0gIkRyYWdvbkZseSIgXQorIAl0aGVuCitAQCAtNDAsNyArNDQsNyBAQAorIAl0aGVuCisgCQlzeXM9Y3lnd2luCisgCWZpCistCUhPU1Q9JHszOi0kY3B1LSRzeXN9CisrCUhPU1Q9JGNwdS0kc3lzCisgZmkKKyBbIC1uICIkUkVMRUFTRSIgXSAmJiByZWw9IiR7UkVMRUFTRX0iCisgIyBDQVZFQVQ6IHRyIG9uIFNvbGFyaXMgaXMgYSBiaXQgd2VpcmQgYW5kIHRoZSBleHRyYSBbXSBpcyBvdGhlcndpc2UgaGFybWxlc3MuCitAQCAtNDksNiArNTMsMjEgQEAKKyBzeXM9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorIGVjaG8gIiAkaG9zdCAkcmVsICRjcHUgJHN5cyIKKyAKKytpZiBbICIkaG9zdCIgPSAibGludXgtLWdudWVhYmkiIF0KKyt0aGVuCisrCXN5cz1saW51eAorK2ZpCisrCisraWYgWyAiJGhvc3QiID0gImxpbnV4LS11Y2xpYmMiIF0KKyt0aGVuCisrCXN5cz1saW51eAorK2ZpCisrCisraWYgWyAiJGhvc3QiID0gImxpbnV4LS11Y2xpYmNlYWJpIiBdCisrdGhlbgorKwlzeXM9bGludXgKKytmaQorKworIGM9Y29uZmlnLmgKKyBtPWNvbmZpZy5taworIGVjaG8gPiRjICcjZGVmaW5lIFBDSV9DT05GSUdfSCcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9ndWVzcy1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHMvZ3Vlc3MtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MGI0YTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHMvZ3Vlc3MtZml4LnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK3RoZSBvcmlnaW5hbCBndWVzcyBhbGdvcml0aG0gaXMgYnJva2VuIGZvciBtYW55IGFyY2hzCitmb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0d28gd291bGQgYnJlYWs6CisJYXJtLWxpbnV4LWdudWVhYmkgIC0tPiBzeXM9Z251ZWFiaQorCXg4Nl82NC11bmtub3duLXBjLWxpbnV4LWdudSAgLS0+IHN5cyA9IHBjLWxpbnV4LWdudQorCit1c2UgYSBzaW1wbGVyIHNjaGVtZSBoZXJlIGFuZCBob3BlIGl0IHdvcmtzIGZvciBhbGwgdGhlIGNhc2VzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCis3LzMwLzIwMTAgLSBjcmVhdGVkIGJ5IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvbGliL2NvbmZpZ3VyZSBiL2xpYi9jb25maWd1cmUKK2luZGV4IDQzMThiMDUuLjg0ZjZhY2IgMTAwNzU1CistLS0gYS9saWIvY29uZmlndXJlCisrKysgYi9saWIvY29uZmlndXJlCitAQCAtNTMsMjAgKzUzLDcgQEAgY3B1PWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKKyBzeXM9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorIGVjaG8gIiAkaG9zdCAkcmVsICRjcHUgJHN5cyIKKyAKKy1pZiBbICIkaG9zdCIgPSAibGludXgtLWdudWVhYmkiIF0KKy10aGVuCistCXN5cz1saW51eAorLWZpCistCistaWYgWyAiJGhvc3QiID0gImxpbnV4LS11Y2xpYmMiIF0KKy10aGVuCistCXN5cz1saW51eAorLWZpCistCistaWYgWyAiJGhvc3QiID0gImxpbnV4LS11Y2xpYmNlYWJpIiBdCistdGhlbgorLQlzeXM9bGludXgKKy1maQorK3sgZWNobyAiJGhvc3QiIHwgZ3JlcCBsaW51eDsgfSAmJiBzeXM9bGludXgKKyAKKyBjPWNvbmZpZy5oCisgbT1jb25maWcubWsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9tYWtlZmlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2ZiYzZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL21ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogSW9udXQgUmFkdSA8aW9udXR4LnJhZHVAaW50ZWwuY29tPgorCitJbmRleDogcGNpdXRpbHMtMy4yLjAvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwY2l1dGlscy0zLjIuMC5vcmlnL01ha2VmaWxlCisrKysgcGNpdXRpbHMtMy4yLjAvTWFrZWZpbGUKK0BAIC0zNSw3ICszNSw3IEBAIFNIQVJFRElSPSQoUFJFRklYKS9zaGFyZQorIElEU0RJUj0kKFNIQVJFRElSKQorIE1BTkRJUjo9JChzaGVsbCBpZiBbIC1kICQoUFJFRklYKS9zaGFyZS9tYW4gXSA7IHRoZW4gZWNobyAkKFBSRUZJWCkvc2hhcmUvbWFuIDsgZWxzZSBlY2hvICQoUFJFRklYKS9tYW4gOyBmaSkKKyBJTkNESVI9JChQUkVGSVgpL2luY2x1ZGUKKy1MSUJESVI9JChQUkVGSVgpL2xpYgorK0xJQkRJUj0kKGxpYmRpcikKKyBQS0dDRkRJUj0kKExJQkRJUikvcGtnY29uZmlnCisgCisgIyBDb21tYW5kcworQEAgLTk0LDcgKzk0LDcgQEAgZXhhbXBsZTogZXhhbXBsZS5vIGxpYi8kKFBDSUxJQl9ERVYpCisgZXhhbXBsZS5vOiBleGFtcGxlLmMgJChQQ0lJTkMpCisgCisgJTogJS5vCistCSQoQ0MpICQoTERGTEFHUykgJChUQVJHRVRfQVJDSCkgJF4gJChMSUJfTERMSUJTKSAtbyAkQAorKwkkKENDKSAkKExERkxBR1MpICQoVEFSR0VUX0FSQ0gpICReICQoTElCX0xETElCUykgJChMRExJQlMpIC1vICRACisgCisgJS44ICUuNzogJS5tYW4KKyAJTT1gZWNobyAkKERBVEUpIHwgc2VkICdzLy0wMS0vLUphbnVhcnktLztzLy0wMi0vLUZlYnJ1YXJ5LS87cy8tMDMtLy1NYXJjaC0vO3MvLTA0LS8tQXByaWwtLztzLy0wNS0vLU1heS0vO3MvLTA2LS8tSnVuZS0vO3MvLTA3LS8tSnVseS0vO3MvLTA4LS8tQXVndXN0LS87cy8tMDktLy1TZXB0ZW1iZXItLztzLy0xMC0vLU9jdG9iZXItLztzLy0xMS0vLU5vdmVtYmVyLS87cy8tMTItLy1EZWNlbWJlci0vO3MvXCguKlwpLVwoLipcKS1cKC4qXCkvXDMgXDIgXDEvJ2AgOyBzZWQgPCQ8ID4kQCAicy9AVE9EQVlALyQkTS87cy9AVkVSU0lPTkAvcGNpdXRpbHMtJChWRVJTSU9OKS87cyNASURTRElSQCMkKElEU0RJUikjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzXzMuMy4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzXzMuMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYThjZDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHNfMy4zLjEuYmIKQEAgLTAsMCArMSw2MCBAQAorU1VNTUFSWSA9ICJQQ0kgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAnVGhlIFBDSSBVdGlsaXRpZXMgcGFja2FnZSBjb250YWlucyBhIGxpYnJhcnkgZm9yIHBvcnRhYmxlIGFjY2VzcyBcCit0byBQQ0kgYnVzIGNvbmZpZ3VyYXRpb24gc3BhY2UgYW5kIHNldmVyYWwgdXRpbGl0aWVzIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4nCitIT01FUEFHRSA9ICJodHRwOi8vYXRyZXkua2FybGluLm1mZi5jdW5pLmN6L35tai9wY2l1dGlscy5zaHRtbCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKK0RFUEVORFMgPSAiemxpYiBrbW9kIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vc29mdHdhcmUvdXRpbHMvcGNpdXRpbHMvcGNpdXRpbHMtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ndWVzcy1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFrZWZpbGUucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0YzM0MGEzMTc5ODdkNjFhMTFlZTJjZjEzOWVmMTE5MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MTRhM2JkYjc3ZTRjZGJlOWU5NzBlMTg4NWFmNDZlMGJhMjAxMWJmOTczNjQzNjhjNDU1YWRlMGVkZDRlM2E5IgorCitpbmhlcml0IG11bHRpbGliX2hlYWRlcgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ2h3ZGInLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tod2RiXSA9ICJIV0RCPXllcyxIV0RCPW5vLHVkZXYiCisKK1BDSV9DT05GX0ZMQUcgPSAiWkxJQj15ZXMgRE5TPXllcyBTSEFSRUQ9eWVzIgorCisjIHNlZSBjb25maWd1cmUucGF0Y2gKK2RvX2NvbmZpZ3VyZSAoKSB7CisJKAorCSAgY2QgbGliICYmIFwKKwkgICMgRVhUUkFfT0VDT05GIGZvciB0aGlzIHJlY2lwZSBjb3VsZCBvbmx5IHBvc3NpYmx5IGNvbnRhaW4gJ0hXREI9eWVzL25vJywgc28gd2UgcHV0IGl0CisJICAjIGJlZm9yZSAuL2NvbmZpZ3VyZQorCSAgJHtQQ0lfQ09ORl9GTEFHfSAke0VYVFJBX09FQ09ORn0gLi9jb25maWd1cmUgJHtQVn0gJHtkYXRhZGlyfSAke1RBUkdFVF9PU30gJHtUQVJHRVRfQVJDSH0KKwkpCit9CisKK2V4cG9ydCBQUkVGSVggPSAiJHtwcmVmaXh9IgorZXhwb3J0IFNCSU5ESVIgPSAiJHtzYmluZGlyfSIKK2V4cG9ydCBTSEFSRURJUiA9ICIke2RhdGFkaXJ9IgorZXhwb3J0IE1BTkRJUiA9ICIke21hbmRpcn0iCisKK0VYVFJBX09FTUFLRSArPSAiJHtQQ0lfQ09ORl9GTEFHfSIKKworIyBUaGUgY29uZmlndXJlIHNjcmlwdCBicmVha3MgaWYgdGhlIEhPU1QgdmFyaWFibGUgaXMgc2V0CitIT1NUW3VuZXhwb3J0XSA9ICIxIgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBpbnN0YWxsIGluc3RhbGwtbGliCisKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlsbiAtcyAuLi9zYmluL2xzcGNpICR7RH0ke2JpbmRpcn0vbHNwY2kKKworCW9lX211bHRpbGliX2hlYWRlciBwY2kvY29uZmlnLmgKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LWlkcyBsaWJwY2kiCitGSUxFU18ke1BOfS1pZHMgPSAiJHtkYXRhZGlyfS9wY2kuaWRzKiIKK0ZJTEVTX2xpYnBjaSA9ICIke2xpYmRpcn0vbGlicGNpLnNvLioiCitTVU1NQVJZXyR7UE59LWlkcyA9ICJQQ0kgdXRpbGl0aWVzIC0gZGV2aWNlIElEIGRhdGFiYXNlIgorREVTQ1JJUFRJT05fJHtQTn0taWRzID0gIlBhY2thZ2UgcHJvdmlkaW5nIHRoZSBQQ0kgZGV2aWNlIElEIGRhdGFiYXNlIGZvciBwY2l1dGlscy4iCitSREVQRU5EU18ke1BOfSArPSAiJHtQTn0taWRzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLTAxOC8wMDAxLWZpeC1hLXBhcmFsbGVsLWJ1aWxkaW5nLWlzc3VlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLTAxOC8wMDAxLWZpeC1hLXBhcmFsbGVsLWJ1aWxkaW5nLWlzc3VlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMDEwNDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHMtMDE4LzAwMDEtZml4LWEtcGFyYWxsZWwtYnVpbGRpbmctaXNzdWUucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSA1YTc5M2ExYTlmYjM0Nzc3MTlhYWJmN2UyN2ZmMjJlZDFhY2RmNTU5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxOSBNYXkgMjAxNSAxNTo1NDoyNCArMDgwMAorU3ViamVjdDogW1BBVENIXSBmaXggYSBwYXJhbGxlbCBidWlsZGluZyBpc3N1ZQorCitGaXhlZDoKK3wgICBzcmMvbGV4X2NvbmZpZy5jOjM0OjI1OiBmYXRhbCBlcnJvcjogeWFjY19jb25maWcuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorfAorfCAgICAjaW5jbHVkZSAieWFjY19jb25maWcuaCIKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorfCAgIGNvbXBpbGF0aW9uIHRlcm1pbmF0ZWQuCisKK0FuZDoKK0NvbXBpbGluZyBsZXhfY29uZmlnLmMuCisgIHNyYy9sZXhfY29uZmlnLmw6MzQ6MjU6IGZhdGFsIGVycm9yOiB5YWNjX2NvbmZpZy5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCit0aGVyZSBhcmUgdHdvIE1ha2VmaWxlIHJ1bGVzIHRvIGdlbmVyYXRlIGxleF9jb25maWcubywgb25lIGlzIHRvIGdlbmVyYXRlCitsZXhfY29uZmlnLm8gb3RoZXIgaXMgdG8gZ2VuZXJhdGUgc3JjL2xleF9jb25maWcubywgc28gd2UgY2FuIHJlbW92ZSBvbmUuCithbmQgYWRkIHRoZSBuZWVkZWQgZGVwZW5kZW5jZSBmb3IgbGV4X2NvbmZpZy5vCisKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUgfCAzICstLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IGQ0NWZkYzMuLjRjNTNiYzIgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0yNDYsOCArMjQ2LDcgQEAgJChQQ01DSUFfU09DS0VUX1NUQVJUVVApOiAkKExJQkMpIHNyYy9zdGFydHVwLm8gc3JjL3lhY2NfY29uZmlnLm8gc3JjL2xleF9jb25maWcKKyAJJChRVUlFVCkgJChMRCkgJChMREZMQUdTKSAtbyAkQCAkKENSVDApIHNyYy9zdGFydHVwLm8gc3JjL3lhY2NfY29uZmlnLm8gc3JjL2xleF9jb25maWcubyAkKExJQl9PQkpTKSAkKEFSQ0hfTElCX09CSlMpCisgCSQoUVVJRVQpICQoU1RSSVBDTUQpICRACisgCisteWFjY19jb25maWcubyBsZXhfY29uZmlnLm86ICUubzogJS5jCistCSQoQ0MpIC1jIC1NRCAtTyAtcGlwZSAkKENQUEZMQUdTKSAkPAorK3NyYy9sZXhfY29uZmlnLm86c3JjL3lhY2NfY29uZmlnLmgKKyAKKyBkZWJ1Z3Rvb2xzOiBjY2R2ICQoQ0JEVU1QKSAkKENJU0RVTVApCisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlscy0wMTgvbWFrZWZpbGVfZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLTAxOC9tYWtlZmlsZV9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IwY2UyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlscy0wMTgvbWFrZWZpbGVfZml4LnBhdGNoCkBAIC0wLDAgKzEsMTAxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0hhcmRjb2RlZCBwYXRocyBhcmUgYmFkLi4uCitUaGlzIGxldHMgdXMgdXNlIHRoZSBpbnN0YWxsIGZyb20gT0UncyBuYXRpdmUgc3lzcm9vdAorcmViYXNlIHRoZSBwYXRjaCB0byAwMTgsIHJlbW92aW5nIGhhcmRjb2RlZCBwYXRoIGZvciB0cnVlCithcyB3ZWxsLiBSZW1vdmluZyBvZiAtRCBpbiBpbnN0YWxsIGludm9jYXRpb24gaXMgYSBsaXR0bGUKK3F1ZXN0aW9uYWJsZSwgaXMgaXQgc29tZSBHTlUgZXh0ZW50aW9uPworCistS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHBjbWNpYXV0aWxzLTAxOC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBjbWNpYXV0aWxzLTAxOC5vcmlnL01ha2VmaWxlCisrKysgcGNtY2lhdXRpbHMtMDE4L01ha2VmaWxlCitAQCAtNzYsNyArNzYsNyBAQCBzYmluZGlyID0JJHtleGVjX3ByZWZpeH0vc2JpbgorIG1hbmRpciA9CSR7cHJlZml4fS91c3Ivc2hhcmUvbWFuCisgdWRldmRpciA9CSR7cHJlZml4fS9saWIvdWRldgorIAorLUlOU1RBTEwgPSAvdXNyL2Jpbi9pbnN0YWxsIC1jCisrSU5TVEFMTCA9IGluc3RhbGwgLWMKKyBJTlNUQUxMX1BST0dSQU0gPSAke0lOU1RBTEx9CisgSU5TVEFMTF9EQVRBICA9ICR7SU5TVEFMTH0gLW0gNjQ0CisgSU5TVEFMTF9TQ1JJUFQgPSAke0lOU1RBTExfUFJPR1JBTX0KK0BAIC0xODAsNyArMTgwLDcgQEAgZW5kaWYKKyAjIGlmIERFQlVHIGlzIGVuYWJsZWQsIHRoZW4gd2UgZG8gbm90IHN0cmlwIG9yIG9wdGltaXplCisgaWZlcSAoJChzdHJpcCAkKERFQlVHKSksdHJ1ZSkKKyAJQ0ZMQUdTICArPSAtTzEgLWcgLURERUJVRyAtRF9HTlVfU09VUkNFCistCVNUUklQQ01EID0gL2Jpbi90cnVlIC1TaW5jZV93ZV9hcmVfZGVidWdnaW5nCisrCVNUUklQQ01EID0gdHJ1ZSAtU2luY2Vfd2VfYXJlX2RlYnVnZ2luZworIGVsc2UKKyAJQ0ZMQUdTICArPSAkKE9QVElNSVpBVElPTikgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLURfR05VX1NPVVJDRQorIAlTVFJJUENNRCA9ICQoU1RSSVApIC1zIC0tcmVtb3ZlLXNlY3Rpb249Lm5vdGUgLS1yZW1vdmUtc2VjdGlvbj0uY29tbWVudAorQEAgLTI3MywzMCArMjczLDMyIEBAIGNsZWFuOgorIAorIGluc3RhbGwtaG90cGx1ZzoKKyAJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChob3RwbHVnZGlyKQorLQkkKElOU1RBTExfUFJPR1JBTSkgLUQgaG90cGx1Zy9wY21jaWEuYWdlbnQgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhLmFnZW50CistCSQoSU5TVEFMTF9QUk9HUkFNKSAtRCBob3RwbHVnL3BjbWNpYS5yYyAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWEucmMKKysJJChJTlNUQUxMX1BST0dSQU0pIGhvdHBsdWcvcGNtY2lhLmFnZW50ICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYS5hZ2VudAorKwkkKElOU1RBTExfUFJPR1JBTSkgaG90cGx1Zy9wY21jaWEucmMgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhLnJjCisgCisgdW5pbnN0YWxsLWhvdHBsdWc6CisgCS0gcm0gLWYgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhLmFnZW50ICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYS5yYworIAorIGluc3RhbGwtc29ja2V0LWhvdHBsdWc6CistCSQoSU5TVEFMTF9QUk9HUkFNKSAtRCBob3RwbHVnL3BjbWNpYV9zb2NrZXQuYWdlbnQgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhX3NvY2tldC5hZ2VudAorLQkkKElOU1RBTExfUFJPR1JBTSkgLUQgaG90cGx1Zy9wY21jaWFfc29ja2V0LnJjICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYV9zb2NrZXQucmMKKysJJChJTlNUQUxMX1BST0dSQU0pIGhvdHBsdWcvcGNtY2lhX3NvY2tldC5hZ2VudCAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWFfc29ja2V0LmFnZW50CisrCSQoSU5TVEFMTF9QUk9HUkFNKSBob3RwbHVnL3BjbWNpYV9zb2NrZXQucmMgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhX3NvY2tldC5yYworIAorIHVuaW5zdGFsbC1zb2NrZXQtaG90cGx1ZzoKKyAJLSBybSAtZiAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWFfc29ja2V0LmFnZW50ICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYV9zb2NrZXQucmMKKyAKKyBpbnN0YWxsLXNvY2tldC10b29sczoKKy0JJChJTlNUQUxMX1BST0dSQU0pIC1EICQoUENNQ0lBX1NPQ0tFVF9TVEFSVFVQKSAkKERFU1RESVIpJCh1ZGV2aGVscGVyZGlyKS8kKFBDTUNJQV9TT0NLRVRfU1RBUlRVUCkKKysJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJCh1ZGV2aGVscGVyZGlyKQorKwkkKElOU1RBTExfUFJPR1JBTSkgJChQQ01DSUFfU09DS0VUX1NUQVJUVVApICQoREVTVERJUikkKHVkZXZoZWxwZXJkaXIpLyQoUENNQ0lBX1NPQ0tFVF9TVEFSVFVQKQorIAorIHVuaW5zdGFsbC1zb2NrZXQtdG9vbHM6CisgCS0gcm0gLWYgJChERVNURElSKSQodWRldmhlbHBlcmRpcikvJChQQ01DSUFfU09DS0VUX1NUQVJUVVApCisgCisgaW5zdGFsbC10b29sczoKKyAJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChzYmluZGlyKQorLQkkKElOU1RBTExfUFJPR1JBTSkgLUQgJChQQ0NBUkRDVEwpICQoREVTVERJUikkKHNiaW5kaXIpLyQoUENDQVJEQ1RMKQorKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKHVkZXZoZWxwZXJkaXIpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFBDQ0FSRENUTCkgJChERVNURElSKSQoc2JpbmRpcikvJChQQ0NBUkRDVEwpCisgCSQoU1lNTElOSykgJChQQ0NBUkRDVEwpICQoREVTVERJUikkKHNiaW5kaXIpLyQoTFNQQ01DSUEpCistCSQoSU5TVEFMTF9QUk9HUkFNKSAtRCAkKFBDTUNJQV9DSEVDS19CUk9LRU5fQ0lTKSAkKERFU1RESVIpJCh1ZGV2aGVscGVyZGlyKS8kKFBDTUNJQV9DSEVDS19CUk9LRU5fQ0lTKQorKwkkKElOU1RBTExfUFJPR1JBTSkgJChQQ01DSUFfQ0hFQ0tfQlJPS0VOX0NJUykgJChERVNURElSKSQodWRldmhlbHBlcmRpcikvJChQQ01DSUFfQ0hFQ0tfQlJPS0VOX0NJUykKKyAKKyB1bmluc3RhbGwtdG9vbHM6CisgCS0gcm0gLWYgJChERVNURElSKSQoc2JpbmRpcikvJChQQ0NBUkRDVEwpCitAQCAtMzA1LDIyICszMDcsMjQgQEAgdW5pbnN0YWxsLXRvb2xzOgorIAorIGluc3RhbGwtY29uZmlnOgorIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKHBjbWNpYWNvbmZkaXIpCistCSQoSU5TVEFMTF9EQVRBKSAgLUQgY29uZmlnL2NvbmZpZy5vcHRzICQoREVTVERJUikkKHBjbWNpYWNvbmZkaXIpL2NvbmZpZy5vcHRzCisrCSQoSU5TVEFMTF9EQVRBKSAgY29uZmlnL2NvbmZpZy5vcHRzICQoREVTVERJUikkKHBjbWNpYWNvbmZkaXIpL2NvbmZpZy5vcHRzCisgCWlmIFsgLWYgY29uZmlnL2NvbmZpZy5vcHRzLiQoQVJDSCkgXTsgdGhlbiBcCistCQkkKElOU1RBTExfREFUQSkgLUQgY29uZmlnL2NvbmZpZy5vcHRzLiQoQVJDSCkgJChERVNURElSKSQocGNtY2lhY29uZmRpcikvY29uZmlnLm9wdHM7IFwKKysJCSQoSU5TVEFMTF9EQVRBKSBjb25maWcvY29uZmlnLm9wdHMuJChBUkNIKSAkKERFU1RESVIpJChwY21jaWFjb25mZGlyKS9jb25maWcub3B0czsgXAorIAlmaQorIAorIHVuaW5zdGFsbC1jb25maWc6CisgIwktIHJtIC1mICQoREVTVERJUikkKHBjbWNpYWNvbmZkaXIpL2NvbmZpZy5vcHRzCisgCisgaW5zdGFsbC11ZGV2OgorLQkkKElOU1RBTExfREFUQSkgLUQgJChVREVWX1JVTEVTX0ZJTEUpICQoREVTVERJUikkKHVkZXZydWxlc2RpcikvNjAtcGNtY2lhLnJ1bGVzCisrCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQodWRldnJ1bGVzZGlyKQorKwkkKElOU1RBTExfREFUQSkgJChVREVWX1JVTEVTX0ZJTEUpICQoREVTVERJUikkKHVkZXZydWxlc2RpcikvNjAtcGNtY2lhLnJ1bGVzCisgCisgdW5pbnN0YWxsLXVkZXY6CisgCS0gcm0gLWYgJChERVNURElSKSQodWRldnJ1bGVzZGlyKS82MC1wY21jaWEucnVsZXMKKyAKKyBpbnN0YWxsLW1hbjoKKy0JJChJTlNUQUxMX0RBVEEpIC1EIG1hbi9tYW44L3BjY2FyZGN0bC44ICQoREVTVERJUikkKG1hbmRpcikvbWFuOC9wY2NhcmRjdGwuOAorKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKG1hbmRpcikvbWFuOAorKwkkKElOU1RBTExfREFUQSkgbWFuL21hbjgvcGNjYXJkY3RsLjggJChERVNURElSKSQobWFuZGlyKS9tYW44L3BjY2FyZGN0bC44CisgCSQoU1lNTElOSykgcGNjYXJkY3RsLjggJChERVNURElSKSQobWFuZGlyKS9tYW44L2xzcGNtY2lhLjgKKyAKKyB1bmluc3RhbGwtbWFuOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlscy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQxYzU1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlscy5pbmMKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJMaW51eCBrZXJuZWwgdXNlcmxhbmQgdXRpbGl0aWVzIGZvciB0aGUgUENNQ0lBIHN1YnN5c3RlbSIKK0hPTUVQQUdFID0gImh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9wY21jaWEvIgorU0VDVElPTiA9ICJrZXJuZWwvdXNlcmxhbmQiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworREVQRU5EUyA9ICJ1ZGV2IHN5c2ZzdXRpbHMgZmxleC1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICJ1ZGV2IG1vZHVsZS1pbml0LXRvb2xzIgorCitTUkNfVVJJID0gImh0dHA6Ly9taXJyb3IubGludXgub3JnLmF1L2xpbnV4L3V0aWxzL2tlcm5lbC9wY21jaWEvJHtCUH0udGFyLmJ6MiIKKworUyA9ICIke1dPUktESVJ9L3BjbWNpYXV0aWxzLSR7UFZ9IgorCitleHBvcnQgSE9TVENDID0gIiR7QlVJTERfQ0N9IgorZXhwb3J0IGV0Y2RpciA9ICIke3N5c2NvbmZkaXJ9IgorZXhwb3J0IHNiaW5kaXIgPSAiJHtiYXNlX3NiaW5kaXJ9IgorZXhwb3J0IHBjbWNpYWNvbmZkaXIgPSAiJHtzeXNjb25mZGlyfS9wY21jaWEiCitleHBvcnQgdWRldmRpciA9ICJgcGtnLWNvbmZpZyAtLXZhcmlhYmxlPXVkZXZkaXIgdWRldmAiCitleHBvcnQgdWRldnJ1bGVzZGlyID0gImBwa2ctY29uZmlnIC0tdmFyaWFibGU9dWRldmRpciB1ZGV2YC9ydWxlcy5kIgorZXhwb3J0IFVERVYgPSAiMSIKK0xEID0gIiR7Q0N9IgorQ0ZMQUdTID0rICItSSR7U30vc3JjIgorQ0ZMQUdTID0rICItRFBDTUNJQVVUSUxTX1ZFUlNJT049XFwiJHtQVn1cXCIiCisKK0VYVFJBX09FTUFLRSA9ICItZSAnU1RSSVA9ZWNobycgJ0xJQl9PQkpTPS1sYyAtbHN5c2ZzJyAnTEVYPWZsZXgnIgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKK30KKworQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L3BjbWNpYS9jb25maWcub3B0cyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlsc18wMTguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHNfMDE4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1N2JkMDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHNfMDE4LmJiCkBAIC0wLDAgKzEsMTMgQEAKK3JlcXVpcmUgcGNtY2lhdXRpbHMuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9tYWtlZmlsZV9maXgucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtZml4LWEtcGFyYWxsZWwtYnVpbGRpbmctaXNzdWUucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWQ4NTY2OWIzNDQwYmFhNDUzMjM2M2RhNmNhYWYxYjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzllNmFlNDQxMjc4ZTE3OGMwNzUwMWQ0OTIzOTRlZDJjMDMyNmZkYjY2ODk0ZjZkMDQwZWM4MTFiMGRjOGVkNSIKKworUFIgPSAicjEiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiKi91ZGV2Ly5kZWJ1ZyAqLyovdWRldi8uZGVidWciCitGSUxFU18ke1BOfSArPSAiKi91ZGV2ICovKi91ZGV2IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BtLXV0aWxzL3BtLXV0aWxzXzEuNC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BtLXV0aWxzL3BtLXV0aWxzXzEuNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMzUxODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG0tdXRpbHMvcG0tdXRpbHNfMS40LjEuYmIKQEAgLTAsMCArMSwyNiBAQAorU0VDVElPTiA9ICJiYXNlIgorU1VNTUFSWSA9ICJVdGlsaXRpZXMgYW5kIHNjcmlwdHMgZm9yIHBvd2VyIG1hbmFnZW1lbnQiCitERVNDUklQVElPTiA9ICJTaW1wbGUgc2hlbGwgY29tbWFuZCBsaW5lIHRvb2xzIHRvIHN1c3BlbmQgYW5kIGhpYmVybmF0ZS4iCitIT01FUEFHRSA9ICJodHRwOi8vcG0tdXRpbHMuZnJlZWRlc2t0b3Aub3JnL3dpa2kvIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9wbS1wbXUuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIyO21kNT0zYzFkZGJjNTRlNzM1ZmI0YTAzODZlMTRjNzhhMzE0NyIKKworUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3BtLXV0aWxzLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9wbS11dGlscy0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNzQyYTU1NjA4OWMzNmMzYTg5ZWIxYjk1N2RhNWE2MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZWQ4OTkwMzI4NjZkODhiMjkzM2ExZDM0Y2M3NWU4YWU0MmRjZGUyMGUxY2MyMTgzNmJhYWFlM2Q0MzcwYzBiIgorCitpbmhlcml0IHBrZ2NvbmZpZyBhdXRvdG9vbHMKKworUkRFUEVORFNfJHtQTn0gPSAiZ3JlcCBiYXNoIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJKCBjZCAke1N9OyBhdXRvcmVjb25mIC1mIC1pIC1zICkKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7QlBOfS9iaW4vLmRlYnVnIFwKKwkJICAgICR7ZGF0YWRpcn0vZG9jL3BtLXV0aWxzL1JFQURNRS5kZWJ1Z2dpbmciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL0NPUFlJTkcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNmNTI5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvQ09QWUlORwpAQCAtMCwwICsxLDIgQEAKK1RoaXMgaXMgYSBibGFuayBDT1BZSU5HIGZpbGUsIGFuZCBzaG91bGQgYmUgZmlsbGVkIGluIGJ5IG9yaWdpbmFsIGF1dGhvciBpbiBmdXR1cmUuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcG9pbnRlcmNhbCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcG9pbnRlcmNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9wb2ludGVyY2FsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVhcm0vcG9pbnRlcmNhbCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybS9wb2ludGVyY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZDg0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVhcm0vcG9pbnRlcmNhbApAQCAtMCwwICsxIEBACis4MzEzIDQgLTg1MjYgNyA4MzM0IC04MjYwNCA2NTUzNgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtdjYvcG9pbnRlcmNhbCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybXY2L3BvaW50ZXJjYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkODRjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybXY2L3BvaW50ZXJjYWwKQEAgLTAsMCArMSBAQAorODMxMyA0IC04NTI2IDcgODMzNCAtODI2MDQgNjU1MzYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybXY3L3BvaW50ZXJjYWwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVhcm12Ny9wb2ludGVyY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZDg0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVhcm12Ny9wb2ludGVyY2FsCkBAIC0wLDAgKzEgQEAKKzgzMTMgNCAtODUyNiA3IDgzMzQgLTgyNjA0IDY1NTM2CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVtaXBzL3BvaW50ZXJjYWwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVtaXBzL3BvaW50ZXJjYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkODRjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdW1pcHMvcG9pbnRlcmNhbApAQCAtMCwwICsxIEBACis4MzEzIDQgLTg1MjYgNyA4MzM0IC04MjYwNCA2NTUzNgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11cHBjL3BvaW50ZXJjYWwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVwcGMvcG9pbnRlcmNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmQ2ZTM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11cHBjL3BvaW50ZXJjYWwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11eDg2LTY0L3BvaW50ZXJjYWwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXV4ODYtNjQvcG9pbnRlcmNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDAwNTNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11eDg2LTY0L3BvaW50ZXJjYWwKQEAgLTAsMCArMSBAQAorMTI4MCAwIDEwMDIgMCA5NjAgMzI4IDY1NTM2CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXV4ODYvcG9pbnRlcmNhbCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXg4Ni9wb2ludGVyY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MDA1M2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXV4ODYvcG9pbnRlcmNhbApAQCAtMCwwICsxIEBACisxMjgwIDAgMTAwMiAwIDk2MCAzMjggNjU1MzYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWxfMC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbF8wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3MzVhNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWxfMC4wLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiVG91Y2hzY3JlZW4gY2FsaWJyYXRpb24gZGF0YSIKK1NFQ1RJT04gPSAiYmFzZSIKK1BSID0gInIxMSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGI1ZmNmYzg3ZmI2MTU4NjBkMzk4YjVlMzg2ODVlZGYiCisKK1NSQ19VUkkgPSAiZmlsZTovL3BvaW50ZXJjYWwgXAorICAgICAgICAgICBmaWxlOi8vQ09QWUlORyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCSMgT25seSBpbnN0YWxsIGZpbGUgaWYgaXQgaGFzIGEgY29udGVudHMKKwlpZiBbIC1zICR7U30vcG9pbnRlcmNhbCBdOyB0aGVuCisJICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9LworCSAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vcG9pbnRlcmNhbCAke0R9JHtzeXNjb25mZGlyfS8KKwlmaQorfQorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbC9hZGRfc3RkbGliLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3NldHNlcmlhbC9zZXRzZXJpYWwvYWRkX3N0ZGxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzRmMjYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3NldHNlcmlhbC9zZXRzZXJpYWwvYWRkX3N0ZGxpYi5wYXRjaApAQCAtMCwwICsxLDE4IEBACisjIFRoaXMgcGF0Y2ggYWRkZXMgc3RkbGliLmggdG8gZml4IGNvbXBpbGVyIHdhcm5pbmdzIGR1ZSB0byB0aGUgZXhpdAorIyBidWlsdC1pbiBub3QgYmVpbmcgZGVmaW5lZCBhbmQgZ2V0dGluZyBhbiBpbmNvcnJlY3QgaW1wbGljaXQgZGVmaW5pdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQ3JlYXRlZC1ieTogU2F1bCBXb2xkIDxzYXVsLndvbGRAaW50ZWwuY29tPgorCistLS0gc2V0c2VyaWFsLTIuMTcvc2V0c2VyaWFsLmMJMjAxMC0wOS0wMiAxNDoxMToyNy41Njk3NjMwODggLTA3MDAKKysrKyBzZXRzZXJpYWwtMi4xN19maXhlZC9zZXRzZXJpYWwuYwkyMDEwLTA5LTAyIDE0OjExOjA4LjU0NjI2NDEzOSAtMDcwMAorQEAgLTExLDYgKzExLDcgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsL2xkZmxhZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbC9sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NGFkYzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbC9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK09iZXkgTERGTEFHUworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBzZXRzZXJpYWwtMi4xNy5vcmlnL01ha2VmaWxlLmluCisrKysgc2V0c2VyaWFsLTIuMTcvTWFrZWZpbGUuaW4KK0BAIC0xMyw2ICsxMyw3IEBAIFNUUklQID0gQFNUUklQQAorIENDID0gQENDQAorIFJNID0gcm0gLWYKKyBDRkxBR1MgPSBAQ0ZMQUdTQAorK0xERkxBR1MgPSBATERGTEFHU0AKKyBERUZTID0gQERFRlNACisgSU5DUyA9IC1JLgorIFRBUiA9IHRhcgorQEAgLTIwLDcgKzIxLDcgQEAgVEFSID0gdGFyCisgYWxsOiBzZXRzZXJpYWwgc2V0c2VyaWFsLmNhdAorCisgc2V0c2VyaWFsOiBzZXRzZXJpYWwuYworLQkkKENDKSAkKENGTEFHUykgJChERUZTKSAkKElOQ1MpIHNldHNlcmlhbC5jIC1vIHNldHNlcmlhbAorKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAkKERFRlMpICQoSU5DUykgc2V0c2VyaWFsLmMgLW8gc2V0c2VyaWFsCisKKyBzZXRzZXJpYWwuY2F0OiBzZXRzZXJpYWwuOAorCW5yb2ZmIC1tYW4gc2V0c2VyaWFsLjggPiBzZXRzZXJpYWwuY2F0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbF8yLjE3LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3NldHNlcmlhbC9zZXRzZXJpYWxfMi4xNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGJkZGQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3NldHNlcmlhbC9zZXRzZXJpYWxfMi4xNy5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIkNvbnRyb2xzIHRoZSBjb25maWd1cmF0aW9uIG9mIHNlcmlhbCBwb3J0cyIKK0RFU0NSSVBUSU9OID0gInNldHNlcmlhbCBpcyBhIHByb2dyYW0gZGVzaWduZWQgdG8gc2V0IGFuZC9vciByZXBvcnQgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGEgc2VyaWFsIHBvcnQiCitIT01FUEFHRSA9ICJodHRwOi8vc2V0c2VyaWFsLnNvdXJjZWZvcmdlLm5ldCIKK0FVVEhPUiA9ICJUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PiIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworTElDRU5TRSA9ICJHUEx2Mi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vdmVyc2lvbi5oO2JlZ2lubGluZT0xO2VuZGxpbmU9NjttZDU9MmU3YzU5Y2I5ZTU3ZTM1NmFlODFmNTBmNGU0ZGZkOTkiCitQUiA9ICJyMyIKKworREVQRU5EUyArPSAiZ3JvZmYtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vc2V0c2VyaWFsLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWRkX3N0ZGxpYi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sZGZsYWdzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjNDg2N2Q3MmM0MTU2NDMxOGUwMTA3NzQ1ZWI3YTBmMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZTQ0ODdkMzIwYWMzMTU1ODU2MzQyNDE4OTQzNWQzOTZkZGY3Nzk1M2JiMjMxMTFhMTdhM2QxNDg3YjU3OTRhIgorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorICAgIGluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW44CisKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtTfS9zZXRzZXJpYWwgICAke0R9JHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vc2V0c2VyaWFsLjggJHtEfSR7bWFuZGlyfS9tYW44Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1mdy11dGlsc18yMDE1LjA3LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QtZnctdXRpbHNfMjAxNS4wNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGY3YTA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QtZnctdXRpbHNfMjAxNS4wNy5iYgpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIlUtQm9vdCBib290bG9hZGVyIGZ3X3ByaW50ZW52L3NldGVudiB1dGlsaXRpZXMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xpY2Vuc2VzL1JFQURNRTttZDU9MDUwN2NkN2RhOGU3YWQ2ZDY3MDE5MjZlYzliODRjOTUiCitTRUNUSU9OID0gImJvb3Rsb2FkZXIiCitERVBFTkRTID0gIm10ZC11dGlscyIKKworIyBUaGlzIHJldmlzaW9uIGNvcnJlc3BvbmRzIHRvIHRoZSB0YWcgInYyMDE1LjA3IgorIyBXZSB1c2UgdGhlIHJldmlzaW9uIGluIG9yZGVyIHRvIGF2b2lkIGhhdmluZyB0byBmZXRjaCBpdCBmcm9tIHRoZQorIyByZXBvIGR1cmluZyBwYXJzZQorU1JDUkVWID0gIjMzNzExYmRkNGE0ZGNlOTQyZmI1YWU4NWE2ODg5OWE4MzU3YmRkOTQiCisKK1BWID0gInYyMDE1LjA3K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5kZW54LmRlL3UtYm9vdC5naXQ7YnJhbmNoPW1hc3RlciIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworSU5TQU5FX1NLSVBfJHtQTn0gPSAiYWxyZWFkeS1zdHJpcHBlZCIKK0VYVFJBX09FTUFLRV9jbGFzcy10YXJnZXQgPSAnQ1JPU1NfQ09NUElMRT0ke1RBUkdFVF9QUkVGSVh9IENDPSIke0NDfSAke0NGTEFHU30gJHtMREZMQUdTfSIgVj0xJworRVhUUkFfT0VNQUtFX2NsYXNzLWNyb3NzID0gJ0FSQ0g9JHtUQVJHRVRfQVJDSH0gQ0M9IiR7Q0N9ICR7Q0ZMQUdTfSAke0xERkxBR1N9IiBWPTEnCisKK2luaGVyaXQgdWJvb3QtY29uZmlnCisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UgJHtVQk9PVF9NQUNISU5FfQorCW9lX3J1bm1ha2UgZW52Cit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9zYmluZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDc1NSAke1N9L3Rvb2xzL2Vudi9md19wcmludGVudiAke0R9JHtiYXNlX3NiaW5kaXJ9L2Z3X3ByaW50ZW52CisJaW5zdGFsbCAtbSA3NTUgJHtTfS90b29scy9lbnYvZndfcHJpbnRlbnYgJHtEfSR7YmFzZV9zYmluZGlyfS9md19zZXRlbnYKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS90b29scy9lbnYvZndfZW52LmNvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9md19lbnYuY29uZmlnCit9CisKK2RvX2luc3RhbGxfY2xhc3MtY3Jvc3MgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyX2Nyb3NzfQorCWluc3RhbGwgLW0gNzU1ICR7U30vdG9vbHMvZW52L2Z3X3ByaW50ZW52ICR7RH0ke2JpbmRpcl9jcm9zc30vZndfcHJpbnRlbnYKKwlpbnN0YWxsIC1tIDc1NSAke1N9L3Rvb2xzL2Vudi9md19wcmludGVudiAke0R9JHtiaW5kaXJfY3Jvc3N9L2Z3X3NldGVudgorfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1NfY2xhc3MtY3Jvc3MgPSAidWJvb3RfZndfdXRpbHNfY3Jvc3MiCit1Ym9vdF9md191dGlsc19jcm9zcygpIHsKKwlzeXNyb290X3N0YWdlX2RpciAke0R9JHtiaW5kaXJfY3Jvc3N9ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3NzfQorfQorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorQkJDTEFTU0VYVEVORCA9ICJjcm9zcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LW1raW1hZ2VfMjAxNS4wNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LW1raW1hZ2VfMjAxNS4wNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTI5YmJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QtbWtpbWFnZV8yMDE1LjA3LmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiVS1Cb290IGJvb3Rsb2FkZXIgaW1hZ2UgY3JlYXRpb24gdG9vbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTGljZW5zZXMvUkVBRE1FO21kNT0wNTA3Y2Q3ZGE4ZTdhZDZkNjcwMTkyNmVjOWI4NGM5NSIKK1NFQ1RJT04gPSAiYm9vdGxvYWRlciIKKworREVQRU5EUyA9ICJvcGVuc3NsIgorCisjIFRoaXMgcmV2aXNpb24gY29ycmVzcG9uZHMgdG8gdGhlIHRhZyAidjIwMTUuMDciCisjIFdlIHVzZSB0aGUgcmV2aXNpb24gaW4gb3JkZXIgdG8gYXZvaWQgaGF2aW5nIHRvIGZldGNoIGl0IGZyb20gdGhlCisjIHJlcG8gZHVyaW5nIHBhcnNlCitTUkNSRVYgPSAiMzM3MTFiZGQ0YTRkY2U5NDJmYjVhZTg1YTY4ODk5YTgzNTdiZGQ5NCIKKworUFYgPSAidjIwMTUuMDcrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmRlbnguZGUvdS1ib290LmdpdDticmFuY2g9bWFzdGVyIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitFWFRSQV9PRU1BS0UgPSAnQ1JPU1NfQ09NUElMRT0iJHtUQVJHRVRfUFJFRklYfSIgQ0M9IiR7Q0N9ICR7Q0ZMQUdTfSAke0xERkxBR1N9IiBTVFJJUD10cnVlIFY9MScKKworZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSBzYW5kYm94X2RlZmNvbmZpZworCW9lX3J1bm1ha2UgY3Jvc3NfdG9vbHMgTk9fU0RMPTEKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1IHRvb2xzL21raW1hZ2UgJHtEfSR7YmluZGlyfS91Ym9vdC1ta2ltYWdlCisJbG4gLXNmIHVib290LW1raW1hZ2UgJHtEfSR7YmluZGlyfS9ta2ltYWdlCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjZmZmQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QuaW5jCkBAIC0wLDAgKzEsMjkwIEBACitTVU1NQVJZID0gIlVuaXZlcnNhbCBCb290IExvYWRlciBmb3IgZW1iZWRkZWQgZGV2aWNlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZGVueC5kZS93aWtpL1UtQm9vdC9XZWJIb21lIgorU0VDVElPTiA9ICJib290bG9hZGVycyIKK1BST1ZJREVTID0gInZpcnR1YWwvYm9vdGxvYWRlciIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MaWNlbnNlcy9SRUFETUU7bWQ1PTA1MDdjZDdkYThlN2FkNmQ2NzAxOTI2ZWM5Yjg0Yzk1IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5kZW54LmRlL3UtYm9vdC5naXQ7YnJhbmNoPW1hc3RlciIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCB1Ym9vdC1jb25maWcgZGVwbG95CisKK0VYVFJBX09FTUFLRSA9ICdDUk9TU19DT01QSUxFPSR7VEFSR0VUX1BSRUZJWH0gQ0M9IiR7VEFSR0VUX1BSRUZJWH1nY2MgJHtUT09MQ0hBSU5fT1BUSU9OU30iIFY9MScKK0VYVFJBX09FTUFLRSArPSAnSE9TVENDPSIke0JVSUxEX0NDfSAke0JVSUxEX0NGTEFHU30gJHtCVUlMRF9MREZMQUdTfSInCisKK1BBQ0tBR0VDT05GSUcgPz89ICJvcGVuc3NsIgorIyB1LWJvb3Qgd2lsbCBjb21waWxlIGl0cyBvd24gdG9vbHMgZHVyaW5nIHRoZSBidWlsZCwgd2l0aCBzcGVjaWZpYworIyBjb25maWd1cmF0aW9ucyAoYWthIHdoZW4gQ09ORklHX0ZJVF9TSUdOQVRVUkUgaXMgZW5hYmxlZCkgb3BlbnNzbCBpcyBuZWVkZWQgYXMKKyMgYSBob3N0IGJ1aWxkIGRlcGVuZGVuY3kuCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIiwsb3BlbnNzbC1uYXRpdmUiCisKKyMgQWxsb3cgc2V0dGluZyBhbiBhZGRpdGlvbmFsIHZlcnNpb24gc3RyaW5nIHRoYXQgd2lsbCBiZSBwaWNrZWQgdXAgYnkgdGhlCisjIHUtYm9vdCBidWlsZCBzeXN0ZW0gYW5kIGFwcGVuZGVkIHRvIHRoZSB1LWJvb3QgdmVyc2lvbi4gIElmIHRoZSAuc2NtdmVyc2lvbgorIyBmaWxlIGFscmVhZHkgZXhpc3RzIGl0IHdpbGwgbm90IGJlIG92ZXJ3cml0dGVuLgorVUJPT1RfTE9DQUxWRVJTSU9OID89ICIiCisKKyMgU29tZSB2ZXJzaW9ucyBvZiB1LWJvb3QgdXNlIC5iaW4gYW5kIG90aGVycyB1c2UgLmltZy4gIEJ5IGRlZmF1bHQgdXNlIC5iaW4KKyMgYnV0IGVuYWJsZSBpbmRpdmlkdWFsIHJlY2lwZXMgdG8gY2hhbmdlIHRoaXMgdmFsdWUuCitVQk9PVF9TVUZGSVggPz89ICJiaW4iCitVQk9PVF9JTUFHRSA/PSAidS1ib290LSR7TUFDSElORX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9TVUZGSVh9IgorVUJPT1RfQklOQVJZID89ICJ1LWJvb3QuJHtVQk9PVF9TVUZGSVh9IgorVUJPT1RfU1lNTElOSyA/PSAidS1ib290LSR7TUFDSElORX0uJHtVQk9PVF9TVUZGSVh9IgorVUJPT1RfTUFLRV9UQVJHRVQgPz0gImFsbCIKKworIyBPdXRwdXQgdGhlIEVMRiBnZW5lcmF0ZWQuIFNvbWUgcGxhdGZvcm1zIGNhbiB1c2UgdGhlIEVMRiBmaWxlIGFuZCBkaXJlY3RseQorIyBsb2FkIGl0IChKVEFHIGJvb3RpbmcsIFFFTVUpIGFkZGl0aW9uYWxseSB0aGUgRUxGIGNhbiBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcKKyMgcHVycG9zZXMuCitVQk9PVF9FTEYgPz0gIiIKK1VCT09UX0VMRl9TVUZGSVggPz0gImVsZiIKK1VCT09UX0VMRl9JTUFHRSA/PSAidS1ib290LSR7TUFDSElORX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfSIKK1VCT09UX0VMRl9CSU5BUlkgPz0gInUtYm9vdC4ke1VCT09UX0VMRl9TVUZGSVh9IgorVUJPT1RfRUxGX1NZTUxJTksgPz0gInUtYm9vdC0ke01BQ0hJTkV9LiR7VUJPT1RfRUxGX1NVRkZJWH0iCisKKyMgU29tZSB2ZXJzaW9ucyBvZiB1LWJvb3QgYnVpbGQgYW4gU1BMIChTZWNvbmQgUHJvZ3JhbSBMb2FkZXIpIGltYWdlIHRoYXQKKyMgc2hvdWxkIGJlIHBhY2thZ2VkIGFsb25nIHdpdGggdGhlIHUtYm9vdCBiaW5hcnkgYXMgd2VsbCBhcyBwbGFjZWQgaW4gdGhlCisjIGRlcGxveSBkaXJlY3RvcnkuICBGb3IgdGhvc2UgdmVyc2lvbnMgdGhleSBjYW4gc2V0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzCisjIHRvIGFsbG93IHBhY2thZ2luZyB0aGUgU1BMLgorU1BMX0JJTkFSWSA/PSAiIgorU1BMX0lNQUdFID89ICIke1NQTF9CSU5BUll9LSR7TUFDSElORX0tJHtQVn0tJHtQUn0iCitTUExfU1lNTElOSyA/PSAiJHtTUExfQklOQVJZfS0ke01BQ0hJTkV9IgorCisjIEFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIGEgc2NyaXB0IGNhbiBiZSBpbnN0YWxsZWQgYWxvbmdzaWRlCisjIHUtYm9vdCB0byBiZSB1c2VkIGF1dG9tYXRpY2FsbHkgb24gYm9vdC4gIFRoaXMgZmlsZSwgdHlwaWNhbGx5ICd1RW52LnR4dCcKKyMgb3IgJ2Jvb3Quc2NyJywgc2hvdWxkIGJlIHBhY2thZ2VkIGFsb25nIHdpdGggdS1ib290IGFzIHdlbGwgYXMgcGxhY2VkIGluIHRoZQorIyBkZXBsb3kgZGlyZWN0b3J5LiAgTWFjaGluZSBjb25maWd1cmF0aW9ucyBuZWVkaW5nIG9uZSBvZiB0aGVzZSBmaWxlcyBzaG91bGQKKyMgaW5jbHVkZSBpdCBpbiB0aGUgU1JDX1VSSSBhbmQgc2V0IHRoZSBVQk9PVF9FTlYgcGFyYW1ldGVyLgorVUJPT1RfRU5WX1NVRkZJWCA/PSAidHh0IgorVUJPT1RfRU5WID89ICIiCitVQk9PVF9FTlZfQklOQVJZID89ICIke1VCT09UX0VOVn0uJHtVQk9PVF9FTlZfU1VGRklYfSIKK1VCT09UX0VOVl9JTUFHRSA/PSAiJHtVQk9PVF9FTlZ9LSR7TUFDSElORX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTlZfU1VGRklYfSIKK1VCT09UX0VOVl9TWU1MSU5LID89ICIke1VCT09UX0VOVn0tJHtNQUNISU5FfS4ke1VCT09UX0VOVl9TVUZGSVh9IgorCitkb19jb21waWxlICgpIHsKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xkLWlzLWdvbGQnLCAnbGQtaXMtZ29sZCcsICcnLCBkKX0iID0gImxkLWlzLWdvbGQiIF0gOyB0aGVuCisJCXNlZCAtaSAncy8kKENST1NTX0NPTVBJTEUpbGQkLyQoQ1JPU1NfQ09NUElMRSlsZC5iZmQvZycgY29uZmlnLm1rCisJZmkKKworCXVuc2V0IExERkxBR1MKKwl1bnNldCBDRkxBR1MKKwl1bnNldCBDUFBGTEFHUworCisJaWYgWyAhIC1lICR7Qn0vLnNjbXZlcnNpb24gLWEgISAtZSAke1N9Ly5zY212ZXJzaW9uIF0KKwl0aGVuCisJCWVjaG8gJHtVQk9PVF9MT0NBTFZFUlNJT059ID4gJHtCfS8uc2NtdmVyc2lvbgorCQllY2hvICR7VUJPT1RfTE9DQUxWRVJTSU9OfSA+ICR7U30vLnNjbXZlcnNpb24KKwlmaQorICAgIAorICAgIGlmIFsgIngke1VCT09UX0NPTkZJR30iICE9ICJ4IiBdCisgICAgdGhlbgorICAgICAgICBmb3IgY29uZmlnIGluICR7VUJPT1RfTUFDSElORX07IGRvCisgICAgICAgICAgICBpPWBleHByICRpICsgMWA7CisgICAgICAgICAgICBmb3IgdHlwZSAgaW4gJHtVQk9PVF9DT05GSUd9OyBkbworICAgICAgICAgICAgICAgIGo9YGV4cHIgJGogKyAxYDsKKyAgICAgICAgICAgICAgICBpZiBbICRqIC1lcSAkaSBdCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICBvZV9ydW5tYWtlIE89JHtjb25maWd9ICR7Y29uZmlnfQorICAgICAgICAgICAgICAgICAgICBvZV9ydW5tYWtlIE89JHtjb25maWd9ICR7VUJPT1RfTUFLRV9UQVJHRVR9CisgICAgICAgICAgICAgICAgICAgIGNwICAke1N9LyR7Y29uZmlnfS8ke1VCT09UX0JJTkFSWX0gICR7U30vJHtjb25maWd9L3UtYm9vdC0ke3R5cGV9LiR7VUJPT1RfU1VGRklYfQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgICB1bnNldCAgagorICAgICAgICBkb25lCisgICAgICAgIHVuc2V0ICBpCisgICAgZWxzZQorICAgICAgICBvZV9ydW5tYWtlICR7VUJPT1RfTUFDSElORX0KKyAgICAgICAgb2VfcnVubWFrZSAke1VCT09UX01BS0VfVEFSR0VUfQorICAgIGZpCisKK30KKworZG9faW5zdGFsbCAoKSB7CisgICAgaWYgWyAieCR7VUJPT1RfQ09ORklHfSIgIT0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGZvciBjb25maWcgaW4gJHtVQk9PVF9NQUNISU5FfTsgZG8KKyAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKKyAgICAgICAgICAgIGZvciB0eXBlIGluICR7VUJPT1RfQ09ORklHfTsgZG8KKyAgICAgICAgICAgICAgICBqPWBleHByICRqICsgMWA7CisgICAgICAgICAgICAgICAgaWYgWyAkaiAtZXEgJGkgXQorICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9L2Jvb3QKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7Y29uZmlnfS91LWJvb3QtJHt0eXBlfS4ke1VCT09UX1NVRkZJWH0gJHtEfS9ib290L3UtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfU1VGRklYfQorICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9TVUZGSVh9ICR7RH0vYm9vdC8ke1VCT09UX0JJTkFSWX0tJHt0eXBlfQorICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9TVUZGSVh9ICR7RH0vYm9vdC8ke1VCT09UX0JJTkFSWX0KKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgdW5zZXQgIGoKKyAgICAgICAgZG9uZQorICAgICAgICB1bnNldCAgaQorICAgIGVsc2UKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9L2Jvb3QKKyAgICAgICAgaW5zdGFsbCAke1N9LyR7VUJPT1RfQklOQVJZfSAke0R9L2Jvb3QvJHtVQk9PVF9JTUFHRX0KKyAgICAgICAgbG4gLXNmICR7VUJPT1RfSU1BR0V9ICR7RH0vYm9vdC8ke1VCT09UX0JJTkFSWX0KKyAgICBmaQorCisgICAgaWYgWyAieCR7VUJPT1RfRUxGfSIgIT0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGlmIFsgIngke1VCT09UX0NPTkZJR30iICE9ICJ4IiBdCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGZvciBjb25maWcgaW4gJHtVQk9PVF9NQUNISU5FfTsgZG8KKyAgICAgICAgICAgICAgICBpPWBleHByICRpICsgMWA7CisgICAgICAgICAgICAgICAgZm9yIHR5cGUgaW4gJHtVQk9PVF9DT05GSUd9OyBkbworICAgICAgICAgICAgICAgICAgICBqPWBleHByICRqICsgMWA7CisgICAgICAgICAgICAgICAgICAgIGlmIFsgJGogLWVxICRpIF0KKyAgICAgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7Y29uZmlnfS8ke1VCT09UX0VMRn0gJHtEfS9ib290L3UtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VMRl9TVUZGSVh9ICR7RH0vYm9vdC8ke1VCT09UX0JJTkFSWX0tJHt0eXBlfQorICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0gJHtEfS9ib290LyR7VUJPT1RfQklOQVJZfQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICB1bnNldCBqCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgICB1bnNldCBpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke1VCT09UX0VMRn0gJHtEfS9ib290LyR7VUJPT1RfRUxGX0lNQUdFfQorICAgICAgICAgICAgbG4gLXNmICR7VUJPT1RfRUxGX0lNQUdFfSAke0R9L2Jvb3QvJHtVQk9PVF9FTEZfQklOQVJZfQorICAgICAgICBmaQorICAgIGZpCisKKyAgICBpZiBbIC1lICR7V09SS0RJUn0vZndfZW52LmNvbmZpZyBdIDsgdGhlbgorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgICAgIGluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vZndfZW52LmNvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9md19lbnYuY29uZmlnCisgICAgZmkKKworICAgIGlmIFsgIngke1NQTF9CSU5BUll9IiAhPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgaWYgWyAieCR7VUJPT1RfQ09ORklHfSIgIT0gIngiIF0gICAKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgZm9yIGNvbmZpZyBpbiAke1VCT09UX01BQ0hJTkV9OyBkbworICAgICAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKKyAgICAgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgICAgIGo9YGV4cHIgJGogKyAxYDsKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAkaiAtZXEgJGkgXQorICAgICAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7Y29uZmlnfS8ke1NQTF9CSU5BUll9ICR7RH0vYm9vdC8ke1NQTF9JTUFHRX0tJHt0eXBlfS0ke1BWfS0ke1BSfQorICAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiAke1NQTF9JTUFHRX0tJHt0eXBlfS0ke1BWfS0ke1BSfSAke0R9L2Jvb3QvJHtTUExfQklOQVJZfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9ICR7RH0vYm9vdC8ke1NQTF9CSU5BUll9CisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIHVuc2V0ICBqCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgICB1bnNldCAgaQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtTUExfQklOQVJZfSAke0R9L2Jvb3QvJHtTUExfSU1BR0V9CisgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9ICR7RH0vYm9vdC8ke1NQTF9CSU5BUll9CisgICAgICAgIGZpCisgICAgZmkKKworICAgIGlmIFsgIngke1VCT09UX0VOVn0iICE9ICJ4IiBdCisgICAgdGhlbgorICAgICAgICBpbnN0YWxsICR7V09SS0RJUn0vJHtVQk9PVF9FTlZfQklOQVJZfSAke0R9L2Jvb3QvJHtVQk9PVF9FTlZfSU1BR0V9CisgICAgICAgIGxuIC1zZiAke1VCT09UX0VOVl9JTUFHRX0gJHtEfS9ib290LyR7VUJPT1RfRU5WX0JJTkFSWX0KKyAgICBmaQorfQorCitGSUxFU18ke1BOfSA9ICIvYm9vdCAke3N5c2NvbmZkaXJ9IgorIyBFbnN1cmUgdGhlIHNwbGl0IGRlYnVnIHBhcnQgb2YgYW55IGVsZiBmaWxlcyBhcmUgcHV0IGludG8gZGJnCitGSUxFU18ke1BOfS1kYmcgKz0gIi9ib290Ly5kZWJ1ZyIKKworZG9fZGVwbG95ICgpIHsKKyAgICBpZiBbICJ4JHtVQk9PVF9DT05GSUd9IiAhPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgZm9yIGNvbmZpZyBpbiAke1VCT09UX01BQ0hJTkV9OyBkbworICAgICAgICAgICAgaT1gZXhwciAkaSArIDFgOworICAgICAgICAgICAgZm9yIHR5cGUgaW4gJHtVQk9PVF9DT05GSUd9OyBkbworICAgICAgICAgICAgICAgIGo9YGV4cHIgJGogKyAxYDsKKyAgICAgICAgICAgICAgICBpZiBbICRqIC1lcSAkaSBdCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1kICR7REVQTE9ZRElSfQorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtjb25maWd9L3UtYm9vdC0ke3R5cGV9LiR7VUJPT1RfU1VGRklYfSAke0RFUExPWURJUn0vdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9TVUZGSVh9CisgICAgICAgICAgICAgICAgICAgIGNkICR7REVQTE9ZRElSfQorICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9TVUZGSVh9ICR7VUJPT1RfU1lNTElOS30tJHt0eXBlfQorICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9TVUZGSVh9ICR7VUJPT1RfU1lNTElOS30KKyAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfU1VGRklYfSAke1VCT09UX0JJTkFSWX0tJHt0eXBlfQorICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9TVUZGSVh9ICR7VUJPT1RfQklOQVJZfQorICAgICAgICAgICAgICAgIGZpIAorICAgICAgICAgICAgZG9uZSAKKyAgICAgICAgICAgIHVuc2V0ICBqCisgICAgICAgIGRvbmUKKyAgICAgICAgdW5zZXQgIGkKKyAgICBlbHNlCisgICAgICAgIGluc3RhbGwgLWQgJHtERVBMT1lESVJ9CisgICAgICAgIGluc3RhbGwgJHtTfS8ke1VCT09UX0JJTkFSWX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfSU1BR0V9CisgICAgICAgIGNkICR7REVQTE9ZRElSfQorICAgICAgICBybSAtZiAke1VCT09UX0JJTkFSWX0gJHtVQk9PVF9TWU1MSU5LfQorICAgICAgICBsbiAtc2YgJHtVQk9PVF9JTUFHRX0gJHtVQk9PVF9TWU1MSU5LfQorICAgICAgICBsbiAtc2YgJHtVQk9PVF9JTUFHRX0gJHtVQk9PVF9CSU5BUll9CisgICBmaQorCisgICAgaWYgWyAieCR7VUJPT1RfRUxGfSIgIT0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGlmIFsgIngke1VCT09UX0NPTkZJR30iICE9ICJ4IiBdCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGZvciBjb25maWcgaW4gJHtVQk9PVF9NQUNISU5FfTsgZG8KKyAgICAgICAgICAgICAgICBpPWBleHByICRpICsgMWA7CisgICAgICAgICAgICAgICAgZm9yIHR5cGUgaW4gJHtVQk9PVF9DT05GSUd9OyBkbworICAgICAgICAgICAgICAgICAgICBqPWBleHByICRqICsgMWA7CisgICAgICAgICAgICAgICAgICAgIGlmIFsgJGogLWVxICRpIF0KKyAgICAgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7Y29uZmlnfS8ke1VCT09UX0VMRn0gJHtERVBMT1lESVJ9L3UtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VMRl9TVUZGSVh9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VMRl9CSU5BUll9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VMRl9TVUZGSVh9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VMRl9CSU5BUll9CisgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTEZfU1lNTElOS30tJHt0eXBlfQorICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX1NZTUxJTkt9CisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIHVuc2V0IGoKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIHVuc2V0IGkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7VUJPT1RfRUxGfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTEZfSU1BR0V9CisgICAgICAgICAgICBsbiAtc2YgJHtVQk9PVF9FTEZfSU1BR0V9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VMRl9CSU5BUll9CisgICAgICAgICAgICBsbiAtc2YgJHtVQk9PVF9FTEZfSU1BR0V9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VMRl9TWU1MSU5LfQorICAgICAgICBmaQorICAgIGZpCisKKworICAgICBpZiBbICJ4JHtTUExfQklOQVJZfSIgIT0gIngiIF0KKyAgICAgdGhlbgorICAgICAgICAgaWYgWyAieCR7VUJPT1RfQ09ORklHfSIgIT0gIngiIF0gICAKKyAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICBmb3IgY29uZmlnIGluICR7VUJPT1RfTUFDSElORX07IGRvCisgICAgICAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKKyAgICAgICAgICAgICAgICAgZm9yIHR5cGUgaW4gJHtVQk9PVF9DT05GSUd9OyBkbworICAgICAgICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgICAgICAgICAgaWYgWyAkaiAtZXEgJGkgXQorICAgICAgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke2NvbmZpZ30vJHtTUExfQklOQVJZfSAke0RFUExPWURJUn0vJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0KKyAgICAgICAgICAgICAgICAgICAgICAgICBybSAtZiAke0RFUExPWURJUn0vJHtTUExfQklOQVJZfSAke0RFUExPWURJUn0vJHtTUExfU1lNTElOS30tJHt0eXBlfQorICAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiAke1NQTF9JTUFHRX0tJHt0eXBlfS0ke1BWfS0ke1BSfSAke0RFUExPWURJUn0vJHtTUExfQklOQVJZfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9ICR7REVQTE9ZRElSfS8ke1NQTF9CSU5BUll9CisgICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9ICR7REVQTE9ZRElSfS8ke1NQTF9TWU1MSU5LfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9ICR7REVQTE9ZRElSfS8ke1NQTF9TWU1MSU5LfQorICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICB1bnNldCAgagorICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICB1bnNldCAgaQorICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke1NQTF9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1NQTF9JTUFHRX0KKyAgICAgICAgICAgICBybSAtZiAke0RFUExPWURJUn0vJHtTUExfQklOQVJZfSAke0RFUExPWURJUn0vJHtTUExfU1lNTElOS30KKyAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9ICR7REVQTE9ZRElSfS8ke1NQTF9CSU5BUll9CisgICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfSAke0RFUExPWURJUn0vJHtTUExfU1lNTElOS30KKyAgICAgICAgIGZpCisgICAgIGZpCisKKworICAgIGlmIFsgIngke1VCT09UX0VOVn0iICE9ICJ4IiBdCisgICAgdGhlbgorICAgICAgICBpbnN0YWxsICR7V09SS0RJUn0vJHtVQk9PVF9FTlZfQklOQVJZfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTlZfSU1BR0V9CisgICAgICAgIHJtIC1mICR7REVQTE9ZRElSfS8ke1VCT09UX0VOVl9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VOVl9TWU1MSU5LfQorICAgICAgICBsbiAtc2YgJHtVQk9PVF9FTlZfSU1BR0V9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VOVl9CSU5BUll9CisgICAgICAgIGxuIC1zZiAke1VCT09UX0VOVl9JTUFHRX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRU5WX1NZTUxJTkt9CisgICAgZmkKK30KKworYWRkdGFzayBkZXBsb3kgYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX2NvbXBpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LzAwMDEtdS1ib290LW1wYzg1eHgtdS1ib290LS5sZHMtcmVtb3ZlLV9HTE9CQUxfT0ZGU0VUX1RBQi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LzAwMDEtdS1ib290LW1wYzg1eHgtdS1ib290LS5sZHMtcmVtb3ZlLV9HTE9CQUxfT0ZGU0VUX1RBQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmJjZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QvMDAwMS11LWJvb3QtbXBjODV4eC11LWJvb3QtLmxkcy1yZW1vdmUtX0dMT0JBTF9PRkZTRVRfVEFCLnBhdGNoCkBAIC0wLDAgKzEsMTg0IEBACitGcm9tIDkyNTk4ZTE1MTViMmVjMzg1MWFmMWYwNjQwNzVkMDQ1N2YwMTI3MmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBaaGVuaHVhIEx1byA8emhlbmh1YS5sdW9AZnJlZXNjYWxlLmNvbT4KK0RhdGU6IE1vbiwgOSBGZWIgMjAxNSAxODozMzo1NiArMDgwMAorU3ViamVjdDogW1BBVENIXSBwb3dlcnBjL2NwdS8qL3UtYm9vdCoubGRzOiByZW1vdmUgX0dMT0JBTF9PRkZTRVRfVEFCTEVfCisgZGVmaW5pdGlvbgorT3JnYW5pemF0aW9uOiBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KKworSW4gYmludXRpbHMtMi4yNSwgdGhlIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBzeW1ib2xzIGRlZmluZWQgYnkgUFJPVklERSBpbgordS1ib290LmxkcyBvdmVycmlkZXMgdGhlIGxpbmtlciBidWlsdC1pbiBzeW1ib2xzCisoaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9naXQvZ2l0d2ViLmNnaT9wPWJpbnV0aWxzLWdkYi5naXQ7YT1jb21taXRkaWZmO2g9Yjg5MzM5N2E0YjEzMTY2MTBmNDk4MTkzNDQ4MTc3MTVlNDMwNWRlOSksCitzbyB0aGUgbGlua2VyIGlzIHRyZWF0aW5nIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBhcyBhIGRlZmluaXRpb24gaW50byB0aGUgLnJlbG9jIHNlY3Rpb24uCisKK1RvIGFsaWduIHdpdGggdGhlIGNoYW5nZSBvZiBiaW51dGlscy0yLjI1LCB0aGUgX0dMT0JBTF9PRkZTRVRfVEFCTEVfIHN5bWJvbAorc2hvdWxkIG5vdCBiZSBkZWZpbmVkIGluIHNlY3Rpb25zLCBhbmQgdGhlIHN5bWJvbHMgaW4gbGlua2VyIGdlbmVyYXRlZCAuZ290CitzZWN0aW9uIHNob3VsZCBiZSB1c2VkKGh0dHBzOi8vc291cmNld2FyZS5vcmcvbWwvYmludXRpbHMvMjAwOC0wOS9tc2cwMDEyMi5odG1sKS4KKworRml4ZWQgdGhlIGZvbGxvd2luZyBidWlsZCBlcnJvcnMgd2l0aCBiaW51dGlscy0yLjI1OgorfCBwb3dlcnBjLXBva3ktbGludXgtZ251c3BlLWxkLmJmZDogX0dMT0JBTF9PRkZTRVRfVEFCTEVfIG5vdCBkZWZpbmVkIGluIGxpbmtlciBjcmVhdGVkIC5nb3QKKworU2lnbmVkLW9mZi1ieTogWmhlbmh1YSBMdW8gPHpoZW5odWEubHVvQGZyZWVzY2FsZS5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM1MTJ4L3UtYm9vdC5sZHMgICAgICAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzV4eC91LWJvb3QubGRzICAgICAgICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjNXh4eC91LWJvb3QubGRzICAgICAgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM4MjYwL3UtYm9vdC5sZHMgICAgICAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LXNwbC5sZHMgICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3QubGRzICAgICAgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kLmxkcyAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmRfc3BsLmxkcyB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3Qtc3BsLmxkcyAgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC5sZHMgICAgICAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzg2eHgvdS1ib290LmxkcyAgICAgICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L3UtYm9vdC5sZHMgICAgICAgICAgIHwgMSAtCisgMTIgZmlsZXMgY2hhbmdlZCwgMTIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzUxMngvdS1ib290LmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjNTEyeC91LWJvb3QubGRzCitpbmRleCA5NjU4YjIxLi5iMzJmNzRlIDEwMDY0NAorLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM1MTJ4L3UtYm9vdC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjNTEyeC91LWJvb3QubGRzCitAQCAtMjQsNyArMjQsNiBAQCBTRUNUSU9OUworICAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmdvdDIpKQorICAgICBLRUVQKCooLmdvdCkpCistICAgIFBST1ZJREUoX0dMT0JBTF9PRkZTRVRfVEFCTEVfID0gLiArIDQpOworICAgICBfRklYVVBfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5maXh1cCkpCisgICAgICooLmZpeHVwKQorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjNXh4L3UtYm9vdC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eC91LWJvb3QubGRzCitpbmRleCA3MTk4NDY1Li42YTUzNTcxIDEwMDY0NAorLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHgvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHgvdS1ib290LmxkcworQEAgLTMzLDcgKzMzLDYgQEAgU0VDVElPTlMKKyAgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5nb3QyKSkKKyAgICAgS0VFUCgqKC5nb3QpKQorLSAgICBQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZml4dXApKQorICAgfQorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjNXh4eC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHh4L3UtYm9vdC5sZHMKK2luZGV4IGNkOWUyM2YuLmFhODBkM2QgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eHgvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHh4L3UtYm9vdC5sZHMKK0BAIC0yOCw3ICsyOCw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgyNjAvdS1ib290LmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODI2MC91LWJvb3QubGRzCitpbmRleCA1MGNiZjg1Li40NjlmYzI5IDEwMDY0NAorLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4MjYwL3UtYm9vdC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODI2MC91LWJvb3QubGRzCitAQCAtMjcsNyArMjcsNiBAQCBTRUNUSU9OUworICAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmdvdDIpKQorICAgICBLRUVQKCooLmdvdCkpCistICAgIFBST1ZJREUoX0dMT0JBTF9PRkZTRVRfVEFCTEVfID0gLiArIDQpOworICAgICBfRklYVVBfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5maXh1cCkpCisgICB9CitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC1zcGwubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC1zcGwubGRzCitpbmRleCA3NzQ3NzJiLi40MTAxZWFmIDEwMDY0NAorLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC1zcGwubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LXNwbC5sZHMKK0BAIC0yNCw3ICsyNCw2IEBAIFNFQ1RJT05TCisgCQlfR09UMl9UQUJMRV8gPSAuOworIAkJS0VFUCgqKC5nb3QyKSkKKyAJCUtFRVAoKiguZ290KSkKKy0JCVBST1ZJREUoX0dMT0JBTF9PRkZTRVRfVEFCTEVfID0gLiArIDQpOworIAl9CisgCV9fZ290Ml9lbnRyaWVzID0gKChfR0xPQkFMX09GRlNFVF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+IDIpIC0gMTsKKyAKK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3QubGRzCitpbmRleCAzYzE3N2ZhLi5kYmQ4YmJlIDEwMDY0NAorLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3QubGRzCitAQCAtMjYsNyArMjYsNiBAQCBTRUNUSU9OUworICAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmdvdDIpKQorICAgICBLRUVQKCooLmdvdCkpCistICAgIFBST1ZJREUoX0dMT0JBTF9PRkZTRVRfVEFCTEVfID0gLiArIDQpOworICAgICBfRklYVVBfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5maXh1cCkpCisgICB9CitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kLmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZC5sZHMKK2luZGV4IGY5MzNiMjEuLjAzOTlmOTMgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmQubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmQubGRzCitAQCAtNDQsNyArNDQsNiBAQCBTRUNUSU9OUworICAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmdvdDIpKQorICAgICBLRUVQKCooLmdvdCkpCistICAgIFBST1ZJREUoX0dMT0JBTF9PRkZTRVRfVEFCTEVfID0gLiArIDQpOworICAgICBfRklYVVBfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5maXh1cCkpCisgICB9CitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kX3NwbC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmRfc3BsLmxkcworaW5kZXggYjgzYzU1My4uZjA0NDU2NCAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZF9zcGwubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmRfc3BsLmxkcworQEAgLTIyLDcgKzIyLDYgQEAgU0VDVElPTlMKKyAJCV9HT1QyX1RBQkxFXyA9IC47CisgCQlLRUVQKCooLmdvdDIpKQorIAkJS0VFUCgqKC5nb3QpKQorLQkJUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgCQlfRklYVVBfVEFCTEVfID0gLjsKKyAJCUtFRVAoKiguZml4dXApKQorIAl9CitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1zcGwubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1zcGwubGRzCitpbmRleCA1YWU3YjNlLi44ODlhNGMyIDEwMDY0NAorLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1zcGwubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LXNwbC5sZHMKK0BAIC0yOSw3ICsyOSw2IEBAIFNFQ1RJT05TCisgCQlfR09UMl9UQUJMRV8gPSAuOworIAkJS0VFUCgqKC5nb3QyKSkKKyAJCUtFRVAoKiguZ290KSkKKy0JCVBST1ZJREUoX0dMT0JBTF9PRkZTRVRfVEFCTEVfID0gLiArIDQpOworIAkJX0ZJWFVQX1RBQkxFXyA9IC47CisgCQlLRUVQKCooLmZpeHVwKSkKKyAJfQorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC5sZHMKK2luZGV4IDJjZjBiMjUuLmYxNWVhZjMgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC5sZHMKK0BAIC01MCw3ICs1MCw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg2eHgvdS1ib290LmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODZ4eC91LWJvb3QubGRzCitpbmRleCA1ODQ2N2MyLi42YzQ4ZjQwIDEwMDY0NAorLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4Nnh4L3UtYm9vdC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODZ4eC91LWJvb3QubGRzCitAQCAtMzIsNyArMzIsNiBAQCBTRUNUSU9OUworICAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmdvdDIpKQorICAgICBLRUVQKCooLmdvdCkpCistICAgIFBST1ZJREUoX0dMT0JBTF9PRkZTRVRfVEFCTEVfID0gLiArIDQpOworICAgICBfRklYVVBfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5maXh1cCkpCisgICB9CitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvdS1ib290LmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L3UtYm9vdC5sZHMKK2luZGV4IDE5ODA1MDguLjU1ZGQ0ZTEgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC91LWJvb3QubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC91LWJvb3QubGRzCitAQCAtNDYsNyArNDYsNiBAQCBTRUNUSU9OUworICAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmdvdDIpKQorICAgICBLRUVQKCooLmdvdCkpCistICAgIFBST1ZJREUoX0dMT0JBTF9PRkZTRVRfVEFCTEVfID0gLiArIDQpOworICAgICBfRklYVVBfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5maXh1cCkpCisgICB9CistLSAKKzIuNC42CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290XzIwMTUuMDcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdF8yMDE1LjA3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NDZjMzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdF8yMDE1LjA3LmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgdS1ib290LmluYworCitERVBFTkRTICs9ICJkdGMtbmF0aXZlIgorCisjIFRoaXMgcmV2aXNpb24gY29ycmVzcG9uZHMgdG8gdGhlIHRhZyAidjIwMTUuMDciCisjIFdlIHVzZSB0aGUgcmV2aXNpb24gaW4gb3JkZXIgdG8gYXZvaWQgaGF2aW5nIHRvIGZldGNoIGl0IGZyb20gdGhlCisjIHJlcG8gZHVyaW5nIHBhcnNlCitTUkNSRVYgPSAiMzM3MTFiZGQ0YTRkY2U5NDJmYjVhZTg1YTY4ODk5YTgzNTdiZGQ5NCIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtdS1ib290LW1wYzg1eHgtdS1ib290LS5sZHMtcmVtb3ZlLV9HTE9CQUxfT0ZGU0VUX1RBQi5wYXRjaCIKKworUFYgPSAidjIwMTUuMDcrZ2l0JHtTUkNQVn0iCisKK0VYVFJBX09FTUFLRV9hcHBlbmQgPSAiIEtDRkxBR1M9LWZnbnU4OS1pbmxpbmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3VzYmluaXQvdXNiaW5pdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmE0NGI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3VzYmluaXQvdXNiaW5pdC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkluaXRzY3JpcHQgZm9yIGVuYWJsaW5nIFVTQiBnYWRnZXQgRXRoZXJuZXQiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L0NPUFlJTkcuR1BMO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiZmlsZTovL3VzYi1nZXRoZXIgXAorICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEwiCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisgICAgaW5zdGFsbCB1c2ItZ2V0aGVyICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorfQorCitpbmhlcml0IHVwZGF0ZS1yYy5kIGFsbGFyY2gKKworSU5JVFNDUklQVF9OQU1FID0gInVzYi1nZXRoZXIiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5OSA1IDIgLiBzdG9wIDIwIDAgMSA2IC4iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0L0NPUFlJTkcuR1BMIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3VzYmluaXQvdXNiaW5pdC9DT1BZSU5HLkdQTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTExOTA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3VzYmluaXQvdXNiaW5pdC9DT1BZSU5HLkdQTApAQCAtMCwwICsxLDMzOSBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0L3VzYi1nZXRoZXIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0L3VzYi1nZXRoZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTgwYTBiYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2Jpbml0L3VzYmluaXQvdXNiLWdldGhlcgpAQCAtMCwwICsxLDIzIEBACisjISAvYmluL3NoCisjCisjIHVzYi1ldGhlciAJU3RhcnQgdXAgdGhlIGdhZGdldCB1c2IgZXRoZXJuZXQgaW50ZXJmYWNlLgorIworCitjYXNlICIkMSIgaW4KKwlzdGFydHwiIikKKwkJdGVzdCAiJFZFUkJPU0UiICE9IG5vICYmIGVjaG8gIkluaXRpYWxpemluZyBnX2V0aGVyIGdhZGdldC4uLiIKKwkJbW9kcHJvYmUgZ19ldGhlcgorCQlpZnVwIHVzYjAKKwkJOzsKKwlzdG9wKQorCQl0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiRGlzYWJsaW5nIGdfZXRoZXIuLi4iCisJCWlmZG93biB1c2IwCisJCXJtbW9kIGdfZXRoZXIKKwkJOzsKKwkqKQorCQllY2hvICJVc2FnZTogdXNiLWV0aGVyIHtzdGFydHxzdG9wfSIgPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy0wMDgvaWNvbnYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMtMDA4L2ljb252LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NTU1NjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMtMDA4L2ljb252LnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK1RoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkZXRlY3RpbmcgaWNvbnYgc3VwcG9ydCB1c2luZyBhdXRvdG9vbHMKK3VjbGliYyBkb2VzIG5vdCBoYXZlIGljb252IGltcGxlbWVudGF0aW9uIGluc2lkZSBsaWJjIGxpa2UgZ2xpYmMsIHRoZXJlZm9yZQordGhlIGV4aXN0aW5nIGNoZWNrcyB3ZXJlIG5vdCBzdWZmaWNpZW50LCBpdCB3b3JrZWQgZm9yIGdsaWJjIGJ1dCBub3QgZm9yCit1Y2xpYmMuIFRoZSBuZXcgcGF0Y2ggcG9ydGFibHkgZGV0ZWN0cyB0aGUgaWNvbnYgc3VwcG9ydCBhbmQgYWRkcyB0aGUKK2xpYmljb252IHRvIGxpbmtlciBjbWRsaW5lCisKK1RoaXMgcGF0Y2ggc2hvdWxkIGJlIHN1Ym1pdHRlZCB1cHN0cmVhbSB0b28KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiB1c2J1dGlscy0wMDgvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdXNidXRpbHMtMDA4Lm9yaWcvY29uZmlndXJlLmFjCisrKysgdXNidXRpbHMtMDA4L2NvbmZpZ3VyZS5hYworQEAgLTEwLDcgKzEwLDkgQEAgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgQUNfU1lTX0xBUkdFRklMRQorIAorIEFDX0NIRUNLX0hFQURFUlMoW2J5dGVzd2FwLmhdKQorLUFDX0NIRUNLX0ZVTkNTKFtubF9sYW5naW5mbyBpY29udl0pCisrCisrQU1fR05VX0dFVFRFWFQKKytBTV9JQ09OVgorIAorIFBLR19DSEVDS19NT0RVTEVTKExJQlVTQiwgbGlidXNiLTEuMCA+PSAxLjAuMCkKKyAKK0luZGV4OiB1c2J1dGlscy0wMDgvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1c2J1dGlscy0wMDgub3JpZy9NYWtlZmlsZS5hbQorKysrIHVzYnV0aWxzLTAwOC9NYWtlZmlsZS5hbQorQEAgLTI5LDcgKzI5LDggQEAgbHN1c2JfQ1BQRkxBR1MgPSBcCisgCisgbHN1c2JfTERBREQgPSBcCisgCSQoTElCVVNCX0xJQlMpIFwKKy0JJChVREVWX0xJQlMpCisrCSQoVURFVl9MSUJTKSBcCisrCSQoTElCSUNPTlYpCisgCisgbWFuX01BTlMgPSBcCisgCWxzdXNiLjgJXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzL0ZpeC1OVUxMLXBvaW50ZXItY3Jhc2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMvRml4LU5VTEwtcG9pbnRlci1jcmFzaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWZkYzU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzL0ZpeC1OVUxMLXBvaW50ZXItY3Jhc2gucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRml4IE5VTEwgcG9pbnRlciBjcmFzaC4KKworQmVmb3JlIHVzZSB1c2JidXNsaXN0LCB3ZSBzaG91bGQgY2hlY2sgaWYgaXQgaXMgdmFsaWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgbHN1c2ItdC5jIHwgICAgNCArKysrCisgMSBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9sc3VzYi10LmMgYi9sc3VzYi10LmMKK2luZGV4IGY2MDQxNTUuLjU4M2E0NmEgMTAwNjQ0CistLS0gYS9sc3VzYi10LmMKKysrKyBiL2xzdXNiLXQuYworQEAgLTY0Myw2ICs2NDMsMTAgQEAgc3RhdGljIHZvaWQgc29ydF9idXNzZXModm9pZCkKKyAJLyogbmVlZCB0byByZXZlcnNlIHNvcnQgYnVzIG51bWJlcnMgKi8KKyAJc3RydWN0IHVzYmJ1c25vZGUgKnQsICpwLCAqKnBwOworIAlpbnQgc3dhcHBlZDsKKysKKysJaWYgKCF1c2JidXNsaXN0KQorKwkJcmV0dXJuOworKworIAlkbyB7CisgCQlwID0gdXNiYnVzbGlzdDsKKyAJCXBwID0gJnVzYmJ1c2xpc3Q7CistLSAKKzEuNy40LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzL2ljb252LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzL2ljb252LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NTczMzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMvaWNvbnYucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGRldGVjdGluZyBpY29udiBzdXBwb3J0IHVzaW5nIGF1dG90b29scwordWNsaWJjIGRvZXMgbm90IGhhdmUgaWNvbnYgaW1wbGVtZW50YXRpb24gaW5zaWRlIGxpYmMgbGlrZSBnbGliYywgdGhlcmVmb3JlCit0aGUgZXhpc3RpbmcgY2hlY2tzIHdlcmUgbm90IHN1ZmZpY2llbnQsIGl0IHdvcmtlZCBmb3IgZ2xpYmMgYnV0IG5vdCBmb3IKK3VjbGliYy4gVGhlIG5ldyBwYXRjaCBwb3J0YWJseSBkZXRlY3RzIHRoZSBpY29udiBzdXBwb3J0IGFuZCBhZGRzIHRoZQorbGliaWNvbnYgdG8gbGlua2VyIGNtZGxpbmUKKworVGhpcyBwYXRjaCBzaG91bGQgYmUgc3VibWl0dGVkIHVwc3RyZWFtIHRvbworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHVzYnV0aWxzLTAwNy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1c2J1dGlscy0wMDcub3JpZy9jb25maWd1cmUuYWMKKysrKyB1c2J1dGlscy0wMDcvY29uZmlndXJlLmFjCitAQCAtMTAsNyArMTAsOSBAQCBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyBBQ19TWVNfTEFSR0VGSUxFCisgCisgQUNfQ0hFQ0tfSEVBREVSUyhbYnl0ZXN3YXAuaF0pCistQUNfQ0hFQ0tfRlVOQ1MoW25sX2xhbmdpbmZvIGljb252XSkKKysKKytBTV9HTlVfR0VUVEVYVAorK0FNX0lDT05WCisgCisgQUNfQVJHX0VOQUJMRSh6bGliLAorIAlBU19IRUxQX1NUUklORygtLWRpc2FibGUtemxpYixkaXNhYmxlIHN1cHBvcnQgZm9yIHpsaWIpKQorSW5kZXg6IHVzYnV0aWxzLTAwNy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVzYnV0aWxzLTAwNy5vcmlnL01ha2VmaWxlLmFtCisrKysgdXNidXRpbHMtMDA3L01ha2VmaWxlLmFtCitAQCAtMjcsNyArMjcsNyBAQCBsc3VzYl9DUFBGTEFHUyA9IFwKKyAJLUREQVRBRElSPVwiJChkYXRhZGlyKVwiCisgCisgbHN1c2JfTERBREQgPSBcCistCSQoTElCVVNCX0xJQlMpCisrCSQoTElCVVNCX0xJQlMpICQoTElCSUNPTlYpCisgCisgaWYgSEFWRV9aTElCCisgbHN1c2JfQ1BQRkxBR1MgKz0gLURIQVZFX0xJQloKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy91c2ItZGV2aWNlcy1hdm9pZC1kZXBlbmRlbmN5LW9uLWJhc2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMvdXNiLWRldmljZXMtYXZvaWQtZGVwZW5kZW5jeS1vbi1iYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjI0MWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMvdXNiLWRldmljZXMtYXZvaWQtZGVwZW5kZW5jeS1vbi1iYXNoLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gMzMzZDVmYmJjMDM0ODFmMWFhMjIyYmQ2OGMyNjA5ZGIxNjhhZTNlMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogVGh1LCAyNiBKdWwgMjAxMiAxMDozNzozMiArMDEwMAorU3ViamVjdDogW1BBVENIXSB1c2ItZGV2aWNlczogYXZvaWQgZGVwZW5kZW5jeSBvbiBiYXNoCisKK0J5IHZpcnR1ZSBvZiBoYXZpbmcgIyEvYmluL2Jhc2ggdGhpcyBzY3JpcHQgZGVjbGFyZWQgdGhhdCBpdCByZXF1aXJlcworYmFzaCwgaG93ZXZlciBtYW51YWwgZXhhbWluYXRpb24sIGNoZWNrYmFzaGlzbXMgYW5kIHRlc3RzIHdpdGggZGFzaAorYW5kIGJ1c3lib3ggc2hvdyB0aGF0IGl0IGRvZXNuJ3QgY29udGFpbiBhbnkgYmFzaGlzbXMsIHNvIGNoYW5nZSB0aGUKK2hlYWRlciB0byBhdm9pZCB0aGUgZGVwZW5kZW5jeS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorLS0tCisgdXNiLWRldmljZXMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS91c2ItZGV2aWNlcyBiL3VzYi1kZXZpY2VzCitpbmRleCBiMjA1MmUyLi4xNGE1MzU4IDEwMDc1NQorLS0tIGEvdXNiLWRldmljZXMKKysrKyBiL3VzYi1kZXZpY2VzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorICMgQ29weXJpZ2h0OiAyMDA5IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CisgIyAgICAgICAgICAgIDIwMDkgUmFuZHkgRHVubGFwIDxyZHVubGFwQHhlbm90aW1lLm5ldD4KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHNfMDA3LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzXzAwNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTNiMmJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzXzAwNy5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIkhvc3Qgc2lkZSBVU0IgY29uc29sZSB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJDb250YWlucyB0aGUgbHN1c2IgdXRpbGl0eSBmb3IgaW5zcGVjdGluZyB0aGUgZGV2aWNlcyBjb25uZWN0ZWQgdG8gdGhlIFVTQiBidXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saW51eC11c2Iub3JnIgorU0VDVElPTiA9ICJiYXNlIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitERVBFTkRTID0gImxpYnVzYiB6bGliIHZpcnR1YWwvbGliaWNvbnYiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC91dGlscy91c2IvdXNidXRpbHMvdXNidXRpbHMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3VzYi1kZXZpY2VzLWF2b2lkLWRlcGVuZGVuY3ktb24tYmFzaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9GaXgtTlVMTC1wb2ludGVyLWNyYXNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ljb252LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiZTZjNDIyOTRiZTVjOTQwZjIwODE5MGQzNDc5ZDUwYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlNjVjMjM0Y2FkZjdjODFiNmIxNTY3YzQ0MGUzYjliMzFiNDRmNTFjMjdkZjNlNDU3NDFiODg4NDhkOGIzN2QzIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIFdlIG9ubHkgbmVlZCB0aGUgY29tcHJlc3NlZCBjb3B5LCByZW1vdmUgdGhlIHVuY29tcHJlc3NlZCB2ZXJzaW9uCisJcm0gLWYgJHtEfSR7ZGF0YWRpcn0vdXNiLmlkcworfQorCitQQUNLQUdFUyArPSAiJHtQTn0taWRzIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L3BrZ2NvbmZpZyIKK0ZJTEVTXyR7UE59LWlkcyA9ICIke2RhdGFkaXJ9L3VzYioiCisKK1JERVBFTkRTXyR7UE59ID0gIiR7UE59LWlkcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlsc18wMDguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHNfMDA4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMmQ4ZDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHNfMDA4LmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiSG9zdCBzaWRlIFVTQiBjb25zb2xlIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIkNvbnRhaW5zIHRoZSBsc3VzYiB1dGlsaXR5IGZvciBpbnNwZWN0aW5nIHRoZSBkZXZpY2VzIGNvbm5lY3RlZCB0byB0aGUgVVNCIGJ1cy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmciCitTRUNUSU9OID0gImJhc2UiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKK0RFUEVORFMgPSAibGlidXNiIHpsaWIgdmlydHVhbC9saWJpY29udiBzeXN0ZW1kIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMvdXNiL3VzYnV0aWxzL3VzYnV0aWxzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly91c2ItZGV2aWNlcy1hdm9pZC1kZXBlbmRlbmN5LW9uLWJhc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vRml4LU5VTEwtcG9pbnRlci1jcmFzaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9pY29udi5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2IyMDE0OGMyZTc4NDU3N2U5MjRhN2I0YzU2MGM4ZmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNmQ1ZjE2YzI5NjFkZjM3ZTIyZTQ5MmM3MzZhM2UxNjJhOGZkZTI0NDgwZjIzYTQwZDg1Zjc5YWY4MGQzZmU5NSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIFRoaXMgdmVyc2lvbiBvZiB1c2J1dGlscyByZWxpZXMgb24gdGhlIHVkZXYgZnJvbSBzeXN0ZW1kLCBzbyB1bmxlc3MgCisjIHdlIGNhbiBkZWNvdXBsZSB1ZGV2IGZyb20gc3lzdGVtLCB3ZSByZXF1aXJlIHN5c3RlbWQgZm9yIG5vdy4KK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJzeXN0ZW1kIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vcGtnY29uZmlnIgorCitSREVQRU5EU18ke1BOfSA9ICJsaWJ1ZGV2IgorUkRFUEVORFNfJHtQTn0tcHRlc3QgPSAibGliYm9vc3Qtc3lzdGVtIGxpYmJvb3N0LXRocmVhZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvVXBkYXRlLXg4NmVtdS1mcm9tLVgub3JnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9VcGRhdGUteDg2ZW11LWZyb20tWC5vcmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA5ZTJhMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvVXBkYXRlLXg4NmVtdS1mcm9tLVgub3JnLnBhdGNoCkBAIC0wLDAgKzEsMjE3NjYgQEAKK0Zyb20gMWE0MTBhZTU4ZjI4ZWVhYjMyZmE4NzYyNmNmZDVhNjYzYmEzM2M1MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJlcm5oYXJkIFdhbGxlIDxiZXJuaGFyZEBid2FsbGUuZGU+CitEYXRlOiBUdWUsIDEzIE1heSAyMDE0IDIzOjQwOjU2ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBVcGRhdGUgeDg2ZW11IGZyb20gWC5vcmcKKworVGhpcyBjb21taXQgdXBkYXRlcyB0aGUgeDg2ZW11IGNvcHkgZnJvbSBYLm9yZyB0YXJiYWxsCisoZnRwOi8vbWlycm9yLmNzY2x1Yi51d2F0ZXJsb28uY2EveC5vcmcvY3VycmVudC9zcmMveHNlcnZlci94b3JnLXNlcnZlci0xLjEyLjIudGFyLmJ6MikuCisKK1RoaXMgZml4ZXMgYSBjb21wYXRpYmlsaXR5IGlzc3VlIGJldHdlZW4gdjg2ZCBhbmQgU2VhQklPUyBWR0EgQklPUyB3aGVyZQordGhlIGxlYWwgaW5zdHJ1Y3Rpb24gaXMgbm90IGRlY29kZWQgcHJvcGVybHkuIFJlYWQgdGhlCitodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLmVtdWxhdG9ycy5xZW11LzI3MTgwNiB0aHJlYWQgZm9yIG1vcmUKK2RldGFpbHMuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogQmVybmhhcmQgV2FsbGUgPGJlcm5oYXJkQGJ3YWxsZS5kZT4KKy0tLQorIGxpYnMveDg2ZW11L0xJQ0VOU0UgICAgICAgICAgICAgICB8ICAgMTcgLQorIGxpYnMveDg2ZW11L2RlYnVnLmMgICAgICAgICAgICAgICB8ICA1MDkgKysrLS0tCisgbGlicy94ODZlbXUvZGVjb2RlLmMgICAgICAgICAgICAgIHwgMTA2OSArKysrKystLS0tLS0KKyBsaWJzL3g4NmVtdS9mcHUuYyAgICAgICAgICAgICAgICAgfCAgNDYzICsrKy0tLQorIGxpYnMveDg2ZW11L29wcy5jICAgICAgICAgICAgICAgICB8IDI5NDAgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCisgbGlicy94ODZlbXUvb3BzMi5jICAgICAgICAgICAgICAgIHwgMTkyOSArKysrKysrKysrKy0tLS0tLS0tLS0tCisgbGlicy94ODZlbXUvcHJpbV9vcHMuYyAgICAgICAgICAgIHwgMzIxOSArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCisgbGlicy94ODZlbXUvc3lzLmMgICAgICAgICAgICAgICAgIHwgIDU4MyArKystLS0tCisgbGlicy94ODZlbXUvdmFsaWRhdGUuYyAgICAgICAgICAgIHwgICA1MiArLQorIGxpYnMveDg2ZW11L3g4NmVtdS5oICAgICAgICAgICAgICB8ICAgNzUgKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvZGVidWcuaCAgICAgICAgfCAgMTYzICstCisgbGlicy94ODZlbXUveDg2ZW11L2RlY29kZS5oICAgICAgIHwgICA1NyArLQorIGxpYnMveDg2ZW11L3g4NmVtdS9mcHUuaCAgICAgICAgICB8ICAgMjMgKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvZnB1X3JlZ3MuaCAgICAgfCAgIDQ0ICstCisgbGlicy94ODZlbXUveDg2ZW11L29wcy5oICAgICAgICAgIHwgICAgNiArLQorIGxpYnMveDg2ZW11L3g4NmVtdS9wcmltX2FzbS5oICAgICB8ICAyNTEgKystCisgbGlicy94ODZlbXUveDg2ZW11L3ByaW1fb3BzLmggICAgIHwgIDE4OCArLS0KKyBsaWJzL3g4NmVtdS94ODZlbXUvcHJpbV94ODZfZ2NjLmggfCAgIDc3ICsKKyBsaWJzL3g4NmVtdS94ODZlbXUvcmVncy5oICAgICAgICAgfCAgMTAxICstCisgbGlicy94ODZlbXUveDg2ZW11L3R5cGVzLmggICAgICAgIHwgICA1MCArLQorIGxpYnMveDg2ZW11L3g4NmVtdS94ODZlbXVpLmggICAgICB8ICAgMzQgKy0KKyAyMSBmaWxlcyBjaGFuZ2VkLCA2Mzc5IGluc2VydGlvbnMoKyksIDU0NzEgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYnMveDg2ZW11L0xJQ0VOU0UKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlicy94ODZlbXUveDg2ZW11L3ByaW1feDg2X2djYy5oCisKK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS9MSUNFTlNFIGIvbGlicy94ODZlbXUvTElDRU5TRQorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCBhM2VkZTRhLi4wMDAwMDAwCistLS0gYS9saWJzL3g4NmVtdS9MSUNFTlNFCisrKysgL2Rldi9udWxsCitAQCAtMSwxNyArMCwwIEBACistICAgICAgICAgICAgICAgICAgICAgICAgIExpY2Vuc2UgaW5mb3JtYXRpb24KKy0gICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLQorLQorLVRoZSB4ODZlbXUgbGlicmFyeSBpcyB1bmRlciBhIEJTRCBzdHlsZSBsaWNlbnNlLCBjb21hcHRpYmxlCistd2l0aCB0aGUgWEZyZWU4NiBhbmQgWCBsaWNlbnNlcyB1c2VkIGJ5IFhGcmVlODYuIFRoZQorLW9yaWdpbmFsIHg4NmVtdSBsaWJyYXJpZXMgd2VyZSB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCistTGljZW5zZS4gRHVlIHRvIGxpY2Vuc2UgaW5jb21wYXRpYmlsaXRpZXMgYmV0d2VlbiB0aGUgR1BMCistYW5kIHRoZSBYRnJlZTg2IGxpY2Vuc2UsIHRoZSBvcmlnaW5hbCBhdXRob3JzIG9mIHRoZSBjb2RlCistZGVjaWRlZCB0byBhbGxvdyBhIGxpY2Vuc2UgY2hhbmdlLiBJZiB5b3UgaGF2ZSBzdWJtaXR0ZWQKKy1jb2RlIHRvIHRoZSBvcmlnaW5hbCB4ODZlbXUgcHJvamVjdCwgYW5kIHlvdSBkb24ndCBhZ3JlZQorLXdpdGggdGhlIGxpY2Vuc2UgY2hhbmdlLCBwbGVhc2UgY29udGFjdCB1cyBhbmQgbGV0IHlvdQorLWtub3cuIFlvdXIgY29kZSB3aWxsIGJlIHJlbW92ZWQgdG8gY29tcGx5IHdpdGggeW91ciB3aXNoZXMuCistCistSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBhYm91dCB0aGlzLCBwbGVhc2Ugc2VuZCBlbWFpbCB0bworLXg4NmVtdUBsaW51eGxhYnMuY29tIG9yIEtlbmRhbGxCQHNjaXRlY2hzb2Z0LmNvbSBmb3IKKy1jbGFyaWZpY2F0aW9uLgorLQorZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L2RlYnVnLmMgYi9saWJzL3g4NmVtdS9kZWJ1Zy5jCitpbmRleCA2ZmQ3ZjExLi4xYThkMWQ2IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUvZGVidWcuYworKysrIGIvbGlicy94ODZlbXUvZGVidWcuYworQEAgLTM4LDYgKzM4LDggQEAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorICNpbmNsdWRlICJ4ODZlbXUveDg2ZW11aS5oIgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaWZuZGVmIE5PX1NZU19IRUFERVJTCisgI2luY2x1ZGUgPHN0ZGFyZy5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KK0BAIC00Nyw0NiArNDksNTEgQEAKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy1zdGF0aWMgdm9pZCAgICAgcHJpbnRfZW5jb2RlZF9ieXRlcyAodTE2IHMsIHUxNiBvKTsKKy1zdGF0aWMgdm9pZCAgICAgcHJpbnRfZGVjb2RlZF9pbnN0cnVjdGlvbiAodm9pZCk7Cistc3RhdGljIGludCAgICAgIHBhcnNlX2xpbmUgKGNoYXIgKnMsIGludCAqcHMsIGludCAqbik7CistICAKKytzdGF0aWMgdm9pZCBwcmludF9lbmNvZGVkX2J5dGVzKHUxNiBzLCB1MTYgbyk7Cisrc3RhdGljIHZvaWQgcHJpbnRfZGVjb2RlZF9pbnN0cnVjdGlvbih2b2lkKTsKKytzdGF0aWMgaW50IHBhcnNlX2xpbmUoY2hhciAqcywgaW50ICpwcywgaW50ICpuKTsKKysKKyAvKiBzaG91bGQgbG9vayBzb21ldGhpbmcgbGlrZSBkZWJ1ZydzIG91dHB1dC4gKi8KKy12b2lkIFg4NkVNVV90cmFjZV9yZWdzICh2b2lkKQorK3ZvaWQKKytYODZFTVVfdHJhY2VfcmVncyh2b2lkKQorIHsKKy0JaWYgKERFQlVHX1RSQUNFKCkpIHsKKy0JCXg4NmVtdV9kdW1wX3JlZ3MoKTsKKysgICAgaWYgKERFQlVHX1RSQUNFKCkpIHsKKysgICAgICAgIHg4NmVtdV9kdW1wX3JlZ3MoKTsKKyAgICAgfQorLQlpZiAoREVCVUdfREVDT0RFKCkgJiYgISBERUJVR19ERUNPREVfTk9QUklOVCgpKSB7CistCQlwcmludGsoIiUwNHg6JTA0eCAiLE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CistCQlwcmludF9lbmNvZGVkX2J5dGVzKCBNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworLQkJcHJpbnRfZGVjb2RlZF9pbnN0cnVjdGlvbigpOworKyAgICBpZiAoREVCVUdfREVDT0RFKCkgJiYgIURFQlVHX0RFQ09ERV9OT1BSSU5UKCkpIHsKKysgICAgICAgIHByaW50aygiJTA0eDolMDR4ICIsIE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CisrICAgICAgICBwcmludF9lbmNvZGVkX2J5dGVzKE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CisrICAgICAgICBwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKCk7CisgICAgIH0KKyB9CisgCistdm9pZCBYODZFTVVfdHJhY2VfeHJlZ3MgKHZvaWQpCisrdm9pZAorK1g4NkVNVV90cmFjZV94cmVncyh2b2lkKQorIHsKKy0JaWYgKERFQlVHX1RSQUNFKCkpIHsKKy0JCXg4NmVtdV9kdW1wX3hyZWdzKCk7CisrICAgIGlmIChERUJVR19UUkFDRSgpKSB7CisrICAgICAgICB4ODZlbXVfZHVtcF94cmVncygpOworICAgICB9CisgfQorIAorLXZvaWQgeDg2ZW11X2p1c3RfZGlzYXNzZW1ibGUgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9qdXN0X2Rpc2Fzc2VtYmxlKHZvaWQpCisgeworICAgICAvKgorICAgICAgKiBUaGlzIHJvdXRpbmUgY2FsbGVkIGlmIHRoZSBmbGFnIERFQlVHX0RJU0FTU0VNQkxFIGlzIHNldCBraW5kCisgICAgICAqIG9mIGEgaGFjayEKKyAgICAgICovCistCXByaW50aygiJTA0eDolMDR4ICIsTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKy0JcHJpbnRfZW5jb2RlZF9ieXRlcyggTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKy0JcHJpbnRfZGVjb2RlZF9pbnN0cnVjdGlvbigpOworKyAgICBwcmludGsoIiUwNHg6JTA0eCAiLCBNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworKyAgICBwcmludF9lbmNvZGVkX2J5dGVzKE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CisrICAgIHByaW50X2RlY29kZWRfaW5zdHJ1Y3Rpb24oKTsKKyB9CisgCistc3RhdGljIHZvaWQgZGlzYXNzZW1ibGVfZm9yd2FyZCAodTE2IHNlZywgdTE2IG9mZiwgaW50IG4pCisrc3RhdGljIHZvaWQKKytkaXNhc3NlbWJsZV9mb3J3YXJkKHUxNiBzZWcsIHUxNiBvZmYsIGludCBuKQorIHsKKy0JWDg2RU1VX3N5c0VudiB0cmVnczsKKy0JaW50IGk7CistCXU4IG9wMTsKKysgICAgWDg2RU1VX3N5c0VudiB0cmVnczsKKysgICAgaW50IGk7CisrICAgIHU4IG9wMTsKKysKKyAgICAgLyoKKyAgICAgICogaGFjaywgaGFjaywgaGFjay4gIFdoYXQgd2UgZG8gaXMgdXNlIHRoZSBleGFjdCBtYWNoaW5lcnkgc2V0IHVwCisgICAgICAqIGZvciBleGVjdXRpb24sIGV4Y2VwdCB0aGF0IG5vdyB0aGVyZSBpcyBhbiBhZGRpdGlvbmFsIHN0YXRlCitAQCAtMTExLDE3ICsxMTgsMTcgQEAgc3RhdGljIHZvaWQgZGlzYXNzZW1ibGVfZm9yd2FyZCAodTE2IHNlZywgdTE2IG9mZiwgaW50IG4pCisgICAgICAqIFRoaXMgd2FzIGRvbmUgZm9yIGFuIGVudGlyZWx5IGRpZmZlcmVudCByZWFzb24sIGJ1dCBtYWtlcyBhCisgICAgICAqIG5pY2Ugd2F5IHRvIGdldCB0aGUgc3lzdGVtIHRvIGhlbHAgZGVidWcgY29kZXMuCisgICAgICAqLworLQl0cmVncyA9IE07CisrICAgIHRyZWdzID0gTTsKKyAgICAgdHJlZ3MueDg2LlJfSVAgPSBvZmY7CisgICAgIHRyZWdzLng4Ni5SX0NTID0gc2VnOworLSAgICAKKysKKyAgICAgLyogcmVzZXQgdGhlIGRlY29kaW5nIGJ1ZmZlcnMgKi8KKyAgICAgdHJlZ3MueDg2LmVuY19zdHJfcG9zID0gMDsKKyAgICAgdHJlZ3MueDg2LmVuY19wb3MgPSAwOworLSAgICAKKysKKyAgICAgLyogdHVybiBvbiB0aGUgImRpc2Fzc2VtYmxlIG9ubHksIG5vIGV4ZWN1dGUiIGZsYWcgKi8KKyAgICAgdHJlZ3MueDg2LmRlYnVnIHw9IERFQlVHX0RJU0FTU0VNQkxFX0Y7CistIAorKworICAgICAvKiBEVU1QIE5FWFQgbiBpbnN0cnVjdGlvbnMgdG8gc2NyZWVuIGluIHN0cmFpZ2h0X2xpbmUgZmFzaGlvbiAqLworICAgICAvKgorICAgICAgKiBUaGlzIGxvb2tzIGxpa2UgdGhlIHJlZ3VsYXIgaW5zdHJ1Y3Rpb24gZmV0Y2ggc3RyZWFtLCBleGNlcHQKK0BAIC0xMzAsMjk5ICsxMzcsMzU5IEBAIHN0YXRpYyB2b2lkIGRpc2Fzc2VtYmxlX2ZvcndhcmQgKHUxNiBzZWcsIHUxNiBvZmYsIGludCBuKQorICAgICAgKiB0aGUgaW5zdHJ1Y3Rpb24uICBYWFggLS0tIENIRUNLIFRIQVQgTUVNIElTIE5PVCBBRkZFQ1RFRCEhIQorICAgICAgKiBOb3RlIHRoZSB1c2Ugb2YgYSBjb3B5IG9mIHRoZSByZWdpc3RlciBzdHJ1Y3R1cmUuLi4KKyAgICAgICovCistICAgIGZvciAoaT0wOyBpPG47IGkrKykgeworLQkJb3AxID0gKCpzeXNfcmRiKSgoKHUzMilNLng4Ni5SX0NTPDw0KSArIChNLng4Ni5SX0lQKyspKTsKKy0JCSh4ODZlbXVfb3B0YWJbb3AxXSkob3AxKTsKKysgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworKyAgICAgICAgb3AxID0gKCpzeXNfcmRiKSAoKCh1MzIpIE0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCsrKSk7CisrICAgICAgICAoeDg2ZW11X29wdGFiW29wMV0pIChvcDEpOworICAgICB9CisgICAgIC8qIGVuZCBtYWpvciBoYWNrIG1vZGUuICovCisgfQorIAorLXZvaWQgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcyAodm9pZCkKKyt2b2lkCisreDg2ZW11X2NoZWNrX2lwX2FjY2Vzcyh2b2lkKQorIHsKKyAgICAgLyogTlVMTCBhcyBvZiBub3cgKi8KKyB9CisgCistdm9pZCB4ODZlbXVfY2hlY2tfc3BfYWNjZXNzICh2b2lkKQorK3ZvaWQKKyt4ODZlbXVfY2hlY2tfc3BfYWNjZXNzKHZvaWQpCisgeworIH0KKyAKKy12b2lkIHg4NmVtdV9jaGVja19tZW1fYWNjZXNzICh1MzIgZHVtbXkpCisrdm9pZAorK3g4NmVtdV9jaGVja19tZW1fYWNjZXNzKHUzMiBkdW1teSkKKyB7CistCS8qICBjaGVjayBib3VuZHMsIGV0YyAqLworKyAgICAvKiAgY2hlY2sgYm91bmRzLCBldGMgKi8KKyB9CisgCistdm9pZCB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MgKHVpbnQgZHVtbXkxLCB1aW50IGR1bW15MikKKyt2b2lkCisreDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHVpbnQgZHVtbXkxLCB1aW50IGR1bW15MikKKyB7CistCS8qICBjaGVjayBib3VuZHMsIGV0YyAqLworKyAgICAvKiAgY2hlY2sgYm91bmRzLCBldGMgKi8KKyB9CisgCistdm9pZCB4ODZlbXVfaW5jX2RlY29kZWRfaW5zdF9sZW4gKGludCB4KQorK3ZvaWQKKyt4ODZlbXVfaW5jX2RlY29kZWRfaW5zdF9sZW4oaW50IHgpCisgeworLQlNLng4Ni5lbmNfcG9zICs9IHg7CisrICAgIE0ueDg2LmVuY19wb3MgKz0geDsKKyB9CisgCistdm9pZCB4ODZlbXVfZGVjb2RlX3ByaW50ZiAoY2hhciAqeCkKKyt2b2lkCisreDg2ZW11X2RlY29kZV9wcmludGYoY29uc3QgY2hhciAqeCkKKyB7CistCXNwcmludGYoTS54ODYuZGVjb2RlZF9idWYrTS54ODYuZW5jX3N0cl9wb3MsIiVzIix4KTsKKy0JTS54ODYuZW5jX3N0cl9wb3MgKz0gc3RybGVuKHgpOworKyAgICBzcHJpbnRmKE0ueDg2LmRlY29kZWRfYnVmICsgTS54ODYuZW5jX3N0cl9wb3MsICIlcyIsIHgpOworKyAgICBNLng4Ni5lbmNfc3RyX3BvcyArPSBzdHJsZW4oeCk7CisgfQorIAorLXZvaWQgeDg2ZW11X2RlY29kZV9wcmludGYyIChjaGFyICp4LCBpbnQgeSkKKyt2b2lkCisreDg2ZW11X2RlY29kZV9wcmludGYyKGNvbnN0IGNoYXIgKngsIGludCB5KQorIHsKKy0JY2hhciB0ZW1wWzEwMF07CistCXNwcmludGYodGVtcCx4LHkpOworLQlzcHJpbnRmKE0ueDg2LmRlY29kZWRfYnVmK00ueDg2LmVuY19zdHJfcG9zLCIlcyIsdGVtcCk7CistCU0ueDg2LmVuY19zdHJfcG9zICs9IHN0cmxlbih0ZW1wKTsKKysgICAgY2hhciB0ZW1wWzEwMF07CisrCisrICAgIHNucHJpbnRmKHRlbXAsIHNpemVvZih0ZW1wKSwgeCwgeSk7CisrICAgIHNwcmludGYoTS54ODYuZGVjb2RlZF9idWYgKyBNLng4Ni5lbmNfc3RyX3BvcywgIiVzIiwgdGVtcCk7CisrICAgIE0ueDg2LmVuY19zdHJfcG9zICs9IHN0cmxlbih0ZW1wKTsKKyB9CisgCistdm9pZCB4ODZlbXVfZW5kX2luc3RyICh2b2lkKQorK3ZvaWQKKyt4ODZlbXVfZW5kX2luc3RyKHZvaWQpCisgeworLQlNLng4Ni5lbmNfc3RyX3BvcyA9IDA7CistCU0ueDg2LmVuY19wb3MgPSAwOworKyAgICBNLng4Ni5lbmNfc3RyX3BvcyA9IDA7CisrICAgIE0ueDg2LmVuY19wb3MgPSAwOworIH0KKyAKKy1zdGF0aWMgdm9pZCBwcmludF9lbmNvZGVkX2J5dGVzICh1MTYgcywgdTE2IG8pCisrc3RhdGljIHZvaWQKKytwcmludF9lbmNvZGVkX2J5dGVzKHUxNiBzLCB1MTYgbykKKyB7CisgICAgIGludCBpOworICAgICBjaGFyIGJ1ZjFbNjRdOworLQlmb3IgKGk9MDsgaTwgTS54ODYuZW5jX3BvczsgaSsrKSB7CistCQlzcHJpbnRmKGJ1ZjErMippLCIlMDJ4IiwgZmV0Y2hfZGF0YV9ieXRlX2FicyhzLG8raSkpOworKworKyAgICBmb3IgKGkgPSAwOyBpIDwgTS54ODYuZW5jX3BvczsgaSsrKSB7CisrICAgICAgICBzcHJpbnRmKGJ1ZjEgKyAyICogaSwgIiUwMngiLCBmZXRjaF9kYXRhX2J5dGVfYWJzKHMsIG8gKyBpKSk7CisgICAgIH0KKy0JcHJpbnRrKCIlLTIwcyIsYnVmMSk7CisrICAgIHByaW50aygiJS0yMHMiLCBidWYxKTsKKyB9CisgCistc3RhdGljIHZvaWQgcHJpbnRfZGVjb2RlZF9pbnN0cnVjdGlvbiAodm9pZCkKKytzdGF0aWMgdm9pZAorK3ByaW50X2RlY29kZWRfaW5zdHJ1Y3Rpb24odm9pZCkKKyB7CistCXByaW50aygiJXMiLCBNLng4Ni5kZWNvZGVkX2J1Zik7CisrICAgIHByaW50aygiJXMiLCBNLng4Ni5kZWNvZGVkX2J1Zik7CisgfQorIAorLXZvaWQgeDg2ZW11X3ByaW50X2ludF92ZWN0ICh1MTYgaXYpCisrdm9pZAorK3g4NmVtdV9wcmludF9pbnRfdmVjdCh1MTYgaXYpCisgeworLQl1MTYgc2VnLG9mZjsKKysgICAgdTE2IHNlZywgb2ZmOworIAorLQlpZiAoaXYgPiAyNTYpIHJldHVybjsKKy0Jc2VnICAgPSBmZXRjaF9kYXRhX3dvcmRfYWJzKDAsaXYqNCk7CistCW9mZiAgID0gZmV0Y2hfZGF0YV93b3JkX2FicygwLGl2KjQrMik7CistCXByaW50aygiJTA0eDolMDR4ICIsIHNlZywgb2ZmKTsKKysgICAgaWYgKGl2ID4gMjU2KQorKyAgICAgICAgcmV0dXJuOworKyAgICBzZWcgPSBmZXRjaF9kYXRhX3dvcmRfYWJzKDAsIGl2ICogNCk7CisrICAgIG9mZiA9IGZldGNoX2RhdGFfd29yZF9hYnMoMCwgaXYgKiA0ICsgMik7CisrICAgIHByaW50aygiJTA0eDolMDR4ICIsIHNlZywgb2ZmKTsKKyB9CisgCistdm9pZCBYODZFTVVfZHVtcF9tZW1vcnkgKHUxNiBzZWcsIHUxNiBvZmYsIHUzMiBhbXQpCisrdm9pZAorK1g4NkVNVV9kdW1wX21lbW9yeSh1MTYgc2VnLCB1MTYgb2ZmLCB1MzIgYW10KQorIHsKKy0JdTMyIHN0YXJ0ID0gb2ZmICYgMHhmZmZmZmZmMDsKKy0JdTMyIGVuZCAgPSAob2ZmKzE2KSAmIDB4ZmZmZmZmZjA7CistCXUzMiBpOworLQl1MzIgY3VycmVudDsKKy0KKy0JY3VycmVudCA9IHN0YXJ0OworLQl3aGlsZSAoZW5kIDw9IG9mZiArIGFtdCkgeworLQkJcHJpbnRrKCIlMDR4OiUwNHggIiwgc2VnLCBzdGFydCk7CistCQlmb3IgKGk9c3RhcnQ7IGk8IG9mZjsgaSsrKQorLQkJICBwcmludGsoIiAgICIpOworLQkJZm9yICggICAgICAgOyBpPCBlbmQ7IGkrKykKKy0JCSAgcHJpbnRrKCIlMDJ4ICIsIGZldGNoX2RhdGFfYnl0ZV9hYnMoc2VnLGkpKTsKKy0JCXByaW50aygiXG4iKTsKKy0JCXN0YXJ0ID0gZW5kOworLQkJZW5kID0gc3RhcnQgKyAxNjsKKy0JfQorKyAgICB1MzIgc3RhcnQgPSBvZmYgJiAweGZmZmZmZmYwOworKyAgICB1MzIgZW5kID0gKG9mZiArIDE2KSAmIDB4ZmZmZmZmZjA7CisrICAgIHUzMiBpOworKyAgICB1MzIgY3VycmVudDsKKysKKysgICAgY3VycmVudCA9IHN0YXJ0OworKyAgICB3aGlsZSAoZW5kIDw9IG9mZiArIGFtdCkgeworKyAgICAgICAgcHJpbnRrKCIlMDR4OiUwNHggIiwgc2VnLCBzdGFydCk7CisrICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IG9mZjsgaSsrKQorKyAgICAgICAgICAgIHByaW50aygiICAgIik7CisrICAgICAgICBmb3IgKDsgaSA8IGVuZDsgaSsrKQorKyAgICAgICAgICAgIHByaW50aygiJTAyeCAiLCBmZXRjaF9kYXRhX2J5dGVfYWJzKHNlZywgaSkpOworKyAgICAgICAgcHJpbnRrKCJcbiIpOworKyAgICAgICAgc3RhcnQgPSBlbmQ7CisrICAgICAgICBlbmQgPSBzdGFydCArIDE2OworKyAgICB9CisgfQorIAorLXZvaWQgeDg2ZW11X3NpbmdsZV9zdGVwICh2b2lkKQorK3ZvaWQKKyt4ODZlbXVfc2luZ2xlX3N0ZXAodm9pZCkKKyB7CisgICAgIGNoYXIgc1sxMDI0XTsKKyAgICAgaW50IHBzWzEwXTsKKyAgICAgaW50IG50b2s7CisgICAgIGludCBjbWQ7CisgICAgIGludCBkb25lOworLQkJaW50IHNlZ21lbnQ7CisrICAgIGludCBzZWdtZW50OworICAgICBpbnQgb2Zmc2V0OworICAgICBzdGF0aWMgaW50IGJyZWFrcG9pbnQ7CisgICAgIHN0YXRpYyBpbnQgbm9EZWNvZGUgPSAxOworLSAgICAKKysKKyAgICAgY2hhciAqcDsKKyAKKy0JCWlmIChERUJVR19CUkVBSygpKSB7CistCQkJCWlmIChNLng4Ni5zYXZlZF9pcCAhPSBicmVha3BvaW50KSB7CistCQkJCQkJcmV0dXJuOworLQkJCQl9IGVsc2UgeworLSAJICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19ERUNPREVfTk9QUklOVF9GOworLQkJCQkJCU0ueDg2LmRlYnVnIHw9IERFQlVHX1RSQUNFX0Y7CistCQkJCQkJTS54ODYuZGVidWcgJj0gfkRFQlVHX0JSRUFLX0Y7CistCQkJCQkJcHJpbnRfZGVjb2RlZF9pbnN0cnVjdGlvbiAoKTsKKy0JCQkJCQlYODZFTVVfdHJhY2VfcmVncygpOworLQkJCQl9CistCQl9CistICAgIGRvbmU9MDsKKy0Jb2Zmc2V0ID0gTS54ODYuc2F2ZWRfaXA7CisrICAgIGlmIChERUJVR19CUkVBSygpKSB7CisrICAgICAgICBpZiAoTS54ODYuc2F2ZWRfaXAgIT0gYnJlYWtwb2ludCkgeworKyAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19ERUNPREVfTk9QUklOVF9GOworKyAgICAgICAgICAgIE0ueDg2LmRlYnVnIHw9IERFQlVHX1RSQUNFX0Y7CisrICAgICAgICAgICAgTS54ODYuZGVidWcgJj0gfkRFQlVHX0JSRUFLX0Y7CisrICAgICAgICAgICAgcHJpbnRfZGVjb2RlZF9pbnN0cnVjdGlvbigpOworKyAgICAgICAgICAgIFg4NkVNVV90cmFjZV9yZWdzKCk7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZG9uZSA9IDA7CisrICAgIG9mZnNldCA9IE0ueDg2LnNhdmVkX2lwOworICAgICB3aGlsZSAoIWRvbmUpIHsKKyAgICAgICAgIHByaW50aygiLSIpOworICAgICAgICAgcCA9IGZnZXRzKHMsIDEwMjMsIHN0ZGluKTsKKyAgICAgICAgIGNtZCA9IHBhcnNlX2xpbmUocywgcHMsICZudG9rKTsKKy0gICAgICAgIHN3aXRjaChjbWQpIHsKKy0gICAgICAgICAgY2FzZSAndSc6CistCQkJZGlzYXNzZW1ibGVfZm9yd2FyZChNLng4Ni5zYXZlZF9jcywodTE2KW9mZnNldCwxMCk7CisrICAgICAgICBzd2l0Y2ggKGNtZCkgeworKyAgICAgICAgY2FzZSAndSc6CisrICAgICAgICAgICAgZGlzYXNzZW1ibGVfZm9yd2FyZChNLng4Ni5zYXZlZF9jcywgKHUxNikgb2Zmc2V0LCAxMCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgJ2QnOiAgCistCQkJCQkJCWlmIChudG9rID09IDIpIHsKKy0JCQkJCQkJCQlzZWdtZW50ID0gTS54ODYuc2F2ZWRfY3M7CistCQkJCQkJCQkJb2Zmc2V0ID0gcHNbMV07CistCQkJCQkJCQkJWDg2RU1VX2R1bXBfbWVtb3J5KHNlZ21lbnQsKHUxNilvZmZzZXQsMTYpOworLQkJCQkJCQkJCW9mZnNldCArPSAxNjsKKy0JCQkJCQkJfSBlbHNlIGlmIChudG9rID09IDMpIHsKKy0JCQkJCQkJCQlzZWdtZW50ID0gcHNbMV07CistCQkJCQkJCQkJb2Zmc2V0ID0gcHNbMl07CistCQkJCQkJCQkJWDg2RU1VX2R1bXBfbWVtb3J5KHNlZ21lbnQsKHUxNilvZmZzZXQsMTYpOworLQkJCQkJCQkJCW9mZnNldCArPSAxNjsKKy0JCQkJCQkJfSBlbHNlIHsKKy0JCQkJCQkJCQlzZWdtZW50ID0gTS54ODYuc2F2ZWRfY3M7CistCQkJCQkJCQkJWDg2RU1VX2R1bXBfbWVtb3J5KHNlZ21lbnQsKHUxNilvZmZzZXQsMTYpOworLQkJCQkJCQkJCW9mZnNldCArPSAxNjsKKy0JCQkJCQkJfQorKyAgICAgICAgY2FzZSAnZCc6CisrICAgICAgICAgICAgaWYgKG50b2sgPT0gMikgeworKyAgICAgICAgICAgICAgICBzZWdtZW50ID0gTS54ODYuc2F2ZWRfY3M7CisrICAgICAgICAgICAgICAgIG9mZnNldCA9IHBzWzFdOworKyAgICAgICAgICAgICAgICBYODZFTVVfZHVtcF9tZW1vcnkoc2VnbWVudCwgKHUxNikgb2Zmc2V0LCAxNik7CisrICAgICAgICAgICAgICAgIG9mZnNldCArPSAxNjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAobnRvayA9PSAzKSB7CisrICAgICAgICAgICAgICAgIHNlZ21lbnQgPSBwc1sxXTsKKysgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHNbMl07CisrICAgICAgICAgICAgICAgIFg4NkVNVV9kdW1wX21lbW9yeShzZWdtZW50LCAodTE2KSBvZmZzZXQsIDE2KTsKKysgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE2OworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICAgICAgc2VnbWVudCA9IE0ueDg2LnNhdmVkX2NzOworKyAgICAgICAgICAgICAgICBYODZFTVVfZHVtcF9tZW1vcnkoc2VnbWVudCwgKHUxNikgb2Zmc2V0LCAxNik7CisrICAgICAgICAgICAgICAgIG9mZnNldCArPSAxNjsKKysgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgJ2MnOgorLQkJCU0ueDg2LmRlYnVnIF49IERFQlVHX1RSQUNFQ0FMTF9GOworKyAgICAgICAgY2FzZSAnYyc6CisrICAgICAgICAgICAgTS54ODYuZGVidWcgXj0gREVCVUdfVFJBQ0VDQUxMX0Y7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgJ3MnOgorLQkJCU0ueDg2LmRlYnVnIF49IERFQlVHX1NWQ19GIHwgREVCVUdfU1lTX0YgfCBERUJVR19TWVNJTlRfRjsKKysgICAgICAgIGNhc2UgJ3MnOgorKyAgICAgICAgICAgIE0ueDg2LmRlYnVnIF49IERFQlVHX1NWQ19GIHwgREVCVUdfU1lTX0YgfCBERUJVR19TWVNJTlRfRjsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAncic6CistCQkJWDg2RU1VX3RyYWNlX3JlZ3MoKTsKKysgICAgICAgIGNhc2UgJ3InOgorKyAgICAgICAgICAgIFg4NkVNVV90cmFjZV9yZWdzKCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgJ3gnOgorLQkJCVg4NkVNVV90cmFjZV94cmVncygpOworKyAgICAgICAgY2FzZSAneCc6CisrICAgICAgICAgICAgWDg2RU1VX3RyYWNlX3hyZWdzKCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgJ2cnOgorKyAgICAgICAgY2FzZSAnZyc6CisgICAgICAgICAgICAgaWYgKG50b2sgPT0gMikgeworICAgICAgICAgICAgICAgICBicmVha3BvaW50ID0gcHNbMV07CistCQlpZiAobm9EZWNvZGUpIHsKKy0JCSAgICAgICAgICAgICAgICBNLng4Ni5kZWJ1ZyB8PSBERUJVR19ERUNPREVfTk9QUklOVF9GOworLQkJfSBlbHNlIHsKKy0JCSAgICAgICAgICAgICAgICBNLng4Ni5kZWJ1ZyAmPSB+REVCVUdfREVDT0RFX05PUFJJTlRfRjsKKy0JCX0KKy0JCU0ueDg2LmRlYnVnICY9IH5ERUJVR19UUkFDRV9GOworLQkJTS54ODYuZGVidWcgfD0gREVCVUdfQlJFQUtfRjsKKy0JCWRvbmUgPSAxOworKyAgICAgICAgICAgICAgICBpZiAobm9EZWNvZGUpIHsKKysgICAgICAgICAgICAgICAgICAgIE0ueDg2LmRlYnVnIHw9IERFQlVHX0RFQ09ERV9OT1BSSU5UX0Y7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgICAgICAgICBNLng4Ni5kZWJ1ZyAmPSB+REVCVUdfREVDT0RFX05PUFJJTlRfRjsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBNLng4Ni5kZWJ1ZyAmPSB+REVCVUdfVFJBQ0VfRjsKKysgICAgICAgICAgICAgICAgTS54ODYuZGVidWcgfD0gREVCVUdfQlJFQUtfRjsKKysgICAgICAgICAgICAgICAgZG9uZSA9IDE7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlICdxJzoKKy0gICAgICAgICAgTS54ODYuZGVidWcgfD0gREVCVUdfRVhJVDsKKy0gICAgICAgICAgcmV0dXJuOworLQkgIGNhc2UgJ1AnOgorLQkgICAgICBub0RlY29kZSA9IChub0RlY29kZSk/MDoxOworLQkgICAgICBwcmludGsoIlRvZ2dsZWQgZGVjb2RpbmcgdG8gJXNcbiIsKG5vRGVjb2RlKT8iRkFMU0UiOiJUUlVFIik7CistCSAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlICd0JzoKKy0JICBjYXNlIDA6CisrICAgICAgICBjYXNlICdxJzoKKysgICAgICAgICAgICBNLng4Ni5kZWJ1ZyB8PSBERUJVR19FWElUOworKyAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgIGNhc2UgJ1AnOgorKyAgICAgICAgICAgIG5vRGVjb2RlID0gKG5vRGVjb2RlKSA/IDAgOiAxOworKyAgICAgICAgICAgIHByaW50aygiVG9nZ2xlZCBkZWNvZGluZyB0byAlc1xuIiwgKG5vRGVjb2RlKSA/ICJGQUxTRSIgOiAiVFJVRSIpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSAndCc6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgZG9uZSA9IDE7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICB9ICAgCisrICAgICAgICB9CisgICAgIH0KKyB9CisgCistaW50IFg4NkVNVV90cmFjZV9vbih2b2lkKQorK2ludAorK1g4NkVNVV90cmFjZV9vbih2b2lkKQorIHsKKy0JcmV0dXJuIE0ueDg2LmRlYnVnIHw9IERFQlVHX1NURVBfRiB8IERFQlVHX0RFQ09ERV9GIHwgREVCVUdfVFJBQ0VfRjsKKysgICAgcmV0dXJuIE0ueDg2LmRlYnVnIHw9IERFQlVHX1NURVBfRiB8IERFQlVHX0RFQ09ERV9GIHwgREVCVUdfVFJBQ0VfRjsKKyB9CisgCistaW50IFg4NkVNVV90cmFjZV9vZmYodm9pZCkKKytpbnQKKytYODZFTVVfdHJhY2Vfb2ZmKHZvaWQpCisgeworLQlyZXR1cm4gTS54ODYuZGVidWcgJj0gfihERUJVR19TVEVQX0YgfCBERUJVR19ERUNPREVfRiB8IERFQlVHX1RSQUNFX0YpOworKyAgICByZXR1cm4gTS54ODYuZGVidWcgJj0gfihERUJVR19TVEVQX0YgfCBERUJVR19ERUNPREVfRiB8IERFQlVHX1RSQUNFX0YpOworIH0KKyAKKy1zdGF0aWMgaW50IHBhcnNlX2xpbmUgKGNoYXIgKnMsIGludCAqcHMsIGludCAqbikKKytzdGF0aWMgaW50CisrcGFyc2VfbGluZShjaGFyICpzLCBpbnQgKnBzLCBpbnQgKm4pCisgeworICAgICBpbnQgY21kOworIAorICAgICAqbiA9IDA7CistICAgIHdoaWxlKCpzID09ICcgJyB8fCAqcyA9PSAnXHQnKSBzKys7CisrICAgIHdoaWxlICgqcyA9PSAnICcgfHwgKnMgPT0gJ1x0JykKKysgICAgICAgIHMrKzsKKyAgICAgcHNbKm5dID0gKnM7CisgICAgIHN3aXRjaCAoKnMpIHsKKy0gICAgICBjYXNlICdcbic6CisrICAgIGNhc2UgJ1xuJzoKKyAgICAgICAgICpuICs9IDE7CisgICAgICAgICByZXR1cm4gMDsKKy0gICAgICBkZWZhdWx0OgorKyAgICBkZWZhdWx0OgorICAgICAgICAgY21kID0gKnM7CisgICAgICAgICAqbiArPSAxOworICAgICB9CisgCistCXdoaWxlICgxKSB7CistCQl3aGlsZSAoKnMgIT0gJyAnICYmICpzICE9ICdcdCcgJiYgKnMgIT0gJ1xuJykgIHMrKzsKKy0JCQorLQkJaWYgKCpzID09ICdcbicpCistCQkJcmV0dXJuIGNtZDsKKy0JCQorLQkJd2hpbGUoKnMgPT0gJyAnIHx8ICpzID09ICdcdCcpIHMrKzsKKy0JCQorLQkJc3NjYW5mKHMsIiV4IiwmcHNbKm5dKTsKKy0JCSpuICs9IDE7CistCX0KKysgICAgd2hpbGUgKDEpIHsKKysgICAgICAgIHdoaWxlICgqcyAhPSAnICcgJiYgKnMgIT0gJ1x0JyAmJiAqcyAhPSAnXG4nKQorKyAgICAgICAgICAgIHMrKzsKKysKKysgICAgICAgIGlmICgqcyA9PSAnXG4nKQorKyAgICAgICAgICAgIHJldHVybiBjbWQ7CisrCisrICAgICAgICB3aGlsZSAoKnMgPT0gJyAnIHx8ICpzID09ICdcdCcpCisrICAgICAgICAgICAgcysrOworKworKyAgICAgICAgc3NjYW5mKHMsICIleCIsICZwc1sqbl0pOworKyAgICAgICAgKm4gKz0gMTsKKysgICAgfQorIH0KKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCistdm9pZCB4ODZlbXVfZHVtcF9yZWdzICh2b2lkKQorK3ZvaWQKKyt4ODZlbXVfZHVtcF9yZWdzKHZvaWQpCisgeworLQlwcmludGsoIlx0QVg9JTA0eCAgIiwgTS54ODYuUl9BWCApOworLQlwcmludGsoIkJYPSUwNHggICIsIE0ueDg2LlJfQlggKTsKKy0JcHJpbnRrKCJDWD0lMDR4ICAiLCBNLng4Ni5SX0NYICk7CistCXByaW50aygiRFg9JTA0eCAgIiwgTS54ODYuUl9EWCApOworLQlwcmludGsoIlNQPSUwNHggICIsIE0ueDg2LlJfU1AgKTsKKy0JcHJpbnRrKCJCUD0lMDR4ICAiLCBNLng4Ni5SX0JQICk7CistCXByaW50aygiU0k9JTA0eCAgIiwgTS54ODYuUl9TSSApOworLQlwcmludGsoIkRJPSUwNHhcbiIsIE0ueDg2LlJfREkgKTsKKy0JcHJpbnRrKCJcdERTPSUwNHggICIsIE0ueDg2LlJfRFMgKTsKKy0JcHJpbnRrKCJFUz0lMDR4ICAiLCBNLng4Ni5SX0VTICk7CistCXByaW50aygiU1M9JTA0eCAgIiwgTS54ODYuUl9TUyApOworLQlwcmludGsoIkNTPSUwNHggICIsIE0ueDg2LlJfQ1MgKTsKKy0JcHJpbnRrKCJJUD0lMDR4ICAgIiwgTS54ODYuUl9JUCApOworLQlpZiAoQUNDRVNTX0ZMQUcoRl9PRikpICAgIHByaW50aygiT1YgIik7ICAgICAvKiBDSEVDS0VELi4uICovCistCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIk5WICIpOworLQlpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgIHByaW50aygiRE4gIik7CistCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIlVQICIpOworLQlpZiAoQUNDRVNTX0ZMQUcoRl9JRikpICAgIHByaW50aygiRUkgIik7CistCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIkRJICIpOworLQlpZiAoQUNDRVNTX0ZMQUcoRl9TRikpICAgIHByaW50aygiTkcgIik7CistCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIlBMICIpOworLQlpZiAoQUNDRVNTX0ZMQUcoRl9aRikpICAgIHByaW50aygiWlIgIik7CistCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIk5aICIpOworLQlpZiAoQUNDRVNTX0ZMQUcoRl9BRikpICAgIHByaW50aygiQUMgIik7CistCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIk5BICIpOworLQlpZiAoQUNDRVNTX0ZMQUcoRl9QRikpICAgIHByaW50aygiUEUgIik7CistCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIlBPICIpOworLQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpICAgIHByaW50aygiQ1kgIik7CistCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIk5DICIpOworLQlwcmludGsoIlxuIik7CisrICAgIHByaW50aygiXHRBWD0lMDR4ICAiLCBNLng4Ni5SX0FYKTsKKysgICAgcHJpbnRrKCJCWD0lMDR4ICAiLCBNLng4Ni5SX0JYKTsKKysgICAgcHJpbnRrKCJDWD0lMDR4ICAiLCBNLng4Ni5SX0NYKTsKKysgICAgcHJpbnRrKCJEWD0lMDR4ICAiLCBNLng4Ni5SX0RYKTsKKysgICAgcHJpbnRrKCJTUD0lMDR4ICAiLCBNLng4Ni5SX1NQKTsKKysgICAgcHJpbnRrKCJCUD0lMDR4ICAiLCBNLng4Ni5SX0JQKTsKKysgICAgcHJpbnRrKCJTST0lMDR4ICAiLCBNLng4Ni5SX1NJKTsKKysgICAgcHJpbnRrKCJEST0lMDR4XG4iLCBNLng4Ni5SX0RJKTsKKysgICAgcHJpbnRrKCJcdERTPSUwNHggICIsIE0ueDg2LlJfRFMpOworKyAgICBwcmludGsoIkVTPSUwNHggICIsIE0ueDg2LlJfRVMpOworKyAgICBwcmludGsoIlNTPSUwNHggICIsIE0ueDg2LlJfU1MpOworKyAgICBwcmludGsoIkNTPSUwNHggICIsIE0ueDg2LlJfQ1MpOworKyAgICBwcmludGsoIklQPSUwNHggICAiLCBNLng4Ni5SX0lQKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfT0YpKQorKyAgICAgICAgcHJpbnRrKCJPViAiKTsgICAgICAgICAgLyogQ0hFQ0tFRC4uLiAqLworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5WICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpCisrICAgICAgICBwcmludGsoIkROICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIlVQICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9JRikpCisrICAgICAgICBwcmludGsoIkVJICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIkRJICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9TRikpCisrICAgICAgICBwcmludGsoIk5HICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIlBMICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9aRikpCisrICAgICAgICBwcmludGsoIlpSICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5aICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9BRikpCisrICAgICAgICBwcmludGsoIkFDICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5BICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9QRikpCisrICAgICAgICBwcmludGsoIlBFICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIlBPICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCisrICAgICAgICBwcmludGsoIkNZICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5DICIpOworKyAgICBwcmludGsoIlxuIik7CisgfQorIAorLXZvaWQgeDg2ZW11X2R1bXBfeHJlZ3MgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9kdW1wX3hyZWdzKHZvaWQpCisgeworLQlwcmludGsoIlx0RUFYPSUwOHggICIsIE0ueDg2LlJfRUFYICk7CistCXByaW50aygiRUJYPSUwOHggICIsIE0ueDg2LlJfRUJYICk7CistCXByaW50aygiRUNYPSUwOHggICIsIE0ueDg2LlJfRUNYICk7CistCXByaW50aygiRURYPSUwOHggIFxuIiwgTS54ODYuUl9FRFggKTsKKy0JcHJpbnRrKCJcdEVTUD0lMDh4ICAiLCBNLng4Ni5SX0VTUCApOworLQlwcmludGsoIkVCUD0lMDh4ICAiLCBNLng4Ni5SX0VCUCApOworLQlwcmludGsoIkVTST0lMDh4ICAiLCBNLng4Ni5SX0VTSSApOworLQlwcmludGsoIkVEST0lMDh4XG4iLCBNLng4Ni5SX0VESSApOworLQlwcmludGsoIlx0RFM9JTA0eCAgIiwgTS54ODYuUl9EUyApOworLQlwcmludGsoIkVTPSUwNHggICIsIE0ueDg2LlJfRVMgKTsKKy0JcHJpbnRrKCJTUz0lMDR4ICAiLCBNLng4Ni5SX1NTICk7CistCXByaW50aygiQ1M9JTA0eCAgIiwgTS54ODYuUl9DUyApOworLQlwcmludGsoIkVJUD0lMDh4XG5cdCIsIE0ueDg2LlJfRUlQICk7CistCWlmIChBQ0NFU1NfRkxBRyhGX09GKSkgICAgcHJpbnRrKCJPViAiKTsgICAgIC8qIENIRUNLRUQuLi4gKi8KKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTlYgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgcHJpbnRrKCJETiAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiVVAgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0lGKSkgICAgcHJpbnRrKCJFSSAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiREkgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX1NGKSkgICAgcHJpbnRrKCJORyAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiUEwgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX1pGKSkgICAgcHJpbnRrKCJaUiAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTlogIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0FGKSkgICAgcHJpbnRrKCJBQyAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTkEgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX1BGKSkgICAgcHJpbnRrKCJQRSAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiUE8gIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgICAgcHJpbnRrKCJDWSAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTkMgIik7CistCXByaW50aygiXG4iKTsKKysgICAgcHJpbnRrKCJcdEVBWD0lMDh4ICAiLCBNLng4Ni5SX0VBWCk7CisrICAgIHByaW50aygiRUJYPSUwOHggICIsIE0ueDg2LlJfRUJYKTsKKysgICAgcHJpbnRrKCJFQ1g9JTA4eCAgIiwgTS54ODYuUl9FQ1gpOworKyAgICBwcmludGsoIkVEWD0lMDh4ICBcbiIsIE0ueDg2LlJfRURYKTsKKysgICAgcHJpbnRrKCJcdEVTUD0lMDh4ICAiLCBNLng4Ni5SX0VTUCk7CisrICAgIHByaW50aygiRUJQPSUwOHggICIsIE0ueDg2LlJfRUJQKTsKKysgICAgcHJpbnRrKCJFU0k9JTA4eCAgIiwgTS54ODYuUl9FU0kpOworKyAgICBwcmludGsoIkVEST0lMDh4XG4iLCBNLng4Ni5SX0VESSk7CisrICAgIHByaW50aygiXHREUz0lMDR4ICAiLCBNLng4Ni5SX0RTKTsKKysgICAgcHJpbnRrKCJFUz0lMDR4ICAiLCBNLng4Ni5SX0VTKTsKKysgICAgcHJpbnRrKCJTUz0lMDR4ICAiLCBNLng4Ni5SX1NTKTsKKysgICAgcHJpbnRrKCJDUz0lMDR4ICAiLCBNLng4Ni5SX0NTKTsKKysgICAgcHJpbnRrKCJFSVA9JTA4eFxuXHQiLCBNLng4Ni5SX0VJUCk7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX09GKSkKKysgICAgICAgIHByaW50aygiT1YgIik7ICAgICAgICAgIC8qIENIRUNLRUQuLi4gKi8KKysgICAgZWxzZQorKyAgICAgICAgcHJpbnRrKCJOViAiKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKQorKyAgICAgICAgcHJpbnRrKCJETiAiKTsKKysgICAgZWxzZQorKyAgICAgICAgcHJpbnRrKCJVUCAiKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfSUYpKQorKyAgICAgICAgcHJpbnRrKCJFSSAiKTsKKysgICAgZWxzZQorKyAgICAgICAgcHJpbnRrKCJESSAiKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfU0YpKQorKyAgICAgICAgcHJpbnRrKCJORyAiKTsKKysgICAgZWxzZQorKyAgICAgICAgcHJpbnRrKCJQTCAiKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfWkYpKQorKyAgICAgICAgcHJpbnRrKCJaUiAiKTsKKysgICAgZWxzZQorKyAgICAgICAgcHJpbnRrKCJOWiAiKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQUYpKQorKyAgICAgICAgcHJpbnRrKCJBQyAiKTsKKysgICAgZWxzZQorKyAgICAgICAgcHJpbnRrKCJOQSAiKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfUEYpKQorKyAgICAgICAgcHJpbnRrKCJQRSAiKTsKKysgICAgZWxzZQorKyAgICAgICAgcHJpbnRrKCJQTyAiKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorKyAgICAgICAgcHJpbnRrKCJDWSAiKTsKKysgICAgZWxzZQorKyAgICAgICAgcHJpbnRrKCJOQyAiKTsKKysgICAgcHJpbnRrKCJcbiIpOworIH0KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS9kZWNvZGUuYyBiL2xpYnMveDg2ZW11L2RlY29kZS5jCitpbmRleCA3ZDlhMzRhLi4xMmY4ZmI4IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUvZGVjb2RlLmMKKysrKyBiL2xpYnMveDg2ZW11L2RlY29kZS5jCitAQCAtNDYsMjUgKzQ2LDI3IEBACisgUkVNQVJLUzoKKyBIYW5kbGVzIGFueSBwZW5kaW5nIGFzeWNocm9ub3VzIGludGVycnVwdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVfaW50cl9oYW5kbGUodm9pZCkKKytzdGF0aWMgdm9pZAorK3g4NmVtdV9pbnRyX2hhbmRsZSh2b2lkKQorIHsKKy0JdTgJaW50bm87CistCistCWlmIChNLng4Ni5pbnRyICYgSU5UUl9TWU5DSCkgeworLQkJaW50bm8gPSBNLng4Ni5pbnRubzsKKy0JCWlmIChfWDg2RU1VX2ludHJUYWJbaW50bm9dKSB7CistCQkJKCpfWDg2RU1VX2ludHJUYWJbaW50bm9dKShpbnRubyk7CistCQl9IGVsc2UgeworLQkJCXB1c2hfd29yZCgodTE2KU0ueDg2LlJfRkxHKTsKKy0JCQlDTEVBUl9GTEFHKEZfSUYpOworLQkJCUNMRUFSX0ZMQUcoRl9URik7CistCQkJcHVzaF93b3JkKE0ueDg2LlJfQ1MpOworLQkJCU0ueDg2LlJfQ1MgPSBtZW1fYWNjZXNzX3dvcmQoaW50bm8gKiA0ICsgMik7CistCQkJcHVzaF93b3JkKE0ueDg2LlJfSVApOworLQkJCU0ueDg2LlJfSVAgPSBtZW1fYWNjZXNzX3dvcmQoaW50bm8gKiA0KTsKKy0JCQlNLng4Ni5pbnRyID0gMDsKKy0JCX0KKy0JfQorKyAgICB1OCBpbnRubzsKKysKKysgICAgaWYgKE0ueDg2LmludHIgJiBJTlRSX1NZTkNIKSB7CisrICAgICAgICBpbnRubyA9IE0ueDg2LmludG5vOworKyAgICAgICAgaWYgKF9YODZFTVVfaW50clRhYltpbnRub10pIHsKKysgICAgICAgICAgICAoKl9YODZFTVVfaW50clRhYltpbnRub10pIChpbnRubyk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBwdXNoX3dvcmQoKHUxNikgTS54ODYuUl9GTEcpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9JRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1RGKTsKKysgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9DUyk7CisrICAgICAgICAgICAgTS54ODYuUl9DUyA9IG1lbV9hY2Nlc3Nfd29yZChpbnRubyAqIDQgKyAyKTsKKysgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisrICAgICAgICAgICAgTS54ODYuUl9JUCA9IG1lbV9hY2Nlc3Nfd29yZChpbnRubyAqIDQpOworKyAgICAgICAgICAgIE0ueDg2LmludHIgPSAwOworKyAgICAgICAgfQorKyAgICB9CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNzUsMTEgKzc3LDExIEBAIFJFTUFSS1M6CisgUmFpc2UgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQgdG8gYmUgaGFuZGxlZCBiZWZvcmUgdGhlIGV4ZWN1dGlvbiBvZiB0aGUKKyBuZXh0IGluc3RydWN0aW9uLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCB4ODZlbXVfaW50cl9yYWlzZSgKKy0JdTggaW50cm51bSkKKyt2b2lkCisreDg2ZW11X2ludHJfcmFpc2UodTggaW50cm51bSkKKyB7CistCU0ueDg2LmludG5vID0gaW50cm51bTsKKy0JTS54ODYuaW50ciB8PSBJTlRSX1NZTkNIOworKyAgICBNLng4Ni5pbnRubyA9IGludHJudW07CisrICAgIE0ueDg2LmludHIgfD0gSU5UUl9TWU5DSDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC04OCwzOSArOTAsMzkgQEAgTWFpbiBleGVjdXRpb24gbG9vcCBmb3IgdGhlIGVtdWxhdG9yLiBXZSByZXR1cm4gZnJvbSBoZXJlIHdoZW4gdGhlIHN5c3RlbQorIGhhbHRzLCB3aGljaCBpcyBub3JtYWxseSBjYXVzZWQgYnkgYSBzdGFjayBmYXVsdCB3aGVuIHdlIHJldHVybiBmcm9tIHRoZQorIG9yaWdpbmFsIHJlYWwgbW9kZSBjYWxsLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBYODZFTVVfZXhlYyh2b2lkKQorK3ZvaWQKKytYODZFTVVfZXhlYyh2b2lkKQorIHsKKy0JdTggb3AxOworLQorLQlNLng4Ni5pbnRyID0gMDsKKy0JREIoeDg2ZW11X2VuZF9pbnN0cigpOykKKy0KKy0gICAgZm9yICg7OykgeworLURCKAkJaWYgKENIRUNLX0lQX0ZFVENIKCkpCistCQkgIHg4NmVtdV9jaGVja19pcF9hY2Nlc3MoKTspCistCQkvKiBJZiBkZWJ1Z2dpbmcsIHNhdmUgdGhlIElQIGFuZCBDUyB2YWx1ZXMuICovCistCQlTQVZFX0lQX0NTKE0ueDg2LlJfQ1MsIE0ueDg2LlJfSVApOworLQkJSU5DX0RFQ09ERURfSU5TVF9MRU4oMSk7CistCQlpZiAoTS54ODYuaW50cikgeworLQkJCWlmIChNLng4Ni5pbnRyICYgSU5UUl9IQUxURUQpIHsKKy1EQiggICAgICAgICAgICAgaWYgKE0ueDg2LlJfU1AgIT0gMCkgeworLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJoYWx0ZWRcbiIpOworLSAgICAgICAgICAgICAgICAgICAgWDg2RU1VX3RyYWNlX3JlZ3MoKTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgZWxzZSB7CistICAgICAgICAgICAgICAgICAgICBpZiAoTS54ODYuZGVidWcpCistICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJTZXJ2aWNlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiIpOworLSAgICAgICAgICAgICAgICAgICAgfSkKKy0JCQkJcmV0dXJuOworKyAgICB1OCBvcDE7CisrCisrICAgIE0ueDg2LmludHIgPSAwOworKyAgICBEQih4ODZlbXVfZW5kX2luc3RyKCk7CisrICAgICAgICApCisrCisrICAgICAgICBmb3IgKDs7KSB7CisrICAgICAgICBEQihpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKysgICAgICAgICAgIHg4NmVtdV9jaGVja19pcF9hY2Nlc3MoKTspCisrICAgICAgICAgICAgLyogSWYgZGVidWdnaW5nLCBzYXZlIHRoZSBJUCBhbmQgQ1MgdmFsdWVzLiAqLworKyAgICAgICAgICAgIFNBVkVfSVBfQ1MoTS54ODYuUl9DUywgTS54ODYuUl9JUCk7CisrICAgICAgICBJTkNfREVDT0RFRF9JTlNUX0xFTigxKTsKKysgICAgICAgIGlmIChNLng4Ni5pbnRyKSB7CisrICAgICAgICAgICAgaWYgKE0ueDg2LmludHIgJiBJTlRSX0hBTFRFRCkgeworKyAgICAgICAgICAgICAgICBEQihpZiAoTS54ODYuUl9TUCAhPSAwKSB7CisrICAgICAgICAgICAgICAgICAgIHByaW50aygiaGFsdGVkXG4iKTsgWDg2RU1VX3RyYWNlX3JlZ3MoKTt9CisrICAgICAgICAgICAgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgICAgICAgICBpZiAoTS54ODYuZGVidWcpCisrICAgICAgICAgICAgICAgICAgIHByaW50aygiU2VydmljZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XG4iKTt9CisrICAgICAgICAgICAgICAgICkKKysgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICB9CistCQkJaWYgKCgoTS54ODYuaW50ciAmIElOVFJfU1lOQ0gpICYmIChNLng4Ni5pbnRubyA9PSAwIHx8IE0ueDg2LmludG5vID09IDIpKSB8fAorLQkJCQkhQUNDRVNTX0ZMQUcoRl9JRikpIHsKKy0JCQkJeDg2ZW11X2ludHJfaGFuZGxlKCk7CistCQkJfQorLQkJfQorLQorLQkJb3AxID0gKCpzeXNfcmRiKSgoKHUzMilNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVArKykpOworLQkJKCp4ODZlbXVfb3B0YWJbb3AxXSkob3AxKTsKKysgICAgICAgICAgICBpZiAoKChNLng4Ni5pbnRyICYgSU5UUl9TWU5DSCkgJiYKKysgICAgICAgICAgICAgICAgIChNLng4Ni5pbnRubyA9PSAwIHx8IE0ueDg2LmludG5vID09IDIpKSB8fAorKyAgICAgICAgICAgICAgICAhQUNDRVNTX0ZMQUcoRl9JRikpIHsKKysgICAgICAgICAgICAgICAgeDg2ZW11X2ludHJfaGFuZGxlKCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgb3AxID0gKCpzeXNfcmRiKSAoKCh1MzIpIE0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCsrKSk7CisrICAgICAgICAoKng4NmVtdV9vcHRhYltvcDFdKSAob3AxKTsKKyAgICAgICAgIGlmIChNLng4Ni5kZWJ1ZyAmIERFQlVHX0VYSVQpIHsKKyAgICAgICAgICAgICBNLng4Ni5kZWJ1ZyAmPSB+REVCVUdfRVhJVDsKKyAgICAgICAgICAgICByZXR1cm47CitAQCAtMTMyLDkgKzEzNCwxMCBAQCBEQiggICAgICAgICAgICAgaWYgKE0ueDg2LlJfU1AgIT0gMCkgeworIFJFTUFSS1M6CisgSGFsdHMgdGhlIHN5c3RlbSBieSBzZXR0aW5nIHRoZSBoYWx0ZWQgc3lzdGVtIGZsYWcuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIFg4NkVNVV9oYWx0X3N5cyh2b2lkKQorK3ZvaWQKKytYODZFTVVfaGFsdF9zeXModm9pZCkKKyB7CistCU0ueDg2LmludHIgfD0gSU5UUl9IQUxURUQ7CisrICAgIE0ueDg2LmludHIgfD0gSU5UUl9IQUxURUQ7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMTQ5LDE5ICsxNTIsMTcgQEAgbmV4dCBpbnN0cnVjdGlvbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24sIGFzICgqc3lzX3JkYikgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGZldGNoX2RlY29kZV9tb2RybSgKKy0JaW50ICptb2QsCistCWludCAqcmVnaCwKKy0JaW50ICpyZWdsKQorK3ZvaWQKKytmZXRjaF9kZWNvZGVfbW9kcm0oaW50ICptb2QsIGludCAqcmVnaCwgaW50ICpyZWdsKQorIHsKKy0JaW50IGZldGNoZWQ7CistCistREIoCWlmIChDSEVDS19JUF9GRVRDSCgpKQorLQkgIHg4NmVtdV9jaGVja19pcF9hY2Nlc3MoKTspCistCWZldGNoZWQgPSAoKnN5c19yZGIpKCgodTMyKU0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCsrKSk7CistCUlOQ19ERUNPREVEX0lOU1RfTEVOKDEpOworLQkqbW9kICA9IChmZXRjaGVkID4+IDYpICYgMHgwMzsKKy0JKnJlZ2ggPSAoZmV0Y2hlZCA+PiAzKSAmIDB4MDc7CisrICAgIGludCBmZXRjaGVkOworKworKyAgICBEQihpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKysgICAgICAgIGZldGNoZWQgPSAoKnN5c19yZGIpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKysgICAgSU5DX0RFQ09ERURfSU5TVF9MRU4oMSk7CisrICAgICptb2QgPSAoZmV0Y2hlZCA+PiA2KSAmIDB4MDM7CisrICAgICpyZWdoID0gKGZldGNoZWQgPj4gMykgJiAweDA3OworICAgICAqcmVnbCA9IChmZXRjaGVkID4+IDApICYgMHgwNzsKKyB9CisgCitAQCAtMTc1LDE1ICsxNzYsMTYgQEAgbW92ZXMgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgdG8gdGhlIG5leHQgdmFsdWUuCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uLCBhcyAoKnN5c19yZGIpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggZmV0Y2hfYnl0ZV9pbW0odm9pZCkKKyt1OAorK2ZldGNoX2J5dGVfaW1tKHZvaWQpCisgeworLQl1OCBmZXRjaGVkOworKyAgICB1OCBmZXRjaGVkOworIAorLURCKAlpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKy0JCXg4NmVtdV9jaGVja19pcF9hY2Nlc3MoKTspCistCWZldGNoZWQgPSAoKnN5c19yZGIpKCgodTMyKU0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCsrKSk7CistCUlOQ19ERUNPREVEX0lOU1RfTEVOKDEpOworLQlyZXR1cm4gZmV0Y2hlZDsKKysgICAgREIoaWYgKENIRUNLX0lQX0ZFVENIKCkpCisrICAgICAgIHg4NmVtdV9jaGVja19pcF9hY2Nlc3MoKTspCisrICAgICAgICBmZXRjaGVkID0gKCpzeXNfcmRiKSAoKCh1MzIpIE0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCsrKSk7CisrICAgIElOQ19ERUNPREVEX0lOU1RfTEVOKDEpOworKyAgICByZXR1cm4gZmV0Y2hlZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0xOTYsMTYgKzE5OCwxNyBAQCBtb3ZlcyB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciB0byB0aGUgbmV4dCB2YWx1ZS4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24sIGFzICgqc3lzX3JkdykgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgZmV0Y2hfd29yZF9pbW0odm9pZCkKKyt1MTYKKytmZXRjaF93b3JkX2ltbSh2b2lkKQorIHsKKy0JdTE2CWZldGNoZWQ7CistCistREIoCWlmIChDSEVDS19JUF9GRVRDSCgpKQorLQkJeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKy0JZmV0Y2hlZCA9ICgqc3lzX3JkdykoKCh1MzIpTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKSk7CistCU0ueDg2LlJfSVAgKz0gMjsKKy0JSU5DX0RFQ09ERURfSU5TVF9MRU4oMik7CistCXJldHVybiBmZXRjaGVkOworKyAgICB1MTYgZmV0Y2hlZDsKKysKKysgICAgREIoaWYgKENIRUNLX0lQX0ZFVENIKCkpCisrICAgICAgIHg4NmVtdV9jaGVja19pcF9hY2Nlc3MoKTspCisrICAgICAgICBmZXRjaGVkID0gKCpzeXNfcmR3KSAoKCh1MzIpIE0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCkpOworKyAgICBNLng4Ni5SX0lQICs9IDI7CisrICAgIElOQ19ERUNPREVEX0lOU1RfTEVOKDIpOworKyAgICByZXR1cm4gZmV0Y2hlZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0yMTgsMTYgKzIyMSwxNyBAQCBtb3ZlcyB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciB0byB0aGUgbmV4dCB2YWx1ZS4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24sIGFzICgqc3lzX3JkdykgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgZmV0Y2hfbG9uZ19pbW0odm9pZCkKKyt1MzIKKytmZXRjaF9sb25nX2ltbSh2b2lkKQorIHsKKy0JdTMyIGZldGNoZWQ7CistCistREIoCWlmIChDSEVDS19JUF9GRVRDSCgpKQorLQkgIHg4NmVtdV9jaGVja19pcF9hY2Nlc3MoKTspCistCWZldGNoZWQgPSAoKnN5c19yZGwpKCgodTMyKU0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCkpOworLQlNLng4Ni5SX0lQICs9IDQ7CistCUlOQ19ERUNPREVEX0lOU1RfTEVOKDQpOworLQlyZXR1cm4gZmV0Y2hlZDsKKysgICAgdTMyIGZldGNoZWQ7CisrCisrICAgIERCKGlmIChDSEVDS19JUF9GRVRDSCgpKQorKyAgICAgICB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKCk7KQorKyAgICAgICAgZmV0Y2hlZCA9ICgqc3lzX3JkbCkgKCgodTMyKSBNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVApKTsKKysgICAgTS54ODYuUl9JUCArPSA0OworKyAgICBJTkNfREVDT0RFRF9JTlNUX0xFTig0KTsKKysgICAgcmV0dXJuIGZldGNoZWQ7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMjU5LDM4ICsyNjMsMzkgQEAgY3B1LXN0YXRlLXZhcmlibGUgTS54ODYubW9kZS4gVGhlcmUgYXJlIHNldmVyYWwgcG90ZW50aWFsIHN0YXRlczoKKyAKKyBFYWNoIG9mIHRoZSBhYm92ZSA3IGl0ZW1zIGFyZSBoYW5kbGVkIHdpdGggYSBiaXQgaW4gdGhlIG1vZGUgZmllbGQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1fSU5MSU5FIHUzMiBnZXRfZGF0YV9zZWdtZW50KHZvaWQpCisrX0lOTElORSB1MzIKKytnZXRfZGF0YV9zZWdtZW50KHZvaWQpCisgeworICNkZWZpbmUJR0VUX1NFR01FTlQoc2VnbWVudCkKKy0Jc3dpdGNoIChNLng4Ni5tb2RlICYgU1lTTU9ERV9TRUdNQVNLKSB7CistCSAgY2FzZSAwOgkJCQkJLyogZGVmYXVsdCBjYXNlOiB1c2UgZHMgcmVnaXN0ZXIgKi8KKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0RTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRFMgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9EUzsKKy0JICBjYXNlIFNZU01PREVfU0VHX0RTX1NTOgkvKiBub24tb3ZlcnJpZGRlbiwgdXNlIHNzIHJlZ2lzdGVyICovCistCQlyZXR1cm4gIE0ueDg2LlJfU1M7CistCSAgY2FzZSBTWVNNT0RFX1NFR09WUl9DUzoKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0NTIHwgU1lTTU9ERV9TRUdfRFNfU1M6CistCQlyZXR1cm4gIE0ueDg2LlJfQ1M7CistCSAgY2FzZSBTWVNNT0RFX1NFR09WUl9FUzoKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0VTIHwgU1lTTU9ERV9TRUdfRFNfU1M6CistCQlyZXR1cm4gIE0ueDg2LlJfRVM7CistCSAgY2FzZSBTWVNNT0RFX1NFR09WUl9GUzoKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0ZTIHwgU1lTTU9ERV9TRUdfRFNfU1M6CistCQlyZXR1cm4gIE0ueDg2LlJfRlM7CistCSAgY2FzZSBTWVNNT0RFX1NFR09WUl9HUzoKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0dTIHwgU1lTTU9ERV9TRUdfRFNfU1M6CistCQlyZXR1cm4gIE0ueDg2LlJfR1M7CistCSAgY2FzZSBTWVNNT0RFX1NFR09WUl9TUzoKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX1NTIHwgU1lTTU9ERV9TRUdfRFNfU1M6CistCQlyZXR1cm4gIE0ueDg2LlJfU1M7CistCSAgZGVmYXVsdDoKKysgICAgc3dpdGNoIChNLng4Ni5tb2RlICYgU1lTTU9ERV9TRUdNQVNLKSB7CisrICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgY2FzZTogdXNlIGRzIHJlZ2lzdGVyICovCisrICAgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRFM6CisrICAgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRFMgfCBTWVNNT0RFX1NFR19EU19TUzoKKysgICAgICAgIHJldHVybiBNLng4Ni5SX0RTOworKyAgICBjYXNlIFNZU01PREVfU0VHX0RTX1NTOiAgICAvKiBub24tb3ZlcnJpZGRlbiwgdXNlIHNzIHJlZ2lzdGVyICovCisrICAgICAgICByZXR1cm4gTS54ODYuUl9TUzsKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9DUzoKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9DUyB8IFNZU01PREVfU0VHX0RTX1NTOgorKyAgICAgICAgcmV0dXJuIE0ueDg2LlJfQ1M7CisrICAgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRVM6CisrICAgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRVMgfCBTWVNNT0RFX1NFR19EU19TUzoKKysgICAgICAgIHJldHVybiBNLng4Ni5SX0VTOworKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0ZTOgorKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0ZTIHwgU1lTTU9ERV9TRUdfRFNfU1M6CisrICAgICAgICByZXR1cm4gTS54ODYuUl9GUzsKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9HUzoKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9HUyB8IFNZU01PREVfU0VHX0RTX1NTOgorKyAgICAgICAgcmV0dXJuIE0ueDg2LlJfR1M7CisrICAgIGNhc2UgU1lTTU9ERV9TRUdPVlJfU1M6CisrICAgIGNhc2UgU1lTTU9ERV9TRUdPVlJfU1MgfCBTWVNNT0RFX1NFR19EU19TUzoKKysgICAgICAgIHJldHVybiBNLng4Ni5SX1NTOworKyAgICBkZWZhdWx0OgorICNpZmRlZglERUJVRworLQkJcHJpbnRrKCJlcnJvcjogc2hvdWxkIG5vdCBoYXBwZW46ICBtdWx0aXBsZSBvdmVycmlkZXMuXG4iKTsKKysgICAgICAgIHByaW50aygiZXJyb3I6IHNob3VsZCBub3QgaGFwcGVuOiAgbXVsdGlwbGUgb3ZlcnJpZGVzLlxuIik7CisgI2VuZGlmCistCQlIQUxUX1NZUygpOworLQkJcmV0dXJuIDA7CistCX0KKysgICAgICAgIEhBTFRfU1lTKCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTMwMiwxNCArMzA3LDE0IEBAIEJ5dGUgdmFsdWUgcmVhZCBmcm9tIHRoZSBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBmZXRjaF9kYXRhX2J5dGUoCistCXVpbnQgb2Zmc2V0KQorK3U4CisrZmV0Y2hfZGF0YV9ieXRlKHVpbnQgb2Zmc2V0KQorIHsKKyAjaWZkZWYgREVCVUcKKy0JaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCistCQl4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNilnZXRfZGF0YV9zZWdtZW50KCksIG9mZnNldCk7CisrICAgIGlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorKyAgICAgICAgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKCh1MTYpIGdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKyAjZW5kaWYKKy0JcmV0dXJuICgqc3lzX3JkYikoKGdldF9kYXRhX3NlZ21lbnQoKSA8PCA0KSArIG9mZnNldCk7CisrICAgIHJldHVybiAoKnN5c19yZGIpICgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0KTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0zMjEsMTQgKzMyNiwxNCBAQCBXb3JkIHZhbHVlIHJlYWQgZnJvbSB0aGUgYWJzb2x1dGUgbWVtb3J5IGxvY2F0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c19yZFgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGZldGNoX2RhdGFfd29yZCgKKy0JdWludCBvZmZzZXQpCisrdTE2CisrZmV0Y2hfZGF0YV93b3JkKHVpbnQgb2Zmc2V0KQorIHsKKyAjaWZkZWYgREVCVUcKKy0JaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCistCQl4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNilnZXRfZGF0YV9zZWdtZW50KCksIG9mZnNldCk7CisrICAgIGlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorKyAgICAgICAgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKCh1MTYpIGdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKyAjZW5kaWYKKy0JcmV0dXJuICgqc3lzX3JkdykoKGdldF9kYXRhX3NlZ21lbnQoKSA8PCA0KSArIG9mZnNldCk7CisrICAgIHJldHVybiAoKnN5c19yZHcpICgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0KTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0zNDAsMTQgKzM0NSwxNCBAQCBMb25nIHZhbHVlIHJlYWQgZnJvbSB0aGUgYWJzb2x1dGUgbWVtb3J5IGxvY2F0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c19yZFgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGZldGNoX2RhdGFfbG9uZygKKy0JdWludCBvZmZzZXQpCisrdTMyCisrZmV0Y2hfZGF0YV9sb25nKHVpbnQgb2Zmc2V0KQorIHsKKyAjaWZkZWYgREVCVUcKKy0JaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCistCQl4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNilnZXRfZGF0YV9zZWdtZW50KCksIG9mZnNldCk7CisrICAgIGlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorKyAgICAgICAgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKCh1MTYpIGdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKyAjZW5kaWYKKy0JcmV0dXJuICgqc3lzX3JkbCkoKGdldF9kYXRhX3NlZ21lbnQoKSA8PCA0KSArIG9mZnNldCk7CisrICAgIHJldHVybiAoKnN5c19yZGwpICgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0KTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0zNjAsMTUgKzM2NSwxNCBAQCBCeXRlIHZhbHVlIHJlYWQgZnJvbSB0aGUgYWJzb2x1dGUgbWVtb3J5IGxvY2F0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c19yZFgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggZmV0Y2hfZGF0YV9ieXRlX2FicygKKy0JdWludCBzZWdtZW50LAorLQl1aW50IG9mZnNldCkKKyt1OAorK2ZldGNoX2RhdGFfYnl0ZV9hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCkKKyB7CisgI2lmZGVmIERFQlVHCistCWlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorLQkJeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHNlZ21lbnQsIG9mZnNldCk7CisrICAgIGlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorKyAgICAgICAgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHNlZ21lbnQsIG9mZnNldCk7CisgI2VuZGlmCistCXJldHVybiAoKnN5c19yZGIpKCgodTMyKXNlZ21lbnQgPDwgNCkgKyBvZmZzZXQpOworKyAgICByZXR1cm4gKCpzeXNfcmRiKSAoKCh1MzIpIHNlZ21lbnQgPDwgNCkgKyBvZmZzZXQpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTM4MSwxNSArMzg1LDE0IEBAIFdvcmQgdmFsdWUgcmVhZCBmcm9tIHRoZSBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgZmV0Y2hfZGF0YV93b3JkX2FicygKKy0JdWludCBzZWdtZW50LAorLQl1aW50IG9mZnNldCkKKyt1MTYKKytmZXRjaF9kYXRhX3dvcmRfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworICNlbmRpZgorLQlyZXR1cm4gKCpzeXNfcmR3KSgoKHUzMilzZWdtZW50IDw8IDQpICsgb2Zmc2V0KTsKKysgICAgcmV0dXJuICgqc3lzX3JkdykgKCgodTMyKSBzZWdtZW50IDw8IDQpICsgb2Zmc2V0KTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00MDIsMTUgKzQwNSwxNCBAQCBMb25nIHZhbHVlIHJlYWQgZnJvbSB0aGUgYWJzb2x1dGUgbWVtb3J5IGxvY2F0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c19yZFgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGZldGNoX2RhdGFfbG9uZ19hYnMoCistCXVpbnQgc2VnbWVudCwKKy0JdWludCBvZmZzZXQpCisrdTMyCisrZmV0Y2hfZGF0YV9sb25nX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0KQorIHsKKyAjaWZkZWYgREVCVUcKKy0JaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCistCQl4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3Moc2VnbWVudCwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3Moc2VnbWVudCwgb2Zmc2V0KTsKKyAjZW5kaWYKKy0JcmV0dXJuICgqc3lzX3JkbCkoKCh1MzIpc2VnbWVudCA8PCA0KSArIG9mZnNldCk7CisrICAgIHJldHVybiAoKnN5c19yZGwpICgoKHUzMikgc2VnbWVudCA8PCA0KSArIG9mZnNldCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNDI0LDE1ICs0MjYsMTQgQEAgdGhlIGN1cnJlbnQgJ2RlZmF1bHQnIHNlZ21lbnQsIHdoaWNoIG1heSBoYXZlIGJlZW4gb3ZlcnJpZGRlbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYXMgKCpzeXNfd3JYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgc3RvcmVfZGF0YV9ieXRlKAorLQl1aW50IG9mZnNldCwKKy0JdTggdmFsKQorK3ZvaWQKKytzdG9yZV9kYXRhX2J5dGUodWludCBvZmZzZXQsIHU4IHZhbCkKKyB7CisgI2lmZGVmIERFQlVHCistCWlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorLQkJeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKCh1MTYpZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KSBnZXRfZGF0YV9zZWdtZW50KCksIG9mZnNldCk7CisgI2VuZGlmCistCSgqc3lzX3dyYikoKGdldF9kYXRhX3NlZ21lbnQoKSA8PCA0KSArIG9mZnNldCwgdmFsKTsKKysgICAgKCpzeXNfd3JiKSAoKGdldF9kYXRhX3NlZ21lbnQoKSA8PCA0KSArIG9mZnNldCwgdmFsKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00NDYsMTUgKzQ0NywxNCBAQCB0aGUgY3VycmVudCAnZGVmYXVsdCcgc2VnbWVudCwgd2hpY2ggbWF5IGhhdmUgYmVlbiBvdmVycmlkZGVuLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBzdG9yZV9kYXRhX3dvcmQoCistCXVpbnQgb2Zmc2V0LAorLQl1MTYgdmFsKQorK3ZvaWQKKytzdG9yZV9kYXRhX3dvcmQodWludCBvZmZzZXQsIHUxNiB2YWwpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KWdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNikgZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworICNlbmRpZgorLQkoKnN5c193cncpKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisrICAgICgqc3lzX3dydykgKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNDY4LDE1ICs0NjgsMTQgQEAgdGhlIGN1cnJlbnQgJ2RlZmF1bHQnIHNlZ21lbnQsIHdoaWNoIG1heSBoYXZlIGJlZW4gb3ZlcnJpZGRlbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYXMgKCpzeXNfd3JYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgc3RvcmVfZGF0YV9sb25nKAorLQl1aW50IG9mZnNldCwKKy0JdTMyIHZhbCkKKyt2b2lkCisrc3RvcmVfZGF0YV9sb25nKHVpbnQgb2Zmc2V0LCB1MzIgdmFsKQorIHsKKyAjaWZkZWYgREVCVUcKKy0JaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCistCQl4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNilnZXRfZGF0YV9zZWdtZW50KCksIG9mZnNldCk7CisrICAgIGlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorKyAgICAgICAgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKCh1MTYpIGdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKyAjZW5kaWYKKy0JKCpzeXNfd3JsKSgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0LCB2YWwpOworKyAgICAoKnN5c193cmwpICgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0LCB2YWwpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTQ5MCwxNiArNDg5LDE0IEBAIFdyaXRlcyBhIGJ5dGUgdmFsdWUgdG8gYW4gYWJzb2x1dGUgbWVtb3J5IGxvY2F0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBzdG9yZV9kYXRhX2J5dGVfYWJzKAorLQl1aW50IHNlZ21lbnQsCistCXVpbnQgb2Zmc2V0LAorLQl1OCB2YWwpCisrdm9pZAorK3N0b3JlX2RhdGFfYnl0ZV9hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCwgdTggdmFsKQorIHsKKyAjaWZkZWYgREVCVUcKKy0JaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCistCQl4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3Moc2VnbWVudCwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3Moc2VnbWVudCwgb2Zmc2V0KTsKKyAjZW5kaWYKKy0JKCpzeXNfd3JiKSgoKHUzMilzZWdtZW50IDw8IDQpICsgb2Zmc2V0LCB2YWwpOworKyAgICAoKnN5c193cmIpICgoKHUzMikgc2VnbWVudCA8PCA0KSArIG9mZnNldCwgdmFsKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC01MTMsMTYgKzUxMCwxNCBAQCBXcml0ZXMgYSB3b3JkIHZhbHVlIHRvIGFuIGFic29sdXRlIG1lbW9yeSBsb2NhdGlvbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYXMgKCpzeXNfd3JYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgc3RvcmVfZGF0YV93b3JkX2FicygKKy0JdWludCBzZWdtZW50LAorLQl1aW50IG9mZnNldCwKKy0JdTE2IHZhbCkKKyt2b2lkCisrc3RvcmVfZGF0YV93b3JkX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0LCB1MTYgdmFsKQorIHsKKyAjaWZkZWYgREVCVUcKKy0JaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCistCQl4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3Moc2VnbWVudCwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3Moc2VnbWVudCwgb2Zmc2V0KTsKKyAjZW5kaWYKKy0JKCpzeXNfd3J3KSgoKHUzMilzZWdtZW50IDw8IDQpICsgb2Zmc2V0LCB2YWwpOworKyAgICAoKnN5c193cncpICgoKHUzMikgc2VnbWVudCA8PCA0KSArIG9mZnNldCwgdmFsKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC01MzYsMTYgKzUzMSwxNCBAQCBXcml0ZXMgYSBsb25nIHZhbHVlIHRvIGFuIGFic29sdXRlIG1lbW9yeSBsb2NhdGlvbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYXMgKCpzeXNfd3JYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgc3RvcmVfZGF0YV9sb25nX2FicygKKy0JdWludCBzZWdtZW50LAorLQl1aW50IG9mZnNldCwKKy0JdTMyIHZhbCkKKyt2b2lkCisrc3RvcmVfZGF0YV9sb25nX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0LCB1MzIgdmFsKQorIHsKKyAjaWZkZWYgREVCVUcKKy0JaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCistCQl4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3Moc2VnbWVudCwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3Moc2VnbWVudCwgb2Zmc2V0KTsKKyAjZW5kaWYKKy0JKCpzeXNfd3JsKSgoKHUzMilzZWdtZW50IDw8IDQpICsgb2Zmc2V0LCB2YWwpOworKyAgICAoKnN5c193cmwpICgoKHUzMikgc2VnbWVudCA8PCA0KSArIG9mZnNldCwgdmFsKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC01NTksMzcgKzU1MiwzNyBAQCBSRU1BUktTOgorIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHJlZ2lzdGVyIGdpdmVuIGJ5IHRoZSBSL1JNIGZpZWxkIG9mIHRoZQorIG1vZHJtIGJ5dGUsIGZvciBieXRlIG9wZXJhbmRzLiBBbHNvIGVuYWJsZXMgdGhlIGRlY29kaW5nIG9mIGluc3RydWN0aW9ucy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4KiBkZWNvZGVfcm1fYnl0ZV9yZWdpc3RlcigKKy0JaW50IHJlZykKKyt1OCAqCisrZGVjb2RlX3JtX2J5dGVfcmVnaXN0ZXIoaW50IHJlZykKKyB7CistCXN3aXRjaCAocmVnKSB7CistICAgICAgY2FzZSAwOgorLQkJREVDT0RFX1BSSU5URigiQUwiKTsKKy0JCXJldHVybiAmTS54ODYuUl9BTDsKKy0JICBjYXNlIDE6CistCQlERUNPREVfUFJJTlRGKCJDTCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0NMOworLQkgIGNhc2UgMjoKKy0JCURFQ09ERV9QUklOVEYoIkRMIik7CistCQlyZXR1cm4gJk0ueDg2LlJfREw7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URigiQkwiKTsKKy0JCXJldHVybiAmTS54ODYuUl9CTDsKKy0JICBjYXNlIDQ6CistCQlERUNPREVfUFJJTlRGKCJBSCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0FIOworLQkgIGNhc2UgNToKKy0JCURFQ09ERV9QUklOVEYoIkNIIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQ0g7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URigiREgiKTsKKy0JCXJldHVybiAmTS54ODYuUl9ESDsKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGKCJCSCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0JIOworLQl9CistCUhBTFRfU1lTKCk7CistCXJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAvKiBOT1QgUkVBQ0hFRCBPUiBSRUFDSEVEIE9OIEVSUk9SICovCisrICAgIHN3aXRjaCAocmVnKSB7CisrICAgIGNhc2UgMDoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkFMIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfQUw7CisrICAgIGNhc2UgMToKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkNMIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfQ0w7CisrICAgIGNhc2UgMjoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkRMIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfREw7CisrICAgIGNhc2UgMzoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkJMIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfQkw7CisrICAgIGNhc2UgNDoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkFIIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfQUg7CisrICAgIGNhc2UgNToKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkNIIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfQ0g7CisrICAgIGNhc2UgNjoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkRIIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfREg7CisrICAgIGNhc2UgNzoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkJIIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfQkg7CisrICAgIH0KKysgICAgSEFMVF9TWVMoKTsKKysgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIE5PVCBSRUFDSEVEIE9SIFJFQUNIRUQgT04gRVJST1IgKi8KKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC02MDMsMzYgKzU5NiwzNiBAQCBSRU1BUktTOgorIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHJlZ2lzdGVyIGdpdmVuIGJ5IHRoZSBSL1JNIGZpZWxkIG9mIHRoZQorIG1vZHJtIGJ5dGUsIGZvciB3b3JkIG9wZXJhbmRzLiAgQWxzbyBlbmFibGVzIHRoZSBkZWNvZGluZyBvZiBpbnN0cnVjdGlvbnMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYqIGRlY29kZV9ybV93b3JkX3JlZ2lzdGVyKAorLQlpbnQgcmVnKQorK3UxNiAqCisrZGVjb2RlX3JtX3dvcmRfcmVnaXN0ZXIoaW50IHJlZykKKyB7CistCXN3aXRjaCAocmVnKSB7CistCSAgY2FzZSAwOgorLQkJREVDT0RFX1BSSU5URigiQVgiKTsKKy0JCXJldHVybiAmTS54ODYuUl9BWDsKKy0JICBjYXNlIDE6CistCQlERUNPREVfUFJJTlRGKCJDWCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0NYOworLQkgIGNhc2UgMjoKKy0JCURFQ09ERV9QUklOVEYoIkRYIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRFg7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URigiQlgiKTsKKy0JCXJldHVybiAmTS54ODYuUl9CWDsKKy0JICBjYXNlIDQ6CistCQlERUNPREVfUFJJTlRGKCJTUCIpOworLQkJcmV0dXJuICZNLng4Ni5SX1NQOworLQkgIGNhc2UgNToKKy0JCURFQ09ERV9QUklOVEYoIkJQIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQlA7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URigiU0kiKTsKKy0JCXJldHVybiAmTS54ODYuUl9TSTsKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGKCJESSIpOworLQkJcmV0dXJuICZNLng4Ni5SX0RJOworLQl9CistCUhBTFRfU1lTKCk7CisrICAgIHN3aXRjaCAocmVnKSB7CisrICAgIGNhc2UgMDoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkFYIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfQVg7CisrICAgIGNhc2UgMToKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkNYIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfQ1g7CisrICAgIGNhc2UgMjoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkRYIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfRFg7CisrICAgIGNhc2UgMzoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkJYIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfQlg7CisrICAgIGNhc2UgNDoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIlNQIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfU1A7CisrICAgIGNhc2UgNToKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkJQIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfQlA7CisrICAgIGNhc2UgNjoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIlNJIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfU0k7CisrICAgIGNhc2UgNzoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkRJIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfREk7CisrICAgIH0KKysgICAgSEFMVF9TWVMoKTsKKyAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIE5PVFJFQUNIRUQgT1IgUkVBQ0hFRCBPTiBFUlJPUiAqLworIH0KKyAKK0BAIC02NDcsMzYgKzY0MCwzNiBAQCBSRU1BUktTOgorIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHJlZ2lzdGVyIGdpdmVuIGJ5IHRoZSBSL1JNIGZpZWxkIG9mIHRoZQorIG1vZHJtIGJ5dGUsIGZvciBkd29yZCBvcGVyYW5kcy4gIEFsc28gZW5hYmxlcyB0aGUgZGVjb2Rpbmcgb2YgaW5zdHJ1Y3Rpb25zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyKiBkZWNvZGVfcm1fbG9uZ19yZWdpc3RlcigKKy0JaW50IHJlZykKKyt1MzIgKgorK2RlY29kZV9ybV9sb25nX3JlZ2lzdGVyKGludCByZWcpCisgeworICAgICBzd2l0Y2ggKHJlZykgeworLSAgICAgIGNhc2UgMDoKKy0JCURFQ09ERV9QUklOVEYoIkVBWCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0VBWDsKKy0JICBjYXNlIDE6CistCQlERUNPREVfUFJJTlRGKCJFQ1giKTsKKy0JCXJldHVybiAmTS54ODYuUl9FQ1g7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URigiRURYIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRURYOworLQkgIGNhc2UgMzoKKy0JCURFQ09ERV9QUklOVEYoIkVCWCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0VCWDsKKy0JICBjYXNlIDQ6CistCQlERUNPREVfUFJJTlRGKCJFU1AiKTsKKy0JCXJldHVybiAmTS54ODYuUl9FU1A7CistCSAgY2FzZSA1OgorLQkJREVDT0RFX1BSSU5URigiRUJQIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRUJQOworLQkgIGNhc2UgNjoKKy0JCURFQ09ERV9QUklOVEYoIkVTSSIpOworLQkJcmV0dXJuICZNLng4Ni5SX0VTSTsKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGKCJFREkiKTsKKy0JCXJldHVybiAmTS54ODYuUl9FREk7CistCX0KKy0JSEFMVF9TWVMoKTsKKysgICAgY2FzZSAwOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRUFYIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfRUFYOworKyAgICBjYXNlIDE6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJFQ1giKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FQ1g7CisrICAgIGNhc2UgMjoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkVEWCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0VEWDsKKysgICAgY2FzZSAzOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRUJYIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfRUJYOworKyAgICBjYXNlIDQ6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJFU1AiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FU1A7CisrICAgIGNhc2UgNToKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkVCUCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0VCUDsKKysgICAgY2FzZSA2OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRVNJIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfRVNJOworKyAgICBjYXNlIDc6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJFREkiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FREk7CisrICAgIH0KKysgICAgSEFMVF9TWVMoKTsKKyAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIE5PVFJFQUNIRUQgT1IgUkVBQ0hFRCBPTiBFUlJPUiAqLworIH0KKyAKK0BAIC02OTIsMTI2ICs2ODUsMTI5IEBAIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHJlZ2lzdGVyIGdpdmVuIGJ5IHRoZSBSL1JNIGZpZWxkIG9mIHRoZQorIG1vZHJtIGJ5dGUsIGZvciB3b3JkIG9wZXJhbmRzLCBtb2RpZmllZCBmcm9tIGFib3ZlIGZvciB0aGUgd2VpcmRvCisgc3BlY2lhbCBjYXNlIG9mIHNlZ3JlZyBvcGVyYW5kcy4gIEFsc28gZW5hYmxlcyB0aGUgZGVjb2Rpbmcgb2YgaW5zdHJ1Y3Rpb25zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2KiBkZWNvZGVfcm1fc2VnX3JlZ2lzdGVyKAorLQlpbnQgcmVnKQorK3UxNiAqCisrZGVjb2RlX3JtX3NlZ19yZWdpc3RlcihpbnQgcmVnKQorIHsKKy0Jc3dpdGNoIChyZWcpIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGKCJFUyIpOworLQkJcmV0dXJuICZNLng4Ni5SX0VTOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYoIkNTIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQ1M7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URigiU1MiKTsKKy0JCXJldHVybiAmTS54ODYuUl9TUzsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGKCJEUyIpOworLQkJcmV0dXJuICZNLng4Ni5SX0RTOworLQkgIGNhc2UgNDoKKy0JCURFQ09ERV9QUklOVEYoIkZTIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRlM7CistCSAgY2FzZSA1OgorLQkJREVDT0RFX1BSSU5URigiR1MiKTsKKy0JCXJldHVybiAmTS54ODYuUl9HUzsKKy0JICBjYXNlIDY6CistCSAgY2FzZSA3OgorLQkJREVDT0RFX1BSSU5URigiSUxMRUdBTCBTRUdSRUciKTsKKy0JCWJyZWFrOworLQl9CistCUhBTFRfU1lTKCk7CistCXJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAvKiBOT1QgUkVBQ0hFRCBPUiBSRUFDSEVEIE9OIEVSUk9SICovCisrICAgIHN3aXRjaCAocmVnKSB7CisrICAgIGNhc2UgMDoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkVTIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfRVM7CisrICAgIGNhc2UgMToKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkNTIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfQ1M7CisrICAgIGNhc2UgMjoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIlNTIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfU1M7CisrICAgIGNhc2UgMzoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkRTIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfRFM7CisrICAgIGNhc2UgNDoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkZTIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfRlM7CisrICAgIGNhc2UgNToKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkdTIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfR1M7CisrICAgIGNhc2UgNjoKKysgICAgY2FzZSA3OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBTRUdSRUciKTsKKysgICAgICAgIGJyZWFrOworKyAgICB9CisrICAgIEhBTFRfU1lTKCk7CisrICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAvKiBOT1QgUkVBQ0hFRCBPUiBSRUFDSEVEIE9OIEVSUk9SICovCisgfQorIAorIC8qCisgICoKKyAgKiByZXR1cm4gb2Zmc2V0IGZyb20gdGhlIFNJQiBCeXRlCisgICovCistdTMyIGRlY29kZV9zaWJfYWRkcmVzcyhpbnQgc2liLCBpbnQgbW9kKQorK3UzMgorK2RlY29kZV9zaWJfYWRkcmVzcyhpbnQgc2liLCBpbnQgbW9kKQorIHsKKyAgICAgdTMyIGJhc2UgPSAwLCBpID0gMCwgc2NhbGUgPSAxOworIAorLSAgICBzd2l0Y2goc2liICYgMHgwNykgeworKyAgICBzd2l0Y2ggKHNpYiAmIDB4MDcpIHsKKyAgICAgY2FzZSAwOgorLQlERUNPREVfUFJJTlRGKCJbRUFYXSIpOworLQliYXNlID0gTS54ODYuUl9FQVg7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VBWF0iKTsKKysgICAgICAgIGJhc2UgPSBNLng4Ni5SX0VBWDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CistCURFQ09ERV9QUklOVEYoIltFQ1hdIik7CistCWJhc2UgPSBNLng4Ni5SX0VDWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUNYXSIpOworKyAgICAgICAgYmFzZSA9IE0ueDg2LlJfRUNYOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKy0JREVDT0RFX1BSSU5URigiW0VEWF0iKTsKKy0JYmFzZSA9IE0ueDg2LlJfRURYOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFRFhdIik7CisrICAgICAgICBiYXNlID0gTS54ODYuUl9FRFg7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAzOgorLQlERUNPREVfUFJJTlRGKCJbRUJYXSIpOworLQliYXNlID0gTS54ODYuUl9FQlg7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VCWF0iKTsKKysgICAgICAgIGJhc2UgPSBNLng4Ni5SX0VCWDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDQ6CistCURFQ09ERV9QUklOVEYoIltFU1BdIik7CistCWJhc2UgPSBNLng4Ni5SX0VTUDsKKy0JTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRVNQXSIpOworKyAgICAgICAgYmFzZSA9IE0ueDg2LlJfRVNQOworKyAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDU6CistCWlmIChtb2QgPT0gMCkgeworLQkgICAgYmFzZSA9IGZldGNoX2xvbmdfaW1tKCk7CistCSAgICBERUNPREVfUFJJTlRGMigiJTA4eCIsIGJhc2UpOworLQl9IGVsc2UgeworLQkgICAgREVDT0RFX1BSSU5URigiW0VCUF0iKTsKKy0JICAgIGJhc2UgPSBNLng4Ni5SX0VTUDsKKy0JICAgIE0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CistCX0KKy0JYnJlYWs7CisrICAgICAgICBpZiAobW9kID09IDApIHsKKysgICAgICAgICAgICBiYXNlID0gZmV0Y2hfbG9uZ19pbW0oKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eCIsIGJhc2UpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VCUF0iKTsKKysgICAgICAgICAgICBiYXNlID0gTS54ODYuUl9FU1A7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDY6CistCURFQ09ERV9QUklOVEYoIltFU0ldIik7CistCWJhc2UgPSBNLng4Ni5SX0VTSTsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRVNJXSIpOworKyAgICAgICAgYmFzZSA9IE0ueDg2LlJfRVNJOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNzoKKy0JREVDT0RFX1BSSU5URigiW0VESV0iKTsKKy0JYmFzZSA9IE0ueDg2LlJfRURJOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFREldIik7CisrICAgICAgICBiYXNlID0gTS54ODYuUl9FREk7CisrICAgICAgICBicmVhazsKKyAgICAgfQorICAgICBzd2l0Y2ggKChzaWIgPj4gMykgJiAweDA3KSB7CisgICAgIGNhc2UgMDoKKy0JREVDT0RFX1BSSU5URigiW0VBWCIpOworLQlpID0gTS54ODYuUl9FQVg7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VBWCIpOworKyAgICAgICAgaSA9IE0ueDg2LlJfRUFYOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKy0JREVDT0RFX1BSSU5URigiW0VDWCIpOworLQlpID0gTS54ODYuUl9FQ1g7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VDWCIpOworKyAgICAgICAgaSA9IE0ueDg2LlJfRUNYOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKy0JREVDT0RFX1BSSU5URigiW0VEWCIpOworLQlpID0gTS54ODYuUl9FRFg7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VEWCIpOworKyAgICAgICAgaSA9IE0ueDg2LlJfRURYOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMzoKKy0JREVDT0RFX1BSSU5URigiW0VCWCIpOworLQlpID0gTS54ODYuUl9FQlg7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VCWCIpOworKyAgICAgICAgaSA9IE0ueDg2LlJfRUJYOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNDoKKy0JaSA9IDA7CistCWJyZWFrOworKyAgICAgICAgaSA9IDA7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSA1OgorLQlERUNPREVfUFJJTlRGKCJbRUJQIik7CistCWkgPSBNLng4Ni5SX0VCUDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUJQIik7CisrICAgICAgICBpID0gTS54ODYuUl9FQlA7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSA2OgorLQlERUNPREVfUFJJTlRGKCJbRVNJIik7CistCWkgPSBNLng4Ni5SX0VTSTsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRVNJIik7CisrICAgICAgICBpID0gTS54ODYuUl9FU0k7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSA3OgorLQlERUNPREVfUFJJTlRGKCJbRURJIik7CistCWkgPSBNLng4Ni5SX0VESTsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRURJIik7CisrICAgICAgICBpID0gTS54ODYuUl9FREk7CisrICAgICAgICBicmVhazsKKyAgICAgfQorICAgICBzY2FsZSA9IDEgPDwgKChzaWIgPj4gNikgJiAweDAzKTsKKyAgICAgaWYgKCgoc2liID4+IDMpICYgMHgwNykgIT0gNCkgeworLQlpZiAoc2NhbGUgPT0gMSkgeworLQkgICAgREVDT0RFX1BSSU5URigiXSIpOworLQl9IGVsc2UgeworLQkgICAgREVDT0RFX1BSSU5URjIoIiolZF0iLCBzY2FsZSk7CistCX0KKysgICAgICAgIGlmIChzY2FsZSA9PSAxKSB7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXSIpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiolZF0iLCBzY2FsZSk7CisrICAgICAgICB9CisgICAgIH0KKyAgICAgcmV0dXJuIGJhc2UgKyAoaSAqIHNjYWxlKTsKKyB9CitAQCAtODM2LDc0ICs4MzIsNzUgQEAgTk9URTogCVRoZSBjb2RlIHdoaWNoIHNwZWNpZmllcyB0aGUgY29ycmVzcG9uZGluZyBzZWdtZW50IChkcyB2cyBzcykKKyAJCWlmIGEgU1MgYWNjZXNzIGlzIG5lZWRlZCwgc2V0IHRoaXMgYml0LiAgT3RoZXJ3aXNlLCBEUyBhY2Nlc3MKKyAJCW9jY3VycyAodW5sZXNzIGFueSBvZiB0aGUgc2VnbWVudCBvdmVycmlkZSBiaXRzIGFyZSBzZXQpLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGRlY29kZV9ybTAwX2FkZHJlc3MoCistCWludCBybSkKKyt1MzIKKytkZWNvZGVfcm0wMF9hZGRyZXNzKGludCBybSkKKyB7CisgICAgIHUzMiBvZmZzZXQ7CisgICAgIGludCBzaWI7CisgCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfQUREUikgeworICAgICAgICAgLyogMzItYml0IGFkZHJlc3NpbmcgKi8KKy0Jc3dpdGNoIChybSkgeworLQkgIGNhc2UgMDoKKy0JCURFQ09ERV9QUklOVEYoIltFQVhdIik7CistCQlyZXR1cm4gTS54ODYuUl9FQVg7CistCSAgY2FzZSAxOgorLQkJREVDT0RFX1BSSU5URigiW0VDWF0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0VDWDsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGKCJbRURYXSIpOworLQkJcmV0dXJuIE0ueDg2LlJfRURYOworLQkgIGNhc2UgMzoKKy0JCURFQ09ERV9QUklOVEYoIltFQlhdIik7CistCQlyZXR1cm4gTS54ODYuUl9FQlg7CistCSAgY2FzZSA0OgorLQkJc2liID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKy0JCXJldHVybiBkZWNvZGVfc2liX2FkZHJlc3Moc2liLCAwKTsKKy0JICBjYXNlIDU6CistCQlvZmZzZXQgPSBmZXRjaF9sb25nX2ltbSgpOworLQkJREVDT0RFX1BSSU5URjIoIlslMDh4XSIsIG9mZnNldCk7CistCQlyZXR1cm4gb2Zmc2V0OworLQkgIGNhc2UgNjoKKy0JCURFQ09ERV9QUklOVEYoIltFU0ldIik7CistCQlyZXR1cm4gTS54ODYuUl9FU0k7CistCSAgY2FzZSA3OgorLQkJREVDT0RFX1BSSU5URigiW0VESV0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0VESTsKKy0JfQorLQlIQUxUX1NZUygpOworLSAgICB9IGVsc2UgeworKyAgICAgICAgc3dpdGNoIChybSkgeworKyAgICAgICAgY2FzZSAwOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltFQVhdIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUFYOworKyAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltFQ1hdIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUNYOworKyAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltFRFhdIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRURYOworKyAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltFQlhdIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUJYOworKyAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgIHNpYiA9IGZldGNoX2J5dGVfaW1tKCk7CisrICAgICAgICAgICAgcmV0dXJuIGRlY29kZV9zaWJfYWRkcmVzcyhzaWIsIDApOworKyAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIG9mZnNldCA9IGZldGNoX2xvbmdfaW1tKCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIlslMDh4XSIsIG9mZnNldCk7CisrICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKKysgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbRVNJXSIpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VTSTsKKysgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbRURJXSIpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VESTsKKysgICAgICAgIH0KKysgICAgICAgIEhBTFRfU1lTKCk7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICAvKiAxNi1iaXQgYWRkcmVzc2luZyAqLworLQlzd2l0Y2ggKHJtKSB7CistCSAgY2FzZSAwOgorLQkJREVDT0RFX1BSSU5URigiW0JYK1NJXSIpOworKyAgICAgICAgc3dpdGNoIChybSkgeworKyAgICAgICAgY2FzZSAwOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltCWCtTSV0iKTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlggKyBNLng4Ni5SX1NJKSAmIDB4ZmZmZjsKKy0JICBjYXNlIDE6CistCQlERUNPREVfUFJJTlRGKCJbQlgrREldIik7CisrICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0JYK0RJXSIpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CWCArIE0ueDg2LlJfREkpICYgMHhmZmZmOworLQkgIGNhc2UgMjoKKy0JCURFQ09ERV9QUklOVEYoIltCUCtTSV0iKTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0JQK1NJXSIpOworKyAgICAgICAgICAgIE0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JQICsgTS54ODYuUl9TSSkgJiAweGZmZmY7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URigiW0JQK0RJXSIpOworLQkJTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKysgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbQlArREldIik7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBNLng4Ni5SX0RJKSAmIDB4ZmZmZjsKKy0JICBjYXNlIDQ6CistCQlERUNPREVfUFJJTlRGKCJbU0ldIik7CistCQlyZXR1cm4gTS54ODYuUl9TSTsKKy0JICBjYXNlIDU6CistCQlERUNPREVfUFJJTlRGKCJbREldIik7CistCQlyZXR1cm4gTS54ODYuUl9ESTsKKy0JICBjYXNlIDY6CistCQlvZmZzZXQgPSBmZXRjaF93b3JkX2ltbSgpOworLQkJREVDT0RFX1BSSU5URjIoIlslMDR4XSIsIG9mZnNldCk7CistCQlyZXR1cm4gb2Zmc2V0OworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYoIltCWF0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0JYOworLQl9CistCUhBTFRfU1lTKCk7CisrICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW1NJXSIpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX1NJOworKyAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltESV0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9ESTsKKysgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICBvZmZzZXQgPSBmZXRjaF93b3JkX2ltbSgpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCJbJTA0eF0iLCBvZmZzZXQpOworKyAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7CisrICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0JYXSIpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0JYOworKyAgICAgICAgfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKyAgICAgfQorICAgICByZXR1cm4gMDsKKyB9CitAQCAtOTE5LDc5ICs5MTYsODAgQEAgUkVNQVJLUzoKKyBSZXR1cm4gdGhlIG9mZnNldCBnaXZlbiBieSBtb2Q9MDEgYWRkcmVzc2luZy4gIEFsc28gZW5hYmxlcyB0aGUKKyBkZWNvZGluZyBvZiBpbnN0cnVjdGlvbnMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgZGVjb2RlX3JtMDFfYWRkcmVzcygKKy0JaW50IHJtKQorK3UzMgorK2RlY29kZV9ybTAxX2FkZHJlc3MoaW50IHJtKQorIHsKKyAgICAgaW50IGRpc3BsYWNlbWVudCA9IDA7CisgICAgIGludCBzaWI7CisgCisgICAgIC8qIEZldGNoIGRpc3A4IGlmIG5vIFNJQiBieXRlICovCisgICAgIGlmICghKChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfQUREUikgJiYgKHJtID09IDQpKSkKKy0JZGlzcGxhY2VtZW50ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CisrICAgICAgICBkaXNwbGFjZW1lbnQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisgCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfQUREUikgeworICAgICAgICAgLyogMzItYml0IGFkZHJlc3NpbmcgKi8KKy0Jc3dpdGNoIChybSkgeworLQkgIGNhc2UgMDoKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtFQVhdIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VBWCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDE6CistCQlERUNPREVfUFJJTlRGMigiJWRbRUNYXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FQ1ggKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0VEWF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRURYICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgMzoKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtFQlhdIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VCWCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDQ6CistCQlzaWIgPSBmZXRjaF9ieXRlX2ltbSgpOworLQkJZGlzcGxhY2VtZW50ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistCQlERUNPREVfUFJJTlRGMigiJWQiLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIGRlY29kZV9zaWJfYWRkcmVzcyhzaWIsIDEpICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNToKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtFQlBdIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VCUCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDY6CistCQlERUNPREVfUFJJTlRGMigiJWRbRVNJXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FU0kgKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSA3OgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0VESV0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRURJICsgZGlzcGxhY2VtZW50OworLQl9CistCUhBTFRfU1lTKCk7CistICAgIH0gZWxzZSB7CisrICAgICAgICBzd2l0Y2ggKHJtKSB7CisrICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0VBWF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VBWCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbRUNYXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUNYICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtFRFhdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FRFggKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0VCWF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VCWCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICBzaWIgPSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICAgICAgICAgIGRpc3BsYWNlbWVudCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWQiLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVfc2liX2FkZHJlc3Moc2liLCAxKSArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbRUJQXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUJQICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtFU0ldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FU0kgKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0VESV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VESSArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIH0KKysgICAgICAgIEhBTFRfU1lTKCk7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICAvKiAxNi1iaXQgYWRkcmVzc2luZyAqLworLQlzd2l0Y2ggKHJtKSB7CistCSAgY2FzZSAwOgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0JYK1NJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICBzd2l0Y2ggKHJtKSB7CisrICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0JYK1NJXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgTS54ODYuUl9TSSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSAxOgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0JYK0RJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0JYK0RJXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgTS54ODYuUl9ESSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0JQK1NJXSIsIGRpc3BsYWNlbWVudCk7CistCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtCUCtTSV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIE0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JQICsgTS54ODYuUl9TSSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0JQK0RJXSIsIGRpc3BsYWNlbWVudCk7CistCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtCUCtESV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIE0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JQICsgTS54ODYuUl9ESSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSA0OgorLQkJREVDT0RFX1BSSU5URjIoIiVkW1NJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW1NJXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX1NJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDU6CistCQlERUNPREVfUFJJTlRGMigiJWRbREldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbREldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfREkgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgNjoKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtCUF0iLCBkaXNwbGFjZW1lbnQpOworLQkJTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKysgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbQlBdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CUCArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSA3OgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0JYXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0JYXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JfQorLQlIQUxUX1NZUygpOworKyAgICAgICAgfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKyAgICAgfQorICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgLyogU0hPVUxEIE5PVCBIQVBQRU4gKi8KKyB9CitAQCAtMTAwNyw4NiArMTAwNSw4NyBAQCBSRU1BUktTOgorIFJldHVybiB0aGUgb2Zmc2V0IGdpdmVuIGJ5IG1vZD0xMCBhZGRyZXNzaW5nLiAgQWxzbyBlbmFibGVzIHRoZQorIGRlY29kaW5nIG9mIGluc3RydWN0aW9ucy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBkZWNvZGVfcm0xMF9hZGRyZXNzKAorLQlpbnQgcm0pCisrdTMyCisrZGVjb2RlX3JtMTBfYWRkcmVzcyhpbnQgcm0pCisgeworICAgICB1MzIgZGlzcGxhY2VtZW50ID0gMDsKKyAgICAgaW50IHNpYjsKKyAKKyAgICAgLyogRmV0Y2ggZGlzcDE2IGlmIDE2LWJpdCBhZGRyIG1vZGUgKi8KKyAgICAgaWYgKCEoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0FERFIpKQorLQlkaXNwbGFjZW1lbnQgPSAodTE2KWZldGNoX3dvcmRfaW1tKCk7CisrICAgICAgICBkaXNwbGFjZW1lbnQgPSAodTE2KSBmZXRjaF93b3JkX2ltbSgpOworICAgICBlbHNlIHsKKy0JLyogRmV0Y2ggZGlzcDMyIGlmIG5vIFNJQiBieXRlICovCistCWlmIChybSAhPSA0KQorLQkgICAgZGlzcGxhY2VtZW50ID0gKHUzMilmZXRjaF9sb25nX2ltbSgpOworKyAgICAgICAgLyogRmV0Y2ggZGlzcDMyIGlmIG5vIFNJQiBieXRlICovCisrICAgICAgICBpZiAocm0gIT0gNCkKKysgICAgICAgICAgICBkaXNwbGFjZW1lbnQgPSAodTMyKSBmZXRjaF9sb25nX2ltbSgpOworICAgICB9CisgCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfQUREUikgeworICAgICAgICAgLyogMzItYml0IGFkZHJlc3NpbmcgKi8KKy0gICAgICBzd2l0Y2ggKHJtKSB7CistCSAgY2FzZSAwOgorLQkJREVDT0RFX1BSSU5URjIoIiUwOHhbRUFYXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FQVggKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSAxOgorLQkJREVDT0RFX1BSSU5URjIoIiUwOHhbRUNYXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FQ1ggKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URjIoIiUwOHhbRURYXSIsIGRpc3BsYWNlbWVudCk7CistCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworLQkJcmV0dXJuIE0ueDg2LlJfRURYICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgMzoKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4W0VCWF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUJYICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNDoKKy0JCXNpYiA9IGZldGNoX2J5dGVfaW1tKCk7CistCQlkaXNwbGFjZW1lbnQgPSAodTMyKWZldGNoX2xvbmdfaW1tKCk7CistCQlERUNPREVfUFJJTlRGMigiJTA4eCIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gZGVjb2RlX3NpYl9hZGRyZXNzKHNpYiwgMikgKyBkaXNwbGFjZW1lbnQ7CistCQlicmVhazsKKy0JICBjYXNlIDU6CistCQlERUNPREVfUFJJTlRGMigiJTA4eFtFQlBdIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VCUCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDY6CistCQlERUNPREVfUFJJTlRGMigiJTA4eFtFU0ldIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VTSSArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGMigiJTA4eFtFREldIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VESSArIGRpc3BsYWNlbWVudDsKKy0JfQorLQlIQUxUX1NZUygpOworLSAgICB9IGVsc2UgeworKyAgICAgICAgc3dpdGNoIChybSkgeworKyAgICAgICAgY2FzZSAwOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4W0VBWF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VBWCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eFtFQ1hdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQ1ggKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHhbRURYXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FRFggKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHhbRUJYXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUJYICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgIHNpYiA9IGZldGNoX2J5dGVfaW1tKCk7CisrICAgICAgICAgICAgZGlzcGxhY2VtZW50ID0gKHUzMikgZmV0Y2hfbG9uZ19pbW0oKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eCIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIGRlY29kZV9zaWJfYWRkcmVzcyhzaWIsIDIpICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4W0VCUF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VCUCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eFtFU0ldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FU0kgKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHhbRURJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRURJICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIC8qIDE2LWJpdCBhZGRyZXNzaW5nICovCistICAgICAgc3dpdGNoIChybSkgeworLQkgIGNhc2UgMDoKKysgICAgICAgIHN3aXRjaCAocm0pIHsKKysgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA0eFtCWCtTSV0iLCBkaXNwbGFjZW1lbnQpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CWCArIE0ueDg2LlJfU0kgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA0eFtCWCtESV0iLCBkaXNwbGFjZW1lbnQpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CWCArIE0ueDg2LlJfREkgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgMjoKKy0JCURFQ09ERV9QUklOVEYyKCIlMDR4W0JQK1NJXSIsIGRpc3BsYWNlbWVudCk7CistCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0JQK1NJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBNLng4Ni5SX1NJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGMigiJTA0eFtCUCtESV0iLCBkaXNwbGFjZW1lbnQpOworLQkJTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKysgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA0eFtCUCtESV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIE0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JQICsgTS54ODYuUl9ESSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W1NJXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX1NJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhbREldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfREkgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgNjoKKy0JCURFQ09ERV9QUklOVEYyKCIlMDR4W0JQXSIsIGRpc3BsYWNlbWVudCk7CistCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0JQXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA0eFtCWF0iLCBkaXNwbGFjZW1lbnQpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CWCArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCX0KKy0JSEFMVF9TWVMoKTsKKysgICAgICAgIH0KKysgICAgICAgIEhBTFRfU1lTKCk7CisgICAgIH0KKyAgICAgcmV0dXJuIDA7CisgICAgIC8qTk9UUkVBQ0hFRCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L2ZwdS5jIGIvbGlicy94ODZlbXUvZnB1LmMKK2luZGV4IGI3MmRlMWUuLjBkYWIwNWMgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS9mcHUuYworKysrIGIvbGlicy94ODZlbXUvZnB1LmMKK0BAIC00Miw3ICs0Miw4IEBACisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbXBsZW1lbnRhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAvKiBvcGNvZGU9MHhkOCAqLworLXZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrdm9pZAorK3g4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiRVNDIEQ4XG4iKTsKK0BAIC01Miw3ICs1Myw3IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgCisgI2lmZGVmIERFQlVHCisgCistc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZDlfdGFiW10gPSB7Cisrc3RhdGljIGNvbnN0IGNoYXIgKng4NmVtdV9mcHVfb3BfZDlfdGFiW10gPSB7CisgICAgICJGTERcdERXT1JEIFBUUiAiLCAiRVNDX0Q5XHQiLCAiRlNUXHREV09SRCBQVFIgIiwgIkZTVFBcdERXT1JEIFBUUiAiLAorICAgICAiRkxERU5WXHQiLCAiRkxEQ1dcdCIsICJGU1RFTlZcdCIsICJGU1RDV1x0IiwKKyAKK0BAIC02Myw3ICs2NCw3IEBAIHN0YXRpYyBjaGFyICp4ODZlbXVfZnB1X29wX2Q5X3RhYltdID0geworICAgICAiRkxERU5WXHQiLCAiRkxEQ1dcdCIsICJGU1RFTlZcdCIsICJGU1RDV1x0IiwKKyB9OworIAorLXN0YXRpYyBjaGFyICp4ODZlbXVfZnB1X29wX2Q5X3RhYjFbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kOV90YWIxW10gPSB7CisgICAgICJGTERcdCIsICJGTERcdCIsICJGTERcdCIsICJGTERcdCIsCisgICAgICJGTERcdCIsICJGTERcdCIsICJGTERcdCIsICJGTERcdCIsCisgCitAQCAtODksMTAgKzkwLDExIEBAIHN0YXRpYyBjaGFyICp4ODZlbXVfZnB1X29wX2Q5X3RhYjFbXSA9IHsKKyAgICAgIkZSTkRJTlQiLCAiRlNDQUxFIiwgIkVTQ19EOSIsICJFU0NfRDkiLAorIH07CisgCistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworIAorIC8qIG9wY29kZT0weGQ5ICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q5KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldCA9IDA7CitAQCAtMTAzLDU2ICsxMDUsNTggQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q5KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAjaWZkZWYgREVCVUcKKyAgICAgaWYgKG1vZCAhPSAzKSB7CisgICAgICAgICBERUNPREVfUFJJTlRJTlNUUjMyKHg4NmVtdV9mcHVfb3BfZDlfdGFiLCBtb2QsIHJoLCBybCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKHg4NmVtdV9mcHVfb3BfZDlfdGFiMVsocmggPDwgMykgKyBybF0pOworICAgICB9CisgI2VuZGlmCisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAwOgorKyAgICBjYXNlIDA6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAxOgorKyAgICBjYXNlIDE6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAyOgorKyAgICBjYXNlIDI6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQkJc3RrZWxlbSA9ICh1OClybDsKKy0JCWlmIChyaCA8IDQpIHsKKy0JCQkJREVDT0RFX1BSSU5URjIoIlNUKCVkKVxuIiwgc3RrZWxlbSk7CistCQl9IGVsc2UgeworLQkJCQlERUNPREVfUFJJTlRGKCJcbiIpOworLQkJfQorKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICAgICAgc3RrZWxlbSA9ICh1OCkgcmw7CisrICAgICAgICBpZiAocmggPCA0KSB7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIlNUKCVkKVxuIiwgc3RrZWxlbSk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworKyAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KKyAjaWZkZWYgWDg2RU1VX0ZQVV9QUkVTRU5UCisgICAgIC8qIGV4ZWN1dGUgKi8KKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDM6CisrICAgIGNhc2UgMzoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mbGQoWDg2RU1VX0ZQVV9TVEtUT1AsIHN0a2VsZW0pOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Z4Y2goWDg2RU1VX0ZQVV9TVEtUT1AsIHN0a2VsZW0pOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgc3dpdGNoIChybCkgeworLSAgICAgICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX25vcCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mc3RwKFg4NkVNVV9GUFVfU1RLVE9QLCBzdGtlbGVtKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHN3aXRjaCAocmwpIHsKKyAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mY2hzKFg4NkVNVV9GUFVfU1RLVE9QKTsKK0BAIC0xNzMsMTMzICsxNzcsMTMzIEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworIAorLSAgICAgICAgICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgc3dpdGNoIChybCkgeworLSAgICAgICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZDEoWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mbGRsMnQoWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mbGRsMmUoWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mbGRwaShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZGxnMihYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZGxuMihYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZHooWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgLyogNyAqLworICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworIAorLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgc3dpdGNoIChybCkgeworLSAgICAgICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2YyeG0xKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnlsMngoWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mcHRhbihYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZwYXRhbihYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Z4dHJhY3QoWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9kZWNzdHAoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfaW5jc3RwKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgIHN3aXRjaCAocmwpIHsKKy0gICAgICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mcHJlbShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Z5bDJ4cDEoWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mc3FydChYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZybmRpbnQoWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mc2NhbGUoWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNjoKKy0gICAgICAgICAgICAgIGNhc2UgNzoKKy0gICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworIAorLSAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmxkKFg4NkVNVV9GUFVfRkxPQVQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3QoWDg2RU1VX0ZQVV9GTE9BVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzdHAoWDg2RU1VX0ZQVV9GTE9BVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZsZGVudihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mbGRjdyhYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3RlbnYoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0Y3coWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICB9CisgI2Vsc2UKKy0gICAgKHZvaWQpZGVzdG9mZnNldDsKKy0gICAgKHZvaWQpc3RrZWxlbTsKKy0jZW5kaWYgLyogWDg2RU1VX0ZQVV9QUkVTRU5UICovCisrICAgICh2b2lkKSBkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgc3RrZWxlbTsKKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFg4NkVNVV9GUFVfUFJFU0VOVCAqLworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUl9OT19UUkFDRSgpOworIH0KKyAKKyAjaWZkZWYgREVCVUcKKyAKKy1jaGFyICp4ODZlbXVfZnB1X29wX2RhX3RhYltdID0geworK3N0YXRpYyBjb25zdCBjaGFyICp4ODZlbXVfZnB1X29wX2RhX3RhYltdID0geworICAgICAiRklBRERcdERXT1JEIFBUUiAiLCAiRklNVUxcdERXT1JEIFBUUiAiLCAiRklDT01cdERXT1JEIFBUUiAiLAorICAgICAiRklDT01QXHREV09SRCBQVFIgIiwKKyAgICAgIkZJU1VCXHREV09SRCBQVFIgIiwgIkZJU1VCUlx0RFdPUkQgUFRSICIsICJGSURJVlx0RFdPUkQgUFRSICIsCitAQCAtMzA5LDcgKzMxMyw3IEBAIGNoYXIgKng4NmVtdV9mcHVfb3BfZGFfdGFiW10gPSB7CisgICAgICJGSUNPTVBcdERXT1JEIFBUUiAiLAorICAgICAiRklTVUJcdERXT1JEIFBUUiAiLCAiRklTVUJSXHREV09SRCBQVFIgIiwgIkZJRElWXHREV09SRCBQVFIgIiwKKyAgICAgIkZJRElWUlx0RFdPUkQgUFRSICIsCistICAgIAorKworICAgICAiRklBRERcdERXT1JEIFBUUiAiLCAiRklNVUxcdERXT1JEIFBUUiAiLCAiRklDT01cdERXT1JEIFBUUiAiLAorICAgICAiRklDT01QXHREV09SRCBQVFIgIiwKKyAgICAgIkZJU1VCXHREV09SRCBQVFIgIiwgIkZJU1VCUlx0RFdPUkQgUFRSICIsICJGSURJVlx0RFdPUkQgUFRSICIsCitAQCAtMzE5LDEwICszMjMsMTEgQEAgY2hhciAqeDg2ZW11X2ZwdV9vcF9kYV90YWJbXSA9IHsKKyAgICAgIkVTQ19EQSAgICAgIiwgIkVTQ19EQSAiLCAiRVNDX0RBICAgIiwgIkVTQ19EQSAiLAorIH07CisgCistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworIAorIC8qIG9wY29kZT0weGRhICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldCA9IDA7CitAQCAtMzMyLDU5ICszMzcsNTkgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RhX3RhYiwgbW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMToKKysgICAgY2FzZSAxOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMjoKKysgICAgY2FzZSAyOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCQlzdGtlbGVtID0gKHU4KXJsOworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICAgICAgc3RrZWxlbSA9ICh1OCkgcmw7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiXHRTVCglZCksU1RcbiIsIHN0a2VsZW0pOworICAgICAgICAgYnJlYWs7CisgICAgIH0KKyAjaWZkZWYgWDg2RU1VX0ZQVV9QUkVTRU5UCisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAzOgorKyAgICBjYXNlIDM6CisgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGRlZmF1bHQ6CisrICAgIGRlZmF1bHQ6CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01faWFkZChYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pbXVsKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ljb20oWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01faWNvbXAoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01faXN1YihYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pc3VicihYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pZGl2KFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2lkaXZyKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICB9CisgI2Vsc2UKKy0gICAgKHZvaWQpZGVzdG9mZnNldDsKKy0gICAgKHZvaWQpc3RrZWxlbTsKKysgICAgKHZvaWQpIGRlc3RvZmZzZXQ7CisrICAgICh2b2lkKSBzdGtlbGVtOworICNlbmRpZgorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUl9OT19UUkFDRSgpOworQEAgLTM5Miw3ICszOTcsNyBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIAorICNpZmRlZiBERUJVRworIAorLWNoYXIgKng4NmVtdV9mcHVfb3BfZGJfdGFiW10gPSB7Cisrc3RhdGljIGNvbnN0IGNoYXIgKng4NmVtdV9mcHVfb3BfZGJfdGFiW10gPSB7CisgICAgICJGSUxEXHREV09SRCBQVFIgIiwgIkVTQ19EQlx0MTkiLCAiRklTVFx0RFdPUkQgUFRSICIsICJGSVNUUFx0RFdPUkQgUFRSICIsCisgICAgICJFU0NfREJcdDFDIiwgIkZMRFx0VEJZVEUgUFRSICIsICJFU0NfREJcdDFFIiwgIkZTVFBcdFRCWVRFIFBUUiAiLAorIAorQEAgLTQwMywxMCArNDA4LDExIEBAIGNoYXIgKng4NmVtdV9mcHVfb3BfZGJfdGFiW10gPSB7CisgICAgICJFU0NfREJcdDFDIiwgIkZMRFx0VEJZVEUgUFRSICIsICJFU0NfREJcdDFFIiwgIkZTVFBcdFRCWVRFIFBUUiAiLAorIH07CisgCistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworIAorIC8qIG9wY29kZT0weGRiICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RiKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldCA9IDA7CitAQCAtNDE2LDEwNCArNDIyLDEwNiBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICNpZmRlZiBERUJVRworICAgICBpZiAobW9kICE9IDMpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVElOU1RSMzIoeDg2ZW11X2ZwdV9vcF9kYl90YWIsIG1vZCwgcmgsIHJsKTsKKy0gICAgfSBlbHNlIGlmIChyaCA9PSA0KSB7ICAgICAgIC8qID09PSAxMSAxMCAwIG5ubiAqLworKyAgICB9CisrICAgIGVsc2UgaWYgKHJoID09IDQpIHsgICAgICAgICAvKiA9PT0gMTEgMTAgMCBubm4gKi8KKyAgICAgICAgIHN3aXRjaCAocmwpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkZFTklcbiIpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRkRJU0lcbiIpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRkNMRVhcbiIpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRklOSVRcbiIpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URjIoIkVTQ19EQiAlMHhcbiIsIChtb2QgPDwgNikgKyAocmggPDwgMykgKyAocmwpKTsKKyAgICAgfQorLSNlbmRpZiAvKiBERUJVRyAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVCVUcgKi8KKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDA6CisrICAgIGNhc2UgMDoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMToKKysgICAgY2FzZSAxOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAyOgorKyAgICBjYXNlIDI6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgLyogZXhlY3V0ZSAqLworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMzoKKysgICAgY2FzZSAzOgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgc3dpdGNoIChybCkgeworLSAgICAgICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZlbmkoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmRpc2koKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmNsZXgoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmluaXQoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maWxkKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlzdChYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maXN0cChYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZsZChYODZFTVVfRlBVX0xEQkwsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0cChYODZFTVVfRlBVX0xEQkwsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICB9CisgI2Vsc2UKKy0gICAgKHZvaWQpZGVzdG9mZnNldDsKKysgICAgKHZvaWQpIGRlc3RvZmZzZXQ7CisgI2VuZGlmCisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSX05PX1RSQUNFKCk7CisgfQorIAorICNpZmRlZiBERUJVRworLWNoYXIgKng4NmVtdV9mcHVfb3BfZGNfdGFiW10gPSB7Cisrc3RhdGljIGNvbnN0IGNoYXIgKng4NmVtdV9mcHVfb3BfZGNfdGFiW10gPSB7CisgICAgICJGQUREXHRRV09SRCBQVFIgIiwgIkZNVUxcdFFXT1JEIFBUUiAiLCAiRkNPTVx0UVdPUkQgUFRSICIsCisgICAgICJGQ09NUFx0UVdPUkQgUFRSICIsCisgICAgICJGU1VCXHRRV09SRCBQVFIgIiwgIkZTVUJSXHRRV09SRCBQVFIgIiwgIkZESVZcdFFXT1JEIFBUUiAiLAorQEAgLTUzMiwxMCArNTQwLDExIEBAIGNoYXIgKng4NmVtdV9mcHVfb3BfZGNfdGFiW10gPSB7CisgICAgICJGQUREXHQiLCAiRk1VTFx0IiwgIkZDT01cdCIsICJGQ09NUFx0IiwKKyAgICAgIkZTVUJSXHQiLCAiRlNVQlx0IiwgIkZESVZSXHQiLCAiRkRJVlx0IiwKKyB9OworLSNlbmRpZiAvKiBERUJVRyAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVCVUcgKi8KKyAKKyAvKiBvcGNvZGU9MHhkYyAqLworLXZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrdm9pZAorK3g4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQgPSAwOworQEAgLTU0NSw4NSArNTU0LDg1IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIERFQ09ERV9QUklOVElOU1RSMzIoeDg2ZW11X2ZwdV9vcF9kY190YWIsIG1vZCwgcmgsIHJsKTsKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDA6CisrICAgIGNhc2UgMDoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDE6CisrICAgIGNhc2UgMToKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDI6CisrICAgIGNhc2UgMjoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCQlzdGtlbGVtID0gKHU4KXJsOworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICAgICAgc3RrZWxlbSA9ICh1OCkgcmw7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiXHRTVCglZCksU1RcbiIsIHN0a2VsZW0pOworICAgICAgICAgYnJlYWs7CisgICAgIH0KKyAjaWZkZWYgWDg2RU1VX0ZQVV9QUkVTRU5UCisgICAgIC8qIGV4ZWN1dGUgKi8KKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDM6CisrICAgIGNhc2UgMzoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mYWRkKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mbXVsKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mY29tKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mY29tcChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN1YnIoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdWIoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZkaXZyKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mZGl2KHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICAgIGRlZmF1bHQ6CisrICAgIGRlZmF1bHQ6CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmFkZChYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZm11bChYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmNvbShYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmNvbXAoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzdWIoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzdWJyKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mZGl2KFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mZGl2cihYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworLSAgICAodm9pZClzdGtlbGVtOworKyAgICAodm9pZCkgZGVzdG9mZnNldDsKKysgICAgKHZvaWQpIHN0a2VsZW07CisgI2VuZGlmCisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSX05PX1RSQUNFKCk7CitAQCAtNjMxLDcgKzY0MCw3IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgCisgI2lmZGVmIERFQlVHCisgCistc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZGRfdGFiW10gPSB7Cisrc3RhdGljIGNvbnN0IGNoYXIgKng4NmVtdV9mcHVfb3BfZGRfdGFiW10gPSB7CisgICAgICJGTERcdFFXT1JEIFBUUiAiLCAiRVNDX0REXHQyOSwiLCAiRlNUXHRRV09SRCBQVFIgIiwgIkZTVFBcdFFXT1JEIFBUUiAiLAorICAgICAiRlJTVE9SXHQiLCAiRVNDX0REXHQyRCwiLCAiRlNBVkVcdCIsICJGU1RTV1x0IiwKKyAKK0BAIC02NDUsMTAgKzY1NCwxMSBAQCBzdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZF90YWJbXSA9IHsKKyAgICAgIkVTQ19ERFx0MkMsIiwgIkVTQ19ERFx0MkQsIiwgIkVTQ19ERFx0MkUsIiwgIkVTQ19ERFx0MkYsIiwKKyB9OworIAorLSNlbmRpZiAvKiBERUJVRyAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVCVUcgKi8KKyAKKyAvKiBvcGNvZGU9MHhkZCAqLworLXZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrdm9pZAorK3g4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQgPSAwOworQEAgLTY1OCw3NSArNjY4LDc1IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIERFQ09ERV9QUklOVElOU1RSMzIoeDg2ZW11X2ZwdV9vcF9kZF90YWIsIG1vZCwgcmgsIHJsKTsKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDA6CisrICAgIGNhc2UgMDoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDE6CisrICAgIGNhc2UgMToKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDI6CisrICAgIGNhc2UgMjoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCQlzdGtlbGVtID0gKHU4KXJsOworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICAgICAgc3RrZWxlbSA9ICh1OCkgcmw7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiXHRTVCglZCksU1RcbiIsIHN0a2VsZW0pOworICAgICAgICAgYnJlYWs7CisgICAgIH0KKyAjaWZkZWYgWDg2RU1VX0ZQVV9QUkVTRU5UCisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAzOgorKyAgICBjYXNlIDM6CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmZyZWUoc3RrZWxlbSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnhjaChzdGtlbGVtKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mc3Qoc3RrZWxlbSk7ICAvKiByZWdpc3RlciB2ZXJzaW9uICovCisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN0cChzdGtlbGVtKTsgLyogcmVnaXN0ZXIgdmVyc2lvbiAqLworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICAgIGRlZmF1bHQ6CisrICAgIGRlZmF1bHQ6CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmxkKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzdChYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0cChYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnJzdG9yKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc2F2ZShYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzdHN3KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworLSAgICAodm9pZClzdGtlbGVtOworKyAgICAodm9pZCkgZGVzdG9mZnNldDsKKysgICAgKHZvaWQpIHN0a2VsZW07CisgI2VuZGlmCisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSX05PX1RSQUNFKCk7CitAQCAtNzM0LDggKzc0NCw3IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgCisgI2lmZGVmIERFQlVHCisgCistc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZGVfdGFiW10gPQorLXsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZV90YWJbXSA9IHsKKyAgICAgIkZJQUREXHRXT1JEIFBUUiAiLCAiRklNVUxcdFdPUkQgUFRSICIsICJGSUNPTVx0V09SRCBQVFIgIiwKKyAgICAgIkZJQ09NUFx0V09SRCBQVFIgIiwKKyAgICAgIkZJU1VCXHRXT1JEIFBUUiAiLCAiRklTVUJSXHRXT1JEIFBUUiAiLCAiRklESVZcdFdPUkQgUFRSICIsCitAQCAtNzU1LDEwICs3NjQsMTEgQEAgc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZGVfdGFiW10gPQorICAgICAiRlNVQlJQXHQiLCAiRlNVQlBcdCIsICJGRElWUlBcdCIsICJGRElWUFx0IiwKKyB9OworIAorLSNlbmRpZiAvKiBERUJVRyAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVCVUcgKi8KKyAKKyAvKiBvcGNvZGU9MHhkZSAqLworLXZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrdm9pZAorK3g4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQgPSAwOworQEAgLTc2OCw4NyArNzc4LDg3IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIERFQ09ERV9QUklOVElOU1RSMzIoeDg2ZW11X2ZwdV9vcF9kZV90YWIsIG1vZCwgcmgsIHJsKTsKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDA6CisrICAgIGNhc2UgMDoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDE6CisrICAgIGNhc2UgMToKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDI6CisrICAgIGNhc2UgMjoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCQlzdGtlbGVtID0gKHU4KXJsOworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICAgICAgc3RrZWxlbSA9ICh1OCkgcmw7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiXHRTVCglZCksU1RcbiIsIHN0a2VsZW0pOworICAgICAgICAgYnJlYWs7CisgICAgIH0KKyAjaWZkZWYgWDg2RU1VX0ZQVV9QUkVTRU5UCisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAzOgorKyAgICBjYXNlIDM6CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmFkZHAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZtdWxwKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mY29tcChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICBpZiAoc3RrZWxlbSA9PSAxKQorLSAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zjb21wcChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisrICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mY29tcHAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworKyAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mc3VicnAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdWJwKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mZGl2cnAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZkaXZwKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICAgIGRlZmF1bHQ6CisrICAgIGRlZmF1bHQ6CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlhZGQoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maW11bChYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpY29tKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmljb21wKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlzdWIoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maXN1YnIoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maWRpdihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpZGl2cihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICB9CisgI2Vsc2UKKy0gICAgKHZvaWQpZGVzdG9mZnNldDsKKy0gICAgKHZvaWQpc3RrZWxlbTsKKysgICAgKHZvaWQpIGRlc3RvZmZzZXQ7CisrICAgICh2b2lkKSBzdGtlbGVtOworICNlbmRpZgorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUl9OT19UUkFDRSgpOworQEAgLTg1Niw3ICs4NjYsNyBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIAorICNpZmRlZiBERUJVRworIAorLXN0YXRpYyBjaGFyICp4ODZlbXVfZnB1X29wX2RmX3RhYltdID0geworK3N0YXRpYyBjb25zdCBjaGFyICp4ODZlbXVfZnB1X29wX2RmX3RhYltdID0geworICAgICAvKiBtb2QgPT0gMDAgKi8KKyAgICAgIkZJTERcdFdPUkQgUFRSICIsICJFU0NfREZcdDM5XG4iLCAiRklTVFx0V09SRCBQVFIgIiwgIkZJU1RQXHRXT1JEIFBUUiAiLAorICAgICAiRkJMRFx0VEJZVEUgUFRSICIsICJGSUxEXHRRV09SRCBQVFIgIiwgIkZCU1RQXHRUQllURSBQVFIgIiwKK0BAIC04NzcsMTAgKzg4NywxMSBAQCBzdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZl90YWJbXSA9IHsKKyAgICAgIkVTQ19ERlx0M0MsIiwgIkVTQ19ERlx0M0QsIiwgIkVTQ19ERlx0M0UsIiwgIkVTQ19ERlx0M0YsIgorIH07CisgCistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworIAorIC8qIG9wY29kZT0weGRmICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RmKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldCA9IDA7CitAQCAtODkwLDc1ICs5MDEsNzUgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RmKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RmX3RhYiwgbW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMToKKysgICAgY2FzZSAxOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMjoKKysgICAgY2FzZSAyOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCXN0a2VsZW0gPSAodTgpcmw7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJcdFNUKCVkKVxuIiwgc3RrZWxlbSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDM6CisrICAgIGNhc2UgMzoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mZnJlZShzdGtlbGVtKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9meGNoKHN0a2VsZW0pOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdChzdGtlbGVtKTsgIC8qIHJlZ2lzdGVyIHZlcnNpb24gKi8KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mc3RwKHN0a2VsZW0pOyAvKiByZWdpc3RlciB2ZXJzaW9uICovCisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maWxkKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maXN0KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlzdHAoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mYmxkKFg4NkVNVV9GUFVfQlNELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maWxkKFg4NkVNVV9GUFVfTE9ORywgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmJzdHAoWDg2RU1VX0ZQVV9CU0QsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zpc3RwKFg4NkVNVV9GUFVfTE9ORywgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworLSAgICAodm9pZClzdGtlbGVtOworKyAgICAodm9pZCkgZGVzdG9mZnNldDsKKysgICAgKHZvaWQpIHN0a2VsZW07CisgI2VuZGlmCisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSX05PX1RSQUNFKCk7CitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvb3BzLmMgYi9saWJzL3g4NmVtdS9vcHMuYworaW5kZXggNGY1MDRjOS4uNzZiODM1OCAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L29wcy5jCisrKysgYi9saWJzL3g4NmVtdS9vcHMuYworQEAgLTgxLDE3ICs4MSwxNyBAQCBvcDEgLSBJbnN0cnVjdGlvbiBvcCBjb2RlCisgUkVNQVJLUzoKKyBIYW5kbGVzIGlsbGVnYWwgb3Bjb2Rlcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2lsbGVnYWxfb3AoCistICAgIHU4IG9wMSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2lsbGVnYWxfb3AodTggb3AxKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2LlJfU1AgIT0gMCkgeworLSAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIFg4NiBPUENPREVcbiIpOworLSAgICBUUkFDRV9SRUdTKCk7CistICAgIHByaW50aygiJTA0eDolMDR4OiAlMDJYIElMTEVHQUwgWDg2IE9QQ09ERSFcbiIsCistICAgICAgICBNLng4Ni5SX0NTLCBNLng4Ni5SX0lQLTEsb3AxKTsKKy0gICAgSEFMVF9TWVMoKTsKKy0gICAgICAgIH0KKysgICAgICAgIERFQ09ERV9QUklOVEYoIklMTEVHQUwgWDg2IE9QQ09ERVxuIik7CisrICAgICAgICBUUkFDRV9SRUdTKCk7CisrICAgICAgICBEQihwcmludGsoIiUwNHg6JTA0eDogJTAyWCBJTExFR0FMIFg4NiBPUENPREUhXG4iLAorKyAgICAgICAgICAgICAgICAgIE0ueDg2LlJfQ1MsIE0ueDg2LlJfSVAgLSAxLCBvcDEpKTsKKysgICAgICAgIEhBTFRfU1lTKCk7CisrICAgIH0KKyAgICAgZWxzZSB7CisgICAgICAgICAvKiBJZiB3ZSBnZXQgaGVyZSwgaXQgbWVhbnMgdGhlIHN0YWNrIHBvaW50ZXIgaXMgYmFjayB0byB6ZXJvCisgICAgICAgICAgKiBzbyB3ZSBhcmUganVzdCByZXR1cm5pbmcgZnJvbSBhbiBlbXVsYXRvciBzZXJ2aWNlIGNhbGwKK0BAIC0xMDAsNyArMTAwLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaWxsZWdhbF9vcCgKKyAgICAgICAgICAqIGNhbGwuCisgICAgICAgICAgKi8KKyAgICAgICAgIFg4NkVNVV9oYWx0X3N5cygpOworLSAgICAgICAgfQorKyAgICB9CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KKyAKK0BAIC0xMDgsNyArMTA4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaWxsZWdhbF9vcCgKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MDAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRkX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0xNDksNyArMTUwLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gYWRkX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTE2Niw3ICsxNjcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MDEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRkX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0xODgsNyArMTkwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gYWRkX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTIxNSw3ICsyMTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBhZGRfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMjQyLDcgKzI0Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGFkZF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0yNTYsOSArMjYxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTI2Niw4ICsyNzEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGRfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTI4Niw3ICsyOTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MDIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRkX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTMyNCw3ICszMzEsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IGFkZF9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKK0BAIC0zNDEsNyArMzQ4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDAzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0zNjIsNyArMzcwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gYWRkX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMzg3LDcgKzM5Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTQxMiw3ICs0MjIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGRfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC00MjUsOSArNDM2LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGRfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC00MzUsOCArNDQ2LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gYWRkX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC00NTUsNyArNDY3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDA0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRkX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHNyY3ZhbDsKKyAKK0BAIC00NzMsNyArNDg2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MDUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC00ODEsNyArNDk1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJBRERcdEVBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJBRERcdEFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTQ4OSw4ICs1MDQsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gYWRkX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0gYWRkX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9IGFkZF93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHNyY3ZhbCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC01MDAsNyArNTE2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MDYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfRVModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRFU1xuIik7CitAQCAtNTE0LDcgKzUzMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfRVModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwNworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0VTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEVTXG4iKTsKK0BAIC01MjgsNyArNTQ2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0VTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MDgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC01NjksNyArNTg4LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3JfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSBvcl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC01ODYsNyArNjA1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3JfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MDkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtNjA4LDcgKzYyOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gb3JfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtNjM1LDcgKzY1Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gb3JfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtNjYyLDcgKzY4NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gb3JfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtNjc2LDkgKzY5OSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTY4Niw4ICs3MDksOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IG9yX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC03MDYsNyArNzMwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC03NDQsNyArNzY5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IG9yX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTc2MSw3ICs3ODYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTc4Miw3ICs4MDgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IG9yX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtODA3LDcgKzgzNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gb3JfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC04MzIsNyArODYwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTg0NSw5ICs4NzQsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICpkZXN0cmVnID0gb3Jfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC04NTUsOCArODg0LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBvcl9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtODc1LDcgKzkwNSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBzcmN2YWw7CisgCitAQCAtODkzLDcgKzkyNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29yX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtOTAxLDcgKzkzMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJPUlx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk9SXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC05MDksOCArOTQyLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gb3JfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSBvcl93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSBvcl93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHNyY3ZhbCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC05MjAsNyArOTU0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9DUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX0NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdENTXG4iKTsKK0BAIC05MzQsMTggKzk2OSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYuIEVzY2FwZSBmb3IgdHdvLWJ5dGUgb3Bjb2RlICgyODYgb3IgYmV0dGVyKQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfdHdvX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfdHdvX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKy0gICAgdTggb3AyID0gKCpzeXNfcmRiKSgoKHUzMilNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVArKykpOworKyAgICB1OCBvcDIgPSAoKnN5c19yZGIpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKysKKyAgICAgSU5DX0RFQ09ERURfSU5TVF9MRU4oMSk7CistICAgICgqeDg2ZW11X29wdGFiMltvcDJdKShvcDIpOworKyAgICAoKng4NmVtdV9vcHRhYjJbb3AyXSkgKG9wMik7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDEwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkY19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC05ODYsNyArMTAyNCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9IGFkY19ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC0xMDAzLDcgKzEwNDEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRjX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0xMDI1LDcgKzEwNjQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBhZGNfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMTA1Miw3ICsxMDkyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gYWRjX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTEwNzksNyArMTEyMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGFkY19sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0xMDkzLDkgKzExMzUsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTEwMyw4ICsxMTQ1LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gYWRjX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xMTIzLDcgKzExNjYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY19ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRjX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTExNjEsNyArMTIwNSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY19ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gYWRjX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTExNzgsNyArMTIyMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY19ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMTE5OSw3ICsxMjQ0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gYWRjX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTIyNCw3ICsxMjcwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gYWRjX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTI0OSw3ICsxMjk2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gYWRjX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTI2Miw5ICsxMzEwLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xMjcyLDggKzEzMjAsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEyOTIsNyArMTM0MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkY19ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBzcmN2YWw7CisgCitAQCAtMTMxMCw3ICsxMzYwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGNfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC0xMzE4LDcgKzEzNjksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkFEQ1x0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkFEQ1x0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtMTMyNiw4ICsxMzc4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IGFkY19sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9IGFkY193b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSBhZGNfd29yZChNLng4Ni5SX0FYLCAodTE2KSBzcmN2YWwpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtMTMzNyw3ICsxMzkwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfU1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9TUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRTU1xuIik7CitAQCAtMTM1MSw3ICsxNDA1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9TUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDE3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfU1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0U1NcbiIpOworQEAgLTEzNjUsNyArMTQyMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9TUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDE4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NiYl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0xNDA2LDcgKzE0NjIsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSBzYmJfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtMTQyMyw3ICsxNDc5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDE5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NiYl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMTQ0NSw3ICsxNTAyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gc2JiX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTE0NzIsNyArMTUzMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHNiYl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0xNDk5LDcgKzE1NTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBzYmJfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMTUxMyw5ICsxNTczLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE1MjMsOCArMTU4Myw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNiYl9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTU0Myw3ICsxNjA0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDFhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NiYl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0xNTgxLDcgKzE2NDMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHNiYl9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKK0BAIC0xNTk4LDcgKzE2NjAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MWIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTE2MTksNyArMTY4Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNiYl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTE2NDQsNyArMTcwOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNiYl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTE2NjksNyArMTczNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNiYl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTE2ODIsOSArMTc0OCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTY5Miw4ICsxNzU4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xNzEyLDcgKzE3NzksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zYmJfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggc3JjdmFsOworIAorQEAgLTE3MzAsNyArMTc5OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDFkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2JiX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtMTczOCw3ICsxODA3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJTQkJcdEVBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJTQkJcdEFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTE3NDYsOCArMTgxNiw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBzYmJfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSBzYmJfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0gc2JiX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgc3JjdmFsKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTE3NTcsNyArMTgyOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDFlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0RTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfRFModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RFNcbiIpOworQEAgLTE3NzEsNyArMTg0Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfRFModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0RTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJQT1BcdERTXG4iKTsKK0BAIC0xNzg1LDcgKzE4NTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfRFModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hbmRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtMTgzMCw3ICsxOTA0LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKyAKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTE4NDcsNyArMTkyMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hbmRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTE4NjksNyArMTk0NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGFuZF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0xODk2LDcgKzE5NzIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBhbmRfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMTkyMyw3ICsyMDAwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gYW5kX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTE5MzcsOSArMjAxNSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xOTQ3LDggKzIwMjUsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhbmRfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE5NjcsNyArMjA0Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hbmRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtMjAwNSw3ICsyMDg1LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBhbmRfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CitAQCAtMjAyMiw3ICsyMTAyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDIzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0yMDQzLDcgKzIxMjQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhbmRfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0yMDY5LDcgKzIxNTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gYW5kX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMjA5NCw3ICsyMTc3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gYW5kX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMjEwNyw5ICsyMTkxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhbmRfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yMTE3LDggKzIyMDEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhbmRfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTIxMzcsNyArMjIyMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FuZF9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBzcmN2YWw7CisgCitAQCAtMjE1NSw3ICsyMjQxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hbmRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC0yMTYzLDcgKzIyNTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkFORFx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkFORFx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtMjE3MSw4ICsyMjU5LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IGFuZF9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9IGFuZF93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSBhbmRfd29yZChNLng4Ni5SX0FYLCAodTE2KSBzcmN2YWwpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtMjE4Miw3ICsyMjcxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zZWdvdnJfRVModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiRVM6XG4iKTsKK0BAIC0yMTk5LDcgKzIyODksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfRVModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyNworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGFhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2RhYSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJEQUFcbiIpOworQEAgLTIyMTMsNyArMjMwNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2RhYSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDI4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3N1Yl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0yMjU0LDcgKzIzNDYsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSBzdWJfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtMjI3MSw3ICsyMzYzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDI5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3N1Yl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMjI5Myw3ICsyMzg2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gc3ViX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTIzMjAsNyArMjQxNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHN1Yl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0yMzQ3LDcgKzI0NDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBzdWJfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMjM2MSw5ICsyNDU3LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTIzNzEsOCArMjQ2Nyw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHN1Yl9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjM5MSw3ICsyNDg4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDJhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3N1Yl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0yNDI5LDcgKzI1MjcsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHN1Yl9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKK0BAIC0yNDQ2LDcgKzI1NDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MmIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTI0NjcsNyArMjU2Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHN1Yl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTI0OTIsNyArMjU5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHN1Yl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTI1MTcsNyArMjYxOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHN1Yl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTI1MzAsOSArMjYzMiw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjU0MCw4ICsyNjQyLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yNTYwLDcgKzI2NjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MmMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdWJfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggc3JjdmFsOworIAorQEAgLTI1NzgsNyArMjY4Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDJkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3ViX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtMjU4Niw3ICsyNjkxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJTVUJcdEVBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJTVUJcdEFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTI1OTQsOCArMjcwMCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBzdWJfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSBzdWJfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0gc3ViX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgc3JjdmFsKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTI2MDUsNyArMjcxMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDJlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfQ1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2Vnb3ZyX0NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkNTOlxuIik7CitAQCAtMjYxOSw3ICsyNzI3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MmYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2Rhcyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9kYXModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiREFTXG4iKTsKK0BAIC0yNjMzLDcgKzI3NDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kYXModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94b3JfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtMjY3NCw3ICsyNzg0LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0geG9yX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTI2OTEsNyArMjgwMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94b3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTI3MTMsNyArMjgyNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHhvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0yNzQwLDcgKzI4NTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSB4b3JfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMjc2Nyw3ICsyODgwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0geG9yX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTI3ODEsOSArMjg5NSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yNzkxLDggKzI5MDUsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSB4b3JfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTI4MTEsNyArMjkyNiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94b3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtMjg0OSw3ICsyOTY1LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSB4b3JfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CitAQCAtMjg2Niw3ICsyOTgyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDMzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0yODg3LDcgKzMwMDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSB4b3JfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0yOTEyLDcgKzMwMzAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSB4b3JfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0yOTM3LDcgKzMwNTYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSB4b3JfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0yOTUwLDkgKzMwNzAsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTI5NjAsOCArMzA4MCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjk4MCw3ICszMTAxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDM0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeG9yX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHNyY3ZhbDsKKyAKK0BAIC0yOTk4LDcgKzMxMjAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hvcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTMwMDYsNyArMzEyOSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiWE9SXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiWE9SXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC0zMDE0LDggKzMxMzgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0geG9yX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0geG9yX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9IHhvcl93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHNyY3ZhbCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0zMDI1LDcgKzMxNTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NlZ292cl9TUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJTUzpcbiIpOworQEAgLTMwMzksNyArMzE2NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9TUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDM3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hYWEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWFhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkFBQVxuIik7CitAQCAtMzA1Myw3ICszMTgwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWFhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0zMDkxLDcgKzMyMTksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICBjbXBfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtMzEwOCw3ICszMjM2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDM5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NtcF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMzEyOSw3ICszMjU4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGNtcF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTMxNTQsNyArMzI4NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBjbXBfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0zMTc5LDcgKzMzMTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgY21wX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMzE5Miw5ICszMzI0LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgY21wX3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMzIwMiw4ICszMzM0LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGNtcF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMzIyMiw3ICszMzU1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDNhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NtcF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0zMjYwLDcgKzMzOTQsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICBjbXBfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CitAQCAtMzI3Nyw3ICszNDExLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDNiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0zMjk4LDcgKzM0MzMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgY21wX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMzMyMyw3ICszNDU5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGNtcF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTMzNDgsNyArMzQ4NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBjbXBfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0zMzYxLDkgKzM0OTksOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBjbXBfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0zMzcxLDggKzM1MDksOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgY21wX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0zMzkxLDcgKzM1MzAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4M2MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbXBfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggc3JjdmFsOworIAorQEAgLTM0MDksNyArMzU0OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDNkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtMzQxNyw3ICszNTU4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJDTVBcdEVBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJDTVBcdEFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTM0MjUsOCArMzU2Nyw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgY21wX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBjbXBfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBjbXBfd29yZChNLng4Ni5SX0FYLCAodTE2KSBzcmN2YWwpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtMzQzNiw3ICszNTc5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4M2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zZWdvdnJfRFModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiRFM6XG4iKTsKK0BAIC0zNDUwLDcgKzM1OTQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfRFModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWFzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2Fhcyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJBQVNcbiIpOworQEAgLTM0NjQsMTggKzM2MDksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWFzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbmNfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVBWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEFYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gaW5jX2xvbmcoTS54ODYuUl9FQVgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9BWCA9IGluY193b3JkKE0ueDg2LlJfQVgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNDg2LDE4ICszNjM0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5jX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRFQ1hcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRDWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VDWCA9IGluY19sb25nKE0ueDg2LlJfRUNYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQ1ggPSBpbmNfd29yZChNLng4Ni5SX0NYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzUwOCwxOCArMzY1OSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0MgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luY19EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RURYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RFhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FRFggPSBpbmNfbG9uZyhNLng4Ni5SX0VEWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0RYID0gaW5jX3dvcmQoTS54ODYuUl9EWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM1MzAsMTggKzM2ODQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbmNfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVCWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEJYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUJYID0gaW5jX2xvbmcoTS54ODYuUl9FQlgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9CWCA9IGluY193b3JkKE0ueDg2LlJfQlgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNTUyLDE4ICszNzA5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQ0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5jX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRFU1BcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRTUFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VTUCA9IGluY19sb25nKE0ueDg2LlJfRVNQKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfU1AgPSBpbmNfd29yZChNLng4Ni5SX1NQKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzU3NCwxOCArMzczNCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0NQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luY19CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RUJQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0QlBcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQlAgPSBpbmNfbG9uZyhNLng4Ni5SX0VCUCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0JQID0gaW5jX3dvcmQoTS54ODYuUl9CUCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM1OTYsMTggKzM3NTksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbmNfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVTSVxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdFNJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRVNJID0gaW5jX2xvbmcoTS54ODYuUl9FU0kpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9TSSA9IGluY193b3JkKE0ueDg2LlJfU0kpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNjE4LDE4ICszNzg0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQ3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5jX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRFRElcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRESVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VESSA9IGluY19sb25nKE0ueDg2LlJfRURJKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfREkgPSBpbmNfd29yZChNLng4Ni5SX0RJKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzY0MCwxOCArMzgwOSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0OAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2RlY19BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RUFYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0QVhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBkZWNfbG9uZyhNLng4Ni5SX0VBWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0FYID0gZGVjX3dvcmQoTS54ODYuUl9BWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM2NjIsMTggKzM4MzQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9kZWNfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEVDWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdENYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUNYID0gZGVjX2xvbmcoTS54ODYuUl9FQ1gpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9DWCA9IGRlY193b3JkKE0ueDg2LlJfQ1gpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNjg0LDE4ICszODU5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDRhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGVjX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFRFhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHREWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VEWCA9IGRlY19sb25nKE0ueDg2LlJfRURYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfRFggPSBkZWNfd29yZChNLng4Ni5SX0RYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzcwNiwxOCArMzg4NCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0YgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2RlY19CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RUJYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0QlhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQlggPSBkZWNfbG9uZyhNLng4Ni5SX0VCWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0JYID0gZGVjX3dvcmQoTS54ODYuUl9CWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM3MjgsMTggKzM5MDksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NGMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9kZWNfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEVTUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdFNQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRVNQID0gZGVjX2xvbmcoTS54ODYuUl9FU1ApOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9TUCA9IGRlY193b3JkKE0ueDg2LlJfU1ApOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNzUwLDE4ICszOTM0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDRkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGVjX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFQlBcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRCUFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCUCA9IGRlY19sb25nKE0ueDg2LlJfRUJQKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQlAgPSBkZWNfd29yZChNLng4Ni5SX0JQKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzc3MiwxOCArMzk1OSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2RlY19TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RVNJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0U0lcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FU0kgPSBkZWNfbG9uZyhNLng4Ni5SX0VTSSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX1NJID0gZGVjX3dvcmQoTS54ODYuUl9TSSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM3OTQsMTggKzM5ODQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NGYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9kZWNfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEVESVxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdERJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRURJID0gZGVjX2xvbmcoTS54ODYuUl9FREkpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9ESSA9IGRlY193b3JkKE0ueDg2LlJfREkpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zODE2LDE4ICs0MDA5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDUwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRFQVhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0QVhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRUFYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0FYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzgzOCwxOCArNDAzNCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVDWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRDWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FQ1gpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQ1gpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zODYwLDE4ICs0MDU5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1MgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RURYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdERYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VEWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9EWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM4ODIsMTggKzQwODQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDUzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRFQlhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0QlhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRUJYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0JYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzkwNCwyMyArNDEwOSwyNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVTUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRTUFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JLyogQWx3YXlzIHB1c2ggKEUpU1AsIHNpbmNlIHdlIGFyZSBlbXVsYXRpbmcgYW4gaTM4NiBhbmQgYWJvdmUKKy0JICogcHJvY2Vzc29yLiBUaGlzIGlzIG5lY2Vzc2FyeSBhcyBzb21lIEJJT1MnZXMgdXNlIHRoaXMgdG8gY2hlY2sKKy0JICogd2hhdCB0eXBlIG9mIHByb2Nlc3NvciBpcyBpbiB0aGUgc3lzdGVtLgorLQkgKi8KKy0JaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQlwdXNoX2xvbmcoTS54ODYuUl9FU1ApOworLQl9IGVsc2UgeworLQkJcHVzaF93b3JkKCh1MTYpKE0ueDg2LlJfU1ApKTsKKysgICAgLyogQWx3YXlzIHB1c2ggKEUpU1AsIHNpbmNlIHdlIGFyZSBlbXVsYXRpbmcgYW4gaTM4NiBhbmQgYWJvdmUKKysgICAgICogcHJvY2Vzc29yLiBUaGlzIGlzIG5lY2Vzc2FyeSBhcyBzb21lIEJJT1MnZXMgdXNlIHRoaXMgdG8gY2hlY2sKKysgICAgICogd2hhdCB0eXBlIG9mIHByb2Nlc3NvciBpcyBpbiB0aGUgc3lzdGVtLgorKyAgICAgKi8KKysgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FU1ApOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKCh1MTYpIChNLng4Ni5SX1NQKSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0zOTMwLDE4ICs0MTM4LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1NQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RUJQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEJQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VCUCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9CUCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM5NTIsMTggKzQxNjMsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDU2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRFU0lcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0U0lcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRVNJKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX1NJKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzk3NCwxOCArNDE4OCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVESVxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRESVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FREkpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfREkpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zOTk2LDE4ICs0MjEzLDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1OAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RUFYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0QVhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9BWCA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTQwMTgsMTggKzQyMzgsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEVDWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdENYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUNYID0gcG9wX2xvbmcoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQ1ggPSBwb3Bfd29yZCgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC00MDQwLDE4ICs0MjYzLDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDVhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFRFhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHREWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VEWCA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0RYID0gcG9wX3dvcmQoKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNDA2MiwxOCArNDI4OCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1YgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RUJYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0QlhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQlggPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9CWCA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTQwODQsMTggKzQzMTMsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEVTUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdFNQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRVNQID0gcG9wX2xvbmcoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfU1AgPSBwb3Bfd29yZCgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC00MTA2LDE4ICs0MzM4LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDVkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFQlBcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRCUFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCUCA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0JQID0gcG9wX3dvcmQoKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNDEyOCwxOCArNDM2MywyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RVNJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0U0lcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FU0kgPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9TSSA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTQxNTAsMTggKzQzODgsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NWYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEVESVxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdERJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRURJID0gcG9wX2xvbmcoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfREkgPSBwb3Bfd29yZCgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC00MTcyLDEyICs0NDEzLDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDYwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX2FsbCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX2FsbCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hBRFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIQVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKK0BAIC00MTkyLDcgKzQ0MzUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX2FsbCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FQlApOworICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRVNJKTsKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VESSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICB1MTYgb2xkX3NwID0gTS54ODYuUl9TUDsKKyAKKyAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0FYKTsKK0BAIC00MjEyLDEyICs0NDU2LDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NjEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9hbGwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX2FsbCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUEFEXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUEFcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtNDIyNSwxNiArNDQ3MSwxNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIE0ueDg2LlJfRURJID0gcG9wX2xvbmcoKTsKKyAgICAgICAgIE0ueDg2LlJfRVNJID0gcG9wX2xvbmcoKTsKKyAgICAgICAgIE0ueDg2LlJfRUJQID0gcG9wX2xvbmcoKTsKKy0gICAgICAgIE0ueDg2LlJfRVNQICs9IDQ7ICAgICAgICAgICAgICAvKiBza2lwIEVTUCAqLworKyAgICAgICAgTS54ODYuUl9FU1AgKz0gNDsgICAgICAgLyogc2tpcCBFU1AgKi8KKyAgICAgICAgIE0ueDg2LlJfRUJYID0gcG9wX2xvbmcoKTsKKyAgICAgICAgIE0ueDg2LlJfRURYID0gcG9wX2xvbmcoKTsKKyAgICAgICAgIE0ueDg2LlJfRUNYID0gcG9wX2xvbmcoKTsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gcG9wX2xvbmcoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfREkgPSBwb3Bfd29yZCgpOworICAgICAgICAgTS54ODYuUl9TSSA9IHBvcF93b3JkKCk7CisgICAgICAgICBNLng4Ni5SX0JQID0gcG9wX3dvcmQoKTsKKy0gICAgICAgIE0ueDg2LlJfU1AgKz0gMjsgICAgICAgICAgICAgICAvKiBza2lwIFNQICovCisrICAgICAgICBNLng4Ni5SX1NQICs9IDI7ICAgICAgICAvKiBza2lwIFNQICovCisgICAgICAgICBNLng4Ni5SX0JYID0gcG9wX3dvcmQoKTsKKyAgICAgICAgIE0ueDg2LlJfRFggPSBwb3Bfd29yZCgpOworICAgICAgICAgTS54ODYuUl9DWCA9IHBvcF93b3JkKCk7CitAQCAtNDI1MSw3ICs0NDk4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX2FsbCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDY0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfRlModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2Vnb3ZyX0ZTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkZTOlxuIik7CitAQCAtNDI2OCw3ICs0NTE2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0ZTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NjUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9HUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zZWdvdnJfR1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiR1M6XG4iKTsKK0BAIC00Mjg1LDcgKzQ1MzQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfR1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2NiAtIHByZWZpeCBmb3IgMzItYml0IHJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wcmVmaXhfZGF0YSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wcmVmaXhfZGF0YSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJEQVRBOlxuIik7CitAQCAtNDI5OSw3ICs0NTQ5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHJlZml4X2RhdGEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2NyAtIHByZWZpeCBmb3IgMzItYml0IGFkZHJlc3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3ByZWZpeF9hZGRyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3ByZWZpeF9hZGRyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkFERFI6XG4iKTsKK0BAIC00MzEzLDIyICs0NTY0LDI1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3ByZWZpeF9hZGRyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NjgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgaW1tOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIGltbSA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CisgICAgIERFQ09ERV9QUklOVEYyKCJQVVNIXHQleFxuIiwgaW1tKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBwdXNoX2xvbmcoaW1tKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIHB1c2hfd29yZCgodTE2KWltbSk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBwdXNoX3dvcmQoKHUxNikgaW1tKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTQzMzgsNyArNDU5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2OQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtNDM1MSw3ICs0NjA2LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKy0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKysgICAgICAgICAgICB1MzIgcmVzX2xvLCByZXNfaGk7CisgICAgICAgICAgICAgczMyIGltbTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworQEAgLTQzNTksMTggKzQ2MTQsMjAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpc3JjdmFsLChzMzIpaW1tKTsKKysgICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sICZyZXNfaGksIChzMzIpIHNyY3ZhbCwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpIHJlc19sbzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworICAgICAgICAgICAgIHUzMiByZXM7CitAQCAtNDM4MSwyNCArNDYzOCwyNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgcmVzID0gKHMxNilzcmN2YWwgKiAoczE2KWltbTsKKysgICAgICAgICAgICByZXMgPSAoczE2KSBzcmN2YWwgKihzMTYpIGltbTsKKysKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKy0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKysgICAgICAgICAgICB1MzIgcmVzX2xvLCByZXNfaGk7CisgICAgICAgICAgICAgczMyIGltbTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworQEAgLTQ0MDYsMTggKzQ2NjUsMjAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpc3JjdmFsLChzMzIpaW1tKTsKKysgICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sICZyZXNfaGksIChzMzIpIHNyY3ZhbCwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpIHJlc19sbzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworICAgICAgICAgICAgIHUzMiByZXM7CitAQCAtNDQyOCwyNCArNDY4OSwyNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgcmVzID0gKHMxNilzcmN2YWwgKiAoczE2KWltbTsKKysgICAgICAgICAgICByZXMgPSAoczE2KSBzcmN2YWwgKihzMTYpIGltbTsKKysKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKy0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKysgICAgICAgICAgICB1MzIgcmVzX2xvLCByZXNfaGk7CisgICAgICAgICAgICAgczMyIGltbTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworQEAgLTQ0NTMsMTggKzQ3MTYsMjAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpc3JjdmFsLChzMzIpaW1tKTsKKysgICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sICZyZXNfaGksIChzMzIpIHNyY3ZhbCwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpIHJlc19sbzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworICAgICAgICAgICAgIHUzMiByZXM7CitAQCAtNDQ3NSw0MiArNDc0MCw0NiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgcmVzID0gKHMxNilzcmN2YWwgKiAoczE2KWltbTsKKysgICAgICAgICAgICByZXMgPSAoczE2KSBzcmN2YWwgKihzMTYpIGltbTsKKysKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgcmVzX2xvLCByZXNfaGk7CisgICAgICAgICAgICAgczMyIGltbTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpKnNyY3JlZywoczMyKWltbSk7CisrICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCAmcmVzX2hpLCAoczMyKSAqIHNyY3JlZywgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpIHJlc19sbzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAgICAgICAgICAgICB1MzIgcmVzOworICAgICAgICAgICAgIHMxNiBpbW07CisgCitAQCAtNDUxOCwxNiArNDc4NywxNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworLSAgICAgICAgICAgIHJlcyA9IChzMTYpKnNyY3JlZyAqIChzMTYpaW1tOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisrICAgICAgICAgICAgcmVzID0gKHMxNikgKiBzcmNyZWcgKiAoczE2KSBpbW07CisgICAgICAgICAgICAgaWYgKHJlcyA+IDB4RkZGRikgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KSByZXM7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTQ1MzksMTggKzQ4MDksMjAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDZhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczE2IGltbTsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKy0gICAgaW1tID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CisrICAgIGltbSA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgREVDT0RFX1BSSU5URjIoIlBVU0hcdCVkXG4iLCBpbW0pOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JcHVzaF9sb25nKChzMzIpaW1tKTsKKy0gICAgfSBlbHNlIHsKKy0JcHVzaF93b3JkKGltbSk7CisrICAgICAgICBwdXNoX2xvbmcoKHMzMikgaW1tKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHB1c2hfd29yZChpbW0pOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNDU2MCwxMSArNDgzMiwxMiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NmIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW11bF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworLSAgICBzOCAgaW1tOworKyAgICBzOCBpbW07CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIklNVUxcdCIpOworQEAgLTQ1NzQsMjUgKzQ4NDcsMjcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKy0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKysgICAgICAgICAgICB1MzIgcmVzX2xvLCByZXNfaGk7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpc3JjdmFsLChzMzIpaW1tKTsKKysgICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sICZyZXNfaGksIChzMzIpIHNyY3ZhbCwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpIHJlc19sbzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworICAgICAgICAgICAgIHUzMiByZXM7CitAQCAtNDYwMiw0MiArNDg3Nyw0NiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgcmVzID0gKHMxNilzcmN2YWwgKiAoczE2KWltbTsKKysgICAgICAgICAgICByZXMgPSAoczE2KSBzcmN2YWwgKihzMTYpIGltbTsKKysKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKy0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKysgICAgICAgICAgICB1MzIgcmVzX2xvLCByZXNfaGk7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpc3JjdmFsLChzMzIpaW1tKTsKKysgICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sICZyZXNfaGksIChzMzIpIHNyY3ZhbCwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpIHJlc19sbzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworICAgICAgICAgICAgIHUzMiByZXM7CitAQCAtNDY0Nyw0MiArNDkyNiw0NiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgcmVzID0gKHMxNilzcmN2YWwgKiAoczE2KWltbTsKKysgICAgICAgICAgICByZXMgPSAoczE2KSBzcmN2YWwgKihzMTYpIGltbTsKKysKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKy0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKysgICAgICAgICAgICB1MzIgcmVzX2xvLCByZXNfaGk7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpc3JjdmFsLChzMzIpaW1tKTsKKysgICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sICZyZXNfaGksIChzMzIpIHNyY3ZhbCwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpIHJlc19sbzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworICAgICAgICAgICAgIHUzMiByZXM7CitAQCAtNDY5Miw1NyArNDk3NSw2MiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgcmVzID0gKHMxNilzcmN2YWwgKiAoczE2KWltbTsKKysgICAgICAgICAgICByZXMgPSAoczE2KSBzcmN2YWwgKihzMTYpIGltbTsKKysKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgcmVzX2xvLCByZXNfaGk7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sJnJlc19oaSwoczMyKSpzcmNyZWcsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgKiBzcmNyZWcsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKSByZXNfbG87CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgICAgICAgICAgICAgdTMyIHJlczsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CistICAgICAgICAgICAgcmVzID0gKHMxNikqc3JjcmVnICogKHMxNilpbW07CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKysgICAgICAgICAgICByZXMgPSAoczE2KSAqIHNyY3JlZyAqIChzMTYpIGltbTsKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtNDc1NCw3ICs1MDQyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDZjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbnNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJJTlNCXG4iKTsKK0BAIC00NzY4LDEzICs1MDU3LDE1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5TRFxuIik7CisgICAgICAgICBpbnMoNCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTlNXXG4iKTsKKyAgICAgICAgIGlucygyKTsKKyAgICAgfQorQEAgLTQ3ODcsNyArNTA3OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NmUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX291dHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vdXRzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiT1VUU0JcbiIpOworQEAgLTQ4MDEsMTMgKzUwOTMsMTUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0c19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NmYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX291dHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vdXRzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJPVVRTRFxuIik7CisgICAgICAgICBvdXRzKDQpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiT1VUU1dcbiIpOworICAgICAgICAgb3V0cygyKTsKKyAgICAgfQorQEAgLTQ4MjAsNyArNTExNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX291dHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDcwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNDgyOCw4ICs1MTIzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX08odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIG92ZXJmbG93IGZsYWcgaXMgc2V0ICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpPXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChBQ0NFU1NfRkxBRyhGX09GKSkKK0BAIC00ODQyLDcgKzUxMzcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDcxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTk8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX05PKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC00ODUwLDggKzUxNDYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTk8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIG92ZXJmbG93IGlzIG5vdCBzZXQgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5PXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmICghQUNDRVNTX0ZMQUcoRl9PRikpCitAQCAtNDg2NCw3ICs1MTYwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05PKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9CKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9CKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC00ODcyLDggKzUxNjksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfQih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgY2FycnkgZmxhZyBpcyBzZXQuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpCXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKK0BAIC00ODg2LDcgKzUxODMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfQih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDczCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX05CKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC00ODk0LDggKzUxOTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIGNhcnJ5IGZsYWcgaXMgY2xlYXIuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpOQlx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoIUFDQ0VTU19GTEFHKEZfQ0YpKQorQEAgLTQ5MDgsNyArNTIwNiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OQih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDc0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfWih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfWih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNDkxNiw4ICs1MjE1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX1oodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHplcm8gZmxhZyBpcyBzZXQuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpaXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChBQ0NFU1NfRkxBRyhGX1pGKSkKK0BAIC00OTMwLDcgKzUyMjksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfWih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDc1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTloodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX05aKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC00OTM4LDggKzUyMzgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTloodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHplcm8gZmxhZyBpcyBjbGVhci4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5aXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmICghQUNDRVNTX0ZMQUcoRl9aRikpCitAQCAtNDk1Miw3ICs1MjUyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05aKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfQkUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ5NjEsOCArNTI2Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgIGZsYWcgaXMgc2V0LiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKQkVcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpIHx8IEFDQ0VTU19GTEFHKEZfWkYpKQorQEAgLTQ5NzUsNyArNTI3Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDc3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkJFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9OQkUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ5ODQsOCArNTI4Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OQkUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICBmbGFnIGlzIGNsZWFyICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpOQkVcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKCEoQUNDRVNTX0ZMQUcoRl9DRikgfHwgQUNDRVNTX0ZMQUcoRl9aRikpKQorQEAgLTQ5OTgsNyArNTMwMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OQkUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3OAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTUwMDYsOCArNTMwOSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9TKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBzaWduIGZsYWcgaXMgc2V0ICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpTXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChBQ0NFU1NfRkxBRyhGX1NGKSkKK0BAIC01MDIwLDcgKzUzMjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDc5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTlModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX05TKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC01MDI4LDggKzUzMzIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTlModTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHNpZ24gZmxhZyBpcyBjbGVhciAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTlNcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKCFBQ0NFU1NfRkxBRyhGX1NGKSkKK0BAIC01MDQyLDcgKzUzNDYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTlModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3YQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTUwNTAsOCArNTM1NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9QKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBwYXJpdHkgZmxhZyBpcyBzZXQgKGV2ZW4gcGFyaXR5KSAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKUFx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9QRikpCitAQCAtNTA2NCw3ICs1MzY5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3YgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05QKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9OUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNTA3Miw4ICs1Mzc4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05QKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBwYXJpdHkgZmxhZyBpcyBjbGVhciAob2RkIHBhcml0eSkgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5QXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmICghQUNDRVNTX0ZMQUcoRl9QRikpCitAQCAtNTA4Niw3ICs1MzkyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05QKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4N2MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9MKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9MKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC01MDk1LDggKzU0MDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgc2lnbiBmbGFnIG5vdCBlcXVhbCB0byBvdmVyZmxvdyBmbGFnLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTFx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBzZiA9IEFDQ0VTU19GTEFHKEZfU0YpICE9IDA7CitAQCAtNTExMSw3ICs1NDE4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3ZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05MKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9OTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNTEyMCw4ICs1NDI4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05MKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBzaWduIGZsYWcgbm90IGVxdWFsIHRvIG92ZXJmbG93IGZsYWcuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpOTFx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBzZiA9IEFDQ0VTU19GTEFHKEZfU0YpICE9IDA7CitAQCAtNTEzNyw3ICs1NDQ1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05MKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4N2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9MRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTEUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTUxNDcsOCArNTQ1Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9MRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgIG9yIHRoZSB6ZXJvIGZsYWcgaXMgc2V0ICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpMRVx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBzZiA9IEFDQ0VTU19GTEFHKEZfU0YpICE9IDA7CitAQCAtNTE2Myw3ICs1NDcyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0xFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4N2YKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OTEUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX05MRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNTE3Myw4ICs1NDgzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05MRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgIGFuZCB0aGUgemVybyBmbGFnIGlzIGNsZWFyICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpOTEVcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgc2YgPSBBQ0NFU1NfRkxBRyhGX1NGKSAhPSAwOworQEAgLTUxODUsMjMgKzU0OTUsMjMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05MRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIEVORF9PRl9JTlNUUigpOworIH0KKyAKKy1zdGF0aWMgdTggKCpvcGM4MF9ieXRlX29wZXJhdGlvbltdKSh1OCBkLCB1OCBzKSA9CisteworLSAgICBhZGRfYnl0ZSwgICAgICAgICAgIC8qIDAwICovCistICAgIG9yX2J5dGUsICAgICAgICAgICAgLyogMDEgKi8KKy0gICAgYWRjX2J5dGUsICAgICAgICAgICAvKiAwMiAqLworLSAgICBzYmJfYnl0ZSwgICAgICAgICAgIC8qIDAzICovCistICAgIGFuZF9ieXRlLCAgICAgICAgICAgLyogMDQgKi8KKy0gICAgc3ViX2J5dGUsICAgICAgICAgICAvKiAwNSAqLworLSAgICB4b3JfYnl0ZSwgICAgICAgICAgIC8qIDA2ICovCistICAgIGNtcF9ieXRlLCAgICAgICAgICAgLyogMDcgKi8KKytzdGF0aWMgdTgoKm9wYzgwX2J5dGVfb3BlcmF0aW9uW10pICh1OCBkLCB1OCBzKSA9IHsKKysgICAgYWRkX2J5dGUsICAgICAgICAgICAgICAgICAgIC8qIDAwICovCisrICAgICAgICBvcl9ieXRlLCAgICAgICAgICAgICAgICAvKiAwMSAqLworKyAgICAgICAgYWRjX2J5dGUsICAgICAgICAgICAgICAgLyogMDIgKi8KKysgICAgICAgIHNiYl9ieXRlLCAgICAgICAgICAgICAgIC8qIDAzICovCisrICAgICAgICBhbmRfYnl0ZSwgICAgICAgICAgICAgICAvKiAwNCAqLworKyAgICAgICAgc3ViX2J5dGUsICAgICAgICAgICAgICAgLyogMDUgKi8KKysgICAgICAgIHhvcl9ieXRlLCAgICAgICAgICAgICAgIC8qIDA2ICovCisrICAgICAgICBjbXBfYnl0ZSwgICAgICAgICAgICAgICAvKiAwNyAqLworIH07CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ODAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgwX2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wYzgwX2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWc7CitAQCAtNTI5MCw3ICs1NjAwLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODBfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CitAQCAtNTMwNSwzNSArNTYxNSwzNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MF9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIEVORF9PRl9JTlNUUigpOworIH0KKyAKKy1zdGF0aWMgdTE2ICgqb3BjODFfd29yZF9vcGVyYXRpb25bXSkodTE2IGQsIHUxNiBzKSA9CisteworLSAgICBhZGRfd29yZCwgICAgICAgICAgIC8qMDAgKi8KKy0gICAgb3Jfd29yZCwgICAgICAgICAgICAvKjAxICovCistICAgIGFkY193b3JkLCAgICAgICAgICAgLyowMiAqLworLSAgICBzYmJfd29yZCwgICAgICAgICAgIC8qMDMgKi8KKy0gICAgYW5kX3dvcmQsICAgICAgICAgICAvKjA0ICovCistICAgIHN1Yl93b3JkLCAgICAgICAgICAgLyowNSAqLworLSAgICB4b3Jfd29yZCwgICAgICAgICAgIC8qMDYgKi8KKy0gICAgY21wX3dvcmQsICAgICAgICAgICAvKjA3ICovCisrc3RhdGljIHUxNigqb3BjODFfd29yZF9vcGVyYXRpb25bXSkgKHUxNiBkLCB1MTYgcykgPSB7CisrICAgIGFkZF93b3JkLCAgICAgICAgICAgICAgICAgICAvKjAwICovCisrICAgICAgICBvcl93b3JkLCAgICAgICAgICAgICAgICAvKjAxICovCisrICAgICAgICBhZGNfd29yZCwgICAgICAgICAgICAgICAvKjAyICovCisrICAgICAgICBzYmJfd29yZCwgICAgICAgICAgICAgICAvKjAzICovCisrICAgICAgICBhbmRfd29yZCwgICAgICAgICAgICAgICAvKjA0ICovCisrICAgICAgICBzdWJfd29yZCwgICAgICAgICAgICAgICAvKjA1ICovCisrICAgICAgICB4b3Jfd29yZCwgICAgICAgICAgICAgICAvKjA2ICovCisrICAgICAgICBjbXBfd29yZCwgICAgICAgICAgICAgICAvKjA3ICovCisgfTsKKyAKKy1zdGF0aWMgdTMyICgqb3BjODFfbG9uZ19vcGVyYXRpb25bXSkodTMyIGQsIHUzMiBzKSA9CisteworLSAgICBhZGRfbG9uZywgICAgICAgICAgIC8qMDAgKi8KKy0gICAgb3JfbG9uZywgICAgICAgICAgICAvKjAxICovCistICAgIGFkY19sb25nLCAgICAgICAgICAgLyowMiAqLworLSAgICBzYmJfbG9uZywgICAgICAgICAgIC8qMDMgKi8KKy0gICAgYW5kX2xvbmcsICAgICAgICAgICAvKjA0ICovCistICAgIHN1Yl9sb25nLCAgICAgICAgICAgLyowNSAqLworLSAgICB4b3JfbG9uZywgICAgICAgICAgIC8qMDYgKi8KKy0gICAgY21wX2xvbmcsICAgICAgICAgICAvKjA3ICovCisrc3RhdGljIHUzMigqb3BjODFfbG9uZ19vcGVyYXRpb25bXSkgKHUzMiBkLCB1MzIgcykgPSB7CisrICAgIGFkZF9sb25nLCAgICAgICAgICAgICAgICAgICAvKjAwICovCisrICAgICAgICBvcl9sb25nLCAgICAgICAgICAgICAgICAvKjAxICovCisrICAgICAgICBhZGNfbG9uZywgICAgICAgICAgICAgICAvKjAyICovCisrICAgICAgICBzYmJfbG9uZywgICAgICAgICAgICAgICAvKjAzICovCisrICAgICAgICBhbmRfbG9uZywgICAgICAgICAgICAgICAvKjA0ICovCisrICAgICAgICBzdWJfbG9uZywgICAgICAgICAgICAgICAvKjA1ICovCisrICAgICAgICB4b3JfbG9uZywgICAgICAgICAgICAgICAvKjA2ICovCisrICAgICAgICBjbXBfbG9uZywgICAgICAgICAgICAgICAvKjA3ICovCisgfTsKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4MQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtNTM4Nyw3ICs1Njk2LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBzd2l0Y2ggKG1vZCkgeworICAgICBjYXNlIDA6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgZGVzdHZhbCxpbW07CisrICAgICAgICAgICAgdTMyIGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJEV09SRCBQVFIgIik7CisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTUzOTksOCArNTcwOCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgxX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGM4MV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBpbW0pOworICAgICAgICAgICAgIGlmIChyaCAhPSA3KQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLGltbTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTU0MTYsNyArNTcyNiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgxX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgZGVzdHZhbCxpbW07CisrICAgICAgICAgICAgdTMyIGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJEV09SRCBQVFIgIik7CisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTU0MjgsOCArNTczOCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgxX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGM4MV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBpbW0pOworICAgICAgICAgICAgIGlmIChyaCAhPSA3KQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLGltbTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTU0NDUsNyArNTc1Niw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgxX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgZGVzdHZhbCxpbW07CisrICAgICAgICAgICAgdTMyIGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJEV09SRCBQVFIgIik7CisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTU0NTcsOCArNTc2OCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgxX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGM4MV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBpbW0pOworICAgICAgICAgICAgIGlmIChyaCAhPSA3KQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLGltbTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTU0NzIsMTAgKzU3ODQsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNTQ4NSw5ICs1Nzk3LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgxX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGM4MV9sb25nX29wZXJhdGlvbltyaF0pICgqZGVzdHJlZywgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICAgICAgKmRlc3RyZWcgPSBkZXN0dmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC01NTA0LDIzICs1ODE3LDIzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgxX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorLXN0YXRpYyB1OCAoKm9wYzgyX2J5dGVfb3BlcmF0aW9uW10pKHU4IHMsIHU4IGQpID0KKy17CistICAgIGFkZF9ieXRlLCAgICAgICAgICAgLyowMCAqLworLSAgICBvcl9ieXRlLCAgICAgICAgICAgIC8qMDEgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworLSAgICBhZGNfYnl0ZSwgICAgICAgICAgIC8qMDIgKi8KKy0gICAgc2JiX2J5dGUsICAgICAgICAgICAvKjAzICovCistICAgIGFuZF9ieXRlLCAgICAgICAgICAgLyowNCAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIHN1Yl9ieXRlLCAgICAgICAgICAgLyowNSAqLworLSAgICB4b3JfYnl0ZSwgICAgICAgICAgIC8qMDYgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworLSAgICBjbXBfYnl0ZSwgICAgICAgICAgIC8qMDcgKi8KKytzdGF0aWMgdTgoKm9wYzgyX2J5dGVfb3BlcmF0aW9uW10pICh1OCBzLCB1OCBkKSA9IHsKKysgICAgYWRkX2J5dGUsICAgICAgICAgICAgICAgICAgIC8qMDAgKi8KKysgICAgICAgIG9yX2J5dGUsICAgICAgICAgICAgICAgIC8qMDEgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworKyAgICAgICAgYWRjX2J5dGUsICAgICAgICAgICAgICAgLyowMiAqLworKyAgICAgICAgc2JiX2J5dGUsICAgICAgICAgICAgICAgLyowMyAqLworKyAgICAgICAgYW5kX2J5dGUsICAgICAgICAgICAgICAgLyowNCAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisrICAgICAgICBzdWJfYnl0ZSwgICAgICAgICAgICAgICAvKjA1ICovCisrICAgICAgICB4b3JfYnl0ZSwgICAgICAgICAgICAgICAvKjA2ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKysgICAgICAgIGNtcF9ieXRlLCAgICAgICAgICAgICAgIC8qMDcgKi8KKyB9OworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDgyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4Ml9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGM4Ml9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTU2MDYsNyArNTkxOSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgyX2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGlmIChyaCAhPSA3KQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKK0BAIC01NjIwLDM1ICs1OTMzLDM0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgyX2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorLXN0YXRpYyB1MTYgKCpvcGM4M193b3JkX29wZXJhdGlvbltdKSh1MTYgcywgdTE2IGQpID0KKy17CistICAgIGFkZF93b3JkLCAgICAgICAgICAgLyowMCAqLworLSAgICBvcl93b3JkLCAgICAgICAgICAgIC8qMDEgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworLSAgICBhZGNfd29yZCwgICAgICAgICAgIC8qMDIgKi8KKy0gICAgc2JiX3dvcmQsICAgICAgICAgICAvKjAzICovCistICAgIGFuZF93b3JkLCAgICAgICAgICAgLyowNCAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIHN1Yl93b3JkLCAgICAgICAgICAgLyowNSAqLworLSAgICB4b3Jfd29yZCwgICAgICAgICAgIC8qMDYgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworLSAgICBjbXBfd29yZCwgICAgICAgICAgIC8qMDcgKi8KKytzdGF0aWMgdTE2KCpvcGM4M193b3JkX29wZXJhdGlvbltdKSAodTE2IHMsIHUxNiBkKSA9IHsKKysgICAgYWRkX3dvcmQsICAgICAgICAgICAgICAgICAgIC8qMDAgKi8KKysgICAgICAgIG9yX3dvcmQsICAgICAgICAgICAgICAgIC8qMDEgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworKyAgICAgICAgYWRjX3dvcmQsICAgICAgICAgICAgICAgLyowMiAqLworKyAgICAgICAgc2JiX3dvcmQsICAgICAgICAgICAgICAgLyowMyAqLworKyAgICAgICAgYW5kX3dvcmQsICAgICAgICAgICAgICAgLyowNCAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisrICAgICAgICBzdWJfd29yZCwgICAgICAgICAgICAgICAvKjA1ICovCisrICAgICAgICB4b3Jfd29yZCwgICAgICAgICAgICAgICAvKjA2ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKysgICAgICAgIGNtcF93b3JkLCAgICAgICAgICAgICAgIC8qMDcgKi8KKyB9OworIAorLXN0YXRpYyB1MzIgKCpvcGM4M19sb25nX29wZXJhdGlvbltdKSh1MzIgcywgdTMyIGQpID0KKy17CistICAgIGFkZF9sb25nLCAgICAgICAgICAgLyowMCAqLworLSAgICBvcl9sb25nLCAgICAgICAgICAgIC8qMDEgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworLSAgICBhZGNfbG9uZywgICAgICAgICAgIC8qMDIgKi8KKy0gICAgc2JiX2xvbmcsICAgICAgICAgICAvKjAzICovCistICAgIGFuZF9sb25nLCAgICAgICAgICAgLyowNCAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIHN1Yl9sb25nLCAgICAgICAgICAgLyowNSAqLworLSAgICB4b3JfbG9uZywgICAgICAgICAgIC8qMDYgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworLSAgICBjbXBfbG9uZywgICAgICAgICAgIC8qMDcgKi8KKytzdGF0aWMgdTMyKCpvcGM4M19sb25nX29wZXJhdGlvbltdKSAodTMyIHMsIHUzMiBkKSA9IHsKKysgICAgYWRkX2xvbmcsICAgICAgICAgICAgICAgICAgIC8qMDAgKi8KKysgICAgICAgIG9yX2xvbmcsICAgICAgICAgICAgICAgIC8qMDEgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworKyAgICAgICAgYWRjX2xvbmcsICAgICAgICAgICAgICAgLyowMiAqLworKyAgICAgICAgc2JiX2xvbmcsICAgICAgICAgICAgICAgLyowMyAqLworKyAgICAgICAgYW5kX2xvbmcsICAgICAgICAgICAgICAgLyowNCAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisrICAgICAgICBzdWJfbG9uZywgICAgICAgICAgICAgICAvKjA1ICovCisrICAgICAgICB4b3JfbG9uZywgICAgICAgICAgICAgICAvKjA2ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKysgICAgICAgIGNtcF9sb25nLCAgICAgICAgICAgICAgIC8qMDcgKi8KKyB9OworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDgzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC01NjY3LDcgKzU5NzksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICBnZW5lcmFsLCBzbyB0aGF0IGl0IGlzIGltcG9ydGFudCB0byBsZWF2ZSB0aGUgc3RyaW5ncworICAgICAgICAgICAgaW4gdGhlIHNhbWUgZm9ybWF0LCBldmVuIHRob3VnaCB0aGUgcmVzdWx0IGlzIHRoYXQgdGhlIAorICAgICAgICAgICAgYWJvdmUgdGVzdCBpcyBkb25lIHR3aWNlLiAqLworLSAgICAgICBzd2l0Y2ggKHJoKSB7CisrICAgICAgICBzd2l0Y2ggKHJoKSB7CisgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiQUREXHQiKTsKKyAgICAgICAgICAgICBicmVhazsKK0BAIC01NzAwLDcgKzYwMTIsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtNTcxMSw4ICs2MDIzLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODNfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgzX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtNTcyNyw3ICs2MDQwLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODNfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtNTczOCw4ICs2MDUxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODNfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgzX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtNTc1NCw3ICs2MDY4LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODNfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtNTc2NSw4ICs2MDc5LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODNfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgzX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtNTc3OSwxMCArNjA5NCwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1MzIgZGVzdHZhbCxpbW07CisrICAgICAgICAgICAgdTMyIGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIGltbSA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKK0BAIC01NzkxLDkgKzYxMDYsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODNfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgzX2xvbmdfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCBpbW0pOworICAgICAgICAgICAgIGlmIChyaCAhPSA3KQorICAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IGRlc3R2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworQEAgLTU4MTMsNyArNjEyOSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ODQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3RfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3Rlc3RfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtNTg1MSw3ICs2MTY4LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgIHRlc3RfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtNTg2OCw3ICs2MTg1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4NQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfdGVzdF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtNTg4OSw3ICs2MjA3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICB0ZXN0X2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtNTkxNCw3ICs2MjMzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICB0ZXN0X2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtNTkzOSw3ICs2MjU5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICB0ZXN0X2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtNTk1Miw5ICs2MjczLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHRlc3Rfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC01OTYyLDggKzYyODMsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHRlc3RfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTU5ODIsNyArNjMwNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3Rfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ODYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hjaGdfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtNjAzMCw3ICs2MzUzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9IHRtcDsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtNjA0OSw3ICs2MzcyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4NworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeGNoZ193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtNjA2MSw3ICs2Mzg1LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBjYXNlIDA6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKnNyY3JlZzsKKy0gICAgICAgICAgICB1MzIgZGVzdHZhbCx0bXA7CisrICAgICAgICAgICAgdTMyIGRlc3R2YWwsIHRtcDsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYwNzMsOSArNjM5NywxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKnNyY3JlZyA9IGRlc3R2YWw7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHRtcDsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsdG1wOworKyAgICAgICAgICAgIHUxNiBkZXN0dmFsLCB0bXA7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC02MDkyLDcgKzY0MTcsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGNhc2UgMToKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqc3JjcmVnOworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLHRtcDsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgdG1wOworIAorICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjEwNCw5ICs2NDI5LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqc3JjcmVnID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBkZXN0dmFsID0gdG1wOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCx0bXA7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIHRtcDsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYxMjMsNyArNjQ0OSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgY2FzZSAyOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpzcmNyZWc7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsdG1wOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCB0bXA7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC02MTM1LDkgKzY0NjEsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICpzcmNyZWcgPSBkZXN0dmFsOworICAgICAgICAgICAgIGRlc3R2YWwgPSB0bXA7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLHRtcDsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgdG1wOworIAorICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjE1MSw5ICs2NDc4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAgICAgICAgICAgICB1MzIgdG1wOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CitAQCAtNjE2NCw4ICs2NDkxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHRtcCA9ICpzcmNyZWc7CisgICAgICAgICAgICAgKnNyY3JlZyA9ICpkZXN0cmVnOworICAgICAgICAgICAgICpkZXN0cmVnID0gdG1wOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAgICAgICAgICAgICB1MTYgdG1wOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CitAQCAtNjE4Nyw3ICs2NTE1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4OAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtNjIyMSw3ICs2NTUwLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsICpzcmNyZWcpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC02MjM4LDcgKzY1NjcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ODkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHUzMiBkZXN0b2Zmc2V0OworQEAgLTYyNTcsNyArNjU4Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTYyNzgsNyArNjYwOSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTYyOTksNyArNjYzMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTYzMTAsOSArNjY0Myw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCAqc3JjcmVnKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC02MzIwLDggKzY2NTMsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSAqc3JjcmVnOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC02MzQwLDcgKzY2NzQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OGEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTYzNzgsNyArNjcxMyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKK0BAIC02Mzk1LDcgKzY3MzAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OGIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTY0MTYsNyArNjc1Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC02NDQxLDcgKzY3NzgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtNjQ2Niw3ICs2ODA0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTY0NzksNyArNjgxOCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorQEAgLTY0ODksNyArNjgyOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9ICpzcmNyZWc7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CitAQCAtNjUwOSw3ICs2ODQ5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDhjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9TUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9STV9TUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC02NTQ3LDcgKzY4ODgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9TUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gKnNyY3JlZzsKKyAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBkZWNvZGVfcm1fc2VnX3JlZ2lzdGVyKHJoKTsKK0BAIC02NTY0LDQ3ICs2OTA1LDc3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1NSKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OGQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xlYV93b3JkX1JfTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sZWFfd29yZF9SX00odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworLSAgICB1MTYgKnNyY3JlZzsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworIAorLS8qCistICogVE9ETzogTmVlZCB0byBoYW5kbGUgYWRkcmVzcyBzaXplIHByZWZpeCEKKy0gKgorLSAqIGxlYSAgZWF4LFtlYXgrZWJ4KjJdID8/CistICovCistICAgIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJMRUFcdCIpOworICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKG1vZCkgeworICAgICBjYXNlIDA6CistICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CistICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICpzcmNyZWcgPSAodTE2KWRlc3RvZmZzZXQ7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0FERFIpIHsKKysgICAgICAgICAgICB1MzIgKnNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICAqc3JjcmVnID0gKHUzMikgZGVzdG9mZnNldDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgICpzcmNyZWcgPSAodTE2KSBkZXN0b2Zmc2V0OworKyAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKy0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CistICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgKnNyY3JlZyA9ICh1MTYpZGVzdG9mZnNldDsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfQUREUikgeworKyAgICAgICAgICAgIHUzMiAqc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgICpzcmNyZWcgPSAodTMyKSBkZXN0b2Zmc2V0OworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrCisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgKnNyY3JlZyA9ICh1MTYpIGRlc3RvZmZzZXQ7CisrICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKy0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAqc3JjcmVnID0gKHUxNilkZXN0b2Zmc2V0OworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSB7CisrICAgICAgICAgICAgdTMyICpzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrCisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgKnNyY3JlZyA9ICh1MzIpIGRlc3RvZmZzZXQ7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKnNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICAqc3JjcmVnID0gKHUxNikgZGVzdG9mZnNldDsKKysgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIC8qIHVuZGVmaW5lZC4gIERvIG5vdGhpbmcuICovCisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTY2MTYsNyArNjk4Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xlYV93b3JkX1JfTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDhlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9TUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC02NjU0LDcgKzcwMjYsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gZGVjb2RlX3JtX3NlZ19yZWdpc3RlcihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CitAQCAtNjY3Nyw3ICs3MDQ5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfU1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4ZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC02Njk5LDcgKzcwNzIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHBvcF9sb25nKCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC02NzE4LDcgKzcwOTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHBvcF9sb25nKCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC02NzM3LDcgKzcxMTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHBvcF9sb25nKCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC02NzQ3LDcgKzcxMjMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAKK0BAIC02NzU1LDcgKzcxMzEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHBvcF9sb25nKCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CitAQCAtNjc3Myw3ICs3MTUwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX25vcCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9ub3AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiTk9QXG4iKTsKK0BAIC02Nzg2LDE0ICs3MTY0LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX25vcCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDkxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeGNoZ193b3JkX0FYX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiB0bXA7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiWENIR1x0RUFYLEVDWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRBWCxDWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKK0BAIC02ODAxLDEwICs3MTgxLDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICB0bXAgPSBNLng4Ni5SX0VBWDsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gTS54ODYuUl9FQ1g7CisgICAgICAgICBNLng4Ni5SX0VDWCA9IHRtcDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfQVg7CisgICAgICAgICBNLng4Ni5SX0FYID0gTS54ODYuUl9DWDsKKy0gICAgICAgIE0ueDg2LlJfQ1ggPSAodTE2KXRtcDsKKysgICAgICAgIE0ueDg2LlJfQ1ggPSAodTE2KSB0bXA7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC02ODE0LDE0ICs3MTk1LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDkyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeGNoZ193b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiB0bXA7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiWENIR1x0RUFYLEVEWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRBWCxEWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKK0BAIC02ODI5LDEwICs3MjEyLDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICB0bXAgPSBNLng4Ni5SX0VBWDsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gTS54ODYuUl9FRFg7CisgICAgICAgICBNLng4Ni5SX0VEWCA9IHRtcDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfQVg7CisgICAgICAgICBNLng4Ni5SX0FYID0gTS54ODYuUl9EWDsKKy0gICAgICAgIE0ueDg2LlJfRFggPSAodTE2KXRtcDsKKysgICAgICAgIE0ueDg2LlJfRFggPSAodTE2KSB0bXA7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC02ODQyLDE0ICs3MjI2LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDkzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeGNoZ193b3JkX0FYX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiB0bXA7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiWENIR1x0RUFYLEVCWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRBWCxCWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKK0BAIC02ODU3LDEwICs3MjQzLDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICB0bXAgPSBNLng4Ni5SX0VBWDsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gTS54ODYuUl9FQlg7CisgICAgICAgICBNLng4Ni5SX0VCWCA9IHRtcDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfQVg7CisgICAgICAgICBNLng4Ni5SX0FYID0gTS54ODYuUl9CWDsKKy0gICAgICAgIE0ueDg2LlJfQlggPSAodTE2KXRtcDsKKysgICAgICAgIE0ueDg2LlJfQlggPSAodTE2KSB0bXA7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC02ODcwLDE0ICs3MjU3LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDk0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeGNoZ193b3JkX0FYX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiB0bXA7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiWENIR1x0RUFYLEVTUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRBWCxTUFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKK0BAIC02ODg1LDEwICs3Mjc0LDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICB0bXAgPSBNLng4Ni5SX0VBWDsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gTS54ODYuUl9FU1A7CisgICAgICAgICBNLng4Ni5SX0VTUCA9IHRtcDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfQVg7CisgICAgICAgICBNLng4Ni5SX0FYID0gTS54ODYuUl9TUDsKKy0gICAgICAgIE0ueDg2LlJfU1AgPSAodTE2KXRtcDsKKysgICAgICAgIE0ueDg2LlJfU1AgPSAodTE2KSB0bXA7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC02ODk4LDE0ICs3Mjg4LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDk1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeGNoZ193b3JkX0FYX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiB0bXA7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiWENIR1x0RUFYLEVCUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRBWCxCUFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKK0BAIC02OTEzLDEwICs3MzA1LDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICB0bXAgPSBNLng4Ni5SX0VBWDsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gTS54ODYuUl9FQlA7CisgICAgICAgICBNLng4Ni5SX0VCUCA9IHRtcDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfQVg7CisgICAgICAgICBNLng4Ni5SX0FYID0gTS54ODYuUl9CUDsKKy0gICAgICAgIE0ueDg2LlJfQlAgPSAodTE2KXRtcDsKKysgICAgICAgIE0ueDg2LlJfQlAgPSAodTE2KSB0bXA7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC02OTI2LDE0ICs3MzE5LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDk2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeGNoZ193b3JkX0FYX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiB0bXA7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiWENIR1x0RUFYLEVTSVxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRBWCxTSVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKK0BAIC02OTQxLDEwICs3MzM2LDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICB0bXAgPSBNLng4Ni5SX0VBWDsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gTS54ODYuUl9FU0k7CisgICAgICAgICBNLng4Ni5SX0VTSSA9IHRtcDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfQVg7CisgICAgICAgICBNLng4Ni5SX0FYID0gTS54ODYuUl9TSTsKKy0gICAgICAgIE0ueDg2LlJfU0kgPSAodTE2KXRtcDsKKysgICAgICAgIE0ueDg2LlJfU0kgPSAodTE2KSB0bXA7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC02OTU0LDE0ICs3MzUwLDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDk3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeGNoZ193b3JkX0FYX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiB0bXA7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiWENIR1x0RUFYLEVESVxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRBWCxESVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKK0BAIC02OTY5LDEwICs3MzY3LDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICB0bXAgPSBNLng4Ni5SX0VBWDsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gTS54ODYuUl9FREk7CisgICAgICAgICBNLng4Ni5SX0VESSA9IHRtcDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfQVg7CisgICAgICAgICBNLng4Ni5SX0FYID0gTS54ODYuUl9ESTsKKy0gICAgICAgIE0ueDg2LlJfREkgPSAodTE2KXRtcDsKKysgICAgICAgIE0ueDg2LlJfREkgPSAodTE2KSB0bXA7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC02OTgyLDI1ICs3MzgxLDMwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDk4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jYncodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY2J3KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQ1dERVxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJDQldcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgaWYgKE0ueDg2LlJfQVggJiAweDgwMDApIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0VBWCB8PSAweGZmZmYwMDAwOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIE0ueDg2LlJfRUFYICY9IDB4MDAwMGZmZmY7CisgICAgICAgICB9CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBpZiAoTS54ODYuUl9BTCAmIDB4ODApIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0FIID0gMHhmZjsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0FIID0gMHgwOworICAgICAgICAgfQorICAgICB9CitAQCAtNzAxMiwxMiArNzQxNiwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jYncodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5OQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY3dkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2N3ZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNEUVxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJDV0RcbiIpOworICAgICB9CisgICAgIERFQ09ERV9QUklOVEYoIkNXRFxuIik7CitAQCAtNzAyNSwxMyArNzQzMSwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jd2QodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIGlmIChNLng4Ni5SX0VBWCAmIDB4ODAwMDAwMDApIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0VEWCA9IDB4ZmZmZmZmZmY7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgTS54ODYuUl9FRFggPSAweDA7CisgICAgICAgICB9CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBpZiAoTS54ODYuUl9BWCAmIDB4ODAwMCkgeworICAgICAgICAgICAgIE0ueDg2LlJfRFggPSAweGZmZmY7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgTS54ODYuUl9EWCA9IDB4MDsKKyAgICAgICAgIH0KKyAgICAgfQorQEAgLTcwNDMsMTcgKzc0NTIsMjQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY3dkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OWEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NhbGxfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jYWxsX2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKy0gICAgdTE2IGZhcnNlZywgZmFyb2ZmOworKyAgICB1MzIgZmFyc2VnLCBmYXJvZmY7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CistCURFQ09ERV9QUklOVEYoIkNBTExcdCIpOworLQlmYXJvZmYgPSBmZXRjaF93b3JkX2ltbSgpOworLQlmYXJzZWcgPSBmZXRjaF93b3JkX2ltbSgpOworLQlERUNPREVfUFJJTlRGMigiJTA0eDoiLCBmYXJzZWcpOworLQlERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgZmFyb2ZmKTsKKy0JQ0FMTF9UUkFDRShNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXAsIGZhcnNlZywgZmFyb2ZmLCAiRkFSICIpOworKyAgICBERUNPREVfUFJJTlRGKCJDQUxMXHQiKTsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICBmYXJvZmYgPSBmZXRjaF9sb25nX2ltbSgpOworKyAgICAgICAgZmFyc2VnID0gZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIGZhcm9mZiA9IGZldGNoX3dvcmRfaW1tKCk7CisrICAgICAgICBmYXJzZWcgPSBmZXRjaF93b3JkX2ltbSgpOworKyAgICB9CisrICAgIERFQ09ERV9QUklOVEYyKCIlMDR4OiIsIGZhcnNlZyk7CisrICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCBmYXJvZmYpOworKyAgICBDQUxMX1RSQUNFKE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCwgZmFyc2VnLCBmYXJvZmYsICJGQVIgIik7CisgCisgICAgIC8qIFhYWAorICAgICAgKiAKK0BAIC03MDY0LDggKzc0ODAsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY2FsbF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgcHVzaF93b3JkKE0ueDg2LlJfQ1MpOworICAgICBNLng4Ni5SX0NTID0gZmFyc2VnOworLSAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CistICAgIE0ueDg2LlJfSVAgPSBmYXJvZmY7CisrICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRUlQKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKysgICAgfQorKyAgICBNLng4Ni5SX0VJUCA9IGZhcm9mZiAmIDB4ZmZmZjsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtNzA3NCw3ICs3NDk1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY2FsbF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OWIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3dhaXQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfd2FpdCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJXQUlUIik7CitAQCAtNzA4OCwxNCArNzUxMCwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF93YWl0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hmX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgZmxhZ3M7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSEZEXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hGXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTcxMDQsOCArNzUyOCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hmX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBmbGFncyA9IChNLng4Ni5SX0VGTEcgJiBGX01TSykgfCBGX0FMV0FZU19PTjsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBwdXNoX2xvbmcoZmxhZ3MpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgcHVzaF93b3JkKCh1MTYpZmxhZ3MpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKCh1MTYpIGZsYWdzKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTcxMTUsMTggKzc1NDAsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDlkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BmX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wZl93b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QRkRcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QRlxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VGTEcgPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9GTEcgPSBwb3Bfd29yZCgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC03MTM3LDcgKzc1NjUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BmX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2FoZih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zYWhmKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlNBSEZcbiIpOworQEAgLTcxNTQsMTIgKzc1ODMsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2FoZih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDlmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9sYWhmKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xhaGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiTEFIRlxuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistCU0ueDg2LlJfQUggPSAodTgpKE0ueDg2LlJfRkxHICYgMHhmZik7CisrICAgIE0ueDg2LlJfQUggPSAodTgpIChNLng4Ni5SX0ZMRyAmIDB4ZmYpOworICAgICAvKnVuZG9jdW1lbnRlZCBUQysrIGJlaGF2aW9yPz8/IE5vcGUuICBJdCdzIGRvY3VtZW50ZWQsIGJ1dAorICAgICAgICB5b3UgaGF2ZSB0b28gbG9vayByZWFsIGhhcmQgdG8gbm90aWNlIGl0LiAqLworICAgICBNLng4Ni5SX0FIIHw9IDB4MjsKK0BAIC03MTcxLDcgKzc2MDEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sYWhmKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YTAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9BTF9NX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfQUxfTV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTE2IG9mZnNldDsKKyAKK0BAIC03MTg5LDcgKzc2MjAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfQUxfTV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X0FYX01fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9BWF9NX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MTYgb2Zmc2V0OworIAorQEAgLTcxOTcsMTMgKzc2MjksMTUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X0FYX01fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgb2Zmc2V0ID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiTU9WXHRFQVgsWyUwNHhdXG4iLCBvZmZzZXQpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URjIoIk1PVlx0QVgsWyUwNHhdXG4iLCBvZmZzZXQpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBmZXRjaF9kYXRhX2xvbmcob2Zmc2V0KTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBmZXRjaF9kYXRhX3dvcmQob2Zmc2V0KTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNzIxNCw3ICs3NjQ4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X0FYX01fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YTIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9NX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfTV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTE2IG9mZnNldDsKKyAKK0BAIC03MjMyLDcgKzc2NjcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfTV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X01fQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9NX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MTYgb2Zmc2V0OworIAorQEAgLTcyNDAsMTMgKzc2NzYsMTUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X01fQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgb2Zmc2V0ID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiTU9WXHRbJTA0eF0sRUFYXG4iLCBvZmZzZXQpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URjIoIk1PVlx0WyUwNHhdLEFYXG4iLCBvZmZzZXQpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgc3RvcmVfZGF0YV9sb25nKG9mZnNldCwgTS54ODYuUl9FQVgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgc3RvcmVfZGF0YV93b3JkKG9mZnNldCwgTS54ODYuUl9BWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTcyNTcsMTUgKzc2OTUsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X01fQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YTQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdnNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKy0gICAgdTggIHZhbDsKKysgICAgdTggdmFsOworICAgICB1MzIgY291bnQ7CisgICAgIGludCBpbmM7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIk1PVlNcdEJZVEVcbiIpOworLSAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgICAgLyogZG93biAqLworICAgICAgICAgaW5jID0gLTE7CisgICAgIGVsc2UKKyAgICAgICAgIGluYyA9IDE7CitAQCAtNzI5Miw3ICs3NzMxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdnNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHZhbDsKKyAgICAgaW50IGluYzsKK0BAIC03MzAxLDEzICs3NzQxLDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdnNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WU1x0RFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtNDsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSA0OworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WU1x0V09SRFxuIik7CistICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgICAgLyogZG93biAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgLyogZG93biAqLworICAgICAgICAgICAgIGluYyA9IC0yOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGluYyA9IDI7CitAQCAtNzMyNSw5ICs3NzY2LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdnNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX2xvbmcoTS54ODYuUl9TSSk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCB2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHZhbCA9IGZldGNoX2RhdGFfd29yZChNLng4Ni5SX1NJKTsKKy0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksICh1MTYpdmFsKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksICh1MTYpIHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5SX1NJICs9IGluYzsKKyAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworQEAgLTczNDAsNyArNzc4Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdnNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGE2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IHZhbDEsIHZhbDI7CisgICAgIGludCBpbmM7CitAQCAtNzM0OCw3ICs3NzkxLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQ01QU1x0QllURVxuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgICAvKiBkb3duICovCisgICAgICAgICBpbmMgPSAtMTsKKyAgICAgZWxzZQorICAgICAgICAgaW5jID0gMTsKK0BAIC03MzU5LDcgKzc4MDIsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgd2hpbGUgKE0ueDg2LlJfQ1ggIT0gMCkgeworICAgICAgICAgICAgIHZhbDEgPSBmZXRjaF9kYXRhX2J5dGUoTS54ODYuUl9TSSk7CisgICAgICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CistICAgICAgICAgICAgICAgICAgICAgY21wX2J5dGUodmFsMSwgdmFsMik7CisrICAgICAgICAgICAgY21wX2J5dGUodmFsMSwgdmFsMik7CisgICAgICAgICAgICAgTS54ODYuUl9DWCAtPSAxOworICAgICAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworICAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworQEAgLTczNjcsNyArNzgxMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQRTsKKy0gICAgfSBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKysgICAgfQorKyAgICBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKyAgICAgICAgIC8qIFJFUE5FICAqLworICAgICAgICAgLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCisgICAgICAgICB3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7CitAQCAtNzM4MSw3ICs3ODI1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIHplcm8gZmxhZyBzZXQgbWVhbnMgZXF1YWwgKi8KKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUE5FOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfYnl0ZShNLng4Ni5SX1NJKTsKKyAgICAgICAgIHZhbDIgPSBmZXRjaF9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgY21wX2J5dGUodmFsMSwgdmFsMik7CitAQCAtNzM5NiwyMSArNzg0MSwyMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhNworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NtcHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICB1MzIgdmFsMSx2YWwyOworKyAgICB1MzIgdmFsMSwgdmFsMjsKKyAgICAgaW50IGluYzsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJDTVBTXHREV09SRFxuIik7CistICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgLyogZG93biAqLworICAgICAgICAgICAgIGluYyA9IC00OworICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGluYyA9IDQ7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJDTVBTXHRXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTI7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gMjsKK0BAIC03NDI0LDEwICs3ODcxLDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIHZhbDEgPSBmZXRjaF9kYXRhX2xvbmcoTS54ODYuUl9TSSk7CisgICAgICAgICAgICAgICAgIHZhbDIgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgICAgICAgICBjbXBfbG9uZyh2YWwxLCB2YWwyKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfd29yZChNLng4Ni5SX1NJKTsKKyAgICAgICAgICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CistICAgICAgICAgICAgICAgIGNtcF93b3JkKCh1MTYpdmFsMSwgKHUxNil2YWwyKTsKKysgICAgICAgICAgICAgICAgY21wX3dvcmQoKHUxNikgdmFsMSwgKHUxNikgdmFsMik7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIE0ueDg2LlJfQ1ggLT0gMTsKKyAgICAgICAgICAgICBNLng4Ni5SX1NJICs9IGluYzsKK0BAIC03NDM2LDcgKzc4ODQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUEU7CistICAgIH0gZWxzZSBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX1JFUE5FKSB7CisrICAgIH0KKysgICAgZWxzZSBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX1JFUE5FKSB7CisgICAgICAgICAvKiBSRVBORSAgKi8KKyAgICAgICAgIC8qIG1vdmUgdGhlbSB1bnRpbCBDWCBpcyBaRVJPLiAqLworICAgICAgICAgd2hpbGUgKE0ueDg2LlJfQ1ggIT0gMCkgeworQEAgLTc0NDQsMTAgKzc4OTMsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKKyAgICAgICAgICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisgICAgICAgICAgICAgICAgIGNtcF9sb25nKHZhbDEsIHZhbDIpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV93b3JkKE0ueDg2LlJfU0kpOworICAgICAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICAgICAgY21wX3dvcmQoKHUxNil2YWwxLCAodTE2KXZhbDIpOworKyAgICAgICAgICAgICAgICBjbXBfd29yZCgodTE2KSB2YWwxLCAodTE2KSB2YWwyKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgTS54ODYuUl9DWCAtPSAxOworICAgICAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworQEAgLTc0NTYsMTUgKzc5MDYsMTcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIHplcm8gZmxhZyBzZXQgbWVhbnMgZXF1YWwgKi8KKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUE5FOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKKyAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKyAgICAgICAgICAgICBjbXBfbG9uZyh2YWwxLCB2YWwyKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV93b3JkKE0ueDg2LlJfU0kpOworICAgICAgICAgICAgIHZhbDIgPSBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworLSAgICAgICAgICAgIGNtcF93b3JkKCh1MTYpdmFsMSwgKHUxNil2YWwyKTsKKysgICAgICAgICAgICBjbXBfd29yZCgodTE2KSB2YWwxLCAodTE2KSB2YWwyKTsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzQ3Nyw3ICs3OTI5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YTgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3RfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3Rlc3RfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBpbW07CisgCitAQCAtNzQ4Niw3ICs3OTM5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgaW1tKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JdGVzdF9ieXRlKE0ueDg2LlJfQUwsICh1OClpbW0pOworKyAgICB0ZXN0X2J5dGUoTS54ODYuUl9BTCwgKHU4KSBpbW0pOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC03NDk1LDcgKzc5NDgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGE5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF90ZXN0X0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTc1MDMsNyArNzk1Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3RfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtNzUxMSw4ICs3OTY2LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHRlc3RfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIHRlc3Rfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICB0ZXN0X3dvcmQoTS54ODYuUl9BWCwgKHUxNikgc3JjdmFsKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTc1MjIsMTMgKzc5NzgsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3N0b3NfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgaW5jOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJTVE9TXHRCWVRFXG4iKTsKKy0gICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICAgIC8qIGRvd24gKi8KKyAgICAgICAgIGluYyA9IC0xOworICAgICBlbHNlCisgICAgICAgICBpbmMgPSAxOworQEAgLTc1NDIsNyArNzk5OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0b3NfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5tb2RlICY9IH4oU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwgTS54ODYuUl9BTCk7CisgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKyAgICAgfQorQEAgLTc1NTQsNyArODAxMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0b3NfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGFiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zdG9zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3Rvc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBpbmM7CisgICAgIHUzMiBjb3VudDsKK0BAIC03NTYyLDEzICs4MDIxLDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0b3Nfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiU1RPU1x0RFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtNDsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSA0OworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiU1RPU1x0V09SRFxuIik7CistICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgLyogZG93biAqLworICAgICAgICAgICAgIGluYyA9IC0yOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGluYyA9IDI7CitAQCAtNzU4NSw3ICs4MDQ1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgd2hpbGUgKGNvdW50LS0pIHsKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwgTS54ODYuUl9FQVgpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwgTS54ODYuUl9BWCk7CisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKK0BAIC03NTk4LDE0ICs4MDU5LDE1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0b3Nfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGFjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9sb2RzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbG9kc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBpbmM7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkxPRFNcdEJZVEVcbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgICAgLyogZG93biAqLworICAgICAgICAgaW5jID0gLTE7CisgICAgIGVsc2UKKyAgICAgICAgIGluYyA9IDE7CitAQCAtNzYxOCw3ICs4MDgwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9kc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBNLng4Ni5SX1NJICs9IGluYzsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gfihTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9BTCA9IGZldGNoX2RhdGFfYnl0ZShNLng4Ni5SX1NJKTsKKyAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworICAgICB9CitAQCAtNzYzMCw3ICs4MDkzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9kc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvZHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sb2RzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IGluYzsKKyAgICAgdTMyIGNvdW50OworQEAgLTc2MzgsMTMgKzgxMDIsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9kc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJMT0RTXHREV09SRFxuIik7CistICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgLyogZG93biAqLworICAgICAgICAgICAgIGluYyA9IC00OworICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGluYyA9IDQ7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJMT0RTXHRXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTI7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gMjsKK0BAIC03NjYxLDcgKzgxMjYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb2RzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICB3aGlsZSAoY291bnQtLSkgeworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgTS54ODYuUl9FQVggPSBmZXRjaF9kYXRhX2xvbmcoTS54ODYuUl9TSSk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgTS54ODYuUl9BWCA9IGZldGNoX2RhdGFfd29yZChNLng4Ni5SX1NJKTsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworQEAgLTc2NzQsNyArODE0MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvZHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGFlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2Nhc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IHZhbDI7CisgICAgIGludCBpbmM7CitAQCAtNzY4Miw3ICs4MTQ5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Nhc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiU0NBU1x0QllURVxuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgICAvKiBkb3duICovCisgICAgICAgICBpbmMgPSAtMTsKKyAgICAgZWxzZQorICAgICAgICAgaW5jID0gMTsKK0BAIC03Njk4LDcgKzgxNjUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUEU7CistICAgIH0gZWxzZSBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX1JFUE5FKSB7CisrICAgIH0KKysgICAgZWxzZSBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX1JFUE5FKSB7CisgICAgICAgICAvKiBSRVBORSAgKi8KKyAgICAgICAgIC8qIG1vdmUgdGhlbSB1bnRpbCBDWCBpcyBaRVJPLiAqLworICAgICAgICAgd2hpbGUgKE0ueDg2LlJfQ1ggIT0gMCkgeworQEAgLTc3MTAsNyArODE3OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiB6ZXJvIGZsYWcgc2V0IG1lYW5zIGVxdWFsICovCisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5tb2RlICY9IH5TWVNNT0RFX1BSRUZJWF9SRVBORTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHZhbDIgPSBmZXRjaF9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgY21wX2J5dGUoTS54ODYuUl9BTCwgdmFsMik7CisgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKK0BAIC03NzIzLDcgKzgxOTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Nhc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NjYXNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgaW5jOworICAgICB1MzIgdmFsOworQEAgLTc3MzEsMTMgKzgyMDEsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Nhc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJTQ0FTXHREV09SRFxuIik7CistICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgLyogZG93biAqLworICAgICAgICAgICAgIGluYyA9IC00OworICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGluYyA9IDQ7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJTQ0FTXHRXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTI7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gMjsKK0BAIC03NzUwLDkgKzgyMjEsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Nhc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKyAgICAgICAgICAgICAgICAgY21wX2xvbmcoTS54ODYuUl9FQVgsIHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHZhbCA9IGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CistICAgICAgICAgICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpdmFsKTsKKysgICAgICAgICAgICAgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgdmFsKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgTS54ODYuUl9DWCAtPSAxOworICAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworQEAgLTc3NjAsMTYgKzgyMzIsMTggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Nhc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5tb2RlICY9IH5TWVNNT0RFX1BSRUZJWF9SRVBFOworLSAgICB9IGVsc2UgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9SRVBORSkgeworKyAgICB9CisrICAgIGVsc2UgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9SRVBORSkgeworICAgICAgICAgLyogUkVQTkUgICovCisgICAgICAgICAvKiBtb3ZlIHRoZW0gdW50aWwgQ1ggaXMgWkVSTy4gKi8KKyAgICAgICAgIHdoaWxlIChNLng4Ni5SX0NYICE9IDApIHsKKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKyAgICAgICAgICAgICAgICAgY21wX2xvbmcoTS54ODYuUl9FQVgsIHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHZhbCA9IGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CistICAgICAgICAgICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpdmFsKTsKKysgICAgICAgICAgICAgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgdmFsKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgTS54ODYuUl9DWCAtPSAxOworICAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworQEAgLTc3NzcsMTMgKzgyNTEsMTUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Nhc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIHplcm8gZmxhZyBzZXQgbWVhbnMgZXF1YWwgKi8KKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUE5FOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKyAgICAgICAgICAgICBjbXBfbG9uZyhNLng4Ni5SX0VBWCwgdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworLSAgICAgICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpdmFsKTsKKysgICAgICAgICAgICBjbXBfd29yZChNLng4Ni5SX0FYLCAodTE2KSB2YWwpOworICAgICAgICAgfQorICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CisgICAgIH0KK0BAIC03Nzk1LDcgKzgyNzEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBpbW07CisgCitAQCAtNzgxMyw3ICs4MjkwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0NMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9DTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggaW1tOworIAorQEAgLTc4MzEsNyArODMwOSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0NMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGIyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9ETF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfRExfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGltbTsKKyAKK0BAIC03ODQ5LDcgKzgzMjgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9ETF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQkxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX0JMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBpbW07CisgCitAQCAtNzg2Nyw3ICs4MzQ3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQkxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0FIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9BSF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggaW1tOworIAorQEAgLTc4ODUsNyArODM2Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0FIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGI1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9DSF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfQ0hfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGltbTsKKyAKK0BAIC03OTAzLDcgKzgzODUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9DSF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfREhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX0RIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBpbW07CisgCitAQCAtNzkyMSw3ICs4NDA0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfREhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0JIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9CSF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggaW1tOworIAorQEAgLTc5MzksNyArODQyMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0JIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGI4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtNzk0Nyw3ICs4NDMyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEVBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTc5NTUsOCArODQ0MSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBzcmN2YWw7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0gKHUxNilzcmN2YWw7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0gKHUxNikgc3JjdmFsOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNzk2Niw3ICs4NDUzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0NYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9DWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC03OTc0LDcgKzg0NjIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9DWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RUNYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0Q1gsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtNzk4Miw4ICs4NDcxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQ1hfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VDWCA9IHNyY3ZhbDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQ1ggPSAodTE2KXNyY3ZhbDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQ1ggPSAodTE2KSBzcmN2YWw7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC03OTkzLDcgKzg0ODMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9DWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfRFhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX0RYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTgwMDEsNyArODQ5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0RYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFRFgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHREWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC04MDA5LDggKzg1MDEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9EWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRURYID0gc3JjdmFsOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9EWCA9ICh1MTYpc3JjdmFsOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9EWCA9ICh1MTYpIHNyY3ZhbDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTgwMjAsNyArODUxMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0RYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGJiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9CWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfQlhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtODAyOCw3ICs4NTIyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQlhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEVCWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEJYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTgwMzYsOCArODUzMSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0JYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQlggPSBzcmN2YWw7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0JYID0gKHUxNilzcmN2YWw7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0JYID0gKHUxNikgc3JjdmFsOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtODA0Nyw3ICs4NTQzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQlhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YmMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9TUF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC04MDU1LDcgKzg1NTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TUF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RVNQLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0U1AsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtODA2Myw4ICs4NTYxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfU1BfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VTUCA9IHNyY3ZhbDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfU1AgPSAodTE2KXNyY3ZhbDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfU1AgPSAodTE2KSBzcmN2YWw7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC04MDc0LDcgKzg1NzMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TUF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQlBfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX0JQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTgwODIsNyArODU4Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0JQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFQlAsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRCUCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC04MDkwLDggKzg1OTEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9CUF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUJQID0gc3JjdmFsOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9CUCA9ICh1MTYpc3JjdmFsOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9CUCA9ICh1MTYpIHNyY3ZhbDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTgxMDEsNyArODYwMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0JQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGJlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TSV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfU0lfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtODEwOSw3ICs4NjEyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfU0lfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEVTSSwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdFNJLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTgxMTcsOCArODYyMSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FU0kgPSBzcmN2YWw7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX1NJID0gKHUxNilzcmN2YWw7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX1NJID0gKHUxNikgc3JjdmFsOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtODEyOCw3ICs4NjMzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfU0lfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YmYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0RJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9ESV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC04MTM2LDcgKzg2NDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9ESV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RURJLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0REksIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtODE0NCwzMSArODY1MSwyNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9ESV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRURJID0gc3JjdmFsOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9ESSA9ICh1MTYpc3JjdmFsOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9ESSA9ICh1MTYpIHNyY3ZhbDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KKyAKKyAvKiB1c2VkIGJ5IG9wY29kZXMgYzAsIGQwLCBhbmQgZDIuICovCistc3RhdGljIHU4KCpvcGNEMF9ieXRlX29wZXJhdGlvbltdKSh1OCBkLCB1OCBzKSA9CisteworLSAgICByb2xfYnl0ZSwKKy0gICAgcm9yX2J5dGUsCistICAgIHJjbF9ieXRlLAorLSAgICByY3JfYnl0ZSwKKy0gICAgc2hsX2J5dGUsCistICAgIHNocl9ieXRlLAorLSAgICBzaGxfYnl0ZSwgICAgICAgICAgIC8qIHNhbF9ieXRlID09PSBzaGxfYnl0ZSAgYnkgZGVmaW5pdGlvbiAqLworLSAgICBzYXJfYnl0ZSwKKy19OworK3N0YXRpYyB1OCgqb3BjRDBfYnl0ZV9vcGVyYXRpb25bXSkgKHU4IGQsIHU4IHMpID0geworKyAgICByb2xfYnl0ZSwgcm9yX2J5dGUsIHJjbF9ieXRlLCByY3JfYnl0ZSwgc2hsX2J5dGUsIHNocl9ieXRlLCBzaGxfYnl0ZSwgICAgICAgLyogc2FsX2J5dGUgPT09IHNobF9ieXRlICBieSBkZWZpbml0aW9uICovCisrc2FyX2J5dGUsfTsKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjQzBfYnl0ZV9STV9NRU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjQzBfYnl0ZV9STV9NRU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZzsKK0BAIC04MjUxLDcgKzg3NTIsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMF9ieXRlX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMF9ieXRlX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIGFtdCA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBhbXQpOworQEAgLTgyNjUsMzYgKzg3NjYsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjQzBfYnl0ZV9STV9NRU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIH0KKyAKKyAvKiB1c2VkIGJ5IG9wY29kZXMgYzEsIGQxLCBhbmQgZDMuICovCistc3RhdGljIHUxNigqb3BjRDFfd29yZF9vcGVyYXRpb25bXSkodTE2IHMsIHU4IGQpID0KKy17CistICAgIHJvbF93b3JkLAorLSAgICByb3Jfd29yZCwKKy0gICAgcmNsX3dvcmQsCistICAgIHJjcl93b3JkLAorLSAgICBzaGxfd29yZCwKKy0gICAgc2hyX3dvcmQsCistICAgIHNobF93b3JkLCAgICAgICAgICAgLyogc2FsX2J5dGUgPT09IHNobF9ieXRlICBieSBkZWZpbml0aW9uICovCistICAgIHNhcl93b3JkLAorLX07Cisrc3RhdGljIHUxNigqb3BjRDFfd29yZF9vcGVyYXRpb25bXSkgKHUxNiBzLCB1OCBkKSA9IHsKKysgICAgcm9sX3dvcmQsIHJvcl93b3JkLCByY2xfd29yZCwgcmNyX3dvcmQsIHNobF93b3JkLCBzaHJfd29yZCwgc2hsX3dvcmQsICAgICAgIC8qIHNhbF9ieXRlID09PSBzaGxfYnl0ZSAgYnkgZGVmaW5pdGlvbiAqLworK3Nhcl93b3JkLH07CisgCisgLyogdXNlZCBieSBvcGNvZGVzIGMxLCBkMSwgYW5kIGQzLiAqLworLXN0YXRpYyB1MzIgKCpvcGNEMV9sb25nX29wZXJhdGlvbltdKSh1MzIgcywgdTggZCkgPQorLXsKKy0gICAgcm9sX2xvbmcsCistICAgIHJvcl9sb25nLAorLSAgICByY2xfbG9uZywKKy0gICAgcmNyX2xvbmcsCistICAgIHNobF9sb25nLAorLSAgICBzaHJfbG9uZywKKy0gICAgc2hsX2xvbmcsICAgICAgICAgICAvKiBzYWxfYnl0ZSA9PT0gc2hsX2J5dGUgIGJ5IGRlZmluaXRpb24gKi8KKy0gICAgc2FyX2xvbmcsCistfTsKKytzdGF0aWMgdTMyKCpvcGNEMV9sb25nX29wZXJhdGlvbltdKSAodTMyIHMsIHU4IGQpID0geworKyAgICByb2xfbG9uZywgcm9yX2xvbmcsIHJjbF9sb25nLCByY3JfbG9uZywgc2hsX2xvbmcsIHNocl9sb25nLCBzaGxfbG9uZywgICAgICAgLyogc2FsX2J5dGUgPT09IHNobF9ieXRlICBieSBkZWZpbml0aW9uICovCisrc2FyX2xvbmcsfTsKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjQzFfd29yZF9STV9NRU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjQzFfd29yZF9STV9NRU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtODM1Nyw3ICs4ODQzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjQzFfd29yZF9STV9NRU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtODM4Miw3ICs4ODY5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjQzFfd29yZF9STV9NRU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtODQwNyw3ICs4ODk1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjQzFfd29yZF9STV9NRU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtODQyMCw3ICs4OTA5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjQzFfd29yZF9STV9NRU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAKK0BAIC04NDI5LDcgKzg5MTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgYW10KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pICgqZGVzdHJlZywgYW10KTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC04NDQ4LDcgKzg5MzgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGMyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcmV0X25lYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiBpbW07CisgCitAQCAtODQ1Niw4ICs4OTQ3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X25lYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgREVDT0RFX1BSSU5URigiUkVUXHQiKTsKKyAgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbW0pOworLQlSRVRVUk5fVFJBQ0UoIlJFVCIsTS54ODYuc2F2ZWRfY3MsTS54ODYuc2F2ZWRfaXApOworLQlUUkFDRV9BTkRfU1RFUCgpOworKyAgICBSRVRVUk5fVFJBQ0UoIlJFVCIsIE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CisrICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIE0ueDg2LlJfSVAgPSBwb3Bfd29yZCgpOworICAgICBNLng4Ni5SX1NQICs9IGltbTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTg0NjgsMTIgKzg5NTksMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X25lYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9uZWFyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3JldF9uZWFyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlJFVFxuIik7CistCVJFVFVSTl9UUkFDRSgiUkVUIixNLng4Ni5zYXZlZF9jcyxNLng4Ni5zYXZlZF9pcCk7CistCVRSQUNFX0FORF9TVEVQKCk7CisrICAgIFJFVFVSTl9UUkFDRSgiUkVUIiwgTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgTS54ODYuUl9JUCA9IHBvcF93b3JkKCk7CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtODQ4Myw3ICs4OTc1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X25lYXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xlc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCByaCwgcmw7CisgICAgIHUxNiAqZHN0cmVnOworQEAgLTg1MjAsNyArOTAxMyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xlc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAqZHN0cmVnID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisgICAgICAgICBNLng4Ni5SX0VTID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIDIpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgLyogVU5ERUZJTkVEISAqLworICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgfQorQEAgLTg1MzIsNyArOTAyNSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xlc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGM1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9sZHNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbGRzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJoLCBybDsKKyAgICAgdTE2ICpkc3RyZWc7CitAQCAtODU2OSw3ICs5MDYzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbGRzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgIE0ueDg2LlJfRFMgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICAvKiBVTkRFRklORUQhICovCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICB9CitAQCAtODU4MSw3ICs5MDc1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbGRzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZzsKK0BAIC04NjIwLDcgKzkxMTUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBpbW0pOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiLCUyeFxuIiwgaW1tKTsKK0BAIC04NjM2LDcgKzkxMzEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjNworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC04NjU5LDcgKzkxNTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgaW1tKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworQEAgLTg2ODAsNyArOTE3Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBpbW0pOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtODcwMSw3ICs5MTk5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGltbSk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC04NzEyLDE5ICs5MjExLDIwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGltbSk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQl1MzIgKmRlc3RyZWc7CistCQkJdTMyIGltbTsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisrICAgICAgICAgICAgdTMyIGltbTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2xvbmdfaW1tKCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gaW1tOworLSAgICAgICAgfSBlbHNlIHsKKy0JCQl1MTYgKmRlc3RyZWc7CistCQkJdTE2IGltbTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKysgICAgICAgICAgICB1MTYgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKK0BAIC04NzQyLDEwICs5MjQyLDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGM4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9lbnRlcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9lbnRlcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICB1MTYgbG9jYWwsZnJhbWVfcG9pbnRlcjsKKy0gICAgdTggIG5lc3Rpbmc7CisrICAgIHUxNiBsb2NhbCwgZnJhbWVfcG9pbnRlcjsKKysgICAgdTggbmVzdGluZzsKKyAgICAgaW50IGk7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CitAQCAtODc2MCwxMSArOTI2MSwxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9lbnRlcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbmVzdGluZzsgaSsrKSB7CisgICAgICAgICAgICAgTS54ODYuUl9CUCAtPSAyOworICAgICAgICAgICAgIHB1c2hfd29yZChmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfU1MsIE0ueDg2LlJfQlApKTsKKy0gICAgICAgICAgICB9CistICAgICAgICBwdXNoX3dvcmQoZnJhbWVfcG9pbnRlcik7CisgICAgICAgICB9CisrICAgICAgICBwdXNoX3dvcmQoZnJhbWVfcG9pbnRlcik7CisrICAgIH0KKyAgICAgTS54ODYuUl9CUCA9IGZyYW1lX3BvaW50ZXI7CistICAgIE0ueDg2LlJfU1AgPSAodTE2KShNLng4Ni5SX1NQIC0gbG9jYWwpOworKyAgICBNLng4Ni5SX1NQID0gKHUxNikgKE0ueDg2LlJfU1AgLSBsb2NhbCk7CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTg3NzMsNyArOTI3NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2VudGVyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xlYXZlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xlYXZlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkxFQVZFXG4iKTsKK0BAIC04Nzg4LDcgKzkyOTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sZWF2ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGNhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9yZXRfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MTYgaW1tOworIAorQEAgLTg3OTYsOCArOTI5OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgREVDT0RFX1BSSU5URigiUkVURlx0Iik7CisgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgaW1tKTsKKy0JUkVUVVJOX1RSQUNFKCJSRVRGIixNLng4Ni5zYXZlZF9jcyxNLng4Ni5zYXZlZF9pcCk7CistCVRSQUNFX0FORF9TVEVQKCk7CisrICAgIFJFVFVSTl9UUkFDRSgiUkVURiIsIE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CisrICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIE0ueDg2LlJfSVAgPSBwb3Bfd29yZCgpOworICAgICBNLng4Ni5SX0NTID0gcG9wX3dvcmQoKTsKKyAgICAgTS54ODYuUl9TUCArPSBpbW07CitAQCAtODgwOSwxMiArOTMxMiwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGNiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfZmFyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3JldF9mYXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUkVURlxuIik7CistCVJFVFVSTl9UUkFDRSgiUkVURiIsTS54ODYuc2F2ZWRfY3MsTS54ODYuc2F2ZWRfaXApOworLQlUUkFDRV9BTkRfU1RFUCgpOworKyAgICBSRVRVUk5fVFJBQ0UoIlJFVEYiLCBNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworKyAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBNLng4Ni5SX0lQID0gcG9wX3dvcmQoKTsKKyAgICAgTS54ODYuUl9DUyA9IHBvcF93b3JkKCk7CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC04ODI1LDE1ICs5MzI5LDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9mYXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW50Myh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbnQzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIklOVCAzXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKF9YODZFTVVfaW50clRhYlszXSkgeworLQkoKl9YODZFTVVfaW50clRhYlszXSkoMyk7CistICAgIH0gZWxzZSB7CistICAgICAgICBwdXNoX3dvcmQoKHUxNilNLng4Ni5SX0ZMRyk7CisrICAgICAgICAoKl9YODZFTVVfaW50clRhYlszXSkgKDMpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKCh1MTYpIE0ueDg2LlJfRkxHKTsKKyAgICAgICAgIENMRUFSX0ZMQUcoRl9JRik7CisgICAgICAgICBDTEVBUl9GTEFHKEZfVEYpOworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQ1MpOworQEAgLTg4NDksNyArOTM1NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ludDModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW50X0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbnRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGludG51bTsKKyAKK0BAIC04ODU5LDkgKzkzNjYsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW50X0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgaW50bnVtKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKF9YODZFTVVfaW50clRhYltpbnRudW1dKSB7CistCSgqX1g4NkVNVV9pbnRyVGFiW2ludG51bV0pKGludG51bSk7CistICAgIH0gZWxzZSB7CistICAgICAgICBwdXNoX3dvcmQoKHUxNilNLng4Ni5SX0ZMRyk7CisrICAgICAgICAoKl9YODZFTVVfaW50clRhYltpbnRudW1dKSAoaW50bnVtKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHB1c2hfd29yZCgodTE2KSBNLng4Ni5SX0ZMRyk7CisgICAgICAgICBDTEVBUl9GTEFHKEZfSUYpOworICAgICAgICAgQ0xFQVJfRkxBRyhGX1RGKTsKKyAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0NTKTsKK0BAIC04ODc3LDE2ICs5Mzg1LDE4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ludF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW50byh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbnRvKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIklOVE9cbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9PRikpIHsKKy0JaWYgKF9YODZFTVVfaW50clRhYls0XSkgeworLQkgICAgKCpfWDg2RU1VX2ludHJUYWJbNF0pKDQpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICBwdXNoX3dvcmQoKHUxNilNLng4Ni5SX0ZMRyk7CisrICAgICAgICBpZiAoX1g4NkVNVV9pbnRyVGFiWzRdKSB7CisrICAgICAgICAgICAgKCpfWDg2RU1VX2ludHJUYWJbNF0pICg0KTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHB1c2hfd29yZCgodTE2KSBNLng4Ni5SX0ZMRyk7CisgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0lGKTsKKyAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfVEYpOworICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0NTKTsKK0BAIC04OTAzLDcgKzk0MTMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnRvKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4Y2YKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2lyZXQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaXJldCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJJUkVUXG4iKTsKK0BAIC04OTIxLDcgKzk0MzIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pcmV0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZDAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QwX2J5dGVfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGNEMF9ieXRlX1JNXzEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZzsKK0BAIC04OTk5LDcgKzk1MTEsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMF9ieXRlX1JNXzEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDBfYnl0ZV9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgMSk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLDFcbiIpOworICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKK0BAIC05MDE1LDcgKzk1MjcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMF9ieXRlX1JNXzEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhkMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDFfd29yZF9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0QxX3dvcmRfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC05MDc1LDcgKzk1ODgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMV93b3JkX1JNXzEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgMSk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworQEAgLTkwOTgsNyArOTYxMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QxX3dvcmRfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCAxKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtOTEyMSw3ICs5NjM2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDFfd29yZF9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIDEpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJCWVRFIFBUUiAiKTsKK0BAIC05MTMzLDE5ICs5NjQ5LDIwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QxX3dvcmRfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJdTMyIGRlc3R2YWw7CistCQkJdTMyICpkZXN0cmVnOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwxXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCAxKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGRlc3R2YWw7CistICAgICAgICB9IGVsc2UgeworLQkJCXUxNiBkZXN0dmFsOworLQkJCXUxNiAqZGVzdHJlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBkZXN0dmFsOworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwxXG4iKTsKK0BAIC05MTYzLDcgKzk2ODAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMV93b3JkX1JNXzEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhkMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDJfYnl0ZV9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGNEMl9ieXRlX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWc7CitAQCAtOTI0Myw3ICs5NzYxLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDJfYnl0ZV9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMF9ieXRlX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTkyNTksNyArOTc3Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QyX2J5dGVfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhkMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDNfd29yZF9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTkzMjEsNyArOTg0MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QzX3dvcmRfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtOTM0NCw3ICs5ODY0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDNfd29yZF9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC05MzY3LDcgKzk4ODgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworQEAgLTkzNzksNyArOTkwMSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QzX3dvcmRfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAKK0BAIC05Mzg3LDcgKzk5MDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCBhbXQpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworQEAgLTk0MDUsMTYgKzk5MjgsMTcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDNfd29yZF9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGQ0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hYW0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWFtKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGE7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkFBTVxuIik7CistICAgIGEgPSBmZXRjaF9ieXRlX2ltbSgpOyAgICAgIC8qIHRoaXMgaXMgYSBzdHVwaWQgZW5jb2RpbmcuICovCisrICAgIGEgPSBmZXRjaF9ieXRlX2ltbSgpOyAgICAgICAvKiB0aGlzIGlzIGEgc3R1cGlkIGVuY29kaW5nLiAqLworICAgICBpZiAoYSAhPSAxMCkgeworLQkvKiBmaXg6IGFkZCBiYXNlIGRlY29kaW5nCistCSAgIGFhbV93b3JkKHU4IHZhbCwgaW50IGJhc2UgYSkgKi8KKysgICAgICAgIC8qIGZpeDogYWRkIGJhc2UgZGVjb2RpbmcKKysgICAgICAgICAgIGFhbV93b3JkKHU4IHZhbCwgaW50IGJhc2UgYSkgKi8KKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkVSUk9SIERFQ09ESU5HIEFBTVxuIik7CisgICAgICAgICBUUkFDRV9SRUdTKCk7CisgICAgICAgICBIQUxUX1NZUygpOworQEAgLTk0MzAsNyArOTk1NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FhbSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGQ1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hYWQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWFkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGE7CisgCitAQCAtOTQzOCw4ICs5OTYzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWFkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgREVDT0RFX1BSSU5URigiQUFEXG4iKTsKKyAgICAgYSA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgIGlmIChhICE9IDEwKSB7CistCS8qIGZpeDogYWRkIGJhc2UgZGVjb2RpbmcKKy0JICAgYWFkX3dvcmQodTE2IHZhbCwgaW50IGJhc2UgYSkgKi8KKysgICAgICAgIC8qIGZpeDogYWRkIGJhc2UgZGVjb2RpbmcKKysgICAgICAgICAgIGFhZF93b3JkKHUxNiB2YWwsIGludCBiYXNlIGEpICovCisgICAgICAgICBERUNPREVfUFJJTlRGKCJFUlJPUiBERUNPRElORyBBQU1cbiIpOworICAgICAgICAgVFJBQ0VfUkVHUygpOworICAgICAgICAgSEFMVF9TWVMoKTsKK0BAIC05NDU2LDE0ICs5OTgxLDE1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FhZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGQ3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94bGF0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hsYXQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTE2IGFkZHI7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlhMQVRcbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLQlhZGRyID0gKHUxNikoTS54ODYuUl9CWCArICh1OClNLng4Ni5SX0FMKTsKKysgICAgYWRkciA9ICh1MTYpIChNLng4Ni5SX0JYICsgKHU4KSBNLng4Ni5SX0FMKTsKKyAgICAgTS54ODYuUl9BTCA9IGZldGNoX2RhdGFfYnl0ZShhZGRyKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC05NDc1LDcgKzEwMDAxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGxhdCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGUwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbG9vcG5lKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHMxNiBpcDsKKyAKK0BAIC05NDg2LDcgKzEwMDEzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9vcG5lKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsIGlwKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgTS54ODYuUl9DWCAtPSAxOworLSAgICBpZiAoTS54ODYuUl9DWCAhPSAwICYmICFBQ0NFU1NfRkxBRyhGX1pGKSkgICAgICAvKiBDWCAhPSAwIGFuZCAhWkYgKi8KKysgICAgaWYgKE0ueDg2LlJfQ1ggIT0gMCAmJiAhQUNDRVNTX0ZMQUcoRl9aRikpICAvKiBDWCAhPSAwIGFuZCAhWkYgKi8KKyAgICAgICAgIE0ueDg2LlJfSVAgPSBpcDsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC05NDk2LDcgKzEwMDIzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9vcG5lKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZTEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvb3BlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xvb3BlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHMxNiBpcDsKKyAKK0BAIC05NTA3LDcgKzEwMDM1LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9vcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgaXApOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBNLng4Ni5SX0NYIC09IDE7CistICAgIGlmIChNLng4Ni5SX0NYICE9IDAgJiYgQUNDRVNTX0ZMQUcoRl9aRikpICAgICAgIC8qIENYICE9IDAgYW5kIFpGICovCisrICAgIGlmIChNLng4Ni5SX0NYICE9IDAgJiYgQUNDRVNTX0ZMQUcoRl9aRikpICAgLyogQ1ggIT0gMCBhbmQgWkYgKi8KKyAgICAgICAgIE0ueDg2LlJfSVAgPSBpcDsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC05NTE3LDcgKzEwMDQ1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9vcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9vcCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sb29wKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHMxNiBpcDsKKyAKK0BAIC05NTM4LDE2ICsxMDA2NywxNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZTMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2pjeHoodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfamN4eih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MTYgdGFyZ2V0OworLSAgICBzOCAgb2Zmc2V0OworKyAgICBzOCBvZmZzZXQ7CisgCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgb3ZlcmZsb3cgZmxhZyBpcyBzZXQgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSkNYWlx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2LlJfQ1ggPT0gMCkKK0BAIC05NTYwLDE2ICsxMDA5MCwxNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qY3h6KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZTQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHBvcnQ7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIklOXHQiKTsKKy0JcG9ydCA9ICh1OCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgcG9ydCA9ICh1OCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4LEFMXG4iLCBwb3J0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgTS54ODYuUl9BTCA9ICgqc3lzX2luYikocG9ydCk7CisrICAgIE0ueDg2LlJfQUwgPSAoKnN5c19pbmIpIChwb3J0KTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtOTU3OCwyMyArMTAxMDksMjYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5fYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5fd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5fd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggcG9ydDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU5cdCIpOworLQlwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICBwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJFQVgsJXhcbiIsIHBvcnQpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URjIoIkFYLCV4XG4iLCBwb3J0KTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgIE0ueDg2LlJfRUFYID0gKCpzeXNfaW5sKShwb3J0KTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSAoKnN5c19pbncpKHBvcnQpOworKyAgICAgICAgTS54ODYuUl9FQVggPSAoKnN5c19pbmwpIChwb3J0KTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSAoKnN5c19pbncpIChwb3J0KTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk2MDQsMTYgKzEwMTM4LDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZTYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX291dF9ieXRlX0lNTV9BTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vdXRfYnl0ZV9JTU1fQUwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggcG9ydDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiT1VUXHQiKTsKKy0JcG9ydCA9ICh1OCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgcG9ydCA9ICh1OCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4LEFMXG4iLCBwb3J0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgKCpzeXNfb3V0YikocG9ydCwgTS54ODYuUl9BTCk7CisrICAgICgqc3lzX291dGIpIChwb3J0LCBNLng4Ni5SX0FMKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtOTYyMiwyMyArMTAxNTcsMjYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0X2J5dGVfSU1NX0FMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZTcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX291dF93b3JkX0lNTV9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vdXRfd29yZF9JTU1fQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggcG9ydDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiT1VUXHQiKTsKKy0JcG9ydCA9ICh1OCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgcG9ydCA9ICh1OCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiJXgsRUFYXG4iLCBwb3J0KTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCIleCxBWFxuIiwgcG9ydCk7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAoKnN5c19vdXRsKShwb3J0LCBNLng4Ni5SX0VBWCk7CistICAgIH0gZWxzZSB7CistICAgICAgICAoKnN5c19vdXR3KShwb3J0LCBNLng4Ni5SX0FYKTsKKysgICAgICAgICgqc3lzX291dGwpIChwb3J0LCBNLng4Ni5SX0VBWCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICAoKnN5c19vdXR3KSAocG9ydCwgTS54ODYuUl9BWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC05NjQ4LDE5ICsxMDE4NiwzNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRfd29yZF9JTU1fQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY2FsbF9uZWFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jYWxsX25lYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CistICAgIHMxNiBpcDsKKysgICAgczE2IGlwMTY7CisrICAgIHMzMiBpcDMyOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworLQlERUNPREVfUFJJTlRGKCJDQUxMXHQiKTsKKy0JaXAgPSAoczE2KSBmZXRjaF93b3JkX2ltbSgpOworLQlpcCArPSAoczE2KSBNLng4Ni5SX0lQOyAgICAvKiBDSEVDSyBTSUdOICovCistCURFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCAodTE2KWlwKTsKKy0JQ0FMTF9UUkFDRShNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXAsIE0ueDg2LlJfQ1MsIGlwLCAiIik7CisrICAgIERFQ09ERV9QUklOVEYoIkNBTExcdCIpOworKyAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgIGlwMzIgPSAoczMyKSBmZXRjaF9sb25nX2ltbSgpOworKyAgICAgICAgaXAzMiArPSAoczE2KSBNLng4Ni5SX0lQOyAgICAgICAvKiBDSEVDSyBTSUdOICovCisrICAgICAgICBERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgKHUxNikgaXAzMik7CisrICAgICAgICBDQUxMX1RSQUNFKE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCwgTS54ODYuUl9DUywgaXAzMiwgIiIpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgaXAxNiA9IChzMTYpIGZldGNoX3dvcmRfaW1tKCk7CisrICAgICAgICBpcDE2ICs9IChzMTYpIE0ueDg2LlJfSVA7ICAgICAgIC8qIENIRUNLIFNJR04gKi8KKysgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCAodTE2KSBpcDE2KTsKKysgICAgICAgIENBTExfVFJBQ0UoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwLCBNLng4Ni5SX0NTLCBpcDE2LCAiIik7CisrICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworLSAgICBNLng4Ni5SX0lQID0gaXA7CisrICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRUlQKTsKKysgICAgICAgIE0ueDg2LlJfRUlQID0gaXAzMiAmIDB4ZmZmZjsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKysgICAgICAgIE0ueDg2LlJfRUlQID0gaXAxNjsKKysgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC05NjY5LDE3ICsxMDIyMywyNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jYWxsX25lYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZTkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICBpbnQgaXA7CisrICAgIHUzMiBpcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk1QXHQiKTsKKy0gICAgaXAgPSAoczE2KWZldGNoX3dvcmRfaW1tKCk7CistICAgIGlwICs9IChzMTYpTS54ODYuUl9JUDsKKy0gICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsICh1MTYpaXApOworLSAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICBNLng4Ni5SX0lQID0gKHUxNilpcDsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICBpcCA9ICh1MzIpIGZldGNoX2xvbmdfaW1tKCk7CisrICAgICAgICBpcCArPSAodTMyKSBNLng4Ni5SX0VJUDsKKysgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4XG4iLCAodTMyKSBpcCk7CisrICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgTS54ODYuUl9FSVAgPSAodTMyKSBpcDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIGlwID0gKHMxNikgZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgICAgIGlwICs9IChzMTYpIE0ueDg2LlJfSVA7CisrICAgICAgICBERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgKHUxNikgaXApOworKyAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgIE0ueDg2LlJfSVAgPSAodTE2KSBpcDsKKysgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC05Njg4LDE4ICsxMDI1MiwyNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZWEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKy0gICAgdTE2IGNzLCBpcDsKKysgICAgdTE2IGNzOworKyAgICB1MzIgaXA7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpNUFx0RkFSICIpOworLSAgICBpcCA9IGZldGNoX3dvcmRfaW1tKCk7CisrICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgaXAgPSBmZXRjaF9sb25nX2ltbSgpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgaXAgPSBmZXRjaF93b3JkX2ltbSgpOworKyAgICB9CisgICAgIGNzID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiUwNHg6IiwgY3MpOworICAgICBERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgaXApOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICBNLng4Ni5SX0lQID0gaXA7CisrICAgIE0ueDg2LlJfRUlQID0gaXAgJiAweGZmZmY7CisgICAgIE0ueDg2LlJfQ1MgPSBjczsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC05NzA5LDE1ICsxMDI4MCwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiB0YXJnZXQ7CisgICAgIHM4IG9mZnNldDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk1QXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyBvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBNLng4Ni5SX0lQID0gdGFyZ2V0OworQEAgLTk3MjksMTIgKzEwMzAxLDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5fYnl0ZV9BTF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbl9ieXRlX0FMX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIklOXHRBTCxEWFxuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgIE0ueDg2LlJfQUwgPSAoKnN5c19pbmIpKE0ueDg2LlJfRFgpOworKyAgICBNLng4Ni5SX0FMID0gKCpzeXNfaW5iKSAoTS54ODYuUl9EWCk7CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTk3NDMsMTkgKzEwMzE2LDIyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luX2J5dGVfQUxfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5fd29yZF9BWF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbl93b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5cdEVBWCxEWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTlx0QVgsRFhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgTS54ODYuUl9FQVggPSAoKnN5c19pbmwpKE0ueDg2LlJfRFgpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9ICgqc3lzX2ludykoTS54ODYuUl9EWCk7CisrICAgICAgICBNLng4Ni5SX0VBWCA9ICgqc3lzX2lubCkgKE0ueDg2LlJfRFgpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9ICgqc3lzX2ludykgKE0ueDg2LlJfRFgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtOTc2NSwxMiArMTAzNDEsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5fd29yZF9BWF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGVlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRfYnl0ZV9EWF9BTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vdXRfYnl0ZV9EWF9BTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJPVVRcdERYLEFMXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgKCpzeXNfb3V0YikoTS54ODYuUl9EWCwgTS54ODYuUl9BTCk7CisrICAgICgqc3lzX291dGIpIChNLng4Ni5SX0RYLCBNLng4Ni5SX0FMKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtOTc3OSwxOSArMTAzNTYsMjIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0X2J5dGVfRFhfQUwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0X3dvcmRfRFhfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3V0X3dvcmRfRFhfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJPVVRcdERYLEVBWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJPVVRcdERYLEFYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICgqc3lzX291dGwpKE0ueDg2LlJfRFgsIE0ueDg2LlJfRUFYKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgICgqc3lzX291dHcpKE0ueDg2LlJfRFgsIE0ueDg2LlJfQVgpOworKyAgICAgICAgKCpzeXNfb3V0bCkgKE0ueDg2LlJfRFgsIE0ueDg2LlJfRUFYKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgICgqc3lzX291dHcpIChNLng4Ni5SX0RYLCBNLng4Ni5SX0FYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk4MDEsNyArMTAzODEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRfd29yZF9EWF9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGYwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9sb2NrKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xvY2sodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiTE9DSzpcbiIpOworQEAgLTk4MTYsNyArMTAzOTcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb2NrKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3JlcG5lKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3JlcG5lKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlJFUE5FXG4iKTsKK0BAIC05ODMwLDcgKzEwNDEyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcmVwbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcmVwZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9yZXBlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlJFUEVcbiIpOworQEAgLTk4NDQsNyArMTA0MjcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXBlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2hhbHQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaGFsdCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJIQUxUXG4iKTsKK0BAIC05ODU4LDcgKzEwNDQyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaGFsdCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGY1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jbWModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21jKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIC8qIGNvbXBsZW1lbnQgdGhlIGNhcnJ5IGZsYWcuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CitAQCAtOTg3Myw3ICsxMDQ1OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGY2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0Y2X2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZzsKK0BAIC05ODg1LDkgKzEwNDcxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjZfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CistICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDAgKi8KKysgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgLyogbW9kPTAwICovCisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogdGVzdCBieXRlIGltbSAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0QllURSBQVFIgIik7CisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC05OTUzLDkgKzEwNTM5LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjZfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0wMCAqLworLSAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgLyogbW9kPTAxICovCisrICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgIC8qIG1vZD0wMSAqLworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogdGVzdCBieXRlIGltbSAqLworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdEJZVEUgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTAwMjEsOSArMTA2MDcsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGVuZCBtb2Q9PTAxICovCistICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MTAgKi8KKysgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgLyogbW9kPTEwICovCisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogdGVzdCBieXRlIGltbSAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0QllURSBQVFIgIik7CisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xMDA4OSw5ICsxMDY3NSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y2X2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG1vZD09MTAgKi8KKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMSAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MTEgKi8KKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHQiKTsKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xMDEyMyw3ICsxMDcwOSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y2X2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIG11bF9ieXRlKCpkZXN0cmVnKTsgICAgICAvKiEhISAgKi8KKysgICAgICAgICAgICBtdWxfYnl0ZSgqZGVzdHJlZyk7IC8qISEhICAqLworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklNVUxcdCIpOworQEAgLTEwMTU3LDcgKzEwNzQzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjZfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGY3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMTAxNjcsMTEgKzEwNzU0LDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgLyogbW9kPTAwICovCisrICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgIC8qIG1vZD0wMCAqLworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIHRlc3Qgd29yZCBpbW0gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogdGVzdCB3b3JkIGltbSAqLworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbCxzcmN2YWw7CisrICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBzcmN2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdERXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTEwMTgxLDggKzEwNzY4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCBzcmN2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsLHNyY3ZhbDsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsLCBzcmN2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdFdPUkQgUFRSICIpOworICAgICAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtMTAyMDksNyArMTA3OTcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IG5vdF9sb25nKGRlc3R2YWwpOworICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJOT1RcdFdPUkQgUFRSICIpOworQEAgLTEwMjMyLDcgKzEwODIxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBuZWdfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTkVHXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDI1NCw3ICsxMDg0NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBtdWxfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk1VTFx0V09SRCBQVFIgIik7CitAQCAtMTAyNzUsNyArMTA4NjYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgaW11bF9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0V09SRCBQVFIgIik7CitAQCAtMTAyOTYsNyArMTA4ODgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGl2X2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJESVZcdFdPUkQgUFRSICIpOworQEAgLTEwMzE3LDcgKzEwOTEwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGlkaXZfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklESVZcdFdPUkQgUFRSICIpOworQEAgLTEwMzMwLDExICsxMDkyNCwxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGVuZCBtb2Q9PTAwICovCistICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDEgKi8KKysgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgLyogbW9kPTAxICovCisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogdGVzdCB3b3JkIGltbSAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsLHNyY3ZhbDsKKysgICAgICAgICAgICAgICAgdTMyIGRlc3R2YWwsIHNyY3ZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0RFdPUkQgUFRSICIpOworICAgICAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtMTAzNDQsOCArMTA5MzgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgdGVzdF9sb25nKGRlc3R2YWwsIHNyY3ZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICAgICAgdTE2IGRlc3R2YWwsc3JjdmFsOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWwsIHNyY3ZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0V09SRCBQVFIgIik7CisgICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC0xMDM3Miw3ICsxMDk2Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gbm90X2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5PVFx0V09SRCBQVFIgIik7CitAQCAtMTAzOTUsNyArMTA5OTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IG5lZ19sb25nKGRlc3R2YWwpOworICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJORUdcdFdPUkQgUFRSICIpOworQEAgLTEwNDE3LDcgKzExMDE0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIG11bF9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTVVMXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDQzOCw3ICsxMTAzNiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBpbXVsX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJTVVMXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDQ1OSw3ICsxMTA1OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkaXZfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRJVlx0V09SRCBQVFIgIik7CitAQCAtMTA0ODAsNyArMTEwODAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgaWRpdl9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSURJVlx0V09SRCBQVFIgIik7CitAQCAtMTA0OTMsMTEgKzExMDk0LDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG1vZD09MDEgKi8KKy0gICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMCAqLworKyAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MTAgKi8KKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIHRlc3Qgd29yZCBpbW0gKi8KKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICAgICAgdTMyIGRlc3R2YWwsc3JjdmFsOworKyAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbCwgc3JjdmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHREV09SRCBQVFIgIik7CisgICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC0xMDUwNyw4ICsxMTEwOCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICB0ZXN0X2xvbmcoZGVzdHZhbCwgc3JjdmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbCxzcmN2YWw7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbCwgc3JjdmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTEwNTM1LDcgKzExMTM3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBub3RfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTk9UXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDU1OCw3ICsxMTE2MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gbmVnX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5FR1x0V09SRCBQVFIgIik7CitAQCAtMTA1ODAsNyArMTExODQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgbXVsX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJNVUxcdFdPUkQgUFRSICIpOworQEAgLTEwNjAxLDcgKzExMjA2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGltdWxfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklNVUxcdFdPUkQgUFRSICIpOworQEAgLTEwNjIyLDcgKzExMjI4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRpdl9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRElWXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDY0Myw3ICsxMTI1MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBpZGl2X2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJRElWXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDY1Niw5ICsxMTI2NCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG1vZD09MTAgKi8KKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMSAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MTEgKi8KKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIHRlc3Qgd29yZCBpbW0gKi8KKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworICAgICAgICAgICAgICAgICB1MzIgc3JjdmFsOworQEAgLTEwNjcwLDcgKzExMjc4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgc3JjdmFsKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgdGVzdF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTA2OTYsNyArMTEzMDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgKmRlc3RyZWcgPSBub3RfbG9uZygqZGVzdHJlZyk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTk9UXHQiKTsKK0BAIC0xMDcxNSw3ICsxMTMyNSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IG5lZ19sb25nKCpkZXN0cmVnKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJORUdcdCIpOworQEAgLTEwNzMzLDE1ICsxMTM0NCwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAgICAgbXVsX2xvbmcoKmRlc3RyZWcpOyAgICAgIC8qISEhICAqLworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgICAgIG11bF9sb25nKCpkZXN0cmVnKTsgICAgIC8qISEhICAqLworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJNVUxcdCIpOworICAgICAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICAgICBtdWxfd29yZCgqZGVzdHJlZyk7ICAgICAgLyohISEgICovCisrICAgICAgICAgICAgICAgIG11bF93b3JkKCpkZXN0cmVnKTsgICAgIC8qISEhICAqLworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgNToKK0BAIC0xMDc1Myw3ICsxMTM2NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBpbXVsX2xvbmcoKmRlc3RyZWcpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklNVUxcdCIpOworQEAgLTEwNzcyLDcgKzExMzg1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRpdl9sb25nKCpkZXN0cmVnKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJESVZcdCIpOworQEAgLTEwNzkxLDcgKzExNDA1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGlkaXZfbG9uZygqZGVzdHJlZyk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSURJVlx0Iik7CitAQCAtMTA4MTIsNyArMTE0MjcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NsYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbGModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgLyogY2xlYXIgdGhlIGNhcnJ5IGZsYWcuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CitAQCAtMTA4MjcsNyArMTE0NDMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbGModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3N0Yyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICAvKiBzZXQgdGhlIGNhcnJ5IGZsYWcuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CitAQCAtMTA4NDIsNyArMTE0NTksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdGModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY2xpKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NsaSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICAvKiBjbGVhciBpbnRlcnJ1cHRzLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworQEAgLTEwODU3LDcgKzExNDc1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY2xpKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZmIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0aSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdGkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgLyogZW5hYmxlICBpbnRlcnJ1cHRzLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworQEAgLTEwODcyLDcgKzExNDkxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3RpKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZmMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NsZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbGQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgLyogY2xlYXIgaW50ZXJydXB0cy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC0xMDg4Nyw3ICsxMTUwNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NsZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGZkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zdGQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3RkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIC8qIGNsZWFyIGludGVycnVwdHMuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CitAQCAtMTA5MDIsNyArMTE1MjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdGQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkVfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGNGRV9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJoLCBybDsKKyAgICAgdTggZGVzdHZhbDsKK0BAIC0xMDk0NCwxMyArMTE1NjYsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkVfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIGluYyB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogaW5jIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gaW5jX2J5dGUoZGVzdHZhbCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAxOiAgICAgICAgIC8qIGRlYyB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgLyogZGVjIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZGVjX2J5dGUoZGVzdHZhbCk7CitAQCAtMTEwMTksMTIgKzExNjQxLDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZFX2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJoLCBybDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKKy0JdTE2ICpkZXN0cmVnOworLQl1MTYgZGVzdHZhbCxkZXN0dmFsMjsKKysgICAgdTE2ICpkZXN0cmVnOworKyAgICB1MTYgZGVzdHZhbCwgZGVzdHZhbDI7CisgCisgICAgIC8qIFlldCBhbm90aGVyIHNwZWNpYWwgY2FzZSBpbnN0cnVjdGlvbi4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC0xMTA0MCwxNCArMTE2NjMsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RFdPUkQgUFRSICIpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdFdPUkQgUFRSICIpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHREV09SRCBQVFIgIik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0V09SRCBQVFIgIik7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworQEAgLTExMDc4LDcgKzExNzAzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIGluYyB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogaW5jIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKyAKK0BAIC0xMTA4Niw3ICsxMTcxMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gaW5jX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CitAQCAtMTEwOTUsNyArMTE3MjEsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMTogICAgICAgICAvKiBkZWMgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgIC8qIGRlYyB3b3JkIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisgCitAQCAtMTExMDMsNyArMTE3MjksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGRlY19sb25nKGRlc3R2YWwpOworICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworQEAgLTExMTEyLDEzICsxMTczOSwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMjogICAgICAgICAvKiBjYWxsIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAvKiBjYWxsIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDM6ICAgICAgICAgLyogY2FsbCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAvKiBjYWxsIGZhciBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBkZXN0dmFsMiA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0ICsgMik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKK0BAIC0xMTEyNywyNiArMTE3NTQsMjcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA0OiAgICAgICAgIC8qIGptcCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgLyogam1wIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNTogICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNTogICAgICAgICAgICAgICAgLyogam1wIGZhciBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBkZXN0dmFsMiA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0ICsgMik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBNLng4Ni5SX0NTID0gZGVzdHZhbDI7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDY6ICAgICAgICAgLyogIHB1c2ggd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDY6ICAgICAgICAgICAgICAgIC8qICBwdXNoIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgcHVzaF9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKK0BAIC0xMTE2OCw3ICsxMTc5Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gaW5jX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CitAQCAtMTExODUsNyArMTE4MTQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGRlY19sb25nKGRlc3R2YWwpOworICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworQEAgLTExMTk0LDEzICsxMTgyNCwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMjogICAgICAgICAvKiBjYWxsIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAvKiBjYWxsIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDM6ICAgICAgICAgLyogY2FsbCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAvKiBjYWxsIGZhciBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBkZXN0dmFsMiA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0ICsgMik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKK0BAIC0xMTIwOSwyNiArMTE4MzksMjcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA0OiAgICAgICAgIC8qIGptcCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgLyogam1wIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNTogICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNTogICAgICAgICAgICAgICAgLyogam1wIGZhciBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBkZXN0dmFsMiA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0ICsgMik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBNLng4Ni5SX0NTID0gZGVzdHZhbDI7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDY6ICAgICAgICAgLyogIHB1c2ggd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDY6ICAgICAgICAgICAgICAgIC8qICBwdXNoIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgcHVzaF9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKK0BAIC0xMTI1MCw3ICsxMTg4MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gaW5jX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CitAQCAtMTEyNjcsNyArMTE4OTksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGRlY19sb25nKGRlc3R2YWwpOworICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworQEAgLTExMjc2LDEzICsxMTkwOSwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMjogICAgICAgICAvKiBjYWxsIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAvKiBjYWxsIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDM6ICAgICAgICAgLyogY2FsbCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAvKiBjYWxsIGZhciBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBkZXN0dmFsMiA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0ICsgMik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKK0BAIC0xMTI5MSwyNiArMTE5MjQsMjcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA0OiAgICAgICAgIC8qIGptcCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgLyogam1wIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNTogICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNTogICAgICAgICAgICAgICAgLyogam1wIGZhciBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBkZXN0dmFsMiA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0ICsgMik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBNLng4Ni5SX0NTID0gZGVzdHZhbDI7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDY6ICAgICAgICAgLyogIHB1c2ggd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDY6ICAgICAgICAgICAgICAgIC8qICBwdXNoIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgcHVzaF9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKK0BAIC0xMTMzMCw3ICsxMTk2NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IGluY19sb25nKCpkZXN0cmVnKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworQEAgLTExMzQ3LDcgKzExOTgyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gZGVjX2xvbmcoKmRlc3RyZWcpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CitAQCAtMTEzNTYsMjYgKzExOTkyLDI2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IGRlY193b3JkKCpkZXN0cmVnKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDI6ICAgICAgICAgLyogY2FsbCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgLyogY2FsbCB3b3JkIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9ICpkZXN0cmVnOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAzOiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJPUEVSQVRJT04gVU5ERUZJTkVEIDBYRkYgXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIEhBTFRfU1lTKCk7CisgICAgICAgICAgICAgYnJlYWs7CisgCistICAgICAgICBjYXNlIDQ6ICAgICAgICAgLyogam1wICAuLi4gKi8KKysgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgLyogam1wICAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gKHUxNikgKCpkZXN0cmVnKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNTogICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNTogICAgICAgICAgICAgICAgLyogam1wIGZhciBwdHIgLi4uICovCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiT1BFUkFUSU9OIFVOREVGSU5FRCAwWEZGIFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBIQUxUX1NZUygpOworQEAgLTExMzg4LDcgKzEyMDI0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIHB1c2hfbG9uZygqZGVzdHJlZyk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC0xMTQwNyw4ICsxMjA0NCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBTaW5nbGUgYnl0ZSBvcGVyYXRpb24gY29kZSB0YWJsZToKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorLXsKKyt2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pICh1OCkgPSB7CisgLyogIDB4MDAgKi8geDg2ZW11T3BfYWRkX2J5dGVfUk1fUiwKKyAvKiAgMHgwMSAqLyB4ODZlbXVPcF9hZGRfd29yZF9STV9SLAorIC8qICAweDAyICovIHg4NmVtdU9wX2FkZF9ieXRlX1JfUk0sCitAQCAtMTE0MTcsNyArMTIwNTMsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4MDUgKi8geDg2ZW11T3BfYWRkX3dvcmRfQVhfSU1NLAorIC8qICAweDA2ICovIHg4NmVtdU9wX3B1c2hfRVMsCisgLyogIDB4MDcgKi8geDg2ZW11T3BfcG9wX0VTLAorLQorIC8qICAweDA4ICovIHg4NmVtdU9wX29yX2J5dGVfUk1fUiwKKyAvKiAgMHgwOSAqLyB4ODZlbXVPcF9vcl93b3JkX1JNX1IsCisgLyogIDB4MGEgKi8geDg2ZW11T3Bfb3JfYnl0ZV9SX1JNLAorQEAgLTExNDI2LDcgKzEyMDYxLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDBkICovIHg4NmVtdU9wX29yX3dvcmRfQVhfSU1NLAorIC8qICAweDBlICovIHg4NmVtdU9wX3B1c2hfQ1MsCisgLyogIDB4MGYgKi8geDg2ZW11T3BfdHdvX2J5dGUsCistCisgLyogIDB4MTAgKi8geDg2ZW11T3BfYWRjX2J5dGVfUk1fUiwKKyAvKiAgMHgxMSAqLyB4ODZlbXVPcF9hZGNfd29yZF9STV9SLAorIC8qICAweDEyICovIHg4NmVtdU9wX2FkY19ieXRlX1JfUk0sCitAQCAtMTE0MzUsNyArMTIwNjksNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4MTUgKi8geDg2ZW11T3BfYWRjX3dvcmRfQVhfSU1NLAorIC8qICAweDE2ICovIHg4NmVtdU9wX3B1c2hfU1MsCisgLyogIDB4MTcgKi8geDg2ZW11T3BfcG9wX1NTLAorLQorIC8qICAweDE4ICovIHg4NmVtdU9wX3NiYl9ieXRlX1JNX1IsCisgLyogIDB4MTkgKi8geDg2ZW11T3Bfc2JiX3dvcmRfUk1fUiwKKyAvKiAgMHgxYSAqLyB4ODZlbXVPcF9zYmJfYnl0ZV9SX1JNLAorQEAgLTExNDQ0LDcgKzEyMDc3LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDFkICovIHg4NmVtdU9wX3NiYl93b3JkX0FYX0lNTSwKKyAvKiAgMHgxZSAqLyB4ODZlbXVPcF9wdXNoX0RTLAorIC8qICAweDFmICovIHg4NmVtdU9wX3BvcF9EUywKKy0KKyAvKiAgMHgyMCAqLyB4ODZlbXVPcF9hbmRfYnl0ZV9STV9SLAorIC8qICAweDIxICovIHg4NmVtdU9wX2FuZF93b3JkX1JNX1IsCisgLyogIDB4MjIgKi8geDg2ZW11T3BfYW5kX2J5dGVfUl9STSwKK0BAIC0xMTQ1Myw3ICsxMjA4NSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHgyNSAqLyB4ODZlbXVPcF9hbmRfd29yZF9BWF9JTU0sCisgLyogIDB4MjYgKi8geDg2ZW11T3Bfc2Vnb3ZyX0VTLAorIC8qICAweDI3ICovIHg4NmVtdU9wX2RhYSwKKy0KKyAvKiAgMHgyOCAqLyB4ODZlbXVPcF9zdWJfYnl0ZV9STV9SLAorIC8qICAweDI5ICovIHg4NmVtdU9wX3N1Yl93b3JkX1JNX1IsCisgLyogIDB4MmEgKi8geDg2ZW11T3Bfc3ViX2J5dGVfUl9STSwKK0BAIC0xMTQ2Miw3ICsxMjA5Myw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHgyZCAqLyB4ODZlbXVPcF9zdWJfd29yZF9BWF9JTU0sCisgLyogIDB4MmUgKi8geDg2ZW11T3Bfc2Vnb3ZyX0NTLAorIC8qICAweDJmICovIHg4NmVtdU9wX2RhcywKKy0KKyAvKiAgMHgzMCAqLyB4ODZlbXVPcF94b3JfYnl0ZV9STV9SLAorIC8qICAweDMxICovIHg4NmVtdU9wX3hvcl93b3JkX1JNX1IsCisgLyogIDB4MzIgKi8geDg2ZW11T3BfeG9yX2J5dGVfUl9STSwKK0BAIC0xMTQ3MSw3ICsxMjEwMSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHgzNSAqLyB4ODZlbXVPcF94b3Jfd29yZF9BWF9JTU0sCisgLyogIDB4MzYgKi8geDg2ZW11T3Bfc2Vnb3ZyX1NTLAorIC8qICAweDM3ICovIHg4NmVtdU9wX2FhYSwKKy0KKyAvKiAgMHgzOCAqLyB4ODZlbXVPcF9jbXBfYnl0ZV9STV9SLAorIC8qICAweDM5ICovIHg4NmVtdU9wX2NtcF93b3JkX1JNX1IsCisgLyogIDB4M2EgKi8geDg2ZW11T3BfY21wX2J5dGVfUl9STSwKK0BAIC0xMTQ4MCw3ICsxMjEwOSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHgzZCAqLyB4ODZlbXVPcF9jbXBfd29yZF9BWF9JTU0sCisgLyogIDB4M2UgKi8geDg2ZW11T3Bfc2Vnb3ZyX0RTLAorIC8qICAweDNmICovIHg4NmVtdU9wX2FhcywKKy0KKyAvKiAgMHg0MCAqLyB4ODZlbXVPcF9pbmNfQVgsCisgLyogIDB4NDEgKi8geDg2ZW11T3BfaW5jX0NYLAorIC8qICAweDQyICovIHg4NmVtdU9wX2luY19EWCwKK0BAIC0xMTQ4OSw3ICsxMjExNyw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg0NSAqLyB4ODZlbXVPcF9pbmNfQlAsCisgLyogIDB4NDYgKi8geDg2ZW11T3BfaW5jX1NJLAorIC8qICAweDQ3ICovIHg4NmVtdU9wX2luY19ESSwKKy0KKyAvKiAgMHg0OCAqLyB4ODZlbXVPcF9kZWNfQVgsCisgLyogIDB4NDkgKi8geDg2ZW11T3BfZGVjX0NYLAorIC8qICAweDRhICovIHg4NmVtdU9wX2RlY19EWCwKK0BAIC0xMTQ5OCw3ICsxMjEyNSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg0ZCAqLyB4ODZlbXVPcF9kZWNfQlAsCisgLyogIDB4NGUgKi8geDg2ZW11T3BfZGVjX1NJLAorIC8qICAweDRmICovIHg4NmVtdU9wX2RlY19ESSwKKy0KKyAvKiAgMHg1MCAqLyB4ODZlbXVPcF9wdXNoX0FYLAorIC8qICAweDUxICovIHg4NmVtdU9wX3B1c2hfQ1gsCisgLyogIDB4NTIgKi8geDg2ZW11T3BfcHVzaF9EWCwKK0BAIC0xMTUwNyw3ICsxMjEzMyw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg1NSAqLyB4ODZlbXVPcF9wdXNoX0JQLAorIC8qICAweDU2ICovIHg4NmVtdU9wX3B1c2hfU0ksCisgLyogIDB4NTcgKi8geDg2ZW11T3BfcHVzaF9ESSwKKy0KKyAvKiAgMHg1OCAqLyB4ODZlbXVPcF9wb3BfQVgsCisgLyogIDB4NTkgKi8geDg2ZW11T3BfcG9wX0NYLAorIC8qICAweDVhICovIHg4NmVtdU9wX3BvcF9EWCwKK0BAIC0xMTUxNiwxNiArMTIxNDEsMTYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDVkICovIHg4NmVtdU9wX3BvcF9CUCwKKyAvKiAgMHg1ZSAqLyB4ODZlbXVPcF9wb3BfU0ksCisgLyogIDB4NWYgKi8geDg2ZW11T3BfcG9wX0RJLAorLQorIC8qICAweDYwICovIHg4NmVtdU9wX3B1c2hfYWxsLAorIC8qICAweDYxICovIHg4NmVtdU9wX3BvcF9hbGwsCistLyogIDB4NjIgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwgICAvKiBib3VuZCAqLworLS8qICAweDYzICovIHg4NmVtdU9wX2lsbGVnYWxfb3AsICAgLyogYXJwbCAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDYyICovIHg4NmVtdU9wX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYm91bmQgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHg2MyAqLyB4ODZlbXVPcF9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFycGwgKi8KKyAvKiAgMHg2NCAqLyB4ODZlbXVPcF9zZWdvdnJfRlMsCisgLyogIDB4NjUgKi8geDg2ZW11T3Bfc2Vnb3ZyX0dTLAorIC8qICAweDY2ICovIHg4NmVtdU9wX3ByZWZpeF9kYXRhLAorIC8qICAweDY3ICovIHg4NmVtdU9wX3ByZWZpeF9hZGRyLAorLQorIC8qICAweDY4ICovIHg4NmVtdU9wX3B1c2hfd29yZF9JTU0sCisgLyogIDB4NjkgKi8geDg2ZW11T3BfaW11bF93b3JkX0lNTSwKKyAvKiAgMHg2YSAqLyB4ODZlbXVPcF9wdXNoX2J5dGVfSU1NLAorQEAgLTExNTM0LDcgKzEyMTU5LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDZkICovIHg4NmVtdU9wX2luc193b3JkLAorIC8qICAweDZlICovIHg4NmVtdU9wX291dHNfYnl0ZSwKKyAvKiAgMHg2ZiAqLyB4ODZlbXVPcF9vdXRzX3dvcmQsCistCisgLyogIDB4NzAgKi8geDg2ZW11T3BfanVtcF9uZWFyX08sCisgLyogIDB4NzEgKi8geDg2ZW11T3BfanVtcF9uZWFyX05PLAorIC8qICAweDcyICovIHg4NmVtdU9wX2p1bXBfbmVhcl9CLAorQEAgLTExNTQzLDcgKzEyMTY3LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDc1ICovIHg4NmVtdU9wX2p1bXBfbmVhcl9OWiwKKyAvKiAgMHg3NiAqLyB4ODZlbXVPcF9qdW1wX25lYXJfQkUsCisgLyogIDB4NzcgKi8geDg2ZW11T3BfanVtcF9uZWFyX05CRSwKKy0KKyAvKiAgMHg3OCAqLyB4ODZlbXVPcF9qdW1wX25lYXJfUywKKyAvKiAgMHg3OSAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTlMsCisgLyogIDB4N2EgKi8geDg2ZW11T3BfanVtcF9uZWFyX1AsCitAQCAtMTE1NTIsNyArMTIxNzUsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4N2QgKi8geDg2ZW11T3BfanVtcF9uZWFyX05MLAorIC8qICAweDdlICovIHg4NmVtdU9wX2p1bXBfbmVhcl9MRSwKKyAvKiAgMHg3ZiAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTkxFLAorLQorIC8qICAweDgwICovIHg4NmVtdU9wX29wYzgwX2J5dGVfUk1fSU1NLAorIC8qICAweDgxICovIHg4NmVtdU9wX29wYzgxX3dvcmRfUk1fSU1NLAorIC8qICAweDgyICovIHg4NmVtdU9wX29wYzgyX2J5dGVfUk1fSU1NLAorQEAgLTExNTYxLDcgKzEyMTgzLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDg1ICovIHg4NmVtdU9wX3Rlc3Rfd29yZF9STV9SLAorIC8qICAweDg2ICovIHg4NmVtdU9wX3hjaGdfYnl0ZV9STV9SLAorIC8qICAweDg3ICovIHg4NmVtdU9wX3hjaGdfd29yZF9STV9SLAorLQorIC8qICAweDg4ICovIHg4NmVtdU9wX21vdl9ieXRlX1JNX1IsCisgLyogIDB4ODkgKi8geDg2ZW11T3BfbW92X3dvcmRfUk1fUiwKKyAvKiAgMHg4YSAqLyB4ODZlbXVPcF9tb3ZfYnl0ZV9SX1JNLAorQEAgLTExNTcwLDcgKzEyMTkxLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDhkICovIHg4NmVtdU9wX2xlYV93b3JkX1JfTSwKKyAvKiAgMHg4ZSAqLyB4ODZlbXVPcF9tb3Zfd29yZF9TUl9STSwKKyAvKiAgMHg4ZiAqLyB4ODZlbXVPcF9wb3BfUk0sCistCisgLyogIDB4OTAgKi8geDg2ZW11T3Bfbm9wLAorIC8qICAweDkxICovIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9DWCwKKyAvKiAgMHg5MiAqLyB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfRFgsCitAQCAtMTE1NzksNyArMTIxOTksNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4OTUgKi8geDg2ZW11T3BfeGNoZ193b3JkX0FYX0JQLAorIC8qICAweDk2ICovIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9TSSwKKyAvKiAgMHg5NyAqLyB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfREksCistCisgLyogIDB4OTggKi8geDg2ZW11T3BfY2J3LAorIC8qICAweDk5ICovIHg4NmVtdU9wX2N3ZCwKKyAvKiAgMHg5YSAqLyB4ODZlbXVPcF9jYWxsX2Zhcl9JTU0sCitAQCAtMTE1ODgsNyArMTIyMDcsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4OWQgKi8geDg2ZW11T3BfcG9wZl93b3JkLAorIC8qICAweDllICovIHg4NmVtdU9wX3NhaGYsCisgLyogIDB4OWYgKi8geDg2ZW11T3BfbGFoZiwKKy0KKyAvKiAgMHhhMCAqLyB4ODZlbXVPcF9tb3ZfQUxfTV9JTU0sCisgLyogIDB4YTEgKi8geDg2ZW11T3BfbW92X0FYX01fSU1NLAorIC8qICAweGEyICovIHg4NmVtdU9wX21vdl9NX0FMX0lNTSwKK0BAIC0xMTYwNSw4ICsxMjIyMyw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHhhZCAqLyB4ODZlbXVPcF9sb2RzX3dvcmQsCisgLyogIDB4YWMgKi8geDg2ZW11T3Bfc2Nhc19ieXRlLAorIC8qICAweGFkICovIHg4NmVtdU9wX3NjYXNfd29yZCwKKy0KKy0KKyAvKiAgMHhiMCAqLyB4ODZlbXVPcF9tb3ZfYnl0ZV9BTF9JTU0sCisgLyogIDB4YjEgKi8geDg2ZW11T3BfbW92X2J5dGVfQ0xfSU1NLAorIC8qICAweGIyICovIHg4NmVtdU9wX21vdl9ieXRlX0RMX0lNTSwKK0BAIC0xMTYxNSw3ICsxMjIzMSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHhiNSAqLyB4ODZlbXVPcF9tb3ZfYnl0ZV9DSF9JTU0sCisgLyogIDB4YjYgKi8geDg2ZW11T3BfbW92X2J5dGVfREhfSU1NLAorIC8qICAweGI3ICovIHg4NmVtdU9wX21vdl9ieXRlX0JIX0lNTSwKKy0KKyAvKiAgMHhiOCAqLyB4ODZlbXVPcF9tb3Zfd29yZF9BWF9JTU0sCisgLyogIDB4YjkgKi8geDg2ZW11T3BfbW92X3dvcmRfQ1hfSU1NLAorIC8qICAweGJhICovIHg4NmVtdU9wX21vdl93b3JkX0RYX0lNTSwKK0BAIC0xMTYyNCw3ICsxMjIzOSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHhiZCAqLyB4ODZlbXVPcF9tb3Zfd29yZF9CUF9JTU0sCisgLyogIDB4YmUgKi8geDg2ZW11T3BfbW92X3dvcmRfU0lfSU1NLAorIC8qICAweGJmICovIHg4NmVtdU9wX21vdl93b3JkX0RJX0lNTSwKKy0KKyAvKiAgMHhjMCAqLyB4ODZlbXVPcF9vcGNDMF9ieXRlX1JNX01FTSwKKyAvKiAgMHhjMSAqLyB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSwKKyAvKiAgMHhjMiAqLyB4ODZlbXVPcF9yZXRfbmVhcl9JTU0sCitAQCAtMTE2NDEsMTQgKzEyMjU1LDE0IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHhjZCAqLyB4ODZlbXVPcF9pbnRfSU1NLAorIC8qICAweGNlICovIHg4NmVtdU9wX2ludG8sCisgLyogIDB4Y2YgKi8geDg2ZW11T3BfaXJldCwKKy0KKyAvKiAgMHhkMCAqLyB4ODZlbXVPcF9vcGNEMF9ieXRlX1JNXzEsCisgLyogIDB4ZDEgKi8geDg2ZW11T3Bfb3BjRDFfd29yZF9STV8xLAorIC8qICAweGQyICovIHg4NmVtdU9wX29wY0QyX2J5dGVfUk1fQ0wsCisgLyogIDB4ZDMgKi8geDg2ZW11T3Bfb3BjRDNfd29yZF9STV9DTCwKKyAvKiAgMHhkNCAqLyB4ODZlbXVPcF9hYW0sCisgLyogIDB4ZDUgKi8geDg2ZW11T3BfYWFkLAorLS8qICAweGQ2ICovIHg4NmVtdU9wX2lsbGVnYWxfb3AsICAgLyogVW5kb2N1bWVudGVkIFNFVEFMQyBpbnN0cnVjdGlvbiAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweGQ2ICovIHg4NmVtdU9wX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5kb2N1bWVudGVkIFNFVEFMQyBpbnN0cnVjdGlvbiAqLworIC8qICAweGQ3ICovIHg4NmVtdU9wX3hsYXQsCisgLyogIDB4ZDggKi8geDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOCwKKyAvKiAgMHhkOSAqLyB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q5LAorQEAgLTExNjU4LDcgKzEyMjcyLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGRkICovIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGQsCisgLyogIDB4ZGUgKi8geDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZSwKKyAvKiAgMHhkZiAqLyB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RmLAorLQorIC8qICAweGUwICovIHg4NmVtdU9wX2xvb3BuZSwKKyAvKiAgMHhlMSAqLyB4ODZlbXVPcF9sb29wZSwKKyAvKiAgMHhlMiAqLyB4ODZlbXVPcF9sb29wLAorQEAgLTExNjY3LDcgKzEyMjgwLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGU1ICovIHg4NmVtdU9wX2luX3dvcmRfQVhfSU1NLAorIC8qICAweGU2ICovIHg4NmVtdU9wX291dF9ieXRlX0lNTV9BTCwKKyAvKiAgMHhlNyAqLyB4ODZlbXVPcF9vdXRfd29yZF9JTU1fQVgsCistCisgLyogIDB4ZTggKi8geDg2ZW11T3BfY2FsbF9uZWFyX0lNTSwKKyAvKiAgMHhlOSAqLyB4ODZlbXVPcF9qdW1wX25lYXJfSU1NLAorIC8qICAweGVhICovIHg4NmVtdU9wX2p1bXBfZmFyX0lNTSwKK0BAIC0xMTY3Niw3ICsxMjI4OCw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHhlZCAqLyB4ODZlbXVPcF9pbl93b3JkX0FYX0RYLAorIC8qICAweGVlICovIHg4NmVtdU9wX291dF9ieXRlX0RYX0FMLAorIC8qICAweGVmICovIHg4NmVtdU9wX291dF93b3JkX0RYX0FYLAorLQorIC8qICAweGYwICovIHg4NmVtdU9wX2xvY2ssCisgLyogIDB4ZjEgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwKKyAvKiAgMHhmMiAqLyB4ODZlbXVPcF9yZXBuZSwKK0BAIC0xMTY4NSw3ICsxMjI5Niw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHhmNSAqLyB4ODZlbXVPcF9jbWMsCisgLyogIDB4ZjYgKi8geDg2ZW11T3Bfb3BjRjZfYnl0ZV9STSwKKyAvKiAgMHhmNyAqLyB4ODZlbXVPcF9vcGNGN193b3JkX1JNLAorLQorIC8qICAweGY4ICovIHg4NmVtdU9wX2NsYywKKyAvKiAgMHhmOSAqLyB4ODZlbXVPcF9zdGMsCisgLyogIDB4ZmEgKi8geDg2ZW11T3BfY2xpLAorZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L29wczIuYyBiL2xpYnMveDg2ZW11L29wczIuYworaW5kZXggMDZiN2Y1Ni4uNWVkMmJmNiAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L29wczIuYworKysrIGIvbGlicy94ODZlbXUvb3BzMi5jCitAQCAtNTUsMTYgKzU1LDE0IEBAIG9wMSAtIEluc3RydWN0aW9uIG9wIGNvZGUKKyBSRU1BUktTOgorIEhhbmRsZXMgaWxsZWdhbCBvcGNvZGVzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2lsbGVnYWxfb3AoCistCXU4IG9wMikKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9pbGxlZ2FsX29wKHU4IG9wMikKKyB7CistCWludCBtb2QsIHJsLCByaDsKKy0JU1RBUlRfT0ZfSU5TVFIoKTsKKy0JRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKy0JREVDT0RFX1BSSU5URigiSUxMRUdBTCBFWFRFTkRFRCBYODYgT1BDT0RFXG4iKTsKKy0JVFJBQ0VfUkVHUygpOworLQlwcmludGsoIiUwNHg6JTA0eDogJTAyWCAvJWQgSUxMRUdBTCBFWFRFTkRFRCBYODYgT1BDT0RFISAobW9kPSVkIHJsPSVkKVxuIiwKKy0JCU0ueDg2LlJfQ1MsIE0ueDg2LlJfSVAtMixvcDIsIHJoLCBtb2QsIHJsKTsKKysgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKysgICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBFWFRFTkRFRCBYODYgT1BDT0RFXG4iKTsKKysgICAgVFJBQ0VfUkVHUygpOworKyAgICBwcmludGsoIiUwNHg6JTA0eDogJTAyWCBJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREUhXG4iLAorKyAgICAgICAgICAgTS54ODYuUl9DUywgTS54ODYuUl9JUCAtIDIsIG9wMik7CisgICAgIEhBTFRfU1lTKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC03Myw1NSArNzEsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2lsbGVnYWxfb3AoCisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorLUhhbmRsZXMgb3Bjb2RlIDB4MGYsMHgwMQorLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2dyb3VwX2codTggWDg2RU1VX1VOVVNFRChvcDIpKQorLXsKKy0JaW50IG1vZCwgcmwsIHJoOworLQl1MTYgKmRlc3RyZWc7CistCXVpbnQgZGVzdG9mZnNldDsKKy0KKy0JU1RBUlRfT0ZfSU5TVFIoKTsKKy0JRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKy0Jc3dpdGNoIChyaCkgeworLQkJY2FzZSA0OiAvLyBTTVNXIChTdG9yZSBNYWNoaW5lIFN0YXR1cyBXb3JkKQorLQkJCS8vIERlY29kZSB0aGUgbW9kIGJ5dGUgdG8gZmluZCB0aGUgYWRkcmVzc2luZworLQkJCS8vIEFsd2F5cyByZXR1cm5zIDB4MTAgKGluaXRpYWwgdmFsdWUgYXMgcGVyIGludGVsIG1hbnVhbCB2b2x1bWUgMywgZmlndXJlIDgtMQorLQkJCXN3aXRjaCAobW9kKSB7CistCQkJCWNhc2UgMDoKKy0JCQkJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0JCQkJCXN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCAweDEwKTsKKy0JCQkJCWJyZWFrOworLQkJCQljYXNlIDE6CistCQkJCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CistCQkJCQlzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgMHgxMCk7CistCQkJCQlicmVhazsKKy0JCQkJY2FzZSAyOgorLQkJCQkJZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworLQkJCQkJc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIDB4MTApOworLQkJCQkJYnJlYWs7CistCQkJCWNhc2UgMzoKKy0JCQkJCWRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CistCQkJCQkqZGVzdHJlZyA9IDB4MTA7CistCQkJCQlicmVhazsKKy0JCQl9CistCQkJYnJlYWs7CistCQlkZWZhdWx0OgorLQkJCURFQ09ERV9QUklOVEYoIklMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSBJTiAwRiAwMVxuIik7CistCQkJVFJBQ0VfUkVHUygpOworLQkJCXByaW50aygiJTA0eDolMDR4OiAwRiAlMDJYIC8lZCBJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREUhIChtb2Q9JWQgcmw9JWQpXG4iLAorLQkJCQlNLng4Ni5SX0NTLCBNLng4Ni5SX0lQLTIsb3AyLCByaCwgbW9kLCBybCk7CistCQkJSEFMVF9TWVMoKTsKKy0JCQlicmVhazsKKy0JfQorLQlFTkRfT0ZfSU5TVFIoKTsKKy19CistCistLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy1SRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHgzMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3JkdHNjKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9yZHRzYyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICNpZmRlZiBfX0hBU19MT05HX0xPTkdfXworICAgICBzdGF0aWMgdTY0IGNvdW50ZXIgPSAwOworQEAgLTE1NSw5MCArMTA4LDkxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9yZHRzYyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4ODAtMHg4RgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2xvbmdfanVtcCh1OCBvcDIpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfbG9uZ19qdW1wKHU4IG9wMikKKyB7CisgICAgIHMzMiB0YXJnZXQ7CistICAgIGNoYXIgKm5hbWUgPSAwOworKyAgICBjb25zdCBjaGFyICpuYW1lID0gTlVMTDsKKyAgICAgaW50IGNvbmQgPSAwOworIAorICAgICAvKiBjb25kaXRpb25hbCBqdW1wIHRvIHdvcmQgb2Zmc2V0LiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBzd2l0Y2ggKG9wMikgeworLSAgICAgIGNhc2UgMHg4MDoKKysgICAgY2FzZSAweDgwOgorICAgICAgICAgbmFtZSA9ICJKT1x0IjsKKy0gICAgICAgIGNvbmQgPSAgQUNDRVNTX0ZMQUcoRl9PRik7CisrICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9PRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4ODE6CisrICAgIGNhc2UgMHg4MToKKyAgICAgICAgIG5hbWUgPSAiSk5PXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX09GKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4MjoKKysgICAgY2FzZSAweDgyOgorICAgICAgICAgbmFtZSA9ICJKQlx0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX0NGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4MzoKKysgICAgY2FzZSAweDgzOgorICAgICAgICAgbmFtZSA9ICJKTkJcdCI7CisgICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfQ0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDg0OgorKyAgICBjYXNlIDB4ODQ6CisgICAgICAgICBuYW1lID0gIkpaXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfWkYpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDg1OgorKyAgICBjYXNlIDB4ODU6CisgICAgICAgICBuYW1lID0gIkpOWlx0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9aRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4ODY6CisrICAgIGNhc2UgMHg4NjoKKyAgICAgICAgIG5hbWUgPSAiSkJFXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfQ0YpIHx8IEFDQ0VTU19GTEFHKEZfWkYpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDg3OgorKyAgICBjYXNlIDB4ODc6CisgICAgICAgICBuYW1lID0gIkpOQkVcdCI7CisgICAgICAgICBjb25kID0gIShBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKSk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4ODg6CisrICAgIGNhc2UgMHg4ODoKKyAgICAgICAgIG5hbWUgPSAiSlNcdCI7CisgICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9TRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4ODk6CisrICAgIGNhc2UgMHg4OToKKyAgICAgICAgIG5hbWUgPSAiSk5TXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX1NGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4YToKKysgICAgY2FzZSAweDhhOgorICAgICAgICAgbmFtZSA9ICJKUFx0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX1BGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4YjoKKysgICAgY2FzZSAweDhiOgorICAgICAgICAgbmFtZSA9ICJKTlBcdCI7CisgICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfUEYpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDhjOgorKyAgICBjYXNlIDB4OGM6CisgICAgICAgICBuYW1lID0gIkpMXHQiOworICAgICAgICAgY29uZCA9IHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4ZDoKKysgICAgY2FzZSAweDhkOgorICAgICAgICAgbmFtZSA9ICJKTkxcdCI7CisgICAgICAgICBjb25kID0gISh4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSkpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDhlOgorKyAgICBjYXNlIDB4OGU6CisgICAgICAgICBuYW1lID0gIkpMRVx0IjsKKyAgICAgICAgIGNvbmQgPSAoeG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpIHx8CisgICAgICAgICAgICAgICAgIEFDQ0VTU19GTEFHKEZfWkYpKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4ZjoKKysgICAgY2FzZSAweDhmOgorICAgICAgICAgbmFtZSA9ICJKTkxFXHQiOworICAgICAgICAgY29uZCA9ICEoeG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpIHx8CisgICAgICAgICAgICAgICAgICBBQ0NFU1NfRkxBRyhGX1pGKSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICAgICBERUNPREVfUFJJTlRGKG5hbWUpOworLSAgICAodm9pZCluYW1lOworKyAgICAodm9pZCkgbmFtZTsKKyAgICAgdGFyZ2V0ID0gKHMxNikgZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgdGFyZ2V0ICs9IChzMTYpIE0ueDg2LlJfSVA7CisgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoY29uZCkKKy0gICAgICAgIE0ueDg2LlJfSVAgPSAodTE2KXRhcmdldDsKKysgICAgICAgIE0ueDg2LlJfSVAgPSAodTE2KSB0YXJnZXQ7CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTI0Nyw4NSArMjAxLDg2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sb25nX2p1bXAodTggb3AyKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweDkwLTB4OUYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zZXRfYnl0ZSh1OCBvcDIpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfc2V0X2J5dGUodTggb3AyKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CistICAgIHU4ICAqZGVzdHJlZzsKKy0gICAgY2hhciAqbmFtZSA9IDA7CisrICAgIHU4ICpkZXN0cmVnOworKyAgICBjb25zdCBjaGFyICpuYW1lID0gTlVMTDsKKyAgICAgaW50IGNvbmQgPSAwOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBzd2l0Y2ggKG9wMikgeworLSAgICAgIGNhc2UgMHg5MDoKKysgICAgY2FzZSAweDkwOgorICAgICAgICAgbmFtZSA9ICJTRVRPXHQiOworLSAgICAgICAgY29uZCA9ICBBQ0NFU1NfRkxBRyhGX09GKTsKKysgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX09GKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5MToKKysgICAgY2FzZSAweDkxOgorICAgICAgICAgbmFtZSA9ICJTRVROT1x0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9PRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OTI6CisrICAgIGNhc2UgMHg5MjoKKyAgICAgICAgIG5hbWUgPSAiU0VUQlx0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX0NGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5MzoKKysgICAgY2FzZSAweDkzOgorICAgICAgICAgbmFtZSA9ICJTRVROQlx0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9DRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OTQ6CisrICAgIGNhc2UgMHg5NDoKKyAgICAgICAgIG5hbWUgPSAiU0VUWlx0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX1pGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5NToKKysgICAgY2FzZSAweDk1OgorICAgICAgICAgbmFtZSA9ICJTRVROWlx0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9aRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OTY6CisrICAgIGNhc2UgMHg5NjoKKyAgICAgICAgIG5hbWUgPSAiU0VUQkVcdCI7CisgICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9DRikgfHwgQUNDRVNTX0ZMQUcoRl9aRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OTc6CisrICAgIGNhc2UgMHg5NzoKKyAgICAgICAgIG5hbWUgPSAiU0VUTkJFXHQiOworICAgICAgICAgY29uZCA9ICEoQUNDRVNTX0ZMQUcoRl9DRikgfHwgQUNDRVNTX0ZMQUcoRl9aRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDk4OgorKyAgICBjYXNlIDB4OTg6CisgICAgICAgICBuYW1lID0gIlNFVFNcdCI7CisgICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9TRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OTk6CisrICAgIGNhc2UgMHg5OToKKyAgICAgICAgIG5hbWUgPSAiU0VUTlNcdCI7CisgICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfU0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDlhOgorKyAgICBjYXNlIDB4OWE6CisgICAgICAgICBuYW1lID0gIlNFVFBcdCI7CisgICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9QRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OWI6CisrICAgIGNhc2UgMHg5YjoKKyAgICAgICAgIG5hbWUgPSAiU0VUTlBcdCI7CisgICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfUEYpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDljOgorKyAgICBjYXNlIDB4OWM6CisgICAgICAgICBuYW1lID0gIlNFVExcdCI7CisgICAgICAgICBjb25kID0geG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDlkOgorKyAgICBjYXNlIDB4OWQ6CisgICAgICAgICBuYW1lID0gIlNFVE5MXHQiOworICAgICAgICAgY29uZCA9IHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5ZToKKysgICAgY2FzZSAweDllOgorICAgICAgICAgbmFtZSA9ICJTRVRMRVx0IjsKKyAgICAgICAgIGNvbmQgPSAoeG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpIHx8CisgICAgICAgICAgICAgICAgIEFDQ0VTU19GTEFHKEZfWkYpKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5ZjoKKysgICAgY2FzZSAweDlmOgorICAgICAgICAgbmFtZSA9ICJTRVROTEVcdCI7CisgICAgICAgICBjb25kID0gISh4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSkgfHwKKyAgICAgICAgICAgICAgICAgIEFDQ0VTU19GTEFHKEZfWkYpKTsKKyAgICAgICAgIGJyZWFrOworICAgICB9CisgICAgIERFQ09ERV9QUklOVEYobmFtZSk7CistICAgICh2b2lkKW5hbWU7CisrICAgICh2b2lkKSBuYW1lOworICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKG1vZCkgeworICAgICBjYXNlIDA6CitAQCAtMzQzLDcgKzI5OCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zZXRfYnl0ZSh1OCBvcDIpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGNvbmQgPyAweDAxIDogMHgwMCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gY29uZCA/IDB4MDEgOiAweDAwOworQEAgLTM1Nyw3ICszMTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2V0X2J5dGUodTggb3AyKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGEwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfcHVzaF9GUyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfcHVzaF9GUyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRGU1xuIik7CitAQCAtMzcxLDcgKzMyNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9wdXNoX0ZTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3BvcF9GUyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfcG9wX0ZTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RlNcbiIpOworQEAgLTM4NSw3ICszNDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfcG9wX0ZTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOiBDUFVJRCB0YWtlcyBFQVgvRUNYIGFzIGlucHV0cywgd3JpdGVzIEVBWC9FQlgvRUNYL0VEWCBhcyBvdXRwdXQKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YTIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9jcHVpZCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfY3B1aWQodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQ1BVSURcbiIpOworQEAgLTM5OSwxMSArMzU3LDEyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9jcHVpZCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YTMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CistICAgIGludCBiaXQsZGlzcDsKKysgICAgaW50IGJpdCwgZGlzcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQlRcdCIpOworQEAgLTQxOSwxMCArMzc4LDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksRl9DRik7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSwgRl9DRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtNDMxLDkgKzM5MSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKK0BAIC00NDYsMTAgKzQwNiwxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLEZfQ0YpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTQ1OCw5ICs0MTksOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksRl9DRik7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLCBGX0NGKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CitAQCAtNDczLDEwICs0MzQsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLCBGX0NGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC00ODUsMzAgKzQ0NywzMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksRl9DRik7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLCBGX0NGKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqc3JjcmVnLCpzaGlmdHJlZzsKKysgICAgICAgICAgICB1MzIgKnNyY3JlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiAoMHgxIDw8IGJpdCksRl9DRik7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqc3JjcmVnLCpzaGlmdHJlZzsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgKDB4MSA8PCBiaXQpLCBGX0NGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqc3JjcmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgKDB4MSA8PCBiaXQpLEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC01MjAsMTEgKzQ4MywxMiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YTQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CistCXU4IHNoaWZ0OworKyAgICB1OCBzaGlmdDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiU0hMRFx0Iik7CitAQCAtNTQzLDkgKzUwNywxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTU1Nyw3ICs1MjIsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTU3NCw5ICs1MzksMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC01ODgsNyArNTU0LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKK0BAIC02MDUsOSArNTcxLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtNjE5LDEzICs1ODYsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYzNCw5ICs2MDEsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IHNobGRfbG9uZygqZGVzdHJlZywqc2hpZnRyZWcsc2hpZnQpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgICpkZXN0cmVnID0gc2hsZF9sb25nKCpkZXN0cmVnLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTY0NSw3ICs2MTMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gc2hsZF93b3JkKCpkZXN0cmVnLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX3dvcmQoKmRlc3RyZWcsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC02NTcsNyArNjI1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3NobGRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtNjc3LDkgKzY0NiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtNjg5LDcgKzY1OSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKK0BAIC03MDQsOSArNjc0LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC03MTYsNyArNjg3LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTczMSw5ICs3MDIsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTc0MywyOSArNzE1LDMwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IHNobGRfbG9uZygqZGVzdHJlZywqc2hpZnRyZWcsTS54ODYuUl9DTCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX2xvbmcoKmRlc3RyZWcsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX3dvcmQoKmRlc3RyZWcsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgICpkZXN0cmVnID0gc2hsZF93b3JkKCpkZXN0cmVnLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC03NzcsNyArNzUwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGE4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfcHVzaF9HUyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfcHVzaF9HUyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRHU1xuIik7CitAQCAtNzkxLDcgKzc2NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9wdXNoX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3BvcF9HUyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfcG9wX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0R1NcbiIpOworQEAgLTgwNSwxMSArNzgwLDEyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9wb3BfR1ModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGFiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2J0c19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CistICAgIGludCBiaXQsZGlzcDsKKysgICAgaW50IGJpdCwgZGlzcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQlRTXHQiKTsKK0BAIC04MTcsNyArNzkzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0c19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgc3dpdGNoIChtb2QpIHsKKyAgICAgY2FzZSAwOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC04MjUsMTMgKzgwMSwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworICAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCB8IG1hc2spOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTgzOSwxNiArODE2LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idHNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCB8IG1hc2spOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtODU2LDEzICs4MzMsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0c19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKyAgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC04NzAsMTYgKzg0OCwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTg4Nyw1MSArODY1LDUzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idHNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisgICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIHwgbWFzayk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCistCQkJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLQkJCWRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLQkJCXNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKy0JCX0KKy0JCWJyZWFrOworLQljYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCXUzMiAqc3JjcmVnLCpzaGlmdHJlZzsKKy0JCQl1MzIgbWFzazsKKy0KKy0JCQlzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0JCQltYXNrID0gKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLEZfQ0YpOworLQkJCSpzcmNyZWcgfD0gbWFzazsKKy0JCX0gZWxzZSB7CistCQkJdTE2ICpzcmNyZWcsKnNoaWZ0cmVnOworLQkJCXUxNiBtYXNrOworLQorLQkJCXNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweEY7CistCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLEZfQ0YpOworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyICpzcmNyZWcsICpzaGlmdHJlZzsKKysgICAgICAgICAgICB1MzIgbWFzazsKKysKKysgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICAqc3JjcmVnIHw9IG1hc2s7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKnNyY3JlZywgKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUxNiBtYXNrOworKworKyAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzaywgRl9DRik7CisgICAgICAgICAgICAgKnNyY3JlZyB8PSBtYXNrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtOTQ0LDExICs5MjQsMTIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0c19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9zaHJkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKKy0JdTggc2hpZnQ7CisrICAgIHU4IHNoaWZ0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJTSExEXHQiKTsKK0BAIC05NjcsOSArOTQ4LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtOTgxLDcgKzk2Myw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtOTk4LDkgKzk4MCwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTEwMTIsNyArOTk1LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKK0BAIC0xMDI5LDkgKzEwMTIsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC0xMDQzLDEzICsxMDI3LDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzaGlmdHJlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xMDU4LDkgKzEwNDIsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IHNocmRfbG9uZygqZGVzdHJlZywqc2hpZnRyZWcsc2hpZnQpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgICpkZXN0cmVnID0gc2hyZF9sb25nKCpkZXN0cmVnLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEwNjksNyArMTA1NCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX3dvcmQoKmRlc3RyZWcsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IHNocmRfd29yZCgqZGVzdHJlZywgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTEwODEsNyArMTA2Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTExMDEsOSArMTA4NywxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtMTExMyw3ICsxMTAwLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTExMjgsOSArMTExNSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtMTE0MCw3ICsxMTI4LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTExNTUsOSArMTE0MywxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtMTE2NywyOSArMTE1NiwzMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzaGlmdHJlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX2xvbmcoKmRlc3RyZWcsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgICpkZXN0cmVnID0gc2hyZF9sb25nKCpkZXN0cmVnLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gc2hyZF93b3JkKCpkZXN0cmVnLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IHNocmRfd29yZCgqZGVzdHJlZywgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtMTIwMSw3ICsxMTkxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGFmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfaW11bF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9pbXVsX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0xMjE0LDIzICsxMjA1LDI1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9pbXVsX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworICAgICAgICAgICAgIHUzMiBzcmN2YWw7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyIHJlc19sbywgcmVzX2hpOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqZGVzdHJlZywoczMyKXNyY3ZhbCk7CisrICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCAmcmVzX2hpLCAoczMyKSAqIGRlc3RyZWcsIChzMzIpIHNyY3ZhbCk7CisgICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKSByZXNfbG87CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAgICAgICAgICAgICB1MzIgcmVzOworQEAgLTEyNDAsMzggKzEyMzMsNDEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2ltdWxfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KSpkZXN0cmVnICogKHMxNilzcmN2YWw7CisrICAgICAgICAgICAgcmVzID0gKHMxNikgKiBkZXN0cmVnICogKHMxNikgc3JjdmFsOworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpKmRlc3RyZWcsKHMzMilzcmN2YWwpOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgKiBkZXN0cmVnLCAoczMyKSBzcmN2YWwpOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC0xMjgxLDM4ICsxMjc3LDQxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9pbXVsX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgcmVzID0gKHMxNikqZGVzdHJlZyAqIChzMTYpc3JjdmFsOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpICogZGVzdHJlZyAqIChzMTYpIHNyY3ZhbDsKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKy0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKysgICAgICAgICAgICB1MzIgcmVzX2xvLCByZXNfaGk7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sJnJlc19oaSwoczMyKSpkZXN0cmVnLChzMzIpc3JjdmFsKTsKKysgICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sICZyZXNfaGksIChzMzIpICogZGVzdHJlZywgKHMzMikgc3JjdmFsKTsKKyAgICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpIHJlc19sbzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworICAgICAgICAgICAgIHUzMiByZXM7CitAQCAtMTMyMiw1MSArMTMyMSw1NSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfaW11bF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIHJlcyA9IChzMTYpKmRlc3RyZWcgKiAoczE2KXNyY3ZhbDsKKysgICAgICAgICAgICByZXMgPSAoczE2KSAqIGRlc3RyZWcgKiAoczE2KSBzcmN2YWw7CisgICAgICAgICAgICAgaWYgKHJlcyA+IDB4RkZGRikgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KSByZXM7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKy0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisrICAgICAgICAgICAgdTMyIHJlc19sbywgcmVzX2hpOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpKmRlc3RyZWcsKHMzMikqc3JjcmVnKTsKKysgICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sICZyZXNfaGksIChzMzIpICogZGVzdHJlZywgKHMzMikgKiBzcmNyZWcpOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworICAgICAgICAgICAgIHUzMiByZXM7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworLSAgICAgICAgICAgIHJlcyA9IChzMTYpKmRlc3RyZWcgKiAoczE2KSpzcmNyZWc7CisrICAgICAgICAgICAgcmVzID0gKHMxNikgKiBkZXN0cmVnICogKHMxNikgKiBzcmNyZWc7CisgICAgICAgICAgICAgaWYgKHJlcyA+IDB4RkZGRikgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KSByZXM7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTEzNzgsOSArMTM4MSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfaW11bF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhiMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2xzc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfbHNzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CistCWludCBtb2QsIHJoLCBybDsKKysgICAgaW50IG1vZCwgcmgsIHJsOworICAgICB1MTYgKmRzdHJlZzsKKyAgICAgdWludCBzcmNvZmZzZXQ7CisgCitAQCAtMTQxNSw3ICsxNDE5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2xzc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAqZHN0cmVnID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisgICAgICAgICBNLng4Ni5SX1NTID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIDIpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgLyogVU5ERUZJTkVEISAqLworICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgfQorQEAgLTE0MjcsMTQ4ICsxNDMxLDE1NCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbHNzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhiMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0cl9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9idHJfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworLQlpbnQgbW9kLCBybCwgcmg7CistCXVpbnQgc3Jjb2Zmc2V0OworLQlpbnQgYml0LGRpc3A7CistCistCVNUQVJUX09GX0lOU1RSKCk7CistCURFQ09ERV9QUklOVEYoIkJUUlx0Iik7CistCUZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CistCXN3aXRjaCAobW9kKSB7CistCWNhc2UgMDoKKy0JCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCXUzMiBzcmN2YWwsbWFzazsKKy0JCQl1MzIgKnNoaWZ0cmVnOworLQorLQkJCXNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistCQkJZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistCQkJc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgJiB+bWFzayk7CistCQl9IGVsc2UgeworLQkJCXUxNiBzcmN2YWwsbWFzazsKKy0JCQl1MTYgKnNoaWZ0cmVnOworLQorLQkJCXNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0JCQlkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0JCQlzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgKHUxNikoc3JjdmFsICYgfm1hc2spKTsKKy0JCX0KKy0JCWJyZWFrOworLQljYXNlIDE6CistCQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQl1MzIgc3JjdmFsLG1hc2s7CistCQkJdTMyICpzaGlmdHJlZzsKKy0KKy0JCQlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLQkJCWRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLQkJCXNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsICYgfm1hc2spOworLQkJfSBlbHNlIHsKKy0JCQl1MTYgc3JjdmFsLG1hc2s7CistCQkJdTE2ICpzaGlmdHJlZzsKKy0KKy0JCQlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweEY7CistCQkJZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistCQkJc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsICh1MTYpKHNyY3ZhbCAmIH5tYXNrKSk7CistCQl9CistCQlicmVhazsKKy0JY2FzZSAyOgorLQkJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJdTMyIHNyY3ZhbCxtYXNrOworLQkJCXUzMiAqc2hpZnRyZWc7CistCistCQkJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0JCQlkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0JCQlzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCAmIH5tYXNrKTsKKy0JCX0gZWxzZSB7CistCQkJdTE2IHNyY3ZhbCxtYXNrOworLQkJCXUxNiAqc2hpZnRyZWc7CistCistCQkJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLQkJCWRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLQkJCXNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwLCAodTE2KShzcmN2YWwgJiB+bWFzaykpOworLQkJfQorLQkJYnJlYWs7CistCWNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQkJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJdTMyICpzcmNyZWcsKnNoaWZ0cmVnOworLQkJCXUzMiBtYXNrOworLQorLQkJCXNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLQkJCW1hc2sgPSAoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CistCQkJKnNyY3JlZyAmPSB+bWFzazsKKy0JCX0gZWxzZSB7CistCQkJdTE2ICpzcmNyZWcsKnNoaWZ0cmVnOworLQkJCXUxNiBtYXNrOworLQorLQkJCXNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweEY7CistCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLEZfQ0YpOworLQkJCSpzcmNyZWcgJj0gfm1hc2s7CistCQl9CistCQlicmVhazsKKy0JfQorLQlERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CistCUVORF9PRl9JTlNUUigpOworKyAgICBpbnQgbW9kLCBybCwgcmg7CisrICAgIHVpbnQgc3Jjb2Zmc2V0OworKyAgICBpbnQgYml0LCBkaXNwOworKworKyAgICBTVEFSVF9PRl9JTlNUUigpOworKyAgICBERUNPREVfUFJJTlRGKCJCVFJcdCIpOworKyAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworKyAgICBzd2l0Y2ggKG1vZCkgeworKyAgICBjYXNlIDA6CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOworKyAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgJiB+bWFzayk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworKyAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsICh1MTYpIChzcmN2YWwgJiB+bWFzaykpOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMToKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7CisrICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCAmIH5tYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisrICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCwgKHUxNikgKHNyY3ZhbCAmIH5tYXNrKSk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAyOgorKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKKysgICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsICYgfm1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKysgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwLCAodTE2KSAoc3JjdmFsICYgfm1hc2spKTsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyICpzcmNyZWcsICpzaGlmdHJlZzsKKysgICAgICAgICAgICB1MzIgbWFzazsKKysKKysgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICAqc3JjcmVnICY9IH5tYXNrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpzcmNyZWcsICpzaGlmdHJlZzsKKysgICAgICAgICAgICB1MTYgbWFzazsKKysKKysgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgICpzcmNyZWcgJj0gfm1hc2s7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgfQorKyAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisrICAgIEVORF9PRl9JTlNUUigpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGI0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbGZzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9sZnNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKy0JaW50IG1vZCwgcmgsIHJsOworKyAgICBpbnQgbW9kLCByaCwgcmw7CisgICAgIHUxNiAqZHN0cmVnOworICAgICB1aW50IHNyY29mZnNldDsKKyAKK0BAIC0xNjAzLDcgKzE2MTMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbGZzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgIE0ueDg2LlJfRlMgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICAvKiBVTkRFRklORUQhICovCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICB9CitAQCAtMTYxNSw5ICsxNjI1LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sZnNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGI1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbGdzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9sZ3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKy0JaW50IG1vZCwgcmgsIHJsOworKyAgICBpbnQgbW9kLCByaCwgcmw7CisgICAgIHUxNiAqZHN0cmVnOworICAgICB1aW50IHNyY29mZnNldDsKKyAKK0BAIC0xNjUyLDcgKzE2NjMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbGdzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgIE0ueDg2LlJfR1MgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICAvKiBVTkRFRklORUQhICovCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICB9CitAQCAtMTY2NCw3ICsxNjc1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2xnc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YjYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3Z6eF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX21vdnp4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTE2ODUsNyArMTY5Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3Z6eF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xNzEwLDcgKzE3MjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTczNSw3ICsxNzQ5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTE3NDgsMTAgKzE3NjMsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CistICAgICAgICAgICAgdTggICpzcmNyZWc7CisrICAgICAgICAgICAgdTggKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xNzU5LDkgKzE3NzQsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gKnNyY3JlZzsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CistICAgICAgICAgICAgdTggICpzcmNyZWc7CisrICAgICAgICAgICAgdTggKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xNzgwLDcgKzE3OTYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhiNworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfbW92enhfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMTgxOSw3ICsxODM2LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworQEAgLTE4MzYsNyArMTg1Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3Z6eF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGJhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2J0WF9JKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMTg0NiwyMyArMTg2NCwyMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKHJoKSB7CisgICAgIGNhc2UgNDoKKy0JREVDT0RFX1BSSU5URigiQlRcdCIpOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkJUXHQiKTsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDU6CistCURFQ09ERV9QUklOVEYoIkJUU1x0Iik7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiQlRTXHQiKTsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDY6CistCURFQ09ERV9QUklOVEYoIkJUUlx0Iik7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiQlRSXHQiKTsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDc6CistCURFQ09ERV9QUklOVEYoIkJUQ1x0Iik7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiQlRDXHQiKTsKKysgICAgICAgIGJyZWFrOworICAgICBkZWZhdWx0OgorLQlERUNPREVfUFJJTlRGKCJJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREVcbiIpOworLQlUUkFDRV9SRUdTKCk7CistCXByaW50aygiJTA0eDolMDR4OiAlMDJYJTAyWCBJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREUgRVhURU5TSU9OIVxuIiwKKy0JCU0ueDg2LlJfQ1MsIE0ueDg2LlJfSVAtMyxvcDIsIChtb2Q8PDYpfChyaDw8Myl8cmwpOworLQlIQUxUX1NZUygpOworKyAgICAgICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBFWFRFTkRFRCBYODYgT1BDT0RFXG4iKTsKKysgICAgICAgIFRSQUNFX1JFR1MoKTsKKysgICAgICAgIHByaW50aygiJTA0eDolMDR4OiAlMDJYJTAyWCBJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREUgRVhURU5TSU9OIVxuIiwKKysgICAgICAgICAgICAgICBNLng4Ni5SX0NTLCBNLng4Ni5SX0lQIC0gMywgb3AyLCAobW9kIDw8IDYpIHwgKHJoIDw8IDMpIHwgcmwpOworKyAgICAgICAgSEFMVF9TWVMoKTsKKyAgICAgfQorICAgICBzd2l0Y2ggKG1vZCkgeworICAgICBjYXNlIDA6CitAQCAtMTg3NiwyMiArMTg5NCwyMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gc2hpZnQgJiAweDFGOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworLQkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkgICAgc3dpdGNoIChyaCkgeworLQkgICAgY2FzZSA1OgorLQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNjoKKy0JCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA3OgorLQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CistCQlicmVhazsKKy0JICAgIGRlZmF1bHQ6CistCQlicmVhazsKKy0JICAgIH0KKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzd2l0Y2ggKHJoKSB7CisrICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTggc2hpZnQ7CisgCitAQCAtMTkwMSwyMSArMTkyMCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gc2hpZnQgJiAweEY7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CistCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCSAgICBzd2l0Y2ggKHJoKSB7CistCSAgICBjYXNlIDU6CistCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA2OgorLQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDc6CistCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgZGVmYXVsdDoKKy0JCWJyZWFrOworLQkgICAgfQorKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3dpdGNoIChyaCkgeworKyAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorQEAgLTE5MjksMjIgKzE5NDgsMjMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0WF9JKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9IHNoaWZ0ICYgMHgxRjsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKy0JICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JICAgIHN3aXRjaCAocmgpIHsKKy0JICAgIGNhc2UgNToKKy0JCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDY6CistCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNzoKKy0JCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworLQkJYnJlYWs7CistCSAgICBkZWZhdWx0OgorLQkJYnJlYWs7CistCSAgICB9CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3dpdGNoIChyaCkgeworKyAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHU4IHNoaWZ0OworIAorQEAgLTE5NTQsMjEgKzE5NzQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0WF9JKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9IHNoaWZ0ICYgMHhGOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworLQkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkgICAgc3dpdGNoIChyaCkgeworLQkgICAgY2FzZSA1OgorLQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNjoKKy0JCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA3OgorLQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CistCQlicmVhazsKKy0JICAgIGRlZmF1bHQ6CistCQlicmVhazsKKy0JICAgIH0KKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKK0BAIC0xOTgyLDIyICsyMDAyLDIzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4MUY7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CistCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCSAgICBzd2l0Y2ggKHJoKSB7CistCSAgICBjYXNlIDU6CistCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA2OgorLQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDc6CistCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgZGVmYXVsdDoKKy0JCWJyZWFrOworLQkgICAgfQorLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1OCBzaGlmdDsKKyAKK0BAIC0yMDA3LDc0ICsyMDI4LDc1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4RjsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKy0JICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JICAgIHN3aXRjaCAocmgpIHsKKy0JICAgIGNhc2UgNToKKy0JCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDY6CistCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNzoKKy0JCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworLQkJYnJlYWs7CistCSAgICBkZWZhdWx0OgorLQkJYnJlYWs7CistCSAgICB9CistICAgICAgICB9CistICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzd2l0Y2ggKHJoKSB7CisrICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpzcmNyZWc7CistCSAgICB1MzIgbWFzazsKKy0JICAgIHU4IHNoaWZ0OworKyAgICAgICAgICAgIHUzMiBtYXNrOworKyAgICAgICAgICAgIHU4IHNoaWZ0OworIAorICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gc2hpZnQgJiAweDFGOworLQkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKKy0JICAgIHN3aXRjaCAocmgpIHsKKy0JICAgIGNhc2UgNToKKy0JCSpzcmNyZWcgfD0gbWFzazsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA2OgorLQkJKnNyY3JlZyAmPSB+bWFzazsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA3OgorLQkJKnNyY3JlZyBePSBtYXNrOworLQkJYnJlYWs7CistCSAgICBkZWZhdWx0OgorLQkJYnJlYWs7CistCSAgICB9CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgICAgICpzcmNyZWcgfD0gbWFzazsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgICAgICAqc3JjcmVnICY9IH5tYXNrOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgICAgICpzcmNyZWcgXj0gbWFzazsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CistCSAgICB1MTYgbWFzazsKKy0JICAgIHU4IHNoaWZ0OworKyAgICAgICAgICAgIHUxNiBtYXNrOworKyAgICAgICAgICAgIHU4IHNoaWZ0OworIAorICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gc2hpZnQgJiAweEY7CistCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLEZfQ0YpOworLQkgICAgc3dpdGNoIChyaCkgeworLQkgICAgY2FzZSA1OgorLQkJKnNyY3JlZyB8PSBtYXNrOworLQkJYnJlYWs7CistCSAgICBjYXNlIDY6CistCQkqc3JjcmVnICY9IH5tYXNrOworLQkJYnJlYWs7CistCSAgICBjYXNlIDc6CistCQkqc3JjcmVnIF49IG1hc2s7CistCQlicmVhazsKKy0JICAgIGRlZmF1bHQ6CistCQlicmVhazsKKy0JICAgIH0KKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzd2l0Y2ggKHJoKSB7CisrICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgICAgICAqc3JjcmVnIHw9IG1hc2s7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICAgICAgKnNyY3JlZyAmPSB+bWFzazsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgICAgICAqc3JjcmVnIF49IG1hc2s7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtMjA4NiwxMSArMjEwOCwxMiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGJiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CistICAgIGludCBiaXQsZGlzcDsKKysgICAgaW50IGJpdCwgZGlzcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQlRDXHQiKTsKK0BAIC0yMDk4LDcgKzIxMjEsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICBzd2l0Y2ggKG1vZCkgeworICAgICBjYXNlIDA6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTIxMDYsMTMgKzIxMjksMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKyAgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgXiBtYXNrKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgXiBtYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC0yMTIwLDE2ICsyMTQ0LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsICh1MTYpKHNyY3ZhbCBeIG1hc2spKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwLCAodTE2KSAoc3JjdmFsIF4gbWFzaykpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtMjEzNywxMyArMjE2MSwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworICAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCBeIG1hc2spOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCBeIG1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTIxNTEsMTYgKzIxNzYsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgKHUxNikoc3JjdmFsIF4gbWFzaykpOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsICh1MTYpIChzcmN2YWwgXiBtYXNrKSk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC0yMTY4LDEzICsyMTkzLDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisgICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIF4gbWFzayk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsIF4gbWFzayk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtMjE4MiwxNiArMjIwOCwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwLCAodTE2KShzcmN2YWwgXiBtYXNrKSk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCwgKHUxNikgKHNyY3ZhbCBeIG1hc2spKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCXUzMiAqc3JjcmVnLCpzaGlmdHJlZzsKKysgICAgICAgICAgICB1MzIgKnNyY3JlZywgKnNoaWZ0cmVnOworICAgICAgICAgICAgIHUzMiBtYXNrOworIAorICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKK0BAIC0yMjAwLDE5ICsyMjI2LDIwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworICAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CistCQkJKnNyY3JlZyBePSBtYXNrOworLQkJfSBlbHNlIHsKKy0JCQl1MTYgKnNyY3JlZywqc2hpZnRyZWc7CistCQkJdTE2IG1hc2s7CistCistCQkJc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgICpzcmNyZWcgXj0gbWFzazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqc3JjcmVnLCAqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTE2IG1hc2s7CisrCisrICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLCBGX0NGKTsKKyAgICAgICAgICAgICAqc3JjcmVnIF49IG1hc2s7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKK0BAIC0yMjI1LDcgKzIyNTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGJjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnNmKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9ic2YodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0yMjMzLDEwNSArMjI2MSwxMTcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2JzZih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkJTRlx0Iik7CisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CistICAgIHN3aXRjaChtb2QpIHsKKysgICAgc3dpdGNoIChtb2QpIHsKKyAgICAgY2FzZSAwOgorLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDMyOyAoKmRzdHJlZykrKykKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0gZWxzZSB7CistCSAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9CistCWJyZWFrOworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAzMjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKy0JaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCSAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAzMjsgKCpkc3RyZWcpKyspCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9IGVsc2UgeworLQkgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMTY7ICgqZHN0cmVnKSsrKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfQorLQlicmVhazsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMzI7ICgqZHN0cmVnKSsrKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMTY7ICgqZHN0cmVnKSsrKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CistCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMzI7ICgqZHN0cmVnKSsrKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfSBlbHNlIHsKKy0JICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDE2OyAoKmRzdHJlZykrKykKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0KKy0JYnJlYWs7CistICAgIGNhc2UgMzoJCQkJLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCSAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3JjdmFsID0gKkRFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAzMjsgKCpkc3RyZWcpKyspCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9IGVsc2UgeworLQkgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY3ZhbCA9ICpERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMTY7ICgqZHN0cmVnKSsrKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfQorLQlicmVhazsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMzI7ICgqZHN0cmVnKSsrKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMTY7ICgqZHN0cmVnKSsrKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmN2YWwgPSAqREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDMyOyAoKmRzdHJlZykrKykKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY3ZhbCA9ICpERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMTY7ICgqZHN0cmVnKSsrKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtMjM0MSw3ICsyMzgxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2JzZih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic3IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2Jzcih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTIzNDksMTA1ICsyMzkwLDExNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnNyKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQlNSXHQiKTsKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKy0gICAgc3dpdGNoKG1vZCkgeworKyAgICBzd2l0Y2ggKG1vZCkgeworICAgICBjYXNlIDA6CistCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAzMTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfSBlbHNlIHsKKy0JICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0KKy0JYnJlYWs7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMzE7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMzE7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0gZWxzZSB7CistCSAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDE1OyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9CistCWJyZWFrOworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDMxOyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDE1OyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKy0JaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCSAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDMxOyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9IGVsc2UgeworLQkgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAxNTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfQorLQlicmVhazsKKy0gICAgY2FzZSAzOgkJCQkvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmN2YWwgPSAqREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMzE7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0gZWxzZSB7CistCSAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3JjdmFsID0gKkRFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDE1OyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9CistCWJyZWFrOworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDMxOyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDE1OyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY3ZhbCA9ICpERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAzMTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3JjdmFsID0gKkRFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDE1OyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0yNDU3LDcgKzI1MTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnNyKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhiZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnN4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfbW92c3hfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMjQ3NCwxOCArMjUyOCwxOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0gICAgICAgICAgICBzcmN2YWwgPSAoczMyKSgoczgpZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IChzMzIpICgoczgpIGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistICAgICAgICAgICAgc3JjdmFsID0gKHMxNikoKHM4KWZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKysgICAgICAgICAgICBzcmN2YWwgPSAoczE2KSAoKHM4KSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworQEAgLTI0OTksMTggKzI1NTQsMTkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnN4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CistICAgICAgICAgICAgc3JjdmFsID0gKHMzMikoKHM4KWZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKysgICAgICAgICAgICBzcmN2YWwgPSAoczMyKSAoKHM4KSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLSAgICAgICAgICAgIHNyY3ZhbCA9IChzMTYpKChzOClmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisrICAgICAgICAgICAgc3JjdmFsID0gKHMxNikgKChzOCkgZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKK0BAIC0yNTI0LDQ0ICsyNTgwLDQ2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworLSAgICAgICAgICAgIHNyY3ZhbCA9IChzMzIpKChzOClmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisrICAgICAgICAgICAgc3JjdmFsID0gKHMzMikgKChzOCkgZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0gICAgICAgICAgICBzcmN2YWwgPSAoczE2KSgoczgpZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IChzMTYpICgoczgpIGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CistICAgICAgICAgICAgdTggICpzcmNyZWc7CisrICAgICAgICAgICAgdTggKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gKHMzMikoKHM4KSpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IChzMzIpICgoczgpICogc3JjcmVnKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1OCAgKnNyY3JlZzsKKysgICAgICAgICAgICB1OCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSAoczE2KSgoczgpKnNyY3JlZyk7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAoczE2KSAoKHM4KSAqIHNyY3JlZyk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTI1NzMsNyArMjYzMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGJmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9tb3ZzeF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0yNTg5LDcgKzI2NDgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0gICAgICAgIHNyY3ZhbCA9IChzMzIpKChzMTYpZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCkpOworKyAgICAgICAgc3JjdmFsID0gKHMzMikgKChzMTYpIGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CitAQCAtMjU5OCw3ICsyNjU3LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnN4X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CistICAgICAgICBzcmN2YWwgPSAoczMyKSgoczE2KWZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpKTsKKysgICAgICAgIHNyY3ZhbCA9IChzMzIpICgoczE2KSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KSk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworQEAgLTI2MDcsMTggKzI2NjYsMTggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnN4X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistICAgICAgICBzcmN2YWwgPSAoczMyKSgoczE2KWZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpKTsKKysgICAgICAgIHNyY3ZhbCA9IChzMzIpICgoczE2KSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KSk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgKmRlc3RyZWcgPSAoczMyKSgoczE2KSpzcmNyZWcpOworKyAgICAgICAgKmRlc3RyZWcgPSAoczMyKSAoKHMxNikgKiBzcmNyZWcpOworICAgICAgICAgYnJlYWs7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTI2MjYsNDAgKzI2ODUsNDEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnN4X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgfQorIAorIC8qIEhhbmRsZXMgb3Bjb2RlcyAweGM4LTB4Y2YgKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnN3YXAodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2Jzd2FwKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkJTV0FQXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAKKyAgICAgc3dpdGNoIChvcDIpIHsKKy0JY2FzZSAweGM4OgorLQkgICAgTS54ODYuUl9FQVggPSBic3dhcF8zMihNLng4Ni5SX0VBWCk7CistCSAgICBicmVhazsKKy0JY2FzZSAweGM5OgorLQkgICAgTS54ODYuUl9FQ1ggPSBic3dhcF8zMihNLng4Ni5SX0VDWCk7CistCSAgICBicmVhazsKKy0JY2FzZSAweGNhOgorLQkgICAgTS54ODYuUl9FRFggPSBic3dhcF8zMihNLng4Ni5SX0VEWCk7CistCSAgICBicmVhazsKKy0JY2FzZSAweGNiOgorLQkgICAgTS54ODYuUl9FQlggPSBic3dhcF8zMihNLng4Ni5SX0VCWCk7CistCSAgICBicmVhazsKKy0JY2FzZSAweGNjOgorLQkgICAgTS54ODYuUl9FU1AgPSBic3dhcF8zMihNLng4Ni5SX0VTUCk7CistCSAgICBicmVhazsKKy0JY2FzZSAweGNkOgorLQkgICAgTS54ODYuUl9FQlAgPSBic3dhcF8zMihNLng4Ni5SX0VCUCk7CistCSAgICBicmVhazsKKy0JY2FzZSAweGNlOgorLQkgICAgTS54ODYuUl9FU0kgPSBic3dhcF8zMihNLng4Ni5SX0VTSSk7CistCSAgICBicmVhazsKKy0JY2FzZSAweGNmOgorLQkgICAgTS54ODYuUl9FREkgPSBic3dhcF8zMihNLng4Ni5SX0VESSk7CistCSAgICBicmVhazsKKy0JZGVmYXVsdDoKKy0JICAgIC8qIGNhbid0IGhhcHBlbiAqLworLQkgICAgYnJlYWs7CisrICAgIGNhc2UgMHhjODoKKysgICAgICAgIE0ueDg2LlJfRUFYID0gYnN3YXBfMzIoTS54ODYuUl9FQVgpOworKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMHhjOToKKysgICAgICAgIE0ueDg2LlJfRUNYID0gYnN3YXBfMzIoTS54ODYuUl9FQ1gpOworKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMHhjYToKKysgICAgICAgIE0ueDg2LlJfRURYID0gYnN3YXBfMzIoTS54ODYuUl9FRFgpOworKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMHhjYjoKKysgICAgICAgIE0ueDg2LlJfRUJYID0gYnN3YXBfMzIoTS54ODYuUl9FQlgpOworKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMHhjYzoKKysgICAgICAgIE0ueDg2LlJfRVNQID0gYnN3YXBfMzIoTS54ODYuUl9FU1ApOworKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMHhjZDoKKysgICAgICAgIE0ueDg2LlJfRUJQID0gYnN3YXBfMzIoTS54ODYuUl9FQlApOworKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMHhjZToKKysgICAgICAgIE0ueDg2LlJfRVNJID0gYnN3YXBfMzIoTS54ODYuUl9FU0kpOworKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMHhjZjoKKysgICAgICAgIE0ueDg2LlJfRURJID0gYnN3YXBfMzIoTS54ODYuUl9FREkpOworKyAgICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgICAvKiBjYW4ndCBoYXBwZW4gKi8KKysgICAgICAgIGJyZWFrOworICAgICB9CisgCisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0yNjY5LDI1ICsyNzI5LDMyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic3dhcCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIERvdWJsZSBieXRlIG9wZXJhdGlvbiBjb2RlIHRhYmxlOgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorLXsKKy0vKiAgMHgwMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIEdyb3VwIEYgKHJpbmcgMCBQTSkgICAgICAqLworLS8qICAweDAxICovIHg4NmVtdU9wMl9ncm91cF9nLCAgICAgLyogR3JvdXAgRyAocmluZyAwIFBNKSAgICAgICovCistLyogIDB4MDIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBsYXIgKHJpbmcgMCBQTSkgICAgICAgICAgKi8KKy0vKiAgMHgwMyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIGxzbCAocmluZyAwIFBNKSAgICAgICAgICAqLworK3ZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pICh1OCkgPSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDAwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHcm91cCBGIChyaW5nIDAgUE0pICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHcm91cCBHIChyaW5nIDAgUE0pICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsYXIgKHJpbmcgMCBQTSkgICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwMyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsc2wgKHJpbmcgMCBQTSkgICAgICAgICAgKi8KKyAvKiAgMHgwNCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0vKiAgMHgwNSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIGxvYWRhbGwgKHVuZG9jdW1lbnRlZCkgICAqLworLS8qICAweDA2ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogY2x0cyAocmluZyAwIFBNKSAgICAgICAgICovCistLyogIDB4MDcgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBsb2FkYWxsICh1bmRvY3VtZW50ZWQpICAgKi8KKy0vKiAgMHgwOCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIGludmQgKHJpbmcgMCBQTSkgICAgICAgICAqLworLS8qICAweDA5ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogd2JpbnZkIChyaW5nIDAgUE0pICAgICAgICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MDUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbG9hZGFsbCAodW5kb2N1bWVudGVkKSAgICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MDYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2x0cyAocmluZyAwIFBNKSAgICAgICAgICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MDcgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbG9hZGFsbCAodW5kb2N1bWVudGVkKSAgICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MDggKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW52ZCAocmluZyAwIFBNKSAgICAgICAgICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MDkgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2JpbnZkIChyaW5nIDAgUE0pICAgICAgICovCisgLyogIDB4MGEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MGIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MGMgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MGQgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MGUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MGYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistCisgLyogIDB4MTAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MTEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MTIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjcwNCwxNCArMjc3MSwxOSBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweDFkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDFlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDFmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorLS8qICAweDIwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbW92IHJlZzMyLGNyZWcgKHJpbmcgMCBQTSkgKi8KKy0vKiAgMHgyMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIG1vdiByZWczMixkcmVnIChyaW5nIDAgUE0pICovCistLyogIDB4MjIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBtb3YgY3JlZyxyZWczMiAocmluZyAwIFBNKSAqLworLS8qICAweDIzICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbW92IGRyZWcscmVnMzIgKHJpbmcgMCBQTSkgKi8KKy0vKiAgMHgyNCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIG1vdiByZWczMix0cmVnIChyaW5nIDAgUE0pICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MjAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbW92IHJlZzMyLGNyZWcgKHJpbmcgMCBQTSkgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgyMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb3YgcmVnMzIsZHJlZyAocmluZyAwIFBNKSAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDIyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vdiBjcmVnLHJlZzMyIChyaW5nIDAgUE0pICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MjMgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbW92IGRyZWcscmVnMzIgKHJpbmcgMCBQTSkgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgyNCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb3YgcmVnMzIsdHJlZyAocmluZyAwIFBNKSAqLworIC8qICAweDI1ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLS8qICAweDI2ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbW92IHRyZWcscmVnMzIgKHJpbmcgMCBQTSkgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgyNiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb3YgdHJlZyxyZWczMiAocmluZyAwIFBNKSAqLworIC8qICAweDI3ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDI4ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDI5ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorQEAgLTI3MjEsNyArMjc5Myw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4MmQgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MmUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MmYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistCisgLyogIDB4MzAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MzEgKi8geDg2ZW11T3AyX3JkdHNjLAorIC8qICAweDMyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorQEAgLTI3MzgsNyArMjgwOSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4M2QgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4M2UgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4M2YgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistCisgLyogIDB4NDAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NDEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NDIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjc1NSw3ICsyODI1LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHg0ZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg0ZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg0ZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHg1MCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg1MSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg1MiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yNzcyLDcgKzI4NDEsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweDVkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDVlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDVmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorIC8qICAweDYwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDYxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDYyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorQEAgLTI3ODksNyArMjg1Nyw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4NmQgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NmUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NmYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistCisgLyogIDB4NzAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NzEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NzIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjgwNiw3ICsyODczLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHg3ZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg3ZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg3ZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHg4MCAqLyB4ODZlbXVPcDJfbG9uZ19qdW1wLAorIC8qICAweDgxICovIHg4NmVtdU9wMl9sb25nX2p1bXAsCisgLyogIDB4ODIgKi8geDg2ZW11T3AyX2xvbmdfanVtcCwKK0BAIC0yODIzLDcgKzI4ODksNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweDhkICovIHg4NmVtdU9wMl9sb25nX2p1bXAsCisgLyogIDB4OGUgKi8geDg2ZW11T3AyX2xvbmdfanVtcCwKKyAvKiAgMHg4ZiAqLyB4ODZlbXVPcDJfbG9uZ19qdW1wLAorLQorIC8qICAweDkwICovIHg4NmVtdU9wMl9zZXRfYnl0ZSwKKyAvKiAgMHg5MSAqLyB4ODZlbXVPcDJfc2V0X2J5dGUsCisgLyogIDB4OTIgKi8geDg2ZW11T3AyX3NldF9ieXRlLAorQEAgLTI4NDAsNyArMjkwNSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4OWQgKi8geDg2ZW11T3AyX3NldF9ieXRlLAorIC8qICAweDllICovIHg4NmVtdU9wMl9zZXRfYnl0ZSwKKyAvKiAgMHg5ZiAqLyB4ODZlbXVPcDJfc2V0X2J5dGUsCistCisgLyogIDB4YTAgKi8geDg2ZW11T3AyX3B1c2hfRlMsCisgLyogIDB4YTEgKi8geDg2ZW11T3AyX3BvcF9GUywKKyAvKiAgMHhhMiAqLyB4ODZlbXVPcDJfY3B1aWQsCitAQCAtMjg1Nyw5ICsyOTIxLDEwIEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4YWQgKi8geDg2ZW11T3AyX3NocmRfQ0wsCisgLyogIDB4YWUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4YWYgKi8geDg2ZW11T3AyX2ltdWxfUl9STSwKKy0KKy0vKiAgMHhiMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIFRPRE86IGNtcHhjaGcgKi8KKy0vKiAgMHhiMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIFRPRE86IGNtcHhjaGcgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHhiMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUT0RPOiBjbXB4Y2hnICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4YjEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVE9ETzogY21weGNoZyAqLworIC8qICAweGIyICovIHg4NmVtdU9wMl9sc3NfUl9JTU0sCisgLyogIDB4YjMgKi8geDg2ZW11T3AyX2J0cl9SLAorIC8qICAweGI0ICovIHg4NmVtdU9wMl9sZnNfUl9JTU0sCitAQCAtMjg3NCw5ICsyOTM5LDEwIEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4YmQgKi8geDg2ZW11T3AyX2JzciwKKyAvKiAgMHhiZSAqLyB4ODZlbXVPcDJfbW92c3hfYnl0ZV9SX1JNLAorIC8qICAweGJmICovIHg4NmVtdU9wMl9tb3ZzeF93b3JkX1JfUk0sCistCistLyogIDB4YzAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBUT0RPOiB4YWRkICovCistLyogIDB4YzEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBUT0RPOiB4YWRkICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4YzAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVE9ETzogeGFkZCAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweGMxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRPRE86IHhhZGQgKi8KKyAvKiAgMHhjMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhjMyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhjNCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yODkxLDcgKzI5NTcsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweGNkICovIHg4NmVtdU9wMl9ic3dhcCwKKyAvKiAgMHhjZSAqLyB4ODZlbXVPcDJfYnN3YXAsCisgLyogIDB4Y2YgKi8geDg2ZW11T3AyX2Jzd2FwLAorLQorIC8qICAweGQwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGQxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGQyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorQEAgLTI5MDgsNyArMjk3Myw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4ZGQgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4ZGUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4ZGYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistCisgLyogIDB4ZTAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4ZTEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4ZTIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjkyNSw3ICsyOTg5LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHhlZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhlZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhlZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHhmMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhmMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhmMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS9wcmltX29wcy5jIGIvbGlicy94ODZlbXUvcHJpbV9vcHMuYworaW5kZXggZmYxN2MzZi4uMjRmNzZiNCAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3ByaW1fb3BzLmMKKysrKyBiL2xpYnMveDg2ZW11L3ByaW1fb3BzLmMKK0BAIC0xMDIsMTggKzEwMiwyMyBAQAorICNkZWZpbmUJUFJJTV9PUFNfTk9fUkVERUZJTkVfQVNNCisgI2luY2x1ZGUgIng4NmVtdS94ODZlbXVpLmgiCisgCisrI2lmIGRlZmluZWQoX19HTlVDX18pCisrI2lmIGRlZmluZWQgKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9faTM4NikgfHwgZGVmaW5lZChfX0FNRDY0X18pIHx8IGRlZmluZWQoX19hbWQ2NF9fKQorKyNpbmNsdWRlICJ4ODZlbXUvcHJpbV94ODZfZ2NjLmgiCisrI2VuZGlmCisrI2VuZGlmCisrCisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbCBWYXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKy1zdGF0aWMgdTMyIHg4NmVtdV9wYXJpdHlfdGFiWzhdID0KKy17CistCTB4OTY2OTY5OTYsCistCTB4Njk5Njk2NjksCistCTB4Njk5Njk2NjksCistCTB4OTY2OTY5OTYsCistCTB4Njk5Njk2NjksCistCTB4OTY2OTY5OTYsCistCTB4OTY2OTY5OTYsCistCTB4Njk5Njk2NjksCisrc3RhdGljIHUzMiB4ODZlbXVfcGFyaXR5X3RhYls4XSA9IHsKKysgICAgMHg5NjY5Njk5NiwKKysgICAgMHg2OTk2OTY2OSwKKysgICAgMHg2OTk2OTY2OSwKKysgICAgMHg5NjY5Njk5NiwKKysgICAgMHg2OTk2OTY2OSwKKysgICAgMHg5NjY5Njk5NiwKKysgICAgMHg5NjY5Njk5NiwKKysgICAgMHg2OTk2OTY2OSwKKyB9OworIAorICNkZWZpbmUgUEFSSVRZKHgpICAgKCgoeDg2ZW11X3Bhcml0eV90YWJbKHgpIC8gMzJdID4+ICgoeCkgJSAzMikpICYgMSkgPT0gMCkKK0BAIC0xMjUsODggKzEzMCw5NiBAQCBzdGF0aWMgdTMyIHg4NmVtdV9wYXJpdHlfdGFiWzhdID0KKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFBQSBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGFhYV93b3JkKHUxNiBkKQorK3UxNgorK2FhYV93b3JkKHUxNiBkKQorIHsKKy0JdTE2CXJlczsKKy0JaWYgKChkICYgMHhmKSA+IDB4OSB8fCBBQ0NFU1NfRkxBRyhGX0FGKSkgeworLQkJZCArPSAweDY7CistCQlkICs9IDB4MTAwOworLQkJU0VUX0ZMQUcoRl9BRik7CistCQlTRVRfRkxBRyhGX0NGKTsKKy0JfSBlbHNlIHsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfQUYpOworLQl9CistCXJlcyA9ICh1MTYpKGQgJiAweEZGMEYpOworLQlDTEVBUl9GTEFHKEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCXJldHVybiByZXM7CisrICAgIHUxNiByZXM7CisrCisrICAgIGlmICgoZCAmIDB4ZikgPiAweDkgfHwgQUNDRVNTX0ZMQUcoRl9BRikpIHsKKysgICAgICAgIGQgKz0gMHg2OworKyAgICAgICAgZCArPSAweDEwMDsKKysgICAgICAgIFNFVF9GTEFHKEZfQUYpOworKyAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgfQorKyAgICByZXMgPSAodTE2KSAoZCAmIDB4RkYwRik7CisrICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFBQSBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGFhc193b3JkKHUxNiBkKQorK3UxNgorK2Fhc193b3JkKHUxNiBkKQorIHsKKy0JdTE2CXJlczsKKy0JaWYgKChkICYgMHhmKSA+IDB4OSB8fCBBQ0NFU1NfRkxBRyhGX0FGKSkgeworLQkJZCAtPSAweDY7CistCQlkIC09IDB4MTAwOworLQkJU0VUX0ZMQUcoRl9BRik7CistCQlTRVRfRkxBRyhGX0NGKTsKKy0JfSBlbHNlIHsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfQUYpOworLQl9CistCXJlcyA9ICh1MTYpKGQgJiAweEZGMEYpOworLQlDTEVBUl9GTEFHKEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCXJldHVybiByZXM7CisrICAgIHUxNiByZXM7CisrCisrICAgIGlmICgoZCAmIDB4ZikgPiAweDkgfHwgQUNDRVNTX0ZMQUcoRl9BRikpIHsKKysgICAgICAgIGQgLT0gMHg2OworKyAgICAgICAgZCAtPSAweDEwMDsKKysgICAgICAgIFNFVF9GTEFHKEZfQUYpOworKyAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgfQorKyAgICByZXMgPSAodTE2KSAoZCAmIDB4RkYwRik7CisrICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFBRCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGFhZF93b3JkKHUxNiBkKQorK3UxNgorK2FhZF93b3JkKHUxNiBkKQorIHsKKy0JdTE2IGw7CistCXU4IGhiLCBsYjsKKysgICAgdTE2IGw7CisrICAgIHU4IGhiLCBsYjsKKyAKKy0JaGIgPSAodTgpKChkID4+IDgpICYgMHhmZik7CistCWxiID0gKHU4KSgoZCAmIDB4ZmYpKTsKKy0JbCA9ICh1MTYpKChsYiArIDEwICogaGIpICYgMHhGRik7CisrICAgIGhiID0gKHU4KSAoKGQgPj4gOCkgJiAweGZmKTsKKysgICAgbGIgPSAodTgpICgoZCAmIDB4ZmYpKTsKKysgICAgbCA9ICh1MTYpICgobGIgKyAxMCAqIGhiKSAmIDB4RkYpOworIAorLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhsICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGwgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShsICYgMHhmZiksIEZfUEYpOworLQlyZXR1cm4gbDsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcobCAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhsID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkobCAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmV0dXJuIGw7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBQU0gaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBhYW1fd29yZCh1OCBkKQorK3UxNgorK2FhbV93b3JkKHU4IGQpCisgeworICAgICB1MTYgaCwgbDsKKyAKKy0JaCA9ICh1MTYpKGQgLyAxMCk7CistCWwgPSAodTE2KShkICUgMTApOworLQlsIHw9ICh1MTYpKGggPDwgOCk7CisrICAgIGggPSAodTE2KSAoZCAvIDEwKTsKKysgICAgbCA9ICh1MTYpIChkICUgMTApOworKyAgICBsIHw9ICh1MTYpIChoIDw8IDgpOworIAorLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhsICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGwgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShsICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhsICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGwgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShsICYgMHhmZiksIEZfUEYpOworICAgICByZXR1cm4gbDsKKyB9CisgCitAQCAtMjE0LDE1NSArMjI3LDE2MSBAQCB1MTYgYWFtX3dvcmQodTggZCkKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFEQyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggYWRjX2J5dGUodTggZCwgdTggcykKKyt1OAorK2FkY19ieXRlKHU4IGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgY2M7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGNjOworIAorLQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCistCQlyZXMgPSAxICsgZCArIHM7CistCWVsc2UKKy0JCXJlcyA9IGQgKyBzOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCisrICAgICAgICByZXMgPSAxICsgZCArIHM7CisrICAgIGVsc2UKKysgICAgICAgIHJlcyA9IGQgKyBzOworIAorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEwMCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MTAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworLQljYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gNiksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CistCXJldHVybiAodTgpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiA2KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQURDIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYWRjX3dvcmQodTE2IGQsIHUxNiBzKQorK3UxNgorK2FkY193b3JkKHUxNiBkLCB1MTYgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBjYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKy0JCXJlcyA9IDEgKyBkICsgczsKKy0JZWxzZQorLQkJcmVzID0gZCArIHM7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKysgICAgICAgIHJlcyA9IDEgKyBkICsgczsKKysgICAgZWxzZQorKyAgICAgICAgcmVzID0gZCArIHM7CisgCistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MTAwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxMDAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCistCWNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAxNCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CistCXJldHVybiAodTE2KXJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworKyAgICBjYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMTQpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQURDIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgYWRjX2xvbmcodTMyIGQsIHUzMiBzKQorK3UzMgorK2FkY19sb25nKHUzMiBkLCB1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiBsbzsJLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBoaTsKKy0JcmVnaXN0ZXIgdTMyIHJlczsKKy0JcmVnaXN0ZXIgdTMyIGNjOworKyAgICByZWdpc3RlciB1MzIgbG87ICAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBoaTsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsKKysgICAgcmVnaXN0ZXIgdTMyIGNjOworIAorLQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsKKy0JCWxvID0gMSArIChkICYgMHhGRkZGKSArIChzICYgMHhGRkZGKTsKKy0JCXJlcyA9IDEgKyBkICsgczsKKy0JCX0KKy0JZWxzZSB7CistCQlsbyA9IChkICYgMHhGRkZGKSArIChzICYgMHhGRkZGKTsKKy0JCXJlcyA9IGQgKyBzOworLQkJfQorLQloaSA9IChsbyA+PiAxNikgKyAoZCA+PiAxNikgKyAocyA+PiAxNik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeworKyAgICAgICAgbG8gPSAxICsgKGQgJiAweEZGRkYpICsgKHMgJiAweEZGRkYpOworKyAgICAgICAgcmVzID0gMSArIGQgKyBzOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgbG8gPSAoZCAmIDB4RkZGRikgKyAocyAmIDB4RkZGRik7CisrICAgICAgICByZXMgPSBkICsgczsKKysgICAgfQorKyAgICBoaSA9IChsbyA+PiAxNikgKyAoZCA+PiAxNikgKyAocyA+PiAxNik7CisgCistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGhpICYgMHgxMDAwMCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGhpICYgMHgxMDAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDMwKSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworKyAgICBjYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUREIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBhZGRfYnl0ZSh1OCBkLCB1OCBzKQorK3U4CisrYWRkX2J5dGUodTggZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBjYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCXJlcyA9IGQgKyBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEwMCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJlcyA9IGQgKyBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDYpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gKHU4KXJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworKyAgICBjYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gNiksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFERCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGFkZF93b3JkKHUxNiBkLCB1MTYgcykKKyt1MTYKKythZGRfd29yZCh1MTYgZCwgdTE2IHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgY2M7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGNjOworIAorLQlyZXMgPSBkICsgczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxMDAwMCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkICsgczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxMDAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCistCWNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAxNCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CistCXJldHVybiAodTE2KXJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworKyAgICBjYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMTQpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUREIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgYWRkX2xvbmcodTMyIGQsIHUzMiBzKQorK3UzMgorK2FkZF9sb25nKHUzMiBkLCB1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiBsbzsJLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBoaTsKKy0JcmVnaXN0ZXIgdTMyIHJlczsKKy0JcmVnaXN0ZXIgdTMyIGNjOworKyAgICByZWdpc3RlciB1MzIgbG87ICAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBoaTsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsKKysgICAgcmVnaXN0ZXIgdTMyIGNjOworIAorLQlsbyA9IChkICYgMHhGRkZGKSArIChzICYgMHhGRkZGKTsKKy0JcmVzID0gZCArIHM7CistCWhpID0gKGxvID4+IDE2KSArIChkID4+IDE2KSArIChzID4+IDE2KTsKKysgICAgbG8gPSAoZCAmIDB4RkZGRikgKyAocyAmIDB4RkZGRik7CisrICAgIHJlcyA9IGQgKyBzOworKyAgICBoaSA9IChsbyA+PiAxNikgKyAoZCA+PiAxNikgKyAocyA+PiAxNik7CisgCistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGhpICYgMHgxMDAwMCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGhpICYgMHgxMDAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCisgICAgIC8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKyAgICAgY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDMwKSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAzMCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisgCisgICAgIHJldHVybiByZXM7CisgfQorQEAgLTM3MSwzOSArMzkwLDQxIEBAIHUzMiBhZGRfbG9uZyh1MzIgZCwgdTMyIHMpCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBTkQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGFuZF9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKythbmRfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKy0JcmVnaXN0ZXIgdTggcmVzOyAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTggcmVzOyAgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkICYgczsKKysgICAgcmVzID0gZCAmIHM7CisgCistCS8qIHNldCB0aGUgZmxhZ3MgICovCistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogc2V0IHRoZSBmbGFncyAgKi8KKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQU5EIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYW5kX3dvcmQodTE2IGQsIHUxNiBzKQorK3UxNgorK2FuZF93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistICAgIHJlZ2lzdGVyIHUxNiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUxNiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKyAgICAgcmVzID0gZCAmIHM7CisgCisgICAgIC8qIHNldCB0aGUgZmxhZ3MgICovCistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworICAgICByZXR1cm4gcmVzOworIH0KKyAKK0BAIC00MTEsNDMzICs0MzIsNDU2IEBAIHUxNiBhbmRfd29yZCh1MTYgZCwgdTE2IHMpCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBTkQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBhbmRfbG9uZyh1MzIgZCwgdTMyIHMpCisrdTMyCisrYW5kX2xvbmcodTMyIGQsIHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkICYgczsKKysgICAgcmVzID0gZCAmIHM7CisgCistCS8qIHNldCB0aGUgZmxhZ3MgICovCistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCXJldHVybiByZXM7CisrICAgIC8qIHNldCB0aGUgZmxhZ3MgICovCisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBDTVAgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGNtcF9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKytjbXBfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGJjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBiYzsKKyAKKy0JcmVzID0gZCAtIHM7CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJlcyA9IGQgLSBzOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIGQ7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCisrICAgIGJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIENNUCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGNtcF93b3JkKHUxNiBkLCB1MTYgcykKKyt1MTYKKytjbXBfd29yZCh1MTYgZCwgdTE2IHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgYmM7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlyZXMgPSBkIC0gczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJlcyA9IGQgLSBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKyAgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAxNCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiBkOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMTQpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIENNUCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGNtcF9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKytjbXBfbG9uZyh1MzIgZCwgdTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgYmM7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlyZXMgPSBkIC0gczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCWJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAwMDAwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIGQ7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCisrICAgIGJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAwMDAwMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuIGQ7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBEQUEgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGRhYV9ieXRlKHU4IGQpCisrdTgKKytkYWFfYnl0ZSh1OCBkKQorIHsKKy0JdTMyIHJlcyA9IGQ7CistCWlmICgoZCAmIDB4ZikgPiA5IHx8IEFDQ0VTU19GTEFHKEZfQUYpKSB7CistCQlyZXMgKz0gNjsKKy0JCVNFVF9GTEFHKEZfQUYpOworLQl9CistCWlmIChyZXMgPiAweDlGIHx8IEFDQ0VTU19GTEFHKEZfQ0YpKSB7CistCQlyZXMgKz0gMHg2MDsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQl9CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhGRikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCXJldHVybiAodTgpcmVzOworKyAgICB1MzIgcmVzID0gZDsKKysKKysgICAgaWYgKChkICYgMHhmKSA+IDkgfHwgQUNDRVNTX0ZMQUcoRl9BRikpIHsKKysgICAgICAgIHJlcyArPSA2OworKyAgICAgICAgU0VUX0ZMQUcoRl9BRik7CisrICAgIH0KKysgICAgaWYgKHJlcyA+IDB4OUYgfHwgQUNDRVNTX0ZMQUcoRl9DRikpIHsKKysgICAgICAgIHJlcyArPSAweDYwOworKyAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgIH0KKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweEZGKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgREFTIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBkYXNfYnl0ZSh1OCBkKQorK3U4CisrZGFzX2J5dGUodTggZCkKKyB7CistCWlmICgoZCAmIDB4ZikgPiA5IHx8IEFDQ0VTU19GTEFHKEZfQUYpKSB7CistCQlkIC09IDY7CistCQlTRVRfRkxBRyhGX0FGKTsKKy0JfQorLQlpZiAoZCA+IDB4OUYgfHwgQUNDRVNTX0ZMQUcoRl9DRikpIHsKKy0JCWQgLT0gMHg2MDsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQl9CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGQgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoZCA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKGQgJiAweGZmKSwgRl9QRik7CistCXJldHVybiBkOworKyAgICBpZiAoKGQgJiAweGYpID4gOSB8fCBBQ0NFU1NfRkxBRyhGX0FGKSkgeworKyAgICAgICAgZCAtPSA2OworKyAgICAgICAgU0VUX0ZMQUcoRl9BRik7CisrICAgIH0KKysgICAgaWYgKGQgPiAweDlGIHx8IEFDQ0VTU19GTEFHKEZfQ0YpKSB7CisrICAgICAgICBkIC09IDB4NjA7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgfQorKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhkICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGQgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShkICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERFQyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggZGVjX2J5dGUodTggZCkKKyt1OAorK2RlY19ieXRlKHU4IGQpCisgeworLSAgICByZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgICAgIHJlZ2lzdGVyIHUzMiBiYzsKKyAKKyAgICAgcmVzID0gZCAtIDE7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCS8qIGJhc2VkIG9uIHN1Yl9ieXRlLCB1c2VzIHM9PTEuICAqLworLQliYyA9IChyZXMgJiAofmQgfCAxKSkgfCAofmQgJiAxKTsKKy0JLyogY2FycnkgZmxhZyB1bmNoYW5nZWQgKi8KKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1OClyZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCisrICAgIC8qIGJhc2VkIG9uIHN1Yl9ieXRlLCB1c2VzIHM9PTEuICAqLworKyAgICBiYyA9IChyZXMgJiAofmQgfCAxKSkgfCAofmQgJiAxKTsKKysgICAgLyogY2FycnkgZmxhZyB1bmNoYW5nZWQgKi8KKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgREVDIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgZGVjX3dvcmQodTE2IGQpCisrdTE2CisrZGVjX3dvcmQodTE2IGQpCisgeworLSAgICByZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgICAgIHJlZ2lzdGVyIHUzMiBiYzsKKyAKKyAgICAgcmVzID0gZCAtIDE7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKyAgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKyAgICAgLyogYmFzZWQgb24gdGhlIHN1Yl9ieXRlIHJvdXRpbmUsIHdpdGggcz09MSAqLworICAgICBiYyA9IChyZXMgJiAofmQgfCAxKSkgfCAofmQgJiAxKTsKKyAgICAgLyogY2FycnkgZmxhZyB1bmNoYW5nZWQgKi8KKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAxNCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiAodTE2KXJlczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBERUMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBkZWNfbG9uZyh1MzIgZCkKKyt1MzIKKytkZWNfbG9uZyh1MzIgZCkKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorICAgICByZXMgPSBkIC0gMTsKKyAKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKyAgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JYmMgPSAocmVzICYgKH5kIHwgMSkpIHwgKH5kICYgMSk7CistCS8qIGNhcnJ5IGZsYWcgdW5jaGFuZ2VkICovCistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICBiYyA9IChyZXMgJiAofmQgfCAxKSkgfCAofmQgJiAxKTsKKysgICAgLyogY2FycnkgZmxhZyB1bmNoYW5nZWQgKi8KKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAzMCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBJTkMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGluY19ieXRlKHU4IGQpCisrdTgKKytpbmNfYnl0ZSh1OCBkKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGNjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBjYzsKKyAKKy0JcmVzID0gZCArIDE7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJlcyA9IGQgKyAxOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCistCWNjID0gKCgxICYgZCkgfCAofnJlcykpICYgKDEgfCBkKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiA2KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1OClyZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKysgICAgY2MgPSAoKDEgJiBkKSB8ICh+cmVzKSkgJiAoMSB8IGQpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDYpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBJTkMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBpbmNfd29yZCh1MTYgZCkKKyt1MTYKKytpbmNfd29yZCh1MTYgZCkKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBjYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCXJlcyA9IGQgKyAxOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCArIDE7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCistCWNjID0gKDEgJiBkKSB8ICgofnJlcykgJiAoMSB8IGQpKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAxNCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CistCXJldHVybiAodTE2KXJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworKyAgICBjYyA9ICgxICYgZCkgfCAoKH5yZXMpICYgKDEgfCBkKSk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMTQpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSU5DIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgaW5jX2xvbmcodTMyIGQpCisrdTMyCisraW5jX2xvbmcodTMyIGQpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgY2M7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGNjOworIAorLQlyZXMgPSBkICsgMTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCArIDE7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAoMSAmIGQpIHwgKCh+cmVzKSAmICgxIHwgZCkpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDMwKSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworKyAgICBjYyA9ICgxICYgZCkgfCAoKH5yZXMpICYgKDEgfCBkKSk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgT1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IG9yX2J5dGUodTggZCwgdTggcykKKyt1OAorK29yX2J5dGUodTggZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHU4IHJlczsgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHU4IHJlczsgICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCB8IHM7CistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgcmVzID0gZCB8IHM7CisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMpLCBGX1BGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE9SIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgb3Jfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2Cisrb3Jfd29yZCh1MTYgZCwgdTE2IHMpCisgeworLQlyZWdpc3RlciB1MTYgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MTYgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgfCBzOworLQkvKiBzZXQgdGhlIGNhcnJ5IGZsYWcgdG8gYmUgYml0IDggKi8KKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQlyZXR1cm4gcmVzOworKyAgICByZXMgPSBkIHwgczsKKysgICAgLyogc2V0IHRoZSBjYXJyeSBmbGFnIHRvIGJlIGJpdCA4ICovCisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE9SIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgb3JfbG9uZyh1MzIgZCwgdTMyIHMpCisrdTMyCisrb3JfbG9uZyh1MzIgZCwgdTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgfCBzOworKyAgICByZXMgPSBkIHwgczsKKyAKKy0JLyogc2V0IHRoZSBjYXJyeSBmbGFnIHRvIGJlIGJpdCA4ICovCistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCXJldHVybiByZXM7CisrICAgIC8qIHNldCB0aGUgY2FycnkgZmxhZyB0byBiZSBiaXQgOCAqLworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgT1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IG5lZ19ieXRlKHU4IHMpCisrdTgKKytuZWdfYnl0ZSh1OCBzKQorIHsKKyAgICAgcmVnaXN0ZXIgdTggcmVzOworICAgICByZWdpc3RlciB1OCBiYzsKKyAKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocyAhPSAwLCBGX0NGKTsKKy0JcmVzID0gKHU4KS1zOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzKSwgRl9QRik7CistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluIC0tLSBtb2RpZmllZCBzdWNoIHRoYXQgZD0wLgorLQkgICBzdWJzdGl0dXRpaW5nIGQ9MCBpbnRvICAgICBiYz0gcmVzJih+ZHxzKXwofmQmcyk7CistCSAgICh0aGUgb25lIHVzZWQgZm9yIHN1YikgYW5kIHNpbXBsaWZ5aW5nLCBzaW5jZSB+ZD0weGZmLi4uLAorLQkgICB+ZHxzID09IDB4ZmZmZi4uLiwgYW5kIHJlcyYweGZmZi4uLiA9PSByZXMuICBTaW1pbGFybHkKKy0JICAgfmQmcyA9PSBzLiAgU28gdGhlIHNpbXBsaWZpZWQgcmVzdWx0IGlzOiAqLworLQliYyA9IHJlcyB8IHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gNiksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiByZXM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgIT0gMCwgRl9DRik7CisrICAgIHJlcyA9ICh1OCkgLSBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzKSwgRl9QRik7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluIC0tLSBtb2RpZmllZCBzdWNoIHRoYXQgZD0wLgorKyAgICAgICBzdWJzdGl0dXRpaW5nIGQ9MCBpbnRvICAgICBiYz0gcmVzJih+ZHxzKXwofmQmcyk7CisrICAgICAgICh0aGUgb25lIHVzZWQgZm9yIHN1YikgYW5kIHNpbXBsaWZ5aW5nLCBzaW5jZSB+ZD0weGZmLi4uLAorKyAgICAgICB+ZHxzID09IDB4ZmZmZi4uLiwgYW5kIHJlcyYweGZmZi4uLiA9PSByZXMuICBTaW1pbGFybHkKKysgICAgICAgfmQmcyA9PSBzLiAgU28gdGhlIHNpbXBsaWZpZWQgcmVzdWx0IGlzOiAqLworKyAgICBiYyA9IHJlcyB8IHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gNiksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IG5lZ193b3JkKHUxNiBzKQorLXsKKy0JcmVnaXN0ZXIgdTE2IHJlczsKKy0JcmVnaXN0ZXIgdTE2IGJjOworLQorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhzICE9IDAsIEZfQ0YpOworLQlyZXMgPSAodTE2KS1zOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0KKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4gLS0tIG1vZGlmaWVkIHN1Y2ggdGhhdCBkPTAuCistCSAgIHN1YnN0aXR1dGlpbmcgZD0wIGludG8gICAgIGJjPSByZXMmKH5kfHMpfCh+ZCZzKTsKKy0JICAgKHRoZSBvbmUgdXNlZCBmb3Igc3ViKSBhbmQgc2ltcGxpZnlpbmcsIHNpbmNlIH5kPTB4ZmYuLi4sCistCSAgIH5kfHMgPT0gMHhmZmZmLi4uLCBhbmQgcmVzJjB4ZmZmLi4uID09IHJlcy4gIFNpbWlsYXJseQorLQkgICB+ZCZzID09IHMuICBTbyB0aGUgc2ltcGxpZmllZCByZXN1bHQgaXM6ICovCistCWJjID0gcmVzIHwgczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAxNCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiByZXM7CisrdTE2CisrbmVnX3dvcmQodTE2IHMpCisreworKyAgICByZWdpc3RlciB1MTYgcmVzOworKyAgICByZWdpc3RlciB1MTYgYmM7CisrCisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgIT0gMCwgRl9DRik7CisrICAgIHJlcyA9ICh1MTYpIC0gczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrCisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluIC0tLSBtb2RpZmllZCBzdWNoIHRoYXQgZD0wLgorKyAgICAgICBzdWJzdGl0dXRpaW5nIGQ9MCBpbnRvICAgICBiYz0gcmVzJih+ZHxzKXwofmQmcyk7CisrICAgICAgICh0aGUgb25lIHVzZWQgZm9yIHN1YikgYW5kIHNpbXBsaWZ5aW5nLCBzaW5jZSB+ZD0weGZmLi4uLAorKyAgICAgICB+ZHxzID09IDB4ZmZmZi4uLiwgYW5kIHJlcyYweGZmZi4uLiA9PSByZXMuICBTaW1pbGFybHkKKysgICAgICAgfmQmcyA9PSBzLiAgU28gdGhlIHNpbXBsaWZpZWQgcmVzdWx0IGlzOiAqLworKyAgICBiYyA9IHJlcyB8IHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMTQpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgT1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBuZWdfbG9uZyh1MzIgcykKKyt1MzIKKytuZWdfbG9uZyh1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7CistCXJlZ2lzdGVyIHUzMiBiYzsKKy0KKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocyAhPSAwLCBGX0NGKTsKKy0JcmVzID0gKHUzMiktczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsKKysgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbiAtLS0gbW9kaWZpZWQgc3VjaCB0aGF0IGQ9MC4KKy0JICAgc3Vic3RpdHV0aWluZyBkPTAgaW50byAgICAgYmM9IHJlcyYofmR8cyl8KH5kJnMpOworLQkgICAodGhlIG9uZSB1c2VkIGZvciBzdWIpIGFuZCBzaW1wbGlmeWluZywgc2luY2UgfmQ9MHhmZi4uLiwKKy0JICAgfmR8cyA9PSAweGZmZmYuLi4sIGFuZCByZXMmMHhmZmYuLi4gPT0gcmVzLiAgU2ltaWxhcmx5CistCSAgIH5kJnMgPT0gcy4gIFNvIHRoZSBzaW1wbGlmaWVkIHJlc3VsdCBpczogKi8KKy0JYmMgPSByZXMgfCBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocyAhPSAwLCBGX0NGKTsKKysgICAgcmVzID0gKHUzMikgLSBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbiAtLS0gbW9kaWZpZWQgc3VjaCB0aGF0IGQ9MC4KKysgICAgICAgc3Vic3RpdHV0aWluZyBkPTAgaW50byAgICAgYmM9IHJlcyYofmR8cyl8KH5kJnMpOworKyAgICAgICAodGhlIG9uZSB1c2VkIGZvciBzdWIpIGFuZCBzaW1wbGlmeWluZywgc2luY2UgfmQ9MHhmZi4uLiwKKysgICAgICAgfmR8cyA9PSAweGZmZmYuLi4sIGFuZCByZXMmMHhmZmYuLi4gPT0gcmVzLiAgU2ltaWxhcmx5CisrICAgICAgIH5kJnMgPT0gcy4gIFNvIHRoZSBzaW1wbGlmaWVkIHJlc3VsdCBpczogKi8KKysgICAgYmMgPSByZXMgfCBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE5PVCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggbm90X2J5dGUodTggcykKKyt1OAorK25vdF9ieXRlKHU4IHMpCisgeworLQlyZXR1cm4gfnM7CisrICAgIHJldHVybiB+czsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE5PVCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IG5vdF93b3JkKHUxNiBzKQorK3UxNgorK25vdF93b3JkKHUxNiBzKQorIHsKKy0JcmV0dXJuIH5zOworKyAgICByZXR1cm4gfnM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBOT1QgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBub3RfbG9uZyh1MzIgcykKKyt1MzIKKytub3RfbG9uZyh1MzIgcykKKyB7CistCXJldHVybiB+czsKKysgICAgcmV0dXJuIH5zOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgUkNMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCByY2xfYnl0ZSh1OCBkLCB1OCBzKQorK3U4CisrcmNsX2J5dGUodTggZCwgdTggcykKKyB7CisgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzaywgY2Y7CisgCisgICAgIC8qIHMgaXMgdGhlIHJvdGF0ZSBkaXN0YW5jZS4gIEl0IHZhcmllcyBmcm9tIDAgLSA4LiAqLworLQkvKiBoYXZlCisrICAgIC8qIGhhdmUKKyAKKyAgICAgICAgQ0YgIEJfNyBCXzYgQl81IEJfNCBCXzMgQl8yIEJfMSBCXzAgCisgCitAQCAtODYxLDkgKzkwNSw5IEBAIHU4IHJjbF9ieXRlKHU4IGQsIHU4IHMpCisgICAgICAgIDIpIEJfKDcpIC4uIEJfKG4pICA8LSAgYl8oOC0obisxKSkgLi4gYl8wCisgICAgICAgIDMpIEJfKG4tMSkgPC0gY2YKKyAgICAgICAgNCkgQl8obi0yKSAuLiBCXzAgPC0gIGJfNyAuLiBiXyg4LShuLTEpKQorLQkgKi8KKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgOSkgIT0gMCkgeworKyAgICAgKi8KKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgOSkgIT0gMCkgeworICAgICAgICAgLyogZXh0cmFjdCB0aGUgbmV3IENBUlJZIEZMQUcuICovCisgICAgICAgICAvKiBDRiA8LSAgYl8oOC1uKSAgICAgICAgICAgICAqLworICAgICAgICAgY2YgPSAoZCA+PiAoOCAtIGNudCkpICYgMHgxOworQEAgLTg3Miw3ICs5MTYsNyBAQCB1OCByY2xfYnl0ZSh1OCBkLCB1OCBzKQorICAgICAgICAgICAgaW50byB0aGUgcmFuZ2UgQl83IC4uIEJfY250ICovCisgICAgICAgICAvKiBCXyg3KSAuLiBCXyhuKSAgPC0gIGJfKDgtKG4rMSkpIC4uIGJfMCAgKi8KKyAgICAgICAgIC8qIG5vdGUgdGhhdCB0aGUgcmlnaHQgaGFuZCBzaWRlIGRvbmUgYnkgdGhlIG1hc2sgKi8KKy0JCXJlcyA9IChkIDw8IGNudCkgJiAweGZmOworKyAgICAgICAgcmVzID0gKGQgPDwgY250KSAmIDB4ZmY7CisgCisgICAgICAgICAvKiBub3cgdGhlIGhpZ2ggc3R1ZmYgd2hpY2ggcm90YXRlZCBhcm91bmQgCisgICAgICAgICAgICBpbnRvIHRoZSBwb3NpdGlvbnMgQl9jbnQtMiAuLiBCXzAgKi8KK0BAIC04ODQsODEgKzkyOCw4MSBAQCB1OCByY2xfYnl0ZSh1OCBkLCB1OCBzKQorICAgICAgICAgcmVzIHw9IChkID4+ICg5IC0gY250KSkgJiBtYXNrOworIAorICAgICAgICAgLyogaWYgdGhlIGNhcnJ5IGZsYWcgd2FzIHNldCwgb3IgaXQgaW4uICAqLworLQkJaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworICAgICAgICAgICAgIC8qICBCXyhuLTEpIDwtIGNmICovCisgICAgICAgICAgICAgcmVzIHw9IDEgPDwgKGNudCAtIDEpOworICAgICAgICAgfQorICAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgYmFzZWQgb24gdGhlIHZhcmlhYmxlICJjZiIgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKyAgICAgICAgIC8qIE9WRVJGTE9XIGlzIHNldCAqSUZGKiBjbnQ9PTEsIHRoZW4gaXQgaXMgdGhlIAorICAgICAgICAgICAgeG9yIG9mIENGIGFuZCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQuICBCbGVjY2suICovCisgICAgICAgICAvKiBwYXJlbnRoZXNpemVkIHRoaXMgZXhwcmVzc2lvbiBzaW5jZSBpdCBhcHBlYXJzIHRvCisgICAgICAgICAgICBiZSBjYXVzaW5nIE9GIHRvIGJlIG1pc3NldCAqLworLSAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY250ID09IDEgJiYgWE9SMihjZiArICgocmVzID4+IDYpICYgMHgyKSksCistCQkJCQkJCSBGX09GKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNudCA9PSAxICYmIFhPUjIoY2YgKyAoKHJlcyA+PiA2KSAmIDB4MikpLCBGX09GKTsKKyAKKyAgICAgfQorLQlyZXR1cm4gKHU4KXJlczsKKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgUkNMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgcmNsX3dvcmQodTE2IGQsIHU4IHMpCisrdTE2CisrcmNsX3dvcmQodTE2IGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgcmVzLCBjbnQsIG1hc2ssIGNmOworKyAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgcmVzLCBjbnQsIG1hc2ssIGNmOworIAorLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSAxNykgIT0gMCkgeworLQkJY2YgPSAoZCA+PiAoMTYgLSBjbnQpKSAmIDB4MTsKKy0JCXJlcyA9IChkIDw8IGNudCkgJiAweGZmZmY7CistCQltYXNrID0gKDEgPDwgKGNudCAtIDEpKSAtIDE7CistCQlyZXMgfD0gKGQgPj4gKDE3IC0gY250KSkgJiBtYXNrOworLQkJaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7CistCQkJcmVzIHw9IDEgPDwgKGNudCAtIDEpOworLQkJfQorLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY250ID09IDEgJiYgWE9SMihjZiArICgocmVzID4+IDE0KSAmIDB4MikpLAorLQkJCQkJCQkgRl9PRik7CistCX0KKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSAxNykgIT0gMCkgeworKyAgICAgICAgY2YgPSAoZCA+PiAoMTYgLSBjbnQpKSAmIDB4MTsKKysgICAgICAgIHJlcyA9IChkIDw8IGNudCkgJiAweGZmZmY7CisrICAgICAgICBtYXNrID0gKDEgPDwgKGNudCAtIDEpKSAtIDE7CisrICAgICAgICByZXMgfD0gKGQgPj4gKDE3IC0gY250KSkgJiBtYXNrOworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7CisrICAgICAgICAgICAgcmVzIHw9IDEgPDwgKGNudCAtIDEpOworKyAgICAgICAgfQorKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY250ID09IDEgJiYgWE9SMihjZiArICgocmVzID4+IDE0KSAmIDB4MikpLCBGX09GKTsKKysgICAgfQorKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgUkNMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgcmNsX2xvbmcodTMyIGQsIHU4IHMpCisrdTMyCisrcmNsX2xvbmcodTMyIGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzLCBjbnQsIG1hc2ssIGNmOworKyAgICByZWdpc3RlciB1MzIgcmVzLCBjbnQsIG1hc2ssIGNmOworIAorLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSAzMykgIT0gMCkgeworLQkJY2YgPSAoZCA+PiAoMzIgLSBjbnQpKSAmIDB4MTsKKy0JCXJlcyA9IChkIDw8IGNudCkgJiAweGZmZmZmZmZmOworLQkJbWFzayA9ICgxIDw8IChjbnQgLSAxKSkgLSAxOworLQkJcmVzIHw9IChkID4+ICgzMyAtIGNudCkpICYgbWFzazsKKy0JCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeyAgICAgLyogY2FycnkgZmxhZyBpcyBzZXQgKi8KKy0JCQlyZXMgfD0gMSA8PCAoY250IC0gMSk7CistCQl9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjbnQgPT0gMSAmJiBYT1IyKGNmICsgKChyZXMgPj4gMzApICYgMHgyKSksCistCQkJCQkJCSBGX09GKTsKKy0JfQorLQlyZXR1cm4gcmVzOworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSAzMykgIT0gMCkgeworKyAgICAgICAgY2YgPSAoZCA+PiAoMzIgLSBjbnQpKSAmIDB4MTsKKysgICAgICAgIHJlcyA9IChkIDw8IGNudCkgJiAweGZmZmZmZmZmOworKyAgICAgICAgbWFzayA9ICgxIDw8IChjbnQgLSAxKSkgLSAxOworKyAgICAgICAgcmVzIHw9IChkID4+ICgzMyAtIGNudCkpICYgbWFzazsKKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeyAgICAgICAgLyogY2FycnkgZmxhZyBpcyBzZXQgKi8KKysgICAgICAgICAgICByZXMgfD0gMSA8PCAoY250IC0gMSk7CisrICAgICAgICB9CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjbnQgPT0gMSAmJiBYT1IyKGNmICsgKChyZXMgPj4gMzApICYgMHgyKSksIEZfT0YpOworKyAgICB9CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBSQ1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IHJjcl9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKytyY3JfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKy0JdTMyCXJlcywgY250OworLQl1MzIJbWFzaywgY2YsIG9jZiA9IDA7CisrICAgIHUzMiByZXMsIGNudDsKKysgICAgdTMyIG1hc2ssIGNmLCBvY2YgPSAwOworIAorLQkvKiByb3RhdGUgcmlnaHQgdGhyb3VnaCBjYXJyeSAqLworKyAgICAvKiByb3RhdGUgcmlnaHQgdGhyb3VnaCBjYXJyeSAqLworICAgICAvKiAKKyAgICAgICAgcyBpcyB0aGUgcm90YXRlIGRpc3RhbmNlLiAgSXQgdmFyaWVzIGZyb20gMCAtIDguCisgICAgICAgIGQgaXMgdGhlIGJ5dGUgb2JqZWN0IHJvdGF0ZWQuICAKK0BAIC05NzksOSArMTAyMyw5IEBAIHU4IHJjcl9ieXRlKHU4IGQsIHU4IHMpCisgICAgICAgIDIpIEJfKDgtKG4rMSkpIC4uIEJfKDApICA8LSAgYl8oNykgLi4gYl8obikKKyAgICAgICAgMykgQl8oOC1uKSA8LSBjZgorICAgICAgICA0KSBCXyg3KSAuLiBCXyg4LShuLTEpKSA8LSAgYl8obi0yKSAuLiBiXygwKQorLQkgKi8KKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgOSkgIT0gMCkgeworKyAgICAgKi8KKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgOSkgIT0gMCkgeworICAgICAgICAgLyogZXh0cmFjdCB0aGUgbmV3IENBUlJZIEZMQUcuICovCisgICAgICAgICAvKiBDRiA8LSAgYl8obi0xKSAgICAgICAgICAgICAgKi8KKyAgICAgICAgIGlmIChjbnQgPT0gMSkgeworQEAgLTk5MCwxMSArMTAzNCwxMiBAQCB1OCByY3JfYnl0ZSh1OCBkLCB1OCBzKQorICAgICAgICAgICAgICAgIDAgaWYgZmxhZyBub3Qgc2V0CisgICAgICAgICAgICAgICAgbm9uLXplcm8gaWYgZmxhZyBpcyBzZXQuCisgICAgICAgICAgICAgICAgZG9pbmcgYWNjZXNzX2ZsYWcoLi4pICE9IDAgY2FzdHMgdGhhdCBpbnRvIGVpdGhlciAKKy0JCQkgICAwLi4xIGluIGFueSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZmxhZ3MgcmVnaXN0ZXIKKysgICAgICAgICAgICAgICAwLi4xIGluIGFueSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZmxhZ3MgcmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAoaS5lLiBwYWNrZWQgYml0IGFycmF5IG9yIHVucGFja2VkLikKKyAgICAgICAgICAgICAgKi8KKy0JCQlvY2YgPSBBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwOworLSAgICAgICAgfSBlbHNlCisrICAgICAgICAgICAgb2NmID0gQUNDRVNTX0ZMQUcoRl9DRikgIT0gMDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBjZiA9IChkID4+IChjbnQgLSAxKSkgJiAweDE7CisgCisgICAgICAgICAvKiBCXyg4LShuKzEpKSAuLiBCXygwKSAgPC0gIGJfKDcpIC4uIGJfbiAgKi8KK0BAIC0xMDE2LDkzICsxMDYxLDk1IEBAIHU4IHJjcl9ieXRlKHU4IGQsIHU4IHMpCisgICAgICAgICByZXMgfD0gKGQgPDwgKDkgLSBjbnQpKTsKKyAKKyAgICAgICAgIC8qIGlmIHRoZSBjYXJyeSBmbGFnIHdhcyBzZXQsIG9yIGl0IGluLiAgKi8KKy0JCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeyAgICAgLyogY2FycnkgZmxhZyBpcyBzZXQgKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeyAgICAgICAgLyogY2FycnkgZmxhZyBpcyBzZXQgKi8KKyAgICAgICAgICAgICAvKiAgQl8oOC1uKSA8LSBjZiAqLworICAgICAgICAgICAgIHJlcyB8PSAxIDw8ICg4IC0gY250KTsKKyAgICAgICAgIH0KKyAgICAgICAgIC8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIGJhc2VkIG9uIHRoZSB2YXJpYWJsZSAiY2YiICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisgICAgICAgICAvKiBPVkVSRkxPVyBpcyBzZXQgKklGRiogY250PT0xLCB0aGVuIGl0IGlzIHRoZSAKKyAgICAgICAgICAgIHhvciBvZiBDRiBhbmQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0LiAgQmxlY2NrLiAqLworICAgICAgICAgLyogcGFyZW50aGVzaXplZC4uLiAqLworLQkJaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihvY2YgKyAoKGQgPj4gNikgJiAweDIpKSwKKy0JCQkJCQkJCSBGX09GKTsKKy0JCX0KKy0JfQorLQlyZXR1cm4gKHU4KXJlczsKKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIob2NmICsgKChkID4+IDYpICYgMHgyKSksIEZfT0YpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJDUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHJjcl93b3JkKHUxNiBkLCB1OCBzKQorK3UxNgorK3Jjcl93b3JkKHUxNiBkLCB1OCBzKQorIHsKKy0JdTMyIHJlcywgY250OworLQl1MzIJbWFzaywgY2YsIG9jZiA9IDA7CisrICAgIHUzMiByZXMsIGNudDsKKysgICAgdTMyIG1hc2ssIGNmLCBvY2YgPSAwOworIAorLQkvKiByb3RhdGUgcmlnaHQgdGhyb3VnaCBjYXJyeSAqLworLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSAxNykgIT0gMCkgeworLQkJaWYgKGNudCA9PSAxKSB7CistCQkJY2YgPSBkICYgMHgxOworLQkJCW9jZiA9IEFDQ0VTU19GTEFHKEZfQ0YpICE9IDA7CistCQl9IGVsc2UKKy0JCQljZiA9IChkID4+IChjbnQgLSAxKSkgJiAweDE7CistCQltYXNrID0gKDEgPDwgKDE2IC0gY250KSkgLSAxOworLQkJcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CistCQlyZXMgfD0gKGQgPDwgKDE3IC0gY250KSk7CistCQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsKKy0JCQlyZXMgfD0gMSA8PCAoMTYgLSBjbnQpOworLQkJfQorLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihvY2YgKyAoKGQgPj4gMTQpICYgMHgyKSksCistCQkJCQkJCQkgRl9PRik7CistCQl9CistCX0KKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiByb3RhdGUgcmlnaHQgdGhyb3VnaCBjYXJyeSAqLworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSAxNykgIT0gMCkgeworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgY2YgPSBkICYgMHgxOworKyAgICAgICAgICAgIG9jZiA9IEFDQ0VTU19GTEFHKEZfQ0YpICE9IDA7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgY2YgPSAoZCA+PiAoY250IC0gMSkpICYgMHgxOworKyAgICAgICAgbWFzayA9ICgxIDw8ICgxNiAtIGNudCkpIC0gMTsKKysgICAgICAgIHJlcyA9IChkID4+IGNudCkgJiBtYXNrOworKyAgICAgICAgcmVzIHw9IChkIDw8ICgxNyAtIGNudCkpOworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7CisrICAgICAgICAgICAgcmVzIHw9IDEgPDwgKDE2IC0gY250KTsKKysgICAgICAgIH0KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIob2NmICsgKChkID4+IDE0KSAmIDB4MikpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgUkNSIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgcmNyX2xvbmcodTMyIGQsIHU4IHMpCisteworLQl1MzIgcmVzLCBjbnQ7CistCXUzMiBtYXNrLCBjZiwgb2NmID0gMDsKKy0KKy0JLyogcm90YXRlIHJpZ2h0IHRocm91Z2ggY2FycnkgKi8KKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgMzMpICE9IDApIHsKKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCWNmID0gZCAmIDB4MTsKKy0JCQlvY2YgPSBBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwOworLQkJfSBlbHNlCistCQkJY2YgPSAoZCA+PiAoY250IC0gMSkpICYgMHgxOworLQkJbWFzayA9ICgxIDw8ICgzMiAtIGNudCkpIC0gMTsKKy0JCXJlcyA9IChkID4+IGNudCkgJiBtYXNrOworLQkJaWYgKGNudCAhPSAxKQorLQkJCXJlcyB8PSAoZCA8PCAoMzMgLSBjbnQpKTsKKy0JCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeyAgICAgLyogY2FycnkgZmxhZyBpcyBzZXQgKi8KKy0JCQlyZXMgfD0gMSA8PCAoMzIgLSBjbnQpOworLQkJfQorLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihvY2YgKyAoKGQgPj4gMzApICYgMHgyKSksCistCQkJCQkJCQkgRl9PRik7CistCQl9CistCX0KKy0JcmV0dXJuIHJlczsKKyt1MzIKKytyY3JfbG9uZyh1MzIgZCwgdTggcykKKyt7CisrICAgIHUzMiByZXMsIGNudDsKKysgICAgdTMyIG1hc2ssIGNmLCBvY2YgPSAwOworKworKyAgICAvKiByb3RhdGUgcmlnaHQgdGhyb3VnaCBjYXJyeSAqLworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSAzMykgIT0gMCkgeworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgY2YgPSBkICYgMHgxOworKyAgICAgICAgICAgIG9jZiA9IEFDQ0VTU19GTEFHKEZfQ0YpICE9IDA7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgY2YgPSAoZCA+PiAoY250IC0gMSkpICYgMHgxOworKyAgICAgICAgbWFzayA9ICgxIDw8ICgzMiAtIGNudCkpIC0gMTsKKysgICAgICAgIHJlcyA9IChkID4+IGNudCkgJiBtYXNrOworKyAgICAgICAgaWYgKGNudCAhPSAxKQorKyAgICAgICAgICAgIHJlcyB8PSAoZCA8PCAoMzMgLSBjbnQpKTsKKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeyAgICAgICAgLyogY2FycnkgZmxhZyBpcyBzZXQgKi8KKysgICAgICAgICAgICByZXMgfD0gMSA8PCAoMzIgLSBjbnQpOworKyAgICAgICAgfQorKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihvY2YgKyAoKGQgPj4gMzApICYgMHgyKSksIEZfT0YpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBST0wgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IHJvbF9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKytyb2xfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKyAgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlcywgY250LCBtYXNrOworIAorQEAgLTExMjEsODcgKzExNjgsOTAgQEAgdTggcm9sX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgSUYgbiA+IDAgCisgICAgICAgIDEpIEJfKDcpIC4uIEJfKG4pICA8LSAgYl8oOC0obisxKSkgLi4gYl8oMCkKKyAgICAgICAgMikgQl8obi0xKSAuLiBCXygwKSA8LSAgYl8oNykgLi4gYl8oOC1uKQorLQkgKi8KKysgICAgICovCisgICAgIHJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDgpICE9IDApIHsKKy0JCS8qIEJfKDcpIC4uIEJfKG4pICA8LSAgYl8oOC0obisxKSkgLi4gYl8oMCkgKi8KKy0JCXJlcyA9IChkIDw8IGNudCk7CisrICAgIGlmICgoY250ID0gcyAlIDgpICE9IDApIHsKKysgICAgICAgIC8qIEJfKDcpIC4uIEJfKG4pICA8LSAgYl8oOC0obisxKSkgLi4gYl8oMCkgKi8KKysgICAgICAgIHJlcyA9IChkIDw8IGNudCk7CisgCistCQkvKiBCXyhuLTEpIC4uIEJfKDApIDwtICBiXyg3KSAuLiBiXyg4LW4pICovCistCQltYXNrID0gKDEgPDwgY250KSAtIDE7CistCQlyZXMgfD0gKGQgPj4gKDggLSBjbnQpKSAmIG1hc2s7CisrICAgICAgICAvKiBCXyhuLTEpIC4uIEJfKDApIDwtICBiXyg3KSAuLiBiXyg4LW4pICovCisrICAgICAgICBtYXNrID0gKDEgPDwgY250KSAtIDE7CisrICAgICAgICByZXMgfD0gKGQgPj4gKDggLSBjbnQpKSAmIG1hc2s7CisgCistCQkvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorLQkJICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CistCQkvKiBPVkVSRkxPVyBpcyBzZXQgKklGRiogcz09MSwgdGhlbiBpdCBpcyB0aGUKKy0JCSAgIHhvciBvZiBDRiBhbmQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0LiAgQmxlY2NrLiAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocyA9PSAxICYmCistCQkJCQkJCSBYT1IyKChyZXMgJiAweDEpICsgKChyZXMgPj4gNikgJiAweDIpKSwKKy0JCQkJCQkJIEZfT0YpOworLQl9IGlmIChzICE9IDApIHsKKy0JCS8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCistCQkgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKy0JfQorLQlyZXR1cm4gKHU4KXJlczsKKysgICAgICAgIC8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCisrICAgICAgICAgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKysgICAgICAgIC8qIE9WRVJGTE9XIGlzIHNldCAqSUZGKiBzPT0xLCB0aGVuIGl0IGlzIHRoZQorKyAgICAgICAgICAgeG9yIG9mIENGIGFuZCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQuICBCbGVjY2suICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzID09IDEgJiYKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhPUjIoKHJlcyAmIDB4MSkgKyAoKHJlcyA+PiA2KSAmIDB4MikpLCBGX09GKTsKKysgICAgfQorKyAgICBpZiAocyAhPSAwKSB7CisrICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorKyAgICAgICAgICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CisrICAgIH0KKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgUk9MIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgcm9sX3dvcmQodTE2IGQsIHU4IHMpCisrdTE2Cisrcm9sX3dvcmQodTE2IGQsIHU4IHMpCisgeworICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgcmVzLCBjbnQsIG1hc2s7CisgCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDE2KSAhPSAwKSB7CistCQlyZXMgPSAoZCA8PCBjbnQpOworLQkJbWFzayA9ICgxIDw8IGNudCkgLSAxOworLQkJcmVzIHw9IChkID4+ICgxNiAtIGNudCkpICYgbWFzazsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzID09IDEgJiYKKy0JCQkJCQkJIFhPUjIoKHJlcyAmIDB4MSkgKyAoKHJlcyA+PiAxNCkgJiAweDIpKSwKKy0JCQkJCQkJIEZfT0YpOworLQl9IGlmIChzICE9IDApIHsKKy0JCS8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCistCQkgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKy0JfQorLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDE2KSAhPSAwKSB7CisrICAgICAgICByZXMgPSAoZCA8PCBjbnQpOworKyAgICAgICAgbWFzayA9ICgxIDw8IGNudCkgLSAxOworKyAgICAgICAgcmVzIHw9IChkID4+ICgxNiAtIGNudCkpICYgbWFzazsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzID09IDEgJiYKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhPUjIoKHJlcyAmIDB4MSkgKyAoKHJlcyA+PiAxNCkgJiAweDIpKSwgRl9PRik7CisrICAgIH0KKysgICAgaWYgKHMgIT0gMCkgeworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBST0wgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiByb2xfbG9uZyh1MzIgZCwgdTggcykKKyt1MzIKKytyb2xfbG9uZyh1MzIgZCwgdTggcykKKyB7CisgICAgIHJlZ2lzdGVyIHUzMiByZXMsIGNudCwgbWFzazsKKyAKKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgMzIpICE9IDApIHsKKy0JCXJlcyA9IChkIDw8IGNudCk7CistCQltYXNrID0gKDEgPDwgY250KSAtIDE7CistCQlyZXMgfD0gKGQgPj4gKDMyIC0gY250KSkgJiBtYXNrOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJgorLQkJCQkJCQkgWE9SMigocmVzICYgMHgxKSArICgocmVzID4+IDMwKSAmIDB4MikpLAorLQkJCQkJCQkgRl9PRik7CistCX0gaWYgKHMgIT0gMCkgeworLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworLQl9CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDMyKSAhPSAwKSB7CisrICAgICAgICByZXMgPSAoZCA8PCBjbnQpOworKyAgICAgICAgbWFzayA9ICgxIDw8IGNudCkgLSAxOworKyAgICAgICAgcmVzIHw9IChkID4+ICgzMiAtIGNudCkpICYgbWFzazsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzID09IDEgJiYKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhPUjIoKHJlcyAmIDB4MSkgKyAoKHJlcyA+PiAzMCkgJiAweDIpKSwgRl9PRik7CisrICAgIH0KKysgICAgaWYgKHMgIT0gMCkgeworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworKyAgICB9CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBST1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IHJvcl9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKytyb3JfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKyAgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlcywgY250LCBtYXNrOworIAorQEAgLTEyMTksOSArMTI2OSw5IEBAIHU4IHJvcl9ieXRlKHU4IGQsIHU4IHMpCisgICAgICAgIElGIG4gPiAwIAorICAgICAgICAxKSBCXyg4LShuKzEpKSAuLiBCXygwKSAgPC0gIGJfKDcpIC4uIGJfKG4pCisgICAgICAgIDIpIEJfKDcpIC4uIEJfKDgtbikgPC0gIGJfKG4tMSkgLi4gYl8oMCkKKy0JICovCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDgpICE9IDApIHsgICAgICAgICAgIC8qIG5vdCBhIHR5cG8sIGRvIG5hZGEgaWYgY250PT0wICovCisrICAgICAqLworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSA4KSAhPSAwKSB7ICAgLyogbm90IGEgdHlwbywgZG8gbmFkYSBpZiBjbnQ9PTAgKi8KKyAgICAgICAgIC8qIEJfKDcpIC4uIEJfKDgtbikgPC0gIGJfKG4tMSkgLi4gYl8oMCkgKi8KKyAgICAgICAgIHJlcyA9IChkIDw8ICg4IC0gY250KSk7CisgCitAQCAtMTIzMSwyOTEgKzEyODEsMzE3IEBAIHU4IHJvcl9ieXRlKHU4IGQsIHU4IHMpCisgCisgICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlciAKKyAgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX0NGKTsKKy0JCS8qIE9WRVJGTE9XIGlzIHNldCAqSUZGKiBzPT0xLCB0aGVuIGl0IGlzIHRoZQorKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9DRik7CisrICAgICAgICAvKiBPVkVSRkxPVyBpcyBzZXQgKklGRiogcz09MSwgdGhlbiBpdCBpcyB0aGUKKyAgICAgICAgICAgIHhvciBvZiB0aGUgdHdvIG1vc3Qgc2lnbmlmaWNhbnQgYml0cy4gIEJsZWNjay4gKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiA2KSwgRl9PRik7CistCX0gZWxzZSBpZiAocyAhPSAwKSB7CistCQkvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorLQkJICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfQ0YpOworLQl9CistCXJldHVybiAodTgpcmVzOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocyA9PSAxICYmIFhPUjIocmVzID4+IDYpLCBGX09GKTsKKysgICAgfQorKyAgICBlbHNlIGlmIChzICE9IDApIHsKKysgICAgICAgIC8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCisrICAgICAgICAgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9DRik7CisrICAgIH0KKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgUk9SIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgcm9yX3dvcmQodTE2IGQsIHU4IHMpCisrdTE2Cisrcm9yX3dvcmQodTE2IGQsIHU4IHMpCisgeworICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgcmVzLCBjbnQsIG1hc2s7CisgCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDE2KSAhPSAwKSB7CistCQlyZXMgPSAoZCA8PCAoMTYgLSBjbnQpKTsKKy0JCW1hc2sgPSAoMSA8PCAoMTYgLSBjbnQpKSAtIDE7CistCQlyZXMgfD0gKGQgPj4gKGNudCkpICYgbWFzazsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9DRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzID09IDEgJiYgWE9SMihyZXMgPj4gMTQpLCBGX09GKTsKKy0JfSBlbHNlIGlmIChzICE9IDApIHsKKy0JCS8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCistCQkgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX0NGKTsKKy0JfQorLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDE2KSAhPSAwKSB7CisrICAgICAgICByZXMgPSAoZCA8PCAoMTYgLSBjbnQpKTsKKysgICAgICAgIG1hc2sgPSAoMSA8PCAoMTYgLSBjbnQpKSAtIDE7CisrICAgICAgICByZXMgfD0gKGQgPj4gKGNudCkpICYgbWFzazsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9DRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzID09IDEgJiYgWE9SMihyZXMgPj4gMTQpLCBGX09GKTsKKysgICAgfQorKyAgICBlbHNlIGlmIChzICE9IDApIHsKKysgICAgICAgIC8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCisrICAgICAgICAgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX0NGKTsKKysgICAgfQorKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgUk9SIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgcm9yX2xvbmcodTMyIGQsIHU4IHMpCisrdTMyCisrcm9yX2xvbmcodTMyIGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzLCBjbnQsIG1hc2s7CisrICAgIHJlZ2lzdGVyIHUzMiByZXMsIGNudCwgbWFzazsKKyAKKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgMzIpICE9IDApIHsKKy0JCXJlcyA9IChkIDw8ICgzMiAtIGNudCkpOworLQkJbWFzayA9ICgxIDw8ICgzMiAtIGNudCkpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoY250KSkgJiBtYXNrOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9DRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzID09IDEgJiYgWE9SMihyZXMgPj4gMzApLCBGX09GKTsKKy0JfSBlbHNlIGlmIChzICE9IDApIHsKKy0JCS8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCistCQkgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9DRik7CistCX0KKy0JcmV0dXJuIHJlczsKKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgMzIpICE9IDApIHsKKysgICAgICAgIHJlcyA9IChkIDw8ICgzMiAtIGNudCkpOworKyAgICAgICAgbWFzayA9ICgxIDw8ICgzMiAtIGNudCkpIC0gMTsKKysgICAgICAgIHJlcyB8PSAoZCA+PiAoY250KSkgJiBtYXNrOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzID09IDEgJiYgWE9SMihyZXMgPj4gMzApLCBGX09GKTsKKysgICAgfQorKyAgICBlbHNlIGlmIChzICE9IDApIHsKKysgICAgICAgIC8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCisrICAgICAgICAgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNITCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggc2hsX2J5dGUodTggZCwgdTggcykKKyt1OAorK3NobF9ieXRlKHU4IGQsIHU4IHMpCisgeworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworLQorLQlpZiAocyA8IDgpIHsKKy0JCWNudCA9IHMgJSA4OworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworIAorLQkJLyogbGFzdCBiaXQgc2hpZnRlZCBvdXQgZ29lcyBpbnRvIGNhcnJ5IGZsYWcgKi8KKy0JCWlmIChjbnQgPiAwKSB7CistCQkJcmVzID0gZCA8PCBjbnQ7CistCQkJY2YgPSBkICYgKDEgPDwgKDggLSBjbnQpKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9ICh1OCkgZDsKKy0JCX0KKysgICAgaWYgKHMgPCA4KSB7CisrICAgICAgICBjbnQgPSBzICUgODsKKysKKysgICAgICAgIC8qIGxhc3QgYml0IHNoaWZ0ZWQgb3V0IGdvZXMgaW50byBjYXJyeSBmbGFnICovCisrICAgICAgICBpZiAoY250ID4gMCkgeworKyAgICAgICAgICAgIHJlcyA9IGQgPDwgY250OworKyAgICAgICAgICAgIGNmID0gZCAmICgxIDw8ICg4IC0gY250KSk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gKHU4KSBkOworKyAgICAgICAgfQorIAorLQkJaWYgKGNudCA9PSAxKSB7CistCQkJLyogTmVlZHMgc2ltcGxpZmljYXRpb24uICovCistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoCistCQkJCQkJCQkJKCgocmVzICYgMHg4MCkgPT0gMHg4MCkgXgorLQkJCQkJCQkJCSAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLAorLQkJCS8qIHdhcyAoTS54ODYuUl9GTEcmRl9DRik9PUZfQ0YpKSwgKi8KKy0JCQkJCQkJCQlGX09GKTsKKy0JCX0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCX0KKy0JfSBlbHNlIHsKKy0JCXJlcyA9IDA7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygoZCA8PCAocy0xKSkgJiAweDgwLCBGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJU0VUX0ZMQUcoRl9QRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIC8qIE5lZWRzIHNpbXBsaWZpY2F0aW9uLiAqLworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCgoKHJlcyAmIDB4ODApID09IDB4ODApIF4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3YXMgKE0ueDg2LlJfRkxHJkZfQ0YpPT1GX0NGKSksICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRl9PRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgfQorICAgICB9CistCXJldHVybiAodTgpcmVzOworKyAgICBlbHNlIHsKKysgICAgICAgIHJlcyA9IDA7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygoZCA8PCAocyAtIDEpKSAmIDB4ODAsIEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICB9CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNITCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHNobF93b3JkKHUxNiBkLCB1OCBzKQorK3UxNgorK3NobF93b3JkKHUxNiBkLCB1OCBzKQorIHsKKyAgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKyAKKy0JaWYgKHMgPCAxNikgeworLQkJY250ID0gcyAlIDE2OworLQkJaWYgKGNudCA+IDApIHsKKy0JCQlyZXMgPSBkIDw8IGNudDsKKy0JCQljZiA9IGQgJiAoMSA8PCAoMTYgLSBjbnQpKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSAodTE2KSBkOworLQkJfQorLQorLQkJaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoCistCQkJCQkJCQkJKCgocmVzICYgMHg4MDAwKSA9PSAweDgwMDApIF4KKy0JCQkJCQkJCQkgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwKKy0JCQkJCQkJCQlGX09GKTsKKy0gICAgICAgIH0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0gICAgICAgIH0KKy0gICAgfSBlbHNlIHsKKy0JCXJlcyA9IDA7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygoZCA8PCAocy0xKSkgJiAweDgwMDAsIEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlTRVRfRkxBRyhGX1BGKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworLQl9CistCXJldHVybiAodTE2KXJlczsKKysgICAgaWYgKHMgPCAxNikgeworKyAgICAgICAgY250ID0gcyAlIDE2OworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICByZXMgPSBkIDw8IGNudDsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoMTYgLSBjbnQpKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gKHUxNikgZDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCgoKHJlcyAmIDB4ODAwMCkgPT0gMHg4MDAwKSBeCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwKSksIEZfT0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHJlcyA9IDA7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygoZCA8PCAocyAtIDEpKSAmIDB4ODAwMCwgRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfUEYpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgIH0KKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNITCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHNobF9sb25nKHUzMiBkLCB1OCBzKQorLXsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKy0KKy0JaWYgKHMgPCAzMikgeworLQkJY250ID0gcyAlIDMyOworLQkJaWYgKGNudCA+IDApIHsKKy0JCQlyZXMgPSBkIDw8IGNudDsKKy0JCQljZiA9IGQgJiAoMSA8PCAoMzIgLSBjbnQpKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IGQ7CistCQl9CistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygoKChyZXMgJiAweDgwMDAwMDAwKSA9PSAweDgwMDAwMDAwKSBeCistCQkJCQkJCQkgIChBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwKSksIEZfT0YpOworLQkJfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJfQorLQl9IGVsc2UgeworLQkJcmVzID0gMDsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzLTEpKSAmIDB4ODAwMDAwMDAsIEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlTRVRfRkxBRyhGX1BGKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworLQl9CistCXJldHVybiByZXM7CisrdTMyCisrc2hsX2xvbmcodTMyIGQsIHU4IHMpCisreworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworKworKyAgICBpZiAocyA8IDMyKSB7CisrICAgICAgICBjbnQgPSBzICUgMzI7CisrICAgICAgICBpZiAoY250ID4gMCkgeworKyAgICAgICAgICAgIHJlcyA9IGQgPDwgY250OworKyAgICAgICAgICAgIGNmID0gZCAmICgxIDw8ICgzMiAtIGNudCkpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9IGQ7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygoKChyZXMgJiAweDgwMDAwMDAwKSA9PSAweDgwMDAwMDAwKSBeCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwKSksIEZfT0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHJlcyA9IDA7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygoZCA8PCAocyAtIDEpKSAmIDB4ODAwMDAwMDAsIEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICB9CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTSFIgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IHNocl9ieXRlKHU4IGQsIHU4IHMpCisteworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworLQorLQlpZiAocyA8IDgpIHsKKy0JCWNudCA9IHMgJSA4OworLQkJaWYgKGNudCA+IDApIHsKKy0JCQljZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworLQkJCXJlcyA9IGQgPj4gY250OworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JCX0gZWxzZSB7CistCQkJcmVzID0gKHU4KSBkOworLQkJfQorLQorLQkJaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gNiksIEZfT0YpOworLQkJfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJfQorLQl9IGVsc2UgeworLQkJcmVzID0gMDsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKChkID4+IChzLTEpKSAmIDB4MSwgRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCVNFVF9GTEFHKEZfUEYpOworLQkJU0VUX0ZMQUcoRl9aRik7CistCX0KKy0JcmV0dXJuICh1OClyZXM7CisrdTgKKytzaHJfYnl0ZSh1OCBkLCB1OCBzKQorK3sKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKysKKysgICAgaWYgKHMgPCA4KSB7CisrICAgICAgICBjbnQgPSBzICUgODsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgICAgICByZXMgPSBkID4+IGNudDsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSAodTgpIGQ7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiA2KSwgRl9PRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChkID4+IChzIC0gMSkpICYgMHgxLCBGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9QRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgfQorKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTSFIgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBzaHJfd29yZCh1MTYgZCwgdTggcykKKyt1MTYKKytzaHJfd29yZCh1MTYgZCwgdTggcykKKyB7CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisgCistCWlmIChzIDwgMTYpIHsKKy0JCWNudCA9IHMgJSAxNjsKKy0JCWlmIChjbnQgPiAwKSB7CistCQkJY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKy0JCQlyZXMgPSBkID4+IGNudDsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSBkOworLQkJfQorKyAgICBpZiAocyA8IDE2KSB7CisrICAgICAgICBjbnQgPSBzICUgMTY7CisrICAgICAgICBpZiAoY250ID4gMCkgeworKyAgICAgICAgICAgIGNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CisrICAgICAgICAgICAgcmVzID0gZCA+PiBjbnQ7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9IGQ7CisrICAgICAgICB9CisgCistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAxNCksIEZfT0YpOworLSAgICAgICAgfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMTQpLCBGX09GKTsKKyAgICAgICAgIH0KKy0JfSBlbHNlIHsKKy0JCXJlcyA9IDA7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9QRik7CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1BGKTsKKyAgICAgfQorLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTSFIgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBzaHJfbG9uZyh1MzIgZCwgdTggcykKKyt1MzIKKytzaHJfbG9uZyh1MzIgZCwgdTggcykKKyB7CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisgCistCWlmIChzIDwgMzIpIHsKKy0JCWNudCA9IHMgJSAzMjsKKy0JCWlmIChjbnQgPiAwKSB7CistCQkJY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKy0JCQlyZXMgPSBkID4+IGNudDsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistICAgICAgICB9IGVsc2UgeworKyAgICBpZiAocyA8IDMyKSB7CisrICAgICAgICBjbnQgPSBzICUgMzI7CisrICAgICAgICBpZiAoY250ID4gMCkgeworKyAgICAgICAgICAgIGNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CisrICAgICAgICAgICAgcmVzID0gZCA+PiBjbnQ7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgcmVzID0gZDsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmIChjbnQgPT0gMSkgeworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIocmVzID4+IDMwKSwgRl9PRik7CistICAgICAgICB9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMzApLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICB9CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICByZXMgPSAwOworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlDTEVBUl9GTEFHKEZfUEYpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfUEYpOworICAgICB9CisgICAgIHJldHVybiByZXM7CisgfQorQEAgLTE1MjQsNTkyICsxNjAwLDYzNCBAQCB1MzIgc2hyX2xvbmcodTMyIGQsIHU4IHMpCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTQVIgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IHNhcl9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKytzYXJfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZiwgbWFzaywgc2Y7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2YsIG1hc2ssIHNmOworIAorLQlyZXMgPSBkOworLQlzZiA9IGQgJiAweDgwOworKyAgICByZXMgPSBkOworKyAgICBzZiA9IGQgJiAweDgwOworICAgICBjbnQgPSBzICUgODsKKy0JaWYgKGNudCA+IDAgJiYgY250IDwgOCkgeworLQkJbWFzayA9ICgxIDw8ICg4IC0gY250KSkgLSAxOworLQkJY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKy0JCXJlcyA9IChkID4+IGNudCkgJiBtYXNrOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJaWYgKHNmKSB7CistCQkJcmVzIHw9IH5tYXNrOworLQkJfQorLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworLSAgICB9IGVsc2UgaWYgKGNudCA+PSA4KSB7CisrICAgIGlmIChjbnQgPiAwICYmIGNudCA8IDgpIHsKKysgICAgICAgIG1hc2sgPSAoMSA8PCAoOCAtIGNudCkpIC0gMTsKKysgICAgICAgIGNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CisrICAgICAgICByZXMgPSAoZCA+PiBjbnQpICYgbWFzazsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgIGlmIChzZikgeworKyAgICAgICAgICAgIHJlcyB8PSB+bWFzazsKKysgICAgICAgIH0KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgfQorKyAgICBlbHNlIGlmIChjbnQgPj0gOCkgeworICAgICAgICAgaWYgKHNmKSB7CisgICAgICAgICAgICAgcmVzID0gMHhmZjsKKy0JCQlTRVRfRkxBRyhGX0NGKTsKKy0JCQlDTEVBUl9GTEFHKEZfWkYpOworLQkJCVNFVF9GTEFHKEZfU0YpOworLQkJCVNFVF9GTEFHKEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSAwOworLQkJCUNMRUFSX0ZMQUcoRl9DRik7CistCQkJU0VUX0ZMQUcoRl9aRik7CistCQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCQlDTEVBUl9GTEFHKEZfUEYpOworLQkJfQorLQl9CistCXJldHVybiAodTgpcmVzOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9aRik7CisrICAgICAgICAgICAgU0VUX0ZMQUcoRl9TRik7CisrICAgICAgICAgICAgU0VUX0ZMQUcoRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSAwOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfUEYpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNBUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHNhcl93b3JkKHUxNiBkLCB1OCBzKQorK3UxNgorK3Nhcl93b3JkKHUxNiBkLCB1OCBzKQorIHsKKyAgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZiwgbWFzaywgc2Y7CisgCisgICAgIHNmID0gZCAmIDB4ODAwMDsKKyAgICAgY250ID0gcyAlIDE2OworLQlyZXMgPSBkOworLQlpZiAoY250ID4gMCAmJiBjbnQgPCAxNikgeworKyAgICByZXMgPSBkOworKyAgICBpZiAoY250ID4gMCAmJiBjbnQgPCAxNikgeworICAgICAgICAgbWFzayA9ICgxIDw8ICgxNiAtIGNudCkpIC0gMTsKKyAgICAgICAgIGNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CisgICAgICAgICByZXMgPSAoZCA+PiBjbnQpICYgbWFzazsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKyAgICAgICAgIGlmIChzZikgeworICAgICAgICAgICAgIHJlcyB8PSB+bWFzazsKKyAgICAgICAgIH0KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistICAgIH0gZWxzZSBpZiAoY250ID49IDE2KSB7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICB9CisrICAgIGVsc2UgaWYgKGNudCA+PSAxNikgeworICAgICAgICAgaWYgKHNmKSB7CisgICAgICAgICAgICAgcmVzID0gMHhmZmZmOworLQkJCVNFVF9GTEFHKEZfQ0YpOworLQkJCUNMRUFSX0ZMQUcoRl9aRik7CistCQkJU0VUX0ZMQUcoRl9TRik7CistCQkJU0VUX0ZMQUcoRl9QRik7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9aRik7CisrICAgICAgICAgICAgU0VUX0ZMQUcoRl9TRik7CisrICAgICAgICAgICAgU0VUX0ZMQUcoRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICByZXMgPSAwOworLQkJCUNMRUFSX0ZMQUcoRl9DRik7CistCQkJU0VUX0ZMQUcoRl9aRik7CistCQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCQlDTEVBUl9GTEFHKEZfUEYpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfUEYpOworICAgICAgICAgfQorICAgICB9CistCXJldHVybiAodTE2KXJlczsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNBUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHNhcl9sb25nKHUzMiBkLCB1OCBzKQorK3UzMgorK3Nhcl9sb25nKHUzMiBkLCB1OCBzKQorIHsKKyAgICAgdTMyIGNudCwgcmVzLCBjZiwgbWFzaywgc2Y7CisgCisgICAgIHNmID0gZCAmIDB4ODAwMDAwMDA7CisgICAgIGNudCA9IHMgJSAzMjsKKy0JcmVzID0gZDsKKy0JaWYgKGNudCA+IDAgJiYgY250IDwgMzIpIHsKKysgICAgcmVzID0gZDsKKysgICAgaWYgKGNudCA+IDAgJiYgY250IDwgMzIpIHsKKyAgICAgICAgIG1hc2sgPSAoMSA8PCAoMzIgLSBjbnQpKSAtIDE7CistCQljZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworKyAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKyAgICAgICAgIHJlcyA9IChkID4+IGNudCkgJiBtYXNrOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworICAgICAgICAgaWYgKHNmKSB7CisgICAgICAgICAgICAgcmVzIHw9IH5tYXNrOworICAgICAgICAgfQorLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLSAgICB9IGVsc2UgaWYgKGNudCA+PSAzMikgeworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICB9CisrICAgIGVsc2UgaWYgKGNudCA+PSAzMikgeworICAgICAgICAgaWYgKHNmKSB7CisgICAgICAgICAgICAgcmVzID0gMHhmZmZmZmZmZjsKKy0JCQlTRVRfRkxBRyhGX0NGKTsKKy0JCQlDTEVBUl9GTEFHKEZfWkYpOworLQkJCVNFVF9GTEFHKEZfU0YpOworLQkJCVNFVF9GTEFHKEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSAwOworLQkJCUNMRUFSX0ZMQUcoRl9DRik7CistCQkJU0VUX0ZMQUcoRl9aRik7CistCQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCQlDTEVBUl9GTEFHKEZfUEYpOworLQkJfQorLQl9CistCXJldHVybiByZXM7CisrICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1pGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1NGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9IDA7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9QRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNITEQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBzaGxkX3dvcmQgKHUxNiBkLCB1MTYgZmlsbCwgdTggcykKKy17CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CistCistCWlmIChzIDwgMTYpIHsKKy0JCWNudCA9IHMgJSAxNjsKKy0JCWlmIChjbnQgPiAwKSB7CistCQkJcmVzID0gKGQgPDwgY250KSB8IChmaWxsID4+ICgxNi1jbnQpKTsKKy0JCQljZiA9IGQgJiAoMSA8PCAoMTYgLSBjbnQpKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSBkOworLQkJfQorLQkJaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MDAwKSA9PSAweDgwMDApIF4KKy0JCQkJCQkJCSAgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwgRl9PRik7CistCQl9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CistCQl9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMtMSkpICYgMHg4MDAwLCBGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJU0VUX0ZMQUcoRl9QRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JfQorLQlyZXR1cm4gKHUxNilyZXM7CisrdTE2Cisrc2hsZF93b3JkKHUxNiBkLCB1MTYgZmlsbCwgdTggcykKKyt7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisrCisrICAgIGlmIChzIDwgMTYpIHsKKysgICAgICAgIGNudCA9IHMgJSAxNjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgcmVzID0gKGQgPDwgY250KSB8IChmaWxsID4+ICgxNiAtIGNudCkpOworKyAgICAgICAgICAgIGNmID0gZCAmICgxIDw8ICgxNiAtIGNudCkpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSBkOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MDAwKSA9PSAweDgwMDApIF4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwgRl9PRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzIC0gMSkpICYgMHg4MDAwLCBGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9QRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgfQorKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hMRCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHNobGRfbG9uZyAodTMyIGQsIHUzMiBmaWxsLCB1OCBzKQorLXsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKy0KKy0JaWYgKHMgPCAzMikgeworLQkJY250ID0gcyAlIDMyOworLQkJaWYgKGNudCA+IDApIHsKKy0JCQlyZXMgPSAoZCA8PCBjbnQpIHwgKGZpbGwgPj4gKDMyLWNudCkpOworLQkJCWNmID0gZCAmICgxIDw8ICgzMiAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JCX0gZWxzZSB7CistCQkJcmVzID0gZDsKKy0JCX0KKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKCgoKHJlcyAmIDB4ODAwMDAwMDApID09IDB4ODAwMDAwMDApIF4KKy0JCQkJCQkJCSAgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwgRl9PRik7CistCQl9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CistCQl9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMtMSkpICYgMHg4MDAwMDAwMCwgRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCVNFVF9GTEFHKEZfUEYpOworLQkJU0VUX0ZMQUcoRl9aRik7CistCX0KKy0JcmV0dXJuIHJlczsKKyt1MzIKKytzaGxkX2xvbmcodTMyIGQsIHUzMiBmaWxsLCB1OCBzKQorK3sKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKysKKysgICAgaWYgKHMgPCAzMikgeworKyAgICAgICAgY250ID0gcyAlIDMyOworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICByZXMgPSAoZCA8PCBjbnQpIHwgKGZpbGwgPj4gKDMyIC0gY250KSk7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKDMyIC0gY250KSk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gZDsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCgoKHJlcyAmIDB4ODAwMDAwMDApID09IDB4ODAwMDAwMDApIF4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwgRl9PRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzIC0gMSkpICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfUEYpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNIUkQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBzaHJkX3dvcmQgKHUxNiBkLCB1MTYgZmlsbCwgdTggcykKKyt1MTYKKytzaHJkX3dvcmQodTE2IGQsIHUxNiBmaWxsLCB1OCBzKQorIHsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKyAKKy0JaWYgKHMgPCAxNikgeworLQkJY250ID0gcyAlIDE2OworLQkJaWYgKGNudCA+IDApIHsKKy0JCQljZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworLQkJCXJlcyA9IChkID4+IGNudCkgfCAoZmlsbCA8PCAoMTYgLSBjbnQpKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSBkOworLQkJfQorKyAgICBpZiAocyA8IDE2KSB7CisrICAgICAgICBjbnQgPSBzICUgMTY7CisrICAgICAgICBpZiAoY250ID4gMCkgeworKyAgICAgICAgICAgIGNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CisrICAgICAgICAgICAgcmVzID0gKGQgPj4gY250KSB8IChmaWxsIDw8ICgxNiAtIGNudCkpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSBkOworKyAgICAgICAgfQorIAorLQkJaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMTQpLCBGX09GKTsKKy0gICAgICAgIH0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIocmVzID4+IDE0KSwgRl9PRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgfQorLQl9IGVsc2UgeworLQkJcmVzID0gMDsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJU0VUX0ZMQUcoRl9aRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJQ0xFQVJfRkxBRyhGX1BGKTsKKyAgICAgfQorLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1BGKTsKKysgICAgfQorKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hSRCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHNocmRfbG9uZyAodTMyIGQsIHUzMiBmaWxsLCB1OCBzKQorK3UzMgorK3NocmRfbG9uZyh1MzIgZCwgdTMyIGZpbGwsIHU4IHMpCisgeworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworIAorLQlpZiAocyA8IDMyKSB7CistCQljbnQgPSBzICUgMzI7CistCQlpZiAoY250ID4gMCkgeworLQkJCWNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CistCQkJcmVzID0gKGQgPj4gY250KSB8IChmaWxsIDw8ICgzMiAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JCX0gZWxzZSB7CistCQkJcmVzID0gZDsKKy0JCX0KKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIocmVzID4+IDMwKSwgRl9PRik7CistICAgICAgICB9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CisrICAgIGlmIChzIDwgMzIpIHsKKysgICAgICAgIGNudCA9IHMgJSAzMjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgICAgICByZXMgPSAoZCA+PiBjbnQpIHwgKGZpbGwgPDwgKDMyIC0gY250KSk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gZDsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIocmVzID4+IDMwKSwgRl9PRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgfQorLQl9IGVsc2UgeworLQkJcmVzID0gMDsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJU0VUX0ZMQUcoRl9aRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJQ0xFQVJfRkxBRyhGX1BGKTsKKyAgICAgfQorLQlyZXR1cm4gcmVzOworKyAgICBlbHNlIHsKKysgICAgICAgIHJlcyA9IDA7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9QRik7CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNCQiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggc2JiX2J5dGUodTggZCwgdTggcykKKyt1OAorK3NiYl9ieXRlKHU4IGQsIHU4IHMpCisgeworLSAgICByZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgICAgIHJlZ2lzdGVyIHUzMiBiYzsKKyAKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorLQkJcmVzID0gZCAtIHMgLSAxOworLQllbHNlCistCQlyZXMgPSBkIC0gczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorKyAgICAgICAgcmVzID0gZCAtIHMgLSAxOworKyAgICBlbHNlCisrICAgICAgICByZXMgPSBkIC0gczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gNiksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiAodTgpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0JCIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgc2JiX3dvcmQodTE2IGQsIHUxNiBzKQorK3UxNgorK3NiYl93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKyAgICAgICAgIHJlcyA9IGQgLSBzIC0gMTsKKyAgICAgZWxzZQorICAgICAgICAgcmVzID0gZCAtIHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAxNCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiAodTE2KXJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTQkIgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBzYmJfbG9uZyh1MzIgZCwgdTMyIHMpCisrdTMyCisrc2JiX2xvbmcodTMyIGQsIHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGJjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBiYzsKKyAKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCisgICAgICAgICByZXMgPSBkIC0gcyAtIDE7CisgICAgIGVsc2UKKyAgICAgICAgIHJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAzMCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiByZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCisrICAgIGJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAwMDAwMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNVQiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggc3ViX2J5dGUodTggZCwgdTggcykKKyt1OAorK3N1Yl9ieXRlKHU4IGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgYmM7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlyZXMgPSBkIC0gczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCWJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gKHU4KXJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gNiksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNVQiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHN1Yl93b3JkKHUxNiBkLCB1MTYgcykKKyt1MTYKKytzdWJfd29yZCh1MTYgZCwgdTE2IHMpCisgeworLSAgICByZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgICAgIHJlZ2lzdGVyIHUzMiBiYzsKKyAKKyAgICAgcmVzID0gZCAtIHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAxNCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiAodTE2KXJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTVUIgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBzdWJfbG9uZyh1MzIgZCwgdTMyIHMpCisrdTMyCisrc3ViX2xvbmcodTMyIGQsIHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGJjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBiYzsKKyAKKy0JcmVzID0gZCAtIHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJlcyA9IGQgLSBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAzMCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiByZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCisrICAgIGJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAwMDAwMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFRFU1QgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgdGVzdF9ieXRlKHU4IGQsIHU4IHMpCisrdm9pZAorK3Rlc3RfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKy0gICAgcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorICAgICByZXMgPSBkICYgczsKKyAKKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAgICAgLyogQUYgPT0gZG9udCBjYXJlICovCistCUNMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBURVNUIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHRlc3Rfd29yZCh1MTYgZCwgdTE2IHMpCisrdm9pZAorK3Rlc3Rfd29yZCh1MTYgZCwgdTE2IHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgJiBzOworKyAgICByZXMgPSBkICYgczsKKyAKKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkvKiBBRiA9PSBkb250IGNhcmUgKi8KKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAvKiBBRiA9PSBkb250IGNhcmUgKi8KKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFRFU1QgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgdGVzdF9sb25nKHUzMiBkLCB1MzIgcykKKyt2b2lkCisrdGVzdF9sb25nKHUzMiBkLCB1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCAmIHM7CisrICAgIHJlcyA9IGQgJiBzOworIAorLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkvKiBBRiA9PSBkb250IGNhcmUgKi8KKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgLyogQUYgPT0gZG9udCBjYXJlICovCisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBYT1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IHhvcl9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKyt4b3JfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKy0JcmVnaXN0ZXIgdTggcmVzOyAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTggcmVzOyAgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkIF4gczsKKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyksIEZfUEYpOworLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICByZXMgPSBkIF4gczsKKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgWE9SIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgeG9yX3dvcmQodTE2IGQsIHUxNiBzKQorK3UxNgorK3hvcl93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistCXJlZ2lzdGVyIHUxNiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUxNiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCBeIHM7CistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgcmVzID0gZCBeIHM7CisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFhPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHhvcl9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKyt4b3JfbG9uZyh1MzIgZCwgdTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgXiBzOworLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICByZXMgPSBkIF4gczsKKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElNVUwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgaW11bF9ieXRlKHU4IHMpCisrdm9pZAorK2ltdWxfYnl0ZSh1OCBzKQorIHsKKy0JczE2IHJlcyA9IChzMTYpKChzOClNLng4Ni5SX0FMICogKHM4KXMpOworKyAgICBzMTYgcmVzID0gKHMxNikgKChzOCkgTS54ODYuUl9BTCAqIChzOCkgcyk7CisgCistCU0ueDg2LlJfQVggPSByZXM7CistCWlmICgoKE0ueDg2LlJfQUwgJiAweDgwKSA9PSAwICYmIE0ueDg2LlJfQUggPT0gMHgwMCkgfHwKKy0JCSgoTS54ODYuUl9BTCAmIDB4ODApICE9IDAgJiYgTS54ODYuUl9BSCA9PSAweEZGKSkgeworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCX0gZWxzZSB7CistCQlTRVRfRkxBRyhGX0NGKTsKKy0JCVNFVF9GTEFHKEZfT0YpOworLQl9CisrICAgIE0ueDg2LlJfQVggPSByZXM7CisrICAgIGlmICgoKE0ueDg2LlJfQUwgJiAweDgwKSA9PSAwICYmIE0ueDg2LlJfQUggPT0gMHgwMCkgfHwKKysgICAgICAgICgoTS54ODYuUl9BTCAmIDB4ODApICE9IDAgJiYgTS54ODYuUl9BSCA9PSAweEZGKSkgeworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfT0YpOworKyAgICB9CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBJTVVMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGltdWxfd29yZCh1MTYgcykKKyt2b2lkCisraW11bF93b3JkKHUxNiBzKQorIHsKKy0JczMyIHJlcyA9IChzMTYpTS54ODYuUl9BWCAqIChzMTYpczsKKysgICAgczMyIHJlcyA9IChzMTYpIE0ueDg2LlJfQVggKiAoczE2KSBzOworIAorLQlNLng4Ni5SX0FYID0gKHUxNilyZXM7CistCU0ueDg2LlJfRFggPSAodTE2KShyZXMgPj4gMTYpOworLQlpZiAoKChNLng4Ni5SX0FYICYgMHg4MDAwKSA9PSAwICYmIE0ueDg2LlJfRFggPT0gMHgwMCkgfHwKKy0JCSgoTS54ODYuUl9BWCAmIDB4ODAwMCkgIT0gMCAmJiBNLng4Ni5SX0RYID09IDB4RkYpKSB7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JfSBlbHNlIHsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQkJU0VUX0ZMQUcoRl9PRik7CistCX0KKysgICAgTS54ODYuUl9BWCA9ICh1MTYpIHJlczsKKysgICAgTS54ODYuUl9EWCA9ICh1MTYpIChyZXMgPj4gMTYpOworKyAgICBpZiAoKChNLng4Ni5SX0FYICYgMHg4MDAwKSA9PSAwICYmIE0ueDg2LlJfRFggPT0gMHgwMCkgfHwKKysgICAgICAgICgoTS54ODYuUl9BWCAmIDB4ODAwMCkgIT0gMCAmJiBNLng4Ni5SX0RYID09IDB4RkYpKSB7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9PRik7CisrICAgIH0KKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElNVUwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgaW11bF9sb25nX2RpcmVjdCh1MzIgKnJlc19sbywgdTMyKiByZXNfaGksdTMyIGQsIHUzMiBzKQorK3ZvaWQKKytpbXVsX2xvbmdfZGlyZWN0KHUzMiAqIHJlc19sbywgdTMyICogcmVzX2hpLCB1MzIgZCwgdTMyIHMpCisgeworICNpZmRlZglfX0hBU19MT05HX0xPTkdfXworLQlzNjQgcmVzID0gKHMzMilkICogKHMzMilzOworKyAgICBzNjQgcmVzID0gKHM2NCkgKHMzMikgZCAqIChzMzIpIHM7CisgCistCSpyZXNfbG8gPSAodTMyKXJlczsKKy0JKnJlc19oaSA9ICh1MzIpKHJlcyA+PiAzMik7CisrICAgICpyZXNfbG8gPSAodTMyKSByZXM7CisrICAgICpyZXNfaGkgPSAodTMyKSAocmVzID4+IDMyKTsKKyAjZWxzZQorLQl1MzIJZF9sbyxkX2hpLGRfc2lnbjsKKy0JdTMyCXNfbG8sc19oaSxzX3NpZ247CistCXUzMglybG9fbG8scmxvX2hpLHJoaV9sbzsKKy0KKy0JaWYgKChkX3NpZ24gPSBkICYgMHg4MDAwMDAwMCkgIT0gMCkKKy0JCWQgPSAtZDsKKy0JZF9sbyA9IGQgJiAweEZGRkY7CistCWRfaGkgPSBkID4+IDE2OworLQlpZiAoKHNfc2lnbiA9IHMgJiAweDgwMDAwMDAwKSAhPSAwKQorLQkJcyA9IC1zOworLQlzX2xvID0gcyAmIDB4RkZGRjsKKy0Jc19oaSA9IHMgPj4gMTY7CistCXJsb19sbyA9IGRfbG8gKiBzX2xvOworLQlybG9faGkgPSAoZF9oaSAqIHNfbG8gKyBkX2xvICogc19oaSkgKyAocmxvX2xvID4+IDE2KTsKKy0JcmhpX2xvID0gZF9oaSAqIHNfaGkgKyAocmxvX2hpID4+IDE2KTsKKy0JKnJlc19sbyA9IChybG9faGkgPDwgMTYpIHwgKHJsb19sbyAmIDB4RkZGRik7CistCSpyZXNfaGkgPSByaGlfbG87CistCWlmIChkX3NpZ24gIT0gc19zaWduKSB7CistCQlkID0gfipyZXNfbG87CistCQlzID0gKCgoZCAmIDB4RkZGRikgKyAxKSA+PiAxNikgKyAoZCA+PiAxNik7CistCQkqcmVzX2xvID0gfipyZXNfbG8rMTsKKy0JCSpyZXNfaGkgPSB+KnJlc19oaSsocyA+PiAxNik7CistCQl9CisrICAgIHUzMiBkX2xvLCBkX2hpLCBkX3NpZ247CisrICAgIHUzMiBzX2xvLCBzX2hpLCBzX3NpZ247CisrICAgIHUzMiBybG9fbG8sIHJsb19oaSwgcmhpX2xvOworKworKyAgICBpZiAoKGRfc2lnbiA9IGQgJiAweDgwMDAwMDAwKSAhPSAwKQorKyAgICAgICAgZCA9IC1kOworKyAgICBkX2xvID0gZCAmIDB4RkZGRjsKKysgICAgZF9oaSA9IGQgPj4gMTY7CisrICAgIGlmICgoc19zaWduID0gcyAmIDB4ODAwMDAwMDApICE9IDApCisrICAgICAgICBzID0gLXM7CisrICAgIHNfbG8gPSBzICYgMHhGRkZGOworKyAgICBzX2hpID0gcyA+PiAxNjsKKysgICAgcmxvX2xvID0gZF9sbyAqIHNfbG87CisrICAgIHJsb19oaSA9IChkX2hpICogc19sbyArIGRfbG8gKiBzX2hpKSArIChybG9fbG8gPj4gMTYpOworKyAgICByaGlfbG8gPSBkX2hpICogc19oaSArIChybG9faGkgPj4gMTYpOworKyAgICAqcmVzX2xvID0gKHJsb19oaSA8PCAxNikgfCAocmxvX2xvICYgMHhGRkZGKTsKKysgICAgKnJlc19oaSA9IHJoaV9sbzsKKysgICAgaWYgKGRfc2lnbiAhPSBzX3NpZ24pIHsKKysgICAgICAgIGQgPSB+KnJlc19sbzsKKysgICAgICAgIHMgPSAoKChkICYgMHhGRkZGKSArIDEpID4+IDE2KSArIChkID4+IDE2KTsKKysgICAgICAgICpyZXNfbG8gPSB+KnJlc19sbyArIDE7CisrICAgICAgICAqcmVzX2hpID0gfipyZXNfaGkgKyAocyA+PiAxNik7CisrICAgIH0KKyAjZW5kaWYKKyB9CisgCitAQCAtMjExNyw1MyArMjIzNSw1OSBAQCB2b2lkIGltdWxfbG9uZ19kaXJlY3QodTMyICpyZXNfbG8sIHUzMiogcmVzX2hpLHUzMiBkLCB1MzIgcykKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElNVUwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgaW11bF9sb25nKHUzMiBzKQorK3ZvaWQKKytpbXVsX2xvbmcodTMyIHMpCisgeworLQlpbXVsX2xvbmdfZGlyZWN0KCZNLng4Ni5SX0VBWCwmTS54ODYuUl9FRFgsTS54ODYuUl9FQVgscyk7CistCWlmICgoKE0ueDg2LlJfRUFYICYgMHg4MDAwMDAwMCkgPT0gMCAmJiBNLng4Ni5SX0VEWCA9PSAweDAwKSB8fAorLQkJKChNLng4Ni5SX0VBWCAmIDB4ODAwMDAwMDApICE9IDAgJiYgTS54ODYuUl9FRFggPT0gMHhGRikpIHsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQl9IGVsc2UgeworLQkJU0VUX0ZMQUcoRl9DRik7CistCQlTRVRfRkxBRyhGX09GKTsKKy0JfQorKyAgICBpbXVsX2xvbmdfZGlyZWN0KCZNLng4Ni5SX0VBWCwgJk0ueDg2LlJfRURYLCBNLng4Ni5SX0VBWCwgcyk7CisrICAgIGlmICgoKE0ueDg2LlJfRUFYICYgMHg4MDAwMDAwMCkgPT0gMCAmJiBNLng4Ni5SX0VEWCA9PSAweDAwKSB8fAorKyAgICAgICAgKChNLng4Ni5SX0VBWCAmIDB4ODAwMDAwMDApICE9IDAgJiYgTS54ODYuUl9FRFggPT0gMHhGRikpIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICBTRVRfRkxBRyhGX09GKTsKKysgICAgfQorIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgTVVMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIG11bF9ieXRlKHU4IHMpCisrdm9pZAorK211bF9ieXRlKHU4IHMpCisgeworLQl1MTYgcmVzID0gKHUxNikoTS54ODYuUl9BTCAqIHMpOworKyAgICB1MTYgcmVzID0gKHUxNikgKE0ueDg2LlJfQUwgKiBzKTsKKyAKKy0JTS54ODYuUl9BWCA9IHJlczsKKy0JaWYgKE0ueDg2LlJfQUggPT0gMCkgeworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCX0gZWxzZSB7CistCQlTRVRfRkxBRyhGX0NGKTsKKy0JCVNFVF9GTEFHKEZfT0YpOworLQl9CisrICAgIE0ueDg2LlJfQVggPSByZXM7CisrICAgIGlmIChNLng4Ni5SX0FIID09IDApIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICBTRVRfRkxBRyhGX09GKTsKKysgICAgfQorIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgTVVMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIG11bF93b3JkKHUxNiBzKQorK3ZvaWQKKyttdWxfd29yZCh1MTYgcykKKyB7CistCXUzMiByZXMgPSBNLng4Ni5SX0FYICogczsKKysgICAgdTMyIHJlcyA9IE0ueDg2LlJfQVggKiBzOworIAorLQlNLng4Ni5SX0FYID0gKHUxNilyZXM7CistCU0ueDg2LlJfRFggPSAodTE2KShyZXMgPj4gMTYpOworLQlpZiAoTS54ODYuUl9EWCA9PSAwKSB7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0gICAgfSBlbHNlIHsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQkJU0VUX0ZMQUcoRl9PRik7CisrICAgIE0ueDg2LlJfQVggPSAodTE2KSByZXM7CisrICAgIE0ueDg2LlJfRFggPSAodTE2KSAocmVzID4+IDE2KTsKKysgICAgaWYgKE0ueDg2LlJfRFggPT0gMCkgeworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfT0YpOworICAgICB9CisgfQorIAorQEAgLTIxNzEsMzYgKzIyOTUsMzggQEAgdm9pZCBtdWxfd29yZCh1MTYgcykKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE1VTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBtdWxfbG9uZyh1MzIgcykKKyt2b2lkCisrbXVsX2xvbmcodTMyIHMpCisgeworICNpZmRlZglfX0hBU19MT05HX0xPTkdfXworLQl1NjQgcmVzID0gKHUzMilNLng4Ni5SX0VBWCAqICh1MzIpczsKKysgICAgdTY0IHJlcyA9ICh1NjQpIE0ueDg2LlJfRUFYICogczsKKyAKKy0JTS54ODYuUl9FQVggPSAodTMyKXJlczsKKy0JTS54ODYuUl9FRFggPSAodTMyKShyZXMgPj4gMzIpOworKyAgICBNLng4Ni5SX0VBWCA9ICh1MzIpIHJlczsKKysgICAgTS54ODYuUl9FRFggPSAodTMyKSAocmVzID4+IDMyKTsKKyAjZWxzZQorLQl1MzIJYSxhX2xvLGFfaGk7CistCXUzMglzX2xvLHNfaGk7CistCXUzMglybG9fbG8scmxvX2hpLHJoaV9sbzsKKy0KKy0JYSA9IE0ueDg2LlJfRUFYOworLQlhX2xvID0gYSAmIDB4RkZGRjsKKy0JYV9oaSA9IGEgPj4gMTY7CistCXNfbG8gPSBzICYgMHhGRkZGOworLQlzX2hpID0gcyA+PiAxNjsKKy0JcmxvX2xvID0gYV9sbyAqIHNfbG87CistCXJsb19oaSA9IChhX2hpICogc19sbyArIGFfbG8gKiBzX2hpKSArIChybG9fbG8gPj4gMTYpOworLQlyaGlfbG8gPSBhX2hpICogc19oaSArIChybG9faGkgPj4gMTYpOworLQlNLng4Ni5SX0VBWCA9IChybG9faGkgPDwgMTYpIHwgKHJsb19sbyAmIDB4RkZGRik7CistCU0ueDg2LlJfRURYID0gcmhpX2xvOworKyAgICB1MzIgYSwgYV9sbywgYV9oaTsKKysgICAgdTMyIHNfbG8sIHNfaGk7CisrICAgIHUzMiBybG9fbG8sIHJsb19oaSwgcmhpX2xvOworKworKyAgICBhID0gTS54ODYuUl9FQVg7CisrICAgIGFfbG8gPSBhICYgMHhGRkZGOworKyAgICBhX2hpID0gYSA+PiAxNjsKKysgICAgc19sbyA9IHMgJiAweEZGRkY7CisrICAgIHNfaGkgPSBzID4+IDE2OworKyAgICBybG9fbG8gPSBhX2xvICogc19sbzsKKysgICAgcmxvX2hpID0gKGFfaGkgKiBzX2xvICsgYV9sbyAqIHNfaGkpICsgKHJsb19sbyA+PiAxNik7CisrICAgIHJoaV9sbyA9IGFfaGkgKiBzX2hpICsgKHJsb19oaSA+PiAxNik7CisrICAgIE0ueDg2LlJfRUFYID0gKHJsb19oaSA8PCAxNikgfCAocmxvX2xvICYgMHhGRkZGKTsKKysgICAgTS54ODYuUl9FRFggPSByaGlfbG87CisgI2VuZGlmCisgCistCWlmIChNLng4Ni5SX0VEWCA9PSAwKSB7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JfSBlbHNlIHsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQkJU0VUX0ZMQUcoRl9PRik7CisrICAgIGlmIChNLng4Ni5SX0VEWCA9PSAwKSB7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9PRik7CisgICAgIH0KKyB9CisgCitAQCAtMjIwOCwzMDkgKzIzMzQsMzE5IEBAIHZvaWQgbXVsX2xvbmcodTMyIHMpCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBJRElWIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGlkaXZfYnl0ZSh1OCBzKQorK3ZvaWQKKytpZGl2X2J5dGUodTggcykKKyB7CisgICAgIHMzMiBkdmQsIGRpdiwgbW9kOworIAorLQlkdmQgPSAoczE2KU0ueDg2LlJfQVg7CistCWlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICBkdmQgPSAoczE2KSBNLng4Ni5SX0FYOworKyAgICBpZiAocyA9PSAwKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBkaXYgPSBkdmQgLyAoczgpIHM7CisrICAgIG1vZCA9IGR2ZCAlIChzOCkgczsKKysgICAgaWYgKGFicyhkaXYpID4gMHg3ZikgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisgICAgICAgICByZXR1cm47CistCX0KKy0JZGl2ID0gZHZkIC8gKHM4KXM7CistCW1vZCA9IGR2ZCAlIChzOClzOworLQlpZiAoYWJzKGRpdikgPiAweDdmKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorLQlNLng4Ni5SX0FMID0gKHM4KSBkaXY7CistCU0ueDg2LlJfQUggPSAoczgpIG1vZDsKKysgICAgfQorKyAgICBNLng4Ni5SX0FMID0gKHM4KSBkaXY7CisrICAgIE0ueDg2LlJfQUggPSAoczgpIG1vZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElESVYgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgaWRpdl93b3JkKHUxNiBzKQorK3ZvaWQKKytpZGl2X3dvcmQodTE2IHMpCisgeworLQlzMzIgZHZkLCBkaXYsIG1vZDsKKysgICAgczMyIGR2ZCwgZGl2LCBtb2Q7CisgCistCWR2ZCA9ICgoKHMzMilNLng4Ni5SX0RYKSA8PCAxNikgfCBNLng4Ni5SX0FYOworLQlpZiAocyA9PSAwKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorLQlkaXYgPSBkdmQgLyAoczE2KXM7CistCW1vZCA9IGR2ZCAlIChzMTYpczsKKy0JaWYgKGFicyhkaXYpID4gMHg3ZmZmKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhkaXYgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShtb2QgJiAweGZmKSwgRl9QRik7CisrICAgIGR2ZCA9ICgoKHMzMikgTS54ODYuUl9EWCkgPDwgMTYpIHwgTS54ODYuUl9BWDsKKysgICAgaWYgKHMgPT0gMCkgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgZGl2ID0gZHZkIC8gKHMxNikgczsKKysgICAgbW9kID0gZHZkICUgKHMxNikgczsKKysgICAgaWYgKGFicyhkaXYpID4gMHg3ZmZmKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhkaXYgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShtb2QgJiAweGZmKSwgRl9QRik7CisgCistCU0ueDg2LlJfQVggPSAodTE2KWRpdjsKKy0JTS54ODYuUl9EWCA9ICh1MTYpbW9kOworKyAgICBNLng4Ni5SX0FYID0gKHUxNikgZGl2OworKyAgICBNLng4Ni5SX0RYID0gKHUxNikgbW9kOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSURJViBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpZGl2X2xvbmcodTMyIHMpCisrdm9pZAorK2lkaXZfbG9uZyh1MzIgcykKKyB7CisgI2lmZGVmCV9fSEFTX0xPTkdfTE9OR19fCistCXM2NCBkdmQsIGRpdiwgbW9kOworLQorLQlkdmQgPSAoKChzNjQpTS54ODYuUl9FRFgpIDw8IDMyKSB8IE0ueDg2LlJfRUFYOworLQlpZiAocyA9PSAwKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorLQlkaXYgPSBkdmQgLyAoczMyKXM7CistCW1vZCA9IGR2ZCAlIChzMzIpczsKKy0JaWYgKGFicyhkaXYpID4gMHg3ZmZmZmZmZikgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CistCQlyZXR1cm47CistCX0KKysgICAgczY0IGR2ZCwgZGl2LCBtb2Q7CisrCisrICAgIGR2ZCA9ICgoKHM2NCkgTS54ODYuUl9FRFgpIDw8IDMyKSB8IE0ueDg2LlJfRUFYOworKyAgICBpZiAocyA9PSAwKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBkaXYgPSBkdmQgLyAoczMyKSBzOworKyAgICBtb2QgPSBkdmQgJSAoczMyKSBzOworKyAgICBpZiAoYWJzKGRpdikgPiAweDdmZmZmZmZmKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorICNlbHNlCistCXMzMiBkaXYgPSAwLCBtb2Q7CistCXMzMiBoX2R2ZCA9IE0ueDg2LlJfRURYOworLQl1MzIgbF9kdmQgPSBNLng4Ni5SX0VBWDsKKy0JdTMyIGFic19zID0gcyAmIDB4N0ZGRkZGRkY7CistCXUzMiBhYnNfaF9kdmQgPSBoX2R2ZCAmIDB4N0ZGRkZGRkY7CistCXUzMiBoX3MgPSBhYnNfcyA+PiAxOworLQl1MzIgbF9zID0gYWJzX3MgPDwgMzE7CistCWludCBjb3VudGVyID0gMzE7CistCWludCBjYXJyeTsKKy0KKy0JaWYgKHMgPT0gMCkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CistCQlyZXR1cm47CistCX0KKy0JZG8geworLQkJZGl2IDw8PSAxOworLQkJY2FycnkgPSAobF9kdmQgPj0gbF9zKSA/IDAgOiAxOworLQkJCistCQlpZiAoYWJzX2hfZHZkIDwgKGhfcyArIGNhcnJ5KSkgeworLQkJCWhfcyA+Pj0gMTsKKy0JCQlsX3MgPSBhYnNfcyA8PCAoLS1jb3VudGVyKTsKKy0JCQljb250aW51ZTsKKy0JCX0gZWxzZSB7CistCQkJYWJzX2hfZHZkIC09IChoX3MgKyBjYXJyeSk7CistCQkJbF9kdmQgPSBjYXJyeSA/ICgoMHhGRkZGRkZGRiAtIGxfcykgKyBsX2R2ZCArIDEpCistCQkJCTogKGxfZHZkIC0gbF9zKTsKKy0JCQloX3MgPj49IDE7CistCQkJbF9zID0gYWJzX3MgPDwgKC0tY291bnRlcik7CistCQkJZGl2IHw9IDE7CistCQkJY29udGludWU7CistCQl9CistCQkKKy0JfSB3aGlsZSAoY291bnRlciA+IC0xKTsKKy0JLyogb3ZlcmZsb3cgKi8KKy0JaWYgKGFic19oX2R2ZCB8fCAobF9kdmQgPiBhYnNfcykpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCS8qIHNpZ24gKi8KKy0JZGl2IHw9ICgoaF9kdmQgJiAweDEwMDAwMDAwKSBeIChzICYgMHgxMDAwMDAwMCkpOworLQltb2QgPSBsX2R2ZDsKKysgICAgczMyIGRpdiA9IDAsIG1vZDsKKysgICAgczMyIGhfZHZkID0gTS54ODYuUl9FRFg7CisrICAgIHUzMiBsX2R2ZCA9IE0ueDg2LlJfRUFYOworKyAgICB1MzIgYWJzX3MgPSBzICYgMHg3RkZGRkZGRjsKKysgICAgdTMyIGFic19oX2R2ZCA9IGhfZHZkICYgMHg3RkZGRkZGRjsKKysgICAgdTMyIGhfcyA9IGFic19zID4+IDE7CisrICAgIHUzMiBsX3MgPSBhYnNfcyA8PCAzMTsKKysgICAgaW50IGNvdW50ZXIgPSAzMTsKKysgICAgaW50IGNhcnJ5OworKworKyAgICBpZiAocyA9PSAwKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBkbyB7CisrICAgICAgICBkaXYgPDw9IDE7CisrICAgICAgICBjYXJyeSA9IChsX2R2ZCA+PSBsX3MpID8gMCA6IDE7CisrCisrICAgICAgICBpZiAoYWJzX2hfZHZkIDwgKGhfcyArIGNhcnJ5KSkgeworKyAgICAgICAgICAgIGhfcyA+Pj0gMTsKKysgICAgICAgICAgICBsX3MgPSBhYnNfcyA8PCAoLS1jb3VudGVyKTsKKysgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIGFic19oX2R2ZCAtPSAoaF9zICsgY2FycnkpOworKyAgICAgICAgICAgIGxfZHZkID0gY2FycnkgPyAoKDB4RkZGRkZGRkYgLSBsX3MpICsgbF9kdmQgKyAxKQorKyAgICAgICAgICAgICAgICA6IChsX2R2ZCAtIGxfcyk7CisrICAgICAgICAgICAgaF9zID4+PSAxOworKyAgICAgICAgICAgIGxfcyA9IGFic19zIDw8ICgtLWNvdW50ZXIpOworKyAgICAgICAgICAgIGRpdiB8PSAxOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKworKyAgICB9IHdoaWxlIChjb3VudGVyID4gLTEpOworKyAgICAvKiBvdmVyZmxvdyAqLworKyAgICBpZiAoYWJzX2hfZHZkIHx8IChsX2R2ZCA+IGFic19zKSkgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgLyogc2lnbiAqLworKyAgICBkaXYgfD0gKChoX2R2ZCAmIDB4MTAwMDAwMDApIF4gKHMgJiAweDEwMDAwMDAwKSk7CisrICAgIG1vZCA9IGxfZHZkOworIAorICNlbmRpZgorLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlDTEVBUl9GTEFHKEZfU0YpOworLQlTRVRfRkxBRyhGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShtb2QgJiAweGZmKSwgRl9QRik7CisgCistCU0ueDg2LlJfRUFYID0gKHUzMilkaXY7CistCU0ueDg2LlJfRURYID0gKHUzMiltb2Q7CisrICAgIE0ueDg2LlJfRUFYID0gKHUzMikgZGl2OworKyAgICBNLng4Ni5SX0VEWCA9ICh1MzIpIG1vZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERJViBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBkaXZfYnl0ZSh1OCBzKQorK3ZvaWQKKytkaXZfYnl0ZSh1OCBzKQorIHsKKy0JdTMyIGR2ZCwgZGl2LCBtb2Q7CisrICAgIHUzMiBkdmQsIGRpdiwgbW9kOworIAorLQlkdmQgPSBNLng4Ni5SX0FYOworKyAgICBkdmQgPSBNLng4Ni5SX0FYOworICAgICBpZiAocyA9PSAwKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworICAgICAgICAgcmV0dXJuOworICAgICB9CistCWRpdiA9IGR2ZCAvICh1OClzOworLQltb2QgPSBkdmQgJSAodTgpczsKKy0JaWYgKGFicyhkaXYpID4gMHhmZikgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgIGRpdiA9IGR2ZCAvICh1OCkgczsKKysgICAgbW9kID0gZHZkICUgKHU4KSBzOworKyAgICBpZiAoYWJzKGRpdikgPiAweGZmKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKyAgICAgICAgIHJldHVybjsKKy0JfQorLQlNLng4Ni5SX0FMID0gKHU4KWRpdjsKKy0JTS54ODYuUl9BSCA9ICh1OCltb2Q7CisrICAgIH0KKysgICAgTS54ODYuUl9BTCA9ICh1OCkgZGl2OworKyAgICBNLng4Ni5SX0FIID0gKHU4KSBtb2Q7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBESVYgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgZGl2X3dvcmQodTE2IHMpCisrdm9pZAorK2Rpdl93b3JkKHUxNiBzKQorIHsKKy0JdTMyIGR2ZCwgZGl2LCBtb2Q7CisrICAgIHUzMiBkdmQsIGRpdiwgbW9kOworIAorLQlkdmQgPSAoKCh1MzIpTS54ODYuUl9EWCkgPDwgMTYpIHwgTS54ODYuUl9BWDsKKy0JaWYgKHMgPT0gMCkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgIGR2ZCA9ICgoKHUzMikgTS54ODYuUl9EWCkgPDwgMTYpIHwgTS54ODYuUl9BWDsKKysgICAgaWYgKHMgPT0gMCkgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgZGl2ID0gZHZkIC8gKHUxNikgczsKKysgICAgbW9kID0gZHZkICUgKHUxNikgczsKKysgICAgaWYgKGFicyhkaXYpID4gMHhmZmZmKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKyAgICAgICAgIHJldHVybjsKKyAgICAgfQorLQlkaXYgPSBkdmQgLyAodTE2KXM7CistCW1vZCA9IGR2ZCAlICh1MTYpczsKKy0JaWYgKGFicyhkaXYpID4gMHhmZmZmKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhkaXYgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShtb2QgJiAweGZmKSwgRl9QRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGRpdiA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JTS54ODYuUl9BWCA9ICh1MTYpZGl2OworLQlNLng4Ni5SX0RYID0gKHUxNiltb2Q7CisrICAgIE0ueDg2LlJfQVggPSAodTE2KSBkaXY7CisrICAgIE0ueDg2LlJfRFggPSAodTE2KSBtb2Q7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBESVYgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgZGl2X2xvbmcodTMyIHMpCisrdm9pZAorK2Rpdl9sb25nKHUzMiBzKQorIHsKKyAjaWZkZWYJX19IQVNfTE9OR19MT05HX18KKy0JdTY0IGR2ZCwgZGl2LCBtb2Q7CistCistCWR2ZCA9ICgoKHU2NClNLng4Ni5SX0VEWCkgPDwgMzIpIHwgTS54ODYuUl9FQVg7CistCWlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCWRpdiA9IGR2ZCAvICh1MzIpczsKKy0JbW9kID0gZHZkICUgKHUzMilzOworLQlpZiAoYWJzKGRpdikgPiAweGZmZmZmZmZmKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorKyAgICB1NjQgZHZkLCBkaXYsIG1vZDsKKysKKysgICAgZHZkID0gKCgodTY0KSBNLng4Ni5SX0VEWCkgPDwgMzIpIHwgTS54ODYuUl9FQVg7CisrICAgIGlmIChzID09IDApIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGRpdiA9IGR2ZCAvICh1MzIpIHM7CisrICAgIG1vZCA9IGR2ZCAlICh1MzIpIHM7CisrICAgIGlmIChhYnMoZGl2KSA+IDB4ZmZmZmZmZmYpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisgI2Vsc2UKKy0JczMyIGRpdiA9IDAsIG1vZDsKKy0JczMyIGhfZHZkID0gTS54ODYuUl9FRFg7CistCXUzMiBsX2R2ZCA9IE0ueDg2LlJfRUFYOworLQorLQl1MzIgaF9zID0gczsKKy0JdTMyIGxfcyA9IDA7CistCWludCBjb3VudGVyID0gMzI7CistCWludCBjYXJyeTsKKy0JCQorLQlpZiAocyA9PSAwKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorLQlkbyB7CistCQlkaXYgPDw9IDE7CistCQljYXJyeSA9IChsX2R2ZCA+PSBsX3MpID8gMCA6IDE7CistCQkKKy0JCWlmIChoX2R2ZCA8IChoX3MgKyBjYXJyeSkpIHsKKy0JCQloX3MgPj49IDE7CistCQkJbF9zID0gcyA8PCAoLS1jb3VudGVyKTsKKy0JCQljb250aW51ZTsKKy0JCX0gZWxzZSB7CistCQkJaF9kdmQgLT0gKGhfcyArIGNhcnJ5KTsKKy0JCQlsX2R2ZCA9IGNhcnJ5ID8gKCgweEZGRkZGRkZGIC0gbF9zKSArIGxfZHZkICsgMSkKKy0JCQkJOiAobF9kdmQgLSBsX3MpOworLQkJCWhfcyA+Pj0gMTsKKy0JCQlsX3MgPSBzIDw8ICgtLWNvdW50ZXIpOworLQkJCWRpdiB8PSAxOworLQkJCWNvbnRpbnVlOworLQkJfQorLQkJCistCX0gd2hpbGUgKGNvdW50ZXIgPiAtMSk7CistCS8qIG92ZXJmbG93ICovCistCWlmIChoX2R2ZCB8fCAobF9kdmQgPiBzKSkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CistCQlyZXR1cm47CistCX0KKy0JbW9kID0gbF9kdmQ7CisrICAgIHMzMiBkaXYgPSAwLCBtb2Q7CisrICAgIHMzMiBoX2R2ZCA9IE0ueDg2LlJfRURYOworKyAgICB1MzIgbF9kdmQgPSBNLng4Ni5SX0VBWDsKKysKKysgICAgdTMyIGhfcyA9IHM7CisrICAgIHUzMiBsX3MgPSAwOworKyAgICBpbnQgY291bnRlciA9IDMyOworKyAgICBpbnQgY2Fycnk7CisrCisrICAgIGlmIChzID09IDApIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGRvIHsKKysgICAgICAgIGRpdiA8PD0gMTsKKysgICAgICAgIGNhcnJ5ID0gKGxfZHZkID49IGxfcykgPyAwIDogMTsKKysKKysgICAgICAgIGlmIChoX2R2ZCA8IChoX3MgKyBjYXJyeSkpIHsKKysgICAgICAgICAgICBoX3MgPj49IDE7CisrICAgICAgICAgICAgbF9zID0gcyA8PCAoLS1jb3VudGVyKTsKKysgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIGhfZHZkIC09IChoX3MgKyBjYXJyeSk7CisrICAgICAgICAgICAgbF9kdmQgPSBjYXJyeSA/ICgoMHhGRkZGRkZGRiAtIGxfcykgKyBsX2R2ZCArIDEpCisrICAgICAgICAgICAgICAgIDogKGxfZHZkIC0gbF9zKTsKKysgICAgICAgICAgICBoX3MgPj49IDE7CisrICAgICAgICAgICAgbF9zID0gcyA8PCAoLS1jb3VudGVyKTsKKysgICAgICAgICAgICBkaXYgfD0gMTsKKysgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgIH0KKysKKysgICAgfSB3aGlsZSAoY291bnRlciA+IC0xKTsKKysgICAgLyogb3ZlcmZsb3cgKi8KKysgICAgaWYgKGhfZHZkIHx8IChsX2R2ZCA+IHMpKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBtb2QgPSBsX2R2ZDsKKyAjZW5kaWYKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ0xFQVJfRkxBRyhGX1NGKTsKKy0JU0VUX0ZMQUcoRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShtb2QgJiAweGZmKSwgRl9QRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkobW9kICYgMHhmZiksIEZfUEYpOworIAorLQlNLng4Ni5SX0VBWCA9ICh1MzIpZGl2OworLQlNLng4Ni5SX0VEWCA9ICh1MzIpbW9kOworKyAgICBNLng4Ni5SX0VBWCA9ICh1MzIpIGRpdjsKKysgICAgTS54ODYuUl9FRFggPSAodTMyKSBtb2Q7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBJTiBzdHJpbmcgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgaW5zKGludCBzaXplKQorK3ZvaWQKKytpbnMoaW50IHNpemUpCisgeworLQlpbnQgaW5jID0gc2l6ZTsKKysgICAgaW50IGluYyA9IHNpemU7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgeworLQkJaW5jID0gLXNpemU7CistCX0KKy0JaWYgKE0ueDg2Lm1vZGUgJiAoU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKSkgeworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpIHsKKysgICAgICAgIGluYyA9IC1zaXplOworKyAgICB9CisrICAgIGlmIChNLng4Ni5tb2RlICYgKFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSkpIHsKKyAgICAgICAgIC8qIGRvbnQgY2FyZSB3aGV0aGVyIFJFUEUgb3IgUkVQTkUgKi8KKyAgICAgICAgIC8qIGluIHVudGlsIENYIGlzIFpFUk8uICovCistCQl1MzIgY291bnQgPSAoKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSA/CistCQkJCQkgTS54ODYuUl9FQ1ggOiBNLng4Ni5SX0NYKTsKKysgICAgICAgIHUzMiBjb3VudCA9ICgoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpID8KKysgICAgICAgICAgICAgICAgICAgICBNLng4Ni5SX0VDWCA6IE0ueDg2LlJfQ1gpOworICAgICAgICAgc3dpdGNoIChzaXplKSB7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkgeworLQkJCQlzdG9yZV9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksCistCQkJCQkJCQkJKCpzeXNfaW5iKShNLng4Ni5SX0RYKSk7CistCQkJCU0ueDg2LlJfREkgKz0gaW5jOworKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzeXNfaW5iKSAoTS54ODYuUl9EWCkpOworKyAgICAgICAgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisgCistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkgeworLQkJCQlzdG9yZV9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksCistCQkJCQkJCQkJKCpzeXNfaW53KShNLng4Ni5SX0RYKSk7CistCQkJCU0ueDg2LlJfREkgKz0gaW5jOworKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzeXNfaW53KSAoTS54ODYuUl9EWCkpOworKyAgICAgICAgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkgeworLQkJCQlzdG9yZV9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksCistCQkJCQkJCQkJKCpzeXNfaW5sKShNLng4Ni5SX0RYKSk7CistCQkJCU0ueDg2LlJfREkgKz0gaW5jOworKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzeXNfaW5sKSAoTS54ODYuUl9EWCkpOworKyAgICAgICAgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorLQkJTS54ODYuUl9DWCA9IDA7CistCQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQlNLng4Ni5SX0VDWCA9IDA7CisrICAgICAgICBNLng4Ni5SX0NYID0gMDsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIE0ueDg2LlJfRUNYID0gMDsKKyAgICAgICAgIH0KKy0JCU0ueDg2Lm1vZGUgJj0gfihTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpOworLSAgICB9IGVsc2UgeworKyAgICAgICAgTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBzd2l0Y2ggKHNpemUpIHsKKy0gICAgICAgICAgY2FzZSAxOgorLQkJCXN0b3JlX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKy0JCQkJCQkJCSgqc3lzX2luYikoTS54ODYuUl9EWCkpOworKyAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqc3lzX2luYikgKE0ueDg2LlJfRFgpKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorLQkJCXN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKy0JCQkJCQkJCSgqc3lzX2ludykoTS54ODYuUl9EWCkpOworKyAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqc3lzX2ludykgKE0ueDg2LlJfRFgpKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorLQkJCXN0b3JlX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKy0JCQkJCQkJCSgqc3lzX2lubCkoTS54ODYuUl9EWCkpOworKyAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqc3lzX2lubCkgKE0ueDg2LlJfRFgpKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKy0JCU0ueDg2LlJfREkgKz0gaW5jOworKyAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CisgICAgIH0KKyB9CisgCitAQCAtMjUxOCw2MyArMjY1NCw2NSBAQCB2b2lkIGlucyhpbnQgc2l6ZSkKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE9VVCBzdHJpbmcgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgb3V0cyhpbnQgc2l6ZSkKKyt2b2lkCisrb3V0cyhpbnQgc2l6ZSkKKyB7CisgICAgIGludCBpbmMgPSBzaXplOworIAorLQlpZiAoQUNDRVNTX0ZMQUcoRl9ERikpIHsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSB7CisgICAgICAgICBpbmMgPSAtc2l6ZTsKKyAgICAgfQorLQlpZiAoTS54ODYubW9kZSAmIChTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpKSB7CisrICAgIGlmIChNLng4Ni5tb2RlICYgKFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSkpIHsKKyAgICAgICAgIC8qIGRvbnQgY2FyZSB3aGV0aGVyIFJFUEUgb3IgUkVQTkUgKi8KKyAgICAgICAgIC8qIG91dCB1bnRpbCBDWCBpcyBaRVJPLiAqLworLQkJdTMyIGNvdW50ID0gKChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgPworLQkJCQkJIE0ueDg2LlJfRUNYIDogTS54ODYuUl9DWCk7CisrICAgICAgICB1MzIgY291bnQgPSAoKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSA/CisrICAgICAgICAgICAgICAgICAgICAgTS54ODYuUl9FQ1ggOiBNLng4Ni5SX0NYKTsKKyAgICAgICAgIHN3aXRjaCAoc2l6ZSkgeworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pIHsKKy0JCQkJKCpzeXNfb3V0YikoTS54ODYuUl9EWCwKKy0JCQkJCQkgZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CistCQkJCU0ueDg2LlJfU0kgKz0gaW5jOworKyAgICAgICAgICAgICAgICAoKnN5c19vdXRiKSAoTS54ODYuUl9EWCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworKyAgICAgICAgICAgICAgICBNLng4Ni5SX1NJICs9IGluYzsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisgCistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkgeworLQkJCQkoKnN5c19vdXR3KShNLng4Ni5SX0RYLAorLQkJCQkJCSBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKy0JCQkJTS54ODYuUl9TSSArPSBpbmM7CisrICAgICAgICAgICAgICAgICgqc3lzX291dHcpIChNLng4Ni5SX0RYLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CisrICAgICAgICAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CistCQkJCSgqc3lzX291dGwpKE0ueDg2LlJfRFgsCistCQkJCQkJIGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworLQkJCQlNLng4Ni5SX1NJICs9IGluYzsKKysgICAgICAgICAgICAgICAgKCpzeXNfb3V0bCkgKE0ueDg2LlJfRFgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKysgICAgICAgICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisrICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKy0JCU0ueDg2LlJfQ1ggPSAwOworLQkJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJTS54ODYuUl9FQ1ggPSAwOworKyAgICAgICAgTS54ODYuUl9DWCA9IDA7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICBNLng4Ni5SX0VDWCA9IDA7CisgICAgICAgICB9CistCQlNLng4Ni5tb2RlICY9IH4oU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKTsKKy0gICAgfSBlbHNlIHsKKysgICAgICAgIE0ueDg2Lm1vZGUgJj0gfihTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpOworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgc3dpdGNoIChzaXplKSB7CistICAgICAgICAgIGNhc2UgMToKKy0JCQkoKnN5c19vdXRiKShNLng4Ni5SX0RYLAorLQkJCQkJIGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworKyAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgICgqc3lzX291dGIpIChNLng4Ni5SX0RYLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaF9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorLQkJCSgqc3lzX291dHcpKE0ueDg2LlJfRFgsCistCQkJCQkgZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgKCpzeXNfb3V0dykgKE0ueDg2LlJfRFgsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CistCQkJKCpzeXNfb3V0bCkoTS54ODYuUl9EWCwKKy0JCQkJCSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKysgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICAoKnN5c19vdXRsKSAoTS54ODYuUl9EWCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CistCQlNLng4Ni5SX1NJICs9IGluYzsKKysgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworICAgICB9CisgfQorIAorQEAgLTI1ODUsMTEgKzI3MjMsMTIgQEAgYWRkcgktIEFkZHJlc3MgdG8gZmV0Y2ggd29yZCBmcm9tCisgUkVNQVJLUzoKKyBGZXRjaGVzIGEgd29yZCBmcm9tIGVtdWxhdG9yIG1lbW9yeSB1c2luZyBhbiBhYnNvbHV0ZSBhZGRyZXNzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IG1lbV9hY2Nlc3Nfd29yZChpbnQgYWRkcikKKyt1MTYKKyttZW1fYWNjZXNzX3dvcmQoaW50IGFkZHIpCisgeworLURCKAlpZiAoQ0hFQ0tfTUVNX0FDQ0VTUygpKQorLQkgIHg4NmVtdV9jaGVja19tZW1fYWNjZXNzKGFkZHIpOykKKy0JcmV0dXJuICgqc3lzX3JkdykoYWRkcik7CisrICAgIERCKGlmIChDSEVDS19NRU1fQUNDRVNTKCkpCisrICAgICAgIHg4NmVtdV9jaGVja19tZW1fYWNjZXNzKGFkZHIpOykKKysgICAgICAgIHJldHVybiAoKnN5c19yZHcpIChhZGRyKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0yNTk4LDEyICsyNzM3LDEzIEBAIFB1c2hlcyBhIHdvcmQgb250byB0aGUgc3RhY2suCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzLCBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBwdXNoX3dvcmQodTE2IHcpCisrdm9pZAorK3B1c2hfd29yZCh1MTYgdykKKyB7CistREIoCWlmIChDSEVDS19TUF9BQ0NFU1MoKSkKKy0JICB4ODZlbXVfY2hlY2tfc3BfYWNjZXNzKCk7KQorLQlNLng4Ni5SX1NQIC09IDI7CistCSgqc3lzX3dydykoKCh1MzIpTS54ODYuUl9TUyA8PCA0KSAgKyBNLng4Ni5SX1NQLCB3KTsKKysgICAgREIoaWYgKENIRUNLX1NQX0FDQ0VTUygpKQorKyAgICAgICB4ODZlbXVfY2hlY2tfc3BfYWNjZXNzKCk7KQorKyAgICAgICAgTS54ODYuUl9TUCAtPSAyOworKyAgICAoKnN5c193cncpICgoKHUzMikgTS54ODYuUl9TUyA8PCA0KSArIE0ueDg2LlJfU1AsIHcpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTI2MTIsMTIgKzI3NTIsMTMgQEAgUHVzaGVzIGEgbG9uZyBvbnRvIHRoZSBzdGFjay4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMsIGFzICgqc3lzX3dyWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHB1c2hfbG9uZyh1MzIgdykKKyt2b2lkCisrcHVzaF9sb25nKHUzMiB3KQorIHsKKy1EQigJaWYgKENIRUNLX1NQX0FDQ0VTUygpKQorLQkgIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MoKTspCistCU0ueDg2LlJfU1AgLT0gNDsKKy0JKCpzeXNfd3JsKSgoKHUzMilNLng4Ni5SX1NTIDw8IDQpICArIE0ueDg2LlJfU1AsIHcpOworKyAgICBEQihpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCisrICAgICAgIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MoKTspCisrICAgICAgICBNLng4Ni5SX1NQIC09IDQ7CisrICAgICgqc3lzX3dybCkgKCgodTMyKSBNLng4Ni5SX1NTIDw8IDQpICsgTS54ODYuUl9TUCwgdyk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMjYyNiwxNSArMjc2NywxNiBAQCBQb3BzIGEgd29yZCBmcm9tIHRoZSBzdGFjay4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMsIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgcG9wX3dvcmQodm9pZCkKKyt1MTYKKytwb3Bfd29yZCh2b2lkKQorIHsKKy0JcmVnaXN0ZXIgdTE2IHJlczsKKysgICAgcmVnaXN0ZXIgdTE2IHJlczsKKyAKKy1EQigJaWYgKENIRUNLX1NQX0FDQ0VTUygpKQorLQkgIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MoKTspCistCXJlcyA9ICgqc3lzX3JkdykoKCh1MzIpTS54ODYuUl9TUyA8PCA0KSAgKyBNLng4Ni5SX1NQKTsKKy0JTS54ODYuUl9TUCArPSAyOworLQlyZXR1cm4gcmVzOworKyAgICBEQihpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCisrICAgICAgIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MoKTspCisrICAgICAgICByZXMgPSAoKnN5c19yZHcpICgoKHUzMikgTS54ODYuUl9TUyA8PCA0KSArIE0ueDg2LlJfU1ApOworKyAgICBNLng4Ni5SX1NQICs9IDI7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMjY0MywxNCArMjc4NSwxNSBAQCBQb3BzIGEgbG9uZyBmcm9tIHRoZSBzdGFjay4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMsIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgcG9wX2xvbmcodm9pZCkKKyt1MzIKKytwb3BfbG9uZyh2b2lkKQorIHsKKyAgICAgcmVnaXN0ZXIgdTMyIHJlczsKKyAKKy1EQigJaWYgKENIRUNLX1NQX0FDQ0VTUygpKQorLQkgIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MoKTspCistCXJlcyA9ICgqc3lzX3JkbCkoKCh1MzIpTS54ODYuUl9TUyA8PCA0KSAgKyBNLng4Ni5SX1NQKTsKKy0JTS54ODYuUl9TUCArPSA0OworKyAgICBEQihpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCisrICAgICAgIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MoKTspCisrICAgICAgICByZXMgPSAoKnN5c19yZGwpICgoKHUzMikgTS54ODYuUl9TUyA8PCA0KSArIE0ueDg2LlJfU1ApOworKyAgICBNLng4Ni5SX1NQICs9IDQ7CisgICAgIHJldHVybiByZXM7CisgfQorIAorQEAgLTI2NTgsNDUgKzI4MDEsNTkgQEAgREIoCWlmIChDSEVDS19TUF9BQ0NFU1MoKSkKKyBSRU1BUktTOgorIENQVUlEIHRha2VzIEVBWC9FQ1ggYXMgaW5wdXRzLCB3cml0ZXMgRUFYL0VCWC9FQ1gvRURYIGFzIG91dHB1dAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBjcHVpZCAodm9pZCkKKy17CistCXUzMiBmZWF0dXJlID0gTS54ODYuUl9FQVg7CistCistCXN3aXRjaCAoZmVhdHVyZSkgeworLQljYXNlIDA6CistCQkvKiBSZWdhcmRsZXNzIGlmIHdlIGhhdmUgcmVhbCBkYXRhIGZyb20gdGhlIGhhcmR3YXJlLCB0aGUgZW11bGF0b3IKKy0JCSAqIHdpbGwgb25seSBzdXBwb3J0IHVwdG8gZmVhdHVyZSAxLCB3aGljaCB3ZSBzZXQgaW4gcmVnaXN0ZXIgRUFYLgorLQkJICogUmVnaXN0ZXJzIEVCWDpFRFg6RUNYIGNvbnRhaW4gYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIENQVS4KKy0JCSAqLworLQkJTS54ODYuUl9FQVggPSAxOworLQkJLyogRUJYOkVEWDpFQ1ggPSAiR2VudWluZUludGVsIiAqLworLQkJTS54ODYuUl9FQlggPSAweDc1NmU2NTQ3OworLQkJTS54ODYuUl9FRFggPSAweDQ5NjU2ZTY5OworLQkJTS54ODYuUl9FQ1ggPSAweDZjNjU3NDZlOworLQkJYnJlYWs7CistCWNhc2UgMToKKy0JCS8qIElmIHdlIGRvbid0IGhhdmUgeDg2IGNvbXBhdGlibGUgaGFyZHdhcmUsIHdlIHJldHVybiB2YWx1ZXMgZnJvbSBhbgorLQkJICogSW50ZWwgNDg2ZHg0OyB3aGljaCB3YXMgb25lIG9mIHRoZSBmaXJzdCBwcm9jZXNzb3JzIHRvIGhhdmUgQ1BVSUQuCistCQkgKi8KKy0JCU0ueDg2LlJfRUFYID0gMHgwMDAwMDQ4MDsKKy0JCU0ueDg2LlJfRUJYID0gMHgwMDAwMDAwMDsKKy0JCU0ueDg2LlJfRUNYID0gMHgwMDAwMDAwMDsKKy0JCU0ueDg2LlJfRURYID0gMHgwMDAwMDAwMjsJLyogVk1FICovCistCQkvKiBJbiB0aGUgY2FzZSB0aGF0IHdlIGhhdmUgaGFyZHdhcmUgQ1BVSUQgaW5zdHJ1Y3Rpb24sIHdlIG1ha2Ugc3VyZQorLQkJICogdGhhdCB0aGUgZmVhdHVyZXMgcmVwb3J0ZWQgYXJlIGxpbWl0ZWQgdG8gVFNDIGFuZCBWTUUuCistCQkgKi8KKy0JCU0ueDg2LlJfRURYICY9IDB4MDAwMDAwMTI7CistCQlicmVhazsKKy0JZGVmYXVsdDoKKy0JCS8qIEZpbmFsbHksIHdlIGRvbid0IHN1cHBvcnQgYW55IGFkZGl0aW9uYWwgZmVhdHVyZXMuICBNb3N0IENQVXMKKy0JCSAqIHJldHVybiBhbGwgemVyb3Mgd2hlbiBxdWVyaWVkIGZvciBpbnZhbGlkIG9yIHVuc3VwcG9ydGVkIGZlYXR1cmUKKy0JCSAqIG51bWJlcnMuCistCQkgKi8KKy0JCU0ueDg2LlJfRUFYID0gMDsKKy0JCU0ueDg2LlJfRUJYID0gMDsKKy0JCU0ueDg2LlJfRUNYID0gMDsKKy0JCU0ueDg2LlJfRURYID0gMDsKKy0JCWJyZWFrOworLQl9CistfQorK3ZvaWQKKytjcHVpZCh2b2lkKQorK3sKKysgICAgdTMyIGZlYXR1cmUgPSBNLng4Ni5SX0VBWDsKKyAKKysjaWZkZWYgWDg2RU1VX0hBU19IV19DUFVJRAorKyAgICAvKiBJZiB0aGUgcGxhdGZvcm0gYWxsb3dzIGl0LCB3ZSB3aWxsIGJhc2Ugb3VyIHZhbHVlcyBvbiB0aGUgcmVhbAorKyAgICAgKiByZXN1bHRzIGZyb20gdGhlIENQVUlEIGluc3RydWN0aW9uLiAgV2UgbGltaXQgc3VwcG9ydCB0byB0aGUKKysgICAgICogZmlyc3QgdHdvIGZlYXR1cmVzLCBhbmQgdGhlIHJlc3VsdHMgb2YgdGhvc2UgYXJlIHNhbml0aXplZC4KKysgICAgICovCisrICAgIGlmIChmZWF0dXJlIDw9IDEpCisrICAgICAgICBod19jcHVpZCgmTS54ODYuUl9FQVgsICZNLng4Ni5SX0VCWCwgJk0ueDg2LlJfRUNYLCAmTS54ODYuUl9FRFgpOworKyNlbmRpZgorKworKyAgICBzd2l0Y2ggKGZlYXR1cmUpIHsKKysgICAgY2FzZSAwOgorKyAgICAgICAgLyogUmVnYXJkbGVzcyBpZiB3ZSBoYXZlIHJlYWwgZGF0YSBmcm9tIHRoZSBoYXJkd2FyZSwgdGhlIGVtdWxhdG9yCisrICAgICAgICAgKiB3aWxsIG9ubHkgc3VwcG9ydCB1cHRvIGZlYXR1cmUgMSwgd2hpY2ggd2Ugc2V0IGluIHJlZ2lzdGVyIEVBWC4KKysgICAgICAgICAqIFJlZ2lzdGVycyBFQlg6RURYOkVDWCBjb250YWluIGEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBDUFUuCisrICAgICAgICAgKi8KKysgICAgICAgIE0ueDg2LlJfRUFYID0gMTsKKysjaWZuZGVmIFg4NkVNVV9IQVNfSFdfQ1BVSUQKKysgICAgICAgIC8qIEVCWDpFRFg6RUNYID0gIkdlbnVpbmVJbnRlbCIgKi8KKysgICAgICAgIE0ueDg2LlJfRUJYID0gMHg3NTZlNjU0NzsKKysgICAgICAgIE0ueDg2LlJfRURYID0gMHg0OTY1NmU2OTsKKysgICAgICAgIE0ueDg2LlJfRUNYID0gMHg2YzY1NzQ2ZTsKKysjZW5kaWYKKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIDE6CisrI2lmbmRlZiBYODZFTVVfSEFTX0hXX0NQVUlECisrICAgICAgICAvKiBJZiB3ZSBkb24ndCBoYXZlIHg4NiBjb21wYXRpYmxlIGhhcmR3YXJlLCB3ZSByZXR1cm4gdmFsdWVzIGZyb20gYW4KKysgICAgICAgICAqIEludGVsIDQ4NmR4NDsgd2hpY2ggd2FzIG9uZSBvZiB0aGUgZmlyc3QgcHJvY2Vzc29ycyB0byBoYXZlIENQVUlELgorKyAgICAgICAgICovCisrICAgICAgICBNLng4Ni5SX0VBWCA9IDB4MDAwMDA0ODA7CisrICAgICAgICBNLng4Ni5SX0VCWCA9IDB4MDAwMDAwMDA7CisrICAgICAgICBNLng4Ni5SX0VDWCA9IDB4MDAwMDAwMDA7CisrICAgICAgICBNLng4Ni5SX0VEWCA9IDB4MDAwMDAwMDI7ICAgICAgIC8qIFZNRSAqLworKyNlbHNlCisrICAgICAgICAvKiBJbiB0aGUgY2FzZSB0aGF0IHdlIGhhdmUgaGFyZHdhcmUgQ1BVSUQgaW5zdHJ1Y3Rpb24sIHdlIG1ha2Ugc3VyZQorKyAgICAgICAgICogdGhhdCB0aGUgZmVhdHVyZXMgcmVwb3J0ZWQgYXJlIGxpbWl0ZWQgdG8gVFNDIGFuZCBWTUUuCisrICAgICAgICAgKi8KKysgICAgICAgIE0ueDg2LlJfRURYICY9IDB4MDAwMDAwMTI7CisrI2VuZGlmCisrICAgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICAgIC8qIEZpbmFsbHksIHdlIGRvbid0IHN1cHBvcnQgYW55IGFkZGl0aW9uYWwgZmVhdHVyZXMuICBNb3N0IENQVXMKKysgICAgICAgICAqIHJldHVybiBhbGwgemVyb3Mgd2hlbiBxdWVyaWVkIGZvciBpbnZhbGlkIG9yIHVuc3VwcG9ydGVkIGZlYXR1cmUKKysgICAgICAgICAqIG51bWJlcnMuCisrICAgICAgICAgKi8KKysgICAgICAgIE0ueDg2LlJfRUFYID0gMDsKKysgICAgICAgIE0ueDg2LlJfRUJYID0gMDsKKysgICAgICAgIE0ueDg2LlJfRUNYID0gMDsKKysgICAgICAgIE0ueDg2LlJfRURYID0gMDsKKysgICAgICAgIGJyZWFrOworKyAgICB9CisrfQorZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3N5cy5jIGIvbGlicy94ODZlbXUvc3lzLmMKK2luZGV4IDRkOTBlYTMuLmM1MTRkZGUgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS9zeXMuYworKysrIGIvbGlicy94ODZlbXUvc3lzLmMKK0BAIC00NywyMjMgKzQ3LDEzMyBAQAorICNpbmNsdWRlICJ4ODZlbXUvcHJpbV9vcHMuaCIKKyAjaWZuZGVmIE5PX1NZU19IRUFERVJTCisgI2luY2x1ZGUgPHN0cmluZy5oPgorLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKyNlbmRpZgorIAorLVg4NkVNVV9zeXNFbnYJCV9YODZFTVVfZW52OwkJLyogR2xvYmFsIGVtdWxhdG9yIG1hY2hpbmUgc3RhdGUgKi8KKy1YODZFTVVfaW50ckZ1bmNzCV9YODZFTVVfaW50clRhYlsyNTZdOworKyNpZmRlZiBfX0dOVUNfXworIAorLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW1wbGVtZW50YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCistI2lmIGRlZmluZWQoX19hbHBoYV9fKSB8fCBkZWZpbmVkKF9fYWxwaGEpCistLyogdG8gY29wZSB3aXRoIGJyb2tlbiBlZ2NzLTEuMS4yIDotKCgoKCAqLworLQorLSNkZWZpbmUgQUxQSEFfVUFMT0FEUworLS8qCistICogaW5saW5lIGZ1bmN0aW9ucyB0byBkbyB1bmFsaWduZWQgYWNjZXNzZXMKKy0gKiBmcm9tIGxpbnV4L2luY2x1ZGUvYXNtLWFscGhhL3VuYWxpZ25lZC5oCistICovCistCistLyoKKy0gKiBFR0NTIDEuMSBrbm93cyBhYm91dCBhcmJpdHJhcnkgdW5hbGlnbmVkIGxvYWRzLiAgRGVmaW5lIHNvbWUKKy0gKiBwYWNrZWQgc3RydWN0dXJlcyB0byB0YWxrIGFib3V0IHN1Y2ggdGhpbmdzIHdpdGguCistICovCistCistI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gPiAyKSB8fCAoX19HTlVDX01JTk9SX18gPj0gOTEpKQorLXN0cnVjdCBfX3VuYV91NjQgeyB1bnNpZ25lZCBsb25nICB4IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyB9OworLXN0cnVjdCBfX3VuYV91MzIgeyB1bnNpZ25lZCBpbnQgICB4IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyB9OworLXN0cnVjdCBfX3VuYV91MTYgeyB1bnNpZ25lZCBzaG9ydCB4IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyB9OworLSNlbmRpZgorKy8qIERlZmluZSBzb21lIHBhY2tlZCBzdHJ1Y3R1cmVzIHRvIHVzZSB3aXRoIHVuYWxpZ25lZCBhY2Nlc3NlcyAqLworKworK3N0cnVjdCBfX3VuYV91NjQgeworKyAgICB1NjQgeCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisrfTsKKytzdHJ1Y3QgX191bmFfdTMyIHsKKysgICAgdTMyIHggX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworK307Cisrc3RydWN0IF9fdW5hX3UxNiB7CisrICAgIHUxNiB4IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyt9OworKworKy8qIEVsZW1lbnRhbCB1bmFsaWduZWQgbG9hZHMgKi8KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxkcV91KHVuc2lnbmVkIGxvbmcgKiByMTEpCisrc3RhdGljIF9faW5saW5lX18gdTY0CisrbGRxX3UodTY0ICogcCkKKyB7CistI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gPiAyKSB8fCAoX19HTlVDX01JTk9SX18gPj0gOTEpKQorLQljb25zdCBzdHJ1Y3QgX191bmFfdTY0ICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3U2NCAqKSByMTE7CistCXJldHVybiBwdHItPng7CistI2Vsc2UKKy0JdW5zaWduZWQgbG9uZyByMSxyMjsKKy0JX19hc21fXygibGRxX3UgJTAsJTNcblx0IgorLQkJImxkcV91ICUxLCU0XG5cdCIKKy0JCSJleHRxbCAlMCwlMiwlMFxuXHQiCistCQkiZXh0cWggJTEsJTIsJTEiCistCQk6Ij0mciIgKHIxKSwgIj0mciIgKHIyKQorLQkJOiJyIiAocjExKSwKKy0JCSAibSIgKCpyMTEpLAorLQkJICJtIiAoKihjb25zdCB1bnNpZ25lZCBsb25nICopKDcrKGNoYXIgKikgcjExKSkpOworLQlyZXR1cm4gcjEgfCByMjsKKy0jZW5kaWYKKysgICAgY29uc3Qgc3RydWN0IF9fdW5hX3U2NCAqcHRyID0gKGNvbnN0IHN0cnVjdCBfX3VuYV91NjQgKikgcDsKKysKKysgICAgcmV0dXJuIHB0ci0+eDsKKyB9CisgCistc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsZGxfdSh1bnNpZ25lZCBpbnQgKiByMTEpCisrc3RhdGljIF9faW5saW5lX18gdTMyCisrbGRsX3UodTMyICogcCkKKyB7CistI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gPiAyKSB8fCAoX19HTlVDX01JTk9SX18gPj0gOTEpKQorLQljb25zdCBzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3UzMiAqKSByMTE7CistCXJldHVybiBwdHItPng7CistI2Vsc2UKKy0JdW5zaWduZWQgbG9uZyByMSxyMjsKKy0JX19hc21fXygibGRxX3UgJTAsJTNcblx0IgorLQkJImxkcV91ICUxLCU0XG5cdCIKKy0JCSJleHRsbCAlMCwlMiwlMFxuXHQiCistCQkiZXh0bGggJTEsJTIsJTEiCistCQk6Ij0mciIgKHIxKSwgIj0mciIgKHIyKQorLQkJOiJyIiAocjExKSwKKy0JCSAibSIgKCpyMTEpLAorLQkJICJtIiAoKihjb25zdCB1bnNpZ25lZCBsb25nICopKDMrKGNoYXIgKikgcjExKSkpOworLQlyZXR1cm4gcjEgfCByMjsKKy0jZW5kaWYKKysgICAgY29uc3Qgc3RydWN0IF9fdW5hX3UzMiAqcHRyID0gKGNvbnN0IHN0cnVjdCBfX3VuYV91MzIgKikgcDsKKysKKysgICAgcmV0dXJuIHB0ci0+eDsKKyB9CisgCistc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsZHdfdSh1bnNpZ25lZCBzaG9ydCAqIHIxMSkKKytzdGF0aWMgX19pbmxpbmVfXyB1MTYKKytsZHdfdSh1MTYgKiBwKQorIHsKKy0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDIpIHx8IChfX0dOVUNfTUlOT1JfXyA+PSA5MSkpCistCWNvbnN0IHN0cnVjdCBfX3VuYV91MTYgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTE2ICopIHIxMTsKKy0JcmV0dXJuIHB0ci0+eDsKKy0jZWxzZQorLQl1bnNpZ25lZCBsb25nIHIxLHIyOworLQlfX2FzbV9fKCJsZHFfdSAlMCwlM1xuXHQiCistCQkibGRxX3UgJTEsJTRcblx0IgorLQkJImV4dHdsICUwLCUyLCUwXG5cdCIKKy0JCSJleHR3aCAlMSwlMiwlMSIKKy0JCToiPSZyIiAocjEpLCAiPSZyIiAocjIpCistCQk6InIiIChyMTEpLAorLQkJICJtIiAoKnIxMSksCistCQkgIm0iICgqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKikoMSsoY2hhciAqKSByMTEpKSk7CistCXJldHVybiByMSB8IHIyOworLSNlbmRpZgorKyAgICBjb25zdCBzdHJ1Y3QgX191bmFfdTE2ICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3UxNiAqKSBwOworKworKyAgICByZXR1cm4gcHRyLT54OworIH0KKyAKKy0vKgorLSAqIEVsZW1lbnRhbCB1bmFsaWduZWQgc3RvcmVzIAorLSAqLworKy8qIEVsZW1lbnRhbCB1bmFsaWduZWQgc3RvcmVzICovCisgCistc3RhdGljIF9faW5saW5lX18gdm9pZCBzdHFfdSh1bnNpZ25lZCBsb25nIHI1LCB1bnNpZ25lZCBsb25nICogcjExKQorK3N0YXRpYyBfX2lubGluZV9fIHZvaWQKKytzdHFfdSh1NjQgdmFsLCB1NjQgKiBwKQorIHsKKy0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDIpIHx8IChfX0dOVUNfTUlOT1JfXyA+PSA5MSkpCistCXN0cnVjdCBfX3VuYV91NjQgKnB0ciA9IChzdHJ1Y3QgX191bmFfdTY0ICopIHIxMTsKKy0JcHRyLT54ID0gcjU7CistI2Vsc2UKKy0JdW5zaWduZWQgbG9uZyByMSxyMixyMyxyNDsKKy0KKy0JX19hc21fXygibGRxX3UgJTMsJTFcblx0IgorLQkJImxkcV91ICUyLCUwXG5cdCIKKy0JCSJpbnNxaCAlNiwlNywlNVxuXHQiCistCQkiaW5zcWwgJTYsJTcsJTRcblx0IgorLQkJIm1za3FoICUzLCU3LCUzXG5cdCIKKy0JCSJtc2txbCAlMiwlNywlMlxuXHQiCistCQkiYmlzICUzLCU1LCUzXG5cdCIKKy0JCSJiaXMgJTIsJTQsJTJcblx0IgorLQkJInN0cV91ICUzLCUxXG5cdCIKKy0JCSJzdHFfdSAlMiwlMCIKKy0JCToiPW0iICgqcjExKSwKKy0JCSAiPW0iICgqKHVuc2lnbmVkIGxvbmcgKikoNysoY2hhciAqKSByMTEpKSwKKy0JCSAiPSZyIiAocjEpLCAiPSZyIiAocjIpLCAiPSZyIiAocjMpLCAiPSZyIiAocjQpCistCQk6InIiIChyNSksICJyIiAocjExKSk7CistI2VuZGlmCisrICAgIHN0cnVjdCBfX3VuYV91NjQgKnB0ciA9IChzdHJ1Y3QgX191bmFfdTY0ICopIHA7CisrCisrICAgIHB0ci0+eCA9IHZhbDsKKyB9CisgCistc3RhdGljIF9faW5saW5lX18gdm9pZCBzdGxfdSh1bnNpZ25lZCBsb25nIHI1LCB1bnNpZ25lZCBpbnQgKiByMTEpCisrc3RhdGljIF9faW5saW5lX18gdm9pZAorK3N0bF91KHUzMiB2YWwsIHUzMiAqIHApCisgeworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID4gMikgfHwgKF9fR05VQ19NSU5PUl9fID49IDkxKSkKKy0Jc3RydWN0IF9fdW5hX3UzMiAqcHRyID0gKHN0cnVjdCBfX3VuYV91MzIgKikgcjExOworLQlwdHItPnggPSByNTsKKy0jZWxzZQorLQl1bnNpZ25lZCBsb25nIHIxLHIyLHIzLHI0OworLQorLQlfX2FzbV9fKCJsZHFfdSAlMywlMVxuXHQiCistCQkibGRxX3UgJTIsJTBcblx0IgorLQkJImluc2xoICU2LCU3LCU1XG5cdCIKKy0JCSJpbnNsbCAlNiwlNywlNFxuXHQiCistCQkibXNrbGggJTMsJTcsJTNcblx0IgorLQkJIm1za2xsICUyLCU3LCUyXG5cdCIKKy0JCSJiaXMgJTMsJTUsJTNcblx0IgorLQkJImJpcyAlMiwlNCwlMlxuXHQiCistCQkic3RxX3UgJTMsJTFcblx0IgorLQkJInN0cV91ICUyLCUwIgorLQkJOiI9bSIgKCpyMTEpLAorLQkJICI9bSIgKCoodW5zaWduZWQgbG9uZyAqKSgzKyhjaGFyICopIHIxMSkpLAorLQkJICI9JnIiIChyMSksICI9JnIiIChyMiksICI9JnIiIChyMyksICI9JnIiIChyNCkKKy0JCToiciIgKHI1KSwgInIiIChyMTEpKTsKKy0jZW5kaWYKKysgICAgc3RydWN0IF9fdW5hX3UzMiAqcHRyID0gKHN0cnVjdCBfX3VuYV91MzIgKikgcDsKKysKKysgICAgcHRyLT54ID0gdmFsOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHN0d191KHVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIHNob3J0ICogcjExKQorK3N0YXRpYyBfX2lubGluZV9fIHZvaWQKKytzdHdfdSh1MTYgdmFsLCB1MTYgKiBwKQorIHsKKy0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDIpIHx8IChfX0dOVUNfTUlOT1JfXyA+PSA5MSkpCistCXN0cnVjdCBfX3VuYV91MTYgKnB0ciA9IChzdHJ1Y3QgX191bmFfdTE2ICopIHIxMTsKKy0JcHRyLT54ID0gcjU7CistI2Vsc2UKKy0JdW5zaWduZWQgbG9uZyByMSxyMixyMyxyNDsKKy0KKy0JX19hc21fXygibGRxX3UgJTMsJTFcblx0IgorLQkJImxkcV91ICUyLCUwXG5cdCIKKy0JCSJpbnN3aCAlNiwlNywlNVxuXHQiCistCQkiaW5zd2wgJTYsJTcsJTRcblx0IgorLQkJIm1za3doICUzLCU3LCUzXG5cdCIKKy0JCSJtc2t3bCAlMiwlNywlMlxuXHQiCistCQkiYmlzICUzLCU1LCUzXG5cdCIKKy0JCSJiaXMgJTIsJTQsJTJcblx0IgorLQkJInN0cV91ICUzLCUxXG5cdCIKKy0JCSJzdHFfdSAlMiwlMCIKKy0JCToiPW0iICgqcjExKSwKKy0JCSAiPW0iICgqKHVuc2lnbmVkIGxvbmcgKikoMSsoY2hhciAqKSByMTEpKSwKKy0JCSAiPSZyIiAocjEpLCAiPSZyIiAocjIpLCAiPSZyIiAocjMpLCAiPSZyIiAocjQpCistCQk6InIiIChyNSksICJyIiAocjExKSk7CistI2VuZGlmCisrICAgIHN0cnVjdCBfX3VuYV91MTYgKnB0ciA9IChzdHJ1Y3QgX191bmFfdTE2ICopIHA7CisrCisrICAgIHB0ci0+eCA9IHZhbDsKKyB9CisrI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhX19HTlVDX18gKi8KKyAKKy0jZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fIDwgMykpICYmIFwKKy0gICAgICAgICAgICAgKGRlZmluZWQgKF9faWE2NF9fKSB8fCBkZWZpbmVkIChpYTY0X18pKQorLSNkZWZpbmUgSUE2NF9VQUxPQURTCistLyoKKy0gKiBFR0NTIDEuMSBrbm93cyBhYm91dCBhcmJpdHJhcnkgdW5hbGlnbmVkIGxvYWRzLiAgRGVmaW5lIHNvbWUKKy0gKiBwYWNrZWQgc3RydWN0dXJlcyB0byB0YWxrIGFib3V0IHN1Y2ggdGhpbmdzIHdpdGguCistICovCistc3RydWN0IF9fdW5hX3U2NCB7IHVuc2lnbmVkIGxvbmcgIHggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IH07Cistc3RydWN0IF9fdW5hX3UzMiB7IHVuc2lnbmVkIGludCAgIHggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IH07Cistc3RydWN0IF9fdW5hX3UxNiB7IHVuc2lnbmVkIHNob3J0IHggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IH07CistCistc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZworLV9fdWxkcSAoY29uc3QgdW5zaWduZWQgbG9uZyAqIHIxMSkKKytzdGF0aWMgX19pbmxpbmVfXyB1NjQKKytsZHFfdSh1NjQgKiBwKQorIHsKKy0gICAgY29uc3Qgc3RydWN0IF9fdW5hX3U2NCAqcHRyID0gKGNvbnN0IHN0cnVjdCBfX3VuYV91NjQgKikgcjExOworLSAgICByZXR1cm4gcHRyLT54OworKyAgICB1NjQgcmV0OworKworKyAgICBtZW1tb3ZlKCZyZXQsIHAsIHNpemVvZigqcCkpOworKyAgICByZXR1cm4gcmV0OworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCistdWxkbCAoY29uc3QgdW5zaWduZWQgaW50ICogcjExKQorK3N0YXRpYyBfX2lubGluZV9fIHUzMgorK2xkbF91KHUzMiAqIHApCisgeworLSAgICBjb25zdCBzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3UzMiAqKSByMTE7CistICAgIHJldHVybiBwdHItPng7CisrICAgIHUzMiByZXQ7CisrCisrICAgIG1lbW1vdmUoJnJldCwgcCwgc2l6ZW9mKCpwKSk7CisrICAgIHJldHVybiByZXQ7CisgfQorIAorLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKKy11bGR3IChjb25zdCB1bnNpZ25lZCBzaG9ydCAqIHIxMSkKKytzdGF0aWMgX19pbmxpbmVfXyB1MTYKKytsZHdfdSh1MTYgKiBwKQorIHsKKy0gICAgY29uc3Qgc3RydWN0IF9fdW5hX3UxNiAqcHRyID0gKGNvbnN0IHN0cnVjdCBfX3VuYV91MTYgKikgcjExOworLSAgICByZXR1cm4gcHRyLT54OworKyAgICB1MTYgcmV0OworKworKyAgICBtZW1tb3ZlKCZyZXQsIHAsIHNpemVvZigqcCkpOworKyAgICByZXR1cm4gcmV0OworIH0KKyAKKyBzdGF0aWMgX19pbmxpbmVfXyB2b2lkCistdXN0cSAodW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgbG9uZyAqIHIxMSkKKytzdHFfdSh1NjQgdmFsLCB1NjQgKiBwKQorIHsKKy0gICAgc3RydWN0IF9fdW5hX3U2NCAqcHRyID0gKHN0cnVjdCBfX3VuYV91NjQgKikgcjExOworLSAgICBwdHItPnggPSByNTsKKysgICAgdTY0IHRtcCA9IHZhbDsKKysKKysgICAgbWVtbW92ZShwLCAmdG1wLCBzaXplb2YoKnApKTsKKyB9CisgCisgc3RhdGljIF9faW5saW5lX18gdm9pZAorLXVzdGwgKHVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIGludCAqIHIxMSkKKytzdGxfdSh1MzIgdmFsLCB1MzIgKiBwKQorIHsKKy0gICAgc3RydWN0IF9fdW5hX3UzMiAqcHRyID0gKHN0cnVjdCBfX3VuYV91MzIgKikgcjExOworLSAgICBwdHItPnggPSByNTsKKysgICAgdTMyIHRtcCA9IHZhbDsKKysKKysgICAgbWVtbW92ZShwLCAmdG1wLCBzaXplb2YoKnApKTsKKyB9CisgCisgc3RhdGljIF9faW5saW5lX18gdm9pZAorLXVzdHcgKHVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIHNob3J0ICogcjExKQorK3N0d191KHUxNiB2YWwsIHUxNiAqIHApCisgeworLSAgICBzdHJ1Y3QgX191bmFfdTE2ICpwdHIgPSAoc3RydWN0IF9fdW5hX3UxNiAqKSByMTE7CistICAgIHB0ci0+eCA9IHI1OworKyAgICB1MTYgdG1wID0gdmFsOworKworKyAgICBtZW1tb3ZlKHAsICZ0bXAsIHNpemVvZigqcCkpOworIH0KKyAKKy0jZW5kaWYKKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fR05VQ19fICovCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbCBWYXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKytYODZFTVVfc3lzRW52IF9YODZFTVVfZW52OyAgICAgIC8qIEdsb2JhbCBlbXVsYXRvciBtYWNoaW5lIHN0YXRlICovCisrWDg2RU1VX2ludHJGdW5jcyBfWDg2RU1VX2ludHJUYWJbMjU2XTsKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEltcGxlbWVudGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUEFSQU1FVEVSUzoKK0BAIC0yNzUsMTkgKzE4NSwyMCBAQCBCeXRlIHZhbHVlIHJlYWQgZnJvbSBlbXVsYXRvciBtZW1vcnkuCisgUkVNQVJLUzoKKyBSZWFkcyBhIGJ5dGUgdmFsdWUgZnJvbSB0aGUgZW11bGF0b3IgbWVtb3J5LiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IFg4NkFQSSByZGIoCistICAgIHUzMiBhZGRyKQorK3U4IFg4NkFQSQorK3JkYih1MzIgYWRkcikKKyB7CistCXU4IHZhbDsKKy0KKy0JaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gMSkgeworLQkJREIocHJpbnRrKCJtZW1fcmVhZDogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOykKKy0JCUhBTFRfU1lTKCk7CistCQl9CistCXZhbCA9ICoodTgqKShNLm1lbV9iYXNlICsgYWRkcik7CistREIoCWlmIChERUJVR19NRU1fVFJBQ0UoKSkKKy0JCXByaW50aygiJSMwOHggMSAtPiAlI3hcbiIsIGFkZHIsIHZhbCk7KQorLQlyZXR1cm4gdmFsOworKyAgICB1OCB2YWw7CisrCisrICAgIGlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDEpIHsKKysgICAgICAgIERCKHByaW50aygibWVtX3JlYWQ6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTsKKysgICAgICAgICAgICApCisrICAgICAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgfQorKyAgICB2YWwgPSAqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkcik7CisrICAgIERCKGlmIChERUJVR19NRU1fVFJBQ0UoKSkKKysgICAgICAgcHJpbnRrKCIlIzA4eCAxIC0+ICUjeFxuIiwgYWRkciwgdmFsKTspCisrICAgICAgICByZXR1cm4gdmFsOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTMwMCwzMiArMjExLDI3IEBAIFdvcmQgdmFsdWUgcmVhZCBmcm9tIGVtdWxhdG9yIG1lbW9yeS4KKyBSRU1BUktTOgorIFJlYWRzIGEgd29yZCB2YWx1ZSBmcm9tIHRoZSBlbXVsYXRvciBtZW1vcnkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgWDg2QVBJIHJkdygKKy0JdTMyIGFkZHIpCisrdTE2IFg4NkFQSQorK3Jkdyh1MzIgYWRkcikKKyB7CistCXUxNiB2YWwgPSAwOworKyAgICB1MTYgdmFsID0gMDsKKyAKKy0JaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gMikgeworLQkJREIocHJpbnRrKCJtZW1fcmVhZDogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOykKKy0JCUhBTFRfU1lTKCk7CistCQl9CisrICAgIGlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDIpIHsKKysgICAgICAgIERCKHByaW50aygibWVtX3JlYWQ6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTsKKysgICAgICAgICAgICApCisrICAgICAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgfQorICNpZmRlZiBfX0JJR19FTkRJQU5fXworLQlpZiAoYWRkciAmIDB4MSkgeworLQkJdmFsID0gKCoodTgqKShNLm1lbV9iYXNlICsgYWRkcikgfAorLQkJCSAgKCoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDEpIDw8IDgpKTsKKy0JCX0KKy0JZWxzZQorLSNlbmRpZgorLSNpZiBkZWZpbmVkKEFMUEhBX1VBTE9BRFMpCistCQl2YWwgPSBsZHdfdSgodTE2KikoTS5tZW1fYmFzZSArIGFkZHIpKTsKKy0jZWxpZiAgZGVmaW5lZChJQTY0X1VBTE9BRFMpCistICAgICAgdmFsID0gdWxkdygodTE2KikoTS5tZW1fYmFzZSArIGFkZHIpKTsKKy0jZWxzZQorLQkJdmFsID0gKih1MTYqKShNLm1lbV9iYXNlICsgYWRkcik7CisrICAgIGlmIChhZGRyICYgMHgxKSB7CisrICAgICAgICB2YWwgPSAoKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIpIHwKKysgICAgICAgICAgICAgICAoKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAxKSA8PCA4KSk7CisrICAgIH0KKysgICAgZWxzZQorICNlbmRpZgorLQkJREIoCWlmIChERUJVR19NRU1fVFJBQ0UoKSkKKy0JCXByaW50aygiJSMwOHggMiAtPiAlI3hcbiIsIGFkZHIsIHZhbCk7KQorLSAgICByZXR1cm4gdmFsOworKyAgICAgICAgdmFsID0gbGR3X3UoKHUxNiAqKSAoTS5tZW1fYmFzZSArIGFkZHIpKTsKKysgICAgREIoaWYgKERFQlVHX01FTV9UUkFDRSgpKQorKyAgICAgICBwcmludGsoIiUjMDh4IDIgLT4gJSN4XG4iLCBhZGRyLCB2YWwpOykKKysgICAgICAgIHJldHVybiB2YWw7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzM3LDM0ICsyNDMsMjkgQEAgTG9uZyB2YWx1ZSByZWFkIGZyb20gZW11bGF0b3IgbWVtb3J5LgorIFJFTUFSS1M6CisgUmVhZHMgYSBsb25nIHZhbHVlIGZyb20gdGhlIGVtdWxhdG9yIG1lbW9yeS4gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgWDg2QVBJIHJkbCgKKy0JdTMyIGFkZHIpCisrdTMyIFg4NkFQSQorK3JkbCh1MzIgYWRkcikKKyB7CistCXUzMiB2YWwgPSAwOworKyAgICB1MzIgdmFsID0gMDsKKyAKKy0JaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gNCkgeworLQkJREIocHJpbnRrKCJtZW1fcmVhZDogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOykKKy0JCUhBTFRfU1lTKCk7CistCQl9CisrICAgIGlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDQpIHsKKysgICAgICAgIERCKHByaW50aygibWVtX3JlYWQ6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTsKKysgICAgICAgICAgICApCisrICAgICAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgfQorICNpZmRlZiBfX0JJR19FTkRJQU5fXworLQlpZiAoYWRkciAmIDB4MykgeworLQkJdmFsID0gKCoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDApIHwKKy0JCQkgICgqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAxKSA8PCA4KSB8CistCQkJICAoKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMikgPDwgMTYpIHwKKy0JCQkgICgqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAzKSA8PCAyNCkpOworLQkJfQorLQllbHNlCistI2VuZGlmCistI2lmIGRlZmluZWQoQUxQSEFfVUFMT0FEUykKKy0JCXZhbCA9IGxkbF91KCh1MzIqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbGlmICBkZWZpbmVkKElBNjRfVUFMT0FEUykKKy0gICAgICAgIHZhbCA9IHVsZGwoKHUzMiopKE0ubWVtX2Jhc2UgKyBhZGRyKSk7CistI2Vsc2UKKy0JCXZhbCA9ICoodTMyKikoTS5tZW1fYmFzZSArIGFkZHIpOworKyAgICBpZiAoYWRkciAmIDB4MykgeworKyAgICAgICAgdmFsID0gKCoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMCkgfAorKyAgICAgICAgICAgICAgICgqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDEpIDw8IDgpIHwKKysgICAgICAgICAgICAgICAoKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAyKSA8PCAxNikgfAorKyAgICAgICAgICAgICAgICgqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDMpIDw8IDI0KSk7CisrICAgIH0KKysgICAgZWxzZQorICNlbmRpZgorLURCKAlpZiAoREVCVUdfTUVNX1RSQUNFKCkpCistCQlwcmludGsoIiUjMDh4IDQgLT4gJSN4XG4iLCBhZGRyLCB2YWwpOykKKy0JcmV0dXJuIHZhbDsKKysgICAgICAgIHZhbCA9IGxkbF91KCh1MzIgKikgKE0ubWVtX2Jhc2UgKyBhZGRyKSk7CisrICAgIERCKGlmIChERUJVR19NRU1fVFJBQ0UoKSkKKysgICAgICAgcHJpbnRrKCIlIzA4eCA0IC0+ICUjeFxuIiwgYWRkciwgdmFsKTspCisrICAgICAgICByZXR1cm4gdmFsOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTM3NSwxNyArMjc2LDE3IEBAIHZhbAkJLSBWYWx1ZSB0byBzdG9yZQorIFJFTUFSS1M6CisgV3JpdGVzIGEgYnl0ZSB2YWx1ZSB0byBlbXVsYXRvciBtZW1vcnkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIFg4NkFQSSB3cmIoCistCXUzMiBhZGRyLAorLQl1OCB2YWwpCisrdm9pZCBYODZBUEkKKyt3cmIodTMyIGFkZHIsIHU4IHZhbCkKKyB7CistREIoCWlmIChERUJVR19NRU1fVFJBQ0UoKSkKKy0JCXByaW50aygiJSMwOHggMSA8LSAlI3hcbiIsIGFkZHIsIHZhbCk7KQorLSAgICBpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAxKSB7CistCQlEQihwcmludGsoIm1lbV93cml0ZTogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOykKKy0JCUhBTFRfU1lTKCk7CistCQl9CistCSoodTgqKShNLm1lbV9iYXNlICsgYWRkcikgPSB2YWw7CisrICAgIERCKGlmIChERUJVR19NRU1fVFJBQ0UoKSkKKysgICAgICAgcHJpbnRrKCIlIzA4eCAxIDwtICUjeFxuIiwgYWRkciwgdmFsKTspCisrICAgICAgICBpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAxKSB7CisrICAgICAgICAgICAgREIocHJpbnRrKCJtZW1fd3JpdGU6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTsKKysgICAgICAgICAgICAgICAgKQorKyAgICAgICAgICAgICAgICBIQUxUX1NZUygpOworKyAgICAgICAgfQorKyAgICAqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkcikgPSB2YWw7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzk2LDMwICsyOTcsMjQgQEAgdmFsCQktIFZhbHVlIHRvIHN0b3JlCisgUkVNQVJLUzoKKyBXcml0ZXMgYSB3b3JkIHZhbHVlIHRvIGVtdWxhdG9yIG1lbW9yeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2QVBJIHdydygKKy0JdTMyIGFkZHIsCistCXUxNiB2YWwpCisrdm9pZCBYODZBUEkKKyt3cncodTMyIGFkZHIsIHUxNiB2YWwpCisgeworLURCKAlpZiAoREVCVUdfTUVNX1RSQUNFKCkpCistCQlwcmludGsoIiUjMDh4IDIgPC0gJSN4XG4iLCBhZGRyLCB2YWwpOykKKy0JaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gMikgeworLQkJREIocHJpbnRrKCJtZW1fd3JpdGU6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTspCistCQlIQUxUX1NZUygpOworLQkJfQorKyAgICBEQihpZiAoREVCVUdfTUVNX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiJSMwOHggMiA8LSAlI3hcbiIsIGFkZHIsIHZhbCk7KQorKyAgICAgICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gMikgeworKyAgICAgICAgICAgIERCKHByaW50aygibWVtX3dyaXRlOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7CisrICAgICAgICAgICAgICAgICkKKysgICAgICAgICAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgICAgIH0KKyAjaWZkZWYgX19CSUdfRU5ESUFOX18KKy0JaWYgKGFkZHIgJiAweDEpIHsKKy0JCSoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDApID0gKHZhbCA+PiAwKSAmIDB4ZmY7CistCQkqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAxKSA9ICh2YWwgPj4gOCkgJiAweGZmOworLQkJfQorLQllbHNlCistI2VuZGlmCistI2lmIGRlZmluZWQoQUxQSEFfVUFMT0FEUykKKy0JIHN0d191KHZhbCwodTE2KikoTS5tZW1fYmFzZSArIGFkZHIpKTsKKy0jZWxpZiBkZWZpbmVkKElBNjRfVUFMT0FEUykKKy0gICAgIHVzdHcodmFsLCh1MTYqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbHNlCistCSAqKHUxNiopKE0ubWVtX2Jhc2UgKyBhZGRyKSA9IHZhbDsKKysgICAgaWYgKGFkZHIgJiAweDEpIHsKKysgICAgICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMCkgPSAodmFsID4+IDApICYgMHhmZjsKKysgICAgICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPSAodmFsID4+IDgpICYgMHhmZjsKKysgICAgfQorKyAgICBlbHNlCisgI2VuZGlmCisrICAgICAgICBzdHdfdSh2YWwsICh1MTYgKikgKE0ubWVtX2Jhc2UgKyBhZGRyKSk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNDMwLDMyICszMjUsMjYgQEAgdmFsCQktIFZhbHVlIHRvIHN0b3JlCisgUkVNQVJLUzoKKyBXcml0ZXMgYSBsb25nIHZhbHVlIHRvIGVtdWxhdG9yIG1lbW9yeS4gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIFg4NkFQSSB3cmwoCistCXUzMiBhZGRyLAorLQl1MzIgdmFsKQorK3ZvaWQgWDg2QVBJCisrd3JsKHUzMiBhZGRyLCB1MzIgdmFsKQorIHsKKy1EQigJaWYgKERFQlVHX01FTV9UUkFDRSgpKQorLQkJcHJpbnRrKCIlIzA4eCA0IDwtICUjeFxuIiwgYWRkciwgdmFsKTspCistCWlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDQpIHsKKy0JCURCKHByaW50aygibWVtX3dyaXRlOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQorLQkJSEFMVF9TWVMoKTsKKy0JCX0KKysgICAgREIoaWYgKERFQlVHX01FTV9UUkFDRSgpKQorKyAgICAgICBwcmludGsoIiUjMDh4IDQgPC0gJSN4XG4iLCBhZGRyLCB2YWwpOykKKysgICAgICAgIGlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDQpIHsKKysgICAgICAgICAgICBEQihwcmludGsoIm1lbV93cml0ZTogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOworKyAgICAgICAgICAgICAgICApCisrICAgICAgICAgICAgICAgIEhBTFRfU1lTKCk7CisrICAgICAgICB9CisgI2lmZGVmIF9fQklHX0VORElBTl9fCistCWlmIChhZGRyICYgMHgxKSB7CistCQkqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAwKSA9ICh2YWwgPj4gIDApICYgMHhmZjsKKy0JCSoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDEpID0gKHZhbCA+PiAgOCkgJiAweGZmOworLQkJKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMikgPSAodmFsID4+IDE2KSAmIDB4ZmY7CistCQkqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAzKSA9ICh2YWwgPj4gMjQpICYgMHhmZjsKKy0JCX0KKy0JZWxzZQorLSNlbmRpZgorLSNpZiBkZWZpbmVkKEFMUEhBX1VBTE9BRFMpCistCSBzdGxfdSh2YWwsKHUzMiopKE0ubWVtX2Jhc2UgKyBhZGRyKSk7CistI2VsaWYgZGVmaW5lZChJQTY0X1VBTE9BRFMpCistICAgICB1c3RsKHZhbCwodTMyKikoTS5tZW1fYmFzZSArIGFkZHIpKTsKKy0jZWxzZQorLQkgKih1MzIqKShNLm1lbV9iYXNlICsgYWRkcikgPSB2YWw7CisrICAgIGlmIChhZGRyICYgMHgxKSB7CisrICAgICAgICAqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDApID0gKHZhbCA+PiAwKSAmIDB4ZmY7CisrICAgICAgICAqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDEpID0gKHZhbCA+PiA4KSAmIDB4ZmY7CisrICAgICAgICAqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDIpID0gKHZhbCA+PiAxNikgJiAweGZmOworKyAgICAgICAgKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAzKSA9ICh2YWwgPj4gMjQpICYgMHhmZjsKKysgICAgfQorKyAgICBlbHNlCisgI2VuZGlmCisrICAgICAgICBzdGxfdSh2YWwsICh1MzIgKikgKE0ubWVtX2Jhc2UgKyBhZGRyKSk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNDY2LDEyICszNTUsMTIgQEAgUkVUVVJOOgorIFJFTUFSS1M6CisgRGVmYXVsdCBQSU8gYnl0ZSByZWFkIGZ1bmN0aW9uLiBEb2Vzbid0IHBlcmZvcm0gcmVhbCBpbmIuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdTggWDg2QVBJIHBfaW5iKAorLQlYODZFTVVfcGlvQWRkciBhZGRyKQorK3N0YXRpYyB1OCBYODZBUEkKKytwX2luYihYODZFTVVfcGlvQWRkciBhZGRyKQorIHsKKy1EQigJaWYgKERFQlVHX0lPX1RSQUNFKCkpCistCQlwcmludGsoImluYiAlIzA0eCBcbiIsIGFkZHIpOykKKy0JcmV0dXJuIDA7CisrICAgIERCKGlmIChERUJVR19JT19UUkFDRSgpKQorKyAgICAgICBwcmludGsoImluYiAlIzA0eCBcbiIsIGFkZHIpOykKKysgICAgICAgIHJldHVybiAwOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTQ4MiwxMiArMzcxLDEyIEBAIFJFVFVSTjoKKyBSRU1BUktTOgorIERlZmF1bHQgUElPIHdvcmQgcmVhZCBmdW5jdGlvbi4gRG9lc24ndCBwZXJmb3JtIHJlYWwgaW53LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHUxNiBYODZBUEkgcF9pbncoCistCVg4NkVNVV9waW9BZGRyIGFkZHIpCisrc3RhdGljIHUxNiBYODZBUEkKKytwX2ludyhYODZFTVVfcGlvQWRkciBhZGRyKQorIHsKKy1EQigJaWYgKERFQlVHX0lPX1RSQUNFKCkpCistCQlwcmludGsoImludyAlIzA0eCBcbiIsIGFkZHIpOykKKy0JcmV0dXJuIDA7CisrICAgIERCKGlmIChERUJVR19JT19UUkFDRSgpKQorKyAgICAgICBwcmludGsoImludyAlIzA0eCBcbiIsIGFkZHIpOykKKysgICAgICAgIHJldHVybiAwOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTQ5OCwxMiArMzg3LDEyIEBAIFJFVFVSTjoKKyBSRU1BUktTOgorIERlZmF1bHQgUElPIGxvbmcgcmVhZCBmdW5jdGlvbi4gRG9lc24ndCBwZXJmb3JtIHJlYWwgaW5sLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHUzMiBYODZBUEkgcF9pbmwoCistCVg4NkVNVV9waW9BZGRyIGFkZHIpCisrc3RhdGljIHUzMiBYODZBUEkKKytwX2lubChYODZFTVVfcGlvQWRkciBhZGRyKQorIHsKKy1EQigJaWYgKERFQlVHX0lPX1RSQUNFKCkpCistCQlwcmludGsoImlubCAlIzA0eCBcbiIsIGFkZHIpOykKKy0JcmV0dXJuIDA7CisrICAgIERCKGlmIChERUJVR19JT19UUkFDRSgpKQorKyAgICAgICBwcmludGsoImlubCAlIzA0eCBcbiIsIGFkZHIpOykKKysgICAgICAgIHJldHVybiAwOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTUxMywxMyArNDAyLDEyIEBAIHZhbCAgICAgLSBWYWx1ZSB0byBzdG9yZQorIFJFTUFSS1M6CisgRGVmYXVsdCBQSU8gYnl0ZSB3cml0ZSBmdW5jdGlvbi4gRG9lc24ndCBwZXJmb3JtIHJlYWwgb3V0Yi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIFg4NkFQSSBwX291dGIoCistCVg4NkVNVV9waW9BZGRyIGFkZHIsCistCXU4IHZhbCkKKytzdGF0aWMgdm9pZCBYODZBUEkKKytwX291dGIoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTggdmFsKQorIHsKKy1EQigJaWYgKERFQlVHX0lPX1RSQUNFKCkpCistCQlwcmludGsoIm91dGIgJSMwMnggLT4gJSMwNHggXG4iLCB2YWwsIGFkZHIpOykKKy0gICAgcmV0dXJuOworKyAgICBEQihpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKysgICAgICAgcHJpbnRrKCJvdXRiICUjMDJ4IC0+ICUjMDR4IFxuIiwgdmFsLCBhZGRyKTspCisrICAgICAgICByZXR1cm47CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNTI5LDEzICs0MTcsMTIgQEAgdmFsICAgICAtIFZhbHVlIHRvIHN0b3JlCisgUkVNQVJLUzoKKyBEZWZhdWx0IFBJTyB3b3JkIHdyaXRlIGZ1bmN0aW9uLiBEb2Vzbid0IHBlcmZvcm0gcmVhbCBvdXR3LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgWDg2QVBJIHBfb3V0dygKKy0JWDg2RU1VX3Bpb0FkZHIgYWRkciwKKy0JdTE2IHZhbCkKKytzdGF0aWMgdm9pZCBYODZBUEkKKytwX291dHcoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTE2IHZhbCkKKyB7CistREIoCWlmIChERUJVR19JT19UUkFDRSgpKQorLQkJcHJpbnRrKCJvdXR3ICUjMDR4IC0+ICUjMDR4IFxuIiwgdmFsLCBhZGRyKTspCistCXJldHVybjsKKysgICAgREIoaWYgKERFQlVHX0lPX1RSQUNFKCkpCisrICAgICAgIHByaW50aygib3V0dyAlIzA0eCAtPiAlIzA0eCBcbiIsIHZhbCwgYWRkcik7KQorKyAgICAgICAgcmV0dXJuOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTU0NSwyOSArNDMyLDI5IEBAIHZhbCAgICAgLSBWYWx1ZSB0byBzdG9yZQorIFJFTUFSS1M6CisgRGVmYXVsdCBQSU8gO29uZyB3cml0ZSBmdW5jdGlvbi4gRG9lc24ndCBwZXJmb3JtIHJlYWwgb3V0bC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIFg4NkFQSSBwX291dGwoCistCVg4NkVNVV9waW9BZGRyIGFkZHIsCistCXUzMiB2YWwpCisrc3RhdGljIHZvaWQgWDg2QVBJCisrcF9vdXRsKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUzMiB2YWwpCisgeworLURCKAlpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKy0JCXByaW50aygib3V0bCAlIzA4eCAtPiAlIzA0eCBcbiIsIHZhbCwgYWRkcik7KQorLSAgICByZXR1cm47CisrICAgIERCKGlmIChERUJVR19JT19UUkFDRSgpKQorKyAgICAgICBwcmludGsoIm91dGwgJSMwOHggLT4gJSMwNHggXG4iLCB2YWwsIGFkZHIpOykKKysgICAgICAgIHJldHVybjsKKyB9CisgCisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbCBWYXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKy11OCAgCShYODZBUElQIHN5c19yZGIpKHUzMiBhZGRyKSAJCQkgICAgICAgICAgICA9IHJkYjsKKy11MTYgCShYODZBUElQIHN5c19yZHcpKHUzMiBhZGRyKSAJCQkgICAgICAgICAgICA9IHJkdzsKKy11MzIgCShYODZBUElQIHN5c19yZGwpKHUzMiBhZGRyKSAJCQkgICAgICAgICAgICA9IHJkbDsKKy12b2lkIAkoWDg2QVBJUCBzeXNfd3JiKSh1MzIgYWRkcix1OCB2YWwpIAkJICAgICAgICAgICAgPSB3cmI7Cistdm9pZCAJKFg4NkFQSVAgc3lzX3dydykodTMyIGFkZHIsdTE2IHZhbCkgCSAgICAgICAgICAgID0gd3J3OworLXZvaWQgCShYODZBUElQIHN5c193cmwpKHUzMiBhZGRyLHUzMiB2YWwpIAkgICAgICAgICAgICA9IHdybDsKKy11OCAgCShYODZBUElQIHN5c19pbmIpKFg4NkVNVV9waW9BZGRyIGFkZHIpCSAgICAgICAgICAgID0gcF9pbmI7CistdTE2IAkoWDg2QVBJUCBzeXNfaW53KShYODZFTVVfcGlvQWRkciBhZGRyKQkgICAgICAgICAgICA9IHBfaW53OworLXUzMiAJKFg4NkFQSVAgc3lzX2lubCkoWDg2RU1VX3Bpb0FkZHIgYWRkcikgICAgICAgICAgICAgID0gcF9pbmw7Cistdm9pZCAJKFg4NkFQSVAgc3lzX291dGIpKFg4NkVNVV9waW9BZGRyIGFkZHIsIHU4IHZhbCkgCT0gcF9vdXRiOworLXZvaWQgCShYODZBUElQIHN5c19vdXR3KShYODZFTVVfcGlvQWRkciBhZGRyLCB1MTYgdmFsKQk9IHBfb3V0dzsKKy12b2lkIAkoWDg2QVBJUCBzeXNfb3V0bCkoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTMyIHZhbCkJPSBwX291dGw7CisrdTgoWDg2QVBJUCBzeXNfcmRiKSAodTMyIGFkZHIpID0gcmRiOworK3UxNihYODZBUElQIHN5c19yZHcpICh1MzIgYWRkcikgPSByZHc7CisrdTMyKFg4NkFQSVAgc3lzX3JkbCkgKHUzMiBhZGRyKSA9IHJkbDsKKyt2b2lkIChYODZBUElQIHN5c193cmIpICh1MzIgYWRkciwgdTggdmFsKSA9IHdyYjsKKyt2b2lkIChYODZBUElQIHN5c193cncpICh1MzIgYWRkciwgdTE2IHZhbCkgPSB3cnc7Cisrdm9pZCAoWDg2QVBJUCBzeXNfd3JsKSAodTMyIGFkZHIsIHUzMiB2YWwpID0gd3JsOworKworK3U4KFg4NkFQSVAgc3lzX2luYikgKFg4NkVNVV9waW9BZGRyIGFkZHIpID0gcF9pbmI7CisrdTE2KFg4NkFQSVAgc3lzX2ludykgKFg4NkVNVV9waW9BZGRyIGFkZHIpID0gcF9pbnc7CisrdTMyKFg4NkFQSVAgc3lzX2lubCkgKFg4NkVNVV9waW9BZGRyIGFkZHIpID0gcF9pbmw7Cisrdm9pZCAoWDg2QVBJUCBzeXNfb3V0YikgKFg4NkVNVV9waW9BZGRyIGFkZHIsIHU4IHZhbCkgPSBwX291dGI7Cisrdm9pZCAoWDg2QVBJUCBzeXNfb3V0dykgKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUxNiB2YWwpID0gcF9vdXR3OworK3ZvaWQgKFg4NkFQSVAgc3lzX291dGwpIChYODZFTVVfcGlvQWRkciBhZGRyLCB1MzIgdmFsKSA9IHBfb3V0bDsKKyAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNldHVwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorQEAgLTU4MCw4ICs0NjcsOCBAQCBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IHRoZSBwb2ludGVycyB0byBmdW5jdGlvbnMgd2hpY2ggYWNjZXNzCisgbWVtb3J5IHNwYWNlLCBhbGxvd2luZyB0aGUgdXNlciBhcHBsaWNhdGlvbiB0byBvdmVycmlkZSB0aGVzZSBmdW5jdGlvbnMKKyBhbmQgaG9vayB0aGVtIG91dCBhcyBuZWNlc3NhcnkgZm9yIHRoZWlyIGFwcGxpY2F0aW9uLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBYODZFTVVfc2V0dXBNZW1GdW5jcygKKy0JWDg2RU1VX21lbUZ1bmNzICpmdW5jcykKKyt2b2lkCisrWDg2RU1VX3NldHVwTWVtRnVuY3MoWDg2RU1VX21lbUZ1bmNzICogZnVuY3MpCisgeworICAgICBzeXNfcmRiID0gZnVuY3MtPnJkYjsKKyAgICAgc3lzX3JkdyA9IGZ1bmNzLT5yZHc7CitAQCAtNjAwLDggKzQ4Nyw4IEBAIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgdGhlIHBvaW50ZXJzIHRvIGZ1bmN0aW9ucyB3aGljaCBhY2Nlc3MKKyBJL08gc3BhY2UsIGFsbG93aW5nIHRoZSB1c2VyIGFwcGxpY2F0aW9uIHRvIG92ZXJyaWRlIHRoZXNlIGZ1bmN0aW9ucworIGFuZCBob29rIHRoZW0gb3V0IGFzIG5lY2Vzc2FyeSBmb3IgdGhlaXIgYXBwbGljYXRpb24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIFg4NkVNVV9zZXR1cFBpb0Z1bmNzKAorLQlYODZFTVVfcGlvRnVuY3MgKmZ1bmNzKQorK3ZvaWQKKytYODZFTVVfc2V0dXBQaW9GdW5jcyhYODZFTVVfcGlvRnVuY3MgKiBmdW5jcykKKyB7CisgICAgIHN5c19pbmIgPSBmdW5jcy0+aW5iOworICAgICBzeXNfaW53ID0gZnVuY3MtPmludzsKK0BAIC02MjQsMTcgKzUxMSwxNyBAQCBpbiB0aGUgZW11bGF0b3IgdmlhIHRoZSBpbnRlcnJ1cHQgdmVjdG9yIHRhYmxlLiBUaGlzIGFsbG93cyB0aGUgYXBwbGljYXRpb24KKyB0byBnZXQgY29udHJvbCB3aGVuIHRoZSBjb2RlIGJlaW5nIGVtdWxhdGVkIGV4ZWN1dGVzIHNwZWNpZmljIHNvZnR3YXJlCisgaW50ZXJydXB0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2RU1VX3NldHVwSW50ckZ1bmNzKAorLQlYODZFTVVfaW50ckZ1bmNzIGZ1bmNzW10pCisrdm9pZAorK1g4NkVNVV9zZXR1cEludHJGdW5jcyhYODZFTVVfaW50ckZ1bmNzIGZ1bmNzW10pCisgeworICAgICBpbnQgaTsKKy0gICAgCistCWZvciAoaT0wOyBpIDwgMjU2OyBpKyspCistCQlfWDg2RU1VX2ludHJUYWJbaV0gPSBOVUxMOworLQlpZiAoZnVuY3MpIHsKKy0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKy0JCQlfWDg2RU1VX2ludHJUYWJbaV0gPSBmdW5jc1tpXTsKKy0JCX0KKysKKysgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorKyAgICAgICAgX1g4NkVNVV9pbnRyVGFiW2ldID0gTlVMTDsKKysgICAgaWYgKGZ1bmNzKSB7CisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisrICAgICAgICAgICAgX1g4NkVNVV9pbnRyVGFiW2ldID0gZnVuY3NbaV07CisrICAgIH0KKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC02NDksMTUgKzUzNiwxNSBAQCBzbyB0aGF0IHRoZSBjb2RlIGluIHRoZSBlbXVsYXRvciB3aWxsIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhlIHNvZnR3YXJlCisgaW50ZXJydXB0IGFzIHBlciBub3JtYWwuIFRoaXMgZXNzZW50aWFsbHkgYWxsb3dzIHN5c3RlbSBjb2RlIHRvIGFjdGl2ZWx5CisgaG9vayBhbmQgaGFuZGxlIGNlcnRhaW4gc29mdHdhcmUgaW50ZXJydXB0cyBhcyBuZWNlc3NhcnkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIFg4NkVNVV9wcmVwYXJlRm9ySW50KAorLQlpbnQgbnVtKQorK3ZvaWQKKytYODZFTVVfcHJlcGFyZUZvckludChpbnQgbnVtKQorIHsKKy0gICAgcHVzaF93b3JkKCh1MTYpTS54ODYuUl9GTEcpOworKyAgICBwdXNoX3dvcmQoKHUxNikgTS54ODYuUl9GTEcpOworICAgICBDTEVBUl9GTEFHKEZfSUYpOworICAgICBDTEVBUl9GTEFHKEZfVEYpOworICAgICBwdXNoX3dvcmQoTS54ODYuUl9DUyk7CisgICAgIE0ueDg2LlJfQ1MgPSBtZW1fYWNjZXNzX3dvcmQobnVtICogNCArIDIpOworICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisgICAgIE0ueDg2LlJfSVAgPSBtZW1fYWNjZXNzX3dvcmQobnVtICogNCk7CistCU0ueDg2LmludHIgPSAwOworKyAgICBNLng4Ni5pbnRyID0gMDsKKyB9CitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvdmFsaWRhdGUuYyBiL2xpYnMveDg2ZW11L3ZhbGlkYXRlLmMKK2luZGV4IDIzOWY2YzEuLjRjMzZlMWQgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS92YWxpZGF0ZS5jCisrKysgYi9saWJzL3g4NmVtdS92YWxpZGF0ZS5jCitAQCAtNTkxLDU4ICs1OTEsNjIgQEAKKyAgICAgICAgIHByaW50aygicGFzc2VkXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIH0KKyAKKy12b2lkIHByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKKyt2b2lkCisrcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorIHsKKyAgICAgdmFfbGlzdCBhcmdwdHI7CisrCisgICAgIHZhX3N0YXJ0KGFyZ3B0ciwgZm10KTsKKyAgICAgdmZwcmludGYoc3Rkb3V0LCBmbXQsIGFyZ3B0cik7CisgICAgIGZmbHVzaChzdGRvdXQpOworICAgICB2YV9lbmQoYXJncHRyKTsKKyB9CisgCistY2hhciAqIHByaW50X2ZsYWdzKGNoYXIgKmJ1Zix1bG9uZyBmbGFncykKKytjaGFyICoKKytwcmludF9mbGFncyhjaGFyICpidWYsIHVsb25nIGZsYWdzKQorIHsKKyAgICAgY2hhciAqc2VwYXJhdG9yID0gIiI7CisgCisgICAgIGJ1ZlswXSA9IDA7CisgICAgIGlmIChmbGFncyAmIEZfQ0YpIHsKKy0gICAgICAgIHN0cmNhdChidWYsc2VwYXJhdG9yKTsKKy0gICAgICAgIHN0cmNhdChidWYsIkNGIik7CisrICAgICAgICBzdHJjYXQoYnVmLCBzZXBhcmF0b3IpOworKyAgICAgICAgc3RyY2F0KGJ1ZiwgIkNGIik7CisgICAgICAgICBzZXBhcmF0b3IgPSAiLCI7CistICAgICAgICB9CisrICAgIH0KKyAgICAgaWYgKGZsYWdzICYgRl9QRikgeworLSAgICAgICAgc3RyY2F0KGJ1ZixzZXBhcmF0b3IpOworLSAgICAgICAgc3RyY2F0KGJ1ZiwiUEYiKTsKKysgICAgICAgIHN0cmNhdChidWYsIHNlcGFyYXRvcik7CisrICAgICAgICBzdHJjYXQoYnVmLCAiUEYiKTsKKyAgICAgICAgIHNlcGFyYXRvciA9ICIsIjsKKy0gICAgICAgIH0KKysgICAgfQorICAgICBpZiAoZmxhZ3MgJiBGX0FGKSB7CistICAgICAgICBzdHJjYXQoYnVmLHNlcGFyYXRvcik7CistICAgICAgICBzdHJjYXQoYnVmLCJBRiIpOworKyAgICAgICAgc3RyY2F0KGJ1Ziwgc2VwYXJhdG9yKTsKKysgICAgICAgIHN0cmNhdChidWYsICJBRiIpOworICAgICAgICAgc2VwYXJhdG9yID0gIiwiOworLSAgICAgICAgfQorKyAgICB9CisgICAgIGlmIChmbGFncyAmIEZfWkYpIHsKKy0gICAgICAgIHN0cmNhdChidWYsc2VwYXJhdG9yKTsKKy0gICAgICAgIHN0cmNhdChidWYsIlpGIik7CisrICAgICAgICBzdHJjYXQoYnVmLCBzZXBhcmF0b3IpOworKyAgICAgICAgc3RyY2F0KGJ1ZiwgIlpGIik7CisgICAgICAgICBzZXBhcmF0b3IgPSAiLCI7CistICAgICAgICB9CisrICAgIH0KKyAgICAgaWYgKGZsYWdzICYgRl9TRikgeworLSAgICAgICAgc3RyY2F0KGJ1ZixzZXBhcmF0b3IpOworLSAgICAgICAgc3RyY2F0KGJ1ZiwiU0YiKTsKKysgICAgICAgIHN0cmNhdChidWYsIHNlcGFyYXRvcik7CisrICAgICAgICBzdHJjYXQoYnVmLCAiU0YiKTsKKyAgICAgICAgIHNlcGFyYXRvciA9ICIsIjsKKy0gICAgICAgIH0KKysgICAgfQorICAgICBpZiAoZmxhZ3MgJiBGX09GKSB7CistICAgICAgICBzdHJjYXQoYnVmLHNlcGFyYXRvcik7CistICAgICAgICBzdHJjYXQoYnVmLCJPRiIpOworKyAgICAgICAgc3RyY2F0KGJ1Ziwgc2VwYXJhdG9yKTsKKysgICAgICAgIHN0cmNhdChidWYsICJPRiIpOworICAgICAgICAgc2VwYXJhdG9yID0gIiwiOworLSAgICAgICAgfQorKyAgICB9CisgICAgIGlmIChzZXBhcmF0b3JbMF0gPT0gMCkKKy0gICAgICAgIHN0cmNweShidWYsIk5vbmUiKTsKKysgICAgICAgIHN0cmNweShidWYsICJOb25lIik7CisgICAgIHJldHVybiBidWY7CisgfQorIAorLWludCBtYWluKGludCBhcmdjKQorK2ludAorK21haW4oaW50IGFyZ2MpCisgeworLSAgICB1bG9uZyAgIGRlZl9mbGFnczsKKysgICAgdWxvbmcgZGVmX2ZsYWdzOworICAgICBpbnQgdHJhY2UgPSBmYWxzZTsKKyAKKyAgICAgaWYgKGFyZ2MgPiAxKQorQEAgLTY3Myw3ICs2NzcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYykKKyAgICAgVkFMX0xPTkdfTE9OR19CSU5BUlkoY21wX2xvbmcpOworIAorICAgICBWQUxfQllURV9VTkFSWShkYWFfYnl0ZSk7CistICAgIFZBTF9CWVRFX1VOQVJZKGRhc19ieXRlKTsgICAvLyBGYWlscyBmb3IgMHg5QSAob3V0IG9mIHJhbmdlIGFueXdheSkKKysgICAgVkFMX0JZVEVfVU5BUlkoZGFzX2J5dGUpOyAgIC8qIEZhaWxzIGZvciAweDlBIChvdXQgb2YgcmFuZ2UgYW55d2F5KSAqLworIAorICAgICBWQUxfQllURV9VTkFSWShkZWNfYnl0ZSk7CisgICAgIFZBTF9XT1JEX1VOQVJZKGRlY193b3JkKTsKK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS5oCitpbmRleCA3OTVlMmQ2Li41MDFkZDkxIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11LmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS5oCitAQCAtNTYsNyArNTYsNyBAQCB0eXBlZGVmIGludCBYODZFTVVfcGlvQWRkcjsKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWFjcm9zIGFuZCB0eXBlIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorICNpZmRlZiBQQUNLCistIyBwcmFnbWEJUEFDSyAgIC8qIERvbid0IHBhY2sgc3RydWN0cyB3aXRoIGZ1bmN0aW9uIHBvaW50ZXJzISAqLworKyNwcmFnbWEJUEFDSyAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgcGFjayBzdHJ1Y3RzIHdpdGggZnVuY3Rpb24gcG9pbnRlcnMhICovCisgI2VuZGlmCisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC04MSwxMyArODEsMTMgQEAgb3V0dyAgICAtIEZ1bmN0aW9uIHRvIHdyaXRlIGEgd29yZCB0byBhbiBJL08gcG9ydAorIG91dGwgICAgLSBGdW5jdGlvbiB0byB3cml0ZSBhIGR3b3JkIHRvIGFuIEkvTyBwb3J0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyB0eXBlZGVmIHN0cnVjdCB7CistCXU4ICAJKFg4NkFQSVAgaW5iKShYODZFTVVfcGlvQWRkciBhZGRyKTsKKy0JdTE2IAkoWDg2QVBJUCBpbncpKFg4NkVNVV9waW9BZGRyIGFkZHIpOworLQl1MzIgCShYODZBUElQIGlubCkoWDg2RU1VX3Bpb0FkZHIgYWRkcik7CistCXZvaWQgCShYODZBUElQIG91dGIpKFg4NkVNVV9waW9BZGRyIGFkZHIsIHU4IHZhbCk7CistCXZvaWQgCShYODZBUElQIG91dHcpKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUxNiB2YWwpOworLQl2b2lkIAkoWDg2QVBJUCBvdXRsKShYODZFTVVfcGlvQWRkciBhZGRyLCB1MzIgdmFsKTsKKy0JfSBYODZFTVVfcGlvRnVuY3M7CisrICAgIHU4KFg4NkFQSVAgaW5iKSAoWDg2RU1VX3Bpb0FkZHIgYWRkcik7CisrICAgIHUxNihYODZBUElQIGludykgKFg4NkVNVV9waW9BZGRyIGFkZHIpOworKyAgICB1MzIoWDg2QVBJUCBpbmwpIChYODZFTVVfcGlvQWRkciBhZGRyKTsKKysgICAgdm9pZCAoWDg2QVBJUCBvdXRiKSAoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTggdmFsKTsKKysgICAgdm9pZCAoWDg2QVBJUCBvdXR3KSAoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTE2IHZhbCk7CisrICAgIHZvaWQgKFg4NkFQSVAgb3V0bCkgKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUzMiB2YWwpOworK30gWDg2RU1VX3Bpb0Z1bmNzOworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKK0BAIC0xMTIsMTMgKzExMiwxMyBAQCB3cncgICAgCS0gRnVuY3Rpb24gdG8gd3JpdGUgYSB3b3JkIHRvIGFuIGFkZHJlc3MKKyB3cmwgICAgCS0gRnVuY3Rpb24gdG8gd3JpdGUgYSBkd29yZCB0byBhbiBhZGRyZXNzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyB0eXBlZGVmIHN0cnVjdCB7CistCXU4ICAJKFg4NkFQSVAgcmRiKSh1MzIgYWRkcik7CistCXUxNiAJKFg4NkFQSVAgcmR3KSh1MzIgYWRkcik7CistCXUzMiAJKFg4NkFQSVAgcmRsKSh1MzIgYWRkcik7CistCXZvaWQgCShYODZBUElQIHdyYikodTMyIGFkZHIsIHU4IHZhbCk7CistCXZvaWQgCShYODZBUElQIHdydykodTMyIGFkZHIsIHUxNiB2YWwpOworLQl2b2lkCShYODZBUElQIHdybCkodTMyIGFkZHIsIHUzMiB2YWwpOworLQl9IFg4NkVNVV9tZW1GdW5jczsKKysgICAgdTgoWDg2QVBJUCByZGIpICh1MzIgYWRkcik7CisrICAgIHUxNihYODZBUElQIHJkdykgKHUzMiBhZGRyKTsKKysgICAgdTMyKFg4NkFQSVAgcmRsKSAodTMyIGFkZHIpOworKyAgICB2b2lkIChYODZBUElQIHdyYikgKHUzMiBhZGRyLCB1OCB2YWwpOworKyAgICB2b2lkIChYODZBUElQIHdydykgKHUzMiBhZGRyLCB1MTYgdmFsKTsKKysgICAgdm9pZCAoWDg2QVBJUCB3cmwpICh1MzIgYWRkciwgdTMyIHZhbCk7CisrfSBYODZFTVVfbWVtRnVuY3M7CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgIEhlcmUgYXJlIHRoZSBkZWZhdWx0IG1lbW9yeSByZWFkIGFuZCB3cml0ZQorQEAgLTEzMiwyOSArMTMyLDI5IEBAIGV4dGVybiB2b2lkIFg4NkFQSSB3cncodTMyIGFkZHIsIHUxNiB2YWwpOworIGV4dGVybiB2b2lkIFg4NkFQSSB3cmwodTMyIGFkZHIsIHUzMiB2YWwpOworIAorICNpZmRlZiBFTkRfUEFDSworLSMgcHJhZ21hCUVORF9QQUNLCisrI3ByYWdtYQlFTkRfUEFDSworICNlbmRpZgorIAorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHR5cGUgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorLXR5cGVkZWYgdm9pZCAoWDg2QVBJUCBYODZFTVVfaW50ckZ1bmNzKShpbnQgbnVtKTsKKyt0eXBlZGVmIHZvaWQgKFg4NkFQSVAgWDg2RU1VX2ludHJGdW5jcykgKGludCBudW0pOworIGV4dGVybiBYODZFTVVfaW50ckZ1bmNzIF9YODZFTVVfaW50clRhYlsyNTZdOworIAorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIgeyAgICAgICAgICAgIAkJCS8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisrZXh0ZXJuICJDIiB7ICAgICAgICAgICAgICAgICAgICAvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworICNlbmRpZgorIAorLXZvaWQgCVg4NkVNVV9zZXR1cE1lbUZ1bmNzKFg4NkVNVV9tZW1GdW5jcyAqZnVuY3MpOworLXZvaWQgCVg4NkVNVV9zZXR1cFBpb0Z1bmNzKFg4NkVNVV9waW9GdW5jcyAqZnVuY3MpOworLXZvaWQgCVg4NkVNVV9zZXR1cEludHJGdW5jcyhYODZFTVVfaW50ckZ1bmNzIGZ1bmNzW10pOworLXZvaWQgCVg4NkVNVV9wcmVwYXJlRm9ySW50KGludCBudW0pOworKyAgICB2b2lkIFg4NkVNVV9zZXR1cE1lbUZ1bmNzKFg4NkVNVV9tZW1GdW5jcyAqIGZ1bmNzKTsKKysgICAgdm9pZCBYODZFTVVfc2V0dXBQaW9GdW5jcyhYODZFTVVfcGlvRnVuY3MgKiBmdW5jcyk7CisrICAgIHZvaWQgWDg2RU1VX3NldHVwSW50ckZ1bmNzKFg4NkVNVV9pbnRyRnVuY3MgZnVuY3NbXSk7CisrICAgIHZvaWQgWDg2RU1VX3ByZXBhcmVGb3JJbnQoaW50IG51bSk7CisgCisgLyogZGVjb2RlLmMgKi8KKyAKKy12b2lkIAlYODZFTVVfZXhlYyh2b2lkKTsKKy12b2lkIAlYODZFTVVfaGFsdF9zeXModm9pZCk7CisrICAgIHZvaWQgWDg2RU1VX2V4ZWModm9pZCk7CisrICAgIHZvaWQgWDg2RU1VX2hhbHRfc3lzKHZvaWQpOworIAorICNpZmRlZglERUJVRworICNkZWZpbmUJSEFMVF9TWVMoKQlcCitAQCAtMTY2LDggKzE2Niw4IEBAIHZvaWQgCVg4NkVNVV9oYWx0X3N5cyh2b2lkKTsKKyAKKyAvKiBEZWJ1ZyBvcHRpb25zICovCisgCistI2RlZmluZSBERUJVR19ERUNPREVfRiAgICAgICAgICAweDAwMDAwMSAvKiBwcmludCBkZWNvZGVkIGluc3RydWN0aW9uICAqLworLSNkZWZpbmUgREVCVUdfVFJBQ0VfRiAgICAgICAgICAgMHgwMDAwMDIgLyogZHVtcCByZWdzIGJlZm9yZS9hZnRlciBleGVjdXRpb24gKi8KKysjZGVmaW5lIERFQlVHX0RFQ09ERV9GICAgICAgICAgIDB4MDAwMDAxICAgICAgICAvKiBwcmludCBkZWNvZGVkIGluc3RydWN0aW9uICAqLworKyNkZWZpbmUgREVCVUdfVFJBQ0VfRiAgICAgICAgICAgMHgwMDAwMDIgICAgICAgIC8qIGR1bXAgcmVncyBiZWZvcmUvYWZ0ZXIgZXhlY3V0aW9uICovCisgI2RlZmluZSBERUJVR19TVEVQX0YgICAgICAgICAgICAweDAwMDAwNAorICNkZWZpbmUgREVCVUdfRElTQVNTRU1CTEVfRiAgICAgMHgwMDAwMDgKKyAjZGVmaW5lIERFQlVHX0JSRUFLX0YgICAgICAgICAgIDB4MDAwMDEwCitAQCAtMTc1LDI0ICsxNzUsMjMgQEAgdm9pZCAJWDg2RU1VX2hhbHRfc3lzKHZvaWQpOworICNkZWZpbmUgREVCVUdfU0FWRV9JUF9DU19GICAgICAgMHgwMDAwNDAKKyAjZGVmaW5lIERFQlVHX0ZTX0YgICAgICAgICAgICAgIDB4MDAwMDgwCisgI2RlZmluZSBERUJVR19QUk9DX0YgICAgICAgICAgICAweDAwMDEwMAorLSNkZWZpbmUgREVCVUdfU1lTSU5UX0YgICAgICAgICAgMHgwMDAyMDAgLyogYmlvcyBzeXN0ZW0gaW50ZXJydXB0cy4gKi8KKysjZGVmaW5lIERFQlVHX1NZU0lOVF9GICAgICAgICAgIDB4MDAwMjAwICAgICAgICAvKiBiaW9zIHN5c3RlbSBpbnRlcnJ1cHRzLiAqLworICNkZWZpbmUgREVCVUdfVFJBQ0VDQUxMX0YgICAgICAgMHgwMDA0MDAKKyAjZGVmaW5lIERFQlVHX0lOU1RSVU1FTlRfRiAgICAgIDB4MDAwODAwCistI2RlZmluZSBERUJVR19NRU1fVFJBQ0VfRiAgICAgICAweDAwMTAwMCAKKy0jZGVmaW5lIERFQlVHX0lPX1RSQUNFX0YgICAgICAgIDB4MDAyMDAwIAorKyNkZWZpbmUgREVCVUdfTUVNX1RSQUNFX0YgICAgICAgMHgwMDEwMDAKKysjZGVmaW5lIERFQlVHX0lPX1RSQUNFX0YgICAgICAgIDB4MDAyMDAwCisgI2RlZmluZSBERUJVR19UUkFDRUNBTExfUkVHU19GICAweDAwNDAwMAorLSNkZWZpbmUgREVCVUdfREVDT0RFX05PUFJJTlRfRiAgMHgwMDgwMDAgCisrI2RlZmluZSBERUJVR19ERUNPREVfTk9QUklOVF9GICAweDAwODAwMAorICNkZWZpbmUgREVCVUdfRVhJVCAgICAgICAgICAgICAgMHgwMTAwMDAKKyAjZGVmaW5lIERFQlVHX1NZU19GICAgICAgICAgICAgIChERUJVR19TVkNfRnxERUJVR19GU19GfERFQlVHX1BST0NfRikKKyAKKy12b2lkIAlYODZFTVVfdHJhY2VfcmVncyh2b2lkKTsKKy12b2lkIAlYODZFTVVfdHJhY2VfeHJlZ3Modm9pZCk7Cistdm9pZCAJWDg2RU1VX2R1bXBfbWVtb3J5KHUxNiBzZWcsIHUxNiBvZmYsIHUzMiBhbXQpOworLWludCAJWDg2RU1VX3RyYWNlX29uKHZvaWQpOworLWludCAJWDg2RU1VX3RyYWNlX29mZih2b2lkKTsKKysgICAgdm9pZCBYODZFTVVfdHJhY2VfcmVncyh2b2lkKTsKKysgICAgdm9pZCBYODZFTVVfdHJhY2VfeHJlZ3Modm9pZCk7CisrICAgIHZvaWQgWDg2RU1VX2R1bXBfbWVtb3J5KHUxNiBzZWcsIHUxNiBvZmYsIHUzMiBhbXQpOworKyAgICBpbnQgWDg2RU1VX3RyYWNlX29uKHZvaWQpOworKyAgICBpbnQgWDg2RU1VX3RyYWNlX29mZih2b2lkKTsKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistfSAgICAgICAgICAgICAgICAgICAgICAgCQkJLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAJKi8KKyt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgICAgICAgICAqLworICNlbmRpZgorLQorLSNlbmRpZiAvKiBfX1g4NkVNVV9YODZFTVVfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfWDg2RU1VX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvZGVidWcuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9kZWJ1Zy5oCitpbmRleCA0N2FhY2I2Li4zODViODA0IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L2RlYnVnLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS9kZWJ1Zy5oCitAQCAtNDUsNjUgKzQ1LDY1IEBACisgCisgI2RlZmluZSBDSEVDS19JUF9GRVRDSF9GICAgICAgICAgICAgICAgIDB4MQorICNkZWZpbmUgQ0hFQ0tfU1BfQUNDRVNTX0YgICAgICAgICAgICAgICAweDIKKy0jZGVmaW5lIENIRUNLX01FTV9BQ0NFU1NfRiAgICAgICAgICAgICAgMHg0IC8qdXNpbmcgcmVndWxhciBsaW5lYXIgcG9pbnRlciAqLworLSNkZWZpbmUgQ0hFQ0tfREFUQV9BQ0NFU1NfRiAgICAgICAgICAgICAweDggLyp1c2luZyBzZWdtZW50Om9mZnNldCovCisrI2RlZmluZSBDSEVDS19NRU1fQUNDRVNTX0YgICAgICAgICAgICAgIDB4NCAgICAgLyp1c2luZyByZWd1bGFyIGxpbmVhciBwb2ludGVyICovCisrI2RlZmluZSBDSEVDS19EQVRBX0FDQ0VTU19GICAgICAgICAgICAgIDB4OCAgICAgLyp1c2luZyBzZWdtZW50Om9mZnNldCAqLworIAorICNpZmRlZiBERUJVRworLSMgZGVmaW5lIENIRUNLX0lQX0ZFVENIKCkgICAgICAgICAgICAgIAkoTS54ODYuY2hlY2sgJiBDSEVDS19JUF9GRVRDSF9GKQorLSMgZGVmaW5lIENIRUNLX1NQX0FDQ0VTUygpICAgICAgICAgICAgIAkoTS54ODYuY2hlY2sgJiBDSEVDS19TUF9BQ0NFU1NfRikKKy0jIGRlZmluZSBDSEVDS19NRU1fQUNDRVNTKCkgICAgICAgICAgICAJKE0ueDg2LmNoZWNrICYgQ0hFQ0tfTUVNX0FDQ0VTU19GKQorLSMgZGVmaW5lIENIRUNLX0RBVEFfQUNDRVNTKCkgICAgICAgICAgIAkoTS54ODYuY2hlY2sgJiBDSEVDS19EQVRBX0FDQ0VTU19GKQorKyNkZWZpbmUgQ0hFQ0tfSVBfRkVUQ0goKSAgICAgICAgICAgICAgCShNLng4Ni5jaGVjayAmIENIRUNLX0lQX0ZFVENIX0YpCisrI2RlZmluZSBDSEVDS19TUF9BQ0NFU1MoKSAgICAgICAgICAgICAJKE0ueDg2LmNoZWNrICYgQ0hFQ0tfU1BfQUNDRVNTX0YpCisrI2RlZmluZSBDSEVDS19NRU1fQUNDRVNTKCkgICAgICAgICAgICAJKE0ueDg2LmNoZWNrICYgQ0hFQ0tfTUVNX0FDQ0VTU19GKQorKyNkZWZpbmUgQ0hFQ0tfREFUQV9BQ0NFU1MoKSAgICAgICAgICAgCShNLng4Ni5jaGVjayAmIENIRUNLX0RBVEFfQUNDRVNTX0YpCisgI2Vsc2UKKy0jIGRlZmluZSBDSEVDS19JUF9GRVRDSCgpCistIyBkZWZpbmUgQ0hFQ0tfU1BfQUNDRVNTKCkKKy0jIGRlZmluZSBDSEVDS19NRU1fQUNDRVNTKCkKKy0jIGRlZmluZSBDSEVDS19EQVRBX0FDQ0VTUygpCisrI2RlZmluZSBDSEVDS19JUF9GRVRDSCgpCisrI2RlZmluZSBDSEVDS19TUF9BQ0NFU1MoKQorKyNkZWZpbmUgQ0hFQ0tfTUVNX0FDQ0VTUygpCisrI2RlZmluZSBDSEVDS19EQVRBX0FDQ0VTUygpCisgI2VuZGlmCisgCisgI2lmZGVmIERFQlVHCistIyBkZWZpbmUgREVCVUdfSU5TVFJVTUVOVCgpICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19JTlNUUlVNRU5UX0YpCistIyBkZWZpbmUgREVCVUdfREVDT0RFKCkgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19ERUNPREVfRikKKy0jIGRlZmluZSBERUJVR19UUkFDRSgpICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1RSQUNFX0YpCistIyBkZWZpbmUgREVCVUdfU1RFUCgpICAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19TVEVQX0YpCistIyBkZWZpbmUgREVCVUdfRElTQVNTRU1CTEUoKSAgIAkoTS54ODYuZGVidWcgJiBERUJVR19ESVNBU1NFTUJMRV9GKQorLSMgZGVmaW5lIERFQlVHX0JSRUFLKCkgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfQlJFQUtfRikKKy0jIGRlZmluZSBERUJVR19TVkMoKSAgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1NWQ19GKQorLSMgZGVmaW5lIERFQlVHX1NBVkVfSVBfQ1MoKSAgICAgKE0ueDg2LmRlYnVnICYgREVCVUdfU0FWRV9JUF9DU19GKQorLQorLSMgZGVmaW5lIERFQlVHX0ZTKCkgICAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfRlNfRikKKy0jIGRlZmluZSBERUJVR19QUk9DKCkgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1BST0NfRikKKy0jIGRlZmluZSBERUJVR19TWVNJTlQoKSAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1NZU0lOVF9GKQorLSMgZGVmaW5lIERFQlVHX1RSQUNFQ0FMTCgpICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfVFJBQ0VDQUxMX0YpCistIyBkZWZpbmUgREVCVUdfVFJBQ0VDQUxMUkVHUygpIAkoTS54ODYuZGVidWcgJiBERUJVR19UUkFDRUNBTExfUkVHU19GKQorLSMgZGVmaW5lIERFQlVHX1NZUygpICAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfU1lTX0YpCistIyBkZWZpbmUgREVCVUdfTUVNX1RSQUNFKCkgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19NRU1fVFJBQ0VfRikKKy0jIGRlZmluZSBERUJVR19JT19UUkFDRSgpICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0lPX1RSQUNFX0YpCistIyBkZWZpbmUgREVCVUdfREVDT0RFX05PUFJJTlQoKSAoTS54ODYuZGVidWcgJiBERUJVR19ERUNPREVfTk9QUklOVF9GKQorKyNkZWZpbmUgREVCVUdfSU5TVFJVTUVOVCgpICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19JTlNUUlVNRU5UX0YpCisrI2RlZmluZSBERUJVR19ERUNPREUoKSAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0RFQ09ERV9GKQorKyNkZWZpbmUgREVCVUdfVFJBQ0UoKSAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19UUkFDRV9GKQorKyNkZWZpbmUgREVCVUdfU1RFUCgpICAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19TVEVQX0YpCisrI2RlZmluZSBERUJVR19ESVNBU1NFTUJMRSgpICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0RJU0FTU0VNQkxFX0YpCisrI2RlZmluZSBERUJVR19CUkVBSygpICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0JSRUFLX0YpCisrI2RlZmluZSBERUJVR19TVkMoKSAgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1NWQ19GKQorKyNkZWZpbmUgREVCVUdfU0FWRV9JUF9DUygpICAgICAoTS54ODYuZGVidWcgJiBERUJVR19TQVZFX0lQX0NTX0YpCisrCisrI2RlZmluZSBERUJVR19GUygpICAgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0ZTX0YpCisrI2RlZmluZSBERUJVR19QUk9DKCkgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1BST0NfRikKKysjZGVmaW5lIERFQlVHX1NZU0lOVCgpICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfU1lTSU5UX0YpCisrI2RlZmluZSBERUJVR19UUkFDRUNBTEwoKSAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1RSQUNFQ0FMTF9GKQorKyNkZWZpbmUgREVCVUdfVFJBQ0VDQUxMUkVHUygpIAkoTS54ODYuZGVidWcgJiBERUJVR19UUkFDRUNBTExfUkVHU19GKQorKyNkZWZpbmUgREVCVUdfU1lTKCkgICAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19TWVNfRikKKysjZGVmaW5lIERFQlVHX01FTV9UUkFDRSgpICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfTUVNX1RSQUNFX0YpCisrI2RlZmluZSBERUJVR19JT19UUkFDRSgpICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0lPX1RSQUNFX0YpCisrI2RlZmluZSBERUJVR19ERUNPREVfTk9QUklOVCgpIChNLng4Ni5kZWJ1ZyAmIERFQlVHX0RFQ09ERV9OT1BSSU5UX0YpCisgI2Vsc2UKKy0jIGRlZmluZSBERUJVR19JTlNUUlVNRU5UKCkgICAgCTAKKy0jIGRlZmluZSBERUJVR19ERUNPREUoKSAgICAgICAgCTAKKy0jIGRlZmluZSBERUJVR19UUkFDRSgpICAgICAgICAgCTAKKy0jIGRlZmluZSBERUJVR19TVEVQKCkgICAgICAgICAgCTAKKy0jIGRlZmluZSBERUJVR19ESVNBU1NFTUJMRSgpICAgCTAKKy0jIGRlZmluZSBERUJVR19CUkVBSygpICAgICAgICAgCTAKKy0jIGRlZmluZSBERUJVR19TVkMoKSAgICAgICAgICAgCTAKKy0jIGRlZmluZSBERUJVR19TQVZFX0lQX0NTKCkgICAgIDAKKy0jIGRlZmluZSBERUJVR19GUygpICAgICAgICAgICAgCTAKKy0jIGRlZmluZSBERUJVR19QUk9DKCkgICAgICAgICAgCTAKKy0jIGRlZmluZSBERUJVR19TWVNJTlQoKSAgICAgICAgCTAKKy0jIGRlZmluZSBERUJVR19UUkFDRUNBTEwoKSAgICAgCTAKKy0jIGRlZmluZSBERUJVR19UUkFDRUNBTExSRUdTKCkgCTAKKy0jIGRlZmluZSBERUJVR19TWVMoKSAgICAgICAgICAgCTAKKy0jIGRlZmluZSBERUJVR19NRU1fVFJBQ0UoKSAgICAgCTAKKy0jIGRlZmluZSBERUJVR19JT19UUkFDRSgpICAgICAgCTAKKy0jIGRlZmluZSBERUJVR19ERUNPREVfTk9QUklOVCgpIDAKKysjZGVmaW5lIERFQlVHX0lOU1RSVU1FTlQoKSAgICAJMAorKyNkZWZpbmUgREVCVUdfREVDT0RFKCkgICAgICAgIAkwCisrI2RlZmluZSBERUJVR19UUkFDRSgpICAgICAgICAgCTAKKysjZGVmaW5lIERFQlVHX1NURVAoKSAgICAgICAgICAJMAorKyNkZWZpbmUgREVCVUdfRElTQVNTRU1CTEUoKSAgIAkwCisrI2RlZmluZSBERUJVR19CUkVBSygpICAgICAgICAgCTAKKysjZGVmaW5lIERFQlVHX1NWQygpICAgICAgICAgICAJMAorKyNkZWZpbmUgREVCVUdfU0FWRV9JUF9DUygpICAgICAwCisrI2RlZmluZSBERUJVR19GUygpICAgICAgICAgICAgCTAKKysjZGVmaW5lIERFQlVHX1BST0MoKSAgICAgICAgICAJMAorKyNkZWZpbmUgREVCVUdfU1lTSU5UKCkgICAgICAgIAkwCisrI2RlZmluZSBERUJVR19UUkFDRUNBTEwoKSAgICAgCTAKKysjZGVmaW5lIERFQlVHX1RSQUNFQ0FMTFJFR1MoKSAJMAorKyNkZWZpbmUgREVCVUdfU1lTKCkgICAgICAgICAgIAkwCisrI2RlZmluZSBERUJVR19NRU1fVFJBQ0UoKSAgICAgCTAKKysjZGVmaW5lIERFQlVHX0lPX1RSQUNFKCkgICAgICAJMAorKyNkZWZpbmUgREVCVUdfREVDT0RFX05PUFJJTlQoKSAwCisgI2VuZGlmCisgCisgI2lmZGVmIERFQlVHCisgCistIyBkZWZpbmUgREVDT0RFX1BSSU5URih4KSAgICAgCWlmIChERUJVR19ERUNPREUoKSkgXAorKyNkZWZpbmUgREVDT0RFX1BSSU5URih4KSAgICAgCWlmIChERUJVR19ERUNPREUoKSkgXAorIAkJCQkJCQkJCXg4NmVtdV9kZWNvZGVfcHJpbnRmKHgpCistIyBkZWZpbmUgREVDT0RFX1BSSU5URjIoeCx5KSAgCWlmIChERUJVR19ERUNPREUoKSkgXAorKyNkZWZpbmUgREVDT0RFX1BSSU5URjIoeCx5KSAgCWlmIChERUJVR19ERUNPREUoKSkgXAorIAkJCQkJCQkJCXg4NmVtdV9kZWNvZGVfcHJpbnRmMih4LHkpCisgCisgLyoKK0BAIC0xMjMsMTAgKzEyMywxMCBAQAorIAkJTS54ODYuc2F2ZWRfaXAgPSB5OyAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJXAorIAl9CisgI2Vsc2UKKy0jIGRlZmluZSBJTkNfREVDT0RFRF9JTlNUX0xFTih4KQorLSMgZGVmaW5lIERFQ09ERV9QUklOVEYoeCkKKy0jIGRlZmluZSBERUNPREVfUFJJTlRGMih4LHkpCistIyBkZWZpbmUgU0FWRV9JUF9DUyh4LHkpCisrI2RlZmluZSBJTkNfREVDT0RFRF9JTlNUX0xFTih4KQorKyNkZWZpbmUgREVDT0RFX1BSSU5URih4KQorKyNkZWZpbmUgREVDT0RFX1BSSU5URjIoeCx5KQorKyNkZWZpbmUgU0FWRV9JUF9DUyh4LHkpCisgI2VuZGlmCisgCisgI2lmZGVmIERFQlVHCitAQCAtMTM3LDEzICsxMzcsMTMgQEAKKyAJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisgCWlmIChERUJVR19UUkFDRSgpIHx8IERFQlVHX0RFQ09ERSgpKSBYODZFTVVfdHJhY2VfcmVncygpCisgI2Vsc2UKKy0jIGRlZmluZSBUUkFDRV9SRUdTKCkKKysjZGVmaW5lIFRSQUNFX1JFR1MoKQorICNlbmRpZgorIAorICNpZmRlZiBERUJVRworLSMgZGVmaW5lIFNJTkdMRV9TVEVQKCkJCWlmIChERUJVR19TVEVQKCkpIHg4NmVtdV9zaW5nbGVfc3RlcCgpCisrI2RlZmluZSBTSU5HTEVfU1RFUCgpCQlpZiAoREVCVUdfU1RFUCgpKSB4ODZlbXVfc2luZ2xlX3N0ZXAoKQorICNlbHNlCistIyBkZWZpbmUgU0lOR0xFX1NURVAoKQorKyNkZWZpbmUgU0lOR0xFX1NURVAoKQorICNlbmRpZgorIAorICNkZWZpbmUgVFJBQ0VfQU5EX1NURVAoKQlcCitAQCAtMTUxLDI5ICsxNTEsMjkgQEAKKyAJU0lOR0xFX1NURVAoKQorIAorICNpZmRlZiBERUJVRworLSMgZGVmaW5lIFNUQVJUX09GX0lOU1RSKCkKKy0jIGRlZmluZSBFTkRfT0ZfSU5TVFIoKQkJRW5kT2ZUaGVJbnN0cnVjdGlvblByb2NlZHVyZTogeDg2ZW11X2VuZF9pbnN0cigpOworLSMgZGVmaW5lIEVORF9PRl9JTlNUUl9OT19UUkFDRSgpCXg4NmVtdV9lbmRfaW5zdHIoKTsKKysjZGVmaW5lIFNUQVJUX09GX0lOU1RSKCkKKysjZGVmaW5lIEVORF9PRl9JTlNUUigpCQlFbmRPZlRoZUluc3RydWN0aW9uUHJvY2VkdXJlOiB4ODZlbXVfZW5kX2luc3RyKCk7CisrI2RlZmluZSBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKQl4ODZlbXVfZW5kX2luc3RyKCk7CisgI2Vsc2UKKy0jIGRlZmluZSBTVEFSVF9PRl9JTlNUUigpCistIyBkZWZpbmUgRU5EX09GX0lOU1RSKCkKKy0jIGRlZmluZSBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKQorKyNkZWZpbmUgU1RBUlRfT0ZfSU5TVFIoKQorKyNkZWZpbmUgRU5EX09GX0lOU1RSKCkKKysjZGVmaW5lIEVORF9PRl9JTlNUUl9OT19UUkFDRSgpCisgI2VuZGlmCisgCisgI2lmZGVmIERFQlVHCistIyBkZWZpbmUgIENBTExfVFJBQ0UodSx2LHcseCxzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysjZGVmaW5lICBDQUxMX1RSQUNFKHUsdix3LHgscykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgCWlmIChERUJVR19UUkFDRUNBTExSRUdTKCkpCQkJCQkJCQkJXAorIAkJeDg2ZW11X2R1bXBfcmVncygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgCWlmIChERUJVR19UUkFDRUNBTEwoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAJCXByaW50aygiJTA0eDolMDR4OiBDQUxMICVzJTA0eDolMDR4XG4iLCB1ICwgdiwgcywgdywgeCk7CistIyBkZWZpbmUgUkVUVVJOX1RSQUNFKG4sdSx2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysjZGVmaW5lIFJFVFVSTl9UUkFDRShuLHUsdikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgCWlmIChERUJVR19UUkFDRUNBTExSRUdTKCkpCQkJCQkJCQkJXAorIAkJeDg2ZW11X2R1bXBfcmVncygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgCWlmIChERUJVR19UUkFDRUNBTEwoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAJCXByaW50aygiJTA0eDolMDR4OiAlc1xuIix1LHYsbik7CisgI2Vsc2UKKy0jIGRlZmluZSBDQUxMX1RSQUNFKHUsdix3LHgscykKKy0jIGRlZmluZSBSRVRVUk5fVFJBQ0Uobix1LHYpCisrI2RlZmluZSBDQUxMX1RSQUNFKHUsdix3LHgscykKKysjZGVmaW5lIFJFVFVSTl9UUkFDRShuLHUsdikKKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVCVUcKK0BAIC0xODUsMjYgKzE4NSwyNSBAQAorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIgeyAgICAgICAgICAgIAkJCS8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisrZXh0ZXJuICJDIiB7ICAgICAgICAgICAgICAgICAgICAvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworICNlbmRpZgorIAorLWV4dGVybiB2b2lkIHg4NmVtdV9pbmNfZGVjb2RlZF9pbnN0X2xlbiAoaW50IHgpOworLWV4dGVybiB2b2lkIHg4NmVtdV9kZWNvZGVfcHJpbnRmIChjaGFyICp4KTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfZGVjb2RlX3ByaW50ZjIgKGNoYXIgKngsIGludCB5KTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfanVzdF9kaXNhc3NlbWJsZSAodm9pZCk7CistZXh0ZXJuIHZvaWQgeDg2ZW11X3NpbmdsZV9zdGVwICh2b2lkKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfZW5kX2luc3RyICh2b2lkKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfZHVtcF9yZWdzICh2b2lkKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfZHVtcF94cmVncyAodm9pZCk7CistZXh0ZXJuIHZvaWQgeDg2ZW11X3ByaW50X2ludF92ZWN0ICh1MTYgaXYpOworLWV4dGVybiB2b2lkIHg4NmVtdV9pbnN0cnVtZW50X2luc3RydWN0aW9uICh2b2lkKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzICh2b2lkKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfY2hlY2tfc3BfYWNjZXNzICh2b2lkKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfY2hlY2tfbWVtX2FjY2VzcyAodTMyIHApOworLWV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyAodWludCBzLCB1aW50IG8pOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfaW5jX2RlY29kZWRfaW5zdF9sZW4oaW50IHgpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfZGVjb2RlX3ByaW50Zihjb25zdCBjaGFyICp4KTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X2RlY29kZV9wcmludGYyKGNvbnN0IGNoYXIgKngsIGludCB5KTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X2p1c3RfZGlzYXNzZW1ibGUodm9pZCk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9zaW5nbGVfc3RlcCh2b2lkKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X2VuZF9pbnN0cih2b2lkKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X2R1bXBfcmVncyh2b2lkKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X2R1bXBfeHJlZ3Modm9pZCk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9wcmludF9pbnRfdmVjdCh1MTYgaXYpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfaW5zdHJ1bWVudF9pbnN0cnVjdGlvbih2b2lkKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X2NoZWNrX2lwX2FjY2Vzcyh2b2lkKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X2NoZWNrX3NwX2FjY2Vzcyh2b2lkKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X2NoZWNrX21lbV9hY2Nlc3ModTMyIHApOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3ModWludCBzLCB1aW50IG8pOworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy19ICAgICAgICAgICAgICAgICAgICAgICAJCQkvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgIAkqLworK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAgICAgICAgICovCisgI2VuZGlmCistCistI2VuZGlmIC8qIF9fWDg2RU1VX0RFQlVHX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX0RFQlVHX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvZGVjb2RlLmggYi9saWJzL3g4NmVtdS94ODZlbXUvZGVjb2RlLmgKK2luZGV4IDYxY2Q0ZGMuLjQ5YTFmN2IgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUvZGVjb2RlLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS9kZWNvZGUuaAorQEAgLTUyLDM3ICs1MiwzNiBAQAorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIgeyAgICAgICAgICAgIAkJCS8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisrZXh0ZXJuICJDIiB7ICAgICAgICAgICAgICAgICAgICAvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworICNlbmRpZgorIAorLXZvaWQgCXg4NmVtdV9pbnRyX3JhaXNlICh1OCB0eXBlKTsKKy12b2lkICAgIGZldGNoX2RlY29kZV9tb2RybSAoaW50ICptb2QsaW50ICpyZWdoLGludCAqcmVnbCk7CistdTggICAgICBmZXRjaF9ieXRlX2ltbSAodm9pZCk7CistdTE2ICAgICBmZXRjaF93b3JkX2ltbSAodm9pZCk7CistdTMyICAgICBmZXRjaF9sb25nX2ltbSAodm9pZCk7CistdTggICAgICBmZXRjaF9kYXRhX2J5dGUgKHVpbnQgb2Zmc2V0KTsKKy11OCAgICAgIGZldGNoX2RhdGFfYnl0ZV9hYnMgKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQpOworLXUxNiAgICAgZmV0Y2hfZGF0YV93b3JkICh1aW50IG9mZnNldCk7CistdTE2ICAgICBmZXRjaF9kYXRhX3dvcmRfYWJzICh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0KTsKKy11MzIgICAgIGZldGNoX2RhdGFfbG9uZyAodWludCBvZmZzZXQpOworLXUzMiAgICAgZmV0Y2hfZGF0YV9sb25nX2FicyAodWludCBzZWdtZW50LCB1aW50IG9mZnNldCk7Cistdm9pZCAgICBzdG9yZV9kYXRhX2J5dGUgKHVpbnQgb2Zmc2V0LCB1OCB2YWwpOworLXZvaWQgICAgc3RvcmVfZGF0YV9ieXRlX2FicyAodWludCBzZWdtZW50LCB1aW50IG9mZnNldCwgdTggdmFsKTsKKy12b2lkICAgIHN0b3JlX2RhdGFfd29yZCAodWludCBvZmZzZXQsIHUxNiB2YWwpOworLXZvaWQgICAgc3RvcmVfZGF0YV93b3JkX2FicyAodWludCBzZWdtZW50LCB1aW50IG9mZnNldCwgdTE2IHZhbCk7Cistdm9pZCAgICBzdG9yZV9kYXRhX2xvbmcgKHVpbnQgb2Zmc2V0LCB1MzIgdmFsKTsKKy12b2lkICAgIHN0b3JlX2RhdGFfbG9uZ19hYnMgKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQsIHUzMiB2YWwpOworLXU4KiAJZGVjb2RlX3JtX2J5dGVfcmVnaXN0ZXIoaW50IHJlZyk7CistdTE2KiAJZGVjb2RlX3JtX3dvcmRfcmVnaXN0ZXIoaW50IHJlZyk7CistdTMyKiAJZGVjb2RlX3JtX2xvbmdfcmVnaXN0ZXIoaW50IHJlZyk7CistdTE2KiAJZGVjb2RlX3JtX3NlZ19yZWdpc3RlcihpbnQgcmVnKTsKKy11MzIJZGVjb2RlX3JtMDBfYWRkcmVzcyhpbnQgcm0pOworLXUzMglkZWNvZGVfcm0wMV9hZGRyZXNzKGludCBybSk7CistdTMyCWRlY29kZV9ybTEwX2FkZHJlc3MoaW50IHJtKTsKKy11MzIJZGVjb2RlX3NpYl9hZGRyZXNzKGludCBzaWIsIGludCBtb2QpOworKyAgICB2b2lkIHg4NmVtdV9pbnRyX3JhaXNlKHU4IHR5cGUpOworKyAgICB2b2lkIGZldGNoX2RlY29kZV9tb2RybShpbnQgKm1vZCwgaW50ICpyZWdoLCBpbnQgKnJlZ2wpOworKyAgICB1OCBmZXRjaF9ieXRlX2ltbSh2b2lkKTsKKysgICAgdTE2IGZldGNoX3dvcmRfaW1tKHZvaWQpOworKyAgICB1MzIgZmV0Y2hfbG9uZ19pbW0odm9pZCk7CisrICAgIHU4IGZldGNoX2RhdGFfYnl0ZSh1aW50IG9mZnNldCk7CisrICAgIHU4IGZldGNoX2RhdGFfYnl0ZV9hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCk7CisrICAgIHUxNiBmZXRjaF9kYXRhX3dvcmQodWludCBvZmZzZXQpOworKyAgICB1MTYgZmV0Y2hfZGF0YV93b3JkX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0KTsKKysgICAgdTMyIGZldGNoX2RhdGFfbG9uZyh1aW50IG9mZnNldCk7CisrICAgIHUzMiBmZXRjaF9kYXRhX2xvbmdfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQpOworKyAgICB2b2lkIHN0b3JlX2RhdGFfYnl0ZSh1aW50IG9mZnNldCwgdTggdmFsKTsKKysgICAgdm9pZCBzdG9yZV9kYXRhX2J5dGVfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQsIHU4IHZhbCk7CisrICAgIHZvaWQgc3RvcmVfZGF0YV93b3JkKHVpbnQgb2Zmc2V0LCB1MTYgdmFsKTsKKysgICAgdm9pZCBzdG9yZV9kYXRhX3dvcmRfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQsIHUxNiB2YWwpOworKyAgICB2b2lkIHN0b3JlX2RhdGFfbG9uZyh1aW50IG9mZnNldCwgdTMyIHZhbCk7CisrICAgIHZvaWQgc3RvcmVfZGF0YV9sb25nX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0LCB1MzIgdmFsKTsKKysgICAgdTggKmRlY29kZV9ybV9ieXRlX3JlZ2lzdGVyKGludCByZWcpOworKyAgICB1MTYgKmRlY29kZV9ybV93b3JkX3JlZ2lzdGVyKGludCByZWcpOworKyAgICB1MzIgKmRlY29kZV9ybV9sb25nX3JlZ2lzdGVyKGludCByZWcpOworKyAgICB1MTYgKmRlY29kZV9ybV9zZWdfcmVnaXN0ZXIoaW50IHJlZyk7CisrICAgIHUzMiBkZWNvZGVfcm0wMF9hZGRyZXNzKGludCBybSk7CisrICAgIHUzMiBkZWNvZGVfcm0wMV9hZGRyZXNzKGludCBybSk7CisrICAgIHUzMiBkZWNvZGVfcm0xMF9hZGRyZXNzKGludCBybSk7CisrICAgIHUzMiBkZWNvZGVfc2liX2FkZHJlc3MoaW50IHNpYiwgaW50IG1vZCk7CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLX0gICAgICAgICAgICAgICAgICAgICAgIAkJCS8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgCSovCisrfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgICAgICAgICAgKi8KKyAjZW5kaWYKKy0KKy0jZW5kaWYgLyogX19YODZFTVVfREVDT0RFX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX0RFQ09ERV9IICovCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUveDg2ZW11L2ZwdS5oIGIvbGlicy94ODZlbXUveDg2ZW11L2ZwdS5oCitpbmRleCA1ZmIyNzE0Li4xYzExNDk4IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L2ZwdS5oCisrKysgYi9saWJzL3g4NmVtdS94ODZlbXUvZnB1LmgKK0BAIC00MCwyMiArNDAsMjEgQEAKKyAjZGVmaW5lIF9fWDg2RU1VX0ZQVV9ICisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIgeyAgICAgICAgICAgIAkJCS8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisrZXh0ZXJuICJDIiB7ICAgICAgICAgICAgICAgICAgICAvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworICNlbmRpZgorIAorIC8qIHRoZXNlIGhhdmUgdG8gYmUgZGVmaW5lZCwgd2hldGhlciA4MDg3IHN1cHBvcnQgY29tcGlsZWQgaW4gb3Igbm90LiAqLworIAorLWV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDggKHU4IG9wMSk7CistZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOSAodTggb3AxKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RhICh1OCBvcDEpOworLWV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGIgKHU4IG9wMSk7CistZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYyAodTggb3AxKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RkICh1OCBvcDEpOworLWV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGUgKHU4IG9wMSk7CistZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZiAodTggb3AxKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOCh1OCBvcDEpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q5KHU4IG9wMSk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGEodTggb3AxKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYih1OCBvcDEpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RjKHU4IG9wMSk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGQodTggb3AxKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZSh1OCBvcDEpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RmKHU4IG9wMSk7CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLX0gICAgICAgICAgICAgICAgICAgICAgIAkJCS8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgCSovCisrfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgICAgICAgICAgKi8KKyAjZW5kaWYKKy0KKy0jZW5kaWYgLyogX19YODZFTVVfRlBVX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX0ZQVV9IICovCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUveDg2ZW11L2ZwdV9yZWdzLmggYi9saWJzL3g4NmVtdS94ODZlbXUvZnB1X3JlZ3MuaAoraW5kZXggZTU5YjgwNy4uNWE3ODBlNiAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS9mcHVfcmVncy5oCisrKysgYi9saWJzL3g4NmVtdS94ODZlbXUvZnB1X3JlZ3MuaAorQEAgLTQyLDIzICs0MiwyMyBAQAorICNpZmRlZiBYODZfRlBVX1NVUFBPUlQKKyAKKyAjaWZkZWYgUEFDSworLSMgcHJhZ21hIFBBQ0sKKysjcHJhZ21hIFBBQ0sKKyAjZW5kaWYKKyAKKyAvKiBCYXNpYyA4MDg3IHJlZ2lzdGVyIGNhbiBob2xkIGFueSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczogKi8KKyAKKyB1bmlvbiB4ODZfZnB1X3JlZ191IHsKKy0gICAgczggICAgICAgICAgICAgICAgICB0ZW5ieXRlc1sxMF07CistICAgIGRvdWJsZSAgICAgICAgICAgICAgZHZhbDsKKy0gICAgZmxvYXQgICAgICAgICAgICAgICBmdmFsOworLSAgICBzMTYgICAgICAgICAgICAgICAgIHN2YWw7CistICAgIHMzMiAgICAgICAgICAgICAgICAgbHZhbDsKKy0JfTsKKysgICAgczggdGVuYnl0ZXNbMTBdOworKyAgICBkb3VibGUgZHZhbDsKKysgICAgZmxvYXQgZnZhbDsKKysgICAgczE2IHN2YWw7CisrICAgIHMzMiBsdmFsOworK307CisgCisgc3RydWN0IHg4Nl9mcHVfcmVnIHsKKy0JdW5pb24geDg2X2ZwdV9yZWdfdSByZWc7CistCWNoYXIgICAgICAgICAgICAgICAgdGFnOworLQl9OworKyAgICB1bmlvbiB4ODZfZnB1X3JlZ191IHJlZzsKKysgICAgY2hhciB0YWc7CisrfTsKKyAKKyAvKgorICAqIFNpbmNlIHdlIGFyZSBub3QgZ29pbmcgdG8gd29ycnkgYWJvdXQgdGhlIHByb2JsZW1zIG9mIGFsaWFzaW5nCitAQCAtODMsMTQgKzgzLDE0IEBAIHN0cnVjdCB4ODZfZnB1X3JlZyB7CisgI2RlZmluZSAgWDg2X0ZQVV9TVEtUT1AgIDAKKyAKKyBzdHJ1Y3QgeDg2X2ZwdV9yZWdpc3RlcnMgeworLSAgICBzdHJ1Y3QgeDg2X2ZwdV9yZWcgIHg4Nl9mcHVfc3RhY2tbOF07CistICAgIGludCAgICAgICAgICAgICAgICAgeDg2X2ZwdV9mbGFnczsKKy0gICAgaW50ICAgICAgICAgICAgICAgICB4ODZfZnB1X2NvbmZpZzsgICAgICAgICAvKiByb3VuZGluZyBtb2RlcywgZXRjLiAqLworLSAgICBzaG9ydCAgICAgICAgICAgICAgIHg4Nl9mcHVfdG9zLCB4ODZfZnB1X2JvczsKKy0JfTsKKysgICAgc3RydWN0IHg4Nl9mcHVfcmVnIHg4Nl9mcHVfc3RhY2tbOF07CisrICAgIGludCB4ODZfZnB1X2ZsYWdzOworKyAgICBpbnQgeDg2X2ZwdV9jb25maWc7ICAgICAgICAgLyogcm91bmRpbmcgbW9kZXMsIGV0Yy4gKi8KKysgICAgc2hvcnQgeDg2X2ZwdV90b3MsIHg4Nl9mcHVfYm9zOworK307CisgCisgI2lmZGVmIEVORF9QQUNLCistIyBwcmFnbWEgRU5EX1BBQ0sKKysjcHJhZ21hIEVORF9QQUNLCisgI2VuZGlmCisgCisgLyoKK0BAIC0xMDQsMTYgKzEwNCwxNiBAQCBzdHJ1Y3QgeDg2X2ZwdV9yZWdpc3RlcnMgeworICAqIGluc3RydWN0aW9ucy4KKyAgKi8KKyAKKy0jZW5kaWYgLyogWDg2X0ZQVV9TVVBQT1JUICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBYODZfRlBVX1NVUFBPUlQgKi8KKyAKKyAjaWZkZWYgREVCVUcKKy0jIGRlZmluZSBERUNPREVfUFJJTlRJTlNUUjMyKHQsbW9kLHJoLHJsKSAgICAgCVwKKysjZGVmaW5lIERFQ09ERV9QUklOVElOU1RSMzIodCxtb2QscmgscmwpICAgICAJXAorIAlERUNPREVfUFJJTlRGKHRbKG1vZDw8MykrKHJoKV0pOworLSMgZGVmaW5lIERFQ09ERV9QUklOVElOU1RSMjU2KHQsbW9kLHJoLHJsKSAgICAJXAorKyNkZWZpbmUgREVDT0RFX1BSSU5USU5TVFIyNTYodCxtb2QscmgscmwpICAgIAlcCisgCURFQ09ERV9QUklOVEYodFsobW9kPDw2KSsocmg8PDMpKyhybCldKTsKKyAjZWxzZQorLSMgZGVmaW5lIERFQ09ERV9QUklOVElOU1RSMzIodCxtb2QscmgscmwpCistIyBkZWZpbmUgREVDT0RFX1BSSU5USU5TVFIyNTYodCxtb2QscmgscmwpCisrI2RlZmluZSBERUNPREVfUFJJTlRJTlNUUjMyKHQsbW9kLHJoLHJsKQorKyNkZWZpbmUgREVDT0RFX1BSSU5USU5TVFIyNTYodCxtb2QscmgscmwpCisgI2VuZGlmCisgCistI2VuZGlmIC8qIF9fWDg2RU1VX0ZQVV9SRUdTX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX0ZQVV9SRUdTX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvb3BzLmggYi9saWJzL3g4NmVtdS94ODZlbXUvb3BzLmgKK2luZGV4IDY1ZWE2NzYuLjFiYzA3YTQgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUvb3BzLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS9vcHMuaAorQEAgLTM5LDcgKzM5LDcgQEAKKyAjaWZuZGVmIF9fWDg2RU1VX09QU19ICisgI2RlZmluZSBfX1g4NkVNVV9PUFNfSAorIAorLWV4dGVybiB2b2lkICgqeDg2ZW11X29wdGFiWzB4MTAwXSkodTggb3AxKTsKKy1leHRlcm4gdm9pZCAoKng4NmVtdV9vcHRhYjJbMHgxMDBdKSh1OCBvcDIpOworK2V4dGVybiB2b2lkICgqeDg2ZW11X29wdGFiWzB4MTAwXSkgKHU4IG9wMSk7CisrZXh0ZXJuIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzB4MTAwXSkgKHU4IG9wMik7CisgCistI2VuZGlmIC8qIF9fWDg2RU1VX09QU19IICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9PUFNfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX2FzbS5oIGIvbGlicy94ODZlbXUveDg2ZW11L3ByaW1fYXNtLmgKK2luZGV4IGUwMjNjZjguLmFjYTEzMmIgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV9hc20uaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L3ByaW1fYXNtLmgKK0BAIC00OSwxNCArNDksMTYgQEAKKyAjZGVmaW5lCV9fSEFWRV9JTkxJTkVfQVNTRU1CTEVSX18KKyAjZW5kaWYKKyAKKy11MzIJCWdldF9mbGFnc19hc20odm9pZCk7CisrdTMyIGdldF9mbGFnc19hc20odm9pZCk7CisrCisgI3ByYWdtYSBhdXggZ2V0X2ZsYWdzX2FzbSA9CQkJXAorIAkicHVzaGYiICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJInBvcAllYXgiICAgICAgICAgICAgICAgICAgCVwKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4XTsKKyAKKy11MTYgICAgIGFhYV93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyt1MTYgYWFhX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCk7CisrCisgI3ByYWdtYSBhdXggYWFhX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC02Nyw3ICs2OSw4IEBAIHUxNiAgICAgYWFhX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheF07CisgCistdTE2ICAgICBhYXNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisrdTE2IGFhc193b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQpOworKworICNwcmFnbWEgYXV4IGFhc193b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNzgsNyArODEsOCBAQCB1MTYgICAgIGFhc193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXhdOworIAorLXUxNiAgICAgYWFkX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworK3UxNiBhYWRfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkKTsKKysKKyAjcHJhZ21hIGF1eCBhYWRfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTg5LDcgKzkzLDggQEAgdTE2ICAgICBhYWRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4XTsKKyAKKy11MTYgICAgIGFhbV93b3JkX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworK3UxNiBhYW1fd29yZF9hc20odTMyICogZmxhZ3MsIHU4IGQpOworKworICNwcmFnbWEgYXV4IGFhbV93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTAwLDcgKzEwNSw4IEBAIHUxNiAgICAgYWFtX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4XTsKKyAKKy11OCAgICAgIGFkY19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IGFkY19ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggYWRjX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xMTEsNyArMTE3LDggQEAgdTggICAgICBhZGNfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgYmxdOworIAorLXUxNiAgICAgYWRjX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyt1MTYgYWRjX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IGFkY193b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTIyLDcgKzEyOSw4IEBAIHUxNiAgICAgYWRjX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggYnhdOworIAorLXUzMiAgICAgYWRjX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyt1MzIgYWRjX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IGFkY19sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTMzLDcgKzE0MSw4IEBAIHUzMiAgICAgYWRjX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGVieF07CisgCistdTggICAgICBhZGRfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCBhZGRfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IGFkZF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTQ0LDcgKzE1Myw4IEBAIHU4ICAgICAgYWRkX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGJsXTsKKyAKKy11MTYgICAgIGFkZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisrdTE2IGFkZF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBhZGRfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTE1NSw3ICsxNjUsOCBAQCB1MTYgICAgIGFkZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGJ4XTsKKyAKKy11MzIgICAgIGFkZF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisrdTMyIGFkZF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBhZGRfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTE2Niw3ICsxNzcsOCBAQCB1MzIgICAgIGFkZF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgYW5kX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggYW5kX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBhbmRfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTE3Nyw3ICsxODksOCBAQCB1OCAgICAgIGFuZF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICBhbmRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBhbmRfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggYW5kX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xODgsNyArMjAxLDggQEAgdTE2ICAgICBhbmRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBhbmRfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiBhbmRfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggYW5kX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xOTksNyArMjEzLDggQEAgdTMyICAgICBhbmRfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy11OCAgICAgIGNtcF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IGNtcF9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggY21wX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yMTAsNyArMjI1LDggQEAgdTggICAgICBjbXBfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgYmxdOworIAorLXUxNiAgICAgY21wX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyt1MTYgY21wX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IGNtcF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMjIxLDcgKzIzNyw4IEBAIHUxNiAgICAgY21wX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggYnhdOworIAorLXUzMiAgICAgY21wX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyt1MzIgY21wX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IGNtcF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMjMyLDcgKzI0OSw4IEBAIHUzMiAgICAgY21wX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGVieF07CisgCistdTggICAgICBkYWFfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyt1OCBkYWFfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQpOworKworICNwcmFnbWEgYXV4IGRhYV9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMjQzLDcgKzI2MSw4IEBAIHU4ICAgICAgZGFhX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsXTsKKyAKKy11OCAgICAgIGRhc19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworK3U4IGRhc19ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCk7CisrCisgI3ByYWdtYSBhdXggZGFzX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yNTQsNyArMjczLDggQEAgdTggICAgICBkYXNfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWxdOworIAorLXU4ICAgICAgZGVjX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTggZGVjX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkKTsKKysKKyAjcHJhZ21hIGF1eCBkZWNfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTI2NSw3ICsyODUsOCBAQCB1OCAgICAgIGRlY19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbF07CisgCistdTE2ICAgICBkZWNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisrdTE2IGRlY193b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQpOworKworICNwcmFnbWEgYXV4IGRlY193b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMjc2LDcgKzI5Nyw4IEBAIHUxNiAgICAgZGVjX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheF07CisgCistdTMyICAgICBkZWNfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisrdTMyIGRlY19sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQpOworKworICNwcmFnbWEgYXV4IGRlY19sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMjg3LDcgKzMwOSw4IEBAIHUzMiAgICAgZGVjX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXhdOworIAorLXU4ICAgICAgaW5jX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTggaW5jX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkKTsKKysKKyAjcHJhZ21hIGF1eCBpbmNfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTI5OCw3ICszMjEsOCBAQCB1OCAgICAgIGluY19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbF07CisgCistdTE2ICAgICBpbmNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisrdTE2IGluY193b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQpOworKworICNwcmFnbWEgYXV4IGluY193b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzA5LDcgKzMzMyw4IEBAIHUxNiAgICAgaW5jX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheF07CisgCistdTMyICAgICBpbmNfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisrdTMyIGluY19sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQpOworKworICNwcmFnbWEgYXV4IGluY19sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzIwLDcgKzM0NSw4IEBAIHUzMiAgICAgaW5jX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXhdOworIAorLXU4ICAgICAgb3JfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCBvcl9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggb3JfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTMzMSw3ICszNTcsOCBAQCB1OCAgICAgIG9yX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGJsXTsKKyAKKy11MTYgICAgIG9yX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyt1MTYgb3Jfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggb3Jfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTM0Miw3ICszNjksOCBAQCB1MTYgICAgIG9yX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggYnhdOworIAorLXUzMiAgICAgb3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiBvcl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBvcl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzUzLDcgKzM4MSw4IEBAIHUzMiAgICAgb3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy11OCAgICAgIG5lZ19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworK3U4IG5lZ19ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCk7CisrCisgI3ByYWdtYSBhdXggbmVnX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0zNjQsNyArMzkzLDggQEAgdTggICAgICBuZWdfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWxdOworIAorLXUxNiAgICAgbmVnX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworK3UxNiBuZWdfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkKTsKKysKKyAjcHJhZ21hIGF1eCBuZWdfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTM3NSw3ICs0MDUsOCBAQCB1MTYgICAgIG5lZ193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXhdOworIAorLXUzMiAgICAgbmVnX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQpOworK3UzMiBuZWdfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkKTsKKysKKyAjcHJhZ21hIGF1eCBuZWdfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTM4Niw3ICs0MTcsOCBAQCB1MzIgICAgIG5lZ19sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4XTsKKyAKKy11OCAgICAgIG5vdF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworK3U4IG5vdF9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCk7CisrCisgI3ByYWdtYSBhdXggbm90X2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0zOTcsNyArNDI5LDggQEAgdTggICAgICBub3RfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWxdOworIAorLXUxNiAgICAgbm90X3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworK3UxNiBub3Rfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkKTsKKysKKyAjcHJhZ21hIGF1eCBub3Rfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTQwOCw3ICs0NDEsOCBAQCB1MTYgICAgIG5vdF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXhdOworIAorLXUzMiAgICAgbm90X2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQpOworK3UzMiBub3RfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkKTsKKysKKyAjcHJhZ21hIGF1eCBub3RfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTQxOSw3ICs0NTMsOCBAQCB1MzIgICAgIG5vdF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4XTsKKyAKKy11OCAgICAgIHJjbF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IHJjbF9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggcmNsX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC00MzAsNyArNDY1LDggQEAgdTggICAgICByY2xfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgY2xdOworIAorLXUxNiAgICAgcmNsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworK3UxNiByY2xfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByY2xfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTQ0MSw3ICs0NzcsOCBAQCB1MTYgICAgIHJjbF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1OCBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggY2xdOworIAorLXUzMiAgICAgcmNsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworK3UzMiByY2xfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByY2xfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTQ1Miw3ICs0ODksOCBAQCB1MzIgICAgIHJjbF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1OCBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGNsXTsKKyAKKy11OCAgICAgIHJjcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IHJjcl9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggcmNyX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC00NjMsNyArNTAxLDggQEAgdTggICAgICByY3JfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgY2xdOworIAorLXUxNiAgICAgcmNyX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworK3UxNiByY3Jfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByY3Jfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTQ3NCw3ICs1MTMsOCBAQCB1MTYgICAgIHJjcl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1OCBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggY2xdOworIAorLXUzMiAgICAgcmNyX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworK3UzMiByY3JfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByY3JfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTQ4NSw3ICs1MjUsOCBAQCB1MzIgICAgIHJjcl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1OCBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGNsXTsKKyAKKy11OCAgICAgIHJvbF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IHJvbF9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggcm9sX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC00OTYsNyArNTM3LDggQEAgdTggICAgICByb2xfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgY2xdOworIAorLXUxNiAgICAgcm9sX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworK3UxNiByb2xfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByb2xfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTUwNyw3ICs1NDksOCBAQCB1MTYgICAgIHJvbF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1OCBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggY2xdOworIAorLXUzMiAgICAgcm9sX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworK3UzMiByb2xfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByb2xfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTUxOCw3ICs1NjEsOCBAQCB1MzIgICAgIHJvbF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1OCBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGNsXTsKKyAKKy11OCAgICAgIHJvcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IHJvcl9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggcm9yX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC01MjksNyArNTczLDggQEAgdTggICAgICByb3JfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgY2xdOworIAorLXUxNiAgICAgcm9yX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworK3UxNiByb3Jfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByb3Jfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTU0MCw3ICs1ODUsOCBAQCB1MTYgICAgIHJvcl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1OCBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggY2xdOworIAorLXUzMiAgICAgcm9yX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworK3UzMiByb3JfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByb3JfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTU1MSw3ICs1OTcsOCBAQCB1MzIgICAgIHJvcl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1OCBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGNsXTsKKyAKKy11OCAgICAgIHNobF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IHNobF9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggc2hsX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC01NjIsNyArNjA5LDggQEAgdTggICAgICBzaGxfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgY2xdOworIAorLXUxNiAgICAgc2hsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworK3UxNiBzaGxfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaGxfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTU3Myw3ICs2MjEsOCBAQCB1MTYgICAgIHNobF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1OCBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggY2xdOworIAorLXUzMiAgICAgc2hsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworK3UzMiBzaGxfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaGxfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTU4NCw3ICs2MzMsOCBAQCB1MzIgICAgIHNobF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1OCBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGNsXTsKKyAKKy11OCAgICAgIHNocl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IHNocl9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggc2hyX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC01OTUsNyArNjQ1LDggQEAgdTggICAgICBzaHJfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgY2xdOworIAorLXUxNiAgICAgc2hyX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworK3UxNiBzaHJfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaHJfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTYwNiw3ICs2NTcsOCBAQCB1MTYgICAgIHNocl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1OCBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggY2xdOworIAorLXUzMiAgICAgc2hyX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworK3UzMiBzaHJfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaHJfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTYxNyw3ICs2NjksOCBAQCB1MzIgICAgIHNocl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1OCBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGNsXTsKKyAKKy11OCAgICAgIHNhcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IHNhcl9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggc2FyX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC02MjgsNyArNjgxLDggQEAgdTggICAgICBzYXJfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgY2xdOworIAorLXUxNiAgICAgc2FyX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworK3UxNiBzYXJfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzYXJfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTYzOSw3ICs2OTMsOCBAQCB1MTYgICAgIHNhcl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1OCBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggY2xdOworIAorLXUzMiAgICAgc2FyX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworK3UzMiBzYXJfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzYXJfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTY1MCw3ICs3MDUsOCBAQCB1MzIgICAgIHNhcl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1OCBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGNsXTsKKyAKKy11MTYJCXNobGRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworK3UxNiBzaGxkX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNobGRfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTY2MSw3ICs3MTcsOCBAQCB1MTYJCXNobGRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBkeCBjbF07CisgCistdTMyICAgICBzaGxkX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKyt1MzIgc2hsZF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaGxkX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC02NzIsNyArNzI5LDggQEAgdTMyICAgICBzaGxkX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGVkeCBjbF07CisgCistdTE2CQlzaHJkX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBmaWxsLCB1OCBzKTsKKyt1MTYgc2hyZF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBmaWxsLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaHJkX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC02ODMsNyArNzQxLDggQEAgdTE2CQlzaHJkX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBmaWxsLCB1OCBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggZHggY2xdOworIAorLXUzMiAgICAgc2hyZF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CisrdTMyIHNocmRfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggc2hyZF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjk0LDcgKzc1Myw4IEBAIHUzMiAgICAgc2hyZF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlZHggY2xdOworIAorLXU4ICAgICAgc2JiX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggc2JiX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzYmJfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTcwNSw3ICs3NjUsOCBAQCB1OCAgICAgIHNiYl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICBzYmJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBzYmJfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggc2JiX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03MTYsNyArNzc3LDggQEAgdTE2ICAgICBzYmJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBzYmJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiBzYmJfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggc2JiX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03MjcsNyArNzg5LDggQEAgdTMyICAgICBzYmJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy11OCAgICAgIHN1Yl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IHN1Yl9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggc3ViX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03MzgsNyArODAxLDggQEAgdTggICAgICBzdWJfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgYmxdOworIAorLXUxNiAgICAgc3ViX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyt1MTYgc3ViX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IHN1Yl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNzQ5LDcgKzgxMyw4IEBAIHUxNiAgICAgc3ViX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggYnhdOworIAorLXUzMiAgICAgc3ViX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyt1MzIgc3ViX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IHN1Yl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNzYwLDcgKzgyNSw4IEBAIHUzMiAgICAgc3ViX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGVieF07CisgCistdm9pZAl0ZXN0X2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7Cisrdm9pZCB0ZXN0X2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCB0ZXN0X2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03NzAsNyArODM2LDggQEAgdm9pZAl0ZXN0X2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXBhcm0gW2VkaV0gW2FsXSBbYmxdICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGJsXTsKKyAKKy12b2lkCXRlc3Rfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3ZvaWQgdGVzdF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCB0ZXN0X3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03ODAsNyArODQ3LDggQEAgdm9pZAl0ZXN0X3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyAJcGFybSBbZWRpXSBbYXhdIFtieF0gICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggYnhdOworIAorLXZvaWQJdGVzdF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7Cisrdm9pZCB0ZXN0X2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IHRlc3RfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTc5MCw3ICs4NTgsOCBAQCB2b2lkCXRlc3RfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAlwYXJtIFtlZGldIFtlYXhdIFtlYnhdICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy11OCAgICAgIHhvcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IHhvcl9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggeG9yX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04MDEsNyArODcwLDggQEAgdTggICAgICB4b3JfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgYmxdOworIAorLXUxNiAgICAgeG9yX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyt1MTYgeG9yX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IHhvcl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODEyLDcgKzg4Miw4IEBAIHUxNiAgICAgeG9yX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggYnhdOworIAorLXUzMiAgICAgeG9yX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyt1MzIgeG9yX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IHhvcl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODIzLDcgKzg5NCw4IEBAIHUzMiAgICAgeG9yX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGVieF07CisgCistdm9pZCAgICBpbXVsX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1OCBkLHU4IHMpOworK3ZvaWQgaW11bF9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTE2ICogYXgsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IGltdWxfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTgzNCw3ICs5MDYsOCBAQCB2b2lkICAgIGltdWxfYnl0ZV9hc20odTMyICpmbGFncyx1MTYgKmF4LHU4IGQsdTggcyk7CisgCXBhcm0gW2VkaV0gW2VzaV0gW2FsXSBbYmxdICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VzaSBheCBibF07CisgCistdm9pZCAgICBpbXVsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1MTYgKmR4LHUxNiBkLHUxNiBzKTsKKyt2b2lkIGltdWxfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiAqIGF4LCB1MTYgKiBkeCwgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBpbXVsX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04NDYsNyArOTE5LDggQEAgdm9pZCAgICBpbXVsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1MTYgKmR4LHUxNiBkLHUxNiBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbZWN4XSBbYXhdIFtieF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBheCBieCBkeF07CisgCistdm9pZCAgICBpbXVsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyICplYXgsdTMyICplZHgsdTMyIGQsdTMyIHMpOworK3ZvaWQgaW11bF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyICogZWF4LCB1MzIgKiBlZHgsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggaW11bF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODU4LDcgKzkzMiw4IEBAIHZvaWQgICAgaW11bF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiAqZWF4LHUzMiAqZWR4LHUzMiBkLHUzMiBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbZWN4XSBbZWF4XSBbZWJ4XSBcCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBlYXggZWJ4IGVkeF07CisgCistdm9pZCAgICBtdWxfYnl0ZV9hc20odTMyICpmbGFncyx1MTYgKmF4LHU4IGQsdTggcyk7Cisrdm9pZCBtdWxfYnl0ZV9hc20odTMyICogZmxhZ3MsIHUxNiAqIGF4LCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBtdWxfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTg2OSw3ICs5NDQsOCBAQCB2b2lkICAgIG11bF9ieXRlX2FzbSh1MzIgKmZsYWdzLHUxNiAqYXgsdTggZCx1OCBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbYWxdIFtibF0gICAgICBcCisgCW1vZGlmeSBleGFjdCBbZXNpIGF4IGJsXTsKKyAKKy12b2lkICAgIG11bF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiAqYXgsdTE2ICpkeCx1MTYgZCx1MTYgcyk7Cisrdm9pZCBtdWxfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiAqIGF4LCB1MTYgKiBkeCwgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBtdWxfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTg4MSw3ICs5NTcsOCBAQCB2b2lkICAgIG11bF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiAqYXgsdTE2ICpkeCx1MTYgZCx1MTYgcyk7CisgCXBhcm0gW2VkaV0gW2VzaV0gW2VjeF0gW2F4XSBbYnhdXAorIAltb2RpZnkgZXhhY3QgW2VzaSBlZGkgYXggYnggZHhdOworIAorLXZvaWQgICAgbXVsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyICplYXgsdTMyICplZHgsdTMyIGQsdTMyIHMpOworK3ZvaWQgbXVsX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgKiBlYXgsIHUzMiAqIGVkeCwgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBtdWxfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTg5Myw3ICs5NzAsOCBAQCB2b2lkICAgIG11bF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiAqZWF4LHUzMiAqZWR4LHUzMiBkLHUzMiBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbZWN4XSBbZWF4XSBbZWJ4XSBcCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBlYXggZWJ4IGVkeF07CisgCistdm9pZAlpZGl2X2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggKmFsLHU4ICphaCx1MTYgZCx1OCBzKTsKKyt2b2lkIGlkaXZfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4ICogYWwsIHU4ICogYWgsIHUxNiBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBpZGl2X2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC05MDUsNyArOTgzLDggQEAgdm9pZAlpZGl2X2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggKmFsLHU4ICphaCx1MTYgZCx1OCBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbZWN4XSBbYXhdIFtibF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBheCBibF07CisgCistdm9pZAlpZGl2X3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1MTYgKmR4LHUxNiBkbG8sdTE2IGRoaSx1MTYgcyk7Cisrdm9pZCBpZGl2X3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgKiBheCwgdTE2ICogZHgsIHUxNiBkbG8sIHUxNiBkaGksIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBpZGl2X3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC05MTcsNyArOTk2LDggQEAgdm9pZAlpZGl2X3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1MTYgKmR4LHUxNiBkbG8sdTE2IGRoaSx1MTYgcyk7CisgCXBhcm0gW2VkaV0gW2VzaV0gW2VjeF0gW2F4XSBbZHhdIFtieF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBheCBkeCBieF07CisgCistdm9pZAlpZGl2X2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyICplYXgsdTMyICplZHgsdTMyIGRsbyx1MzIgZGhpLHUzMiBzKTsKKyt2b2lkIGlkaXZfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiAqIGVheCwgdTMyICogZWR4LCB1MzIgZGxvLCB1MzIgZGhpLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggaWRpdl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtOTI5LDcgKzEwMDksOCBAQCB2b2lkCWlkaXZfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZGxvLHUzMiBkaGksdTMyIHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtlYXhdIFtlZHhdIFtlYnhdXAorIAltb2RpZnkgZXhhY3QgW2VzaSBlZGkgZWF4IGVkeCBlYnhdOworIAorLXZvaWQJZGl2X2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggKmFsLHU4ICphaCx1MTYgZCx1OCBzKTsKKyt2b2lkIGRpdl9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggKiBhbCwgdTggKiBhaCwgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IGRpdl9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtOTQxLDcgKzEwMjIsOCBAQCB2b2lkCWRpdl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4ICphbCx1OCAqYWgsdTE2IGQsdTggcyk7CisgCXBhcm0gW2VkaV0gW2VzaV0gW2VjeF0gW2F4XSBbYmxdXAorIAltb2RpZnkgZXhhY3QgW2VzaSBlZGkgYXggYmxdOworIAorLXZvaWQJZGl2X3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1MTYgKmR4LHUxNiBkbG8sdTE2IGRoaSx1MTYgcyk7Cisrdm9pZCBkaXZfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiAqIGF4LCB1MTYgKiBkeCwgdTE2IGRsbywgdTE2IGRoaSwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IGRpdl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtOTUzLDcgKzEwMzUsOCBAQCB2b2lkCWRpdl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiAqYXgsdTE2ICpkeCx1MTYgZGxvLHUxNiBkaGksdTE2IHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtheF0gW2R4XSBbYnhdXAorIAltb2RpZnkgZXhhY3QgW2VzaSBlZGkgYXggZHggYnhdOworIAorLXZvaWQJZGl2X2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyICplYXgsdTMyICplZHgsdTMyIGRsbyx1MzIgZGhpLHUzMiBzKTsKKyt2b2lkIGRpdl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyICogZWF4LCB1MzIgKiBlZHgsIHUzMiBkbG8sIHUzMiBkaGksIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBkaXZfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTk2Nyw0ICsxMDUwLDQgQEAgdm9pZAlkaXZfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZGxvLHUzMiBkaGksdTMyIHMpOworIAorICNlbmRpZgorIAorLSNlbmRpZiAvKiBfX1g4NkVNVV9QUklNX0FTTV9IICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9QUklNX0FTTV9IICovCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUveDg2ZW11L3ByaW1fb3BzLmggYi9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV9vcHMuaAoraW5kZXggYmVhODM1Ny4uMGYwZTc4ZCAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX29wcy5oCisrKysgYi9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV9vcHMuaAorQEAgLTQwLDEwMiArNDAsMTAyIEBACisgI2RlZmluZSBfX1g4NkVNVV9QUklNX09QU19ICisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIgeyAgICAgICAgICAgIAkJCS8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisrZXh0ZXJuICJDIiB7ICAgICAgICAgICAgICAgICAgICAvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworICNlbmRpZgorIAorLXUxNiAgICAgYWFhX3dvcmQgKHUxNiBkKTsKKy11MTYgICAgIGFhc193b3JkICh1MTYgZCk7CistdTE2ICAgICBhYWRfd29yZCAodTE2IGQpOworLXUxNiAgICAgYWFtX3dvcmQgKHU4IGQpOworLXU4ICAgICAgYWRjX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgYWRjX3dvcmQgKHUxNiBkLCB1MTYgcyk7CistdTMyICAgICBhZGNfbG9uZyAodTMyIGQsIHUzMiBzKTsKKy11OCAgICAgIGFkZF9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIGFkZF93b3JkICh1MTYgZCwgdTE2IHMpOworLXUzMiAgICAgYWRkX2xvbmcgKHUzMiBkLCB1MzIgcyk7CistdTggICAgICBhbmRfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBhbmRfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIGFuZF9sb25nICh1MzIgZCwgdTMyIHMpOworLXU4ICAgICAgY21wX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgY21wX3dvcmQgKHUxNiBkLCB1MTYgcyk7CistdTMyICAgICBjbXBfbG9uZyAodTMyIGQsIHUzMiBzKTsKKy11OCAgICAgIGRhYV9ieXRlICh1OCBkKTsKKy11OCAgICAgIGRhc19ieXRlICh1OCBkKTsKKy11OCAgICAgIGRlY19ieXRlICh1OCBkKTsKKy11MTYgICAgIGRlY193b3JkICh1MTYgZCk7CistdTMyICAgICBkZWNfbG9uZyAodTMyIGQpOworLXU4ICAgICAgaW5jX2J5dGUgKHU4IGQpOworLXUxNiAgICAgaW5jX3dvcmQgKHUxNiBkKTsKKy11MzIgICAgIGluY19sb25nICh1MzIgZCk7CistdTggICAgICBvcl9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIG9yX3dvcmQgKHUxNiBkLCB1MTYgcyk7CistdTMyICAgICBvcl9sb25nICh1MzIgZCwgdTMyIHMpOworLXU4ICAgICAgbmVnX2J5dGUgKHU4IHMpOworLXUxNiAgICAgbmVnX3dvcmQgKHUxNiBzKTsKKy11MzIgICAgIG5lZ19sb25nICh1MzIgcyk7CistdTggICAgICBub3RfYnl0ZSAodTggcyk7CistdTE2ICAgICBub3Rfd29yZCAodTE2IHMpOworLXUzMiAgICAgbm90X2xvbmcgKHUzMiBzKTsKKy11OCAgICAgIHJjbF9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIHJjbF93b3JkICh1MTYgZCwgdTggcyk7CistdTMyICAgICByY2xfbG9uZyAodTMyIGQsIHU4IHMpOworLXU4ICAgICAgcmNyX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgcmNyX3dvcmQgKHUxNiBkLCB1OCBzKTsKKy11MzIgICAgIHJjcl9sb25nICh1MzIgZCwgdTggcyk7CistdTggICAgICByb2xfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICByb2xfd29yZCAodTE2IGQsIHU4IHMpOworLXUzMiAgICAgcm9sX2xvbmcgKHUzMiBkLCB1OCBzKTsKKy11OCAgICAgIHJvcl9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIHJvcl93b3JkICh1MTYgZCwgdTggcyk7CistdTMyICAgICByb3JfbG9uZyAodTMyIGQsIHU4IHMpOworLXU4ICAgICAgc2hsX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgc2hsX3dvcmQgKHUxNiBkLCB1OCBzKTsKKy11MzIgICAgIHNobF9sb25nICh1MzIgZCwgdTggcyk7CistdTggICAgICBzaHJfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBzaHJfd29yZCAodTE2IGQsIHU4IHMpOworLXUzMiAgICAgc2hyX2xvbmcgKHUzMiBkLCB1OCBzKTsKKy11OCAgICAgIHNhcl9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIHNhcl93b3JkICh1MTYgZCwgdTggcyk7CistdTMyICAgICBzYXJfbG9uZyAodTMyIGQsIHU4IHMpOworLXUxNiAgICAgc2hsZF93b3JkICh1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworLXUzMiAgICAgc2hsZF9sb25nICh1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworLXUxNiAgICAgc2hyZF93b3JkICh1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworLXUzMiAgICAgc2hyZF9sb25nICh1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworLXU4ICAgICAgc2JiX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgc2JiX3dvcmQgKHUxNiBkLCB1MTYgcyk7CistdTMyICAgICBzYmJfbG9uZyAodTMyIGQsIHUzMiBzKTsKKy11OCAgICAgIHN1Yl9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIHN1Yl93b3JkICh1MTYgZCwgdTE2IHMpOworLXUzMiAgICAgc3ViX2xvbmcgKHUzMiBkLCB1MzIgcyk7Cistdm9pZCAgICB0ZXN0X2J5dGUgKHU4IGQsIHU4IHMpOworLXZvaWQgICAgdGVzdF93b3JkICh1MTYgZCwgdTE2IHMpOworLXZvaWQgICAgdGVzdF9sb25nICh1MzIgZCwgdTMyIHMpOworLXU4ICAgICAgeG9yX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgeG9yX3dvcmQgKHUxNiBkLCB1MTYgcyk7CistdTMyICAgICB4b3JfbG9uZyAodTMyIGQsIHUzMiBzKTsKKy12b2lkICAgIGltdWxfYnl0ZSAodTggcyk7Cistdm9pZCAgICBpbXVsX3dvcmQgKHUxNiBzKTsKKy12b2lkICAgIGltdWxfbG9uZyAodTMyIHMpOworLXZvaWQgCWltdWxfbG9uZ19kaXJlY3QodTMyICpyZXNfbG8sIHUzMiogcmVzX2hpLHUzMiBkLCB1MzIgcyk7Cistdm9pZCAgICBtdWxfYnl0ZSAodTggcyk7Cistdm9pZCAgICBtdWxfd29yZCAodTE2IHMpOworLXZvaWQgICAgbXVsX2xvbmcgKHUzMiBzKTsKKy12b2lkICAgIGlkaXZfYnl0ZSAodTggcyk7Cistdm9pZCAgICBpZGl2X3dvcmQgKHUxNiBzKTsKKy12b2lkICAgIGlkaXZfbG9uZyAodTMyIHMpOworLXZvaWQgICAgZGl2X2J5dGUgKHU4IHMpOworLXZvaWQgICAgZGl2X3dvcmQgKHUxNiBzKTsKKy12b2lkICAgIGRpdl9sb25nICh1MzIgcyk7Cistdm9pZCAgICBpbnMgKGludCBzaXplKTsKKy12b2lkICAgIG91dHMgKGludCBzaXplKTsKKy11MTYgICAgIG1lbV9hY2Nlc3Nfd29yZCAoaW50IGFkZHIpOworLXZvaWQgICAgcHVzaF93b3JkICh1MTYgdyk7Cistdm9pZCAgICBwdXNoX2xvbmcgKHUzMiB3KTsKKy11MTYgICAgIHBvcF93b3JkICh2b2lkKTsKKy11MzIJCXBvcF9sb25nICh2b2lkKTsKKysgICAgdTE2IGFhYV93b3JkKHUxNiBkKTsKKysgICAgdTE2IGFhc193b3JkKHUxNiBkKTsKKysgICAgdTE2IGFhZF93b3JkKHUxNiBkKTsKKysgICAgdTE2IGFhbV93b3JkKHU4IGQpOworKyAgICB1OCBhZGNfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IGFkY193b3JkKHUxNiBkLCB1MTYgcyk7CisrICAgIHUzMiBhZGNfbG9uZyh1MzIgZCwgdTMyIHMpOworKyAgICB1OCBhZGRfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IGFkZF93b3JkKHUxNiBkLCB1MTYgcyk7CisrICAgIHUzMiBhZGRfbG9uZyh1MzIgZCwgdTMyIHMpOworKyAgICB1OCBhbmRfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IGFuZF93b3JkKHUxNiBkLCB1MTYgcyk7CisrICAgIHUzMiBhbmRfbG9uZyh1MzIgZCwgdTMyIHMpOworKyAgICB1OCBjbXBfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IGNtcF93b3JkKHUxNiBkLCB1MTYgcyk7CisrICAgIHUzMiBjbXBfbG9uZyh1MzIgZCwgdTMyIHMpOworKyAgICB1OCBkYWFfYnl0ZSh1OCBkKTsKKysgICAgdTggZGFzX2J5dGUodTggZCk7CisrICAgIHU4IGRlY19ieXRlKHU4IGQpOworKyAgICB1MTYgZGVjX3dvcmQodTE2IGQpOworKyAgICB1MzIgZGVjX2xvbmcodTMyIGQpOworKyAgICB1OCBpbmNfYnl0ZSh1OCBkKTsKKysgICAgdTE2IGluY193b3JkKHUxNiBkKTsKKysgICAgdTMyIGluY19sb25nKHUzMiBkKTsKKysgICAgdTggb3JfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IG9yX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIG9yX2xvbmcodTMyIGQsIHUzMiBzKTsKKysgICAgdTggbmVnX2J5dGUodTggcyk7CisrICAgIHUxNiBuZWdfd29yZCh1MTYgcyk7CisrICAgIHUzMiBuZWdfbG9uZyh1MzIgcyk7CisrICAgIHU4IG5vdF9ieXRlKHU4IHMpOworKyAgICB1MTYgbm90X3dvcmQodTE2IHMpOworKyAgICB1MzIgbm90X2xvbmcodTMyIHMpOworKyAgICB1OCByY2xfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHJjbF93b3JkKHUxNiBkLCB1OCBzKTsKKysgICAgdTMyIHJjbF9sb25nKHUzMiBkLCB1OCBzKTsKKysgICAgdTggcmNyX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiByY3Jfd29yZCh1MTYgZCwgdTggcyk7CisrICAgIHUzMiByY3JfbG9uZyh1MzIgZCwgdTggcyk7CisrICAgIHU4IHJvbF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgcm9sX3dvcmQodTE2IGQsIHU4IHMpOworKyAgICB1MzIgcm9sX2xvbmcodTMyIGQsIHU4IHMpOworKyAgICB1OCByb3JfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHJvcl93b3JkKHUxNiBkLCB1OCBzKTsKKysgICAgdTMyIHJvcl9sb25nKHUzMiBkLCB1OCBzKTsKKysgICAgdTggc2hsX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiBzaGxfd29yZCh1MTYgZCwgdTggcyk7CisrICAgIHUzMiBzaGxfbG9uZyh1MzIgZCwgdTggcyk7CisrICAgIHU4IHNocl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgc2hyX3dvcmQodTE2IGQsIHU4IHMpOworKyAgICB1MzIgc2hyX2xvbmcodTMyIGQsIHU4IHMpOworKyAgICB1OCBzYXJfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHNhcl93b3JkKHUxNiBkLCB1OCBzKTsKKysgICAgdTMyIHNhcl9sb25nKHUzMiBkLCB1OCBzKTsKKysgICAgdTE2IHNobGRfd29yZCh1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworKyAgICB1MzIgc2hsZF9sb25nKHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CisrICAgIHUxNiBzaHJkX3dvcmQodTE2IGQsIHUxNiBmaWxsLCB1OCBzKTsKKysgICAgdTMyIHNocmRfbG9uZyh1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworKyAgICB1OCBzYmJfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHNiYl93b3JkKHUxNiBkLCB1MTYgcyk7CisrICAgIHUzMiBzYmJfbG9uZyh1MzIgZCwgdTMyIHMpOworKyAgICB1OCBzdWJfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHN1Yl93b3JkKHUxNiBkLCB1MTYgcyk7CisrICAgIHUzMiBzdWJfbG9uZyh1MzIgZCwgdTMyIHMpOworKyAgICB2b2lkIHRlc3RfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdm9pZCB0ZXN0X3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdm9pZCB0ZXN0X2xvbmcodTMyIGQsIHUzMiBzKTsKKysgICAgdTggeG9yX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiB4b3Jfd29yZCh1MTYgZCwgdTE2IHMpOworKyAgICB1MzIgeG9yX2xvbmcodTMyIGQsIHUzMiBzKTsKKysgICAgdm9pZCBpbXVsX2J5dGUodTggcyk7CisrICAgIHZvaWQgaW11bF93b3JkKHUxNiBzKTsKKysgICAgdm9pZCBpbXVsX2xvbmcodTMyIHMpOworKyAgICB2b2lkIGltdWxfbG9uZ19kaXJlY3QodTMyICogcmVzX2xvLCB1MzIgKiByZXNfaGksIHUzMiBkLCB1MzIgcyk7CisrICAgIHZvaWQgbXVsX2J5dGUodTggcyk7CisrICAgIHZvaWQgbXVsX3dvcmQodTE2IHMpOworKyAgICB2b2lkIG11bF9sb25nKHUzMiBzKTsKKysgICAgdm9pZCBpZGl2X2J5dGUodTggcyk7CisrICAgIHZvaWQgaWRpdl93b3JkKHUxNiBzKTsKKysgICAgdm9pZCBpZGl2X2xvbmcodTMyIHMpOworKyAgICB2b2lkIGRpdl9ieXRlKHU4IHMpOworKyAgICB2b2lkIGRpdl93b3JkKHUxNiBzKTsKKysgICAgdm9pZCBkaXZfbG9uZyh1MzIgcyk7CisrICAgIHZvaWQgaW5zKGludCBzaXplKTsKKysgICAgdm9pZCBvdXRzKGludCBzaXplKTsKKysgICAgdTE2IG1lbV9hY2Nlc3Nfd29yZChpbnQgYWRkcik7CisrICAgIHZvaWQgcHVzaF93b3JkKHUxNiB3KTsKKysgICAgdm9pZCBwdXNoX2xvbmcodTMyIHcpOworKyAgICB1MTYgcG9wX3dvcmQodm9pZCk7CisrICAgIHUzMiBwb3BfbG9uZyh2b2lkKTsKKysgICAgdm9pZCBjcHVpZCh2b2lkKTsKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistfSAgICAgICAgICAgICAgICAgICAgICAgCQkJLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAJKi8KKyt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgICAgICAgICAqLworICNlbmRpZgorLQorLSNlbmRpZiAvKiBfX1g4NkVNVV9QUklNX09QU19IICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9QUklNX09QU19IICovCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUveDg2ZW11L3ByaW1feDg2X2djYy5oIGIvbGlicy94ODZlbXUveDg2ZW11L3ByaW1feDg2X2djYy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNjQ2ZWM5ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L3ByaW1feDg2X2djYy5oCitAQCAtMCwwICsxLDc3IEBACisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysqCisrKiBJbmxpbmUgaGVscGVycyBmb3IgeDg2ZW11CisrKgorKyogQ29weXJpZ2h0IChDKSAyMDA4IEJhcnQgVHJvamFub3dza2ksIFN5bWJpbyBUZWNobm9sb2dpZXMsIExMQworKyoKKysqICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysqCisrKiAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQKKysqICBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisrKiAgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAorKyogIGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgorKyogIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgdGhlIGF1dGhvcnMgbm90IGJlIHVzZWQKKysqICBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCisrKiAgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgVGhlIGF1dGhvcnMgbWFrZXMgbm8KKysqICByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLgorKyogIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisrKgorKyogIFRIRSBBVVRIT1JTIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorKyogIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8KKysqICBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUgorKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YKKysqICBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IKKysqICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCisrKiAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKysqCisrKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrKgorKyogTGFuZ3VhZ2U6ICAgICBHTlUgQworKyogRW52aXJvbm1lbnQ6ICBHQ0Mgb24gaTM4NiBvciB4ODYtNjQKKysqIERldmVsb3BlcjogICAgQmFydCBUcm9qYW5vd3NraQorKyoKKysqIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGRlZmluZXMgYSBmZXcgeDg2IG1hY3JvcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZQorKyogICAgICAgICAgICAgICBlbXVsYXRvciB0byBleGVjdXRlIG5hdGl2ZSBpbnN0cnVjdGlvbnMuCisrKgorKyogICAgICAgICAgICAgICBGb3IgUElDIHZzIG5vbi1QSUMgY29kZSByZWZlciB0bzoKKysqICAgICAgICAgICAgICAgaHR0cDovL3NhbS56b3kub3JnL2Jsb2cvMjAwNy0wNC0xMy1zaGxpYi13aXRoLW5vbi1waWMtY29kZS1oYXZlLWlubGluZS1hc3NlbWJseS1hbmQtcGljLW1peC13ZWxsCisrKgorKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrI2lmbmRlZiBfX1g4NkVNVV9QUklNX1g4Nl9HQ0NfSAorKyNkZWZpbmUgX19YODZFTVVfUFJJTV9YODZfR0NDX0gKKysKKysjaW5jbHVkZSAieDg2ZW11L3R5cGVzLmgiCisrCisrI2lmICFkZWZpbmVkKF9fR05VQ19fKSB8fCAhKGRlZmluZWQgKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9faTM4NikgfHwgZGVmaW5lZChfX0FNRDY0X18pIHx8IGRlZmluZWQoX19hbWQ2NF9fKSkKKysjZXJyb3IgVGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgZ2NjIG9uIGkzODYgb3IgeDg2LTY0IHN5c3RlbQorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkKF9fUElDX18pICYmIGRlZmluZWQoX19pMzg2X18pCisrCisrI2RlZmluZSBYODZFTVVfSEFTX0hXX0NQVUlEIDEKKytzdGF0aWMgaW5saW5lIHZvaWQKKytod19jcHVpZCh1MzIgKiBhLCB1MzIgKiBiLCB1MzIgKiBjLCB1MzIgKiBkKQorK3sKKysgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUlZWJ4ICAgICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAgICAgImNwdWlkICAgICAgICAgICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmwgJSVlYngsICUxICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAgICAgInBvcGwgJSVlYnggICAgICAgXG5cdCI6Ij1hIigqYSksICI9ciIoKmIpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAiPWMiKCpjKSwgIj1kIigqZCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgOiJhIigqYSksICJjIigqYykKKysgICAgICAgICAgICAgICAgICAgICAgICAgOiJjYyIpOworK30KKysKKysjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICEgKF9fUElDX18gJiYgX19pMzg2X18pICovCisrCisrI2RlZmluZSB4ODZFTVVfSEFTX0hXX0NQVUlEIDEKKytzdGF0aWMgaW5saW5lIHZvaWQKKytod19jcHVpZCh1MzIgKiBhLCB1MzIgKiBiLCB1MzIgKiBjLCB1MzIgKiBkKQorK3sKKysgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImNwdWlkIjoiPWEiKCphKSwgIj1iIigqYiksICI9YyIoKmMpLCAiPWQiKCpkKQorKyAgICAgICAgICAgICAgICAgICAgICAgICA6ImEiKCphKSwgImMiKCpjKQorKyAgICAgICAgICAgICAgICAgICAgICAgICA6ImNjIik7CisrfQorKworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19QSUNfXyAmJiBfX2kzODZfXyAqLworKworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfUFJJTV9YODZfR0NDX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvcmVncy5oIGIvbGlicy94ODZlbXUveDg2ZW11L3JlZ3MuaAoraW5kZXggNTJjZjhlNC4uNmJkMDYxMSAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS9yZWdzLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS9yZWdzLmgKK0BAIC00Miw3ICs0Miw3IEBACisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1hY3JvcyBhbmQgdHlwZSBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAjaWZkZWYgUEFDSworLSMgcHJhZ21hIFBBQ0sKKysjcHJhZ21hIFBBQ0sKKyAjZW5kaWYKKyAKKyAvKgorQEAgLTY0LDQ4ICs2NCw0OCBAQAorIAorIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgdTMyIGVfcmVnOworLQl9IEkzMl9yZWdfdDsKKyt9IEkzMl9yZWdfdDsKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CistCXUxNiBmaWxsZXIwLCB4X3JlZzsKKy0JfSBJMTZfcmVnX3Q7CisrICAgIHUxNiBmaWxsZXIwLCB4X3JlZzsKKyt9IEkxNl9yZWdfdDsKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CistCXU4IGZpbGxlcjAsIGZpbGxlcjEsIGhfcmVnLCBsX3JlZzsKKy0JfSBJOF9yZWdfdDsKKysgICAgdTggZmlsbGVyMCwgZmlsbGVyMSwgaF9yZWcsIGxfcmVnOworK30gSThfcmVnX3Q7CisgCistI2Vsc2UgLyogIV9fQklHX0VORElBTl9fICovCisrI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhX19CSUdfRU5ESUFOX18gKi8KKyAKKyB0eXBlZGVmIHN0cnVjdCB7CisgICAgIHUzMiBlX3JlZzsKKy0JfSBJMzJfcmVnX3Q7CisrfSBJMzJfcmVnX3Q7CisgCisgdHlwZWRlZiBzdHJ1Y3QgeworLQl1MTYgeF9yZWc7CistCX0gSTE2X3JlZ190OworKyAgICB1MTYgeF9yZWc7CisrfSBJMTZfcmVnX3Q7CisgCisgdHlwZWRlZiBzdHJ1Y3QgeworLQl1OCBsX3JlZywgaF9yZWc7CistCX0gSThfcmVnX3Q7CisrICAgIHU4IGxfcmVnLCBoX3JlZzsKKyt9IEk4X3JlZ190OworIAorLSNlbmRpZiAvKiBCSUdfRU5ESUFOICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCSUdfRU5ESUFOICovCisgCisgdHlwZWRlZiB1bmlvbiB7CistCUkzMl9yZWdfdCAgIEkzMl9yZWc7CistCUkxNl9yZWdfdCAgIEkxNl9yZWc7CistCUk4X3JlZ190ICAgIEk4X3JlZzsKKy0JfSBpMzg2X2dlbmVyYWxfcmVnaXN0ZXI7CisrICAgIEkzMl9yZWdfdCBJMzJfcmVnOworKyAgICBJMTZfcmVnX3QgSTE2X3JlZzsKKysgICAgSThfcmVnX3QgSThfcmVnOworK30gaTM4Nl9nZW5lcmFsX3JlZ2lzdGVyOworIAorIHN0cnVjdCBpMzg2X2dlbmVyYWxfcmVncyB7CistCWkzODZfZ2VuZXJhbF9yZWdpc3RlciBBLCBCLCBDLCBEOworLQl9OworKyAgICBpMzg2X2dlbmVyYWxfcmVnaXN0ZXIgQSwgQiwgQywgRDsKKyt9OworIAorIHR5cGVkZWYgc3RydWN0IGkzODZfZ2VuZXJhbF9yZWdzIEdlbl9yZWdfdDsKKyAKKyBzdHJ1Y3QgaTM4Nl9zcGVjaWFsX3JlZ3MgeworLQlpMzg2X2dlbmVyYWxfcmVnaXN0ZXIgU1AsIEJQLCBTSSwgREksIElQOworLQl1MzIgRkxBR1M7CistCX07CisrICAgIGkzODZfZ2VuZXJhbF9yZWdpc3RlciBTUCwgQlAsIFNJLCBESSwgSVA7CisrICAgIHUzMiBGTEFHUzsKKyt9OworIAorIC8qICAKKyAgKiBTZWdtZW50IHJlZ2lzdGVycyBoZXJlIHJlcHJlc2VudCB0aGUgMTYgYml0IHF1YW50aXRpZXMKK0BAIC0xMTQsNyArMTE0LDcgQEAgc3RydWN0IGkzODZfc3BlY2lhbF9yZWdzIHsKKyAKKyBzdHJ1Y3QgaTM4Nl9zZWdtZW50X3JlZ3MgeworICAgICB1MTYgQ1MsIERTLCBTUywgRVMsIEZTLCBHUzsKKy0JfTsKKyt9OworIAorIC8qIDggYml0IHJlZ2lzdGVycyAqLworICNkZWZpbmUgUl9BSCAgZ2VuLkEuSThfcmVnLmhfcmVnCitAQCAtMjU4LDkgKzI1OCw5IEBAIHN0cnVjdCBpMzg2X3NlZ21lbnRfcmVncyB7CisgI2RlZmluZSAgSU5UUl9IQUxURUQgICAgICAgICAgMHg0CisgCisgdHlwZWRlZiBzdHJ1Y3QgeworLSAgICBzdHJ1Y3QgaTM4Nl9nZW5lcmFsX3JlZ3MgICAgZ2VuOworLSAgICBzdHJ1Y3QgaTM4Nl9zcGVjaWFsX3JlZ3MgICAgc3BjOworLSAgICBzdHJ1Y3QgaTM4Nl9zZWdtZW50X3JlZ3MgICAgc2VnOworKyAgICBzdHJ1Y3QgaTM4Nl9nZW5lcmFsX3JlZ3MgZ2VuOworKyAgICBzdHJ1Y3QgaTM4Nl9zcGVjaWFsX3JlZ3Mgc3BjOworKyAgICBzdHJ1Y3QgaTM4Nl9zZWdtZW50X3JlZ3Mgc2VnOworICAgICAvKgorICAgICAgKiBNT0RFIGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uOgorICAgICAgKiAgUkVQRSBwcmVmaXggICAgICAgICAgICAgMiBiaXRzICByZXBlLHJlcG5lCitAQCAtMjczLDIxICsyNzMsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgeworICAgICAgKiAgRXh0ZXJuIGludGVycnVwdCAgICAgICAgMSBiaXRzCisgICAgICAqICBIYWx0ZWQgICAgICAgICAgICAgICAgICAxIGJpdHMKKyAgICAgICovCistICAgIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlOworLSAgICB2b2xhdGlsZSBpbnQgICAgICAgICAgICAgICAgaW50cjsgICAvKiBtYXNrIG9mIHBlbmRpbmcgaW50ZXJydXB0cyAqLworLQlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWc7CisrICAgIHUzMiBtb2RlOworKyAgICB2b2xhdGlsZSBpbnQgaW50cjsgICAgICAgICAgLyogbWFzayBvZiBwZW5kaW5nIGludGVycnVwdHMgKi8KKysgICAgaW50IGRlYnVnOworICNpZmRlZiBERUJVRworLQlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2s7CistICAgIHUxNiAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZF9pcDsKKy0gICAgdTE2ICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkX2NzOworLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgZW5jX3BvczsKKy0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGVuY19zdHJfcG9zOworLSAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlX2J1ZlszMl07IC8qIGVuY29kZWQgYnl0ZSBzdHJlYW0gICovCistICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkX2J1ZlsyNTZdOyAvKiBkaXNhc3NlbWJsZWQgc3RyaW5ncyAqLworKyAgICBpbnQgY2hlY2s7CisrICAgIHUxNiBzYXZlZF9pcDsKKysgICAgdTE2IHNhdmVkX2NzOworKyAgICBpbnQgZW5jX3BvczsKKysgICAgaW50IGVuY19zdHJfcG9zOworKyAgICBjaGFyIGRlY29kZV9idWZbMzJdOyAgICAgICAgLyogZW5jb2RlZCBieXRlIHN0cmVhbSAgKi8KKysgICAgY2hhciBkZWNvZGVkX2J1ZlsyNTZdOyAgICAgIC8qIGRpc2Fzc2VtYmxlZCBzdHJpbmdzICovCisgI2VuZGlmCistICAgIHU4ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRubzsKKy0gICAgdTggICAgICAgICAgICAgICAgICAgICAgICAgIF9fcGFkWzNdOworLQl9IFg4NkVNVV9yZWdzOworKyAgICB1OCBpbnRubzsKKysgICAgdTggX19wYWRbM107CisrfSBYODZFTVVfcmVnczsKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CitAQCAtMzAwLDIwICszMDAsMjAgQEAgcHJpdmF0ZQkJCS0gcHJpdmF0ZSBkYXRhIHBvaW50ZXIKKyB4ODYJCQktIFg4NiByZWdpc3RlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIHR5cGVkZWYgc3RydWN0IHsKKy0JdW5zaWduZWQgbG9uZwltZW1fYmFzZTsKKy0JdW5zaWduZWQgbG9uZwltZW1fc2l6ZTsKKy0Jdm9pZCogICAgICAgIAlwcml2YXRlOworLQlYODZFTVVfcmVncwkJeDg2OworLQl9IFg4NkVNVV9zeXNFbnY7CisrICAgIHVuc2lnbmVkIGxvbmcgbWVtX2Jhc2U7CisrICAgIHVuc2lnbmVkIGxvbmcgbWVtX3NpemU7CisrICAgIHZvaWQgKnByaXZhdGU7CisrICAgIFg4NkVNVV9yZWdzIHg4NjsKKyt9IFg4NkVNVV9zeXNFbnY7CisgCisgI2lmZGVmIEVORF9QQUNLCistIyBwcmFnbWEgRU5EX1BBQ0sKKysjcHJhZ21hIEVORF9QQUNLCisgI2VuZGlmCisgCisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWwgVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCisgLyogR2xvYmFsIGVtdWxhdG9yIG1hY2hpbmUgc3RhdGUuCitAQCAtMzIxLDE3ICszMjEsMTYgQEAgZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKyAgKiBXZSBrZWVwIGl0IGdsb2JhbCB0byBhdm9pZCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiB0aGUgY29kZSBmb3Igc3BlZWQuCisgICovCisgCistZXh0ZXJuICAgIFg4NkVNVV9zeXNFbnYJX1g4NkVNVV9lbnY7CisrICAgIGV4dGVybiBYODZFTVVfc3lzRW52IF9YODZFTVVfZW52OworICNkZWZpbmUgICBNICAgICAgICAgICAgIF9YODZFTVVfZW52CisgCisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAvKiBGdW5jdGlvbiB0byBsb2cgaW5mb3JtYXRpb24gYXQgcnVudGltZSAqLworIAorLXZvaWQJcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKysgICAgdm9pZCBwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy19ICAgICAgICAgICAgICAgICAgICAgICAJCQkvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgIAkqLworK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAgICAgICAgICovCisgI2VuZGlmCistCistI2VuZGlmIC8qIF9fWDg2RU1VX1JFR1NfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfUkVHU19IICovCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUveDg2ZW11L3R5cGVzLmggYi9saWJzL3g4NmVtdS94ODZlbXUvdHlwZXMuaAoraW5kZXggYzBjMDljMS4uNWE2ZWYwMSAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS90eXBlcy5oCisrKysgYi9saWJzL3g4NmVtdS94ODZlbXUvdHlwZXMuaAorQEAgLTM2LDcgKzM2LDYgQEAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKKy0KKyAjaWZuZGVmIF9fWDg2RU1VX1RZUEVTX0gKKyAjZGVmaW5lIF9fWDg2RU1VX1RZUEVTX0gKKyAKK0BAIC02MSw0NiArNjAsMjEgQEAKKyAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWFjcm9zIGFuZCB0eXBlIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorLS8qIEN1cnJlbnRseSBvbmx5IGZvciBMaW51eC8zMmJpdCAqLworLSN1bmRlZiAgX19IQVNfTE9OR19MT05HX18KKy0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoTk9fTE9OR19MT05HKQorLSNkZWZpbmUgX19IQVNfTE9OR19MT05HX18KKy0jZW5kaWYKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisgCistLyogVGFrZW4gZnJvbSBYbWQuaCAqLworLSN1bmRlZiBOVU0zMgorLSNpZiBkZWZpbmVkIChfTFA2NCkgfHwgXAorLSAgICBkZWZpbmVkKF9fYWxwaGEpIHx8IGRlZmluZWQoX19hbHBoYV9fKSB8fCBcCistICAgIGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoaWE2NCkgfHwgXAorLSAgICBkZWZpbmVkKF9fc3BhcmM2NF9fKSB8fCBcCistICAgIGRlZmluZWQoX19zMzkweF9fKSB8fCBcCistICAgIChkZWZpbmVkKF9faHBwYV9fKSAmJiBkZWZpbmVkKF9fTFA2NCkpIHx8IFwKKy0gICAgZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQoYW1kNjQpIHx8IFwKKy0gICAgKGRlZmluZWQoX19zZ2kpICYmIChfTUlQU19TWkxPTkcgPT0gNjQpKQorLSNkZWZpbmUgTlVNMzIgaW50CistI2Vsc2UKKy0jZGVmaW5lIE5VTTMyIGxvbmcKKy0jZW5kaWYKKyt0eXBlZGVmIHVpbnQ4X3QgdTg7CisrdHlwZWRlZiB1aW50MTZfdCB1MTY7CisrdHlwZWRlZiB1aW50MzJfdCB1MzI7CisrdHlwZWRlZiB1aW50NjRfdCB1NjQ7CisgCistdHlwZWRlZiB1bnNpZ25lZCBjaGFyIAkJdTg7CistdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAJCXUxNjsKKy10eXBlZGVmIHVuc2lnbmVkIE5VTTMyIAkJdTMyOworLSNpZmRlZiBfX0hBU19MT05HX0xPTkdfXworLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIAl1NjQ7CistI2VuZGlmCisrdHlwZWRlZiBpbnQ4X3Qgczg7CisrdHlwZWRlZiBpbnQxNl90IHMxNjsKKyt0eXBlZGVmIGludDMyX3QgczMyOworK3R5cGVkZWYgaW50NjRfdCBzNjQ7CisgCistdHlwZWRlZiBjaGFyIAkJCQlzODsKKy10eXBlZGVmIHNob3J0IAkJCQlzMTY7CistdHlwZWRlZiBOVU0zMiAJCQkJczMyOworLSNpZmRlZiBfX0hBU19MT05HX0xPTkdfXworLXR5cGVkZWYgbG9uZyBsb25nIAkJCXM2NDsKKy0jZW5kaWYKKy0KKy10eXBlZGVmIHVuc2lnbmVkIGludAkJCXVpbnQ7CistdHlwZWRlZiBpbnQgCQkJCXNpbnQ7CisrdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKKyt0eXBlZGVmIGludCBzaW50OworIAorIHR5cGVkZWYgdTE2IFg4NkVNVV9waW9BZGRyOworIAorLSN1bmRlZiBOVU0zMgorLQorLSNlbmRpZgkvKiBfX1g4NkVNVV9UWVBFU19IICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9UWVBFU19IICovCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUveDg2ZW11L3g4NmVtdWkuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS94ODZlbXVpLmgKK2luZGV4IDExMmVlMzYuLmYxMWRjMTAgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUveDg2ZW11aS5oCisrKysgYi9saWJzL3g4NmVtdS94ODZlbXUveDg2ZW11aS5oCitAQCAtMzgsNyArMzgsNiBAQAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorLQorICNpZm5kZWYgX19YODZFTVVfWDg2RU1VSV9ICisgI2RlZmluZSBfX1g4NkVNVV9YODZFTVVJX0gKKyAKK0BAIC03NCwyOSArNzMsMjggQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKysjZW5kaWYKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbmxpbmUgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiIHsgICAgICAgICAgICAJCQkvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworK2V4dGVybiAiQyIgeyAgICAgICAgICAgICAgICAgICAgLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKyAjZW5kaWYKKyAKKy1leHRlcm4gdTggIAkoWDg2QVBJUCBzeXNfcmRiKSh1MzIgYWRkcik7CistZXh0ZXJuIHUxNiAJKFg4NkFQSVAgc3lzX3JkdykodTMyIGFkZHIpOworLWV4dGVybiB1MzIgCShYODZBUElQIHN5c19yZGwpKHUzMiBhZGRyKTsKKy1leHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfd3JiKSh1MzIgYWRkcix1OCB2YWwpOworLWV4dGVybiB2b2lkIChYODZBUElQIHN5c193cncpKHUzMiBhZGRyLHUxNiB2YWwpOworLWV4dGVybiB2b2lkIChYODZBUElQIHN5c193cmwpKHUzMiBhZGRyLHUzMiB2YWwpOworKyAgICBleHRlcm4gdTgoWDg2QVBJUCBzeXNfcmRiKSAodTMyIGFkZHIpOworKyAgICBleHRlcm4gdTE2KFg4NkFQSVAgc3lzX3JkdykgKHUzMiBhZGRyKTsKKysgICAgZXh0ZXJuIHUzMihYODZBUElQIHN5c19yZGwpICh1MzIgYWRkcik7CisrICAgIGV4dGVybiB2b2lkIChYODZBUElQIHN5c193cmIpICh1MzIgYWRkciwgdTggdmFsKTsKKysgICAgZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX3dydykgKHUzMiBhZGRyLCB1MTYgdmFsKTsKKysgICAgZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX3dybCkgKHUzMiBhZGRyLCB1MzIgdmFsKTsKKyAKKy1leHRlcm4gdTggIAkoWDg2QVBJUCBzeXNfaW5iKShYODZFTVVfcGlvQWRkciBhZGRyKTsKKy1leHRlcm4gdTE2IAkoWDg2QVBJUCBzeXNfaW53KShYODZFTVVfcGlvQWRkciBhZGRyKTsKKy1leHRlcm4gdTMyIAkoWDg2QVBJUCBzeXNfaW5sKShYODZFTVVfcGlvQWRkciBhZGRyKTsKKy1leHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfb3V0YikoWDg2RU1VX3Bpb0FkZHIgYWRkcix1OCB2YWwpOworLWV4dGVybiB2b2lkIChYODZBUElQIHN5c19vdXR3KShYODZFTVVfcGlvQWRkciBhZGRyLHUxNiB2YWwpOworLWV4dGVybiB2b2lkCShYODZBUElQIHN5c19vdXRsKShYODZFTVVfcGlvQWRkciBhZGRyLHUzMiB2YWwpOworKyAgICBleHRlcm4gdTgoWDg2QVBJUCBzeXNfaW5iKSAoWDg2RU1VX3Bpb0FkZHIgYWRkcik7CisrICAgIGV4dGVybiB1MTYoWDg2QVBJUCBzeXNfaW53KSAoWDg2RU1VX3Bpb0FkZHIgYWRkcik7CisrICAgIGV4dGVybiB1MzIoWDg2QVBJUCBzeXNfaW5sKSAoWDg2RU1VX3Bpb0FkZHIgYWRkcik7CisrICAgIGV4dGVybiB2b2lkIChYODZBUElQIHN5c19vdXRiKSAoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTggdmFsKTsKKysgICAgZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX291dHcpIChYODZFTVVfcGlvQWRkciBhZGRyLCB1MTYgdmFsKTsKKysgICAgZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX291dGwpIChYODZFTVVfcGlvQWRkciBhZGRyLCB1MzIgdmFsKTsKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistfSAgICAgICAgICAgICAgICAgICAgICAgCQkJLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAJKi8KKyt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgICAgICAgICAqLworICNlbmRpZgorLQorLSNlbmRpZiAvKiBfX1g4NkVNVV9YODZFTVVJX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX1g4NkVNVUlfSCAqLworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL2FyLWZyb20tZW52LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9hci1mcm9tLWVudi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGNiYzcxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9hci1mcm9tLWVudi5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGaXggY3Jvc3MgbGluayB1c2luZyBob3N0LWNyb3NzIGFyCisKK0lmIGJ1aWxkaW5nIG9uIDMyYml0IGhvc3QgYW5kIGNyZWF0aW5nIDY0Yml0IGxpYnJhcmllcywgdGhlIHRhcmdldAorcGFja2FnZSBidWlsZHMgc2hvdWxkIG5vdCBpbnZva2UgdGhlIDMyYml0IGhvc3RzJ3MgYXIuICBTcGVjaWZpY2FsbHkKK3lvdSB3aWxsIGdldCBhbiBlcnJvciBtZXNzYWdlIGxpa2U6CisKK3g4Nl82NC1saW51eC1nY2MgIC1tNjQgLS1zeXNyb290PS9vcHQvcWVtdXg4Ni02NC90bXAvc3lzcm9vdHMvcWVtdXg4Ni02NCAtV2wsLU8xIC1XbCwtLWhhc2gtc3R5bGU9Z251IC1XbCwtLWFzLW5lZWRlZCAtTGxpYnMveDg2ZW11IHY4Nl94ODZlbXUubyB2ODZfbWVtLm8gdjg2X2NvbW1vbi5vICB2ODYubyAtbHg4NmVtdSAtbyB2ODZkCitsaWJzL3g4NmVtdS9saWJ4ODZlbXUuYTogY291bGQgbm90IHJlYWQgc3ltYm9sczogQXJjaGl2ZSBoYXMgbm8gaW5kZXg7IHJ1biByYW5saWIgdG8gYWRkIG9uZQorY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0KKyBsaWJzL3g4NmVtdS9NYWtlZmlsZSB8ICAgIDYgKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9saWJzL3g4NmVtdS9NYWtlZmlsZQorKysrIGIvbGlicy94ODZlbXUvTWFrZWZpbGUKK0BAIC0xLDcgKzEsMTEgQEAKKyBPQkpTID0gZGVjb2RlLm8gZnB1Lm8gb3BzLm8gb3BzMi5vIHByaW1fb3BzLm8gc3lzLm8KKyAKKytpZmVxICgkKEFSKSwpCisrCUFSID0gYXIKKytlbmRpZgorKworIGxpYng4NmVtdS5hOiAkKE9CSlMpCistCWFyIHJ2ICRAICQrCisrCSQoQVIpIHJ2ICRAICQrCisgCisgJS5vOiAlLmMKKyAJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL2Zic2V0dXAgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL2Zic2V0dXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmE0MDljYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvZmJzZXR1cApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaCAKKworL3NiaW4vbW9kcHJvYmUgdXZlc2FmYgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC91dmVzYWZiLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL3V2ZXNhZmIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mzc4OTc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC91dmVzYWZiLmNvbmYKQEAgLTAsMCArMSwyIEBACisjIExvYWQgdXZlc2FmYi5rbyBhdCBib290Cit1dmVzYWZiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkXzAuMS4xMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmRfMC4xLjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MDIwNzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkXzAuMS4xMC5iYgpAQCAtMCwwICsxLDY5IEBACitTVU1NQVJZID0gIlVzZXIgc3VwcG9ydCBiaW5hcnkgZm9yIHRoZSB1dmVzYWZiIGtlcm5lbCBtb2R1bGUiCitIT01FUEFHRSA9ICJodHRwOi8vZGV2LmdlbnRvby5vcmcvfnNwb2NrL3Byb2plY3RzL3V2ZXNhZmIvIgorCisjIHRoZSBjb3B5cmlnaHQgaW5mbyBpcyBhdCB0aGUgYm90dG9tIG9mIFJFQURNRSwgZXhwZWN0IGJyZWFrCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO21kNT05NGFjMTk3MWU0ZjIzMDlkYzMyMmQ1OThlN2IxZjdkZCIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2tlcm5lbCIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImtlcm5lbC1tb2R1bGUtdXZlc2FmYiIKK1BSID0gInIyIgorCitTUkNfVVJJID0gImh0dHA6Ly9kaXN0ZmlsZXMuZ2VudG9vLm9yZy9kaXN0ZmlsZXMvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9VcGRhdGUteDg2ZW11LWZyb20tWC5vcmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZmJzZXR1cCBcCisgICAgICAgICAgIGZpbGU6Ly91dmVzYWZiLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vYXItZnJvbS1lbnYucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MWM3OTJiYTdiODc0YWQ4YzQzZjBkM2RhNGNmYWJlMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MzQ5NjRhZTE4ZWY2OGM4NDkzYWRkMmNlMTUwZTNiNDUwMmJhZGViMGQ5MTk0YjRiZDgxMjQxZDI1ZTY3MzVjIgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorQ09NUEFUSUJMRV9IT1NUID0gJyhpLjg2fHg4Nl82NCkuKi1saW51eCcKKworSU5JVFNDUklQVF9OQU1FID0gImZic2V0dXAiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAwIFMgLiIKKworZG9fY29uZmlndXJlICgpIHsKKwkuL2NvbmZpZ3VyZSAtLXdpdGgteDg2ZW11Cit9CisKK2RvX2NvbXBpbGUgKCkgeworCUtESVI9IiR7U1RBR0lOR19ESVJfSE9TVH0vdXNyIiBtYWtlCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9zYmluZGlyfQorCWluc3RhbGwgdjg2ZCAke0R9JHtiYXNlX3NiaW5kaXJ9LworCisgICAgICAgICMgT25seSBpbnN0YWxsIGZic2V0dXAgc2NyaXB0IGlmICdzeXN2aW5pdCcgaXMgaW4gRElTVFJPX0ZFQVRVUkVTCisgICAgICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKyAgICAgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2Zic2V0dXAgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Zic2V0dXAKKyAgICAgICAgZmkKKworICAgICAgICAjIEluc3RhbGwgc3lzdGVtZCByZWxhdGVkIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L21vZHVsZXMtbG9hZC5kCisgICAgICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS91dmVzYWZiLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vbW9kdWxlcy1sb2FkLmQKKyAgICAgICAgZmkKK30KKworIyBBcyB0aGUgcmVjaXBlIGRvZXNuJ3QgaW5oZXJpdCBzeXN0ZW1kLmJiY2xhc3MsIHdlIG5lZWQgdG8gc2V0IHRoaXMgdmFyaWFibGUKKyMgbWFudWFsbHkgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcG9zdGluc3QvcHJlaW5zdCBnZW5lcmF0ZWQuCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgIjEiKQorfQorCitpbmhlcml0IHVwZGF0ZS1yYy5kCisKK0RFUEVORFNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZScsJycsZCl9IgorcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCBzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCQlPUFRTPSItLXJvb3Q9JEQiCisJCWZpCisJCXN5c3RlbWN0bCAkT1BUUyBtYXNrIGZic2V0dXAuc2VydmljZQorCWZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGktdWlfMC42LjMxLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpLXVpXzAuNi4zMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWE0ZDcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpLXVpXzAuNi4zMS5iYgpAQCAtMCwwICsxLDcyIEBACitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdmFoaS1jb21tb24vYWRkcmVzcy5oO2VuZGxpbmU9MjU7bWQ1PWIxZDFkMmNkYTFjMDdlYjg0OGVhN2Q2MjE1NzEyZDlkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F2YWhpLWNvcmUvZG5zLmg7ZW5kbGluZT0yMzttZDU9NmZlODI1OTBiODFhYTBkZGVhNTA5NWI1NDhlMmZkY2IgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXZhaGktZGFlbW9uL21haW4uYztlbmRsaW5lPTIxO21kNT05ZWU3NzM2OGM1NDA3YWY3N2NhYWVmMWIwNzI4NTk2OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdmFoaS1jbGllbnQvY2xpZW50Lmg7ZW5kbGluZT0yMzttZDU9ZjRhYzc0MWEyNWM0ZjQzNDAzOWJhM2UxOGM4Njc0Y2YiCisKK3JlcXVpcmUgYXZhaGkuaW5jCisKK2luaGVyaXQgcHl0aG9uLWRpciBweXRob25uYXRpdmUKKworUEFDS0FHRUNPTkZJRyA/Pz0gInB5dGhvbiIKK1BBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICItLWVuYWJsZS1weXRob24sLS1kaXNhYmxlLXB5dGhvbixweXRob24tbmF0aXZlIHB5dGhvbiIKKworUFIgPSAiJHtJTkNfUFJ9LjAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyZjIyNzQ1YjhmNzM2OGFkNWEwYTNmZGRhYzM0M2YyZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MzcyNzE5YjI0ZTJkZDc1ZGU2ZjU5YmIxMzE1ZTYwMGRiNGZkMDkyODA1YmQxMjAxZWQwY2I2NTFhMmRhYjQ4IgorCitERVBFTkRTICs9ICJhdmFoaSBndGsrIGxpYmdsYWRlIgorCitBVkFISV9HVEsgPSAiLS1lbmFibGUtZ3RrIC0tZGlzYWJsZS1ndGszIgorCitTID0gIiR7V09SS0RJUn0vYXZhaGktJHtQVn0iCisKK1BBQ0tBR0VTID0gIiR7UE59ICR7UE59LXV0aWxzICR7UE59LWRiZyAke1BOfS1kZXYgJHtQTn0tc3RhdGljZGV2ICR7UE59LWRvYyBweXRob24tYXZhaGkgYXZhaGktZGlzY292ZXIgYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZSIKKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYmF2YWhpLXVpKi5zby4qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vLmRlYnVnL2xpYmF2YWgtdWkqIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vbGliYXZhaGktdWkke1NPTElCU0RFVn0iCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9saWJhdmFoaS11aS5hIgorCitGSUxFU18ke1BOfS11dGlscyA9ICIke2JpbmRpcn0vYiogJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvYioiCisKK0ZJTEVTX3B5dGhvbi1hdmFoaSA9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9hdmFoaSAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9hdmFoaV9kaXNjb3ZlciIKK0ZJTEVTX2F2YWhpLWRpc2NvdmVyID0gIiR7YmluZGlyfS9hdmFoaS1kaXNjb3ZlciBcCisgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXZhaGkvaW50ZXJmYWNlcy9hdmFoaS1kaXNjb3ZlcioiCitGSUxFU19hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lID0gIiR7YmluZGlyfS9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hdmFoaS9pbnRlcmZhY2VzL2F2YWhpLWRpc2NvdmVyLmdsYWRlIgorCitSREVQRU5EU19hdmFoaS1kaXNjb3ZlciA9ICJweXRob24tYXZhaGkgcHl0aG9uLXB5Z3RrIgorUkRFUEVORFNfcHl0aG9uLWF2YWhpID0gInB5dGhvbi1jb3JlIHB5dGhvbi1kYnVzIgorCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlybSAke0R9JHtzeXNjb25mZGlyfSAtcmYKKwlybSAke0R9JHtiYXNlX2xpYmRpcn0gLXJmCisJcm0gJHtEfSR7c3lzdGVtZF91bml0ZGlyfSAtcmYKKwkjIFRoZSAke3N5c3RlbWRfdW5pdGRpcn0gaXMgL2xpYi9zeXN0ZW1kLCBzbyB3ZSBuZWVkIHJtZGlyIC9saWIsCisJIyBidXQgbm90ICR7YmFzZV9saWJkaXJ9IGhlcmUuIEFuZCB0aGUgL2xpYiBtYXkgbm90IGV4aXN0CisJIyB3aGl0aG91dCBzeXN0ZW1kLgorCVsgISAtZCAke0R9L2xpYiBdIHx8IHJtZGlyICR7RH0vbGliIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5CisJcm0gJHtEfSR7YmluZGlyfS9hdmFoaS1iKgorCXJtICR7RH0ke2JpbmRpcn0vYXZhaGktcCoKKwlybSAke0R9JHtiaW5kaXJ9L2F2YWhpLXIqCisJcm0gJHtEfSR7YmluZGlyfS9hdmFoaS1zKgorCXJtICR7RH0ke2luY2x1ZGVkaXJ9L2F2YWhpLWMqIC1yZgorCXJtICR7RH0ke2luY2x1ZGVkaXJ9L2F2YWhpLWcqIC1yZgorCXJtICR7RH0ke2xpYmRpcn0vbGliYXZhaGktYyoKKwlybSAke0R9JHtsaWJkaXJ9L2xpYmF2YWhpLWcqCisJcm0gJHtEfSR7bGliZGlyfS9wa2djb25maWcvYXZhaGktYyoKKwlybSAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9hdmFoaS1nKgorCXJtICR7RH0ke3NiaW5kaXJ9IC1yZgorCXJtICR7RH0ke2RhdGFkaXJ9L2F2YWhpL2EqCisJcm0gJHtEfSR7ZGF0YWRpcn0vYXZhaGkvcyoKKwlybSAke0R9JHtkYXRhZGlyfS9sb2NhbGUvIC1yZgorCXJtICR7RH0ke2RhdGFkaXJ9L2RidXMqIC1yZgorCXJtICR7RH0ke21hbmRpcn0vbWFuMS9hKgorCXJtICR7RH0ke21hbmRpcn0vbWFuNSAtcmYKKwlybSAke0R9JHttYW5kaXJ9L21hbjggLXJmCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNTE5N2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGkuaW5jCkBAIC0wLDAgKzEsMTU4IEBACitTVU1NQVJZID0gIkF2YWhpIElQdjRMTCBuZXR3b3JrIGFkZHJlc3MgY29uZmlndXJhdGlvbiBkYWVtb24iCitERVNDUklQVElPTiA9ICdBdmFoaSBpcyBhIGZ1bGx5IExHUEwgZnJhbWV3b3JrIGZvciBNdWx0aWNhc3QgRE5TIFNlcnZpY2UgRGlzY292ZXJ5LiBJdCBcCithbGxvd3MgcHJvZ3JhbXMgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgc2VydmljZXMgYW5kIGhvc3RzIHJ1bm5pbmcgb24gYSBsb2NhbCBuZXR3b3JrIFwKK3dpdGggbm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gVGhpcyB0b29sIGltcGxlbWVudHMgSVB2NExMLCAiRHluYW1pYyBDb25maWd1cmF0aW9uIG9mIFwKK0lQdjQgTGluay1Mb2NhbCBBZGRyZXNzZXMiIChJRVRGIFJGQzM5MjcpLCBhIHByb3RvY29sIGZvciBhdXRvbWF0aWMgSVAgYWRkcmVzcyBcCitjb25maWd1cmF0aW9uIGZyb20gdGhlIGxpbmstbG9jYWwgMTY5LjI1NC4wLjAvMTYgcmFuZ2Ugd2l0aG91dCB0aGUgbmVlZCBmb3IgYSBjZW50cmFsIFwKK3NlcnZlci4nCitBVVRIT1IgPSAiTGVubmFydCBQb2V0dGVyaW5nIDxsZW5uYXJ0QHBvZXR0ZXJpbmcubmV0PiIKK0hPTUVQQUdFID0gImh0dHA6Ly9hdmFoaS5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9hdmFoaS5vcmcvcmVwb3J0IgorU0VDVElPTiA9ICJuZXR3b3JrIgorCisjIG1ham9yIHBhcnQgaXMgdW5kZXIgTEdQTHYyLjErLCBidXQgc2V2ZXJhbCAuZHRkLCAueHNsLCBpbml0c2NyaXB0cyBhbmQKKyMgcHl0aG9uIHNjcmlwdHMgYXJlIHVuZGVyIEdQTHYyKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsiCisKK0lOQ19QUiA9ICJyMTEiCisKK0RFUEVORFMgPSAiZXhwYXQgbGliY2FwIGxpYmRhZW1vbiBkYnVzIGdsaWItMi4wIgorCitTUkNfVVJJID0gImh0dHA6Ly9hdmFoaS5vcmcvZG93bmxvYWQvYXZhaGktJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICBmaWxlOi8vMDBhdmFoaS1hdXRvaXBkIFwKKyAgICAgICAgICBmaWxlOi8vOTlhdmFoaS1hdXRvaXBkIFwKKyAgICAgICAgICBmaWxlOi8vaW5pdHNjcmlwdC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL2F2YWhpX2ZpeF9pbnN0YWxsX2lzc3VlLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vZml4X2Zvcl9hdXRvbWFrZV8xLjEyLngucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9vdXQtb2YtdHJlZS5wYXRjaCBcCisgICAgICAgICAgZmlsZTovLzAwMDEtYXZhaGktZml4LWF2YWhpLXN0YXR1cy1jb21tYW5kLWVycm9yLXByb21wdC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3JldXNlcG9ydC1jaGVjay5wYXRjaCBcCisgICAgICAgICAgIgorCitVU0VSQUREX1BBQ0tBR0VTID0gImF2YWhpLWRhZW1vbiBhdmFoaS1hdXRvaXBkIgorVVNFUkFERF9QQVJBTV9hdmFoaS1kYWVtb24gPSAiLS1zeXN0ZW0gLS1ob21lIC92YXIvcnVuL2F2YWhpLWRhZW1vbiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW5vLWNyZWF0ZS1ob21lIC0tc2hlbGwgL2Jpbi9mYWxzZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXVzZXItZ3JvdXAgYXZhaGkiCisKK1VTRVJBRERfUEFSQU1fYXZhaGktYXV0b2lwZCA9ICItLXN5c3RlbSAtLWhvbWUgL3Zhci9ydW4vYXZhaGktYXV0b2lwZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW5vLWNyZWF0ZS1ob21lIC0tc2hlbGwgL2Jpbi9mYWxzZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXVzZXItZ3JvdXAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWMgXCJBdmFoaSBhdXRvaXAgZGFlbW9uXCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGktYXV0b2lwZCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwZGF0ZS1yYy5kIGdldHRleHQgdXNlcmFkZAorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24gXAorICAgICAgICAgICAgIC0td2l0aC1hdmFoaS1wcml2LWFjY2Vzcy1ncm91cD1hZG0gXAorICAgICAgICAgICAgIC0tZGlzYWJsZS1zdGFjay1wcm90ZWN0b3IgXAorICAgICAgICAgICAgIC0tZGlzYWJsZS1nZGJtIFwKKyAgICAgICAgICAgICAtLWRpc2FibGUtbW9ubyBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLW1vbm9kb2MgXAorICAgICAgICAgICAgIC0tZGlzYWJsZS1xdDMgXAorICAgICAgICAgICAgIC0tZGlzYWJsZS1xdDQgXAorICAgICAgICAgICAgIC0tZGlzYWJsZS1weXRob24gXAorICAgICAgICAgICAgIC0tZGlzYWJsZS1kb3h5Z2VuLWRvYyBcCisgICAgICAgICAgICAgJHtFWFRSQV9PRUNPTkZfU1lTVklOSVR9IFwKKyAgICAgICAgICAgICAke0VYVFJBX09FQ09ORl9TWVNURU1EfSBcCisgICAgICAgICAgICAgJHtBVkFISV9HVEt9IFwKKyAgICAgICAgICAgIgorCisjIFRoZSBkaXN0cm8gY2hvaWNlIGRldGVybWluZXMgd2hhdCBpbml0IHNjcmlwdHMgYXJlIGluc3RhbGxlZAorRVhUUkFfT0VDT05GX1NZU1ZJTklUID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJy0td2l0aC1kaXN0cm89ZGViaWFuJywnLS13aXRoLWRpc3Rybz1ub25lJyxkKX0iCitFWFRSQV9PRUNPTkZfU1lTVEVNRCA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJy0td2l0aC1zeXN0ZW1kc3lzdGVtdW5pdGRpcj0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLycsJy0td2l0aG91dC1zeXN0ZW1kc3lzdGVtdW5pdGRpcicsZCl9IgorCitBVkFISV9HVEsgPz0gIi0tZGlzYWJsZS1ndGsgLS1kaXNhYmxlLWd0azMiCisKK0xERkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtbGludGwiCitMREZMQUdTX2FwcGVuZF91Y2xpbnV4LXVjbGliYyA9ICIgLWxpbnRsIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzZWQgJ3M6QU1fQ0hFQ0tfUFlNT0Q6ZWNobyAibm8gcHltb2QiICNBTV9DSEVDS19QWU1PRDpnJyAtaSAke1N9L2NvbmZpZ3VyZS5hYworfQorCisKK1BBQ0tBR0VTID0rICJhdmFoaS1kYWVtb24gbGliYXZhaGktY29tbW9uIGxpYmF2YWhpLWNvcmUgbGliYXZhaGktY2xpZW50IGF2YWhpLWRuc2NvbmZkIGxpYmF2YWhpLWdsaWIgbGliYXZhaGktdWkgYXZhaGktYXV0b2lwZCBhdmFoaS11dGlscyIKKworIyBBcyBhdmFoaSBkb2Vzbid0IHB1dCBhbnkgZmlsZXMgaW50byBQTiwgY2xlYXIgdGhlIGZpbGVzIGxpc3QgdG8gYXZvaWQgcHJvYmxlbXMKKyMgaWYgZXh0cmEgbGlicmFyaWVzIGFwcGVhci4KK0ZJTEVTXyR7UE59ID0gIiIKK0ZJTEVTX2F2YWhpLWF1dG9pcGQgPSAiJHtzYmluZGlyfS9hdmFoaS1hdXRvaXBkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9hdmFoaS9hdmFoaS1hdXRvaXBkLmFjdGlvbiBcCisgICAgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vZGhjcC8qL2F2YWhpLWF1dG9pcGQgXAorICAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3VkaGNwYy5kLzAwYXZhaGktYXV0b2lwZCBcCisgICAgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vdWRoY3BjLmQvOTlhdmFoaS1hdXRvaXBkIgorRklMRVNfbGliYXZhaGktY29tbW9uID0gIiR7bGliZGlyfS9saWJhdmFoaS1jb21tb24uc28uKiIKK0ZJTEVTX2xpYmF2YWhpLWNvcmUgPSAiJHtsaWJkaXJ9L2xpYmF2YWhpLWNvcmUuc28uKiIKK0ZJTEVTX2F2YWhpLWRhZW1vbiA9ICIke3NiaW5kaXJ9L2F2YWhpLWRhZW1vbiBcCisgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9hdmFoaS9hdmFoaS1kYWVtb24uY29uZiBcCisgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9hdmFoaS9ob3N0cyBcCisgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9hdmFoaS9zZXJ2aWNlcyBcCisgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9kYnVzLTEgXAorICAgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vaW5pdC5kL2F2YWhpLWRhZW1vbiBcCisgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hdmFoaS9pbnRyb3NwZWN0aW9uLyouaW50cm9zcGVjdCBcCisgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hdmFoaS9hdmFoaS1zZXJ2aWNlLmR0ZCBcCisgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hdmFoaS9zZXJ2aWNlLXR5cGVzIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMiCitGSUxFU19saWJhdmFoaS1jbGllbnQgPSAiJHtsaWJkaXJ9L2xpYmF2YWhpLWNsaWVudC5zby4qIgorRklMRVNfbGliYXZhaGktdWkgPSAiJHtsaWJkaXJ9L2xpYmF2YWhpLXVpLnNvLioiCitGSUxFU19hdmFoaS1kbnNjb25mZCA9ICIke3NiaW5kaXJ9L2F2YWhpLWRuc2NvbmZkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vYXZhaGkvYXZhaGktZG5zY29uZmQuYWN0aW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vaW5pdC5kL2F2YWhpLWRuc2NvbmZkIgorRklMRVNfbGliYXZhaGktZ2xpYiA9ICIke2xpYmRpcn0vbGliYXZhaGktZ2xpYi5zby4qIgorRklMRVNfbGliYXZhaGktZ29iamVjdCA9ICIke2xpYmRpcn0vbGliYXZhaGktZ29iamVjdC5zby4qIgorRklMRVNfYXZhaGktdXRpbHMgPSAiJHtiaW5kaXJ9L2F2YWhpLSoiCisKK1JERVBFTkRTXyR7UE59LWRldiA9ICJhdmFoaS1kYWVtb24gKD0gJHtFWFRFTkRQS0dWfSkgbGliYXZhaGktY29yZSAoPSAke0VYVEVORFBLR1Z9KSBsaWJhdmFoaS1jbGllbnQgKD0gJHtFWFRFTkRQS0dWfSkiCisKKyMgdWNsaWJjIGhhcyBubyBuc3MKK1JSRUNPTU1FTkRTX2F2YWhpLWRhZW1vbl9hcHBlbmRfbGliYy1nbGliYyA9ICIgbGlibnNzLW1kbnMiCitSUkVDT01NRU5EU18ke1BOfV9hcHBlbmRfbGliYy1nbGliYyA9ICIgbGlibnNzLW1kbnMiCisKK1JSRUNPTU1FTkRTX2F2YWhpLWRldiA9ICJleHBhdC1kZXYgbGliY2FwLWRldiBsaWJkYWVtb24tZGV2IGRidXMtZGV2IGdsaWItMi4wLWRldiB1cGRhdGUtcmMuZC1kZXYiCitSUkVDT01NRU5EU19hdmFoaS1kZXZfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiIGdldHRleHQtZGV2IgorCitSUkVDT01NRU5EU19hdmFoaS1kZXZbbm9kZXBycmVjc10gPSAiMSIKKworQ09ORkZJTEVTX2F2YWhpLWRhZW1vbiA9ICIke3N5c2NvbmZkaXJ9L2F2YWhpL2F2YWhpLWRhZW1vbi5jb25mIgorCitJTklUU0NSSVBUX1BBQ0tBR0VTID0gImF2YWhpLWRhZW1vbiBhdmFoaS1kbnNjb25mZCIKK0lOSVRTQ1JJUFRfTkFNRV9hdmFoaS1kYWVtb24gPSAiYXZhaGktZGFlbW9uIgorSU5JVFNDUklQVF9QQVJBTVNfYXZhaGktZGFlbW9uID0gImRlZmF1bHRzIDIxIDE5IgorSU5JVFNDUklQVF9OQU1FX2F2YWhpLWRuc2NvbmZkID0gImF2YWhpLWRuc2NvbmZkIgorSU5JVFNDUklQVF9QQVJBTVNfYXZhaGktZG5zY29uZmQgPSAiZGVmYXVsdHMgMjIgMTkiCisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgZG9uJ3QgaW5zdGFsbCAvdmFyL3J1biB3aGVuIHBvcHVsYXRpbmcgcm9vdGZzLiBEbyBpdCB0aHJvdWdoIHZvbGF0aWxlCisJIyAvdmFyL3J1biBvZiBjdXJyZW50IHZlcnNpb24gaXMgZW1wdHksIHNvIGp1c3QgcmVtb3ZlIGl0LgorCSMgaWYgL3Zhci9ydW4gYmVjb21lIG5vbi1lbXB0eSBpbiB0aGUgZnV0dXJlLCBuZWVkIHRvIGluc3RhbGwgaXQgdmlhIHZvbGF0aWxlCisJcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bgorCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICR7RH0ke2xvY2Fsc3RhdGVkaXJ9CisJcm0gLXJmICR7RH0ke2RhdGFkaXJ9L2RidXMtMS9pbnRlcmZhY2VzCisJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7ZGF0YWRpcn0vZGJ1cy0xCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vYXZhaGkKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdWRoY3BjLmQKKwlpbnN0YWxsICR7V09SS0RJUn0vMDBhdmFoaS1hdXRvaXBkICR7RH0ke3N5c2NvbmZkaXJ9L3VkaGNwYy5kCisJaW5zdGFsbCAke1dPUktESVJ9Lzk5YXZhaGktYXV0b2lwZCAke0R9JHtzeXNjb25mZGlyfS91ZGhjcGMuZAorfQorCisjIEF0IHRoZSB0aW1lIHRoZSBwb3N0aW5zdCBydW5zLCBkYnVzIG1pZ2h0IG5vdCBiZSBzZXR1cCBzbyBvbmx5IHJlc3RhcnQgaWYgcnVubmluZyAKKyMgRG9uJ3QgZXhpdCBlYXJseSwgYmVjYXVzZSB1cGRhdGUtcmMuZCBuZWVkcyB0byBydW4gc3Vic2VxdWVudGx5LgorCitwa2dfcG9zdGluc3RfYXZhaGktZGFlbW9uICgpIHsKK2lmIFsgLXogIiREIiBdOyB0aGVuCisJa2lsbGFsbCAtcSAtSFVQIGRidXMtZGFlbW9uIHx8IHRydWUKK2ZpCit9CisKK3BrZ19wb3N0cm1fYXZhaGktZGFlbW9uICgpIHsKKwlkZWx1c2VyIGF2YWhpIHx8IHRydWUKKwlkZWxncm91cCBhdmFoaSB8fCB0cnVlCit9CisKK3BrZ19wb3N0cm1fYXZhaGktYXV0b2lwZCAoKSB7CisJZGVsdXNlciBhdmFoaS1hdXRvaXBkIHx8IHRydWUKKwlkZWxncm91cCBhdmFoaS1hdXRvaXBkIHx8IHRydWUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaV8wLjYuMzEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGlfMC42LjMxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNzk2YTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGlfMC42LjMxLmJiCkBAIC0wLDAgKzEsMjIgQEAKK3JlcXVpcmUgYXZhaGkuaW5jCisKK2luaGVyaXQgc3lzdGVtZAorCitTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LWRhZW1vbiAke1BOfS1kbnNjb25mZCIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1kYWVtb24gPSAiYXZhaGktZGFlbW9uLnNlcnZpY2UiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tZG5zY29uZmQgPSAiYXZhaGktZG5zY29uZmQuc2VydmljZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXZhaGktY29tbW9uL2FkZHJlc3MuaDtlbmRsaW5lPTI1O21kNT1iMWQxZDJjZGExYzA3ZWI4NDhlYTdkNjIxNTcxMmQ5ZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdmFoaS1jb3JlL2Rucy5oO2VuZGxpbmU9MjM7bWQ1PTZmZTgyNTkwYjgxYWEwZGRlYTUwOTViNTQ4ZTJmZGNiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F2YWhpLWRhZW1vbi9tYWluLmM7ZW5kbGluZT0yMTttZDU9OWVlNzczNjhjNTQwN2FmNzdjYWFlZjFiMDcyODU5NjkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXZhaGktY2xpZW50L2NsaWVudC5oO2VuZGxpbmU9MjM7bWQ1PWY0YWM3NDFhMjVjNGY0MzQwMzliYTNlMThjODY3NGNmIgorCitQUiA9ICIke0lOQ19QUn0uMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjJmMjI3NDViOGY3MzY4YWQ1YTBhM2ZkZGFjMzQzZjJkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgzNzI3MTliMjRlMmRkNzVkZTZmNTliYjEzMTVlNjAwZGI0ZmQwOTI4MDViZDEyMDFlZDBjYjY1MWEyZGFiNDgiCisKK0RFUEVORFMgKz0gImludGx0b29sLW5hdGl2ZSIKKworUEFDS0FHRVMgPSsgImxpYmF2YWhpLWdvYmplY3QiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvMDAwMS1hdmFoaS1maXgtYXZhaGktc3RhdHVzLWNvbW1hbmQtZXJyb3ItcHJvbXB0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzLzAwMDEtYXZhaGktZml4LWF2YWhpLXN0YXR1cy1jb21tYW5kLWVycm9yLXByb21wdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTkwZGY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzLzAwMDEtYXZhaGktZml4LWF2YWhpLXN0YXR1cy1jb21tYW5kLWVycm9yLXByb21wdC5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGcm9tIGY3NzRhYzI1ZjQzNmE3ODJjY2NjYzRkYmU2ODM3OGE2ODQ1OTY3OTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMdSBDaG9uZyA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgNyBOb3YgMjAxMyAxNDozNjoyOCArMDgwMAorU3ViamVjdDogW1BBVENIXSBhdmFoaTogZml4IGF2YWhpIHN0YXR1cyBjb21tYW5kIGVycm9yIHByb21wdAorCitzZXJ2aWNlIC0tc3RhdHVzLWFsbCBjb21tYW5kIHdpbGwgZGlzcGxheSB3cm9uZyBzdGF0dXMgZm9yIGF2YWhpLWRhZW1vbi4KK1RoaXMgY29tbWl0IGZpeCB0aGlzIGVycm9yIHByb21wdCBhbmQgbWFrZSBzZXJ2aWNlIGRpc3BsYXkgcmlnaHQgc3RhdHVzCitmb3IgYXZhaGktZGFlbW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTHUgQ2hvbmcgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBpbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kYWVtb24uaW4gfCAgIDE0ICsrKysrKysrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kYWVtb24uaW4gYi9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kYWVtb24uaW4KK2luZGV4IDQ3OTNiNDYuLjQ5ZWMzNTggMTAwNzU1CistLS0gYS9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kYWVtb24uaW4KKysrKyBiL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbgorQEAgLTE1Myw3ICsxNTMsMTUgQEAgZF9yZWxvYWQoKSB7CisgIyAgICAgICBGdW5jdGlvbiB0aGF0IGNoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIGRhZW1vbi9zZXJ2aWNlLgorICMKKyBkX3N0YXR1cygpIHsKKy0gICAgJERBRU1PTiAtYyAmJiBlY2hvICIkREVTQyBpcyBydW5uaW5nIiB8fCBlY2hvICIkREVTQyBpcyBub3QgcnVubmluZyIKKysgICAgJERBRU1PTiAtYworKyAgICBzdGF0dXM9JD8KKysgICAgaWYgWyAkc3RhdHVzID0gMCBdOyB0aGVuCisrICAgICAgICBlY2hvICIkREVTQyBpcyBydW5uaW5nIgorKyAgICAgICAgcmV0dXJuIDAKKysgICAgZWxzZQorKyAgICAgICAgZWNobyAiJERFU0MgaXMgbm90IHJ1bm5pbmciCisrICAgICAgICByZXR1cm4gMworKyAgICBmaQorIH0KKyAKKyBjYXNlICIkMSIgaW4KK0BAIC0xODIsOSArMTkwLDkgQEAgY2FzZSAiJDEiIGluCisgICAgICAgICBkX3N0YXR1cworIAk7OworICAgICAqKQorLSAgICAgICAgZWNobyAiVXNhZ2U6ICRTQ1JJUFROQU1FIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfHJlbG9hZH0iID4mMgorKyAgICAgICAgZWNobyAiVXNhZ2U6ICRTQ1JJUFROQU1FIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfHJlbG9hZHxzdGF0dXN9IiA+JjIKKyAgICAgICAgIGV4aXQgMQorICAgICAgICAgOzsKKyBlc2FjCisgCistZXhpdCAwCisrZXhpdCAkPworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy8wMGF2YWhpLWF1dG9pcGQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvMDBhdmFoaS1hdXRvaXBkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYWI4MTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvMDBhdmFoaS1hdXRvaXBkCkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCitbIC16ICIkMSIgXSAmJiBlY2hvICJFcnJvcjogc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHVkaGNwYyIgJiYgZXhpdCAxCisKK2Nhc2UgIiQxIiBpbgorCisJZGVjb25maWd8cmVuZXd8Ym91bmQpCisJCS91c3Ivc2Jpbi9hdmFoaS1hdXRvaXBkIC1rICRpbnRlcmZhY2UgMj4gL2Rldi9udWxsCisJCTs7Citlc2FjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvOTlhdmFoaS1hdXRvaXBkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzLzk5YXZhaGktYXV0b2lwZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzRjZGFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzLzk5YXZhaGktYXV0b2lwZApAQCAtMCwwICsxLDEwIEBACisjIS9iaW4vc2gKKworWyAteiAiJDEiIF0gJiYgZWNobyAiRXJyb3I6IHNob3VsZCBiZSBjYWxsZWQgZnJvbSB1ZGhjcGMiICYmIGV4aXQgMQorCitjYXNlICIkMSIgaW4KKworCWxlYXNlZmFpbCkKKwkJL3Vzci9zYmluL2F2YWhpLWF1dG9pcGQgLXdEICRpbnRlcmZhY2UgMj4gL2Rldi9udWxsCisJCTs7Citlc2FjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvYXZhaGlfZml4X2luc3RhbGxfaXNzdWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvYXZhaGlfZml4X2luc3RhbGxfaXNzdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJmMjBlYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9hdmFoaV9maXhfaW5zdGFsbF9pc3N1ZS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRml4ZXMgdGhpcyBpbnN0YWxsIGlzc3VlCisjfCAvYmluL3NoOiBsaW5lIDA6IGNkOiAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9hdmFoaS0wLjYuMzEtcjMuMC9pbWFnZS8vdXNyL2JpbjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wMworCitJbmRleDogYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXZhaGktMC42LjMxLm9yaWcvYXZhaGktdXRpbHMvTWFrZWZpbGUuYW0KKysrKyBhdmFoaS0wLjYuMzEvYXZhaGktdXRpbHMvTWFrZWZpbGUuYW0KK0BAIC01NCw2ICs1NCw3IEBAIGF2YWhpX3NldF9ob3N0X25hbWVfQ0ZMQUdTID0gJChBTV9DRkxBR1MKKyBhdmFoaV9zZXRfaG9zdF9uYW1lX0xEQUREID0gJChBTV9MREFERCkgLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCisgCisgaW5zdGFsbC1leGVjLWxvY2FsOgorKwkkKE1LRElSX1ApICQoREVTVERJUikvJChiaW5kaXIpICYmIFwKKyAJY2QgJChERVNURElSKS8kKGJpbmRpcikgJiYgXAorIAkJcm0gLWYgYXZhaGktcmVzb2x2ZS1ob3N0LW5hbWUgYXZhaGktcmVzb2x2ZS1hZGRyZXNzIGF2YWhpLWJyb3dzZS1kb21haW5zIGF2YWhpLXB1Ymxpc2gtYWRkcmVzcyBhdmFoaS1wdWJsaXNoLXNlcnZpY2UgJiYgXAorIAkJJChMTl9TKSBhdmFoaS1yZXNvbHZlIGF2YWhpLXJlc29sdmUtaG9zdC1uYW1lICYmIFwKK0luZGV4OiBhdmFoaS0wLjYuMzEvYXZhaGktdXRpbHMvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdmFoaS0wLjYuMzEub3JpZy9hdmFoaS11dGlscy9NYWtlZmlsZS5pbgorKysrIGF2YWhpLTAuNi4zMS9hdmFoaS11dGlscy9NYWtlZmlsZS5pbgorQEAgLTkwNiw2ICs5MDYsNyBAQCB1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1iaW5QUk9HUkFNUworIAorIAorIEBIQVZFX0RCVVNfVFJVRUBpbnN0YWxsLWV4ZWMtbG9jYWw6CisrQEhBVkVfREJVU19UUlVFQAkkKE1LRElSX1ApICQoREVTVERJUikvJChiaW5kaXIpICYmIFwKKyBASEFWRV9EQlVTX1RSVUVACWNkICQoREVTVERJUikvJChiaW5kaXIpICYmIFwKKyBASEFWRV9EQlVTX1RSVUVACQlybSAtZiBhdmFoaS1yZXNvbHZlLWhvc3QtbmFtZSBhdmFoaS1yZXNvbHZlLWFkZHJlc3MgYXZhaGktYnJvd3NlLWRvbWFpbnMgYXZhaGktcHVibGlzaC1hZGRyZXNzIGF2YWhpLXB1Ymxpc2gtc2VydmljZSAmJiBcCisgQEhBVkVfREJVU19UUlVFQAkJJChMTl9TKSBhdmFoaS1yZXNvbHZlIGF2YWhpLXJlc29sdmUtaG9zdC1uYW1lICYmIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9maXhfZm9yX2F1dG9tYWtlXzEuMTIueC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9maXhfZm9yX2F1dG9tYWtlXzEuMTIueC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmM0YzI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL2ZpeF9mb3JfYXV0b21ha2VfMS4xMi54LnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvYW1rZSAxLjEyLnggaGFzIGRlcHJpY2F0ZWQgdXNlIG9mIG1rZGlyX3AgLCBhbmQgcmVjb21tZW5kcyB1c2Ugb2YgTUtESVJfUAoraW5zdGVhZC4gRml4ZWQgdGhlIGF1dG9tYWtlIGZpbGVzIGFjY29yZGluZ2x5IHRvIGF2b2lkIHdhcm5pbmctZXJyb3JzLgorU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDcvMDkKKworCitJbmRleDogYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF2YWhpLTAuNi4zMS5vcmlnL2F2YWhpLWRhZW1vbi9NYWtlZmlsZS5hbQorKysrIGF2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vTWFrZWZpbGUuYW0KK0BAIC0xNjksNyArMTY5LDcgQEAgeG1sbGludDoKKyAJZG9uZQorIAorIGluc3RhbGwtZGF0YS1sb2NhbDoKKy0JdGVzdCAteiAiJChsb2NhbHN0YXRlZGlyKS9ydW4iIHx8ICQobWtkaXJfcCkgIiQoREVTVERJUikkKGxvY2Fsc3RhdGVkaXIpL3J1biIKKysJdGVzdCAteiAiJChsb2NhbHN0YXRlZGlyKS9ydW4iIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGxvY2Fsc3RhdGVkaXIpL3J1biIKKyAKKyB1cGRhdGUtc3lzdGVtZDoKKyAJY3VybCBodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvc3lzdGVtZC9wbGFpbi9zcmMvc2QtZGFlbW9uLmMgPiBzZC1kYWVtb24uYworSW5kZXg6IGF2YWhpLTAuNi4zMS9hdmFoaS1hdXRvaXBkL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXZhaGktMC42LjMxLm9yaWcvYXZhaGktYXV0b2lwZC9NYWtlZmlsZS5hbQorKysrIGF2YWhpLTAuNi4zMS9hdmFoaS1hdXRvaXBkL01ha2VmaWxlLmFtCitAQCAtNzYsNyArNzYsNyBAQCBkaGNsaWVudGVudGVyZGlyID0gJChzeXNjb25mZGlyKS9kaGNwL2RoCisgZGhjbGllbnRleGl0ZGlyID0gJChzeXNjb25mZGlyKS9kaGNwL2RoY2xpZW50LWV4aXQtaG9va3MuZAorIAorIGluc3RhbGwtZXhlYy1ob29rOiBkaGNsaWVudC1leGl0LWhvb2sgZGhjbGllbnQtZW50ZXItaG9vaworLQkkKG1rZGlyX3ApICQoREVTVERJUikkKGRoY2xpZW50ZW50ZXJkaXIpICQoREVTVERJUikkKGRoY2xpZW50ZXhpdGRpcikKKysJJChNS0RJUl9QKSAkKERFU1RESVIpJChkaGNsaWVudGVudGVyZGlyKSAkKERFU1RESVIpJChkaGNsaWVudGV4aXRkaXIpCisgCSQoSU5TVEFMTCkgZGhjbGllbnQtZW50ZXItaG9vayAkKERFU1RESVIpJChkaGNsaWVudGVudGVyZGlyKS9hdmFoaS1hdXRvaXBkCisgCSQoSU5TVEFMTCkgZGhjbGllbnQtZXhpdC1ob29rICQoREVTVERJUikkKGRoY2xpZW50ZXhpdGRpcikvYXZhaGktYXV0b2lwZAorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL2luaXRzY3JpcHQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvaW5pdHNjcmlwdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTM4ODllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL2luaXRzY3JpcHQucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLS1naXQgYS9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kYWVtb24uaW4gYi9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kYWVtb24uaW4KK2luZGV4IDMwYTJjMmYuLmI1ODQ4YTggMTAwNzU1CistLS0gYS9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kYWVtb24uaW4KKysrKyBiL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbgorQEAgLTEsMiArMSwxNCBAQAorICMhL2Jpbi9zaAorLQorKyMjIyBCRUdJTiBJTklUIElORk8KKysjIFByb3ZpZGVzOiAgICAgICAgICBhdmFoaQorKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRyZW1vdGVfZnMgZGJ1cworKyMgUmVxdWlyZWQtU3RvcDogICAgICRyZW1vdGVfZnMgZGJ1cworKyMgU2hvdWxkLVN0YXJ0OgkgICAgICRzeXNsb2cKKysjIFNob3VsZC1TdG9wOiAgICAgICAkc3lzbG9nCisrIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisrIyBTaG9ydC1EZXNjcmlwdGlvbjogQXZhaGkgbUROUy9ETlMtU0QgRGFlbW9uCisrIyBEZXNjcmlwdGlvbjogICAgICAgWmVyb2NvbmYgZGFlbW9uIGZvciBjb25maWd1cmluZyB5b3VyIG5ldHdvcmsgCisrIyAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseQorKyMjIyBFTkQgSU5JVCBJTkZPCisrIworZGlmZiAtLWdpdCBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRuc2NvbmZkLmluIGIvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZG5zY29uZmQuaW4KK2luZGV4IGFjMzQ4MDQuLmY5NWMzNDAgMTAwNzU1CistLS0gYS9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kbnNjb25mZC5pbgorKysrIGIvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZG5zY29uZmQuaW4KK0BAIC0xLDEgKzEsMTQgQEAKKyAjIS9iaW4vc2gKKysjIyMgQkVHSU4gSU5JVCBJTkZPCisrIyBQcm92aWRlczogICAgICAgICAgYXZhaGktZG5zY29uZmQKKysjIFJlcXVpcmVkLVN0YXJ0OiAgICAkcmVtb3RlX2ZzIGF2YWhpCisrIyBSZXF1aXJlZC1TdG9wOiAgICAgJHJlbW90ZV9mcyBhdmFoaQorKyMgU2hvdWxkLVN0YXJ0OgkgICAgICRzeXNsb2cKKysjIFNob3VsZC1TdG9wOiAgICAgICAkc3lzbG9nCisrIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisrIyBTaG9ydC1EZXNjcmlwdGlvbjogQXZhaGkgbUROUy9ETlMtU0QgRE5TIGNvbmZpZ3VyYXRpb24KKysjIERlc2NyaXB0aW9uOiAgICAgICBaZXJvY29uZiBkYWVtb24gZm9yIGNvbmZpZ3VyaW5nIHlvdXIgbmV0d29yayAKKysjICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5CisrIyMjIEVORCBJTklUIElORk8KKysjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvb3V0LW9mLXRyZWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvb3V0LW9mLXRyZWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM0NzZjZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9vdXQtb2YtdHJlZS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Zyb20gYTYyZGM5NWQ3NTY5MWVhNGFlZmE4NmQ4YmJlNTRjNjJhZmQ3OGZmNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitEYXRlOiBUdWUsIDE3IFNlcCAyMDEzIDEyOjI3OjM2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGJ1aWxkLXN5czogZml4IG91dC1vZi10cmVlIGJ1aWxkcyB3aXRob3V0IHhtbHRvbWFuCisKK0lmIG1hbnBhZ2VzIGFyZSBlbmFibGVkIGJ1dCB4bWx0b21hbiBpc24ndCBwcmVzZW50LCBvdXQtb2YtdHJlZSBidWlsZHMgZmFpbAorYmVjYXVzZSBpdCBjaGVja3MgaW5zaWRlIHRoZSBidWlsZCBkaXJlY3RvcnkgZm9yIHRoZSBwcmUtZ2VuZXJhdGVkIG1hbnBhZ2VzLgorCitGaXggdGhpcyBieSB1c2luZyAkc3JjZGlyIHdoZW4gbG9va2luZyBmb3IgZmlsZXMgaW5zaWRlIHRoZSBzb3VyY2UgZGlyZWN0b3J5LgorLS0tCisgY29uZmlndXJlLmFjIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5ZGViY2UyLi4wNDdjN2FlIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMDIxLDcgKzEwMjEsNyBAQCBpZiB0ZXN0IHgkbWFucGFnZXMgPSB4eWVzIDsgdGhlbgorICAgICBmaQorIAorICAgICBpZiB0ZXN0IHgkaGF2ZV94bWx0b21hbiA9IHhubyAtbyB4JHhtbHRvbWFuID0geG5vOyB0aGVuCistICAgICAgICBpZiAhIHRlc3QgLWUgbWFuL2F2YWhpLWRhZW1vbi44IDsgdGhlbgorKyAgICAgICAgaWYgISB0ZXN0IC1lICRzcmNkaXIvbWFuL2F2YWhpLWRhZW1vbi44IDsgdGhlbgorICAgICAgICAgICAgIEFDX01TR19FUlJPUihbKioqIHhtbHRvbWFuIHdhcyBub3QgZm91bmQgb3Igd2FzIGRpc2FibGVkLCBpdCBpcyByZXF1aXJlZCB0byBidWlsZCB0aGUgbWFucGFnZXMgYXMgdGhleSBoYXZlIG5vdCBiZWVuIHByZS1idWlsdCwgaW5zdGFsbCB4bWx0b21hbiwgcGFzcyAtLWRpc2FibGUtbWFucGFnZXMgb3IgZG9udCBwYXNzIC0tZGlzYWJsZS14bWx0b21hbl0pCisgICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICBmaQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvcmV1c2Vwb3J0LWNoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL3JldXNlcG9ydC1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjgxYzJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL3JldXNlcG9ydC1jaGVjay5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGaXggYXZhaGktZGFlbW9uIHdoZW4gcnVubmluZyBvbiBrZXJuZWwgPCAzLjkgKHBhdGNoIHRha2VuIGZyb20gVWJ1bnR1KS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nICh1bm1haW50YWluZWQgdXBzdHJlYW0pCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitEZXNjcmlwdGlvbjogU09fUkVVU0VQT1JUIG1heSBub3QgZXhpc3QgaW4gcnVubmluZyBrZXJuZWwKKyBXaGVuIHVzZXJzcGFjZSBkZWZpbmVzIFNPX1JFVVNFUE9SVCB3ZSB3aWxsIGF0dGVtcHQgdG8gZW5hYmxlIHNvY2tldAorIHBvcnQgbnVtYmVyIHJldXNlLiAgSG93ZXZlciBpZiB0aGUgcnVubmluZyBrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydAorIHRoaXMgY2FsbCBpdCB3aWxsIGZhaWwgcHJldmVudGluZyBkYWVtb24gc3RhcnR1cC4gIElmIHRoaXMgY2FsbCBpcworIHByZXNlbnQgYnV0IGZhaWxzIEVOT1BST1RPT1BUIHRoZW4gd2Uga25vdyB0aGF0IGFjdHVhbGx5IHRoZSBrZXJuZWwKKyBkb2VzIG5vdCBzdXBwb3J0IGl0IGFuZCB3ZSBzaG91bGQgY29udGludWUgYXMgaWYgd2UgZGlkIG5vdCBoYXZlIHRoZQorIGNhbGwgYXQgYWxsLiAgKExQOiAjMTIyODIwNCkKKyAuCisgVGhpcyBwYXRjaCBjb3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGRlYmlhbiBwYWNrYWdlIGFmdGVyIGplc3NpZSByZWxlYXNlLgorQXV0aG9yOiBBbmR5IFdoaXRjcm9mdCA8YXB3QGNhbm9uaWNhbC5jb20+CisKK0luZGV4OiBhdmFoaS0wLjYuMzEvYXZhaGktY29yZS9zb2NrZXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF2YWhpLTAuNi4zMS5vcmlnL2F2YWhpLWNvcmUvc29ja2V0LmMJMjAxMy0wOS0yMCAxNjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKKysrKyBhdmFoaS0wLjYuMzEvYXZhaGktY29yZS9zb2NrZXQuYwkyMDEzLTA5LTIwIDE2OjM4OjIzLjc4MTg2MzY0NCArMDEwMAorQEAgLTE3Nyw3ICsxNzcsOCBAQAorICAgICB5ZXMgPSAxOworICAgICBpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VQT1JULCAmeWVzLCBzaXplb2YoeWVzKSkgPCAwKSB7CisgICAgICAgICBhdmFoaV9sb2dfd2FybigiU09fUkVVU0VQT1JUIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworLSAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgaWYgKGVycm5vICE9IEVOT1BST1RPT1BUKQorKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgfQorICNlbmRpZgorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC8wMDAxLWJ1aWxkLXVzZS1wa2ctY29uZmlnLXRvLWZpbmQtbGlieG1sMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvMDAwMS1idWlsZC11c2UtcGtnLWNvbmZpZy10by1maW5kLWxpYnhtbDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I1MjUxZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvMDAwMS1idWlsZC11c2UtcGtnLWNvbmZpZy10by1maW5kLWxpYnhtbDIucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAoreG1sMi1jb25maWcgaXMgZGlzYWJsZWQsIHNvIGNoYW5nZSB0aGUgY29uZmlndXJlIHNjcmlwdCB0byB1c2UgcGtnY29uZmlnIHRvIGZpbmQKK2xpYnhtbDIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworLS0tCisgY29uZmlndXJlLmluIHwgMTggKysrLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IGQ1NjZlMWMuLmM5ZWYzYTYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTIxMDIsMjEgKzIxMDIsOSBAQCBjYXNlICIkdXNlX2xpYnhtbDIiIGluCisgCQlEU1RfTElCWE1MMl9JTkM9IiIKKyAJCTs7CisgCWF1dG98eWVzKQorLQkJY2FzZSBYYCh4bWwyLWNvbmZpZyAtLXZlcnNpb24pIDI+L2Rldi9udWxsYCBpbgorLQkJWDIuW1s2Nzg5XV0uKikKKy0JCQlsaWJ4bWwyX2xpYnM9YHhtbDItY29uZmlnIC0tbGlic2AKKy0JCQlsaWJ4bWwyX2NmbGFncz1geG1sMi1jb25maWcgLS1jZmxhZ3NgCistCQkJOzsKKy0JCSopCistCQkJbGlieG1sMl9saWJzPQorLQkJCWxpYnhtbDJfY2ZsYWdzPQorLQkJCTs7CistCQllc2FjCistCQk7OworLQkqKQorLQkJaWYgdGVzdCAtZiAiJHVzZV9saWJ4bWwyL2Jpbi94bWwyLWNvbmZpZyIgOyB0aGVuCistCQkJbGlieG1sMl9saWJzPWAkdXNlX2xpYnhtbDIvYmluL3htbDItY29uZmlnIC0tbGlic2AKKy0JCQlsaWJ4bWwyX2NmbGFncz1gJHVzZV9saWJ4bWwyL2Jpbi94bWwyLWNvbmZpZyAtLWNmbGFnc2AKKysJCWlmIHBrZy1jb25maWcgLS1leGlzdHMgbGlieG1sLTIuMCA7IHRoZW4KKysJCQlsaWJ4bWwyX2xpYnM9YHBrZy1jb25maWcgbGlieG1sLTIuMCAtLWxpYnNgCisrCQkJbGlieG1sMl9jZmxhZ3M9YHBrZy1jb25maWcgbGlieG1sLTIuMCAtLWNmbGFnc2AKKyAJCWZpCisgCQk7OworIGVzYWMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC8wMDAxLWdlbi5jLWV4dGVuZC1ESVJOQU1FU0laRS1mcm9tLTI1Ni10by01MTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kLzAwMDEtZ2VuLmMtZXh0ZW5kLURJUk5BTUVTSVpFLWZyb20tMjU2LXRvLTUxMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjE1MDkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC8wMDAxLWdlbi5jLWV4dGVuZC1ESVJOQU1FU0laRS1mcm9tLTI1Ni10by01MTIucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1N1YmplY3Q6IGdlbi5jOiBleHRlbmQgRElSTkFNRVNJWkUgZnJvbSAyNTYgdG8gNTEyCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYi9kbnMvZ2VuLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZG5zL2dlbi5jIGIvbGliL2Rucy9nZW4uYworaW5kZXggN2E3ZGFmYi4uNTFhMDQzNSAxMDA2NDQKKy0tLSBhL2xpYi9kbnMvZ2VuLmMKKysrKyBiL2xpYi9kbnMvZ2VuLmMKK0BAIC0xNDgsNyArMTQ4LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgY29weXJpZ2h0W10gPQorICNkZWZpbmUgVFlQRUNMQVNTQlVGIChUWVBFQ0xBU1NMRU4gKyAxKQorICNkZWZpbmUgVFlQRUNMQVNTRk1UICIlIiBTVFIoVFlQRUNMQVNTTEVOKSAiWy0wLTlhLXpdXyVkIgorICNkZWZpbmUgQVRUUklCVVRFU0laRSAyNTYKKy0jZGVmaW5lIERJUk5BTUVTSVpFIDI1NgorKyNkZWZpbmUgRElSTkFNRVNJWkUgNTEyCisgCisgc3RhdGljIHN0cnVjdCBjYyB7CisgCXN0cnVjdCBjYyAqbmV4dDsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kLWNvbmZnZW4tYnVpbGQtdW5peC5vLW9uY2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQtY29uZmdlbi1idWlsZC11bml4Lm8tb25jZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTZkNWQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kLWNvbmZnZW4tYnVpbGQtdW5peC5vLW9uY2UucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSA5YjQwNjE5ZmY2ZmRkZmVmMjc1OGJhNzk3Nzg5Zjg0ODdmNDEyZGYzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDE2IEZlYiAyMDE1IDAwOjUwOjAxIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZnZW46IGRvbid0IGJ1aWxkIHVuaXgubyB0d2ljZQorCitGaXhlZDoKK3VuaXgvb3MubzogZmlsZSBub3QgcmVjb2duaXplZDogRmlsZSB0cnVuY2F0ZWQKK2NvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworCitUaGlzIGlzIGJlY2F1c2Ugb3MubyB3YXMgYnVpbHQgdHdpY2U6CisqIFRoZSBpbXBsaWNpdHkgcnVsZSAoZGVwZW5kcyBvbiB1bml4L29zLm8pCisqIFRoZSAibWFrZSBhbGwiIGluIHVuaXggc3ViZGlyIChkZXBlbmRzIG9uIHVuaXgvb3MubykKKworRGVwZW5kIG9uIHN1YmRpcnMgd2hpY2ggaXMgdW5peCBvbmx5IHJhdGhlciB0aGFuIHVuaXgvb3MubyB3aWxsIGZpeCB0aGUKK3Byb2JsZW0uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJpbi9jb25mZ2VuL01ha2VmaWxlLmluIHwgICAgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2Jpbi9jb25mZ2VuL01ha2VmaWxlLmluIGIvYmluL2NvbmZnZW4vTWFrZWZpbGUuaW4KK2luZGV4IDhiM2U1YWEuLjQ4NjhhMjQgMTAwNjQ0CistLS0gYS9iaW4vY29uZmdlbi9NYWtlZmlsZS5pbgorKysrIGIvYmluL2NvbmZnZW4vTWFrZWZpbGUuaW4KK0BAIC03NCwxMSArNzQsMTEgQEAgcm5kYy1jb25mZ2VuLkBPQDogcm5kYy1jb25mZ2VuLmMKKyBkZG5zLWNvbmZnZW4uQE9AOiBkZG5zLWNvbmZnZW4uYworIAkke0xJQlRPT0xfTU9ERV9DT01QSUxFfSAke0NDfSAke0FMTF9DRkxBR1N9IC1jICR7c3JjZGlyfS9kZG5zLWNvbmZnZW4uYworIAorLXJuZGMtY29uZmdlbkBFWEVFWFRAOiBybmRjLWNvbmZnZW4uQE9AIHV0aWwuQE9AIGtleWdlbi5AT0AgJHtVT0JKU30gJHtDT05GREVQTElCU30gCisrcm5kYy1jb25mZ2VuQEVYRUVYVEA6IHJuZGMtY29uZmdlbi5AT0AgdXRpbC5AT0Aga2V5Z2VuLkBPQCAke0NPTkZERVBMSUJTfSAkKFNVQkRJUlMpCisgCWV4cG9ydCBCQVNFT0JKUz0icm5kYy1jb25mZ2VuLkBPQCB1dGlsLkBPQCBrZXlnZW4uQE9AICR7VU9CSlN9IjsgXAorIAkke0ZJTkFMQlVJTERDTUR9CisgCistZGRucy1jb25mZ2VuQEVYRUVYVEA6IGRkbnMtY29uZmdlbi5AT0AgdXRpbC5AT0Aga2V5Z2VuLkBPQCAke1VPQkpTfSAke0NPTkZERVBMSUJTfSAKKytkZG5zLWNvbmZnZW5ARVhFRVhUQDogZGRucy1jb25mZ2VuLkBPQCB1dGlsLkBPQCBrZXlnZW4uQE9AICR7Q09ORkRFUExJQlN9ICQoU1VCRElSUykKKyAJZXhwb3J0IEJBU0VPQkpTPSJkZG5zLWNvbmZnZW4uQE9AIHV0aWwuQE9AIGtleWdlbi5AT0AgJHtVT0JKU30iOyBcCisgCSR7RklOQUxCVUlMRENNRH0KKyAKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQtZW5zdXJlLXNlYXJjaGluZy1mb3ItanNvbi1oZWFkZXJzLXNlYXJjaGVzLXN5c3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQtZW5zdXJlLXNlYXJjaGluZy1mb3ItanNvbi1oZWFkZXJzLXNlYXJjaGVzLXN5c3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNkZjNiYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZC1lbnN1cmUtc2VhcmNoaW5nLWZvci1qc29uLWhlYWRlcnMtc2VhcmNoZXMtc3lzci5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGcm9tIDk0NzNkMjk4NDM1Nzk4MDJlOTZiMDI5M2EzZTk1M2ZlZDkzZGU4MmMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgOSBKdW4gMjAxNSAxMToyMjowMCAtMDQwMAorU3ViamVjdDogW1BBVENIXSBiaW5kOiBlbnN1cmUgc2VhcmNoaW5nIGZvciBqc29uIGhlYWRlcnMgc2VhcmNoZXMgc3lzcm9vdAorCitCaW5kIGNhbiBmYWlsIGNvbmZpZ3VyZSBieSBkZXRlY3RpbmcgaGVhZGVycyB3L28gbGlic1sxXSwgb3IKK2l0IGNhbiBmYWlsIHRoZSBob3N0IGNvbnRhbWluYXRpb24gY2hlY2sgYXMgcGVyIGJlbG93OgorCitFUlJPUjogVGhpcyBhdXRvY29uZiBsb2cgaW5kaWNhdGVzIGVycm9ycywgaXQgbG9va2VkIGF0IGhvc3QgaW5jbHVkZSBhbmQvb3IgbGlicmFyeSBwYXRocyB3aGlsZSBkZXRlcm1pbmluZyBzeXN0ZW0gY2FwYWJpbGl0aWVzLgorUmVydW4gY29uZmlndXJlIHRhc2sgYWZ0ZXIgZml4aW5nIHRoaXMuIFRoZSBwYXRoIHdhcyAnYnVpbGQvdG1wL3dvcmsvY29yZTItNjQtcG9reS1saW51eC9iaW5kLzkuMTAuMi1yMS9idWlsZCcKK0VSUk9SOiBGdW5jdGlvbiBmYWlsZWQ6IGRvX3FhX2NvbmZpZ3VyZQorRVJST1I6IExvZ2ZpbGUgb2YgZmFpbHVyZSBzdG9yZWQgaW46IGJ1aWxkL3RtcC93b3JrL2NvcmUyLTY0LXBva3ktbGludXgvYmluZC85LjEwLjItcjEvdGVtcC9sb2cuZG9fY29uZmlndXJlLjUyNDIKK0VSUk9SOiBUYXNrIDUgKG1ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kXzkuMTAuMi5iYiwgZG9fY29uZmlndXJlKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJzEnCitOT1RFOiBUYXNrcyBTdW1tYXJ5OiBBdHRlbXB0ZWQgNzczIHRhc2tzIG9mIHdoaWNoIDc2OCBkaWRuJ3QgbmVlZCB0byBiZSByZXJ1biBhbmQgMSBmYWlsZWQuCitObyBjdXJyZW50bHkgcnVubmluZyB0YXNrcyAoNzczIG9mIDc4MSkKKworU3VtbWFyeTogMSB0YXNrIGZhaWxlZDoKKyAgL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kXzkuMTAuMi5iYiwgZG9fY29uZmlndXJlCisKK09uZSB3YXkgdG8gZml4IGl0IHdvdWxkIGJlIHRvIHVuY29uZGl0aW9uYWxseSBkaXNhYmxlIGpzb24gaW4gYmluZAorY29uZmlndXJlWzJdIGJ1dCBoZXJlIHdlIGZpeCBpdCBieSB1c2luZyB0aGUgcGF0aCB0byB3aGVyZSB3ZSB3b3VsZAorcHV0IHRoZSBoZWFkZXIgaWYgd2UgaGFkIGpzb24gaW4gdGhlIHN5c3Jvb3QsIGluIGNhc2Ugc29tZW9uZSB3YW50cwordG8gbWFrZSB1c2Ugb2YgdGhlIGNvbWJpbmF0aW9uIHNvbWUgZGF5LgorCitbMV0gaHR0cHM6Ly90cmFjLm1hY3BvcnRzLm9yZy90aWNrZXQvNDUzMDUKK1syXSBodHRwczovL3RyYWMubWFjcG9ydHMub3JnL2NoYW5nZXNldC8xMjY0MDYKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBTcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmluIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCBjOWVmM2E2MDEzNDMuLjE3YTFmNjEzZTlhYyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMjEzOSw3ICsyMTM5LDcgQEAgY2FzZSAiJHVzZV9saWJqc29uIiBpbgorIAkJbGlianNvbl9saWJzPSIiCisgCQk7OworIAlhdXRvfHllcykKKy0JCWZvciBkIGluIC91c3IgL3Vzci9sb2NhbCAvb3B0L2xvY2FsCisrCQlmb3IgZCBpbiAiJHtTVEFHSU5HX0lOQ0RJUn0iCisgCQlkbworIAkJCWlmIHRlc3QgLWYgIiR7ZH0vaW5jbHVkZS9qc29uL2pzb24uaCIKKyAJCQl0aGVuCistLSAKKzIuNC4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZDkgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ODY3OWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQ5CkBAIC0wLDAgKzEsMiBAQAorIyBzdGFydHVwIG9wdGlvbnMgZm9yIHRoZSBzZXJ2ZXIKK09QVElPTlM9Ii11IGJpbmQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2NvbmYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2NvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFkMzQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvY29uZi5wYXRjaApAQCAtMCwwICsxLDMzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCit0aGUgcGF0Y2ggaXMgaW1wb3J0ZWQgZnJvbSBvcGVuZW1iZWRkZWQgcHJvamVjdAorCisxMS8zMC8yMDEwIC0gUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi4wIGJpbmQtOS4zLjEvY29uZi9kYi4wCistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvZGIuMAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9kYi4wCTIwMDUtMDctMTAgMjI6MTQ6MDAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDEyIEBACisrOworKzsgQklORCByZXZlcnNlIGRhdGEgZmlsZSBmb3IgYnJvYWRjYXN0IHpvbmUKKys7CisrJFRUTAk2MDQ4MDAKKytACUlOCVNPQQlsb2NhbGhvc3QuIHJvb3QubG9jYWxob3N0LiAoCisrCQkJICAgICAgMQkJOyBTZXJpYWwKKysJCQkgNjA0ODAwCQk7IFJlZnJlc2gKKysJCQkgIDg2NDAwCQk7IFJldHJ5CisrCQkJMjQxOTIwMAkJOyBFeHBpcmUKKysJCQkgNjA0ODAwICkJOyBOZWdhdGl2ZSBDYWNoZSBUVEwKKys7CisrQAlJTglOUwlsb2NhbGhvc3QuCitkaWZmIC11ck4gYmluZC05LjMuMS5vcmlnL2NvbmYvZGIuMTI3IGJpbmQtOS4zLjEvY29uZi9kYi4xMjcKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi4xMjcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW5kLTkuMy4xL2NvbmYvZGIuMTI3CTIwMDUtMDctMTAgMjI6MTQ6MDAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDEzIEBACisrOworKzsgQklORCByZXZlcnNlIGRhdGEgZmlsZSBmb3IgbG9jYWwgbG9vcGJhY2sgaW50ZXJmYWNlCisrOworKyRUVEwJNjA0ODAwCisrQAlJTglTT0EJbG9jYWxob3N0LiByb290LmxvY2FsaG9zdC4gKAorKwkJCSAgICAgIDEJCTsgU2VyaWFsCisrCQkJIDYwNDgwMAkJOyBSZWZyZXNoCisrCQkJICA4NjQwMAkJOyBSZXRyeQorKwkJCTI0MTkyMDAJCTsgRXhwaXJlCisrCQkJIDYwNDgwMCApCTsgTmVnYXRpdmUgQ2FjaGUgVFRMCisrOworK0AJSU4JTlMJbG9jYWxob3N0LgorKzEuMC4wCUlOCVBUUglsb2NhbGhvc3QuCitkaWZmIC11ck4gYmluZC05LjMuMS5vcmlnL2NvbmYvZGIuZW1wdHkgYmluZC05LjMuMS9jb25mL2RiLmVtcHR5CistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvZGIuZW1wdHkJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW5kLTkuMy4xL2NvbmYvZGIuZW1wdHkJMjAwNS0wNy0xMCAyMjoxNDowMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTQgQEAKKys7IEJJTkQgcmV2ZXJzZSBkYXRhIGZpbGUgZm9yIGVtcHR5IHJmYzE5MTggem9uZQorKzsKKys7IERPIE5PVCBFRElUIFRISVMgRklMRSAtIGl0IGlzIHVzZWQgZm9yIG11bHRpcGxlIHpvbmVzLgorKzsgSW5zdGVhZCwgY29weSBpdCwgZWRpdCBuYW1lZC5jb25mLCBhbmQgdXNlIHRoYXQgY29weS4KKys7CisrJFRUTAk4NjQwMAorK0AJSU4JU09BCWxvY2FsaG9zdC4gcm9vdC5sb2NhbGhvc3QuICgKKysJCQkgICAgICAxCQk7IFNlcmlhbAorKwkJCSA2MDQ4MDAJCTsgUmVmcmVzaAorKwkJCSAgODY0MDAJCTsgUmV0cnkKKysJCQkyNDE5MjAwCQk7IEV4cGlyZQorKwkJCSAgODY0MDAgKQk7IE5lZ2F0aXZlIENhY2hlIFRUTAorKzsKKytACUlOCU5TCWxvY2FsaG9zdC4KK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi4yNTUgYmluZC05LjMuMS9jb25mL2RiLjI1NQorLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLjI1NQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9kYi4yNTUJMjAwNS0wNy0xMCAyMjoxNDowMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTIgQEAKKys7CisrOyBCSU5EIHJlc2VydmUgZGF0YSBmaWxlIGZvciBicm9hZGNhc3Qgem9uZQorKzsKKyskVFRMCTYwNDgwMAorK0AJSU4JU09BCWxvY2FsaG9zdC4gcm9vdC5sb2NhbGhvc3QuICgKKysJCQkgICAgICAxCQk7IFNlcmlhbAorKwkJCSA2MDQ4MDAJCTsgUmVmcmVzaAorKwkJCSAgODY0MDAJCTsgUmV0cnkKKysJCQkyNDE5MjAwCQk7IEV4cGlyZQorKwkJCSA2MDQ4MDAgKQk7IE5lZ2F0aXZlIENhY2hlIFRUTAorKzsKKytACUlOCU5TCWxvY2FsaG9zdC4KK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi5sb2NhbCBiaW5kLTkuMy4xL2NvbmYvZGIubG9jYWwKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi5sb2NhbAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9kYi5sb2NhbAkyMDA1LTA3LTEwIDIyOjE0OjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMyBAQAorKzsKKys7IEJJTkQgZGF0YSBmaWxlIGZvciBsb2NhbCBsb29wYmFjayBpbnRlcmZhY2UKKys7CisrJFRUTAk2MDQ4MDAKKytACUlOCVNPQQlsb2NhbGhvc3QuIHJvb3QubG9jYWxob3N0LiAoCisrCQkJICAgICAgMQkJOyBTZXJpYWwKKysJCQkgNjA0ODAwCQk7IFJlZnJlc2gKKysJCQkgIDg2NDAwCQk7IFJldHJ5CisrCQkJMjQxOTIwMAkJOyBFeHBpcmUKKysJCQkgNjA0ODAwICkJOyBOZWdhdGl2ZSBDYWNoZSBUVEwKKys7CisrQAlJTglOUwlsb2NhbGhvc3QuCisrQAlJTglBCTEyNy4wLjAuMQorZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLnJvb3QgYmluZC05LjMuMS9jb25mL2RiLnJvb3QKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi5yb290CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL2RiLnJvb3QJMjAwNS0wNy0xMCAyMjoxNDowMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNDUgQEAKKysKKys7IDw8Pj4gRGlHIDkuMi4zIDw8Pj4gbnMgLiBAYS5yb290LXNlcnZlcnMubmV0LgorKzs7IGdsb2JhbCBvcHRpb25zOiAgcHJpbnRjbWQKKys7OyBHb3QgYW5zd2VyOgorKzs7IC0+PkhFQURFUjw8LSBvcGNvZGU6IFFVRVJZLCBzdGF0dXM6IE5PRVJST1IsIGlkOiAxODk0NAorKzs7IGZsYWdzOiBxciBhYSByZDsgUVVFUlk6IDEsIEFOU1dFUjogMTMsIEFVVEhPUklUWTogMCwgQURESVRJT05BTDogMTMKKysKKys7OyBRVUVTVElPTiBTRUNUSU9OOgorKzsuCQkJCUlOCU5TCisrCisrOzsgQU5TV0VSIFNFQ1RJT046CisrLgkJCTUxODQwMAlJTglOUwlBLlJPT1QtU0VSVkVSUy5ORVQuCisrLgkJCTUxODQwMAlJTglOUwlCLlJPT1QtU0VSVkVSUy5ORVQuCisrLgkJCTUxODQwMAlJTglOUwlDLlJPT1QtU0VSVkVSUy5ORVQuCisrLgkJCTUxODQwMAlJTglOUwlELlJPT1QtU0VSVkVSUy5ORVQuCisrLgkJCTUxODQwMAlJTglOUwlFLlJPT1QtU0VSVkVSUy5ORVQuCisrLgkJCTUxODQwMAlJTglOUwlGLlJPT1QtU0VSVkVSUy5ORVQuCisrLgkJCTUxODQwMAlJTglOUwlHLlJPT1QtU0VSVkVSUy5ORVQuCisrLgkJCTUxODQwMAlJTglOUwlILlJPT1QtU0VSVkVSUy5ORVQuCisrLgkJCTUxODQwMAlJTglOUwlJLlJPT1QtU0VSVkVSUy5ORVQuCisrLgkJCTUxODQwMAlJTglOUwlKLlJPT1QtU0VSVkVSUy5ORVQuCisrLgkJCTUxODQwMAlJTglOUwlLLlJPT1QtU0VSVkVSUy5ORVQuCisrLgkJCTUxODQwMAlJTglOUwlMLlJPT1QtU0VSVkVSUy5ORVQuCisrLgkJCTUxODQwMAlJTglOUwlNLlJPT1QtU0VSVkVSUy5ORVQuCisrCisrOzsgQURESVRJT05BTCBTRUNUSU9OOgorK0EuUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5OC40MS4wLjQKKytCLlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxOTIuMjI4Ljc5LjIwMQorK0MuUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5Mi4zMy40LjEyCisrRC5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTI4LjguMTAuOTAKKytFLlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxOTIuMjAzLjIzMC4xMAorK0YuUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5Mi41LjUuMjQxCisrRy5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTkyLjExMi4zNi40CisrSC5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTI4LjYzLjIuNTMKKytJLlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxOTIuMzYuMTQ4LjE3CisrSi5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTkyLjU4LjEyOC4zMAorK0suUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5My4wLjE0LjEyOQorK0wuUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5OC4zMi42NC4xMgorK00uUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTIwMi4xMi4yNy4zMworKworKzs7IFF1ZXJ5IHRpbWU6IDgxIG1zZWMKKys7OyBTRVJWRVI6IDE5OC40MS4wLjQjNTMoYS5yb290LXNlcnZlcnMubmV0LikKKys7OyBXSEVOOiBTdW4gRmViICAxIDExOjI3OjE0IDIwMDQKKys7OyBNU0cgU0laRSAgcmN2ZDogNDM2CisrCitkaWZmIC11ck4gYmluZC05LjMuMS5vcmlnL2NvbmYvbmFtZWQuY29uZiBiaW5kLTkuMy4xL2NvbmYvbmFtZWQuY29uZgorLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL25hbWVkLmNvbmYJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW5kLTkuMy4xL2NvbmYvbmFtZWQuY29uZgkyMDA1LTA3LTEwIDIyOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw0OSBAQAorKy8vIFRoaXMgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgQklORCBETlMgc2VydmVyIG5hbWVkLgorKy8vCisrLy8gSWYgeW91IGFyZSBqdXN0IGFkZGluZyB6b25lcywgcGxlYXNlIGRvIHRoYXQgaW4gL2V0Yy9iaW5kL25hbWVkLmNvbmYubG9jYWwKKysKKytpbmNsdWRlICIvZXRjL2JpbmQvbmFtZWQuY29uZi5vcHRpb25zIjsKKysKKysvLyBwcmltZSB0aGUgc2VydmVyIHdpdGgga25vd2xlZGdlIG9mIHRoZSByb290IHNlcnZlcnMKKyt6b25lICIuIiB7CisrCXR5cGUgaGludDsKKysJZmlsZSAiL2V0Yy9iaW5kL2RiLnJvb3QiOworK307CisrCisrLy8gYmUgYXV0aG9yaXRhdGl2ZSBmb3IgdGhlIGxvY2FsaG9zdCBmb3J3YXJkIGFuZCByZXZlcnNlIHpvbmVzLCBhbmQgZm9yCisrLy8gYnJvYWRjYXN0IHpvbmVzIGFzIHBlciBSRkMgMTkxMgorKworK3pvbmUgImxvY2FsaG9zdCIgeworKwl0eXBlIG1hc3RlcjsKKysJZmlsZSAiL2V0Yy9iaW5kL2RiLmxvY2FsIjsKKyt9OworKworK3pvbmUgIjEyNy5pbi1hZGRyLmFycGEiIHsKKysJdHlwZSBtYXN0ZXI7CisrCWZpbGUgIi9ldGMvYmluZC9kYi4xMjciOworK307CisrCisrem9uZSAiMC5pbi1hZGRyLmFycGEiIHsKKysJdHlwZSBtYXN0ZXI7CisrCWZpbGUgIi9ldGMvYmluZC9kYi4wIjsKKyt9OworKworK3pvbmUgIjI1NS5pbi1hZGRyLmFycGEiIHsKKysJdHlwZSBtYXN0ZXI7CisrCWZpbGUgIi9ldGMvYmluZC9kYi4yNTUiOworK307CisrCisrLy8gem9uZSAiY29tIiB7IHR5cGUgZGVsZWdhdGlvbi1vbmx5OyB9OworKy8vIHpvbmUgIm5ldCIgeyB0eXBlIGRlbGVnYXRpb24tb25seTsgfTsKKysKKysvLyBGcm9tIHRoZSByZWxlYXNlIG5vdGVzOgorKy8vICBCZWNhdXNlIG1hbnkgb2Ygb3VyIHVzZXJzIGFyZSB1bmNvbWZvcnRhYmxlIHJlY2VpdmluZyB1bmRlbGVnYXRlZCBhbnN3ZXJzCisrLy8gIGZyb20gcm9vdCBvciB0b3AgbGV2ZWwgZG9tYWlucywgb3RoZXIgdGhhbiBhIGZldyBmb3Igd2hvbSB0aGF0IGJlaGF2aW91cgorKy8vICBoYXMgYmVlbiB0cnVzdGVkIGFuZCBleHBlY3RlZCBmb3IgcXVpdGUgc29tZSBsZW5ndGggb2YgdGltZSwgd2UgaGF2ZSBub3cKKysvLyAgaW50cm9kdWNlZCB0aGUgInJvb3QtZGVsZWdhdGlvbnMtb25seSIgZmVhdHVyZSB3aGljaCBhcHBsaWVzIGRlbGVnYXRpb24tb25seQorKy8vICBsb2dpYyB0byBhbGwgdG9wIGxldmVsIGRvbWFpbnMsIGFuZCB0byB0aGUgcm9vdCBkb21haW4uICBBbiBleGNlcHRpb24gbGlzdAorKy8vICBzaG91bGQgYmUgc3BlY2lmaWVkLCBpbmNsdWRpbmcgIk1VU0VVTSIgYW5kICJERSIsIGFuZCBhbnkgb3RoZXIgdG9wIGxldmVsCisrLy8gIGRvbWFpbnMgZnJvbSB3aG9tIHVuZGVsZWdhdGVkIHJlc3BvbnNlcyBhcmUgZXhwZWN0ZWQgYW5kIHRydXN0ZWQuCisrLy8gcm9vdC1kZWxlZ2F0aW9uLW9ubHkgZXhjbHVkZSB7ICJERSI7ICJNVVNFVU0iOyB9OworKworK2luY2x1ZGUgIi9ldGMvYmluZC9uYW1lZC5jb25mLmxvY2FsIjsKK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9uYW1lZC5jb25mLmxvY2FsIGJpbmQtOS4zLjEvY29uZi9uYW1lZC5jb25mLmxvY2FsCistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvbmFtZWQuY29uZi5sb2NhbAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9uYW1lZC5jb25mLmxvY2FsCTIwMDUtMDctMTAgMjI6MTQ6MDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDggQEAKKysvLworKy8vIERvIGFueSBsb2NhbCBjb25maWd1cmF0aW9uIGhlcmUKKysvLworKworKy8vIENvbnNpZGVyIGFkZGluZyB0aGUgMTkxOCB6b25lcyBoZXJlLCBpZiB0aGV5IGFyZSBub3QgdXNlZCBpbiB5b3VyCisrLy8gb3JnYW5pemF0aW9uCisrLy9pbmNsdWRlICIvZXRjL2JpbmQvem9uZXMucmZjMTkxOCI7CisrCitkaWZmIC11ck4gYmluZC05LjMuMS5vcmlnL2NvbmYvbmFtZWQuY29uZi5vcHRpb25zIGJpbmQtOS4zLjEvY29uZi9uYW1lZC5jb25mLm9wdGlvbnMKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi9uYW1lZC5jb25mLm9wdGlvbnMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW5kLTkuMy4xL2NvbmYvbmFtZWQuY29uZi5vcHRpb25zCTIwMDUtMDctMTAgMjI6MTQ6MDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDI0IEBACisrb3B0aW9ucyB7CisrCWRpcmVjdG9yeSAiL3Zhci9jYWNoZS9iaW5kIjsKKysKKysJLy8gSWYgdGhlcmUgaXMgYSBmaXJld2FsbCBiZXR3ZWVuIHlvdSBhbmQgbmFtZXNlcnZlcnMgeW91IHdhbnQKKysJLy8gdG8gdGFsayB0bywgeW91IG1pZ2h0IG5lZWQgdG8gdW5jb21tZW50IHRoZSBxdWVyeS1zb3VyY2UKKysJLy8gZGlyZWN0aXZlIGJlbG93LiAgUHJldmlvdXMgdmVyc2lvbnMgb2YgQklORCBhbHdheXMgYXNrZWQKKysJLy8gcXVlc3Rpb25zIHVzaW5nIHBvcnQgNTMsIGJ1dCBCSU5EIDguMSBhbmQgbGF0ZXIgdXNlIGFuIHVucHJpdmlsZWdlZAorKwkvLyBwb3J0IGJ5IGRlZmF1bHQuCisrCisrCS8vIHF1ZXJ5LXNvdXJjZSBhZGRyZXNzICogcG9ydCA1MzsKKysKKysJLy8gSWYgeW91ciBJU1AgcHJvdmlkZWQgb25lIG9yIG1vcmUgSVAgYWRkcmVzc2VzIGZvciBzdGFibGUgCisrCS8vIG5hbWVzZXJ2ZXJzLCB5b3UgcHJvYmFibHkgd2FudCB0byB1c2UgdGhlbSBhcyBmb3J3YXJkZXJzLiAgCisrCS8vIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGJsb2NrLCBhbmQgaW5zZXJ0IHRoZSBhZGRyZXNzZXMgcmVwbGFjaW5nIAorKwkvLyB0aGUgYWxsLTAncyBwbGFjZWhvbGRlci4KKysKKysJLy8gZm9yd2FyZGVycyB7CisrCS8vIAkwLjAuMC4wOworKwkvLyB9OworKworKwlhdXRoLW54ZG9tYWluIG5vOyAgICAjIGNvbmZvcm0gdG8gUkZDMTAzNQorKworK307CisrCitkaWZmIC11ck4gYmluZC05LjMuMS5vcmlnL2NvbmYvem9uZXMucmZjMTkxOCBiaW5kLTkuMy4xL2NvbmYvem9uZXMucmZjMTkxOAorLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL3pvbmVzLnJmYzE5MTgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW5kLTkuMy4xL2NvbmYvem9uZXMucmZjMTkxOAkyMDA1LTA3LTEwIDIyOjE0OjEwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwyMCBAQAorK3pvbmUgIjEwLmluLWFkZHIuYXJwYSIgICAgICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworKyAKKyt6b25lICIxNi4xNzIuaW4tYWRkci5hcnBhIiAgeyB0eXBlIG1hc3RlcjsgZmlsZSAiL2V0Yy9iaW5kL2RiLmVtcHR5IjsgfTsKKyt6b25lICIxNy4xNzIuaW4tYWRkci5hcnBhIiAgeyB0eXBlIG1hc3RlcjsgZmlsZSAiL2V0Yy9iaW5kL2RiLmVtcHR5IjsgfTsKKyt6b25lICIxOC4xNzIuaW4tYWRkci5hcnBhIiAgeyB0eXBlIG1hc3RlcjsgZmlsZSAiL2V0Yy9iaW5kL2RiLmVtcHR5IjsgfTsKKyt6b25lICIxOS4xNzIuaW4tYWRkci5hcnBhIiAgeyB0eXBlIG1hc3RlcjsgZmlsZSAiL2V0Yy9iaW5kL2RiLmVtcHR5IjsgfTsKKyt6b25lICIyMC4xNzIuaW4tYWRkci5hcnBhIiAgeyB0eXBlIG1hc3RlcjsgZmlsZSAiL2V0Yy9iaW5kL2RiLmVtcHR5IjsgfTsKKyt6b25lICIyMS4xNzIuaW4tYWRkci5hcnBhIiAgeyB0eXBlIG1hc3RlcjsgZmlsZSAiL2V0Yy9iaW5kL2RiLmVtcHR5IjsgfTsKKyt6b25lICIyMi4xNzIuaW4tYWRkci5hcnBhIiAgeyB0eXBlIG1hc3RlcjsgZmlsZSAiL2V0Yy9iaW5kL2RiLmVtcHR5IjsgfTsKKyt6b25lICIyMy4xNzIuaW4tYWRkci5hcnBhIiAgeyB0eXBlIG1hc3RlcjsgZmlsZSAiL2V0Yy9iaW5kL2RiLmVtcHR5IjsgfTsKKyt6b25lICIyNC4xNzIuaW4tYWRkci5hcnBhIiAgeyB0eXBlIG1hc3RlcjsgZmlsZSAiL2V0Yy9iaW5kL2RiLmVtcHR5IjsgfTsKKyt6b25lICIyNS4xNzIuaW4tYWRkci5hcnBhIiAgeyB0eXBlIG1hc3RlcjsgZmlsZSAiL2V0Yy9iaW5kL2RiLmVtcHR5IjsgfTsKKyt6b25lICIyNi4xNzIuaW4tYWRkci5hcnBhIiAgeyB0eXBlIG1hc3RlcjsgZmlsZSAiL2V0Yy9iaW5kL2RiLmVtcHR5IjsgfTsKKyt6b25lICIyNy4xNzIuaW4tYWRkci5hcnBhIiAgeyB0eXBlIG1hc3RlcjsgZmlsZSAiL2V0Yy9iaW5kL2RiLmVtcHR5IjsgfTsKKyt6b25lICIyOC4xNzIuaW4tYWRkci5hcnBhIiAgeyB0eXBlIG1hc3RlcjsgZmlsZSAiL2V0Yy9iaW5kL2RiLmVtcHR5IjsgfTsKKyt6b25lICIyOS4xNzIuaW4tYWRkci5hcnBhIiAgeyB0eXBlIG1hc3RlcjsgZmlsZSAiL2V0Yy9iaW5kL2RiLmVtcHR5IjsgfTsKKyt6b25lICIzMC4xNzIuaW4tYWRkci5hcnBhIiAgeyB0eXBlIG1hc3RlcjsgZmlsZSAiL2V0Yy9iaW5kL2RiLmVtcHR5IjsgfTsKKyt6b25lICIzMS4xNzIuaW4tYWRkci5hcnBhIiAgeyB0eXBlIG1hc3RlcjsgZmlsZSAiL2V0Yy9iaW5kL2RiLmVtcHR5IjsgfTsKKysKKyt6b25lICIxNjguMTkyLmluLWFkZHIuYXJwYSIgeyB0eXBlIG1hc3RlcjsgZmlsZSAiL2V0Yy9iaW5kL2RiLmVtcHR5IjsgfTsKK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvaW5pdC5kIGJpbmQtOS4zLjEvaW5pdC5kCistLS0gYmluZC05LjMuMS5vcmlnL2luaXQuZAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvaW5pdC5kCTIwMDUtMDctMTAgMjM6MDk6NTguMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDcwIEBACisrIyEvYmluL3NoCisrCisrUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorKworKyMgZm9yIGEgY2hyb290ZWQgc2VydmVyOiAiLXUgYmluZCAtdCAvdmFyL2xpYi9uYW1lZCIKKysjIERvbid0IG1vZGlmeSB0aGlzIGxpbmUsIGNoYW5nZSBvciBjcmVhdGUgL2V0Yy9kZWZhdWx0L2JpbmQ5LgorK09QVElPTlM9IiIKKysKKyt0ZXN0IC1mIC9ldGMvZGVmYXVsdC9iaW5kOSAmJiAuIC9ldGMvZGVmYXVsdC9iaW5kOQorKworK3Rlc3QgLXggL3Vzci9zYmluL3JuZGMgfHwgZXhpdCAwCisrCisrY2FzZSAiJDEiIGluCisrICAgIHN0YXJ0KQorKwllY2hvIC1uICJTdGFydGluZyBkb21haW4gbmFtZSBzZXJ2aWNlOiBuYW1lZCIKKysKKysJbW9kcHJvYmUgY2FwYWJpbGl0eSA+L2Rldi9udWxsIDI+JjEgfHwgdHJ1ZQorKwlpZiBbICEgLWYgL2V0Yy9iaW5kL3JuZGMua2V5IF07IHRoZW4KKysJICAgIC91c3Ivc2Jpbi9ybmRjLWNvbmZnZW4gLWEgLWIgNTEyIC1yIC9kZXYvdXJhbmRvbQorKwkgICAgY2htb2QgMDY0MCAvZXRjL2JpbmQvcm5kYy5rZXkKKysJZmkKKysJaWYgWyAtZiAvdmFyL3J1bi9uYW1lZC9uYW1lZC5waWQgXTsgdGhlbgorKwkgICAgcHMgYGNhdCAvdmFyL3J1bi9uYW1lZC9uYW1lZC5waWRgID4gL2Rldi9udWxsICYmIGV4aXQgMQorKwlmaQorKworKwkjIGRpcnMgdW5kZXIgL3Zhci9ydW4gY2FuIGdvIGF3YXkgb24gcmVib290cy4KKysJbWtkaXIgLXAgL3Zhci9ydW4vbmFtZWQKKysJbWtkaXIgLXAgL3Zhci9jYWNoZS9iaW5kCisrCWNobW9kIDc3NSAvdmFyL3J1bi9uYW1lZAorKwljaG93biByb290OmJpbmQgL3Zhci9ydW4vbmFtZWQgPi9kZXYvbnVsbCAyPiYxIHx8IHRydWUKKysKKysJaWYgWyAhIC14IC91c3Ivc2Jpbi9uYW1lZCBdOyB0aGVuCisrCSAgICBlY2hvICJuYW1lZCBiaW5hcnkgbWlzc2luZyAtIG5vdCBzdGFydGluZyIKKysJICAgIGV4aXQgMQorKwlmaQorKwlpZiBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1leGVjIC91c3Ivc2Jpbi9uYW1lZCBcCisrCQktLXBpZGZpbGUgL3Zhci9ydW4vbmFtZWQvbmFtZWQucGlkIC0tICRPUFRJT05TOyB0aGVuCisrCSAgICBpZiBbIC14IC9zYmluL3Jlc29sdmNvbmYgXSA7IHRoZW4KKysJCWVjaG8gIm5hbWVzZXJ2ZXIgMTI3LjAuMC4xIiB8IC9zYmluL3Jlc29sdmNvbmYgLWEgbG8KKysJICAgIGZpCisrCWZpCisrCWVjaG8gIi4iCQorKyAgICA7OworKworKyAgICBzdG9wKQorKwllY2hvIC1uICJTdG9wcGluZyBkb21haW4gbmFtZSBzZXJ2aWNlOiBuYW1lZCIKKysJaWYgWyAteCAvc2Jpbi9yZXNvbHZjb25mIF07IHRoZW4KKysJICAgIC9zYmluL3Jlc29sdmNvbmYgLWQgbG8KKysJZmkKKysJL3Vzci9zYmluL3JuZGMgc3RvcCA+L2Rldi9udWxsIDI+JjEKKysJZWNobyAiLiIJCisrICAgIDs7CisrCisrICAgIHJlbG9hZCkKKysJL3Vzci9zYmluL3JuZGMgcmVsb2FkCisrICAgIDs7CisrCisrICAgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorKwkkMCBzdG9wCisrCXNsZWVwIDIKKysJJDAgc3RhcnQKKysgICAgOzsKKysgICAgCisrICAgICopCisrCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9iaW5kIHtzdGFydHxzdG9wfHJlbG9hZHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iID4mMgorKwlleGl0IDEKKysgICAgOzsKKytlc2FjCisrCisrZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2RvbnQtdGVzdC1vbi1ob3N0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9kb250LXRlc3Qtb24taG9zdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTg5ZDZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9kb250LXRlc3Qtb24taG9zdC5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieSBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBiaW5kLTkuOS41L2Jpbi9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJpbmQtOS45LjUub3JpZy9iaW4vTWFrZWZpbGUuaW4KKysrKyBiaW5kLTkuOS41L2Jpbi9NYWtlZmlsZS5pbgorQEAgLTE5LDcgKzE5LDcgQEAgc3JjZGlyID0JQHNyY2RpckAKKyBWUEFUSCA9CQlAc3JjZGlyQAorIHRvcF9zcmNkaXIgPQlAdG9wX3NyY2RpckAKKyAKKy1TVUJESVJTID0JbmFtZWQgcm5kYyBkaWcgZGVsdiBkbnNzZWMgdG9vbHMgdGVzdHMgbnN1cGRhdGUgXAorK1NVQkRJUlMgPQluYW1lZCBybmRjIGRpZyBkZWx2IGRuc3NlYyB0b29scyBuc3VwZGF0ZSBcCisgCQljaGVjayBjb25mZ2VuIEBQWVRIT05fVE9PTFNAIEBQS0NTMTFfVE9PTFNACisgVEFSR0VUUyA9CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2dlbmVyYXRlLXJuZGMta2V5LnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9nZW5lcmF0ZS1ybmRjLWtleS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjIwMTI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9nZW5lcmF0ZS1ybmRjLWtleS5zaApAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9zaAorCitpZiBbICEgLXMgL2V0Yy9iaW5kL3JuZGMua2V5IF07IHRoZW4KKyAgICBlY2hvIC1uICJHZW5lcmF0aW5nIC9ldGMvYmluZC9ybmRjLmtleToiCisgICAgL3Vzci9zYmluL3JuZGMtY29uZmdlbiAtYSAtYiA1MTIgLXIgL2Rldi91cmFuZG9tCisgICAgY2htb2QgMDY0MCAvZXRjL2JpbmQvcm5kYy5rZXkKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2luaXQuZC1hZGQtc3VwcG9ydC1mb3ItcmVhZC1vbmx5LXJvb3Rmcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvaW5pdC5kLWFkZC1zdXBwb3J0LWZvci1yZWFkLW9ubHktcm9vdGZzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZGI5NWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2luaXQuZC1hZGQtc3VwcG9ydC1mb3ItcmVhZC1vbmx5LXJvb3Rmcy5wYXRjaApAQCAtMCwwICsxLDY1IEBACitTdWJqZWN0OiBpbml0LmQ6IGFkZCBzdXBwb3J0IGZvciByZWFkLW9ubHkgcm9vdGZzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGluaXQuZCB8ICAgNDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0MCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9pbml0LmQgYi9pbml0LmQKK2luZGV4IDAxMTFlZDQuLjI0Njc3YzggMTAwNjQ0CistLS0gYS9pbml0LmQKKysrKyBiL2luaXQuZAorQEAgLTYsOCArNiw0OCBAQCBQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisgIyBEb24ndCBtb2RpZnkgdGhpcyBsaW5lLCBjaGFuZ2Ugb3IgY3JlYXRlIC9ldGMvZGVmYXVsdC9iaW5kOS4KKyBPUFRJT05TPSIiCisgCisrdGVzdCAtZiAvZXRjL2RlZmF1bHQvcmNTICYmIC4gL2V0Yy9kZWZhdWx0L3JjUworIHRlc3QgLWYgL2V0Yy9kZWZhdWx0L2JpbmQ5ICYmIC4gL2V0Yy9kZWZhdWx0L2JpbmQ5CisgCisrIyBUaGlzIGZ1bmN0aW9uIGlzIGhlcmUgYmVjYXVzZSBpdCdzIHBvc3NpYmxlIHRoYXQgL3ZhciBhbmQgLyBhcmUgb24gZGlmZmVyZW50IHBhcnRpdGlvbnMuCisraXNfb25fcmVhZF9vbmx5X3BhcnRpdGlvbiAoKSB7CisrICAgIERJUkVDVE9SWT0kMQorKyAgICBkaXI9YHJlYWRsaW5rIC1mICRESVJFQ1RPUllgCisrICAgIHdoaWxlIHRydWU7IGRvCisrCWlmIFsgISAtZCAiJGRpciIgXTsgdGhlbgorKwkgICAgZWNobyAiRVJST1I6ICRkaXIgaXMgbm90IGEgZGlyZWN0b3J5IgorKwkgICAgZXhpdCAxCisrCWVsc2UKKysJICAgIGZvciBmbGFnIGluIGBhd2sgLXYgZGlyPSRkaXIgJ3sgaWYgKCQyID09IGRpcikgeyBwcmludCAiRk9VTkQiOyBzcGxpdCgkNCxGTEFHUywiLCIpIH0gfTsgXAorKwkJRU5EIHsgZm9yIChmIGluIEZMQUdTKSBwcmludCBGTEFHU1tmXSB9JyA8IC9wcm9jL21vdW50c2A7IGRvCisrCQlbICIkZmxhZyIgPSAiRk9VTkQiIF0gJiYgcGFydGl0aW9uPSJyZWFkLXdyaXRlIgorKwkJWyAiJGZsYWciID0gInJvIiBdICYmIHsgcGFydGl0aW9uPSJyZWFkLW9ubHkiOyBicmVhazsgfQorKwkgICAgZG9uZQorKwkgICAgaWYgWyAiJGRpciIgPSAiLyIgLW8gLW4gIiRwYXJ0aXRpb24iIF07IHRoZW4KKysJCWJyZWFrCisrCSAgICBlbHNlCisrCQlkaXI9YGRpcm5hbWUgJGRpcmAKKysJICAgIGZpCisrCWZpCisrICAgIGRvbmUKKysgICAgWyAiJHBhcnRpdGlvbiIgPSAicmVhZC1vbmx5IiBdICYmIGVjaG8gInllcyIgfHwgZWNobyAibm8iCisrfQorKworK2JpbmRfbW91bnQgKCkgeworKyAgICBvbGRkaXI9JDEKKysgICAgbmV3ZGlyPSQyCisrICAgIG1rZGlyIC1wICRvbGRkaXIKKysgICAgY3AgLWEgJG5ld2Rpci8qICRvbGRkaXIKKysgICAgbW91bnQgLS1iaW5kICRvbGRkaXIgJG5ld2RpcgorK30KKysKKysjIERlYWwgd2l0aCByZWFkLW9ubHkgcm9vdGZzCisraWYgWyAiJFJPT1RGU19SRUFEX09OTFkiID0gInllcyIgXTsgdGhlbgorKyAgICBbICIkVkVSQk9TRSIgIT0gIm5vIiBdICYmIGVjaG8gIldBUk46IHN0YXJ0IGJpbmQgc2VydmljZSBpbiByZWFkLW9ubHkgcm9vdGZzIgorKyAgICBbIGBpc19vbl9yZWFkX29ubHlfcGFydGl0aW9uIC9ldGMvYmluZGAgPSAieWVzIiBdICYmIGJpbmRfbW91bnQgL3Zhci92b2xhdGlsZS9iaW5kL2V0YyAvZXRjL2JpbmQKKysgICAgWyBgaXNfb25fcmVhZF9vbmx5X3BhcnRpdGlvbiAvdmFyL25hbWVkYCA9ICJ5ZXMiIF0gJiYgYmluZF9tb3VudCAvdmFyL3ZvbGF0aWxlL2JpbmQvbmFtZWQgL3Zhci9uYW1lZAorK2ZpCisrCisgdGVzdCAteCAvdXNyL3NiaW4vcm5kYyB8fCBleGl0IDAKKyAKKyBjYXNlICIkMSIgaW4KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL21ha2UtZXRjLWluaXRkLWJpbmQtc3RvcC13b3JrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9tYWtlLWV0Yy1pbml0ZC1iaW5kLXN0b3Atd29yay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDZmM2UzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9tYWtlLWV0Yy1pbml0ZC1iaW5kLXN0b3Atd29yay5wYXRjaApAQCAtMCwwICsxLDQyIEBACitiaW5kOiBtYWtlICIvZXRjL2luaXQuZC9iaW5kIHN0b3AiIHdvcmsKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitBZGQgc29tZSBjb25maWd1cmF0aW9ucywgbWFrZSBybmRjIGNvbW1hbmQgYmUgYWJsZSB0byBjb250cm9scwordGhlIG5hbWVkIGRhZW1vbi4KKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZi9uYW1lZC5jb25mIHwgICAgNSArKysrKworIGNvbmYvcm5kYy5jb25mICB8ICAgIDUgKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbmYvcm5kYy5jb25mCisKK2RpZmYgLS1naXQgYS9jb25mL25hbWVkLmNvbmYgYi9jb25mL25hbWVkLmNvbmYKK2luZGV4IDk1ODI5Y2YuLmM4ODk5ZTcgMTAwNjQ0CistLS0gYS9jb25mL25hbWVkLmNvbmYKKysrKyBiL2NvbmYvbmFtZWQuY29uZgorQEAgLTQ3LDMgKzQ3LDggQEAgem9uZSAiMjU1LmluLWFkZHIuYXJwYSIgeworIC8vIHJvb3QtZGVsZWdhdGlvbi1vbmx5IGV4Y2x1ZGUgeyAiREUiOyAiTVVTRVVNIjsgfTsKKyAKKyBpbmNsdWRlICIvZXRjL2JpbmQvbmFtZWQuY29uZi5sb2NhbCI7CisraW5jbHVkZSAiL2V0Yy9iaW5kL3JuZGMua2V5IiA7CisrY29udHJvbHMgeworKwlpbmV0IDEyNy4wLjAuMSBhbGxvdyB7IGxvY2FsaG9zdDsgfQorKwlrZXlzIHsgcm5kYy1rZXk7IH07CisrfTsKK2RpZmYgLS1naXQgYS9jb25mL3JuZGMuY29uZiBiL2NvbmYvcm5kYy5jb25mCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYTBiNDgxZAorLS0tIC9kZXYvbnVsbAorKysrIGIvY29uZi9ybmRjLmNvbmYKK0BAIC0wLDAgKzEsNSBAQAorK2luY2x1ZGUgIi9ldGMvYmluZC9ybmRjLmtleSI7Cisrb3B0aW9ucyB7CisrCWRlZmF1bHQtc2VydmVyICBsb2NhbGhvc3Q7CisrCWRlZmF1bHQta2V5ICAgICBybmRjLWtleTsKKyt9OworCistLSAKKzEuNy41LjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9taXBzMS1ub3Qtc3VwcG9ydC1vcGNvZGUuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvbWlwczEtbm90LXN1cHBvcnQtb3Bjb2RlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkzMDc5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvbWlwczEtbm90LXN1cHBvcnQtb3Bjb2RlLmRpZmYKQEAgLTAsMCArMSwxMDQgQEAKK2JpbmQ6IHBvcnQgYSBwYXRjaCB0byBmaXggYSBidWlsZCBmYWlsdXJlCisKK21pcHMxIGRvZXMgbm90IHN1cHBvcnQgbGwgYW5kIHNjIGluc3RydWN0aW9ucywgYW5kIGxlYWQgdG8gYmVsb3cgZXJyb3IsIG5vdword2UgcG9ydCBhIHBhdGNoIGZyb20gZGViaWFuIHRvIGZpeCBpdAorW2h0dHA6Ly9zZWN1cml0eS5kZWJpYW4ub3JnL2RlYmlhbi1zZWN1cml0eS9wb29sL3VwZGF0ZXMvbWFpbi9iL2JpbmQ5L2JpbmQ5XzkuOC40LmRmc2cuUDEtNitubXUyK2RlYjd1MS5kaWZmLmd6XQorCit8IHtzdGFuZGFyZCBpbnB1dH06IEFzc2VtYmxlciBtZXNzYWdlczoKK3wge3N0YW5kYXJkIGlucHV0fTo0NzogRXJyb3I6IE9wY29kZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcHJvY2Vzc29yOiBtaXBzMSAobWlwczEpIGBsbCAkMywwKCQ2KScKK3wge3N0YW5kYXJkIGlucHV0fTo1MDogRXJyb3I6IE9wY29kZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcHJvY2Vzc29yOiBtaXBzMSAobWlwczEpIGBzYyAkMywwKCQ2KScKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKworLS0tIGJpbmQ5LTkuOC40LmRmc2cuUDEub3JpZy9saWIvaXNjL21pcHMvaW5jbHVkZS9pc2MvYXRvbWljLmgKKysrKyBiaW5kOS05LjguNC5kZnNnLlAxL2xpYi9pc2MvbWlwcy9pbmNsdWRlL2lzYy9hdG9taWMuaAorQEAgLTMxLDE4ICszMSwyMCBAQAorIGlzY19hdG9taWNfeGFkZChpc2NfaW50MzJfdCAqcCwgaW50IHZhbCkgeworIAlpc2NfaW50MzJfdCBvcmlnOworIAorLQkvKiBhZGQgaXMgYSBjaGVhdCwgc2luY2UgTUlQUyBoYXMgbm8gbW92IGluc3RydWN0aW9uICovCistCV9fYXNtX18gdm9sYXRpbGUgKAorLQkgICAgIjE6IgorLQkgICAgImxsICQzLCAlMVxuIgorLQkgICAgImFkZCAlMCwgJDAsICQzXG4iCistCSAgICAiYWRkICQzLCAkMywgJTJcbiIKKy0JICAgICJzYyAkMywgJTFcbiIKKy0JICAgICJiZXEgJDMsIDAsIDFiIgorLQkgICAgOiAiPSZyIihvcmlnKQorLQkgICAgOiAibSIoKnApLCAiciIodmFsKQorLQkgICAgOiAibWVtb3J5IiwgIiQzIgorLQkJKTsKKysJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorKwkiCS5zZXQJcHVzaAkJXG4iCisrCSIJLnNldAltaXBzMgkJXG4iCisrCSIJLnNldAlub3Jlb3JkZXIJXG4iCisrCSIJLnNldAlub2F0CQlcbiIKKysJIjE6CWxsCSQxLCAlMQkJXG4iCisrCSIJYWRkdQklMCwgJDEsICUyCVxuIgorKwkiCXNjCSUwLCAlMQkJXG4iCisrCSIJYmVxegklMCwgMWIJCVxuIgorKwkiCW1vdmUJJTAsICQxCQlcbiIKKysJIgkuc2V0CXBvcAkJXG4iCisrCTogIj0mciIgKG9yaWcpLCAiK1IiICgqcCkKKysJOiAiciIgKHZhbCkKKysJOiAibWVtb3J5Iik7CisgCisgCXJldHVybiAob3JpZyk7CisgfQorQEAgLTUyLDE2ICs1NCw3IEBACisgICovCisgc3RhdGljIGlubGluZSB2b2lkCisgaXNjX2F0b21pY19zdG9yZShpc2NfaW50MzJfdCAqcCwgaXNjX2ludDMyX3QgdmFsKSB7CistCV9fYXNtX18gdm9sYXRpbGUgKAorLQkgICAgIjE6IgorLQkgICAgImxsICQzLCAlMFxuIgorLQkgICAgImFkZCAkMywgJDAsICUxXG4iCistCSAgICAic2MgJDMsICUwXG4iCistCSAgICAiYmVxICQzLCAwLCAxYiIKKy0JICAgIDoKKy0JICAgIDogIm0iKCpwKSwgInIiKHZhbCkKKy0JICAgIDogIm1lbW9yeSIsICIkMyIKKy0JCSk7CisrCSpwID0gdmFsOworIH0KKyAKKyAvKgorQEAgLTcyLDIwICs2NSwyMyBAQAorIHN0YXRpYyBpbmxpbmUgaXNjX2ludDMyX3QKKyBpc2NfYXRvbWljX2NtcHhjaGcoaXNjX2ludDMyX3QgKnAsIGludCBjbXB2YWwsIGludCB2YWwpIHsKKyAJaXNjX2ludDMyX3Qgb3JpZzsKKysJaXNjX2ludDMyX3QgdG1wOworIAorLQlfX2FzbV9fIHZvbGF0aWxlKAorLQkgICAgIjE6IgorLQkgICAgImxsICQzLCAlMVxuIgorLQkgICAgImFkZCAlMCwgJDAsICQzXG4iCistCSAgICAiYm5lICQzLCAlMiwgMmZcbiIKKy0JICAgICJhZGQgJDMsICQwLCAlM1xuIgorLQkgICAgInNjICQzLCAlMVxuIgorLQkgICAgImJlcSAkMywgMCwgMWJcbiIKKy0JICAgICIyOiIKKy0JICAgIDogIj0mciIob3JpZykKKy0JICAgIDogIm0iKCpwKSwgInIiKGNtcHZhbCksICJyIih2YWwpCistCSAgICA6ICJtZW1vcnkiLCAiJDMiCistCQkpOworKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisrCSIJLnNldAlwdXNoCQlcbiIKKysJIgkuc2V0CW1pcHMyCQlcbiIKKysJIgkuc2V0CW5vcmVvcmRlcglcbiIKKysJIgkuc2V0CW5vYXQJCVxuIgorKwkiMToJbGwJJDEsICUxCQlcbiIKKysJIglibmUJJDEsICUzLCAyZglcbiIKKysJIgltb3ZlCSUyLCAlNAkJXG4iCisrCSIJc2MJJTIsICUxCQlcbiIKKysJIgliZXF6CSUyLCAxYgkJXG4iCisrCSIyOgltb3ZlCSUwLCAkMQkJXG4iCisrCSIJLnNldAlwb3AJCVxuIgorKwk6ICI9JnIiKG9yaWcpLCAiK1IiICgqcCksICI9ciIgKHRtcCkKKysJOiAiciIoY21wdmFsKSwgInIiKHZhbCkKKysJOiAibWVtb3J5Iik7CisgCisgCXJldHVybiAob3JpZyk7CisgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9uYW1lZC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9uYW1lZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYTU2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL25hbWVkLnNlcnZpY2UKQEAgLTAsMCArMSwyMiBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1CZXJrZWxleSBJbnRlcm5ldCBOYW1lIERvbWFpbiAoRE5TKQorV2FudHM9bnNzLWxvb2t1cC50YXJnZXQKK0JlZm9yZT1uc3MtbG9va3VwLnRhcmdldAorQWZ0ZXI9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitUeXBlPWZvcmtpbmcKK0Vudmlyb25tZW50RmlsZT0tL2V0Yy9kZWZhdWx0L2JpbmQ5CitQSURGaWxlPS9ydW4vbmFtZWQvbmFtZWQucGlkCisKK0V4ZWNTdGFydFByZT1AU0JJTkRJUkAvZ2VuZXJhdGUtcm5kYy1rZXkuc2gKK0V4ZWNTdGFydD1AU0JJTkRJUkAvbmFtZWQgJE9QVElPTlMKKworRXhlY1JlbG9hZD1AQkFTRV9CSU5ESVJAL3NoIC1jICdAU0JJTkRJUkAvcm5kYyByZWxvYWQgPiAvZGV2L251bGwgMj4mMSB8fCBAQkFTRV9CSU5ESVJAL2tpbGwgLUhVUCAkTUFJTlBJRCcKKworRXhlY1N0b3A9QEJBU0VfQklORElSQC9zaCAtYyAnQFNCSU5ESVJAL3JuZGMgc3RvcCA+IC9kZXYvbnVsbCAyPiYxIHx8IEBCQVNFX0JJTkRJUkAva2lsbCAtVEVSTSAkTUFJTlBJRCcKKworUHJpdmF0ZVRtcD10cnVlCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmRfOS4xMC4yLVA0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZF85LjEwLjItUDQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhZTI4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmRfOS4xMC4yLVA0LmJiCkBAIC0wLDAgKzEsMTAyIEBACitTVU1NQVJZID0gIklTQyBJbnRlcm5ldCBEb21haW4gTmFtZSBTZXJ2ZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmlzYy5vcmcvc3cvYmluZC8iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworTElDRU5TRSA9ICJJU0MgJiBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZUklHSFQ7bWQ1PTBhOTVmNTJhMGFiNmM1ZjUyZGVkYzlhNDVlN2FiYjNmIgorCitERVBFTkRTID0gIm9wZW5zc2wgbGliY2FwIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5pc2Mub3JnL2lzYy9iaW5kOS8ke1BWfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFrZS1ldGMtaW5pdGQtYmluZC1zdG9wLXdvcmsucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWlwczEtbm90LXN1cHBvcnQtb3Bjb2RlLmRpZmYgXAorICAgICAgICAgICBmaWxlOi8vZG9udC10ZXN0LW9uLWhvc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2VuZXJhdGUtcm5kYy1rZXkuc2ggXAorICAgICAgICAgICBmaWxlOi8vbmFtZWQuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9iaW5kOSBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0LmQtYWRkLXN1cHBvcnQtZm9yLXJlYWQtb25seS1yb290ZnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYmluZC1jb25mZ2VuLWJ1aWxkLXVuaXguby1vbmNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYnVpbGQtdXNlLXBrZy1jb25maWctdG8tZmluZC1saWJ4bWwyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2JpbmQtZW5zdXJlLXNlYXJjaGluZy1mb3ItanNvbi1oZWFkZXJzLXNlYXJjaGVzLXN5c3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1nZW4uYy1leHRlbmQtRElSTkFNRVNJWkUtZnJvbS0yNTYtdG8tNTEyLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOGIxZjUwNjQ4Mzc3NTZjOTM4ZWFkYzE1MzdkZWM1YzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzAwYjIxZWMxZGVmMjEyOTU3ZjI4ZWZlOWQxMGFhYzUyZDZlYzUxNWU4NGZiZjJjNDIxNDNmNWQ3MTQyOWNiOCIKKworRU5BQkxFX0lQVjYgPSAiLS1lbmFibGUtaXB2Nj0ke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAneWVzJywgJ25vJywgZCl9IgorRVhUUkFfT0VDT05GID0gIiAke0VOQUJMRV9JUFY2fSAtLXdpdGgtcmFuZG9tZGV2PS9kZXYvcmFuZG9tIC0tZGlzYWJsZS10aHJlYWRzIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRldnBvbGwgLS1kaXNhYmxlLWVwb2xsIC0td2l0aC1nb3N0PW5vIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWdzc2FwaT1ubyAtLXdpdGgtZWNkc2E9eWVzIFwKKyAgICAgICAgICAgICAgICAgLS1zeXNjb25mZGlyPSR7c3lzY29uZmRpcn0vYmluZCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1vcGVuc3NsPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKyAgICAgICAgICAgICAgICIKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1yYy5kIHN5c3RlbWQgdXNlcmFkZCBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA/PSAiIgorUEFDS0FHRUNPTkZJR1todHRwc3RhdHNdID0gIi0td2l0aC1saWJ4bWwyLC0td2l0aG91dC1saWJ4bWwyLGxpYnhtbDIiCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIC0taG9tZSAvdmFyL2NhY2hlL2JpbmQgLS1uby1jcmVhdGUtaG9tZSBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tdXNlci1ncm91cCBiaW5kIgorCitJTklUU0NSSVBUX05BTUUgPSAiYmluZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAibmFtZWQuc2VydmljZSIKKworUEFSQUxMRUxfTUFLRSA9ICIiCisKK1JERVBFTkRTXyR7UE59ID0gInB5dGhvbi1jb3JlIgorUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKKworUEFDS0FHRV9CRUZPUkVfUE4gKz0gIiR7UE59LXV0aWxzIgorRklMRVNfJHtQTn0tdXRpbHMgPSAiJHtiaW5kaXJ9L2hvc3QgJHtiaW5kaXJ9L2RpZyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2lzYy1jb25maWcuaCIKK0ZJTEVTXyR7UE59ICs9ICIke3NiaW5kaXJ9L2dlbmVyYXRlLXJuZGMta2V5LnNoIgorCitkb19pbnN0YWxsX3ByZXBlbmQoKSB7CisJIyBjbGVhbiBob3N0IHBhdGggaW4gaXNjLWNvbmZpZy5zaCBiZWZvcmUgdGhlIGhhcmRsaW5rIGNyZWF0ZWQKKwkjIGJ5ICJtYWtlIGluc3RhbGwiOgorCSMgICBiaW5kOS1jb25maWcgLT4gaXNjLWNvbmZpZy5zaAorCXNlZCAtaSAtZSAicywke1NUQUdJTkdfTElCRElSfSwke2xpYmRpcn0sIiAke0J9L2lzYy1jb25maWcuc2gKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gIiR7RH0ke2JpbmRpcn0vbnNsb29rdXAiCisJcm0gIiR7RH0ke21hbmRpcn0vbWFuMS9uc2xvb2t1cC4xIgorCXJtZGlyICIke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4iCisJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgIiR7RH0ke2xvY2Fsc3RhdGVkaXJ9IgorCWluc3RhbGwgLWQgIiR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2JpbmQiCisJaW5zdGFsbCAtZCAiJHtEfSR7c3lzY29uZmRpcn0vYmluZCIKKwlpbnN0YWxsIC1kICIke0R9JHtzeXNjb25mZGlyfS9pbml0LmQiCisJaW5zdGFsbCAtbSA2NDQgJHtTfS9jb25mLyogIiR7RH0ke3N5c2NvbmZkaXJ9L2JpbmQvIgorCWluc3RhbGwgLW0gNzU1ICIke1N9L2luaXQuZCIgIiR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9iaW5kIgorCXNlZCAtaSAtZSAnMXMsIyEuKnB5dGhvbiwjISAvdXNyL2Jpbi9lbnYgcHl0aG9uLCcgJHtEfSR7c2JpbmRpcn0vZG5zc2VjLWNvdmVyYWdlICR7RH0ke3NiaW5kaXJ9L2Ruc3NlYy1jaGVja2RzCisKKwkjIEluc3RhbGwgc3lzdGVtZCByZWxhdGVkIGZpbGVzCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9jYWNoZS9iaW5kCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLW0gNzU1ICR7V09SS0RJUn0vZ2VuZXJhdGUtcm5kYy1rZXkuc2ggJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbmFtZWQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAQkFTRV9CSU5ESVJALCR7YmFzZV9iaW5kaXJ9LGcnIFwKKwkgICAgICAgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgXAorCSAgICAgICAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9uYW1lZC5zZXJ2aWNlCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9iaW5kOSAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0Cit9CisKK0NPTkZGSUxFU18ke1BOfSA9ICIgXAorCSR7c3lzY29uZmRpcn0vYmluZC9uYW1lZC5jb25mIFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvbmFtZWQuY29uZi5sb2NhbCBcCisJJHtzeXNjb25mZGlyfS9iaW5kL25hbWVkLmNvbmYub3B0aW9ucyBcCisJJHtzeXNjb25mZGlyfS9iaW5kL2RiLjAgXAorCSR7c3lzY29uZmRpcn0vYmluZC9kYi4xMjcgXAorCSR7c3lzY29uZmRpcn0vYmluZC9kYi5lbXB0eSBcCisJJHtzeXNjb25mZGlyfS9iaW5kL2RiLmxvY2FsIFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvZGIucm9vdCBcCisJIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5YzQ0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1LmluYwpAQCAtMCwwICsxLDEwNSBAQAorU1VNTUFSWSA9ICJMaW51eCBCbHVldG9vdGggU3RhY2sgVXNlcmxhbmQgVjUiCitERVNDUklQVElPTiA9ICJMaW51eCBCbHVldG9vdGggc3RhY2sgVjUgdXNlcmxhbmQgY29tcG9uZW50cy4gIFRoZXNlIGluY2x1ZGUgYSBzeXN0ZW0gY29uZmlndXJhdGlvbnMsIGRhZW1vbnMsIHRvb2xzIGFuZCBzeXN0ZW0gbGlicmFyaWVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYmx1ZXoub3JnIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZmI1MDRiNjdjNTAzMzFmYzc4NzM0ZmVkOTBmYjBlMDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTI0O21kNT05YmM1NGI5M2NkN2UxN2JmMDNmNTI1MTNmMzlmOTI2ZSIKK0RFUEVORFMgPSAidWRldiBsaWJ1c2IgZGJ1cy1nbGliIGdsaWItMi4wIGxpYmNoZWNrIHJlYWRsaW5lIgorUFJPVklERVMgKz0gImJsdWV6LWhjaWR1bXAiCitSUFJPVklERVNfJHtQTn0gKz0gImJsdWV6LWhjaWR1bXAiCisKK1JDT05GTElDVFNfJHtQTn0gPSAiYmx1ZXo0IgorCitQQUNLQUdFQ09ORklHID8/PSAib2JleC1wcm9maWxlcyIKK1BBQ0tBR0VDT05GSUdbb2JleC1wcm9maWxlc10gPSAiLS1lbmFibGUtb2JleCwtLWRpc2FibGUtb2JleCxsaWJpY2FsIgorUEFDS0FHRUNPTkZJR1tleHBlcmltZW50YWxdID0gIi0tZW5hYmxlLWV4cGVyaW1lbnRhbCwtLWRpc2FibGUtZXhwZXJpbWVudGFsLCIKKworU1JDX1VSSSA9ICJcCisgICAgJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9ibHVldG9vdGgvYmx1ZXotJHtQVn0udGFyLnh6IFwKKyAgICBmaWxlOi8vYmx1ZXRvb3RoLmNvbmYgXAorIgorUyA9ICIke1dPUktESVJ9L2JsdWV6LSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGtnY29uZmlnIHN5c3RlbWQKKworRVhUUkFfT0VDT05GID0gIlwKKyAgLS1lbmFibGUtdG9vbHMgXAorICAtLWRpc2FibGUtY3VwcyBcCisgIC0tZW5hYmxlLXRlc3QgXAorICAtLWVuYWJsZS1kYXRhZmlsZXMgXAorICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnLS1lbmFibGUtc3lzdGVtZCcsICctLWRpc2FibGUtc3lzdGVtZCcsIGQpfSBcCisgIC0tZW5hYmxlLWxpYnJhcnkgXAorIgorCisjIGJsdWV6NSBidWlsZHMgYSBsYXJnZSBudW1iZXIgb2YgdXNlZnVsIHV0aWxpdGllcyBidXQgZG9lcyBub3QKKyMgaW5zdGFsbCB0aGVtLiAgU3BlY2lmeSB3aGljaCBvbmVzIHdlIHdhbnQgcHV0IGludG8gJHtQTn0tbm9pbnN0LXRvb2xzLgorTk9JTlNUX1RPT0xTX1JFQURMSU5FID8/PSAiIgorTk9JTlNUX1RPT0xTX0VYUEVSSU1FTlRBTCA/Pz0gIiIKK05PSU5TVF9UT09MUyA9ICIgXAorICAgICR7Tk9JTlNUX1RPT0xTX1JFQURMSU5FfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZXhwZXJpbWVudGFsJywgJyR7Tk9JTlNUX1RPT0xTX0VYUEVSSU1FTlRBTH0nLCAnJywgZCl9IFwKKyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9ibHVldG9vdGgvCisJaWYgWyAtZiAke1N9L3Byb2ZpbGVzL2F1ZGlvL2F1ZGlvLmNvbmYgXTsgdGhlbgorCSAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9wcm9maWxlcy9hdWRpby9hdWRpby5jb25mICR7RH0vJHtzeXNjb25mZGlyfS9ibHVldG9vdGgvCisJZmkKKwlpZiBbIC1mICR7U30vcHJvZmlsZXMvbmV0d29yay9uZXR3b3JrLmNvbmYgXTsgdGhlbgorCSAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9wcm9maWxlcy9uZXR3b3JrL25ldHdvcmsuY29uZiAke0R9LyR7c3lzY29uZmRpcn0vYmx1ZXRvb3RoLworCWZpCisJaWYgWyAtZiAke1N9L3Byb2ZpbGVzL2lucHV0L2lucHV0LmNvbmYgXTsgdGhlbgorCSAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9wcm9maWxlcy9pbnB1dC9pbnB1dC5jb25mICR7RH0vJHtzeXNjb25mZGlyfS9ibHVldG9vdGgvCisJZmkKKwkjIGF0X2NvbnNvbGUgZG9lc24ndCByZWFsbHkgd29yayB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIE9FLCBzbyBwdW5jaCBzb21lIG1vcmUgaG9sZXMgc28gcGVvcGxlIGNhbiBhY3R1YWxseSB1c2UgQlQKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ibHVldG9vdGguY29uZiAke0R9LyR7c3lzY29uZmRpcn0vZGJ1cy0xL3N5c3RlbS5kLworCisJIyBJbnN0YWxsIGRlc2lyZWQgdG9vbHMgdGhhdCB1cHN0cmVhbSBsZWF2ZXMgaW4gYnVpbGQgYXJlYQorICAgICAgICBmb3IgZiBpbiAke05PSU5TVF9UT09MU30gOyBkbworCSAgICBpbnN0YWxsIC1tIDc1NSAke0J9LyRmICR7RH0vJHtiaW5kaXJ9CisJZG9uZQorfQorCitBTExPV19FTVBUWV9saWJhc291bmQtbW9kdWxlLWJsdWV6ID0gIjEiCitQQUNLQUdFUyA9KyAibGliYXNvdW5kLW1vZHVsZS1ibHVleiAke1BOfS10ZXN0dG9vbHMgJHtQTn0tb2JleCAke1BOfS1ub2luc3QtdG9vbHMiCisKK0ZJTEVTX2xpYmFzb3VuZC1tb2R1bGUtYmx1ZXogPSAiJHtsaWJkaXJ9L2Fsc2EtbGliL2xpYiouc28gJHtkYXRhZGlyfS9hbHNhIgorRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9ibHVldG9vdGgvcGx1Z2lucy8qLnNvICR7YmFzZV9saWJkaXJ9L3VkZXYvICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi8gJHtzeXN0ZW1kX3VuaXRkaXJ9LyAke2RhdGFkaXJ9L2RidXMtMSIKK0ZJTEVTXyR7UE59LWRldiArPSAiXAorICAke2xpYmRpcn0vYmx1ZXRvb3RoL3BsdWdpbnMvKi5sYSBcCisgICR7bGliZGlyfS9hbHNhLWxpYi8qLmxhIFwKKyIKKworRklMRVNfJHtQTn0tb2JleCA9ICIke2xpYmV4ZWNkaXJ9L2JsdWV0b290aC9vYmV4ZCBcCisgICAgICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9zeXN0ZW1kL3VzZXIvb2JleC5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc2VydmljZXMvb3JnLmJsdWV6Lm9iZXguc2VydmljZSBcCisgICAgICAgICAgICAgICAgICAgIgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LW9iZXggPSAib2JleC5zZXJ2aWNlIgorCitGSUxFU18ke1BOfS10ZXN0dG9vbHMgPSAiJHtsaWJkaXJ9L2JsdWV6L3Rlc3QvKiIKKworZGVmIGdldF9ub2luc3RfdG9vbHNfcGF0aHMgKGQsIGJiLCB0b29scyk6CisgICAgcyA9IGxpc3QoKQorICAgIGJpbmRpciA9IGQuZ2V0VmFyKCJiaW5kaXIiLCBUcnVlKQorICAgIGZvciBiZHAgaW4gdG9vbHMuc3BsaXQoKToKKyAgICAgICAgZiA9IG9zLnBhdGguYmFzZW5hbWUoYmRwKQorICAgICAgICBzLmFwcGVuZCgiJXMvJXMiICUgKGJpbmRpciwgZikpCisgICAgcmV0dXJuICJcbiIuam9pbihzKQorCitGSUxFU18ke1BOfS1ub2luc3QtdG9vbHMgPSAiJHtAZ2V0X25vaW5zdF90b29sc19wYXRocyhkLCBiYiwgZC5nZXRWYXIoJ05PSU5TVF9UT09MUycsIFRydWUpKX0iCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiXAorICAke2xpYmV4ZWNkaXJ9L2JsdWV0b290aC8uZGVidWcgXAorICAke2xpYmRpcn0vYmx1ZXRvb3RoL3BsdWdpbnMvLmRlYnVnIFwKKyAgJHtsaWJkaXJ9LyovLmRlYnVnIFwKKyAgKi91ZGV2Ly5kZWJ1ZyBcCisgICovKi91ZGV2Ly5kZWJ1ZyBcCisgICIKKworUkRFUEVORFNfJHtQTn0tdGVzdHRvb2xzICs9ICJweXRob24gcHl0aG9uLWRidXMgcHl0aG9uLXB5Z29iamVjdCIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImJsdWV0b290aC5zZXJ2aWNlIgorCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1L2JsdWV0b290aC5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUvYmx1ZXRvb3RoLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY4NDViYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1L2JsdWV0b290aC5jb25mCkBAIC0wLDAgKzEsMTcgQEAKKzwhLS0gVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgc3BlY2lmaWVzIHRoZSByZXF1aXJlZCBzZWN1cml0eSBwb2xpY2llcworICAgICBmb3IgQmx1ZXRvb3RoIGNvcmUgZGFlbW9uIHRvIHdvcmsuIC0tPgorCis8IURPQ1RZUEUgYnVzY29uZmlnIFBVQkxJQyAiLS8vZnJlZWRlc2t0b3AvL0RURCBELUJVUyBCdXMgQ29uZmlndXJhdGlvbiAxLjAvL0VOIgorICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvZGJ1cy8xLjAvYnVzY29uZmlnLmR0ZCI+Cis8YnVzY29uZmlnPgorCisgIDwhLS0gLi4vc3lzdGVtLmNvbmYgaGF2ZSBkZW5pZWQgZXZlcnl0aGluZywgc28gd2UganVzdCBwdW5jaCBzb21lIGhvbGVzIC0tPgorCisgIDxwb2xpY3kgY29udGV4dD0iZGVmYXVsdCI+CisgICAgPGFsbG93IG93bj0ib3JnLmJsdWV6Ii8+CisgICAgPGFsbG93IHNlbmRfZGVzdGluYXRpb249Im9yZy5ibHVleiIvPgorICAgIDxhbGxvdyBzZW5kX2ludGVyZmFjZT0ib3JnLmJsdWV6LkFnZW50MSIvPgorICAgIDxhbGxvdyBzZW5kX3R5cGU9Im1ldGhvZF9jYWxsIi8+CisgIDwvcG9saWN5PgorCis8L2J1c2NvbmZpZz4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1XzUuMzMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NV81LjMzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYzczOTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NV81LjMzLmJiCkBAIC0wLDAgKzEsNTIgQEAKK3JlcXVpcmUgYmx1ZXo1LmluYworU1JDX1VSSVttZDVzdW1dID0gIjc4NzgyZGMzM2Q5YThiNjM0NGM0Y2MxYWY3MGM4YTk4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE4MDE4MDdhMTM1MDY2NzhjYmZlYjE1YzZhNGI4OWVjYjU3MzllZmUxMDY3ZWI0NjRkYTY2NDFkNzMxNDM2ZDMiCisKKyMgbm9pbnN0IHByb2dyYW1zIGluIE1ha2VmaWxlLnRvb2xzIHRoYXQgYXJlIGNvbmRpdGlvbmFsIG9uIFJFQURMSU5FCisjIHN1cHBvcnQKK05PSU5TVF9UT09MU19SRUFETElORSA/PSAiIFwKKyAgICBhdHRyaWIvZ2F0dHRvb2wgXAorICAgIHRvb2xzL29iZXgtY2xpZW50LXRvb2wgXAorICAgIHRvb2xzL29iZXgtc2VydmVyLXRvb2wgXAorICAgIHRvb2xzL2JsdWV0b290aC1wbGF5ZXIgXAorICAgIHRvb2xzL29iZXhjdGwgXAorIgorCisjIG5vaW5zdCBwcm9ncmFtcyBpbiBNYWtlZmlsZS50b29scyB0aGF0IGFyZSBjb25kaXRpb25hbCBvbiBFWFBFUklNRU5UQUwKKyMgc3VwcG9ydAorTk9JTlNUX1RPT0xTX0VYUEVSSU1FTlRBTCA/PSAiIFwKKyAgICBlbXVsYXRvci9idHZpcnQgXAorICAgIGVtdWxhdG9yL2IxZWUgXAorICAgIGVtdWxhdG9yL2hmcCBcCisgICAgdG9vbHMvM2RzcCBcCisgICAgdG9vbHMvbWdtdC10ZXN0ZXIgXAorICAgIHRvb2xzL2dhcC10ZXN0ZXIgXAorICAgIHRvb2xzL2wyY2FwLXRlc3RlciBcCisgICAgdG9vbHMvc2NvLXRlc3RlciBcCisgICAgdG9vbHMvc21wLXRlc3RlciBcCisgICAgdG9vbHMvaGNpLXRlc3RlciBcCisgICAgdG9vbHMvcmZjb21tLXRlc3RlciBcCisgICAgdG9vbHMvYmRhZGRyIFwKKyAgICB0b29scy9hdmluZm8gXAorICAgIHRvb2xzL2F2dGVzdCBcCisgICAgdG9vbHMvc2NvdGVzdCBcCisgICAgdG9vbHMvYW1wdGVzdCBcCisgICAgdG9vbHMvaHdkYiBcCisgICAgdG9vbHMvaGNpZXZlbnRtYXNrIFwKKyAgICB0b29scy9oY2lzZWNmaWx0ZXIgXAorICAgIHRvb2xzL2J0bWdtdCBcCisgICAgdG9vbHMvYnRpbmZvIFwKKyAgICB0b29scy9idGF0dGFjaCBcCisgICAgdG9vbHMvYnRzbm9vcCBcCisgICAgdG9vbHMvYnRwcm94eSBcCisgICAgdG9vbHMvYnRpb3Rlc3QgXAorICAgIHRvb2xzL21jYXB0ZXN0IFwKKyAgICB0b29scy9jbHRlc3QgXAorICAgIHRvb2xzL29vYnRlc3QgXAorICAgIHRvb2xzL3NlcTJic2VxIFwKKyAgICB0b29scy9pYmVhY29uIFwKKyAgICB0b29scy9idGdhdHQtY2xpZW50IFwKKyAgICB0b29scy9idGdhdHQtc2VydmVyIFwKKyAgICB0b29scy9nYXR0LXNlcnZpY2UgXAorICAgIHByb2ZpbGVzL2lhcC9pYXBkIFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDRjMjhkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1jb25mLmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiQ29ubm1hbiBjb25maWcgdG8gc2V0dXAgd2lyZWQgaW50ZXJmYWNlIG9uIHFlbXUgbWFjaGluZXMiCitERVNDUklQVElPTiA9ICJUaGlzIGlzIHRoZSBDb25uTWFuIGNvbmZpZ3VyYXRpb24gdG8gc2V0IHVwIGEgV2lyZWQgXAorbmV0d29yayBpbnRlcmZhY2UgZm9yIGEgcWVtdSBtYWNoaW5lLiIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wO21kNT04MDFmODA5ODBkMTcxZGQ2NDI1NjEwODMzYTIyZGJlNiIKKworU1JDX1VSSV9hcHBlbmRfcWVtdWFsbCA9ICIgZmlsZTovL3dpcmVkLmNvbmZpZyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vd2lyZWQtc2V0dXAgXAorIgorUFIgPSAicjIiCisKK1MgPSAiJHtXT1JLRElSfSIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworRklMRVNfJHtQTn0gPSAiJHtsb2NhbHN0YXRlZGlyfS8qICR7bGliZGlyfS8qIgorCitkb19pbnN0YWxsKCkgeworICAgICNDb25maWd1cmUgV2lyZWQgbmV0d29yayBpbnRlcmZhY2UgaW4gY2FzZSBvZiBxZW11KiBtYWNoaW5lcworICAgIGlmIHRlc3QgLWUgJHtXT1JLRElSfS93aXJlZC5jb25maWcgJiYgdGVzdCAtZSAke1dPUktESVJ9L3dpcmVkLXNldHVwOyB0aGVuCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2Nvbm5tYW4KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vd2lyZWQuY29uZmlnICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9jb25ubWFuCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9jb25ubWFuCisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3dpcmVkLXNldHVwICR7RH0ke2xpYmRpcn0vY29ubm1hbgorICAgIGZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWNvbmYvcWVtdWFsbC93aXJlZC1zZXR1cCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi9xZW11YWxsL3dpcmVkLXNldHVwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0Njg5OWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWNvbmYvcWVtdWFsbC93aXJlZC1zZXR1cApAQCAtMCwwICsxLDE2IEBACisjIS9iaW4vc2gKKworQ09ORklHRj0vdmFyL2xpYi9jb25ubWFuL3dpcmVkLmNvbmZpZworCisjIEV4dHJhY3Qgd2lyZWQgbmV0d29yayBjb25maWcgZnJvbSAvcHJvYy9jbWRsaW5lCitORVRfQ09ORj1gY2F0IC9wcm9jL2NtZGxpbmUgfHNlZCAtbmUgJ3MvXi4qaXA9XChbXiBdKlwpOlwoW14gXSpcKTpcKFteIF0qXCk6XChbXiBdKlwpLiokL1wxXC9cNFwvXDMvcCdgCisKKyMgQ2hlY2sgaWYgZXRoMCBpcyBhbHJlYWR5IHNldCB2aWEga2VybmVsIGNtZGxpbmUKK2lmIFsgIngkTkVUX0NPTkYiID0gIngiIF07IHRoZW4KKwkjIFdpcmVkIGludGVyZmFjZSBpcyBub3QgY29uZmlndXJlZCB2aWEga2VybmVsIGNtZGxpbmUKKwkjIFJlbW92ZSBjb25ubWFuIGNvbmZpZyBmaWxlIHRlbXBsYXRlCisJcm0gLWYgJHtDT05GSUdGfQorZWxzZQorCSMgU2V0dXAgYSBjb25ubWFuIGNvbmZpZyBhY2NvcmRpbmdseQorCXNlZCAtaSAtZSAic3xeSVB2NCA9Lip8SVB2NCA9ICR7TkVUX0NPTkZ9fCIgJHtDT05GSUdGfQorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi9xZW11YWxsL3dpcmVkLmNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi9xZW11YWxsL3dpcmVkLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjk5OGNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1jb25mL3FlbXVhbGwvd2lyZWQuY29uZmlnCkBAIC0wLDAgKzEsOSBAQAorW2dsb2JhbF0KK05hbWUgPSBXaXJlZAorRGVzY3JpcHRpb24gPSBXaXJlZCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24KKworW3NlcnZpY2VfZXRoZXJuZXRdCitUeXBlID0gZXRoZXJuZXQKK0lQdjQgPQorTUFDID0gNTI6NTQ6MDA6MTI6MzQ6NTYKK05hbWVzZXJ2ZXJzID0gOC44LjguOApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS8wMDAxLVJlbW92ZWQtaWNvbi1mcm9tLWNvbm5tYW4tZ25vbWUtYWJvdXQtYXBwbGV0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS8wMDAxLVJlbW92ZWQtaWNvbi1mcm9tLWNvbm5tYW4tZ25vbWUtYWJvdXQtYXBwbGV0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NTc1MDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lLzAwMDEtUmVtb3ZlZC1pY29uLWZyb20tY29ubm1hbi1nbm9tZS1hYm91dC1hcHBsZXQucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA1OTA3YTIzYWQyZjQ5NzAyOTYwYTMzZjllMjAzOTU1MjY3M2VhYmM3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmVpIERpbnUgPGFuZHJlaS5hZHJpYW54LmRpbnVAaW50ZWwuY29tPgorRGF0ZTogTW9uLCAxNyBEZWMgMjAxMiAxNDowMToxOCArMDIwMAorU3ViamVjdDogW1BBVENIXSBSZW1vdmVkIGljb24gZnJvbSBjb25ubWFuLWdub21lICJhYm91dCIgYXBwbGV0CisKK1RoZSBjb25ubWFuLWdub21lICJhYm91dCIgYXBwbGV0IHNob3dlZCBhIHBpY3R1cmUgdGhhdAorY2FuIG5vdCBiZSBkaXNwbGF5ZWQuIFRoZXJlIGlzIG5vIGRlc2lnbmF0ZWQgcGljdHVyZQoraW4gY29ubm1hbi1nbm9tZSB0byBiZSB1c2VkIGluIHRoZSBhYm91dCBzZWN0aW9uLCBzbworaXQgd2FzIHJlbW92ZWQuCisKK1tPRS1Db3JlICMyNTA5XQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQW5kcmVpIERpbnUgPGFuZHJlaS5hZHJpYW54LmRpbnVAaW50ZWwuY29tPgorLS0tCisgYXBwbGV0L21haW4uYyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2FwcGxldC9tYWluLmMgYi9hcHBsZXQvbWFpbi5jCitpbmRleCBmMTJkMzcxLi5jN2IzYzdmIDEwMDY0NAorLS0tIGEvYXBwbGV0L21haW4uYworKysrIGIvYXBwbGV0L21haW4uYworQEAgLTIxMiw3ICsyMTIsNyBAQCBzdGF0aWMgdm9pZCBhYm91dF9jYWxsYmFjayhHdGtXaWRnZXQgKml0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKKyAJCQkiY29tbWVudHMiLCBfKCJBIGNvbm5lY3Rpb24gbWFuYWdlciBmb3IgdGhlIEdOT01FIGRlc2t0b3AiKSwKKyAJCQkiYXV0aG9ycyIsIGF1dGhvcnMsCisgCQkJInRyYW5zbGF0b3ItY3JlZGl0cyIsIF8oInRyYW5zbGF0b3ItY3JlZGl0cyIpLAorLQkJCSJsb2dvLWljb24tbmFtZSIsICJuZXR3b3JrLXdpcmVsZXNzIiwgTlVMTCk7CisrCQkJTlVMTCk7CisgfQorIAorIHN0YXRpYyB2b2lkIHNldHRpbmdzX2NhbGxiYWNrKEd0a1dpZGdldCAqaXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvY29ubm1hbi1nbm9tZS1maXgtZGJ1cy1pbnRlcmZhY2UtbmFtZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvY29ubm1hbi1nbm9tZS1maXgtZGJ1cy1pbnRlcmZhY2UtbmFtZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDA0OWZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9jb25ubWFuLWdub21lLWZpeC1kYnVzLWludGVyZmFjZS1uYW1lLnBhdGNoCkBAIC0wLDAgKzEsMTg3IEBACitjb25ubWFuLWdub21lOiBmaXggZGJ1cyBpbnRlcmZhY2UgbmFtZQorCitUaGlzIHBhdGNoIHJlc29sdmVzIGZvbGxvd2luZyBlcnJvcjoKKworImNvbm5tYW4tZGJ1cy54bWwiOiAiY29ubm1hbiIgaXMgbm90IGEgdmFsaWQgRC1CdXMgaW50ZXJmYWNlIG5hbWUKKworaHR0cHM6Ly81MDI1NTIuYnVncy5nZW50b28ub3JnL2F0dGFjaG1lbnQuY2dpP2lkPTM4MDY1MgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29tbW9uL2Nvbm5tYW4tY2xpZW50LmMgfCAyNCArKysrKysrKysrKystLS0tLS0tLS0tLS0KKyBjb21tb24vY29ubm1hbi1jbGllbnQuaCB8ICA0ICsrLS0KKyBjb21tb24vY29ubm1hbi1kYnVzLmMgICB8ICA2ICsrKy0tLQorIGNvbW1vbi9jb25ubWFuLWRidXMueG1sIHwgIDIgKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29tbW9uL2Nvbm5tYW4tY2xpZW50LmMgYi9jb21tb24vY29ubm1hbi1jbGllbnQuYworaW5kZXggYzU1ZTI1Yy4uOWQ4MThiMiAxMDA2NDQKKy0tLSBhL2NvbW1vbi9jb25ubWFuLWNsaWVudC5jCisrKysgYi9jb21tb24vY29ubm1hbi1jbGllbnQuYworQEAgLTI4OSw3ICsyODksNyBAQCBnYm9vbGVhbiBjb25ubWFuX2NsaWVudF9zZXRfaXB2NChDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpkZXZpY2UsCisgCisgCWdfdmFsdWVfaW5pdCgmdmFsdWUsIERCVVNfVFlQRV9HX0RJQ1RJT05BUlkpOworIAlnX3ZhbHVlX3NldF9ib3hlZCgmdmFsdWUsIGlwdjQpOworLQlyZXQgPSBjb25ubWFuX3NldF9wcm9wZXJ0eShwcm94eSwgIklQdjQuQ29uZmlndXJhdGlvbiIsICZ2YWx1ZSwgTlVMTCk7CisrCXJldCA9IG5ldF9jb25ubWFuX3NldF9wcm9wZXJ0eShwcm94eSwgIklQdjQuQ29uZmlndXJhdGlvbiIsICZ2YWx1ZSwgTlVMTCk7CisgCisgCWdfb2JqZWN0X3VucmVmKHByb3h5KTsKKyAKK0BAIC0zMTcsNyArMzE3LDcgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9zZXRfcG93ZXJlZChDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpkZXZpY2UsCisgCWdfdmFsdWVfc2V0X2Jvb2xlYW4oJnZhbHVlLCBwb3dlcmVkKTsKKyAKKyAJZXJyb3IgPSBOVUxMOworLQljb25ubWFuX3NldF9wcm9wZXJ0eShwcm94eSwgIlBvd2VyZWQiLCAmdmFsdWUsICZlcnJvcik7CisrCW5ldF9jb25ubWFuX3NldF9wcm9wZXJ0eShwcm94eSwgIlBvd2VyZWQiLCAmdmFsdWUsICZlcnJvcik7CisgCWlmKCBlcnJvciApCisgCQlmcHJpbnRmIChzdGRlcnIsICJlcnJvcjogJXNcbiIsIGVycm9yLT5tZXNzYWdlKTsKKyAKK0BAIC0zMjUsNyArMzI1LDcgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9zZXRfcG93ZXJlZChDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpkZXZpY2UsCisgfQorIAorIHZvaWQgY29ubm1hbl9jbGllbnRfc2NhbihDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpkZXZpY2UsCistCQkJCQkJY29ubm1hbl9zY2FuX3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEpCisrCQkJCQkJbmV0X2Nvbm5tYW5fc2Nhbl9yZXBseSBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlcl9kYXRhKQorIHsKKyAJQ29ubm1hbkNsaWVudFByaXZhdGUgKnByaXYgPSBDT05OTUFOX0NMSUVOVF9HRVRfUFJJVkFURShjbGllbnQpOworIAlEQnVzR1Byb3h5ICpwcm94eTsKK0BAIC0zMzksNyArMzM5LDcgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9zY2FuKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKyAJaWYgKHByb3h5ID09IE5VTEwpCisgCQlyZXR1cm47CisgCistCWNvbm5tYW5fc2Nhbl9hc3luYyhwcm94eSwgY2FsbGJhY2ssIHVzZXJfZGF0YSk7CisrCW5ldF9jb25ubWFuX3NjYW5fYXN5bmMocHJveHksIGNhbGxiYWNrLCB1c2VyX2RhdGEpOworIAorIAlnX29iamVjdF91bnJlZihwcm94eSk7CisgfQorQEAgLTM1Myw3ICszNTMsNyBAQCBnYm9vbGVhbiBjb25ubWFuX2NsaWVudF9nZXRfb2ZmbGluZV9zdGF0dXMoQ29ubm1hbkNsaWVudCAqY2xpZW50KQorIAorIAlEQkcoImNsaWVudCAlcCIsIGNsaWVudCk7CisgCistCXJldCA9IGNvbm5tYW5fZ2V0X3Byb3BlcnRpZXMocHJpdi0+bWFuYWdlciwgJmhhc2gsIE5VTEwpOworKwlyZXQgPSBuZXRfY29ubm1hbl9nZXRfcHJvcGVydGllcyhwcml2LT5tYW5hZ2VyLCAmaGFzaCwgTlVMTCk7CisgCisgCWlmIChyZXQgPT0gRkFMU0UpCisgCQlnb3RvIGRvbmU7CitAQCAtMzc1LDcgKzM3NSw3IEBAIHZvaWQgY29ubm1hbl9jbGllbnRfc2V0X29mZmxpbmVtb2RlKENvbm5tYW5DbGllbnQgKmNsaWVudCwgZ2Jvb2xlYW4gc3RhdHVzKQorIAlnX3ZhbHVlX2luaXQoJnZhbHVlLCBHX1RZUEVfQk9PTEVBTik7CisgCWdfdmFsdWVfc2V0X2Jvb2xlYW4oJnZhbHVlLCBzdGF0dXMpOworIAorLQljb25ubWFuX3NldF9wcm9wZXJ0eShwcml2LT5tYW5hZ2VyLCAiT2ZmbGluZU1vZGUiLCAmdmFsdWUsIE5VTEwpOworKwluZXRfY29ubm1hbl9zZXRfcHJvcGVydHkocHJpdi0+bWFuYWdlciwgIk9mZmxpbmVNb2RlIiwgJnZhbHVlLCBOVUxMKTsKKyB9CisgCisgc3RhdGljIGdib29sZWFuIG5ldHdvcmtfZGlzY29ubmVjdChHdGtUcmVlTW9kZWwgKm1vZGVsLCBHdGtUcmVlUGF0aCAqcGF0aCwKK0BAIC0zOTgsNyArMzk4LDcgQEAgc3RhdGljIGdib29sZWFuIG5ldHdvcmtfZGlzY29ubmVjdChHdGtUcmVlTW9kZWwgKm1vZGVsLCBHdGtUcmVlUGF0aCAqcGF0aCwKKyAJCXJldHVybiBUUlVFOworIAorIAlpZiAodHlwZSA9PSBDT05OTUFOX1RZUEVfV0lGSSkKKy0JCWNvbm5tYW5fZGlzY29ubmVjdChwcm94eSwgTlVMTCk7CisrCQluZXRfY29ubm1hbl9kaXNjb25uZWN0KHByb3h5LCBOVUxMKTsKKyAKKyAJZ19vYmplY3RfdW5yZWYocHJveHkpOworIAorQEAgLTQyMiwxMyArNDIyLDEzIEBAIHZvaWQgY29ubm1hbl9jbGllbnRfY29ubmVjdChDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrKQorIAlpZiAocHJveHkgPT0gTlVMTCkKKyAJCXJldHVybjsKKyAKKy0JY29ubm1hbl9jb25uZWN0KHByb3h5LCBOVUxMKTsKKysJbmV0X2Nvbm5tYW5fY29ubmVjdChwcm94eSwgTlVMTCk7CisgCisgCWdfb2JqZWN0X3VucmVmKHByb3h5KTsKKyB9CisgCisgdm9pZCBjb25ubWFuX2NsaWVudF9jb25uZWN0X2FzeW5jKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKm5ldHdvcmssCistCQljb25ubWFuX2Nvbm5lY3RfcmVwbHkgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJkYXRhKQorKwkJbmV0X2Nvbm5tYW5fY29ubmVjdF9yZXBseSBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlcmRhdGEpCisgeworIAlDb25ubWFuQ2xpZW50UHJpdmF0ZSAqcHJpdiA9IENPTk5NQU5fQ0xJRU5UX0dFVF9QUklWQVRFKGNsaWVudCk7CisgCURCdXNHUHJveHkgKnByb3h5OworQEAgLTQ0Niw3ICs0NDYsNyBAQCB2b2lkIGNvbm5tYW5fY2xpZW50X2Nvbm5lY3RfYXN5bmMoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yaywKKyAJaWYgKHByb3h5ID09IE5VTEwpCisgCQlnb3RvIGRvbmU7CisgCistCWNvbm5tYW5fY29ubmVjdF9hc3luYyhwcm94eSwgY2FsbGJhY2ssIHVzZXJkYXRhKTsKKysJbmV0X2Nvbm5tYW5fY29ubmVjdF9hc3luYyhwcm94eSwgY2FsbGJhY2ssIHVzZXJkYXRhKTsKKyAKKyBkb25lOgorIAlyZXR1cm47CitAQCAtNDc2LDcgKzQ3Niw3IEBAIHZvaWQgY29ubm1hbl9jbGllbnRfZGlzY29ubmVjdChDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrKQorIAlpZiAocHJveHkgPT0gTlVMTCkKKyAJCXJldHVybjsKKyAKKy0JY29ubm1hbl9kaXNjb25uZWN0KHByb3h5LCBOVUxMKTsKKysJbmV0X2Nvbm5tYW5fZGlzY29ubmVjdChwcm94eSwgTlVMTCk7CisgCisgCWdfb2JqZWN0X3VucmVmKHByb3h5KTsKKyB9CitAQCAtNTMyLDcgKzUzMiw3IEBAIHZvaWQgY29ubm1hbl9jbGllbnRfcmVtb3ZlKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKm5ldHdvcmspCisgCWlmIChwcm94eSA9PSBOVUxMKQorIAkJcmV0dXJuOworIAorLQljb25ubWFuX3JlbW92ZShwcm94eSwgTlVMTCk7CisrCW5ldF9jb25ubWFuX3JlbW92ZShwcm94eSwgTlVMTCk7CisgCisgCWdfb2JqZWN0X3VucmVmKHByb3h5KTsKKyB9CitkaWZmIC0tZ2l0IGEvY29tbW9uL2Nvbm5tYW4tY2xpZW50LmggYi9jb21tb24vY29ubm1hbi1jbGllbnQuaAoraW5kZXggOWUyZTZkNS4uOTgyNDFkZSAxMDA2NDQKKy0tLSBhL2NvbW1vbi9jb25ubWFuLWNsaWVudC5oCisrKysgYi9jb21tb24vY29ubm1hbi1jbGllbnQuaAorQEAgLTcwLDEzICs3MCwxMyBAQCB2b2lkIGNvbm5tYW5fY2xpZW50X3NldF9wb3dlcmVkKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKyBnYm9vbGVhbiBjb25ubWFuX2NsaWVudF9zZXRfaXB2NChDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpkZXZpY2UsCisgCQkJCXN0cnVjdCBpcHY0X2NvbmZpZyAqaXB2NF9jb25maWcpOworIHZvaWQgY29ubm1hbl9jbGllbnRfc2NhbihDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpkZXZpY2UsCistCQkJCQkJCWNvbm5tYW5fc2Nhbl9yZXBseSBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKKysJCQkJCQkJbmV0X2Nvbm5tYW5fc2Nhbl9yZXBseSBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKKyAKKyB2b2lkIGNvbm5tYW5fY2xpZW50X2Nvbm5lY3QoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yayk7Cisgdm9pZCBjb25ubWFuX2NsaWVudF9kaXNjb25uZWN0KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKm5ldHdvcmspOworIGdjaGFyICpjb25ubWFuX2NsaWVudF9nZXRfc2VjdXJpdHkoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yayk7Cisgdm9pZCBjb25ubWFuX2NsaWVudF9jb25uZWN0X2FzeW5jKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKm5ldHdvcmssCistCQkJCWNvbm5tYW5fY29ubmVjdF9yZXBseSBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlcmRhdGEpOworKwkJCQluZXRfY29ubm1hbl9jb25uZWN0X3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyZGF0YSk7Cisgdm9pZCBjb25ubWFuX2NsaWVudF9zZXRfcmVtZW1iZXIoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yaywKKyAJCQkJCQkJZ2Jvb2xlYW4gcmVtZW1iZXIpOworIAorZGlmZiAtLWdpdCBhL2NvbW1vbi9jb25ubWFuLWRidXMuYyBiL2NvbW1vbi9jb25ubWFuLWRidXMuYworaW5kZXggYjgyYjNlMS4uNTQzZWI0MyAxMDA2NDQKKy0tLSBhL2NvbW1vbi9jb25ubWFuLWRidXMuYworKysrIGIvY29tbW9uL2Nvbm5tYW4tZGJ1cy5jCitAQCAtNjU1LDE1ICs2NTUsMTUgQEAgREJ1c0dQcm94eSAqY29ubm1hbl9kYnVzX2NyZWF0ZV9tYW5hZ2VyKERCdXNHQ29ubmVjdGlvbiAqY29ubiwKKyAKKyAJREJHKCJnZXR0aW5nIG1hbmFnZXIgcHJvcGVydGllcyIpOworIAorLQljb25ubWFuX2dldF9wcm9wZXJ0aWVzX2FzeW5jKHByb3h5LCBtYW5hZ2VyX3Byb3BlcnRpZXMsIHN0b3JlKTsKKysJbmV0X2Nvbm5tYW5fZ2V0X3Byb3BlcnRpZXNfYXN5bmMocHJveHksIG1hbmFnZXJfcHJvcGVydGllcywgc3RvcmUpOworIAorIAlEQkcoImdldHRpbmcgdGVjaG5vbG9naWVzIik7CisgCistCWNvbm5tYW5fZ2V0X3RlY2hub2xvZ2llc19hc3luYyhwcm94eSwgbWFuYWdlcl90ZWNobm9sb2dpZXMsIHN0b3JlKTsKKysJbmV0X2Nvbm5tYW5fZ2V0X3RlY2hub2xvZ2llc19hc3luYyhwcm94eSwgbWFuYWdlcl90ZWNobm9sb2dpZXMsIHN0b3JlKTsKKyAKKyAJREJHKCJnZXR0aW5nIHNlcnZpY2VzIik7CisgCistCWNvbm5tYW5fZ2V0X3NlcnZpY2VzX2FzeW5jKHByb3h5LCBtYW5hZ2VyX3NlcnZpY2VzLCBzdG9yZSk7CisrCW5ldF9jb25ubWFuX2dldF9zZXJ2aWNlc19hc3luYyhwcm94eSwgbWFuYWdlcl9zZXJ2aWNlcywgc3RvcmUpOworIAorIAlyZXR1cm4gcHJveHk7CisgfQorZGlmZiAtLWdpdCBhL2NvbW1vbi9jb25ubWFuLWRidXMueG1sIGIvY29tbW9uL2Nvbm5tYW4tZGJ1cy54bWwKK2luZGV4IDU2Yjk1ODIuLjAxOTlkNTIgMTAwNjQ0CistLS0gYS9jb21tb24vY29ubm1hbi1kYnVzLnhtbAorKysrIGIvY29tbW9uL2Nvbm5tYW4tZGJ1cy54bWwKK0BAIC0xLDcgKzEsNyBAQAorIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorIAorIDxub2RlIG5hbWU9Ii8iPgorLSAgPGludGVyZmFjZSBuYW1lPSJjb25ubWFuIj4KKysgIDxpbnRlcmZhY2UgbmFtZT0ibmV0LmNvbm5tYW4iPgorICAgICA8bWV0aG9kIG5hbWU9IkdldFByb3BlcnRpZXMiPgorICAgICAgIDxhcmcgdHlwZT0iYXtzdn0iIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgIDwvbWV0aG9kPgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wMS5wbmcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMyNDdjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTAxLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wMi5wbmcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk0ZmI5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTAyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wMy5wbmcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVlYjQwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTAzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wNC5wbmcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1NDQxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTA0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wNS5wbmcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wNS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM0MGFjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTA1LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL251bGxfY2hlY2tfZm9yX2lwdjRfY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9udWxsX2NoZWNrX2Zvcl9pcHY0X2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDIxY2RhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9udWxsX2NoZWNrX2Zvcl9pcHY0X2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDM2IEBACitJbiBuZXR3b3JrcyB0aGF0IGRvbid0IGhhdmUgYSBESENQIHNlcnZlciBjb25maWd1cmVkLCBpcHY0IGFkZHJlc3MKK2FsbG9jYXRpb24gZmFpbHMgYW5kIHRoZSBpcHY0IHN0cnVjdHVyZSBkb2Vzbid0IGdldCBwb3B1bGF0ZWQuIFdoZW4KK3RoZSBHVUkgaXMgdHJ5aW5nIHRvIHJlYWQgdGhlIGlwdjRfY29uZmlnLm1ldGhvZCBmaWVsZCB0byBzZWUgd2hldGhlcgoraXQgY29udGFpbnMgImRoY3AiIHN0cmluZywgYSBzZWdtZW50YXRpb24gZmF1bHQgaXMgZ2VuZXJhdGVkLgorCitFdGhlcm5ldCBtYW51YWwgY29uZmlndXJhdGlvbiBiZWhhdmlvciByZW1haW5zIHVuY2hhbmdlZCBhZnRlciB0aGlzIGZpeC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEVtaWxpYSBDaW9iYW51IDxlbWlsaWEubWFyaWEuc2lsdmlhLmNpb2JhbnVAaW50ZWwuY29tPgorSW5kZXg6IGdpdC9wcm9wZXJ0aWVzL2V0aGVybmV0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9wcm9wZXJ0aWVzL2V0aGVybmV0LmMKKysrKyBnaXQvcHJvcGVydGllcy9ldGhlcm5ldC5jCitAQCAtMTk0LDcgKzE5NCw3IEBAIHZvaWQgYWRkX2V0aGVybmV0X3NlcnZpY2UoR3RrV2lkZ2V0ICptYWkKKworIAlkYXRhLT5idXR0b24gPSBidXR0b247CisKKy0JaWYgKGdfc3RyX2VxdWFsKGlwdjRfY29uZmlnLm1ldGhvZCwgImRoY3AiKSA9PSBUUlVFKQorKwlpZiAoIWlwdjRfY29uZmlnLm1ldGhvZCB8fCBnX3N0cl9lcXVhbChpcHY0X2NvbmZpZy5tZXRob2QsICJkaGNwIikgPT0gVFJVRSkKKyAJCXVwZGF0ZV9ldGhlcm5ldF9pcHY0KGRhdGEsIENPTk5NQU5fUE9MSUNZX0RIQ1ApOworIAllbHNlCisgCQl1cGRhdGVfZXRoZXJuZXRfaXB2NChkYXRhLCBDT05OTUFOX1BPTElDWV9NQU5VQUwpOworSW5kZXg6IGdpdC9wcm9wZXJ0aWVzL3dpZmkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3Byb3BlcnRpZXMvd2lmaS5jCisrKysgZ2l0L3Byb3BlcnRpZXMvd2lmaS5jCitAQCAtMjMwLDcgKzIzMCw3IEBAIHN0YXRpYyB2b2lkIHdpZmlfaXBjb25maWcoR3RrV2lkZ2V0ICp0YWIKKworIAlkYXRhLT5pcHY0X2NvbmZpZyA9IGlwdjRfY29uZmlnOworCistCWlmIChnX3N0cl9lcXVhbChpcHY0X2NvbmZpZy5tZXRob2QsICJkaGNwIikgPT0gVFJVRSkKKysJaWYgKCFpcHY0X2NvbmZpZy5tZXRob2QgfHwgZ19zdHJfZXF1YWwoaXB2NF9jb25maWcubWV0aG9kLCAiZGhjcCIpID09IFRSVUUpCisgCQl1cGRhdGVfd2lmaV9pcHY0KGRhdGEsIENPTk5NQU5fUE9MSUNZX0RIQ1ApOworIAllbHNlCisgCQl1cGRhdGVfd2lmaV9pcHY0KGRhdGEsIENPTk5NQU5fUE9MSUNZX01BTlVBTCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lXzAuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWVfMC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NTc1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lXzAuNy5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIkdUSysgZnJvbnRlbmQgZm9yIHRoZSBDb25uTWFuIG5ldHdvcmsgY29ubmVjdGlvbiBtYW5hZ2VyIgorSE9NRVBBR0UgPSAiaHR0cDovL2Nvbm5tYW4ubmV0LyIKK1NFQ1RJT04gPSAibGlicy9uZXR3b3JrIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcHJvcGVydGllcy9tYWluLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9NTBjNzdjODE4NzEzMDhiMDMzYWI3YTE1MDQ2MjZhZmIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY29tbW9uL2Nvbm5tYW4tZGJ1cy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PWRlNmI0ODVjMGU3MTdhMDIzNjQwMmQyMjAxODc3MTdhIgorCitERVBFTkRTID0gImd0aysgZGJ1cy1nbGliIGludGx0b29sLW5hdGl2ZSIKKworIyAwLjcgdGFnCitTUkNSRVYgPSAiY2YzYzMyNWIyM2RhZTg0M2M1NDk5YTExMzU5MWNmYmM5OGFjYjE0MyIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9jb25uZWN0aXZpdHkvY29ubm1hbi1nbm9tZS5naXQgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1SZW1vdmVkLWljb24tZnJvbS1jb25ubWFuLWdub21lLWFib3V0LWFwcGxldC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9udWxsX2NoZWNrX2Zvcl9pcHY0X2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9pbWFnZXMvKiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25ubWFuLWdub21lLWZpeC1kYnVzLWludGVyZmFjZS1uYW1lLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBndGstaWNvbi1jYWNoZSBwa2djb25maWcKKworUkRFUEVORFNfJHtQTn0gPSAiY29ubm1hbiIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaW1hZ2VzLyogJHtEfS91c3Ivc2hhcmUvaWNvbnMvaGljb2xvci8yMngyMi9hcHBzLworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2RjNGI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi5pbmMKQEAgLTAsMCArMSwyMTEgQEAKK1NVTU1BUlkgPSAiQSBkYWVtb24gZm9yIG1hbmFnaW5nIGludGVybmV0IGNvbm5lY3Rpb25zIHdpdGhpbiBlbWJlZGRlZCBkZXZpY2VzIgorREVTQ1JJUFRJT04gPSAiVGhlIENvbm5NYW4gcHJvamVjdCBwcm92aWRlcyBhIGRhZW1vbiBmb3IgbWFuYWdpbmcgXAoraW50ZXJuZXQgY29ubmVjdGlvbnMgd2l0aGluIGVtYmVkZGVkIGRldmljZXMgcnVubmluZyB0aGUgTGludXggXAorb3BlcmF0aW5nIHN5c3RlbS4gIFRoZSBDb25uZWN0aW9uIE1hbmFnZXIgaXMgZGVzaWduZWQgdG8gYmUgc2xpbSBhbmQgXAordG8gdXNlIGFzIGZldyByZXNvdXJjZXMgYXMgcG9zc2libGUsIHNvIGl0IGNhbiBiZSBlYXNpbHkgaW50ZWdyYXRlZC4gXAorSXQgaXMgYSBmdWxseSBtb2R1bGFyIHN5c3RlbSB0aGF0IGNhbiBiZSBleHRlbmRlZCwgdGhyb3VnaCBwbHVnLWlucywgXAordG8gc3VwcG9ydCBhbGwga2luZHMgb2Ygd2lyZWQgb3Igd2lyZWxlc3MgdGVjaG5vbG9naWVzLiBBbHNvLCBcCitjb25maWd1cmF0aW9uIG1ldGhvZHMsIGxpa2UgREhDUCBhbmQgZG9tYWluIG5hbWUgcmVzb2x2aW5nLCBhcmUgXAoraW1wbGVtZW50ZWQgdXNpbmcgcGx1Zy1pbnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2Nvbm5tYW4ubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly8wMS5vcmcvamlyYS9icm93c2UvQ00iCitMSUNFTlNFICA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEyZjg4NGQyYWUxZmY4N2MwOWU1YjdjY2MyYzRjYTdlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9NDg2YTI3OWE2YWIwYzhkMTUyYmNkYTNhNWI1ZWRjMzYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBzeXN0ZW1kIHVwZGF0ZS1yYy5kIGJsdWV0b290aAorCitERVBFTkRTICA9ICJkYnVzIGdsaWItMi4wIHBwcCBpcHRhYmxlcyIKKworSU5DX1BSID0gInIyMCIKKworRVhUUkFfT0VDT05GICs9ICJcCisgICAgYWNfY3ZfcGF0aF9XUEFTVVBQTElDQU5UPSR7c2JpbmRpcn0vd3BhX3N1cHBsaWNhbnQgXAorICAgIGFjX2N2X3BhdGhfUFBQRD0ke3NiaW5kaXJ9L3BwcGQgXAorICAgIC0tZW5hYmxlLWRlYnVnIFwKKyAgICAtLWVuYWJsZS1sb29wYmFjayBcCisgICAgLS1lbmFibGUtZXRoZXJuZXQgXAorICAgIC0tZW5hYmxlLXRvb2xzIFwKKyAgICAtLWVuYWJsZS10ZXN0IFwKKyAgICAtLWRpc2FibGUtcG9sa2l0IFwKKyAgICAtLWVuYWJsZS1jbGllbnQgXAorIgorCitQQUNLQUdFQ09ORklHID8/PSAid2lzcHIgXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsJ3N5c3RlbWQnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dpZmknLCd3aWZpJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnYmx1ZXonLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJzNnJywnM2cnLCAnJywgZCl9IFwKKyIKKworIyBJZiB5b3Ugd2FudCBDb25uTWFuIHRvIHN1cHBvcnQgVlBOLCBhZGQgZm9sbG93aW5nIHN0YXRlbWVudCBpbnRvCisjIGxvY2FsLmNvbmYgb3IgZGlzdHJvIGNvbmZpZworIyBQQUNLQUdFQ09ORklHX2FwcGVuZF9wbi1jb25ubWFuID0gIiBvcGVudnBuIHZwbmMgbDJ0cCBwcHRwIgorCitQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0td2l0aC1zeXN0ZW1kdW5pdGRpcj0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLywtLXdpdGgtc3lzdGVtZHVuaXRkaXI9IgorUEFDS0FHRUNPTkZJR1t3aWZpXSA9ICItLWVuYWJsZS13aWZpLCAtLWRpc2FibGUtd2lmaSwgd3BhLXN1cHBsaWNhbnQsIHdwYS1zdXBwbGljYW50IgorUEFDS0FHRUNPTkZJR1tibHVlel0gPSAiLS1lbmFibGUtYmx1ZXRvb3RoLCAtLWRpc2FibGUtYmx1ZXRvb3RoLCAke0JMVUVafSwgJHtCTFVFWn0iCitQQUNLQUdFQ09ORklHWzNnXSA9ICItLWVuYWJsZS1vZm9ubywgLS1kaXNhYmxlLW9mb25vLCBvZm9ubywgb2Zvbm8iCitQQUNLQUdFQ09ORklHW3Rpc3RdID0gIi0tZW5hYmxlLXRpc3QsLS1kaXNhYmxlLXRpc3QsIgorUEFDS0FHRUNPTkZJR1tvcGVudnBuXSA9ICItLWVuYWJsZS1vcGVudnBuIC0td2l0aC1vcGVudnBuPSR7c2JpbmRpcn0vb3BlbnZwbiwtLWRpc2FibGUtb3BlbnZwbiwsb3BlbnZwbiIKK1BBQ0tBR0VDT05GSUdbdnBuY10gPSAiLS1lbmFibGUtdnBuYyAtLXdpdGgtdnBuYz0ke3NiaW5kaXJ9L3ZwbmMsLS1kaXNhYmxlLXZwbmMsLHZwbmMiCitQQUNLQUdFQ09ORklHW2wydHBdID0gIi0tZW5hYmxlLWwydHAgLS13aXRoLWwydHA9JHtzYmluZGlyfS94bDJ0cGQsLS1kaXNhYmxlLWwydHAsLHhsMnRwZCIKK1BBQ0tBR0VDT05GSUdbcHB0cF0gPSAiLS1lbmFibGUtcHB0cCAtLXdpdGgtcHB0cD0ke3NiaW5kaXJ9L3BwdHAsLS1kaXNhYmxlLXBwdHAsLHBwdHAtbGludXgiCisjIFdJU1ByIHN1cHBvcnQgZm9yIGxvZ2dpbmcgaW50byBob3RzcG90cywgcmVxdWlyZXMgVExTCitQQUNLQUdFQ09ORklHW3dpc3ByXSA9ICItLWVuYWJsZS13aXNwciwtLWRpc2FibGUtd2lzcHIsZ251dGxzLCIKKworSU5JVFNDUklQVF9OQU1FID0gImNvbm5tYW4iCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAwNSA1IDIgMyAuIHN0b3AgMjIgMCAxIDYgLiIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBzeXN0ZW1kX3BhY2thZ2VzID0gIiR7UE59IgorICAgIHBrZ2NvbmZpZyA9IGQuZ2V0VmFyKCdQQUNLQUdFQ09ORklHJywgVHJ1ZSkKKyAgICBpZiAoJ29wZW52cG4nIG9yICd2cG5jJyBvciAnbDJ0cCcgb3IgJ3BwdHAnKSBpbiBwa2djb25maWcuc3BsaXQoKToKKyAgICAgICAgc3lzdGVtZF9wYWNrYWdlcyArPSAiICR7UE59LXZwbiIKKyAgICBkLnNldFZhcignU1lTVEVNRF9QQUNLQUdFUycsIHN5c3RlbWRfcGFja2FnZXMpCit9CisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJjb25ubWFuLnNlcnZpY2UiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tdnBuID0gImNvbm5tYW4tdnBuLnNlcnZpY2UiCitTWVNURU1EX1dJUkVEX1NFVFVQID0gIkV4ZWNTdGFydFByZT0tJHtsaWJkaXJ9L2Nvbm5tYW4vd2lyZWQtc2V0dXAiCisKKyMgVGhpcyBhbGxvd3MgKmV2ZXJ5b25lKiB0byBhY2Nlc3MgQ29ubk1hbiBvdmVyIERCdXMsIHdpdGhvdXQgYW55IGFjY2VzcworIyBjb250cm9sLiAgUmVhbGx5IHRoZSBhdF9jb25zb2xlIGZsYWcgc2hvdWxkIHdvcmssIHdoaWNoIHdvdWxkIG1lYW4gdGhhdAorIyBib3RoIHRoaXMgYW5kIHRoZSB4dXNlciBwYXRjaCBjYW4gYmUgZHJvcHBlZC4KK2RvX2NvbXBpbGVfYXBwZW5kKCkgeworCXNlZCAtaSAtZSBzOmRlbnk6YWxsb3c6ZyAke1N9L3NyYy9jb25ubWFuLWRidXMuY29uZgorCXNlZCAtaSAtZSBzOmRlbnk6YWxsb3c6ZyAke1N9L3Zwbi92cG4tZGJ1cy5jb25mCisKKwlzZWQgLWkgInMjRXhlY1N0YXJ0PSMke1NZU1RFTURfV0lSRURfU0VUVVB9XG5FeGVjU3RhcnQ9IyIgJHtCfS9zcmMvY29ubm1hbi5zZXJ2aWNlCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2Nvbm5tYW4gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Nvbm5tYW4KKwkJc2VkIC1pIHMlQExJQkRJUkAlJHtsaWJkaXJ9JSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvY29ubm1hbgorCWZpCisKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS90b29scy8qLXRlc3QgJHtEfSR7YmluZGlyfQorCWlmIFsgLWUgJHtCfS90b29scy93aXNwciBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke0J9L3Rvb2xzL3dpc3ByICR7RH0ke2JpbmRpcn0KKwlmaQorCWluc3RhbGwgLW0gMDc1NSAke0J9L2NsaWVudC9jb25ubWFuY3RsICR7RH0ke2JpbmRpcn0KKworCSMgV2UgZG9uJ3QgbmVlZCB0byBwYWNrYWdlIGFuIGVtcHR5IGRpcmVjdG9yeQorCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICR7RH0ke2xpYmRpcn0vY29ubm1hbi9zY3JpcHRzCisKKwkjIEF1dG9tYWtlIDEuMTIgd29uJ3QgaW5zdGFsbCBlbXB0eSBkaXJlY3RvcmllcywgYnV0IHdlIG5lZWQgdGhlCisJIyBwbHVnaW5zIGRpcmVjdG9yeSB0byBiZSBwcmVzZW50IGZvciBvd25lcnNoaXAKKwlta2RpciAtcCAke0R9JHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucworfQorCisjIFRoZXNlIHVzZWQgdG8gYmUgcGx1Z2lucywgYnV0IG5vdyB0aGV5IGFyZSBjb3JlCitSUFJPVklERVNfJHtQTn0gPSAiXAorCWNvbm5tYW4tcGx1Z2luLWxvb3BiYWNrIFwKKwljb25ubWFuLXBsdWdpbi1ldGhlcm5ldCBcCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnYmx1ZXRvb3RoJywnY29ubm1hbi1wbHVnaW4tYmx1ZXRvb3RoJywgJycsIGQpfSBcCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnd2lmaScsJ2Nvbm5tYW4tcGx1Z2luLXdpZmknLCAnJywgZCl9IFwKKwkke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICczZycsJ2Nvbm5tYW4tcGx1Z2luLW9mb25vJywgJycsIGQpfSBcCisJIgorCitSREVQRU5EU18ke1BOfSA9ICJcCisJZGJ1cyBcCisJJHtAYmFzZV9jb25kaXRpb25hbCgnUk9PVExFU1NfWCcsICcxJywgJ3h1c2VyLWFjY291bnQnLCAnJywgZCl9IFwKKwkiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl4ke1BOfS1wbHVnaW4tLioiCisKK2RlZiBhZGRfcmRlcGVuZHMoYmIsIGQsIGZpbGUsIHBrZywgZGVwbWFwLCBtdWx0aWxpYl9wcmVmaXgsIGFkZF9pbnNhbmVfc2tpcCk6CisgICAgcGx1Z2ludHlwZSA9IHBrZy5zcGxpdCggJy0nIClbLTFdCisgICAgaWYgcGx1Z2ludHlwZSBpbiBkZXBtYXA6CisgICAgICAgIHJkZXBlbmRzID0gbWFwKGxhbWJkYSB4OiBtdWx0aWxpYl9wcmVmaXggKyB4LCBcCisgICAgICAgICAgICAgICAgICAgICAgIGRlcG1hcFtwbHVnaW50eXBlXS5zcGxpdCgpKQorICAgICAgICBkLnNldFZhcigiUkRFUEVORFNfJXMiICUgcGtnLCAiICIuam9pbihyZGVwZW5kcykpCisgICAgaWYgYWRkX2luc2FuZV9za2lwOgorICAgICAgICBkLmFwcGVuZFZhcigiSU5TQU5FX1NLSVBfJXMiICUgcGtnLCAiZGV2LXNvIikKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgZGVwbWFwID0gZGljdChwcHBkPSJwcHAiKQorICAgIG11bHRpbGliX3ByZWZpeCA9IChkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKSBvciAiIikKKworICAgIGhvb2sgPSBsYW1iZGEgZmlsZSxwa2cseCx5LHo6IFwKKyAgICAgICAgYWRkX3JkZXBlbmRzKGJiLCBkLCBmaWxlLCBwa2csIGRlcG1hcCwgbXVsdGlsaWJfcHJlZml4LCBGYWxzZSkKKyAgICBwbHVnaW5fZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9jb25ubWFuL3BsdWdpbnMvJykKKyAgICBwbHVnaW5fbmFtZSA9IGQuZXhwYW5kKCcke1BOfS1wbHVnaW4tJXMnKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBsdWdpbl9kaXIsICdeKC4qKS5zbyQnLCBwbHVnaW5fbmFtZSwgXAorICAgICAgICAnJHtQTn0gcGx1Z2luIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycsIGhvb2s9aG9vaywgcHJlcGVuZD1UcnVlICkKKworICAgIGhvb2sgPSBsYW1iZGEgZmlsZSxwa2cseCx5LHo6IFwKKyAgICAgICAgYWRkX3JkZXBlbmRzKGJiLCBkLCBmaWxlLCBwa2csIGRlcG1hcCwgbXVsdGlsaWJfcHJlZml4LCBUcnVlKQorICAgIHBsdWdpbl9kaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucy12cG4vJykKKyAgICBwbHVnaW5fbmFtZSA9IGQuZXhwYW5kKCcke1BOfS1wbHVnaW4tdnBuLSVzJykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwbHVnaW5fZGlyLCAnXiguKikuc28kJywgcGx1Z2luX25hbWUsIFwKKyAgICAgICAgJyR7UE59IFZQTiBwbHVnaW4gZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJywgaG9vaz1ob29rLCBwcmVwZW5kPVRydWUgKQorfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tdG9vbHMgJHtQTn0tdGVzdHMgJHtQTn0tY2xpZW50IgorCitGSUxFU18ke1BOfS10b29scyA9ICIke2JpbmRpcn0vd2lzcHIiCisKK0ZJTEVTXyR7UE59LXRlc3RzID0gIiR7YmluZGlyfS8qLXRlc3QgJHtsaWJkaXJ9LyR7QlBOfS90ZXN0LyoiCitSREVQRU5EU18ke1BOfS10ZXN0cyA9ICJweXRob24tZGJ1cyBweXRob24tcHlnb2JqZWN0IHB5dGhvbi10ZXh0dXRpbHMgcHl0aG9uLXN1YnByb2Nlc3MgcHl0aG9uLWZjbnRsIHB5dGhvbi1uZXRjbGllbnQiCisKK0ZJTEVTXyR7UE59LWNsaWVudCA9ICIke2JpbmRpcn0vY29ubm1hbmN0bCIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyogJHtzYmluZGlyfS8qICR7bGliZXhlY2Rpcn0vKiAke2xpYmRpcn0vbGliKi5zby4qIFwKKyAgICAgICAgICAgICR7bGliZGlyfS9jb25ubWFuL3BsdWdpbnMgXAorICAgICAgICAgICAgJHtzeXNjb25mZGlyfSAke3NoYXJlZHN0YXRlZGlyfSAke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9LyogJHtiYXNlX3NiaW5kaXJ9LyogJHtiYXNlX2xpYmRpcn0vKi5zbyogJHtkYXRhZGlyfS8ke1BOfSBcCisgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMvKiIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vY29ubm1hbi8qLy5kZWJ1ZyIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vY29ubm1hbi8qLyoubGEiCisKK1BBQ0tBR0VTID0rICIke1BOfS12cG4iCisKK1NVTU1BUllfJHtQTn0tdnBuID0gIkEgZGFlbW9uIGZvciBtYW5hZ2luZyBWUE4gY29ubmVjdGlvbnMgd2l0aGluIGVtYmVkZGVkIGRldmljZXMiCitERVNDUklQVElPTl8ke1BOfS12cG4gPSAiVGhlIENvbm5NYW4gVlBOIHByb3ZpZGVzIGEgZGFlbW9uIGZvciBcCittYW5hZ2luZyBWUE4gY29ubmVjdGlvbnMgd2l0aGluIGVtYmVkZGVkIGRldmljZXMgcnVubmluZyB0aGUgTGludXggXAorb3BlcmF0aW5nIHN5c3RlbS4gIFRoZSBjb25ubWFuLXZwbmQgaGFuZGxlcyBhbGwgdGhlIFZQTiBjb25uZWN0aW9ucyBcCithbmQgc3RhcnRzL3N0b3BzIFZQTiBjbGllbnQgcHJvY2Vzc2VzIHdoZW4gbmVjZXNzYXJ5LiBUaGUgY29ubm1hbi12cG5kIFwKK3Byb3ZpZGVzIGEgREJ1cyBBUEkgZm9yIG1hbmFnaW5nIFZQTiBjb25uZWN0aW9ucy4gQWxsIHRoZSBkaWZmZXJlbnQgXAorVlBOIHRlY2hub2dpZXMgYXJlIGltcGxlbWVudGVkIHVzaW5nIHBsdWctaW5zLiIKK0ZJTEVTXyR7UE59LXZwbiArPSAiJHtzYmluZGlyfS9jb25ubWFuLXZwbmQgXAorICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uZC9jb25ubWFuLXZwbi1kYnVzLmNvbmYgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMvbmV0LmNvbm5tYW4udnBuLnNlcnZpY2UgXAorICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2Nvbm5tYW4tdnBuLnNlcnZpY2UiCisKK1NVTU1BUllfJHtQTn0tcGx1Z2luLXZwbi1vcGVudnBuID0gIkFuIE9wZW5WUE4gcGx1Z2luIGZvciBDb25uTWFuIFZQTiIKK0RFU0NSSVBUSU9OXyR7UE59LXBsdWdpbi12cG4tb3BlbnZwbiA9ICJUaGUgQ29ubk1hbiBPcGVuVlBOIHBsdWdpbiB1c2VzIG9wZW52cG4gY2xpZW50IFwKK3RvIGNyZWF0ZSBhIFZQTiBjb25uZWN0aW9uIHRvIE9wZW5WUE4gc2VydmVyLiIKK0ZJTEVTXyR7UE59LXBsdWdpbi12cG4tb3BlbnZwbiArPSAiJHtsaWJkaXJ9L2Nvbm5tYW4vc2NyaXB0cy9vcGVudnBuLXNjcmlwdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jb25ubWFuL3BsdWdpbnMtdnBuL29wZW52cG4uc28iCitSREVQRU5EU18ke1BOfS1wbHVnaW4tdnBuLW9wZW52cG4gKz0gIiR7UE59LXZwbiIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsJ29wZW52cG4nLCcke1BOfS1wbHVnaW4tdnBuLW9wZW52cG4nLCAnJywgZCl9IgorCitTVU1NQVJZXyR7UE59LXBsdWdpbi12cG4tdnBuYyA9ICJBIHZwbmMgcGx1Z2luIGZvciBDb25uTWFuIFZQTiIKK0RFU0NSSVBUSU9OXyR7UE59LXBsdWdpbi12cG4tdnBuYyA9ICJUaGUgQ29ubk1hbiB2cG5jIHBsdWdpbiB1c2VzIHZwbmMgY2xpZW50IFwKK3RvIGNyZWF0ZSBhIFZQTiBjb25uZWN0aW9uIHRvIENpc2NvMzAwMCBWUE4gQ29uY2VudHJhdG9yLiIKK0ZJTEVTXyR7UE59LXBsdWdpbi12cG4tdnBuYyArPSAiJHtsaWJkaXJ9L2Nvbm5tYW4vc2NyaXB0cy9vcGVuY29ubmVjdC1zY3JpcHQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY29ubm1hbi9wbHVnaW5zLXZwbi92cG5jLnNvIgorUkRFUEVORFNfJHtQTn0tcGx1Z2luLXZwbi12cG5jICs9ICIke1BOfS12cG4iCitSUkVDT01NRU5EU18ke1BOfSArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCd2cG5jJywnJHtQTn0tcGx1Z2luLXZwbi12cG5jJywgJycsIGQpfSIKKworU1VNTUFSWV8ke1BOfS1wbHVnaW4tdnBuLWwydHAgPSAiQSBMMlRQIHBsdWdpbiBmb3IgQ29ubk1hbiBWUE4iCitERVNDUklQVElPTl8ke1BOfS1wbHVnaW4tdnBuLWwydHAgPSAiVGhlIENvbm5NYW4gTDJUUCBwbHVnaW4gdXNlcyB4bDJ0cGQgZGFlbW9uIFwKK3RvIGNyZWF0ZSBhIFZQTiBjb25uZWN0aW9uIHRvIEwyVFAgc2VydmVyLiIKK0ZJTEVTXyR7UE59LXBsdWdpbi12cG4tbDJ0cCArPSAiJHtsaWJkaXJ9L2Nvbm5tYW4vc2NyaXB0cy9saWJwcHAtcGx1Z2luLnNvKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jb25ubWFuL3BsdWdpbnMtdnBuL2wydHAuc28iCitSREVQRU5EU18ke1BOfS1wbHVnaW4tdnBuLWwydHAgKz0gIiR7UE59LXZwbiIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsJ2wydHAnLCcke1BOfS1wbHVnaW4tdnBuLWwydHAnLCAnJywgZCl9IgorCitTVU1NQVJZXyR7UE59LXBsdWdpbi12cG4tcHB0cCA9ICJBIFBQVFAgcGx1Z2luIGZvciBDb25uTWFuIFZQTiIKK0RFU0NSSVBUSU9OXyR7UE59LXBsdWdpbi12cG4tcHB0cCA9ICJUaGUgQ29ubk1hbiBQUFRQIHBsdWdpbiB1c2VzIHBwdHAtbGludXggY2xpZW50IFwKK3RvIGNyZWF0ZSBhIFZQTiBjb25uZWN0aW9uIHRvIFBQVFAgc2VydmVyLiIKK0ZJTEVTXyR7UE59LXBsdWdpbi12cG4tcHB0cCArPSAiJHtsaWJkaXJ9L2Nvbm5tYW4vc2NyaXB0cy9saWJwcHAtcGx1Z2luLnNvKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jb25ubWFuL3BsdWdpbnMtdnBuL3BwdHAuc28iCitSREVQRU5EU18ke1BOfS1wbHVnaW4tdnBuLXBwdHAgKz0gIiR7UE59LXZwbiIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsJ3BwdHAnLCcke1BOfS1wbHVnaW4tdnBuLXBwdHAnLCAnJywgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi8wMDAxLXBsdWdpbi5oLUNoYW5nZS12aXNpYmlsaXR5LXRvLWRlZmF1bHQtZm9yLWRlYnVnLXN5bWIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLzAwMDEtcGx1Z2luLmgtQ2hhbmdlLXZpc2liaWxpdHktdG8tZGVmYXVsdC1mb3ItZGVidWctc3ltYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmYwM2U2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi8wMDAxLXBsdWdpbi5oLUNoYW5nZS12aXNpYmlsaXR5LXRvLWRlZmF1bHQtZm9yLWRlYnVnLXN5bWIucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA0ZGRhZjc4ZGFkNWE5ZWU0YTA2NTgyMzVmNzFiNzUxMzIxOTIxMjNlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgNyBBcHIgMjAxMiAxODo1MjoxMiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBwbHVnaW4uaDogQ2hhbmdlIHZpc2liaWxpdHkgdG8gZGVmYXVsdCBmb3IgZGVidWcgc3ltYm9scworCitnb2xkIHJlZnVzZXMgdG8gbGluayBpbiB1bmRlZmluZWQgd2VhayBzeW1ib2xzIHdoaWNoCitoYXZlIGhpZGRlbiB2aXNpYmlsaXR5CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBpbmNsdWRlL3BsdWdpbi5oIHwgICAgNCArKy0tCisgMSBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9pbmNsdWRlL3BsdWdpbi5oIGIvaW5jbHVkZS9wbHVnaW4uaAoraW5kZXggNjkyYTRlNS4uYTkzNjFjMyAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvcGx1Z2luLmgKKysrKyBiL2luY2x1ZGUvcGx1Z2luLmgKK0BAIC04OSw5ICs4OSw5IEBAIHN0cnVjdCBjb25ubWFuX3BsdWdpbl9kZXNjIHsKKyAjZWxzZQorICNkZWZpbmUgQ09OTk1BTl9QTFVHSU5fREVGSU5FKG5hbWUsIGRlc2NyaXB0aW9uLCB2ZXJzaW9uLCBwcmlvcml0eSwgaW5pdCwgZXhpdCkgXAorIAkJZXh0ZXJuIHN0cnVjdCBjb25ubWFuX2RlYnVnX2Rlc2MgX19zdGFydF9fX2RlYnVnW10gXAorLQkJCQlfX2F0dHJpYnV0ZV9fICgod2VhaywgdmlzaWJpbGl0eSgiaGlkZGVuIikpKTsgXAorKwkJCQlfX2F0dHJpYnV0ZV9fICgod2VhaywgdmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7IFwKKyAJCWV4dGVybiBzdHJ1Y3QgY29ubm1hbl9kZWJ1Z19kZXNjIF9fc3RvcF9fX2RlYnVnW10gXAorLQkJCQlfX2F0dHJpYnV0ZV9fICgod2VhaywgdmlzaWJpbGl0eSgiaGlkZGVuIikpKTsgXAorKwkJCQlfX2F0dHJpYnV0ZV9fICgod2VhaywgdmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7IFwKKyAJCWV4dGVybiBzdHJ1Y3QgY29ubm1hbl9wbHVnaW5fZGVzYyBjb25ubWFuX3BsdWdpbl9kZXNjIFwKKyAJCQkJX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOyBcCisgCQlzdHJ1Y3QgY29ubm1hbl9wbHVnaW5fZGVzYyBjb25ubWFuX3BsdWdpbl9kZXNjID0geyBcCistLSAKKzEuNy41LjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi9hZGRfeHVzZXJfZGJ1c19wZXJtaXNzaW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi9hZGRfeHVzZXJfZGJ1c19wZXJtaXNzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwN2IzY2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuL2FkZF94dXNlcl9kYnVzX3Blcm1pc3Npb24ucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorQmVjYXVzZSBQb2t5IGRvZXNuJ3Qgc3VwcG9ydCBhdF9jb25zb2xlIHdlIG5lZWQgdG8gc3BlY2lhbC1jYXNlIHRoZSBzZXNzaW9uCit1c2VyLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9zcmMvY29ubm1hbi1kYnVzLmNvbmYgYi9zcmMvY29ubm1hbi1kYnVzLmNvbmYKK2luZGV4IDk4YTc3M2UuLjQ2NjgwOWMgMTAwNjQ0CistLS0gYS9zcmMvY29ubm1hbi1kYnVzLmNvbmYKKysrKyBiL3NyYy9jb25ubWFuLWRidXMuY29uZgorQEAgLTgsNiArOCw5IEBACisgICAgICAgICA8YWxsb3cgc2VuZF9pbnRlcmZhY2U9Im5ldC5jb25ubWFuLkNvdW50ZXIiLz4KKyAgICAgICAgIDxhbGxvdyBzZW5kX2ludGVyZmFjZT0ibmV0LmNvbm5tYW4uTm90aWZpY2F0aW9uIi8+CisgICAgIDwvcG9saWN5PgorKyAgICA8cG9saWN5IHVzZXI9Inh1c2VyIj4KKysgICAgICAgIDxhbGxvdyBzZW5kX2Rlc3RpbmF0aW9uPSJuZXQuY29ubm1hbiIvPgorKyAgICA8L3BvbGljeT4KKyAgICAgPHBvbGljeSBhdF9jb25zb2xlPSJ0cnVlIj4KKyAgICAgICAgIDxhbGxvdyBzZW5kX2Rlc3RpbmF0aW9uPSJuZXQuY29ubm1hbiIvPgorICAgICA8L3BvbGljeT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vY29ubm1hbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vY29ubm1hbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjdhOTRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi9jb25ubWFuCkBAIC0wLDAgKzEsODMgQEAKKyMhL2Jpbi9zaAorCitEQUVNT049L3Vzci9zYmluL2Nvbm5tYW5kCitQSURGSUxFPS92YXIvcnVuL2Nvbm5tYW5kLnBpZAorREVTQz0iQ29ubmVjdGlvbiBNYW5hZ2VyIgorCitpZiBbIC1mIC9ldGMvZGVmYXVsdC9jb25ubWFuIF0gOyB0aGVuCisJLiAvZXRjL2RlZmF1bHQvY29ubm1hbgorZmkKKworc2V0IC1lCisKK25mc3Jvb3Q9MAorCitleGVjIDk8JjAgPCAvcHJvYy9tb3VudHMKK3doaWxlIHJlYWQgZGV2IG10cHQgZnN0eXBlIHJlc3Q7IGRvCisJaWYgdGVzdCAkbXRwdCA9ICIvIiA7IHRoZW4KKwkJY2FzZSAkZnN0eXBlIGluCisJCSAgICBuZnMgfCBuZnM0KQorCQkJbmZzcm9vdD0xCisJCQlicmVhaworCQkJOzsKKwkJICAgICopCisJCQk7OworCQllc2FjCisJZmkKK2RvbmUKKworZG9fc3RhcnQoKSB7CisJRVhUUkFfUEFSQU09IiIKKwlpZiB0ZXN0ICRuZnNyb290IC1lcSAxIDsgdGhlbgorCSAgICBORVRfREVWUz1gY2F0IC9wcm9jL25ldC9kZXYgfCBzZWQgLW5lICdzL15cKFthLXpBLVowLTkgXSpcKTouKiQvXDEvcCdgCisJICAgIE5FVF9BRERSPWBjYXQgL3Byb2MvY21kbGluZSB8IHNlZCAtbmUgJ3MvXi4qaXA9XChbXiA6XSpcKS4qJC9cMS9wJ2AKKworCSAgICBpZiBbICEgLXogIiRORVRfQUREUiIgXTsgdGhlbgorCQlpZiBbICIkTkVUX0FERFIiID0gZGhjcCBdOyB0aGVuCisJCSAgICBldGhuPWBpZmNvbmZpZyB8IGdyZXAgIl5ldGgiIHwgc2VkIC1lICJzL1woZXRoWzAtOV1cKVwoLipcKS9cMS8iYAorCQkgICAgaWYgWyAhIC16ICIkZXRobiIgXTsgdGhlbgorCQkJRVhUUkFfUEFSQU09Ii1JICRldGhuIgorCQkgICAgZmkKKwkJZWxzZQorCQkgICAgZm9yIGkgaW4gJE5FVF9ERVZTOyBkbworCQkJQUREUj1gaWZjb25maWcgJGkgfCBzZWQgJ3MvYWRkcjovL2cnIHwgc2VkIC1uZSAncy9eLippbmV0IFwoWzAtOS5dKlwpIC4qJC9cMS9wJ2AKKwkJCWlmIFsgIiRORVRfQUREUiIgPSAiJEFERFIiIF07IHRoZW4KKwkJCSAgICBFWFRSQV9QQVJBTT0iLUkgJGkiCisJCQkgICAgYnJlYWsKKwkJCWZpCisJCSAgICBkb25lCisJCWZpCisJICAgIGZpCisJZmkKKwlpZiBbIC1mIEBMSUJESVJAL2Nvbm5tYW4vd2lyZWQtc2V0dXAgXSA7IHRoZW4KKwkJLiBATElCRElSQC9jb25ubWFuL3dpcmVkLXNldHVwCisJZmkKKwkkREFFTU9OICRFWFRSQV9QQVJBTQorfQorCitkb19zdG9wKCkgeworCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLW5hbWUgY29ubm1hbmQgLS1xdWlldAorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJZWNobyAiU3RhcnRpbmcgJERFU0MiCisJZG9fc3RhcnQKKwk7OworICBzdG9wKQorCWVjaG8gIlN0b3BwaW5nICRERVNDIgorCWRvX3N0b3AKKwk7OworICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKwllY2hvICJSZXN0YXJ0aW5nICRERVNDIgorCWRvX3N0b3AKKwlzbGVlcCAxCisJZG9fc3RhcnQKKwk7OworICAqKQorCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iID4mMgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbl8xLjMwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbl8xLjMwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNDczNTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuXzEuMzAuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBjb25ubWFuLmluYworCitTUkNfVVJJICA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L25ldHdvcmsvJHtCUE59LyR7QlB9LnRhci54eiBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1wbHVnaW4uaC1DaGFuZ2UtdmlzaWJpbGl0eS10by1kZWZhdWx0LWZvci1kZWJ1Zy1zeW1iLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hZGRfeHVzZXJfZGJ1c19wZXJtaXNzaW9uLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9jb25ubWFuIFwKKyAgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI0YTNlZmRiZDY3OTY5MjJkYjljNmY2NmRhNTc4ODdmYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1YzVlNDY0YmFjYzljMjdlZDRlNzI2OWZiOWI1MDU5ZjA3OTQ3ZjViZTI2NDMzYjU5MjEyMTMzNjYzZmZhOTkxIgorCitSUkVDT01NRU5EU18ke1BOfSA9ICJjb25ubWFuLWNvbmYiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4M2E4ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AuaW5jCkBAIC0wLDAgKzEsMTE1IEBACitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK1NVTU1BUlkgPSAiSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bSBESENQIHBhY2thZ2UiCitERVNDUklQVElPTiA9ICJESENQIChEeW5hbWljIEhvc3QgQ29uZmlndXJhdGlvbiBQcm90b2NvbCkgaXMgYSBwcm90b2NvbCBcCit3aGljaCBhbGxvd3MgaW5kaXZpZHVhbCBkZXZpY2VzIG9uIGFuIElQIG5ldHdvcmsgdG8gZ2V0IHRoZWlyIG93biBcCituZXR3b3JrIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZnJvbSBhIHNlcnZlci4gIERIQ1AgaGVscHMgbWFrZSBpdCBcCitlYXNpZXIgdG8gYWRtaW5pc3RlciBkZXZpY2VzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pc2Mub3JnLyIKKworTElDRU5TRSA9ICJJU0MiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO2JlZ2lubGluZT00O21kNT1jNWM2NGQ2OTYxMDdmODRiNTZmZTMzN2QxNGRhMTc1MyIKKworREVQRU5EUyA9ICJvcGVuc3NsIGJpbmQiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmlzYy5vcmcvaXNjL2RoY3AvJHtQVn0vZGhjcC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZGVmaW5lLW1hY3JvLV9QQVRIX0RIQ1BEX0NPTkYtYW5kLV9QQVRIX0RIQ0xJRU5UX0NPTi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0LXJlbGF5IGZpbGU6Ly9kZWZhdWx0LXJlbGF5IFwKKyAgICAgICAgICAgZmlsZTovL2luaXQtc2VydmVyIGZpbGU6Ly9kZWZhdWx0LXNlcnZlciBcCisgICAgICAgICAgIGZpbGU6Ly9kaGNsaWVudC5jb25mIGZpbGU6Ly9kaGNwZC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2RoY3BkLnNlcnZpY2UgZmlsZTovL2RoY3JlbGF5LnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vZGhjcGQ2LnNlcnZpY2UgIgorCitpbmhlcml0IGF1dG90b29scyBzeXN0ZW1kCisKK1NZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0tc2VydmVyICR7UE59LXJlbGF5IgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LXNlcnZlciA9ICJkaGNwZC5zZXJ2aWNlIGRoY3BkNi5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRV8ke1BOfS1zZXJ2ZXIgPSAiZGlzYWJsZSIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59LXJlbGF5ID0gImRoY3JlbGF5LnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFXyR7UE59LXJlbGF5ID0gImRpc2FibGUiCisKK1RBUkdFVF9DRkxBR1MgKz0gIi1EX0dOVV9TT1VSQ0UiCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXNydi1sZWFzZS1maWxlPSR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AvZGhjcGQubGVhc2VzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtc3J2Ni1sZWFzZS1maWxlPSR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AvZGhjcGQ2LmxlYXNlcyBcCisgICAgICAgICAgICAgICAgLS13aXRoLWNsaS1sZWFzZS1maWxlPSR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AvZGhjbGllbnQubGVhc2VzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtY2xpNi1sZWFzZS1maWxlPSR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AvZGhjbGllbnQ2LmxlYXNlcyBcCisgICAgICAgICAgICAgICAgLS13aXRoLWxpYmJpbmQ9JHtTVEFHSU5HX0xJQkRJUn0vIFwKKyAgICAgICAgICAgICAgICIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kaGNwCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdC1yZWxheSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZGhjcC1yZWxheQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2RlZmF1bHQtcmVsYXkgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9kaGNwLXJlbGF5CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdC1zZXJ2ZXIgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2RoY3Atc2VydmVyCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGVmYXVsdC1zZXJ2ZXIgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9kaGNwLXNlcnZlcgorCisJcm0gLWYgJHtEfSR7c3lzY29uZmRpcn0vZGhjbGllbnQuY29uZioKKwlybSAtZiAke0R9JHtzeXNjb25mZGlyfS9kaGNwZC5jb25mKgorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2RoY2xpZW50LmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vZGhjcC9kaGNsaWVudC5jb25mCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGhjcGQuY29uZiAke0R9JHtzeXNjb25mZGlyfS9kaGNwL2RoY3BkLmNvbmYKKworCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9zYmluZGlyfS8KKwlpZiBbICIke3NiaW5kaXJ9IiAhPSAiJHtiYXNlX3NiaW5kaXJ9IiBdOyB0aGVuCisJCW12ICR7RH0ke3NiaW5kaXJ9L2RoY2xpZW50ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vCisJZmkKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9jbGllbnQvc2NyaXB0cy9saW51eCAke0R9JHtiYXNlX3NiaW5kaXJ9L2RoY2xpZW50LXNjcmlwdAorCisJIyBJbnN0YWxsIHN5c3RlbWQgdW5pdCBmaWxlcworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kaGNwZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGhjcGQ2LnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kaGNyZWxheS5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2RoY3BkKi5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2RoY3JlbGF5LnNlcnZpY2UKKwlzZWQgLWkgLWUgJ3MsQFNZU0NPTkZESVJALCR7c3lzY29uZmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGhjcGQqLnNlcnZpY2UKKwlzZWQgLWkgLWUgJ3MsQGJhc2VfYmluZGlyQCwke2Jhc2VfYmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaGNwZCouc2VydmljZQorCXNlZCAtaSAtZSAncyxAbG9jYWxzdGF0ZWRpckAsJHtsb2NhbHN0YXRlZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaGNwZCouc2VydmljZQorfQorCitQQUNLQUdFUyArPSAiZGhjcC1zZXJ2ZXIgZGhjcC1zZXJ2ZXItY29uZmlnIGRoY3AtY2xpZW50IGRoY3AtcmVsYXkgZGhjcC1vbXNoZWxsIgorCitGSUxFU18ke1BOfSA9ICIiCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorUkRFUEVORFNfJHtQTn0tc3RhdGljZGV2ID0gIiIKKworRklMRVNfJHtQTn0tc2VydmVyID0gIiR7c2JpbmRpcn0vZGhjcGQgJHtzeXNjb25mZGlyfS9pbml0LmQvZGhjcC1zZXJ2ZXIiCitSUkVDT01NRU5EU18ke1BOfS1zZXJ2ZXIgPSAiZGhjcC1zZXJ2ZXItY29uZmlnIgorCitGSUxFU18ke1BOfS1zZXJ2ZXItY29uZmlnID0gIiR7c3lzY29uZmRpcn0vZGVmYXVsdC9kaGNwLXNlcnZlciAke3N5c2NvbmZkaXJ9L2RoY3AvZGhjcGQuY29uZiIKKworRklMRVNfJHtQTn0tcmVsYXkgPSAiJHtzYmluZGlyfS9kaGNyZWxheSAke3N5c2NvbmZkaXJ9L2luaXQuZC9kaGNwLXJlbGF5ICR7c3lzY29uZmRpcn0vZGVmYXVsdC9kaGNwLXJlbGF5IgorCitGSUxFU18ke1BOfS1jbGllbnQgPSAiJHtiYXNlX3NiaW5kaXJ9L2RoY2xpZW50ICR7YmFzZV9zYmluZGlyfS9kaGNsaWVudC1zY3JpcHQgJHtzeXNjb25mZGlyfS9kaGNwL2RoY2xpZW50LmNvbmYiCitSREVQRU5EU18ke1BOfS1jbGllbnQgPSAiYmFzaCIKKworRklMRVNfJHtQTn0tb21zaGVsbCA9ICIke2JpbmRpcn0vb21zaGVsbCIKKworcGtnX3Bvc3RpbnN0X2RoY3Atc2VydmVyKCkgeworICAgIG1rZGlyIC1wICRELyR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AKKyAgICB0b3VjaCAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwL2RoY3BkLmxlYXNlcworICAgIHRvdWNoICRELyR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AvZGhjcGQ2LmxlYXNlcworfQorCitwa2dfcG9zdGluc3RfZGhjcC1jbGllbnQoKSB7CisgICAgbWtkaXIgLXAgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcAorfQorCitwa2dfcG9zdHJtX2RoY3Atc2VydmVyKCkgeworICAgIHJtIC1mICRELyR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AvZGhjcGQubGVhc2VzCisgICAgcm0gLWYgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNwZDYubGVhc2VzCisKKyAgICBpZiAhIHJtZGlyICRELyR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgZWNobyAiTm90IHJlbW92aW5nICR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AgYXMgaXQgaXMgbm9uLWVtcHR5LiIKKyAgICBmaQorfQorCitwa2dfcG9zdHJtX2RoY3AtY2xpZW50KCkgeworICAgIHJtIC1mICRELyR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AvZGhjbGllbnQubGVhc2VzCisgICAgcm0gLWYgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNsaWVudDYubGVhc2VzCisKKyAgICBpZiAhIHJtZGlyICRELyR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgZWNobyAiTm90IHJlbW92aW5nICR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AgYXMgaXQgaXMgbm9uLWVtcHR5LiIKKyAgICBmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kZWZpbmUtbWFjcm8tX1BBVEhfREhDUERfQ09ORi1hbmQtX1BBVEhfREhDTElFTlRfQ09OLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kZWZpbmUtbWFjcm8tX1BBVEhfREhDUERfQ09ORi1hbmQtX1BBVEhfREhDTElFTlRfQ09OLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZDNjOWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RlZmluZS1tYWNyby1fUEFUSF9ESENQRF9DT05GLWFuZC1fUEFUSF9ESENMSUVOVF9DT04ucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorZGVmaW5lIG1hY3JvIF9QQVRIX0RIQ1BEX0NPTkYgYW5kIF9QQVRIX0RIQ0xJRU5UX0NPTkYKKworVXBzdHJlYW0tU3RhdHVzOiBpbmFwcHJvcHJpYXRlIDxvZSBzcGVjaWZpYz4KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgaW5jbHVkZXMvc2l0ZS5oIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9pbmNsdWRlcy9zaXRlLmggYi9pbmNsdWRlcy9zaXRlLmgKK2luZGV4IGQ4N2IzMDkuLjE3YmM0MGQgMTAwNjQ0CistLS0gYS9pbmNsdWRlcy9zaXRlLmgKKysrKyBiL2luY2x1ZGVzL3NpdGUuaAorQEAgLTEzOSw3ICsxMzksOCBAQAorIC8qIERlZmluZSB0aGlzIGlmIHlvdSB3YW50IHRoZSBkaGNwZC5jb25mIGZpbGUgdG8gZ28gc29tZXdoZXJlIG90aGVyIHRoYW4KKyAgICB0aGUgZGVmYXVsdCBsb2NhdGlvbi4gICBCeSBkZWZhdWx0LCBpdCBnb2VzIGluIC9ldGMvZGhjcGQuY29uZi4gKi8KKyAKKy0vKiAjZGVmaW5lIF9QQVRIX0RIQ1BEX0NPTkYJIi9ldGMvZGhjcGQuY29uZiIgKi8KKysjZGVmaW5lIF9QQVRIX0RIQ1BEX0NPTkYJIi9ldGMvZGhjcC9kaGNwZC5jb25mIgorKyNkZWZpbmUgX1BBVEhfREhDTElFTlRfQ09ORgkiL2V0Yy9kaGNwL2RoY2xpZW50LmNvbmYiCisgCisgLyogTmV0d29yayBBUEkgZGVmaW5pdGlvbnMuICAgWW91IGRvIG5vdCBuZWVkIHRvIGNob29zZSBvbmUgb2YgdGhlc2UgLSBpZgorICAgIHlvdSBkb24ndCBjaG9vc2UsIG9uZSB3aWxsIGJlIGNob3NlbiBmb3IgeW91IGluIHlvdXIgc3lzdGVtJ3MgY29uZmlnCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjbGllbnQtc2NyaXB0LWRyb3AtcmVzb2x2LmNvbmYuZGhjbGllbnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RoY2xpZW50LXNjcmlwdC1kcm9wLXJlc29sdi5jb25mLmRoY2xpZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZWE1NTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RoY2xpZW50LXNjcmlwdC1kcm9wLXJlc29sdi5jb25mLmRoY2xpZW50LnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK2RoY3AtY2xpZW50OiBmaXggaW52b2tlIGRoY2xpZW50LXNjcmlwdCBmYWlsZWQgb24gUmVhZC1vbmx5IGZpbGUgc3lzdGVtCisKK0luIHJlYWQtb25seSBmaWxlIHN5c3RlbSwgJy9ldGMnIGlzIG9uIHRoZSByZWFkb25seSBwYXJ0aXRpb24sCithbmQgJy9ldGMvcmVzb2x2LmNvbmYnIGlzIHN5bWxpbmtlZCB0byBhIHNlcGFyYXRlIHdyaXRhYmxlCitwYXJ0aXRpb24uCisKK0luIHRoaXMgc2l0dWF0aW9uLCB3ZSBzaG91bGQgdXNlIHNoZWxsIHZhcmlhYmxlIHRvIGluc3RlYWQgb2YKK3RlbXAgZmlsZXMgJy9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQnIGFuZCAnL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudDYnLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNsaWVudC9zY3JpcHRzL2xpbnV4IHwgMjAgKysrKysrKysrLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NsaWVudC9zY3JpcHRzL2xpbnV4IGIvY2xpZW50L3NjcmlwdHMvbGludXgKKy0tLSBhL2NsaWVudC9zY3JpcHRzL2xpbnV4CisrKysgYi9jbGllbnQvc2NyaXB0cy9saW51eAorQEAgLTI3LDI3ICsyNywyNSBAQCBpcD0vc2Jpbi9pcAorIAorIG1ha2VfcmVzb2x2X2NvbmYoKSB7CisgICBpZiBbIHgiJG5ld19kb21haW5fbmFtZV9zZXJ2ZXJzIiAhPSB4IF07IHRoZW4KKy0gICAgY2F0IC9kZXYvbnVsbCA+IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQKKy0gICAgY2htb2QgNjQ0IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQKKysgICAgcmVzb2x2X2NvbmY9IiIKKyAgICAgaWYgWyB4IiRuZXdfZG9tYWluX3NlYXJjaCIgIT0geCBdOyB0aGVuCistICAgICAgZWNobyBzZWFyY2ggJG5ld19kb21haW5fc2VhcmNoID4+IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQKKysgICAgICByZXNvbHZfY29uZj0ic2VhcmNoICR7bmV3X2RvbWFpbl9zZWFyY2h9XG4iCisgICAgIGVsaWYgWyB4IiRuZXdfZG9tYWluX25hbWUiICE9IHggXTsgdGhlbgorICAgICAgICMgTm90ZSB0aGF0IHRoZSBESENQICdEb21haW4gTmFtZSBPcHRpb24nIGlzIHJlYWxseSBqdXN0IGEgZG9tYWluCisgICAgICAgIyBuYW1lLCBhbmQgdGhhdCB0aGlzIHByYWN0aWNlIG9mIHVzaW5nIHRoZSBkb21haW4gbmFtZSBvcHRpb24gYXMKKyAgICAgICAjIGEgc2VhcmNoIHBhdGggaXMgYm90aCBub25zdGFuZGFyZCBhbmQgZGVwcmVjYXRlZC4KKy0gICAgICBlY2hvIHNlYXJjaCAkbmV3X2RvbWFpbl9uYW1lID4+IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQKKysgICAgICByZXNvbHZfY29uZj0ic2VhcmNoICR7bmV3X2RvbWFpbl9uYW1lfVxuIgorICAgICBmaQorICAgICBmb3IgbmFtZXNlcnZlciBpbiAkbmV3X2RvbWFpbl9uYW1lX3NlcnZlcnM7IGRvCistICAgICAgZWNobyBuYW1lc2VydmVyICRuYW1lc2VydmVyID4+L2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudAorKyAgICAgIHJlc29sdl9jb25mPSIke3Jlc29sdl9jb25mfW5hbWVzZXJ2ZXIgJHtuYW1lc2VydmVyfVxuIgorICAgICBkb25lCisgCistICAgIG12IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQgL2V0Yy9yZXNvbHYuY29uZgorKyAgICBlY2hvIC1lICIke3Jlc29sdl9jb25mfSIgPiAvZXRjL3Jlc29sdi5jb25mCisgICBlbGlmIFsgIngke25ld19kaGNwNl9uYW1lX3NlcnZlcnN9IiAhPSB4IF0gOyB0aGVuCistICAgIGNhdCAvZGV2L251bGwgPiAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NgorLSAgICBjaG1vZCA2NDQgL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudDYKKysgICAgcmVzb2x2X2NvbmY9IiIKKyAKKyAgICAgaWYgWyAieCR7bmV3X2RoY3A2X2RvbWFpbl9zZWFyY2h9IiAhPSB4IF0gOyB0aGVuCistICAgICAgZWNobyBzZWFyY2ggJHtuZXdfZGhjcDZfZG9tYWluX3NlYXJjaH0gPj4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudDYKKysgICAgICByZXNvbHZfY29uZj0ic2VhcmNoICR7bmV3X2RoY3A2X2RvbWFpbl9zZWFyY2h9XG4iCisgICAgIGZpCisgICAgIHNob3B0IC1zIG5vY2FzZW1hdGNoIAorICAgICBmb3IgbmFtZXNlcnZlciBpbiAke25ld19kaGNwNl9uYW1lX3NlcnZlcnN9IDsgZG8KK0BAIC01OSwxMSArNTcsMTEgQEAgbWFrZV9yZXNvbHZfY29uZigpIHsKKyAgICAgICBlbHNlCisgCXpvbmVfaWQ9CisgICAgICAgZmkKKy0gICAgICBlY2hvIG5hbWVzZXJ2ZXIgJHtuYW1lc2VydmVyfSR6b25lX2lkID4+IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQ2CisrICAgICAgcmVzb2x2X2NvbmY9IiR7cmVzb2x2X2NvbmZ9bmFtZXNlcnZlciAke25hbWVzZXJ2ZXJ9JHpvbmVfaWRcbiIKKyAgICAgZG9uZQorICAgICBzaG9wdCAtdSBub2Nhc2VtYXRjaCAKKyAKKy0gICAgbXYgL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudDYgL2V0Yy9yZXNvbHYuY29uZgorKyAgICBlY2hvIC1lICIke3Jlc29sdl9jb25mfSIgPiAvZXRjL3Jlc29sdi5jb25mCisgICBmaQorIH0KKyAKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RoY3AtMy4wLjMtZGhjbGllbnQtZGJ1cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjcC0zLjAuMy1kaGNsaWVudC1kYnVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YTY2NmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RoY3AtMy4wLjMtZGhjbGllbnQtZGJ1cy5wYXRjaApAQCAtMCwwICsxLDg2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbl0KKworLS0tIGNsaWVudC9zY3JpcHRzL2JzZG9zCisrKysgY2xpZW50L3NjcmlwdHMvYnNkb3MKK0BAIC00Nyw2ICs0NywxMSBAQAorICAgICAuIC9ldGMvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzCisgICBmaQorICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKKysgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCisrICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKKysgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAorKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgorKyAgZmkKKyAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIAorLS0tIGNsaWVudC9zY3JpcHRzL2ZyZWVic2QKKysrKyBjbGllbnQvc2NyaXB0cy9mcmVlYnNkCitAQCAtNTcsNiArNTcsMTEgQEAKKyAgICAgLiAvZXRjL2RoY3AvZGhjbGllbnQtZXhpdC1ob29rcworICAgZmkKKyAjIHByb2JhYmx5IHNob3VsZCBkbyBzb21ldGhpbmcgd2l0aCBleGl0IHN0YXR1cyBvZiB0aGUgbG9jYWwgc2NyaXB0CisrICBpZiBbIHgkZGhjX2RidXMgIT0geCAtYSAkZXhpdF9zdGF0dXMgLWVxIDAgXTsgdGhlbgorKyAgICBkYnVzLXNlbmQgLS1zeXN0ZW0gLS1kZXN0PWNvbS5yZWRoYXQuZGhjcCBcCisrICAgICAgLS10eXBlPW1ldGhvZF9jYWxsIC9jb20vcmVkaGF0L2RoY3AvJGludGVyZmFjZSBjb20ucmVkaGF0LmRoY3Auc2V0IFwKKysgICAgICAnc3RyaW5nOiciYGVudiB8IGdyZXAgLUV2ICdeKFBBVEh8U0hMVkx8X3xQV0R8ZGhjX2RidXMpXD0nYCIKKysgIGZpCisgICBleGl0ICRleGl0X3N0YXR1cworIH0KKyAKKy0tLSBjbGllbnQvc2NyaXB0cy9saW51eAorKysrIGNsaWVudC9zY3JpcHRzL2xpbnV4CitAQCAtNjksNiArNjksMTEgQEAKKyAgICAgLiAvZXRjL2RoY3AvZGhjbGllbnQtZXhpdC1ob29rcworICAgZmkKKyAjIHByb2JhYmx5IHNob3VsZCBkbyBzb21ldGhpbmcgd2l0aCBleGl0IHN0YXR1cyBvZiB0aGUgbG9jYWwgc2NyaXB0CisrICBpZiBbIHgkZGhjX2RidXMgIT0geCAtYSAkZXhpdF9zdGF0dXMgLWVxIDAgXTsgdGhlbgorKyAgICBkYnVzLXNlbmQgLS1zeXN0ZW0gLS1kZXN0PWNvbS5yZWRoYXQuZGhjcCBcCisrICAgICAgLS10eXBlPW1ldGhvZF9jYWxsIC9jb20vcmVkaGF0L2RoY3AvJGludGVyZmFjZSBjb20ucmVkaGF0LmRoY3Auc2V0IFwKKysgICAgICAnc3RyaW5nOiciYGVudiB8IGdyZXAgLUV2ICdeKFBBVEh8U0hMVkx8X3xQV0R8ZGhjX2RidXMpXD0nYCIKKysgIGZpCisgICBleGl0ICRleGl0X3N0YXR1cworIH0KKyAKKy0tLSBjbGllbnQvc2NyaXB0cy9uZXRic2QKKysrKyBjbGllbnQvc2NyaXB0cy9uZXRic2QKK0BAIC00Nyw2ICs0NywxMSBAQAorICAgICAuIC9ldGMvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzCisgICBmaQorICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKKysgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCisrICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKKysgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAorKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgorKyAgZmkKKyAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIAorLS0tIGNsaWVudC9zY3JpcHRzL29wZW5ic2QKKysrKyBjbGllbnQvc2NyaXB0cy9vcGVuYnNkCitAQCAtNDcsNiArNDcsMTEgQEAKKyAgICAgLiAvZXRjL2RoY3AvZGhjbGllbnQtZXhpdC1ob29rcworICAgZmkKKyAjIHByb2JhYmx5IHNob3VsZCBkbyBzb21ldGhpbmcgd2l0aCBleGl0IHN0YXR1cyBvZiB0aGUgbG9jYWwgc2NyaXB0CisrICBpZiBbIHgkZGhjX2RidXMgIT0geCAtYSAkZXhpdF9zdGF0dXMgLWVxIDAgXTsgdGhlbgorKyAgICBkYnVzLXNlbmQgLS1zeXN0ZW0gLS1kZXN0PWNvbS5yZWRoYXQuZGhjcCBcCisrICAgICAgLS10eXBlPW1ldGhvZF9jYWxsIC9jb20vcmVkaGF0L2RoY3AvJGludGVyZmFjZSBjb20ucmVkaGF0LmRoY3Auc2V0IFwKKysgICAgICAnc3RyaW5nOiciYGVudiB8IGdyZXAgLUV2ICdeKFBBVEh8U0hMVkx8X3xQV0R8ZGhjX2RidXMpXD0nYCIKKysgIGZpCisgICBleGl0ICRleGl0X3N0YXR1cworIH0KKyAKKy0tLSBjbGllbnQvc2NyaXB0cy9zb2xhcmlzCisrKysgY2xpZW50L3NjcmlwdHMvc29sYXJpcworQEAgLTQ3LDYgKzQ3LDExIEBACisgICAgIC4gL2V0Yy9kaGNwL2RoY2xpZW50LWV4aXQtaG9va3MKKyAgIGZpCisgIyBwcm9iYWJseSBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggZXhpdCBzdGF0dXMgb2YgdGhlIGxvY2FsIHNjcmlwdAorKyAgaWYgWyB4JGRoY19kYnVzICE9IHggLWEgJGV4aXRfc3RhdHVzIC1lcSAwIF07IHRoZW4KKysgICAgZGJ1cy1zZW5kIC0tc3lzdGVtIC0tZGVzdD1jb20ucmVkaGF0LmRoY3AgXAorKyAgICAgIC0tdHlwZT1tZXRob2RfY2FsbCAvY29tL3JlZGhhdC9kaGNwLyRpbnRlcmZhY2UgY29tLnJlZGhhdC5kaGNwLnNldCBcCisrICAgICAgJ3N0cmluZzonImBlbnYgfCBncmVwIC1FdiAnXihQQVRIfFNITFZMfF98UFdEfGRoY19kYnVzKVw9J2AiCisrICBmaQorICAgZXhpdCAkZXhpdF9zdGF0dXMKKyB9CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2ZpeC1leHRlcm5hbC1iaW5kLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9maXgtZXh0ZXJuYWwtYmluZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjkxZmRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9maXgtZXh0ZXJuYWwtYmluZC5wYXRjaApAQCAtMCwwICsxLDExMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKzExLzMwLzIwMTAKKy0td2l0aC1saWJiaW5kPVBBVEggaXMgYXZhaWxhYmxlIGJ1dCBub3QgdXNlZCBieSBNYWtlZmlsZSwKK3RoaXMgcGF0Y2ggaXMgdG8gYWxsb3cgYnVpbGRpbmcgd2l0aCBleHRlcm5hbCBiaW5kCisKK1NpZ25lZC1vZmYtYnk6IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorCitJbmRleDogZGhjcC00LjMuMC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRoY3AtNC4zLjAub3JpZy9NYWtlZmlsZS5hbQorKysrIGRoY3AtNC4zLjAvTWFrZWZpbGUuYW0KK0BAIC0yNSw3ICsyNSw3IEBAIEVYVFJBX0RJU1QgPSBSRUxOT1RFUyBMSUNFTlNFIFwKKyAJICAgICBiaW5kL01ha2VmaWxlIGJpbmQvYmluZC50YXIuZ3ogYmluZC92ZXJzaW9uLnRtcCBcCisgCSAgICAgY29tbW9uL3Rlc3RzL0F0ZmZpbGUgc2VydmVyL3Rlc3RzL0F0ZmZpbGUKKyAKKy1TVUJESVJTID0gYmluZCBpbmNsdWRlcyB0ZXN0cyBjb21tb24gZHN0IG9tYXBpcCBjbGllbnQgZGhjcGN0bCByZWxheSBzZXJ2ZXIKKytTVUJESVJTID0gaW5jbHVkZXMgdGVzdHMgY29tbW9uIGRzdCBvbWFwaXAgY2xpZW50IGRoY3BjdGwgcmVsYXkgc2VydmVyCisgCisgbm9iYXNlX2luY2x1ZGVfSEVBREVSUyA9IGRoY3BjdGwvZGhjcGN0bC5oCisgCitJbmRleDogZGhjcC00LjMuMC9jbGllbnQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkaGNwLTQuMy4wLm9yaWcvY2xpZW50L01ha2VmaWxlLmFtCisrKysgZGhjcC00LjMuMC9jbGllbnQvTWFrZWZpbGUuYW0KK0BAIC00LDggKzQsOCBAQCBkaGNsaWVudF9TT1VSQ0VTID0gY2xwYXJzZS5jIGRoY2xpZW50LmMKKyAJCSAgIHNjcmlwdHMvYnNkb3Mgc2NyaXB0cy9mcmVlYnNkIHNjcmlwdHMvbGludXggc2NyaXB0cy9tYWNvcyBcCisgCQkgICBzY3JpcHRzL25ldGJzZCBzY3JpcHRzL25leHRzdGVwIHNjcmlwdHMvb3BlbmJzZCBcCisgCQkgICBzY3JpcHRzL3NvbGFyaXMgc2NyaXB0cy9vcGVud3J0CistZGhjbGllbnRfTERBREQgPSAuLi9jb21tb24vbGliZGhjcC5hIC4uL29tYXBpcC9saWJvbWFwaS5hIC4uL2JpbmQvbGliL2xpYmlycy5hIFwKKy0JCSAuLi9iaW5kL2xpYi9saWJkbnMuYSAuLi9iaW5kL2xpYi9saWJpc2NjZmcuYSAuLi9iaW5kL2xpYi9saWJpc2MuYQorK2RoY2xpZW50X0xEQUREID0gLi4vY29tbW9uL2xpYmRoY3AuYSAuLi9vbWFwaXAvbGlib21hcGkuYSAkKGxpYmJpbmQpL2xpYmlycy5hIFwKKysJCSAkKGxpYmJpbmQpL2xpYmRucy5hICQobGliYmluZCkvbGliaXNjY2ZnLmEgJChsaWJiaW5kKS9saWJpc2MuYQorIG1hbl9NQU5TID0gZGhjbGllbnQuOCBkaGNsaWVudC1zY3JpcHQuOCBkaGNsaWVudC5jb25mLjUgZGhjbGllbnQubGVhc2VzLjUKKyBFWFRSQV9ESVNUID0gJChtYW5fTUFOUykKKyAKK0luZGV4OiBkaGNwLTQuMy4wL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRoY3AtNC4zLjAub3JpZy9jb25maWd1cmUuYWMKKysrKyBkaGNwLTQuMy4wL2NvbmZpZ3VyZS5hYworQEAgLTU2Niw2ICs1NjYsNyBAQCBubykKKyAJbGliYmluZD0iJHVzZV9saWJiaW5kIgorIAk7OworIGVzYWMKKytBQ19TVUJTVChbbGliYmluZF0pCisgCisgIyBPcGVuTERBUCBzdXBwb3J0LgorIEFDX0FSR19XSVRIKGxkYXAsCitJbmRleDogZGhjcC00LjMuMC9kaGNwY3RsL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL2RoY3BjdGwvTWFrZWZpbGUuYW0KKysrKyBkaGNwLTQuMy4wL2RoY3BjdGwvTWFrZWZpbGUuYW0KK0BAIC02LDEyICs2LDEyIEBAIEVYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKQorIAorIG9tc2hlbGxfU09VUkNFUyA9IG9tc2hlbGwuYworIG9tc2hlbGxfTERBREQgPSBsaWJkaGNwY3RsLmEgLi4vY29tbW9uL2xpYmRoY3AuYSAuLi9vbWFwaXAvbGlib21hcGkuYSBcCistCSAgICAgICAgLi4vYmluZC9saWIvbGliaXJzLmEgLi4vYmluZC9saWIvbGliZG5zLmEgXAorLQkgICAgICAgIC4uL2JpbmQvbGliL2xpYmlzY2NmZy5hIC4uL2JpbmQvbGliL2xpYmlzYy5hCisrCSAgICAgICAgJChsaWJiaW5kKS9saWJpcnMuYSAkKGxpYmJpbmQpL2xpYmRucy5hIFwKKysJICAgICAgICAkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEKKyAKKyBsaWJkaGNwY3RsX2FfU09VUkNFUyA9IGRoY3BjdGwuYyBjYWxsYmFjay5jIHJlbW90ZS5jCisgCisgY2x0ZXN0X1NPVVJDRVMgPSBjbHRlc3QuYworIGNsdGVzdF9MREFERCA9IGxpYmRoY3BjdGwuYSAuLi9jb21tb24vbGliZGhjcC5hIC4uL29tYXBpcC9saWJvbWFwaS5hIFwKKy0JICAgICAgIC4uL2JpbmQvbGliL2xpYmlycy5hIC4uL2JpbmQvbGliL2xpYmRucy5hIFwKKy0gICAgICAgICAgICAgICAuLi9iaW5kL2xpYi9saWJpc2NjZmcuYSAuLi9iaW5kL2xpYi9saWJpc2MuYQorKwkgICAgICAgJChsaWJiaW5kKS9saWJpcnMuYSAkKGxpYmJpbmQpL2xpYmRucy5hIFwKKysgICAgICAgICAgICAgICAkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEKK0luZGV4OiBkaGNwLTQuMy4wL29tYXBpcC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRoY3AtNC4zLjAub3JpZy9vbWFwaXAvTWFrZWZpbGUuYW0KKysrKyBkaGNwLTQuMy4wL29tYXBpcC9NYWtlZmlsZS5hbQorQEAgLTEwLDYgKzEwLDYgQEAgbWFuX01BTlMgPSBvbWFwaS4zCisgRVhUUkFfRElTVCA9ICQobWFuX01BTlMpCisgCisgc3Z0ZXN0X1NPVVJDRVMgPSB0ZXN0LmMKKy1zdnRlc3RfTERBREQgPSBsaWJvbWFwaS5hIC4uL2JpbmQvbGliL2xpYmlycy5hIC4uL2JpbmQvbGliL2xpYmRucy5hIFwKKy0JCS4uL2JpbmQvbGliL2xpYmlzY2NmZy5hIC4uL2JpbmQvbGliL2xpYmlzYy5hCisrc3Z0ZXN0X0xEQUREID0gbGlib21hcGkuYSAkKGxpYmJpbmQpL2xpYmlycy5hICQobGliYmluZCkvbGliZG5zLmEgXAorKwkJJChsaWJiaW5kKS9saWJpc2NjZmcuYSAkKGxpYmJpbmQpL2xpYmlzYy5hCisgCitJbmRleDogZGhjcC00LjMuMC9yZWxheS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRoY3AtNC4zLjAub3JpZy9yZWxheS9NYWtlZmlsZS5hbQorKysrIGRoY3AtNC4zLjAvcmVsYXkvTWFrZWZpbGUuYW0KK0BAIC0zLDggKzMsOCBAQCBBTV9DUFBGTEFHUyA9IC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0Cisgc2Jpbl9QUk9HUkFNUyA9IGRoY3JlbGF5CisgZGhjcmVsYXlfU09VUkNFUyA9IGRoY3JlbGF5LmMKKyBkaGNyZWxheV9MREFERCA9IC4uL2NvbW1vbi9saWJkaGNwLmEgLi4vb21hcGlwL2xpYm9tYXBpLmEgXAorLQkJIC4uL2JpbmQvbGliL2xpYmlycy5hIC4uL2JpbmQvbGliL2xpYmRucy5hIFwKKy0JCSAuLi9iaW5kL2xpYi9saWJpc2NjZmcuYSAuLi9iaW5kL2xpYi9saWJpc2MuYQorKwkJICQobGliYmluZCkvbGliaXJzLmEgJChsaWJiaW5kKS9saWJkbnMuYSBcCisrCQkgJChsaWJiaW5kKS9saWJpc2NjZmcuYSAkKGxpYmJpbmQpL2xpYmlzYy5hCisgbWFuX01BTlMgPSBkaGNyZWxheS44CisgRVhUUkFfRElTVCA9ICQobWFuX01BTlMpCisgCitJbmRleDogZGhjcC00LjMuMC9zZXJ2ZXIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkaGNwLTQuMy4wLm9yaWcvc2VydmVyL01ha2VmaWxlLmFtCisrKysgZGhjcC00LjMuMC9zZXJ2ZXIvTWFrZWZpbGUuYW0KK0BAIC0xNCw4ICsxNCw4IEBAIGRoY3BkX1NPVVJDRVMgPSBkaGNwZC5jIGRoY3AuYyBib290cC5jIGMKKyAKKyBkaGNwZF9DRkxBR1MgPSAkKExEQVBfQ0ZMQUdTKQorIGRoY3BkX0xEQUREID0gLi4vY29tbW9uL2xpYmRoY3AuYSAuLi9vbWFwaXAvbGlib21hcGkuYSBcCistCSAgICAgIC4uL2RoY3BjdGwvbGliZGhjcGN0bC5hIC4uL2JpbmQvbGliL2xpYmlycy5hIFwKKy0JICAgICAgLi4vYmluZC9saWIvbGliZG5zLmEgLi4vYmluZC9saWIvbGliaXNjY2ZnLmEgLi4vYmluZC9saWIvbGliaXNjLmEKKysJICAgICAgLi4vZGhjcGN0bC9saWJkaGNwY3RsLmEgJChsaWJiaW5kKS9saWJpcnMuYSBcCisrCSAgICAgICQobGliYmluZCkvbGliZG5zLmEgJChsaWJiaW5kKS9saWJpc2NjZmcuYSAkKGxpYmJpbmQpL2xpYmlzYy5hCisgCisgbWFuX01BTlMgPSBkaGNwZC44IGRoY3BkLmNvbmYuNSBkaGNwZC5sZWFzZXMuNQorIEVYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9maXhzZXBidWlsZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZml4c2VwYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRlNzVhMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZml4c2VwYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwxMDggQEAKK0ZpeCBvdXQgb2YgdHJlZSBidWlsZHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTMvMDMvMjEKKworUmViYXNlIHRvIDQuMy4xCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjbGllbnQvTWFrZWZpbGUuYW0gIHwgNiArKysrLS0KKyBjb21tb24vTWFrZWZpbGUuYW0gIHwgMiArLQorIGRoY3BjdGwvTWFrZWZpbGUuYW0gfCAyICsrCisgZHN0L01ha2VmaWxlLmFtICAgICB8IDIgKy0KKyBvbWFwaXAvTWFrZWZpbGUuYW0gIHwgMiArKworIHJlbGF5L01ha2VmaWxlLmFtICAgfCAyICstCisgc2VydmVyL01ha2VmaWxlLmFtICB8IDIgKy0KKyA3IGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jbGllbnQvTWFrZWZpbGUuYW0gYi9jbGllbnQvTWFrZWZpbGUuYW0KK2luZGV4IDg0MTE5NjAuLjE3NDBmNzIgMTAwNjQ0CistLS0gYS9jbGllbnQvTWFrZWZpbGUuYW0KKysrKyBiL2NsaWVudC9NYWtlZmlsZS5hbQorQEAgLTQsNiArNCw4IEBACisgIyBwcm9kdWN0aW9uIGNvZGUuIFNhZGx5LCB3ZSBhcmUgbm90IHRoZXJlIHlldC4KKyBTVUJESVJTID0gLiB0ZXN0cworIAorK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzCisrCisgZGlzdF9zeXNjb25mX0RBVEEgPSBkaGNsaWVudC5jb25mLmV4YW1wbGUKKyBzYmluX1BST0dSQU1TID0gZGhjbGllbnQKKyBkaGNsaWVudF9TT1VSQ0VTID0gY2xwYXJzZS5jIGRoY2xpZW50LmMgZGhjNi5jIFwKK0BAIC0xNyw4ICsxOSw4IEBAIEVYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKQorIAorIGRoY2xpZW50Lm86IGRoY2xpZW50LmMKKyAJJChDT01QSUxFKSAtRENMSUVOVF9QQVRIPSciUEFUSD0kKHNiaW5kaXIpOi9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluIicgXAorLQkJICAgLURMT0NBTFNUQVRFRElSPSciJChsb2NhbHN0YXRlZGlyKSInIC1jIGRoY2xpZW50LmMKKysJCSAgIC1ETE9DQUxTVEFURURJUj0nIiQobG9jYWxzdGF0ZWRpcikiJyAtYyAkKHNyY2RpcikvZGhjbGllbnQuYworIAorIGRoYzYubzogZGhjNi5jCisgCSQoQ09NUElMRSkgLURDTElFTlRfUEFUSD0nIlBBVEg9JChzYmluZGlyKTovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbiInIFwKKy0JCSAgIC1ETE9DQUxTVEFURURJUj0nIiQobG9jYWxzdGF0ZWRpcikiJyAtYyBkaGM2LmMKKysJCSAgIC1ETE9DQUxTVEFURURJUj0nIiQobG9jYWxzdGF0ZWRpcikiJyAtYyAkKHNyY2RpcikvZGhjNi5jCitkaWZmIC0tZ2l0IGEvY29tbW9uL01ha2VmaWxlLmFtIGIvY29tbW9uL01ha2VmaWxlLmFtCitpbmRleCBlZGRlZjA1Li41Y2UwNDVmIDEwMDY0NAorLS0tIGEvY29tbW9uL01ha2VmaWxlLmFtCisrKysgYi9jb21tb24vTWFrZWZpbGUuYW0KK0BAIC0xLDQgKzEsNCBAQAorLUFNX0NQUEZMQUdTID0gLUkuLiAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJworK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzIC1JJCh0b3Bfc3JjZGlyKSAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJworIEFNX0NGTEFHUyA9ICQoTERBUF9DRkxBR1MpCisgCisgbm9pbnN0X0xJQlJBUklFUyA9IGxpYmRoY3AuYQorZGlmZiAtLWdpdCBhL2RoY3BjdGwvTWFrZWZpbGUuYW0gYi9kaGNwY3RsL01ha2VmaWxlLmFtCitpbmRleCAyOTg3YTUzLi5jZDcyZDc1IDEwMDY0NAorLS0tIGEvZGhjcGN0bC9NYWtlZmlsZS5hbQorKysrIGIvZGhjcGN0bC9NYWtlZmlsZS5hbQorQEAgLTEsMyArMSw1IEBACisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMgLUkkKHRvcF9zcmNkaXIpCisrCisgYmluX1BST0dSQU1TID0gb21zaGVsbAorIGxpYl9MSUJSQVJJRVMgPSBsaWJkaGNwY3RsLmEKKyBub2luc3RfUFJPR1JBTVMgPSBjbHRlc3QKK2RpZmYgLS1naXQgYS9kc3QvTWFrZWZpbGUuYW0gYi9kc3QvTWFrZWZpbGUuYW0KK2luZGV4IDg5MzdmZTguLmExNDc5OGIgMTAwNjQ0CistLS0gYS9kc3QvTWFrZWZpbGUuYW0KKysrKyBiL2RzdC9NYWtlZmlsZS5hbQorQEAgLTEsNCArMSw0IEBACistQU1fQ1BQRkxBR1MgPSAtRE1JTklSRVNfTElCIC1ESE1BQ19NRDUKKytBTV9DUFBGTEFHUyA9IC1ETUlOSVJFU19MSUIgLURITUFDX01ENSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKKyAKKyBsaWJfTElCUkFSSUVTID0gbGliZHN0LmEKKyAKK2RpZmYgLS1naXQgYS9vbWFwaXAvTWFrZWZpbGUuYW0gYi9vbWFwaXAvTWFrZWZpbGUuYW0KK2luZGV4IDUwNzQ0NzkuLjljMGZhYjMgMTAwNjQ0CistLS0gYS9vbWFwaXAvTWFrZWZpbGUuYW0KKysrKyBiL29tYXBpcC9NYWtlZmlsZS5hbQorQEAgLTEsMyArMSw1IEBACisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKKysKKyBsaWJfTElCUkFSSUVTID0gbGlib21hcGkuYQorIG5vaW5zdF9QUk9HUkFNUyA9IHN2dGVzdAorIAorZGlmZiAtLWdpdCBhL3JlbGF5L01ha2VmaWxlLmFtIGIvcmVsYXkvTWFrZWZpbGUuYW0KK2luZGV4IGVjNzJhMzEuLmY4NDIwNzEgMTAwNjQ0CistLS0gYS9yZWxheS9NYWtlZmlsZS5hbQorKysrIGIvcmVsYXkvTWFrZWZpbGUuYW0KK0BAIC0xLDQgKzEsNCBAQAorLUFNX0NQUEZMQUdTID0gLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3RhdGVkaXJAIicKKytBTV9DUFBGTEFHUyA9IC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworIAorIHNiaW5fUFJPR1JBTVMgPSBkaGNyZWxheQorIGRoY3JlbGF5X1NPVVJDRVMgPSBkaGNyZWxheS5jCitkaWZmIC0tZ2l0IGEvc2VydmVyL01ha2VmaWxlLmFtIGIvc2VydmVyL01ha2VmaWxlLmFtCitpbmRleCBhNDQ2ZjBiLi5kMGI4NzNhIDEwMDY0NAorLS0tIGEvc2VydmVyL01ha2VmaWxlLmFtCisrKysgYi9zZXJ2ZXIvTWFrZWZpbGUuYW0KK0BAIC00LDcgKzQsNyBAQAorICMgcHJvZHVjdGlvbiBjb2RlLiBTYWRseSwgd2UgYXJlIG5vdCB0aGVyZSB5ZXQuCisgU1VCRElSUyA9IC4gdGVzdHMKKyAKKy1BTV9DUFBGTEFHUyA9IC1JLi4gLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3RhdGVkaXJAIicKKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKSAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJyAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKKyAKKyBkaXN0X3N5c2NvbmZfREFUQSA9IGRoY3BkLmNvbmYuZXhhbXBsZQorIHNiaW5fUFJPR1JBTVMgPSBkaGNwZAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2xpbmstd2l0aC1sY3J5cHRvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9saW5rLXdpdGgtbGNyeXB0by5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2UxMGIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9saW5rLXdpdGgtbGNyeXB0by5wYXRjaApAQCAtMCwwICsxLDI1IEBACitBdXRob3I6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KK0RhdGU6ICAgVGh1IEZlYiAyIDIzOjU5OjExIDIwMTIgKzAyMDAKKworRnJvbSA0LjIuMCBmaW5hbCByZWxlYXNlLCAtbGNyeXB0byBjaGVjayB3YXMgcmVtb3ZlZCBhbmQgd2UgY29tcGlsZSBzdGF0aWMgbGlicmFyaWVzCitmcm9tIGJpbmQgdGhhdCBhcmUgbGlua2VkIHRvIGxpYmNyeXB0by4gVGhpcyBpcyB3aHkgaSBhZGRlZCBhIHBhdGNoIGluIG9yZGVyIHRvIGFkZAorLWxjcnlwdG8gdG8gTElCUy4KKworU2lnbmVkLW9mZi1ieTogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBkaGNwLTQuMi4zLVAyLXIwL2RoY3AtNC4yLjMtUDIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjIuMy1QMi5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEyLTAyLTAyIDE4OjA0OjIwLjg0MzAyMzE5NiArMDIwMAorKysrIGRoY3AtNC4yLjMtUDIvY29uZmlndXJlLmFjCTIwMTItMDItMDIgMTc6NTg6MTYuMDAwMDAwMDAwICswMjAwCitAQCAtNDU2LDYgKzQ1NiwxMCBAQAorICMgTG9vayBmb3Igb3B0aW9uYWwgaGVhZGVycy4KKyBBQ19DSEVDS19IRUFERVJTKHN5cy9zb2NrZXQuaCBuZXQvaWZfZGwuaCBuZXQvaWY2LmggcmVnZXguaCkKKyAKKysjIGZpbmQgYW4gTUQ1IGxpYnJhcnkKKytBQ19TRUFSQ0hfTElCUyhNRDVfSW5pdCwgW2NyeXB0b10pCisrQUNfU0VBUkNIX0xJQlMoTUQ1SW5pdCwgW2NyeXB0b10pCisrCisgIyBTb2xhcmlzIG5lZWRzIHNvbWUgbGlicmFyaWVzIGZvciBmdW5jdGlvbnMKKyBBQ19TRUFSQ0hfTElCUyhzb2NrZXQsIFtzb2NrZXRdKQorIEFDX1NFQVJDSF9MSUJTKGluZXRfbnRvYSwgW25zbF0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL3JlcGxhY2UtaWZjb25maWctcm91dGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL3JlcGxhY2UtaWZjb25maWctcm91dGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFkZDZhNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvcmVwbGFjZS1pZmNvbmZpZy1yb3V0ZS5wYXRjaApAQCAtMCwwICsxLDE3NiBAQAorRm91bmQgdGhpcyBwYXRjaCBoZXJlOgoraHR0cHM6Ly9saXN0cy5pc2Mub3JnL3BpcGVybWFpbC9kaGNwLXVzZXJzLzIwMTEtSmFudWFyeS8wMTI5MTAuaHRtbAorCithbmQgbWFkZSBzb21lIGFkanVzdG1lbnRzL3VwZGF0ZXMgdG8gbWFrZSBpdCB3b3JrIHdpdGggdGhpcyB2ZXJzaW9uLgorV2Fzbid0IGFibGUgdG8gZmluZCB0aGF0IHdoeSB0aGlzIHBhdGNoIHdhcyBub3QgYWNjZXB0ZWQgYnkgSVNDIERIQ1AgZGV2ZWxvcGVycy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE11aGFtbWFkIFNoYWtlZWwgPG11aGFtbWFkX3NoYWtlZWxAbWVudG9yLmNvbT4KKworLS0tIGRoY3AtNC4yLjUtUDEvY2xpZW50L3NjcmlwdHMvbGludXgub3JpZwkyMDEzLTA5LTA0IDEyOjIyOjU1LjAwMDAwMDAwMCArMDUwMAorKysrIGRoY3AtNC4yLjUtUDEvY2xpZW50L3NjcmlwdHMvbGludXgJMjAxMy0wOS0wNCAxMjo1MjoxOS4wNjg3NjE1MTggKzA1MDAKK0BAIC0xMDMsMTcgKzEwMywxMSBAQAorIGlmIFsgeCRvbGRfYnJvYWRjYXN0X2FkZHJlc3MgIT0geCBdOyB0aGVuCisgICBvbGRfYnJvYWRjYXN0X2FyZz0iYnJvYWRjYXN0ICRvbGRfYnJvYWRjYXN0X2FkZHJlc3MiCisgZmkKKy1pZiBbIHgkbmV3X3N1Ym5ldF9tYXNrICE9IHggXTsgdGhlbgorLSAgbmV3X3N1Ym5ldF9hcmc9Im5ldG1hc2sgJG5ld19zdWJuZXRfbWFzayIKKy1maQorLWlmIFsgeCRvbGRfc3VibmV0X21hc2sgIT0geCBdOyB0aGVuCistICBvbGRfc3VibmV0X2FyZz0ibmV0bWFzayAkb2xkX3N1Ym5ldF9tYXNrIgorLWZpCistaWYgWyB4JGFsaWFzX3N1Ym5ldF9tYXNrICE9IHggXTsgdGhlbgorLSAgYWxpYXNfc3VibmV0X2FyZz0ibmV0bWFzayAkYWxpYXNfc3VibmV0X21hc2siCisraWYgWyAtbiAiJG5ld19zdWJuZXRfbWFzayIgXTsgdGhlbgorKyAgICBuZXdfbWFzaz0iLyRuZXdfc3VibmV0X21hc2siCisgZmkKKy1pZiBbIHgkbmV3X2ludGVyZmFjZV9tdHUgIT0geCBdOyB0aGVuCistICBtdHVfYXJnPSJtdHUgJG5ld19pbnRlcmZhY2VfbXR1IgorK2lmIFsgLW4gIiRhbGlhc19zdWJuZXRfbWFzayIgXTsgdGhlbgorKyAgICBhbGlhc19tYXNrPSIvJGFsaWFzX3N1Ym5ldF9tYXNrIgorIGZpCisgaWYgWyB4JElGX01FVFJJQyAhPSB4IF07IHRoZW4KKyAgIG1ldHJpY19hcmc9Im1ldHJpYyAkSUZfTUVUUklDIgorQEAgLTEyNyw5ICsxMjEsOSBAQAorIGlmIFsgeCRyZWFzb24gPSB4UFJFSU5JVCBdOyB0aGVuCisgICBpZiBbIHgkYWxpYXNfaXBfYWRkcmVzcyAhPSB4IF07IHRoZW4KKyAgICAgIyBCcmluZyBkb3duIGFsaWFzIGludGVyZmFjZS4gSXRzIHJvdXRlcyB3aWxsIGRpc2FwcGVhciB0b28uCistICAgIGlmY29uZmlnICRpbnRlcmZhY2U6MC0gaW5ldCAwCisrICAgICR7aXB9IC00IGFkZHIgZmx1c2ggZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX06MAorICAgZmkKKy0gIGlmY29uZmlnICRpbnRlcmZhY2UgMCB1cAorKyAgJHtpcH0gbGluayBzZXQgZGV2ICR7aW50ZXJmYWNlfSB1cAorIAorICAgIyBXZSBuZWVkIHRvIGdpdmUgdGhlIGtlcm5lbCBzb21lIHRpbWUgdG8gZ2V0IHRoZSBpbnRlcmZhY2UgdXAuCisgICBzbGVlcCAxCitAQCAtMTU2LDI1ICsxNTAsMzAgQEAKKyAgIGlmIFsgeCRvbGRfaXBfYWRkcmVzcyAhPSB4IF0gJiYgWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCBdICYmIFwKKyAJCVsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHgkb2xkX2lwX2FkZHJlc3MgXTsgdGhlbgorICAgICAjIFBvc3NpYmxlIG5ldyBhbGlhcy4gUmVtb3ZlIG9sZCBhbGlhcy4KKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowLSBpbmV0IDAKKysgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCisgICBmaQorICAgaWYgWyB4JG9sZF9pcF9hZGRyZXNzICE9IHggXSAmJiBbIHgkb2xkX2lwX2FkZHJlc3MgIT0geCRuZXdfaXBfYWRkcmVzcyBdOyB0aGVuCisgICAgICMgSVAgYWRkcmVzcyBjaGFuZ2VkLiBCcmluZ2luZyBkb3duIHRoZSBpbnRlcmZhY2Ugd2lsbCBkZWxldGUgYWxsIHJvdXRlcywKKyAgICAgIyBhbmQgY2xlYXIgdGhlIEFSUCBjYWNoZS4KKy0gICAgaWZjb25maWcgJGludGVyZmFjZSBpbmV0IDAgZG93bgorKyAgICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9CisgCisgICBmaQorICAgaWYgWyB4JG9sZF9pcF9hZGRyZXNzID0geCBdIHx8IFsgeCRvbGRfaXBfYWRkcmVzcyAhPSB4JG5ld19pcF9hZGRyZXNzIF0gfHwgXAorICAgICAgWyB4JHJlYXNvbiA9IHhCT1VORCBdIHx8IFsgeCRyZWFzb24gPSB4UkVCT09UIF07IHRoZW4KKyAKKy0gICAgaWZjb25maWcgJGludGVyZmFjZSBpbmV0ICRuZXdfaXBfYWRkcmVzcyAkbmV3X3N1Ym5ldF9hcmcgXAorLQkJCQkJJG5ld19icm9hZGNhc3RfYXJnICRtdHVfYXJnCisrICAgICR7aXB9IC00IGFkZHIgYWRkICR7bmV3X2lwX2FkZHJlc3N9JHtuZXdfbWFza30gJHtuZXdfYnJvYWRjYXN0X2FyZ30gXAorKyAgICAgICAgICAgICAgICBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfQorKyAgICBpZiBbIC1uICIkbmV3X2ludGVyZmFjZV9tdHUiIF07IHRoZW4KKysgICAgICAjIHNldCBNVFUKKysgICAgICAke2lwfSBsaW5rIHNldCBkZXYgJHtpbnRlcmZhY2V9IG10dSAke25ld19pbnRlcmZhY2VfbXR1fQorKyAgICBmaQorICAgICAjIEFkZCBhIG5ldHdvcmsgcm91dGUgdG8gdGhlIGNvbXB1dGVkIG5ldHdvcmsgYWRkcmVzcy4KKyAgICAgZm9yIHJvdXRlciBpbiAkbmV3X3JvdXRlcnM7IGRvCisgICAgICAgaWYgWyAieCRuZXdfc3VibmV0X21hc2siID0gIngyNTUuMjU1LjI1NS4yNTUiIF0gOyB0aGVuCistCXJvdXRlIGFkZCAtaG9zdCAkcm91dGVyIGRldiAkaW50ZXJmYWNlCisrICAgICAgICAke2lwfSAtNCByb3V0ZSBhZGQgJHtyb3V0ZXJ9IGRldiAkaW50ZXJmYWNlID4vZGV2L251bGwgMj4mMQorICAgICAgIGZpCistICAgICAgcm91dGUgYWRkIGRlZmF1bHQgZ3cgJHJvdXRlciAkbWV0cmljX2FyZyBkZXYgJGludGVyZmFjZQorKyAgICAgICR7aXB9IC00IHJvdXRlIGFkZCBkZWZhdWx0IHZpYSAke3JvdXRlcn0gZGV2ICR7aW50ZXJmYWNlfSBcCisrICAgICAgICAke21ldHJpY19hcmd9ID4vZGV2L251bGwgMj4mMQorICAgICBkb25lCisgICBlbHNlCisgICAgICMgd2UgaGF2ZW4ndCBjaGFuZ2VkIHRoZSBhZGRyZXNzLCBoYXZlIHdlIGNoYW5nZWQgb3RoZXIgb3B0aW9ucyAgICAgICAgICAgCitAQCAtMTgyLDIxICsxODEsMjMgQEAKKyAgICAgaWYgWyB4JG5ld19yb3V0ZXJzICE9IHggXSAmJiBbIHgkbmV3X3JvdXRlcnMgIT0geCRvbGRfcm91dGVycyBdIDsgdGhlbgorICAgICAgICMgaWYgd2UndmUgY2hhbmdlZCByb3V0ZXJzIGRlbGV0ZSB0aGUgb2xkIGFuZCBhZGQgdGhlIG5ldy4KKyAgICAgICBmb3Igcm91dGVyIGluICRvbGRfcm91dGVyczsgZG8KKy0gICAgICAgIHJvdXRlIGRlbCBkZWZhdWx0IGd3ICRyb3V0ZXIKKysgICAgICAgICR7aXB9IC00IHJvdXRlIGRlbGV0ZSBkZWZhdWx0IHZpYSAke3JvdXRlcn0KKyAgICAgICBkb25lCisgICAgICAgZm9yIHJvdXRlciBpbiAkbmV3X3JvdXRlcnM7IGRvCisgICAgICAgICBpZiBbICJ4JG5ld19zdWJuZXRfbWFzayIgPSAieDI1NS4yNTUuMjU1LjI1NSIgXSA7IHRoZW4KKy0JICByb3V0ZSBhZGQgLWhvc3QgJHJvdXRlciBkZXYgJGludGVyZmFjZQorLQlmaQorLQlyb3V0ZSBhZGQgZGVmYXVsdCBndyAkcm91dGVyICRtZXRyaWNfYXJnIGRldiAkaW50ZXJmYWNlCisrCSAgICAgICR7aXB9IC00IHJvdXRlIGFkZCAke3JvdXRlcn0gZGV2ICRpbnRlcmZhY2UgPi9kZXYvbnVsbCAyPiYxCisrCSAgICBmaQorKyAgICAgICAgJHtpcH0gLTQgcm91dGUgYWRkIGRlZmF1bHQgdmlhICR7cm91dGVyfSBkZXYgJHtpbnRlcmZhY2V9IFwKKysgICAgICAgICAgJHttZXRyaWNfYXJnfSA+L2Rldi9udWxsIDI+JjEKKyAgICAgICBkb25lCisgICAgIGZpCisgICBmaQorICAgaWYgWyB4JG5ld19pcF9hZGRyZXNzICE9IHgkYWxpYXNfaXBfYWRkcmVzcyBdICYmIFsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsKKyAgICB0aGVuCistICAgIGlmY29uZmlnICRpbnRlcmZhY2U6MC0gaW5ldCAwCistICAgIGlmY29uZmlnICRpbnRlcmZhY2U6MCBpbmV0ICRhbGlhc19pcF9hZGRyZXNzICRhbGlhc19zdWJuZXRfYXJnCistICAgIHJvdXRlIGFkZCAtaG9zdCAkYWxpYXNfaXBfYWRkcmVzcyAkaW50ZXJmYWNlOjAKKysgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCisrICAgICR7aXB9IC00IGFkZHIgYWRkICR7YWxpYXNfaXBfYWRkcmVzc30ke2FsaWFzX21hc2t9IFwKKysgICAgICAgIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9OjAKKysgICAgJHtpcH0gLTQgcm91dGUgYWRkICR7YWxpYXNfaXBfYWRkcmVzc30gZGV2ICR7aW50ZXJmYWNlfSA+L2Rldi9udWxsIDI+JjEKKyAgIGZpCisgICBtYWtlX3Jlc29sdl9jb25mCisgICBleGl0X3dpdGhfaG9va3MgMAorQEAgLTIwNiw0MiArMjA3LDQ5IEBACisgICAgfHwgWyB4JHJlYXNvbiA9IHhTVE9QIF07IHRoZW4KKyAgIGlmIFsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsgdGhlbgorICAgICAjIFR1cm4gb2ZmIGFsaWFzIGludGVyZmFjZS4KKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowLSBpbmV0IDAKKysgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCisgICBmaQorICAgaWYgWyB4JG9sZF9pcF9hZGRyZXNzICE9IHggXTsgdGhlbgorICAgICAjIFNodXQgZG93biBpbnRlcmZhY2UsIHdoaWNoIHdpbGwgZGVsZXRlIHJvdXRlcyBhbmQgY2xlYXIgYXJwIGNhY2hlLgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlIGluZXQgMCBkb3duCisrICAgICR7aXB9IC00IGFkZHIgZmx1c2ggZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX0KKyAgIGZpCisgICBpZiBbIHgkYWxpYXNfaXBfYWRkcmVzcyAhPSB4IF07IHRoZW4KKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowIGluZXQgJGFsaWFzX2lwX2FkZHJlc3MgJGFsaWFzX3N1Ym5ldF9hcmcKKy0gICAgcm91dGUgYWRkIC1ob3N0ICRhbGlhc19pcF9hZGRyZXNzICRpbnRlcmZhY2U6MAorKyAgICAke2lwfSAtNCBhZGRyIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9JHthbGlhc19uZXR3b3JrX2FyZ30gXAorKyAgICAgICAgZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX06MAorKyAgICAke2lwfSAtNCByb3V0ZSBhZGQgJHthbGlhc19pcF9hZGRyZXNzfSBkZXYgJHtpbnRlcmZhY2V9ID4vZGV2L251bGwgMj4mMQorICAgZmkKKyAgIGV4aXRfd2l0aF9ob29rcyAwCisgZmkKKyAKKyBpZiBbIHgkcmVhc29uID0geFRJTUVPVVQgXTsgdGhlbgorICAgaWYgWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCBdOyB0aGVuCistICAgIGlmY29uZmlnICRpbnRlcmZhY2U6MC0gaW5ldCAwCisrICAgICR7aXB9IC00IGFkZHIgZmx1c2ggZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX06MAorKyAgZmkKKysgICR7aXB9IC00IGFkZHIgYWRkICR7bmV3X2lwX2FkZHJlc3N9JHtuZXdfbWFza30gJHtuZXdfYnJvYWRjYXN0X2FyZ30gXAorKyAgICAgICAgICAgIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9CisrICBpZiBbIC1uICIkbmV3X2ludGVyZmFjZV9tdHUiIF07IHRoZW4KKysgICAgIyBzZXQgTVRVCisrICAgIGlwIGxpbmsgc2V0IGRldiAke2ludGVyZmFjZX0gbXR1ICR7bmV3X2ludGVyZmFjZV9tdHV9CisgICBmaQorLSAgaWZjb25maWcgJGludGVyZmFjZSBpbmV0ICRuZXdfaXBfYWRkcmVzcyAkbmV3X3N1Ym5ldF9hcmcgXAorLQkJCQkJJG5ld19icm9hZGNhc3RfYXJnICRtdHVfYXJnCisgICBzZXQgJG5ld19yb3V0ZXJzCisgICBpZiBwaW5nIC1xIC1jIDEgJDE7IHRoZW4KKyAgICAgaWYgWyB4JG5ld19pcF9hZGRyZXNzICE9IHgkYWxpYXNfaXBfYWRkcmVzcyBdICYmIFwKKyAJCQlbIHgkYWxpYXNfaXBfYWRkcmVzcyAhPSB4IF07IHRoZW4KKy0gICAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAgaW5ldCAkYWxpYXNfaXBfYWRkcmVzcyAkYWxpYXNfc3VibmV0X2FyZworLSAgICAgIHJvdXRlIGFkZCAtaG9zdCAkYWxpYXNfaXBfYWRkcmVzcyBkZXYgJGludGVyZmFjZTowCisrICAgICAgJHtpcH0gLTQgYWRkciBhZGQgJHthbGlhc19pcF9hZGRyZXNzfSR7YWxpYXNfbWFza30gXAorKyAgICAgICAgICAgIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9OjAKKysgICAgICAke2lwfSAtNCByb3V0ZSBhZGQgJHthbGlhc19pcF9hZGRyZXNzfSBkZXYgJHtpbnRlcmZhY2V9ID4vZGV2L251bGwgMj4mMQorICAgICBmaQorICAgICBmb3Igcm91dGVyIGluICRuZXdfcm91dGVyczsgZG8KKyAgICAgICBpZiBbICJ4JG5ld19zdWJuZXRfbWFzayIgPSAieDI1NS4yNTUuMjU1LjI1NSIgXSA7IHRoZW4KKy0Jcm91dGUgYWRkIC1ob3N0ICRyb3V0ZXIgZGV2ICRpbnRlcmZhY2UKKysJICAgICR7aXB9IC00IHJvdXRlIGFkZCAke3JvdXRlcn0gZGV2ICRpbnRlcmZhY2UgPi9kZXYvbnVsbCAyPiYxCisgICAgICAgZmkKKy0gICAgICByb3V0ZSBhZGQgZGVmYXVsdCBndyAkcm91dGVyICRtZXRyaWNfYXJnIGRldiAkaW50ZXJmYWNlCisrICAgICAgJHtpcH0gLTQgcm91dGUgYWRkIGRlZmF1bHQgdmlhICR7cm91dGVyfSBkZXYgJHtpbnRlcmZhY2V9IFwKKysgICAgICAgICR7bWV0cmljX2FyZ30gPi9kZXYvbnVsbCAyPiYxCisgICAgIGRvbmUKKyAgICAgbWFrZV9yZXNvbHZfY29uZgorICAgICBleGl0X3dpdGhfaG9va3MgMAorICAgZmkKKy0gIGlmY29uZmlnICRpbnRlcmZhY2UgaW5ldCAwIGRvd24KKysgICR7aXB9IC00IGFkZHIgZmx1c2ggZGV2ICR7aW50ZXJmYWNlfQorICAgZXhpdF93aXRoX2hvb2tzIDEKKyBmaQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcF80LjMuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3BfNC4zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRhMDVmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3BfNC4zLjIuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBkaGNwLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vZGhjcC0zLjAuMy1kaGNsaWVudC1kYnVzLnBhdGNoO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWV4dGVybmFsLWJpbmQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2xpbmstd2l0aC1sY3J5cHRvLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXhzZXBidWlsZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGhjbGllbnQtc2NyaXB0LWRyb3AtcmVzb2x2LmNvbmYuZGhjbGllbnQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3JlcGxhY2UtaWZjb25maWctcm91dGUucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1YTI4NDg3NWRkMmMxMmRkZDM4ODQxNmQ2OTE1NmE2NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MjQ2YzliMzU4NzU5ZjZjZGNjNDUxMDRjYWFmNzZlNzMyYTIxMWRiYmJiZjY0YTIxZjQ5OWM4ZGIxMjk4MTY1IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGVmYXVsdC1yZWxheSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RlZmF1bHQtcmVsYXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk2MWYwMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RlZmF1bHQtcmVsYXkKQEAgLTAsMCArMSwxMiBAQAorIyBEZWZhdWx0cyBmb3IgZGhjcC1yZWxheSBpbml0c2NyaXB0CisjIHNvdXJjZWQgYnkgL2V0Yy9pbml0LmQvZGhjcC1yZWxheQorCisjIFdoYXQgc2VydmVycyBzaG91bGQgdGhlIERIQ1AgcmVsYXkgZm9yd2FyZCByZXF1ZXN0cyB0bz8KKyMgZS5nOiBTRVJWRVJTPSIxOTIuMTY4LjAuMSIKK1NFUlZFUlM9IiIKKworIyBPbiB3aGF0IGludGVyZmFjZXMgc2hvdWxkIHRoZSBESENQIHJlbGF5IChkaHJlbGF5KSBzZXJ2ZSBESENQIHJlcXVlc3RzPworSU5URVJGQUNFUz0iIgorCisjIEFkZGl0aW9uYWwgb3B0aW9ucyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIERIQ1AgcmVsYXkgZGFlbW9uPworT1BUSU9OUz0iIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGVmYXVsdC1zZXJ2ZXIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kZWZhdWx0LXNlcnZlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzg1ZDE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGVmYXVsdC1zZXJ2ZXIKQEAgLTAsMCArMSw3IEBACisjIERlZmF1bHRzIGZvciBkaGNwIGluaXRzY3JpcHQKKyMgc291cmNlZCBieSAvZXRjL2luaXQuZC9kaGNwLXNlcnZlcgorIyBpbnN0YWxsZWQgYXQgL2V0Yy9kZWZhdWx0L2RoY3Atc2VydmVyIGJ5IHRoZSBtYWludGFpbmVyIHNjcmlwdHMKKworIyBPbiB3aGF0IGludGVyZmFjZXMgc2hvdWxkIHRoZSBESENQIHNlcnZlciAoZGhjcGQpIHNlcnZlIERIQ1AgcmVxdWVzdHM/CisjICAgICAgIFNlcGFyYXRlIG11bHRpcGxlIGludGVyZmFjZXMgd2l0aCBzcGFjZXMsIGUuZy4gImV0aDAgZXRoMSIuCitJTlRFUkZBQ0VTPSIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNsaWVudC5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjbGllbnQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTZkY2Y5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjbGllbnQuY29uZgpAQCAtMCwwICsxLDUwIEBACisjIENvbmZpZ3VyYXRpb24gZmlsZSBmb3IgL3NiaW4vZGhjbGllbnQsIHdoaWNoIGlzIGluY2x1ZGVkIGluIERlYmlhbidzCisjCWRoY3AzLWNsaWVudCBwYWNrYWdlLgorIworIyBUaGlzIGlzIGEgc2FtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgZGhjbGllbnQuIFNlZSBkaGNsaWVudC5jb25mJ3MKKyMJbWFuIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN5bnRheCBvZiB0aGlzIGZpbGUKKyMJYW5kIGEgbW9yZSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgdGhlIHBhcmFtZXRlcnMgdW5kZXJzdG9vZCBieQorIwlkaGNsaWVudC4KKyMKKyMgTm9ybWFsbHksIGlmIHRoZSBESENQIHNlcnZlciBwcm92aWRlcyByZWFzb25hYmxlIGluZm9ybWF0aW9uIGFuZCBkb2VzCisjCW5vdCBsZWF2ZSBhbnl0aGluZyBvdXQgKGxpa2UgdGhlIGRvbWFpbiBuYW1lLCBmb3IgZXhhbXBsZSksIHRoZW4KKyMJZmV3IGNoYW5nZXMgbXVzdCBiZSBtYWRlIHRvIHRoaXMgZmlsZSwgaWYgYW55LgorIworCisjc2VuZCBob3N0LW5hbWUgImFuZGFyZS5mdWd1ZS5jb20iOworI3NlbmQgZGhjcC1jbGllbnQtaWRlbnRpZmllciAxOjA6YTA6MjQ6YWI6ZmI6OWM7Cisjc2VuZCBkaGNwLWxlYXNlLXRpbWUgMzYwMDsKKyNzdXBlcnNlZGUgZG9tYWluLW5hbWUgImZ1Z3VlLmNvbSBob21lLnZpeC5jb20iOworI3ByZXBlbmQgZG9tYWluLW5hbWUtc2VydmVycyAxMjcuMC4wLjE7CityZXF1ZXN0IHN1Ym5ldC1tYXNrLCBicm9hZGNhc3QtYWRkcmVzcywgdGltZS1vZmZzZXQsIHJvdXRlcnMsCisJZG9tYWluLW5hbWUsIGRvbWFpbi1uYW1lLXNlcnZlcnMsIGhvc3QtbmFtZSwKKwluZXRiaW9zLW5hbWUtc2VydmVycywgbmV0Ymlvcy1zY29wZTsKKyNyZXF1aXJlIHN1Ym5ldC1tYXNrLCBkb21haW4tbmFtZS1zZXJ2ZXJzOworI3RpbWVvdXQgNjA7CisjcmV0cnkgNjA7CisjcmVib290IDEwOworI3NlbGVjdC10aW1lb3V0IDU7CisjaW5pdGlhbC1pbnRlcnZhbCAyOworI3NjcmlwdCAiL2V0Yy9kaGNwMy9kaGNsaWVudC1zY3JpcHQiOworI21lZGlhICItbGluazAgLWxpbmsxIC1saW5rMiIsICJsaW5rMCBsaW5rMSI7CisjcmVqZWN0IDE5Mi4zMy4xMzcuMjA5OworCisjYWxpYXMgeworIyAgaW50ZXJmYWNlICJldGgwIjsKKyMgIGZpeGVkLWFkZHJlc3MgMTkyLjUuNS4yMTM7CisjICBvcHRpb24gc3VibmV0LW1hc2sgMjU1LjI1NS4yNTUuMjU1OworI30KKworI2xlYXNlIHsKKyMgIGludGVyZmFjZSAiZXRoMCI7CisjICBmaXhlZC1hZGRyZXNzIDE5Mi4zMy4xMzcuMjAwOworIyAgbWVkaXVtICJsaW5rMCBsaW5rMSI7CisjICBvcHRpb24gaG9zdC1uYW1lICJhbmRhcmUuc3dpZnRtZWRpYS5jb20iOworIyAgb3B0aW9uIHN1Ym5ldC1tYXNrIDI1NS4yNTUuMjU1LjA7CisjICBvcHRpb24gYnJvYWRjYXN0LWFkZHJlc3MgMTkyLjMzLjEzNy4yNTU7CisjICBvcHRpb24gcm91dGVycyAxOTIuMzMuMTM3LjI1MDsKKyMgIG9wdGlvbiBkb21haW4tbmFtZS1zZXJ2ZXJzIDEyNy4wLjAuMTsKKyMgIHJlbmV3IDIgMjAwMC8xLzEyIDAwOjAwOjAxOworIyAgcmViaW5kIDIgMjAwMC8xLzEyIDAwOjAwOjAxOworIyAgZXhwaXJlIDIgMjAwMC8xLzEyIDAwOjAwOjAxOworI30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNwZC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMDFjMGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNwZC5jb25mCkBAIC0wLDAgKzEsMTA4IEBACisjCisjIFNhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIElTQyBkaGNwZCBmb3IgRGViaWFuCisjCisjICRJZDogZGhjcGQuY29uZix2IDEuMS4xLjEgMjAwMi8wNS8yMSAwMDowNzo0NCBwZWxveSBFeHAgJAorIworCisjIFRoZSBkZG5zLXVwZGF0ZXMtc3R5bGUgcGFyYW1ldGVyIGNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBzZXJ2ZXIgd2lsbAorIyBhdHRlbXB0IHRvIGRvIGEgRE5TIHVwZGF0ZSB3aGVuIGEgbGVhc2UgaXMgY29uZmlybWVkLiBXZSBkZWZhdWx0IHRvIHRoZQorIyBiZWhhdmlvciBvZiB0aGUgdmVyc2lvbiAyIHBhY2thZ2VzICgnbm9uZScsIHNpbmNlIERIQ1AgdjIgZGlkbid0CisjIGhhdmUgc3VwcG9ydCBmb3IgREROUy4pCitkZG5zLXVwZGF0ZS1zdHlsZSBub25lOworCisjIG9wdGlvbiBkZWZpbml0aW9ucyBjb21tb24gdG8gYWxsIHN1cHBvcnRlZCBuZXR3b3Jrcy4uLgorb3B0aW9uIGRvbWFpbi1uYW1lICJleGFtcGxlLm9yZyI7CitvcHRpb24gZG9tYWluLW5hbWUtc2VydmVycyBuczEuZXhhbXBsZS5vcmcsIG5zMi5leGFtcGxlLm9yZzsKKworZGVmYXVsdC1sZWFzZS10aW1lIDYwMDsKK21heC1sZWFzZS10aW1lIDcyMDA7CisKKyMgSWYgdGhpcyBESENQIHNlcnZlciBpcyB0aGUgb2ZmaWNpYWwgREhDUCBzZXJ2ZXIgZm9yIHRoZSBsb2NhbAorIyBuZXR3b3JrLCB0aGUgYXV0aG9yaXRhdGl2ZSBkaXJlY3RpdmUgc2hvdWxkIGJlIHVuY29tbWVudGVkLgorI2F1dGhvcml0YXRpdmU7CisKKyMgVXNlIHRoaXMgdG8gc2VuZCBkaGNwIGxvZyBtZXNzYWdlcyB0byBhIGRpZmZlcmVudCBsb2cgZmlsZSAoeW91IGFsc28KKyMgaGF2ZSB0byBoYWNrIHN5c2xvZy5jb25mIHRvIGNvbXBsZXRlIHRoZSByZWRpcmVjdGlvbikuCitsb2ctZmFjaWxpdHkgbG9jYWw3OworCisjIE5vIHNlcnZpY2Ugd2lsbCBiZSBnaXZlbiBvbiB0aGlzIHN1Ym5ldCwgYnV0IGRlY2xhcmluZyBpdCBoZWxwcyB0aGUgCisjIERIQ1Agc2VydmVyIHRvIHVuZGVyc3RhbmQgdGhlIG5ldHdvcmsgdG9wb2xvZ3kuCisKKyNzdWJuZXQgMTAuMTUyLjE4Ny4wIG5ldG1hc2sgMjU1LjI1NS4yNTUuMCB7CisjfQorCisjIFRoaXMgaXMgYSB2ZXJ5IGJhc2ljIHN1Ym5ldCBkZWNsYXJhdGlvbi4KKworI3N1Ym5ldCAxMC4yNTQuMjM5LjAgbmV0bWFzayAyNTUuMjU1LjI1NS4yMjQgeworIyAgcmFuZ2UgMTAuMjU0LjIzOS4xMCAxMC4yNTQuMjM5LjIwOworIyAgb3B0aW9uIHJvdXRlcnMgcnRyLTIzOS0wLTEuZXhhbXBsZS5vcmcsIHJ0ci0yMzktMC0yLmV4YW1wbGUub3JnOworI30KKworIyBUaGlzIGRlY2xhcmF0aW9uIGFsbG93cyBCT09UUCBjbGllbnRzIHRvIGdldCBkeW5hbWljIGFkZHJlc3NlcywKKyMgd2hpY2ggd2UgZG9uJ3QgcmVhbGx5IHJlY29tbWVuZC4KKworI3N1Ym5ldCAxMC4yNTQuMjM5LjMyIG5ldG1hc2sgMjU1LjI1NS4yNTUuMjI0IHsKKyMgIHJhbmdlIGR5bmFtaWMtYm9vdHAgMTAuMjU0LjIzOS40MCAxMC4yNTQuMjM5LjYwOworIyAgb3B0aW9uIGJyb2FkY2FzdC1hZGRyZXNzIDEwLjI1NC4yMzkuMzE7CisjICBvcHRpb24gcm91dGVycyBydHItMjM5LTMyLTEuZXhhbXBsZS5vcmc7CisjfQorCisjIEEgc2xpZ2h0bHkgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gZm9yIGFuIGludGVybmFsIHN1Ym5ldC4KKyNzdWJuZXQgMTAuNS41LjAgbmV0bWFzayAyNTUuMjU1LjI1NS4yMjQgeworIyAgcmFuZ2UgMTAuNS41LjI2IDEwLjUuNS4zMDsKKyMgIG9wdGlvbiBkb21haW4tbmFtZS1zZXJ2ZXJzIG5zMS5pbnRlcm5hbC5leGFtcGxlLm9yZzsKKyMgIG9wdGlvbiBkb21haW4tbmFtZSAiaW50ZXJuYWwuZXhhbXBsZS5vcmciOworIyAgb3B0aW9uIHJvdXRlcnMgMTAuNS41LjE7CisjICBvcHRpb24gYnJvYWRjYXN0LWFkZHJlc3MgMTAuNS41LjMxOworIyAgZGVmYXVsdC1sZWFzZS10aW1lIDYwMDsKKyMgIG1heC1sZWFzZS10aW1lIDcyMDA7CisjfQorCisjIEhvc3RzIHdoaWNoIHJlcXVpcmUgc3BlY2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgY2FuIGJlIGxpc3RlZCBpbgorIyBob3N0IHN0YXRlbWVudHMuICAgSWYgbm8gYWRkcmVzcyBpcyBzcGVjaWZpZWQsIHRoZSBhZGRyZXNzIHdpbGwgYmUKKyMgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IChpZiBwb3NzaWJsZSksIGJ1dCB0aGUgaG9zdC1zcGVjaWZpYyBpbmZvcm1hdGlvbgorIyB3aWxsIHN0aWxsIGNvbWUgZnJvbSB0aGUgaG9zdCBkZWNsYXJhdGlvbi4KKworI2hvc3QgcGFzc2FjYWdsaWEgeworIyAgaGFyZHdhcmUgZXRoZXJuZXQgMDowOmMwOjVkOmJkOjk1OworIyAgZmlsZW5hbWUgInZtdW5peC5wYXNzYWNhZ2xpYSI7CisjICBzZXJ2ZXItbmFtZSAidG9jY2F0YS5mdWd1ZS5jb20iOworI30KKworIyBGaXhlZCBJUCBhZGRyZXNzZXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGZvciBob3N0cy4gICBUaGVzZSBhZGRyZXNzZXMKKyMgc2hvdWxkIG5vdCBhbHNvIGJlIGxpc3RlZCBhcyBiZWluZyBhdmFpbGFibGUgZm9yIGR5bmFtaWMgYXNzaWdubWVudC4KKyMgSG9zdHMgZm9yIHdoaWNoIGZpeGVkIElQIGFkZHJlc3NlcyBoYXZlIGJlZW4gc3BlY2lmaWVkIGNhbiBib290IHVzaW5nCisjIEJPT1RQIG9yIERIQ1AuICAgSG9zdHMgZm9yIHdoaWNoIG5vIGZpeGVkIGFkZHJlc3MgaXMgc3BlY2lmaWVkIGNhbiBvbmx5CisjIGJlIGJvb3RlZCB3aXRoIERIQ1AsIHVubGVzcyB0aGVyZSBpcyBhbiBhZGRyZXNzIHJhbmdlIG9uIHRoZSBzdWJuZXQKKyMgdG8gd2hpY2ggYSBCT09UUCBjbGllbnQgaXMgY29ubmVjdGVkIHdoaWNoIGhhcyB0aGUgZHluYW1pYy1ib290cCBmbGFnCisjIHNldC4KKyNob3N0IGZhbnRhc2lhIHsKKyMgIGhhcmR3YXJlIGV0aGVybmV0IDA4OjAwOjA3OjI2OmMwOmE1OworIyAgZml4ZWQtYWRkcmVzcyBmYW50YXNpYS5mdWd1ZS5jb207CisjfQorCisjIFlvdSBjYW4gZGVjbGFyZSBhIGNsYXNzIG9mIGNsaWVudHMgYW5kIHRoZW4gZG8gYWRkcmVzcyBhbGxvY2F0aW9uCisjIGJhc2VkIG9uIHRoYXQuICAgVGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgYSBjYXNlIHdoZXJlIGFsbCBjbGllbnRzCisjIGluIGEgY2VydGFpbiBjbGFzcyBnZXQgYWRkcmVzc2VzIG9uIHRoZSAxMC4xNy4yMjQvMjQgc3VibmV0LCBhbmQgYWxsCisjIG90aGVyIGNsaWVudHMgZ2V0IGFkZHJlc3NlcyBvbiB0aGUgMTAuMC4yOS8yNCBzdWJuZXQuCisKKyNjbGFzcyAiZm9vIiB7CisjICBtYXRjaCBpZiBzdWJzdHJpbmcgKG9wdGlvbiB2ZW5kb3ItY2xhc3MtaWRlbnRpZmllciwgMCwgNCkgPSAiU1VOVyI7CisjfQorCisjc2hhcmVkLW5ldHdvcmsgMjI0LTI5IHsKKyMgIHN1Ym5ldCAxMC4xNy4yMjQuMCBuZXRtYXNrIDI1NS4yNTUuMjU1LjAgeworIyAgICBvcHRpb24gcm91dGVycyBydHItMjI0LmV4YW1wbGUub3JnOworIyAgfQorIyAgc3VibmV0IDEwLjAuMjkuMCBuZXRtYXNrIDI1NS4yNTUuMjU1LjAgeworIyAgICBvcHRpb24gcm91dGVycyBydHItMjkuZXhhbXBsZS5vcmc7CisjICB9CisjICBwb29sIHsKKyMgICAgYWxsb3cgbWVtYmVycyBvZiAiZm9vIjsKKyMgICAgcmFuZ2UgMTAuMTcuMjI0LjEwIDEwLjE3LjIyNC4yNTA7CisjICB9CisjICBwb29sIHsKKyMgICAgZGVueSBtZW1iZXJzIG9mICJmb28iOworIyAgICByYW5nZSAxMC4wLjI5LjEwIDEwLjAuMjkuMjMwOworIyAgfQorI30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNwZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNGY5M2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNwZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTUgQEAKK1tVbml0XQorRGVzY3JpcHRpb249REhDUHY0IFNlcnZlciBEYWVtb24KK0RvY3VtZW50YXRpb249bWFuOmRoY3BkKDgpIG1hbjpkaGNwZC5jb25mKDUpCitBZnRlcj1uZXR3b3JrLnRhcmdldAorQWZ0ZXI9dGltZS1zeW5jLnRhcmdldAorCitbU2VydmljZV0KK1BJREZpbGU9QGxvY2Fsc3RhdGVkaXJAL3J1bi9kaGNwZC5waWQKK0Vudmlyb25tZW50RmlsZT1AU1lTQ09ORkRJUkAvZGVmYXVsdC9kaGNwLXNlcnZlcgorRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvc3lzY29uZmlnL2RoY3Atc2VydmVyCitFeGVjU3RhcnRQcmU9QGJhc2VfYmluZGlyQC90b3VjaCBAbG9jYWxzdGF0ZWRpckAvbGliL2RoY3AvZGhjcGQubGVhc2VzCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2RoY3BkIC1mIC1jZiBAU1lTQ09ORkRJUkAvZGhjcC9kaGNwZC5jb25mIC1wZiBAbG9jYWxzdGF0ZWRpckAvcnVuL2RoY3BkLnBpZCAkREhDUERBUkdTIC1xICRJTlRFUkZBQ0VTCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkNi5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQ2LnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E5NmFiYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkNi5zZXJ2aWNlCkBAIC0wLDAgKzEsMTUgQEAKK1tVbml0XQorRGVzY3JpcHRpb249REhDUHY2IFNlcnZlciBEYWVtb24KK0RvY3VtZW50YXRpb249bWFuOmRoY3BkKDgpIG1hbjpkaGNwZC5jb25mKDUpCitBZnRlcj1uZXR3b3JrLnRhcmdldAorQWZ0ZXI9dGltZS1zeW5jLnRhcmdldAorCitbU2VydmljZV0KK1BJREZpbGU9QGxvY2Fsc3RhdGVkaXJAL3J1bi9kaGNwZDYucGlkCitFbnZpcm9ubWVudEZpbGU9QFNZU0NPTkZESVJAL2RlZmF1bHQvZGhjcC1zZXJ2ZXIKK0Vudmlyb25tZW50RmlsZT0tQFNZU0NPTkZESVJAL3N5c2NvbmZpZy9kaGNwZDYKK0V4ZWNTdGFydFByZT1AYmFzZV9iaW5kaXJAL3RvdWNoIEBsb2NhbHN0YXRlZGlyQC9saWIvZGhjcC9kaGNwZDYubGVhc2VzCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2RoY3BkIC1mIC02IC1jZiBAU1lTQ09ORkRJUkAvZGhjcC9kaGNwZC5jb25mIC1wZiBAbG9jYWxzdGF0ZWRpckAvcnVuL2RoY3BkNi5waWQgJERIQ1BEQVJHUyAtcSAkSU5URVJGQUNFUworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNyZWxheS5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcmVsYXkuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmQ4MTg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcmVsYXkuc2VydmljZQpAQCAtMCwwICsxLDkgQEAKK1tVbml0XQorRGVzY3JpcHRpb249REhDUCBSZWxheSBBZ2VudCBEYWVtb24KK0FmdGVyPW5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0PUBTQklORElSQC9kaGNyZWxheSAtZCAtLW5vLXBpZAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9pbml0LXJlbGF5IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvaW5pdC1yZWxheQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTlhN2U4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvaW5pdC1yZWxheQpAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKyMKKyMgJElkOiBkaGNwMy1yZWxheSx2IDEuMSAyMDA0LzA0LzE2IDE1OjQxOjA4IG1sIEV4cCAkCisjCisKKyMgSXQgaXMgbm90IHNhZmUgdG8gc3RhcnQgaWYgd2UgZG9uJ3QgaGF2ZSBhIGRlZmF1bHQgY29uZmlndXJhdGlvbi4uLgoraWYgWyAhIC1mIC9ldGMvZGVmYXVsdC9kaGNwLXJlbGF5IF07IHRoZW4KKwllY2hvICIvZXRjL2RlZmF1bHQvZGhjcC1yZWxheSBkb2VzIG5vdCBleGlzdCEgLSBBYm9ydGluZy4uLiIKKwllY2hvICJjcmVhdGUgdGhpcyBmaWxlIHRvIGZpeCB0aGUgcHJvYmxlbS4iCisJZXhpdCAxCitmaQorCisjIFJlYWQgaW5pdCBzY3JpcHQgY29uZmlndXJhdGlvbiAoaW50ZXJmYWNlcyB0aGUgZGFlbW9uIHNob3VsZCBsaXN0ZW4gb24KKyMgYW5kIHRoZSBESENQIHNlcnZlciB3ZSBzaG91bGQgZm9yd2FyZCByZXF1ZXN0cyB0by4pCisuIC9ldGMvZGVmYXVsdC9kaGNwLXJlbGF5CisKKyMgQnVpbGQgY29tbWFuZCBsaW5lIGZvciBpbnRlcmZhY2VzICh3aWxsIGJlIHBhc3NlZCB0byBkaHJlbGF5IGJlbG93LikKK0lGQ01EPSIiCitpZiB0ZXN0ICIkSU5URVJGQUNFUyIgIT0gIiI7IHRoZW4KKwlmb3IgSSBpbiAkSU5URVJGQUNFUzsgZG8KKwkJSUZDTUQ9JHtJRkNNRH0iLWkgIiR7SX0iICIKKwlkb25lCitmaQorCitESENSRUxBWVBJRD0vdmFyL3J1bi9kaGNyZWxheS5waWQKKworY2FzZSAiJDEiIGluCisJc3RhcnQpCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC1TIC14IC91c3Ivc2Jpbi9kaGNyZWxheSAtLSAtcSAkT1BUSU9OUyAkSUZDTUQgJFNFUlZFUlMKKwkJOzsKKwlzdG9wKQorCQlzdGFydC1zdG9wLWRhZW1vbiAtSyAteCAvdXNyL3NiaW4vZGhjcmVsYXkKKwkJOzsKKwlyZXN0YXJ0IHwgZm9yY2UtcmVsb2FkKQorCQkkMCBzdG9wCisJCXNsZWVwIDIKKwkJJDAgc3RhcnQKKwkJOzsKKwkqKQorCQllY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvZGhjcC1yZWxheSB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iCisJCWV4aXQgMSAKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9pbml0LXNlcnZlciBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2luaXQtc2VydmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YzIwODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9pbml0LXNlcnZlcgpAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKyMKKyMgJElkOiBkaGNwMy1zZXJ2ZXIuaW5pdC5kLHYgMS40IDIwMDMvMDcvMTMgMTk6MTI6NDEgbWR6IEV4cCAkCisjCisKK3Rlc3QgLWYgL3Vzci9zYmluL2RoY3BkIHx8IGV4aXQgMAorCisjIEl0IGlzIG5vdCBzYWZlIHRvIHN0YXJ0IGlmIHdlIGRvbid0IGhhdmUgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uLi4KK2lmIFsgISAtZiAvZXRjL2RlZmF1bHQvZGhjcC1zZXJ2ZXIgXTsgdGhlbgorCWVjaG8gIi9ldGMvZGVmYXVsdC9kaGNwLXNlcnZlciBkb2VzIG5vdCBleGlzdCEgLSBBYm9ydGluZy4uLiIKKwlleGl0IDAKK2ZpCisKKyMgUmVhZCBpbml0IHNjcmlwdCBjb25maWd1cmF0aW9uIChzbyBmYXIgb25seSBpbnRlcmZhY2VzIHRoZSBkYWVtb24KKyMgc2hvdWxkIGxpc3RlbiBvbi4pCisuIC9ldGMvZGVmYXVsdC9kaGNwLXNlcnZlcgorCitjYXNlICIkMSIgaW4KKwlzdGFydCkKKwkJZWNobyAtbiAiU3RhcnRpbmcgREhDUCBzZXJ2ZXI6ICIKKwkJdGVzdCAtZCAvdmFyL2xpYi9kaGNwLyB8fCBta2RpciAtcCAvdmFyL2xpYi9kaGNwLworCQl0ZXN0IC1mIC92YXIvbGliL2RoY3AvZGhjcGQubGVhc2VzIHx8IHRvdWNoIC92YXIvbGliL2RoY3AvZGhjcGQubGVhc2VzCQorCQlzdGFydC1zdG9wLWRhZW1vbiAtUyAteCAvdXNyL3NiaW4vZGhjcGQgLS0gLXEgJElOVEVSRkFDRVMKKwkJZWNobyAiLiIKKwkJOzsKKwlzdG9wKQorCQllY2hvIC1uICJTdG9wcGluZyBESENQIHNlcnZlcjogZGhjcGQzIgorCQlzdGFydC1zdG9wLWRhZW1vbiAtSyAteCAvdXNyL3NiaW4vZGhjcGQKKwkJZWNobyAiLiIKKwkJOzsKKwlyZXN0YXJ0IHwgZm9yY2UtcmVsb2FkKQorCQkkMCBzdG9wCisJCXNsZWVwIDIKKwkJJDAgc3RhcnQKKwkJaWYgWyAiJD8iICE9ICIwIiBdOyB0aGVuCisJCQlleGl0IDEKKwkJZmkKKwkJOzsKKwkqKQorCQllY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvZGhjcC1zZXJ2ZXIge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR9IgorCQlleGl0IDEgCitlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUzYTRlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi5pbmMKQEAgLTAsMCArMSwzOCBAQAorU1VNTUFSWSA9ICJUQ1AgLyBJUCBuZXR3b3JraW5nIGFuZCB0cmFmZmljIGNvbnRyb2wgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiSXByb3V0ZTIgaXMgYSBjb2xsZWN0aW9uIG9mIHV0aWxpdGllcyBmb3IgY29udHJvbGxpbmcgXAorVENQIC8gSVAgbmV0d29ya2luZyBhbmQgdHJhZmZpYyBjb250cm9sIGluIExpbnV4LiAgT2YgdGhlIHV0aWxpdGllcyBpcCBcCithbmQgdGMgYXJlIHRoZSBtb3N0IGltcG9ydGFudC4gIGlwIGNvbnRyb2xzIElQdjQgYW5kIElQdjYgXAorY29uZmlndXJhdGlvbiBhbmQgdGMgc3RhbmRzIGZvciB0cmFmZmljIGNvbnRyb2wuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2NvbGxhYm9yYXRlL3dvcmtncm91cHMvbmV0d29ya2luZy9pcHJvdXRlMiIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaXAvaXAuYztiZWdpbmxpbmU9MztlbmRsaW5lPTg7bWQ1PTY4OWQ2OTFkMDQxMGE0YjY0ZDM4OTlmOGQ2ZTMxODE3IgorCitERVBFTkRTID0gImZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSBpcHRhYmxlcyBlbGZ1dGlscyIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0VYVFJBX09FTUFLRSA9ICJDQz0nJHtDQ30nIEtFUk5FTF9JTkNMVURFPSR7U1RBR0lOR19JTkNESVJ9IERPQ0RJUj0ke2RvY2Rpcn0vaXByb3V0ZTIgU1VCRElSUz0nbGliIHRjIGlwJyBTQklORElSPScke2Jhc2Vfc2JpbmRpcn0nIExJQkRJUj0nJHtsaWJkaXJ9JyIKKworZG9faW5zdGFsbCAoKSB7CisgICAgb2VfcnVubWFrZSBERVNURElSPSR7RH0gaW5zdGFsbAorICAgIG12ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vaXAgJHtEfSR7YmFzZV9zYmluZGlyfS9pcC5pcHJvdXRlMgorICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0KKyAgICBtdiAke0R9L3NoYXJlLyogJHtEfSR7ZGF0YWRpcn0vIHx8IHRydWUKKyAgICBybSAke0R9L3NoYXJlIC1yZiB8fCB0cnVlCit9CisKKyMgVGhlIC5zbyBmaWxlcyBpbiBpcHJvdXRlMi10YyBhcmUgbW9kdWxlcywgbm90IHRyYWRpdGlvbmFsIGxpYnJhcmllcworSU5TQU5FX1NLSVBfJHtQTn0tdGMgPSAiZGV2LXNvIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tdGMiCitGSUxFU18ke1BOfS10YyA9ICIke2Jhc2Vfc2JpbmRpcn0vdGMqIFwKKyAgICAgICAgICAgICAgICAgICR7bGliZGlyfS90Yy8qLnNvIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS90Yy8uZGVidWciCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImlwIgorQUxURVJOQVRJVkVfVEFSR0VUW2lwXSA9ICIke2Jhc2Vfc2JpbmRpcn0vaXAuJHtCUE59IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2lwXSA9ICIke2Jhc2Vfc2JpbmRpcn0vaXAiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIvMDAwMS1pcHJvdXRlMi1kZS1iYXNoLXNjcmlwdHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIvMDAwMS1pcHJvdXRlMi1kZS1iYXNoLXNjcmlwdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzljN2Q0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi8wMDAxLWlwcm91dGUyLWRlLWJhc2gtc2NyaXB0cy5wYXRjaApAQCAtMCwwICsxLDY0IEBACitTdWJqZWN0OiBbUEFUQ0hdIGlwcm91dGUyOiBkZS1iYXNoIHNjcmlwdHMKKworZGUtYmFzaCB0aGVzZSB0d28gc2NyaXB0cyB0byBtYWtlIGlwcm91dGUyIG5vdCBkZXBlbmQgb24gYmFzaC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKworLS0tCisgaXAvaWZjZmcgfCAgIDE1ICsrKysrKysrLS0tLS0tLQorIGlwL3J0cHIgIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvaXAvaWZjZmcgYi9pcC9pZmNmZworaW5kZXggMDgzZDlkZi4uNjBiY2YxZiAxMDA2NDQKKy0tLSBhL2lwL2lmY2ZnCisrKysgYi9pcC9pZmNmZworQEAgLTEsMTIgKzEsMTMgQEAKKy0jISAvYmluL2Jhc2gKKysjISAvYmluL3NoCisgCisgQ2hlY2tGb3J3YXJkaW5nICgpIHsKKy0gIGxvY2FsIHNiYXNlIGZ3ZAorKyAgbG9jYWwgc2Jhc2UgZndkIGZvcndhcmRpbmcKKyAgIHNiYXNlPS9wcm9jL3N5cy9uZXQvaXB2NC9jb25mCisgICBmd2Q9MAorICAgaWYgWyAtZCAkc2Jhc2UgXTsgdGhlbgorICAgICBmb3IgZGlyIGluICRzYmFzZS8qL2ZvcndhcmRpbmc7IGRvCistICAgICAgZndkPSRbJGZ3ZCArIGBjYXQgJGRpcmBdCisrICAgICAgZm9yd2FyZGluZz1gY2F0ICRkaXJgCisrICAgICAgZndkPSQoKCRmd2QrJGZvcndhcmRpbmcpKQorICAgICBkb25lCisgICBlbHNlCisgICAgIGZ3ZD0yCitAQCAtMTI3LDEyICsxMjgsMTIgQEAgZmkKKyBhcnBpbmcgLXEgLUEgLWMgMSAtSSAkZGV2ICRpcGFkZHIKKyBub2FycD0kPworICggc2xlZXAgMiA7CistICBhcnBpbmcgLXEgLVUgLWMgMSAtSSAkZGV2ICRpcGFkZHIgKSA+JiAvZGV2L251bGwgPC9kZXYvbnVsbCAmCisrICBhcnBpbmcgLXEgLVUgLWMgMSAtSSAkZGV2ICRpcGFkZHIgKSA+IC9kZXYvbnVsbCAyPiYxIDwvZGV2L251bGwgJgorIAorLWlwIHJvdXRlIGFkZCB1bnJlYWNoYWJsZSAyMjQuMC4wLjAvMjQgPiYgL2Rldi9udWxsCistaXAgcm91dGUgYWRkIHVucmVhY2hhYmxlIDI1NS4yNTUuMjU1LjI1NSA+JiAvZGV2L251bGwKKytpcCByb3V0ZSBhZGQgdW5yZWFjaGFibGUgMjI0LjAuMC4wLzI0ID4gL2Rldi9udWxsIDI+JjEKKytpcCByb3V0ZSBhZGQgdW5yZWFjaGFibGUgMjU1LjI1NS4yNTUuMjU1ID4gL2Rldi9udWxsIDI+JjEKKyBpZiBbIGBpcCBsaW5rIGxzICRkZXYgfCBncmVwIC1jIE1VTFRJQ0FTVGAgLWdlIDEgXTsgdGhlbgorLSAgaXAgcm91dGUgYWRkIDIyNC4wLjAuMC80IGRldiAkZGV2IHNjb3BlIGdsb2JhbCA+JiAvZGV2L251bGwKKysgIGlwIHJvdXRlIGFkZCAyMjQuMC4wLjAvNCBkZXYgJGRldiBzY29wZSBnbG9iYWwgPiAvZGV2L251bGwgMj4mMQorIGZpCisgCisgaWYgWyAkZndkIC1lcSAwIF07IHRoZW4KK2RpZmYgLS1naXQgYS9pcC9ydHByIGIvaXAvcnRwcgoraW5kZXggYzM2MjlmZC4uNjc0MTk4ZCAxMDA2NDQKKy0tLSBhL2lwL3J0cHIKKysrKyBiL2lwL3J0cHIKK0BAIC0xLDQgKzEsNCBAQAorLSMhIC9iaW4vYmFzaAorKyMhIC9iaW4vc2gKKyAKKyBleGVjIHRyICJbXFxcXF0iICJbCisgXSIKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIvY29uZmlndXJlLWNyb3NzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyL2NvbmZpZ3VyZS1jcm9zcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjY2MDljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyL2NvbmZpZ3VyZS1jcm9zcy5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDg1YjA1ODliNDg0M2MwM2U4ZTZmZDk0MTZkNzFlYTQ0OWE3M2M1YzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogVGh1LCAzIE5vdiAyMDExIDEwOjQ2OjE2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIG1ha2UgY29uZmlndXJlIGNyb3NzIGNvbXBpbGUgc2FmZQorCitBY2NvcmRpbmcgdG8gS2V2aW4gVGlhbjoKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorU2lnbmVkLW9mZi1ieTogU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisKK0luZGV4OiBpcHJvdXRlMi0zLjcuMC9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpcHJvdXRlMi0zLjcuMC5vcmlnL2NvbmZpZ3VyZQorKysrIGlwcm91dGUyLTMuNy4wL2NvbmZpZ3VyZQorQEAgLTIsNiArMiw3IEBACisgIyBUaGlzIGlzIG5vdCBhbiBhdXRjb25mIGdlbmVyYXRlZCBjb25maWd1cmUKKyAjCisgSU5DTFVERT0kezE6LSIkUFdEL2luY2x1ZGUifQorK1NZU1JPT1Q9JDEKKyAKKyAjIE1ha2UgYSB0ZW1wIGRpcmVjdG9yeSBpbiBidWlsZCB0cmVlLgorIFRNUERJUj0kKG1rdGVtcCAtZCBjb25maWcuWFhYWFhYKQorQEAgLTE1OCw3ICsxNTksNyBAQCBjaGVja19pcHRfbGliX2RpcigpCisgCQlyZXR1cm4KKyAJZmkKKyAKKy0JZm9yIGRpciBpbiAvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliCisrCWZvciBkaXIgaW4gJFNZU1JPT1QvbGliICRTWVNST09UL3Vzci9saWIgJFNZU1JPT1QvdXNyL2xvY2FsL2xpYgorIAlkbworIAkJZm9yIGZpbGUgaW4gJGRpci97eHRhYmxlcyxpcHRhYmxlc30vbGliKnRfKnNvIDsgZG8KKyAJCQlpZiBbIC1mICRmaWxlIF07IHRoZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMl80LjEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMl80LjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGRiMGJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyXzQuMS4xLmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgaXByb3V0ZTIuaW5jCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC91dGlscy9uZXQvJHtCUE59LyR7QlB9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtY3Jvc3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1pcHJvdXRlMi1kZS1iYXNoLXNjcmlwdHMucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICIzOTI5MGNiM2E1NWQzOGRkOGQxMGUxOWEzMDk0MTA5ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MzA3N2E5ODllZmI5MzQ0NTBiZDY1NWNiZDlhYWRkYWE3NDdjYjY5NmM2NGQwYzlhMzMyMzc2OGE2YThlNjZmIgorCisjIENGTEFHUyBhcmUgY29tcHV0ZWQgaW4gTWFrZWZpbGUgYW5kIHJlZmVyZW5jZSBDQ09QVFMKKyMKK0VYVFJBX09FTUFLRV9hcHBlbmQgPSAiIENDT1BUUz0nJHtDRkxBR1N9JyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcmRhLXV0aWxzL2lyZGEtdXRpbHMtMC45LjE4L2luaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzLTAuOS4xOC9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZmMjllOWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzLTAuOS4xOC9pbml0CkBAIC0wLDAgKzEsNzggQEAKKyMhIC9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGlyZGEKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRuZXR3b3JrICRyZW1vdGVfZnMKKyMgUmVxdWlyZWQtU3RvcDogICAgICRuZXR3b3JrICRyZW1vdGVfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBJbmZyYXJlZCBwb3J0IHN1cHBvcnQKKyMjIyBFTkQgSU5JVCBJTkZPCisKK05BTUU9ImlyYXR0YWNoIgordGVzdCAteCAiJElSREFfREFFTU9OIiB8fCBJUkRBX0RBRU1PTj0vdXNyL3NiaW4vaXJhdHRhY2gKK3Rlc3QgLXogIiRJUkFUVEFDSF9QSUQiICYmIElSQVRUQUNIX1BJRD0vdmFyL3J1bi9pcmF0dGFjaC5waWQKKworIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK21vZHVsZV9pZCgpIHsKKyAgICAgICAgYXdrICdCRUdJTiB7IEZTPSI6ICIgfSAvSGFyZHdhcmUvIHsgcHJpbnQgJDIgfSAnIDwvcHJvYy9jcHVpbmZvCit9CisKK2lmIFsgISAtZiAvZXRjL3N5c2NvbmZpZy9pcmRhIF07IHRoZW4KKyAgICBjYXNlIGBtb2R1bGVfaWRgIGluCisJIkhQIGlQQVEgSDIyMDAiIHwgIkhQIGlQQVEgSFg0NzAwIiB8ICJIVEMgVW5pdmVyc2FsIikKKwkgICAgSVJEQT15ZXMKKwkgICAgREVWSUNFPS9kZXYvdHR5UzIKKwkgICAgRE9OR0xFPQorCSAgICBESVNDT1ZFUlk9CisJICAgIDs7CisJKikKKwkgICAgSVJEQT15ZXMKKwkgICAgREVWSUNFPS9kZXYvdHR5UzEKKwkgICAgRE9OR0xFPQorCSAgICBESVNDT1ZFUlk9CisJICAgIDs7CisgICAgZXNhYworZWxzZQorICAgIC4gL2V0Yy9zeXNjb25maWcvaXJkYQorZmkKKworIyBDaGVjayB0aGF0IGlyZGEgaXMgdXAuCitbICR7SVJEQX0gPSAibm8iIF0gJiYgZXhpdCAwCisKK1sgLWYgL3Vzci9zYmluL2lyYXR0YWNoIF0gfHwgZXhpdCAwCisKK0FSR1M9CitpZiBbICRET05HTEUgXTsgdGhlbgorCUFSR1M9IiRBUkdTIC1kICRET05HTEUiCitmaQoraWYgWyAiJERJU0NPVkVSWSIgPSAieWVzIiBdO3RoZW4KKwlBUkdTPSIkQVJHUyAtcyIKK2ZpCisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwllY2hvIC1uICJTdGFydGluZyBJckRBOiAkTkFNRSIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1leGVjICIkSVJEQV9EQUVNT04iICR7REVWSUNFfSAke0FSR1N9IC0tcGlkZmlsZSAiJElSQVRUQUNIX1BJRCIKKwlzbGVlcCAxCisJWyAtZiAvdmFyL3J1bi9pcmF0dGFjaC5waWQgXSAmJiBlY2hvICIgZG9uZSIgfHwgZWNobyAiIGZhaWwiCisJOzsKKyAgc3RvcCkKKwllY2hvICJTdG9wcGluZyBJckRBOiAkTkFNRSIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLWV4ZWMgIiRJUkRBX0RBRU1PTiIgLS1waWRmaWxlICIkSVJBVFRBQ0hfUElEIgorCTs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCSQwIHN0b3AKKwkkMCBzdGFydAorCTs7CisgIHN0YXR1cykKKwlzdGF0dXMgaXJhdHRhY2gKKwlleGl0ICQ/CisJOzsKKyAgKikKKwlOPS9ldGMvaW5pdC5kLyROQU1FCisJZWNobyAiVXNhZ2U6ICROIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfHN0YXR1c30iID4mMgorCWV4aXQgMQorCTs7Citlc2FjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzLTAuOS4xOC9sZGZsYWdzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lyZGEtdXRpbHMvaXJkYS11dGlscy0wLjkuMTgvbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTVmZTM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lyZGEtdXRpbHMvaXJkYS11dGlscy0wLjkuMTgvbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDc1IEBACitPYmV5IExERkxBR1MKKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gaXJkYS11dGlscy0wLjkuMTgub3JpZy9maW5kY2hpcC9NYWtlZmlsZQorKysrIGlyZGEtdXRpbHMtMC45LjE4L2ZpbmRjaGlwL01ha2VmaWxlCitAQCAtNjUsNSArNjUsNSBAQCBpbnN0YWxsOiBmaW5kY2hpcAorCisgZ2ZpbmRjaGlwOiBnZmluZGNoaXAuYworCSQocHJuX2NjKQorLQkkKEVDTUQpKSQoQ0MpICQoQ0ZMQUdTKSBgZ3RrLWNvbmZpZyAtLWNmbGFnc2AgICQ8IC1vICRAIGBndGstY29uZmlnIC0tbGlic2AKKysJJChFQ01EKSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIGBndGstY29uZmlnIC0tY2ZsYWdzYCAgJDwgLW8gJEAgYGd0ay1jb25maWcgLS1saWJzYAorCistLS0gaXJkYS11dGlscy0wLjkuMTgub3JpZy9pcmF0dGFjaC9NYWtlZmlsZQorKysrIGlyZGEtdXRpbHMtMC45LjE4L2lyYXR0YWNoL01ha2VmaWxlCitAQCAtNDksMTMgKzQ5LDEzIEBAIGFsbDogJChUQVJHRVRTKQorCisgaXJhdHRhY2g6IGlyYXR0YWNoLm8gdXRpbC5vCisJJChwcm5fY2NfbykKKy0JJChFQ01EKSQoQ0MpICQoQ0ZMQUdTKSBpcmF0dGFjaC5vIHV0aWwubyAtbyAkQAorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgaXJhdHRhY2gubyB1dGlsLm8gLW8gJEAKKworCisKKyBkb25nbGVfYXR0YWNoOiBkb25nbGVfYXR0YWNoLm8KKwkkKHBybl9jY19vKQorLQkkKEVDTUQpJChDQykgJChDRkxBR1MpIGRvbmdsZV9hdHRhY2gubyAtbyAkQAorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgZG9uZ2xlX2F0dGFjaC5vIC1vICRACisKKworIGluc3RhbGw6ICQoVEFSR0VUUykKKy0tLSBpcmRhLXV0aWxzLTAuOS4xOC5vcmlnL2lyZGFkdW1wL01ha2VmaWxlCisrKysgaXJkYS11dGlscy0wLjkuMTgvaXJkYWR1bXAvTWFrZWZpbGUKK0BAIC00MCw3ICs0MCw3IEBAIGxpYl9pcmRhZHVtcC5hOiAkKExJQklSREFEVU1QX09CSlMpCisKKyBpcmRhZHVtcDogJChJUkRBRFVNUF9PQkpTKSAkKExJQklSREFEVU1QX1RBUkdFVCkKKwkkKHBybl9jY19vKQorLQkkKEVDTUQpJChDQykgJChDRkxBR1MpIGBwa2ctY29uZmlnIC0tbGlicyBnbGliLTIuMGAgLW8gICQoSVJEQURVTVBfVEFSR0VUKSAkPCAkKExJQklSREFEVU1QX1RBUkdFVCkKKysJJChFQ01EKSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIGBwa2ctY29uZmlnIC0tbGlicyBnbGliLTIuMGAgLW8gICQoSVJEQURVTVBfVEFSR0VUKSAkPCAkKExJQklSREFEVU1QX1RBUkdFVCkKKworCisgLmMubzoKKy0tLSBpcmRhLXV0aWxzLTAuOS4xOC5vcmlnL2lyZGFwaW5nL01ha2VmaWxlCisrKysgaXJkYS11dGlscy0wLjkuMTgvaXJkYXBpbmcvTWFrZWZpbGUKK0BAIC01Niw3ICs1Niw3IEBAIGFsbDogJChUQVJHRVRTKQorCisgaXJkYXBpbmc6ICQoT0JKUykKKwkkKHBybl9jY19vKQorLQkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoT0JKUykgLW8gJEAKKysJJChFQ01EKSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICQoT0JKUykgLW8gJEAKKworCisgLmMubzoKKy0tLSBpcmRhLXV0aWxzLTAuOS4xOC5vcmlnL2lybmV0ZC9NYWtlZmlsZQorKysrIGlyZGEtdXRpbHMtMC45LjE4L2lybmV0ZC9NYWtlZmlsZQorQEAgLTUwLDcgKzUwLDcgQEAgYWxsOiAkKFRBUkdFVFMpCisKKyBpcm5ldGQ6ICQoT0JKUykKKwkkKHBybl9jY19vKQorLQkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoT0JKUykgLW8gJEAKKysJJChFQ01EKSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICQoT0JKUykgLW8gJEAKKworCisgaW5zdGFsbDogaXJuZXRkCistLS0gaXJkYS11dGlscy0wLjkuMTgub3JpZy9wc2lvbi9NYWtlZmlsZQorKysrIGlyZGEtdXRpbHMtMC45LjE4L3BzaW9uL01ha2VmaWxlCitAQCAtMjUsNCArMjUsNCBAQCBpbnN0YWxsOiAkKFBTSU9OX1RBUkdFVFMpCisgQ0ZMQUdTICs9IC1nIC1JLi4vaW5jbHVkZSAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzICQoUlBNX09QVF9GTEFHUykKKyBpcnBzaW9uNToKKwkkKHBybl9jY19vKQorLQkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoUFNJT05fU1JDKSAtbyAkQAorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAkKFBTSU9OX1NSQykgLW8gJEAKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lyZGEtdXRpbHMvaXJkYS11dGlsc18wLjkuMTguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzXzAuOS4xOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWMzYjE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lyZGEtdXRpbHMvaXJkYS11dGlsc18wLjkuMTguYmIKQEAgLTAsMCArMSw1MCBAQAorU1VNTUFSWSA9ICJDb21tb24gZmlsZXMgZm9yIElyREEiCitERVNDUklQVElPTiA9ICJQcm92aWRlcyBjb21tb24gZmlsZXMgbmVlZGVkIHRvIHVzZSBJckRBLiBcCitJckRBIGFsbG93cyBjb21tdW5pY2F0aW9uIG92ZXIgSW5mcmFyZWQgd2l0aCBvdGhlciBkZXZpY2VzIFwKK3N1Y2ggYXMgcGhvbmVzIGFuZCBsYXB0b3BzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9pcmRhLnNvdXJjZWZvcmdlLm5ldC8iCitCVUdUUkFDS0VSID0gImlyZGEtdXNlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0IgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9pcmRhZHVtcC9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zbWNpbml0L0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21hbi9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pcmRhZHVtcC9pcmRhZHVtcC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjQ7bWQ1PWQ3OGI5ZGNlM2NkNzhjMjIyMDI1MGM5YzdhMmJlMTc4IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9pcmRhL2lyZGEtdXRpbHMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2xkZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaW5pdCIKKworU1JDX1VSSVttZDVzdW1dID0gIjg0ZGMxMmFhNGMzZjYxZmNjYjhkODkxOWJmNDA3OWJiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYxOTgwNTUxZTQ2YjJlYWE5ZTE3YWQzMWNiYzFhNjM4MDc0NjExZmMzM2JmZjM0MTYzZDEwYzdhNjdhOWZkYzYiCisKK2luaGVyaXQgdXBkYXRlLXJjLmQKKworRVhUUkFfT0VNQUtFID0gIlwKKyAgICAnQ0M9JHtDQ30nIFwKKyAgICAnTEQ9JHtMRH0nIFwKKyAgICAnQ0ZMQUdTPSR7Q0ZMQUdTfScgXAorICAgICdMREZMQUdTPSR7TERGTEFHU30nIFwKKyAgICAnU1lTX0lOQ0xVREVTPScgXAorICAgICdWPTEnIFwKKyIKKworSU5JVFNDUklQVF9OQU1FID0gImlyYXR0YWNoIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMgMjAiCisKK1RBUkdFVFMgPz89ICJpcmF0dGFjaCBpcmRhcGluZyIKK2RvX2NvbXBpbGUgKCkgeworCWZvciB0IGluICR7VEFSR0VUU307IGRvCisJCW9lX3J1bm1ha2UgLUMgJHQKKwlkb25lCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlmb3IgdCBpbiAke1RBUkdFVFN9OyBkbworCQlvZV9ydW5tYWtlIC1DICR0IFJPT1Q9IiR7RH0iIGluc3RhbGwKKwlkb25lCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLyR7SU5JVFNDUklQVF9OQU1FfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3LzAwMDEtaXctdmVyc2lvbi5zaC1kb24tdC11c2UtZ2l0LWRlc2NyaWJlLWZvci12ZXJzaW9uaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3LzAwMDEtaXctdmVyc2lvbi5zaC1kb24tdC11c2UtZ2l0LWRlc2NyaWJlLWZvci12ZXJzaW9uaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYTc3YjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXcvMDAwMS1pdy12ZXJzaW9uLnNoLWRvbi10LXVzZS1naXQtZGVzY3JpYmUtZm9yLXZlcnNpb25pbmcucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA1MzEwYWJiYTg2NGNmZTNhOGI2NWFmMTMwNzI5NDQ3NjA0MTkwYjI5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IFR1ZSwgMjkgTm92IDIwMTEgMTc6MDM6MjcgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gaXc6IHZlcnNpb24uc2g6IGRvbid0IHVzZSBnaXQgZGVzY3JpYmUgZm9yIHZlcnNpb25pbmcKKworSXQgd2lsbCBkZXRlY3QgdG9wLWxldmVsIGdpdCByZXBvc2l0b3JpZXMgbGlrZSB0aGUgQW5nc3Ryb20gc2V0dXAtc2NyaXB0cyBhbmQgYnJlYWsuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorLS0tCisgdmVyc2lvbi5zaCB8IDE2ICstLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDE1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdmVyc2lvbi5zaCBiL3ZlcnNpb24uc2gKK2luZGV4IDExZDEyNGIuLjVkNDIzYzQgMTAwNzU1CistLS0gYS92ZXJzaW9uLnNoCisrKysgYi92ZXJzaW9uLnNoCitAQCAtMywyMSArMyw3IEBACisgVkVSU0lPTj0iMy4xNSIKKyBPVVQ9IiQxIgorIAorLWlmIFsgLWQgLmdpdCBdICYmIGhlYWQ9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCAyPi9kZXYvbnVsbGA7IHRoZW4KKy0JZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggLS11bm1lcmdlZCA+IC9kZXYvbnVsbAorLQlkZXNjcj0kKGdpdCBkZXNjcmliZSkKKy0KKy0JIyBvbiBnaXQgYnVpbGRzIGNoZWNrIHRoYXQgdGhlIHZlcnNpb24gbnVtYmVyIGFib3ZlCistCSMgaXMgY29ycmVjdC4uLgorLQlbICIke2Rlc2NyJSUtKn0iID0gInYkVkVSU0lPTiIgXSB8fCBleGl0IDIKKy0KKy0Jdj0iJHtkZXNjciN2fSIKKy0JaWYgZ2l0IGRpZmYtaW5kZXggLS1uYW1lLW9ubHkgSEVBRCB8IHJlYWQgZHVtbXkgOyB0aGVuCistCQl2PSIkdiItZGlydHkKKy0JZmkKKy1lbHNlCistCXY9IiRWRVJTSU9OIgorLWZpCisrdj0iJFZFUlNJT04iCisgCisgZWNobyAnI2luY2x1ZGUgIml3LmgiJyA+ICIkT1VUIgorIGVjaG8gImNvbnN0IGNoYXIgaXdfdmVyc2lvbltdID0gXCIkdlwiOyIgPj4gIiRPVVQiCistLSAKKzEuNy43LjMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pdy9zZXBhcmF0ZS1vYmpkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXcvc2VwYXJhdGUtb2JqZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4M2Y4YjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXcvc2VwYXJhdGUtb2JqZGlyLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0Zyb20gOWUyN2ZjMmUxYjNkYzhjMzZlZjZhNTAyZWRmZmMzYTNkODRkOWRkOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CitEYXRlOiBXZWQsIDI2IEF1ZyAyMDE1IDE3OjIzOjQ4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFN1cHBvcnQgc2VwYXJhdGlvbiBvZiBTUkNESVIgYW5kIE9CSkRJUgorCitUeXBpY2FsIHVzZSBvZiBWUEFUSCB0byBsb2NhdGUgdGhlIHNvdXJjZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorCistLS0KKyBNYWtlZmlsZSAgIHwgNyArKysrKy0tCisgdmVyc2lvbi5zaCB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDU0ODU5MWEuLmRhOGQzM2EgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0xLDUgKzEsOCBAQAorIE1BS0VGTEFHUyArPSAtLW5vLXByaW50LWRpcmVjdG9yeQorIAorK1NSQ0RJUiA/PSAkKGRpciAkKGxhc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKQorK09CSkRJUiA/PSAkKFBXRCkKKytWUEFUSCA9ICQoU1JDRElSKQorIFBSRUZJWCA/PSAvdXNyCisgU0JJTkRJUiA/PSAkKFBSRUZJWCkvc2JpbgorIE1BTkRJUiA/PSAkKFBSRUZJWCkvc2hhcmUvbWFuCitAQCAtOTUsMTEgKzk4LDExIEBAIFZFUlNJT05fT0JKUyA6PSAkKGZpbHRlci1vdXQgdmVyc2lvbi5vLCAkKE9CSlMpKQorIHZlcnNpb24uYzogdmVyc2lvbi5zaCAkKHBhdHN1YnN0ICUubywlLmMsJChWRVJTSU9OX09CSlMpKSBubDgwMjExLmggaXcuaCBNYWtlZmlsZSBcCisgCQkkKHdpbGRjYXJkIC5naXQvaW5kZXggLmdpdC9yZWZzL3RhZ3MpCisgCUAkKE5RKSAnIEdFTiAnICRACistCSQoUSkuL3ZlcnNpb24uc2ggJEAKKysJJChRKWNkICQoU1JDRElSKSAmJiAuL3ZlcnNpb24uc2ggJChPQkpESVIpLyRACisgCisgJS5vOiAlLmMgaXcuaCBubDgwMjExLmgKKyAJQCQoTlEpICcgQ0MgICcgJEAKKy0JJChRKSQoQ0MpICQoQ0ZMQUdTKSAtYyAtbyAkQCAkPAorKwkkKFEpJChDQykgLUkkKFNSQ0RJUikgJChDRkxBR1MpIC1jIC1vICRAICQ8CisgCisgaWZlcSAoJChJV19BTkRST0lEX0JVSUxEKSwpCisgaXc6CSQoT0JKUykKK2RpZmYgLS1naXQgYS92ZXJzaW9uLnNoIGIvdmVyc2lvbi5zaAoraW5kZXggNTM1NDM4My4uZmE5NTRjZiAxMDA3NTUKKy0tLSBhL3ZlcnNpb24uc2gKKysrKyBiL3ZlcnNpb24uc2gKK0BAIC01LDUgKzUsNSBAQCBPVVQ9IiQxIgorIAorIHY9IiRWRVJTSU9OIgorIAorLWVjaG8gJyNpbmNsdWRlICJpdy5oIicgPiAiJE9VVCIKKytlY2hvICcjaW5jbHVkZSA8aXcuaD4nID4gIiRPVVQiCisgZWNobyAiY29uc3QgY2hhciBpd192ZXJzaW9uW10gPSBcIiR2XCI7IiA+PiAiJE9VVCIKKy0tIAorMi4yLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3XzQuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pd180LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmYjBlMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pd180LjEuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJubDgwMjExIGJhc2VkIENMSSBjb25maWd1cmF0aW9uIHV0aWxpdHkgZm9yIHdpcmVsZXNzIGRldmljZXMiCitERVNDUklQVElPTiA9ICJpdyBpcyBhIG5ldyBubDgwMjExIGJhc2VkIENMSSBjb25maWd1cmF0aW9uIHV0aWxpdHkgZm9yIFwKK3dpcmVsZXNzIGRldmljZXMuIEl0IHN1cHBvcnRzIGFsbW9zdCBhbGwgbmV3IGRyaXZlcnMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgXAordG8gdGhlIGtlcm5lbCByZWNlbnRseS4gIgorSE9NRVBBR0UgPSAiaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRG9jdW1lbnRhdGlvbi9pdyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODc4NjE4YTVjNGFmMjVlOWI5M2VmMGJlMWE5M2Y3NzQiCisKK0RFUEVORFMgPSAibGlibmwiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9uZXR3b3JrL2l3LyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWl3LXZlcnNpb24uc2gtZG9uLXQtdXNlLWdpdC1kZXNjcmliZS1mb3ItdmVyc2lvbmluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zZXBhcmF0ZS1vYmpkaXIucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjhjMjgyMjg1YzcxYzk1NjA2OTk1N2U5Y2ExMGE2YTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTRiZmM2MjdiMzdmN2Y2MDdlNGZmYTYzYTcwZGVkMTVmYTJlYTg1MTc3ZjcwM2NiMTdkN2ZlMzZmOWM4ZjMzZCIKKworaW5oZXJpdCBwa2djb25maWcKKworRVhUUkFfT0VNQUtFID0gIlwKKyAgICAtZiAnJHtTfS9NYWtlZmlsZScgXAorICAgIFwKKyAgICAnUFJFRklYPSR7cHJlZml4fScgXAorICAgICdTQklORElSPSR7c2JpbmRpcn0nIFwKKyAgICAnTUFORElSPSR7bWFuZGlyfScgXAorIgorQiA9ICIke1dPUktESVJ9L2J1aWxkIgorCitkb19pbnN0YWxsKCkgeworICAgIG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYm5zcy1tZG5zL2xpYm5zcy1tZG5zXzAuMTAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlibnNzLW1kbnMvbGlibnNzLW1kbnNfMC4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjkzNmVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYm5zcy1tZG5zL2xpYm5zcy1tZG5zXzAuMTAuYmIKQEAgLTAsMCArMSwzOCBAQAorU1VNTUFSWSA9ICJOYW1lIFNlcnZpY2UgU3dpdGNoIG1vZHVsZSBmb3IgTXVsdGljYXN0IEROUyAoemVyb2NvbmYpIG5hbWUgcmVzb2x1dGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly8wcG9pbnRlci5kZS9sZW5uYXJ0L3Byb2plY3RzL25zcy1tZG5zLyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSIKKworREVQRU5EUyA9ICJhdmFoaSIKK1BSID0gInI3IgorCitTUkNfVVJJID0gImh0dHA6Ly8wcG9pbnRlci5kZS9sZW5uYXJ0L3Byb2plY3RzL25zcy1tZG5zL25zcy1tZG5zLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjAzOTM4ZjE3NjQ2ZWZiYjUwYWE3MGJhNWY5OWY1MWQ3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFlNjgzYzJlN2MzOTIxODE0NzA2ZDYyZmJiZDNlOWNiZjQ5M2E3NWZhMDAyNTVlMGU3MTU1MDhkODEzNGZhNmQiCisKK1MgPSAiJHtXT1JLRElSfS9uc3MtbWRucy0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRVhUUkFfT0VDT05GID0gIi0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IC0tZGlzYWJsZS1seW54IC0tZW5hYmxlLWF2YWhpIgorCisjIHN1cHByZXNzIHdhcm5pbmcsIGJ1dCBkb24ndCBib3RoZXIgd2l0aCBhdXRvbmFtZXIKK0xFQURfU09OQU1FID0gImxpYm5zc19tZG5zLnNvIgorREVCSUFOTkFNRV8ke1BOfSA9ICJsaWJuc3MtbWRucyIKKworUkRFUEVORFNfJHtQTn0gPSAiYXZhaGktZGFlbW9uIgorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCXNlZCAtZSAnL15ob3N0czovcy9ccypcPG1kbnNcPi8vJyBcCisJCS1lICdzL1woXmhvc3RzOi4qXClcKFw8ZmlsZXNcPlwpXCguKlwpXChcPGRuc1w+XClcKC4qXCkvXDFcMiBtZG5zNF9taW5pbWFsIFtOT1RGT1VORD1yZXR1cm5dXDNcNCBtZG5zXDUvJyBcCisJCS1pICREJHtzeXNjb25mZGlyfS9uc3N3aXRjaC5jb25mCit9CisKK3BrZ19wcmVybV8ke1BOfSAoKSB7CisJc2VkIC1lICcvXmhvc3RzOi9zL1xzKlw8bWRuc1w+Ly8nIFwKKwkJLWUgJy9eaG9zdHM6L3MvXHMqbWRuczRfbWluaW1hbFxzXCtcW05PVEZPVU5EPXJldHVyblxdLy8nIFwKKwkJLWkgJEQke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg3M2MyNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAuaW5jCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiSW50ZXJmYWNlIGZvciB1c2VyLWxldmVsIG5ldHdvcmsgcGFja2V0IGNhcHR1cmUiCitERVNDUklQVElPTiA9ICJMaWJwY2FwIHByb3ZpZGVzIGEgcG9ydGFibGUgZnJhbWV3b3JrIGZvciBsb3ctbGV2ZWwgbmV0d29yayBcCittb25pdG9yaW5nLiAgTGlicGNhcCBjYW4gcHJvdmlkZSBuZXR3b3JrIHN0YXRpc3RpY3MgY29sbGVjdGlvbiwgXAorc2VjdXJpdHkgbW9uaXRvcmluZyBhbmQgbmV0d29yayBkZWJ1Z2dpbmcuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy50Y3BkdW1wLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9NTMwNjcmYXRpZD00Njk1NzciCitTRUNUSU9OID0gImxpYnMvbmV0d29yayIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MWQ0YjAzNjY1NTc5NTFjODRhOTRmYWJlMzUyOWY4NjcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcGNhcC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MzI7bWQ1PTM5YWYzNTEwZTAxMWYzNGI4ODcyZjEyMGIxZGMzMWQyIgorREVQRU5EUyA9ICJmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUiCisKK0lOQ19QUiA9ICJyNSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LnRjcGR1bXAub3JnL3JlbGVhc2UvJHtCUH0udGFyLmd6IgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L3BjYXAtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnIGJsdWV0b290aAorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXBjYXA9bGludXgiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICcke0JMVUVafScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2JsdWV6NF0gPSAiLS1lbmFibGUtYmx1ZXRvb3RoLC0tZGlzYWJsZS1ibHVldG9vdGgsYmx1ZXo0IgorIyBBZGQgYSBkdW1teSBQQUNLQUdFQ09ORklHIGZvciBibHVlejUgc2luY2UgaXQgaXMgbm90IHN1cHBvcnRlZCBieSBsaWJwY2FwLgorUEFDS0FHRUNPTkZJR1tibHVlejVdID0gIiwsIgorUEFDS0FHRUNPTkZJR1tjYW51c2JdID0gIi0tZW5hYmxlLWNhbnVzYiwtLWVuYWJsZS1jYW51c2I9bm8sbGlidXNiIgorUEFDS0FHRUNPTkZJR1tkYnVzXSA9ICItLWVuYWJsZS1kYnVzLC0tZGlzYWJsZS1kYnVzLGRidXMiCitQQUNLQUdFQ09ORklHW2xpYm5sXSA9ICItLXdpdGgtbGlibmwsLS13aXRob3V0LWxpYm5sLGxpYm5sIgorCitDUFBGTEFHU19wcmVwZW5kID0gIi1JJHtTfSAiCitDRkxBR1NfcHJlcGVuZCA9ICItSSR7U30gIgorQ1hYRkxBR1NfcHJlcGVuZCA9ICItSSR7U30gIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICAgaWYgWyAhIC1lICR7U30vYWNpbmNsdWRlLm00IF07IHRoZW4KKyAgICAgICAgY2F0ICR7U30vYWNsb2NhbC5tNCA+ICR7U30vYWNpbmNsdWRlLm00CisgICAgZmkKKyAgICBzZWQgLWkgLWUncyxeVl9SUEFUSF9PUFQ9LiokLFZfUlBBVEhfT1BUPSwnICR7U30vcGNhcC1jb25maWcuaW4KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAvYWNsb2NhbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAvYWNsb2NhbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTUxOTgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC9hY2xvY2FsLnBhdGNoCkBAIC0wLDAgKzEsMTY3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2RpZmYgLXJ1TiBsaWJwY2FwLTEuMS4xLW9yaWcvYWNsb2NhbC5tNCBsaWJwY2FwLTEuMS4xL2FjbG9jYWwubTQKKy0tLSBsaWJwY2FwLTEuMS4xLW9yaWcvYWNsb2NhbC5tNAkyMDEwLTA2LTI5IDEwOjQ2OjMyLjgxNTExNzU2OSArMDgwMAorKysrIGxpYnBjYXAtMS4xLjEvYWNsb2NhbC5tNAkyMDEwLTA2LTI5IDEwOjQ5OjE3LjE1MDE0OTk0OSArMDgwMAorQEAgLTM3LDcgKzM3LDcgQEAKKyBkbmwgQUNfTEJMX0NfSU5JVC4gIE5vdywgd2UgcnVuIEFDX0xCTF9DX0lOSVRfQkVGT1JFX0NDLCBBQ19QUk9HX0NDLAorIGRubCBhbmQgQUNfTEJMX0NfSU5JVCBhdCB0aGUgdG9wIGxldmVsLgorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9DX0lOSVRfQkVGT1JFX0NDLAorK0FDX0RFRlVOKFtBQ19MQkxfQ19JTklUX0JFRk9SRV9DQ10sCisgWworICAgICBBQ19CRUZPUkUoWyQwXSwgW0FDX0xCTF9DX0lOSVRdKQorICAgICBBQ19CRUZPUkUoWyQwXSwgW0FDX1BST0dfQ0NdKQorQEAgLTkwLDcgKzkwLDcgQEAKKyBkbmwgICAgIExERkxBR1MKKyBkbmwgICAgIExCTF9DRkxBR1MKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfQ19JTklULAorK0FDX0RFRlVOKFtBQ19MQkxfQ19JTklUXSwKKyBbCisgICAgIEFDX0JFRk9SRShbJDBdLCBbQUNfTEJMX0ZJWElOQ0xVREVTXSkKKyAgICAgQUNfQkVGT1JFKFskMF0sIFtBQ19MQkxfREVWRUxdKQorQEAgLTIxNyw3ICsyMTcsNyBAQAorIGRubAlWX1NPTkFNRV9PUFQKKyBkbmwJVl9SUEFUSF9PUFQKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfU0hMSUJTX0lOSVQsCisrQUNfREVGVU4oW0FDX0xCTF9TSExJQlNfSU5JVF0sCisgICAgIFtBQ19QUkVSRVEoMi41MCkKKyAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCisgCSAgICAjCitAQCAtMzYxLDcgKzM2MSw3IEBACisgIyBNYWtlIHN1cmUgd2UgdXNlIHRoZSBWX0NDT1BUIGZsYWdzLCBiZWNhdXNlIHNvbWUgb2YgdGhvc2UgbWlnaHQKKyAjIGRpc2FibGUgaW5saW5pbmcuCisgIworLUFDX0RFRlVOKEFDX0xCTF9DX0lOTElORSwKKytBQ19ERUZVTihbQUNfTEJMX0NfSU5MSU5FXSwKKyAgICAgW0FDX01TR19DSEVDS0lORyhmb3IgaW5saW5lKQorICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgQ0ZMQUdTPSIkVl9DQ09QVCIKK0BAIC00MDcsNyArNDA3LDcgQEAKKyBkbmwKKyBkbmwJQUNfTEJMX0ZJWElOQ0xVREVTCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0ZJWElOQ0xVREVTLAorK0FDX0RFRlVOKFtBQ19MQkxfRklYSU5DTFVERVNdLAorICAgICBbaWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCisgCSAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEFOU0kgaW9jdGwgZGVmaW5pdGlvbnMpCisgCSAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfbGJsX2djY19maXhpbmNsdWRlcywKK0BAIC00NTMsNyArNDUzLDcgQEAKKyBkbmwJJDIgKHlhY2MgYXBwZW5kZWQpCisgZG5sCSQzIChvcHRpb25hbCBmbGV4IGFuZCBiaXNvbiAtUCBwcmVmaXgpCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0xFWF9BTkRfWUFDQywKKytBQ19ERUZVTihbQUNfTEJMX0xFWF9BTkRfWUFDQ10sCisgICAgIFtBQ19BUkdfV0lUSChmbGV4LCBbICAtLXdpdGhvdXQtZmxleCAgICAgICAgICBkb24ndCB1c2UgZmxleF0pCisgICAgIEFDX0FSR19XSVRIKGJpc29uLCBbICAtLXdpdGhvdXQtYmlzb24gICAgICAgICBkb24ndCB1c2UgYmlzb25dKQorICAgICBpZiB0ZXN0ICIkd2l0aF9mbGV4IiA9IG5vIDsgdGhlbgorQEAgLTUwNiw3ICs1MDYsNyBAQAorIGRubAorIGRubAlERUNMV0FJVFNUQVRVUyAoZGVmaW5lZCkKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfVU5JT05fV0FJVCwKKytBQ19ERUZVTihbQUNfTEJMX1VOSU9OX1dBSVRdLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIHVuaW9uIHdhaXQgaXMgdXNlZCkKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF91bmlvbl93YWl0LAorIAlBQ19UUllfQ09NUElMRShbCitAQCAtNTM1LDcgKzUzNSw3IEBACisgZG5sCisgZG5sCUhBVkVfU09DS0FERFJfU0FfTEVOIChkZWZpbmVkKQorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9TT0NLQUREUl9TQV9MRU4sCisrQUNfREVGVU4oW0FDX0xCTF9TT0NLQUREUl9TQV9MRU5dLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIHNvY2thZGRyIHN0cnVjdCBoYXMgdGhlIHNhX2xlbiBtZW1iZXIpCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfc29ja2FkZHJfaGFzX3NhX2xlbiwKKyAJQUNfVFJZX0NPTVBJTEUoWworQEAgLTU2MCw3ICs1NjAsNyBAQAorIGRubAorIGRubAlIQVZFX1NPQ0tBRERSX1NUT1JBR0UgKGRlZmluZWQpCisgZG5sCistQUNfREVGVU4oQUNfTEJMX1NPQ0tBRERSX1NUT1JBR0UsCisrQUNfREVGVU4oW0FDX0xCTF9TT0NLQUREUl9TVE9SQUdFXSwKKyAgICAgW0FDX01TR19DSEVDS0lORyhpZiBzb2NrYWRkcl9zdG9yYWdlIHN0cnVjdCBleGlzdHMpCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfaGFzX3NvY2thZGRyX3N0b3JhZ2UsCisgCUFDX1RSWV9DT01QSUxFKFsKK0BAIC01OTMsNyArNTkzLDcgQEAKKyBkbmwgd29uJ3QgYmUgdXNpbmcgY29kZSB0aGF0IHdvdWxkIHVzZSB0aGF0IG1lbWJlciwgb3Igd2Ugd291bGRuJ3QKKyBkbmwgY29tcGlsZSBpbiBhbnkgY2FzZSkuCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0hQX1BQQV9JTkZPX1RfRExfTU9EVUxFX0lEXzEsCisrQUNfREVGVU4oW0FDX0xCTF9IUF9QUEFfSU5GT19UX0RMX01PRFVMRV9JRF8xXSwKKyAgICAgW0FDX01TR19DSEVDS0lORyhpZiBkbF9ocF9wcGFfaW5mb190IHN0cnVjdCBoYXMgZGxfbW9kdWxlX2lkXzEgbWVtYmVyKQorICAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfbGJsX2RsX2hwX3BwYV9pbmZvX3RfaGFzX2RsX21vZHVsZV9pZF8xLAorIAlBQ19UUllfQ09NUElMRShbCitAQCAtNjE5LDcgKzYxOSw3IEBACisgZG5sCisgZG5sCWFjX2N2X2xibF9oYXZlX3J1bl9wYXRoICh5ZXMgb3Igbm8pCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0hBVkVfUlVOX1BBVEgsCisrQUNfREVGVU4oW0FDX0xCTF9IQVZFX1JVTl9QQVRIXSwKKyAgICAgW0FDX01TR19DSEVDS0lORyhmb3IgJHtDQy1jY30gLVIpCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfaGF2ZV9ydW5fcGF0aCwKKyAJW2VjaG8gJ21haW4oKXt9JyA+IGNvbmZ0ZXN0LmMKK0BAIC02NDQsNyArNjQ0LDcgQEAKKyBkbmwKKyBkbmwJTEJMX0FMSUdOIChERUZJTkVEKQorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9VTkFMSUdORURfQUNDRVNTLAorK0FDX0RFRlVOKFtBQ19MQkxfVU5BTElHTkVEX0FDQ0VTU10sCisgICAgIFtBQ19NU0dfQ0hFQ0tJTkcoaWYgdW5hbGlnbmVkIGFjY2Vzc2VzIGZhaWwpCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfdW5hbGlnbmVkX2ZhaWwsCisgCVtjYXNlICIkaG9zdF9jcHUiIGluCitAQCAtNzQ5LDcgKzc0OSw3IEBACisgZG5sCUhBVkVfT1NfUFJPVE9fSCAoZGVmaW5lZCkKKyBkbmwJb3MtcHJvdG8uaCAoc3ltbGlua2VkKQorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9ERVZFTCwKKytBQ19ERUZVTihbQUNfTEJMX0RFVkVMXSwKKyAgICAgW3JtIC1mIG9zLXByb3RvLmgKKyAgICAgaWYgdGVzdCAiJHtMQkxfQ0ZMQUdTK3NldH0iID0gc2V0OyB0aGVuCisgCSAgICAkMT0iJCQxICR7TEJMX0NGTEFHU30iCitAQCAtODg2LDcgKzg4Niw3IEBACisgZG5sIHN0YXRpY2FsbHkgYW5kIGhhcHBlbiB0byBoYXZlIGEgbGlicmVzb2x2LmEgbHlpbmcgYXJvdW5kIChhbmQgbm8KKyBkbmwgbGlibnNsLmEpLgorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9MSUJSQVJZX05FVCwgWworK0FDX0RFRlVOKFtBQ19MQkxfTElCUkFSWV9ORVRdLCBbCisgICAgICMgTW9zdCBvcGVyYXRpbmcgc3lzdGVtcyBoYXZlIGdldGhvc3RieW5hbWUoKSBpbiB0aGUgZGVmYXVsdCBzZWFyY2hlZAorICAgICAjIGxpYnJhcmllcyAoaS5lLiBsaWJjKToKKyAgICAgIyBTb21lIE9TZXMgKGVnLiBTb2xhcmlzKSBwbGFjZSBpdCBpbiBsaWJuc2wKK0BAIC05MDksNyArOTA5LDcgQEAKKyBkbmwgVGVzdCBmb3IgX19hdHRyaWJ1dGVfXworIGRubAorIAorLUFDX0RFRlVOKEFDX0NfX19BVFRSSUJVVEVfXywgWworK0FDX0RFRlVOKFtBQ19DX19fQVRUUklCVVRFX19dLCBbCisgQUNfTVNHX0NIRUNLSU5HKGZvciBfX2F0dHJpYnV0ZV9fKQorIEFDX0NBQ0hFX1ZBTChhY19jdl9fX2F0dHJpYnV0ZV9fLCBbCisgQUNfQ09NUElMRV9JRkVMU0UoCitAQCAtOTQ3LDcgKzk0Nyw3IEBACisgZG5sCisgZG5sIC1TY290dCBCYXJyb24KKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfVFBBQ0tFVF9TVEFUUywKKytBQ19ERUZVTihbQUNfTEJMX1RQQUNLRVRfU1RBVFNdLAorICAgIFtBQ19NU0dfQ0hFQ0tJTkcoaWYgaWZfcGFja2V0LmggaGFzIHRwYWNrZXRfc3RhdHMgZGVmaW5lZCkKKyAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfbGJsX3RwYWNrZXRfc3RhdHMsCisgICAgQUNfVFJZX0NPTVBJTEUoWworQEAgLTk3Niw3ICs5NzYsNyBAQAorIGRubCBkb2Vzbid0IGhhdmUgdGhhdCBtZW1iZXIgKHdoaWNoIGlzIE9LLCBhcyBlaXRoZXIgd2Ugd29uJ3QgYmUgdXNpbmcKKyBkbmwgY29kZSB0aGF0IHdvdWxkIHVzZSB0aGF0IG1lbWJlciwgb3Igd2Ugd291bGRuJ3QgY29tcGlsZSBpbiBhbnkgY2FzZSkuCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0xJTlVYX1RQQUNLRVRfQVVYREFUQV9UUF9WTEFOX1RDSSwKKytBQ19ERUZVTihbQUNfTEJMX0xJTlVYX1RQQUNLRVRfQVVYREFUQV9UUF9WTEFOX1RDSV0sCisgICAgIFtBQ19NU0dfQ0hFQ0tJTkcoaWYgdHBhY2tldF9hdXhkYXRhIHN0cnVjdCBoYXMgdHBfdmxhbl90Y2kgbWVtYmVyKQorICAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfbGJsX2RsX2hwX3BwYV9pbmZvX3RfaGFzX2RsX21vZHVsZV9pZF8xLAorIAlBQ19UUllfQ09NUElMRShbCitAQCAtMTAwMyw3ICsxMDAzLDcgQEAKKyBkbmwgCisgZG5sIAlIQVZFX0RMUElfUEFTU0lWRSAoZGVmaW5lZCkKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfRExfUEFTU0lWRV9SRVFfVCwKKytBQ19ERUZVTihbQUNfTEJMX0RMX1BBU1NJVkVfUkVRX1RdLAorICAgICAgICAgW0FDX01TR19DSEVDS0lORyhpZiBkbF9wYXNzaXZlX3JlcV90IHN0cnVjdCBleGlzdHMpCisgICAgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfaGFzX2RsX3Bhc3NpdmVfcmVxX3QsCisgICAgICAgICAgICAgICAgIEFDX1RSWV9DT01QSUxFKFsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAvbGlicGNhcC1wa2djb25maWctc3VwcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAvbGlicGNhcC1wa2djb25maWctc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODYxNTEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC9saWJwY2FwLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK0Zyb20gODg4NzEzMmU4NTg5MmE3MmE4NGNhMzg3OGU2MGYyNTRhZDJjZTkzOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvZSBNYWNEb25hbGQgPGpvZV9tYWNkb25hbGRAbWVudG9yLmNvbT4KK0RhdGU6IFR1ZSwgMjQgRmViIDIwMTUgMTU6NTY6MDYgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gbGlicGNhcDogcGtnY29uZmlnIHN1cHBvcnQKKworQWRkaW5nIGJhc2ljIHN0cnVjdHVyZSB0byBzdXBwb3J0IHBrZy1jb25maWcuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEpvZSBNYWNEb25hbGQgPGpvZV9tYWNkb25hbGRAbWVudG9yLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluICAgfCAgNSArKysrKworIGNvbmZpZ3VyZS5pbiAgfCAgMSArCisgbGlicGNhcC5wYy5pbiB8IDEwICsrKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlicGNhcC5wYy5pbgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggMWMyZDc0NS4uMWYyNWZhZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTYwLDYgKzYwLDEwIEBAIFZfUlBBVEhfT1BUID0gQFZfUlBBVEhfT1BUQAorIERFUEVOREVOQ1lfQ0ZMQUcgPSBAREVQRU5ERU5DWV9DRkxBR0AKKyBQUk9HPWxpYnBjYXAKKyAKKysjIHBrZ2NvbmZpZyBzdXBwb3J0CisrcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworK3BrZ2NvbmZpZ19EQVRBID0gbGlicGNhcC5wYworKworICMgU3RhbmRhcmQgQ0ZMQUdTCisgRlVMTF9DRkxBR1MgPSAkKENDT1BUKSAkKElOQ0xTKSAkKERFRlMpICQoQ0ZMQUdTKQorIAorQEAgLTI3NSw2ICsyNzksNyBAQCBFWFRSQV9ESVNUID0gXAorIAlsYmwvb3Mtc29sYXJpczIuaCBcCisgCWxibC9vcy1zdW5vczQuaCBcCisgCWxibC9vcy11bHRyaXg0LmggXAorKwlsaWJwY2FwLnBjIFwKKyAJbWlzc2luZy9zbnByaW50Zi5jIFwKKyAJbWtkZXAgXAorIAltc2Rvcy9iaW4yYy5jIFwKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IDhmNWM4NmIuLmZiNTFiMzUgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTE3MDAsNiArMTcwMCw3IEBAIGVzYWMKKyBBQ19QUk9HX0lOU1RBTEwKKyAKKyBBQ19DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorK0FDX0NPTkZJR19GSUxFUyhbbGlicGNhcC5wY10pCisgCisgQUNfT1VUUFVUX0NPTU1BTkRTKFtpZiB0ZXN0IC1mIC5kZXZlbDsgdGhlbgorIAllY2hvIHRpbWVzdGFtcCA+IHN0YW1wLWgKK2RpZmYgLS1naXQgYS9saWJwY2FwLnBjLmluIGIvbGlicGNhcC5wYy5pbgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjRmNzhhZDgKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnBjYXAucGMuaW4KK0BAIC0wLDAgKzEsMTAgQEAKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKysKKytOYW1lOiBsaWJwY2FwCisrRGVzY3JpcHRpb246IFN5c3RlbS1pbmRlcGVuZGVudCBpbnRlcmZhY2UgZm9yIHVzZXItbGV2ZWwgcGFja2V0IGNhcHR1cmUuCisrVmVyc2lvbjogQFZFUlNJT05ACisrTGliczogLUwke2xpYmRpcn0gLWxwY2FwCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcF8xLjYuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXBfMS42LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjExNTQzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXBfMS42LjIuYmIKQEAgLTAsMCArMSwyNiBAQAorcmVxdWlyZSBsaWJwY2FwLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vYWNsb2NhbC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbGlicGNhcC1wa2djb25maWctc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI1ZjE0MTkxYzFhNjg0YTc1NTMyYzczOWMyYzQwNTlmYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1ZGIzZTI5OThmMWVlYmEyYzc2ZGE1NWRhNWQ0NzQyNDhmZTE5YzQ0ZjQ5ZTE1Y2FjOGE3OTZhMmM3ZTE5NjkwIgorCisjCisjIG1ha2UgaW5zdGFsbCBkb2Vzbid0IGNvdmVyIHRoZSBzaGFyZWQgbGliCisjIG1ha2UgaW5zdGFsbC1zaGFyZWQgaXMganVzdCBicm9rZW4gKG5vIHN5bWxpbmtzKQorIworCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICAgI3JlbW92ZSBoYXJkY29kZWQgcmVmZXJlbmNlcyB0byAvdXNyL2luY2x1ZGUKKyAgICBzZWQgJ3N8XChbICJeJ1wnJ0ldXCtcKS91c3IvaW5jbHVkZS98XDEke1NUQUdJTkdfSU5DRElSfS98ZycgLWkgJHtTfS9jb25maWd1cmUuaW4KK30KKworZG9faW5zdGFsbF9wcmVwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0KKyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKyAgICBvZV9ydW5tYWtlIGluc3RhbGwtc2hhcmVkIERFU1RESVI9JHtEfQorICAgIG9lX2xpYmluc3RhbGwgLWEgLXNvIGxpYnBjYXAgJHtEfSR7bGliZGlyfQorICAgIHNlZCAic3xAVkVSU0lPTkB8JHtQVn18IiAtaSAke0J9L2xpYnBjYXAucGMKKyAgICBpbnN0YWxsIC1EIC1tIDA2NDQgbGlicGNhcC5wYyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJwY2FwLnBjCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvL21vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mb19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvL21vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mb19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjZjJiYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm8vbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvX2dpdC5iYgpAQCAtMCwwICsxLDEyIEBACitTVU1NQVJZID0gIk1vYmlsZSBCcm9hZGJhbmQgU2VydmljZSBQcm92aWRlciBEYXRhYmFzZSIKK1NFQ1RJT04gPSAibmV0d29yayIKK0xJQ0VOU0UgPSAiUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Nzk2NDU3OWIyYThlY2U0YmM2NzQ0ZDJkYzlhOGIwNCIKK1NSQ1JFViA9ICJkMDZlYmQzMTRhN2NkZDA4N2QzOGU0OTY2YzE5ZGU0MmM4YzU1MjQ2IgorUFYgPSAiMjAxNDA2MTgrZ2l0ciR7U1JDUFZ9IgorUEUgPSAiMSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZ25vbWUub3JnL21vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mbyIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvTWFrZWZpbGUuYW0tZG8tbm90LXNoaXAtdmVyc2lvbi5oLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkL01ha2VmaWxlLmFtLWRvLW5vdC1zaGlwLXZlcnNpb24uaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjg3NWUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkL01ha2VmaWxlLmFtLWRvLW5vdC1zaGlwLXZlcnNpb24uaC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGcm9tIGJmZDMyZDY4Y2ZjOWYxZTMxZGFiODhlMDc0NDZkMWMwMmJjODBiNWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMTIgRmViIDIwMTUgMDA6Mzk6MjkgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGUuYW06IGRvIG5vdCBzaGlwIHZlcnNpb24uaAorCitUaGUgSEVBREVSUycgbmFtZSBoYXMgYmVlbiBjaGFuZ2VkIHRvIHBrZ2luY2x1ZGVfSEVBREVSUywgc28gdXNlCitub2Rpc3RfcGtnaW5jbHVkZV9IRUFERVJTLCBvdGhlcndpc2UgdmVyc2lvbi5oIHdvdWxkIGJlIHNoaXBwZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtIHwgICAgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IDMzMzQ3OTAuLjY5Y2Q1OGYgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0xMCwxMSArMTAsMTEgQEAgcGtnaW5jbHVkZV9IRUFERVJTID0gaW5jbHVkZS90eXBlcy5oIGluY2x1ZGUvbG9nLmggaW5jbHVkZS9wbHVnaW4uaCBcCisgCQkJaW5jbHVkZS90bHYuaCBpbmNsdWRlL3NldHRpbmcuaCBpbmNsdWRlL2RldmljZS5oIFwKKyAJCQlpbmNsdWRlL25mY19jb3B5LmggaW5jbHVkZS9zbmVwLmgKKyAKKy1ub2Rpc3RfaW5jbHVkZV9IRUFERVJTID0gaW5jbHVkZS92ZXJzaW9uLmgKKytub2Rpc3RfcGtnaW5jbHVkZV9IRUFERVJTID0gaW5jbHVkZS92ZXJzaW9uLmgKKyAKKyBub2luc3RfSEVBREVSUyA9IGluY2x1ZGUvZGJ1cy5oCisgCistbG9jYWxfaGVhZGVycyA9ICQoZm9yZWFjaCBmaWxlLCQocGtnaW5jbHVkZV9IRUFERVJTKSAkKG5vZGlzdF9pbmNsdWRlX0hFQURFUlMpIFwKKytsb2NhbF9oZWFkZXJzID0gJChmb3JlYWNoIGZpbGUsJChwa2dpbmNsdWRlX0hFQURFUlMpICQobm9kaXN0X3BrZ2luY2x1ZGVfSEVBREVSUykgXAorIAkJCSQobm9pbnN0X0hFQURFUlMpLCBpbmNsdWRlL25lYXIvJChub3RkaXIgJChmaWxlKSkpCisgCisgZ2RidXNfc291cmNlcyA9IGdkYnVzL2dkYnVzLmggZ2RidXMvbWFpbmxvb3AuYyBnZGJ1cy93YXRjaC5jIFwKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvTWFrZWZpbGUuYW0tZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkL01ha2VmaWxlLmFtLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjYwNjc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkL01ha2VmaWxlLmFtLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDQzYWNjNTZkNTUwNmM3ZTMxOGY3MTdmYjM2MzRiYzE2ZTM0Mzg5MTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMTUgSmFuIDIwMTUgMTg6MTI6MDcgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGUuYW06IGZpeCBwYXJhbGxlbCBpc3N1ZQorCitUaGVyZSBtaWdodCBiZSBubyBzcmMgZGlyIGlmIHNyYy9idWlsdGluLmggcnVucyBlYXJsaWVyLCBjcmVhdGUgaXQgdG8KK2ZpeCB0aGUgcmFjZSBpc3N1ZToKKworc3JjL2dlbmJ1aWx0aW4gbmZjdHlwZTEgbmZjdHlwZTIgbmZjdHlwZTMgbmZjdHlwZTQgcDJwID4gc3JjL2J1aWx0aW4uaAorL2Jpbi9zaDogc3JjL2J1aWx0aW4uaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5hbSB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggMzI0MTMxMS4uYTQzZWFhMiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTE2NCw2ICsxNjQsNyBAQCBNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IE1ha2VmaWxlLmluIFwKKyBzcmMvcGx1Z2luLiQoT0JKRVhUKTogc3JjL2J1aWx0aW4uaAorIAorIHNyYy9idWlsdGluLmg6IHNyYy9nZW5idWlsdGluICQoYnVpbHRpbl9zb3VyY2VzKQorKwkkKEFNX1ZfYXQpJChNS0RJUl9QKSBzcmMKKyAJJChBTV9WX0dFTikkKHNyY2Rpcikvc3JjL2dlbmJ1aWx0aW4gJChidWlsdGluX21vZHVsZXMpID4gJEAKKyAKKyAkKHNyY19uZWFyZF9PQkpFQ1RTKSBcCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkL25lYXJkLmluIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkL25lYXJkLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0N2Q0ZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvbmVhcmQuaW4KQEAgLTAsMCArMSw1NCBAQAorIyEvYmluL3NoCisjCisjIHN0YXJ0L3N0b3AgbmVhcmQgZGFlbW9uLgorCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBuZWFyZAorIyBSZXF1aXJlZC1TdGFydDogICAgJG5ldHdvcmsKKyMgUmVxdWlyZWQtU3RvcDogICAgICRuZXR3b3JrCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBORkMgZGFlbW9uCisjIERlc2NyaXB0aW9uOiAgICAgICBuZWFyZCBpcyBhIGRhZW1vbiB1c2VkIHRvIGVuYWJsZSBORkMgZmVhdHVyZXMKKyMjIyBFTkQgSU5JVCBJTkZPCisKK0RBRU1PTj1AaW5zdGFsbHBhdGhAL25lYXJkCitQSURGSUxFPS92YXIvcnVuL25lYXJkLnBpZAorREVTQz0iTGludXggTkZDIGRhZW1vbiIKKworaWYgWyAtZiAvZXRjL2RlZmF1bHQvbmVhcmQgXSA7IHRoZW4KKwkuIC9ldGMvZGVmYXVsdC9uZWFyZAorZmkKKworc2V0IC1lCisKK2RvX3N0YXJ0KCkgeworCSREQUVNT04KK30KKworZG9fc3RvcCgpIHsKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1uYW1lIG5lYXJkIC0tcXVpZXQKK30KKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWVjaG8gIlN0YXJ0aW5nICRERVNDIgorCWRvX3N0YXJ0CisJOzsKKyAgc3RvcCkKKwllY2hvICJTdG9wcGluZyAkREVTQyIKKwlkb19zdG9wCisJOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJZWNobyAiUmVzdGFydGluZyAkREVTQyIKKwlkb19zdG9wCisJc2xlZXAgMQorCWRvX3N0YXJ0CisJOzsKKyAgKikKKwllY2hvICJVc2FnZTogJDAge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR9IiA+JjIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZF8wLjE1LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkXzAuMTUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFkZjcwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZF8wLjE1LmJiCkBAIC0wLDAgKzEsNjEgQEAKK1NVTU1BUlkgPSAiTGludXggTkZDIGRhZW1vbiIKK0RFU0NSSVBUSU9OID0gIkEgZGFlbW9uIGZvciB0aGUgTGludXggTmVhciBGaWVsZCBDb21tdW5pY2F0aW9uIHN0YWNrIgorSE9NRVBBR0UgPSAiaHR0cDovLzAxLm9yZy9saW51eC1uZmMiCitMSUNFTlNFID0gIkdQTHYyIgorCitERVBFTkRTID0gImRidXMgZ2xpYi0yLjAgbGlibmwiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9uZXR3b3JrL25mYy8ke0JQfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbmVhcmQuaW4gXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuYW0tZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLmFtLWRvLW5vdC1zaGlwLXZlcnNpb24uaC5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gImI3NDZjZTYyZWVlZjg4ZThkZTkwNzY1ZTAwYTc1YTFjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY1MWY2NTEzZDMyY2RhZjhhNDI2MjU1ZDAzYWZmMzhhNjYyMGE4OWIwNTY3ZWMyYjM2NjA2YzYzMzBhOTMzNTMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEyZjg4NGQyYWUxZmY4N2MwOWU1YjdjY2MyYzRjYTdlIFwKKyBmaWxlOi8vc3JjL25lYXIuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT0zNThlNGRlZWZlZjI1MWE0NzYxZTFmZmFjYzk2NWQxMyBcCisgIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgc3lzdGVtZCB1cGRhdGUtcmMuZCBibHVldG9vdGgKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItLWVuYWJsZS1zeXN0ZW1kIC0td2l0aC1zeXN0ZW1kc3lzdGVtdW5pdGRpcj0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyAtLXdpdGgtc3lzdGVtZHVzZXJ1bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS91c2VyLywtLWRpc2FibGUtc3lzdGVtZCIKKworRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS10b29scyIKKworIyBUaGlzIHdvdWxkIGNvcHkgbmVhcmQgc3RhcnQtc3RvcCBzaGVsbCBhbmQgdGVzdCBzY3JpcHRzCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJCXNlZCAiczpAaW5zdGFsbHBhdGhAOiR7bGliZXhlY2Rpcn0vbmZjOiIgJHtXT1JLRElSfS9uZWFyZC5pbiBcCisJCSAgPiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvbmVhcmQKKwkJY2htb2QgMDc1NSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvbmVhcmQKKwlmaQorCisJIyBJbnN0YWxsIHRoZSB0ZXN0cyBmb3IgbmVhcmQtdGVzdHMKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vbmVhcmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS90ZXN0LyogJHtEfSR7bGliZGlyfS8ke0JQTn0vCisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vdG9vbHMvbmZjdG9vbC9uZmN0b29sICR7RH0ke2xpYmRpcn0vJHtCUE59LworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tdGVzdHMiCisKK0ZJTEVTXyR7UE59LXRlc3RzID0gIiR7bGliZGlyfS8ke0JQTn0vKi10ZXN0IgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59LyovLmRlYnVnIgorCitSREVQRU5EU18ke1BOfSA9ICJkYnVzIHB5dGhvbiBweXRob24tZGJ1cyBweXRob24tcHlnb2JqZWN0IgorCisjIEJsdWV6ICYgV2lmaSBhcmUgbm90IG1hbmRhdG9yeSBleGNlcHQgZm9yIGhhbmRvdmVyCitSUkVDT01NRU5EU18ke1BOfSA9ICJcCisgICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICcke0JMVUVafScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3aWZpJywnd3BhLXN1cHBsaWNhbnQnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAgIgorCitSREVQRU5EU18ke1BOfS10ZXN0cyA9ICJweXRob24gcHl0aG9uLWRidXMgcHl0aG9uLXB5Z29iamVjdCIKKworSU5JVFNDUklQVF9OQU1FID0gIm5lYXJkIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMgNjQiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJuZWFyZC5zZXJ2aWNlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9maWxlcy9uZnMtdXRpbHMtZGViaWFuaXplLXN0YXJ0LXN0YXRkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9maWxlcy9uZnMtdXRpbHMtZGViaWFuaXplLXN0YXJ0LXN0YXRkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MDAyMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2ZpbGVzL25mcy11dGlscy1kZWJpYW5pemUtc3RhcnQtc3RhdGQucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorW1BBVENIXSBuZnMtdXRpbHM6IGRlYmlhbml6ZSBzdGFydC1zdGF0ZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworbWFrZSBzdGFydC1zdGF0ZCBjb21tYW5kIHRvIHVzZSBuZnNjb21tb24gY29uZmlndXJlLCB0b28uCisKK1NpZ25lZC1vZmYtYnk6IEhlbnJpayBSaW9tYXIgPGhlbnJpay5yaW9tYXJAZXJpY3Nzb24uY29tPgorU2lnbmVkLW9mZi1ieTogTGkgV2FuZyA8bGkud2FuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KKyB1dGlscy9zdGF0ZC9zdGFydC1zdGF0ZCB8IDkgKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdXRpbHMvc3RhdGQvc3RhcnQtc3RhdGQgYi91dGlscy9zdGF0ZC9zdGFydC1zdGF0ZAoraW5kZXggZWM5MzgzYi4uMzk2OWI4YyAxMDA3NTUKKy0tLSBhL3V0aWxzL3N0YXRkL3N0YXJ0LXN0YXRkCisrKysgYi91dGlscy9zdGF0ZC9zdGFydC1zdGF0ZAorQEAgLTYsNiArNiwxMyBAQAorICMgc2l0ZS4KKyBQQVRIPSIvc2JpbjovdXNyL3NiaW46L2JpbjovdXNyL2JpbiIKKyAKKysjIFJlYWQgY29uZmlnCisrREVGQVVMVEZJTEU9L2V0Yy9kZWZhdWx0L25mcy1jb21tb24KKytORUVEX0lETUFQRD0KKytpZiBbIC1mICRERUZBVUxURklMRSBdOyB0aGVuCisrICAgIC4gJERFRkFVTFRGSUxFCisrZmkKKysKKyAjIEZpcnN0IHRyeSBzeXN0ZW1kIGlmIGl0J3MgaW5zdGFsbGVkLgorIGlmIHN5c3RlbWN0bCAtLWhlbHAgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICMgUXVpdCBvbmx5IGlmIHRoZSBjYWxsIHdvcmtlZC4KK0BAIC0xMyw0ICsyMCw0IEBAIGlmIHN5c3RlbWN0bCAtLWhlbHAgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgZmkKKyAKKyAjIEZhbGwgYmFjayB0byBsYXVuY2hpbmcgaXQgb3Vyc2VsdmVzLgorLWV4ZWMgcnBjLnN0YXRkIC0tbm8tbm90aWZ5CisrZXhlYyBycGMuc3RhdGQgLS1uby1ub3RpZnkgJFNUQVRET1BUUworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwLzAwMDEtaW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItZ2V0dGluZy11Xy10eXBlZGVmcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvMDAwMS1pbmNsdWRlLXN5cy10eXBlcy5oLWZvci1nZXR0aW5nLXVfLXR5cGVkZWZzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYzUyOTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwLzAwMDEtaW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItZ2V0dGluZy11Xy10eXBlZGVmcy5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGcm9tIGE1ZTk1YTQyZTdiY2VkZGM5ZWNhZDA2Njk0YzFhMDU4OGY0YmFmYzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVHVlLCAxNCBBcHIgMjAxNSAwNzoyMjo0NyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBpbmNsdWRlIHN5cy90eXBlcy5oIGZvciBnZXR0aW5nIHVfKiB0eXBlZGVmcworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGNmZy5oIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9jZmcuaCBiL2NmZy5oCitpbmRleCBkNGQ0Y2FiLi5mZTQ5ZThmIDEwMDY0NAorLS0tIGEvY2ZnLmgKKysrKyBiL2NmZy5oCitAQCAtMzMsNiArMzMsNyBAQAorICNpZm5kZWYgX0NPTkZfSF8KKyAjZGVmaW5lIF9DT05GX0hfCisgCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlICJxdWV1ZS5oIgorIAorIHN0cnVjdCBjb25mX2xpc3Rfbm9kZSB7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvU2V0X25vYm9keV91c2VyX2dyb3VwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcC9TZXRfbm9ib2R5X3VzZXJfZ3JvdXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYzM2RhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvU2V0X25vYm9keV91c2VyX2dyb3VwLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1NldCBub2JvZHkgdXNlciBhbmQgZ3JvdXAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0gYS9pZG1hcGQuY29uZgorKysrIGIvaWRtYXBkLmNvbmYKK0BAIC0xNyw4ICsxNyw4IEBACisgCisgW01hcHBpbmddCisgCistI05vYm9keS1Vc2VyID0gbm9ib2R5CistI05vYm9keS1Hcm91cCA9IG5vYm9keQorK05vYm9keS1Vc2VyID0gbm9ib2R5CisrTm9ib2R5LUdyb3VwID0gbm9ncm91cAorIAorIFtUcmFuc2xhdGlvbl0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvZml4LWFjLXByZXJlcS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvZml4LWFjLXByZXJlcS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODFjN2M1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcC9maXgtYWMtcHJlcmVxLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC0xLDcgKzEsNyBAQAorICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyAjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisgCistQUNfUFJFUkVRKFsyLjY4XSkKKytBQ19QUkVSRVEoWzIuNjVdKQorIEFDX0lOSVQoW2xpYm5mc2lkbWFwXSxbMC4yNV0sW2xpbnV4LW5mc0B2Z2VyLmtlcm5lbC5vcmddKQorIEFDX0NPTkZJR19TUkNESVIoW25mc2lkbWFwLmhdKQorIEFDX0NPTkZJR19NQUNST19ESVIoW200XSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXBfMC4yNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXBfMC4yNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjU3OGU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcF8wLjI1LmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiTkZTIGlkIG1hcHBpbmcgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuY2l0aS51bWljaC5lZHUvcHJvamVjdHMvbmZzdjQvbGludXgvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ5YzZhMmEwY2E2MDE3ZmRhN2NkOTA1ZWQyNzM5YjM3IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuY2l0aS51bWljaC5lZHUvcHJvamVjdHMvbmZzdjQvbGludXgvbGlibmZzaWRtYXAvJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtYWMtcHJlcmVxLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL1NldF9ub2JvZHlfdXNlcl9ncm91cC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWluY2x1ZGUtc3lzLXR5cGVzLmgtZm9yLWdldHRpbmctdV8tdHlwZWRlZnMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjJhYzQ4OTNjOTI3MTZhZGQxYTE0NDdhZTAxZGY3N2FiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY1NmQyNDVkODQ0MDBlMTAzMGY4ZjQwYTVhMjdkYTc2MzcwNjkwYzRhOTMyYmFmMjQ5MTEwZjA0N2ZlN2VmY2YiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtbGRhcCIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vJHtCUE59LSR7UFZ9L2lkbWFwZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2lkbWFwZC5jb25mCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzLzAwMDEtY29uZmlndXJlLUFsbG93LXRvLWV4cGxpY2l0bHktZGlzYWJsZS1uZnNpZG1hcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzLzAwMDEtY29uZmlndXJlLUFsbG93LXRvLWV4cGxpY2l0bHktZGlzYWJsZS1uZnNpZG1hcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDI1ZmI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvMDAwMS1jb25maWd1cmUtQWxsb3ctdG8tZXhwbGljaXRseS1kaXNhYmxlLW5mc2lkbWFwLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gOWI4NGNmZjMwNTg2NmFiZDE1MGNmMWE0YzZlN2U1ZWJmOGE3ZWIzYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMTUgTm92IDIwMTMgMjM6MjE6MzUgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiBBbGxvdyB0byBleHBsaWNpdGx5IGRpc2FibGUgbmZzaWRtYXAKKworKiBrZXl1dGlscyBhdmFpbGFiaWxpdHkgaXMgYXV0b2RldGVjdGVkIGFuZCBidWlsZHMgYXJlbid0IHJlcHJvZHVjaWJsZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMTAgKysrKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYmY0MzNkNi4uMjhhOGY2MiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjksNiArNjksMTIgQEAgQUNfQVJHX0VOQUJMRShuZnN2NCwKKyAJQUNfU1VCU1QoZW5hYmxlX25mc3Y0KQorIAlBTV9DT05ESVRJT05BTChDT05GSUdfTkZTVjQsIFt0ZXN0ICIkZW5hYmxlX25mc3Y0IiA9ICJ5ZXMiXSkKKyAKKytBQ19BUkdfRU5BQkxFKG5mc2lkbWFwLAorKyAgICAgICAgW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1uZnNpZG1hcF0sCisrICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZSBzdXBwb3J0IGZvciBORlN2NCBpZG1hcHBlciBAPDpAZGVmYXVsdD15ZXNAOj5AXSldLAorKyAgICAgICAgZW5hYmxlX25mc2lkbWFwPSRlbmFibGV2YWwsCisrICAgICAgICBlbmFibGVfbmZzaWRtYXA9eWVzKQorKworIEFDX0FSR19FTkFCTEUobmZzdjQxLAorIAlbQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW5mc3Y0MV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZSBzdXBwb3J0IGZvciBORlN2NDEgQDw6QGRlZmF1bHQ9eWVzQDo+QF0pXSwKK0BAIC0yOTYsNyArMzAyLDcgQEAgZmkKKyAKKyBkbmwgZW5hYmxlIG5mc2lkbWFwIHdoZW4gaXRzIHN1cHBvcnQgYnkgbGlibmZzaWRtYXAKKyBBTV9DT05ESVRJT05BTChDT05GSUdfTkZTRENMVFJBQ0ssIFt0ZXN0ICIkZW5hYmxlX25mc2RjbHRyYWNrIiA9ICJ5ZXMiIF0pCistQU1fQ09ORElUSU9OQUwoQ09ORklHX05GU0lETUFQLCBbdGVzdCAiJGFjX2N2X2hlYWRlcl9rZXl1dGlsc19oJGFjX2N2X2xpYl9uZnNpZG1hcF9uZnM0X293bmVyX3RvX3VpZCIgPSAieWVzeWVzIl0pCisrQU1fQ09ORElUSU9OQUwoQ09ORklHX05GU0lETUFQLCBbdGVzdCAiJGVuYWJsZV9uZnNpZG1hcCRhY19jdl9oZWFkZXJfa2V5dXRpbHNfaCRhY19jdl9saWJfbmZzaWRtYXBfbmZzNF9vd25lcl90b191aWQiID0gInllc3llc3llcyJdKQorIAorIAorIGlmIHRlc3QgIiRrbmZzZF9jdl9nbGliYzIiID0gbm87IHRoZW4KKy0tIAorMS44LjQuMworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtbW91bnRkLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtbW91bnRkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEzZGRjMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1tb3VudGQuc2VydmljZQpAQCAtMCwwICsxLDExIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPU5GUyBNb3VudCBEYWVtb24KK0FmdGVyPXJwY2JpbmQuc2VydmljZSBuZnMtc2VydmVyLnNlcnZpY2UKK1JlcXVpcmVzPXJwY2JpbmQuc2VydmljZSBuZnMtc2VydmVyLnNlcnZpY2UKKworW1NlcnZpY2VdCitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9uZnMtdXRpbHMuY29uZgorRXhlY1N0YXJ0PUBTQklORElSQC9ycGMubW91bnRkIC1GICRNT1VOVERfT1BUUworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtc2VydmVyLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtc2VydmVyLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ3ZDdhNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1zZXJ2ZXIuc2VydmljZQpAQCAtMCwwICsxLDE4IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPU5GUyBTZXJ2ZXIKK1JlcXVpcmVzPXJwY2JpbmQuc2VydmljZSBuZnMtbW91bnRkLnNlcnZpY2UKK0FmdGVyPXJwY2JpbmQuc2VydmljZQorCitbU2VydmljZV0KK1R5cGU9b25lc2hvdAorRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvbmZzLXV0aWxzLmNvbmYKK0V4ZWNTdGFydFByZT1AU0JJTkRJUkAvZXhwb3J0ZnMgLXIKK0V4ZWNTdGFydD1AU0JJTkRJUkAvcnBjLm5mc2QgJE5GU0RfT1BUUyAkTkZTRF9DT1VOVAorRXhlY1N0b3A9QFNCSU5ESVJAL3JwYy5uZnNkIDAKK0V4ZWNTdG9wUG9zdD1AU0JJTkRJUkAvZXhwb3J0ZnMgLWYKK0V4ZWNSZWxvYWQ9QFNCSU5ESVJAL2V4cG9ydGZzIC1yCitTdGFuZGFyZEVycm9yPXN5c2xvZworUmVtYWluQWZ0ZXJFeGl0PXllcworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtc3RhdGQuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1zdGF0ZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NmRhY2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtc3RhdGQuc2VydmljZQpAQCAtMCwwICsxLDEyIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPU5GUyBmaWxlIGxvY2tpbmcgc2VydmljZQorQWZ0ZXI9cnBjYmluZC5zZXJ2aWNlCitSZXF1aXJlcz1ycGNiaW5kLnNlcnZpY2UKK0JlZm9yZT1yZW1vdGUtZnMtcHJlLnRhcmdldAorCitbU2VydmljZV0KK0Vudmlyb25tZW50RmlsZT0tQFNZU0NPTkZESVJAL25mcy11dGlscy5jb25mCitFeGVjU3RhcnQ9QFNCSU5ESVJAL3JwYy5zdGF0ZCAtRiAkU1RBVERfT1BUUworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMtMS4yLjMtc20tbm90aWZ5LXJlc19pbml0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXV0aWxzLTEuMi4zLXNtLW5vdGlmeS1yZXNfaW5pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGY4MTgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXV0aWxzLTEuMi4zLXNtLW5vdGlmeS1yZXNfaW5pdC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGaXhlcyBlcnJvcnMgbGlrZQorc20tbm90aWZ5WzEwNzBdOiBETlMgcmVzb2x1dGlvbiBvZiBhLmIuYy5kLi5jb20gZmFpbGVkOyByZXRyeWluZyBsYXRlcgorVGhpcyBlcnJvciB3aWxsIG9jY3VyIGFueXRpbWUgc20tbm90aWZ5IGlzIHJ1biBiZWZvcmUgdGhlIG5ldHdvcmsgaWYgZnVsbHkgdXAsCit3aGljaCBpcyBoYXBwZW5pbmcgbW9yZSBhbmQgbW9yZSB3aXRoIHBhcmFsbGVsIHN0YXJ0dXAgc3lzdGVtcy4KK1RoZSByZXNfaW5pdCgpIGNhbGwgaXMgc2ltcGxlLCBzYWZlLCBxdWljaywgYW5kIGEgcGF0Y2ggdG8gdXNlIGl0IHNob3VsZCBiZQorYWJsZSB0byBnbyB1cHN0cmVhbS4gIFByZXN1bWFibHkgdGhlIHdob2xlIHJlYXNvbiBzbS1ub3RpZnkgdHJpZXMgc2V2ZXJhbAordGltZXMgaXMgdG8gd2FpdCBmb3IgcG9zc2libGUgY2hhbmdlcyB0byB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uLCBidXQgd2l0aG91dAorY2FsbGluZyByZXNfaW5pdCgpIGl0IHdpbGwgbmV2ZXIgYmUgYXdhcmUgb2YgdGhvc2UgY2hhbmdlcworCitCYWNrcG9ydGVkIGRyb20gRmVkb3JhCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworCitkaWZmIC11cCBuZnMtdXRpbHMtMS4yLjMvdXRpbHMvc3RhdGQvc20tbm90aWZ5LmMub3JpZyBuZnMtdXRpbHMtMS4yLjMvdXRpbHMvc3RhdGQvc20tbm90aWZ5LmMKKy0tLSBuZnMtdXRpbHMtMS4yLjMvdXRpbHMvc3RhdGQvc20tbm90aWZ5LmMub3JpZwkyMDEwLTA5LTI4IDA4OjI0OjE2LjAwMDAwMDAwMCAtMDQwMAorKysrIG5mcy11dGlscy0xLjIuMy91dGlscy9zdGF0ZC9zbS1ub3RpZnkuYwkyMDEwLTEwLTE1IDE2OjQ0OjQzLjQ4NzExOTYwMSAtMDQwMAorQEAgLTI4LDYgKzI4LDkgQEAKKyAjaW5jbHVkZSA8bmV0ZGIuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8Z3JwLmg+CisrI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKysjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisrI2luY2x1ZGUgPHJlc29sdi5oPgorIAorICNpbmNsdWRlICJzb2NrYWRkci5oIgorICNpbmNsdWRlICJ4bG9nLmgiCitAQCAtODQsNiArODcsNyBAQCBzbW5fbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpCisgCX07CisgCWludCBlcnJvcjsKKyAKKysJcmVzX2luaXQoKTsKKyAJZXJyb3IgPSBnZXRhZGRyaW5mbyhuYW1lLCBOVUxMLCAmaGludCwgJmFpKTsKKyAJaWYgKGVycm9yICE9IDApIHsKKyAJCXhsb2coRF9HRU5FUkFMLCAiZ2V0YWRkcmluZm8oMyk6ICVzIiwgZ2FpX3N0cmVycm9yKGVycm9yKSk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMtRG8tbm90LXBhc3MtQ0ZMQUdTLXRvLWdjYy13aGlsZS1idWlsZGluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy11dGlscy1Eby1ub3QtcGFzcy1DRkxBR1MtdG8tZ2NjLXdoaWxlLWJ1aWxkaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5M2YxZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMtRG8tbm90LXBhc3MtQ0ZMQUdTLXRvLWdjYy13aGlsZS1idWlsZGluZy5wYXRjaApAQCAtMCwwICsxLDQyIEBACituZnMtdXRpbHM6IERvIG5vdCBwYXNzIENGTEFHUyB0byBnY2Mgd2hpbGUgYnVpbGRpbmcKKworRG8gbm90IHBhc3MgQ0ZMQUdTL0xERkxBR1MgdG8gZ2NjIHdoaWxlIGJ1aWxkaW5nLCBUaGUgbmVlZGVkIGZsYWdzIGhhcworYmVlbiBwYXNzZWQgYnkgeHh4X0NGTEFHUz0kKENGTEFHU19GT1JfQlVJTEQpLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyB0b29scy9sb2NrdGVzdC9NYWtlZmlsZS5hbSB8ICAgIDIgKysKKyB0b29scy9ycGNnZW4vTWFrZWZpbGUuYW0gICB8ICAgIDIgKysKKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvdG9vbHMvbG9ja3Rlc3QvTWFrZWZpbGUuYW0gYi90b29scy9sb2NrdGVzdC9NYWtlZmlsZS5hbQoraW5kZXggMzE1NjgxNS4uMTcyOWZkMSAxMDA2NDQKKy0tLSBhL3Rvb2xzL2xvY2t0ZXN0L01ha2VmaWxlLmFtCisrKysgYi90b29scy9sb2NrdGVzdC9NYWtlZmlsZS5hbQorQEAgLTEsNiArMSw4IEBACisgIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCisgCisgQ0M9JChDQ19GT1JfQlVJTEQpCisrQ0ZMQUdTPQorK0xERkxBR1M9CisgTElCVE9PTCA9IEBMSUJUT09MQCAtLXRhZz1DQworIAorIG5vaW5zdF9QUk9HUkFNUyA9IHRlc3RsaworZGlmZiAtLWdpdCBhL3Rvb2xzL3JwY2dlbi9NYWtlZmlsZS5hbSBiL3Rvb2xzL3JwY2dlbi9NYWtlZmlsZS5hbQoraW5kZXggOGE5ZWM4OS4uOGJhY2RhYSAxMDA2NDQKKy0tLSBhL3Rvb2xzL3JwY2dlbi9NYWtlZmlsZS5hbQorKysrIGIvdG9vbHMvcnBjZ2VuL01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDggQEAKKyAjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKyAKKyBDQz0kKENDX0ZPUl9CVUlMRCkKKytDRkxBR1M9CisrTERGTEFHUz0KKyBMSUJUT09MID0gQExJQlRPT0xAIC0tdGFnPUNDCisgCisgbm9pbnN0X1BST0dSQU1TID0gcnBjZ2VuCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXV0aWxzLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTAwN2E3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXV0aWxzLmNvbmYKQEAgLTAsMCArMSwzNSBAQAorIyBQYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byBuZnMtdXRpbHMgKGNsaWVudHMgJiBzZXJ2ZXIpIHNlcnZpY2UgZmlsZXMuCisjCisKKyMgT3B0aW9ucyB0byBwYXNzIHRvIHJwYy5uZnNkLgorTkZTRF9PUFRTPSIiCisKKyMgTnVtYmVyIG9mIHNlcnZlcnMgdG8gc3RhcnQgdXA7IHRoZSBkZWZhdWx0IGlzIDggc2VydmVycy4KK05GU0RfQ09VTlQ9IiIKKworIyBXaGVyZSB0byBtb3VudCBuZnNkIGZpbGVzeXN0ZW07IHRoZSBkZWZhdWx0IGlzICIvcHJvYy9mcy9uZnNkIi4KK1BST0NORlNEX01PVU5UUE9JTlQ9IiIKKworIyBPcHRpb25zIHVzZWQgdG8gbW91bnQgbmZzZCBmaWxlc3lzdGVtOyB0aGUgZGVmYXVsdCBpcyAicncsbm9kZXYsbm9leGVjLG5vc3VpZCIuCitQUk9DTkZTRF9NT1VOVE9QVFM9IiIKKworIyBPcHRpb25zIGZvciBycGMubW91bnRkLgorIyBJZiB5b3UgaGF2ZSBhIHBvcnQtYmFzZWQgZmlyZXdhbGwsIHlvdSBtaWdodCB3YW50IHRvIHNldCB1cAorIyBhIGZpeGVkIHBvcnQgaGVyZSB1c2luZyB0aGUgLS1wb3J0IG9wdGlvbi4KK01PVU5URF9PUFRTPSIiCisKKyMgUGFyYW1ldGVycyB0byBiZSBwYXNzZWQgdG8gbmZzLWNvbW1vbiAobmZzIGNsaWVudHMgJiBzZXJ2ZXIpIGluaXQgc2NyaXB0LgorIworCisjIElmIHlvdSBkbyBub3Qgc2V0IHZhbHVlcyBmb3IgdGhlIE5FRURfIG9wdGlvbnMsIHRoZXkgd2lsbCBiZSBhdHRlbXB0ZWQKKyMgYXV0b2RldGVjdGVkOyB0aGlzIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBtb3N0IHBlb3BsZS4gVmFsaWQgYWx0ZXJuYXRpdmVzCisjIGZvciB0aGUgTkVFRF8gb3B0aW9ucyBhcmUgInllcyIgYW5kICJubyIuCisKKyMgRG8geW91IHdhbnQgdG8gc3RhcnQgdGhlIHN0YXRkIGRhZW1vbj8gSXQgaXMgbm90IG5lZWRlZCBmb3IgTkZTdjQuCitORUVEX1NUQVREPSIiCisKKyMgT3B0aW9ucyB0byBwYXNzIHRvIHJwYy5zdGF0ZC4KKyMgTi5CLiBzdGF0ZCBub3JtYWxseSBydW5zIG9uIGJvdGggY2xpZW50IGFuZCBzZXJ2ZXIsIGFuZCBydW4tdGltZQorIyBvcHRpb25zIHNob3VsZCBiZSBzcGVjaWZpZWQgYWNjb3JkaW5nbHkuCisjIFNUQVREX09QVFM9Ii1wIDMyNzY1IC1vIDMyNzY2IgorU1RBVERfT1BUUz0iIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzY29tbW9uIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzY29tbW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MjI2N2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnNjb21tb24KQEAgLTAsMCArMSw2MyBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBuZnMtY29tbW9uCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkcG9ydG1hcCBod2Nsb2NrCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkcG9ydG1hcCBod2Nsb2NrCisjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogTkZTIHN1cHBvcnQgZm9yIGJvdGggY2xpZW50IGFuZCBzZXJ2ZXIKKyMgRGVzY3JpcHRpb246ICAgICAgIE5GUyBpcyBhIHBvcHVsYXIgcHJvdG9jb2wgZm9yIGZpbGUgc2hhcmluZyBhY3Jvc3MKKyMgICAgICAgICAgICAgICAgICAgIFRDUC9JUCBuZXR3b3Jrcy4gVGhpcyBzZXJ2aWNlIHByb3ZpZGVzIHZhcmlvdXMKKyMgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBORlMgbW91bnRzLgorIyMjIEVORCBJTklUIElORk8KKyMKKyMgU3RhcnR1cCBzY3JpcHQgZm9yIG5mcy11dGlscworIworIworIyBMb2NhdGlvbiBvZiBleGVjdXRhYmxlczoKKworIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK3Rlc3QgLXggIiRORlNfU1RBVEQiIHx8IE5GU19TVEFURD0vdXNyL3NiaW4vcnBjLnN0YXRkCit0ZXN0IC16ICIkU1RBVERfUElEIiAmJiBTVEFURF9QSUQ9L3Zhci9ydW4vcnBjLnN0YXRkLnBpZAorIworIyBUaGUgZGVmYXVsdCBzdGF0ZSBkaXJlY3RvcnkgaXMgL3Zhci9saWIvbmZzCit0ZXN0IC1uICIkTkZTX1NUQVRFRElSIiB8fCBORlNfU1RBVEVESVI9L3Zhci9saWIvbmZzCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTdGFydHVwIGFuZCBzaHV0ZG93biBmdW5jdGlvbnMuCisjICBBY3R1YWwgc3RhcnR1cC9zaHV0ZG93biBpcyBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KKworc3RhcnRfc3RhdGQoKXsKKwllY2hvIC1uICJzdGFydGluZyBzdGF0ZDogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1leGVjICIkTkZTX1NUQVREIiAtLXBpZGZpbGUgIiRTVEFURF9QSUQiCisJZWNobyBkb25lCit9CitzdG9wX3N0YXRkKCl7CisJZWNobyAtbiAnc3RvcHBpbmcgc3RhdGQ6ICcKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXNpZ25hbCAxIC0tcGlkZmlsZSAiJFNUQVREX1BJRCIKKwllY2hvIGRvbmUKK30KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIHN1cHBvcnRlZCBvcHRpb25zOgorIyAgc3RhcnQKKyMgIHN0b3AKKyMgIHJlc3RhcnQ6IHN0b3BzIGFuZCBzdGFydHMgbW91bnRkCisjRklYTUU6IG5lZWQgdG8gY3JlYXRlIHRoZSAvdmFyL2xpYi9uZnMvLi4uIGRpcmVjdG9yaWVzCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJc3RhcnRfc3RhdGQ7OworICBzdG9wKQorCXN0b3Bfc3RhdGQ7OworICBzdGF0dXMpCisJc3RhdHVzICRORlNfU1RBVEQKKwlleGl0ICQ/OzsKKyAgcmVzdGFydCkKKwkkMCBzdG9wCisJJDAgc3RhcnQ7OworICAqKQorCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydH0iCisJZXhpdCAxOzsKK2VzYWMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mc3NlcnZlciBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mc3NlcnZlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWQ5M2E1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzc2VydmVyCkBAIC0wLDAgKzEsMTMwIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG5mcy1rZXJuZWwtc2VydmVyCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkcmVtb3RlX2ZzIG5mcy1jb21tb24gJHBvcnRtYXAgaHdjbG9jaworIyBSZXF1aXJlZC1TdG9wOiAgICAgJHJlbW90ZV9mcyBuZnMtY29tbW9uICRwb3J0bWFwIGh3Y2xvY2sKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBLZXJuZWwgTkZTIHNlcnZlciBzdXBwb3J0CisjIERlc2NyaXB0aW9uOiAgICAgICBORlMgaXMgYSBwb3B1bGFyIHByb3RvY29sIGZvciBmaWxlIHNoYXJpbmcgYWNyb3NzCisjICAgICAgICAgICAgICAgICAgICBUQ1AvSVAgbmV0d29ya3MuIFRoaXMgc2VydmljZSBwcm92aWRlcyBORlMgc2VydmVyCisjICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcyBjb25maWd1cmVkIHZpYSB0aGUKKyMgICAgICAgICAgICAgICAgICAgIC9ldGMvZXhwb3J0cyBmaWxlLgorIyMjIEVORCBJTklUIElORk8KKyMKKyMgU3RhcnR1cCBzY3JpcHQgZm9yIG5mcy11dGlscworIworIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisjCisjIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBORlNfU0VSVkVSUyBtYXkgYmUgc2V0IGluIC9ldGMvZGVmYXVsdC9uZnNkCisjIE90aGVyIGNvbnRyb2wgdmFyaWFibGVzIG1heSBiZSBvdmVycmlkZGVuIGhlcmUgdG9vCit0ZXN0IC1yIC9ldGMvZGVmYXVsdC9uZnNkICYmIC4gL2V0Yy9kZWZhdWx0L25mc2QKKyMKKyMgTG9jYXRpb24gb2YgZXhlY3V0YWJsZXM6Cit0ZXN0IC14ICIkTkZTX01PVU5URCIgfHwgTkZTX01PVU5URD0vdXNyL3NiaW4vcnBjLm1vdW50ZAordGVzdCAteCAiJE5GU19ORlNEIiB8fCBORlNfTkZTRD0vdXNyL3NiaW4vcnBjLm5mc2QKKyMKKyMgVGhlIHVzZXIgbW9kZSBwcm9ncmFtIG11c3QgYWxzbyBleGlzdCAoaXQganVzdCBzdGFydHMgdGhlIGtlcm5lbAorIyB0aHJlYWRzIHVzaW5nIHRoZSBrZXJuZWwgbW9kdWxlIGNvZGUpLgordGVzdCAteCAiJE5GU19NT1VOVEQiIHx8IGV4aXQgMAordGVzdCAteCAiJE5GU19ORlNEIiB8fCBleGl0IDAKKyMKKyMgRGVmYXVsdCBpcyA4IHRocmVhZHMsIHZhbHVlIGlzIHNldHRhYmxlIGJldHdlZW4gMSBhbmQgdGhlIHRydWVseQorIyByaWRpY3Vsb3VzIDk5Cit0ZXN0ICIkTkZTX1NFUlZFUlMiICE9ICIiICYmIHRlc3QgIiRORlNfU0VSVkVSUyIgLWd0IDAgJiYgdGVzdCAiJE5GU19TRVJWRVJTIiAtbHQgMTAwIHx8IE5GU19TRVJWRVJTPTgKKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFN0YXJ0dXAgYW5kIHNodXRkb3duIGZ1bmN0aW9ucy4KKyMgIEFjdHVhbCBzdGFydHVwL3NodXRkb3duIGlzIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorI21vdW50ZAorc3RhcnRfbW91bnRkKCl7CisJZWNobyAtbiAnc3RhcnRpbmcgbW91bnRkOiAnCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLWV4ZWMgIiRORlNfTU9VTlREIiAtLSAiLWYgL2V0Yy9leHBvcnRzICRAIgorCWVjaG8gZG9uZQorfQorc3RvcF9tb3VudGQoKXsKKwllY2hvIC1uICdzdG9wcGluZyBtb3VudGQ6ICcKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLWV4ZWMgIiRORlNfTU9VTlREIgorCWVjaG8gZG9uZQorfQorIworI25mc2QKK3N0YXJ0X25mc2QoKXsKKyAgICAgICAgbW9kcHJvYmUgLXEgbmZzZAorCWdyZXAgLXEgbmZzZCAvcHJvYy9maWxlc3lzdGVtcyB8fCB7CisJCWVjaG8gTkZTIGRhZW1vbiBzdXBwb3J0IG5vdCBlbmFibGVkIGluIGtlcm5lbAorCQlleGl0IDEKKyAgICAgICAgfQorCWdyZXAgLXEgbmZzZCAvcHJvYy9tb3VudHMgfHwgbW91bnQgLXQgbmZzZCBuZnNkIC9wcm9jL2ZzL25mc2QKKwlncmVwIC1xIG5mc2QgL3Byb2MvbW91bnRzIHx8IHsKKwkJZWNobyBuZnNkIGZpbGVzeXN0ZW0gY291bGQgbm90IGJlIG1vdW50ZWQgYXQgL3Byb2MvZnMvbmZzZAorCQlleGl0IDEKKyAgICAgICAgfQorCisJZWNobyAtbiAic3RhcnRpbmcgJDEgbmZzZCBrZXJuZWwgdGhyZWFkczogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1leGVjICIkTkZTX05GU0QiIC0tICIkQCIKKwllY2hvIGRvbmUKK30KK2RlbGF5X25mc2QoKXsKKwlmb3IgZGVsYXkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOSAKKwlkbworCQlpZiBwaWRvZiBuZnNkID4vZGV2L251bGwKKwkJdGhlbgorCQkJZWNobyAtbiAuCisJCQlzbGVlcCAxCisJCWVsc2UKKwkJCXJldHVybiAwCisJCWZpCisJZG9uZQorCXJldHVybiAxCit9CitzdG9wX25mc2QoKXsKKwkjIFdBUk5JTkc6IHRoaXMga2lsbHMgYW55IHByb2Nlc3Mgd2l0aCB0aGUgZXhlY3V0YWJsZQorCSMgbmFtZSAnbmZzZCcuCisJZWNobyAtbiAnc3RvcHBpbmcgbmZzZDogJworCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tc2lnbmFsIDEgLS1uYW1lIG5mc2QKKwlpZiBkZWxheV9uZnNkIHx8IHsKKwkJZWNobyBmYWlsZWQKKwkJZWNobyAnIHVzaW5nIHNpZ25hbCA5OiAnCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tc2lnbmFsIDkgLS1uYW1lIG5mc2QKKwkJZGVsYXlfbmZzZAorCX0KKwl0aGVuCisJCWVjaG8gZG9uZQorCWVsc2UKKwkJZWNobyBmYWlsZWQKKwlmaQorfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBzdXBwb3J0ZWQgb3B0aW9uczoKKyMgIHN0YXJ0CisjICBzdG9wCisjICByZWxvYWQ6IHJlbG9hZHMgdGhlIGV4cG9ydHMgZmlsZQorIyAgcmVzdGFydDogc3RvcHMgYW5kIHN0YXJ0cyBtb3VudGQKKyNGSVhNRTogbmVlZCB0byBjcmVhdGUgdGhlIC92YXIvbGliL25mcy8uLi4gZGlyZWN0b3JpZXMKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwlleHBvcnRmcyAtcgorCXN0YXJ0X25mc2QgIiRORlNfU0VSVkVSUyIKKwlzdGFydF9tb3VudGQKKwl0ZXN0IC1yIC9ldGMvZXhwb3J0cyAmJiBleHBvcnRmcyAtYTs7CisgIHN0b3ApCWV4cG9ydGZzIC11YQorCXN0b3BfbW91bnRkCisJc3RvcF9uZnNkOzsKKyAgc3RhdHVzKQorCXN0YXR1cyAvdXNyL3NiaW4vcnBjLm1vdW50ZAorCVJFVFZBTD0kPworCXN0YXR1cyBuZnNkCisJcnZhbD0kPworCVsgJFJFVFZBTCAtZXEgMCBdICYmIGV4aXQgJHJ2YWwKKwlleGl0ICRSRVRWQUw7OworICByZWxvYWQpCXRlc3QgLXIgL2V0Yy9leHBvcnRzICYmIGV4cG9ydGZzIC1yOzsKKyAgcmVzdGFydCkKKwkkMCBzdG9wCisJJDAgc3RhcnQ7OworICAqKQllY2hvICJVc2FnZTogJDAge3N0YXJ0fHN0b3B8c3RhdHVzfHJlbG9hZHxyZXN0YXJ0fSIKKwlleGl0IDE7OworZXNhYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvcHJvYy1mcy1uZnNkLm1vdW50IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvcHJvYy1mcy1uZnNkLm1vdW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMDgwMWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9wcm9jLWZzLW5mc2QubW91bnQKQEAgLTAsMCArMSw4IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPU5GU0QgY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtCitBZnRlcj1zeXN0ZW1kLW1vZHVsZXMtbG9hZC5zZXJ2aWNlCisKK1tNb3VudF0KK1doYXQ9bmZzZAorV2hlcmU9L3Byb2MvZnMvbmZzZAorVHlwZT1uZnNkCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlsc18xLjMuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzXzEuMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMTAxZGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlsc18xLjMuMS5iYgpAQCAtMCwwICsxLDE0MSBAQAorU1VNTUFSWSA9ICJ1c2Vyc3BhY2UgdXRpbGl0aWVzIGZvciBrZXJuZWwgbmZzIgorREVTQ1JJUFRJT04gPSAiVGhlIG5mcy11dGlscyBwYWNrYWdlIHByb3ZpZGVzIGEgZGFlbW9uIGZvciB0aGUga2VybmVsIFwKK05GUyBzZXJ2ZXIgYW5kIHJlbGF0ZWQgdG9vbHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL25mcy5zb3VyY2Vmb3JnZS5uZXQvIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKK0xJQ0VOU0UgPSAiTUlUICYgR1BMdjIrICYgQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTVmM2E5M2E1YzNjNzg4OGRlNjIzYjQ2ZWEwODVhODQiCisKKyMgdXRpbC1saW51eCBmb3IgbGliYmxraWQKK0RFUEVORFMgPSAibGliY2FwIGxpYm5mc2lkbWFwIGxpYmV2ZW50IHV0aWwtbGludXggc3FsaXRlMyIKK1JERVBFTkRTXyR7UE59LWNsaWVudCA9ICJycGNiaW5kIGJhc2giCitSREVQRU5EU18ke1BOfSA9ICIke1BOfS1jbGllbnQgYmFzaCIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImtlcm5lbC1tb2R1bGUtbmZzZCIKKworaW5oZXJpdCB1c2VyYWRkCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0tY2xpZW50IgorVVNFUkFERF9QQVJBTV8ke1BOfS1jbGllbnQgPSAiLS1zeXN0ZW0gIC0taG9tZS1kaXIgL3Zhci9saWIvbmZzIFwKKwkJCSAgICAgIC0tc2hlbGwgL2Jpbi9mYWxzZSAtLXVzZXItZ3JvdXAgcnBjdXNlciIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL25mcy11dGlscy8ke1BWfS9uZnMtdXRpbHMtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLUFsbG93LXRvLWV4cGxpY2l0bHktZGlzYWJsZS1uZnNpZG1hcC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMtMS4yLjMtc20tbm90aWZ5LXJlc19pbml0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25mc3NlcnZlciBcCisgICAgICAgICAgIGZpbGU6Ly9uZnNjb21tb24gXAorICAgICAgICAgICBmaWxlOi8vbmZzLXV0aWxzLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vbmZzLXNlcnZlci5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL25mcy1tb3VudGQuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtc3RhdGQuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9wcm9jLWZzLW5mc2QubW91bnQgXAorICAgICAgICAgICBmaWxlOi8vbmZzLXV0aWxzLURvLW5vdC1wYXNzLUNGTEFHUy10by1nY2Mtd2hpbGUtYnVpbGRpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbmZzLXV0aWxzLWRlYmlhbml6ZS1zdGFydC1zdGF0ZC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ZGU2NzZiOWZmMzRiOGY5YWRkYzFkMDgwMGZhYmRmOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZjc5ZDcwYjdiNThiMmM4ZjliNzk4YzU4NzIxMTI3ZTgyYmI5NjAyMmFkYzA0YTVjNGNiMjUxNjMwZTY5NmI4IgorCisjIE9ubHkga2VybmVsLW1vZHVsZS1uZnNkIGlzIHJlcXVpcmVkIGhlcmUgKGJ1dCBjYW4gYmUgYnVpbHQtaW4pICAtIHRoZSBuZnNkIG1vZHVsZSB3aWxsCisjIHB1bGwgaW4gdGhlIHJlbWFpbmRlciBvZiB0aGUgZGVwZW5kZW5jaWVzLgorCitJTklUU0NSSVBUX1BBQ0tBR0VTID0gIiR7UE59ICR7UE59LWNsaWVudCIKK0lOSVRTQ1JJUFRfTkFNRSA9ICJuZnNzZXJ2ZXIiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyIKK0lOSVRTQ1JJUFRfTkFNRV8ke1BOfS1jbGllbnQgPSAibmZzY29tbW9uIgorSU5JVFNDUklQVF9QQVJBTVNfJHtQTn0tY2xpZW50ID0gImRlZmF1bHRzIDE5IDIxIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgdXBkYXRlLXJjLmQgc3lzdGVtZCBwa2djb25maWcKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIm5mcy1zZXJ2ZXIuc2VydmljZSBuZnMtbW91bnRkLnNlcnZpY2UiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tY2xpZW50ID0gIm5mcy1zdGF0ZC5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRSA9ICJkaXNhYmxlIgorCisjIC0tZW5hYmxlLXV1aWQgaXMgbmVlZCBmb3IgY3Jvc3MtY29tcGlsaW5nCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXN0YXRkdXNlcj1ycGN1c2VyIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1tb3VudGNvbmZpZyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtbGlibW91bnQtbW91bnQgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1uZnN2NDEgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXV1aWQgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1nc3MgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS10aXJwYyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW5mc2RjbHRyYWNrIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtc3RhdGRwYXRoPS92YXIvbGliL25mcy9zdGF0ZCBcCisgICAgICAgICAgICAgICAiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ0Y3Atd3JhcHBlcnMiCitQQUNLQUdFQ09ORklHW3RjcC13cmFwcGVyc10gPSAiLS13aXRoLXRjcC13cmFwcGVycywtLXdpdGhvdXQtdGNwLXdyYXBwZXJzLHRjcC13cmFwcGVycyIKK1BBQ0tBR0VDT05GSUdbbmZzaWRtYXBdID0gIi0tZW5hYmxlLW5mc2lkbWFwLC0tZGlzYWJsZS1uZnNpZG1hcCxrZXl1dGlscyIKKworSU5ISUJJVF9BVVRPX1NUQUdFID0gIjEiCisKK1BBQ0tBR0VTID0rICIke1BOfS1jbGllbnQgJHtQTn0tc3RhdHMiCisKK0NPTkZGSUxFU18ke1BOfS1jbGllbnQgKz0gIiR7bG9jYWxzdGF0ZWRpcn0vbGliL25mcy9ldGFiIFwKKwkJCSAgICR7bG9jYWxzdGF0ZWRpcn0vbGliL25mcy9ybXRhYiBcCisJCQkgICAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9uZnMveHRhYiBcCisJCQkgICAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9uZnMvc3RhdGQvc3RhdGUgXAorCQkJICAgJHtzeXNjb25mZGlyfS9uZnNtb3VudC5jb25mIgorCitGSUxFU18ke1BOfS1jbGllbnQgPSAiJHtiYXNlX3NiaW5kaXJ9Lyptb3VudC5uZnMqICR7c2JpbmRpcn0vKnN0YXRkIFwKKwkJICAgICAgJHtzYmluZGlyfS9ycGMuaWRtYXBkICR7c2JpbmRpcn0vc20tbm90aWZ5IFwKKwkJICAgICAgJHtzYmluZGlyfS9zaG93bW91bnQgJHtzYmluZGlyfS9uZnNzdGF0IFwKKwkJICAgICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzIFwKKwkJICAgICAgJHtzeXNjb25mZGlyfS9uZnMtdXRpbHMuY29uZiBcCisJCSAgICAgICR7c3lzY29uZmRpcn0vbmZzbW91bnQuY29uZiBcCisJCSAgICAgICR7c3lzY29uZmRpcn0vaW5pdC5kL25mc2NvbW1vbiBcCisJCSAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbmZzLXN0YXRkLnNlcnZpY2UiCitGSUxFU18ke1BOfS1zdGF0cyA9ICIke3NiaW5kaXJ9L21vdW50c3RhdHMgJHtzYmluZGlyfS9uZnNpb3N0YXQiCitSREVQRU5EU18ke1BOfS1zdGF0cyA9ICJweXRob24iCisKK0ZJTEVTXyR7UE59ICs9ICIke3N5c3RlbWRfdW5pdGRpcn0iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICAgICBzZWQgLWkgLWUgJ3Msc2JpbmRpciA9IC9zYmluLHNiaW5kaXIgPSAke2Jhc2Vfc2JpbmRpcn0sZycgXAorICAgICAgICAgICAgJHtTfS91dGlscy9tb3VudC9NYWtlZmlsZS5hbQorCisgICAgICAgIHNlZCAtaSAtZSAncyxzYmluZGlyID0gL3NiaW4sc2JpbmRpciA9ICR7YmFzZV9zYmluZGlyfSxnJyBcCisgICAgICAgICAgICAke1N9L3V0aWxzL29zZF9sb2dpbi9NYWtlZmlsZS5hbQorfQorCisjIE1ha2UgY2xlYW4gbmVlZGVkIGJlY2F1c2UgdGhlIHBhY2thZ2UgY29tZXMgd2l0aAorIyBwcmVjb21waWxlZCA2NC1iaXQgb2JqZWN0cyB0aGF0IGJyZWFrIHRoZSBidWlsZAorZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCW1ha2UgY2xlYW4KK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbmZzc2VydmVyICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uZnNzZXJ2ZXIKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9uZnNjb21tb24gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL25mc2NvbW1vbgorCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbmZzLXV0aWxzLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS91dGlscy9tb3VudC9uZnNtb3VudC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9CisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbmZzLXNlcnZlci5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L25mcy1tb3VudGQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9uZnMtc3RhdGQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgXAorCQktZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCisJCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyouc2VydmljZQorCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9tb2R1bGVzLWxvYWQuZAorCSAgICBlY2hvICJuZnNkIiA+ICR7RH0ke3N5c2NvbmZkaXJ9L21vZHVsZXMtbG9hZC5kL25mc2QuY29uZgorCSAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wcm9jLWZzLW5mc2QubW91bnQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzaW5pdC50YXJnZXQud2FudHMvCisJICAgIGxuIC1zZiAuLi9wcm9jLWZzLW5mc2QubW91bnQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzaW5pdC50YXJnZXQud2FudHMvcHJvYy1mcy1uZnNkLm1vdW50CisJZmkKKworCSMga2VybmVsIGNvZGUgYXMgb2YgMy44IGhhcmQtY29kZXMgdGhpcyBwYXRoIGFzIGEgZGVmYXVsdAorCWluc3RhbGwgLWQgJHtEfS92YXIvbGliL25mcy92NHJlY292ZXJ5CisKKwkjIGNob3duIHRoZSBkaXJlY3RvcmllcyBhbmQgZmlsZXMKKwljaG93biAtUiBycGN1c2VyOnJwY3VzZXIgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL25mcy9zdGF0ZAorCWNobW9kIDA2NDQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL25mcy9zdGF0ZC9zdGF0ZQorCisJIyB0aGUgZm9sbG93aW5nIGFyZSBidWlsdCBieSBDQ19GT1JfQlVJTEQKKwlybSAtZiAke0R9JHtzYmluZGlyfS9ycGNkZWJ1ZworCXJtIC1mICR7RH0ke3NiaW5kaXJ9L3JwY2dlbgorCXJtIC1mICR7RH0ke3NiaW5kaXJ9L2xvY2t0ZXN0Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDE1YTM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vLmluYwpAQCAtMCwwICsxLDM3IEBACitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9mb25vLm9yZyIKK1NVTU1BUlkgID0gIm9wZW4gc291cmNlIHRlbGVwaG9ueSIKK0RFU0NSSVBUSU9OID0gIm9Gb25vIGlzIGEgc3RhY2sgZm9yIG1vYmlsZSB0ZWxlcGhvbnkgZGV2aWNlcyBvbiBMaW51eC4gb0Zvbm8gc3VwcG9ydHMgc3BlYWtpbmcgdG8gdGVsZXBob255IGRldmljZXMgdGhyb3VnaCBzcGVjaWZpYyBkcml2ZXJzLCBvciB3aXRoIGdlbmVyaWMgQVQgY29tbWFuZHMuIgorTElDRU5TRSAgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvb2Zvbm8uaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT0zY2UxN2Q1OTc4ZWYzNDQ1ZGVmMjY1Yjk4ODk5YzJlZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwZGF0ZS1yYy5kIHN5c3RlbWQgYmx1ZXRvb3RoCisKK0RFUEVORFMgID0gImRidXMgZ2xpYi0yLjAgdWRldiBtb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm8iCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJvZm9ubyIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIDIyIgorCitQQUNLQUdFQ09ORklHID8/PSAiXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnYmx1ZXonLCAnJywgZCl9IFwKKyAgICAiCitQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0td2l0aC1zeXN0ZW1kdW5pdGRpcj0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLywtLXdpdGgtc3lzdGVtZHVuaXRkaXI9IgorUEFDS0FHRUNPTkZJR1tibHVlel0gPSAiLS1lbmFibGUtYmx1ZXRvb3RoLCAtLWRpc2FibGUtYmx1ZXRvb3RoLCAke0JMVUVafSIKKworRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS10ZXN0IgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAib2Zvbm8uc2VydmljZSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9vZm9ubyAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvb2Zvbm8KK30KKworUEFDS0FHRVMgPSsgIiR7UE59LXRlc3RzIgorCitSREVQRU5EU18ke1BOfSArPSAiZGJ1cyIKKworRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9L3VkZXYgJHtzeXN0ZW1kX3VuaXRkaXJ9IgorRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtsaWJkaXJ9LyR7QlBOfS90ZXN0IgorUkRFUEVORFNfJHtQTn0tdGVzdHMgPSAicHl0aG9uIHB5dGhvbi1weWdvYmplY3QgcHl0aG9uLWRidXMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vMDAwMS1iYWNrdHJhY2UtRGlzYWJsZS1mb3Itbm9uLWdsaWJjLUMtbGlicmFyaWVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vLzAwMDEtYmFja3RyYWNlLURpc2FibGUtZm9yLW5vbi1nbGliYy1DLWxpYnJhcmllcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDZiNmRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vLzAwMDEtYmFja3RyYWNlLURpc2FibGUtZm9yLW5vbi1nbGliYy1DLWxpYnJhcmllcy5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIDJkNzI5YWYwODk3ZDdkNzJiODNkMTExODc2ZmViZjllMGVlYzFhNjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAzIEFwciAyMDE1IDIwOjUwOjU2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGJhY2t0cmFjZTogRGlzYWJsZSBmb3Igbm9uLWdsaWJjIEMgbGlicmFyaWVzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tCisgc3JjL2xvZy5jIHwgNSArKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9sb2cuYyBiL3NyYy9sb2cuYworaW5kZXggZmViYzg3NC4uOWRiNGFlNyAxMDA2NDQKKy0tLSBhL3NyYy9sb2cuYworKysrIGIvc3JjL2xvZy5jCitAQCAtMzAsNyArMzAsOSBAQAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN5c2xvZy5oPgorKyNpZmRlZiBfX0dMSUJDX18KKyAjaW5jbHVkZSA8ZXhlY2luZm8uaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8ZGxmY24uaD4KKyAKKyAjaW5jbHVkZSAib2Zvbm8uaCIKK0BAIC0yMTksOCArMjIxLDkgQEAgc3RhdGljIHZvaWQgc2lnbmFsX2hhbmRsZXIoaW50IHNpZ25vKQorIHsKKyAJb2Zvbm9fZXJyb3IoIkFib3J0aW5nIChzaWduYWwgJWQpIFslc10iLCBzaWdubywgcHJvZ3JhbV9leGVjKTsKKyAKKysjaWZkZWYgX19HTElCQ19fCisgCXByaW50X2JhY2t0cmFjZSgyKTsKKy0KKysjZW5kaWYKKyAJZXhpdChFWElUX0ZBSUxVUkUpOworIH0KKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vL1JldmVydC10ZXN0LUNvbnZlcnQtdG8tUHl0aG9uLTMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vUmV2ZXJ0LXRlc3QtQ29udmVydC10by1QeXRob24tMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjhjYTc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vL1JldmVydC10ZXN0LUNvbnZlcnQtdG8tUHl0aG9uLTMucGF0Y2gKQEAgLTAsMCArMSwxMjcwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0Zyb20gNTcyZmMyM2Y2ZWZkNjVhMmVmOWU2Yzk1N2IyNTA2MTA4NzM4NjcyYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+CitEYXRlOiBNb24sIDI1IEF1ZyAyMDE0IDE2OjU5OjM5ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFJldmVydCAidGVzdDogQ29udmVydCB0byBQeXRob24gMyIKKworVGhpcyByZXZlcnRzIGNvbW1pdCBjMDI3YWI5ZmJjMWE4ZThjOWU3NmJjZDEyM2RmMWFkNzY5NjMwN2MyLgorLS0tCisgdGVzdC9hY3RpdmF0ZS1jb250ZXh0ICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2Fuc3dlci1jYWxscyAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvYmFja3RyYWNlICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9jYW5jZWwtdXNzZCAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2NkbWEtY29ubm1hbi1kaXNhYmxlICAgICAgfCAgMiArLQorIHRlc3QvY2RtYS1jb25ubWFuLWVuYWJsZSAgICAgICB8ICAyICstCisgdGVzdC9jZG1hLWRpYWwtbnVtYmVyICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2NkbWEtaGFuZ3VwICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvY2RtYS1saXN0LWNhbGwgICAgICAgICAgICB8ICAyICstCisgdGVzdC9jZG1hLXNldC1jcmVkZW50aWFscyAgICAgIHwgIDIgKy0KKyB0ZXN0L2NoYW5nZS1waW4gICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvY3JlYXRlLWludGVybmV0LWNvbnRleHQgICB8ICAyICstCisgdGVzdC9jcmVhdGUtbW1zLWNvbnRleHQgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2NyZWF0ZS1tdWx0aXBhcnR5ICAgICAgICAgfCAgMiArLQorIHRlc3QvZGVhY3RpdmF0ZS1hbGwgICAgICAgICAgICB8ICAyICstCisgdGVzdC9kZWFjdGl2YXRlLWNvbnRleHQgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2RpYWwtbnVtYmVyICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZGlzYWJsZS1jYWxsLWZvcndhcmRpbmcgICB8ICAyICstCisgdGVzdC9kaXNhYmxlLWdwcnMgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2Rpc2FibGUtbW9kZW0gICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZGlzcGxheS1pY29uICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9lbmFibGUtY2JzICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2VuYWJsZS1ncHJzICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZW5hYmxlLW1vZGVtICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9lbnRlci1waW4gICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2dldC1pY29uICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZ2V0LW9wZXJhdG9ycyAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9nZXQtdGVjaC1wcmVmZXJlbmNlICAgICAgIHwgIDIgKy0KKyB0ZXN0L2hhbmd1cC1hY3RpdmUgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvaGFuZ3VwLWFsbCAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9oYW5ndXAtY2FsbCAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2hhbmd1cC1tdWx0aXBhcnR5ICAgICAgICAgfCAgMiArLQorIHRlc3QvaG9sZC1hbmQtYW5zd2VyICAgICAgICAgICB8ICAyICstCisgdGVzdC9pbml0aWF0ZS11c3NkICAgICAgICAgICAgIHwgIDQgKystLQorIHRlc3QvbGlzdC1jYWxscyAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9saXN0LWNvbnRleHRzICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2xpc3QtbWVzc2FnZXMgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvbGlzdC1tb2RlbXMgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9saXN0LW9wZXJhdG9ycyAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2xvY2stcGluICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvbG9ja2Rvd24tbW9kZW0gICAgICAgICAgICB8ICAyICstCisgdGVzdC9tb25pdG9yLW9mb25vICAgICAgICAgICAgIHwgIDQgKystLQorIHRlc3Qvb2ZmbGluZS1tb2RlbSAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9vbmxpbmUtbW9kZW0gICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3ByaXZhdGUtY2hhdCAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvcHJvY2Vzcy1jb250ZXh0LXNldHRpbmdzICB8ICAyICstCisgdGVzdC9yZWNlaXZlLXNtcyAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3JlamVjdC1jYWxscyAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvcmVsZWFzZS1hbmQtYW5zd2VyICAgICAgICB8ICAyICstCisgdGVzdC9yZWxlYXNlLWFuZC1zd2FwICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3JlbW92ZS1jb250ZXh0cyAgICAgICAgICAgfCAgMiArLQorIHRlc3QvcmVzZXQtcGluICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zY2FuLWZvci1vcGVyYXRvcnMgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NlbmQtc21zICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2VuZC11c3NkICAgICAgICAgICAgICAgICB8ICA0ICsrLS0KKyB0ZXN0L3NlbmQtdmNhbCAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2VuZC12Y2FyZCAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtY2FsbC1mb3J3YXJkaW5nICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1jYnMtdG9waWNzICAgICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LWNvbnRleHQtcHJvcGVydHkgICAgICB8ICAyICstCisgdGVzdC9zZXQtZmFzdC1kb3JtYW5jeSAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1nc20tYmFuZCAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LW1pYy12b2x1bWUgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtbW1zLWRldGFpbHMgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1tc2lzZG4gICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LXJvYW1pbmctYWxsb3dlZCAgICAgICB8ICAyICstCisgdGVzdC9zZXQtc3BlYWtlci12b2x1bWUgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC10ZWNoLXByZWZlcmVuY2UgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LXR0eSAgICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtdW10cy1iYW5kICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC11c2Utc21zLXJlcG9ydHMgICAgICAgfCAgMiArLQorIHRlc3Qvc3dhcC1jYWxscyAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC90ZXN0LWFkdmljZS1vZi1jaGFyZ2UgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtY2FsbC1iYXJyaW5nICAgICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1jYWxsLWZvcndhcmRpbmcgICAgICB8ICAyICstCisgdGVzdC90ZXN0LWNhbGwtc2V0dGluZ3MgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtY2JzICAgICAgICAgICAgICAgICAgfCAgNCArKy0tCisgdGVzdC90ZXN0LWduc3MgICAgICAgICAgICAgICAgIHwgIDQgKystLQorIHRlc3QvdGVzdC1tZXNzYWdlLXdhaXRpbmcgICAgICB8ICAyICstCisgdGVzdC90ZXN0LW1vZGVtICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtbmV0d29yay1yZWdpc3RyYXRpb24gfCAgMiArLQorIHRlc3QvdGVzdC1waG9uZWJvb2sgICAgICAgICAgICB8ICAyICstCisgdGVzdC90ZXN0LXB1c2gtbm90aWZpY2F0aW9uICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3Qtc21hcnQtbWVzc2FnaW5nICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1zbXMgICAgICAgICAgICAgICAgICB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQorIHRlc3QvdGVzdC1zcyAgICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2IgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3Qtc3MtY29udHJvbC1jZiAgICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1zcy1jb250cm9sLWNzICAgICAgICB8ICAyICstCisgdGVzdC90ZXN0LXN0ay1tZW51ICAgICAgICAgICAgIHwgMzQgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQorIHRlc3QvdW5sb2NrLXBpbiAgICAgICAgICAgICAgICB8ICAyICstCisgOTQgZmlsZXMgY2hhbmdlZCwgMTI0IGluc2VydGlvbnMoKyksIDEyNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3Rlc3QvYWN0aXZhdGUtY29udGV4dCBiL3Rlc3QvYWN0aXZhdGUtY29udGV4dAoraW5kZXggZTRmYzcwMi4uNDI0MTM5NiAxMDA3NTUKKy0tLSBhL3Rlc3QvYWN0aXZhdGUtY29udGV4dAorKysrIGIvdGVzdC9hY3RpdmF0ZS1jb250ZXh0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvYW5zd2VyLWNhbGxzIGIvdGVzdC9hbnN3ZXItY2FsbHMKK2luZGV4IGRhYTc5NGIuLjQ1ZmYwOGYgMTAwNzU1CistLS0gYS90ZXN0L2Fuc3dlci1jYWxscworKysrIGIvdGVzdC9hbnN3ZXItY2FsbHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L2JhY2t0cmFjZSBiL3Rlc3QvYmFja3RyYWNlCitpbmRleCAwM2M3NjMyLi5jNjI0NzA5IDEwMDc1NQorLS0tIGEvdGVzdC9iYWNrdHJhY2UKKysrKyBiL3Rlc3QvYmFja3RyYWNlCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBvcworIGltcG9ydCByZQorZGlmZiAtLWdpdCBhL3Rlc3QvY2FuY2VsLXVzc2QgYi90ZXN0L2NhbmNlbC11c3NkCitpbmRleCBlNzU1OWJhLi4xNzk3ZjI2IDEwMDc1NQorLS0tIGEvdGVzdC9jYW5jZWwtdXNzZAorKysrIGIvdGVzdC9jYW5jZWwtdXNzZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2NkbWEtY29ubm1hbi1kaXNhYmxlIGIvdGVzdC9jZG1hLWNvbm5tYW4tZGlzYWJsZQoraW5kZXggM2FkYzE0ZC4uMGRkYzBjZCAxMDA3NTUKKy0tLSBhL3Rlc3QvY2RtYS1jb25ubWFuLWRpc2FibGUKKysrKyBiL3Rlc3QvY2RtYS1jb25ubWFuLWRpc2FibGUKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9jZG1hLWNvbm5tYW4tZW5hYmxlIGIvdGVzdC9jZG1hLWNvbm5tYW4tZW5hYmxlCitpbmRleCBhYzE2YTJkLi5hM2NjYTAxIDEwMDc1NQorLS0tIGEvdGVzdC9jZG1hLWNvbm5tYW4tZW5hYmxlCisrKysgYi90ZXN0L2NkbWEtY29ubm1hbi1lbmFibGUKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9jZG1hLWRpYWwtbnVtYmVyIGIvdGVzdC9jZG1hLWRpYWwtbnVtYmVyCitpbmRleCA2ODM0MzFlLi45Y2RmYjI0IDEwMDc1NQorLS0tIGEvdGVzdC9jZG1hLWRpYWwtbnVtYmVyCisrKysgYi90ZXN0L2NkbWEtZGlhbC1udW1iZXIKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9jZG1hLWhhbmd1cCBiL3Rlc3QvY2RtYS1oYW5ndXAKK2luZGV4IDQxZmZhNjAuLjQ5M2VjZTQgMTAwNzU1CistLS0gYS90ZXN0L2NkbWEtaGFuZ3VwCisrKysgYi90ZXN0L2NkbWEtaGFuZ3VwCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvY2RtYS1saXN0LWNhbGwgYi90ZXN0L2NkbWEtbGlzdC1jYWxsCitpbmRleCBiMTMyMzUzLi41ZDM2YTY5IDEwMDc1NQorLS0tIGEvdGVzdC9jZG1hLWxpc3QtY2FsbAorKysrIGIvdGVzdC9jZG1hLWxpc3QtY2FsbAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvY2RtYS1zZXQtY3JlZGVudGlhbHMgYi90ZXN0L2NkbWEtc2V0LWNyZWRlbnRpYWxzCitpbmRleCBhNjBjODZlLi5hMjg2YjBlIDEwMDc1NQorLS0tIGEvdGVzdC9jZG1hLXNldC1jcmVkZW50aWFscworKysrIGIvdGVzdC9jZG1hLXNldC1jcmVkZW50aWFscworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2NoYW5nZS1waW4gYi90ZXN0L2NoYW5nZS1waW4KK2luZGV4IDMwMWM2Y2UuLjAwMGNlNTMgMTAwNzU1CistLS0gYS90ZXN0L2NoYW5nZS1waW4KKysrKyBiL3Rlc3QvY2hhbmdlLXBpbgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2NyZWF0ZS1pbnRlcm5ldC1jb250ZXh0IGIvdGVzdC9jcmVhdGUtaW50ZXJuZXQtY29udGV4dAoraW5kZXggMTA4OTA1My4uZWZkMDk5OCAxMDA3NTUKKy0tLSBhL3Rlc3QvY3JlYXRlLWludGVybmV0LWNvbnRleHQKKysrKyBiL3Rlc3QvY3JlYXRlLWludGVybmV0LWNvbnRleHQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9jcmVhdGUtbW1zLWNvbnRleHQgYi90ZXN0L2NyZWF0ZS1tbXMtY29udGV4dAoraW5kZXggNTk4MzM2Zi4uZTViZTA4ZCAxMDA3NTUKKy0tLSBhL3Rlc3QvY3JlYXRlLW1tcy1jb250ZXh0CisrKysgYi90ZXN0L2NyZWF0ZS1tbXMtY29udGV4dAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2NyZWF0ZS1tdWx0aXBhcnR5IGIvdGVzdC9jcmVhdGUtbXVsdGlwYXJ0eQoraW5kZXggMWI3NjAxMC4uOTcwNDdjMyAxMDA3NTUKKy0tLSBhL3Rlc3QvY3JlYXRlLW11bHRpcGFydHkKKysrKyBiL3Rlc3QvY3JlYXRlLW11bHRpcGFydHkKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9kZWFjdGl2YXRlLWFsbCBiL3Rlc3QvZGVhY3RpdmF0ZS1hbGwKK2luZGV4IDVhYTg1ODcuLjQyNzAwOWUgMTAwNzU1CistLS0gYS90ZXN0L2RlYWN0aXZhdGUtYWxsCisrKysgYi90ZXN0L2RlYWN0aXZhdGUtYWxsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvZGVhY3RpdmF0ZS1jb250ZXh0IGIvdGVzdC9kZWFjdGl2YXRlLWNvbnRleHQKK2luZGV4IDVjODZhNzEuLmRmNDdkMmUgMTAwNzU1CistLS0gYS90ZXN0L2RlYWN0aXZhdGUtY29udGV4dAorKysrIGIvdGVzdC9kZWFjdGl2YXRlLWNvbnRleHQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9kaWFsLW51bWJlciBiL3Rlc3QvZGlhbC1udW1iZXIKK2luZGV4IGZlNWFkYWQuLmVlNjc0ZDkgMTAwNzU1CistLS0gYS90ZXN0L2RpYWwtbnVtYmVyCisrKysgYi90ZXN0L2RpYWwtbnVtYmVyCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvZGlzYWJsZS1jYWxsLWZvcndhcmRpbmcgYi90ZXN0L2Rpc2FibGUtY2FsbC1mb3J3YXJkaW5nCitpbmRleCA4MTFlNGZhLi4zNjA5ODE2IDEwMDc1NQorLS0tIGEvdGVzdC9kaXNhYmxlLWNhbGwtZm9yd2FyZGluZworKysrIGIvdGVzdC9kaXNhYmxlLWNhbGwtZm9yd2FyZGluZworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCitkaWZmIC0tZ2l0IGEvdGVzdC9kaXNhYmxlLWdwcnMgYi90ZXN0L2Rpc2FibGUtZ3BycworaW5kZXggNjFjZTIxNi4uYzZjNDBhNSAxMDA3NTUKKy0tLSBhL3Rlc3QvZGlzYWJsZS1ncHJzCisrKysgYi90ZXN0L2Rpc2FibGUtZ3BycworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2Rpc2FibGUtbW9kZW0gYi90ZXN0L2Rpc2FibGUtbW9kZW0KK2luZGV4IDZmYmE4NTcuLmNhOGM4ZDggMTAwNzU1CistLS0gYS90ZXN0L2Rpc2FibGUtbW9kZW0KKysrKyBiL3Rlc3QvZGlzYWJsZS1tb2RlbQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2Rpc3BsYXktaWNvbiBiL3Rlc3QvZGlzcGxheS1pY29uCitpbmRleCBhYzQwODE4Li43NTNkMTRkIDEwMDc1NQorLS0tIGEvdGVzdC9kaXNwbGF5LWljb24KKysrKyBiL3Rlc3QvZGlzcGxheS1pY29uCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvZW5hYmxlLWNicyBiL3Rlc3QvZW5hYmxlLWNicworaW5kZXggNGE4YmY2Ni4uYzA4YmYyYiAxMDA3NTUKKy0tLSBhL3Rlc3QvZW5hYmxlLWNicworKysrIGIvdGVzdC9lbmFibGUtY2JzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvZW5hYmxlLWdwcnMgYi90ZXN0L2VuYWJsZS1ncHJzCitpbmRleCA2OGQ1ZWYwLi44NjY0ODkxIDEwMDc1NQorLS0tIGEvdGVzdC9lbmFibGUtZ3BycworKysrIGIvdGVzdC9lbmFibGUtZ3BycworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2VuYWJsZS1tb2RlbSBiL3Rlc3QvZW5hYmxlLW1vZGVtCitpbmRleCBmYzU5NThhLi5kZmFhYWE4IDEwMDc1NQorLS0tIGEvdGVzdC9lbmFibGUtbW9kZW0KKysrKyBiL3Rlc3QvZW5hYmxlLW1vZGVtCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvZW50ZXItcGluIGIvdGVzdC9lbnRlci1waW4KK2luZGV4IDk1NTYzNjMuLmM2ZWU2NjkgMTAwNzU1CistLS0gYS90ZXN0L2VudGVyLXBpbgorKysrIGIvdGVzdC9lbnRlci1waW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9nZXQtaWNvbiBiL3Rlc3QvZ2V0LWljb24KK2luZGV4IDU1NjlhMzMuLmZkYWFlZTcgMTAwNzU1CistLS0gYS90ZXN0L2dldC1pY29uCisrKysgYi90ZXN0L2dldC1pY29uCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvZ2V0LW9wZXJhdG9ycyBiL3Rlc3QvZ2V0LW9wZXJhdG9ycworaW5kZXggMGYzNWM4MC4uNjIzNTRjNSAxMDA3NTUKKy0tLSBhL3Rlc3QvZ2V0LW9wZXJhdG9ycworKysrIGIvdGVzdC9nZXQtb3BlcmF0b3JzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvZ2V0LXRlY2gtcHJlZmVyZW5jZSBiL3Rlc3QvZ2V0LXRlY2gtcHJlZmVyZW5jZQoraW5kZXggN2JhNjM2NS4uNzdkMjBkMCAxMDA3NTUKKy0tLSBhL3Rlc3QvZ2V0LXRlY2gtcHJlZmVyZW5jZQorKysrIGIvdGVzdC9nZXQtdGVjaC1wcmVmZXJlbmNlCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzLCBzeXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L2hhbmd1cC1hY3RpdmUgYi90ZXN0L2hhbmd1cC1hY3RpdmUKK2luZGV4IDgyZTBlYjAuLjVhZjYyYWIgMTAwNzU1CistLS0gYS90ZXN0L2hhbmd1cC1hY3RpdmUKKysrKyBiL3Rlc3QvaGFuZ3VwLWFjdGl2ZQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2hhbmd1cC1hbGwgYi90ZXN0L2hhbmd1cC1hbGwKK2luZGV4IDNhMDEzOGQuLjMyOTMzZGIgMTAwNzU1CistLS0gYS90ZXN0L2hhbmd1cC1hbGwKKysrKyBiL3Rlc3QvaGFuZ3VwLWFsbAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2hhbmd1cC1jYWxsIGIvdGVzdC9oYW5ndXAtY2FsbAoraW5kZXggNWEyZGUyMC4uNDQ3MDIwYyAxMDA3NTUKKy0tLSBhL3Rlc3QvaGFuZ3VwLWNhbGwKKysrKyBiL3Rlc3QvaGFuZ3VwLWNhbGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9oYW5ndXAtbXVsdGlwYXJ0eSBiL3Rlc3QvaGFuZ3VwLW11bHRpcGFydHkKK2luZGV4IDI0NzUxYzMuLjQ4ZmUzNDIgMTAwNzU1CistLS0gYS90ZXN0L2hhbmd1cC1tdWx0aXBhcnR5CisrKysgYi90ZXN0L2hhbmd1cC1tdWx0aXBhcnR5CitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvaG9sZC1hbmQtYW5zd2VyIGIvdGVzdC9ob2xkLWFuZC1hbnN3ZXIKK2luZGV4IGRhM2JlNTcuLjJjNDdlMjcgMTAwNzU1CistLS0gYS90ZXN0L2hvbGQtYW5kLWFuc3dlcgorKysrIGIvdGVzdC9ob2xkLWFuZC1hbnN3ZXIKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9pbml0aWF0ZS11c3NkIGIvdGVzdC9pbml0aWF0ZS11c3NkCitpbmRleCBmYWY1MGQwLi5kNzAyMmYxIDEwMDc1NQorLS0tIGEvdGVzdC9pbml0aWF0ZS11c3NkCisrKysgYi90ZXN0L2luaXRpYXRlLXVzc2QKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitAQCAtNDUsNyArNDUsNyBAQCBpZiBzdGF0ZSA9PSAiaWRsZSI6CisgcHJpbnQoIlN0YXRlOiAlcyIgJSAoc3RhdGUpKQorIAorIHdoaWxlIHN0YXRlID09ICJ1c2VyLXJlc3BvbnNlIjoKKy0JcmVzcG9uc2UgPSBpbnB1dCgiRW50ZXIgcmVzcG9uc2U6ICIpCisrCXJlc3BvbnNlID0gcmF3X2lucHV0KCJFbnRlciByZXNwb25zZTogIikKKyAKKyAJcmVzdWx0ID0gdXNzZC5SZXNwb25kKHJlc3BvbnNlLCB0aW1lb3V0PTEwMCkKKyAKK2RpZmYgLS1naXQgYS90ZXN0L2xpc3QtY2FsbHMgYi90ZXN0L2xpc3QtY2FsbHMKK2luZGV4IGYzZWU5OTEuLjA4NjY4YzYgMTAwNzU1CistLS0gYS90ZXN0L2xpc3QtY2FsbHMKKysrKyBiL3Rlc3QvbGlzdC1jYWxscworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvbGlzdC1jb250ZXh0cyBiL3Rlc3QvbGlzdC1jb250ZXh0cworaW5kZXggNzgyNzhjYS4uZjBkNDA5NCAxMDA3NTUKKy0tLSBhL3Rlc3QvbGlzdC1jb250ZXh0cworKysrIGIvdGVzdC9saXN0LWNvbnRleHRzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9saXN0LW1lc3NhZ2VzIGIvdGVzdC9saXN0LW1lc3NhZ2VzCitpbmRleCA5ZjViY2UzLi5jZmNjYmVhIDEwMDc1NQorLS0tIGEvdGVzdC9saXN0LW1lc3NhZ2VzCisrKysgYi90ZXN0L2xpc3QtbWVzc2FnZXMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L2xpc3QtbW9kZW1zIGIvdGVzdC9saXN0LW1vZGVtcworaW5kZXggYjlmNTEwYS4uZWQ2NjEyNCAxMDA3NTUKKy0tLSBhL3Rlc3QvbGlzdC1tb2RlbXMKKysrKyBiL3Rlc3QvbGlzdC1tb2RlbXMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L2xpc3Qtb3BlcmF0b3JzIGIvdGVzdC9saXN0LW9wZXJhdG9ycworaW5kZXggMDY0YzRlMy4uMzQ5YmY0MSAxMDA3NTUKKy0tLSBhL3Rlc3QvbGlzdC1vcGVyYXRvcnMKKysrKyBiL3Rlc3QvbGlzdC1vcGVyYXRvcnMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9sb2NrLXBpbiBiL3Rlc3QvbG9jay1waW4KK2luZGV4IDk2ZWE5YzIuLjU1Nzk3MzUgMTAwNzU1CistLS0gYS90ZXN0L2xvY2stcGluCisrKysgYi90ZXN0L2xvY2stcGluCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvbG9ja2Rvd24tbW9kZW0gYi90ZXN0L2xvY2tkb3duLW1vZGVtCitpbmRleCA0ZTA0MjA1Li43ODFhYmI2IDEwMDc1NQorLS0tIGEvdGVzdC9sb2NrZG93bi1tb2RlbQorKysrIGIvdGVzdC9sb2NrZG93bi1tb2RlbQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L21vbml0b3Itb2Zvbm8gYi90ZXN0L21vbml0b3Itb2Zvbm8KK2luZGV4IDg4MzA3NTcuLmJkMzE2MTcgMTAwNzU1CistLS0gYS90ZXN0L21vbml0b3Itb2Zvbm8KKysrKyBiL3Rlc3QvbW9uaXRvci1vZm9ubworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyAKK0BAIC02LDcgKzYsNyBAQCBpbXBvcnQgZGJ1cworIGltcG9ydCBkYnVzLm1haW5sb29wLmdsaWIKKyAKKyBfZGJ1czJweSA9IHsKKy0JZGJ1cy5TdHJpbmcgOiBzdHIsCisrCWRidXMuU3RyaW5nIDogdW5pY29kZSwKKyAJZGJ1cy5VSW50MzIgOiBpbnQsCisgCWRidXMuSW50MzIgOiBpbnQsCisgCWRidXMuSW50MTYgOiBpbnQsCitkaWZmIC0tZ2l0IGEvdGVzdC9vZmZsaW5lLW1vZGVtIGIvdGVzdC9vZmZsaW5lLW1vZGVtCitpbmRleCBlOGMwNDNhLi5lYTFmNTIyIDEwMDc1NQorLS0tIGEvdGVzdC9vZmZsaW5lLW1vZGVtCisrKysgYi90ZXN0L29mZmxpbmUtbW9kZW0KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMsIHN5cworIAorZGlmZiAtLWdpdCBhL3Rlc3Qvb25saW5lLW1vZGVtIGIvdGVzdC9vbmxpbmUtbW9kZW0KK2luZGV4IDAyOWM0YTUuLjMxMGVkN2QgMTAwNzU1CistLS0gYS90ZXN0L29ubGluZS1tb2RlbQorKysrIGIvdGVzdC9vbmxpbmUtbW9kZW0KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMsIHN5cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvcHJpdmF0ZS1jaGF0IGIvdGVzdC9wcml2YXRlLWNoYXQKK2luZGV4IGU3ZTU0MDYuLmVmMmVmNmMgMTAwNzU1CistLS0gYS90ZXN0L3ByaXZhdGUtY2hhdAorKysrIGIvdGVzdC9wcml2YXRlLWNoYXQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9wcm9jZXNzLWNvbnRleHQtc2V0dGluZ3MgYi90ZXN0L3Byb2Nlc3MtY29udGV4dC1zZXR0aW5ncworaW5kZXggOGEzZWNmYS4uMGYwNThiMiAxMDA3NTUKKy0tLSBhL3Rlc3QvcHJvY2Vzcy1jb250ZXh0LXNldHRpbmdzCisrKysgYi90ZXN0L3Byb2Nlc3MtY29udGV4dC1zZXR0aW5ncworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgb3MKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvcmVjZWl2ZS1zbXMgYi90ZXN0L3JlY2VpdmUtc21zCitpbmRleCBhMGM2OTE1Li5jMjNlYjE0IDEwMDc1NQorLS0tIGEvdGVzdC9yZWNlaXZlLXNtcworKysrIGIvdGVzdC9yZWNlaXZlLXNtcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3JlamVjdC1jYWxscyBiL3Rlc3QvcmVqZWN0LWNhbGxzCitpbmRleCA3MWIyNDNlLi45ZWRmMWZmIDEwMDc1NQorLS0tIGEvdGVzdC9yZWplY3QtY2FsbHMKKysrKyBiL3Rlc3QvcmVqZWN0LWNhbGxzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9yZWxlYXNlLWFuZC1hbnN3ZXIgYi90ZXN0L3JlbGVhc2UtYW5kLWFuc3dlcgoraW5kZXggZGVjOGUxNy4uMjVmZDgxOCAxMDA3NTUKKy0tLSBhL3Rlc3QvcmVsZWFzZS1hbmQtYW5zd2VyCisrKysgYi90ZXN0L3JlbGVhc2UtYW5kLWFuc3dlcgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3JlbGVhc2UtYW5kLXN3YXAgYi90ZXN0L3JlbGVhc2UtYW5kLXN3YXAKK2luZGV4IGNiOGM4NGUuLjdiMzU2OWYgMTAwNzU1CistLS0gYS90ZXN0L3JlbGVhc2UtYW5kLXN3YXAKKysrKyBiL3Rlc3QvcmVsZWFzZS1hbmQtc3dhcAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3JlbW92ZS1jb250ZXh0cyBiL3Rlc3QvcmVtb3ZlLWNvbnRleHRzCitpbmRleCBiNTQxODRlLi5jNTA4MmNiIDEwMDc1NQorLS0tIGEvdGVzdC9yZW1vdmUtY29udGV4dHMKKysrKyBiL3Rlc3QvcmVtb3ZlLWNvbnRleHRzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9yZXNldC1waW4gYi90ZXN0L3Jlc2V0LXBpbgoraW5kZXggM2ZiZDEyNi4uYjQyOTI1NCAxMDA3NTUKKy0tLSBhL3Rlc3QvcmVzZXQtcGluCisrKysgYi90ZXN0L3Jlc2V0LXBpbgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3NjYW4tZm9yLW9wZXJhdG9ycyBiL3Rlc3Qvc2Nhbi1mb3Itb3BlcmF0b3JzCitpbmRleCBiNGZjMDVlLi43NDljNzEwIDEwMDc1NQorLS0tIGEvdGVzdC9zY2FuLWZvci1vcGVyYXRvcnMKKysrKyBiL3Rlc3Qvc2Nhbi1mb3Itb3BlcmF0b3JzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2VuZC1zbXMgYi90ZXN0L3NlbmQtc21zCitpbmRleCA5ODgwOGFhLi5lMDY0NDRkIDEwMDc1NQorLS0tIGEvdGVzdC9zZW5kLXNtcworKysrIGIvdGVzdC9zZW5kLXNtcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NlbmQtdXNzZCBiL3Rlc3Qvc2VuZC11c3NkCitpbmRleCBhMjBlMDk4Li5lNTg1ODgzIDEwMDc1NQorLS0tIGEvdGVzdC9zZW5kLXVzc2QKKysrKyBiL3Rlc3Qvc2VuZC11c3NkCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworQEAgLTQ2LDcgKzQ2LDcgQEAgaWYgc3RhdGUgPT0gImlkbGUiOgorIHByaW50KCJTdGF0ZTogJXMiICUgKHN0YXRlKSkKKyAKKyB3aGlsZSBzdGF0ZSA9PSAidXNlci1yZXNwb25zZSI6CistCXJlc3BvbnNlID0gaW5wdXQoIkVudGVyIHJlc3BvbnNlOiAiKQorKwlyZXNwb25zZSA9IHJhd19pbnB1dCgiRW50ZXIgcmVzcG9uc2U6ICIpCisgCisgCXByaW50KHVzc2QuUmVzcG9uZChyZXNwb25zZSwgdGltZW91dD0xMDApKQorIAorZGlmZiAtLWdpdCBhL3Rlc3Qvc2VuZC12Y2FsIGIvdGVzdC9zZW5kLXZjYWwKK2luZGV4IDU2NmRhZWYuLjdmODI3MmIgMTAwNzU1CistLS0gYS90ZXN0L3NlbmQtdmNhbAorKysrIGIvdGVzdC9zZW5kLXZjYWwKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZW5kLXZjYXJkIGIvdGVzdC9zZW5kLXZjYXJkCitpbmRleCA0ZGVkZjUxLi4yNTBiMzZmIDEwMDc1NQorLS0tIGEvdGVzdC9zZW5kLXZjYXJkCisrKysgYi90ZXN0L3NlbmQtdmNhcmQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtY2FsbC1mb3J3YXJkaW5nIGIvdGVzdC9zZXQtY2FsbC1mb3J3YXJkaW5nCitpbmRleCA0OWQxY2UwLi45ZmQzNThiIDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtY2FsbC1mb3J3YXJkaW5nCisrKysgYi90ZXN0L3NldC1jYWxsLWZvcndhcmRpbmcKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LWNicy10b3BpY3MgYi90ZXN0L3NldC1jYnMtdG9waWNzCitpbmRleCBkYjk1ZTE2Li43OGQ2ZDQ0IDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtY2JzLXRvcGljcworKysrIGIvdGVzdC9zZXQtY2JzLXRvcGljcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1jb250ZXh0LXByb3BlcnR5IGIvdGVzdC9zZXQtY29udGV4dC1wcm9wZXJ0eQoraW5kZXggNWZmN2E2Ny4uNjRhNmZiOCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LWNvbnRleHQtcHJvcGVydHkKKysrKyBiL3Rlc3Qvc2V0LWNvbnRleHQtcHJvcGVydHkKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtZmFzdC1kb3JtYW5jeSBiL3Rlc3Qvc2V0LWZhc3QtZG9ybWFuY3kKK2luZGV4IGVmNzdiY2QuLjdiZjc3MTUgMTAwNzU1CistLS0gYS90ZXN0L3NldC1mYXN0LWRvcm1hbmN5CisrKysgYi90ZXN0L3NldC1mYXN0LWRvcm1hbmN5CitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LWdzbS1iYW5kIGIvdGVzdC9zZXQtZ3NtLWJhbmQKK2luZGV4IGIzN2JjYjUuLjNjMTdjMTAgMTAwNzU1CistLS0gYS90ZXN0L3NldC1nc20tYmFuZAorKysrIGIvdGVzdC9zZXQtZ3NtLWJhbmQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtbWljLXZvbHVtZSBiL3Rlc3Qvc2V0LW1pYy12b2x1bWUKK2luZGV4IGNkNmM3M2YuLmUwYmZmNDkgMTAwNzU1CistLS0gYS90ZXN0L3NldC1taWMtdm9sdW1lCisrKysgYi90ZXN0L3NldC1taWMtdm9sdW1lCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LW1tcy1kZXRhaWxzIGIvdGVzdC9zZXQtbW1zLWRldGFpbHMKK2luZGV4IDZlZTU5ZmEuLmQyZDA4MzggMTAwNzU1CistLS0gYS90ZXN0L3NldC1tbXMtZGV0YWlscworKysrIGIvdGVzdC9zZXQtbW1zLWRldGFpbHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtbXNpc2RuIGIvdGVzdC9zZXQtbXNpc2RuCitpbmRleCBiNWZlODE5Li4wMWYyODRkIDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtbXNpc2RuCisrKysgYi90ZXN0L3NldC1tc2lzZG4KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtcm9hbWluZy1hbGxvd2VkIGIvdGVzdC9zZXQtcm9hbWluZy1hbGxvd2VkCitpbmRleCA2OThjOGI2Li45ZTNlMDU4IDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtcm9hbWluZy1hbGxvd2VkCisrKysgYi90ZXN0L3NldC1yb2FtaW5nLWFsbG93ZWQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtc3BlYWtlci12b2x1bWUgYi90ZXN0L3NldC1zcGVha2VyLXZvbHVtZQoraW5kZXggNmQ0ZTMwMS4uNzk2MmYzOSAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LXNwZWFrZXItdm9sdW1lCisrKysgYi90ZXN0L3NldC1zcGVha2VyLXZvbHVtZQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC10ZWNoLXByZWZlcmVuY2UgYi90ZXN0L3NldC10ZWNoLXByZWZlcmVuY2UKK2luZGV4IGI1NDlhYmMuLjI2NjZjYmQgMTAwNzU1CistLS0gYS90ZXN0L3NldC10ZWNoLXByZWZlcmVuY2UKKysrKyBiL3Rlc3Qvc2V0LXRlY2gtcHJlZmVyZW5jZQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC10dHkgYi90ZXN0L3NldC10dHkKK2luZGV4IGVlZDFmYmEuLjUzZDZiOTkgMTAwNzU1CistLS0gYS90ZXN0L3NldC10dHkKKysrKyBiL3Rlc3Qvc2V0LXR0eQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC11bXRzLWJhbmQgYi90ZXN0L3NldC11bXRzLWJhbmQKK2luZGV4IDBiYWU1YzQuLmMxZTY0NDggMTAwNzU1CistLS0gYS90ZXN0L3NldC11bXRzLWJhbmQKKysrKyBiL3Rlc3Qvc2V0LXVtdHMtYmFuZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC11c2Utc21zLXJlcG9ydHMgYi90ZXN0L3NldC11c2Utc21zLXJlcG9ydHMKK2luZGV4IDI4OGQ0ZTEuLmE0ZWZlNGYgMTAwNzU1CistLS0gYS90ZXN0L3NldC11c2Utc21zLXJlcG9ydHMKKysrKyBiL3Rlc3Qvc2V0LXVzZS1zbXMtcmVwb3J0cworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3N3YXAtY2FsbHMgYi90ZXN0L3N3YXAtY2FsbHMKK2luZGV4IDAxOGE4ZDMuLmVlYjI1N2IgMTAwNzU1CistLS0gYS90ZXN0L3N3YXAtY2FsbHMKKysrKyBiL3Rlc3Qvc3dhcC1jYWxscworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3QtYWR2aWNlLW9mLWNoYXJnZSBiL3Rlc3QvdGVzdC1hZHZpY2Utb2YtY2hhcmdlCitpbmRleCA2ZTg3ZTYxLi4wZjFmNTdmIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LWFkdmljZS1vZi1jaGFyZ2UKKysrKyBiL3Rlc3QvdGVzdC1hZHZpY2Utb2YtY2hhcmdlCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3QtY2FsbC1iYXJyaW5nIGIvdGVzdC90ZXN0LWNhbGwtYmFycmluZworaW5kZXggZWVkYjY5Zi4uYmU0YWI1NyAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1jYWxsLWJhcnJpbmcKKysrKyBiL3Rlc3QvdGVzdC1jYWxsLWJhcnJpbmcKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1jYWxsLWZvcndhcmRpbmcgYi90ZXN0L3Rlc3QtY2FsbC1mb3J3YXJkaW5nCitpbmRleCA1ZGI4NGQ3Li4wMWE3Mjk0IDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LWNhbGwtZm9yd2FyZGluZworKysrIGIvdGVzdC90ZXN0LWNhbGwtZm9yd2FyZGluZworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3QtY2FsbC1zZXR0aW5ncyBiL3Rlc3QvdGVzdC1jYWxsLXNldHRpbmdzCitpbmRleCA0MzU1OTRjLi41ZDdlZTQ5IDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LWNhbGwtc2V0dGluZ3MKKysrKyBiL3Rlc3QvdGVzdC1jYWxsLXNldHRpbmdzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1jYnMgYi90ZXN0L3Rlc3QtY2JzCitpbmRleCBhNWNlYzA2Li4xM2NkZDgwIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LWNicworKysrIGIvdGVzdC90ZXN0LWNicworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBkYnVzLm1haW5sb29wLmdsaWIKK0BAIC03OCw3ICs3OCw3IEBAIGRlZiBzZXRfdG9waWNzKGNicyk6CisgCWludmFsaWREYXRhID0gRmFsc2U7CisgCWluZGV4ID0gMAorIAorLQl0b3BpY3MgPSBpbnB1dCgnRW50ZXIgdGhlIHRvcGljIElEKHMpIHlvdSB3YW50IHRvIHJlZ2lzdGVyIHRvOiAnKQorKwl0b3BpY3MgPSByYXdfaW5wdXQoJ0VudGVyIHRoZSB0b3BpYyBJRChzKSB5b3Ugd2FudCB0byByZWdpc3RlciB0bzogJykKKyAKKyAJd2hpbGUgaW5kZXggPCBsZW4odG9waWNzKToKKyAJCWlmIHRvcGljc1tpbmRleF0gPT0gJywnIG9yIHRvcGljc1tpbmRleF0gPT0gJy0nOgorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1nbnNzIGIvdGVzdC90ZXN0LWduc3MKK2luZGV4IDZhZTY0ZGIuLmFhMGIxNjAgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtZ25zcworKysrIGIvdGVzdC90ZXN0LWduc3MKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgaW1wb3J0IHN5cworQEAgLTQwLDcgKzQwLDcgQEAgZGVmIHByaW50X21lbnUoKToKKyBkZWYgc3RkaW5faGFuZGxlcihjaGFubmVsLCBjb25kaXRpb24sIGduc3MsIHBhdGgpOgorIAlpbl9rZXkgPSBvcy5yZWFkKGNoYW5uZWwudW5peF9nZXRfZmQoKSwgMTYwKS5yc3RyaXAoKS5kZWNvZGUoJ1VURi04JykKKyAJaWYgaW5fa2V5ID09ICcwJzoKKy0JCXhtbCA9IGlucHV0KCd0eXBlIHRoZSBlbGVtZW50IGFuZCBwcmVzcyBlbnRlcjogJykKKysJCXhtbCA9IHJhd19pbnB1dCgndHlwZSB0aGUgZWxlbWVudCBhbmQgcHJlc3MgZW50ZXI6ICcpCisgCQl0cnk6CisgCQkJZ25zcy5TZW5kUG9zaXRpb25pbmdFbGVtZW50KGRidXMuU3RyaW5nKHhtbCkpCisgCQkJcHJpbnQoIm9rIikKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3QtbWVzc2FnZS13YWl0aW5nIGIvdGVzdC90ZXN0LW1lc3NhZ2Utd2FpdGluZworaW5kZXggNDMyODYyZS4uYjkzZmJmMyAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1tZXNzYWdlLXdhaXRpbmcKKysrKyBiL3Rlc3QvdGVzdC1tZXNzYWdlLXdhaXRpbmcKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1tb2RlbSBiL3Rlc3QvdGVzdC1tb2RlbQoraW5kZXggYWEzOGIxZi4uMjlkYmYxNCAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1tb2RlbQorKysrIGIvdGVzdC90ZXN0LW1vZGVtCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1uZXR3b3JrLXJlZ2lzdHJhdGlvbiBiL3Rlc3QvdGVzdC1uZXR3b3JrLXJlZ2lzdHJhdGlvbgoraW5kZXggNjhiNDM0Ny4uYzVhZDU4NiAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1uZXR3b3JrLXJlZ2lzdHJhdGlvbgorKysrIGIvdGVzdC90ZXN0LW5ldHdvcmstcmVnaXN0cmF0aW9uCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3QtcGhvbmVib29rIGIvdGVzdC90ZXN0LXBob25lYm9vaworaW5kZXggNDI2NDZkMy4uMTE2ZmQ0ZiAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1waG9uZWJvb2sKKysrKyBiL3Rlc3QvdGVzdC1waG9uZWJvb2sKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMsIHN5cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1wdXNoLW5vdGlmaWNhdGlvbiBiL3Rlc3QvdGVzdC1wdXNoLW5vdGlmaWNhdGlvbgoraW5kZXggZDk3MmFkMy4uZWNjNmFmYiAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1wdXNoLW5vdGlmaWNhdGlvbgorKysrIGIvdGVzdC90ZXN0LXB1c2gtbm90aWZpY2F0aW9uCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1zbWFydC1tZXNzYWdpbmcgYi90ZXN0L3Rlc3Qtc21hcnQtbWVzc2FnaW5nCitpbmRleCBmMjJlZmQyLi4xODhhYzFlIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXNtYXJ0LW1lc3NhZ2luZworKysrIGIvdGVzdC90ZXN0LXNtYXJ0LW1lc3NhZ2luZworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3Qtc21zIGIvdGVzdC90ZXN0LXNtcworaW5kZXggMzBhYzY1MS4uNDk5MzVlMSAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1zbXMKKysrKyBiL3Rlc3QvdGVzdC1zbXMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKK0BAIC0xMzIsNyArMTMyLDcgQEAgZGVmIHN0ZGluX2hhbmRsZXIoY2hhbm5lbCwgY29uZGl0aW9uLCBzbXMsIHZhbHVlLCBudW1iZXIpOgorIAkJbG9jayA9ICJvbiIKKyAJCWlmIGluX2tleSA9PSAnMCc6CisgCQkJcHJpbnRfc2VuZF9zbXNfbWVudSgpCistCQkJc21zX3R5cGUgPSBpbnB1dCgnU2VsZWN0IFNNUyB0eXBlOiAnKQorKwkJCXNtc190eXBlID0gcmF3X2lucHV0KCdTZWxlY3QgU01TIHR5cGU6ICcpCisgCisgCQkJaWYgc21zX3R5cGUgPT0gJzEnOgorIAkJCQltZXNzYWdlX3NlbmQoc21zLCBudW1iZXIsIHZhbHVlKQorQEAgLTE1MCw0OSArMTUwLDQ5IEBAIGRlZiBzdGRpbl9oYW5kbGVyKGNoYW5uZWwsIGNvbmRpdGlvbiwgc21zLCB2YWx1ZSwgbnVtYmVyKToKKyAKKyAJCWVsaWYgaW5fa2V5ID09ICcxJzoKKyAJCQltZXNzYWdlX2RlbGl2ZXJ5X3JlcG9ydChzbXMsIDEpCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCAoIigxKSIgKyB2YWx1ZSArCisgCQkJCQkJIjogVXNlRGVsaXZlcnlSZXBvcnRzW1RSVUVdIikpCisgCisgCQllbGlmIGluX2tleSA9PSAnMic6CisgCQkJbWVzc2FnZV9kZWxpdmVyeV9yZXBvcnQoc21zLCAwKQorLQkJCXNlbmRfbXNnID0gaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorKwkJCXNlbmRfbXNnID0gcmF3X2lucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKyAJCQlpZiBzZW5kX21zZyA9PSAneSc6CisgCQkJCW1lc3NhZ2Vfc2VuZChzbXMsIG51bWJlciwgKCIoMikgIiArIHZhbHVlICsKKyAJCQkJCQkiOiBVc2VEZWxpdmVyeVJlcG9ydHNbRkFMU0VdIikpCisgCisgCQllbGlmIGluX2tleSA9PSAnMyc6CisgCQkJbWVzc2FnZV9zZXJ2aWNlX2NlbnRlcl9hZGRyZXNzKHNtcywgU0NBKQorLQkJCXNlbmRfbXNnID0gaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorKwkJCXNlbmRfbXNnID0gcmF3X2lucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKyAJCQlpZiBzZW5kX21zZyA9PSAneSc6CisgCQkJCW1lc3NhZ2Vfc2VuZChzbXMsIG51bWJlciwgKCIoMykgIiArIHZhbHVlICsKKyAJCQkJCQkiOiBTZXJ2aWNlQ2VudGVyQWRkcmVzcyIpKQorIAorIAkJZWxpZiBpbl9rZXkgPT0gJzQnOgorIAkJCW1lc3NhZ2VfYmVhcmVyKHNtcywgInBzLW9ubHkiKQorLQkJCXNlbmRfbXNnID0gaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorKwkJCXNlbmRfbXNnID0gcmF3X2lucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKyAJCQlpZiBzZW5kX21zZyA9PSAneSc6CisgCQkJCW1lc3NhZ2Vfc2VuZChzbXMsIG51bWJlciwgKCIoNCkgIiArIHZhbHVlICsKKyAJCQkJCQkiOiBCZWFyZXJbcHMtb25seV0iKSkKKyAKKyAJCWVsaWYgaW5fa2V5ID09ICc1JzoKKyAJCQltZXNzYWdlX2JlYXJlcihzbXMsICJjcy1vbmx5IikKKy0JCQlzZW5kX21zZyA9IGlucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKysJCQlzZW5kX21zZyA9IHJhd19pbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisgCQkJaWYgc2VuZF9tc2cgPT0gJ3knOgorIAkJCQltZXNzYWdlX3NlbmQoc21zLCBudW1iZXIsICgiKDUpICIgKyB2YWx1ZSArCisgCQkJCQkJIjogQmVhcmVyW2NzLW9ubHldIikpCisgCisgCQllbGlmIGluX2tleSA9PSAnNic6CisgCQkJbWVzc2FnZV9iZWFyZXIoc21zLCAicHMtcHJlZmVycmVkIikKKy0JCQlzZW5kX21zZyA9IGlucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKysJCQlzZW5kX21zZyA9IHJhd19pbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisgCQkJaWYgc2VuZF9tc2cgPT0gJ3knOgorIAkJCQltZXNzYWdlX3NlbmQoc21zLCBudW1iZXIsICgiKDYpICIgKyB2YWx1ZSArCisgCQkJCQkJIjogQmVhcmVyW3BzLXByZWZlcnJlZF0iKSkKKyAKKyAJCWVsaWYgaW5fa2V5ID09ICc3JzoKKyAJCQltZXNzYWdlX2JlYXJlcihzbXMsICJjcy1wcmVmZXJyZWQiKQorLQkJCXNlbmRfbXNnID0gaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorKwkJCXNlbmRfbXNnID0gcmF3X2lucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKyAJCQlpZiBzZW5kX21zZyA9PSAneSc6CisgCQkJCW1lc3NhZ2Vfc2VuZChzbXMsbnVtYmVyLCAoIig3KSAiICsgdmFsdWUgKworIAkJCQkJCSI6IEJlYXJlcltjcy1wcmVmZXJyZWRdIikpCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXNzIGIvdGVzdC90ZXN0LXNzCitpbmRleCA0Y2Q4NzMyLi4yYzgwODA2IDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXNzCisrKysgYi90ZXN0L3Rlc3Qtc3MKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2IgYi90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jYgoraW5kZXggZGRhZTZkMy4uODZiYWM5YiAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNiCisrKysgYi90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jYgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jZiBiL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNmCitpbmRleCAwOTVlYjVkLi5kMzBiZjRmIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2YKKysrKyBiL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNmCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNzIGIvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY3MKK2luZGV4IDgxODA0NzQuLmUwZWQxZDEgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jcworKysrIGIvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY3MKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXN0ay1tZW51IGIvdGVzdC90ZXN0LXN0ay1tZW51CitpbmRleCAwY2Y4ZmEyLi5hYzBhNWJkIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXN0ay1tZW51CisrKysgYi90ZXN0L3Rlc3Qtc3RrLW1lbnUKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitAQCAtNTgsNyArNTgsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJCQlpbmRleCArPSAxCisgCisgCQlwcmludCgiXG5EZWZhdWx0OiAlZCIgJSAoZGVmYXVsdCkpCistCQlzZWxlY3QgPSBpbnB1dCgiRW50ZXIgU2VsZWN0aW9uICh0LCBiKToiKQorKwkJc2VsZWN0ID0gcmF3X2lucHV0KCJFbnRlciBTZWxlY3Rpb24gKHQsIGIpOiIpCisgCisgCQlpZiBzZWxlY3QgPT0gJ2InOgorIAkJCXJhaXNlIEdvQmFjaygiVXNlciB3aXNoZXMgdG8gZ28gYmFjayIpCitAQCAtNzUsNyArNzUsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJCXByaW50KCJEaXNwbGF5VGV4dCAoJXMpIiAlICh0aXRsZSkpCisgCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKKyAJCXByaW50KCJVcmdlbnQ6ICglZCkiICUgKHVyZ2VudCkpCistCQlrZXkgPSBpbnB1dCgiUHJlc3MgcmV0dXJuIHRvIGNsZWFyICgndCcgdGVybWluYXRlcywgIgorKwkJa2V5ID0gcmF3X2lucHV0KCJQcmVzcyByZXR1cm4gdG8gY2xlYXIgKCd0JyB0ZXJtaW5hdGVzLCAiCisgCQkJCQkJIidiJyBnb2VzIGJhY2ssICduJyBidXN5LCAiCisgCQkJCQkJIid3JyByZXR1cm4gYW5kIHdhaXQpOiIpCisgCitAQCAtMTA4LDcgKzEwOCw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAkJcHJpbnQoIkhpZGUgdHlwaW5nOiAoJXMpIiAlIChoaWRlX3R5cGluZykpCisgCQlwcmludCgiRW50ZXIgY2hhcmFjdGVycywgbWluOiAlZCwgbWF4OiAlZDoiICUgKG1pbl9jaGFycywKKyAJCQkJCQkJCW1heF9jaGFycykpCistCQl1c2VyaW4gPSBpbnB1dCgiIikKKysJCXVzZXJpbiA9IHJhd19pbnB1dCgiIikKKyAKKyAJCXJldHVybiB1c2VyaW4KKyAKK0BAIC0xMjIsNyArMTIyLDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCQlwcmludCgiSGlkZSB0eXBpbmc6ICglcykiICUgKGhpZGVfdHlwaW5nKSkKKyAJCXByaW50KCJFbnRlciBkaWdpdHMsIG1pbjogJWQsIG1heDogJWQ6IiAlIChtaW5fY2hhcnMsCisgCQkJCQkJCQltYXhfY2hhcnMpKQorLQkJdXNlcmluID0gaW5wdXQoIid0JyB0ZXJtaW5hdGVzLCAnYicgZ29lcyBiYWNrOiIpCisrCQl1c2VyaW4gPSByYXdfaW5wdXQoIid0JyB0ZXJtaW5hdGVzLCAnYicgZ29lcyBiYWNrOiIpCisgCisgCQlpZiB1c2VyaW4gPT0gJ2InOgorIAkJCXJhaXNlIEdvQmFjaygiVXNlciB3aXNoZXMgdG8gZ28gYmFjayIpCitAQCAtMTM2LDcgKzEzNiw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAlkZWYgUmVxdWVzdEtleShzZWxmLCB0aXRsZSwgaWNvbik6CisgCQlwcmludCgiVGl0bGU6ICglcykiICUgKHRpdGxlKSkKKyAJCXByaW50KCJJY29uOiAoJWQpIiAlIChpbnQoaWNvbikpKQorLQkJa2V5ID0gaW5wdXQoIkVudGVyIEtleSAodCwgYik6IikKKysJCWtleSA9IHJhd19pbnB1dCgiRW50ZXIgS2V5ICh0LCBiKToiKQorIAorIAkJaWYga2V5ID09ICdiJzoKKyAJCQlyYWlzZSBHb0JhY2soIlVzZXIgd2lzaGVzIHRvIGdvIGJhY2siKQorQEAgLTE1MCw3ICsxNTAsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJZGVmIFJlcXVlc3REaWdpdChzZWxmLCB0aXRsZSwgaWNvbik6CisgCQlwcmludCgiVGl0bGU6ICglcykiICUgKHRpdGxlKSkKKyAJCXByaW50KCJJY29uOiAoJWQpIiAlIChpbnQoaWNvbikpKQorLQkJa2V5ID0gaW5wdXQoIkVudGVyIERpZ2l0ICh0LCBiKToiKQorKwkJa2V5ID0gcmF3X2lucHV0KCJFbnRlciBEaWdpdCAodCwgYik6IikKKyAKKyAJCWlmIGtleSA9PSAnYic6CisgCQkJcmFpc2UgR29CYWNrKCJVc2VyIHdpc2hlcyB0byBnbyBiYWNrIikKK0BAIC0xNjQsNyArMTY0LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBSZXF1ZXN0UXVpY2tEaWdpdChzZWxmLCB0aXRsZSwgaWNvbik6CisgCQlwcmludCgiVGl0bGU6ICglcykiICUgKHRpdGxlKSkKKyAJCXByaW50KCJJY29uOiAoJWQpIiAlIChpbnQoaWNvbikpKQorLQkJa2V5ID0gaW5wdXQoIlF1aWNrIGRpZ2l0ICgwLTksICosICMsIHQsIGIpOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIlF1aWNrIGRpZ2l0ICgwLTksICosICMsIHQsIGIpOiIpCisgCisgCQlpZiBrZXkgPT0gJ2InOgorIAkJCXJhaXNlIEdvQmFjaygiVXNlciB3aXNoZXMgdG8gZ28gYmFjayIpCitAQCAtMTc4LDcgKzE3OCw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAlkZWYgUmVxdWVzdENvbmZpcm1hdGlvbihzZWxmLCB0aXRsZSwgaWNvbik6CisgCQlwcmludCgiVGl0bGU6ICglcykiICUgKHRpdGxlKSkKKyAJCXByaW50KCJJY29uOiAoJWQpIiAlIChpbnQoaWNvbikpKQorLQkJa2V5ID0gaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAodCwgYiwgeSwgbik6IikKKysJCWtleSA9IHJhd19pbnB1dCgiRW50ZXIgQ29uZmlybWF0aW9uICh0LCBiLCB5LCBuKToiKQorIAorIAkJaWYga2V5ID09ICdiJzoKKyAJCQlyYWlzZSBHb0JhY2soIlVzZXIgd2lzaGVzIHRvIGdvIGJhY2siKQorQEAgLTE5NCw3ICsxOTQsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJZGVmIENvbmZpcm1DYWxsU2V0dXAoc2VsZiwgaW5mbywgaWNvbik6CisgCQlwcmludCgiSW5mb3JtYXRpb246ICglcykiICUgKGluZm8pKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiRW50ZXIgQ29uZmlybWF0aW9uICh0LCB5LCBuKToiKQorKwkJa2V5ID0gcmF3X2lucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHQsIHksIG4pOiIpCisgCisgCQlpZiBrZXkgPT0gJ3QnOgorIAkJCXJhaXNlIEVuZFNlc3Npb24oIlVzZXIgd2lzaGVzIHRvIHRlcm1pbmF0ZSBzZXNzaW9uIikKK0BAIC0yMDksNyArMjA5LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCQlwcmludCgiSW5mb3JtYXRpb246ICglcykiICUgKGluZm8pKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCisgCQlwcmludCgiVVJMICglcykiICUgKHVybCkpCistCQlrZXkgPSBpbnB1dCgiRW50ZXIgQ29uZmlybWF0aW9uICh5LCBuKToiKQorKwkJa2V5ID0gcmF3X2lucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHksIG4pOiIpCisgCisgCQlpZiBrZXkgPT0gJ3knOgorIAkJCXJldHVybiBUcnVlCitAQCAtMjMyLDcgKzIzMiw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAkJc2lnbmFsLmFsYXJtKDUpCisgCisgCQl0cnk6CistCQkJa2V5ID0gaW5wdXQoIlByZXNzIHJldHVybiB0byBlbmQgYmVmb3JlIGVuZCBvZiIKKysJCQlrZXkgPSByYXdfaW5wdXQoIlByZXNzIHJldHVybiB0byBlbmQgYmVmb3JlIGVuZCBvZiIKKyAJCQkJCQkJICIgc2luZ2xlIHRvbmUgKHQpOiIpCisgCQkJc2lnbmFsLmFsYXJtKDApCisgCitAQCAtMjUwLDcgKzI1MCw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAkJcHJpbnQoIkxvb3BUb25lOiAlcyIgJSAodG9uZSkpCisgCQlwcmludCgiVGV4dDogJXMiICUgKHRleHQpKQorIAkJcHJpbnQoIkljb246ICVkIiAlIChpbnQoaWNvbikpKQorLQkJa2V5ID0gaW5wdXQoIlByZXNzIHJldHVybiB0byBlbmQgYmVmb3JlIHRpbWVvdXQgIgorKwkJa2V5ID0gcmF3X2lucHV0KCJQcmVzcyByZXR1cm4gdG8gZW5kIGJlZm9yZSB0aW1lb3V0ICIKKyAJCQkJIigndCcgdGVybWluYXRlcywgJ3cnIHJldHVybiBhbmQgd2FpdCk6IikKKyAKKyAJCWlmIGtleSA9PSAndyc6CitAQCAtMjc5LDcgKzI3OSw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAlkZWYgRGlzcGxheUFjdGlvbihzZWxmLCB0ZXh0LCBpY29uKToKKyAJCXByaW50KCJUZXh0OiAoJXMpIiAlICh0ZXh0KSkKKyAJCXByaW50KCJJY29uOiAoJWQpIiAlIChpbnQoaWNvbikpKQorLQkJa2V5ID0gaW5wdXQoIlByZXNzICd0JyB0byB0ZXJtaW5hdGUgdGhlIHNlc3Npb24gIikKKysJCWtleSA9IHJhd19pbnB1dCgiUHJlc3MgJ3QnIHRvIHRlcm1pbmF0ZSB0aGUgc2Vzc2lvbiAiKQorIAorIAkJaWYga2V5ID09ICd0JzoKKyAJCQlyYWlzZSBFbmRTZXNzaW9uKCJVc2VyIHdpc2hlcyB0byB0ZXJtaW5hdGUgc2Vzc2lvbiIpCitAQCAtMjg5LDcgKzI4OSw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAlkZWYgQ29uZmlybU9wZW5DaGFubmVsKHNlbGYsIGluZm8sIGljb24pOgorIAkJcHJpbnQoIk9wZW4gY2hhbm5lbCBjb25maXJtYXRpb246ICglcykiICUgKGluZm8pKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiRW50ZXIgQ29uZmlybWF0aW9uICh0LCB5LCBuKToiKQorKwkJa2V5ID0gcmF3X2lucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHQsIHksIG4pOiIpCisgCisgCQlpZiBrZXkgPT0gJ3QnOgorIAkJCXJhaXNlIEVuZFNlc3Npb24oIlVzZXIgd2lzaGVzIHRvIHRlcm1pbmF0ZSBzZXNzaW9uIikKK0BAIC0yOTksNyArMjk5LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCQkJcmV0dXJuIEZhbHNlCisgCisgX2RidXMycHkgPSB7CistCWRidXMuU3RyaW5nIDogc3RyLAorKwlkYnVzLlN0cmluZyA6IHVuaWNvZGUsCisgCWRidXMuVUludDMyIDogaW50LAorIAlkYnVzLkludDMyIDogaW50LAorIAlkYnVzLkludDE2IDogaW50LAorQEAgLTM5Niw3ICszOTYsNyBAQCBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorIAkJZXhjZXB0OgorIAkJCXBhc3MKKyAKKy0JCXNlbGVjdCA9IGludChpbnB1dCgiRW50ZXIgU2VsZWN0aW9uOiAiKSkKKysJCXNlbGVjdCA9IGludChyYXdfaW5wdXQoIkVudGVyIFNlbGVjdGlvbjogIikpCisgCQlzdGsuU2VsZWN0SXRlbShzZWxlY3QsIHBhdGgpCisgCWVsaWYgbW9kZSA9PSAnYWdlbnQnOgorIAkJcGF0aCA9ICIvdGVzdC9hZ2VudCIKK2RpZmYgLS1naXQgYS90ZXN0L3VubG9jay1waW4gYi90ZXN0L3VubG9jay1waW4KK2luZGV4IDYxZjQ3NjUuLjEwYjY2MjYgMTAwNzU1CistLS0gYS90ZXN0L3VubG9jay1waW4KKysrKyBiL3Rlc3QvdW5sb2NrLXBpbgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vL29mb25vIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vL29mb25vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOTk3MDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vb2Zvbm8KQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisKK0RBRU1PTj0vdXNyL3NiaW4vb2Zvbm9kCitQSURGSUxFPS92YXIvcnVuL29mb25vZC5waWQKK0RFU0M9IlRlbGVwaG9ueSBkYWVtb24iCisKK2lmIFsgLWYgL2V0Yy9kZWZhdWx0L29mb25vIF0gOyB0aGVuCisJLiAvZXRjL2RlZmF1bHQvb2Zvbm8KK2ZpCisKK3NldCAtZQorCitkb19zdGFydCgpIHsKKwkkREFFTU9OCit9CisKK2RvX3N0b3AoKSB7CisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tbmFtZSBvZm9ub2QgLS1xdWlldAorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJZWNobyAiU3RhcnRpbmcgJERFU0MiCisJZG9fc3RhcnQKKwk7OworICBzdG9wKQorCWVjaG8gIlN0b3BwaW5nICRERVNDIgorCWRvX3N0b3AKKwk7OworICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKwllY2hvICJSZXN0YXJ0aW5nICRERVNDIgorCWRvX3N0b3AKKwlzbGVlcCAxCisJZG9fc3RhcnQKKwk7OworICAqKQorCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iID4mMgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vXzEuMTYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm9fMS4xNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmYxM2U1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vXzEuMTYuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBvZm9uby5pbmMKKworU1JDX1VSSSAgPSAiXAorICAke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L25ldHdvcmsvJHtCUE59LyR7QlB9LnRhci54eiBcCisgIGZpbGU6Ly9vZm9ubyBcCisgIGZpbGU6Ly9SZXZlcnQtdGVzdC1Db252ZXJ0LXRvLVB5dGhvbi0zLnBhdGNoIFwKKyAgZmlsZTovLzAwMDEtYmFja3RyYWNlLURpc2FibGUtZm9yLW5vbi1nbGliYy1DLWxpYnJhcmllcy5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiYzMxYjViNTVhMWQ2ODM1NGJmZjc3MWQzZWRmMDI4MjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDAzYjk4ZGFkZWNlOGJjODA0YzBiZDE2Yjk2ZDNkYjVhM2JiMGY4NGFmNjRiM2Q2NzkyNGRhMmQxYTc1NGIwNyIKKworQ0ZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLURfR05VX1NPVVJDRSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm9fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYWZiNzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm9fZ2l0LmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgb2Zvbm8uaW5jCisKK1MJID0gIiR7V09SS0RJUn0vZ2l0IgorU1JDUkVWID0gIjE0NTQ0ZDU5OTY4MzZmNjI4NjEzYzJjZTU0NDM4MGVlNmZjOGY1MTQiCitQVgkgPSAiMC4xMi1naXQke1NSQ1BWfSIKK1BSID0gInI1IgorCitTUkNfVVJJICA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL25ldHdvcmsvb2Zvbm8vb2Zvbm8uZ2l0IFwKKwkgICAgZmlsZTovL29mb25vIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICR7U30vYm9vdHN0cmFwCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvYWRkLXRlc3Qtc3VwcG9ydC1mb3ItYnVzeWJveC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvYWRkLXRlc3Qtc3VwcG9ydC1mb3ItYnVzeWJveC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGMyNWM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9hZGQtdGVzdC1zdXBwb3J0LWZvci1idXN5Ym94LnBhdGNoCkBAIC0wLDAgKzEsNjkgQEAKK0FkanVzdCB0ZXN0IGNhc2VzIHRvIHdvcmsgd2l0aCBidXN5Ym94LgorCistIFJlcGxhY2UgZGQgcGFyYW1ldGVyICJvYnMiIHdpdGggImJzIi4KKy0gUmVwbGFjZSAiaGVhZCAtPG51bT4iIHdpdGggImhlYWQgLW4gPG51bT4iLgorCitTaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBvcGVuc3NoLTYuOHAxL3JlZ3Jlc3MvY2lwaGVyLXNwZWVkLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzaC02LjhwMS5vcmlnL3JlZ3Jlc3MvY2lwaGVyLXNwZWVkLnNoCisrKysgb3BlbnNzaC02LjhwMS9yZWdyZXNzL2NpcGhlci1zcGVlZC5zaAorQEAgLTE3LDcgKzE3LDcgQEAgZm9yIGMgaW4gYCR7U1NIfSAtUSBjaXBoZXJgOyBkbyBuPTA7IGZvcgorIAkJcHJpbnRmICIlLTYwcyIgIiRjLyRtOiIKKyAJCSggJHtTU0h9IC1vICdjb21wcmVzc2lvbiBubycgXAorIAkJCS1GICRPQkovc3NoX3Byb3h5IC0yIC1tICRtIC1jICRjIHNvbWVob3N0IFwKKy0JCQlleGVjIHNoIC1jIFwnImRkIG9mPS9kZXYvbnVsbCBvYnM9MzJrIlwnIFwKKysJCQlleGVjIHNoIC1jIFwnImRkIG9mPS9kZXYvbnVsbCBicz0zMmsiXCcgXAorIAkJPCAke0RBVEF9ICkgMj4mMSB8IGdldGJ5dGVzCisgCisgCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KK0BAIC00Miw3ICs0Miw3IEBAIGZvciBjIGluICRjaXBoZXJzOyBkbworIAkJcHJpbnRmICIlLTYwcyIgIiRjOiIKKyAJCSggJHtTU0h9IC1vICdjb21wcmVzc2lvbiBubycgXAorIAkJCS1GICRPQkovc3NoX3Byb3h5IC0xIC1jICRjIHNvbWVob3N0IFwKKy0JCQlleGVjIHNoIC1jIFwnImRkIG9mPS9kZXYvbnVsbCBvYnM9MzJrIlwnIFwKKysJCQlleGVjIHNoIC1jIFwnImRkIG9mPS9kZXYvbnVsbCBicz0zMmsiXCcgXAorIAkJPCAke0RBVEF9ICkgMj4mMSB8IGdldGJ5dGVzCisgCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAJCQlmYWlsICJzc2ggLTEgZmFpbGVkIHdpdGggY2lwaGVyICRjIgorSW5kZXg6IG9wZW5zc2gtNi44cDEvcmVncmVzcy90cmFuc2Zlci5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2gtNi44cDEub3JpZy9yZWdyZXNzL3RyYW5zZmVyLnNoCisrKysgb3BlbnNzaC02LjhwMS9yZWdyZXNzL3RyYW5zZmVyLnNoCitAQCAtMTUsNyArMTUsNyBAQCBmb3IgcCBpbiAke1NTSF9QUk9UT0NPTFN9OyBkbworIAlmb3IgcyBpbiAxMCAxMDAgMWsgMzJrIDY0ayAxMjhrIDI1Nms7IGRvCisgCQl0cmFjZSAicHJvdG8gJHAgZGQtc2l6ZSAke3N9IgorIAkJcm0gLWYgJHtDT1BZfQorLQkJZGQgaWY9JERBVEEgb2JzPSR7c30gMj4gL2Rldi9udWxsIHwgXAorKwkJZGQgaWY9JERBVEEgYnM9JHtzfSAyPiAvZGV2L251bGwgfCBcCisgCQkJJHtTU0h9IC1xIC0kcCAtRiAkT0JKL3NzaF9wcm94eSBzb21laG9zdCAiY2F0ID4gJHtDT1BZfSIKKyAJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorIAkJCWZhaWwgInNzaCBjYXQgJERBVEEgZmFpbGVkIgorSW5kZXg6IG9wZW5zc2gtNi44cDEvcmVncmVzcy95ZXMtaGVhZC5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2gtNi44cDEub3JpZy9yZWdyZXNzL3llcy1oZWFkLnNoCisrKysgb3BlbnNzaC02LjhwMS9yZWdyZXNzL3llcy1oZWFkLnNoCitAQCAtNCw3ICs0LDcgQEAKKyB0aWQ9InllcyBwaXBlIGhlYWQiCisgCisgZm9yIHAgaW4gJHtTU0hfUFJPVE9DT0xTfTsgZG8KKy0JbGluZXM9YCR7U1NIfSAtJHAgLUYgJE9CSi9zc2hfcHJveHkgdGhpc2hvc3QgJ3NoIC1jICJ3aGlsZSB0cnVlO2RvIGVjaG8geWVzO2RvbmUgfCBfUE9TSVgyX1ZFUlNJT049MTk5MjA5IGhlYWQgLTIwMDAiJyB8IChzbGVlcCAzIDsgd2MgLWwpYAorKwlsaW5lcz1gJHtTU0h9IC0kcCAtRiAkT0JKL3NzaF9wcm94eSB0aGlzaG9zdCAnc2ggLWMgIndoaWxlIHRydWU7ZG8gZWNobyB5ZXM7ZG9uZSB8IF9QT1NJWDJfVkVSU0lPTj0xOTkyMDkgaGVhZCAtbiAyMDAwIicgfCAoc2xlZXAgMyA7IHdjIC1sKWAKKyAJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisgCQlmYWlsICJ5ZXN8aGVhZCB0ZXN0IGZhaWxlZCIKKyAJCWxpbmVzID0gMDsKK0luZGV4OiBvcGVuc3NoLTYuOHAxL3JlZ3Jlc3Mva2V5LW9wdGlvbnMuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NoLTYuOHAxLm9yaWcvcmVncmVzcy9rZXktb3B0aW9ucy5zaAorKysrIG9wZW5zc2gtNi44cDEvcmVncmVzcy9rZXktb3B0aW9ucy5zaAorQEAgLTU0LDcgKzU0LDcgQEAgZm9yIHAgaW4gJHtTU0hfUFJPVE9DT0xTfTsgZG8KKyAJZmkKKyAKKyAJc2VkICdzLy4qL2Zyb209IiciJGYiJyIgJi8nICRvcmlna2V5cyA+JGF1dGhrZXlzCistCWZyb209YGhlYWQgLTEgJGF1dGhrZXlzIHwgY3V0IC1mMSAtZCAnICdgCisrCWZyb209YGhlYWQgLW4gMSAkYXV0aGtleXMgfCBjdXQgLWYxIC1kICcgJ2AKKyAJdmVyYm9zZSAia2V5IG9wdGlvbiBwcm90byAkcCAkZnJvbSIKKyAJcj1gJHtTU0h9IC0kcCAtcSAtRiAkT0JKL3NzaF9wcm94eSBzb21laG9zdCAnZWNobyB0cnVlJ2AKKyAJaWYgWyAiJHIiID0gInRydWUiIF07IHRoZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGQ0YTM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9pbml0CkBAIC0wLDAgKzEsMTE1IEBACisjISAvYmluL3NoCitzZXQgLWUKKworUElERklMRT0vdmFyL3J1bi9zc2hkLnBpZAorCisjIHNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5CisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCisjIC9ldGMvaW5pdC5kL3NzaDogc3RhcnQgYW5kIHN0b3AgdGhlIE9wZW5CU0QgInNlY3VyZSBzaGVsbCIgZGFlbW9uCisKK3Rlc3QgLXggL3Vzci9zYmluL3NzaGQgfHwgZXhpdCAwCisoIC91c3Ivc2Jpbi9zc2hkIC1cPyAyPiYxIHwgZ3JlcCAtcSBPcGVuU1NIICkgMj4vZGV2L251bGwgfHwgZXhpdCAwCisKKyMgL2V0Yy9kZWZhdWx0L3NzaCBtYXkgc2V0IFNZU0NPTkZESVIgYW5kIFNTSERfT1BUUworaWYgdGVzdCAtZiAvZXRjL2RlZmF1bHQvc3NoOyB0aGVuCisgICAgLiAvZXRjL2RlZmF1bHQvc3NoCitmaQorCitbIC16ICIkU1lTQ09ORkRJUiIgXSAmJiBTWVNDT05GRElSPS9ldGMvc3NoCitta2RpciAtcCAkU1lTQ09ORkRJUgorCitIT1NUX0tFWV9SU0E9JFNZU0NPTkZESVIvc3NoX2hvc3RfcnNhX2tleQorSE9TVF9LRVlfRFNBPSRTWVNDT05GRElSL3NzaF9ob3N0X2RzYV9rZXkKK0hPU1RfS0VZX0VDRFNBPSRTWVNDT05GRElSL3NzaF9ob3N0X2VjZHNhX2tleQorSE9TVF9LRVlfRUQyNTUxOT0kU1lTQ09ORkRJUi9zc2hfaG9zdF9lZDI1NTE5X2tleQorCitjaGVja19mb3Jfbm9fc3RhcnQoKSB7CisgICAgIyBmb3JnZXQgaXQgaWYgd2UncmUgdHJ5aW5nIHRvIHN0YXJ0LCBhbmQgL2V0Yy9zc2gvc3NoZF9ub3RfdG9fYmVfcnVuIGV4aXN0cworICAgIGlmIFsgLWUgJFNZU0NPTkZESVIvc3NoZF9ub3RfdG9fYmVfcnVuIF07IHRoZW4KKwllY2hvICJPcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXIgbm90IGluIHVzZSAoJFNZU0NPTkZESVIvc3NoZF9ub3RfdG9fYmVfcnVuKSIKKwlleGl0IDAKKyAgICBmaQorfQorCitjaGVja19wcml2c2VwX2RpcigpIHsKKyAgICAjIENyZWF0ZSB0aGUgUHJpdlNlcCBlbXB0eSBkaXIgaWYgbmVjZXNzYXJ5CisgICAgaWYgWyAhIC1kIC92YXIvcnVuL3NzaGQgXTsgdGhlbgorCW1rZGlyIC92YXIvcnVuL3NzaGQKKwljaG1vZCAwNzU1IC92YXIvcnVuL3NzaGQKKyAgICBmaQorfQorCitjaGVja19jb25maWcoKSB7CisJL3Vzci9zYmluL3NzaGQgLXQgfHwgZXhpdCAxCit9CisKK2NoZWNrX2tleXMoKSB7CisJIyBjcmVhdGUga2V5cyBpZiBuZWNlc3NhcnkKKwlpZiBbICEgLWYgJEhPU1RfS0VZX1JTQSBdOyB0aGVuCisJCWVjaG8gIiAgZ2VuZXJhdGluZyBzc2ggUlNBIGtleS4uLiIKKwkJc3NoLWtleWdlbiAtcSAtZiAkSE9TVF9LRVlfUlNBIC1OICcnIC10IHJzYQorCWZpCisJaWYgWyAhIC1mICRIT1NUX0tFWV9FQ0RTQSBdOyB0aGVuCisJCWVjaG8gIiAgZ2VuZXJhdGluZyBzc2ggRUNEU0Ega2V5Li4uIgorCQlzc2gta2V5Z2VuIC1xIC1mICRIT1NUX0tFWV9FQ0RTQSAtTiAnJyAtdCBlY2RzYQorCWZpCisJaWYgWyAhIC1mICRIT1NUX0tFWV9EU0EgXTsgdGhlbgorCQllY2hvICIgIGdlbmVyYXRpbmcgc3NoIERTQSBrZXkuLi4iCisJCXNzaC1rZXlnZW4gLXEgLWYgJEhPU1RfS0VZX0RTQSAtTiAnJyAtdCBkc2EKKwlmaQorCWlmIFsgISAtZiAkSE9TVF9LRVlfRUQyNTUxOSBdOyB0aGVuCisJCWVjaG8gIiAgZ2VuZXJhdGluZyBzc2ggRUQyNTUxOSBrZXkuLi4iCisJCXNzaC1rZXlnZW4gLXEgLWYgJEhPU1RfS0VZX0VEMjU1MTkgLU4gJycgLXQgZWQyNTUxOQorCWZpCit9CisKK2V4cG9ydCBQQVRIPSIke1BBVEg6KyRQQVRIOn0vdXNyL3NiaW46L3NiaW4iCisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwljaGVja19mb3Jfbm9fc3RhcnQKKwllY2hvICJTdGFydGluZyBPcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXI6IHNzaGQiCisJY2hlY2tfa2V5cworCWNoZWNrX3ByaXZzZXBfZGlyCisJc3RhcnQtc3RvcC1kYWVtb24gLVMgLXAgJFBJREZJTEUgLXggL3Vzci9zYmluL3NzaGQgLS0gJFNTSERfT1BUUworICAgICAgICBlY2hvICJkb25lLiIKKwk7OworICBzdG9wKQorICAgICAgICBlY2hvIC1uICJTdG9wcGluZyBPcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXI6IHNzaGQiCisJc3RhcnQtc3RvcC1kYWVtb24gLUsgLXAgJFBJREZJTEUgLXggL3Vzci9zYmluL3NzaGQKKyAgICAgICAgZWNobyAiLiIKKwk7OworCisgIHJlbG9hZHxmb3JjZS1yZWxvYWQpCisJY2hlY2tfZm9yX25vX3N0YXJ0CisJY2hlY2tfa2V5cworCWNoZWNrX2NvbmZpZworICAgICAgICBlY2hvIC1uICJSZWxvYWRpbmcgT3BlbkJTRCBTZWN1cmUgU2hlbGwgc2VydmVyJ3MgY29uZmlndXJhdGlvbiIKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAtcCAkUElERklMRSAtcyAxIC14IC91c3Ivc2Jpbi9zc2hkCisJZWNobyAiLiIKKwk7OworCisgIHJlc3RhcnQpCisgIAljaGVja19rZXlzCisJY2hlY2tfY29uZmlnCisgICAgICAgIGVjaG8gLW4gIlJlc3RhcnRpbmcgT3BlbkJTRCBTZWN1cmUgU2hlbGwgc2VydmVyOiBzc2hkIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC1wICRQSURGSUxFIC0tb2tub2RvIC14IC91c3Ivc2Jpbi9zc2hkCisJY2hlY2tfZm9yX25vX3N0YXJ0CisJY2hlY2tfcHJpdnNlcF9kaXIKKwlzbGVlcCAyCisJc3RhcnQtc3RvcC1kYWVtb24gLVMgLXAgJFBJREZJTEUgLXggL3Vzci9zYmluL3NzaGQgLS0gJFNTSERfT1BUUworCWVjaG8gIi4iCisJOzsKKworICBzdGF0dXMpCisJc3RhdHVzIC91c3Ivc2Jpbi9zc2hkCisJZXhpdCAkPworICA7OworCisgICopCisJZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL3NzaCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVsb2FkfGZvcmNlLXJlbG9hZHxyZXN0YXJ0fSIKKwlleGl0IDEKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2NGMwYzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3J1bi1wdGVzdApAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9zaAorCitleHBvcnQgVEVTVF9TSEVMTD1zaAorCitjZCByZWdyZXNzCittYWtlIC1rIC5PQkpESVI9YHB3ZGAgLkNVUkRJUj1gcHdkYCBTVURPPSJzdWRvIiB0ZXN0cyBcCisgICAgICAgIHwgc2VkIC1lICdzL15za2lwcGVkL1NLSVA6IC9nJyAtZSAncy9eb2sgL1BBU1M6IC9nJyAtZSAncy9eZmFpbGVkL0ZBSUw6IC9nJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hfY29uZmlnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hfY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllOTE5MTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaF9jb25maWcKQEAgLTAsMCArMSw0OCBAQAorIwkkT3BlbkJTRDogc3NoX2NvbmZpZyx2IDEuMjggMjAxMy8wOS8xNiAxMTozNTo0MyBzdGhlbiBFeHAgJAorCisjIFRoaXMgaXMgdGhlIHNzaCBjbGllbnQgc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlLiAgU2VlCisjIHNzaF9jb25maWcoNSkgZm9yIG1vcmUgaW5mb3JtYXRpb24uICBUaGlzIGZpbGUgcHJvdmlkZXMgZGVmYXVsdHMgZm9yCisjIHVzZXJzLCBhbmQgdGhlIHZhbHVlcyBjYW4gYmUgY2hhbmdlZCBpbiBwZXItdXNlciBjb25maWd1cmF0aW9uIGZpbGVzCisjIG9yIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKyMgQ29uZmlndXJhdGlvbiBkYXRhIGlzIHBhcnNlZCBhcyBmb2xsb3dzOgorIyAgMS4gY29tbWFuZCBsaW5lIG9wdGlvbnMKKyMgIDIuIHVzZXItc3BlY2lmaWMgZmlsZQorIyAgMy4gc3lzdGVtLXdpZGUgZmlsZQorIyBBbnkgY29uZmlndXJhdGlvbiB2YWx1ZSBpcyBvbmx5IGNoYW5nZWQgdGhlIGZpcnN0IHRpbWUgaXQgaXMgc2V0LgorIyBUaHVzLCBob3N0LXNwZWNpZmljIGRlZmluaXRpb25zIHNob3VsZCBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorIyBjb25maWd1cmF0aW9uIGZpbGUsIGFuZCBkZWZhdWx0cyBhdCB0aGUgZW5kLgorCisjIFNpdGUtd2lkZSBkZWZhdWx0cyBmb3Igc29tZSBjb21tb25seSB1c2VkIG9wdGlvbnMuICBGb3IgYSBjb21wcmVoZW5zaXZlCisjIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbnMsIHRoZWlyIG1lYW5pbmdzIGFuZCBkZWZhdWx0cywgcGxlYXNlIHNlZSB0aGUKKyMgc3NoX2NvbmZpZyg1KSBtYW4gcGFnZS4KKworSG9zdCAqCisgIEZvcndhcmRBZ2VudCB5ZXMKKyAgRm9yd2FyZFgxMSB5ZXMKKyMgICBSaG9zdHNSU0FBdXRoZW50aWNhdGlvbiBubworIyAgIFJTQUF1dGhlbnRpY2F0aW9uIHllcworIyAgIFBhc3N3b3JkQXV0aGVudGljYXRpb24geWVzCisjICAgSG9zdGJhc2VkQXV0aGVudGljYXRpb24gbm8KKyMgICBHU1NBUElBdXRoZW50aWNhdGlvbiBubworIyAgIEdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMgbm8KKyMgICBCYXRjaE1vZGUgbm8KKyMgICBDaGVja0hvc3RJUCB5ZXMKKyMgICBBZGRyZXNzRmFtaWx5IGFueQorIyAgIENvbm5lY3RUaW1lb3V0IDAKKyMgICBTdHJpY3RIb3N0S2V5Q2hlY2tpbmcgYXNrCisjICAgSWRlbnRpdHlGaWxlIH4vLnNzaC9pZGVudGl0eQorIyAgIElkZW50aXR5RmlsZSB+Ly5zc2gvaWRfcnNhCisjICAgSWRlbnRpdHlGaWxlIH4vLnNzaC9pZF9kc2EKKyMgICBQb3J0IDIyCisjICAgUHJvdG9jb2wgMiwxCisjICAgQ2lwaGVyIDNkZXMKKyMgICBDaXBoZXJzIGFlczEyOC1jdHIsYWVzMTkyLWN0cixhZXMyNTYtY3RyLGFyY2ZvdXIyNTYsYXJjZm91cjEyOCxhZXMxMjgtY2JjLDNkZXMtY2JjCisjICAgTUFDcyBobWFjLW1kNSxobWFjLXNoYTEsdW1hYy02NEBvcGVuc3NoLmNvbSxobWFjLXJpcGVtZDE2MAorIyAgIEVzY2FwZUNoYXIgfgorIyAgIFR1bm5lbCBubworIyAgIFR1bm5lbERldmljZSBhbnk6YW55CisjICAgUGVybWl0TG9jYWxDb21tYW5kIG5vCisjICAgVmlzdWFsSG9zdEtleSBubworIyAgIFByb3h5Q29tbWFuZCBzc2ggLXEgLVcgJWg6JXAgZ2F0ZXdheS5leGFtcGxlLmNvbQorIyAgIFJla2V5TGltaXQgMUcgMWgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODgyZTU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkCkBAIC0wLDAgKzEsMTAgQEAKKyMlUEFNLTEuMAorCithdXRoICAgICAgIGluY2x1ZGUgICAgICBjb21tb24tYXV0aAorYWNjb3VudCAgICByZXF1aXJlZCAgICAgcGFtX25vbG9naW4uc28KK2FjY291bnQgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hY2NvdW50CitwYXNzd29yZCAgIGluY2x1ZGUgICAgICBjb21tb24tcGFzc3dvcmQKK3Nlc3Npb24gICAgb3B0aW9uYWwgICAgIHBhbV9rZXlpbml0LnNvIGZvcmNlIHJldm9rZQorc2Vzc2lvbiAgICBpbmNsdWRlICAgICAgY29tbW9uLXNlc3Npb24KK3Nlc3Npb24gICAgcmVxdWlyZWQgICAgIHBhbV9sb2dpbnVpZC5zbworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGQuc29ja2V0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkLnNvY2tldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmMzOWIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkLnNvY2tldApAQCAtMCwwICsxLDEwIEBACitbVW5pdF0KK0NvbmZsaWN0cz1zc2hkLnNlcnZpY2UKKworW1NvY2tldF0KK0V4ZWNTdGFydFByZT1AQkFTRV9CSU5ESVJAL21rZGlyIC1wIC92YXIvcnVuL3NzaGQKK0xpc3RlblN0cmVhbT0yMgorQWNjZXB0PXllcworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PXNvY2tldHMudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRALnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRALnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIyZDY4ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZEAuc2VydmljZQpAQCAtMCwwICsxLDExIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPU9wZW5TU0ggUGVyLUNvbm5lY3Rpb24gRGFlbW9uCitXYW50cz1zc2hkZ2Vua2V5cy5zZXJ2aWNlCitBZnRlcj1zc2hkZ2Vua2V5cy5zZXJ2aWNlCisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0PS1AU0JJTkRJUkAvc3NoZCAtaQorRXhlY1JlbG9hZD1AQkFTRV9CSU5ESVJAL2tpbGwgLUhVUCAkTUFJTlBJRAorU3RhbmRhcmRJbnB1dD1zb2NrZXQKK1N0YW5kYXJkRXJyb3I9c3lzbG9nCitLaWxsTW9kZT1wcm9jZXNzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRfY29uZmlnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkX2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDhiZDJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkX2NvbmZpZwpAQCAtMCwwICsxLDEzMyBAQAorIwkkT3BlbkJTRDogc3NoZF9jb25maWcsdiAxLjgwIDIwMDgvMDcvMDIgMDI6MjQ6MTggZGptIEV4cCAkCisKKyMgVGhpcyBpcyB0aGUgc3NoZCBzZXJ2ZXIgc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlLiAgU2VlCisjIHNzaGRfY29uZmlnKDUpIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisjIFRoaXMgc3NoZCB3YXMgY29tcGlsZWQgd2l0aCBQQVRIPS91c3IvYmluOi9iaW46L3Vzci9zYmluOi9zYmluCisKKyMgVGhlIHN0cmF0ZWd5IHVzZWQgZm9yIG9wdGlvbnMgaW4gdGhlIGRlZmF1bHQgc3NoZF9jb25maWcgc2hpcHBlZCB3aXRoCisjIE9wZW5TU0ggaXMgdG8gc3BlY2lmeSBvcHRpb25zIHdpdGggdGhlaXIgZGVmYXVsdCB2YWx1ZSB3aGVyZQorIyBwb3NzaWJsZSwgYnV0IGxlYXZlIHRoZW0gY29tbWVudGVkLiAgVW5jb21tZW50ZWQgb3B0aW9ucyBjaGFuZ2UgYQorIyBkZWZhdWx0IHZhbHVlLgorCisjUG9ydCAyMgorI0FkZHJlc3NGYW1pbHkgYW55CisjTGlzdGVuQWRkcmVzcyAwLjAuMC4wCisjTGlzdGVuQWRkcmVzcyA6OgorCisjIFRoZSBkZWZhdWx0IHJlcXVpcmVzIGV4cGxpY2l0IGFjdGl2YXRpb24gb2YgcHJvdG9jb2wgMQorUHJvdG9jb2wgMgorCisjIEhvc3RLZXkgZm9yIHByb3RvY29sIHZlcnNpb24gMQorI0hvc3RLZXkgL2V0Yy9zc2gvc3NoX2hvc3Rfa2V5CisjIEhvc3RLZXlzIGZvciBwcm90b2NvbCB2ZXJzaW9uIDIKKyNIb3N0S2V5IC9ldGMvc3NoL3NzaF9ob3N0X3JzYV9rZXkKKyNIb3N0S2V5IC9ldGMvc3NoL3NzaF9ob3N0X2RzYV9rZXkKKyNIb3N0S2V5IC9ldGMvc3NoL3NzaF9ob3N0X2VjZHNhX2tleQorI0hvc3RLZXkgL2V0Yy9zc2gvc3NoX2hvc3RfZWQyNTUxOV9rZXkKKworIyBMaWZldGltZSBhbmQgc2l6ZSBvZiBlcGhlbWVyYWwgdmVyc2lvbiAxIHNlcnZlciBrZXkKKyNLZXlSZWdlbmVyYXRpb25JbnRlcnZhbCAxaAorI1NlcnZlcktleUJpdHMgMTAyNAorCisjIENpcGhlcnMgYW5kIGtleWluZworI1Jla2V5TGltaXQgZGVmYXVsdCBub25lCisKKyMgTG9nZ2luZworIyBvYnNvbGV0ZXMgUXVpZXRNb2RlIGFuZCBGYXNjaXN0TG9nZ2luZworI1N5c2xvZ0ZhY2lsaXR5IEFVVEgKKyNMb2dMZXZlbCBJTkZPCisKKyMgQXV0aGVudGljYXRpb246CisKKyNMb2dpbkdyYWNlVGltZSAybQorI1Blcm1pdFJvb3RMb2dpbiB5ZXMKKyNTdHJpY3RNb2RlcyB5ZXMKKyNNYXhBdXRoVHJpZXMgNgorI01heFNlc3Npb25zIDEwCisKKyNSU0FBdXRoZW50aWNhdGlvbiB5ZXMKKyNQdWJrZXlBdXRoZW50aWNhdGlvbiB5ZXMKKworIyBUaGUgZGVmYXVsdCBpcyB0byBjaGVjayBib3RoIC5zc2gvYXV0aG9yaXplZF9rZXlzIGFuZCAuc3NoL2F1dGhvcml6ZWRfa2V5czIKKyMgYnV0IHRoaXMgaXMgb3ZlcnJpZGRlbiBzbyBpbnN0YWxsYXRpb25zIHdpbGwgb25seSBjaGVjayAuc3NoL2F1dGhvcml6ZWRfa2V5cworQXV0aG9yaXplZEtleXNGaWxlIC5zc2gvYXV0aG9yaXplZF9rZXlzCisKKyNBdXRob3JpemVkUHJpbmNpcGFsc0ZpbGUgbm9uZQorCisjQXV0aG9yaXplZEtleXNDb21tYW5kIG5vbmUKKyNBdXRob3JpemVkS2V5c0NvbW1hbmRVc2VyIG5vYm9keQorCisjIEZvciB0aGlzIHRvIHdvcmsgeW91IHdpbGwgYWxzbyBuZWVkIGhvc3Qga2V5cyBpbiAvZXRjL3NzaC9zc2hfa25vd25faG9zdHMKKyNSaG9zdHNSU0FBdXRoZW50aWNhdGlvbiBubworIyBzaW1pbGFyIGZvciBwcm90b2NvbCB2ZXJzaW9uIDIKKyNIb3N0YmFzZWRBdXRoZW50aWNhdGlvbiBubworIyBDaGFuZ2UgdG8geWVzIGlmIHlvdSBkb24ndCB0cnVzdCB+Ly5zc2gva25vd25faG9zdHMgZm9yCisjIFJob3N0c1JTQUF1dGhlbnRpY2F0aW9uIGFuZCBIb3N0YmFzZWRBdXRoZW50aWNhdGlvbgorI0lnbm9yZVVzZXJLbm93bkhvc3RzIG5vCisjIERvbid0IHJlYWQgdGhlIHVzZXIncyB+Ly5yaG9zdHMgYW5kIH4vLnNob3N0cyBmaWxlcworI0lnbm9yZVJob3N0cyB5ZXMKKworIyBUbyBkaXNhYmxlIHR1bm5lbGVkIGNsZWFyIHRleHQgcGFzc3dvcmRzLCBjaGFuZ2UgdG8gbm8gaGVyZSEKKyNQYXNzd29yZEF1dGhlbnRpY2F0aW9uIHllcworI1Blcm1pdEVtcHR5UGFzc3dvcmRzIG5vCisKKyMgQ2hhbmdlIHRvIG5vIHRvIGRpc2FibGUgcy9rZXkgcGFzc3dvcmRzCitDaGFsbGVuZ2VSZXNwb25zZUF1dGhlbnRpY2F0aW9uIG5vCisKKyMgS2VyYmVyb3Mgb3B0aW9ucworI0tlcmJlcm9zQXV0aGVudGljYXRpb24gbm8KKyNLZXJiZXJvc09yTG9jYWxQYXNzd2QgeWVzCisjS2VyYmVyb3NUaWNrZXRDbGVhbnVwIHllcworI0tlcmJlcm9zR2V0QUZTVG9rZW4gbm8KKworIyBHU1NBUEkgb3B0aW9ucworI0dTU0FQSUF1dGhlbnRpY2F0aW9uIG5vCisjR1NTQVBJQ2xlYW51cENyZWRlbnRpYWxzIHllcworCisjIFNldCB0aGlzIHRvICd5ZXMnIHRvIGVuYWJsZSBQQU0gYXV0aGVudGljYXRpb24sIGFjY291bnQgcHJvY2Vzc2luZywKKyMgYW5kIHNlc3Npb24gcHJvY2Vzc2luZy4gSWYgdGhpcyBpcyBlbmFibGVkLCBQQU0gYXV0aGVudGljYXRpb24gd2lsbAorIyBiZSBhbGxvd2VkIHRocm91Z2ggdGhlIENoYWxsZW5nZVJlc3BvbnNlQXV0aGVudGljYXRpb24gYW5kCisjIFBhc3N3b3JkQXV0aGVudGljYXRpb24uICBEZXBlbmRpbmcgb24geW91ciBQQU0gY29uZmlndXJhdGlvbiwKKyMgUEFNIGF1dGhlbnRpY2F0aW9uIHZpYSBDaGFsbGVuZ2VSZXNwb25zZUF1dGhlbnRpY2F0aW9uIG1heSBieXBhc3MKKyMgdGhlIHNldHRpbmcgb2YgIlBlcm1pdFJvb3RMb2dpbiB3aXRob3V0LXBhc3N3b3JkIi4KKyMgSWYgeW91IGp1c3Qgd2FudCB0aGUgUEFNIGFjY291bnQgYW5kIHNlc3Npb24gY2hlY2tzIHRvIHJ1biB3aXRob3V0CisjIFBBTSBhdXRoZW50aWNhdGlvbiwgdGhlbiBlbmFibGUgdGhpcyBidXQgc2V0IFBhc3N3b3JkQXV0aGVudGljYXRpb24KKyMgYW5kIENoYWxsZW5nZVJlc3BvbnNlQXV0aGVudGljYXRpb24gdG8gJ25vJy4KKyNVc2VQQU0gbm8KKworI0FsbG93QWdlbnRGb3J3YXJkaW5nIHllcworI0FsbG93VGNwRm9yd2FyZGluZyB5ZXMKKyNHYXRld2F5UG9ydHMgbm8KKyNYMTFGb3J3YXJkaW5nIG5vCisjWDExRGlzcGxheU9mZnNldCAxMAorI1gxMVVzZUxvY2FsaG9zdCB5ZXMKKyNQZXJtaXRUVFkgeWVzCisjUHJpbnRNb3RkIHllcworI1ByaW50TGFzdExvZyB5ZXMKKyNUQ1BLZWVwQWxpdmUgeWVzCisjVXNlTG9naW4gbm8KK1VzZVByaXZpbGVnZVNlcGFyYXRpb24gc2FuZGJveCAjIERlZmF1bHQgZm9yIG5ldyBpbnN0YWxsYXRpb25zLgorI1Blcm1pdFVzZXJFbnZpcm9ubWVudCBubworQ29tcHJlc3Npb24gbm8KK0NsaWVudEFsaXZlSW50ZXJ2YWwgMTUKK0NsaWVudEFsaXZlQ291bnRNYXggNAorI1VzZUROUyB5ZXMKKyNQaWRGaWxlIC92YXIvcnVuL3NzaGQucGlkCisjTWF4U3RhcnR1cHMgMTA6MzA6MTAwCisjUGVybWl0VHVubmVsIG5vCisjQ2hyb290RGlyZWN0b3J5IG5vbmUKKyNWZXJzaW9uQWRkZW5kdW0gbm9uZQorCisjIG5vIGRlZmF1bHQgYmFubmVyIHBhdGgKKyNCYW5uZXIgbm9uZQorCisjIG92ZXJyaWRlIGRlZmF1bHQgb2Ygbm8gc3Vic3lzdGVtcworU3Vic3lzdGVtCXNmdHAJL3Vzci9saWJleGVjL3NmdHAtc2VydmVyCisKKyMgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHNldHRpbmdzIG9uIGEgcGVyLXVzZXIgYmFzaXMKKyNNYXRjaCBVc2VyIGFub25jdnMKKyMJWDExRm9yd2FyZGluZyBubworIwlBbGxvd1RjcEZvcndhcmRpbmcgbm8KKyMJUGVybWl0VFRZIG5vCisjCUZvcmNlQ29tbWFuZCBjdnMgc2VydmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRnZW5rZXlzLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRnZW5rZXlzLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY1MDg2ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZGdlbmtleXMuc2VydmljZQpAQCAtMCwwICsxLDExIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPU9wZW5TU0ggS2V5IEdlbmVyYXRpb24KK0NvbmRpdGlvblBhdGhFeGlzdHM9fCEvZXRjL3NzaC9zc2hfaG9zdF9yc2Ffa2V5CitDb25kaXRpb25QYXRoRXhpc3RzPXwhL2V0Yy9zc2gvc3NoX2hvc3RfZHNhX2tleQorQ29uZGl0aW9uUGF0aEV4aXN0cz18IS9ldGMvc3NoL3NzaF9ob3N0X2VjZHNhX2tleQorQ29uZGl0aW9uUGF0aEV4aXN0cz18IS9ldGMvc3NoL3NzaF9ob3N0X2VkMjU1MTlfa2V5CisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0PUBCSU5ESVJAL3NzaC1rZXlnZW4gLUEKK1R5cGU9b25lc2hvdAorUmVtYWluQWZ0ZXJFeGl0PXllcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC92b2xhdGlsZXMuOTlfc3NoZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvdm9sYXRpbGVzLjk5X3NzaGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkMmFmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvdm9sYXRpbGVzLjk5X3NzaGQKQEAgLTAsMCArMSwyIEBACitkIHJvb3Qgcm9vdCAwNzU1IC92YXIvcnVuL3NzaGQgbm9uZQorZiByb290IHJvb3QgMDY0NCAvdmFyL2xvZy9sYXN0bG9nIG5vbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2hfNy4xcDEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoXzcuMXAxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZWI0YjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoXzcuMXAxLmJiCkBAIC0wLDAgKzEsMTU0IEBACitTVU1NQVJZID0gIlNlY3VyZSBybG9naW4vcnNoL3JjcC90ZWxuZXQgcmVwbGFjZW1lbnQiCitERVNDUklQVElPTiA9ICJTZWN1cmUgcmxvZ2luL3JzaC9yY3AvdGVsbmV0IHJlcGxhY2VtZW50IChPcGVuU1NIKSBcCitTc2ggKFNlY3VyZSBTaGVsbCkgaXMgYSBwcm9ncmFtIGZvciBsb2dnaW5nIGludG8gYSByZW1vdGUgbWFjaGluZSBcCithbmQgZm9yIGV4ZWN1dGluZyBjb21tYW5kcyBvbiBhIHJlbW90ZSBtYWNoaW5lLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9vcGVuc3NoLm9yZyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTkNFO21kNT1lMzI2MDQ1NjU3ZTg0MjU0MWQzZjM1YWFkYTQ0MjUwNyIKKworREVQRU5EUyA9ICJ6bGliIG9wZW5zc2wiCitERVBFTkRTICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJwYW0nLCAnJywgZCl9IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5vcGVuYnNkLm9yZy9wdWIvT3BlbkJTRC9PcGVuU1NIL3BvcnRhYmxlL29wZW5zc2gtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3NzaGRfY29uZmlnIFwKKyAgICAgICAgICAgZmlsZTovL3NzaF9jb25maWcgXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJyR7UEFNX1NSQ19VUkl9JywgJycsIGQpfSBcCisgICAgICAgICAgIGZpbGU6Ly9zc2hkLnNvY2tldCBcCisgICAgICAgICAgIGZpbGU6Ly9zc2hkQC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL3NzaGRnZW5rZXlzLnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vdm9sYXRpbGVzLjk5X3NzaGQgXAorICAgICAgICAgICBmaWxlOi8vYWRkLXRlc3Qtc3VwcG9ydC1mb3ItYnVzeWJveC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QiCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9zc2hkIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODcwOTczNmJjOGE4YzI1M2JjNGVlYjQ4Mjk4ODhjYTUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmMwYTZkMmQxZDA2M2Q1YzY2ZGZmZDk1MjQ5M2QwY2RhMjU2Y2FkMjA0ZjY4MWRlMGY4NGVmODViMmFkODQyOCIKKworaW5oZXJpdCB1c2VyYWRkIHVwZGF0ZS1yYy5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgc3lzdGVtZAorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59LXNzaGQiCitVU0VSQUREX1BBUkFNXyR7UE59LXNzaGQgPSAiLS1zeXN0ZW0gLS1uby1jcmVhdGUtaG9tZSAtLWhvbWUtZGlyIC92YXIvcnVuL3NzaGQgLS1zaGVsbCAvYmluL2ZhbHNlIC0tdXNlci1ncm91cCBzc2hkIgorSU5JVFNDUklQVF9QQUNLQUdFUyA9ICIke1BOfS1zc2hkIgorSU5JVFNDUklQVF9OQU1FXyR7UE59LXNzaGQgPSAic3NoZCIKK0lOSVRTQ1JJUFRfUEFSQU1TXyR7UE59LXNzaGQgPSAiZGVmYXVsdHMgOSIKKworU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfS1zc2hkIgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LXNzaGQgPSAic3NoZC5zb2NrZXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwdGVzdAorCisjIExGUyBzdXBwb3J0OgorQ0ZMQUdTICs9ICItRF9fRklMRV9PRkZTRVRfQklUUz02NCIKKworIyBsb2dpbiBwYXRoIGlzIGhhcmRjb2RlZCBpbiBzc2hkCitFWFRSQV9PRUNPTkYgPSAiJ0xPR0lOX1BST0dSQU09JHtiYXNlX2JpbmRpcn0vbG9naW4nIFwKKyAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLXdpdGgtcGFtJywgJy0td2l0aG91dC1wYW0nLCBkKX0gXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC16bGliLXZlcnNpb24tY2hlY2sgXAorICAgICAgICAgICAgICAgIC0td2l0aC1wcml2c2VwLXBhdGg9L3Zhci9ydW4vc3NoZCBcCisgICAgICAgICAgICAgICAgLS1zeXNjb25mZGlyPSR7c3lzY29uZmRpcn0vc3NoIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgteGF1dGg9L3Vzci9iaW4veGF1dGggXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1zdHJpcCBcCisgICAgICAgICAgICAgICAgIgorCisjIFNpbmNlIHdlIGRvIG5vdCBkZXBlbmQgb24gbGliYnNkLCB3ZSBkbyBub3Qgd2FudCBjb25maWd1cmUgdG8gdXNlIGl0CisjIGp1c3QgYmVjYXVzZSBpdCBmaW5kcyBsaWJ1dGlsLmguICBCdXQsIHNwZWNpZnlpbmcgLS1kaXNhYmxlLWxpYnV0aWwKKyMgY2F1c2VzIGNvbXBpbGUgZXJyb3JzLCBzby4uLgorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2hlYWRlcl9ic2RfbGlidXRpbF9oPW5vIGFjX2N2X2hlYWRlcl9saWJ1dGlsX2g9bm8iCisKKyMgcGFzc3dkIHBhdGggaXMgaGFyZGNvZGVkIGluIHNzaGQKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1BBVEhfUEFTU1dEX1BST0c9JHtiaW5kaXJ9L3Bhc3N3ZCIKKworIyBXZSBkb24ndCB3YW50IHRvIGRlcGVuZCBvbiBsaWJibG9ja2ZpbGUKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9oZWFkZXJfbWFpbGxvY2tfaD1ubyIKKworIyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgdWNsaWJjIGJlY2F1c2UgaW5jbHVkaW5nIHN0ZGlvLmgKKyMgcHVsbHMgaW4gcHRocmVhZHMuaCBhbmQgY2F1c2VzIGNvbmZsaWN0cyBpbiBmdW5jdGlvbiBwcm90b3R5cGVzLgorIyBUaGlzIHJlc3VsdHMgaW4gY29tcGlsYXRpb24gZmFpbHVyZSwgc28gdW5sZXNzIHRoaXMgaXMgZml4ZWQsCisjIGRpc2FibGUgcGFtIGZvciB1Y2xpYmMuCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjPSIgLS13aXRob3V0LXBhbSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWV4cG9ydCBMRD0iJHtDQ30iCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc3NoZF9jb25maWcgJHtCfS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hfY29uZmlnICR7Qn0vCisJaWYgWyAhIC1lIGFjaW5jbHVkZS5tNCAtYSAtZSBhY2xvY2FsLm00IF07IHRoZW4KKwkJY3AgYWNsb2NhbC5tNCBhY2luY2x1ZGUubTQKKwlmaQorfQorCitkb19jb21waWxlX3B0ZXN0KCkgeworICAgICAgICAjIHNraXAgcmVncmVzcy91bml0dGVzdHMvIGJpbmFyaWVzOiB0aGlzIHdpbGwgc2lsZW50bHkgc2tpcAorICAgICAgICAjIHVuaXR0ZXN0cyBpbiBydW4tcHRlc3RzIHdoaWNoIGlzIGdvb2QgYmVjYXVzZSB0aGV5IGFyZSBzbyBzbG93LgorICAgICAgICBvZV9ydW5tYWtlIHJlZ3Jlc3MvbW9kcGlwZSByZWdyZXNzL3NldHVpZC1hbGxvd2VkIHJlZ3Jlc3MvbmV0Y2F0Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IiA9ICJwYW0iIF07IHRoZW4KKwkJaW5zdGFsbCAtRCAtbSAwNzU1ICR7V09SS0RJUn0vc3NoZCAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC9zc2hkCisJCXNlZCAtaSAtZSAnczojVXNlUEFNIG5vOlVzZVBBTSB5ZXM6JyAke1dPUktESVJ9L3NzaGRfY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZworCWZpCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3NzaGQKKwlybSAtZiAke0R9JHtiaW5kaXJ9L3Nsb2dpbiAke0R9JHtkYXRhZGlyfS9Tc2guYmluCisJcm1kaXIgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuL3NzaGQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuICR7RH0ke2xvY2Fsc3RhdGVkaXJ9CisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L3ZvbGF0aWxlcy45OV9zc2hkICR7RH0vJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy85OV9zc2hkCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vY29udHJpYi9zc2gtY29weS1pZCAke0R9JHtiaW5kaXJ9CisKKwkjIENyZWF0ZSBjb25maWcgZmlsZXMgZm9yIHJlYWQtb25seSByb290ZnMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3NzaAorCWluc3RhbGwgLW0gNjQ0ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkKKwlzZWQgLWkgJy9Ib3N0S2V5L2QnICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCWVjaG8gIkhvc3RLZXkgL3Zhci9ydW4vc3NoL3NzaF9ob3N0X3JzYV9rZXkiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCWVjaG8gIkhvc3RLZXkgL3Zhci9ydW4vc3NoL3NzaF9ob3N0X2RzYV9rZXkiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCWVjaG8gIkhvc3RLZXkgL3Zhci9ydW4vc3NoL3NzaF9ob3N0X2VjZHNhX2tleSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5CisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtYyAtbSAwNjQ0ICR7V09SS0RJUn0vc3NoZC5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1jIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hkQC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtYyAtbSAwNjQ0ICR7V09SS0RJUn0vc3NoZGdlbmtleXMuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAQkFTRV9CSU5ESVJALCR7YmFzZV9iaW5kaXJ9LGcnIFwKKwkJLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgXAorCQktZSAncyxAQklORElSQCwke2JpbmRpcn0sZycgXAorCQkke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zc2hkLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qLnNlcnZpY2UKK30KKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJc2VkIC1pIC1lICJzfF5TRlRQU0VSVkVSPS4qfFNGVFBTRVJWRVI9JHtsaWJkaXJ9LyR7UE59L3NmdHAtc2VydmVyfCIgcmVncmVzcy90ZXN0LWV4ZWMuc2gKKwljcCAtciByZWdyZXNzICR7RH0ke1BURVNUX1BBVEh9Cit9CisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK1BBQ0tBR0VTID0rICIke1BOfS1rZXlnZW4gJHtQTn0tc2NwICR7UE59LXNzaCAke1BOfS1zc2hkICR7UE59LXNmdHAgJHtQTn0tbWlzYyAke1BOfS1zZnRwLXNlcnZlciIKK0ZJTEVTXyR7UE59LXNjcCA9ICIke2JpbmRpcn0vc2NwLiR7QlBOfSIKK0ZJTEVTXyR7UE59LXNzaCA9ICIke2JpbmRpcn0vc3NoLiR7QlBOfSAke3N5c2NvbmZkaXJ9L3NzaC9zc2hfY29uZmlnIgorRklMRVNfJHtQTn0tc3NoZCA9ICIke3NiaW5kaXJ9L3NzaGQgJHtzeXNjb25mZGlyfS9pbml0LmQvc3NoZCAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtIgorRklMRVNfJHtQTn0tc3NoZCArPSAiJHtzeXNjb25mZGlyfS9zc2gvbW9kdWxpICR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnICR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5ICR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMvOTlfc3NoZCAke3N5c2NvbmZkaXJ9L3BhbS5kL3NzaGQiCitGSUxFU18ke1BOfS1zZnRwID0gIiR7YmluZGlyfS9zZnRwIgorRklMRVNfJHtQTn0tc2Z0cC1zZXJ2ZXIgPSAiJHtsaWJleGVjZGlyfS9zZnRwLXNlcnZlciIKK0ZJTEVTXyR7UE59LW1pc2MgPSAiJHtiaW5kaXJ9L3NzaCogJHtsaWJleGVjZGlyfS9zc2gqIgorRklMRVNfJHtQTn0ta2V5Z2VuID0gIiR7YmluZGlyfS9zc2gta2V5Z2VuIgorCitSREVQRU5EU18ke1BOfSArPSAiJHtQTn0tc2NwICR7UE59LXNzaCAke1BOfS1zc2hkICR7UE59LWtleWdlbiIKK1JERVBFTkRTXyR7UE59LXNzaGQgKz0gIiR7UE59LWtleWdlbiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0tcGx1Z2luLWtleWluaXQgcGFtLXBsdWdpbi1sb2dpbnVpZCcsICcnLCBkKX0iCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiJHtQTn0tc2Z0cCAke1BOfS1taXNjICR7UE59LXNmdHAtc2VydmVyIG1ha2UiCisKK1JQUk9WSURFU18ke1BOfS1zc2ggPSAic3NoIgorUlBST1ZJREVTXyR7UE59LXNzaGQgPSAic3NoZCIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJkcm9wYmVhciIKK1JDT05GTElDVFNfJHtQTn0tc3NoZCA9ICJkcm9wYmVhciIKK1JDT05GTElDVFNfJHtQTn0ta2V5Z2VuID0gInNzaC1rZXlnZW4iCisKK0NPTkZGSUxFU18ke1BOfS1zc2hkID0gIiR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnIgorQ09ORkZJTEVTXyR7UE59LXNzaCA9ICIke3N5c2NvbmZkaXJ9L3NzaC9zc2hfY29uZmlnIgorCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICI5MCIKK0FMVEVSTkFUSVZFXyR7UE59LXNjcCA9ICJzY3AiCitBTFRFUk5BVElWRV8ke1BOfS1zc2ggPSAic3NoIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZGNmZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLmluYwpAQCAtMCwwICsxLDIxNCBAQAorU1VNTUFSWSA9ICJTZWN1cmUgU29ja2V0IExheWVyIgorREVTQ1JJUFRJT04gPSAiU2VjdXJlIFNvY2tldCBMYXllciAoU1NMKSBiaW5hcnkgYW5kIHJlbGF0ZWQgY3J5cHRvZ3JhcGhpYyB0b29scy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9uZXdzL3Z1bG5lcmFiaWxpdGllcy5odG1sIgorU0VDVElPTiA9ICJsaWJzL25ldHdvcmsiCisKKyMgIm9wZW5zc2wgfCBTU0xlYXkiIGR1YWwgbGljZW5zZQorTElDRU5TRSA9ICJvcGVuc3NsIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZjlhOGY5NjgxMDczNDVlMGI3NWFhOGMyZWNhYTdlYzgiCisKK0RFUEVORFMgPSAicGVybC1uYXRpdmUtcnVudGltZSIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgb3BlbnNzbC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9zb3VyY2Uvb3BlbnNzbC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICIKK1MgPSAiJHtXT1JLRElSfS9vcGVuc3NsLSR7UFZ9IgorCitQQUNLQUdFQ09ORklHW3BlcmxdID0gIiwsLCIKKworQVJfYXBwZW5kID0gIiByIgorIyBBdm9pZCBiaW5hcmllcyBiZWluZyBtYXJrZWQgYXMgcmVxdWlyaW5nIGFuIGV4ZWN1dGFibGUgc3RhY2sgc2luY2UgaXQgCisjIGRvZXNuJ3Qod2hpY2ggY2F1c2VzIGFuZCB0aGlzIGNhdXNlcyBpc3N1ZXMgd2l0aCBTRUxpbnV4CitDRkxBRyA9ICIke0BiYXNlX2NvbmRpdGlvbmFsKCdTSVRFSU5GT19FTkRJQU5ORVNTJywgJ2xlJywgJy1ETF9FTkRJQU4nLCAnLURCX0VORElBTicsIGQpfSBcCisJLURURVJNSU8gJHtDRkxBR1N9IC1XYWxsIC1XYSwtLW5vZXhlY3N0YWNrIgorCisjIC0wMiBkb2VzIG5vdCB3b3JrIG9uIG1pcHNlbDogc3NoIGhhbmdzIHdoZW4gaXQgdHJpZXMgdG8gcmVhZCAvZGV2L3VyYW5kb20KK0NGTEFHX210eC0xIDo9ICIke0AnJHtDRkxBR30nLnJlcGxhY2UoJy1PMicsICcnKX0iCitDRkxBR19tdHgtMiA6PSAiJHtAJyR7Q0ZMQUd9Jy5yZXBsYWNlKCctTzInLCAnJyl9IgorCitleHBvcnQgRElSUyA9ICJjcnlwdG8gc3NsIGFwcHMiCitleHBvcnQgRVhfTElCUyA9ICItbGdjYyAtbGRsIgorZXhwb3J0IEFTID0gIiR7Q0N9IC1jIgorCitpbmhlcml0IHBrZ2NvbmZpZyBzaXRlaW5mbyBtdWx0aWxpYl9oZWFkZXIgcHRlc3QKKworUEFDS0FHRVMgPSsgImxpYmNyeXB0byBsaWJzc2wgJHtQTn0tbWlzYyBvcGVuc3NsLWNvbmYiCitGSUxFU19saWJjcnlwdG8gPSAiJHtiYXNlX2xpYmRpcn0vbGliY3J5cHRvJHtTT0xJQlN9IgorRklMRVNfbGlic3NsID0gIiR7bGliZGlyfS9saWJzc2wuc28uKiIKK0ZJTEVTXyR7UE59ID0rICIgJHtsaWJkaXJ9L3NzbC8qIgorRklMRVNfJHtQTn0tbWlzYyA9ICIke2xpYmRpcn0vc3NsL21pc2MgJHtiaW5kaXJ9L2NfcmVoYXNoIgorUkRFUEVORFNfJHtQTn0tbWlzYyA9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwZXJsJywgJ3BlcmwnLCAnJywgZCl9IgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2Jhc2VfbGliZGlyfS9saWJjcnlwdG8ke1NPTElCU0RFVn0iCisKKyMgQWRkIHRoZSBvcGVuc3NsLmNuZiBmaWxlIHRvIHRoZSBvcGVuc3NsLWNvbmYgcGFja2FnZS4gIE1ha2UgdGhlIGxpYmNyeXB0bworIyBwYWNrYWdlIFJSRUNPTU1FTkRTIG9uIHRoaXMgcGFja2FnZS4gIFRoaXMgd2lsbCBlbmFibGUgdGhlIGNvbmZpZ3VyYXRpb24KKyMgZmlsZSB0byBiZSBpbnN0YWxsZWQgZm9yIGJvdGggdGhlIGJhc2Ugb3BlbnNzbCBwYWNrYWdlIGFuZCB0aGUgbGliY3J5cHRvCisjIHBhY2thZ2Ugc2luY2UgdGhlIGJhc2Ugb3BlbnNzbCBwYWNrYWdlIGRlcGVuZHMgb24gdGhlIGxpYmNyeXB0byBwYWNrYWdlLgorRklMRVNfb3BlbnNzbC1jb25mID0gIiR7bGliZGlyfS9zc2wvb3BlbnNzbC5jbmYiCitDT05GRklMRVNfb3BlbnNzbC1jb25mID0gIiR7bGliZGlyfS9zc2wvb3BlbnNzbC5jbmYiCitSUkVDT01NRU5EU19saWJjcnlwdG8gKz0gIm9wZW5zc2wtY29uZiIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIke1BOfS1taXNjIG1ha2UgcGVybCBwZXJsLW1vZHVsZS1maWxlaGFuZGxlIGJjIgorCisjIFJlbW92ZSB0aGlzIHRvIGVuYWJsZSBTU0x2My4gU1NMdjMgaXMgZGVmYXVsdGVkIHRvIGRpc2FibGVkIGR1ZSB0byB0aGUgUE9PRExFCisjIHZ1bG5lcmFiaWxpdHkKK0VYVFJBX09FQ09ORiA9ICIgLW5vLXNzbDMiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kX2RhcndpbiAoKSB7CisJc2VkIC1pIC1lICcvdmVyc2lvbi1zY3JpcHQ9b3BlbnNzbFwubGQvZCcgQ29uZmlndXJlCit9CisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJY2QgdXRpbAorCXBlcmwgcGVybHBhdGgucGwgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9CisJY2QgLi4KKwlsbiAtc2YgYXBwcy9vcGVuc3NsLnBvZCBjcnlwdG8vY3J5cHRvLnBvZCBzc2wvc3NsLnBvZCBkb2MvCisKKwlvcz0ke0hPU1RfT1N9CisJY2FzZSAkb3MgaW4KKwlsaW51eC11Y2xpYmMgfFwKKwlsaW51eC11Y2xpYmNlYWJpIHxcCisJbGludXgtZ251ZWFiaSB8XAorCWxpbnV4LXVjbGliY3NwZSB8XAorCWxpbnV4LWdudXNwZSB8XAorCWxpbnV4LW11c2wqKQorCQlvcz1saW51eAorCQk7OworCQkqKQorCQk7OworCWVzYWMKKwl0YXJnZXQ9IiRvcy0ke0hPU1RfQVJDSH0iCisJY2FzZSAkdGFyZ2V0IGluCisJbGludXgtYXJtKQorCQl0YXJnZXQ9bGludXgtYXJtdjQKKwkJOzsKKwlsaW51eC1hcm1lYikKKwkJdGFyZ2V0PWxpbnV4LWVsZi1hcm1lYgorCQk7OworCWxpbnV4LWFhcmNoNjQqKQorCQl0YXJnZXQ9bGludXgtZ2VuZXJpYzY0CisJCTs7CisJbGludXgtc2gzKQorCQl0YXJnZXQ9ZGViaWFuLXNoMworCQk7OworCWxpbnV4LXNoNCkKKwkJdGFyZ2V0PWRlYmlhbi1zaDQKKwkJOzsKKwlsaW51eC1pNDg2KQorCQl0YXJnZXQ9ZGViaWFuLWkzODYtaTQ4NgorCQk7OworCWxpbnV4LWk1ODYgfCBsaW51eC12aWFjMykKKwkJdGFyZ2V0PWRlYmlhbi1pMzg2LWk1ODYKKwkJOzsKKwlsaW51eC1pNjg2KQorCQl0YXJnZXQ9ZGViaWFuLWkzODYtaTY4Ni9jbW92CisJCTs7CisJbGludXgtZ251eDMyLXg4Nl82NCkKKwkJdGFyZ2V0PWxpbnV4LXgzMgorCQk7OworCWxpbnV4LWdudTY0LXg4Nl82NCkKKwkJdGFyZ2V0PWxpbnV4LXg4Nl82NAorCQk7OworCWxpbnV4LW1pcHMpCisJCXRhcmdldD1kZWJpYW4tbWlwcworCQk7OworCWxpbnV4LW1pcHNlbCkKKwkJdGFyZ2V0PWRlYmlhbi1taXBzZWwKKwkJOzsKKyAgICAgICAgbGludXgtKi1taXBzNjQpCisgICAgICAgICAgICAgICB0YXJnZXQ9bGludXgtbWlwcworICAgICAgICAgICAgICAgIDs7CisJbGludXgtbWljcm9ibGF6ZSopCisJCXRhcmdldD1saW51eC1nZW5lcmljMzIKKwkJOzsKKwlsaW51eC1wb3dlcnBjKQorCQl0YXJnZXQ9bGludXgtcHBjCisJCTs7CisJbGludXgtcG93ZXJwYzY0KQorCQl0YXJnZXQ9bGludXgtcHBjNjQKKwkJOzsKKwlsaW51eC1zdXBlcnNwYXJjKQorCQl0YXJnZXQ9bGludXgtc3BhcmN2OAorCQk7OworCWxpbnV4LXNwYXJjKQorCQl0YXJnZXQ9bGludXgtc3BhcmN2OAorCQk7OworCWRhcndpbi1pMzg2KQorCQl0YXJnZXQ9ZGFyd2luLWkzODYtY2MKKwkJOzsKKwllc2FjCisJIyBpbmplY3QgbWFjaGluZS1zcGVjaWZpYyBmbGFncworCXNlZCAtaSAtZSAic3xeXChcIiR0YXJnZXRcIixccypcIlteOl1cK1wpOlwoW146XVwrXCl8XDE6JHtDRkxBR318ZyIgQ29uZmlndXJlCisgICAgICAgIHVzZXByZWZpeD0ke3ByZWZpeH0KKyAgICAgICAgaWYgWyAieCR1c2VwcmVmaXgiID0gIngiIF07IHRoZW4KKyAgICAgICAgICAgICAgICB1c2VwcmVmaXg9LworICAgICAgICBmaSAgICAgICAgCisJcGVybCAuL0NvbmZpZ3VyZSAke0VYVFJBX09FQ09ORn0gc2hhcmVkIC0tcHJlZml4PSR1c2VwcmVmaXggLS1vcGVuc3NsZGlyPSR7bGliZGlyfS9zc2wgLS1saWJkaXI9YGJhc2VuYW1lICR7bGliZGlyfWAgJHRhcmdldAorfQorCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtdGFyZ2V0ICgpIHsKKyAgICBzZWQgLWkgJ3MvXCgoT1BFTlNTTD1cKSIuKiIvXDEib3BlbnNzbCIvJyBNYWtlZmlsZQorfQorCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlCit9CisKK2RvX2NvbXBpbGVfcHRlc3QgKCkgeworCW9lX3J1bm1ha2UgYnVpbGR0ZXN0Cit9CisKK2RvX2luc3RhbGwgKCkgeworCSMgQ3JlYXRlICR7RH0vJHtwcmVmaXh9IHRvIGZpeCBwYXJhbGxlbCBpc3N1ZXMKKwlta2RpciAtcCAke0R9LyR7cHJlZml4fS8KKworCW9lX3J1bm1ha2UgSU5TVEFMTF9QUkVGSVg9IiR7RH0iIE1BTkRJUj0iJHttYW5kaXJ9IiBpbnN0YWxsCisKKwlvZV9saWJpbnN0YWxsIC1zbyBsaWJjcnlwdG8gJHtEfSR7bGliZGlyfQorCW9lX2xpYmluc3RhbGwgLXNvIGxpYnNzbCAke0R9JHtsaWJkaXJ9CisKKwkjIE1vdmluZyBsaWJjcnlwdG8gdG8gL2xpYgorCWlmIFsgISAke0R9JHtsaWJkaXJ9IC1lZiAke0R9JHtiYXNlX2xpYmRpcn0gXTsgdGhlbgorCQlta2RpciAtcCAke0R9LyR7YmFzZV9saWJkaXJ9LworCQltdiAke0R9JHtsaWJkaXJ9L2xpYmNyeXB0byogJHtEfSR7YmFzZV9saWJkaXJ9LworCQlzZWQgLWkgcyNsaWJkaXI9XCRce2V4ZWNfcHJlZml4XH1cL2xpYiNsaWJkaXI9JHtiYXNlX2xpYmRpcn0jICR7RH0vJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJjcnlwdG8ucGMKKwlmaQorCisJaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfQorCWNwIC0tZGVyZWZlcmVuY2UgLVIgaW5jbHVkZS9vcGVuc3NsICR7RH0ke2luY2x1ZGVkaXJ9CisKKwlvZV9tdWx0aWxpYl9oZWFkZXIgb3BlbnNzbC9vcGVuc3NsY29uZi5oCisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncGVybCcsICdwZXJsJywgJycsIGQpfSIgPSAicGVybCIgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA3NTUgJHtTfS90b29scy9jX3JlaGFzaCAke0R9JHtiaW5kaXJ9CisJCXNlZCAtaSAtZSAnMXMsLiosIyEke2JpbmRpcn0vZW52IHBlcmwsJyAke0R9JHtiaW5kaXJ9L2NfcmVoYXNoCisJCXNlZCAtaSAtZSAnMXMsLiosIyEke2JpbmRpcn0vZW52IHBlcmwsJyAke0R9JHtsaWJkaXJ9L3NzbC9taXNjL0NBLnBsCisJCXNlZCAtaSAtZSAnMXMsLiosIyEke2JpbmRpcn0vZW52IHBlcmwsJyAke0R9JHtsaWJkaXJ9L3NzbC9taXNjL3RzZ2V0CisJCSMgVGhlIGNfcmVoYXNoIHV0aWxpdHkgaXNuJ3QgaW5zdGFsbGVkIGJ5IHRoZSBub3JtYWwgaW5zdGFsbGF0aW9uIHByb2Nlc3MuCisJZWxzZQorCQlybSAtZiAke0R9JHtiaW5kaXJ9L2NfcmVoYXNoCisJCXJtIC1mICR7RH0ke2xpYmRpcn0vc3NsL21pc2MvQ0EucGwgJHtEfSR7bGliZGlyfS9zc2wvbWlzYy90c2dldAorCWZpCit9CisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworCWNwIC1yIE1ha2VmaWxlIHRlc3QgJHtEfSR7UFRFU1RfUEFUSH0KKwljcCAtciBjZXJ0cyAke0R9JHtQVEVTVF9QQVRIfQorCW1rZGlyIC1wICR7RH0ke1BURVNUX1BBVEh9L2FwcHMKKwlsbiAtc2YgL3Vzci9saWIvc3NsL21pc2MvQ0Euc2ggICR7RH0ke1BURVNUX1BBVEh9L2FwcHMKKwlsbiAtc2YgL3Vzci9saWIvc3NsL29wZW5zc2wuY25mICR7RH0ke1BURVNUX1BBVEh9L2FwcHMKKwlsbiAtc2YgL3Vzci9iaW4vb3BlbnNzbCAgICAgICAgICR7RH0ke1BURVNUX1BBVEh9L2FwcHMKKwljcCBhcHBzL3NlcnZlcjIucGVtICAgICAgICAgICAgICR7RH0ke1BURVNUX1BBVEh9L2FwcHMKKwlta2RpciAtcCAke0R9JHtQVEVTVF9QQVRIfS91dGlsCisJaW5zdGFsbCB1dGlsL29wZW5zc2x3cmFwLnNoICAgICR7RH0ke1BURVNUX1BBVEh9L3V0aWwKKwlpbnN0YWxsIHV0aWwvc2hsaWJfd3JhcC5zaCAgICAgJHtEfSR7UFRFU1RfUEFUSH0vdXRpbAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9vcGVuc3NsIFwKKwkgICAgT1BFTlNTTF9DT05GPSR7bGliZGlyfS9zc2wvb3BlbnNzbC5jbmYgXAorCSAgICBTU0xfQ0VSVF9ESVI9JHtsaWJkaXJ9L3NzbC9jZXJ0cyBcCisJICAgIFNTTF9DRVJUX0ZJTEU9JHtsaWJkaXJ9L3NzbC9jZXJ0LnBlbSBcCisJICAgIE9QRU5TU0xfRU5HSU5FUz0ke2xpYmRpcn0vc3NsL2VuZ2luZXMKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9NYWtlZmlsZXMtcHRlc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL01ha2VmaWxlcy1wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDk0NDZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9NYWtlZmlsZXMtcHRlc3QucGF0Y2gKQEAgLTAsMCArMSw3NyBAQAorQWRkICdidWlsZHRlc3QnIGFuZCAncnVudGVzdCcgdGFyZ2V0cyB0byBNYWtlZmlsZSwgdG8gYnVpbGQgYW5kIHJ1biB0ZXN0cworY3Jvc3MtY29tcGlsZWQuCisKK1NpZ25lZC1vZmYtYnk6IEFuZGVycyBSb3hlbGwgPGFuZGVycy5yb3hlbGxAZW5lYS5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KK0luZGV4OiBvcGVuc3NsLTEuMC4yL01ha2VmaWxlLm9yZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9NYWtlZmlsZS5vcmcKKysrKyBvcGVuc3NsLTEuMC4yL01ha2VmaWxlLm9yZworQEAgLTQ1MSw4ICs0NTEsMTYgQEAgcmVoYXNoLnRpbWU6IGNlcnRzIGFwcHMKKyB0ZXN0OiAgIHRlc3RzCisgCisgdGVzdHM6IHJlaGFzaAorKwkkKE1BS0UpIGJ1aWxkdGVzdAorKwkkKE1BS0UpIHJ1bnRlc3QKKysKKytidWlsZHRlc3Q6CisrCUAoY2QgdGVzdCAmJiBcCisrCSQoQ0xFQVJFTlYpICYmICQoTUFLRSkgLWUgJChCVUlMREVOVikgVE9QPS4uIFRFU1RTPSckKFRFU1RTKScgT1BFTlNTTF9ERUJVR19NRU1PUlk9b24gT1BFTlNTTF9DT05GPS4uL2FwcHMvb3BlbnNzbC5jbmYgZXhlIGFwcHMpOworKworK3J1bnRlc3Q6CisgCUAoY2QgdGVzdCAmJiBlY2hvICJ0ZXN0aW5nLi4uIiAmJiBcCistCSQoQ0xFQVJFTlYpICYmICQoTUFLRSkgLWUgJChCVUlMREVOVikgVE9QPS4uIFRFU1RTPSckKFRFU1RTKScgT1BFTlNTTF9ERUJVR19NRU1PUlk9b24gT1BFTlNTTF9DT05GPS4uL2FwcHMvb3BlbnNzbC5jbmYgdGVzdHMgKTsKKysJJChDTEVBUkVOVikgJiYgJChNQUtFKSAtZSAkKEJVSUxERU5WKSBUT1A9Li4gVEVTVFM9JyQoVEVTVFMpJyBPUEVOU1NMX0RFQlVHX01FTU9SWT1vbiBPUEVOU1NMX0NPTkY9Li4vYXBwcy9vcGVuc3NsLmNuZiBhbGx0ZXN0cyApOworIAlPUEVOU1NMX0NPTkY9YXBwcy9vcGVuc3NsLmNuZiB1dGlsL29wZW5zc2x3cmFwLnNoIHZlcnNpb24gLWEKKyAKKyByZXBvcnQ6CitJbmRleDogb3BlbnNzbC0xLjAuMi90ZXN0L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL3Rlc3QvTWFrZWZpbGUKKysrKyBvcGVuc3NsLTEuMC4yL3Rlc3QvTWFrZWZpbGUKK0BAIC0xMzcsNyArMTM3LDcgQEAgdGVzdHM6CWV4ZSBhcHBzICQoVEVTVFMpCisgYXBwczoKKyAJQChjZCAuLjsgJChNQUtFKSBESVJTPWFwcHMgYWxsKQorIAorLWFsbHRlc3RzOiBcCisrYWxsLXRlc3RzPSBcCisgCXRlc3RfZGVzIHRlc3RfaWRlYSB0ZXN0X3NoYSB0ZXN0X21kNCB0ZXN0X21kNSB0ZXN0X2htYWMgXAorIAl0ZXN0X21kMiB0ZXN0X21kYzIgdGVzdF93cCBcCisgCXRlc3Rfcm1kIHRlc3RfcmMyIHRlc3RfcmM0IHRlc3RfcmM1IHRlc3RfYmYgdGVzdF9jYXN0IHRlc3RfYWVzIFwKK0BAIC0xNDgsNiArMTQ4LDExIEBAIGFsbHRlc3RzOiBcCisgCXRlc3RfanBha2UgdGVzdF9zcnAgdGVzdF9jbXMgdGVzdF9vY3NwIHRlc3RfdjNuYW1lIHRlc3RfaGVhcnRiZWF0IFwKKyAJdGVzdF9jb25zdGFudF90aW1lCisgCisrYWxsdGVzdHM6CisrCUAoZm9yIGkgaW4gJChhbGwtdGVzdHMpOyBkbyBcCisrCSggJChNQUtFKSAkJGkgJiYgZWNobyAiUEFTUzogJCRpIiApIHx8IGVjaG8gIkZBSUw6ICQkaSI7IFwKKysJZG9uZSkKKysKKyB0ZXN0X2V2cDogJChFVlBURVNUKSQoRVhFX0VYVCkgZXZwdGVzdHMudHh0CisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuLyQoRVZQVEVTVCkgZXZwdGVzdHMudHh0CisgCitAQCAtMjEzLDcgKzIxOCw3IEBAIHRlc3RfeDUwOTogLi4vYXBwcy9vcGVuc3NsJChFWEVfRVhUKSB0eDUKKyAJZWNobyB0ZXN0IHNlY29uZCB4NTA5djMgY2VydGlmaWNhdGUKKyAJc2ggLi90eDUwOSB2My1jZXJ0Mi5wZW0gMj4vZGV2L251bGwKKyAKKy10ZXN0X3JzYTogJChSU0FURVNUKSQoRVhFX0VYVCkgLi4vYXBwcy9vcGVuc3NsJChFWEVfRVhUKSB0cnNhIHRlc3Ryc2EucGVtCisrdGVzdF9yc2E6IC4uL2FwcHMvb3BlbnNzbCQoRVhFX0VYVCkgdHJzYSB0ZXN0cnNhLnBlbQorIAlAc2ggLi90cnNhIDI+L2Rldi9udWxsCisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuLyQoUlNBVEVTVCkKKyAKK0BAIC0zMTMsMTEgKzMxOCwxMSBAQCB0ZXN0X3RzYTogLi4vYXBwcy9vcGVuc3NsJChFWEVfRVhUKSB0ZXN0CisgCSAgc2ggLi90ZXN0dHNhOyBcCisgCWZpCisgCistdGVzdF9pZ2U6ICQoSUdFVEVTVCkkKEVYRV9FWFQpCisrdGVzdF9pZ2U6CisgCUBlY2hvICJUZXN0IElHRSBtb2RlIgorIAkuLi91dGlsL3NobGliX3dyYXAuc2ggLi8kKElHRVRFU1QpCisgCistdGVzdF9qcGFrZTogJChKUEFLRVRFU1QpJChFWEVfRVhUKQorK3Rlc3RfanBha2U6CisgCUBlY2hvICJUZXN0IEpQQUtFIgorIAkuLi91dGlsL3NobGliX3dyYXAuc2ggLi8kKEpQQUtFVEVTVCkKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvY29uZmlndXJlLXRhcmdldHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2NvbmZpZ3VyZS10YXJnZXRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MWU3NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2NvbmZpZ3VyZS10YXJnZXRzLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1RoZSBudW1iZXIgb2YgY29sb25zIGFyZSBpbXBvcnRhbnQgOikKKworCistLS0KKyBDb25maWd1cmUgfCAgIDE2ICsrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKQorCitJbmRleDogb3BlbnNzbC0xLjAuMmEvQ29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMmEub3JpZy9Db25maWd1cmUKKysrKyBvcGVuc3NsLTEuMC4yYS9Db25maWd1cmUKK0BAIC00NDMsNiArNDQzLDIzIEBAIG15ICV0YWJsZT0oCisgImxpbnV4LWFscGhhLWNjYyIsImNjYzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAtRExfRU5ESUFOOjotRF9SRUVOVFJBTlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219IiwKKyAibGludXgtYWxwaGErYnd4LWNjYyIsImNjYzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAtRExfRU5ESUFOOjotRF9SRUVOVFJBTlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219IiwKKyAKKysgCisrIyBMaW51eCBvbiBBUk0KKysibGludXgtZWxmLWFybSIsIiRFTlZ7J0NDJ306LURMX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1lbGYtYXJtZWIiLCIkRU5WeydDQyd9Oi1EQl9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgREVTX1JJU0MxOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtZ251ZWFiaS1hcm0iLCIkRU5WeydDQyd9Oi1ETF9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgREVTX1JJU0MxOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtZ251ZWFiaS1hcm1lYiIsIiRFTlZ7J0NDJ306LURCX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC11Y2xpYmNlYWJpLWFybSIsIiRFTlZ7J0NDJ306LURMX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC11Y2xpYmNlYWJpLWFybWViIiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrCisrImxpbnV4LWF2cjMyIiwiJEVOVnsnQ0MnfTotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS4iLAorKworKyMjIyMgTGludXggb24gTUlQUy9NSVBTNjQKKysibGludXgtbWlwcyIsIiRFTlZ7J0NDJ306LURCX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LW1pcHM2NCIsIiRFTlZ7J0NDJ306LURCX0VORElBTiAtbWFiaT02NCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtbWlwczY0ZWwiLCIkRU5WeydDQyd9Oi1ETF9FTkRJQU4gLW1hYmk9NjQgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LW1pcHNlbCIsIiRFTlZ7J0NDJ306LURMX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrCisgIyBBbmRyb2lkOiBsaW51eC0qIGJ1dCB3aXRob3V0IHBvaW50ZXJzIHRvIGhlYWRlcnMgYW5kIGxpYnMuCisgImFuZHJvaWQiLCJnY2M6LW1hbmRyb2lkIC1JXCQoQU5EUk9JRF9ERVYpL2luY2x1ZGUgLUJcJChBTkRST0lEX0RFVikvbGliIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKyAiYW5kcm9pZC14ODYiLCJnY2M6LW1hbmRyb2lkIC1JXCQoQU5EUk9JRF9ERVYpL2luY2x1ZGUgLUJcJChBTkRST0lEX0RFVikvbGliIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToiLmV2YWx7bXkgJGFzbT0ke3g4Nl9lbGZfYXNtfTskYXNtPX5zLzplbGYvOmFuZHJvaWQvOyRhc219LiI6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2NyeXB0b191c2VfYmlnaW50X2luX3g4Ni02NF9wZXJsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9jcnlwdG9fdXNlX2JpZ2ludF9pbl94ODYtNjRfcGVybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzk3YWYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9jcnlwdG9fdXNlX2JpZ2ludF9pbl94ODYtNjRfcGVybC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitVcHN0ZXJhbSBTdGF0dXM6IEJhY2twb3J0CisKK1doZW4gYnVpbGRpbmcgb24geDMyIHN5c3RlbXMgd2hlcmUgdGhlIGRlZmF1bHQgdHlwZSBpcyAzMmJpdCwgbWFrZSBzdXJlCit3ZSBjYW4gdHJhbnNwYXJlbnRseSByZXByZXNlbnQgNjRiaXQgaW50ZWdlcnMuICBPdGhlcndpc2Ugd2UgZW5kIHVwIHdpdGgKK2J1aWxkIGVycm9ycyBsaWtlOgorL3Vzci9iaW4vcGVybCBhc20vZ2hhc2gteDg2XzY0LnBsIGVsZiA+IGdoYXNoLXg4Nl82NC5zCitJbnRlZ2VyIG92ZXJmbG93IGluIGhleGFkZWNpbWFsIG51bWJlciBhdCBhc20vLi4vLi4vcGVybGFzbS94ODZfNjQteGxhdGUucGwgbGluZSAyMDEsIDw+IGxpbmUgODkwLgorLi4uCitnaGFzaC14ODZfNjQuczogQXNzZW1ibGVyIG1lc3NhZ2VzOgorZ2hhc2gteDg2XzY0LnM6ODkwOiBFcnJvcjoganVuayAnLjE1NDczMzU1NDc5OTk1ZSsxOScgYWZ0ZXIgZXhwcmVzc2lvbgorCitXZSBkb24ndCBlbmFibGUgdGhpcyBnbG9iYWxseSBhcyB0aGVyZSBhcmUgc29tZSBjYXNlcyB3aGVyZSB3ZSdkIGdldAorMzJiaXQgdmFsdWVzIGludGVycHJldGVkIGFzIHVuc2lnbmVkIHdoZW4gd2UgbmVlZCB0aGVtIGFzIHNpZ25lZC4KKworUmVwb3J0ZWQtYnk6IEJlcnRyYW5kIEphY3F1aW4gPGJlcnRyYW5kQGphY3F1aW4uYnpoPgorVVJMOiBodHRwczovL2J1Z3MuZ2VudG9vLm9yZy81NDI2MTgKKworU2lnbmVkLW9mZi1CeTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CisKK0luZGV4OiBvcGVuc3NsLTEuMC4yYS9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yYS5vcmlnL2NyeXB0by9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbAorKysrIG9wZW5zc2wtMS4wLjJhL2NyeXB0by9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbAorQEAgLTE5NCw3ICsxOTQsMTAgQEAgbXkgJWdsb2JhbHM7CisgICAgIH0KKyAgICAgc3ViIG91dCB7CisgICAgIAlteSAkc2VsZiA9IHNoaWZ0OworLQorKwkjIFdoZW4gYnVpbGRpbmcgb24geDMyIEFCSXMsIHRoZSBleHBhbmRlZCBoZXggdmFsdWUgbWlnaHQgYmUgdG9vCisrCSMgYmlnIHRvIGZpdCBpbnRvIDMyYml0cy4gRW5hYmxlIHRyYW5zcGFyZW50IDY0Yml0IHN1cHBvcnQgaGVyZQorKwkjIHNvIHdlIGNhbiBzYWZlbHkgcHJpbnQgaXQgb3V0LgorKwl1c2UgYmlnaW50OworIAlpZiAoJGdhcykgeworIAkgICAgIyBTb2xhcmlzIC91c3IvY2NzL2Jpbi9hcyBjYW4ndCBoYW5kbGUgbXVsdGlwbGljYXRpb25zCisgCSAgICAjIGluICRzZWxmLT57dmFsdWV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9jX3JlaGFzaC1jb21wYXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9jX3JlaGFzaC1jb21wYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlNTRkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2NfcmVoYXNoLWNvbXBhdC5wYXRjaApAQCAtMCwwICsxLDcxIEBACitGcm9tIDgzZjMxOGQ2OGJiZGFiMWNhODk4Yzk0NTc2YTgzOGNjOTdkZjQ3MDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMdWR3aWcgTnVzc2VsIDxsdWR3aWcubnVzc2VsQHN1c2UuZGU+CitEYXRlOiBXZWQsIDIxIEFwciAyMDEwIDE1OjUyOjEwICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGFsc28gY3JlYXRlIG9sZCBoYXNoIGZvciBjb21wYXRpYmlsaXR5CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworZGlmZiAtLWdpdCBhL3Rvb2xzL2NfcmVoYXNoLmluIGIvdG9vbHMvY19yZWhhc2guaW4KK2luZGV4IGIwODZmZjkuLmI3NzdkNzkgMTAwNjQ0CistLS0gYS90b29scy9jX3JlaGFzaC5pbgorKysrIGIvdG9vbHMvY19yZWhhc2guaW4KK0BAIC04LDggKzgsNiBAQCBteSAkcHJlZml4OworIAorIG15ICRvcGVuc3NsID0gJEVOVntPUEVOU1NMfSB8fCAib3BlbnNzbCI7CisgbXkgJHB3ZDsKKy1teSAkeDUwOWhhc2ggPSAiLXN1YmplY3RfaGFzaCI7CistbXkgJGNybGhhc2ggPSAiLWhhc2giOworIG15ICR2ZXJib3NlID0gMDsKKyBteSAkc3ltbGlua19leGlzdHM9ZXZhbCB7c3ltbGluaygiIiwiIik7IDF9OworIG15ICRyZW1vdmVsaW5rcyA9IDE7CitAQCAtMTgsMTAgKzE2LDcgQEAgbXkgJHJlbW92ZWxpbmtzID0gMTsKKyB3aGlsZSAoICRBUkdWWzBdID1+IC9eLS8gKSB7CisgICAgIG15ICRmbGFnID0gc2hpZnQgQEFSR1Y7CisgICAgIGxhc3QgaWYgKCAkZmxhZyBlcSAnLS0nKTsKKy0gICAgaWYgKCAkZmxhZyBlcSAnLW9sZCcpIHsKKy0JICAgICR4NTA5aGFzaCA9ICItc3ViamVjdF9oYXNoX29sZCI7CistCSAgICAkY3JsaGFzaCA9ICItaGFzaF9vbGQiOworLSAgICB9IGVsc2lmICggJGZsYWcgZXEgJy1oJykgeworKyAgICBpZiAoICRmbGFnIGVxICctaCcpIHsKKyAJICAgIGhlbHAoKTsKKyAgICAgfSBlbHNpZiAoICRmbGFnIGVxICctbicgKSB7CisgCSAgICAkcmVtb3ZlbGlua3MgPSAwOworQEAgLTExMyw3ICsxMDgsOSBAQCBzdWIgaGFzaF9kaXIgeworIAkJCW5leHQ7CisgCQl9CisgCQlsaW5rX2hhc2hfY2VydCgkZm5hbWUpIGlmKCRjZXJ0KTsKKysJCWxpbmtfaGFzaF9jZXJ0X29sZCgkZm5hbWUpIGlmKCRjZXJ0KTsKKyAJCWxpbmtfaGFzaF9jcmwoJGZuYW1lKSBpZigkY3JsKTsKKysJCWxpbmtfaGFzaF9jcmxfb2xkKCRmbmFtZSkgaWYoJGNybCk7CisgCX0KKyB9CisgCitAQCAtMTQ2LDYgKzE0Myw3IEBAIHN1YiBjaGVja19maWxlIHsKKyAKKyBzdWIgbGlua19oYXNoX2NlcnQgeworIAkJbXkgJGZuYW1lID0gJF9bMF07CisrCQlteSAkeDUwOWhhc2ggPSAkX1sxXSB8fCAnLXN1YmplY3RfaGFzaCc7CisgCQkkZm5hbWUgPX4gcy8nLydcXCcnL2c7CisgCQlteSAoJGhhc2gsICRmcHJpbnQpID0gYCIkb3BlbnNzbCIgeDUwOSAkeDUwOWhhc2ggLWZpbmdlcnByaW50IC1ub291dCAtaW4gIiRmbmFtZSJgOworIAkJY2hvbXAgJGhhc2g7CitAQCAtMTc2LDExICsxNzQsMjEgQEAgc3ViIGxpbmtfaGFzaF9jZXJ0IHsKKyAJCSRoYXNobGlzdHskaGFzaH0gPSAkZnByaW50OworIH0KKyAKKytzdWIgbGlua19oYXNoX2NlcnRfb2xkIHsKKysJCWxpbmtfaGFzaF9jZXJ0KCRfWzBdLCAnLXN1YmplY3RfaGFzaF9vbGQnKTsKKyt9CisrCisrc3ViIGxpbmtfaGFzaF9jcmxfb2xkIHsKKysJCWxpbmtfaGFzaF9jcmwoJF9bMF0sICctaGFzaF9vbGQnKTsKKyt9CisrCisrCisgIyBTYW1lIGFzIGFib3ZlIGV4Y2VwdCBmb3IgYSBDUkwuIENSTCBsaW5rcyBhcmUgb2YgdGhlIGZvcm0gPGhhc2g+LnI8bj4KKyAKKyBzdWIgbGlua19oYXNoX2NybCB7CisgCQlteSAkZm5hbWUgPSAkX1swXTsKKysJCW15ICRjcmxoYXNoID0gJF9bMV0gfHwgIi1oYXNoIjsKKyAJCSRmbmFtZSA9fiBzLycvJ1xcJycvZzsKKyAJCW15ICgkaGFzaCwgJGZwcmludCkgPSBgIiRvcGVuc3NsIiBjcmwgJGNybGhhc2ggLWZpbmdlcnByaW50IC1ub291dCAtaW4gJyRmbmFtZSdgOworIAkJY2hvbXAgJGhhc2g7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9jYS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2NhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYTRkNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9jYS5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtkZWJpYW5dCisKK0luZGV4OiBvcGVuc3NsLTAuOS44bS9hcHBzL0NBLnBsLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0wLjkuOG0ub3JpZy9hcHBzL0NBLnBsLmluCTIwMDYtMDQtMjggMDA6Mjg6NTEuMDAwMDAwMDAwICswMDAwCisrKysgb3BlbnNzbC0wLjkuOG0vYXBwcy9DQS5wbC5pbgkyMDEwLTAyLTI3IDAwOjM2OjUxLjAwMDAwMDAwMCArMDAwMAorQEAgLTY1LDYgKzY1LDcgQEAKKyBmb3JlYWNoIChAQVJHVikgeworIAlpZiAoIC9eKC1cP3wtaHwtaGVscCkkLyApIHsKKyAJICAgIHByaW50IFNUREVSUiAidXNhZ2U6IENBIC1uZXdjZXJ0fC1uZXdyZXF8LW5ld3JlcS1ub2Rlc3wtbmV3Y2F8LXNpZ258LXZlcmlmeVxuIjsKKysJICAgIHByaW50IFNUREVSUiAidXNhZ2U6IENBIC1zaWduY2VydCBjZXJ0ZmlsZSBrZXlmaWxlfC1uZXdjZXJ0fC1uZXdyZXF8LW5ld2NhfC1zaWdufC12ZXJpZnlcbiI7CisgCSAgICBleGl0IDA7CisgCX0gZWxzaWYgKC9eLW5ld2NlcnQkLykgeworIAkgICAgIyBjcmVhdGUgYSBjZXJ0aWZpY2F0ZQorQEAgLTE2NSw2ICsxNjYsNyBAQAorIAl9IGVsc2UgeworIAkgICAgcHJpbnQgU1RERVJSICJVbmtub3duIGFyZyAkX1xuIjsKKyAJICAgIHByaW50IFNUREVSUiAidXNhZ2U6IENBIC1uZXdjZXJ0fC1uZXdyZXF8LW5ld3JlcS1ub2Rlc3wtbmV3Y2F8LXNpZ258LXZlcmlmeVxuIjsKKysJICAgIHByaW50IFNUREVSUiAidXNhZ2U6IENBIC1zaWduY2VydCBjZXJ0ZmlsZSBrZXlmaWxlfC1uZXdjZXJ0fC1uZXdyZXF8LW5ld2NhfC1zaWdufC12ZXJpZnlcbiI7CisgCSAgICBleGl0IDE7CisgCX0KKyB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9kZWJpYW4tdGFyZ2V0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2RlYmlhbi10YXJnZXRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZDQzMjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9kZWJpYW4tdGFyZ2V0cy5wYXRjaApAQCAtMCwwICsxLDczIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtkZWJpYW5dCisKK0luZGV4OiBvcGVuc3NsLTEuMC4yL0NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9Db25maWd1cmUKKysrKyBvcGVuc3NsLTEuMC4yL0NvbmZpZ3VyZQorQEAgLTEwNyw2ICsxMDcsMTAgQEAgbXkgJGdjY19kZXZ0ZWFtX3dhcm4gPSAiLVdhbGwgLXBlZGFudGljCisgCisgbXkgJGNsYW5nX2Rpc2FibGVkX3dhcm5pbmdzID0gIi1Xbm8tbGFuZ3VhZ2UtZXh0ZW5zaW9uLXRva2VuIC1Xbm8tZXh0ZW5kZWQtb2Zmc2V0b2YgLVduby1wYWRkZWQgLVduby1zaG9ydGVuLTY0LXRvLTMyIC1Xbm8tZm9ybWF0LW5vbmxpdGVyYWwgLVduby1taXNzaW5nLW5vcmV0dXJuIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLXNpZ24tY29udmVyc2lvbiAtV25vLXVucmVhY2hhYmxlLWNvZGUgLVduby1jb252ZXJzaW9uIC1Xbm8tZG9jdW1lbnRhdGlvbiAtV25vLW1pc3NpbmctdmFyaWFibGUtZGVjbGFyYXRpb25zIC1Xbm8tY2FzdC1hbGlnbiAtV25vLWluY29tcGF0aWJsZS1wb2ludGVyLXR5cGVzLWRpc2NhcmRzLXF1YWxpZmllcnMgLVduby1taXNzaW5nLXZhcmlhYmxlLWRlY2xhcmF0aW9ucyAtV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzIC1Xbm8tdW51c2VkLW1hY3JvcyAtV25vLWRpc2FibGVkLW1hY3JvLWV4cGFuc2lvbiAtV25vLWNvbmRpdGlvbmFsLXVuaW5pdGlhbGl6ZWQgLVduby1zd2l0Y2gtZW51bSI7CisgCisrIyBUaGVyZSBhcmUgbm8gc2VwYXJhdGUgQ0ZMQUdTL0NQUEZMQUdTL0xERkxBR1MsIHNldCBldmVyeXRoaW5nIGluIENGTEFHUworK215ICRkZWJpYW5fY2ZsYWdzID0gYGRwa2ctYnVpbGRmbGFncyAtLWdldCBDRkxBR1NgIC4gYGRwa2ctYnVpbGRmbGFncyAtLWdldCBDUFBGTEFHU2AgLiBgZHBrZy1idWlsZGZsYWdzIC0tZ2V0IExERkxBR1NgIC4gIi1XYSwtLW5vZXhlY3N0YWNrIC1XYWxsIjsKKyskZGViaWFuX2NmbGFncyA9fiBzL1xuLyAvZzsKKysKKyBteSAkc3RyaWN0X3dhcm5pbmdzID0gMDsKKyAKKyBteSAkeDg2X2djY19kZXM9IkRFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwiOworQEAgLTM0Myw2ICszNDcsNTUgQEAgbXkgJXRhYmxlPSgKKyAib3NmMS1hbHBoYS1jYyIsICAiY2M6LXN0ZDEgLXR1bmUgaG9zdCAtTzQgLXJlYWRvbmx5X3N0cmluZ3M6Oih1bmtub3duKTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LOiR7YWxwaGFfYXNtfTpkbGZjbjphbHBoYS1vc2YxLXNoYXJlZDo6Oi5zbyIsCisgInRydTY0LWFscGhhLWNjIiwgImNjOi1zdGQxIC10dW5lIGhvc3QgLWZhc3QgLXJlYWRvbmx5X3N0cmluZ3M6Oi1wdGhyZWFkOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTks6JHthbHBoYV9hc219OmRsZmNuOmFscGhhLW9zZjEtc2hhcmVkOjotbXN5bTouc28iLAorIAorKyMgRGViaWFuIEdOVS8qICh2YXJpb3VzIGFyY2hpdGVjdHVyZXMpCisrImRlYmlhbi1hbHBoYSIsImdjYzotRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tYWxwaGEtZXY0IiwiZ2NjOi1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLW1jcHU9ZXY0OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tYWxwaGEtZXY1IiwiZ2NjOi1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLW1jcHU9ZXY1OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tYXJtNjQiLCJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1hcm1lbCIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke2FybXY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1hcm1oZiIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke2FybXY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1hbWQ2NCIsICJnY2M6LW02NCAtRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLURNRDMyX1JFR19UPWludDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OiIsCisrImRlYmlhbi1hdnIzMiIsICJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9IC1mb21pdC1mcmFtZS1wb2ludGVyOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkdfQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWtmcmVlYnNkLWFtZDY0IiwiZ2NjOi1tNjQgLURMX0VORElBTiAtRFRFUk1JT1MgJHtkZWJpYW5fY2ZsYWdzfSAtRE1EMzJfUkVHX1Q9aW50OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWtmcmVlYnNkLWkzODYiLCJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgJHtkZWJpYW5fY2ZsYWdzfSAtbWFyY2g9aTQ4Njo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWhwcGEiLCJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWh1cmQtaTM4NiIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLVdhLC0tbm9leGVjc3RhY2sgLWcgLW10dW5lPWk0ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1pYTY0IiwiZ2NjOi1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1pMzg2IiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWkzODYtaTQ4NiIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLW1hcmNoPWk0ODY6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1pMzg2LWk1ODYiLCJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9IC1tYXJjaD1pNTg2OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4taTM4Ni1pNjg2L2Ntb3YiLCJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9IC1tYXJjaD1pNjg2OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tbTY4ayIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVg6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tbWlwcyIsICAgImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1taXBzZWwiLCAgICJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTCBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tbWlwc24zMiIsICAgIm1pcHM2NC1saW51eC1nbnVhYmluMzItZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW1pcHNuMzJlbCIsICAgIm1pcHM2NGVsLWxpbnV4LWdudWFiaW4zMi1nY2M6LURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTCBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tbWlwczY0IiwgICAibWlwczY0LWxpbnV4LWdudWFiaTY0LWdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1taXBzNjRlbCIsICAgIm1pcHM2NGVsLWxpbnV4LWdudWFiaTY0LWdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1uZXRic2QtaTM4NiIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgJHtkZWJpYW5fY2ZsYWdzfSAtbTQ4Njo6KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tbmV0YnNkLW02OGsiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU9TICR7ZGViaWFuX2NmbGFnc306Oih1bmtub3duKTo6OkJOX0xMT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBERVNfVU5ST0xMOiR7bm9fYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tbmV0YnNkLXNwYXJjIiwJImdjYzotREJfRU5ESUFOIC1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9IC1tdjg6Oih1bmtub3duKTo6OkJOX0xMT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBERVNfVU5ST0xMOiR7bm9fYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tb3BlbmJzZC1hbHBoYSIsImdjYzotRFRFUk1JT1MgJHtkZWJpYW5fY2ZsYWdzfTo6KHVua25vd24pOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tb3BlbmJzZC1pMzg2IiwgICJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgJHtkZWJpYW5fY2ZsYWdzfSAtbTQ4Njo6KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2FzbX06YS5vdXQ6ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW9wZW5ic2QtbWlwcyIsImdjYzotRExfRU5ESUFOICR7ZGViaWFuX2NmbGFnc306Oih1bmtub3duKTo6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MyIERFU19QVFIgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tb3IxayIsICJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgREVTX1JJU0MxOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXBvd2VycGMiLCJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjMzJfYXNtfTpsaW51eDMyOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tcG93ZXJwY3NwZSIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGMzMl9hc219OmxpbnV4MzI6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1wcGM2NCIsImdjYzotbTY0IC1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjNjRfYXNtfTpsaW51eDY0OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXBwYzY0ZWwiLCJnY2M6LW02NCAtRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke3BwYzY0X2FzbX06bGludXg2NGxlOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXMzOTAiLCJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6UkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsIAorKyJkZWJpYW4tczM5MHgiLCJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNoMyIsICAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORzoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1zaDQiLCAgICJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkc6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tc2gzZWIiLCAgICJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkc6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tc2g0ZWIiLCAgICJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkc6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tbTMyciIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORzoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1zcGFyYyIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1zcGFyYy12OCIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLW1jcHU9djggLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjhfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNwYXJjLXY5IiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWNwdT12OSAtV2EsLUF2OHBsdXMgLURVTFRSQVNQQVJDIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1zcGFyYzY0IiwiZ2NjOi1tNjQgLURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9IC1EVUxUUkFTUEFSQyAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4teDMyIiwiZ2NjOi1teDMyIC1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtRE1EMzJfUkVHX1Q9aW50OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW14MzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojp4MzIiLAorKworICMjIyMKKyAjIyMjIFZhcmlldHkgb2YgTElOVVg6LSkKKyAjIyMjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9tYW4tZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbWFuLWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDg1ZTNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbWFuLWRpci5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtkZWJpYW5dCisKK0luZGV4OiBvcGVuc3NsLTEuMC4wYy9NYWtlZmlsZS5vcmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4wYy5vcmlnL01ha2VmaWxlLm9yZwkyMDEwLTEyLTEyIDE2OjExOjI3LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBjL01ha2VmaWxlLm9yZwkyMDEwLTEyLTEyIDE2OjExOjM3LjAwMDAwMDAwMCArMDEwMAorQEAgLTEzMSw3ICsxMzEsNyBAQAorIAorIE1BS0VGSUxFPSBNYWtlZmlsZQorIAorLU1BTkRJUj0kKE9QRU5TU0xESVIpL21hbgorK01BTkRJUj0vdXNyL3NoYXJlL21hbgorIE1BTjE9MQorIE1BTjM9MworIE1BTlNVRkZJWD0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL21hbi1zZWN0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbWFuLXNlY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFjMWQxYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL21hbi1zZWN0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjBjL01ha2VmaWxlLm9yZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjBjLm9yaWcvTWFrZWZpbGUub3JnCTIwMTAtMTItMTIgMTY6MTE6MzcuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUub3JnCTIwMTAtMTItMTIgMTY6MTM6MjguMDAwMDAwMDAwICswMTAwCitAQCAtMTYwLDcgKzE2MCw4IEBACisgTUFORElSPS91c3Ivc2hhcmUvbWFuCisgTUFOMT0xCisgTUFOMz0zCistTUFOU1VGRklYPQorK01BTlNVRkZJWD1zc2wKKytNQU5TRUNUSU9OPVNTTAorIEhUTUxTVUZGSVg9aHRtbAorIEhUTUxESVI9JChPUEVOU1NMRElSKS9odG1sCisgU0hFTEw9L2Jpbi9zaAorQEAgLTY1MSw3ICs2NTIsNyBAQAorIAkJZWNobyAiaW5zdGFsbGluZyBtYW4kJHNlYy8kJGZuLiQke3NlY30kKE1BTlNVRkZJWCkiOyBcCisgCQkoY2QgYCQoUEVSTCkgdXRpbC9kaXJuYW1lLnBsICQkaWA7IFwKKyAJCXNoIC1jICIkJHBvZDJtYW4gXAorLQkJCS0tc2VjdGlvbj0kJHNlYyAtLWNlbnRlcj1PcGVuU1NMIFwKKysJCQktLXNlY3Rpb249JCR7c2VjfSQoTUFOU0VDVElPTikgLS1jZW50ZXI9T3BlblNTTCBcCisgCQkJLS1yZWxlYXNlPSQoVkVSU0lPTikgYGJhc2VuYW1lICQkaWAiKSBcCisgCQkJPiAgJChJTlNUQUxMX1BSRUZJWCkkKE1BTkRJUikvbWFuJCRzZWMvJCRmbi4kJHtzZWN9JChNQU5TVUZGSVgpOyBcCisgCQkkKFBFUkwpIHV0aWwvZXh0cmFjdC1uYW1lcy5wbCA8ICQkaSB8IFwKK0BAIC02NjgsNyArNjY5LDcgQEAKKyAJCWVjaG8gImluc3RhbGxpbmcgbWFuJCRzZWMvJCRmbi4kJHtzZWN9JChNQU5TVUZGSVgpIjsgXAorIAkJKGNkIGAkKFBFUkwpIHV0aWwvZGlybmFtZS5wbCAkJGlgOyBcCisgCQlzaCAtYyAiJCRwb2QybWFuIFwKKy0JCQktLXNlY3Rpb249JCRzZWMgLS1jZW50ZXI9T3BlblNTTCBcCisrCQkJLS1zZWN0aW9uPSQke3NlY30kKE1BTlNFQ1RJT04pIC0tY2VudGVyPU9wZW5TU0wgXAorIAkJCS0tcmVsZWFzZT0kKFZFUlNJT04pIGBiYXNlbmFtZSAkJGlgIikgXAorIAkJCT4gICQoSU5TVEFMTF9QUkVGSVgpJChNQU5ESVIpL21hbiQkc2VjLyQkZm4uJCR7c2VjfSQoTUFOU1VGRklYKTsgXAorIAkJJChQRVJMKSB1dGlsL2V4dHJhY3QtbmFtZXMucGwgPCAkJGkgfCBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9uby1ycGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjY2IzYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9uby1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtkZWJpYW5dCisKK0luZGV4OiBvcGVuc3NsLTEuMC4wYy9NYWtlZmlsZS5zaGFyZWQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4wYy5vcmlnL01ha2VmaWxlLnNoYXJlZAkyMDEwLTA4LTIxIDEzOjM2OjQ5LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBjL01ha2VmaWxlLnNoYXJlZAkyMDEwLTEyLTEyIDE2OjEzOjM2LjAwMDAwMDAwMCArMDEwMAorQEAgLTE1Myw3ICsxNTMsNyBAQAorIAlOT0FMTFNZTVNGTEFHUz0nLVdsLC0tbm8td2hvbGUtYXJjaGl2ZSc7IFwKKyAJU0hBUkVERkxBR1M9IiQoQ0ZMQUdTKSAkKFNIQVJFRF9MREZMQUdTKSAtc2hhcmVkIC1XbCwtQnN5bWJvbGljIC1XbCwtc29uYW1lPSQkU0hMSUIkJFNITElCX1NPVkVSJCRTSExJQl9TVUZGSVgiCisgCistRE9fR05VX0FQUD1MREZMQUdTPSIkKENGTEFHUykgLVdsLC1ycGF0aCwkKExJQlJQQVRIKSIKKytET19HTlVfQVBQPUxERkxBR1M9IiQoQ0ZMQUdTKSIKKyAKKyAjVGhpcyBpcyByYXRoZXIgc3BlY2lhbC4gIEl0J3MgYSBzcGVjaWFsIHRhcmdldCB3aXRoIHdoaWNoIG9uZSBjYW4gbGluaworICNhcHBsaWNhdGlvbnMgd2l0aG91dCBib3RoZXJpbmcgd2l0aCBhbnkgZmVhdHVyZXMgdGhhdCBoYXZlIGFueXRoaW5nIHRvCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9uby1zeW1ib2xpYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXN5bWJvbGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNDQwOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9uby1zeW1ib2xpYy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtkZWJpYW5dCisKK0luZGV4OiBvcGVuc3NsLTEuMC4wYy9NYWtlZmlsZS5zaGFyZWQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4wYy5vcmlnL01ha2VmaWxlLnNoYXJlZAkyMDEwLTEyLTEyIDE2OjEzOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBjL01ha2VmaWxlLnNoYXJlZAkyMDEwLTEyLTEyIDE2OjEzOjQ0LjAwMDAwMDAwMCArMDEwMAorQEAgLTE1MSw3ICsxNTEsNyBAQAorIAlTSExJQl9TVUZGSVg9OyBcCisgCUFMTFNZTVNGTEFHUz0nLVdsLC0td2hvbGUtYXJjaGl2ZSc7IFwKKyAJTk9BTExTWU1TRkxBR1M9Jy1XbCwtLW5vLXdob2xlLWFyY2hpdmUnOyBcCistCVNIQVJFREZMQUdTPSIkKENGTEFHUykgJChTSEFSRURfTERGTEFHUykgLXNoYXJlZCAtV2wsLUJzeW1ib2xpYyAtV2wsLXNvbmFtZT0kJFNITElCJCRTSExJQl9TT1ZFUiQkU0hMSUJfU1VGRklYIgorKwlTSEFSRURGTEFHUz0iJChDRkxBR1MpICQoU0hBUkVEX0xERkxBR1MpIC1zaGFyZWQgLVdsLC1zb25hbWU9JCRTSExJQiQkU0hMSUJfU09WRVIkJFNITElCX1NVRkZJWCIKKyAKKyBET19HTlVfQVBQPUxERkxBR1M9IiQoQ0ZMQUdTKSIKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL3BpYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL3BpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmRhMzg4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vcGljLnBhdGNoCkBAIC0wLDAgKzEsMTc3IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtkZWJpYW5dCisKK0luZGV4OiBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGVzL2FzbS9kZXNib3RoLnBsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMWMub3JpZy9jcnlwdG8vZGVzL2FzbS9kZXNib3RoLnBsCTIwMDEtMTAtMjQgMjM6MjA6NTYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2Rlcy9hc20vZGVzYm90aC5wbAkyMDEyLTA3LTI5IDE0OjE1OjI2LjAwMDAwMDAwMCArMDIwMAorQEAgLTE2LDYgKzE2LDExIEBACisgCisgCSZwdXNoKCJlZGkiKTsKKyAKKysJJmNhbGwgICAoJmxhYmVsKCJwaWNfcG9pbnQwIikpOworKwkmc2V0X2xhYmVsKCJwaWNfcG9pbnQwIik7CisrCSZibGluZHBvcCgiZWJwIik7CisrCSZhZGQgICAgKCJlYnAiLCAiXCRfR0xPQkFMX09GRlNFVF9UQUJMRV8rWy4tIiAuICZsYWJlbCgicGljX3BvaW50MCIpIC4gIl0iKTsKKysKKyAJJmNvbW1lbnQoIiIpOworIAkmY29tbWVudCgiTG9hZCB0aGUgZGF0YSB3b3JkcyIpOworIAkmbW92KCRMLCZEV1AoMCwiZWJ4IiwiIiwwKSk7CitAQCAtNDcsMTUgKzUyLDIxIEBACisgCSZtb3YoJnN3dG1wKDIpLAkoRFdDKCgkZW5jKT8iMSI6IjAiKSkpOworIAkmbW92KCZzd3RtcCgxKSwJImVheCIpOworIAkmbW92KCZzd3RtcCgwKSwJImVieCIpOworLQkmY2FsbCgiREVTX2VuY3J5cHQyIik7CisrCSZleGNoKCJlYngiLCAiZWJwIik7CisrCSZjYWxsKCJERVNfZW5jcnlwdDJcQFBMVCIpOworKwkmZXhjaCgiZWJ4IiwgImVicCIpOworIAkmbW92KCZzd3RtcCgyKSwJKERXQygoJGVuYyk/IjAiOiIxIikpKTsKKyAJJm1vdigmc3d0bXAoMSksCSJlZGkiKTsKKyAJJm1vdigmc3d0bXAoMCksCSJlYngiKTsKKy0JJmNhbGwoIkRFU19lbmNyeXB0MiIpOworKwkmZXhjaCgiZWJ4IiwgImVicCIpOworKwkmY2FsbCgiREVTX2VuY3J5cHQyXEBQTFQiKTsKKysJJmV4Y2goImVieCIsICJlYnAiKTsKKyAJJm1vdigmc3d0bXAoMiksCShEV0MoKCRlbmMpPyIxIjoiMCIpKSk7CisgCSZtb3YoJnN3dG1wKDEpLAkiZXNpIik7CisgCSZtb3YoJnN3dG1wKDApLAkiZWJ4Iik7CistCSZjYWxsKCJERVNfZW5jcnlwdDIiKTsKKysJJmV4Y2goImVieCIsICJlYnAiKTsKKysJJmNhbGwoIkRFU19lbmNyeXB0MlxAUExUIik7CisrCSZleGNoKCJlYngiLCAiZWJwIik7CisgCisgCSZzdGFja19wb3AoMyk7CisgCSZtb3YoJEwsJkRXUCgwLCJlYngiLCIiLDApKTsKK0luZGV4OiBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcGVybGFzbS9jYmMucGwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4xYy5vcmlnL2NyeXB0by9wZXJsYXNtL2NiYy5wbAkyMDExLTA3LTEzIDA4OjIyOjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9wZXJsYXNtL2NiYy5wbAkyMDEyLTA3LTI5IDE0OjE1OjI2LjAwMDAwMDAwMCArMDIwMAorQEAgLTEyMiw3ICsxMjIsMTEgQEAKKyAJJm1vdigmRFdQKCRkYXRhX29mZiwiZXNwIiwiIiwwKSwJImVheCIpOwkjIHB1dCBpbiBhcnJheSBmb3IgY2FsbAorIAkmbW92KCZEV1AoJGRhdGFfb2ZmKzQsImVzcCIsIiIsMCksCSJlYngiKTsJIworIAorLQkmY2FsbCgkZW5jX2Z1bmMpOworKwkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQwIikpOworKwkmc2V0X2xhYmVsKCJwaWNfcG9pbnQwIik7CisrCSZibGluZHBvcCgiZWJ4Iik7CisrCSZhZGQJKCJlYngiLCAiXCRfR0xPQkFMX09GRlNFVF9UQUJMRV8rWy4tIiAuICZsYWJlbCgicGljX3BvaW50MCIpIC4gIl0iKTsKKysJJmNhbGwoIiRlbmNfZnVuY1xAUExUIik7CisgCisgCSZtb3YoImVheCIsCSZEV1AoJGRhdGFfb2ZmLCJlc3AiLCIiLDApKTsKKyAJJm1vdigiZWJ4IiwJJkRXUCgkZGF0YV9vZmYrNCwiZXNwIiwiIiwwKSk7CitAQCAtMTg1LDcgKzE4OSwxMSBAQAorIAkmbW92KCZEV1AoJGRhdGFfb2ZmLCJlc3AiLCIiLDApLAkiZWF4Iik7CSMgcHV0IGluIGFycmF5IGZvciBjYWxsCisgCSZtb3YoJkRXUCgkZGF0YV9vZmYrNCwiZXNwIiwiIiwwKSwJImVieCIpOwkjCisgCistCSZjYWxsKCRlbmNfZnVuYyk7CisrCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludDEiKSk7CisrCSZzZXRfbGFiZWwoInBpY19wb2ludDEiKTsKKysJJmJsaW5kcG9wKCJlYngiKTsKKysJJmFkZAkoImVieCIsICJcJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0iIC4gJmxhYmVsKCJwaWNfcG9pbnQxIikgLiAiXSIpOworKwkmY2FsbCgiJGVuY19mdW5jXEBQTFQiKTsKKyAKKyAJJm1vdigiZWF4IiwJJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCkpOworIAkmbW92KCJlYngiLAkmRFdQKCRkYXRhX29mZis0LCJlc3AiLCIiLDApKTsKK0BAIC0yMTgsNyArMjI2LDExIEBACisgCSZtb3YoJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCksCSJlYXgiKTsJIyBwdXQgYmFjaworIAkmbW92KCZEV1AoJGRhdGFfb2ZmKzQsImVzcCIsIiIsMCksCSJlYngiKTsJIworIAorLQkmY2FsbCgkZGVjX2Z1bmMpOworKwkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQyIikpOworKwkmc2V0X2xhYmVsKCJwaWNfcG9pbnQyIik7CisrCSZibGluZHBvcCgiZWJ4Iik7CisrCSZhZGQJKCJlYngiLCAiXCRfR0xPQkFMX09GRlNFVF9UQUJMRV8rWy4tIiAuICZsYWJlbCgicGljX3BvaW50MiIpIC4gIl0iKTsKKysJJmNhbGwoIiRkZWNfZnVuY1xAUExUIik7CisgCisgCSZtb3YoImVheCIsCSZEV1AoJGRhdGFfb2ZmLCJlc3AiLCIiLDApKTsJIyBnZXQgcmV0dXJuCisgCSZtb3YoImVieCIsCSZEV1AoJGRhdGFfb2ZmKzQsImVzcCIsIiIsMCkpOwkjCitAQCAtMjYxLDcgKzI3MywxMSBAQAorIAkmbW92KCZEV1AoJGRhdGFfb2ZmLCJlc3AiLCIiLDApLAkiZWF4Iik7CSMgcHV0IGJhY2sKKyAJJm1vdigmRFdQKCRkYXRhX29mZis0LCJlc3AiLCIiLDApLAkiZWJ4Iik7CSMKKyAKKy0JJmNhbGwoJGRlY19mdW5jKTsKKysJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50MyIpKTsKKysJJnNldF9sYWJlbCgicGljX3BvaW50MyIpOworKwkmYmxpbmRwb3AoImVieCIpOworKwkmYWRkCSgiZWJ4IiwgIlwkX0dMT0JBTF9PRkZTRVRfVEFCTEVfK1suLSIgLiAmbGFiZWwoInBpY19wb2ludDMiKSAuICJdIik7CisrCSZjYWxsKCIkZGVjX2Z1bmNcQFBMVCIpOworIAorIAkmbW92KCJlYXgiLAkmRFdQKCRkYXRhX29mZiwiZXNwIiwiIiwwKSk7CSMgZ2V0IHJldHVybgorIAkmbW92KCJlYngiLAkmRFdQKCRkYXRhX29mZis0LCJlc3AiLCIiLDApKTsJIworSW5kZXg6IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9wZXJsYXNtL3g4Nmdhcy5wbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjFjLm9yaWcvY3J5cHRvL3Blcmxhc20veDg2Z2FzLnBsCTIwMTEtMTItMDkgMjA6MTY6MzUuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3Blcmxhc20veDg2Z2FzLnBsCTIwMTItMDctMjkgMTQ6MTU6MjYuMDAwMDAwMDAwICswMjAwCitAQCAtMTYxLDYgKzE2MSw3IEBACisgCWlmICgkOjptYWNvc3gpCXsgcHVzaCAoQG91dCwiJHRtcCwyXG4iKTsgfQorIAllbHNpZiAoJDo6ZWxmKQl7IHB1c2ggKEBvdXQsIiR0bXAsNFxuIik7IH0KKyAJZWxzZQkJeyBwdXNoIChAb3V0LCIkdG1wXG4iKTsgfQorKwlpZiAoJDo6ZWxmKQl7IHB1c2ggKEBvdXQsIi5oaWRkZW5cdE9QRU5TU0xfaWEzMmNhcF9QXG4iKTsgfQorICAgICB9CisgICAgIHB1c2goQG91dCwkaW5pdHNlZykgaWYgKCRpbml0c2VnKTsKKyB9CitAQCAtMjE4LDggKzIxOSwyMyBAQAorICAgICBlbHNpZiAoJDo6ZWxmKQorICAgICB7CSRpbml0c2VnLj08PF9fXzsKKyAuc2VjdGlvbgkuaW5pdAorK19fXworKyAgICAgICAgaWYgKCQ6OnBpYykKKysJeyAgICRpbml0c2VnLj08PF9fXzsKKysJcHVzaGwJJWVieAorKwljYWxsCS5waWNfcG9pbnQwCisrLnBpY19wb2ludDA6CisrCXBvcGwJJWVieAorKwlhZGRsCVwkX0dMT0JBTF9PRkZTRVRfVEFCTEVfK1suLS5waWNfcG9pbnQwXSwlZWJ4CisrCWNhbGwJJGZcQFBMVAorKwlwb3BsCSVlYngKKytfX18KKysJfQorKwllbHNlCisrCXsgICAkaW5pdHNlZy49PDxfX187CisgCWNhbGwJJGYKKyBfX18KKysJfQorICAgICB9CisgICAgIGVsc2lmICgkOjpjb2ZmKQorICAgICB7ICAgJGluaXRzZWcuPTw8X19fOwkjIGFwcGxpZXMgdG8gYm90aCBDeWd3aW4gYW5kIE1pbmd3CitJbmRleDogb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3g4NmNwdWlkLnBsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMWMub3JpZy9jcnlwdG8veDg2Y3B1aWQucGwJMjAxMi0wMi0yOCAxNToyMDozNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8veDg2Y3B1aWQucGwJMjAxMi0wNy0yOSAxNDoxNToyNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC04LDYgKzgsOCBAQAorIAorIGZvciAoQEFSR1YpIHsgJHNzZTI9MSBpZiAoLy1ET1BFTlNTTF9JQTMyX1NTRTIvKTsgfQorIAorK3B1c2goQG91dCwgIi5oaWRkZW4gT1BFTlNTTF9pYTMyY2FwX1BcbiIpOworKworICZmdW5jdGlvbl9iZWdpbigiT1BFTlNTTF9pYTMyX2NwdWlkIik7CisgCSZ4b3IJKCJlZHgiLCJlZHgiKTsKKyAJJnB1c2hmCSgpOworQEAgLTEzOSw5ICsxNDEsNyBAQAorICZzZXRfbGFiZWwoIm5vY3B1aWQiKTsKKyAmZnVuY3Rpb25fZW5kKCJPUEVOU1NMX2lhMzJfY3B1aWQiKTsKKyAKKy0mZXh0ZXJuYWxfbGFiZWwoIk9QRU5TU0xfaWEzMmNhcF9QIik7CistCistJmZ1bmN0aW9uX2JlZ2luX0IoIk9QRU5TU0xfcmR0c2MiLCJFWFRSTlx0X09QRU5TU0xfaWEzMmNhcF9QOkRXT1JEIik7CisrJmZ1bmN0aW9uX2JlZ2luX0IoIk9QRU5TU0xfcmR0c2MiKTsKKyAJJnhvcgkoImVheCIsImVheCIpOworIAkmeG9yCSgiZWR4IiwiZWR4Iik7CisgCSZwaWNtZXVwKCJlY3giLCJPUEVOU1NMX2lhMzJjYXBfUCIpOworQEAgLTE1NSw3ICsxNTUsNyBAQAorICMgVGhpcyB3b3JrcyBpbiBSaW5nIDAgb25seSBbcmVhZCBESkdQUCtNUy1ET1MrcHJpdmlsZWdlZCBEUE1JIGhvc3RdLAorICMgYnV0IGl0J3Mgc2FmZSB0byBjYWxsIGl0IG9uIGFueSBbc3VwcG9ydGVkXSAzMi1iaXQgcGxhdGZvcm0uLi4KKyAjIEp1c3QgY2hlY2sgZm9yIFtub24tXXplcm8gcmV0dXJuIHZhbHVlLi4uCistJmZ1bmN0aW9uX2JlZ2luX0IoIk9QRU5TU0xfaW5zdHJ1bWVudF9oYWx0IiwiRVhUUk5cdF9PUEVOU1NMX2lhMzJjYXBfUDpEV09SRCIpOworKyZmdW5jdGlvbl9iZWdpbl9CKCJPUEVOU1NMX2luc3RydW1lbnRfaGFsdCIpOworIAkmcGljbWV1cCgiZWN4IiwiT1BFTlNTTF9pYTMyY2FwX1AiKTsKKyAJJmJ0CSgmRFdQKDAsImVjeCIpLDQpOworIAkmam5jCSgmbGFiZWwoIm5vaGFsdCIpKTsJIyBubyBUU0MKK0BAIC0yMjIsNyArMjIyLDcgQEAKKyAJJnJldAkoKTsKKyAmZnVuY3Rpb25fZW5kX0IoIk9QRU5TU0xfZmFyX3NwaW4iKTsKKyAKKy0mZnVuY3Rpb25fYmVnaW5fQigiT1BFTlNTTF93aXBlX2NwdSIsIkVYVFJOXHRfT1BFTlNTTF9pYTMyY2FwX1A6RFdPUkQiKTsKKysmZnVuY3Rpb25fYmVnaW5fQigiT1BFTlNTTF93aXBlX2NwdSIpOworIAkmeG9yCSgiZWF4IiwiZWF4Iik7CisgCSZ4b3IJKCJlZHgiLCJlZHgiKTsKKyAJJnBpY21ldXAoImVjeCIsIk9QRU5TU0xfaWEzMmNhcF9QIik7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi92ZXJzaW9uLXNjcmlwdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL3ZlcnNpb24tc2NyaXB0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNDkxODAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi92ZXJzaW9uLXNjcmlwdC5wYXRjaApAQCAtMCwwICsxLDQ2NjMgQEAKK0luZGV4OiBvcGVuc3NsLTEuMC4yfmJldGExLm9ic29sZXRlLjAuMDQ5ODQzNjUxNTQ5MDU3NS9Db25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yfmJldGExLm9ic29sZXRlLjAuMDQ5ODQzNjUxNTQ5MDU3NS5vcmlnL0NvbmZpZ3VyZQkyMDE0LTAyLTI0IDIxOjAyOjMwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L0NvbmZpZ3VyZQkyMDE0LTAyLTI0IDIxOjAyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTE2NTEsNiArMTY1MSw4IEBACisgCQl9CisgCX0KKyAKKyskc2hhcmVkX2xkZmxhZyAuPSAiIC1XbCwtLXZlcnNpb24tc2NyaXB0PW9wZW5zc2wubGQiOworKworIG9wZW4oSU4sJzxNYWtlZmlsZS5vcmcnKSB8fCBkaWUgInVuYWJsZSB0byByZWFkIE1ha2VmaWxlLm9yZzokIVxuIjsKKyB1bmxpbmsoIiRNYWtlZmlsZS5uZXciKSB8fCBkaWUgInVuYWJsZSB0byByZW1vdmUgb2xkICRNYWtlZmlsZS5uZXc6JCFcbiIgaWYgLWUgIiRNYWtlZmlsZS5uZXciOworIG9wZW4oT1VULCI+JE1ha2VmaWxlLm5ldyIpIHx8IGRpZSAidW5hYmxlIHRvIGNyZWF0ZSAkTWFrZWZpbGUubmV3OiQhXG4iOworSW5kZXg6IG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L29wZW5zc2wubGQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBvcGVuc3NsLTEuMC4yfmJldGExLm9ic29sZXRlLjAuMDQ5ODQzNjUxNTQ5MDU3NS9vcGVuc3NsLmxkCTIwMTQtMDItMjQgMjI6MTk6MDguNjAxODI3MjY2ICswMTAwCitAQCAtMCwwICsxLDQ2MTUgQEAKKytPUEVOU1NMXzEuMC4wIHsKKysJZ2xvYmFsOgorKwkJQklPX2Zfc3NsOworKwkJQklPX25ld19idWZmZXJfc3NsX2Nvbm5lY3Q7CisrCQlCSU9fbmV3X3NzbDsKKysJCUJJT19uZXdfc3NsX2Nvbm5lY3Q7CisrCQlCSU9fcHJveHlfc3NsX2NvcHlfc2Vzc2lvbl9pZDsKKysJCUJJT19zc2xfY29weV9zZXNzaW9uX2lkOworKwkJQklPX3NzbF9zaHV0ZG93bjsKKysJCWQyaV9TU0xfU0VTU0lPTjsKKysJCURUTFN2MV9jbGllbnRfbWV0aG9kOworKwkJRFRMU3YxX21ldGhvZDsKKysJCURUTFN2MV9zZXJ2ZXJfbWV0aG9kOworKwkJRVJSX2xvYWRfU1NMX3N0cmluZ3M7CisrCQlpMmRfU1NMX1NFU1NJT047CisrCQlrc3NsX2J1aWxkX3ByaW5jaXBhbF8yOworKwkJa3NzbF9jZ2V0X3RrdDsKKysJCWtzc2xfY2hlY2tfYXV0aGVudDsKKysJCWtzc2xfY3R4X2ZyZWU7CisrCQlrc3NsX2N0eF9uZXc7CisrCQlrc3NsX2N0eF9zZXRrZXk7CisrCQlrc3NsX2N0eF9zZXRwcmluYzsKKysJCWtzc2xfY3R4X3NldHN0cmluZzsKKysJCWtzc2xfY3R4X3Nob3c7CisrCQlrc3NsX2Vycl9zZXQ7CisrCQlrc3NsX2tyYjVfZnJlZV9kYXRhX2NvbnRlbnRzOworKwkJa3NzbF9zZ2V0X3RrdDsKKysJCWtzc2xfc2tpcF9jb25mb3VuZDsKKysJCWtzc2xfdmFsaWRhdGVfdGltZXM7CisrCQlQRU1fcmVhZF9iaW9fU1NMX1NFU1NJT047CisrCQlQRU1fcmVhZF9TU0xfU0VTU0lPTjsKKysJCVBFTV93cml0ZV9iaW9fU1NMX1NFU1NJT047CisrCQlQRU1fd3JpdGVfU1NMX1NFU1NJT047CisrCQlTU0xfYWNjZXB0OworKwkJU1NMX2FkZF9jbGllbnRfQ0E7CisrCQlTU0xfYWRkX2Rpcl9jZXJ0X3N1YmplY3RzX3RvX3N0YWNrOworKwkJU1NMX2FkZF9kaXJfY2VydF9zdWJqc190b19zdGs7CisrCQlTU0xfYWRkX2ZpbGVfY2VydF9zdWJqZWN0c190b19zdGFjazsKKysJCVNTTF9hZGRfZmlsZV9jZXJ0X3N1YmpzX3RvX3N0azsKKysJCVNTTF9hbGVydF9kZXNjX3N0cmluZzsKKysJCVNTTF9hbGVydF9kZXNjX3N0cmluZ19sb25nOworKwkJU1NMX2FsZXJ0X3R5cGVfc3RyaW5nOworKwkJU1NMX2FsZXJ0X3R5cGVfc3RyaW5nX2xvbmc7CisrCQlTU0xfY2FsbGJhY2tfY3RybDsKKysJCVNTTF9jaGVja19wcml2YXRlX2tleTsKKysJCVNTTF9DSVBIRVJfZGVzY3JpcHRpb247CisrCQlTU0xfQ0lQSEVSX2dldF9iaXRzOworKwkJU1NMX0NJUEhFUl9nZXRfbmFtZTsKKysJCVNTTF9DSVBIRVJfZ2V0X3ZlcnNpb247CisrCQlTU0xfY2xlYXI7CisrCQlTU0xfQ09NUF9hZGRfY29tcHJlc3Npb25fbWV0aG9kOworKwkJU1NMX0NPTVBfZ2V0X2NvbXByZXNzaW9uX21ldGhvZHM7CisrCQlTU0xfQ09NUF9nZXRfY29tcHJlc3NfbWV0aG9kczsKKysJCVNTTF9DT01QX2dldF9uYW1lOworKwkJU1NMX2Nvbm5lY3Q7CisrCQlTU0xfY29weV9zZXNzaW9uX2lkOworKwkJU1NMX2N0cmw7CisrCQlTU0xfQ1RYX2FkZF9jbGllbnRfQ0E7CisrCQlTU0xfQ1RYX2FkZF9zZXNzaW9uOworKwkJU1NMX0NUWF9jYWxsYmFja19jdHJsOworKwkJU1NMX0NUWF9jaGVja19wcml2YXRlX2tleTsKKysJCVNTTF9DVFhfY3RybDsKKysJCVNTTF9DVFhfZmx1c2hfc2Vzc2lvbnM7CisrCQlTU0xfQ1RYX2ZyZWU7CisrCQlTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlOworKwkJU1NMX0NUWF9nZXRfY2xpZW50X0NBX2xpc3Q7CisrCQlTU0xfQ1RYX2dldF9jbGllbnRfY2VydF9jYjsKKysJCVNTTF9DVFhfZ2V0X2V4X2RhdGE7CisrCQlTU0xfQ1RYX2dldF9leF9uZXdfaW5kZXg7CisrCQlTU0xfQ1RYX2dldF9pbmZvX2NhbGxiYWNrOworKwkJU1NMX0NUWF9nZXRfcXVpZXRfc2h1dGRvd247CisrCQlTU0xfQ1RYX2dldF90aW1lb3V0OworKwkJU1NMX0NUWF9nZXRfdmVyaWZ5X2NhbGxiYWNrOworKwkJU1NMX0NUWF9nZXRfdmVyaWZ5X2RlcHRoOworKwkJU1NMX0NUWF9nZXRfdmVyaWZ5X21vZGU7CisrCQlTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9uczsKKysJCVNTTF9DVFhfbmV3OworKwkJU1NMX0NUWF9yZW1vdmVfc2Vzc2lvbjsKKysJCVNTTF9DVFhfc2Vzc19nZXRfZ2V0X2NiOworKwkJU1NMX0NUWF9zZXNzX2dldF9uZXdfY2I7CisrCQlTU0xfQ1RYX3Nlc3NfZ2V0X3JlbW92ZV9jYjsKKysJCVNTTF9DVFhfc2Vzc2lvbnM7CisrCQlTU0xfQ1RYX3Nlc3Nfc2V0X2dldF9jYjsKKysJCVNTTF9DVFhfc2Vzc19zZXRfbmV3X2NiOworKwkJU1NMX0NUWF9zZXNzX3NldF9yZW1vdmVfY2I7CisrCQlTU0xfQ1RYX3NldDFfcGFyYW07CisrCQlTU0xfQ1RYX3NldF9jZXJ0X3N0b3JlOworKwkJU1NMX0NUWF9zZXRfY2VydF92ZXJpZnlfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF9jZXJ0X3ZlcmlmeV9jYjsKKysJCVNTTF9DVFhfc2V0X2NpcGhlcl9saXN0OworKwkJU1NMX0NUWF9zZXRfY2xpZW50X0NBX2xpc3Q7CisrCQlTU0xfQ1RYX3NldF9jbGllbnRfY2VydF9jYjsKKysJCVNTTF9DVFhfc2V0X2NsaWVudF9jZXJ0X2VuZ2luZTsKKysJCVNTTF9DVFhfc2V0X2Nvb2tpZV9nZW5lcmF0ZV9jYjsKKysJCVNTTF9DVFhfc2V0X2Nvb2tpZV92ZXJpZnlfY2I7CisrCQlTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYjsKKysJCVNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiX3VzZXJkYXRhOworKwkJU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHM7CisrCQlTU0xfQ1RYX3NldF9kZWZfcGFzc3dkX2NiX3VkOworKwkJU1NMX0NUWF9zZXRfZGVmX3ZlcmlmeV9wYXRoczsKKysJCVNTTF9DVFhfc2V0X2V4X2RhdGE7CisrCQlTU0xfQ1RYX3NldF9nZW5lcmF0ZV9zZXNzaW9uX2lkOworKwkJU1NMX0NUWF9zZXRfaW5mb19jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X21zZ19jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3Bza19jbGllbnRfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF9wc2tfc2VydmVyX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfcHVycG9zZTsKKysJCVNTTF9DVFhfc2V0X3F1aWV0X3NodXRkb3duOworKwkJU1NMX0NUWF9zZXRfc2Vzc2lvbl9pZF9jb250ZXh0OworKwkJU1NMX0NUWF9zZXRfc3NsX3ZlcnNpb247CisrCQlTU0xfQ1RYX3NldF90aW1lb3V0OworKwkJU1NMX0NUWF9zZXRfdG1wX2RoX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfdG1wX2VjZGhfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF90bXBfcnNhX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfdHJ1c3Q7CisrCQlTU0xfQ1RYX3NldF92ZXJpZnk7CisrCQlTU0xfQ1RYX3NldF92ZXJpZnlfZGVwdGg7CisrCQlTU0xfQ1RYX3VzZV9jZXJ0X2NoYWluX2ZpbGU7CisrCQlTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZTsKKysJCVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX0FTTjE7CisrCQlTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlOworKwkJU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfZmlsZTsKKysJCVNTTF9DVFhfdXNlX1ByaXZhdGVLZXk7CisrCQlTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X0FTTjE7CisrCQlTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGU7CisrCQlTU0xfQ1RYX3VzZV9wc2tfaWRlbnRpdHlfaGludDsKKysJCVNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXk7CisrCQlTU0xfQ1RYX3VzZV9SU0FQcml2YXRlS2V5X0FTTjE7CisrCQlTU0xfQ1RYX3VzZV9SU0FQcml2YXRlS2V5X2ZpbGU7CisrCQlTU0xfZG9faGFuZHNoYWtlOworKwkJU1NMX2R1cDsKKysJCVNTTF9kdXBfQ0FfbGlzdDsKKysJCVNTTGVheV9hZGRfc3NsX2FsZ29yaXRobXM7CisrCQlTU0xfZnJlZTsKKysJCVNTTF9nZXQxX3Nlc3Npb247CisrCQlTU0xfZ2V0X2NlcnRpZmljYXRlOworKwkJU1NMX2dldF9jaXBoZXJfbGlzdDsKKysJCVNTTF9nZXRfY2lwaGVyczsKKysJCVNTTF9nZXRfY2xpZW50X0NBX2xpc3Q7CisrCQlTU0xfZ2V0X2N1cnJlbnRfY2lwaGVyOworKwkJU1NMX2dldF9jdXJyZW50X2NvbXByZXNzaW9uOworKwkJU1NMX2dldF9jdXJyZW50X2V4cGFuc2lvbjsKKysJCVNTTF9nZXRfZGVmYXVsdF90aW1lb3V0OworKwkJU1NMX2dldF9lcnJvcjsKKysJCVNTTF9nZXRfZXhfZGF0YTsKKysJCVNTTF9nZXRfZXhfZGF0YV9YNTA5X1NUT1JFX0NUWF9pZHg7CisrCQlTU0xfZ2V0X2V4X2RfWDUwOV9TVE9SRV9DVFhfaWR4OworKwkJU1NMX2dldF9leF9uZXdfaW5kZXg7CisrCQlTU0xfZ2V0X2ZkOworKwkJU1NMX2dldF9maW5pc2hlZDsKKysJCVNTTF9nZXRfaW5mb19jYWxsYmFjazsKKysJCVNTTF9nZXRfcGVlcl9jZXJ0X2NoYWluOworKwkJU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlOworKwkJU1NMX2dldF9wZWVyX2ZpbmlzaGVkOworKwkJU1NMX2dldF9wcml2YXRla2V5OworKwkJU1NMX2dldF9wc2tfaWRlbnRpdHk7CisrCQlTU0xfZ2V0X3Bza19pZGVudGl0eV9oaW50OworKwkJU1NMX2dldF9xdWlldF9zaHV0ZG93bjsKKysJCVNTTF9nZXRfcmJpbzsKKysJCVNTTF9nZXRfcmVhZF9haGVhZDsKKysJCVNTTF9nZXRfcmZkOworKwkJU1NMX2dldF9zZXJ2ZXJuYW1lOworKwkJU1NMX2dldF9zZXJ2ZXJuYW1lX3R5cGU7CisrCQlTU0xfZ2V0X3Nlc3Npb247CisrCQlTU0xfZ2V0X3NoYXJlZF9jaXBoZXJzOworKwkJU1NMX2dldF9zaHV0ZG93bjsKKysJCVNTTF9nZXRfU1NMX0NUWDsKKysJCVNTTF9nZXRfc3NsX21ldGhvZDsKKysJCVNTTF9nZXRfdmVyaWZ5X2NhbGxiYWNrOworKwkJU1NMX2dldF92ZXJpZnlfZGVwdGg7CisrCQlTU0xfZ2V0X3ZlcmlmeV9tb2RlOworKwkJU1NMX2dldF92ZXJpZnlfcmVzdWx0OworKwkJU1NMX2dldF92ZXJzaW9uOworKwkJU1NMX2dldF93YmlvOworKwkJU1NMX2dldF93ZmQ7CisrCQlTU0xfaGFzX21hdGNoaW5nX3Nlc3Npb25faWQ7CisrCQlTU0xfbGlicmFyeV9pbml0OworKwkJU1NMX2xvYWRfY2xpZW50X0NBX2ZpbGU7CisrCQlTU0xfbG9hZF9lcnJvcl9zdHJpbmdzOworKwkJU1NMX25ldzsKKysJCVNTTF9wZWVrOworKwkJU1NMX3BlbmRpbmc7CisrCQlTU0xfcmVhZDsKKysJCVNTTF9yZW5lZ290aWF0ZTsKKysJCVNTTF9yZW5lZ290aWF0ZV9wZW5kaW5nOworKwkJU1NMX3JzdGF0ZV9zdHJpbmc7CisrCQlTU0xfcnN0YXRlX3N0cmluZ19sb25nOworKwkJU1NMX1NFU1NJT05fY21wOworKwkJU1NMX1NFU1NJT05fZnJlZTsKKysJCVNTTF9TRVNTSU9OX2dldF9leF9kYXRhOworKwkJU1NMX1NFU1NJT05fZ2V0X2V4X25ld19pbmRleDsKKysJCVNTTF9TRVNTSU9OX2dldF9pZDsKKysJCVNTTF9TRVNTSU9OX2dldF90aW1lOworKwkJU1NMX1NFU1NJT05fZ2V0X3RpbWVvdXQ7CisrCQlTU0xfU0VTU0lPTl9oYXNoOworKwkJU1NMX1NFU1NJT05fbmV3OworKwkJU1NMX1NFU1NJT05fcHJpbnQ7CisrCQlTU0xfU0VTU0lPTl9wcmludF9mcDsKKysJCVNTTF9TRVNTSU9OX3NldF9leF9kYXRhOworKwkJU1NMX1NFU1NJT05fc2V0X3RpbWU7CisrCQlTU0xfU0VTU0lPTl9zZXRfdGltZW91dDsKKysJCVNTTF9zZXQxX3BhcmFtOworKwkJU1NMX3NldF9hY2NlcHRfc3RhdGU7CisrCQlTU0xfc2V0X2JpbzsKKysJCVNTTF9zZXRfY2lwaGVyX2xpc3Q7CisrCQlTU0xfc2V0X2NsaWVudF9DQV9saXN0OworKwkJU1NMX3NldF9jb25uZWN0X3N0YXRlOworKwkJU1NMX3NldF9leF9kYXRhOworKwkJU1NMX3NldF9mZDsKKysJCVNTTF9zZXRfZ2VuZXJhdGVfc2Vzc2lvbl9pZDsKKysJCVNTTF9zZXRfaW5mb19jYWxsYmFjazsKKysJCVNTTF9zZXRfbXNnX2NhbGxiYWNrOworKwkJU1NMX3NldF9wc2tfY2xpZW50X2NhbGxiYWNrOworKwkJU1NMX3NldF9wc2tfc2VydmVyX2NhbGxiYWNrOworKwkJU1NMX3NldF9wdXJwb3NlOworKwkJU1NMX3NldF9xdWlldF9zaHV0ZG93bjsKKysJCVNTTF9zZXRfcmVhZF9haGVhZDsKKysJCVNTTF9zZXRfcmZkOworKwkJU1NMX3NldF9zZXNzaW9uOworKwkJU1NMX3NldF9zZXNzaW9uX2lkX2NvbnRleHQ7CisrCQlTU0xfc2V0X3Nlc3Npb25fc2VjcmV0X2NiOworKwkJU1NMX3NldF9zZXNzaW9uX3RpY2tldF9leHQ7CisrCQlTU0xfc2V0X3Nlc3Npb25fdGlja2V0X2V4dF9jYjsKKysJCVNTTF9zZXRfc2h1dGRvd247CisrCQlTU0xfc2V0X1NTTF9DVFg7CisrCQlTU0xfc2V0X3NzbF9tZXRob2Q7CisrCQlTU0xfc2V0X3RtcF9kaF9jYWxsYmFjazsKKysJCVNTTF9zZXRfdG1wX2VjZGhfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3RtcF9yc2FfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3RydXN0OworKwkJU1NMX3NldF92ZXJpZnk7CisrCQlTU0xfc2V0X3ZlcmlmeV9kZXB0aDsKKysJCVNTTF9zZXRfdmVyaWZ5X3Jlc3VsdDsKKysJCVNTTF9zZXRfd2ZkOworKwkJU1NMX3NodXRkb3duOworKwkJU1NMX3N0YXRlOworKwkJU1NMX3N0YXRlX3N0cmluZzsKKysJCVNTTF9zdGF0ZV9zdHJpbmdfbG9uZzsKKysJCVNTTF91c2VfY2VydGlmaWNhdGU7CisrCQlTU0xfdXNlX2NlcnRpZmljYXRlX0FTTjE7CisrCQlTU0xfdXNlX2NlcnRpZmljYXRlX2ZpbGU7CisrCQlTU0xfdXNlX1ByaXZhdGVLZXk7CisrCQlTU0xfdXNlX1ByaXZhdGVLZXlfQVNOMTsKKysJCVNTTF91c2VfUHJpdmF0ZUtleV9maWxlOworKwkJU1NMX3VzZV9wc2tfaWRlbnRpdHlfaGludDsKKysJCVNTTF91c2VfUlNBUHJpdmF0ZUtleTsKKysJCVNTTF91c2VfUlNBUHJpdmF0ZUtleV9BU04xOworKwkJU1NMX3VzZV9SU0FQcml2YXRlS2V5X2ZpbGU7CisrCQlTU0x2MjNfY2xpZW50X21ldGhvZDsKKysJCVNTTHYyM19tZXRob2Q7CisrCQlTU0x2MjNfc2VydmVyX21ldGhvZDsKKysJCVNTTHYyX2NsaWVudF9tZXRob2Q7CisrCQlTU0x2Ml9tZXRob2Q7CisrCQlTU0x2Ml9zZXJ2ZXJfbWV0aG9kOworKwkJU1NMdjNfY2xpZW50X21ldGhvZDsKKysJCVNTTHYzX21ldGhvZDsKKysJCVNTTHYzX3NlcnZlcl9tZXRob2Q7CisrCQlTU0xfdmVyc2lvbjsKKysJCVNTTF93YW50OworKwkJU1NMX3dyaXRlOworKwkJVExTdjFfY2xpZW50X21ldGhvZDsKKysJCVRMU3YxX21ldGhvZDsKKysJCVRMU3YxX3NlcnZlcl9tZXRob2Q7CisrCisrCisrCQlTU0xlYXk7CisrCQlTU0xlYXlfdmVyc2lvbjsKKysJCUFTTjFfQklUX1NUUklOR19hc24xX21ldGg7CisrCQlBU04xX0hFQURFUl9mcmVlOworKwkJQVNOMV9IRUFERVJfbmV3OworKwkJQVNOMV9JQTVTVFJJTkdfYXNuMV9tZXRoOworKwkJQVNOMV9JTlRFR0VSX2dldDsKKysJCUFTTjFfSU5URUdFUl9zZXQ7CisrCQlBU04xX0lOVEVHRVJfdG9fQk47CisrCQlBU04xX09CSkVDVF9jcmVhdGU7CisrCQlBU04xX09CSkVDVF9mcmVlOworKwkJQVNOMV9PQkpFQ1RfbmV3OworKwkJQVNOMV9QUklOVEFCTEVfdHlwZTsKKysJCUFTTjFfU1RSSU5HX2NtcDsKKysJCUFTTjFfU1RSSU5HX2R1cDsKKysJCUFTTjFfU1RSSU5HX2ZyZWU7CisrCQlBU04xX1NUUklOR19uZXc7CisrCQlBU04xX1NUUklOR19wcmludDsKKysJCUFTTjFfU1RSSU5HX3NldDsKKysJCUFTTjFfU1RSSU5HX3R5cGVfbmV3OworKwkJQVNOMV9UWVBFX2ZyZWU7CisrCQlBU04xX1RZUEVfbmV3OworKwkJQVNOMV9VTklWRVJTQUxTVFJJTkdfdG9fc3RyaW5nOworKwkJQVNOMV9VVENUSU1FX2NoZWNrOworKwkJQVNOMV9VVENUSU1FX3ByaW50OworKwkJQVNOMV9VVENUSU1FX3NldDsKKysJCUFTTjFfY2hlY2tfaW5maW5pdGVfZW5kOworKwkJQVNOMV9kMmlfYmlvOworKwkJQVNOMV9kMmlfZnA7CisrCQlBU04xX2RpZ2VzdDsKKysJCUFTTjFfZHVwOworKwkJQVNOMV9nZXRfb2JqZWN0OworKwkJQVNOMV9pMmRfYmlvOworKwkJQVNOMV9pMmRfZnA7CisrCQlBU04xX29iamVjdF9zaXplOworKwkJQVNOMV9wYXJzZTsKKysJCUFTTjFfcHV0X29iamVjdDsKKysJCUFTTjFfc2lnbjsKKysJCUFTTjFfdmVyaWZ5OworKwkJQkZfY2JjX2VuY3J5cHQ7CisrCQlCRl9jZmI2NF9lbmNyeXB0OworKwkJQkZfZWNiX2VuY3J5cHQ7CisrCQlCRl9lbmNyeXB0OworKwkJQkZfb2ZiNjRfZW5jcnlwdDsKKysJCUJGX29wdGlvbnM7CisrCQlCRl9zZXRfa2V5OworKwkJQklPX0NPTk5FQ1RfZnJlZTsKKysJCUJJT19DT05ORUNUX25ldzsKKysJCUJJT19hY2NlcHQ7CisrCQlCSU9fY3RybDsKKysJCUJJT19pbnRfY3RybDsKKysJCUJJT19kZWJ1Z19jYWxsYmFjazsKKysJCUJJT19kdW1wOworKwkJQklPX2R1cF9jaGFpbjsKKysJCUJJT19mX2Jhc2U2NDsKKysJCUJJT19mX2J1ZmZlcjsKKysJCUJJT19mX2NpcGhlcjsKKysJCUJJT19mX21kOworKwkJQklPX2ZfbnVsbDsKKysJCUJJT19mX3Byb3h5X3NlcnZlcjsKKysJCUJJT19mZF9ub25fZmF0YWxfZXJyb3I7CisrCQlCSU9fZmRfc2hvdWxkX3JldHJ5OworKwkJQklPX2ZpbmRfdHlwZTsKKysJCUJJT19mcmVlOworKwkJQklPX2ZyZWVfYWxsOworKwkJQklPX2dldF9hY2NlcHRfc29ja2V0OworKwkJQklPX2dldF9maWx0ZXJfYmlvOworKwkJQklPX2dldF9ob3N0X2lwOworKwkJQklPX2dldF9wb3J0OworKwkJQklPX2dldF9yZXRyeV9CSU87CisrCQlCSU9fZ2V0X3JldHJ5X3JlYXNvbjsKKysJCUJJT19nZXRob3N0YnluYW1lOworKwkJQklPX2dldHM7CisrCQlCSU9fbmV3OworKwkJQklPX25ld19hY2NlcHQ7CisrCQlCSU9fbmV3X2Nvbm5lY3Q7CisrCQlCSU9fbmV3X2ZkOworKwkJQklPX25ld19maWxlOworKwkJQklPX25ld19mcDsKKysJCUJJT19uZXdfc29ja2V0OworKwkJQklPX3BvcDsKKysJCUJJT19wcmludGY7CisrCQlCSU9fcHVzaDsKKysJCUJJT19wdXRzOworKwkJQklPX3JlYWQ7CisrCQlCSU9fc19hY2NlcHQ7CisrCQlCSU9fc19jb25uZWN0OworKwkJQklPX3NfZmQ7CisrCQlCSU9fc19maWxlOworKwkJQklPX3NfbWVtOworKwkJQklPX3NfbnVsbDsKKysJCUJJT19zX3Byb3h5X2NsaWVudDsKKysJCUJJT19zX3NvY2tldDsKKysJCUJJT19zZXQ7CisrCQlCSU9fc2V0X2NpcGhlcjsKKysJCUJJT19zZXRfdGNwX25kZWxheTsKKysJCUJJT19zb2NrX2NsZWFudXA7CisrCQlCSU9fc29ja19lcnJvcjsKKysJCUJJT19zb2NrX2luaXQ7CisrCQlCSU9fc29ja19ub25fZmF0YWxfZXJyb3I7CisrCQlCSU9fc29ja19zaG91bGRfcmV0cnk7CisrCQlCSU9fc29ja2V0X2lvY3RsOworKwkJQklPX3dyaXRlOworKwkJQk5fQ1RYX2ZyZWU7CisrCQlCTl9DVFhfbmV3OworKwkJQk5fTU9OVF9DVFhfZnJlZTsKKysJCUJOX01PTlRfQ1RYX25ldzsKKysJCUJOX01PTlRfQ1RYX3NldDsKKysJCUJOX2FkZDsKKysJCUJOX2FkZF93b3JkOworKwkJQk5faGV4MmJuOworKwkJQk5fYmluMmJuOworKwkJQk5fYm4yaGV4OworKwkJQk5fYm4yYmluOworKwkJQk5fY2xlYXI7CisrCQlCTl9jbGVhcl9iaXQ7CisrCQlCTl9jbGVhcl9mcmVlOworKwkJQk5fY21wOworKwkJQk5fY29weTsKKysJCUJOX2RpdjsKKysJCUJOX2Rpdl93b3JkOworKwkJQk5fZHVwOworKwkJQk5fZnJlZTsKKysJCUJOX2Zyb21fbW9udGdvbWVyeTsKKysJCUJOX2djZDsKKysJCUJOX2dlbmVyYXRlX3ByaW1lOworKwkJQk5fZ2V0X3dvcmQ7CisrCQlCTl9pc19iaXRfc2V0OworKwkJQk5faXNfcHJpbWU7CisrCQlCTl9sc2hpZnQ7CisrCQlCTl9sc2hpZnQxOworKwkJQk5fbWFza19iaXRzOworKwkJQk5fbW9kOworKwkJQk5fbW9kX2V4cDsKKysJCUJOX21vZF9leHBfbW9udDsKKysJCUJOX21vZF9leHBfc2ltcGxlOworKwkJQk5fbW9kX2ludmVyc2U7CisrCQlCTl9tb2RfbXVsOworKwkJQk5fbW9kX211bF9tb250Z29tZXJ5OworKwkJQk5fbW9kX3dvcmQ7CisrCQlCTl9tdWw7CisrCQlCTl9uZXc7CisrCQlCTl9udW1fYml0czsKKysJCUJOX251bV9iaXRzX3dvcmQ7CisrCQlCTl9vcHRpb25zOworKwkJQk5fcHJpbnQ7CisrCQlCTl9wcmludF9mcDsKKysJCUJOX3JhbmQ7CisrCQlCTl9yZWNpcHJvY2FsOworKwkJQk5fcnNoaWZ0OworKwkJQk5fcnNoaWZ0MTsKKysJCUJOX3NldF9iaXQ7CisrCQlCTl9zZXRfd29yZDsKKysJCUJOX3NxcjsKKysJCUJOX3N1YjsKKysJCUJOX3RvX0FTTjFfSU5URUdFUjsKKysJCUJOX3VjbXA7CisrCQlCTl92YWx1ZV9vbmU7CisrCQlCVUZfTUVNX2ZyZWU7CisrCQlCVUZfTUVNX2dyb3c7CisrCQlCVUZfTUVNX25ldzsKKysJCUJVRl9zdHJkdXA7CisrCQlDT05GX2ZyZWU7CisrCQlDT05GX2dldF9udW1iZXI7CisrCQlDT05GX2dldF9zZWN0aW9uOworKwkJQ09ORl9nZXRfc3RyaW5nOworKwkJQ09ORl9sb2FkOworKwkJQ1JZUFRPX2FkZF9sb2NrOworKwkJQ1JZUFRPX2RiZ19mcmVlOworKwkJQ1JZUFRPX2RiZ19tYWxsb2M7CisrCQlDUllQVE9fZGJnX3JlYWxsb2M7CisrCQlDUllQVE9fZGJnX3JlbWFsbG9jOworKwkJQ1JZUFRPX2ZyZWU7CisrCQlDUllQVE9fZ2V0X2FkZF9sb2NrX2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9pZF9jYWxsYmFjazsKKysJCUNSWVBUT19nZXRfbG9ja19uYW1lOworKwkJQ1JZUFRPX2dldF9sb2NraW5nX2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9tZW1fZnVuY3Rpb25zOworKwkJQ1JZUFRPX2xvY2s7CisrCQlDUllQVE9fbWFsbG9jOworKwkJQ1JZUFRPX21lbV9jdHJsOworKwkJQ1JZUFRPX21lbV9sZWFrczsKKysJCUNSWVBUT19tZW1fbGVha3NfY2I7CisrCQlDUllQVE9fbWVtX2xlYWtzX2ZwOworKwkJQ1JZUFRPX3JlYWxsb2M7CisrCQlDUllQVE9fcmVtYWxsb2M7CisrCQlDUllQVE9fc2V0X2FkZF9sb2NrX2NhbGxiYWNrOworKwkJQ1JZUFRPX3NldF9pZF9jYWxsYmFjazsKKysJCUNSWVBUT19zZXRfbG9ja2luZ19jYWxsYmFjazsKKysJCUNSWVBUT19zZXRfbWVtX2Z1bmN0aW9uczsKKysJCUNSWVBUT190aHJlYWRfaWQ7CisrCQlESF9jaGVjazsKKysJCURIX2NvbXB1dGVfa2V5OworKwkJREhfZnJlZTsKKysJCURIX2dlbmVyYXRlX2tleTsKKysJCURIX2dlbmVyYXRlX3BhcmFtZXRlcnM7CisrCQlESF9uZXc7CisrCQlESF9zaXplOworKwkJREhwYXJhbXNfcHJpbnQ7CisrCQlESHBhcmFtc19wcmludF9mcDsKKysJCURTQV9mcmVlOworKwkJRFNBX2dlbmVyYXRlX2tleTsKKysJCURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzOworKwkJRFNBX2lzX3ByaW1lOworKwkJRFNBX25ldzsKKysJCURTQV9wcmludDsKKysJCURTQV9wcmludF9mcDsKKysJCURTQV9zaWduOworKwkJRFNBX3NpZ25fc2V0dXA7CisrCQlEU0Ffc2l6ZTsKKysJCURTQV92ZXJpZnk7CisrCQlEU0FwYXJhbXNfcHJpbnQ7CisrCQlEU0FwYXJhbXNfcHJpbnRfZnA7CisrCQlFUlJfY2xlYXJfZXJyb3I7CisrCQlFUlJfZXJyb3Jfc3RyaW5nOworKwkJRVJSX2ZyZWVfc3RyaW5nczsKKysJCUVSUl9mdW5jX2Vycm9yX3N0cmluZzsKKysJCUVSUl9nZXRfZXJyX3N0YXRlX3RhYmxlOworKwkJRVJSX2dldF9lcnJvcjsKKysJCUVSUl9nZXRfZXJyb3JfbGluZTsKKysJCUVSUl9nZXRfc3RhdGU7CisrCQlFUlJfZ2V0X3N0cmluZ190YWJsZTsKKysJCUVSUl9saWJfZXJyb3Jfc3RyaW5nOworKwkJRVJSX2xvYWRfQVNOMV9zdHJpbmdzOworKwkJRVJSX2xvYWRfQklPX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9CTl9zdHJpbmdzOworKwkJRVJSX2xvYWRfQlVGX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9DT05GX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9ESF9zdHJpbmdzOworKwkJRVJSX2xvYWRfRFNBX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9FUlJfc3RyaW5nczsKKysJCUVSUl9sb2FkX0VWUF9zdHJpbmdzOworKwkJRVJSX2xvYWRfT0JKX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9QRU1fc3RyaW5nczsKKysJCUVSUl9sb2FkX1BST1hZX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9SU0Ffc3RyaW5nczsKKysJCUVSUl9sb2FkX1g1MDlfc3RyaW5nczsKKysJCUVSUl9sb2FkX2NyeXB0b19zdHJpbmdzOworKwkJRVJSX2xvYWRfc3RyaW5nczsKKysJCUVSUl9wZWVrX2Vycm9yOworKwkJRVJSX3BlZWtfZXJyb3JfbGluZTsKKysJCUVSUl9wcmludF9lcnJvcnM7CisrCQlFUlJfcHJpbnRfZXJyb3JzX2ZwOworKwkJRVJSX3B1dF9lcnJvcjsKKysJCUVSUl9yZWFzb25fZXJyb3Jfc3RyaW5nOworKwkJRVJSX3JlbW92ZV9zdGF0ZTsKKysJCUVWUF9CeXRlc1RvS2V5OworKwkJRVZQX0NJUEhFUl9DVFhfY2xlYW51cDsKKysJCUVWUF9DaXBoZXJGaW5hbDsKKysJCUVWUF9DaXBoZXJJbml0OworKwkJRVZQX0NpcGhlclVwZGF0ZTsKKysJCUVWUF9EZWNvZGVCbG9jazsKKysJCUVWUF9EZWNvZGVGaW5hbDsKKysJCUVWUF9EZWNvZGVJbml0OworKwkJRVZQX0RlY29kZVVwZGF0ZTsKKysJCUVWUF9EZWNyeXB0RmluYWw7CisrCQlFVlBfRGVjcnlwdEluaXQ7CisrCQlFVlBfRGVjcnlwdFVwZGF0ZTsKKysJCUVWUF9EaWdlc3RGaW5hbDsKKysJCUVWUF9EaWdlc3RJbml0OworKwkJRVZQX0RpZ2VzdFVwZGF0ZTsKKysJCUVWUF9FbmNvZGVCbG9jazsKKysJCUVWUF9FbmNvZGVGaW5hbDsKKysJCUVWUF9FbmNvZGVJbml0OworKwkJRVZQX0VuY29kZVVwZGF0ZTsKKysJCUVWUF9FbmNyeXB0RmluYWw7CisrCQlFVlBfRW5jcnlwdEluaXQ7CisrCQlFVlBfRW5jcnlwdFVwZGF0ZTsKKysJCUVWUF9PcGVuRmluYWw7CisrCQlFVlBfT3BlbkluaXQ7CisrCQlFVlBfUEtFWV9hc3NpZ247CisrCQlFVlBfUEtFWV9jb3B5X3BhcmFtZXRlcnM7CisrCQlFVlBfUEtFWV9mcmVlOworKwkJRVZQX1BLRVlfbWlzc2luZ19wYXJhbWV0ZXJzOworKwkJRVZQX1BLRVlfbmV3OworKwkJRVZQX1BLRVlfc2F2ZV9wYXJhbWV0ZXJzOworKwkJRVZQX1BLRVlfc2l6ZTsKKysJCUVWUF9QS0VZX3R5cGU7CisrCQlFVlBfU2VhbEZpbmFsOworKwkJRVZQX1NlYWxJbml0OworKwkJRVZQX1NpZ25GaW5hbDsKKysJCUVWUF9WZXJpZnlGaW5hbDsKKysJCUVWUF9hZGRfYWxpYXM7CisrCQlFVlBfYWRkX2NpcGhlcjsKKysJCUVWUF9hZGRfZGlnZXN0OworKwkJRVZQX2JmX2NiYzsKKysJCUVWUF9iZl9jZmI2NDsKKysJCUVWUF9iZl9lY2I7CisrCQlFVlBfYmZfb2ZiOworKwkJRVZQX2NsZWFudXA7CisrCQlFVlBfZGVzX2NiYzsKKysJCUVWUF9kZXNfY2ZiNjQ7CisrCQlFVlBfZGVzX2VjYjsKKysJCUVWUF9kZXNfZWRlOworKwkJRVZQX2Rlc19lZGUzOworKwkJRVZQX2Rlc19lZGUzX2NiYzsKKysJCUVWUF9kZXNfZWRlM19jZmI2NDsKKysJCUVWUF9kZXNfZWRlM19vZmI7CisrCQlFVlBfZGVzX2VkZV9jYmM7CisrCQlFVlBfZGVzX2VkZV9jZmI2NDsKKysJCUVWUF9kZXNfZWRlX29mYjsKKysJCUVWUF9kZXNfb2ZiOworKwkJRVZQX2Rlc3hfY2JjOworKwkJRVZQX2RzczsKKysJCUVWUF9kc3MxOworKwkJRVZQX2VuY19udWxsOworKwkJRVZQX2dldF9jaXBoZXJieW5hbWU7CisrCQlFVlBfZ2V0X2RpZ2VzdGJ5bmFtZTsKKysJCUVWUF9nZXRfcHdfcHJvbXB0OworKwkJRVZQX2lkZWFfY2JjOworKwkJRVZQX2lkZWFfY2ZiNjQ7CisrCQlFVlBfaWRlYV9lY2I7CisrCQlFVlBfaWRlYV9vZmI7CisrCQlFVlBfbWQyOworKwkJRVZQX21kNTsKKysJCUVWUF9tZF9udWxsOworKwkJRVZQX3JjMl9jYmM7CisrCQlFVlBfcmMyX2NmYjY0OworKwkJRVZQX3JjMl9lY2I7CisrCQlFVlBfcmMyX29mYjsKKysJCUVWUF9yYzQ7CisrCQlFVlBfcmVhZF9wd19zdHJpbmc7CisrCQlFVlBfc2V0X3B3X3Byb21wdDsKKysJCUVWUF9zaGE7CisrCQlFVlBfc2hhMTsKKysJCU1EMjsKKysJCU1EMl9GaW5hbDsKKysJCU1EMl9Jbml0OworKwkJTUQyX1VwZGF0ZTsKKysJCU1EMl9vcHRpb25zOworKwkJTUQ1OworKwkJTUQ1X0ZpbmFsOworKwkJTUQ1X0luaXQ7CisrCQlNRDVfVXBkYXRlOworKwkJTURDMjsKKysJCU1EQzJfRmluYWw7CisrCQlNREMyX0luaXQ7CisrCQlNREMyX1VwZGF0ZTsKKysJCU5FVFNDQVBFX1NQS0FDX2ZyZWU7CisrCQlORVRTQ0FQRV9TUEtBQ19uZXc7CisrCQlORVRTQ0FQRV9TUEtJX2ZyZWU7CisrCQlORVRTQ0FQRV9TUEtJX25ldzsKKysJCU5FVFNDQVBFX1NQS0lfc2lnbjsKKysJCU5FVFNDQVBFX1NQS0lfdmVyaWZ5OworKwkJT0JKX2FkZF9vYmplY3Q7CisrCQlPQkpfYnNlYXJjaDsKKysJCU9CSl9jbGVhbnVwOworKwkJT0JKX2NtcDsKKysJCU9CSl9jcmVhdGU7CisrCQlPQkpfZHVwOworKwkJT0JKX2xuMm5pZDsKKysJCU9CSl9uZXdfbmlkOworKwkJT0JKX25pZDJsbjsKKysJCU9CSl9uaWQyb2JqOworKwkJT0JKX25pZDJzbjsKKysJCU9CSl9vYmoybmlkOworKwkJT0JKX3NuMm5pZDsKKysJCU9CSl90eHQybmlkOworKwkJUEVNX0FTTjFfcmVhZDsKKysJCVBFTV9BU04xX3JlYWRfYmlvOworKwkJUEVNX0FTTjFfd3JpdGU7CisrCQlQRU1fQVNOMV93cml0ZV9iaW87CisrCQlQRU1fU2VhbEZpbmFsOworKwkJUEVNX1NlYWxJbml0OworKwkJUEVNX1NlYWxVcGRhdGU7CisrCQlQRU1fU2lnbkZpbmFsOworKwkJUEVNX1NpZ25Jbml0OworKwkJUEVNX1NpZ25VcGRhdGU7CisrCQlQRU1fWDUwOV9JTkZPX3JlYWQ7CisrCQlQRU1fWDUwOV9JTkZPX3JlYWRfYmlvOworKwkJUEVNX1g1MDlfSU5GT193cml0ZV9iaW87CisrCQlQRU1fZGVrX2luZm87CisrCQlQRU1fZG9faGVhZGVyOworKwkJUEVNX2dldF9FVlBfQ0lQSEVSX0lORk87CisrCQlQRU1fcHJvY190eXBlOworKwkJUEVNX3JlYWQ7CisrCQlQRU1fcmVhZF9ESHBhcmFtczsKKysJCVBFTV9yZWFkX0RTQVByaXZhdGVLZXk7CisrCQlQRU1fcmVhZF9EU0FwYXJhbXM7CisrCQlQRU1fcmVhZF9QS0NTNzsKKysJCVBFTV9yZWFkX1ByaXZhdGVLZXk7CisrCQlQRU1fcmVhZF9SU0FQcml2YXRlS2V5OworKwkJUEVNX3JlYWRfWDUwOTsKKysJCVBFTV9yZWFkX1g1MDlfQ1JMOworKwkJUEVNX3JlYWRfWDUwOV9SRVE7CisrCQlQRU1fcmVhZF9iaW87CisrCQlQRU1fcmVhZF9iaW9fREhwYXJhbXM7CisrCQlQRU1fcmVhZF9iaW9fRFNBUHJpdmF0ZUtleTsKKysJCVBFTV9yZWFkX2Jpb19EU0FwYXJhbXM7CisrCQlQRU1fcmVhZF9iaW9fUEtDUzc7CisrCQlQRU1fcmVhZF9iaW9fUHJpdmF0ZUtleTsKKysJCVBFTV9yZWFkX2Jpb19SU0FQcml2YXRlS2V5OworKwkJUEVNX3JlYWRfYmlvX1g1MDk7CisrCQlQRU1fcmVhZF9iaW9fWDUwOV9DUkw7CisrCQlQRU1fcmVhZF9iaW9fWDUwOV9SRVE7CisrCQlQRU1fd3JpdGU7CisrCQlQRU1fd3JpdGVfREhwYXJhbXM7CisrCQlQRU1fd3JpdGVfRFNBUHJpdmF0ZUtleTsKKysJCVBFTV93cml0ZV9EU0FwYXJhbXM7CisrCQlQRU1fd3JpdGVfUEtDUzc7CisrCQlQRU1fd3JpdGVfUHJpdmF0ZUtleTsKKysJCVBFTV93cml0ZV9SU0FQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX1g1MDk7CisrCQlQRU1fd3JpdGVfWDUwOV9DUkw7CisrCQlQRU1fd3JpdGVfWDUwOV9SRVE7CisrCQlQRU1fd3JpdGVfYmlvOworKwkJUEVNX3dyaXRlX2Jpb19ESHBhcmFtczsKKysJCVBFTV93cml0ZV9iaW9fRFNBUHJpdmF0ZUtleTsKKysJCVBFTV93cml0ZV9iaW9fRFNBcGFyYW1zOworKwkJUEVNX3dyaXRlX2Jpb19QS0NTNzsKKysJCVBFTV93cml0ZV9iaW9fUHJpdmF0ZUtleTsKKysJCVBFTV93cml0ZV9iaW9fUlNBUHJpdmF0ZUtleTsKKysJCVBFTV93cml0ZV9iaW9fWDUwOTsKKysJCVBFTV93cml0ZV9iaW9fWDUwOV9DUkw7CisrCQlQRU1fd3JpdGVfYmlvX1g1MDlfUkVROworKwkJUEtDUzdfRElHRVNUX2ZyZWU7CisrCQlQS0NTN19ESUdFU1RfbmV3OworKwkJUEtDUzdfRU5DUllQVF9mcmVlOworKwkJUEtDUzdfRU5DUllQVF9uZXc7CisrCQlQS0NTN19FTkNfQ09OVEVOVF9mcmVlOworKwkJUEtDUzdfRU5DX0NPTlRFTlRfbmV3OworKwkJUEtDUzdfRU5WRUxPUEVfZnJlZTsKKysJCVBLQ1M3X0VOVkVMT1BFX25ldzsKKysJCVBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX2RpZ2VzdDsKKysJCVBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX2ZyZWU7CisrCQlQS0NTN19JU1NVRVJfQU5EX1NFUklBTF9uZXc7CisrCQlQS0NTN19SRUNJUF9JTkZPX2ZyZWU7CisrCQlQS0NTN19SRUNJUF9JTkZPX25ldzsKKysJCVBLQ1M3X1NJR05FRF9mcmVlOworKwkJUEtDUzdfU0lHTkVEX25ldzsKKysJCVBLQ1M3X1NJR05FUl9JTkZPX2ZyZWU7CisrCQlQS0NTN19TSUdORVJfSU5GT19uZXc7CisrCQlQS0NTN19TSUdOX0VOVkVMT1BFX2ZyZWU7CisrCQlQS0NTN19TSUdOX0VOVkVMT1BFX25ldzsKKysJCVBLQ1M3X2R1cDsKKysJCVBLQ1M3X2ZyZWU7CisrCQlQS0NTN19uZXc7CisrCQlQUk9YWV9FTlRSWV9hZGRfbm9wcm94eTsKKysJCVBST1hZX0VOVFJZX2NsZWFyX25vcHJveHk7CisrCQlQUk9YWV9FTlRSWV9mcmVlOworKwkJUFJPWFlfRU5UUllfZ2V0X25vcHJveHk7CisrCQlQUk9YWV9FTlRSWV9uZXc7CisrCQlQUk9YWV9FTlRSWV9zZXRfc2VydmVyOworKwkJUFJPWFlfYWRkX25vcHJveHk7CisrCQlQUk9YWV9hZGRfc2VydmVyOworKwkJUFJPWFlfY2hlY2tfYnlfaG9zdDsKKysJCVBST1hZX2NoZWNrX3VybDsKKysJCVBST1hZX2NsZWFyX25vcHJveHk7CisrCQlQUk9YWV9mcmVlOworKwkJUFJPWFlfZ2V0X25vcHJveHk7CisrCQlQUk9YWV9nZXRfcHJveGllczsKKysJCVBST1hZX2dldF9wcm94eV9lbnRyeTsKKysJCVBST1hZX2xvYWRfY29uZjsKKysJCVBST1hZX25ldzsKKysJCVBST1hZX3ByaW50OworKwkJUkFORF9ieXRlczsKKysJCVJBTkRfY2xlYW51cDsKKysJCVJBTkRfZmlsZV9uYW1lOworKwkJUkFORF9sb2FkX2ZpbGU7CisrCQlSQU5EX3NjcmVlbjsKKysJCVJBTkRfc2VlZDsKKysJCVJBTkRfd3JpdGVfZmlsZTsKKysJCVJDMl9jYmNfZW5jcnlwdDsKKysJCVJDMl9jZmI2NF9lbmNyeXB0OworKwkJUkMyX2VjYl9lbmNyeXB0OworKwkJUkMyX2VuY3J5cHQ7CisrCQlSQzJfb2ZiNjRfZW5jcnlwdDsKKysJCVJDMl9zZXRfa2V5OworKwkJUkM0OworKwkJUkM0X29wdGlvbnM7CisrCQlSQzRfc2V0X2tleTsKKysJCVJTQVByaXZhdGVLZXlfYXNuMV9tZXRoOworKwkJUlNBUHJpdmF0ZUtleV9kdXA7CisrCQlSU0FQdWJsaWNLZXlfZHVwOworKwkJUlNBX1BLQ1MxX1NTTGVheTsKKysJCVJTQV9mcmVlOworKwkJUlNBX2dlbmVyYXRlX2tleTsKKysJCVJTQV9uZXc7CisrCQlSU0FfbmV3X21ldGhvZDsKKysJCVJTQV9wcmludDsKKysJCVJTQV9wcmludF9mcDsKKysJCVJTQV9wcml2YXRlX2RlY3J5cHQ7CisrCQlSU0FfcHJpdmF0ZV9lbmNyeXB0OworKwkJUlNBX3B1YmxpY19kZWNyeXB0OworKwkJUlNBX3B1YmxpY19lbmNyeXB0OworKwkJUlNBX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCVJTQV9zaWduOworKwkJUlNBX3NpZ25fQVNOMV9PQ1RFVF9TVFJJTkc7CisrCQlSU0Ffc2l6ZTsKKysJCVJTQV92ZXJpZnk7CisrCQlSU0FfdmVyaWZ5X0FTTjFfT0NURVRfU1RSSU5HOworKwkJU0hBOworKwkJU0hBMTsKKysJCVNIQTFfRmluYWw7CisrCQlTSEExX0luaXQ7CisrCQlTSEExX1VwZGF0ZTsKKysJCVNIQV9GaW5hbDsKKysJCVNIQV9Jbml0OworKwkJU0hBX1VwZGF0ZTsKKysJCU9wZW5TU0xfYWRkX2FsbF9hbGdvcml0aG1zOworKwkJT3BlblNTTF9hZGRfYWxsX2NpcGhlcnM7CisrCQlPcGVuU1NMX2FkZF9hbGxfZGlnZXN0czsKKysJCVRYVF9EQl9jcmVhdGVfaW5kZXg7CisrCQlUWFRfREJfZnJlZTsKKysJCVRYVF9EQl9nZXRfYnlfaW5kZXg7CisrCQlUWFRfREJfaW5zZXJ0OworKwkJVFhUX0RCX3JlYWQ7CisrCQlUWFRfREJfd3JpdGU7CisrCQlYNTA5X0FMR09SX2ZyZWU7CisrCQlYNTA5X0FMR09SX25ldzsKKysJCVg1MDlfQVRUUklCVVRFX2ZyZWU7CisrCQlYNTA5X0FUVFJJQlVURV9uZXc7CisrCQlYNTA5X0NJTkZfZnJlZTsKKysJCVg1MDlfQ0lORl9uZXc7CisrCQlYNTA5X0NSTF9JTkZPX2ZyZWU7CisrCQlYNTA5X0NSTF9JTkZPX25ldzsKKysJCVg1MDlfQ1JMX2FkZF9leHQ7CisrCQlYNTA5X0NSTF9jbXA7CisrCQlYNTA5X0NSTF9kZWxldGVfZXh0OworKwkJWDUwOV9DUkxfZHVwOworKwkJWDUwOV9DUkxfZnJlZTsKKysJCVg1MDlfQ1JMX2dldF9leHQ7CisrCQlYNTA5X0NSTF9nZXRfZXh0X2J5X05JRDsKKysJCVg1MDlfQ1JMX2dldF9leHRfYnlfT0JKOworKwkJWDUwOV9DUkxfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCVg1MDlfQ1JMX2dldF9leHRfY291bnQ7CisrCQlYNTA5X0NSTF9uZXc7CisrCQlYNTA5X0NSTF9zaWduOworKwkJWDUwOV9DUkxfdmVyaWZ5OworKwkJWDUwOV9FWFRFTlNJT05fY3JlYXRlX2J5X05JRDsKKysJCVg1MDlfRVhURU5TSU9OX2NyZWF0ZV9ieV9PQko7CisrCQlYNTA5X0VYVEVOU0lPTl9kdXA7CisrCQlYNTA5X0VYVEVOU0lPTl9mcmVlOworKwkJWDUwOV9FWFRFTlNJT05fZ2V0X2NyaXRpY2FsOworKwkJWDUwOV9FWFRFTlNJT05fZ2V0X2RhdGE7CisrCQlYNTA5X0VYVEVOU0lPTl9nZXRfb2JqZWN0OworKwkJWDUwOV9FWFRFTlNJT05fbmV3OworKwkJWDUwOV9FWFRFTlNJT05fc2V0X2NyaXRpY2FsOworKwkJWDUwOV9FWFRFTlNJT05fc2V0X2RhdGE7CisrCQlYNTA5X0VYVEVOU0lPTl9zZXRfb2JqZWN0OworKwkJWDUwOV9JTkZPX2ZyZWU7CisrCQlYNTA5X0lORk9fbmV3OworKwkJWDUwOV9MT09LVVBfYnlfYWxpYXM7CisrCQlYNTA5X0xPT0tVUF9ieV9maW5nZXJwcmludDsKKysJCVg1MDlfTE9PS1VQX2J5X2lzc3Vlcl9zZXJpYWw7CisrCQlYNTA5X0xPT0tVUF9ieV9zdWJqZWN0OworKwkJWDUwOV9MT09LVVBfY3RybDsKKysJCVg1MDlfTE9PS1VQX2ZpbGU7CisrCQlYNTA5X0xPT0tVUF9mcmVlOworKwkJWDUwOV9MT09LVVBfaGFzaF9kaXI7CisrCQlYNTA5X0xPT0tVUF9pbml0OworKwkJWDUwOV9MT09LVVBfbmV3OworKwkJWDUwOV9MT09LVVBfc2h1dGRvd247CisrCQlYNTA5X05BTUVfRU5UUllfY3JlYXRlX2J5X05JRDsKKysJCVg1MDlfTkFNRV9FTlRSWV9jcmVhdGVfYnlfT0JKOworKwkJWDUwOV9OQU1FX0VOVFJZX2R1cDsKKysJCVg1MDlfTkFNRV9FTlRSWV9mcmVlOworKwkJWDUwOV9OQU1FX0VOVFJZX2dldF9kYXRhOworKwkJWDUwOV9OQU1FX0VOVFJZX2dldF9vYmplY3Q7CisrCQlYNTA5X05BTUVfRU5UUllfbmV3OworKwkJWDUwOV9OQU1FX0VOVFJZX3NldF9kYXRhOworKwkJWDUwOV9OQU1FX0VOVFJZX3NldF9vYmplY3Q7CisrCQlYNTA5X05BTUVfYWRkX2VudHJ5OworKwkJWDUwOV9OQU1FX2NtcDsKKysJCVg1MDlfTkFNRV9kZWxldGVfZW50cnk7CisrCQlYNTA5X05BTUVfZGlnZXN0OworKwkJWDUwOV9OQU1FX2R1cDsKKysJCVg1MDlfTkFNRV9lbnRyeV9jb3VudDsKKysJCVg1MDlfTkFNRV9mcmVlOworKwkJWDUwOV9OQU1FX2dldF9lbnRyeTsKKysJCVg1MDlfTkFNRV9nZXRfaW5kZXhfYnlfTklEOworKwkJWDUwOV9OQU1FX2dldF9pbmRleF9ieV9PQko7CisrCQlYNTA5X05BTUVfZ2V0X3RleHRfYnlfTklEOworKwkJWDUwOV9OQU1FX2dldF90ZXh0X2J5X09CSjsKKysJCVg1MDlfTkFNRV9oYXNoOworKwkJWDUwOV9OQU1FX25ldzsKKysJCVg1MDlfTkFNRV9vbmVsaW5lOworKwkJWDUwOV9OQU1FX3ByaW50OworKwkJWDUwOV9OQU1FX3NldDsKKysJCVg1MDlfT0JKRUNUX2ZyZWVfY29udGVudHM7CisrCQlYNTA5X09CSkVDVF9yZXRyaWV2ZV9ieV9zdWJqZWN0OworKwkJWDUwOV9PQkpFQ1RfdXBfcmVmX2NvdW50OworKwkJWDUwOV9QS0VZX2ZyZWU7CisrCQlYNTA5X1BLRVlfbmV3OworKwkJWDUwOV9QVUJLRVlfZnJlZTsKKysJCVg1MDlfUFVCS0VZX2dldDsKKysJCVg1MDlfUFVCS0VZX25ldzsKKysJCVg1MDlfUFVCS0VZX3NldDsKKysJCVg1MDlfUkVRX0lORk9fZnJlZTsKKysJCVg1MDlfUkVRX0lORk9fbmV3OworKwkJWDUwOV9SRVFfZHVwOworKwkJWDUwOV9SRVFfZnJlZTsKKysJCVg1MDlfUkVRX2dldF9wdWJrZXk7CisrCQlYNTA5X1JFUV9uZXc7CisrCQlYNTA5X1JFUV9wcmludDsKKysJCVg1MDlfUkVRX3ByaW50X2ZwOworKwkJWDUwOV9SRVFfc2V0X3B1YmtleTsKKysJCVg1MDlfUkVRX3NldF9zdWJqZWN0X25hbWU7CisrCQlYNTA5X1JFUV9zZXRfdmVyc2lvbjsKKysJCVg1MDlfUkVRX3NpZ247CisrCQlYNTA5X1JFUV90b19YNTA5OworKwkJWDUwOV9SRVFfdmVyaWZ5OworKwkJWDUwOV9SRVZPS0VEX2FkZF9leHQ7CisrCQlYNTA5X1JFVk9LRURfZGVsZXRlX2V4dDsKKysJCVg1MDlfUkVWT0tFRF9mcmVlOworKwkJWDUwOV9SRVZPS0VEX2dldF9leHQ7CisrCQlYNTA5X1JFVk9LRURfZ2V0X2V4dF9ieV9OSUQ7CisrCQlYNTA5X1JFVk9LRURfZ2V0X2V4dF9ieV9PQko7CisrCQlYNTA5X1JFVk9LRURfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X2NyaXRpYzsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2NvdW50OworKwkJWDUwOV9SRVZPS0VEX25ldzsKKysJCVg1MDlfU0lHX2ZyZWU7CisrCQlYNTA5X1NJR19uZXc7CisrCQlYNTA5X1NUT1JFX0NUWF9jbGVhbnVwOworKwkJWDUwOV9TVE9SRV9DVFhfaW5pdDsKKysJCVg1MDlfU1RPUkVfYWRkX2NlcnQ7CisrCQlYNTA5X1NUT1JFX2FkZF9sb29rdXA7CisrCQlYNTA5X1NUT1JFX2ZyZWU7CisrCQlYNTA5X1NUT1JFX2dldF9ieV9zdWJqZWN0OworKwkJWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9uczsKKysJCVg1MDlfU1RPUkVfbmV3OworKwkJWDUwOV9TVE9SRV9zZXRfZGVmYXVsdF9wYXRoczsKKysJCVg1MDlfVkFMX2ZyZWU7CisrCQlYNTA5X1ZBTF9uZXc7CisrCQlYNTA5X2FkZF9leHQ7CisrCQlYNTA5X2FzbjFfbWV0aDsKKysJCVg1MDlfY2VydGlmaWNhdGVfdHlwZTsKKysJCVg1MDlfY2hlY2tfcHJpdmF0ZV9rZXk7CisrCQlYNTA5X2NtcF9jdXJyZW50X3RpbWU7CisrCQlYNTA5X2RlbGV0ZV9leHQ7CisrCQlYNTA5X2RpZ2VzdDsKKysJCVg1MDlfZHVwOworKwkJWDUwOV9mcmVlOworKwkJWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2FyZWE7CisrCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfZGlyOworKwkJWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2Rpcl9lbnY7CisrCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfZmlsZTsKKysJCVg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlX2VudjsKKysJCVg1MDlfZ2V0X2RlZmF1bHRfcHJpdmF0ZV9kaXI7CisrCQlYNTA5X2dldF9leHQ7CisrCQlYNTA5X2dldF9leHRfYnlfTklEOworKwkJWDUwOV9nZXRfZXh0X2J5X09CSjsKKysJCVg1MDlfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCVg1MDlfZ2V0X2V4dF9jb3VudDsKKysJCVg1MDlfZ2V0X2lzc3Vlcl9uYW1lOworKwkJWDUwOV9nZXRfcHVia2V5OworKwkJWDUwOV9nZXRfcHVia2V5X3BhcmFtZXRlcnM7CisrCQlYNTA5X2dldF9zZXJpYWxOdW1iZXI7CisrCQlYNTA5X2dldF9zdWJqZWN0X25hbWU7CisrCQlYNTA5X2dtdGltZV9hZGo7CisrCQlYNTA5X2lzc3Vlcl9hbmRfc2VyaWFsX2NtcDsKKysJCVg1MDlfaXNzdWVyX2FuZF9zZXJpYWxfaGFzaDsKKysJCVg1MDlfaXNzdWVyX25hbWVfY21wOworKwkJWDUwOV9pc3N1ZXJfbmFtZV9oYXNoOworKwkJWDUwOV9sb2FkX2NlcnRfZmlsZTsKKysJCVg1MDlfbmV3OworKwkJWDUwOV9wcmludDsKKysJCVg1MDlfcHJpbnRfZnA7CisrCQlYNTA5X3NldF9pc3N1ZXJfbmFtZTsKKysJCVg1MDlfc2V0X25vdEFmdGVyOworKwkJWDUwOV9zZXRfbm90QmVmb3JlOworKwkJWDUwOV9zZXRfcHVia2V5OworKwkJWDUwOV9zZXRfc2VyaWFsTnVtYmVyOworKwkJWDUwOV9zZXRfc3ViamVjdF9uYW1lOworKwkJWDUwOV9zZXRfdmVyc2lvbjsKKysJCVg1MDlfc2lnbjsKKysJCVg1MDlfc3ViamVjdF9uYW1lX2NtcDsKKysJCVg1MDlfc3ViamVjdF9uYW1lX2hhc2g7CisrCQlYNTA5X3RvX1g1MDlfUkVROworKwkJWDUwOV92ZXJpZnk7CisrCQlYNTA5X3ZlcmlmeV9jZXJ0OworKwkJWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmc7CisrCQlYNTA5djNfYWRkX2V4dDsKKysJCVg1MDl2M19hZGRfZXh0ZW5zaW9uOworKwkJWDUwOXYzX2FkZF9uZXRzY2FwZV9leHRlbnNpb25zOworKwkJWDUwOXYzX2FkZF9zdGFuZGFyZF9leHRlbnNpb25zOworKwkJWDUwOXYzX2NsZWFudXBfZXh0ZW5zaW9uczsKKysJCVg1MDl2M19kYXRhX3R5cGVfYnlfTklEOworKwkJWDUwOXYzX2RhdGFfdHlwZV9ieV9PQko7CisrCQlYNTA5djNfZGVsZXRlX2V4dDsKKysJCVg1MDl2M19nZXRfZXh0OworKwkJWDUwOXYzX2dldF9leHRfYnlfTklEOworKwkJWDUwOXYzX2dldF9leHRfYnlfT0JKOworKwkJWDUwOXYzX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlYNTA5djNfZ2V0X2V4dF9jb3VudDsKKysJCVg1MDl2M19wYWNrX3N0cmluZzsKKysJCVg1MDl2M19wYWNrX3R5cGVfYnlfTklEOworKwkJWDUwOXYzX3BhY2tfdHlwZV9ieV9PQko7CisrCQlYNTA5djNfdW5wYWNrX3N0cmluZzsKKysJCV9kZXNfY3J5cHQ7CisrCQlhMmRfQVNOMV9PQkpFQ1Q7CisrCQlhMmlfQVNOMV9JTlRFR0VSOworKwkJYTJpX0FTTjFfU1RSSU5HOworKwkJYXNuMV9GaW5pc2g7CisrCQlhc24xX0dldFNlcXVlbmNlOworKwkJYm5fZGl2X3dvcmRzOworKwkJYm5fZXhwYW5kMjsKKysJCWJuX211bF9hZGRfd29yZHM7CisrCQlibl9tdWxfd29yZHM7CisrCQlCTl91YWRkOworKwkJQk5fdXN1YjsKKysJCWJuX3Nxcl93b3JkczsKKysJCV9vc3NsX29sZF9jcnlwdDsKKysJCWQyaV9BU04xX0JJVF9TVFJJTkc7CisrCQlkMmlfQVNOMV9CT09MRUFOOworKwkJZDJpX0FTTjFfSEVBREVSOworKwkJZDJpX0FTTjFfSUE1U1RSSU5HOworKwkJZDJpX0FTTjFfSU5URUdFUjsKKysJCWQyaV9BU04xX09CSkVDVDsKKysJCWQyaV9BU04xX09DVEVUX1NUUklORzsKKysJCWQyaV9BU04xX1BSSU5UQUJMRTsKKysJCWQyaV9BU04xX1BSSU5UQUJMRVNUUklORzsKKysJCWQyaV9BU04xX1NFVDsKKysJCWQyaV9BU04xX1Q2MVNUUklORzsKKysJCWQyaV9BU04xX1RZUEU7CisrCQlkMmlfQVNOMV9VVENUSU1FOworKwkJZDJpX0FTTjFfYnl0ZXM7CisrCQlkMmlfQVNOMV90eXBlX2J5dGVzOworKwkJZDJpX0RIcGFyYW1zOworKwkJZDJpX0RTQVByaXZhdGVLZXk7CisrCQlkMmlfRFNBUHJpdmF0ZUtleV9iaW87CisrCQlkMmlfRFNBUHJpdmF0ZUtleV9mcDsKKysJCWQyaV9EU0FQdWJsaWNLZXk7CisrCQlkMmlfRFNBcGFyYW1zOworKwkJZDJpX05FVFNDQVBFX1NQS0FDOworKwkJZDJpX05FVFNDQVBFX1NQS0k7CisrCQlkMmlfTmV0c2NhcGVfUlNBOworKwkJZDJpX1BLQ1M3OworKwkJZDJpX1BLQ1M3X0RJR0VTVDsKKysJCWQyaV9QS0NTN19FTkNSWVBUOworKwkJZDJpX1BLQ1M3X0VOQ19DT05URU5UOworKwkJZDJpX1BLQ1M3X0VOVkVMT1BFOworKwkJZDJpX1BLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMOworKwkJZDJpX1BLQ1M3X1JFQ0lQX0lORk87CisrCQlkMmlfUEtDUzdfU0lHTkVEOworKwkJZDJpX1BLQ1M3X1NJR05FUl9JTkZPOworKwkJZDJpX1BLQ1M3X1NJR05fRU5WRUxPUEU7CisrCQlkMmlfUEtDUzdfYmlvOworKwkJZDJpX1BLQ1M3X2ZwOworKwkJZDJpX1ByaXZhdGVLZXk7CisrCQlkMmlfUHVibGljS2V5OworKwkJZDJpX1JTQVByaXZhdGVLZXk7CisrCQlkMmlfUlNBUHJpdmF0ZUtleV9iaW87CisrCQlkMmlfUlNBUHJpdmF0ZUtleV9mcDsKKysJCWQyaV9SU0FQdWJsaWNLZXk7CisrCQlkMmlfWDUwOTsKKysJCWQyaV9YNTA5X0FMR09SOworKwkJZDJpX1g1MDlfQVRUUklCVVRFOworKwkJZDJpX1g1MDlfQ0lORjsKKysJCWQyaV9YNTA5X0NSTDsKKysJCWQyaV9YNTA5X0NSTF9JTkZPOworKwkJZDJpX1g1MDlfQ1JMX2JpbzsKKysJCWQyaV9YNTA5X0NSTF9mcDsKKysJCWQyaV9YNTA5X0VYVEVOU0lPTjsKKysJCWQyaV9YNTA5X05BTUU7CisrCQlkMmlfWDUwOV9OQU1FX0VOVFJZOworKwkJZDJpX1g1MDlfUEtFWTsKKysJCWQyaV9YNTA5X1BVQktFWTsKKysJCWQyaV9YNTA5X1JFUTsKKysJCWQyaV9YNTA5X1JFUV9JTkZPOworKwkJZDJpX1g1MDlfUkVRX2JpbzsKKysJCWQyaV9YNTA5X1JFUV9mcDsKKysJCWQyaV9YNTA5X1JFVk9LRUQ7CisrCQlkMmlfWDUwOV9TSUc7CisrCQlkMmlfWDUwOV9WQUw7CisrCQlkMmlfWDUwOV9iaW87CisrCQlkMmlfWDUwOV9mcDsKKysJCURFU19jYmNfY2tzdW07CisrCQlERVNfY2JjX2VuY3J5cHQ7CisrCQlERVNfY2Jsb2NrX3ByaW50X2ZpbGU7CisrCQlERVNfY2ZiNjRfZW5jcnlwdDsKKysJCURFU19jZmJfZW5jcnlwdDsKKysJCURFU19kZWNyeXB0MzsKKysJCURFU19lY2IzX2VuY3J5cHQ7CisrCQlERVNfZWNiX2VuY3J5cHQ7CisrCQlERVNfZWRlM19jYmNfZW5jcnlwdDsKKysJCURFU19lZGUzX2NmYjY0X2VuY3J5cHQ7CisrCQlERVNfZWRlM19vZmI2NF9lbmNyeXB0OworKwkJREVTX2VuY19yZWFkOworKwkJREVTX2VuY193cml0ZTsKKysJCURFU19lbmNyeXB0MTsKKysJCURFU19lbmNyeXB0MjsKKysJCURFU19lbmNyeXB0MzsKKysJCURFU19mY3J5cHQ7CisrCQlERVNfaXNfd2Vha19rZXk7CisrCQlERVNfa2V5X3NjaGVkOworKwkJREVTX25jYmNfZW5jcnlwdDsKKysJCURFU19vZmI2NF9lbmNyeXB0OworKwkJREVTX29mYl9lbmNyeXB0OworKwkJREVTX29wdGlvbnM7CisrCQlERVNfcGNiY19lbmNyeXB0OworKwkJREVTX3F1YWRfY2tzdW07CisrCQlERVNfcmFuZG9tX2tleTsKKysJCV9vc3NsX29sZF9kZXNfcmFuZG9tX3NlZWQ7CisrCQlfb3NzbF9vbGRfZGVzX3JlYWRfMnBhc3N3b3JkczsKKysJCV9vc3NsX29sZF9kZXNfcmVhZF9wYXNzd29yZDsKKysJCV9vc3NsX29sZF9kZXNfcmVhZF9wdzsKKysJCV9vc3NsX29sZF9kZXNfcmVhZF9wd19zdHJpbmc7CisrCQlERVNfc2V0X2tleTsKKysJCURFU19zZXRfb2RkX3Bhcml0eTsKKysJCURFU19zdHJpbmdfdG9fMmtleXM7CisrCQlERVNfc3RyaW5nX3RvX2tleTsKKysJCURFU194Y2JjX2VuY3J5cHQ7CisrCQlERVNfeHdoaXRlX2luMm91dDsKKysJCWZjcnlwdF9ib2R5OworKwkJaTJhX0FTTjFfSU5URUdFUjsKKysJCWkyYV9BU04xX09CSkVDVDsKKysJCWkyYV9BU04xX1NUUklORzsKKysJCWkyZF9BU04xX0JJVF9TVFJJTkc7CisrCQlpMmRfQVNOMV9CT09MRUFOOworKwkJaTJkX0FTTjFfSEVBREVSOworKwkJaTJkX0FTTjFfSUE1U1RSSU5HOworKwkJaTJkX0FTTjFfSU5URUdFUjsKKysJCWkyZF9BU04xX09CSkVDVDsKKysJCWkyZF9BU04xX09DVEVUX1NUUklORzsKKysJCWkyZF9BU04xX1BSSU5UQUJMRTsKKysJCWkyZF9BU04xX1NFVDsKKysJCWkyZF9BU04xX1RZUEU7CisrCQlpMmRfQVNOMV9VVENUSU1FOworKwkJaTJkX0FTTjFfYnl0ZXM7CisrCQlpMmRfREhwYXJhbXM7CisrCQlpMmRfRFNBUHJpdmF0ZUtleTsKKysJCWkyZF9EU0FQcml2YXRlS2V5X2JpbzsKKysJCWkyZF9EU0FQcml2YXRlS2V5X2ZwOworKwkJaTJkX0RTQVB1YmxpY0tleTsKKysJCWkyZF9EU0FwYXJhbXM7CisrCQlpMmRfTkVUU0NBUEVfU1BLQUM7CisrCQlpMmRfTkVUU0NBUEVfU1BLSTsKKysJCWkyZF9OZXRzY2FwZV9SU0E7CisrCQlpMmRfUEtDUzc7CisrCQlpMmRfUEtDUzdfRElHRVNUOworKwkJaTJkX1BLQ1M3X0VOQ1JZUFQ7CisrCQlpMmRfUEtDUzdfRU5DX0NPTlRFTlQ7CisrCQlpMmRfUEtDUzdfRU5WRUxPUEU7CisrCQlpMmRfUEtDUzdfSVNTVUVSX0FORF9TRVJJQUw7CisrCQlpMmRfUEtDUzdfUkVDSVBfSU5GTzsKKysJCWkyZF9QS0NTN19TSUdORUQ7CisrCQlpMmRfUEtDUzdfU0lHTkVSX0lORk87CisrCQlpMmRfUEtDUzdfU0lHTl9FTlZFTE9QRTsKKysJCWkyZF9QS0NTN19iaW87CisrCQlpMmRfUEtDUzdfZnA7CisrCQlpMmRfUHJpdmF0ZUtleTsKKysJCWkyZF9QdWJsaWNLZXk7CisrCQlpMmRfUlNBUHJpdmF0ZUtleTsKKysJCWkyZF9SU0FQcml2YXRlS2V5X2JpbzsKKysJCWkyZF9SU0FQcml2YXRlS2V5X2ZwOworKwkJaTJkX1JTQVB1YmxpY0tleTsKKysJCWkyZF9YNTA5OworKwkJaTJkX1g1MDlfQUxHT1I7CisrCQlpMmRfWDUwOV9BVFRSSUJVVEU7CisrCQlpMmRfWDUwOV9DSU5GOworKwkJaTJkX1g1MDlfQ1JMOworKwkJaTJkX1g1MDlfQ1JMX0lORk87CisrCQlpMmRfWDUwOV9DUkxfYmlvOworKwkJaTJkX1g1MDlfQ1JMX2ZwOworKwkJaTJkX1g1MDlfRVhURU5TSU9OOworKwkJaTJkX1g1MDlfTkFNRTsKKysJCWkyZF9YNTA5X05BTUVfRU5UUlk7CisrCQlpMmRfWDUwOV9QS0VZOworKwkJaTJkX1g1MDlfUFVCS0VZOworKwkJaTJkX1g1MDlfUkVROworKwkJaTJkX1g1MDlfUkVRX0lORk87CisrCQlpMmRfWDUwOV9SRVFfYmlvOworKwkJaTJkX1g1MDlfUkVRX2ZwOworKwkJaTJkX1g1MDlfUkVWT0tFRDsKKysJCWkyZF9YNTA5X1NJRzsKKysJCWkyZF9YNTA5X1ZBTDsKKysJCWkyZF9YNTA5X2JpbzsKKysJCWkyZF9YNTA5X2ZwOworKwkJaWRlYV9jYmNfZW5jcnlwdDsKKysJCWlkZWFfY2ZiNjRfZW5jcnlwdDsKKysJCWlkZWFfZWNiX2VuY3J5cHQ7CisrCQlpZGVhX2VuY3J5cHQ7CisrCQlpZGVhX29mYjY0X2VuY3J5cHQ7CisrCQlpZGVhX29wdGlvbnM7CisrCQlpZGVhX3NldF9kZWNyeXB0X2tleTsKKysJCWlkZWFfc2V0X2VuY3J5cHRfa2V5OworKwkJbGhfZGVsZXRlOworKwkJbGhfZG9hbGw7CisrCQlsaF9kb2FsbF9hcmc7CisrCQlsaF9mcmVlOworKwkJbGhfaW5zZXJ0OworKwkJbGhfbmV3OworKwkJbGhfbm9kZV9zdGF0czsKKysJCWxoX25vZGVfc3RhdHNfYmlvOworKwkJbGhfbm9kZV91c2FnZV9zdGF0czsKKysJCWxoX25vZGVfdXNhZ2Vfc3RhdHNfYmlvOworKwkJbGhfcmV0cmlldmU7CisrCQlsaF9zdGF0czsKKysJCWxoX3N0YXRzX2JpbzsKKysJCWxoX3N0cmhhc2g7CisrCQlza19kZWxldGU7CisrCQlza19kZWxldGVfcHRyOworKwkJc2tfZHVwOworKwkJc2tfZmluZDsKKysJCXNrX2ZyZWU7CisrCQlza19pbnNlcnQ7CisrCQlza19uZXc7CisrCQlza19wb3A7CisrCQlza19wb3BfZnJlZTsKKysJCXNrX3B1c2g7CisrCQlza19zZXRfY21wX2Z1bmM7CisrCQlza19zaGlmdDsKKysJCXNrX3Vuc2hpZnQ7CisrCQlza196ZXJvOworKwkJQklPX2ZfbmJpb190ZXN0OworKwkJQVNOMV9UWVBFX2dldDsKKysJCUFTTjFfVFlQRV9zZXQ7CisrCQlQS0NTN19jb250ZW50X2ZyZWU7CisrCQlFUlJfbG9hZF9QS0NTN19zdHJpbmdzOworKwkJWDUwOV9maW5kX2J5X2lzc3Vlcl9hbmRfc2VyaWFsOworKwkJWDUwOV9maW5kX2J5X3N1YmplY3Q7CisrCQlQS0NTN19jdHJsOworKwkJUEtDUzdfc2V0X3R5cGU7CisrCQlQS0NTN19zZXRfY29udGVudDsKKysJCVBLQ1M3X1NJR05FUl9JTkZPX3NldDsKKysJCVBLQ1M3X2FkZF9zaWduZXI7CisrCQlQS0NTN19hZGRfY2VydGlmaWNhdGU7CisrCQlQS0NTN19hZGRfY3JsOworKwkJUEtDUzdfY29udGVudF9uZXc7CisrCQlQS0NTN19kYXRhU2lnbjsKKysJCVBLQ1M3X2RhdGFWZXJpZnk7CisrCQlQS0NTN19kYXRhSW5pdDsKKysJCVBLQ1M3X2FkZF9zaWduYXR1cmU7CisrCQlQS0NTN19jZXJ0X2Zyb21fc2lnbmVyX2luZm87CisrCQlQS0NTN19nZXRfc2lnbmVyX2luZm87CisrCQlFVlBfZGVsZXRlX2FsaWFzOworKwkJRVZQX21kYzI7CisrCQlQRU1fcmVhZF9iaW9fUlNBUHVibGljS2V5OworKwkJUEVNX3dyaXRlX2Jpb19SU0FQdWJsaWNLZXk7CisrCQlkMmlfUlNBUHVibGljS2V5X2JpbzsKKysJCWkyZF9SU0FQdWJsaWNLZXlfYmlvOworKwkJUEVNX3JlYWRfUlNBUHVibGljS2V5OworKwkJUEVNX3dyaXRlX1JTQVB1YmxpY0tleTsKKysJCWQyaV9SU0FQdWJsaWNLZXlfZnA7CisrCQlpMmRfUlNBUHVibGljS2V5X2ZwOworKwkJQklPX2NvcHlfbmV4dF9yZXRyeTsKKysJCVJTQV9mbGFnczsKKysJCVg1MDlfU1RPUkVfYWRkX2NybDsKKysJCVg1MDlfbG9hZF9jcmxfZmlsZTsKKysJCUVWUF9yYzJfNDBfY2JjOworKwkJRVZQX3JjNF80MDsKKysJCUVWUF9DSVBIRVJfQ1RYX2luaXQ7CisrCQlITUFDOworKwkJSE1BQ19Jbml0OworKwkJSE1BQ19VcGRhdGU7CisrCQlITUFDX0ZpbmFsOworKwkJRVJSX2dldF9uZXh0X2Vycm9yX2xpYnJhcnk7CisrCQlFVlBfUEtFWV9jbXBfcGFyYW1ldGVyczsKKysJCUhNQUNfY2xlYW51cDsKKysJCUJJT19wdHJfY3RybDsKKysJCUJJT19uZXdfZmlsZV9pbnRlcm5hbDsKKysJCUJJT19uZXdfZnBfaW50ZXJuYWw7CisrCQlCSU9fc19maWxlX2ludGVybmFsOworKwkJQk5fQkxJTkRJTkdfY29udmVydDsKKysJCUJOX0JMSU5ESU5HX2ludmVydDsKKysJCUJOX0JMSU5ESU5HX3VwZGF0ZTsKKysJCVJTQV9ibGluZGluZ19vbjsKKysJCVJTQV9ibGluZGluZ19vZmY7CisrCQlpMnRfQVNOMV9PQkpFQ1Q7CisrCQlCTl9CTElORElOR19uZXc7CisrCQlCTl9CTElORElOR19mcmVlOworKwkJRVZQX2Nhc3Q1X2NiYzsKKysJCUVWUF9jYXN0NV9jZmI2NDsKKysJCUVWUF9jYXN0NV9lY2I7CisrCQlFVlBfY2FzdDVfb2ZiOworKwkJQkZfZGVjcnlwdDsKKysJCUNBU1Rfc2V0X2tleTsKKysJCUNBU1RfZW5jcnlwdDsKKysJCUNBU1RfZGVjcnlwdDsKKysJCUNBU1RfZWNiX2VuY3J5cHQ7CisrCQlDQVNUX2NiY19lbmNyeXB0OworKwkJQ0FTVF9jZmI2NF9lbmNyeXB0OworKwkJQ0FTVF9vZmI2NF9lbmNyeXB0OworKwkJUkMyX2RlY3J5cHQ7CisrCQlPQkpfY3JlYXRlX29iamVjdHM7CisrCQlCTl9leHA7CisrCQlCTl9tdWxfd29yZDsKKysJCUJOX3N1Yl93b3JkOworKwkJQk5fZGVjMmJuOworKwkJQk5fYm4yZGVjOworKwkJQklPX2doYm5fY3RybDsKKysJCUNSWVBUT19mcmVlX2V4X2RhdGE7CisrCQlDUllQVE9fZ2V0X2V4X2RhdGE7CisrCQlDUllQVE9fc2V0X2V4X2RhdGE7CisrCQlFUlJfbG9hZF9DUllQVE9fc3RyaW5nczsKKysJCUVSUl9sb2FkX0NSWVBUT2xpYl9zdHJpbmdzOworKwkJRVZQX1BLRVlfYml0czsKKysJCU1ENV9UcmFuc2Zvcm07CisrCQlTSEExX1RyYW5zZm9ybTsKKysJCVNIQV9UcmFuc2Zvcm07CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfY2hhaW47CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfY3VycmVudF9jZXJ0OworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yX2RlcHRoOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2V4X2RhdGE7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfY2VydDsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9jaGFpbjsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9lcnJvcjsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9leF9kYXRhOworKwkJQ1JZUFRPX2R1cF9leF9kYXRhOworKwkJQ1JZUFRPX2dldF9uZXdfbG9ja2lkOworKwkJQ1JZUFRPX25ld19leF9kYXRhOworKwkJUlNBX3NldF9leF9kYXRhOworKwkJUlNBX2dldF9leF9kYXRhOworKwkJUlNBX2dldF9leF9uZXdfaW5kZXg7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfdHlwZV8xOworKwkJUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX3R5cGVfMjsKKysJCVJTQV9wYWRkaW5nX2FkZF9TU0x2MjM7CisrCQlSU0FfcGFkZGluZ19hZGRfbm9uZTsKKysJCVJTQV9wYWRkaW5nX2NoZWNrX1BLQ1MxX3R5cGVfMTsKKysJCVJTQV9wYWRkaW5nX2NoZWNrX1BLQ1MxX3R5cGVfMjsKKysJCVJTQV9wYWRkaW5nX2NoZWNrX1NTTHYyMzsKKysJCVJTQV9wYWRkaW5nX2NoZWNrX25vbmU7CisrCQlibl9hZGRfd29yZHM7CisrCQlkMmlfTmV0c2NhcGVfUlNBXzI7CisrCQlDUllQVE9fZ2V0X2V4X25ld19pbmRleDsKKysJCVJJUEVNRDE2MF9Jbml0OworKwkJUklQRU1EMTYwX1VwZGF0ZTsKKysJCVJJUEVNRDE2MF9GaW5hbDsKKysJCVJJUEVNRDE2MDsKKysJCVJJUEVNRDE2MF9UcmFuc2Zvcm07CisrCQlSQzVfMzJfc2V0X2tleTsKKysJCVJDNV8zMl9lY2JfZW5jcnlwdDsKKysJCVJDNV8zMl9lbmNyeXB0OworKwkJUkM1XzMyX2RlY3J5cHQ7CisrCQlSQzVfMzJfY2JjX2VuY3J5cHQ7CisrCQlSQzVfMzJfY2ZiNjRfZW5jcnlwdDsKKysJCVJDNV8zMl9vZmI2NF9lbmNyeXB0OworKwkJQk5fYm4ybXBpOworKwkJQk5fbXBpMmJuOworKwkJQVNOMV9CSVRfU1RSSU5HX2dldF9iaXQ7CisrCQlBU04xX0JJVF9TVFJJTkdfc2V0X2JpdDsKKysJCUJJT19nZXRfZXhfZGF0YTsKKysJCUJJT19nZXRfZXhfbmV3X2luZGV4OworKwkJQklPX3NldF9leF9kYXRhOworKwkJWDUwOXYzX2dldF9rZXlfdXNhZ2U7CisrCQlYNTA5djNfc2V0X2tleV91c2FnZTsKKysJCWEyaV9YNTA5djNfa2V5X3VzYWdlOworKwkJaTJhX1g1MDl2M19rZXlfdXNhZ2U7CisrCQlFVlBfUEtFWV9kZWNyeXB0OworKwkJRVZQX1BLRVlfZW5jcnlwdDsKKysJCVBLQ1M3X1JFQ0lQX0lORk9fc2V0OworKwkJUEtDUzdfYWRkX3JlY2lwaWVudDsKKysJCVBLQ1M3X2FkZF9yZWNpcGllbnRfaW5mbzsKKysJCVBLQ1M3X3NldF9jaXBoZXI7CisrCQlBU04xX1RZUEVfZ2V0X2ludF9vY3RldHN0cmluZzsKKysJCUFTTjFfVFlQRV9nZXRfb2N0ZXRzdHJpbmc7CisrCQlBU04xX1RZUEVfc2V0X2ludF9vY3RldHN0cmluZzsKKysJCUFTTjFfVFlQRV9zZXRfb2N0ZXRzdHJpbmc7CisrCQlBU04xX1VUQ1RJTUVfc2V0X3N0cmluZzsKKysJCUVSUl9hZGRfZXJyb3JfZGF0YTsKKysJCUVSUl9zZXRfZXJyb3JfZGF0YTsKKysJCUVWUF9DSVBIRVJfYXNuMV90b19wYXJhbTsKKysJCUVWUF9DSVBIRVJfcGFyYW1fdG9fYXNuMTsKKysJCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXY7CisrCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2OworKwkJRVZQX3JjNV8zMl8xMl8xNl9jYmM7CisrCQlFVlBfcmM1XzMyXzEyXzE2X2NmYjY0OworKwkJRVZQX3JjNV8zMl8xMl8xNl9lY2I7CisrCQlFVlBfcmM1XzMyXzEyXzE2X29mYjsKKysJCWFzbjFfYWRkX2Vycm9yOworKwkJZDJpX0FTTjFfQk1QU1RSSU5HOworKwkJaTJkX0FTTjFfQk1QU1RSSU5HOworKwkJQklPX2ZfYmVyOworKwkJQk5faW5pdDsKKysJCUNPTVBfQ1RYX25ldzsKKysJCUNPTVBfQ1RYX2ZyZWU7CisrCQlDT01QX0NUWF9jb21wcmVzc19ibG9jazsKKysJCUNPTVBfQ1RYX2V4cGFuZF9ibG9jazsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9leF9uZXdfaW5kZXg7CisrCQlPQkpfTkFNRV9hZGQ7CisrCQlCSU9fc29ja2V0X25iaW87CisrCQlFVlBfcmMyXzY0X2NiYzsKKysJCU9CSl9OQU1FX2NsZWFudXA7CisrCQlPQkpfTkFNRV9nZXQ7CisrCQlPQkpfTkFNRV9pbml0OworKwkJT0JKX05BTUVfbmV3X2luZGV4OworKwkJT0JKX05BTUVfcmVtb3ZlOworKwkJQk5fTU9OVF9DVFhfY29weTsKKysJCUJJT19uZXdfc29ja3M0YV9jb25uZWN0OworKwkJQklPX3Nfc29ja3M0YV9jb25uZWN0OworKwkJUFJPWFlfc2V0X2Nvbm5lY3RfbW9kZTsKKysJCVJBTkRfU1NMZWF5OworKwkJUkFORF9zZXRfcmFuZF9tZXRob2Q7CisrCQlSU0FfbWVtb3J5X2xvY2s7CisrCQlibl9zdWJfd29yZHM7CisrCQlibl9tdWxfbm9ybWFsOworKwkJYm5fbXVsX2NvbWJhODsKKysJCWJuX211bF9jb21iYTQ7CisrCQlibl9zcXJfbm9ybWFsOworKwkJYm5fc3FyX2NvbWJhODsKKysJCWJuX3Nxcl9jb21iYTQ7CisrCQlibl9jbXBfd29yZHM7CisrCQlibl9tdWxfcmVjdXJzaXZlOworKwkJYm5fbXVsX3BhcnRfcmVjdXJzaXZlOworKwkJYm5fc3FyX3JlY3Vyc2l2ZTsKKysJCWJuX211bF9sb3dfbm9ybWFsOworKwkJQk5fUkVDUF9DVFhfaW5pdDsKKysJCUJOX1JFQ1BfQ1RYX25ldzsKKysJCUJOX1JFQ1BfQ1RYX2ZyZWU7CisrCQlCTl9SRUNQX0NUWF9zZXQ7CisrCQlCTl9tb2RfbXVsX3JlY2lwcm9jYWw7CisrCQlCTl9tb2RfZXhwX3JlY3A7CisrCQlCTl9kaXZfcmVjcDsKKysJCUJOX0NUWF9pbml0OworKwkJQk5fTU9OVF9DVFhfaW5pdDsKKysJCVJBTkRfZ2V0X3JhbmRfbWV0aG9kOworKwkJUEtDUzdfYWRkX2F0dHJpYnV0ZTsKKysJCVBLQ1M3X2FkZF9zaWduZWRfYXR0cmlidXRlOworKwkJUEtDUzdfZGlnZXN0X2Zyb21fYXR0cmlidXRlczsKKysJCVBLQ1M3X2dldF9hdHRyaWJ1dGU7CisrCQlQS0NTN19nZXRfaXNzdWVyX2FuZF9zZXJpYWw7CisrCQlQS0NTN19nZXRfc2lnbmVkX2F0dHJpYnV0ZTsKKysJCUNPTVBfY29tcHJlc3NfYmxvY2s7CisrCQlDT01QX2V4cGFuZF9ibG9jazsKKysJCUNPTVBfcmxlOworKwkJQ09NUF96bGliOworKwkJbXNfdGltZV9kaWZmOworKwkJbXNfdGltZV9uZXc7CisrCQltc190aW1lX2ZyZWU7CisrCQltc190aW1lX2NtcDsKKysJCW1zX3RpbWVfZ2V0OworKwkJUEtDUzdfc2V0X2F0dHJpYnV0ZXM7CisrCQlQS0NTN19zZXRfc2lnbmVkX2F0dHJpYnV0ZXM7CisrCQlYNTA5X0FUVFJJQlVURV9jcmVhdGU7CisrCQlYNTA5X0FUVFJJQlVURV9kdXA7CisrCQlBU04xX0dFTkVSQUxJWkVEVElNRV9jaGVjazsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX3ByaW50OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfc2V0OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfc2V0X3N0cmluZzsKKysJCUFTTjFfVElNRV9wcmludDsKKysJCUJBU0lDX0NPTlNUUkFJTlRTX2ZyZWU7CisrCQlCQVNJQ19DT05TVFJBSU5UU19uZXc7CisrCQlFUlJfbG9hZF9YNTA5VjNfc3RyaW5nczsKKysJCU5FVFNDQVBFX0NFUlRfU0VRVUVOQ0VfZnJlZTsKKysJCU5FVFNDQVBFX0NFUlRfU0VRVUVOQ0VfbmV3OworKwkJT0JKX3R4dDJvYmo7CisrCQlQRU1fcmVhZF9ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOworKwkJUEVNX3JlYWRfTlNfQ0VSVF9TRVE7CisrCQlQRU1fcmVhZF9iaW9fTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRTsKKysJCVBFTV9yZWFkX2Jpb19OU19DRVJUX1NFUTsKKysJCVBFTV93cml0ZV9ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOworKwkJUEVNX3dyaXRlX05TX0NFUlRfU0VROworKwkJUEVNX3dyaXRlX2Jpb19ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOworKwkJUEVNX3dyaXRlX2Jpb19OU19DRVJUX1NFUTsKKysJCVg1MDlWM19FWFRfYWRkOworKwkJWDUwOVYzX0VYVF9hZGRfYWxpYXM7CisrCQlYNTA5VjNfRVhUX2FkZF9jb25mOworKwkJWDUwOVYzX0VYVF9jbGVhbnVwOworKwkJWDUwOVYzX0VYVF9jb25mOworKwkJWDUwOVYzX0VYVF9jb25mX25pZDsKKysJCVg1MDlWM19FWFRfZ2V0OworKwkJWDUwOVYzX0VYVF9nZXRfbmlkOworKwkJWDUwOVYzX0VYVF9wcmludDsKKysJCVg1MDlWM19FWFRfcHJpbnRfZnA7CisrCQlYNTA5VjNfYWRkX3N0YW5kYXJkX2V4dGVuc2lvbnM7CisrCQlYNTA5VjNfYWRkX3ZhbHVlOworKwkJWDUwOVYzX2FkZF92YWx1ZV9ib29sOworKwkJWDUwOVYzX2FkZF92YWx1ZV9pbnQ7CisrCQlYNTA5VjNfY29uZl9mcmVlOworKwkJWDUwOVYzX2dldF92YWx1ZV9ib29sOworKwkJWDUwOVYzX2dldF92YWx1ZV9pbnQ7CisrCQlYNTA5VjNfcGFyc2VfbGlzdDsKKysJCWQyaV9BU04xX0dFTkVSQUxJWkVEVElNRTsKKysJCWQyaV9BU04xX1RJTUU7CisrCQlkMmlfQkFTSUNfQ09OU1RSQUlOVFM7CisrCQlkMmlfTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRTsKKysJCWQyaV9leHRfa3U7CisrCQlleHRfa3VfZnJlZTsKKysJCWV4dF9rdV9uZXc7CisrCQlpMmRfQVNOMV9HRU5FUkFMSVpFRFRJTUU7CisrCQlpMmRfQVNOMV9USU1FOworKwkJaTJkX0JBU0lDX0NPTlNUUkFJTlRTOworKwkJaTJkX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlpMmRfZXh0X2t1OworKwkJRVZQX01EX0NUWF9jb3B5OworKwkJaTJkX0FTTjFfRU5VTUVSQVRFRDsKKysJCWQyaV9BU04xX0VOVU1FUkFURUQ7CisrCQlBU04xX0VOVU1FUkFURURfc2V0OworKwkJQVNOMV9FTlVNRVJBVEVEX2dldDsKKysJCUJOX3RvX0FTTjFfRU5VTUVSQVRFRDsKKysJCUFTTjFfRU5VTUVSQVRFRF90b19CTjsKKysJCWkyYV9BU04xX0VOVU1FUkFURUQ7CisrCQlhMmlfQVNOMV9FTlVNRVJBVEVEOworKwkJaTJkX0dFTkVSQUxfTkFNRTsKKysJCWQyaV9HRU5FUkFMX05BTUU7CisrCQlHRU5FUkFMX05BTUVfbmV3OworKwkJR0VORVJBTF9OQU1FX2ZyZWU7CisrCQlHRU5FUkFMX05BTUVTX25ldzsKKysJCUdFTkVSQUxfTkFNRVNfZnJlZTsKKysJCWQyaV9HRU5FUkFMX05BTUVTOworKwkJaTJkX0dFTkVSQUxfTkFNRVM7CisrCQlpMnZfR0VORVJBTF9OQU1FUzsKKysJCWkyc19BU04xX09DVEVUX1NUUklORzsKKysJCXMyaV9BU04xX09DVEVUX1NUUklORzsKKysJCVg1MDlWM19FWFRfY2hlY2tfY29uZjsKKysJCWhleF90b19zdHJpbmc7CisrCQlzdHJpbmdfdG9faGV4OworKwkJREVTX2VkZTNfY2JjbV9lbmNyeXB0OworKwkJUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX09BRVA7CisrCQlSU0FfcGFkZGluZ19jaGVja19QS0NTMV9PQUVQOworKwkJWDUwOV9DUkxfcHJpbnRfZnA7CisrCQlYNTA5X0NSTF9wcmludDsKKysJCWkydl9HRU5FUkFMX05BTUU7CisrCQl2MmlfR0VORVJBTF9OQU1FOworKwkJaTJkX1BLRVlfVVNBR0VfUEVSSU9EOworKwkJZDJpX1BLRVlfVVNBR0VfUEVSSU9EOworKwkJUEtFWV9VU0FHRV9QRVJJT0RfbmV3OworKwkJUEtFWV9VU0FHRV9QRVJJT0RfZnJlZTsKKysJCXYyaV9HRU5FUkFMX05BTUVTOworKwkJaTJzX0FTTjFfSU5URUdFUjsKKysJCVg1MDlWM19FWFRfZDJpOworKwkJbmFtZV9jbXA7CisrCQlzdHJfZHVwOworKwkJaTJzX0FTTjFfRU5VTUVSQVRFRDsKKysJCWkyc19BU04xX0VOVU1FUkFURURfVEFCTEU7CisrCQlCSU9fc19sb2c7CisrCQlCSU9fZl9yZWxpYWJsZTsKKysJCVBLQ1M3X2RhdGFGaW5hbDsKKysJCVBLQ1M3X2RhdGFEZWNvZGU7CisrCQlYNTA5VjNfRVhUX0NSTF9hZGRfY29uZjsKKysJCUJOX3NldF9wYXJhbXM7CisrCQlCTl9nZXRfcGFyYW1zOworKwkJQklPX2dldF9leF9udW07CisrCQlCSU9fc2V0X2V4X2ZyZWVfZnVuYzsKKysJCUVWUF9yaXBlbWQxNjA7CisrCQlBU04xX1RJTUVfc2V0OworKwkJaTJkX0FVVEhPUklUWV9LRVlJRDsKKysJCWQyaV9BVVRIT1JJVFlfS0VZSUQ7CisrCQlBVVRIT1JJVFlfS0VZSURfbmV3OworKwkJQVVUSE9SSVRZX0tFWUlEX2ZyZWU7CisrCQlBU04xX3NlcV91bnBhY2s7CisrCQlBU04xX3NlcV9wYWNrOworKwkJQVNOMV91bnBhY2tfc3RyaW5nOworKwkJQVNOMV9wYWNrX3N0cmluZzsKKysJCVBLQ1MxMl9wYWNrX3NhZmViYWc7CisrCQlQS0NTMTJfTUFLRV9LRVlCQUc7CisrCQlQS0NTOF9lbmNyeXB0OworKwkJUEtDUzEyX01BS0VfU0hLRVlCQUc7CisrCQlQS0NTMTJfcGFja19wN2RhdGE7CisrCQlQS0NTMTJfcGFja19wN2VuY2RhdGE7CisrCQlQS0NTMTJfYWRkX2xvY2Fsa2V5aWQ7CisrCQlQS0NTMTJfYWRkX2ZyaWVuZGx5bmFtZV9hc2M7CisrCQlQS0NTMTJfYWRkX2ZyaWVuZGx5bmFtZV91bmk7CisrCQlQS0NTMTJfZ2V0X2ZyaWVuZGx5bmFtZTsKKysJCVBLQ1MxMl9wYmVfY3J5cHQ7CisrCQlQS0NTMTJfZGVjcnlwdF9kMmk7CisrCQlQS0NTMTJfaTJkX2VuY3J5cHQ7CisrCQlQS0NTMTJfaW5pdDsKKysJCVBLQ1MxMl9rZXlfZ2VuX2FzYzsKKysJCVBLQ1MxMl9rZXlfZ2VuX3VuaTsKKysJCVBLQ1MxMl9nZW5fbWFjOworKwkJUEtDUzEyX3ZlcmlmeV9tYWM7CisrCQlQS0NTMTJfc2V0X21hYzsKKysJCVBLQ1MxMl9zZXR1cF9tYWM7CisrCQlPUEVOU1NMX2FzYzJ1bmk7CisrCQlPUEVOU1NMX3VuaTJhc2M7CisrCQlpMmRfUEtDUzEyX0JBR1M7CisrCQlQS0NTMTJfQkFHU19uZXc7CisrCQlkMmlfUEtDUzEyX0JBR1M7CisrCQlQS0NTMTJfQkFHU19mcmVlOworKwkJaTJkX1BLQ1MxMjsKKysJCWQyaV9QS0NTMTI7CisrCQlQS0NTMTJfbmV3OworKwkJUEtDUzEyX2ZyZWU7CisrCQlpMmRfUEtDUzEyX01BQ19EQVRBOworKwkJUEtDUzEyX01BQ19EQVRBX25ldzsKKysJCWQyaV9QS0NTMTJfTUFDX0RBVEE7CisrCQlQS0NTMTJfTUFDX0RBVEFfZnJlZTsKKysJCWkyZF9QS0NTMTJfU0FGRUJBRzsKKysJCVBLQ1MxMl9TQUZFQkFHX25ldzsKKysJCWQyaV9QS0NTMTJfU0FGRUJBRzsKKysJCVBLQ1MxMl9TQUZFQkFHX2ZyZWU7CisrCQlFUlJfbG9hZF9QS0NTMTJfc3RyaW5nczsKKysJCVBLQ1MxMl9QQkVfYWRkOworKwkJUEtDUzhfYWRkX2tleXVzYWdlOworKwkJUEtDUzEyX2dldF9hdHRyX2dlbjsKKysJCVBLQ1MxMl9wYXJzZTsKKysJCVBLQ1MxMl9jcmVhdGU7CisrCQlpMmRfUEtDUzEyX2JpbzsKKysJCWkyZF9QS0NTMTJfZnA7CisrCQlkMmlfUEtDUzEyX2JpbzsKKysJCWQyaV9QS0NTMTJfZnA7CisrCQlpMmRfUEJFUEFSQU07CisrCQlQQkVQQVJBTV9uZXc7CisrCQlkMmlfUEJFUEFSQU07CisrCQlQQkVQQVJBTV9mcmVlOworKwkJaTJkX1BLQ1M4X1BSSVZfS0VZX0lORk87CisrCQlQS0NTOF9QUklWX0tFWV9JTkZPX25ldzsKKysJCWQyaV9QS0NTOF9QUklWX0tFWV9JTkZPOworKwkJUEtDUzhfUFJJVl9LRVlfSU5GT19mcmVlOworKwkJRVZQX1BLQ1M4MlBLRVk7CisrCQlFVlBfUEtFWTJQS0NTODsKKysJCVBLQ1M4X3NldF9icm9rZW47CisrCQlFVlBfUEJFX0FMR09SX0NpcGhlckluaXQ7CisrCQlFVlBfUEJFX2FsZ19hZGQ7CisrCQlQS0NTNV9wYmVfc2V0OworKwkJRVZQX1BCRV9jbGVhbnVwOworKwkJaTJkX1NYTkVUOworKwkJZDJpX1NYTkVUOworKwkJU1hORVRfbmV3OworKwkJU1hORVRfZnJlZTsKKysJCWkyZF9TWE5FVElEOworKwkJZDJpX1NYTkVUSUQ7CisrCQlTWE5FVElEX25ldzsKKysJCVNYTkVUSURfZnJlZTsKKysJCURTQV9TSUdfbmV3OworKwkJRFNBX1NJR19mcmVlOworKwkJRFNBX2RvX3NpZ247CisrCQlEU0FfZG9fdmVyaWZ5OworKwkJZDJpX0RTQV9TSUc7CisrCQlpMmRfRFNBX1NJRzsKKysJCWkyZF9BU04xX1ZJU0lCTEVTVFJJTkc7CisrCQlkMmlfQVNOMV9WSVNJQkxFU1RSSU5HOworKwkJaTJkX0FTTjFfVVRGOFNUUklORzsKKysJCWQyaV9BU04xX1VURjhTVFJJTkc7CisrCQlpMmRfRElSRUNUT1JZU1RSSU5HOworKwkJZDJpX0RJUkVDVE9SWVNUUklORzsKKysJCWkyZF9ESVNQTEFZVEVYVDsKKysJCWQyaV9ESVNQTEFZVEVYVDsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5OworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDk7CisrCQlpMmRfUEJLREYyUEFSQU07CisrCQlQQktERjJQQVJBTV9uZXc7CisrCQlkMmlfUEJLREYyUEFSQU07CisrCQlQQktERjJQQVJBTV9mcmVlOworKwkJaTJkX1BCRTJQQVJBTTsKKysJCVBCRTJQQVJBTV9uZXc7CisrCQlkMmlfUEJFMlBBUkFNOworKwkJUEJFMlBBUkFNX2ZyZWU7CisrCQlkMmlfQVNOMV9TRVRfT0ZfR0VORVJBTF9OQU1FOworKwkJaTJkX0FTTjFfU0VUX09GX0dFTkVSQUxfTkFNRTsKKysJCWQyaV9BU04xX1NFVF9PRl9TWE5FVElEOworKwkJaTJkX0FTTjFfU0VUX09GX1NYTkVUSUQ7CisrCQlkMmlfQVNOMV9TRVRfT0ZfUE9MSUNZUVVBTElORk87CisrCQlpMmRfQVNOMV9TRVRfT0ZfUE9MSUNZUVVBTElORk87CisrCQlkMmlfQVNOMV9TRVRfT0ZfUE9MSUNZSU5GTzsKKysJCWkyZF9BU04xX1NFVF9PRl9QT0xJQ1lJTkZPOworKwkJU1hORVRfYWRkX2lkX2FzYzsKKysJCVNYTkVUX2FkZF9pZF91bG9uZzsKKysJCVNYTkVUX2FkZF9pZF9JTlRFR0VSOworKwkJU1hORVRfZ2V0X2lkX2FzYzsKKysJCVNYTkVUX2dldF9pZF91bG9uZzsKKysJCVNYTkVUX2dldF9pZF9JTlRFR0VSOworKwkJWDUwOVYzX3NldF9jb25mX2xoYXNoOworKwkJaTJkX0NFUlRJRklDQVRFUE9MSUNJRVM7CisrCQlDRVJUSUZJQ0FURVBPTElDSUVTX25ldzsKKysJCUNFUlRJRklDQVRFUE9MSUNJRVNfZnJlZTsKKysJCWQyaV9DRVJUSUZJQ0FURVBPTElDSUVTOworKwkJaTJkX1BPTElDWUlORk87CisrCQlQT0xJQ1lJTkZPX25ldzsKKysJCWQyaV9QT0xJQ1lJTkZPOworKwkJUE9MSUNZSU5GT19mcmVlOworKwkJaTJkX1BPTElDWVFVQUxJTkZPOworKwkJUE9MSUNZUVVBTElORk9fbmV3OworKwkJZDJpX1BPTElDWVFVQUxJTkZPOworKwkJUE9MSUNZUVVBTElORk9fZnJlZTsKKysJCWkyZF9VU0VSTk9USUNFOworKwkJVVNFUk5PVElDRV9uZXc7CisrCQlkMmlfVVNFUk5PVElDRTsKKysJCVVTRVJOT1RJQ0VfZnJlZTsKKysJCWkyZF9OT1RJQ0VSRUY7CisrCQlOT1RJQ0VSRUZfbmV3OworKwkJZDJpX05PVElDRVJFRjsKKysJCU5PVElDRVJFRl9mcmVlOworKwkJWDUwOVYzX2dldF9zdHJpbmc7CisrCQlYNTA5VjNfZ2V0X3NlY3Rpb247CisrCQlYNTA5VjNfc3RyaW5nX2ZyZWU7CisrCQlYNTA5VjNfc2VjdGlvbl9mcmVlOworKwkJWDUwOVYzX3NldF9jdHg7CisrCQlzMmlfQVNOMV9JTlRFR0VSOworKwkJQ1JZUFRPX3NldF9sb2NrZWRfbWVtX2Z1bmN0aW9uczsKKysJCUNSWVBUT19nZXRfbG9ja2VkX21lbV9mdW5jdGlvbnM7CisrCQlDUllQVE9fbWFsbG9jX2xvY2tlZDsKKysJCUNSWVBUT19mcmVlX2xvY2tlZDsKKysJCUJOX21vZF9leHAyX21vbnQ7CisrCQlFUlJfZ2V0X2Vycm9yX2xpbmVfZGF0YTsKKysJCUVSUl9wZWVrX2Vycm9yX2xpbmVfZGF0YTsKKysJCVBLQ1MxMl9QQkVfa2V5aXZnZW47CisrCQlYNTA5X0FMR09SX2R1cDsKKysJCWQyaV9BU04xX1NFVF9PRl9ESVNUX1BPSU5UOworKwkJaTJkX0FTTjFfU0VUX09GX0RJU1RfUE9JTlQ7CisrCQlpMmRfQ1JMX0RJU1RfUE9JTlRTOworKwkJQ1JMX0RJU1RfUE9JTlRTX25ldzsKKysJCUNSTF9ESVNUX1BPSU5UU19mcmVlOworKwkJZDJpX0NSTF9ESVNUX1BPSU5UUzsKKysJCWkyZF9ESVNUX1BPSU5UOworKwkJRElTVF9QT0lOVF9uZXc7CisrCQlkMmlfRElTVF9QT0lOVDsKKysJCURJU1RfUE9JTlRfZnJlZTsKKysJCWkyZF9ESVNUX1BPSU5UX05BTUU7CisrCQlESVNUX1BPSU5UX05BTUVfbmV3OworKwkJRElTVF9QT0lOVF9OQU1FX2ZyZWU7CisrCQlkMmlfRElTVF9QT0lOVF9OQU1FOworKwkJWDUwOVYzX2FkZF92YWx1ZV91Y2hhcjsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X0FUVFJJQlVURTsKKysJCWkyZF9BU04xX1NFVF9PRl9BU04xX1RZUEU7CisrCQlkMmlfQVNOMV9TRVRfT0ZfWDUwOV9FWFRFTlNJT047CisrCQlkMmlfQVNOMV9TRVRfT0ZfWDUwOV9OQU1FX0VOVFJZOworKwkJZDJpX0FTTjFfU0VUX09GX0FTTjFfVFlQRTsKKysJCWkyZF9BU04xX1NFVF9PRl9YNTA5X0FUVFJJQlVURTsKKysJCWkyZF9BU04xX1NFVF9PRl9YNTA5X0VYVEVOU0lPTjsKKysJCWkyZF9BU04xX1NFVF9PRl9YNTA5X05BTUVfRU5UUlk7CisrCQlYNTA5VjNfRVhUX2kyZDsKKysJCVg1MDlWM19FWFRfdmFsX3BybjsKKysJCVg1MDlWM19FWFRfYWRkX2xpc3Q7CisrCQlFVlBfQ0lQSEVSX3R5cGU7CisrCQlFVlBfUEJFX0NpcGhlckluaXQ7CisrCQlYNTA5VjNfYWRkX3ZhbHVlX2Jvb2xfbmY7CisrCQlkMmlfQVNOMV9VSU5URUdFUjsKKysJCXNrX3ZhbHVlOworKwkJc2tfbnVtOworKwkJc2tfc2V0OworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfUkVWT0tFRDsKKysJCXNrX3NvcnQ7CisrCQlkMmlfQVNOMV9TRVRfT0ZfWDUwOV9SRVZPS0VEOworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfQUxHT1I7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9DUkw7CisrCQlkMmlfQVNOMV9TRVRfT0ZfWDUwOV9BTEdPUjsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X0NSTDsKKysJCWkyZF9BU04xX1NFVF9PRl9QS0NTN19TSUdORVJfSU5GTzsKKysJCWkyZF9BU04xX1NFVF9PRl9QS0NTN19SRUNJUF9JTkZPOworKwkJZDJpX0FTTjFfU0VUX09GX1BLQ1M3X1NJR05FUl9JTkZPOworKwkJZDJpX0FTTjFfU0VUX09GX1BLQ1M3X1JFQ0lQX0lORk87CisrCQlQS0NTNV9QQkVfYWRkOworKwkJUEVNX3dyaXRlX2Jpb19QS0NTODsKKysJCWkyZF9QS0NTOF9mcDsKKysJCVBFTV9yZWFkX2Jpb19QS0NTOF9QUklWX0tFWV9JTkZPOworKwkJUEVNX3JlYWRfYmlvX1A4X1BSSVZfS0VZX0lORk87CisrCQlkMmlfUEtDUzhfYmlvOworKwkJZDJpX1BLQ1M4X1BSSVZfS0VZX0lORk9fZnA7CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M4X1BSSVZfS0VZX0lORk87CisrCQlQRU1fd3JpdGVfYmlvX1A4X1BSSVZfS0VZX0lORk87CisrCQlQRU1fcmVhZF9QS0NTODsKKysJCWQyaV9QS0NTOF9QUklWX0tFWV9JTkZPX2JpbzsKKysJCWQyaV9QS0NTOF9mcDsKKysJCVBFTV93cml0ZV9QS0NTODsKKysJCVBFTV9yZWFkX1BLQ1M4X1BSSVZfS0VZX0lORk87CisrCQlQRU1fcmVhZF9QOF9QUklWX0tFWV9JTkZPOworKwkJUEVNX3JlYWRfYmlvX1BLQ1M4OworKwkJUEVNX3dyaXRlX1BLQ1M4X1BSSVZfS0VZX0lORk87CisrCQlQRU1fd3JpdGVfUDhfUFJJVl9LRVlfSU5GTzsKKysJCVBLQ1M1X1BCRV9rZXlpdmdlbjsKKysJCWkyZF9QS0NTOF9iaW87CisrCQlpMmRfUEtDUzhfUFJJVl9LRVlfSU5GT19mcDsKKysJCWkyZF9QS0NTOF9QUklWX0tFWV9JTkZPX2JpbzsKKysJCUJJT19zX2JpbzsKKysJCVBLQ1M1X3BiZTJfc2V0OworKwkJUEtDUzVfUEJLREYyX0hNQUNfU0hBMTsKKysJCVBLQ1M1X3YyX1BCRV9rZXlpdmdlbjsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzhQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX1BLQ1M4UHJpdmF0ZUtleTsKKysJCUJJT19jdHJsX2dldF9yZWFkX3JlcXVlc3Q7CisrCQlCSU9fY3RybF9wZW5kaW5nOworKwkJQklPX2N0cmxfd3BlbmRpbmc7CisrCQlCSU9fbmV3X2Jpb19wYWlyOworKwkJQklPX2N0cmxfZ2V0X3dyaXRlX2d1YXJhbnRlZTsKKysJCUNSWVBUT19udW1fbG9ja3M7CisrCQlDT05GX2xvYWRfYmlvOworKwkJQ09ORl9sb2FkX2ZwOworKwkJaTJkX0FTTjFfU0VUX09GX0FTTjFfT0JKRUNUOworKwkJZDJpX0FTTjFfU0VUX09GX0FTTjFfT0JKRUNUOworKwkJUEtDUzdfc2lnbmF0dXJlVmVyaWZ5OworKwkJUlNBX3NldF9tZXRob2Q7CisrCQlSU0FfZ2V0X21ldGhvZDsKKysJCVJTQV9nZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlSU0FfY2hlY2tfa2V5OworKwkJT0JKX29iajJ0eHQ7CisrCQlEU0FfZHVwX0RIOworKwkJWDUwOV9SRVFfZ2V0X2V4dGVuc2lvbnM7CisrCQlYNTA5X1JFUV9zZXRfZXh0ZW5zaW9uX25pZHM7CisrCQlCSU9fbndyaXRlOworKwkJWDUwOV9SRVFfZXh0ZW5zaW9uX25pZDsKKysJCUJJT19ucmVhZDsKKysJCVg1MDlfUkVRX2dldF9leHRlbnNpb25fbmlkczsKKysJCUJJT19ud3JpdGUwOworKwkJWDUwOV9SRVFfYWRkX2V4dGVuc2lvbnNfbmlkOworKwkJQklPX25yZWFkMDsKKysJCVg1MDlfUkVRX2FkZF9leHRlbnNpb25zOworKwkJQklPX25ld19tZW1fYnVmOworKwkJREhfc2V0X2V4X2RhdGE7CisrCQlESF9zZXRfbWV0aG9kOworKwkJRFNBX09wZW5TU0w7CisrCQlESF9nZXRfZXhfZGF0YTsKKysJCURIX2dldF9leF9uZXdfaW5kZXg7CisrCQlEU0FfbmV3X21ldGhvZDsKKysJCURIX25ld19tZXRob2Q7CisrCQlESF9PcGVuU1NMOworKwkJRFNBX2dldF9leF9uZXdfaW5kZXg7CisrCQlESF9nZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlEU0Ffc2V0X2V4X2RhdGE7CisrCQlESF9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlEU0FfZ2V0X2V4X2RhdGE7CisrCQlYNTA5VjNfRVhUX1JFUV9hZGRfY29uZjsKKysJCU5FVFNDQVBFX1NQS0lfcHJpbnQ7CisrCQlORVRTQ0FQRV9TUEtJX3NldF9wdWJrZXk7CisrCQlORVRTQ0FQRV9TUEtJX2I2NF9lbmNvZGU7CisrCQlORVRTQ0FQRV9TUEtJX2dldF9wdWJrZXk7CisrCQlORVRTQ0FQRV9TUEtJX2I2NF9kZWNvZGU7CisrCQlVVEY4X3B1dGM7CisrCQlVVEY4X2dldGM7CisrCQlSU0FfbnVsbF9tZXRob2Q7CisrCQlBU04xX3RhZzJzdHI7CisrCQlCSU9fY3RybF9yZXNldF9yZWFkX3JlcXVlc3Q7CisrCQlESVNQTEFZVEVYVF9uZXc7CisrCQlBU04xX0dFTkVSQUxJWkVEVElNRV9mcmVlOworKwkJWDUwOV9SRVZPS0VEX2dldF9leHRfZDJpOworKwkJWDUwOV9zZXRfZXhfZGF0YTsKKysJCVg1MDlfcmVqZWN0X3NldF9iaXRfYXNjOworKwkJWDUwOV9OQU1FX2FkZF9lbnRyeV9ieV90eHQ7CisrCQlYNTA5X05BTUVfYWRkX2VudHJ5X2J5X05JRDsKKysJCVg1MDlfUFVSUE9TRV9nZXQwOworKwkJUEVNX3JlYWRfWDUwOV9BVVg7CisrCQlkMmlfQVVUSE9SSVRZX0lORk9fQUNDRVNTOworKwkJUEVNX3dyaXRlX1BVQktFWTsKKysJCUFDQ0VTU19ERVNDUklQVElPTl9uZXc7CisrCQlYNTA5X0NFUlRfQVVYX2ZyZWU7CisrCQlkMmlfQUNDRVNTX0RFU0NSSVBUSU9OOworKwkJWDUwOV90cnVzdF9jbGVhcjsKKysJCVg1MDlfVFJVU1RfYWRkOworKwkJQVNOMV9WSVNJQkxFU1RSSU5HX25ldzsKKysJCVg1MDlfYWxpYXNfc2V0MTsKKysJCUFTTjFfUFJJTlRBQkxFU1RSSU5HX2ZyZWU7CisrCQlFVlBfUEtFWV9nZXQxX0RTQTsKKysJCUFTTjFfQk1QU1RSSU5HX25ldzsKKysJCUFTTjFfbWJzdHJpbmdfY29weTsKKysJCUFTTjFfVVRGOFNUUklOR19uZXc7CisrCQlEU0FfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJaTJkX0FTTjFfU0VUX09GX0FDQ0VTU19ERVNDUklQVElPTjsKKysJCUFTTjFfVDYxU1RSSU5HX2ZyZWU7CisrCQlEU0Ffc2V0X21ldGhvZDsKKysJCVg1MDlfZ2V0X2V4X2RhdGE7CisrCQlBU04xX1NUUklOR190eXBlOworKwkJWDUwOV9QVVJQT1NFX2dldF9ieV9zbmFtZTsKKysJCUFTTjFfVElNRV9mcmVlOworKwkJQVNOMV9PQ1RFVF9TVFJJTkdfY21wOworKwkJQVNOMV9CSVRfU1RSSU5HX25ldzsKKysJCVg1MDlfZ2V0X2V4dF9kMmk7CisrCQlQRU1fcmVhZF9iaW9fWDUwOV9BVVg7CisrCQlBU04xX1NUUklOR19zZXRfZGVmYXVsdF9tYXNrX2FzYzsKKysJCUFTTjFfU1RSSU5HX3NldF9kZWZfbWFza19hc2M7CisrCQlQRU1fd3JpdGVfYmlvX1JTQV9QVUJLRVk7CisrCQlBU04xX0lOVEVHRVJfY21wOworKwkJZDJpX1JTQV9QVUJLRVlfZnA7CisrCQlYNTA5X3RydXN0X3NldF9iaXRfYXNjOworKwkJUEVNX3dyaXRlX2Jpb19EU0FfUFVCS0VZOworKwkJWDUwOV9TVE9SRV9DVFhfZnJlZTsKKysJCUVWUF9QS0VZX3NldDFfRFNBOworKwkJaTJkX0RTQV9QVUJLRVlfZnA7CisrCQlYNTA5X2xvYWRfY2VydF9jcmxfZmlsZTsKKysJCUFTTjFfVElNRV9uZXc7CisrCQlpMmRfUlNBX1BVQktFWTsKKysJCVg1MDlfU1RPUkVfQ1RYX3B1cnBvc2VfaW5oZXJpdDsKKysJCVBFTV9yZWFkX1JTQV9QVUJLRVk7CisrCQlkMmlfWDUwOV9BVVg7CisrCQlpMmRfRFNBX1BVQktFWTsKKysJCVg1MDlfQ0VSVF9BVVhfcHJpbnQ7CisrCQlQRU1fcmVhZF9EU0FfUFVCS0VZOworKwkJaTJkX1JTQV9QVUJLRVlfYmlvOworKwkJQVNOMV9CSVRfU1RSSU5HX251bV9hc2M7CisrCQlpMmRfUFVCS0VZOworKwkJQVNOMV9VVENUSU1FX2ZyZWU7CisrCQlEU0Ffc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJWDUwOV9QVVJQT1NFX2dldF9ieV9pZDsKKysJCUFDQ0VTU19ERVNDUklQVElPTl9mcmVlOworKwkJUEVNX3JlYWRfYmlvX1BVQktFWTsKKysJCUFTTjFfU1RSSU5HX3NldF9ieV9OSUQ7CisrCQlYNTA5X1BVUlBPU0VfZ2V0X2lkOworKwkJRElTUExBWVRFWFRfZnJlZTsKKysJCU9USEVSTkFNRV9uZXc7CisrCQlYNTA5X0NFUlRfQVVYX25ldzsKKysJCVg1MDlfVFJVU1RfY2xlYW51cDsKKysJCVg1MDlfTkFNRV9hZGRfZW50cnlfYnlfT0JKOworKwkJWDUwOV9DUkxfZ2V0X2V4dF9kMmk7CisrCQlYNTA5X1BVUlBPU0VfZ2V0MF9uYW1lOworKwkJUEVNX3JlYWRfUFVCS0VZOworKwkJaTJkX0RTQV9QVUJLRVlfYmlvOworKwkJaTJkX09USEVSTkFNRTsKKysJCUFTTjFfT0NURVRfU1RSSU5HX2ZyZWU7CisrCQlBU04xX0JJVF9TVFJJTkdfc2V0X2FzYzsKKysJCVg1MDlfZ2V0X2V4X25ld19pbmRleDsKKysJCUFTTjFfU1RSSU5HX1RBQkxFX2NsZWFudXA7CisrCQlYNTA5X1RSVVNUX2dldF9ieV9pZDsKKysJCVg1MDlfUFVSUE9TRV9nZXRfdHJ1c3Q7CisrCQlBU04xX1NUUklOR19sZW5ndGg7CisrCQlkMmlfQVNOMV9TRVRfT0ZfQUNDRVNTX0RFU0NSSVBUSU9OOworKwkJQVNOMV9QUklOVEFCTEVTVFJJTkdfbmV3OworKwkJWDUwOVYzX2dldF9kMmk7CisrCQlBU04xX0VOVU1FUkFURURfZnJlZTsKKysJCWkyZF9YNTA5X0NFUlRfQVVYOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X3RydXN0OworKwkJQVNOMV9TVFJJTkdfc2V0X2RlZmF1bHRfbWFzazsKKysJCVg1MDlfU1RPUkVfQ1RYX25ldzsKKysJCUVWUF9QS0VZX2dldDFfUlNBOworKwkJRElSRUNUT1JZU1RSSU5HX2ZyZWU7CisrCQlQRU1fd3JpdGVfWDUwOV9BVVg7CisrCQlBU04xX09DVEVUX1NUUklOR19zZXQ7CisrCQlkMmlfRFNBX1BVQktFWV9mcDsKKysJCWQyaV9SU0FfUFVCS0VZOworKwkJWDUwOV9UUlVTVF9nZXQwX25hbWU7CisrCQlYNTA5X1RSVVNUX2dldDA7CisrCQlBVVRIT1JJVFlfSU5GT19BQ0NFU1NfZnJlZTsKKysJCUFTTjFfSUE1U1RSSU5HX25ldzsKKysJCWQyaV9EU0FfUFVCS0VZOworKwkJWDUwOV9jaGVja19wdXJwb3NlOworKwkJQVNOMV9FTlVNRVJBVEVEX25ldzsKKysJCWQyaV9SU0FfUFVCS0VZX2JpbzsKKysJCWQyaV9QVUJLRVk7CisrCQlYNTA5X1RSVVNUX2dldF90cnVzdDsKKysJCVg1MDlfVFJVU1RfZ2V0X2ZsYWdzOworKwkJQVNOMV9CTVBTVFJJTkdfZnJlZTsKKysJCUFTTjFfVDYxU1RSSU5HX25ldzsKKysJCUFTTjFfVVRDVElNRV9uZXc7CisrCQlpMmRfQVVUSE9SSVRZX0lORk9fQUNDRVNTOworKwkJRVZQX1BLRVlfc2V0MV9SU0E7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfcHVycG9zZTsKKysJCUFTTjFfSUE1U1RSSU5HX2ZyZWU7CisrCQlQRU1fd3JpdGVfYmlvX1g1MDlfQVVYOworKwkJWDUwOV9QVVJQT1NFX2dldF9jb3VudDsKKysJCUNSWVBUT19hZGRfaW5mbzsKKysJCVg1MDlfTkFNRV9FTlRSWV9jcmVhdGVfYnlfdHh0OworKwkJQVNOMV9TVFJJTkdfZ2V0X2RlZmF1bHRfbWFzazsKKysJCVg1MDlfYWxpYXNfZ2V0MDsKKysJCUFTTjFfU1RSSU5HX2RhdGE7CisrCQlpMmRfQUNDRVNTX0RFU0NSSVBUSU9OOworKwkJWDUwOV90cnVzdF9zZXRfYml0OworKwkJQVNOMV9CSVRfU1RSSU5HX2ZyZWU7CisrCQlQRU1fcmVhZF9iaW9fUlNBX1BVQktFWTsKKysJCVg1MDlfYWRkMV9yZWplY3Rfb2JqZWN0OworKwkJWDUwOV9jaGVja190cnVzdDsKKysJCVBFTV9yZWFkX2Jpb19EU0FfUFVCS0VZOworKwkJWDUwOV9QVVJQT1NFX2FkZDsKKysJCUFTTjFfU1RSSU5HX1RBQkxFX2dldDsKKysJCUFTTjFfVVRGOFNUUklOR19mcmVlOworKwkJZDJpX0RTQV9QVUJLRVlfYmlvOworKwkJUEVNX3dyaXRlX1JTQV9QVUJLRVk7CisrCQlkMmlfT1RIRVJOQU1FOworKwkJWDUwOV9yZWplY3Rfc2V0X2JpdDsKKysJCVBFTV93cml0ZV9EU0FfUFVCS0VZOworKwkJWDUwOV9QVVJQT1NFX2dldDBfc25hbWU7CisrCQlFVlBfUEtFWV9zZXQxX0RIOworKwkJQVNOMV9PQ1RFVF9TVFJJTkdfZHVwOworKwkJQVNOMV9CSVRfU1RSSU5HX3NldDsKKysJCVg1MDlfVFJVU1RfZ2V0X2NvdW50OworKwkJQVNOMV9JTlRFR0VSX2ZyZWU7CisrCQlPVEhFUk5BTUVfZnJlZTsKKysJCWkyZF9SU0FfUFVCS0VZX2ZwOworKwkJQVNOMV9JTlRFR0VSX2R1cDsKKysJCWQyaV9YNTA5X0NFUlRfQVVYOworKwkJUEVNX3dyaXRlX2Jpb19QVUJLRVk7CisrCQlBU04xX1ZJU0lCTEVTVFJJTkdfZnJlZTsKKysJCVg1MDlfUFVSUE9TRV9jbGVhbnVwOworKwkJQVNOMV9tYnN0cmluZ19uY29weTsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX25ldzsKKysJCUVWUF9QS0VZX2dldDFfREg7CisrCQlBU04xX09DVEVUX1NUUklOR19uZXc7CisrCQlBU04xX0lOVEVHRVJfbmV3OworKwkJaTJkX1g1MDlfQVVYOworKwkJQVNOMV9CSVRfU1RSSU5HX25hbWVfcHJpbnQ7CisrCQlYNTA5X2NtcDsKKysJCUFTTjFfU1RSSU5HX2xlbmd0aF9zZXQ7CisrCQlESVJFQ1RPUllTVFJJTkdfbmV3OworKwkJWDUwOV9hZGQxX3RydXN0X29iamVjdDsKKysJCVBLQ1MxMl9uZXdwYXNzOworKwkJU01JTUVfd3JpdGVfUEtDUzc7CisrCQlTTUlNRV9yZWFkX1BLQ1M3OworKwkJREVTX3NldF9rZXlfY2hlY2tlZDsKKysJCVBLQ1M3X3ZlcmlmeTsKKysJCVBLQ1M3X2VuY3J5cHQ7CisrCQlERVNfc2V0X2tleV91bmNoZWNrZWQ7CisrCQlTTUlNRV9jcmxmX2NvcHk7CisrCQlpMmRfQVNOMV9QUklOVEFCTEVTVFJJTkc7CisrCQlQS0NTN19nZXQwX3NpZ25lcnM7CisrCQlQS0NTN19kZWNyeXB0OworKwkJU01JTUVfdGV4dDsKKysJCVBLQ1M3X3NpbXBsZV9zbWltZWNhcDsKKysJCVBLQ1M3X2dldF9zbWltZWNhcDsKKysJCVBLQ1M3X3NpZ247CisrCQlQS0NTN19hZGRfYXR0cmliX3NtaW1lY2FwOworKwkJQ1JZUFRPX2RiZ19zZXRfb3B0aW9uczsKKysJCUNSWVBUT19yZW1vdmVfYWxsX2luZm87CisrCQlDUllQVE9fZ2V0X21lbV9kZWJ1Z19mdW5jdGlvbnM7CisrCQlDUllQVE9faXNfbWVtX2NoZWNrX29uOworKwkJQ1JZUFRPX3NldF9tZW1fZGVidWdfZnVuY3Rpb25zOworKwkJQ1JZUFRPX3BvcF9pbmZvOworKwkJQ1JZUFRPX3B1c2hfaW5mb187CisrCQlDUllQVE9fc2V0X21lbV9kZWJ1Z19vcHRpb25zOworKwkJUEVNX3dyaXRlX1BLQ1M4UHJpdmF0ZUtleV9uaWQ7CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M4UHJpdmF0ZUtleV9uaWQ7CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M4UHJpdktleV9uaWQ7CisrCQlkMmlfUEtDUzhQcml2YXRlS2V5X2JpbzsKKysJCUFTTjFfTlVMTF9mcmVlOworKwkJZDJpX0FTTjFfTlVMTDsKKysJCUFTTjFfTlVMTF9uZXc7CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5X2JpbzsKKysJCWkyZF9QS0NTOFByaXZhdGVLZXlfZnA7CisrCQlpMmRfQVNOMV9OVUxMOworKwkJaTJkX1BLQ1M4UHJpdmF0ZUtleV9uaWRfZnA7CisrCQlkMmlfUEtDUzhQcml2YXRlS2V5X2ZwOworKwkJaTJkX1BLQ1M4UHJpdmF0ZUtleV9uaWRfYmlvOworKwkJaTJkX1BLQ1M4UHJpdmF0ZUtleUluZm9fZnA7CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5SW5mb19iaW87CisrCQlQRU1fY2I7CisrCQlpMmRfUHJpdmF0ZUtleV9mcDsKKysJCWQyaV9Qcml2YXRlS2V5X2JpbzsKKysJCWQyaV9Qcml2YXRlS2V5X2ZwOworKwkJaTJkX1ByaXZhdGVLZXlfYmlvOworKwkJWDUwOV9yZWplY3RfY2xlYXI7CisrCQlYNTA5X1RSVVNUX3NldF9kZWZhdWx0OworKwkJZDJpX0F1dG9Qcml2YXRlS2V5OworKwkJWDUwOV9BVFRSSUJVVEVfZ2V0MF90eXBlOworKwkJWDUwOV9BVFRSSUJVVEVfc2V0MV9kYXRhOworKwkJWDUwOWF0X2dldF9hdHRyOworKwkJWDUwOWF0X2dldF9hdHRyX2NvdW50OworKwkJWDUwOV9BVFRSSUJVVEVfY3JlYXRlX2J5X05JRDsKKysJCVg1MDlfQVRUUklCVVRFX3NldDFfb2JqZWN0OworKwkJWDUwOV9BVFRSSUJVVEVfY291bnQ7CisrCQlYNTA5X0FUVFJJQlVURV9jcmVhdGVfYnlfT0JKOworKwkJWDUwOV9BVFRSSUJVVEVfZ2V0MF9vYmplY3Q7CisrCQlYNTA5YXRfZ2V0X2F0dHJfYnlfTklEOworKwkJWDUwOWF0X2FkZDFfYXR0cjsKKysJCVg1MDlfQVRUUklCVVRFX2dldDBfZGF0YTsKKysJCVg1MDlhdF9kZWxldGVfYXR0cjsKKysJCVg1MDlhdF9nZXRfYXR0cl9ieV9PQko7CisrCQlSQU5EX2FkZDsKKysJCUJJT19udW1iZXJfd3JpdHRlbjsKKysJCUJJT19udW1iZXJfcmVhZDsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDFfY2hhaW47CisrCQlFUlJfbG9hZF9SQU5EX3N0cmluZ3M7CisrCQlSQU5EX3BzZXVkb19ieXRlczsKKysJCVg1MDlfUkVRX2dldF9hdHRyX2J5X05JRDsKKysJCVg1MDlfUkVRX2dldF9hdHRyOworKwkJWDUwOV9SRVFfYWRkMV9hdHRyX2J5X05JRDsKKysJCVg1MDlfUkVRX2dldF9hdHRyX2J5X09CSjsKKysJCVg1MDlhdF9hZGQxX2F0dHJfYnlfTklEOworKwkJWDUwOV9SRVFfYWRkMV9hdHRyX2J5X09CSjsKKysJCVg1MDlfUkVRX2dldF9hdHRyX2NvdW50OworKwkJWDUwOV9SRVFfYWRkMV9hdHRyOworKwkJWDUwOV9SRVFfZGVsZXRlX2F0dHI7CisrCQlYNTA5YXRfYWRkMV9hdHRyX2J5X09CSjsKKysJCVg1MDlfUkVRX2FkZDFfYXR0cl9ieV90eHQ7CisrCQlYNTA5X0FUVFJJQlVURV9jcmVhdGVfYnlfdHh0OworKwkJWDUwOWF0X2FkZDFfYXR0cl9ieV90eHQ7CisrCQlCTl9wc2V1ZG9fcmFuZDsKKysJCUJOX2lzX3ByaW1lX2Zhc3R0ZXN0OworKwkJQk5fQ1RYX2VuZDsKKysJCUJOX0NUWF9zdGFydDsKKysJCUJOX0NUWF9nZXQ7CisrCQlFVlBfUEtFWTJQS0NTOF9icm9rZW47CisrCQlBU04xX1NUUklOR19UQUJMRV9hZGQ7CisrCQlDUllQVE9fZGJnX2dldF9vcHRpb25zOworKwkJQVVUSE9SSVRZX0lORk9fQUNDRVNTX25ldzsKKysJCUNSWVBUT19nZXRfbWVtX2RlYnVnX29wdGlvbnM7CisrCQlERVNfY3J5cHQ7CisrCQlQRU1fd3JpdGVfYmlvX1g1MDlfUkVRX05FVzsKKysJCVBFTV93cml0ZV9YNTA5X1JFUV9ORVc7CisrCQlCSU9fY2FsbGJhY2tfY3RybDsKKysJCVJBTkRfZWdkOworKwkJUkFORF9zdGF0dXM7CisrCQlibl9kdW1wMTsKKysJCURFU19jaGVja19rZXlfcGFyaXR5OworKwkJbGhfbnVtX2l0ZW1zOworKwkJUkFORF9ldmVudDsKKysJCURTT19uZXc7CisrCQlEU09fbmV3X21ldGhvZDsKKysJCURTT19mcmVlOworKwkJRFNPX2ZsYWdzOworKwkJRFNPX3VwOworKwkJRFNPX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCURTT19nZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlEU09fZ2V0X21ldGhvZDsKKysJCURTT19zZXRfbWV0aG9kOworKwkJRFNPX2xvYWQ7CisrCQlEU09fYmluZF92YXI7CisrCQlEU09fTUVUSE9EX251bGw7CisrCQlEU09fTUVUSE9EX29wZW5zc2w7CisrCQlEU09fTUVUSE9EX2RsZmNuOworKwkJRFNPX01FVEhPRF93aW4zMjsKKysJCUVSUl9sb2FkX0RTT19zdHJpbmdzOworKwkJRFNPX01FVEhPRF9kbDsKKysJCU5DT05GX2xvYWQ7CisrCQlOQ09ORl9sb2FkX2ZwOworKwkJTkNPTkZfbmV3OworKwkJTkNPTkZfZ2V0X3N0cmluZzsKKysJCU5DT05GX2ZyZWU7CisrCQlOQ09ORl9nZXRfbnVtYmVyOworKwkJQ09ORl9kdW1wX2ZwOworKwkJTkNPTkZfbG9hZF9iaW87CisrCQlOQ09ORl9kdW1wX2ZwOworKwkJTkNPTkZfZ2V0X3NlY3Rpb247CisrCQlOQ09ORl9kdW1wX2JpbzsKKysJCUNPTkZfZHVtcF9iaW87CisrCQlOQ09ORl9mcmVlX2RhdGE7CisrCQlDT05GX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCUVSUl9lcnJvcl9zdHJpbmdfbjsKKysJCUJJT19zbnByaW50ZjsKKysJCURTT19jdHJsOworKwkJaTJkX0FTTjFfU0VUX09GX0FTTjFfSU5URUdFUjsKKysJCWkyZF9BU04xX1NFVF9PRl9QS0NTMTJfU0FGRUJBRzsKKysJCWkyZF9BU04xX1NFVF9PRl9QS0NTNzsKKysJCUJJT192ZnJlZTsKKysJCWQyaV9BU04xX1NFVF9PRl9BU04xX0lOVEVHRVI7CisrCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzEyX1NBRkVCQUc7CisrCQlBU04xX1VUQ1RJTUVfZ2V0OworKwkJWDUwOV9SRVFfZGlnZXN0OworKwkJWDUwOV9DUkxfZGlnZXN0OworKwkJZDJpX0FTTjFfU0VUX09GX1BLQ1M3OworKwkJRVZQX0NJUEhFUl9DVFhfc2V0X2tleV9sZW5ndGg7CisrCQlFVlBfQ0lQSEVSX0NUWF9jdHJsOworKwkJQk5fbW9kX2V4cF9tb250X3dvcmQ7CisrCQlSQU5EX2VnZF9ieXRlczsKKysJCVg1MDlfUkVRX2dldDFfZW1haWw7CisrCQlYNTA5X2dldDFfZW1haWw7CisrCQlYNTA5X2VtYWlsX2ZyZWU7CisrCQlpMmRfUlNBX05FVDsKKysJCWQyaV9SU0FfTkVUXzI7CisrCQlkMmlfUlNBX05FVDsKKysJCURTT19iaW5kX2Z1bmM7CisrCQlDUllQVE9fZ2V0X25ld19keW5sb2NraWQ7CisrCQlza19uZXdfbnVsbDsKKysJCUNSWVBUT19zZXRfZHlubG9ja19kZXN0cm95X2NhbGxiYWNrOworKwkJQ1JZUFRPX3NldF9keW5sb2NrX2Rlc3Ryb3lfY2I7CisrCQlDUllQVE9fZGVzdHJveV9keW5sb2NraWQ7CisrCQlDUllQVE9fc2V0X2R5bmxvY2tfc2l6ZTsKKysJCUNSWVBUT19zZXRfZHlubG9ja19jcmVhdGVfY2FsbGJhY2s7CisrCQlDUllQVE9fc2V0X2R5bmxvY2tfY3JlYXRlX2NiOworKwkJQ1JZUFRPX3NldF9keW5sb2NrX2xvY2tfY2FsbGJhY2s7CisrCQlDUllQVE9fc2V0X2R5bmxvY2tfbG9ja19jYjsKKysJCUNSWVBUT19nZXRfZHlubG9ja19sb2NrX2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2xvY2tfY2I7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfZGVzdHJveV9jYWxsYmFjazsKKysJCUNSWVBUT19nZXRfZHlubG9ja19kZXN0cm95X2NiOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX3ZhbHVlOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2NyZWF0ZV9jYWxsYmFjazsKKysJCUNSWVBUT19nZXRfZHlubG9ja19jcmVhdGVfY2I7CisrCQljMmlfQVNOMV9CSVRfU1RSSU5HOworKwkJaTJjX0FTTjFfQklUX1NUUklORzsKKysJCVJBTkRfcG9sbDsKKysJCWMyaV9BU04xX0lOVEVHRVI7CisrCQlpMmNfQVNOMV9JTlRFR0VSOworKwkJQklPX2R1bXBfaW5kZW50OworKwkJQVNOMV9wYXJzZV9kdW1wOworKwkJYzJpX0FTTjFfT0JKRUNUOworKwkJWDUwOV9OQU1FX3ByaW50X2V4X2ZwOworKwkJQVNOMV9TVFJJTkdfcHJpbnRfZXhfZnA7CisrCQlYNTA5X05BTUVfcHJpbnRfZXg7CisrCQlBU04xX1NUUklOR19wcmludF9leDsKKysJCU1ENDsKKysJCU1ENF9UcmFuc2Zvcm07CisrCQlNRDRfRmluYWw7CisrCQlNRDRfVXBkYXRlOworKwkJTUQ0X0luaXQ7CisrCQlFVlBfbWQ0OworKwkJaTJkX1BVQktFWV9iaW87CisrCQlpMmRfUFVCS0VZX2ZwOworKwkJZDJpX1BVQktFWV9iaW87CisrCQlBU04xX1NUUklOR190b19VVEY4OworKwkJQklPX3ZwcmludGY7CisrCQlCSU9fdnNucHJpbnRmOworKwkJZDJpX1BVQktFWV9mcDsKKysJCVg1MDlfY21wX3RpbWU7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfdGltZTsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDFfaXNzdWVyOworKwkJWDUwOV9PQkpFQ1RfcmV0cmlldmVfbWF0Y2g7CisrCQlYNTA5X09CSkVDVF9pZHhfYnlfc3ViamVjdDsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9mbGFnczsKKysJCVg1MDlfU1RPUkVfQ1RYX3RydXN0ZWRfc3RhY2s7CisrCQlYNTA5X3RpbWVfYWRqOworKwkJWDUwOV9jaGVja19pc3N1ZWQ7CisrCQlBU04xX1VUQ1RJTUVfY21wX3RpbWVfdDsKKysJCURFU19zZXRfd2Vha19rZXlfZmxhZzsKKysJCURFU19jaGVja19rZXk7CisrCQlERVNfcndfbW9kZTsKKysJCVJTQV9QS0NTMV9SU0FyZWY7CisrCQlYNTA5X2tleWlkX3NldDE7CisrCQlCSU9fbmV4dDsKKysJCURTT19NRVRIT0Rfdm1zOworKwkJQklPX2ZfbGluZWJ1ZmZlcjsKKysJCUJOX2JudGVzdF9yYW5kOworKwkJT1BFTlNTTF9pc3NldHVnaWQ7CisrCQlCTl9yYW5kX3JhbmdlOworKwkJRVJSX2xvYWRfRU5HSU5FX3N0cmluZ3M7CisrCQlFTkdJTkVfc2V0X0RTQTsKKysJCUVOR0lORV9nZXRfZmluaXNoX2Z1bmN0aW9uOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X1JTQTsKKysJCUVOR0lORV9nZXRfQk5fbW9kX2V4cDsKKysJCURTQV9nZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKKysJCUVOR0lORV9zZXRfREg7CisrCQlFTkdJTkVfc2V0X2RlZl9CTl9tb2RfZXhwX2NydDsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9CTl9tb2RfZXhwX2NydDsKKysJCUVOR0lORV9pbml0OworKwkJREhfZ2V0X2RlZmF1bHRfb3BlbnNzbF9tZXRob2Q7CisrCQlSU0Ffc2V0X2RlZmF1bHRfb3BlbnNzbF9tZXRob2Q7CisrCQlFTkdJTkVfZmluaXNoOworKwkJRU5HSU5FX2xvYWRfcHVibGljX2tleTsKKysJCUVOR0lORV9nZXRfREg7CisrCQlFTkdJTkVfY3RybDsKKysJCUVOR0lORV9nZXRfaW5pdF9mdW5jdGlvbjsKKysJCUVOR0lORV9zZXRfaW5pdF9mdW5jdGlvbjsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9EU0E7CisrCQlFTkdJTkVfZ2V0X25hbWU7CisrCQlFTkdJTkVfZ2V0X2xhc3Q7CisrCQlFTkdJTkVfZ2V0X3ByZXY7CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfREg7CisrCQlFTkdJTkVfZ2V0X1JTQTsKKysJCUVOR0lORV9zZXRfZGVmYXVsdDsKKysJCUVOR0lORV9nZXRfUkFORDsKKysJCUVOR0lORV9nZXRfZmlyc3Q7CisrCQlFTkdJTkVfYnlfaWQ7CisrCQlFTkdJTkVfc2V0X2ZpbmlzaF9mdW5jdGlvbjsKKysJCUVOR0lORV9nZXRfZGVmX0JOX21vZF9leHBfY3J0OworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0JOX21vZF9leHBfY3J0OworKwkJUlNBX2dldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJRU5HSU5FX3NldF9SU0E7CisrCQlFTkdJTkVfbG9hZF9wcml2YXRlX2tleTsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9SQU5EOworKwkJRU5HSU5FX3NldF9CTl9tb2RfZXhwOworKwkJRU5HSU5FX3JlbW92ZTsKKysJCUVOR0lORV9mcmVlOworKwkJRU5HSU5FX2dldF9CTl9tb2RfZXhwX2NydDsKKysJCUVOR0lORV9nZXRfbmV4dDsKKysJCUVOR0lORV9zZXRfbmFtZTsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9EU0E7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfQk5fbW9kX2V4cDsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9SU0E7CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfUkFORDsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9CTl9tb2RfZXhwOworKwkJRU5HSU5FX3NldF9SQU5EOworKwkJRU5HSU5FX3NldF9pZDsKKysJCUVOR0lORV9zZXRfQk5fbW9kX2V4cF9jcnQ7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfREg7CisrCQlFTkdJTkVfbmV3OworKwkJRU5HSU5FX2dldF9pZDsKKysJCURTQV9zZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKKysJCUVOR0lORV9hZGQ7CisrCQlESF9zZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKKysJCUVOR0lORV9nZXRfRFNBOworKwkJRU5HSU5FX2dldF9jdHJsX2Z1bmN0aW9uOworKwkJRU5HSU5FX3NldF9jdHJsX2Z1bmN0aW9uOworKwkJQk5fcHNldWRvX3JhbmRfcmFuZ2U7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfdmVyaWZ5X2NiOworKwkJRVJSX2xvYWRfQ09NUF9zdHJpbmdzOworKwkJUEtDUzEyX2l0ZW1fZGVjcnlwdF9kMmk7CisrCQlBU04xX1VURjhTVFJJTkdfaXQ7CisrCQlFTkdJTkVfdW5yZWdpc3Rlcl9jaXBoZXJzOworKwkJRU5HSU5FX2dldF9jaXBoZXJzOworKwkJZDJpX09DU1BfQkFTSUNSRVNQOworKwkJS1JCNV9DSEVDS1NVTV9pdDsKKysJCUVDX1BPSU5UX2FkZDsKKysJCUFTTjFfaXRlbV9leF9pMmQ7CisrCQlPQ1NQX0NFUlRJRF9pdDsKKysJCWQyaV9PQ1NQX1JFU1BCWVRFUzsKKysJCVg1MDlWM19hZGQxX2kyZDsKKysJCVBLQ1M3X0VOVkVMT1BFX2l0OworKwkJVUlfYWRkX2lucHV0X2Jvb2xlYW47CisrCQlFTkdJTkVfdW5yZWdpc3Rlcl9SU0E7CisrCQlYNTA5VjNfRVhUX25jb25mOworKwkJQVNOMV9HRU5FUkFMU1RSSU5HX2ZyZWU7CisrCQlkMmlfT0NTUF9DRVJUU1RBVFVTOworKwkJWDUwOV9SRVZPS0VEX3NldF9zZXJpYWxOdW1iZXI7CisrCQlYNTA5X3ByaW50X2V4OworKwkJT0NTUF9PTkVSRVFfZ2V0MV9leHRfZDJpOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9SQU5EOworKwkJRU5HSU5FX2xvYWRfZHluYW1pYzsKKysJCVBCS0RGMlBBUkFNX2l0OworKwkJRVhURU5ERURfS0VZX1VTQUdFX25ldzsKKysJCUVDX0dST1VQX2NsZWFyX2ZyZWU7CisrCQlPQ1NQX3NlbmRyZXFfYmlvOworKwkJQVNOMV9pdGVtX2RpZ2VzdDsKKysJCU9DU1BfQkFTSUNSRVNQX2RlbGV0ZV9leHQ7CisrCQlPQ1NQX1NJR05BVFVSRV9pdDsKKysJCVg1MDlfQ1JMX2l0OworKwkJT0NTUF9CQVNJQ1JFU1BfYWRkX2V4dDsKKysJCUtSQjVfRU5DS0VZX2l0OworKwkJVUlfbWV0aG9kX3NldF9jbG9zZXI7CisrCQlYNTA5X1NUT1JFX3NldF9wdXJwb3NlOworKwkJaTJkX0FTTjFfR0VORVJBTFNUUklORzsKKysJCU9DU1BfcmVzcG9uc2Vfc3RhdHVzOworKwkJaTJkX09DU1BfU0VSVklDRUxPQzsKKysJCUVOR0lORV9nZXRfZGlnZXN0X2VuZ2luZTsKKysJCUVDX0dST1VQX3NldF9jdXJ2ZV9HRnA7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dF9ieV9PQko7CisrCQlfb3NzbF9vbGRfZGVzX3JhbmRvbV9rZXk7CisrCQlBU04xX1Q2MVNUUklOR19pdDsKKysJCUVDX0dST1VQX21ldGhvZF9vZjsKKysJCWkyZF9LUkI1X0FQUkVROworKwkJX29zc2xfb2xkX2Rlc19lbmNyeXB0OworKwkJQVNOMV9QUklOVEFCTEVfbmV3OworKwkJSE1BQ19Jbml0X2V4OworKwkJZDJpX0tSQjVfQVVUSEVOVDsKKysJCU9DU1BfYXJjaGl2ZV9jdXRvZmZfbmV3OworKwkJRUNfUE9JTlRfc2V0X0pwcm9qZWN0aXZlX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX3NldF9KcHJval9jb29yZHNfR0ZwOworKwkJX29zc2xfb2xkX2Rlc19pc193ZWFrX2tleTsKKysJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfYnlfT0JKOworKwkJRUNfUE9JTlRfb2N0MnBvaW50OworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfY291bnQ7CisrCQlVSV9jdHJsOworKwkJX3NoYWRvd19ERVNfcndfbW9kZTsKKysJCWFzbjFfZG9fYWRiOworKwkJQVNOMV90ZW1wbGF0ZV9pMmQ7CisrCQlFTkdJTkVfcmVnaXN0ZXJfREg7CisrCQlVSV9jb25zdHJ1Y3RfcHJvbXB0OworKwkJWDUwOV9TVE9SRV9zZXRfdHJ1c3Q7CisrCQlVSV9kdXBfaW5wdXRfc3RyaW5nOworKwkJZDJpX0tSQjVfQVBSRVE7CisrCQlFVlBfTURfQ1RYX2NvcHlfZXg7CisrCQlPQ1NQX3JlcXVlc3RfaXNfc2lnbmVkOworKwkJaTJkX09DU1BfUkVRSU5GTzsKKysJCUtSQjVfRU5DS0VZX2ZyZWU7CisrCQlPQ1NQX3Jlc3BfZ2V0MDsKKysJCUdFTkVSQUxfTkFNRV9pdDsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX2l0OworKwkJWDUwOV9TVE9SRV9zZXRfZmxhZ3M7CisrCQlFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlc19HRnA7CisrCQlFQ19QT0lOVF9zZXRfY29tcHJfY29vcmRzX0dGcDsKKysJCU9DU1BfcmVzcG9uc2Vfc3RhdHVzX3N0cjsKKysJCWQyaV9PQ1NQX1JFVk9LRURJTkZPOworKwkJT0NTUF9iYXNpY19hZGQxX2NlcnQ7CisrCQlFUlJfZ2V0X2ltcGxlbWVudGF0aW9uOworKwkJRVZQX0NpcGhlckZpbmFsX2V4OworKwkJT0NTUF9DRVJUU1RBVFVTX25ldzsKKysJCUNSWVBUT19jbGVhbnVwX2FsbF9leF9kYXRhOworKwkJT0NTUF9yZXNwX2ZpbmQ7CisrCQlCTl9ubm1vZDsKKysJCVg1MDlfQ1JMX3NvcnQ7CisrCQlYNTA5X1JFVk9LRURfc2V0X3Jldm9jYXRpb25EYXRlOworKwkJRU5HSU5FX3JlZ2lzdGVyX1JBTkQ7CisrCQlPQ1NQX1NFUlZJQ0VMT0NfbmV3OworKwkJRUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZGluYXRlc19HRnA7CisrCQlFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3Jkc19HRnA7CisrCQlfb3NzbF9vbGRfZGVzX29wdGlvbnM7CisrCQlTWE5FVF9pdDsKKysJCVVJX2R1cF9pbnB1dF9ib29sZWFuOworKwkJUEtDUzEyX2FkZF9DU1BOYW1lX2FzYzsKKysJCUVDX1BPSU5UX2lzX2F0X2luZmluaXR5OworKwkJRU5HSU5FX2xvYWRfY3J5cHRvZGV2OworKwkJRFNPX2NvbnZlcnRfZmlsZW5hbWU7CisrCQlQT0xJQ1lRVUFMSU5GT19pdDsKKysJCUVOR0lORV9yZWdpc3Rlcl9jaXBoZXJzOworKwkJQk5fbW9kX2xzaGlmdF9xdWljazsKKysJCURTT19zZXRfZmlsZW5hbWU7CisrCQlBU04xX2l0ZW1fZnJlZTsKKysJCUtSQjVfVEtUQk9EWV9mcmVlOworKwkJQVVUSE9SSVRZX0tFWUlEX2l0OworKwkJS1JCNV9BUFJFUUJPRFlfbmV3OworKwkJWDUwOVYzX0VYVF9SRVFfYWRkX25jb25mOworKwkJRU5HSU5FX2N0cmxfY21kX3N0cmluZzsKKysJCWkyZF9PQ1NQX1JFU1BEQVRBOworKwkJRVZQX01EX0NUWF9pbml0OworKwkJRVhURU5ERURfS0VZX1VTQUdFX2ZyZWU7CisrCQlQS0NTN19BVFRSX1NJR05faXQ7CisrCQlVSV9hZGRfZXJyb3Jfc3RyaW5nOworKwkJS1JCNV9DSEVDS1NVTV9mcmVlOworKwkJT0NTUF9SRVFVRVNUX2dldF9leHQ7CisrCQlFTkdJTkVfbG9hZF91YnNlYzsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfZGlnZXN0czsKKysJCVBLRVlfVVNBR0VfUEVSSU9EX2l0OworKwkJUEtDUzEyX3VucGFja19hdXRoc2FmZXM7CisrCQlBU04xX2l0ZW1fdW5wYWNrOworKwkJTkVUU0NBUEVfU1BLQUNfaXQ7CisrCQlYNTA5X1JFVk9LRURfaXQ7CisrCQlBU04xX1NUUklOR19lbmNvZGU7CisrCQlFVlBfYWVzXzEyOF9lY2I7CisrCQlLUkI1X0FVVEhFTlRfZnJlZTsKKysJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0X2J5X2NyaXQ7CisrCQlPQ1NQX2NlcnRfc3RhdHVzX3N0cjsKKysJCWQyaV9PQ1NQX1JFUVVFU1Q7CisrCQlVSV9kdXBfaW5mb19zdHJpbmc7CisrCQlfb3NzbF9vbGRfZGVzX3h3aGl0ZV9pbjJvdXQ7CisrCQlQS0NTMTJfaXQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCU9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0X2J5X2NyaXQ7CisrCQlPQ1NQX0NFUlRTVEFUVVNfZnJlZTsKKysJCV9vc3NsX29sZF9kZXNfY3J5cHQ7CisrCQlBU04xX2l0ZW1faTJkOworKwkJRVZQX0RlY3J5cHRGaW5hbF9leDsKKysJCUVOR0lORV9sb2FkX29wZW5zc2w7CisrCQlFTkdJTkVfZ2V0X2NtZF9kZWZuczsKKysJCUVOR0lORV9zZXRfbG9hZF9wcml2a2V5X2Z1bmN0aW9uOworKwkJRU5HSU5FX3NldF9sb2FkX3ByaXZrZXlfZm47CisrCQlFVlBfRW5jcnlwdEZpbmFsX2V4OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X2RpZ2VzdHM7CisrCQlYNTA5X2dldDBfcHVia2V5X2JpdHN0cjsKKysJCWFzbjFfZXhfaTJjOworKwkJRU5HSU5FX3JlZ2lzdGVyX1JTQTsKKysJCUVOR0lORV91bnJlZ2lzdGVyX0RTQTsKKysJCV9vc3NsX29sZF9kZXNfa2V5X3NjaGVkOworKwkJWDUwOV9FWFRFTlNJT05faXQ7CisrCQlpMmRfS1JCNV9BVVRIRU5UOworKwkJU1hORVRJRF9pdDsKKysJCWQyaV9PQ1NQX1NJTkdMRVJFU1A7CisrCQlFRElQQVJUWU5BTUVfbmV3OworKwkJUEtDUzEyX2NlcnRiYWcyeDUwOTsKKysJCV9vc3NsX29sZF9kZXNfb2ZiNjRfZW5jcnlwdDsKKysJCWQyaV9FWFRFTkRFRF9LRVlfVVNBR0U7CisrCQlFUlJfcHJpbnRfZXJyb3JzX2NiOworKwkJRU5HSU5FX3NldF9jaXBoZXJzOworKwkJZDJpX0tSQjVfQVBSRVFCT0RZOworKwkJVUlfbWV0aG9kX2dldF9mbHVzaGVyOworKwkJWDUwOV9QVUJLRVlfaXQ7CisrCQlfb3NzbF9vbGRfZGVzX2VuY19yZWFkOworKwkJUEtDUzdfRU5DUllQVF9pdDsKKysJCWkyZF9PQ1NQX1JFU1BPTlNFOworKwkJRUNfR1JPVVBfZ2V0X2NvZmFjdG9yOworKwkJUEtDUzEyX3VucGFja19wN2RhdGE7CisrCQlkMmlfS1JCNV9BVVRIREFUQTsKKysJCU9DU1BfY29weV9ub25jZTsKKysJCUtSQjVfQVVUSERBVEFfbmV3OworKwkJT0NTUF9SRVNQREFUQV9uZXc7CisrCQlFQ19HRnBfbW9udF9tZXRob2Q7CisrCQlPQ1NQX1JFVk9LRURJTkZPX2ZyZWU7CisrCQlVSV9nZXRfZXhfZGF0YTsKKysJCUtSQjVfQVBSRVFCT0RZX2ZyZWU7CisrCQlFQ19HUk9VUF9nZXQwX2dlbmVyYXRvcjsKKysJCVVJX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCVg1MDlWM19zZXRfbmNvbmY7CisrCQlQS0NTMTJfaXRlbV9pMmRfZW5jcnlwdDsKKysJCVg1MDlfYWRkMV9leHRfaTJkOworKwkJUEtDUzdfU0lHTkVSX0lORk9faXQ7CisrCQlLUkI1X1BSSU5DTkFNRV9uZXc7CisrCQlQS0NTMTJfU0FGRUJBR19pdDsKKysJCUVDX0dST1VQX2dldF9vcmRlcjsKKysJCWQyaV9PQ1NQX1JFU1BJRDsKKysJCU9DU1BfcmVxdWVzdF92ZXJpZnk7CisrCQlOQ09ORl9nZXRfbnVtYmVyX2U7CisrCQlfb3NzbF9vbGRfZGVzX2RlY3J5cHQzOworKwkJWDUwOV9zaWduYXR1cmVfcHJpbnQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZnJlZTsKKysJCUVOR0lORV9sb2FkX2J1aWx0aW5fZW5naW5lczsKKysJCWkyZF9PQ1NQX09ORVJFUTsKKysJCU9DU1BfUkVRVUVTVF9hZGRfZXh0OworKwkJT0NTUF9SRVNQQllURVNfbmV3OworKwkJRVZQX01EX0NUWF9jcmVhdGU7CisrCQlPQ1NQX3Jlc3BfZmluZF9zdGF0dXM7CisrCQlYNTA5X0FMR09SX2l0OworKwkJQVNOMV9USU1FX2l0OworKwkJT0NTUF9yZXF1ZXN0X3NldDFfbmFtZTsKKysJCU9DU1BfT05FUkVRX2dldF9leHRfY291bnQ7CisrCQlVSV9nZXQwX3Jlc3VsdDsKKysJCVBLQ1MxMl9BVVRIU0FGRVNfaXQ7CisrCQlFVlBfYWVzXzI1Nl9lY2I7CisrCQlQS0NTMTJfcGFja19hdXRoc2FmZXM7CisrCQlBU04xX0lBNVNUUklOR19pdDsKKysJCVVJX2dldF9pbnB1dF9mbGFnczsKKysJCUVDX0dST1VQX3NldF9nZW5lcmF0b3I7CisrCQlfb3NzbF9vbGRfZGVzX3N0cmluZ190b18ya2V5czsKKysJCU9DU1BfQ0VSVElEX2ZyZWU7CisrCQlYNTA5X0NFUlRfQVVYX2l0OworKwkJQ0VSVElGSUNBVEVQT0xJQ0lFU19pdDsKKysJCV9vc3NsX29sZF9kZXNfZWRlM19jYmNfZW5jcnlwdDsKKysJCVJBTkRfc2V0X3JhbmRfZW5naW5lOworKwkJRFNPX2dldF9sb2FkZWRfZmlsZW5hbWU7CisrCQlYNTA5X0FUVFJJQlVURV9pdDsKKysJCU9DU1BfT05FUkVRX2dldF9leHRfYnlfTklEOworKwkJUEtDUzEyX2RlY3J5cHRfc2tleTsKKysJCUtSQjVfQVVUSEVOVF9pdDsKKysJCVVJX2R1cF9lcnJvcl9zdHJpbmc7CisrCQlSU0FQdWJsaWNLZXlfaXQ7CisrCQlpMmRfT0NTUF9SRVFVRVNUOworKwkJUEtDUzEyX3g1MDljcmwyY2VydGJhZzsKKysJCU9DU1BfU0VSVklDRUxPQ19pdDsKKysJCUFTTjFfaXRlbV9zaWduOworKwkJWDUwOV9DUkxfc2V0X2lzc3Vlcl9uYW1lOworKwkJT0JKX05BTUVfZG9fYWxsX3NvcnRlZDsKKysJCWkyZF9PQ1NQX0JBU0lDUkVTUDsKKysJCWkyZF9PQ1NQX1JFU1BCWVRFUzsKKysJCVBLQ1MxMl91bnBhY2tfcDdlbmNkYXRhOworKwkJSE1BQ19DVFhfaW5pdDsKKysJCUVOR0lORV9nZXRfZGlnZXN0OworKwkJT0NTUF9SRVNQT05TRV9wcmludDsKKysJCUtSQjVfVEtUQk9EWV9pdDsKKysJCUFDQ0VTU19ERVNDUklQVElPTl9pdDsKKysJCVBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX2l0OworKwkJUEJFMlBBUkFNX2l0OworKwkJUEtDUzEyX2NlcnRiYWcyeDUwOWNybDsKKysJCVBLQ1M3X1NJR05FRF9pdDsKKysJCUVOR0lORV9nZXRfY2lwaGVyOworKwkJaTJkX09DU1BfQ1JMSUQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfbmV3OworKwkJRU5HSU5FX2NtZF9pc19leGVjdXRhYmxlOworKwkJUlNBX3VwX3JlZjsKKysJCUFTTjFfR0VORVJBTFNUUklOR19pdDsKKysJCUVOR0lORV9yZWdpc3Rlcl9EU0E7CisrCQlYNTA5VjNfRVhUX2FkZF9uY29uZl9zazsKKysJCUVOR0lORV9zZXRfbG9hZF9wdWJrZXlfZnVuY3Rpb247CisrCQlQS0NTOF9kZWNyeXB0OworKwkJUEVNX2J5dGVzX3JlYWRfYmlvOworKwkJRElSRUNUT1JZU1RSSU5HX2l0OworKwkJZDJpX09DU1BfQ1JMSUQ7CisrCQlFQ19QT0lOVF9pc19vbl9jdXJ2ZTsKKysJCUNSWVBUT19zZXRfbG9ja2VkX21lbV9leF9mdW5jdGlvbnM7CisrCQlDUllQVE9fc2V0X2xvY2tlZF9tZW1fZXhfZnVuY3M7CisrCQlkMmlfS1JCNV9DSEVDS1NVTTsKKysJCUFTTjFfaXRlbV9kdXA7CisrCQlYNTA5X2l0OworKwkJQk5fbW9kX2FkZDsKKysJCUtSQjVfQVVUSERBVEFfZnJlZTsKKysJCV9vc3NsX29sZF9kZXNfY2JjX2Nrc3VtOworKwkJQVNOMV9pdGVtX3ZlcmlmeTsKKysJCUNSWVBUT19zZXRfbWVtX2V4X2Z1bmN0aW9uczsKKysJCUVDX1BPSU5UX2dldF9KcHJvamVjdGl2ZV9jb29yZGluYXRlc19HRnA7CisrCQlFQ19QT0lOVF9nZXRfSnByb2pfY29vcmRzX0dGcDsKKysJCVpMT05HX2l0OworKwkJQ1JZUFRPX2dldF9sb2NrZWRfbWVtX2V4X2Z1bmN0aW9uczsKKysJCUNSWVBUT19nZXRfbG9ja2VkX21lbV9leF9mdW5jczsKKysJCUFTTjFfVElNRV9jaGVjazsKKysJCVVJX2dldDBfdXNlcl9kYXRhOworKwkJSE1BQ19DVFhfY2xlYW51cDsKKysJCURTQV91cF9yZWY7CisrCQlfb3NzbF9vbGRfZGVzX2VkZTNfY2ZiNjRfZW5jcnlwdDsKKysJCV9vc3NsX29kZXNfZWRlM19jZmI2NF9lbmNyeXB0OworKwkJQVNOMV9CTVBTVFJJTkdfaXQ7CisrCQlBU04xX3RhZzJiaXQ7CisrCQlVSV9tZXRob2Rfc2V0X2ZsdXNoZXI7CisrCQlYNTA5X29jc3BpZF9wcmludDsKKysJCUtSQjVfRU5DREFUQV9pdDsKKysJCUVOR0lORV9nZXRfbG9hZF9wdWJrZXlfZnVuY3Rpb247CisrCQlVSV9hZGRfdXNlcl9kYXRhOworKwkJT0NTUF9SRVFVRVNUX2RlbGV0ZV9leHQ7CisrCQlVSV9nZXRfbWV0aG9kOworKwkJT0NTUF9PTkVSRVFfZnJlZTsKKysJCUFTTjFfUFJJTlRBQkxFU1RSSU5HX2l0OworKwkJWDUwOV9DUkxfc2V0X25leHRVcGRhdGU7CisrCQlPQ1NQX1JFUVVFU1RfaXQ7CisrCQlPQ1NQX0JBU0lDUkVTUF9pdDsKKysJCUFFU19lY2JfZW5jcnlwdDsKKysJCUJOX21vZF9zcXI7CisrCQlORVRTQ0FQRV9DRVJUX1NFUVVFTkNFX2l0OworKwkJR0VORVJBTF9OQU1FU19pdDsKKysJCUFVVEhPUklUWV9JTkZPX0FDQ0VTU19pdDsKKysJCUFTTjFfRkJPT0xFQU5faXQ7CisrCQlVSV9zZXRfZXhfZGF0YTsKKysJCV9vc3NsX29sZF9kZXNfc3RyaW5nX3RvX2tleTsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfUlNBOworKwkJZDJpX0tSQjVfUFJJTkNOQU1FOworKwkJT0NTUF9SRVNQQllURVNfaXQ7CisrCQlYNTA5X0NJTkZfaXQ7CisrCQlFTkdJTkVfdW5yZWdpc3Rlcl9kaWdlc3RzOworKwkJZDJpX0VESVBBUlRZTkFNRTsKKysJCWQyaV9PQ1NQX1NFUlZJQ0VMT0M7CisrCQlFTkdJTkVfZ2V0X2RpZ2VzdHM7CisrCQlfb3NzbF9vbGRfZGVzX3NldF9vZGRfcGFyaXR5OworKwkJT0NTUF9SRVNQREFUQV9mcmVlOworKwkJZDJpX0tSQjVfVElDS0VUOworKwkJT1RIRVJOQU1FX2l0OworKwkJRVZQX01EX0NUWF9jbGVhbnVwOworKwkJZDJpX0FTTjFfR0VORVJBTFNUUklORzsKKysJCVg1MDlfQ1JMX3NldF92ZXJzaW9uOworKwkJQk5fbW9kX3N1YjsKKysJCU9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0X2J5X05JRDsKKysJCUVOR0lORV9nZXRfZXhfbmV3X2luZGV4OworKwkJT0NTUF9SRVFVRVNUX2ZyZWU7CisrCQlPQ1NQX1JFUVVFU1RfYWRkMV9leHRfaTJkOworKwkJWDUwOV9WQUxfaXQ7CisrCQlFQ19QT0lOVHNfbWFrZV9hZmZpbmU7CisrCQlFQ19QT0lOVF9tdWw7CisrCQlYNTA5VjNfRVhUX2FkZF9uY29uZjsKKysJCVg1MDlfVFJVU1Rfc2V0OworKwkJWDUwOV9DUkxfYWRkMV9leHRfaTJkOworKwkJX29zc2xfb2xkX2Rlc19mY3J5cHQ7CisrCQlESVNQTEFZVEVYVF9pdDsKKysJCVg1MDlfQ1JMX3NldF9sYXN0VXBkYXRlOworKwkJT0NTUF9CQVNJQ1JFU1BfZnJlZTsKKysJCU9DU1BfQkFTSUNSRVNQX2FkZDFfZXh0X2kyZDsKKysJCWQyaV9LUkI1X0FVVEhFTlRCT0RZOworKwkJQ1JZUFRPX3NldF9leF9kYXRhX2ltcGxlbWVudGF0aW9uOworKwkJQ1JZUFRPX3NldF9leF9kYXRhX2ltcGw7CisrCQlLUkI1X0VOQ0RBVEFfbmV3OworKwkJRFNPX3VwX3JlZjsKKysJCU9DU1BfY3JsX3JlYXNvbl9zdHI7CisrCQlVSV9nZXQwX3Jlc3VsdF9zdHJpbmc7CisrCQlBU04xX0dFTkVSQUxTVFJJTkdfbmV3OworKwkJWDUwOV9TSUdfaXQ7CisrCQlFUlJfc2V0X2ltcGxlbWVudGF0aW9uOworKwkJRVJSX2xvYWRfRUNfc3RyaW5nczsKKysJCVVJX2dldDBfYWN0aW9uX3N0cmluZzsKKysJCU9DU1BfT05FUkVRX2dldF9leHQ7CisrCQlFQ19QT0lOVF9tZXRob2Rfb2Y7CisrCQlpMmRfS1JCNV9BUFJFUUJPRFk7CisrCQlfb3NzbF9vbGRfZGVzX2VjYjNfZW5jcnlwdDsKKysJCUNSWVBUT19nZXRfbWVtX2V4X2Z1bmN0aW9uczsKKysJCUVOR0lORV9nZXRfZXhfZGF0YTsKKysJCVVJX2Rlc3Ryb3lfbWV0aG9kOworKwkJQVNOMV9pdGVtX2kyZF9iaW87CisrCQlPQ1NQX09ORVJFUV9nZXRfZXh0X2J5X09CSjsKKysJCUFTTjFfcHJpbWl0aXZlX25ldzsKKysJCUFTTjFfUFJJTlRBQkxFX2l0OworKwkJRVZQX2Flc18xOTJfZWNiOworKwkJT0NTUF9TSUdOQVRVUkVfbmV3OworKwkJTE9OR19pdDsKKysJCUFTTjFfVklTSUJMRVNUUklOR19pdDsKKysJCU9DU1BfU0lOR0xFUkVTUF9hZGQxX2V4dF9pMmQ7CisrCQlkMmlfT0NTUF9DRVJUSUQ7CisrCQlBU04xX2l0ZW1fZDJpX2ZwOworKwkJQ1JMX0RJU1RfUE9JTlRTX2l0OworKwkJR0VORVJBTF9OQU1FX3ByaW50OworKwkJT0NTUF9TSU5HTEVSRVNQX2RlbGV0ZV9leHQ7CisrCQlQS0NTMTJfU0FGRUJBR1NfaXQ7CisrCQlkMmlfT0NTUF9TSUdOQVRVUkU7CisrCQlPQ1NQX3JlcXVlc3RfYWRkMV9ub25jZTsKKysJCUVOR0lORV9zZXRfY21kX2RlZm5zOworKwkJT0NTUF9TRVJWSUNFTE9DX2ZyZWU7CisrCQlFQ19HUk9VUF9mcmVlOworKwkJQVNOMV9CSVRfU1RSSU5HX2l0OworKwkJWDUwOV9SRVFfaXQ7CisrCQlfb3NzbF9vbGRfZGVzX2NiY19lbmNyeXB0OworKwkJRVJSX3VubG9hZF9zdHJpbmdzOworKwkJUEtDUzdfU0lHTl9FTlZFTE9QRV9pdDsKKysJCUVESVBBUlRZTkFNRV9mcmVlOworKwkJT0NTUF9SRVFJTkZPX2ZyZWU7CisrCQlFQ19HUk9VUF9uZXdfY3VydmVfR0ZwOworKwkJT0NTUF9SRVFVRVNUX2dldDFfZXh0X2QyaTsKKysJCVBLQ1MxMl9pdGVtX3BhY2tfc2FmZWJhZzsKKysJCWFzbjFfZXhfYzJpOworKwkJRU5HSU5FX3JlZ2lzdGVyX2RpZ2VzdHM7CisrCQlpMmRfT0NTUF9SRVZPS0VESU5GTzsKKysJCWFzbjFfZW5jX3Jlc3RvcmU7CisrCQlVSV9mcmVlOworKwkJVUlfbmV3X21ldGhvZDsKKysJCUVWUF9FbmNyeXB0SW5pdF9leDsKKysJCVg1MDlfcHVia2V5X2RpZ2VzdDsKKysJCUVDX1BPSU5UX2ludmVydDsKKysJCU9DU1BfYmFzaWNfc2lnbjsKKysJCWkyZF9PQ1NQX1JFU1BJRDsKKysJCU9DU1BfY2hlY2tfbm9uY2U7CisrCQlFTkdJTkVfY3RybF9jbWQ7CisrCQlkMmlfS1JCNV9FTkNLRVk7CisrCQlPQ1NQX3BhcnNlX3VybDsKKysJCU9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0OworKwkJT0NTUF9DUkxJRF9mcmVlOworKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0MV9leHRfZDJpOworKwkJUlNBUHJpdmF0ZUtleV9pdDsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfREg7CisrCQlpMmRfRURJUEFSVFlOQU1FOworKwkJRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlc19HRnA7CisrCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3Jkc19HRnA7CisrCQlPQ1NQX0NSTElEX25ldzsKKysJCUVOR0lORV9nZXRfZmxhZ3M7CisrCQlPQ1NQX09ORVJFUV9pdDsKKysJCVVJX3Byb2Nlc3M7CisrCQlBU04xX0lOVEVHRVJfaXQ7CisrCQlFVlBfQ2lwaGVySW5pdF9leDsKKysJCVVJX2dldF9zdHJpbmdfdHlwZTsKKysJCUVOR0lORV91bnJlZ2lzdGVyX0RIOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9EU0E7CisrCQlPQ1NQX09ORVJFUV9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJYm5fZHVwX2V4cGFuZDsKKysJCU9DU1BfY2VydF9pZF9uZXc7CisrCQlCQVNJQ19DT05TVFJBSU5UU19pdDsKKysJCUJOX21vZF9hZGRfcXVpY2s7CisrCQlFQ19QT0lOVF9uZXc7CisrCQlFVlBfTURfQ1RYX2Rlc3Ryb3k7CisrCQlPQ1NQX1JFU1BCWVRFU19mcmVlOworKwkJRVZQX2Flc18xMjhfY2JjOworKwkJT0NTUF9TSU5HTEVSRVNQX2dldDFfZXh0X2QyaTsKKysJCUVDX1BPSU5UX2ZyZWU7CisrCQlESF91cF9yZWY7CisrCQlYNTA5X05BTUVfRU5UUllfaXQ7CisrCQlVSV9nZXRfZXhfbmV3X2luZGV4OworKwkJQk5fbW9kX3N1Yl9xdWljazsKKysJCU9DU1BfT05FUkVRX2FkZF9leHQ7CisrCQlPQ1NQX3JlcXVlc3Rfc2lnbjsKKysJCUVWUF9EaWdlc3RGaW5hbF9leDsKKysJCUVOR0lORV9zZXRfZGlnZXN0czsKKysJCU9DU1BfaWRfaXNzdWVyX2NtcDsKKysJCU9CSl9OQU1FX2RvX2FsbDsKKysJCUVDX1BPSU5Uc19tdWw7CisrCQlFTkdJTkVfcmVnaXN0ZXJfY29tcGxldGU7CisrCQlYNTA5VjNfRVhUX25jb25mX25pZDsKKysJCUFTTjFfU0VRVUVOQ0VfaXQ7CisrCQlVSV9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlSQU5EX3F1ZXJ5X2VnZF9ieXRlczsKKysJCVVJX21ldGhvZF9nZXRfd3JpdGVyOworKwkJVUlfT3BlblNTTDsKKysJCVBFTV9kZWZfY2FsbGJhY2s7CisrCQlFTkdJTkVfY2xlYW51cDsKKysJCURJU1RfUE9JTlRfaXQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfaXQ7CisrCQlkMmlfS1JCNV9US1RCT0RZOworKwkJRUNfUE9JTlRfY21wOworKwkJT0NTUF9SRVZPS0VESU5GT19uZXc7CisrCQlpMmRfT0NTUF9DRVJUU1RBVFVTOworKwkJT0NTUF9iYXNpY19hZGQxX25vbmNlOworKwkJQVNOMV9pdGVtX2V4X2QyaTsKKysJCUJOX21vZF9sc2hpZnQxX3F1aWNrOworKwkJVUlfc2V0X21ldGhvZDsKKysJCU9DU1BfaWRfZ2V0MF9pbmZvOworKwkJQk5fbW9kX3NxcnQ7CisrCQlFQ19HUk9VUF9jb3B5OworKwkJS1JCNV9FTkNEQVRBX2ZyZWU7CisrCQlfb3NzbF9vbGRfZGVzX2NmYl9lbmNyeXB0OworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfYnlfT0JKOworKwkJT0NTUF9jZXJ0X3RvX2lkOworKwkJT0NTUF9SRVNQSURfbmV3OworKwkJT0NTUF9SRVNQREFUQV9pdDsKKysJCWQyaV9PQ1NQX1JFU1BEQVRBOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9jb21wbGV0ZTsKKysJCU9DU1BfY2hlY2tfdmFsaWRpdHk7CisrCQlQS0NTMTJfQkFHU19pdDsKKysJCU9DU1BfdXJsX3N2Y2xvY19uZXc7CisrCQlBU04xX3RlbXBsYXRlX2ZyZWU7CisrCQlPQ1NQX1NJTkdMRVJFU1BfYWRkX2V4dDsKKysJCUtSQjVfQVVUSEVOVEJPRFlfaXQ7CisrCQlYNTA5X3N1cHBvcnRlZF9leHRlbnNpb247CisrCQlpMmRfS1JCNV9BVVRIREFUQTsKKysJCVVJX21ldGhvZF9nZXRfb3BlbmVyOworKwkJRU5HSU5FX3NldF9leF9kYXRhOworKwkJT0NTUF9SRVFVRVNUX3ByaW50OworKwkJQ0JJR05VTV9pdDsKKysJCUtSQjVfVElDS0VUX25ldzsKKysJCUtSQjVfQVBSRVFfbmV3OworKwkJRUNfR1JPVVBfZ2V0X2N1cnZlX0dGcDsKKysJCUtSQjVfRU5DS0VZX25ldzsKKysJCUFTTjFfdGVtcGxhdGVfZDJpOworKwkJX29zc2xfb2xkX2Rlc19xdWFkX2Nrc3VtOworKwkJT0NTUF9zaW5nbGVfZ2V0MF9zdGF0dXM7CisrCQlCTl9zd2FwOworKwkJUE9MSUNZSU5GT19pdDsKKysJCUVOR0lORV9zZXRfZGVzdHJveV9mdW5jdGlvbjsKKysJCWFzbjFfZW5jX2ZyZWU7CisrCQlPQ1NQX1JFU1BJRF9pdDsKKysJCUVDX0dST1VQX25ldzsKKysJCUVWUF9hZXNfMjU2X2NiYzsKKysJCWkyZF9LUkI1X1BSSU5DTkFNRTsKKysJCV9vc3NsX29sZF9kZXNfZW5jcnlwdDI7CisrCQlfb3NzbF9vbGRfZGVzX2VuY3J5cHQzOworKwkJUEtDUzhfUFJJVl9LRVlfSU5GT19pdDsKKysJCU9DU1BfUkVRSU5GT19pdDsKKysJCVBCRVBBUkFNX2l0OworKwkJS1JCNV9BVVRIRU5UQk9EWV9uZXc7CisrCQlYNTA5X0NSTF9hZGQwX3Jldm9rZWQ7CisrCQlFRElQQVJUWU5BTUVfaXQ7CisrCQlORVRTQ0FQRV9TUEtJX2l0OworKwkJVUlfZ2V0MF90ZXN0X3N0cmluZzsKKysJCUVOR0lORV9nZXRfY2lwaGVyX2VuZ2luZTsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfY2lwaGVyczsKKysJCUVDX1BPSU5UX2NvcHk7CisrCQlCTl9rcm9uZWNrZXI7CisrCQlfb3NzbF9vbGRfZGVzX2VkZTNfb2ZiNjRfZW5jcnlwdDsKKysJCV9vc3NsX29kZXNfZWRlM19vZmI2NF9lbmNyeXB0OworKwkJVUlfbWV0aG9kX2dldF9yZWFkZXI7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0X2NvdW50OworKwkJQVNOMV9FTlVNRVJBVEVEX2l0OworKwkJVUlfc2V0X3Jlc3VsdDsKKysJCWkyZF9LUkI1X1RJQ0tFVDsKKysJCVg1MDlfcHJpbnRfZXhfZnA7CisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRfcGFkZGluZzsKKysJCWQyaV9PQ1NQX1JFU1BPTlNFOworKwkJQVNOMV9VVENUSU1FX2l0OworKwkJX29zc2xfb2xkX2Rlc19lbmNfd3JpdGU7CisrCQlPQ1NQX1JFU1BPTlNFX25ldzsKKysJCUFFU19zZXRfZW5jcnlwdF9rZXk7CisrCQlPQ1NQX3Jlc3BfY291bnQ7CisrCQlLUkI1X0NIRUNLU1VNX25ldzsKKysJCUVOR0lORV9sb2FkX2Nzd2lmdDsKKysJCU9DU1Bfb25lcmVxX2dldDBfaWQ7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfY2lwaGVyczsKKysJCU5PVElDRVJFRl9pdDsKKysJCVg1MDlWM19FWFRfQ1JMX2FkZF9uY29uZjsKKysJCU9DU1BfUkVWT0tFRElORk9faXQ7CisrCQlBRVNfZW5jcnlwdDsKKysJCU9DU1BfUkVRVUVTVF9uZXc7CisrCQlBU04xX0FOWV9pdDsKKysJCUNSWVBUT19leF9kYXRhX25ld19jbGFzczsKKysJCV9vc3NsX29sZF9kZXNfbmNiY19lbmNyeXB0OworKwkJaTJkX0tSQjVfVEtUQk9EWTsKKysJCUVDX1BPSU5UX2NsZWFyX2ZyZWU7CisrCQlBRVNfZGVjcnlwdDsKKysJCWFzbjFfZW5jX2luaXQ7CisrCQlVSV9nZXRfcmVzdWx0X21heHNpemU7CisrCQlPQ1NQX0NFUlRJRF9uZXc7CisrCQlFTkdJTkVfdW5yZWdpc3Rlcl9SQU5EOworKwkJVUlfbWV0aG9kX2dldF9jbG9zZXI7CisrCQlkMmlfS1JCNV9FTkNEQVRBOworKwkJT0NTUF9yZXF1ZXN0X29uZXJlcV9jb3VudDsKKysJCU9DU1BfYmFzaWNfdmVyaWZ5OworKwkJS1JCNV9BVVRIRU5UQk9EWV9mcmVlOworKwkJQVNOMV9pdGVtX2QyaTsKKysJCUFTTjFfcHJpbWl0aXZlX2ZyZWU7CisrCQlpMmRfRVhURU5ERURfS0VZX1VTQUdFOworKwkJaTJkX09DU1BfU0lHTkFUVVJFOworKwkJYXNuMV9lbmNfc2F2ZTsKKysJCUVOR0lORV9sb2FkX251cm9uOworKwkJX29zc2xfb2xkX2Rlc19wY2JjX2VuY3J5cHQ7CisrCQlQS0NTMTJfTUFDX0RBVEFfaXQ7CisrCQlPQ1NQX2FjY2VwdF9yZXNwb25zZXNfbmV3OworKwkJYXNuMV9kb19sb2NrOworKwkJUEtDUzdfQVRUUl9WRVJJRllfaXQ7CisrCQlLUkI1X0FQUkVRQk9EWV9pdDsKKysJCWkyZF9PQ1NQX1NJTkdMRVJFU1A7CisrCQlBU04xX2l0ZW1fZXhfbmV3OworKwkJVUlfYWRkX3ZlcmlmeV9zdHJpbmc7CisrCQlfb3NzbF9vbGRfZGVzX3NldF9rZXk7CisrCQlLUkI1X1BSSU5DTkFNRV9pdDsKKysJCUVWUF9EZWNyeXB0SW5pdF9leDsKKysJCWkyZF9PQ1NQX0NFUlRJRDsKKysJCUFTTjFfaXRlbV9kMmlfYmlvOworKwkJRUNfUE9JTlRfZGJsOworKwkJYXNuMV9nZXRfY2hvaWNlX3NlbGVjdG9yOworKwkJaTJkX0tSQjVfQ0hFQ0tTVU07CisrCQlFTkdJTkVfc2V0X3RhYmxlX2ZsYWdzOworKwkJQUVTX29wdGlvbnM7CisrCQlFTkdJTkVfbG9hZF9jaGlsOworKwkJT0NTUF9pZF9jbXA7CisrCQlPQ1NQX0JBU0lDUkVTUF9uZXc7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dF9ieV9OSUQ7CisrCQlLUkI1X0FQUkVRX2l0OworKwkJRU5HSU5FX2dldF9kZXN0cm95X2Z1bmN0aW9uOworKwkJQ09ORl9zZXRfbmNvbmY7CisrCQlBU04xX1BSSU5UQUJMRV9mcmVlOworKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9ieV9OSUQ7CisrCQlESVNUX1BPSU5UX05BTUVfaXQ7CisrCQlYNTA5VjNfZXh0ZW5zaW9uc19wcmludDsKKysJCV9vc3NsX29sZF9kZXNfY2ZiNjRfZW5jcnlwdDsKKysJCVg1MDlfUkVWT0tFRF9hZGQxX2V4dF9pMmQ7CisrCQlfb3NzbF9vbGRfZGVzX29mYl9lbmNyeXB0OworKwkJS1JCNV9US1RCT0RZX25ldzsKKysJCUFTTjFfT0NURVRfU1RSSU5HX2l0OworKwkJRVJSX2xvYWRfVUlfc3RyaW5nczsKKysJCWkyZF9LUkI1X0VOQ0tFWTsKKysJCUFTTjFfdGVtcGxhdGVfbmV3OworKwkJT0NTUF9TSUdOQVRVUkVfZnJlZTsKKysJCUFTTjFfaXRlbV9pMmRfZnA7CisrCQlLUkI1X1BSSU5DTkFNRV9mcmVlOworKwkJUEtDUzdfUkVDSVBfSU5GT19pdDsKKysJCUVYVEVOREVEX0tFWV9VU0FHRV9pdDsKKysJCUVDX0dGcF9zaW1wbGVfbWV0aG9kOworKwkJRUNfR1JPVVBfcHJlY29tcHV0ZV9tdWx0OworKwkJT0NTUF9yZXF1ZXN0X29uZXJlcV9nZXQwOworKwkJVUlfbWV0aG9kX3NldF93cml0ZXI7CisrCQlLUkI1X0FVVEhFTlRfbmV3OworKwkJWDUwOV9DUkxfSU5GT19pdDsKKysJCURTT19zZXRfbmFtZV9jb252ZXJ0ZXI7CisrCQlBRVNfc2V0X2RlY3J5cHRfa2V5OworKwkJUEtDUzdfRElHRVNUX2l0OworKwkJUEtDUzEyX3g1MDkyY2VydGJhZzsKKysJCUVWUF9EaWdlc3RJbml0X2V4OworKwkJaTJhX0FDQ0VTU19ERVNDUklQVElPTjsKKysJCU9DU1BfUkVTUE9OU0VfaXQ7CisrCQlQS0NTN19FTkNfQ09OVEVOVF9pdDsKKysJCU9DU1BfcmVxdWVzdF9hZGQwX2lkOworKwkJRUNfUE9JTlRfbWFrZV9hZmZpbmU7CisrCQlEU09fZ2V0X2ZpbGVuYW1lOworKwkJT0NTUF9DRVJUU1RBVFVTX2l0OworKwkJT0NTUF9yZXF1ZXN0X2FkZDFfY2VydDsKKysJCVVJX2dldDBfb3V0cHV0X3N0cmluZzsKKysJCVVJX2R1cF92ZXJpZnlfc3RyaW5nOworKwkJQk5fbW9kX2xzaGlmdDsKKysJCUtSQjVfQVVUSERBVEFfaXQ7CisrCQlhc24xX3NldF9jaG9pY2Vfc2VsZWN0b3I7CisrCQlPQ1NQX2Jhc2ljX2FkZDFfc3RhdHVzOworKwkJT0NTUF9SRVNQSURfZnJlZTsKKysJCWFzbjFfZ2V0X2ZpZWxkX3B0cjsKKysJCVVJX2FkZF9pbnB1dF9zdHJpbmc7CisrCQlPQ1NQX0NSTElEX2l0OworKwkJaTJkX0tSQjVfQVVUSEVOVEJPRFk7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dF9jb3VudDsKKysJCUVOR0lORV9sb2FkX2F0YWxsYTsKKysJCVg1MDlfTkFNRV9pdDsKKysJCVVTRVJOT1RJQ0VfaXQ7CisrCQlPQ1NQX1JFUUlORk9fbmV3OworKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dDsKKysJCUNSWVBUT19nZXRfZXhfZGF0YV9pbXBsZW1lbnRhdGlvbjsKKysJCUNSWVBUT19nZXRfZXhfZGF0YV9pbXBsOworKwkJQVNOMV9pdGVtX3BhY2s7CisrCQlpMmRfS1JCNV9FTkNEQVRBOworKwkJWDUwOV9QVVJQT1NFX3NldDsKKysJCVg1MDlfUkVRX0lORk9faXQ7CisrCQlVSV9tZXRob2Rfc2V0X29wZW5lcjsKKysJCUFTTjFfaXRlbV9leF9mcmVlOworKwkJQVNOMV9CT09MRUFOX2l0OworKwkJRU5HSU5FX2dldF90YWJsZV9mbGFnczsKKysJCVVJX2NyZWF0ZV9tZXRob2Q7CisrCQlPQ1NQX09ORVJFUV9hZGQxX2V4dF9pMmQ7CisrCQlfc2hhZG93X0RFU19jaGVja19rZXk7CisrCQlkMmlfT0NTUF9SRVFJTkZPOworKwkJVUlfYWRkX2luZm9fc3RyaW5nOworKwkJVUlfZ2V0X3Jlc3VsdF9taW5zaXplOworKwkJQVNOMV9OVUxMX2l0OworKwkJQk5fbW9kX2xzaGlmdDE7CisrCQlkMmlfT0NTUF9PTkVSRVE7CisrCQlPQ1NQX09ORVJFUV9uZXc7CisrCQlLUkI1X1RJQ0tFVF9pdDsKKysJCUVWUF9hZXNfMTkyX2NiYzsKKysJCUtSQjVfVElDS0VUX2ZyZWU7CisrCQlVSV9uZXc7CisrCQlPQ1NQX3Jlc3BvbnNlX2NyZWF0ZTsKKysJCV9vc3NsX29sZF9kZXNfeGNiY19lbmNyeXB0OworKwkJUEtDUzdfaXQ7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X2NyaXQ7CisrCQlFTkdJTkVfc2V0X2ZsYWdzOworKwkJX29zc2xfb2xkX2Rlc19lY2JfZW5jcnlwdDsKKysJCU9DU1BfcmVzcG9uc2VfZ2V0MV9iYXNpYzsKKysJCUVWUF9EaWdlc3Q7CisrCQlPQ1NQX09ORVJFUV9kZWxldGVfZXh0OworKwkJQVNOMV9UQk9PTEVBTl9pdDsKKysJCUFTTjFfaXRlbV9uZXc7CisrCQlBU04xX1RJTUVfdG9fZ2VuZXJhbGl6ZWR0aW1lOworKwkJQklHTlVNX2l0OworKwkJQUVTX2NiY19lbmNyeXB0OworKwkJRU5HSU5FX2dldF9sb2FkX3ByaXZrZXlfZnVuY3Rpb247CisrCQlFTkdJTkVfZ2V0X2xvYWRfcHJpdmtleV9mbjsKKysJCU9DU1BfUkVTUE9OU0VfZnJlZTsKKysJCVVJX21ldGhvZF9zZXRfcmVhZGVyOworKwkJaTJkX0FTTjFfVDYxU1RSSU5HOworKwkJRUNfUE9JTlRfc2V0X3RvX2luZmluaXR5OworKwkJRVJSX2xvYWRfT0NTUF9zdHJpbmdzOworKwkJRUNfUE9JTlRfcG9pbnQyb2N0OworKwkJS1JCNV9BUFJFUV9mcmVlOworKwkJQVNOMV9PQkpFQ1RfaXQ7CisrCQlPQ1NQX2NybElEX25ldzsKKysJCU9DU1BfY3JsSUQyX25ldzsKKysJCUNPTkZfbW9kdWxlc19sb2FkX2ZpbGU7CisrCQlDT05GX2ltb2R1bGVfc2V0X3Vzcl9kYXRhOworKwkJRU5HSU5FX3NldF9kZWZhdWx0X3N0cmluZzsKKysJCUNPTkZfbW9kdWxlX2dldF91c3JfZGF0YTsKKysJCUFTTjFfYWRkX29pZF9tb2R1bGU7CisrCQlDT05GX21vZHVsZXNfZmluaXNoOworKwkJT1BFTlNTTF9jb25maWc7CisrCQlDT05GX21vZHVsZXNfdW5sb2FkOworKwkJQ09ORl9pbW9kdWxlX2dldF92YWx1ZTsKKysJCUNPTkZfbW9kdWxlX3NldF91c3JfZGF0YTsKKysJCUNPTkZfcGFyc2VfbGlzdDsKKysJCUNPTkZfbW9kdWxlX2FkZDsKKysJCUNPTkZfZ2V0MV9kZWZhdWx0X2NvbmZpZ19maWxlOworKwkJQ09ORl9pbW9kdWxlX2dldF9mbGFnczsKKysJCUNPTkZfaW1vZHVsZV9nZXRfbW9kdWxlOworKwkJQ09ORl9tb2R1bGVzX2xvYWQ7CisrCQlDT05GX2ltb2R1bGVfZ2V0X25hbWU7CisrCQlFUlJfcGVla190b3BfZXJyb3I7CisrCQlDT05GX2ltb2R1bGVfZ2V0X3Vzcl9kYXRhOworKwkJQ09ORl9pbW9kdWxlX3NldF9mbGFnczsKKysJCUVOR0lORV9hZGRfY29uZl9tb2R1bGU7CisrCQlFUlJfcGVla19sYXN0X2Vycm9yX2xpbmU7CisrCQlFUlJfcGVla19sYXN0X2Vycm9yX2xpbmVfZGF0YTsKKysJCUVSUl9wZWVrX2xhc3RfZXJyb3I7CisrCQlERVNfcmVhZF8ycGFzc3dvcmRzOworKwkJREVTX3JlYWRfcGFzc3dvcmQ7CisrCQlVSV9VVElMX3JlYWRfcHc7CisrCQlVSV9VVElMX3JlYWRfcHdfc3RyaW5nOworKwkJRU5HSU5FX2xvYWRfYWVwOworKwkJRU5HSU5FX2xvYWRfc3VyZXdhcmU7CisrCQlPUEVOU1NMX2FkZF9hbGxfYWxnb3JpdGhtc19ub2NvbmY7CisrCQlPUEVOU1NMX2FkZF9hbGxfYWxnb19ub2NvbmY7CisrCQlPUEVOU1NMX2FkZF9hbGxfYWxnb3JpdGhtc19jb25mOworKwkJT1BFTlNTTF9hZGRfYWxsX2FsZ29fY29uZjsKKysJCU9QRU5TU0xfbG9hZF9idWlsdGluX21vZHVsZXM7CisrCQlBRVNfb2ZiMTI4X2VuY3J5cHQ7CisrCQlBRVNfY3RyMTI4X2VuY3J5cHQ7CisrCQlBRVNfY2ZiMTI4X2VuY3J5cHQ7CisrCQlFTkdJTkVfbG9hZF80NzU4Y2NhOworKwkJX29zc2xfMDk2X2Rlc19yYW5kb21fc2VlZDsKKysJCUVWUF9hZXNfMjU2X29mYjsKKysJCUVWUF9hZXNfMTkyX29mYjsKKysJCUVWUF9hZXNfMTI4X2NmYjEyODsKKysJCUVWUF9hZXNfMjU2X2NmYjEyODsKKysJCUVWUF9hZXNfMTI4X29mYjsKKysJCUVWUF9hZXNfMTkyX2NmYjEyODsKKysJCUNPTkZfbW9kdWxlc19mcmVlOworKwkJTkNPTkZfZGVmYXVsdDsKKysJCU9QRU5TU0xfbm9fY29uZmlnOworKwkJTkNPTkZfV0lOMzI7CisrCQlBU04xX1VOSVZFUlNBTFNUUklOR19uZXc7CisrCQlFVlBfZGVzX2VkZV9lY2I7CisrCQlpMmRfQVNOMV9VTklWRVJTQUxTVFJJTkc7CisrCQlBU04xX1VOSVZFUlNBTFNUUklOR19mcmVlOworKwkJQVNOMV9VTklWRVJTQUxTVFJJTkdfaXQ7CisrCQlkMmlfQVNOMV9VTklWRVJTQUxTVFJJTkc7CisrCQlFVlBfZGVzX2VkZTNfZWNiOworKwkJWDUwOV9SRVFfcHJpbnRfZXg7CisrCQlFTkdJTkVfdXBfcmVmOworKwkJQlVGX01FTV9ncm93X2NsZWFuOworKwkJQ1JZUFRPX3JlYWxsb2NfY2xlYW47CisrCQlCVUZfc3RybGNhdDsKKysJCUJJT19pbmRlbnQ7CisrCQlCVUZfc3RybGNweTsKKysJCU9wZW5TU0xEaWU7CisrCQlPUEVOU1NMX2NsZWFuc2U7CisrCQlFTkdJTkVfc2V0dXBfYnNkX2NyeXB0b2RldjsKKysJCUVSUl9yZWxlYXNlX2Vycl9zdGF0ZV90YWJsZTsKKysJCUVWUF9hZXNfMTI4X2NmYjg7CisrCQlGSVBTX2NvcnJ1cHRfcnNhOworKwkJRklQU19zZWxmdGVzdF9kZXM7CisrCQlFVlBfYWVzXzEyOF9jZmIxOworKwkJRVZQX2Flc18xOTJfY2ZiODsKKysJCUZJUFNfbW9kZV9zZXQ7CisrCQlGSVBTX3NlbGZ0ZXN0X2RzYTsKKysJCUVWUF9hZXNfMjU2X2NmYjg7CisrCQlGSVBTX2FsbG93X21kNTsKKysJCURFU19lZGUzX2NmYl9lbmNyeXB0OworKwkJRVZQX2Rlc19lZGUzX2NmYjg7CisrCQlGSVBTX3JhbmRfc2VlZGVkOworKwkJQUVTX2NmYnJfZW5jcnlwdF9ibG9jazsKKysJCUFFU19jZmI4X2VuY3J5cHQ7CisrCQlGSVBTX3JhbmRfc2VlZDsKKysJCUZJUFNfY29ycnVwdF9kZXM7CisrCQlFVlBfYWVzXzE5Ml9jZmIxOworKwkJRklQU19zZWxmdGVzdF9hZXM7CisrCQlGSVBTX3NldF9wcm5nX2tleTsKKysJCUVWUF9kZXNfY2ZiODsKKysJCUZJUFNfY29ycnVwdF9kc2E7CisrCQlGSVBTX3Rlc3RfbW9kZTsKKysJCUZJUFNfcmFuZF9tZXRob2Q7CisrCQlFVlBfYWVzXzI1Nl9jZmIxOworKwkJRVJSX2xvYWRfRklQU19zdHJpbmdzOworKwkJRklQU19jb3JydXB0X2FlczsKKysJCUZJUFNfc2VsZnRlc3Rfc2hhMTsKKysJCUZJUFNfc2VsZnRlc3RfcnNhOworKwkJRklQU19jb3JydXB0X3NoYTE7CisrCQlFVlBfZGVzX2NmYjE7CisrCQlGSVBTX2RzYV9jaGVjazsKKysJCUFFU19jZmIxX2VuY3J5cHQ7CisrCQlFVlBfZGVzX2VkZTNfY2ZiMTsKKysJCUZJUFNfcmFuZF9jaGVjazsKKysJCUZJUFNfbWQ1X2FsbG93ZWQ7CisrCQlGSVBTX21vZGU7CisrCQlGSVBTX3NlbGZ0ZXN0X2ZhaWxlZDsKKysJCXNrX2lzX3NvcnRlZDsKKysJCVg1MDlfY2hlY2tfY2E7CisrCQlITUFDX0NUWF9zZXRfZmxhZ3M7CisrCQlkMmlfUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTjsKKysJCVBST1hZX1BPTElDWV9pdDsKKysJCWkyZF9QUk9YWV9QT0xJQ1k7CisrCQlpMmRfUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTjsKKysJCWQyaV9QUk9YWV9QT0xJQ1k7CisrCQlQUk9YWV9DRVJUX0lORk9fRVhURU5TSU9OX25ldzsKKysJCVBST1hZX0NFUlRfSU5GT19FWFRFTlNJT05fZnJlZTsKKysJCVBST1hZX0NFUlRfSU5GT19FWFRFTlNJT05faXQ7CisrCQlQUk9YWV9QT0xJQ1lfZnJlZTsKKysJCVBST1hZX1BPTElDWV9uZXc7CisrCQlCTl9NT05UX0NUWF9zZXRfbG9ja2VkOworKwkJRklQU19zZWxmdGVzdF9ybmc7CisrCQlFVlBfc2hhMzg0OworKwkJRVZQX3NoYTUxMjsKKysJCUVWUF9zaGEyMjQ7CisrCQlFVlBfc2hhMjU2OworKwkJRklQU19zZWxmdGVzdF9obWFjOworKwkJRklQU19jb3JydXB0X3JuZzsKKysJCUJOX21vZF9leHBfbW9udF9jb25zdHRpbWU7CisrCQlSU0FfWDkzMV9oYXNoX2lkOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfWDkzMTsKKysJCVJTQV92ZXJpZnlfUEtDUzFfUFNTOworKwkJUlNBX3BhZGRpbmdfYWRkX1g5MzE7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfUFNTOworKwkJUEtDUzFfTUdGMTsKKysJCUJOX1g5MzFfZ2VuZXJhdGVfWHBxOworKwkJUlNBX1g5MzFfZ2VuZXJhdGVfa2V5OworKwkJQk5fWDkzMV9kZXJpdmVfcHJpbWU7CisrCQlCTl9YOTMxX2dlbmVyYXRlX3ByaW1lOworKwkJUlNBX1g5MzFfZGVyaXZlOworKwkJQklPX25ld19kZ3JhbTsKKysJCUJOX2dldDBfbmlzdF9wcmltZV8zODQ7CisrCQlFUlJfc2V0X21hcms7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXQwX2NybHM7CisrCQlFTkdJTkVfc2V0X1NUT1JFOworKwkJRU5HSU5FX3JlZ2lzdGVyX0VDRFNBOworKwkJU1RPUkVfbWV0aF9zZXRfbGlzdF9zdGFydF9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfbGlzdF9zdGFydF9mdW5jdGlvbjsKKysJCUJOX0JMSU5ESU5HX2ludmVydF9leDsKKysJCU5BTUVfQ09OU1RSQUlOVFNfZnJlZTsKKysJCVNUT1JFX0FUVFJfSU5GT19zZXRfbnVtYmVyOworKwkJQk5fQkxJTkRJTkdfZ2V0X3RocmVhZF9pZDsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldDBfcGFyYW07CisrCQlQT0xJQ1lfTUFQUElOR19pdDsKKysJCVNUT1JFX3BhcnNlX2F0dHJzX3N0YXJ0OworKwkJUE9MSUNZX0NPTlNUUkFJTlRTX2ZyZWU7CisrCQlFVlBfUEtFWV9hZGQxX2F0dHJfYnlfTklEOworKwkJQk5fbmlzdF9tb2RfMTkyOworKwkJRUNfR1JPVVBfZ2V0X3RyaW5vbWlhbF9iYXNpczsKKysJCVNUT1JFX3NldF9tZXRob2Q7CisrCQlHRU5FUkFMX1NVQlRSRUVfZnJlZTsKKysJCU5BTUVfQ09OU1RSQUlOVFNfaXQ7CisrCQlFQ0RIX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCVBLQ1MxMl9hZGRfc2FmZTsKKysJCUVDX0tFWV9uZXdfYnlfY3VydmVfbmFtZTsKKysJCVNUT1JFX21ldGhfZ2V0X3VwZGF0ZV9zdG9yZV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfdXBkYXRlX3N0b3JlX2Z1bmN0aW9uOworKwkJRU5HSU5FX3JlZ2lzdGVyX0VDREg7CisrCQlTSEE1MTJfVXBkYXRlOworKwkJaTJkX0VDUHJpdmF0ZUtleTsKKysJCUJOX2dldDBfbmlzdF9wcmltZV8xOTI7CisrCQlTVE9SRV9tb2RpZnlfY2VydGlmaWNhdGU7CisrCQlFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm07CisrCQlFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3Jkc19HRjJtOworKwkJQk5fR0YybV9tb2RfZXhwX2FycjsKKysJCVNUT1JFX0FUVFJfSU5GT19tb2RpZnlfbnVtYmVyOworKwkJWDUwOV9rZXlpZF9nZXQwOworKwkJRU5HSU5FX2xvYWRfZ21wOworKwkJcGl0ZW1fbmV3OworKwkJQk5fR0YybV9tb2RfbXVsX2FycjsKKysJCVNUT1JFX2xpc3RfcHVibGljX2tleV9lbmRwOworKwkJbzJpX0VDUHVibGljS2V5OworKwkJRUNfS0VZX2NvcHk7CisrCQlCSU9fZHVtcF9mcDsKKysJCVg1MDlfcG9saWN5X25vZGVfZ2V0MF9wYXJlbnQ7CisrCQlFQ19HUk9VUF9jaGVja19kaXNjcmltaW5hbnQ7CisrCQlpMm9fRUNQdWJsaWNLZXk7CisrCQlFQ19LRVlfcHJlY29tcHV0ZV9tdWx0OworKwkJYTJpX0lQQUREUkVTUzsKKysJCVNUT1JFX21ldGhfc2V0X2luaXRpYWxpc2VfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2luaXRpYWxpc2VfZnVuY3Rpb247CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfZGVwdGg7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9pbmhlcml0OworKwkJRUNfUE9JTlRfcG9pbnQyYm47CisrCQlTVE9SRV9BVFRSX0lORk9fc2V0X2RuOworKwkJWDUwOV9wb2xpY3lfdHJlZV9nZXQwX3BvbGljaWVzOworKwkJRUNfR1JPVVBfbmV3X2N1cnZlX0dGMm07CisrCQlTVE9SRV9kZXN0cm95X21ldGhvZDsKKysJCUVOR0lORV91bnJlZ2lzdGVyX1NUT1JFOworKwkJRVZQX1BLRVlfZ2V0MV9FQ19LRVk7CisrCQlTVE9SRV9BVFRSX0lORk9fZ2V0MF9udW1iZXI7CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfRUNESDsKKysJCUVDX0tFWV9nZXRfY29udl9mb3JtOworKwkJQVNOMV9PQ1RFVF9TVFJJTkdfTkRFRl9pdDsKKysJCVNUT1JFX2RlbGV0ZV9wdWJsaWNfa2V5OworKwkJU1RPUkVfZ2V0X3B1YmxpY19rZXk7CisrCQlTVE9SRV9tb2RpZnlfYXJiaXRyYXJ5OworKwkJRU5HSU5FX2dldF9zdGF0aWNfc3RhdGU7CisrCQlwcXVldWVfaXRlcmF0b3I7CisrCQlFQ0RTQV9TSUdfbmV3OworKwkJT1BFTlNTTF9ESVJfZW5kOworKwkJQk5fR0YybV9tb2Rfc3FyOworKwkJRUNfUE9JTlRfYm4ycG9pbnQ7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfZGVwdGg7CisrCQlFQ19LRVlfc2V0X2FzbjFfZmxhZzsKKysJCVNUT1JFX2dldF9tZXRob2Q7CisrCQlFQ19LRVlfZ2V0X2tleV9tZXRob2RfZGF0YTsKKysJCUVDRFNBX3NpZ25fZXg7CisrCQlTVE9SRV9wYXJzZV9hdHRyc19lbmQ7CisrCQlFQ19HUk9VUF9nZXRfcG9pbnRfY29udmVyc2lvbl9mb3JtOworKwkJRUNfR1JPVVBfZ2V0X3BvaW50X2NvbnZfZm9ybTsKKysJCVNUT1JFX21ldGhvZF9zZXRfc3RvcmVfZnVuY3Rpb247CisrCQlTVE9SRV9BVFRSX0lORk9faW47CisrCQlQRU1fcmVhZF9iaW9fRUNQS1BhcmFtZXRlcnM7CisrCQlFQ19HUk9VUF9nZXRfcGVudGFub21pYWxfYmFzaXM7CisrCQlFVlBfUEtFWV9hZGQxX2F0dHJfYnlfdHh0OworKwkJQk5fQkxJTkRJTkdfc2V0X2ZsYWdzOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9wb2xpY2llczsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldDFfbmFtZTsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldF9wdXJwb3NlOworKwkJU1RPUkVfZ2V0X251bWJlcjsKKysJCUVDRFNBX3NpZ25fc2V0dXA7CisrCQlCTl9HRjJtX21vZF9zb2x2ZV9xdWFkX2FycjsKKysJCUVDX0tFWV91cF9yZWY7CisrCQlQT0xJQ1lfTUFQUElOR19mcmVlOworKwkJQk5fR0YybV9tb2RfZGl2OworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X2ZsYWdzOworKwkJRUNfS0VZX2ZyZWU7CisrCQlTVE9SRV9tZXRoX3NldF9saXN0X25leHRfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2xpc3RfbmV4dF9mdW5jdGlvbjsKKysJCVBFTV93cml0ZV9iaW9fRUNQcml2YXRlS2V5OworKwkJZDJpX0VDX1BVQktFWTsKKysJCVNUT1JFX21ldGhfZ2V0X2dlbmVyYXRlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9nZW5lcmF0ZV9mdW5jdGlvbjsKKysJCVNUT1JFX21ldGhfc2V0X2xpc3RfZW5kX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9saXN0X2VuZF9mdW5jdGlvbjsKKysJCXBxdWV1ZV9wcmludDsKKysJCUVDX0dST1VQX2hhdmVfcHJlY29tcHV0ZV9tdWx0OworKwkJRUNfS0VZX3ByaW50X2ZwOworKwkJQk5fR0YybV9tb2RfYXJyOworKwkJUEVNX3dyaXRlX2Jpb19YNTA5X0NFUlRfUEFJUjsKKysJCUVWUF9QS0VZX2NtcDsKKysJCVg1MDlfcG9saWN5X2xldmVsX25vZGVfY291bnQ7CisrCQlTVE9SRV9uZXdfZW5naW5lOworKwkJU1RPUkVfbGlzdF9wdWJsaWNfa2V5X3N0YXJ0OworKwkJWDUwOV9WRVJJRllfUEFSQU1fbmV3OworKwkJRUNESF9nZXRfZXhfZGF0YTsKKysJCUVWUF9QS0VZX2dldF9hdHRyOworKwkJRUNEU0FfZG9fc2lnbjsKKysJCUVOR0lORV91bnJlZ2lzdGVyX0VDREg7CisrCQlFQ0RIX09wZW5TU0w7CisrCQlFQ19LRVlfc2V0X2NvbnZfZm9ybTsKKysJCUVDX1BPSU5UX2R1cDsKKysJCUdFTkVSQUxfU1VCVFJFRV9uZXc7CisrCQlTVE9SRV9saXN0X2NybF9lbmRwOworKwkJRUNfZ2V0X2J1aWx0aW5fY3VydmVzOworKwkJWDUwOV9wb2xpY3lfbm9kZV9nZXQwX3F1YWxpZmllcnM7CisrCQlYNTA5X3BjeV9ub2RlX2dldDBfcXVhbGlmaWVyczsKKysJCVNUT1JFX2xpc3RfY3JsX2VuZDsKKysJCUVWUF9QS0VZX3NldDFfRUNfS0VZOworKwkJQk5fR0YybV9tb2Rfc3FydF9hcnI7CisrCQlpMmRfRUNQcml2YXRlS2V5X2JpbzsKKysJCUVDUEtQYXJhbWV0ZXJzX3ByaW50X2ZwOworKwkJcHF1ZXVlX2ZpbmQ7CisrCQlFQ0RTQV9TSUdfZnJlZTsKKysJCVBFTV93cml0ZV9iaW9fRUNQS1BhcmFtZXRlcnM7CisrCQlTVE9SRV9tZXRob2Rfc2V0X2N0cmxfZnVuY3Rpb247CisrCQlTVE9SRV9saXN0X3B1YmxpY19rZXlfZW5kOworKwkJRUNfS0VZX3NldF9wcml2YXRlX2tleTsKKysJCXBxdWV1ZV9wZWVrOworKwkJU1RPUkVfZ2V0X2FyYml0cmFyeTsKKysJCVNUT1JFX3N0b3JlX2NybDsKKysJCVg1MDlfcG9saWN5X25vZGVfZ2V0MF9wb2xpY3k7CisrCQlQS0NTMTJfYWRkX3NhZmVzOworKwkJQk5fQkxJTkRJTkdfY29udmVydF9leDsKKysJCVg1MDlfcG9saWN5X3RyZWVfZnJlZTsKKysJCU9QRU5TU0xfaWEzMmNhcF9sb2M7CisrCQlCTl9HRjJtX3BvbHkyYXJyOworKwkJU1RPUkVfY3RybDsKKysJCVNUT1JFX0FUVFJfSU5GT19jb21wYXJlOworKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzIyNDsKKysJCWkyZF9FQ1BhcmFtZXRlcnM7CisrCQlpMmRfRUNQS1BhcmFtZXRlcnM7CisrCQlCTl9HRU5DQl9jYWxsOworKwkJZDJpX0VDUEtQYXJhbWV0ZXJzOworKwkJU1RPUkVfbWV0aF9zZXRfZ2VuZXJhdGVfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2dlbmVyYXRlX2Z1bmN0aW9uOworKwkJRU5HSU5FX3NldF9FQ0RIOworKwkJTkFNRV9DT05TVFJBSU5UU19uZXc7CisrCQlTSEEyNTZfSW5pdDsKKysJCUVDX0tFWV9nZXQwX3B1YmxpY19rZXk7CisrCQlQRU1fd3JpdGVfYmlvX0VDX1BVQktFWTsKKysJCVNUT1JFX0FUVFJfSU5GT19zZXRfY3N0cjsKKysJCVNUT1JFX2xpc3RfY3JsX25leHQ7CisrCQlTVE9SRV9BVFRSX0lORk9faW5fcmFuZ2U7CisrCQlFQ1BhcmFtZXRlcnNfcHJpbnQ7CisrCQlTVE9SRV9tZXRoX3NldF9kZWxldGVfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2RlbGV0ZV9mdW5jdGlvbjsKKysJCVNUT1JFX2xpc3RfY2VydGlmaWNhdGVfbmV4dDsKKysJCUFTTjFfZ2VuZXJhdGVfbmNvbmY7CisrCQlCVUZfbWVtZHVwOworKwkJQk5fR0YybV9tb2RfbXVsOworKwkJU1RPUkVfbWV0aF9nZXRfbGlzdF9uZXh0X2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9saXN0X25leHRfZnVuY3Rpb247CisrCQlTVE9SRV9BVFRSX0lORk9fZ2V0MF9kbjsKKysJCVNUT1JFX2xpc3RfcHJpdmF0ZV9rZXlfbmV4dDsKKysJCUVDX0dST1VQX3NldF9zZWVkOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X3RydXN0OworKwkJU1RPUkVfQVRUUl9JTkZPX2ZyZWU7CisrCQlTVE9SRV9nZXRfcHJpdmF0ZV9rZXk7CisrCQlFVlBfUEtFWV9nZXRfYXR0cl9jb3VudDsKKysJCVNUT1JFX0FUVFJfSU5GT19uZXc7CisrCQlFQ19HUk9VUF9nZXRfY3VydmVfR0YybTsKKysJCVNUT1JFX21ldGhfc2V0X3Jldm9rZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfcmV2b2tlX2Z1bmN0aW9uOworKwkJU1RPUkVfc3RvcmVfbnVtYmVyOworKwkJQk5faXNfcHJpbWVfZXg7CisrCQlTVE9SRV9yZXZva2VfcHVibGljX2tleTsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfcGFyYW07CisrCQlTVE9SRV9kZWxldGVfYXJiaXRyYXJ5OworKwkJUEVNX3JlYWRfWDUwOV9DRVJUX1BBSVI7CisrCQlYNTA5X1NUT1JFX3NldF9kZXB0aDsKKysJCUVDRFNBX2dldF9leF9kYXRhOworKwkJU0hBMjI0OworKwkJQklPX2R1bXBfaW5kZW50X2ZwOworKwkJRUNfS0VZX3NldF9ncm91cDsKKysJCUJVRl9zdHJuZHVwOworKwkJU1RPUkVfbGlzdF9jZXJ0aWZpY2F0ZV9zdGFydDsKKysJCUJOX0dGMm1fbW9kOworKwkJWDUwOV9SRVFfY2hlY2tfcHJpdmF0ZV9rZXk7CisrCQlFQ19HUk9VUF9nZXRfc2VlZF9sZW47CisrCQlFUlJfbG9hZF9TVE9SRV9zdHJpbmdzOworKwkJUEVNX3JlYWRfYmlvX0VDX1BVQktFWTsKKysJCVNUT1JFX2xpc3RfcHJpdmF0ZV9rZXlfZW5kOworKwkJaTJkX0VDX1BVQktFWTsKKysJCUVDRFNBX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCUFTTjFfcHV0X2VvYzsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9leHBsaWNpdF9wb2xpY3k7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXhwbF9wb2xpY3k7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV90YWJsZV9jbGVhbnVwOworKwkJU1RPUkVfbW9kaWZ5X3ByaXZhdGVfa2V5OworKwkJWDUwOV9WRVJJRllfUEFSQU1fZnJlZTsKKysJCUVDX01FVEhPRF9nZXRfZmllbGRfdHlwZTsKKysJCUVDX0dGcF9uaXN0X21ldGhvZDsKKysJCVNUT1JFX21ldGhfc2V0X21vZGlmeV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfbW9kaWZ5X2Z1bmN0aW9uOworKwkJU1RPUkVfcGFyc2VfYXR0cnNfbmV4dDsKKysJCUVOR0lORV9sb2FkX3BhZGxvY2s7CisrCQlFQ19HUk9VUF9zZXRfY3VydmVfbmFtZTsKKysJCVg1MDlfQ0VSVF9QQUlSX2l0OworKwkJU1RPUkVfbWV0aF9nZXRfcmV2b2tlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9yZXZva2VfZnVuY3Rpb247CisrCQlTVE9SRV9tZXRob2Rfc2V0X2dldF9mdW5jdGlvbjsKKysJCVNUT1JFX21vZGlmeV9udW1iZXI7CisrCQlTVE9SRV9tZXRob2RfZ2V0X3N0b3JlX2Z1bmN0aW9uOworKwkJU1RPUkVfc3RvcmVfcHJpdmF0ZV9rZXk7CisrCQlCTl9HRjJtX21vZF9zcXJfYXJyOworKwkJUlNBX3NldHVwX2JsaW5kaW5nOworKwkJQklPX3NfZGF0YWdyYW07CisrCQlTVE9SRV9NZW1vcnk7CisrCQlza19maW5kX2V4OworKwkJRUNfR1JPVVBfc2V0X2N1cnZlX0dGMm07CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfRUNEU0E7CisrCQlQT0xJQ1lfQ09OU1RSQUlOVFNfbmV3OworKwkJQk5fR0YybV9tb2Rfc3FydDsKKysJCUVDREhfc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJRUNfS0VZX2dlbmVyYXRlX2tleTsKKysJCVNIQTM4NF9VcGRhdGU7CisrCQlCTl9HRjJtX2FycjJwb2x5OworKwkJU1RPUkVfbWV0aG9kX2dldF9nZXRfZnVuY3Rpb247CisrCQlTVE9SRV9tZXRoX3NldF9jbGVhbnVwX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9jbGVhbnVwX2Z1bmN0aW9uOworKwkJRUNfR1JPVVBfY2hlY2s7CisrCQlkMmlfRUNQcml2YXRlS2V5X2JpbzsKKysJCUVDX0tFWV9pbnNlcnRfa2V5X21ldGhvZF9kYXRhOworKwkJU1RPUkVfbWV0aF9nZXRfbG9ja19zdG9yZV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfbG9ja19zdG9yZV9mdW5jdGlvbjsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX2dldF9kZXB0aDsKKysJCVNIQTIyNF9GaW5hbDsKKysJCVNUT1JFX21ldGhfc2V0X3VwZGF0ZV9zdG9yZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfdXBkYXRlX3N0b3JlX2Z1bmN0aW9uOworKwkJU0hBMjI0X1VwZGF0ZTsKKysJCWQyaV9FQ1ByaXZhdGVLZXk7CisrCQlBU04xX2l0ZW1fbmRlZl9pMmQ7CisrCQlTVE9SRV9kZWxldGVfcHJpdmF0ZV9rZXk7CisrCQlFUlJfcG9wX3RvX21hcms7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX1NUT1JFOworKwkJWDUwOV9wb2xpY3lfbGV2ZWxfZ2V0MF9ub2RlOworKwkJaTJkX1BLQ1M3X05ERUY7CisrCQlFQ19HUk9VUF9nZXRfZGVncmVlOworKwkJQVNOMV9nZW5lcmF0ZV92MzsKKysJCVNUT1JFX0FUVFJfSU5GT19tb2RpZnlfY3N0cjsKKysJCVg1MDlfcG9saWN5X3RyZWVfbGV2ZWxfY291bnQ7CisrCQlCTl9HRjJtX2FkZDsKKysJCUVDX0tFWV9nZXQwX2dyb3VwOworKwkJU1RPUkVfZ2VuZXJhdGVfY3JsOworKwkJU1RPUkVfc3RvcmVfcHVibGljX2tleTsKKysJCVg1MDlfQ0VSVF9QQUlSX2ZyZWU7CisrCQlTVE9SRV9yZXZva2VfcHJpdmF0ZV9rZXk7CisrCQlCTl9uaXN0X21vZF8yMjQ7CisrCQlTSEE1MTJfRmluYWw7CisrCQlTVE9SRV9BVFRSX0lORk9fbW9kaWZ5X2RuOworKwkJU1RPUkVfbWV0aF9nZXRfaW5pdGlhbGlzZV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfaW5pdGlhbGlzZV9mdW5jdGlvbjsKKysJCVNUT1JFX2RlbGV0ZV9udW1iZXI7CisrCQlpMmRfRUNfUFVCS0VZX2JpbzsKKysJCUJJT19kZ3JhbV9ub25fZmF0YWxfZXJyb3I7CisrCQlFQ19HUk9VUF9nZXRfYXNuMV9mbGFnOworKwkJU1RPUkVfQVRUUl9JTkZPX2luX2V4OworKwkJU1RPUkVfbGlzdF9jcmxfc3RhcnQ7CisrCQlFQ0RIX2dldF9leF9uZXdfaW5kZXg7CisrCQlTVE9SRV9tZXRoX2dldF9tb2RpZnlfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X21vZGlmeV9mdW5jdGlvbjsKKysJCXYyaV9BU04xX0JJVF9TVFJJTkc7CisrCQlTVE9SRV9zdG9yZV9jZXJ0aWZpY2F0ZTsKKysJCU9CSl9ic2VhcmNoX2V4OworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2RlZmF1bHQ7CisrCQlTVE9SRV9BVFRSX0lORk9fc2V0X3NoYTFzdHI7CisrCQlCTl9HRjJtX21vZF9pbnY7CisrCQlCTl9HRjJtX21vZF9leHA7CisrCQlTVE9SRV9tb2RpZnlfcHVibGljX2tleTsKKysJCVNUT1JFX21ldGhfZ2V0X2xpc3Rfc3RhcnRfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X2xpc3Rfc3RhcnRfZnVuY3Rpb247CisrCQlFQ19HUk9VUF9nZXQwX3NlZWQ7CisrCQlTVE9SRV9zdG9yZV9hcmJpdHJhcnk7CisrCQlTVE9SRV9tZXRoX3NldF91bmxvY2tfc3RvcmVfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X3VubG9ja19zdG9yZV9mdW5jdGlvbjsKKysJCUJOX0dGMm1fbW9kX2Rpdl9hcnI7CisrCQlFTkdJTkVfc2V0X0VDRFNBOworKwkJU1RPUkVfY3JlYXRlX21ldGhvZDsKKysJCUVDUEtQYXJhbWV0ZXJzX3ByaW50OworKwkJRUNfS0VZX2dldDBfcHJpdmF0ZV9rZXk7CisrCQlQRU1fd3JpdGVfRUNfUFVCS0VZOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MTsKKysJCUVDREhfc2V0X21ldGhvZDsKKysJCXYyaV9HRU5FUkFMX05BTUVfZXg7CisrCQlFQ0RIX3NldF9leF9kYXRhOworKwkJU1RPUkVfZ2VuZXJhdGVfa2V5OworKwkJQk5fbmlzdF9tb2RfNTIxOworKwkJWDUwOV9wb2xpY3lfdHJlZV9nZXQwX2xldmVsOworKwkJRUNfR1JPVVBfc2V0X3BvaW50X2NvbnZlcnNpb25fZm9ybTsKKysJCUVDX0dST1VQX3NldF9wb2ludF9jb252X2Zvcm07CisrCQlQRU1fcmVhZF9FQ19QVUJLRVk7CisrCQlpMmRfRUNEU0FfU0lHOworKwkJRUNEU0FfT3BlblNTTDsKKysJCVNUT1JFX2RlbGV0ZV9jcmw7CisrCQlFQ19LRVlfZ2V0X2VuY19mbGFnczsKKysJCUFTTjFfY29uc3RfY2hlY2tfaW5maW5pdGVfZW5kOworKwkJRVZQX1BLRVlfZGVsZXRlX2F0dHI7CisrCQlFQ0RTQV9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlc19HRjJtOworKwkJRUNfUE9JTlRfc2V0X2NvbXByX2Nvb3Jkc19HRjJtOworKwkJRUNfR1JPVVBfY21wOworKwkJU1RPUkVfcmV2b2tlX2NlcnRpZmljYXRlOworKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzI1NjsKKysJCVNUT1JFX21ldGhfZ2V0X2RlbGV0ZV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfZGVsZXRlX2Z1bmN0aW9uOworKwkJU0hBMjI0X0luaXQ7CisrCQlQRU1fcmVhZF9FQ1ByaXZhdGVLZXk7CisrCQlTSEE1MTJfSW5pdDsKKysJCVNUT1JFX3BhcnNlX2F0dHJzX2VuZHA7CisrCQlCTl9zZXRfbmVnYXRpdmU7CisrCQlFUlJfbG9hZF9FQ0RTQV9zdHJpbmdzOworKwkJRUNfR1JPVVBfZ2V0X2Jhc2lzX3R5cGU7CisrCQlTVE9SRV9saXN0X3B1YmxpY19rZXlfbmV4dDsKKysJCWkydl9BU04xX0JJVF9TVFJJTkc7CisrCQlTVE9SRV9PQkpFQ1RfZnJlZTsKKysJCUJOX25pc3RfbW9kXzM4NDsKKysJCWkyZF9YNTA5X0NFUlRfUEFJUjsKKysJCVBFTV93cml0ZV9FQ1BLUGFyYW1ldGVyczsKKysJCUVDREhfY29tcHV0ZV9rZXk7CisrCQlTVE9SRV9BVFRSX0lORk9fZ2V0MF9zaGExc3RyOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9FQ0RIOworKwkJcHF1ZXVlX3BvcDsKKysJCVNUT1JFX0FUVFJfSU5GT19nZXQwX2NzdHI7CisrCQlQT0xJQ1lfQ09OU1RSQUlOVFNfaXQ7CisrCQlTVE9SRV9nZXRfZXhfbmV3X2luZGV4OworKwkJRVZQX1BLRVlfZ2V0X2F0dHJfYnlfT0JKOworKwkJWDUwOV9WRVJJRllfUEFSQU1fYWRkMF9wb2xpY3k7CisrCQlCTl9HRjJtX21vZF9zb2x2ZV9xdWFkOworKwkJU0hBMjU2OworKwkJaTJkX0VDUHJpdmF0ZUtleV9mcDsKKysJCVg1MDlfcG9saWN5X3RyZWVfZ2V0MF91c2VyX3BvbGljaWVzOworKwkJWDUwOV9wY3lfdHJlZV9nZXQwX3Vzcl9wb2xpY2llczsKKysJCU9QRU5TU0xfRElSX3JlYWQ7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX0VDRFNBOworKwkJWDUwOV9WRVJJRllfUEFSQU1fbG9va3VwOworKwkJRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlc19HRjJtOworKwkJRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZHNfR0YybTsKKysJCUVDX0dST1VQX2R1cDsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9FQ0RTQTsKKysJCUVDX0tFWV9uZXc7CisrCQlTSEEyNTZfVHJhbnNmb3JtOworKwkJRUNfS0VZX3NldF9lbmNfZmxhZ3M7CisrCQlFQ0RTQV92ZXJpZnk7CisrCQlFQ19QT0lOVF9wb2ludDJoZXg7CisrCQlFTkdJTkVfZ2V0X1NUT1JFOworKwkJU0hBNTEyOworKwkJU1RPUkVfZ2V0X2NlcnRpZmljYXRlOworKwkJRUNEU0FfZG9fc2lnbl9leDsKKysJCUVDRFNBX2RvX3ZlcmlmeTsKKysJCWQyaV9FQ1ByaXZhdGVLZXlfZnA7CisrCQlTVE9SRV9kZWxldGVfY2VydGlmaWNhdGU7CisrCQlTSEE1MTJfVHJhbnNmb3JtOworKwkJWDUwOV9TVE9SRV9zZXQxX3BhcmFtOworKwkJU1RPUkVfbWV0aG9kX2dldF9jdHJsX2Z1bmN0aW9uOworKwkJU1RPUkVfZnJlZTsKKysJCVBFTV93cml0ZV9FQ1ByaXZhdGVLZXk7CisrCQlTVE9SRV9tZXRoX2dldF91bmxvY2tfc3RvcmVfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X3VubG9ja19zdG9yZV9mdW5jdGlvbjsKKysJCVNUT1JFX2dldF9leF9kYXRhOworKwkJRUNfS0VZX3NldF9wdWJsaWNfa2V5OworKwkJUEVNX3JlYWRfRUNQS1BhcmFtZXRlcnM7CisrCQlYNTA5X0NFUlRfUEFJUl9uZXc7CisrCQlFTkdJTkVfcmVnaXN0ZXJfU1RPUkU7CisrCQlSU0FfZ2VuZXJhdGVfa2V5X2V4OworKwkJRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXg7CisrCQlFQ1BhcmFtZXRlcnNfcHJpbnRfZnA7CisrCQlYNTA5VjNfTkFNRV9mcm9tX3NlY3Rpb247CisrCQlFVlBfUEtFWV9hZGQxX2F0dHI7CisrCQlTVE9SRV9tb2RpZnlfY3JsOworKwkJU1RPUkVfbGlzdF9wcml2YXRlX2tleV9zdGFydDsKKysJCVBPTElDWV9NQVBQSU5HU19pdDsKKysJCUdFTkVSQUxfU1VCVFJFRV9pdDsKKysJCUVDX0dST1VQX2dldF9jdXJ2ZV9uYW1lOworKwkJUEVNX3dyaXRlX1g1MDlfQ0VSVF9QQUlSOworKwkJQklPX2R1bXBfaW5kZW50X2NiOworKwkJZDJpX1g1MDlfQ0VSVF9QQUlSOworKwkJU1RPUkVfbGlzdF9wcml2YXRlX2tleV9lbmRwOworKwkJYXNuMV9jb25zdF9GaW5pc2g7CisrCQlpMmRfRUNfUFVCS0VZX2ZwOworKwkJQk5fbmlzdF9tb2RfMjU2OworKwkJWDUwOV9WRVJJRllfUEFSQU1fYWRkMF90YWJsZTsKKysJCXBxdWV1ZV9mcmVlOworKwkJQk5fQkxJTkRJTkdfY3JlYXRlX3BhcmFtOworKwkJRUNEU0Ffc2l6ZTsKKysJCWQyaV9FQ19QVUJLRVlfYmlvOworKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzUyMTsKKysJCVNUT1JFX0FUVFJfSU5GT19tb2RpZnlfc2hhMXN0cjsKKysJCUJOX2dlbmVyYXRlX3ByaW1lX2V4OworKwkJRUNfR1JPVVBfbmV3X2J5X2N1cnZlX25hbWU7CisrCQlTSEEyNTZfRmluYWw7CisrCQlESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4OworKwkJUEVNX3JlYWRfYmlvX0VDUHJpdmF0ZUtleTsKKysJCVNUT1JFX21ldGhfZ2V0X2NsZWFudXBfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X2NsZWFudXBfZnVuY3Rpb247CisrCQlFTkdJTkVfZ2V0X0VDREg7CisrCQlkMmlfRUNEU0FfU0lHOworKwkJQk5faXNfcHJpbWVfZmFzdHRlc3RfZXg7CisrCQlFQ0RTQV9zaWduOworKwkJWDUwOV9wb2xpY3lfY2hlY2s7CisrCQlFVlBfUEtFWV9nZXRfYXR0cl9ieV9OSUQ7CisrCQlTVE9SRV9zZXRfZXhfZGF0YTsKKysJCUVOR0lORV9nZXRfRUNEU0E7CisrCQlFVlBfZWNkc2E7CisrCQlCTl9CTElORElOR19nZXRfZmxhZ3M7CisrCQlQS0NTMTJfYWRkX2NlcnQ7CisrCQlTVE9SRV9PQkpFQ1RfbmV3OworKwkJRVJSX2xvYWRfRUNESF9zdHJpbmdzOworKwkJRUNfS0VZX2R1cDsKKysJCUVWUF9DSVBIRVJfQ1RYX3JhbmRfa2V5OworKwkJRUNEU0Ffc2V0X21ldGhvZDsKKysJCWEyaV9JUEFERFJFU1NfTkM7CisrCQlkMmlfRUNQYXJhbWV0ZXJzOworKwkJU1RPUkVfbGlzdF9jZXJ0aWZpY2F0ZV9lbmQ7CisrCQlTVE9SRV9nZXRfY3JsOworKwkJWDUwOV9QT0xJQ1lfTk9ERV9wcmludDsKKysJCVNIQTM4NF9Jbml0OworKwkJRUNfR0YybV9zaW1wbGVfbWV0aG9kOworKwkJRUNEU0Ffc2V0X2V4X2RhdGE7CisrCQlTSEEzODRfRmluYWw7CisrCQlQS0NTN19zZXRfZGlnZXN0OworKwkJRUNfS0VZX3ByaW50OworKwkJU1RPUkVfbWV0aF9zZXRfbG9ja19zdG9yZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfbG9ja19zdG9yZV9mdW5jdGlvbjsKKysJCUVDRFNBX2dldF9leF9uZXdfaW5kZXg7CisrCQlTSEEzODQ7CisrCQlQT0xJQ1lfTUFQUElOR19uZXc7CisrCQlTVE9SRV9saXN0X2NlcnRpZmljYXRlX2VuZHA7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQwX3BvbGljeV90cmVlOworKwkJRUNfR1JPVVBfc2V0X2FzbjFfZmxhZzsKKysJCUVDX0tFWV9jaGVja19rZXk7CisrCQlkMmlfRUNfUFVCS0VZX2ZwOworKwkJUEtDUzdfc2V0MF90eXBlX290aGVyOworKwkJUEVNX3JlYWRfYmlvX1g1MDlfQ0VSVF9QQUlSOworKwkJcHF1ZXVlX25leHQ7CisrCQlTVE9SRV9tZXRoX2dldF9saXN0X2VuZF9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfbGlzdF9lbmRfZnVuY3Rpb247CisrCQlFVlBfUEtFWV9hZGQxX2F0dHJfYnlfT0JKOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X3RpbWU7CisrCQlwcXVldWVfbmV3OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X0VDREg7CisrCQlTVE9SRV9uZXdfbWV0aG9kOworKwkJUEtDUzEyX2FkZF9rZXk7CisrCQlEU09fbWVyZ2U7CisrCQlFQ19QT0lOVF9oZXgycG9pbnQ7CisrCQlCSU9fZHVtcF9jYjsKKysJCVNIQTI1Nl9VcGRhdGU7CisrCQlwcXVldWVfaW5zZXJ0OworKwkJcGl0ZW1fZnJlZTsKKysJCUJOX0dGMm1fbW9kX2ludl9hcnI7CisrCQlFTkdJTkVfdW5yZWdpc3Rlcl9FQ0RTQTsKKysJCUJOX0JMSU5ESU5HX3NldF90aHJlYWRfaWQ7CisrCQlnZXRfcmZjMzUyNl9wcmltZV84MTkyOworKwkJWDUwOV9WRVJJRllfUEFSQU1fY2xlYXJfZmxhZ3M7CisrCQlnZXRfcmZjMjQwOV9wcmltZV8xMDI0OworKwkJREhfY2hlY2tfcHViX2tleTsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzIwNDg7CisrCQlnZXRfcmZjMzUyNl9wcmltZV82MTQ0OworKwkJZ2V0X3JmYzM1MjZfcHJpbWVfMTUzNjsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzMwNzI7CisrCQlnZXRfcmZjMzUyNl9wcmltZV80MDk2OworKwkJZ2V0X3JmYzI0MDlfcHJpbWVfNzY4OworKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0X2ZsYWdzOworKwkJRVZQX0NJUEhFUl9DVFhfbmV3OworKwkJRVZQX0NJUEhFUl9DVFhfZnJlZTsKKysJCUNhbWVsbGlhX2NiY19lbmNyeXB0OworKwkJQ2FtZWxsaWFfY2ZiMTI4X2VuY3J5cHQ7CisrCQlDYW1lbGxpYV9jZmIxX2VuY3J5cHQ7CisrCQlDYW1lbGxpYV9jZmI4X2VuY3J5cHQ7CisrCQlDYW1lbGxpYV9jdHIxMjhfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2NmYnJfZW5jcnlwdF9ibG9jazsKKysJCUNhbWVsbGlhX2RlY3J5cHQ7CisrCQlDYW1lbGxpYV9lY2JfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2VuY3J5cHQ7CisrCQlDYW1lbGxpYV9vZmIxMjhfZW5jcnlwdDsKKysJCUNhbWVsbGlhX3NldF9rZXk7CisrCQlFVlBfY2FtZWxsaWFfMTI4X2NiYzsKKysJCUVWUF9jYW1lbGxpYV8xMjhfY2ZiMTI4OworKwkJRVZQX2NhbWVsbGlhXzEyOF9jZmIxOworKwkJRVZQX2NhbWVsbGlhXzEyOF9jZmI4OworKwkJRVZQX2NhbWVsbGlhXzEyOF9lY2I7CisrCQlFVlBfY2FtZWxsaWFfMTI4X29mYjsKKysJCUVWUF9jYW1lbGxpYV8xOTJfY2JjOworKwkJRVZQX2NhbWVsbGlhXzE5Ml9jZmIxMjg7CisrCQlFVlBfY2FtZWxsaWFfMTkyX2NmYjE7CisrCQlFVlBfY2FtZWxsaWFfMTkyX2NmYjg7CisrCQlFVlBfY2FtZWxsaWFfMTkyX2VjYjsKKysJCUVWUF9jYW1lbGxpYV8xOTJfb2ZiOworKwkJRVZQX2NhbWVsbGlhXzI1Nl9jYmM7CisrCQlFVlBfY2FtZWxsaWFfMjU2X2NmYjEyODsKKysJCUVWUF9jYW1lbGxpYV8yNTZfY2ZiMTsKKysJCUVWUF9jYW1lbGxpYV8yNTZfY2ZiODsKKysJCUVWUF9jYW1lbGxpYV8yNTZfZWNiOworKwkJRVZQX2NhbWVsbGlhXzI1Nl9vZmI7CisrCQlhMmlfaXBhZGQ7CisrCQlBU0lkZW50aWZpZXJzX2ZyZWU7CisrCQlpMmRfQVNJZE9yUmFuZ2U7CisrCQlFVlBfQ0lQSEVSX2Jsb2NrX3NpemU7CisrCQl2M19hc2lkX2lzX2Nhbm9uaWNhbDsKKysJCUlQQWRkcmVzc0Nob2ljZV9mcmVlOworKwkJRVZQX0NJUEhFUl9DVFhfc2V0X2FwcF9kYXRhOworKwkJQklPX3NldF9jYWxsYmFja19hcmc7CisrCQl2M19hZGRyX2FkZF9wcmVmaXg7CisrCQlJUEFkZHJlc3NPclJhbmdlX2l0OworKwkJQklPX3NldF9mbGFnczsKKysJCUFTSWRlbnRpZmllcnNfaXQ7CisrCQl2M19hZGRyX2dldF9yYW5nZTsKKysJCUJJT19tZXRob2RfdHlwZTsKKysJCXYzX2FkZHJfaW5oZXJpdHM7CisrCQlJUEFkZHJlc3NDaG9pY2VfaXQ7CisrCQlBRVNfaWdlX2VuY3J5cHQ7CisrCQl2M19hZGRyX2FkZF9yYW5nZTsKKysJCUVWUF9DSVBIRVJfQ1RYX25pZDsKKysJCWQyaV9BU1JhbmdlOworKwkJdjNfYWRkcl9hZGRfaW5oZXJpdDsKKysJCXYzX2FzaWRfYWRkX2lkX29yX3JhbmdlOworKwkJdjNfYWRkcl92YWxpZGF0ZV9yZXNvdXJjZV9zZXQ7CisrCQlFVlBfQ0lQSEVSX2l2X2xlbmd0aDsKKysJCUVWUF9NRF90eXBlOworKwkJdjNfYXNpZF9jYW5vbml6ZTsKKysJCUlQQWRkcmVzc1JhbmdlX2ZyZWU7CisrCQl2M19hc2lkX2FkZF9pbmhlcml0OworKwkJRVZQX0NJUEhFUl9DVFhfa2V5X2xlbmd0aDsKKysJCUlQQWRkcmVzc1JhbmdlX25ldzsKKysJCUFTSWRPclJhbmdlX25ldzsKKysJCUVWUF9NRF9zaXplOworKwkJRVZQX01EX0NUWF90ZXN0X2ZsYWdzOworKwkJQklPX2NsZWFyX2ZsYWdzOworKwkJaTJkX0FTUmFuZ2U7CisrCQlJUEFkZHJlc3NSYW5nZV9pdDsKKysJCUlQQWRkcmVzc0Nob2ljZV9uZXc7CisrCQlBU0lkZW50aWZpZXJDaG9pY2VfbmV3OworKwkJQVNSYW5nZV9mcmVlOworKwkJRVZQX01EX3BrZXlfdHlwZTsKKysJCUVWUF9NRF9DVFhfY2xlYXJfZmxhZ3M7CisrCQlJUEFkZHJlc3NGYW1pbHlfZnJlZTsKKysJCWkyZF9JUEFkZHJlc3NGYW1pbHk7CisrCQlJUEFkZHJlc3NPclJhbmdlX25ldzsKKysJCUVWUF9DSVBIRVJfZmxhZ3M7CisrCQl2M19hc2lkX3ZhbGlkYXRlX3Jlc291cmNlX3NldDsKKysJCWQyaV9JUEFkZHJlc3NSYW5nZTsKKysJCUFFU19iaV9pZ2VfZW5jcnlwdDsKKysJCUJJT19nZXRfY2FsbGJhY2s7CisrCQlJUEFkZHJlc3NPclJhbmdlX2ZyZWU7CisrCQl2M19hZGRyX3N1YnNldDsKKysJCWQyaV9JUEFkZHJlc3NGYW1pbHk7CisrCQl2M19hc2lkX3N1YnNldDsKKysJCUJJT190ZXN0X2ZsYWdzOworKwkJaTJkX0FTSWRlbnRpZmllckNob2ljZTsKKysJCUFTUmFuZ2VfaXQ7CisrCQlkMmlfQVNJZGVudGlmaWVyczsKKysJCUFTUmFuZ2VfbmV3OworKwkJZDJpX0lQQWRkcmVzc0Nob2ljZTsKKysJCXYzX2FkZHJfZ2V0X2FmaTsKKysJCUVWUF9DSVBIRVJfa2V5X2xlbmd0aDsKKysJCUVWUF9DaXBoZXI7CisrCQlpMmRfSVBBZGRyZXNzT3JSYW5nZTsKKysJCUFTSWRPclJhbmdlX2l0OworKwkJRVZQX0NJUEhFUl9uaWQ7CisrCQlpMmRfSVBBZGRyZXNzQ2hvaWNlOworKwkJRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZTsKKysJCUFTSWRlbnRpZmllcnNfbmV3OworKwkJdjNfYWRkcl92YWxpZGF0ZV9wYXRoOworKwkJSVBBZGRyZXNzRmFtaWx5X25ldzsKKysJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzOworKwkJdjNfYWRkcl9pc19jYW5vbmljYWw7CisrCQlpMmRfSVBBZGRyZXNzUmFuZ2U7CisrCQlJUEFkZHJlc3NGYW1pbHlfaXQ7CisrCQl2M19hc2lkX2luaGVyaXRzOworKwkJRVZQX0NJUEhFUl9DVFhfY2lwaGVyOworKwkJRVZQX0NJUEhFUl9DVFhfZ2V0X2FwcF9kYXRhOworKwkJRVZQX01EX2Jsb2NrX3NpemU7CisrCQlFVlBfQ0lQSEVSX0NUWF9mbGFnczsKKysJCXYzX2FzaWRfdmFsaWRhdGVfcGF0aDsKKysJCWQyaV9JUEFkZHJlc3NPclJhbmdlOworKwkJdjNfYWRkcl9jYW5vbml6ZTsKKysJCUFTSWRlbnRpZmllckNob2ljZV9pdDsKKysJCUVWUF9NRF9DVFhfbWQ7CisrCQlkMmlfQVNJZGVudGlmaWVyQ2hvaWNlOworKwkJQklPX21ldGhvZF9uYW1lOworKwkJRVZQX0NJUEhFUl9DVFhfaXZfbGVuZ3RoOworKwkJQVNJZE9yUmFuZ2VfZnJlZTsKKysJCUFTSWRlbnRpZmllckNob2ljZV9mcmVlOworKwkJQklPX2dldF9jYWxsYmFja19hcmc7CisrCQlCSU9fc2V0X2NhbGxiYWNrOworKwkJZDJpX0FTSWRPclJhbmdlOworKwkJaTJkX0FTSWRlbnRpZmllcnM7CisrCQlTRUVEX2RlY3J5cHQ7CisrCQlTRUVEX2VuY3J5cHQ7CisrCQlTRUVEX2NiY19lbmNyeXB0OworKwkJRVZQX3NlZWRfb2ZiOworKwkJU0VFRF9jZmIxMjhfZW5jcnlwdDsKKysJCVNFRURfb2ZiMTI4X2VuY3J5cHQ7CisrCQlFVlBfc2VlZF9jYmM7CisrCQlTRUVEX2VjYl9lbmNyeXB0OworKwkJRVZQX3NlZWRfZWNiOworKwkJU0VFRF9zZXRfa2V5OworKwkJRVZQX3NlZWRfY2ZiMTI4OworKwkJWDUwOV9FWFRFTlNJT05TX2l0OworKwkJWDUwOV9nZXQxX29jc3A7CisrCQlPQ1NQX1JFUV9DVFhfZnJlZTsKKysJCWkyZF9YNTA5X0VYVEVOU0lPTlM7CisrCQlPQ1NQX3NlbmRyZXFfbmJpbzsKKysJCU9DU1Bfc2VuZHJlcV9uZXc7CisrCQlkMmlfWDUwOV9FWFRFTlNJT05TOworKwkJWDUwOV9BTEdPUlNfaXQ7CisrCQlYNTA5X0FMR09SX2dldDA7CisrCQlYNTA5X0FMR09SX3NldDA7CisrCQlBRVNfdW53cmFwX2tleTsKKysJCUFFU193cmFwX2tleTsKKysJCVg1MDlhdF9nZXQwX2RhdGFfYnlfT0JKOworKwkJQVNOMV9UWVBFX3NldDE7CisrCQlBU04xX1NUUklOR19zZXQwOworKwkJaTJkX1g1MDlfQUxHT1JTOworKwkJQklPX2ZfemxpYjsKKysJCUNPTVBfemxpYl9jbGVhbnVwOworKwkJZDJpX1g1MDlfQUxHT1JTOworKwkJQ01TX1JlY2VpcHRSZXF1ZXN0X2ZyZWU7CisrCQlQRU1fd3JpdGVfQ01TOworKwkJQ01TX2FkZDBfQ2VydGlmaWNhdGVDaG9pY2VzOworKwkJQ01TX3Vuc2lnbmVkX2FkZDFfYXR0cl9ieV9PQko7CisrCQlFUlJfbG9hZF9DTVNfc3RyaW5nczsKKysJCUNNU19zaWduX3JlY2VpcHQ7CisrCQlpMmRfQ01TX0NvbnRlbnRJbmZvOworKwkJQ01TX3NpZ25lZF9kZWxldGVfYXR0cjsKKysJCWQyaV9DTVNfYmlvOworKwkJQ01TX3Vuc2lnbmVkX2dldF9hdHRyX2J5X05JRDsKKysJCUNNU192ZXJpZnk7CisrCQlTTUlNRV9yZWFkX0NNUzsKKysJCUNNU19kZWNyeXB0X3NldDFfa2V5OworKwkJQ01TX1NpZ25lckluZm9fZ2V0MF9hbGdzOworKwkJQ01TX2FkZDFfY2VydDsKKysJCUNNU19zZXRfZGV0YWNoZWQ7CisrCQlDTVNfZW5jcnlwdDsKKysJCUNNU19FbnZlbG9wZWREYXRhX2NyZWF0ZTsKKysJCUNNU191bmNvbXByZXNzOworKwkJQ01TX2FkZDBfY3JsOworKwkJQ01TX1NpZ25lckluZm9fdmVyaWZ5X2NvbnRlbnQ7CisrCQlDTVNfdW5zaWduZWRfZ2V0MF9kYXRhX2J5X09CSjsKKysJCVBFTV93cml0ZV9iaW9fQ01TOworKwkJQ01TX3Vuc2lnbmVkX2dldF9hdHRyOworKwkJQ01TX1JlY2lwaWVudEluZm9fa3RyaV9jZXJ0X2NtcDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2t0cmlfZ2V0MF9hbGdzOworKwkJQ01TX1JlY2lwSW5mb19rdHJpX2dldDBfYWxnczsKKysJCUNNU19Db250ZW50SW5mb19mcmVlOworKwkJQ01TX2ZpbmFsOworKwkJQ01TX2FkZF9zaW1wbGVfc21pbWVjYXA7CisrCQlDTVNfU2lnbmVySW5mb192ZXJpZnk7CisrCQlDTVNfZGF0YTsKKysJCUNNU19Db250ZW50SW5mb19pdDsKKysJCWQyaV9DTVNfUmVjZWlwdFJlcXVlc3Q7CisrCQlDTVNfY29tcHJlc3M7CisrCQlDTVNfZGlnZXN0X2NyZWF0ZTsKKysJCUNNU19TaWduZXJJbmZvX2NlcnRfY21wOworKwkJQ01TX1NpZ25lckluZm9fc2lnbjsKKysJCUNNU19kYXRhX2NyZWF0ZTsKKysJCWkyZF9DTVNfYmlvOworKwkJQ01TX0VuY3J5cHRlZERhdGFfc2V0MV9rZXk7CisrCQlDTVNfZGVjcnlwdDsKKysJCWludF9zbWltZV93cml0ZV9BU04xOworKwkJQ01TX3Vuc2lnbmVkX2RlbGV0ZV9hdHRyOworKwkJQ01TX3Vuc2lnbmVkX2dldF9hdHRyX2NvdW50OworKwkJQ01TX2FkZF9zbWltZWNhcDsKKysJCVBFTV9yZWFkX0NNUzsKKysJCUNNU19zaWduZWRfZ2V0X2F0dHJfYnlfT0JKOworKwkJZDJpX0NNU19Db250ZW50SW5mbzsKKysJCUNNU19hZGRfc3RhbmRhcmRfc21pbWVjYXA7CisrCQlDTVNfQ29udGVudEluZm9fbmV3OworKwkJQ01TX1JlY2lwaWVudEluZm9fdHlwZTsKKysJCUNNU19nZXQwX3R5cGU7CisrCQlDTVNfaXNfZGV0YWNoZWQ7CisrCQlDTVNfc2lnbjsKKysJCUNNU19zaWduZWRfYWRkMV9hdHRyOworKwkJQ01TX3Vuc2lnbmVkX2dldF9hdHRyX2J5X09CSjsKKysJCVNNSU1FX3dyaXRlX0NNUzsKKysJCUNNU19FbmNyeXB0ZWREYXRhX2RlY3J5cHQ7CisrCQlDTVNfZ2V0MF9SZWNpcGllbnRJbmZvczsKKysJCUNNU19hZGQwX1Jldm9jYXRpb25JbmZvQ2hvaWNlOworKwkJQ01TX2RlY3J5cHRfc2V0MV9wa2V5OworKwkJQ01TX1NpZ25lckluZm9fc2V0MV9zaWduZXJfY2VydDsKKysJCUNNU19nZXQwX3NpZ25lcnM7CisrCQlDTVNfUmVjZWlwdFJlcXVlc3RfZ2V0MF92YWx1ZXM7CisrCQlDTVNfc2lnbmVkX2dldDBfZGF0YV9ieV9PQko7CisrCQlDTVNfZ2V0MF9TaWduZXJJbmZvczsKKysJCUNNU19hZGQwX2NlcnQ7CisrCQlDTVNfRW5jcnlwdGVkRGF0YV9lbmNyeXB0OworKwkJQ01TX2RpZ2VzdF92ZXJpZnk7CisrCQlDTVNfc2V0MV9zaWduZXJzX2NlcnRzOworKwkJQ01TX3NpZ25lZF9nZXRfYXR0cjsKKysJCUNNU19SZWNpcGllbnRJbmZvX3NldDBfa2V5OworKwkJQ01TX1NpZ25lZERhdGFfaW5pdDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2tla3JpX2dldDBfaWQ7CisrCQlDTVNfdmVyaWZ5X3JlY2VpcHQ7CisrCQlDTVNfUmVjZWlwdFJlcXVlc3RfaXQ7CisrCQlQRU1fcmVhZF9iaW9fQ01TOworKwkJQ01TX2dldDFfY3JsczsKKysJCUNNU19hZGQwX3JlY2lwaWVudF9rZXk7CisrCQlTTUlNRV9yZWFkX0FTTjE7CisrCQlDTVNfUmVjZWlwdFJlcXVlc3RfbmV3OworKwkJQ01TX2dldDBfY29udGVudDsKKysJCUNNU19nZXQxX1JlY2VpcHRSZXF1ZXN0OworKwkJQ01TX3NpZ25lZF9hZGQxX2F0dHJfYnlfT0JKOworKwkJQ01TX1JlY2lwaWVudEluZm9fa2VrcmlfaWRfY21wOworKwkJQ01TX2FkZDFfUmVjZWlwdFJlcXVlc3Q7CisrCQlDTVNfU2lnbmVySW5mb19nZXQwX3NpZ25lcl9pZDsKKysJCUNNU191bnNpZ25lZF9hZGQxX2F0dHJfYnlfTklEOworKwkJQ01TX3Vuc2lnbmVkX2FkZDFfYXR0cjsKKysJCUNNU19zaWduZWRfZ2V0X2F0dHJfYnlfTklEOworKwkJQ01TX2dldDFfY2VydHM7CisrCQlDTVNfc2lnbmVkX2FkZDFfYXR0cl9ieV9OSUQ7CisrCQlDTVNfdW5zaWduZWRfYWRkMV9hdHRyX2J5X3R4dDsKKysJCUNNU19kYXRhRmluYWw7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rdHJpX2dldDBfc2lnbmVyX2lkOworKwkJQ01TX1JlY2lwSW5mb19rdHJpX2dldDBfc2lncl9pZDsKKysJCWkyZF9DTVNfUmVjZWlwdFJlcXVlc3Q7CisrCQlDTVNfYWRkMV9yZWNpcGllbnRfY2VydDsKKysJCUNNU19kYXRhSW5pdDsKKysJCUNNU19zaWduZWRfYWRkMV9hdHRyX2J5X3R4dDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2RlY3J5cHQ7CisrCQlDTVNfc2lnbmVkX2dldF9hdHRyX2NvdW50OworKwkJQ01TX2dldDBfZUNvbnRlbnRUeXBlOworKwkJQ01TX3NldDFfZUNvbnRlbnRUeXBlOworKwkJQ01TX1JlY2VpcHRSZXF1ZXN0X2NyZWF0ZTA7CisrCQlDTVNfYWRkMV9zaWduZXI7CisrCQlDTVNfUmVjaXBpZW50SW5mb19zZXQwX3BrZXk7CisrCQlFTkdJTkVfc2V0X2xvYWRfc3NsX2NsaWVudF9jZXJ0X2Z1bmN0aW9uOworKwkJRU5HSU5FX3NldF9sZF9zc2xfY2xudF9jZXJ0X2ZuOworKwkJRU5HSU5FX2dldF9zc2xfY2xpZW50X2NlcnRfZnVuY3Rpb247CisrCQlFTkdJTkVfZ2V0X3NzbF9jbGllbnRfY2VydF9mbjsKKysJCUVOR0lORV9sb2FkX3NzbF9jbGllbnRfY2VydDsKKysJCUVOR0lORV9sb2FkX2NhcGk7CisrCQlPUEVOU1NMX2lzc2VydmljZTsKKysJCUZJUFNfZHNhX3NpZ19kZWNvZGU7CisrCQlFVlBfQ0lQSEVSX0NUWF9jbGVhcl9mbGFnczsKKysJCUZJUFNfcmFuZF9zdGF0dXM7CisrCQlGSVBTX3JhbmRfc2V0X2tleTsKKysJCUNSWVBUT19zZXRfbWVtX2luZm9fZnVuY3Rpb25zOworKwkJUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4OworKwkJaW50X0VSUl9zZXRfc3RhdGVfZnVuYzsKKysJCWludF9FVlBfTURfc2V0X2VuZ2luZV9jYWxsYmFja3M7CisrCQlpbnRfQ1JZUFRPX3NldF9kb19keW5sb2NrX2NhbGxiYWNrOworKwkJRklQU19ybmdfc3RpY2s7CisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3M7CisrCQlCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4OworKwkJRklQU19zZWxmdGVzdF9jaGVjazsKKysJCUZJUFNfcmFuZF9zZXRfZHQ7CisrCQlDUllQVE9fZGJnX3BvcF9pbmZvOworKwkJRklQU19kc2FfZnJlZTsKKysJCVJTQV9YOTMxX2Rlcml2ZV9leDsKKysJCUZJUFNfcnNhX25ldzsKKysJCUZJUFNfcmFuZF9ieXRlczsKKysJCWZpcHNfY2lwaGVyX3Rlc3Q7CisrCQlFVlBfQ0lQSEVSX0NUWF90ZXN0X2ZsYWdzOworKwkJQ1JZUFRPX21hbGxvY19kZWJ1Z19pbml0OworKwkJQ1JZUFRPX2RiZ19wdXNoX2luZm87CisrCQlGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbjsKKysJCUZJUFNfZGhfbmV3OworKwkJRklQU19jb3JydXB0X2RzYV9rZXlnZW47CisrCQlGSVBTX2RoX2ZyZWU7CisrCQlmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Q7CisrCQlFVlBfYWRkX2FsZ19tb2R1bGU7CisrCQlpbnRfUkFORF9pbml0X2VuZ2luZV9jYWxsYmFja3M7CisrCQlpbnRfRVZQX0NJUEhFUl9zZXRfZW5naW5lX2NhbGxiYWNrczsKKysJCWludF9FVlBfTURfaW5pdF9lbmdpbmVfY2FsbGJhY2tzOworKwkJRklQU19yYW5kX3Rlc3RfbW9kZTsKKysJCUZJUFNfcmFuZF9yZXNldDsKKysJCUZJUFNfZHNhX25ldzsKKysJCWludF9SQU5EX3NldF9jYWxsYmFja3M7CisrCQlCTl9YOTMxX2Rlcml2ZV9wcmltZV9leDsKKysJCWludF9FUlJfbGliX2luaXQ7CisrCQlpbnRfRVZQX0NJUEhFUl9pbml0X2VuZ2luZV9jYWxsYmFja3M7CisrCQlGSVBTX3JzYV9mcmVlOworKwkJRklQU19kc2Ffc2lnX2VuY29kZTsKKysJCUNSWVBUT19kYmdfcmVtb3ZlX2FsbF9pbmZvOworKwkJT1BFTlNTTF9pbml0OworKwkJQ1JZUFRPX3N0cmR1cDsKKysJCUpQQUtFX1NURVAzQV9wcm9jZXNzOworKwkJSlBBS0VfU1RFUDFfcmVsZWFzZTsKKysJCUpQQUtFX2dldF9zaGFyZWRfa2V5OworKwkJSlBBS0VfU1RFUDNCX2luaXQ7CisrCQlKUEFLRV9TVEVQMV9nZW5lcmF0ZTsKKysJCUpQQUtFX1NURVAxX2luaXQ7CisrCQlKUEFLRV9TVEVQM0JfcHJvY2VzczsKKysJCUpQQUtFX1NURVAyX2dlbmVyYXRlOworKwkJSlBBS0VfQ1RYX25ldzsKKysJCUpQQUtFX0NUWF9mcmVlOworKwkJSlBBS0VfU1RFUDNCX3JlbGVhc2U7CisrCQlKUEFLRV9TVEVQM0FfcmVsZWFzZTsKKysJCUpQQUtFX1NURVAyX3Byb2Nlc3M7CisrCQlKUEFLRV9TVEVQM0JfZ2VuZXJhdGU7CisrCQlKUEFLRV9TVEVQMV9wcm9jZXNzOworKwkJSlBBS0VfU1RFUDNBX2dlbmVyYXRlOworKwkJSlBBS0VfU1RFUDJfcmVsZWFzZTsKKysJCUpQQUtFX1NURVAzQV9pbml0OworKwkJRVJSX2xvYWRfSlBBS0Vfc3RyaW5nczsKKysJCUpQQUtFX1NURVAyX2luaXQ7CisrCQlwcXVldWVfc2l6ZTsKKysJCWkyZF9UU19BQ0NVUkFDWTsKKysJCWkyZF9UU19NU0dfSU1QUklOVF9mcDsKKysJCWkyZF9UU19NU0dfSU1QUklOVDsKKysJCUVWUF9QS0VZX3ByaW50X3B1YmxpYzsKKysJCUVWUF9QS0VZX0NUWF9uZXc7CisrCQlpMmRfVFNfVFNUX0lORk87CisrCQlFVlBfUEtFWV9hc24xX2ZpbmQ7CisrCQlEU09fTUVUSE9EX2Jlb3M7CisrCQlUU19DT05GX2xvYWRfY2VydDsKKysJCVRTX1JFUV9nZXRfZXh0OworKwkJRVZQX1BLRVlfc2lnbl9pbml0OworKwkJQVNOMV9pdGVtX3ByaW50OworKwkJVFNfVFNUX0lORk9fc2V0X25vbmNlOworKwkJVFNfUkVTUF9kdXA7CisrCQlFTkdJTkVfcmVnaXN0ZXJfcGtleV9tZXRoczsKKysJCUVWUF9QS0VZX2FzbjFfYWRkMDsKKysJCVBLQ1M3X2FkZDBfYXR0cmliX3NpZ25pbmdfdGltZTsKKysJCWkyZF9UU19UU1RfSU5GT19mcDsKKysJCUJJT19hc24xX2dldF9wcmVmaXg7CisrCQlUU19UU1RfSU5GT19zZXRfdGltZTsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2RlY3J5cHQ7CisrCQlFVlBfUEtFWV9zZXRfdHlwZV9zdHI7CisrCQlFVlBfUEtFWV9DVFhfZ2V0X2tleWdlbl9pbmZvOworKwkJVFNfUkVRX3NldF9wb2xpY3lfaWQ7CisrCQlkMmlfVFNfUkVTUF9mcDsKKysJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGhfZW5naW5lOworKwkJRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aF9lbmc7CisrCQlXSElSTFBPT0xfSW5pdDsKKysJCVRTX1JFU1Bfc2V0X3N0YXR1c19pbmZvOworKwkJRVZQX1BLRVlfa2V5Z2VuOworKwkJRVZQX0RpZ2VzdFNpZ25Jbml0OworKwkJVFNfQUNDVVJBQ1lfc2V0X21pbGxpczsKKysJCVRTX1JFUV9kdXA7CisrCQlHRU5FUkFMX05BTUVfZHVwOworKwkJQVNOMV9TRVFVRU5DRV9BTllfaXQ7CisrCQlXSElSTFBPT0w7CisrCQlYNTA5X1NUT1JFX2dldDFfY3JsczsKKysJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGg7CisrCQlFVlBfUEtFWV9hc24xX25ldzsKKysJCUJJT19uZXdfTkRFRjsKKysJCUVOR0lORV9nZXRfcGtleV9tZXRoOworKwkJVFNfTVNHX0lNUFJJTlRfc2V0X2FsZ287CisrCQlpMmRfVFNfVFNUX0lORk9fYmlvOworKwkJVFNfVFNUX0lORk9fc2V0X29yZGVyaW5nOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dF9ieV9PQko7CisrCQlDUllQVE9fVEhSRUFESURfc2V0X3BvaW50ZXI7CisrCQlUU19DT05GX2dldF90c2Ffc2VjdGlvbjsKKysJCVNNSU1FX3dyaXRlX0FTTjE7CisrCQlUU19SRVNQX0NUWF9zZXRfc2lnbmVyX2tleTsKKysJCUVWUF9QS0VZX2VuY3J5cHRfb2xkOworKwkJRVZQX1BLRVlfZW5jcnlwdF9pbml0OworKwkJQ1JZUFRPX1RIUkVBRElEX2NweTsKKysJCUFTTjFfUENUWF9nZXRfY2VydF9mbGFnczsKKysJCWkyZF9FU1NfU0lHTklOR19DRVJUOworKwkJVFNfQ09ORl9sb2FkX2tleTsKKysJCWkyZF9BU04xX1NFUVVFTkNFX0FOWTsKKysJCWQyaV9UU19NU0dfSU1QUklOVF9iaW87CisrCQlFVlBfUEtFWV9hc24xX3NldF9wdWJsaWM7CisrCQliMmlfUHVibGljS2V5X2JpbzsKKysJCUJJT19hc24xX3NldF9wcmVmaXg7CisrCQlFVlBfUEtFWV9uZXdfbWFjX2tleTsKKysJCUJJT19uZXdfQ01TOworKwkJQ1JZUFRPX1RIUkVBRElEX2NtcDsKKysJCVRTX1JFUV9leHRfZnJlZTsKKysJCUVWUF9QS0VZX2FzbjFfc2V0X2ZyZWU7CisrCQlFVlBfUEtFWV9nZXQwX2FzbjE7CisrCQlkMmlfTkVUU0NBUEVfWDUwOTsKKysJCUVWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyX2luaXQ7CisrCQlFVlBfUEtFWV9DVFhfc2V0X2RhdGE7CisrCQlFVlBfUEtFWV9rZXlnZW5faW5pdDsKKysJCVRTX1JFU1BfQ1RYX3NldF9zdGF0dXNfaW5mbzsKKysJCVRTX01TR19JTVBSSU5UX2dldF9hbGdvOworKwkJVFNfUkVRX3ByaW50X2JpbzsKKysJCUVWUF9QS0VZX0NUWF9jdHJsX3N0cjsKKysJCUVWUF9QS0VZX2dldF9kZWZhdWx0X2RpZ2VzdF9uaWQ7CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M3X3N0cmVhbTsKKysJCVRTX01TR19JTVBSSU5UX3ByaW50X2JpbzsKKysJCUJOX2FzYzJibjsKKysJCVRTX1JFUV9nZXRfcG9saWN5X2lkOworKwkJRU5HSU5FX3NldF9kZWZhdWx0X3BrZXlfYXNuMV9tZXRoczsKKysJCUVOR0lORV9zZXRfZGVmX3BrZXlfYXNuMV9tZXRoczsKKysJCWQyaV9UU19BQ0NVUkFDWTsKKysJCURTT19nbG9iYWxfbG9va3VwOworKwkJVFNfQ09ORl9zZXRfdHNhX25hbWU7CisrCQlpMmRfQVNOMV9TRVRfQU5ZOworKwkJRU5HSU5FX2xvYWRfZ29zdDsKKysJCVdISVJMUE9PTF9CaXRVcGRhdGU7CisrCQlBU04xX1BDVFhfZ2V0X2ZsYWdzOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dF9ieV9OSUQ7CisrCQlUU19SRVNQX25ldzsKKysJCUVTU19DRVJUX0lEX2R1cDsKKysJCVRTX1NUQVRVU19JTkZPX2R1cDsKKysJCVRTX1JFUV9kZWxldGVfZXh0OworKwkJRVZQX0RpZ2VzdFZlcmlmeUZpbmFsOworKwkJRVZQX1BLRVlfcHJpbnRfcGFyYW1zOworKwkJaTJkX0NNU19iaW9fc3RyZWFtOworKwkJVFNfUkVRX2dldF9tc2dfaW1wcmludDsKKysJCU9CSl9maW5kX3NpZ2lkX2J5X2FsZ3M7CisrCQlUU19UU1RfSU5GT19nZXRfc2VyaWFsOworKwkJVFNfUkVRX2dldF9ub25jZTsKKysJCVg1MDlfUFVCS0VZX3NldDBfcGFyYW07CisrCQlFVlBfUEtFWV9DVFhfc2V0MF9rZXlnZW5faW5mbzsKKysJCURJU1RfUE9JTlRfc2V0X2RwbmFtZTsKKysJCWkyZF9JU1NVSU5HX0RJU1RfUE9JTlQ7CisrCQlBU04xX1NFVF9BTllfaXQ7CisrCQlFVlBfUEtFWV9DVFhfZ2V0X2RhdGE7CisrCQlUU19TVEFUVVNfSU5GT19wcmludF9iaW87CisrCQlFVlBfUEtFWV9kZXJpdmVfaW5pdDsKKysJCWQyaV9UU19UU1RfSU5GTzsKKysJCUVWUF9QS0VZX2FzbjFfYWRkX2FsaWFzOworKwkJZDJpX1RTX1JFU1BfYmlvOworKwkJT1RIRVJOQU1FX2NtcDsKKysJCUdFTkVSQUxfTkFNRV9zZXQwX3ZhbHVlOworKwkJUEtDUzdfUkVDSVBfSU5GT19nZXQwX2FsZzsKKysJCVRTX1JFU1BfQ1RYX25ldzsKKysJCVRTX1JFU1Bfc2V0X3RzdF9pbmZvOworKwkJUEtDUzdfZmluYWw7CisrCQlFVlBfUEtFWV9iYXNlX2lkOworKwkJVFNfUkVTUF9DVFhfc2V0X3NpZ25lcl9jZXJ0OworKwkJVFNfUkVRX3NldF9tc2dfaW1wcmludDsKKysJCUVWUF9QS0VZX0NUWF9jdHJsOworKwkJVFNfQ09ORl9zZXRfZGlnZXN0czsKKysJCWQyaV9UU19NU0dfSU1QUklOVDsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2N0cmw7CisrCQlUU19SRVFfZ2V0X2V4dF9ieV9OSUQ7CisrCQlQS0NTNV9wYmVfc2V0MF9hbGdvcjsKKysJCUJOX0JMSU5ESU5HX3RocmVhZF9pZDsKKysJCVRTX0FDQ1VSQUNZX25ldzsKKysJCVg1MDlfQ1JMX01FVEhPRF9mcmVlOworKwkJQVNOMV9QQ1RYX2dldF9ubV9mbGFnczsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3NpZ247CisrCQlDUllQVE9fVEhSRUFESURfY3VycmVudDsKKysJCUVWUF9QS0VZX2RlY3J5cHRfaW5pdDsKKysJCU5FVFNDQVBFX1g1MDlfZnJlZTsKKysJCWkyYl9QVktfYmlvOworKwkJRVZQX1BLRVlfcHJpbnRfcHJpdmF0ZTsKKysJCUdFTkVSQUxfTkFNRV9nZXQwX3ZhbHVlOworKwkJYjJpX1BWS19iaW87CisrCQlBU04xX1VUQ1RJTUVfYWRqOworKwkJVFNfVFNUX0lORk9fbmV3OworKwkJRVZQX01EX2RvX2FsbF9zb3J0ZWQ7CisrCQlUU19DT05GX3NldF9kZWZhdWx0X2VuZ2luZTsKKysJCVRTX0FDQ1VSQUNZX3NldF9zZWNvbmRzOworKwkJVFNfVFNUX0lORk9fZ2V0X3RpbWU7CisrCQlQS0NTOF9wa2V5X2dldDA7CisrCQlFVlBfUEtFWV9hc24xX2dldDA7CisrCQlPQkpfYWRkX3NpZ2lkOworKwkJUEtDUzdfU0lHTkVSX0lORk9fc2lnbjsKKysJCUVWUF9QS0VZX3BhcmFtZ2VuX2luaXQ7CisrCQlFVlBfUEtFWV9zaWduOworKwkJT0JKX3NpZ2lkX2ZyZWU7CisrCQlFVlBfUEtFWV9tZXRoX3NldF9pbml0OworKwkJZDJpX0VTU19JU1NVRVJfU0VSSUFMOworKwkJSVNTVUlOR19ESVNUX1BPSU5UX25ldzsKKysJCUFTTjFfVElNRV9hZGo7CisrCQlUU19PQkpfcHJpbnRfYmlvOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfdmVyaWZ5X3JlY292ZXI7CisrCQlFVlBfUEtFWV9tZXRoX3NldF92cmZ5X3JlY292ZXI7CisrCQlUU19SRVNQX2dldF9zdGF0dXNfaW5mbzsKKysJCUNNU19zdHJlYW07CisrCQlFVlBfUEtFWV9DVFhfc2V0X2NiOworKwkJUEtDUzdfdG9fVFNfVFNUX0lORk87CisrCQlBU04xX1BDVFhfZ2V0X29pZF9mbGFnczsKKysJCVRTX1RTVF9JTkZPX2FkZF9leHQ7CisrCQlFVlBfUEtFWV9tZXRoX3NldF9kZXJpdmU7CisrCQlpMmRfVFNfUkVTUF9mcDsKKysJCWkyZF9UU19NU0dfSU1QUklOVF9iaW87CisrCQlUU19SRVNQX0NUWF9zZXRfYWNjdXJhY3k7CisrCQlUU19SRVFfc2V0X25vbmNlOworKwkJRVNTX0NFUlRfSURfbmV3OworKwkJRU5HSU5FX3BrZXlfYXNuMV9maW5kX3N0cjsKKysJCVRTX1JFUV9nZXRfZXh0X2NvdW50OworKwkJQlVGX3JldmVyc2U7CisrCQlUU19UU1RfSU5GT19wcmludF9iaW87CisrCQlkMmlfSVNTVUlOR19ESVNUX1BPSU5UOworKwkJRU5HSU5FX2dldF9wa2V5X21ldGhzOworKwkJaTJiX1ByaXZhdGVLZXlfYmlvOworKwkJaTJkX1RTX1JFU1A7CisrCQliMmlfUHVibGljS2V5OworKwkJVFNfVkVSSUZZX0NUWF9jbGVhbnVwOworKwkJVFNfU1RBVFVTX0lORk9fZnJlZTsKKysJCVRTX1JFU1BfdmVyaWZ5X3Rva2VuOworKwkJT0JKX2JzZWFyY2hfZXhfOworKwkJQVNOMV9ibl9wcmludDsKKysJCUVWUF9QS0VZX2FzbjFfZ2V0X2NvdW50OworKwkJRU5HSU5FX3JlZ2lzdGVyX3BrZXlfYXNuMV9tZXRoczsKKysJCUFTTjFfUENUWF9zZXRfbm1fZmxhZ3M7CisrCQlFVlBfRGlnZXN0VmVyaWZ5SW5pdDsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9wa2V5X21ldGhzOworKwkJVFNfVFNUX0lORk9fZ2V0X3BvbGljeV9pZDsKKysJCVRTX1JFUV9nZXRfY2VydF9yZXE7CisrCQlYNTA5X0NSTF9zZXRfbWV0aF9kYXRhOworKwkJUEtDUzhfcGtleV9zZXQwOworKwkJQVNOMV9TVFJJTkdfY29weTsKKysJCWQyaV9UU19UU1RfSU5GT19mcDsKKysJCVg1MDlfQ1JMX21hdGNoOworKwkJRVZQX1BLRVlfYXNuMV9zZXRfcHJpdmF0ZTsKKysJCVRTX1RTVF9JTkZPX2dldF9leHRfZDJpOworKwkJVFNfUkVTUF9DVFhfYWRkX3BvbGljeTsKKysJCWQyaV9UU19SRVNQOworKwkJVFNfQ09ORl9sb2FkX2NlcnRzOworKwkJVFNfVFNUX0lORk9fZ2V0X21zZ19pbXByaW50OworKwkJRVJSX2xvYWRfVFNfc3RyaW5nczsKKysJCVRTX1RTVF9JTkZPX2dldF92ZXJzaW9uOworKwkJRVZQX1BLRVlfQ1RYX2R1cDsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3ZlcmlmeTsKKysJCWkyYl9QdWJsaWNLZXlfYmlvOworKwkJVFNfQ09ORl9zZXRfY2VydHM7CisrCQlFVlBfUEtFWV9hc24xX2dldDBfaW5mbzsKKysJCVRTX1ZFUklGWV9DVFhfZnJlZTsKKysJCVRTX1JFUV9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJVFNfUkVTUF9DVFhfc2V0X3NlcmlhbF9jYjsKKysJCVg1MDlfQ1JMX2dldF9tZXRoX2RhdGE7CisrCQlUU19SRVNQX0NUWF9zZXRfdGltZV9jYjsKKysJCVRTX01TR19JTVBSSU5UX2dldF9tc2c7CisrCQlUU19UU1RfSU5GT19leHRfZnJlZTsKKysJCVRTX1JFUV9nZXRfdmVyc2lvbjsKKysJCVRTX1JFUV9hZGRfZXh0OworKwkJRVZQX1BLRVlfQ1RYX3NldF9hcHBfZGF0YTsKKysJCU9CSl9ic2VhcmNoXzsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3ZlcmlmeWN0eDsKKysJCWkyZF9QS0NTN19iaW9fc3RyZWFtOworKwkJQ1JZUFRPX1RIUkVBRElEX3NldF9udW1lcmljOworKwkJUEtDUzdfc2lnbl9hZGRfc2lnbmVyOworKwkJZDJpX1RTX1RTVF9JTkZPX2JpbzsKKysJCVRTX1RTVF9JTkZPX2dldF9vcmRlcmluZzsKKysJCVRTX1JFU1BfcHJpbnRfYmlvOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dHM7CisrCQlITUFDX0NUWF9jb3B5OworKwkJUEtDUzVfcGJlMl9zZXRfaXY7CisrCQlFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoczsKKysJCWIyaV9Qcml2YXRlS2V5OworKwkJRVZQX1BLRVlfQ1RYX2dldF9hcHBfZGF0YTsKKysJCVRTX1JFUV9zZXRfY2VydF9yZXE7CisrCQlDUllQVE9fVEhSRUFESURfc2V0X2NhbGxiYWNrOworKwkJVFNfQ09ORl9zZXRfc2VyaWFsOworKwkJVFNfVFNUX0lORk9fZnJlZTsKKysJCWQyaV9UU19SRVFfZnA7CisrCQlUU19SRVNQX3ZlcmlmeV9yZXNwb25zZTsKKysJCWkyZF9FU1NfSVNTVUVSX1NFUklBTDsKKysJCVRTX0FDQ1VSQUNZX2dldF9zZWNvbmRzOworKwkJRVZQX0NJUEhFUl9kb19hbGw7CisrCQliMmlfUHJpdmF0ZUtleV9iaW87CisrCQlPQ1NQX0NFUlRJRF9kdXA7CisrCQlYNTA5X1BVQktFWV9nZXQwX3BhcmFtOworKwkJVFNfTVNHX0lNUFJJTlRfZHVwOworKwkJUEtDUzdfcHJpbnRfY3R4OworKwkJaTJkX1RTX1JFUV9iaW87CisrCQlFVlBfd2hpcmxwb29sOworKwkJRVZQX1BLRVlfYXNuMV9zZXRfcGFyYW07CisrCQlFVlBfUEtFWV9tZXRoX3NldF9lbmNyeXB0OworKwkJQVNOMV9QQ1RYX3NldF9mbGFnczsKKysJCWkyZF9FU1NfQ0VSVF9JRDsKKysJCVRTX1ZFUklGWV9DVFhfbmV3OworKwkJVFNfUkVTUF9DVFhfc2V0X2V4dGVuc2lvbl9jYjsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfcGtleV9tZXRoczsKKysJCVRTX1JFU1BfQ1RYX3NldF9zdGF0dXNfaW5mb19jb25kOworKwkJVFNfUkVTUF9DVFhfc2V0X3N0YXRfaW5mb19jb25kOworKwkJRVZQX1BLRVlfdmVyaWZ5OworKwkJV0hJUkxQT09MX0ZpbmFsOworKwkJWDUwOV9DUkxfTUVUSE9EX25ldzsKKysJCUVWUF9EaWdlc3RTaWduRmluYWw7CisrCQlUU19SRVNQX0NUWF9zZXRfZGVmX3BvbGljeTsKKysJCU5FVFNDQVBFX1g1MDlfaXQ7CisrCQlUU19SRVNQX2NyZWF0ZV9yZXNwb25zZTsKKysJCVBLQ1M3X1NJR05FUl9JTkZPX2dldDBfYWxnczsKKysJCVRTX1RTVF9JTkZPX2dldF9ub25jZTsKKysJCUVWUF9QS0VZX2RlY3J5cHRfb2xkOworKwkJVFNfVFNUX0lORk9fc2V0X3BvbGljeV9pZDsKKysJCVRTX0NPTkZfc2V0X2Vzc19jZXJ0X2lkX2NoYWluOworKwkJRVZQX1BLRVlfQ1RYX2dldDBfcGtleTsKKysJCWQyaV9UU19SRVE7CisrCQlFVlBfUEtFWV9hc24xX2ZpbmRfc3RyOworKwkJQklPX2ZfYXNuMTsKKysJCUVTU19TSUdOSU5HX0NFUlRfbmV3OworKwkJRVZQX1BCRV9maW5kOworKwkJWDUwOV9DUkxfZ2V0MF9ieV9jZXJ0OworKwkJRVZQX1BLRVlfZGVyaXZlOworKwkJaTJkX1RTX1JFUTsKKysJCVRTX1RTVF9JTkZPX2RlbGV0ZV9leHQ7CisrCQlFU1NfSVNTVUVSX1NFUklBTF9mcmVlOworKwkJQVNOMV9QQ1RYX3NldF9zdHJfZmxhZ3M7CisrCQlFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoX3N0cjsKKysJCVRTX0NPTkZfc2V0X3NpZ25lcl9rZXk7CisrCQlUU19BQ0NVUkFDWV9nZXRfbWlsbGlzOworKwkJVFNfUkVTUF9nZXRfdG9rZW47CisrCQlUU19BQ0NVUkFDWV9kdXA7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX3BrZXlfYXNuMV9tZXRoczsKKysJCUVOR0lORV9yZWdfYWxsX3BrZXlfYXNuMV9tZXRoczsKKysJCVg1MDlfQ1JMX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCUNSWVBUT19USFJFQURJRF9oYXNoOworKwkJQ01TX0NvbnRlbnRJbmZvX3ByaW50X2N0eDsKKysJCVRTX1JFU1BfZnJlZTsKKysJCUlTU1VJTkdfRElTVF9QT0lOVF9mcmVlOworKwkJRVNTX0lTU1VFUl9TRVJJQUxfbmV3OworKwkJQ01TX2FkZDFfY3JsOworKwkJUEtDUzdfYWRkMV9hdHRyaWJfZGlnZXN0OworKwkJVFNfUkVTUF9DVFhfYWRkX21kOworKwkJVFNfVFNUX0lORk9fZHVwOworKwkJRU5HSU5FX3NldF9wa2V5X2FzbjFfbWV0aHM7CisrCQlQRU1fd3JpdGVfYmlvX1BhcmFtZXRlcnM7CisrCQlUU19UU1RfSU5GT19nZXRfYWNjdXJhY3k7CisrCQlYNTA5X0NSTF9nZXQwX2J5X3NlcmlhbDsKKysJCVRTX1RTVF9JTkZPX3NldF92ZXJzaW9uOworKwkJVFNfUkVTUF9DVFhfZ2V0X3RzdF9pbmZvOworKwkJVFNfUkVTUF92ZXJpZnlfc2lnbmF0dXJlOworKwkJQ1JZUFRPX1RIUkVBRElEX2dldF9jYWxsYmFjazsKKysJCVRTX1RTVF9JTkZPX2dldF90c2E7CisrCQlUU19TVEFUVVNfSU5GT19uZXc7CisrCQlFVlBfUEtFWV9DVFhfZ2V0X2NiOworKwkJVFNfUkVRX2dldF9leHRfZDJpOworKwkJR0VORVJBTF9OQU1FX3NldDBfb3RoZXJuYW1lOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dF9jb3VudDsKKysJCVRTX1JFU1BfQ1RYX2dldF9yZXF1ZXN0OworKwkJaTJkX05FVFNDQVBFX1g1MDk7CisrCQlFTkdJTkVfZ2V0X3BrZXlfbWV0aF9lbmdpbmU7CisrCQlFVlBfUEtFWV9tZXRoX3NldF9zaWduY3R4OworKwkJRVZQX1BLRVlfYXNuMV9jb3B5OworKwkJQVNOMV9UWVBFX2NtcDsKKysJCUVWUF9DSVBIRVJfZG9fYWxsX3NvcnRlZDsKKysJCUVWUF9QS0VZX0NUWF9mcmVlOworKwkJSVNTVUlOR19ESVNUX1BPSU5UX2l0OworKwkJZDJpX1RTX01TR19JTVBSSU5UX2ZwOworKwkJWDUwOV9TVE9SRV9nZXQxX2NlcnRzOworKwkJRVZQX1BLRVlfQ1RYX2dldF9vcGVyYXRpb247CisrCQlkMmlfRVNTX1NJR05JTkdfQ0VSVDsKKysJCVRTX0NPTkZfc2V0X29yZGVyaW5nOworKwkJRVZQX1BCRV9hbGdfYWRkX3R5cGU7CisrCQlUU19SRVFfc2V0X3ZlcnNpb247CisrCQlFVlBfUEtFWV9nZXQwOworKwkJQklPX2FzbjFfc2V0X3N1ZmZpeDsKKysJCWkyZF9UU19TVEFUVVNfSU5GTzsKKysJCUVWUF9NRF9kb19hbGw7CisrCQlUU19UU1RfSU5GT19zZXRfYWNjdXJhY3k7CisrCQlQS0NTN19hZGRfYXR0cmliX2NvbnRlbnRfdHlwZTsKKysJCUVSUl9yZW1vdmVfdGhyZWFkX3N0YXRlOworKwkJRVZQX1BLRVlfbWV0aF9hZGQwOworKwkJVFNfVFNUX0lORk9fc2V0X3RzYTsKKysJCUVWUF9QS0VZX21ldGhfbmV3OworKwkJV0hJUkxQT09MX1VwZGF0ZTsKKysJCVRTX0NPTkZfc2V0X2FjY3VyYWN5OworKwkJQVNOMV9QQ1RYX3NldF9vaWRfZmxhZ3M7CisrCQlFU1NfU0lHTklOR19DRVJUX2R1cDsKKysJCWQyaV9UU19SRVFfYmlvOworKwkJWDUwOV90aW1lX2Fkal9leDsKKysJCVRTX1JFU1BfQ1RYX2FkZF9mbGFnczsKKysJCWQyaV9UU19TVEFUVVNfSU5GTzsKKysJCVRTX01TR19JTVBSSU5UX3NldF9tc2c7CisrCQlCSU9fYXNuMV9nZXRfc3VmZml4OworKwkJVFNfUkVRX2ZyZWU7CisrCQlFVlBfUEtFWV9tZXRoX2ZyZWU7CisrCQlUU19SRVFfZ2V0X2V4dHM7CisrCQlUU19SRVNQX0NUWF9zZXRfY2xvY2tfcHJlY2lzaW9uX2RpZ2l0czsKKysJCVRTX1JFU1BfQ1RYX3NldF9jbGtfcHJlY19kaWdpdHM7CisrCQlUU19SRVNQX0NUWF9hZGRfZmFpbHVyZV9pbmZvOworKwkJaTJkX1RTX1JFU1BfYmlvOworKwkJRVZQX1BLRVlfQ1RYX2dldDBfcGVlcmtleTsKKysJCVBFTV93cml0ZV9iaW9fQ01TX3N0cmVhbTsKKysJCVRTX1JFUV9uZXc7CisrCQlUU19NU0dfSU1QUklOVF9uZXc7CisrCQlFVlBfUEtFWV9tZXRoX2ZpbmQ7CisrCQlFVlBfUEtFWV9pZDsKKysJCVRTX1RTVF9JTkZPX3NldF9zZXJpYWw7CisrCQlhMmlfR0VORVJBTF9OQU1FOworKwkJVFNfQ09ORl9zZXRfY3J5cHRvX2RldmljZTsKKysJCUVWUF9QS0VZX3ZlcmlmeV9pbml0OworKwkJVFNfQ09ORl9zZXRfcG9saWNpZXM7CisrCQlBU04xX1BDVFhfbmV3OworKwkJRVNTX0NFUlRfSURfZnJlZTsKKysJCUVOR0lORV91bnJlZ2lzdGVyX3BrZXlfbWV0aHM7CisrCQlUU19NU0dfSU1QUklOVF9mcmVlOworKwkJVFNfVkVSSUZZX0NUWF9pbml0OworKwkJUEtDUzdfc3RyZWFtOworKwkJVFNfUkVTUF9DVFhfc2V0X2NlcnRzOworKwkJVFNfQ09ORl9zZXRfZGVmX3BvbGljeTsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX2FkajsKKysJCU5FVFNDQVBFX1g1MDlfbmV3OworKwkJVFNfQUNDVVJBQ1lfZnJlZTsKKysJCVRTX1JFU1BfZ2V0X3RzdF9pbmZvOworKwkJRVZQX1BLRVlfZGVyaXZlX3NldF9wZWVyOworKwkJUEVNX3JlYWRfYmlvX1BhcmFtZXRlcnM7CisrCQlUU19DT05GX3NldF9jbG9ja19wcmVjaXNpb25fZGlnaXRzOworKwkJVFNfQ09ORl9zZXRfY2xrX3ByZWNfZGlnaXRzOworKwkJRVNTX0lTU1VFUl9TRVJJQUxfZHVwOworKwkJVFNfQUNDVVJBQ1lfZ2V0X21pY3JvczsKKysJCUFTTjFfUENUWF9nZXRfc3RyX2ZsYWdzOworKwkJTkFNRV9DT05TVFJBSU5UU19jaGVjazsKKysJCUFTTjFfQklUX1NUUklOR19jaGVjazsKKysJCVg1MDlfY2hlY2tfYWtpZDsKKysJCUVOR0lORV91bnJlZ2lzdGVyX3BrZXlfYXNuMV9tZXRoczsKKysJCUVOR0lORV91bnJlZ19wa2V5X2FzbjFfbWV0aHM7CisrCQlBU04xX1BDVFhfZnJlZTsKKysJCVBFTV93cml0ZV9iaW9fQVNOMV9zdHJlYW07CisrCQlpMmRfQVNOMV9iaW9fc3RyZWFtOworKwkJVFNfWDUwOV9BTEdPUl9wcmludF9iaW87CisrCQlFVlBfUEtFWV9tZXRoX3NldF9jbGVhbnVwOworKwkJRVZQX1BLRVlfYXNuMV9mcmVlOworKwkJRVNTX1NJR05JTkdfQ0VSVF9mcmVlOworKwkJVFNfVFNUX0lORk9fc2V0X21zZ19pbXByaW50OworKwkJR0VORVJBTF9OQU1FX2NtcDsKKysJCWQyaV9BU04xX1NFVF9BTlk7CisrCQlFTkdJTkVfc2V0X3BrZXlfbWV0aHM7CisrCQlpMmRfVFNfUkVRX2ZwOworKwkJZDJpX0FTTjFfU0VRVUVOQ0VfQU5ZOworKwkJR0VORVJBTF9OQU1FX2dldDBfb3RoZXJOYW1lOworKwkJZDJpX0VTU19DRVJUX0lEOworKwkJT0JKX2ZpbmRfc2lnaWRfYWxnczsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2tleWdlbjsKKysJCVBLQ1M1X1BCS0RGMl9ITUFDOworKwkJRVZQX1BLRVlfcGFyYW1nZW47CisrCQlFVlBfUEtFWV9tZXRoX3NldF9wYXJhbWdlbjsKKysJCUJJT19uZXdfUEtDUzc7CisrCQlFVlBfUEtFWV92ZXJpZnlfcmVjb3ZlcjsKKysJCVRTX2V4dF9wcmludF9iaW87CisrCQlUU19BU04xX0lOVEVHRVJfcHJpbnRfYmlvOworKwkJY2hlY2tfZGVmZXI7CisrCQlEU09fcGF0aGJ5YWRkcjsKKysJCUVWUF9QS0VZX3NldF90eXBlOworKwkJVFNfQUNDVVJBQ1lfc2V0X21pY3JvczsKKysJCVRTX1JFUV90b19UU19WRVJJRllfQ1RYOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfY29weTsKKysJCUFTTjFfUENUWF9zZXRfY2VydF9mbGFnczsKKysJCVRTX1RTVF9JTkZPX2dldF9leHQ7CisrCQlFVlBfUEtFWV9hc24xX3NldF9jdHJsOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCUVWUF9QS0VZX0NUWF9uZXdfaWQ7CisrCQlUU19SRVFfZ2V0X2V4dF9ieV9PQko7CisrCQlUU19DT05GX3NldF9zaWduZXJfY2VydDsKKysJCVg1MDlfTkFNRV9oYXNoX29sZDsKKysJCUFTTjFfVElNRV9zZXRfc3RyaW5nOworKwkJRVZQX01EX2ZsYWdzOworKwkJVFNfUkVTUF9DVFhfZnJlZTsKKysJCURTQXBhcmFtc19kdXA7CisrCQlESHBhcmFtc19kdXA7CisrCQlPQ1NQX1JFUV9DVFhfYWRkMV9oZWFkZXI7CisrCQlPQ1NQX1JFUV9DVFhfc2V0MV9yZXE7CisrCQlYNTA5X1NUT1JFX3NldF92ZXJpZnlfY2I7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQwX2N1cnJlbnRfY3JsOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9wYXJlbnRfY3R4OworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9jdXJyZW50X2lzc3VlcjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfY3VyX2lzc3VlcjsKKysJCVg1MDlfaXNzdWVyX25hbWVfaGFzaF9vbGQ7CisrCQlYNTA5X3N1YmplY3RfbmFtZV9oYXNoX29sZDsKKysJCUVWUF9DSVBIRVJfQ1RYX2NvcHk7CisrCQlVSV9tZXRob2RfZ2V0X3Byb21wdF9jb25zdHJ1Y3RvcjsKKysJCVVJX21ldGhvZF9nZXRfcHJvbXB0X2NvbnN0cnVjdHI7CisrCQlVSV9tZXRob2Rfc2V0X3Byb21wdF9jb25zdHJ1Y3RvcjsKKysJCVVJX21ldGhvZF9zZXRfcHJvbXB0X2NvbnN0cnVjdHI7CisrCQlFVlBfcmVhZF9wd19zdHJpbmdfbWluOworKwkJQ1JZUFRPX2N0czEyOF9lbmNyeXB0OworKwkJQ1JZUFRPX2N0czEyOF9kZWNyeXB0X2Jsb2NrOworKwkJQ1JZUFRPX2NmYjEyOF8xX2VuY3J5cHQ7CisrCQlDUllQVE9fY2JjMTI4X2VuY3J5cHQ7CisrCQlDUllQVE9fY3RyMTI4X2VuY3J5cHQ7CisrCQlDUllQVE9fb2ZiMTI4X2VuY3J5cHQ7CisrCQlDUllQVE9fY3RzMTI4X2RlY3J5cHQ7CisrCQlDUllQVE9fY3RzMTI4X2VuY3J5cHRfYmxvY2s7CisrCQlDUllQVE9fY2JjMTI4X2RlY3J5cHQ7CisrCQlDUllQVE9fY2ZiMTI4X2VuY3J5cHQ7CisrCQlDUllQVE9fY2ZiMTI4XzhfZW5jcnlwdDsKKysKKysJbG9jYWw6CisrCQkqOworK307CisrCisrCisrT1BFTlNTTF8xLjAuMSB7CisrCWdsb2JhbDoKKysJCVNTTF9yZW5lZ290aWF0ZV9hYmJyZXZpYXRlZDsKKysJCVRMU3YxXzFfbWV0aG9kOworKwkJVExTdjFfMV9jbGllbnRfbWV0aG9kOworKwkJVExTdjFfMV9zZXJ2ZXJfbWV0aG9kOworKwkJU1NMX0NUWF9zZXRfc3JwX2NsaWVudF9wd2RfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYjsKKysJCVNTTF9nZXRfc3JwX2c7CisrCQlTU0xfQ1RYX3NldF9zcnBfdXNlcm5hbWVfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF9zcnBfdW5fY2I7CisrCQlTU0xfZ2V0X3NycF91c2VyaW5mbzsKKysJCVNTTF9zZXRfc3JwX3NlcnZlcl9wYXJhbTsKKysJCVNTTF9zZXRfc3JwX3NlcnZlcl9wYXJhbV9wdzsKKysJCVNTTF9nZXRfc3JwX047CisrCQlTU0xfZ2V0X3NycF91c2VybmFtZTsKKysJCVNTTF9DVFhfc2V0X3NycF9wYXNzd29yZDsKKysJCVNTTF9DVFhfc2V0X3NycF9zdHJlbmd0aDsKKysJCVNTTF9DVFhfc2V0X3NycF92ZXJpZnlfcGFyYW1fY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF9zcnBfdmZ5X3BhcmFtX2NiOworKwkJU1NMX0NUWF9zZXRfc3JwX2NiX2FyZzsKKysJCVNTTF9DVFhfc2V0X3NycF91c2VybmFtZTsKKysJCVNTTF9DVFhfU1JQX0NUWF9pbml0OworKwkJU1NMX1NSUF9DVFhfaW5pdDsKKysJCVNSUF9DYWxjX0FfcGFyYW07CisrCQlTUlBfZ2VuZXJhdGVfc2VydmVyX21hc3Rlcl9zZWNyZXQ7CisrCQlTUlBfZ2VuX3NlcnZlcl9tYXN0ZXJfc2VjcmV0OworKwkJU1NMX0NUWF9TUlBfQ1RYX2ZyZWU7CisrCQlTUlBfZ2VuZXJhdGVfY2xpZW50X21hc3Rlcl9zZWNyZXQ7CisrCQlTUlBfZ2VuX2NsaWVudF9tYXN0ZXJfc2VjcmV0OworKwkJU1NMX3NycF9zZXJ2ZXJfcGFyYW1fd2l0aF91c2VybmFtZTsKKysJCVNTTF9zcnBfc2VydmVyX3BhcmFtX3dpdGhfdW47CisrCQlTU0xfU1JQX0NUWF9mcmVlOworKwkJU1NMX3NldF9kZWJ1ZzsKKysJCVNTTF9TRVNTSU9OX2dldDBfcGVlcjsKKysJCVRMU3YxXzJfY2xpZW50X21ldGhvZDsKKysJCVNTTF9TRVNTSU9OX3NldDFfaWRfY29udGV4dDsKKysJCVRMU3YxXzJfc2VydmVyX21ldGhvZDsKKysJCVNTTF9jYWNoZV9oaXQ7CisrCQlTU0xfZ2V0MF9rc3NsX2N0eDsKKysJCVNTTF9zZXQwX2tzc2xfY3R4OworKwkJU1NMX3NldF9zdGF0ZTsKKysJCVNTTF9DSVBIRVJfZ2V0X2lkOworKwkJVExTdjFfMl9tZXRob2Q7CisrCQlrc3NsX2N0eF9nZXQwX2NsaWVudF9wcmluYzsKKysJCVNTTF9leHBvcnRfa2V5aW5nX21hdGVyaWFsOworKwkJU1NMX3NldF90bHNleHRfdXNlX3NydHA7CisrCQlTU0xfQ1RYX3NldF9uZXh0X3Byb3Rvc19hZHZlcnRpc2VkX2NiOworKwkJU1NMX0NUWF9zZXRfbmV4dF9wcm90b3NfYWR2X2NiOworKwkJU1NMX2dldDBfbmV4dF9wcm90b19uZWdvdGlhdGVkOworKwkJU1NMX2dldF9zZWxlY3RlZF9zcnRwX3Byb2ZpbGU7CisrCQlTU0xfQ1RYX3NldF90bHNleHRfdXNlX3NydHA7CisrCQlTU0xfc2VsZWN0X25leHRfcHJvdG87CisrCQlTU0xfZ2V0X3NydHBfcHJvZmlsZXM7CisrCQlTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbGVjdF9jYjsKKysJCVNTTF9DVFhfc2V0X25leHRfcHJvdG9fc2VsX2NiOworKwkJU1NMX1NFU1NJT05fZ2V0X2NvbXByZXNzX2lkOworKworKwkJU1JQX1ZCQVNFX2dldF9ieV91c2VyOworKwkJU1JQX0NhbGNfc2VydmVyX2tleTsKKysJCVNSUF9jcmVhdGVfdmVyaWZpZXI7CisrCQlTUlBfY3JlYXRlX3ZlcmlmaWVyX0JOOworKwkJU1JQX0NhbGNfdTsKKysJCVNSUF9WQkFTRV9mcmVlOworKwkJU1JQX0NhbGNfY2xpZW50X2tleTsKKysJCVNSUF9nZXRfZGVmYXVsdF9nTjsKKysJCVNSUF9DYWxjX3g7CisrCQlTUlBfQ2FsY19COworKwkJU1JQX1ZCQVNFX25ldzsKKysJCVNSUF9jaGVja19rbm93bl9nTl9wYXJhbTsKKysJCVNSUF9DYWxjX0E7CisrCQlTUlBfVmVyaWZ5X0FfbW9kX047CisrCQlTUlBfVkJBU0VfaW5pdDsKKysJCVNSUF9WZXJpZnlfQl9tb2RfTjsKKysJCUVDX0tFWV9zZXRfcHVibGljX2tleV9hZmZpbmVfY29vcmRpbmF0ZXM7CisrCQlFQ19LRVlfc2V0X3B1Yl9rZXlfYWZmX2Nvb3JkczsKKysJCUVWUF9hZXNfMTkyX2N0cjsKKysJCUVWUF9QS0VZX21ldGhfZ2V0MF9pbmZvOworKwkJRVZQX1BLRVlfbWV0aF9jb3B5OworKwkJRVJSX2FkZF9lcnJvcl92ZGF0YTsKKysJCUVWUF9hZXNfMTI4X2N0cjsKKysJCUVWUF9hZXNfMjU2X2N0cjsKKysJCUVDX0dGcF9uaXN0cDIyNF9tZXRob2Q7CisrCQlFQ19LRVlfZ2V0X2ZsYWdzOworKwkJUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX1BTU19tZ2YxOworKwkJRVZQX2Flc18xMjhfeHRzOworKwkJRVZQX2Flc18yNTZfeHRzOworKwkJRVZQX2Flc18xMjhfZ2NtOworKwkJRUNfS0VZX2NsZWFyX2ZsYWdzOworKwkJRUNfS0VZX3NldF9mbGFnczsKKysJCUVWUF9hZXNfMjU2X2NjbTsKKysJCVJTQV92ZXJpZnlfUEtDUzFfUFNTX21nZjE7CisrCQlFVlBfYWVzXzEyOF9jY207CisrCQlFVlBfYWVzXzE5Ml9nY207CisrCQlYNTA5X0FMR09SX3NldF9tZDsKKysJCVJBTkRfaW5pdF9maXBzOworKwkJRVZQX2Flc18yNTZfZ2NtOworKwkJRVZQX2Flc18xOTJfY2NtOworKwkJQ01BQ19DVFhfY29weTsKKysJCUNNQUNfQ1RYX2ZyZWU7CisrCQlDTUFDX0NUWF9nZXQwX2NpcGhlcl9jdHg7CisrCQlDTUFDX0NUWF9jbGVhbnVwOworKwkJQ01BQ19Jbml0OworKwkJQ01BQ19VcGRhdGU7CisrCQlDTUFDX3Jlc3VtZTsKKysJCUNNQUNfQ1RYX25ldzsKKysJCUNNQUNfRmluYWw7CisrCQlDUllQVE9fY3RyMTI4X2VuY3J5cHRfY3RyMzI7CisrCQlDUllQVE9fZ2NtMTI4X3JlbGVhc2U7CisrCQlDUllQVE9fY2NtMTI4X2RlY3J5cHRfY2NtNjQ7CisrCQlDUllQVE9fY2NtMTI4X2VuY3J5cHQ7CisrCQlDUllQVE9fZ2NtMTI4X2VuY3J5cHQ7CisrCQlDUllQVE9feHRzMTI4X2VuY3J5cHQ7CisrCQlFVlBfcmM0X2htYWNfbWQ1OworKwkJQ1JZUFRPX25pc3RjdHMxMjhfZGVjcnlwdF9ibG9jazsKKysJCUNSWVBUT19nY20xMjhfc2V0aXY7CisrCQlDUllQVE9fbmlzdGN0czEyOF9lbmNyeXB0OworKwkJRVZQX2Flc18xMjhfY2JjX2htYWNfc2hhMTsKKysJCUNSWVBUT19nY20xMjhfdGFnOworKwkJQ1JZUFRPX2NjbTEyOF9lbmNyeXB0X2NjbTY0OworKwkJRU5HSU5FX2xvYWRfcmRyYW5kOworKwkJQ1JZUFRPX2NjbTEyOF9zZXRpdjsKKysJCUNSWVBUT19uaXN0Y3RzMTI4X2VuY3J5cHRfYmxvY2s7CisrCQlDUllQVE9fZ2NtMTI4X2FhZDsKKysJCUNSWVBUT19jY20xMjhfaW5pdDsKKysJCUNSWVBUT19uaXN0Y3RzMTI4X2RlY3J5cHQ7CisrCQlDUllQVE9fZ2NtMTI4X25ldzsKKysJCUNSWVBUT19jY20xMjhfdGFnOworKwkJQ1JZUFRPX2NjbTEyOF9kZWNyeXB0OworKwkJQ1JZUFRPX2NjbTEyOF9hYWQ7CisrCQlDUllQVE9fZ2NtMTI4X2luaXQ7CisrCQlDUllQVE9fZ2NtMTI4X2RlY3J5cHQ7CisrCQlFTkdJTkVfbG9hZF9yc2F4OworKwkJQ1JZUFRPX2djbTEyOF9kZWNyeXB0X2N0cjMyOworKwkJQ1JZUFRPX2djbTEyOF9lbmNyeXB0X2N0cjMyOworKwkJQ1JZUFRPX2djbTEyOF9maW5pc2g7CisrCQlFVlBfYWVzXzI1Nl9jYmNfaG1hY19zaGExOworKwkJUEtDUzVfcGJrZGYyX3NldDsKKysJCUNNU19hZGQwX3JlY2lwaWVudF9wYXNzd29yZDsKKysJCUNNU19kZWNyeXB0X3NldDFfcGFzc3dvcmQ7CisrCQlDTVNfUmVjaXBpZW50SW5mb19zZXQwX3Bhc3N3b3JkOworKwkJUkFORF9zZXRfZmlwc19kcmJnX3R5cGU7CisrCQlYNTA5X1JFUV9zaWduX2N0eDsKKysJCVJTQV9QU1NfUEFSQU1TX25ldzsKKysJCVg1MDlfQ1JMX3NpZ25fY3R4OworKwkJWDUwOV9zaWduYXR1cmVfZHVtcDsKKysJCWQyaV9SU0FfUFNTX1BBUkFNUzsKKysJCVJTQV9QU1NfUEFSQU1TX2l0OworKwkJUlNBX1BTU19QQVJBTVNfZnJlZTsKKysJCVg1MDlfc2lnbl9jdHg7CisrCQlpMmRfUlNBX1BTU19QQVJBTVM7CisrCQlBU04xX2l0ZW1fc2lnbl9jdHg7CisrCQlFQ19HRnBfbmlzdHA1MjFfbWV0aG9kOworKwkJRUNfR0ZwX25pc3RwMjU2X21ldGhvZDsKKysJCU9QRU5TU0xfc3RkZXJyOworKwkJT1BFTlNTTF9jcHVpZF9zZXR1cDsKKysJCU9QRU5TU0xfc2hvd2ZhdGFsOworKwkJQklPX25ld19kZ3JhbV9zY3RwOworKwkJQklPX2RncmFtX3NjdHBfbXNnX3dhaXRpbmc7CisrCQlCSU9fZGdyYW1fc2N0cF93YWl0X2Zvcl9kcnk7CisrCQlCSU9fc19kYXRhZ3JhbV9zY3RwOworKwkJQklPX2RncmFtX2lzX3NjdHA7CisrCQlCSU9fZGdyYW1fc2N0cF9ub3RpZmljYXRpb25fY2I7CisrfSBPUEVOU1NMXzEuMC4wOworKworK09QRU5TU0xfMS4wLjFkIHsKKysJZ2xvYmFsOgorKwkJQ1JZUFRPX21lbWNtcDsKKyt9IE9QRU5TU0xfMS4wLjE7CisrCisrT1BFTlNTTF8xLjAuMiB7CisrCWdsb2JhbDoKKysJCVNTTF9DVFhfc2V0X2FscG5fcHJvdG9zOworKwkJU1NMX3NldF9hbHBuX3Byb3RvczsKKysJCVNTTF9DVFhfc2V0X2FscG5fc2VsZWN0X2NiOworKwkJU1NMX2dldDBfYWxwbl9zZWxlY3RlZDsKKysJCVNTTF9DVFhfc2V0X2N1c3RvbV9jbGlfZXh0OworKwkJU1NMX0NUWF9zZXRfY3VzdG9tX3Nydl9leHQ7CisrCQlTU0xfQ1RYX3NldF9zcnZfc3VwcF9kYXRhOworKwkJU1NMX0NUWF9zZXRfY2xpX3N1cHBfZGF0YTsKKysJCVNTTF9zZXRfY2VydF9jYjsKKysJCVNTTF9DVFhfdXNlX3NlcnZlcmluZm87CisrCQlTU0xfQ1RYX3VzZV9zZXJ2ZXJpbmZvX2ZpbGU7CisrCQlTU0xfQ1RYX3NldF9jZXJ0X2NiOworKwkJU1NMX0NUWF9nZXQwX3BhcmFtOworKwkJU1NMX2dldDBfcGFyYW07CisrCQlTU0xfY2VydHNfY2xlYXI7CisrCQlEVExTdjFfMl9tZXRob2Q7CisrCQlEVExTdjFfMl9zZXJ2ZXJfbWV0aG9kOworKwkJRFRMU3YxXzJfY2xpZW50X21ldGhvZDsKKysJCURUTFNfbWV0aG9kOworKwkJRFRMU19zZXJ2ZXJfbWV0aG9kOworKwkJRFRMU19jbGllbnRfbWV0aG9kOworKwkJU1NMX0NUWF9nZXRfc3NsX21ldGhvZDsKKysJCVNTTF9DVFhfZ2V0MF9jZXJ0aWZpY2F0ZTsKKysJCVNTTF9DVFhfZ2V0MF9wcml2YXRla2V5OworKwkJU1NMX0NPTVBfc2V0MF9jb21wcmVzc2lvbl9tZXRob2RzOworKwkJU1NMX0NPTVBfZnJlZV9jb21wcmVzc2lvbl9tZXRob2RzOworKwkJU1NMX0NJUEhFUl9maW5kOworKwkJU1NMX2lzX3NlcnZlcjsKKysJCVNTTF9DT05GX0NUWF9uZXc7CisrCQlTU0xfQ09ORl9DVFhfZmluaXNoOworKwkJU1NMX0NPTkZfQ1RYX2ZyZWU7CisrCQlTU0xfQ09ORl9DVFhfc2V0X2ZsYWdzOworKwkJU1NMX0NPTkZfQ1RYX2NsZWFyX2ZsYWdzOworKwkJU1NMX0NPTkZfQ1RYX3NldDFfcHJlZml4OworKwkJU1NMX0NPTkZfQ1RYX3NldF9zc2w7CisrCQlTU0xfQ09ORl9DVFhfc2V0X3NzbF9jdHg7CisrCQlTU0xfQ09ORl9jbWQ7CisrCQlTU0xfQ09ORl9jbWRfYXJndjsKKysJCVNTTF9DT05GX2NtZF92YWx1ZV90eXBlOworKwkJU1NMX3RyYWNlOworKwkJU1NMX0NJUEhFUl9zdGFuZGFyZF9uYW1lOworKwkJU1NMX2dldF90bHNhX3JlY29yZF9ieW5hbWU7CisrCQlBU04xX1RJTUVfZGlmZjsKKysJCUJJT19oZXhfc3RyaW5nOworKwkJQ01TX1JlY2lwaWVudEluZm9fZ2V0MF9wa2V5X2N0eDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2VuY3J5cHQ7CisrCQlDTVNfU2lnbmVySW5mb19nZXQwX3BrZXlfY3R4OworKwkJQ01TX1NpZ25lckluZm9fZ2V0MF9tZF9jdHg7CisrCQlDTVNfU2lnbmVySW5mb19nZXQwX3NpZ25hdHVyZTsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfZ2V0MF9hbGc7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rYXJpX2dldDBfcmVrczsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfZ2V0MF9vcmlnX2lkOworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9vcmlnX2lkX2NtcDsKKysJCUNNU19SZWNpcGllbnRFbmNyeXB0ZWRLZXlfZ2V0MF9pZDsKKysJCUNNU19SZWNpcGllbnRFbmNyeXB0ZWRLZXlfY2VydF9jbXA7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rYXJpX3NldDBfcGtleTsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfZ2V0MF9jdHg7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rYXJpX2RlY3J5cHQ7CisrCQlDTVNfU2hhcmVkSW5mb19lbmNvZGU7CisrCQlESF9jb21wdXRlX2tleV9wYWRkZWQ7CisrCQlkMmlfREh4cGFyYW1zOworKwkJaTJkX0RIeHBhcmFtczsKKysJCURIX2dldF8xMDI0XzE2MDsKKysJCURIX2dldF8yMDQ4XzIyNDsKKysJCURIX2dldF8yMDQ4XzI1NjsKKysJCURIX0tERl9YOV80MjsKKysJCUVDREhfS0RGX1g5XzYyOworKwkJRUNEU0FfTUVUSE9EX25ldzsKKysJCUVDRFNBX01FVEhPRF9mcmVlOworKwkJRUNEU0FfTUVUSE9EX3NldF9hcHBfZGF0YTsKKysJCUVDRFNBX01FVEhPRF9nZXRfYXBwX2RhdGE7CisrCQlFQ0RTQV9NRVRIT0Rfc2V0X3NpZ247CisrCQlFQ0RTQV9NRVRIT0Rfc2V0X3NpZ25fc2V0dXA7CisrCQlFQ0RTQV9NRVRIT0Rfc2V0X3ZlcmlmeTsKKysJCUVDRFNBX01FVEhPRF9zZXRfZmxhZ3M7CisrCQlFQ0RTQV9NRVRIT0Rfc2V0X25hbWU7CisrCQlFVlBfZGVzX2VkZTNfd3JhcDsKKysJCUVWUF9hZXNfMTI4X3dyYXA7CisrCQlFVlBfYWVzXzE5Ml93cmFwOworKwkJRVZQX2Flc18yNTZfd3JhcDsKKysJCUVWUF9hZXNfMTI4X2NiY19obWFjX3NoYTI1NjsKKysJCUVWUF9hZXNfMjU2X2NiY19obWFjX3NoYTI1NjsKKysJCUNSWVBUT18xMjhfd3JhcDsKKysJCUNSWVBUT18xMjhfdW53cmFwOworKwkJT0NTUF9SRVFfQ1RYX25iaW87CisrCQlPQ1NQX1JFUV9DVFhfbmV3OworKwkJT0NTUF9zZXRfbWF4X3Jlc3BvbnNlX2xlbmd0aDsKKysJCU9DU1BfUkVRX0NUWF9pMmQ7CisrCQlPQ1NQX1JFUV9DVFhfbmJpb19kMmk7CisrCQlPQ1NQX1JFUV9DVFhfZ2V0MF9tZW1fYmlvOworKwkJT0NTUF9SRVFfQ1RYX2h0dHA7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfT0FFUF9tZ2YxOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfUEtDUzFfT0FFUF9tZ2YxOworKwkJUlNBX09BRVBfUEFSQU1TX2ZyZWU7CisrCQlSU0FfT0FFUF9QQVJBTVNfaXQ7CisrCQlSU0FfT0FFUF9QQVJBTVNfbmV3OworKwkJU1NMX2dldF9zaWdhbGdzOworKwkJU1NMX2dldF9zaGFyZWRfc2lnYWxnczsKKysJCVNTTF9jaGVja19jaGFpbjsKKysJCVg1MDlfY2hhaW5fdXBfcmVmOworKwkJWDUwOV9odHRwX25iaW87CisrCQlYNTA5X0NSTF9odHRwX25iaW87CisrCQlYNTA5X1JFVk9LRURfZHVwOworKwkJaTJkX3JlX1g1MDlfdGJzOworKwkJWDUwOV9nZXQwX3NpZ25hdHVyZTsKKysJCVg1MDlfZ2V0X3NpZ25hdHVyZV9uaWQ7CisrCQlYNTA5X0NSTF9kaWZmOworKwkJWDUwOV9jaGFpbl9jaGVja19zdWl0ZWI7CisrCQlYNTA5X0NSTF9jaGVja19zdWl0ZWI7CisrCQlYNTA5X2NoZWNrX2hvc3Q7CisrCQlYNTA5X2NoZWNrX2VtYWlsOworKwkJWDUwOV9jaGVja19pcDsKKysJCVg1MDlfY2hlY2tfaXBfYXNjOworKwkJWDUwOV9TVE9SRV9zZXRfbG9va3VwX2NybHNfY2I7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQwX3N0b3JlOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9ob3N0OworKwkJWDUwOV9WRVJJRllfUEFSQU1fYWRkMV9ob3N0OworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X2hvc3RmbGFnczsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX2dldDBfcGVlcm5hbWU7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2VtYWlsOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9pcDsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldDFfaXBfYXNjOworKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0MF9uYW1lOworKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0X2NvdW50OworKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0MDsKKysJCVg1MDlWM19FWFRfZnJlZTsKKysJCUVDX0dST1VQX2dldF9tb250X2RhdGE7CisrCQlFQ19jdXJ2ZV9uaWQybmlzdDsKKysJCUVDX2N1cnZlX25pc3QybmlkOworKwkJUEVNX3dyaXRlX2Jpb19ESHhwYXJhbXM7CisrCQlQRU1fd3JpdGVfREh4cGFyYW1zOworKwkJU1NMX0NUWF9hZGRfY2xpZW50X2N1c3RvbV9leHQ7CisrCQlTU0xfQ1RYX2FkZF9zZXJ2ZXJfY3VzdG9tX2V4dDsKKysJCVNTTF9leHRlbnNpb25fc3VwcG9ydGVkOworKwkJQlVGX3N0cm5sZW47CisrCQlza19kZWVwX2NvcHk7CisrCQlTU0xfdGVzdF9mdW5jdGlvbnM7CisrfSBPUEVOU1NMXzEuMC4xZDsKKysKK0luZGV4OiBvcGVuc3NsLTEuMC4yfmJldGExLm9ic29sZXRlLjAuMDQ5ODQzNjUxNTQ5MDU3NS9lbmdpbmVzL29wZW5zc2wubGQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBvcGVuc3NsLTEuMC4yfmJldGExLm9ic29sZXRlLjAuMDQ5ODQzNjUxNTQ5MDU3NS9lbmdpbmVzL29wZW5zc2wubGQJMjAxNC0wMi0yNCAyMTowMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTAgQEAKKytPUEVOU1NMXzEuMC4wIHsKKysJZ2xvYmFsOgorKwkJYmluZF9lbmdpbmU7CisrCQl2X2NoZWNrOworKwkJT1BFTlNTTF9pbml0OworKwkJT1BFTlNTTF9maW5pc2g7CisrCWxvY2FsOgorKwkJKjsKKyt9OworKworSW5kZXg6IG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvY2Nnb3N0L29wZW5zc2wubGQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBvcGVuc3NsLTEuMC4yfmJldGExLm9ic29sZXRlLjAuMDQ5ODQzNjUxNTQ5MDU3NS9lbmdpbmVzL2NjZ29zdC9vcGVuc3NsLmxkCTIwMTQtMDItMjQgMjE6MDI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDEwIEBACisrT1BFTlNTTF8xLjAuMCB7CisrCWdsb2JhbDoKKysJCWJpbmRfZW5naW5lOworKwkJdl9jaGVjazsKKysJCU9QRU5TU0xfaW5pdDsKKysJCU9QRU5TU0xfZmluaXNoOworKwlsb2NhbDoKKysJCSo7CisrfTsKKysKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaWNlcnRfbWFsYXlzaWEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbjEuMC4yL2Jsb2NrX2RpZ2ljZXJ0X21hbGF5c2lhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0M2JjZDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbjEuMC4yL2Jsb2NrX2RpZ2ljZXJ0X21hbGF5c2lhLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb206IFJhcGhhZWwgR2Vpc3NlcnQgPGdlaXNzZXJ0QGRlYmlhbi5vcmc+CitEZXNjcmlwdGlvbjogbWFrZSBYNTA5X3ZlcmlmeV9jZXJ0IGluZGljYXRlIHRoYXQgYW55IGNlcnRpZmljYXRlIHdob3NlCisgbmFtZSBjb250YWlucyAiRGlnaWNlcnQgU2RuLiBCaGQuIiAoZnJvbSBNYWxheXNpYSkgaXMgcmV2b2tlZC4KK0ZvcndhcmRlZDogbm90LW5lZWRlZAorT3JpZ2luOiB2ZW5kb3IKK0xhc3QtVXBkYXRlOiAyMDExLTExLTA1CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworCitJbmRleDogb3BlbnNzbC0xLjAuMn5iZXRhMS9jcnlwdG8veDUwOS94NTA5X3ZmeS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMn5iZXRhMS5vcmlnL2NyeXB0by94NTA5L3g1MDlfdmZ5LmMJMjAxNC0wMi0yNSAwMDoxNjoxMi40ODgwMjg4NDQgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yfmJldGExL2NyeXB0by94NTA5L3g1MDlfdmZ5LmMJMjAxNC0wMi0yNSAwMDoxNjoxMi40ODQwMjg5MjkgKzAxMDAKK0BAIC05NjQsMTAgKzk2NCwxMSBAQAorIAlmb3IgKGkgPSBza19YNTA5X251bShjdHgtPmNoYWluKSAtIDE7IGkgPj0gMDsgaS0tKQorIAkJeworIAkJeCA9IHNrX1g1MDlfdmFsdWUoY3R4LT5jaGFpbiwgaSk7CistCQkvKiBNYXJrIERpZ2lOb3RhciBjZXJ0aWZpY2F0ZXMgYXMgcmV2b2tlZCwgbm8gbWF0dGVyCistCQkgKiB3aGVyZSBpbiB0aGUgY2hhaW4gdGhleSBhcmUuCisrCQkvKiBNYXJrIGNlcnRpZmljYXRlcyBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgbmFtZXMgYXMKKysJCSAqIHJldm9rZWQsIG5vIG1hdHRlciB3aGVyZSBpbiB0aGUgY2hhaW4gdGhleSBhcmUuCisgCQkgKi8KKy0JCWlmICh4LT5uYW1lICYmIHN0cnN0cih4LT5uYW1lLCAiRGlnaU5vdGFyIikpCisrCQlpZiAoeC0+bmFtZSAmJiAoc3Ryc3RyKHgtPm5hbWUsICJEaWdpTm90YXIiKSB8fAorKwkJCXN0cnN0cih4LT5uYW1lLCAiRGlnaWNlcnQgU2RuLiBCaGQuIikpKQorIAkJCXsKKyAJCQljdHgtPmVycm9yID0gWDUwOV9WX0VSUl9DRVJUX1JFVk9LRUQ7CisgCQkJY3R4LT5lcnJvcl9kZXB0aCA9IGk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbjEuMC4yL2Jsb2NrX2RpZ2lub3Rhci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaW5vdGFyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMWEwYjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbjEuMC4yL2Jsb2NrX2RpZ2lub3Rhci5wYXRjaApAQCAtMCwwICsxLDY3IEBACitGcm9tOiBSYXBoYWVsIEdlaXNzZXJ0IDxnZWlzc2VydEBkZWJpYW4ub3JnPgorRGVzY3JpcHRpb246IG1ha2UgWDUwOV92ZXJpZnlfY2VydCBpbmRpY2F0ZSB0aGF0IGFueSBjZXJ0aWZpY2F0ZSB3aG9zZQorIG5hbWUgY29udGFpbnMgIkRpZ2lOb3RhciIgaXMgcmV2b2tlZC4KK0ZvcndhcmRlZDogbm90LW5lZWRlZAorT3JpZ2luOiB2ZW5kb3IKK0xhc3QtVXBkYXRlOiAyMDExLTA5LTA4CitCdWc6IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjM5NzQ0CitSZXZpZXdlZC1ieTogS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorUmV2aWV3ZWQtYnk6IERyIFN0ZXBoZW4gTiBIZW5zb24gPHNoZW5zb25AZHJoLWNvbnN1bHRhbmN5LmNvLnVrPgorCitUaGlzIGlzIG5vdCBtZWFudCBhcyBmaW5hbCBwYXRjaC4gIAorIAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCisKK0luZGV4OiBvcGVuc3NsLTEuMC4yL2NyeXB0by94NTA5L3g1MDlfdmZ5LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvY3J5cHRvL3g1MDkveDUwOV92ZnkuYworKysrIG9wZW5zc2wtMS4wLjIvY3J5cHRvL3g1MDkveDUwOV92ZnkuYworQEAgLTExOSw2ICsxMTksNyBAQCBzdGF0aWMgaW50IGNoZWNrX3RydXN0KFg1MDlfU1RPUkVfQ1RYICpjCisgc3RhdGljIGludCBjaGVja19yZXZvY2F0aW9uKFg1MDlfU1RPUkVfQ1RYICpjdHgpOworIHN0YXRpYyBpbnQgY2hlY2tfY2VydChYNTA5X1NUT1JFX0NUWCAqY3R4KTsKKyBzdGF0aWMgaW50IGNoZWNrX3BvbGljeShYNTA5X1NUT1JFX0NUWCAqY3R4KTsKKytzdGF0aWMgaW50IGNoZWNrX2NhX2JsYWNrbGlzdChYNTA5X1NUT1JFX0NUWCAqY3R4KTsKKyAKKyBzdGF0aWMgaW50IGdldF9jcmxfc2NvcmUoWDUwOV9TVE9SRV9DVFggKmN0eCwgWDUwOSAqKnBpc3N1ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqcHJlYXNvbnMsIFg1MDlfQ1JMICpjcmwsIFg1MDkgKngpOworQEAgLTQzOCw2ICs0MzksOSBAQCBpbnQgWDUwOV92ZXJpZnlfY2VydChYNTA5X1NUT1JFX0NUWCAqY3R4CisgICAgIGlmICghb2spCisgICAgICAgICBnb3RvIGVuZDsKKyAKKysJb2sgPSBjaGVja19jYV9ibGFja2xpc3QoY3R4KTsKKysJaWYoIW9rKSBnb3RvIGVuZDsKKysKKyAjaWZuZGVmIE9QRU5TU0xfTk9fUkZDMzc3OQorICAgICAvKiBSRkMgMzc3OSBwYXRoIHZhbGlkYXRpb24sIG5vdyB0aGF0IENSTCBjaGVjayBoYXMgYmVlbiBkb25lICovCisgICAgIG9rID0gdjNfYXNpZF92YWxpZGF0ZV9wYXRoKGN0eCk7CitAQCAtOTM4LDYgKzk0MiwyOSBAQCBzdGF0aWMgaW50IGNoZWNrX2NybF90aW1lKFg1MDlfU1RPUkVfQ1RYCisgICAgIHJldHVybiAxOworIH0KKyAKKytzdGF0aWMgaW50IGNoZWNrX2NhX2JsYWNrbGlzdChYNTA5X1NUT1JFX0NUWCAqY3R4KQorKwl7CisrCVg1MDkgKng7CisrCWludCBpOworKwkvKiBDaGVjayBhbGwgY2VydGlmaWNhdGVzIGFnYWluc3QgdGhlIGJsYWNrbGlzdCAqLworKwlmb3IgKGkgPSBza19YNTA5X251bShjdHgtPmNoYWluKSAtIDE7IGkgPj0gMDsgaS0tKQorKwkJeworKwkJeCA9IHNrX1g1MDlfdmFsdWUoY3R4LT5jaGFpbiwgaSk7CisrCQkvKiBNYXJrIERpZ2lOb3RhciBjZXJ0aWZpY2F0ZXMgYXMgcmV2b2tlZCwgbm8gbWF0dGVyCisrCQkgKiB3aGVyZSBpbiB0aGUgY2hhaW4gdGhleSBhcmUuCisrCQkgKi8KKysJCWlmICh4LT5uYW1lICYmIHN0cnN0cih4LT5uYW1lLCAiRGlnaU5vdGFyIikpCisrCQkJeworKwkJCWN0eC0+ZXJyb3IgPSBYNTA5X1ZfRVJSX0NFUlRfUkVWT0tFRDsKKysJCQljdHgtPmVycm9yX2RlcHRoID0gaTsKKysJCQljdHgtPmN1cnJlbnRfY2VydCA9IHg7CisrCQkJaWYgKCFjdHgtPnZlcmlmeV9jYigwLGN0eCkpCisrCQkJCXJldHVybiAwOworKwkJCX0KKysJCX0KKysJcmV0dXJuIDE7CisrCX0KKysKKyBzdGF0aWMgaW50IGdldF9jcmxfc2soWDUwOV9TVE9SRV9DVFggKmN0eCwgWDUwOV9DUkwgKipwY3JsLCBYNTA5X0NSTCAqKnBkY3JsLAorICAgICAgICAgICAgICAgICAgICAgICBYNTA5ICoqcGlzc3VlciwgaW50ICpwc2NvcmUsIHVuc2lnbmVkIGludCAqcHJlYXNvbnMsCisgICAgICAgICAgICAgICAgICAgICAgIFNUQUNLX09GKFg1MDlfQ1JMKSAqY3JscykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZW5naW5lcy1pbnN0YWxsLWluLWxpYmRpci1zc2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2VuZ2luZXMtaW5zdGFsbC1pbi1saWJkaXItc3NsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NzQ2NDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2VuZ2luZXMtaW5zdGFsbC1pbi1saWJkaXItc3NsLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworCitJbmRleDogb3BlbnNzbC0xLjAuMi9lbmdpbmVzL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL2VuZ2luZXMvTWFrZWZpbGUKKysrKyBvcGVuc3NsLTEuMC4yL2VuZ2luZXMvTWFrZWZpbGUKK0BAIC0xMDcsMTMgKzEwNywxMyBAQCBpbnN0YWxsOgorIAlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCisgCUBpZiBbIC1uICIkKFNIQVJFRF9MSUJTKSIgXTsgdGhlbiBcCisgCQlzZXQgLWU7IFwKKy0JCSQoUEVSTCkgJChUT1ApL3V0aWwvbWtkaXItcC5wbCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXM7IFwKKysJCSQoUEVSTCkgJChUT1ApL3V0aWwvbWtkaXItcC5wbCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzOyBcCisgCQlmb3IgbCBpbiAkKExJQk5BTUVTKTsgZG8gXAorIAkJCSggZWNobyBpbnN0YWxsaW5nICQkbDsgXAorIAkJCSAgcGZ4PWxpYjsgXAorIAkJCSAgaWYgZXhwciAiJChQTEFURk9STSkiIDogIkN5Z3dpbiIgPi9kZXYvbnVsbDsgdGhlbiBcCisgCQkJCXNmeD0iLnNvIjsgXAorLQkJCQljcCBjeWckJGwuZGxsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldzsgXAorKwkJCQljcCBjeWckJGwuZGxsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXc7IFwKKyAJCQkgIGVsc2UgXAorIAkJCQljYXNlICIkKENGTEFHUykiIGluIFwKKyAJCQkJKkRTT19CRU9TKikJc2Z4PSIuc28iOzsJXAorQEAgLTEyMiwxMCArMTIyLDEwIEBAIGluc3RhbGw6CisgCQkJCSpEU09fV0lOMzIqKQlzZng9ImVheTMyLmRsbCI7IHBmeD07OwlcCisgCQkJCSopCQlzZng9Ii5iYWQiOzsJXAorIAkJCQllc2FjOyBcCistCQkJCWNwICQkcGZ4JCRsJCRzZnggJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBcCisrCQkJCWNwICQkcGZ4JCRsJCRzZnggJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldzsgXAorIAkJCSAgZmk7IFwKKy0JCQkgIGNobW9kIDU1NSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXc7IFwKKy0JCQkgIG12IC1mICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldyAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCRwZngkJGwkJHNmeCApOyBcCisrCQkJICBjaG1vZCA1NTUgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldzsgXAorKwkJCSAgbXYgLWYgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldyAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQkcGZ4JCRsJCRzZnggKTsgXAorIAkJZG9uZTsgXAorIAlmaQorIAlAdGFyZ2V0PWluc3RhbGw7ICQoUkVDVVJTSVZFX01BS0UpCitJbmRleDogb3BlbnNzbC0xLjAuMi9lbmdpbmVzL2NjZ29zdC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9lbmdpbmVzL2NjZ29zdC9NYWtlZmlsZQorKysrIG9wZW5zc2wtMS4wLjIvZW5naW5lcy9jY2dvc3QvTWFrZWZpbGUKK0BAIC00Nyw3ICs0Nyw3IEBAIGluc3RhbGw6CisgCQlwZng9bGliOyBcCisgCQlpZiBleHByICIkKFBMQVRGT1JNKSIgOiAiQ3lnd2luIiA+L2Rldi9udWxsOyB0aGVuIFwKKyAJCQlzZng9Ii5zbyI7IFwKKy0JCQljcCBjeWckKExJQk5BTUUpLmRsbCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCR7cGZ4fSQoTElCTkFNRSkkJHNmeC5uZXc7IFwKKysJCQljcCBjeWckKExJQk5BTUUpLmRsbCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZngubmV3OyBcCisgCQllbHNlIFwKKyAJCQljYXNlICIkKENGTEFHUykiIGluIFwKKyAJCQkqRFNPX0JFT1MqKSBzZng9Ii5zbyI7OyBcCitAQCAtNTYsMTAgKzU2LDEwIEBAIGluc3RhbGw6CisgCQkJKkRTT19XSU4zMiopIHNmeD0iZWF5MzIuZGxsIjsgcGZ4PTs7IFwKKyAJCQkqKSBzZng9Ii5iYWQiOzsgXAorIAkJCWVzYWM7IFwKKy0JCQljcCAkJHtwZnh9JChMSUJOQU1FKSQkc2Z4ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldzsgXAorKwkJCWNwICQke3BmeH0kKExJQk5BTUUpJCRzZnggJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldzsgXAorIAkJZmk7IFwKKy0JCWNobW9kIDU1NSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCR7cGZ4fSQoTElCTkFNRSkkJHNmeC5uZXc7IFwKKy0JCW12IC1mICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldyAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCR7cGZ4fSQoTElCTkFNRSkkJHNmeDsgXAorKwkJY2htb2QgNTU1ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXMvJCR7cGZ4fSQoTElCTkFNRSkkJHNmeC5uZXc7IFwKKysJCW12IC1mICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXMvJCR7cGZ4fSQoTElCTkFNRSkkJHNmeC5uZXcgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4OyBcCisgCWZpCisgCisgbGlua3M6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2ZpbmQucGwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2ZpbmQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxYjQyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZmluZC5wbApAQCAtMCwwICsxLDU0IEBACit3YXJuICJMZWdhY3kgbGlicmFyeSBAe1soY2FsbGVyKDApKVs2XV19IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBQZXJsIGNvcmUgZGlzdHJpYnV0aW9uIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuIFBsZWFzZSBpbnN0YWxsIGl0IGZyb20gdGhlIENQQU4gZGlzdHJpYnV0aW9uIFBlcmw0OjpDb3JlTGlicy4gSXQgaXMgYmVpbmcgdXNlZCBhdCBAe1soY2FsbGVyKVsxXV19LCBsaW5lIEB7WyhjYWxsZXIpWzJdXX0uXG4iOworCisjIFRoaXMgbGlicmFyeSBpcyBkZXByZWNhdGVkIGFuZCB1bm1haW50YWluZWQuIEl0IGlzIGluY2x1ZGVkIGZvcgorIyBjb21wYXRpYmlsaXR5IHdpdGggUGVybCA0IHNjcmlwdHMgd2hpY2ggbWF5IHVzZSBpdCwgYnV0IGl0IHdpbGwgYmUKKyMgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFBlcmwuIFBsZWFzZSB1c2UgdGhlIEZpbGU6OkZpbmQgbW9kdWxlCisjIGluc3RlYWQuCisKKyMgVXNhZ2U6CisjCXJlcXVpcmUgImZpbmQucGwiOworIworIwkmZmluZCgnL2ZvbycsJy9iYXInKTsKKyMKKyMJc3ViIHdhbnRlZCB7IC4uLiB9CisjCQl3aGVyZSB3YW50ZWQgZG9lcyB3aGF0ZXZlciB5b3Ugd2FudC4gICRkaXIgY29udGFpbnMgdGhlCisjCQljdXJyZW50IGRpcmVjdG9yeSBuYW1lLCBhbmQgJF8gdGhlIGN1cnJlbnQgZmlsZW5hbWUgd2l0aGluCisjCQl0aGF0IGRpcmVjdG9yeS4gICRuYW1lIGNvbnRhaW5zICIkZGlyLyRfIi4gIFlvdSBhcmUgY2QnZWQKKyMJCXRvICRkaXIgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiAgVGhlIGZ1bmN0aW9uIG1heQorIwkJc2V0ICRwcnVuZSB0byBwcnVuZSB0aGUgdHJlZS4KKyMKKyMgRm9yIGV4YW1wbGUsCisjCisjICAgZmluZCAvIC1uYW1lIC5uZnNcKiAtbXRpbWUgKzcgLWV4ZWMgcm0gLWYge30gXDsgLW8gLWZzdHlwZSBuZnMgLXBydW5lCisjCisjIGNvcnJlc3BvbmRzIHRvIHRoaXMKKyMKKyMJc3ViIHdhbnRlZCB7CisjCSAgICAvXlwubmZzLiokLyAmJgorIwkgICAgKCgkZGV2LCRpbm8sJG1vZGUsJG5saW5rLCR1aWQsJGdpZCkgPSBsc3RhdCgkXykpICYmCisjCSAgICBpbnQoLU0gXykgPiA3ICYmCisjCSAgICB1bmxpbmsoJF8pCisjCSAgICB8fAorIwkgICAgKCRubGluayB8fCAoKCRkZXYsJGlubywkbW9kZSwkbmxpbmssJHVpZCwkZ2lkKSA9IGxzdGF0KCRfKSkpICYmCisjCSAgICAkZGV2IDwgMCAmJgorIwkgICAgKCRwcnVuZSA9IDEpOworIwl9CisjCisjIFNldCB0aGUgdmFyaWFibGUgJGRvbnRfdXNlX25saW5rIGlmIHlvdSdyZSB1c2luZyBBRlMsIHNpbmNlIEFGUyBjaGVhdHMuCisKK3VzZSBGaWxlOjpGaW5kICgpOworCisqbmFtZQkJPSAqRmlsZTo6RmluZDo6bmFtZTsKKypwcnVuZQkJPSAqRmlsZTo6RmluZDo6cHJ1bmU7CisqZGlyCQk9ICpGaWxlOjpGaW5kOjpkaXI7CisqdG9wZGlyCQk9ICpGaWxlOjpGaW5kOjp0b3BkaXI7CisqdG9wZGV2CQk9ICpGaWxlOjpGaW5kOjp0b3BkZXY7CisqdG9waW5vCQk9ICpGaWxlOjpGaW5kOjp0b3Bpbm87CisqdG9wbW9kZQk9ICpGaWxlOjpGaW5kOjp0b3Btb2RlOworKnRvcG5saW5rCT0gKkZpbGU6OkZpbmQ6OnRvcG5saW5rOworCitzdWIgZmluZCB7CisgICAgJkZpbGU6OkZpbmQ6OmZpbmQoXCZ3YW50ZWQsIEBfKTsKK30KKworMTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZml4LWNpcGhlci1kZXMtZWRlMy1jZmIxLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9maXgtY2lwaGVyLWRlcy1lZGUzLWNmYjEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkMWVhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZml4LWNpcGhlci1kZXMtZWRlMy1jZmIxLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1RoaXMgcGF0Y2ggYWRkcyB0aGUgZml4IGZvciBvbmUgb2YgdGhlIGNpcGhlcnMgdXNlZCBpbiBvcGVuc3NsLCBuYW1lbHkKK3RoZSBjaXBoZXIgZGVzLWVkZTMtY2ZiMS4gQ29tcGxldGUgYnVnIGxvZyBhbmQgcGF0Y2ggaXMgcHJlc2VudCBoZXJlOgoraHR0cDovL3J0Lm9wZW5zc2wub3JnL1RpY2tldC9EaXNwbGF5Lmh0bWw/aWQ9Mjg2NworCitTaWduZWQtT2ZmLUJ5OiBNdWhhbW1hZCBTaGFrZWVsIDxtdWhhbW1hZF9zaGFrZWVsQG1lbnRvci5jb20+CisKK0luZGV4OiBvcGVuc3NsLTEuMC4yL2NyeXB0by9ldnAvZV9kZXMzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvY3J5cHRvL2V2cC9lX2RlczMuYworKysrIG9wZW5zc2wtMS4wLjIvY3J5cHRvL2V2cC9lX2RlczMuYworQEAgLTIxMSw3ICsyMTEsNyBAQCBzdGF0aWMgaW50IGRlc19lZGUzX2NmYjFfY2lwaGVyKEVWUF9DSVBICisgICAgIHNpemVfdCBuOworICAgICB1bnNpZ25lZCBjaGFyIGNbMV0sIGRbMV07CisgCistICAgIGZvciAobiA9IDA7IG4gPCBpbmw7ICsrbikgeworKyAgICBmb3IgKG4gPSAwOyBuICogOCA8IGlubDsgKytuKSB7CisgICAgICAgICBjWzBdID0gKGluW24gLyA4XSAmICgxIDw8ICg3IC0gbiAlIDgpKSkgPyAweDgwIDogMDsKKyAgICAgICAgIERFU19lZGUzX2NmYl9lbmNyeXB0KGMsIGQsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YShjdHgpLT5rczEsICZkYXRhKGN0eCktPmtzMiwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb2UtbGRmbGFncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb2UtbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTJlMTNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vZS1sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3Blbi1lbWJlZGRlZF0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjAvTWFrZWZpbGUuc2hhcmVkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMC5vcmlnL01ha2VmaWxlLnNoYXJlZAorKysrIG9wZW5zc2wtMS4wLjAvTWFrZWZpbGUuc2hhcmVkCitAQCAtOTIsNyArOTIsNyBAQAorIExJTktfQVBQPQlcCisgICAoICQoU0VUX1gpOyAgIFwKKyAgICAgTElCREVQUz0iJCR7TElCREVQUzotJChMSUJERVBTKX0iOyBcCistICAgIExEQ01EPSIkJHtMRENNRDotJChDQyl9IjsgTERGTEFHUz0iJCR7TERGTEFHUzotJChDRkxBR1MpfSI7IFwKKysgICAgTERDTUQ9IiQke0xEQ01EOi0kKENDKX0iOyBMREZMQUdTPSIkKE9FX0xERkxBR1MpICQke0xERkxBR1M6LSQoQ0ZMQUdTKX0iOyBcCisgICAgIExJQlBBVEg9YGZvciB4IGluICQkTElCREVQUzsgZG8gZWNobyAkJHg7IGRvbmUgfCBzZWQgLWUgJ3MvXiAqLUwvLzt0JyAtZSBkIHwgdW5pcWA7IFwKKyAgICAgTElCUEFUSD1gZWNobyAkJExJQlBBVEggfCBzZWQgLWUgJ3MvIC86L2cnYDsgXAorICAgICBMRF9MSUJSQVJZX1BBVEg9JCRMSUJQQVRIOiQkTERfTElCUkFSWV9QQVRIIFwKK0BAIC0xMDIsNyArMTAyLDcgQEAKKyAgICggJChTRVRfWCk7ICAgXAorICAgICBMSUJERVBTPSIkJHtMSUJERVBTOi0kKExJQkRFUFMpfSI7IFwKKyAgICAgU0hBUkVEQ01EPSIkJHtTSEFSRURDTUQ6LSQoQ0MpfSI7IFwKKy0gICAgU0hBUkVERkxBR1M9IiQke1NIQVJFREZMQUdTOi0kKENGTEFHUykgJChTSEFSRURfTERGTEFHUyl9IjsgXAorKyAgICBTSEFSRURGTEFHUz0iJChPRV9MREZMQUdTKSAkJHtTSEFSRURGTEFHUzotJChDRkxBR1MpICQoU0hBUkVEX0xERkxBR1MpfSI7IFwKKyAgICAgTElCUEFUSD1gZm9yIHggaW4gJCRMSUJERVBTOyBkbyBlY2hvICQkeDsgZG9uZSB8IHNlZCAtZSAncy9eICotTC8vO3QnIC1lIGQgfCB1bmlxYDsgXAorICAgICBMSUJQQVRIPWBlY2hvICQkTElCUEFUSCB8IHNlZCAtZSAncy8gLzovZydgOyBcCisgICAgIExEX0xJQlJBUllfUEFUSD0kJExJQlBBVEg6JCRMRF9MSUJSQVJZX1BBVEggXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLTEuMC4yYS14MzItYXNtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLTEuMC4yYS14MzItYXNtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNWJmYTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtMS4wLjJhLXgzMi1hc20ucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAoraHR0cHM6Ly9ydC5vcGVuc3NsLm9yZy9UaWNrZXQvRGlzcGxheS5odG1sP2lkPTM3NTkmdXNlcj1ndWVzdCZwYXNzPWd1ZXN0CisKK0Zyb20gNjI1N2Q1OWIzYTY4ZDJmZWI5ZDY0MzE3YTFjNTU2ZGMzODEzZWU2MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KK0RhdGU6IFNhdCwgMjEgTWFyIDIwMTUgMDY6MDE6MjUgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gY3J5cHRvOiB1c2UgYmlnaW50IGluIHg4Ni02NCBwZXJsCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KKworV2hlbiBidWlsZGluZyBvbiB4MzIgc3lzdGVtcyB3aGVyZSB0aGUgZGVmYXVsdCB0eXBlIGlzIDMyYml0LCBtYWtlIHN1cmUKK3dlIGNhbiB0cmFuc3BhcmVudGx5IHJlcHJlc2VudCA2NGJpdCBpbnRlZ2Vycy4gIE90aGVyd2lzZSB3ZSBlbmQgdXAgd2l0aAorYnVpbGQgZXJyb3JzIGxpa2U6CisvdXNyL2Jpbi9wZXJsIGFzbS9naGFzaC14ODZfNjQucGwgZWxmID4gZ2hhc2gteDg2XzY0LnMKK0ludGVnZXIgb3ZlcmZsb3cgaW4gaGV4YWRlY2ltYWwgbnVtYmVyIGF0IGFzbS8uLi8uLi9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbCBsaW5lIDIwMSwgPD4gbGluZSA4OTAuCisuLi4KK2doYXNoLXg4Nl82NC5zOiBBc3NlbWJsZXIgbWVzc2FnZXM6CitnaGFzaC14ODZfNjQuczo4OTA6IEVycm9yOiBqdW5rICcuMTU0NzMzNTU0Nzk5OTVlKzE5JyBhZnRlciBleHByZXNzaW9uCisKK1dlIGRvbid0IGVuYWJsZSB0aGlzIGdsb2JhbGx5IGFzIHRoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlIHdlJ2QgZ2V0CiszMmJpdCB2YWx1ZXMgaW50ZXJwcmV0ZWQgYXMgdW5zaWduZWQgd2hlbiB3ZSBuZWVkIHRoZW0gYXMgc2lnbmVkLgorCitSZXBvcnRlZC1ieTogQmVydHJhbmQgSmFjcXVpbiA8YmVydHJhbmRAamFjcXVpbi5iemg+CitVUkw6IGh0dHBzOi8vYnVncy5nZW50b28ub3JnLzU0MjYxOAorLS0tCisgY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsIGIvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsCitpbmRleCBhYWU4Mjg4Li4wYmY5Nzc0IDEwMDc1NQorLS0tIGEvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsCisrKysgYi9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwKK0BAIC0xOTUsNiArMTk1LDEwIEBAIG15ICVnbG9iYWxzOworICAgICBzdWIgb3V0IHsKKyAgICAgCW15ICRzZWxmID0gc2hpZnQ7CisgCisrCSMgV2hlbiBidWlsZGluZyBvbiB4MzIgQUJJcywgdGhlIGV4cGFuZGVkIGhleCB2YWx1ZSBtaWdodCBiZSB0b28KKysJIyBiaWcgdG8gZml0IGludG8gMzJiaXRzLiAgRW5hYmxlIHRyYW5zcGFyZW50IDY0Yml0IHN1cHBvcnQgaGVyZQorKwkjIHNvIHdlIGNhbiBzYWZlbHkgcHJpbnQgaXQgb3V0LgorKwl1c2UgYmlnaW50OworIAlpZiAoJGdhcykgeworIAkgICAgIyBTb2xhcmlzIC91c3IvY2NzL2Jpbi9hcyBjYW4ndCBoYW5kbGUgbXVsdGlwbGljYXRpb25zCisgCSAgICAjIGluICRzZWxmLT57dmFsdWV9CistLSAKKzIuMy4zCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1hdm9pZC1OVUxMLXBvaW50ZXItZGVyZWZlcmVuY2UtaW4tRVZQX0RpZ2VzdEluaXRfZXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtYXZvaWQtTlVMTC1wb2ludGVyLWRlcmVmZXJlbmNlLWluLUVWUF9EaWdlc3RJbml0X2V4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYmM4Y2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtYXZvaWQtTlVMTC1wb2ludGVyLWRlcmVmZXJlbmNlLWluLUVWUF9EaWdlc3RJbml0X2V4LnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK29wZW5zc2w6IGF2b2lkIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBFVlBfRGlnZXN0SW5pdF9leCgpCisKK1dlIHNob3VsZCBhdm9pZCBhY2Nlc3NpbmcgdGhlIHR5cGUgcG9pbnRlciBpZiBpdCdzIE5VTEwsCit0aGlzIGNvdWxkIGhhcHBlbiBpZiBjdHgtPmRpZ2VzdCBpcyBub3QgTlVMTC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKK2h0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9vcGVuc3NsLWRldkBvcGVuc3NsLm9yZy9tc2czMjg2MC5odG1sCisKK1NpZ25lZC1vZmYtYnk6IFh1ZmVuZyBaaGFuZyA8eHVmZW5nLnpoYW5nQHdpbmRyaXZlci5jb20+CistLS0KK0luZGV4OiBvcGVuc3NsLTEuMC4yL2NyeXB0by9ldnAvZGlnZXN0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvY3J5cHRvL2V2cC9kaWdlc3QuYworKysrIG9wZW5zc2wtMS4wLjIvY3J5cHRvL2V2cC9kaWdlc3QuYworQEAgLTIwOCw3ICsyMDgsNyBAQCBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjCisgICAgICAgICByZXR1cm4gMDsKKyAgICAgfQorICNlbmRpZgorLSAgICBpZiAoY3R4LT5kaWdlc3QgIT0gdHlwZSkgeworKyAgICBpZiAodHlwZSAmJiAoY3R4LT5kaWdlc3QgIT0gdHlwZSkpIHsKKyAgICAgICAgIGlmIChjdHgtPmRpZ2VzdCAmJiBjdHgtPmRpZ2VzdC0+Y3R4X3NpemUpCisgICAgICAgICAgICAgT1BFTlNTTF9mcmVlKGN0eC0+bWRfZGF0YSk7CisgICAgICAgICBjdHgtPmRpZ2VzdCA9IHR5cGU7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtZml4LWRlcy5wb2QtZXJyb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtZml4LWRlcy5wb2QtZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU0OTcyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1maXgtZGVzLnBvZC1lcnJvci5wYXRjaApAQCAtMCwwICsxLDE5IEBACitvcGVuc3NsOiBGaXggcG9kMm1hbiBkZXMucG9kIGVycm9yIG9uIFVidW50dSAxMi4wNAorCitUaGlzIGlzIGEgZm9ybWF0dGluZyBmaXgsICc9YmFjaycgaXMgcmVxdWlyZWQgYmVmb3JlCisnPWhlYWQxJyBvbiBVYnVudHUgMTIuMDQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQmFvZ2VuIFNoYW5nIDxiYW9nZW4uc2hhbmdAd2luZHJpdmVyLmNvbT4KK2RpZmYgLXVycE4gYV9vcmlnaW4vZGVzLnBvZCBiX21vZGlmeS9kZXMucG9kCistLS0gYV9vcmlnaW4vY3J5cHRvL2Rlcy9kZXMucG9kCTIwMTMtMDgtMTUgMTU6MDI6NTYuMjExNjc0NTg5ICswODAwCisrKysgYl9tb2RpZnkvY3J5cHRvL2Rlcy9kZXMucG9kCTIwMTMtMDgtMTUgMTU6MDQ6MTQuNDM5Njc0NTgwICswODAwCitAQCAtMTgxLDYgKzE4MSw4IEBAIHRoZSB1dWVuY29kZWQgZmlsZSB0byBlbWJlZCBpbiB0aGUgYmVnaW4KKyBvdXRwdXQuICBJZiB0aGVyZSBpcyBubyBuYW1lIHNwZWNpZmllZCBhZnRlciB0aGUgQjwtdT4sIHRoZSBuYW1lIHRleHQuZGVzCisgd2lsbCBiZSBlbWJlZGRlZCBpbiB0aGUgaGVhZGVyLgorIAorKz1iYWNrCisrCisgPWhlYWQxIFNFRSBBTFNPCisgCisgcHMoMSksCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2xfZml4X2Zvcl94MzIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2xfZml4X2Zvcl94MzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JjZTMyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbF9maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDM5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUmVjZWl2ZWQgZnJvbSBIIEogTGl1IEAgSW50ZWwKK01ha2UgdGhlIGFzc2VtYmx5IHN5bnRheCBjb21wYXRpYmxlIHdpdGggeDMyIGdjYy4gT3RoZXdpc2UgeDMyIGdjYyB0aHJvd3MgZXJyb3JzLgorU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8wNy8xMworCitwb3J0ZWQgdGhlIHBhdGNoIHRvIHRoZSAxLjAuMGUgdmVyc2lvbgorU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8wMQorSW5kZXg6IG9wZW5zc2wtMS4wLjIvY3J5cHRvL2JuL2JuLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvY3J5cHRvL2JuL2JuLmgKKysrKyBvcGVuc3NsLTEuMC4yL2NyeXB0by9ibi9ibi5oCitAQCAtMTczLDYgKzE3MywxMyBAQCBleHRlcm4gIkMiIHsKKyAjICBlbmRpZgorICMgZW5kaWYKKyAKKysvKiBBZGRyZXNzIHR5cGUuICAqLworKyNpZmRlZiBfV0lONjQKKysjZGVmaW5lIEJOX0FERFIgdW5zaWduZWQgbG9uZyBsb25nCisrI2Vsc2UKKysjZGVmaW5lIEJOX0FERFIgdW5zaWduZWQgbG9uZworKyNlbmRpZgorKworIC8qCisgICogYXNzdW1pbmcgbG9uZyBpcyA2NGJpdCAtIHRoaXMgaXMgdGhlIERFQyBBbHBoYSB1bnNpZ25lZCBsb25nIGxvbmcgaXMgb25seQorICAqIDY0IGJpdHMgOi0oLCBkb24ndCBkZWZpbmUgQk5fTExPTkcgZm9yIHRoZSBERUMgQWxwaGEKK0luZGV4OiBvcGVuc3NsLTEuMC4yL2NyeXB0by9ibi9ibl9leHAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8vYm4vYm5fZXhwLmMKKysrKyBvcGVuc3NsLTEuMC4yL2NyeXB0by9ibi9ibl9leHAuYworQEAgLTYzOCw3ICs2MzgsNyBAQCBzdGF0aWMgaW50IE1PRF9FWFBfQ1RJTUVfQ09QWV9GUk9NX1BSRUJVCisgICogbXVsdGlwbGUuCisgICovCisgI2RlZmluZSBNT0RfRVhQX0NUSU1FX0FMSUdOKHhfKSBcCistICAgICAgICAoKHVuc2lnbmVkIGNoYXIqKSh4XykgKyAoTU9EX0VYUF9DVElNRV9NSU5fQ0FDSEVfTElORV9XSURUSCAtICgoKHNpemVfdCkoeF8pKSAmIChNT0RfRVhQX0NUSU1FX01JTl9DQUNIRV9MSU5FX01BU0spKSkpCisrCSgodW5zaWduZWQgY2hhciopKHhfKSArIChNT0RfRVhQX0NUSU1FX01JTl9DQUNIRV9MSU5FX1dJRFRIIC0gKCgoQk5fQUREUikoeF8pKSAmIChNT0RfRVhQX0NUSU1FX01JTl9DQUNIRV9MSU5FX01BU0spKSkpCisgCisgLyoKKyAgKiBUaGlzIHZhcmlhbnQgb2YgQk5fbW9kX2V4cF9tb250KCkgdXNlcyBmaXhlZCB3aW5kb3dzIGFuZCB0aGUgc3BlY2lhbApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9wdGVzdC1kZXBzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9wdGVzdC1kZXBzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNmQxNzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3B0ZXN0LWRlcHMucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorUmVtb3ZlIE1ha2VmaWxlIGRlcGVuZGVuY2llcyBmb3IgdGVzdCB0YXJnZXRzCisKK1RoZXNlIGFyZSBwcm9iYWJseSBoZXJlIGJlY2F1c2UgdGhlIGV4ZWN1dGFibGVzIGFyZW4ndCBhbHdheXMgYnVpbHQgZm9yCitvdGhlciBwbGF0Zm9ybXMgKGUuZy4gV2luZG93cyk7IGhvd2V2ZXIgd2UgY2FuIHNhZmVseSBhc3N1bWUgdGhleSdsbAorYWx3YXlzIGJlIHRoZXJlLiBOb25lIG9mIHRoZSBvdGhlciB0ZXN0IHRhcmdldHMgaGF2ZSBzdWNoIGRlcGVuZGVuY2llcworYW5kIGlmIHdlIGRvbid0IHJlbW92ZSB0aGVtLCBtYWtlIHRyaWVzIHRvIHJlYnVpbGQgdGhlIGV4ZWN1dGFibGVzIGFuZAorZmFpbHMgZHVyaW5nIHJ1bi1wdGVzdC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWddCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCitJbmRleDogb3BlbnNzbC0xLjAuMi90ZXN0L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL3Rlc3QvTWFrZWZpbGUKKysrKyBvcGVuc3NsLTEuMC4yL3Rlc3QvTWFrZWZpbGUKK0BAIC0zMzAsNyArMzMwLDcgQEAgdGVzdF9jbXM6IC4uL2FwcHMvb3BlbnNzbCQoRVhFX0VYVCkgY21zLQorIAlAZWNobyAiQ01TIGNvbnNpc3RlbmN5IHRlc3QiCisgCSQoUEVSTCkgY21zLXRlc3QucGwKKyAKKy10ZXN0X3NycDogJChTUlBURVNUKSQoRVhFX0VYVCkKKyt0ZXN0X3NycDoKKyAJQGVjaG8gIlRlc3QgU1JQIgorIAkuLi91dGlsL3NobGliX3dyYXAuc2ggLi9zcnB0ZXN0CisgCitAQCAtMzQyLDcgKzM0Miw3IEBAIHRlc3RfdjNuYW1lOiAkKFYzTkFNRVRFU1QpJChFWEVfRVhUKQorIAlAZWNobyAiVGVzdCBYNTA5djNfY2hlY2tfKiIKKyAJLi4vdXRpbC9zaGxpYl93cmFwLnNoIC4vJChWM05BTUVURVNUKQorIAorLXRlc3RfaGVhcnRiZWF0OiAkKEhFQVJUQkVBVFRFU1QpJChFWEVfRVhUKQorK3Rlc3RfaGVhcnRiZWF0OgorIAkuLi91dGlsL3NobGliX3dyYXAuc2ggLi8kKEhFQVJUQkVBVFRFU1QpCisgCisgdGVzdF9jb25zdGFudF90aW1lOiAkKENPTlNUVElNRVRFU1QpJChFWEVfRVhUKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYjIwZmNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9ydW4tcHRlc3QKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK21ha2UgLWsgcnVudGVzdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9zaGFyZWQtbGlicy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvc2hhcmVkLWxpYnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdjYTBhMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvc2hhcmVkLWxpYnMucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogb3BlbnNzbC0xLjAuMWUvY3J5cHRvL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMWUub3JpZy9jcnlwdG8vTWFrZWZpbGUKKysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vTWFrZWZpbGUKK0BAIC0xMDgsNyArMTA4LDcgQEAgJChMSUIpOgkkKExJQk9CSikKKyAKKyBzaGFyZWQ6IGJ1aWxkaW5mLmggbGliIHN1YmRpcnMKKyAJaWYgWyAtbiAiJChTSEFSRURfTElCUykiIF07IHRoZW4gXAorLQkJKGNkIC4uOyAkKE1BS0UpICQoU0hBUkVEX0xJQikpOyBcCisrCQkoY2QgLi47ICQoTUFLRSkgLWUgJChTSEFSRURfTElCKSk7IFwKKyAJZmkKKyAKKyBsaWJzOgorSW5kZXg6IG9wZW5zc2wtMS4wLjFlL01ha2VmaWxlLm9yZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjFlLm9yaWcvTWFrZWZpbGUub3JnCisrKysgb3BlbnNzbC0xLjAuMWUvTWFrZWZpbGUub3JnCitAQCAtMzEwLDcgKzMxMCw3IEBAIGxpYmNyeXB0byQoU0hMSUJfRVhUKTogbGliY3J5cHRvLmEgZmlwc18KKyAKKyBsaWJzc2wkKFNITElCX0VYVCk6IGxpYmNyeXB0byQoU0hMSUJfRVhUKSBsaWJzc2wuYQorIAlAaWYgWyAiJChTSExJQl9UQVJHRVQpIiAhPSAiIiBdOyB0aGVuIFwKKy0JCSQoTUFLRSkgU0hMSUJESVJTPXNzbCBTSExJQkRFUFM9Jy1sY3J5cHRvJyBidWlsZC1zaGFyZWQ7IFwKKysJCSQoTUFLRSkgLWUgU0hMSUJESVJTPXNzbCBTSExJQkRFUFM9Jy1sY3J5cHRvJyBidWlsZC1zaGFyZWQ7IFwKKyAJZWxzZSBcCisgCQllY2hvICJUaGVyZSdzIG5vIHN1cHBvcnQgZm9yIHNoYXJlZCBsaWJyYXJpZXMgb24gdGhpcyBwbGF0Zm9ybSIgPiYyOyBcCisgCQlleGl0IDE7IFwKK0luZGV4OiBvcGVuc3NsLTEuMC4xZS9zc2wvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4xZS5vcmlnL3NzbC9NYWtlZmlsZQorKysrIG9wZW5zc2wtMS4wLjFlL3NzbC9NYWtlZmlsZQorQEAgLTYyLDcgKzYyLDcgQEAgbGliOgkkKExJQk9CSikKKyAKKyBzaGFyZWQ6IGxpYgorIAlpZiBbIC1uICIkKFNIQVJFRF9MSUJTKSIgXTsgdGhlbiBcCistCQkoY2QgLi47ICQoTUFLRSkgJChTSEFSRURfTElCKSk7IFwKKysJCShjZCAuLjsgJChNQUtFKSAtZSAkKFNIQVJFRF9MSUIpKTsgXAorIAlmaQorIAorIGZpbGVzOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbF8xLjAuMmQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsXzEuMC4yZC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmQ4ZGNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbF8xLjAuMmQuYmIKQEAgLTAsMCArMSw1NyBAQAorcmVxdWlyZSBvcGVuc3NsLmluYworCisjIEZvciB0YXJnZXQgc2lkZSB2ZXJzaW9ucyBvZiBvcGVuc3NsIGVuYWJsZSBzdXBwb3J0IGZvciBPQ0YgTGludXggZHJpdmVyCisjIGlmIHRoZXkgYXJlIGF2YWlsYWJsZS4KK0RFUEVORFMgKz0gImNyeXB0b2Rldi1saW51eCIKKworQ0ZMQUcgKz0gIi1ESEFWRV9DUllQVE9ERVYgLURVU0VfQ1JZUFRPREVWX0RJR0VTVFMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWY5YThmOTY4MTA3MzQ1ZTBiNzVhYThjMmVjYWE3ZWM4IgorCitleHBvcnQgRElSUyA9ICJjcnlwdG8gc3NsIGFwcHMgZW5naW5lcyIKK2V4cG9ydCBPRV9MREZMQUdTPSIke0xERkxBR1N9IgorCitTUkNfVVJJICs9ICJmaWxlOi8vY29uZmlndXJlLXRhcmdldHMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3NoYXJlZC1saWJzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9vZS1sZGZsYWdzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9lbmdpbmVzLWluc3RhbGwtaW4tbGliZGlyLXNzbC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuMS4wLjIvYmxvY2tfZGlnaW5vdGFyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4xLjAuMi9ibG9ja19kaWdpY2VydF9tYWxheXNpYS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuL2NhLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vY19yZWhhc2gtY29tcGF0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vZGViaWFuLXRhcmdldHMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9tYW4tZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vbWFuLXNlY3Rpb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9uby1ycGF0aC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuL25vLXN5bWJvbGljLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vcGljLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vdmVyc2lvbi1zY3JpcHQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL29wZW5zc2xfZml4X2Zvcl94MzIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1jaXBoZXItZGVzLWVkZTMtY2ZiMS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vb3BlbnNzbC1hdm9pZC1OVUxMLXBvaW50ZXItZGVyZWZlcmVuY2UtaW4tRVZQX0RpZ2VzdEluaXRfZXgucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2ZpbmQucGwgXAorICAgICAgICAgICAgZmlsZTovL29wZW5zc2wtZml4LWRlcy5wb2QtZXJyb3IucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL01ha2VmaWxlcy1wdGVzdC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcHRlc3QtZGVwcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgIGZpbGU6Ly9jcnlwdG9fdXNlX2JpZ2ludF9pbl94ODYtNjRfcGVybC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vb3BlbnNzbC0xLjAuMmEteDMyLWFzbS5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjM4ZGQ2MTliMmU3N2NiYWM2OWI5OWY1MmEwNTNkMjVhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY3MWMzNjQ4Nzc4NTYyOGE3MDMzNzRjNjUyYWQyY2ViZWE0NWZhOTIwYWU1NjgxNTE1ZGYyNWQ5ZjJjOWE4YzgiCisKK1BBQ0tBR0VTID0rICIgXAorCSR7UE59LWVuZ2luZXMgXAorCSR7UE59LWVuZ2luZXMtZGJnIFwKKwkiCisKK0ZJTEVTXyR7UE59LWVuZ2luZXMgPSAiJHtsaWJkaXJ9L3NzbC9lbmdpbmVzLyouc28gJHtsaWJkaXJ9L2VuZ2luZXMiCitGSUxFU18ke1BOfS1lbmdpbmVzLWRiZyA9ICIke2xpYmRpcn0vc3NsL2VuZ2luZXMvLmRlYnVnIgorCitQQVJBTExFTF9NQUtFID0gIiIKK1BBUkFMTEVMX01BS0VJTlNUID0gIiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgIGNwICR7V09SS0RJUn0vZmluZC5wbCAke1N9L3V0aWwvZmluZC5wbAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzhhZjMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC5pbmMKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJSUEMgcHJvZ3JhbSBudW1iZXIgbWFwcGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL25laWwuYnJvd24ubmFtZS9wb3J0bWFwLyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9wb3J0bWFwLmM7YmVnaW5saW5lPTI7ZW5kbGluZT0zMTttZDU9NTFmZjY3ZTY2ZWM4NGIyMDA5YjAxN2IxZjk0YWZiZjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZnJvbV9sb2NhbC5jO2JlZ2lubGluZT05O2VuZGxpbmU9MzU7bWQ1PTFiZWM5MzhhMjI2OGI4YjQyM2M1ODgwMWFjZTNhZGMxIgorCitJTklUU0NSSVBUX05BTUUgPSAicG9ydG1hcCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDEwIDIgMyA0IDUgLiBzdG9wIDMyIDAgMSA2IC4iCisKK2luaGVyaXQgdXBkYXRlLXJjLmQgc3lzdGVtZAorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAicG9ydG1hcC5zZXJ2aWNlIgorCitQQUNLQUdFUyA9KyAicG9ydG1hcC11dGlscyIKK0ZJTEVTX3BvcnRtYXAtdXRpbHMgPSAiJHtiYXNlX3NiaW5kaXJ9L3BtYXBfc2V0ICR7YmFzZV9zYmluZGlyfS9wbWFwX2R1bXAiCitGSUxFU18ke1BOfS1kb2MgKz0gIiR7ZG9jZGlyfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvZGVzdGRpci1uby1zdHJpcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvZGVzdGRpci1uby1zdHJpcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmJmNzg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9kZXN0ZGlyLW5vLXN0cmlwLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworRnJvbTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorRGF0ZTogU3VuLCAxMyBNYXkgMjAwNyAyMToxNToxMiArMDAwMCAoLTA0MDApCitTdWJqZWN0OiByZXNwZWN0IERFU1RESVIgYW5kIGRvbnQgdXNlIC1zIHdpdGggaW5zdGFsbAorWC1HaXQtVXJsOiBodHRwOi8vbmVpbC5icm93bi5uYW1lL2dpdD9wPXBvcnRtYXA7YT1jb21taXRkaWZmX3BsYWluO2g9NjAzYzU5Yjk3OGMwNGRmMjM1NGY2OGQ0YTJkYzY3NmE3NThmZjQ2ZAorCityZXNwZWN0IERFU1RESVIgYW5kIGRvbnQgdXNlIC1zIHdpdGggaW5zdGFsbAorCiskKERFU1RESVIpIGlzIHRoZSBzdGFuZGFyZCBmb3IgaW5zdGFsbGluZyBpbnRvIG90aGVyIHRyZWVzLCBub3QgJChCQVNFRElSKSAuLi4KK3NvIEkndmUgY29udmVydGVkIHRoZSBNYWtlZmlsZSB0byB1c2UgdGhhdC4gIEkndmUgYWxzbyBsZWZ0IGluICQoQkFTRURJUikgYXMgYQorZGVmYXVsdCB0byBzdXBwb3J0IG9sZCBpbnN0YWxsczsgbm90IHN1cmUgaWYgeW91J2QganVzdCBjdXQgaXQuCisKK1N0cmlwcGluZyBzaG91bGQgYmUgbGVmdCB0byB0aGUgcGVyc29uIHRvIGhhbmRsZSwgbm90IGF1dG9tYXRpY2FsbHkgZG9uZSBieQordGhlIGluc3RhbGwgc3RlcC4gIEFsc28sIGBpbnN0YWxsIC1zYCBhbHdheXMgY2FsbHMgYHN0cmlwYCB3aGljaCBpcword3JvbmcvdW5kZXNpcmVkIGluIGNyb3NzLWNvbXBpbGluZyBzY2VuYXJpb3MuCisKK1NpZ25lZC1vZmYtYnk6IE1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KK1NpZ25lZC1vZmYtYnk6IE5laWwgQnJvd24gPG5laWxiQHN1c2UuZGU+CistLS0KKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDllOWE0YjQuLjUzNDM0MjggMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0xMzUsMTMgKzEzNSwxNCBAQCBmcm9tX2xvY2FsOiBDUFBGTEFHUyArPSAtRFRFU1QKKyBwb3J0bWFwLm1hbiA6IHBvcnRtYXAuOAorIAlzZWQgJChNQU5fU0VEKSA8IHBvcnRtYXAuOCA+IHBvcnRtYXAubWFuCisgCisrREVTVERJUiA9ICQoQkFTRURJUikKKyBpbnN0YWxsOiBhbGwKKy0JaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gMDc1NSAtcyBwb3J0bWFwICR7QkFTRURJUn0vc2JpbgorLQlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNzU1IC1zIHBtYXBfZHVtcCAke0JBU0VESVJ9L3NiaW4KKy0JaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gMDc1NSAtcyBwbWFwX3NldCAke0JBU0VESVJ9L3NiaW4KKy0JaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gMDY0NCBwb3J0bWFwLm1hbiAke0JBU0VESVJ9L3Vzci9zaGFyZS9tYW4vbWFuOC9wb3J0bWFwLjgKKy0JaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gMDY0NCBwbWFwX2R1bXAuOCAke0JBU0VESVJ9L3Vzci9zaGFyZS9tYW4vbWFuOAorLQlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IHBtYXBfc2V0LjggJHtCQVNFRElSfS91c3Ivc2hhcmUvbWFuL21hbjgKKysJaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gMDc1NSBwb3J0bWFwICQoREVTVERJUikvc2JpbgorKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNzU1IHBtYXBfZHVtcCAkKERFU1RESVIpL3NiaW4KKysJaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gMDc1NSBwbWFwX3NldCAkKERFU1RESVIpL3NiaW4KKysJaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gMDY0NCBwb3J0bWFwLm1hbiAkKERFU1RESVIpL3Vzci9zaGFyZS9tYW4vbWFuOC9wb3J0bWFwLjgKKysJaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gMDY0NCBwbWFwX2R1bXAuOCAkKERFU1RESVIpL3Vzci9zaGFyZS9tYW4vbWFuOAorKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IHBtYXBfc2V0LjggJChERVNURElSKS91c3Ivc2hhcmUvbWFuL21hbjgKKyAKKyBjbGVhbjoKKyAJcm0gLWYgKi5vIHBvcnRtYXAgcG1hcF9kdW1wIHBtYXBfc2V0IGZyb21fbG9jYWwgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9wb3J0bWFwLmluaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3BvcnRtYXAuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MjFhYTE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9wb3J0bWFwLmluaXQKQEAgLTAsMCArMSw2NyBAQAorIyEvYmluL3NoCisjCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBwb3J0bWFwCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkbmV0d29yaworIyBSZXF1aXJlZC1TdG9wOiAgICAgJG5ldHdvcmsKKyMgRGVmYXVsdC1TdGFydDogICAgIFMgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IFRoZSBSUEMgcG9ydG1hcHBlcgorIyBEZXNjcmlwdGlvbjogICAgICAgUG9ydG1hcCBpcyBhIHNlcnZlciB0aGF0IGNvbnZlcnRzIFJQQyAoUmVtb3RlCisjICAgICAgICAgICAgICAgICAgICBQcm9jZWR1cmUgQ2FsbCkgcHJvZ3JhbSBudW1iZXJzIGludG8gREFSUEEKKyMgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIHBvcnQgbnVtYmVycy4gSXQgbXVzdCBiZSBydW5uaW5nIGluCisjICAgICAgICAgICAgICAgICAgICBvcmRlciB0byBtYWtlIFJQQyBjYWxscy4gU2VydmljZXMgdGhhdCB1c2UKKyMgICAgICAgICAgICAgICAgICAgIFJQQyBpbmNsdWRlIE5GUyBhbmQgTklTLgorIyMjIEVORCBJTklUIElORk8KKwordGVzdCAtZiAvc2Jpbi9wb3J0bWFwIHx8IGV4aXQgMAorCitjYXNlICIkMSIgaW4KKyAgICBzdGFydCkKKwllY2hvICJTdGFydGluZyBwb3J0bWFwIGRhZW1vbi4uLiIKKyAgICAgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tZXhlYyAvc2Jpbi9wb3J0bWFwCisKKwlpZiBbIC1mIC92YXIvcnVuL3BvcnRtYXAudXBncmFkZS1zdGF0ZSBdOyB0aGVuCisgICAgICAgICAgZWNobyAiUmVzdG9yaW5nIG9sZCBSUEMgc2VydmljZSBpbmZvcm1hdGlvbi4uLiIKKyAgICAgICAgICBzbGVlcCAxICMgbmVlZHMgYSBzaG9ydCBwYXVzZSBvciBwbWFwX3NldCB3b24ndCB3b3JrLiA6KAorCSAgcG1hcF9zZXQgPC92YXIvcnVuL3BvcnRtYXAudXBncmFkZS1zdGF0ZQorCSAgcm0gLWYgL3Zhci9ydW4vcG9ydG1hcC51cGdyYWRlLXN0YXRlCisgICAgICAgICAgZWNobyAiZG9uZS4iCisgICAgICAgIGZpCisKKwk7OworICAgIHN0b3ApCisgICAgICAgIGVjaG8gIlN0b3BwaW5nIHBvcnRtYXAgZGFlbW9uLi4uIgorICAgICAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLWV4ZWMgL3NiaW4vcG9ydG1hcAorCTs7CisgICAgcmVsb2FkKQorCTs7CisgICAgZm9yY2UtcmVsb2FkKQorICAgICAgICAkMCByZXN0YXJ0CisJOzsKKyAgICByZXN0YXJ0KQorCSMgcG1hcF9kdW1wIGFuZCBwbWFwX3NldCBtYXkgYmUgaW4gYSBkaWZmZXJlbnQgcGFja2FnZSBhbmQgbm90IGluc3RhbGxlZC4uLgorCWlmIFsgLWYgL3NiaW4vcG1hcF9kdW1wIC1hIC1mIC9zYmluL3BtYXBfc2V0IF07IHRoZW4KKwkJZG9fc3RhdGU9MQorCWVsc2UKKwkJZG9fc3RhdGU9MAorCWZpCisJWyAkZG9fc3RhdGUgLWVxIDEgXSAmJiBwbWFwX2R1bXAgPi92YXIvcnVuL3BvcnRtYXAuc3RhdGUKKyAgICAgICAgJDAgc3RvcAorICAgICAgICAkMCBzdGFydAorCWlmIFsgJGRvX3N0YXRlIC1lcSAxIF07IHRoZW4KKwkgIGlmIFsgISAtZiAvdmFyL3J1bi9wb3J0bWFwLnVwZ3JhZGUtc3RhdGUgXTsgdGhlbgorICAgICAgICAgICAgc2xlZXAgMQorCSAgICBwbWFwX3NldCA8L3Zhci9ydW4vcG9ydG1hcC5zdGF0ZQorCSAgZmkKKwkgIHJtIC1mIC92YXIvcnVuL3BvcnRtYXAuc3RhdGUKKwlmaQorCTs7CisgICAgKikKKwllY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvcG9ydG1hcCB7c3RhcnR8c3RvcHxyZWxvYWR8cmVzdGFydH0iCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvcG9ydG1hcC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9wb3J0bWFwLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VmOWQ3YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvcG9ydG1hcC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTAgQEAKK1tVbml0XQorRGVzY3JpcHRpb249VGhlIFJQQyBwb3J0bWFwcGVyCitBZnRlcj1uZXR3b3JrLnRhcmdldAorCitbU2VydmljZV0KK1R5cGU9Zm9ya2luZworRXhlY1N0YXJ0PUBCQVNFX1NCSU5ESVJAL3BvcnRtYXAKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC90Y3BkLWNvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvdGNwZC1jb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYyNTA1OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvdGNwZC1jb25maWcucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitGcm9tOiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CitEYXRlOiBTdW4sIDEzIE1heSAyMDA3IDIxOjE3OjMyICswMDAwICgtMDQwMCkKK1N1YmplY3Q6IGZpeCBidWlsZGluZyB3aXRoIHRjcGQgc3VwcG9ydCBkaXNhYmxlZAorWC1HaXQtVXJsOiBodHRwOi8vbmVpbC5icm93bi5uYW1lL2dpdD9wPXBvcnRtYXA7YT1jb21taXRkaWZmX3BsYWluO2g9Nzg0NzIwN2FlZDFiNDRmYWYwNzdlZWQxNGE5YWM5YzY4MjQ0ZWJhNQorCitmaXggYnVpbGRpbmcgd2l0aCB0Y3BkIHN1cHBvcnQgZGlzYWJsZWQKKworTWFrZSBzdXJlIHBtYXBfY2hlY2suYyBvbmx5IGluY2x1ZGVzIHRjcGQuaCB3aGVuIEhPU1RTX0FDQ0VTUyBpcyBkZWZpbmVkLgorCitTaWduZWQtb2ZmLWJ5OiBUaW1vdGh5IFJlZGFlbGxpIDxkcml6enRAZ2VudG9vLm9yZz4KK1NpZ25lZC1vZmYtYnk6IE1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KK1NpZ25lZC1vZmYtYnk6IE5laWwgQnJvd24gPG5laWxiQHN1c2UuZGU+CistLS0KKworZGlmZiAtLWdpdCBhL3BtYXBfY2hlY2suYyBiL3BtYXBfY2hlY2suYworaW5kZXggODRmMmMxMi4uNDQzYTgyMiAxMDA2NDQKKy0tLSBhL3BtYXBfY2hlY2suYworKysrIGIvcG1hcF9jaGVjay5jCitAQCAtNDQsNyArNDQsOSBAQAorICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgI2luY2x1ZGUgPHJwYy9ycGNlbnQuaD4KKyAjZW5kaWYKKysjaWZkZWYgSE9TVFNfQUNDRVNTCisgI2luY2x1ZGUgPHRjcGQuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisgI2luY2x1ZGUgPGdycC5oPgorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcF82LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwXzYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzI3ZmUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcF82LjAuYmIKQEAgLTAsMCArMSwzMSBAQAorcmVxdWlyZSBwb3J0bWFwLmluYworCitQUiA9ICJyOSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LnNvdXJjZWZpbGVzLm9yZy9OZXR3b3JraW5nL1Rvb2xzL01pc2NlbGxhbmVub3VzL3BvcnRtYXAtNi4wLnRneiBcCisgICAgICAgICAgIGZpbGU6Ly9kZXN0ZGlyLW5vLXN0cmlwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3RjcGQtY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BvcnRtYXAuaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9wb3J0bWFwLnNlcnZpY2UiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhYzEwOGFiNjhiZjBmMzQ0NzdmODMxNzc5MWFhZjFmZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMmM4MjBkMzlmM2U2ZTcyOWQxYmVhMzI4N2EyZDhhNmM2ODRmMTAwNmZiOTYxMmY5N2RjYWQ0YTI4MWQ0MWRlIgorCitTID0gIiR7V09SS0RJUn0vJHtCUE59XyR7UFZ9LyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInRjcC13cmFwcGVycyIKK1BBQ0tBR0VDT05GSUdbdGNwLXdyYXBwZXJzXSA9ICIsLHRjcC13cmFwcGVycyIKKworQ1BQRkxBR1MgKz0gIi1ERkFDSUxJVFk9TE9HX0RBRU1PTiAtREVOQUJMRV9ETlMgLURIT1NUU19BQ0NFU1MiCitDRkxBR1MgKz0gIi1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLWZQSUMiCitFWFRSQV9PRU1BS0UgKz0gIidOT19UQ1BfV1JBUFBFUj0ke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd0Y3Atd3JhcHBlcnMnLCAnJywgJzEnLCBkKX0nIgorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW44LyAke0R9JHtiYXNlX3NiaW5kaXJ9ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BvcnRtYXAuaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvcG9ydG1hcAorICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0KKworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wb3J0bWFwLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKyAgICBzZWQgLWkgLWUgJ3MsQEJBU0VfU0JJTkRJUkAsJHtiYXNlX3NiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3BvcnRtYXAuc2VydmljZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC1kaWFsaW4vZmlsZXMvaG9zdC1wZWVyIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC1kaWFsaW4vZmlsZXMvaG9zdC1wZWVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZTJlMTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwLWRpYWxpbi9maWxlcy9ob3N0LXBlZXIKQEAgLTAsMCArMSwxMSBAQAorLWRldGFjaAorZGVmYXVsdHJvdXRlCitub2NydHNjdHMKK2xvY2sKK25vYXV0aAorbGNwLWVjaG8taW50ZXJ2YWwgNQorbGNwLWVjaG8tZmFpbHVyZSAzCit1c2VwZWVyZG5zCisxMTUyMDAKK2xvY2FsCithc3luY21hcCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwLWRpYWxpbi9maWxlcy9wcHAtZGlhbGluIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC1kaWFsaW4vZmlsZXMvcHBwLWRpYWxpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTI3NzEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC1kaWFsaW4vZmlsZXMvcHBwLWRpYWxpbgpAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorCisvdXNyL3NiaW4vcHBwZCBjYWxsIGhvc3QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAtZGlhbGluL3BwcC1kaWFsaW5fMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC1kaWFsaW4vcHBwLWRpYWxpbl8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFhNzZiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAtZGlhbGluL3BwcC1kaWFsaW5fMC4xLmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiRW5hYmxlcyBQUFAgZGlhbC1pbiB0aHJvdWdoIGEgc2VyaWFsIGNvbm5lY3Rpb24iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0RFUEVORFMgPSAicHBwIgorUkRFUEVORFNfJHtQTn0gPSAicHBwIgorUFIgPSAicjgiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTUkNfVVJJID0gImZpbGU6Ly9ob3N0LXBlZXIgXAorICAgICAgICAgICBmaWxlOi8vcHBwLWRpYWxpbiIKKworaW5oZXJpdCBhbGxhcmNoIHVzZXJhZGQKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcHBwL3BlZXJzCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaG9zdC1wZWVyICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC9wZWVycy9ob3N0CisKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcHBwLWRpYWxpbiAke0R9JHtzYmluZGlyfQorfQorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSAtLWhvbWUgL2Rldi9udWxsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1uby1jcmVhdGUtaG9tZSAtLXNoZWxsICR7c2JpbmRpcn0vcHBwLWRpYWxpbiBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tdXNlci1ncm91cCAtLWdpZCBub2dyb3VwIHBwcCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzAwMDEtcHBwLUZpeC1jb21waWxhdGlvbi1lcnJvcnMtaW4tTWFrZWZpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC8wMDAxLXBwcC1GaXgtY29tcGlsYXRpb24tZXJyb3JzLWluLU1ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYTJkMmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC8wMDAxLXBwcC1GaXgtY29tcGlsYXRpb24tZXJyb3JzLWluLU1ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK0Zyb20gYmEwZjYwNThkMWYyNWIyYjYwZmMzMWFiMjY1NmJmMTJhNzFmZmRhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEx1IENob25nIDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCA1IE5vdiAyMDEzIDE3OjMyOjU2ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHBwcDogRml4IGNvbXBpbGF0aW9uIGVycm9ycyBpbiBNYWtlZmlsZQorCitUaGlzIHBhdGNoIGZpeGVzIGJlbG93IGlzc3VlczoKKworMS4gTWFrZSBjYW4ndCBleGl0IHdoaWxlIGNvbXBpbGF0aW9uIGVycm9yIG9jY3VycyBpbiBzdWJkaXIgZm9yIHBsdWdpbnMgYnVpbGRpbmcuCisKKzIuIElmIGJ1aWxkIHBwcCB3aXRoIG5ld2VyIGtlcm5lbCAoMy4xMC4xMCksIGl0IHdpbGwgcGljayAnaWZfcHBwb3guaCcgZnJvbSBzeXNyb290LWRpciBhbmQKKyAgICdpZl9wcHBvbDJ0cC5oJyBmcm9tIGl0cyBvd24gc291cmNlIGRpciwgdGhpcyBjYXVzZSBiZWxvdyBidWlsZCBlcnJvcnM6CisKKyAgICAgICAgYml0YmFrZV9idWlsZC90bXAvc3lzcm9vdHMvaW50ZWwteDg2LTY0L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3BwcG94Lmg6ODQ6MjY6CisgICAgICAgIGVycm9yOiBmaWVsZCAncHBwb2wydHAnIGhhcyBpbmNvbXBsZXRlIHR5cGUKKyAgICAgICAgICBzdHJ1Y3QgcHBwb2wydHBpbjZfYWRkciBwcHBvbDJ0cDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisgICAgICAgIGJpdGJha2VfYnVpbGQvdG1wL3N5c3Jvb3RzL2ludGVsLXg4Ni02NC91c3IvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oOjk5OjI4OgorICAgICAgICBlcnJvcjogZmllbGQgJ3BwcG9sMnRwJyBoYXMgaW5jb21wbGV0ZSB0eXBlCisgICAgICAgICAgc3RydWN0IHBwcG9sMnRwdjNpbjZfYWRkciBwcHBvbDJ0cDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKworVGhlICdzeXNyb290LWRpci9pZl9wcHBveC5oJyBlbmFibGVkIGlwdjYgc3VwcG9ydCBidXQgdGhlICdzb3VyY2UtZGlyL2lmX3BwcG9sMnRwLmgnIGxvc3QKK3JlbGF0ZWQgc3RydWN0dXJlIGRlZmluaXRpb25zLCB3ZSBzaG91bGQgdXNlIGJvdGggaGVhZGVyIGZpbGVzIGZyb20gc3lzcm9vdHMgdG8gZml4IHRoaXMKK2J1aWxkIGZhaWx1cmUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBMdSBDaG9uZyA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHBwcGQvcGx1Z2lucy9NYWtlZmlsZS5saW51eCAgICAgICAgICB8ICAgIDIgKy0KKyBwcHBkL3BsdWdpbnMvcHBwb2wydHAvTWFrZWZpbGUubGludXggfCAgICAyICstCisgcHBwZC9wbHVnaW5zL3JwLXBwcG9lL01ha2VmaWxlLmxpbnV4IHwgICAgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcHBwZC9wbHVnaW5zL01ha2VmaWxlLmxpbnV4IGIvcHBwZC9wbHVnaW5zL01ha2VmaWxlLmxpbnV4CitpbmRleCAwYTdlYzdiLi4yYTJjMTVhIDEwMDY0NAorLS0tIGEvcHBwZC9wbHVnaW5zL01ha2VmaWxlLmxpbnV4CisrKysgYi9wcHBkL3BsdWdpbnMvTWFrZWZpbGUubGludXgKK0BAIC0yMCw3ICsyMCw3IEBAIGluY2x1ZGUgLmRlcGVuZAorIGVuZGlmCisgCisgYWxsOgkkKFBMVUdJTlMpCistCWZvciBkIGluICQoU1VCRElSUyk7IGRvICQoTUFLRSkgJChNRkxBR1MpIC1DICQkZCBhbGw7IGRvbmUKKysJZm9yIGQgaW4gJChTVUJESVJTKTsgZG8gJChNQUtFKSAkKE1GTEFHUykgLUMgJCRkIGFsbCB8fCBleGl0IDE7IGRvbmUKKyAKKyAlLnNvOiAlLmMKKyAJJChDQykgLW8gJEAgJChMREZMQUdTKSAkKENGTEFHUykgJF4KK2RpZmYgLS1naXQgYS9wcHBkL3BsdWdpbnMvcHBwb2wydHAvTWFrZWZpbGUubGludXggYi9wcHBkL3BsdWdpbnMvcHBwb2wydHAvTWFrZWZpbGUubGludXgKK2luZGV4IDE5ZWZmNjcuLmZlYjJmNTIgMTAwNjQ0CistLS0gYS9wcHBkL3BsdWdpbnMvcHBwb2wydHAvTWFrZWZpbGUubGludXgKKysrKyBiL3BwcGQvcGx1Z2lucy9wcHBvbDJ0cC9NYWtlZmlsZS5saW51eAorQEAgLTEsNiArMSw2IEBACisgI0NDCT0gZ2NjCisgQ09QVFMJPSAtTzIgLWcKKy1DRkxBR1MJPSAkKENPUFRTKSAtSS4gLUkuLi8uLiAtSS4uLy4uLy4uL2luY2x1ZGUgLWZQSUMKKytDRkxBR1MJPSAkKENPUFRTKSAtSS4gLUkuLi8uLiAtZlBJQworIExERkxBR1MJPSAtc2hhcmVkCisgSU5TVEFMTAk9IGluc3RhbGwKKyAKK2RpZmYgLS1naXQgYS9wcHBkL3BsdWdpbnMvcnAtcHBwb2UvTWFrZWZpbGUubGludXggYi9wcHBkL3BsdWdpbnMvcnAtcHBwb2UvTWFrZWZpbGUubGludXgKK2luZGV4IGYwNzg5OTEuLjE1YjkxMTggMTAwNjQ0CistLS0gYS9wcHBkL3BsdWdpbnMvcnAtcHBwb2UvTWFrZWZpbGUubGludXgKKysrKyBiL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eAorQEAgLTI2LDcgKzI2LDcgQEAgSU5TVEFMTAk9IGluc3RhbGwKKyBSUF9WRVJTSU9OPTMuOHAKKyAKKyBDT1BUUz0tTzIgLWcKKy1DRkxBR1M9JChDT1BUUykgLUkuLi8uLi8uLi9pbmNsdWRlICctRFJQX1ZFUlNJT049IiQoUlBfVkVSU0lPTikiJworK0NGTEFHUz0kKENPUFRTKSAnLURSUF9WRVJTSU9OPSIkKFJQX1ZFUlNJT04pIicKKyBhbGw6IHJwLXBwcG9lLnNvIHBwcG9lLWRpc2NvdmVyeQorIAorIHBwcG9lLWRpc2NvdmVyeTogcHBwb2UtZGlzY292ZXJ5Lm8gZGVidWcubworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzA4c2V0dXBkbnMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC8wOHNldHVwZG5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ODIxOWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC8wOHNldHVwZG5zCkBAIC0wLDAgKzEsMTIgQEAKKyMhL2Jpbi9zaAorQUNUVUFMQ09ORj0vdmFyL3J1bi9yZXNvbHYuY29uZgorUFBQQ09ORj0vdmFyL3J1bi9wcHAvcmVzb2x2LmNvbmYKK2lmIFsgLWYgJFBQUENPTkYgXSA7IHRoZW4KKwlpZiBbIC1mICRBQ1RVQUxDT05GIF0gOyB0aGVuCisJCWlmIFsgISAtaCAkQUNUVUFMQ09ORiAtbyAhICJgcmVhZGxpbmsgJEFDVFVBTENPTkYgMj4mMWAiID0gIiRQUFBDT05GIiBdIDsgdGhlbgorCQkJbXYgJEFDVFVBTENPTkYgJEFDVFVBTENPTkYucHBwb3JpZworCQlmaQorCWZpCisKKwlsbiAtc2YgJFBQUENPTkYgJEFDVFVBTENPTkYKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC85MnJlbW92ZWRucyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzkycmVtb3ZlZG5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYWRlYzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC85MnJlbW92ZWRucwpAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorQUNUVUFMQ09ORj0vdmFyL3J1bi9yZXNvbHYuY29uZgoraWYgWyAtZiAkQUNUVUFMQ09ORi5wcHBvcmlnIF0gOyB0aGVuCisJbXYgJEFDVFVBTENPTkYucHBwb3JpZyAkQUNUVUFMQ09ORgorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2NpZmRlZnJvdXRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvY2lmZGVmcm91dGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI0ZGJjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2NpZmRlZnJvdXRlLnBhdGNoCkBAIC0wLDAgKzEsMjkyIEBACitUaGlzIHBhdGNoIGNvbWVzIGZyb20gT3BlbkVtYmVkZGVkLgorVGhlIG9yaWdpbmFsIHBhdGNoIGlzIGZyb20gRGViaWFuIC8gU3VTRSB0byBpbXBsZW1lbnQgcmVwbGFjZWRlZmF1bHRyb3V0ZQorUmViYXNlZCBpdCB0byBmaXQgcHBwLTIuNC41LiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbi9zdXNlIHBhdGNoZXNdCisKK2RpZmYgLXVyTiBwcHAtMi40LjUtb3JpZy9wcHBkL2lwY3AuYyBwcHAtMi40LjUvcHBwZC9pcGNwLmMKKy0tLSBwcHAtMi40LjUtb3JpZy9wcHBkL2lwY3AuYwkyMDEwLTA2LTMwIDE1OjUxOjEyLjA1MDE2NjM5OCArMDgwMAorKysrIHBwcC0yLjQuNS9wcHBkL2lwY3AuYwkyMDEwLTA2LTMwIDE2OjQwOjAwLjQ3ODcxNjg1NSArMDgwMAorQEAgLTE5OCw2ICsxOTgsMTYgQEAKKyAgICAgICAiZGlzYWJsZSBkZWZhdWx0cm91dGUgb3B0aW9uIiwgT1BUX0FMSUFTIHwgT1BUX0EyQ0xSLAorICAgICAgICZpcGNwX3dhbnRvcHRpb25zWzBdLmRlZmF1bHRfcm91dGUgfSwKKyAKKysjaWZkZWYgX19saW51eF9fCisrICAgIHsgInJlcGxhY2VkZWZhdWx0cm91dGUiLCBvX2Jvb2wsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpcGNwX3dhbnRvcHRpb25zWzBdLnJlcGxhY2VfZGVmYXVsdF9yb3V0ZSwKKysgICAgICAiUmVwbGFjZSBkZWZhdWx0IHJvdXRlIiwgMQorKyAgICB9LAorKyAgICB7ICJub3JlcGxhY2VkZWZhdWx0cm91dGUiLCBvX2Jvb2wsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpcGNwX2FsbG93b3B0aW9uc1swXS5yZXBsYWNlX2RlZmF1bHRfcm91dGUsCisrICAgICAgIk5ldmVyIHJlcGxhY2UgZGVmYXVsdCByb3V0ZSIsIE9QVF9BMkNPUFksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpcGNwX3dhbnRvcHRpb25zWzBdLnJlcGxhY2VfZGVmYXVsdF9yb3V0ZSB9LAorKyNlbmRpZgorICAgICB7ICJwcm94eWFycCIsIG9fYm9vbCwgJmlwY3Bfd2FudG9wdGlvbnNbMF0ucHJveHlfYXJwLAorICAgICAgICJBZGQgcHJveHkgQVJQIGVudHJ5IiwgT1BUX0VOQUJMRXwxLCAmaXBjcF9hbGxvd29wdGlvbnNbMF0ucHJveHlfYXJwIH0sCisgICAgIHsgIm5vcHJveHlhcnAiLCBvX2Jvb2wsICZpcGNwX2FsbG93b3B0aW9uc1swXS5wcm94eV9hcnAsCitAQCAtMjcxLDcgKzI4MSw3IEBACisgICAgIGlwX2FjdGl2ZV9wa3QKKyB9OworIAorLXN0YXRpYyB2b2lkIGlwY3BfY2xlYXJfYWRkcnMgX19QKChpbnQsIHVfaW50MzJfdCwgdV9pbnQzMl90KSk7Cisrc3RhdGljIHZvaWQgaXBjcF9jbGVhcl9hZGRycyBfX1AoKGludCwgdV9pbnQzMl90LCB1X2ludDMyX3QsIGJvb2wpKTsKKyBzdGF0aWMgdm9pZCBpcGNwX3NjcmlwdCBfX1AoKGNoYXIgKiwgaW50KSk7CS8qIFJ1biBhbiB1cC9kb3duIHNjcmlwdCAqLworIHN0YXRpYyB2b2lkIGlwY3Bfc2NyaXB0X2RvbmUgX19QKCh2b2lkICopKTsKKyAKK0BAIC0xNzQyLDcgKzE3NTIsMTIgQEAKKyAgICAgaWYgKCFzaWZucG1vZGUodSwgUFBQX0lQLCBOUE1PREVfUVVFVUUpKQorIAlyZXR1cm4gMDsKKyAgICAgaWYgKHdvLT5kZWZhdWx0X3JvdXRlKQorKyNpZm5kZWYgX19saW51eF9fCisgCWlmIChzaWZkZWZhdWx0cm91dGUodSwgd28tPm91cmFkZHIsIHdvLT5oaXNhZGRyKSkKKysjZWxzZQorKwlpZiAoc2lmZGVmYXVsdHJvdXRlKHUsIHdvLT5vdXJhZGRyLCB3by0+aGlzYWRkciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvLT5yZXBsYWNlX2RlZmF1bHRfcm91dGUpKQorKyNlbmRpZgorIAkgICAgZGVmYXVsdF9yb3V0ZV9zZXRbdV0gPSAxOworICAgICBpZiAod28tPnByb3h5X2FycCkKKyAJaWYgKHNpZnByb3h5YXJwKHUsIHdvLT5oaXNhZGRyKSkKK0BAIC0xODMwLDcgKzE4NDUsOCBAQAorICAgICAgKi8KKyAgICAgaWYgKGRlbWFuZCkgeworIAlpZiAoZ28tPm91cmFkZHIgIT0gd28tPm91cmFkZHIgfHwgaG8tPmhpc2FkZHIgIT0gd28tPmhpc2FkZHIpIHsKKy0JICAgIGlwY3BfY2xlYXJfYWRkcnMoZi0+dW5pdCwgd28tPm91cmFkZHIsIHdvLT5oaXNhZGRyKTsKKysJICAgIGlwY3BfY2xlYXJfYWRkcnMoZi0+dW5pdCwgd28tPm91cmFkZHIsIHdvLT5oaXNhZGRyLCAKKysJCQkJICAgICAgd28tPnJlcGxhY2VfZGVmYXVsdF9yb3V0ZSk7CisgCSAgICBpZiAoZ28tPm91cmFkZHIgIT0gd28tPm91cmFkZHIpIHsKKyAJCXdhcm4oIkxvY2FsIElQIGFkZHJlc3MgY2hhbmdlZCB0byAlSSIsIGdvLT5vdXJhZGRyKTsKKyAJCXNjcmlwdF9zZXRlbnYoIk9MRElQTE9DQUwiLCBpcF9udG9hKHdvLT5vdXJhZGRyKSwgMCk7CitAQCAtMTg1NSw3ICsxODcxLDEyIEBACisgCisgCSAgICAvKiBhc3NpZ24gYSBkZWZhdWx0IHJvdXRlIHRocm91Z2ggdGhlIGludGVyZmFjZSBpZiByZXF1aXJlZCAqLworIAkgICAgaWYgKGlwY3Bfd2FudG9wdGlvbnNbZi0+dW5pdF0uZGVmYXVsdF9yb3V0ZSkgCisrI2lmbmRlZiBfX2xpbnV4X18KKyAJCWlmIChzaWZkZWZhdWx0cm91dGUoZi0+dW5pdCwgZ28tPm91cmFkZHIsIGhvLT5oaXNhZGRyKSkKKysjZWxzZQorKwkJaWYgKHNpZmRlZmF1bHRyb3V0ZShmLT51bml0LCBnby0+b3VyYWRkciwgaG8tPmhpc2FkZHIsCisrCQkJCQkgICAgIHdvLT5yZXBsYWNlX2RlZmF1bHRfcm91dGUpKQorKyNlbmRpZgorIAkJICAgIGRlZmF1bHRfcm91dGVfc2V0W2YtPnVuaXRdID0gMTsKKyAKKyAJICAgIC8qIE1ha2UgYSBwcm94eSBBUlAgZW50cnkgaWYgcmVxdWVzdGVkLiAqLworQEAgLTE5MDUsNyArMTkyNiwxMiBAQAorIAorIAkvKiBhc3NpZ24gYSBkZWZhdWx0IHJvdXRlIHRocm91Z2ggdGhlIGludGVyZmFjZSBpZiByZXF1aXJlZCAqLworIAlpZiAoaXBjcF93YW50b3B0aW9uc1tmLT51bml0XS5kZWZhdWx0X3JvdXRlKSAKKysjaWZuZGVmIF9fbGludXhfXworIAkgICAgaWYgKHNpZmRlZmF1bHRyb3V0ZShmLT51bml0LCBnby0+b3VyYWRkciwgaG8tPmhpc2FkZHIpKQorKyNlbHNlCisrCSAgICBpZiAoc2lmZGVmYXVsdHJvdXRlKGYtPnVuaXQsIGdvLT5vdXJhZGRyLCBoby0+aGlzYWRkciwKKysJCQkJCSB3by0+cmVwbGFjZV9kZWZhdWx0X3JvdXRlKSkKKysjZW5kaWYKKyAJCWRlZmF1bHRfcm91dGVfc2V0W2YtPnVuaXRdID0gMTsKKyAKKyAJLyogTWFrZSBhIHByb3h5IEFSUCBlbnRyeSBpZiByZXF1ZXN0ZWQuICovCitAQCAtMTk4Myw3ICsyMDA5LDcgQEAKKyAJc2lmbnBtb2RlKGYtPnVuaXQsIFBQUF9JUCwgTlBNT0RFX0RST1ApOworIAlzaWZkb3duKGYtPnVuaXQpOworIAlpcGNwX2NsZWFyX2FkZHJzKGYtPnVuaXQsIGlwY3BfZ290b3B0aW9uc1tmLT51bml0XS5vdXJhZGRyLAorLQkJCSBpcGNwX2hpc29wdGlvbnNbZi0+dW5pdF0uaGlzYWRkcik7CisrCQkJIGlwY3BfaGlzb3B0aW9uc1tmLT51bml0XS5oaXNhZGRyLCAwKTsKKyAgICAgfQorIAorICAgICAvKiBFeGVjdXRlIHRoZSBpcC1kb3duIHNjcmlwdCAqLworQEAgLTE5OTksMTIgKzIwMjUsMjEgQEAKKyAgKiBwcm94eSBhcnAgZW50cmllcywgZXRjLgorICAqLworIHN0YXRpYyB2b2lkCistaXBjcF9jbGVhcl9hZGRycyh1bml0LCBvdXJhZGRyLCBoaXNhZGRyKQorK2lwY3BfY2xlYXJfYWRkcnModW5pdCwgb3VyYWRkciwgaGlzYWRkciwgcmVwbGFjZWRlZmF1bHRyb3V0ZSkKKyAgICAgaW50IHVuaXQ7CisgICAgIHVfaW50MzJfdCBvdXJhZGRyOyAgLyogbG9jYWwgYWRkcmVzcyAqLworICAgICB1X2ludDMyX3QgaGlzYWRkcjsgIC8qIHJlbW90ZSBhZGRyZXNzICovCisrICAgIGJvb2wgcmVwbGFjZWRlZmF1bHRyb3V0ZTsKKyB7CistICAgIGlmIChwcm94eV9hcnBfc2V0W3VuaXRdKSB7CisrICAgIC8qIElmIHJlcGxhY2VkZWZhdWx0cm91dGUsIHNpZmRlZmF1bHRyb3V0ZSB3aWxsIGJlIGNhbGxlZCBzb29uCisrICAgICAqIHdpdGggcmVwbGFjZWRlZmF1bHRyb3V0ZSBzZXQgYW5kIHRoYXQgd2lsbCBvdmVyd3JpdGUgdGhlIGN1cnJlbnQKKysgICAgICogZGVmYXVsdCByb3V0ZS4gVGhpcyBpcyB0aGUgY2FzZSBvbmx5IHdoZW4gZG9pbmcgZGVtYW5kLCBvdGhlcndpc2UKKysgICAgICogZHVyaW5nIGRlbWFuZCwgdGhpcyBjaWZkZWZhdWx0cm91dGUgd291bGQgcmVzdG9yZSB0aGUgb2xkIGRlZmF1bHQKKysgICAgICogcm91dGUgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudCBpbiB0aGlzIGNhc2UuIEluIHRoZSBub24tZGVtYW5kCisrICAgICAqIGNhc2UsIHdlJ2xsIGRlbGV0ZSB0aGUgZGVmYXVsdCByb3V0ZSBhbmQgcmVzdG9yZSB0aGUgb2xkIGlmIHRoZXJlCisrICAgICAqIGlzIG9uZSBzYXZlZCBieSBhbiBzaWZkZWZhdWx0cm91dGUgd2l0aCByZXBsYWNlZGVmYXVsdHJvdXRlLgorKyAgICAgKi8KKysgICAgaWYgKCFyZXBsYWNlZGVmYXVsdHJvdXRlICYmIGRlZmF1bHRfcm91dGVfc2V0W3VuaXRdKSB7CisgCWNpZnByb3h5YXJwKHVuaXQsIGhpc2FkZHIpOworIAlwcm94eV9hcnBfc2V0W3VuaXRdID0gMDsKKyAgICAgfQorZGlmZiAtdXJOIHBwcC0yLjQuNS1vcmlnL3BwcGQvaXBjcC5oIHBwcC0yLjQuNS9wcHBkL2lwY3AuaAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvaXBjcC5oCTIwMTAtMDYtMzAgMTU6NTE6MTIuMDQzNjgyMDYzICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvaXBjcC5oCTIwMTAtMDYtMzAgMTY6NDA6NDkuNTg2MjAzMTI5ICswODAwCitAQCAtNzAsNiArNzAsNyBAQAorICAgICBib29sIG9sZF9hZGRyczsJCS8qIFVzZSBvbGQgKElQLUFkZHJlc3Nlcykgb3B0aW9uPyAqLworICAgICBib29sIHJlcV9hZGRyOwkJLyogQXNrIHBlZXIgdG8gc2VuZCBJUCBhZGRyZXNzPyAqLworICAgICBib29sIGRlZmF1bHRfcm91dGU7CQkvKiBBc3NpZ24gZGVmYXVsdCByb3V0ZSB0aHJvdWdoIGludGVyZmFjZT8gKi8KKysgICAgYm9vbCByZXBsYWNlX2RlZmF1bHRfcm91dGU7IC8qIFJlcGxhY2UgZGVmYXVsdCByb3V0ZSB0aHJvdWdoIGludGVyZmFjZT8gKi8KKyAgICAgYm9vbCBwcm94eV9hcnA7CQkvKiBNYWtlIHByb3h5IEFSUCBlbnRyeSBmb3IgcGVlcj8gKi8KKyAgICAgYm9vbCBuZWdfdmo7CQkvKiBWYW4gSmFjb2Jzb24gQ29tcHJlc3Npb24/ICovCisgICAgIGJvb2wgb2xkX3ZqOwkJLyogdXNlIG9sZCAoc2hvcnQpIGZvcm0gb2YgVkogb3B0aW9uPyAqLworZGlmZiAtdXJOIHBwcC0yLjQuNS1vcmlnL3BwcGQvcHBwZC44IHBwcC0yLjQuNS9wcHBkL3BwcGQuOAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvcHBwZC44CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDQzNjgyMDYzICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvcHBwZC44CTIwMTAtMDYtMzAgMTY6NDI6NDcuMTAyNDEzODU5ICswODAwCitAQCAtMTIxLDYgKzEyMSwxMyBAQAorIFRoaXMgZW50cnkgaXMgcmVtb3ZlZCB3aGVuIHRoZSBQUFAgY29ubmVjdGlvbiBpcyBicm9rZW4uICBUaGlzIG9wdGlvbgorIGlzIHByaXZpbGVnZWQgaWYgdGhlIFxmSW5vZGVmYXVsdHJvdXRlXGZSIG9wdGlvbiBoYXMgYmVlbiBzcGVjaWZpZWQuCisgLlRQCisrLkIgcmVwbGFjZWRlZmF1bHRyb3V0ZQorK1RoaXMgb3B0aW9uIGlzIGEgZmxhZyB0byB0aGUgZGVmYXVsdHJvdXRlIG9wdGlvbi4gSWYgZGVmYXVsdHJvdXRlIGlzCisrc2V0IGFuZCB0aGlzIGZsYWcgaXMgYWxzbyBzZXQsIHBwcGQgcmVwbGFjZXMgYW4gZXhpc3RpbmcgZGVmYXVsdCByb3V0ZQorK3dpdGggdGhlIG5ldyBkZWZhdWx0IHJvdXRlLgorKworKworKy5UUAorIC5CIGRpc2Nvbm5lY3QgXGZJc2NyaXB0CisgRXhlY3V0ZSB0aGUgY29tbWFuZCBzcGVjaWZpZWQgYnkgXGZJc2NyaXB0XGZSLCBieSBwYXNzaW5nIGl0IHRvIGEKKyBzaGVsbCwgYWZ0ZXIKK0BAIC03MTcsNyArNzI0LDEyIEBACisgLlRQCisgLkIgbm9kZWZhdWx0cm91dGUKKyBEaXNhYmxlIHRoZSBcZklkZWZhdWx0cm91dGVcZlIgb3B0aW9uLiAgVGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHdobworLXdpc2hlcyB0byBwcmV2ZW50IHVzZXJzIGZyb20gY3JlYXRpbmcgZGVmYXVsdCByb3V0ZXMgd2l0aCBwcHBkCisrd2lzaGVzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSBhZGRpbmcgYSBkZWZhdWx0IHJvdXRlIHdpdGggcHBwZAorK2NhbiBkbyBzbyBieSBwbGFjaW5nIHRoaXMgb3B0aW9uIGluIHRoZSAvZXRjL3BwcC9vcHRpb25zIGZpbGUuCisrLlRQCisrLkIgbm9yZXBsYWNlZGVmYXVsdHJvdXRlCisrRGlzYWJsZSB0aGUgXGZJcmVwbGFjZWRlZmF1bHRyb3V0ZVxmUiBvcHRpb24uIFRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciB3aG8KKyt3aXNoZXMgdG8gcHJldmVudCB1c2VycyBmcm9tIHJlcGxhY2luZyBhIGRlZmF1bHQgcm91dGUgd2l0aCBwcHBkCisgY2FuIGRvIHNvIGJ5IHBsYWNpbmcgdGhpcyBvcHRpb24gaW4gdGhlIC9ldGMvcHBwL29wdGlvbnMgZmlsZS4KKyAuVFAKKyAuQiBub2RlZmxhdGUKK2RpZmYgLXVyTiBwcHAtMi40LjUtb3JpZy9wcHBkL3BwcGQuaCBwcHAtMi40LjUvcHBwZC9wcHBkLmgKKy0tLSBwcHAtMi40LjUtb3JpZy9wcHBkL3BwcGQuaAkyMDEwLTA2LTMwIDE1OjUxOjEyLjA1MDE2NjM5OCArMDgwMAorKysrIHBwcC0yLjQuNS9wcHBkL3BwcGQuaAkyMDEwLTA2LTMwIDE2OjQzOjM2LjUxNDE0ODMyNyArMDgwMAorQEAgLTY0Myw3ICs2NDMsMTEgQEAKKyBpbnQgIGNpZjZhZGRyIF9fUCgoaW50LCBldWk2NF90LCBldWk2NF90KSk7CisgCQkJCS8qIFJlbW92ZSBhbiBJUHY2IGFkZHJlc3MgZnJvbSBpL2YgKi8KKyAjZW5kaWYKKysjaWZuZGVmIF9fbGludXhfXworIGludCAgc2lmZGVmYXVsdHJvdXRlIF9fUCgoaW50LCB1X2ludDMyX3QsIHVfaW50MzJfdCkpOworKyNlbHNlCisraW50ICBzaWZkZWZhdWx0cm91dGUgX19QKChpbnQsIHVfaW50MzJfdCwgdV9pbnQzMl90LCBib29sIHJlcGxhY2VfZGVmYXVsdF9ydCkpOworKyNlbmRpZgorIAkJCQkvKiBDcmVhdGUgZGVmYXVsdCByb3V0ZSB0aHJvdWdoIGkvZiAqLworIGludCAgY2lmZGVmYXVsdHJvdXRlIF9fUCgoaW50LCB1X2ludDMyX3QsIHVfaW50MzJfdCkpOworIAkJCQkvKiBEZWxldGUgZGVmYXVsdCByb3V0ZSB0aHJvdWdoIGkvZiAqLworZGlmZiAtdXJOIHBwcC0yLjQuNS1vcmlnL3BwcGQvc3lzLWxpbnV4LmMgcHBwLTIuNC41L3BwcGQvc3lzLWxpbnV4LmMKKy0tLSBwcHAtMi40LjUtb3JpZy9wcHBkL3N5cy1saW51eC5jCTIwMTAtMDYtMzAgMTU6NTE6MTIuMDUwMTY2Mzk4ICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvc3lzLWxpbnV4LmMJMjAxMC0wNi0zMCAxNjo1NDowMC4zNjI3MTYyMzEgKzA4MDAKK0BAIC0yMDYsNiArMjA2LDggQEAKKyAKKyBzdGF0aWMgaW50CWlmX2lzX3VwOwkvKiBJbnRlcmZhY2UgaGFzIGJlZW4gbWFya2VkIHVwICovCisgc3RhdGljIGludAloYXZlX2RlZmF1bHRfcm91dGU7CS8qIEdhdGV3YXkgZm9yIGRlZmF1bHQgcm91dGUgYWRkZWQgKi8KKytzdGF0aWMgc3RydWN0IHJ0ZW50cnkgb2xkX2RlZl9ydDsgICAgICAgLyogT2xkIGRlZmF1bHQgcm91dGUgKi8KKytzdGF0aWMgaW50ICAgICAgIGRlZmF1bHRfcnRfcmVwbF9yZXN0OyAgLyogcmVwbGFjZSBhbmQgcmVzdG9yZSBvbGQgZGVmYXVsdCBydCAqLworIHN0YXRpYyB1X2ludDMyX3QgcHJveHlfYXJwX2FkZHI7CS8qIEFkZHIgZm9yIHByb3h5IGFycCBlbnRyeSBhZGRlZCAqLworIHN0YXRpYyBjaGFyIHByb3h5X2FycF9kZXZbMTZdOwkJLyogRGV2aWNlIGZvciBwcm94eSBhcnAgZW50cnkgKi8KKyBzdGF0aWMgdV9pbnQzMl90IG91cl9vbGRfYWRkcjsJCS8qIGZvciBkZXRlY3RpbmcgYWRkcmVzcyBjaGFuZ2VzICovCitAQCAtMTUzNyw2ICsxNTM5LDkgQEAKKyAJcCA9IE5VTEw7CisgICAgIH0KKyAKKysgICAgU0VUX1NBX0ZBTUlMWSAocnQtPnJ0X2RzdCwgICAgIEFGX0lORVQpOworKyAgICBTRVRfU0FfRkFNSUxZIChydC0+cnRfZ2F0ZXdheSwgQUZfSU5FVCk7CisrCisgICAgIFNJTl9BRERSKHJ0LT5ydF9kc3QpID0gc3RydG91bChjb2xzW3JvdXRlX2Rlc3RfY29sXSwgTlVMTCwgMTYpOworICAgICBTSU5fQUREUihydC0+cnRfZ2F0ZXdheSkgPSBzdHJ0b3VsKGNvbHNbcm91dGVfZ3dfY29sXSwgTlVMTCwgMTYpOworICAgICBTSU5fQUREUihydC0+cnRfZ2VubWFzaykgPSBzdHJ0b3VsKGNvbHNbcm91dGVfbWFza19jb2xdLCBOVUxMLCAxNik7CitAQCAtMTYwNiwyMCArMTYxMSw1MSBAQAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqCisgICogc2lmZGVmYXVsdHJvdXRlIC0gYXNzaWduIGEgZGVmYXVsdCByb3V0ZSB0aHJvdWdoIHRoZSBhZGRyZXNzIGdpdmVuLgorLSAqLworLQorLWludCBzaWZkZWZhdWx0cm91dGUgKGludCB1bml0LCB1X2ludDMyX3Qgb3VyYWRkciwgdV9pbnQzMl90IGdhdGV3YXkpCisteworLSAgICBzdHJ1Y3QgcnRlbnRyeSBydDsKKy0KKy0gICAgaWYgKGRlZmF1bHRyb3V0ZV9leGlzdHMoJnJ0KSAmJiBzdHJjbXAocnQucnRfZGV2LCBpZm5hbWUpICE9IDApIHsKKy0JaWYgKHJ0LnJ0X2ZsYWdzICYgUlRGX0dBVEVXQVkpCistCSAgICBlcnJvcigibm90IHJlcGxhY2luZyBleGlzdGluZyBkZWZhdWx0IHJvdXRlIHZpYSAlSSIsCistCQkgIFNJTl9BRERSKHJ0LnJ0X2dhdGV3YXkpKTsKKy0JZWxzZQorLQkgICAgZXJyb3IoIm5vdCByZXBsYWNpbmcgZXhpc3RpbmcgZGVmYXVsdCByb3V0ZSB0aHJvdWdoICVzIiwKKy0JCSAgcnQucnRfZGV2KTsKKy0JcmV0dXJuIDA7CisrICoKKysgKiBJZiB0aGUgZ2xvYmFsIGRlZmF1bHRfcnRfcmVwbF9yZXN0IGZsYWcgaXMgc2V0LCB0aGVuIHRoaXMgZnVuY3Rpb24KKysgKiBhbHJlYWR5IHJlcGxhY2VkIHRoZSBvcmlnaW5hbCBzeXN0ZW0gZGVmYXVsdHJvdXRlIHdpdGggc29tZSBvdGhlcgorKyAqIHJvdXRlIGFuZCBpdCBzaG91bGQganVzdCByZXBsYWNlIHRoZSBjdXJyZW50IGRlZmF1bHRyb3V0ZSB3aXRoCisrICogYW5vdGhlciBvbmUsIHdpdGhvdXQgc2F2aW5nIHRoZSBjdXJyZW50IHJvdXRlLiBVc2U6IGRlbWFuZCBtb2RlLAorKyAqIHdoZW4gcHBwZCBzZXRzIGZpcnN0IGEgZGVmYXVsdHJvdXRlIGl0IGl0J3MgdGVtcG9yYXJ5IHBwcDAgYWRkcmVzc2VzCisrICogYW5kIHRoZW4gY2hhbmdlcyB0aGUgdGVtcG9yYXJ5IGFkZHJlc3NlcyB0byB0aGUgYWRkcmVzc2VzIGZvciB0aGUgcmVhbAorKyAqIHBwcCBjb25uZWN0aW9uIHdoZW4gaXQgaGFzIGNvbWUgdXAuCisrICovCisrCisraW50IHNpZmRlZmF1bHRyb3V0ZSAoaW50IHVuaXQsIHVfaW50MzJfdCBvdXJhZGRyLCB1X2ludDMyX3QgZ2F0ZXdheSwgYm9vbCByZXBsYWNlKQorK3sKKysgICAgc3RydWN0IHJ0ZW50cnkgcnQsIHRtcF9ydDsKKysgICAgc3RydWN0IHJ0ZW50cnkgKmRlbF9ydCA9IE5VTEw7CisrCisrICAgIGlmIChkZWZhdWx0X3J0X3JlcGxfcmVzdCkgeworKwkvKiBXZSBoYXZlIGFscmVhZHkgcmVjbGFjZWQgdGhlIG9yaWdpbmFsIGRlZmF1bHRyb3V0ZSwgaWYgd2UKKysgICAgICAgICAqIGFyZSBjYWxsZWQgYWdhaW4sIHdlIHdpbGwgZGVsZXRlIHRoZSBjdXJyZW50IGRlZmF1bHQgcm91dGUKKysgICAgICAgICAqIGFuZCBzZXQgdGhlIG5ldyBkZWZhdWx0IHJvdXRlIGluIHRoaXMgZnVuY3Rpb24uICAKKysgICAgICAgICAqIC0gdGhpcyBpcyBub3JtYWxseSBvbmx5IHRoZSBjYXNlIHRoZSBkb2luZyBkZW1hbmQ6ICovCisrCWlmIChkZWZhdWx0cm91dGVfZXhpc3RzKCAmdG1wX3J0ICkpCisrCQlkZWxfcnQgPSAmdG1wX3J0OworKyAgICB9IGVsc2UgaWYgKCBkZWZhdWx0cm91dGVfZXhpc3RzKCAmb2xkX2RlZl9ydCAgICAgICAgICAgICAgICApICYmCisrCSAgICAgICAgICAgICAgICAgICAgIHN0cmNtcCggIG9sZF9kZWZfcnQucnRfZGV2LCBpZm5hbWUgKSAhPSAwKSB7CisrCS8qIFdlIGRpZCBub3QgeWV0IHJlcGxhY2UgYW4gZXhpc3RpbmcgZGVmYXVsdCByb3V0ZSwgbGV0J3MKKysJICogY2hlY2sgaWYgd2Ugc2hvdWxkIHNhdmUgYW5kIHJlcGxhY2UgYSBkZWZhdWx0IHJvdXRlOgorKyAgICAgICAgICovCisrCXVfaW50MzJfdCBvbGRfZ2F0ZXdheSA9IFNJTl9BRERSKG9sZF9kZWZfcnQucnRfZ2F0ZXdheSk7CisrCWlmIChvbGRfZ2F0ZXdheSAhPSBnYXRld2F5KSB7CisrCSAgICBpZiAoIXJlcGxhY2UpIHsKKysJICAgICAgICBlcnJvcigibm90IHJlcGxhY2luZyBkZWZhdWx0IHJvdXRlIHRvICVzIFslSV0iLAorKwkJCW9sZF9kZWZfcnQucnRfZGV2LCBvbGRfZ2F0ZXdheSk7CisrCQlyZXR1cm4gMDsKKysJICAgIH0gZWxzZSB7CisrCQkvLyB3ZSBuZWVkIHRvIGNvcHkgcnRfZGV2IGJlY2F1c2Ugd2UgbmVlZCBpdCBwZXJtYW5lbnQgdG9vOgorKwkJY2hhciAqIHRtcF9kZXYgPSBtYWxsb2Moc3RybGVuKG9sZF9kZWZfcnQucnRfZGV2KSsxKTsKKysJCXN0cmNweSh0bXBfZGV2LCBvbGRfZGVmX3J0LnJ0X2Rldik7CisrCQlvbGRfZGVmX3J0LnJ0X2RldiA9IHRtcF9kZXY7CisrCisrCQlub3RpY2UoInJlcGxhY2luZyBvbGQgZGVmYXVsdCByb3V0ZSB0byAlcyBbJUldIiwKKysJCQlvbGRfZGVmX3J0LnJ0X2Rldiwgb2xkX2dhdGV3YXkpOworKwkgICAgICAgIGRlZmF1bHRfcnRfcmVwbF9yZXN0ID0gMTsKKysJCWRlbF9ydCA9ICZvbGRfZGVmX3J0OworKwkgICAgfQorKwl9CisgICAgIH0KKyAKKyAgICAgbWVtc2V0ICgmcnQsIDAsIHNpemVvZiAocnQpKTsKK0BAIC0xNjM4LDYgKzE2NzQsMTIgQEAKKyAJICAgIGVycm9yKCJkZWZhdWx0IHJvdXRlIGlvY3RsKFNJT0NBRERSVCk6ICVtIik7CisgCXJldHVybiAwOworICAgICB9CisrICAgIGlmIChkZWZhdWx0X3J0X3JlcGxfcmVzdCAmJiBkZWxfcnQpCisrICAgICAgICBpZiAoaW9jdGwoc29ja19mZCwgU0lPQ0RFTFJULCBkZWxfcnQpIDwgMCkgeworKwkgICAgaWYgKCAhIG9rX2Vycm9yICggZXJybm8gKSkKKysJICAgICAgICBlcnJvcigiZGVsIG9sZCBkZWZhdWx0IHJvdXRlIGlvY3RsKFNJT0NERUxSVCk6ICVtKCVkKSIsIGVycm5vKTsKKysJICAgIHJldHVybiAwOworKyAgICAgICAgfQorIAorICAgICBoYXZlX2RlZmF1bHRfcm91dGUgPSAxOworICAgICByZXR1cm4gMTsKK0BAIC0xNjczLDYgKzE3MTUsMTYgQEAKKyAJICAgIHJldHVybiAwOworIAl9CisgICAgIH0KKysgICAgaWYgKGRlZmF1bHRfcnRfcmVwbF9yZXN0KSB7CisrCW5vdGljZSgicmVzdG9yaW5nIG9sZCBkZWZhdWx0IHJvdXRlIHRvICVzIFslSV0iLAorKwkJCW9sZF9kZWZfcnQucnRfZGV2LCBTSU5fQUREUihvbGRfZGVmX3J0LnJ0X2dhdGV3YXkpKTsKKysgICAgICAgIGlmIChpb2N0bChzb2NrX2ZkLCBTSU9DQUREUlQsICZvbGRfZGVmX3J0KSA8IDApIHsKKysJICAgIGlmICggISBva19lcnJvciAoIGVycm5vICkpCisrCSAgICAgICAgZXJyb3IoInJlc3RvcmUgZGVmYXVsdCByb3V0ZSBpb2N0bChTSU9DQUREUlQpOiAlbSglZCkiLCBlcnJubyk7CisrCSAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgICAgIGRlZmF1bHRfcnRfcmVwbF9yZXN0ID0gMDsKKysgICAgfQorIAorICAgICByZXR1cm4gMTsKKyB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9jb3B0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2NvcHRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZmYwNmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9jb3B0cy5wYXRjaApAQCAtMCwwICsxLDIxIEBACitwcHA6IHVzZSBidWlsZCBzeXN0ZW0gQ0ZMQUdTIHdoZW4gY29tcGlsaW5nCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitPdmVycmlkZSB0aGUgaGFyZC1jb2RlZCBDT1BUUyBtYWtlIHZhcmlhYmxlcyB3aXRoCitDRkxBR1MuICBBZGQgQ09QVFMgaW50byBvbmUgTWFrZWZpbGUgdGhhdCBkaWQgbm90Cit1c2UgaXQuCisKK1NpZ25lZC1vZmYtYnk6IEpvZSBTbGF0ZXIgPGpzbGF0ZXJAd2luZHJpdmVyLmNvbT4KKworLS0tIGEvcHBwZC9wbHVnaW5zL3JhZGl1cy9NYWtlZmlsZS5saW51eAorKysrIGIvcHBwZC9wbHVnaW5zL3JhZGl1cy9NYWtlZmlsZS5saW51eAorQEAgLTEyLDcgKzEyLDcgQEAgVkVSU0lPTiA9ICQoc2hlbGwgYXdrIC1GICciJyAnL1ZFUlNJT04vIAorIElOU1RBTEwJPSBpbnN0YWxsCisgCisgUExVR0lOPXJhZGl1cy5zbyByYWRhdHRyLnNvIHJhZHJlYWxtcy5zbworLUNGTEFHUz0tSS4gLUkuLi8uLiAtSS4uLy4uLy4uL2luY2x1ZGUgLU8yIC1mUElDIC1EUkNfTE9HX0ZBQ0lMSVRZPUxPR19EQUVNT04KKytDRkxBR1M9LUkuIC1JLi4vLi4gLUkuLi8uLi8uLi9pbmNsdWRlICQoQ09QVFMpIC1mUElDIC1EUkNfTE9HX0ZBQ0lMSVRZPUxPR19EQUVNT04KKyAKKyAjIFVuY29tbWVudCB0aGUgbmV4dCBsaW5lIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgTWljcm9zb2Z0J3MKKyAjIE1TLUNIQVAgYXV0aGVudGljYXRpb24gcHJvdG9jb2wuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9maXgtQ1ZFLTIwMTUtMzMxMC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2ZpeC1DVkUtMjAxNS0zMzEwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZWRiMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9maXgtQ1ZFLTIwMTUtMzMxMC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitwcHA6IEJ1ZmZlciBvdmVyZmxvdyBpbiByYWRpdXMgcGx1Z2luCisKK0Zyb206IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9tc2c9NTtidWc9NzgyNDUwCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworT24gc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiA2NTUzNSBwcm9jZXNzZXMgcnVubmluZywgcHBwZCBhYm9ydHMgd2hlbgorc2VuZGluZyBhICJzdGFydCIgYWNjb3VudGluZyBtZXNzYWdlIHRvIHRoZSBSQURJVVMgc2VydmVyIGJlY2F1c2Ugb2YgYQorYnVmZmVyIG92ZXJmbG93IGluIHJjX21rc2lkLgorCitUaGUgcHJvY2VzcyBpZCBpcyB1c2VkIGluIHJjX21rc2lkIHRvIGdlbmVyYXRlIGEgcHNldWRvLXVuaXF1ZSBzdHJpbmcsCithc3N1bWluZyB0aGF0IHRoZSBoZXggcmVwcmVzZW50YXRpb24gb2YgdGhlIHBpZCB3aWxsIGJlIGF0IG1vc3QgNAorY2hhcmFjdGVycyAoRkZGRikuIF9fc3ByaW50Zl9jaGsoKSwgdXNlZCB3aGVuIGNvbXBpbGluZyB3aXRoCitvcHRpbWl6YXRpb24gbGV2ZWxzIGdyZWF0ZXIgdGhhbiAwIGFuZCBGT1JUSUZZX1NPVVJDRSwgZGV0ZWN0cyB0aGUKK2J1ZmZlciBvdmVyZmxvdyBhbmQgbWFrZXMgcHBwZCBjcmFzaC4KKworVGhlIGZvbGxvd2luZyBwYXRjaCBmaXhlcyB0aGUgcHJvYmxlbS4KKworLS0tIHBwcC0yLjQuNi5vcmlnL3BwcGQvcGx1Z2lucy9yYWRpdXMvdXRpbC5jCisrKysgcHBwLTIuNC42L3BwcGQvcGx1Z2lucy9yYWRpdXMvdXRpbC5jCitAQCAtNzcsNyArNzcsNyBAQCByY19ta3NpZCAodm9pZCkKKyAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbnQgY250ID0gMDsKKyAgIHNwcmludGYgKGJ1ZiwgIiUwOGxYJTA0WCUwMmhYIiwKKyAJICAgKHVuc2lnbmVkIGxvbmcgaW50KSB0aW1lIChOVUxMKSwKKy0JICAgKHVuc2lnbmVkIGludCkgZ2V0cGlkICgpLAorKwkgICAodW5zaWduZWQgaW50KSBnZXRwaWQgKCkgJSA2NTUzNSwKKyAJICAgY250ICYgMHhGRik7CisgICBjbnQrKzsKKyAgIHJldHVybiBidWY7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pbml0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYzAxMzYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvaW5pdApAQCAtMCwwICsxLDU3IEBACisjIS9iaW4vc2gKKyMKKyMgICAvZXRjL2luaXQuZC9wcHA6IHN0YXJ0IG9yIHN0b3AgUFBQIGxpbmsuCisjCisjIElmIHlvdSB3YW50IFBQUCBzdGFydGVkIG9uIGJvb3QgdGltZSAobW9zdCBkaWFsdXAgc3lzdGVtcyB3b24ndCBuZWVkIGl0KQorIyByZW5hbWUgdGhlIC9ldGMvcHBwL25vX3BwcF9vbl9ib290IGZpbGUgdG8gL2V0Yy9wcHAvcHBwX29uX2Jvb3QsIGFuZAorIyBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgY29tbWVudHMgaW4gdGhhdCBmaWxlLgorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKwordGVzdCAteCAvdXNyL3NiaW4vcHBwZCAtYSAtZiAvZXRjL3BwcC9wcHBfb25fYm9vdCB8fCBleGl0IDAKK2lmIFsgLXggL2V0Yy9wcHAvcHBwX29uX2Jvb3QgXTsgdGhlbiBSVU5GSUxFPTE7IGZpCisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKyAgICAgIGVjaG8gLW4gIlN0YXJ0aW5nIHVwIFBQUCBsaW5rOiBwcHBkIgorICAgICAgaWYgWyAiJFJVTkZJTEUiID0gIjEiIF07IHRoZW4KKyAgICAgICAgL2V0Yy9wcHAvcHBwX29uX2Jvb3QKKyAgICAgIGVsc2UKKyAgICAgICAgcHBwZCBjYWxsIHByb3ZpZGVyCisgICAgICBmaQorICAgICAgZWNobyAiLiIKKyAgICA7OworICBzdG9wKQorICAgICAgZWNobyAtbiAiU2h1dHRpbmcgZG93biBQUFAgbGluazogcHBwZCIKKyAgICAgIGlmIFsgIiRSVU5GSUxFIiA9ICIxIiBdOyB0aGVuCisgICAgICAgIHBvZmYKKyAgICAgIGVsc2UKKyAgICAgICAgcG9mZiBwcm92aWRlcgorICAgICAgZmkKKyAgICAgIGVjaG8gIi4iCisgICAgOzsKKyAgc3RhdHVzKQorICAgIHN0YXR1cyAvdXNyL3NiaW4vcHBwZDsKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisgICAgZWNobyAtbiAiUmVzdGFydGluZyBQUFAgbGluazogcHBwZCIKKyAgICBpZiBbICIkUlVORklMRSIgPSAiMSIgXTsgdGhlbiAgICAgIAorICAgICAgcG9mZgorICAgICAgc2xlZXAgNQorICAgICAgL2V0Yy9wcHAvcHBwX29uX2Jvb3QKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgCisgICAgICBwb2ZmIHByb3ZpZGVyCisgICAgICBzbGVlcCA1CisgICAgICBwcHBkIGNhbGwgcHJvdmlkZXIKKyAgICBmaQorICAgIGVjaG8gIi4iCisgICAgOzsKKyAgKikKKyAgICAgIGVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9wcHAge3N0YXJ0fHN0b3B8c3RhdHVzfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIKKyAgICAgIGV4aXQgMQorICAgIDs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvaXAtZG93biBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2lwLWRvd24KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDZkMzU0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2lwLWRvd24KQEAgLTAsMCArMSw0MyBAQAorIyEvYmluL3NoCisjCisjICRJZDogaXAtZG93bix2IDEuMiAxOTk4LzAyLzEwIDIxOjIxOjU1IHBoaWwgRXhwICQKKyMKKyMgVGhpcyBzY3JpcHQgaXMgcnVuIGJ5IHRoZSBwcHBkIF9hZnRlcl8gdGhlIGxpbmsgaXMgYnJvdWdodCBkb3duLgorIyBJdCB1c2VzIHJ1bi1wYXJ0cyB0byBydW4gc2NyaXB0cyBpbiAvZXRjL3BwcC9pcC1kb3duLmQsIHNvIHRvIGRlbGV0ZQorIyByb3V0ZXMsIHVuc2V0IElQIGFkZHJlc3NlcyBldGMuIHlvdSBzaG91bGQgY3JlYXRlIHNjcmlwdChzKSB0aGVyZS4KKyMKKyMgQmUgYXdhcmUgdGhhdCBvdGhlciBwYWNrYWdlcyBtYXkgaW5jbHVkZSAvZXRjL3BwcC9pcC1kb3duLmQgc2NyaXB0cyAobmFtZWQKKyMgYWZ0ZXIgdGhhdCBwYWNrYWdlKSwgc28gY2hvb3NlIGxvY2FsIHNjcmlwdCBuYW1lcyB3aXRoIHRoYXQgaW4gbWluZC4KKyMKKyMgVGhpcyBzY3JpcHQgaXMgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CisjICAgIEFyZyAgTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgRXhhbXBsZQorIyAgICAkMSAgIEludGVyZmFjZSBuYW1lICAgICAgICAgICAgICAgIHBwcDAKKyMgICAgJDIgICBUaGUgdHR5ICAgICAgICAgICAgICAgICAgICAgICB0dHlTMQorIyAgICAkMyAgIFRoZSBsaW5rIHNwZWVkICAgICAgICAgICAgICAgIDM4NDAwCisjICAgICQ0ICAgTG9jYWwgSVAgbnVtYmVyICAgICAgICAgICAgICAgMTIuMzQuNTYuNzgKKyMgICAgJDUgICBQZWVyICBJUCBudW1iZXIgICAgICAgICAgICAgICAxMi4zNC41Ni45OQorIyAgICAkNiAgIE9wdGlvbmFsIGBgaXBwYXJhbScnIHZhbHVlICAgIGZvbworCisjIFRoZSAgZW52aXJvbm1lbnQgaXMgY2xlYXJlZCBiZWZvcmUgZXhlY3V0aW5nIHRoaXMgc2NyaXB0CisjIHNvIHRoZSBwYXRoIG11c3QgYmUgcmVzZXQKK1BBVEg9L3Vzci9sb2NhbC9zYmluOi91c3Ivc2Jpbjovc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL2JpbjovYmluCitleHBvcnQgUEFUSAorIyBUaGVzZSB2YXJpYWJsZXMgYXJlIGZvciB0aGUgdXNlIG9mIHRoZSBzY3JpcHRzIHJ1biBieSBydW4tcGFydHMKK1BQUF9JRkFDRT0iJDEiCitQUFBfVFRZPSIkMiIKK1BQUF9TUEVFRD0iJDMiCitQUFBfTE9DQUw9IiQ0IgorUFBQX1JFTU9URT0iJDUiCitQUFBfSVBQQVJBTT0iJDYiCitleHBvcnQgUFBQX0lGQUNFIFBQUF9UVFkgUFBQX1NQRUVEIFBQUF9MT0NBTCBQUFBfUkVNT1RFIFBQUF9JUFBBUkFNCisKKyMgYXMgYW4gYWRkaXRpb25hbCBjb252ZW5pZW5jZSwgJFBQUF9UVFlOQU1FIGlzIHNldCB0byB0aGUgdHR5IG5hbWUsCisjIHN0cmlwcGVkIG9mIC9kZXYvIChpZiBwcmVzZW50KSBmb3IgZWFzaWVyIG1hdGNoaW5nLgorUFBQX1RUWU5BTUU9YC91c3IvYmluL2Jhc2VuYW1lICIkMiJgCitleHBvcnQgUFBQX1RUWU5BTUUgCisKKyMgTWFpbiBTY3JpcHQgc3RhcnRzIGhlcmUKKworcnVuLXBhcnRzIC9ldGMvcHBwL2lwLWRvd24uZAorCisjIGxhc3QgbGluZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvaXAtdXAgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pcC11cApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYzJmYWU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvaXAtdXAKQEAgLTAsMCArMSw0NCBAQAorIyEvYmluL3NoCisjCisjICRJZDogaXAtdXAsdiAxLjIgMTk5OC8wMi8xMCAyMToyNTozNCBwaGlsIEV4cCAkCisjCisjIFRoaXMgc2NyaXB0IGlzIHJ1biBieSB0aGUgcHBwZCBhZnRlciB0aGUgbGluayBpcyBlc3RhYmxpc2hlZC4KKyMgSXQgdXNlcyBydW4tcGFydHMgdG8gcnVuIHNjcmlwdHMgaW4gL2V0Yy9wcHAvaXAtdXAuZCwgc28gdG8gYWRkIHJvdXRlcywKKyMgc2V0IElQIGFkZHJlc3MsIHJ1biB0aGUgbWFpbHEgZXRjLiB5b3Ugc2hvdWxkIGNyZWF0ZSBzY3JpcHQocykgdGhlcmUuCisjCisjIEJlIGF3YXJlIHRoYXQgb3RoZXIgcGFja2FnZXMgbWF5IGluY2x1ZGUgL2V0Yy9wcHAvaXAtdXAuZCBzY3JpcHRzIChuYW1lZAorIyBhZnRlciB0aGF0IHBhY2thZ2UpLCBzbyBjaG9vc2UgbG9jYWwgc2NyaXB0IG5hbWVzIHdpdGggdGhhdCBpbiBtaW5kLgorIworIyBUaGlzIHNjcmlwdCBpcyBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKKyMgICAgQXJnICBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICBFeGFtcGxlCisjICAgICQxICAgSW50ZXJmYWNlIG5hbWUgICAgICAgICAgICAgICAgcHBwMAorIyAgICAkMiAgIFRoZSB0dHkgICAgICAgICAgICAgICAgICAgICAgIHR0eVMxCisjICAgICQzICAgVGhlIGxpbmsgc3BlZWQgICAgICAgICAgICAgICAgMzg0MDAKKyMgICAgJDQgICBMb2NhbCBJUCBudW1iZXIgICAgICAgICAgICAgICAxMi4zNC41Ni43OAorIyAgICAkNSAgIFBlZXIgIElQIG51bWJlciAgICAgICAgICAgICAgIDEyLjM0LjU2Ljk5CisjICAgICQ2ICAgT3B0aW9uYWwgYGBpcHBhcmFtJycgdmFsdWUgICAgZm9vCisKKyMgVGhlICBlbnZpcm9ubWVudCBpcyBjbGVhcmVkIGJlZm9yZSBleGVjdXRpbmcgdGhpcyBzY3JpcHQKKyMgc28gdGhlIHBhdGggbXVzdCBiZSByZXNldAorUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9zYmluOi9zYmluOi91c3IvbG9jYWwvYmluOi91c3IvYmluOi9iaW4KK2V4cG9ydCBQQVRICisjIFRoZXNlIHZhcmlhYmxlcyBhcmUgZm9yIHRoZSB1c2Ugb2YgdGhlIHNjcmlwdHMgcnVuIGJ5IHJ1bi1wYXJ0cworUFBQX0lGQUNFPSIkMSIKK1BQUF9UVFk9IiQyIgorUFBQX1NQRUVEPSIkMyIKK1BQUF9MT0NBTD0iJDQiCitQUFBfUkVNT1RFPSIkNSIKK1BQUF9JUFBBUkFNPSIkNiIKK2V4cG9ydCBQUFBfSUZBQ0UgUFBQX1RUWSBQUFBfU1BFRUQgUFBQX0xPQ0FMIFBQUF9SRU1PVEUgUFBQX0lQUEFSQU0KKworCisjIGFzIGFuIGFkZGl0aW9uYWwgY29udmVuaWVuY2UsICRQUFBfVFRZTkFNRSBpcyBzZXQgdG8gdGhlIHR0eSBuYW1lLAorIyBzdHJpcHBlZCBvZiAvZGV2LyAoaWYgcHJlc2VudCkgZm9yIGVhc2llciBtYXRjaGluZy4KK1BQUF9UVFlOQU1FPWAvdXNyL2Jpbi9iYXNlbmFtZSAiJDIiYAorZXhwb3J0IFBQUF9UVFlOQU1FIAorCisjIE1haW4gU2NyaXB0IHN0YXJ0cyBoZXJlCisKK3J1bi1wYXJ0cyAvZXRjL3BwcC9pcC11cC5kCisKKyMgbGFzdCBsaW5lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9tYWtlZmlsZS1yZW1vdmUtaGFyZC11c3ItcmVmZXJlbmNlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvbWFrZWZpbGUtcmVtb3ZlLWhhcmQtdXNyLXJlZmVyZW5jZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTk3MTdlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvbWFrZWZpbGUtcmVtb3ZlLWhhcmQtdXNyLXJlZmVyZW5jZS5wYXRjaApAQCAtMCwwICsxLDM3IEBACitUaGUgcGF0Y2ggY29tZXMgZnJvbSBPcGVuRW1iZWRkZWQuCitSZWJhc2VkIGZvciBwcHAtMi40LjUuIERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisKK1VwZGF0ZWQgZnJvbSBPRS1DbGFzc2ljIHRvIGluY2x1ZGUgdGhlIHBjYXAgaHVuay4KK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgT2JlcnJpdHRlciA8b2JpQG9wZW5kcmVhbWJveC5vcmc+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtdXJOIHBwcC0yLjQuNS1vcmlnL3BwcGQvTWFrZWZpbGUubGludXggcHBwLTIuNC41L3BwcGQvTWFrZWZpbGUubGludXgKKy0tLSBwcHAtMi40LjUtb3JpZy9wcHBkL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDQzNjgyMDYzICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNzowODoyMS44MDYzNjMwNDIgKzA4MDAKK0BAIC0xMTcsMTAgKzExNywxMCBAQAorICNMSUJTICAgICArPSAtbHNoYWRvdyAkKExJQlMpCisgZW5kaWYKKyAKKy1pZm5lcSAoJCh3aWxkY2FyZCAvdXNyL2luY2x1ZGUvY3J5cHQuaCksKQorKyNpZm5lcSAoJCh3aWxkY2FyZCAvdXNyL2luY2x1ZGUvY3J5cHQuaCksKQorIENGTEFHUyAgKz0gLURIQVZFX0NSWVBUX0g9MQorIExJQlMJKz0gLWxjcnlwdAorLWVuZGlmCisrI2VuZGlmCisgCisgaWZkZWYgTkVFRERFUworIGlmbmRlZiBVU0VfQ1JZUFQKK0BAIC0xNjksMTAgKzE2OSwxMCBAQAorIGVuZGlmCisgCisgaWZkZWYgRklMVEVSCistaWZuZXEgKCQod2lsZGNhcmQgL3Vzci9pbmNsdWRlL3BjYXAtYnBmLmgpLCkKKysjaWZuZXEgKCQod2lsZGNhcmQgL3Vzci9pbmNsdWRlL3BjYXAtYnBmLmgpLCkKKyBMSUJTICAgICs9IC1scGNhcAorIENGTEFHUyAgKz0gLURQUFBfRklMVEVSCistZW5kaWYKKysjZW5kaWYKKyBlbmRpZgorIAorIGlmZGVmIEhBVkVfSU5FVDYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL21ha2VmaWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQwOWJhZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL21ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsOTUgQEAKK1RoZSBwYXRjaCBjb21lcyBmcm9tIE9wZW5FbWJlZGRlZAorUmViYXNlZCBmb3IgcHBwLTIuNC41LiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2RpZmYgLXJ1TiBwcHAtMi40LjUtb3JpZy9jaGF0L01ha2VmaWxlLmxpbnV4IHBwcC0yLjQuNS9jaGF0L01ha2VmaWxlLmxpbnV4CistLS0gcHBwLTIuNC41LW9yaWcvY2hhdC9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUxOjEyLjA1MDE2NjM5OCArMDgwMAorKysrIHBwcC0yLjQuNS9jaGF0L01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MzAuNDUwMTE4NDQ2ICswODAwCitAQCAtMjUsNyArMjUsNyBAQAorIAorIGluc3RhbGw6IGNoYXQKKyAJbWtkaXIgLXAgJChCSU5ESVIpICQoTUFORElSKQorLQkkKElOU1RBTEwpIC1zIC1jIGNoYXQgJChCSU5ESVIpCisrCSQoSU5TVEFMTCkgLWMgY2hhdCAkKEJJTkRJUikKKyAJJChJTlNUQUxMKSAtYyAtbSA2NDQgY2hhdC44ICQoTUFORElSKQorIAorIGNsZWFuOgorZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcGQvTWFrZWZpbGUubGludXggcHBwLTIuNC41L3BwcGQvTWFrZWZpbGUubGludXgKKy0tLSBwcHAtMi40LjUtb3JpZy9wcHBkL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDQzNjgyMDYzICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MjoxMS4yMTQxNzA2MDcgKzA4MDAKK0BAIC05OSw3ICs5OSw3IEBACisgQ0ZMQUdTCSs9IC1EVVNFX1NSUCAtRE9QRU5TU0wgLUkvdXNyL2xvY2FsL3NzbC9pbmNsdWRlCisgTElCUwkrPSAtbHNycCAtTC91c3IvbG9jYWwvc3NsL2xpYiAtbGNyeXB0bworIFRBUkdFVFMJKz0gc3JwLWVudHJ5CistRVhUUkFJTlNUQUxMID0gJChJTlNUQUxMKSAtcyAtYyAtbSA1NTUgc3JwLWVudHJ5ICQoQklORElSKS9zcnAtZW50cnkKKytFWFRSQUlOU1RBTEwgPSAkKElOU1RBTEwpIC1jIC1tIDU1NSBzcnAtZW50cnkgJChCSU5ESVIpL3NycC1lbnRyeQorIE1BTlBBR0VTICs9IHNycC1lbnRyeS44CisgRVhUUkFDTEVBTiArPSBzcnAtZW50cnkubworIE5FRURERVM9eQorQEAgLTIwMCw3ICsyMDAsNyBAQAorIGluc3RhbGw6IHBwcGQKKyAJbWtkaXIgLXAgJChCSU5ESVIpICQoTUFORElSKQorIAkkKEVYVFJBSU5TVEFMTCkKKy0JJChJTlNUQUxMKSAtcyAtYyAtbSA1NTUgcHBwZCAkKEJJTkRJUikvcHBwZAorKwkkKElOU1RBTEwpIC1jIC1tIDU1NSBwcHBkICQoQklORElSKS9wcHBkCisgCWlmIGNoZ3JwIHBwcHVzZXJzICQoQklORElSKS9wcHBkIDI+L2Rldi9udWxsOyB0aGVuIFwKKyAJICBjaG1vZCBvLXJ4LHUrcyAkKEJJTkRJUikvcHBwZDsgZmkKKyAJJChJTlNUQUxMKSAtYyAtbSA0NDQgcHBwZC44ICQoTUFORElSKQorZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcGQvcGx1Z2lucy9yYWRpdXMvTWFrZWZpbGUubGludXggcHBwLTIuNC41L3BwcGQvcGx1Z2lucy9yYWRpdXMvTWFrZWZpbGUubGludXgKKy0tLSBwcHAtMi40LjUtb3JpZy9wcHBkL3BsdWdpbnMvcmFkaXVzL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDQ3Njc2MTg3ICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvcGx1Z2lucy9yYWRpdXMvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1Mzo0Ny43NTAxODIyNjcgKzA4MDAKK0BAIC0zNiwxMSArMzYsMTEgQEAKKyAKKyBpbnN0YWxsOiBhbGwKKyAJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChMSUJESVIpCistCSQoSU5TVEFMTCkgLXMgLWMgLW0gNzU1IHJhZGl1cy5zbyAkKExJQkRJUikKKy0JJChJTlNUQUxMKSAtcyAtYyAtbSA3NTUgcmFkYXR0ci5zbyAkKExJQkRJUikKKy0JJChJTlNUQUxMKSAtcyAtYyAtbSA3NTUgcmFkcmVhbG1zLnNvICQoTElCRElSKQorLQkkKElOU1RBTEwpIC1jIC1tIDQ0NCBwcHBkLXJhZGl1cy44ICQoTUFORElSKQorLQkkKElOU1RBTEwpIC1jIC1tIDQ0NCBwcHBkLXJhZGF0dHIuOCAkKE1BTkRJUikKKysJJChJTlNUQUxMKSAtYyAtbSA3NTUgcmFkaXVzLnNvICQoTElCRElSKQorKwkkKElOU1RBTEwpIC1jIC1tIDc1NSByYWRhdHRyLnNvICQoTElCRElSKQorKwkkKElOU1RBTEwpIC1jIC1tIDc1NSByYWRyZWFsbXMuc28gJChMSUJESVIpCisrCSQoSU5TVEFMTCkgLW0gNDQ0IHBwcGQtcmFkaXVzLjggJChNQU5ESVIpCisrCSQoSU5TVEFMTCkgLW0gNDQ0IHBwcGQtcmFkYXR0ci44ICQoTUFORElSKQorIAorIHJhZGl1cy5zbzogcmFkaXVzLm8gbGlicmFkaXVzY2xpZW50LmEKKyAJJChDQykgLW8gcmFkaXVzLnNvIC1zaGFyZWQgcmFkaXVzLm8gbGlicmFkaXVzY2xpZW50LmEKK2RpZmYgLXJ1TiBwcHAtMi40LjUtb3JpZy9wcHBkL3BsdWdpbnMvcnAtcHBwb2UvTWFrZWZpbGUubGludXggcHBwLTIuNC41L3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUxOjEyLjA0NzY3NjE4NyArMDgwMAorKysrIHBwcC0yLjQuNS9wcHBkL3BsdWdpbnMvcnAtcHBwb2UvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MzoxNS40NTQ0ODY4NzcgKzA4MDAKK0BAIC00Myw5ICs0Myw5IEBACisgCisgaW5zdGFsbDogYWxsCisgCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICQoTElCRElSKQorLQkkKElOU1RBTEwpIC1zIC1jIC1tIDQ1NTAgcnAtcHBwb2Uuc28gJChMSUJESVIpCisrCSQoSU5TVEFMTCkgLWMgLW0gNDU1MCBycC1wcHBvZS5zbyAkKExJQkRJUikKKyAJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChCSU5ESVIpCistCSQoSU5TVEFMTCkgLXMgLWMgLW0gNTU1IHBwcG9lLWRpc2NvdmVyeSAkKEJJTkRJUikKKysJJChJTlNUQUxMKSAtYyAtbSA1NTUgcHBwb2UtZGlzY292ZXJ5ICQoQklORElSKQorIAorIGNsZWFuOgorIAlybSAtZiAqLm8gKi5zbyBwcHBvZS1kaXNjb3ZlcnkKK2RpZmYgLXJ1TiBwcHAtMi40LjUtb3JpZy9wcHBkdW1wL01ha2VmaWxlLmxpbnV4IHBwcC0yLjQuNS9wcHBkdW1wL01ha2VmaWxlLmxpbnV4CistLS0gcHBwLTIuNC41LW9yaWcvcHBwZHVtcC9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUxOjEyLjA1ODE4MzM4MyArMDgwMAorKysrIHBwcC0yLjQuNS9wcHBkdW1wL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTI6MjUuNzYyMTgzNTM3ICswODAwCitAQCAtMTcsNSArMTcsNSBAQAorIAorIGluc3RhbGw6CisgCW1rZGlyIC1wICQoQklORElSKSAkKE1BTkRJUikKKy0JJChJTlNUQUxMKSAtcyAtYyBwcHBkdW1wICQoQklORElSKQorKwkkKElOU1RBTEwpIC1jIHBwcGR1bXAgJChCSU5ESVIpCisgCSQoSU5TVEFMTCkgLWMgLW0gNDQ0IHBwcGR1bXAuOCAkKE1BTkRJUikKK2RpZmYgLXJ1TiBwcHAtMi40LjUtb3JpZy9wcHBzdGF0cy9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvcHBwc3RhdHMvTWFrZWZpbGUubGludXgKKy0tLSBwcHAtMi40LjUtb3JpZy9wcHBzdGF0cy9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUxOjEyLjA1ODE4MzM4MyArMDgwMAorKysrIHBwcC0yLjQuNS9wcHBzdGF0cy9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUyOjQyLjQ4NjM0MTA4MSArMDgwMAorQEAgLTIyLDcgKzIyLDcgQEAKKyAKKyBpbnN0YWxsOiBwcHBzdGF0cworIAktbWtkaXIgLXAgJChNQU5ESVIpCistCSQoSU5TVEFMTCkgLXMgLWMgcHBwc3RhdHMgJChCSU5ESVIpCisrCSQoSU5TVEFMTCkgLWMgcHBwc3RhdHMgJChCSU5ESVIpCisgCSQoSU5TVEFMTCkgLWMgLW0gNDQ0IHBwcHN0YXRzLjggJChNQU5ESVIpCisgCisgcHBwc3RhdHM6ICQoUFBQU1RBVFNSQ1MpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wYXAgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkzYzMyNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BhcApAQCAtMCwwICsxLDIyIEBACisjIFlvdSBjYW4gdXNlIHRoaXMgc2NyaXB0IHVubW9kaWZpZWQgdG8gY29ubmVjdCB0byBzaXRlcyB3aGljaCBhbGxvdworIyBhdXRoZW50aWNhdGlvbiB2aWEgUEFQLCBDSEFQIGFuZCBzaW1pbGFyIHByb3RvY29scy4KKyMgVGhpcyBzY3JpcHQgY2FuIGJlIHNoYXJlZCBhbW9uZyBkaWZmZXJlbnQgcHBwZCBwZWVyIGNvbmZpZ3VyYXRpb25zLgorIyBUbyB1c2UgaXQsIGFkZCBzb21ldGhpbmcgbGlrZSB0aGlzIHRvIHlvdXIgL2V0Yy9wcHAvcGVlcnMvIGZpbGU6CisjCisjIGNvbm5lY3QgIi91c3Ivc2Jpbi9jaGF0IC12IC1mIC9ldGMvY2hhdHNjcmlwdHMvcGFwIC1UIFBIT05FLU5VTUJFUiIKKyMgdXNlciBZT1VSLVVTRVJOQU1FLUlOLVBBUC1TRUNSRVRTCisjIG5vYXV0aAorCisjIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gc2VlIHRoZSBjb25uZWN0IHNwZWVkLgorIyBJdCB3aWxsIGJlIGxvZ2dlZCB0byBzdGRlcnIgb3IgdG8gdGhlIGZpbGUgc3BlY2lmaWVkIHdpdGggdGhlIC1yIGNoYXQgb3B0aW9uLgorI1JFUE9SVAkJQ09OTkVDVAorCitBQk9SVAkJQlVTWQorQUJPUlQJCVZPSUNFCitBQk9SVAkJIk5PIENBUlJJRVIiCitBQk9SVAkJIk5PIERJQUxUT05FIgorQUJPUlQJCSJOTyBESUFMIFRPTkUiCisiIgkJQVRaCitPSwkJQVREVFxUCitDT05ORUNUCQkiIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wb2ZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcG9mZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTIxYTk0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcG9mZgpAQCAtMCwwICsxLDI2IEBACisjIS9iaW4vc2gKKworIyBMZXRzIHNlZSBob3cgbWFueSBwcHBkcyBhcmUgcnVubmluZy4uLi4KK3NldCAtLSBgY2F0IC92YXIvcnVuL3BwcCoucGlkIDI+L2Rldi9udWxsYAorCitjYXNlICQjIGluCisgIDApICMgcHBwZCBvbmx5IGNyZWF0ZXMgYSBwaWQgZmlsZSBvbmNlIHBwcCBpcyB1cCwgc28gbGV0J3MgdHJ5IGtpbGxpbmcgcHBwZAorICAgICAjIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgd2UndmUgbm90IGdvdCB0aGF0IGZhciB5ZXQuCisgICAgIGtpbGxhbGwgcHBwZAorICAgICA7OworICAxKSAjIElmIG9ubHkgb25lIHdhcyBydW5uaW5nIHRoZW4gaXQgY2FuIGJlIGtpbGxlZCAoYXBwYXJlbnRseSBraWxsYWxsCisgICAgICMgY2F1c2VkIHByb2JsZW1zIGZvciBzb21lLCBzbyBsZXRzIHRyeSBraWxsaW5nIHRoZSBwaWQgZnJvbSB0aGUgZmlsZSkKKyAgICAga2lsbCAkMQorICAgICA7OworICAqKSAjIE1vcmUgdGhhbiBvbmUhIEFpZWVoaC4uIERvbnQga25vdyB3aGljaCBvbmUgdG8ga2lsbC4KKyAgICAgZWNobyAiTW9yZSB0aGFuIG9uZSBwcHBkIHJ1bm5pbmcuIE5vbmUgc3RvcHBlZCIKKyAgICAgZXhpdCAxCisgICAgIDs7Citlc2FjCisKK2lmIFsgLXIgL3Zhci9ydW4vcHBwLXF1aWNrIF0KK3RoZW4KKyAgICBybSAtZiAvdmFyL3J1bi9wcHAtcXVpY2sKK2ZpCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcG9uIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcG9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYzA1OTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wb24KQEAgLTAsMCArMSw5IEBACisjIS9iaW4vc2gKKworaWYgWyAiJDEiID0gInF1aWNrIiBdCit0aGVuCisgICAgdG91Y2ggL3Zhci9ydW4vcHBwLXF1aWNrCisgICAgc2hpZnQKK2ZpCisKKy91c3Ivc2Jpbi9wcHBkIGNhbGwgJHsxOi1wcm92aWRlcn0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BwcEAuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BwcEAuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmYwYjVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHBwQC5zZXJ2aWNlCkBAIC0wLDAgKzEsOSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1QUFAgbGluayB0byAlSQorQmVmb3JlPW5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0PUBTQklORElSQC9wcHBkIGNhbGwgJUkgbm9kZXRhY2ggbm9sb2cKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHBwX29uX2Jvb3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBfb25fYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzkzNzYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHBwX29uX2Jvb3QKQEAgLTAsMCArMSwyMSBAQAorIyMjIS9iaW4vc2gKKyMKKyMgICBSZW5hbWUgdGhpcyBmaWxlIHRvIHBwcF9vbl9ib290IGFuZCBwcHBkIHdpbGwgYmUgZmlyZWQgdXAgYXMKKyMgICBzb29uIGFzIHRoZSBzeXN0ZW0gY29tZXMgdXAsIGNvbm5lY3RpbmcgdG8gYHByb3ZpZGVyJy4KKyMKKyMgICBJZiB5b3UgYWxzbyBtYWtlIHRoaXMgZmlsZSBleGVjdXRhYmxlLCBhbmQgcmVwbGFjZSB0aGUgZmlyc3QgbGluZQorIyAgIHdpdGgganVzdCAiIyEvYmluL3NoIiwgdGhlIGNvbW1hbmRzIGJlbG93IHdpbGwgYmUgZXhlY3V0ZWQgaW5zdGVhZC4KKyMKKworIyBUaGUgbG9jYXRpb24gb2YgdGhlIHBwcCBkYWVtb24gaXRzZWxmIChzaG91bGRuJ3QgbmVlZCB0byBiZSBjaGFuZ2VkKQorUFBQRD0vdXNyL3NiaW4vcHBwZAorCisjIFRoZSBkZWZhdWx0IHByb3ZpZGVyIHRvIGNvbm5lY3QgdG8KKyRQUFBEIGNhbGwgcHJvdmlkZXIKKworIyBBZGRpdGlvbmFsIGNvbm5lY3Rpb25zLCB3aGljaCB3b3VsZCBqdXN0IHVzZSBzZXR0aW5ncyBmcm9tCisjIC9ldGMvcHBwL29wdGlvbnMuPHR0eT4KKyMkUFBQRCB0dHlTMAorIyRQUFBEIHR0eVMxCisjJFBQUEQgdHR5UzIKKyMkUFBQRCB0dHlTMwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHBwZC1yZXNvbHYtdmFycnVuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHBwZC1yZXNvbHYtdmFycnVuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MjQxNGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBkLXJlc29sdi12YXJydW4ucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorVGhlIHBhdGNoIGNvbWVzIGZyb20gT3BlbkVtYmVkZGVkCitSZWJhc2VkIGZvciBwcHAtMi40LjUuIERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK2RpZmYgLXJ1TiBwcHAtMi40LjUtb3JpZy9wcHBkL2lwY3AuYyBwcHAtMi40LjUvcHBwZC9pcGNwLmMKKy0tLSBwcHAtMi40LjUtb3JpZy9wcHBkL2lwY3AuYwkyMDEwLTA2LTMwIDE1OjUxOjEyLjA1MDE2NjM5OCArMDgwMAorKysrIHBwcC0yLjQuNS9wcHBkL2lwY3AuYwkyMDEwLTA2LTMwIDE3OjAyOjMzLjkzMDM5MzI4MyArMDgwMAorQEAgLTU1LDYgKzU1LDggQEAKKyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyAKKyAjaW5jbHVkZSAicHBwZC5oIgorICNpbmNsdWRlICJmc20uaCIKK0BAIC0yMDk1LDYgKzIwOTcsMTQgQEAKKyAgICAgdV9pbnQzMl90IHBlZXJkbnMxLCBwZWVyZG5zMjsKKyB7CisgICAgIEZJTEUgKmY7CisrICAgIHN0cnVjdCBzdGF0IGRpcmluZm87CisrCisrICAgIGlmKHN0YXQoX1BBVEhfT1VURElSLCAmZGlyaW5mbykpIHsKKysgICAgICAgIGlmKG1rZGlyKF9QQVRIX09VVERJUiwgMDc3NSkpIHsKKysgICAgICAgICAgICBlcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXM6ICVtIiwgX1BBVEhfT1VURElSKTsKKysgICAgICAgICAgICByZXR1cm47CisrICAgICAgICB9CisrICAgIH0KKyAKKyAgICAgZiA9IGZvcGVuKF9QQVRIX1JFU09MViwgInciKTsKKyAgICAgaWYgKGYgPT0gTlVMTCkgeworZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcGQvcGF0aG5hbWVzLmggcHBwLTIuNC41L3BwcGQvcGF0aG5hbWVzLmgKKy0tLSBwcHAtMi40LjUtb3JpZy9wcHBkL3BhdGhuYW1lcy5oCTIwMTAtMDYtMzAgMTU6NTE6MTIuMDQzNjgyMDYzICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvcGF0aG5hbWVzLmgJMjAxMC0wNi0zMCAxNzowMzoyMC41OTQzNzEwNTUgKzA4MDAKK0BAIC0zMCw3ICszMCw4IEBACisgI2RlZmluZSBfUEFUSF9UVFlPUFQJIF9ST09UX1BBVEggIi9ldGMvcHBwL29wdGlvbnMuIgorICNkZWZpbmUgX1BBVEhfQ09OTkVSUlMJIF9ST09UX1BBVEggIi9ldGMvcHBwL2Nvbm5lY3QtZXJyb3JzIgorICNkZWZpbmUgX1BBVEhfUEVFUkZJTEVTCSBfUk9PVF9QQVRIICIvZXRjL3BwcC9wZWVycy8iCistI2RlZmluZSBfUEFUSF9SRVNPTFYJIF9ST09UX1BBVEggIi9ldGMvcHBwL3Jlc29sdi5jb25mIgorKyNkZWZpbmUgX1BBVEhfT1VURElSCV9ST09UX1BBVEggX1BBVEhfVkFSUlVOICIvcHBwIgorKyNkZWZpbmUgX1BBVEhfUkVTT0xWCV9QQVRIX09VVERJUiAiL3Jlc29sdi5jb25mIgorIAorICNkZWZpbmUgX1BBVEhfVVNFUk9QVAkgIi5wcHByYyIKKyAjZGVmaW5lCV9QQVRIX1BTRVVET05ZTQkgIi5wcHBfcHNldWRvbnltIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHJvdmlkZXIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcm92aWRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzRkNzFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHJvdmlkZXIKQEAgLTAsMCArMSwzNSBAQAorIyBleGFtcGxlIGNvbmZpZ3VyYXRpb24gZm9yIGEgZGlhbHVwIGNvbm5lY3Rpb24gYXV0aGVudGljYXRlZCB3aXRoIFBBUCBvciBDSEFQCisjCisjIFRoaXMgaXMgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB1c2VkIGJ5IHBvbigxKSBhbmQgcG9mZigxKS4KKyMgU2VlIHRoZSBtYW51YWwgcGFnZSBwcHBkKDgpIGZvciBpbmZvcm1hdGlvbiBvbiBhbGwgdGhlIG9wdGlvbnMuCisKKyMgTVVTVCBDSEFOR0U6IHJlcGxhY2UgbXl1c2VybmFtZUByZWFsbSB3aXRoIHRoZSBQUFAgbG9naW4gbmFtZSBnaXZlbiB0bworIyB5b3VyIGJ5IHlvdXIgcHJvdmlkZXIuCisjIFRoZXJlIHNob3VsZCBiZSBhIG1hdGNoaW5nIGVudHJ5IHdpdGggdGhlIHBhc3N3b3JkIGluIC9ldGMvcHBwL3BhcC1zZWNyZXRzCisjIGFuZC9vciAvZXRjL3BwcC9jaGFwLXNlY3JldHMuCit1c2VyICJteXVzZXJuYW1lQHJlYWxtIgorCisjIE1VU1QgQ0hBTkdFOiByZXBsYWNlICoqKioqKioqIHdpdGggdGhlIHBob25lIG51bWJlciBvZiB5b3VyIHByb3ZpZGVyLgorIyBUaGUgL2V0Yy9jaGF0c2NyaXB0cy9wYXAgY2hhdCBzY3JpcHQgbWF5IGJlIG1vZGlmaWVkIHRvIGNoYW5nZSB0aGUKKyMgbW9kZW0gaW5pdGlhbGl6YXRpb24gc3RyaW5nLgorY29ubmVjdCAiL3Vzci9zYmluL2NoYXQgLXYgLWYgL2V0Yy9jaGF0c2NyaXB0cy9wYXAgLVQgKioqKioqKioiCisKKyMgU2VyaWFsIGRldmljZSB0byB3aGljaCB0aGUgbW9kZW0gaXMgY29ubmVjdGVkLgorL2Rldi9tb2RlbQorCisjIFNwZWVkIG9mIHRoZSBzZXJpYWwgbGluZS4KKzExNTIwMAorCisjIEFzc3VtZXMgdGhhdCB5b3VyIElQIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IGJ5IHRoZSBJU1AuCitub2lwZGVmYXVsdAorIyBUcnkgdG8gZ2V0IHRoZSBuYW1lIHNlcnZlciBhZGRyZXNzZXMgZnJvbSB0aGUgSVNQLgordXNlcGVlcmRucworIyBVc2UgdGhpcyBjb25uZWN0aW9uIGFzIHRoZSBkZWZhdWx0IHJvdXRlLgorZGVmYXVsdHJvdXRlCisKKyMgTWFrZXMgcHBwZCAiZGlhbCBhZ2FpbiIgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBsb3N0LgorcGVyc2lzdAorCisjIERvIG5vdCBhc2sgdGhlIHJlbW90ZSB0byBhdXRoZW50aWNhdGUuCitub2F1dGgKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHBfMi40LjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcF8yLjQuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGMzOGUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHBfMi40LjcuYmIKQEAgLTAsMCArMSw5NyBAQAorU1VNTUFSWSA9ICJQb2ludC10by1Qb2ludCBQcm90b2NvbCAoUFBQKSBzdXBwb3J0IgorREVTQ1JJUFRJT04gPSAicHBwIChQYXVsJ3MgUFBQIFBhY2thZ2UpIGlzIGFuIG9wZW4gc291cmNlIHBhY2thZ2Ugd2hpY2ggaW1wbGVtZW50cyBcCit0aGUgUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgKFBQUCkgb24gTGludXggYW5kIFNvbGFyaXMgc3lzdGVtcy4iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0hPTUVQQUdFID0gImh0dHA6Ly9zYW1iYS5vcmcvcHBwLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3BwcC5zYW1iYS5vcmcvY2dpLWJpbi9wcHAtYnVncyIKK0RFUEVORFMgPSAibGlicGNhcCIKK0xJQ0VOU0UgPSAiQlNEICYgR1BMdjIrICYgTEdQTHYyKyAmIFBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vcHBwZC9jY3AuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTI5O21kNT1lMmM0M2ZlNmU4MWZmNzdkODdkYzljMjkwYTQyNGRlYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wcHBkL3BsdWdpbnMvcGFzc3Byb21wdC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTA7bWQ1PTNiY2JjZGJmMGUzNjljOWEzZTBiOGM4Mjc1YjA2NWQ4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BwcGQvdGRiLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNzttZDU9NGNhM2E5OTkxYjAxMTAzOGQwODVkNjY3NWFlN2M0ZTYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY2hhdC9jaGF0LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xNTttZDU9MGQzNzRiODU0NWVlNWM2MmQ3YWZmMWFjYmQzOGFkZDIiCisKK1NSQ19VUkkgPSAiaHR0cDovL3BwcC5zYW1iYS5vcmcvZnRwL3BwcC9wcHAtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL21ha2VmaWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NpZmRlZnJvdXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BwcGQtcmVzb2x2LXZhcnJ1bi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlZmlsZS1yZW1vdmUtaGFyZC11c3ItcmVmZXJlbmNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BvbiBcCisgICAgICAgICAgIGZpbGU6Ly9wb2ZmIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vaXAtdXAgXAorICAgICAgICAgICBmaWxlOi8vaXAtZG93biBcCisgICAgICAgICAgIGZpbGU6Ly8wOHNldHVwZG5zIFwKKyAgICAgICAgICAgZmlsZTovLzkycmVtb3ZlZG5zIFwKKyAgICAgICAgICAgZmlsZTovL2NvcHRzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BhcCBcCisgICAgICAgICAgIGZpbGU6Ly9wcHBfb25fYm9vdCBcCisgICAgICAgICAgIGZpbGU6Ly9wcm92aWRlciBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBwcC1GaXgtY29tcGlsYXRpb24tZXJyb3JzLWluLU1ha2VmaWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BwcEAuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtQ1ZFLTIwMTUtMzMxMC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ODgxOGY0MGU2ZDMzYTFkMWRlNjhhMTU1MWY2NTk1YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMmUwYTNkZDNlNDc5OWUzMzEwM2Y3MGVjN2RmNzUzNDhjODU0MDk2NmVlN2M5NDhlNGVkOGE0MmJiY2NmYjMwIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgc3lzdGVtZAorCitUQVJHRVRfQ0NfQVJDSCArPSAiICR7TERGTEFHU30iCitFWFRSQV9PRU1BS0UgPSAiU1RSSVBQUk9HPSR7U1RSSVB9IE1BTkRJUj0ke0R9JHtkYXRhZGlyfS9tYW4vbWFuOCBJTkNESVI9JHtEfSR7aW5jbHVkZWRpcn0gTElCRElSPSR7RH0ke2xpYmRpcn0vcHBwZC8ke1BWfSBCSU5ESVI9JHtEfSR7c2JpbmRpcn0iCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXN0cmlwIgorCisjIFBhY2thZ2UgTWFrZWZpbGUgY29tcHV0ZXMgQ0ZMQUdTLCByZWZlcmVuY2luZyBDT1BUUy4KKyMgVHlwaWNhbGx5IGhhcmQtY29kZWQgdG8gJy1PMiAtZycgaW4gdGhlIE1ha2VmaWxlJ3MuCisjCitFWFRSQV9PRU1BS0UgKz0gJyBDT1BUUz0iJHtDRkxBR1N9IC1JJHtTfS9pbmNsdWRlIicKKworZG9fY29uZmlndXJlICgpIHsKKwlvZV9ydW5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwltYWtlIGluc3RhbGwtZXRjcHBwIEVUQ0RJUj0ke0R9LyR7c3lzY29uZmRpcn0vcHBwCisJbWtkaXIgLXAgJHtEfSR7YmluZGlyfS8gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vcHBwL2lwLXVwLmQvCisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vcHBwL2lwLWRvd24uZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wb24gJHtEfSR7YmluZGlyfS9wb24KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wb2ZmICR7RH0ke2JpbmRpcn0vcG9mZgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3BwcAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2lwLXVwICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pcC1kb3duICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS8wOHNldHVwZG5zICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC9pcC11cC5kLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9LzkycmVtb3ZlZG5zICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC9pcC1kb3duLmQvCisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vY2hhdHNjcmlwdHMKKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9wcHAvcGVlcnMKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wYXAgJHtEfSR7c3lzY29uZmRpcn0vY2hhdHNjcmlwdHMKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wcHBfb25fYm9vdCAke0R9JHtzeXNjb25mZGlyfS9wcHAvcHBwX29uX2Jvb3QKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wcm92aWRlciAke0R9JHtzeXNjb25mZGlyfS9wcHAvcGVlcnMvcHJvdmlkZXIKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcHBwQC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkgICAgICAgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcHBwQC5zZXJ2aWNlCisJcm0gLXJmICR7RH0vJHttYW5kaXJ9L21hbjgvbWFuOAorCWNobW9kIHUrcyAke0R9JHtzYmluZGlyfS9wcHBkCit9CisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3BwcC9wYXAtc2VjcmV0cyAke3N5c2NvbmZkaXJ9L3BwcC9jaGFwLXNlY3JldHMgJHtzeXNjb25mZGlyfS9wcHAvb3B0aW9ucyIKK1BBQ0tBR0VTID0rICIke1BOfS1vYSAke1BOfS1vZSAke1BOfS1yYWRpdXMgJHtQTn0td2luYmluZCAke1BOfS1taW5jb25uICR7UE59LXBhc3N3b3JkICR7UE59LWwydHAgJHtQTn0tdG9vbHMiCitGSUxFU18ke1BOfSAgICAgICAgPSAiJHtzeXNjb25mZGlyfSAke2JpbmRpcn0gJHtzYmluZGlyfS9jaGF0ICR7c2JpbmRpcn0vcHBwZCAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3BwcEAuc2VydmljZSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3BwcGQvJHtQVn0vLmRlYnVnIgorRklMRVNfJHtQTn0tb2EgICAgICAgPSAiJHtsaWJkaXJ9L3BwcGQvJHtQVn0vcHBwb2F0bS5zbyIKK0ZJTEVTXyR7UE59LW9lICAgICAgID0gIiR7c2JpbmRpcn0vcHBwb2UtZGlzY292ZXJ5ICR7bGliZGlyfS9wcHBkLyR7UFZ9L3JwLXBwcG9lLnNvIgorRklMRVNfJHtQTn0tcmFkaXVzICAgPSAiJHtsaWJkaXJ9L3BwcGQvJHtQVn0vcmFkaXVzLnNvICR7bGliZGlyfS9wcHBkLyR7UFZ9L3JhZGF0dHIuc28gJHtsaWJkaXJ9L3BwcGQvJHtQVn0vcmFkcmVhbG1zLnNvIgorRklMRVNfJHtQTn0td2luYmluZCAgPSAiJHtsaWJkaXJ9L3BwcGQvJHtQVn0vd2luYmluZC5zbyIKK0ZJTEVTXyR7UE59LW1pbmNvbm4gID0gIiR7bGliZGlyfS9wcHBkLyR7UFZ9L21pbmNvbm4uc28iCitGSUxFU18ke1BOfS1wYXNzd29yZCA9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS9wYXNzKi5zbyIKK0ZJTEVTXyR7UE59LWwydHAgICAgID0gIiR7bGliZGlyfS9wcHBkLyR7UFZ9LypsMnRwLnNvIgorRklMRVNfJHtQTn0tdG9vbHMgICAgPSAiJHtzYmluZGlyfS9wcHBzdGF0cyAke3NiaW5kaXJ9L3BwcGR1bXAiCitTVU1NQVJZXyR7UE59LW9hICAgICAgID0gIlBsdWdpbiBmb3IgUFBQIGZvciBQUFAtb3Zlci1BVE0gc3VwcG9ydCIKK1NVTU1BUllfJHtQTn0tb2UgICAgICAgPSAiUGx1Z2luIGZvciBQUFAgZm9yIFBQUC1vdmVyLUV0aGVybmV0IHN1cHBvcnQiCitTVU1NQVJZXyR7UE59LXJhZGl1cyAgID0gIlBsdWdpbiBmb3IgUFBQIGZvciBSQURJVVMgc3VwcG9ydCIKK1NVTU1BUllfJHtQTn0td2luYmluZCAgPSAiUGx1Z2luIGZvciBQUFAgdG8gYXV0aGVudGljYXRlIGFnYWluc3QgU2FtYmEgb3IgV2luZG93cyIKK1NVTU1BUllfJHtQTn0tbWluY29ubiAgPSAiUGx1Z2luIGZvciBQUFAgdG8gc2V0IGEgZGVsYXkgYmVmb3JlIHRoZSBpZGxlIHRpbWVvdXQgYXBwbGllcyIKK1NVTU1BUllfJHtQTn0tcGFzc3dvcmQgPSAiUGx1Z2luIGZvciBQUFAgdG8gZ2V0IHBhc3N3b3JkcyB2aWEgYSBwaXBlIgorU1VNTUFSWV8ke1BOfS1sMnRwICAgICA9ICJQbHVnaW4gZm9yIFBQUCBmb3IgbDJ0cCBzdXBwb3J0IgorU1VNTUFSWV8ke1BOfS10b29scyAgICA9ICJBZGRpdGlvbmFsIHRvb2xzIGZvciB0aGUgUFBQIHBhY2thZ2UiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mLzk5X3Jlc29sdmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mLzk5X3Jlc29sdmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc5MGQ3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yZXNvbHZjb25mL3Jlc29sdmNvbmYvOTlfcmVzb2x2Y29uZgpAQCAtMCwwICsxLDQgQEAKK2Qgcm9vdCByb290IDA3NTUgL3Zhci9ydW4vcmVzb2x2Y29uZi9pbnRlcmZhY2Ugbm9uZQorZiByb290IHJvb3QgMDY0NCAvZXRjL3Jlc29sdmNvbmYvcnVuL3Jlc29sdi5jb25mIG5vbmUKK2Ygcm9vdCByb290IDA2NDQgL2V0Yy9yZXNvbHZjb25mL3J1bi9lbmFibGUtdXBkYXRlcyBub25lCitsIHJvb3Qgcm9vdCAwNjQ0IC9ldGMvcmVzb2x2LmNvbmYgL2V0Yy9yZXNvbHZjb25mL3J1bi9yZXNvbHYuY29uZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZi9maXgtcGF0aC1mb3ItYnVzeWJveC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yZXNvbHZjb25mL3Jlc29sdmNvbmYvZml4LXBhdGgtZm9yLWJ1c3lib3gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFlYWQwNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yZXNvbHZjb25mL3Jlc29sdmNvbmYvZml4LXBhdGgtZm9yLWJ1c3lib3gucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorCitidXN5Ym94IGluc3RhbGxzIHJlYWRsaW5rIGludG8gL3Vzci9iaW4sIHNvIGVuc3VyZSAvdXNyL2JpbgoraXMgaW4gdGhlIHBhdGguCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiByZXNvbHZjb25mLTEuNzYvZXRjL3Jlc29sdmNvbmYvdXBkYXRlLmQvbGliYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJlc29sdmNvbmYtMS43Ni5vcmlnL2V0Yy9yZXNvbHZjb25mL3VwZGF0ZS5kL2xpYmMKKysrKyByZXNvbHZjb25mLTEuNzYvZXRjL3Jlc29sdmNvbmYvdXBkYXRlLmQvbGliYworQEAgLTE2LDcgKzE2LDcgQEAKKyAjCisgCisgc2V0IC1lCistUEFUSD0vc2JpbjovYmluCisrUEFUSD0vc2JpbjovYmluOi91c3IvYmluCisgCisgWyAteCAvbGliL3Jlc29sdmNvbmYvbGlzdC1yZWNvcmRzIF0gfHwgZXhpdCAxCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mXzEuNzcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mXzEuNzcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE2YjlmMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yZXNvbHZjb25mL3Jlc29sdmNvbmZfMS43Ny5iYgpAQCAtMCwwICsxLDYzIEBACitTVU1NQVJZID0gIm5hbWUgc2VydmVyIGluZm9ybWF0aW9uIGhhbmRsZXIiCitERVNDUklQVElPTiA9ICJSZXNvbHZjb25mIGlzIGEgZnJhbWV3b3JrIGZvciBrZWVwaW5nIHRyYWNrIG9mIHRoZSBzeXN0ZW0ncyBcCitpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50bHkgYXZhaWxhYmxlIG5hbWVzZXJ2ZXJzLiBJdCBzZXRzIFwKK2l0c2VsZiB1cCBhcyB0aGUgaW50ZXJtZWRpYXJ5IGJldHdlZW4gcHJvZ3JhbXMgdGhhdCBzdXBwbHkgXAorbmFtZXNlcnZlciBpbmZvcm1hdGlvbiBhbmQgcHJvZ3JhbXMgdGhhdCBuZWVkIG5hbWVzZXJ2ZXIgXAoraW5mb3JtYXRpb24uIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM5M2MwNTUwYmQzMTczZjQ1MDRiMmNiZDg5OTFlNTBiIgorQVVUSE9SID0gIlRob21hcyBIb29kIgorSE9NRVBBR0UgPSAiaHR0cDovL3BhY2thZ2VzLmRlYmlhbi5vcmcvcmVzb2x2Y29uZiIKK1JERVBFTkRTXyR7UE59ID0gImJhc2giCisKK1NSQ19VUkkgPSAiaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vMjAxNTA1MTFUMjE0NzE4Wi9wb29sL21haW4vci8ke0JQTn0vJHtCUE59XyR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcGF0aC1mb3ItYnVzeWJveC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly85OV9yZXNvbHZjb25mIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MzYyZDc2NmU0N2JmYzI1MzUwMGY0MmIzMDMzMGQ5ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1YTZlMjFlOGJhNjgyMmE1ZjkzMDc1YzhjOGZlNzk3N2UzNDc4MGJhNTUxYWY1MTkzMGQwYjMxZmRkOTlhYjU2IgorCitpbmhlcml0IGFsbGFyY2gKKworZG9fY29tcGlsZSAoKSB7CisJOgorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vOTlfcmVzb2x2Y29uZiAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZAorCQllY2hvICJkIC9ydW4vJHtCUE59L2ludGVyZmFjZSAtIC0gLSAtIiBcCisJCSAgICAgPiAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kL3Jlc29sdmNvbmYuY29uZgorCWZpCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2xpYmRpcn0vJHtCUE59CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS8ke0JQTn0KKwlsbiAtc25mICR7bG9jYWxzdGF0ZWRpcn0vcnVuLyR7QlBOfSAke0R9JHtzeXNjb25mZGlyfS8ke0JQTn0vcnVuCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfSAke0R9JHtiYXNlX3NiaW5kaXJ9CisJaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjggJHtEfSR7ZG9jZGlyfS8ke1B9CisJY3AgLXBQUiBldGMvKiAke0R9JHtzeXNjb25mZGlyfS8KKwljaG93biAtUiByb290OnJvb3QgJHtEfSR7c3lzY29uZmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9yZXNvbHZjb25mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9saXN0LXJlY29yZHMgJHtEfSR7YmFzZV9saWJkaXJ9LyR7QlBOfQorCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtdXAuZAorCWluc3RhbGwgLW0gMDc1NSBkZWJpYW4vcmVzb2x2Y29uZi4wMDByZXNvbHZjb25mLmlmLXVwICR7RH0vJHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXVwLmQvMDAwcmVzb2x2Y29uZgorCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtZG93bi5kCisJaW5zdGFsbCAtbSAwNzU1IGRlYmlhbi9yZXNvbHZjb25mLnJlc29sdmNvbmYuaWYtZG93biAke0R9LyR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1kb3duLmQvcmVzb2x2Y29uZgorCWluc3RhbGwgLW0gMDY0NCBSRUFETUUgJHtEfSR7ZG9jZGlyfS8ke1B9LworCWluc3RhbGwgLW0gMDY0NCBtYW4vcmVzb2x2Y29uZi44ICR7RH0ke21hbmRpcn0vbWFuOC8KK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiBbIC16ICIkRCIgXTsgdGhlbgorCQlpZiBjb21tYW5kIC12IHN5c3RlbWQtdG1wZmlsZXMgPi9kZXYvbnVsbDsgdGhlbgorCQkJc3lzdGVtZC10bXBmaWxlcyAtLWNyZWF0ZSAke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvcmVzb2x2Y29uZi5jb25mCisJCWVsaWYgWyAtZSAke3N5c2NvbmZkaXJ9L2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCBdOyB0aGVuCisJCQkke3N5c2NvbmZkaXJ9L2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCB1cGRhdGUKKwkJZmkKKwlmaQorfQorCitGSUxFU18ke1BOfSArPSAiJHtiYXNlX2xpYmRpcn0vJHtCUE59IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3NvY2F0L3NvY2F0L01ha2VmaWxlLmluLWZpeC1mb3ItcGFyYWxsZWwtYnVpbGQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXQvTWFrZWZpbGUuaW4tZml4LWZvci1wYXJhbGxlbC1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTRkYjY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3NvY2F0L3NvY2F0L01ha2VmaWxlLmluLWZpeC1mb3ItcGFyYWxsZWwtYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSBjNmYwMDgwYjU1Njc5YjZlOGI1ZDMzMmQ2ZTA1ZmRjYmRhMWU0MDY0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDQgTWF5IDIwMTUgMDA6NTg6NDcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGUuaW46IGZpeCBmb3IgcGFyYWxsZWwgYnVpbGQKKworRml4ZWQ6Cit2c25wcmludGZfci5vOiBmaWxlIG5vdCByZWNvZ25pemVkOiBGaWxlIHRydW5jYXRlZAorY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAzIGV4aXQgc3RhdHVzCitNYWtlZmlsZToxMjI6IHJlY2lwZSBmb3IgdGFyZ2V0ICdmaWxhbicgZmFpbGVkCisKK0xldCBmaWxhbiBkZXBlbmQgb24gdnNucHJpbnRmX3IubyBhbmQgc25wcmludGVyci5vIHRvIGZpeCB0aGUgaXNzdWUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggZjJhNmVkYi4uODhiNzg0YiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTExOCw3ICsxMTgsNyBAQCBQUk9DQU5fT0JKUz1wcm9jYW5fbWFpbi5vIHByb2Nhbi5vIHByb2Nhbi1jZGVmcy5vIGhvc3Rhbi5vIGVycm9yLm8gc3ljbHMubyBzeXN1dAorIHByb2NhbjogJChQUk9DQU5fT0JKUykKKyAJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgJChQUk9DQU5fT0JKUykgJChDTElCUykKKyAKKy1maWxhbjogZmlsYW5fbWFpbi5vIGZpbGFuLm8gZmRuYW1lLm8gZXJyb3IubyBzeWNscy5vIHN5c3V0aWxzLm8gdXRpbHMubworK2ZpbGFuOiBmaWxhbl9tYWluLm8gZmlsYW4ubyBmZG5hbWUubyBlcnJvci5vIHN5Y2xzLm8gc3lzdXRpbHMubyB1dGlscy5vIHZzbnByaW50Zl9yLm8gc25wcmludGVyci5vCisgCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRAIGZpbGFuX21haW4ubyBmaWxhbi5vIGZkbmFtZS5vIGVycm9yLm8gc3ljbHMubyBzeXN1dGlscy5vIHV0aWxzLm8gdnNucHJpbnRmX3IubyBzbnByaW50ZXJyLm8gJChDTElCUykKKyAKKyBsaWJ4aW8uYTogJChYSU9PQkpTKSAkKFVUTE9CSlMpCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3NvY2F0L3NvY2F0XzEuNy4zLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXRfMS43LjMuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNThlMGE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3NvY2F0L3NvY2F0XzEuNy4zLjAuYmIKQEAgLTAsMCArMSwzOCBAQAorU1VNTUFSWSA9ICJNdWx0aXB1cnBvc2UgcmVsYXkgZm9yIGJpZGlyZWN0aW9uYWwgZGF0YSB0cmFuc2ZlciIKK0RFU0NSSVBUSU9OID0gIlNvY2F0IGlzIGEgcmVsYXkgZm9yIGJpZGlyZWN0aW9uYWwgZGF0YSBcCit0cmFuc2ZlciBiZXR3ZWVuIHR3byBpbmRlcGVuZGVudCBkYXRhIGNoYW5uZWxzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZGVzdC11bnJlYWNoLm9yZy9zb2NhdC8iCisKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorCitERVBFTkRTID0gIm9wZW5zc2wgcmVhZGxpbmUiCisKK0xJQ0VOU0UgPSAiR1BMLTIuMCstd2l0aC1PcGVuU1NMLWV4Y2VwdGlvbiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MjU3O2VuZGxpbmU9Mjg3O21kNT0zMzhjMDVlYWRkMDEzODcyYWJiMWQ2ZTE5OGUxMGEzZiIKKworCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZGVzdC11bnJlYWNoLm9yZy9zb2NhdC9kb3dubG9hZC9zb2NhdC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLmluLWZpeC1mb3ItcGFyYWxsZWwtYnVpbGQucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjYwN2VkYjY1YmM2YzU3ZjRhNDNmMDYyNDc1MDQyNzQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDc2N2U4NTBjMDMyOWI5ZmRmNzExYzZjZDQ2ODU2NWNiYmIyODc4NmJhMWE4YTFjYmQ1NTMxZDQwMTZiM2UwNCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1leGNsdWRlPWF1dG9oZWFkZXIiCisKK0VYVFJBX09FQ09ORiArPSAiYWNfY3ZfaGF2ZV96X21vZGlmaWVyPXllcyBzY19jdl9zeXNfY3JkbHlfc2hpZnQ9OSBcCisgICAgICAgIHNjX2N2X3N5c190YWJkbHlfc2hpZnQ9MTEgc2NfY3Zfc3lzX2NzaXplX3NoaWZ0PTQgXAorICAgICAgICBhY19jdl9pc3BlZWRfb2Zmc2V0PTEzIFwKKyAgICAgICAgYWNfY3ZfaGVhZGVyX2JzZF9saWJ1dGlsX2g9bm8gXAorIgorCitQQUNLQUdFQ09ORklHID8/PSAidGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1t0Y3Atd3JhcHBlcnNdID0gIi0tZW5hYmxlLWxpYndyYXAsLS1kaXNhYmxlLWxpYndyYXAsdGNwLXdyYXBwZXJzIgorCitkb19pbnN0YWxsX3ByZXBlbmQgKCkgeworICAgIG1rZGlyIC1wICR7RH0ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0gJHtEfSR7bWFuZGlyfS9tYW4xCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvYXZvaWRfc3RyaXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvYXZvaWRfc3RyaXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM0ZTI0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9hdm9pZF9zdHJpcC5wYXRjaApAQCAtMCwwICsxLDIxIEBACit3aXJlbGVzc190b29sczogQXZvaWQgc3RyaXBwaW5nIGl3bXVsdGljYWxsCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCisgIFRoZSByZW1vdmVkIGNvZGUgd2FzIGZyb20gdXBzdHJlYW0uCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtdXIgd2lyZWxlc3NfdG9vbHMuMjkub3JpZy9NYWtlZmlsZSB3aXJlbGVzc190b29scy4yOS9NYWtlZmlsZQorLS0tIHdpcmVsZXNzX3Rvb2xzLjI5Lm9yaWcvTWFrZWZpbGUJMjAxMS0wNi0xOCAxMTozNToxMi4xODM5MDc0NTMgLTA1MDAKKysrKyB3aXJlbGVzc190b29scy4yOS9NYWtlZmlsZQkyMDExLTA2LTE4IDExOjM4OjA5Ljk5NTkwNzk4NSAtMDUwMAorQEAgLTEzNSw5ICsxMzUsOCBAQAorIAorIG1hY2FkZHI6IG1hY2FkZHIubyAkKElXTElCKQorIAorLSMgQWx3YXlzIGRvIHN5bWJvbCBzdHJpcHBpbmcgaGVyZQorIGl3bXVsdGljYWxsOiBpd211bHRpY2FsbC5vCistCSQoQ0MpICQoTERGTEFHUykgLVdsLC1zICQoWENGTEFHUykgLW8gJEAgJF4gJChMSUJTKQorKwkkKENDKSAkKExERkxBR1MpICQoU1RSSVBGTEFHUykgJChYQ0ZMQUdTKSAtbyAkQCAkXiAkKExJQlMpCisgCisgIyBJdCdzIGEga2luZCBvZiBtYWdpYy4uLgorIHdpcmVsZXNzLmg6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvbGRmbGFncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMGQ4Y2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDIyIEBACit3aXJlbGVzcy10b29sczogUmVtb3ZlIFFBIHdhcm5pbmc6IE5vIEdOVV9IQVNIIGluIHRoZSBlbGYgYmluYXJ5CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCisgIFVzZWZ1bCB3aXRoaW4gYml0YmFrZSBlbnZpcm9ubWVudCBvbmx5LgorCitTaWduZWQtb2ZmLWJ5OiBNdWhhbW1hZCBTaGFrZWVsIDxtdWhhbW1hZF9zaGFrZWVsQG1lbnRvci5jb20+CisKKy0tLQorIE1ha2VmaWxlIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCistLS0gd2lyZWxlc3NfdG9vbHMuMjkub3JpZy9NYWtlZmlsZQorKysrIHdpcmVsZXNzX3Rvb2xzLjI5L01ha2VmaWxlCitAQCAtMTQ0LDcgKzE0NCw3IEBAIHdpcmVsZXNzLmg6CisgCisgIyBDb21waWxhdGlvbiBvZiB0aGUgZHluYW1pYyBsaWJyYXJ5CisgJChEWU5BTUlDKTogJChPQkpTOi5vPS5zbykKKy0JJChDQykgLXNoYXJlZCAtbyAkQCAtV2wsLXNvbmFtZSwkQCAkKFNUUklQRkxBR1MpICQoTElCUykgLWxjICReCisrCSQoQ0MpIC1zaGFyZWQgLW8gJEAgLVdsLC1zb25hbWUsJEAgJChMREZMQUdTKSAkKFNUUklQRkxBR1MpICQoTElCUykgLWxjICReCisgCisgIyBDb21waWxhdGlvbiBvZiB0aGUgc3RhdGljIGxpYnJhcnkKKyAkKFNUQVRJQyk6ICQoT0JKUzoubz0uc28pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvbWFuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL21hbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTc1N2RhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL21hbi5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiB3aXJlbGVzc190b29scy4zMC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdpcmVsZXNzX3Rvb2xzLjMwLm9yaWcvTWFrZWZpbGUJMjAxNC0wMi0wMSAwMDoyMTowNC4xNDg0NjMzODIgLTA4MDAKKysrKyB3aXJlbGVzc190b29scy4zMC9NYWtlZmlsZQkyMDE0LTAyLTAxIDAwOjIzOjM1LjQ0ODA3MjI3OSAtMDgwMAorQEAgLTc2LDcgKzc2LDcgQEAKKyBJTlNUQUxMX0RJUj0gJChQUkVGSVgpL3NiaW4KKyBJTlNUQUxMX0xJQj0gJChQUkVGSVgpL2xpYgorIElOU1RBTExfSU5DPSAkKFBSRUZJWCkvaW5jbHVkZQorLUlOU1RBTExfTUFOPSAkKFBSRUZJWCkvbWFuCisrSU5TVEFMTF9NQU49ICQoUFJFRklYKS9zaGFyZS9tYW4KKyAKKyAjIFZhcmlvdXMgY29tbWFuZHMKKyBSTSA9IHJtIC1mCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyMmMzZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitXaGVuIC9ldGMvbGQuc28uY2FjaGUgaXMgd3JpdGVhYmxlIGJ5IHVzZXIgcnVubmluZyBiaXRiYWtlIHRoZW4gaXQgY3JlYXRlcyBpbnZhbGlkIGNhY2hlIAorKGluIG15IGNhc2UgbGlic3RkYysrLnNvIGNhbm5vdCBiZSBmb3VuZCBhZnRlciBidWlsZGluZyB6bGliKC1uYXRpdmUpIGFuZCBJIGhhdmUgdG8gY2FsbCAKK3RvdWNoICovbGlic3RkYysrLnNvICYmIC9zYmluL2xkY29uZmlnIHRvIGZpeCBpdC4KKworU28gcmVtb3ZlIGxkY29uZmlnIGNhbGwgZnJvbSBtYWtlIGluc3RhbGwtbGlicworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworZGlmZiAtdU5yIHdpcmVsZXNzX3Rvb2xzLjI5Lm9yaWcvTWFrZWZpbGUgd2lyZWxlc3NfdG9vbHMuMjkvTWFrZWZpbGUKKy0tLSB3aXJlbGVzc190b29scy4yOS5vcmlnL01ha2VmaWxlCTIwMDctMDktMTggMDE6NTY6NDYuMDAwMDAwMDAwICswMjAwCisrKysgd2lyZWxlc3NfdG9vbHMuMjkvTWFrZWZpbGUJMjAxMi0wMi0xNSAyMDo0Njo0MS43ODA3NjM1MTQgKzAxMDAKK0BAIC0xNjMsNyArMTYzLDYgQEAKKyAJaW5zdGFsbCAtbSA3NTUgJChEWU5BTUlDKSAkKElOU1RBTExfTElCKQorIAlsbiAtc2ZuICQoRFlOQU1JQykgJChJTlNUQUxMX0xJQikvJChEWU5BTUlDX0xJTkspCisgCUBlY2hvICIqKiogRG9uJ3QgZm9yZ2V0IHRvIGFkZCAkKElOU1RBTExfTElCKSB0byAvZXRjL2xkLnNvLmNvbmYsIGFuZCBydW4gbGRjb25maWcgYXMgcm9vdC4gKioqIgorLQlAJChMRENPTkZJRykgfHwgZWNobyAiKioqIENvdWxkIG5vdCBydW4gbGRjb25maWcgISAqKioiCisgCisgIyBJbnN0YWxsIHRoZSBzdGF0aWMgbGlicmFyeQorIGluc3RhbGwtc3RhdGljOjogJChTVEFUSUMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMuaWYtcHJlLXVwIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzLmlmLXByZS11cApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNTE4YTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzLmlmLXByZS11cApAQCAtMCwwICsxLDEyMiBAQAorIyEvYmluL3NoCisKK2Nhc2UgIiRNRVRIT0QiIGluIGxvb3BiYWNrKSBleGl0IDAgOzsgZXNhYworCitJV0NPTkZJRz0vc2Jpbi9pd2NvbmZpZworSVdQUklWPS9zYmluL2l3cHJpdgorCitpZiBbICEgLXggJElXQ09ORklHIF07IHRoZW4KKyAgZXhpdCAwCitmaQorCisjIERldGVjdCBhbmQgZG8gbm90aGluZyBmb3IgbGludXgtd2xhbi1uZyBpbnRlcmZhY2VzOworIyB3aGljaCBhcmUgY29uZmlndXJlZCBieSB0aGllciBvd24gaWYtcHJlLXVwIHNjcmlwdC4KK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19UWVBFIiAtYSAiJElGX1dJUkVMRVNTX1RZUEUiID0gIndsYW4tbmciIF07IHRoZW4KKyAgZXhpdCAwCitmaQorCitpZiBbIC1uICIkSUZfTkVFRFNfUkVTRVQiIF07IHRoZW4KKyAgJElXUFJJViAiJElGQUNFIiByZXNldCAxCisgIHNsZWVwIDEKK2ZpCisKK2lmIFsgLW4gIiRJRl9ORUVEU19GSVJNV0FSRSIgXTsgdGhlbgorICAkSUZfTkVFRFNfRklSTVdBUkUgIiRJRkFDRSIKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19TRU5TIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBzZW5zICRJRl9XSVJFTEVTU19TRU5TCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfUkFURSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgcmF0ZSAkSUZfV0lSRUxFU1NfUkFURQorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX1JUUyIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgcnRzICRJRl9XSVJFTEVTU19SVFMKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19GUkFHIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBmcmFnICRJRl9XSVJFTEVTU19GUkFHCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfUE9XRVIiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHBvd2VyICRJRl9XSVJFTEVTU19QT1dFUgorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX1BPV0VSUEVSSU9EIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBwb3dlciBwZXJpb2QgJElGX1dJUkVMRVNTX1BPV0VSUEVSSU9ECitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfUE9XRVJUSU1FT1VUIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBwb3dlciB0aW1lb3V0ICRJRl9XSVJFTEVTU19QT1dFUlRJTUVPVVQKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19UWFBPV0VSIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiB0eHBvd2VyICRJRl9XSVJFTEVTU19UWFBPV0VSCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfUkVUUlkiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHJldHJ5ICRJRl9XSVJFTEVTU19SRVRSWQorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX05JQ0siIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIG5pY2sgIiRJRl9XSVJFTEVTU19OSUNLIgorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX05XSUQiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIG53aWQgIiRJRl9XSVJFTEVTU19OV0lEIgorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0VOQyIgXTsgdGhlbgorICBldmFsICRJV0NPTkZJRyAiJElGQUNFIiBlbmMgJElGX1dJUkVMRVNTX0VOQworZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0tFWSIgXTsgdGhlbgorICBldmFsICRJV0NPTkZJRyAiJElGQUNFIiBrZXkgJElGX1dJUkVMRVNTX0tFWQorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0tFWTEiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGtleSBbMV0gIiRJRl9XSVJFTEVTU19LRVkxIgorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0tFWTIiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGtleSBbMl0gIiRJRl9XSVJFTEVTU19LRVkyIgorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0tFWTMiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGtleSBbM10gIiRJRl9XSVJFTEVTU19LRVkzIgorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0tFWTQiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGtleSBbNF0gIiRJRl9XSVJFTEVTU19LRVk0IgorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0RFRkFVTFRLRVkiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGtleSBbIiRJRl9XSVJFTEVTU19ERUZBVUxUS0VZIl0KK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19LRVlNT0RFIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBrZXkgIiRJRl9XSVJFTEVTU19LRVlNT0RFIgorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX01PREUiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIG1vZGUgJElGX1dJUkVMRVNTX01PREUKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19GUkVRIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBmcmVxICRJRl9XSVJFTEVTU19GUkVRCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfQ0hBTk5FTCIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgY2hhbm5lbCAkSUZfV0lSRUxFU1NfQ0hBTk5FTAorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0VTU0lEIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBlc3NpZCAiJElGX1dJUkVMRVNTX0VTU0lEIgorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0NPTU1JVCIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgY29tbWl0CitmaQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvenp6LXdpcmVsZXNzLmlmLXByZS11cCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy96enotd2lyZWxlc3MuaWYtcHJlLXVwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOGU5NWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvenp6LXdpcmVsZXNzLmlmLXByZS11cApAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKyMKKyMgL2V0Yy9uZXR3b3JrL2lmLXByZS11cC5kL3p6ei13aXJlbGVzcworIyBieSBTdGVmYW4gVG9tYW5layAoc3RlZmFuQHBpY28ucnVoci5kZSkKKworCitJV0NPTkZJRz0vc2Jpbi9pd2NvbmZpZworSUZDT05GSUc9L3NiaW4vaWZjb25maWcKK0dSRVA9L2Jpbi9ncmVwCitMT0dHRVI9L3Vzci9iaW4vbG9nZ2VyCitTTEVFUD0vYmluL3NsZWVwCisKKyMgSG93IGxvbmcgZG8gd2Ugd2FpdCBmb3IgYXNzb2NpYXRpb24/CitSRVRSSUVTPTE1CitTTEVFUFRJTUU9MQorCisjIE9ubHkgc2xlZXAgaWYgd2UgdXNlIERIQ1AgKGFkZCBvdGhlcnMgbWV0aG9kcyBzZXBlcmF0ZWQgYnkgc3BhY2VzKQorT05MWV9GT1I9InN0YXRpYyBkaGNwIgorCitpZiBbIC16ICIkSUZfV0lSRUxFU1NfVFlQRSIgXSAmJiBlY2hvICIkT05MWV9GT1IiIHwgZ3JlcCAtcSAiJE1FVEhPRCIgOyB0aGVuCisJJElGQ09ORklHICRJRkFDRSB1cAorCSRMT0dHRVIgQ2hlY2tpbmcgZm9yIFdMQU4gYXNzb2NpYXRpb24uLi4KKwl3aGlsZSAoIFsgJFJFVFJJRVMgLWd0IDAgXSAmJiAoJElXQ09ORklHICIkSUZBQ0UiIHwgJEdSRVAgLXEgIkFjY2VzcyBQb2ludDogTm90LUFzc29jaWF0ZWQiKSApOyBkbworCQkkTE9HR0VSIE5vIGFzc29jaWF0aW9uIHlldCwgJFJFVFJJRVMgcmV0cmllcyB1bnRpbCB0aW1lb3V0CisJCVJFVFJJRVM9JCgoJFJFVFJJRVMtMSkpCisJCSRTTEVFUCAkU0xFRVBUSU1FCisJZG9uZQorCQorCWlmIFsgJFJFVFJJRVMgLWVxIDAgXTsgdGhlbgorCQkkTE9HR0VSIFRpbWVvdXQgd2FpdGluZyBmb3IgYXNzb2NpYXRpb24sIGNvbnRpbnVpbmcgYW55d2F5Li4uCisJZWxzZQorCQkkTE9HR0VSIEZvdW5kIGFzc29jaWF0aW9uIQorCWZpCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzXzMwLnByZTkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHNfMzAucHJlOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmVjZGYzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzXzMwLnByZTkuYmIKQEAgLTAsMCArMSw1NiBAQAorU1VNTUFSWSA9ICJUb29scyBmb3IgdGhlIExpbnV4IFN0YW5kYXJkIFdpcmVsZXNzIEV4dGVuc2lvbiBTdWJzeXN0ZW0iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4L1Rvb2xzLmh0bWwiCitMSUNFTlNFID0gIkdQTHYyICYgKExHUEx2Mi4xIHwgTVBMLTEuMSB8IEJTRCkiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisJCQlmaWxlOi8vaXdjb25maWcuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTEyO21kNT1jZjcxMGViMTc5NWMzNzZlYjEwZWE0ZmYwNDY0OWNhZiBcCisJCQlmaWxlOi8vaXdldmVudC5jO2JlZ2lubGluZT01OTtlbmRsaW5lPTcyO21kNT1kNjZhMTAwMjZkNDM5NGYwYTViMWM1NTg3YmNlNDUzNyBcCisJCQlmaWxlOi8vc2FtcGxlX2VuYy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9NDttZDU9ODM4MzcyYmUwNzg3NDI2MGI1NjZiYWUyZjZlZDMzYjYiCitTRUNUSU9OID0gImJhc2UiCitQRSA9ICIxIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvd2lyZWxlc3NfdG9vbHMuJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3dpcmVsZXNzLXRvb2xzLmlmLXByZS11cCBcCisgICAgICAgICAgIGZpbGU6Ly96enotd2lyZWxlc3MuaWYtcHJlLXVwIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hdm9pZF9zdHJpcC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sZGZsYWdzLnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiY2E5MWJhN2M3ZWZmOWJmZmY2OTI2YjFhMzRhNDY5N2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWJkOWM1Yzk4YWJmMWZkZDExODkyYWMyZjhhNTY3Mzc1NDRmZTEwMWUxYmUyN2M2MjQxYTU2NDk0OGYzNGM2MyIKKworUyA9ICIke1dPUktESVJ9L3dpcmVsZXNzX3Rvb2xzLjMwIgorCitDRkxBR1MgPSsgIi1JJHtTfSIKK0VYVFJBX09FTUFLRSA9ICItZSAnQlVJTERfU0hBUkVEPXknIFwKKwkJJ0lOU1RBTExfRElSPSR7RH0ke2Jhc2Vfc2JpbmRpcn0nIFwKKwkJJ0lOU1RBTExfTElCPSR7RH0ke2xpYmRpcn0nIFwKKwkJJ0lOU1RBTExfSU5DPSR7RH0ke2luY2x1ZGVkaXJ9JyBcCisJCSdJTlNUQUxMX01BTj0ke0R9JHttYW5kaXJ9JyIKKworZG9fY29tcGlsZSgpIHsKKwlvZV9ydW5tYWtlIGFsbCBsaWJpdy5hCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBQUkVGSVg9JHtEfSBpbnN0YWxsLWl3bXVsdGljYWxsIGluc3RhbGwtZHluYW1pYyBpbnN0YWxsLW1hbiBpbnN0YWxsLWhkcgorCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgaWZyZW5hbWUgJHtEfSR7c2JpbmRpcn0vaWZyZW5hbWUKKwkjIERpc2FibGVkIGJ5IFJQIC0gMjAvOC8wOCAtIFdlIGRvbid0IHNlZW0gdG8gbmVlZC91c2UgdGhlc2UKKwkjaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXByZS11cC5kCisJI2luc3RhbGwgJHtXT1JLRElSfS93aXJlbGVzcy10b29scy5pZi1wcmUtdXAgJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1wcmUtdXAuZC93aXJlbGVzcy10b29scworCSNpbnN0YWxsICR7V09SS0RJUn0venp6LXdpcmVsZXNzLmlmLXByZS11cCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXByZS11cC5kL3p6ei13aXJlbGVzcworfQorCitQQUNLQUdFUyA9ICJsaWJpdy1kYmcgaWZyZW5hbWUtZGJnICR7UE59LWRiZyBcCitsaWJpdyBsaWJpdy1kZXYgbGliaXctZG9jIGlmcmVuYW1lLWRvYyBpZnJlbmFtZSAke1BOfSAke1BOfS1kb2MiCisKK0ZJTEVTX2xpYml3LWRiZyA9ICIke2xpYmRpcn0vLmRlYnVnLyouc28uKiIKK0ZJTEVTX2lmcmVuYW1lLWRiZyA9ICIke3NiaW5kaXJ9Ly5kZWJ1Zy9pZnJlbmFtZSIKK0ZJTEVTX2xpYml3ID0gIiR7bGliZGlyfS8qLnNvLioiCitGSUxFU19saWJpdy1kZXYgPSAiJHtsaWJkaXJ9LyouYSAke2xpYmRpcn0vKi5zbyAke2luY2x1ZGVkaXJ9IgorRklMRVNfbGliaXctZG9jID0gIiR7bWFuZGlyfS9tYW43IgorRklMRVNfaWZyZW5hbWUgPSAiJHtzYmluZGlyfS9pZnJlbmFtZSIKK0ZJTEVTX2lmcmVuYW1lLWRvYyA9ICIke21hbmRpcn0vbWFuOC9pZnJlbmFtZS44ICR7bWFuZGlyfS9tYW41L2lmdGFiLjUiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0gJHtzYmluZGlyfS9pdyogJHtiYXNlX3NiaW5kaXJ9ICR7YmFzZV9iaW5kaXJ9ICR7c3lzY29uZmRpcn0vbmV0d29yayIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke21hbmRpcn0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1BUC1XTU0tRml4LWludGVnZXItdW5kZXJmbG93LWluLVdNTS1BY3Rpb24tZnJhbWUtcGFyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDEtQVAtV01NLUZpeC1pbnRlZ2VyLXVuZGVyZmxvdy1pbi1XTU0tQWN0aW9uLWZyYW1lLXBhci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODI2NzRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDEtQVAtV01NLUZpeC1pbnRlZ2VyLXVuZGVyZmxvdy1pbi1XTU0tQWN0aW9uLWZyYW1lLXBhci5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEZhbiBYaW4gPGZhbi54aW5AanAuZnVqaXRzdS5jb20+CisKK0Zyb20gZWY1NjZhNGQ0Zjc0MDIyZTFmZGIwYTJhZGRmZTgxZTZkZTlmNGFhZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CitEYXRlOiBXZWQsIDI5IEFwciAyMDE1IDAyOjIxOjUzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIEFQIFdNTTogRml4IGludGVnZXIgdW5kZXJmbG93IGluIFdNTSBBY3Rpb24gZnJhbWUgcGFyc2VyCisKK1RoZSBsZW5ndGggb2YgdGhlIFdNTSBBY3Rpb24gZnJhbWUgd2FzIG5vdCBwcm9wZXJseSB2YWxpZGF0ZWQgYW5kIHRoZQorbGVuZ3RoIG9mIHRoZSBpbmZvcm1hdGlvbiBlbGVtZW50cyAoaW50IGxlZnQpIGNvdWxkIGVuZCB1cCBiZWluZworbmVnYXRpdmUuIFRoaXMgd291bGQgcmVzdWx0IGluIHJlYWRpbmcgc2lnbmlmaWNhbnRseSBwYXN0IHRoZSBzdGFjaworYnVmZmVyIHdoaWxlIHBhcnNpbmcgdGhlIElFcyBpbiBpZWVlODAyXzExX3BhcnNlX2VsZW1zKCkgYW5kIHdoaWxlIGRvaW5nCitzbywgcmVzdWx0aW5nIGluIHNlZ21lbnRhdGlvbiBmYXVsdC4KKworVGhpcyBjYW4gcmVzdWx0IGluIGFuIGludmFsaWQgZnJhbWUgYmVpbmcgdXNlZCBmb3IgYSBkZW5pYWwgb2Ygc2VydmljZQorYXR0YWNrIChob3N0YXBkIHByb2Nlc3Mga2lsbGVkKSBhZ2FpbnN0IGFuIEFQIHdpdGggYSBkcml2ZXIgdGhhdCB1c2VzCitob3N0YXBkIGZvciBtYW5hZ2VtZW50IGZyYW1lIHByb2Nlc3NpbmcgKGUuZy4sIGFsbCBtYWM4MDIxMS1iYXNlZAorZHJpdmVycykuCisKK1RoYW5rcyB0byBLb3N0eWEgS29ydGNoaW5za3kgb2YgR29vZ2xlIHNlY3VyaXR5IHRlYW0gZm9yIGRpc2NvdmVyaW5nIGFuZAorcmVwb3J0aW5nIHRoaXMgaXNzdWUuCisKK1NpZ25lZC1vZmYtYnk6IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CistLS0KKyBzcmMvYXAvd21tLmMgfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9hcC93bW0uYyBiL3NyYy9hcC93bW0uYworaW5kZXggNmQ0MTc3Yy4uMzE0ZTI0NCAxMDA2NDQKKy0tLSBhL3NyYy9hcC93bW0uYworKysrIGIvc3JjL2FwL3dtbS5jCitAQCAtMjc0LDYgKzI3NCw5IEBAIHZvaWQgaG9zdGFwZF93bW1fYWN0aW9uKHN0cnVjdCBob3N0YXBkX2RhdGEgKmhhcGQsCisgCQlyZXR1cm47CisgCX0KKyAKKysJaWYgKGxlZnQgPCAwKQorKwkJcmV0dXJuOyAvKiBub3QgYSB2YWxpZCBXTU0gQWN0aW9uIGZyYW1lICovCisrCisgCS8qIGV4dHJhY3QgdGhlIHRzcGVjIGluZm8gZWxlbWVudCAqLworIAlpZiAoaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhwb3MsIGxlZnQsICZlbGVtcywgMSkgPT0gUGFyc2VGYWlsZWQpIHsKKyAJCWhvc3RhcGRfbG9nZ2VyKGhhcGQsIG1nbXQtPnNhLCBIT1NUQVBEX01PRFVMRV9JRUVFODAyMTEsCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLUVBUC1wd2QtcGVlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tbWkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1FQVAtcHdkLXBlZXItRml4LXBheWxvYWQtbGVuZ3RoLXZhbGlkYXRpb24tZm9yLUNvbW1pLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYmFmYzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1FQVAtcHdkLXBlZXItRml4LXBheWxvYWQtbGVuZ3RoLXZhbGlkYXRpb24tZm9yLUNvbW1pLnBhdGNoCkBAIC0wLDAgKzEsNzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSBkZDJmMDQzYzljNDNkMTU2NDk0ZTMzZDdjZTIyZGI5NmU2ZWY0MmM3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IEZyaSwgMSBNYXkgMjAxNSAxNjozNzo0NSArMDMwMAorU3ViamVjdDogW1BBVENIIDEvNV0gRUFQLXB3ZCBwZWVyOiBGaXggcGF5bG9hZCBsZW5ndGggdmFsaWRhdGlvbiBmb3IgQ29tbWl0CisgYW5kIENvbmZpcm0KKworVGhlIGxlbmd0aCBvZiB0aGUgcmVjZWl2ZWQgQ29tbWl0IGFuZCBDb25maXJtIG1lc3NhZ2UgcGF5bG9hZHMgd2FzIG5vdAorY2hlY2tlZCBiZWZvcmUgcmVhZGluZyB0aGVtLiBUaGlzIGNvdWxkIHJlc3VsdCBpbiBhIGJ1ZmZlciByZWFkCitvdmVyZmxvdyB3aGVuIHByb2Nlc3NpbmcgYW4gaW52YWxpZCBtZXNzYWdlLgorCitGaXggdGhpcyBieSB2ZXJpZnlpbmcgdGhhdCB0aGUgcGF5bG9hZCBpcyBvZiBleHBlY3RlZCBsZW5ndGggYmVmb3JlCitwcm9jZXNzaW5nIGl0LiBJbiBhZGRpdGlvbiwgZW5mb3JjZSBjb3JyZWN0IHN0YXRlIHRyYW5zaXRpb24gc2VxdWVuY2UgdG8KK21ha2Ugc3VyZSB0aGVyZSBpcyBubyB1bmV4cGVjdGVkIGJlaGF2aW9yIGlmIHJlY2VpdmluZyBhIENvbW1pdC9Db25maXJtCittZXNzYWdlIGJlZm9yZSB0aGUgcHJldmlvdXMgZXhjaGFuZ2VzIGhhdmUgYmVlbiBjb21wbGV0ZWQuCisKK1RoYW5rcyB0byBLb3N0eWEgS29ydGNoaW5za3kgb2YgR29vZ2xlIHNlY3VyaXR5IHRlYW0gZm9yIGRpc2NvdmVyaW5nIGFuZAorcmVwb3J0aW5nIHRoaXMgaXNzdWUuCisKK1NpZ25lZC1vZmYtYnk6IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CistLS0KKyBzcmMvZWFwX3BlZXIvZWFwX3B3ZC5jIHwgMjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYyBiL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKK2luZGV4IGYyYjA5MjYuLmE2Mjk0MzcgMTAwNjQ0CistLS0gYS9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jCisrKysgYi9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jCitAQCAtMzU1LDYgKzM1NSwyMyBAQCBlYXBfcHdkX3BlcmZvcm1fY29tbWl0X2V4Y2hhbmdlKHN0cnVjdCBlYXBfc20gKnNtLCBzdHJ1Y3QgZWFwX3B3ZF9kYXRhICpkYXRhLAorIAlCSUdOVU0gKm1hc2sgPSBOVUxMLCAqeCA9IE5VTEwsICp5ID0gTlVMTCwgKmNvZmFjdG9yID0gTlVMTDsKKyAJdTE2IG9mZnNldDsKKyAJdTggKnB0ciwgKnNjYWxhciA9IE5VTEwsICplbGVtZW50ID0gTlVMTDsKKysJc2l6ZV90IHByaW1lX2xlbiwgb3JkZXJfbGVuOworKworKwlpZiAoZGF0YS0+c3RhdGUgIT0gUFdEX0NvbW1pdF9SZXEpIHsKKysJCXJldC0+aWdub3JlID0gVFJVRTsKKysJCWdvdG8gZmluOworKwl9CisrCisrCXByaW1lX2xlbiA9IEJOX251bV9ieXRlcyhkYXRhLT5ncnAtPnByaW1lKTsKKysJb3JkZXJfbGVuID0gQk5fbnVtX2J5dGVzKGRhdGEtPmdycC0+b3JkZXIpOworKworKwlpZiAocGF5bG9hZF9sZW4gIT0gMiAqIHByaW1lX2xlbiArIG9yZGVyX2xlbikgeworKwkJd3BhX3ByaW50ZihNU0dfSU5GTywKKysJCQkgICAiRUFQLXB3ZDogVW5leHBlY3RlZCBDb21taXQgcGF5bG9hZCBsZW5ndGggJXUgKGV4cGVjdGVkICV1KSIsCisrCQkJICAgKHVuc2lnbmVkIGludCkgcGF5bG9hZF9sZW4sCisrCQkJICAgKHVuc2lnbmVkIGludCkgKDIgKiBwcmltZV9sZW4gKyBvcmRlcl9sZW4pKTsKKysJCWdvdG8gZmluOworKwl9CisgCisgCWlmICgoKGRhdGEtPnByaXZhdGVfdmFsdWUgPSBCTl9uZXcoKSkgPT0gTlVMTCkgfHwKKyAJICAgICgoZGF0YS0+bXlfZWxlbWVudCA9IEVDX1BPSU5UX25ldyhkYXRhLT5ncnAtPmdyb3VwKSkgPT0gTlVMTCkgfHwKK0BAIC01NTQsNiArNTcxLDE4IEBAIGVhcF9wd2RfcGVyZm9ybV9jb25maXJtX2V4Y2hhbmdlKHN0cnVjdCBlYXBfc20gKnNtLCBzdHJ1Y3QgZWFwX3B3ZF9kYXRhICpkYXRhLAorIAl1OCBjb25mW1NIQTI1Nl9NQUNfTEVOXSwgKmNydWZ0ID0gTlVMTCwgKnB0cjsKKyAJaW50IG9mZnNldDsKKyAKKysJaWYgKGRhdGEtPnN0YXRlICE9IFBXRF9Db25maXJtX1JlcSkgeworKwkJcmV0LT5pZ25vcmUgPSBUUlVFOworKwkJZ290byBmaW47CisrCX0KKysKKysJaWYgKHBheWxvYWRfbGVuICE9IFNIQTI1Nl9NQUNfTEVOKSB7CisrCQl3cGFfcHJpbnRmKE1TR19JTkZPLAorKwkJCSAgICJFQVAtcHdkOiBVbmV4cGVjdGVkIENvbmZpcm0gcGF5bG9hZCBsZW5ndGggJXUgKGV4cGVjdGVkICV1KSIsCisrCQkJICAgKHVuc2lnbmVkIGludCkgcGF5bG9hZF9sZW4sIFNIQTI1Nl9NQUNfTEVOKTsKKysJCWdvdG8gZmluOworKwl9CisrCisgCS8qCisgCSAqIGZpcnN0IGJ1aWxkIHVwIHRoZSBjaXBoZXJzdWl0ZSB3aGljaCBpcyBncm91cCB8IHJhbmRvbV9mdW5jdGlvbiB8CisgCSAqCXByZgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1QMlAtVmFsaWRhdGUtU1NJRC1lbGVtZW50LWxlbmd0aC1iZWZvcmUtY29weWluZy1pdC1DLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDEtUDJQLVZhbGlkYXRlLVNTSUQtZWxlbWVudC1sZW5ndGgtYmVmb3JlLWNvcHlpbmctaXQtQy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTA4YTkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDEtUDJQLVZhbGlkYXRlLVNTSUQtZWxlbWVudC1sZW5ndGgtYmVmb3JlLWNvcHlpbmctaXQtQy5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIDllZDRlZWUzNDVmODVlMzAyNWMzM2M2ZTIwYWEyNTY5NmUzNDFjY2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb3VuaSBNYWxpbmVuIDxqb3VuaUBxY2EucXVhbGNvbW0uY29tPgorRGF0ZTogVHVlLCA3IEFwciAyMDE1IDExOjMyOjExICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFAyUDogVmFsaWRhdGUgU1NJRCBlbGVtZW50IGxlbmd0aCBiZWZvcmUgY29weWluZyBpdAorIChDVkUtMjAxNS0xODYzKQorCitUaGlzIGZpeGVzIGEgcG9zc2libGUgbWVtY3B5IG92ZXJmbG93IGZvciBQMlAgZGV2LT5vcGVyX3NzaWQgaW4KK3AycF9hZGRfZGV2aWNlKCkuIFRoZSBsZW5ndGggcHJvdmlkZWQgYnkgdGhlIHBlZXIgZGV2aWNlICgwLi4yNTUgYnl0ZXMpCit3YXMgdXNlZCB3aXRob3V0IHByb3BlciBib3VuZHMgY2hlY2tpbmcgYW5kIHRoYXQgY291bGQgaGF2ZSByZXN1bHRlZCBpbgorYXJiaXRyYXJ5IGRhdGEgb2YgdXAgdG8gMjIzIGJ5dGVzIGJlaW5nIHdyaXR0ZW4gYmV5b25kIHRoZSBlbmQgb2YgdGhlCitkZXYtPm9wZXJfc3NpZFtdIGFycmF5IChvZiB3aGljaCBhYm91dCAxNTAgYnl0ZXMgd291bGQgYmUgYmV5b25kIHRoZQoraGVhcCBhbGxvY2F0aW9uKSB3aGVuIHByb2Nlc3NpbmcgYSBjb3JydXB0ZWQgbWFuYWdlbWVudCBmcmFtZSBmb3IgUDJQCitwZWVyIGRpc2NvdmVyeSBwdXJwb3Nlcy4KKworVGhpcyBjb3VsZCByZXN1bHQgaW4gY29ycnVwdGVkIHN0YXRlIGluIGhlYXAsIHVuZXhwZWN0ZWQgcHJvZ3JhbQorYmVoYXZpb3IgZHVlIHRvIGNvcnJ1cHRlZCBQMlAgcGVlciBkZXZpY2UgaW5mb3JtYXRpb24sIGRlbmlhbCBvZiBzZXJ2aWNlCitkdWUgdG8gcHJvY2VzcyBjcmFzaCwgZXhwb3N1cmUgb2YgbWVtb3J5IGNvbnRlbnRzIGR1cmluZyBHTyBOZWdvdGlhdGlvbiwKK2FuZCBwb3RlbnRpYWxseSBhcmJpdHJhcnkgY29kZSBleGVjdXRpb24uCisKK1RoYW5rcyB0byBHb29nbGUgc2VjdXJpdHkgdGVhbSBmb3IgcmVwb3J0aW5nIHRoaXMgaXNzdWUgYW5kIHNtYXJ0CitoYXJkd2FyZSByZXNlYXJjaCBncm91cCBvZiBBbGliYWJhIHNlY3VyaXR5IHRlYW0gZm9yIGRpc2NvdmVyaW5nIGl0LgorCitTaWduZWQtb2ZmLWJ5OiBKb3VuaSBNYWxpbmVuIDxqb3VuaUBxY2EucXVhbGNvbW0uY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFl1ZSBUYW8gPHl1ZS50YW9Ad2luZHJpdmVyLmNvbT4KKworLS0tCisgc3JjL3AycC9wMnAuYyB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvc3JjL3AycC9wMnAuYyBiL3NyYy9wMnAvcDJwLmMKK2luZGV4IGY1ODRmYWUuLmE0NWZlNzMgMTAwNjQ0CistLS0gYS9zcmMvcDJwL3AycC5jCisrKysgYi9zcmMvcDJwL3AycC5jCitAQCAtNzc4LDYgKzc3OCw3IEBAIGludCBwMnBfYWRkX2RldmljZShzdHJ1Y3QgcDJwX2RhdGEgKnAycCwgY29uc3QgdTggKmFkZHIsIGludCBmcmVxLAorIAlpZiAob3NfbWVtY21wKGFkZHIsIHAycF9kZXZfYWRkciwgRVRIX0FMRU4pICE9IDApCisgCQlvc19tZW1jcHkoZGV2LT5pbnRlcmZhY2VfYWRkciwgYWRkciwgRVRIX0FMRU4pOworIAlpZiAobXNnLnNzaWQgJiYKKysJICAgIG1zZy5zc2lkWzFdIDw9IHNpemVvZihkZXYtPm9wZXJfc3NpZCkgJiYKKyAJICAgIChtc2cuc3NpZFsxXSAhPSBQMlBfV0lMRENBUkRfU1NJRF9MRU4gfHwKKyAJICAgICBvc19tZW1jbXAobXNnLnNzaWQgKyAyLCBQMlBfV0lMRENBUkRfU1NJRCwgUDJQX1dJTERDQVJEX1NTSURfTEVOKQorIAkgICAgICE9IDApKSB7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDEtV1BTLUZpeC1IVFRQLWNodW5rZWQtdHJhbnNmZXItZW5jb2RpbmctcGFyc2VyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDEtV1BTLUZpeC1IVFRQLWNodW5rZWQtdHJhbnNmZXItZW5jb2RpbmctcGFyc2VyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NjhlYTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1XUFMtRml4LUhUVFAtY2h1bmtlZC10cmFuc2Zlci1lbmNvZGluZy1wYXJzZXIucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBGYW4gWGluIDxmYW4ueGluQGpwLmZ1aml0c3UuY29tPgorCitGcm9tIDVhY2QyM2Y0NTgxZGE1ODY4M2YzY2Y1ZTM2Y2I3MWJiZTQwNzBiZDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorRGF0ZTogVHVlLCAyOCBBcHIgMjAxNSAxNzowODozMyArMDMwMAorU3ViamVjdDogW1BBVENIXSBXUFM6IEZpeCBIVFRQIGNodW5rZWQgdHJhbnNmZXIgZW5jb2RpbmcgcGFyc2VyCisKK3N0cnRvdWwoKSByZXR1cm4gdmFsdWUgbWF5IGVuZCB1cCBvdmVyZmxvd2luZyB0aGUgaW50IGgtPmNodW5rX3NpemUgYW5kCityZXN1bHRpbmcgaW4gYSBuZWdhdGl2ZSB2YWx1ZSB0byBiZSBzdG9yZWQgYXMgdGhlIGNodW5rX3NpemUuIFRoaXMgY291bGQKK3Jlc3VsdCBpbiB0aGUgZm9sbG93aW5nIG1lbWNweSBvcGVyYXRpb24gdXNpbmcgYSB2ZXJ5IGxhcmdlIGxlbmd0aAorYXJndW1lbnQgd2hpY2ggd291bGQgcmVzdWx0IGluIGEgYnVmZmVyIG92ZXJmbG93IGFuZCBzZWdtZW50YXRpb24gZmF1bHQuCisKK1RoaXMgY291bGQgaGF2ZSBiZWVuIHVzZWQgdG8gY2F1c2UgYSBkZW5pYWwgc2VydmljZSBieSBhbnkgZGV2aWNlIHRoYXQKK2hhcyBiZWVuIGF1dGhvcml6ZWQgZm9yIG5ldHdvcmsgYWNjZXNzIChlaXRoZXIgd2lyZWxlc3Mgb3Igd2lyZWQpLiBUaGlzCit3b3VsZCBhZmZlY3QgYm90aCB0aGUgV1BTIFVQblAgZnVuY3Rpb25hbGl0eSBpbiBhIFdQUyBBUCAoaG9zdGFwZCB3aXRoCit1cG5wX2lmYWNlIHBhcmFtZXRlciBzZXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24pIGFuZCBXUFMgRVIKKyh3cGFfc3VwcGxpY2FudCB3aXRoIFdQU19FUl9TVEFSVCBjb250cm9sIGludGVyZmFjZSBjb21tYW5kIHVzZWQpLgorCitWYWxpZGF0ZSB0aGUgcGFyc2VkIGNodW5rIGxlbmd0aCB2YWx1ZSB0byBhdm9pZCB0aGlzLiBJbiBhZGRpdGlvbiB0bworcmVqZWN0aW5nIG5lZ2F0aXZlIHZhbHVlcywgd2UgY2FuIGFsc28gcmVqZWN0IGNodW5rIHNpemUgdGhhdCB3b3VsZCBiZQorbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gY29uZmlndXJlZCBib2R5IGxlbmd0aC4KKworVGhhbmtzIHRvIEtvc3R5YSBLb3J0Y2hpbnNreSBvZiBHb29nbGUgc2VjdXJpdHkgdGVhbSBmb3IgZGlzY292ZXJpbmcgYW5kCityZXBvcnRpbmcgdGhpcyBpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy93cHMvaHR0cHJlYWQuYyB8IDcgKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy93cHMvaHR0cHJlYWQuYyBiL3NyYy93cHMvaHR0cHJlYWQuYworaW5kZXggMmYwOGYzNy4uZDI4NTVlMyAxMDA2NDQKKy0tLSBhL3NyYy93cHMvaHR0cHJlYWQuYworKysrIGIvc3JjL3dwcy9odHRwcmVhZC5jCitAQCAtNTMzLDYgKzUzMywxMyBAQCBzdGF0aWMgdm9pZCBodHRwcmVhZF9yZWFkX2hhbmRsZXIoaW50IHNkLCB2b2lkICplbG9vcF9jdHgsIHZvaWQgKnNvY2tfY3R4KQorIAkJCQkJaWYgKCFpc3hkaWdpdCgqY2JwKSkKKyAJCQkJCQlnb3RvIGJhZDsKKyAJCQkJCWgtPmNodW5rX3NpemUgPSBzdHJ0b3VsKGNicCwgTlVMTCwgMTYpOworKwkJCQkJaWYgKGgtPmNodW5rX3NpemUgPCAwIHx8CisrCQkJCQkgICAgaC0+Y2h1bmtfc2l6ZSA+IGgtPm1heF9ieXRlcykgeworKwkJCQkJCXdwYV9wcmludGYoTVNHX0RFQlVHLAorKwkJCQkJCQkgICAiaHR0cHJlYWQ6IEludmFsaWQgY2h1bmsgc2l6ZSAlZCIsCisrCQkJCQkJCSAgIGgtPmNodW5rX3NpemUpOworKwkJCQkJCWdvdG8gYmFkOworKwkJCQkJfQorIAkJCQkJLyogdGhyb3cgYXdheSBjaHVuayBoZWFkZXIKKyAJCQkJCSAqIHNvIHdlIGhhdmUgb25seSByZWFsIGRhdGEKKyAJCQkJCSAqLworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMi1FQVAtcHdkLXNlcnZlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDItRUFQLXB3ZC1zZXJ2ZXItRml4LXBheWxvYWQtbGVuZ3RoLXZhbGlkYXRpb24tZm9yLUNvbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDc3YzJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDItRUFQLXB3ZC1zZXJ2ZXItRml4LXBheWxvYWQtbGVuZ3RoLXZhbGlkYXRpb24tZm9yLUNvbS5wYXRjaApAQCAtMCwwICsxLDcwIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEZhbiBYaW4gPGZhbi54aW5AanAuZnVqaXRzdS5jb20+CisKK0Zyb20gZTI4YTU4YmUyNjE4NGMyYTIzZjgwYjQxMGUwOTk3ZWYxYmQ1ZDU3OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CitEYXRlOiBGcmksIDEgTWF5IDIwMTUgMTY6NDA6NDQgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzVdIEVBUC1wd2Qgc2VydmVyOiBGaXggcGF5bG9hZCBsZW5ndGggdmFsaWRhdGlvbiBmb3IgQ29tbWl0CisgYW5kIENvbmZpcm0KKworVGhlIGxlbmd0aCBvZiB0aGUgcmVjZWl2ZWQgQ29tbWl0IGFuZCBDb25maXJtIG1lc3NhZ2UgcGF5bG9hZHMgd2FzIG5vdAorY2hlY2tlZCBiZWZvcmUgcmVhZGluZyB0aGVtLiBUaGlzIGNvdWxkIHJlc3VsdCBpbiBhIGJ1ZmZlciByZWFkCitvdmVyZmxvdyB3aGVuIHByb2Nlc3NpbmcgYW4gaW52YWxpZCBtZXNzYWdlLgorCitGaXggdGhpcyBieSB2ZXJpZnlpbmcgdGhhdCB0aGUgcGF5bG9hZCBpcyBvZiBleHBlY3RlZCBsZW5ndGggYmVmb3JlCitwcm9jZXNzaW5nIGl0LiBJbiBhZGRpdGlvbiwgZW5mb3JjZSBjb3JyZWN0IHN0YXRlIHRyYW5zaXRpb24gc2VxdWVuY2UgdG8KK21ha2Ugc3VyZSB0aGVyZSBpcyBubyB1bmV4cGVjdGVkIGJlaGF2aW9yIGlmIHJlY2VpdmluZyBhIENvbW1pdC9Db25maXJtCittZXNzYWdlIGJlZm9yZSB0aGUgcHJldmlvdXMgZXhjaGFuZ2VzIGhhdmUgYmVlbiBjb21wbGV0ZWQuCisKK1RoYW5rcyB0byBLb3N0eWEgS29ydGNoaW5za3kgb2YgR29vZ2xlIHNlY3VyaXR5IHRlYW0gZm9yIGRpc2NvdmVyaW5nIGFuZAorcmVwb3J0aW5nIHRoaXMgaXNzdWUuCisKK1NpZ25lZC1vZmYtYnk6IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CistLS0KKyBzcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jIHwgMTkgKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jIGIvc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYworaW5kZXggNjZiZDVkMi4uMzE4OTEwNSAxMDA2NDQKKy0tLSBhL3NyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMKKysrKyBiL3NyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMKK0BAIC02NTYsOSArNjU2LDIxIEBAIGVhcF9wd2RfcHJvY2Vzc19jb21taXRfcmVzcChzdHJ1Y3QgZWFwX3NtICpzbSwgc3RydWN0IGVhcF9wd2RfZGF0YSAqZGF0YSwKKyAJQklHTlVNICp4ID0gTlVMTCwgKnkgPSBOVUxMLCAqY29mYWN0b3IgPSBOVUxMOworIAlFQ19QT0lOVCAqSyA9IE5VTEwsICpwb2ludCA9IE5VTEw7CisgCWludCByZXMgPSAwOworKwlzaXplX3QgcHJpbWVfbGVuLCBvcmRlcl9sZW47CisgCisgCXdwYV9wcmludGYoTVNHX0RFQlVHLCAiRUFQLXB3ZDogUmVjZWl2ZWQgY29tbWl0IHJlc3BvbnNlIik7CisgCisrCXByaW1lX2xlbiA9IEJOX251bV9ieXRlcyhkYXRhLT5ncnAtPnByaW1lKTsKKysJb3JkZXJfbGVuID0gQk5fbnVtX2J5dGVzKGRhdGEtPmdycC0+b3JkZXIpOworKworKwlpZiAocGF5bG9hZF9sZW4gIT0gMiAqIHByaW1lX2xlbiArIG9yZGVyX2xlbikgeworKwkJd3BhX3ByaW50ZihNU0dfSU5GTywKKysJCQkgICAiRUFQLXB3ZDogVW5leHBlY3RlZCBDb21taXQgcGF5bG9hZCBsZW5ndGggJXUgKGV4cGVjdGVkICV1KSIsCisrCQkJICAgKHVuc2lnbmVkIGludCkgcGF5bG9hZF9sZW4sCisrCQkJICAgKHVuc2lnbmVkIGludCkgKDIgKiBwcmltZV9sZW4gKyBvcmRlcl9sZW4pKTsKKysJCWdvdG8gZmluOworKwl9CisrCisgCWlmICgoKGRhdGEtPnBlZXJfc2NhbGFyID0gQk5fbmV3KCkpID09IE5VTEwpIHx8CisgCSAgICAoKGRhdGEtPmsgPSBCTl9uZXcoKSkgPT0gTlVMTCkgfHwKKyAJICAgICgoY29mYWN0b3IgPSBCTl9uZXcoKSkgPT0gTlVMTCkgfHwKK0BAIC03NzQsNiArNzg2LDEzIEBAIGVhcF9wd2RfcHJvY2Vzc19jb25maXJtX3Jlc3Aoc3RydWN0IGVhcF9zbSAqc20sIHN0cnVjdCBlYXBfcHdkX2RhdGEgKmRhdGEsCisgCXU4IGNvbmZbU0hBMjU2X01BQ19MRU5dLCAqY3J1ZnQgPSBOVUxMLCAqcHRyOworIAlpbnQgb2Zmc2V0OworIAorKwlpZiAocGF5bG9hZF9sZW4gIT0gU0hBMjU2X01BQ19MRU4pIHsKKysJCXdwYV9wcmludGYoTVNHX0lORk8sCisrCQkJICAgIkVBUC1wd2Q6IFVuZXhwZWN0ZWQgQ29uZmlybSBwYXlsb2FkIGxlbmd0aCAldSAoZXhwZWN0ZWQgJXUpIiwKKysJCQkgICAodW5zaWduZWQgaW50KSBwYXlsb2FkX2xlbiwgU0hBMjU2X01BQ19MRU4pOworKwkJZ290byBmaW47CisrCX0KKysKKyAJLyogYnVpbGQgdXAgdGhlIGNpcGhlcnN1aXRlOiBncm91cCB8IHJhbmRvbV9mdW5jdGlvbiB8IHByZiAqLworIAlncnAgPSBodG9ucyhkYXRhLT5ncm91cF9udW0pOworIAlwdHIgPSAodTggKikgJmNzOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMy1FQVAtcHdkLXBlZXItRml4LVRvdGFsLUxlbmd0aC1wYXJzaW5nLWZvci1mcmFnbWVudC1yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDMtRUFQLXB3ZC1wZWVyLUZpeC1Ub3RhbC1MZW5ndGgtcGFyc2luZy1mb3ItZnJhZ21lbnQtci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDZjZTQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDMtRUFQLXB3ZC1wZWVyLUZpeC1Ub3RhbC1MZW5ndGgtcGFyc2luZy1mb3ItZnJhZ21lbnQtci5wYXRjaApAQCAtMCwwICsxLDU2IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEZhbiBYaW4gPGZhbi54aW5AanAuZnVqaXRzdS5jb20+CisKK0Zyb20gNDc3Yzc0Mzk1YWNkMDEyMzM0MDQ1N2JhNmYxNWFiMzQ1ZDQyMDE2ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CitEYXRlOiBTYXQsIDIgTWF5IDIwMTUgMTk6MjM6MDQgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzVdIEVBUC1wd2QgcGVlcjogRml4IFRvdGFsLUxlbmd0aCBwYXJzaW5nIGZvciBmcmFnbWVudAorIHJlYXNzZW1ibHkKKworVGhlIHJlbWFpbmluZyBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIG1lc3NhZ2UgY291bGQgYmUgc21hbGxlciB0aGFuIHRoZQorVG90YWwtTGVuZ3RoIGZpZWxkIHNpemUsIHNvIHRoZSBsZW5ndGggbmVlZHMgdG8gYmUgZXhwbGljaXRseSBjaGVja2VkCitwcmlvciB0byByZWFkaW5nIHRoZSBmaWVsZCBhbmQgZGVjcmVtZW50aW5nIHRoZSBsZW4gdmFyaWFibGUuIFRoaXMgY291bGQKK2hhdmUgcmVzdWx0ZWQgaW4gdGhlIHJlbWFpbmluZyBsZW5ndGggYmVjb21pbmcgbmVnYXRpdmUgYW5kIGludGVycHJldGVkCithcyBhIGh1Z2UgcG9zaXRpdmUgaW50ZWdlci4KKworSW4gYWRkaXRpb24sIGNoZWNrIHRoYXQgdGhlcmUgaXMgbm8gYWxyZWFkeSBzdGFydGVkIGZyYWdtZW50IGluIHByb2dyZXNzCitiZWZvcmUgYWxsb2NhdGluZyBhIG5ldyBidWZmZXIgZm9yIHJlYXNzZW1ibGluZyBmcmFnbWVudHMuIFRoaXMgYXZvaWQgYQorcG90ZW50aWFsIG1lbW9yeSBsZWFrIHdoZW4gcHJvY2Vzc2luZyBpbnZhbGlkIG1lc3NhZ2UuCisKK1NpZ25lZC1vZmYtYnk6IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CistLS0KKyBzcmMvZWFwX3BlZXIvZWFwX3B3ZC5jIHwgMTIgKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMgYi9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jCitpbmRleCBhNjI5NDM3Li4xZDIwNzliIDEwMDY0NAorLS0tIGEvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYworKysrIGIvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYworQEAgLTg2NiwxMSArODY2LDIzIEBAIGVhcF9wd2RfcHJvY2VzcyhzdHJ1Y3QgZWFwX3NtICpzbSwgdm9pZCAqcHJpdiwgc3RydWN0IGVhcF9tZXRob2RfcmV0ICpyZXQsCisgCSAqIGlmIGl0J3MgdGhlIGZpcnN0IGZyYWdtZW50IHRoZXJlJ2xsIGJlIGEgbGVuZ3RoIGZpZWxkCisgCSAqLworIAlpZiAoRUFQX1BXRF9HRVRfTEVOR1RIX0JJVChsbV9leGNoKSkgeworKwkJaWYgKGxlbiA8IDIpIHsKKysJCQl3cGFfcHJpbnRmKE1TR19ERUJVRywKKysJCQkJICAgIkVBUC1wd2Q6IEZyYW1lIHRvbyBzaG9ydCB0byBjb250YWluIFRvdGFsLUxlbmd0aCBmaWVsZCIpOworKwkJCXJldC0+aWdub3JlID0gVFJVRTsKKysJCQlyZXR1cm4gTlVMTDsKKysJCX0KKyAJCXRvdF9sZW4gPSBXUEFfR0VUX0JFMTYocG9zKTsKKyAJCXdwYV9wcmludGYoTVNHX0RFQlVHLCAiRUFQLXB3ZDogSW5jb21pbmcgZnJhZ21lbnRzIHdob3NlICIKKyAJCQkgICAidG90YWwgbGVuZ3RoID0gJWQiLCB0b3RfbGVuKTsKKyAJCWlmICh0b3RfbGVuID4gMTUwMDApCisgCQkJcmV0dXJuIE5VTEw7CisrCQlpZiAoZGF0YS0+aW5idWYpIHsKKysJCQl3cGFfcHJpbnRmKE1TR19ERUJVRywKKysJCQkJICAgIkVBUC1wd2Q6IFVuZXhwZWN0ZWQgbmV3IGZyYWdtZW50IHN0YXJ0IHdoZW4gcHJldmlvdXMgZnJhZ21lbnQgaXMgc3RpbGwgaW4gdXNlIik7CisrCQkJcmV0LT5pZ25vcmUgPSBUUlVFOworKwkJCXJldHVybiBOVUxMOworKwkJfQorIAkJZGF0YS0+aW5idWYgPSB3cGFidWZfYWxsb2ModG90X2xlbik7CisgCQlpZiAoZGF0YS0+aW5idWYgPT0gTlVMTCkgeworIAkJCXdwYV9wcmludGYoTVNHX0lORk8sICJPdXQgb2YgbWVtb3J5IHRvIGJ1ZmZlciAiCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDA0LUVBUC1wd2Qtc2VydmVyLUZpeC1Ub3RhbC1MZW5ndGgtcGFyc2luZy1mb3ItZnJhZ21lbnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwNC1FQVAtcHdkLXNlcnZlci1GaXgtVG90YWwtTGVuZ3RoLXBhcnNpbmctZm9yLWZyYWdtZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YzAyYjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwNC1FQVAtcHdkLXNlcnZlci1GaXgtVG90YWwtTGVuZ3RoLXBhcnNpbmctZm9yLWZyYWdtZW50LnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSAzMDM1Y2MyODk0ZTA4MzE5YjkwNWJkNjU2MWU4YmRkYzhjMmRiOWZhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IFNhdCwgMiBNYXkgMjAxNSAxOToyNjowNiArMDMwMAorU3ViamVjdDogW1BBVENIIDQvNV0gRUFQLXB3ZCBzZXJ2ZXI6IEZpeCBUb3RhbC1MZW5ndGggcGFyc2luZyBmb3IgZnJhZ21lbnQKKyByZWFzc2VtYmx5CisKK1RoZSByZW1haW5pbmcgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBtZXNzYWdlIGNvdWxkIGJlIHNtYWxsZXIgdGhhbiB0aGUKK1RvdGFsLUxlbmd0aCBmaWVsZCBzaXplLCBzbyB0aGUgbGVuZ3RoIG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgY2hlY2tlZAorcHJpb3IgdG8gcmVhZGluZyB0aGUgZmllbGQgYW5kIGRlY3JlbWVudGluZyB0aGUgbGVuIHZhcmlhYmxlLiBUaGlzIGNvdWxkCitoYXZlIHJlc3VsdGVkIGluIHRoZSByZW1haW5pbmcgbGVuZ3RoIGJlY29taW5nIG5lZ2F0aXZlIGFuZCBpbnRlcnByZXRlZAorYXMgYSBodWdlIHBvc2l0aXZlIGludGVnZXIuCisKK0luIGFkZGl0aW9uLCBjaGVjayB0aGF0IHRoZXJlIGlzIG5vIGFscmVhZHkgc3RhcnRlZCBmcmFnbWVudCBpbiBwcm9ncmVzcworYmVmb3JlIGFsbG9jYXRpbmcgYSBuZXcgYnVmZmVyIGZvciByZWFzc2VtYmxpbmcgZnJhZ21lbnRzLiBUaGlzIGF2b2lkIGEKK3BvdGVudGlhbCBtZW1vcnkgbGVhayB3aGVuIHByb2Nlc3NpbmcgaW52YWxpZCBtZXNzYWdlLgorCitTaWduZWQtb2ZmLWJ5OiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorLS0tCisgc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYyB8IDEwICsrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYyBiL3NyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMKK2luZGV4IDMxODkxMDUuLjJiZmMzYzIgMTAwNjQ0CistLS0gYS9zcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jCisrKysgYi9zcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jCitAQCAtOTQyLDExICs5NDIsMjEgQEAgc3RhdGljIHZvaWQgZWFwX3B3ZF9wcm9jZXNzKHN0cnVjdCBlYXBfc20gKnNtLCB2b2lkICpwcml2LAorIAkgKiB0aGUgZmlyc3QgZnJhZ21lbnQgaGFzIGEgdG90YWwgbGVuZ3RoCisgCSAqLworIAlpZiAoRUFQX1BXRF9HRVRfTEVOR1RIX0JJVChsbV9leGNoKSkgeworKwkJaWYgKGxlbiA8IDIpIHsKKysJCQl3cGFfcHJpbnRmKE1TR19ERUJVRywKKysJCQkJICAgIkVBUC1wd2Q6IEZyYW1lIHRvbyBzaG9ydCB0byBjb250YWluIFRvdGFsLUxlbmd0aCBmaWVsZCIpOworKwkJCXJldHVybjsKKysJCX0KKyAJCXRvdF9sZW4gPSBXUEFfR0VUX0JFMTYocG9zKTsKKyAJCXdwYV9wcmludGYoTVNHX0RFQlVHLCAiRUFQLXB3ZDogSW5jb21pbmcgZnJhZ21lbnRzLCB0b3RhbCAiCisgCQkJICAgImxlbmd0aCA9ICVkIiwgdG90X2xlbik7CisgCQlpZiAodG90X2xlbiA+IDE1MDAwKQorIAkJCXJldHVybjsKKysJCWlmIChkYXRhLT5pbmJ1ZikgeworKwkJCXdwYV9wcmludGYoTVNHX0RFQlVHLAorKwkJCQkgICAiRUFQLXB3ZDogVW5leHBlY3RlZCBuZXcgZnJhZ21lbnQgc3RhcnQgd2hlbiBwcmV2aW91cyBmcmFnbWVudCBpcyBzdGlsbCBpbiB1c2UiKTsKKysJCQlyZXR1cm47CisrCQl9CisgCQlkYXRhLT5pbmJ1ZiA9IHdwYWJ1Zl9hbGxvYyh0b3RfbGVuKTsKKyAJCWlmIChkYXRhLT5pbmJ1ZiA9PSBOVUxMKSB7CisgCQkJd3BhX3ByaW50ZihNU0dfSU5GTywgIkVBUC1wd2Q6IE91dCBvZiBtZW1vcnkgdG8gIgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwNS1FQVAtcHdkLXBlZXItRml4LWFzeW1tZXRyaWMtZnJhZ21lbnRhdGlvbi1iZWhhdmlvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDA1LUVBUC1wd2QtcGVlci1GaXgtYXN5bW1ldHJpYy1mcmFnbWVudGF0aW9uLWJlaGF2aW9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNzM2MDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwNS1FQVAtcHdkLXBlZXItRml4LWFzeW1tZXRyaWMtZnJhZ21lbnRhdGlvbi1iZWhhdmlvci5wYXRjaApAQCAtMCwwICsxLDM2IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEZhbiBYaW4gPGZhbi54aW5AanAuZnVqaXRzdS5jb20+CisKK0Zyb20gMjhhMDY5YTU0NWIwNmI5OWViNTVhZDUzZjYzZjJjOTllNjVhOThmNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CitEYXRlOiBTYXQsIDIgTWF5IDIwMTUgMTk6MjY6MjggKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCA1LzVdIEVBUC1wd2QgcGVlcjogRml4IGFzeW1tZXRyaWMgZnJhZ21lbnRhdGlvbiBiZWhhdmlvcgorCitUaGUgTCAoTGVuZ3RoKSBhbmQgTSAoTW9yZSkgZmxhZ3MgbmVlZHMgdG8gYmUgY2xlYXJlZCBiZWZvcmUgZGVjaWRpbmcKK3doZXRoZXIgdGhlIGxvY2FsbHkgZ2VuZXJhdGVkIHJlc3BvbnNlIHJlcXVpcmVzIGZyYWdtZW50YXRpb24uIFRoaXMKK2ZpeGVzIGFuIGlzc3VlIHdoZXJlIHRoZXNlIGZsYWdzIGZyb20gdGhlIHNlcnZlciBjb3VsZCBoYXZlIGJlZW4gaW52YWxpZAorZm9yIHRoZSBmb2xsb3dpbmcgbWVzc2FnZS4gSW4gc29tZSBjYXNlcywgdGhpcyBjb3VsZCBoYXZlIHJlc3VsdGVkIGluCit0cmlnZ2VyaW5nIHRoZSB3cGFidWYgc2VjdXJpdHkgY2hlY2sgdGhhdCB3b3VsZCB0ZXJtaW5hdGUgdGhlIHByb2Nlc3MKK2R1ZSB0byBpbnZhbGlkIGJ1ZmZlciBhbGxvY2F0aW9uLgorCitTaWduZWQtb2ZmLWJ5OiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorLS0tCisgc3JjL2VhcF9wZWVyL2VhcF9wd2QuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYyBiL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKK2luZGV4IDFkMjA3OWIuLmU1OGIxM2EgMTAwNjQ0CistLS0gYS9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jCisrKysgYi9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jCitAQCAtOTY4LDYgKzk2OCw3IEBAIGVhcF9wd2RfcHJvY2VzcyhzdHJ1Y3QgZWFwX3NtICpzbSwgdm9pZCAqcHJpdiwgc3RydWN0IGVhcF9tZXRob2RfcmV0ICpyZXQsCisgCS8qCisgCSAqIHdlIGhhdmUgb3V0cHV0ISBEbyB3ZSBuZWVkIHRvIGZyYWdtZW50IGl0PworIAkgKi8KKysJbG1fZXhjaCA9IEVBUF9QV0RfR0VUX0VYQ0hBTkdFKGxtX2V4Y2gpOworIAlsZW4gPSB3cGFidWZfbGVuKGRhdGEtPm91dGJ1Zik7CisgCWlmICgobGVuICsgRUFQX1BXRF9IRFJfU0laRSkgPiBkYXRhLT5tdHUpIHsKKyAJCXJlc3AgPSBlYXBfbXNnX2FsbG9jKEVBUF9WRU5ET1JfSUVURiwgRUFQX1RZUEVfUFdELCBkYXRhLT5tdHUsCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC85OV93cGFfc3VwcGxpY2FudCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC85OV93cGFfc3VwcGxpY2FudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmY0ZGQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50Lzk5X3dwYV9zdXBwbGljYW50CkBAIC0wLDAgKzEgQEAKK2Qgcm9vdCByb290IDA3MDAgL3Zhci9ydW4vd3BhX3N1cHBsaWNhbnQgbm9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L2RlZmNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA0ZTM5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC9kZWZjb25maWcKQEAgLTAsMCArMSw1NTIgQEAKKyMgRXhhbXBsZSB3cGFfc3VwcGxpY2FudCBidWlsZCB0aW1lIGNvbmZpZ3VyYXRpb24KKyMKKyMgVGhpcyBmaWxlIGxpc3RzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgdXNlZCB3aGVuIGJ1aWxkaW5nIHRoZQorIyBob3N0YXBkIGJpbmFyeS4gQWxsIGxpbmVzIHN0YXJ0aW5nIHdpdGggIyBhcmUgaWdub3JlZC4gQ29uZmlndXJhdGlvbiBvcHRpb24KKyMgbGluZXMgbXVzdCBiZSBjb21tZW50ZWQgb3V0IGNvbXBsZXRlLCBpZiB0aGV5IGFyZSBub3QgdG8gYmUgaW5jbHVkZWQsIGkuZS4sCisjIGp1c3Qgc2V0dGluZyBWQVJJQUJMRT1uIGlzIG5vdCBkaXNhYmxpbmcgdGhhdCB2YXJpYWJsZS4KKyMKKyMgVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGluIE1ha2VmaWxlLCBzbyB2YXJpYWJsZXMgbGlrZSBDRkxBR1MgYW5kIExJQlMgY2FuIGFsc28KKyMgYmUgbW9kaWZpZWQgZnJvbSBoZXJlLiBJbiBtb3N0IGNhc2VzLCB0aGVzZSBsaW5lcyBzaG91bGQgdXNlICs9IGluIG9yZGVyIG5vdAorIyB0byBvdmVycmlkZSBwcmV2aW91cyB2YWx1ZXMgb2YgdGhlIHZhcmlhYmxlcy4KKworCisjIFVuY29tbWVudCBmb2xsb3dpbmcgdHdvIGxpbmVzIGFuZCBmaXggdGhlIHBhdGhzIGlmIHlvdSBoYXZlIGluc3RhbGxlZCBPcGVuU1NMCisjIG9yIEdudVRMUyBpbiBub24tZGVmYXVsdCBsb2NhdGlvbgorI0NGTEFHUyArPSAtSS91c3IvbG9jYWwvb3BlbnNzbC9pbmNsdWRlCisjTElCUyArPSAtTC91c3IvbG9jYWwvb3BlbnNzbC9saWIKKworIyBTb21lIFJlZCBIYXQgdmVyc2lvbnMgc2VlbSB0byBpbmNsdWRlIGtlcmJlcm9zIGhlYWRlciBmaWxlcyBmcm9tIE9wZW5TU0wsIGJ1dAorIyB0aGUga2VyYmVyb3MgZmlsZXMgYXJlIG5vdCBpbiB0aGUgZGVmYXVsdCBpbmNsdWRlIHBhdGguIEZvbGxvd2luZyBsaW5lIGNhbiBiZQorIyB1c2VkIHRvIGZpeCBidWlsZCBpc3N1ZXMgb24gc3VjaCBzeXN0ZW1zIChrcmI1Lmggbm90IGZvdW5kKS4KKyNDRkxBR1MgKz0gLUkvdXNyL2luY2x1ZGUva2VyYmVyb3MKKworIyBFeGFtcGxlIGNvbmZpZ3VyYXRpb24gZm9yIHZhcmlvdXMgY3Jvc3MtY29tcGlsYXRpb24gcGxhdGZvcm1zCisKKyMjIyMgc3ZlYXNvZnQgKGUuZy4sIGZvciBMaW5rc3lzIFdSVDU0RykgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyNDQz1taXBzZWwtdWNsaWJjLWdjYworI0NDPS9vcHQvYnJjbS9obmR0b29scy1taXBzZWwtdWNsaWJjL2Jpbi9taXBzZWwtdWNsaWJjLWdjYworI0NGTEFHUyArPSAtT3MKKyNDUFBGTEFHUyArPSAtSS4uL3NyYy9pbmNsdWRlIC1JLi4vLi4vc3JjL3JvdXRlci9vcGVuc3NsL2luY2x1ZGUKKyNMSUJTICs9IC1ML29wdC9icmNtL2huZHRvb2xzLW1pcHNlbC11Y2xpYmMtMC45LjE5L2xpYiAtbHNzbAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIG9wZW53cnQgKGUuZy4sIGZvciBMaW5rc3lzIFdSVDU0RykgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjQ0M9bWlwc2VsLXVjbGliYy1nY2MKKyNDQz0vb3B0L2JyY20vaG5kdG9vbHMtbWlwc2VsLXVjbGliYy9iaW4vbWlwc2VsLXVjbGliYy1nY2MKKyNDRkxBR1MgKz0gLU9zCisjQ1BQRkxBR1M9LUkuLi9zcmMvaW5jbHVkZSAtSS4uL29wZW5zc2wtMC45LjdkL2luY2x1ZGUgXAorIwktSS4uL1dSVDU0R1MvcmVsZWFzZS9zcmMvaW5jbHVkZQorI0xJQlMgPSAtbHNzbAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgSG9zdCBBUCBkcml2ZXIKK0NPTkZJR19EUklWRVJfSE9TVEFQPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBBZ2VyZSBkcml2ZXIKKyNDT05GSUdfRFJJVkVSX0hFUk1FUz15CisjIENoYW5nZSBpbmNsdWRlIGRpcmVjdG9yaWVzIHRvIG1hdGNoIHdpdGggdGhlIGxvY2FsIHNldHVwCisjQ0ZMQUdTICs9IC1JLi4vLi4vaGNmIC1JLi4vLi4vaW5jbHVkZSAtSS4uLy4uL2luY2x1ZGUvaGNmCisjQ0ZMQUdTICs9IC1JLi4vLi4vaW5jbHVkZS93aXJlbGVzcworCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIG1hZHdpZmkgZHJpdmVyCisjIERlcHJlY2F0ZWQ7IHVzZSBDT05GSUdfRFJJVkVSX1dFWFQ9eSBpbnN0ZWFkLgorI0NPTkZJR19EUklWRVJfTUFEV0lGST15CisjIFNldCBpbmNsdWRlIGRpcmVjdG9yeSB0byB0aGUgbWFkd2lmaSBzb3VyY2UgdHJlZQorI0NGTEFHUyArPSAtSS4uLy4uL21hZHdpZmkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBuZGlzd3JhcHBlcgorIyBEZXByZWNhdGVkOyB1c2UgQ09ORklHX0RSSVZFUl9XRVhUPXkgaW5zdGVhZC4KKyNDT05GSUdfRFJJVkVSX05ESVNXUkFQUEVSPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBBdG1lbCBkcml2ZXIKKyMgQ09ORklHX0RSSVZFUl9BVE1FTD15CisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3Igb2xkIEJyb2FkY29tIGRyaXZlcgorIyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBuZXdlciBCcm9hZGNvbSBkcml2ZXIgKCJoeWJyaWQgTGludXggZHJpdmVyIikgc3VwcG9ydHMKKyMgTGludXggd2lyZWxlc3MgZXh0ZW5zaW9ucyBhbmQgZG9lcyBub3QgbmVlZCAob3IgZXZlbiB3b3JrKSB3aXRoIHRoZSBvbGQKKyMgZHJpdmVyIHdyYXBwZXIuIFVzZSBDT05GSUdfRFJJVkVSX1dFWFQ9eSB3aXRoIHRoYXQgZHJpdmVyLgorI0NPTkZJR19EUklWRVJfQlJPQURDT009eQorIyBFeGFtcGxlIHBhdGggZm9yIHdsaW9jdGwuaDsgY2hhbmdlIHRvIG1hdGNoIHlvdXIgY29uZmlndXJhdGlvbgorI0NGTEFHUyArPSAtSS9vcHQvV1JUNTRHUy9yZWxlYXNlL3NyYy9pbmNsdWRlCisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgSW50ZWwgaXB3MjEwMC8yMjAwIGRyaXZlcgorIyBEZXByZWNhdGVkOyB1c2UgQ09ORklHX0RSSVZFUl9XRVhUPXkgaW5zdGVhZC4KKyNDT05GSUdfRFJJVkVSX0lQVz15CisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgUmFsaW5rIGRyaXZlcgorI0NPTkZJR19EUklWRVJfUkFMSU5LPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBnZW5lcmljIExpbnV4IHdpcmVsZXNzIGV4dGVuc2lvbnMKKyMgTm90ZTogV0VYVCBpcyBkZXByZWNhdGVkIGluIHRoZSBjdXJyZW50IExpbnV4IGtlcm5lbCB2ZXJzaW9uIGFuZCBubyBuZXcKKyMgZnVuY3Rpb25hbGl0eSBpcyBhZGRlZCB0byBpdC4gbmw4MDIxMS1iYXNlZCBpbnRlcmZhY2UgaXMgdGhlIG5ldworIyByZXBsYWNlbWVudCBmb3IgV0VYVCBhbmQgaXRzIHVzZSBhbGxvd3Mgd3BhX3N1cHBsaWNhbnQgdG8gcHJvcGVybHkgY29udHJvbAorIyB0aGUgZHJpdmVyIHRvIGltcHJvdmUgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSBsaWtlIHJvYW1pbmcgYW5kIHRvIHN1cHBvcnQgbmV3CisjIGZ1bmN0aW9uYWxpdHkuCitDT05GSUdfRFJJVkVSX1dFWFQ9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIExpbnV4IGRyaXZlcnMgdXNpbmcgdGhlIG5sODAyMTEga2VybmVsIGludGVyZmFjZQorQ09ORklHX0RSSVZFUl9OTDgwMjExPXkKKworIyBkcml2ZXJfbmw4MDIxMS5jIHJlcXVpcmVzIGxpYm5sLiBJZiB5b3UgYXJlIGNvbXBpbGluZyBpdCB5b3Vyc2VsZgorIyB5b3UgbWF5IG5lZWQgdG8gcG9pbnQgaG9zdGFwZCB0byB5b3VyIHZlcnNpb24gb2YgbGlibmwuCisjCisjQ0ZMQUdTICs9IC1JJDxwYXRoIHRvIGxpYm5sIGluY2x1ZGUgZmlsZXM+CisjTElCUyArPSAtTCQ8cGF0aCB0byBsaWJubCBsaWJyYXJ5IGZpbGVzPgorCisjIFVzZSBsaWJubCB2Mi4wIChvciAzLjApIGxpYnJhcmllcy4KKyNDT05GSUdfTElCTkwyMD15CisKKyMgVXNlIGxpYm5sIDMuMiBsaWJyYXJpZXMgKGlmIHRoaXMgaXMgc2VsZWN0ZWQsIENPTkZJR19MSUJOTDIwIGlzIGlnbm9yZWQpCitDT05GSUdfTElCTkwzMj15CisKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBGcmVlQlNEIG5ldDgwMjExIGxheWVyIChlLmcuLCBBdGhlcm9zIGRyaXZlcikKKyNDT05GSUdfRFJJVkVSX0JTRD15CisjQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9pbmNsdWRlCisjTElCUyArPSAtTC91c3IvbG9jYWwvbGliCisjTElCU19wICs9IC1ML3Vzci9sb2NhbC9saWIKKyNMSUJTX2MgKz0gLUwvdXNyL2xvY2FsL2xpYgorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIFdpbmRvd3MgTkRJUworI0NPTkZJR19EUklWRVJfTkRJUz15CisjQ0ZMQUdTICs9IC1JL3Vzci9pbmNsdWRlL3czMmFwaS9kZGsKKyNMSUJTICs9IC1ML3Vzci9sb2NhbC9saWIKKyMgRm9yIG5hdGl2ZSBidWlsZCB1c2luZyBtaW5ndworI0NPTkZJR19OQVRJVkVfV0lORE9XUz15CisjIEFkZGl0aW9uYWwgZGlyZWN0b3JpZXMgZm9yIGNyb3NzLWNvbXBpbGF0aW9uIG9uIExpbnV4IGhvc3QgZm9yIG1pbmd3IHRhcmdldAorI0NGTEFHUyArPSAtSS9vcHQvbWluZ3cvbWluZ3czMi9pbmNsdWRlL2RkaworI0xJQlMgKz0gLUwvb3B0L21pbmd3L21pbmd3MzIvbGliCisjQ0M9bWluZ3czMi1nY2MKKyMgQnkgZGVmYXVsdCwgZHJpdmVyX25kaXMgdXNlcyBXaW5QY2FwIGZvciBsb3ctbGV2ZWwgb3BlcmF0aW9ucy4gVGhpcyBjYW4gYmUKKyMgcmVwbGFjZWQgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbiB3aGljaCByZXBsYWNlcyBXaW5QY2FwIGNhbGxzIHdpdGggTkRJU1VJTy4KKyMgSG93ZXZlciwgdGhpcyByZXF1aXJlcyB0aGF0IFdaQyBpcyBkaXNhYmxlZCAobmV0IHN0b3Agd3pjc3ZjKSBiZWZvcmUgc3RhcnRpbmcKKyMgd3BhX3N1cHBsaWNhbnQuCisjIENPTkZJR19VU0VfTkRJU1VJTz15CisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgZGV2ZWxvcG1lbnQgdGVzdGluZworI0NPTkZJR19EUklWRVJfVEVTVD15CisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3Igd2lyZWQgRXRoZXJuZXQgZHJpdmVycworQ09ORklHX0RSSVZFUl9XSVJFRD15CisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgdGhlIEJyb2FkY29tIFJvYm9Td2l0Y2ggZmFtaWx5CisjQ09ORklHX0RSSVZFUl9ST0JPU1dJVENIPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBubyBkcml2ZXIgKGUuZy4sIFdQUyBFUiBvbmx5KQorI0NPTkZJR19EUklWRVJfTk9ORT15CisKKyMgRW5hYmxlIElFRUUgODAyLjFYIFN1cHBsaWNhbnQgKGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgaWYgYW55IEVBUCBtZXRob2QgaXMKKyMgaW5jbHVkZWQpCitDT05GSUdfSUVFRTgwMjFYX0VBUE9MPXkKKworIyBFQVAtTUQ1CitDT05GSUdfRUFQX01ENT15CisKKyMgRUFQLU1TQ0hBUHYyCitDT05GSUdfRUFQX01TQ0hBUFYyPXkKKworIyBFQVAtVExTCitDT05GSUdfRUFQX1RMUz15CisKKyMgRUFMLVBFQVAKK0NPTkZJR19FQVBfUEVBUD15CisKKyMgRUFQLVRUTFMKK0NPTkZJR19FQVBfVFRMUz15CisKKyMgRUFQLUZBU1QKKyMgTm90ZTogSWYgT3BlblNTTCBpcyB1c2VkIGFzIHRoZSBUTFMgbGlicmFyeSwgT3BlblNTTCAxLjAgb3IgbmV3ZXIgaXMgbmVlZGVkCisjIGZvciBFQVAtRkFTVCBzdXBwb3J0LiBPbGRlciBPcGVuU1NMIHJlbGVhc2VzIHdvdWxkIG5lZWQgdG8gYmUgcGF0Y2hlZCwgZS5nLiwKKyMgd2l0aCBvcGVuc3NsLTAuOS44eC10bHMtZXh0ZW5zaW9ucy5wYXRjaCwgdG8gYWRkIHRoZSBuZWVkZWQgZnVuY3Rpb25zLgorI0NPTkZJR19FQVBfRkFTVD15CisKKyMgRUFQLUdUQworQ09ORklHX0VBUF9HVEM9eQorCisjIEVBUC1PVFAKK0NPTkZJR19FQVBfT1RQPXkKKworIyBFQVAtU0lNIChlbmFibGUgQ09ORklHX1BDU0MsIGlmIEVBUC1TSU0gaXMgdXNlZCkKKyNDT05GSUdfRUFQX1NJTT15CisKKyMgRUFQLVBTSyAoZXhwZXJpbWVudGFsOyB0aGlzIGlzIF9ub3RfIG5lZWRlZCBmb3IgV1BBLVBTSykKKyNDT05GSUdfRUFQX1BTSz15CisKKyMgRUFQLXB3ZCAoc2VjdXJlIGF1dGhlbnRpY2F0aW9uIHVzaW5nIG9ubHkgYSBwYXNzd29yZCkKKyNDT05GSUdfRUFQX1BXRD15CisKKyMgRUFQLVBBWAorI0NPTkZJR19FQVBfUEFYPXkKKworIyBMRUFQCitDT05GSUdfRUFQX0xFQVA9eQorCisjIEVBUC1BS0EgKGVuYWJsZSBDT05GSUdfUENTQywgaWYgRUFQLUFLQSBpcyB1c2VkKQorI0NPTkZJR19FQVBfQUtBPXkKKworIyBFQVAtQUtBJyAoZW5hYmxlIENPTkZJR19QQ1NDLCBpZiBFQVAtQUtBJyBpcyB1c2VkKS4KKyMgVGhpcyByZXF1aXJlcyBDT05GSUdfRUFQX0FLQSB0byBiZSBlbmFibGVkLCB0b28uCisjQ09ORklHX0VBUF9BS0FfUFJJTUU9eQorCisjIEVuYWJsZSBVU0lNIHNpbXVsYXRvciAoTWlsZW5hZ2UpIGZvciBFQVAtQUtBCisjQ09ORklHX1VTSU1fU0lNVUxBVE9SPXkKKworIyBFQVAtU0FLRQorI0NPTkZJR19FQVBfU0FLRT15CisKKyMgRUFQLUdQU0sKKyNDT05GSUdfRUFQX0dQU0s9eQorIyBJbmNsdWRlIHN1cHBvcnQgZm9yIG9wdGlvbmFsIFNIQTI1NiBjaXBoZXIgc3VpdGUgaW4gRUFQLUdQU0sKKyNDT05GSUdfRUFQX0dQU0tfU0hBMjU2PXkKKworIyBFQVAtVE5DIGFuZCByZWxhdGVkIFRydXN0ZWQgTmV0d29yayBDb25uZWN0IHN1cHBvcnQgKGV4cGVyaW1lbnRhbCkKKyNDT05GSUdfRUFQX1ROQz15CisKKyMgV2ktRmkgUHJvdGVjdGVkIFNldHVwIChXUFMpCitDT05GSUdfV1BTPXkKKyMgRW5hYmxlIFdTQyAyLjAgc3VwcG9ydAorI0NPTkZJR19XUFMyPXkKKyMgRW5hYmxlIFdQUyBleHRlcm5hbCByZWdpc3RyYXIgZnVuY3Rpb25hbGl0eQorI0NPTkZJR19XUFNfRVI9eQorIyBEaXNhYmxlIGNyZWRlbnRpYWxzIGZvciBhbiBvcGVuIG5ldHdvcmsgYnkgZGVmYXVsdCB3aGVuIGFjdGluZyBhcyBhIFdQUworIyByZWdpc3RyYXIuCisjQ09ORklHX1dQU19SRUdfRElTQUJMRV9PUEVOPXkKKyMgRW5hYmxlIFdQUyBzdXBwb3J0IHdpdGggTkZDIGNvbmZpZyBtZXRob2QKKyNDT05GSUdfV1BTX05GQz15CisKKyMgRUFQLUlLRXYyCisjQ09ORklHX0VBUF9JS0VWMj15CisKKyMgRUFQLUVLRQorI0NPTkZJR19FQVBfRUtFPXkKKworIyBQS0NTIzEyIChQRlgpIHN1cHBvcnQgKHVzZWQgdG8gcmVhZCBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUgZmlsZSBmcm9tCisjIGEgZmlsZSB0aGF0IHVzdWFsbHkgaGFzIGV4dGVuc2lvbiAucDEyIG9yIC5wZngpCitDT05GSUdfUEtDUzEyPXkKKworIyBTbWFydGNhcmQgc3VwcG9ydCAoaS5lLiwgcHJpdmF0ZSBrZXkgb24gYSBzbWFydGNhcmQpLCBlLmcuLCB3aXRoIG9wZW5zc2wKKyMgZW5naW5lLgorQ09ORklHX1NNQVJUQ0FSRD15CisKKyMgUEMvU0MgaW50ZXJmYWNlIGZvciBzbWFydGNhcmRzIChVU0lNLCBHU00gU0lNKQorIyBFbmFibGUgdGhpcyBpZiBFQVAtU0lNIG9yIEVBUC1BS0EgaXMgaW5jbHVkZWQKKyNDT05GSUdfUENTQz15CisKKyMgU3VwcG9ydCBIVCBvdmVycmlkZXMgKGRpc2FibGUgSFQvSFQ0MCwgbWFzayBNQ1MgcmF0ZXMsIGV0Yy4pCisjQ09ORklHX0hUX09WRVJSSURFUz15CisKKyMgU3VwcG9ydCBWSFQgb3ZlcnJpZGVzIChkaXNhYmxlIFZIVCwgbWFzayBNQ1MgcmF0ZXMsIGV0Yy4pCisjQ09ORklHX1ZIVF9PVkVSUklERVM9eQorCisjIERldmVsb3BtZW50IHRlc3RpbmcKKyNDT05GSUdfRUFQT0xfVEVTVD15CisKKyMgU2VsZWN0IGNvbnRyb2wgaW50ZXJmYWNlIGJhY2tlbmQgZm9yIGV4dGVybmFsIHByb2dyYW1zLCBlLmcsIHdwYV9jbGk6CisjIHVuaXggPSBVTklYIGRvbWFpbiBzb2NrZXRzIChkZWZhdWx0IGZvciBMaW51eC8qQlNEKQorIyB1ZHAgPSBVRFAgc29ja2V0cyB1c2luZyBsb2NhbGhvc3QgKDEyNy4wLjAuMSkKKyMgbmFtZWRfcGlwZSA9IFdpbmRvd3MgTmFtZWQgUGlwZSAoZGVmYXVsdCBmb3IgV2luZG93cykKKyMgdWRwLXJlbW90ZSA9IFVEUCBzb2NrZXRzIHdpdGggcmVtb3RlIGFjY2VzcyAob25seSBmb3IgdGVzdHMgc3lzdGVtcy9wdXJwb3NlKQorIyB5ID0gdXNlIGRlZmF1bHQgKGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KQorIyBJZiB0aGlzIG9wdGlvbiBpcyBjb21tZW50ZWQgb3V0LCBjb250cm9sIGludGVyZmFjZSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlCisjIGJ1aWxkLgorQ09ORklHX0NUUkxfSUZBQ0U9eQorCisjIEluY2x1ZGUgc3VwcG9ydCBmb3IgR05VIFJlYWRsaW5lIGFuZCBIaXN0b3J5IExpYnJhcmllcyBpbiB3cGFfY2xpLgorIyBXaGVuIGJ1aWxkaW5nIGEgd3BhX2NsaSBiaW5hcnkgZm9yIGRpc3RyaWJ1dGlvbiwgcGxlYXNlIG5vdGUgdGhhdCB0aGVzZQorIyBsaWJyYXJpZXMgYXJlIGxpY2Vuc2VkIHVuZGVyIEdQTCBhbmQgYXMgc3VjaCwgQlNEIGxpY2Vuc2UgbWF5IG5vdCBhcHBseSBmb3IKKyMgdGhlIHJlc3VsdGluZyBiaW5hcnkuCisjQ09ORklHX1JFQURMSU5FPXkKKworIyBJbmNsdWRlIGludGVybmFsIGxpbmUgZWRpdCBtb2RlIGluIHdwYV9jbGkuIFRoaXMgY2FuIGJlIHVzZWQgYXMgYSByZXBsYWNlbWVudAorIyBmb3IgR05VIFJlYWRsaW5lIHRvIHByb3ZpZGUgbGltaXRlZCBjb21tYW5kIGxpbmUgZWRpdGluZyBhbmQgaGlzdG9yeSBzdXBwb3J0LgorI0NPTkZJR19XUEFfQ0xJX0VESVQ9eQorCisjIFJlbW92ZSBkZWJ1Z2dpbmcgY29kZSB0aGF0IGlzIHByaW50aW5nIG91dCBkZWJ1ZyBtZXNzYWdlIHRvIHN0ZG91dC4KKyMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIHdwYV9zdXBwbGljYW50IGNvbnNpZGVyYWJseQorIyBpZiBkZWJ1Z2dpbmcgY29kZSBpcyBub3QgbmVlZGVkLiBUaGUgc2l6ZSByZWR1Y3Rpb24gY2FuIGJlIGFyb3VuZCAzNSUKKyMgKGUuZy4sIDkwIGtCKS4KKyNDT05GSUdfTk9fU1RET1VUX0RFQlVHPXkKKworIyBSZW1vdmUgV1BBIHN1cHBvcnQsIGUuZy4sIGZvciB3aXJlZC1vbmx5IElFRUUgODAyLjFYIHN1cHBsaWNhbnQsIHRvIHNhdmUKKyMgMzUtNTAga0IgaW4gY29kZSBzaXplLgorI0NPTkZJR19OT19XUEE9eQorCisjIFJlbW92ZSBJRUVFIDgwMi4xMWkvV1BBLVBlcnNvbmFsIEFTQ0lJIHBhc3NwaHJhc2Ugc3VwcG9ydAorIyBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZWR1Y2UgY29kZSBzaXplIGJ5IHJlbW92aW5nIHN1cHBvcnQgZm9yCisjIGNvbnZlcnRpbmcgQVNDSUkgcGFzc3BocmFzZXMgaW50byBQU0suIElmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyByZW1vdmVkLCB0aGUKKyMgUFNLIGNhbiBvbmx5IGJlIGNvbmZpZ3VyZWQgYXMgdGhlIDY0LW9jdGV0IGhleHN0cmluZyAoZS5nLiwgZnJvbQorIyB3cGFfcGFzc3BocmFzZSkuIFRoaXMgc2F2ZXMgYWJvdXQgMC41IGtCIGluIGNvZGUgc2l6ZS4KKyNDT05GSUdfTk9fV1BBX1BBU1NQSFJBU0U9eQorCisjIERpc2FibGUgc2NhbiByZXN1bHQgcHJvY2Vzc2luZyAoYXBfbW9kZT0xKSB0byBzYXZlIGNvZGUgc2l6ZSBieSBhYm91dCAxIGtCLgorIyBUaGlzIGNhbiBiZSB1c2VkIGlmIGFwX3NjYW49MSBtb2RlIGlzIG5ldmVyIGVuYWJsZWQuCisjQ09ORklHX05PX1NDQU5fUFJPQ0VTU0lORz15CisKKyMgU2VsZWN0IGNvbmZpZ3VyYXRpb24gYmFja2VuZDoKKyMgZmlsZSA9IHRleHQgZmlsZSAoZS5nLiwgd3BhX3N1cHBsaWNhbnQuY29uZjsgbm90ZTogdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQorIwlwYXRoIGlzIGdpdmVuIG9uIGNvbW1hbmQgbGluZSwgbm90IGhlcmU7IHRoaXMgb3B0aW9uIGlzIGp1c3QgdXNlZCB0bworIwlzZWxlY3QgdGhlIGJhY2tlbmQgdGhhdCBhbGxvd3MgY29uZmlndXJhdGlvbiBmaWxlcyB0byBiZSB1c2VkKQorIyB3aW5yZWcgPSBXaW5kb3dzIHJlZ2lzdHJ5IChzZWUgd2luX2V4YW1wbGUucmVnIGZvciBhbiBleGFtcGxlKQorQ09ORklHX0JBQ0tFTkQ9ZmlsZQorCisjIFJlbW92ZSBjb25maWd1cmF0aW9uIHdyaXRlIGZ1bmN0aW9uYWxpdHkgKGkuZS4sIHRvIGFsbG93IHRoZSBjb25maWd1cmF0aW9uCisjIGZpbGUgdG8gYmUgdXBkYXRlZCBiYXNlZCBvbiBydW50aW1lIGNvbmZpZ3VyYXRpb24gY2hhbmdlcykuIFRoZSBydW50aW1lCisjIGNvbmZpZ3VyYXRpb24gY2FuIHN0aWxsIGJlIGNoYW5nZWQsIHRoZSBjaGFuZ2VzIGFyZSBqdXN0IG5vdCBnb2luZyB0byBiZQorIyBwZXJzaXN0ZW50IG92ZXIgcmVzdGFydHMuIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlZHVjZSBjb2RlIHNpemUgYnkKKyMgYWJvdXQgMy41IGtCLgorI0NPTkZJR19OT19DT05GSUdfV1JJVEU9eQorCisjIFJlbW92ZSBzdXBwb3J0IGZvciBjb25maWd1cmF0aW9uIGJsb2JzIHRvIHJlZHVjZSBjb2RlIHNpemUgYnkgYWJvdXQgMS41IGtCLgorI0NPTkZJR19OT19DT05GSUdfQkxPQlM9eQorCisjIFNlbGVjdCBwcm9ncmFtIGVudHJ5IHBvaW50IGltcGxlbWVudGF0aW9uOgorIyBtYWluID0gVU5JWC9QT1NJWCBsaWtlIG1haW4oKSBmdW5jdGlvbiAoZGVmYXVsdCkKKyMgbWFpbl93aW5zdmMgPSBXaW5kb3dzIHNlcnZpY2UgKHJlYWQgcGFyYW1ldGVycyBmcm9tIHJlZ2lzdHJ5KQorIyBtYWluX25vbmUgPSBWZXJ5IGJhc2ljIGV4YW1wbGUgKGRldmVsb3BtZW50IHVzZSBvbmx5KQorI0NPTkZJR19NQUlOPW1haW4KKworIyBTZWxlY3Qgd3JhcHBlciBmb3Igb3BlcmF0aW5zIHN5c3RlbSBhbmQgQyBsaWJyYXJ5IHNwZWNpZmljIGZ1bmN0aW9ucworIyB1bml4ID0gVU5JWC9QT1NJWCBsaWtlIHN5c3RlbXMgKGRlZmF1bHQpCisjIHdpbjMyID0gV2luZG93cyBzeXN0ZW1zCisjIG5vbmUgPSBFbXB0eSB0ZW1wbGF0ZQorI0NPTkZJR19PUz11bml4CisKKyMgU2VsZWN0IGV2ZW50IGxvb3AgaW1wbGVtZW50YXRpb24KKyMgZWxvb3AgPSBzZWxlY3QoKSBsb29wIChkZWZhdWx0KQorIyBlbG9vcF93aW4gPSBXaW5kb3dzIGV2ZW50cyBhbmQgV2FpdEZvck11bHRpcGxlT2JqZWN0KCkgbG9vcAorI0NPTkZJR19FTE9PUD1lbG9vcAorCisjIFNob3VsZCB3ZSB1c2UgcG9sbCBpbnN0ZWFkIG9mIHNlbGVjdD8gU2VsZWN0IGlzIHVzZWQgYnkgZGVmYXVsdC4KKyNDT05GSUdfRUxPT1BfUE9MTD15CisKKyMgU2VsZWN0IGxheWVyIDIgcGFja2V0IGltcGxlbWVudGF0aW9uCisjIGxpbnV4ID0gTGludXggcGFja2V0IHNvY2tldCAoZGVmYXVsdCkKKyMgcGNhcCA9IGxpYnBjYXAvbGliZG5ldC9XaW5QY2FwCisjIGZyZWVic2QgPSBGcmVlQlNEIGxpYnBjYXAKKyMgd2lucGNhcCA9IFdpblBjYXAgd2l0aCByZWNlaXZlIHRocmVhZAorIyBuZGlzID0gV2luZG93cyBORElTVUlPIChub3RlOiByZXF1aXJlcyBDT05GSUdfVVNFX05ESVNVSU89eSkKKyMgbm9uZSA9IEVtcHR5IHRlbXBsYXRlCisjQ09ORklHX0wyX1BBQ0tFVD1saW51eAorCisjIFBlZXJLZXkgaGFuZHNoYWtlIGZvciBTdGF0aW9uIHRvIFN0YXRpb24gTGluayAoSUVFRSA4MDIuMTFlIERMUykKK0NPTkZJR19QRUVSS0VZPXkKKworIyBJRUVFIDgwMi4xMXcgKG1hbmFnZW1lbnQgZnJhbWUgcHJvdGVjdGlvbiksIGFsc28ga25vd24gYXMgUE1GCisjIERyaXZlciBzdXBwb3J0IGlzIGFsc28gbmVlZGVkIGZvciBJRUVFIDgwMi4xMXcuCisjQ09ORklHX0lFRUU4MDIxMVc9eQorCisjIFNlbGVjdCBUTFMgaW1wbGVtZW50YXRpb24KKyMgb3BlbnNzbCA9IE9wZW5TU0wgKGRlZmF1bHQpCisjIGdudXRscyA9IEdudVRMUworIyBpbnRlcm5hbCA9IEludGVybmFsIFRMU3YxIGltcGxlbWVudGF0aW9uIChleHBlcmltZW50YWwpCisjIG5vbmUgPSBFbXB0eSB0ZW1wbGF0ZQorI0NPTkZJR19UTFM9b3BlbnNzbAorCisjIFRMUy1iYXNlZCBFQVAgbWV0aG9kcyByZXF1aXJlIGF0IGxlYXN0IFRMUyB2MS4wLiBOZXdlciB2ZXJzaW9uIG9mIFRMUyAodjEuMSkKKyMgY2FuIGJlIGVuYWJsZWQgdG8gZ2V0IGEgc3Ryb25nZXIgY29uc3RydWN0aW9uIG9mIG1lc3NhZ2VzIHdoZW4gYmxvY2sgY2lwaGVycworIyBhcmUgdXNlZC4gSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgc29tZSBleGlzdGluZyBUTFMgdjEuMCAtYmFzZWQKKyMgaW1wbGVtZW50YXRpb24gbWF5IG5vdCBiZSBjb21wYXRpYmxlIHdpdGggVExTIHYxLjEgbWVzc2FnZSAoQ2xpZW50SGVsbG8gaXMKKyMgc2VudCBwcmlvciB0byBuZWdvdGlhdGluZyB3aGljaCB2ZXJzaW9uIHdpbGwgYmUgdXNlZCkKKyNDT05GSUdfVExTVjExPXkKKworIyBUTFMtYmFzZWQgRUFQIG1ldGhvZHMgcmVxdWlyZSBhdCBsZWFzdCBUTFMgdjEuMC4gTmV3ZXIgdmVyc2lvbiBvZiBUTFMgKHYxLjIpCisjIGNhbiBiZSBlbmFibGVkIHRvIGVuYWJsZSB1c2Ugb2Ygc3Ryb25nZXIgY3J5cHRvIGFsZ29yaXRobXMuIEl0IHNob3VsZCBiZQorIyBub3RlZCB0aGF0IHNvbWUgZXhpc3RpbmcgVExTIHYxLjAgLWJhc2VkIGltcGxlbWVudGF0aW9uIG1heSBub3QgYmUgY29tcGF0aWJsZQorIyB3aXRoIFRMUyB2MS4yIG1lc3NhZ2UgKENsaWVudEhlbGxvIGlzIHNlbnQgcHJpb3IgdG8gbmVnb3RpYXRpbmcgd2hpY2ggdmVyc2lvbgorIyB3aWxsIGJlIHVzZWQpCisjQ09ORklHX1RMU1YxMj15CisKKyMgSWYgQ09ORklHX1RMUz1pbnRlcm5hbCBpcyB1c2VkLCBhZGRpdGlvbmFsIGxpYnJhcnkgYW5kIGluY2x1ZGUgcGF0aHMgYXJlCisjIG5lZWRlZCBmb3IgTGliVG9tTWF0aC4gQWx0ZXJuYXRpdmVseSwgYW4gaW50ZWdyYXRlZCwgbWluaW1hbCB2ZXJzaW9uIG9mCisjIExpYlRvbU1hdGggY2FuIGJlIHVzZWQuIFNlZSBiZWdpbm5pbmcgb2YgbGlidG9tbWF0aC5jIGZvciBkZXRhaWxzIG9uIGJlbmVmaXRzCisjIGFuZCBkcmF3YmFja3Mgb2YgdGhpcyBvcHRpb24uCisjQ09ORklHX0lOVEVSTkFMX0xJQlRPTU1BVEg9eQorI2lmbmRlZiBDT05GSUdfSU5URVJOQUxfTElCVE9NTUFUSAorI0xUTV9QQVRIPS91c3Ivc3JjL2xpYnRvbW1hdGgtMC4zOQorI0NGTEFHUyArPSAtSSQoTFRNX1BBVEgpCisjTElCUyArPSAtTCQoTFRNX1BBVEgpCisjTElCU19wICs9IC1MJChMVE1fUEFUSCkKKyNlbmRpZgorIyBBdCB0aGUgY29zdCBvZiBhYm91dCA0IGtCIG9mIGFkZGl0aW9uYWwgYmluYXJ5IHNpemUsIHRoZSBpbnRlcm5hbCBMaWJUb21NYXRoCisjIGNhbiBiZSBjb25maWd1cmVkIHRvIGluY2x1ZGUgZmFzdGVyIHJvdXRpbmVzIGZvciBleHB0bW9kLCBzcXIsIGFuZCBkaXYgdG8KKyMgc3BlZWQgdXAgREggYW5kIFJTQSBjYWxjdWxhdGlvbiBjb25zaWRlcmFibHkKKyNDT05GSUdfSU5URVJOQUxfTElCVE9NTUFUSF9GQVNUPXkKKworIyBJbmNsdWRlIE5ESVMgZXZlbnQgcHJvY2Vzc2luZyB0aHJvdWdoIFdNSSBpbnRvIHdwYV9zdXBwbGljYW50L3dwYXN2Yy4KKyMgVGhpcyBpcyBvbmx5IGZvciBXaW5kb3dzIGJ1aWxkcyBhbmQgcmVxdWlyZXMgV01JLXJlbGF0ZWQgaGVhZGVyIGZpbGVzIGFuZAorIyBXYmVtVXVpZC5MaWIgZnJvbSBQbGF0Zm9ybSBTREsgZXZlbiB3aGVuIGJ1aWxkaW5nIHdpdGggTWluR1cuCisjQ09ORklHX05ESVNfRVZFTlRTX0lOVEVHUkFURUQ9eQorI1BMQVRGT1JNU0RLTElCPSIvb3B0L1Byb2dyYW0gRmlsZXMvTWljcm9zb2Z0IFBsYXRmb3JtIFNESy9MaWIiCisKKyMgQWRkIHN1cHBvcnQgZm9yIG9sZCBEQnVzIGNvbnRyb2wgaW50ZXJmYWNlCisjIChmaS5lcGl0ZXN0Lmhvc3RhcC5XUEFTdXBwbGljYW50KQorI0NPTkZJR19DVFJMX0lGQUNFX0RCVVM9eQorCisjIEFkZCBzdXBwb3J0IGZvciBuZXcgREJ1cyBjb250cm9sIGludGVyZmFjZQorIyAoZmkudzEuaG9zdGFwLndwYV9zdXBwbGljYW50MSkKK0NPTkZJR19DVFJMX0lGQUNFX0RCVVNfTkVXPXkKKworIyBBZGQgaW50cm9zcGVjdGlvbiBzdXBwb3J0IGZvciBuZXcgREJ1cyBjb250cm9sIGludGVyZmFjZQorI0NPTkZJR19DVFJMX0lGQUNFX0RCVVNfSU5UUk89eQorCisjIEFkZCBzdXBwb3J0IGZvciBsb2FkaW5nIEVBUCBtZXRob2RzIGR5bmFtaWNhbGx5IGFzIHNoYXJlZCBsaWJyYXJpZXMuCisjIFdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgZWFjaCBFQVAgbWV0aG9kIGNhbiBiZSBlaXRoZXIgaW5jbHVkZWQKKyMgc3RhdGljYWxseSAoQ09ORklHX0VBUF88bWV0aG9kPj15KSBvciBkeW5hbWljYWxseSAoQ09ORklHX0VBUF88bWV0aG9kPj1keW4pLgorIyBEeW5hbWljIEVBUCBtZXRob2RzIGFyZSBidWlsZCBhcyBzaGFyZWQgb2JqZWN0cyAoZWFwXyouc28pIGFuZCB0aGV5IG5lZWQgdG8KKyMgYmUgbG9hZGVkIGluIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHdwYV9zdXBwbGljYW50IGNvbmZpZ3VyYXRpb24gZmlsZQorIyAoc2VlIGxvYWRfZHluYW1pY19lYXAgcGFyYW1ldGVyIGluIHRoZSBleGFtcGxlIGZpbGUpIGJlZm9yZSBiZWluZyB1c2VkIGluCisjIHRoZSBuZXR3b3JrIGJsb2Nrcy4KKyMKKyMgTm90ZSB0aGF0IHNvbWUgc2hhcmVkIHBhcnRzIG9mIEVBUCBtZXRob2RzIGFyZSBpbmNsdWRlZCBpbiB0aGUgbWFpbiBwcm9ncmFtCisjIGFuZCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSBkeW5hbWljIEVBUCBtZXRob2RzIHVzaW5nIHRoZXNlIHBhcnRzLCB0aGUKKyMgbWFpbiBwcm9ncmFtIG11c3QgaGF2ZSBiZWVuIGJ1aWxkIHdpdGggdGhlIEVBUCBtZXRob2QgZW5hYmxlZCAoPXkgb3IgPWR5bikuCisjIFRoaXMgbWVhbnMgdGhhdCBFQVAtVExTL1BFQVAvVFRMUy9GQVNUIGNhbm5vdCBiZSBhZGRlZCBhcyBkeW5hbWljIGxpYnJhcmllcworIyB1bmxlc3MgYXQgbGVhc3Qgb25lIG9mIHRoZW0gd2FzIGluY2x1ZGVkIGluIHRoZSBtYWluIGJ1aWxkIHRvIGZvcmNlIGluY2x1c2lvbgorIyBvZiB0aGUgc2hhcmVkIGNvZGUuIFNpbWlsYXJseSwgYXQgbGVhc3Qgb25lIG9mIEVBUC1TSU0vQUtBIG11c3QgYmUgaW5jbHVkZWQKKyMgaW4gdGhlIG1haW4gYnVpbGQgdG8gYmUgYWJsZSB0byBsb2FkIHRoZXNlIG1ldGhvZHMgZHluYW1pY2FsbHkuCisjCisjIFBsZWFzZSBhbHNvIG5vdGUgdGhhdCB1c2luZyBkeW5hbWljIGxpYnJhcmllcyB3aWxsIGluY3JlYXNlIHRoZSB0b3RhbCBiaW5hcnkKKyMgc2l6ZS4gVGh1cywgaXQgbWF5IG5vdCBiZSB0aGUgYmVzdCBvcHRpb24gZm9yIHRhcmdldHMgdGhhdCBoYXZlIGxpbWl0ZWQKKyMgYW1vdW50IG9mIG1lbW9yeS9mbGFzaC4KKyNDT05GSUdfRFlOQU1JQ19FQVBfTUVUSE9EUz15CisKKyMgSUVFRSBTdGQgODAyLjExci0yMDA4IChGYXN0IEJTUyBUcmFuc2l0aW9uKQorI0NPTkZJR19JRUVFODAyMTFSPXkKKworIyBBZGQgc3VwcG9ydCBmb3Igd3JpdGluZyBkZWJ1ZyBsb2cgdG8gYSBmaWxlICgvdG1wL3dwYV9zdXBwbGljYW50LWxvZy0jLnR4dCkKKyNDT05GSUdfREVCVUdfRklMRT15CisKKyMgU2VuZCBkZWJ1ZyBtZXNzYWdlcyB0byBzeXNsb2cgaW5zdGVhZCBvZiBzdGRvdXQKKyNDT05GSUdfREVCVUdfU1lTTE9HPXkKKyMgU2V0IHN5c2xvZyBmYWNpbGl0eSBmb3IgZGVidWcgbWVzc2FnZXMKKyNDT05GSUdfREVCVUdfU1lTTE9HX0ZBQ0lMSVRZPUxPR19EQUVNT04KKworIyBBZGQgc3VwcG9ydCBmb3Igc2VuZGluZyBhbGwgZGVidWcgbWVzc2FnZXMgKHJlZ2FyZGxlc3Mgb2YgZGVidWcgdmVyYm9zaXR5KQorIyB0byB0aGUgTGludXgga2VybmVsIHRyYWNpbmcgZmFjaWxpdHkuIFRoaXMgaGVscHMgZGVidWcgdGhlIGVudGlyZSBzdGFjayBieQorIyBtYWtpbmcgaXQgZWFzeSB0byByZWNvcmQgZXZlcnl0aGluZyBoYXBwZW5pbmcgZnJvbSB0aGUgZHJpdmVyIHVwIGludG8gdGhlCisjIHNhbWUgZmlsZSwgZS5nLiwgdXNpbmcgdHJhY2UtY21kLgorI0NPTkZJR19ERUJVR19MSU5VWF9UUkFDSU5HPXkKKworIyBFbmFibGUgcHJpdmlsZWdlIHNlcGFyYXRpb24gKHNlZSBSRUFETUUgJ1ByaXZpbGVnZSBzZXBhcmF0aW9uJyBmb3IgZGV0YWlscykKKyNDT05GSUdfUFJJVlNFUD15CisKKyMgRW5hYmxlIG1pdGlnYXRpb24gYWdhaW5zdCBjZXJ0YWluIGF0dGFja3MgYWdhaW5zdCBUS0lQIGJ5IGRlbGF5aW5nIE1pY2hhZWwKKyMgTUlDIGVycm9yIHJlcG9ydHMgYnkgYSByYW5kb20gYW1vdW50IG9mIHRpbWUgYmV0d2VlbiAwIGFuZCA2MCBzZWNvbmRzCisjQ09ORklHX0RFTEFZRURfTUlDX0VSUk9SX1JFUE9SVD15CisKKyMgRW5hYmxlIHRyYWNpbmcgY29kZSBmb3IgZGV2ZWxvcGVyIGRlYnVnZ2luZworIyBUaGlzIHRyYWNrcyB1c2Ugb2YgbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBvdGhlciByZWdpc3RyYXRpb25zIGFuZCByZXBvcnRzCisjIGluY29ycmVjdCB1c2Ugd2l0aCBhIGJhY2t0cmFjZSBvZiBjYWxsIChvciBhbGxvY2F0aW9uKSBsb2NhdGlvbi4KKyNDT05GSUdfV1BBX1RSQUNFPXkKKyMgRm9yIEJTRCwgdW5jb21tZW50IHRoZXNlLgorI0xJQlMgKz0gLWxleGVjaW5mbworI0xJQlNfcCArPSAtbGV4ZWNpbmZvCisjTElCU19jICs9IC1sZXhlY2luZm8KKworIyBVc2UgbGliYmZkIHRvIGdldCBtb3JlIGRldGFpbHMgZm9yIGRldmVsb3BlciBkZWJ1Z2dpbmcKKyMgVGhpcyBlbmFibGVzIHVzZSBvZiBsaWJiZmQgdG8gZ2V0IG1vcmUgZGV0YWlsZWQgc3ltYm9scyBmb3IgdGhlIGJhY2t0cmFjZXMKKyMgZ2VuZXJhdGVkIGJ5IENPTkZJR19XUEFfVFJBQ0U9eS4KKyNDT05GSUdfV1BBX1RSQUNFX0JGRD15CisjIEZvciBCU0QsIHVuY29tbWVudCB0aGVzZS4KKyNMSUJTICs9IC1sYmZkIC1saWJlcnR5IC1segorI0xJQlNfcCArPSAtbGJmZCAtbGliZXJ0eSAtbHoKKyNMSUJTX2MgKz0gLWxiZmQgLWxpYmVydHkgLWx6CisKK0NPTkZJR19UTFMgPSAlc3NsJQorQ09ORklHX0NUUkxfSUZBQ0VfREJVUz15CitDT05GSUdfQ1RSTF9JRkFDRV9EQlVTX05FVz15CisKKyMgd3BhX3N1cHBsaWNhbnQgZGVwZW5kcyBvbiBzdHJvbmcgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGJlaW5nIGF2YWlsYWJsZQorIyBmcm9tIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBvc19nZXRfcmFuZG9tKCkgZnVuY3Rpb24gaXMgdXNlZCB0byBmZXRjaCByYW5kb20KKyMgZGF0YSB3aGVuIG5lZWRlZCwgZS5nLiwgZm9yIGtleSBnZW5lcmF0aW9uLiBPbiBMaW51eCBhbmQgQlNEIHN5c3RlbXMsIHRoaXMKKyMgd29ya3MgYnkgcmVhZGluZyAvZGV2L3VyYW5kb20uIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHRoZSBPUyBlbnRyb3B5IHBvb2wKKyMgbmVlZHMgdG8gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHdwYV9zdXBwbGljYW50IGlzIHN0YXJ0ZWQuIFRoaXMgaXMKKyMgaW1wb3J0YW50IGVzcGVjaWFsbHkgb24gZW1iZWRkZWQgZGV2aWNlcyB0aGF0IGRvIG5vdCBoYXZlIGEgaGFyZHdhcmUgcmFuZG9tCisjIG51bWJlciBnZW5lcmF0b3IgYW5kIG1heSBieSBkZWZhdWx0IHN0YXJ0IHVwIHdpdGggbWluaW1hbCBlbnRyb3B5IGF2YWlsYWJsZQorIyBmb3IgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLgorIworIyBBcyBhIHNhZmV0eSBuZXQsIHdwYV9zdXBwbGljYW50IGlzIGJ5IGRlZmF1bHQgdHJ5aW5nIHRvIGludGVybmFsbHkgY29sbGVjdAorIyBhZGRpdGlvbmFsIGVudHJvcHkgZm9yIGdlbmVyYXRpbmcgcmFuZG9tIGRhdGEgdG8gbWl4IGluIHdpdGggdGhlIGRhdGEgZmV0Y2hlZAorIyBmcm9tIHRoZSBPUy4gVGhpcyBieSBpdHNlbGYgaXMgbm90IGNvbnNpZGVyZWQgdG8gYmUgdmVyeSBzdHJvbmcsIGJ1dCBpdCBtYXkKKyMgaGVscCBpbiBjYXNlcyB3aGVyZSB0aGUgc3lzdGVtIHBvb2wgaXMgbm90IGluaXRpYWxpemVkIHByb3Blcmx5LiBIb3dldmVyLCBpdAorIyBpcyB2ZXJ5IHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgdGhlIHN5c3RlbSBwb29sIGlzIGluaXRpYWxpemVkIHdpdGggZW5vdWdoCisjIGVudHJvcHkgZWl0aGVyIGJ5IHVzaW5nIGhhcmR3YXJlIGFzc2lzdGVkIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9yIGJ5CisjIHN0b3Jpbmcgc3RhdGUgb3ZlciBkZXZpY2UgcmVib290cy4KKyMKKyMgd3BhX3N1cHBsaWNhbnQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gbWFpbnRhaW4gaXRzIG93biBlbnRyb3B5IHN0b3JlIG92ZXIKKyMgcmVzdGFydHMgdG8gZW5oYW5jZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24uIFRoaXMgaXMgbm90IHBlcmZlY3QsIGJ1dCBpdCBpcworIyBtdWNoIG1vcmUgc2VjdXJlIHRoYW4gdXNpbmcgdGhlIHNhbWUgc2VxdWVuY2Ugb2YgcmFuZG9tIG51bWJlcnMgYWZ0ZXIgZXZlcnkKKyMgcmVib290LiBUaGlzIGNhbiBiZSBlbmFibGVkIHdpdGggLWU8ZW50cm9weSBmaWxlPiBjb21tYW5kIGxpbmUgb3B0aW9uLiBUaGUKKyMgc3BlY2lmaWVkIGZpbGUgbmVlZHMgdG8gYmUgcmVhZGFibGUgYW5kIHdyaXRhYmxlIGJ5IHdwYV9zdXBwbGljYW50LgorIworIyBJZiB0aGUgb3NfZ2V0X3JhbmRvbSgpIGlzIGtub3duIHRvIHByb3ZpZGUgc3Ryb25nIHJhbmRvbSBkYXRhIChlLmcuLCBvbgorIyBMaW51eC9CU0QsIHRoZSBib2FyZCBpbiBxdWVzdGlvbiBpcyBrbm93biB0byBoYXZlIHJlbGlhYmxlIHNvdXJjZSBvZiByYW5kb20KKyMgZGF0YSBmcm9tIC9kZXYvdXJhbmRvbSksIHRoZSBpbnRlcm5hbCB3cGFfc3VwcGxpY2FudCByYW5kb20gcG9vbCBjYW4gYmUKKyMgZGlzYWJsZWQuIFRoaXMgd2lsbCBzYXZlIHNvbWUgaW4gYmluYXJ5IHNpemUgYW5kIENQVSB1c2UuIEhvd2V2ZXIsIHRoaXMKKyMgc2hvdWxkIG9ubHkgYmUgY29uc2lkZXJlZCBmb3IgYnVpbGRzIHRoYXQgYXJlIGtub3duIHRvIGJlIHVzZWQgb24gZGV2aWNlcworIyB0aGF0IG1lZXQgdGhlIHJlcXVpcmVtZW50cyBkZXNjcmliZWQgYWJvdmUuCisjQ09ORklHX05PX1JBTkRPTV9QT09MPXkKKworIyBJRUVFIDgwMi4xMW4gKEhpZ2ggVGhyb3VnaHB1dCkgc3VwcG9ydCAobWFpbmx5IGZvciBBUCBtb2RlKQorI0NPTkZJR19JRUVFODAyMTFOPXkKKworIyBJRUVFIDgwMi4xMWFjIChWZXJ5IEhpZ2ggVGhyb3VnaHB1dCkgc3VwcG9ydCAobWFpbmx5IGZvciBBUCBtb2RlKQorIyAoZGVwZW5kcyBvbiBDT05GSUdfSUVFRTgwMjExTikKKyNDT05GSUdfSUVFRTgwMjExQUM9eQorCisjIFdpcmVsZXNzIE5ldHdvcmsgTWFuYWdlbWVudCAoSUVFRSBTdGQgODAyLjExdi0yMDExKQorIyBOb3RlOiBUaGlzIGlzIGV4cGVyaW1lbnRhbCBhbmQgbm90IGNvbXBsZXRlIGltcGxlbWVudGF0aW9uLgorI0NPTkZJR19XTk09eQorCisjIEludGVyd29ya2luZyAoSUVFRSA4MDIuMTF1KQorIyBUaGlzIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBmdW5jdGlvbmFsaXR5IHRvIGltcHJvdmUgaW50ZXJ3b3JraW5nIHdpdGgKKyMgZXh0ZXJuYWwgbmV0d29ya3MgKEdBUy9BTlFQIHRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIG5ldHdvcmtzIGFuZCBuZXR3b3JrCisjIHNlbGVjdGlvbiBiYXNlZCBvbiBhdmFpbGFibGUgY3JlZGVudGlhbHMpLgorI0NPTkZJR19JTlRFUldPUktJTkc9eQorCisjIEhvdHNwb3QgMi4wCisjQ09ORklHX0hTMjA9eQorCisjIERpc2FibGUgcm9hbWluZyBpbiB3cGFfc3VwcGxpY2FudAorI0NPTkZJR19OT19ST0FNSU5HPXkKKworIyBBUCBtb2RlIG9wZXJhdGlvbnMgd2l0aCB3cGFfc3VwcGxpY2FudAorIyBUaGlzIGNhbiBiZSB1c2VkIGZvciBjb250cm9sbGluZyBBUCBtb2RlIG9wZXJhdGlvbnMgd2l0aCB3cGFfc3VwcGxpY2FudC4gSXQKKyMgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhpcyBpcyBtYWlubHkgYWltZWQgYXQgc2ltcGxlIGNhc2VzIGxpa2UKKyMgV1BBMi1QZXJzb25hbCB3aGlsZSBtb3JlIGNvbXBsZXggY29uZmlndXJhdGlvbnMgbGlrZSBXUEEyLUVudGVycHJpc2Ugd2l0aCBhbgorIyBleHRlcm5hbCBSQURJVVMgc2VydmVyIGNhbiBiZSBzdXBwb3J0ZWQgd2l0aCBob3N0YXBkLgorQ09ORklHX0FQPXkKKworQ09ORklHX0JHU0NBTl9TSU1QTEU9eQorCisjIFAyUCAoV2ktRmkgRGlyZWN0KQorIyBUaGlzIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBQMlAgc3VwcG9ydCBpbiB3cGFfc3VwcGxpY2FudC4gU2VlIFJFQURNRS1QMlAgZm9yCisjIG1vcmUgaW5mb3JtYXRpb24gb24gUDJQIG9wZXJhdGlvbnMuCisjQ09ORklHX1AyUD15CisKKyMgRW5hYmxlIFRETFMgc3VwcG9ydAorI0NPTkZJR19URExTPXkKKworIyBXaS1GaSBEaXJlY3QKKyMgVGhpcyBjYW4gYmUgdXNlZCB0byBlbmFibGUgV2ktRmkgRGlyZWN0IGV4dGVuc2lvbnMgZm9yIFAyUCB1c2luZyBhbiBleHRlcm5hbAorIyBwcm9ncmFtIHRvIGNvbnRyb2wgdGhlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZXhjaGFuZ2VzIGluIHRoZSBtZXNzYWdlcy4KKyNDT05GSUdfV0lGSV9ESVNQTEFZPXkKKworIyBBdXRvc2NhbgorIyBUaGlzIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBhdXRvbWF0aWMgc2NhbiBzdXBwb3J0IGluIHdwYV9zdXBwbGljYW50LgorIyBTZWUgd3BhX3N1cHBsaWNhbnQuY29uZiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhdXRvc2NhbiB1c2FnZS4KKyMKKyMgRW5hYmxpbmcgZGlyZWN0bHkgYSBtb2R1bGUgd2lsbCBlbmFibGUgYXV0b3NjYW4gc3VwcG9ydC4KKyMgRm9yIGV4cG9uZW50aWFsIG1vZHVsZToKK0NPTkZJR19BVVRPU0NBTl9FWFBPTkVOVElBTD15CisjIEZvciBwZXJpb2RpYyBtb2R1bGU6CisjQ09ORklHX0FVVE9TQ0FOX1BFUklPRElDPXkKKworIyBQYXNzd29yZCAoYW5kIHBhc3NwaHJhc2UsIGV0Yy4pIGJhY2tlbmQgZm9yIGV4dGVybmFsIHN0b3JhZ2UKKyMgVGhlc2Ugb3B0aW9uYWwgbWVjaGFuaXNtcyBjYW4gYmUgdXNlZCB0byBhZGQgc3VwcG9ydCBmb3Igc3RvcmluZyBwYXNzd29yZHMKKyMgYW5kIG90aGVyIHNlY3JldHMgaW4gZXh0ZXJuYWwgKHRvIHdwYV9zdXBwbGljYW50KSBsb2NhdGlvbi4gVGhpcyBhbGxvd3MsIGZvcgorIyBleGFtcGxlLCBvcGVyYXRpbmcgc3lzdGVtIHNwZWNpZmljIGtleSBzdG9yYWdlIHRvIGJlIHVzZWQKKyMKKyMgRXh0ZXJuYWwgcGFzc3dvcmQgYmFja2VuZCBmb3IgdGVzdGluZyBwdXJwb3NlcyAoZGV2ZWxvcGVyIHVzZSkKKyNDT05GSUdfRVhUX1BBU1NXT1JEX1RFU1Q9eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOWU1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQuc2gKQEAgLTAsMCArMSw4NSBAQAorIyEvYmluL3NoCisKKworV1BBX1NVUF9CSU49Ii91c3Ivc2Jpbi93cGFfc3VwcGxpY2FudCIKK1dQQV9TVVBfUE5BTUU9IndwYV9zdXBwbGljYW50IgorV1BBX1NVUF9QSURGSUxFPSIvdmFyL3J1bi93cGFfc3VwcGxpY2FudC4kSUZBQ0UucGlkIgorV1BBX1NVUF9PUFRJT05TPSItQiAtUCAkV1BBX1NVUF9QSURGSUxFIC1pICRJRkFDRSIKKworVkVSQk9TSVRZPTAKKworCitpZiBbIC1zICIkSUZfV1BBX0NPTkYiIF07IHRoZW4KKwlXUEFfU1VQX0NPTkY9Ii1jICRJRl9XUEFfQ09ORiIKK2Vsc2UKKwlleGl0IDAKK2ZpCisKK2lmIFsgISAteCAiJFdQQV9TVVBfQklOIiBdOyB0aGVuCisJCisJaWYgWyAiJFZFUkJPU0lUWSIgPSAiMSIgXTsgdGhlbgorCQllY2hvICIkV1BBX1NVUF9QTkFNRTogYmluYXJpZXMgbm90IGV4ZWN1dGFibGUgb3IgbWlzc2luZyBmcm9tICRXUEFfU1VQX0JJTiIKKwlmaQorCQorCWV4aXQgMQorZmkKKworaWYgWyAiJE1PREUiID0gInN0YXJ0IiBdIDsgdGhlbgorCSMgZHJpdmVyIHR5cGUgb2YgaW50ZXJmYWNlLCBkZWZhdWx0cyB0byB3ZXh0IHdoZW4gdW5kZWZpbmVkCisJaWYgWyAtcyAiL2V0Yy93cGFfc3VwcGxpY2FudC9kcml2ZXIuJElGQUNFIiBdOyB0aGVuCisJCUlGX1dQQV9EUklWRVI9JChjYXQgIi9ldGMvd3BhX3N1cHBsaWNhbnQvZHJpdmVyLiRJRkFDRSIpCisJZWxpZiBbIC16ICIkSUZfV1BBX0RSSVZFUiIgXTsgdGhlbgorCQkKKwkJaWYgWyAiJFZFUkJPU0lUWSIgPSAiMSIgXTsgdGhlbgorCQkJZWNobyAiJFdQQV9TVVBfUE5BTUU6IHdwYS1kcml2ZXIgbm90IHByb3ZpZGVkLCB1c2luZyBcIndleHRcIiIKKwkJZmkKKwkJCisJCUlGX1dQQV9EUklWRVI9IndleHQiCisJZmkKKwkKKwkjIGlmIHdlIGhhdmUgcGFzc2VkIHRoZSBjcml0ZXJpYSwgc3RhcnQgd3BhX3N1cHBsaWNhbnQKKwlpZiBbIC1uICIkV1BBX1NVUF9DT05GIiBdOyB0aGVuCisJCQorCQlpZiBbICIkVkVSQk9TSVRZIiA9ICIxIiBdOyB0aGVuCisJCQllY2hvICIkV1BBX1NVUF9QTkFNRTogJFdQQV9TVVBfQklOICRXUEFfU1VQX09QVElPTlMgJFdQQV9TVVBfQ09ORiAtRCAkSUZfV1BBX0RSSVZFUiIKKwkJZmkKKwkJCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCBcCisJCQktLW5hbWUgJFdQQV9TVVBfUE5BTUUgLS1zdGFydGFzICRXUEFfU1VQX0JJTiAtLXBpZGZpbGUgJFdQQV9TVVBfUElERklMRSBcCisJCQktLSAgJFdQQV9TVVBfT1BUSU9OUyAkV1BBX1NVUF9DT05GIC1EICRJRl9XUEFfRFJJVkVSCisJZmkKKworCSMgaWYgdGhlIGludGVyZmFjZSBzb2NrZXQgZXhpc3RzLCB0aGVuIHdwYV9zdXBwbGljYW50IHdhcyBpbnZva2VkIHN1Y2Nlc3NmdWxseQorCWlmIFsgLVMgIiRXUEFfQ09NTU9OX0NUUkxfSUZBQ0UvJElGQUNFIiBdOyB0aGVuCisJCisJCWlmIFsgIiRWRVJCT1NJVFkiID0gIjEiIF07IHRoZW4KKwkJCWVjaG8gIiRXUEFfU1VQX1BOQU1FOiBjdHJsX2ludGVyZmFjZSBzb2NrZXQgbG9jYXRlZCBhdCAkV1BBX0NPTU1PTl9DVFJMX0lGQUNFLyRJRkFDRSIKKwkJZmkKKworCQlleGl0IDAKKwkJCisJZmkKKwkKK2VsaWYgWyAiJE1PREUiID0gInN0b3AiIF07IHRoZW4KKworCWlmIFsgLWYgIiRXUEFfU1VQX1BJREZJTEUiIF07IHRoZW4KKwkJCisJCWlmIFsgIiRWRVJCT1NJVFkiID0gIjEiIF07IHRoZW4KKwkJCWVjaG8gIiRXUEFfU1VQX1BOQU1FOiB0ZXJtaW5hdGluZyAkV1BBX1NVUF9QTkFNRSBkYWVtb24iCisJCWZpCisJCQorCQlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCBcCisJCQktLW5hbWUgJFdQQV9TVVBfUE5BTUUgLS1waWRmaWxlCSRXUEFfU1VQX1BJREZJTEUKKwkJCQorCQlpZiBbIC1TICIkV1BBX0NPTU1PTl9DVFJMX0lGQUNFLyRJRkFDRSIgXTsgdGhlbgorCQkJcm0gLWYgJFdQQV9DT01NT05fQ1RSTF9JRkFDRS8kSUZBQ0UKKwkJZmkKKwkJCQorCQlpZiBbIC1mICIkV1BBX1NVUF9QSURGSUxFIiBdOyB0aGVuCisJCQlybSAtZiAkV1BBX1NVUF9QSURGSUxFCisJCWZpCisJZmkKKworZmkKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MjU4ZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQuY29uZgpAQCAtMCwwICsxLDY5MCBAQAorIyMjIyMgRXhhbXBsZSB3cGFfc3VwcGxpY2FudCBjb25maWd1cmF0aW9uIGZpbGUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBUaGlzIGZpbGUgZGVzY3JpYmVzIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3JtYXQgYW5kIGxpc3RzIGFsbCBhdmFpbGFibGUgb3B0aW9uLgorIyBQbGVhc2UgYWxzbyB0YWtlIGEgbG9vayBhdCBzaW1wbGVyIGNvbmZpZ3VyYXRpb24gZXhhbXBsZXMgaW4gJ2V4YW1wbGVzJworIyBzdWJkaXJlY3RvcnkuCisjCisjIEVtcHR5IGxpbmVzIGFuZCBsaW5lcyBzdGFydGluZyB3aXRoICMgYXJlIGlnbm9yZWQKKworIyBOT1RFISBUaGlzIGZpbGUgbWF5IGNvbnRhaW4gcGFzc3dvcmQgaW5mb3JtYXRpb24gYW5kIHNob3VsZCBwcm9iYWJseSBiZSBtYWRlCisjIHJlYWRhYmxlIG9ubHkgYnkgcm9vdCB1c2VyIG9uIG11bHRpdXNlciBzeXN0ZW1zLgorCisjIE5vdGU6IEFsbCBmaWxlIHBhdGhzIGluIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlIHNob3VsZCB1c2UgZnVsbCAoYWJzb2x1dGUsCisjIG5vdCByZWxhdGl2ZSB0byB3b3JraW5nIGRpcmVjdG9yeSkgcGF0aCBpbiBvcmRlciB0byBhbGxvdyB3b3JraW5nIGRpcmVjdG9yeQorIyB0byBiZSBjaGFuZ2VkLiBUaGlzIGNhbiBoYXBwZW4gaWYgd3BhX3N1cHBsaWNhbnQgaXMgcnVuIGluIHRoZSBiYWNrZ3JvdW5kLgorCisjIFdoZXRoZXIgdG8gYWxsb3cgd3BhX3N1cHBsaWNhbnQgdG8gdXBkYXRlIChvdmVyd3JpdGUpIGNvbmZpZ3VyYXRpb24KKyMKKyMgVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gYWxsb3cgd3BhX3N1cHBsaWNhbnQgdG8gb3ZlcndyaXRlIGNvbmZpZ3VyYXRpb24KKyMgZmlsZSB3aGVuZXZlciBjb25maWd1cmF0aW9uIGlzIGNoYW5nZWQgKGUuZy4sIG5ldyBuZXR3b3JrIGJsb2NrIGlzIGFkZGVkIHdpdGgKKyMgd3BhX2NsaSBvciB3cGFfZ3VpLCBvciBhIHBhc3N3b3JkIGlzIGNoYW5nZWQpLiBUaGlzIGlzIHJlcXVpcmVkIGZvcgorIyB3cGFfY2xpL3dwYV9ndWkgdG8gYmUgYWJsZSB0byBzdG9yZSB0aGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHBlcm1hbmVudGx5LgorIyBQbGVhc2Ugbm90ZSB0aGF0IG92ZXJ3cml0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZSB3aWxsIHJlbW92ZSB0aGUgY29tbWVudHMgZnJvbQorIyBpdC4KKyN1cGRhdGVfY29uZmlnPTEKKworIyBnbG9iYWwgY29uZmlndXJhdGlvbiAoc2hhcmVkIGJ5IGFsbCBuZXR3b3JrIGJsb2NrcykKKyMKKyMgUGFyYW1ldGVycyBmb3IgdGhlIGNvbnRyb2wgaW50ZXJmYWNlLiBJZiB0aGlzIGlzIHNwZWNpZmllZCwgd3BhX3N1cHBsaWNhbnQKKyMgd2lsbCBvcGVuIGEgY29udHJvbCBpbnRlcmZhY2UgdGhhdCBpcyBhdmFpbGFibGUgZm9yIGV4dGVybmFsIHByb2dyYW1zIHRvCisjIG1hbmFnZSB3cGFfc3VwcGxpY2FudC4gVGhlIG1lYW5pbmcgb2YgdGhpcyBzdHJpbmcgZGVwZW5kcyBvbiB3aGljaCBjb250cm9sCisjIGludGVyZmFjZSBtZWNoYW5pc20gaXMgdXNlZC4gRm9yIGFsbCBjYXNlcywgdGhlIGV4aXN0ZW5jZSBvZiB0aGlzIHBhcmFtZXRlcgorIyBpbiBjb25maWd1cmF0aW9uIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNvbnRyb2wgaW50ZXJmYWNlIGlzCisjIGVuYWJsZWQuCisjCisjIEZvciBVTklYIGRvbWFpbiBzb2NrZXRzIChkZWZhdWx0IG9uIExpbnV4IGFuZCBCU0QpOiBUaGlzIGlzIGEgZGlyZWN0b3J5IHRoYXQKKyMgd2lsbCBiZSBjcmVhdGVkIGZvciBVTklYIGRvbWFpbiBzb2NrZXRzIGZvciBsaXN0ZW5pbmcgdG8gcmVxdWVzdHMgZnJvbQorIyBleHRlcm5hbCBwcm9ncmFtcyAoQ0xJL0dVSSwgZXRjLikgZm9yIHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgY29uZmlndXJhdGlvbi4KKyMgVGhlIHNvY2tldCBmaWxlIHdpbGwgYmUgbmFtZWQgYmFzZWQgb24gdGhlIGludGVyZmFjZSBuYW1lLCBzbyBtdWx0aXBsZQorIyB3cGFfc3VwcGxpY2FudCBwcm9jZXNzZXMgY2FuIGJlIHJ1biBhdCB0aGUgc2FtZSB0aW1lIGlmIG1vcmUgdGhhbiBvbmUKKyMgaW50ZXJmYWNlIGlzIHVzZWQuCisjIC92YXIvcnVuL3dwYV9zdXBwbGljYW50IGlzIHRoZSByZWNvbW1lbmRlZCBkaXJlY3RvcnkgZm9yIHNvY2tldHMgYW5kIGJ5CisjIGRlZmF1bHQsIHdwYV9jbGkgd2lsbCB1c2UgaXQgd2hlbiB0cnlpbmcgdG8gY29ubmVjdCB3aXRoIHdwYV9zdXBwbGljYW50LgorIworIyBBY2Nlc3MgY29udHJvbCBmb3IgdGhlIGNvbnRyb2wgaW50ZXJmYWNlIGNhbiBiZSBjb25maWd1cmVkIGJ5IHNldHRpbmcgdGhlCisjIGRpcmVjdG9yeSB0byBhbGxvdyBvbmx5IG1lbWJlcnMgb2YgYSBncm91cCB0byB1c2Ugc29ja2V0cy4gVGhpcyB3YXksIGl0IGlzCisjIHBvc3NpYmxlIHRvIHJ1biB3cGFfc3VwcGxpY2FudCBhcyByb290IChzaW5jZSBpdCBuZWVkcyB0byBjaGFuZ2UgbmV0d29yaworIyBjb25maWd1cmF0aW9uIGFuZCBvcGVuIHJhdyBzb2NrZXRzKSBhbmQgc3RpbGwgYWxsb3cgR1VJL0NMSSBjb21wb25lbnRzIHRvIGJlCisjIHJ1biBhcyBub24tcm9vdCB1c2Vycy4gSG93ZXZlciwgc2luY2UgdGhlIGNvbnRyb2wgaW50ZXJmYWNlIGNhbiBiZSB1c2VkIHRvCisjIGNoYW5nZSB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uLCB0aGlzIGFjY2VzcyBuZWVkcyB0byBiZSBwcm90ZWN0ZWQgaW4gbWFueQorIyBjYXNlcy4gQnkgZGVmYXVsdCwgd3BhX3N1cHBsaWNhbnQgaXMgY29uZmlndXJlZCB0byB1c2UgZ2lkIDAgKHJvb3QpLiBJZiB5b3UKKyMgd2FudCB0byBhbGxvdyBub24tcm9vdCB1c2VycyB0byB1c2UgdGhlIGNvbnRyb2wgaW50ZXJmYWNlLCBhZGQgYSBuZXcgZ3JvdXAKKyMgYW5kIGNoYW5nZSB0aGlzIHZhbHVlIHRvIG1hdGNoIHdpdGggdGhhdCBncm91cC4gQWRkIHVzZXJzIHRoYXQgc2hvdWxkIGhhdmUKKyMgY29udHJvbCBpbnRlcmZhY2UgYWNjZXNzIHRvIHRoaXMgZ3JvdXAuIElmIHRoaXMgdmFyaWFibGUgaXMgY29tbWVudGVkIG91dCBvcgorIyBub3QgaW5jbHVkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgZ3JvdXAgd2lsbCBub3QgYmUgY2hhbmdlZCBmcm9tIHRoZQorIyB2YWx1ZSBpdCBnb3QgYnkgZGVmYXVsdCB3aGVuIHRoZSBkaXJlY3Rvcnkgb3Igc29ja2V0IHdhcyBjcmVhdGVkLgorIworIyBXaGVuIGNvbmZpZ3VyaW5nIGJvdGggdGhlIGRpcmVjdG9yeSBhbmQgZ3JvdXAsIHVzZSBmb2xsb3dpbmcgZm9ybWF0OgorIyBESVI9L3Zhci9ydW4vd3BhX3N1cHBsaWNhbnQgR1JPVVA9d2hlZWwKKyMgRElSPS92YXIvcnVuL3dwYV9zdXBwbGljYW50IEdST1VQPTAKKyMgKGdyb3VwIGNhbiBiZSBlaXRoZXIgZ3JvdXAgbmFtZSBvciBnaWQpCisjCisjIEZvciBVRFAgY29ubmVjdGlvbnMgKGRlZmF1bHQgb24gV2luZG93cyk6IFRoZSB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQuIFRoaXMKKyMgdmFyaWFibGUgaXMganVzdCB1c2VkIHRvIHNlbGVjdCB0aGF0IHRoZSBjb250cm9sIGludGVyZmFjZSBpcyB0byBiZSBjcmVhdGVkLgorIyBUaGUgdmFsdWUgY2FuIGJlIHNldCB0bywgZS5nLiwgdWRwIChjdHJsX2ludGVyZmFjZT11ZHApCisjCisjIEZvciBXaW5kb3dzIE5hbWVkIFBpcGU6IFRoaXMgdmFsdWUgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBzZWN1cml0eSBkZXNjcmlwdG9yCisjIGZvciBjb250cm9sbGluZyBhY2Nlc3MgdG8gdGhlIGNvbnRyb2wgaW50ZXJmYWNlLiBTZWN1cml0eSBkZXNjcmlwdG9yIGNhbiBiZQorIyBzZXQgdXNpbmcgU2VjdXJpdHkgRGVzY3JpcHRvciBTdHJpbmcgRm9ybWF0IChzZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS8KKyMgbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvc2VjYXV0aHovc2VjdXJpdHkvCisjIHNlY3VyaXR5X2Rlc2NyaXB0b3Jfc3RyaW5nX2Zvcm1hdC5hc3ApLiBUaGUgZGVzY3JpcHRvciBzdHJpbmcgbmVlZHMgdG8gYmUKKyMgcHJlZml4ZWQgd2l0aCBTRERMPS4gRm9yIGV4YW1wbGUsIGN0cmxfaW50ZXJmYWNlPVNEREw9RDogd291bGQgc2V0IGFuIGVtcHR5CisjIERBQ0wgKHdoaWNoIHdpbGwgcmVqZWN0IGFsbCBjb25uZWN0aW9ucykuIFNlZSBSRUFETUUtV2luZG93cy50eHQgZm9yIG1vcmUKKyMgaW5mb3JtYXRpb24gYWJvdXQgU0RETCBzdHJpbmcgZm9ybWF0LgorIworY3RybF9pbnRlcmZhY2U9L3Zhci9ydW4vd3BhX3N1cHBsaWNhbnQKKworIyBJRUVFIDgwMi4xWC9FQVBPTCB2ZXJzaW9uCisjIHdwYV9zdXBwbGljYW50IGlzIGltcGxlbWVudGVkIGJhc2VkIG9uIElFRUUgU3RkIDgwMi4xWC0yMDA0IHdoaWNoIGRlZmluZXMKKyMgRUFQT0wgdmVyc2lvbiAyLiBIb3dldmVyLCB0aGVyZSBhcmUgbWFueSBBUHMgdGhhdCBkbyBub3QgaGFuZGxlIHRoZSBuZXcKKyMgdmVyc2lvbiBudW1iZXIgY29ycmVjdGx5ICh0aGV5IHNlZW0gdG8gZHJvcCB0aGUgZnJhbWVzIGNvbXBsZXRlbHkpLiBJbiBvcmRlcgorIyB0byBtYWtlIHdwYV9zdXBwbGljYW50IGludGVyb3BlcmF0ZSB3aXRoIHRoZXNlIEFQcywgdGhlIHZlcnNpb24gbnVtYmVyIGlzIHNldAorIyB0byAxIGJ5IGRlZmF1bHQuIFRoaXMgY29uZmlndXJhdGlvbiB2YWx1ZSBjYW4gYmUgdXNlZCB0byBzZXQgaXQgdG8gdGhlIG5ldworIyB2ZXJzaW9uICgyKS4KK2VhcG9sX3ZlcnNpb249MQorCisjIEFQIHNjYW5uaW5nL3NlbGVjdGlvbgorIyBCeSBkZWZhdWx0LCB3cGFfc3VwcGxpY2FudCByZXF1ZXN0cyBkcml2ZXIgdG8gcGVyZm9ybSBBUCBzY2FubmluZyBhbmQgdGhlbgorIyB1c2VzIHRoZSBzY2FuIHJlc3VsdHMgdG8gc2VsZWN0IGEgc3VpdGFibGUgQVAuIEFub3RoZXIgYWx0ZXJuYXRpdmUgaXMgdG8KKyMgYWxsb3cgdGhlIGRyaXZlciB0byB0YWtlIGNhcmUgb2YgQVAgc2Nhbm5pbmcgYW5kIHNlbGVjdGlvbiBhbmQgdXNlCisjIHdwYV9zdXBwbGljYW50IGp1c3QgdG8gcHJvY2VzcyBFQVBPTCBmcmFtZXMgYmFzZWQgb24gSUVFRSA4MDIuMTEgYXNzb2NpYXRpb24KKyMgaW5mb3JtYXRpb24gZnJvbSB0aGUgZHJpdmVyLgorIyAxOiB3cGFfc3VwcGxpY2FudCBpbml0aWF0ZXMgc2Nhbm5pbmcgYW5kIEFQIHNlbGVjdGlvbgorIyAwOiBkcml2ZXIgdGFrZXMgY2FyZSBvZiBzY2FubmluZywgQVAgc2VsZWN0aW9uLCBhbmQgSUVFRSA4MDIuMTEgYXNzb2NpYXRpb24KKyMgICAgcGFyYW1ldGVycyAoZS5nLiwgV1BBIElFIGdlbmVyYXRpb24pOyB0aGlzIG1vZGUgY2FuIGFsc28gYmUgdXNlZCB3aXRoCisjICAgIG5vbi1XUEEgZHJpdmVycyB3aGVuIHVzaW5nIElFRUUgODAyLjFYIG1vZGU7IGRvIG5vdCB0cnkgdG8gYXNzb2NpYXRlIHdpdGgKKyMgICAgQVBzIChpLmUuLCBleHRlcm5hbCBwcm9ncmFtIG5lZWRzIHRvIGNvbnRyb2wgYXNzb2NpYXRpb24pLiBUaGlzIG1vZGUgbXVzdAorIyAgICBhbHNvIGJlIHVzZWQgd2hlbiB1c2luZyB3aXJlZCBFdGhlcm5ldCBkcml2ZXJzLgorIyAyOiBsaWtlIDAsIGJ1dCBhc3NvY2lhdGUgd2l0aCBBUHMgdXNpbmcgc2VjdXJpdHkgcG9saWN5IGFuZCBTU0lEIChidXQgbm90CisjICAgIEJTU0lEKTsgdGhpcyBjYW4gYmUgdXNlZCwgZS5nLiwgd2l0aCBuZGlzd3JhcHBlciBhbmQgTkRJUyBkcml2ZXJzIHRvCisjICAgIGVuYWJsZSBvcGVyYXRpb24gd2l0aCBoaWRkZW4gU1NJRHMgYW5kIG9wdGltaXplZCByb2FtaW5nOyBpbiB0aGlzIG1vZGUsCisjICAgIHRoZSBuZXR3b3JrIGJsb2NrcyBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGFyZSB0cmllZCBvbmUgYnkgb25lIHVudGlsCisjICAgIHRoZSBkcml2ZXIgcmVwb3J0cyBzdWNjZXNzZnVsIGFzc29jaWF0aW9uOyBlYWNoIG5ldHdvcmsgYmxvY2sgc2hvdWxkIGhhdmUKKyMgICAgZXhwbGljaXQgc2VjdXJpdHkgcG9saWN5IChpLmUuLCBvbmx5IG9uZSBvcHRpb24gaW4gdGhlIGxpc3RzKSBmb3IKKyMgICAga2V5X21nbXQsIHBhaXJ3aXNlLCBncm91cCwgcHJvdG8gdmFyaWFibGVzCithcF9zY2FuPTEKKworIyBFQVAgZmFzdCByZS1hdXRoZW50aWNhdGlvbgorIyBCeSBkZWZhdWx0LCBmYXN0IHJlLWF1dGhlbnRpY2F0aW9uIGlzIGVuYWJsZWQgZm9yIGFsbCBFQVAgbWV0aG9kcyB0aGF0CisjIHN1cHBvcnQgaXQuIFRoaXMgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gZGlzYWJsZSBmYXN0IHJlLWF1dGhlbnRpY2F0aW9uLgorIyBOb3JtYWxseSwgdGhlcmUgaXMgbm8gbmVlZCB0byBkaXNhYmxlIHRoaXMuCitmYXN0X3JlYXV0aD0xCisKKyMgT3BlblNTTCBFbmdpbmUgc3VwcG9ydAorIyBUaGVzZSBvcHRpb25zIGNhbiBiZSB1c2VkIHRvIGxvYWQgT3BlblNTTCBlbmdpbmVzLgorIyBUaGUgdHdvIGVuZ2luZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGN1cnJlbnRseSBhcmUgc2hvd24gYmVsb3c6CisjIFRoZXkgYXJlIGJvdGggZnJvbSB0aGUgb3BlbnNjIHByb2plY3QgKGh0dHA6Ly93d3cub3BlbnNjLm9yZy8pCisjIEJ5IGRlZmF1bHQgbm8gZW5naW5lcyBhcmUgbG9hZGVkLgorIyBtYWtlIHRoZSBvcGVuc2MgZW5naW5lIGF2YWlsYWJsZQorI29wZW5zY19lbmdpbmVfcGF0aD0vdXNyL2xpYi9vcGVuc2MvZW5naW5lX29wZW5zYy5zbworIyBtYWtlIHRoZSBwa2NzMTEgZW5naW5lIGF2YWlsYWJsZQorI3BrY3MxMV9lbmdpbmVfcGF0aD0vdXNyL2xpYi9vcGVuc2MvZW5naW5lX3BrY3MxMS5zbworIyBjb25maWd1cmUgdGhlIHBhdGggdG8gdGhlIHBrY3MxMSBtb2R1bGUgcmVxdWlyZWQgYnkgdGhlIHBrY3MxMSBlbmdpbmUKKyNwa2NzMTFfbW9kdWxlX3BhdGg9L3Vzci9saWIvcGtjczExL29wZW5zYy1wa2NzMTEuc28KKworIyBEeW5hbWljIEVBUCBtZXRob2RzCisjIElmIEVBUCBtZXRob2RzIHdlcmUgYnVpbHQgZHluYW1pY2FsbHkgYXMgc2hhcmVkIG9iamVjdCBmaWxlcywgdGhleSBuZWVkIHRvIGJlCisjIGxvYWRlZCBoZXJlIGJlZm9yZSBiZWluZyB1c2VkIGluIHRoZSBuZXR3b3JrIGJsb2Nrcy4gQnkgZGVmYXVsdCwgRUFQIG1ldGhvZHMKKyMgYXJlIGluY2x1ZGVkIHN0YXRpY2FsbHkgaW4gdGhlIGJ1aWxkLCBzbyB0aGVzZSBsaW5lcyBhcmUgbm90IG5lZWRlZAorI2xvYWRfZHluYW1pY19lYXA9L3Vzci9saWIvd3BhX3N1cHBsaWNhbnQvZWFwX3Rscy5zbworI2xvYWRfZHluYW1pY19lYXA9L3Vzci9saWIvd3BhX3N1cHBsaWNhbnQvZWFwX21kNS5zbworCisjIERyaXZlciBpbnRlcmZhY2UgcGFyYW1ldGVycworIyBUaGlzIGZpZWxkIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBhcmJpdHJhcnkgZHJpdmVyIGludGVyYWNlIHBhcmFtZXRlcnMuIFRoZQorIyBmb3JtYXQgaXMgc3BlY2lmaWMgdG8gdGhlIHNlbGVjdGVkIGRyaXZlciBpbnRlcmZhY2UuIFRoaXMgZmllbGQgaXMgbm90IHVzZWQKKyMgaW4gbW9zdCBjYXNlcy4KKyNkcml2ZXJfcGFyYW09ImZpZWxkPXZhbHVlIgorCisjIE1heGltdW0gbGlmZXRpbWUgZm9yIFBNS1NBIGluIHNlY29uZHM7IGRlZmF1bHQgNDMyMDAKKyNkb3QxMVJTTkFDb25maWdQTUtMaWZldGltZT00MzIwMAorIyBUaHJlc2hvbGQgZm9yIHJlYXV0aGVudGljYXRpb24gKHBlcmNlbnRhZ2Ugb2YgUE1LIGxpZmV0aW1lKTsgZGVmYXVsdCA3MAorI2RvdDExUlNOQUNvbmZpZ1BNS1JlYXV0aFRocmVzaG9sZD03MAorIyBUaW1lb3V0IGZvciBzZWN1cml0eSBhc3NvY2lhdGlvbiBuZWdvdGlhdGlvbiBpbiBzZWNvbmRzOyBkZWZhdWx0IDYwCisjZG90MTFSU05BQ29uZmlnU0FUaW1lb3V0PTYwCisKKyMgbmV0d29yayBibG9jaworIworIyBFYWNoIG5ldHdvcmsgKHVzdWFsbHkgQVAncyBzaGFyaW5nIHRoZSBzYW1lIFNTSUQpIGlzIGNvbmZpZ3VyZWQgYXMgYSBzZXBhcmF0ZQorIyBibG9jayBpbiB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGhlIG5ldHdvcmsgYmxvY2tzIGFyZSBpbiBwcmVmZXJlbmNlIG9yZGVyCisjICh0aGUgZmlyc3QgbWF0Y2ggaXMgdXNlZCkuCisjCisjIG5ldHdvcmsgYmxvY2sgZmllbGRzOgorIworIyBkaXNhYmxlZDoKKyMJMCA9IHRoaXMgbmV0d29yayBjYW4gYmUgdXNlZCAoZGVmYXVsdCkKKyMJMSA9IHRoaXMgbmV0d29yayBibG9jayBpcyBkaXNhYmxlZCAoY2FuIGJlIGVuYWJsZWQgdGhyb3VnaCBjdHJsX2lmYWNlLAorIwkgICAgZS5nLiwgd2l0aCB3cGFfY2xpIG9yIHdwYV9ndWkpCisjCisjIGlkX3N0cjogTmV0d29yayBpZGVudGlmaWVyIHN0cmluZyBmb3IgZXh0ZXJuYWwgc2NyaXB0cy4gVGhpcyB2YWx1ZSBpcyBwYXNzZWQKKyMJdG8gZXh0ZXJuYWwgYWN0aW9uIHNjcmlwdCB0aHJvdWdoIHdwYV9jbGkgYXMgV1BBX0lEX1NUUiBlbnZpcm9ubWVudAorIwl2YXJpYWJsZSB0byBtYWtlIGl0IGVhc2llciB0byBkbyBuZXR3b3JrIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCisjCisjIHNzaWQ6IFNTSUQgKG1hbmRhdG9yeSk7IGVpdGhlciBhcyBhbiBBU0NJSSBzdHJpbmcgd2l0aCBkb3VibGUgcXVvdGF0aW9uIG9yCisjCWFzIGhleCBzdHJpbmc7IG5ldHdvcmsgbmFtZQorIworIyBzY2FuX3NzaWQ6CisjCTAgPSBkbyBub3Qgc2NhbiB0aGlzIFNTSUQgd2l0aCBzcGVjaWZpYyBQcm9iZSBSZXF1ZXN0IGZyYW1lcyAoZGVmYXVsdCkKKyMJMSA9IHNjYW4gd2l0aCBTU0lELXNwZWNpZmljIFByb2JlIFJlcXVlc3QgZnJhbWVzICh0aGlzIGNhbiBiZSB1c2VkIHRvCisjCSAgICBmaW5kIEFQcyB0aGF0IGRvIG5vdCBhY2NlcHQgYnJvYWRjYXN0IFNTSUQgb3IgdXNlIG11bHRpcGxlIFNTSURzOworIwkgICAgdGhpcyB3aWxsIGFkZCBsYXRlbmN5IHRvIHNjYW5uaW5nLCBzbyBlbmFibGUgdGhpcyBvbmx5IHdoZW4gbmVlZGVkKQorIworIyBic3NpZDogQlNTSUQgKG9wdGlvbmFsKTsgaWYgc2V0LCB0aGlzIG5ldHdvcmsgYmxvY2sgaXMgdXNlZCBvbmx5IHdoZW4KKyMJYXNzb2NpYXRpbmcgd2l0aCB0aGUgQVAgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgQlNTSUQKKyMKKyMgcHJpb3JpdHk6IHByaW9yaXR5IGdyb3VwIChpbnRlZ2VyKQorIyBCeSBkZWZhdWx0LCBhbGwgbmV0d29ya3Mgd2lsbCBnZXQgc2FtZSBwcmlvcml0eSBncm91cCAoMCkuIElmIHNvbWUgb2YgdGhlCisjIG5ldHdvcmtzIGFyZSBtb3JlIGRlc2lyYWJsZSwgdGhpcyBmaWVsZCBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIG9yZGVyIGluCisjIHdoaWNoIHdwYV9zdXBwbGljYW50IGdvZXMgdGhyb3VnaCB0aGUgbmV0d29ya3Mgd2hlbiBzZWxlY3RpbmcgYSBCU1MuIFRoZQorIyBwcmlvcml0eSBncm91cHMgd2lsbCBiZSBpdGVyYXRlZCBpbiBkZWNyZWFzaW5nIHByaW9yaXR5IChpLmUuLCB0aGUgbGFyZ2VyIHRoZQorIyBwcmlvcml0eSB2YWx1ZSwgdGhlIHNvb25lciB0aGUgbmV0d29yayBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIHNjYW4gcmVzdWx0cykuCisjIFdpdGhpbiBlYWNoIHByaW9yaXR5IGdyb3VwLCBuZXR3b3JrcyB3aWxsIGJlIHNlbGVjdGVkIGJhc2VkIG9uIHNlY3VyaXR5CisjIHBvbGljeSwgc2lnbmFsIHN0cmVuZ3RoLCBldGMuCisjIFBsZWFzZSBub3RlIHRoYXQgQVAgc2Nhbm5pbmcgd2l0aCBzY2FuX3NzaWQ9MSBhbmQgYXBfc2Nhbj0yIG1vZGUgYXJlIG5vdAorIyB1c2luZyB0aGlzIHByaW9yaXR5IHRvIHNlbGVjdCB0aGUgb3JkZXIgZm9yIHNjYW5uaW5nLiBJbnN0ZWFkLCB0aGV5IHRyeSB0aGUKKyMgbmV0d29ya3MgaW4gdGhlIG9yZGVyIHRoYXQgdXNlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorIworIyBtb2RlOiBJRUVFIDgwMi4xMSBvcGVyYXRpb24gbW9kZQorIyAwID0gaW5mcmFzdHJ1Y3R1cmUgKE1hbmFnZWQpIG1vZGUsIGkuZS4sIGFzc29jaWF0ZSB3aXRoIGFuIEFQIChkZWZhdWx0KQorIyAxID0gSUJTUyAoYWQtaG9jLCBwZWVyLXRvLXBlZXIpCisjIE5vdGU6IElCU1MgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGtleV9tZ210IE5PTkUgKHBsYWludGV4dCBhbmQgc3RhdGljIFdFUCkKKyMgYW5kIGtleV9tZ210PVdQQS1OT05FIChmaXhlZCBncm91cCBrZXkgVEtJUC9DQ01QKS4gSW4gYWRkaXRpb24sIGFwX3NjYW4gaGFzCisjIHRvIGJlIHNldCB0byAyIGZvciBJQlNTLiBXUEEtTm9uZSByZXF1aXJlcyBmb2xsb3dpbmcgbmV0d29yayBibG9jayBvcHRpb25zOgorIyBwcm90bz1XUEEsIGtleV9tZ210PVdQQS1OT05FLCBwYWlyd2lzZT1OT05FLCBncm91cD1US0lQIChvciBDQ01QLCBidXQgbm90CisjIGJvdGgpLCBhbmQgcHNrIG11c3QgYWxzbyBiZSBzZXQuCisjCisjIHByb3RvOiBsaXN0IG9mIGFjY2VwdGVkIHByb3RvY29scworIyBXUEEgPSBXUEEvSUVFRSA4MDIuMTFpL0QzLjAKKyMgUlNOID0gV1BBMi9JRUVFIDgwMi4xMWkgKGFsc28gV1BBMiBjYW4gYmUgdXNlZCBhcyBhbiBhbGlhcyBmb3IgUlNOKQorIyBJZiBub3Qgc2V0LCB0aGlzIGRlZmF1bHRzIHRvOiBXUEEgUlNOCisjCisjIGtleV9tZ210OiBsaXN0IG9mIGFjY2VwdGVkIGF1dGhlbnRpY2F0ZWQga2V5IG1hbmFnZW1lbnQgcHJvdG9jb2xzCisjIFdQQS1QU0sgPSBXUEEgcHJlLXNoYXJlZCBrZXkgKHRoaXMgcmVxdWlyZXMgJ3BzaycgZmllbGQpCisjIFdQQS1FQVAgPSBXUEEgdXNpbmcgRUFQIGF1dGhlbnRpY2F0aW9uICh0aGlzIGNhbiB1c2UgYW4gZXh0ZXJuYWwKKyMJcHJvZ3JhbSwgZS5nLiwgWHN1cHBsaWNhbnQsIGZvciBJRUVFIDgwMi4xWCBFQVAgQXV0aGVudGljYXRpb24KKyMgSUVFRTgwMjFYID0gSUVFRSA4MDIuMVggdXNpbmcgRUFQIGF1dGhlbnRpY2F0aW9uIGFuZCAob3B0aW9uYWxseSkgZHluYW1pY2FsbHkKKyMJZ2VuZXJhdGVkIFdFUCBrZXlzCisjIE5PTkUgPSBXUEEgaXMgbm90IHVzZWQ7IHBsYWludGV4dCBvciBzdGF0aWMgV0VQIGNvdWxkIGJlIHVzZWQKKyMgSWYgbm90IHNldCwgdGhpcyBkZWZhdWx0cyB0bzogV1BBLVBTSyBXUEEtRUFQCisjCisjIGF1dGhfYWxnOiBsaXN0IG9mIGFsbG93ZWQgSUVFRSA4MDIuMTEgYXV0aGVudGljYXRpb24gYWxnb3JpdGhtcworIyBPUEVOID0gT3BlbiBTeXN0ZW0gYXV0aGVudGljYXRpb24gKHJlcXVpcmVkIGZvciBXUEEvV1BBMikKKyMgU0hBUkVEID0gU2hhcmVkIEtleSBhdXRoZW50aWNhdGlvbiAocmVxdWlyZXMgc3RhdGljIFdFUCBrZXlzKQorIyBMRUFQID0gTEVBUC9OZXR3b3JrIEVBUCAob25seSB1c2VkIHdpdGggTEVBUCkKKyMgSWYgbm90IHNldCwgYXV0b21hdGljIHNlbGVjdGlvbiBpcyB1c2VkIChPcGVuIFN5c3RlbSB3aXRoIExFQVAgZW5hYmxlZCBpZgorIyBMRUFQIGlzIGFsbG93ZWQgYXMgb25lIG9mIHRoZSBFQVAgbWV0aG9kcykuCisjCisjIHBhaXJ3aXNlOiBsaXN0IG9mIGFjY2VwdGVkIHBhaXJ3aXNlICh1bmljYXN0KSBjaXBoZXJzIGZvciBXUEEKKyMgQ0NNUCA9IEFFUyBpbiBDb3VudGVyIG1vZGUgd2l0aCBDQkMtTUFDIFtSRkMgMzYxMCwgSUVFRSA4MDIuMTFpL0Q3LjBdCisjIFRLSVAgPSBUZW1wb3JhbCBLZXkgSW50ZWdyaXR5IFByb3RvY29sIFtJRUVFIDgwMi4xMWkvRDcuMF0KKyMgTk9ORSA9IFVzZSBvbmx5IEdyb3VwIEtleXMgKGRlcHJlY2F0ZWQsIHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaWYgQVBzIHN1cHBvcnQKKyMJcGFpcndpc2Uga2V5cykKKyMgSWYgbm90IHNldCwgdGhpcyBkZWZhdWx0cyB0bzogQ0NNUCBUS0lQCisjCisjIGdyb3VwOiBsaXN0IG9mIGFjY2VwdGVkIGdyb3VwIChicm9hZGNhc3QvbXVsdGljYXN0KSBjaXBoZXJzIGZvciBXUEEKKyMgQ0NNUCA9IEFFUyBpbiBDb3VudGVyIG1vZGUgd2l0aCBDQkMtTUFDIFtSRkMgMzYxMCwgSUVFRSA4MDIuMTFpL0Q3LjBdCisjIFRLSVAgPSBUZW1wb3JhbCBLZXkgSW50ZWdyaXR5IFByb3RvY29sIFtJRUVFIDgwMi4xMWkvRDcuMF0KKyMgV0VQMTA0ID0gV0VQIChXaXJlZCBFcXVpdmFsZW50IFByaXZhY3kpIHdpdGggMTA0LWJpdCBrZXkKKyMgV0VQNDAgPSBXRVAgKFdpcmVkIEVxdWl2YWxlbnQgUHJpdmFjeSkgd2l0aCA0MC1iaXQga2V5IFtJRUVFIDgwMi4xMV0KKyMgSWYgbm90IHNldCwgdGhpcyBkZWZhdWx0cyB0bzogQ0NNUCBUS0lQIFdFUDEwNCBXRVA0MAorIworIyBwc2s6IFdQQSBwcmVzaGFyZWQga2V5OyAyNTYtYml0IHByZS1zaGFyZWQga2V5CisjIFRoZSBrZXkgdXNlZCBpbiBXUEEtUFNLIG1vZGUgY2FuIGJlIGVudGVyZWQgZWl0aGVyIGFzIDY0IGhleC1kaWdpdHMsIGkuZS4sCisjIDMyIGJ5dGVzIG9yIGFzIGFuIEFTQ0lJIHBhc3NwaHJhc2UgKGluIHdoaWNoIGNhc2UsIHRoZSByZWFsIFBTSyB3aWxsIGJlCisjIGdlbmVyYXRlZCB1c2luZyB0aGUgcGFzc3BocmFzZSBhbmQgU1NJRCkuIEFTQ0lJIHBhc3NwaHJhc2UgbXVzdCBiZSBiZXR3ZWVuCisjIDggYW5kIDYzIGNoYXJhY3RlcnMgKGluY2x1c2l2ZSkuCisjIFRoaXMgZmllbGQgaXMgbm90IG5lZWRlZCwgaWYgV1BBLUVBUCBpcyB1c2VkLgorIyBOb3RlOiBTZXBhcmF0ZSB0b29sLCB3cGFfcGFzc3BocmFzZSwgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgMjU2LWJpdCBrZXlzCisjIGZyb20gQVNDSUkgcGFzc3BocmFzZS4gVGhpcyBwcm9jZXNzIHVzZXMgbG90IG9mIENQVSBhbmQgd3BhX3N1cHBsaWNhbnQKKyMgc3RhcnR1cCBhbmQgcmVjb25maWd1cmF0aW9uIHRpbWUgY2FuIGJlIG9wdGltaXplZCBieSBnZW5lcmF0aW5nIHRoZSBQU0sgb25seQorIyBvbmx5IHdoZW4gdGhlIHBhc3NwaHJhc2Ugb3IgU1NJRCBoYXMgYWN0dWFsbHkgY2hhbmdlZC4KKyMKKyMgZWFwb2xfZmxhZ3M6IElFRUUgODAyLjFYL0VBUE9MIG9wdGlvbnMgKGJpdCBmaWVsZCkKKyMgRHluYW1pYyBXRVAga2V5IHJlcXVpcmVkIGZvciBub24tV1BBIG1vZGUKKyMgYml0MCAoMSk6IHJlcXVpcmUgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHVuaWNhc3QgV0VQIGtleQorIyBiaXQxICgyKTogcmVxdWlyZSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgYnJvYWRjYXN0IFdFUCBrZXkKKyMgCSgzID0gcmVxdWlyZSBib3RoIGtleXM7IGRlZmF1bHQpCisjIE5vdGU6IFdoZW4gdXNpbmcgd2lyZWQgYXV0aGVudGljYXRpb24sIGVhcG9sX2ZsYWdzIG11c3QgYmUgc2V0IHRvIDAgZm9yIHRoZQorIyBhdXRoZW50aWNhdGlvbiB0byBiZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorIworIyBwcm9hY3RpdmVfa2V5X2NhY2hpbmc6CisjIEVuYWJsZS9kaXNhYmxlIG9wcG9ydHVuaXN0aWMgUE1LU0EgY2FjaGluZyBmb3IgV1BBMi4KKyMgMCA9IGRpc2FibGVkIChkZWZhdWx0KQorIyAxID0gZW5hYmxlZAorIworIyB3ZXBfa2V5MC4uMzogU3RhdGljIFdFUCBrZXkgKEFTQ0lJIGluIGRvdWJsZSBxdW90YXRpb24sIGUuZy4gImFiY2RlIiBvcgorIyBoZXggd2l0aG91dCBxdW90YXRpb24sIGUuZy4sIDAxMDIwMzA0MDUpCisjIHdlcF90eF9rZXlpZHg6IERlZmF1bHQgV0VQIGtleSBpbmRleCAoVFgpICgwLi4zKQorIworIyBwZWVya2V5OiBXaGV0aGVyIFBlZXJLZXkgbmVnb3RpYXRpb24gZm9yIGRpcmVjdCBsaW5rcyAoSUVFRSA4MDIuMTFlIERMUykgaXMKKyMgYWxsb3dlZC4gVGhpcyBpcyBvbmx5IHVzZWQgd2l0aCBSU04vV1BBMi4KKyMgMCA9IGRpc2FibGVkIChkZWZhdWx0KQorIyAxID0gZW5hYmxlZAorI3BlZXJrZXk9MQorIworIyBGb2xsb3dpbmcgZmllbGRzIGFyZSBvbmx5IHVzZWQgd2l0aCBpbnRlcm5hbCBFQVAgaW1wbGVtZW50YXRpb24uCisjIGVhcDogc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgYWNjZXB0ZWQgRUFQIG1ldGhvZHMKKyMJTUQ1ID0gRUFQLU1ENSAodW5zZWN1cmUgYW5kIGRvZXMgbm90IGdlbmVyYXRlIGtleWluZyBtYXRlcmlhbCAtPgorIwkJCWNhbm5vdCBiZSB1c2VkIHdpdGggV1BBOyB0byBiZSB1c2VkIGFzIGEgUGhhc2UgMiBtZXRob2QKKyMJCQl3aXRoIEVBUC1QRUFQIG9yIEVBUC1UVExTKQorIyAgICAgICBNU0NIQVBWMiA9IEVBUC1NU0NIQVB2MiAoY2Fubm90IGJlIHVzZWQgc2VwYXJhdGVseSB3aXRoIFdQQTsgdG8gYmUgdXNlZAorIwkJYXMgYSBQaGFzZSAyIG1ldGhvZCB3aXRoIEVBUC1QRUFQIG9yIEVBUC1UVExTKQorIyAgICAgICBPVFAgPSBFQVAtT1RQIChjYW5ub3QgYmUgdXNlZCBzZXBhcmF0ZWx5IHdpdGggV1BBOyB0byBiZSB1c2VkCisjCQlhcyBhIFBoYXNlIDIgbWV0aG9kIHdpdGggRUFQLVBFQVAgb3IgRUFQLVRUTFMpCisjICAgICAgIEdUQyA9IEVBUC1HVEMgKGNhbm5vdCBiZSB1c2VkIHNlcGFyYXRlbHkgd2l0aCBXUEE7IHRvIGJlIHVzZWQKKyMJCWFzIGEgUGhhc2UgMiBtZXRob2Qgd2l0aCBFQVAtUEVBUCBvciBFQVAtVFRMUykKKyMJVExTID0gRUFQLVRMUyAoY2xpZW50IGFuZCBzZXJ2ZXIgY2VydGlmaWNhdGUpCisjCVBFQVAgPSBFQVAtUEVBUCAod2l0aCB0dW5uZWxsZWQgRUFQIGF1dGhlbnRpY2F0aW9uKQorIwlUVExTID0gRUFQLVRUTFMgKHdpdGggdHVubmVsbGVkIEVBUCBvciBQQVAvQ0hBUC9NU0NIQVAvTVNDSEFQVjIKKyMJCQkgYXV0aGVudGljYXRpb24pCisjCUlmIG5vdCBzZXQsIGFsbCBjb21waWxlZCBpbiBtZXRob2RzIGFyZSBhbGxvd2VkLgorIworIyBpZGVudGl0eTogSWRlbnRpdHkgc3RyaW5nIGZvciBFQVAKKyMgYW5vbnltb3VzX2lkZW50aXR5OiBBbm9ueW1vdXMgaWRlbnRpdHkgc3RyaW5nIGZvciBFQVAgKHRvIGJlIHVzZWQgYXMgdGhlCisjCXVuZW5jcnlwdGVkIGlkZW50aXR5IHdpdGggRUFQIHR5cGVzIHRoYXQgc3VwcG9ydCBkaWZmZXJlbnQgdHVubmVsbGVkCisjCWlkZW50aXR5LCBlLmcuLCBFQVAtVFRMUykKKyMgcGFzc3dvcmQ6IFBhc3N3b3JkIHN0cmluZyBmb3IgRUFQCisjIGNhX2NlcnQ6IEZpbGUgcGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBmaWxlIChQRU0vREVSKS4gVGhpcyBmaWxlIGNhbiBoYXZlIG9uZQorIwlvciBtb3JlIHRydXN0ZWQgQ0EgY2VydGlmaWNhdGVzLiBJZiBjYV9jZXJ0IGFuZCBjYV9wYXRoIGFyZSBub3QKKyMJaW5jbHVkZWQsIHNlcnZlciBjZXJ0aWZpY2F0ZSB3aWxsIG5vdCBiZSB2ZXJpZmllZC4gVGhpcyBpcyBpbnNlY3VyZSBhbmQKKyMJYSB0cnVzdGVkIENBIGNlcnRpZmljYXRlIHNob3VsZCBhbHdheXMgYmUgY29uZmlndXJlZCB3aGVuIHVzaW5nCisjCUVBUC1UTFMvVFRMUy9QRUFQLiBGdWxsIHBhdGggc2hvdWxkIGJlIHVzZWQgc2luY2Ugd29ya2luZyBkaXJlY3RvcnkgbWF5CisjCWNoYW5nZSB3aGVuIHdwYV9zdXBwbGljYW50IGlzIHJ1biBpbiB0aGUgYmFja2dyb3VuZC4KKyMJT24gV2luZG93cywgdHJ1c3RlZCBDQSBjZXJ0aWZpY2F0ZXMgY2FuIGJlIGxvYWRlZCBmcm9tIHRoZSBzeXN0ZW0KKyMJY2VydGlmaWNhdGUgc3RvcmUgYnkgc2V0dGluZyB0aGlzIHRvIGNlcnRfc3RvcmU6Ly88bmFtZT4sIGUuZy4sCisjCWNhX2NlcnQ9ImNlcnRfc3RvcmU6Ly9DQSIgb3IgY2FfY2VydD0iY2VydF9zdG9yZTovL1JPT1QiLgorIwlOb3RlIHRoYXQgd2hlbiBydW5uaW5nIHdwYV9zdXBwbGljYW50IGFzIGFuIGFwcGxpY2F0aW9uLCB0aGUgdXNlcgorIwljZXJ0aWZpY2F0ZSBzdG9yZSAoTXkgdXNlciBhY2NvdW50KSBpcyB1c2VkLCB3aGVyZWFzIGNvbXB1dGVyIHN0b3JlCisjCShDb21wdXRlciBhY2NvdW50KSBpcyB1c2VkIHdoZW4gcnVubmluZyB3cGFzdmMgYXMgYSBzZXJ2aWNlLgorIyBjYV9wYXRoOiBEaXJlY3RvcnkgcGF0aCBmb3IgQ0EgY2VydGlmaWNhdGUgZmlsZXMgKFBFTSkuIFRoaXMgcGF0aCBtYXkKKyMJY29udGFpbiBtdWx0aXBsZSBDQSBjZXJ0aWZpY2F0ZXMgaW4gT3BlblNTTCBmb3JtYXQuIENvbW1vbiB1c2UgZm9yIHRoaXMKKyMJaXMgdG8gcG9pbnQgdG8gc3lzdGVtIHRydXN0ZWQgQ0EgbGlzdCB3aGljaCBpcyBvZnRlbiBpbnN0YWxsZWQgaW50bworIwlkaXJlY3RvcnkgbGlrZSAvZXRjL3NzbC9jZXJ0cy4gSWYgY29uZmlndXJlZCwgdGhlc2UgY2VydGlmaWNhdGVzIGFyZQorIwlhZGRlZCB0byB0aGUgbGlzdCBvZiB0cnVzdGVkIENBcy4gY2FfY2VydCBtYXkgYWxzbyBiZSBpbmNsdWRlZCBpbiB0aGF0CisjCWNhc2UsIGJ1dCBpdCBpcyBub3QgcmVxdWlyZWQuCisjIGNsaWVudF9jZXJ0OiBGaWxlIHBhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIGZpbGUgKFBFTS9ERVIpCisjCUZ1bGwgcGF0aCBzaG91bGQgYmUgdXNlZCBzaW5jZSB3b3JraW5nIGRpcmVjdG9yeSBtYXkgY2hhbmdlIHdoZW4KKyMJd3BhX3N1cHBsaWNhbnQgaXMgcnVuIGluIHRoZSBiYWNrZ3JvdW5kLgorIwlBbHRlcm5hdGl2ZWx5LCBhIG5hbWVkIGNvbmZpZ3VyYXRpb24gYmxvYiBjYW4gYmUgdXNlZCBieSBzZXR0aW5nIHRoaXMKKyMJdG8gYmxvYjovLzxibG9iIG5hbWU+LgorIyBwcml2YXRlX2tleTogRmlsZSBwYXRoIHRvIGNsaWVudCBwcml2YXRlIGtleSBmaWxlIChQRU0vREVSL1BGWCkKKyMJV2hlbiBQS0NTIzEyL1BGWCBmaWxlICgucDEyLy5wZngpIGlzIHVzZWQsIGNsaWVudF9jZXJ0IHNob3VsZCBiZQorIwljb21tZW50ZWQgb3V0LiBCb3RoIHRoZSBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUgd2lsbCBiZSByZWFkIGZyb20KKyMJdGhlIFBLQ1MjMTIgZmlsZSBpbiB0aGlzIGNhc2UuIEZ1bGwgcGF0aCBzaG91bGQgYmUgdXNlZCBzaW5jZSB3b3JraW5nCisjCWRpcmVjdG9yeSBtYXkgY2hhbmdlIHdoZW4gd3BhX3N1cHBsaWNhbnQgaXMgcnVuIGluIHRoZSBiYWNrZ3JvdW5kLgorIwlXaW5kb3dzIGNlcnRpZmljYXRlIHN0b3JlIGNhbiBiZSB1c2VkIGJ5IGxlYXZpbmcgY2xpZW50X2NlcnQgb3V0IGFuZAorIwljb25maWd1cmluZyBwcml2YXRlX2tleSBpbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtYXRzOgorIwljZXJ0Oi8vc3Vic3RyaW5nX3RvX21hdGNoCisjCWhhc2g6Ly9jZXJ0aWZpY2F0ZV90aHVtYnByaW50X2luX2hleAorIwlmb3IgZXhhbXBsZTogcHJpdmF0ZV9rZXk9Imhhc2g6Ly82MzA5M2FhOWM0N2Y1NmFlODgzMzRjN2I2NWE0IgorIwlOb3RlIHRoYXQgd2hlbiBydW5uaW5nIHdwYV9zdXBwbGljYW50IGFzIGFuIGFwcGxpY2F0aW9uLCB0aGUgdXNlcgorIwljZXJ0aWZpY2F0ZSBzdG9yZSAoTXkgdXNlciBhY2NvdW50KSBpcyB1c2VkLCB3aGVyZWFzIGNvbXB1dGVyIHN0b3JlCisjCShDb21wdXRlciBhY2NvdW50KSBpcyB1c2VkIHdoZW4gcnVubmluZyB3cGFzdmMgYXMgYSBzZXJ2aWNlLgorIwlBbHRlcm5hdGl2ZWx5LCBhIG5hbWVkIGNvbmZpZ3VyYXRpb24gYmxvYiBjYW4gYmUgdXNlZCBieSBzZXR0aW5nIHRoaXMKKyMJdG8gYmxvYjovLzxibG9iIG5hbWU+LgorIyBwcml2YXRlX2tleV9wYXNzd2Q6IFBhc3N3b3JkIGZvciBwcml2YXRlIGtleSBmaWxlIChpZiBsZWZ0IG91dCwgdGhpcyB3aWxsIGJlCisjCWFza2VkIHRocm91Z2ggY29udHJvbCBpbnRlcmZhY2UpCisjIGRoX2ZpbGU6IEZpbGUgcGF0aCB0byBESC9EU0EgcGFyYW1ldGVycyBmaWxlIChpbiBQRU0gZm9ybWF0KQorIwlUaGlzIGlzIGFuIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3Igc2V0dGluZyBwYXJhbWV0ZXJzIGZvciBhbgorIwllcGhlbWVyYWwgREgga2V5IGV4Y2hhbmdlLiBJbiBtb3N0IGNhc2VzLCB0aGUgZGVmYXVsdCBSU0EKKyMJYXV0aGVudGljYXRpb24gZG9lcyBub3QgdXNlIHRoaXMgY29uZmlndXJhdGlvbi4gSG93ZXZlciwgaXQgaXMgcG9zc2libGUKKyMJc2V0dXAgUlNBIHRvIHVzZSBlcGhlbWVyYWwgREgga2V5IGV4Y2hhbmdlLiBJbiBhZGRpdGlvbiwgY2lwaGVycyB3aXRoCisjCURTQSBrZXlzIGFsd2F5cyB1c2UgZXBoZW1lcmFsIERIIGtleXMuIFRoaXMgY2FuIGJlIHVzZWQgdG8gYWNoaWV2ZQorIwlmb3J3YXJkIHNlY3JlY3kuIElmIHRoZSBmaWxlIGlzIGluIERTQSBwYXJhbWV0ZXJzIGZvcm1hdCwgaXQgd2lsbCBiZQorIwlhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCBpbnRvIERIIHBhcmFtcy4KKyMgc3ViamVjdF9tYXRjaDogU3Vic3RyaW5nIHRvIGJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgc3ViamVjdCBvZiB0aGUKKyMJYXV0aGVudGljYXRpb24gc2VydmVyIGNlcnRpZmljYXRlLiBJZiB0aGlzIHN0cmluZyBpcyBzZXQsIHRoZSBzZXJ2ZXIKKyMJc2VydGlmaWNhdGUgaXMgb25seSBhY2NlcHRlZCBpZiBpdCBjb250YWlucyB0aGlzIHN0cmluZyBpbiB0aGUgc3ViamVjdC4KKyMJVGhlIHN1YmplY3Qgc3RyaW5nIGlzIGluIGZvbGxvd2luZyBmb3JtYXQ6CisjCS9DPVVTL1NUPUNBL0w9U2FuIEZyYW5jaXNjby9DTj1UZXN0IEFTL2VtYWlsQWRkcmVzcz1hc0BleGFtcGxlLmNvbQorIyBhbHRzdWJqZWN0X21hdGNoOiBTZW1pY29sb24gc2VwYXJhdGVkIHN0cmluZyBvZiBlbnRyaWVzIHRvIGJlIG1hdGNoZWQgYWdhaW5zdAorIwl0aGUgYWx0ZXJuYXRpdmUgc3ViamVjdCBuYW1lIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBzZXJ2ZXIgY2VydGlmaWNhdGUuCisjCUlmIHRoaXMgc3RyaW5nIGlzIHNldCwgdGhlIHNlcnZlciBzZXJ0aWZpY2F0ZSBpcyBvbmx5IGFjY2VwdGVkIGlmIGl0CisjCWNvbnRhaW5zIG9uZSBvZiB0aGUgZW50cmllcyBpbiBhbiBhbHRlcm5hdGl2ZSBzdWJqZWN0IG5hbWUgZXh0ZW5zaW9uLgorIwlhbHRTdWJqZWN0TmFtZSBzdHJpbmcgaXMgaW4gZm9sbG93aW5nIGZvcm1hdDogVFlQRTpWQUxVRQorIwlFeGFtcGxlOiBFTUFJTDpzZXJ2ZXJAZXhhbXBsZS5jb20KKyMJRXhhbXBsZTogRE5TOnNlcnZlci5leGFtcGxlLmNvbTtETlM6c2VydmVyMi5leGFtcGxlLmNvbQorIwlGb2xsb3dpbmcgdHlwZXMgYXJlIHN1cHBvcnRlZDogRU1BSUwsIEROUywgVVJJCisjIHBoYXNlMTogUGhhc2UxIChvdXRlciBhdXRoZW50aWNhdGlvbiwgaS5lLiwgVExTIHR1bm5lbCkgcGFyYW1ldGVycworIwkoc3RyaW5nIHdpdGggZmllbGQtdmFsdWUgcGFpcnMsIGUuZy4sICJwZWFwdmVyPTAiIG9yCisjCSJwZWFwdmVyPTEgcGVhcGxhYmVsPTEiKQorIwkncGVhcHZlcicgY2FuIGJlIHVzZWQgdG8gZm9yY2Ugd2hpY2ggUEVBUCB2ZXJzaW9uICgwIG9yIDEpIGlzIHVzZWQuCisjCSdwZWFwbGFiZWw9MScgY2FuIGJlIHVzZWQgdG8gZm9yY2UgbmV3IGxhYmVsLCAiY2xpZW50IFBFQVAgZW5jcnlwdGlvbiIsCisjCXRvIGJlIHVzZWQgZHVyaW5nIGtleSBkZXJpdmF0aW9uIHdoZW4gUEVBUHYxIG9yIG5ld2VyLiBNb3N0IGV4aXN0aW5nCisjCVBFQVB2MSBpbXBsZW1lbnRhdGlvbiBzZWVtIHRvIGJlIHVzaW5nIHRoZSBvbGQgbGFiZWwsICJjbGllbnQgRUFQCisjCWVuY3J5cHRpb24iLCBhbmQgd3BhX3N1cHBsaWNhbnQgaXMgbm93IHVzaW5nIHRoYXQgYXMgdGhlIGRlZmF1bHQgdmFsdWUuCisjCVNvbWUgc2VydmVycywgZS5nLiwgUmFkaWF0b3IsIG1heSByZXF1aXJlIHBlYXBsYWJlbD0xIGNvbmZpZ3VyYXRpb24gdG8KKyMJaW50ZXJvcGVyYXRlIHdpdGggUEVBUHYxOyBzZWUgZWFwX3Rlc3RpbmcudHh0IGZvciBtb3JlIGRldGFpbHMuCisjCSdwZWFwX291dGVyX3N1Y2Nlc3M9MCcgY2FuIGJlIHVzZWQgdG8gdGVybWluYXRlIFBFQVAgYXV0aGVudGljYXRpb24gb24KKyMJdHVubmVsZWQgRUFQLVN1Y2Nlc3MuIFRoaXMgaXMgcmVxdWlyZWQgd2l0aCBzb21lIFJBRElVUyBzZXJ2ZXJzIHRoYXQKKyMJaW1wbGVtZW50IGRyYWZ0LWpvc2Vmc3Nvbi1wcHBleHQtZWFwLXRscy1lYXAtMDUudHh0IChlLmcuLAorIwlMdWNlbnQgTmF2aXNSYWRpdXMgdjQuNC4wIHdpdGggUEVBUCBpbiAiSUVURiBEcmFmdCA1IiBtb2RlKQorIwlpbmNsdWRlX3Rsc19sZW5ndGg9MSBjYW4gYmUgdXNlZCB0byBmb3JjZSB3cGFfc3VwcGxpY2FudCB0byBpbmNsdWRlCisjCVRMUyBNZXNzYWdlIExlbmd0aCBmaWVsZCBpbiBhbGwgVExTIG1lc3NhZ2VzIGV2ZW4gaWYgdGhleSBhcmUgbm90CisjCWZyYWdtZW50ZWQuCisjCXNpbV9taW5fbnVtX2NoYWw9MyBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgRUFQLVNJTSB0byByZXF1aXJlIHRocmVlCisjCWNoYWxsZW5nZXMgKGJ5IGRlZmF1bHQsIGl0IGFjY2VwdHMgMiBvciAzKQorIyBwaGFzZTI6IFBoYXNlMiAoaW5uZXIgYXV0aGVudGljYXRpb24gd2l0aCBUTFMgdHVubmVsKSBwYXJhbWV0ZXJzCisjCShzdHJpbmcgd2l0aCBmaWVsZC12YWx1ZSBwYWlycywgZS5nLiwgImF1dGg9TVNDSEFQVjIiIGZvciBFQVAtUEVBUCBvcgorIwkiYXV0aGVhcD1NU0NIQVBWMiBhdXRoZWFwPU1ENSIgZm9yIEVBUC1UVExTKQorIyBGb2xsb3dpbmcgY2VydGlmaWNhdGUvcHJpdmF0ZSBrZXkgZmllbGRzIGFyZSB1c2VkIGluIGlubmVyIFBoYXNlMgorIyBhdXRoZW50aWNhdGlvbiB3aGVuIHVzaW5nIEVBUC1UVExTIG9yIEVBUC1QRUFQLgorIyBjYV9jZXJ0MjogRmlsZSBwYXRoIHRvIENBIGNlcnRpZmljYXRlIGZpbGUuIFRoaXMgZmlsZSBjYW4gaGF2ZSBvbmUgb3IgbW9yZQorIwl0cnVzdGVkIENBIGNlcnRpZmljYXRlcy4gSWYgY2FfY2VydDIgYW5kIGNhX3BhdGgyIGFyZSBub3QgaW5jbHVkZWQsCisjCXNlcnZlciBjZXJ0aWZpY2F0ZSB3aWxsIG5vdCBiZSB2ZXJpZmllZC4gVGhpcyBpcyBpbnNlY3VyZSBhbmQgYSB0cnVzdGVkCisjCUNBIGNlcnRpZmljYXRlIHNob3VsZCBhbHdheXMgYmUgY29uZmlndXJlZC4KKyMgY2FfcGF0aDI6IERpcmVjdG9yeSBwYXRoIGZvciBDQSBjZXJ0aWZpY2F0ZSBmaWxlcyAoUEVNKQorIyBjbGllbnRfY2VydDI6IEZpbGUgcGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgZmlsZQorIyBwcml2YXRlX2tleTI6IEZpbGUgcGF0aCB0byBjbGllbnQgcHJpdmF0ZSBrZXkgZmlsZQorIyBwcml2YXRlX2tleTJfcGFzc3dkOiBQYXNzd29yZCBmb3IgcHJpdmF0ZSBrZXkgZmlsZQorIyBkaF9maWxlMjogRmlsZSBwYXRoIHRvIERIL0RTQSBwYXJhbWV0ZXJzIGZpbGUgKGluIFBFTSBmb3JtYXQpCisjIHN1YmplY3RfbWF0Y2gyOiBTdWJzdHJpbmcgdG8gYmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBzdWJqZWN0IG9mIHRoZQorIwlhdXRoZW50aWNhdGlvbiBzZXJ2ZXIgY2VydGlmaWNhdGUuCisjIGFsdHN1YmplY3RfbWF0Y2gyOiBTdWJzdHJpbmcgdG8gYmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBhbHRlcm5hdGl2ZSBzdWJqZWN0CisjCW5hbWUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHNlcnZlciBjZXJ0aWZpY2F0ZS4KKyMKKyMgZnJhZ21lbnRfc2l6ZTogTWF4aW11bSBFQVAgZnJhZ21lbnQgc2l6ZSBpbiBieXRlcyAoZGVmYXVsdCAxMzk4KS4KKyMJVGhpcyB2YWx1ZSBsaW1pdHMgdGhlIGZyYWdtZW50IHNpemUgZm9yIEVBUCBtZXRob2RzIHRoYXQgc3VwcG9ydAorIwlmcmFnbWVudGF0aW9uIChlLmcuLCBFQVAtVExTIGFuZCBFQVAtUEVBUCkuIFRoaXMgdmFsdWUgc2hvdWxkIGJlIHNldAorIwlzbWFsbCBlbm91Z2ggdG8gbWFrZSB0aGUgRUFQIG1lc3NhZ2VzIGZpdCBpbiBNVFUgb2YgdGhlIG5ldHdvcmsKKyMJaW50ZXJmYWNlIHVzZWQgZm9yIEVBUE9MLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBzdWl0YWJsZSBmb3IgbW9zdAorIwljYXNlcy4KKyMKKyMgRUFQLVBTSyB2YXJpYWJsZXM6CisjIGVhcHBzazogMTYtYnl0ZSAoMTI4LWJpdCwgMzIgaGV4IGRpZ2l0cykgcHJlLXNoYXJlZCBrZXkgaW4gaGV4IGZvcm1hdAorIyBuYWk6IHVzZXIgTkFJCisjCisjIEVBUC1QQVggdmFyaWFibGVzOgorIyBlYXBwc2s6IDE2LWJ5dGUgKDEyOC1iaXQsIDMyIGhleCBkaWdpdHMpIHByZS1zaGFyZWQga2V5IGluIGhleCBmb3JtYXQKKyMKKyMgRUFQLVNBS0UgdmFyaWFibGVzOgorIyBlYXBwc2s6IDMyLWJ5dGUgKDI1Ni1iaXQsIDY0IGhleCBkaWdpdHMpIHByZS1zaGFyZWQga2V5IGluIGhleCBmb3JtYXQKKyMJKHRoaXMgaXMgY29uY2F0ZW5hdGlvbiBvZiBSb290LVNlY3JldC1BIGFuZCBSb290LVNlY3JldC1CKQorIyBuYWk6IHVzZXIgTkFJIChQRUVSSUQpCisjCisjIEVBUC1HUFNLIHZhcmlhYmxlczoKKyMgZWFwcHNrOiBQcmUtc2hhcmVkIGtleSBpbiBoZXggZm9ybWF0IChhdCBsZWFzdCAxMjggYml0cywgaS5lLiwgMzIgaGV4IGRpZ2l0cykKKyMgbmFpOiB1c2VyIE5BSSAoSURfQ2xpZW50KQorIworIyBFQVAtRkFTVCB2YXJpYWJsZXM6CisjIHBhY19maWxlOiBGaWxlIHBhdGggZm9yIHRoZSBQQUMgZW50cmllcy4gd3BhX3N1cHBsaWNhbnQgd2lsbCBuZWVkIHRvIGJlIGFibGUKKyMJdG8gY3JlYXRlIHRoaXMgZmlsZSBhbmQgd3JpdGUgdXBkYXRlcyB0byBpdCB3aGVuIFBBQyBpcyBiZWluZworIwlwcm92aXNpb25lZCBvciByZWZyZXNoZWQuIEZ1bGwgcGF0aCB0byB0aGUgZmlsZSBzaG91bGQgYmUgdXNlZCBzaW5jZQorIwl3b3JraW5nIGRpcmVjdG9yeSBtYXkgY2hhbmdlIHdoZW4gd3BhX3N1cHBsaWNhbnQgaXMgcnVuIGluIHRoZQorIwliYWNrZ3JvdW5kLiBBbHRlcm5hdGl2ZWx5LCBhIG5hbWVkIGNvbmZpZ3VyYXRpb24gYmxvYiBjYW4gYmUgdXNlZCBieQorIwlzZXR0aW5nIHRoaXMgdG8gYmxvYjovLzxibG9iIG5hbWU+CisjIHBoYXNlMTogZmFzdF9wcm92aXNpb25pbmc9MSBvcHRpb24gZW5hYmxlcyBpbi1saW5lIHByb3Zpc2lvbmluZyBvZiBFQVAtRkFTVAorIwljcmVkZW50aWFscyAoUEFDKQorIworIyB3cGFfc3VwcGxpY2FudCBzdXBwb3J0cyBudW1iZXIgb2YgIkVBUCB3b3JrYXJvdW5kcyIgdG8gd29yayBhcm91bmQKKyMgaW50ZXJvcGVyYWJpbGl0eSBpc3N1ZXMgd2l0aCBpbmNvcnJlY3RseSBiZWhhdmluZyBhdXRoZW50aWNhdGlvbiBzZXJ2ZXJzLgorIyBUaGVzZSBhcmUgZW5hYmxlZCBieSBkZWZhdWx0IGJlY2F1c2Ugc29tZSBvZiB0aGUgaXNzdWVzIGFyZSBwcmVzZW50IGluIGxhcmdlCisjIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBzZXJ2ZXJzLiBTdHJpY3QgRUFQIGNvbmZvcm1hbmNlIG1vZGUgY2FuIGJlCisjIGNvbmZpZ3VyZWQgYnkgZGlzYWJsaW5nIHdvcmthcm91bmRzIHdpdGggZWFwX3dvcmthcm91bmQ9MC4KKworIyBFeGFtcGxlIGJsb2NrczoKKworIyBTaW1wbGUgY2FzZTogV1BBLVBTSywgUFNLIGFzIGFuIEFTQ0lJIHBhc3NwaHJhc2UsIGFsbG93IGFsbCB2YWxpZCBjaXBoZXJzCituZXR3b3JrPXsKKwlzc2lkPSJzaW1wbGUiCisJcHNrPSJ2ZXJ5IHNlY3JldCBwYXNzcGhyYXNlIgorCXByaW9yaXR5PTUKK30KKworIyBTYW1lIGFzIHByZXZpb3VzLCBidXQgcmVxdWVzdCBTU0lELXNwZWNpZmljIHNjYW5uaW5nIChmb3IgQVBzIHRoYXQgcmVqZWN0CisjIGJyb2FkY2FzdCBTU0lEKQorbmV0d29yaz17CisJc3NpZD0ic2Vjb25kIHNzaWQiCisJc2Nhbl9zc2lkPTEKKwlwc2s9InZlcnkgc2VjcmV0IHBhc3NwaHJhc2UiCisJcHJpb3JpdHk9MgorfQorCisjIE9ubHkgV1BBLVBTSyBpcyB1c2VkLiBBbnkgdmFsaWQgY2lwaGVyIGNvbWJpbmF0aW9uIGlzIGFjY2VwdGVkLgorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlwcm90bz1XUEEKKwlrZXlfbWdtdD1XUEEtUFNLCisJcGFpcndpc2U9Q0NNUCBUS0lQCisJZ3JvdXA9Q0NNUCBUS0lQIFdFUDEwNCBXRVA0MAorCXBzaz0wNmI0YmUxOWRhMjg5ZjQ3NWFhNDZhMzNjYjc5MzAyOWQ0YWIzZGI3YTIzZWU5MjM4MmViMDEwNmM3MmFjN2JiCisJcHJpb3JpdHk9MgorfQorCisjIE9ubHkgV1BBLUVBUCBpcyB1c2VkLiBCb3RoIENDTVAgYW5kIFRLSVAgaXMgYWNjZXB0ZWQuIEFuIEFQIHRoYXQgdXNlZCBXRVAxMDQKKyMgb3IgV0VQNDAgYXMgdGhlIGdyb3VwIGNpcGhlciB3aWxsIG5vdCBiZSBhY2NlcHRlZC4KK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJcHJvdG89UlNOCisJa2V5X21nbXQ9V1BBLUVBUAorCXBhaXJ3aXNlPUNDTVAgVEtJUAorCWdyb3VwPUNDTVAgVEtJUAorCWVhcD1UTFMKKwlpZGVudGl0eT0idXNlckBleGFtcGxlLmNvbSIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCWNsaWVudF9jZXJ0PSIvZXRjL2NlcnQvdXNlci5wZW0iCisJcHJpdmF0ZV9rZXk9Ii9ldGMvY2VydC91c2VyLnBydiIKKwlwcml2YXRlX2tleV9wYXNzd2Q9InBhc3N3b3JkIgorCXByaW9yaXR5PTEKK30KKworIyBFQVAtUEVBUC9NU0NIQVB2MiBjb25maWd1cmF0aW9uIGZvciBSQURJVVMgc2VydmVycyB0aGF0IHVzZSB0aGUgbmV3IHBlYXBsYWJlbAorIyAoZS5nLiwgUmFkaWF0b3IpCituZXR3b3JrPXsKKwlzc2lkPSJleGFtcGxlIgorCWtleV9tZ210PVdQQS1FQVAKKwllYXA9UEVBUAorCWlkZW50aXR5PSJ1c2VyQGV4YW1wbGUuY29tIgorCXBhc3N3b3JkPSJmb29iYXIiCisJY2FfY2VydD0iL2V0Yy9jZXJ0L2NhLnBlbSIKKwlwaGFzZTE9InBlYXBsYWJlbD0xIgorCXBoYXNlMj0iYXV0aD1NU0NIQVBWMiIKKwlwcmlvcml0eT0xMAorfQorCisjIEVBUC1UVExTL0VBUC1NRDUtQ2hhbGxlbmdlIGNvbmZpZ3VyYXRpb24gd2l0aCBhbm9ueW1vdXMgaWRlbnRpdHkgZm9yIHRoZQorIyB1bmVuY3J5cHRlZCB1c2UuIFJlYWwgaWRlbnRpdHkgaXMgc2VudCBvbmx5IHdpdGhpbiBhbiBlbmNyeXB0ZWQgVExTIHR1bm5lbC4KK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJa2V5X21nbXQ9V1BBLUVBUAorCWVhcD1UVExTCisJaWRlbnRpdHk9InVzZXJAZXhhbXBsZS5jb20iCisJYW5vbnltb3VzX2lkZW50aXR5PSJhbm9ueW1vdXNAZXhhbXBsZS5jb20iCisJcGFzc3dvcmQ9ImZvb2JhciIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCXByaW9yaXR5PTIKK30KKworIyBFQVAtVFRMUy9NU0NIQVB2MiBjb25maWd1cmF0aW9uIHdpdGggYW5vbnltb3VzIGlkZW50aXR5IGZvciB0aGUgdW5lbmNyeXB0ZWQKKyMgdXNlLiBSZWFsIGlkZW50aXR5IGlzIHNlbnQgb25seSB3aXRoaW4gYW4gZW5jcnlwdGVkIFRMUyB0dW5uZWwuCituZXR3b3JrPXsKKwlzc2lkPSJleGFtcGxlIgorCWtleV9tZ210PVdQQS1FQVAKKwllYXA9VFRMUworCWlkZW50aXR5PSJ1c2VyQGV4YW1wbGUuY29tIgorCWFub255bW91c19pZGVudGl0eT0iYW5vbnltb3VzQGV4YW1wbGUuY29tIgorCXBhc3N3b3JkPSJmb29iYXIiCisJY2FfY2VydD0iL2V0Yy9jZXJ0L2NhLnBlbSIKKwlwaGFzZTI9ImF1dGg9TVNDSEFQVjIiCit9CisKKyMgV1BBLUVBUCwgRUFQLVRUTFMgd2l0aCBkaWZmZXJlbnQgQ0EgY2VydGlmaWNhdGUgdXNlZCBmb3Igb3V0ZXIgYW5kIGlubmVyCisjIGF1dGhlbnRpY2F0aW9uLgorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlrZXlfbWdtdD1XUEEtRUFQCisJZWFwPVRUTFMKKwkjIFBoYXNlMSAvIG91dGVyIGF1dGhlbnRpY2F0aW9uCisJYW5vbnltb3VzX2lkZW50aXR5PSJhbm9ueW1vdXNAZXhhbXBsZS5jb20iCisJY2FfY2VydD0iL2V0Yy9jZXJ0L2NhLnBlbSIKKwkjIFBoYXNlIDIgLyBpbm5lciBhdXRoZW50aWNhdGlvbgorCXBoYXNlMj0iYXV0aGVhcD1UTFMiCisJY2FfY2VydDI9Ii9ldGMvY2VydC9jYTIucGVtIgorCWNsaWVudF9jZXJ0Mj0iL2V0Yy9jZXIvdXNlci5wZW0iCisJcHJpdmF0ZV9rZXkyPSIvZXRjL2Nlci91c2VyLnBydiIKKwlwcml2YXRlX2tleTJfcGFzc3dkPSJwYXNzd29yZCIKKwlwcmlvcml0eT0yCit9CisKKyMgQm90aCBXUEEtUFNLIGFuZCBXUEEtRUFQIGlzIGFjY2VwdGVkLiBPbmx5IENDTVAgaXMgYWNjZXB0ZWQgYXMgcGFpcndpc2UgYW5kCisjIGdyb3VwIGNpcGhlci4KK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJYnNzaWQ9MDA6MTE6MjI6MzM6NDQ6NTUKKwlwcm90bz1XUEEgUlNOCisJa2V5X21nbXQ9V1BBLVBTSyBXUEEtRUFQCisJcGFpcndpc2U9Q0NNUAorCWdyb3VwPUNDTVAKKwlwc2s9MDZiNGJlMTlkYTI4OWY0NzVhYTQ2YTMzY2I3OTMwMjlkNGFiM2RiN2EyM2VlOTIzODJlYjAxMDZjNzJhYzdiYgorfQorCisjIFNwZWNpYWwgY2hhcmFjdGVycyBpbiBTU0lELCBzbyB1c2UgaGV4IHN0cmluZy4gRGVmYXVsdCB0byBXUEEtUFNLLCBXUEEtRUFQCisjIGFuZCBhbGwgdmFsaWQgY2lwaGVycy4KK25ldHdvcms9eworCXNzaWQ9MDAwMTAyMDMKKwlwc2s9MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZgorfQorCisKKyMgSUVFRSA4MDIuMVgvRUFQT0wgd2l0aCBkeW5hbWljYWxseSBnZW5lcmF0ZWQgV0VQIGtleXMgKGkuZS4sIG5vIFdQQSkgdXNpbmcKKyMgRUFQLVRMUyBmb3IgYXV0aGVudGljYXRpb24gYW5kIGtleSBnZW5lcmF0aW9uOyByZXF1aXJlIGJvdGggdW5pY2FzdCBhbmQKKyMgYnJvYWRjYXN0IFdFUCBrZXlzLgorbmV0d29yaz17CisJc3NpZD0iMXgtdGVzdCIKKwlrZXlfbWdtdD1JRUVFODAyMVgKKwllYXA9VExTCisJaWRlbnRpdHk9InVzZXJAZXhhbXBsZS5jb20iCisJY2FfY2VydD0iL2V0Yy9jZXJ0L2NhLnBlbSIKKwljbGllbnRfY2VydD0iL2V0Yy9jZXJ0L3VzZXIucGVtIgorCXByaXZhdGVfa2V5PSIvZXRjL2NlcnQvdXNlci5wcnYiCisJcHJpdmF0ZV9rZXlfcGFzc3dkPSJwYXNzd29yZCIKKwllYXBvbF9mbGFncz0zCit9CisKKworIyBMRUFQIHdpdGggZHluYW1pYyBXRVAga2V5cworbmV0d29yaz17CisJc3NpZD0ibGVhcC1leGFtcGxlIgorCWtleV9tZ210PUlFRUU4MDIxWAorCWVhcD1MRUFQCisJaWRlbnRpdHk9InVzZXIiCisJcGFzc3dvcmQ9ImZvb2JhciIKK30KKworIyBQbGFpbnRleHQgY29ubmVjdGlvbiAobm8gV1BBLCBubyBJRUVFIDgwMi4xWCkKK25ldHdvcms9eworCXNzaWQ9InBsYWludGV4dC10ZXN0IgorCWtleV9tZ210PU5PTkUKK30KKworCisjIFNoYXJlZCBXRVAga2V5IGNvbm5lY3Rpb24gKG5vIFdQQSwgbm8gSUVFRSA4MDIuMVgpCituZXR3b3JrPXsKKwlzc2lkPSJzdGF0aWMtd2VwLXRlc3QiCisJa2V5X21nbXQ9Tk9ORQorCXdlcF9rZXkwPSJhYmNkZSIKKwl3ZXBfa2V5MT0wMTAyMDMwNDA1CisJd2VwX2tleTI9IjEyMzQ1Njc4OTAxMjMiCisJd2VwX3R4X2tleWlkeD0wCisJcHJpb3JpdHk9NQorfQorCisKKyMgU2hhcmVkIFdFUCBrZXkgY29ubmVjdGlvbiAobm8gV1BBLCBubyBJRUVFIDgwMi4xWCkgdXNpbmcgU2hhcmVkIEtleQorIyBJRUVFIDgwMi4xMSBhdXRoZW50aWNhdGlvbgorbmV0d29yaz17CisJc3NpZD0ic3RhdGljLXdlcC10ZXN0MiIKKwlrZXlfbWdtdD1OT05FCisJd2VwX2tleTA9ImFiY2RlIgorCXdlcF9rZXkxPTAxMDIwMzA0MDUKKwl3ZXBfa2V5Mj0iMTIzNDU2Nzg5MDEyMyIKKwl3ZXBfdHhfa2V5aWR4PTAKKwlwcmlvcml0eT01CisJYXV0aF9hbGc9U0hBUkVECit9CisKKworIyBJQlNTL2FkLWhvYyBuZXR3b3JrIHdpdGggV1BBLU5vbmUvVEtJUC4KK25ldHdvcms9eworCXNzaWQ9InRlc3QgYWRob2MiCisJbW9kZT0xCisJcHJvdG89V1BBCisJa2V5X21nbXQ9V1BBLU5PTkUKKwlwYWlyd2lzZT1OT05FCisJZ3JvdXA9VEtJUAorCXBzaz0ic2VjcmV0IHBhc3NwaHJhc2UiCit9CisKKworIyBDYXRjaCBhbGwgZXhhbXBsZSB0aGF0IGFsbG93cyBtb3JlIG9yIGxlc3MgYWxsIGNvbmZpZ3VyYXRpb24gbW9kZXMKK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJc2Nhbl9zc2lkPTEKKwlrZXlfbWdtdD1XUEEtRUFQIFdQQS1QU0sgSUVFRTgwMjFYIE5PTkUKKwlwYWlyd2lzZT1DQ01QIFRLSVAKKwlncm91cD1DQ01QIFRLSVAgV0VQMTA0IFdFUDQwCisJcHNrPSJ2ZXJ5IHNlY3JldCBwYXNzcGhyYXNlIgorCWVhcD1UVExTIFBFQVAgVExTCisJaWRlbnRpdHk9InVzZXJAZXhhbXBsZS5jb20iCisJcGFzc3dvcmQ9ImZvb2JhciIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCWNsaWVudF9jZXJ0PSIvZXRjL2NlcnQvdXNlci5wZW0iCisJcHJpdmF0ZV9rZXk9Ii9ldGMvY2VydC91c2VyLnBydiIKKwlwcml2YXRlX2tleV9wYXNzd2Q9InBhc3N3b3JkIgorCXBoYXNlMT0icGVhcGxhYmVsPTAiCit9CisKKyMgRXhhbXBsZSBvZiBFQVAtVExTIHdpdGggc21hcnRjYXJkIChvcGVuc3NsIGVuZ2luZSkKK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJa2V5X21nbXQ9V1BBLUVBUAorCWVhcD1UTFMKKwlwcm90bz1SU04KKwlwYWlyd2lzZT1DQ01QIFRLSVAKKwlncm91cD1DQ01QIFRLSVAKKwlpZGVudGl0eT0idXNlckBleGFtcGxlLmNvbSIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCWNsaWVudF9jZXJ0PSIvZXRjL2NlcnQvdXNlci5wZW0iCisKKwllbmdpbmU9MQorCisJIyBUaGUgZW5naW5lIGNvbmZpZ3VyZWQgaGVyZSBtdXN0IGJlIGF2YWlsYWJsZS4gTG9vayBhdAorCSMgT3BlblNTTCBlbmdpbmUgc3VwcG9ydCBpbiB0aGUgZ2xvYmFsIHNlY3Rpb24uCisJIyBUaGUga2V5IGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBlbmdpbmUgbXVzdCBiZSB0aGUgcHJpdmF0ZSBrZXkKKwkjIG1hdGNoaW5nIHRoZSBjbGllbnQgY2VydGlmaWNhdGUgY29uZmlndXJlZCBhYm92ZS4KKworCSMgdXNlIHRoZSBvcGVuc2MgZW5naW5lCisJI2VuZ2luZV9pZD0ib3BlbnNjIgorCSNrZXlfaWQ9IjQ1IgorCisJIyB1c2UgdGhlIHBrY3MxMSBlbmdpbmUKKwllbmdpbmVfaWQ9InBrY3MxMSIKKwlrZXlfaWQ9ImlkXzQ1IgorCisJIyBPcHRpb25hbCBQSU4gY29uZmlndXJhdGlvbjsgdGhpcyBjYW4gYmUgbGVmdCBvdXQgYW5kIFBJTiB3aWxsIGJlCisJIyBhc2tlZCB0aHJvdWdoIHRoZSBjb250cm9sIGludGVyZmFjZQorCXBpbj0iMTIzNCIKK30KKworIyBFeGFtcGxlIGNvbmZpZ3VyYXRpb24gc2hvd2luZyBob3cgdG8gdXNlIGFuIGlubGluZWQgYmxvYiBhcyBhIENBIGNlcnRpZmljYXRlCisjIGRhdGEgaW5zdGVhZCBvZiB1c2luZyBleHRlcm5hbCBmaWxlCituZXR3b3JrPXsKKwlzc2lkPSJleGFtcGxlIgorCWtleV9tZ210PVdQQS1FQVAKKwllYXA9VFRMUworCWlkZW50aXR5PSJ1c2VyQGV4YW1wbGUuY29tIgorCWFub255bW91c19pZGVudGl0eT0iYW5vbnltb3VzQGV4YW1wbGUuY29tIgorCXBhc3N3b3JkPSJmb29iYXIiCisJY2FfY2VydD0iYmxvYjovL2V4YW1wbGVibG9iIgorCXByaW9yaXR5PTIwCit9CisKK2Jsb2ItYmFzZTY0LWV4YW1wbGVibG9iPXsKK1NHVnNiRzhnVjI5eWJHUWhDZz09Cit9CisKKworIyBXaWxkY2FyZCBtYXRjaCBmb3IgU1NJRCAocGxhaW50ZXh0IEFQcyBvbmx5KS4gVGhpcyBleGFtcGxlIHNlbGVjdCBhbnkKKyMgb3BlbiBBUCByZWdhcmRsZXNzIG9mIGl0cyBTU0lELgorbmV0d29yaz17CisJa2V5X21nbXQ9Tk9ORQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmNvbmYtc2FuZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudC5jb25mLXNhbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkxZmZlMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudC5jb25mLXNhbmUKQEAgLTAsMCArMSw3IEBACitjdHJsX2ludGVyZmFjZT0vdmFyL3J1bi93cGFfc3VwcGxpY2FudAorY3RybF9pbnRlcmZhY2VfZ3JvdXA9MAordXBkYXRlX2NvbmZpZz0xCisKK25ldHdvcms9eworICAgICAgICBrZXlfbWdtdD1OT05FCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnRfMi40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50XzIuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTI0Y2YyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50XzIuNC5iYgpAQCAtMCwwICsxLDExNiBAQAorU1VNTUFSWSA9ICJDbGllbnQgZm9yIFdpLUZpIFByb3RlY3RlZCBBY2Nlc3MgKFdQQSkiCitIT01FUEFHRSA9ICJodHRwOi8vaG9zdGFwLmVwaXRlc3QuZmkvd3BhX3N1cHBsaWNhbnQvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vaG9zdGFwLmVwaXRlc3QuZmkvYnVnei8iCitTRUNUSU9OID0gIm5ldHdvcmsiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTM2YjI3ODAxNDQ3ZTA2NjJlZTAxMzhkMTdmZTkzODgwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MTtlbmRsaW5lPTU2O21kNT03ZjM5MzU3OWY4YjEwOWZlOTFmM2I5NzY1ZDI2YzdkMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly93cGFfc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTI7bWQ1PTM0MzBmZGE3OWYyYmExZGQ1NDVmMGIzYzRkNmU0ZDI0ICIKK0RFUEVORFMgPSAiZGJ1cyBsaWJubCBsaWJnY3J5cHQiCitSUkVDT01NRU5EU18ke1BOfSA9ICJ3cGEtc3VwcGxpY2FudC1wYXNzcGhyYXNlIHdwYS1zdXBwbGljYW50LWNsaSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImdudXRscyIKK1BBQ0tBR0VDT05GSUdbZ251dGxzXSA9ICIsLGdudXRscyIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLCxvcGVuc3NsIgorCitpbmhlcml0IHN5c3RlbWQKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIndwYV9zdXBwbGljYW50LnNlcnZpY2Ugd3BhX3N1cHBsaWNhbnQtbmw4MDIxMUAuc2VydmljZSB3cGFfc3VwcGxpY2FudC13aXJlZEAuc2VydmljZSIKK1NZU1RFTURfQVVUT19FTkFCTEUgPSAiZGlzYWJsZSIKKworU1JDX1VSSSA9ICJodHRwOi8vaG9zdGFwLmVwaXRlc3QuZmkvcmVsZWFzZXMvd3BhX3N1cHBsaWNhbnQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2RlZmNvbmZpZyBcCisgICAgICAgICAgIGZpbGU6Ly93cGEtc3VwcGxpY2FudC5zaCBcCisgICAgICAgICAgIGZpbGU6Ly93cGFfc3VwcGxpY2FudC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL3dwYV9zdXBwbGljYW50LmNvbmYtc2FuZSBcCisgICAgICAgICAgIGZpbGU6Ly85OV93cGFfc3VwcGxpY2FudCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFQLVdNTS1GaXgtaW50ZWdlci11bmRlcmZsb3ctaW4tV01NLUFjdGlvbi1mcmFtZS1wYXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1QMlAtVmFsaWRhdGUtU1NJRC1lbGVtZW50LWxlbmd0aC1iZWZvcmUtY29weWluZy1pdC1DLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtV1BTLUZpeC1IVFRQLWNodW5rZWQtdHJhbnNmZXItZW5jb2RpbmctcGFyc2VyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRUFQLXB3ZC1wZWVyLUZpeC1wYXlsb2FkLWxlbmd0aC12YWxpZGF0aW9uLWZvci1Db21taS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLUVBUC1wd2Qtc2VydmVyLUZpeC1wYXlsb2FkLWxlbmd0aC12YWxpZGF0aW9uLWZvci1Db20ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1FQVAtcHdkLXBlZXItRml4LVRvdGFsLUxlbmd0aC1wYXJzaW5nLWZvci1mcmFnbWVudC1yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtRUFQLXB3ZC1zZXJ2ZXItRml4LVRvdGFsLUxlbmd0aC1wYXJzaW5nLWZvci1mcmFnbWVudC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LUVBUC1wd2QtcGVlci1GaXgtYXN5bW1ldHJpYy1mcmFnbWVudGF0aW9uLWJlaGF2aW9yLnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiZjAwMzdkYmUwMzg5N2RjYWYyYWQyNzIyZTY1OTA5NWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDU4ZGM4MzJjMDk2MTM5YTA1OWU2ZGY4MTQwODBmNTAyNTFhOGQzMTNjMjFiMTMzNjRjNTRhMWU3MDEwOTEyMiIKKworUyA9ICIke1dPUktESVJ9L3dwYV9zdXBwbGljYW50LSR7UFZ9IgorCitQQUNLQUdFU19wcmVwZW5kID0gIndwYS1zdXBwbGljYW50LXBhc3NwaHJhc2Ugd3BhLXN1cHBsaWNhbnQtY2xpICIKK0ZJTEVTX3dwYS1zdXBwbGljYW50LXBhc3NwaHJhc2UgPSAiJHtiaW5kaXJ9L3dwYV9wYXNzcGhyYXNlIgorRklMRVNfd3BhLXN1cHBsaWNhbnQtY2xpID0gIiR7c2JpbmRpcn0vd3BhX2NsaSIKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMvKiIKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS93cGFfc3VwcGxpY2FudC5jb25mIgorCitkb19jb25maWd1cmUgKCkgeworCSR7TUFLRX0gLUMgd3BhX3N1cHBsaWNhbnQgY2xlYW4KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9kZWZjb25maWcgd3BhX3N1cHBsaWNhbnQvLmNvbmZpZworCWVjaG8gIkNGTEFHUyArPVwiLUkke1NUQUdJTkdfSU5DRElSfS9saWJubDNcIiIgPj4gd3BhX3N1cHBsaWNhbnQvLmNvbmZpZworCWVjaG8gIkRSVl9DRkxBR1MgKz1cIi1JJHtTVEFHSU5HX0lOQ0RJUn0vbGlibmwzXCIiID4+IHdwYV9zdXBwbGljYW50Ly5jb25maWcKKwkKKwlpZiBlY2hvICIke1BBQ0tBR0VDT05GSUd9IiB8IGdyZXAgLXF3ICJvcGVuc3NsIjsgdGhlbgorICAgICAgICAJc3NsPW9wZW5zc2wKKwllbGlmIGVjaG8gIiR7UEFDS0FHRUNPTkZJR30iIHwgZ3JlcCAtcXcgImdudXRscyI7IHRoZW4KKyAgICAgICAgCXNzbD1nbnV0bHMKKwlmaQorCWlmIFsgLW4gIiRzc2wiIF07IHRoZW4KKyAgICAgICAgCXNlZCAtaSAicy8lc3NsJS8kc3NsLyIgd3BhX3N1cHBsaWNhbnQvLmNvbmZpZworCWZpCisKKwkjIEZvciByZWJ1aWxkCisJcm0gLWYgd3BhX3N1cHBsaWNhbnQvKi5kIHdwYV9zdXBwbGljYW50L2RidXMvKi5kCit9CisKK2V4cG9ydCBFWFRSQV9DRkxBR1MgPSAiJHtDRkxBR1N9IgorZXhwb3J0IEJJTkRJUiA9ICIke3NiaW5kaXJ9IgorCitkb19jb21waWxlICgpIHsKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MKKwlzZWQgLWUgInM6Q0ZMQUdTXCA9Lio6JiBcJChFWFRSQV9DRkxBR1MpOmciIC1pICR7U30vc3JjL2xpYi5ydWxlcworCW9lX3J1bm1ha2UgLUMgd3BhX3N1cHBsaWNhbnQKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLW0gNzU1IHdwYV9zdXBwbGljYW50L3dwYV9zdXBwbGljYW50ICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSA3NTUgd3BhX3N1cHBsaWNhbnQvd3BhX2NsaSAgICAgICAgJHtEfSR7c2JpbmRpcn0KKworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gNzU1IHdwYV9zdXBwbGljYW50L3dwYV9wYXNzcGhyYXNlICR7RH0ke2JpbmRpcn0KKworCWluc3RhbGwgLWQgJHtEfSR7ZG9jZGlyfS93cGFfc3VwcGxpY2FudAorCWluc3RhbGwgLW0gNjQ0IHdwYV9zdXBwbGljYW50L1JFQURNRSAke1dPUktESVJ9L3dwYV9zdXBwbGljYW50LmNvbmYgJHtEfSR7ZG9jZGlyfS93cGFfc3VwcGxpY2FudAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gNjAwICR7V09SS0RJUn0vd3BhX3N1cHBsaWNhbnQuY29uZi1zYW5lICR7RH0ke3N5c2NvbmZkaXJ9L3dwYV9zdXBwbGljYW50LmNvbmYKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1wcmUtdXAuZC8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtcG9zdC1kb3duLmQvCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLWRvd24uZC8KKwlpbnN0YWxsIC1tIDc1NSAke1dPUktESVJ9L3dwYS1zdXBwbGljYW50LnNoICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtcHJlLXVwLmQvd3BhLXN1cHBsaWNhbnQKKwljZCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrLyAmJiBcCisJbG4gLXNmIC4uL2lmLXByZS11cC5kL3dwYS1zdXBwbGljYW50IGlmLXBvc3QtZG93bi5kL3dwYS1zdXBwbGljYW50CisKKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9kYnVzLTEvc3lzdGVtLmQKKwlpbnN0YWxsIC1tIDY0NCAke1N9L3dwYV9zdXBwbGljYW50L2RidXMvZGJ1cy13cGFfc3VwcGxpY2FudC5jb25mICR7RH0vJHtzeXNjb25mZGlyfS9kYnVzLTEvc3lzdGVtLmQKKwlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzCisJaW5zdGFsbCAtbSA2NDQgJHtTfS93cGFfc3VwcGxpY2FudC9kYnVzLyouc2VydmljZSAke0R9LyR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcworCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0vJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCQlpbnN0YWxsIC1tIDY0NCAke1N9L3dwYV9zdXBwbGljYW50L3N5c3RlbWQvKi5zZXJ2aWNlICR7RH0vJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWZpCisKKwlpbnN0YWxsIC1kICR7RH0vZXRjL2RlZmF1bHQvdm9sYXRpbGVzCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vOTlfd3BhX3N1cHBsaWNhbnQgJHtEfS9ldGMvZGVmYXVsdC92b2xhdGlsZXMKK30KKworcGtnX3Bvc3RpbnN0X3dwYS1zdXBwbGljYW50ICgpIHsKKwkjIElmIHdlJ3JlIG9mZmxpbmUsIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhpcy4KKwlpZiBbICJ4JEQiID0gIngiIF07IHRoZW4KKwkJa2lsbGFsbCAtcSAtSFVQIGRidXMtZGFlbW9uIHx8IHRydWUKKwlmaQorCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9maWxlc3lzdGVtcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2ZpbGVzeXN0ZW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNmM0MWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9maWxlc3lzdGVtcwpAQCAtMCwwICsxLDggQEAKK2V4dDQKK2V4dDMKK2V4dDIKK3ZmYXQKK2ZhdAorYnRyZnMKK21pbml4CisqCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9mc3RhYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2ZzdGFiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OWEwMTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9mc3RhYgpAQCAtMCwwICsxLDExIEBACisjIHN0b2NrIGZzdGFiIC0geW91IHByb2JhYmx5IHdhbnQgdG8gb3ZlcnJpZGUgdGhpcyB3aXRoIGEgbWFjaGluZSBzcGVjaWZpYyBvbmUKKworL2Rldi9yb290ICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAgICAgYXV0byAgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMSAgMQorcHJvYyAgICAgICAgICAgICAgICAgL3Byb2MgICAgICAgICAgICAgICAgcHJvYyAgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMCAgMAorZGV2cHRzICAgICAgICAgICAgICAgL2Rldi9wdHMgICAgICAgICAgICAgZGV2cHRzICAgICBtb2RlPTA2MjAsZ2lkPTUgICAgICAgMCAgMAordG1wZnMgICAgICAgICAgICAgICAgL3J1biAgICAgICAgICAgICAgICAgdG1wZnMgICAgICBtb2RlPTA3NTUsbm9kZXYsbm9zdWlkLHN0cmljdGF0aW1lIDAgIDAKK3RtcGZzICAgICAgICAgICAgICAgIC92YXIvdm9sYXRpbGUgICAgICAgIHRtcGZzICAgICAgZGVmYXVsdHMgICAgICAgICAgICAgIDAgIDAKKworIyB1bmNvbW1lbnQgdGhpcyBpZiB5b3VyIGRldmljZSBoYXMgYSBTRC9NTUMvVHJhbnNmbGFzaCBzbG90CisjL2Rldi9tbWNibGswcDEgICAgICAgL21lZGlhL2NhcmQgICAgICAgICAgYXV0byAgICAgICBkZWZhdWx0cyxzeW5jLG5vYXV0byAgMCAgMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9ob3N0LmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9ob3N0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE4YzFlMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2hvc3QuY29uZgpAQCAtMCwwICsxLDIgQEAKK29yZGVyIGhvc3RzLGJpbmQKK211bHRpIG9uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9pbnB1dHJjIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaW5wdXRyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWM0YzhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaW5wdXRyYwpAQCAtMCwwICsxLDYxIEBACisjIC9ldGMvaW5wdXRyYyAtIGdsb2JhbCBpbnB1dHJjIGZvciBsaWJyZWFkbGluZQorIyBTZWUgcmVhZGxpbmUoM3JlYWRsaW5lKSBhbmQgYGluZm8gcmx1c2VybWFuJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworIyBCZSA4IGJpdCBjbGVhbi4KK3NldCBpbnB1dC1tZXRhIG9uCitzZXQgb3V0cHV0LW1ldGEgb24KKworIyBUbyBhbGxvdyB0aGUgdXNlIG9mIDhiaXQtY2hhcmFjdGVycyBsaWtlIHRoZSBnZXJtYW4gdW1sYXV0cywgY29tbWVudCBvdXQKKyMgdGhlIGxpbmUgYmVsb3cuIEhvd2V2ZXIgdGhpcyBtYWtlcyB0aGUgbWV0YSBrZXkgbm90IHdvcmsgYXMgYSBtZXRhIGtleSwKKyMgd2hpY2ggaXMgYW5ub3lpbmcgdG8gdGhvc2Ugd2hpY2ggZG9uJ3QgbmVlZCB0byB0eXBlIGluIDgtYml0IGNoYXJhY3RlcnMuCisKKyMgc2V0IGNvbnZlcnQtbWV0YSBvZmYKKworIyB0cnkgdG8gZW5hYmxlIHRoZSBhcHBsaWNhdGlvbiBrZXlwYWQgd2hlbiBpdCBpcyBjYWxsZWQuICBTb21lIHN5c3RlbXMKKyMgbmVlZCB0aGlzIHRvIGVuYWJsZSB0aGUgYXJyb3cga2V5cy4KKyMgc2V0IGVuYWJsZS1rZXlwYWQgb24KKworIyBzZWUgL3Vzci9zaGFyZS9kb2MvYmFzaC9pbnB1dHJjLmFycm93cyBmb3Igb3RoZXIgY29kZXMgb2YgYXJyb3cga2V5cworCisjIGRvIG5vdCBiZWxsIG9uIHRhYi1jb21wbGV0aW9uIAorIyBzZXQgYmVsbC1zdHlsZSBub25lIAorCisjIHNvbWUgZGVmYXVsdHMgLyBtb2RpZmljYXRpb25zIGZvciB0aGUgZW1hY3MgbW9kZQorJGlmIG1vZGU9ZW1hY3MKKworIyBhbGxvdyB0aGUgdXNlIG9mIHRoZSBIb21lL0VuZCBrZXlzCisjICJcZVsxfiI6IGJlZ2lubmluZy1vZi1saW5lCisjICJcZVs0fiI6IGVuZC1vZi1saW5lCisKKyMgYWxsb3cgdGhlIHVzZSBvZiB0aGUgRGVsZXRlL0luc2VydCBrZXlzCisjICJcZVszfiI6IGRlbGV0ZS1jaGFyCisjICJcZVsyfiI6IHF1b3RlZC1pbnNlcnQKKworIyBtYXBwaW5ncyBmb3IgInBhZ2UgdXAiIGFuZCAicGFnZSBkb3duIiB0byBzdGVwIHRvIHRoZSBiZWdpbm5pbmcvZW5kIAorIyBvZiB0aGUgaGlzdG9yeQorIyAiXGVbNX4iOiBiZWdpbm5pbmctb2YtaGlzdG9yeQorIyAiXGVbNn4iOiBlbmQtb2YtaGlzdG9yeQorCisjIGFsdGVybmF0ZSBtYXBwaW5ncyBmb3IgInBhZ2UgdXAiIGFuZCAicGFnZSBkb3duIiB0byBzZWFyY2ggdGhlIGhpc3RvcnkKKyMgIlxlWzV+IjogaGlzdG9yeS1zZWFyY2gtYmFja3dhcmQKKyMgIlxlWzZ+IjogaGlzdG9yeS1zZWFyY2gtZm9yd2FyZAorCisjICMgbWFwcGluZ3MgZm9yIEN0cmwtbGVmdC1hcnJvdyBhbmQgQ3RybC1yaWdodC1hcnJvdyBmb3Igd29yZCBtb3ZpbmcKKyMgIlxlWzVDIjogZm9yd2FyZC13b3JkCisjICJcZVs1RCI6IGJhY2t3YXJkLXdvcmQKKyMgIlxlXGVbQyI6IGZvcndhcmQtd29yZAorIyAiXGVcZVtEIjogYmFja3dhcmQtd29yZAorCisjICRpZiB0ZXJtPXJ4dnQKKyMgIlxlWzh+IjogZW5kLW9mLWxpbmUKKyMgJGVuZGlmCisKKyMgZm9yIG5vbiBSSC9EZWJpYW4geHRlcm0sIGNhbid0IGh1cnQgZm9yIFJIL0RFYmlhbiB4dGVybQorIyAiXGVPSCI6IGJlZ2lubmluZy1vZi1saW5lCisjICJcZU9GIjogZW5kLW9mLWxpbmUKKworIyBmb3IgZnJlZWJzZCBjb25zb2xlCisjICJcZVtIIjogYmVnaW5uaW5nLW9mLWxpbmUKKyMgIlxlW0YiOiBlbmQtb2YtbGluZQorCiskZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2lzc3VlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaXNzdWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2lzc3VlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9pc3N1ZS5uZXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9pc3N1ZS5uZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2lzc3VlLm5ldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbGljZW5zZXMvR1BMLTIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9saWNlbnNlcy9HUEwtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjBjMzFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbGljZW5zZXMvR1BMLTIKQEAgLTAsMCArMSwzNDAgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorDAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorDAorVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisMCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisMCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyICBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbW90ZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL21vdGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL21vdGQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL25zc3dpdGNoLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9uc3N3aXRjaC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZjAzZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9uc3N3aXRjaC5jb25mCkBAIC0wLDAgKzEsMTkgQEAKKyMgL2V0Yy9uc3N3aXRjaC5jb25mCisjCisjIEV4YW1wbGUgY29uZmlndXJhdGlvbiBvZiBHTlUgTmFtZSBTZXJ2aWNlIFN3aXRjaCBmdW5jdGlvbmFsaXR5LgorIyBJZiB5b3UgaGF2ZSB0aGUgYGdsaWJjLWRvYycgYW5kIGBpbmZvJyBwYWNrYWdlcyBpbnN0YWxsZWQsIHRyeToKKyMgYGluZm8gbGliYyAiTmFtZSBTZXJ2aWNlIFN3aXRjaCInIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGZpbGUuCisKK3Bhc3N3ZDogICAgICAgICBjb21wYXQKK2dyb3VwOiAgICAgICAgICBjb21wYXQKK3NoYWRvdzogICAgICAgICBjb21wYXQKKworaG9zdHM6ICAgICAgICAgIGZpbGVzIGRucworbmV0d29ya3M6ICAgICAgIGZpbGVzCisKK3Byb3RvY29sczogICAgICBkYiBmaWxlcworc2VydmljZXM6ICAgICAgIGRiIGZpbGVzCitldGhlcnM6ICAgICAgICAgZGIgZmlsZXMKK3JwYzogICAgICAgICAgICBkYiBmaWxlcworCituZXRncm91cDogICAgICAgbmlzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9wcm9maWxlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvcHJvZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2MyNjgwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvcHJvZmlsZQpAQCAtMCwwICsxLDM2IEBACisjIC9ldGMvcHJvZmlsZTogc3lzdGVtLXdpZGUgLnByb2ZpbGUgZmlsZSBmb3IgdGhlIEJvdXJuZSBzaGVsbCAoc2goMSkpCisjIGFuZCBCb3VybmUgY29tcGF0aWJsZSBzaGVsbHMgKGJhc2goMSksIGtzaCgxKSwgYXNoKDEpLCAuLi4pLgorCitQQVRIPSIvdXNyL2xvY2FsL2JpbjovdXNyL2JpbjovYmluIgorRURJVE9SPSJ2aSIJCQkjIG5lZWRlZCBmb3IgcGFja2FnZXMgbGlrZSBjcm9uLCBnaXQtY29tbWl0Cit0ZXN0IC16ICIkVEVSTSIgJiYgVEVSTT0idnQxMDAiCSMgQmFzaWMgdGVybWluYWwgY2FwYWIuIEZvciBzY3JlZW4gZXRjLgorCitpZiBbICEgLWUgL2V0Yy9sb2NhbHRpbWUgLWEgISAtZSAvZXRjL1RaIF07IHRoZW4KKwlUWj0iVVRDIgkJIyBUaW1lIFpvbmUuIExvb2sgYXQgaHR0cDovL3RoZW9yeS51d2lubmlwZWcuY2EvZ251L2dsaWJjL2xpYmNfMzAzLmh0bWwgCisJCQkJIyBmb3IgYW4gZXhwbGFuYXRpb24gb2YgaG93IHRvIHNldCB0aGlzIHRvIHlvdXIgbG9jYWwgdGltZXpvbmUuCisJZXhwb3J0IFRaCitmaQorCitpZiBbICIkSE9NRSIgPSAiUk9PVEhPTUUiIF07IHRoZW4KKyAgIFBBVEg9JFBBVEg6L3Vzci9sb2NhbC9zYmluOi91c3Ivc2Jpbjovc2JpbgorZmkKK2lmIFsgIiRQUzEiIF07IHRoZW4KKyMgd29ya3MgZm9yIGJhc2ggYW5kIGFzaCAobm8gb3RoZXIgc2hlbGxzIGtub3duIHRvIGJlIGluIHVzZSBoZXJlKQorICAgUFMxPSdcdUBcaDpcd1wkICcKK2ZpCisKK2lmIFsgLWQgL2V0Yy9wcm9maWxlLmQgXTsgdGhlbgorICBmb3IgaSBpbiAvZXRjL3Byb2ZpbGUuZC8qIDsgZG8KKyAgICAuICRpCisgIGRvbmUKKyAgdW5zZXQgaQorZmkKKworaWYgWyAteCAvdXNyL2Jpbi9yZXNpemUgXTt0aGVuCisgIC91c3IvYmluL3Jlc2l6ZSA+L2Rldi9udWxsCitmaQorCitleHBvcnQgUEFUSCBQUzEgT1BJRURJUiBRUEVESVIgUVRESVIgRURJVE9SIFRFUk0KKwordW1hc2sgMDIyCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3JvdGF0aW9uIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvcm90YXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIyNzA4MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3JvdGF0aW9uCkBAIC0wLDAgKzEgQEAKKzAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGFyZS9kb3QuYmFzaHJjIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvc2hhcmUvZG90LmJhc2hyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmU2MzY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvc2hhcmUvZG90LmJhc2hyYwpAQCAtMCwwICsxLDE2IEBACisjIH4vLmJhc2hyYzogZXhlY3V0ZWQgYnkgYmFzaCgxKSBmb3Igbm9uLWxvZ2luIHNoZWxscy4KKworZXhwb3J0IFBTMT0nXGg6XHdcJCAnCit1bWFzayAwMjIKKworIyBZb3UgbWF5IHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzIGlmIHlvdSB3YW50IGBscycgdG8gYmUgY29sb3JpemVkOgorIyBleHBvcnQgTFNfT1BUSU9OUz0nLS1jb2xvcj1hdXRvJworIyBldmFsIGBkaXJjb2xvcnNgCisjIGFsaWFzIGxzPSdscyAkTFNfT1BUSU9OUycKKyMgYWxpYXMgbGw9J2xzICRMU19PUFRJT05TIC1sJworIyBhbGlhcyBsPSdscyAkTFNfT1BUSU9OUyAtbEEnCisjCisjIFNvbWUgbW9yZSBhbGlhcyB0byBhdm9pZCBtYWtpbmcgbWlzdGFrZXM6CisjIGFsaWFzIHJtPSdybSAtaScKKyMgYWxpYXMgY3A9J2NwIC1pJworIyBhbGlhcyBtdj0nbXYgLWknCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGFyZS9kb3QucHJvZmlsZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoYXJlL2RvdC5wcm9maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OTc5M2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGFyZS9kb3QucHJvZmlsZQpAQCAtMCwwICsxLDEwIEBACisjIH4vLnByb2ZpbGU6IGV4ZWN1dGVkIGJ5IEJvdXJuZS1jb21wYXRpYmxlIGxvZ2luIHNoZWxscy4KKworaWYgWyAtZiB+Ly5iYXNocmMgXTsgdGhlbgorICAuIH4vLmJhc2hyYworZmkKKworIyBwYXRoIHNldCBieSAvZXRjL3Byb2ZpbGUKKyMgZXhwb3J0IFBBVEgKKworbWVzZyBuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGVsbHMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGVsbHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y2Mzk4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoZWxscwpAQCAtMCwwICsxLDIgQEAKKyMgL2V0Yy9zaGVsbHM6IHZhbGlkIGxvZ2luIHNoZWxscworL2Jpbi9zaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvdXNiZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3VzYmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3VzYmQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzXzMuMC4xNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzXzMuMC4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmZTcyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXNfMy4wLjE0LmJiCkBAIC0wLDAgKzEsMTc4IEBACitTVU1NQVJZID0gIk1pc2NlbGxhbmVvdXMgZmlsZXMgZm9yIHRoZSBiYXNlIHN5c3RlbSIKK0RFU0NSSVBUSU9OID0gIlRoZSBiYXNlLWZpbGVzIHBhY2thZ2UgY3JlYXRlcyB0aGUgYmFzaWMgc3lzdGVtIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgYW5kIHByb3ZpZGVzIGEgc21hbGwgc2V0IG9mIGtleSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB0aGUgc3lzdGVtLiIKK1NFQ1RJT04gPSAiYmFzZSIKK1BSID0gInI4OSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9saWNlbnNlcy9HUEwtMjttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisjIFJlbW92ZWQgYWxsIGxpY2Vuc2UgcmVsYXRlZCB0YXNrcyBpbiB0aGlzIHJlY2lwZSBhcyBsaWNlbnNlLmJiY2xhc3MgCisjIG5vdyBkZWFscyB3aXRoIHRoaXMuIEluIG9yZGVyIHRvIGdldCBhY2N1cmF0ZSBsaWNlbnNpbmcgb24gdG8gdGhlIGltYWdlOgorIyBTZXQgQ09QWV9MSUNfTUFOSUZFU1QgdG8ganVzdCBjb3B5IGp1c3QgdGhlIGxpY2Vuc2UubWFuaWZlc3QgdG8gdGhlIGltYWdlCisjIEZvciB0aGUgbWFuaWZlc3QgYW5kIHRoZSBsaWNlbnNlIHRleHQgZm9yIGVhY2ggcGFja2FnZToKKyMgU2V0IENPUFlfTElDX01BTklGRVNUIGFuZCBDT1BZX0xJQ19ESVJTCisKK1NSQ19VUkkgPSAiZmlsZTovL3JvdGF0aW9uIFwKKyAgICAgICAgICAgZmlsZTovL25zc3dpdGNoLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vbW90ZCBcCisgICAgICAgICAgIGZpbGU6Ly9pbnB1dHJjIFwKKyAgICAgICAgICAgZmlsZTovL2hvc3QuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9wcm9maWxlIFwKKyAgICAgICAgICAgZmlsZTovL3NoZWxscyBcCisgICAgICAgICAgIGZpbGU6Ly9mc3RhYiBcCisgICAgICAgICAgIGZpbGU6Ly9maWxlc3lzdGVtcyBcCisgICAgICAgICAgIGZpbGU6Ly9pc3N1ZS5uZXQgXAorICAgICAgICAgICBmaWxlOi8vaXNzdWUgXAorICAgICAgICAgICBmaWxlOi8vdXNiZCBcCisgICAgICAgICAgIGZpbGU6Ly9zaGFyZS9kb3QuYmFzaHJjIFwKKyAgICAgICAgICAgZmlsZTovL3NoYXJlL2RvdC5wcm9maWxlIFwKKyAgICAgICAgICAgZmlsZTovL2xpY2Vuc2VzL0dQTC0yIFwKKyAgICAgICAgICAgIgorUyA9ICIke1dPUktESVJ9IgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitkb2NkaXJfYXBwZW5kID0gIi8ke1B9IgorZGlyczE3NzcgPSAiL3RtcCAke2xvY2Fsc3RhdGVkaXJ9L3ZvbGF0aWxlL3RtcCIKK2RpcnMyNzc1ID0gIiIKK2RpcnM3NTUgPSAiL2JpbiAvYm9vdCAvZGV2ICR7c3lzY29uZmRpcn0gJHtzeXNjb25mZGlyfS9kZWZhdWx0IFwKKyAgICAgICAgICAgJHtzeXNjb25mZGlyfS9za2VsIC9saWIgL21udCAvcHJvYyAke1JPT1RfSE9NRX0gL3J1biAvc2JpbiBcCisgICAgICAgICAgICR7cHJlZml4fSAke2JpbmRpcn0gJHtkb2NkaXJ9IC91c3IvZ2FtZXMgJHtpbmNsdWRlZGlyfSBcCisgICAgICAgICAgICR7bGliZGlyfSAke3NiaW5kaXJ9ICR7ZGF0YWRpcn0gXAorICAgICAgICAgICAke2RhdGFkaXJ9L2NvbW1vbi1saWNlbnNlcyAke2RhdGFkaXJ9L2RpY3QgJHtpbmZvZGlyfSBcCisgICAgICAgICAgICR7bWFuZGlyfSAke2RhdGFkaXJ9L21pc2MgJHtsb2NhbHN0YXRlZGlyfSBcCisgICAgICAgICAgICR7bG9jYWxzdGF0ZWRpcn0vYmFja3VwcyAke2xvY2Fsc3RhdGVkaXJ9L2xpYiBcCisgICAgICAgICAgIC9zeXMgJHtsb2NhbHN0YXRlZGlyfS9saWIvbWlzYyAke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sIFwKKyAgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfS92b2xhdGlsZSBcCisgICAgICAgICAgICR7bG9jYWxzdGF0ZWRpcn0vdm9sYXRpbGUvbG9nIFwKKyAgICAgICAgICAgL2hvbWUgJHtwcmVmaXh9L3NyYyAke2xvY2Fsc3RhdGVkaXJ9L2xvY2FsIFwKKyAgICAgICAgICAgL21lZGlhIgorCitkaXJzNzU1LWxzYiA9ICIvc3J2ICBcCisgICAgICAgICAgICAgICAke3ByZWZpeH0vbG9jYWwgJHtwcmVmaXh9L2xvY2FsL2JpbiAke3ByZWZpeH0vbG9jYWwvZ2FtZXMgXAorICAgICAgICAgICAgICAgJHtwcmVmaXh9L2xvY2FsL2luY2x1ZGUgJHtwcmVmaXh9L2xvY2FsL2xpYiAke3ByZWZpeH0vbG9jYWwvc2JpbiBcCisgICAgICAgICAgICAgICAke3ByZWZpeH0vbG9jYWwvc2hhcmUgJHtwcmVmaXh9L2xvY2FsL3NyYyBcCisgICAgICAgICAgICAgICAke3ByZWZpeH0vbGliL2xvY2FsZSIKK2RpcnMyNzc1LWxzYiA9ICIvdmFyL21haWwiCisKK3ZvbGF0aWxlcyA9ICJsb2cgdG1wIgorY29uZmZpbGVzID0gIiR7c3lzY29uZmRpcn0vZGViaWFuX3ZlcnNpb24gJHtzeXNjb25mZGlyfS9ob3N0LmNvbmYgXAorICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vaW5wdXRyYyAke3N5c2NvbmZkaXJ9L2lzc3VlIC8ke3N5c2NvbmZkaXJ9L2lzc3VlLm5ldCBcCisgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9uc3N3aXRjaC5jb25mICR7c3lzY29uZmRpcn0vcHJvZmlsZSBcCisgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9kZWZhdWx0IgorCisjIEJ5IGRlZmF1bHQgdGhlIGhvc3RuYW1lIGlzIHRoZSBtYWNoaW5lIG5hbWUuIElmIHRoZSBob3N0bmFtZSBpcyB1bnNldCB0aGVuIGEKKyMgL2V0Yy9ob3N0bmFtZSBmaWxlIGlzbid0IHdyaXR0ZW4sIHN1aXRhYmxlIGZvciBlbnZpcm9ubWVudHMgd2l0aCBkeW5hbWljCisjIGhvc3RuYW1lcy4KKyMKKyMgVGhlIGhvc3RuYW1lIGNhbiBiZSBjaGFuZ2VkIG91dHNpZGUgb2YgdGhpcyByZWNpcGUgYnkgdXNpbmcKKyMgaG9zdG5hbWVfcG4tYmFzZS1maWxlcyA9ICJteS1ob3N0LW5hbWUiLgoraG9zdG5hbWUgPSAiJHtNQUNISU5FfSIKKworQkFTRUZJTEVTSVNTVUVJTlNUQUxMID89ICJkb19pbnN0YWxsX2Jhc2VmaWxlc2lzc3VlIgorCisjIEluIHByZXZpb3VzIHZlcnNpb25zIG9mIGJhc2UtZmlsZXMsIC9ydW4gd2FzIGEgc29mdGxpbmsgdG8gL3Zhci9ydW4gYW5kIHRoZQorIyBkaXJlY3Rvcnkgd2FzIGxvY2F0ZWQgaW4gL3Zhci92b2xhdGxpZS9ydW4uICBBbHNvLCAvdmFyL2xvY2sgd2FzIGEgc29mdGxpbmsKKyMgdG8gL3Zhci92b2xhdGlsZS9sb2NrIHdoaWNoIGlzIHdoZXJlIHRoZSByZWFsIGRpcmVjdG9yeSB3YXMgbG9jYXRlZC4gIE5vdywKKyMgL3J1biBhbmQgL3J1bi9sb2NrIGFyZSB0aGUgcmVhbCBkaXJlY3Rvcmllcy4gIElmIHdlIGFyZSB1cGdyYWRpbmcsIHdlIG1heQorIyBuZWVkIHRvIHJlbW92ZSB0aGUgc3ltYm9saWMgbGlua3MgZmlyc3QgYmVmb3JlIHdlIGNyZWF0ZSB0aGUgZGlyZWN0b3JpZXMuCisjIE90aGVyd2lzZSB0aGUgZGlyZWN0b3J5IGNyZWF0aW9uIHdpbGwgZmFpbCBhbmQgd2Ugd2lsbCBoYXZlIGNpcmN1bGFyIHN5bWJvbGljCisjIGxpbmtzLgorIyAKK3BrZ19wcmVpbnN0XyR7UE59ICgpIHsKKyAgICAjIS9iaW4vc2ggLWUKKyAgICBpZiBbIHgiJEQiID0gIngiIF07IHRoZW4KKyAgICAgICAgaWYgWyAtaCAiL3Zhci9sb2NrIiBdOyB0aGVuCisgICAgICAgICAgICAjIFJlbW92ZSB0aGUgc3ltYm9saWMgbGluaworICAgICAgICAgICAgcm0gLWYgL3Zhci9sb2NrCisgICAgICAgIGZpCisKKyAgICAgICAgaWYgWyAtaCAiL3J1biIgXTsgdGhlbgorICAgICAgICAgICAgIyBSZW1vdmUgdGhlIHN5bWJvbGljIGxpbmsKKyAgICAgICAgICAgIHJtIC1mIC9ydW4KKyAgICAgICAgZmkKKyAgICBmaSAgICAgCit9CisKK2RvX2luc3RhbGwgKCkgeworCWZvciBkIGluICR7ZGlyczc1NX07IGRvCisJCWluc3RhbGwgLW0gMDc1NSAtZCAke0R9JGQKKwlkb25lCisJZm9yIGQgaW4gJHtkaXJzMTc3N307IGRvCisJCWluc3RhbGwgLW0gMTc3NyAtZCAke0R9JGQKKwlkb25lCisJZm9yIGQgaW4gJHtkaXJzMjc3NX07IGRvCisJCWluc3RhbGwgLW0gMjc3NSAtZCAke0R9JGQKKwlkb25lCisJZm9yIGQgaW4gJHt2b2xhdGlsZXN9OyBkbworCQlsbiAtc2Ygdm9sYXRpbGUvJGQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vJGQKKwlkb25lCisKKwlsbiAtc25mIC4uL3J1biAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4KKwlsbiAtc25mIC4uL3J1bi9sb2NrICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xvY2sKKworCSR7QkFTRUZJTEVTSVNTVUVJTlNUQUxMfQorCisJcm90YXRpb249YGNhdCAke1dPUktESVJ9L3JvdGF0aW9uYAorCWlmIFsgIiRyb3RhdGlvbiIgIT0gIjAiIF07IHRoZW4KKyAJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3JvdGF0aW9uICR7RH0ke3N5c2NvbmZkaXJ9L3JvdGF0aW9uCisJZmkKKworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2ZzdGFiICR7RH0ke3N5c2NvbmZkaXJ9L2ZzdGFiCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZmlsZXN5c3RlbXMgJHtEfSR7c3lzY29uZmRpcn0vZmlsZXN5c3RlbXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS91c2JkICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdXNiZAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Byb2ZpbGUgJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZQorCXNlZCAtaSAncyNST09USE9NRSMke1JPT1RfSE9NRX0jJyAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2hlbGxzICR7RH0ke3N5c2NvbmZkaXJ9L3NoZWxscworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3NoYXJlL2RvdC5wcm9maWxlICR7RH0ke3N5c2NvbmZkaXJ9L3NrZWwvLnByb2ZpbGUKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9zaGFyZS9kb3QuYmFzaHJjICR7RH0ke3N5c2NvbmZkaXJ9L3NrZWwvLmJhc2hyYworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2lucHV0cmMgJHtEfSR7c3lzY29uZmRpcn0vaW5wdXRyYworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L25zc3dpdGNoLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vbnNzd2l0Y2guY29uZgorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2hvc3QuY29uZiAke0R9JHtzeXNjb25mZGlyfS9ob3N0LmNvbmYKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9tb3RkICR7RH0ke3N5c2NvbmZkaXJ9L21vdGQKKworCWlmIFsgIi91c3IvYmluIiAhPSAiJHtiaW5kaXJ9IiBdOyB0aGVuCisJCXNlZCAtaSAicywvdXNyL2Jpbi9yZXNpemUsJHtiaW5kaXJ9L3Jlc2l6ZSwiICR7RH0ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUKKwlmaQorCisJbG4gLXNmIC9wcm9jL21vdW50cyAke0R9JHtzeXNjb25mZGlyfS9tdGFiCit9CisKK0RJU1RST19WRVJTSU9OW3ZhcmRlcHNleGNsdWRlXSArPSAiREFURSIKK2RvX2luc3RhbGxfYmFzZWZpbGVzaXNzdWUgKCkgeworCWlmIFsgIiR7aG9zdG5hbWV9IiBdOyB0aGVuCisJCWVjaG8gJHtob3N0bmFtZX0gPiAke0R9JHtzeXNjb25mZGlyfS9ob3N0bmFtZQorCWZpCisKKwlpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L2lzc3VlKiAgJHtEfSR7c3lzY29uZmRpcn0KKyAgICAgICAgaWYgWyAtbiAiJHtESVNUUk9fTkFNRX0iIF07IHRoZW4KKwkJcHJpbnRmICIke0RJU1RST19OQU1FfSAiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlCisJCXByaW50ZiAiJHtESVNUUk9fTkFNRX0gIiA+PiAke0R9JHtzeXNjb25mZGlyfS9pc3N1ZS5uZXQKKwkJaWYgWyAtbiAiJHtESVNUUk9fVkVSU0lPTn0iIF07IHRoZW4KKwkJCXByaW50ZiAiJHtESVNUUk9fVkVSU0lPTn0gIiA+PiAke0R9JHtzeXNjb25mZGlyfS9pc3N1ZQorCQkJcHJpbnRmICIke0RJU1RST19WRVJTSU9OfSAiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlLm5ldAorCQlmaQorCQlwcmludGYgIlxcXG4gXFxcbFxuIiA+PiAke0R9JHtzeXNjb25mZGlyfS9pc3N1ZQorCQllY2hvID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlCisJCWVjaG8gIiVoIiAgICA+PiAke0R9JHtzeXNjb25mZGlyfS9pc3N1ZS5uZXQKKwkJZWNobyA+PiAke0R9JHtzeXNjb25mZGlyfS9pc3N1ZS5uZXQKKyAJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmRfbGludXhzdGRiYXNlKCkgeworCWZvciBkIGluICR7ZGlyczc1NS1sc2J9OyBkbworICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gMDc1NSAtZCAke0R9JGQKKyAgICAgICAgZG9uZQorCisJZm9yIGQgaW4gJHtkaXJzMjc3NS1sc2J9OyBkbworICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gMjc3NSAtZCAke0R9JGQKKyAgICAgICAgZG9uZQorfQorCitQQUNLQUdFUyA9ICIke1BOfS1kb2MgJHtQTn0gJHtQTn0tZGV2ICR7UE59LWRiZyIKK0ZJTEVTXyR7UE59ID0gIi8iCitGSUxFU18ke1BOfS1kb2MgPSAiJHtkb2NkaXJ9ICR7ZGF0YWRpcn0vY29tbW9uLWxpY2Vuc2VzIgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9mc3RhYiAke0BbJycsICcke3N5c2NvbmZkaXJ9L2hvc3RuYW1lJ11bKGQuZ2V0VmFyKCdob3N0bmFtZScsIFRydWUpICE9ICcnKV19ICR7c3lzY29uZmRpcn0vc2hlbGxzIgorQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L21vdGQgJHtzeXNjb25mZGlyfS9uc3N3aXRjaC5jb25mICR7c3lzY29uZmRpcn0vcHJvZmlsZSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9hZGRfc2h1dGRvd24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL2FkZF9zaHV0ZG93bi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjM1N2Q4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9hZGRfc2h1dGRvd24ucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorCitXZSBuZWVkIHRvIGhhdmUgYSBzaHV0ZG93biBncm91cCB0byBhbGxvdyB0aGUgc2h1dGRvd24gaWNvbgordG8gd29yayBjb3JyZWN0bHkuIEFueSB1c2VycyB0aGF0IHdhbnQgdG8gdXNlIHNodXRkb3duIGxpa2UKK3RoZSB4dXNlciBzaG91bGQgYmUgYWRkZWQgdG8gdGhpcyBncm91cC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtFbWJlZGRlZF0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorSW5kZXg6IGJhc2UtcGFzc3dkLTMuNS4yNi9ncm91cC5tYXN0ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBiYXNlLXBhc3N3ZC0zLjUuMjYub3JpZy9ncm91cC5tYXN0ZXIKKysrKyBiYXNlLXBhc3N3ZC0zLjUuMjYvZ3JvdXAubWFzdGVyCitAQCAtMzYsNSArMzYsNiBAQCBzYXNsOio6NDU6CisgcGx1Z2RldjoqOjQ2OgorIHN0YWZmOio6NTA6CisgZ2FtZXM6Kjo2MDoKKytzaHV0ZG93bjoqOjcwOgorIHVzZXJzOio6MTAwOgorIG5vZ3JvdXA6Kjo2NTUzNDoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2QvZGlzYWJsZS1kb2NzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9kaXNhYmxlLWRvY3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjMDhiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2QvZGlzYWJsZS1kb2NzLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0Rpc2FibGUgZG9jdW1lbnRhdGlvbiBmb3Igbm93IGFzIGl0IHVzZXMgdG9vbHMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQKK2J5IE9FLUNvcmUuIEl0IHVzZXMgc2dtbHRvb2xzIGFuZCBwbzRhLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLUNvcmUgc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBiYXNlLXBhc3N3ZC0zLjUuMjgvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBiYXNlLXBhc3N3ZC0zLjUuMjgub3JpZy9NYWtlZmlsZS5pbgorKysrIGJhc2UtcGFzc3dkLTMuNS4yOC9NYWtlZmlsZS5pbgorQEAgLTI1LDEzICsyNSwxMCBAQCBnZW5fY29uZmlndXJlCT0gY29uZmlnLmNhY2hlIGNvbmZpZy5zdGF0CisgCQkgIGNvbmZkZWZocy5oIGNvbmZpZy5oIE1ha2VmaWxlCisgCisgYWxsOiB1cGRhdGUtcGFzc3dkCistCSQoTUFLRSkgLUMgZG9jIGFsbAorLQkkKE1BS0UpIC1DIG1hbiBhbGwKKyAKKyBpbnN0YWxsOiBhbGwKKyAJbWtkaXIgLXAgJChERVNURElSKSQoc2JpbmRpcikKKyAJJChJTlNUQUxMKSB1cGRhdGUtcGFzc3dkICQoREVTVERJUikkKHNiaW5kaXIpLworLQkkKE1BS0UpIC1DIG1hbiBpbnN0YWxsCisgCisgdXBkYXRlLXBhc3N3ZC5vOiB2ZXJzaW9uLmgKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2QvaW5wdXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL2lucHV0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYmJjYWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL2lucHV0LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK0FkZCBhbiBpbnB1dCBncm91cCBmb3IgdGhlIC9kZXYvaW5wdXQvKiBkZXZpY2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorCistLS0KKyBncm91cC5tYXN0ZXIgfCAgICAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworSW5kZXg6IGJhc2UtcGFzc3dkLTMuNS4yNi9ncm91cC5tYXN0ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBiYXNlLXBhc3N3ZC0zLjUuMjYub3JpZy9ncm91cC5tYXN0ZXIKKysrKyBiYXNlLXBhc3N3ZC0zLjUuMjYvZ3JvdXAubWFzdGVyCitAQCAtMTIsNiArMTIsNyBAQCB1dWNwOio6MTA6CisgbWFuOio6MTI6CisgcHJveHk6KjoxMzoKKyBrbWVtOio6MTU6CisraW5wdXQ6KjoxOToKKyBkaWFsb3V0Oio6MjA6CisgZmF4Oio6MjE6Cisgdm9pY2U6KjoyMjoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2Qvbm9iYXNoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9ub2Jhc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVhNjkyMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2Qvbm9iYXNoLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK3VzZSAvYmluL3NoIGluc3RlYWQgb2YgL2Jpbi9iYXNoLCBzaW5jZSB0aGUgbGF0dGVyIG1heSBub3QgYmUgaW5jbHVkZWQgaW4KK3NvbWUgaW1hZ2VzIHN1Y2ggYXMgbWluaW1hbAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gYmFzZS1wYXNzd2QvcGFzc3dkLm1hc3Rlcn5ub2Jhc2gKKysrKyBiYXNlLXBhc3N3ZC9wYXNzd2QubWFzdGVyCitAQCAtMSw0ICsxLDQgQEAKKy1yb290Oio6MDowOnJvb3Q6L3Jvb3Q6L2Jpbi9iYXNoCisrcm9vdDoqOjA6MDpyb290Oi9yb290Oi9iaW4vc2gKKyBkYWVtb246KjoxOjE6ZGFlbW9uOi91c3Ivc2JpbjovYmluL3NoCisgYmluOio6MjoyOmJpbjovYmluOi9iaW4vc2gKKyBzeXM6KjozOjM6c3lzOi9kZXY6L2Jpbi9zaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9ub3NoYWRvdy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2Qvbm9zaGFkb3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI3YmY3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2Qvbm9zaGFkb3cucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorcmVtb3ZlICIqIiBmb3Igcm9vdCBzaW5jZSB3ZSBkb24ndCBoYXZlIGEgL2V0Yy9zaGFkb3cgc28gZmFyLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gYmFzZS1wYXNzd2QvcGFzc3dkLm1hc3Rlcn5ub2Jhc2gKKysrKyBiYXNlLXBhc3N3ZC9wYXNzd2QubWFzdGVyCitAQCAtMSw0ICsxLDQgQEAKKy1yb290Oio6MDowOnJvb3Q6L3Jvb3Q6L2Jpbi9zaAorK3Jvb3Q6OjA6MDpyb290Oi9yb290Oi9iaW4vc2gKKyBkYWVtb246KjoxOjE6ZGFlbW9uOi91c3Ivc2JpbjovYmluL3NoCisgYmluOio6MjoyOmJpbjovYmluOi9iaW4vc2gKKyBzeXM6KjozOjM6c3lzOi9kZXY6L2Jpbi9zaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZF8zLjUuMjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkXzMuNS4yOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzliZDgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZF8zLjUuMjkuYmIKQEAgLTAsMCArMSwxMDQgQEAKK1NVTU1BUlkgPSAiQmFzZSBzeXN0ZW0gbWFzdGVyIHBhc3N3b3JkL2dyb3VwIGZpbGVzIgorREVTQ1JJUFRJT04gPSAiVGhlIG1hc3RlciBjb3BpZXMgb2YgdGhlIHVzZXIgZGF0YWJhc2UgZmlsZXMgKC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwKS4gIFRoZSB1cGRhdGUtcGFzc3dkIHRvb2wgaXMgYWxzbyBwcm92aWRlZCB0byBrZWVwIHRoZSBzeXN0ZW0gZGF0YWJhc2VzIHN5bmNocm9uaXplZCB3aXRoIHRoZXNlIG1hc3RlciBmaWxlcy4iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIgorCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICJWZXJzaW9uIDMuNS4zOCByZXF1aXJlcyBjZGViY29uZiBmb3IgdXBkYXRlLXBhc3N3ZCB1dGlsaXR5IgorCitTUkNfVVJJID0gImh0dHBzOi8vbGF1bmNocGFkLm5ldC9kZWJpYW4vK2FyY2hpdmUvcHJpbWFyeS8rZmlsZXMvJHtCUE59XyR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hZGRfc2h1dGRvd24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9iYXNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vc2hhZG93LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2lucHV0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtZG9jcy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmJlY2NhYzQ4MDgzZmU4YWU1MDQ4YWNkMDYyZTU0MjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjBiNjYzODhiMmM4ZTQ5YzE1NjkyNDM5ZDJiZWU2M2JjZGQ0YmJiZjdhNzgyYzdmNjRhY2NjNTU5ODZiNmEzNiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworU1NUQVRFUE9TVElOU1RGVU5DUyArPSAiYmFzZV9wYXNzd2Rfc3N0YXRlX3Bvc3RpbnN0IgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1wIC1tIDc1NSAke0J9L3VwZGF0ZS1wYXNzd2QgJHtEfSR7c2JpbmRpcn0vCisJaW5zdGFsbCAtZCAtbSA3NTUgJHtEfSR7bWFuZGlyfS9tYW44ICR7RH0ke21hbmRpcn0vcGwvbWFuOAorCWluc3RhbGwgLXAgLW0gNjQ0ICR7U30vbWFuL3VwZGF0ZS1wYXNzd2QuOCAke0R9JHttYW5kaXJ9L21hbjgvCisJaW5zdGFsbCAtcCAtbSA2NDQgJHtTfS9tYW4vdXBkYXRlLXBhc3N3ZC5wbC44IFwKKwkJJHtEfSR7bWFuZGlyfS9wbC9tYW44L3VwZGF0ZS1wYXNzd2QuOAorCWd6aXAgLTkgJHtEfSR7bWFuZGlyfS9tYW44LyogJHtEfSR7bWFuZGlyfS9wbC9tYW44LyoKKwlpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHtkYXRhZGlyfS9iYXNlLXBhc3N3ZAorCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1wIC1tIDY0NCAke1N9L3Bhc3N3ZC5tYXN0ZXIgJHtEfSR7ZGF0YWRpcn0vYmFzZS1wYXNzd2QvCisJc2VkIC1pICdzIzovcm9vdDojOiR7Uk9PVF9IT01FfTojJyAke0R9JHtkYXRhZGlyfS9iYXNlLXBhc3N3ZC9wYXNzd2QubWFzdGVyCisJaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLXAgLW0gNjQ0ICR7U30vZ3JvdXAubWFzdGVyICR7RH0ke2RhdGFkaXJ9L2Jhc2UtcGFzc3dkLworCisJaW5zdGFsbCAtZCAtbSA3NTUgJHtEfSR7ZG9jZGlyfS8ke0JQTn0KKwlpbnN0YWxsIC1wIC1tIDY0NCAke1N9L2RlYmlhbi9jaGFuZ2Vsb2cgJHtEfSR7ZG9jZGlyfS8ke0JQTn0vCisJZ3ppcCAtOSAke0R9JHtkb2NkaXJ9LyR7QlBOfS8qCisJaW5zdGFsbCAtcCAtbSA2NDQgJHtTfS9SRUFETUUgJHtEfSR7ZG9jZGlyfS8ke0JQTn0vCisJaW5zdGFsbCAtcCAtbSA2NDQgJHtTfS9kZWJpYW4vY29weXJpZ2h0ICR7RH0ke2RvY2Rpcn0vJHtCUE59LworfQorCitiYXNlX3Bhc3N3ZF9zc3RhdGVfcG9zdGluc3QoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorCXRoZW4KKwkJIyBTdGFnaW5nIGRvZXMgbm90IGNvcHkgJHtzeXNjb25mZGlyfSBmaWxlcyBpbnRvIHRoZQorCQkjIHRhcmdldCBzeXNyb290LCBzbyB3ZSBuZWVkIHRvIGRvIHNvIG1hbnVhbGx5LiBXZQorCQkjIHB1dCB0aGVzZSBmaWxlcyBpbiB0aGUgdGFyZ2V0IHN5c3Jvb3Qgc28gdGhleSBjYW4KKwkJIyBiZSB1c2VkIGJ5IHJlY2lwZXMgd2hpY2ggdXNlIGN1c3RvbSB1c2VyL2dyb3VwCisJCSMgcGVybWlzc2lvbnMuCisJCSMgSW5zdGFsbCBwYXNzd2QubWFzdGVyIGFuZCBncm91cC5tYXN0ZXIgdG8gc3lzY29uZmRpciBhbmQgbXYKKwkJIyB0aGVtIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBhdG9taWNhbGx5IGluc3RhbGwuCisJCWluc3RhbGwgLWQgLW0gNzU1ICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7c3lzY29uZmRpcn0KKwkJZm9yIGkgaW4gcGFzc3dkIGdyb3VwOyBkbworCQkJaW5zdGFsbCAtcCAtbSA2NDQgJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtkYXRhZGlyfS9iYXNlLXBhc3N3ZC8kaS5tYXN0ZXIgXAorCQkJCSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7c3lzY29uZmRpcn0vCisJCQltdiAke1NUQUdJTkdfRElSX1RBUkdFVH0ke3N5c2NvbmZkaXJ9LyRpLm1hc3RlciAke1NUQUdJTkdfRElSX1RBUkdFVH0ke3N5c2NvbmZkaXJ9LyRpCisJCWRvbmUKKwlmaQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICAjIEFkZCBpbiB0aGUgcHJlaW5zdCBmdW5jdGlvbiBmb3IgJHtQTn0KKyAgICAjIFdlIGhhdmUgdG8gZG8gdGhpcyBoZXJlIGFzIHByaW9yIHRvIHRoaXMsIHBhc3N3ZC9ncm91cC5tYXN0ZXIKKyAgICAjIHdvdWxkIGJlIHVuYXZhaWxhYmxlLiBXZSBuZWVkIHRvIGNyZWF0ZSB0aGVzZSBmaWxlcyBhdCBwcmVpbnN0CisgICAgIyB0aW1lIGJlZm9yZSB0aGUgZmlsZXMgZnJvbSB0aGUgcGFja2FnZSBtYXkgYmUgYXZhaWxhYmxlLCBoZW5jZQorICAgICMgc3RvcmluZyB0aGUgZGF0YSBmcm9tIHRoZSBmaWxlcyBpbiB0aGUgcHJlaW5zdCBkaXJlY3RseS4KKworICAgIGYgPSBvcGVuKGQuZXhwYW5kKCIke1NUQUdJTkdfREFUQURJUn0vYmFzZS1wYXNzd2QvcGFzc3dkLm1hc3RlciIpLCAncicpCisgICAgcGFzc3dkID0gIiIuam9pbihmLnJlYWRsaW5lcygpKQorICAgIGYuY2xvc2UoKQorICAgIGYgPSBvcGVuKGQuZXhwYW5kKCIke1NUQUdJTkdfREFUQURJUn0vYmFzZS1wYXNzd2QvZ3JvdXAubWFzdGVyIiksICdyJykKKyAgICBncm91cCA9ICIiLmpvaW4oZi5yZWFkbGluZXMoKSkKKyAgICBmLmNsb3NlKCkKKworICAgIHByZWluc3QgPSAiIiIjIS9iaW4vc2gKK21rZGlyIC1wICREJHtzeXNjb25mZGlyfQoraWYgWyAhIC1lICREJHtzeXNjb25mZGlyfS9wYXNzd2QgXTsgdGhlbgorXHRjYXQgPDwgJ0VPRicgPiAkRCR7c3lzY29uZmRpcn0vcGFzc3dkCisiIiIgKyBwYXNzd2QgKyAiIiJFT0YKK2ZpCitpZiBbICEgLWUgJEQke3N5c2NvbmZkaXJ9L2dyb3VwIF07IHRoZW4KK1x0Y2F0IDw8ICdFT0YnID4gJEQke3N5c2NvbmZkaXJ9L2dyb3VwCisiIiIgKyBncm91cCArICIiIkVPRgorZmkKKyIiIgorICAgIGQuc2V0VmFyKCdwa2dfcHJlaW5zdF8ke1BOfScsIHByZWluc3QpCit9CisKK2FkZHRhc2sgZG9fcGFja2FnZSBhZnRlciBkb19wb3B1bGF0ZV9zeXNyb290CisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK1BBQ0tBR0VTID0rICIke1BOfS11cGRhdGUiCitGSUxFU18ke1BOfS11cGRhdGUgPSAiJHtzYmluZGlyfS8qICR7ZGF0YWRpcn0vJHtQTn0iCisKK3BrZ19wb3N0aW5zdF8ke1BOfS11cGRhdGUgKCkgeworIyEvYmluL3NoCitpZiBbIC1uICIkRCIgXTsgdGhlbgorCWV4aXQgMAorZmkKKyR7c2JpbmRpcn0vdXBkYXRlLXBhc3N3ZAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3guaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3guaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOGY5ZmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC5pbmMKQEAgLTAsMCArMSw0MTYgQEAKK1NVTU1BUlkgPSAiVGlueSB2ZXJzaW9ucyBvZiBtYW55IGNvbW1vbiBVTklYIHV0aWxpdGllcyBpbiBhIHNpbmdsZSBzbWFsbCBleGVjdXRhYmxlIgorREVTQ1JJUFRJT04gPSAiQnVzeUJveCBjb21iaW5lcyB0aW55IHZlcnNpb25zIG9mIG1hbnkgY29tbW9uIFVOSVggdXRpbGl0aWVzIGludG8gYSBzaW5nbGUgc21hbGwgZXhlY3V0YWJsZS4gSXQgcHJvdmlkZXMgbWluaW1hbGlzdCByZXBsYWNlbWVudHMgZm9yIG1vc3Qgb2YgdGhlIHV0aWxpdGllcyB5b3UgdXN1YWxseSBmaW5kIGluIEdOVSBmaWxldXRpbHMsIHNoZWxsdXRpbHMsIGV0Yy4gVGhlIHV0aWxpdGllcyBpbiBCdXN5Qm94IGdlbmVyYWxseSBoYXZlIGZld2VyIG9wdGlvbnMgdGhhbiB0aGVpciBmdWxsLWZlYXR1cmVkIEdOVSBjb3VzaW5zOyBob3dldmVyLCB0aGUgb3B0aW9ucyB0aGF0IGFyZSBpbmNsdWRlZCBwcm92aWRlIHRoZSBleHBlY3RlZCBmdW5jdGlvbmFsaXR5IGFuZCBiZWhhdmUgdmVyeSBtdWNoIGxpa2UgdGhlaXIgR05VIGNvdW50ZXJwYXJ0cy4gQnVzeUJveCBwcm92aWRlcyBhIGZhaXJseSBjb21wbGV0ZSBQT1NJWCBlbnZpcm9ubWVudCBmb3IgYW55IHNtYWxsIG9yIGVtYmVkZGVkIHN5c3RlbS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmJ1c3lib3gubmV0IgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuYnVzeWJveC5uZXQvIgorCitERVBFTkRTICs9ICJrZXJuLXRvb2xzLW5hdGl2ZSIKKworIyBiemlwMiBhcHBsZXQgaW4gYnVzeWJveCBpcyBiYXNlZCBvbiBsaWdodGx5LW1vZGlmaWVkIGJ6aXAyIHNvdXJjZQorIyB0aGUgR1BMIGlzIHZlcnNpb24gMiBvbmx5CitMSUNFTlNFID0gIkdQTHYyICYgYnppcDIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1kZTEwZGU0ODY0MmFiNzQzMThlODkzYTYxMTA1YWZiYiIKKworU0VDVElPTiA9ICJiYXNlIgorCisjIFdoZXRoZXIgdG8gc3BsaXQgdGhlIHN1aWQgYXBwcyBpbnRvIGEgc2VwZXJhdGUgYmluYXJ5CitCVVNZQk9YX1NQTElUX1NVSUQgPz0gIjEiCisKK2V4cG9ydCBFWFRSQV9DRkxBR1MgPSAiJHtDRkxBR1N9IgorZXhwb3J0IEVYVFJBX0xERkxBR1MgPSAiJHtMREZMQUdTfSIKK2V4cG9ydCBFWFRSQV9PRU1BS0UgKz0gIidMRD0ke0NDTER9JyIKKworUEFDS0FHRVMgPSsgIiR7UE59LWh0dHBkICR7UE59LXVkaGNwZCAke1BOfS11ZGhjcGMgJHtQTn0tc3lzbG9nICR7UE59LW1kZXYgJHtQTn0taHdjbG9jayIKKworRklMRVNfJHtQTn0taHR0cGQgPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvYnVzeWJveC1odHRwZCAvc3J2L3d3dyIKK0ZJTEVTXyR7UE59LXN5c2xvZyA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9zeXNsb2cqICR7c3lzY29uZmRpcn0vc3lzbG9nLXN0YXJ0dXAuY29uZiogJHtzeXNjb25mZGlyfS9zeXNsb2cuY29uZiogJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXNsb2cuc2VydmljZSAke3N5c2NvbmZkaXJ9L2RlZmF1bHQvYnVzeWJveC1zeXNsb2ciCitGSUxFU18ke1BOfS1tZGV2ID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL21kZXYgJHtzeXNjb25mZGlyfS9tZGV2LmNvbmYgJHtzeXNjb25mZGlyfS9tZGV2LyoiCitGSUxFU18ke1BOfS11ZGhjcGQgPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvYnVzeWJveC11ZGhjcGQiCitGSUxFU18ke1BOfS11ZGhjcGMgPSAiJHtzeXNjb25mZGlyfS91ZGhjcGMuZCAke2RhdGFkaXJ9L3VkaGNwYyIKK0ZJTEVTXyR7UE59LWh3Y2xvY2sgPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvaHdjbG9jay5zaCIKKworSU5JVFNDUklQVF9QQUNLQUdFUyA9ICIke1BOfS1odHRwZCAke1BOfS1zeXNsb2cgJHtQTn0tdWRoY3BkICR7UE59LW1kZXYgJHtQTn0taHdjbG9jayIKKworSU5JVFNDUklQVF9OQU1FXyR7UE59LWh0dHBkID0gImJ1c3lib3gtaHR0cGQiCitJTklUU0NSSVBUX05BTUVfJHtQTn0taHdjbG9jayA9ICJod2Nsb2NrLnNoIgorSU5JVFNDUklQVF9OQU1FXyR7UE59LW1kZXYgPSAibWRldiIKK0lOSVRTQ1JJUFRfUEFSQU1TXyR7UE59LW1kZXYgPSAic3RhcnQgMDMgUyAuIgorSU5JVFNDUklQVF9OQU1FXyR7UE59LXN5c2xvZyA9ICJzeXNsb2ciCitJTklUU0NSSVBUX05BTUVfJHtQTn0tdWRoY3BkID0gImJ1c3lib3gtdWRoY3BkIiAKKworU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfS1zeXNsb2ciCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tc3lzbG9nID0gImJ1c3lib3gtc3lzbG9nLnNlcnZpY2UiCisKK0NPTkZGSUxFU18ke1BOfS1zeXNsb2cgPSAiJHtzeXNjb25mZGlyfS9zeXNsb2ctc3RhcnR1cC5jb25mLiR7QlBOfSIKK0NPTkZGSUxFU18ke1BOfS1tZGV2ID0gIiR7c3lzY29uZmRpcn0vbWRldi5jb25mIgorCitSUkVDT01NRU5EU18ke1BOfSA9ICIke1BOfS1zeXNsb2cgJHtQTn0tdWRoY3BjIgorCitpbmhlcml0IGNtbDEgc3lzdGVtZCB1cGRhdGUtcmMuZCBwdGVzdAorCisjIGludGVybmFsIGhlbHBlcgorZGVmIGJ1c3lib3hfY2ZnKGZlYXR1cmUsIHRva2VucywgY25mLCByZW0pOgorCWlmIHR5cGUodG9rZW5zKSA9PSB0eXBlKCIiKToKKwkJdG9rZW5zID0gW3Rva2Vuc10KKwlyZW0uZXh0ZW5kKFsnL15bIyBdKicgKyB0b2tlbiArICdbID1dL2QnIGZvciB0b2tlbiBpbiB0b2tlbnNdKQorCWlmIGZlYXR1cmU6CisJCWNuZi5leHRlbmQoW3Rva2VuICsgJz15JyBmb3IgdG9rZW4gaW4gdG9rZW5zXSkKKwllbHNlOgorCQljbmYuZXh0ZW5kKFsnIyAnICsgdG9rZW4gKyAnIGlzIG5vdCBzZXQnIGZvciB0b2tlbiBpbiB0b2tlbnNdKQorCisjIE1hcCBkaXN0cm8gZmVhdHVyZXMgdG8gY29uZmlnIHNldHRpbmdzCitkZWYgZmVhdHVyZXNfdG9fYnVzeWJveF9zZXR0aW5ncyhkKToKKwljbmYsIHJlbSA9IChbXSwgW10pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgVHJ1ZSwgRmFsc2UsIGQpLCAnQ09ORklHX0ZFQVRVUkVfSVBWNicsIGNuZiwgcmVtKQorCWJ1c3lib3hfY2ZnKGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgVHJ1ZSwgRmFsc2UsIGQpLCAnQ09ORklHX0xGUycsIGNuZiwgcmVtKQorCWJ1c3lib3hfY2ZnKGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgVHJ1ZSwgRmFsc2UsIGQpLCAnQ09ORklHX0ZESVNLX1NVUFBPUlRfTEFSR0VfRElTS1MnLCBjbmYsIHJlbSkKKwlidXN5Ym94X2NmZyhiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ25scycsIFRydWUsIEZhbHNlLCBkKSwgJ0NPTkZJR19MT0NBTEVfU1VQUE9SVCcsIGNuZiwgcmVtKQorCWJ1c3lib3hfY2ZnKGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NCcsIFRydWUsIEZhbHNlLCBkKSwgJ0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQVjQnLCBjbmYsIHJlbSkKKwlidXN5Ym94X2NmZyhiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9JUFY2JywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3aWZpJywgVHJ1ZSwgRmFsc2UsIGQpLCAnQ09ORklHX1JGS0lMTCcsIGNuZiwgcmVtKQorCWJ1c3lib3hfY2ZnKGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgVHJ1ZSwgRmFsc2UsIGQpLCAnQ09ORklHX1JGS0lMTCcsIGNuZiwgcmVtKQorCXJldHVybiAiXG4iLmpvaW4oY25mKSwgIlxuIi5qb2luKHJlbSkKKworIyBYLCBZID0gJHtAZmVhdHVyZXNfdG9fdWNsaWJjX3NldHRpbmdzKGQpfQorIyB1bmZvcnR1bmF0ZWx5IGRvZXNuJ3Qgc2VlbSB0byB3b3JrIHdpdGggYml0YmFrZSwgd29ya2Fyb3VuZDoKK2RlZiBmZWF0dXJlc190b19idXN5Ym94X2NvbmYoZCk6CisJY25mLCByZW0gPSBmZWF0dXJlc190b19idXN5Ym94X3NldHRpbmdzKGQpCisJcmV0dXJuIGNuZgorZGVmIGZlYXR1cmVzX3RvX2J1c3lib3hfZGVsKGQpOgorCWNuZiwgcmVtID0gZmVhdHVyZXNfdG9fYnVzeWJveF9zZXR0aW5ncyhkKQorCXJldHVybiByZW0KKworY29uZmlnbWFuZ2xlID0gJy9DUk9TU19DT01QSUxFUl9QUkVGSVgvZDsgXAorCQkvQ09ORklHX0VYVFJBX0NGTEFHUy9kOyBcCisJCScKK09FX0ZFQVRVUkVTIDo9ICIke0BmZWF0dXJlc190b19idXN5Ym94X2NvbmYoZCl9IgorT0VfREVMICAgICAgOj0gIiR7QGZlYXR1cmVzX3RvX2J1c3lib3hfZGVsKGQpfSIKK0RPX0lQdjQgOj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NCcsIDEsIDAsIGQpfSIKK0RPX0lQdjYgOj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsIDEsIDAsIGQpfSIKKworcHl0aG9uICgpIHsKKyAgaWYgIiR7T0VfREVMfSI6CisgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLCAiJHtPRV9ERUx9IiArICJcbiIpCisgIGlmICIke09FX0ZFQVRVUkVTfSI6CisgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLAorICAgICAgICAgICAgICAgICAgICIvXiMjIyBESVNUUk8gRkVBVFVSRVMkL2FcXFxuJXNcblxuIiAlCisgICAgICAgICAgICAgICAgICAgKCJcXG4iLmpvaW4oKGQuZXhwYW5kKCIke09FX0ZFQVRVUkVTfSIpLnNwbGl0KCJcbiIpKSkpKQorICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICIvXiMjIyBDUk9TUyQvYVxcXG4lc1xuIiAlCisgICAgICAgICAgICAgICAgICAoIlxcbiIuam9pbihbIkNPTkZJR19DUk9TU19DT01QSUxFUl9QUkVGSVg9XCIke1RBUkdFVF9QUkVGSVh9XCIiLAorCQkJICAgICAgICJDT05GSUdfRVhUUkFfQ0ZMQUdTPVwiJHtDRkxBR1N9XCIgXCIke0hPU1RfQ0NfQVJDSH1cIiIKKyAgICAgICAgICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgICAgICApKQorfQorCitkb19wcmVwYXJlX2NvbmZpZyAoKSB7CisJc2VkIC1lICdzI0BEQVRBRElSQCMke2RhdGFkaXJ9I2cnIFwKKwkJPCAke1dPUktESVJ9L2RlZmNvbmZpZyA+ICR7U30vLmNvbmZpZworCXNlZCAtaSAtZSAnL0NPTkZJR19TVEFUSUMvZCcgLmNvbmZpZworCWVjaG8gIiMgQ09ORklHX1NUQVRJQyBpcyBub3Qgc2V0IiA+PiAuY29uZmlnCisJZm9yIGkgaW4gJ0NST1NTJyAnRElTVFJPIEZFQVRVUkVTJzsgZG8gZWNobyAiIyMjICRpIjsgZG9uZSA+PiBcCisJCSR7U30vLmNvbmZpZworCXNlZCAtaSAtZSAnJHtjb25maWdtYW5nbGV9JyAke1N9Ly5jb25maWcKKwlpZiB0ZXN0ICR7RE9fSVB2NH0gLWVxIDAgJiYgdGVzdCAke0RPX0lQdjZ9IC1lcSAwOyB0aGVuCisJICAjIGRpc2FibGUgbmV0d29ya2luZyBhcHBsZXRzCisJICBtdiAke1N9Ly5jb25maWcgJHtTfS8uY29uZmlnLm9lLXRtcAorCSAgYXdrICdCRUdJTntuZXQ9MH0KKwkgIC9eIyBOZXR3b3JraW5nIFV0aWxpdGllcy97bmV0PTF9CisJICAvXiMkL3tpZihuZXQpe25ldD1uZXQrMX19CisJICB7aWYobmV0PT0yJiYkMCAhfiAvXiMvJiYkMSl7cHJpbnQoIiMgIiQxIiBpcyBub3Qgc2V0Iil9ZWxzZXtwcmludH19JyBcCisJCSAgJHtTfS8uY29uZmlnLm9lLXRtcCA+ICR7U30vLmNvbmZpZworCWZpCisJc2VkIC1pICdzL0NPTkZJR19JRlVQRE9XTl9VREhDUENfQ01EX09QVElPTlM9Ii1SIC1uIi9DT05GSUdfSUZVUERPV05fVURIQ1BDX0NNRF9PUFRJT05TPSItUiAtYiIvJyAke1N9Ly5jb25maWcKK30KKworIyByZXR1cm5zIGFsbCB0aGUgZWxlbWVudHMgZnJvbSB0aGUgc3JjIHVyaSB0aGF0IGFyZSAuY2ZnIGZpbGVzCitkZWYgZmluZF9jZmdzKGQpOgorICAgIHNvdXJjZXM9c3JjX3BhdGNoZXMoZCwgVHJ1ZSkKKyAgICBzb3VyY2VzX2xpc3Q9W10KKyAgICBmb3IgcyBpbiBzb3VyY2VzOgorICAgICAgICBpZiBzLmVuZHN3aXRoKCcuY2ZnJyk6CisgICAgICAgICAgICBzb3VyY2VzX2xpc3QuYXBwZW5kKHMpCisKKyAgICByZXR1cm4gc291cmNlc19saXN0CisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJZG9fcHJlcGFyZV9jb25maWcKKwltZXJnZV9jb25maWcuc2ggLW0gLmNvbmZpZyAke0AiICIuam9pbihmaW5kX2NmZ3MoZCkpfQorCWNtbDFfZG9fY29uZmlndXJlCit9CisKK2RvX2NvbXBpbGUoKSB7CisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MKKwlpZiBbICIke0JVU1lCT1hfU1BMSVRfU1VJRH0iID0gIjEiIC1hIHhgZ3JlcCAiQ09ORklHX0ZFQVRVUkVfSU5ESVZJRFVBTD15IiAuY29uZmlnYCA9IHggXTsgdGhlbgorCSMgc3BsaXQgdGhlIC5jb25maWcgaW50byB0d28gcGFydHMsIGFuZCBtYWtlIHR3byBidXN5Ym94IGJpbmFyaWVzCisJCWNwIC5jb25maWcgLmNvbmZpZy5vcmlnCisJCW9lX3J1bm1ha2UgYnVzeWJveC5jZmcuc3VpZAorCQlvZV9ydW5tYWtlIGJ1c3lib3guY2ZnLm5vc3VpZAorCQlmb3IgaSBpbiBgY2F0IGJ1c3lib3guY2ZnLnN1aWQgYnVzeWJveC5jZmcubm9zdWlkYDsgZG8KKwkJCWVjaG8gIiMgJGkgaXMgbm90IHNldCIgPj4gLmNvbmZpZy5kaXNhYmxlLmFwcHMKKwkJZG9uZQorCQltZXJnZV9jb25maWcuc2ggLW0gLmNvbmZpZy5vcmlnIC5jb25maWcuZGlzYWJsZS5hcHBzCisJCWNwIC5jb25maWcgLmNvbmZpZy5ub25hcHBzCisJCWZvciBzIGluIHN1aWQgbm9zdWlkOyBkbworCQkJY2F0IGJ1c3lib3guY2ZnLiRzIHwgd2hpbGUgcmVhZCBpdGVtOyBkbworCQkJCWdyZXAgLXcgIiRpdGVtIiAuY29uZmlnLm9yaWcKKwkJCWRvbmUgPiAuY29uZmlnLmFwcC4kcworCQkJbWVyZ2VfY29uZmlnLnNoIC1tIC5jb25maWcubm9uYXBwcyAuY29uZmlnLmFwcC4kcworCQkJb2VfcnVubWFrZSBidXN5Ym94X3Vuc3RyaXBwZWQKKwkJCW12IGJ1c3lib3hfdW5zdHJpcHBlZCBidXN5Ym94LiRzCisJCQlvZV9ydW5tYWtlIGJ1c3lib3gubGlua3MKKwkJCW12IGJ1c3lib3gubGlua3MgYnVzeWJveC5saW5rcy4kcworCQlkb25lCisJCSMgY29weSAuY29uZmlnLm9yaWcgYmFjayB0byAuY29uZmlnLCBiZWNhdXNlIHRoZSBpbnN0YWxsIHByb2Nlc3MgbWF5IGNoZWNrIHRoaXMgZmlsZQorCQljcCAuY29uZmlnLm9yaWcgLmNvbmZpZworCQkjIGNsZWFudXAKKwkJcm0gLmNvbmZpZy5vcmlnIC5jb25maWcuYXBwLnN1aWQgLmNvbmZpZy5hcHAubm9zdWlkIC5jb25maWcuZGlzYWJsZS5hcHBzIC5jb25maWcubm9uYXBwcworCWVsc2UKKwkJb2VfcnVubWFrZSBidXN5Ym94X3Vuc3RyaXBwZWQKKwkJY3AgYnVzeWJveF91bnN0cmlwcGVkIGJ1c3lib3gKKwkJb2VfcnVubWFrZSBidXN5Ym94LmxpbmtzCisJZmkKK30KKworZG9faW5zdGFsbCAoKSB7CisJaWYgWyAiJHtwcmVmaXh9IiAhPSAiL3VzciIgXTsgdGhlbgorCQlzZWQgLWkgInM6Xi91c3IvOiR7cHJlZml4fS86IiBidXN5Ym94LmxpbmtzKgorCWZpCisJaWYgWyAiJHtiYXNlX3NiaW5kaXJ9IiAhPSAiL3NiaW4iIF07IHRoZW4KKwkJc2VkIC1pICJzOl4vc2Jpbi86JHtiYXNlX3NiaW5kaXJ9LzoiIGJ1c3lib3gubGlua3MqCisJZmkKKwlpZiBbICIke2Jhc2VfYmluZGlyfSIgIT0gIi9iaW4iIF07IHRoZW4KKwkJc2VkIC1pICJzOl4vYmluLzoke2Jhc2VfYmluZGlyfS86IiBidXN5Ym94LmxpbmtzKgorCWZpCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCisJaWYgISBncmVwIC1xICJDT05GSUdfRkVBVFVSRV9JTkRJVklEVUFMPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQkjIEluc3RhbGwgL2Jpbi9idXN5Ym94LCBhbmQgdGhlIC9iaW4vc2ggbGluayBzbyB0aGUgcG9zdGluc3Qgc2NyaXB0CisJCSMgY2FuIHJ1bi4gTGV0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMgaGFuZGxlIHRoZSByZXN0LgorCQlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCQlpZiBbICIke0JVU1lCT1hfU1BMSVRfU1VJRH0iID0gIjEiIF07IHRoZW4KKwkJCWluc3RhbGwgLW0gNDc1NSAke0J9L2J1c3lib3guc3VpZCAke0R9JHtiYXNlX2JpbmRpcn0KKwkJCWluc3RhbGwgLW0gMDc1NSAke0J9L2J1c3lib3gubm9zdWlkICR7RH0ke2Jhc2VfYmluZGlyfQorCQkJaW5zdGFsbCAtbSAwNjQ0ICR7U30vYnVzeWJveC5saW5rcy5zdWlkICR7RH0ke3N5c2NvbmZkaXJ9CisJCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9idXN5Ym94LmxpbmtzLm5vc3VpZCAke0R9JHtzeXNjb25mZGlyfQorCQkJaWYgZ3JlcCAtcSAiQ09ORklHX0ZFQVRVUkVfU0hfSVNfQVNIPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQkJCWxuIC1zZiBidXN5Ym94Lm5vc3VpZCAke0R9JHtiYXNlX2JpbmRpcn0vc2gKKwkJCWZpCisJCQkjIEtlZXAgYSBkZWZhdWx0IGJ1c3lib3ggZm9yIHBlb3BsZSB3aG8gd2FudCB0byBpbnZva2UgYnVzeWJveCBkaXJlY3RseS4KKwkJCSMgVGhpcyBpcyBhbHNvIHVzZWZ1bCBmb3IgdGhlIG9uIGRldmljZSB1cGdyYWRlLiBCZWNhdXNlIHdlIHdhbnQKKwkJCSMgdG8gdXNlIHRoZSBidXN5Ym94IGNvbW1hbmQgaW4gcG9zdGluc3QuCisJCQlsbiAtc2YgYnVzeWJveC5ub3N1aWQgJHtEfSR7YmFzZV9iaW5kaXJ9L2J1c3lib3gKKwkJZWxzZQorCQkJaWYgZ3JlcCAtcSAiQ09ORklHX0ZFQVRVUkVfU1VJRD15IiAke0J9Ly5jb25maWc7IHRoZW4KKwkJCQlpbnN0YWxsIC1tIDQ3NTUgJHtCfS9idXN5Ym94ICR7RH0ke2Jhc2VfYmluZGlyfQorCQkJZWxzZQorCQkJCWluc3RhbGwgLW0gMDc1NSAke0J9L2J1c3lib3ggJHtEfSR7YmFzZV9iaW5kaXJ9CisJCQlmaQorCQkJaW5zdGFsbCAtbSAwNjQ0ICR7U30vYnVzeWJveC5saW5rcyAke0R9JHtzeXNjb25mZGlyfQorCQkJaWYgZ3JlcCAtcSAiQ09ORklHX0ZFQVRVUkVfU0hfSVNfQVNIPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQkJCWxuIC1zZiBidXN5Ym94ICR7RH0ke2Jhc2VfYmluZGlyfS9zaAorCQkJZmkKKwkJCSMgV2UgbWFrZSB0aGlzIHN5bWxpbmsgaGVyZSB0byBlbGltaW5hdGUgdGhlIGVycm9yIHdoZW4gdXBncmFkaW5nIHRvZ2V0aGVyCisJCQkjIHdpdGggYnVzeWJveC1zeXNsb2cuIFdpdGhvdXQgdGhpcyBzeW1saW5rLCB0aGUgb3BrZyBtYXkgdGhpbmsgb2YgdGhlCisJCQkjIGJ1c3lib3gubm9zdWlkIGFzIG9ic29sZXRlIGFuZCByZW1vdmUgaXQsIHJlc3VsdGluZyBpbiBkZWFkIGxpbmtzIGxpa2UKKwkJCSMgL2Jpbi9zZWQgLT4gL2Jpbi9idXN5Ym94Lm5vc3VpZC4gVGhpcyB3aWxsIG1ha2UgdXBncmFkaW5nIGJ1c3lib3gtc3lzbG9nIGZhaWwuCisJCQkjIFRoaXMgc3ltbGluayB3aWxsIGJlIHNhZmVseSBkZWxldGVkIGluIHBvc3RpbnN0LCB0aHVzIG5vIG5lZ2F0aXZlIGVmZmVjdC4KKwkJCWxuIC1zZiBidXN5Ym94ICR7RH0ke2Jhc2VfYmluZGlyfS9idXN5Ym94Lm5vc3VpZAorCQlmaQorCWVsc2UKKwkJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0gJHtEfSR7YmFzZV9zYmluZGlyfQorCQlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0gJHtEfSR7YmluZGlyfSAke0R9JHtzYmluZGlyfQorCQljYXQgYnVzeWJveC5saW5rcyB8IHdoaWxlIHJlYWQgRklMRTsgZG8KKwkJCU5BTUU9YGJhc2VuYW1lICIkRklMRSJgCisJCQlpbnN0YWxsIC1tIDA3NTUgIjBfbGliLyROQU1FIiAiJHtEfSRGSUxFLiR7QlBOfSIKKwkJZG9uZQorCQkjIGFkZCBzdWlkIGJpdCB3aGVyZSBuZWVkZWQKKwkJZm9yIGkgaW4gYGdyZXAgLUUgIkFQUExFVC4qQkJfU1VJRF8oKE1BWUJFfFJFUVVJUkUpKSIgaW5jbHVkZS9hcHBsZXRzLmggfCBncmVwIC12IF9CQl9TVUlEX0RST1AgfCBjdXQgLWYgMyAtZCAnKCcgfCBjdXQgLWYgMSAtZCAnLCdgOyBkbworCQkJZmluZCAke0R9IC1uYW1lICRpLiR7QlBOfSAtZXhlYyBjaG1vZCBhK3Mge30gXDsKKwkJZG9uZQorCQlpbnN0YWxsIC1tIDA3NTUgMF9saWIvbGliYnVzeWJveC5zby4ke1BWfSAke0R9JHtsaWJkaXJ9L2xpYmJ1c3lib3guc28uJHtQVn0KKwkJbG4gLXNmIHNoLiR7QlBOfSAke0R9JHtiYXNlX2JpbmRpcn0vc2gKKwkJbG4gLXNmIGxuLiR7QlBOfSAke0R9JHtiYXNlX2JpbmRpcn0vbG4KKwkJbG4gLXNmIHRlc3QuJHtCUE59ICR7RH0ke2JpbmRpcn0vdGVzdAorCQlpZiBbIC1mICR7RH0vbGludXhyYy4ke0JQTn0gXTsgdGhlbgorCQkJbXYgJHtEfS9saW51eHJjLiR7QlBOfSAke0R9L2xpbnV4cmMKKwkJZmkKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7U30vYnVzeWJveC5saW5rcyAke0R9JHtzeXNjb25mZGlyfQorCWZpCisKKwlpZiBncmVwIC1xICJDT05GSUdfU1lTTE9HRD15IiAke0J9Ly5jb25maWc7IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vc3lzbG9nICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9zeXNsb2cuJHtCUE59CisJCWluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vc3lzbG9nLXN0YXJ0dXAuY29uZiAke0R9JHtzeXNjb25mZGlyfS9zeXNsb2ctc3RhcnR1cC5jb25mLiR7QlBOfQorCQlpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L3N5c2xvZy5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2xvZy5jb25mLiR7QlBOfQorCWZpCisJaWYgZ3JlcCAiQ09ORklHX0NST05EPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9idXN5Ym94LWNyb24gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWZpCisJaWYgZ3JlcCAiQ09ORklHX0hUVFBEPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9idXN5Ym94LWh0dHBkICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwkJaW5zdGFsbCAtZCAke0R9L3Nydi93d3cKKwlmaQorCWlmIGdyZXAgIkNPTkZJR19VREhDUEQ9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2J1c3lib3gtdWRoY3BkICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlmaQorCWlmIGdyZXAgIkNPTkZJR19IV0NMT0NLPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9od2Nsb2NrLnNoICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlmaQorCWlmIGdyZXAgIkNPTkZJR19VREhDUEM9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdWRoY3BjLmQKKwkJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS91ZGhjcGMKKyAgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9zaW1wbGUuc2NyaXB0ICR7RH0ke3N5c2NvbmZkaXJ9L3VkaGNwYy5kLzUwZGVmYXVsdAorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9kZWZhdWx0LnNjcmlwdCAke0R9JHtkYXRhZGlyfS91ZGhjcGMvZGVmYXVsdC5zY3JpcHQKKwlmaQorCWlmIGdyZXAgIkNPTkZJR19JTkVURD15IiAke0J9Ly5jb25maWc7IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5ldGQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2luZXRkLiR7QlBOfQorCQlzZWQgLWkgInM6L3Vzci9zYmluLzoke3NiaW5kaXJ9LzoiICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9pbmV0ZC4ke0JQTn0KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaW5ldGQuY29uZiAke0R9JHtzeXNjb25mZGlyfS8KKwlmaQorICAgICAgICBpZiBncmVwICJDT05GSUdfTURFVj15IiAke0J9Ly5jb25maWc7IHRoZW4KKyAgICAgICAgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L21kZXYgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL21kZXYKKyAgICAgICAgICAgICAgIGlmIGdyZXAgIkNPTkZJR19GRUFUVVJFX01ERVZfQ09ORj15IiAke0J9Ly5jb25maWc7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9tZGV2LmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vbWRldi5jb25mCisgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbWRldgorICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9maW5kLXRvdWNoc2NyZWVuLnNoICR7RH0ke3N5c2NvbmZkaXJ9L21kZXYKKyAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbWRldi1tb3VudC5zaCAke0R9JHtzeXNjb25mZGlyfS9tZGV2CisgICAgICAgICAgICAgICBmaQorCWZpCisKKyAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisgICAgICAgIGlmIGdyZXAgLXEgIkNPTkZJR19TWVNMT0dEPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgICAgICAgICAgc2VkICdzLEBiYXNlX3NiaW5kaXJALCR7YmFzZV9zYmluZGlyfSxnJyA8ICR7V09SS0RJUn0vYnVzeWJveC1zeXNsb2cuc2VydmljZS5pbiBcCisJCT4gJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vYnVzeWJveC1zeXNsb2cuc2VydmljZQorICAgICAgICAgICAgaWYgWyAtZiAke1dPUktESVJ9L2J1c3lib3gtc3lzbG9nLmRlZmF1bHQgXSA7IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2J1c3lib3gtc3lzbG9nLmRlZmF1bHQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9idXN5Ym94LXN5c2xvZworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGxuIC1zZiAvZGV2L251bGwgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzbG9nLnNlcnZpY2UKKyAgICAgICAgZmkKKyAgICAgICAgaWYgZ3JlcCAtcSAiQ09ORklHX0tMT0dEPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgICAgICAgICAgc2VkICdzLEBiYXNlX3NiaW5kaXJALCR7YmFzZV9zYmluZGlyfSxnJyA8ICR7V09SS0RJUn0vYnVzeWJveC1rbG9nZC5zZXJ2aWNlLmluIFwKKwkJPiAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9idXN5Ym94LWtsb2dkLnNlcnZpY2UKKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgIyBSZW1vdmUgdGhlIHN5c3Zpbml0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3Igc3lzdGVtZCBzeXN0ZW1zIHRvIGF2b2lkIGNvbmZ1c2lvbgorICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAnZmFsc2UnLCAndHJ1ZScsIGQpfTsgdGhlbgorCXJtIC1mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2xvZy1zdGFydHVwLmNvbmYuJHtCUE59CisgICAgZmkKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjUwIgorCitBTFRFUk5BVElWRV8ke1BOfS1zeXNsb2cgKz0gInN5c2xvZy1jb25mIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N5c2xvZy1jb25mXSA9ICIke3N5c2NvbmZkaXJ9L3N5c2xvZy5jb25mIgorCitweXRob24gKCkgeworICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgZC5hcHBlbmRWYXIoJ0FMVEVSTkFUSVZFXyVzLXN5c2xvZycgJSAocG4pLCAnIHN5c2xvZy1pbml0JykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCAnc3lzbG9nLWluaXQnLCAnJXMvaW5pdC5kL3N5c2xvZycgJSAoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSkpCisgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUJywgJ3N5c2xvZy1pbml0JywgJyVzL2luaXQuZC9zeXNsb2cuJXMnICUgKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdCUE4nLCBUcnVlKSkpCisgICAgICAgIGQuYXBwZW5kVmFyKCdBTFRFUk5BVElWRV8lcy1zeXNsb2cnICUgKHBuKSwgJyBzeXNsb2ctc3RhcnR1cC1jb25mJykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCAnc3lzbG9nLXN0YXJ0dXAtY29uZicsICclcy9zeXNsb2ctc3RhcnR1cC5jb25mJyAlIChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpKSkKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCAnc3lzbG9nLXN0YXJ0dXAtY29uZicsICclcy9zeXNsb2ctc3RhcnR1cC5jb25mLiVzJyAlIChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignQlBOJywgVHJ1ZSkpKQorfQorCitweXRob24gZG9fcGFja2FnZV9wcmVwZW5kICgpIHsKKyAgICAjIFdlIG5lZWQgdG8gbG9hZCB0aGUgZnVsbCBzZXQgb2YgYnVzeWJveCBwcm92aWRlcyBmcm9tIHRoZSAvZXRjL2J1c3lib3gubGlua3MKKyAgICAjIFVzZSB0aGlzIHRvIHNlZSB0aGUgdXBkYXRlLWFsdGVybmF0aXZlcyB3aXRoIHRoZSByaWdodCBpbmZvcm1hdGlvbgorCisgICAgZHZhciA9IGQuZ2V0VmFyKCdEJywgVHJ1ZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgZGVmIHNldF9hbHRlcm5hdGl2ZV92YXJzKGxpbmtzLCB0YXJnZXQpOgorICAgICAgICBmID0gb3BlbignJXMlcycgJSAoZHZhciwgbGlua3MpLCAncicpCisgICAgICAgIGZvciBhbHRfbGlua19uYW1lIGluIGY6CisgICAgICAgICAgICBhbHRfbGlua19uYW1lID0gYWx0X2xpbmtfbmFtZS5zdHJpcCgpCisgICAgICAgICAgICBhbHRfbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoYWx0X2xpbmtfbmFtZSkKKyAgICAgICAgICAgICMgTWF0Y2ggY29yZXV0aWxzCisgICAgICAgICAgICBpZiBhbHRfbmFtZSA9PSAnWyc6CisgICAgICAgICAgICAgICAgYWx0X25hbWUgPSAnbGJyYWNrZXQnCisgICAgICAgICAgICBkLmFwcGVuZFZhcignQUxURVJOQVRJVkVfJXMnICUgKHBuKSwgJyAnICsgYWx0X25hbWUpCisgICAgICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIGFsdF9uYW1lLCBhbHRfbGlua19uYW1lKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoJyVzJXMnICUgKGR2YXIsIHRhcmdldCkpOgorICAgICAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUJywgYWx0X25hbWUsIHRhcmdldCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHJldHVybgorCisgICAgaWYgb3MucGF0aC5leGlzdHMoJyVzL2V0Yy9idXN5Ym94LmxpbmtzJyAlIChkdmFyKSk6CisgICAgICAgIHNldF9hbHRlcm5hdGl2ZV92YXJzKCIke3N5c2NvbmZkaXJ9L2J1c3lib3gubGlua3MiLCAiJHtiYXNlX2JpbmRpcn0vYnVzeWJveCIpCisgICAgZWxzZToKKyAgICAgICAgc2V0X2FsdGVybmF0aXZlX3ZhcnMoIiR7c3lzY29uZmRpcn0vYnVzeWJveC5saW5rcy5ub3N1aWQiLCAiJHtiYXNlX2JpbmRpcn0vYnVzeWJveC5ub3N1aWQiKQorICAgICAgICBzZXRfYWx0ZXJuYXRpdmVfdmFycygiJHtzeXNjb25mZGlyfS9idXN5Ym94LmxpbmtzLnN1aWQiLCAiJHtiYXNlX2JpbmRpcn0vYnVzeWJveC5zdWlkIikKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwkjIFRoaXMgcGFydCBvZiBjb2RlIGlzIGRlZGljYXRlZCB0byB0aGUgb24gdGFyZ2V0IHVwZ3JhZGUgcHJvYmxlbS4KKwkjIEl0J3Mga25vd24gdGhhdCBpZiB3ZSBkb24ndCBtYWtlIGFwcHJvcHJpYXRlIHN5bWxpbmtzIGJlZm9yZSB1cGRhdGUtYWx0ZXJuYXRpdmVzIGNhbGxzLAorCSMgdGhlcmUgd2lsbCBiZSBlcnJvcnMgaW5kaWNhdGluZyBtaXNzaW5nIGNvbW1hbmRzIHN1Y2ggYXMgJ3NlZCcuCisJIyBUaGVzZSBzeW1saW5rcyB3aWxsIGxhdGVyIGJlIHVwZGF0ZWQgYnkgdXBkYXRlLWFsdGVybmF0aXZlcyBjYWxscy4KKwl0ZXN0IC1uIDIgPiAvZGV2L251bGwgfHwgYWxpYXMgdGVzdD0nYnVzeWJveCB0ZXN0JworCWlmIHRlc3QgIngkRCIgPSAieCI7IHRoZW4KKwkJIyBSZW1vdmUgYnVzeWJveC5ub3N1aWQgaWYgaXQncyBhIHN5bWxpbmssIGJlY2F1c2UgdGhpcyBzaXR1YXRpb24gaW5kaWNhdGVzCisJCSMgdGhhdCB3ZSdyZSBpbnN0YWxsaW5nIG9yIHVwZ3JhZGluZyB0byBhIG9uZS1iaW5hcnkgYnVzeWJveC4KKwkJaWYgdGVzdCAtaCAke2Jhc2VfYmluZGlyfS9idXN5Ym94Lm5vc3VpZDsgdGhlbgorCQkJcm0gLWYgJHtiYXNlX2JpbmRpcn0vYnVzeWJveC5ub3N1aWQKKwkJZmkKKwkJZm9yIHN1ZmZpeCBpbiAiIiAiLm5vc3VpZCIgIi5zdWlkIjsgZG8KKwkJCWlmIHRlc3QgLWUgJHtzeXNjb25mZGlyfS9idXN5Ym94LmxpbmtzJHN1ZmZpeDsgdGhlbgorCQkJCXdoaWxlIHJlYWQgbGluazsgZG8KKwkJCQkJaWYgdGVzdCAhIC1lICIkbGluayI7IHRoZW4KKwkJCQkJCWNhc2UgIiRsaW5rIiBpbgorCQkJCQkJCS8qLyovKikKKwkJCQkJCQkJdG89Ii4uLy4uJHtiYXNlX2JpbmRpcn0vYnVzeWJveCRzdWZmaXgiCisJCQkJCQkJCTs7CisJCQkJCQkJL2Jpbi8qKQorCQkJCQkJCQl0bz0iYnVzeWJveCRzdWZmaXgiCisJCQkJCQkJCTs7CisJCQkJCQkJLyovKikKKwkJCQkJCQkJdG89Ii4uJHtiYXNlX2JpbmRpcn0vYnVzeWJveCRzdWZmaXgiCisJCQkJCQkJCTs7CisJCQkJCQllc2FjCisJCQkJCQkjIHdlIGNhbiB1c2UgYnVzeWJveCBoZXJlIGJlY2F1c2UgZXZlbiBpZiB3ZSBhcmUgdXNpbmcgc3BsaXR0ZWQgYnVzeWJveAorCQkJCQkJIyB3ZSd2ZSBtYWRlIGEgc3ltbGluayBmcm9tIC9iaW4vYnVzeWJveCB0byAvYmluL2J1c3lib3gubm9zdWlkLgorCQkJCQkJYnVzeWJveCBybSAtZiAkbGluaworCQkJCQkJYnVzeWJveCBsbiAtcyAkdG8gJGxpbmsKKwkJCQkJZmkKKwkJCQlkb25lIDwgJHtzeXNjb25mZGlyfS9idXN5Ym94LmxpbmtzJHN1ZmZpeAorCQkJZmkKKwkJZG9uZQorCWZpCit9CisKK3BrZ19wcmVybV8ke1BOfSAoKSB7CisJIyBUaGlzIGlzIHNvIHlvdSBjYW4gbWFrZSBidXN5Ym94IGNvbW1pdCBzdWljaWRlIC0gcmVtb3ZpbmcgYnVzeWJveCB3aXRoIG5vIG90aGVyIHBhY2thZ2VzCisJIyBwcm92aWRpbmcgaXRzIGZpbGVzLCB0aGlzIHdpbGwgbWFrZSB1cGRhdGUtYWx0ZXJuYXRpdmVzIHdvcmssIGJ1dCB0aGUgdXBkYXRlLXJjLmQgcGFydAorCSMgZm9yIHN5c2xvZywgaHR0cGQgYW5kL29yIHVkaGNwZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgbm8gb3RoZXIgcGFja2FnZSBwcm92aWRpbmcgc2gKKwl0bXBkaXI9YG1rdGVtcCAtZCAvdG1wL2J1c3lib3hybS1YWFhYWFhgCisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL1sKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvdGVzdAorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9oZWFkCisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL3NoCisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL2Jhc2VuYW1lCisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL2VjaG8KKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvbXYKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvbG4KKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvZGlybmFtZQorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9ybQorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9zZWQKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvc29ydAorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9ncmVwCisJZXhwb3J0IFBBVEg9JFBBVEg6JHRtcGRpcgorfQorCitwa2dfcHJlcm1fJHtQTn0tc3lzbG9nICgpIHsKKwkjIHJlbW92ZSBzeXNsb2cKKwlpZiB0ZXN0ICJ4JEQiID0gIngiOyB0aGVuCisJCWlmIHRlc3QgIiQxIiA9ICJ1cGdyYWRlIiAtbyAiJDEiID0gInJlbW92ZSI7IHRoZW4KKwkJCSR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c2xvZyBzdG9wCisJCWZpCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94LzAwMDEtY2hvd24tZml4LWhlbHAtdGV4dC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94LzAwMDEtY2hvd24tZml4LWhlbHAtdGV4dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjk5Nzk5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvMDAwMS1jaG93bi1maXgtaGVscC10ZXh0LnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gZDI5MWMyZmRkNWNiODYxNjYwNWM2N2VjYmZiMDQyNzRmYTA5NDI0MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1bmxpbmcgWmhlbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorRGF0ZTogU3VuLCA3IEp1biAyMDE1IDAyOjMyOjIzICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGNob3duOiBmaXggaGVscCB0ZXh0CisKK0Rlcml2ZWQgZnJvbToKK2h0dHA6Ly9naXQuYnVzeWJveC5uZXQvYnVzeWJveC9jb21taXQvP2lkPWQyOTFjMmZkZDVjYjg2MTY2MDVjNjdlY2JmYjA0Mjc0ZmEwOTQyNDIuCisKK09ubHkgd2hlbiBERVNLVE9QIGlzIGVuYWJsZWQsIGNob3duIGhhcyAtTCwgLUggYW5kIC1QIG9wdGlvbnMuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitTaWduZWQtb2ZmLWJ5OiBEZW55cyBWbGFzZW5rbyA8dmRhLmxpbnV4QGdvb2dsZW1haWwuY29tPgorLS0tCisgY29yZXV0aWxzL2Nob3duLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb3JldXRpbHMvY2hvd24uYyBiL2NvcmV1dGlscy9jaG93bi5jCitpbmRleCBjYjA3YmJjLi42NzljMGQ4IDEwMDY0NAorLS0tIGEvY29yZXV0aWxzL2Nob3duLmMKKysrKyBiL2NvcmV1dGlscy9jaG93bi5jCitAQCAtMTEsNyArMTEsNyBAQAorIC8qIGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwNzkwNDk3NS91dGlsaXRpZXMvY2hvd24uaHRtbCAqLworIAorIC8vdXNhZ2U6I2RlZmluZSBjaG93bl90cml2aWFsX3VzYWdlCistLy91c2FnZTogICAgICAgIlstUmhMSFAiSUZfREVTS1RPUCgiY3ZmIikiXS4uLiBPV05FUls8Lnw6PltHUk9VUF1dIEZJTEUuLi4iCisrLy91c2FnZTogICAgICAgIlstUmgiSUZfREVTS1RPUCgiTEhQY3ZmIikiXS4uLiBPV05FUls8Lnw6PltHUk9VUF1dIEZJTEUuLi4iCisgLy91c2FnZTojZGVmaW5lIGNob3duX2Z1bGxfdXNhZ2UgIlxuXG4iCisgLy91c2FnZTogICAgICAgIkNoYW5nZSB0aGUgb3duZXIgYW5kL29yIGdyb3VwIG9mIGVhY2ggRklMRSB0byBPV05FUiBhbmQvb3IgR1JPVVBcbiIKKyAvL3VzYWdlOiAgICAgIlxuCS1SCVJlY3Vyc2UiCistLSAKKzEuOC4zLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvMDAwMS1pZmNvbmZpZy1maXgtZG91YmxlLWZyZWUtZmF0YWwtZXJyb3ItaW4tSU5FVF9zcHJpbnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC8wMDAxLWlmY29uZmlnLWZpeC1kb3VibGUtZnJlZS1mYXRhbC1lcnJvci1pbi1JTkVUX3NwcmludC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDcyOWIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvMDAwMS1pZmNvbmZpZy1maXgtZG91YmxlLWZyZWUtZmF0YWwtZXJyb3ItaW4tSU5FVF9zcHJpbnQucGF0Y2gKQEAgLTAsMCArMSw2NyBAQAorRnJvbSBhOTc3Nzc4ODkzMjgxNTdiYjdkMDZlYzYxOGJhZDE2NzEyYTljMzQ1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGVueXMgVmxhc2Vua28gPHZkYS5saW51eEBnb29nbGVtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMyBGZWIgMjAxNSAxMjoxMTozMCArMDEwMAorU3ViamVjdDogW1BBVENIXSBpZmNvbmZpZzogZml4IGRvdWJsZSBmcmVlIGZhdGFsIGVycm9yIGluIElORVRfc3ByaW50CisKK0Rlcml2ZWQgZnJvbToKK2h0dHA6Ly9naXQuYnVzeWJveC5uZXQvYnVzeWJveC9jb21taXQvP2lkPWE5Nzc3Nzg4OTMyODE1N2JiN2QwNmVjNjE4YmFkMTY3MTJhOWMzNDUuCisKK1doaWxlIElORVRfc3ByaW50IG9yIElORVQ2X3NwcmludCBpcyBjYWxsZWQgY2lyY3VsYXJseSBieSBrZWVwaW5nCitpZmNvbmZpZ2luZywgc2FwLT5zYV9mYW1pbHkgd291bGQgYmUgY2xlYW5lZCBieSBvdGhlciBwYXJhbGxlbCBwcm9jZXNzZXMKK3N1Y2ggYXMgZGhjbGllbnQgc29tZXRpbWVzLCBhbmQgdGhlbiB0aGVyZSB3b3VsZCBiZSBhIGRvdWJsZSBmcmVlIGVycm9yCitsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgKioqIGdsaWJjIGRldGVjdGVkICoqKiBpZmNvbmZpZzogZG91YmxlIGZyZWUgb3IgY29ycnVwdGlvbiAoZmFzdHRvcCk6IDB4MDAwYTYwMDggKioqCisgID09PT09PT0gQmFja3RyYWNlOiA9PT09PT09PT0KKyAgL2xpYi9saWJjLnNvLjYoKzB4NmJjODQpWzB4NDAxMzNjODRdCisgIC9saWIvbGliYy5zby42KGNmcmVlKzB4OTQpWzB4NDAxMzg2ODRdCisgIGlmY29uZmlnWzB4MWM0NjBdCisgIGlmY29uZmlnWzB4MWM2YTBdCisgIGlmY29uZmlnWzB4MWNjZjRdCisgIGlmY29uZmlnWzB4MTg3YzhdCisgIGlmY29uZmlnWzB4ZDU0NF0KKyAgaWZjb25maWdbMHhkNWRjXQorICBpZmNvbmZpZ1sweGRjYThdCisgIC9saWIvbGliYy5zby42KF9fbGliY19zdGFydF9tYWluKzB4MTEwKVsweDQwMGRmMjU4XQorICA9PT09PT09IE1lbW9yeSBtYXA6ID09PT09PT09CisgIDAwMDA4MDAwLTAwMDljMDAwIHIteHAgMDAwMDAwMDAgMWY6MDUgNDQ0MzI4ICAgICAvYmluL2J1c3lib3gKKyAgMDAwYTMwMDAtMDAwYTQwMDAgcnctcCAwMDA5MzAwMCAxZjowNSA0NDQzMjggICAgIC9iaW4vYnVzeWJveAorCitUaGlzIHBhdGNoIG1vdmVkIGZyZWUoKSB0d28gbGluZXMgZG93biB0byBhZGRyZXNzIHRoaXMgcHJvYmxlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBEZW55cyBWbGFzZW5rbyA8dmRhLmxpbnV4QGdvb2dsZW1haWwuY29tPgorLS0tCisgbmV0d29ya2luZy9pbnRlcmZhY2UuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9uZXR3b3JraW5nL2ludGVyZmFjZS5jIGIvbmV0d29ya2luZy9pbnRlcmZhY2UuYworaW5kZXggYmY3ZDJiMS4uYjA1NzJkMCAxMDA2NDQKKy0tLSBhL25ldHdvcmtpbmcvaW50ZXJmYWNlLmMKKysrKyBiL25ldHdvcmtpbmcvaW50ZXJmYWNlLmMKK0BAIC05MSw5ICs5MSw5IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBGQVNUX0ZVTkMgSU5FVF9zcHJpbnQoc3RydWN0IHNvY2thZGRyICpzYXAsIGludCBudW1lcmljKQorIHsKKyAJc3RhdGljIGNoYXIgKmJ1ZmY7IC8qIGRlZmF1bHRzIHRvIE5VTEwgKi8KKyAKKy0JZnJlZShidWZmKTsKKyAJaWYgKHNhcC0+c2FfZmFtaWx5ID09IDB4RkZGRiB8fCBzYXAtPnNhX2ZhbWlseSA9PSAwKQorIAkJcmV0dXJuICJbTk9ORSBTRVRdIjsKKysJZnJlZShidWZmKTsKKyAJYnVmZiA9IElORVRfcnJlc29sdmUoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBzYXAsIG51bWVyaWMsIDB4ZmZmZmZmMDApOworIAlyZXR1cm4gYnVmZjsKKyB9CitAQCAtMTczLDkgKzE3Myw5IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBGQVNUX0ZVTkMgSU5FVDZfc3ByaW50KHN0cnVjdCBzb2NrYWRkciAqc2FwLCBpbnQgbnVtZXJpYykKKyB7CisgCXN0YXRpYyBjaGFyICpidWZmOworIAorLQlmcmVlKGJ1ZmYpOworIAlpZiAoc2FwLT5zYV9mYW1pbHkgPT0gMHhGRkZGIHx8IHNhcC0+c2FfZmFtaWx5ID09IDApCisgCQlyZXR1cm4gIltOT05FIFNFVF0iOworKwlmcmVlKGJ1ZmYpOworIAlidWZmID0gSU5FVDZfcnJlc29sdmUoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgc2FwLCBudW1lcmljKTsKKyAJcmV0dXJuIGJ1ZmY7CisgfQorLS0gCisxLjguMy40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gtYXBwbGV0bGliLWRlcGVuZGVuY3kucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9idXN5Ym94LWFwcGxldGxpYi1kZXBlbmRlbmN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMmRiY2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9idXN5Ym94LWFwcGxldGxpYi1kZXBlbmRlbmN5LnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjIGNvcHkgY29tbWl0IG1lc3NhZ2UgZnJvbSBPRSBhcyB0aGUgcGF0Y2ggY29tbWVudDoKKyMgICAgY29tbWl0IDk4YzI0MjkxYWExNjVmNTM0MjNjMjdhZTAzMzgzMWNlMGIzYmI2NzYKKyMgICAgQXV0aG9yOiBSb21hbiBJIEtoaW1vdiA8a2hpbW92QGFsdGVsbC5ydT4KKyMgICAgRGF0ZTogICBUaHUgTWFyIDI2IDIzOjAzOjU4IDIwMDkgKzAwMDAKKyMKKyMgICAgYnVzeWJveDogdXBkYXRlIGFwcGxldGxpYiBkZXBlbmRlbmN5IHBhdGNoCisjICAgIAorIyAgICBQcmV2aW91cyB2ZXJzaW9uIHN0aWxsIGZhaWxlZCBmcm9tIHRpbWUgdG8gdGltZSBvbiBjbGVhbi1zdGFydCBidWlsZHMKKyMgICAgd2l0aCA0IGJpdGJha2UgdGhyZWFkcyBhbmQgJy1qMTYnLiBCdWlsZGluZyBidXN5Ym94IGFzIHNvbGUgdGFyZ2V0IHdvcmtlZAorIyAgICB3ZWxsLgorIyAgICAKKyMgICAgVGhlIHJlYXNvbiBpcyB0aGF0IHByZXZpb3VzIHZlcnNpb24gaW50cm9kdWNlZCBhIHJhY2UgYmV0d2VlbiBhcHBsZXRzIG1ha2UKKyMgICAgcHJvY2Vzc2VzIHNwYXduZWQgZnJvbSB0b3AtbGV2ZWwgTWFrZWZpbGUgYW5kIGZyb20gbGliYmIgTWFrZWZpbGUuCisjICAgIAorIyAgICBGaXggaXQgd2l0aCBoaWdoLWxldmVsIGRlcGVuZGVuY3kgdGhhdCBkb2Vzbid0IGNyZWF0ZSByYWNlcy4KKyMgICAgCisjICAgIFNpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBvcGVuZW1iZWRkZWQub3JnPgorIworIyBhYm92ZSBjb21tZW50IGFkZGVkIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wNy0wNgorCitJbmRleDogYnVzeWJveC0xLjEzLjIvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBidXN5Ym94LTEuMTMuMi5vcmlnL01ha2VmaWxlCTIwMDktMDMtMTkgMTU6NDQ6MzcuNDE5MjcwMjY1ICswMzAwCisrKysgYnVzeWJveC0xLjEzLjIvTWFrZWZpbGUJMjAwOS0wMy0xOSAxNTo0NTo1Ny43Mzc1MjEyOTYgKzAzMDAKK0BAIC00NzEsNiArNDcxLDEwIEBACisgCQl1dGlsLWxpbnV4LyBcCisgCQl1dGlsLWxpbnV4L3ZvbHVtZV9pZC8gXAorIAorKyMgTGliIGludGVyZGVwcworKyMgbGliYmIgdXNlcyBoZWFkZXJzIGdlbmVyYXRlZCBpbiBhcHBsZXRzCisrbGliYmI6IGFwcGxldHMKKysKKyBlbmRpZiAjIEtCVUlMRF9FWFRNT0QKKyAKKyBpZmVxICgkKGRvdC1jb25maWcpLDEpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9idXN5Ym94LWNyb3NzLW1lbnVjb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9idXN5Ym94LWNyb3NzLW1lbnVjb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRhODY4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gtY3Jvc3MtbWVudWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDcxIEBACitGcm9tOiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorRGF0ZTogU3VuLCAzIE1hciAyMDEzIDEyOjMxOjQwIC0wNjAwCitTdWJqZWN0OiBbUEFUQ0hdIG1lbnVjb25maWcsY2hlY2stbHhkaWFnbG9nLnNoOiBBbGxvdyBzcGVjaWZpY2F0aW9uIG9mIG5jdXJzZXMgbG9jYXRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworWyBiYXNlZCBvbjogaHR0cHM6Ly9sa21sLm9yZy9sa21sLzIwMTMvMy8zLzEwMyBdCisKK1RoaXMgcGF0Y2ggc3luY3MgdXAgd2l0aCB0aGUgd2F5IHRoZSBtZW51Y29uZmlnIG5jdXJzZXMgLyBjdXJzZXMKK2lzIGRldGVjdGVkIGFuZCB0aGUgSE9TVF9FWFRSQUNGTEFHUyB3b3JrcyBpbiB0aGUgTGludXgga2VybmVsCithbmQgaXQgYWxsb3dzIHRoZSBtZW51Y29uZmlnIHRvIHdvcmsgd2l0aCBhIHN5c3Jvb3QgdmVyc2lvbgorb2YgdGhlIGN1cnNlcyBsaWJyYXJpZXMuCisKKy0tLQorCitJbiBzb21lIGNyb3NzIGJ1aWxkIGVudmlyb25tZW50cyBzdWNoIGFzIHRoZSBZb2N0byBQcm9qZWN0IGJ1aWxkCitlbnZpcm9ubWVudCBpdCBwcm92aWRlcyBhbiBuY3Vyc2VzIGxpYnJhcnkgdGhhdCBpcyBjb21waWxlZAorZGlmZmVyZW50bHkgdGhhbiB0aGUgaG9zdCdzIHZlcnNpb24uICBUaGlzIGNhdXNlcyBkaXNwbGF5IGNvcnJ1cHRpb24KK3Byb2JsZW1zIHdoZW4gdGhlIGhvc3QncyBjdXJzZXMgaW5jbHVkZXMgYXJlIHVzZWQgaW5zdGVhZCBvZiB0aGUKK2luY2x1ZGVzIGZyb20gdGhlIHByb3ZpZGVkIGNvbXBpbGVyIGFyZSBvdmVycmlkZGVuLiAgVGhlcmUgaXMgYSBzZWNvbmQKK2Nhc2Ugd2hlcmUgdGhlcmUgaXMgbm8gY3Vyc2VzIGxpYnJhcmllcyBhdCBhbGwgb24gdGhlIGhvc3Qgc3lzdGVtIGFuZAorbWVudWNvbmZpZyB3aWxsIGp1c3QgZmFpbCBlbnRpcmVseS4KKworVGhlIHNvbHV0aW9uIGlzIHNpbXBseSB0byBhbGxvdyBhbiBvdmVycmlkZSB2YXJpYWJsZSBpbgorY2hlY2stbHhkaWFsb2cuc2ggZm9yIGVudmlyb25tZW50cyBzdWNoIGFzIHRoZSBZb2N0byBQcm9qZWN0LiAgQWRkaW5nCithIENST1NTX0NVUlNFU19MSUIgYW5kIENST1NTX0NVUlNFU19JTkMgc29sdmVzIHRoZSBpc3N1ZSBhbmQgYWxsb3dpbmcKK2NvbXBpbGluZyBhbmQgbGlua2luZyBhZ2FpbnN0IHRoZSByaWdodCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMuCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CitjYzogTWljaGFsIE1hcmVrIDxtbWFyZWtAc3VzZS5jej4KK2NjOiBsaW51eC1rYnVpbGRAdmdlci5rZXJuZWwub3JnCistLS0KKyBzY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvTWFrZWZpbGUgICAgICAgICAgfCAgICAyICstCisgc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrLWx4ZGlhbG9nLnNoIHwgICAgOCArKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9jaGVjay1seGRpYWxvZy5zaAorKysrIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrLWx4ZGlhbG9nLnNoCitAQCAtNCw2ICs0LDEwIEBACisgIyBXaGF0IGxpYnJhcnkgdG8gbGluaworIGxkZmxhZ3MoKQorIHsKKysJaWYgWyB4IiRDUk9TU19DVVJTRVNfTElCIiAhPSB4IF07IHRoZW4KKysJCWVjaG8gIiRDUk9TU19DVVJTRVNfTElCIgorKwkJZXhpdAorKwlmaQorIAlmb3IgZXh0IGluIHNvIGEgZHlsaWIgOyBkbworIAkJZm9yIGxpYiBpbiBuY3Vyc2VzdyBuY3Vyc2VzIGN1cnNlcyA7IGRvCisgCQkJJGNjIC1wcmludC1maWxlLW5hbWU9bGliJHtsaWJ9LiR7ZXh0fSB8IGdyZXAgLXEgLworQEAgLTE5LDYgKzIzLDEwIEBAIGxkZmxhZ3MoKQorICMgV2hlcmUgaXMgbmN1cnNlcy5oPworIGNjZmxhZ3MoKQorIHsKKysJaWYgWyB4IiRDUk9TU19DVVJTRVNfSU5DIiAhPSB4IF07IHRoZW4KKysJCWVjaG8gIiRDUk9TU19DVVJTRVNfSU5DIgorKwkJZXhpdAorKwlmaQorIAlpZiBbIC1mIC91c3IvaW5jbHVkZS9uY3Vyc2Vzdy9uY3Vyc2VzLmggXTsgdGhlbgorIAkJZWNobyAnLUkvdXNyL2luY2x1ZGUvbmN1cnNlc3cgLURDVVJTRVNfTE9DPSI8bmN1cnNlcy5oPiInCisgCWVsaWYgWyAtZiAvdXNyL2luY2x1ZGUvbmN1cnNlc3cvY3Vyc2VzLmggXTsgdGhlbgorLS0tIGEvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL01ha2VmaWxlCisrKysgYi9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvTWFrZWZpbGUKK0BAIC01LDcgKzUsNyBAQCBjaGVjay1seGRpYWxvZyAgOj0gJChzcmN0cmVlKS8kKHNyYykvY2hlCisgCisgIyBVc2UgcmV1cnNpdmVseSBleHBhbmRlZCB2YXJpYWJsZXMgc28gd2UgZG8gbm90IGNhbGwgZ2NjIHVubGVzcworICMgd2UgcmVhbGx5IG5lZWQgdG8gZG8gc28uIChEbyBub3QgY2FsbCBnY2MgYXMgcGFydCBvZiBtYWtlIG1ycHJvcGVyKQorLUhPU1RfRVhUUkFDRkxBR1MgPSAkKHNoZWxsICQoQ09ORklHX1NIRUxMKSAkKGNoZWNrLWx4ZGlhbG9nKSAtY2NmbGFncykKKytIT1NUX0VYVFJBQ0ZMQUdTICs9ICQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoY2hlY2stbHhkaWFsb2cpIC1jY2ZsYWdzKQorIEhPU1RfTE9BRExJQkVTICAgPSAkKHNoZWxsICQoQ09ORklHX1NIRUxMKSAkKGNoZWNrLWx4ZGlhbG9nKSAtbGRmbGFncyAkKEhPU1RDQykpCisgCisgSE9TVF9FWFRSQUNGTEFHUyArPSAtRExPQ0FMRQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC11ZGhjcGMtbm9fZGVjb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9idXN5Ym94LXVkaGNwYy1ub19kZWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzljZTNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC11ZGhjcGMtbm9fZGVjb25maWcucGF0Y2gKQEAgLTAsMCArMSwxMzcgQEAKK0Zyb20gNTM2MjZjZDA2YTNlZjA1ZWQ4NDdkYWVhODAyZWYwYWE5NjYxY2FhNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZGVycyBEYXJhbmRlciA8YW5kZXJzQGNoYXJnZXN0b3JtLnNlPgorRGF0ZTogVGh1LCAzIE5vdiAyMDExIDA4OjUxOjMxICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGJ1c3lib3gtdWRoY3BjLW5vX2RlY29uZmlnLnBhdGNoCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBZGQgYSBuZXcgb3B0aW9uIC1EIHRvIHRoZSB1ZGhjcGMgY2xpZW50IHRoYXQgYWxsb3dzIGZvcgorZGhjcCByZW5ld2FsIHRvIG9jY3VyIHdpdGhvdXQgaGF2aW5nIHRvIGRvd24gdGhlIGludGVyZmFjZQoraW4gdGhlIHByb2Nlc3MuCisKK1NpZ25lZC1vZmYtYnk6IEdyZWcgTW9mZmF0dCA8Z3JlZy5tb2ZmYXR0QHdpbmRyaXZlci5jb20+CisKK1VwZGF0ZWQgdG8gbGF0ZXN0IEJ1c3lib3ggMS4xNy4zCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworVXBkYXRlZCB0byBCdXN5Ym94IDEuMTguNAorb3B0aW9uIHNwZWMgaXMgY2hhbmdlZAorCitTaWduZWQtb2ZmLWJ5OiBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworVXBkYXRlZCB0byBCdXN5Ym94IDEuMTkuMworCitTaWduZWQtb2ZmLWJ5OiBBbmRlcnMgRGFyYW5kZXIgPGFuZGVyc0BjaGFyZ2VzdG9ybS5zZT4KKworRml4ZWQgb3B0aW9ucyAtYiwgLWEgYW5kIC1QLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE9iZXJyaXR0ZXIgPG9iaUBvcGVuZHJlYW1ib3gub3JnPgorLS0tCisgbmV0d29ya2luZy91ZGhjcC9kaGNwYy5jIHwgICAyOSArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworSW5kZXg6IGJ1c3lib3gtMS4yMC4yL25ldHdvcmtpbmcvdWRoY3AvZGhjcGMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJ1c3lib3gtMS4yMC4yLm9yaWcvbmV0d29ya2luZy91ZGhjcC9kaGNwYy5jCisrKysgYnVzeWJveC0xLjIwLjIvbmV0d29ya2luZy91ZGhjcC9kaGNwYy5jCitAQCAtMjksNiArMjksOSBAQAorICNpbmNsdWRlIDxuZXRwYWNrZXQvcGFja2V0Lmg+CisgI2luY2x1ZGUgPGxpbnV4L2ZpbHRlci5oPgorIAorKy8qIG9wdGlvbiB3aGV0aGVyIHRvIGRvd24gdGhlIGludGVyZmFjZSB3aGVuIHJlY29uZmlndXJpbmcgKi8KKytzdGF0aWMgaW50IGFsbG93X2RlY29uZmlnID0gMTsKKysKKyAvKiAic3RydWN0IGNsaWVudF9jb25maWdfdCBjbGllbnRfY29uZmlnIiBpcyBpbiBiYl9jb21tb25fYnVmc2l6MSAqLworIAorIAorQEAgLTgxLDggKzg0LDkgQEAgZW51bSB7CisgCU9QVF94ID0gMSA8PCAxOCwKKyAJT1BUX2YgPSAxIDw8IDE5LAorIAlPUFRfQiA9IDEgPDwgMjAsCisrCU9QVF9EID0gMSA8PCAyMSwKKyAvKiBUaGUgcmVzdCBoYXMgdmFyaWFibGUgYml0IHBvc2l0aW9ucywgbmVlZCB0byBiZSBjbGV2ZXIgKi8KKy0JT1BUQklUX0IgPSAyMCwKKysJT1BUQklUX0QgPSAyMSwKKyAJVVNFX0ZPUl9NTVUoICAgICAgICAgICAgIE9QVEJJVF9iLCkKKyAJSUZfRkVBVFVSRV9VREhDUENfQVJQSU5HKE9QVEJJVF9hLCkKKyAJSUZfRkVBVFVSRV9VREhDUF9QT1JUKCAgIE9QVEJJVF9QLCkKK0BAIC0xMDQwLDcgKzEwNDQsOCBAQCBzdGF0aWMgdm9pZCBwZXJmb3JtX3JlbmV3KHZvaWQpCisgCQlzdGF0ZSA9IFJFTkVXX1JFUVVFU1RFRDsKKyAJCWJyZWFrOworIAljYXNlIFJFTkVXX1JFUVVFU1RFRDogLyogaW1wYXRpZW50IGFyZSB3ZT8gZmluZSwgc3F1YXJlIDEgKi8KKy0JCXVkaGNwX3J1bl9zY3JpcHQoTlVMTCwgImRlY29uZmlnIik7CisrCQlpZiAoYWxsb3dfZGVjb25maWcpCisrCQkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKyAJY2FzZSBSRVFVRVNUSU5HOgorIAljYXNlIFJFTEVBU0VEOgorIAkJY2hhbmdlX2xpc3Rlbl9tb2RlKExJU1RFTl9SQVcpOworQEAgLTEwNjQsNyArMTA2OSw4IEBAIHN0YXRpYyB2b2lkIHBlcmZvcm1fcmVsZWFzZSh1aW50MzJfdCBzZXIKKyAJCWJiX2luZm9fbXNnKCJVbmljYXN0aW5nIGEgcmVsZWFzZSBvZiAlcyB0byAlcyIsCisgCQkJCWluZXRfbnRvYSh0ZW1wX2FkZHIpLCBidWZmZXIpOworIAkJc2VuZF9yZWxlYXNlKHNlcnZlcl9hZGRyLCByZXF1ZXN0ZWRfaXApOyAvKiB1bmljYXN0ICovCistCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworKwkJaWYgKGFsbG93X2RlY29uZmlnKQorKwkJCXVkaGNwX3J1bl9zY3JpcHQoTlVMTCwgImRlY29uZmlnIik7CisgCX0KKyAJYmJfaW5mb19tc2coIkVudGVyaW5nIHJlbGVhc2VkIHN0YXRlIik7CisgCitAQCAtMTIxNSw3ICsxMjIxLDcgQEAgaW50IHVkaGNwY19tYWluKGludCBhcmdjIFVOVVNFRF9QQVJBTSwgYworIAkvKiBPLHg6IGxpc3Q7IC1ULC10LC1BIHRha2UgbnVtZXJpYyBwYXJhbSAqLworIAlvcHRfY29tcGxlbWVudGFyeSA9ICJPOjp4OjpUKzp0KzpBKyIgSUZfVURIQ1BfVkVSQk9TRSgiOnZ2IikgOworIAlJRl9MT05HX09QVFMoYXBwbGV0X2xvbmdfb3B0aW9ucyA9IHVkaGNwY19sb25nb3B0czspCistCW9wdCA9IGdldG9wdDMyKGFyZ3YsICJDVjpIOmg6RjppOm5wOnFScjpzOlQ6dDpTQTpPOm94OmZCIgorKwlvcHQgPSBnZXRvcHQzMihhcmd2LCAiQ1Y6SDpoOkY6aTpucDpxUnI6czpUOnQ6U0E6TzpveDpmQkQiCisgCQlVU0VfRk9SX01NVSgiYiIpCisgCQlJRl9GRUFUVVJFX1VESENQQ19BUlBJTkcoImEiKQorIAkJSUZfRkVBVFVSRV9VREhDUF9QT1JUKCJQOiIpCitAQCAtMTMxNiw2ICsxMzIyLDkgQEAgaW50IHVkaGNwY19tYWluKGludCBhcmdjIFVOVVNFRF9QQVJBTSwgYworIAkJbG9nbW9kZSB8PSBMT0dNT0RFX1NZU0xPRzsKKyAJfQorIAorKwlpZiAob3B0ICYgT1BUX0QpCisrCQlhbGxvd19kZWNvbmZpZyA9IDA7CisrCisgCS8qIE1ha2Ugc3VyZSBmZCAwLDEsMiBhcmUgb3BlbiAqLworIAliYl9zYW5pdGl6ZV9zdGRpbygpOworIAkvKiBFcXVpdmFsZW50IG9mIGRvaW5nIGEgZmZsdXNoIGFmdGVyIGV2ZXJ5IFxuICovCitAQCAtMTMzMCw3ICsxMzM5LDggQEAgaW50IHVkaGNwY19tYWluKGludCBhcmdjIFVOVVNFRF9QQVJBTSwgYworIAlzcmFuZChtb25vdG9uaWNfdXMoKSk7CisgCisgCXN0YXRlID0gSU5JVF9TRUxFQ1RJTkc7CistCXVkaGNwX3J1bl9zY3JpcHQoTlVMTCwgImRlY29uZmlnIik7CisrCWlmIChhbGxvd19kZWNvbmZpZykKKysJCXVkaGNwX3J1bl9zY3JpcHQoTlVMTCwgImRlY29uZmlnIik7CisgCWNoYW5nZV9saXN0ZW5fbW9kZShMSVNURU5fUkFXKTsKKyAJcGFja2V0X251bSA9IDA7CisgCXRpbWVvdXQgPSAwOworQEAgLTE0ODQsNyArMTQ5NCw4IEBAIGludCB1ZGhjcGNfbWFpbihpbnQgYXJnYyBVTlVTRURfUEFSQU0sIGMKKyAJCQkJfQorIAkJCQkvKiBUaW1lZCBvdXQsIGVudGVyIGluaXQgc3RhdGUgKi8KKyAJCQkJYmJfaW5mb19tc2coIkxlYXNlIGxvc3QsIGVudGVyaW5nIGluaXQgc3RhdGUiKTsKKy0JCQkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKysJCQkJaWYgKGFsbG93X2RlY29uZmlnKQorKwkJCQkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKyAJCQkJc3RhdGUgPSBJTklUX1NFTEVDVElORzsKKyAJCQkJY2xpZW50X2NvbmZpZy5maXJzdF9zZWNzID0gMDsgLyogbWFrZSBzZWNzIGZpZWxkIGNvdW50IGZyb20gMCAqLworIAkJCQkvKnRpbWVvdXQgPSAwOyAtIGFscmVhZHkgaXMgKi8KK0BAIC0xNjY3LDcgKzE2NzgsOCBAQCBpbnQgdWRoY3BjX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjCisgCQkJCQkJc2VuZF9kZWNsaW5lKC8qeGlkLCovIHNlcnZlcl9hZGRyLCBwYWNrZXQueWlhZGRyKTsKKyAKKyAJCQkJCQlpZiAoc3RhdGUgIT0gUkVRVUVTVElORykKKy0JCQkJCQkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKysJCQkJCQkJaWYgKGFsbG93X2RlY29uZmlnKQorKwkJCQkJCQkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKyAJCQkJCQljaGFuZ2VfbGlzdGVuX21vZGUoTElTVEVOX1JBVyk7CisgCQkJCQkJc3RhdGUgPSBJTklUX1NFTEVDVElORzsKKyAJCQkJCQljbGllbnRfY29uZmlnLmZpcnN0X3NlY3MgPSAwOyAvKiBtYWtlIHNlY3MgZmllbGQgY291bnQgZnJvbSAwICovCitAQCAtMTcxMSw3ICsxNzIzLDggQEAgaW50IHVkaGNwY19tYWluKGludCBhcmdjIFVOVVNFRF9QQVJBTSwgYworIAkJCQliYl9pbmZvX21zZygiUmVjZWl2ZWQgREhDUCBOQUsiKTsKKyAJCQkJdWRoY3BfcnVuX3NjcmlwdCgmcGFja2V0LCAibmFrIik7CisgCQkJCWlmIChzdGF0ZSAhPSBSRVFVRVNUSU5HKQorLQkJCQkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKysJCQkJCWlmIChhbGxvd19kZWNvbmZpZykKKysJCQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworIAkJCQljaGFuZ2VfbGlzdGVuX21vZGUoTElTVEVOX1JBVyk7CisgCQkJCXNsZWVwKDMpOyAvKiBhdm9pZCBleGNlc3NpdmUgbmV0d29yayB0cmFmZmljICovCisgCQkJCXN0YXRlID0gSU5JVF9TRUxFQ1RJTkc7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9kZWZjb25maWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY1ZGY5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2RlZmNvbmZpZwpAQCAtMCwwICsxLDEwNTQgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgQnVzeWJveCB2ZXJzaW9uOiAxLjIzLjIKKyMgVGh1IEp1bCAzMCAxMTowMDowMCAyMDE1CisjCitDT05GSUdfSEFWRV9ET1RfQ09ORklHPXkKKworIworIyBCdXN5Ym94IFNldHRpbmdzCisjCisKKyMKKyMgR2VuZXJhbCBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ERVNLVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVFJBX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkNMVURFX1NVU3YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9QT1JUQUJMRV9DT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19QTEFURk9STV9MSU5VWD15CitDT05GSUdfRkVBVFVSRV9CVUZGRVJTX1VTRV9NQUxMT0M9eQorIyBDT05GSUdfRkVBVFVSRV9CVUZGRVJTX0dPX09OX1NUQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQlVGRkVSU19HT19JTl9CU1MgaXMgbm90IHNldAorQ09ORklHX1NIT1dfVVNBR0U9eQorIyBDT05GSUdfRkVBVFVSRV9WRVJCT1NFX1VTQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0NPTVBSRVNTX1VTQUdFPXkKKyMgQ09ORklHX0ZFQVRVUkVfSU5TVEFMTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfTk9fVVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0FMRV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSUNPREVfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFX1VTSU5HX0xPQ0FMRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIRUNLX1VOSUNPREVfSU5fRU5WIGlzIG5vdCBzZXQKK0NPTkZJR19TVUJTVF9XQ0hBUj0wCitDT05GSUdfTEFTVF9TVVBQT1JURURfV0NIQVI9MAorIyBDT05GSUdfVU5JQ09ERV9DT01CSU5JTkdfV0NIQVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSUNPREVfV0lERV9XQ0hBUlMgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9CSURJX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9ORVVUUkFMX1RBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSUNPREVfUFJFU0VSVkVfQlJPS0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBTSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9VU0VfU0VOREZJTEU9eQorQ09ORklHX0xPTkdfT1BUUz15CitDT05GSUdfRkVBVFVSRV9ERVZQVFM9eQorIyBDT05GSUdfRkVBVFVSRV9DTEVBTl9VUCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9VVE1QPXkKKyMgQ09ORklHX0ZFQVRVUkVfV1RNUCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9QSURGSUxFPXkKK0NPTkZJR19QSURfRklMRV9QQVRIPSIvdmFyL3J1biIKK0NPTkZJR19GRUFUVVJFX1NVSUQ9eQorQ09ORklHX0ZFQVRVUkVfU1VJRF9DT05GSUc9eQorQ09ORklHX0ZFQVRVUkVfU1VJRF9DT05GSUdfUVVJRVQ9eQorIyBDT05GSUdfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BSRUZFUl9BUFBMRVRTIGlzIG5vdCBzZXQKK0NPTkZJR19CVVNZQk9YX0VYRUNfUEFUSD0iL3Byb2Mvc2VsZi9leGUiCitDT05GSUdfRkVBVFVSRV9TWVNMT0c9eQorQ09ORklHX0ZFQVRVUkVfSEFWRV9SUEM9eQorCisjCisjIEJ1aWxkIE9wdGlvbnMKKyMKKyMgQ09ORklHX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSUUgaXMgbm90IHNldAorIyBDT05GSUdfTk9NTVUgaXMgbm90IHNldAorIyBDT05GSUdfQlVJTERfTElCQlVTWUJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORElWSURVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSEFSRURfQlVTWUJPWCBpcyBub3Qgc2V0CitDT05GSUdfTEZTPXkKKyMgQ09ORklHX0NST1NTX0NPTVBJTEVSX1BSRUZJWCBpcyBub3Qgc2V0CitDT05GSUdfU1lTUk9PVD0iIgorIyBDT05GSUdfRVhUUkFfQ0ZMQUdTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9MREZMQUdTPSIiCitDT05GSUdfRVhUUkFfTERMSUJTPSIiCisKKyMKKyMgRGVidWdnaW5nIE9wdGlvbnMKKyMKKyMgQ09ORklHX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BFU1NJTUlaRSBpcyBub3Qgc2V0CisjIENPTkZJR19VTklUX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19OT19ERUJVR19MSUI9eQorIyBDT05GSUdfRE1BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19FRkVOQ0UgaXMgbm90IHNldAorCisjCisjIEluc3RhbGxhdGlvbiBPcHRpb25zICgibWFrZSBpbnN0YWxsIiBiZWhhdmlvcikKKyMKK0NPTkZJR19JTlNUQUxMX0FQUExFVF9TWU1MSU5LUz15CisjIENPTkZJR19JTlNUQUxMX0FQUExFVF9IQVJETElOS1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9BUFBMRVRfU0NSSVBUX1dSQVBQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfQVBQTEVUX0RPTlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9TSF9BUFBMRVRfU1lNTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX1NIX0FQUExFVF9IQVJETElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX1NIX0FQUExFVF9TQ1JJUFRfV1JBUFBFUiBpcyBub3Qgc2V0CitDT05GSUdfUFJFRklYPSIuL19pbnN0YWxsIgorCisjCisjIEJ1c3lib3ggTGlicmFyeSBUdW5pbmcKKyMKK0NPTkZJR19GRUFUVVJFX1NZU1RFTUQ9eQorQ09ORklHX0ZFQVRVUkVfUlRNSU5NQVg9eQorQ09ORklHX1BBU1NXT1JEX01JTkxFTj02CitDT05GSUdfTUQ1X1NNQUxMPTEKK0NPTkZJR19TSEEzX1NNQUxMPTEKK0NPTkZJR19GRUFUVVJFX0ZBU1RfVE9QPXkKKyMgQ09ORklHX0ZFQVRVUkVfRVRDX05FVFdPUktTIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1VTRV9URVJNSU9TPXkKK0NPTkZJR19GRUFUVVJFX0VESVRJTkc9eQorQ09ORklHX0ZFQVRVUkVfRURJVElOR19NQVhfTEVOPTEwMjQKKyMgQ09ORklHX0ZFQVRVUkVfRURJVElOR19WSSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9FRElUSU5HX0hJU1RPUlk9MTUKK0NPTkZJR19GRUFUVVJFX0VESVRJTkdfU0FWRUhJU1RPUlk9eQorIyBDT05GSUdfRkVBVFVSRV9FRElUSU5HX1NBVkVfT05fRVhJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1JFVkVSU0VfU0VBUkNIIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1RBQl9DT01QTEVUSU9OPXkKK0NPTkZJR19GRUFUVVJFX1VTRVJOQU1FX0NPTVBMRVRJT049eQorQ09ORklHX0ZFQVRVUkVfRURJVElOR19GQU5DWV9QUk9NUFQ9eQorIyBDT05GSUdfRkVBVFVSRV9FRElUSU5HX0FTS19URVJNSU5BTCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9OT05fUE9TSVhfQ1A9eQorIyBDT05GSUdfRkVBVFVSRV9WRVJCT1NFX0NQX01FU1NBR0UgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQ09QWUJVRl9LQj00CitDT05GSUdfRkVBVFVSRV9TS0lQX1JPT1RGUz15CitDT05GSUdfTU9OT1RPTklDX1NZU0NBTEw9eQorQ09ORklHX0lPQ1RMX0hFWDJTVFJfRVJST1I9eQorQ09ORklHX0ZFQVRVUkVfSFdJQj15CisKKyMKKyMgQXBwbGV0cworIworCisjCisjIEFyY2hpdmFsIFV0aWxpdGllcworIworQ09ORklHX0ZFQVRVUkVfU0VBTUxFU1NfWFo9eQorQ09ORklHX0ZFQVRVUkVfU0VBTUxFU1NfTFpNQT15CitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19CWjI9eQorQ09ORklHX0ZFQVRVUkVfU0VBTUxFU1NfR1o9eQorQ09ORklHX0ZFQVRVUkVfU0VBTUxFU1NfWj15CitDT05GSUdfQVI9eQorIyBDT05GSUdfRkVBVFVSRV9BUl9MT05HX0ZJTEVOQU1FUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0FSX0NSRUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19VTkNPTVBSRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19HVU5aSVA9eQorQ09ORklHX0JVTlpJUDI9eQorIyBDT05GSUdfVU5MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTFpNQV9GQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfVU5YWiBpcyBub3Qgc2V0CisjIENPTkZJR19YWiBpcyBub3Qgc2V0CisjIENPTkZJR19CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfQ1BJTz15CisjIENPTkZJR19GRUFUVVJFX0NQSU9fTyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NQSU9fUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUEtHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RQS0dfREVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRFBLR19ERUJfRVhUUkFDVF9PTkxZIGlzIG5vdCBzZXQKK0NPTkZJR19HWklQPXkKKyMgQ09ORklHX0ZFQVRVUkVfR1pJUF9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0daSVBfRkFTVD0wCisjIENPTkZJR19MWk9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xaT1BfQ09NUFJfSElHSCBpcyBub3Qgc2V0CisjIENPTkZJR19SUE0gaXMgbm90IHNldAorIyBDT05GSUdfUlBNMkNQSU8gaXMgbm90IHNldAorQ09ORklHX1RBUj15CitDT05GSUdfRkVBVFVSRV9UQVJfQ1JFQVRFPXkKK0NPTkZJR19GRUFUVVJFX1RBUl9BVVRPREVURUNUPXkKK0NPTkZJR19GRUFUVVJFX1RBUl9GUk9NPXkKK0NPTkZJR19GRUFUVVJFX1RBUl9PTERHTlVfQ09NUEFUSUJJTElUWT15CisjIENPTkZJR19GRUFUVVJFX1RBUl9PTERTVU5fQ09NUEFUSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9UQVJfR05VX0VYVEVOU0lPTlM9eQorIyBDT05GSUdfRkVBVFVSRV9UQVJfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX1RPX0NPTU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UQVJfVU5BTUVfR05BTUUgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVEFSX05PUFJFU0VSVkVfVElNRT15CisjIENPTkZJR19GRUFUVVJFX1RBUl9TRUxJTlVYIGlzIG5vdCBzZXQKK0NPTkZJR19VTlpJUD15CisKKyMKKyMgQ29yZXV0aWxzCisjCitDT05GSUdfQkFTRU5BTUU9eQorQ09ORklHX0NBVD15CitDT05GSUdfREFURT15CisjIENPTkZJR19GRUFUVVJFX0RBVEVfSVNPRk1UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfREFURV9OQU5PIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0RBVEVfQ09NUEFUPXkKKyMgQ09ORklHX0hPU1RJRCBpcyBub3Qgc2V0CitDT05GSUdfSUQ9eQorQ09ORklHX0dST1VQUz15CitDT05GSUdfU0hVRj15CitDT05GSUdfVEVTVD15CitDT05GSUdfRkVBVFVSRV9URVNUXzY0PXkKK0NPTkZJR19UT1VDSD15CitDT05GSUdfRkVBVFVSRV9UT1VDSF9OT0RFUkVGPXkKK0NPTkZJR19GRUFUVVJFX1RPVUNIX1NVU1YzPXkKK0NPTkZJR19UUj15CitDT05GSUdfRkVBVFVSRV9UUl9DTEFTU0VTPXkKKyMgQ09ORklHX0ZFQVRVUkVfVFJfRVFVSVYgaXMgbm90IHNldAorQ09ORklHX1VOTElOSz15CisjIENPTkZJR19CQVNFNjQgaXMgbm90IHNldAorQ09ORklHX1dITz15CitDT05GSUdfVVNFUlM9eQorIyBDT05GSUdfQ0FMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVFYgaXMgbm90IHNldAorQ09ORklHX0NIR1JQPXkKK0NPTkZJR19DSE1PRD15CitDT05GSUdfQ0hPV049eQorIyBDT05GSUdfRkVBVFVSRV9DSE9XTl9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0NIUk9PVD15CisjIENPTkZJR19DS1NVTSBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NIGlzIG5vdCBzZXQKK0NPTkZJR19DUD15CisjIENPTkZJR19GRUFUVVJFX0NQX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfQ1VUPXkKK0NPTkZJR19ERD15CitDT05GSUdfRkVBVFVSRV9ERF9TSUdOQUxfSEFORExJTkc9eQorIyBDT05GSUdfRkVBVFVSRV9ERF9USElSRF9TVEFUVVNfTElORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0REX0lCU19PQlMgaXMgbm90IHNldAorQ09ORklHX0RGPXkKKyMgQ09ORklHX0ZFQVRVUkVfREZfRkFOQ1kgaXMgbm90IHNldAorQ09ORklHX0RJUk5BTUU9eQorIyBDT05GSUdfRE9TMlVOSVggaXMgbm90IHNldAorIyBDT05GSUdfVU5JWDJET1MgaXMgbm90IHNldAorQ09ORklHX0RVPXkKK0NPTkZJR19GRUFUVVJFX0RVX0RFRkFVTFRfQkxPQ0tTSVpFXzFLPXkKK0NPTkZJR19FQ0hPPXkKK0NPTkZJR19GRUFUVVJFX0ZBTkNZX0VDSE89eQorQ09ORklHX0VOVj15CitDT05GSUdfRkVBVFVSRV9FTlZfTE9OR19PUFRJT05TPXkKKyMgQ09ORklHX0VYUEFORCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0VYUEFORF9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0VYUFI9eQorQ09ORklHX0VYUFJfTUFUSF9TVVBQT1JUXzY0PXkKK0NPTkZJR19GQUxTRT15CisjIENPTkZJR19GT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19IRUFEPXkKKyMgQ09ORklHX0ZFQVRVUkVfRkFOQ1lfSEVBRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TVEFMTF9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0xOPXkKK0NPTkZJR19MT0dOQU1FPXkKK0NPTkZJR19MUz15CitDT05GSUdfRkVBVFVSRV9MU19GSUxFVFlQRVM9eQorQ09ORklHX0ZFQVRVUkVfTFNfRk9MTE9XTElOS1M9eQorQ09ORklHX0ZFQVRVUkVfTFNfUkVDVVJTSVZFPXkKK0NPTkZJR19GRUFUVVJFX0xTX1NPUlRGSUxFUz15CitDT05GSUdfRkVBVFVSRV9MU19USU1FU1RBTVBTPXkKK0NPTkZJR19GRUFUVVJFX0xTX1VTRVJOQU1FPXkKK0NPTkZJR19GRUFUVVJFX0xTX0NPTE9SPXkKKyMgQ09ORklHX0ZFQVRVUkVfTFNfQ09MT1JfSVNfREVGQVVMVCBpcyBub3Qgc2V0CitDT05GSUdfTUQ1U1VNPXkKK0NPTkZJR19NS0RJUj15CitDT05GSUdfRkVBVFVSRV9NS0RJUl9MT05HX09QVElPTlM9eQorQ09ORklHX01LRklGTz15CitDT05GSUdfTUtOT0Q9eQorQ09ORklHX01WPXkKKyMgQ09ORklHX0ZFQVRVUkVfTVZfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JQ0UgaXMgbm90IHNldAorQ09ORklHX05PSFVQPXkKK0NPTkZJR19PRD15CisjIENPTkZJR19QUklOVEVOViBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRGPXkKK0NPTkZJR19QV0Q9eQorQ09ORklHX1JFQURMSU5LPXkKK0NPTkZJR19GRUFUVVJFX1JFQURMSU5LX0ZPTExPVz15CitDT05GSUdfUkVBTFBBVEg9eQorQ09ORklHX1JNPXkKK0NPTkZJR19STURJUj15CisjIENPTkZJR19GRUFUVVJFX1JNRElSX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfU0VRPXkKKyMgQ09ORklHX1NIQTFTVU0gaXMgbm90IHNldAorIyBDT05GSUdfU0hBMjU2U1VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQTUxMlNVTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSEEzU1VNIGlzIG5vdCBzZXQKK0NPTkZJR19TTEVFUD15CitDT05GSUdfRkVBVFVSRV9GQU5DWV9TTEVFUD15CisjIENPTkZJR19GRUFUVVJFX0ZMT0FUX1NMRUVQIGlzIG5vdCBzZXQKK0NPTkZJR19TT1JUPXkKK0NPTkZJR19GRUFUVVJFX1NPUlRfQklHPXkKKyMgQ09ORklHX1NQTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU1BMSVRfRkFOQ1kgaXMgbm90IHNldAorQ09ORklHX1NUQVQ9eQorQ09ORklHX0ZFQVRVUkVfU1RBVF9GT1JNQVQ9eQorQ09ORklHX1NUVFk9eQorIyBDT05GSUdfU1VNIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5DPXkKKyMgQ09ORklHX1RBQyBpcyBub3Qgc2V0CitDT05GSUdfVEFJTD15CitDT05GSUdfRkVBVFVSRV9GQU5DWV9UQUlMPXkKK0NPTkZJR19URUU9eQorIyBDT05GSUdfRkVBVFVSRV9URUVfVVNFX0JMT0NLX0lPIGlzIG5vdCBzZXQKK0NPTkZJR19UUlVFPXkKK0NPTkZJR19UVFk9eQorQ09ORklHX1VOQU1FPXkKKyMgQ09ORklHX1VORVhQQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVU5FWFBBTkRfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19VTklRPXkKK0NPTkZJR19VU0xFRVA9eQorIyBDT05GSUdfVVVERUNPREUgaXMgbm90IHNldAorIyBDT05GSUdfVVVFTkNPREUgaXMgbm90IHNldAorQ09ORklHX1dDPXkKKyMgQ09ORklHX0ZFQVRVUkVfV0NfTEFSR0UgaXMgbm90IHNldAorQ09ORklHX1dIT0FNST15CitDT05GSUdfWUVTPXkKKworIworIyBDb21tb24gb3B0aW9ucworIworQ09ORklHX0ZFQVRVUkVfVkVSQk9TRT15CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIGNwIGFuZCBtdgorIworIyBDT05GSUdfRkVBVFVSRV9QUkVTRVJWRV9IQVJETElOS1MgaXMgbm90IHNldAorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciBscywgbW9yZSBhbmQgdGVsbmV0CisjCitDT05GSUdfRkVBVFVSRV9BVVRPV0lEVEg9eQorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciBkZiwgZHUsIGxzCisjCitDT05GSUdfRkVBVFVSRV9IVU1BTl9SRUFEQUJMRT15CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIG1kNXN1bSwgc2hhMXN1bSwgc2hhMjU2c3VtLCBzaGE1MTJzdW0sIHNoYTNzdW0KKyMKK0NPTkZJR19GRUFUVVJFX01ENV9TSEExX1NVTV9DSEVDSz15CisKKyMKKyMgQ29uc29sZSBVdGlsaXRpZXMKKyMKK0NPTkZJR19DSFZUPXkKKyMgQ09ORklHX0ZHQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfQ0xFQVI9eQorQ09ORklHX0RFQUxMT0NWVD15CitDT05GSUdfRFVNUEtNQVA9eQorIyBDT05GSUdfS0JEX01PREUgaXMgbm90IHNldAorQ09ORklHX0xPQURGT05UPXkKK0NPTkZJR19MT0FES01BUD15CitDT05GSUdfT1BFTlZUPXkKK0NPTkZJR19SRVNFVD15CisjIENPTkZJR19SRVNJWkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9SRVNJWkVfUFJJTlQgaXMgbm90IHNldAorQ09ORklHX1NFVENPTlNPTEU9eQorIyBDT05GSUdfRkVBVFVSRV9TRVRDT05TT0xFX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRGT05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0VURk9OVF9URVhUVUFMX01BUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRVRGT05UX0RJUj0iIgorIyBDT05GSUdfU0VUS0VZQ09ERVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VUTE9HQ09OUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSE9XS0VZIGlzIG5vdCBzZXQKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgbG9hZGZvbnQgYW5kIHNldGZvbnQKKyMKKyMgQ09ORklHX0ZFQVRVUkVfTE9BREZPTlRfUFNGMiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xPQURGT05UX1JBVyBpcyBub3Qgc2V0CisKKyMKKyMgRGViaWFuIFV0aWxpdGllcworIworQ09ORklHX01LVEVNUD15CisjIENPTkZJR19QSVBFX1BST0dSRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19SVU5fUEFSVFM9eQorQ09ORklHX0ZFQVRVUkVfUlVOX1BBUlRTX0xPTkdfT1BUSU9OUz15CisjIENPTkZJR19GRUFUVVJFX1JVTl9QQVJUU19GQU5DWSBpcyBub3Qgc2V0CitDT05GSUdfU1RBUlRfU1RPUF9EQUVNT049eQorQ09ORklHX0ZFQVRVUkVfU1RBUlRfU1RPUF9EQUVNT05fRkFOQ1k9eQorQ09ORklHX0ZFQVRVUkVfU1RBUlRfU1RPUF9EQUVNT05fTE9OR19PUFRJT05TPXkKK0NPTkZJR19XSElDSD15CisKKyMKKyMgRWRpdG9ycworIworQ09ORklHX0FXSz15CitDT05GSUdfRkVBVFVSRV9BV0tfTElCTT15CitDT05GSUdfRkVBVFVSRV9BV0tfR05VX0VYVEVOU0lPTlM9eQorQ09ORklHX0NNUD15CitDT05GSUdfRElGRj15CisjIENPTkZJR19GRUFUVVJFX0RJRkZfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0RJRkZfRElSPXkKKyMgQ09ORklHX0VEIGlzIG5vdCBzZXQKK0NPTkZJR19QQVRDSD15CitDT05GSUdfU0VEPXkKK0NPTkZJR19WST15CitDT05GSUdfRkVBVFVSRV9WSV9NQVhfTEVOPTEwMjQKK0NPTkZJR19GRUFUVVJFX1ZJXzhCSVQ9eQorQ09ORklHX0ZFQVRVUkVfVklfQ09MT049eQorQ09ORklHX0ZFQVRVUkVfVklfWUFOS01BUks9eQorQ09ORklHX0ZFQVRVUkVfVklfU0VBUkNIPXkKKyMgQ09ORklHX0ZFQVRVUkVfVklfUkVHRVhfU0VBUkNIIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1ZJX1VTRV9TSUdOQUxTPXkKKyMgQ09ORklHX0ZFQVRVUkVfVklfRE9UX0NNRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZJX1JFQURPTkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVklfU0VUT1BUUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZJX1NFVCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9WSV9XSU5fUkVTSVpFPXkKKyMgQ09ORklHX0ZFQVRVUkVfVklfQVNLX1RFUk1JTkFMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1ZJX1VORE89eQorQ09ORklHX0ZFQVRVUkVfVklfVU5ET19RVUVVRT15CitDT05GSUdfRkVBVFVSRV9WSV9VTkRPX1FVRVVFX01BWD0yNTYKK0NPTkZJR19GRUFUVVJFX0FMTE9XX0VYRUM9eQorCisjCisjIEZpbmRpbmcgVXRpbGl0aWVzCisjCitDT05GSUdfRklORD15CitDT05GSUdfRkVBVFVSRV9GSU5EX1BSSU5UMD15CitDT05GSUdfRkVBVFVSRV9GSU5EX01USU1FPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTU1JTj15CitDT05GSUdfRkVBVFVSRV9GSU5EX1BFUk09eQorQ09ORklHX0ZFQVRVUkVfRklORF9UWVBFPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfWERFVj15CitDT05GSUdfRkVBVFVSRV9GSU5EX01BWERFUFRIPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTkVXRVI9eQorIyBDT05GSUdfRkVBVFVSRV9GSU5EX0lOVU0gaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRklORF9FWEVDPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfRVhFQ19QTFVTPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfVVNFUj15CitDT05GSUdfRkVBVFVSRV9GSU5EX0dST1VQPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTk9UPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfREVQVEg9eQorQ09ORklHX0ZFQVRVUkVfRklORF9QQVJFTj15CitDT05GSUdfRkVBVFVSRV9GSU5EX1NJWkU9eQorQ09ORklHX0ZFQVRVUkVfRklORF9QUlVORT15CisjIENPTkZJR19GRUFUVVJFX0ZJTkRfREVMRVRFIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUEFUSD15CitDT05GSUdfRkVBVFVSRV9GSU5EX1JFR0VYPXkKKyMgQ09ORklHX0ZFQVRVUkVfRklORF9DT05URVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRklORF9MSU5LUyBpcyBub3Qgc2V0CitDT05GSUdfR1JFUD15CitDT05GSUdfRkVBVFVSRV9HUkVQX0VHUkVQX0FMSUFTPXkKK0NPTkZJR19GRUFUVVJFX0dSRVBfRkdSRVBfQUxJQVM9eQorQ09ORklHX0ZFQVRVUkVfR1JFUF9DT05URVhUPXkKK0NPTkZJR19YQVJHUz15CisjIENPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfQ09ORklSTUFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfWEFSR1NfU1VQUE9SVF9RVU9URVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9YQVJHU19TVVBQT1JUX1RFUk1PUFQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9YQVJHU19TVVBQT1JUX1pFUk9fVEVSTSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9YQVJHU19TVVBQT1JUX1JFUExfU1RSPXkKKworIworIyBJbml0IFV0aWxpdGllcworIworIyBDT05GSUdfQk9PVENIQVJURCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JPT1RDSEFSVERfQkxPQVRFRF9IRUFERVIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CT09UQ0hBUlREX0NPTkZJR19GSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19IQUxUPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ0FMTF9URUxJTklUIGlzIG5vdCBzZXQKK0NPTkZJR19URUxJTklUX1BBVEg9IiIKKyMgQ09ORklHX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9VU0VfSU5JVFRBQiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0tJTExfUkVNT1ZFRCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9LSUxMX0RFTEFZPTAKKyMgQ09ORklHX0ZFQVRVUkVfSU5JVF9TQ1RUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOSVRfU1lTTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRVhUUkFfUVVJRVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTklUX0NPUkVEVU1QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfSU5JVF9URVJNSU5BTF9UWVBFPSIiCitDT05GSUdfTUVTRz15CisjIENPTkZJR19GRUFUVVJFX01FU0dfRU5BQkxFX09OTFlfR1JPVVAgaXMgbm90IHNldAorCisjCisjIExvZ2luL1Bhc3N3b3JkIE1hbmFnZW1lbnQgVXRpbGl0aWVzCisjCisjIENPTkZJR19BRERfU0hFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUkVNT1ZFX1NIRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0hBRE9XUEFTU1dEUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfQkJfUFdEX0dSUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfQkJfU0hBRE9XIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VfQkJfQ1JZUFQ9eQorIyBDT05GSUdfVVNFX0JCX0NSWVBUX1NIQSBpcyBub3Qgc2V0CisjIENPTkZJR19BRERVU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQUREVVNFUl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEVDS19OQU1FUyBpcyBub3Qgc2V0CitDT05GSUdfTEFTVF9JRD02MDAwMAorQ09ORklHX0ZJUlNUX1NZU1RFTV9JRD0xMDAKK0NPTkZJR19MQVNUX1NZU1RFTV9JRD05OTkKKyMgQ09ORklHX0FEREdST1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQURER1JPVVBfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQUREVVNFUl9UT19HUk9VUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUxVU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFTEdST1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfREVMX1VTRVJfRlJPTV9HUk9VUCBpcyBub3Qgc2V0CisjIENPTkZJR19HRVRUWSBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJTiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJTl9TRVNTSU9OX0FTX0NISUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lOX1NDUklQVFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9OT0xPR0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0VDVVJFVFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBU1NXRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BBU1NXRF9XRUFLX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUUFcgaXMgbm90IHNldAorIyBDT05GSUdfQ0hQQVNTV0QgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfREVGQVVMVF9QQVNTV0RfQUxHTz0iIgorIyBDT05GSUdfU1UgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TVV9TWVNMT0cgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TVV9DSEVDS1NfU0hFTExTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTE9HSU4gaXMgbm90IHNldAorIyBDT05GSUdfVkxPQ0sgaXMgbm90IHNldAorCisjCisjIExpbnV4IEV4dDIgRlMgUHJvZ3MKKyMKK0NPTkZJR19DSEFUVFI9eQorQ09ORklHX0ZTQ0s9eQorIyBDT05GSUdfTFNBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTkUyRlMgaXMgbm90IHNldAorCisjCisjIExpbnV4IE1vZHVsZSBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX01PRElORk8gaXMgbm90IHNldAorIyBDT05GSUdfTU9EUFJPQkVfU01BTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NT0RQUk9CRV9TTUFMTF9PUFRJT05TX09OX0NNRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NT0RQUk9CRV9TTUFMTF9DSEVDS19BTFJFQURZX0xPQURFRCBpcyBub3Qgc2V0CitDT05GSUdfSU5TTU9EPXkKK0NPTkZJR19STU1PRD15CitDT05GSUdfTFNNT0Q9eQorIyBDT05GSUdfRkVBVFVSRV9MU01PRF9QUkVUVFlfMl82X09VVFBVVCBpcyBub3Qgc2V0CitDT05GSUdfTU9EUFJPQkU9eQorIyBDT05GSUdfRkVBVFVSRV9NT0RQUk9CRV9CTEFDS0xJU1QgaXMgbm90IHNldAorQ09ORklHX0RFUE1PRD15CisKKyMKKyMgT3B0aW9ucyBjb21tb24gdG8gbXVsdGlwbGUgbW9kdXRpbHMKKyMKKyMgQ09ORklHX0ZFQVRVUkVfMl80X01PRFVMRVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNNT0RfVFJZX01NQVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNNT0RfVkVSU0lPTl9DSEVDS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9LU1lNT09QU19TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX0xPQURJTktNRU0gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNNT0RfTE9BRF9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNNT0RfTE9BRF9NQVBfRlVMTCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9DSEVDS19UQUlOVEVEX01PRFVMRT15CitDT05GSUdfRkVBVFVSRV9NT0RVVElMU19BTElBUz15CitDT05GSUdfRkVBVFVSRV9NT0RVVElMU19TWU1CT0xTPXkKK0NPTkZJR19ERUZBVUxUX01PRFVMRVNfRElSPSIvbGliL21vZHVsZXMiCitDT05GSUdfREVGQVVMVF9ERVBNT0RfRklMRT0ibW9kdWxlcy5kZXAiCisKKyMKKyMgTGludXggU3lzdGVtIFV0aWxpdGllcworIworIyBDT05GSUdfQkxPQ0tERVYgaXMgbm90IHNldAorIyBDT05GSUdfRkFUQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfRlNUUklNPXkKKyMgQ09ORklHX01ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NREVWX0NPTkYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NREVWX1JFTkFNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01ERVZfUkVOQU1FX1JFR0VYUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01ERVZfRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01ERVZfTE9BRF9GSVJNV0FSRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRVYgaXMgbm90IHNldAorIyBDT05GSUdfQUNQSUQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BQ1BJRF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLSUQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CTEtJRF9UWVBFIGlzIG5vdCBzZXQKK0NPTkZJR19ETUVTRz15CitDT05GSUdfRkVBVFVSRV9ETUVTR19QUkVUVFk9eQorQ09ORklHX0ZCU0VUPXkKK0NPTkZJR19GRUFUVVJFX0ZCU0VUX0ZBTkNZPXkKK0NPTkZJR19GRUFUVVJFX0ZCU0VUX1JFQURNT0RFPXkKKyMgQ09ORklHX0ZERkxVU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkRGT1JNQVQgaXMgbm90IHNldAorQ09ORklHX0ZESVNLPXkKKyMgQ09ORklHX0ZESVNLX1NVUFBPUlRfTEFSR0VfRElTS1MgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRkRJU0tfV1JJVEFCTEU9eQorIyBDT05GSUdfRkVBVFVSRV9BSVhfTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TR0lfTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TVU5fTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9PU0ZfTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9HUFRfTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9GRElTS19BRFZBTkNFRCBpcyBub3Qgc2V0CisjIENPTkZJR19GSU5ERlMgaXMgbm90IHNldAorQ09ORklHX0ZMT0NLPXkKKyMgQ09ORklHX0ZSRUVSQU1ESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTQ0tfTUlOSVggaXMgbm90IHNldAorIyBDT05GSUdfTUtGU19FWFQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01LRlNfTUlOSVggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NSU5JWDIgaXMgbm90IHNldAorIyBDT05GSUdfTUtGU19SRUlTRVIgaXMgbm90IHNldAorIyBDT05GSUdfTUtGU19WRkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFVE9QVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0dFVE9QVF9MT05HIGlzIG5vdCBzZXQKK0NPTkZJR19IRVhEVU1QPXkKKyMgQ09ORklHX0ZFQVRVUkVfSEVYRFVNUF9SRVZFUlNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19IV0NMT0NLPXkKK0NPTkZJR19GRUFUVVJFX0hXQ0xPQ0tfTE9OR19PUFRJT05TPXkKK0NPTkZJR19GRUFUVVJFX0hXQ0xPQ0tfQURKVElNRV9GSFM9eQorIyBDT05GSUdfSVBDUk0gaXMgbm90IHNldAorIyBDT05GSUdfSVBDUyBpcyBub3Qgc2V0CitDT05GSUdfTE9TRVRVUD15CisjIENPTkZJR19MU1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19MU1VTQiBpcyBub3Qgc2V0CitDT05GSUdfTUtTV0FQPXkKKyMgQ09ORklHX0ZFQVRVUkVfTUtTV0FQX1VVSUQgaXMgbm90IHNldAorQ09ORklHX01PUkU9eQorQ09ORklHX01PVU5UPXkKKyMgQ09ORklHX0ZFQVRVUkVfTU9VTlRfRkFLRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PVU5UX1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NT1VOVF9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTU9VTlRfTEFCRUwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfTU9VTlRfTkZTPXkKKyMgQ09ORklHX0ZFQVRVUkVfTU9VTlRfQ0lGUyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9NT1VOVF9GTEFHUz15CitDT05GSUdfRkVBVFVSRV9NT1VOVF9GU1RBQj15CitDT05GSUdfUElWT1RfUk9PVD15CitDT05GSUdfUkRBVEU9eQorIyBDT05GSUdfUkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFEUFJPRklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENXQUtFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDUklQVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1JJUFRSRVBMQVkgaXMgbm90IHNldAorIyBDT05GSUdfU0VUQVJDSCBpcyBub3Qgc2V0CitDT05GSUdfU1dBUE9OT0ZGPXkKK0NPTkZJR19GRUFUVVJFX1NXQVBPTl9ESVNDQVJEPXkKK0NPTkZJR19GRUFUVVJFX1NXQVBPTl9QUkk9eQorQ09ORklHX1NXSVRDSF9ST09UPXkKK0NPTkZJR19VTU9VTlQ9eQorQ09ORklHX0ZFQVRVUkVfVU1PVU5UX0FMTD15CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIG1vdW50L3Vtb3VudAorIworQ09ORklHX0ZFQVRVUkVfTU9VTlRfTE9PUD15CitDT05GSUdfRkVBVFVSRV9NT1VOVF9MT09QX0NSRUFURT15CisjIENPTkZJR19GRUFUVVJFX01UQUJfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19WT0xVTUVJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0JUUkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfRVhGQVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9FWFQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9GMkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfRkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfSVNPOTY2MCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0pGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0xJTlVYUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0xJTlVYU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0xVS1MgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9OSUxGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX05URlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9PQ0ZTMiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1JFSVNFUkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfUk9NRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1NZU1YgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9VREYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9YRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVXRpbGl0aWVzCisjCisjIENPTkZJR19DT05TUFkgaXMgbm90IHNldAorIyBDT05GSUdfQ1JPTkQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DUk9ORF9EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ1JPTkRfQ0FMTF9TRU5ETUFJTCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9DUk9ORF9ESVI9IiIKK0NPTkZJR19MRVNTPXkKK0NPTkZJR19GRUFUVVJFX0xFU1NfTUFYTElORVM9OTk5OTk5OQorQ09ORklHX0ZFQVRVUkVfTEVTU19CUkFDS0VUUz15CitDT05GSUdfRkVBVFVSRV9MRVNTX0ZMQUdTPXkKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19NQVJLUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xFU1NfUkVHRVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19XSU5DSCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xFU1NfQVNLX1RFUk1JTkFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19EQVNIQ01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19MSU5FTlVNUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQU5EV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkFORERVTVAgaXMgbm90IHNldAorQ09ORklHX1JGS0lMTD15CisjIENPTkZJR19TRVRTRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NFVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RBU0tTRVRfRkFOQ1kgaXMgbm90IHNldAorIyBDT05GSUdfVUJJQVRUQUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSURFVEFDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VQklNS1ZPTCBpcyBub3Qgc2V0CisjIENPTkZJR19VQklSTVZPTCBpcyBub3Qgc2V0CisjIENPTkZJR19VQklSU1ZPTCBpcyBub3Qgc2V0CisjIENPTkZJR19VQklVUERBVEVWT0wgaXMgbm90IHNldAorIyBDT05GSUdfV0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BREpUSU1FWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQkNPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NPTVBSRVNTX0JCQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRVAgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQkVFUF9GUkVRPTAKK0NPTkZJR19GRUFUVVJFX0JFRVBfTEVOR1RIX01TPTAKKyMgQ09ORklHX0NIQVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEFUX05PRkFJTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfVFRZX0hJRkkgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEFUX0lNUExJQ0lUX0NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9TV0FMTE9XX09QVFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEFUX1NFTkRfRVNDQVBFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfVkFSX0FCT1JUX0xFTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfQ0xSX0FCT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JPTlRBQiBpcyBub3Qgc2V0CitDT05GSUdfREM9eQorIyBDT05GSUdfRkVBVFVSRV9EQ19MSUJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVkZTRCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZGU0RfTU9ETE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZGU0RfRkdfTlAgaXMgbm90IHNldAorIyBDT05GSUdfREVWRlNEX1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9ERVZGUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZNRU0gaXMgbm90IHNldAorIyBDT05GSUdfRUpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9FSkVDVF9TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCU1BMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZMQVNIQ1AgaXMgbm90IHNldAorIyBDT05GSUdfRkxBU0hfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19GTEFTSF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfRkxBU0hfRVJBU0VBTEwgaXMgbm90IHNldAorIyBDT05GSUdfSU9OSUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRllEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MQVNUX1NNQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEFTVF9GQU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19IRFBBUk0gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fR0VUX0lERU5USVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSERQQVJNX0hESU9fU0NBTl9IV0lGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSERQQVJNX0hESU9fVU5SRUdJU1RFUl9IV0lGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSERQQVJNX0hESU9fRFJJVkVfUkVTRVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19UUklTVEFURV9IV0lGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSERQQVJNX0hESU9fR0VUU0VUX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUtFREVWUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01BS0VERVZTX0xFQUYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NQUtFREVWU19UQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQU4gaXMgbm90IHNldAorQ09ORklHX01JQ1JPQ09NPXkKKyMgQ09ORklHX01PVU5UUE9JTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVQgaXMgbm90IHNldAorIyBDT05GSUdfUkFJREFVVE9SVU4gaXMgbm90IHNldAorIyBDT05GSUdfUkVBREFIRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTkxFVkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVFNJRCBpcyBub3Qgc2V0CitDT05GSUdfU1RSSU5HUz15CitDT05GSUdfVElNRT15CisjIENPTkZJR19USU1FT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RUWVNJWkUgaXMgbm90IHNldAorIyBDT05GSUdfVk9MTkFNRSBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29ya2luZyBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX05BTUVJRiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX05BTUVJRl9FWFRFTkRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19OQkRDTElFTlQgaXMgbm90IHNldAorQ09ORklHX05DPXkKKyMgQ09ORklHX05DX1NFUlZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19OQ19FWFRSQSBpcyBub3Qgc2V0CisjIENPTkZJR19OQ18xMTBfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19QSU5HPXkKK0NPTkZJR19QSU5HNj15CitDT05GSUdfRkVBVFVSRV9GQU5DWV9QSU5HPXkKKyMgQ09ORklHX1dIT0lTIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0lQVjY9eQorIyBDT05GSUdfRkVBVFVSRV9VTklYX0xPQ0FMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1BSRUZFUl9JUFY0X0FERFJFU1M9eQorIyBDT05GSUdfVkVSQk9TRV9SRVNPTFVUSU9OX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUlAgaXMgbm90IHNldAorIyBDT05GSUdfQVJQSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSQ1RMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQlJDVExfRkFOQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CUkNUTF9TSE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROU0QgaXMgbm90IHNldAorIyBDT05GSUdfRVRIRVJfV0FLRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQUtFSURFTlREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUEQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9GVFBfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9GVFBEX0FDQ0VQVF9CUk9LRU5fTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZUUF9BVVRIRU5USUNBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GVFBHRVQgaXMgbm90IHNldAorIyBDT05GSUdfRlRQUFVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRlRQR0VUUFVUX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSE9TVE5BTUU9eQorIyBDT05GSUdfSFRUUEQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9SQU5HRVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9TRVRVSUQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9CQVNJQ19BVVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfQVVUSF9NRDUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9DR0kgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9DT05GSUdfV0lUSF9TQ1JJUFRfSU5URVJQUiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX1NFVF9SRU1PVEVfUE9SVF9UT19FTlYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9FTkNPREVfVVJMX1NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0VSUk9SX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfUFJPWFkgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9HWklQIGlzIG5vdCBzZXQKK0NPTkZJR19JRkNPTkZJRz15CitDT05GSUdfRkVBVFVSRV9JRkNPTkZJR19TVEFUVVM9eQorIyBDT05GSUdfRkVBVFVSRV9JRkNPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSUZDT05GSUdfTUVNU1RBUlRfSU9BRERSX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9JRkNPTkZJR19IVz15CisjIENPTkZJR19GRUFUVVJFX0lGQ09ORklHX0JST0FEQ0FTVF9QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lGRU5TTEFWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRlBMVUdEIGlzIG5vdCBzZXQKK0NPTkZJR19JRlVQRE9XTj15CitDT05GSUdfSUZVUERPV05fSUZTVEFURV9QQVRIPSIvdmFyL3J1bi9pZnN0YXRlIgorIyBDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9JUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQX0JVSUxUSU4gaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSUZDT05GSUdfQlVJTFRJTj15CitDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9JUFY0PXkKK0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQVjY9eQorQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fTUFQUElORz15CitDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9FWFRFUk5BTF9ESENQPXkKKyMgQ09ORklHX0lORVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfU1VQUE9SVF9CVUlMVElOX0VDSE8gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9TVVBQT1JUX0JVSUxUSU5fRElTQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1NVUFBPUlRfQlVJTFRJTl9USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfU1VQUE9SVF9CVUlMVElOX0RBWVRJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9TVVBQT1JUX0JVSUxUSU5fQ0hBUkdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1JQQyBpcyBub3Qgc2V0CitDT05GSUdfSVA9eQorQ09ORklHX0ZFQVRVUkVfSVBfQUREUkVTUz15CitDT05GSUdfRkVBVFVSRV9JUF9MSU5LPXkKK0NPTkZJR19GRUFUVVJFX0lQX1JPVVRFPXkKK0NPTkZJR19GRUFUVVJFX0lQX1RVTk5FTD15CisjIENPTkZJR19GRUFUVVJFX0lQX1JVTEUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JUF9TSE9SVF9GT1JNUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lQX1JBUkVfUFJPVE9DT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQUREUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUExJTksgaXMgbm90IHNldAorIyBDT05GSUdfSVBST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFRVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFJVTEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBDQUxDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSVBDQUxDX0ZBTkNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSVBDQUxDX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUU1RBVD15CisjIENPTkZJR19GRUFUVVJFX05FVFNUQVRfV0lERSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX05FVFNUQVRfUFJHIGlzIG5vdCBzZXQKK0NPTkZJR19OU0xPT0tVUD15CisjIENPTkZJR19OVFBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTlRQRF9TRVJWRVIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9OVFBEX0NPTkYgaXMgbm90IHNldAorIyBDT05GSUdfUFNDQU4gaXMgbm90IHNldAorQ09ORklHX1JPVVRFPXkKKyMgQ09ORklHX1NMQVRUQUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUFNWRCBpcyBub3Qgc2V0CitDT05GSUdfVEVMTkVUPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEVMTkVUX1RUWVBFIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1RFTE5FVF9BVVRPTE9HSU49eQorIyBDT05GSUdfVEVMTkVURCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RFTE5FVERfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RFTE5FVERfSU5FVERfV0FJVCBpcyBub3Qgc2V0CitDT05GSUdfVEZUUD15CisjIENPTkZJR19URlRQRCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIHRmdHAvdGZ0cGQKKyMKK0NPTkZJR19GRUFUVVJFX1RGVFBfR0VUPXkKK0NPTkZJR19GRUFUVVJFX1RGVFBfUFVUPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEZUUF9CTE9DS1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9URlRQX1BST0dSRVNTX0JBUiBpcyBub3Qgc2V0CisjIENPTkZJR19URlRQX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFDRVJPVVRFPXkKKyMgQ09ORklHX1RSQUNFUk9VVEU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVFJBQ0VST1VURV9WRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVFJBQ0VST1VURV9TT1VSQ0VfUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UUkFDRVJPVVRFX1VTRV9JQ01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTkNUTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RVTkNUTF9VRyBpcyBub3Qgc2V0CisjIENPTkZJR19VREhDUEM2IGlzIG5vdCBzZXQKK0NPTkZJR19VREhDUEQ9eQorIyBDT05GSUdfREhDUFJFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1QTEVBU0VTPXkKKyMgQ09ORklHX0ZFQVRVUkVfVURIQ1BEX1dSSVRFX0xFQVNFU19FQVJMWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1VESENQRF9CQVNFX0lQX09OX01BQyBpcyBub3Qgc2V0CitDT05GSUdfREhDUERfTEVBU0VTX0ZJTEU9Ii92YXIvbGliL21pc2MvdWRoY3BkLmxlYXNlcyIKK0NPTkZJR19VREhDUEM9eQorQ09ORklHX0ZFQVRVUkVfVURIQ1BDX0FSUElORz15CitDT05GSUdfRkVBVFVSRV9VREhDUENfU0FOSVRJWkVPUFQ9eQorIyBDT05GSUdfRkVBVFVSRV9VREhDUF9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VREhDUF9ERUJVRz0wCisjIENPTkZJR19GRUFUVVJFX1VESENQX1JGQzMzOTcgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9VREhDUF84MDIxUSBpcyBub3Qgc2V0CitDT05GSUdfVURIQ1BDX0RFRkFVTFRfU0NSSVBUPSIvdXNyL3NoYXJlL3VkaGNwYy9kZWZhdWx0LnNjcmlwdCIKK0NPTkZJR19VREhDUENfU0xBQ0tfRk9SX0JVR0dZX1NFUlZFUlM9ODAKK0NPTkZJR19JRlVQRE9XTl9VREhDUENfQ01EX09QVElPTlM9Ii1SIC1uIgorIyBDT05GSUdfVURQU1ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1dHRVQ9eQorQ09ORklHX0ZFQVRVUkVfV0dFVF9TVEFUVVNCQVI9eQorQ09ORklHX0ZFQVRVUkVfV0dFVF9BVVRIRU5USUNBVElPTj15CitDT05GSUdfRkVBVFVSRV9XR0VUX0xPTkdfT1BUSU9OUz15CitDT05GSUdfRkVBVFVSRV9XR0VUX1RJTUVPVVQ9eQorIyBDT05GSUdfWkNJUCBpcyBub3Qgc2V0CisKKyMKKyMgUHJpbnQgVXRpbGl0aWVzCisjCisjIENPTkZJR19MUEQgaXMgbm90IHNldAorIyBDT05GSUdfTFBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xQUSBpcyBub3Qgc2V0CisKKyMKKyMgTWFpbCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX01BS0VNSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX01JTUVfQ0hBUlNFVD0iIgorIyBDT05GSUdfUE9QTUFJTERJUiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BPUE1BSUxESVJfREVMSVZFUlkgaXMgbm90IHNldAorIyBDT05GSUdfUkVGT1JNSU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUkVGT1JNSU1FX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5ETUFJTCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2VzcyBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0lPU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19MU09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19OTUVURVIgaXMgbm90IHNldAorIyBDT05GSUdfUE1BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QU1RSRUUgaXMgbm90IHNldAorIyBDT05GSUdfUFdEWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUVNQ0FQIGlzIG5vdCBzZXQKK0NPTkZJR19UT1A9eQorQ09ORklHX0ZFQVRVUkVfVE9QX0NQVV9VU0FHRV9QRVJDRU5UQUdFPXkKK0NPTkZJR19GRUFUVVJFX1RPUF9DUFVfR0xPQkFMX1BFUkNFTlRTPXkKKyMgQ09ORklHX0ZFQVRVUkVfVE9QX1NNUF9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UT1BfREVDSU1BTFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UT1BfU01QX1BST0NFU1MgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UT1BNRU0gaXMgbm90IHNldAorQ09ORklHX1VQVElNRT15CisjIENPTkZJR19GRUFUVVJFX1VQVElNRV9VVE1QX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZSRUU9eQorQ09ORklHX0ZVU0VSPXkKK0NPTkZJR19LSUxMPXkKK0NPTkZJR19LSUxMQUxMPXkKKyMgQ09ORklHX0tJTExBTEw1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BHUkVQIGlzIG5vdCBzZXQKK0NPTkZJR19QSURPRj15CisjIENPTkZJR19GRUFUVVJFX1BJRE9GX1NJTkdMRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BJRE9GX09NSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEtJTEwgaXMgbm90IHNldAorQ09ORklHX1BTPXkKK0NPTkZJR19GRUFUVVJFX1BTX1dJREU9eQorQ09ORklHX0ZFQVRVUkVfUFNfTE9ORz15CisjIENPTkZJR19GRUFUVVJFX1BTX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9QU19BRERJVElPTkFMX0NPTFVNTlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9QU19VTlVTVUFMX1NZU1RFTVMgaXMgbm90IHNldAorQ09ORklHX1JFTklDRT15CitDT05GSUdfQkJfU1lTQ1RMPXkKKyMgQ09ORklHX0ZFQVRVUkVfU0hPV19USFJFQURTIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSD15CisKKyMKKyMgUnVuaXQgVXRpbGl0aWVzCisjCisjIENPTkZJR19SVU5TViBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5TVkRJUiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1JVTlNWRElSX0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19TViBpcyBub3Qgc2V0CitDT05GSUdfU1ZfREVGQVVMVF9TRVJWSUNFX0RJUj0iIgorIyBDT05GSUdfU1ZMT0dEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUFNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVFVJREdJRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTlZVSURHSUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5WRElSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPRlRMSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSENPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQ09OX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRVRFTkZPUkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFVFNFQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19MT0FEX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NQVRDSFBBVEhDT04gaXMgbm90IHNldAorIyBDT05GSUdfUkVTVE9SRUNPTiBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5DT04gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9SVU5DT05fTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTElOVVhFTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVEVORk9SQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0VURklMRVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TRVRGSUxFU19DSEVDS19PUFRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0VUU0VCT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFU1RBVFVTIGlzIG5vdCBzZXQKKworIworIyBTaGVsbHMKKyMKK0NPTkZJR19BU0g9eQorQ09ORklHX0FTSF9CQVNIX0NPTVBBVD15CisjIENPTkZJR19BU0hfSURMRV9USU1FT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19BU0hfSk9CX0NPTlRST0w9eQorQ09ORklHX0FTSF9BTElBUz15CitDT05GSUdfQVNIX0dFVE9QVFM9eQorQ09ORklHX0FTSF9CVUlMVElOX0VDSE89eQorQ09ORklHX0FTSF9CVUlMVElOX1BSSU5URj15CitDT05GSUdfQVNIX0JVSUxUSU5fVEVTVD15CitDT05GSUdfQVNIX0hFTFA9eQorIyBDT05GSUdfQVNIX0NNRENNRCBpcyBub3Qgc2V0CisjIENPTkZJR19BU0hfTUFJTCBpcyBub3Qgc2V0CitDT05GSUdfQVNIX09QVElNSVpFX0ZPUl9TSVpFPXkKKyMgQ09ORklHX0FTSF9SQU5ET01fU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQVNIX0VYUEFORF9QUk1UPXkKKyMgQ09ORklHX0NUVFlIQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0ggaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9CQVNIX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0JSQUNFX0VYUEFOU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0hFTFAgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9JTlRFUkFDVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX1NBVkVISVNUT1JZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfSk9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0lGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfTE9PUFMgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9DQVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfRlVOQ1RJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfTE9DQUwgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9SQU5ET01fU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0VYUE9SVF9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfTU9ERV9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TSCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9TSF9JU19BU0g9eQorIyBDT05GSUdfRkVBVFVSRV9TSF9JU19IVVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0hfSVNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JBU0hfSVNfQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQkFTSF9JU19IVVNIIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0JBU0hfSVNfTk9ORT15CitDT05GSUdfU0hfTUFUSF9TVVBQT1JUPXkKKyMgQ09ORklHX1NIX01BVEhfU1VQUE9SVF82NCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9TSF9FWFRSQV9RVUlFVD15CisjIENPTkZJR19GRUFUVVJFX1NIX1NUQU5EQUxPTkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSF9OT0ZPUksgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfU0hfSElTVEZJTEVTSVpFPXkKKworIworIyBTeXN0ZW0gTG9nZ2luZyBVdGlsaXRpZXMKKyMKK0NPTkZJR19TWVNMT0dEPXkKK0NPTkZJR19GRUFUVVJFX1JPVEFURV9MT0dGSUxFPXkKK0NPTkZJR19GRUFUVVJFX1JFTU9URV9MT0c9eQorQ09ORklHX0ZFQVRVUkVfU1lTTE9HRF9EVVA9eQorQ09ORklHX0ZFQVRVUkVfU1lTTE9HRF9DRkc9eQorQ09ORklHX0ZFQVRVUkVfU1lTTE9HRF9SRUFEX0JVRkZFUl9TSVpFPTI1NgorQ09ORklHX0ZFQVRVUkVfSVBDX1NZU0xPRz15CitDT05GSUdfRkVBVFVSRV9JUENfU1lTTE9HX0JVRkZFUl9TSVpFPTY0CitDT05GSUdfTE9HUkVBRD15CitDT05GSUdfRkVBVFVSRV9MT0dSRUFEX1JFRFVDRURfTE9DS0lORz15CitDT05GSUdfRkVBVFVSRV9LTVNHX1NZU0xPRz15CitDT05GSUdfS0xPR0Q9eQorCisjCisjIGtsb2dkIHNob3VsZCBub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIHN5c2xvZyB0byBrZXJuZWwgcHJpbnRrIGJ1ZmZlcgorIworQ09ORklHX0ZFQVRVUkVfS0xPR0RfS0xPR0NUTD15CitDT05GSUdfTE9HR0VSPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2ZhaWxfb25fbm9fbWVkaWEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9mYWlsX29uX25vX21lZGlhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NDVmMTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9mYWlsX29uX25vX21lZGlhLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGUgY3VycmVudCBiZWhhdmlvdXIgb2YgYnVzeWJveCBpcyB0byB0cnkgYWxsIGZzdHlwZSB3aGVuIGF1dG9tb3VudGluZworZXZlbiB3aGVuIG5vIG1lZGlhIGV4aXN0cy4gIFRoZSB1dGlsLWxpbnV4IG1vdW50IGNvbW1hbmQgYmFpbHMgd2hlbiBubworbWVkaWEgZXhpc3RzLCBzbyBjaGFuZ2UgdGhlIGJlaGF2aW91ciBvZiBidXN5Ym94IHRvIGRvIHRoZSBzYW1lLgorCitJdCBjb3VsZCBhbHNvIGJlIGFyZ3VlZCB0aGF0IHRoZSBLRVJOX0lORk8gbWVzc2FnZSBmcm9tIGJ0cmZzIGNvdWxkIGJlCityZW1vdmVkLCBidXQgdGhhdCB3b3VsZCBiZSBoYXJkZXIgdG8gYWNjb21wbGlzaC4KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCisKK0luZGV4OiBidXN5Ym94LTEuMjAuMi91dGlsLWxpbnV4L21vdW50LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBidXN5Ym94LTEuMjAuMi5vcmlnL3V0aWwtbGludXgvbW91bnQuYworKysrIGJ1c3lib3gtMS4yMC4yL3V0aWwtbGludXgvbW91bnQuYworQEAgLTU5OCw3ICs1OTgsMTMgQEAgc3RhdGljIGludCBtb3VudF9pdF9ub3coc3RydWN0IG1udGVudCAqbQorIAkJCQlicmVhazsKKyAJCQllcnJubyA9IGVycm5vX3NhdmU7CisgCQl9CistCisrCQkvKgorKwkJICogQnJlYWsgaWYgdGhlcmUgaXMgbm8gbWVkaWEsIG5vIHBvaW50IHJldHJ5aW5nIGZvciBhbGwKKysJCSAqIGZzIHR5cGVzIHNpbmNlIHRoZXJlIGlzIG5vIG1lZGlhIGF2YWlsYWJsZQorKwkJICovCisrCQlpZiAocmMgPT0gLTEgJiYgZXJybm8gPT0gRU5PTUVESVVNKSB7CisrCQkJYmJfcGVycm9yX21zZ19hbmRfZGllKCJtb3VudGluZyAlcyBvbiAlcyBmYWlsZWQiLCBtcC0+bW50X2ZzbmFtZSwgbXAtPm1udF9kaXIpOworKwkJfQorIAkJaWYgKCFyYyB8fCAodmZzZmxhZ3MgJiBNU19SRE9OTFkpIHx8IChlcnJubyAhPSBFQUNDRVMgJiYgZXJybm8gIT0gRVJPRlMpKQorIAkJCWJyZWFrOworIAkJaWYgKCEodmZzZmxhZ3MgJiBNU19TSUxFTlQpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZ2V0X2hlYWRlcl90YXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9nZXRfaGVhZGVyX3Rhci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTUyOGZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZ2V0X2hlYWRlcl90YXIucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyMgY29weSBjb21taXQgbWVzc2FnZSBmcm9tIE9FIGFzIHRoZSBwYXRjaCBjb21tZW50OgorIyAgICBjb21taXQgNWEwZTFkNDczY2E3YWNhNWZmZWZmZmU5YTJlYzQ0YWU3YTFmMzViYworIyAgICBBdXRob3I6IEZyYW5zIE1ldWxlbmJyb2VrcyA8ZnJhbnNtZXVsZW5icm9la3NAZ21haWwuY29tPgorIyAgICBEYXRlOiAgIFdlZCBGZWIgMTEgMjI6NDA6MjEgMjAwOSArMDEwMAorIworIyAgICBidXN5Ym94OiBmaXggdGFyIHByb2JsZW0gd2l0aCBmaWxlbmFtZXMgdGhhdCBhcmUgZXhhY3RseSAxMDAgYnl0ZXMKKyMKKyMgYWJvdmUgY29tbWVudCBhZGRlZCBieSBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4sIDIwMTAtMDctMDYKKworLS0tIGJ1c3lib3gtMS4xMy4yL2FyY2hpdmFsL2xpYmFyY2hpdmUvZ2V0X2hlYWRlcl90YXIuYy5vcmlnCTIwMDgtMTEtMDkgMTg6Mjg6MDIuMDAwMDAwMDAwICswMTAwCisrKysgYnVzeWJveC0xLjEzLjIvYXJjaGl2YWwvbGliYXJjaGl2ZS9nZXRfaGVhZGVyX3Rhci5jCTIwMDktMDItMTEgMjI6MzQ6NTIuMDAwMDAwMDAwICswMTAwCitAQCAtMjUyLDYgKzI1Miw4IEBACisgCQkJZmlsZV9oZWFkZXItPm5hbWUgPSBjb25jYXRfcGF0aF9maWxlKHRhci5wcmVmaXgsIHRhci5uYW1lKTsKKyAJCX0gZWxzZQorIAkJCWZpbGVfaGVhZGVyLT5uYW1lID0geHN0cmR1cCh0YXIubmFtZSk7CisrCQlpZiAoc3RybGVuKGZpbGVfaGVhZGVyLT5uYW1lKSA+IDEwMCkgCisrCQkJZmlsZV9oZWFkZXItPm5hbWVbMTAwXSA9IDA7CisgCX0KKyAKKyAJLyogU2V0IGJpdHMgMTItMTUgb2YgdGhlIGZpbGVzIG1vZGUgKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2dldG9wdHMuY2ZnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZ2V0b3B0cy5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiMGE0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2dldG9wdHMuY2ZnCkBAIC0wLDAgKzEsMyBAQAorQ09ORklHX0dFVE9QVD15CitDT05GSUdfTE9OR19PUFRTPXkKK0NPTkZJR19GRUFUVVJFX0dFVE9QVF9MT05HPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2xvZ2luLXV0aWxpdGllcy5jZmcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9sb2dpbi11dGlsaXRpZXMuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOWIyZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9sb2dpbi11dGlsaXRpZXMuY2ZnCkBAIC0wLDAgKzEsMTMgQEAKK0NPTkZJR19GRUFUVVJFX1NIQURPV1BBU1NXRFM9eQorQ09ORklHX0FERFVTRVI9eQorQ09ORklHX0ZFQVRVUkVfQUREVVNFUl9MT05HX09QVElPTlM9eQorQ09ORklHX0FEREdST1VQPXkKK0NPTkZJR19GRUFUVVJFX0FEREdST1VQX0xPTkdfT1BUSU9OUz15CitDT05GSUdfREVMVVNFUj15CitDT05GSUdfREVMR1JPVVA9eQorQ09ORklHX0dFVFRZPXkKK0NPTkZJR19MT0dJTj15CitDT05GSUdfUEFTU1dEPXkKK0NPTkZJR19TVT15CitDT05GSUdfU1VMT0dJTj15CitDT05GSUdfVkxPQ0s9eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbW91bnQtdmlhLWxhYmVsLmNmZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L21vdW50LXZpYS1sYWJlbC5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlN2FiMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L21vdW50LXZpYS1sYWJlbC5jZmcKQEAgLTAsMCArMSw5IEBACitDT05GSUdfQkxLSUQ9eQorQ09ORklHX0ZFQVRVUkVfQkxLSURfVFlQRT15CitDT05GSUdfRkVBVFVSRV9NT1VOVF9MQUJFTD15CitDT05GSUdfVk9MVU1FSUQ9eQorQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfQlRSRlM9eQorQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfRVhUPXkKK0NPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0YyRlM9eQorQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfRkFUPXkKK0NPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1NRVUFTSEZTPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3JlY29nbml6ZV9jb25ubWFuZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3JlY29nbml6ZV9jb25ubWFuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDJjNzRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvcmVjb2duaXplX2Nvbm5tYW5kLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1RoaXMgYWRkcyBjb25ubWFuZCB0byB0aGUgbGlzdCBvZiBrbm93IGRoY3AgY2xpZW50cworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLUNvcmVdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGJ1c3lib3gtMS4yMi4xL25ldHdvcmtpbmcvaWZ1cGRvd24uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJ1c3lib3gtMS4yMi4xLm9yaWcvbmV0d29ya2luZy9pZnVwZG93bi5jCisrKysgYnVzeWJveC0xLjIyLjEvbmV0d29ya2luZy9pZnVwZG93bi5jCitAQCAtNTIxLDYgKzUyMSwxMCBAQCBzdHJ1Y3QgZGhjcF9jbGllbnRfdCB7CisgfTsKKyAKKyBzdGF0aWMgY29uc3Qgc3RydWN0IGRoY3BfY2xpZW50X3QgZXh0X2RoY3BfY2xpZW50c1tdID0geworKwl7ICJjb25ubWFuZCIsCisrCQkidHJ1ZSIsCisrCQkidHJ1ZSIsCisrCX0sCisgCXsgImRoY3BjZCIsCisgCQkiZGhjcGNkW1sgLWggJWhvc3RuYW1lJV1dW1sgLWkgJXZlbmRvciVdXVtbIC1JICVjbGllbnQlXV1bWyAtbCAlbGVhc2V0aW1lJV1dICVpZmFjZSUiLAorIAkJImRoY3BjZCAtayAlaWZhY2UlIiwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3NoYTFzdW0uY2ZnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvc2hhMXN1bS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBlNzJkOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3NoYTFzdW0uY2ZnCkBAIC0wLDAgKzEgQEAKK0NPTkZJR19TSEExU1VNPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3NoYTI1NnN1bS5jZmcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9zaGEyNTZzdW0uY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNjUyYWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9zaGEyNTZzdW0uY2ZnCkBAIC0wLDAgKzEgQEAKK0NPTkZJR19TSEEyNTZTVU09eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfMS4yMy4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfMS4yMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZDlmOTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF8xLjIzLjIuYmIKQEAgLTAsMCArMSw1MCBAQAorcmVxdWlyZSBidXN5Ym94LmluYworCitTUkNfVVJJID0gImh0dHA6Ly93d3cuYnVzeWJveC5uZXQvZG93bmxvYWRzL2J1c3lib3gtJHtQVn0udGFyLmJ6MjtuYW1lPXRhcmJhbGwgXAorICAgICAgICAgICBmaWxlOi8vZ2V0X2hlYWRlcl90YXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1hcHBsZXRsaWItZGVwZW5kZW5jeS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LXVkaGNwYy1ub19kZWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maW5kLXRvdWNoc2NyZWVuLnNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtY3JvbiBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LWh0dHBkIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtdWRoY3BkIFwKKyAgICAgICAgICAgZmlsZTovL2RlZmF1bHQuc2NyaXB0IFwKKyAgICAgICAgICAgZmlsZTovL3NpbXBsZS5zY3JpcHQgXAorICAgICAgICAgICBmaWxlOi8vaHdjbG9jay5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9tb3VudC5idXN5Ym94IFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xvZyBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNsb2ctc3RhcnR1cC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xvZy5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtc3lzbG9nLmRlZmF1bHQgXAorICAgICAgICAgICBmaWxlOi8vbWRldiBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2LmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vbWRldi1tb3VudC5zaCBcCisgICAgICAgICAgIGZpbGU6Ly91bW91bnQuYnVzeWJveCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZjb25maWcgXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1zeXNsb2cuc2VydmljZS5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LWtsb2dkLnNlcnZpY2UuaW4gXAorICAgICAgICAgICBmaWxlOi8vZmFpbF9vbl9ub19tZWRpYS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vaW5ldGQuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9pbmV0ZCBcCisgICAgICAgICAgIGZpbGU6Ly9sb2dpbi11dGlsaXRpZXMuY2ZnIFwKKyAgICAgICAgICAgZmlsZTovL3JlY29nbml6ZV9jb25ubWFuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LWNyb3NzLW1lbnVjb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1pZmNvbmZpZy1maXgtZG91YmxlLWZyZWUtZmF0YWwtZXJyb3ItaW4tSU5FVF9zcHJpbnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jaG93bi1maXgtaGVscC10ZXh0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21vdW50LXZpYS1sYWJlbC5jZmcgXAorICAgICAgICAgICBmaWxlOi8vc2hhMXN1bS5jZmcgXAorICAgICAgICAgICBmaWxlOi8vc2hhMjU2c3VtLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9nZXRvcHRzLmNmZyBcCisiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gIjc5MjU2ODNkN2RkMTA1YWFiZTliNmI2MThkNDhjYzczIgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiMDVhNmY5ZTIxYWFkOGMwOThlMzg4YWU3N2RlN2IyMzYxOTQxYWZhNzE1N2VmNzQyMTY3MDMzOTViMTRlMzE5YSIKKworRVhUUkFfT0VNQUtFICs9ICJWPTEgQVJDSD0ke1RBUkdFVF9BUkNIfSBDUk9TU19DT01QSUxFPSR7VEFSR0VUX1BSRUZJWH0gU0tJUF9TVFJJUD15IgorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKyAgICAgICAgY3AgLXIgJHtCfS90ZXN0c3VpdGUgJHtEfSR7UFRFU1RfUEFUSH0vCisgICAgICAgIGNwICR7Qn0vLmNvbmZpZyAgICAgICR7RH0ke1BURVNUX1BBVEh9LworICAgICAgICBsbiAtcyAvYmluL2J1c3lib3ggICAke0R9JHtQVEVTVF9QQVRIfS9idXN5Ym94Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRlNzJmNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94X2dpdC5iYgpAQCAtMCwwICsxLDU0IEBACityZXF1aXJlIGJ1c3lib3guaW5jCisKK1NSQ1JFViA9ICJiZTk0N2M0ZDk3YzBkYWNiNzAzYTZmMjRkZDgxM2ZmNmRkM2EzM2I2IgorIyBMb29rb3V0IGZvciBQViBidW1wIHRvbyB3aGVuIFNSQ1JFViBpcyBjaGFuZ2VkCitQViA9ICIxLjIzLjIrZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYnVzeWJveC5uZXQvYnVzeWJveC5naXQgXAorICAgICAgICAgICBmaWxlOi8vZ2V0X2hlYWRlcl90YXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1hcHBsZXRsaWItZGVwZW5kZW5jeS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LXVkaGNwYy1ub19kZWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maW5kLXRvdWNoc2NyZWVuLnNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtY3JvbiBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LWh0dHBkIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtdWRoY3BkIFwKKyAgICAgICAgICAgZmlsZTovL2RlZmF1bHQuc2NyaXB0IFwKKyAgICAgICAgICAgZmlsZTovL3NpbXBsZS5zY3JpcHQgXAorICAgICAgICAgICBmaWxlOi8vaHdjbG9jay5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9tb3VudC5idXN5Ym94IFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xvZyBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNsb2ctc3RhcnR1cC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xvZy5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtc3lzbG9nLmRlZmF1bHQgXAorICAgICAgICAgICBmaWxlOi8vbWRldiBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2LmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vbWRldi1tb3VudC5zaCBcCisgICAgICAgICAgIGZpbGU6Ly91bW91bnQuYnVzeWJveCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZjb25maWcgXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1zeXNsb2cuc2VydmljZS5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LWtsb2dkLnNlcnZpY2UuaW4gXAorICAgICAgICAgICBmaWxlOi8vZmFpbF9vbl9ub19tZWRpYS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vaW5ldGQuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9pbmV0ZCBcCisgICAgICAgICAgIGZpbGU6Ly9sb2dpbi11dGlsaXRpZXMuY2ZnIFwKKyAgICAgICAgICAgZmlsZTovL3JlY29nbml6ZV9jb25ubWFuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LWNyb3NzLW1lbnVjb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1pZmNvbmZpZy1maXgtZG91YmxlLWZyZWUtZmF0YWwtZXJyb3ItaW4tSU5FVF9zcHJpbnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jaG93bi1maXgtaGVscC10ZXh0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21vdW50LXZpYS1sYWJlbC5jZmcgXAorICAgICAgICAgICBmaWxlOi8vc2hhMXN1bS5jZmcgXAorICAgICAgICAgICBmaWxlOi8vc2hhMjU2c3VtLmNmZyBcCisiCisKK0VYVFJBX09FTUFLRSArPSAiVj0xIEFSQ0g9JHtUQVJHRVRfQVJDSH0gQ1JPU1NfQ09NUElMRT0ke1RBUkdFVF9QUkVGSVh9IFNLSVBfU1RSSVA9eSIKKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisgICAgICAgIGNwIC1yICR7Qn0vdGVzdHN1aXRlICR7RH0ke1BURVNUX1BBVEh9LworICAgICAgICBjcCAke0J9Ly5jb25maWcgICAgICAke0R9JHtQVEVTVF9QQVRIfS8KKyAgICAgICAgbG4gLXMgL2Jpbi9idXN5Ym94ICAgJHtEfSR7UFRFU1RfUEFUSH0vYnVzeWJveAorfQorCitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1jcm9uIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtY3JvbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMGU2YjE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtY3JvbgpAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vc2gKK0RBRU1PTj0vdXNyL3NiaW4vY3JvbmQKK05BTUU9Y3JvbmQKK0RFU0M9IkJ1c3lib3ggUGVyaW9kaWMgQ29tbWFuZCBTY2hlZHVsZXIiCitBUkdTPSItYyAvZXRjL2Nyb24vY3JvbnRhYnMiCisKK3Rlc3QgLWYgJERBRU1PTiB8fCBleGl0IDAKKworc2V0IC1lCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorICAgICAgICBlY2hvIC1uICJzdGFydGluZyAkREVTQzogJE5BTUUuLi4gIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1TIC1iIC1uICROQU1FIC1hICREQUVNT04gLS0gJEFSR1MKKwllY2hvICJkb25lLiIKKwk7OworICAgIHN0b3ApCisgICAgICAgIGVjaG8gLW4gInN0b3BwaW5nICRERVNDOiAkTkFNRS4uLiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLUsgLW4gJE5BTUUKKwllY2hvICJkb25lLiIKKwk7OworICAgIHJlc3RhcnQpCisgICAgICAgIGVjaG8gLW4gInJlc3RhcnRpbmcgJERFU0M6ICROQU1FLi4uICIKKyAJJDAgc3RvcAorCSQwIHN0YXJ0CisJZWNobyAiZG9uZS4iCisJOzsKKyAgICByZWxvYWQpCisgICAgCWVjaG8gLW4gInJlbG9hZGluZyAkREVTQzogJE5BTUUuLi4gIgorICAgIAlraWxsYWxsIC1IVVAgJChiYXNlbmFtZSAke0RBRU1PTn0pCisJZWNobyAiZG9uZS4iCisJOzsKKyAgICAqKQorCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxyZXN0YXJ0fHJlbG9hZH0iCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1odHRwZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWh0dHBkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM4MzQ4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1odHRwZApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKK0RBRU1PTj0vdXNyL3NiaW4vaHR0cGQKK05BTUU9aHR0cGQKK0RFU0M9IkJ1c3lib3ggSFRUUCBEYWVtb24iCitIVFRQUk9PVD0iL3Nydi93d3ciCitBUkdTPSItaCAkSFRUUFJPT1QiCisKK3Rlc3QgLWYgJERBRU1PTiB8fCBleGl0IDAKKworc2V0IC1lCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorICAgICAgICBlY2hvIC1uICJzdGFydGluZyAkREVTQzogJE5BTUUuLi4gIgorCWlmIFsgISAtZCAkSFRUUFJPT1QgXTsgdGhlbgorCQllY2hvICIkSFRUUFJPT1QgaXMgbWlzc2luZy4iCisJCWV4aXQgMQorCWZpCisJc3RhcnQtc3RvcC1kYWVtb24gLVMgLWIgLW4gJE5BTUUgLWEgJERBRU1PTiAtLSAkQVJHUworCWVjaG8gImRvbmUuIgorCTs7CisgICAgc3RvcCkKKyAgICAgICAgZWNobyAtbiAic3RvcHBpbmcgJERFU0M6ICROQU1FLi4uICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAtbiAkTkFNRQorCWVjaG8gImRvbmUuIgorCTs7CisgICAgcmVzdGFydCkKKyAgICAgICAgZWNobyAicmVzdGFydGluZyAkREVTQzogJE5BTUUuLi4gIgorIAkkMCBzdG9wCisJJDAgc3RhcnQKKwllY2hvICJkb25lLiIKKwk7OworICAgIHJlbG9hZCkKKyAgICAJZWNobyAtbiAicmVsb2FkaW5nICRERVNDOiAkTkFNRS4uLiAiCisgICAgCWtpbGxhbGwgLUhVUCAkKGJhc2VuYW1lICR7REFFTU9OfSkKKwllY2hvICJkb25lLiIKKwk7OworICAgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8cmVsb2FkfSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWtsb2dkLnNlcnZpY2UuaW4gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1rbG9nZC5zZXJ2aWNlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3Yzc3NTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1rbG9nZC5zZXJ2aWNlLmluCkBAIC0wLDAgKzEsOCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1LZXJuZWwgTG9nZ2luZyBTZXJ2aWNlCisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0PUBiYXNlX3NiaW5kaXJAL2tsb2dkIC1uCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXN5c2xvZy5kZWZhdWx0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLmRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUxNmNhZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXN5c2xvZy5kZWZhdWx0CkBAIC0wLDAgKzEsMjUgQEAKK09QVElPTlM9Ii1DIgorIyBUaGUgYWJvdmUgb3B0aW9uIG1lYW5zIHN5c2xvZ2Qgd2lsbCBsb2cgdG8gMTZLIHNobSBjaXJjdWxhciBidWZmZXIuCisjIFlvdSBjb3VsZCB1c2UgYGxvZ3JlYWQnIHRvIHJlYWQgaXQuCisKKyMgQWxsIGF2YWlsYWJsZSBvcHRpb25zIGFyZToKKyMgLU8gRklMRSAgICAgICA6ICAgICAgTG9nIHRvIEZJTEUgKGRlZmF1bHQ6L3Zhci9sb2cvbWVzc2FnZXMpCisjIC1sIE4gICAgICAgICAgOiAgICAgIExvZyBvbmx5IG1lc3NhZ2VzIG1vcmUgdXJnZW50IHRoYW4gcHJpbyBOICgxLTgpCisjIC1TICAgICAgICAgICAgOiAgICAgIFNtYWxsZXIgb3V0cHV0CisjIC1zIFNJWkUgICAgICAgOiAgICAgIE1heCBzaXplIChLQikgYmVmb3JlIHJvdGF0aW9uIChkZWZhdWx0OjIwMEtCLCAwPW9mZikKKyMgLWIgTiAgICAgICAgICA6ICAgICAgTiByb3RhdGVkIGxvZ3MgdG8ga2VlcCAoZGVmYXVsdDoxLCBtYXg9OTksIDA9cHVyZ2UpCisjIC1SIEhPU1RbOlBPUlRdOiAgICAgIExvZyB0byBIT1NUOlBPUlQgKGRlZmF1bHQgUE9SVDo1MTQpCisjIC1MICAgICAgICAgICAgOiAgICAgIExvZyBsb2NhbGx5IGFuZCB2aWEgbmV0d29yaworIyAtRCAgICAgICAgICAgIDogICAgICBEcm9wIGR1cGxpY2F0ZXMKKyMgLUNbc2l6ZV9rYl0gICA6ICAgICAgTG9nIHRvIHNoYXJlZCBtZW0gYnVmZmVyICh1c2UgbG9ncmVhZCB0byByZWFkIGl0KQorIyAtZiBGSUxFICAgICAgIDogICAgICBVc2UgRklMRSBhcyBjb25maWcgKGRlZmF1bHQ6L2V0Yy9zeXNsb2cuY29uZikKKyMgLW0gTUlOICAgICAgICA6ICAgICAgTWludXRlcyBiZXR3ZWVuIG1hcmsgbGluZXMgKGRlZmF1bHQ6MjAsIDA9b2ZmKQorIyAtSyAgICAgICAgICAgIDogICAgICBMb2cgdG8ga2VybmVsIHByaW50ayBidWZmZXIgKHVzZSBkbWVzZyB0byByZWFkIGl0KQorCisjIEV4YW1wbGUgMToKKyMgTG9nIHRvIGxvY2FsIGZpbGUgL3Zhci9sb2cvbXlsb2cKKyMgT1BUSU9OUz0iLU8gL3Zhci9sb2cvbXlsb2ciCisjCisjIEV4YW1wbGUgMjoKKyMgTG9nIHRvIHJlbW90ZSBob3N0CisjIE9QVElPTlM9Ii1SIDE5Mi4xNjguMS4xOjYwMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlLmluIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLnNlcnZpY2UuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUwNDMyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlLmluCkBAIC0wLDAgKzEsMTMgQEAKK1tVbml0XQorRGVzY3JpcHRpb249U3lzdGVtIExvZ2dpbmcgU2VydmljZQorV2FudHM9YnVzeWJveC1rbG9nZC5zZXJ2aWNlCisKK1tTZXJ2aWNlXQorRW52aXJvbm1lbnRGaWxlPS0vZXRjL2RlZmF1bHQvYnVzeWJveC1zeXNsb2cKK0V4ZWNTdGFydD1AYmFzZV9zYmluZGlyQC9zeXNsb2dkIC1uICRPUFRJT05TCitTb2NrZXRzPXN5c2xvZy5zb2NrZXQKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldAorQWxzbz1idXN5Ym94LWtsb2dkLnNlcnZpY2UKK0FsaWFzPXN5c2xvZy5zZXJ2aWNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC11ZGhjcGQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC11ZGhjcGQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzQzOTAzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXVkaGNwZApAQCAtMCwwICsxLDQzIEBACisjIS9iaW4vc2gKK0RBRU1PTj0vdXNyL3NiaW4vdWRoY3BkCitOQU1FPXVkaGNwZAorREVTQz0iQnVzeWJveCBVREhDUCBTZXJ2ZXIiCitBUkdTPSIvZXRjL3VkaGNwZC5jb25mIgorCit0ZXN0IC1mICREQUVNT04gfHwgZXhpdCAxCisKK3NldCAtZQorCitjYXNlICIkMSIgaW4KKyAgICBzdGFydCkKKyAgICAgICAgZWNobyAtbiAic3RhcnRpbmcgJERFU0M6ICROQU1FLi4uICIKKwlpZiBbICEgLWYgL2V0Yy91ZGhjcGQuY29uZiBdOyB0aGVuCisJCWVjaG8gImVycm9yOiAvZXRjL3VkaGNwZC5jb25mIGlzIG1pc3NpbmcuIgorCQlleGl0IDEKKwlmaQorCS9zYmluL3N0YXJ0LXN0b3AtZGFlbW9uIC1TIC1iIC1uICROQU1FIC1hICREQUVNT04gLS0gJEFSR1MKKwllY2hvICJkb25lLiIKKwk7OworICAgIHN0b3ApCisgICAgICAgIGVjaG8gLW4gInN0b3BwaW5nICRERVNDOiAkTkFNRS4uLiAiCisJL3NiaW4vc3RhcnQtc3RvcC1kYWVtb24gLUsgLW4gJE5BTUUKKwllY2hvICJkb25lLiIKKwk7OworICAgIHJlc3RhcnQpCisgICAgICAgIGVjaG8gInJlc3RhcnRpbmcgJERFU0M6ICROQU1FLi4uICIKKyAJJDAgc3RvcAorCSQwIHN0YXJ0CisJZWNobyAiZG9uZS4iCisJOzsKKyAgICByZWxvYWQpCisgICAgCWVjaG8gLW4gInJlbG9hZGluZyAkREVTQzogJE5BTUUuLi4gIgorICAgIAlraWxsYWxsIC1IVVAgJChiYXNlbmFtZSAke0RBRU1PTn0pCisJZWNobyAiZG9uZS4iCisJOzsKKyAgICAqKQorCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxyZXN0YXJ0fHJlbG9hZH0iCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvZGVmYXVsdC5zY3JpcHQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvZGVmYXVsdC5zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhYzk4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9kZWZhdWx0LnNjcmlwdApAQCAtMCwwICsxLDQgQEAKKyMhL2Jpbi9zaAorCitleGVjIHJ1bi1wYXJ0cyAtYSAiJDEiIC9ldGMvdWRoY3BjLmQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2ZpbmQtdG91Y2hzY3JlZW4uc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvZmluZC10b3VjaHNjcmVlbi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmM1ZTdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2ZpbmQtdG91Y2hzY3JlZW4uc2gKQEAgLTAsMCArMSw2IEBACisjIS9iaW4vc2gKKworaWYgZ3JlcCAtcSAiaW5wdXQ6LiotZTAuKiwzLC4qYTAsMSxcfGFkczc4NDYiIC9zeXMvY2xhc3MvJE1ERVYvZGV2aWNlL21vZGFsaWFzIDsgdGhlbgorCWxuIC1zZiAvZGV2LyRNREVWIC9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wCitmaQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvaHdjbG9jay5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9od2Nsb2NrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNWY5NGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvaHdjbG9jay5zaApAQCAtMCwwICsxLDgzIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGh3Y2xvY2sKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgIAorIyBSZXF1aXJlZC1TdG9wOiAgICAgJGxvY2FsX2ZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDogICAgICAwIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IFNldCBzeXN0ZW0gY2xvY2sKKyMgRGVzY3JpcHRpb246ICAgICAgIFNldCBzeXN0ZW0gY2xvY2sgdG8gaGFyZHdhcmUgY2xvY2ssIGFjY29yZGluZyB0byB0aGUgVVRDCisjICAgICAgICAgICAgICAgICAgICBzZXR0aW5nIGluIC9ldGMvZGVmYXVsdC9yY1MgKHNlZSBhbHNvIHJjUyg1KSkuCisjIyMgRU5EIElOSVQgSU5GTworIworIyBXQVJOSU5HOiAgICAgIElmIHlvdXIgaGFyZHdhcmUgY2xvY2sgaXMgbm90IGluIFVUQy9HTVQsIHRoaXMgc2NyaXB0CisjICAgICAgICAgICAgICAgbXVzdCBrbm93IHRoZSBsb2NhbCB0aW1lIHpvbmUuIFRoaXMgaW5mb3JtYXRpb24gaXMKKyMgICAgICAgICAgICAgICBzdG9yZWQgaW4gL2V0Yy9sb2NhbHRpbWUuIFRoaXMgbWlnaHQgYmUgYSBwcm9ibGVtIGlmCisjICAgICAgICAgICAgICAgeW91ciAvZXRjL2xvY2FsdGltZSBpcyBhIHN5bWxpbmsgdG8gc29tZXRoaW5nIGluCisjICAgICAgICAgICAgICAgL3Vzci9zaGFyZS96b25laW5mbyBBTkQgL3VzciBpc24ndCBpbiB0aGUgcm9vdAorIyAgICAgICAgICAgICAgIHBhcnRpdGlvbiEgVGhlIHdvcmthcm91bmQgaXMgdG8gZGVmaW5lIFRaIGVpdGhlcgorIyAgICAgICAgICAgICAgIGluIC9ldGMvZGVmYXVsdC9yY1MsIG9yIGluIHRoZSBwcm9wZXIgcGxhY2UgYmVsb3cuCisKK1sgISAteCAvc2Jpbi9od2Nsb2NrIF0gJiYgZXhpdCAwCisKK1sgLWYgL2V0Yy9kZWZhdWx0L3JjUyBdICYmIC4gL2V0Yy9kZWZhdWx0L3JjUworCitbICIkVVRDIiA9ICJ5ZXMiIF0gJiYgdHo9Ii0tdXRjIiB8fCB0ej0iLS1sb2NhbHRpbWUiCitjYXNlICIkMSIgaW4KKyAgICAgICAgc3RhcnQpCisgICAgICAgICAgICAgICAgaWYgWyAiJFZFUkJPU0UiICE9IG5vIF0KKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJTeXN0ZW0gdGltZSB3YXMgYGRhdGVgLiIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlNldHRpbmcgdGhlIFN5c3RlbSBDbG9jayB1c2luZyB0aGUgSGFyZHdhcmUgQ2xvY2sgYXMgcmVmZXJlbmNlLi4uIgorICAgICAgICAgICAgICAgIGZpCisKKwkJaWYgWyAiJEhXQ0xPQ0tBQ0NFU1MiICE9IG5vIF0KKwkJdGhlbgorCQkJaWYgWyAteiAiJFRaIiBdCisJCQl0aGVuCisJICAgICAgICAgICAgICAgICAgIGh3Y2xvY2sgJHR6IC0taGN0b3N5cworCQkJZWxzZQorCQkJICAgVFo9IiRUWiIgaHdjbG9jayAkdHogLS1oY3Rvc3lzCisJCQlmaQorCQlmaQorCisgICAgICAgICAgICAgICAgaWYgWyAiJFZFUkJPU0UiICE9IG5vIF0KKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJTeXN0ZW0gQ2xvY2sgc2V0LiBTeXN0ZW0gbG9jYWwgdGltZSBpcyBub3cgYGRhdGVgLiIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIHN0b3B8cmVzdGFydHxyZWxvYWR8Zm9yY2UtcmVsb2FkKQorCQkjCisJCSMgVXBkYXRlcyB0aGUgSGFyZHdhcmUgQ2xvY2sgd2l0aCB0aGUgU3lzdGVtIENsb2NrIHRpbWUuCisJCSMgVGhpcyB3aWxsICpvdmVycmlkZSogYW55IGNoYW5nZXMgbWFkZSB0byB0aGUgSGFyZHdhcmUgQ2xvY2suCisJCSMKKwkJIyBXQVJOSU5HOiBJZiB5b3UgZGlzYWJsZSB0aGlzLCBhbnkgY2hhbmdlcyB0byB0aGUgc3lzdGVtCisJCSMgICAgICAgICAgY2xvY2sgd2lsbCBub3QgYmUgY2FycmllZCBhY3Jvc3MgcmVib290cy4KKwkJIworCQlpZiBbICIkVkVSQk9TRSIgIT0gbm8gXQorCQl0aGVuCisJCQllY2hvICJTYXZpbmcgdGhlIFN5c3RlbSBDbG9jayB0aW1lIHRvIHRoZSBIYXJkd2FyZSBDbG9jay4uLiIKKwkJZmkKKwkJaWYgWyAiJEhXQ0xPQ0tBQ0NFU1MiICE9IG5vIF0KKwkJdGhlbgorCQkJaHdjbG9jayAkdHogLS1zeXN0b2hjCisJCWZpCisJCWlmIFsgIiRWRVJCT1NFIiAhPSBubyBdCisJCXRoZW4KKwkJCWVjaG8gIkhhcmR3YXJlIENsb2NrIHVwZGF0ZWQgdG8gYGRhdGVgLiIKKwkJZmkKKyAgICAgICAgICAgICAgICBleGl0IDAKKyAgICAgICAgICAgICAgICA7OworCXNob3cpCisJCWlmIFsgIiRIV0NMT0NLQUNDRVNTIiAhPSBubyBdCisJCXRoZW4KKwkJCWh3Y2xvY2sgJHR6IC0tc2hvdworCQlmaQorCQk7OworICAgICAgICAqKQorICAgICAgICAgICAgICAgIGVjaG8gIlVzYWdlOiBod2Nsb2NrLnNoIHtzdGFydHxzdG9wfHNob3d8cmVsb2FkfHJlc3RhcnR9IiA+JjIKKwkJZWNobyAiICAgICAgIHN0YXJ0IHNldHMga2VybmVsIChzeXN0ZW0pIGNsb2NrIGZyb20gaGFyZHdhcmUgKFJUQykgY2xvY2siID4mMgorCQllY2hvICIgICAgICAgc3RvcCBhbmQgcmVsb2FkIHNldCBoYXJkd2FyZSAoUlRDKSBjbG9jayBmcm9tIGtlcm5lbCAoc3lzdGVtKSBjbG9jayIgPiYyCisgICAgICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgICAgICAgOzsKK2VzYWMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9pbmV0ZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9pbmV0ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjUwYmNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2luZXRkCkBAIC0wLDAgKzEsMzMgQEAKKyMhL2Jpbi9zaAorIworIyBzdGFydC9zdG9wIGluZXRkIHN1cGVyIHNlcnZlci4KKworaWYgISBbIC14IC91c3Ivc2Jpbi9pbmV0ZCBdOyB0aGVuCisJZXhpdCAwCitmaQorCitjYXNlICIkMSIgaW4KKyAgICBzdGFydCkKKwllY2hvIC1uICJTdGFydGluZyBpbnRlcm5ldCBzdXBlcnNlcnZlcjoiCisJZWNobyAtbiAiIGluZXRkIiA7IHN0YXJ0LXN0b3AtZGFlbW9uIC1TIC14IC91c3Ivc2Jpbi9pbmV0ZCA+IC9kZXYvbnVsbAorCWVjaG8gIi4iCisJOzsKKyAgICBzdG9wKQorCWVjaG8gLW4gIlN0b3BwaW5nIGludGVybmV0IHN1cGVyc2VydmVyOiIKKwllY2hvIC1uICIgaW5ldGQiIDsgc3RhcnQtc3RvcC1kYWVtb24gLUsgLXggL3Vzci9zYmluL2luZXRkID4gL2Rldi9udWxsCisJZWNobyAiLiIKKwk7OworICAgIHJlc3RhcnQpCisJZWNobyAtbiAiUmVzdGFydGluZyBpbnRlcm5ldCBzdXBlcnNlcnZlcjoiCisJZWNobyAtbiAiIGluZXRkICIKKwlraWxsYWxsIC1IVVAgaW5ldGQKKwllY2hvICIuIgorCTs7CisgICAgKikKKwllY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvaW5ldGQge3N0YXJ0fHN0b3B8cmVzdGFydH0iCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9pbmV0ZC5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2luZXRkLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAyZmU4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9pbmV0ZC5jb25mCkBAIC0wLDAgKzEsMjAgQEAKKyMgL2V0Yy9pbmV0ZC5jb25mOiAgc2VlIGluZXRkKDgpIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9ucy4KKyMKKyMgSW50ZXJuZXQgc2VydmVyIGNvbmZpZ3VyYXRpb24gZGF0YWJhc2UKKyMKKyMgSWYgeW91IHdhbnQgdG8gZGlzYWJsZSBhbiBlbnRyeSBzbyBpdCBpc24ndCB0b3VjaGVkIGR1cmluZworIyBwYWNrYWdlIHVwZGF0ZXMganVzdCBjb21tZW50IGl0IG91dCB3aXRoIGEgc2luZ2xlICcjJyBjaGFyYWN0ZXIuCisjCisjIDxzZXJ2aWNlX25hbWU+IDxzb2NrX3R5cGU+IDxwcm90bz4gPGZsYWdzPiA8dXNlcj4gPHNlcnZlcl9wYXRoPiA8YXJncz4KKyMKKyM6SU5URVJOQUw6IEludGVybmFsIHNlcnZpY2VzCisjZWNobwkJc3RyZWFtCXRjcAlub3dhaXQJcm9vdAlpbnRlcm5hbAorI2VjaG8JCWRncmFtCXVkcAl3YWl0CXJvb3QJaW50ZXJuYWwKKyNjaGFyZ2VuCXN0cmVhbQl0Y3AJbm93YWl0CXJvb3QJaW50ZXJuYWwKKyNjaGFyZ2VuCWRncmFtCXVkcAl3YWl0CXJvb3QJaW50ZXJuYWwKKyNkaXNjYXJkCQlzdHJlYW0JdGNwCW5vd2FpdAlyb290CWludGVybmFsCisjZGlzY2FyZAkJZGdyYW0JdWRwCXdhaXQJcm9vdAlpbnRlcm5hbAorI2RheXRpbWUJCXN0cmVhbQl0Y3AJbm93YWl0CXJvb3QJaW50ZXJuYWwKKyNkYXl0aW1lCWRncmFtCXVkcAl3YWl0CXJvb3QJaW50ZXJuYWwKKyN0aW1lCQlzdHJlYW0JdGNwCW5vd2FpdAlyb290CWludGVybmFsCisjdGltZQkJZGdyYW0JdWRwCXdhaXQJcm9vdAlpbnRlcm5hbApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21kZXYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NjI1MjQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21kZXYKQEAgLTAsMCArMSwxOSBAQAorIyEvYmluL3NoCisKK21vdW50IC10IHRtcGZzIHRtcGZzIC9kZXYgIC1vIHNpemU9NjRrLG1vZGU9MDc1NQorbWtkaXIgL2Rldi9wdHMgL2Rldi9zaG0KK2NobW9kIDc3NyAvZGV2L3NobQorbW91bnQgLXQgZGV2cHRzIGRldnB0cyAvZGV2L3B0cwordG91Y2ggL2Rldi9tZGV2LnNlcQorZWNobyAiL3NiaW4vbWRldiIgPiAvcHJvYy9zeXMva2VybmVsL2hvdHBsdWcKK21kZXYgLXMKKworIworIyBXZSBtaWdodCBoYXZlIG1vdW50ZWQgc29tZXRoaW5nIG92ZXIgL2Rldiwgc2VlIGlmIC9kZXYvaW5pdGN0bCBpcyB0aGVyZS4KKyMKK2lmIHRlc3QgISAtcCAvZGV2L2luaXRjdGwKK3RoZW4KKyAgICAgICAgcm0gLWYgL2Rldi9pbml0Y3RsCisgICAgICAgIG1rbm9kIC1tIDYwMCAvZGV2L2luaXRjdGwgcAorZmkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21kZXYtbW91bnQuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldi1tb3VudC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWQ2NmQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21kZXYtbW91bnQuc2gKQEAgLTAsMCArMSw2MyBAQAorIyEvYmluL3NoCitNREVWX0FVVE9NT1VOVD15CitNREVWX0FVVE9NT1VOVF9ST09UPS9ydW4vbWVkaWEKK1sgLWYgL2V0Yy9kZWZhdWx0L21kZXYgXSAmJiAuIC9ldGMvZGVmYXVsdC9tZGV2CitpZiBbICIke01ERVZfQVVUT01PVU5UfSIgPSAibiIgXSA7IHRoZW4KKwlleGl0IDAKK2ZpCisKK2Nhc2UgIiRBQ1RJT04iIGluCisJYWRkfCIiKQorCQlBQ1RJT049ImFkZCIKKwkJIyBjaGVjayBpZiBhbHJlYWR5IG1vdW50ZWQKKwkJaWYgZ3JlcCAtcSAiXi9kZXYvJHtNREVWfSAiIC9wcm9jL21vdW50cyA7IHRoZW4KKwkJCSMgQWxyZWFkeSBtb3VudGVkCisJCQlleGl0IDAKKwkJZmkKKwkJREVWQkFTRT1gZXhwciBzdWJzdHIgJE1ERVYgMSAzYAorCQlpZiBbICIke0RFVkJBU0V9IiA9PSAibW1jIiBdIDsgdGhlbgorCQkJREVWQkFTRT1gZXhwciBzdWJzdHIgJE1ERVYgMSA3YAorCQlmaQorCQkjIGNoZWNrIGZvciAicGxlYXNlIGRvbid0IG1vdW50IGl0IiBmaWxlCisJCWlmIFsgLWYgIi9kZXYvbm9tb3VudC4ke0RFVkJBU0V9IiBdIDsgdGhlbgorCQkJIyBibG9ja2VkCisJCQlleGl0IDAKKwkJZmkKKwkJIyBjaGVjayBmb3IgZnVsbC1kaXNrIHBhcnRpdGlvbgorCQlpZiBbICIke0RFVkJBU0V9IiA9PSAiJHtNREVWfSIgXSA7IHRoZW4KKwkJCWlmIFsgLWQgL3N5cy9ibG9jay8ke0RFVkJBU0V9LyR7REVWQkFTRX0qMSBdIDsgdGhlbgorCQkJCSMgUGFydGl0aW9uIGRldGVjdGVkLCBqdXN0IHF1aXQKKwkJCQlleGl0IDAKKwkJCWZpCisJCQlpZiBbICEgLWYgL3N5cy9ibG9jay8ke0RFVkJBU0V9L3NpemUgXSA7IHRoZW4KKwkJCQkjIE5vIHNpemUgYXQgYWxsCisJCQkJZXhpdCAwCisJCQlmaQorCQkJaWYgWyBgY2F0IC9zeXMvYmxvY2svJHtERVZCQVNFfS9zaXplYCA9PSAwIF0gOyB0aGVuCisJCQkJIyBlbXB0eSBkZXZpY2UsIGJhaWwgb3V0CisJCQkJZXhpdCAwCisJCQlmaQorCQlmaQorCQkjIGZpcnN0IGFsbG93IGZzdGFiIHRvIGRldGVybWluZSB0aGUgbW91bnRwb2ludAorCQlpZiAhIG1vdW50IC9kZXYvJE1ERVYgPiAvZGV2L251bGwgMj4mMQorCQl0aGVuCisJCQlNT1VOVFBPSU5UPSIke01ERVZfQVVUT01PVU5UX1JPT1R9LyRNREVWIgorCQkJbWtkaXIgIiRNT1VOVFBPSU5UIgorCQkJbW91bnQgLXQgYXV0byAvZGV2LyRNREVWICIkTU9VTlRQT0lOVCIKKwkJZmkKKwkJOzsKKwlyZW1vdmUpCisJCU1PVU5UUE9JTlQ9YGdyZXAgIl4vZGV2LyRNREVWXHMiIC9wcm9jL21vdW50cyB8IGN1dCAtZCcgJyAtZiAyYAorCQlpZiBbICEgLXogIiRNT1VOVFBPSU5UIiBdCisJCXRoZW4KKwkJCXVtb3VudCAiJE1PVU5UUE9JTlQiCisJCQlybWRpciAiJE1PVU5UUE9JTlQiCisJCWVsc2UKKwkJCXVtb3VudCAvZGV2LyRNREVWCisJCWZpCisJCTs7CisJKikKKwkJIyBVbmV4cGVjdGVkIGtleXdvcmQKKwkJZXhpdCAxCisJCTs7Citlc2FjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldi5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21kZXYuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2U5M2RhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21kZXYuY29uZgpAQCAtMCwwICsxLDQyIEBACiskTU9EQUxJQVM9LiogMDowIDY2MCBAbW9kcHJvYmUgIiRNT0RBTElBUyIKKworY29uc29sZSAwOjAgMDYwMCAKK2NwdV9kbWFfbGF0ZW5jeSAwOjAgMDY2MCAKK2ZiMDowIDQ0IDA2NjAgCitmdWxsIDA6MCAwNjY2IAoraW5pdGN0bCAwOjAgMDYwMCAKK2lyY29tbVswLTldLiogMDoyMCAwNjYwIAora21lbSAwOjE1IDA2NDAgCitrbXNnIDA6MCAwNjYwIAorbG9nIDA6MCAwNjY2IAorbG9vcFswLTldLiogMDo2IDA2NDAgCittZW0gMDoxNSAwNjQwIAorbmV0d29ya19sYXRlbmN5IDA6MCAwNjYwIAorbmV0d29ya190aHJvdWdocHV0IDA6MCAwNjYwIAorbnVsbCAwOjAgMDY2NiAKK3BvcnQgMDoxNSAwNjQwIAorcHRteCAwOjUgMDY2NiAKK3JhbVswLTldLiogMDo2IDA2NDAgCityYW5kb20gMDowIDA2NjYgCitzZGEgMDo2IDA2NDAgCit0dHkgMDo1IDA2NjYgCit0dHkuKiAwOjAgMDYyMCAKK3VyYW5kb20gMDowIDA2NjYgCit1c2JkZXYuKiAwOjAgMDY2MCAqL2V0Yy9tZGV2L3VzYi5zaAordmNzLiogMDo1IDA2NjAgCit6ZXJvIDA6MCAwNjY2IAorIAorc25kL3BjbS4qIDA6MCAwNjYwCitzbmQvY29udHJvbC4qIDA6MCAwNjYwCitzbmQvdGltZXIgMDowIDA2NjAKK3NuZC9zZXEgMDowIDA2NjAKK3NuZC9taW5pLiogMDowMCAwNjYwCisKK2lucHV0L2V2ZW50LiogMDowIDA2NjAgQC9ldGMvbWRldi9maW5kLXRvdWNoc2NyZWVuLnNoCitpbnB1dC9taWNlIDA6MCAwNjYwCitpbnB1dC9tb3VzZS4qIDA6MCAwNjYwCisKK3R1blswLTldKiAwOjAgMDY2MCA9bmV0LworCitbaHNdZFthLXpdWzAtOV0/IDA6MCA2NjAgKi9ldGMvbWRldi9tZGV2LW1vdW50LnNoCittbWNibGtbMC05XS4qIDA6MCA2NjAgKi9ldGMvbWRldi9tZGV2LW1vdW50LnNoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbW91bnQuYnVzeWJveCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tb3VudC5idXN5Ym94Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZlZjk0NWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbW91bnQuYnVzeWJveApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorCitleGVjIC9iaW4vYnVzeWJveCBtb3VudCAkQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYwOGE4ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9ydW4tcHRlc3QKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vc2gKKworY3VycmVudF9kaXI9JChyZWFkbGluayAtZiAkMCkKK2V4cG9ydCBiaW5kaXI9JChkaXJuYW1lICRjdXJyZW50X2RpcikKKworY2QgdGVzdHN1aXRlIHx8IGV4aXQgMQorLi9ydW50ZXN0IC12IHwgc2VkIC1yICdzL14oU0tJUFBFRHxVTlRFU1RFRCk6L1NLSVA6LycKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zaW1wbGUuc2NyaXB0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3NpbXBsZS5zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxNjhiMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zaW1wbGUuc2NyaXB0CkBAIC0wLDAgKzEsODggQEAKKyMhL2Jpbi9zaAorCisjIHVkaGNwYyBzY3JpcHQgZWRpdGVkIGJ5IFRpbSBSaWtlciA8VGltQFJpa2Vycy5vcmc+CisKK1sgLXogIiQxIiBdICYmIGVjaG8gIkVycm9yOiBzaG91bGQgYmUgY2FsbGVkIGZyb20gdWRoY3BjIiAmJiBleGl0IDEKKworUkVTT0xWX0NPTkY9Ii9ldGMvcmVzb2x2LmNvbmYiCitbIC1uICIkc3VibmV0IiBdICYmIE5FVE1BU0s9Im5ldG1hc2sgJHN1Ym5ldCIKKworIyByZXR1cm4gMCBpZiByb290IGlzIG1vdW50ZWQgb24gYSBuZXR3b3JrIGZpbGVzeXN0ZW0KK3Jvb3RfaXNfbmZzKCkgeworCXNlZCAtbiAncy9eW14gXSogXChbXiBdKlwpIFwoW14gXSpcKSAuKiQvXDEgXDIvcCcgL3Byb2MvbW91bnRzIHwKKwlncmVwIC1xICJeLyBcKG5mc1x8c21iZnNcfG5jcFx8Y29kYVwpJCIKK30KKworaGF2ZV9iaW5faXA9MAoraWYgWyAteCAvc2Jpbi9pcCBdOyB0aGVuCisgIGhhdmVfYmluX2lwPTEKKyAgQlJPQURDQVNUPSJicm9hZGNhc3QgKyIKK2ZpCisKK1sgLW4gIiRicm9hZGNhc3QiIF0gJiYgQlJPQURDQVNUPSJicm9hZGNhc3QgJGJyb2FkY2FzdCIKKworY2FzZSAiJDEiIGluCisJZGVjb25maWcpCisJCWlmIFsgLXggL3NiaW4vcmVzb2x2Y29uZiBdOyB0aGVuCisJCQkvc2Jpbi9yZXNvbHZjb25mIC1kICIke2ludGVyZmFjZX0udWRoY3BjIgorCQlmaQorCQlpZiAhIHJvb3RfaXNfbmZzIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAkaGF2ZV9iaW5faXAgLWVxIDEgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcCBhZGRyIGZsdXNoIGRldiAkaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwIGxpbmsgc2V0IGRldiAkaW50ZXJmYWNlIHVwCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9zYmluL2lmY29uZmlnICRpbnRlcmZhY2UgMC4wLjAuMAorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKwkJZmkKKwkJOzsKKworCXJlbmV3fGJvdW5kKQorICAgICAgICAgICAgICAgIGlmIFsgJGhhdmVfYmluX2lwIC1lcSAxIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlwIGFkZHIgYWRkIGRldiAkaW50ZXJmYWNlIGxvY2FsICRpcC8kbWFzayAkQlJPQURDQVNUCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgL3NiaW4vaWZjb25maWcgJGludGVyZmFjZSAkaXAgJEJST0FEQ0FTVCAkTkVUTUFTSworICAgICAgICAgICAgICAgIGZpCisKKwkJaWYgWyAtbiAiJHJvdXRlciIgXSA7IHRoZW4KKwkJCWlmICEgcm9vdF9pc19uZnMgOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgJGhhdmVfYmluX2lwIC1lcSAxIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBpcCByb3V0ZSBkZWwgZGVmYXVsdCBkZXYgJGludGVyZmFjZSAyPi9kZXYvbnVsbCA7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgcm91dGUgZGVsIGRlZmF1bHQgZ3cgMC4wLjAuMCBkZXYgJGludGVyZmFjZSAyPi9kZXYvbnVsbCA7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorCQkJZmkKKworCQkJbWV0cmljPTEwCisJCQlmb3IgaSBpbiAkcm91dGVyIDsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAkaGF2ZV9iaW5faXAgLWVxIDEgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwIHJvdXRlIGFkZCBkZWZhdWx0IHZpYSAkaSBtZXRyaWMgJG1ldHJpYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGUgYWRkIGRlZmF1bHQgZ3cgJGkgZGV2ICRpbnRlcmZhY2UgbWV0cmljICRtZXRyaWMgMj4vZGV2L251bGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljPSQoKCRtZXRyaWMgKyAxKSkKKwkJCWRvbmUKKwkJZmkKKworCQkjIFVwZGF0ZSByZXNvbHZlciBjb25maWd1cmF0aW9uIGZpbGUKKwkJUj0iIgorCQlbIC1uICIkZG9tYWluIiBdICYmIFI9ImRvbWFpbiAkZG9tYWluCisiCisJCWZvciBpIGluICRkbnM7IGRvCisJCQllY2hvICIkMDogQWRkaW5nIEROUyAkaSIKKwkJCVI9IiR7Un1uYW1lc2VydmVyICRpCisiCisJCWRvbmUKKworCQlpZiBbIC14IC9zYmluL3Jlc29sdmNvbmYgXTsgdGhlbgorCQkJZWNobyAtbiAiJFIiIHwgL3NiaW4vcmVzb2x2Y29uZiAtYSAiJHtpbnRlcmZhY2V9LnVkaGNwYyIKKwkJZWxzZQorCQkJZWNobyAtbiAiJFIiID4gIiRSRVNPTFZfQ09ORiIKKwkJZmkKKwkJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3N5c2xvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWM0ZDEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3N5c2xvZwpAQCAtMCwwICsxLDc3IEBACisjISAvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICAgICBzeXNrbG9nZAorIyBSZXF1aXJlZC1TdGFydDogICAgICAgJHJlbW90ZV9mcyAkdGltZQorIyBSZXF1aXJlZC1TdG9wOiAgICAgICAgJHJlbW90ZV9mcyAkdGltZQorIyBEZWZhdWx0LVN0YXJ0OiAgICAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246ICAgIFN5c3RlbSBsb2dnZXIKKyMjIyBFTkQgSU5JVCBJTkZPCisKK3NldCAtZQorCitpZiBbIC1mIC9ldGMvc3lzbG9nLXN0YXJ0dXAuY29uZiBdOyB0aGVuCisJLiAvZXRjL3N5c2xvZy1zdGFydHVwLmNvbmYKKwlMT0dfTE9DQUw9MAorCUxPR19SRU1PVEU9MAorCWZvciBEIGluICRERVNUSU5BVElPTjsgZG8KKwkJaWYgWyAiJEQiID0gImJ1ZmZlciIgXTsgdGhlbgorCQkJU1lTTE9HX0FSR1M9IiRTWVNMT0dfQVJHUyAtQyRCVUZGRVJTSVpFIgorCQkJTE9HX0xPQ0FMPTEKKwkJZWxpZiBbICIkRCIgPSAiZmlsZSIgXTsgdGhlbgorCQkJaWYgWyAtbiAiJExPR0ZJTEUiIF07IHRoZW4KKwkJCQlTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1PICRMT0dGSUxFIgorCQkJZmkKKwkJCWlmIFsgLW4gIiRST1RBVEVTSVpFIiBdOyB0aGVuCisJCQkJU1lTTE9HX0FSR1M9IiRTWVNMT0dfQVJHUyAtcyAkUk9UQVRFU0laRSIKKwkJCWZpCisJCQlpZiBbIC1uICIkUk9UQVRFR0VOUyIgXTsgdGhlbgorCQkJCVNZU0xPR19BUkdTPSIkU1lTTE9HX0FSR1MgLWIgJFJPVEFURUdFTlMiCisJCQlmaQorCQkJTE9HX0xPQ0FMPTEKKwkJZWxpZiBbICIkRCIgPSAicmVtb3RlIiBdOyB0aGVuCisJCQlTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1SICRSRU1PVEUiCisJCQlMT0dfUkVNT1RFPTEKKwkJZmkKKwlkb25lCisJaWYgWyAiJExPR19MT0NBTCIgPSAiMSIgLWEgIiRMT0dfUkVNT1RFIiA9ICIxIiBdOyB0aGVuCisJCVNZU0xPR19BUkdTPSIkU1lTTE9HX0FSR1MgLUwiCisJZmkKKwlpZiBbICIkUkVEVUNFIiA9ICJ5ZXMiIF07IHRoZW4KKwkJU1lTTE9HX0FSR1M9IiRTWVNMT0dfQVJHUyAtUyIKKwlmaQorCWlmIFsgIiREUk9QRFVQTElDQVRFUyIgPSAieWVzIiBdOyB0aGVuCisJICAgIFNZU0xPR19BUkdTPSIkU1lTTE9HX0FSR1MgLUQiCisJZmkKKwlpZiBbIC1uICIkTE9HTEVWRUwiIF07IHRoZW4KKwkgICAgU1lTTE9HX0FSR1M9IiRTWVNMT0dfQVJHUyAtbCAkTE9HTEVWRUwiCisJZmkKK2Vsc2UKKwkjIGRlZmF1bHQ6IGxvZyB0byAxNksgc2htIGNpcmN1bGFyIGJ1ZmZlcgorCVNZU0xPR19BUkdTPSItQyIKK2ZpCisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwllY2hvIC1uICJTdGFydGluZyBzeXNsb2dkL2tsb2dkOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLVMgLWIgLW4gc3lzbG9nZCAtYSAvc2Jpbi9zeXNsb2dkIC0tIC1uICRTWVNMT0dfQVJHUworCXN0YXJ0LXN0b3AtZGFlbW9uIC1TIC1iIC1uIGtsb2dkIC1hIC9zYmluL2tsb2dkIC0tIC1uCisJZWNobyAiZG9uZSIKKwk7OworICBzdG9wKQorCWVjaG8gLW4gIlN0b3BwaW5nIHN5c2xvZ2Qva2xvZ2Q6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAtbiBzeXNsb2dkCisJc3RhcnQtc3RvcC1kYWVtb24gLUsgLW4ga2xvZ2QKKwllY2hvICJkb25lIgorCTs7CisgIHJlc3RhcnQpCisgIAkkMCBzdG9wCisJJDAgc3RhcnQKKwk7OworICAqKQorCWVjaG8gIlVzYWdlOiBzeXNsb2cgeyBzdGFydCB8IHN0b3AgfCByZXN0YXJ0IH0iID4mMgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3N5c2xvZy1zdGFydHVwLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nLXN0YXJ0dXAuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGE0NTBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3N5c2xvZy1zdGFydHVwLmNvbmYKQEAgLTAsMCArMSwxMyBAQAorIyBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyB1c2VkIGJ5IHRoZSBidXN5Ym94IHN5c2xvZyBpbml0IHNjcmlwdCwKKyMgL2V0Yy9pbml0LmQvc3lzbG9nWy5idXN5Ym94XSB0byBzZXQgc3lzbG9nIGNvbmZpZ3VyYXRpb24gYXQgc3RhcnQgdGltZS4KKworREVTVElOQVRJT049ZmlsZQkJIyBsb2cgZGVzdGluYXRpb25zIChidWZmZXIgZmlsZSByZW1vdGUpCitMT0dGSUxFPS92YXIvbG9nL21lc3NhZ2VzCSMgd2hlcmUgdG8gbG9nIChmaWxlKQorUkVNT1RFPWxvZ2hvc3Q6NTE0CQkjIHdoZXJlIHRvIGxvZyAoc3lzbG9nIHJlbW90ZSkKK1JFRFVDRT1ubwkJCSMgcmVkdWNlLXNpemUgbG9nZ2luZworRFJPUERVUExJQ0FURVM9bm8JCSMgd2hldGhlciB0byBkcm9wIGR1cGxpY2F0ZSBsb2cgZW50cmllcworI1JPVEFURVNJWkU9MAkJCSMgcm90YXRlIGxvZyBpZiBncm93biBiZXlvbmQgWCBba0J5dGVdCisjUk9UQVRFR0VOUz0zCQkJIyBrZWVwIFggZ2VuZXJhdGlvbnMgb2Ygcm90YXRlZCBsb2dzCitCVUZGRVJTSVpFPTY0CQkJIyBzaXplIG9mIGNpcmN1bGFyIGJ1ZmZlciBba0J5dGVdCitGT1JFR1JPVU5EPW5vCQkJIyBydW4gaW4gZm9yZWdyb3VuZCAoZG9uJ3QgdXNlISkKKyNMT0dMRVZFTD01CQkJIyBsb2NhbCBsb2cgbGV2ZWwgKGJldHdlZW4gMSBhbmQgOCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zeXNsb2cuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zeXNsb2cuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWJiNjMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3N5c2xvZy5jb25mCkBAIC0wLDAgKzEgQEAKKyMgIC9ldGMvc3lzbG9nLmNvbmYJQ29uZmlndXJhdGlvbiBmaWxlIGZvciBidXN5Ym94J3Mgc3lzbG9nZCB1dGlsaXR5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvdW1vdW50LmJ1c3lib3ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvdW1vdW50LmJ1c3lib3gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjM3MzE2MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy91bW91bnQuYnVzeWJveApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorCitleGVjIC9iaW4vYnVzeWJveCB1bW91bnQgJEAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL01ha2V2YXJzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvTWFrZXZhcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI2OTJhYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL01ha2V2YXJzCkBAIC0wLDAgKzEsNDEgQEAKKyMgTWFrZWZpbGUgdmFyaWFibGVzIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCisKKyMgVXN1YWxseSB0aGUgbWVzc2FnZSBkb21haW4gaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UgbmFtZS4KK0RPTUFJTiA9ICQoUEFDS0FHRSkKKworIyBUaGVzZSB0d28gdmFyaWFibGVzIGRlcGVuZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhpcyBkaXJlY3RvcnkuCitzdWJkaXIgPSBwbwordG9wX2J1aWxkZGlyID0gLi4KKworIyBUaGVzZSBvcHRpb25zIGdldCBwYXNzZWQgdG8geGdldHRleHQuCitYR0VUVEVYVF9PUFRJT05TID0gLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fCisKKyMgVGhpcyBpcyB0aGUgY29weXJpZ2h0IGhvbGRlciB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byB0aGUgaGVhZGVyIG9mIHRoZQorIyAkKERPTUFJTikucG90IGZpbGUuICBTZXQgdGhpcyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgc3Vycm91bmRpbmcKKyMgcGFja2FnZS4gIChOb3RlIHRoYXQgdGhlIG1zZ3N0ciBzdHJpbmdzLCBleHRyYWN0ZWQgZnJvbSB0aGUgcGFja2FnZSdzCisjIHNvdXJjZXMsIGJlbG9uZyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgcGFja2FnZS4pICBUcmFuc2xhdG9ycyBhcmUKKyMgZXhwZWN0ZWQgdG8gdHJhbnNmZXIgdGhlIGNvcHlyaWdodCBmb3IgdGhlaXIgdHJhbnNsYXRpb25zIHRvIHRoaXMgcGVyc29uCisjIG9yIGVudGl0eSwgb3IgdG8gZGlzY2xhaW0gdGhlaXIgY29weXJpZ2h0LiAgVGhlIGVtcHR5IHN0cmluZyBzdGFuZHMgZm9yCisjIHRoZSBwdWJsaWMgZG9tYWluOyBpbiB0aGlzIGNhc2UgdGhlIHRyYW5zbGF0b3JzIGFyZSBleHBlY3RlZCB0byBkaXNjbGFpbQorIyB0aGVpciBjb3B5cmlnaHQuCitDT1BZUklHSFRfSE9MREVSID0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBpcyB0aGUgZW1haWwgYWRkcmVzcyBvciBVUkwgdG8gd2hpY2ggdGhlIHRyYW5zbGF0b3JzIHNoYWxsIHJlcG9ydAorIyBidWdzIGluIHRoZSB1bnRyYW5zbGF0ZWQgc3RyaW5nczoKKyMgLSBTdHJpbmdzIHdoaWNoIGFyZSBub3QgZW50aXJlIHNlbnRlbmNlcywgc2VlIHRoZSBtYWludGFpbmVyIGd1aWRlbGluZXMKKyMgICBpbiB0aGUgR05VIGdldHRleHQgZG9jdW1lbnRhdGlvbiwgc2VjdGlvbiAnUHJlcGFyaW5nIFN0cmluZ3MnLgorIyAtIFN0cmluZ3Mgd2hpY2ggdXNlIHVuY2xlYXIgdGVybXMgb3IgcmVxdWlyZSBhZGRpdGlvbmFsIGNvbnRleHQgdG8gYmUKKyMgICB1bmRlcnN0b29kLgorIyAtIFN0cmluZ3Mgd2hpY2ggbWFrZSBpbnZhbGlkIGFzc3VtcHRpb25zIGFib3V0IG5vdGF0aW9uIG9mIGRhdGUsIHRpbWUgb3IKKyMgICBtb25leS4KKyMgLSBQbHVyYWxpc2F0aW9uIHByb2JsZW1zLgorIyAtIEluY29ycmVjdCBFbmdsaXNoIHNwZWxsaW5nLgorIyAtIEluY29ycmVjdCBmb3JtYXR0aW5nLgorIyBJdCBjYW4gYmUgeW91ciBlbWFpbCBhZGRyZXNzLCBvciBhIG1haWxpbmcgbGlzdCBhZGRyZXNzIHdoZXJlIHRyYW5zbGF0b3JzCisjIGNhbiB3cml0ZSB0byB3aXRob3V0IGJlaW5nIHN1YnNjcmliZWQsIG9yIHRoZSBVUkwgb2YgYSB3ZWIgcGFnZSB0aHJvdWdoCisjIHdoaWNoIHRoZSB0cmFuc2xhdG9ycyBjYW4gY29udGFjdCB5b3UuCitNU0dJRF9CVUdTX0FERFJFU1MgPQorCisjIFRoaXMgaXMgdGhlIGxpc3Qgb2YgbG9jYWxlIGNhdGVnb3JpZXMsIGJleW9uZCBMQ19NRVNTQUdFUywgZm9yIHdoaWNoIHRoZQorIyBtZXNzYWdlIGNhdGFsb2dzIHNoYWxsIGJlIHVzZWQuICBJdCBpcyB1c3VhbGx5IGVtcHR5LgorRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMgPQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvY29kZXBhZ2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb2RlcGFnZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjg3MDE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvY29kZXBhZ2UucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3Lm1uLWxvZ2lzdGlrLmRlL3Vuc3VwcG9ydGVkL3B4YTI1MC9wYXRjaGVyCisjCisKKy0tLSBjb25zb2xlLXRvb2xzLTAuMy4yL2NvbnRyaWIvY29kZXBhZ2UuY35jb2RlcGFnZQorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIvY29udHJpYi9jb2RlcGFnZS5jCitAQCAtMjI5LDcgKzIyOSw3IEBACisgCSAgcmV0dXJuIDA7CisgCisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlwKKy1XYXJuaW5nOiBDUCBmb3JtYXQgaXMgYSBoYWNrIVxuCisrV2FybmluZzogQ1AgZm9ybWF0IGlzIGEgaGFjayFcblwKKyAgICAgICAgICBUaGUgZmlsZXMgcHJvZHVjZWQgbWF5IG9yIG1heSBub3QgYmUgdXNhYmxlIVxuIik7CisgCisgCXNwcmludGYob3V0ZmlsZSwgIiVkLmNwIiwgQ1BFbnRyeUhlYWRlci5jb2RlcGFnZSk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb21waWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvY29tcGlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTNmNTExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvY29tcGlsZS5wYXRjaApAQCAtMCwwICsxLDEyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIva2JkdG9vbHMvc2hvd2tleS5jfmNvbXBpbGUJMTk5OS0wOC0yNSAxNzoyMDowOC4wMDAwMDAwMDAgLTA0MDAKKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2tiZHRvb2xzL3Nob3drZXkuYwkyMDA0LTA1LTA5IDAzOjAzOjIzLjAwMDAwMDAwMCAtMDQwMAorQEAgLTI2NCw3ICsyNjQsNiBAQAorIAkgIGJyZWFrOworIAljYXNlIGNtZF9rZXltYXA6CisgCSAgcHJpbnRmKCIpXG4iKTsKKy0JZGVmYXVsdDoKKyAJfQorICAgICB9CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb25maWd1cmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVjMTAwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2NvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIvY29uZmlndXJlLmlufmNvbmZpZ3VyZQorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIvY29uZmlndXJlLmluCitAQCAtMiwxMyArMiwxNCBAQAorIGRubCBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorIAorICMgSW5pdGlhbGl6ZQorLUFDX0lOSVQoa2JkdG9vbHMvbG9hZGtleXMueSkKKytBQ19JTklUCisrQUNfQ09ORklHX1NSQ0RJUihba2JkdG9vbHMvbG9hZGtleXMueV0pCisgCisgZGVmaW5lKGN0X3VuaWNvZGVkYXRhX2RlZmF1bHQsL3Vzci9zaGFyZS91bmlkYXRhL1VuaWNvZGVEYXRhLTIudHh0KQorIGN0X2xvY2FsZGF0YWRpcl9kZWZhdWx0PS91c3IvbG9jYWwvc2hhcmUgICAgICMgaWZmIC0tZW5hYmxlLWxvY2FsZGF0YWRpciB3aXRob3V0IHNwZWNpZmljIGRpcgorIAorICNBQ19DT05GSUdfQVVYX0RJUihhdXRvY29uZikKKy1BQ19DQU5PTklDQUxfU1lTVEVNCisrQUNfQ0FOT05JQ0FMX1RBUkdFVChbXSkKKyBBTV9JTklUX0FVVE9NQUtFKGNvbnNvbGUtdG9vbHMsIDAuMy4yKQorIAorICMgRGVmYXVsdHMKK0BAIC0yNSw3ICsyNiw2IEBACisgIyBpMThuIHN0dWZmCisgQUxMX0xJTkdVQVM9ImNzIGRlIHJ1IGdhIGZyIgorIEFNX0dOVV9HRVRURVhUCistQUNfT1VUUFVUX0NPTU1BTkRTKFtzZWQgLWUgIi9QT1RGSUxFUyA9L3IgcG8vUE9URklMRVMiIHBvL01ha2VmaWxlLmluID4gcG8vTWFrZWZpbGVdKQorIAorIEFDX0RFRklORV9VTlFVT1RFRChMT0NBTEVESVIsICIvdXNyL3NoYXJlL2xvY2FsZSIpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9maXgtbGliY29uc29sZS1saW5raW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvZml4LWxpYmNvbnNvbGUtbGlua2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTYxZWI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvZml4LWxpYmNvbnNvbGUtbGlua2luZy5wYXRjaApAQCAtMCwwICsxLDU2IEBACitGaXggdGhlIGZvbGxvd2luZyBlcnJvciBkZXRlY3RlZCB3aXRoIGk1ODYtcG9reW1sbGliMzItbGludXgtZ2NjICh0aGUKK211bHRpbGliIHg4Ni02NCBsaWIzMiBjb21waWxlcik6CisgICAgLi4vbGliL2N0dXRpbHMvLmxpYnMvbGliY3R1dGlscy5zbzogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgZ2V0X2tlcm5lbF9zZm0nCisgICAgY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisKK0l0IHNlZW1zIHRoYXQgbGliY3R1dGlscy5zbyAodGhlIGxpYnJhcnkgdGhhdCB1c2VzIGdldF9rZXJuZWxfc2ZtKSBtdXN0CitiZSBzdGF0ZWQgYmVmb3JlIGxpYmNvbnNvbGUuc28gKHRoZSBsaWJyYXJ5IHRoYXQgZXhwb3J0cyB0aGUgZnVuY3Rpb24pIHdoZW4KK3VzaW5nIG11bHRpbGliIGdjYworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworSW5kZXg6IGNvbnNvbGUtdG9vbHMtMC4zLjIvZm9udGZpbGV0b29scy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIub3JpZy9mb250ZmlsZXRvb2xzL01ha2VmaWxlLmFtCisrKysgY29uc29sZS10b29scy0wLjMuMi9mb250ZmlsZXRvb2xzL01ha2VmaWxlLmFtCitAQCAtMTAsNSArMTAsNSBAQCBFWFRSQV9ESVNUID0gZm9udHMydmlyZm9udC5jIHZpcmZvbnQuaAorIAorICMgbGliY29uc29sZSBpcyBuZWVkZWQgYnkgY3R1dGlscworIExEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hIC4uL2xpYi9jZm9udC9saWJjZm9udC5sYSBcCistCS4uL2xpYi9jb25zb2xlL2xpYmNvbnNvbGUubGEgXAorLQkuLi9saWIvY3R1dGlscy9saWJjdHV0aWxzLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorKwkuLi9saWIvY3R1dGlscy9saWJjdHV0aWxzLmxhIFwKKysJLi4vbGliL2NvbnNvbGUvbGliY29uc29sZS5sYSAuLi9saWIvZ2VuZXJpYy9saWJjdGdlbmVyaWMubGEKK0luZGV4OiBjb25zb2xlLXRvb2xzLTAuMy4yL3Z0dG9vbHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjb25zb2xlLXRvb2xzLTAuMy4yLm9yaWcvdnR0b29scy9NYWtlZmlsZS5hbQorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIvdnR0b29scy9NYWtlZmlsZS5hbQorQEAgLTcsOSArNyw5IEBAIGJpbl9QUk9HUkFNUyA9IGNodnQgZGVhbGxvY3Z0IHdyaXRldnQgZmcKKyAJdmNzdGltZSB2dC1pcy1VVEY4IG9wZW52dCBAUkVTSVpFQ09OU0AKKyBFWFRSQV9QUk9HUkFNUyA9IHJlc2l6ZWNvbnMKKyAKKy1MREFERCA9IC4uL2xpYi9jdGxvY2FsL2xpYmN0bG9jYWwuYSAuLi9saWIvY29uc29sZS9saWJjb25zb2xlLmxhIFwKKytMREFERCA9IC4uL2xpYi9jdGxvY2FsL2xpYmN0bG9jYWwuYSAuLi9saWIvY3R1dGlscy9saWJjdHV0aWxzLmxhIFwKKyAJLi4vbGliL2Nmb250L2xpYmNmb250LmxhIFwKKy0JLi4vbGliL2N0dXRpbHMvbGliY3R1dGlscy5sYSAuLi9saWIvZ2VuZXJpYy9saWJjdGdlbmVyaWMubGEKKysJLi4vbGliL2NvbnNvbGUvbGliY29uc29sZS5sYSAuLi9saWIvZ2VuZXJpYy9saWJjdGdlbmVyaWMubGEKKyAKKyB2Y3N0aW1lX0xEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hCisgc2NyZWVuZHVtcF9MREFERCA9IC4uL2xpYi9jdGxvY2FsL2xpYmN0bG9jYWwuYQorSW5kZXg6IGNvbnNvbGUtdG9vbHMtMC4zLjIva2JkdG9vbHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjb25zb2xlLXRvb2xzLTAuMy4yLm9yaWcva2JkdG9vbHMvTWFrZWZpbGUuYW0KKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2tiZHRvb2xzL01ha2VmaWxlLmFtCitAQCAtMTUsOSArMTUsOSBAQCBFWFRSQV9QUk9HUkFNUyA9IGdldGtleWNvZGVzIHNldGtleWNvZGVzCisgbG9hZGtleXNfU09VUkNFUyA9IGxvYWRrZXlzLnkgYW5hbHl6ZS5sCisgCisgWUZMQUdTID0gLWQKKy1MREFERCA9IC4uL2xpYi9jdGxvY2FsL2xpYmN0bG9jYWwuYSAuLi9saWIvY29uc29sZS9saWJjb25zb2xlLmxhIFwKKytMREFERCA9IC4uL2xpYi9jdGxvY2FsL2xpYmN0bG9jYWwuYSAuLi9saWIvY3R1dGlscy9saWJjdHV0aWxzLmxhIFwKKyAJLi4vbGliL2Nmb250L2xpYmNmb250LmxhIFwKKy0JLi4vbGliL2N0dXRpbHMvbGliY3R1dGlscy5sYSAuLi9saWIvZ2VuZXJpYy9saWJjdGdlbmVyaWMubGEKKysJLi4vbGliL2NvbnNvbGUvbGliY29uc29sZS5sYSAuLi9saWIvZ2VuZXJpYy9saWJjdGdlbmVyaWMubGEKKyAKKyBsb2Fka2V5c19MREFERCA9ICQoTERBREQpIEBMRVhMSUJACisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9rYmRyYXRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIva2JkcmF0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzcwYmU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIva2JkcmF0ZS5wYXRjaApAQCAtMCwwICsxLDc1IEBACitQYXRjaCBmcm9tIE1hdHRoaWFzIEdvZWJsIDxvZUBtLmdvZWJsLm5ldD4KK0FkZGVkIHZpYSBPRSBidWd0cmFja2VyOiBidWcgIzQ3OAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIva2JkdG9vbHMva2JkX21vZGUuYy5vcmlnCisrKysgY29uc29sZS10b29scy0wLjMuMi9rYmR0b29scy9rYmRfbW9kZS5jCitAQCAtMjksMTEgKzI5LDE2IEBACisgICBPUFQoIi11IC0tdW5pY29kZSAgIiwgXygiVVRGLTggbW9kZSAoVU5JQ09ERSkiKSk7CisgICBPUFQoIi1zIC0tc2NhbmNvZGUgIiwgXygic2NhbmNvZGUgbW9kZSAoUkFXKSIpKTsKKyAgIE9QVCgiICAgLS1tb2RlPXs4Yml0LGtleWNvZGUsdW5pY29kZSxzY2FuY29kZX0gIiwgXygic2V0IG1vZGUiKSk7CisrICBPUFQoIi1yIC0tcmF0ZT1SQVRFICIsIF8oInNldCByZXBlYXQgcmF0ZSAoZGVmYXVsdDogMzMpIikpOworKyAgT1BUKCItZCAtLWRlbGF5PURFTEFZICIsIF8oInNldCByZXBlYXQgZGVsYXkgKGRlZmF1bHQ6IDI1MCkiKSk7CisgCisgICBPUFQoIi1oIC0taGVscCAgICAgIiwgSEVMUERFU0MpOworICAgT1BUKCItViAtLXZlcnNpb24gICIsIFZFUlNJT05ERVNDKTsKKyB9CisgCisraW50IHJhdGU9LTE7CisraW50IGRlbGF5PS0xOworKworIHN0YXRpYyBpbnQgcGFyc2VfY21kbGluZSAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CisgICAgIGludCBtb2RlID0gLTE7CitAQCAtNDYsMTEgKzUxLDEzIEBACisgICAgICAgeyAibW9kZSIgICAgICwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdtJyB9LAorICAgICAgIHsgInNjYW5jb2RlIiAsIG5vX2FyZ3VtZW50LCBOVUxMLCAncycgfSwKKyAgICAgICB7ICJ1bmljb2RlIiAgLCBub19hcmd1bWVudCwgTlVMTCwgJ3UnIH0sCisrICAgICAgeyAicmF0ZSIgICAgICwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdyJyB9LAorKyAgICAgIHsgImRlbGF5IiAgICAsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnZCcgfSwKKyAgICAgICB7IE5VTEwsIDAsIE5VTEwsIDAgfQorICAgICB9OworICAgICBpbnQgYzsKKyAKKy0gICAgd2hpbGUgKCAoYyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LCAiVmhha3N1IiwgbG9uZ19vcHRzLCBOVUxMKSkgIT0gRU9GKSAKKysgICAgd2hpbGUgKCAoYyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LCAiVmhha3N1cjpkOiIsIGxvbmdfb3B0cywgTlVMTCkpICE9IEVPRikgCisgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgY2FzZSAnaCc6CisgCXVzYWdlICgpOworQEAgLTU4LDYgKzY1LDE0IEBACisgICAgICAgY2FzZSAnVic6CisgCXZlcnNpb24gKCk7CisgCWV4aXQoMCk7CisrICAgICAgY2FzZSAncic6CisrCXJhdGUgPSBhdG9pKG9wdGFyZyk7CisrCW1vZGUgPSAtMjsKKysJYnJlYWs7CisrICAgICAgY2FzZSAnZCc6CisrCWRlbGF5ID0gYXRvaShvcHRhcmcpOworKwltb2RlID0gLTI7CisrCWJyZWFrOworICAgICAgIGNhc2UgJ2EnOgorIAltb2RlID0gS19YTEFURTsKKyAJYnJlYWs7CitAQCAtMTI5LDYgKzE0NCwyMCBAQAorICAgICAgIGV4aXQoMCk7CisgICAgIH0KKyAgIAorKyAgaWYgKCByYXRlICE9IC0xIHx8IGRlbGF5ICE9IC0xICkKKysgICAgeworKyAgICBzdHJ1Y3Qga2JkX3JlcGVhdCBrYmRfcmVwOworKyAgICBrYmRfcmVwLmRlbGF5ID0gZGVsYXk7CisrICAgIGtiZF9yZXAucGVyaW9kID0gcmF0ZTsKKysgICAgaWYgKGlvY3RsKGZkLCBLREtCRFJFUCwgJmtiZF9yZXApKQorKyAgICAgIHsKKysJZnByaW50ZihzdGRlcnIsIHByb2duYW1lKTsKKysJcGVycm9yKF8oIjogZXJyb3Igc2V0dGluZyBrZXlib2FyZCByZXBlYXQgbW9kZVxuIikpOworKwlleGl0KDEpOworKyAgICAgIH0KKysgICAgaWYobW9kZT09LTIpIGV4aXQoMCk7CisrICAgIH0KKysgIAorICAgaWYgKGlvY3RsKGZkLCBLRFNLQk1PREUsIG1vZGUpKQorICAgICB7CisgICAgICAgZnByaW50ZihzdGRlcnIsIHByb2duYW1lKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2xjbWVzc2FnZS5tNCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2xjbWVzc2FnZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGQ0N2E5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvbGNtZXNzYWdlLm00CkBAIC0wLDAgKzEsMjQgQEAKKyMgQ2hlY2sgd2hldGhlciBMQ19NRVNTQUdFUyBpcyBhdmFpbGFibGUgaW4gPGxvY2FsZS5oPi4KKyMgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUuCisjCisjIFRoaXMgZmlsZSBjYW4gYmUgY29waWVkIGFuZCB1c2VkIGZyZWVseSB3aXRob3V0IHJlc3RyaWN0aW9ucy4gIEl0IGNhbgorIyBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudAorIyB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dCBmdW5jdGlvbmFsaXR5LgorIyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCisjIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorIyBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyMgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisKKyMgc2VyaWFsIDIKKworQUNfREVGVU4oW0FNX0xDX01FU1NBR0VTXSwKKyAgW2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9sb2NhbGVfaCA9IHllczsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgTENfTUVTU0FHRVNdLCBhbV9jdl92YWxfTENfTUVTU0FHRVMsCisgICAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsb2NhbGUuaD5dLCBbcmV0dXJuIExDX01FU1NBR0VTXSwKKyAgICAgICBhbV9jdl92YWxfTENfTUVTU0FHRVM9eWVzLCBhbV9jdl92YWxfTENfTUVTU0FHRVM9bm8pXSkKKyAgICBpZiB0ZXN0ICRhbV9jdl92YWxfTENfTUVTU0FHRVMgPSB5ZXM7IHRoZW4KKyAgICAgIEFDX0RFRklORShIQVZFX0xDX01FU1NBR0VTLCAxLAorICAgICAgICBbRGVmaW5lIGlmIHlvdXIgPGxvY2FsZS5oPiBmaWxlIGRlZmluZXMgTENfTUVTU0FHRVMuXSkKKyAgICBmaQorICBmaV0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9uby1kZXAtb24tbGliZmwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9uby1kZXAtb24tbGliZmwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY3MzVhNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL25vLWRlcC1vbi1saWJmbC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitObyByZWFzb24gdG8gbGluayB3aXRoIGxpYmZsIHNpbmNlICdsb2Fka2V5cycgaW1wbGVtZW50cworaXRzIG93biB5eXdyYXAoKS95eWxleCgpIGZ1bmN0aW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBKYWNvYiBLcm9vbiA8amFjb2Iua3Jvb25AbWlrcm9kaWRha3Quc2U+CisKK0luZGV4OiBjb25zb2xlLXRvb2xzLTAuMy4yL2tiZHRvb2xzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY29uc29sZS10b29scy0wLjMuMi5vcmlnL2tiZHRvb2xzL01ha2VmaWxlLmFtCisrKysgY29uc29sZS10b29scy0wLjMuMi9rYmR0b29scy9NYWtlZmlsZS5hbQorQEAgLTE5LDggKzE5LDYgQEAgTERBREQgPSAuLi9saWIvY3Rsb2NhbC9saWJjdGxvY2FsLmEgLi4vbAorIAkuLi9saWIvY2ZvbnQvbGliY2ZvbnQubGEgXAorIAkuLi9saWIvY29uc29sZS9saWJjb25zb2xlLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorIAorLWxvYWRrZXlzX0xEQUREID0gJChMREFERCkgQExFWExJQkAKKy0KKyBiaW5fU0NSSVBUUyA9IG1rX21vZG1hcAorIAorIG5vaW5zdF9IRUFERVJTID0gbG9hZGtleXMuaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvbm9kb2NzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvbm9kb2NzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZDYwOTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9ub2RvY3MucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVGhlIGRvY3MgbmVlZCB0b29scyB3ZSBkb24ndCBoYXZlIHRvIGJ1aWxkIHNvIGRpc2FibGUgdGhlbS4KKworQWxzbyByZW1vdmUgaW50bCBzaW5jZSB0aGUgTWFrZWZpbGUgZG9lc24ndCB3b3JrIHdpdGggMy44MiBhbmQgd2UKK2Rvbid0IHdhbnQgdG8gYnVpbGQgbGliaW50bCBhbnl3YXkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KK1JQIDIwMTIvMTAvMTcKKworSW5kZXg6IGNvbnNvbGUtdG9vbHMtMC4zLjIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjb25zb2xlLXRvb2xzLTAuMy4yLm9yaWcvTWFrZWZpbGUuYW0JMTk5OS0wNC0xNSAwMTozMzoyNC4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL01ha2VmaWxlLmFtCTIwMTItMTAtMTcgMTE6NDg6MTQuMTA3MDY5MTQ1ICswMDAwCitAQCAtMSw3ICsxLDcgQEAKKyAjIC0qLSBtYWtlZmlsZSAtKi0KKyBBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbgorIAorLVNVQkRJUlMgPSBsaWIgZm9udGZpbGV0b29scyB2dHRvb2xzIGtiZHRvb2xzIHNjcmVlbmZvbnR0b29scyBjb250cmliIGRvYyBcCistCWNvbXBhdCBpbmNsdWRlIGV4YW1wbGVzIHBvIGludGwKKytTVUJESVJTID0gbGliIGZvbnRmaWxldG9vbHMgdnR0b29scyBrYmR0b29scyBzY3JlZW5mb250dG9vbHMgY29udHJpYiBcCisrCWNvbXBhdCBpbmNsdWRlIGV4YW1wbGVzIHBvCisgCisgRVhUUkFfRElTVCA9IEJVR1MgUkVMRUFTRSBDUkVESVRTIENPUFlJTkcua2JkIGxvY2FsLXNjcmlwdHMvKiBkZWJpYW4vKiAqLmxzbQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvdWNsaWJjLWZpbGVuby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL3VjbGliYy1maWxlbm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM5NTA2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL3VjbGliYy1maWxlbm8ucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorRml4aW5nIHRoZSBsb2NhbGUgaXNzdWVzIGlzbid0IGVub3VnaCwgY29uc29sZS10b29scyBhbHNvIGRvZXMgYSBjb3VwbGUgb2YKK290aGVyIHByZXR0eSBzdHVwaWQgdGhpbmdzIChsaWtlIEZJTEUgKmY7IGYtPl9maWxlbm8gaW5zdGVhZCBvZiBmaWxlbm8oZikpLAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIvbGliL2Nmb250L2ZvbnRzdHJ1Y3QuYy5hcmsJMjAwNS0wNS0yMiAxOToxMjozOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2xpYi9jZm9udC9mb250c3RydWN0LmMJMjAwNS0wNS0yMiAxOToxMzoyMy4wMDAwMDAwMDAgKzAwMDAKK0BAIC01MCw4ICs1MCw3IEBACisgICAgKiBnZXQgZmlsZXNpemUKKyAgICAqLworICAgCistICAvKiBGSVhNRTogc2hvdWxkIG5vdCB1c2UgX2ZpbGVubyAhICovCistICBpZiAoZnN0YXQoZm9udGZpbGUtPl9maWxlbm8sICZzdGJ1ZikgPT0gLTEpCisrICBpZiAoZnN0YXQoZmlsZW5vKGZvbnRmaWxlKSwgJnN0YnVmKSA9PSAtMSkKKyAgICAgZ290byByc2ZfcmV0dXJuX2Vycm9yOworICAgCisgICBpZiAoU19JU1JFRyhzdGJ1Zi5zdF9tb2RlKSkKK0BAIC0yMTEsOCArMjEwLDcgQEAKKyAgICAqIGdldCBmaWxlc2l6ZQorICAgICovCisgICAKKy0gIC8qIEZJWE1FOiBzaG91bGQgbm90IHVzZSBfZmlsZW5vICEgKi8KKy0gIGlmIChmc3RhdChmb250ZmlsZS0+X2ZpbGVubywgJnN0YnVmKSA9PSAtMSkKKysgIGlmIChmc3RhdChmaWxlbm8oZm9udGZpbGUpLCAmc3RidWYpID09IC0xKQorICAgICBnb3RvIHJmZ19yZXR1cm5fZXJyb3I7CisgICAKKyAgIGlmIChTX0lTUkVHKHN0YnVmLnN0X21vZGUpKQorLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIvbGliL2NvbnNvbGUvYWNtLmMuYXJrCTIwMDUtMDUtMjIgMTk6MTc6MTUuMDAwMDAwMDAwICswMDAwCisrKysgY29uc29sZS10b29scy0wLjMuMi9saWIvY29uc29sZS9hY20uYwkyMDA1LTA1LTIyIDE5OjE3OjIzLjAwMDAwMDAwMCArMDAwMAorQEAgLTMwLDcgKzMwLDcgQEAKKyAgIGxjdF9ib29sZWFuIHBhcnNlX2ZhaWxlZCA9IEZhbHNlOworICAgbGN0X2Jvb2xlYW4gaXNfdW5pY29kZTsKKyAKKy0gIGlmIChmc3RhdChmcC0+X2ZpbGVubywgJnN0YnVmKSkgCisrICBpZiAoZnN0YXQoZmlsZW5vKGZwKSwgJnN0YnVmKSkgCisgICAgIHBlcnJvcihfKCJDYW5ub3Qgc3RhdCBBQ00gZmlsZSIpKSwgZXhpdCgxKTsKKyAKKyAgIC8qIGZpcnN0IHRyeSBhIHdnMTUtY2hhcm1hcCAoZ2xpYmMpIGZpbGUgZm9ybWF0ICovCistLS0gY29uc29sZS10b29scy0wLjMuMi9pbmNsdWRlL2xjdC9sb2NhbC5oLmFyawkyMDA1LTA1LTIyIDE5OjA4OjU0LjAwMDAwMDAwMCArMDAwMAorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIvaW5jbHVkZS9sY3QvbG9jYWwuaAkyMDA1LTA1LTIyIDE5OjA5OjEyLjAwMDAwMDAwMCArMDAwMAorQEAgLTgsNyArOCw3IEBACisgI2luY2x1ZGUgPGxvY2FsZS5oPgorIAorIAorLSNpZmRlZiBIQVZFX0xPQ0FMRV9ICisrI2lmIGRlZmluZWQoSEFWRV9MT0NBTEVfSCkgJiYgZGVmaW5lZChIQVZFX0xJQklOVExfSCkKKyAjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjIGRlZmluZSBfKFN0cmluZykgZ2V0dGV4dCAoU3RyaW5nKQorICMgaWZkZWYgZ2V0dGV4dF9ub29wCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29sc18wLjMuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzXzAuMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MGE1YTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29sc18wLjMuMi5iYgpAQCAtMCwwICsxLDM3IEBACitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5rYmQ7bWQ1PTliMmQ5MTUxMWQzZDgwZDRkMjBhYzZlNmIwMTM3ZmU5IgorU1VNTUFSWSA9ICJBbGxvd3MgeW91IHRvIHNldC11cCBhbmQgbWFuaXB1bGF0ZSB0aGUgTGludXggY29uc29sZSIKK0RFU0NSSVBUSU9OID0gIlByb3ZpZGVzIHRvb2xzIHRoYXQgZW5hYmxlIHRoZSBzZXQtdXAgYW5kIG1hbmlwdWxhdGlvbiBvZiB0aGUgbGludXggY29uc29sZSBhbmQgY29uc29sZS1mb250IGZpbGVzLiIKK1BSID0gInI4IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9sY3QvY29uc29sZS10b29scy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29kZXBhZ2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbXBpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8va2JkcmF0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91Y2xpYmMtZmlsZW5vLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vZG9jcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtbGliY29uc29sZS1saW5raW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vLWRlcC1vbi1saWJmbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sY21lc3NhZ2UubTQgXAorICAgICAgICAgICBmaWxlOi8vTWFrZXZhcnMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiZjIxNTY0ZmMzOGIzYWY4NTNlZjcyNGJhYmRkYmFjZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlZWE2YjQ0MTY3MmRhY2QyNTEwNzlmYzg1ZWQzMjJlMTk2MjgyZTBlNjZjMTYzMDNlYzY0YzNhMmIxYzEyNmMyIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJbWtkaXIgLXAgJHtTfS9tNAorCWNwICR7V09SS0RJUn0vbGNtZXNzYWdlLm00ICR7U30vbTQvCisJcm0gLWYgJHtTfS9hY2luY2x1ZGUubTQKKwljcCAke1dPUktESVJ9L01ha2V2YXJzICR7U30vcG8vCit9CisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK2JpbmRpcl9wcm9ncyA9ICJjaHZ0IGRlYWxsb2N2dCBmZ2NvbnNvbGUgb3BlbnZ0IgorQUxURVJOQVRJVkVfJHtQTn0gPSAiJHtiaW5kaXJfcHJvZ3N9IgorCitSREVQRU5EU18ke1BOfSA9ICJiYXNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtNi45LWNwLWktdS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLTYuOS1jcC1pLXUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1MmI0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLTYuOS1jcC1pLXUucGF0Y2gKQEAgLTAsMCArMSwxMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKK1RoaXMgcGF0Y2ggd2FzIGltcG9ydGVkIGZyb20gdGhlIEZlZG9yYSBDb3JlIDggY29yZXV0aWxzLTYuOS05IHBhY2thZ2UuCisKK1RoZSBwYWNrYWdlIGlzIHN0YXRlZCBhcyBiZWluZyBMaWNlbnNlZCBhcyBHUEx2MisuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tLQorCitXaGVuICJjcCAtaSAtLXVwZGF0ZSBvbGQgbmV3IiB3b3VsZCBkbyBub3RoaW5nIGJlY2F1c2UgIm5ldyIgaXMKK25ld2VyIHRoYW4gIm9sZCIsIGNwIHdvdWxkIG5vbmV0aGVsZXNzIHByb21wdCBmb3Igd2hldGhlciBpdCBpcworb2sgdG8gb3ZlcndyaXRlICJuZXciLiAgVGhlbiwgcmVnYXJkbGVzcyBvZiB0aGUgcmVzcG9uc2UgKGJlY2F1c2UKK29mIHRoZSAtLXVwZGF0ZSBvcHRpb24pLCBjcCB3b3VsZCBkbyBub3RoaW5nLgorCitUaGUgZm9sbG93aW5nIHBhdGNoIGVsaW1pbmF0ZXMgdGhlIHVubmVjZXNzYXJ5IHByb21wdCBpbiB0aGF0IGNhc2UuCisKK2RpZmYgLS1naXQgYS9zcmMvY29weS5jIGIvc3JjL2NvcHkuYworaW5kZXggYjdiZjczYi4uMGU1NDlkMiAxMDA2NDQKKy0tLSBhL3NyYy9jb3B5LmMKKysrKyBiL3NyYy9jb3B5LmMKK0BAIC0xMjEwLDYgKzEyMTAsMzAgQEAgY29weV9pbnRlcm5hbCAoY2hhciBjb25zdCAqc3JjX25hbWUsIGNoYXIgY29uc3QgKmRzdF9uYW1lLAorIAkgICAgICByZXR1cm4gZmFsc2U7CisgCSAgICB9CisKKysJICBpZiAoIVNfSVNESVIgKHNyY19tb2RlKSAmJiB4LT51cGRhdGUpCisrCSAgICB7CisrCSAgICAgIC8qIFdoZW4gcHJlc2VydmluZyB0aW1lIHN0YW1wcyAoYnV0IG5vdCBtb3Zpbmcgd2l0aGluIGEgZmlsZQorKwkJIHN5c3RlbSksIGRvbid0IHdvcnJ5IGlmIHRoZSBkZXN0aW5hdGlvbiB0aW1lIHN0YW1wIGlzCisrCQkgbGVzcyB0aGFuIHRoZSBzb3VyY2UgbWVyZWx5IGJlY2F1c2Ugb2YgdGltZSBzdGFtcAorKwkJIHRydW5jYXRpb24uICAqLworKwkgICAgICBpbnQgb3B0aW9ucyA9ICgoeC0+cHJlc2VydmVfdGltZXN0YW1wcworKwkJCSAgICAgICYmICEgKHgtPm1vdmVfbW9kZQorKwkJCQkgICAgJiYgZHN0X3NiLnN0X2RldiA9PSBzcmNfc2Iuc3RfZGV2KSkKKysJCQkgICAgID8gVVRJTUVDTVBfVFJVTkNBVEVfU09VUkNFCisrCQkJICAgICA6IDApOworKworKwkgICAgICBpZiAoMCA8PSB1dGltZWNtcCAoZHN0X25hbWUsICZkc3Rfc2IsICZzcmNfc2IsIG9wdGlvbnMpKQorKwkJeworKwkJICAvKiBXZSdyZSB1c2luZyAtLXVwZGF0ZSBhbmQgdGhlIGRlc3RpbmF0aW9uIGlzIG5vdCBvbGRlcgorKwkJICAgICB0aGFuIHRoZSBzb3VyY2UsIHNvIGRvIG5vdCBjb3B5IG9yIG1vdmUuICBQcmV0ZW5kIHRoZQorKwkJICAgICByZW5hbWUgc3VjY2VlZGVkLCBzbyB0aGUgY2FsbGVyIChpZiBpdCdzIG12KSBkb2Vzbid0CisrCQkgICAgIGVuZCB1cCByZW1vdmluZyB0aGUgc291cmNlIGZpbGUuICAqLworKwkJICBpZiAocmVuYW1lX3N1Y2NlZWRlZCkKKysJCSAgICAqcmVuYW1lX3N1Y2NlZWRlZCA9IHRydWU7CisrCQkgIHJldHVybiB0cnVlOworKwkJfQorKwkgICAgfQorKworIAkgIC8qIFdoZW4gdGhlcmUgaXMgYW4gZXhpc3RpbmcgZGVzdGluYXRpb24gZmlsZSwgd2UgbWF5IGVuZCB1cAorIAkgICAgIHJldHVybmluZyBlYXJseSwgYW5kIGhlbmNlIG5vdCBjb3B5aW5nL21vdmluZyB0aGUgZmlsZS4KKyAJICAgICBUaGlzIG1heSBiZSBkdWUgdG8gYW4gaW50ZXJhY3RpdmUgYG5lZ2F0aXZlJyByZXBseSB0byB0aGUKK0BAIC0xMzAyLDMwICsxMzI2LDYgQEAgY29weV9pbnRlcm5hbCAoY2hhciBjb25zdCAqc3JjX25hbWUsIGNoYXIgY29uc3QgKmRzdF9uYW1lLAorIAkJICAgICAgcmV0dXJuIGZhbHNlOworIAkJICAgIH0KKyAJCX0KKy0KKy0JICAgICAgaWYgKHgtPnVwZGF0ZSkKKy0JCXsKKy0JCSAgLyogV2hlbiBwcmVzZXJ2aW5nIHRpbWUgc3RhbXBzIChidXQgbm90IG1vdmluZyB3aXRoaW4gYSBmaWxlCistCQkgICAgIHN5c3RlbSksIGRvbid0IHdvcnJ5IGlmIHRoZSBkZXN0aW5hdGlvbiB0aW1lIHN0YW1wIGlzCistCQkgICAgIGxlc3MgdGhhbiB0aGUgc291cmNlIG1lcmVseSBiZWNhdXNlIG9mIHRpbWUgc3RhbXAKKy0JCSAgICAgdHJ1bmNhdGlvbi4gICovCistCQkgIGludCBvcHRpb25zID0gKCh4LT5wcmVzZXJ2ZV90aW1lc3RhbXBzCistCQkJCSAgJiYgISAoeC0+bW92ZV9tb2RlCistCQkJCQkmJiBkc3Rfc2Iuc3RfZGV2ID09IHNyY19zYi5zdF9kZXYpKQorLQkJCQkgPyBVVElNRUNNUF9UUlVOQ0FURV9TT1VSQ0UKKy0JCQkJIDogMCk7CistCistCQkgIGlmICgwIDw9IHV0aW1lY21wIChkc3RfbmFtZSwgJmRzdF9zYiwgJnNyY19zYiwgb3B0aW9ucykpCistCQkgICAgeworLQkJICAgICAgLyogV2UncmUgdXNpbmcgLS11cGRhdGUgYW5kIHRoZSBkZXN0aW5hdGlvbiBpcyBub3Qgb2xkZXIKKy0JCQkgdGhhbiB0aGUgc291cmNlLCBzbyBkbyBub3QgY29weSBvciBtb3ZlLiAgUHJldGVuZCB0aGUKKy0JCQkgcmVuYW1lIHN1Y2NlZWRlZCwgc28gdGhlIGNhbGxlciAoaWYgaXQncyBtdikgZG9lc24ndAorLQkJCSBlbmQgdXAgcmVtb3ZpbmcgdGhlIHNvdXJjZSBmaWxlLiAgKi8KKy0JCSAgICAgIGlmIChyZW5hbWVfc3VjY2VlZGVkKQorLQkJCSpyZW5hbWVfc3VjY2VlZGVkID0gdHJ1ZTsKKy0JCSAgICAgIHJldHVybiB0cnVlOworLQkJICAgIH0KKy0JCX0KKyAJICAgIH0KKworIAkgIGlmICh4LT5tb3ZlX21vZGUpCitkaWZmIC0tZ2l0IGEvdGVzdHMvbXYvdXBkYXRlIGIvdGVzdHMvbXYvdXBkYXRlCitpbmRleCAwYzA2MDI0Li42YzNkMTQ5IDEwMDc1NQorLS0tIGEvdGVzdHMvbXYvdXBkYXRlCisrKysgYi90ZXN0cy9tdi91cGRhdGUKK0BAIC0xLDcgKzEsNyBAQAorICMhL2Jpbi9zaAorICMgbWFrZSBzdXJlIC0tdXBkYXRlIHdvcmtzIGFzIGFkdmVydGlzZWQKKworLSMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDA0LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDA0LCAyMDA2LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorQEAgLTQ2LDExICs0NiwxNiBAQCBmaQorCisgZmFpbD0wCisKKy1mb3IgY3Bfb3JfbXYgaW4gY3AgbXY7IGRvCistICAjIFRoaXMgaXMgYSBuby1vcC4KKy0gICRjcF9vcl9tdiAtLXVwZGF0ZSBvbGQgbmV3IHx8IGZhaWw9MQorLSAgY2FzZSAiYGNhdCBuZXdgIiBpbiBuZXcpIDs7ICopIGZhaWw9MSA7OyBlc2FjCistICBjYXNlICJgY2F0IG9sZGAiIGluIG9sZCkgOzsgKikgZmFpbD0xIDs7IGVzYWMKKytmb3IgaW50ZXJhY3RpdmUgaW4gJycgLWk7IGRvCisrICBmb3IgY3Bfb3JfbXYgaW4gY3AgbXY7IGRvCisrICAgICMgVGhpcyBpcyBhIG5vLW9wLCB3aXRoIG5vIHByb21wdC4KKysgICAgIyBXaXRoIGNvcmV1dGlscy02LjkgYW5kIGVhcmxpZXIsIHVzaW5nIC0tdXBkYXRlIHdpdGggLWkgd291bGQKKysgICAgIyBtaXN0YWtlbmx5IGVsaWNpdCBhIHByb21wdC4KKysgICAgJGNwX29yX212ICRpbnRlcmFjdGl2ZSAtLXVwZGF0ZSBvbGQgbmV3IDwgL2Rldi9udWxsID4gb3V0IDI+JjEgfHwgZmFpbD0xCisrICAgIHRlc3QgLXMgb3V0ICYmIGZhaWw9MQorKyAgICBjYXNlICJgY2F0IG5ld2AiIGluIG5ldykgOzsgKikgZmFpbD0xIDs7IGVzYWMKKysgICAgY2FzZSAiYGNhdCBvbGRgIiBpbiBvbGQpIDs7ICopIGZhaWw9MSA7OyBlc2FjCisrICBkb25lCisgZG9uZQorCisgIyBUaGlzIHdpbGwgYWN0dWFsbHkgcGVyZm9ybSB0aGUgcmVuYW1lLgorLS0KKzEuNS4zLnJjMS4xNi5nOWQ2ZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtYnVpbGQtd2l0aC1hY2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1idWlsZC13aXRoLWFjbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjczZDc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtYnVpbGQtd2l0aC1hY2wucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworRml4IHRoZSBmb2xsb3dpbmcgaXNzdWUgc28gdGhhdCBjb3JldXRpbHMgY2FuIGJ1aWxkIHdpdGggQUNMOgorCitjb25maWd1cmU6IFdBUk5JTkc6IGxpYmFjbCBkZXZlbG9wbWVudCBsaWJyYXJ5IHdhcyBub3QgZm91bmQgb3Igbm90IHVzYWJsZS4KK2NvbmZpZ3VyZTogV0FSTklORzogR05VIGNvcmV1dGlscyB3aWxsIGJlIGJ1aWx0IHdpdGhvdXQgQUNMIHN1cHBvcnQuCisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBtNC9hY2wubTQgfCAgICAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tNC9hY2wubTQgYi9tNC9hY2wubTQKK2luZGV4IGQ2YTQ0OGEuLmE5ZDQ4MzYgMTAwNjQ0CistLS0gYS9tNC9hY2wubTQKKysrKyBiL200L2FjbC5tNAorQEAgLTE1OSw3ICsxNTksNyBAQCBBQ19ERUZVTihbZ2xfQUNMX0dFVF9GSUxFXSwKKyAgICAgICAgICAgXV0pXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19hY2xfZ2V0X2ZpbGU9eWVzXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19hY2xfZ2V0X2ZpbGU9bm9dLAorLSAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX2FjbF9nZXRfZmlsZT1jcm9zcy1jb21waWxpbmddKV0pCisrICAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfYWNsX2dldF9maWxlPXllc10pXSkKKyAKKyAgIEFTX0lGKFt0ZXN0ICRnbF9jdl9mdW5jX3dvcmtpbmdfYWNsX2dldF9maWxlID0geWVzXSwgWyQxXSwgWyQyXSkKKyBdKQorLS0gCisxLjcuNworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1maXgtaW5zdGFsbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWZpeC1pbnN0YWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZjYxZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1maXgtaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDEwMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworVGhlIGluc3RhbGwgY29tbWFuZCBkb2Vzbid0IG92ZXIgd3JpdGUgdGhlIGRhbmdsaW5nIHN5bWxpbmssIGZvcgorZXhhbXBsZToKKworJCBpbnN0YWxsIGZpbGVBIC90bXAvZmlsZUEKKworSWYgL3RtcC9maWxlQSBpcyBhIGRhbmdsaW5nIHN5bWxpbmssIHRoZXJlIHdvdWxkIGJlIGFuIGVycm9yOgorCitpbnN0YWxsOiBjYW5ub3QgY3JlYXRlIHJlZ3VsYXIgZmlsZSAnL3RtcC9maWxlQSc6IEZpbGUgZXhpc3RzCisKK1RoaXMgaXMgYmVjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGNvZGUgaW4gY29weS5jOgorCisgIGlmICghbmV3X2RzdCkKKyAgICB7CisgICAgICBpZiAoWFNUQVQgKHgsIGRzdF9uYW1lLCAmZHN0X3NiKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGVycm5vICE9IEVOT0VOVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXJyb3IgKDAsIGVycm5vLCBfKCJjYW5ub3Qgc3RhdCAlcyIpLCBxdW90ZSAoZHN0X25hbWUpKTsKKyAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbmV3X2RzdCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworWFNUQVQoKSB1c2Ugc3RhdCgpIGZvciBkc3RfbmFtZSh0aGUgZGFuZ2xpbmcgc3ltbGluayAvdG1wL2ZpbGVBKSB3aGVuCitpbnN0YWxsLmMgaW52b2tlcyBpdCwgYW5kIHN0YXQgd2lsbCBzZXQgZXJybm8gdG8gRU5PRU5ULCBhbmQgdGhlbgorbmV3X2RzdCB3aWxsIGJlIHNldCB0byB0cnVlIHdoaWNoIG1lYW5zIHRoYXQgL3RtcC9maWxlQSBkb2Vzbid0IGV4aXN0LAordGhlbiB3ZSB3aWxsIGNyZWF0ZSAvdG1wL2ZpbGVBIHdpdGhvdXQgcmVtb3ZlIGl0IGZpcnN0LCBzbyB0aGUgZXJyb3IKK2NvbWVzLgorCitUaGlzIGlzIGZpeGVkIGluIGEgd2F5IHdoaWNoIGFkZHMgdGhlIG1lbWJlciBjbWRfaW5zdGFsbCBpbgorc3RydWN0IGNwX29wdGlvbnMgdG8gbWFrZSBzdXJlIG15IGNoYW5nZSBvbmx5IGFmZmVjdGVkIHRvIHRoZSBpbnN0YWxsCitjb21tYW5kIGFuZCB1c2UgbHN0YXQgdG8gZml4IHRoZSBwcm9ibGVtLgorICAgIAorU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKKy0tLQorIHNyYy9jb3B5LmMgICAgfCAgIDEwICsrKysrKysrKy0KKyBzcmMvY29weS5oICAgIHwgICAgMyArKysKKyBzcmMvaW5zdGFsbC5jIHwgICAgMSArCisgMyBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2NvcHkuYyBiL3NyYy9jb3B5LmMKKy0tLSBhL3NyYy9jb3B5LmMKKysrKyBiL3NyYy9jb3B5LmMKK0BAIC0xMDI5LDYgKzEwMjksNyBAQCBjb3B5X2ludGVybmFsIChjaGFyIGNvbnN0ICpzcmNfbmFtZSwgY2hhciBjb25zdCAqZHN0X25hbWUsCisgICBib29sIGRlbGF5ZWRfb2s7CisgICBib29sIGNvcGllZF9hc19yZWd1bGFyID0gZmFsc2U7CisgICBib29sIHByZXNlcnZlX21ldGFkYXRhOworKyAgaW50IGRzdF9zdGF0X3Jlc3VsdDsKKyAKKyAgIGlmICh4LT5tb3ZlX21vZGUgJiYgcmVuYW1lX3N1Y2NlZWRlZCkKKyAgICAgKnJlbmFtZV9zdWNjZWVkZWQgPSBmYWxzZTsKK0BAIC0xMDY5LDcgKzEwNzAsMTQgQEAgY29weV9pbnRlcm5hbCAoY2hhciBjb25zdCAqc3JjX25hbWUsIGNoYXIgY29uc3QgKmRzdF9uYW1lLAorIAorICAgaWYgKCFuZXdfZHN0KQorICAgICB7CistICAgICAgaWYgKFhTVEFUICh4LCBkc3RfbmFtZSwgJmRzdF9zYikgIT0gMCkKKysgICAgICBpZiAoIHgtPmNtZF9pbnN0YWxsICYmICggeC0+YmFja3VwX3R5cGUgPT0gbm9fYmFja3VwcykpCisrICAgICAgICBkc3Rfc3RhdF9yZXN1bHQgPSBsc3RhdCAoZHN0X25hbWUsICZkc3Rfc2IpOworKyAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgZHN0X3N0YXRfcmVzdWx0ID0gWFNUQVQgKHgsIGRzdF9uYW1lLCAmZHN0X3NiKTsKKysgICAgICAgIH0KKysKKysgICAgICBpZiAoZHN0X3N0YXRfcmVzdWx0ICE9IDApCisgCXsKKyAJICBpZiAoZXJybm8gIT0gRU5PRU5UKQorIAkgICAgeworZGlmZiAtLWdpdCBhL3NyYy9jb3B5LmggYi9zcmMvY29weS5oCistLS0gYS9zcmMvY29weS5oCisrKysgYi9zcmMvY29weS5oCitAQCAtMTE0LDYgKzExNCw5IEBAIHN0cnVjdCBjcF9vcHRpb25zCisgICAgICBJZiB0aGF0IGZhaWxzLCB0aGVuIHJlc29ydCB0byBjb3B5aW5nLiAgKi8KKyAgIGJvb2wgbW92ZV9tb2RlOworIAorKyAgLyogRm9yIHRoZSBpbnN0YWxsIGNvbW1hbmQgKi8KKysgIGJvb2wgY21kX2luc3RhbGw7CisrCisgICAvKiBXaGV0aGVyIHRoaXMgcHJvY2VzcyBoYXMgYXBwcm9wcmlhdGUgcHJpdmlsZWdlcyB0byBjaG93biBhIGZpbGUKKyAgICAgIHdob3NlIG93bmVyIGlzIG5vdCB0aGUgZWZmZWN0aXZlIHVzZXIgSUQuICAqLworICAgYm9vbCBjaG93bl9wcml2aWxlZ2VzOworZGlmZiAtLWdpdCBhL3NyYy9pbnN0YWxsLmMgYi9zcmMvaW5zdGFsbC5jCistLS0gYS9zcmMvaW5zdGFsbC5jCisrKysgYi9zcmMvaW5zdGFsbC5jCitAQCAtMTQ5LDYgKzE0OSw3IEBAIGNwX29wdGlvbl9pbml0IChzdHJ1Y3QgY3Bfb3B0aW9ucyAqeCkKKyAgIHgtPmhhcmRfbGluayA9IGZhbHNlOworICAgeC0+aW50ZXJhY3RpdmUgPSBJX1VOU1BFQ0lGSUVEOworICAgeC0+bW92ZV9tb2RlID0gZmFsc2U7CisrICB4LT5jbWRfaW5zdGFsbCA9IHRydWU7CisgICB4LT5jaG93bl9wcml2aWxlZ2VzID0gY2hvd25fcHJpdmlsZWdlcyAoKTsKKyAgIHgtPm9uZV9maWxlX3N5c3RlbSA9IGZhbHNlOworICAgeC0+cHJlc2VydmVfb3duZXJzaGlwID0gZmFsc2U7CistLSAKKzEuNy4wLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtZml4LXRleGluZm8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1maXgtdGV4aW5mby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWU1YTJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtZml4LXRleGluZm8ucGF0Y2gKQEAgLTAsMCArMSwzNzUgQEAKK0Zyb20gMTcwYmU0MDIzYmJmOWU5Njk4YTcwOWUwMzI2NTk0NTU4OGFjOGUwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAyNiBOb3YgMjAxMyAwMDoyMTo1MCArMDgwMAorU3ViamVjdDogW1BBVENIXSBkb2MvY29yZXV0aWxzLnRleGk6IFVzZSAnQGl0ZW0nIGluc3RlYWQgb2YgJ0BpdGVteCcKKworVXNlICdAaXRlbScgaW5zdGVhZCBvZiAnQGl0ZW14JyBpbiBzZXZlcmFsIHBsYWNlcywgYXMgVGV4aW5mbyA1IHJlZnVzZXMKK3RvIHByb2Nlc3MgYW4gJ0BpdGVteCcgdGhhdCBpcyBub3QgcHJlY2VkZWQgYnkgYW4gJ0BpdGVtJy4gIEVuc3VyZSB0aGF0Citub2RlIGV4dGVuZGVkIG5hbWVzIGluIG1lbnVzIGFuZCBzZWN0aW9uaW5nIGFyZSBjb25zaXN0ZW50LCBhbmQgdGhhdAorb3JkZXJpbmcgYW5kIHByZXNlbmNlIG9mIG5vZGVzIGluIG1lbnVzIGFuZCBpbiB0aGUgYWN0dWFsIHRleHQgYXJlCitjb25zaXN0ZW50IGFzIHdlbGwuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW0Zyb206IGNvcmV1dGlscy43NjIwLm43Lm5hYmJsZS5jb20sIGJ1ZyMxMTgyOF0KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBkb2MvY29yZXV0aWxzLnRleGkgfCA4MiArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNDEgaW5zZXJ0aW9ucygrKSwgNDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kb2MvY29yZXV0aWxzLnRleGkgYi9kb2MvY29yZXV0aWxzLnRleGkKK2luZGV4IDU4ODE0N2YuLjJkYWUzZmUgMTAwNjQ0CistLS0gYS9kb2MvY29yZXV0aWxzLnRleGkKKysrKyBiL2RvYy9jb3JldXRpbHMudGV4aQorQEAgLTU1NSw3ICs1NTUsNyBAQCBzeW1ib2xpYyBsaW5rIHRvIGEgZGlyZWN0b3J5LiAgQHhyZWZ7VGFyZ2V0IGRpcmVjdG9yeX0uCisgQGVuZCBtYWNybworIAorIEBtYWNybyBvcHRTaQorLUBpdGVteCAtLXNpCisrQGl0ZW0gLS1zaQorIEBvcGluZGV4IC0tc2kKKyBAY2luZGV4IFNJIG91dHB1dAorIEFwcGVuZCBhbiBTSS1zdHlsZSBhYmJyZXZpYXRpb24gdG8gZWFjaCBzaXplLCBzdWNoIGFzIEBzYW1we019IGZvcgorQEAgLTU3OCw3ICs1NzgsNyBAQCBVc2UgdGhlIEBvcHRpb257LS1zaX0gb3B0aW9uIGlmIHlvdSBwcmVmZXIgcG93ZXJzIG9mIDEwMDAuCisgQGVuZCBtYWNybworIAorIEBtYWNybyBvcHRTdHJpcFRyYWlsaW5nU2xhc2hlcworLUBpdGVteCBAd3tAa2Jkey0tc3RyaXAtdHJhaWxpbmctc2xhc2hlc319CisrQGl0ZW0gQHd7QGtiZHstLXN0cmlwLXRyYWlsaW5nLXNsYXNoZXN9fQorIEBvcGluZGV4IC0tc3RyaXAtdHJhaWxpbmctc2xhc2hlcworIEBjaW5kZXggc3RyaXBwaW5nIHRyYWlsaW5nIHNsYXNoZXMKKyBSZW1vdmUgYW55IHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBlYWNoIEB2YXJ7c291cmNlfSBhcmd1bWVudC4KK0BAIC0yNDk2LDcgKzI0OTYsNyBAQCBieSAxMDQ4NTc2LgorIEhvd2V2ZXIsIGlmIEB2YXJ7bn0gc3RhcnRzIHdpdGggYSBAc2FtcHstfSwKKyBwcmludCBhbGwgYnV0IHRoZSBsYXN0IEB2YXJ7bn0gYnl0ZXMgb2YgZWFjaCBmaWxlLgorIAorLUBpdGVteCAtbiBAdmFye259CisrQGl0ZW0gLW4gQHZhcntufQorIEBpdGVteCAtLWxpbmVzPUB2YXJ7bn0KKyBAb3BpbmRleCAtbgorIEBvcGluZGV4IC0tbGluZXMKK0BAIC0yNjMzLDcgKzI2MzMsNyBAQCBUaGlzIG9wdGlvbiBpcyB0aGUgc2FtZSBhcyBAb3B0aW9uey0tZm9sbG93PW5hbWUgLS1yZXRyeX0uICBUaGF0IGlzLCB0YWlsCisgd2lsbCBhdHRlbXB0IHRvIHJlb3BlbiBhIGZpbGUgd2hlbiBpdCBpcyByZW1vdmVkLiAgU2hvdWxkIHRoaXMgZmFpbCwgdGFpbAorIHdpbGwga2VlcCB0cnlpbmcgdW50aWwgaXQgYmVjb21lcyBhY2Nlc3NpYmxlIGFnYWluLgorIAorLUBpdGVteCAtLXJldHJ5CisrQGl0ZW0gLS1yZXRyeQorIEBvcGluZGV4IC0tcmV0cnkKKyBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgbWFpbmx5IHdoZW4gZm9sbG93aW5nIGJ5IG5hbWUgKGkuZS4sIHdpdGgKKyBAb3B0aW9uey0tZm9sbG93PW5hbWV9KS4KK0BAIC0yNjQxLDcgKzI2NDEsNyBAQCBXaXRob3V0IHRoaXMgb3B0aW9uLCB3aGVuIHRhaWwgZW5jb3VudGVycyBhIGZpbGUgdGhhdCBkb2Vzbid0CisgZXhpc3Qgb3IgaXMgb3RoZXJ3aXNlIGluYWNjZXNzaWJsZSwgaXQgcmVwb3J0cyB0aGF0IGZhY3QgYW5kCisgbmV2ZXIgY2hlY2tzIGl0IGFnYWluLgorIAorLUBpdGVteCAtLXNsZWVwLWludGVydmFsPUB2YXJ7bnVtYmVyfQorK0BpdGVtIC0tc2xlZXAtaW50ZXJ2YWw9QHZhcntudW1iZXJ9CisgQG9waW5kZXggLS1zbGVlcC1pbnRlcnZhbAorIENoYW5nZSB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBiZXR3ZWVuIGl0ZXJhdGlvbnMgKHRoZSBkZWZhdWx0IGlzIDEuMCkuCisgRHVyaW5nIG9uZSBpdGVyYXRpb24sIGV2ZXJ5IHNwZWNpZmllZCBmaWxlIGlzIGNoZWNrZWQgdG8gc2VlIGlmIGl0IGhhcworQEAgLTI2NTEsNyArMjY1MSw3IEBAIEhpc3RvcmljYWwgaW1wbGVtZW50YXRpb25zIG9mIEBjb21tYW5ke3RhaWx9IGhhdmUgcmVxdWlyZWQgdGhhdAorIGFuIGFyYml0cmFyeSBmbG9hdGluZyBwb2ludCBudW1iZXIgKHVzaW5nIGEgcGVyaW9kIGJlZm9yZSBhbnkKKyBmcmFjdGlvbmFsIGRpZ2l0cykuCisgCistQGl0ZW14IC0tcGlkPUB2YXJ7cGlkfQorK0BpdGVtIC0tcGlkPUB2YXJ7cGlkfQorIEBvcGluZGV4IC0tcGlkCisgV2hlbiBmb2xsb3dpbmcgYnkgbmFtZSBvciBieSBkZXNjcmlwdG9yLCB5b3UgbWF5IHNwZWNpZnkgdGhlIHByb2Nlc3MgSUQsCisgQHZhcntwaWR9LCBvZiB0aGUgc29sZSB3cml0ZXIgb2YgYWxsIEB2YXJ7ZmlsZX0gYXJndW1lbnRzLiAgVGhlbiwgc2hvcnRseQorQEAgLTI2NzQsNyArMjY3NCw3IEBAIHRlcm1pbmF0ZSB1bnRpbCBsb25nIGFmdGVyIHRoZSByZWFsIHdyaXRlciBoYXMgdGVybWluYXRlZC4KKyBOb3RlIHRoYXQgQG9wdGlvbnstLXBpZH0gY2Fubm90IGJlIHN1cHBvcnRlZCBvbiBzb21lIHN5c3RlbXM7IEBjb21tYW5ke3RhaWx9Cisgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgdGhpcyBpcyB0aGUgY2FzZS4KKyAKKy1AaXRlbXggLS1tYXgtdW5jaGFuZ2VkLXN0YXRzPUB2YXJ7bn0KKytAaXRlbSAtLW1heC11bmNoYW5nZWQtc3RhdHM9QHZhcntufQorIEBvcGluZGV4IC0tbWF4LXVuY2hhbmdlZC1zdGF0cworIFdoZW4gdGFpbGluZyBhIGZpbGUgYnkgbmFtZSwgaWYgdGhlcmUgaGF2ZSBiZWVuIEB2YXJ7bn0gKGRlZmF1bHQKKyBuPUB2YWx1ZXtERUZBVUxUX01BWF9OX1VOQ0hBTkdFRF9TVEFUU19CRVRXRUVOX09QRU5TfSkgY29uc2VjdXRpdmUKK0BAIC0yNjg2LDcgKzI2ODYsNyBAQCBudW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuIHdoZW4gdGFpbCBwcmludHMgdGhlIGxhc3QgcHJlLXJvdGF0aW9uIGxpbmVzCisgYW5kIHdoZW4gaXQgcHJpbnRzIHRoZSBsaW5lcyB0aGF0IGhhdmUgYWNjdW11bGF0ZWQgaW4gdGhlIG5ldyBsb2cgZmlsZS4KKyBUaGlzIG9wdGlvbiBpcyBtZWFuaW5nZnVsIG9ubHkgd2hlbiBmb2xsb3dpbmcgYnkgbmFtZS4KKyAKKy1AaXRlbXggLW4gQHZhcntufQorK0BpdGVtIC1uIEB2YXJ7bn0KKyBAaXRlbXggLS1saW5lcz1AdmFye259CisgQG9waW5kZXggLW4KKyBAb3BpbmRleCAtLWxpbmVzCitAQCAtMjgxNyw3ICsyODE3LDcgQEAgb3B0aW9uLgorIEBvcGluZGV4IC0tbnVtZXJpYy1zdWZmaXhlcworIFVzZSBkaWdpdHMgaW4gc3VmZml4ZXMgcmF0aGVyIHRoYW4gbG93ZXItY2FzZSBsZXR0ZXJzLgorIAorLUBpdGVteCAtLXZlcmJvc2UKKytAaXRlbSAtLXZlcmJvc2UKKyBAb3BpbmRleCAtLXZlcmJvc2UKKyBXcml0ZSBhIGRpYWdub3N0aWMgdG8gc3RhbmRhcmQgZXJyb3IganVzdCBiZWZvcmUgZWFjaCBvdXRwdXQgZmlsZSBpcyBvcGVuZWQuCisgCitAQCAtMzA1NSw3ICszMDU1LDcgQEAgUHJpbnQgb25seSB0aGUgbmV3bGluZSBjb3VudHMuCisgQG9waW5kZXggLS1tYXgtbGluZS1sZW5ndGgKKyBQcmludCBvbmx5IHRoZSBtYXhpbXVtIGxpbmUgbGVuZ3Rocy4KKyAKKy1AaXRlbXggLS1maWxlczAtZnJvbT1AdmFye0ZJTEV9CisrQGl0ZW0gLS1maWxlczAtZnJvbT1AdmFye0ZJTEV9CisgQG9waW5kZXggLS1maWxlczAtZnJvbT1AdmFye0ZJTEV9CisgQGNpbmRleCBpbmNsdWRpbmcgZmlsZXMgZnJvbSBAY29tbWFuZHtkdX0KKyBSYXRoZXIgdGhhbiBwcm9jZXNzaW5nIGZpbGVzIG5hbWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIHByb2Nlc3MgdGhvc2UKK0BAIC0zMjUwLDcgKzMyNTAsNyBAQCBhbiBNRDUgY2hlY2tzdW0gaW5jb25zaXN0ZW50IHdpdGggdGhlIGFzc29jaWF0ZWQgZmlsZSwgb3IgaWYgbm8gdmFsaWQKKyBsaW5lIGlzIGZvdW5kLCBAY29tbWFuZHttZDVzdW19IGV4aXRzIHdpdGggbm9uemVybyBzdGF0dXMuICBPdGhlcndpc2UsCisgaXQgZXhpdHMgc3VjY2Vzc2Z1bGx5LgorIAorLUBpdGVteCAtLXN0YXR1cworK0BpdGVtIC0tc3RhdHVzCisgQG9waW5kZXggLS1zdGF0dXMKKyBAY2luZGV4IHZlcmlmeWluZyBNRDUgY2hlY2tzdW1zCisgVGhpcyBvcHRpb24gaXMgdXNlZnVsIG9ubHkgd2hlbiB2ZXJpZnlpbmcgY2hlY2tzdW1zLgorQEAgLTU4MzcsNyArNTgzNyw3IEBAIGNvbW1hbmQgbGluZSB1bmxlc3MgdGhlIEBvcHRpb257LS1kZXJlZmVyZW5jZS1jb21tYW5kLWxpbmV9IChAb3B0aW9uey1IfSksCisgSWYgYSBjb21tYW5kIGxpbmUgYXJndW1lbnQgc3BlY2lmaWVzIGEgc3ltYm9saWMgbGluaywgc2hvdyBpbmZvcm1hdGlvbgorIGZvciB0aGUgZmlsZSB0aGUgbGluayByZWZlcmVuY2VzIHJhdGhlciB0aGFuIGZvciB0aGUgbGluayBpdHNlbGYuCisgCistQGl0ZW14IC0tZGVyZWZlcmVuY2UtY29tbWFuZC1saW5lLXN5bWxpbmstdG8tZGlyCisrQGl0ZW0gLS1kZXJlZmVyZW5jZS1jb21tYW5kLWxpbmUtc3ltbGluay10by1kaXIKKyBAb3BpbmRleCAtLWRlcmVmZXJlbmNlLWNvbW1hbmQtbGluZS1zeW1saW5rLXRvLWRpcgorIEBjaW5kZXggc3ltYm9saWMgbGlua3MsIGRlcmVmZXJlbmNpbmcKKyBEbyBub3QgZGVyZWZlcmVuY2Ugc3ltYm9saWMgbGlua3MsIHdpdGggb25lIGV4Y2VwdGlvbjoKK0BAIC03MDE1LDE1ICs3MDE1LDE1IEBAIElmIHNwZWNpZmllZCwgdGhlIEB2YXJ7YXR0cmlidXRlX2xpc3R9IG11c3QgYmUgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdAorIG9mIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5nczoKKyAKKyBAdGFibGUgQHNhbXAKKy1AaXRlbXggbW9kZQorK0BpdGVtIG1vZGUKKyBQcmVzZXJ2ZSB0aGUgZmlsZSBtb2RlIGJpdHMgYW5kIGFjY2VzcyBjb250cm9sIGxpc3RzLgorLUBpdGVteCBvd25lcnNoaXAKKytAaXRlbSBvd25lcnNoaXAKKyBQcmVzZXJ2ZSB0aGUgb3duZXIgYW5kIGdyb3VwLiAgT24gbW9zdCBtb2Rlcm4gc3lzdGVtcywKKyBvbmx5IHVzZXJzIHdpdGggYXBwcm9wcmlhdGUgcHJpdmlsZWdlcyBtYXkgY2hhbmdlIHRoZSBvd25lciBvZiBhIGZpbGUsCisgYW5kIG9yZGluYXJ5IHVzZXJzCisgbWF5IHByZXNlcnZlIHRoZSBncm91cCBvd25lcnNoaXAgb2YgYSBmaWxlIG9ubHkgaWYgdGhleSBoYXBwZW4gdG8gYmUKKyBhIG1lbWJlciBvZiB0aGUgZGVzaXJlZCBncm91cC4KKy1AaXRlbXggdGltZXN0YW1wcworK0BpdGVtIHRpbWVzdGFtcHMKKyBQcmVzZXJ2ZSB0aGUgdGltZXMgb2YgbGFzdCBhY2Nlc3MgYW5kIGxhc3QgbW9kaWZpY2F0aW9uLCB3aGVuIHBvc3NpYmxlLgorIEluIGdlbmVyYWwsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwcmVzZXJ2ZSB0aGVzZSBhdHRyaWJ1dGVzCisgd2hlbiB0aGUgYWZmZWN0ZWQgZmlsZSBpcyBhIHN5bWJvbGljIGxpbmsuCitAQCAtNzAzMSwxMiArNzAzMSwxMiBAQCBIb3dldmVyLCBGcmVlQlNEIG5vdyBwcm92aWRlcyB0aGUgQGNvZGV7bHV0aW1lc30gZnVuY3Rpb24sIHdoaWNoIG1ha2VzCisgaXQgcG9zc2liaWxlIGV2ZW4gZm9yIHN5bWJvbGljIGxpbmtzLiAgSG93ZXZlciwgdGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzCisgbm90IHlldCB0YWtlIGFkdmFudGFnZSBvZiB0aGF0LgorIEBjIEZJWE1FOiBvbmNlIHdlIHByb3ZpZGUgbHV0aW1lcyBzdXBwb3J0LCB1cGRhdGUgdGhlIGFib3ZlLgorLUBpdGVteCBsaW5rcworK0BpdGVtIGxpbmtzCisgUHJlc2VydmUgaW4gdGhlIGRlc3RpbmF0aW9uIGZpbGVzCisgYW55IGxpbmtzIGJldHdlZW4gY29ycmVzcG9uZGluZyBzb3VyY2UgZmlsZXMuCisgQGMgR2l2ZSBleGFtcGxlcyBpbGx1c3RyYXRpbmcgaG93IGhhcmQgbGlua3MgYXJlIHByZXNlcnZlZC4KKyBAYyBBbHNvLCBzaG93IGhvdyBzb2Z0IGxpbmtzIG1hcCB0byBoYXJkIGxpbmtzIHdpdGggLUwgYW5kIC1ILgorLUBpdGVteCBhbGwKKytAaXRlbSBhbGwKKyBQcmVzZXJ2ZSBhbGwgZmlsZSBhdHRyaWJ1dGVzLgorIEVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyBhbGwgb2YgdGhlIGFib3ZlLgorIEBlbmQgdGFibGUKK0BAIC03MDQ5LDEyICs3MDQ5LDEyIEBAIG1vZGUgYml0cyBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgZmlsZSwgbWludXMgdGhlIGJpdHMgc2V0IGluIHRoZQorIHVtYXNrIGFuZCBtaW51cyB0aGUgc2V0LXVzZXItSUQgYW5kIHNldC1ncm91cC1JRCBiaXRzLgorIEB4cmVme0ZpbGUgcGVybWlzc2lvbnN9LgorIAorLUBpdGVteCBAd3tAa2Jkey0tbm8tcHJlc2VydmV9PUB2YXJ7YXR0cmlidXRlX2xpc3R9fQorK0BpdGVtIEB3e0BrYmR7LS1uby1wcmVzZXJ2ZX09QHZhcnthdHRyaWJ1dGVfbGlzdH19CisgQGNpbmRleCBmaWxlIGluZm9ybWF0aW9uLCBwcmVzZXJ2aW5nCisgRG8gbm90IHByZXNlcnZlIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlcy4gIFRoZSBAdmFye2F0dHJpYnV0ZV9saXN0fQorIGhhcyB0aGUgc2FtZSBmb3JtIGFzIGZvciBAb3B0aW9uey0tcHJlc2VydmV9LgorIAorLUBpdGVteCAtLXBhcmVudHMKKytAaXRlbSAtLXBhcmVudHMKKyBAb3BpbmRleCAtLXBhcmVudHMKKyBAY2luZGV4IHBhcmVudCBkaXJlY3RvcmllcyBhbmQgQGNvbW1hbmR7Y3B9CisgRm9ybSB0aGUgbmFtZSBvZiBlYWNoIGRlc3RpbmF0aW9uIGZpbGUgYnkgYXBwZW5kaW5nIHRvIHRoZSB0YXJnZXQKK0BAIC03MDcwLDcgKzcwNzAsNyBAQCBjcCAtLXBhcmVudHMgYS9iL2MgZXhpc3RpbmdfZGlyCisgY29waWVzIHRoZSBmaWxlIEBmaWxle2EvYi9jfSB0byBAZmlsZXtleGlzdGluZ19kaXIvYS9iL2N9LCBjcmVhdGluZworIGFueSBtaXNzaW5nIGludGVybWVkaWF0ZSBkaXJlY3Rvcmllcy4KKyAKKy1AaXRlbXggQHd7QGtiZHstLXJlcGx5fT1AdmFye2hvd319CisrQGl0ZW0gQHd7QGtiZHstLXJlcGx5fT1AdmFye2hvd319CisgQG9waW5kZXggLS1yZXBseQorIEBjaW5kZXggaW50ZXJhY3Rpdml0eQorIEBjIEZJWE1FOiByZW1vdmUgaW4gMjAwOAorQEAgLTc3NDIsNyArNzc0Miw3IEBAIFByb21wdCB3aGV0aGVyIHRvIG92ZXJ3cml0ZSBlYWNoIGV4aXN0aW5nIGRlc3RpbmF0aW9uIGZpbGUsIHJlZ2FyZGxlc3MKKyBvZiBpdHMgcGVybWlzc2lvbnMuCisgSWYgdGhlIHJlc3BvbnNlIGlzIG5vdCBhZmZpcm1hdGl2ZSwgdGhlIGZpbGUgaXMgc2tpcHBlZC4KKyAKKy1AaXRlbXggQHd7QGtiZHstLXJlcGx5fT1AdmFye2hvd319CisrQGl0ZW0gQHd7QGtiZHstLXJlcGx5fT1AdmFye2hvd319CisgQG9waW5kZXggLS1yZXBseQorIEBjaW5kZXggaW50ZXJhY3Rpdml0eQorIEBjIEZJWE1FOiByZW1vdmUgaW4gMjAwOAorQEAgLTc4NDcsNyArNzg0Nyw3IEBAIGZpbGVzIGFyZSBuYW1lZCBvciBpZiBhIHJlY3Vyc2l2ZSByZW1vdmFsIGlzIHJlcXVlc3RlZC4gIElnbm9yZSBhbnkKKyBwcmV2aW91cyBAb3B0aW9uey0tZm9yY2V9IChAb3B0aW9uey1mfSkgb3B0aW9uLiAgRXF1aXZhbGVudCB0bworIEBvcHRpb257LS1pbnRlcmFjdGl2ZT1vbmNlfS4KKyAKKy1AaXRlbXggLS1pbnRlcmFjdGl2ZSBbPUB2YXJ7d2hlbn1dCisrQGl0ZW0gLS1pbnRlcmFjdGl2ZSBbPUB2YXJ7d2hlbn1dCisgQG9waW5kZXggLS1pbnRlcmFjdGl2ZQorIFNwZWNpZnkgd2hlbiB0byBpc3N1ZSBhbiBpbnRlcmFjdGl2ZSBwcm9tcHQuICBAdmFye3doZW59IG1heSBiZQorIG9taXR0ZWQsIG9yIG9uZSBvZjoKK0BAIC03ODY2LDcgKzc4NjYsNyBAQCByZW1vdmFsIGlzIHJlcXVlc3RlZC4gIEVxdWl2YWxlbnQgdG8gQG9wdGlvbnstSX0uCisgU3BlY2lmeWluZyBAb3B0aW9uey0taW50ZXJhY3RpdmV9IGFuZCBubyBAdmFye3doZW59IGlzIGVxdWl2YWxlbnQgdG8KKyBAb3B0aW9uey0taW50ZXJhY3RpdmU9YWx3YXlzfS4KKyAKKy1AaXRlbXggLS1vbmUtZmlsZS1zeXN0ZW0KKytAaXRlbSAtLW9uZS1maWxlLXN5c3RlbQorIEBvcGluZGV4IC0tb25lLWZpbGUtc3lzdGVtCisgQGNpbmRleCBvbmUgZmlsZSBzeXN0ZW0sIHJlc3RyaWN0aW5nIEBjb21tYW5ke3JtfSB0bworIFdoZW4gcmVtb3ZpbmcgYSBoaWVyYXJjaHkgcmVjdXJzaXZlbHksIHNraXAgYW55IGRpcmVjdG9yeSB0aGF0IGlzIG9uIGEKK0BAIC03ODg0LDcgKzc4ODQsNyBAQCB3YXJuIGFib3V0IGFuZCBza2lwIGRpcmVjdG9yaWVzIG9uIG90aGVyIGZpbGUgc3lzdGVtcy4KKyBPZiBjb3Vyc2UsIHRoaXMgd2lsbCBub3Qgc2F2ZSB5b3VyIEBmaWxley9ob21lfSBpZiBpdCBhbmQgeW91cgorIGNocm9vdCBoYXBwZW4gdG8gYmUgb24gdGhlIHNhbWUgZmlsZSBzeXN0ZW0uCisgCistQGl0ZW14IC0tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGRpc2FsbG93IHJlY3Vyc2l2ZSBkZXN0cnVjdGlvbgorIEZhaWwgdXBvbiBhbnkgYXR0ZW1wdCB0byByZW1vdmUgdGhlIHJvb3QgZGlyZWN0b3J5LCBAZmlsZXsvfSwKK0BAIC03ODkyLDcgKzc4OTIsNyBAQCB3aGVuIHVzZWQgd2l0aCB0aGUgQG9wdGlvbnstLXJlY3Vyc2l2ZX0gb3B0aW9uLgorIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuCisgQHhyZWZ7VHJlYXRpbmcgLyBzcGVjaWFsbHl9LgorIAorLUBpdGVteCAtLW5vLXByZXNlcnZlLXJvb3QKKytAaXRlbSAtLW5vLXByZXNlcnZlLXJvb3QKKyBAb3BpbmRleCAtLW5vLXByZXNlcnZlLXJvb3QKKyBAY2luZGV4IHJvb3QgZGlyZWN0b3J5LCBhbGxvdyByZWN1cnNpdmUgZGVzdHJ1Y3Rpb24KKyBEbyBub3QgdHJlYXQgQGZpbGV7L30gc3BlY2lhbGx5IHdoZW4gcmVtb3ZpbmcgcmVjdXJzaXZlbHkuCitAQCAtODg3NCw3ICs4ODc0LDcgQEAgYWN0dWFsbHkgY2hhbmdlcy4KKyBEbyBub3QgcHJpbnQgZXJyb3IgbWVzc2FnZXMgYWJvdXQgZmlsZXMgd2hvc2Ugb3duZXJzaGlwIGNhbm5vdCBiZQorIGNoYW5nZWQuCisgCistQGl0ZW14IEB3e0BrYmR7LS1mcm9tfT1AdmFye29sZC1vd25lcn19CisrQGl0ZW0gQHd7QGtiZHstLWZyb219PUB2YXJ7b2xkLW93bmVyfX0KKyBAb3BpbmRleCAtLWZyb20KKyBAY2luZGV4IHN5bWJvbGljIGxpbmtzLCBjaGFuZ2luZyBvd25lcgorIENoYW5nZSBhIEB2YXJ7ZmlsZX0ncyBvd25lcnNoaXAgb25seSBpZiBpdCBoYXMgY3VycmVudCBhdHRyaWJ1dGVzIHNwZWNpZmllZAorQEAgLTg5MjgsMTQgKzg5MjgsMTQgQEAgaXMgYSBzeW1ib2xpYyBsaW5rLgorIEJ5IGRlZmF1bHQsIG5vIGRpYWdub3N0aWMgaXMgaXNzdWVkIGZvciBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZAorIGR1cmluZyBhIHJlY3Vyc2l2ZSB0cmF2ZXJzYWwsIGJ1dCBzZWUgQG9wdGlvbnstLXZlcmJvc2V9LgorIAorLUBpdGVteCAtLXByZXNlcnZlLXJvb3QKKytAaXRlbSAtLXByZXNlcnZlLXJvb3QKKyBAb3BpbmRleCAtLXByZXNlcnZlLXJvb3QKKyBAY2luZGV4IHJvb3QgZGlyZWN0b3J5LCBkaXNhbGxvdyByZWN1cnNpdmUgbW9kaWZpY2F0aW9uCisgRmFpbCB1cG9uIGFueSBhdHRlbXB0IHRvIHJlY3Vyc2l2ZWx5IGNoYW5nZSB0aGUgcm9vdCBkaXJlY3RvcnksIEBmaWxley99LgorIFdpdGhvdXQgQG9wdGlvbnstLXJlY3Vyc2l2ZX0sIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QuCisgQHhyZWZ7VHJlYXRpbmcgLyBzcGVjaWFsbHl9LgorIAorLUBpdGVteCAtLW5vLXByZXNlcnZlLXJvb3QKKytAaXRlbSAtLW5vLXByZXNlcnZlLXJvb3QKKyBAb3BpbmRleCAtLW5vLXByZXNlcnZlLXJvb3QKKyBAY2luZGV4IHJvb3QgZGlyZWN0b3J5LCBhbGxvdyByZWN1cnNpdmUgbW9kaWZpY2F0aW9uCisgQ2FuY2VsIHRoZSBlZmZlY3Qgb2YgYW55IHByZWNlZGluZyBAb3B0aW9uey0tcHJlc2VydmUtcm9vdH0gb3B0aW9uLgorQEAgLTkwNTQsMTQgKzkwNTQsMTQgQEAgaXMgYSBzeW1ib2xpYyBsaW5rLgorIEJ5IGRlZmF1bHQsIG5vIGRpYWdub3N0aWMgaXMgaXNzdWVkIGZvciBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZAorIGR1cmluZyBhIHJlY3Vyc2l2ZSB0cmF2ZXJzYWwsIGJ1dCBzZWUgQG9wdGlvbnstLXZlcmJvc2V9LgorIAorLUBpdGVteCAtLXByZXNlcnZlLXJvb3QKKytAaXRlbSAtLXByZXNlcnZlLXJvb3QKKyBAb3BpbmRleCAtLXByZXNlcnZlLXJvb3QKKyBAY2luZGV4IHJvb3QgZGlyZWN0b3J5LCBkaXNhbGxvdyByZWN1cnNpdmUgbW9kaWZpY2F0aW9uCisgRmFpbCB1cG9uIGFueSBhdHRlbXB0IHRvIHJlY3Vyc2l2ZWx5IGNoYW5nZSB0aGUgcm9vdCBkaXJlY3RvcnksIEBmaWxley99LgorIFdpdGhvdXQgQG9wdGlvbnstLXJlY3Vyc2l2ZX0sIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QuCisgQHhyZWZ7VHJlYXRpbmcgLyBzcGVjaWFsbHl9LgorIAorLUBpdGVteCAtLW5vLXByZXNlcnZlLXJvb3QKKytAaXRlbSAtLW5vLXByZXNlcnZlLXJvb3QKKyBAb3BpbmRleCAtLW5vLXByZXNlcnZlLXJvb3QKKyBAY2luZGV4IHJvb3QgZGlyZWN0b3J5LCBhbGxvdyByZWN1cnNpdmUgbW9kaWZpY2F0aW9uCisgQ2FuY2VsIHRoZSBlZmZlY3Qgb2YgYW55IHByZWNlZGluZyBAb3B0aW9uey0tcHJlc2VydmUtcm9vdH0gb3B0aW9uLgorQEAgLTkxNzUsMTQgKzkxNzUsMTQgQEAgYWN0dWFsbHkgY2hhbmdlcy4KKyBEbyBub3QgcHJpbnQgZXJyb3IgbWVzc2FnZXMgYWJvdXQgZmlsZXMgd2hvc2UgcGVybWlzc2lvbnMgY2Fubm90IGJlCisgY2hhbmdlZC4KKyAKKy1AaXRlbXggLS1wcmVzZXJ2ZS1yb290CisrQGl0ZW0gLS1wcmVzZXJ2ZS1yb290CisgQG9waW5kZXggLS1wcmVzZXJ2ZS1yb290CisgQGNpbmRleCByb290IGRpcmVjdG9yeSwgZGlzYWxsb3cgcmVjdXJzaXZlIG1vZGlmaWNhdGlvbgorIEZhaWwgdXBvbiBhbnkgYXR0ZW1wdCB0byByZWN1cnNpdmVseSBjaGFuZ2UgdGhlIHJvb3QgZGlyZWN0b3J5LCBAZmlsZXsvfS4KKyBXaXRob3V0IEBvcHRpb257LS1yZWN1cnNpdmV9LCB0aGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0LgorIEB4cmVme1RyZWF0aW5nIC8gc3BlY2lhbGx5fS4KKyAKKy1AaXRlbXggLS1uby1wcmVzZXJ2ZS1yb290CisrQGl0ZW0gLS1uby1wcmVzZXJ2ZS1yb290CisgQG9waW5kZXggLS1uby1wcmVzZXJ2ZS1yb290CisgQGNpbmRleCByb290IGRpcmVjdG9yeSwgYWxsb3cgcmVjdXJzaXZlIG1vZGlmaWNhdGlvbgorIENhbmNlbCB0aGUgZWZmZWN0IG9mIGFueSBwcmVjZWRpbmcgQG9wdGlvbnstLXByZXNlcnZlLXJvb3R9IG9wdGlvbi4KK0BAIC05NjAzLDcgKzk2MDMsNyBAQCBUaGUgcHJvZ3JhbSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9ucy4gIEFsc28gc2VlIEByZWZ7Q29tbW9uIG9wdGlvbnN9LgorIEBvcGluZGV4IC0tYWxsCisgU2hvdyBjb3VudHMgZm9yIGFsbCBmaWxlcywgbm90IGp1c3QgZGlyZWN0b3JpZXMuCisgCistQGl0ZW14IC0tYXBwYXJlbnQtc2l6ZQorK0BpdGVtIC0tYXBwYXJlbnQtc2l6ZQorIEBvcGluZGV4IC0tYXBwYXJlbnQtc2l6ZQorIFByaW50IGFwcGFyZW50IHNpemVzLCByYXRoZXIgdGhhbiBkaXNrIHVzYWdlLiAgVGhlIGFwcGFyZW50IHNpemUgb2YgYQorIGZpbGUgaXMgdGhlIG51bWJlciBvZiBieXRlcyByZXBvcnRlZCBieSBAY29kZXt3YyAtY30gb24gcmVndWxhciBmaWxlcywKK0BAIC05NjU0LDcgKzk2NTQsNyBAQCBEb2VzIG5vdCBhZmZlY3Qgb3RoZXIgc3ltYm9saWMgbGlua3MuICBUaGlzIGlzIGhlbHBmdWwgZm9yIGZpbmRpbmcKKyBvdXQgdGhlIGRpc2sgdXNhZ2Ugb2YgZGlyZWN0b3JpZXMsIHN1Y2ggYXMgQGZpbGV7L3Vzci90bXB9LCB3aGljaAorIGFyZSBvZnRlbiBzeW1ib2xpYyBsaW5rcy4KKyAKKy1AaXRlbXggLS1maWxlczAtZnJvbT1AdmFye0ZJTEV9CisrQGl0ZW0gLS1maWxlczAtZnJvbT1AdmFye0ZJTEV9CisgQG9waW5kZXggLS1maWxlczAtZnJvbT1AdmFye0ZJTEV9CisgQGNpbmRleCBpbmNsdWRpbmcgZmlsZXMgZnJvbSBAY29tbWFuZHtkdX0KKyBSYXRoZXIgdGhhbiBwcm9jZXNzaW5nIGZpbGVzIG5hbWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIHByb2Nlc3MgdGhvc2UKK0BAIC05NzMzLDcgKzk3MzMsNyBAQCBPdXRwdXQgYSBudWxsIGJ5dGUgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUsIHJhdGhlciB0aGFuIGEgbmV3bGluZS4KKyBUaGlzIG9wdGlvbiBlbmFibGVzIG90aGVyIHByb2dyYW1zIHRvIHBhcnNlIHRoZSBvdXRwdXQgb2YgQGNvbW1hbmR7ZHV9CisgZXZlbiB3aGVuIHRoYXQgb3V0cHV0IHdvdWxkIGNvbnRhaW4gZmlsZSBuYW1lcyB3aXRoIGVtYmVkZGVkIG5ld2xpbmVzLgorIAorLUBpdGVteCAtLXNpCisrQGl0ZW0gLS1zaQorIEBvcGluZGV4IC0tc2kKKyBAY2luZGV4IFNJIG91dHB1dAorIEFwcGVuZCBhbiBTSS1zdHlsZSBhYmJyZXZpYXRpb24gdG8gZWFjaCBzaXplLCBzdWNoIGFzIEBzYW1we01CfSBmb3IKK0BAIC05NzU0LDEzICs5NzU0LDEzIEBAIERpc3BsYXkgb25seSBhIHRvdGFsIGZvciBlYWNoIGFyZ3VtZW50LgorIFJlcG9ydCB0aGUgc2l6ZSBvZiBlYWNoIGRpcmVjdG9yeSBzZXBhcmF0ZWx5LCBub3QgaW5jbHVkaW5nIHRoZSBzaXplcworIG9mIHN1YmRpcmVjdG9yaWVzLgorIAorLUBpdGVteCAtLXRpbWUKKytAaXRlbSAtLXRpbWUKKyBAb3BpbmRleCAtLXRpbWUKKyBAY2luZGV4IGxhc3QgbW9kaWZpZWQgZGF0ZXMsIGRpc3BsYXlpbmcgaW4gQGNvbW1hbmR7ZHV9CisgU2hvdyB0aW1lIG9mIHRoZSBtb3N0IHJlY2VudCBtb2RpZmljYXRpb24gb2YgYW55IGZpbGUgaW4gdGhlIGRpcmVjdG9yeSwKKyBvciBhbnkgb2YgaXRzIHN1YmRpcmVjdG9yaWVzLgorIAorLUBpdGVteCAtLXRpbWU9Y3RpbWUKKytAaXRlbSAtLXRpbWU9Y3RpbWUKKyBAaXRlbXggLS10aW1lPXN0YXR1cworIEBpdGVteCAtLXRpbWU9dXNlCisgQG9waW5kZXggLS10aW1lCitAQCAtOTc3MCw3ICs5NzcwLDcgQEAgb3IgYW55IG9mIGl0cyBzdWJkaXJlY3Rvcmllcy4KKyBTaG93IHRoZSBtb3N0IHJlY2VudCBzdGF0dXMgY2hhbmdlIHRpbWUgKHRoZSBAc2FtcHtjdGltZX0gaW4gdGhlIGlub2RlKSBvZgorIGFueSBmaWxlIGluIHRoZSBkaXJlY3RvcnksIGluc3RlYWQgb2YgdGhlIG1vZGlmaWNhdGlvbiB0aW1lLgorIAorLUBpdGVteCAtLXRpbWU9YXRpbWUKKytAaXRlbSAtLXRpbWU9YXRpbWUKKyBAaXRlbXggLS10aW1lPWFjY2VzcworIEBvcGluZGV4IC0tdGltZQorIEBvcGluZGV4IGF0aW1lQHJ7LCBzaG93IHRoZSBtb3N0IHJlY2VudH0KK0BAIC05OTExLDcgKzk5MTEsNyBAQCAkIHN0YXQgLS1mb3JtYXQ9JWQ6JWkgLyAvdXNyCisgMjA1NzoyCisgQGVuZCBleGFtcGxlCisgCistQGl0ZW14IC0tcHJpbnRmPUB2YXJ7Zm9ybWF0fQorK0BpdGVtIC0tcHJpbnRmPUB2YXJ7Zm9ybWF0fQorIEBvcGluZGV4IC0tcHJpbnRmPUB2YXJ7Zm9ybWF0fQorIEBjaW5kZXggb3V0cHV0IGZvcm1hdAorIFVzZSBAdmFye2Zvcm1hdH0gcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgZm9ybWF0LgorQEAgLTEyMjQwLDcgKzEyMjQwLDcgQEAgT3ZlcnJpZGVzIGFsbCBvdGhlciBvcHRpb25zLgorIEBvcGluZGV4IC1zCisgSWdub3JlZDsgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciB2ZXJzaW9ucyBvZiBAY29tbWFuZHt3aG99LgorIAorLUBpdGVteCAtdQorK0BpdGVtIC11CisgQG9waW5kZXggLXUKKyBAY2luZGV4IGlkbGUgdGltZQorIEFmdGVyIHRoZSBsb2dpbiB0aW1lLCBwcmludCB0aGUgbnVtYmVyIG9mIGhvdXJzIGFuZCBtaW51dGVzIHRoYXQgdGhlCitAQCAtMTIyNTQsNyArMTIyNTQsNyBAQCB1c2VyIGhhcyBiZWVuIGlkbGUuICBAc2FtcHsufSBtZWFucyB0aGUgdXNlciB3YXMgYWN0aXZlIGluIHRoZSBsYXN0IG1pbnV0ZS4KKyBMaXN0IG9ubHkgdGhlIGVudHJpZXMgdGhhdCBjb3JyZXNwb25kIHRvIHByb2Nlc3NlcyB2aWEgd2hpY2ggdGhlCisgc3lzdGVtIGlzIHdhaXRpbmcgZm9yIGEgdXNlciB0byBsb2dpbi4gIFRoZSB1c2VyIG5hbWUgaXMgYWx3YXlzIEBzYW1we0xPR0lOfS4KKyAKKy1AaXRlbXggLS1sb29rdXAKKytAaXRlbSAtLWxvb2t1cAorIEBvcGluZGV4IC0tbG9va3VwCisgQXR0ZW1wdCB0byBjYW5vbmljYWxpemUgaG9zdG5hbWVzIGZvdW5kIGluIHV0bXAgdGhyb3VnaCBhIEROUyBsb29rdXAuICBUaGlzCisgaXMgbm90IHRoZSBkZWZhdWx0IGJlY2F1c2UgaXQgY2FuIGNhdXNlIHNpZ25pZmljYW50IGRlbGF5cyBvbiBzeXN0ZW1zIHdpdGgKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1pMThuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtaTE4bi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTM3MjIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtaTE4bi5wYXRjaApAQCAtMCwwICsxLDQwNTEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKK1RoaXMgcGF0Y2ggd2FzIGltcG9ydGVkIGZyb20gdGhlIEZlZG9yYSBDb3JlIDggY29yZXV0aWxzLTYuOS05IHBhY2thZ2UuCisKK1RoZSBwYWNrYWdlIGlzIHN0YXRlZCBhcyBiZWluZyBMaWNlbnNlZCBhcyBHUEx2MisuCisKK1RoZSBjb21tZW50IGluZGljYXRlcyB0aGF0IHRoZSBwdXJwb3NlIGlzIGxpbjE4bnV4L2xzYiBjb21wbGlhbmNlLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKKy0tLSAvZGV2L251bGwJMjAwNy0wMy0wMSAwOToxNjozOS4yMTk0MDk5MDkgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L3NvcnQtbWItdGVzdHMJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNTggQEAKKysjISAvYmluL3NoCisrY2FzZSAkIyBpbgorKyAgMCkgeHg9Jy4uLy4uL3NyYy9zb3J0Jzs7CisrICAqKSB4eD0iJDEiOzsKKytlc2FjCisrdGVzdCAiJFZFUkJPU0UiICYmIGVjaG89ZWNobyB8fCBlY2hvPToKKyskZWNobyB0ZXN0aW5nIHByb2dyYW06ICR4eAorK2Vycm9ycz0wCisrdGVzdCAiJHNyY2RpciIgfHwgc3JjZGlyPS4KKyt0ZXN0ICIkVkVSQk9TRSIgJiYgJHh4IC0tdmVyc2lvbiAyPiAvZGV2L251bGwKKysKKytleHBvcnQgTENfQUxMPWVuX1VTLlVURi04CisrbG9jYWxlIC1rIExDX0NUWVBFIDI+JjEgfCBncmVwIC1xIGNoYXJtYXAuKlVURi04IHx8IGV4aXQgNzcKKytlcnJvcnM9MAorKworKyR4eCAtdCDvvKAgLWsyIC1uIG1iMS5JID4gbWIxLk8KKytjb2RlPSQ/CisraWYgdGVzdCAkY29kZSAhPSAwOyB0aGVuCisrICAkZWNobyAiVGVzdCBtYjEgZmFpbGVkOiAkeHggcmV0dXJuIGNvZGUgJGNvZGUgZGlmZmVycyBmcm9tIGV4cGVjdGVkIHZhbHVlIDAiIDE+JjIKKysgIGVycm9ycz1gZXhwciAkZXJyb3JzICsgMWAKKytlbHNlCisrICBjbXAgbWIxLk8gJHNyY2Rpci9tYjEuWCA+IC9kZXYvbnVsbCAyPiYxCisrICBjYXNlICQ/IGluCisrICAgIDApIGlmIHRlc3QgIiRWRVJCT1NFIjsgdGhlbiAkZWNobyAicGFzc2VkIG1iMSI7IGZpOzsKKysgICAgMSkgJGVjaG8gIlRlc3QgbWIxIGZhaWxlZDogZmlsZXMgbWIxLk8gYW5kICRzcmNkaXIvbWIxLlggZGlmZmVyIiAxPiYyCisrICAgICAgIChkaWZmIC1jIG1iMS5PICRzcmNkaXIvbWIxLlgpIDI+IC9kZXYvbnVsbAorKyAgICAgICBlcnJvcnM9YGV4cHIgJGVycm9ycyArIDFgOzsKKysgICAgMikgJGVjaG8gIlRlc3QgbWIxIG1heSBoYXZlIGZhaWxlZC4iIDE+JjIKKysgICAgICAgJGVjaG8gVGhlIGNvbW1hbmQgImNtcCBtYjEuTyAkc3JjZGlyL21iMS5YIiBmYWlsZWQuIDE+JjIKKysgICAgICAgZXJyb3JzPWBleHByICRlcnJvcnMgKyAxYDs7CisrICBlc2FjCisrZmkKKysKKyskeHggLXQg77ygIC1rNCAtbiBtYjIuSSA+IG1iMi5PCisrY29kZT0kPworK2lmIHRlc3QgJGNvZGUgIT0gMDsgdGhlbgorKyAgJGVjaG8gIlRlc3QgbWIyIGZhaWxlZDogJHh4IHJldHVybiBjb2RlICRjb2RlIGRpZmZlcnMgZnJvbSBleHBlY3RlZCB2YWx1ZSAwIiAxPiYyCisrICBlcnJvcnM9YGV4cHIgJGVycm9ycyArIDFgCisrZWxzZQorKyAgY21wIG1iMi5PICRzcmNkaXIvbWIyLlggPiAvZGV2L251bGwgMj4mMQorKyAgY2FzZSAkPyBpbgorKyAgICAwKSBpZiB0ZXN0ICIkVkVSQk9TRSI7IHRoZW4gJGVjaG8gInBhc3NlZCBtYjIiOyBmaTs7CisrICAgIDEpICRlY2hvICJUZXN0IG1iMiBmYWlsZWQ6IGZpbGVzIG1iMi5PIGFuZCAkc3JjZGlyL21iMi5YIGRpZmZlciIgMT4mMgorKyAgICAgICAoZGlmZiAtYyBtYjIuTyAkc3JjZGlyL21iMi5YKSAyPiAvZGV2L251bGwKKysgICAgICAgZXJyb3JzPWBleHByICRlcnJvcnMgKyAxYDs7CisrICAgIDIpICRlY2hvICJUZXN0IG1iMiBtYXkgaGF2ZSBmYWlsZWQuIiAxPiYyCisrICAgICAgICRlY2hvIFRoZSBjb21tYW5kICJjbXAgbWIyLk8gJHNyY2Rpci9tYjIuWCIgZmFpbGVkLiAxPiYyCisrICAgICAgIGVycm9ycz1gZXhwciAkZXJyb3JzICsgMWA7OworKyAgZXNhYworK2ZpCisrCisraWYgdGVzdCAkZXJyb3JzID0gMDsgdGhlbgorKyAgJGVjaG8gUGFzc2VkIGFsbCAxMTMgdGVzdHMuIDE+JjIKKytlbHNlCisrICAkZWNobyBGYWlsZWQgJGVycm9ycyB0ZXN0cy4gMT4mMgorK2ZpCisrdGVzdCAkZXJyb3JzID0gMCB8fCBlcnJvcnM9MQorK2V4aXQgJGVycm9ycworLS0tIC9kZXYvbnVsbAkyMDA3LTAzLTAxIDA5OjE2OjM5LjIxOTQwOTkwOSArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3Rlc3RzL3NvcnQvbWIyLkkJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNCBAQAorK0FwcGxl77yg77yh77yhMTDvvKDvvKAyMAorK0JhbmFuYe+8oO+8oe+8oTXvvKDvvKAzMAorK0NpdHJ1c++8oO+8oe+8oTIw77yg77ygNQorK0NoZXJyee+8oO+8oe+8oTMw77yg77ygMTAKKy0tLSAvZGV2L251bGwJMjAwNy0wMy0wMSAwOToxNjozOS4yMTk0MDk5MDkgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L21iMi5YCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDQgQEAKKytDaXRydXPvvKDvvKHvvKEyMO+8oO+8oDUKKytDaGVycnnvvKDvvKHvvKEzMO+8oO+8oDEwCisrQXBwbGXvvKDvvKHvvKExMO+8oO+8oDIwCisrQmFuYW5h77yg77yh77yhNe+8oO+8oDMwCistLS0gL2Rldi9udWxsCTIwMDctMDMtMDEgMDk6MTY6MzkuMjE5NDA5OTA5ICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvdGVzdHMvc29ydC9tYjEuSQkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw0IEBACisrQXBwbGXvvKAxMAorK0JhbmFuYe+8oDUKKytDaXRydXPvvKAyMAorK0NoZXJyee+8oDMwCistLS0gL2Rldi9udWxsCTIwMDctMDMtMDEgMDk6MTY6MzkuMjE5NDA5OTA5ICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvdGVzdHMvc29ydC9tYjEuWAkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw0IEBACisrQmFuYW5h77ygNQorK0FwcGxl77ygMTAKKytDaXRydXPvvKAyMAorK0NoZXJyee+8oDMwCistLS0gY29yZXV0aWxzLTYuOCsvdGVzdHMvc29ydC9NYWtlZmlsZS5hbS5pMThuCTIwMDctMDEtMjQgMDc6NDc6MzcuMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvdGVzdHMvc29ydC9NYWtlZmlsZS5hbQkyMDA3LTAzLTAxIDE1OjA5OjU5LjAwMDAwMDAwMCArMDAwMAorQEAgLTY2LDE1ICs2NiwxNyBAQAorIGJpZ2ZpZWxkLk8gYmlnZmllbGQuRQorICMjdGVzdC1maWxlcy1lbmQKKyAKKy1FWFRSQV9ESVNUID0gVGVzdC5wbSAkeC10ZXN0cyAkKGV4cGxpY2l0KSAkKG1haW50X2dlbikKKy1ub2luc3RfU0NSSVBUUyA9ICR4LXRlc3RzCisrcnVuX2dlbiArPSBtYjEuMCBtYjIuMAorKworK0VYVFJBX0RJU1QgPSBUZXN0LnBtICR4LXRlc3RzICQoZXhwbGljaXQpICQobWFpbnRfZ2VuKSBtYjEuSSBtYjEuWCBtYjIuSSBtYjIuWAorK25vaW5zdF9TQ1JJUFRTID0gJHgtdGVzdHMgIyAkeC1tYi10ZXN0cworIFRFU1RTX0VOVklST05NRU5UID0gXAorICAgQ1VfVEVTVF9OQU1FPWBiYXNlbmFtZSAkKGFic19zcmNkaXIpYCwkJHRzdCBcCisgICBQQVRIPSIkKFZHX1BBVEhfUFJFRklYKWBwd2RgLy4uLy4uL3NyYyQoUEFUSF9TRVBBUkFUT1IpJCRQQVRIIgorIAorIGVkaXRwbCA9IHNlZCAtZSAncyxAJydQRVJMJydALCQoUEVSTCksZycgLWUgJ3MsQCcnc3JjZGlyJydALCQoc3JjZGlyKSxnJworIAorLVRFU1RTID0gJHgtdGVzdHMKKytURVNUUyA9ICR4LXRlc3RzICR4LW1iLXRlc3RzCisgCisgbWtfc2NyaXB0ID0gJChzcmNkaXIpLy4uL21rLXNjcmlwdAorICQoc3JjZGlyKS8keC10ZXN0czogJChta19zY3JpcHQpIFRlc3QucG0gTWFrZWZpbGUuYW0KKy0tLSBjb3JldXRpbHMtNi44Ky9saWIvbGluZWJ1ZmZlci5oLmkxOG4JMjAwNS0wNS0xNCAwNzo0NDoyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBjb3JldXRpbHMtNi44Ky9saWIvbGluZWJ1ZmZlci5oCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMjIsNiArMjIsMTEgQEAKKyAKKyAjIGluY2x1ZGUgPHN0ZGlvLmg+CisgCisrLyogR2V0IG1ic3RhdGVfdC4gICovCisrIyBpZiBIQVZFX1dDSEFSX0gKKysjICBpbmNsdWRlIDx3Y2hhci5oPgorKyMgZW5kaWYKKysKKyAvKiBBIGBzdHJ1Y3QgbGluZWJ1ZmZlcicgaG9sZHMgYSBsaW5lIG9mIHRleHQuICovCisgCisgc3RydWN0IGxpbmVidWZmZXIKK0BAIC0yOSw2ICszNCw5IEBACisgICBzaXplX3Qgc2l6ZTsJCQkvKiBBbGxvY2F0ZWQuICovCisgICBzaXplX3QgbGVuZ3RoOwkJLyogVXNlZC4gKi8KKyAgIGNoYXIgKmJ1ZmZlcjsKKysjIGlmIEhBVkVfV0NIQVJfSAorKyAgbWJzdGF0ZV90IHN0YXRlOworKyMgZW5kaWYKKyB9OworIAorIC8qIEluaXRpYWxpemUgbGluZWJ1ZmZlciBMSU5FQlVGRkVSIGZvciB1c2UuICovCistLS0gY29yZXV0aWxzLTYuOCsvc3JjL2V4cGFuZC5jLmkxOG4JMjAwNy0wMS0xNCAxNTo0MToyOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky9zcmMvZXhwYW5kLmMJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zOCwxMSArMzgsMjggQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworKy8qIEdldCBtYnN0YXRlX3QsIG1icnRvd2MoKSwgd2N3aWR0aCgpLiAqLworKyNpZiBIQVZFX1dDSEFSX0gKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlICJlcnJvci5oIgorICNpbmNsdWRlICJxdW90ZS5oIgorICNpbmNsdWRlICJ4c3RybmR1cC5oIgorIAorKy8qIE1CX0xFTl9NQVggaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCB0byBiZSAxIGluIGF0IGxlYXN0IG9uZSBHQ0MKKysgICBpbnN0YWxsYXRpb247IHdvcmsgYXJvdW5kIHRoaXMgY29uZmlndXJhdGlvbiBlcnJvci4gICovCisrI2lmICFkZWZpbmVkIE1CX0xFTl9NQVggfHwgTUJfTEVOX01BWCA8IDIKKysjIGRlZmluZSBNQl9MRU5fTUFYIDE2CisrI2VuZGlmCisrCisrLyogU29tZSBzeXN0ZW1zLCBsaWtlIEJlT1MsIGhhdmUgbXVsdGlieXRlIGVuY29kaW5ncyBidXQgbGFjayBtYnN0YXRlX3QuICAqLworKyNpZiBIQVZFX01CUlRPV0MgJiYgZGVmaW5lZCBtYnN0YXRlX3QKKysjIGRlZmluZSBtYnJ0b3djKHB3YywgcywgbiwgcHMpIChtYnJ0b3djKSAocHdjLCBzLCBuLCAwKQorKyNlbmRpZgorKworIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworICNkZWZpbmUgUFJPR1JBTV9OQU1FICJleHBhbmQiCisgCitAQCAtMTgzLDYgKzIwMCw3IEBACisgCSAgICAgIHN0b3BzID0gbnVtX3N0YXJ0ICsgbGVuIC0gMTsKKyAJICAgIH0KKyAJfQorKworICAgICAgIGVsc2UKKyAJeworIAkgIGVycm9yICgwLCAwLCBfKCJ0YWIgc2l6ZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcihzKTogJXMiKSwKK0BAIC0zNjUsNiArMzgzLDE0MiBAQAorICAgICB9CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgdm9pZAorK2V4cGFuZF9tdWx0aWJ5dGUgKHZvaWQpCisreworKyAgRklMRSAqZnA7CQkJLyogSW5wdXQgc3RyZW0uICovCisrICBtYnN0YXRlX3QgaV9zdGF0ZTsJCS8qIEN1cnJlbnQgc2hpZnQgc3RhdGUgb2YgdGhlIGlucHV0IHN0cmVhbS4gKi8KKysgIG1ic3RhdGVfdCBpX3N0YXRlX2JhazsJLyogQmFjayB1cCB0aGUgSV9TVEFURS4gKi8KKysgIG1ic3RhdGVfdCBvX3N0YXRlOwkJLyogQ3VycmVudCBzaGlmdCBzdGF0ZSBvZiB0aGUgb3V0cHV0IHN0cmVhbS4gKi8KKysgIGNoYXIgYnVmW01CX0xFTl9NQVggKyBCVUZTSVpdOyAgLyogRm9yIHNwb29saW5nIGEgcmVhZCBieXRlIHNlcXVlbmNlLiAqLworKyAgY2hhciAqYnVmcG9zOwkJCS8qIE5leHQgcmVhZCBwb3NpdGlvbiBvZiBCVUYuICovCisrICBzaXplX3QgYnVmbGVuID0gMDsJCS8qIFRoZSBsZW5ndGggb2YgdGhlIGJ5dGUgc2VxdWVuY2UgaW4gYnVmLiAqLworKyAgd2NoYXJfdCB3YzsJCQkvKiBBIGdvdHRlbiB3aWRlIGNoYXJhY3Rlci4gKi8KKysgIHNpemVfdCBtYmxlbmd0aDsJCS8qIFRoZSBieXRlIHNpemUgb2YgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyCisrCQkJCSAgIHdoaWNoIHNob3dzIGFzIHNhbWUgY2hhcmFjdGVyIGFzIFdDLiAqLworKyAgaW50IHRhYl9pbmRleCA9IDA7CQkvKiBJbmRleCBpbiBgdGFiX2xpc3QnIG9mIG5leHQgdGFic3RvcC4gKi8KKysgIGludCBjb2x1bW4gPSAwOwkJLyogQ29sdW1uIG9uIHNjcmVlbiBvZiB0aGUgbmV4dCBjaGFyLiAqLworKyAgaW50IG5leHRfdGFiX2NvbHVtbjsJCS8qIENvbHVtbiB0aGUgbmV4dCB0YWIgc3RvcCBpcyBvbi4gKi8KKysgIGludCBjb252ZXJ0ID0gMTsJCS8qIElmIG5vbnplcm8sIHBlcmZvcm0gdHJhbnNsYXRpb25zLiAqLworKworKyAgZnAgPSBuZXh0X2ZpbGUgKChGSUxFICopIE5VTEwpOworKyAgaWYgKGZwID09IE5VTEwpCisrICAgIHJldHVybjsKKysKKysgIG1lbXNldCAoJm9fc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysgIG1lbXNldCAoJmlfc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysKKysgIGZvciAoOzspCisrICAgIHsKKysgICAgICAvKiBSZWZpbGwgdGhlIGJ1ZmZlciBCVUYuICovCisrICAgICAgaWYgKGJ1ZmxlbiA8IE1CX0xFTl9NQVggJiYgIWZlb2YoZnApICYmICFmZXJyb3IoZnApKQorKwl7CisrCSAgbWVtbW92ZSAoYnVmLCBidWZwb3MsIGJ1Zmxlbik7CisrCSAgYnVmbGVuICs9IGZyZWFkIChidWYgKyBidWZsZW4sIHNpemVvZihjaGFyKSwgQlVGU0laLCBmcCk7CisrCSAgYnVmcG9zID0gYnVmOworKwl9CisrCisrICAgICAgLyogTm8gY2hhcmFjdGVyIGlzIGxlZnQgaW4gQlVGLiAqLworKyAgICAgIGlmIChidWZsZW4gPCAxKQorKwl7CisrCSAgZnAgPSBuZXh0X2ZpbGUgKGZwKTsKKysKKysJICBpZiAoZnAgPT0gTlVMTCkKKysJICAgIGJyZWFrOwkJLyogTm8gbW9yZSBmaWxlcy4gKi8KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIG1lbXNldCAoJmlfc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJICAgICAgY29udGludWU7CisrCSAgICB9CisrCX0KKysKKysgICAgICAvKiBHZXQgYSB3aWRlIGNoYXJhY3Rlci4gKi8KKysgICAgICBpX3N0YXRlX2JhayA9IGlfc3RhdGU7CisrICAgICAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIGJ1ZnBvcywgYnVmbGVuLCAmaV9zdGF0ZSk7CisrCisrICAgICAgc3dpdGNoIChtYmxlbmd0aCkKKysJeworKwljYXNlIChzaXplX3QpLTE6CS8qIGlsbGVnYWwgYnl0ZSBzZXF1ZW5jZS4gKi8KKysJY2FzZSAoc2l6ZV90KS0yOgorKwkgIG1ibGVuZ3RoID0gMTsKKysJICBpX3N0YXRlID0gaV9zdGF0ZV9iYWs7CisrCSAgaWYgKGNvbnZlcnQpCisrCSAgICB7CisrCSAgICAgICsrY29sdW1uOworKwkgICAgICBpZiAoY29udmVydF9lbnRpcmVfbGluZSA9PSAwKQorKwkJY29udmVydCA9IDA7CisrCSAgICB9CisrCSAgcHV0Y2hhciAoKmJ1ZnBvcyk7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgMDoJCS8qIG51bGwuICovCisrCSAgbWJsZW5ndGggPSAxOworKwkgIGlmIChjb252ZXJ0ICYmIGNvbnZlcnRfZW50aXJlX2xpbmUgPT0gMCkKKysJICAgIGNvbnZlcnQgPSAwOworKwkgIHB1dGNoYXIgKCdcMCcpOworKwkgIGJyZWFrOworKworKwlkZWZhdWx0OgorKwkgIGlmICh3YyA9PSBMJ1xuJykgICAvKiBMRi4gKi8KKysJICAgIHsKKysJICAgICAgdGFiX2luZGV4ID0gMDsKKysJICAgICAgY29sdW1uID0gMDsKKysJICAgICAgY29udmVydCA9IDE7CisrCSAgICAgIHB1dGNoYXIgKCdcbicpOworKwkgICAgfQorKwkgIGVsc2UgaWYgKHdjID09IEwnXHQnICYmIGNvbnZlcnQpCS8qIFRhYi4gKi8KKysJICAgIHsKKysJICAgICAgaWYgKHRhYl9zaXplID09IDApCisrCQl7CisrCQkgIC8qIERvIG5vdCBsZXQgdGFiX2luZGV4ID09IGZpcnN0X2ZyZWVfdGFiOworKwkJICAgICBzdG9wIHdoZW4gaXQgaXMgMSBsZXNzLiAqLworKwkJICB3aGlsZSAodGFiX2luZGV4IDwgZmlyc3RfZnJlZV90YWIgLSAxCisrCQkgICAgICAmJiBjb2x1bW4gPj0gdGFiX2xpc3RbdGFiX2luZGV4XSkKKysJCSAgICB0YWJfaW5kZXgrKzsKKysJCSAgbmV4dF90YWJfY29sdW1uID0gdGFiX2xpc3RbdGFiX2luZGV4XTsKKysJCSAgaWYgKHRhYl9pbmRleCA8IGZpcnN0X2ZyZWVfdGFiIC0gMSkKKysJCSAgICB0YWJfaW5kZXgrKzsKKysJCSAgaWYgKGNvbHVtbiA+PSBuZXh0X3RhYl9jb2x1bW4pCisrCQkgICAgbmV4dF90YWJfY29sdW1uID0gY29sdW1uICsgMTsKKysJCX0KKysJICAgICAgZWxzZQorKwkJbmV4dF90YWJfY29sdW1uID0gY29sdW1uICsgdGFiX3NpemUgLSBjb2x1bW4gJSB0YWJfc2l6ZTsKKysKKysJICAgICAgd2hpbGUgKGNvbHVtbiA8IG5leHRfdGFiX2NvbHVtbikKKysJCXsKKysJCSAgcHV0Y2hhciAoJyAnKTsKKysJCSAgKytjb2x1bW47CisrCQl9CisrCSAgICB9CisrCSAgZWxzZSAgLyogT3RoZXJzLiAqLworKwkgICAgeworKwkgICAgICBpZiAoY29udmVydCkKKysJCXsKKysJCSAgaWYgKHdjID09IEwnXGInKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChjb2x1bW4gPiAwKQorKwkJCS0tY29sdW1uOworKwkJICAgIH0KKysJCSAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIGludCB3aWR0aDsJCS8qIFRoZSB3aWR0aCBvZiBXQy4gKi8KKysKKysJCSAgICAgIHdpZHRoID0gd2N3aWR0aCAod2MpOworKwkJICAgICAgY29sdW1uICs9ICh3aWR0aCA+IDApID8gd2lkdGggOiAwOworKwkJICAgICAgaWYgKGNvbnZlcnRfZW50aXJlX2xpbmUgPT0gMCkKKysJCQljb252ZXJ0ID0gMDsKKysJCSAgICB9CisrCQl9CisrCSAgICAgIGZ3cml0ZSAoYnVmcG9zLCBzaXplb2YoY2hhciksIG1ibGVuZ3RoLCBzdGRvdXQpOworKwkgICAgfQorKwl9CisrICAgICAgYnVmbGVuIC09IG1ibGVuZ3RoOworKyAgICAgIGJ1ZnBvcyArPSBtYmxlbmd0aDsKKysgICAgfQorK30KKysjZW5kaWYKKysKKyBpbnQKKyBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgeworQEAgLTQyOSw3ICs1ODMsMTIgQEAKKyAKKyAgIGZpbGVfbGlzdCA9IChvcHRpbmQgPCBhcmdjID8gJmFyZ3Zbb3B0aW5kXSA6IHN0ZGluX2FyZ3YpOworIAorLSAgZXhwYW5kICgpOworKyNpZiBIQVZFX01CUlRPV0MKKysgIGlmIChNQl9DVVJfTUFYID4gMSkKKysgICAgZXhwYW5kX211bHRpYnl0ZSAoKTsKKysgIGVsc2UKKysjZW5kaWYKKysgICAgZXhwYW5kICgpOworIAorICAgaWYgKGhhdmVfcmVhZF9zdGRpbiAmJiBmY2xvc2UgKHN0ZGluKSAhPSAwKQorICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCBlcnJubywgIi0iKTsKKy0tLSBjb3JldXRpbHMtNi44Ky9zcmMvam9pbi5jLmkxOG4JMjAwNy0wMS0xNCAxNTo0MToyOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky9zcmMvam9pbi5jCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMjMsMTYgKzIzLDMwIEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAKKysvKiBHZXQgbWJzdGF0ZV90LCBtYnJ0b3djKCksIG1icnRvd2MoKSwgd2N3aWR0aCgpLiAgKi8KKysjaWYgSEFWRV9XQ0hBUl9ICisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyNlbmRpZgorKworKy8qIEdldCBpc3dibGFuaygpLCB0b3d1cHBlci4gICovCisrI2lmIEhBVkVfV0NUWVBFX0gKKysjIGluY2x1ZGUgPHdjdHlwZS5oPgorKyNlbmRpZgorKworICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiZXJyb3IuaCIKKyAjaW5jbHVkZSAiaGFyZC1sb2NhbGUuaCIKKyAjaW5jbHVkZSAibGluZWJ1ZmZlci5oIgorLSNpbmNsdWRlICJtZW1jYXNlY21wLmgiCisgI2luY2x1ZGUgInF1b3RlLmgiCisgI2luY2x1ZGUgInN0ZGlvLS0uaCIKKyAjaW5jbHVkZSAieG1lbWNvbGwuaCIKKyAjaW5jbHVkZSAieHN0cnRvbC5oIgorIAorKy8qIFNvbWUgc3lzdGVtcywgbGlrZSBCZU9TLCBoYXZlIG11bHRpYnl0ZSBlbmNvZGluZ3MgYnV0IGxhY2sgbWJzdGF0ZV90LiAgKi8KKysjaWYgSEFWRV9NQlJUT1dDICYmIGRlZmluZWQgbWJzdGF0ZV90CisrIyBkZWZpbmUgbWJydG93Yyhwd2MsIHMsIG4sIHBzKSAobWJydG93YykgKHB3YywgcywgbiwgMCkKKysjZW5kaWYKKysKKyAvKiBUaGUgb2ZmaWNpYWwgbmFtZSBvZiB0aGlzIHByb2dyYW0gKGUuZy4sIG5vIGBnJyBwcmVmaXgpLiAgKi8KKyAjZGVmaW5lIFBST0dSQU1fTkFNRSAiam9pbiIKKyAKK0BAIC0xMDQsMTAgKzExOCwxMiBAQAorIC8qIExhc3QgZWxlbWVudCBpbiBgb3V0bGlzdCcsIHdoZXJlIGEgbmV3IGVsZW1lbnQgY2FuIGJlIGFkZGVkLiAgKi8KKyBzdGF0aWMgc3RydWN0IG91dGxpc3QgKm91dGxpc3RfZW5kID0gJm91dGxpc3RfaGVhZDsKKyAKKy0vKiBUYWIgY2hhcmFjdGVyIHNlcGFyYXRpbmcgZmllbGRzLiAgSWYgbmVnYXRpdmUsIGZpZWxkcyBhcmUgc2VwYXJhdGVkCistICAgYnkgYW55IG5vbmVtcHR5IHN0cmluZyBvZiBibGFua3MsIG90aGVyd2lzZSBieSBleGFjdGx5IG9uZQorLSAgIHRhYiBjaGFyYWN0ZXIgd2hvc2UgdmFsdWUgKHdoZW4gY2FzdCB0byB1bnNpZ25lZCBjaGFyKSBlcXVhbHMgVEFCLiAgKi8KKy1zdGF0aWMgaW50IHRhYiA9IC0xOworKy8qIFRhYiBjaGFyYWN0ZXIgc2VwYXJhdGluZyBmaWVsZHMuICBJZiBOVUxMLCBmaWVsZHMgYXJlIHNlcGFyYXRlZAorKyAgIGJ5IGFueSBub25lbXB0eSBzdHJpbmcgb2YgYmxhbmtzLiAgKi8KKytzdGF0aWMgY2hhciAqdGFiID0gTlVMTDsKKysKKysvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHVzZWQgZm9yIHRhYi4gKi8KKytzdGF0aWMgc2l6ZV90IHRhYmxlbiA9IDA7CisgCisgc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgbG9uZ29wdHNbXSA9CisgeworQEAgLTE5MCw2ICsyMDYsOCBAQAorIAorIC8qIEZpbGwgaW4gdGhlIGBmaWVsZHMnIHN0cnVjdHVyZSBpbiBMSU5FLiAgKi8KKyAKKysvKiBGaWxsIGluIHRoZSBgZmllbGRzJyBzdHJ1Y3R1cmUgaW4gTElORS4gICovCisrCisgc3RhdGljIHZvaWQKKyB4ZmllbGRzIChzdHJ1Y3QgbGluZSAqbGluZSkKKyB7CitAQCAtMTk5LDEwICsyMTcsMTEgQEAKKyAgIGlmIChwdHIgPT0gbGltKQorICAgICByZXR1cm47CisgCistICBpZiAoMCA8PSB0YWIpCisrICBpZiAodGFiICE9IE5VTEwpCisgICAgIHsKKysgICAgICB1bnNpZ25lZCBjaGFyIHQgPSB0YWJbMF07CisgICAgICAgY2hhciAqc2VwOworLSAgICAgIGZvciAoOyAoc2VwID0gbWVtY2hyIChwdHIsIHRhYiwgbGltIC0gcHRyKSkgIT0gTlVMTDsgcHRyID0gc2VwICsgMSkKKysgICAgICBmb3IgKDsgKHNlcCA9IG1lbWNociAocHRyLCB0LCBsaW0gLSBwdHIpKSAhPSBOVUxMOyBwdHIgPSBzZXAgKyAxKQorIAlleHRyYWN0X2ZpZWxkIChsaW5lLCBwdHIsIHNlcCAtIHB0cik7CisgICAgIH0KKyAgIGVsc2UKK0BAIC0yMjksNiArMjQ4LDE0OCBAQAorICAgZXh0cmFjdF9maWVsZCAobGluZSwgcHRyLCBsaW0gLSBwdHIpOworIH0KKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIHZvaWQKKyt4ZmllbGRzX211bHRpYnl0ZSAoc3RydWN0IGxpbmUgKmxpbmUpCisreworKyAgY2hhciAqcHRyID0gbGluZS0+YnVmLmJ1ZmZlcjsKKysgIGNoYXIgY29uc3QgKmxpbSA9IHB0ciArIGxpbmUtPmJ1Zi5sZW5ndGggLSAxOworKyAgd2NoYXJfdCB3YyA9IDA7CisrICBzaXplX3QgbWJsZW5ndGggPSAxOworKyAgbWJzdGF0ZV90IHN0YXRlLCBzdGF0ZV9iYWs7CisrCisrICBtZW1zZXQgKCZzdGF0ZSwgMCwgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysKKysgIGlmIChwdHIgPT0gbGltKQorKyAgICByZXR1cm47CisrCisrICBpZiAodGFiICE9IE5VTEwpCisrICAgIHsKKysgICAgICB1bnNpZ25lZCBjaGFyIHQgPSB0YWJbMF07CisrICAgICAgY2hhciAqc2VwID0gcHRyOworKyAgICAgIGZvciAoOyBwdHIgPCBsaW07IHB0ciA9IHNlcCArIG1ibGVuZ3RoKQorKwl7CisrCSAgc2VwID0gcHRyOworKwkgIHdoaWxlIChzZXAgPCBsaW0pCisrCSAgICB7CisrCSAgICAgIHN0YXRlX2JhayA9IHN0YXRlOworKwkgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3Yywgc2VwLCBsaW0gLSBzZXAgKyAxLCAmc3RhdGUpOworKworKwkgICAgICBpZiAobWJsZW5ndGggPT0gKHNpemVfdCktMSB8fCBtYmxlbmd0aCA9PSAoc2l6ZV90KS0yKQorKwkJeworKwkJICBtYmxlbmd0aCA9IDE7CisrCQkgIHN0YXRlID0gc3RhdGVfYmFrOworKwkJfQorKwkgICAgICBtYmxlbmd0aCA9IChtYmxlbmd0aCA8IDEpID8gMSA6IG1ibGVuZ3RoOworKworKwkgICAgICBpZiAobWJsZW5ndGggPT0gdGFibGVuICYmICFtZW1jbXAgKHNlcCwgdGFiLCBtYmxlbmd0aCkpCisrCQlicmVhazsKKysJICAgICAgZWxzZQorKwkJeworKwkJICBzZXAgKz0gbWJsZW5ndGg7CisrCQkgIGNvbnRpbnVlOworKwkJfQorKwkgICAgfQorKworKwkgIGlmIChzZXAgPT0gbGltKQorKwkgICAgYnJlYWs7CisrCisrCSAgZXh0cmFjdF9maWVsZCAobGluZSwgcHRyLCBzZXAgLSBwdHIpOworKwl9CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIC8qIFNraXAgbGVhZGluZyBibGFua3MgYmVmb3JlIHRoZSBmaXJzdCBmaWVsZC4gICovCisrICAgICAgd2hpbGUocHRyIDwgbGltKQorKyAgICAgIHsKKysgICAgICAgIHN0YXRlX2JhayA9IHN0YXRlOworKyAgICAgICAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIHB0ciwgbGltIC0gcHRyICsgMSwgJnN0YXRlKTsKKysKKysgICAgICAgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBtYmxlbmd0aCA9IDE7CisrICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgIH0KKysgICAgICAgIG1ibGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCisrICAgICAgICBpZiAoIWlzd2JsYW5rKHdjKSkKKysgICAgICAgICAgYnJlYWs7CisrICAgICAgICBwdHIgKz0gbWJsZW5ndGg7CisrICAgICAgfQorKworKyAgICAgIGRvCisrCXsKKysJICBjaGFyICpzZXA7CisrCSAgc3RhdGVfYmFrID0gc3RhdGU7CisrCSAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIHB0ciwgbGltIC0gcHRyICsgMSwgJnN0YXRlKTsKKysJICBpZiAobWJsZW5ndGggPT0gKHNpemVfdCktMSB8fCBtYmxlbmd0aCA9PSAoc2l6ZV90KS0yKQorKwkgICAgeworKwkgICAgICBtYmxlbmd0aCA9IDE7CisrCSAgICAgIHN0YXRlID0gc3RhdGVfYmFrOworKwkgICAgICBicmVhazsKKysJICAgIH0KKysJICBtYmxlbmd0aCA9IChtYmxlbmd0aCA8IDEpID8gMSA6IG1ibGVuZ3RoOworKworKwkgIHNlcCA9IHB0ciArIG1ibGVuZ3RoOworKwkgIHdoaWxlIChzZXAgIT0gbGltKQorKwkgICAgeworKwkgICAgICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysJICAgICAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIHNlcCwgbGltIC0gc2VwICsgMSwgJnN0YXRlKTsKKysJICAgICAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysJCXsKKysJCSAgbWJsZW5ndGggPSAxOworKwkJICBzdGF0ZSA9IHN0YXRlX2JhazsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICAgIG1ibGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCisrCSAgICAgIGlmIChpc3dibGFuayAod2MpKQorKwkJYnJlYWs7CisrCisrCSAgICAgIHNlcCArPSBtYmxlbmd0aDsKKysJICAgIH0KKysKKysJICBleHRyYWN0X2ZpZWxkIChsaW5lLCBwdHIsIHNlcCAtIHB0cik7CisrCSAgaWYgKHNlcCA9PSBsaW0pCisrCSAgICByZXR1cm47CisrCisrCSAgc3RhdGVfYmFrID0gc3RhdGU7CisrCSAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIHNlcCwgbGltIC0gc2VwICsgMSwgJnN0YXRlKTsKKysJICBpZiAobWJsZW5ndGggPT0gKHNpemVfdCktMSB8fCBtYmxlbmd0aCA9PSAoc2l6ZV90KS0yKQorKwkgICAgeworKwkgICAgICBtYmxlbmd0aCA9IDE7CisrCSAgICAgIHN0YXRlID0gc3RhdGVfYmFrOworKwkgICAgICBicmVhazsKKysJICAgIH0KKysJICBtYmxlbmd0aCA9IChtYmxlbmd0aCA8IDEpID8gMSA6IG1ibGVuZ3RoOworKworKwkgIHB0ciA9IHNlcCArIG1ibGVuZ3RoOworKwkgIHdoaWxlIChwdHIgIT0gbGltKQorKwkgICAgeworKwkgICAgICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysJICAgICAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIHB0ciwgbGltIC0gcHRyICsgMSwgJnN0YXRlKTsKKysJICAgICAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysJCXsKKysJCSAgbWJsZW5ndGggPSAxOworKwkJICBzdGF0ZSA9IHN0YXRlX2JhazsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICAgIG1ibGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCisrCSAgICAgIGlmICghaXN3YmxhbmsgKHdjKSkKKysJCWJyZWFrOworKworKwkgICAgICBwdHIgKz0gbWJsZW5ndGg7CisrCSAgICB9CisrCX0KKysgICAgICB3aGlsZSAocHRyICE9IGxpbSk7CisrICAgIH0KKysKKysgIGV4dHJhY3RfZmllbGQgKGxpbmUsIHB0ciwgbGltIC0gcHRyKTsKKyt9CisrI2VuZGlmCisrCisgLyogUmVhZCBhIGxpbmUgZnJvbSBGUCBpbnRvIExJTkUgYW5kIHNwbGl0IGl0IGludG8gZmllbGRzLgorICAgIFJldHVybiB0cnVlIGlmIHN1Y2Nlc3NmdWwuICAqLworIAorQEAgLTI0OSw2ICs0MTAsMTEgQEAKKyAgIGxpbmUtPm5maWVsZHNfYWxsb2NhdGVkID0gMDsKKyAgIGxpbmUtPm5maWVsZHMgPSAwOworICAgbGluZS0+ZmllbGRzID0gTlVMTDsKKysjaWYgSEFWRV9NQlJUT1dDCisrICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgIHhmaWVsZHNfbXVsdGlieXRlIChsaW5lKTsKKysgIGVsc2UKKysjZW5kaWYKKyAgIHhmaWVsZHMgKGxpbmUpOworICAgcmV0dXJuIHRydWU7CisgfQorQEAgLTMwMyw1NiArNDY5LDExNCBAQAorIGtleWNtcCAoc3RydWN0IGxpbmUgY29uc3QgKmxpbmUxLCBzdHJ1Y3QgbGluZSBjb25zdCAqbGluZTIpCisgeworICAgLyogU3RhcnQgb2YgZmllbGQgdG8gY29tcGFyZSBpbiBlYWNoIGZpbGUuICAqLworLSAgY2hhciAqYmVnMTsKKy0gIGNoYXIgKmJlZzI7CistCistICBzaXplX3QgbGVuMTsKKy0gIHNpemVfdCBsZW4yOwkJLyogTGVuZ3RoIG9mIGZpZWxkcyB0byBjb21wYXJlLiAgKi8KKysgIGNoYXIgKmJlZ1syXTsKKysgIGNoYXIgKmNvcHlbMl07CisrICBzaXplX3QgbGVuWzJdOwkvKiBMZW5ndGggb2YgZmllbGRzIHRvIGNvbXBhcmUuICAqLworICAgaW50IGRpZmY7CisrICBpbnQgaSwgajsKKyAKKyAgIGlmIChqb2luX2ZpZWxkXzEgPCBsaW5lMS0+bmZpZWxkcykKKyAgICAgeworLSAgICAgIGJlZzEgPSBsaW5lMS0+ZmllbGRzW2pvaW5fZmllbGRfMV0uYmVnOworLSAgICAgIGxlbjEgPSBsaW5lMS0+ZmllbGRzW2pvaW5fZmllbGRfMV0ubGVuOworKyAgICAgIGJlZ1swXSA9IGxpbmUxLT5maWVsZHNbam9pbl9maWVsZF8xXS5iZWc7CisrICAgICAgbGVuWzBdID0gbGluZTEtPmZpZWxkc1tqb2luX2ZpZWxkXzFdLmxlbjsKKyAgICAgfQorICAgZWxzZQorICAgICB7CistICAgICAgYmVnMSA9IE5VTEw7CistICAgICAgbGVuMSA9IDA7CisrICAgICAgYmVnWzBdID0gTlVMTDsKKysgICAgICBsZW5bMF0gPSAwOworICAgICB9CisgCisgICBpZiAoam9pbl9maWVsZF8yIDwgbGluZTItPm5maWVsZHMpCisgICAgIHsKKy0gICAgICBiZWcyID0gbGluZTItPmZpZWxkc1tqb2luX2ZpZWxkXzJdLmJlZzsKKy0gICAgICBsZW4yID0gbGluZTItPmZpZWxkc1tqb2luX2ZpZWxkXzJdLmxlbjsKKysgICAgICBiZWdbMV0gPSBsaW5lMi0+ZmllbGRzW2pvaW5fZmllbGRfMl0uYmVnOworKyAgICAgIGxlblsxXSA9IGxpbmUyLT5maWVsZHNbam9pbl9maWVsZF8yXS5sZW47CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSAgICAgIGJlZzIgPSBOVUxMOworLSAgICAgIGxlbjIgPSAwOworKyAgICAgIGJlZ1sxXSA9IE5VTEw7CisrICAgICAgbGVuWzFdID0gMDsKKyAgICAgfQorIAorLSAgaWYgKGxlbjEgPT0gMCkKKy0gICAgcmV0dXJuIGxlbjIgPT0gMCA/IDAgOiAtMTsKKy0gIGlmIChsZW4yID09IDApCisrICBpZiAobGVuWzBdID09IDApCisrICAgIHJldHVybiBsZW5bMV0gPT0gMCA/IDAgOiAtMTsKKysgIGlmIChsZW5bMV0gPT0gMCkKKyAgICAgcmV0dXJuIDE7CisgCisgICBpZiAoaWdub3JlX2Nhc2UpCisgICAgIHsKKy0gICAgICAvKiBGSVhNRTogaWdub3JlX2Nhc2UgZG9lcyBub3Qgd29yayB3aXRoIE5MUyAoaW4gcGFydGljdWxhciwKKy0gICAgICAgICB3aXRoIG11bHRpYnl0ZSBjaGFycykuICAqLworLSAgICAgIGRpZmYgPSBtZW1jYXNlY21wIChiZWcxLCBiZWcyLCBNSU4gKGxlbjEsIGxlbjIpKTsKKysjaWZkZWYgSEFWRV9NQlJUT1dDCisrICAgICAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICAgIHsKKysgICAgICAgIHNpemVfdCBtYmxlbmd0aDsKKysgICAgICAgIHdjaGFyX3Qgd2MsIHV3YzsKKysgICAgICAgIG1ic3RhdGVfdCBzdGF0ZSwgc3RhdGVfYmFrOworKworKyAgICAgICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgY29weVtpXSA9IGFsbG9jYSAobGVuW2ldICsgMSk7CisrCisrICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IE1JTiAobGVuWzBdLCBsZW5bMV0pOykKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgc3RhdGVfYmFrID0gc3RhdGU7CisrICAgICAgICAgICAgICAgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBiZWdbaV0gKyBqLCBsZW5baV0gLSBqLCAmc3RhdGUpOworKworKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1ibGVuZ3RoKQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICBjYXNlIChzaXplX3QpIC0xOgorKyAgICAgICAgICAgICAgICAgIGNhc2UgKHNpemVfdCkgLTI6CisrICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlX2JhazsKKysgICAgICAgICAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworKyAgICAgICAgICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICAgICAgICAgIG1ibGVuZ3RoID0gMTsKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICB1d2MgPSB0b3d1cHBlciAod2MpOworKworKyAgICAgICAgICAgICAgICAgICAgaWYgKHV3YyAhPSB3YykKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCBzdGF0ZV93YzsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQgKCZzdGF0ZV93YywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICB3Y3J0b21iIChjb3B5W2ldICsgaiwgdXdjLCAmc3RhdGVfd2MpOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSAoY29weVtpXSArIGosIGJlZ1tpXSArIGosIG1ibGVuZ3RoKTsKKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGogKz0gbWJsZW5ndGg7CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgY29weVtpXVtqXSA9ICdcMCc7CisrICAgICAgICAgIH0KKysgICAgICB9CisrICAgICAgZWxzZQorKyNlbmRpZgorKyAgICAgIHsKKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBjb3B5W2ldID0gYWxsb2NhIChsZW5baV0gKyAxKTsKKysKKysgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgTUlOIChsZW5bMF0sIGxlblsxXSk7IGorKykKKysgICAgICAgICAgICAgIGNvcHlbaV1bal0gPSB0b3VwcGVyIChiZWdbaV1bal0pOworKworKyAgICAgICAgICAgIGNvcHlbaV1bal0gPSAnXDAnOworKyAgICAgICAgICB9CisrICAgICAgfQorICAgICB9CisgICBlbHNlCisgICAgIHsKKy0gICAgICBpZiAoaGFyZF9MQ19DT0xMQVRFKQorLQlyZXR1cm4geG1lbWNvbGwgKGJlZzEsIGxlbjEsIGJlZzIsIGxlbjIpOworLSAgICAgIGRpZmYgPSBtZW1jbXAgKGJlZzEsIGJlZzIsIE1JTiAobGVuMSwgbGVuMikpOworKyAgICAgIGNvcHlbMF0gPSAodW5zaWduZWQgY2hhciAqKSBiZWdbMF07CisrICAgICAgY29weVsxXSA9ICh1bnNpZ25lZCBjaGFyICopIGJlZ1sxXTsKKyAgICAgfQorIAorKyAgaWYgKGhhcmRfTENfQ09MTEFURSkKKysgICAgcmV0dXJuIHhtZW1jb2xsICgoY2hhciAqKSBjb3B5WzBdLCBsZW5bMF0sIChjaGFyICopIGNvcHlbMV0sIGxlblsxXSk7CisrICBkaWZmID0gbWVtY21wIChjb3B5WzBdLCBjb3B5WzFdLCBNSU4gKGxlblswXSwgbGVuWzFdKSk7CisrCisgICBpZiAoZGlmZikKKyAgICAgcmV0dXJuIGRpZmY7CistICByZXR1cm4gbGVuMSA8IGxlbjIgPyAtMSA6IGxlbjEgIT0gbGVuMjsKKysgIHJldHVybiBsZW5bMF0gLSBsZW5bMV07CisgfQorIAorIC8qIFByaW50IGZpZWxkIE4gb2YgTElORSBpZiBpdCBleGlzdHMgYW5kIGlzIG5vbmVtcHR5LCBvdGhlcndpc2UKK0BAIC0zNzcsMTEgKzYwMSwxOCBAQAorIAorIC8qIFByaW50IHRoZSBqb2luIG9mIExJTkUxIGFuZCBMSU5FMi4gICovCisgCisrI2RlZmluZSBQVVRfVEFCX0NIQVIJCQkJCQkJXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgKHRhYiAhPSBOVUxMKSA/CQkJCQkJCVwKKysJZndyaXRlKHRhYiwgc2l6ZW9mKGNoYXIpLCB0YWJsZW4sIHN0ZG91dCkgOiBwdXRjaGFyICgnICcpOwlcCisrICAgIH0JCQkJCQkJCQlcCisrICB3aGlsZSAoMCkJCQkJCQkJCQorKworIHN0YXRpYyB2b2lkCisgcHJqb2luIChzdHJ1Y3QgbGluZSBjb25zdCAqbGluZTEsIHN0cnVjdCBsaW5lIGNvbnN0ICpsaW5lMikKKyB7CisgICBjb25zdCBzdHJ1Y3Qgb3V0bGlzdCAqb3V0bGlzdDsKKy0gIGNoYXIgb3V0cHV0X3NlcGFyYXRvciA9IHRhYiA8IDAgPyAnICcgOiB0YWI7CisgCisgICBvdXRsaXN0ID0gb3V0bGlzdF9oZWFkLm5leHQ7CisgICBpZiAob3V0bGlzdCkKK0BAIC0zOTcsMTIgKzYyOCwxMiBAQAorIAkgIGlmIChvLT5maWxlID09IDApCisgCSAgICB7CisgCSAgICAgIGlmIChsaW5lMSA9PSAmdW5pX2JsYW5rKQorLQkgICAgICAgIHsKKysJCXsKKyAJCSAgbGluZSA9IGxpbmUyOworIAkJICBmaWVsZCA9IGpvaW5fZmllbGRfMjsKKyAJCX0KKyAJICAgICAgZWxzZQorLQkgICAgICAgIHsKKysJCXsKKyAJCSAgbGluZSA9IGxpbmUxOworIAkJICBmaWVsZCA9IGpvaW5fZmllbGRfMTsKKyAJCX0KK0BAIC00MTYsNyArNjQ3LDcgQEAKKyAJICBvID0gby0+bmV4dDsKKyAJICBpZiAobyA9PSBOVUxMKQorIAkgICAgYnJlYWs7CistCSAgcHV0Y2hhciAob3V0cHV0X3NlcGFyYXRvcik7CisrCSAgUFVUX1RBQl9DSEFSOworIAl9CisgICAgICAgcHV0Y2hhciAoJ1xuJyk7CisgICAgIH0KK0BAIC00MzQsMjMgKzY2NSwyMyBAQAorICAgICAgIHByZmllbGQgKGpvaW5fZmllbGRfMSwgbGluZTEpOworICAgICAgIGZvciAoaSA9IDA7IGkgPCBqb2luX2ZpZWxkXzEgJiYgaSA8IGxpbmUxLT5uZmllbGRzOyArK2kpCisgCXsKKy0JICBwdXRjaGFyIChvdXRwdXRfc2VwYXJhdG9yKTsKKysJICBQVVRfVEFCX0NIQVI7CisgCSAgcHJmaWVsZCAoaSwgbGluZTEpOworIAl9CisgICAgICAgZm9yIChpID0gam9pbl9maWVsZF8xICsgMTsgaSA8IGxpbmUxLT5uZmllbGRzOyArK2kpCisgCXsKKy0JICBwdXRjaGFyIChvdXRwdXRfc2VwYXJhdG9yKTsKKysJICBQVVRfVEFCX0NIQVI7CisgCSAgcHJmaWVsZCAoaSwgbGluZTEpOworIAl9CisgCisgICAgICAgZm9yIChpID0gMDsgaSA8IGpvaW5fZmllbGRfMiAmJiBpIDwgbGluZTItPm5maWVsZHM7ICsraSkKKyAJeworLQkgIHB1dGNoYXIgKG91dHB1dF9zZXBhcmF0b3IpOworKwkgIFBVVF9UQUJfQ0hBUjsKKyAJICBwcmZpZWxkIChpLCBsaW5lMik7CisgCX0KKyAgICAgICBmb3IgKGkgPSBqb2luX2ZpZWxkXzIgKyAxOyBpIDwgbGluZTItPm5maWVsZHM7ICsraSkKKyAJeworLQkgIHB1dGNoYXIgKG91dHB1dF9zZXBhcmF0b3IpOworKwkgIFBVVF9UQUJfQ0hBUjsKKyAJICBwcmZpZWxkIChpLCBsaW5lMik7CisgCX0KKyAgICAgICBwdXRjaGFyICgnXG4nKTsKK0BAIC04NTksMjAgKzEwOTAsNDEgQEAKKyAKKyAJY2FzZSAndCc6CisgCSAgeworLQkgICAgdW5zaWduZWQgY2hhciBuZXd0YWIgPSBvcHRhcmdbMF07CistCSAgICBpZiAoISBuZXd0YWIpCisrCSAgICBjaGFyICpuZXd0YWI7CisrCSAgICBzaXplX3QgbmV3dGFibGVuOworKwkgICAgaWYgKCEgb3B0YXJnWzBdKQorIAkgICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBfKCJlbXB0eSB0YWIiKSk7CistCSAgICBpZiAob3B0YXJnWzFdKQorKwkgICAgbmV3dGFiID0geHN0cmR1cCAob3B0YXJnKTsKKysjaWYgSEFWRV9NQlJUT1dDCisrCSAgICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrCSAgICAgIHsKKysJCW1ic3RhdGVfdCBzdGF0ZTsKKysKKysJCW1lbXNldCAoJnN0YXRlLCAwLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJbmV3dGFibGVuID0gbWJydG93YyAoTlVMTCwgbmV3dGFiLAorKwkJCQkgICAgIHN0cm5sZW4gKG5ld3RhYiwgTUJfTEVOX01BWCksCisrCQkJCSAgICAgJnN0YXRlKTsKKysJCWlmIChuZXd0YWJsZW4gPT0gKHNpemVfdCkgMAorKwkJICAgIHx8IG5ld3RhYmxlbiA9PSAoc2l6ZV90KSAtMQorKwkJICAgIHx8IG5ld3RhYmxlbiA9PSAoc2l6ZV90KSAtMikKKysJCSAgbmV3dGFibGVuID0gMTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKyNlbmRpZgorKwkgICAgICBuZXd0YWJsZW4gPSAxOworKwkJCisrCSAgICBpZiAobmV3dGFibGVuID09IDEgJiYgbmV3dGFiWzFdKQorKwkgICAgICB7CisrCQlpZiAoU1RSRVEgKG5ld3RhYiwgIlxcMCIpKQorKwkJICBuZXd0YWJbMF0gPSAnXDAnOworKwkgICAgICB9CisrCSAgICBpZiAodGFiICE9IE5VTEwgJiYgc3RyY21wICh0YWIsIG5ld3RhYikpCisgCSAgICAgIHsKKy0JCWlmIChTVFJFUSAob3B0YXJnLCAiXFwwIikpCistCQkgIG5ld3RhYiA9ICdcMCc7CistCQllbHNlCistCQkgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIF8oIm11bHRpLWNoYXJhY3RlciB0YWIgJXMiKSwKKy0JCQkgcXVvdGUgKG9wdGFyZykpOworKwkJZnJlZSAobmV3dGFiKTsKKysJCWVycm9yIChFWElUX0ZBSUxVUkUsIDAsIF8oImluY29tcGF0aWJsZSB0YWJzIikpOworIAkgICAgICB9CistCSAgICBpZiAoMCA8PSB0YWIgJiYgdGFiICE9IG5ld3RhYikKKy0JICAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgXygiaW5jb21wYXRpYmxlIHRhYnMiKSk7CisgCSAgICB0YWIgPSBuZXd0YWI7CisrCSAgICB0YWJsZW4gPSBuZXd0YWJsZW47CisgCSAgfQorIAkgIGJyZWFrOworIAorLS0tIGNvcmV1dGlscy02LjgrL3NyYy91bmlxLmMuaTE4bgkyMDA3LTAxLTE0IDE1OjQxOjI4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy91bmlxLmMJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMyw2ICsyMywxNiBAQAorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgCisrLyogR2V0IG1ic3RhdGVfdCwgbWJydG93YygpLiAqLworKyNpZiBIQVZFX1dDSEFSX0gKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrI2VuZGlmCisrCisrLyogR2V0IGlzdyogZnVuY3Rpb25zLiAqLworKyNpZiBIQVZFX1dDVFlQRV9ICisrIyBpbmNsdWRlIDx3Y3R5cGUuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImFyZ21hdGNoLmgiCisgI2luY2x1ZGUgImxpbmVidWZmZXIuaCIKK0BAIC0zMiw3ICs0MiwxOSBAQAorICNpbmNsdWRlICJxdW90ZS5oIgorICNpbmNsdWRlICJ4bWVtY29sbC5oIgorICNpbmNsdWRlICJ4c3RydG9sLmgiCistI2luY2x1ZGUgIm1lbWNhc2VjbXAuaCIKKysjaW5jbHVkZSAieG1lbWNvbGwuaCIKKysKKysvKiBNQl9MRU5fTUFYIGlzIGluY29ycmVjdGx5IGRlZmluZWQgdG8gYmUgMSBpbiBhdCBsZWFzdCBvbmUgR0NDCisrICAgaW5zdGFsbGF0aW9uOyB3b3JrIGFyb3VuZCB0aGlzIGNvbmZpZ3VyYXRpb24gZXJyb3IuICAqLworKyNpZiAhZGVmaW5lZCBNQl9MRU5fTUFYIHx8IE1CX0xFTl9NQVggPCAyCisrIyBkZWZpbmUgTUJfTEVOX01BWCAxNgorKyNlbmRpZgorKworKy8qIFNvbWUgc3lzdGVtcywgbGlrZSBCZU9TLCBoYXZlIG11bHRpYnl0ZSBlbmNvZGluZ3MgYnV0IGxhY2sgbWJzdGF0ZV90LiAgKi8KKysjaWYgSEFWRV9NQlJUT1dDICYmIGRlZmluZWQgbWJzdGF0ZV90CisrIyBkZWZpbmUgbWJydG93Yyhwd2MsIHMsIG4sIHBzKSAobWJydG93YykgKHB3YywgcywgbiwgMCkKKysjZW5kaWYKKysKKyAKKyAvKiBUaGUgb2ZmaWNpYWwgbmFtZSBvZiB0aGlzIHByb2dyYW0gKGUuZy4sIG5vIGBnJyBwcmVmaXgpLiAgKi8KKyAjZGVmaW5lIFBST0dSQU1fTkFNRSAidW5pcSIKK0BAIC0xMDksNiArMTMxLDEwIEBACisgLyogU2VsZWN0IHdoZXRoZXIvaG93IHRvIGRlbGltaXQgZ3JvdXBzIG9mIGR1cGxpY2F0ZSBsaW5lcy4gICovCisgc3RhdGljIGVudW0gZGVsaW1pdF9tZXRob2QgZGVsaW1pdF9ncm91cHM7CisgCisrLyogRnVuY3Rpb24gcG9pbnRlcnMuICovCisrc3RhdGljIGNoYXIgKgorKygqZmluZF9maWVsZCkgKHN0cnVjdCBsaW5lYnVmZmVyICpsaW5lKTsKKysKKyBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBsb25nb3B0c1tdID0KKyB7CisgICB7ImNvdW50Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdjJ30sCitAQCAtMTk4LDcgKzIyNCw3IEBACisgICAgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lJ3MgZmllbGQgdG8gYmUgY29tcGFyZWQuICovCisgCisgc3RhdGljIGNoYXIgKgorLWZpbmRfZmllbGQgKGNvbnN0IHN0cnVjdCBsaW5lYnVmZmVyICpsaW5lKQorK2ZpbmRfZmllbGRfdW5pIChzdHJ1Y3QgbGluZWJ1ZmZlciAqbGluZSkKKyB7CisgICBzaXplX3QgY291bnQ7CisgICBjaGFyICpscCA9IGxpbmUtPmJ1ZmZlcjsKK0BAIC0yMTksNiArMjQ1LDgzIEBACisgICByZXR1cm4gbHAgKyBpOworIH0KKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrCisrIyBkZWZpbmUgTUJDSEFSX1RPX1dDSEFSKFdDLCBNQkxFTkdUSCwgTFAsIFBPUywgU0laRSwgU1RBVEVQLCBDT05WRkFJTCkgIFwKKysgIGRvCQkJCQkJCQkJXAorKyAgICB7CQkJCQkJCQkJXAorKyAgICAgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICBDT05WRkFJTCA9IDA7CQkJCQkJCVwKKysgICAgICBzdGF0ZV9iYWsgPSAqU1RBVEVQOwkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgICAgTUJMRU5HVEggPSBtYnJ0b3djICgmV0MsIExQICsgUE9TLCBTSVpFIC0gUE9TLCBTVEFURVApOwkJXAorKwkJCQkJCQkJCVwKKysgICAgICBzd2l0Y2ggKE1CTEVOR1RIKQkJCQkJCQlcCisrCXsJCQkJCQkJCVwKKysJY2FzZSAoc2l6ZV90KS0yOgkJCQkJCVwKKysJY2FzZSAoc2l6ZV90KS0xOgkJCQkJCVwKKysJICAqU1RBVEVQID0gc3RhdGVfYmFrOwkJCQkJCVwKKysJICBDT05WRkFJTCsrOwkJCQkJCQlcCisrCSAgLyogRmFsbCB0aHJvdWdoICovCQkJCQkJXAorKwljYXNlIDA6CQkJCQkJCQlcCisrCSAgTUJMRU5HVEggPSAxOwkJCQkJCQlcCisrCX0JCQkJCQkJCVwKKysgICAgfQkJCQkJCQkJCVwKKysgIHdoaWxlICgwKQorKworK3N0YXRpYyBjaGFyICoKKytmaW5kX2ZpZWxkX211bHRpIChzdHJ1Y3QgbGluZWJ1ZmZlciAqbGluZSkKKyt7CisrICBzaXplX3QgY291bnQ7CisrICBjaGFyICpscCA9IGxpbmUtPmJ1ZmZlcjsKKysgIHNpemVfdCBzaXplID0gbGluZS0+bGVuZ3RoIC0gMTsKKysgIHNpemVfdCBwb3M7CisrICBzaXplX3QgbWJsZW5ndGg7CisrICB3Y2hhcl90IHdjOworKyAgbWJzdGF0ZV90ICpzdGF0ZXA7CisrICBpbnQgY29udmZhaWw7CisrCisrICBwb3MgPSAwOworKyAgc3RhdGVwID0gJihsaW5lLT5zdGF0ZSk7CisrCisrICAvKiBza2lwIGZpZWxkcy4gKi8KKysgIGZvciAoY291bnQgPSAwOyBjb3VudCA8IHNraXBfZmllbGRzICYmIHBvcyA8IHNpemU7IGNvdW50KyspCisrICAgIHsKKysgICAgICB3aGlsZSAocG9zIDwgc2l6ZSkKKysJeworKwkgIE1CQ0hBUl9UT19XQ0hBUiAod2MsIG1ibGVuZ3RoLCBscCwgcG9zLCBzaXplLCBzdGF0ZXAsIGNvbnZmYWlsKTsKKysgCisrCSAgaWYgKGNvbnZmYWlsIHx8ICFpc3dibGFuayAod2MpKQorKwkgICAgeworKwkgICAgICBwb3MgKz0gbWJsZW5ndGg7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwkgIHBvcyArPSBtYmxlbmd0aDsKKysJfQorKworKyAgICAgIHdoaWxlIChwb3MgPCBzaXplKQorKwl7CisrCSAgTUJDSEFSX1RPX1dDSEFSICh3YywgbWJsZW5ndGgsIGxwLCBwb3MsIHNpemUsIHN0YXRlcCwgY29udmZhaWwpOworKworKwkgIGlmICghY29udmZhaWwgJiYgaXN3YmxhbmsgKHdjKSkKKysJICAgIGJyZWFrOworKworKwkgIHBvcyArPSBtYmxlbmd0aDsKKysJfQorKyAgICB9CisrCisrICAvKiBza2lwIGZpZWxkcy4gKi8KKysgIGZvciAoY291bnQgPSAwOyBjb3VudCA8IHNraXBfY2hhcnMgJiYgcG9zIDwgc2l6ZTsgY291bnQrKykKKysgICAgeworKyAgICAgIE1CQ0hBUl9UT19XQ0hBUiAod2MsIG1ibGVuZ3RoLCBscCwgcG9zLCBzaXplLCBzdGF0ZXAsIGNvbnZmYWlsKTsKKysgICAgICBwb3MgKz0gbWJsZW5ndGg7CisrICAgIH0KKysKKysgIHJldHVybiBscCArIHBvczsKKyt9CisrI2VuZGlmCisrCisgLyogUmV0dXJuIGZhbHNlIGlmIHR3byBzdHJpbmdzIE9MRCBhbmQgTkVXIG1hdGNoLCB0cnVlIGlmIG5vdC4KKyAgICBPTEQgYW5kIE5FVyBwb2ludCBub3QgdG8gdGhlIGJlZ2lubmluZ3Mgb2YgdGhlIGxpbmVzCisgICAgYnV0IHJhdGhlciB0byB0aGUgYmVnaW5uaW5ncyBvZiB0aGUgZmllbGRzIHRvIGNvbXBhcmUuCitAQCAtMjI3LDYgKzMzMCw4IEBACisgc3RhdGljIGJvb2wKKyBkaWZmZXJlbnQgKGNoYXIgKm9sZCwgY2hhciAqbmV3LCBzaXplX3Qgb2xkbGVuLCBzaXplX3QgbmV3bGVuKQorIHsKKysgIGNoYXIgKmNvcHlfb2xkLCAqY29weV9uZXc7CisrCisgICBpZiAoY2hlY2tfY2hhcnMgPCBvbGRsZW4pCisgICAgIG9sZGxlbiA9IGNoZWNrX2NoYXJzOworICAgaWYgKGNoZWNrX2NoYXJzIDwgbmV3bGVuKQorQEAgLTIzNCwxNCArMzM5LDkyIEBACisgCisgICBpZiAoaWdub3JlX2Nhc2UpCisgICAgIHsKKy0gICAgICAvKiBGSVhNRTogVGhpcyBzaG91bGQgaW52b2tlIHN0cmNvbGwgc29tZWhvdy4gICovCistICAgICAgcmV0dXJuIG9sZGxlbiAhPSBuZXdsZW4gfHwgbWVtY2FzZWNtcCAob2xkLCBuZXcsIG9sZGxlbik7CisrICAgICAgc2l6ZV90IGk7CisrCisrICAgICAgY29weV9vbGQgPSBhbGxvY2EgKG9sZGxlbiArIDEpOworKyAgICAgIGNvcHlfbmV3ID0gYWxsb2NhIChvbGRsZW4gKyAxKTsKKysKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgb2xkbGVuOyBpKyspCisrCXsKKysJICBjb3B5X29sZFtpXSA9IHRvdXBwZXIgKG9sZFtpXSk7CisrCSAgY29weV9uZXdbaV0gPSB0b3VwcGVyIChuZXdbaV0pOworKwl9CisgICAgIH0KKy0gIGVsc2UgaWYgKGhhcmRfTENfQ09MTEFURSkKKy0gICAgcmV0dXJuIHhtZW1jb2xsIChvbGQsIG9sZGxlbiwgbmV3LCBuZXdsZW4pICE9IDA7CisgICBlbHNlCistICAgIHJldHVybiBvbGRsZW4gIT0gbmV3bGVuIHx8IG1lbWNtcCAob2xkLCBuZXcsIG9sZGxlbik7CisrICAgIHsKKysgICAgICBjb3B5X29sZCA9IChjaGFyICopb2xkOworKyAgICAgIGNvcHlfbmV3ID0gKGNoYXIgKiluZXc7CisrICAgIH0KKysKKysgIHJldHVybiB4bWVtY29sbCAoY29weV9vbGQsIG9sZGxlbiwgY29weV9uZXcsIG5ld2xlbik7CisrfQorKworKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgaW50CisrZGlmZmVyZW50X211bHRpIChjb25zdCBjaGFyICpvbGQsIGNvbnN0IGNoYXIgKm5ldywgc2l6ZV90IG9sZGxlbiwgc2l6ZV90IG5ld2xlbiwgbWJzdGF0ZV90IG9sZHN0YXRlLCBtYnN0YXRlX3QgbmV3c3RhdGUpCisreworKyAgc2l6ZV90IGksIGosIGNoYXJzOworKyAgY29uc3QgY2hhciAqc3RyWzJdOworKyAgY2hhciAqY29weVsyXTsKKysgIHNpemVfdCBsZW5bMl07CisrICBtYnN0YXRlX3Qgc3RhdGVbMl07CisrICBzaXplX3QgbWJsZW5ndGg7CisrICB3Y2hhcl90IHdjLCB1d2M7CisrICBtYnN0YXRlX3Qgc3RhdGVfYmFrOworKworKyAgc3RyWzBdID0gb2xkOworKyAgc3RyWzFdID0gbmV3OworKyAgbGVuWzBdID0gb2xkbGVuOworKyAgbGVuWzFdID0gbmV3bGVuOworKyAgc3RhdGVbMF0gPSBvbGRzdGF0ZTsKKysgIHN0YXRlWzFdID0gbmV3c3RhdGU7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorKyAgICB7CisrICAgICAgY29weVtpXSA9IGFsbG9jYSAobGVuW2ldICsgMSk7CisrCisrICAgICAgZm9yIChqID0gMCwgY2hhcnMgPSAwOyBqIDwgbGVuW2ldICYmIGNoYXJzIDwgY2hlY2tfY2hhcnM7IGNoYXJzKyspCisrCXsKKysJICBzdGF0ZV9iYWsgPSBzdGF0ZVtpXTsKKysJICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3Yywgc3RyW2ldICsgaiwgbGVuW2ldIC0gaiwgJihzdGF0ZVtpXSkpOworKworKwkgIHN3aXRjaCAobWJsZW5ndGgpCisrCSAgICB7CisrCSAgICBjYXNlIChzaXplX3QpLTE6CisrCSAgICBjYXNlIChzaXplX3QpLTI6CisrCSAgICAgIHN0YXRlW2ldID0gc3RhdGVfYmFrOworKwkgICAgICAvKiBGYWxsIHRocm91Z2ggKi8KKysJICAgIGNhc2UgMDoKKysJICAgICAgbWJsZW5ndGggPSAxOworKwkgICAgICBicmVhazsKKysKKysJICAgIGRlZmF1bHQ6CisrCSAgICAgIGlmIChpZ25vcmVfY2FzZSkKKysJCXsKKysJCSAgdXdjID0gdG93dXBwZXIgKHdjKTsKKysKKysJCSAgaWYgKHV3YyAhPSB3YykKKysJCSAgICB7CisrCQkgICAgICBtYnN0YXRlX3Qgc3RhdGVfd2M7CisrCisrCQkgICAgICBtZW1zZXQgKCZzdGF0ZV93YywgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICAgICAgd2NydG9tYiAoY29weVtpXSArIGosIHV3YywgJnN0YXRlX3djKTsKKysJCSAgICB9CisrCQkgIGVsc2UKKysJCSAgICBtZW1jcHkgKGNvcHlbaV0gKyBqLCBzdHJbaV0gKyBqLCBtYmxlbmd0aCk7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCW1lbWNweSAoY29weVtpXSArIGosIHN0cltpXSArIGosIG1ibGVuZ3RoKTsKKysJICAgIH0KKysJICBqICs9IG1ibGVuZ3RoOworKwl9CisrICAgICAgY29weVtpXVtqXSA9ICdcMCc7CisrICAgICAgbGVuW2ldID0gajsKKysgICAgfQorKworKyAgcmV0dXJuIHhtZW1jb2xsIChjb3B5WzBdLCBsZW5bMF0sIGNvcHlbMV0sIGxlblsxXSk7CisgfQorKyNlbmRpZgorIAorIC8qIE91dHB1dCB0aGUgbGluZSBpbiBsaW5lYnVmZmVyIExJTkUgdG8gc3RhbmRhcmQgb3V0cHV0CisgICAgcHJvdmlkZWQgdGhhdCB0aGUgc3dpdGNoZXMgc2F5IGl0IHNob3VsZCBiZSBvdXRwdXQuCitAQCAtMjk1LDE1ICs0NzgsNDMgQEAKKyAgICAgeworICAgICAgIGNoYXIgKnByZXZmaWVsZCBJRl9MSU5UICg9IE5VTEwpOworICAgICAgIHNpemVfdCBwcmV2bGVuIElGX0xJTlQgKD0gMCk7CisrI2lmIEhBVkVfTUJSVE9XQworKyAgICAgIG1ic3RhdGVfdCBwcmV2c3RhdGU7CisrCisrICAgICAgbWVtc2V0ICgmcHJldnN0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKyNlbmRpZgorIAorICAgICAgIHdoaWxlICghZmVvZiAoc3RkaW4pKQorIAl7CisgCSAgY2hhciAqdGhpc2ZpZWxkOworIAkgIHNpemVfdCB0aGlzbGVuOworKyNpZiBIQVZFX01CUlRPV0MKKysJICBtYnN0YXRlX3QgdGhpc3N0YXRlOworKyNlbmRpZgorKworIAkgIGlmIChyZWFkbGluZWJ1ZmZlciAodGhpc2xpbmUsIHN0ZGluKSA9PSAwKQorIAkgICAgYnJlYWs7CisgCSAgdGhpc2ZpZWxkID0gZmluZF9maWVsZCAodGhpc2xpbmUpOworIAkgIHRoaXNsZW4gPSB0aGlzbGluZS0+bGVuZ3RoIC0gMSAtICh0aGlzZmllbGQgLSB0aGlzbGluZS0+YnVmZmVyKTsKKysjaWYgSEFWRV9NQlJUT1dDCisrCSAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICB0aGlzc3RhdGUgPSB0aGlzbGluZS0+c3RhdGU7CisrCisrICAgICAgICAgICAgaWYgKHByZXZsaW5lLT5sZW5ndGggPT0gMCB8fCBkaWZmZXJlbnRfbXVsdGkKKysgICAgICAgICAgICAgICh0aGlzZmllbGQsIHByZXZmaWVsZCwgdGhpc2xlbiwgcHJldmxlbiwgdGhpc3N0YXRlLCBwcmV2c3RhdGUpKQorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBmd3JpdGUgKHRoaXNsaW5lLT5idWZmZXIsIHNpemVvZiAoY2hhciksCisrICAgICAgICAgICAgICAgICAgICAgICAgdGhpc2xpbmUtPmxlbmd0aCwgc3Rkb3V0KTsKKysKKysgICAgICAgICAgICAgICAgU1dBUF9MSU5FUyAocHJldmxpbmUsIHRoaXNsaW5lKTsKKysgICAgICAgICAgICAgICAgcHJldmZpZWxkID0gdGhpc2ZpZWxkOworKyAgICAgICAgICAgICAgICBwcmV2bGVuID0gdGhpc2xlbjsKKysgICAgICAgICAgICAgICAgcHJldnN0YXRlID0gdGhpc3N0YXRlOworKyAgICAgICAgICAgICAgfQorKyAgICAgICAgICB9CisrCWVsc2UKKysjZW5kaWYKKyAJICBpZiAocHJldmxpbmUtPmxlbmd0aCA9PSAwCisgCSAgICAgIHx8IGRpZmZlcmVudCAodGhpc2ZpZWxkLCBwcmV2ZmllbGQsIHRoaXNsZW4sIHByZXZsZW4pKQorIAkgICAgeworQEAgLTMyMiwxNyArNTMzLDI2IEBACisgICAgICAgc2l6ZV90IHByZXZsZW47CisgICAgICAgdWludG1heF90IG1hdGNoX2NvdW50ID0gMDsKKyAgICAgICBib29sIGZpcnN0X2RlbGltaXRlciA9IHRydWU7CisrI2lmIEhBVkVfTUJSVE9XQworKyAgICAgIG1ic3RhdGVfdCBwcmV2c3RhdGU7CisrI2VuZGlmCisgCisgICAgICAgaWYgKHJlYWRsaW5lYnVmZmVyIChwcmV2bGluZSwgc3RkaW4pID09IDApCisgCWdvdG8gY2xvc2VmaWxlczsKKyAgICAgICBwcmV2ZmllbGQgPSBmaW5kX2ZpZWxkIChwcmV2bGluZSk7CisgICAgICAgcHJldmxlbiA9IHByZXZsaW5lLT5sZW5ndGggLSAxIC0gKHByZXZmaWVsZCAtIHByZXZsaW5lLT5idWZmZXIpOworKyNpZiBIQVZFX01CUlRPV0MKKysgICAgICBwcmV2c3RhdGUgPSBwcmV2bGluZS0+c3RhdGU7CisrI2VuZGlmCisgCisgICAgICAgd2hpbGUgKCFmZW9mIChzdGRpbikpCisgCXsKKyAJICBib29sIG1hdGNoOworIAkgIGNoYXIgKnRoaXNmaWVsZDsKKyAJICBzaXplX3QgdGhpc2xlbjsKKysjaWYgSEFWRV9NQlJUT1dDCisrCSAgbWJzdGF0ZV90IHRoaXNzdGF0ZTsKKysjZW5kaWYKKyAJICBpZiAocmVhZGxpbmVidWZmZXIgKHRoaXNsaW5lLCBzdGRpbikgPT0gMCkKKyAJICAgIHsKKyAJICAgICAgaWYgKGZlcnJvciAoc3RkaW4pKQorQEAgLTM0MSw2ICs1NjEsMTUgQEAKKyAJICAgIH0KKyAJICB0aGlzZmllbGQgPSBmaW5kX2ZpZWxkICh0aGlzbGluZSk7CisgCSAgdGhpc2xlbiA9IHRoaXNsaW5lLT5sZW5ndGggLSAxIC0gKHRoaXNmaWVsZCAtIHRoaXNsaW5lLT5idWZmZXIpOworKyNpZiBIQVZFX01CUlRPV0MKKysJICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrCSAgICB7CisrICAgICAgICAgICAgICB0aGlzc3RhdGUgPSB0aGlzbGluZS0+c3RhdGU7CisrICAgICAgICAgICAgICBtYXRjaCA9ICFkaWZmZXJlbnRfbXVsdGkgKHRoaXNmaWVsZCwgcHJldmZpZWxkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc2xlbiwgcHJldmxlbiwgdGhpc3N0YXRlLCBwcmV2c3RhdGUpOworKyAgICAgICAgICAgIH0KKysJICBlbHNlCisrI2VuZGlmCisgCSAgbWF0Y2ggPSAhZGlmZmVyZW50ICh0aGlzZmllbGQsIHByZXZmaWVsZCwgdGhpc2xlbiwgcHJldmxlbik7CisgCSAgbWF0Y2hfY291bnQgKz0gbWF0Y2g7CisgCitAQCAtMzczLDYgKzYwMiw5IEBACisgCSAgICAgIFNXQVBfTElORVMgKHByZXZsaW5lLCB0aGlzbGluZSk7CisgCSAgICAgIHByZXZmaWVsZCA9IHRoaXNmaWVsZDsKKyAJICAgICAgcHJldmxlbiA9IHRoaXNsZW47CisrI2lmIEhBVkVfTUJSVE9XQworKwkgICAgICBwcmV2c3RhdGUgPSB0aGlzc3RhdGU7CisrI2VuZGlmCisgCSAgICAgIGlmICghbWF0Y2gpCisgCQltYXRjaF9jb3VudCA9IDA7CisgCSAgICB9CitAQCAtNDE3LDYgKzY0OSwxOSBAQAorIAorICAgYXRleGl0IChjbG9zZV9zdGRvdXQpOworIAorKyNpZiBIQVZFX01CUlRPV0MKKysgIGlmIChNQl9DVVJfTUFYID4gMSkKKysgICAgeworKyAgICAgIGZpbmRfZmllbGQgPSBmaW5kX2ZpZWxkX211bHRpOworKyAgICB9CisrICBlbHNlCisrI2VuZGlmCisrICAgIHsKKysgICAgICBmaW5kX2ZpZWxkID0gZmluZF9maWVsZF91bmk7CisrICAgIH0KKysKKysKKysKKyAgIHNraXBfY2hhcnMgPSAwOworICAgc2tpcF9maWVsZHMgPSAwOworICAgY2hlY2tfY2hhcnMgPSBTSVpFX01BWDsKKy0tLSBjb3JldXRpbHMtNi44Ky9zcmMvZm9sZC5jLmkxOG4JMjAwNy0wMi0yMyAxMjowMTo0Ny4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky9zcmMvZm9sZC5jCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMjMsMTEgKzIzLDMzIEBACisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAKKysvKiBHZXQgbWJzdGF0ZV90LCBtYnJ0b3djKCksIHdjd2lkdGgoKS4gICovCisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKysvKiBHZXQgaXN3cHJpbnQoKSwgaXN3YmxhbmsoKSwgd2N3aWR0aCgpLiAgKi8KKysjaWYgSEFWRV9XQ1RZUEVfSAorKyMgaW5jbHVkZSA8d2N0eXBlLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlICJlcnJvci5oIgorICNpbmNsdWRlICJxdW90ZS5oIgorICNpbmNsdWRlICJ4c3RydG9sLmgiCisgCisrLyogTUJfTEVOX01BWCBpcyBpbmNvcnJlY3RseSBkZWZpbmVkIHRvIGJlIDEgaW4gYXQgbGVhc3Qgb25lIEdDQworKyAgICAgIGluc3RhbGxhdGlvbjsgd29yayBhcm91bmQgdGhpcyBjb25maWd1cmF0aW9uIGVycm9yLiAgKi8KKysjaWYgIWRlZmluZWQgTUJfTEVOX01BWCB8fCBNQl9MRU5fTUFYIDwgMgorKyMgdW5kZWYgTUJfTEVOX01BWAorKyMgZGVmaW5lIE1CX0xFTl9NQVggMTYKKysjZW5kaWYKKysKKysvKiBTb21lIHN5c3RlbXMsIGxpa2UgQmVPUywgaGF2ZSBtdWx0aWJ5dGUgZW5jb2RpbmdzIGJ1dCBsYWNrIG1ic3RhdGVfdC4gICovCisrI2lmIEhBVkVfTUJSVE9XQyAmJiBkZWZpbmVkIG1ic3RhdGVfdAorKyMgZGVmaW5lIG1icnRvd2MocHdjLCBzLCBuLCBwcykgKG1icnRvd2MpIChwd2MsIHMsIG4sIDApCisrI2VuZGlmCisrCisgI2RlZmluZSBUQUJfV0lEVEggOAorIAorIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworQEAgLTM1LDIzICs1Nyw0NCBAQAorIAorICNkZWZpbmUgQVVUSE9SUyAiRGF2aWQgTWFjS2VuemllIgorIAorKyNkZWZpbmUgRkFUQUxfRVJST1IoTWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGVycm9yICgwLCAwLCAoTWVzc2FnZSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICB1c2FnZSAoMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgd2hpbGUgKDApCisrCisrZW51bSBvcGVyYXRpbmdfbW9kZQorK3sKKysgIC8qIEZvbGQgdGV4dHMgYnkgY29sdW1ucyB0aGF0IGFyZSBhdCB0aGUgZ2l2ZW4gcG9zaXRpb25zLiAqLworKyAgY29sdW1uX21vZGUsCisrCisrICAvKiBGb2xkIHRleHRzIGJ5IGJ5dGVzIHRoYXQgYXJlIGF0IHRoZSBnaXZlbiBwb3NpdGlvbnMuICovCisrICBieXRlX21vZGUsCisrCisrICAvKiBGb2xkIHRleHRzIGJ5IGNoYXJhY3RlcnMgdGhhdCBhcmUgYXQgdGhlIGdpdmVuIHBvc2l0aW9ucy4gKi8KKysgIGNoYXJhY3Rlcl9tb2RlLAorK307CisrCisgLyogVGhlIG5hbWUgdGhpcyBwcm9ncmFtIHdhcyBydW4gd2l0aC4gKi8KKyBjaGFyICpwcm9ncmFtX25hbWU7CisgCisrLyogVGhlIGFyZ3VtZW50IHNob3dzIGN1cnJlbnQgbW9kZS4gKERlZmF1bHQ6IGNvbHVtbl9tb2RlKSAqLworK3N0YXRpYyBlbnVtIG9wZXJhdGluZ19tb2RlIG9wZXJhdGluZ19tb2RlOworKworIC8qIElmIG5vbnplcm8sIHRyeSB0byBicmVhayBvbiB3aGl0ZXNwYWNlLiAqLworIHN0YXRpYyBib29sIGJyZWFrX3NwYWNlczsKKyAKKy0vKiBJZiBub256ZXJvLCBjb3VudCBieXRlcywgbm90IGNvbHVtbiBwb3NpdGlvbnMuICovCistc3RhdGljIGJvb2wgY291bnRfYnl0ZXM7CistCisgLyogSWYgbm9uemVybywgYXQgbGVhc3Qgb25lIG9mIHRoZSBmaWxlcyB3ZSByZWFkIHdhcyBzdGFuZGFyZCBpbnB1dC4gKi8KKyBzdGF0aWMgYm9vbCBoYXZlX3JlYWRfc3RkaW47CisgCistc3RhdGljIGNoYXIgY29uc3Qgc2hvcnRvcHRzW10gPSAiYnN3OjA6OjE6OjI6OjM6OjQ6OjU6OjY6Ojc6Ojg6Ojk6OiI7Cisrc3RhdGljIGNoYXIgY29uc3Qgc2hvcnRvcHRzW10gPSAiYmNzdzowOjoxOjoyOjozOjo0Ojo1Ojo2Ojo3Ojo4Ojo5OjoiOworIAorIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IGxvbmdvcHRzW10gPQorIHsKKyAgIHsiYnl0ZXMiLCBub19hcmd1bWVudCwgTlVMTCwgJ2InfSwKKysgIHsiY2hhcmFjdGVycyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnYyd9LAorICAgeyJzcGFjZXMiLCBub19hcmd1bWVudCwgTlVMTCwgJ3MnfSwKKyAgIHsid2lkdGgiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3cnfSwKKyAgIHtHRVRPUFRfSEVMUF9PUFRJT05fREVDTH0sCitAQCAtODEsNiArMTI0LDcgQEAKKyAiKSwgc3Rkb3V0KTsKKyAgICAgICBmcHV0cyAoXygiXAorICAgLWIsIC0tYnl0ZXMgICAgICAgICBjb3VudCBieXRlcyByYXRoZXIgdGhhbiBjb2x1bW5zXG5cCisrICAtYywgLS1jaGFyYWN0ZXJzICAgIGNvdW50IGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gY29sdW1uc1xuXAorICAgLXMsIC0tc3BhY2VzICAgICAgICBicmVhayBhdCBzcGFjZXNcblwKKyAgIC13LCAtLXdpZHRoPVdJRFRIICAgdXNlIFdJRFRIIGNvbHVtbnMgaW5zdGVhZCBvZiA4MFxuXAorICIpLCBzdGRvdXQpOworQEAgLTk4LDcgKzE0Miw3IEBACisgc3RhdGljIHNpemVfdAorIGFkanVzdF9jb2x1bW4gKHNpemVfdCBjb2x1bW4sIGNoYXIgYykKKyB7CistICBpZiAoIWNvdW50X2J5dGVzKQorKyAgaWYgKG9wZXJhdGluZ19tb2RlICE9IGJ5dGVfbW9kZSkKKyAgICAgeworICAgICAgIGlmIChjID09ICdcYicpCisgCXsKK0BAIC0xMjEsMzAgKzE2NSwxNCBAQAorICAgIHRvIHN0ZG91dCwgd2l0aCBtYXhpbXVtIGxpbmUgbGVuZ3RoIFdJRFRILgorICAgIFJldHVybiB0cnVlIGlmIHN1Y2Nlc3NmdWwuICAqLworIAorLXN0YXRpYyBib29sCistZm9sZF9maWxlIChjaGFyIGNvbnN0ICpmaWxlbmFtZSwgc2l6ZV90IHdpZHRoKQorK3N0YXRpYyB2b2lkCisrZm9sZF90ZXh0IChGSUxFICppc3RyZWFtLCBzaXplX3Qgd2lkdGgsIGludCAqc2F2ZWRfZXJybm8pCisgeworLSAgRklMRSAqaXN0cmVhbTsKKyAgIGludCBjOworICAgc2l6ZV90IGNvbHVtbiA9IDA7CQkvKiBTY3JlZW4gY29sdW1uIHdoZXJlIG5leHQgY2hhciB3aWxsIGdvLiAqLworICAgc2l6ZV90IG9mZnNldF9vdXQgPSAwOwkvKiBJbmRleCBpbiBgbGluZV9vdXQnIGZvciBuZXh0IGNoYXIuICovCisgICBzdGF0aWMgY2hhciAqbGluZV9vdXQgPSBOVUxMOworICAgc3RhdGljIHNpemVfdCBhbGxvY2F0ZWRfb3V0ID0gMDsKKy0gIGludCBzYXZlZF9lcnJubzsKKy0KKy0gIGlmIChTVFJFUSAoZmlsZW5hbWUsICItIikpCistICAgIHsKKy0gICAgICBpc3RyZWFtID0gc3RkaW47CistICAgICAgaGF2ZV9yZWFkX3N0ZGluID0gdHJ1ZTsKKy0gICAgfQorLSAgZWxzZQorLSAgICBpc3RyZWFtID0gZm9wZW4gKGZpbGVuYW1lLCAiciIpOworLQorLSAgaWYgKGlzdHJlYW0gPT0gTlVMTCkKKy0gICAgeworLSAgICAgIGVycm9yICgwLCBlcnJubywgIiVzIiwgZmlsZW5hbWUpOworLSAgICAgIHJldHVybiBmYWxzZTsKKy0gICAgfQorIAorICAgd2hpbGUgKChjID0gZ2V0YyAoaXN0cmVhbSkpICE9IEVPRikKKyAgICAgeworQEAgLTE3Miw2ICsyMDAsMTUgQEAKKyAJICAgICAgYm9vbCBmb3VuZF9ibGFuayA9IGZhbHNlOworIAkgICAgICBzaXplX3QgbG9naWNhbF9lbmQgPSBvZmZzZXRfb3V0OworIAorKwkgICAgICAvKiBJZiBMSU5FX09VVCBoYXMgbm8gd2lkZSBjaGFyYWN0ZXIsCisrCQkgcHV0IGEgbmV3IHdpZGUgY2hhcmFjdGVyIGluIExJTkVfT1VUCisrCQkgaWYgY29sdW1uIGlzIGJpZ2dlciB0aGFuIHdpZHRoLiAqLworKwkgICAgICBpZiAob2Zmc2V0X291dCA9PSAwKQorKwkJeworKwkJICBsaW5lX291dFtvZmZzZXRfb3V0KytdID0gYzsKKysJCSAgY29udGludWU7CisrCQl9CisrCisgCSAgICAgIC8qIExvb2sgZm9yIHRoZSBsYXN0IGJsYW5rLiAqLworIAkgICAgICB3aGlsZSAobG9naWNhbF9lbmQpCisgCQl7CitAQCAtMjE4LDExICsyNTUsMjI1IEBACisgICAgICAgbGluZV9vdXRbb2Zmc2V0X291dCsrXSA9IGM7CisgICAgIH0KKyAKKy0gIHNhdmVkX2Vycm5vID0gZXJybm87CisrICAqc2F2ZWRfZXJybm8gPSBlcnJubzsKKysKKysgIGlmIChvZmZzZXRfb3V0KQorKyAgICBmd3JpdGUgKGxpbmVfb3V0LCBzaXplb2YgKGNoYXIpLCAoc2l6ZV90KSBvZmZzZXRfb3V0LCBzdGRvdXQpOworKworKyAgZnJlZShsaW5lX291dCk7CisrfQorKworKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgdm9pZAorK2ZvbGRfbXVsdGlieXRlX3RleHQgKEZJTEUgKmlzdHJlYW0sIHNpemVfdCB3aWR0aCwgaW50ICpzYXZlZF9lcnJubykKKyt7CisrICBjaGFyIGJ1ZltNQl9MRU5fTUFYICsgQlVGU0laXTsgIC8qIEZvciBzcG9vbGluZyBhIHJlYWQgYnl0ZSBzZXF1ZW5jZS4gKi8KKysgIHNpemVfdCBidWZsZW4gPSAwOwkvKiBUaGUgbGVuZ3RoIG9mIHRoZSBieXRlIHNlcXVlbmNlIGluIGJ1Zi4gKi8KKysgIGNoYXIgKmJ1ZnBvczsgICAgICAgICAvKiBOZXh0IHJlYWQgcG9zaXRpb24gb2YgQlVGLiAqLworKyAgd2ludF90IHdjOwkJLyogQSBnb3R0ZW4gd2lkZSBjaGFyYWN0ZXIuICovCisrICBzaXplX3QgbWJsZW5ndGg7CS8qIFRoZSBieXRlIHNpemUgb2YgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyIHdoaWNoIHNob3dzCisrCQkJICAgYXMgc2FtZSBjaGFyYWN0ZXIgYXMgV0MuICovCisrICBtYnN0YXRlX3Qgc3RhdGUsIHN0YXRlX2JhazsJLyogU3RhdGUgb2YgdGhlIHN0cmVhbS4gKi8KKysgIGludCBjb252ZmFpbDsJCS8qIDEsIHdoZW4gY29udmVyc2lvbiBpcyBmYWlsZWQuIE90aGVyd2lzZSAwLiAqLworKworKyAgY2hhciAqbGluZV9vdXQgPSBOVUxMOworKyAgc2l6ZV90IG9mZnNldF9vdXQgPSAwOwkvKiBJbmRleCBpbiBgbGluZV9vdXQnIGZvciBuZXh0IGNoYXIuICovCisrICBzaXplX3QgYWxsb2NhdGVkX291dCA9IDA7CisrCisrICBpbnQgaW5jcmVtZW50OworKyAgc2l6ZV90IGNvbHVtbiA9IDA7CisrCisrICBzaXplX3QgbGFzdF9ibGFua19wb3M7CisrICBzaXplX3QgbGFzdF9ibGFua19jb2x1bW47CisrICBpbnQgaXNfYmxhbmtfc2VlbjsKKysgIGludCBsYXN0X2JsYW5rX2luY3JlbWVudDsKKysgIGludCBpc19ic19mb2xsb3dpbmdfbGFzdF9ibGFuazsKKysgIHNpemVfdCBic19mb2xsb3dpbmdfbGFzdF9ibGFua19udW07CisrICBpbnQgaXNfY3JfYWZ0ZXJfbGFzdF9ibGFuazsKKysKKysjZGVmaW5lIENMRUFSX0ZMQUdTCQkJCVwKKysgICBkbwkJCQkJCVwKKysgICAgIHsJCQkJCQlcCisrCWxhc3RfYmxhbmtfcG9zID0gMDsJCQlcCisrCWxhc3RfYmxhbmtfY29sdW1uID0gMDsJCQlcCisrCWlzX2JsYW5rX3NlZW4gPSAwOwkJCVwKKysJaXNfYnNfZm9sbG93aW5nX2xhc3RfYmxhbmsgPSAwOwkJXAorKwlic19mb2xsb3dpbmdfbGFzdF9ibGFua19udW0gPSAwOwlcCisrCWlzX2NyX2FmdGVyX2xhc3RfYmxhbmsgPSAwOwkJXAorKyAgICAgfQkJCQkJCVwKKysgICB3aGlsZSAoMCkKKysKKysjZGVmaW5lIFNUQVJUX05FV19MSU5FCQkJXAorKyAgIGRvCQkJCQlcCisrICAgICB7CQkJCQlcCisrICAgICAgcHV0Y2hhciAoJ1xuJyk7CQkJXAorKyAgICAgIGNvbHVtbiA9IDA7CQkJXAorKyAgICAgIG9mZnNldF9vdXQgPSAwOwkJCVwKKysgICAgICBDTEVBUl9GTEFHUzsJCQlcCisrICAgIH0JCQkJCVwKKysgICB3aGlsZSAoMCkKKysKKysgIENMRUFSX0ZMQUdTOworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysKKysgIGZvciAoOzsgYnVmcG9zICs9IG1ibGVuZ3RoLCBidWZsZW4gLT0gbWJsZW5ndGgpCisrICAgIHsKKysgICAgICBpZiAoYnVmbGVuIDwgTUJfTEVOX01BWCAmJiAhZmVvZiAoaXN0cmVhbSkgJiYgIWZlcnJvciAoaXN0cmVhbSkpCisrCXsKKysJICBtZW1tb3ZlIChidWYsIGJ1ZnBvcywgYnVmbGVuKTsKKysJICBidWZsZW4gKz0gZnJlYWQgKGJ1ZiArIGJ1Zmxlbiwgc2l6ZW9mKGNoYXIpLCBCVUZTSVosIGlzdHJlYW0pOworKwkgIGJ1ZnBvcyA9IGJ1ZjsKKysJfQorKworKyAgICAgIGlmIChidWZsZW4gPCAxKQorKwlicmVhazsKKysKKysgICAgICAvKiBHZXQgYSB3aWRlIGNoYXJhY3Rlci4gKi8KKysgICAgICBjb252ZmFpbCA9IDA7CisrICAgICAgc3RhdGVfYmFrID0gc3RhdGU7CisrICAgICAgbWJsZW5ndGggPSBtYnJ0b3djICgod2NoYXJfdCAqKSZ3YywgYnVmcG9zLCBidWZsZW4sICZzdGF0ZSk7CisrCisrICAgICAgc3dpdGNoIChtYmxlbmd0aCkKKysJeworKwljYXNlIChzaXplX3QpLTE6CisrCWNhc2UgKHNpemVfdCktMjoKKysJICBjb252ZmFpbCsrOworKwkgIHN0YXRlID0gc3RhdGVfYmFrOworKwkgIC8qIEZhbGwgdGhyb3VnaC4gKi8KKysKKysJY2FzZSAwOgorKwkgIG1ibGVuZ3RoID0gMTsKKysJICBicmVhazsKKysJfQorKworK3Jlc2NhbjoKKysgICAgICBpZiAob3BlcmF0aW5nX21vZGUgPT0gYnl0ZV9tb2RlKQkJCS8qIGJ5dGUgbW9kZSAqLworKwlpbmNyZW1lbnQgPSBtYmxlbmd0aDsKKysgICAgICBlbHNlIGlmIChvcGVyYXRpbmdfbW9kZSA9PSBjaGFyYWN0ZXJfbW9kZSkJLyogY2hhcmFjdGVyIG1vZGUgKi8KKysJaW5jcmVtZW50ID0gMTsKKysgICAgICBlbHNlCQkJCQkJLyogY29sdW1uIG1vZGUgKi8KKysJeworKwkgIGlmIChjb252ZmFpbCkKKysJICAgIGluY3JlbWVudCA9IDE7CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBzd2l0Y2ggKHdjKQorKwkJeworKwkJY2FzZSBMJ1xuJzoKKysJCSAgZndyaXRlIChsaW5lX291dCwgc2l6ZW9mKGNoYXIpLCBvZmZzZXRfb3V0LCBzdGRvdXQpOworKwkJICBTVEFSVF9ORVdfTElORTsKKysJCSAgY29udGludWU7CisrCQkgIAorKwkJY2FzZSBMJ1xiJzoKKysJCSAgaW5jcmVtZW50ID0gKGNvbHVtbiA+IDApID8gLTEgOiAwOworKwkJICBicmVhazsKKysKKysJCWNhc2UgTCdccic6CisrCQkgIGluY3JlbWVudCA9IC0xICogY29sdW1uOworKwkJICBicmVhazsKKysKKysJCWNhc2UgTCdcdCc6CisrCQkgIGluY3JlbWVudCA9IDggLSBjb2x1bW4gJSA4OworKwkJICBicmVhazsKKysKKysJCWRlZmF1bHQ6CisrCQkgIGluY3JlbWVudCA9IHdjd2lkdGggKHdjKTsKKysJCSAgaW5jcmVtZW50ID0gKGluY3JlbWVudCA8IDApID8gMCA6IGluY3JlbWVudDsKKysJCX0KKysJICAgIH0KKysJfQorKworKyAgICAgIGlmIChjb2x1bW4gKyBpbmNyZW1lbnQgPiB3aWR0aCAmJiBicmVha19zcGFjZXMgJiYgbGFzdF9ibGFua19wb3MpCisrCXsKKysJICBmd3JpdGUgKGxpbmVfb3V0LCBzaXplb2YoY2hhciksIGxhc3RfYmxhbmtfcG9zLCBzdGRvdXQpOworKwkgIHB1dGNoYXIgKCdcbicpOworKworKwkgIG9mZnNldF9vdXQgPSBvZmZzZXRfb3V0IC0gbGFzdF9ibGFua19wb3M7CisrCSAgY29sdW1uID0gY29sdW1uIC0gbGFzdF9ibGFua19jb2x1bW4gKyAoKGlzX2NyX2FmdGVyX2xhc3RfYmxhbmspCisrCSAgICAgID8gbGFzdF9ibGFua19pbmNyZW1lbnQgOiBic19mb2xsb3dpbmdfbGFzdF9ibGFua19udW0pOworKwkgIG1lbW1vdmUgKGxpbmVfb3V0LCBsaW5lX291dCArIGxhc3RfYmxhbmtfcG9zLCBvZmZzZXRfb3V0KTsKKysJICBDTEVBUl9GTEFHUzsKKysJICBnb3RvIHJlc2NhbjsKKysJfQorKworKyAgICAgIGlmIChjb2x1bW4gKyBpbmNyZW1lbnQgPiB3aWR0aCAmJiBjb2x1bW4gIT0gMCkKKysJeworKwkgIGZ3cml0ZSAobGluZV9vdXQsIHNpemVvZihjaGFyKSwgb2Zmc2V0X291dCwgc3Rkb3V0KTsKKysJICBTVEFSVF9ORVdfTElORTsKKysJICBnb3RvIHJlc2NhbjsKKysJfQorKworKyAgICAgIGlmIChhbGxvY2F0ZWRfb3V0IDwgb2Zmc2V0X291dCArIG1ibGVuZ3RoKQorKwl7CisrCSAgYWxsb2NhdGVkX291dCArPSAxMDI0OworKwkgIGxpbmVfb3V0ID0geHJlYWxsb2MgKGxpbmVfb3V0LCBhbGxvY2F0ZWRfb3V0KTsKKysJfQorKworKyAgICAgIG1lbWNweSAobGluZV9vdXQgKyBvZmZzZXRfb3V0LCBidWZwb3MsIG1ibGVuZ3RoKTsKKysgICAgICBvZmZzZXRfb3V0ICs9IG1ibGVuZ3RoOworKyAgICAgIGNvbHVtbiArPSBpbmNyZW1lbnQ7CisrCisrICAgICAgaWYgKGlzX2JsYW5rX3NlZW4gJiYgIWNvbnZmYWlsICYmIHdjID09IEwnXHInKQorKwlpc19jcl9hZnRlcl9sYXN0X2JsYW5rID0gMTsKKysKKysgICAgICBpZiAoaXNfYnNfZm9sbG93aW5nX2xhc3RfYmxhbmsgJiYgIWNvbnZmYWlsICYmIHdjID09IEwnXGInKQorKwkrK2JzX2ZvbGxvd2luZ19sYXN0X2JsYW5rX251bTsKKysgICAgICBlbHNlCisrCWlzX2JzX2ZvbGxvd2luZ19sYXN0X2JsYW5rID0gMDsKKysKKysgICAgICBpZiAoYnJlYWtfc3BhY2VzICYmICFjb252ZmFpbCAmJiBpc3dibGFuayAod2MpKQorKwl7CisrCSAgbGFzdF9ibGFua19wb3MgPSBvZmZzZXRfb3V0OworKwkgIGxhc3RfYmxhbmtfY29sdW1uID0gY29sdW1uOworKwkgIGlzX2JsYW5rX3NlZW4gPSAxOworKwkgIGxhc3RfYmxhbmtfaW5jcmVtZW50ID0gaW5jcmVtZW50OworKwkgIGlzX2JzX2ZvbGxvd2luZ19sYXN0X2JsYW5rID0gMTsKKysJICBic19mb2xsb3dpbmdfbGFzdF9ibGFua19udW0gPSAwOworKwkgIGlzX2NyX2FmdGVyX2xhc3RfYmxhbmsgPSAwOworKwl9CisrICAgIH0KKysKKysgICpzYXZlZF9lcnJubyA9IGVycm5vOworIAorICAgaWYgKG9mZnNldF9vdXQpCisgICAgIGZ3cml0ZSAobGluZV9vdXQsIHNpemVvZiAoY2hhciksIChzaXplX3QpIG9mZnNldF9vdXQsIHN0ZG91dCk7CisgCisrICBmcmVlKGxpbmVfb3V0KTsKKyt9CisrI2VuZGlmCisrCisrLyogRm9sZCBmaWxlIEZJTEVOQU1FLCBvciBzdGFuZGFyZCBpbnB1dCBpZiBGSUxFTkFNRSBpcyAiLSIsCisrICAgdG8gc3Rkb3V0LCB3aXRoIG1heGltdW0gbGluZSBsZW5ndGggV0lEVEguCisrICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgMSBpZiBhbiBlcnJvciBvY2N1cnMuICovCisrCisrc3RhdGljIGJvb2wKKytmb2xkX2ZpbGUgKGNoYXIgKmZpbGVuYW1lLCBzaXplX3Qgd2lkdGgpCisreworKyAgRklMRSAqaXN0cmVhbTsKKysgIGludCBzYXZlZF9lcnJubzsKKysKKysgIGlmIChTVFJFUSAoZmlsZW5hbWUsICItIikpCisrICAgIHsKKysgICAgICBpc3RyZWFtID0gc3RkaW47CisrICAgICAgaGF2ZV9yZWFkX3N0ZGluID0gMTsKKysgICAgfQorKyAgZWxzZQorKyAgICBpc3RyZWFtID0gZm9wZW4gKGZpbGVuYW1lLCAiciIpOworKworKyAgaWYgKGlzdHJlYW0gPT0gTlVMTCkKKysgICAgeworKyAgICAgIGVycm9yICgwLCBlcnJubywgIiVzIiwgZmlsZW5hbWUpOworKyAgICAgIHJldHVybiAxOworKyAgICB9CisrCisrICAvKiBEZWZpbmUgaG93IElTVFJFQU0gaXMgYmVpbmcgZm9sZGVkLiAqLworKyNpZiBIQVZFX01CUlRPV0MKKysgIGlmIChNQl9DVVJfTUFYID4gMSkKKysgICAgZm9sZF9tdWx0aWJ5dGVfdGV4dCAoaXN0cmVhbSwgd2lkdGgsICZzYXZlZF9lcnJubyk7CisrICBlbHNlCisrI2VuZGlmCisrICAgIGZvbGRfdGV4dCAoaXN0cmVhbSwgd2lkdGgsICZzYXZlZF9lcnJubyk7CisrCisgICBpZiAoZmVycm9yIChpc3RyZWFtKSkKKyAgICAgeworICAgICAgIGVycm9yICgwLCBzYXZlZF9lcnJubywgIiVzIiwgZmlsZW5hbWUpOworQEAgLTI1NSw3ICs1MDYsOCBAQAorIAorICAgYXRleGl0IChjbG9zZV9zdGRvdXQpOworIAorLSAgYnJlYWtfc3BhY2VzID0gY291bnRfYnl0ZXMgPSBoYXZlX3JlYWRfc3RkaW4gPSBmYWxzZTsKKysgIG9wZXJhdGluZ19tb2RlID0gY29sdW1uX21vZGU7CisrICBicmVha19zcGFjZXMgPSBoYXZlX3JlYWRfc3RkaW4gPSBmYWxzZTsKKyAKKyAgIHdoaWxlICgob3B0YyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LCBzaG9ydG9wdHMsIGxvbmdvcHRzLCBOVUxMKSkgIT0gLTEpCisgICAgIHsKK0BAIC0yNjQsNyArNTE2LDE1IEBACisgICAgICAgc3dpdGNoIChvcHRjKQorIAl7CisgCWNhc2UgJ2InOgkJLyogQ291bnQgYnl0ZXMgcmF0aGVyIHRoYW4gY29sdW1ucy4gKi8KKy0JICBjb3VudF9ieXRlcyA9IHRydWU7CisrCSAgaWYgKG9wZXJhdGluZ19tb2RlICE9IGNvbHVtbl9tb2RlKQorKwkgICAgRkFUQUxfRVJST1IgKF8oIm9ubHkgb25lIHdheSBvZiBmb2xkaW5nIG1heSBiZSBzcGVjaWZpZWQiKSk7CisrCSAgb3BlcmF0aW5nX21vZGUgPSBieXRlX21vZGU7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgJ2MnOgorKwkgIGlmIChvcGVyYXRpbmdfbW9kZSAhPSBjb2x1bW5fbW9kZSkKKysJICAgIEZBVEFMX0VSUk9SIChfKCJvbmx5IG9uZSB3YXkgb2YgZm9sZGluZyBtYXkgYmUgc3BlY2lmaWVkIikpOworKwkgIG9wZXJhdGluZ19tb2RlID0gY2hhcmFjdGVyX21vZGU7CisgCSAgYnJlYWs7CisgCisgCWNhc2UgJ3MnOgkJLyogQnJlYWsgYXQgd29yZCBib3VuZGFyaWVzLiAqLworLS0tIGNvcmV1dGlscy02LjgrL3NyYy9zb3J0LmMuaTE4bgkyMDA3LTAyLTI0IDExOjIzOjIzLjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy9zb3J0LmMJMjAwNy0wMy0wMSAxNToxMDo1Ny4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMywxMCArMjMsMTkgQEAKKyAKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgCisrI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisgI2luY2x1ZGUgPHNpZ25hbC5oPgorKyNpZiBIQVZFX1dDSEFSX0gKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrI2VuZGlmCisrLyogR2V0IGlzdyogZnVuY3Rpb25zLiAqLworKyNpZiBIQVZFX1dDVFlQRV9ICisrIyBpbmNsdWRlIDx3Y3R5cGUuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImFyZ21hdGNoLmgiCisgI2luY2x1ZGUgImVycm9yLmgiCitAQCAtMTE2LDE0ICsxMjUsMzggQEAKKyAvKiBUaG91c2FuZHMgc2VwYXJhdG9yOyBpZiAtMSwgdGhlbiB0aGVyZSBpc24ndCBvbmUuICAqLworIHN0YXRpYyBpbnQgdGhvdXNhbmRzX3NlcDsKKyAKKytzdGF0aWMgaW50IGZvcmNlX2dlbmVyYWxfbnVtY29tcGFyZSA9IDA7CisrCisgLyogTm9uemVybyBpZiB0aGUgY29ycmVzcG9uZGluZyBsb2NhbGVzIGFyZSBoYXJkLiAgKi8KKyBzdGF0aWMgYm9vbCBoYXJkX0xDX0NPTExBVEU7CistI2lmIEhBVkVfTkxfTEFOR0lORk8KKysjaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisgc3RhdGljIGJvb2wgaGFyZF9MQ19USU1FOworICNlbmRpZgorIAorICNkZWZpbmUgTk9OWkVSTyh4KSAoKHgpICE9IDApCisgCisrLyogZ2V0IGEgbXVsdGlieXRlIGNoYXJhY3RlcidzIGJ5dGUgbGVuZ3RoLiAqLworKyNkZWZpbmUgR0VUX0JZVEVMRU5fT0ZfQ0hBUihMSU0sIFBUUiwgTUJMRU5HVEgsIFNUQVRFKQkJCVwKKysgIGRvCQkJCQkJCQkJXAorKyAgICB7CQkJCQkJCQkJXAorKyAgICAgIHdjaGFyX3Qgd2M7CQkJCQkJCVwKKysgICAgICBtYnN0YXRlX3Qgc3RhdGVfYmFrOwkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgICAgc3RhdGVfYmFrID0gU1RBVEU7CQkJCQkJXAorKyAgICAgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBQVFIsIExJTSAtIFBUUiwgJlNUQVRFKTsJCQlcCisrCQkJCQkJCQkJXAorKyAgICAgIHN3aXRjaCAoTUJMRU5HVEgpCQkJCQkJCVwKKysJewkJCQkJCQkJXAorKwljYXNlIChzaXplX3QpLTE6CQkJCQkJXAorKwljYXNlIChzaXplX3QpLTI6CQkJCQkJXAorKwkgIFNUQVRFID0gc3RhdGVfYmFrOwkJCQkJCVwKKysJCS8qIEZhbGwgdGhyb3VnaC4gKi8JCQkJCVwKKysJY2FzZSAwOgkJCQkJCQkJXAorKwkgIE1CTEVOR1RIID0gMTsJCQkJCQkJXAorKyAgICAgIH0JCQkJCQkJCQlcCisrICAgIH0JCQkJCQkJCQlcCisrICB3aGlsZSAoMCkKKysKKyAvKiBUaGUga2luZCBvZiBibGFua3MgZm9yICctYicgdG8gc2tpcCBpbiB2YXJpb3VzIG9wdGlvbnMuICovCisgZW51bSBibGFua3R5cGUgeyBibF9zdGFydCwgYmxfZW5kLCBibF9ib3RoIH07CisgCitAQCAtMjYxLDEzICsyOTQsMTEgQEAKKyAgICB0aGV5IHdlcmUgcmVhZCBpZiBhbGwga2V5cyBjb21wYXJlIGVxdWFsLiAgKi8KKyBzdGF0aWMgYm9vbCBzdGFibGU7CisgCistLyogSWYgVEFCIGhhcyB0aGlzIHZhbHVlLCBibGFua3Mgc2VwYXJhdGUgZmllbGRzLiAgKi8KKy1lbnVtIHsgVEFCX0RFRkFVTFQgPSBDSEFSX01BWCArIDEgfTsKKy0KKy0vKiBUYWIgY2hhcmFjdGVyIHNlcGFyYXRpbmcgZmllbGRzLiAgSWYgVEFCX0RFRkFVTFQsIHRoZW4gZmllbGRzIGFyZQorKy8qIFRhYiBjaGFyYWN0ZXIgc2VwYXJhdGluZyBmaWVsZHMuICBJZiB0YWJfbGVuZ3RoIGlzIDAsIHRoZW4gZmllbGRzIGFyZQorICAgIHNlcGFyYXRlZCBieSB0aGUgZW1wdHkgc3RyaW5nIGJldHdlZW4gYSBub24tYmxhbmsgY2hhcmFjdGVyIGFuZCBhIGJsYW5rCisgICAgY2hhcmFjdGVyLiAqLworLXN0YXRpYyBpbnQgdGFiID0gVEFCX0RFRkFVTFQ7Cisrc3RhdGljIGNoYXIgdGFiW01CX0xFTl9NQVggKyAxXTsKKytzdGF0aWMgc2l6ZV90IHRhYl9sZW5ndGggPSAwOworIAorIC8qIEZsYWcgdG8gcmVtb3ZlIGNvbnNlY3V0aXZlIGR1cGxpY2F0ZSBsaW5lcyBmcm9tIHRoZSBvdXRwdXQuCisgICAgT25seSB0aGUgbGFzdCBvZiBhIHNlcXVlbmNlIG9mIGVxdWFsIGxpbmVzIHdpbGwgYmUgb3V0cHV0LiAqLworQEAgLTYzOSw2ICs2NzAsNDQgQEAKKyAgICAgdXBkYXRlX3Byb2MgKHBpZCk7CisgfQorIAorKy8qIEZ1bmN0aW9uIHBvaW50ZXJzLiAqLworK3N0YXRpYyB2b2lkCisrKCppbml0dGFibGVzKSAodm9pZCk7Cisrc3RhdGljIGNoYXIgKgorKygqYmVnZmllbGQpIChjb25zdCBzdHJ1Y3QgbGluZSosIGNvbnN0IHN0cnVjdCBrZXlmaWVsZCAqKTsKKytzdGF0aWMgY2hhciAqCisrKCpsaW1maWVsZCkgKGNvbnN0IHN0cnVjdCBsaW5lKiwgY29uc3Qgc3RydWN0IGtleWZpZWxkICopOworK3N0YXRpYyBpbnQKKysoKmdldG1vbnRoKSAoY2hhciBjb25zdCAqLCBzaXplX3QpOworK3N0YXRpYyBpbnQKKysoKmtleWNvbXBhcmUpIChjb25zdCBzdHJ1Y3QgbGluZSAqLCBjb25zdCBzdHJ1Y3QgbGluZSAqKTsKKytzdGF0aWMgaW50CisrKCpudW1jb21wYXJlKSAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworKworKy8qIFRlc3QgZm9yIHdoaXRlIHNwYWNlIG11bHRpYnl0ZSBjaGFyYWN0ZXIuCisrICAgU2V0IExFTkdUSCB0aGUgYnl0ZSBsZW5ndGggb2YgaW52ZXN0aWdhdGVkIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICovCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBpbnQKKytpc21iYmxhbmsgKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwgc2l6ZV90ICpsZW5ndGgpCisreworKyAgc2l6ZV90IG1ibGVuZ3RoOworKyAgd2NoYXJfdCB3YzsKKysgIG1ic3RhdGVfdCBzdGF0ZTsKKysKKysgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3Yywgc3RyLCBsZW4sICZzdGF0ZSk7CisrCisrICBpZiAobWJsZW5ndGggPT0gKHNpemVfdCktMSB8fCBtYmxlbmd0aCA9PSAoc2l6ZV90KS0yKQorKyAgICB7CisrICAgICAgKmxlbmd0aCA9IDE7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgICpsZW5ndGggPSAobWJsZW5ndGggPCAxKSA/IDEgOiBtYmxlbmd0aDsKKysgIHJldHVybiBpc3dibGFuayAod2MpOworK30KKysjZW5kaWYKKysKKyAvKiBDbGVhbiB1cCBhbnkgcmVtYWluaW5nIHRlbXBvcmFyeSBmaWxlcy4gICovCisgCisgc3RhdGljIHZvaWQKK0BAIC05NzgsNyArMTA0Nyw3IEBACisgICBmcmVlIChub2RlKTsKKyB9CisgCistI2lmIEhBVkVfTkxfTEFOR0lORk8KKysjaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisgCisgc3RhdGljIGludAorIHN0cnVjdF9tb250aF9jbXAgKGNvbnN0IHZvaWQgKm0xLCBjb25zdCB2b2lkICptMikKK0BAIC05OTMsNyArMTA2Miw3IEBACisgLyogSW5pdGlhbGl6ZSB0aGUgY2hhcmFjdGVyIGNsYXNzIHRhYmxlcy4gKi8KKyAKKyBzdGF0aWMgdm9pZAorLWluaXR0YWJsZXMgKHZvaWQpCisraW5pdHRhYmxlc191bmkgKHZvaWQpCisgeworICAgc2l6ZV90IGk7CisgCitAQCAtMTAwNSw3ICsxMDc0LDcgQEAKKyAgICAgICBmb2xkX3RvdXBwZXJbaV0gPSB0b3VwcGVyIChpKTsKKyAgICAgfQorIAorLSNpZiBIQVZFX05MX0xBTkdJTkZPCisrI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorICAgLyogSWYgd2UncmUgbm90IGluIHRoZSAiQyIgbG9jYWxlLCByZWFkIGRpZmZlcmVudCBuYW1lcyBmb3IgbW9udGhzLiAgKi8KKyAgIGlmIChoYXJkX0xDX1RJTUUpCisgICAgIHsKK0BAIC0xMDMxLDYgKzExMDAsNjQgQEAKKyAjZW5kaWYKKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisraW5pdHRhYmxlc19tYiAodm9pZCkKKyt7CisrICBpbnQgaSwgaiwgaywgbDsKKysgIGNoYXIgKm5hbWUsICpzOworKyAgc2l6ZV90IHNfbGVuLCBtYmxlbmd0aDsKKysgIGNoYXIgbWJjW01CX0xFTl9NQVhdOworKyAgd2NoYXJfdCB3YywgcHdjOworKyAgbWJzdGF0ZV90IHN0YXRlX21iLCBzdGF0ZV93YzsKKysKKysgIGZvciAoaSA9IDA7IGkgPCBNT05USFNfUEVSX1lFQVI7IGkrKykKKysgICAgeworKyAgICAgIHMgPSAoY2hhciAqKSBubF9sYW5naW5mbyAoQUJNT05fMSArIGkpOworKyAgICAgIHNfbGVuID0gc3RybGVuIChzKTsKKysgICAgICBtb250aHRhYltpXS5uYW1lID0gbmFtZSA9IChjaGFyICopIHhtYWxsb2MgKHNfbGVuICsgMSk7CisrICAgICAgbW9udGh0YWJbaV0udmFsID0gaSArIDE7CisrCisrICAgICAgbWVtc2V0ICgmc3RhdGVfbWIsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrICAgICAgbWVtc2V0ICgmc3RhdGVfd2MsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCisrICAgICAgZm9yIChqID0gMDsgaiA8IHNfbGVuOykKKysJeworKwkgIGlmICghaXNtYmJsYW5rIChzICsgaiwgc19sZW4gLSBqLCAmbWJsZW5ndGgpKQorKwkgICAgYnJlYWs7CisrCSAgaiArPSBtYmxlbmd0aDsKKysJfQorKworKyAgICAgIGZvciAoayA9IDA7IGogPCBzX2xlbjspCisrCXsKKysJICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgKHMgKyBqKSwgKHNfbGVuIC0gaiksICZzdGF0ZV9tYik7CisrCSAgYXNzZXJ0IChtYmxlbmd0aCAhPSAoc2l6ZV90KS0xICYmIG1ibGVuZ3RoICE9IChzaXplX3QpLTIpOworKwkgIGlmIChtYmxlbmd0aCA9PSAwKQorKwkgICAgYnJlYWs7CisrCisrCSAgcHdjID0gdG93dXBwZXIgKHdjKTsKKysJICBpZiAocHdjID09IHdjKQorKwkgICAgeworKwkgICAgICBtZW1jcHkgKG1iYywgcyArIGosIG1ibGVuZ3RoKTsKKysJICAgICAgaiArPSBtYmxlbmd0aDsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGogKz0gbWJsZW5ndGg7CisrCSAgICAgIG1ibGVuZ3RoID0gd2NydG9tYiAobWJjLCBwd2MsICZzdGF0ZV93Yyk7CisrCSAgICAgIGFzc2VydCAobWJsZW5ndGggIT0gKHNpemVfdCkwICYmIG1ibGVuZ3RoICE9IChzaXplX3QpLTEpOworKwkgICAgfQorKworKwkgIGZvciAobCA9IDA7IGwgPCBtYmxlbmd0aDsgbCsrKQorKwkgICAgbmFtZVtrKytdID0gbWJjW2xdOworKwl9CisrICAgICAgbmFtZVtrXSA9ICdcMCc7CisrICAgIH0KKysgIHFzb3J0ICgodm9pZCAqKSBtb250aHRhYiwgTU9OVEhTX1BFUl9ZRUFSLAorKyAgICAgIHNpemVvZiAoc3RydWN0IG1vbnRoKSwgc3RydWN0X21vbnRoX2NtcCk7CisrfQorKyNlbmRpZgorKworIC8qIFNwZWNpZnkgdGhlIGFtb3VudCBvZiBtYWluIG1lbW9yeSB0byB1c2Ugd2hlbiBzb3J0aW5nLiAgKi8KKyBzdGF0aWMgdm9pZAorIHNwZWNpZnlfc29ydF9zaXplIChjaGFyIGNvbnN0ICpzKQorQEAgLTEyNDEsNyArMTM2OCw3IEBACisgICAgYnkgS0VZIGluIExJTkUuICovCisgCisgc3RhdGljIGNoYXIgKgorLWJlZ2ZpZWxkIChjb25zdCBzdHJ1Y3QgbGluZSAqbGluZSwgY29uc3Qgc3RydWN0IGtleWZpZWxkICprZXkpCisrYmVnZmllbGRfdW5pIChjb25zdCBzdHJ1Y3QgbGluZSAqbGluZSwgY29uc3Qgc3RydWN0IGtleWZpZWxkICprZXkpCisgeworICAgY2hhciAqcHRyID0gbGluZS0+dGV4dCwgKmxpbSA9IHB0ciArIGxpbmUtPmxlbmd0aCAtIDE7CisgICBzaXplX3Qgc3dvcmQgPSBrZXktPnN3b3JkOworQEAgLTEyNTEsMTAgKzEzNzgsMTAgQEAKKyAgIC8qIFRoZSBsZWFkaW5nIGZpZWxkIHNlcGFyYXRvciBpdHNlbGYgaXMgaW5jbHVkZWQgaW4gYSBmaWVsZCB3aGVuIC10CisgICAgICBpcyBhYnNlbnQuICAqLworIAorLSAgaWYgKHRhYiAhPSBUQUJfREVGQVVMVCkKKysgIGlmICh0YWJfbGVuZ3RoKQorICAgICB3aGlsZSAocHRyIDwgbGltICYmIHN3b3JkLS0pCisgICAgICAgeworLQl3aGlsZSAocHRyIDwgbGltICYmICpwdHIgIT0gdGFiKQorKwl3aGlsZSAocHRyIDwgbGltICYmICpwdHIgIT0gdGFiWzBdKQorIAkgICsrcHRyOworIAlpZiAocHRyIDwgbGltKQorIAkgICsrcHRyOworQEAgLTEyODIsMTEgKzE0MDksNzAgQEAKKyAgIHJldHVybiBwdHI7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgY2hhciAqCisrYmVnZmllbGRfbWIgKGNvbnN0IHN0cnVjdCBsaW5lICpsaW5lLCBjb25zdCBzdHJ1Y3Qga2V5ZmllbGQgKmtleSkKKyt7CisrICBpbnQgaTsKKysgIGNoYXIgKnB0ciA9IGxpbmUtPnRleHQsICpsaW0gPSBwdHIgKyBsaW5lLT5sZW5ndGggLSAxOworKyAgc2l6ZV90IHN3b3JkID0ga2V5LT5zd29yZDsKKysgIHNpemVfdCBzY2hhciA9IGtleS0+c2NoYXI7CisrICBzaXplX3QgbWJsZW5ndGg7CisrICBtYnN0YXRlX3Qgc3RhdGU7CisrCisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgaWYgKHRhYl9sZW5ndGgpCisrICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgc3dvcmQtLSkKKysgICAgICB7CisrCXdoaWxlIChwdHIgPCBsaW0gJiYgbWVtY21wIChwdHIsIHRhYiwgdGFiX2xlbmd0aCkgIT0gMCkKKysJICB7CisrCSAgICBHRVRfQllURUxFTl9PRl9DSEFSIChsaW0sIHB0ciwgbWJsZW5ndGgsIHN0YXRlKTsKKysJICAgIHB0ciArPSBtYmxlbmd0aDsKKysJICB9CisrCWlmIChwdHIgPCBsaW0pCisrCSAgeworKwkgICAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCSAgICBwdHIgKz0gbWJsZW5ndGg7CisrCSAgfQorKyAgICAgIH0KKysgIGVsc2UKKysgICAgd2hpbGUgKHB0ciA8IGxpbSAmJiBzd29yZC0tKQorKyAgICAgIHsKKysJd2hpbGUgKHB0ciA8IGxpbSAmJiBpc21iYmxhbmsgKHB0ciwgbGltIC0gcHRyLCAmbWJsZW5ndGgpKQorKwkgIHB0ciArPSBtYmxlbmd0aDsKKysJaWYgKHB0ciA8IGxpbSkKKysJICB7CisrCSAgICBHRVRfQllURUxFTl9PRl9DSEFSIChsaW0sIHB0ciwgbWJsZW5ndGgsIHN0YXRlKTsKKysJICAgIHB0ciArPSBtYmxlbmd0aDsKKysJICB9CisrCXdoaWxlIChwdHIgPCBsaW0gJiYgIWlzbWJibGFuayAocHRyLCBsaW0gLSBwdHIsICZtYmxlbmd0aCkpCisrCSAgcHRyICs9IG1ibGVuZ3RoOworKyAgICAgIH0KKysKKysgIGlmIChrZXktPnNraXBzYmxhbmtzKQorKyAgICB3aGlsZSAocHRyIDwgbGltICYmIGlzbWJibGFuayAocHRyLCBsaW0gLSBwdHIsICZtYmxlbmd0aCkpCisrICAgICAgcHRyICs9IG1ibGVuZ3RoOworKworKyAgZm9yIChpID0gMDsgaSA8IHNjaGFyOyBpKyspCisrICAgIHsKKysgICAgICBHRVRfQllURUxFTl9PRl9DSEFSIChsaW0sIHB0ciwgbWJsZW5ndGgsIHN0YXRlKTsKKysKKysgICAgICBpZiAocHRyICsgbWJsZW5ndGggPiBsaW0pCisrCWJyZWFrOworKyAgICAgIGVsc2UKKysJcHRyICs9IG1ibGVuZ3RoOworKyAgICB9CisrCisrICByZXR1cm4gcHRyOworK30KKysjZW5kaWYKKysKKyAvKiBSZXR1cm4gdGhlIGxpbWl0IG9mIChhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlcikgdGhlIGZpZWxkCisgICAgaW4gTElORSBzcGVjaWZpZWQgYnkgS0VZLiAqLworIAorIHN0YXRpYyBjaGFyICoKKy1saW1maWVsZCAoY29uc3Qgc3RydWN0IGxpbmUgKmxpbmUsIGNvbnN0IHN0cnVjdCBrZXlmaWVsZCAqa2V5KQorK2xpbWZpZWxkX3VuaSAoY29uc3Qgc3RydWN0IGxpbmUgKmxpbmUsIGNvbnN0IHN0cnVjdCBrZXlmaWVsZCAqa2V5KQorIHsKKyAgIGNoYXIgKnB0ciA9IGxpbmUtPnRleHQsICpsaW0gPSBwdHIgKyBsaW5lLT5sZW5ndGggLSAxOworICAgc2l6ZV90IGV3b3JkID0ga2V5LT5ld29yZCwgZWNoYXIgPSBrZXktPmVjaGFyOworQEAgLTEyOTksMTAgKzE0ODUsMTAgQEAKKyAgICAgIGBiZWdpbm5pbmcnIGlzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoZSBkZWxpbWl0aW5nIFRBQi4KKyAgICAgIE90aGVyd2lzZSwgbGVhdmUgUFRSIHBvaW50aW5nIGF0IHRoZSBmaXJzdCBgYmxhbmsnIGNoYXJhY3RlciBhZnRlcgorICAgICAgdGhlIHByZWNlZGluZyBmaWVsZC4gICovCistICBpZiAodGFiICE9IFRBQl9ERUZBVUxUKQorKyAgaWYgKHRhYl9sZW5ndGgpCisgICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgZXdvcmQtLSkKKyAgICAgICB7CistCXdoaWxlIChwdHIgPCBsaW0gJiYgKnB0ciAhPSB0YWIpCisrCXdoaWxlIChwdHIgPCBsaW0gJiYgKnB0ciAhPSB0YWJbMF0pCisgCSAgKytwdHI7CisgCWlmIChwdHIgPCBsaW0gJiYgKGV3b3JkIHwgZWNoYXIpKQorIAkgICsrcHRyOworQEAgLTEzNDgsMTAgKzE1MzQsMTAgQEAKKyAgICAgICovCisgCisgICAvKiBNYWtlIExJTSBwb2ludCB0byB0aGUgZW5kIG9mIChvbmUgYnl0ZSBwYXN0KSB0aGUgY3VycmVudCBmaWVsZC4gICovCistICBpZiAodGFiICE9IFRBQl9ERUZBVUxUKQorKyAgaWYgKHRhYl9sZW5ndGgpCisgICAgIHsKKyAgICAgICBjaGFyICpuZXdsaW07CistICAgICAgbmV3bGltID0gbWVtY2hyIChwdHIsIHRhYiwgbGltIC0gcHRyKTsKKysgICAgICBuZXdsaW0gPSBtZW1jaHIgKHB0ciwgdGFiWzBdLCBsaW0gLSBwdHIpOworICAgICAgIGlmIChuZXdsaW0pCisgCWxpbSA9IG5ld2xpbTsKKyAgICAgfQorQEAgLTEzODQsNiArMTU3MCwxMDcgQEAKKyAgIHJldHVybiBwdHI7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgY2hhciAqCisrbGltZmllbGRfbWIgKGNvbnN0IHN0cnVjdCBsaW5lICpsaW5lLCBjb25zdCBzdHJ1Y3Qga2V5ZmllbGQgKmtleSkKKyt7CisrICBjaGFyICpwdHIgPSBsaW5lLT50ZXh0LCAqbGltID0gcHRyICsgbGluZS0+bGVuZ3RoIC0gMTsKKysgIHNpemVfdCBld29yZCA9IGtleS0+ZXdvcmQsIGVjaGFyID0ga2V5LT5lY2hhcjsKKysgIGludCBpOworKyAgc2l6ZV90IG1ibGVuZ3RoOworKyAgbWJzdGF0ZV90IHN0YXRlOworKworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysKKysgIGlmICh0YWJfbGVuZ3RoKQorKyAgICB3aGlsZSAocHRyIDwgbGltICYmIGV3b3JkLS0pCisrICAgICAgeworKwl3aGlsZSAocHRyIDwgbGltICYmIG1lbWNtcCAocHRyLCB0YWIsIHRhYl9sZW5ndGgpICE9IDApCisrCSAgeworKwkgICAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCSAgICBwdHIgKz0gbWJsZW5ndGg7CisrCSAgfQorKwlpZiAocHRyIDwgbGltICYmIChld29yZCB8IGVjaGFyKSkKKysJICB7CisrCSAgICBHRVRfQllURUxFTl9PRl9DSEFSIChsaW0sIHB0ciwgbWJsZW5ndGgsIHN0YXRlKTsKKysJICAgIHB0ciArPSBtYmxlbmd0aDsKKysJICB9CisrICAgICAgfQorKyAgZWxzZQorKyAgICB3aGlsZSAocHRyIDwgbGltICYmIGV3b3JkLS0pCisrICAgICAgeworKwl3aGlsZSAocHRyIDwgbGltICYmIGlzbWJibGFuayAocHRyLCBsaW0gLSBwdHIsICZtYmxlbmd0aCkpCisrCSAgcHRyICs9IG1ibGVuZ3RoOworKwlpZiAocHRyIDwgbGltKQorKwkgIHsKKysJICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgICAgcHRyICs9IG1ibGVuZ3RoOworKwkgIH0KKysJd2hpbGUgKHB0ciA8IGxpbSAmJiAhaXNtYmJsYW5rIChwdHIsIGxpbSAtIHB0ciwgJm1ibGVuZ3RoKSkKKysJICBwdHIgKz0gbWJsZW5ndGg7CisrICAgICAgfQorKworKworKyMgaWZkZWYgUE9TSVhfVU5TUEVDSUZJRUQKKysgIC8qIE1ha2UgTElNIHBvaW50IHRvIHRoZSBlbmQgb2YgKG9uZSBieXRlIHBhc3QpIHRoZSBjdXJyZW50IGZpZWxkLiAgKi8KKysgIGlmICh0YWJfbGVuZ3RoKQorKyAgICB7CisrICAgICAgY2hhciAqbmV3bGltLCAqcDsKKysKKysgICAgICBuZXdsaW0gPSBOVUxMOworKyAgICAgIGZvciAocCA9IHB0cjsgcCA8IGxpbTspCisrIAl7CisrCSAgaWYgKG1lbWNtcCAocCwgdGFiLCB0YWJfbGVuZ3RoKSA9PSAwKQorKwkgICAgeworKwkgICAgICBuZXdsaW0gPSBwOworKwkgICAgICBicmVhazsKKysJICAgIH0KKysKKysJICBHRVRfQllURUxFTl9PRl9DSEFSIChsaW0sIHB0ciwgbWJsZW5ndGgsIHN0YXRlKTsKKysJICBwICs9IG1ibGVuZ3RoOworKwl9CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGNoYXIgKm5ld2xpbTsKKysgICAgICBuZXdsaW0gPSBwdHI7CisrCisrICAgICAgd2hpbGUgKG5ld2xpbSA8IGxpbSAmJiBpc21iYmxhbmsgKG5ld2xpbSwgbGltIC0gbmV3bGltLCAmbWJsZW5ndGgpKQorKwluZXdsaW0gKz0gbWJsZW5ndGg7CisrICAgICAgaWYgKHB0ciA8IGxpbSkKKysJeworKwkgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgIHB0ciArPSBtYmxlbmd0aDsKKysJfQorKyAgICAgIHdoaWxlIChuZXdsaW0gPCBsaW0gJiYgIWlzbWJibGFuayAobmV3bGltLCBsaW0gLSBuZXdsaW0sICZtYmxlbmd0aCkpCisrCW5ld2xpbSArPSBtYmxlbmd0aDsKKysgICAgICBsaW0gPSBuZXdsaW07CisrICAgIH0KKysjIGVuZGlmCisrCisrICAvKiBJZiB3ZSdyZSBza2lwcGluZyBsZWFkaW5nIGJsYW5rcywgZG9uJ3Qgc3RhcnQgY291bnRpbmcgY2hhcmFjdGVycworKyAgICogICAgICB1bnRpbCBhZnRlciBza2lwcGluZyBwYXN0IGFueSBsZWFkaW5nIGJsYW5rcy4gICovCisrICBpZiAoa2V5LT5za2lwc2JsYW5rcykKKysgICAgd2hpbGUgKHB0ciA8IGxpbSAmJiBpc21iYmxhbmsgKHB0ciwgbGltIC0gcHRyLCAmbWJsZW5ndGgpKQorKyAgICAgIHB0ciArPSBtYmxlbmd0aDsKKysKKysgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCisrICAvKiBBZHZhbmNlIFBUUiBieSBFQ0hBUiAoaWYgcG9zc2libGUpLCBidXQgbm8gZnVydGhlciB0aGFuIExJTS4gICovCisrICBmb3IgKGkgPSAwOyBpIDwgZWNoYXI7IGkrKykKKysgICAgeworKyAgICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKworKyAgICAgIGlmIChwdHIgKyBtYmxlbmd0aCA+IGxpbSkKKysJYnJlYWs7CisrICAgICAgZWxzZQorKwlwdHIgKz0gbWJsZW5ndGg7CisrICAgIH0KKysKKysgIHJldHVybiBwdHI7CisrfQorKyNlbmRpZgorKworIC8qIEZpbGwgQlVGIHJlYWRpbmcgZnJvbSBGUCwgbW92aW5nIGJ1Zi0+bGVmdCBieXRlcyBmcm9tIHRoZSBlbmQKKyAgICBvZiBidWYtPmJ1ZiB0byB0aGUgYmVnaW5uaW5nIGZpcnN0LiAgSWYgRU9GIGlzIHJlYWNoZWQgYW5kIHRoZQorICAgIGZpbGUgd2Fzbid0IHRlcm1pbmF0ZWQgYnkgYSBuZXdsaW5lLCBzdXBwbHkgb25lLiAgU2V0IHVwIEJVRidzIGxpbmUKK0BAIC0xNDY2LDggKzE3NTMsMjQgQEAKKyAJCSAgZWxzZQorIAkJICAgIHsKKyAJCSAgICAgIGlmIChrZXktPnNraXBzYmxhbmtzKQorLQkJCXdoaWxlIChibGFua3NbdG9fdWNoYXIgKCpsaW5lX3N0YXJ0KV0pCistCQkJICBsaW5lX3N0YXJ0Kys7CisrCQkJeworKyNpZiBIQVZFX01CUlRPV0MKKysJCQkgIGlmIChNQl9DVVJfTUFYID4gMSkKKysJCQkgICAgeworKwkJCSAgICAgIHNpemVfdCBtYmxlbmd0aDsKKysJCQkgICAgICBtYnN0YXRlX3Qgc3RhdGU7CisrCQkJICAgICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCQkgICAgICB3aGlsZSAobGluZV9zdGFydCA8IGxpbmUtPmtleWxpbSAmJgorKwkJCQkgICAgIGlzbWJibGFuayAobGluZV9zdGFydCwKKysJCQkJCQlsaW5lLT5rZXlsaW0gLSBsaW5lX3N0YXJ0LAorKwkJCQkJCSZtYmxlbmd0aCkpCisrCQkJCWxpbmVfc3RhcnQgKz0gbWJsZW5ndGg7CisrCQkJICAgIH0KKysJCQkgIGVsc2UKKysjZW5kaWYKKysJCQkgIHdoaWxlIChibGFua3NbdG9fdWNoYXIgKCpsaW5lX3N0YXJ0KV0pCisrCQkJICAgIGxpbmVfc3RhcnQrKzsKKysJCQl9CisgCQkgICAgICBsaW5lLT5rZXliZWcgPSBsaW5lX3N0YXJ0OworIAkJICAgIH0KKyAJCX0KK0BAIC0xNTAwLDcgKzE4MDMsNyBAQAorICAgIGhpZGVvdXNseSBmYXN0LiAqLworIAorIHN0YXRpYyBpbnQKKy1udW1jb21wYXJlIChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQorK251bWNvbXBhcmVfdW5pIChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQorIHsKKyAgIHdoaWxlIChibGFua3NbdG9fdWNoYXIgKCphKV0pCisgICAgIGErKzsKK0BAIC0xNTEwLDYgKzE4MTMsMjUgQEAKKyAgIHJldHVybiBzdHJudW1jbXAgKGEsIGIsIGRlY2ltYWxfcG9pbnQsIHRob3VzYW5kc19zZXApOworIH0KKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIGludAorK251bWNvbXBhcmVfbWIgKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCisreworKyAgc2l6ZV90IG1ibGVuZ3RoLCBsZW47CisrICBsZW4gPSBzdHJsZW4gKGEpOyAvKiBva2F5IGZvciBVVEYtOCAqLworKyAgd2hpbGUgKCphICYmIGlzbWJibGFuayAoYSwgbGVuID4gTUJfQ1VSX01BWCA/IE1CX0NVUl9NQVggOiBsZW4sICZtYmxlbmd0aCkpCisrICAgIHsKKysgICAgICBhICs9IG1ibGVuZ3RoOworKyAgICAgIGxlbiAtPSBtYmxlbmd0aDsKKysgICAgfQorKyAgbGVuID0gc3RybGVuIChiKTsgLyogb2theSBmb3IgVVRGLTggKi8KKysgIHdoaWxlICgqYiAmJiBpc21iYmxhbmsgKGIsIGxlbiA+IE1CX0NVUl9NQVggPyBNQl9DVVJfTUFYIDogbGVuLCAmbWJsZW5ndGgpKQorKyAgICBiICs9IG1ibGVuZ3RoOworKworKyAgcmV0dXJuIHN0cm51bWNtcCAoYSwgYiwgZGVjaW1hbF9wb2ludCwgdGhvdXNhbmRzX3NlcCk7CisrfQorKyNlbmRpZiAvKiBIQVZfRU1CUlRPV0MgKi8KKysKKyBzdGF0aWMgaW50CisgZ2VuZXJhbF9udW1jb21wYXJlIChjb25zdCBjaGFyICpzYSwgY29uc3QgY2hhciAqc2IpCisgeworQEAgLTE1NDMsNyArMTg2NSw3IEBACisgICAgUmV0dXJuIDAgaWYgdGhlIG5hbWUgaW4gUyBpcyBub3QgcmVjb2duaXplZC4gICovCisgCisgc3RhdGljIGludAorLWdldG1vbnRoIChjaGFyIGNvbnN0ICptb250aCwgc2l6ZV90IGxlbikKKytnZXRtb250aF91bmkgKGNoYXIgY29uc3QgKm1vbnRoLCBzaXplX3QgbGVuKQorIHsKKyAgIHNpemVfdCBsbyA9IDA7CisgICBzaXplX3QgaGkgPSBNT05USFNfUEVSX1lFQVI7CitAQCAtMTY5OCwxMSArMjAyMCw3OSBAQAorICAgcmV0dXJuIGRpZmY7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgaW50CisrZ2V0bW9udGhfbWIgKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBsZW4pCisreworKyAgY2hhciAqbW9udGg7CisrICByZWdpc3RlciBzaXplX3QgaTsKKysgIHJlZ2lzdGVyIGludCBsbyA9IDAsIGhpID0gTU9OVEhTX1BFUl9ZRUFSLCByZXN1bHQ7CisrICBjaGFyICp0bXA7CisrICBzaXplX3Qgd2NsZW5ndGgsIG1ibGVuZ3RoOworKyAgY29uc3QgY2hhciAqKnBwOworKyAgY29uc3Qgd2NoYXJfdCAqKndwcDsKKysgIHdjaGFyX3QgKm1vbnRoX3djczsKKysgIG1ic3RhdGVfdCBzdGF0ZTsKKysKKysgIHdoaWxlIChsZW4gPiAwICYmIGlzbWJibGFuayAocywgbGVuLCAmbWJsZW5ndGgpKQorKyAgICB7CisrICAgICAgcyArPSBtYmxlbmd0aDsKKysgICAgICBsZW4gLT0gbWJsZW5ndGg7CisrICAgIH0KKysKKysgIGlmIChsZW4gPT0gMCkKKysgICAgcmV0dXJuIDA7CisrCisrICBtb250aCA9IChjaGFyICopIGFsbG9jYSAobGVuICsgMSk7CisrCisrICB0bXAgPSAoY2hhciAqKSBhbGxvY2EgKGxlbiArIDEpOworKyAgbWVtY3B5ICh0bXAsIHMsIGxlbik7CisrICB0bXBbbGVuXSA9ICdcMCc7CisrICBwcCA9IChjb25zdCBjaGFyICoqKSZ0bXA7CisrICBtb250aF93Y3MgPSAod2NoYXJfdCAqKSBhbGxvY2EgKChsZW4gKyAxKSAqIHNpemVvZiAod2NoYXJfdCkpOworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysKKysgIHdjbGVuZ3RoID0gbWJzcnRvd2NzIChtb250aF93Y3MsIHBwLCBsZW4gKyAxLCAmc3RhdGUpOworKyAgYXNzZXJ0ICh3Y2xlbmd0aCAhPSAoc2l6ZV90KS0xICYmICpwcCA9PSBOVUxMKTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCB3Y2xlbmd0aDsgaSsrKQorKyAgICB7CisrICAgICAgbW9udGhfd2NzW2ldID0gdG93dXBwZXIobW9udGhfd2NzW2ldKTsKKysgICAgICBpZiAoaXN3YmxhbmsgKG1vbnRoX3djc1tpXSkpCisrCXsKKysJICBtb250aF93Y3NbaV0gPSBMJ1wwJzsKKysJICBicmVhazsKKysJfQorKyAgICB9CisrCisrICB3cHAgPSAoY29uc3Qgd2NoYXJfdCAqKikmbW9udGhfd2NzOworKworKyAgbWJsZW5ndGggPSB3Y3NydG9tYnMgKG1vbnRoLCB3cHAsIGxlbiArIDEsICZzdGF0ZSk7CisrICBhc3NlcnQgKG1ibGVuZ3RoICE9ICgtMSkgJiYgKndwcCA9PSBOVUxMKTsKKysKKysgIGRvCisrICAgIHsKKysgICAgICBpbnQgaXggPSAobG8gKyBoaSkgLyAyOworKworKyAgICAgIGlmIChzdHJuY21wIChtb250aCwgbW9udGh0YWJbaXhdLm5hbWUsIHN0cmxlbiAobW9udGh0YWJbaXhdLm5hbWUpKSA8IDApCisrCWhpID0gaXg7CisrICAgICAgZWxzZQorKwlsbyA9IGl4OworKyAgICB9CisrICB3aGlsZSAoaGkgLSBsbyA+IDEpOworKworKyAgcmVzdWx0ID0gKCFzdHJuY21wIChtb250aCwgbW9udGh0YWJbbG9dLm5hbWUsIHN0cmxlbiAobW9udGh0YWJbbG9dLm5hbWUpKQorKyAgICAgID8gbW9udGh0YWJbbG9dLnZhbCA6IDApOworKworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrI2VuZGlmCisrCisgLyogQ29tcGFyZSB0d28gbGluZXMgQSBhbmQgQiB0cnlpbmcgZXZlcnkga2V5IGluIHNlcXVlbmNlIHVudGlsIHRoZXJlCisgICAgYXJlIG5vIG1vcmUga2V5cyBvciBhIGRpZmZlcmVuY2UgaXMgZm91bmQuICovCisgCisgc3RhdGljIGludAorLWtleWNvbXBhcmUgKGNvbnN0IHN0cnVjdCBsaW5lICphLCBjb25zdCBzdHJ1Y3QgbGluZSAqYikKKytrZXljb21wYXJlX3VuaSAoY29uc3Qgc3RydWN0IGxpbmUgKmEsIGNvbnN0IHN0cnVjdCBsaW5lICpiKQorIHsKKyAgIHN0cnVjdCBrZXlmaWVsZCBjb25zdCAqa2V5ID0ga2V5bGlzdDsKKyAKK0BAIC0xODc1LDYgKzIyNjUsMTc5IEBACisgICByZXR1cm4ga2V5LT5yZXZlcnNlID8gLWRpZmYgOiBkaWZmOworIH0KKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIGludAorK2tleWNvbXBhcmVfbWIgKGNvbnN0IHN0cnVjdCBsaW5lICphLCBjb25zdCBzdHJ1Y3QgbGluZSAqYikKKyt7CisrICBzdHJ1Y3Qga2V5ZmllbGQgKmtleSA9IGtleWxpc3Q7CisrCisrICAvKiBGb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbiBvbmx5LCB0aGUga2V5IHBvc2l0aW9ucyBoYXZlIGJlZW4KKysgICAgIHByZWNvbXB1dGVkIGZvciB1cy4gKi8KKysgIGNoYXIgKnRleHRhID0gYS0+a2V5YmVnOworKyAgY2hhciAqdGV4dGIgPSBiLT5rZXliZWc7CisrICBjaGFyICpsaW1hID0gYS0+a2V5bGltOworKyAgY2hhciAqbGltYiA9IGItPmtleWxpbTsKKysKKysgIHNpemVfdCBtYmxlbmd0aF9hLCBtYmxlbmd0aF9iOworKyAgd2NoYXJfdCB3Y19hLCB3Y19iOworKyAgbWJzdGF0ZV90IHN0YXRlX2EsIHN0YXRlX2I7CisrCisrICBpbnQgZGlmZjsKKysKKysgIG1lbXNldCAoJnN0YXRlX2EsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysgIG1lbXNldCAoJnN0YXRlX2IsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysKKysgIGZvciAoOzspCisrICAgIHsKKysgICAgICB1bnNpZ25lZCBjaGFyICp0cmFuc2xhdGUgPSAodW5zaWduZWQgY2hhciAqKSBrZXktPnRyYW5zbGF0ZTsKKysgICAgICBib29sIGNvbnN0ICppZ25vcmUgPSBrZXktPmlnbm9yZTsKKysKKysgICAgICAvKiBGaW5kIHRoZSBsZW5ndGhzLiAqLworKyAgICAgIHNpemVfdCBsZW5hID0gbGltYSA8PSB0ZXh0YSA/IDAgOiBsaW1hIC0gdGV4dGE7CisrICAgICAgc2l6ZV90IGxlbmIgPSBsaW1iIDw9IHRleHRiID8gMCA6IGxpbWIgLSB0ZXh0YjsKKysKKysgICAgICAvKiBBY3R1YWxseSBjb21wYXJlIHRoZSBmaWVsZHMuICovCisrICAgICAgaWYgKGtleS0+cmFuZG9tKQorKyAgICAgICAgZGlmZiA9IGNvbXBhcmVfcmFuZG9tICh0ZXh0YSwgbGVuYSwgdGV4dGIsIGxlbmIpOworKyAgICAgIGVsc2UgaWYgKGtleS0+bnVtZXJpYyB8IGtleS0+Z2VuZXJhbF9udW1lcmljKQorKwl7CisrCSAgY2hhciBzYXZlYSA9ICpsaW1hLCBzYXZlYiA9ICpsaW1iOworKworKwkgICpsaW1hID0gKmxpbWIgPSAnXDAnOworKwkgIGlmIChmb3JjZV9nZW5lcmFsX251bWNvbXBhcmUpCisrCSAgICBkaWZmID0gZ2VuZXJhbF9udW1jb21wYXJlICh0ZXh0YSwgdGV4dGIpOworKwkgIGVsc2UKKysJICAgIGRpZmYgPSAoKGtleS0+bnVtZXJpYyA/IG51bWNvbXBhcmUgOiBnZW5lcmFsX251bWNvbXBhcmUpCisrCQkodGV4dGEsIHRleHRiKSk7CisrCSAgKmxpbWEgPSBzYXZlYSwgKmxpbWIgPSBzYXZlYjsKKysJfQorKyAgICAgIGVsc2UgaWYgKGtleS0+bW9udGgpCisrCWRpZmYgPSBnZXRtb250aCAodGV4dGEsIGxlbmEpIC0gZ2V0bW9udGggKHRleHRiLCBsZW5iKTsKKysgICAgICBlbHNlCisrCXsKKysJICBpZiAoaWdub3JlIHx8IHRyYW5zbGF0ZSkKKysJICAgIHsKKysJICAgICAgY2hhciAqY29weV9hID0gKGNoYXIgKikgYWxsb2NhIChsZW5hICsgMSArIGxlbmIgKyAxKTsKKysJICAgICAgY2hhciAqY29weV9iID0gY29weV9hICsgbGVuYSArIDE7CisrCSAgICAgIHNpemVfdCBuZXdfbGVuX2EsIG5ld19sZW5fYjsKKysJICAgICAgc2l6ZV90IGksIGo7CisrCisrCSAgICAgIC8qIElnbm9yZSBhbmQvb3IgdHJhbnNsYXRlIGNoYXJzIGJlZm9yZSBjb21wYXJpbmcuICAqLworKyMgZGVmaW5lIElHTk9SRV9DSEFSUyhORVdfTEVOLCBMRU4sIFRFWFQsIENPUFksIFdDLCBNQkxFTkdUSCwgU1RBVEUpCVwKKysgIGRvCQkJCQkJCQkJXAorKyAgICB7CQkJCQkJCQkJXAorKyAgICAgIHdjaGFyX3QgdXdjOwkJCQkJCQlcCisrICAgICAgY2hhciBtYmNbTUJfTEVOX01BWF07CQkJCQkJXAorKyAgICAgIG1ic3RhdGVfdCBzdGF0ZV93YzsJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICAgIGZvciAoTkVXX0xFTiA9IGkgPSAwOyBpIDwgTEVOOykJCQkJCVwKKysJewkJCQkJCQkJXAorKwkgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysJICBzdGF0ZV9iYWsgPSBTVEFURTsJCQkJCQlcCisrCSAgTUJMRU5HVEggPSBtYnJ0b3djICgmV0MsIFRFWFQgKyBpLCBMRU4gLSBpLCAmU1RBVEUpOwkJXAorKwkJCQkJCQkJCVwKKysJICBpZiAoTUJMRU5HVEggPT0gKHNpemVfdCktMiB8fCBNQkxFTkdUSCA9PSAoc2l6ZV90KS0xCQlcCisrCSAgICAgIHx8IE1CTEVOR1RIID09IDApCQkJCQkJXAorKwkgICAgewkJCQkJCQkJXAorKwkgICAgICBpZiAoTUJMRU5HVEggPT0gKHNpemVfdCktMiB8fCBNQkxFTkdUSCA9PSAoc2l6ZV90KS0xKQlcCisrCQlTVEFURSA9IHN0YXRlX2JhazsJCQkJCVwKKysJICAgICAgaWYgKCFpZ25vcmUpCQkJCQkJXAorKwkJQ09QWVtORVdfTEVOKytdID0gVEVYVFtpKytdOwkJCQlcCisrCSAgICAgIGNvbnRpbnVlOwkJCQkJCQlcCisrCSAgICB9CQkJCQkJCQlcCisrCQkJCQkJCQkJXAorKwkgIGlmIChpZ25vcmUpCQkJCQkJCVwKKysJICAgIHsJCQkJCQkJCVwKKysJICAgICAgaWYgKChpZ25vcmUgPT0gbm9ucHJpbnRpbmcgJiYgIWlzd3ByaW50IChXQykpCQlcCisrCQkgICB8fCAoaWdub3JlID09IG5vbmRpY3Rpb25hcnkJCQkJXAorKwkJICAgICAgICYmICFpc3dhbG51bSAoV0MpICYmICFpc3dibGFuayAoV0MpKSkJCVwKKysJCXsJCQkJCQkJXAorKwkJICBpICs9IE1CTEVOR1RIOwkJCQkJXAorKwkJICBjb250aW51ZTsJCQkJCQlcCisrCQl9CQkJCQkJCVwKKysJICAgIH0JCQkJCQkJCVwKKysJCQkJCQkJCQlcCisrCSAgaWYgKHRyYW5zbGF0ZSkJCQkJCQlcCisrCSAgICB7CQkJCQkJCQlcCisrCQkJCQkJCQkJXAorKwkgICAgICB1d2MgPSB0b3d1cHBlcihXQyk7CQkJCQlcCisrCSAgICAgIGlmIChXQyA9PSB1d2MpCQkJCQkJXAorKwkJewkJCQkJCQlcCisrCQkgIG1lbWNweSAobWJjLCBURVhUICsgaSwgTUJMRU5HVEgpOwkJCVwKKysJCSAgaSArPSBNQkxFTkdUSDsJCQkJCVwKKysJCX0JCQkJCQkJXAorKwkgICAgICBlbHNlCQkJCQkJCVwKKysJCXsJCQkJCQkJXAorKwkJICBpICs9IE1CTEVOR1RIOwkJCQkJXAorKwkJICBXQyA9IHV3YzsJCQkJCQlcCisrCQkgIG1lbXNldCAoJnN0YXRlX3djLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOwkJXAorKwkJCQkJCQkJCVwKKysJCSAgTUJMRU5HVEggPSB3Y3J0b21iIChtYmMsIFdDLCAmc3RhdGVfd2MpOwkJXAorKwkJICBhc3NlcnQgKE1CTEVOR1RIICE9IChzaXplX3QpLTEgJiYgTUJMRU5HVEggIT0gMCk7CVwKKysJCX0JCQkJCQkJXAorKwkJCQkJCQkJCVwKKysJICAgICAgZm9yIChqID0gMDsgaiA8IE1CTEVOR1RIOyBqKyspCQkJCVwKKysJCUNPUFlbTkVXX0xFTisrXSA9IG1iY1tqXTsJCQkJXAorKwkgICAgfQkJCQkJCQkJXAorKwkgIGVsc2UJCQkJCQkJCVwKKysJICAgIGZvciAoaiA9IDA7IGogPCBNQkxFTkdUSDsgaisrKQkJCQlcCisrCSAgICAgIENPUFlbTkVXX0xFTisrXSA9IFRFWFRbaSsrXTsJCQkJXAorKwl9CQkJCQkJCQlcCisrICAgICAgQ09QWVtORVdfTEVOXSA9ICdcMCc7CQkJCQkJXAorKyAgICB9CQkJCQkJCQkJXAorKyAgd2hpbGUgKDApCisrCSAgICAgIElHTk9SRV9DSEFSUyAobmV3X2xlbl9hLCBsZW5hLCB0ZXh0YSwgY29weV9hLAorKwkJCSAgICB3Y19hLCBtYmxlbmd0aF9hLCBzdGF0ZV9hKTsKKysJICAgICAgSUdOT1JFX0NIQVJTIChuZXdfbGVuX2IsIGxlbmIsIHRleHRiLCBjb3B5X2IsCisrCQkJICAgIHdjX2IsIG1ibGVuZ3RoX2IsIHN0YXRlX2IpOworKwkgICAgICBkaWZmID0geG1lbWNvbGwgKGNvcHlfYSwgbmV3X2xlbl9hLCBjb3B5X2IsIG5ld19sZW5fYik7CisrCSAgICB9CisrCSAgZWxzZSBpZiAobGVuYSA9PSAwKQorKwkgICAgZGlmZiA9IC0gTk9OWkVSTyAobGVuYik7CisrCSAgZWxzZSBpZiAobGVuYiA9PSAwKQorKwkgICAgZ290byBncmVhdGVyOworKwkgIGVsc2UKKysJICAgIGRpZmYgPSB4bWVtY29sbCAodGV4dGEsIGxlbmEsIHRleHRiLCBsZW5iKTsKKysJfQorKworKyAgICAgIGlmIChkaWZmKQorKwlnb3RvIG5vdF9lcXVhbDsKKysKKysgICAgICBrZXkgPSBrZXktPm5leHQ7CisrICAgICAgaWYgKCEga2V5KQorKwlicmVhazsKKysKKysgICAgICAvKiBGaW5kIHRoZSBiZWdpbm5pbmcgYW5kIGxpbWl0IG9mIHRoZSBuZXh0IGZpZWxkLiAgKi8KKysgICAgICBpZiAoa2V5LT5ld29yZCAhPSAtMSkKKysJbGltYSA9IGxpbWZpZWxkIChhLCBrZXkpLCBsaW1iID0gbGltZmllbGQgKGIsIGtleSk7CisrICAgICAgZWxzZQorKwlsaW1hID0gYS0+dGV4dCArIGEtPmxlbmd0aCAtIDEsIGxpbWIgPSBiLT50ZXh0ICsgYi0+bGVuZ3RoIC0gMTsKKysKKysgICAgICBpZiAoa2V5LT5zd29yZCAhPSAtMSkKKysJdGV4dGEgPSBiZWdmaWVsZCAoYSwga2V5KSwgdGV4dGIgPSBiZWdmaWVsZCAoYiwga2V5KTsKKysgICAgICBlbHNlCisrCXsKKysJICB0ZXh0YSA9IGEtPnRleHQsIHRleHRiID0gYi0+dGV4dDsKKysJICBpZiAoa2V5LT5za2lwc2JsYW5rcykKKysJICAgIHsKKysJICAgICAgd2hpbGUgKHRleHRhIDwgbGltYSAmJiBpc21iYmxhbmsgKHRleHRhLCBsaW1hIC0gdGV4dGEsICZtYmxlbmd0aF9hKSkKKysJCXRleHRhICs9IG1ibGVuZ3RoX2E7CisrCSAgICAgIHdoaWxlICh0ZXh0YiA8IGxpbWIgJiYgaXNtYmJsYW5rICh0ZXh0YiwgbGltYiAtIHRleHRiLCAmbWJsZW5ndGhfYikpCisrCQl0ZXh0YiArPSBtYmxlbmd0aF9iOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysgIHJldHVybiAwOworKworK2dyZWF0ZXI6CisrICBkaWZmID0gMTsKKytub3RfZXF1YWw6CisrICByZXR1cm4ga2V5LT5yZXZlcnNlID8gLWRpZmYgOiBkaWZmOworK30KKysjZW5kaWYKKysKKyAvKiBDb21wYXJlIHR3byBsaW5lcyBBIGFuZCBCLCByZXR1cm5pbmcgbmVnYXRpdmUsIHplcm8sIG9yIHBvc2l0aXZlCisgICAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgQSBjb21wYXJlcyBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gQi4gKi8KKworQEAgLTI3NDQsNyArMzMwNSw3IEBACisgICBpbml0aWFsaXplX2V4aXRfZmFpbHVyZSAoU09SVF9GQUlMVVJFKTsKKyAKKyAgIGhhcmRfTENfQ09MTEFURSA9IGhhcmRfbG9jYWxlIChMQ19DT0xMQVRFKTsKKy0jaWYgSEFWRV9OTF9MQU5HSU5GTworKyNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyAgIGhhcmRfTENfVElNRSA9IGhhcmRfbG9jYWxlIChMQ19USU1FKTsKKyAjZW5kaWYKKyAKK0BAIC0yNzY1LDYgKzMzMjYsMjcgQEAKKyAgICAgICB0aG91c2FuZHNfc2VwID0gLTE7CisgICB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworKyAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICB7CisrICAgICAgaW5pdHRhYmxlcyA9IGluaXR0YWJsZXNfbWI7CisrICAgICAgYmVnZmllbGQgPSBiZWdmaWVsZF9tYjsKKysgICAgICBsaW1maWVsZCA9IGxpbWZpZWxkX21iOworKyAgICAgIGdldG1vbnRoID0gZ2V0bW9udGhfbWI7CisrICAgICAga2V5Y29tcGFyZSA9IGtleWNvbXBhcmVfbWI7CisrICAgICAgbnVtY29tcGFyZSA9IG51bWNvbXBhcmVfbWI7CisrICAgIH0KKysgIGVsc2UKKysjZW5kaWYKKysgICAgeworKyAgICAgIGluaXR0YWJsZXMgPSBpbml0dGFibGVzX3VuaTsKKysgICAgICBiZWdmaWVsZCA9IGJlZ2ZpZWxkX3VuaTsKKysgICAgICBsaW1maWVsZCA9IGxpbWZpZWxkX3VuaTsKKysgICAgICBnZXRtb250aCA9IGdldG1vbnRoX3VuaTsKKysgICAgICBrZXljb21wYXJlID0ga2V5Y29tcGFyZV91bmk7CisrICAgICAgbnVtY29tcGFyZSA9IG51bWNvbXBhcmVfdW5pOworKyAgICB9CisrCisgICBoYXZlX3JlYWRfc3RkaW4gPSBmYWxzZTsKKyAgIGluaXR0YWJsZXMgKCk7CisgCitAQCAtMzAxNSwxMyArMzU5NywzNSBAQAorIAorIAljYXNlICd0JzoKKyAJICB7CistCSAgICBjaGFyIG5ld3RhYiA9IG9wdGFyZ1swXTsKKy0JICAgIGlmICghIG5ld3RhYikKKysJICAgIGNoYXIgbmV3dGFiW01CX0xFTl9NQVggKyAxXTsKKysJICAgIHNpemVfdCBuZXd0YWJfbGVuZ3RoID0gMTsKKysJICAgIHN0cm5jcHkgKG5ld3RhYiwgb3B0YXJnLCBNQl9MRU5fTUFYKTsKKysJICAgIGlmICghIG5ld3RhYlswXSkKKyAJICAgICAgZXJyb3IgKFNPUlRfRkFJTFVSRSwgMCwgXygiZW1wdHkgdGFiIikpOworLQkgICAgaWYgKG9wdGFyZ1sxXSkKKysjaWYgSEFWRV9NQlJUT1dDCisrCSAgICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrCSAgICAgIHsKKysJCXdjaGFyX3Qgd2M7CisrCQltYnN0YXRlX3Qgc3RhdGU7CisrCQlzaXplX3QgaTsKKysKKysJCW1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJbmV3dGFiX2xlbmd0aCA9IG1icnRvd2MgKCZ3YywgbmV3dGFiLCBzdHJubGVuIChuZXd0YWIsCisrCQkJCQkJCSAgICAgICBNQl9MRU5fTUFYKSwKKysJCQkJCSAmc3RhdGUpOworKwkJc3dpdGNoIChuZXd0YWJfbGVuZ3RoKQorKwkJICB7CisrCQkgIGNhc2UgKHNpemVfdCkgLTE6CisrCQkgIGNhc2UgKHNpemVfdCkgLTI6CisrCQkgIGNhc2UgMDoKKysJCSAgICBuZXd0YWJfbGVuZ3RoID0gMTsKKysJCSAgfQorKwkgICAgICB9CisrI2VuZGlmCisrCSAgICBpZiAobmV3dGFiX2xlbmd0aCA9PSAxICYmIG9wdGFyZ1sxXSkKKyAJICAgICAgeworIAkJaWYgKFNUUkVRIChvcHRhcmcsICJcXDAiKSkKKy0JCSAgbmV3dGFiID0gJ1wwJzsKKysJCSAgbmV3dGFiWzBdID0gJ1wwJzsKKyAJCWVsc2UKKyAJCSAgeworIAkJICAgIC8qIFByb3Zva2Ugd2l0aCBgc29ydCAtdHh4Jy4gIENvbXBsYWluIGFib3V0CitAQCAtMzAzMiw5ICszNjM2LDEyIEBACisgCQkJICAgcXVvdGUgKG9wdGFyZykpOworIAkJICB9CisgCSAgICAgIH0KKy0JICAgIGlmICh0YWIgIT0gVEFCX0RFRkFVTFQgJiYgdGFiICE9IG5ld3RhYikKKysJICAgIGlmICh0YWJfbGVuZ3RoCisrCQkmJiAodGFiX2xlbmd0aCAhPSBuZXd0YWJfbGVuZ3RoCisrCQkgICAgfHwgbWVtY21wICh0YWIsIG5ld3RhYiwgdGFiX2xlbmd0aCkgIT0gMCkpCisgCSAgICAgIGVycm9yIChTT1JUX0ZBSUxVUkUsIDAsIF8oImluY29tcGF0aWJsZSB0YWJzIikpOworLQkgICAgdGFiID0gbmV3dGFiOworKwkgICAgbWVtY3B5ICh0YWIsIG5ld3RhYiwgbmV3dGFiX2xlbmd0aCk7CisrCSAgICB0YWJfbGVuZ3RoID0gbmV3dGFiX2xlbmd0aDsKKyAJICB9CisgCSAgYnJlYWs7CisgCistLS0gY29yZXV0aWxzLTYuOCsvc3JjL3VuZXhwYW5kLmMuaTE4bgkyMDA3LTAxLTE0IDE1OjQxOjI4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy91bmV4cGFuZC5jCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMzksMTEgKzM5LDI4IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysKKysvKiBHZXQgbWJzdGF0ZV90LCBtYnJ0b3djKCksIHdjd2lkdGgoKS4gKi8KKysjaWYgSEFWRV9XQ0hBUl9ICisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyNlbmRpZgorKworICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiZXJyb3IuaCIKKyAjaW5jbHVkZSAicXVvdGUuaCIKKyAjaW5jbHVkZSAieHN0cm5kdXAuaCIKKyAKKysvKiBNQl9MRU5fTUFYIGlzIGluY29ycmVjdGx5IGRlZmluZWQgdG8gYmUgMSBpbiBhdCBsZWFzdCBvbmUgR0NDCisrICAgICAgaW5zdGFsbGF0aW9uOyB3b3JrIGFyb3VuZCB0aGlzIGNvbmZpZ3VyYXRpb24gZXJyb3IuICAqLworKyNpZiAhZGVmaW5lZCBNQl9MRU5fTUFYIHx8IE1CX0xFTl9NQVggPCAyCisrIyBkZWZpbmUgTUJfTEVOX01BWCAxNgorKyNlbmRpZgorKworKy8qIFNvbWUgc3lzdGVtcywgbGlrZSBCZU9TLCBoYXZlIG11bHRpYnl0ZSBlbmNvZGluZ3MgYnV0IGxhY2sgbWJzdGF0ZV90LiAgKi8KKysjaWYgSEFWRV9NQlJUT1dDICYmIGRlZmluZWQgbWJzdGF0ZV90CisrIyBkZWZpbmUgbWJydG93Yyhwd2MsIHMsIG4sIHBzKSAobWJydG93YykgKHB3YywgcywgbiwgMCkKKysjZW5kaWYKKysKKyAvKiBUaGUgb2ZmaWNpYWwgbmFtZSBvZiB0aGlzIHByb2dyYW0gKGUuZy4sIG5vIGBnJyBwcmVmaXgpLiAgKi8KKyAjZGVmaW5lIFBST0dSQU1fTkFNRSAidW5leHBhbmQiCisgCitAQCAtMTEwLDYgKzEyNywyMDggQEAKKyAgIHtOVUxMLCAwLCBOVUxMLCAwfQorIH07CisgCisrc3RhdGljIEZJTEUgKm5leHRfZmlsZSAoRklMRSAqZnApOworKworKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgdm9pZAorK3VuZXhwYW5kX211bHRpYnl0ZSAodm9pZCkKKyt7CisrICBGSUxFICpmcDsJCQkvKiBJbnB1dCBzdHJlYW0uICovCisrICBtYnN0YXRlX3QgaV9zdGF0ZTsJCS8qIEN1cnJlbnQgc2hpZnQgc3RhdGUgb2YgdGhlIGlucHV0IHN0cmVhbS4gKi8KKysgIG1ic3RhdGVfdCBpX3N0YXRlX2JhazsJLyogQmFjayB1cCB0aGUgSV9TVEFURS4gKi8KKysgIG1ic3RhdGVfdCBvX3N0YXRlOwkJLyogQ3VycmVudCBzaGlmdCBzdGF0ZSBvZiB0aGUgb3V0cHV0IHN0cmVhbS4gKi8KKysgIGNoYXIgYnVmW01CX0xFTl9NQVggKyBCVUZTSVpdOyAgLyogRm9yIHNwb29saW5nIGEgcmVhZCBieXRlIHNlcXVlbmNlLiAqLworKyAgY2hhciAqYnVmcG9zOwkJCS8qIE5leHQgcmVhZCBwb3NpdGlvbiBvZiBCVUYuICovCisrICBzaXplX3QgYnVmbGVuID0gMDsJCS8qIFRoZSBsZW5ndGggb2YgdGhlIGJ5dGUgc2VxdWVuY2UgaW4gYnVmLiAqLworKyAgd2ludF90IHdjOwkJCS8qIEEgZ290dGVuIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgc2l6ZV90IG1ibGVuZ3RoOwkJLyogVGhlIGJ5dGUgc2l6ZSBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIKKysJCQkJICAgd2hpY2ggc2hvd3MgYXMgc2FtZSBjaGFyYWN0ZXIgYXMgV0MuICovCisrCisrICAvKiBJbmRleCBpbiBgdGFiX2xpc3QnIG9mIG5leHQgdGFic3RvcDogKi8KKysgIGludCB0YWJfaW5kZXggPSAwOwkJLyogRm9yIGNhbGN1bGF0aW5nIHdpZHRoIG9mIHBlbmRpbmcgdGFicy4gKi8KKysgIGludCBwcmludF90YWJfaW5kZXggPSAwOwkvKiBGb3IgcHJpbnRpbmcgYXMgbWFueSB0YWJzIGFzIHBvc3NpYmxlLiAqLworKyAgdW5zaWduZWQgaW50IGNvbHVtbiA9IDA7CS8qIENvbHVtbiBvbiBzY3JlZW4gb2YgbmV4dCBjaGFyLiAqLworKyAgaW50IG5leHRfdGFiX2NvbHVtbjsJCS8qIENvbHVtbiB0aGUgbmV4dCB0YWIgc3RvcCBpcyBvbi4gKi8KKysgIGludCBjb252ZXJ0ID0gMTsJCS8qIElmIG5vbnplcm8sIHBlcmZvcm0gdHJhbnNsYXRpb25zLiAqLworKyAgdW5zaWduZWQgaW50IHBlbmRpbmcgPSAwOwkvKiBQZW5kaW5nIGNvbHVtbnMgb2YgYmxhbmtzLiAqLworKworKyAgZnAgPSBuZXh0X2ZpbGUgKChGSUxFICopIE5VTEwpOworKyAgaWYgKGZwID09IE5VTEwpCisrICAgIHJldHVybjsKKysKKysgIG1lbXNldCAoJm9fc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysgIG1lbXNldCAoJmlfc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysKKysgIGZvciAoOzspCisrICAgIHsKKysgICAgICBpZiAoYnVmbGVuIDwgTUJfTEVOX01BWCAmJiAhZmVvZihmcCkgJiYgIWZlcnJvcihmcCkpCisrCXsKKysJICBtZW1tb3ZlIChidWYsIGJ1ZnBvcywgYnVmbGVuKTsKKysJICBidWZsZW4gKz0gZnJlYWQgKGJ1ZiArIGJ1Zmxlbiwgc2l6ZW9mKGNoYXIpLCBCVUZTSVosIGZwKTsKKysJICBidWZwb3MgPSBidWY7CisrCX0KKysKKysgICAgICAvKiBHZXQgYSB3aWRlIGNoYXJhY3Rlci4gKi8KKysgICAgICBpZiAoYnVmbGVuIDwgMSkKKysJeworKwkgIG1ibGVuZ3RoID0gMTsKKysJICB3YyA9IFdFT0Y7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBpX3N0YXRlX2JhayA9IGlfc3RhdGU7CisrCSAgbWJsZW5ndGggPSBtYnJ0b3djICgod2NoYXJfdCAqKSZ3YywgYnVmcG9zLCBidWZsZW4sICZpX3N0YXRlKTsKKysJfQorKworKyAgICAgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrCXsKKysJICBpX3N0YXRlID0gaV9zdGF0ZV9iYWs7CisrCSAgd2MgPSBMJ1wwJzsKKysJfQorKworKyAgICAgIGlmICh3YyA9PSBMJyAnICYmIGNvbnZlcnQgJiYgY29sdW1uIDwgSU5UX01BWCkKKysJeworKwkgICsrcGVuZGluZzsKKysJICArK2NvbHVtbjsKKysJfQorKyAgICAgIGVsc2UgaWYgKHdjID09IEwnXHQnICYmIGNvbnZlcnQpCisrCXsKKysJICBpZiAodGFiX3NpemUgPT0gMCkKKysJICAgIHsKKysJICAgICAgLyogRG8gbm90IGxldCB0YWJfaW5kZXggPT0gZmlyc3RfZnJlZV90YWI7CisrCQkgc3RvcCB3aGVuIGl0IGlzIDEgbGVzcy4gKi8KKysJICAgICAgd2hpbGUgKHRhYl9pbmRleCA8IGZpcnN0X2ZyZWVfdGFiIC0gMQorKwkJICAmJiBjb2x1bW4gPj0gdGFiX2xpc3RbdGFiX2luZGV4XSkKKysJCXRhYl9pbmRleCsrOworKwkgICAgICBuZXh0X3RhYl9jb2x1bW4gPSB0YWJfbGlzdFt0YWJfaW5kZXhdOworKwkgICAgICBpZiAodGFiX2luZGV4IDwgZmlyc3RfZnJlZV90YWIgLSAxKQorKwkJdGFiX2luZGV4Kys7CisrCSAgICAgIGlmIChjb2x1bW4gPj0gbmV4dF90YWJfY29sdW1uKQorKwkJeworKwkJICBjb252ZXJ0ID0gMDsJLyogUmFuIG91dCBvZiB0YWIgc3RvcHMuICovCisrCQkgIGdvdG8gZmx1c2hfcGVuZF9tYjsKKysJCX0KKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIG5leHRfdGFiX2NvbHVtbiA9IGNvbHVtbiArIHRhYl9zaXplIC0gY29sdW1uICUgdGFiX3NpemU7CisrCSAgICB9CisrCSAgcGVuZGluZyArPSBuZXh0X3RhYl9jb2x1bW4gLSBjb2x1bW47CisrCSAgY29sdW1uID0gbmV4dF90YWJfY29sdW1uOworKwl9CisrICAgICAgZWxzZQorKwl7CisrZmx1c2hfcGVuZF9tYjoKKysJICAvKiBGbHVzaCBwZW5kaW5nIHNwYWNlcy4gIFByaW50IGFzIG1hbnkgdGFicyBhcyBwb3NzaWJsZSwKKysJICAgICB0aGVuIHByaW50IHRoZSByZXN0IGFzIHNwYWNlcy4gKi8KKysJICBpZiAocGVuZGluZyA9PSAxKQorKwkgICAgeworKwkgICAgICBwdXRjaGFyICgnICcpOworKwkgICAgICBwZW5kaW5nID0gMDsKKysJICAgIH0KKysJICBjb2x1bW4gLT0gcGVuZGluZzsKKysJICB3aGlsZSAocGVuZGluZyA+IDApCisrCSAgICB7CisrCSAgICAgIGlmICh0YWJfc2l6ZSA9PSAwKQorKwkJeworKwkJICAvKiBEbyBub3QgbGV0IHByaW50X3RhYl9pbmRleCA9PSBmaXJzdF9mcmVlX3RhYjsKKysJCSAgICAgc3RvcCB3aGVuIGl0IGlzIDEgbGVzcy4gKi8KKysJCSAgd2hpbGUgKHByaW50X3RhYl9pbmRleCA8IGZpcnN0X2ZyZWVfdGFiIC0gMQorKwkJICAgICAgJiYgY29sdW1uID49IHRhYl9saXN0W3ByaW50X3RhYl9pbmRleF0pCisrCQkgICAgcHJpbnRfdGFiX2luZGV4Kys7CisrCQkgIG5leHRfdGFiX2NvbHVtbiA9IHRhYl9saXN0W3ByaW50X3RhYl9pbmRleF07CisrCQkgIGlmIChwcmludF90YWJfaW5kZXggPCBmaXJzdF9mcmVlX3RhYiAtIDEpCisrCQkgICAgcHJpbnRfdGFiX2luZGV4Kys7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgbmV4dF90YWJfY29sdW1uID0KKysJCSAgICBjb2x1bW4gKyB0YWJfc2l6ZSAtIGNvbHVtbiAlIHRhYl9zaXplOworKwkJfQorKwkgICAgICBpZiAobmV4dF90YWJfY29sdW1uIC0gY29sdW1uIDw9IHBlbmRpbmcpCisrCQl7CisrCQkgIHB1dGNoYXIgKCdcdCcpOworKwkJICBwZW5kaW5nIC09IG5leHRfdGFiX2NvbHVtbiAtIGNvbHVtbjsKKysJCSAgY29sdW1uID0gbmV4dF90YWJfY29sdW1uOworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIC0tcHJpbnRfdGFiX2luZGV4OworKwkJICBjb2x1bW4gKz0gcGVuZGluZzsKKysJCSAgd2hpbGUgKHBlbmRpbmcgIT0gMCkKKysJCSAgICB7CisrCQkgICAgICBwdXRjaGFyICgnICcpOworKwkJICAgICAgcGVuZGluZy0tOworKwkJICAgIH0KKysJCX0KKysJICAgIH0KKysKKysJICBpZiAod2MgPT0gV0VPRikKKysJICAgIHsKKysJICAgICAgZnAgPSBuZXh0X2ZpbGUgKGZwKTsKKysJICAgICAgaWYgKGZwID09IE5VTEwpCisrCQlicmVhazsgICAgICAgICAgLyogTm8gbW9yZSBmaWxlcy4gKi8KKysJICAgICAgZWxzZQorKwkJeworKwkJICBtZW1zZXQgKCZpX3N0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIGNvbnRpbnVlOworKwkJfQorKwkgICAgfQorKworKwkgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrCSAgICB7CisrCSAgICAgIGlmIChjb252ZXJ0KQorKwkJeworKwkJICArK2NvbHVtbjsKKysJCSAgaWYgKGNvbnZlcnRfZW50aXJlX2xpbmUgPT0gMCkKKysJCSAgICBjb252ZXJ0ID0gMDsKKysJCX0KKysJICAgICAgbWJsZW5ndGggPSAxOworKwkgICAgICBwdXRjaGFyIChidWZbMF0pOworKwkgICAgfQorKwkgIGVsc2UgaWYgKG1ibGVuZ3RoID09IDApCisrCSAgICB7CisrCSAgICAgIGlmIChjb252ZXJ0ICYmIGNvbnZlcnRfZW50aXJlX2xpbmUgPT0gMCkKKysJCWNvbnZlcnQgPSAwOworKwkgICAgICBtYmxlbmd0aCA9IDE7CisrCSAgICAgIHB1dGNoYXIgKCdcMCcpOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgaWYgKGNvbnZlcnQpCisrCQl7CisrCQkgIGlmICh3YyA9PSBMJ1xiJykKKysJCSAgICB7CisrCQkgICAgICBpZiAoY29sdW1uID4gMCkKKysJCQktLWNvbHVtbjsKKysJCSAgICB9CisrCQkgIGVsc2UKKysJCSAgICB7CisrCQkgICAgICBpbnQgd2lkdGg7ICAgICAgICAgICAgLyogVGhlIHdpZHRoIG9mIFdDLiAqLworKworKwkJICAgICAgd2lkdGggPSB3Y3dpZHRoICh3Yyk7CisrCQkgICAgICBjb2x1bW4gKz0gKHdpZHRoID4gMCkgPyB3aWR0aCA6IDA7CisrCQkgICAgICBpZiAoY29udmVydF9lbnRpcmVfbGluZSA9PSAwKQorKwkJCWNvbnZlcnQgPSAwOworKwkJICAgIH0KKysJCX0KKysKKysJICAgICAgaWYgKHdjID09IEwnXG4nKQorKwkJeworKwkJICB0YWJfaW5kZXggPSBwcmludF90YWJfaW5kZXggPSAwOworKwkJICBjb2x1bW4gPSBwZW5kaW5nID0gMDsKKysJCSAgY29udmVydCA9IDE7CisrCQl9CisrCSAgICAgIGZ3cml0ZSAoYnVmcG9zLCBzaXplb2YoY2hhciksIG1ibGVuZ3RoLCBzdGRvdXQpOworKwkgICAgfQorKwl9CisrICAgICAgYnVmbGVuIC09IG1ibGVuZ3RoOworKyAgICAgIGJ1ZnBvcyArPSBtYmxlbmd0aDsKKysgICAgfQorK30KKysjZW5kaWYKKysKKysKKyB2b2lkCisgdXNhZ2UgKGludCBzdGF0dXMpCisgeworQEAgLTUzMSw3ICs3NTAsMTIgQEAKKyAKKyAgIGZpbGVfbGlzdCA9IChvcHRpbmQgPCBhcmdjID8gJmFyZ3Zbb3B0aW5kXSA6IHN0ZGluX2FyZ3YpOworIAorLSAgdW5leHBhbmQgKCk7CisrI2lmIEhBVkVfTUJSVE9XQworKyAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICB1bmV4cGFuZF9tdWx0aWJ5dGUgKCk7CisrICBlbHNlCisrI2VuZGlmCisrICAgIHVuZXhwYW5kICgpOworIAorICAgaWYgKGhhdmVfcmVhZF9zdGRpbiAmJiBmY2xvc2UgKHN0ZGluKSAhPSAwKQorICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCBlcnJubywgIi0iKTsKKy0tLSBjb3JldXRpbHMtNi44Ky9zcmMvcHIuYy5pMThuCTIwMDctMDEtMTQgMTU6NDE6MjguMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvc3JjL3ByLmMJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zMTMsNiArMzEzLDMyIEBACisgCisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysKKysvKiBHZXQgTUJfTEVOX01BWC4gICovCisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKy8qIE1CX0xFTl9NQVggaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCB0byBiZSAxIGluIGF0IGxlYXN0IG9uZSBHQ0MKKysgICBpbnN0YWxsYXRpb247IHdvcmsgYXJvdW5kIHRoaXMgY29uZmlndXJhdGlvbiBlcnJvci4gICovCisrI2lmICFkZWZpbmVkIE1CX0xFTl9NQVggfHwgTUJfTEVOX01BWCA9PSAxCisrIyBkZWZpbmUgTUJfTEVOX01BWCAxNgorKyNlbmRpZgorKworKy8qIEdldCBNQl9DVVJfTUFYLiAgKi8KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrCisrLyogU29sYXJpcyAyLjUgaGFzIGEgYnVnOiA8d2NoYXIuaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgPHdjdHlwZS5oPi4gICovCisrLyogR2V0IG1ic3RhdGVfdCwgbWJydG93YygpLCB3Y3dpZHRoKCkuICAqLworKyNpZiBIQVZFX1dDSEFSX0gKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrI2VuZGlmCisrCisrLyogR2V0IGlzd3ByaW50KCkuIC0tIGZvciB3Y3dpZHRoKCkuICAqLworKyNpZiBIQVZFX1dDVFlQRV9ICisrIyBpbmNsdWRlIDx3Y3R5cGUuaD4KKysjZW5kaWYKKysjaWYgIWRlZmluZWQgaXN3cHJpbnQgJiYgIUhBVkVfSVNXUFJJTlQKKysjIGRlZmluZSBpc3dwcmludCh3YykgMQorKyNlbmRpZgorKworICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiZXJyb3IuaCIKKyAjaW5jbHVkZSAiaGFyZC1sb2NhbGUuaCIKK0BAIC0zMjQsNiArMzUwLDE4IEBACisgI2luY2x1ZGUgInN0cmZ0aW1lLmgiCisgI2luY2x1ZGUgInhzdHJ0b2wuaCIKKyAKKysvKiBTb21lIHN5c3RlbXMsIGxpa2UgQmVPUywgaGF2ZSBtdWx0aWJ5dGUgZW5jb2RpbmdzIGJ1dCBsYWNrIG1ic3RhdGVfdC4gICovCisrI2lmIEhBVkVfTUJSVE9XQyAmJiBkZWZpbmVkIG1ic3RhdGVfdAorKyMgZGVmaW5lIG1icnRvd2MocHdjLCBzLCBuLCBwcykgKG1icnRvd2MpIChwd2MsIHMsIG4sIDApCisrI2VuZGlmCisrCisrI2lmbmRlZiBIQVZFX0RFQ0xfV0NXSURUSAorKyJ0aGlzIGNvbmZpZ3VyZS10aW1lIGRlY2xhcmF0aW9uIHRlc3Qgd2FzIG5vdCBydW4iCisrI2VuZGlmCisrI2lmICFIQVZFX0RFQ0xfV0NXSURUSAorK2V4dGVybiBpbnQgd2N3aWR0aCAoKTsKKysjZW5kaWYKKysKKyAvKiBUaGUgb2ZmaWNpYWwgbmFtZSBvZiB0aGlzIHByb2dyYW0gKGUuZy4sIG5vIGBnJyBwcmVmaXgpLiAgKi8KKyAjZGVmaW5lIFBST0dSQU1fTkFNRSAicHIiCisgCitAQCAtNDE2LDcgKzQ1NCwyMCBAQAorIAorICNkZWZpbmUgTlVMTENPTCAoQ09MVU1OICopMAorIAorLXN0YXRpYyBpbnQgY2hhcl90b19jbHVtcCAoY2hhciBjKTsKKysvKiBGdW50aW9uIHBvaW50ZXJzIHRvIHN3aXRjaCBmdW5jdGlvbnMgZm9yIHNpbmdsZSBieXRlIGxvY2FsZSBvciBmb3IKKysgICBtdWx0aWJ5dGUgbG9jYWxlLiBJZiBtdWx0aWJ5dGUgZnVuY3Rpb25zIGRvIG5vdCBleGlzdCBpbiB5b3VyIHN5c3l0ZW0sCisrICAgdGhlc2UgcG9pbnRlcnMgYWx3YXlzIHBvaW50IHRoZSBmdW5jdGlvbiBmb3Igc2luZ2xlIGJ5dGUgbG9jYWxlLiAqLworK3N0YXRpYyB2b2lkICgqcHJpbnRfY2hhcikgKGNoYXIgYyk7Cisrc3RhdGljIGludCAoKmNoYXJfdG9fY2x1bXApIChjaGFyIGMpOworKworKy8qIEZ1bmN0aW9ucyBmb3Igc2luZ2xlIGJ5dGUgbG9jYWxlLiAqLworK3N0YXRpYyB2b2lkIHByaW50X2NoYXJfc2luZ2xlIChjaGFyIGMpOworK3N0YXRpYyBpbnQgY2hhcl90b19jbHVtcF9zaW5nbGUgKGNoYXIgYyk7CisrCisrLyogRnVuY3Rpb25zIGZvciBtdWx0aWJ5dGUgbG9jYWxlLiAqLworK3N0YXRpYyB2b2lkIHByaW50X2NoYXJfbXVsdGkgKGNoYXIgYyk7Cisrc3RhdGljIGludCBjaGFyX3RvX2NsdW1wX211bHRpIChjaGFyIGMpOworKworIHN0YXRpYyBib29sIHJlYWRfbGluZSAoQ09MVU1OICpwKTsKKyBzdGF0aWMgYm9vbCBwcmludF9wYWdlICh2b2lkKTsKKyBzdGF0aWMgYm9vbCBwcmludF9zdG9yZWQgKENPTFVNTiAqcCk7CitAQCAtNDI2LDYgKzQ3Nyw3IEBACisgc3RhdGljIHZvaWQgcGFkX2Fjcm9zc190byAoaW50IHBvc2l0aW9uKTsKKyBzdGF0aWMgdm9pZCBhZGRfbGluZV9udW1iZXIgKENPTFVNTiAqcCk7Cisgc3RhdGljIHZvaWQgZ2V0b3B0YXJnIChjaGFyICphcmcsIGNoYXIgc3dpdGNoX2NoYXIsIGNoYXIgKmNoYXJhY3RlciwKKysJCSAgICAgICBpbnQgKmNoYXJhY3Rlcl9sZW5ndGgsIGludCAqY2hhcmFjdGVyX3dpZHRoLAorIAkJICAgICAgIGludCAqbnVtYmVyKTsKKyB2b2lkIHVzYWdlIChpbnQgc3RhdHVzKTsKKyBzdGF0aWMgdm9pZCBwcmludF9maWxlcyAoaW50IG51bWJlcl9vZl9maWxlcywgY2hhciAqKmF2KTsKK0BAIC00NDAsNyArNDkyLDYgQEAKKyBzdGF0aWMgdm9pZCBwYWRfZG93biAoaW50IGxpbmVzKTsKKyBzdGF0aWMgdm9pZCByZWFkX3Jlc3Rfb2ZfbGluZSAoQ09MVU1OICpwKTsKKyBzdGF0aWMgdm9pZCBza2lwX3JlYWQgKENPTFVNTiAqcCwgaW50IGNvbHVtbl9udW1iZXIpOworLXN0YXRpYyB2b2lkIHByaW50X2NoYXIgKGNoYXIgYyk7Cisgc3RhdGljIHZvaWQgY2xlYW51cCAodm9pZCk7Cisgc3RhdGljIHZvaWQgcHJpbnRfc2VwX3N0cmluZyAodm9pZCk7Cisgc3RhdGljIHZvaWQgc2VwYXJhdG9yX3N0cmluZyAoY29uc3QgY2hhciAqb3B0YXJnX1MpOworQEAgLTQ1NSw3ICs1MDYsNyBAQAorICAgIHdlIHN0b3JlIHRoZSBsZWZ0bW9zdCBjb2x1bW5zIGNvbnRpZ3VvdXNseSBpbiBidWZmLgorICAgIFRvIHByaW50IGEgbGluZSBmcm9tIGJ1ZmYsIGdldCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlcgorICAgIGZyb20gbGluZV92ZWN0b3JbaV0sIGFuZCBwcmludCB1cCB0byBsaW5lX3ZlY3RvcltpICsgMV0uICovCistc3RhdGljIGNoYXIgKmJ1ZmY7Cisrc3RhdGljIHVuc2lnbmVkIGNoYXIgKmJ1ZmY7CisgCisgLyogSW5kZXggb2YgdGhlIHBvc2l0aW9uIGluIGJ1ZmYgd2hlcmUgdGhlIG5leHQgY2hhcmFjdGVyCisgICAgd2lsbCBiZSBzdG9yZWQuICovCitAQCAtNTU5LDcgKzYxMCw3IEBACisgc3RhdGljIGJvb2wgdW50YWJpZnlfaW5wdXQgPSBmYWxzZTsKKyAKKyAvKiAoLWUpIFRoZSBpbnB1dCB0YWIgY2hhcmFjdGVyLiAqLworLXN0YXRpYyBjaGFyIGlucHV0X3RhYl9jaGFyID0gJ1x0JzsKKytzdGF0aWMgY2hhciBpbnB1dF90YWJfY2hhcltNQl9MRU5fTUFYXSA9ICJcdCI7CisgCisgLyogKC1lKSBUYWJzdG9wcyBhcmUgYXQgY2hhcnNfcGVyX3RhYiwgMipjaGFyc19wZXJfdGFiLCAzKmNoYXJzX3Blcl90YWIsIC4uLgorICAgIHdoZXJlIHRoZSBsZWZ0bW9zdCBjb2x1bW4gaXMgMS4gKi8KK0BAIC01NjksNyArNjIwLDEwIEBACisgc3RhdGljIGJvb2wgdGFiaWZ5X291dHB1dCA9IGZhbHNlOworIAorIC8qICgtaSkgVGhlIG91dHB1dCB0YWIgY2hhcmFjdGVyLiAqLworLXN0YXRpYyBjaGFyIG91dHB1dF90YWJfY2hhciA9ICdcdCc7Cisrc3RhdGljIGNoYXIgb3V0cHV0X3RhYl9jaGFyW01CX0xFTl9NQVhdID0gIlx0IjsKKysKKysvKiAoLWkpIFRoZSBieXRlIGxlbmd0aCBvZiBvdXRwdXQgdGFiIGNoYXJhY3Rlci4gKi8KKytzdGF0aWMgaW50IG91dHB1dF90YWJfY2hhcl9sZW5ndGggPSAxOworIAorIC8qICgtaSkgVGhlIHdpZHRoIG9mIHRoZSBvdXRwdXQgdGFiLiAqLworIHN0YXRpYyBpbnQgY2hhcnNfcGVyX291dHB1dF90YWIgPSA4OworQEAgLTY0Myw3ICs2OTcsMTMgQEAKKyBzdGF0aWMgYm9vbCBudW1iZXJlZF9saW5lcyA9IGZhbHNlOworIAorIC8qICgtbikgQ2hhcmFjdGVyIHdoaWNoIGZvbGxvd3MgZWFjaCBsaW5lIG51bWJlci4gKi8KKy1zdGF0aWMgY2hhciBudW1iZXJfc2VwYXJhdG9yID0gJ1x0JzsKKytzdGF0aWMgY2hhciBudW1iZXJfc2VwYXJhdG9yW01CX0xFTl9NQVhdID0gIlx0IjsKKysKKysvKiAoLW4pIFRoZSBieXRlIGxlbmd0aCBvZiB0aGUgY2hhcmFjdGVyIHdoaWNoIGZvbGxvd3MgZWFjaCBsaW5lIG51bWJlci4gKi8KKytzdGF0aWMgaW50IG51bWJlcl9zZXBhcmF0b3JfbGVuZ3RoID0gMTsKKysKKysvKiAoLW4pIFRoZSBjaGFyYWN0ZXIgd2lkdGggb2YgdGhlIGNoYXJhY3RlciB3aGljaCBmb2xsb3dzIGVhY2ggbGluZSBudW1iZXIuICovCisrc3RhdGljIGludCBudW1iZXJfc2VwYXJhdG9yX3dpZHRoID0gMDsKKyAKKyAvKiAoLW4pIGxpbmUgY291bnRpbmcgc3RhcnRzIHdpdGggMXN0IGxpbmUgb2YgaW5wdXQgZmlsZSAobm90IHdpdGggMXN0CisgICAgbGluZSBvZiAxc3QgcGFnZSBwcmludGVkKS4gKi8KK0BAIC02OTYsNiArNzU2LDcgQEAKKyAgICAtYXxDT0xVTU58LW0gaXMgYSBgc3BhY2UnIGFuZCB3aXRoIHRoZSAtSiBvcHRpb24gYSBgdGFiJy4gKi8KKyBzdGF0aWMgY2hhciAqY29sX3NlcF9zdHJpbmcgPSAiIjsKKyBzdGF0aWMgaW50IGNvbF9zZXBfbGVuZ3RoID0gMDsKKytzdGF0aWMgaW50IGNvbF9zZXBfd2lkdGggPSAwOworIHN0YXRpYyBjaGFyICpjb2x1bW5fc2VwYXJhdG9yID0gIiAiOworIHN0YXRpYyBjaGFyICpsaW5lX3NlcGFyYXRvciA9ICJcdCI7CisgCitAQCAtODUyLDYgKzkxMywxMyBAQAorICAgY29sX3NlcF9sZW5ndGggPSAoaW50KSBzdHJsZW4gKG9wdGFyZ19TKTsKKyAgIGNvbF9zZXBfc3RyaW5nID0geG1hbGxvYyAoY29sX3NlcF9sZW5ndGggKyAxKTsKKyAgIHN0cmNweSAoY29sX3NlcF9zdHJpbmcsIG9wdGFyZ19TKTsKKysKKysjaWYgSEFWRV9NQlJUT1dDCisrICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgIGNvbF9zZXBfd2lkdGggPSBtYnN3aWR0aCAoY29sX3NlcF9zdHJpbmcsIDApOworKyAgZWxzZQorKyNlbmRpZgorKyAgICBjb2xfc2VwX3dpZHRoID0gY29sX3NlcF9sZW5ndGg7CisgfQorIAorIGludAorQEAgLTg3Nyw2ICs5NDUsMjEgQEAKKyAKKyAgIGF0ZXhpdCAoY2xvc2Vfc3Rkb3V0KTsKKyAKKysvKiBEZWZpbmUgd2hpY2ggZnVuY3Rpb25zIGFyZSB1c2VkLCB0aGUgb25lcyBmb3Igc2luZ2xlIGJ5dGUgbG9jYWxlIG9yIHRoZSBvbmVzCisrICAgZm9yIG11bHRpYnl0ZSBsb2NhbGUuICovCisrI2lmIEhBVkVfTUJSVE9XQworKyAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICB7CisrICAgICAgcHJpbnRfY2hhciA9IHByaW50X2NoYXJfbXVsdGk7CisrICAgICAgY2hhcl90b19jbHVtcCA9IGNoYXJfdG9fY2x1bXBfbXVsdGk7CisrICAgIH0KKysgIGVsc2UKKysjZW5kaWYKKysgICAgeworKyAgICAgIHByaW50X2NoYXIgPSBwcmludF9jaGFyX3NpbmdsZTsKKysgICAgICBjaGFyX3RvX2NsdW1wID0gY2hhcl90b19jbHVtcF9zaW5nbGU7CisrICAgIH0KKysKKyAgIG5fZmlsZXMgPSAwOworICAgZmlsZV9uYW1lcyA9IChhcmdjID4gMQorIAkJPyB4bWFsbG9jICgoYXJnYyAtIDEpICogc2l6ZW9mIChjaGFyICopKQorQEAgLTk0OSw4ICsxMDMyLDEyIEBACisgCSAgYnJlYWs7CisgCWNhc2UgJ2UnOgorIAkgIGlmIChvcHRhcmcpCistCSAgICBnZXRvcHRhcmcgKG9wdGFyZywgJ2UnLCAmaW5wdXRfdGFiX2NoYXIsCistCQkgICAgICAgJmNoYXJzX3Blcl9pbnB1dF90YWIpOworKwkgICAgeworKwkgICAgICBpbnQgZHVtbXlfbGVuZ3RoLCBkdW1teV93aWR0aDsKKysKKysJICAgICAgZ2V0b3B0YXJnIChvcHRhcmcsICdlJywgaW5wdXRfdGFiX2NoYXIsICZkdW1teV9sZW5ndGgsCisrCQkJICZkdW1teV93aWR0aCwgJmNoYXJzX3Blcl9pbnB1dF90YWIpOworKwkgICAgfQorIAkgIC8qIENvdWxkIGNoZWNrIHRhYiB3aWR0aCA+IDAuICovCisgCSAgdW50YWJpZnlfaW5wdXQgPSB0cnVlOworIAkgIGJyZWFrOworQEAgLTk2Myw4ICsxMDUwLDEyIEBACisgCSAgYnJlYWs7CisgCWNhc2UgJ2knOgorIAkgIGlmIChvcHRhcmcpCistCSAgICBnZXRvcHRhcmcgKG9wdGFyZywgJ2knLCAmb3V0cHV0X3RhYl9jaGFyLAorLQkJICAgICAgICZjaGFyc19wZXJfb3V0cHV0X3RhYik7CisrCSAgICB7CisrCSAgICAgIGludCBkdW1teV93aWR0aDsKKysKKysJICAgICAgZ2V0b3B0YXJnIChvcHRhcmcsICdpJywgb3V0cHV0X3RhYl9jaGFyLCAmb3V0cHV0X3RhYl9jaGFyX2xlbmd0aCwKKysJCQkgJmR1bW15X3dpZHRoLCAmY2hhcnNfcGVyX291dHB1dF90YWIpOworKwkgICAgfQorIAkgIC8qIENvdWxkIGNoZWNrIHRhYiB3aWR0aCA+IDAuICovCisgCSAgdGFiaWZ5X291dHB1dCA9IHRydWU7CisgCSAgYnJlYWs7CitAQCAtOTkxLDggKzEwODIsOCBAQAorIAljYXNlICduJzoKKyAJICBudW1iZXJlZF9saW5lcyA9IHRydWU7CisgCSAgaWYgKG9wdGFyZykKKy0JICAgIGdldG9wdGFyZyAob3B0YXJnLCAnbicsICZudW1iZXJfc2VwYXJhdG9yLAorLQkJICAgICAgICZjaGFyc19wZXJfbnVtYmVyKTsKKysJICAgIGdldG9wdGFyZyAob3B0YXJnLCAnbicsIG51bWJlcl9zZXBhcmF0b3IsICZudW1iZXJfc2VwYXJhdG9yX2xlbmd0aCwKKysJCSAgICAgICAmbnVtYmVyX3NlcGFyYXRvcl93aWR0aCwgJmNoYXJzX3Blcl9udW1iZXIpOworIAkgIGJyZWFrOworIAljYXNlICdOJzoKKyAJICBza2lwX2NvdW50ID0gZmFsc2U7CitAQCAtMTAzMSw3ICsxMTIyLDcgQEAKKyAJICBvbGRfcyA9IGZhbHNlOworIAkgIC8qIFJlc2V0IGFuIGFkZGl0aW9uYWwgaW5wdXQgb2YgLXMsIC1TIGRvbWluYXRlcyAtcyAqLworIAkgIGNvbF9zZXBfc3RyaW5nID0gIiI7CistCSAgY29sX3NlcF9sZW5ndGggPSAwOworKwkgIGNvbF9zZXBfbGVuZ3RoID0gY29sX3NlcF93aWR0aCA9IDA7CisgCSAgdXNlX2NvbF9zZXBhcmF0b3IgPSB0cnVlOworIAkgIGlmIChvcHRhcmcpCisgCSAgICBzZXBhcmF0b3Jfc3RyaW5nIChvcHRhcmcpOworQEAgLTExODgsMTAgKzEyNzksNDUgQEAKKyAgICBhIG51bWJlci4gKi8KKyAKKyBzdGF0aWMgdm9pZAorLWdldG9wdGFyZyAoY2hhciAqYXJnLCBjaGFyIHN3aXRjaF9jaGFyLCBjaGFyICpjaGFyYWN0ZXIsIGludCAqbnVtYmVyKQorK2dldG9wdGFyZyAoY2hhciAqYXJnLCBjaGFyIHN3aXRjaF9jaGFyLCBjaGFyICpjaGFyYWN0ZXIsIGludCAqY2hhcmFjdGVyX2xlbmd0aCwKKysJICAgaW50ICpjaGFyYWN0ZXJfd2lkdGgsIGludCAqbnVtYmVyKQorIHsKKyAgIGlmICghSVNESUdJVCAoKmFyZykpCistICAgICpjaGFyYWN0ZXIgPSAqYXJnKys7CisrICAgIHsKKysjaWZkZWYgSEFWRV9NQlJUT1dDCisrICAgICAgaWYgKE1CX0NVUl9NQVggPiAxKQkvKiBmb3IgbXVsdGlieXRlIGxvY2FsZS4gKi8KKysJeworKwkgIHdjaGFyX3Qgd2M7CisrCSAgc2l6ZV90IG1ibGVuZ3RoOworKwkgIGludCB3aWR0aDsKKysJICBtYnN0YXRlX3Qgc3RhdGUgPSB7J1wwJ307CisrCisrCSAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIGFyZywgc3RybmxlbihhcmcsIE1CX0xFTl9NQVgpLCAmc3RhdGUpOworKworKwkgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrCSAgICB7CisrCSAgICAgICpjaGFyYWN0ZXJfbGVuZ3RoID0gMTsKKysJICAgICAgKmNoYXJhY3Rlcl93aWR0aCA9IDE7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICAqY2hhcmFjdGVyX2xlbmd0aCA9IChtYmxlbmd0aCA8IDEpID8gMSA6IG1ibGVuZ3RoOworKwkgICAgICB3aWR0aCA9IHdjd2lkdGggKHdjKTsKKysJICAgICAgKmNoYXJhY3Rlcl93aWR0aCA9ICh3aWR0aCA8IDApID8gMCA6IHdpZHRoOworKwkgICAgfQorKworKwkgIHN0cm5jcHkgKGNoYXJhY3RlciwgYXJnLCAqY2hhcmFjdGVyX2xlbmd0aCk7CisrCSAgYXJnICs9ICpjaGFyYWN0ZXJfbGVuZ3RoOworKwl9CisrICAgICAgZWxzZQkJCS8qIGZvciBzaW5nbGUgYnl0ZSBsb2NhbGUuICovCisrI2VuZGlmCisrCXsKKysJICAqY2hhcmFjdGVyID0gKmFyZysrOworKwkgICpjaGFyYWN0ZXJfbGVuZ3RoID0gMTsKKysJICAqY2hhcmFjdGVyX3dpZHRoID0gMTsKKysJfQorKyAgICB9CisrCisgICBpZiAoKmFyZykKKyAgICAgeworICAgICAgIGxvbmcgaW50IHRtcF9sb25nOworQEAgLTEyNTYsNyArMTM4Miw3IEBACisgCSAgZWxzZQorIAkgICAgY29sX3NlcF9zdHJpbmcgPSBjb2x1bW5fc2VwYXJhdG9yOworIAorLQkgIGNvbF9zZXBfbGVuZ3RoID0gMTsKKysJICBjb2xfc2VwX2xlbmd0aCA9IGNvbF9zZXBfd2lkdGggPSAxOworIAkgIHVzZV9jb2xfc2VwYXJhdG9yID0gdHJ1ZTsKKyAJfQorICAgICAgIC8qIEl0J3MgcmF0aGVyIHBvaW50bGVzcyB0byBkZWZpbmUgYSBUQUIgc2VwYXJhdG9yIHdpdGggY29sdW1uCitAQCAtMTI4OCwxMSArMTQxNCwxMSBAQAorIAkgICAgIFRBQl9XSURUSCAoY2hhcnNfcGVyX2lucHV0X3RhYiwgY2hhcnNfcGVyX251bWJlcik7ICAgKi8KKyAKKyAgICAgICAvKiBFc3RpbWF0ZSBjaGFyc19wZXJfdGV4dCB3aXRob3V0IGFueSBtYXJnaW4gYW5kIGtlZXAgaXQgY29uc3RhbnQuICovCistICAgICAgaWYgKG51bWJlcl9zZXBhcmF0b3IgPT0gJ1x0JykKKysgICAgICBpZiAobnVtYmVyX3NlcGFyYXRvclswXSA9PSAnXHQnKQorIAludW1iZXJfd2lkdGggPSBjaGFyc19wZXJfbnVtYmVyICsKKyAJICBUQUJfV0lEVEggKGNoYXJzX3Blcl9kZWZhdWx0X3RhYiwgY2hhcnNfcGVyX251bWJlcik7CisgICAgICAgZWxzZQorLQludW1iZXJfd2lkdGggPSBjaGFyc19wZXJfbnVtYmVyICsgMTsKKysJbnVtYmVyX3dpZHRoID0gY2hhcnNfcGVyX251bWJlciArIG51bWJlcl9zZXBhcmF0b3Jfd2lkdGg7CisgCisgICAgICAgLyogVGhlIG51bWJlciBpcyBwYXJ0IG9mIHRoZSBjb2x1bW4gd2lkdGggdW5sZXNzIHdlIGFyZQorIAkgcHJpbnRpbmcgZmlsZXMgaW4gcGFyYWxsZWwuICovCitAQCAtMTMwNyw3ICsxNDMzLDcgQEAKKyAgICAgfQorIAorICAgY2hhcnNfcGVyX2NvbHVtbiA9IChjaGFyc19wZXJfbGluZSAtIGNoYXJzX3VzZWRfYnlfbnVtYmVyIC0KKy0JCSAgICAgKGNvbHVtbnMgLSAxKSAqIGNvbF9zZXBfbGVuZ3RoKSAvIGNvbHVtbnM7CisrCQkgICAgIChjb2x1bW5zIC0gMSkgKiBjb2xfc2VwX3dpZHRoKSAvIGNvbHVtbnM7CisgCisgICBpZiAoY2hhcnNfcGVyX2NvbHVtbiA8IDEpCisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIF8oInBhZ2Ugd2lkdGggdG9vIG5hcnJvdyIpKTsKK0BAIC0xNDMyLDcgKzE1NTgsNyBAQAorIAorICAgLyogRW5sYXJnZSBwLT5zdGFydF9wb3NpdGlvbiBvZiBmaXJzdCBjb2x1bW4gdG8gdXNlIHRoZSBzYW1lIGZvcm0gb2YKKyAgICAgIHBhZGRpbmdfbm90X3ByaW50ZWQgd2l0aCBhbGwgY29sdW1ucy4gKi8KKy0gIGggPSBoICsgY29sX3NlcF9sZW5ndGg7CisrICBoID0gaCArIGNvbF9zZXBfd2lkdGg7CisgCisgICAvKiBUaGlzIGxvb3AgdGFrZXMgY2FyZSBvZiBhbGwgYnV0IHRoZSByaWdodG1vc3QgY29sdW1uLiAqLworIAorQEAgLTE0NjYsNyArMTU5Miw3IEBACisgCX0KKyAgICAgICBlbHNlCisgCXsKKy0JICBoID0gaF9uZXh0ICsgY29sX3NlcF9sZW5ndGg7CisrCSAgaCA9IGhfbmV4dCArIGNvbF9zZXBfd2lkdGg7CisgCSAgaF9uZXh0ID0gaCArIGNoYXJzX3Blcl9jb2x1bW47CisgCX0KKyAgICAgfQorQEAgLTE3NTYsOSArMTg4Miw5IEBACisgYWxpZ25fY29sdW1uIChDT0xVTU4gKnApCisgeworICAgcGFkZGluZ19ub3RfcHJpbnRlZCA9IHAtPnN0YXJ0X3Bvc2l0aW9uOworLSAgaWYgKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX2xlbmd0aCA+IDApCisrICBpZiAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfd2lkdGggPiAwKQorICAgICB7CistICAgICAgcGFkX2Fjcm9zc190byAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfbGVuZ3RoKTsKKysgICAgICBwYWRfYWNyb3NzX3RvIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF93aWR0aCk7CisgICAgICAgcGFkZGluZ19ub3RfcHJpbnRlZCA9IEFOWVdIRVJFOworICAgICB9CisgCitAQCAtMjAyOSwxMyArMjE1NSwxMyBAQAorICAgICAgIC8qIE1heSBiZSB0b28gZ2VuZXJvdXMuICovCisgICAgICAgYnVmZiA9IFgyUkVBTExPQyAoYnVmZiwgJmJ1ZmZfYWxsb2NhdGVkKTsKKyAgICAgfQorLSAgYnVmZltidWZmX2N1cnJlbnQrK10gPSBjOworKyAgYnVmZltidWZmX2N1cnJlbnQrK10gPSAodW5zaWduZWQgY2hhcikgYzsKKyB9CisgCisgc3RhdGljIHZvaWQKKyBhZGRfbGluZV9udW1iZXIgKENPTFVNTiAqcCkKKyB7CistICBpbnQgaTsKKysgIGludCBpLCBqOworICAgY2hhciAqczsKKyAgIGludCBsZWZ0X2N1dDsKKyAKK0BAIC0yMDU4LDIyICsyMTg0LDI0IEBACisgICAgICAgLyogVGFiaWZpY2F0aW9uIGlzIGFzc3VtZWQgZm9yIG11bHRpcGxlIGNvbHVtbnMsIGFsc28gZm9yIG4tc2VwYXJhdG9ycywKKyAJIGJ1dCBgZGVmYXVsdCBuLXNlcGFyYXRvciA9IFRBQicgaGFzbid0IGJlZW4gZ2l2ZW4gcHJpb3JpdHkgb3ZlcgorIAkgZXF1YWwgY29sdW1uX3dpZHRoIGFsc28gc3BlY2lmaWVkIGJ5IFBPU0lYLiAqLworLSAgICAgIGlmIChudW1iZXJfc2VwYXJhdG9yID09ICdcdCcpCisrICAgICAgaWYgKG51bWJlcl9zZXBhcmF0b3JbMF0gPT0gJ1x0JykKKyAgICAgICAgIHsKKyAgICAgICAgICAgaSA9IG51bWJlcl93aWR0aCAtIGNoYXJzX3Blcl9udW1iZXI7CisgICAgICAgICAgIHdoaWxlIChpLS0gPiAwKQorIAkgICAgKHAtPmNoYXJfZnVuYykgKCcgJyk7CisgICAgICAgICB9CisgICAgICAgZWxzZQorLSAgICAgICAgKHAtPmNoYXJfZnVuYykgKG51bWJlcl9zZXBhcmF0b3IpOworKwlmb3IgKGogPSAwOyBqIDwgbnVtYmVyX3NlcGFyYXRvcl9sZW5ndGg7IGorKykKKysJICAocC0+Y2hhcl9mdW5jKSAobnVtYmVyX3NlcGFyYXRvcltqXSk7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgLyogVG8gY29tcGx5IHdpdGggUE9TSVgsIHdlIGF2b2lkIGFueSBleHBhbnNpb24gb2YgZGVmYXVsdCBUQUIKKyAgICAgICAgc2VwYXJhdG9yIHdpdGggYSBzaW5nbGUgY29sdW1uIG91dHB1dC4gTm8gY29sdW1uX3dpZHRoIHJlcXVpcmVtZW50CisgICAgICAgIGhhcyB0byBiZSBjb25zaWRlcmVkLiAqLworICAgICB7CistICAgICAgKHAtPmNoYXJfZnVuYykgKG51bWJlcl9zZXBhcmF0b3IpOworLSAgICAgIGlmIChudW1iZXJfc2VwYXJhdG9yID09ICdcdCcpCisrICAgICAgZm9yIChqID0gMDsgaiA8IG51bWJlcl9zZXBhcmF0b3JfbGVuZ3RoOyBqKyspCisrCShwLT5jaGFyX2Z1bmMpIChudW1iZXJfc2VwYXJhdG9yW2pdKTsKKysgICAgICBpZiAobnVtYmVyX3NlcGFyYXRvclswXSA9PSAnXHQnKQorICAgICAgICAgb3V0cHV0X3Bvc2l0aW9uID0gUE9TX0FGVEVSX1RBQiAoY2hhcnNfcGVyX291dHB1dF90YWIsCisgCQkJICBvdXRwdXRfcG9zaXRpb24pOworICAgICB9CitAQCAtMjIzNCw3ICsyMzYyLDcgQEAKKyAgIHdoaWxlIChnb2FsIC0gaF9vbGQgPiAxCisgCSAmJiAoaF9uZXcgPSBQT1NfQUZURVJfVEFCIChjaGFyc19wZXJfb3V0cHV0X3RhYiwgaF9vbGQpKSA8PSBnb2FsKQorICAgICB7CistICAgICAgcHV0Y2hhciAob3V0cHV0X3RhYl9jaGFyKTsKKysgICAgICBmd3JpdGUgKG91dHB1dF90YWJfY2hhciwgc2l6ZW9mKGNoYXIpLCBvdXRwdXRfdGFiX2NoYXJfbGVuZ3RoLCBzdGRvdXQpOworICAgICAgIGhfb2xkID0gaF9uZXc7CisgICAgIH0KKyAgIHdoaWxlICgrK2hfb2xkIDw9IGdvYWwpCitAQCAtMjI1NCw2ICsyMzgyLDcgQEAKKyB7CisgICBjaGFyICpzOworICAgaW50IGwgPSBjb2xfc2VwX2xlbmd0aDsKKysgIGludCBub3Rfc3BhY2VfZmxhZzsKKyAKKyAgIHMgPSBjb2xfc2VwX3N0cmluZzsKKyAKK0BAIC0yMjY3LDYgKzIzOTYsNyBAQAorICAgICB7CisgICAgICAgZm9yICg7IHNlcGFyYXRvcnNfbm90X3ByaW50ZWQgPiAwOyAtLXNlcGFyYXRvcnNfbm90X3ByaW50ZWQpCisgCXsKKysJICBub3Rfc3BhY2VfZmxhZyA9IDA7CisgCSAgd2hpbGUgKGwtLSA+IDApCisgCSAgICB7CisgCSAgICAgIC8qIDMgdHlwZXMgb2Ygc2VwX3N0cmluZ3M6IHNwYWNlcyBvbmx5LCBzcGFjZXMgYW5kIGNoYXJzLAorQEAgLTIyODAsMTIgKzI0MTAsMTUgQEAKKyAJCX0KKyAJICAgICAgZWxzZQorIAkJeworKwkJICBub3Rfc3BhY2VfZmxhZyA9IDE7CisgCQkgIGlmIChzcGFjZXNfbm90X3ByaW50ZWQgPiAwKQorIAkJICAgIHByaW50X3doaXRlX3NwYWNlICgpOworIAkJICBwdXRjaGFyICgqcysrKTsKKy0JCSAgKytvdXRwdXRfcG9zaXRpb247CisgCQl9CisgCSAgICB9CisrCSAgaWYgKG5vdF9zcGFjZV9mbGFnKQorKwkgICAgb3V0cHV0X3Bvc2l0aW9uICs9IGNvbF9zZXBfd2lkdGg7CisrCisgICAgICAgICAgIC8qIHNlcF9zdHJpbmcgZW5kcyB3aXRoIHNvbWUgc3BhY2VzICovCisgCSAgaWYgKHNwYWNlc19ub3RfcHJpbnRlZCA+IDApCisgCSAgICBwcmludF93aGl0ZV9zcGFjZSAoKTsKK0BAIC0yMzEzLDcgKzI0NDYsNyBAQAorICAgIHJlcXVpcmVkIG51bWJlciBvZiB0YWJzIGFuZCBzcGFjZXMuICovCisgCisgc3RhdGljIHZvaWQKKy1wcmludF9jaGFyIChjaGFyIGMpCisrcHJpbnRfY2hhcl9zaW5nbGUgKGNoYXIgYykKKyB7CisgICBpZiAodGFiaWZ5X291dHB1dCkKKyAgICAgeworQEAgLTIzMzcsNiArMjQ3MCw3NCBAQAorICAgcHV0Y2hhciAoYyk7CisgfQorIAorKyNpZmRlZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgdm9pZAorK3ByaW50X2NoYXJfbXVsdGkgKGNoYXIgYykKKyt7CisrICBzdGF0aWMgc2l6ZV90IG1iY19wb3MgPSAwOworKyAgc3RhdGljIGNoYXIgbWJjW01CX0xFTl9NQVhdID0geydcMCd9OworKyAgc3RhdGljIG1ic3RhdGVfdCBzdGF0ZSA9IHsnXDAnfTsKKysgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CisrICB3Y2hhcl90IHdjOworKyAgc2l6ZV90IG1ibGVuZ3RoOworKyAgaW50IHdpZHRoOworKworKyAgaWYgKHRhYmlmeV9vdXRwdXQpCisrICAgIHsKKysgICAgICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysgICAgICBtYmNbbWJjX3BvcysrXSA9IGM7CisrICAgICAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIG1iYywgbWJjX3BvcywgJnN0YXRlKTsKKysKKysgICAgICB3aGlsZSAobWJjX3BvcyA+IDApCisrCXsKKysJICBzd2l0Y2ggKG1ibGVuZ3RoKQorKwkgICAgeworKwkgICAgY2FzZSAoc2l6ZV90KS0yOgorKwkgICAgICBzdGF0ZSA9IHN0YXRlX2JhazsKKysJICAgICAgcmV0dXJuOworKworKwkgICAgY2FzZSAoc2l6ZV90KS0xOgorKwkgICAgICBzdGF0ZSA9IHN0YXRlX2JhazsKKysJICAgICAgKytvdXRwdXRfcG9zaXRpb247CisrCSAgICAgIHB1dGNoYXIgKG1iY1swXSk7CisrCSAgICAgIG1lbW1vdmUgKG1iYywgbWJjICsgMSwgTUJfQ1VSX01BWCAtIDEpOworKwkgICAgICAtLW1iY19wb3M7CisrCSAgICAgIGJyZWFrOworKworKwkgICAgY2FzZSAwOgorKwkgICAgICBtYmxlbmd0aCA9IDE7CisrCisrCSAgICBkZWZhdWx0OgorKwkgICAgICBpZiAod2MgPT0gTCcgJykKKysJCXsKKysJCSAgbWVtbW92ZSAobWJjLCBtYmMgKyBtYmxlbmd0aCwgTUJfQ1VSX01BWCAtIG1ibGVuZ3RoKTsKKysJCSAgLS1tYmNfcG9zOworKwkJICArK3NwYWNlc19ub3RfcHJpbnRlZDsKKysJCSAgcmV0dXJuOworKwkJfQorKwkgICAgICBlbHNlIGlmIChzcGFjZXNfbm90X3ByaW50ZWQgPiAwKQorKwkJcHJpbnRfd2hpdGVfc3BhY2UgKCk7CisrCisrCSAgICAgIC8qIE5vbnByaW50YWJsZXMgYXJlIGFzc3VtZWQgdG8gaGF2ZSB3aWR0aCAwLCBleGNlcHQgTCdcYicuICovCisrCSAgICAgIGlmICgod2lkdGggPSB3Y3dpZHRoICh3YykpIDwgMSkKKysJCXsKKysJCSAgaWYgKHdjID09IEwnXGInKQorKwkJICAgIC0tb3V0cHV0X3Bvc2l0aW9uOworKwkJfQorKwkgICAgICBlbHNlCisrCQlvdXRwdXRfcG9zaXRpb24gKz0gd2lkdGg7CisrCisrCSAgICAgIGZ3cml0ZSAobWJjLCBzaXplb2YoY2hhciksIG1ibGVuZ3RoLCBzdGRvdXQpOworKwkgICAgICBtZW1tb3ZlIChtYmMsIG1iYyArIG1ibGVuZ3RoLCBNQl9DVVJfTUFYIC0gbWJsZW5ndGgpOworKwkgICAgICBtYmNfcG9zIC09IG1ibGVuZ3RoOworKwkgICAgfQorKwl9CisrICAgICAgcmV0dXJuOworKyAgICB9CisrICBwdXRjaGFyIChjKTsKKyt9CisrI2VuZGlmCisrCisgLyogU2tpcCB0byBwYWdlIFBBR0UgYmVmb3JlIHByaW50aW5nLgorICAgIFBBR0UgbWF5IGJlIGxhcmdlciB0aGFuIHRvdGFsIG51bWJlciBvZiBwYWdlcy4gKi8KKyAKK0BAIC0yNTE3LDkgKzI3MTgsOSBAQAorIAkgIGFsaWduX2VtcHR5X2NvbHMgPSBmYWxzZTsKKyAJfQorIAorLSAgICAgIGlmIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF9sZW5ndGggPiAwKQorKyAgICAgIGlmIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF93aWR0aCA+IDApCisgCXsKKy0JICBwYWRfYWNyb3NzX3RvIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF9sZW5ndGgpOworKwkgIHBhZF9hY3Jvc3NfdG8gKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX3dpZHRoKTsKKyAJICBwYWRkaW5nX25vdF9wcmludGVkID0gQU5ZV0hFUkU7CisgCX0KKyAKK0BAIC0yNjIwLDkgKzI4MjEsOSBAQAorIAl9CisgICAgIH0KKyAKKy0gIGlmIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF9sZW5ndGggPiAwKQorKyAgaWYgKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX3dpZHRoID4gMCkKKyAgICAgeworLSAgICAgIHBhZF9hY3Jvc3NfdG8gKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX2xlbmd0aCk7CisrICAgICAgcGFkX2Fjcm9zc190byAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfd2lkdGgpOworICAgICAgIHBhZGRpbmdfbm90X3ByaW50ZWQgPSBBTllXSEVSRTsKKyAgICAgfQorIAorQEAgLTI2MzUsOCArMjgzNiw4IEBACisgICBpZiAoc3BhY2VzX25vdF9wcmludGVkID09IDApCisgICAgIHsKKyAgICAgICBvdXRwdXRfcG9zaXRpb24gPSBwLT5zdGFydF9wb3NpdGlvbiArIGVuZF92ZWN0b3JbbGluZV07CistICAgICAgaWYgKHAtPnN0YXJ0X3Bvc2l0aW9uIC0gY29sX3NlcF9sZW5ndGggPT0gY2hhcnNfcGVyX21hcmdpbikKKy0Jb3V0cHV0X3Bvc2l0aW9uIC09IGNvbF9zZXBfbGVuZ3RoOworKyAgICAgIGlmIChwLT5zdGFydF9wb3NpdGlvbiAtIGNvbF9zZXBfd2lkdGggPT0gY2hhcnNfcGVyX21hcmdpbikKKysJb3V0cHV0X3Bvc2l0aW9uIC09IGNvbF9zZXBfd2lkdGg7CisgICAgIH0KKyAKKyAgIHJldHVybiB0cnVlOworQEAgLTI2NTUsNyArMjg1Niw3IEBACisgICAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaXMgMS4pICovCisgCisgc3RhdGljIGludAorLWNoYXJfdG9fY2x1bXAgKGNoYXIgYykKKytjaGFyX3RvX2NsdW1wX3NpbmdsZSAoY2hhciBjKQorIHsKKyAgIHVuc2lnbmVkIGNoYXIgdWMgPSBjOworICAgY2hhciAqcyA9IGNsdW1wX2J1ZmY7CitAQCAtMjY2NSwxMCArMjg2NiwxMCBAQAorICAgaW50IGNoYXJzOworICAgaW50IGNoYXJzX3Blcl9jID0gODsKKyAKKy0gIGlmIChjID09IGlucHV0X3RhYl9jaGFyKQorKyAgaWYgKGMgPT0gaW5wdXRfdGFiX2NoYXJbMF0pCisgICAgIGNoYXJzX3Blcl9jID0gY2hhcnNfcGVyX2lucHV0X3RhYjsKKyAKKy0gIGlmIChjID09IGlucHV0X3RhYl9jaGFyIHx8IGMgPT0gJ1x0JykKKysgIGlmIChjID09IGlucHV0X3RhYl9jaGFyWzBdIHx8IGMgPT0gJ1x0JykKKyAgICAgeworICAgICAgIHdpZHRoID0gVEFCX1dJRFRIIChjaGFyc19wZXJfYywgaW5wdXRfcG9zaXRpb24pOworIAorQEAgLTI3MzksNiArMjk0MCwxNTQgQEAKKyAgIHJldHVybiBjaGFyczsKKyB9CisgCisrI2lmZGVmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBpbnQKKytjaGFyX3RvX2NsdW1wX211bHRpIChjaGFyIGMpCisreworKyAgc3RhdGljIHNpemVfdCBtYmNfcG9zID0gMDsKKysgIHN0YXRpYyBjaGFyIG1iY1tNQl9MRU5fTUFYXSA9IHsnXDAnfTsKKysgIHN0YXRpYyBtYnN0YXRlX3Qgc3RhdGUgPSB7J1wwJ307CisrICBtYnN0YXRlX3Qgc3RhdGVfYmFrOworKyAgd2NoYXJfdCB3YzsKKysgIHNpemVfdCBtYmxlbmd0aDsKKysgIGludCB3Y193aWR0aDsKKysgIHJlZ2lzdGVyIGNoYXIgKnMgPSBjbHVtcF9idWZmOworKyAgcmVnaXN0ZXIgaW50IGksIGo7CisrICBjaGFyIGVzY19idWZmWzRdOworKyAgaW50IHdpZHRoOworKyAgaW50IGNoYXJzOworKyAgaW50IGNoYXJzX3Blcl9jID0gODsKKysKKysgIHN0YXRlX2JhayA9IHN0YXRlOworKyAgbWJjW21iY19wb3MrK10gPSBjOworKyAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIG1iYywgbWJjX3BvcywgJnN0YXRlKTsKKysKKysgIHdpZHRoID0gMDsKKysgIGNoYXJzID0gMDsKKysgIHdoaWxlIChtYmNfcG9zID4gMCkKKysgICAgeworKyAgICAgIHN3aXRjaCAobWJsZW5ndGgpCisrCXsKKysJY2FzZSAoc2l6ZV90KS0yOgorKwkgIHN0YXRlID0gc3RhdGVfYmFrOworKwkgIHJldHVybiAwOworKworKwljYXNlIChzaXplX3QpLTE6CisrCSAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgbWJsZW5ndGggPSAxOworKworKwkgIGlmICh1c2VfZXNjX3NlcXVlbmNlIHx8IHVzZV9jbnRybF9wcmVmaXgpCisrCSAgICB7CisrCSAgICAgIHdpZHRoID0gKzQ7CisrCSAgICAgIGNoYXJzID0gKzQ7CisrCSAgICAgICpzKysgPSAnXFwnOworKwkgICAgICBzcHJpbnRmIChlc2NfYnVmZiwgIiUwM28iLCBtYmNbMF0pOworKwkgICAgICBmb3IgKGkgPSAwOyBpIDw9IDI7ICsraSkKKysJCSpzKysgPSAoaW50KSBlc2NfYnVmZltpXTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIHdpZHRoICs9IDE7CisrCSAgICAgIGNoYXJzICs9IDE7CisrCSAgICAgICpzKysgPSBtYmNbMF07CisrCSAgICB9CisrCSAgYnJlYWs7CisrCisrCWNhc2UgMDoKKysJICBtYmxlbmd0aCA9IDE7CisrCQkvKiBGYWxsIHRocm91Z2ggKi8KKysKKysJZGVmYXVsdDoKKysJICBpZiAobWVtY21wIChtYmMsIGlucHV0X3RhYl9jaGFyLCBtYmxlbmd0aCkgPT0gMCkKKysJICAgIGNoYXJzX3Blcl9jID0gY2hhcnNfcGVyX2lucHV0X3RhYjsKKysKKysJICBpZiAobWVtY21wIChtYmMsIGlucHV0X3RhYl9jaGFyLCBtYmxlbmd0aCkgPT0gMCB8fCBjID09ICdcdCcpCisrCSAgICB7CisrCSAgICAgIGludCAgd2lkdGhfaW5jOworKworKwkgICAgICB3aWR0aF9pbmMgPSBUQUJfV0lEVEggKGNoYXJzX3Blcl9jLCBpbnB1dF9wb3NpdGlvbik7CisrCSAgICAgIHdpZHRoICs9IHdpZHRoX2luYzsKKysKKysJICAgICAgaWYgKHVudGFiaWZ5X2lucHV0KQorKwkJeworKwkJICBmb3IgKGkgPSB3aWR0aF9pbmM7IGk7IC0taSkKKysJCSAgICAqcysrID0gJyAnOworKwkJICBjaGFycyArPSB3aWR0aF9pbmM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgZm9yIChpID0gMDsgaSA8ICBtYmxlbmd0aDsgaSsrKQorKwkJICAgICpzKysgPSBtYmNbaV07CisrCQkgIGNoYXJzICs9IG1ibGVuZ3RoOworKwkJfQorKwkgICAgfQorKwkgIGVsc2UgaWYgKCh3Y193aWR0aCA9IHdjd2lkdGggKHdjKSkgPCAxKQorKwkgICAgeworKwkgICAgICBpZiAodXNlX2VzY19zZXF1ZW5jZSkKKysJCXsKKysJCSAgZm9yIChpID0gMDsgaSA8IG1ibGVuZ3RoOyBpKyspCisrCQkgICAgeworKwkJICAgICAgd2lkdGggKz0gNDsKKysJCSAgICAgIGNoYXJzICs9IDQ7CisrCQkgICAgICAqcysrID0gJ1xcJzsKKysJCSAgICAgIHNwcmludGYgKGVzY19idWZmLCAiJTAzbyIsIGMpOworKwkJICAgICAgZm9yIChqID0gMDsgaiA8PSAyOyArK2opCisrCQkJKnMrKyA9IChpbnQpIGVzY19idWZmW2pdOworKwkJICAgIH0KKysJCX0KKysJICAgICAgZWxzZSBpZiAodXNlX2NudHJsX3ByZWZpeCkKKysJCXsKKysJCSAgaWYgKHdjIDwgMDIwMCkKKysJCSAgICB7CisrCQkgICAgICB3aWR0aCArPSAyOworKwkJICAgICAgY2hhcnMgKz0gMjsKKysJCSAgICAgICpzKysgPSAnXic7CisrCQkgICAgICAqcysrID0gd2MgXiAwMTAwOworKwkJICAgIH0KKysJCSAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIGZvciAoaSA9IDA7IGkgPCBtYmxlbmd0aDsgaSsrKQorKwkJCXsKKysJCQkgIHdpZHRoICs9IDQ7CisrCQkJICBjaGFycyArPSA0OworKwkJCSAgKnMrKyA9ICdcXCc7CisrCQkJICBzcHJpbnRmIChlc2NfYnVmZiwgIiUwM28iLCBjKTsKKysJCQkgIGZvciAoaiA9IDA7IGogPD0gMjsgKytqKQorKwkJCSAgICAqcysrID0gKGludCkgZXNjX2J1ZmZbal07CisrCQkJfQorKwkJICAgIH0KKysJCX0KKysJICAgICAgZWxzZSBpZiAod2MgPT0gTCdcYicpCisrCQl7CisrCQkgIHdpZHRoICs9IC0xOworKwkJICBjaGFycyArPSAxOworKwkJICAqcysrID0gYzsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICB3aWR0aCArPSAwOworKwkJICBjaGFycyArPSBtYmxlbmd0aDsKKysJCSAgZm9yIChpID0gMDsgaSA8IG1ibGVuZ3RoOyBpKyspCisrCQkgICAgKnMrKyA9IG1iY1tpXTsKKysJCX0KKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIHdpZHRoICs9IHdjX3dpZHRoOworKwkgICAgICBjaGFycyArPSBtYmxlbmd0aDsKKysJICAgICAgZm9yIChpID0gMDsgaSA8IG1ibGVuZ3RoOyBpKyspCisrCQkqcysrID0gbWJjW2ldOworKwkgICAgfQorKwl9CisrICAgICAgbWVtbW92ZSAobWJjLCBtYmMgKyBtYmxlbmd0aCwgTUJfQ1VSX01BWCAtIG1ibGVuZ3RoKTsKKysgICAgICBtYmNfcG9zIC09IG1ibGVuZ3RoOworKyAgICB9CisrCisrICBpbnB1dF9wb3NpdGlvbiArPSB3aWR0aDsKKysgIHJldHVybiBjaGFyczsKKyt9CisrI2VuZGlmCisrCisgLyogV2UndmUganVzdCBwcmludGVkIHNvbWUgZmlsZXMgYW5kIG5lZWQgdG8gY2xlYW4gdXAgdGhpbmdzIGJlZm9yZQorICAgIGxvb2tpbmcgZm9yIG1vcmUgb3B0aW9ucyBhbmQgcHJpbnRpbmcgdGhlIG5leHQgYmF0Y2ggb2YgZmlsZXMuCisgCistLS0gY29yZXV0aWxzLTYuOCsvc3JjL2N1dC5jLmkxOG4JMjAwNy0wMS0xNCAxNTo0MToyOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky9zcmMvY3V0LmMJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yOSw2ICsyOSwxMSBAQAorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworKy8qIEdldCBtYnN0YXRlX3QsIG1icnRvd2MoKS4gICovCisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgCisgI2luY2x1ZGUgImVycm9yLmgiCitAQCAtMzcsNiArNDIsMTggQEAKKyAjaW5jbHVkZSAicXVvdGUuaCIKKyAjaW5jbHVkZSAieHN0cm5kdXAuaCIKKyAKKysvKiBNQl9MRU5fTUFYIGlzIGluY29ycmVjdGx5IGRlZmluZWQgdG8gYmUgMSBpbiBhdCBsZWFzdCBvbmUgR0NDCisrICAgaW5zdGFsbGF0aW9uOyB3b3JrIGFyb3VuZCB0aGlzIGNvbmZpZ3VyYXRpb24gZXJyb3IuCSovCisrI2lmICFkZWZpbmVkIE1CX0xFTl9NQVggfHwgTUJfTEVOX01BWCA8IDIKKysjIHVuZGVmIE1CX0xFTl9NQVgKKysjIGRlZmluZSBNQl9MRU5fTUFYIDE2CisrI2VuZGlmCisrCisrLyogU29tZSBzeXN0ZW1zLCBsaWtlIEJlT1MsIGhhdmUgbXVsdGlieXRlIGVuY29kaW5ncyBidXQgbGFjayBtYnN0YXRlX3QuICAqLworKyNpZiBIQVZFX01CUlRPV0MgJiYgZGVmaW5lZCBtYnN0YXRlX3QKKysjIGRlZmluZSBtYnJ0b3djKHB3YywgcywgbiwgcHMpIChtYnJ0b3djKSAocHdjLCBzLCBuLCAwKQorKyNlbmRpZgorKworIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworICNkZWZpbmUgUFJPR1JBTV9OQU1FICJjdXQiCisgCitAQCAtNjcsNiArODQsNTIgQEAKKyAgICAgfQkJCQkJCQlcCisgICB3aGlsZSAoMCkKKyAKKysvKiBSZWZpbGwgdGhlIGJ1ZmZlciBCVUYgdG8gZ2V0IGEgbXVsdGlieXRlIGNoYXJhY3Rlci4gKi8KKysjZGVmaW5lIFJFRklMTF9CVUZGRVIoQlVGLCBCVUZQT1MsIEJVRkxFTiwgU1RSRUFNKQkJCVwKKysgIGRvCQkJCQkJCQkJXAorKyAgICB7CQkJCQkJCQkJXAorKyAgICAgIGlmIChCVUZMRU4gPCBNQl9MRU5fTUFYICYmICFmZW9mIChTVFJFQU0pICYmICFmZXJyb3IgKFNUUkVBTSkpCVwKKysJewkJCQkJCQkJXAorKwkgIG1lbW1vdmUgKEJVRiwgQlVGUE9TLCBCVUZMRU4pOwkJCQlcCisrCSAgQlVGTEVOICs9IGZyZWFkIChCVUYgKyBCVUZMRU4sIHNpemVvZihjaGFyKSwgQlVGU0laLCBTVFJFQU0pOyBcCisrCSAgQlVGUE9TID0gQlVGOwkJCQkJCQlcCisrCX0JCQkJCQkJCVwKKysgICAgfQkJCQkJCQkJCVwKKysgIHdoaWxlICgwKQorKworKy8qIEdldCB3aWRlIGNoYXJhY3RlciBvbiBCVUZQT1MuIEJVRlBPUyBpcyBub3QgaW5jbHVkZWQgYWZ0ZXIgdGhhdC4KKysgICBJZiBieXRlIHNlcXVlbmNlIGlzIG5vdCB2YWxpZCBhcyBhIGNoYXJhY3RlciwgQ09OVkZBSUwgaXMgMS4gT3RoZXJ3aXNlIDAuICovIAorKyNkZWZpbmUgR0VUX05FWFRfV0NfRlJPTV9CVUZGRVIoV0MsIEJVRlBPUywgQlVGTEVOLCBNQkxFTkdUSCwgU1RBVEUsIENPTlZGQUlMKSBcCisrICBkbwkJCQkJCQkJCVwKKysgICAgewkJCQkJCQkJCVwKKysgICAgICBtYnN0YXRlX3Qgc3RhdGVfYmFrOwkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgICAgaWYgKEJVRkxFTiA8IDEpCQkJCQkJCVwKKysJewkJCQkJCQkJXAorKwkgIFdDID0gV0VPRjsJCQkJCQkJXAorKwkgIGJyZWFrOwkJCQkJCQlcCisrCX0JCQkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgICAgLyogR2V0IGEgd2lkZSBjaGFyYWN0ZXIuICovCQkJCQlcCisrICAgICAgQ09OVkZBSUwgPSAwOwkJCQkJCQlcCisrICAgICAgc3RhdGVfYmFrID0gU1RBVEU7CQkJCQkJXAorKyAgICAgIE1CTEVOR1RIID0gbWJydG93YyAoKHdjaGFyX3QgKikmV0MsIEJVRlBPUywgQlVGTEVOLCAmU1RBVEUpOwlcCisrCQkJCQkJCQkJXAorKyAgICAgIHN3aXRjaCAoTUJMRU5HVEgpCQkJCQkJCVwKKysJewkJCQkJCQkJXAorKwljYXNlIChzaXplX3QpLTE6CQkJCQkJXAorKwljYXNlIChzaXplX3QpLTI6CQkJCQkJXAorKwkgIENPTlZGQUlMKys7CQkJCQkJCVwKKysJICBTVEFURSA9IHN0YXRlX2JhazsJCQkJCQlcCisrCSAgLyogRmFsbCB0aHJvdWduLiAqLwkJCQkJCVwKKysJCQkJCQkJCQlcCisrCWNhc2UgMDoJCQkJCQkJCVwKKysJICBNQkxFTkdUSCA9IDE7CQkJCQkJCVwKKysJICBicmVhazsJCQkJCQkJXAorKwl9CQkJCQkJCQlcCisrICAgIH0JCQkJCQkJCQlcCisrICB3aGlsZSAoMCkKKysKKyBzdHJ1Y3QgcmFuZ2VfcGFpcgorICAgeworICAgICBzaXplX3QgbG87CitAQCAtODUsNyArMTQ4LDcgQEAKKyAvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBmb3IgRklFTERfMV9CVUZGRVIuICAqLworIHN0YXRpYyBzaXplX3QgZmllbGRfMV9idWZzaXplOworIAorLS8qIFRoZSBsYXJnZXN0IGZpZWxkIG9yIGJ5dGUgaW5kZXggdXNlZCBhcyBhbiBlbmRwb2ludCBvZiBhIGNsb3NlZAorKy8qIFRoZSBsYXJnZXN0IGJ5dGUsIGNoYXJhY3RlciBvciBmaWVsZCBpbmRleCB1c2VkIGFzIGFuIGVuZHBvaW50IG9mIGEgY2xvc2VkCisgICAgb3IgZGVnZW5lcmF0ZSByYW5nZSBzcGVjaWZpY2F0aW9uOyAgdGhpcyBkb2Vzbid0IGluY2x1ZGUgdGhlIHN0YXJ0aW5nCisgICAgaW5kZXggb2YgcmlnaHQtb3Blbi1lbmRlZCByYW5nZXMuICBGb3IgZXhhbXBsZSwgd2l0aCBlaXRoZXIgcmFuZ2Ugc3BlYworICAgIGAyLTUsOS0nLCBgMi0zLDUsOS0nIHRoaXMgdmFyaWFibGUgd291bGQgYmUgc2V0IHRvIDUuICAqLworQEAgLTk3LDEwICsxNjAsMTEgQEAKKyAKKyAvKiBUaGlzIGlzIGEgYml0IHZlY3Rvci4KKyAgICBJbiBieXRlIG1vZGUsIHdoaWNoIGJ5dGVzIHRvIG91dHB1dC4KKysgICBJbiBjaGFyYWN0ZXIgbW9kZSwgd2hpY2ggY2hhcmFjdGVycyB0byBvdXRwdXQuCisgICAgSW4gZmllbGQgbW9kZSwgd2hpY2ggREVMSU0tc2VwYXJhdGVkIGZpZWxkcyB0byBvdXRwdXQuCistICAgQm90aCBieXRlcyBhbmQgZmllbGRzIGFyZSBudW1iZXJlZCBzdGFydGluZyB3aXRoIDEsCisrICAgQnl0ZXMsIGNoYXJhY3RlcnMgYW5kIGZpZWxkcyBhcmUgbnVtYmVyZWQgc3RhcnRpbmcgd2l0aCAxLAorICAgIHNvIHRoZSB6ZXJvdGggYml0IG9mIHRoaXMgYXJyYXkgaXMgdW51c2VkLgorLSAgIEEgZmllbGQgb3IgYnl0ZSBLIGhhcyBiZWVuIHNlbGVjdGVkIGlmCisrICAgQSBieXRlLCBjaGFyYWN0ZXIgb3IgZmllbGQgSyBoYXMgYmVlbiBzZWxlY3RlZCBpZgorICAgIChLIDw9IE1BWF9SQU5HRV9FTkRQT0lOVCBhbmQgaXNfcHJpbnRhYmxlX2ZpZWxkKEspKQorICAgICB8fCAoRU9MX1JBTkdFX1NUQVJUID4gMCAmJiBLID49IEVPTF9SQU5HRV9TVEFSVCkuICAqLworIHN0YXRpYyB1bnNpZ25lZCBjaGFyICpwcmludGFibGVfZmllbGQ7CitAQCAtMTA5LDkgKzE3MywxMiBAQAorICAgeworICAgICB1bmRlZmluZWRfbW9kZSwKKyAKKy0gICAgLyogT3V0cHV0IGNoYXJhY3RlcnMgdGhhdCBhcmUgaW4gdGhlIGdpdmVuIGJ5dGVzLiAqLworKyAgICAvKiBPdXRwdXQgYnl0ZXMgdGhhdCBhcmUgYXQgdGhlIGdpdmVuIHBvc2l0aW9ucy4gKi8KKyAgICAgYnl0ZV9tb2RlLAorIAorKyAgICAvKiBPdXRwdXQgY2hhcmFjdGVycyB0aGF0IGFyZSBhdCB0aGUgZ2l2ZW4gcG9zaXRpb25zLiAqLworKyAgICBjaGFyYWN0ZXJfbW9kZSwKKysKKyAgICAgLyogT3V0cHV0IHRoZSBnaXZlbiBkZWxpbWV0ZXItc2VwYXJhdGVkIGZpZWxkcy4gKi8KKyAgICAgZmllbGRfbW9kZQorICAgfTsKK0BAIC0xMjEsNiArMTg4LDEzIEBACisgCisgc3RhdGljIGVudW0gb3BlcmF0aW5nX21vZGUgb3BlcmF0aW5nX21vZGU7CisgCisrLyogSWYgbm9uemVybywgd2hlbiBpbiBieXRlIG1vZGUsIGRvbid0IHNwbGl0IG11bHRpYnl0ZSBjaGFyYWN0ZXJzLiAgKi8KKytzdGF0aWMgaW50IGJ5dGVfbW9kZV9jaGFyYWN0ZXJfYXdhcmU7CisrCisrLyogSWYgbm9uemVybywgdGhlIGZ1bmN0aW9uIGZvciBzaW5nbGUgYnl0ZSBsb2NhbGUgaXMgd29yaworKyAgIGlmIHRoaXMgcHJvZ3JhbSBydW5zIG9uIG11bHRpYnl0ZSBsb2NhbGUuICovCisrc3RhdGljIGludCBmb3JjZV9zaW5nbGVieXRlX21vZGU7CisrCisgLyogSWYgdHJ1ZSBkbyBub3Qgb3V0cHV0IGxpbmVzIGNvbnRhaW5pbmcgbm8gZGVsaW1ldGVyIGNoYXJhY3RlcnMuCisgICAgT3RoZXJ3aXNlLCBhbGwgc3VjaCBsaW5lcyBhcmUgcHJpbnRlZC4gIFRoaXMgb3B0aW9uIGlzIHZhbGlkIG9ubHkKKyAgICB3aXRoIGZpZWxkIG1vZGUuICAqLworQEAgLTEzMiw2ICsyMDYsOSBAQAorIAorIC8qIFRoZSBkZWxpbWV0ZXIgY2hhcmFjdGVyIGZvciBmaWVsZCBtb2RlLiAqLworIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRlbGltOworKyNpZiBIQVZFX1dDSEFSX0gKKytzdGF0aWMgd2NoYXJfdCB3Y2RlbGltOworKyNlbmRpZgorIAorIC8qIFRydWUgaWYgdGhlIC0tb3V0cHV0LWRlbGltaXRlcj1TVFJJTkcgb3B0aW9uIHdhcyBzcGVjaWZpZWQuICAqLworIHN0YXRpYyBib29sIG91dHB1dF9kZWxpbWl0ZXJfc3BlY2lmaWVkOworQEAgLTIwNSw3ICsyODIsNyBAQAorICAgLWYsIC0tZmllbGRzPUxJU1QgICAgICAgc2VsZWN0IG9ubHkgdGhlc2UgZmllbGRzOyAgYWxzbyBwcmludCBhbnkgbGluZVxuXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNvbnRhaW5zIG5vIGRlbGltaXRlciBjaGFyYWN0ZXIsIHVubGVzc1xuXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgLXMgb3B0aW9uIGlzIHNwZWNpZmllZFxuXAorLSAgLW4gICAgICAgICAgICAgICAgICAgICAgKGlnbm9yZWQpXG5cCisrICAtbiAgICAgICAgICAgICAgICAgICAgICB3aXRoIC1iOiBkb24ndCBzcGxpdCBtdWx0aWJ5dGUgY2hhcmFjdGVyc1xuXAorICIpLCBzdGRvdXQpOworICAgICAgIGZwdXRzIChfKCJcCisgICAgICAgLS1jb21wbGVtZW50ICAgICAgICBjb21wbGVtZW50IHRoZSBzZXQgb2Ygc2VsZWN0ZWQgYnl0ZXMsIGNoYXJhY3RlcnNcblwKK0BAIC0zNjIsNyArNDM5LDcgQEAKKyAJICBpbl9kaWdpdHMgPSBmYWxzZTsKKyAJICAvKiBTdGFydGluZyBhIHJhbmdlLiAqLworIAkgIGlmIChkYXNoX2ZvdW5kKQorLQkgICAgRkFUQUxfRVJST1IgKF8oImludmFsaWQgYnl0ZSBvciBmaWVsZCBsaXN0IikpOworKwkgICAgRkFUQUxfRVJST1IgKF8oImludmFsaWQgYnl0ZSwgY2hhcmFjdGVyIG9yIGZpZWxkIGxpc3QiKSk7CisgCSAgZGFzaF9mb3VuZCA9IHRydWU7CisgCSAgZmllbGRzdHIrKzsKKyAKK0BAIC0zODcsMTQgKzQ2NCwxNiBAQAorIAkgICAgICBpZiAodmFsdWUgPT0gMCkKKyAJCXsKKyAJCSAgLyogYG4tJy4gIEZyb20gYGluaXRpYWwnIHRvIGVuZCBvZiBsaW5lLiAqLworLQkJICBlb2xfcmFuZ2Vfc3RhcnQgPSBpbml0aWFsOworKwkJICBpZiAoZW9sX3JhbmdlX3N0YXJ0ID09IDAgfHwKKysJCSAgICAgIChlb2xfcmFuZ2Vfc3RhcnQgIT0gMCAmJiBlb2xfcmFuZ2Vfc3RhcnQgPiBpbml0aWFsKSkKKysJCSAgICBlb2xfcmFuZ2Vfc3RhcnQgPSBpbml0aWFsOworIAkJICBmaWVsZF9mb3VuZCA9IHRydWU7CisgCQl9CisgCSAgICAgIGVsc2UKKyAJCXsKKyAJCSAgLyogYG0tbicgb3IgYC1uJyAoMS1uKS4gKi8KKyAJCSAgaWYgKHZhbHVlIDwgaW5pdGlhbCkKKy0JCSAgICBGQVRBTF9FUlJPUiAoXygiaW52YWxpZCBieXRlIG9yIGZpZWxkIGxpc3QiKSk7CisrCQkgICAgRkFUQUxfRVJST1IgKF8oImludmFsaWQgYnl0ZSwgY2hhcmFjdGVyIG9yIGZpZWxkIGxpc3QiKSk7CisgCisgCQkgIC8qIElzIHRoZXJlIGFscmVhZHkgYSByYW5nZSBnb2luZyB0byBlbmQgb2YgbGluZT8gKi8KKyAJCSAgaWYgKGVvbF9yYW5nZV9zdGFydCAhPSAwKQorQEAgLTQ2Nyw2ICs1NDYsOSBAQAorIAkgICAgICBpZiAob3BlcmF0aW5nX21vZGUgPT0gYnl0ZV9tb2RlKQorIAkJZXJyb3IgKDAsIDAsCisgCQkgICAgICAgXygiYnl0ZSBvZmZzZXQgJXMgaXMgdG9vIGxhcmdlIiksIHF1b3RlIChiYWRfbnVtKSk7CisrCSAgICAgIGVsc2UgaWYgKG9wZXJhdGluZ19tb2RlID09IGNoYXJhY3Rlcl9tb2RlKQorKwkJZXJyb3IgKDAsIDAsCisrCQkgICAgICAgXygiY2hhcmFjdGVyIG9mZnNldCAlcyBpcyB0b28gbGFyZ2UiKSwgcXVvdGUgKGJhZF9udW0pKTsKKyAJICAgICAgZWxzZQorIAkJZXJyb3IgKDAsIDAsCisgCQkgICAgICAgXygiZmllbGQgbnVtYmVyICVzIGlzIHRvbyBsYXJnZSIpLCBxdW90ZSAoYmFkX251bSkpOworQEAgLTQ3Nyw3ICs1NTksNyBAQAorIAkgIGZpZWxkc3RyKys7CisgCX0KKyAgICAgICBlbHNlCistCUZBVEFMX0VSUk9SIChfKCJpbnZhbGlkIGJ5dGUgb3IgZmllbGQgbGlzdCIpKTsKKysJRkFUQUxfRVJST1IgKF8oImludmFsaWQgYnl0ZSwgY2hhcmFjdGVyIG9yIGZpZWxkIGxpc3QiKSk7CisgICAgIH0KKyAKKyAgIG1heF9yYW5nZV9lbmRwb2ludCA9IDA7CitAQCAtNTcwLDYgKzY1Miw2MyBAQAorICAgICB9CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKysvKiBUaGlzIGZ1bmN0aW9uIGlzIGluIHVzZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlLgorKworKyAgIDEuIFJlYWQgZnJvbSB0aGUgc3RyZWFtIFNUUkVBTSwgcHJpbnRpbmcgdG8gc3RhbmRhcmQgb3V0cHV0IGFueSBzZWxlY3RlZAorKyAgIGNoYXJhY3RlcnMuIAorKworKyAgIDIuIFJlYWQgZnJvbSBzdHJlYW0gU1RSRUFNLCBwcmludGluZyB0byBzdGFuZGFyZCBvdXRwdXQgYW55IHNlbGVjdGVkIGJ5dGVzLAorKyAgIHdpdGhvdXQgc3BsaXR0aW5nIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLiAgKi8KKysgCisrc3RhdGljIHZvaWQKKytjdXRfY2hhcmFjdGVyc19vcl9jdXRfYnl0ZXNfbm9fc3BsaXQgKEZJTEUgKnN0cmVhbSkKKyt7CisrICBpbnQgaWR4OwkJLyogbnVtYmVyIG9mIGJ5dGVzIG9yIGNoYXJhY3RlcnMgaW4gdGhlIGxpbmUgc28gZmFyLiAqLworKyAgY2hhciBidWZbTUJfTEVOX01BWCArIEJVRlNJWl07ICAvKiBGb3Igc3Bvb2xpbmcgYSByZWFkIGJ5dGUgc2VxdWVuY2UuICovCisrICBjaGFyICpidWZwb3M7CQkvKiBOZXh0IHJlYWQgcG9zaXRpb24gb2YgQlVGLiAqLworKyAgc2l6ZV90IGJ1ZmxlbjsJLyogVGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZSBpbiBidWYuICovCisrICB3aW50X3Qgd2M7CQkvKiBBIGdvdHRlbiB3aWRlIGNoYXJhY3Rlci4gKi8KKysgIHNpemVfdCBtYmxlbmd0aDsJLyogVGhlIGJ5dGUgc2l6ZSBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIgd2hpY2ggc2hvd3MKKysJCQkgICBhcyBzYW1lIGNoYXJhY3RlciBhcyBXQy4gKi8KKysgIG1ic3RhdGVfdCBzdGF0ZTsJLyogU3RhdGUgb2YgdGhlIHN0cmVhbS4gKi8KKysgIGludCBjb252ZmFpbDsJCS8qIDEsIHdoZW4gY29udmVyc2lvbiBpcyBmYWlsZWQuIE90aGVyd2lzZSAwLiAqLworKworKyAgaWR4ID0gMDsKKysgIGJ1ZmxlbiA9IDA7CisrICBidWZwb3MgPSBidWY7CisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgd2hpbGUgKDEpCisrICAgIHsKKysgICAgICBSRUZJTExfQlVGRkVSIChidWYsIGJ1ZnBvcywgYnVmbGVuLCBzdHJlYW0pOworKworKyAgICAgIEdFVF9ORVhUX1dDX0ZST01fQlVGRkVSICh3YywgYnVmcG9zLCBidWZsZW4sIG1ibGVuZ3RoLCBzdGF0ZSwgY29udmZhaWwpOworKworKyAgICAgIGlmICh3YyA9PSBXRU9GKQorKwl7CisrCSAgaWYgKGlkeCA+IDApCisrCSAgICBwdXRjaGFyICgnXG4nKTsKKysJICBicmVhazsKKysJfQorKyAgICAgIGVsc2UgaWYgKHdjID09IEwnXG4nKQorKwl7CisrCSAgcHV0Y2hhciAoJ1xuJyk7CisrCSAgaWR4ID0gMDsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGlkeCArPSAob3BlcmF0aW5nX21vZGUgPT0gYnl0ZV9tb2RlKSA/IG1ibGVuZ3RoIDogMTsKKysJICBpZiAocHJpbnRfa3RoIChpZHgsIE5VTEwpKQorKwkgICAgZndyaXRlIChidWZwb3MsIG1ibGVuZ3RoLCBzaXplb2YoY2hhciksIHN0ZG91dCk7CisrCX0KKysKKysgICAgICBidWZsZW4gLT0gbWJsZW5ndGg7CisrICAgICAgYnVmcG9zICs9IG1ibGVuZ3RoOworKyAgICB9CisrfQorKyNlbmRpZgorKwkJICAgCisgLyogUmVhZCBmcm9tIHN0cmVhbSBTVFJFQU0sIHByaW50aW5nIHRvIHN0YW5kYXJkIG91dHB1dCBhbnkgc2VsZWN0ZWQgZmllbGRzLiAgKi8KKyAKKyBzdGF0aWMgdm9pZAorQEAgLTY5MiwxMyArODMxLDE5MiBAQAorICAgICB9CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgdm9pZAorK2N1dF9maWVsZHNfbWIgKEZJTEUgKnN0cmVhbSkKKyt7CisrICBpbnQgYzsKKysgIHVuc2lnbmVkIGludCBmaWVsZF9pZHg7CisrICBpbnQgZm91bmRfYW55X3NlbGVjdGVkX2ZpZWxkOworKyAgaW50IGJ1ZmZlcl9maXJzdF9maWVsZDsKKysgIGludCBlbXB0eV9pbnB1dDsKKysgIGNoYXIgYnVmW01CX0xFTl9NQVggKyBCVUZTSVpdOyAgLyogRm9yIHNwb29saW5nIGEgcmVhZCBieXRlIHNlcXVlbmNlLiAqLworKyAgY2hhciAqYnVmcG9zOwkJLyogTmV4dCByZWFkIHBvc2l0aW9uIG9mIEJVRi4gKi8KKysgIHNpemVfdCBidWZsZW47CS8qIFRoZSBsZW5ndGggb2YgdGhlIGJ5dGUgc2VxdWVuY2UgaW4gYnVmLiAqLworKyAgd2ludF90IHdjID0gMDsJLyogQSBnb3R0ZW4gd2lkZSBjaGFyYWN0ZXIuICovCisrICBzaXplX3QgbWJsZW5ndGg7CS8qIFRoZSBieXRlIHNpemUgb2YgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyIHdoaWNoIHNob3dzCisrCQkJICAgYXMgc2FtZSBjaGFyYWN0ZXIgYXMgV0MuICovCisrICBtYnN0YXRlX3Qgc3RhdGU7CS8qIFN0YXRlIG9mIHRoZSBzdHJlYW0uICovCisrICBpbnQgY29udmZhaWw7CQkvKiAxLCB3aGVuIGNvbnZlcnNpb24gaXMgZmFpbGVkLiBPdGhlcndpc2UgMC4gKi8KKysKKysgIGZvdW5kX2FueV9zZWxlY3RlZF9maWVsZCA9IDA7CisrICBmaWVsZF9pZHggPSAxOworKyAgYnVmcG9zID0gYnVmOworKyAgYnVmbGVuID0gMDsKKysgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCisrICBjID0gZ2V0YyAoc3RyZWFtKTsKKysgIGVtcHR5X2lucHV0ID0gKGMgPT0gRU9GKTsKKysgIGlmIChjICE9IEVPRikKKysgICAgdW5nZXRjIChjLCBzdHJlYW0pOworKyAgZWxzZQorKyAgICB3YyA9IFdFT0Y7CisrCisrICAvKiBUbyBzdXBwb3J0IHRoZSBzZW1hbnRpY3Mgb2YgdGhlIC1zIGZsYWcsIHdlIG1heSBoYXZlIHRvIGJ1ZmZlcgorKyAgICAgYWxsIG9mIHRoZSBmaXJzdCBmaWVsZCB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBpcyBgZGVsaW1pdGVkLicKKysgICAgIEJ1dCB0aGF0IGlzIHVubmVjZXNzYXJ5IGlmIGFsbCBub24tZGVsaW1pdGVkIGxpbmVzIG11c3QgYmUgcHJpbnRlZAorKyAgICAgYW5kIHRoZSBmaXJzdCBmaWVsZCBoYXMgYmVlbiBzZWxlY3RlZCwgb3IgaWYgbm9uLWRlbGltaXRlZCBsaW5lcworKyAgICAgbXVzdCBiZSBzdXBwcmVzc2VkIGFuZCB0aGUgZmlyc3QgZmllbGQgaGFzICpub3QqIGJlZW4gc2VsZWN0ZWQuCisrICAgICBUaGF0IGlzIGJlY2F1c2UgYSBub24tZGVsaW1pdGVkIGxpbmUgaGFzIGV4YWN0bHkgb25lIGZpZWxkLiAgKi8KKysgIGJ1ZmZlcl9maXJzdF9maWVsZCA9IChzdXBwcmVzc19ub25fZGVsaW1pdGVkIF4gIXByaW50X2t0aCAoMSwgTlVMTCkpOworKworKyAgd2hpbGUgKDEpCisrICAgIHsKKysgICAgICBpZiAoZmllbGRfaWR4ID09IDEgJiYgYnVmZmVyX2ZpcnN0X2ZpZWxkKQorKwl7CisrCSAgaW50IGxlbiA9IDA7CisrCisrCSAgd2hpbGUgKDEpCisrCSAgICB7CisrCSAgICAgIFJFRklMTF9CVUZGRVIgKGJ1ZiwgYnVmcG9zLCBidWZsZW4sIHN0cmVhbSk7CisrCisrCSAgICAgIEdFVF9ORVhUX1dDX0ZST01fQlVGRkVSCisrCQkod2MsIGJ1ZnBvcywgYnVmbGVuLCBtYmxlbmd0aCwgc3RhdGUsIGNvbnZmYWlsKTsKKysKKysJICAgICAgaWYgKHdjID09IFdFT0YpCisrCQlicmVhazsKKysKKysJICAgICAgZmllbGRfMV9idWZmZXIgPSB4cmVhbGxvYyAoZmllbGRfMV9idWZmZXIsIGxlbiArIG1ibGVuZ3RoKTsKKysJICAgICAgbWVtY3B5IChmaWVsZF8xX2J1ZmZlciArIGxlbiwgYnVmcG9zLCBtYmxlbmd0aCk7CisrCSAgICAgIGxlbiArPSBtYmxlbmd0aDsKKysJICAgICAgYnVmbGVuIC09IG1ibGVuZ3RoOworKwkgICAgICBidWZwb3MgKz0gbWJsZW5ndGg7CisrCisrCSAgICAgIGlmICghY29udmZhaWwgJiYgKHdjID09IEwnXG4nIHx8IHdjID09IHdjZGVsaW0pKQorKwkJYnJlYWs7CisrCSAgICB9CisrCisrCSAgaWYgKHdjID09IFdFT0YpCisrCSAgICBicmVhazsKKysKKysJICAvKiBJZiB0aGUgZmlyc3QgZmllbGQgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIGxpbmUgKGl0IGlzIG5vdAorKwkgICAgIGRlbGltaXRlZCkgYW5kIHdlIGFyZSBwcmludGluZyBhbGwgbm9uLWRlbGltaXRlZCBsaW5lcywKKysJICAgICBwcmludCB0aGlzIG9uZS4gICovCisrCSAgaWYgKGNvbnZmYWlsIHx8ICghY29udmZhaWwgJiYgd2MgIT0gd2NkZWxpbSkpCisrCSAgICB7CisrCSAgICAgIGlmIChzdXBwcmVzc19ub25fZGVsaW1pdGVkKQorKwkJeworKwkJICAvKiBFbXB0eS4JKi8KKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICBmd3JpdGUgKGZpZWxkXzFfYnVmZmVyLCBzaXplb2YgKGNoYXIpLCBsZW4sIHN0ZG91dCk7CisrCQkgIC8qIE1ha2Ugc3VyZSB0aGUgb3V0cHV0IGxpbmUgaXMgbmV3bGluZSB0ZXJtaW5hdGVkLiAgKi8KKysJCSAgaWYgKGNvbnZmYWlsIHx8ICghY29udmZhaWwgJiYgd2MgIT0gTCdcbicpKQorKwkJICAgIHB1dGNoYXIgKCdcbicpOworKwkJfQorKwkgICAgICBjb250aW51ZTsKKysJICAgIH0KKysKKysJICBpZiAocHJpbnRfa3RoICgxLCBOVUxMKSkKKysJICAgIHsKKysJICAgICAgLyogUHJpbnQgdGhlIGZpZWxkLCBidXQgbm90IHRoZSB0cmFpbGluZyBkZWxpbWl0ZXIuICAqLworKwkgICAgICBmd3JpdGUgKGZpZWxkXzFfYnVmZmVyLCBzaXplb2YgKGNoYXIpLCBsZW4gLSAxLCBzdGRvdXQpOworKwkgICAgICBmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQgPSAxOworKwkgICAgfQorKwkgICsrZmllbGRfaWR4OworKwl9CisrCisrICAgICAgaWYgKHdjICE9IFdFT0YpCisrCXsKKysJICBpZiAocHJpbnRfa3RoIChmaWVsZF9pZHgsIE5VTEwpKQorKwkgICAgeworKwkgICAgICBpZiAoZm91bmRfYW55X3NlbGVjdGVkX2ZpZWxkKQorKwkJeworKwkJICBmd3JpdGUgKG91dHB1dF9kZWxpbWl0ZXJfc3RyaW5nLCBzaXplb2YgKGNoYXIpLAorKwkJCSAgb3V0cHV0X2RlbGltaXRlcl9sZW5ndGgsIHN0ZG91dCk7CisrCQl9CisrCSAgICAgIGZvdW5kX2FueV9zZWxlY3RlZF9maWVsZCA9IDE7CisrCSAgICB9CisrCisrCSAgd2hpbGUgKDEpCisrCSAgICB7CisrCSAgICAgIFJFRklMTF9CVUZGRVIgKGJ1ZiwgYnVmcG9zLCBidWZsZW4sIHN0cmVhbSk7CisrCisrCSAgICAgIEdFVF9ORVhUX1dDX0ZST01fQlVGRkVSCisrCQkod2MsIGJ1ZnBvcywgYnVmbGVuLCBtYmxlbmd0aCwgc3RhdGUsIGNvbnZmYWlsKTsKKysKKysJICAgICAgaWYgKHdjID09IFdFT0YpCisrCQlicmVhazsKKysJICAgICAgZWxzZSBpZiAoIWNvbnZmYWlsICYmICh3YyA9PSB3Y2RlbGltIHx8IHdjID09IEwnXG4nKSkKKysJCXsKKysJCSAgYnVmbGVuIC09IG1ibGVuZ3RoOworKwkJICBidWZwb3MgKz0gbWJsZW5ndGg7CisrCQkgIGJyZWFrOworKwkJfQorKworKwkgICAgICBpZiAocHJpbnRfa3RoIChmaWVsZF9pZHgsIE5VTEwpKQorKwkJZndyaXRlIChidWZwb3MsIG1ibGVuZ3RoLCBzaXplb2YoY2hhciksIHN0ZG91dCk7CisrCisrCSAgICAgIGJ1ZmxlbiAtPSBtYmxlbmd0aDsKKysJICAgICAgYnVmcG9zICs9IG1ibGVuZ3RoOworKwkgICAgfQorKwl9CisrCisrICAgICAgaWYgKCghY29udmZhaWwgfHwgd2MgPT0gTCdcbicpICYmIGJ1ZmxlbiA8IDEpCisrCXdjID0gV0VPRjsKKysKKysgICAgICBpZiAoIWNvbnZmYWlsICYmIHdjID09IHdjZGVsaW0pCisrCSsrZmllbGRfaWR4OworKyAgICAgIGVsc2UgaWYgKHdjID09IFdFT0YgfHwgKCFjb252ZmFpbCAmJiB3YyA9PSBMJ1xuJykpCisrCXsKKysJICBpZiAoZm91bmRfYW55X3NlbGVjdGVkX2ZpZWxkCisrCSAgICAgIHx8ICghZW1wdHlfaW5wdXQgJiYgIShzdXBwcmVzc19ub25fZGVsaW1pdGVkICYmIGZpZWxkX2lkeCA9PSAxKSkpCisrCSAgICBwdXRjaGFyICgnXG4nKTsKKysJICBpZiAod2MgPT0gV0VPRikKKysJICAgIGJyZWFrOworKwkgIGZpZWxkX2lkeCA9IDE7CisrCSAgZm91bmRfYW55X3NlbGVjdGVkX2ZpZWxkID0gMDsKKysJfQorKyAgICB9CisrfQorKyNlbmRpZgorKworIHN0YXRpYyB2b2lkCisgY3V0X3N0cmVhbSAoRklMRSAqc3RyZWFtKQorIHsKKy0gIGlmIChvcGVyYXRpbmdfbW9kZSA9PSBieXRlX21vZGUpCistICAgIGN1dF9ieXRlcyAoc3RyZWFtKTsKKysjaWYgSEFWRV9NQlJUT1dDCisrICBpZiAoTUJfQ1VSX01BWCA+IDEgJiYgIWZvcmNlX3NpbmdsZWJ5dGVfbW9kZSkKKysgICAgeworKyAgICAgIHN3aXRjaCAob3BlcmF0aW5nX21vZGUpCisrCXsKKysJY2FzZSBieXRlX21vZGU6CisrCSAgaWYgKGJ5dGVfbW9kZV9jaGFyYWN0ZXJfYXdhcmUpCisrCSAgICBjdXRfY2hhcmFjdGVyc19vcl9jdXRfYnl0ZXNfbm9fc3BsaXQgKHN0cmVhbSk7CisrCSAgZWxzZQorKwkgICAgY3V0X2J5dGVzIChzdHJlYW0pOworKwkgIGJyZWFrOworKworKwljYXNlIGNoYXJhY3Rlcl9tb2RlOgorKwkgIGN1dF9jaGFyYWN0ZXJzX29yX2N1dF9ieXRlc19ub19zcGxpdCAoc3RyZWFtKTsKKysJICBicmVhazsKKysKKysJY2FzZSBmaWVsZF9tb2RlOgorKwkgIGN1dF9maWVsZHNfbWIgKHN0cmVhbSk7CisrCSAgYnJlYWs7CisrCisrCWRlZmF1bHQ6CisrCSAgYWJvcnQgKCk7CisrCX0KKysgICAgfQorICAgZWxzZQorLSAgICBjdXRfZmllbGRzIChzdHJlYW0pOworKyNlbmRpZgorKyAgICB7CisrICAgICAgaWYgKG9wZXJhdGluZ19tb2RlID09IGZpZWxkX21vZGUpCisrCWN1dF9maWVsZHMgKHN0cmVhbSk7CisrICAgICAgZWxzZQorKwljdXRfYnl0ZXMgKHN0cmVhbSk7CisrICAgIH0KKyB9CisgCisgLyogUHJvY2VzcyBmaWxlIEZJTEUgdG8gc3RhbmRhcmQgb3V0cHV0LgorQEAgLTc0OCw2ICsxMDY2LDggQEAKKyAgIGJvb2wgb2s7CisgICBib29sIGRlbGltX3NwZWNpZmllZCA9IGZhbHNlOworICAgY2hhciAqc3BlY19saXN0X3N0cmluZyBJRl9MSU5UKD0gTlVMTCk7CisrICBjaGFyIG1iZGVsaW1bTUJfTEVOX01BWCArIDFdOworKyAgc2l6ZV90IGRlbGltbGVuID0gMDsKKyAKKyAgIGluaXRpYWxpemVfbWFpbiAoJmFyZ2MsICZhcmd2KTsKKyAgIHByb2dyYW1fbmFtZSA9IGFyZ3ZbMF07CitAQCAtNzcwLDcgKzEwOTAsNiBAQAorICAgICAgIHN3aXRjaCAob3B0YykKKyAJeworIAljYXNlICdiJzoKKy0JY2FzZSAnYyc6CisgCSAgLyogQnVpbGQgdGhlIGJ5dGUgbGlzdC4gKi8KKyAJICBpZiAob3BlcmF0aW5nX21vZGUgIT0gdW5kZWZpbmVkX21vZGUpCisgCSAgICBGQVRBTF9FUlJPUiAoXygib25seSBvbmUgdHlwZSBvZiBsaXN0IG1heSBiZSBzcGVjaWZpZWQiKSk7CitAQCAtNzc4LDYgKzEwOTcsMTQgQEAKKyAJICBzcGVjX2xpc3Rfc3RyaW5nID0gb3B0YXJnOworIAkgIGJyZWFrOworIAorKwljYXNlICdjJzoKKysJICAvKiBCdWlsZCB0aGUgY2hhcmFjdGVyIGxpc3QuICovCisrCSAgaWYgKG9wZXJhdGluZ19tb2RlICE9IHVuZGVmaW5lZF9tb2RlKQorKwkgICAgRkFUQUxfRVJST1IgKF8oIm9ubHkgb25lIHR5cGUgb2YgbGlzdCBtYXkgYmUgc3BlY2lmaWVkIikpOworKwkgIG9wZXJhdGluZ19tb2RlID0gY2hhcmFjdGVyX21vZGU7CisrCSAgc3BlY19saXN0X3N0cmluZyA9IG9wdGFyZzsKKysJICBicmVhazsKKysKKyAJY2FzZSAnZic6CisgCSAgLyogQnVpbGQgdGhlIGZpZWxkIGxpc3QuICovCisgCSAgaWYgKG9wZXJhdGluZ19tb2RlICE9IHVuZGVmaW5lZF9tb2RlKQorQEAgLTc4OSwxMCArMTExNiwzNSBAQAorIAljYXNlICdkJzoKKyAJICAvKiBOZXcgZGVsaW1pdGVyLiAqLworIAkgIC8qIEludGVycHJldCAtZCAnJyB0byBtZWFuIGB1c2UgdGhlIE5VTCBieXRlIGFzIHRoZSBkZWxpbWl0ZXIuJyAgKi8KKy0JICBpZiAob3B0YXJnWzBdICE9ICdcMCcgJiYgb3B0YXJnWzFdICE9ICdcMCcpCistCSAgICBGQVRBTF9FUlJPUiAoXygidGhlIGRlbGltaXRlciBtdXN0IGJlIGEgc2luZ2xlIGNoYXJhY3RlciIpKTsKKy0JICBkZWxpbSA9IG9wdGFyZ1swXTsKKy0JICBkZWxpbV9zcGVjaWZpZWQgPSB0cnVlOworKyNpZiBIQVZFX01CUlRPV0MKKysJICAgIHsKKysJICAgICAgaWYoTUJfQ1VSX01BWCA+IDEpCisrCQl7CisrCQkgIG1ic3RhdGVfdCBzdGF0ZTsKKysKKysJCSAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgZGVsaW1sZW4gPSBtYnJ0b3djICgmd2NkZWxpbSwgb3B0YXJnLCBzdHJubGVuKG9wdGFyZywgTUJfTEVOX01BWCksICZzdGF0ZSk7CisrCisrCQkgIGlmIChkZWxpbWxlbiA9PSAoc2l6ZV90KS0xIHx8IGRlbGltbGVuID09IChzaXplX3QpLTIpCisrCQkgICAgKytmb3JjZV9zaW5nbGVieXRlX21vZGU7CisrCQkgIGVsc2UKKysJCSAgICB7CisrCQkgICAgICBkZWxpbWxlbiA9IChkZWxpbWxlbiA8IDEpID8gMSA6IGRlbGltbGVuOworKwkJICAgICAgaWYgKHdjZGVsaW0gIT0gTCdcMCcgJiYgKihvcHRhcmcgKyBkZWxpbWxlbikgIT0gJ1wwJykKKysJCQlGQVRBTF9FUlJPUiAoXygidGhlIGRlbGltaXRlciBtdXN0IGJlIGEgc2luZ2xlIGNoYXJhY3RlciIpKTsKKysJCSAgICAgIG1lbWNweSAobWJkZWxpbSwgb3B0YXJnLCBkZWxpbWxlbik7CisrCQkgICAgfQorKwkJfQorKworKwkgICAgICBpZiAoTUJfQ1VSX01BWCA8PSAxIHx8IGZvcmNlX3NpbmdsZWJ5dGVfbW9kZSkKKysjZW5kaWYKKysJCXsKKysJCSAgaWYgKG9wdGFyZ1swXSAhPSAnXDAnICYmIG9wdGFyZ1sxXSAhPSAnXDAnKQorKwkJICAgIEZBVEFMX0VSUk9SIChfKCJ0aGUgZGVsaW1pdGVyIG11c3QgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIikpOworKwkJICBkZWxpbSA9ICh1bnNpZ25lZCBjaGFyKSBvcHRhcmdbMF07CisrCQl9CisrCSAgICBkZWxpbV9zcGVjaWZpZWQgPSB0cnVlOworKwkgIH0KKyAJICBicmVhazsKKyAKKyAJY2FzZSBPVVRQVVRfREVMSU1JVEVSX09QVElPTjoKK0BAIC04MDUsNiArMTE1Nyw3IEBACisgCSAgYnJlYWs7CisgCisgCWNhc2UgJ24nOgorKwkgIGJ5dGVfbW9kZV9jaGFyYWN0ZXJfYXdhcmUgPSAxOworIAkgIGJyZWFrOworIAorIAljYXNlICdzJzoKK0BAIC04MjcsNyArMTE4MCw3IEBACisgICBpZiAob3BlcmF0aW5nX21vZGUgPT0gdW5kZWZpbmVkX21vZGUpCisgICAgIEZBVEFMX0VSUk9SIChfKCJ5b3UgbXVzdCBzcGVjaWZ5IGEgbGlzdCBvZiBieXRlcywgY2hhcmFjdGVycywgb3IgZmllbGRzIikpOworIAorLSAgaWYgKGRlbGltICE9ICdcMCcgJiYgb3BlcmF0aW5nX21vZGUgIT0gZmllbGRfbW9kZSkKKysgIGlmIChkZWxpbV9zcGVjaWZpZWQgJiYgb3BlcmF0aW5nX21vZGUgIT0gZmllbGRfbW9kZSkKKyAgICAgRkFUQUxfRVJST1IgKF8oImFuIGlucHV0IGRlbGltaXRlciBtYXkgYmUgc3BlY2lmaWVkIG9ubHlcCisgIHdoZW4gb3BlcmF0aW5nIG9uIGZpZWxkcyIpKTsKKyAKK0BAIC04NTQsMTUgKzEyMDcsMzQgQEAKKyAgICAgfQorIAorICAgaWYgKCFkZWxpbV9zcGVjaWZpZWQpCistICAgIGRlbGltID0gJ1x0JzsKKysgICAgeworKyAgICAgIGRlbGltID0gJ1x0JzsKKysjaWZkZWYgSEFWRV9NQlJUT1dDCisrICAgICAgd2NkZWxpbSA9IEwnXHQnOworKyAgICAgIG1iZGVsaW1bMF0gPSAnXHQnOworKyAgICAgIG1iZGVsaW1bMV0gPSAnXDAnOworKyAgICAgIGRlbGltbGVuID0gMTsKKysjZW5kaWYKKysgICAgfQorIAorICAgaWYgKG91dHB1dF9kZWxpbWl0ZXJfc3RyaW5nID09IE5VTEwpCisgICAgIHsKKy0gICAgICBzdGF0aWMgY2hhciBkdW1teVsyXTsKKy0gICAgICBkdW1teVswXSA9IGRlbGltOworLSAgICAgIGR1bW15WzFdID0gJ1wwJzsKKy0gICAgICBvdXRwdXRfZGVsaW1pdGVyX3N0cmluZyA9IGR1bW15OworLSAgICAgIG91dHB1dF9kZWxpbWl0ZXJfbGVuZ3RoID0gMTsKKysjaWZkZWYgSEFWRV9NQlJUT1dDCisrICAgICAgaWYgKE1CX0NVUl9NQVggPiAxICYmICFmb3JjZV9zaW5nbGVieXRlX21vZGUpCisrCXsKKysJICBvdXRwdXRfZGVsaW1pdGVyX3N0cmluZyA9IHhzdHJkdXAobWJkZWxpbSk7CisrCSAgb3V0cHV0X2RlbGltaXRlcl9sZW5ndGggPSBkZWxpbWxlbjsKKysJfQorKworKyAgICAgIGlmIChNQl9DVVJfTUFYIDw9IDEgfHwgZm9yY2Vfc2luZ2xlYnl0ZV9tb2RlKQorKyNlbmRpZgorKwl7CisrCSAgc3RhdGljIGNoYXIgZHVtbXlbMl07IAorKwkgIGR1bW15WzBdID0gZGVsaW07CisrCSAgZHVtbXlbMV0gPSAnXDAnOworKwkgIG91dHB1dF9kZWxpbWl0ZXJfc3RyaW5nID0gZHVtbXk7CisrCSAgb3V0cHV0X2RlbGltaXRlcl9sZW5ndGggPSAxOworKwl9CisgICAgIH0KKyAKKyAgIGlmIChvcHRpbmQgPT0gYXJnYykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWxzLXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1scy14LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYTg3NDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1scy14LnBhdGNoCkBAIC0wLDAgKzEsMTE3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCitUaGlzIHBhdGNoIHdhcyBpbXBvcnRlZCBmcm9tIHRoZSBGZWRvcmEgQ29yZSA4IGNvcmV1dGlscy02LjktOSBwYWNrYWdlLgorCitUaGUgcGFja2FnZSBpcyBzdGF0ZWQgYXMgYmVpbmcgTGljZW5zZWQgYXMgR1BMdjIrLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKKy0tLSBjb3JldXRpbHMtNi45L3NyYy9scy5jLmxzLXgJMjAwNy0wNi0xMyAxNDoyNzozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBjb3JldXRpbHMtNi45L3NyYy9scy5jCTIwMDctMDYtMTMgMTQ6Mjg6NDIuMDAwMDAwMDAwICswMTAwCitAQCAtNDE1MSwxNiArNDE1MSwxNiBAQAorICAgc2l6ZV90IHBvcyA9IDA7CisgICBzaXplX3QgY29scyA9IGNhbGN1bGF0ZV9jb2x1bW5zIChmYWxzZSk7CisgICBzdHJ1Y3QgY29sdW1uX2luZm8gY29uc3QgKmxpbmVfZm10ID0gJmNvbHVtbl9pbmZvW2NvbHMgLSAxXTsKKy0gIHNpemVfdCBuYW1lX2xlbmd0aCA9IGxlbmd0aF9vZl9maWxlX25hbWVfYW5kX2ZyaWxscyAoY3dkX2ZpbGUpOworKyAgc3RydWN0IGZpbGVpbmZvIGNvbnN0ICpmID0gc29ydGVkX2ZpbGVbMF07CisrICBzaXplX3QgbmFtZV9sZW5ndGggPSBsZW5ndGhfb2ZfZmlsZV9uYW1lX2FuZF9mcmlsbHMgKGYpOworICAgc2l6ZV90IG1heF9uYW1lX2xlbmd0aCA9IGxpbmVfZm10LT5jb2xfYXJyWzBdOworIAorICAgLyogUHJpbnQgZmlyc3QgZW50cnkuICAqLworLSAgcHJpbnRfZmlsZV9uYW1lX2FuZF9mcmlsbHMgKGN3ZF9maWxlKTsKKysgIHByaW50X2ZpbGVfbmFtZV9hbmRfZnJpbGxzIChmKTsKKyAKKyAgIC8qIE5vdyB0aGUgcmVzdC4gICovCisgICBmb3IgKGZpbGVzbm8gPSAxOyBmaWxlc25vIDwgY3dkX25fdXNlZDsgKytmaWxlc25vKQorICAgICB7CistICAgICAgc3RydWN0IGZpbGVpbmZvIGNvbnN0ICpmOworICAgICAgIHNpemVfdCBjb2wgPSBmaWxlc25vICUgY29sczsKKyAKKyAgICAgICBpZiAoY29sID09IDApCistLS0gY29yZXV0aWxzLTYuOS90ZXN0cy9scy9NYWtlZmlsZS5hbS5scy14CTIwMDctMDMtMTggMjE6MzY6NDMuMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOS90ZXN0cy9scy9NYWtlZmlsZS5hbQkyMDA3LTA2LTEzIDE0OjI4OjQyLjAwMDAwMDAwMCArMDEwMAorQEAgLTI0LDcgKzI0LDcgQEAKKyAgIHN0YXQtZHR5cGUgXAorICAgaW5vZGUgZGFuZ2xlIGZpbGUtdHlwZSByZWN1cnNpdmUgZGlyZWQgaW5mbG9vcCBcCisgICBydC0xIHRpbWUtMSBzeW1saW5rLXNsYXNoIGZvbGxvdy1zbGluayBuby1hcmcgbS1vcHRpb24gXAorLSAgc3RhdC12cy1kaXJlbnQKKysgIHN0YXQtdnMtZGlyZW50IHgtb3B0aW9uCisgCisgRVhUUkFfRElTVCA9ICQoVEVTVFMpCisgVEVTVFNfRU5WSVJPTk1FTlQgPSBcCistLS0gL2Rldi9udWxsCTIwMDctMDYtMTMgMDg6NDM6NTEuOTkzMjYzMzgyICswMTAwCisrKysgY29yZXV0aWxzLTYuOS90ZXN0cy9scy94LW9wdGlvbgkyMDA3LTA2LTEzIDE0OjI4OjQyLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSw1OSBAQAorKyMhL2Jpbi9zaAorKyMgRXhlcmNpc2UgdGhlIC14IG9wdGlvbi4KKysKKysjIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisrIyAwMjExMC0xMzAxLCBVU0EuCisrCisraWYgdGVzdCAiJFZFUkJPU0UiID0geWVzOyB0aGVuCisrICBzZXQgLXgKKysgIGxzIC0tdmVyc2lvbgorK2ZpCisrCisrLiAkc3JjZGlyLy4uL2VudnZhci1jaGVjaworKy4gJHNyY2Rpci8uLi9sYW5nLWRlZmF1bHQKKysKKytwd2Q9YHB3ZGAKKyt0MD1gZWNobyAiJDAifHNlZCAncywuKi8sLCdgLnRtcDsgdG1wPSR0MC8kJAorK3RyYXAgJ3N0YXR1cz0kPzsgY2QgIiRwd2QiICYmIGNobW9kIC1SIHUrcnd4ICR0MCAmJiBybSAtcmYgJHQwICYmIGV4aXQgJHN0YXR1cycgMAorK3RyYXAgJyhleGl0ICQ/KTsgZXhpdCAkPycgMSAyIDEzIDE1CisrCisrZnJhbWV3b3JrX2ZhaWx1cmU9MAorK21rZGlyIC1wICR0bXAgfHwgZnJhbWV3b3JrX2ZhaWx1cmU9MQorK2NkICR0bXAgfHwgZnJhbWV3b3JrX2ZhaWx1cmU9MQorK21rZGlyIHN1YmRpciB8fCBmcmFtZXdvcmtfZmFpbHVyZT0xCisrdG91Y2ggc3ViZGlyL2IgfHwgZnJhbWV3b3JrX2ZhaWx1cmU9MQorK3RvdWNoIHN1YmRpci9hIHx8IGZyYW1ld29ya19mYWlsdXJlPTEKKysKKytpZiB0ZXN0ICRmcmFtZXdvcmtfZmFpbHVyZSA9IDE7IHRoZW4KKysgIGVjaG8gIiQwOiBmYWlsdXJlIGluIHRlc3RpbmcgZnJhbWV3b3JrIiAxPiYyCisrICAoZXhpdCAxKTsgZXhpdCAxCisrZmkKKysKKytmYWlsPTAKKysKKysjIENvcmV1dGlscyA2LjggYW5kIDYuOSB3b3VsZCBvdXRwdXQgdGhpcyBpbiB0aGUgd3Jvbmcgb3JkZXIuCisrbHMgLXggc3ViZGlyID4gb3V0IHx8IGZhaWw9MQorK2xzIC1yeCBzdWJkaXIgPj4gb3V0IHx8IGZhaWw9MQorK2NhdCA8PFxFT0YgPiBleHAgfHwgZmFpbD0xCisrYSAgYgorK2IgIGEKKytFT0YKKysKKytjbXAgb3V0IGV4cCB8fCBmYWlsPTEKKyt0ZXN0ICRmYWlsID0gMSAmJiBkaWZmIG91dCBleHAgMj4gL2Rldi9udWxsCisrCisrKGV4aXQgJGZhaWwpOyBleGl0ICRmYWlsCistLS0gY29yZXV0aWxzLTYuOS9ORVdTLmxzLXgJMjAwNy0wMy0yMiAyMToxOTo0NS4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi45L05FV1MJMjAwNy0wNi0xMyAxNDoyODo0Mi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMyw2ICsxMywxMSBAQAorICAgVXNpbmcgcHIgLW0gLXMgKGkuZS4gbWVyZ2luZyBmaWxlcywgd2l0aCBUQUIgYXMgdGhlIG91dHB1dCBzZXBhcmF0b3IpCisgICBubyBsb25nZXIgaW5zZXJ0cyBleHRyYW5lb3VzIHNwYWNlcyBiZXR3ZWVuIG91dHB1dCBjb2x1bW5zLgorIAorKyoqIEJ1ZyBmaXhlcworKworKyAgbHMgLXggRElSIHdvdWxkIHNvbWV0aW1lcyBvdXRwdXQgdGhlIHdyb25nIHN0cmluZyBpbiBwbGFjZSBvZiB0aGUKKysgIGZpcnN0IGVudHJ5LiAgW2ludHJvZHVjZWQgaW4gY29yZXV0aWxzLTYuOF0KKysKKyAKKyAqIE5vdGV3b3J0aHkgY2hhbmdlcyBpbiByZWxlYXNlIDYuOCAoMjAwNy0wMi0yNCkgW25vdC11bnN0YWJsZV0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLW92ZXJmbG93LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtb3ZlcmZsb3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgwNzRjMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLW92ZXJmbG93LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKK1RoaXMgcGF0Y2ggd2FzIGltcG9ydGVkIGZyb20gdGhlIEZlZG9yYSBDb3JlIDggY29yZXV0aWxzLTYuOS05IHBhY2thZ2UuCisKK1RoZSBwYWNrYWdlIGlzIHN0YXRlZCBhcyBiZWluZyBMaWNlbnNlZCBhcyBHUEx2MisuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tIGNvcmV1dGlscy01LjIuMS9zcmMvd2hvLmMub3ZlcmZsb3cJMjAwNS0wNS0yNSAwOTo1OTowNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBjb3JldXRpbHMtNS4yLjEvc3JjL3doby5jCTIwMDUtMDUtMjUgMTA6MDA6MzEuMDAwMDAwMDAwICswMTAwCitAQCAtNzUsNyArNzUsNyBAQAorICMgZGVmaW5lIE5FV19USU1FIDAKKyAjZW5kaWYKKyAKKy0jZGVmaW5lIElETEVTVFJfTEVOIDYKKysjZGVmaW5lIElETEVTVFJfTEVOIDEwCisgCisgI2lmIEhBVkVfU1RSVUNUX1hUTVBfVVRfUElECisgIyBkZWZpbmUgUElEU1RSX0RFQ0xfQU5EX0lOSVQoVmFyLCBVdG1wX2VudCkgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNzMwZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2F1dG9tYWtlIDEuMTIgaGFzIGRlcHJpY2F0ZWQgYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydAorCit0aGlzIHBhdGNoIGF2b2lkcyB0aGVzZSBraW5kcyBvZiBlcnJvcnM6CisKK3wgY29uZmlndXJlLmFjOjQwOiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvYWNsb2NhbC0xLjEyL3Byb3Rvcy5tNDoxMjogQU1fQ19QUk9UT1RZUEVTIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvd29yay94ODZfNjQtbGludXgvY29yZXV0aWxzLW5hdGl2ZS02LjktcjIvY29yZXV0aWxzLTYuOS9tNC9qbS1tYWNyb3MubTQ6MTM4OiBnbF9DSEVDS19BTExfVFlQRVMgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1saW51eC9jb3JldXRpbHMtbmF0aXZlLTYuOS1yMi9jb3JldXRpbHMtNi45L200L2ptLW1hY3Jvcy5tNDoyNDogY29yZXV0aWxzX01BQ1JPUyBpcyBleHBhbmRlZCBmcm9tLi4uCit8IGNvbmZpZ3VyZS5hYzo0MDogdGhlIHRvcCBsZXZlbAorfCBhdXRvbTR0ZTogbTQgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDQKKworSW5kZXg6IGNvcmV1dGlscy02LjkvbTQvam0tbWFjcm9zLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY29yZXV0aWxzLTYuOS5vcmlnL200L2ptLW1hY3Jvcy5tNAorKysrIGNvcmV1dGlscy02LjkvbTQvam0tbWFjcm9zLm00CitAQCAtMTQyLDExICsxNDIsNiBAQCBBQ19ERUZVTihbZ2xfQ0hFQ0tfQUxMX1RZUEVTXSwKKyAgIGRubCB3aGV0aGVyIGZ1bmN0aW9ucyBhbmQgaGVhZGVycyBhcmUgYXZhaWxhYmxlLCB3aGV0aGVyIHRoZXkgd29yaywgZXRjLgorICAgQUNfUkVRVUlSRShbQUNfU1lTX0xBUkdFRklMRV0pCisgCistICBkbmwgVGhpcyB0ZXN0IG11c3QgcHJlY2VkZSB0ZXN0cyBvZiBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MgbGlrZQorLSAgZG5sIHRoYXQgZm9yIHRoZSBpbmxpbmUga2V5d29yZCwgc2luY2UgaXQgbWF5IGNoYW5nZSB0aGUgZGVncmVlIHRvCistICBkbmwgd2hpY2ggdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHN1Y2ggZmVhdHVyZXMuCistICBBQ19SRVFVSVJFKFtBTV9DX1BST1RPVFlQRVNdKQorLQorICAgZG5sIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCisgICBBQ19SRVFVSVJFKFtBQ19DX0JJR0VORElBTl0pCisgICBBQ19SRVFVSVJFKFtBQ19DX1ZPTEFUSUxFXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZml4X2Zvcl9tYW5wYWdlX2J1aWxkaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9maXhfZm9yX21hbnBhZ2VfYnVpbGRpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBkNjAwYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZml4X2Zvcl9tYW5wYWdlX2J1aWxkaW5nLnBhdGNoCkBAIC0wLDAgKzEsODUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKK1VzZSBuYXRpdmUgY29yZXV0aWxzIGJpbmFyaWVzIHRvIGJ1aWxkIG1hbnBhZ2VzIGluIGNyb3NzIGVudmlyb25tZW50LgorVGhpcyBhdm9pZHMgbWFuIHBhZ2UgYnVpbGQgaXNzdWVzIGxpa2UgdGhpczoKKworfCBNYWtpbmcgYWxsIGluIG1hbgorfCBtYWtlWzFdOiBFbnRlcmluZyBkaXJlY3RvcnkgYC9idWlsZF9kaXNrL3Bva3lfYnVpbGQvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9jb3JldXRpbHMtNi45LXIwL2NvcmV1dGlscy02LjkvbWFuJworfCBVcGRhdGluZyBtYW4gcGFnZSBjdXQuMQorfCBVcGRhdGluZyBtYW4gcGFnZSBkaXIuMQorfCBVcGRhdGluZyBtYW4gcGFnZSBleHBhbmQuMQorfCBVcGRhdGluZyBtYW4gcGFnZSBmb2xkLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgaW5zdGFsbC4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIGpvaW4uMQorfCBVcGRhdGluZyBtYW4gcGFnZSBwci4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIGxzLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2Ugc29ydC4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIHVuZXhwYW5kLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgdW5pcS4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIHdoby4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIHZkaXIuMQorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSBkaXIudGQvZGlyCit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIGN1dC50ZC9jdXQKK3wgbWFrZVsxXTogKioqIFtkaXIuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06ICoqKiBXYWl0aW5nIGZvciB1bmZpbmlzaGVkIGpvYnMuLi4uCit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIGZvbGQudGQvZm9sZAorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSBpbnN0YWxsLnRkL2luc3RhbGwKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gZXhwYW5kLnRkL2V4cGFuZAorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSBqb2luLnRkL2pvaW4KK3wgbWFrZVsxXTogKioqIFtjdXQuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06ICoqKiBbZm9sZC4xXSBFcnJvciAxMjYKK3wgbWFrZVsxXTogKioqIFtpbnN0YWxsLjFdIEVycm9yIDEyNgorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSBzb3J0LnRkL3NvcnQKK3wgbWFrZVsxXTogKioqIFtleHBhbmQuMV0gRXJyb3IgMTI2Cit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIHByLnRkL3ByCit8IG1ha2VbMV06ICoqKiBbam9pbi4xXSBFcnJvciAxMjYKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gbHMudGQvbHMKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gdW5leHBhbmQudGQvdW5leHBhbmQKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gdW5pcS50ZC91bmlxCit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIHdoby50ZC93aG8KK3wgbWFrZVsxXTogKioqIFtzb3J0LjFdIEVycm9yIDEyNgorfCBtYWtlWzFdOiAqKiogW3ByLjFdIEVycm9yIDEyNgorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSB2ZGlyLnRkL3ZkaXIKK3wgbWFrZVsxXTogKioqIFtscy4xXSBFcnJvciAxMjYKK3wgbWFrZVsxXTogKioqIFt1bmlxLjFdIEVycm9yIDEyNgorfCBtYWtlWzFdOiAqKiogW3VuZXhwYW5kLjFdIEVycm9yIDEyNgorfCBtYWtlWzFdOiAqKiogW3doby4xXSBFcnJvciAxMjYKK3wgbWFrZVsxXTogKioqIFt2ZGlyLjFdIEVycm9yIDEyNgorfCBtYWtlWzFdOiBMZWF2aW5nIGRpcmVjdG9yeSBgL2J1aWxkX2Rpc2svcG9reV9idWlsZC9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2NvcmV1dGlscy02LjktcjAvY29yZXV0aWxzLTYuOS9tYW4nCit8IG1ha2U6ICoqKiBbYWxsLXJlY3Vyc2l2ZV0gRXJyb3IgMQorfCBGQVRBTDogb2VfcnVubWFrZSBmYWlsZWQKK3wgRVJST1I6IEZ1bmN0aW9uICdkb19jb21waWxlJyBmYWlsZWQgKHNlZSAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvY29yZXV0aWxzLTYuOS1yMC90ZW1wL2xvZy5kb19jb21waWxlLjEyNzgwIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uKQorTk9URTogcGFja2FnZSBjb3JldXRpbHMtNi45LXIwOiB0YXNrIGRvX2NvbXBpbGU6IEZhaWxlZAorRVJST1I6IFRhc2sgOCAoL2hvbWUvbml0aW4vcHJqL3Bva3kuZ2l0L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHNfNi45LmJiLCBkb19jb21waWxlKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJzEnCisKKworVGhpcyBwYXRjaCBpcyBtYWRlIGZvciBncGx2MiBjb3JldXRpbHMgdGhlIHJlY2lwZQorTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTEvMDMvMTcKKworSW5kZXg6IG1hbi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvbWFuLm9yaWcvTWFrZWZpbGUuYW0KKysrKyBiL21hbi9NYWtlZmlsZS5hbQorQEAgLTE2Nyw3ICsxNjcsNyBAQCBtYXBwZWRfbmFtZSA9IGBlY2hvICQqfHNlZCAncy9pbnN0YWxsL2dpCisgCSAgICAgICAgICAgICQoUEVSTCkgLS0gJChzcmNkaXIpL2hlbHAybWFuCQlcCisgCSAgICAgICAgICAgICAtLXNvdXJjZT0nJChQQUNLQUdFX1NUUklORyknCQlcCisgCSAgICAgICAgICAgICAtLWluY2x1ZGU9JChzcmNkaXIpLyQqLngJCQlcCistCSAgICAgICAgICAgICAtLW91dHB1dD0kdC8kQCAkdC8kKjsJCQlcCisrCSAgICAgICAgICAgICAtLW91dHB1dD0kdC8kQCAkKjsJCQlcCisgCSAgICAgICB9CQkJCQkJXAorIAkgICAgJiYgc2VkICdzfCQqXC50ZC98fGcnICR0LyRAID4gJEAJCQlcCisgCSAgICAmJiBjaG1vZCBhLXcgJEAJCQkJCVwKK0luZGV4OiBtYW4vTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL21hbi5vcmlnL01ha2VmaWxlLmluCisrKysgYi9tYW4vTWFrZWZpbGUuaW4KK0BAIC04NjUsNyArODY1LDcgQEAgeWVzLjE6CQkkKGNvbW1vbl9kZXApCSQoc3JjZGlyKS95ZXMueAkJLgorIAkgICAgICAgICAgICAkKFBFUkwpIC0tICQoc3JjZGlyKS9oZWxwMm1hbgkJXAorIAkgICAgICAgICAgICAgLS1zb3VyY2U9JyQoUEFDS0FHRV9TVFJJTkcpJwkJXAorIAkgICAgICAgICAgICAgLS1pbmNsdWRlPSQoc3JjZGlyKS8kKi54CQkJXAorLQkgICAgICAgICAgICAgLS1vdXRwdXQ9JHQvJEAgJHQvJCo7CQkJXAorKwkgICAgICAgICAgICAgLS1vdXRwdXQ9JHQvJEAgJCo7CQkJXAorIAkgICAgICAgfQkJCQkJCVwKKyAJICAgICYmIHNlZCAnc3wkKlwudGQvfHxnJyAkdC8kQCA+ICRACQkJXAorIAkgICAgJiYgY2htb2QgYS13ICRACQkJCQlcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2Z1dGltZW5zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9mdXRpbWVucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2E1OTBiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9mdXRpbWVucy5wYXRjaApAQCAtMCwwICsxLDYzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCisjIGNvcmV1dGlscyB1c2VzIGdudWxpYiB3aGljaCBjb25mbGljdHMgd2l0aCBuZXdlciBsaWJjIGhlYWRlciBvbiBmdXRpbWVucworIyB0aGlzIHBhdGNoIHNpbXBseSByZW5hbWVzIGNvcmV1dGlscyBmdXRpbWVzIHRvIGF2b2lkIGNvbmZsaWN0aW9uCisjCisjIFNpZ25lZC1vZmYtYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA4LTE4CisjICh0aGlzIHBhdGNoIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKQorCitkaWZmIC0tZ2l0IGEvbGliL3V0aW1lbnMuYyBiL2xpYi91dGltZW5zLmMKK2luZGV4IDcxYmM1MTAuLmFlODcwYjggMTAwNjQ0CistLS0gYS9saWIvdXRpbWVucy5jCisrKysgYi9saWIvdXRpbWVucy5jCitAQCAtNzUsNyArNzUsNyBAQCBzdHJ1Y3QgdXRpbWJ1ZgorICAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIChzZXR0aW5nIGVycm5vKSBvbiBmYWlsdXJlLiAgKi8KKyAKKyBpbnQKKy1mdXRpbWVucyAoaW50IGZkIEFUVFJJQlVURV9VTlVTRUQsCisrZnV0aW1lbnNfY29yZXV0aWxzIChpbnQgZmQgQVRUUklCVVRFX1VOVVNFRCwKKyAJICBjaGFyIGNvbnN0ICpmaWxlLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgdGltZXNwZWNbMl0pCisgeworICAgLyogU29tZSBMaW51eC1iYXNlZCBORlMgY2xpZW50cyBhcmUgYnVnZ3ksIGFuZCBtaXNoYW5kbGUgdGltZSBzdGFtcHMKK0BAIC0xODUsNSArMTg1LDUgQEAgZnV0aW1lbnMgKGludCBmZCBBVFRSSUJVVEVfVU5VU0VELAorIGludAorIHV0aW1lbnMgKGNoYXIgY29uc3QgKmZpbGUsIHN0cnVjdCB0aW1lc3BlYyBjb25zdCB0aW1lc3BlY1syXSkKKyB7CistICByZXR1cm4gZnV0aW1lbnMgKC0xLCBmaWxlLCB0aW1lc3BlYyk7CisrICByZXR1cm4gZnV0aW1lbnNfY29yZXV0aWxzICgtMSwgZmlsZSwgdGltZXNwZWMpOworIH0KK2RpZmYgLS1naXQgYS9saWIvdXRpbWVucy5oIGIvbGliL3V0aW1lbnMuaAoraW5kZXggMDA5N2FhYS4uMTNmYzQ1YSAxMDA2NDQKKy0tLSBhL2xpYi91dGltZW5zLmgKKysrKyBiL2xpYi91dGltZW5zLmgKK0BAIC0xLDMgKzEsMyBAQAorICNpbmNsdWRlIDx0aW1lLmg+CistaW50IGZ1dGltZW5zIChpbnQsIGNoYXIgY29uc3QgKiwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IFsyXSk7CisraW50IGZ1dGltZW5zX2NvcmV1dGlscyAoaW50LCBjaGFyIGNvbnN0ICosIHN0cnVjdCB0aW1lc3BlYyBjb25zdCBbMl0pOworIGludCB1dGltZW5zIChjaGFyIGNvbnN0ICosIHN0cnVjdCB0aW1lc3BlYyBjb25zdCBbMl0pOworZGlmZiAtLWdpdCBhL3NyYy9jb3B5LmMgYi9zcmMvY29weS5jCitpbmRleCA0YmRiNzVjLi4wNDYzNGYxIDEwMDY0NAorLS0tIGEvc3JjL2NvcHkuYworKysrIGIvc3JjL2NvcHkuYworQEAgLTUxOCw3ICs1MTgsNyBAQCBjb3B5X3JlZyAoY2hhciBjb25zdCAqc3JjX25hbWUsIGNoYXIgY29uc3QgKmRzdF9uYW1lLAorICAgICAgIHRpbWVzcGVjWzBdID0gZ2V0X3N0YXRfYXRpbWUgKHNyY19zYik7CisgICAgICAgdGltZXNwZWNbMV0gPSBnZXRfc3RhdF9tdGltZSAoc3JjX3NiKTsKKyAKKy0gICAgICBpZiAoZnV0aW1lbnMgKGRlc3RfZGVzYywgZHN0X25hbWUsIHRpbWVzcGVjKSAhPSAwKQorKyAgICAgIGlmIChmdXRpbWVuc19jb3JldXRpbHMgKGRlc3RfZGVzYywgZHN0X25hbWUsIHRpbWVzcGVjKSAhPSAwKQorIAl7CisgCSAgZXJyb3IgKDAsIGVycm5vLCBfKCJwcmVzZXJ2aW5nIHRpbWVzIGZvciAlcyIpLCBxdW90ZSAoZHN0X25hbWUpKTsKKyAJICBpZiAoeC0+cmVxdWlyZV9wcmVzZXJ2ZSkKK2RpZmYgLS1naXQgYS9zcmMvdG91Y2guYyBiL3NyYy90b3VjaC5jCitpbmRleCBhNzljMjZkLi42ZWYzMTdkIDEwMDY0NAorLS0tIGEvc3JjL3RvdWNoLmMKKysrKyBiL3NyYy90b3VjaC5jCitAQCAtMTgyLDcgKzE4Miw3IEBAIHRvdWNoIChjb25zdCBjaGFyICpmaWxlKQorICAgICAgIHQgPSB0aW1lc3BlYzsKKyAgICAgfQorIAorLSAgb2sgPSAoZnV0aW1lbnMgKGZkLCAoZmQgPT0gU1RET1VUX0ZJTEVOTyA/IE5VTEwgOiBmaWxlKSwgdCkgPT0gMCk7CisrICBvayA9IChmdXRpbWVuc19jb3JldXRpbHMgKGZkLCAoZmQgPT0gU1RET1VUX0ZJTEVOTyA/IE5VTEwgOiBmaWxlKSwgdCkgPT0gMCk7CisgCisgICBpZiAoZmQgPT0gU1RESU5fRklMRU5PKQorICAgICB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2dudWxpYl9tNC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZ251bGliX200LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMzU1NTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2dudWxpYl9tNC5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCisjIHJlbW92ZSB0aGUgbGluZSB0byBjYXVzZSByZWN1cnNpdmUgaW5jbHVzaW9uIGVycm9yIGZyb20gYXV0b3JlY29uZiwgc2ljbmUKKyMgbmV3ZXIgYXV0b2NvbmYgaGFzIGluY2x1ZGVkIHRoaXMgZGVmaW5pdGlvbi4gU2ltcGx5IHJlbmFtZSBpdCBoZXJlLgorIworIyBTaWduZWQtb2ZmLWJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wOC0xOAorIyAodGhpcyBwYXRjaCBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MikKKworZGlmZiAtLWdpdCBhL2V4dGVuc2lvbnMubTQgYi9leHRlbnNpb25zLm00CitpbmRleCAxNDNhOWU1Li5mNjU1OGYxIDEwMDY0NAorLS0tIGEvbTQvZXh0ZW5zaW9ucy5tNAorKysrIGIvbTQvZXh0ZW5zaW9ucy5tNAorQEAgLTE2LDcgKzE2LDcgQEAKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKKyAjIHR5cGljYWxseSBkdWUgdG8gc3RhbmRhcmRzLWNvbmZvcm1hbmNlIGlzc3Vlcy4KKy1BQ19ERUZVTihbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKytBQ19ERUZVTihbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TX0RVTU1ZXSwKKyBbCisgICBBQ19CRUZPUkUoWyQwXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkKKyAgIEFDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L21hbi10b3VjaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvbWFuLXRvdWNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MmNiOWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L21hbi10b3VjaC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCisjIG1hbiBwYWdlIGZvciAndG91Y2gnIGlzIGdlbmVyYXRlZCBkaWZmZXJlbnRseSBmcm9tIG90aGVycy4gQWxsIG90aGVyIHV0aWxpdGllcworIyBhcmUgcHJvdmlkZWQgc3RhdGljIG1hbiBzb3VyY2UgZmlsZXMsIHdoaWxlIGZvciAndG91Y2gnIGl0IHJlcXVpcmVzIGhlbHAybWFuCisjIHRvIGludm9rZSAidG91Y2ggLS1oZWxwIiBhbmQgdGhlbiBjb252ZXJ0IHRoZSBvdXRwdXQgaW50byB0aGUgbWFudWFsLiBTaW5jZSB0b3VjaAorIyBpcyB3aXRoIHRhcmdldCBmb3JtYXQgd2hpY2ggY2FuJ3QgYmUgaW52b2tlZCBvbiBidWlsZCBzeXN0ZW0sIGRpc2FibGUgYnVpbGRpbmcKKyMgJ3RvdWNoJyBtYW4gcGFnZSBoZXJlLgorIworIyBTaWduZWQtb2ZmLWJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wOC0xOAorIyAodGhpcyBwYXRjaCBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MikKKworZGlmZiAtLWdpdCBhL21hbi9NYWtlZmlsZS5hbSBiL21hbi9NYWtlZmlsZS5hbQoraW5kZXggMzJkZjlkMS4uMzdiMDllMyAxMDA2NDQKKy0tLSBhL21hbi9NYWtlZmlsZS5hbQorKysrIGIvbWFuL01ha2VmaWxlLmFtCitAQCAtMjcsNyArMjcsNyBAQCBkaXN0X21hbl9NQU5TID0gXAorICAgcGFzdGUuMSBwYXRoY2hrLjEgcHIuMSBwcmludGVudi4xIHByaW50Zi4xIHB0eC4xIHB3ZC4xIHJlYWRsaW5rLjEgXAorICAgcm0uMSBybWRpci4xIHNlcS4xIHNoYTFzdW0uMSBzaGEyMjRzdW0uMSBzaGEyNTZzdW0uMSBzaGEzODRzdW0uMSBzaGE1MTJzdW0uMSBcCisgICBzaHJlZC4xIHNodWYuMSBzbGVlcC4xIHNvcnQuMSBzcGxpdC4xIHN0YXQuMSBcCistICBzdS4xIHN1bS4xIHN5bmMuMSB0YWMuMSB0YWlsLjEgdGVlLjEgdGVzdC4xIHRvdWNoLjEgdHIuMSB0cnVlLjEgdHNvcnQuMSBcCisrICBzdS4xIHN1bS4xIHN5bmMuMSB0YWMuMSB0YWlsLjEgdGVlLjEgdGVzdC4xIHRyLjEgdHJ1ZS4xIHRzb3J0LjEgXAorICAgdHR5LjEgdW5leHBhbmQuMSB1bmlxLjEgdW5saW5rLjEgdmRpci4xIHdjLjEgXAorICAgd2hvYW1pLjEgeWVzLjEgJChNQU4pCisgb3B0aW9uYWxfbWFucyA9IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMWE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9nbnVsaWIubWsgYi9saWIvZ251bGliLm1rCitpbmRleCBlMWQ3NGRiLi5jMGU5MmRkIDEwMDY0NAorLS0tIGEvbGliL2dudWxpYi5taworKysrIGIvbGliL2dudWxpYi5taworQEAgLTE4ODIsNyArMTg4Miw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0L2ZpeC1zZWxpbnV4LWZsYXNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvZml4LXNlbGludXgtZmxhc2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQxYWU1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0L2ZpeC1zZWxpbnV4LWZsYXNrLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gYTFkMzYwNTA5ZmEzYTRhZmY1N2VlZGNkNTI4Y2MwMzQ3YTg3NTMxZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxNiBTZXAgMjAxNCAwMTo1OTowOCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBnbnVsaWItY29tcC5tNDogc2VsaW51eC9mbGFzay5oIHNob3VsZCByZXNwZWN0IHRvCisgd2l0aF9zZWxpbnV4CisKK0ZpeGVkIHdoZW4gYnVpbGQgd2l0aCBtZXRhLXNlbGludXggZXZlbiB3aGVuIC0td2l0aG91dC1zZWxpbnV4OgorcnVuY29uLmM6NDk6Mjg6IGZhdGFsIGVycm9yOiBzZWxpbnV4L2ZsYXNrLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKyAjIGluY2x1ZGUgPHNlbGludXgvZmxhc2suaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitjb21waWxhdGlvbiB0ZXJtaW5hdGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBtNC9nbnVsaWItY29tcC5tNCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL200L2dudWxpYi1jb21wLm00IGIvbTQvZ251bGliLWNvbXAubTQKK2luZGV4IDQ3MmQzYTAuLjVmMDk3MzQgMTAwNjQ0CistLS0gYS9tNC9nbnVsaWItY29tcC5tNAorKysrIGIvbTQvZ251bGliLWNvbXAubTQKK0BAIC0xNzMwLDExICsxNzMwLDExIEBAIEFDX0RFRlVOKFtnbF9JTklUXSwKKyAgICAgQUNfTElCT0JKKFtzZWxlY3RdKQorICAgZmkKKyAgIGdsX1NZU19TRUxFQ1RfTU9EVUxFX0lORElDQVRPUihbc2VsZWN0XSkKKy0gIEFDX0NIRUNLX0hFQURFUlMoW3NlbGludXgvZmxhc2suaF0pCisgICBBQ19MSUJPQkooW3NlbGludXgtYXRdKQorICAgZ2xfSEVBREVSU19TRUxJTlVYX1NFTElOVVhfSAorICAgZ2xfSEVBREVSU19TRUxJTlVYX0NPTlRFWFRfSAorICAgaWYgdGVzdCAiJHdpdGhfc2VsaW51eCIgIT0gbm8gJiYgdGVzdCAiJGFjX2N2X2hlYWRlcl9zZWxpbnV4X3NlbGludXhfaCIgPSB5ZXM7IHRoZW4KKysgICAgQUNfQ0hFQ0tfSEVBREVSUyhbc2VsaW51eC9mbGFzay5oXSkKKyAgICAgQUNfTElCT0JKKFtnZXRmaWxlY29uXSkKKyAgIGZpCisgICBnbF9TRVJWRU5UCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvbWFuLWRlY291cGxlLW1hbnBhZ2VzLWZyb20tYnVpbGQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC9tYW4tZGVjb3VwbGUtbWFucGFnZXMtZnJvbS1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzg5NmExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvbWFuLWRlY291cGxlLW1hbnBhZ2VzLWZyb20tYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorRnJvbSBiNGQyNTg2MjlmMDkwMDY2NzgzYzNiNGM5MWI0MGY2M2I5ZDBhMjk2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CitEYXRlOiBTdW4sIDggRmViIDIwMTUgMTY6NTE6NTcgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gbWFuOiBkZWNvdXBsZSBtYW5wYWdlcyBmcm9tIGJ1aWxkCisKK1RoZSB1c2Ugb2YgImhlbHAybWFuIiBkb2Vzbid0IHdvcmsgYXQgYWxsIGZvciBjcm9zcyBjb21waWxlLCBpbgorYWRkaXRpb24gdG8gdGhlIGV4dHJhIHJlcXVpcmVtZW50IG9mIHBlcmwgaXQgYWRkcy4KKworSnVzdCBkZWNvdXBsZSB0aGUgbWFucGFnZXMgZnJvbSB0aGUgYnVpbGQgaW4gb3JkZXIgdG8gcGF2ZSB0aGUgd2F5IGZvcgoraW1wb3J0aW5nIHByZWJ1aWx0IG1hbnBhZ2VzIHRoYXQgY2FuIGJlIHVzZWQgaW4gYSBjcm9zcyBidWlsZCBzaXR1YXRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gZG9lc24ndCBjYXJlIGFib3V0IHgtY29tcGlsZSBjYXNlLl0KK1NpZ25lZC1vZmYtYnk6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggZmI0YWYyNy4uNzU3NmIyYyAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTIxNCw1ICsyMTQsNCBAQCBBTV9DUFBGTEFHUyA9IC1JbGliIC1JJCh0b3Bfc3JjZGlyKS9saWIgLUlzcmMgLUkkKHRvcF9zcmNkaXIpL3NyYworIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9saWIvbG9jYWwubWsKKyBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2xvY2FsLm1rCisgaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2RvYy9sb2NhbC5taworLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9tYW4vbG9jYWwubWsKKyBpbmNsdWRlICQodG9wX3NyY2RpcikvdGVzdHMvbG9jYWwubWsKKy0tIAorMi4yLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0L3JlbW92ZS11c3ItbG9jYWwtbGliLWZyb20tbTQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVmOGE1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0L3JlbW92ZS11c3ItbG9jYWwtbGliLWZyb20tbTQucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorV2UgaGF2ZSBwcm9ibGVtIHVzaW5nIGhhcmRjb2RlZCBkaXJlY3RvcmllcyBsaWtlIC91c3IvbG9jYWwgaGVyZQord2hpY2ggd2lsbCBiZSBjaGVja2VkIGZvciBjcm9zcyBidWlsZHMuIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Ugd2hpY2gKK2lzIHZhbGlkIGZvciBBSVggb25seS4gV2UgZG8gbm90IGhhdmUgQUlYIGFzIG9uZSBvZiBvdXIgc3VwcG9ydGVkCitidWlsZCBob3N0IG9yIHRhcmdldC4gVGhlcmVmb3JlIHdlIGdldCByaWQgb2YgdGhlIGhhcmRjb2RlZCBwYXRocworYW5kIG1ha2UgbGlmZSBlYXNpZXIgZm9yIGNyb3NzIGNvbXBpbGF0aW9uIHByb2Nlc3MuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbVXBzdHJlYW0gZG9lcyBjYXJlIGZvciBBSVggd2hpbGUgd2UgbWF5IG5vdF0KKworSW5kZXg6IGNvcmV1dGlscy04LjE0L200L2dldGxvYWRhdmcubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjb3JldXRpbHMtOC4xNC5vcmlnL200L2dldGxvYWRhdmcubTQJMjAxMS0wOS0xOSAwODowOToyNC4wMDAwMDAwMDAgLTA3MDAKKysrKyBjb3JldXRpbHMtOC4xNC9tNC9nZXRsb2FkYXZnLm00CTIwMTEtMTAtMTkgMjE6NDI6MDAuMzg1NTMzMzU3IC0wNzAwCitAQCAtNDEsMTYgKzQxLDYgQEAKKyAgICAgICAgW0xJQlM9Ii1sdXRpbCAkTElCUyIgZ2xfZnVuY19nZXRsb2FkYXZnX2RvbmU9eWVzXSkKKyAgICBmaQorIAorLSAgIGlmIHRlc3QgJGdsX2Z1bmNfZ2V0bG9hZGF2Z19kb25lID0gbm87IHRoZW4KKy0gICAgICMgVGhlcmUgaXMgYSBjb21tb25seSBhdmFpbGFibGUgbGlicmFyeSBmb3IgUlMvNjAwMCBBSVguCistICAgICAjIFNpbmNlIGl0IGlzIG5vdCBhIHN0YW5kYXJkIHBhcnQgb2YgQUlYLCBpdCBtaWdodCBiZSBpbnN0YWxsZWQgbG9jYWxseS4KKy0gICAgIGdsX2dldGxvYWRhdmdfTElCUz0kTElCUworLSAgICAgTElCUz0iLUwvdXNyL2xvY2FsL2xpYiAkTElCUyIKKy0gICAgIEFDX0NIRUNLX0xJQihbZ2V0bG9hZGF2Z10sIFtnZXRsb2FkYXZnXSwKKy0gICAgICAgICAgICAgICAgICBbTElCUz0iLWxnZXRsb2FkYXZnICRMSUJTIiBnbF9mdW5jX2dldGxvYWRhdmdfZG9uZT15ZXNdLAorLSAgICAgICAgICAgICAgICAgIFtMSUJTPSRnbF9nZXRsb2FkYXZnX0xJQlNdKQorLSAgIGZpCistCisgICAgIyBTZXQgdXAgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uIGlmIG5lY2Vzc2FyeS4KKyAgICBpZiB0ZXN0ICRnbF9mdW5jX2dldGxvYWRhdmdfZG9uZSA9IG5vOyB0aGVuCisgICAgICBIQVZFX0dFVExPQURBVkc9MApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzYuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc182LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZmMWQ1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc182LjkuYmIKQEAgLTAsMCArMSwxMDIgQEAKK1NVTU1BUlkgPSAiVGhlIGJhc2ljIGZpbGUsIHNoZWxsIGFuZCB0ZXh0IG1hbmlwdWxhdGlvbiB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJUaGUgR05VIENvcmUgVXRpbGl0aWVzIHByb3ZpZGUgdGhlIGJhc2ljIGZpbGUsIHNoZWxsIGFuZCB0ZXh0IFwKK21hbmlwdWxhdGlvbiB1dGlsaXRpZXMuIFRoZXNlIGFyZSB0aGUgY29yZSB1dGlsaXRpZXMgd2hpY2ggYXJlIGV4cGVjdGVkIHRvIGV4aXN0IG9uIFwKK2V2ZXJ5IHN5c3RlbS4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jb3JldXRpbHMvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vZGViYnVncy5nbnUub3JnL2NvcmV1dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2xzLmM7YmVnaW5saW5lPTQ7ZW5kbGluZT0xNjttZDU9MTVlZDYwZjY3YjFkYjVmZWRkNWRiYzM3Y2Y4YTk1NDMiCitQUiA9ICJyNSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9jb3JldXRpbHMvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9nbnVsaWJfbTQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZnV0aW1lbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29yZXV0aWxzLWxzLXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29yZXV0aWxzLTYuOS1jcC1pLXUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29yZXV0aWxzLWkxOG4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29yZXV0aWxzLW92ZXJmbG93LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvcmV1dGlscy1maXgtaW5zdGFsbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tdG91Y2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29yZXV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtYnVpbGQtd2l0aC1hY2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29yZXV0aWxzLWZpeC10ZXhpbmZvLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9mb3JfbWFucGFnZV9idWlsZGluZy5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImM5NjA3ZDg0OTVmMTZlOTg5MDZlN2VkMmQ5NzUxYTA2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg5YzI4OTVhZDE1N2RlNTBlNTMyOThiMjJkOTFkYjExNmVlNGUxZGQzZmRmNDAxOTI2MDI1NGUyZTMxNDk3YjAiCisKK0VYVFJBX09FQ09ORiArPSAiYWNfY3ZfZnVuY19nZXRncm91cHNfd29ya3M9eWVzIFwKKyAgICAgICAgICAgICAgICAgYWNfY3ZfZnVuY19zdHJjb2xsX3dvcmtzPXllcyIKKworIyBhY2wgaXMgbm90IGEgZGVmYXVsdCBmZWF0dXJlCisjCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhY2wnLCAnYWNsJywgJycsIGQpfSIKKworIyB3aXRoLCB3aXRob3V0LCBkZXBlbmRzLCByZGVwZW5kcworIworUEFDS0FHRUNPTkZJR1thY2xdID0gImFjX2N2X2hlYWRlcl9zeXNfYWNsX2g9eWVzLGFjX2N2X2hlYWRlcl9zeXNfYWNsX2g9bm8sYWNsLCIKKworCisjIFsgZ2V0cyBhIHNwZWNpYWwgdHJlYXRtZW50IGFuZCBpcyBub3QgaW5jbHVkZWQgaW4gdGhpcworYmluZGlyX3Byb2dzID0gImJhc2U2NCBiYXNlbmFtZSBja3N1bSBjb21tIGNzcGxpdCBjdXQgZGlyIGRpcmNvbG9ycyBkaXJuYW1lIGR1IFwKKyAgICAgICAgICAgICAgICBlbnYgZXhwYW5kIGV4cHIgZmFjdG9yIGZtdCBmb2xkIGdyb3VwcyBoZWFkIGhvc3RpZCBpZCBpbnN0YWxsIFwKKyAgICAgICAgICAgICAgICBqb2luIGxpbmsgbG9nbmFtZSBtZDVzdW0gbWtmaWZvIG5pY2Ugbmwgbm9odXAgb2QgcGFzdGUgcGF0aGNoayBcCisgICAgICAgICAgICAgICAgcGlua3kgcHIgcHJpbnRlbnYgcHJpbnRmIHB0eCByZWFkbGluayBzZXEgc2hhMXN1bSBzaGEyMjRzdW0gc2hhMjU2c3VtIFwKKyAgICAgICAgICAgICAgICBzaGEzODRzdW0gc2hhNTEyc3VtIHNocmVkIHNodWYgc29ydCBzcGxpdCBzdW0gdGFjIHRhaWwgdGVlIHRlc3QgXAorICAgICAgICAgICAgICAgIHRyIHRzb3J0IHR0eSB1bmV4cGFuZCB1bmlxIHVubGluayB1c2VycyB2ZGlyIHdjIHdobyB3aG9hbWkgeWVzIHVwdGltZSIKKworIyBob3N0bmFtZSBnZXRzIGEgc3BlY2lhbCB0cmVhdG1lbnQgYW5kIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzCitiYXNlX2JpbmRpcl9wcm9ncyA9ICJjYXQgY2hncnAgY2htb2QgY2hvd24gY3AgZGF0ZSBkZCBlY2hvIGZhbHNlIGtpbGwgbG4gbHMgbWtkaXIgXAorICAgICAgICAgICAgICAgICAgICAgbWtub2QgbXYgcHdkIHJtIHJtZGlyIHNsZWVwIHN0dHkgc3luYyB0b3VjaCB0cnVlIHVuYW1lIGhvc3RuYW1lIHN0YXQiCisKK3NiaW5kaXJfcHJvZ3M9ICJjaHJvb3QiCisKKyMgTGV0IGFjbG9jYWwgdXNlIHRoZSByZWxhdGl2ZSBwYXRoIGZvciB0aGUgbTQgZmlsZSByYXRoZXIgdGhhbiB0aGUKKyMgYWJzb2x1dGUgc2luY2UgY29yZXV0aWxzIGhhcyBhIGxvdCBvZiBtNCBmaWxlcywgb3RoZXJ3aXNlIHRoZXJlIG1pZ2h0CisjIGJlIGFuICJBcmd1bWVudCBsaXN0IHRvbyBsb25nIiBlcnJvciB3aGVuIGl0IGlzIGJ1aWx0IGluIGEgbG9uZy9kZWVwCisjIGRpcmVjdG9yeS4KK2FjcGF0aHMgPSAiLUkgLi9tNCIKKworZG9faW5zdGFsbCgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwlbICIke2JpbmRpcn0iICE9ICIke2Jhc2VfYmluZGlyfSIgXSAmJiBmb3IgaSBpbiAke2Jhc2VfYmluZGlyX3Byb2dzfTsgZG8gbXYgJHtEfSR7YmluZGlyfS8kaSAke0R9JHtiYXNlX2JpbmRpcn0vJGk7IGRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlbICIke2JpbmRpcn0iICE9ICIke3NiaW5kaXJ9IiBdICYmIGZvciBpIGluICR7c2JpbmRpcl9wcm9nc307IGRvIG12ICR7RH0ke2JpbmRpcn0vJGkgJHtEfSR7c2JpbmRpcn0vJGk7IGRvbmUKKworCSMgWyByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5nIGJlY2F1c2UgWy5jb3JldXRpbHMgd2lsbCBjYXVzZSB0aGUgc2VkIHN0dWZmCisJIyBpbiB1cGRhdGUtYWx0ZXJuYXRpdmVzIHRvIGZhaWwsIHRoZXJlZm9yZSB1c2UgbGJyYWNrZXQgLSB0aGUgbmFtZSB1c2VkCisJIyBmb3IgdGhlIGFjdHVhbCBzb3VyY2UgZmlsZS4KKwltdiAke0R9JHtiaW5kaXJ9L1sgJHtEfSR7YmluZGlyfS9sYnJhY2tldC4ke0JQTn0KKworCSMgTmV3ZXIgdmVyc2lvbnMgb2YgY29yZXV0aWxzIGRvIG5vdCBpbmNsdWRlIHN1LCB0byBtaW1pYyB0aGlzIGJlaGF2aW9yCisJIyB3ZSBzaW1wbHkgcmVtb3ZlIGl0LgorCXJtIC1mICR7RH0ke2JpbmRpcn0vc3UKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAibGJyYWNrZXQgJHtiaW5kaXJfcHJvZ3N9ICR7YmFzZV9iaW5kaXJfcHJvZ3N9ICR7c2JpbmRpcl9wcm9nc30iCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW3VwdGltZV0gPSAiMTAiCitBTFRFUk5BVElWRV9QUklPUklUWVtob3N0bmFtZV0gPSAiMTAiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtsYnJhY2tldF0gPSAiJHtiaW5kaXJ9L1siCitBTFRFUk5BVElWRV9UQVJHRVRbbGJyYWNrZXRdID0gIiR7YmluZGlyfS9sYnJhY2tldC4ke0JQTn0iCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKwlmb3IgcHJvZyBpbiBkLmdldFZhcignYmFzZV9iaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorCQlkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ2Jhc2VfYmluZGlyJywgVHJ1ZSksIHByb2cpKQorCisJZm9yIHByb2cgaW4gZC5nZXRWYXIoJ3NiaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorCQlkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ3NiaW5kaXInLCBUcnVlKSwgcHJvZykpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHNfOC4yNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc184LjI0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNGViY2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHNfOC4yNC5iYgpAQCAtMCwwICsxLDEyNyBAQAorU1VNTUFSWSA9ICJUaGUgYmFzaWMgZmlsZSwgc2hlbGwgYW5kIHRleHQgbWFuaXB1bGF0aW9uIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgQ29yZSBVdGlsaXRpZXMgcHJvdmlkZSB0aGUgYmFzaWMgZmlsZSwgc2hlbGwgYW5kIHRleHQgXAorbWFuaXB1bGF0aW9uIHV0aWxpdGllcy4gVGhlc2UgYXJlIHRoZSBjb3JlIHV0aWxpdGllcyB3aGljaCBhcmUgZXhwZWN0ZWQgdG8gZXhpc3Qgb24gXAorZXZlcnkgc3lzdGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jb3JldXRpbHMvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vZGViYnVncy5nbnUub3JnL2NvcmV1dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbHMuYztiZWdpbmxpbmU9NTtlbmRsaW5lPTE2O21kNT0zOGI3OTc4NWNhODg1MzdiNzU4NzE3ODJhMmEzYzZiOCIKK0RFUEVORFMgPSAiZ21wIGxpYmNhcCIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9jb3JldXRpbHMvJHtCUH0udGFyLnh6O25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgIGh0dHA6Ly9kaXN0ZmlsZXMuZ2VudG9vLm9yZy9kaXN0ZmlsZXMvJHtCUH0tbWFuLnRhci54ejtuYW1lPW1hbnBhZ2VzIFwKKyAgICAgICAgICAgZmlsZTovL21hbi1kZWNvdXBsZS1tYW5wYWdlcy1mcm9tLWJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS11c3ItbG9jYWwtbGliLWZyb20tbTQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXNlbGludXgtZmxhc2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICI0MGVmZGJjZTg2NWQyNDU4ZDhkYTBhOWRjZWU3YzE2YyIKK1NSQ19VUklbdGFyYmFsbC5zaGEyNTZzdW1dID0gImEyZDc1Mjg2YTRiOWVmM2ExMzAzOWMyZGEzODY4YTYxYmU0ZWU5ZjE3ZDhhZTM4MGEzNWE5N2U1MDY5NzIxNzAiCitTUkNfVVJJW21hbnBhZ2VzLm1kNXN1bV0gPSAiNzI4YTkxYTVjMTA5NWEzM2NmZmI5OTU5YmI4OTE5NjMiCitTUkNfVVJJW21hbnBhZ2VzLnNoYTI1NnN1bV0gPSAiY2YwMzMzYjVmMTM0YTMzMWUwYjQ2ZTJkZGY5MDY2NmY4YmRjMzI4MWMxY2EyYzdjY2JiNzViNDM3NTg5Y2UzNyIKKworRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLXdpdGhvdXQtZ21wIgorRVhUUkFfT0VDT05GX2NsYXNzLXRhcmdldCA9ICItLWVuYWJsZS1pbnN0YWxsLXByb2dyYW09YXJjaCAtLWxpYmV4ZWNkaXI9JHtsaWJkaXJ9IgorCisjIGFjbCBpcyBub3QgYSBkZWZhdWx0IGZlYXR1cmUKKyMKK1BBQ0tBR0VDT05GSUdfY2xhc3MtdGFyZ2V0ID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhY2wnLCAnYWNsJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID8/PSAiIgorCisjIHdpdGgsIHdpdGhvdXQsIGRlcGVuZHMsIHJkZXBlbmRzCisjCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLS1lbmFibGUtYWNsLC0tZGlzYWJsZS1hY2wsYWNsLCIKKworIyBbIGRmIG1rdGVtcCBiYXNlNjQgZ2V0cyBhIHNwZWNpYWwgdHJlYXRtZW50IGFuZCBpcyBub3QgaW5jbHVkZWQgaW4gdGhpcworYmluZGlyX3Byb2dzID0gImFyY2ggYmFzZW5hbWUgY2hjb24gY2tzdW0gY29tbSBjc3BsaXQgY3V0IGRpciBkaXJjb2xvcnMgZGlybmFtZSBkdSBcCisgICAgICAgICAgICAgICAgZW52IGV4cGFuZCBleHByIGZhY3RvciBmbXQgZm9sZCBncm91cHMgaGVhZCBob3N0aWQgaWQgaW5zdGFsbCBcCisgICAgICAgICAgICAgICAgam9pbiBsaW5rIGxvZ25hbWUgbWQ1c3VtIG1rZmlmbyBuaWNlIG5sIG5vaHVwIG5wcm9jIG9kIHBhc3RlIHBhdGhjaGsgXAorICAgICAgICAgICAgICAgIHBpbmt5IHByIHByaW50ZW52IHByaW50ZiBwdHggcmVhZGxpbmsgcmVhbHBhdGggcnVuY29uIHNlcSBzaGExc3VtIHNoYTIyNHN1bSBzaGEyNTZzdW0gXAorICAgICAgICAgICAgICAgIHNoYTM4NHN1bSBzaGE1MTJzdW0gc2hyZWQgc2h1ZiBzb3J0IHNwbGl0IHN0ZGJ1ZiBzdW0gdGFjIHRhaWwgdGVlIHRlc3QgdGltZW91dFwKKyAgICAgICAgICAgICAgICB0ciB0cnVuY2F0ZSB0c29ydCB0dHkgdW5leHBhbmQgdW5pcSB1bmxpbmsgdXB0aW1lIHVzZXJzIHZkaXIgd2Mgd2hvIHdob2FtaSB5ZXMiCisKKyMgaG9zdG5hbWUgZ2V0cyBhIHNwZWNpYWwgdHJlYXRtZW50IGFuZCBpcyBub3QgaW5jbHVkZWQgaW4gdGhpcworYmFzZV9iaW5kaXJfcHJvZ3MgPSAiY2F0IGNoZ3JwIGNobW9kIGNob3duIGNwIGRhdGUgZGQgZWNobyBmYWxzZSBraWxsIGxuIGxzIG1rZGlyIFwKKyAgICAgICAgICAgICAgICAgICAgIG1rbm9kIG12IHB3ZCBybSBybWRpciBzbGVlcCBzdHR5IHN5bmMgdG91Y2ggdHJ1ZSB1bmFtZSBzdGF0IgorCitzYmluZGlyX3Byb2dzPSAiY2hyb290IgorCisjIExldCBhY2xvY2FsIHVzZSB0aGUgcmVsYXRpdmUgcGF0aCBmb3IgdGhlIG00IGZpbGUgcmF0aGVyIHRoYW4gdGhlCisjIGFic29sdXRlIHNpbmNlIGNvcmV1dGlscyBoYXMgYSBsb3Qgb2YgbTQgZmlsZXMsIG90aGVyd2lzZSB0aGVyZSBtaWdodAorIyBiZSBhbiAiQXJndW1lbnQgbGlzdCB0b28gbG9uZyIgZXJyb3Igd2hlbiBpdCBpcyBidWlsdCBpbiBhIGxvbmcvZGVlcAorIyBkaXJlY3RvcnkuCithY3BhdGhzID0gIi1JIC4vbTQiCisKKyMgRGVhbCB3aXRoIGEgc2VwYXJhdGUgYnVpbGRkaXIgZmFpbHVyZSBpZiBzcmMgZG9lc24ndCBleGlzdCB3aGVuIGNyZWF0aW5nIHZlcnNpb24uYy92ZXJzaW9uLmgKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisJbWtkaXIgLXAgJHtCfS9zcmMKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJZm9yIGkgaW4gZGYgbWt0ZW1wIGJhc2U2NDsgZG8gbXYgJHtEfSR7YmluZGlyfS8kaSAke0R9JHtiaW5kaXJ9LyRpLiR7QlBOfTsgZG9uZQorCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwlbICIke2Jhc2VfYmluZGlyfSIgIT0gIiR7YmluZGlyfSIgXSAmJiBmb3IgaSBpbiAke2Jhc2VfYmluZGlyX3Byb2dzfTsgZG8gbXYgJHtEfSR7YmluZGlyfS8kaSAke0R9JHtiYXNlX2JpbmRpcn0vJGkuJHtCUE59OyBkb25lCisKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJWyAiJHtzYmluZGlyfSIgIT0gIiR7YmluZGlyfSIgXSAmJiBmb3IgaSBpbiAke3NiaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke3NiaW5kaXJ9LyRpLiR7QlBOfTsgZG9uZQorCisJIyBbIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcgYmVjYXVzZSBbLmNvcmV1dGlscyB3aWxsIGNhdXNlIHRoZSBzZWQgc3R1ZmYKKwkjIGluIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgdG8gZmFpbCwgdGhlcmVmb3JlIHVzZSBsYnJhY2tldCAtIHRoZSBuYW1lIHVzZWQKKwkjIGZvciB0aGUgYWN0dWFsIHNvdXJjZSBmaWxlLgorCW12ICR7RH0ke2JpbmRpcn0vWyAke0R9JHtiaW5kaXJ9L2xicmFja2V0LiR7QlBOfQorCisJIyBwcmVidWlsdCBtYW4gcGFnZXMKKwlpbnN0YWxsIC1kICR7RH0vJHttYW5kaXJ9L21hbjEKKwlpbnN0YWxsIC10ICR7RH0vJHttYW5kaXJ9L21hbjEgJHtTfS9tYW4vKi4xCisJIyBwcmVidWlsdCBtYW4gcGFnZXMgZG9uJ3QgZG8gYSBzZXBhcmF0ZSBtYW4gcGFnZSBmb3IgWyB2cyB0ZXN0LgorCSMgc2VlIGNvbW1lbnQgYWJvdmUgci5lLiBzZWQgYW5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKwljcCAtYSAke0R9JHttYW5kaXJ9L21hbjEvdGVzdC4xICR7RH0ke21hbmRpcn0vbWFuMS9sYnJhY2tldC4xLiR7QlBOfQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKXsKKwkjIHJlbW92ZSBncm91cHMgdG8gZml4IGNvbmZsaWN0IHdpdGggc2hhZG93LW5hdGl2ZQorCXJtIC1mICR7RH0ke1NUQUdJTkdfQklORElSX05BVElWRX0vZ3JvdXBzCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJsYnJhY2tldCAke2JpbmRpcl9wcm9nc30gJHtiYXNlX2JpbmRpcl9wcm9nc30gJHtzYmluZGlyX3Byb2dzfSBiYXNlNjQgbWt0ZW1wIGRmIgorQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gImJhc2U2NC4xIG1rdGVtcC4xIGRmLjEgbGJyYWNrZXQuMSBncm91cHMuMSBraWxsLjEgdXB0aW1lLjEgc3RhdC4xIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbYmFzZTY0XSA9ICIke2Jhc2VfYmluZGlyfS9iYXNlNjQiCitBTFRFUk5BVElWRV9UQVJHRVRbYmFzZTY0XSA9ICIke2JpbmRpcn0vYmFzZTY0LiR7QlBOfSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtiYXNlNjQuMV0gPSAiJHttYW5kaXJ9L21hbjEvYmFzZTY0LjEiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtta3RlbXBdID0gIiR7YmFzZV9iaW5kaXJ9L21rdGVtcCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtta3RlbXBdID0gIiR7YmluZGlyfS9ta3RlbXAuJHtCUE59IgorQUxURVJOQVRJVkVfTElOS19OQU1FW21rdGVtcC4xXSA9ICIke21hbmRpcn0vbWFuMS9ta3RlbXAuMSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2RmXSA9ICIke2Jhc2VfYmluZGlyfS9kZiIKK0FMVEVSTkFUSVZFX1RBUkdFVFtkZl0gPSAiJHtiaW5kaXJ9L2RmLiR7QlBOfSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtkZi4xXSA9ICIke21hbmRpcn0vbWFuMS9kZi4xIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbGJyYWNrZXRdID0gIiR7YmluZGlyfS9bIgorQUxURVJOQVRJVkVfVEFSR0VUW2xicmFja2V0XSA9ICIke2JpbmRpcn0vbGJyYWNrZXQuJHtCUE59IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2xicmFja2V0LjFdID0gIiR7bWFuZGlyfS9tYW4xL2xicmFja2V0LjEiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtncm91cHMuMV0gPSAiJHttYW5kaXJ9L21hbjEvZ3JvdXBzLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdXB0aW1lLjFdID0gIiR7bWFuZGlyfS9tYW4xL3VwdGltZS4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2tpbGwuMV0gPSAiJHttYW5kaXJ9L21hbjEva2lsbC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N0YXQuMV0gPSAiJHttYW5kaXJ9L21hbjEvc3RhdC4xIgorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisJZm9yIHByb2cgaW4gZC5nZXRWYXIoJ2Jhc2VfYmluZGlyX3Byb2dzJywgVHJ1ZSkuc3BsaXQoKToKKwkJZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBwcm9nLCAnJXMvJXMnICUgKGQuZ2V0VmFyKCdiYXNlX2JpbmRpcicsIFRydWUpLCBwcm9nKSkKKworCWZvciBwcm9nIGluIGQuZ2V0VmFyKCdzYmluZGlyX3Byb2dzJywgVHJ1ZSkuc3BsaXQoKToKKwkJZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBwcm9nLCAnJXMvJXMnICUgKGQuZ2V0VmFyKCdzYmluZGlyJywgVHJ1ZSksIHByb2cpKQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMtd2FpdC9kYnVzLXdhaXRfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzLXdhaXQvZGJ1cy13YWl0X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTFkYzg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzLXdhaXQvZGJ1cy13YWl0X2dpdC5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIkEgc2ltcGxlIHRvb2wgdG8gd2FpdCBmb3IgYSBzcGVjaWZpYyBzaWduYWwgb3ZlciBEQnVzIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvZGJ1cy13YWl0IgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorCitERVBFTkRTID0gImRidXMiCisKK1NSQ1JFViA9ICI2Y2M2MDc3YTM2ZmUyNjQ4YTVmOTkzZmU3YzE2Yzk2MzJmOTQ2NTE3IgorUFYgPSAiMC4xK2dpdCR7U1JDUFZ9IgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkMDEzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIuaW5jCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAiSGlnaCBsZXZlbCBsYW5ndWFnZSAoR0xpYikgYmluZGluZyBmb3IgRC1CdXMiCitERVNDUklQVElPTiA9ICJHTGliIGJpbmRpbmdzIGZvciB0aGUgRC1CdXMgbWVzc2FnZSBidXMgdGhhdCBpbnRlZ3JhdGUgXAordGhlIEQtQnVzIGxpYnJhcnkgd2l0aCB0aGUgR0xpYiB0aHJlYWQgYWJzdHJhY3Rpb24gYW5kIG1haW4gbG9vcC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9Tb2Z0d2FyZS9kYnVzIgorTElDRU5TRSA9ICJBRkwtMiB8IEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWNmNWIzYTJmNzA4Mzc1MGQ1MDQzMzMxMTRlNzM4NjU2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RidXMvZGJ1cy1nbGliLmg7YmVnaW5saW5lPTc7ZW5kbGluZT0yMTttZDU9Nzc1NWM5ZDdhYmNjZDVkYmQyNWE2YTk3NDUzOGJiM2MiCitTRUNUSU9OID0gImJhc2UiCisKK0RFUEVORFMgPSAiZXhwYXQgZ2xpYi0yLjAgdmlydHVhbC9saWJpbnRsIGRidXMtZ2xpYi1uYXRpdmUgZGJ1cyIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImdsaWItMi4wLW5hdGl2ZSBkYnVzLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvZGJ1cy1nbGliL2RidXMtZ2xpYi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbm8tZXhhbXBsZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGVzdC1pbnN0YWxsLW1ha2VmaWxlLnBhdGNoIFwKKyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQKKworI2RlZmF1bHQgZGlzYWJsZSByZWdyZXNzaW9uIHRlc3RzLCBzb21lIHVuaXQgdGVzdCBjb2RlIGluIG5vbiB0ZXN0aW5nIGNvZGUKKyNQQUNLQUdFQ09ORklHX3BuLSR7UE59ID0gInRlc3RzIiBlbmFibGUgcmVncmVzc2lvbiB0ZXN0cyBsb2NhbC5jb25mCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1t0ZXN0c10gPSAiLS1lbmFibGUtdGVzdHMsLCwiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtaW50cm9zcGVjdC14bWw9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9kYnVzL2RidXMtYnVzLWludHJvc3BlY3QueG1sIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtZGJ1cy1iaW5kaW5nLXRvb2w9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2RidXMtYmluZGluZy10b29sIgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLXdpdGgtaW50cm9zcGVjdC14bWw9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9kYnVzL2RidXMtYnVzLWludHJvc3BlY3QueG1sIgorCitQQUNLQUdFUyArPSAiJHtQTn0tYmFzaC1jb21wbGV0aW9uICR7UE59LXRlc3RzLWRiZyAke1BOfS10ZXN0cyIKKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU30iCitGSUxFU18ke1BOfS1iYXNoLWNvbXBsZXRpb24gPSAiJHtzeXNjb25mZGlyfS9iYXNoX2NvbXBsZXRpb24uZC9kYnVzLWJhc2gtY29tcGxldGlvbi5zaCBcCisgICAke2xpYmV4ZWNkaXJ9L2RidXMtYmFzaC1jb21wbGV0aW9uLWhlbHBlciIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2RidXMtMS4wL2luY2x1ZGUgJHtiaW5kaXJ9L2RidXMtZ2xpYi10b29sIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vZGJ1cy1iaW5kaW5nLXRvb2wiCisKK1JERVBFTkRTXyR7UE59LXRlc3RzICs9ICJkYnVzLXgxMSIKK0ZJTEVTXyR7UE59LXRlc3RzID0gIiR7ZGF0YWRpcn0vJHtCUE59L3Rlc3RzIgorRklMRVNfJHtQTn0tdGVzdHMtZGJnID0gIiR7ZGF0YWRpcn0vJHtCUE59L3Rlc3RzLy5kZWJ1Zy8qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9LyR7QlBOfS90ZXN0cy9jb3JlLy5kZWJ1Zy8qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9LyR7QlBOfS90ZXN0cy9pbnRlcmZhY2VzLy5kZWJ1Zy8qIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIvbm8tZXhhbXBsZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliL25vLWV4YW1wbGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYjQ5NjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliL25vLWV4YW1wbGVzLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK0Rpc2FibGUgY29tcGlsaW5nIGV4YW1wbGVzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitTaWduZWQtb2ZmLWJ5OiBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gZGJ1cy1nbGliLTAuNzAvZGJ1cy9NYWtlZmlsZS5hbS5vcmlnCTIwMDYtMDctMjMgMTY6MDQ6NDMuMDAwMDAwMDAwICswMjAwCisrKysgZGJ1cy1nbGliLTAuNzAvZGJ1cy9NYWtlZmlsZS5hbQkyMDA2LTA3LTIzIDE2OjA0OjUyLjAwMDAwMDAwMCArMDIwMAorQEAgLTEsNCArMSw0IEBACistU1VCRElSUyA9IC4gZXhhbXBsZXMKKytTVUJESVJTID0gLgorIAorIElOQ0xVREVTPS1JJCh0b3Bfc3JjZGlyKSAkKERCVVNfQ0ZMQUdTKSAkKERCVVNfR0xJQl9DRkxBR1MpICQoREJVU19HTElCX1RPT0xfQ0ZMQUdTKSAtRERCVVNfQ09NUElMQVRJT049MSAtRERCVVNfTE9DQUxFRElSPVwiJChwcmVmaXgpL0BEQVRBRElSTkFNRUAvbG9jYWxlXCIgCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliL3Rlc3QtaW5zdGFsbC1tYWtlZmlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIvdGVzdC1pbnN0YWxsLW1ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyN2M4MmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliL3Rlc3QtaW5zdGFsbC1tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDU3IEBACitDaGFuZ2UgTWFrZWZpbGUuYW0gdG8gaW5zdGFsbCByZWdyZXNzaW9uIHRlc3RzIGZvciB0ZXN0IHBhY2thZ2UgcHVycG9zZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt0ZXN0IG5vdCBpbnN0YWxsIGlzIGZvciBwdXJwb3NlIGZyb20gdXBzdHJlYW1dCisKK1NpZ25lZC1vZmYtYnk6IFlhbyBaaGFvIDx5YW8uemhhb0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyB0ZXN0L01ha2VmaWxlLmFtICAgICAgICAgICAgfCAzICsrLQorIHRlc3QvY29yZS9NYWtlZmlsZS5hbSAgICAgICB8IDMgKystCisgdGVzdC9pbnRlcmZhY2VzL01ha2VmaWxlLmFtIHwgMyArKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3Rlc3QvTWFrZWZpbGUuYW0gYi90ZXN0L01ha2VmaWxlLmFtCitpbmRleCAzNzljOGMzLi42NTgwOTI3IDEwMDY0NAorLS0tIGEvdGVzdC9NYWtlZmlsZS5hbQorKysrIGIvdGVzdC9NYWtlZmlsZS5hbQorQEAgLTQ4LDcgKzQ4LDggQEAgVEVTVFMgPSBcCisgCSQodGVzdF9zY3JpcHRzKSBcCisgCSQoTlVMTCkKKyAKKy1ub2luc3RfUFJPR1JBTVMgPSBcCisrdGVzdGRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VAL3Rlc3RzCisrdGVzdF9QUk9HUkFNUyA9IFwKKyAJJCh0ZXN0X3Byb2dyYW1zKSBcCisgCSQodGVzdF9yZWxhdGVkX3Byb2dyYW1zKSBcCisgCSQoTlVMTCkKK2RpZmYgLS1naXQgYS90ZXN0L2NvcmUvTWFrZWZpbGUuYW0gYi90ZXN0L2NvcmUvTWFrZWZpbGUuYW0KK2luZGV4IGU0YmNlYjQuLjU0YjA3N2QgMTAwNjQ0CistLS0gYS90ZXN0L2NvcmUvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3QvY29yZS9NYWtlZmlsZS5hbQorQEAgLTY0LDcgKzY0LDggQEAgZW5kaWYKKyAKKyAjIyB3ZSB1c2Ugbm9pbnN0X1BST0dSQU1TIG5vdCBjaGVja19QUk9HUkFNUyBmb3IgVEVTVFMgc28gdGhhdCB3ZQorICMjIGJ1aWxkIGV2ZW4gd2hlbiBub3QgZG9pbmcgIm1ha2UgY2hlY2siCistbm9pbnN0X1BST0dSQU1TID0gXAorK3Rlc3RkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQC90ZXN0cy9jb3JlCisrdGVzdF9QUk9HUkFNUyA9IFwKKyAJdGVzdC1kYnVzLWdsaWIgXAorIAl0ZXN0LWVycm9yLW1hcHBpbmcgXAorIAl0ZXN0LXNlcnZpY2UtZ2xpYiBcCitkaWZmIC0tZ2l0IGEvdGVzdC9pbnRlcmZhY2VzL01ha2VmaWxlLmFtIGIvdGVzdC9pbnRlcmZhY2VzL01ha2VmaWxlLmFtCitpbmRleCBhOTRkMDhkLi43MDdkY2FjIDEwMDY0NAorLS0tIGEvdGVzdC9pbnRlcmZhY2VzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0L2ludGVyZmFjZXMvTWFrZWZpbGUuYW0KK0BAIC01Nyw3ICs1Nyw4IEBAIGlmIERCVVNfQlVJTERfVEVTVFMKKyAKKyAjIyB3ZSB1c2Ugbm9pbnN0X1BST0dSQU1TIG5vdCBjaGVja19QUk9HUkFNUyBmb3IgVEVTVFMgc28gdGhhdCB3ZQorICMjIGJ1aWxkIGV2ZW4gd2hlbiBub3QgZG9pbmcgIm1ha2UgY2hlY2siCistbm9pbnN0X1BST0dSQU1TID0gdGVzdC1zZXJ2aWNlIHRlc3QtY2xpZW50CisrdGVzdGRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VAL3Rlc3RzL2ludGVyZmFjZXMKKyt0ZXN0X1BST0dSQU1TID0gdGVzdC1zZXJ2aWNlIHRlc3QtY2xpZW50CisgCisgdGVzdF9zZXJ2aWNlX1NPVVJDRVMgPSBcCisgCXRlc3QtaW50ZXJmYWNlcy5jIFwKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYl8wLjEwNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWJfMC4xMDQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEyNjNjMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWJfMC4xMDQuYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIGRidXMtZ2xpYi5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gIjU0OTdkMjA3MDcwOWNmNzk2ZjE4NzhjNzVhNzJhMDM5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJmYzFmMWE4MmJmYzNlYzNlY2FmZTA0ZDBlODdiYWI3ZTk5OWY1MGRjZTRmNGEzNGQwYjg5Y2FmNmJkODIxZjYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy10ZXN0XzEuOC4yMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLXRlc3RfMS44LjIwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNDA3MGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy10ZXN0XzEuOC4yMC5iYgpAQCAtMCwwICsxLDYxIEBACitTVU1NQVJZID0gIkQtQnVzIHRlc3QgcGFja2FnZSAoZm9yIEQtYnVzIGZ1bmN0aW9uYWxpdHkgdGVzdGluZyBvbmx5KSIKK0hPTUVQQUdFID0gImh0dHA6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiQUZMLTIgfCBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMGRkZWQzYjU4MTQ4ZjNmMWZkODA0YjI2MzU0YWYzZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kYnVzL2RidXMuaDtiZWdpbmxpbmU9NjtlbmRsaW5lPTIwO21kNT03NzU1YzlkN2FiY2NkNWRiZDI1YTZhOTc0NTM4YmIzYyIKKworREVQRU5EUyA9ICJweXRob24tcHlnb2JqZWN0IGRidXMgZGJ1cy1nbGliIgorCitSREVQRU5EU18ke1BOfSArPSAibWFrZSIKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzL2RidXMvZGJ1cy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vdG1wZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RidXMtMS5pbml0ICBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vcHl0aG9uLWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jbGVhci1ndWlkX2Zyb21fc2VydmVyLWlmLXNlbmRfbmVnb3RpYXRlX3VuaXhfZi5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImI0OTg5MGJiYWJlZGFiM2ExYzNmNGY3M2M3ZmY4YjJiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVjNGZiZjRjNjQ2MjFjOTZlODcxZGE5MWQyYjcyOWE1YjAwNTM2ZTExNmQzYzQ2MTJhNDY5ZDkyNGIxYjcwM2EiCisKK1M9IiR7V09SS0RJUn0vZGJ1cy0ke1BWfSIKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L2RidXM6IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCBwdGVzdAorCitFWFRSQV9PRUNPTkZfWCA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICctLXdpdGgteCcsICctLXdpdGhvdXQteCcsIGQpfSIKK0VYVFJBX09FQ09ORl9YX2NsYXNzLW5hdGl2ZSA9ICItLXdpdGhvdXQteCIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXRlc3RzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1tb2R1bGFyLXRlc3RzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1pbnN0YWxsZWQtdGVzdHMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWNoZWNrcyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtYXNzZXJ0cyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtdmVyYm9zZS1tb2RlIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUteG1sLWRvY3MgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kb3h5Z2VuLWRvY3MgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1saWJhdWRpdCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXN5c3RlbWQgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1zeXN0ZW1kc3lzdGVtdW5pdGRpciBcCisgICAgICAgICAgICAgICAgLS13aXRoLWRidXMtdGVzdC1kaXI9JHtQVEVTVF9QQVRIfSBcCisgICAgICAgICAgICAgICAgJHtFWFRSQV9PRUNPTkZfWH0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgOgorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWluc3RhbGwgLWQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCWNhc2UxPSJzaGVsbCBwcmludGYgcmVmcyBzeXNsb2ciCisJZm9yIGkgaW4gJHtjYXNlMX07IGRvIGluc3RhbGwgJHtCfS90ZXN0L3Rlc3QtJGkgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdDsgZG9uZQorCWNhc2UyPSJtYXJzaGFsIHN5bnRheCBjb3JydXB0IGRidXMtZGFlbW9uIGRidXMtZGFlbW9uLWVhdmVzZHJvcCBsb29wYmFjayByZWxheSIKKwlmb3IgaSBpbiAke2Nhc2UyfTsgZG8gaW5zdGFsbCAke0J9L3Rlc3QvLmxpYnMvdGVzdC0kaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0OyBkb25lCisJY2FzZTM9ImJ1cyBidXMtc3lzdGVtIGJ1cy1sYXVuY2gtaGVscGVyIgorCWZvciBpIGluICR7Y2FzZTN9OyBkbyBpbnN0YWxsICR7Qn0vYnVzL3Rlc3QtJGkgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdDsgZG9uZQorCWluc3RhbGwgJHtCfS9kYnVzL3Rlc3QtZGJ1cyAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJY3AgLXIgJHtCfS90ZXN0L2RhdGEgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorfQorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImJhc2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3MTA4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLmluYwpAQCAtMCwwICsxLDE3MCBAQAorU1VNTUFSWSA9ICJELUJ1cyBtZXNzYWdlIGJ1cyIKK0RFU0NSSVBUSU9OID0gIkQtQnVzIGlzIGEgbWVzc2FnZSBidXMgc3lzdGVtLCBhIHNpbXBsZSB3YXkgZm9yIGFwcGxpY2F0aW9ucyB0byB0YWxrIHRvIG9uZSBhbm90aGVyLiBJbiBhZGRpdGlvbiB0byBpbnRlcnByb2Nlc3MgY29tbXVuaWNhdGlvbiwgRC1CdXMgaGVscHMgY29vcmRpbmF0ZSBwcm9jZXNzIGxpZmVjeWNsZTsgaXQgbWFrZXMgaXQgc2ltcGxlIGFuZCByZWxpYWJsZSB0byBjb2RlIGEgXCJzaW5nbGUgaW5zdGFuY2VcIiBhcHBsaWNhdGlvbiBvciBkYWVtb24sIGFuZCB0byBsYXVuY2ggYXBwbGljYXRpb25zIGFuZCBkYWVtb25zIG9uIGRlbWFuZCB3aGVuIHRoZWlyIHNlcnZpY2VzIGFyZSBuZWVkZWQuIgorSE9NRVBBR0UgPSAiaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJBRkwtMiB8IEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEwZGRlZDNiNTgxNDhmM2YxZmQ4MDRiMjYzNTRhZjNlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RidXMvZGJ1cy5oO2JlZ2lubGluZT02O2VuZGxpbmU9MjA7bWQ1PTc3NTVjOWQ3YWJjY2Q1ZGJkMjVhNmE5NzQ1MzhiYjNjIgorREVQRU5EUyA9ICJleHBhdCB2aXJ0dWFsL2xpYmludGwiCitSREVQRU5EU19kYnVzX2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU19kYnVzX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitQQUNLQUdFUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdGVzdCcsICcke1BOfS1wdGVzdCcsICcnLCBkKX0iCitBTExPV19FTVBUWV9kYnVzLXB0ZXN0ID0gIjEiCitSREVQRU5EU19kYnVzLXB0ZXN0X2NsYXNzLXRhcmdldCA9ICJkYnVzLXRlc3QtcHRlc3QiCisKK1NSQ19VUkkgPSAiaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzL2RidXMvZGJ1cy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vdG1wZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RidXMtMS5pbml0IFwKKyAgICAgICAgICAgZmlsZTovL29zLXRlc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2xlYXItZ3VpZF9mcm9tX3NlcnZlci1pZi1zZW5kX25lZ290aWF0ZV91bml4X2YucGF0Y2ggXAorIgorCitpbmhlcml0IHVzZXJhZGQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IHVwZGF0ZS1yYy5kCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJkYnVzLTEiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAwMiA1IDMgMiAuIHN0b3AgMjAgMCAxIDYgLiIKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9VUERBVEVSQ0RfQkJDTEFTUyIsICIxIikKK30KKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi1yIG5ldGRldiIKK1VTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gLS1ob21lICR7bG9jYWxzdGF0ZWRpcn0vbGliL2RidXMgXAorICAgICAgICAgICAgICAgICAgICAgICAtLW5vLWNyZWF0ZS1ob21lIC0tc2hlbGwgL2Jpbi9mYWxzZSBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tdXNlci1ncm91cCBtZXNzYWdlYnVzIgorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9kYnVzLTEvc3lzdGVtLmNvbmYgJHtzeXNjb25mZGlyfS9kYnVzLTEvc2Vzc2lvbi5jb25mIgorCitERUJJQU5OQU1FXyR7UE59ID0gImRidXMtMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWxpYiIKKworT0xEUEtHTkFNRSA9ICJkYnVzLXgxMSIKK09MRFBLR05BTUVfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworIyBmb3IgY29tcGF0aWJpbGl0eQorUlBST1ZJREVTXyR7UE59ID0gIiR7T0xEUEtHTkFNRX0iCitSUkVQTEFDRVNfJHtQTn0gKz0gIiR7T0xEUEtHTkFNRX0iCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9kYnVzLWRhZW1vbiogXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtdXVpZGdlbiBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy1jbGVhbnVwLXNvY2tldHMgXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtc2VuZCBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy1tb25pdG9yIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLWxhdW5jaCBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy1ydW4tc2Vzc2lvbiBcCisgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L2RidXMqIFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0gXAorICAgICAgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfSBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcyBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMgXAorICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8iCitGSUxFU18ke1BOfS1saWIgPSAiJHtsaWJkaXJ9L2xpYiouc28uKiIKK1JSRUNPTU1FTkRTXyR7UE59LWxpYiA9ICIke1BOfSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2RidXMtMS4wL2luY2x1ZGUgJHtiaW5kaXJ9L2RidXMtZ2xpYi10b29sIgorCitwa2dfcG9zdGluc3RfZGJ1cygpIHsKKwkjIElmIGJvdGggc3lzdGVtZCBhbmQgc3lzdmluaXQgYXJlIGVuYWJsZWQsIG1hc2sgdGhlIGRidXMtMSBpbml0IHNjcmlwdAorICAgICAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCBzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCQlPUFRTPSItLXJvb3Q9JEQiCisJCWZpCisJCXN5c3RlbWN0bCAkT1BUUyBtYXNrIGRidXMtMS5zZXJ2aWNlCisJZmkKKworCWlmIFsgLXogIiREIiBdICYmIFsgLWUgL2V0Yy9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggXSA7IHRoZW4KKwkJL2V0Yy9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggdXBkYXRlCisJZmkKK30KKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS10ZXN0cyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXhtbC1kb2NzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtZG94eWdlbi1kb2NzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbGliYXVkaXQgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1zeXN0ZW1kIFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtZGJ1cy1nbGliIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgLS1kaXNhYmxlLXNlbGludXgiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnc3lzdGVtZCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA9ICIiCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKKyMgV291bGQgbGlrZSB0byAtLWVuYWJsZS1zeXN0ZW1kIGJ1dCB0aGF0J3MgYSBjaXJjdWxhciBidWlsZC1kZXBlbmRlbmN5IGJldHdlZW4KKyMgc3lzdGVtZDwtPmRidXMKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vLC0td2l0aG91dC1zeXN0ZW1kc3lzdGVtdW5pdGRpciIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteCAtLWVuYWJsZS14MTEtYXV0b2xhdW5jaCwtLXdpdGhvdXQteCAtLWRpc2FibGUteDExLWF1dG9sYXVuY2gsIHZpcnR1YWwvbGlieDExIGxpYnNtIgorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwkJc2VkICdzOkBiaW5kaXJAOiR7YmluZGlyfTonIDwgJHtXT1JLRElSfS9kYnVzLTEuaW5pdCA+JHtXT1JLRElSfS9kYnVzLTEuaW5pdC5zaAorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9kYnVzLTEuaW5pdC5zaCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZGJ1cy0xCisJZmkKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCWZvciBpIGluIGRidXMudGFyZ2V0LndhbnRzIHNvY2tldHMudGFyZ2V0LndhbnRzIG11bHRpLXVzZXIudGFyZ2V0LndhbnRzOyBkbyBcCisJCQlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyRpOyBkb25lCisJCWluc3RhbGwgLW0gMDY0NCAke0J9L2J1cy9kYnVzLnNlcnZpY2UgJHtCfS9idXMvZGJ1cy5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJCWNkICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2RidXMudGFyZ2V0LndhbnRzLworCQlsbiAtZnMgLi4vZGJ1cy5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGJ1cy50YXJnZXQud2FudHMvZGJ1cy5zb2NrZXQKKwkJbG4gLWZzIC4uL2RidXMuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NvY2tldHMudGFyZ2V0LndhbnRzL2RidXMuc29ja2V0CisJCWxuIC1mcyAuLi9kYnVzLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbXVsdGktdXNlci50YXJnZXQud2FudHMvZGJ1cy5zZXJ2aWNlCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwllY2hvICJkIG1lc3NhZ2VidXMgbWVzc2FnZWJ1cyAwNzU1ICR7bG9jYWxzdGF0ZWRpcn0vcnVuL2RidXMgbm9uZSIgXAorCSAgICAgPiAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy85OV9kYnVzCisKKworCW1rZGlyIC1wICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kYnVzCisKKwljaG93biBtZXNzYWdlYnVzOm1lc3NhZ2VidXMgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2RidXMKKworCWNob3duIHJvb3Q6bWVzc2FnZWJ1cyAke0R9JHtsaWJleGVjZGlyfS9kYnVzLWRhZW1vbi1sYXVuY2gtaGVscGVyCisJY2htb2QgNDc1NSAke0R9JHtsaWJleGVjZGlyfS9kYnVzLWRhZW1vbi1sYXVuY2gtaGVscGVyCisKKwkjIFJlbW92ZSBSZWQgSGF0IGluaXRzY3JpcHQKKwlybSAtcmYgJHtEfSR7c3lzY29uZmRpcn0vcmMuZAorCisJIyBSZW1vdmUgZW1wdHkgdGVzdGV4ZWMgZGlyZWN0b3J5IGFzIHdlIGRvbid0IGJ1aWxkIHRlc3RzCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vZGJ1cy0xLjAvdGVzdAorCisJIyBSZW1vdmUgL3Zhci9ydW4gYXMgaXQgaXMgY3JlYXRlZCBvbiBzdGFydHVwCisJcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bgorfQorCitkb19pbnN0YWxsX2NsYXNzLW5hdGl2ZSgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBmb3IgZGJ1cy1nbGliLW5hdGl2ZSBpbnRyb3NwZWN0aW9uIGdlbmVyYXRpb24KKwlpbnN0YWxsIC1kICR7RH0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2RidXMvCisJIyBOLkIuIGlzIGJlbG93IGluc3RhbGwgYWN0dWFsbHkgcmVxdWlyZWQ/CisJaW5zdGFsbCAtbSAwNjQ0IGJ1cy9zZXNzaW9uLmNvbmYgJHtEfSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZGJ1cy9zZXNzaW9uLmNvbmYKKworCSMgZGJ1cy1nbGliLW5hdGl2ZSBhbmQgZGJ1cy1nbGliIG5lZWQgdGhpcyB4bWwgZmlsZQorCS4vYnVzL2RidXMtZGFlbW9uIC0taW50cm9zcGVjdCA+ICR7RH0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2RidXMvZGJ1cy1idXMtaW50cm9zcGVjdC54bWwKKwkKKwkjIGRidXMtbGF1bmNoIGhhcyBubyBYIHN1cHBvcnQgc28gbGV0cyBub3QgaW5zdGFsbCBpdCBpbiBjYXNlIHRoZSBob3N0CisJIyBoYXMgYSBtb3JlIGZlYXR1cmVkIGFuZCB1c2VmdWwgdmVyc2lvbgorCXJtIC1mICR7RH0ke2JpbmRpcn0vZGJ1cy1sYXVuY2gKK30KKworZG9faW5zdGFsbF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgZGJ1cy1sYXVuY2ggaGFzIG5vIFggc3VwcG9ydCBzbyBsZXRzIG5vdCBpbnN0YWxsIGl0IGluIGNhc2UgdGhlIGhvc3QKKwkjIGhhcyBhIG1vcmUgZmVhdHVyZWQgYW5kIHVzZWZ1bCB2ZXJzaW9uCisJcm0gLWYgJHtEfSR7YmluZGlyfS9kYnVzLWxhdW5jaAorCisJIyBSZW1vdmUgL3Zhci9ydW4gdG8gYXZvaWQgUUEgZXJyb3IKKwlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuCit9CitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0lOU0FORV9TS0lQXyR7UE59LXB0ZXN0ICs9ICJidWlsZC1kZXBzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvY2xlYXItZ3VpZF9mcm9tX3NlcnZlci1pZi1zZW5kX25lZ290aWF0ZV91bml4X2YucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9jbGVhci1ndWlkX2Zyb21fc2VydmVyLWlmLXNlbmRfbmVnb3RpYXRlX3VuaXhfZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmI2ZDljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvY2xlYXItZ3VpZF9mcm9tX3NlcnZlci1pZi1zZW5kX25lZ290aWF0ZV91bml4X2YucGF0Y2gKQEAgLTAsMCArMSwxMDQgQEAKK0Zyb20gYjhmODRiZDM5NDg1ZDM5Nzc2MjVjOWE4YjhlOGNmZjVkMjNiZTU2ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMjcgRmViIDIwMTQgMDk6MDU6MDIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZGJ1czogY2xlYXIgZ3VpZF9mcm9tX3NlcnZlciBpZiBzZW5kX25lZ290aWF0ZV91bml4X2ZkCisgZmFpbGVkCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK2J1cy10ZXN0IGRpc3BhdGNoIHRlc3QgZmFpbGVkIHdpdGggYmVsb3cgaW5mb3JtYXRpb246CisgICAgLi9idXMvYnVzLXRlc3Q6IFJ1bm5pbmcgbWVzc2FnZSBkaXNwYXRjaCB0ZXN0CisgICAgQWN0aXZhdGluZyBzZXJ2aWNlIG5hbWU9J29yZy5mcmVlZGVza3RvcC5EQnVzLlRlc3RTdWl0ZUVjaG9TZXJ2aWNlJworICAgIFN1Y2Nlc3NmdWxseSBhY3RpdmF0ZWQgc2VydmljZSAnb3JnLmZyZWVkZXNrdG9wLkRCdXMuVGVzdFN1aXRlRWNob1NlcnZpY2UnCisgICAgNjM2MzogYXNzZXJ0aW9uIGZhaWxlZCAiX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKCYgREJVU19BVVRIX0NMSUVOVCAoYXV0aCktPmd1aWRfZnJvbV9zZXJ2ZXIpID09IDAiIGZpbGUgImRidXMtYXV0aC5jIiBsaW5lIDE1NDUgZnVuY3Rpb24gcHJvY2Vzc19vaworICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfcHJpbnRfYmFja3RyYWNlKzB4MjkpIFsweDgwY2I5NjldCisgICAgICAuL2J1cy9idXMtdGVzdChfZGJ1c19hYm9ydCsweDE0KSBbMHg4MGNmYjQ0XQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfcmVhbF9hc3NlcnQrMHg1MykgWzB4ODBiNTJjM10KKyAgICAgIC4vYnVzL2J1cy10ZXN0KCkgWzB4ODBlMjRkYV0KKyAgICAgIC4vYnVzL2J1cy10ZXN0KF9kYnVzX2F1dGhfZG9fd29yaysweDM4OCkgWzB4ODBlMzg0OF0KKyAgICAgIC4vYnVzL2J1cy10ZXN0KCkgWzB4ODBhZWE0OV0KKyAgICAgIC4vYnVzL2J1cy10ZXN0KCkgWzB4ODBhZmZkZV0KKyAgICAgIC4vYnVzL2J1cy10ZXN0KF9kYnVzX3RyYW5zcG9ydF9oYW5kbGVfd2F0Y2grMHhiMSkgWzB4ODBhZDg0MV0KKyAgICAgIC4vYnVzL2J1cy10ZXN0KF9kYnVzX2Nvbm5lY3Rpb25faGFuZGxlX3dhdGNoKzB4MTA0KSBbMHg4MDg5MTc0XQorICAgICAgLi9idXMvYnVzLXRlc3QoZGJ1c193YXRjaF9oYW5kbGUrMHhkOCkgWzB4ODBiMTVlOF0KKyAgICAgIC4vYnVzL2J1cy10ZXN0KF9kYnVzX2xvb3BfaXRlcmF0ZSsweDRhOSkgWzB4ODBkMTUwOV0KKyAgICAgIC4vYnVzL2J1cy10ZXN0KGJ1c190ZXN0X3J1bl9jbGllbnRzX2xvb3ArMHg1ZCkgWzB4ODA4MTI5ZF0KKyAgICAgIC4vYnVzL2J1cy10ZXN0KCkgWzB4ODA2Y2FiMF0KKyAgICAgIC4vYnVzL2J1cy10ZXN0KCkgWzB4ODA2ZTBjYV0KKyAgICAgIC4vYnVzL2J1cy10ZXN0KCkgWzB4ODA2ZGE2Zl0KKyAgICAgIC4vYnVzL2J1cy10ZXN0KF9kYnVzX3Rlc3Rfb29tX2hhbmRsaW5nKzB4MThjKSBbMHg4MGI1YzhjXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MDZmNzIzXQorICAgICAgLi9idXMvYnVzLXRlc3QoYnVzX2Rpc3BhdGNoX3Rlc3QrMHgzYykgWzB4ODA3MWFhY10KKyAgICAgIC4vYnVzL2J1cy10ZXN0KG1haW4rMHgxYjcpIFsweDgwNWFjYzddCisgICAgICAvbGliL2xpYmMuc28uNihfX2xpYmNfc3RhcnRfbWFpbisweGYzKSBbMHg0NWY5MTliM10KKyAgICAgIC4vYnVzL2J1cy10ZXN0KCkgWzB4ODA1YWUzOV0KKworVGhlIHN0YWNrIGlzIGJlbG93OgorICAgICMwICAweGZmZmZlNDI1IGluIF9fa2VybmVsX3ZzeXNjYWxsICgpCisgICAgIzEgIDB4NDVmYTYyZDYgaW4gcmFpc2UgKCkgZnJvbSAvbGliL2xpYmMuc28uNgorICAgICMyICAweDQ1ZmE5NjUzIGluIGFib3J0ICgpIGZyb20gL2xpYi9saWJjLnNvLjYKKyAgICAjMyAgMHgwODBjZmI2NSBpbiBfZGJ1c19hYm9ydCAoKSBhdCBkYnVzLXN5c2RlcHMuYzo5NAorICAgICM0ICAweDA4MGI1MmMzIGluIF9kYnVzX3JlYWxfYXNzZXJ0IChjb25kaXRpb249MCwKKyAgICAgICAgY29uZGl0aW9uX3RleHQ9Y29uZGl0aW9uX3RleHRAZW50cnk9MHg4MTE3YTM4ICJfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJiBEQlVTX0FVVEhfQ0xJRU5UIChhdXRoKS0+Z3VpZF9mcm9tX3NlcnZlcikgPT0gMCIsCisgICAgICAgIGZpbGU9ZmlsZUBlbnRyeT0weDgxMTcyNzMgImRidXMtYXV0aC5jIiwgbGluZT1saW5lQGVudHJ5PTE1NDUsCisgICAgICAgIGZ1bmM9ZnVuY0BlbnRyeT0weDgxMTdmOGUgPF9fRlVOQ1RJT05fXy4zNDkyPiAicHJvY2Vzc19vayIpCisgICAgICAgIGRhdGE9MHg4MTU3MjkwKSBhdCBkYnVzLWNvbm5lY3Rpb24uYzoxNTE1CisgICAgIzAgIDB4MDAwMDAwMzNmZWUzNTNlOSBpbiByYWlzZSAoKSBmcm9tIC9saWI2NC9saWJjLnNvLjYKKyAgICAjMSAgMHgwMDAwMDAzM2ZlZTM4NTA4IGluIGFib3J0ICgpIGZyb20gL2xpYjY0L2xpYmMuc28uNgorICAgICMyICAweDAwMDAwMDAwMDA0N2Q1ODUgaW4gX2RidXNfYWJvcnQgKCkgYXQgZGJ1cy1zeXNkZXBzLmM6OTQKKyAgICAjMyAgMHgwMDAwMDAwMDAwNDY2NDg2IGluIF9kYnVzX3JlYWxfYXNzZXJ0IChjb25kaXRpb249PG9wdGltaXplZCBvdXQ+LAorICAgICAgICBjb25kaXRpb25fdGV4dD1jb25kaXRpb25fdGV4dEBlbnRyeT0weDRjMjk4OCAiX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKCYgREJVU19BVVRIX0NMSUVOVCAoYXV0aCktPmd1aWRfZnJvbV9zZXJ2ZXIpID09IDAiLAorICAgICAgICBmaWxlPWZpbGVAZW50cnk9MHg0YzIxYTUgImRidXMtYXV0aC5jIiwgbGluZT1saW5lQGVudHJ5PTE1NDYsCisgICAgICAgIGZ1bmM9ZnVuY0BlbnRyeT0weDRjMmZjZSA8X19GVU5DVElPTl9fLjM4NDU+ICJwcm9jZXNzX29rIikKKyAgICAgICAgYXQgZGJ1cy1pbnRlcm5hbHMuYzo5MzEKKyAgICAjNCAgMHgwMDAwMDAwMDAwNDhkNDI0IGluIHByb2Nlc3Nfb2sgKGFyZ3NfZnJvbV9vaz0weDdmZmZmZmZmZTQ4MCwKKyAgICAgICAgYXV0aD0weDZmZjM0MCkgYXQgZGJ1cy1hdXRoLmM6MTU0NgorICAgICM1ICBoYW5kbGVfY2xpZW50X3N0YXRlX3dhaXRpbmdfZm9yX2RhdGEgKGF1dGg9MHg2ZmYzNDAsCisgICAgICAgIGNvbW1hbmQ9PG9wdGltaXplZCBvdXQ+LCBhcmdzPTB4N2ZmZmZmZmZlNDgwKSBhdCBkYnVzLWF1dGguYzoxOTk2CisgICAgIzYgIDB4MDAwMDAwMDAwMDQ4ZTc4OSBpbiBwcm9jZXNzX2NvbW1hbmQgKGF1dGg9MHg2ZmYzNDApIGF0IGRidXMtYXV0aC5jOjIyMDgKKyAgICAjNyAgX2RidXNfYXV0aF9kb193b3JrIChhdXRoPTB4NmZmMzQwKSBhdCBkYnVzLWF1dGguYzoyNDU4CisgICAgIzggIDB4MDAwMDAwMDAwMDQ2MDkxZCBpbiBkb19hdXRoZW50aWNhdGlvbiAoCisgICAgICAgIHRyYW5zcG9ydD10cmFuc3BvcnRAZW50cnk9MHg2ZmZhYTAsIGRvX3JlYWRpbmc9ZG9fcmVhZGluZ0BlbnRyeT0xLAorICAgICAgICBkb193cml0aW5nPWRvX3dyaXRpbmdAZW50cnk9MCwKKyAgICAgICAgYXV0aF9jb21wbGV0ZWQ9YXV0aF9jb21wbGV0ZWRAZW50cnk9MHg3ZmZmZmZmZmU1NWMpCisgICAgICAgIGF0IGRidXMtdHJhbnNwb3J0LXNvY2tldC5jOjQ0MgorICAgICM5ICAweDAwMDAwMDAwMDA0NjFkMDggaW4gc29ja2V0X2hhbmRsZV93YXRjaCAodHJhbnNwb3J0PTB4NmZmYWEwLAorICAgICAgICB3YXRjaD0weDZmNDE5MCwgZmxhZ3M9MSkgYXQgZGJ1cy10cmFuc3BvcnQtc29ja2V0LmM6OTIxCisgICAgIzEwIDB4MDAwMDAwMDAwMDQ1ZmEzYSBpbiBfZGJ1c190cmFuc3BvcnRfaGFuZGxlX3dhdGNoICh0cmFuc3BvcnQ9MHg2ZmZhYTAsCisKK09uY2Ugc2VuZF9uZWdvdGlhdGVfdW5peF9mZCBmYWlsZWQsIHRoaXMgZmFpbHVyZSB3aWxsIGhhcHBlbiwgc2luY2UKK2F1dGgtPmd1aWRfZnJvbV9zZXJ2ZXIgaGFzIGJlZW4gc2V0IHRvIHNvbWUgdmFsdWUgYmVmb3JlCitzZW5kX25lZ290aWF0ZV91bml4X2ZkLiBzZW5kX25lZ290aWF0ZV91bml4X2ZkIGZhaWx1cmUgd2lsbCBsZWFkIHRvCit0aGlzIGF1dGggYmUgaGFuZGxlZCBieSBwcm9jZXNzX29rIGFnYWluLCBidXQgdGhpcyBhdXRoLT5ndWlkX2Zyb21fc2VydmVyCitpcyBub3QgemVyby4KKworU28gd2Ugc2hvdWxkIGNsZWFyIGF1dGgtPmd1aWRfZnJvbV9zZXJ2ZXIgaWYgc2VuZF9uZWdvdGlhdGVfdW5peF9mZCBmYWlsZWQKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgZGJ1cy9kYnVzLWF1dGguYyB8ICAgIDkgKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1hdXRoLmMgYi9kYnVzL2RidXMtYXV0aC5jCitpbmRleCBkMmMzN2E3Li4zN2I0NWM2IDEwMDY0NAorLS0tIGEvZGJ1cy9kYnVzLWF1dGguYworKysrIGIvZGJ1cy9kYnVzLWF1dGguYworQEAgLTE1NzEsOCArMTU3MSwxMyBAQCBwcm9jZXNzX29rKERCdXNBdXRoICphdXRoLAorICAgX2RidXNfdmVyYm9zZSAoIkdvdCBHVUlEICclcycgZnJvbSB0aGUgc2VydmVyXG4iLAorICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmIERCVVNfQVVUSF9DTElFTlQgKGF1dGgpLT5ndWlkX2Zyb21fc2VydmVyKSk7CisgCistICBpZiAoYXV0aC0+dW5peF9mZF9wb3NzaWJsZSkKKy0gICAgcmV0dXJuIHNlbmRfbmVnb3RpYXRlX3VuaXhfZmQoYXV0aCk7CisrICBpZiAoYXV0aC0+dW5peF9mZF9wb3NzaWJsZSkgeworKyAgICAgaWYgKCFzZW5kX25lZ290aWF0ZV91bml4X2ZkKGF1dGgpKSB7CisrICAgICAgICAgX2RidXNfc3RyaW5nX3NldF9sZW5ndGggKCYgREJVU19BVVRIX0NMSUVOVCAoYXV0aCktPmd1aWRfZnJvbV9zZXJ2ZXIsIDApOworKyAgICAgICAgIHJldHVybiBGQUxTRTsKKysgICAgIH0KKysgICAgIHJldHVybiBUUlVFOworKyAgfQorIAorICAgX2RidXNfdmVyYm9zZSgiTm90IG5lZ290aWF0aW5nIHVuaXggZmQgcGFzc2luZywgc2luY2Ugbm90IHBvc3NpYmxlXG4iKTsKKyAgIHJldHVybiBzZW5kX2JlZ2luIChhdXRoKTsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvZGJ1cy0xLmluaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9kYnVzLTEuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmM4NjI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvZGJ1cy0xLmluaXQKQEAgLTAsMCArMSwxMjMgQEAKKyMhIC9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGRidXMKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRyZW1vdGVfZnMgJHN5c2xvZworIyBSZXF1aXJlZC1TdG9wOiAgICAgJHJlbW90ZV9mcyAkc3lzbG9nCisjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAxCisjIFNob3J0LURlc2NyaXB0aW9uOiBELUJ1cyBzeXN0ZW13aWRlIG1lc3NhZ2UgYnVzCisjIERlc2NyaXB0aW9uOiAgICAgICBELUJ1cyBpcyBhIHNpbXBsZSBpbnRlcnByb2Nlc3MgbWVzc2FnaW5nIHN5c3RlbSwgdXNlZAorIyAgICAgICAgICAgICAgICAgICAgZm9yIHNlbmRpbmcgbWVzc2FnZXMgYmV0d2VlbiBhcHBsaWNhdGlvbnMuCisjIyMgRU5EIElOSVQgSU5GTworIworIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKyMgRGViaWFuIGluaXQuZCBzY3JpcHQgZm9yIEQtQlVTCisjIENvcHlyaWdodCDCqSAyMDAzIENvbGluIFdhbHRlcnMgPHdhbHRlcnNAZGViaWFuLm9yZz4KKworIyBzZXQgLWUKKworIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK0RBRU1PTj1AYmluZGlyQC9kYnVzLWRhZW1vbgorTkFNRT1kYnVzCitEQUVNT05VU0VSPW1lc3NhZ2VidXMgICAgICAgICAgICMgbXVzdCBtYXRjaCAvZXRjL2RidXMtMS9zeXN0ZW0uY29uZgorUElERklMRT0vdmFyL3J1bi9tZXNzYWdlYnVzLnBpZCAjIG11c3QgbWF0Y2ggL2V0Yy9kYnVzLTEvc3lzdGVtLmNvbmYKK1VVSURESVI9L3Zhci9saWIvZGJ1cworREVTQz0ic3lzdGVtIG1lc3NhZ2UgYnVzIgorRVZFTlRESVI9L2V0Yy9kYnVzLTEvZXZlbnQuZAorCit0ZXN0IC14ICREQUVNT04gfHwgZXhpdCAwCisKKyMgU291cmNlIGRlZmF1bHRzIGZpbGU7IGVkaXQgdGhhdCBmaWxlIHRvIGNvbmZpZ3VyZSB0aGlzIHNjcmlwdC4KK0VOQUJMRUQ9MQorUEFSQU1TPSIiCitpZiBbIC1lIC9ldGMvZGVmYXVsdC9kYnVzIF07IHRoZW4KKyAgLiAvZXRjL2RlZmF1bHQvZGJ1cworZmkKKwordGVzdCAiJEVOQUJMRUQiICE9ICIwIiB8fCBleGl0IDAKKworc3RhcnRfaXRfdXAoKQoreworICBta2RpciAtcCAiYGRpcm5hbWUgJFBJREZJTEVgIgorICBpZiBbIC1lICRQSURGSUxFIF07IHRoZW4KKyAgICBQSURESVI9L3Byb2MvJChjYXQgJFBJREZJTEUpCisgICAgaWYgWyAtZCAke1BJRERJUn0gLWEgICIkKHJlYWRsaW5rIC1mICR7UElERElSfS9leGUpIiA9ICIke0RBRU1PTn0iIF07IHRoZW4gCisgICAgICBlY2hvICIkREVTQyBhbHJlYWR5IHN0YXJ0ZWQ7IG5vdCBzdGFydGluZy4iCisgICAgZWxzZQorICAgICAgZWNobyAiUmVtb3Zpbmcgc3RhbGUgUElEIGZpbGUgJFBJREZJTEUuIgorICAgICAgcm0gLWYgJFBJREZJTEUKKyAgICBmaQorICBmaQorCisgIGlmIFsgISAtZCAkVVVJRERJUiBdOyB0aGVuCisgICAgbWtkaXIgLXAgJFVVSURESVIKKyAgICBjaG93biAkREFFTU9OVVNFUiAkVVVJRERJUgorICAgIGNoZ3JwICREQUVNT05VU0VSICRVVUlERElSCisgIGZpCisgCisgIGRidXMtdXVpZGdlbiAtLWVuc3VyZSAgCisKKyAgZWNobyAtbiAiU3RhcnRpbmcgJERFU0M6ICIKKyAgc3RhcnQtc3RvcC1kYWVtb24gLW8gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAkUElERklMRSBcCisgICAgLS11c2VyICREQUVNT05VU0VSIC0tZXhlYyAkREFFTU9OIC0tIC0tc3lzdGVtICRQQVJBTVMKKyAgZWNobyAiJE5BTUUuIgorICBpZiBbIC1kICRFVkVOVERJUiBdOyB0aGVuCisgICAgICBydW4tcGFydHMgLS1hcmc9c3RhcnQgJEVWRU5URElSCisgIGZpCit9CisKK3NodXRfaXRfZG93bigpCit7CisgIGlmIFsgLWQgJEVWRU5URElSIF07IHRoZW4KKyAgICAgICMgVE9ETzogLS1yZXZlcnNlIHdoZW4gYnVzeWJveCBzdXBwb3J0cyBpdAorICAgICAgcnVuLXBhcnRzIC0tYXJnPXN0b3AgJEVWRU5URElSCisgIGZpCisgIGVjaG8gLW4gIlN0b3BwaW5nICRERVNDOiAiCisgIHN0YXJ0LXN0b3AtZGFlbW9uIC1vIC0tc3RvcCAgLS1xdWlldCAtLXBpZGZpbGUgJFBJREZJTEUgXAorICAgIC0tdXNlciAkREFFTU9OVVNFUgorICAjIFdlIG5vIGxvbmdlciBpbmNsdWRlIHRoZXNlIGFyZ3VtZW50cyBzbyB0aGF0IHN0YXJ0LXN0b3AtZGFlbW9uCisgICMgY2FuIGRvIGl0cyBqb2IgZXZlbiBnaXZlbiB0aGF0IHdlIG1heSBoYXZlIGJlZW4gdXBncmFkZWQuCisgICMgV2UgcmVseSBvbiB0aGUgcGlkZmlsZSBiZWluZyBzYW5lbHkgbWFuYWdlZAorICAjIC0tZXhlYyAkREFFTU9OIC0tIC0tc3lzdGVtICRQQVJBTVMKKyAgZWNobyAiJE5BTUUuIgorICBybSAtZiAkUElERklMRQorfQorCityZWxvYWRfaXQoKQoreworICBlY2hvIC1uICJSZWxvYWRpbmcgJERFU0MgY29uZmlnOiAiCisgIGRidXMtc2VuZCAtLXByaW50LXJlcGx5IC0tc3lzdGVtIC0tdHlwZT1tZXRob2RfY2FsbCBcCisgICAgICAgICAgICAtLWRlc3Q9b3JnLmZyZWVkZXNrdG9wLkRCdXMgXAorICAgICAgICAgICAgLyBvcmcuZnJlZWRlc2t0b3AuREJ1cy5SZWxvYWRDb25maWcgPiAvZGV2L251bGwKKyAgIyBob3BlZnVsbHkgdGhpcyBpcyBlbm91Z2ggdGltZSBmb3IgZGJ1cyB0byByZWxvYWQgaXQncyBjb25maWcgZmlsZS4KKyAgZWNobyAiZG9uZS4iCit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKyAgICBzdGFydF9pdF91cAorICA7OworICBzdG9wKQorICAgIHNodXRfaXRfZG93bgorICA7OworICBzdGF0dXMpCisgICAgc3RhdHVzICREQUVNT04KKyAgICBleGl0ICQ/CisgIDs7CisgIHJlbG9hZHxmb3JjZS1yZWxvYWQpCisgICAgcmVsb2FkX2l0CisgIDs7CisgIHJlc3RhcnQpCisgICAgc2h1dF9pdF9kb3duCisgICAgc2xlZXAgMQorICAgIHN0YXJ0X2l0X3VwCisgIDs7CisgICopCisgICAgZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kLyROQU1FIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fHJlbG9hZHxmb3JjZS1yZWxvYWR9IiA+JjIKKyAgICBleGl0IDEKKyAgOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9vcy10ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvb3MtdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGMyNTdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvb3MtdGVzdC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitkYnVzOiByZW1vdmUgYnVpbGQgaG9zdCB0ZXN0IGluIGNvbmZpZ3VyZSBzY3JpcHQKKworVGhlIGRidXMgYnVpbGQgdGVzdHMgdGhlIGJ1aWxkIGhvc3QgdG8gZGV0ZWN0IHdoYXQgaW5pdHNjcmlwdAorZW52aXJvbm1lbnQgaXQgZXhwZWN0cy4gIFJlbW92ZSB0aGUgdGVzdCBhbmQgc2V0IGl0IHRvICJyZWRoYXQiCit1bmNvbmRpdGlvbmFsbHkgYXMgdGhlIG9lLWNvcmUgaW5pdHNjcmlwdCBoYXMgYSByZWRoYXQtc3R5bGUgcGlkIGZpbGUKK3BhdGguCisKK1NpZ25lZC1vZmYtYnk6IEFuZHkgUm9zcyA8YW5keS5yb3NzQHdpbmRyaXZlci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkXQorCitkaWZmIC11IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCistLS0gYS9jb25maWd1cmUuYWMJMjAxMi0wOC0yOCAxMToyMzo0My4wNDA2MDk4NzQgLTA3MDAKKysrKyBiL2NvbmZpZ3VyZS5hYwkyMDEyLTA4LTI4IDExOjU0OjI1LjYwMjkxMzk0NSAtMDcwMAorQEAgLTEzNDgsMTkgKzEzNDgsOCBAQAorIEFTX0FDX0VYUEFORChFWFBBTkRFRF9MSUJFWEVDRElSLCAiJGxpYmV4ZWNkaXIiKQorIEFTX0FDX0VYUEFORChFWFBBTkRFRF9EQVRBRElSLCAiJGRhdGFkaXIiKQorIAorLSMjIyMgQ2hlY2sgb3VyIG9wZXJhdGluZyBzeXN0ZW0KKy1vcGVyYXRpbmdfc3lzdGVtPXVua25vd24KKy1pZiB0ZXN0IC1mIC9ldGMvcmVkaGF0LXJlbGVhc2UgfHwgdGVzdCAtZiAkRVhQQU5ERURfU1lTQ09ORkRJUi9yZWRoYXQtcmVsZWFzZSA7IHRoZW4KKy0gICBvcGVyYXRpbmdfc3lzdGVtPXJlZGhhdAorLWZpCistCistaWYgdGVzdCAtZiAvZXRjL3NsYWNrd2FyZS12ZXJzaW9uIHx8IHRlc3QgLWYgJEVYUEFOREVEX1NZU0NPTkZESVIvc2xhY2t3YXJlLXZlcnNpb24gOyB0aGVuCistICAgb3BlcmF0aW5nX3N5c3RlbT1zbGFja3dhcmUKKy1maQorLQorLWlmIHRlc3QgLWYgL3Vzci9iaW4vY3lnd2luMS5kbGwgfHwgdGVzdCAtZiAkRVhQQU5ERURfQklORElSL2N5Z3dpbjEuZGxsIDsgdGhlbgorLSAgIG9wZXJhdGluZ19zeXN0ZW09Y3lnd2luCistZmkKKysjIyMjIEJ1aWxkIGhvc3QgdGVzdCByZW1vdmVkIGZyb20gdXBzdHJlYW0gY29kZSwgb3BlbmVtYmVkZGVkIGluaXRzY3JpcHQgaXMgcmVkaGF0LWxpa2U6Cisrb3BlcmF0aW5nX3N5c3RlbT1yZWRoYXQKKyAKKyAjIyMjIFNvcnQgb3V0IGluaXQgc2NyaXB0cworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvcHl0aG9uLWNvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL3B5dGhvbi1jb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0NDAwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL3B5dGhvbi1jb25maWcucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorV2hlbiBidWlsZGluZyB0aGUgZGJ1cy1wdGVzdCBwYWNrYWdlLCB3ZSBoYXZlIHRvIGVuYWJsZSBweXRob24uICBIb3dldmVyCitjaGVja2luZyBpZiB0aGUgaG9zdC1zeXN0ZW0gcHl0aG9uIGhhcyB0aGUgbmVjZXNzYXJ5IGxpYnJhcnkgaXNuJ3QgdXNlZnVsLgorCitEaXNhYmxlIHRoZSBweXRob24gbW9kdWxlIGNoZWNrIGZvciBjcm9zcyBjb21waWxpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tIGRidXMtMS42LjgvY29uZmlndXJlLmFjLm9yaWcJMjAxMy0wNy0xMSAxNDoxNTo1OC44MzQ1NTQ3OTkgLTA1MDAKKysrKyBkYnVzLTEuNi44L2NvbmZpZ3VyZS5hYwkyMDEzLTA3LTExIDE0OjE0OjQwLjk2OTU1NDg0OCAtMDUwMAorQEAgLTI1NywxMyArMjU3LDYgQEAKKyAgICMgZnVsbCB0ZXN0IGNvdmVyYWdlIGlzIHJlcXVpcmVkLCBQeXRob24gaXMgYSBoYXJkIGRlcGVuZGVuY3kKKyAgIEFDX01TR19OT1RJQ0UoW0Z1bGwgdGVzdCBjb3ZlcmFnZSAoLS1lbmFibGUtdGVzdHM9eWVzKSByZXF1aXJlcyBQeXRob24sIGRidXMtcHl0aG9uLCBweWdvYmplY3RdKQorICAgQU1fUEFUSF9QWVRIT04oWzIuNl0pCistICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBQeXRob24gbW9kdWxlcyBmb3IgZnVsbCB0ZXN0IGNvdmVyYWdlXSkKKy0gIGlmICIkUFlUSE9OIiAtYyAiaW1wb3J0IGRidXMsIGdvYmplY3QsIGRidXMubWFpbmxvb3AuZ2xpYiI7IHRoZW4KKy0gICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKy0gIGVsc2UKKy0gICAgQUNfTVNHX1JFU1VMVChbbm9dKQorLSAgICBBQ19NU0dfRVJST1IoW2Nhbm5vdCBpbXBvcnQgZGJ1cywgZ29iamVjdCwgZGJ1cy5tYWlubG9vcC5nbGliIFB5dGhvbiBtb2R1bGVzXSkKKy0gIGZpCisgZWxzZQorICAgIyAtLWVuYWJsZS10ZXN0cyBub3QgZ2l2ZW46IGRvIG5vdCBhYm9ydCBpZiBQeXRob24gaXMgbWlzc2luZworICAgQU1fUEFUSF9QWVRIT04oWzIuNl0sIFtdLCBbOl0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzcyZDA4MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL3J1bi1wdGVzdApAQCAtMCwwICsxLDEwIEBACisjIS9iaW4vc2gKKworb3V0cHV0KCkgeworICBpZiBbICQ/IC1lcSAwIF0KKyAgICB0aGVuIGVjaG8gIlBBU1M6ICRpIgorICAgIGVsc2UgZWNobyAiRkFJTDogJGkiCisgIGZpCit9CisKK2ZvciBpIGluIGBscyB0ZXN0L3Rlc3QtKmA7IGRvIC4vJGkgLi90ZXN0L2RhdGEgREJVU19URVNUX0hPTUVESVI9Li90ZXN0ID4vZGV2L251bGw7IG91dHB1dDsgZG9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvdG1wZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvdG1wZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMDg2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy90bXBkaXIucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSA1MTA1ZmVkZDdmYTEzZGFkZDJkMGQ4NjRmYjc3ODczYjgzYjc5YTRiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IFRodSwgMjMgSnVuIDIwMTEgMTM6NTI6MDkgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gYnVpbGRzeXM6IGhhcmRjb2RlIHNvY2tldGRpciB0byAvdG1wCisKK3RoZSBUTVBESVIgZW52IHZhciBpc24ndCBhbHdheXMgcG9pbnRpbmcgdG8gdGhlIHJpZ2h0IHRhcmdldCBwYXRoCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWRdCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CisKK09yaWdpbmFsIGNvbW1lbnQ6CisKKwlhdm9pZCB0byBjaGVjayB0bXAgZGlyIGF0IGJ1aWxkIHRpbWUuIGluc3RlYWQgdXNlcyBoYXJkIGNvZGVkIC90bXAgaGVyZQorCWNvbW1lbnQgYWRkZWQgYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAgIDExICstLS0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA0MDgwNTRiLi42ZDI2MTgwIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNDgzLDE2ICsxNDgzLDcgQEAgQUNfU1VCU1QoVEVTVF9MQVVOQ0hfSEVMUEVSX0JJTkFSWSkKKyBBQ19ERUZJTkVfVU5RVU9URUQoREJVU19URVNUX0xBVU5DSF9IRUxQRVJfQklOQVJZLCAiJFRFU1RfTEFVTkNIX0hFTFBFUl9CSU5BUlkiLAorICAgICAgICAgICAgICAgICAgICBbRnVsbCBwYXRoIHRvIHRoZSBsYXVuY2ggaGVscGVyIHRlc3QgcHJvZ3JhbSBpbiB0aGUgYnVpbGRkaXJdKQorIAorLSMjIyMgRmluZCBzb2NrZXQgZGlyZWN0b3JpZXMKKy1pZiAhIHRlc3QgLXogIiRUTVBESVIiIDsgdGhlbgorLSAgIERFRkFVTFRfU09DS0VUX0RJUj0kVE1QRElSCistZWxpZiAhIHRlc3QgLXogIiRURU1QIiA7IHRoZW4KKy0gICBERUZBVUxUX1NPQ0tFVF9ESVI9JFRFTVAKKy1lbGlmICEgdGVzdCAteiAiJFRNUCIgOyB0aGVuCistICAgREVGQVVMVF9TT0NLRVRfRElSPSRUTVAKKy1lbHNlCistICAgREVGQVVMVF9TT0NLRVRfRElSPS90bXAKKy1maQorK0RFRkFVTFRfU09DS0VUX0RJUj0vdG1wCisgCisgREVGQVVMVF9TT0NLRVRfRElSPWBlY2hvICRERUZBVUxUX1NPQ0tFVF9ESVIgfCBzZWQgJ3MvKy8lMkIvZydgCisgCistLSAKKzEuNi42LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXNfMS44LjIwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXNfMS44LjIwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZjIwOTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1c18xLjguMjAuYmIKQEAgLTAsMCArMSw0IEBACitpbmNsdWRlIGRidXMuaW5jCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiNDk4OTBiYmFiZWRhYjNhMWMzZjRmNzNjN2ZmOGIyYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1YzRmYmY0YzY0NjIxYzk2ZTg3MWRhOTFkMmI3MjlhNWIwMDUzNmUxMTZkM2M0NjEyYTQ2OWQ5MjRiMWI3MDNhIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmM3MzZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci5pbmMKQEAgLTAsMCArMSwxMDYgQEAKK1NVTU1BUlkgPSAiQSBsaWdodHdlaWdodCBTU0ggYW5kIFNDUCBpbXBsZW1lbnRhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXR0LnVjYy5hc24uYXUvZHJvcGJlYXIvZHJvcGJlYXIuaHRtbCIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorCisjIHNvbWUgZmlsZXMgYXJlIGZyb20gb3RoZXIgcHJvamVjdHMgYW5kIGhhdmUgb3RoZXJzIGxpY2Vuc2UgdGVybXM6CisjICAgcHVibGljIGRvbWFpbiwgT3BlblNTSCAzLjVwMSwgT3BlblNTSDMuNi4xcDIsIFB1VFRZCitMSUNFTlNFID0gIk1JVCAmIEJTRC0zLUNsYXVzZSAmIEJTRC0yLUNsYXVzZSAmIFBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YTVlYzQwY2FmYmEyNmZjNDM5NmQwYjU1MGY4MjRlMDEiCisKK0RFUEVORFMgPSAiemxpYiIKK1JQUk9WSURFU18ke1BOfSA9ICJzc2ggc3NoZCIgCisKK0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnBhbScsICcnLCBkKX0iCisKK1NSQ19VUkkgPSAiaHR0cDovL21hdHQudWNjLmFzbi5hdS9kcm9wYmVhci9yZWxlYXNlcy9kcm9wYmVhci0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdXJhbmRvbS14YXV0aC1jaGFuZ2VzLXRvLW9wdGlvbnMuaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLWNvbmZpZ3VyZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LWZpeC0ya2Ita2V5cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LWRyb3BiZWFyLWZpeC1mb3IteDMyLWFiaS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgZmlsZTovL2Ryb3BiZWFya2V5LnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vZHJvcGJlYXJALnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vZHJvcGJlYXIuc29ja2V0IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9ICIKKworUEFNX1NSQ19VUkkgPSAiZmlsZTovLzAwMDUtZHJvcGJlYXItZW5hYmxlLXBhbS5wYXRjaCBcCisgICAgICAgICAgICAgICBmaWxlOi8vMDAwNi1kcm9wYmVhci1jb25maWd1cmF0aW9uLWZpbGUucGF0Y2ggXAorICAgICAgICAgICAgICAgZmlsZTovL2Ryb3BiZWFyIgorCitQQU1fUExVR0lOUyA9ICJsaWJwYW0tcnVudGltZSBcCisJcGFtLXBsdWdpbi1kZW55IFwKKwlwYW0tcGx1Z2luLXBlcm1pdCBcCisJcGFtLXBsdWdpbi11bml4IFwKKwkiCitSREVQRU5EU18ke1BOfSArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fUExVR0lOU30nLCAnJywgZCl9IgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJkcm9wYmVhciIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIDEwIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiZHJvcGJlYXIuc29ja2V0IgorCitDRkxBR1NfcHJlcGVuZCA9ICIgLUkuICIKK0xEID0gIiR7Q0N9IgorCitTQklOQ09NTUFORFMgPSAiZHJvcGJlYXIgZHJvcGJlYXJrZXkgZHJvcGJlYXJjb252ZXJ0IgorQklOQ09NTUFORFMgPSAiZGJjbGllbnQgc3NoIHNjcCIKK0VYVFJBX09FTUFLRSA9ICdNVUxUST0xIFNDUFBST0dSRVNTPTEgUFJPR1JBTVM9IiR7U0JJTkNPTU1BTkRTfSAke0JJTkNPTU1BTkRTfSInCitFWFRSQV9PRUNPTkYgKz0gIlwKKyAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLWVuYWJsZS1wYW0nLCAnLS1kaXNhYmxlLXBhbScsIGQpfSIKK0NGTEFHUyArPSAiLURTRlRQU0VSVkVSX1BBVEg9XFwiJHtsaWJkaXJ9L29wZW5zc2gvc2Z0cC1zZXJ2ZXJcXCIiCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfSBcCisJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZCBcCisJCSR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQgXAorCQkke0R9JHtzeXNjb25mZGlyfS9kcm9wYmVhciBcCisJCSR7RH0ke2JpbmRpcn0gXAorCQkke0R9JHtzYmluZGlyfSBcCisJCSR7RH0ke2xvY2Fsc3RhdGVkaXJ9CisKKwlpbnN0YWxsIC1tIDA3NTUgZHJvcGJlYXJtdWx0aSAke0R9JHtzYmluZGlyfS8KKwlsbiAtcyAke3NiaW5kaXJ9L2Ryb3BiZWFybXVsdGkgJHtEfSR7YmluZGlyfS9kYmNsaWVudAorCQorCWZvciBpIGluICR7U0JJTkNPTU1BTkRTfQorCWRvCisJCWxuIC1zIC4vZHJvcGJlYXJtdWx0aSAke0R9JHtzYmluZGlyfS8kaQorCWRvbmUKKwlzZWQgLWUgJ3MsL2V0Yywke3N5c2NvbmZkaXJ9LGcnIFwKKwkJLWUgJ3MsL3Vzci9zYmluLCR7c2JpbmRpcn0sZycgXAorCQktZSAncywvdmFyLCR7bG9jYWxzdGF0ZWRpcn0sZycgXAorCQktZSAncywvdXNyL2Jpbiwke2JpbmRpcn0sZycgXAorCQktZSAncywvdXNyLCR7cHJlZml4fSxnJyAke1dPUktESVJ9L2luaXQgPiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZHJvcGJlYXIKKwljaG1vZCA3NTUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Ryb3BiZWFyCisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIgPSAicGFtIiBdOyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZHJvcGJlYXIgICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kLworCWZpCisKKwkjIGRlYWwgd2l0aCBzeXN0ZW1kIHVuaXQgZmlsZXMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZHJvcGJlYXJrZXkuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Ryb3BiZWFyQC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZHJvcGJlYXIuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAorCQktZSAncyxAQklORElSQCwke2JpbmRpcn0sZycgXAorCQktZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2Ryb3BiZWFyLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qLnNlcnZpY2UKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjIwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAic2NwIHNzaCIKKworQUxURVJOQVRJVkVfVEFSR0VUID0gIiR7c2JpbmRpcn0vZHJvcGJlYXJtdWx0aSIKKworcGtnX3Bvc3RybV9hcHBlbmRfJHtQTn0gKCkgeworICBpZiBbIC1mICIke3N5c2NvbmZkaXJ9L2Ryb3BiZWFyL2Ryb3BiZWFyX3JzYV9ob3N0X2tleSIgXTsgdGhlbgorICAgICAgICBybSAke3N5c2NvbmZkaXJ9L2Ryb3BiZWFyL2Ryb3BiZWFyX3JzYV9ob3N0X2tleQorICBmaQorICBpZiBbIC1mICIke3N5c2NvbmZkaXJ9L2Ryb3BiZWFyL2Ryb3BiZWFyX2Rzc19ob3N0X2tleSIgXTsgdGhlbgorICAgICAgICBybSAke3N5c2NvbmZkaXJ9L2Ryb3BiZWFyL2Ryb3BiZWFyX2Rzc19ob3N0X2tleQorICBmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDAxLXVyYW5kb20teGF1dGgtY2hhbmdlcy10by1vcHRpb25zLmgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDEtdXJhbmRvbS14YXV0aC1jaGFuZ2VzLXRvLW9wdGlvbnMuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzlkNTc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDAxLXVyYW5kb20teGF1dGgtY2hhbmdlcy10by1vcHRpb25zLmgucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorU3ViamVjdDogW1BBVENIIDEvNl0gdXJhbmRvbS14YXV0aC1jaGFuZ2VzLXRvLW9wdGlvbnMuaAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBvcHRpb25zLmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9vcHRpb25zLmggYi9vcHRpb25zLmgKK2luZGV4IDdkMDYzMjIuLjcxYTIxYzIgMTAwNjQ0CistLS0gYS9vcHRpb25zLmgKKysrKyBiL29wdGlvbnMuaAorQEAgLTI0Nyw3ICsyNDcsNyBAQCBtdWNoIHRyYWZmaWMuICovCisgLyogVGhlIGNvbW1hbmQgdG8gaW52b2tlIGZvciB4YXV0aCB3aGVuIHVzaW5nIFgxMSBmb3J3YXJkaW5nLgorICAqICItcSIgZm9yIHF1aWV0ICovCisgI2lmbmRlZiBYQVVUSF9DT01NQU5ECistI2RlZmluZSBYQVVUSF9DT01NQU5EICIvdXNyL2Jpbi94YXV0aCAtcSIKKysjZGVmaW5lIFhBVVRIX0NPTU1BTkQgInhhdXRoIC1xIgorICNlbmRpZgorIAorIC8qIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBydW5uaW5nIGFuIHNmdHAgc2VydmVyIChzdWNoIGFzIHRoZSBvbmUgaW5jbHVkZWQgd2l0aAorLS0gCisxLjcuMTEuNworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDMtY29uZmlndXJlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDAzLWNvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTNhYjAxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDAzLWNvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIGM1ZjVjNTA1NGMxYjE1NTM5ZGNjZjg2NmUyYzNmYWJhN2VkNjg0NTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/RXJpYz0yMEI9QzM9QTluYXJkPz0gPGVyaWNAZXVrcmVhLmNvbT4KK0RhdGU6IFRodSwgMjUgQXByIDIwMTMgMDA6Mjc6MjUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzZdIGNvbmZpZ3VyZTogYWRkIGEgdmFyaWFibGUgdG8gYWxsb3cgb3BlbnB0eSBjaGVjayB0byBiZSBjYWNoZWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDExICsrKysrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMDU0NjFmMy4uOWMxNmQ5MCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTY2LDE1ICsxNjYsMjAgQEAgQUNfQVJHX0VOQUJMRShvcGVucHR5LAorIAkJCUFDX01TR19OT1RJQ0UoTm90IHVzaW5nIG9wZW5wdHkpCisgCQllbHNlCisgCQkJQUNfTVNHX05PVElDRShVc2luZyBvcGVucHR5IGlmIGF2YWlsYWJsZSkKKy0JCQlBQ19TRUFSQ0hfTElCUyhvcGVucHR5LCB1dGlsLCBbQUNfREVGSU5FKEhBVkVfT1BFTlBUWSwsSGF2ZSBvcGVucHR5KCkgZnVuY3Rpb24pXSkKKysJCQlBQ19TRUFSQ0hfTElCUyhvcGVucHR5LCB1dGlsLCBbZHJvcGJlYXJfY3ZfZnVuY19oYXZlX29wZW5wdHk9eWVzXSkKKyAJCWZpCisgCV0sCisgCVsKKyAJCUFDX01TR19OT1RJQ0UoVXNpbmcgb3BlbnB0eSBpZiBhdmFpbGFibGUpCistCQlBQ19TRUFSQ0hfTElCUyhvcGVucHR5LCB1dGlsLCBbQUNfREVGSU5FKEhBVkVfT1BFTlBUWSldKQorKwkJQUNfU0VBUkNIX0xJQlMob3BlbnB0eSwgdXRpbCwgW2Ryb3BiZWFyX2N2X2Z1bmNfaGF2ZV9vcGVucHR5PXllc10pCisgCV0KKyApCistCQkKKysKKytpZiB0ZXN0ICJ4JGRyb3BiZWFyX2N2X2Z1bmNfaGF2ZV9vcGVucHR5IiA9ICJ4eWVzIjsgdGhlbgorKwlBQ19ERUZJTkUoSEFWRV9PUEVOUFRZLCxIYXZlIG9wZW5wdHkoKSBmdW5jdGlvbikKKysJbm9fcHRjX2NoZWNrPXllcworKwlub19wdG14X2NoZWNrPXllcworK2ZpCisgCisgQUNfQVJHX0VOQUJMRShzeXNsb2csCisgCVsgIC0tZGlzYWJsZS1zeXNsb2cgICAgICAgIERvbid0IGluY2x1ZGUgc3lzbG9nIHN1cHBvcnRdLAorLS0gCisxLjcuMTEuNworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDQtZml4LTJrYi1rZXlzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA0LWZpeC0ya2Ita2V5cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTM5ZDIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA0LWZpeC0ya2Ita2V5cy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitTdWJqZWN0OiBbUEFUQ0ggNC82XSBmaXggMmtiIGtleXMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisga2V4LmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9rZXguaCBiL2tleC5oCitpbmRleCA3MjQzMGU5Li4zNzVjNjc3IDEwMDY0NAorLS0tIGEva2V4LmgKKysrKyBiL2tleC5oCitAQCAtNjcsNiArNjcsNiBAQCBzdHJ1Y3QgS0VYU3RhdGUgeworIH07CisgCisgCistI2RlZmluZSBNQVhfS0VYSEFTSEJVRiAyMDAwCisrI2RlZmluZSBNQVhfS0VYSEFTSEJVRiAzMDAwCisgCisgI2VuZGlmIC8qIF9LRVhfSF8gKi8KKy0tIAorMS43LjExLjcKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA1LWRyb3BiZWFyLWVuYWJsZS1wYW0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDUtZHJvcGJlYXItZW5hYmxlLXBhbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDA4YzU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA1LWRyb3BiZWFyLWVuYWJsZS1wYW0ucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorU3ViamVjdDogW1BBVENIIDUvNl0gZHJvcGJlYXIgZW5hYmxlIHBhbQorCitkcm9wYmVhcjogV2UgbmVlZCBtb2RpZnkgZmlsZSBvcHRpb24uaCBiZXNpZGVzIGVuYWJsaW5nIHBhbSBpbiBcCitjb25maWd1cmUgaWYgd2Ugd2FudCBkcm9wYmVhciB0byBzdXBwb3J0IHBhbS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFhpYW9mZW5nIFlhbiA8eGlhb2ZlbmcueWFuQHdpbmRyaXZlci5jb20+CistLS0KKyBvcHRpb25zLmggfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDogZHJvcGJlYXItMjAxMy42Mi9vcHRpb25zLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkcm9wYmVhci0yMDEzLjYyLm9yaWcvb3B0aW9ucy5oCTIwMTQtMDEtMTQgMjE6NTM6MDIuODAzMjYyMDA5ICswMDAwCisrKysgZHJvcGJlYXItMjAxMy42Mi9vcHRpb25zLmgJMjAxNC0wMS0xNCAyMTo1Mzo1Ni4xMTkyNjM0NjIgKzAwMDAKK0BAIC0xOTIsOSArMTkyLDkgQEAKKyAgKiBQQU0gY2hhbGxlbmdlL3Jlc3BvbnNlLgorICAqIFlvdSBjYW4ndCBlbmFibGUgYm90aCBQQVNTV09SRCBhbmQgUEFNLiAqLworIAorLSNkZWZpbmUgRU5BQkxFX1NWUl9QQVNTV09SRF9BVVRICisrLyojZGVmaW5lIEVOQUJMRV9TVlJfUEFTU1dPUkRfQVVUSCovCisgLyogUEFNIHJlcXVpcmVzIC4vY29uZmlndXJlIC0tZW5hYmxlLXBhbSAqLworLS8qI2RlZmluZSBFTkFCTEVfU1ZSX1BBTV9BVVRIICovCisrI2RlZmluZSBFTkFCTEVfU1ZSX1BBTV9BVVRICisgI2RlZmluZSBFTkFCTEVfU1ZSX1BVQktFWV9BVVRICisgCisgLyogV2hldGhlciB0byB0YWtlIHB1YmxpYyBrZXkgb3B0aW9ucyBpbiAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNi1kcm9wYmVhci1jb25maWd1cmF0aW9uLWZpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDYtZHJvcGJlYXItY29uZmlndXJhdGlvbi1maWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNGM4ZDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDYtZHJvcGJlYXItY29uZmlndXJhdGlvbi1maWxlLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1N1YmplY3Q6IFtQQVRDSCA2LzZdIGRyb3BiZWFyIGNvbmZpZ3VyYXRpb24gZmlsZQorCitkcm9wYmVhcjogQ2hhbmdlIHRoZSBwYXRoICgiL2V0Yy9wYW0uZC9zc2hkIiBhcyBkZWZhdWx0KSB0byBmaW5kIGEgcGFtIGNvbmZpZ3VyYXRpb24gZmlsZSBcCit0byAiL2V0Yy9wYW0uZC9kcm9wYmVhciBmb3IgZHJvcGJlYXIgd2hlbiBlbmFibGluZyBwYW0gc3VwcG9ydGluZyIKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGVuZWEuY29tPgorU2lnbmVkLW9mZi1ieTogWGlhb2ZlbmcgWWFuIDx4aWFvZmVuZy55YW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorZGlmZiAtTmF1ciBkcm9wYmVhci0yMDEzLjYwLW9yaWcvc3ZyLWF1dGhwYW0uYyBkcm9wYmVhci0yMDEzLjYwL3N2ci1hdXRocGFtLmMKKy0tLSBkcm9wYmVhci0yMDEzLjYwLW9yaWcvc3ZyLWF1dGhwYW0uYwkyMDEzLTEwLTE2IDE2OjM0OjUzLjAwMDAwMDAwMCArMDIwMAorKysrIGRyb3BiZWFyLTIwMTMuNjAvc3ZyLWF1dGhwYW0uYwkyMDEzLTEwLTIxIDE3OjA0OjA0Ljk2OTQxNjA1NSArMDIwMAorQEAgLTIxMSw3ICsyMTEsNyBAQAorIAl1c2VyRGF0YS5wYXNzd2QgPSBwYXNzd29yZDsKKyAKKyAJLyogSW5pdCBwYW0gKi8KKy0JaWYgKChyYyA9IHBhbV9zdGFydCgic3NoZCIsIE5VTEwsICZwYW1Db252LCAmcGFtSGFuZGxlcCkpICE9IFBBTV9TVUNDRVNTKSB7CisrCWlmICgocmMgPSBwYW1fc3RhcnQoImRyb3BiZWFyIiwgTlVMTCwgJnBhbUNvbnYsICZwYW1IYW5kbGVwKSkgIT0gUEFNX1NVQ0NFU1MpIHsKKyAJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgInBhbV9zdGFydCgpIGZhaWxlZCwgcmM9JWQsICVzIiwgCisgCQkJCXJjLCBwYW1fc3RyZXJyb3IocGFtSGFuZGxlcCwgcmMpKTsKKyAJCWdvdG8gY2xlYW51cDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNy1kcm9wYmVhci1maXgtZm9yLXgzMi1hYmkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDctZHJvcGJlYXItZml4LWZvci14MzItYWJpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NTAxMjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDctZHJvcGJlYXItZml4LWZvci14MzItYWJpLnBhdGNoCkBAIC0wLDAgKzEsMTQwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhlIGRyb3BiZWFya2V5IHV0aWxpdHkgYnVpbHQgaW4geDMyIGFiaSBmb3JtYXQsIHdoZW4gZ2VuZXJhdGluZyBzc2gKK2tleXMsIHdhcyBnZXR0aW5nIGxvc3QgaW4gdGhlIGluZmluaXRlIGxvb3AuCisKK1RoaXMgcGF0Y2ggZml4ZXMgdGhlIGlzc3VlIGJ5IGZpeGluZyB0eXBlcyBvZiB2YXJpYWJsZXMgYW5kCitwYXJhbWV0ZXJzIG9mIGZ1bmN0aW9ucyB1c2VkIGluIHRoZSBjb2RlLCB3aGljaCB3ZXJlIGdldHRpbmcKK3VuZGVzaXJlZCBzaXplLCB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHgzMiBhYmkgdG9vbGNoYWluLgorCisyMDEzLzA1LzIzCitSZWNlaXZlZCB0aGlzIGZpeCBmcm9tIEggSiBMdS4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworIyBIRyBjaGFuZ2VzZXQgcGF0Y2gKKyMgVXNlciBILkouIEx1IDxoamwudG9vbHNAZ21haWwuY29tPgorIyBEYXRlIDEzNjkzNDQwNzkgMjUyMDAKKyMgTm9kZSBJRCBhMTBhMWM0NmI4NTdjYzhhMzkyM2MzYmI2ZDE1MDRhYTI1YjYwNTJmCisjIFBhcmVudCAgZTc2NjE0MTQ1YWVhNjdmNjZlNGE0MjU3Njg1Yzc3MWVmYmEyMWFhMQorVHlwZGVmIG1wX2RpZ2l0IHRvIHVuc2lnbmVkIGxvbmcgbG9uZyBmb3IgTVBfNjRCSVQKKworV2hlbiBHQ0MgaXMgdXNlZCB3aXRoIE1QXzY0QklULCB3ZSBzaG91bGQgdHlwZWRlZiBtcF9kaWdpdCB0byB1bnNpZ25lZAorbG9uZyBsb25nIGluc3RlYWQgb2YgdW5zaWduZWQgbG9uZyBzaW5jZSBmb3IgeDMyLCB1bnNpZ25lZCBsb25nIGlzCiszMi1iaXQgYW5kIHVuc2lnbmVkIGxvbmcgbG9uZyBpcyA2NC1iaXQgYW5kIGl0IGlzIHNhZmUgdG8gdXNlIHVuc2lnbmVkCitsb25nIGxvbmcgZm9yIDY0LWJpdCBpbnRlZ2VyIHdpdGggR0NDLgorCitkaWZmIC1yIGU3NjYxNDE0NWFlYSAtciBhMTBhMWM0NmI4NTcgbGlidG9tbWF0aC90b21tYXRoLmgKKy0tLSBhL2xpYnRvbW1hdGgvdG9tbWF0aC5oCVRodSBBcHIgMTggMjI6NTc6NDcgMjAxMyArMDgwMAorKysrIGIvbGlidG9tbWF0aC90b21tYXRoLmgJVGh1IE1heSAyMyAxNDoyMToxOSAyMDEzIC0wNzAwCitAQCAtNzMsNyArNzMsNyBAQAorICAgIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyAgIGxvbmc2NDsKKyAjZW5kaWYKKworLSAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgIG1wX2RpZ2l0OworKyAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIG1wX2RpZ2l0OworICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgIG1wX3dvcmQgX19hdHRyaWJ1dGVfXyAoKG1vZGUoVEkpKSk7CisKKyAgICAjZGVmaW5lIERJR0lUX0JJVCAgICAgICAgICA2MAorIyBIRyBjaGFuZ2VzZXQgcGF0Y2gKKyMgVXNlciBILkouIEx1IDxoamwudG9vbHNAZ21haWwuY29tPgorIyBEYXRlIDEzNjkzNDQyNDEgMjUyMDAKKyMgTm9kZSBJRCBjNzU1NWE0Y2I3ZGVkM2E4ODQwOWJhODVmNDAyN2JhYTdhZjVmNTM2CisjIFBhcmVudCAgYTEwYTFjNDZiODU3Y2M4YTM5MjNjM2JiNmQxNTA0YWEyNWI2MDUyZgorQ2FzdCB0byBtcF9kaWdpdCB3aGVuIHVwZGF0aW5nICpyaG8KKworVGhlcmUgaXMKKworaW50CittcF9tb250Z29tZXJ5X3NldHVwIChtcF9pbnQgKiBuLCBtcF9kaWdpdCAqIHJobykKKworV2Ugc2hvdWxkIGNhc3QgdG8gbXBfZGlnaXQgaW5zdGVhZCBvZiB1bnNpZ25lZCBsb25nIHdoZW4gdXBkYXRpbmcKKypyaG8gc2luY2UgbXBfZGlnaXQgbWF5IGJlIHVuc2lnbmVkIGxvbmcgbG9uZyBhbmQgdW5zaWduZWQgbG9uZyBsb25nCittYXkgYmUgZGlmZmVyZW50IGZyb20gdW5zaWduZWQgbG9uZywgbGlrZSBpbiB4MzIuCisKK2RpZmYgLXIgYTEwYTFjNDZiODU3IC1yIGM3NTU1YTRjYjdkZSBsaWJ0b21tYXRoL2JuX21wX21vbnRnb21lcnlfc2V0dXAuYworLS0tIGEvbGlidG9tbWF0aC9ibl9tcF9tb250Z29tZXJ5X3NldHVwLmMJVGh1IE1heSAyMyAxNDoyMToxOSAyMDEzIC0wNzAwCisrKysgYi9saWJ0b21tYXRoL2JuX21wX21vbnRnb21lcnlfc2V0dXAuYwlUaHUgTWF5IDIzIDE0OjI0OjAxIDIwMTMgLTA3MDAKK0BAIC00OCw3ICs0OCw3IEBACisgI2VuZGlmCisKKyAgIC8qIHJobyA9IC0xL20gbW9kIGIgKi8KKy0gICpyaG8gPSAodW5zaWduZWQgbG9uZykoKChtcF93b3JkKTEgPDwgKChtcF93b3JkKSBESUdJVF9CSVQpKSAtIHgpICYgTVBfTUFTSzsKKysgICpyaG8gPSAobXBfZGlnaXQpKCgobXBfd29yZCkxIDw8ICgobXBfd29yZCkgRElHSVRfQklUKSkgLSB4KSAmIE1QX01BU0s7CisKKyAgIHJldHVybiBNUF9PS0FZOworIH0KKyMgSEcgY2hhbmdlc2V0IHBhdGNoCisjIFVzZXIgSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KKyMgRGF0ZSAxMzY5MzQ0NTQxIDI1MjAwCisjIE5vZGUgSUQgN2M2NTZlNzA3MWE2NDEyNjg4YjJmMzBhNTI5YTlhZmFjNmM3YmY1YQorIyBQYXJlbnQgIGM3NTU1YTRjYjdkZWQzYTg4NDA5YmE4NWY0MDI3YmFhN2FmNWY1MzYKK0RlZmluZSBMVENfRkFTVF9UWVBFIHRvIHVuc2lnbmVkIGxvbmcgbG9uZyBmb3IgX194ODZfNjRfXworCitXZSBzaG91bGQgZGVmaW5lIExUQ19GQVNUX1RZUEUgdG8gdW5zaWduZWQgbG9uZyBsb25nIGluc3RlYWQgb2YgdW5zaWduZWQKK2xvbmcgaWYgX194ODZfNjRfXyB0byBzdXBwb3J0IHgzMiB3aGVyZSB1bnNpZ25lZCBsb25nIGxvbmcgaXMgNjQtYml0CithbmQgdW5zaWduZWQgbG9uZyBpcyAzMi1iaXQuCisKK2RpZmYgLXIgYzc1NTVhNGNiN2RlIC1yIDdjNjU2ZTcwNzFhNiBsaWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9jZmcuaAorLS0tIGEvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfY2ZnLmgJVGh1IE1heSAyMyAxNDoyNDowMSAyMDEzIC0wNzAwCisrKysgYi9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9jZmcuaAlUaHUgTWF5IDIzIDE0OjI5OjAxIDIwMTMgLTA3MDAKK0BAIC03NCw3ICs3NCw3IEBACisgICAgI2RlZmluZSBFTkRJQU5fTElUVExFCisgICAgI2RlZmluZSBFTkRJQU5fNjRCSVRXT1JECisgICAgI2RlZmluZSBMVENfRkFTVAorLSAgICNkZWZpbmUgTFRDX0ZBU1RfVFlQRSAgICB1bnNpZ25lZCBsb25nCisrICAgI2RlZmluZSBMVENfRkFTVF9UWVBFICAgIHVuc2lnbmVkIGxvbmcgbG9uZworICNlbmRpZgorCisgLyogZGV0ZWN0IFBQQzMyICovCisjIEhHIGNoYW5nZXNldCBwYXRjaAorIyBVc2VyIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CisjIERhdGUgMTM2OTM0NDczMCAyNTIwMAorIyBOb2RlIElEIGE3ZDQ2OTAxNThmYWU0ZWRlMmM0ZTViNTYyMzNlODM3MzBiZjM4ZWUKKyMgUGFyZW50ICA3YzY1NmU3MDcxYTY0MTI2ODhiMmYzMGE1MjlhOWFmYWM2YzdiZjVhCitVc2UgdW5zaWduZWQgbG9uZyBsb25nIGFhcyB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciBmb3IgeDg2LTY0IEdDQworCitXZSBzaG91bGQgdXNlIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnN0ZWFkIG9mIHVuc2lnbmVkIGxvbmcgYXMgdW5zaWduZWQKKzY0LWJpdCBpbnRlZ2VyIGZvciB4ODYtNjQgR0NDIHRvIHN1cHBvcnQgeDMyIHdoZXJlIHVuc2lnbmVkIGxvbmcgaXMKKzMyLWJpdC4KKworZGlmZiAtciA3YzY1NmU3MDcxYTYgLXIgYTdkNDY5MDE1OGZhIGxpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X21hY3Jvcy5oCistLS0gYS9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9tYWNyb3MuaAlUaHUgTWF5IDIzIDE0OjI5OjAxIDIwMTMgLTA3MDAKKysrKyBiL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X21hY3Jvcy5oCVRodSBNYXkgMjMgMTQ6MzI6MTAgMjAxMyAtMDcwMAorQEAgLTM0Myw3ICszNDMsNyBAQAorIC8qIDY0LWJpdCBSb3RhdGVzICovCisgI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgJiYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiAhZGVmaW5lZChMVENfTk9fQVNNKQorCistc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIFJPTDY0KHVuc2lnbmVkIGxvbmcgd29yZCwgaW50IGkpCisrc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgUk9MNjQodW5zaWduZWQgbG9uZyBsb25nIHdvcmQsIGludCBpKQorIHsKKyAgICBhc20oInJvbHEgJSVjbCwlMCIKKyAgICAgICA6Ij1yIiAod29yZCkKK0BAIC0zNTEsNyArMzUxLDcgQEAKKyAgICByZXR1cm4gd29yZDsKKyB9CisKKy1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgUk9SNjQodW5zaWduZWQgbG9uZyB3b3JkLCBpbnQgaSkKKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBST1I2NCh1bnNpZ25lZCBsb25nIGxvbmcgd29yZCwgaW50IGkpCisgeworICAgIGFzbSgicm9ycSAlJWNsLCUwIgorICAgICAgIDoiPXIiICh3b3JkKQorQEAgLTM2MSw3ICszNjEsNyBAQAorCisgI2lmbmRlZiBMVENfTk9fUk9MQworCistc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIFJPTDY0Yyh1bnNpZ25lZCBsb25nIHdvcmQsIGNvbnN0IGludCBpKQorK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIFJPTDY0Yyh1bnNpZ25lZCBsb25nIGxvbmcgd29yZCwgY29uc3QgaW50IGkpCisgeworICAgIGFzbSgicm9scSAlMiwlMCIKKyAgICAgICA6Ij1yIiAod29yZCkKK0BAIC0zNjksNyArMzY5LDcgQEAKKyAgICByZXR1cm4gd29yZDsKKyB9CisKKy1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgUk9SNjRjKHVuc2lnbmVkIGxvbmcgd29yZCwgY29uc3QgaW50IGkpCisrc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgUk9SNjRjKHVuc2lnbmVkIGxvbmcgbG9uZyB3b3JkLCBjb25zdCBpbnQgaSkKKyB7CisgICAgYXNtKCJyb3JxICUyLCUwIgorICAgICAgIDoiPXIiICh3b3JkKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFyIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2U3ODdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhcgpAQCAtMCwwICsxLDQgQEAKKyMlUEFNLTEuMAorCithdXRoICAgICBpbmNsdWRlICBjb21tb24tYXV0aAorYWNjb3VudCAgaW5jbHVkZSAgY29tbW9uLWFjY291bnQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXIuc29ja2V0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhci5zb2NrZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVjNjFiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXIuc29ja2V0CkBAIC0wLDAgKzEsMTAgQEAKK1tVbml0XQorQ29uZmxpY3RzPWRyb3BiZWFyLnNlcnZpY2UKKworW1NvY2tldF0KK0xpc3RlblN0cmVhbT0yMgorQWNjZXB0PXllcworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PXNvY2tldHMudGFyZ2V0CitBbHNvPWRyb3BiZWFya2V5LnNlcnZpY2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXJALnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFyQC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZTk5NDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFyQC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTEgQEAKK1tVbml0XQorRGVzY3JpcHRpb249U1NIIFBlci1Db25uZWN0aW9uIFNlcnZlcgorV2FudHM9ZHJvcGJlYXJrZXkuc2VydmljZQorQWZ0ZXI9c3lzbG9nLnRhcmdldCBkcm9wYmVhcmtleS5zZXJ2aWNlCisKK1tTZXJ2aWNlXQorRW52aXJvbm1lbnRGaWxlPS0vZXRjL2RlZmF1bHQvZHJvcGJlYXIKK0V4ZWNTdGFydD0tQFNCSU5ESVJAL2Ryb3BiZWFyIC1pIC1yIC9ldGMvZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5ICREUk9QQkVBUl9FWFRSQV9BUkdTCitFeGVjUmVsb2FkPUBCQVNFX0JJTkRJUkAva2lsbCAtSFVQICRNQUlOUElECitTdGFuZGFyZElucHV0PXNvY2tldAorS2lsbE1vZGU9cHJvY2VzcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhcmtleS5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhcmtleS5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYzIxZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFya2V5LnNlcnZpY2UKQEAgLTAsMCArMSw4IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVNTSCBLZXkgR2VuZXJhdGlvbgorQ29uZGl0aW9uUGF0aEV4aXN0cz18IS9ldGMvZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5CisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitFeGVjU3RhcnQ9QFNCSU5ESVJAL2Ryb3BiZWFya2V5IC10IHJzYSAtZiAvZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX3JzYV9ob3N0X2tleQorUmVtYWluQWZ0ZXJFeGl0PXllcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9pbml0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4ZmVkM2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2luaXQKQEAgLTAsMCArMSwxMTMgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczoJCXNzaGQKKyMgUmVxdWlyZWQtU3RhcnQ6CSRyZW1vdGVfZnMgJHN5c2xvZyAkbmV0d29ya2luZworIyBSZXF1aXJlZC1TdG9wOgkkcmVtb3RlX2ZzICRzeXNsb2cKKyMgRGVmYXVsdC1TdGFydDoJMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6CQkxCisjIFNob3J0LURlc2NyaXB0aW9uOglEcm9wYmVhciBTZWN1cmUgU2hlbGwgc2VydmVyCisjIyMgRU5EIElOSVQgSU5GTworIworIyBEbyBub3QgY29uZmlndXJlIHRoaXMgZmlsZS4gRWRpdCAvZXRjL2RlZmF1bHQvZHJvcGJlYXIgaW5zdGVhZCEKKyMKKworUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KK0RBRU1PTj0vdXNyL3NiaW4vZHJvcGJlYXIKK05BTUU9ZHJvcGJlYXIKK0RFU0M9IkRyb3BiZWFyIFNTSCBzZXJ2ZXIiCitQSURGSUxFPS92YXIvcnVuL2Ryb3BiZWFyLnBpZAorCitEUk9QQkVBUl9QT1JUPTIyCitEUk9QQkVBUl9FWFRSQV9BUkdTPQorTk9fU1RBUlQ9MAorCitzZXQgLWUKKwordGVzdCAhIC1yIC9ldGMvZGVmYXVsdC9kcm9wYmVhciB8fCAuIC9ldGMvZGVmYXVsdC9kcm9wYmVhcgordGVzdCAiJE5PX1NUQVJUIiA9ICIwIiB8fCBleGl0IDAKK3Rlc3QgLXggIiREQUVNT04iIHx8IGV4aXQgMAordGVzdCAhIC1oIC92YXIvc2VydmljZS9kcm9wYmVhciB8fCBleGl0IDAKKworcmVhZG9ubHlfcm9vdGZzPTAKK2ZvciBmbGFnIGluIGBhd2sgJ3sgaWYgKCQyID09ICIvIikgeyBzcGxpdCgkNCxGTEFHUywiLCIpIH0gfTsgRU5EIHsgZm9yIChmIGluIEZMQUdTKSBwcmludCBGTEFHU1tmXSB9JyA8L3Byb2MvbW91bnRzYDsgZG8KKyAgY2FzZSAkZmxhZyBpbgorICAgcm8pCisgICAgIHJlYWRvbmx5X3Jvb3Rmcz0xCisgICAgIDs7CisgIGVzYWMKK2RvbmUKKworaWYgWyAkcmVhZG9ubHlfcm9vdGZzID0gIjEiIF07IHRoZW4KKyAgbWtkaXIgLXAgL3Zhci9saWIvZHJvcGJlYXIKKyAgRFJPUEJFQVJfUlNBS0VZX0RFRkFVTFQ9Ii92YXIvbGliL2Ryb3BiZWFyL2Ryb3BiZWFyX3JzYV9ob3N0X2tleSIKKyAgRFJPUEJFQVJfRFNTS0VZX0RFRkFVTFQ9Ii92YXIvbGliL2Ryb3BiZWFyL2Ryb3BiZWFyX2Rzc19ob3N0X2tleSIKK2Vsc2UKKyAgRFJPUEJFQVJfUlNBS0VZX0RFRkFVTFQ9Ii9ldGMvZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5IgorICBEUk9QQkVBUl9EU1NLRVlfREVGQVVMVD0iL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9kc3NfaG9zdF9rZXkiCitmaQorCit0ZXN0IC16ICIkRFJPUEJFQVJfQkFOTkVSIiB8fCBcCisgIERST1BCRUFSX0VYVFJBX0FSR1M9IiREUk9QQkVBUl9FWFRSQV9BUkdTIC1iICREUk9QQkVBUl9CQU5ORVIiCit0ZXN0IC1uICIkRFJPUEJFQVJfUlNBS0VZIiB8fCBcCisgIERST1BCRUFSX1JTQUtFWT0kRFJPUEJFQVJfUlNBS0VZX0RFRkFVTFQKK3Rlc3QgLW4gIiREUk9QQkVBUl9EU1NLRVkiIHx8IFwKKyAgRFJPUEJFQVJfRFNTS0VZPSREUk9QQkVBUl9EU1NLRVlfREVGQVVMVAordGVzdCAtbiAiJERST1BCRUFSX0tFWVRZUEVTIiB8fCBcCisgIERST1BCRUFSX0tFWVRZUEVTPSJyc2EiCisKK2dlbl9rZXlzKCkgeworZm9yIHQgaW4gJERST1BCRUFSX0tFWVRZUEVTOyBkbworICBjYXNlICR0IGluCisgICAgcnNhKQorICAgICAgICBpZiBbIC1mICIkRFJPUEJFQVJfUlNBS0VZIiAtYSAhIC1zICIkRFJPUEJFQVJfUlNBS0VZIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgcm0gJERST1BCRUFSX1JTQUtFWSB8fCB0cnVlCisgICAgICAgIGZpCisgICAgICAgIHRlc3QgLWYgJERST1BCRUFSX1JTQUtFWSB8fCBkcm9wYmVhcmtleSAtdCByc2EgLWYgJERST1BCRUFSX1JTQUtFWQorCTs7CisgICAgZHNhKQorICAgICAgICBpZiBbIC1mICIkRFJPUEJFQVJfRFNTS0VZIiAtYSAhIC1zICIkRFJPUEJFQVJfRFNTS0VZIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgcm0gJERST1BCRUFSX0RTU0tFWSB8fCB0cnVlCisgICAgICAgIGZpCisgICAgICAgIHRlc3QgLWYgJERST1BCRUFSX0RTU0tFWSB8fCBkcm9wYmVhcmtleSAtdCBkc3MgLWYgJERST1BCRUFSX0RTU0tFWQorCTs7CisgIGVzYWMKK2RvbmUKK30KKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nICRERVNDOiAiCisJZ2VuX2tleXMKKwlLRVlfQVJHUz0iIgorCXRlc3QgLWYgJERST1BCRUFSX0RTU0tFWSAmJiBLRVlfQVJHUz0iJEtFWV9BUkdTIC1kICREUk9QQkVBUl9EU1NLRVkiCisJdGVzdCAtZiAkRFJPUEJFQVJfUlNBS0VZICYmIEtFWV9BUkdTPSIkS0VZX0FSR1MgLXIgJERST1BCRUFSX1JTQUtFWSIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtcCAkUElERklMRSBcCisJICAteCAiJERBRU1PTiIgLS0gJEtFWV9BUkdTIFwKKwkgICAgLXAgIiREUk9QQkVBUl9QT1JUIiAkRFJPUEJFQVJfRVhUUkFfQVJHUworCWVjaG8gIiROQU1FLiIKKwk7OworICBzdG9wKQorCWVjaG8gLW4gIlN0b3BwaW5nICRERVNDOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLUsgLXggIiREQUVNT04iIC1wICRQSURGSUxFCisJZWNobyAiJE5BTUUuIgorCTs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCWVjaG8gLW4gIlJlc3RhcnRpbmcgJERFU0M6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAteCAiJERBRU1PTiIgLXAgJFBJREZJTEUKKwlzbGVlcCAxCisJS0VZX0FSR1M9IiIKKwl0ZXN0IC1mICREUk9QQkVBUl9EU1NLRVkgJiYgS0VZX0FSR1M9IiRLRVlfQVJHUyAtZCAkRFJPUEJFQVJfRFNTS0VZIgorCXRlc3QgLWYgJERST1BCRUFSX1JTQUtFWSAmJiBLRVlfQVJHUz0iJEtFWV9BUkdTIC1yICREUk9QQkVBUl9SU0FLRVkiCisJc3RhcnQtc3RvcC1kYWVtb24gLVMgLXAgJFBJREZJTEUgXAorCSAgLXggIiREQUVNT04iIC0tICRLRVlfQVJHUyBcCisJICAgIC1wICIkRFJPUEJFQVJfUE9SVCIgJERST1BCRUFSX0VYVFJBX0FSR1MKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgKikKKwlOPS9ldGMvaW5pdC5kLyROQU1FCisJZWNobyAiVXNhZ2U6ICROIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyXzIwMTUuNjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyXzIwMTUuNjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI3NDlkNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXJfMjAxNS42OC5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgZHJvcGJlYXIuaW5jCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3NjY0YWMxMGY3Y2MyMzAxYzUzMGViODBjNzU2ZmM1ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1NWVhN2MxZTkwNGZmZTRiMWNkYmUxYWRkY2E4MjkxYTI1MzNkN2QyODVmZDIyYWMzMzYwOGU5NTAyYTYyNDQ2IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdC0yLjEuMC9hdXRvdG9vbHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LTIuMS4wL2F1dG90b29scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTU5OTY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdC0yLjEuMC9hdXRvdG9vbHMucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorQXZvaWQgdXNpbmcgZXhwYXQncyBtNCBmaWxlcworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW090aGVyXQorV29ya2Fyb3VuZCBzcGVjaWZpYyB0byBvdXIgYnVpbGQgc3lzdGVtLgorCitTaWduZWQtb2ZmLWJ5OiBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitVcGRhdGVkIHRvIGFwcGx5IG92ZXIgZXhwYXQgMi4xLjAKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKworZGlmZiAtTnVyZCBleHBhdC0yLjEuMC9jb25maWd1cmUuaW4gZXhwYXQtMi4xLjAvY29uZmlndXJlLmluCistLS0gZXhwYXQtMi4xLjAvY29uZmlndXJlLmluCTIwMTItMDMtMDQgMDE6NDU6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZXhwYXQtMi4xLjAvY29uZmlndXJlLmluCTIwMTItMDUtMTAgMjE6MDQ6NDQuMDAwMDAwMDAwICswMzAwCitAQCAtNTEsOCArNTEsNiBAQAorIAorIEFDX0NPTkZJR19IRUFERVIoZXhwYXRfY29uZmlnLmgpCisgCistc2luY2x1ZGUoY29uZnRvb2xzL2FjX2NfYmlnZW5kaWFuX2Nyb3NzLm00KQorLQorIEFDX0xJQlRPT0xfV0lOMzJfRExMCisgQUNfUFJPR19MSUJUT09MCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZmFmZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LmluYwpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIkEgc3RyZWFtLW9yaWVudGVkIFhNTCBwYXJzZXIgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkV4cGF0IGlzIGFuIFhNTCBwYXJzZXIgbGlicmFyeSB3cml0dGVuIGluIEMuIEl0IGlzIGEgc3RyZWFtLW9yaWVudGVkIHBhcnNlciBpbiB3aGljaCBhbiBhcHBsaWNhdGlvbiByZWdpc3RlcnMgaGFuZGxlcnMgZm9yIHRoaW5ncyB0aGUgcGFyc2VyIG1pZ2h0IGZpbmQgaW4gdGhlIFhNTCBkb2N1bWVudCAobGlrZSBzdGFydCB0YWdzKSIKK0hPTUVQQUdFID0gImh0dHA6Ly9leHBhdC5zb3VyY2Vmb3JnZS5uZXQvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJNSVQiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2V4cGF0L2V4cGF0LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvdG9vbHMucGF0Y2giCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIGd6aXBuYXRpdmUKKworIyBUaGlzIHBhY2thZ2UgdXNlcyBhbiBhcmNoaXZlIGZvcm1hdCBrbm93biB0byBoYXZlIGlzc3VlIHdpdGggc29tZQorIyB2ZXJzaW9ucyBvZiBnemlwCitkb191bnBhY2tbZGVwZW5kc10gKz0gImd6aXAtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L2NvbmZ0b29scy9saWJ0b29sLm00Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXRfMi4xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0XzIuMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NTg3NDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0XzIuMS4wLmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSBleHBhdC5pbmMKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTFiNzFmNjgxNzEzZDEyNTZlMWMyM2IwODkwOTIwODc0IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZGQ3ZGFiN2E1ZmVhOTdkMmE2YTQzZjUxMTQ0OWI3Y2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODIzNzA1NDcyZjgxNmRmMjFjOGY2YWEwMjZkZDE2MmIyODA4MDY4MzhiYjU1YjM0MzJiMGZiMWZjY2E3ZWI4NiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9kaXNhYmxlX2phdmEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZGlzYWJsZV9qYXZhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YzVmMTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZGlzYWJsZV9qYXZhLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKKworIyBQdWxsZWQgZnJvbSBPcGVuRW1iZWRkZWQKKyMgCisjIENvbW1lbnRlZCBieTogU2F1bCBXb2xkIDxzYXVsLndvbGRAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworSW5kZXg6IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9nZXR0ZXh0LXRvb2xzL2NvbmZpZ3VyZS5hYwkyMDA2LTExLTI3IDA5OjAyOjAxLjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvY29uZmlndXJlLmFjCTIwMTEtMDMtMTYgMTY6NTU6MzYuMTExMzk2NTU3IC0wNzAwCitAQCAtMzYsMjcgKzM2LDE1IEBACisgZ3RfSkFWQV9DSE9JQ0UKKyAKKyBndF9HQ0oKKy1pZiB0ZXN0IC1uICIkSEFWRV9HQ0oiICYmIHRlc3QgIiRKQVZBX0NIT0lDRSIgPSB5ZXM7IHRoZW4KKy0gIEJVSUxESkFWQUVYRT15ZXMKKy1lbHNlCisgICBCVUlMREpBVkFFWEU9bm8KKy1maQorIEFDX1NVQlNUKEJVSUxESkFWQUVYRSkKKyAKKyBndF9KQVZBRVhFQworIGd0X0pBVkFDT01QKFsxLjNdKQorIEFDX0NIRUNLX1BST0coSkFSLCBqYXIsIGphcikKKy1pZiB0ZXN0IC1uICIkSEFWRV9KQVZBQ09NUCIgJiYgdGVzdCAtbiAiJEpBUiIgJiYgdGVzdCAiJEpBVkFfQ0hPSUNFIiAhPSBubzsgdGhlbgorLSAgQlVJTERKQVZBPXllcworLWVsc2UKKyAgIEJVSUxESkFWQT1ubworLWZpCisgQUNfU1VCU1QoQlVJTERKQVZBKQorLWlmIHRlc3QgLW4gIiRIQVZFX0pBVkFFWEVDIiAmJiB0ZXN0ICRCVUlMREpBVkEgPSB5ZXM7IHRoZW4KKy0gIFRFU1RKQVZBPXllcworLWVsc2UKKyAgIFRFU1RKQVZBPW5vCistZmkKKyBBQ19TVUJTVChURVNUSkFWQSkKKyAKKyBndF9DU0hBUlBDT01QCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZml4X2FjbG9jYWxfdmVyc2lvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9maXhfYWNsb2NhbF92ZXJzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyOTNmNWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZml4X2FjbG9jYWxfdmVyc2lvbi5wYXRjaApAQCAtMCwwICsxLDExMCBAQAorCitUaGlzIHBhdGNoIHVwZGF0ZXMgdGhlIHJlcXVpcmVkIHZlcnNpb24gbnVtYmVyIGZyb20gMi42MSB0byB0aGUgCitjdXJyZW50IDIuNjUgdmVyc2lvbiBvZiBhY2xvY2FsLCB0aGlzIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkIAord2hlbiB3ZSB1cGRhdGUgYWNsb2NhbAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnkgU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvbTQvbGliLWxpbmsubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2F1dG9jb25mLWxpYi1saW5rL200L2xpYi1saW5rLm00CTIwMTEtMDMtMTcgMDI6MjQ6MzYuMzkxNTE5Nzc1IC0wNzAwCisrKysgZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvbTQvbGliLWxpbmsubTQJMjAxMS0wMy0xNyAwMjoyNDo0NS41Njk1MjYwNzMgLTA3MDAKK0BAIC0xNDgsNyArMTQ4LDcgQEAKKyAgIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorICAgZG5sIEF1dG9jb25mID49IDIuNjEgc3VwcG9ydHMgZG90cyBpbiAtLXdpdGggb3B0aW9ucy4KKy0gIGRlZmluZShbTl9BX01fRV0sW200X2lmKG00X3ZlcnNpb25fY29tcGFyZShtNF9kZWZuKFttNF9QQUNLQUdFX1ZFUlNJT05dKSxbMi42MV0pLFstMV0sW3RyYW5zbGl0KFskMV0sWy5dLFtfXSldLFskMV0pXSkKKysgIGRlZmluZShbTl9BX01fRV0sW200X2lmKG00X3ZlcnNpb25fY29tcGFyZShtNF9kZWZuKFttNF9QQUNLQUdFX1ZFUlNJT05dKSxbMi42NV0pLFstMV0sW3RyYW5zbGl0KFskMV0sWy5dLFtfXSldLFskMV0pXSkKKyAgIGRubCBCeSBkZWZhdWx0LCBsb29rIGluICRpbmNsdWRlZGlyIGFuZCAkbGliZGlyLgorICAgdXNlX2FkZGl0aW9uYWw9eWVzCisgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworSW5kZXg6IGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRobHkvYWNsb2NhbC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvYXV0b2NvbmYtbGliLWxpbmsvdGVzdHMvcnBhdGhseS9hY2xvY2FsLm00CTIwMTEtMDMtMTcgMDI6MjQ6MzYuMzkxNTE5Nzc1IC0wNzAwCisrKysgZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvdGVzdHMvcnBhdGhseS9hY2xvY2FsLm00CTIwMTEtMDMtMTcgMDI6MjQ6NDUuNTcwNTI2OTA0IC0wNzAwCitAQCAtMTEsOCArMTEsOCBAQAorICMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICMgUEFSVElDVUxBUiBQVVJQT1NFLgorIAorLW00X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjFdLCwKKy1bbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjYxLgorK200X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjVdLCwKKytbbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjY1LgorIFlvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIElmIHlvdSB3YW50IHRvIHVzZSB0aGF0LAorIHlvdSBzaG91bGQgcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5Ll0sIFs2M10pXSkKKyAKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHgvYWNsb2NhbC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvYXV0b2NvbmYtbGliLWxpbmsvdGVzdHMvcnBhdGh4L2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNDozNi4zOTE1MTk3NzUgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHgvYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI0OjQ1LjU3MjUyNTc3MyAtMDcwMAorQEAgLTExLDggKzExLDggQEAKKyAjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyAjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAKKy1tNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjYxXSwsCistW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42MS4KKyttNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjY1XSwsCisrW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42NS4KKyBZb3UgaGF2ZSBhbm90aGVyIHZlcnNpb24gb2YgYXV0b2NvbmYuICBJZiB5b3Ugd2FudCB0byB1c2UgdGhhdCwKKyB5b3Ugc2hvdWxkIHJlZ2VuZXJhdGUgdGhlIGJ1aWxkIHN5c3RlbSBlbnRpcmVseS5dLCBbNjNdKV0pCisgCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvdGVzdHMvcnBhdGh5L2FjbG9jYWwubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoeS9hY2xvY2FsLm00CTIwMTEtMDMtMTcgMDI6MjQ6MzYuMzkxNTE5Nzc1IC0wNzAwCisrKysgZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvdGVzdHMvcnBhdGh5L2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNDo0NS41NzgzOTQ5MTYgLTA3MDAKK0BAIC0xMSw3ICsxMSw3IEBACisgIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisgCistbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42MV0sLAorK200X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjVdLCwKKyBbbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjYxLgorIFlvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIElmIHlvdSB3YW50IHRvIHVzZSB0aGF0LAorIHlvdSBzaG91bGQgcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5Ll0sIFs2M10pXSkKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHovYWNsb2NhbC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvYXV0b2NvbmYtbGliLWxpbmsvdGVzdHMvcnBhdGh6L2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNDozNi4zOTE1MTk3NzUgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHovYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI0OjQ1LjU4NjM5NTQxNiAtMDcwMAorQEAgLTExLDggKzExLDggQEAKKyAjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyAjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAKKy1tNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjYxXSwsCistW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42MS4KKyttNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjY1XSwsCisrW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42NS4KKyBZb3UgaGF2ZSBhbm90aGVyIHZlcnNpb24gb2YgYXV0b2NvbmYuICBJZiB5b3Ugd2FudCB0byB1c2UgdGhhdCwKKyB5b3Ugc2hvdWxkIHJlZ2VuZXJhdGUgdGhlIGJ1aWxkIHN5c3RlbSBlbnRpcmVseS5dLCBbNjNdKV0pCisgCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9hY2xvY2FsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9nZXR0ZXh0LXRvb2xzL2FjbG9jYWwubTQJMjAwNi0xMS0yNyAwOTozNDozMi4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNzowMS4xMzU2ODI4MDcgLTA3MDAKK0BAIC0xMSw4ICsxMSw4IEBACisgIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisgCistbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42MV0sLAorLVttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjEuCisrbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42NV0sLAorK1ttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjUuCisgWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoYXQsCisgeW91IHNob3VsZCByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuXSwgWzYzXSldKQorIAorSW5kZXg6IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZXhhbXBsZXMvYWNsb2NhbC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvZ2V0dGV4dC10b29scy9leGFtcGxlcy9hY2xvY2FsLm00CTIwMDYtMTEtMjcgMDk6MTY6MjMuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9leGFtcGxlcy9hY2xvY2FsLm00CTIwMTEtMDMtMTcgMDI6MjY6NTIuNTg5Mzk2NjgzIC0wNzAwCitAQCAtMTEsOCArMTEsOCBAQAorICMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICMgUEFSVElDVUxBUiBQVVJQT1NFLgorIAorLW00X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjFdLCwKKy1bbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjYxLgorK200X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjVdLCwKKytbbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjY1LgorIFlvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIElmIHlvdSB3YW50IHRvIHVzZSB0aGF0LAorIHlvdSBzaG91bGQgcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5Ll0sIFs2M10pXSkKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9maXhfZ251X3NvdXJjZV9jaXJjdWxhci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9maXhfZ251X3NvdXJjZV9jaXJjdWxhci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg2MTQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2ZpeF9nbnVfc291cmNlX2NpcmN1bGFyLnBhdGNoCkBAIC0wLDAgKzEsMzQ4IEBACisKK1RoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeSBvbiBBQ19HTlVfU09VUkNFIGluCitBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMuCisKK1RoYW5rcyB0byBNYXJrIEhhdGxlIGZvciB0aGUgdGltZWx5IHBvaW50ZXJzIGFuZCBmaXhlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK1NpZ25lZC1vZmYtYnkgU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2V4dGVuc2lvbnMubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvZXh0ZW5zaW9ucy5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvZXh0ZW5zaW9ucy5tNAkyMDA2LTExLTI3IDA5OjE0OjM4LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2V4dGVuc2lvbnMubTQJMjAxMS0wMy0xNiAyMzo1NDowMS43MTE5MjM0NDggLTA3MDAKK0BAIC0xNiw0MyArMTYsNDcgQEAKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKKyAjIHR5cGljYWxseSBkdWUgdG8gc3RhbmRhcmRzLWNvbmZvcm1hbmNlIGlzc3Vlcy4KKy1BQ19ERUZVTihbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKy1bCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkKKy0gIEFDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pCistCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0FJWF0pCistICBBQ19SRVFVSVJFKFtBQ19NSU5JWF0pCistCistICBBSF9WRVJCQVRJTShbX19FWFRFTlNJT05TX19dLAorLVsvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKy0jaWZuZGVmIF9fRVhURU5TSU9OU19fCistIyB1bmRlZiBfX0VYVEVOU0lPTlNfXworLSNlbmRpZgorLSNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistIyB1bmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKy0jZW5kaWYKKy0jaWZuZGVmIF9UQU5ERU1fU09VUkNFCistIyB1bmRlZiBfVEFOREVNX1NPVVJDRQorLSNlbmRpZl0pCistICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfX10sCistICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfX10sCistICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKy0gICAgICAgW0FDX0xBTkdfUFJPR1JBTShbCistIwkgIGRlZmluZSBfX0VYVEVOU0lPTlNfXyAxCistCSAgQUNfSU5DTFVERVNfREVGQVVMVF0pXSwKKy0gICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPXllc10sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz1ub10pXSkKKy0gIHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fID0geWVzICYmCistICAgIEFDX0RFRklORShbX19FWFRFTlNJT05TX19dKQorLSAgQUNfREVGSU5FKFtfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1NdKQorLSAgQUNfREVGSU5FKFtfVEFOREVNX1NPVVJDRV0pCistXSkKKysjQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCisrI1sKKysjICBBQ19CRUZPUkUoWyQwXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkKKysjICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorKyMKKysjICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysjICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorKyMgIEFDX1JFUVVJUkUoW0FDX01JTklYXSkKKysjCisrIyAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKKysjWy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworKyMjaWZuZGVmIF9fRVhURU5TSU9OU19fCisrIyMgdW5kZWYgX19FWFRFTlNJT05TX18KKysjI2VuZGlmCisrIyNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisrIyMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisrIyNlbmRpZgorKyMjaWZuZGVmIF9UQU5ERU1fU09VUkNFCisrIyMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKysjI2VuZGlmXSkKKysjICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfX10sCisrIyAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorKyMgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorKyMgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbCisrIyMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorKyMJICBBQ19JTkNMVURFU19ERUZBVUxUXSldLAorKyMgICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPXllc10sCisrIyAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCisrIyAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKysjICAgIEFDX0RFRklORShbX19FWFRFTlNJT05TX19dKQorKyMgIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKysjICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKysjXSkKKyAKKyAjIGdsX1VTRV9TWVNURU1fRVhURU5TSU9OUworICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorIEFDX0RFRlVOKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorLSAgW0FDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10pXSkKKytbCisrICAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrCisrICAgQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKytdKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvZ251bGliLWNvbXAubTQJMjAwNi0xMS0yNyAwOTozMzoxOS4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAkyMDExLTAzLTE2IDIzOjUwOjE3LjQ3MTUzMTgzOCAtMDcwMAorQEAgLTI1LDcgKzI1LDcgQEAKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9MSUJPQkpTJF0pZG5sIGEgdmFyaWFibGUKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9MVExJQk9CSlMkXSlkbmwgYSB2YXJpYWJsZQorICAgQUNfUkVRVUlSRShbQUNfUFJPR19SQU5MSUJdKQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgICBBQ19SRVFVSVJFKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorIF0pCisgCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L21iY2hhci5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9tYmNoYXIubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L21iY2hhci5tNAkyMDA2LTExLTI3IDA5OjE0OjM4LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L21iY2hhci5tNAkyMDExLTAzLTE2IDIzOjUwOjEwLjgxNDM5NjUyOSAtMDcwMAorQEAgLTksNyArOSw3IEBACisgCisgQUNfREVGVU4oW2dsX01CQ0hBUl0sCisgWworLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgICBkbmwgVGhlIGZvbGxvd2luZyBsaW5lIGlzIHRoYXQgc28gdGhlIHVzZXIgY2FuIHRlc3QgSEFWRV9XQ0hBUl9ICisgICBkbmwgYmVmb3JlICNpbmNsdWRlICJtYmNoYXIuaCIuCisgICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3djaGFyLmhdKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC93Y3dpZHRoLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L3djd2lkdGgubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L3djd2lkdGgubTQJMjAwNi0xMS0yNyAwOToxNDozOC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC93Y3dpZHRoLm00CTIwMTEtMDMtMTYgMjM6NTA6MDguMzU3Mzk2MjQ3IC0wNzAwCitAQCAtNyw3ICs3LDcgQEAKKyBBQ19ERUZVTihbZ2xfRlVOQ19XQ1dJRFRIXSwKKyBbCisgICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHdjaGFyLmg+IHRvIGRlY2xhcmUgd2N3aWR0aCgpLgorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgCisgICBBQ19SRVFVSVJFKFtBQ19DX0lOTElORV0pCisgICBBQ19SRVFVSVJFKFtndF9UWVBFX1dDSEFSX1RdKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL200L2xvY2subTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9tNC9sb2NrLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL200L2xvY2subTQJMjAwNi0xMC0yNCAxMzo1OTo1OS4wMDAwMDAwMDAgLTA3MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC1ydW50aW1lL200L2xvY2subTQJMjAxMS0wMy0xNiAyMzo1MDowNC4zNTU4OTE2NzYgLTA3MDAKK0BAIC0zNSw3ICszNSw3IEBACisgICBBQ19CRUZPUkUoWyQwXSwgW2dsX0FSR1BdKWRubAorIAorICAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pIGRubCBuZWVkZWQgZm9yIHB0aHJlYWRfcndsb2NrX3Qgb24gZ2xpYmMgc3lzdGVtcworKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKSBkbmwgbmVlZGVkIGZvciBwdGhyZWFkX3J3bG9ja190IG9uIGdsaWJjIHN5c3RlbXMKKyAgIGRubCBDaGVjayBmb3IgbXVsdGl0aHJlYWRpbmcuCisgICBBQ19BUkdfRU5BQkxFKHRocmVhZHMsCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXRocmVhZHM9e3Bvc2l4fHNvbGFyaXN8cHRofHdpbjMyfV0sIFtzcGVjaWZ5IG11bHRpdGhyZWFkaW5nIEFQSV0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9leHRlbnNpb25zLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9leHRlbnNpb25zLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZXh0ZW5zaW9ucy5tNAkyMDA2LTExLTI3IDA5OjE0OjU0LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9leHRlbnNpb25zLm00CTIwMTEtMDMtMTYgMjM6NTM6MjguNDg3NjcxMjY2IC0wNzAwCitAQCAtMTYsNDMgKzE2LDQ3IEBACisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCisgIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCistQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistWworLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorLQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCistICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorLSAgQUNfUkVRVUlSRShbQUNfTUlOSVhdKQorLQorLSAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKKy1bLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCistI2lmbmRlZiBfX0VYVEVOU0lPTlNfXworLSMgdW5kZWYgX19FWFRFTlNJT05TX18KKy0jZW5kaWYKKy0jaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistI2VuZGlmCistI2lmbmRlZiBfVEFOREVNX1NPVVJDRQorLSMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jZW5kaWZdKQorLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX19dLAorLSAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorLSAgICBbQUNfQ09NUElMRV9JRkVMU0UoCistICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworLSMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorLQkgIEFDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXNdLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCistICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorLSAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKy0gIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKy0gIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCisrI0FDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorKyNbCisrIyAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCisrIyAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSkKKysjCisrIyAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrIyAgQUNfUkVRVUlSRShbQUNfQUlYXSkKKysjICBBQ19SRVFVSVJFKFtBQ19NSU5JWF0pCisrIworKyMgIEFIX1ZFUkJBVElNKFtfX0VYVEVOU0lPTlNfX10sCisrI1svKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKysjI2lmbmRlZiBfX0VYVEVOU0lPTlNfXworKyMjIHVuZGVmIF9fRVhURU5TSU9OU19fCisrIyNlbmRpZgorKyMjaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworKyMjIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworKyMjZW5kaWYKKysjI2lmbmRlZiBfVEFOREVNX1NPVVJDRQorKyMjIHVuZGVmIF9UQU5ERU1fU09VUkNFCisrIyNlbmRpZl0pCisrIyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX19dLAorKyMgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fXSwKKysjICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKysjICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworKyMjCSAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKysjCSAgQUNfSU5DTFVERVNfREVGQVVMVF0pXSwKKysjICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXNdLAorKyMgICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPW5vXSldKQorKyMgIHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fID0geWVzICYmCisrIyAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKysjICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCisrIyAgQUNfREVGSU5FKFtfVEFOREVNX1NPVVJDRV0pCisrI10pCisgCisgIyBnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKKyAjIHR5cGljYWxseSBkdWUgdG8gc3RhbmRhcmRzLWNvbmZvcm1hbmNlIGlzc3Vlcy4KKyBBQ19ERUZVTihbZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKy0gIFtBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKV0pCisrWworKyAgIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKworKyAgIEFDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisrXSkKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2ZubWF0Y2gubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2ZubWF0Y2gubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9mbm1hdGNoLm00CTIwMDYtMTEtMjcgMDk6MTQ6NTQuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2ZubWF0Y2gubTQJMjAxMS0wMy0xNiAyMzo1MjowNi40Nzc0NjM2NzEgLTA3MDAKK0BAIC05MSw3ICs5MSw3IEBACisgQUNfREVGVU4oW2dsX0ZVTkNfRk5NQVRDSF9HTlVdLAorIFsKKyAgIGRubCBQZXJzdWFkZSBnbGliYyA8Zm5tYXRjaC5oPiB0byBkZWNsYXJlIEZOTV9DQVNFRk9MRCBldGMuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEZOTUFUQ0hfSD0KKyAgIF9BQ19GVU5DX0ZOTUFUQ0hfSUYoW0dOVV0sIFthY19jdl9mdW5jX2ZubWF0Y2hfZ251XSwKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2dldGRlbGltLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nZXRkZWxpbS5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2dldGRlbGltLm00CTIwMDYtMTEtMjcgMDk6MTQ6NTQuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2dldGRlbGltLm00CTIwMTEtMDMtMTYgMjM6NTI6MjIuODcxNjc0ODQ1IC0wNzAwCitAQCAtMTIsNyArMTIsNyBAQAorIFsKKyAKKyAgIGRubCBQZXJzdWFkZSBnbGliYyA8c3RkaW8uaD4gdG8gZGVjbGFyZSBnZXRkZWxpbSgpLgorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgCisgICBBQ19SRVBMQUNFX0ZVTkNTKGdldGRlbGltKQorICAgQUNfQ0hFQ0tfREVDTFNfT05DRShnZXRkZWxpbSkKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2dldGxpbmUubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2dldGxpbmUubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nZXRsaW5lLm00CTIwMDYtMTEtMjcgMDk6MTQ6NTQuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2dldGxpbmUubTQJMjAxMS0wMy0xNiAyMzo1MTo0OS44Mjk5NzExMDggLTA3MDAKK0BAIC0xNiw3ICsxNiw3IEBACisgQUNfREVGVU4oW2dsX0ZVTkNfR0VUTElORV0sCisgWworICAgZG5sIFBlcnN1YWRlIGdsaWJjIDxzdGRpby5oPiB0byBkZWNsYXJlIGdldGxpbmUoKS4KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorIAorICAgQUNfQ0hFQ0tfREVDTFMoW2dldGxpbmVdKQorIAorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ251bGliLWNvbXAubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2dudWxpYi1jb21wLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ251bGliLWNvbXAubTQJMjAwNi0xMS0yNyAwOTozMzozNi4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ251bGliLWNvbXAubTQJMjAxMS0wMy0xNiAyMzo1MjoxOC45NzA0NTA0ODggLTA3MDAKK0BAIC0yNSw3ICsyNSw3IEBACisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTElCT0JKUyRdKWRubCBhIHZhcmlhYmxlCisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTFRMSUJPQkpTJF0pZG5sIGEgdmFyaWFibGUKKyAgIEFDX1JFUVVJUkUoW0FDX1BST0dfUkFOTElCXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorICAgQUNfUkVRVUlSRShbZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKyAgIEFDX1JFUVVJUkUoW2dsX0xPQ0tfRUFSTFldKQorIF0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9tYmNoYXIubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L21iY2hhci5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L21iY2hhci5tNAkyMDA2LTExLTI3IDA5OjE0OjU1LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9tYmNoYXIubTQJMjAxMS0wMy0xNiAyMzo1MTo0MC44NDQ0MTAyMTYgLTA3MDAKK0BAIC05LDcgKzksNyBAQAorIAorIEFDX0RFRlVOKFtnbF9NQkNIQVJdLAorIFsKKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorICAgZG5sIFRoZSBmb2xsb3dpbmcgbGluZSBpcyB0aGF0IHNvIHRoZSB1c2VyIGNhbiB0ZXN0IEhBVkVfV0NIQVJfSAorICAgZG5sIGJlZm9yZSAjaW5jbHVkZSAibWJjaGFyLmgiLgorICAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKFt3Y2hhci5oXSkKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L3N0cGNweS5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwY3B5Lm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwY3B5Lm00CTIwMDYtMTEtMjcgMDk6MTQ6NTUuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L3N0cGNweS5tNAkyMDExLTAzLTE2IDIzOjUyOjE0LjY5MTM5NjA0NSAtMDcwMAorQEAgLTcsNyArNyw3IEBACisgQUNfREVGVU4oW2dsX0ZVTkNfU1RQQ1BZXSwKKyBbCisgICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0cmluZy5oPiB0byBkZWNsYXJlIHN0cGNweSgpLgorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgCisgICBBQ19SRVBMQUNFX0ZVTkNTKHN0cGNweSkKKyAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc3RwY3B5ID0gbm87IHRoZW4KK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L3N0cG5jcHkubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L3N0cG5jcHkubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9zdHBuY3B5Lm00CTIwMDYtMTEtMjcgMDk6MTQ6NTUuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L3N0cG5jcHkubTQJMjAxMS0wMy0xNiAyMzo1MjoxMC4zNTY2NDE0NTkgLTA3MDAKK0BAIC03LDcgKzcsNyBAQAorIEFDX0RFRlVOKFtnbF9GVU5DX1NUUE5DUFldLAorIFsKKyAgIGRubCBQZXJzdWFkZSBnbGliYyA8c3RyaW5nLmg+IHRvIGRlY2xhcmUgc3RwbmNweSgpLgorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgCisgICBkbmwgQm90aCBnbGliYyBhbmQgQUlYICg0LjMuMywgNS4xKSBoYXZlIGFuIHN0cG5jcHkoKSBmdW5jdGlvbgorICAgZG5sIGRlY2xhcmVkIGluIDxzdHJpbmcuaD4uIEl0cyBzaWRlIGVmZmVjdHMgYXJlIHRoZSBzYW1lIGFzIHRob3NlCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC93Y3dpZHRoLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC93Y3dpZHRoLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvd2N3aWR0aC5tNAkyMDA2LTExLTI3IDA5OjE0OjU1LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC93Y3dpZHRoLm00CTIwMTEtMDMtMTYgMjM6NTE6MDguMjYwMzI0MjIxIC0wNzAwCitAQCAtNyw3ICs3LDcgQEAKKyBBQ19ERUZVTihbZ2xfRlVOQ19XQ1dJRFRIXSwKKyBbCisgICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHdjaGFyLmg+IHRvIGRlY2xhcmUgd2N3aWR0aCgpLgorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgCisgICBBQ19SRVFVSVJFKFtBQ19DX0lOTElORV0pCisgICBBQ19SRVFVSVJFKFtndF9UWVBFX1dDSEFSX1RdKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9saWJnZXR0ZXh0cG8vZ251bGliLW00L2dudWxpYi1jb21wLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2xpYmdldHRleHRwby9nbnVsaWItbTQvZ251bGliLWNvbXAubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2xpYmdldHRleHRwby9nbnVsaWItbTQvZ251bGliLWNvbXAubTQJMjAwNi0xMS0yNyAwOTozMzo0NS4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9saWJnZXR0ZXh0cG8vZ251bGliLW00L2dudWxpYi1jb21wLm00CTIwMTEtMDMtMTYgMjM6NTE6MDIuMDM2MDYxMzE3IC0wNzAwCitAQCAtMjUsNyArMjUsNyBAQAorICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0xJQk9CSlMkXSlkbmwgYSB2YXJpYWJsZQorICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0xUTElCT0JKUyRdKWRubCBhIHZhcmlhYmxlCisgICBBQ19SRVFVSVJFKFtBQ19QUk9HX1JBTkxJQl0pCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAgIEFDX1JFUVVJUkUoW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisgICBBQ19SRVFVSVJFKFtnbF9MT0NLX0VBUkxZXSkKKyBdKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9tNC9yZWdleC5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9tNC9yZWdleC5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvbTQvcmVnZXgubTQJMjAwNi0xMS0yNyAwOTowMjowNS4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9tNC9yZWdleC5tNAkyMDExLTAzLTE2IDIzOjUwOjUzLjUzMzQ3NzE5NSAtMDcwMAorQEAgLTExNiw3ICsxMTYsNyBAQAorICAgZG5sIHRvIGdldCB0aGVtLgorIAorICAgZG5sIFBlcnN1YWRlIGdsaWJjIDxzdHJpbmcuaD4gdG8gZGVjbGFyZSBtZW1wY3B5KCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEFDX1JFUVVJUkUoW0FDX0NfUkVTVFJJQ1RdKQorICAgQUNfUkVRVUlSRShbQUNfRlVOQ19BTExPQ0FdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2dldHRleHQtYXV0b2NvbmYtbGliLWxpbmstbm8tTC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LWF1dG9jb25mLWxpYi1saW5rLW5vLUwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcyZmU1ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LWF1dG9jb25mLWxpYi1saW5rLW5vLUwucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorCisjIFB1bGxlZCBmcm9tIE9wZW5FbWJlZGRlZAorIyAKKyMgQ29tbWVudGVkIGJ5OiBTYXVsIFdvbGQgPHNhdWwud29sZEBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCistLS0gZ2V0dGV4dC0wLjE3L2F1dG9jb25mLWxpYi1saW5rL200L2xpYi1saW5rLm00fgkyMDA5LTA0LTE3IDE1OjEyOjMwLjAwMDAwMDAwMCAtMDcwMAorKysrIGdldHRleHQtMC4xNy9hdXRvY29uZi1saWItbGluay9tNC9saWItbGluay5tNAkyMDA5LTA0LTE3IDE1OjM3OjM5LjAwMDAwMDAwMCAtMDcwMAorQEAgLTI2Nyw2ICsyNjcsOSBAQAorICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICBmaQorKyAgICAgICAgICBkbmwgSnVzdCBsZXQgdGhlIGNvbXBpbGVyIGZpbmQgdGhlIGxpYnJhcnksIHRoZSBjb21waWxlciBhbmQgdXNlciBhcmUgc21hcnRlciB0aGVuIHRoaXMgc2NyaXB0CisrICAgICAgICAgIGRubCB3aGVuIGNyb3NzIGNvbXBpbGluZyBhbmQgd29ya2luZyB3aXRoIGEgcmVsb2NhdGVkIGluc3RhbGwuCisrICAgICAgICAgIGZvdW5kX2Rpcj0iIgorICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJbXU5BTUU7IGRvCisgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2dldHRleHQtdnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC12cGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDllNDUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2dldHRleHQtdnBhdGgucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorCisjIFB1bGxlZCBmcm9tIE9wZW5FbWJlZGRlZAorIyAKKyMgQ29tbWVudGVkIGJ5OiBTYXVsIFdvbGQgPHNhdWwud29sZEBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL2ludGwvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2dldHRleHQtcnVudGltZS9pbnRsL01ha2VmaWxlLmluCTIwMDYtMTEtMjcgMDk6MDI6MDAuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL2ludGwvTWFrZWZpbGUuaW4JMjAxMS0wMy0xNiAxNjowNDo0OS4xNzU0MTk5MzAgLTA3MDAKK0BAIC0zNSw3ICszNSw3IEBACisgIyAgICAnbWFrZScgZG9lcyB0aGUgd3JvbmcgdGhpbmcgaWYgR05VIGdldHRleHQgd2FzIGNvbmZpZ3VyZWQgd2l0aAorICMgICAgIi4vY29uZmlndXJlIC0tc3JjZGlyPWBwd2RgIiwgbmFtZWx5IGl0IGdldHMgY29uZnVzZWQgYnkgdGhlIC5sbyBhbmQgLmxhCisgIyAgICBmaWxlcyBpdCBmaW5kcyBpbiBzcmNkaXIgPSAuLi8uLi9nZXR0ZXh0LXJ1bnRpbWUvaW50bC4KKy1WUEFUSCA9ICQoc3JjZGlyKQorKyNWUEFUSCA9ICQoc3JjZGlyKQorIAorIHByZWZpeCA9IEBwcmVmaXhACisgZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvaGFyZGNvZGVfbWFjcm9fdmVyc2lvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9oYXJkY29kZV9tYWNyb192ZXJzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYThkZDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvaGFyZGNvZGVfbWFjcm9fdmVyc2lvbi5wYXRjaApAQCAtMCwwICsxLDUxIEBACisKK1RoaXMgcGF0Y2ggaGFyZGNvZGVzIGluIHZlcnNpb24gMC4xNyBmb3IgdGhlIEdFVFRFWFRfTUFDUk9fVkVSU0lPTiwKK3RoZSB2ZXJzaW9uIGNoZWNrIGlzIG9ubHkgcGFydCBvZiAwLjE3IGFuZCB3aWxsIG5vdCBhZmZlY3QgYW55IDAuMTYuMQorb3BlcmF0aW9ucworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL200L3BvLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9nZXR0ZXh0LXJ1bnRpbWUvbTQvcG8ubTQJMjAxMS0wMy0xNyAwMjoyNDoyOC45NTM1MjAyMzEgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvbTQvcG8ubTQJMjAxMS0wMy0xNyAwMjoyODoyNS40NTUzOTY4NjIgLTA3MDAKK0BAIC0yNyw2ICsyNyw5IEBACisgICBBQ19SRVFVSVJFKFtBTV9QUk9HX01LRElSX1BdKWRubCBkZWZpbmVkIGJ5IGF1dG9tYWtlCisgICBBQ19SRVFVSVJFKFtBTV9OTFNdKWRubAorIAorKyAgZG5sIEhhcmRjb2RlIHRoZSBNQUNST19WRVJTSU9OIHRvIDAuMTcgZm9yIGdudXRscworKyAgQUNfU1VCU1QoW0dFVFRFWFRfTUFDUk9fVkVSU0lPTl0sIFswLjE3XSkKKysKKyAgIGRubCBQZXJmb3JtIHRoZSBmb2xsb3dpbmcgdGVzdHMgYWxzbyBpZiAtLWRpc2FibGUtbmxzIGhhcyBiZWVuIGdpdmVuLAorICAgZG5sIGJlY2F1c2UgdGhleSBhcmUgbmVlZGVkIGZvciAibWFrZSBkaXN0IiB0byB3b3JrLgorIAorSW5kZXg6IGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9wby9NYWtlZmlsZS5pbi5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvZ2V0dGV4dC1ydW50aW1lL3BvL01ha2VmaWxlLmluLmluCTIwMTEtMDMtMTcgMDI6MjQ6MjguOTUzNTIwMjMxIC0wNzAwCisrKysgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL3BvL01ha2VmaWxlLmluLmluCTIwMTEtMDMtMTcgMDI6Mjg6MDcuNTc0Mzk1MTQ0IC0wNzAwCitAQCAtMTAsNiArMTAsOSBAQAorICMKKyAjIE9yaWdpbjogZ2V0dGV4dC0wLjE2CisgCisrIyBIYXJkY29kZSB0aGlzIHZhbHVlIGZvciBnbnV0bHMgYnVpbGRpbmcgYWdhaW5zdCBncGx2MiBjb2RlCisrR0VUVEVYVF9NQUNST19WRVJTSU9OID0gMC4xNworKworIFBBQ0tBR0UgPSBAUEFDS0FHRUAKKyBWRVJTSU9OID0gQFZFUlNJT05ACisgUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitJbmRleDogZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9wby9NYWtlZmlsZS5pbi5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvZ2V0dGV4dC10b29scy9wby9NYWtlZmlsZS5pbi5pbgkyMDExLTAzLTE3IDAyOjI0OjI4Ljk1MzUyMDIzMSAtMDcwMAorKysrIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvcG8vTWFrZWZpbGUuaW4uaW4JMjAxMS0wMy0xNyAwMjoyODowNy41NzQzOTUxNDQgLTA3MDAKK0BAIC0xMCw2ICsxMCw5IEBACisgIworICMgT3JpZ2luOiBnZXR0ZXh0LTAuMTYKKyAKKysjIEhhcmRjb2RlIHRoaXMgdmFsdWUgZm9yIGdudXRscyBidWlsZGluZyBhZ2FpbnN0IGdwbHYyIGNvZGUKKytHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSAwLjE3CisrCisgUEFDS0FHRSA9IEBQQUNLQUdFQAorIFZFUlNJT04gPSBAVkVSU0lPTkAKKyBQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9saW5rbGliX2Zyb21fMC4xNy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9saW5rbGliX2Zyb21fMC4xNy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTIxMDY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2xpbmtsaWJfZnJvbV8wLjE3LnBhdGNoCkBAIC0wLDAgKzEsNzIwIEBACisKKyMgUHVsbGVkIGZyb20gT3BlbkVtYmVkZGVkCisjIAorIyBDb21tZW50ZWQgYnk6IFNhdWwgV29sZCA8c2F1bC53b2xkQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay9tNC9saWItbGluay5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvYXV0b2NvbmYtbGliLWxpbmsvbTQvbGliLWxpbmsubTQJMjAwNi0xMS0yNyAwOTowMTo1OC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay9tNC9saWItbGluay5tNAkyMDExLTAzLTE3IDAwOjM2OjA4LjcxMDgzNjcyMCAtMDcwMAorQEAgLTYsMTIgKzYsMTQgQEAKKyAKKyBkbmwgRnJvbSBCcnVubyBIYWlibGUuCisgCistQUNfUFJFUkVRKDIuNTApCisrQUNfUFJFUkVRKDIuNTQpCisgCisgZG5sIEFDX0xJQl9MSU5LRkxBR1MobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKKyBkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCisgZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfSBhbmQgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQKKyBkbmwgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLgorK2RubCBTZXRzIGFuZCBBQ19TVUJTVHMgdGhlIExJQiR7TkFNRX1fUFJFRklYIHZhcmlhYmxlIHRvIG5vbmVtcHR5IGlmIGxpYm5hbWUKKytkbmwgd2FzIGZvdW5kIGluICR7TElCJHtOQU1FfV9QUkVGSVh9LyRhY2xfbGliZGlyc3RlbS4KKyBBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU10sCisgWworICAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKK0BAIC0yNCwxMyArMjYsMTYgQEAKKyAgICAgYWNfY3ZfbGliW11OYW1lW11fbGlicz0iJExJQltdTkFNRSIKKyAgICAgYWNfY3ZfbGliW11OYW1lW11fbHRsaWJzPSIkTFRMSUJbXU5BTUUiCisgICAgIGFjX2N2X2xpYltdTmFtZVtdX2NwcGZsYWdzPSIkSU5DW11OQU1FIgorKyAgICBhY19jdl9saWJbXU5hbWVbXV9wcmVmaXg9IiRMSUJbXU5BTUVbXV9QUkVGSVgiCisgICBdKQorICAgTElCW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fbGlicyIKKyAgIExUTElCW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fbHRsaWJzIgorICAgSU5DW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fY3BwZmxhZ3MiCisrICBMSUJbXU5BTUVbXV9QUkVGSVg9IiRhY19jdl9saWJbXU5hbWVbXV9wcmVmaXgiCisgICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNdTkFNRSkKKyAgIEFDX1NVQlNUKFtMSUJdTkFNRSkKKyAgIEFDX1NVQlNUKFtMVExJQl1OQU1FKQorKyAgQUNfU1VCU1QoW0xJQl1OQU1FW19QUkVGSVhdKQorICAgZG5sIEFsc28gc2V0IEhBVkVfTElCW11OQU1FIHNvIHRoYXQgQUNfTElCX0hBVkVfTElOS0ZMQUdTIGNhbiByZXVzZSB0aGUKKyAgIGRubCByZXN1bHRzIG9mIHRoaXMgc2VhcmNoIHdoZW4gdGhpcyBsaWJyYXJ5IGFwcGVhcnMgYXMgYSBkZXBlbmRlbmN5LgorICAgSEFWRV9MSUJbXU5BTUU9eWVzCitAQCAtNDYsNiArNTEsOCBAQAorIGRubCBMVExJQiR7TkFNRX0gdmFyaWFibGVzIGFuZCBhdWdtZW50cyB0aGUgQ1BQRkxBR1MgdmFyaWFibGUsIGFuZAorIGRubCAjZGVmaW5lcyBIQVZFX0xJQiR7TkFNRX0gdG8gMS4gT3RoZXJ3aXNlLCBpdCBzZXRzIGFuZCBBQ19TVUJTVHMKKyBkbmwgSEFWRV9MSUIke05BTUV9PW5vIGFuZCBMSUIke05BTUV9IGFuZCBMVExJQiR7TkFNRX0gdG8gZW1wdHkuCisrZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfV9QUkVGSVggdmFyaWFibGUgdG8gbm9uZW1wdHkgaWYgbGlibmFtZQorK2RubCB3YXMgZm91bmQgaW4gJHtMSUIke05BTUV9X1BSRUZJWH0vJGFjbF9saWJkaXJzdGVtLgorIEFDX0RFRlVOKFtBQ19MSUJfSEFWRV9MSU5LRkxBR1NdLAorIFsKKyAgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCitAQCAtODIsMTcgKzg5LDI0IEBACisgICAgIENQUEZMQUdTPSIkYWNfc2F2ZV9DUFBGTEFHUyIKKyAgICAgTElCW11OQU1FPQorICAgICBMVExJQltdTkFNRT0KKysgICAgTElCW11OQU1FW11fUFJFRklYPQorKworICAgZmkKKyAgIEFDX1NVQlNUKFtIQVZFX0xJQl1OQU1FKQorICAgQUNfU1VCU1QoW0xJQl1OQU1FKQorICAgQUNfU1VCU1QoW0xUTElCXU5BTUUpCisrICBBQ19TVUJTVChbTElCXU5BTUVbX1BSRUZJWF0pCisgICB1bmRlZmluZShbTmFtZV0pCisgICB1bmRlZmluZShbTkFNRV0pCisgXSkKKyAKKyBkbmwgRGV0ZXJtaW5lIHRoZSBwbGF0Zm9ybSBkZXBlbmRlbnQgcGFyYW1ldGVycyBuZWVkZWQgdG8gdXNlIHJwYXRoOgorLWRubCBsaWJleHQsIHNobGliZXh0LCBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLAorLWRubCBoYXJkY29kZV9kaXJlY3QsIGhhcmRjb2RlX21pbnVzX0wuCisrZG5sICAgYWNsX2xpYmV4dCwKKytkbmwgICBhY2xfc2hsaWJleHQsCisrZG5sICAgYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsCisrZG5sICAgYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsCisrZG5sICAgYWNsX2hhcmRjb2RlX2RpcmVjdCwKKytkbmwgICBhY2xfaGFyZGNvZGVfbWludXNfTC4KKyBBQ19ERUZVTihbQUNfTElCX1JQQVRIXSwKKyBbCisgICBkbmwgVGVsbCBhdXRvbWFrZSA+PSAxLjEwIHRvIGNvbXBsYWluIGlmIGNvbmZpZy5ycGF0aCBpcyBtaXNzaW5nLgorQEAgLTEwOSwxMiArMTIzLDE0IEBACisgICAgIGFjbF9jdl9ycGF0aD1kb25lCisgICBdKQorICAgd2w9IiRhY2xfY3Zfd2wiCistICBsaWJleHQ9IiRhY2xfY3ZfbGliZXh0IgorLSAgc2hsaWJleHQ9IiRhY2xfY3Zfc2hsaWJleHQiCistICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCistICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCistICBoYXJkY29kZV9kaXJlY3Q9IiRhY2xfY3ZfaGFyZGNvZGVfZGlyZWN0IgorLSAgaGFyZGNvZGVfbWludXNfTD0iJGFjbF9jdl9oYXJkY29kZV9taW51c19MIgorKyAgYWNsX2xpYmV4dD0iJGFjbF9jdl9saWJleHQiCisrICBhY2xfc2hsaWJleHQ9IiRhY2xfY3Zfc2hsaWJleHQiCisrICBhY2xfbGlibmFtZV9zcGVjPSIkYWNsX2N2X2xpYm5hbWVfc3BlYyIKKysgIGFjbF9saWJyYXJ5X25hbWVzX3NwZWM9IiRhY2xfY3ZfbGlicmFyeV9uYW1lc19zcGVjIgorKyAgYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKKysgIGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisrICBhY2xfaGFyZGNvZGVfZGlyZWN0PSIkYWNsX2N2X2hhcmRjb2RlX2RpcmVjdCIKKysgIGFjbF9oYXJkY29kZV9taW51c19MPSIkYWNsX2N2X2hhcmRjb2RlX21pbnVzX0wiCisgICBkbmwgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHVzZXIgd2FudHMgcnBhdGggaGFuZGxpbmcgYXQgYWxsLgorICAgQUNfQVJHX0VOQUJMRShycGF0aCwKKyAgICAgWyAgLS1kaXNhYmxlLXJwYXRoICAgICAgICAgZG8gbm90IGhhcmRjb2RlIHJ1bnRpbWUgbGlicmFyeSBwYXRoc10sCitAQCAtMTI0LDIwICsxNDAsMjQgQEAKKyBkbmwgQUNfTElCX0xJTktGTEFHU19CT0RZKG5hbWUgWywgZGVwZW5kZW5jaWVzXSkgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kCisgZG5sIHRoZSBsaWJyYXJpZXMgY29ycmVzcG9uZGluZyB0byBleHBsaWNpdCBhbmQgaW1wbGljaXQgZGVwZW5kZW5jaWVzLgorIGRubCBTZXRzIHRoZSBMSUIke05BTUV9LCBMVExJQiR7TkFNRX0gYW5kIElOQyR7TkFNRX0gdmFyaWFibGVzLgorK2RubCBBbHNvLCBzZXRzIHRoZSBMSUIke05BTUV9X1BSRUZJWCB2YXJpYWJsZSB0byBub25lbXB0eSBpZiBsaWJuYW1lIHdhcyBmb3VuZAorK2RubCBpbiAke0xJQiR7TkFNRX1fUFJFRklYfS8kYWNsX2xpYmRpcnN0ZW0uCisgQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NfQk9EWV0sCisgWworICAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfTVVMVElMSUJdKQorICAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisrICBkbmwgQXV0b2NvbmYgPj0gMi42MSBzdXBwb3J0cyBkb3RzIGluIC0td2l0aCBvcHRpb25zLgorKyAgZGVmaW5lKFtOX0FfTV9FXSxbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW200X1BBQ0tBR0VfVkVSU0lPTl0pLFsyLjYxXSksWy0xXSxbdHJhbnNsaXQoWyQxXSxbLl0sW19dKV0sWyQxXSldKQorICAgZG5sIEJ5IGRlZmF1bHQsIGxvb2sgaW4gJGluY2x1ZGVkaXIgYW5kICRsaWJkaXIuCisgICB1c2VfYWRkaXRpb25hbD15ZXMKKyAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisgICBdKQorLSAgQUNfTElCX0FSR19XSVRIKFtsaWIkMS1wcmVmaXhdLAorLVsgIC0td2l0aC1saWIkMS1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliJDEgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKy0gIC0td2l0aG91dC1saWIkMS1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliJDEgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKKysgIEFDX0xJQl9BUkdfV0lUSChbbGliXU5fQV9NX0VbLXByZWZpeF0sCisrWyAgLS13aXRoLWxpYl1OX0FfTV9FWy1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliJDEgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKysgIC0td2l0aG91dC1saWJdTl9BX01fRVstcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYiQxIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcl0sCisgWworICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KKyAgICAgICB1c2VfYWRkaXRpb25hbD1ubworQEAgLTE1OCw2ICsxNzgsNyBAQAorICAgTElCW11OQU1FPQorICAgTFRMSUJbXU5BTUU9CisgICBJTkNbXU5BTUU9CisrICBMSUJbXU5BTUVbXV9QUkVGSVg9CisgICBycGF0aGRpcnM9CisgICBsdHJwYXRoZGlycz0KKyAgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0KK0BAIC0xOTcsMjcgKzIxOCw1MyBAQAorICAgICAgICAgICBmb3VuZF9sYT0KKyAgICAgICAgICAgZm91bmRfc289CisgICAgICAgICAgIGZvdW5kX2E9CisrICAgICAgICAgIGV2YWwgbGlibmFtZT1cIiRhY2xfbGlibmFtZV9zcGVjXCIgICAgIyB0eXBpY2FsbHk6IGxpYm5hbWU9bGliJG5hbWUKKysgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICBzaHJleHQ9Ii4kYWNsX3NobGliZXh0IiAgICAgICAgICAgICAjIHR5cGljYWxseTogc2hyZXh0PS5zbworKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgc2hyZXh0PQorKyAgICAgICAgICBmaQorICAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorLSAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYmV4dCIgXAorLSAgICAgICAgICAgICAgICYmIHsgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCIgXAorLSAgICAgICAgICAgICAgICAgICAgfHwgeyB0ZXN0ICIkc2hsaWJleHQiID0gZGxsIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmRsbC5hIjsgfTsgfTsgdGhlbgorLSAgICAgICAgICAgICAgZm91bmRfZGlyPSIkYWRkaXRpb25hbF9saWJkaXIiCistICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IjsgdGhlbgorLSAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCIKKysgICAgICAgICAgICBkaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICBkbmwgVGhlIHNhbWUgY29kZSBhcyBpbiB0aGUgbG9vcCBiZWxvdzoKKysgICAgICAgICAgICBkbmwgRmlyc3QgbG9vayBmb3IgYSBzaGFyZWQgbGlicmFyeS4KKysgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgorICAgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmRsbC5hIgorKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7IHRoZW4KKysgICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXAorKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICIkbGlibmFtZSRzaHJleHQiLio7IGRvIGVjaG8gIiRmIjsgZG9uZSBcCisrICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNocmV4dFxcXFwuLCwiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICB8IHNvcnQgLXQgJy4nIC1uIC1yIC1rMSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwKKysgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAxcSApIDI+L2Rldi9udWxsYAorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisrICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciIKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWNcIgorKyAgICAgICAgICAgICAgICAgIGZvciBmIGluICRsaWJyYXJ5X25hbWVzOyBkbworKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kZiI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiIKKysgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSI7IHRoZW4KKy0gICAgICAgICAgICAgICAgZm91bmRfbGE9IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSIKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGRubCBUaGVuIGxvb2sgZm9yIGEgc3RhdGljIGxpYnJhcnkuCisrICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisrICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiCisgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kbGliZXh0IjsgdGhlbgorLSAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKy0gICAgICAgICAgICAgICAgZm91bmRfYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRsaWJleHQiCistICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorLSAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS5sYSI7IHRoZW4KKysgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCisgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIGZpCisgICAgICAgICAgIGZpCitAQCAtMjI3LDI2ICsyNzQsNDQgQEAKKyAgICAgICAgICAgICAgIGNhc2UgIiR4IiBpbgorICAgICAgICAgICAgICAgICAtTCopCisgICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJHgiIHwgc2VkIC1lICdzL15YLUwvLydgCistICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGliZXh0IiBcCistICAgICAgICAgICAgICAgICAgICAgJiYgeyB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCIgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgeyB0ZXN0ICIkc2hsaWJleHQiID0gZGxsIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS5kbGwuYSI7IH07IH07IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKy0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJHNobGliZXh0IjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci9saWIkbmFtZS4kc2hsaWJleHQiCisrICAgICAgICAgICAgICAgICAgZG5sIEZpcnN0IGxvb2sgZm9yIGEgc2hhcmVkIGxpYnJhcnkuCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dCIKKyAgICAgICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvbGliJG5hbWUuZGxsLmEiCistICAgICAgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS5sYSI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgorKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGRubCBUaGVuIGxvb2sgZm9yIGEgc3RhdGljIGxpYnJhcnkuCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCistICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvbGliJG5hbWUuJGxpYmV4dCIKKy0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS5sYSI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci9saWIkbmFtZS5sYSIKKy0gICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSIKKyAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICA7OworQEAgLTI4MiwxMiArMzQ3LDEyIEBACisgICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZm91bmRfZGlyIgorICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICBkbmwgVGhlIGhhcmRjb2RpbmcgaW50byAkTElCTkFNRSBpcyBzeXN0ZW0gZGVwZW5kZW50LgorLSAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllczsgdGhlbgorKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2hhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICAgICBkbmwgVXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgIGRubCByZXN1bHRpbmcgYmluYXJ5LgorICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgIGRubCBVc2UgYW4gZXhwbGljaXQgb3B0aW9uIHRvIGhhcmRjb2RlIERJUiBpbnRvIHRoZSByZXN1bHRpbmcKKyAgICAgICAgICAgICAgICAgICAgIGRubCBiaW5hcnkuCisgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKK0BAIC0zMTgsMTMgKzM4MywxMyBAQAorICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgIGRubCBGSVhNRTogTm90IHN1cmUgd2hldGhlciB3ZSBzaG91bGQgdXNlCisgICAgICAgICAgICAgICAgICAgICAgIGRubCAiLUwkZm91bmRfZGlyIC1sJG5hbWUiIG9yICItTCRmb3VuZF9kaXIgJGZvdW5kX3NvIgorICAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgICAgICAgIGRubCBXZSBjYW5ub3QgdXNlICRoYXJkY29kZV9ydW5wYXRoX3ZhciBhbmQgTERfUlVOX1BBVEgKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFdlIGNhbm5vdCB1c2UgJGFjbF9oYXJkY29kZV9ydW5wYXRoX3ZhciBhbmQgTERfUlVOX1BBVEgKKyAgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUsIGJlY2F1c2UgdGhpcyBkb2Vzbid0IGZpdCBpbiBmbGFncyBwYXNzZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgIGRubCBjb21waWxlci4gU28gZ2l2ZSB1cC4gTm8gaGFyZGNvZGluZy4gVGhpcyBhZmZlY3RzIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgZG5sIHZlcnkgb2xkIHN5c3RlbXMuCitAQCAtNTEyLDE4ICs1NzcsMTggQEAKKyAgICAgZG9uZQorICAgZG9uZQorICAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorLSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKysgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorICAgICAgIGRubCBXZWlyZCBwbGF0Zm9ybTogb25seSB0aGUgbGFzdCAtcnBhdGggb3B0aW9uIGNvdW50cywgdGhlIHVzZXIgbXVzdAorICAgICAgIGRubCBwYXNzIGFsbCBwYXRoIGVsZW1lbnRzIGluIG9uZSBvcHRpb24uIFdlIGNhbiBhcnJhbmdlIHRoYXQgZm9yIGEKKyAgICAgICBkbmwgc2luZ2xlIGxpYnJhcnksIGJ1dCBub3Qgd2hlbiBtb3JlIHRoYW4gb25lICRMSUJOQU1FcyBhcmUgdXNlZC4KKyAgICAgICBhbGxkaXJzPQorICAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKy0gICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yfSRmb3VuZF9kaXIiCisrICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKKyAgICAgICBkb25lCistICAgICAgZG5sIE5vdGU6IGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgdXNlcyAkbGliZGlyIGFuZCAkd2wuCisrICAgICAgZG5sIE5vdGU6IGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIHVzZXMgJGxpYmRpciBhbmQgJHdsLgorICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgICBsaWJkaXI9IiRhbGxkaXJzIgorLSAgICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKyAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmbGFnIgorICAgICBlbHNlCitAQCAtNTMxLDcgKzU5Niw3IEBACisgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgICAgbGliZGlyPSIkZm91bmRfZGlyIgorLSAgICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKyAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisgICAgICAgZG9uZQorQEAgLTY0MiwzICs3MDcsNzkgQEAKKyAgIGZpCisgICBBQ19TVUJTVChbJDFdKQorIF0pCisrCisrZG5sIEZvciB0aG9zZSBjYXNlcyB3aGVyZSBhIHZhcmlhYmxlIGNvbnRhaW5zIHNldmVyYWwgLUwgYW5kIC1sIG9wdGlvbnMKKytkbmwgcmVmZXJyaW5nIHRvIHVua25vd24gbGlicmFyaWVzIGFuZCBkaXJlY3RvcmllcywgdGhpcyBtYWNybyBkZXRlcm1pbmVzIHRoZQorK2RubCBuZWNlc3NhcnkgYWRkaXRpb25hbCBsaW5rZXIgb3B0aW9ucyBmb3IgdGhlIHJ1bnRpbWUgcGF0aC4KKytkbmwgQUNfTElCX0xJTktGTEFHU19GUk9NX0xJQlMoW0xEQUREVkFSXSwgW0xJQlNWQUxVRV0sIFtVU0UtTElCVE9PTF0pCisrZG5sIHNldHMgTERBRERWQVIgdG8gbGlua2VyIG9wdGlvbnMgbmVlZGVkIHRvZ2V0aGVyIHdpdGggTElCU1ZBTFVFLgorK2RubCBJZiBVU0UtTElCVE9PTCBldmFsdWF0ZXMgdG8gbm9uLWVtcHR5LCBsaW5raW5nIHdpdGggbGlidG9vbCBpcyBhc3N1bWVkLAorK2RubCBvdGhlcndpc2UgbGlua2luZyB3aXRob3V0IGxpYnRvb2wgaXMgYXNzdW1lZC4KKytBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU19GUk9NX0xJQlNdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0pCisrICAkMT0KKysgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiICE9IG5vOyB0aGVuCisrICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCisrICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgZGlyZWN0b3JpZXMgaW50byB0aGUgcmVzdWx0aW5nCisrICAgICAgZG5sIGJpbmFyeS4KKysgICAgICBycGF0aGRpcnM9CisrICAgICAgbmV4dD0KKysgICAgICBmb3Igb3B0IGluICQyOyBkbworKyAgICAgICAgaWYgdGVzdCAtbiAiJG5leHQiOyB0aGVuCisrICAgICAgICAgIGRpcj0iJG5leHQiCisrICAgICAgICAgIGRubCBObyBuZWVkIHRvIGhhcmRjb2RlIHRoZSBzdGFuZGFyZCAvdXNyL2xpYi4KKysgICAgICAgICAgaWYgdGVzdCAiWCRkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisrICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRkaXIiCisrICAgICAgICAgIGZpCisrICAgICAgICAgIG5leHQ9CisrICAgICAgICBlbHNlCisrICAgICAgICAgIGNhc2UgJG9wdCBpbgorKyAgICAgICAgICAgIC1MKSBuZXh0PXllcyA7OworKyAgICAgICAgICAgIC1MKikgZGlyPWBlY2hvICJYJG9wdCIgfCBzZWQgLWUgJ3MsXlgtTCwsJ2AKKysgICAgICAgICAgICAgICAgIGRubCBObyBuZWVkIHRvIGhhcmRjb2RlIHRoZSBzdGFuZGFyZCAvdXNyL2xpYi4KKysgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKysgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICBuZXh0PSA7OworKyAgICAgICAgICAgICopIG5leHQ9IDs7CisrICAgICAgICAgIGVzYWMKKysgICAgICAgIGZpCisrICAgICAgZG9uZQorKyAgICAgIGlmIHRlc3QgIlgkcnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KKysgICAgICAgIGlmIHRlc3QgLW4gIiIkMyIiOyB0aGVuCisrICAgICAgICAgIGRubCBsaWJ0b29sIGlzIHVzZWQgZm9yIGxpbmtpbmcuIFVzZSAtUiBvcHRpb25zLgorKyAgICAgICAgICBmb3IgZGlyIGluICRycGF0aGRpcnM7IGRvCisrICAgICAgICAgICAgJDE9IiR7JDF9JHskMTorIH0tUiRkaXIiCisrICAgICAgICAgIGRvbmUKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgZG5sIFRoZSBsaW5rZXIgaXMgdXNlZCBmb3IgbGlua2luZyBkaXJlY3RseS4KKysgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorKyAgICAgICAgICAgIGRubCBXZWlyZCBwbGF0Zm9ybTogb25seSB0aGUgbGFzdCAtcnBhdGggb3B0aW9uIGNvdW50cywgdGhlIHVzZXIKKysgICAgICAgICAgICBkbmwgbXVzdCBwYXNzIGFsbCBwYXRoIGVsZW1lbnRzIGluIG9uZSBvcHRpb24uCisrICAgICAgICAgICAgYWxsZGlycz0KKysgICAgICAgICAgICBmb3IgZGlyIGluICRycGF0aGRpcnM7IGRvCisrICAgICAgICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGRpciIKKysgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorKyAgICAgICAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCisrICAgICAgICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisrICAgICAgICAgICAgJDE9IiRmbGFnIgorKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgZG5sIFRoZSAtcnBhdGggb3B0aW9ucyBhcmUgY3VtdWxhdGl2ZS4KKysgICAgICAgICAgICBmb3IgZGlyIGluICRycGF0aGRpcnM7IGRvCisrICAgICAgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisrICAgICAgICAgICAgICBsaWJkaXI9IiRkaXIiCisrICAgICAgICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgICAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorKyAgICAgICAgICAgICAgJDE9IiR7JDF9JHskMTorIH0kZmxhZyIKKysgICAgICAgICAgICBkb25lCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgIGZpCisrICBmaQorKyAgQUNfU1VCU1QoWyQxXSkKKytdKQorSW5kZXg6IGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL2NvbmZpZy5ycGF0aAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvYXV0b2NvbmYtbGliLWxpbmsvY29uZmlnLnJwYXRoCTIwMDYtMTEtMjcgMDk6MDE6NTguMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvY29uZmlnLnJwYXRoCTIwMTEtMDMtMTcgMDA6MzM6MjMuMzM2NTM5NDkwIC0wNzAwCitAQCAtMiw3ICsyLDcgQEAKKyAjIE91dHB1dCBhIHN5c3RlbSBkZXBlbmRlbnQgc2V0IG9mIHZhcmlhYmxlcywgZGVzY3JpYmluZyBob3cgdG8gc2V0IHRoZQorICMgcnVuIHRpbWUgc2VhcmNoIHBhdGggb2Ygc2hhcmVkIGxpYnJhcmllcyBpbiBhbiBleGVjdXRhYmxlLgorICMKKy0jICAgQ29weXJpZ2h0IDE5OTYtMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgQ29weXJpZ2h0IDE5OTYtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjICAgVGFrZW4gZnJvbSBHTlUgbGlidG9vbCwgMjAwMQorICMgICBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorICMKK0BAIC00Nyw2ICs0NywxOCBAQAorIGRvbmUKKyBjY19iYXNlbmFtZT1gZWNobyAiJGNjX3RlbXAiIHwgc2VkIC1lICdzJV4uKi8lJSdgCisgCisrIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9DQ19CQVNFTkFNRS4KKysKKytmb3IgY2NfdGVtcCBpbiAkQ0MiIjsgZG8KKysgIGNhc2UgJGNjX3RlbXAgaW4KKysgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OworKyAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OworKyAgICBcLSopIDs7CisrICAgICopIGJyZWFrOzsKKysgIGVzYWMKKytkb25lCisrY2NfYmFzZW5hbWU9YGVjaG8gIiRjY190ZW1wIiB8IHNlZCAtZSAncyVeLiovJSUnYAorKworICMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDLgorIAorIHdsPQorQEAgLTY0LDcgKzc2LDE0IEBACisgICAgICAgICAgIDs7CisgICAgICAgZXNhYworICAgICAgIDs7CistICAgIG1pbmd3KiB8IHB3MzIqIHwgb3MyKikKKysgICAgZGFyd2luKikKKysgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgICAgeGxjKikKKysgICAgICAgICAgd2w9Jy1XbCwnCisrICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICAgIDs7CisrICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCisgICAgICAgOzsKKyAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgICAgd2w9Jy1XbCwnCitAQCAtNzQsNyArOTMsNyBAQAorICAgICAgIDs7CisgICAgIG5ld3NvczYpCisgICAgICAgOzsKKy0gICAgbGludXgqKQorKyAgICBsaW51eCogfCBrKmJzZCotZ251KQorICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICBpY2MqIHwgZWNjKikKKyAgICAgICAgICAgd2w9Jy1XbCwnCitAQCAtMTAwLDcgKzExOSw3IEBACisgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICB3bD0nLVdsLCcKKyAgICAgICA7OworLSAgICBzY28zLjJ2NSopCisrICAgIHJkb3MqKQorICAgICAgIDs7CisgICAgIHNvbGFyaXMqKQorICAgICAgIHdsPSctV2wsJworQEAgLTEwOCwxMSArMTI3LDE0IEBACisgICAgIHN1bm9zNCopCisgICAgICAgd2w9Jy1Rb3B0aW9uIGxkICcKKyAgICAgICA7OworLSAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisrICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgICB3bD0nLVdsLCcKKyAgICAgICA7OworICAgICBzeXN2NCpNUCopCisgICAgICAgOzsKKysgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKysgICAgICB3bD0nLVdsLCcKKysgICAgICA7OworICAgICB1bmljb3MqKQorICAgICAgIHdsPSctV2wsJworICAgICAgIDs7CitAQCAtMTQxLDYgKzE2MywxMCBAQAorICAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorICAgICB3aXRoX2dudV9sZD15ZXMKKyAgICAgOzsKKysgIGludGVyaXgqKQorKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorKyAgICB3aXRoX2dudV9sZD15ZXMKKysgICAgOzsKKyAgIG9wZW5ic2QqKQorICAgICB3aXRoX2dudV9sZD1ubworICAgICA7OworQEAgLTE4OSwxMSArMjE1LDExIEBACisgICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorICAgICAgIDs7CistICAgIGludGVyaXgzKikKKysgICAgaW50ZXJpeFszLTldKikKKyAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgIDs7CistICAgIGxpbnV4KikKKysgICAgZ251KiB8IGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICA6CisgICAgICAgZWxzZQorQEAgLTI4MCw3ICszMDYsNyBAQAorICAgICAgICAgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKyAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorLSAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICAgICAgICA6CisgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisgICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCitAQCAtMzU5LDcgKzM4NSw3IEBACisgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgOzsKKy0gICAgZnJlZWJzZCogfCBrZnJlZWJzZCotZ251IHwgZHJhZ29uZmx5KikKKysgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgOzsKK0BAIC00MTIsMTggKzQzOCwyMiBAQAorICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgIDs7CisgICAgIG9wZW5ic2QqKQorLSAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKy0gICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKy0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisrICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKysgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworKyAgICAgICAgZWxzZQorKyAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKysgICAgICAgICAgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQorKyAgICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworKyAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAqKQorKyAgICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKysgICAgICAgICAgICAgIDs7CisrICAgICAgICAgIGVzYWMKKysgICAgICAgIGZpCisgICAgICAgZWxzZQorLSAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCistICAgICAgICAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCistICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworLSAgICAgICAgICAgIDs7CistICAgICAgICAgICopCistICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKy0gICAgICAgICAgICA7OworLSAgICAgICAgZXNhYworKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICAgZmkKKyAgICAgICA7OworICAgICBvczIqKQorQEAgLTQ3MSw3ICs1MDEsNyBAQAorICAgICAgICAgbGRfc2hsaWJzPXllcworICAgICAgIGZpCisgICAgICAgOzsKKy0gICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyopCisrICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHxzY28zLjJ2NS4wLlswMjRdKikKKyAgICAgICA7OworICAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJworQEAgLTQ4OCwzMyArNTE4LDUxIEBACisgCisgIyBDaGVjayBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MKKyAjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIuCisrIyBVbmxpa2UgbGlidG9vbC5tNCwgaGVyZSB3ZSBkb24ndCBjYXJlIGFib3V0IF9hbGxfIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LCBidXQKKysjIG9ubHkgYWJvdXQgdGhlIG9uZSB0aGUgbGlua2VyIGZpbmRzIHdoZW4gcGFzc2VkIC1sTkFNRS4gVGhpcyBpcyB0aGUgbGFzdAorKyMgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNCwgb3IgcG9zc2libHkgdHdvIG9mIHRoZW0gaWYgdGhlCisrIyBsaW5rZXIgaGFzIHNwZWNpYWwgc2VhcmNoIHJ1bGVzLgorK2xpYnJhcnlfbmFtZXNfc3BlYz0gICAgICAjIHRoZSBsYXN0IGVsZW1lbnQgb2YgbGlicmFyeV9uYW1lc19zcGVjIGluIGxpYnRvb2wubTQKKyBsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworIGNhc2UgIiRob3N0X29zIiBpbgorICAgYWl4MyopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuYScKKyAgICAgOzsKKyAgIGFpeDQqIHwgYWl4NSopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgYW1pZ2FvcyopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuYScKKyAgICAgOzsKKyAgIGJlb3MqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIGJzZGlbNDVdKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgIHNocmV4dD0uZGxsCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEgJGxpYm5hbWUubGliJworICAgICA7OworICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgc2hyZXh0PS5keWxpYgorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIGRndXgqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIGZyZWVic2QxKikKKyAgICAgOzsKKy0gIGtmcmVlYnNkKi1nbnUpCistICAgIDs7CisgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisrICAgIGNhc2UgIiRob3N0X29zIiBpbgorKyAgICAgIGZyZWVic2RbMTIzXSopCisrICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnIDs7CisrICAgICAgKikKKysgICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JyA7OworKyAgICBlc2FjCisgICAgIDs7CisgICBnbnUqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICBjYXNlICRob3N0X2NwdSBpbgorQEAgLTUyOCwxMCArNTc2LDEzIEBACisgICAgICAgICBzaHJleHQ9LnNsCisgICAgICAgICA7OworICAgICBlc2FjCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworLSAgaW50ZXJpeDMqKQorKyAgaW50ZXJpeFszLTldKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KK0BAIC01NDgsMzMgKzU5OSw0NiBAQAorICAgICA7OworICAgbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgICAgOzsKKy0gIGxpbnV4KikKKysgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAga25ldGJzZCotZ251KQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIG5ldGJzZCopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgbmV3c29zNikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBudG8tcW54KikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBvcGVuYnNkKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JworICAgICA7OworICAgb3MyKikKKyAgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgICAgc2hyZXh0PS5kbGwKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgICA7OworICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIHNvbGFyaXMqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIHN1bm9zNCopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKKyAgICAgOzsKKyAgIHN5c3Y0IHwgc3lzdjQuMyopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgc3lzdjQqTVAqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIHV0czQqKQorICAgICA7OworQEAgLTU4Myw2ICs2NDcsOCBAQAorIHNlZF9xdW90ZV9zdWJzdD0ncy9cKFsiYCRcXF1cKS9cXFwxL2cnCisgZXNjYXBlZF93bD1gZWNobyAiWCR3bCIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorIHNobGliZXh0PWBlY2hvICIkc2hyZXh0IiB8IHNlZCAtZSAncyxeXC4sLCdgCisrZXNjYXBlZF9saWJuYW1lX3NwZWM9YGVjaG8gIlgkbGlibmFtZV9zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrZXNjYXBlZF9saWJyYXJ5X25hbWVzX3NwZWM9YGVjaG8gIlgkbGlicmFyeV9uYW1lc19zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPWBlY2hvICJYJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAKKyBMQ19BTEw9QyBzZWQgLWUgJ3MvXlwoW2EtekEtWjAtOV9dKlwpPS9hY2xfY3ZfXDE9LycgPDxFT0YKK0BAIC01OTYsNiArNjYyLDEyIEBACisgIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJzbyIpLgorIHNobGliZXh0PSIkc2hsaWJleHQiCisgCisrIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KKytsaWJuYW1lX3NwZWM9IiRlc2NhcGVkX2xpYm5hbWVfc3BlYyIKKysKKysjIExpYnJhcnkgbmFtZXMgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdoZW4gcGFzc2VkIC1sTkFNRS4KKytsaWJyYXJ5X25hbWVzX3NwZWM9IiRlc2NhcGVkX2xpYnJhcnlfbmFtZXNfc3BlYyIKKysKKyAjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyAjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGVzY2FwZWRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTkuNC9wYXJhbGxlbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTkuNC9wYXJhbGxlbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGUyYzk0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xOS40L3BhcmFsbGVsLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK2luc3RhbCBsaWJnZXR0ZXh0bGliLmEgYmVmb3JlIHJlbW92aW5nIGl0CisKK0luIGEgbXVsdGlwbGUgam9iIGJ1aWxkLCBNYWtlZmlsZSBjYW4gc2ltdWx0YW5lb3VzbHkKK2JlIGluc3RhbGxpbmcgYW5kIHJlbW92aW5nIGxpYmdldHRleHRsaWIuYS4gIFdlIHNlcmlhbGl6ZQordGhlIG9wZXJhdGlvbnMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKb2UgU2xhdGVyIDxqc2xhdGVyQHdpbmRyaXZlci5jb20+CisKKy0tLSBhL2dldHRleHQtdG9vbHMvZ251bGliLWxpYi9NYWtlZmlsZS5hbQorKysrIGIvZ2V0dGV4dC10b29scy9nbnVsaWItbGliL01ha2VmaWxlLmFtCitAQCAtNTcsNiArNTcsMTAgQEAgZW5kaWYKKyAjIFJ1bGVzIGdlbmVyYXRlZCBhbmQgY29sbGVjdGVkIGJ5IGdudWxpYi10b29sLgorIGluY2x1ZGUgTWFrZWZpbGUuZ251bGliCisgCisrIyBkZWZpbmVkIGluIE1ha2VmaWxlLmdudWxpYiBidXQgbWlzc2luZyB0aGlzIGRlcGVuZGVuY3kKKysjCisraW5zdGFsbC1leGVjLWNsZWFuOiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTCisrCisgIyBXaGljaCBjbGFzc2VzIHRvIGV4cG9ydCBmcm9tIHRoZSBzaGFyZWQgbGlicmFyeS4KKyBNT09QUEZMQUdTICs9IC0tZGxsZXhwb3J0PXN0eWxlZF9vc3RyZWFtCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC8wMDAxLVBBVENILURpc2FibGUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC8wMDAxLVBBVENILURpc2FibGUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjllZjJhNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40LzAwMDEtUEFUQ0gtRGlzYWJsZS10aGUtdGVzdC10by1jb252ZXJ0LWV1Yy1qcC5wYXRjaApAQCAtMCwwICsxLDM4IEBACitbUEFUQ0hdIERpc2FibGUgdGhlIHRlc3QgdG8gY29udmVydCBldWMtanAKKworUmVtb3ZlIHRoZSB0ZXN0ICJUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOgorTm8gY29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzIHByb3ZpZGVkIgorc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBIUC1VWCBhbmQgaWYgdGhlIGV1Yy1qcCBpcyBub3QKK2luc3RhbGxlZCBvbiB0aGUgaG9zdCwgdGhlIGRlcGVuZGVuY2Ugd2lsbCBiZSBidWlsdCB3aXRob3V0CitpY29udiBzdXBwb3J0IGFuZCB3aWxsIGNhdXNlIGd1aWxlLW5hdGl2ZSBidWlsZGluZyBmYWlsLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBpY29udi5tNCB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9pY29udi5tNCBiL2ljb252Lm00CitpbmRleCA0ZTM3MzYzLi4zNWY1NGJkIDEwMDY0NAorLS0tIGEvaWNvbnYubTQKKysrKyBiL2ljb252Lm00CitAQCAtMTY1LDYgKzE2NSw3IEBAIEFDX0RFRlVOKFtBTV9JQ09OVl9MSU5LXSwKKyAgICAgICB9CisgICB9CisgI2VuZGlmCisrI2lmIDAKKyAgIC8qIFRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6IE5vIGNvbnZlcnRlciBmcm9tIEVVQy1KUCB0byBVVEYtOCBpcworICAgICAgcHJvdmlkZWQuICAqLworICAgaWYgKC8qIFRyeSBzdGFuZGFyZGl6ZWQgbmFtZXMuICAqLworQEAgLTE3Niw2ICsxNzcsNyBAQCBBQ19ERUZVTihbQU1fSUNPTlZfTElOS10sCisgICAgICAgLyogVHJ5IEhQLVVYIG5hbWVzLiAgKi8KKyAgICAgICAmJiBpY29udl9vcGVuICgidXRmOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkpCisgICAgIHJlc3VsdCB8PSAxNjsKKysjZW5kaWYKKyAgIHJldHVybiByZXN1bHQ7CisgXV0pXSwKKyAgICAgICAgICAgW2FtX2N2X2Z1bmNfaWNvbnZfd29ya3M9eWVzXSwgLAorLS0gCisyLjAuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9DT1BZSU5HIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDExZDFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvQ09QWUlORwpAQCAtMCwwICsxLDQgQEAKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvTWFrZWZpbGUuaW4uaW4gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9NYWtlZmlsZS5pbi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTA2YmEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvTWFrZWZpbGUuaW4uaW4KQEAgLTAsMCArMSw0NjUgQEAKKyMgTWFrZWZpbGUgZm9yIFBPIGRpcmVjdG9yeSBpbiBhbnkgcGFja2FnZSB1c2luZyBHTlUgZ2V0dGV4dC4KKyMgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIDIwMDAtMjAwNywgMjAwOS0yMDEwIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PgorIworIyBUaGlzIGZpbGUgY2FuIGJlIGNvcGllZCBhbmQgdXNlZCBmcmVlbHkgd2l0aG91dCByZXN0cmljdGlvbnMuICBJdCBjYW4KKyMgYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKyMgZnVuY3Rpb25hbGl0eS4KKyMgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgR05VIGdldHRleHQgaXMgY292ZXJlZCBieSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIGlzICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorIworIyBPcmlnaW46IGdldHRleHQtMC4xOQorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gMC4xOQorCitQQUNLQUdFID0gQFBBQ0tBR0VACitWRVJTSU9OID0gQFZFUlNJT05ACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKKworU0VEID0gQFNFREAKK1NIRUxMID0gL2Jpbi9zaAorQFNFVF9NQUtFQAorCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAorCitwcmVmaXggPSBAcHJlZml4QAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitnZXR0ZXh0c3JjZGlyID0gJChkYXRhZGlyKS9nZXR0ZXh0L3BvCisKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACisKK01LRElSX1AgPSBATUtESVJfUEAKKworR01TR0ZNVF8gPSBAR01TR0ZNVEAKK0dNU0dGTVRfbm8gPSBAR01TR0ZNVEAKK0dNU0dGTVRfeWVzID0gQEdNU0dGTVRfMDE1QAorR01TR0ZNVCA9ICQoR01TR0ZNVF8kKFVTRV9NU0dDVFhUKSkKK01TR0ZNVF8gPSBATVNHRk1UQAorTVNHRk1UX25vID0gQE1TR0ZNVEAKK01TR0ZNVF95ZXMgPSBATVNHRk1UXzAxNUAKK01TR0ZNVCA9ICQoTVNHRk1UXyQoVVNFX01TR0NUWFQpKQorWEdFVFRFWFRfID0gQFhHRVRURVhUQAorWEdFVFRFWFRfbm8gPSBAWEdFVFRFWFRACitYR0VUVEVYVF95ZXMgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFQgPSAkKFhHRVRURVhUXyQoVVNFX01TR0NUWFQpKQorTVNHTUVSR0UgPSBtc2dtZXJnZQorTVNHTUVSR0VfVVBEQVRFID0gQE1TR01FUkdFQCAtLXVwZGF0ZQorTVNHSU5JVCA9IG1zZ2luaXQKK01TR0NPTlYgPSBtc2djb252CitNU0dGSUxURVIgPSBtc2dmaWx0ZXIKKworUE9GSUxFUyA9IEBQT0ZJTEVTQAorR01PRklMRVMgPSBAR01PRklMRVNACitVUERBVEVQT0ZJTEVTID0gQFVQREFURVBPRklMRVNACitEVU1NWVBPRklMRVMgPSBARFVNTVlQT0ZJTEVTQAorRElTVEZJTEVTLmNvbW1vbiA9IE1ha2VmaWxlLmluLmluIHJlbW92ZS1wb3RjZGF0ZS5zaW4gXAorJChESVNURklMRVMuY29tbW9uLmV4dHJhMSkgJChESVNURklMRVMuY29tbW9uLmV4dHJhMikgJChESVNURklMRVMuY29tbW9uLmV4dHJhMykKK0RJU1RGSUxFUyA9ICQoRElTVEZJTEVTLmNvbW1vbikgTWFrZXZhcnMgUE9URklMRVMuaW4gXAorJChQT0ZJTEVTKSAkKEdNT0ZJTEVTKSBcCiskKERJU1RGSUxFUy5leHRyYTEpICQoRElTVEZJTEVTLmV4dHJhMikgJChESVNURklMRVMuZXh0cmEzKQorCitQT1RGSUxFUyA9IFwKKworQ0FUQUxPR1MgPSBAQ0FUQUxPR1NACisKK1BPRklMRVNERVBTXyA9ICQoc3JjZGlyKS8kKERPTUFJTikucG90CitQT0ZJTEVTREVQU195ZXMgPSAkKFBPRklMRVNERVBTXykKK1BPRklMRVNERVBTX25vID0KK1BPRklMRVNERVBTID0gJChQT0ZJTEVTREVQU18kKFBPX0RFUEVORFNfT05fUE9UKSkKKworRElTVEZJTEVTREVQU18gPSB1cGRhdGUtcG8KK0RJU1RGSUxFU0RFUFNfeWVzID0gJChESVNURklMRVNERVBTXykKK0RJU1RGSUxFU0RFUFNfbm8gPQorRElTVEZJTEVTREVQUyA9ICQoRElTVEZJTEVTREVQU18kKERJU1RfREVQRU5EU19PTl9VUERBVEVfUE8pKQorCisjIE1ha2V2YXJzIGdldHMgaW5zZXJ0ZWQgaGVyZS4gKERvbid0IHJlbW92ZSB0aGlzIGxpbmUhKQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5wbyAuZ21vIC5tbyAuc2VkIC5zaW4gLm5vcCAucG8tY3JlYXRlIC5wby11cGRhdGUKKworLnBvLm1vOgorCUBlY2hvICIkKE1TR0ZNVCkgLWMgLW8gJEAgJDwiOyBcCisJJChNU0dGTVQpIC1jIC1vIHQtJEAgJDwgJiYgbXYgdC0kQCAkQAorCisucG8uZ21vOgorCUBsYW5nPWBlY2hvICQqIHwgc2VkIC1lICdzLC4qLywsJ2A7IFwKKwl0ZXN0ICIkKHNyY2RpcikiID0gLiAmJiBjZGNtZD0iIiB8fCBjZGNtZD0iY2QgJChzcmNkaXIpICYmICI7IFwKKwllY2hvICIkJHtjZGNtZH1ybSAtZiAkJHtsYW5nfS5nbW8gJiYgJChHTVNHRk1UKSAtYyAtLXN0YXRpc3RpY3MgLS12ZXJib3NlIC1vICQke2xhbmd9LmdtbyAkJHtsYW5nfS5wbyI7IFwKKwljZCAkKHNyY2RpcikgJiYgcm0gLWYgJCR7bGFuZ30uZ21vICYmICQoR01TR0ZNVCkgLWMgLS1zdGF0aXN0aWNzIC0tdmVyYm9zZSAtbyB0LSQke2xhbmd9LmdtbyAkJHtsYW5nfS5wbyAmJiBtdiB0LSQke2xhbmd9LmdtbyAkJHtsYW5nfS5nbW8KKworLnNpbi5zZWQ6CisJc2VkIC1lICcvXiMvZCcgJDwgPiB0LSRACisJbXYgdC0kQCAkQAorCisKK2FsbDogYWxsLUBVU0VfTkxTQAorCithbGwteWVzOiBzdGFtcC1wbworYWxsLW5vOgorCisjIEVuc3VyZSB0aGF0IHRoZSBnZXR0ZXh0IG1hY3JvcyBhbmQgdGhpcyBNYWtlZmlsZS5pbi5pbiBhcmUgaW4gc3luYy4KK0NIRUNLX01BQ1JPX1ZFUlNJT04gPSBcCisJdGVzdCAiJChHRVRURVhUX01BQ1JPX1ZFUlNJT04pIiA9ICJAR0VUVEVYVF9NQUNST19WRVJTSU9OQCIgXAorCSAgfHwgeyBlY2hvICIqKiogZXJyb3I6IGdldHRleHQgaW5mcmFzdHJ1Y3R1cmUgbWlzbWF0Y2g6IHVzaW5nIGEgTWFrZWZpbGUuaW4uaW4gZnJvbSBnZXR0ZXh0IHZlcnNpb24gJChHRVRURVhUX01BQ1JPX1ZFUlNJT04pIGJ1dCB0aGUgYXV0b2NvbmYgbWFjcm9zIGFyZSBmcm9tIGdldHRleHQgdmVyc2lvbiBAR0VUVEVYVF9NQUNST19WRVJTSU9OQCIgMT4mMjsgXAorCSAgICAgICBleGl0IDE7IFwKKwkgICAgIH0KKworIyAkKHNyY2RpcikvJChET01BSU4pLnBvdCBpcyBvbmx5IGNyZWF0ZWQgd2hlbiBuZWVkZWQuIFdoZW4geGdldHRleHQgZmluZHMgbm8KKyMgaW50ZXJuYXRpb25hbGl6ZWQgbWVzc2FnZXMsIG5vICQoc3JjZGlyKS8kKERPTUFJTikucG90IGlzIGNyZWF0ZWQgKGJlY2F1c2UKKyMgd2UgZG9uJ3Qgd2FudCB0byBib3RoZXIgdHJhbnNsYXRvcnMgd2l0aCBlbXB0eSBQT1QgZmlsZXMpLiBXZSBhc3N1bWUgdGhhdAorIyBMSU5HVUFTIGlzIGVtcHR5IGluIHRoaXMgY2FzZSwgaS5lLiAkKFBPRklMRVMpIGFuZCAkKEdNT0ZJTEVTKSBhcmUgZW1wdHkuCisjIEluIHRoaXMgY2FzZSwgc3RhbXAtcG8gaXMgYSBub3AgKGkuZS4gYSBwaG9ueSB0YXJnZXQpLgorCisjIHN0YW1wLXBvIGlzIGEgdGltZXN0YW1wIGRlbm90aW5nIHRoZSBsYXN0IHRpbWUgYXQgd2hpY2ggdGhlIENBVEFMT0dTIGhhdmUKKyMgYmVlbiBsb29zZWx5IHVwZGF0ZWQuIEl0cyBwdXJwb3NlIGlzIHRoYXQgd2hlbiBhIGRldmVsb3BlciBvciB0cmFuc2xhdG9yCisjIGNoZWNrcyBvdXQgdGhlIHBhY2thZ2UgdmlhIENWUywgYW5kIHRoZSAkKERPTUFJTikucG90IGZpbGUgaXMgbm90IGluIENWUywKKyMgIm1ha2UiIHdpbGwgdXBkYXRlIHRoZSAkKERPTUFJTikucG90IGFuZCB0aGUgJChDQVRBTE9HUyksIGJ1dCBzdWJzZXF1ZW50CisjIGludm9jYXRpb25zIG9mICJtYWtlIiB3aWxsIGRvIG5vdGhpbmcuIFRoaXMgdGltZXN0YW1wIHdvdWxkIG5vdCBiZSBuZWNlc3NhcnkKKyMgaWYgdXBkYXRpbmcgdGhlICQoQ0FUQUxPR1MpIHdvdWxkIGFsd2F5cyB0b3VjaCB0aGVtOyBob3dldmVyLCB0aGUgcnVsZSBmb3IKKyMgJChQT0ZJTEVTKSBoYXMgYmVlbiBkZXNpZ25lZCB0byBub3QgdG91Y2ggZmlsZXMgdGhhdCBkb24ndCBuZWVkIHRvIGJlCisjIGNoYW5nZWQuCitzdGFtcC1wbzogJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QKKwlAJChDSEVDS19NQUNST19WRVJTSU9OKQorCXRlc3QgISAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdCB8fCBcCisJICB0ZXN0IC16ICIkKEdNT0ZJTEVTKSIgfHwgJChNQUtFKSAkKEdNT0ZJTEVTKQorCUB0ZXN0ICEgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgfHwgeyBcCisJICBlY2hvICJ0b3VjaCBzdGFtcC1wbyIgJiYgXAorCSAgZWNobyB0aW1lc3RhbXAgPiBzdGFtcC1wb1QgJiYgXAorCSAgbXYgc3RhbXAtcG9UIHN0YW1wLXBvOyBcCisJfQorCisjIE5vdGU6IFRhcmdldCAnYWxsJyBtdXN0IG5vdCBkZXBlbmQgb24gdGFyZ2V0ICckKERPTUFJTikucG90LXVwZGF0ZScsCisjIG90aGVyd2lzZSBwYWNrYWdlcyBsaWtlIEdDQyBjYW4gbm90IGJlIGJ1aWx0IGlmIG9ubHkgcGFydHMgb2YgdGhlIHNvdXJjZQorIyBoYXZlIGJlZW4gZG93bmxvYWRlZC4KKworIyBUaGlzIHRhcmdldCByZWJ1aWxkcyAkKERPTUFJTikucG90OyBpdCBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uLgorIyBOb3RlIHRoYXQgJChET01BSU4pLnBvdCBpcyBub3QgdG91Y2hlZCBpZiBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgY2hhbmdlZC4KKyMgVGhlIGRldGVybWluYXRpb24gb2Ygd2hldGhlciB0aGUgcGFja2FnZSB4eXogaXMgYSBHTlUgb25lIGlzIGJhc2VkIG9uIHRoZQorIyBoZXVyaXN0aWMgd2hldGhlciBzb21lIGZpbGUgaW4gdGhlIHRvcCBsZXZlbCBkaXJlY3RvcnkgbWVudGlvbnMgIkdOVSB4eXoiLgorIyBJZiBHTlUgJ2ZpbmQnIGlzIGF2YWlsYWJsZSwgd2UgYXZvaWQgZ3JlcHBpbmcgdGhyb3VnaCBtb25zdGVyIGZpbGVzLgorJChET01BSU4pLnBvdC11cGRhdGU6ICQoUE9URklMRVMpICQoc3JjZGlyKS9QT1RGSUxFUy5pbiByZW1vdmUtcG90Y2RhdGUuc2VkCisJcGFja2FnZV9nbnU9IiQoUEFDS0FHRV9HTlUpIjsgXAorCXRlc3QgLW4gIiQkcGFja2FnZV9nbnUiIHx8IHsgXAorCSAgaWYgeyBpZiAoTENfQUxMPUMgZmluZCAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwgZ3JlcCBHTlUgPi9kZXYvbnVsbDsgdGhlbiBcCisJCSBMQ19BTEw9QyBmaW5kIC1MICQodG9wX3NyY2RpcikgLW1heGRlcHRoIDEgLXR5cGUgZiBcCisJCQkgICAgICAgLXNpemUgLTEwMDAwMDAwYyAtZXhlYyBncmVwICdHTlUgQFBBQ0tBR0VAJyBcCisJCQkgICAgICAgL2Rldi9udWxsICd7fScgJzsnIDI+L2Rldi9udWxsOyBcCisJICAgICAgIGVsc2UgXAorCQkgTENfQUxMPUMgZ3JlcCAnR05VIEBQQUNLQUdFQCcgJCh0b3Bfc3JjZGlyKS8qIDI+L2Rldi9udWxsOyBcCisJICAgICAgIGZpOyBcCisJICAgICB9IHwgZ3JlcCAtdiAnbGlidG9vbDonID4vZGV2L251bGw7IHRoZW4gXAorCSAgICAgcGFja2FnZV9nbnU9eWVzOyBcCisJICAgZWxzZSBcCisJICAgICBwYWNrYWdlX2dudT1ubzsgXAorCSAgIGZpOyBcCisJfTsgXAorCWlmIHRlc3QgIiQkcGFja2FnZV9nbnUiID0gInllcyI7IHRoZW4gXAorCSAgcGFja2FnZV9wcmVmaXg9J0dOVSAnOyBcCisJZWxzZSBcCisJICBwYWNrYWdlX3ByZWZpeD0nJzsgXAorCWZpOyBcCisJaWYgdGVzdCAtbiAnJChNU0dJRF9CVUdTX0FERFJFU1MpJyB8fCB0ZXN0ICckKFBBQ0tBR0VfQlVHUkVQT1JUKScgPSAnQCdQQUNLQUdFX0JVR1JFUE9SVCdAJzsgdGhlbiBcCisJICBtc2dpZF9idWdzX2FkZHJlc3M9JyQoTVNHSURfQlVHU19BRERSRVNTKSc7IFwKKwllbHNlIFwKKwkgIG1zZ2lkX2J1Z3NfYWRkcmVzcz0nJChQQUNLQUdFX0JVR1JFUE9SVCknOyBcCisJZmk7IFwKKwljYXNlIGAkKFhHRVRURVhUKSAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluIFwKKwkgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTVdIHwgMC4xWzAtNV0uKiB8IDAuMTYgfCAwLjE2LlswLTFdKikgXAorCSAgICAkKFhHRVRURVhUKSAtLWRlZmF1bHQtZG9tYWluPSQoRE9NQUlOKSAtLWRpcmVjdG9yeT0kKHRvcF9zcmNkaXIpIFwKKwkgICAgICAtLWFkZC1jb21tZW50cz1UUkFOU0xBVE9SUzogJChYR0VUVEVYVF9PUFRJT05TKSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AgXAorCSAgICAgIC0tZmlsZXMtZnJvbT0kKHNyY2RpcikvUE9URklMRVMuaW4gXAorCSAgICAgIC0tY29weXJpZ2h0LWhvbGRlcj0nJChDT1BZUklHSFRfSE9MREVSKScgXAorCSAgICAgIC0tbXNnaWQtYnVncy1hZGRyZXNzPSIkJG1zZ2lkX2J1Z3NfYWRkcmVzcyIgXAorCSAgICA7OyBcCisJICAqKSBcCisJICAgICQoWEdFVFRFWFQpIC0tZGVmYXVsdC1kb21haW49JChET01BSU4pIC0tZGlyZWN0b3J5PSQodG9wX3NyY2RpcikgXAorCSAgICAgIC0tYWRkLWNvbW1lbnRzPVRSQU5TTEFUT1JTOiAkKFhHRVRURVhUX09QVElPTlMpIEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQCBcCisJICAgICAgLS1maWxlcy1mcm9tPSQoc3JjZGlyKS9QT1RGSUxFUy5pbiBcCisJICAgICAgLS1jb3B5cmlnaHQtaG9sZGVyPSckKENPUFlSSUdIVF9IT0xERVIpJyBcCisJICAgICAgLS1wYWNrYWdlLW5hbWU9IiQke3BhY2thZ2VfcHJlZml4fUBQQUNLQUdFQCIgXAorCSAgICAgIC0tcGFja2FnZS12ZXJzaW9uPSdAVkVSU0lPTkAnIFwKKwkgICAgICAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0iJCRtc2dpZF9idWdzX2FkZHJlc3MiIFwKKwkgICAgOzsgXAorCWVzYWMKKwl0ZXN0ICEgLWYgJChET01BSU4pLnBvIHx8IHsgXAorCSAgaWYgdGVzdCAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgdGhlbiBcCisJICAgIHNlZCAtZiByZW1vdmUtcG90Y2RhdGUuc2VkIDwgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgPiAkKERPTUFJTikuMXBvICYmIFwKKwkgICAgc2VkIC1mIHJlbW92ZS1wb3RjZGF0ZS5zZWQgPCAkKERPTUFJTikucG8gPiAkKERPTUFJTikuMnBvICYmIFwKKwkgICAgaWYgY21wICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgICAgIHJtIC1mICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyAkKERPTUFJTikucG87IFwKKwkgICAgZWxzZSBcCisJICAgICAgcm0gLWYgJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvICQoc3JjZGlyKS8kKERPTUFJTikucG90ICYmIFwKKwkgICAgICBtdiAkKERPTUFJTikucG8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IFwKKwkgICAgZmk7IFwKKwkgIGVsc2UgXAorCSAgICBtdiAkKERPTUFJTikucG8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IFwKKwkgIGZpOyBcCisJfQorCisjIFRoaXMgcnVsZSBoYXMgbm8gZGVwZW5kZW5jaWVzOiB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSAkKERPTUFJTikucG90IGF0CisjIGV2ZXJ5ICJtYWtlIiBpbnZvY2F0aW9uLCBvbmx5IGNyZWF0ZSBpdCB3aGVuIGl0IGlzIG1pc3NpbmcuCisjIE9ubHkgIm1ha2UgJChET01BSU4pLnBvdC11cGRhdGUiIG9yICJtYWtlIGRpc3QiIHdpbGwgZm9yY2UgYW4gdXBkYXRlLgorJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q6CisJJChNQUtFKSAkKERPTUFJTikucG90LXVwZGF0ZQorCisjIFRoaXMgdGFyZ2V0IHJlYnVpbGRzIGEgUE8gZmlsZSBpZiAkKERPTUFJTikucG90IGhhcyBjaGFuZ2VkLgorIyBOb3RlIHRoYXQgYSBQTyBmaWxlIGlzIG5vdCB0b3VjaGVkIGlmIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBjaGFuZ2VkLgorJChQT0ZJTEVTKTogJChQT0ZJTEVTREVQUykKKwlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncywuKi8sLCcgLWUgJ3MvXC5wbyQkLy8nYDsgXAorCWlmIHRlc3QgLWYgIiQoc3JjZGlyKS8kJHtsYW5nfS5wbyI7IHRoZW4gXAorCSAgdGVzdCAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdCB8fCAkKE1BS0UpICQoc3JjZGlyKS8kKERPTUFJTikucG90OyBcCisJICB0ZXN0ICIkKHNyY2RpcikiID0gLiAmJiBjZGNtZD0iIiB8fCBjZGNtZD0iY2QgJChzcmNkaXIpICYmICI7IFwKKwkgIGVjaG8gIiQke2NkY21kfSQoTVNHTUVSR0VfVVBEQVRFKSAkKE1TR01FUkdFX09QVElPTlMpIC0tbGFuZz0kJHtsYW5nfSAkJHtsYW5nfS5wbyAkKERPTUFJTikucG90IjsgXAorCSAgY2QgJChzcmNkaXIpIFwKKwkgICAgJiYgeyBjYXNlIGAkKE1TR01FUkdFX1VQREFURSkgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbiBcCisJICAgICAgICAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC03XSB8IDAuMVswLTddLiopIFwKKwkgICAgICAgICAgICAgJChNU0dNRVJHRV9VUERBVEUpICQoTVNHTUVSR0VfT1BUSU9OUykgJCR7bGFuZ30ucG8gJChET01BSU4pLnBvdDs7IFwKKwkgICAgICAgICAgICopIFwKKwkgICAgICAgICAgICAgJChNU0dNRVJHRV9VUERBVEUpICQoTVNHTUVSR0VfT1BUSU9OUykgLS1sYW5nPSQke2xhbmd9ICQke2xhbmd9LnBvICQoRE9NQUlOKS5wb3Q7OyBcCisJICAgICAgICAgZXNhYzsgXAorCSAgICAgICB9OyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQke2xhbmd9LnBvLWNyZWF0ZTsgXAorCWZpCisKKworaW5zdGFsbDogaW5zdGFsbC1leGVjIGluc3RhbGwtZGF0YQoraW5zdGFsbC1leGVjOgoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtQFVTRV9OTFNACisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgJChNS0RJUl9QKSAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKTsgXAorCSAgZm9yIGZpbGUgaW4gJChESVNURklMRVMuY29tbW9uKSBNYWtldmFycy50ZW1wbGF0ZTsgZG8gXAorCSAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkZmlsZSBcCisJCQkgICAgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisJICBkb25lOyBcCisJICBmb3IgZmlsZSBpbiBNYWtldmFyczsgZG8gXAorCSAgICBybSAtZiAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKwkgIGRvbmU7IFwKKwllbHNlIFwKKwkgIDogOyBcCisJZmkKK2luc3RhbGwtZGF0YS1ubzogYWxsCitpbnN0YWxsLWRhdGEteWVzOiBhbGwKKwlAY2F0YWxvZ3M9JyQoQ0FUQUxPR1MpJzsgXAorCWZvciBjYXQgaW4gJCRjYXRhbG9nczsgZG8gXAorCSAgY2F0PWBiYXNlbmFtZSAkJGNhdGA7IFwKKwkgIGxhbmc9YGVjaG8gJCRjYXQgfCBzZWQgLWUgJ3MvXC5nbW8kJC8vJ2A7IFwKKwkgIGRpcj0kKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTOyBcCisJICAkKE1LRElSX1ApICQoREVTVERJUikkJGRpcjsgXAorCSAgaWYgdGVzdCAtciAkJGNhdDsgdGhlbiByZWFsY2F0PSQkY2F0OyBlbHNlIHJlYWxjYXQ9JChzcmNkaXIpLyQkY2F0OyBmaTsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkcmVhbGNhdCAkKERFU1RESVIpJCRkaXIvJChET01BSU4pLm1vOyBcCisJICBlY2hvICJpbnN0YWxsaW5nICQkcmVhbGNhdCBhcyAkKERFU1RESVIpJCRkaXIvJChET01BSU4pLm1vIjsgXAorCSAgZm9yIGxjIGluICcnICQoRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMpOyBkbyBcCisJICAgIGlmIHRlc3QgLW4gIiQkbGMiOyB0aGVuIFwKKwkgICAgICBpZiAoY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyAyPi9kZXYvbnVsbCkgfCBncmVwICcgLT4gJyA+L2Rldi9udWxsOyB0aGVuIFwKKwkgICAgICAgIGxpbms9YGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nICYmIExDX0FMTD1DIGxzIC1sIC1kICQkbGMgfCBzZWQgLWUgJ3MvXi4qIC0+IC8vJ2A7IFwKKwkgICAgICAgIG12ICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQ7IFwKKwkgICAgICAgIG1rZGlyICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKKwkgICAgICAgIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZCAmJiBcCisJICAgICAgICAgZm9yIGZpbGUgaW4gKjsgZG8gXAorCSAgICAgICAgICAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gXAorCSAgICAgICAgICAgICBsbiAtcyAuLi8kJGxpbmsvJCRmaWxlICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJCRmaWxlOyBcCisJICAgICAgICAgICBmaTsgXAorCSAgICAgICAgIGRvbmUpOyBcCisJICAgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgIGVsc2UgXAorCSAgICAgICAgaWYgdGVzdCAtZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyB0aGVuIFwKKwkgICAgICAgICAgOjsgXAorCSAgICAgICAgZWxzZSBcCisJICAgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKKwkgICAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgZmk7IFwKKwkgICAgICBmaTsgXAorCSAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCisJICAgICAgbG4gLXMgLi4vTENfTUVTU0FHRVMvJChET01BSU4pLm1vICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vIDI+L2Rldi9udWxsIHx8IFwKKwkgICAgICBsbiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUy8kKERPTUFJTikubW8gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW8gMj4vZGV2L251bGwgfHwgXAorCSAgICAgIGNwIC1wICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTLyQoRE9NQUlOKS5tbyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbzsgXAorCSAgICAgIGVjaG8gImluc3RhbGxpbmcgJCRyZWFsY2F0IGxpbmsgYXMgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW8iOyBcCisJICAgIGZpOyBcCisJICBkb25lOyBcCisJZG9uZQorCitpbnN0YWxsLXN0cmlwOiBpbnN0YWxsCisKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1leGVjIGluc3RhbGxkaXJzLWRhdGEKK2luc3RhbGxkaXJzLWV4ZWM6CitpbnN0YWxsZGlycy1kYXRhOiBpbnN0YWxsZGlycy1kYXRhLUBVU0VfTkxTQAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKwkgICQoTUtESVJfUCkgJChERVNURElSKSQoZ2V0dGV4dHNyY2Rpcik7IFwKKwllbHNlIFwKKwkgIDogOyBcCisJZmkKK2luc3RhbGxkaXJzLWRhdGEtbm86CitpbnN0YWxsZGlycy1kYXRhLXllczoKKwlAY2F0YWxvZ3M9JyQoQ0FUQUxPR1MpJzsgXAorCWZvciBjYXQgaW4gJCRjYXRhbG9nczsgZG8gXAorCSAgY2F0PWBiYXNlbmFtZSAkJGNhdGA7IFwKKwkgIGxhbmc9YGVjaG8gJCRjYXQgfCBzZWQgLWUgJ3MvXC5nbW8kJC8vJ2A7IFwKKwkgIGRpcj0kKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTOyBcCisJICAkKE1LRElSX1ApICQoREVTVERJUikkJGRpcjsgXAorCSAgZm9yIGxjIGluICcnICQoRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMpOyBkbyBcCisJICAgIGlmIHRlc3QgLW4gIiQkbGMiOyB0aGVuIFwKKwkgICAgICBpZiAoY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyAyPi9kZXYvbnVsbCkgfCBncmVwICcgLT4gJyA+L2Rldi9udWxsOyB0aGVuIFwKKwkgICAgICAgIGxpbms9YGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nICYmIExDX0FMTD1DIGxzIC1sIC1kICQkbGMgfCBzZWQgLWUgJ3MvXi4qIC0+IC8vJ2A7IFwKKwkgICAgICAgIG12ICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQ7IFwKKwkgICAgICAgIG1rZGlyICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKKwkgICAgICAgIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZCAmJiBcCisJICAgICAgICAgZm9yIGZpbGUgaW4gKjsgZG8gXAorCSAgICAgICAgICAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gXAorCSAgICAgICAgICAgICBsbiAtcyAuLi8kJGxpbmsvJCRmaWxlICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJCRmaWxlOyBcCisJICAgICAgICAgICBmaTsgXAorCSAgICAgICAgIGRvbmUpOyBcCisJICAgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgIGVsc2UgXAorCSAgICAgICAgaWYgdGVzdCAtZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyB0aGVuIFwKKwkgICAgICAgICAgOjsgXAorCSAgICAgICAgZWxzZSBcCisJICAgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKKwkgICAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgZmk7IFwKKwkgICAgICBmaTsgXAorCSAgICBmaTsgXAorCSAgZG9uZTsgXAorCWRvbmUKKworIyBEZWZpbmUgdGhpcyBhcyBlbXB0eSB1bnRpbCBJIGZvdW5kIGEgdXNlZnVsIGFwcGxpY2F0aW9uLgoraW5zdGFsbGNoZWNrOgorCit1bmluc3RhbGw6IHVuaW5zdGFsbC1leGVjIHVuaW5zdGFsbC1kYXRhCit1bmluc3RhbGwtZXhlYzoKK3VuaW5zdGFsbC1kYXRhOiB1bmluc3RhbGwtZGF0YS1AVVNFX05MU0AKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICBmb3IgZmlsZSBpbiAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzLnRlbXBsYXRlOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorCSAgZG9uZTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQordW5pbnN0YWxsLWRhdGEtbm86Cit1bmluc3RhbGwtZGF0YS15ZXM6CisJY2F0YWxvZ3M9JyQoQ0FUQUxPR1MpJzsgXAorCWZvciBjYXQgaW4gJCRjYXRhbG9nczsgZG8gXAorCSAgY2F0PWBiYXNlbmFtZSAkJGNhdGA7IFwKKwkgIGxhbmc9YGVjaG8gJCRjYXQgfCBzZWQgLWUgJ3MvXC5nbW8kJC8vJ2A7IFwKKwkgIGZvciBsYyBpbiBMQ19NRVNTQUdFUyAkKEVYVFJBX0xPQ0FMRV9DQVRFR09SSUVTKTsgZG8gXAorCSAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbzsgXAorCSAgZG9uZTsgXAorCWRvbmUKKworY2hlY2s6IGFsbAorCitpbmZvIGR2aSBwcyBwZGYgaHRtbCB0YWdzIFRBR1MgY3RhZ3MgQ1RBR1MgSUQ6CisKK21vc3RseWNsZWFuOgorCXJtIC1mIHJlbW92ZS1wb3RjZGF0ZS5zZWQKKwlybSAtZiBzdGFtcC1wb1QKKwlybSAtZiBjb3JlIGNvcmUuKiAkKERPTUFJTikucG8gJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvICoubmV3LnBvCisJcm0gLWZyICoubworCitjbGVhbjogbW9zdGx5Y2xlYW4KKworZGlzdGNsZWFuOiBjbGVhbgorCXJtIC1mIE1ha2VmaWxlIE1ha2VmaWxlLmluIFBPVEZJTEVTICoubW8KKworbWFpbnRhaW5lci1jbGVhbjogZGlzdGNsZWFuCisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlOyIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJcm0gLWYgc3RhbXAtcG8gJChHTU9GSUxFUykKKworZGlzdGRpciA9ICQodG9wX2J1aWxkZGlyKS8kKFBBQ0tBR0UpLSQoVkVSU0lPTikvJChzdWJkaXIpCitkaXN0IGRpc3RkaXI6CisJdGVzdCAteiAiJChESVNURklMRVNERVBTKSIgfHwgJChNQUtFKSAkKERJU1RGSUxFU0RFUFMpCisJQCQoTUFLRSkgZGlzdDIKKyMgVGhpcyBpcyBhIHNlcGFyYXRlIHRhcmdldCBiZWNhdXNlICd1cGRhdGUtcG8nIG11c3QgYmUgZXhlY3V0ZWQgYmVmb3JlLgorZGlzdDI6IHN0YW1wLXBvICQoRElTVEZJTEVTKQorCWRpc3RzPSIkKERJU1RGSUxFUykiOyBcCisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgZGlzdHM9IiQkZGlzdHMgTWFrZXZhcnMudGVtcGxhdGUiOyBcCisJZmk7IFwKKwlpZiB0ZXN0IC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90OyB0aGVuIFwKKwkgIGRpc3RzPSIkJGRpc3RzICQoRE9NQUlOKS5wb3Qgc3RhbXAtcG8iOyBcCisJZmk7IFwKKwlpZiB0ZXN0IC1mICQoc3JjZGlyKS9DaGFuZ2VMb2c7IHRoZW4gXAorCSAgZGlzdHM9IiQkZGlzdHMgQ2hhbmdlTG9nIjsgXAorCWZpOyBcCisJZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOTsgZG8gXAorCSAgaWYgdGVzdCAtZiAkKHNyY2RpcikvQ2hhbmdlTG9nLiQkaTsgdGhlbiBcCisJICAgIGRpc3RzPSIkJGRpc3RzIENoYW5nZUxvZy4kJGkiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0IC1mICQoc3JjZGlyKS9MSU5HVUFTOyB0aGVuIGRpc3RzPSIkJGRpc3RzIExJTkdVQVMiOyBmaTsgXAorCWZvciBmaWxlIGluICQkZGlzdHM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIFwKKwkgICAgY3AgLXAgJCRmaWxlICQoZGlzdGRpcikgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgY3AgLXAgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisKK3VwZGF0ZS1wbzogTWFrZWZpbGUKKwkkKE1BS0UpICQoRE9NQUlOKS5wb3QtdXBkYXRlCisJdGVzdCAteiAiJChVUERBVEVQT0ZJTEVTKSIgfHwgJChNQUtFKSAkKFVQREFURVBPRklMRVMpCisJJChNQUtFKSB1cGRhdGUtZ21vCisKKyMgR2VuZXJhbCBydWxlIGZvciBjcmVhdGluZyBQTyBmaWxlcy4KKworLm5vcC5wby1jcmVhdGU6CisJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby1jcmVhdGUkJC8vJ2A7IFwKKwllY2hvICJGaWxlICQkbGFuZy5wbyBkb2VzIG5vdCBleGlzdC4gSWYgeW91IGFyZSBhIHRyYW5zbGF0b3IsIHlvdSBjYW4gY3JlYXRlIGl0IHRocm91Z2ggJ21zZ2luaXQnLiIgMT4mMjsgXAorCWV4aXQgMQorCisjIEdlbmVyYWwgcnVsZSBmb3IgdXBkYXRpbmcgUE8gZmlsZXMuCisKKy5ub3AucG8tdXBkYXRlOgorCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzL1wucG8tdXBkYXRlJCQvLydgOyBcCisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gUEFUSD1gcHdkYC8uLi9zcmM6JCRQQVRIOyBmaTsgXAorCXRtcGRpcj1gcHdkYDsgXAorCWVjaG8gIiQkbGFuZzoiOyBcCisJdGVzdCAiJChzcmNkaXIpIiA9IC4gJiYgY2RjbWQ9IiIgfHwgY2RjbWQ9ImNkICQoc3JjZGlyKSAmJiAiOyBcCisJZWNobyAiJCR7Y2RjbWR9JChNU0dNRVJHRSkgJChNU0dNRVJHRV9PUFRJT05TKSAtLWxhbmc9JCRsYW5nICQkbGFuZy5wbyAkKERPTUFJTikucG90IC1vICQkbGFuZy5uZXcucG8iOyBcCisJY2QgJChzcmNkaXIpOyBcCisJaWYgeyBjYXNlIGAkKE1TR01FUkdFKSAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluIFwKKwkgICAgICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtN10gfCAwLjFbMC03XS4qKSBcCisJICAgICAgICAgJChNU0dNRVJHRSkgJChNU0dNRVJHRV9PUFRJT05TKSAtbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvICQkbGFuZy5wbyAkKERPTUFJTikucG90OzsgXAorCSAgICAgICAqKSBcCisJICAgICAgICAgJChNU0dNRVJHRSkgJChNU0dNRVJHRV9PUFRJT05TKSAtLWxhbmc9JCRsYW5nIC1vICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gJCRsYW5nLnBvICQoRE9NQUlOKS5wb3Q7OyBcCisJICAgICBlc2FjOyBcCisJICAgfTsgdGhlbiBcCisJICBpZiBjbXAgJCRsYW5nLnBvICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgICAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorCSAgZWxzZSBcCisJICAgIGlmIG12IC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gJCRsYW5nLnBvOyB0aGVuIFwKKwkgICAgICA6OyBcCisJICAgIGVsc2UgXAorCSAgICAgIGVjaG8gIm1zZ21lcmdlIGZvciAkJGxhbmcucG8gZmFpbGVkOiBjYW5ub3QgbW92ZSAkJHRtcGRpci8kJGxhbmcubmV3LnBvIHRvICQkbGFuZy5wbyIgMT4mMjsgXAorCSAgICAgIGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgZmk7IFwKKwllbHNlIFwKKwkgIGVjaG8gIm1zZ21lcmdlIGZvciAkJGxhbmcucG8gZmFpbGVkISIgMT4mMjsgXAorCSAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorCWZpCisKKyQoRFVNTVlQT0ZJTEVTKToKKwordXBkYXRlLWdtbzogTWFrZWZpbGUgJChHTU9GSUxFUykKKwlAOgorCisjIFJlY3JlYXRlIE1ha2VmaWxlIGJ5IGludm9raW5nIGNvbmZpZy5zdGF0dXMuIEV4cGxpY2l0bHkgaW52b2tlIHRoZSBzaGVsbCwKKyMgYmVjYXVzZSBleGVjdXRpb24gcGVybWlzc2lvbiBiaXRzIG1heSBub3Qgd29yayBvbiB0aGUgY3VycmVudCBmaWxlIHN5c3RlbS4KKyMgVXNlIEBTSEVMTEAsIHdoaWNoIGlzIHRoZSBzaGVsbCBkZXRlcm1pbmVkIGJ5IGF1dG9jb25mIGZvciB0aGUgdXNlIGJ5IGl0cworIyBzY3JpcHRzLCBub3QgJChTSEVMTCkgd2hpY2ggaXMgaGFyZHdpcmVkIHRvIC9iaW4vc2ggYW5kIG1heSBiZSBkZWZpY2llbnQuCitNYWtlZmlsZTogTWFrZWZpbGUuaW4uaW4gTWFrZXZhcnMgJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgQFBPTUFLRUZJTEVERVBTQAorCWNkICQodG9wX2J1aWxkZGlyKSBcCisJICAmJiBAU0hFTExAIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAuaW4gcG8tZGlyZWN0b3JpZXMKKworZm9yY2U6CisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSBub3QgdG8gZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L2FjbG9jYWwudGd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvYWNsb2NhbC50Z3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA0YmE1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L2FjbG9jYWwudGd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L2NvbmZpZy5ycGF0aCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L2NvbmZpZy5ycGF0aApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNjI1NjIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvY29uZmlnLnJwYXRoCkBAIC0wLDAgKzEsNjg0IEBACisjISAvYmluL3NoCisjIE91dHB1dCBhIHN5c3RlbSBkZXBlbmRlbnQgc2V0IG9mIHZhcmlhYmxlcywgZGVzY3JpYmluZyBob3cgdG8gc2V0IHRoZQorIyBydW4gdGltZSBzZWFyY2ggcGF0aCBvZiBzaGFyZWQgbGlicmFyaWVzIGluIGFuIGV4ZWN1dGFibGUuCisjCisjICAgQ29weXJpZ2h0IDE5OTYtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBUYWtlbiBmcm9tIEdOVSBsaWJ0b29sLCAyMDAxCisjICAgT3JpZ2luYWxseSBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKKyMKKyMgICBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyAgIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyAgIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorIworIyBUaGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgZmlsZSBpcyB0aGUgY2Fub25pY2FsIGhvc3Qgc3BlY2lmaWNhdGlvbiwKKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KKyMgb3IKKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisjIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgQ0MsIEdDQywgTERGTEFHUywgTEQsIHdpdGhfZ251X2xkCisjIHNob3VsZCBiZSBzZXQgYnkgdGhlIGNhbGxlci4KKyMKKyMgVGhlIHNldCBvZiBkZWZpbmVkIHZhcmlhYmxlcyBpcyBhdCB0aGUgZW5kIG9mIHRoaXMgc2NyaXB0LgorCisjIEtub3duIGxpbWl0YXRpb25zOgorIyAtIE9uIElSSVggNi41IHdpdGggQ0M9ImNjIiwgdGhlIHJ1biB0aW1lIHNlYXJjaCBwYXRjaCBtdXN0IG5vdCBiZSBsb25nZXIKKyMgICB0aGFuIDI1NiBieXRlcywgb3RoZXJ3aXNlIHRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBkdW1wIGNvcmUuIFRoZSBvbmx5CisjICAga25vd24gd29ya2Fyb3VuZCBpcyB0byBjaG9vc2Ugc2hvcnRlciBkaXJlY3RvcnkgbmFtZXMgZm9yIHRoZSBidWlsZAorIyAgIGRpcmVjdG9yeSBhbmQvb3IgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhICcuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorIyB3aGljaCBuZWVkcyAnLmxpYicpLgorbGliZXh0PWEKK3NocmV4dD0uc28KKworaG9zdD0iJDEiCitob3N0X2NwdT1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKK2hvc3RfdmVuZG9yPWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAoraG9zdF9vcz1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKworIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9DQ19CQVNFTkFNRS4KKworZm9yIGNjX3RlbXAgaW4gJENDIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gZWNobyAiJGNjX3RlbXAiIHwgc2VkIC1lICdzJV4uKi8lJSdgCisKKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBfTFRfQ09NUElMRVJfUElDLgorCit3bD0KK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHdsPSctV2wsJworZWxzZQorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXgqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICA7OworICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgZWNjKikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBpY2MqIHwgaWZvcnQqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIGxmOTUqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIG5hZ2ZvciopCisgICAgICAgICAgd2w9Jy1XbCwtV2wsLCcKKyAgICAgICAgICA7OworICAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgY2NjKikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICB4bCogfCBiZ3hsKiB8IGJnZiogfCBtcGl4bCopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgY29tbykKKyAgICAgICAgICB3bD0nLWxvcHQ9JworICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisgICAgICAgICAgICAqU3VuXCBGKiB8ICpTdW4qRm9ydHJhbiopCisgICAgICAgICAgICAgIHdsPQorICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKlN1blwgQyopCisgICAgICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBuZXdzb3M2KQorICAgICAgOzsKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgOzsKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgcmRvcyopCisgICAgICA7OworICAgIHNvbGFyaXMqKQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorICAgICAgICAgIHdsPSctUW9wdGlvbiBsZCAnCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBzdW5vczQqKQorICAgICAgd2w9Jy1Rb3B0aW9uIGxkICcKKyAgICAgIDs7CisgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIDs7CisgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICB1bmljb3MqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIHV0czQqKQorICAgICAgOzsKKyAgZXNhYworZmkKKworIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9MSU5LRVJfU0hMSUJTLgorCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KK2hhcmRjb2RlX2RpcmVjdD1ubworaGFyZGNvZGVfbWludXNfTD1ubworCitjYXNlICIkaG9zdF9vcyIgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKyAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICB3aXRoX2dudV9sZD1ubworICAgIGZpCisgICAgOzsKKyAgaW50ZXJpeCopCisgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKyAgICB3aXRoX2dudV9sZD15ZXMKKyAgICA7OworICBvcGVuYnNkKikKKyAgICB3aXRoX2dudV9sZD1ubworICAgIDs7Citlc2FjCisKK2xkX3NobGlicz15ZXMKK2lmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKKyAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCisgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KKyAgIyBVbmxpa2UgbGlidG9vbCwgd2UgdXNlIC1ycGF0aCBoZXJlLCBub3QgLS1ycGF0aCwgc2luY2UgdGhlIGRvY3VtZW50ZWQKKyAgIyBvcHRpb24gb2YgR05VIGxkIGlzIGNhbGxlZCAtcnBhdGgsIG5vdCAtLXJwYXRoLgorICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIGFpeFszLTldKikKKyAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICAgICAgICBwb3dlcnBjKQorICAgICAgICAgIDs7CisgICAgICAgIG02OGspCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgYmVvcyopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGhhaWt1KikKKyAgICAgIDs7CisgICAgaW50ZXJpeFszLTldKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgIDs7CisgICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIG5ldGJzZCopCisgICAgICA7OworICAgIHNvbGFyaXMqKQorICAgICAgaWYgJExEIC12IDI+JjEgfCBncmVwICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjFbMC01XS4qKQorICAgICAgICAgIGxkX3NobGlicz1ubworICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tcnBhdGgsJGxpYmRpcmAnCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICAgICAgZmkKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBzdW5vczQqKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgOzsKKyAgICAqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgZXNhYworICBpZiB0ZXN0ICIkbGRfc2hsaWJzIiA9IG5vOyB0aGVuCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAgZmkKK2Vsc2UKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgYWl4MyopCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgICMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQorICAgICAgICAjIGJyb2tlbiBjb2xsZWN0Mi4KKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisgICAgICBmaQorICAgICAgOzsKKyAgICBhaXhbNC05XSopCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisgICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICBlbHNlCisgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKyAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisgICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorICAgICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXhbNS05XSopCisgICAgICAgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisgICAgICAgICAgICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorICAgICAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZmkKKyAgICAgICAgICBkb25lCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQorICAgICAgICAgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKyAgICAgICAgICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCisgICAgICAgICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisgICAgICAgICAgdGhlbgorICAgICAgICAgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisgICAgICAgICAgICA6CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKyAgICAgICAgICBmaQorICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICAjIEJlZ2luIF9MVF9BQ19TWVNfTElCUEFUSF9BSVguCisgICAgICBlY2hvICdpbnQgbWFpbiAoKSB7IHJldHVybiAwOyB9JyA+IGNvbmZ0ZXN0LmMKKyAgICAgICR7Q0N9ICR7TERGTEFHU30gY29uZnRlc3QuYyAtbyBjb25mdGVzdAorICAgICAgYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgCisgICAgICBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisgICAgICAgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0IDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KK30nYAorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKyAgICAgICAgYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiCisgICAgICBmaQorICAgICAgcm0gLWYgY29uZnRlc3QuYyBjb25mdGVzdAorICAgICAgIyBFbmQgX0xUX0FDX1NZU19MSUJQQVRIX0FJWC4KKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgZWxzZQorICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworICAgICAgICBlbHNlCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICA7OworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICAgICAgICBwb3dlcnBjKQorICAgICAgICAgIDs7CisgICAgICAgIG02OGspCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgYnNkaVs0NV0qKQorICAgICAgOzsKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworICAgICAgbGliZXh0PWxpYgorICAgICAgOzsKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICBpZiB7IGNhc2UgJGNjX2Jhc2VuYW1lIGluIGlmb3J0KikgdHJ1ZTs7ICopIHRlc3QgIiRHQ0MiID0geWVzOzsgZXNhYzsgfTsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZGd1eCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICA7OworICAgIGZyZWVic2QyLlswMV0qKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgOzsKKyAgICBocHV4OSopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgaHB1eDEwKikKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBmaQorICAgICAgOzsKKyAgICBocHV4MTEqKQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICA7OworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgbmV0YnNkKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgbmV3c29zNikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgOzsKKyAgICBvcGVuYnNkKikKKyAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgICAgZWxzZQorICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKKyAgICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgb3MyKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICA7OworICAgIG9zZjMqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgIG9zZjQqIHwgb3NmNSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBlbHNlCisgICAgICAgICMgQm90aCBjYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICBzb2xhcmlzKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIDs7CisgICAgc3Vub3M0KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICA7OworICAgIHN5c3Y0KQorICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICAgICAgc25pKQorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/CisgICAgICAgICAgOzsKKyAgICAgICAgc2llbWVucykKKyAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgICAgICA7OworICAgICAgICBtb3Rvcm9sYSkKKyAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIHN5c3Y0LjMqKQorICAgICAgOzsKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisgICAgICAgIGxkX3NobGlicz15ZXMKKyAgICAgIGZpCisgICAgICA7OworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCisgICAgICA7OworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisgICAgICA7OworICAgIHV0czQqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgOzsKKyAgICAqKQorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICBlc2FjCitmaQorCisjIENoZWNrIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcworIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIuCisjIFVubGlrZSBsaWJ0b29sLm00LCBoZXJlIHdlIGRvbid0IGNhcmUgYWJvdXQgX2FsbF8gbmFtZXMgb2YgdGhlIGxpYnJhcnksIGJ1dAorIyBvbmx5IGFib3V0IHRoZSBvbmUgdGhlIGxpbmtlciBmaW5kcyB3aGVuIHBhc3NlZCAtbE5BTUUuIFRoaXMgaXMgdGhlIGxhc3QKKyMgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNCwgb3IgcG9zc2libHkgdHdvIG9mIHRoZW0gaWYgdGhlCisjIGxpbmtlciBoYXMgc3BlY2lhbCBzZWFyY2ggcnVsZXMuCitsaWJyYXJ5X25hbWVzX3NwZWM9ICAgICAgIyB0aGUgbGFzdCBlbGVtZW50IG9mIGxpYnJhcnlfbmFtZXNfc3BlYyBpbiBsaWJ0b29sLm00CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworY2FzZSAiJGhvc3Rfb3MiIGluCisgIGFpeDMqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuYScKKyAgICA7OworICBhaXhbNC05XSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgYW1pZ2FvcyopCisgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICAgICAgcG93ZXJwYyopCisgICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JyA7OworICAgICAgbTY4aykKKyAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJyA7OworICAgIGVzYWMKKyAgICA7OworICBiZW9zKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBic2RpWzQ1XSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIHNocmV4dD0uZGxsCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYSAkbGlibmFtZS5saWInCisgICAgOzsKKyAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICBzaHJleHQ9LmR5bGliCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgZGd1eCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgZnJlZWJzZFsyM10uKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnCisgICAgOzsKKyAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGdudSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgaGFpa3UqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBpYTY0KikKKyAgICAgICAgc2hyZXh0PS5zbworICAgICAgICA7OworICAgICAgaHBwYSo2NCopCisgICAgICAgIHNocmV4dD0uc2wKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIHNocmV4dD0uc2wKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgaW50ZXJpeFszLTldKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgY2FzZSAkTEQgaW4KKyAgICAgICAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IDs7CisgICAgICAgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIDs7CisgICAgICAgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IDs7CisgICAgICAgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgIGxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgICAgOzsKKyAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGtuZXRic2QqLWdudSkKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBuZXRic2QqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIG5ld3NvczYpCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgKm50byogfCAqcW54KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBvcGVuYnNkKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnCisgICAgOzsKKyAgb3MyKikKKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICAgIHNocmV4dD0uZGxsCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgIDs7CisgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICByZG9zKikKKyAgICA7OworICBzb2xhcmlzKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBzdW5vczQqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKKyAgICA7OworICBzeXN2NCB8IHN5c3Y0LjMqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHN5c3Y0Kk1QKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICB0cGYqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHV0czQqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7Citlc2FjCisKK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFsiYCRcXF1cKS9cXFwxL2cnCitlc2NhcGVkX3dsPWBlY2hvICJYJHdsIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCitzaGxpYmV4dD1gZWNobyAiJHNocmV4dCIgfCBzZWQgLWUgJ3MsXlwuLCwnYAorZXNjYXBlZF9saWJuYW1lX3NwZWM9YGVjaG8gIlgkbGlibmFtZV9zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCitlc2NhcGVkX2xpYnJhcnlfbmFtZXNfc3BlYz1gZWNobyAiWCRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKK2VzY2FwZWRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz1gZWNobyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisKK0xDX0FMTD1DIHNlZCAtZSAncy9eXChbYS16QS1aMC05X10qXCk9L2FjbF9jdl9cMT0vJyA8PEVPRgorCisjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCit3bD0iJGVzY2FwZWRfd2wiCisKKyMgU3RhdGljIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiYSIpLgorbGliZXh0PSIkbGliZXh0IgorCisjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgInNvIikuCitzaGxpYmV4dD0iJHNobGliZXh0IgorCisjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorbGlibmFtZV9zcGVjPSIkZXNjYXBlZF9saWJuYW1lX3NwZWMiCisKKyMgTGlicmFyeSBuYW1lcyB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLgorbGlicmFyeV9uYW1lc19zcGVjPSIkZXNjYXBlZF9saWJyYXJ5X25hbWVzX3NwZWMiCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGVzY2FwZWRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgorCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSIkaGFyZGNvZGVfZGlyZWN0IgorCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfbWludXNfTD0iJGhhcmRjb2RlX21pbnVzX0wiCisKK0VPRgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvcmVtb3ZlLXBvdGNkYXRlLnNpbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L3JlbW92ZS1wb3RjZGF0ZS5zaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzNmM0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L3JlbW92ZS1wb3RjZGF0ZS5zaW4KQEAgLTAsMCArMSwxOSBAQAorIyBTZWQgc2NyaXB0IHRoYXQgcmVtb3ZlIHRoZSBQT1QtQ3JlYXRpb24tRGF0ZSBsaW5lIGluIHRoZSBoZWFkZXIgZW50cnkKKyMgZnJvbSBhIFBPVCBmaWxlLgorIworIyBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHRoZSBmb2xsb3dpbmcgb2NjdXJyZW5jZXMgb2YgdGhlCisjIHBhdHRlcm4gaXMgYWNoaWV2ZWQgYnkgbG9va2luZyBhdCB0aGUgaG9sZCBzcGFjZS4KKy9eIlBPVC1DcmVhdGlvbi1EYXRlOiAuKiIkL3sKK3gKKyMgVGVzdCBpZiB0aGUgaG9sZCBzcGFjZSBpcyBlbXB0eS4KK3MvUC9QLwordGEKKyMgWWVzIGl0IHdhcyBlbXB0eS4gRmlyc3Qgb2NjdXJyZW5jZS4gUmVtb3ZlIHRoZSBsaW5lLgorZworZAorYmIKKzphCisjIFRoZSBob2xkIHNwYWNlIHdhcyBub25lbXB0eS4gRm9sbG93aW5nIG9jY3VycmVuY2VzLiBEbyBub3RoaW5nLgoreAorOmIKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtbmF0aXZlXzAuMTkuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtbmF0aXZlXzAuMTkuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDRhNDQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC1uYXRpdmVfMC4xOS40LmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiTWluaW1hbCBnZXR0ZXh0IGZvciBzdXBwb3J0aW5nIG5hdGl2ZSBhdXRvY29uZi9hdXRvbWFrZSIKK0RFU0NSSVBUSU9OID0gIkNvbnRhaW5zIHRoZSBtNCBtYWNyb3Mgc3VmZmljaWVudCB0byBzdXBwb3J0IGJ1aWxkaW5nIFwKK2F1dG9jb25mL2F1dG9tYWtlLiBUaGlzIHByb3ZpZGVzIGEgc2lnbmlmaWNhbnQgYnVpbGQgdGltZSBzcGVlZHVwIGJ5IFwKK3RoZSByZW1vdmFsIG9mIGdldHRleHQtbmF0aXZlIGZyb20gbW9zdCBkZXBlbmRlbmN5IGNoYWlucyAobm93IG9ubHkgXAorbmVlZGVkIGZvciBnZXR0ZXh0IGZvciB0aGUgdGFyZ2V0KS4iCitTUkNfVVJJID0gImZpbGU6Ly9hY2xvY2FsLnRneiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWcucnBhdGggXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuaW4uaW4gXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXBvdGNkYXRlLnNpbiBcCisgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtUEFUQ0gtRGlzYWJsZS10aGUtdGVzdC10by1jb252ZXJ0LWV1Yy1qcC5wYXRjaCBcCisiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitJTkhJQklUX0FVVE9UT09MU19ERVBTID0gIjEiCisKK0xJQ0VOU0UgPSAiRlNGLVVubGltaXRlZCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTFiMjA2NzVjZDUxNTg0NDJmNjAwN2QwMjJmNDZiMzViIgorCitpbmhlcml0IG5hdGl2ZQorCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9hY2xvY2FsLworCWNwICR7V09SS0RJUn0vKi5tNCAke0R9JHtkYXRhZGlyfS9hY2xvY2FsLworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZ2V0dGV4dC9wby8KKwljcCAke1dPUktESVJ9L2NvbmZpZy5ycGF0aCAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0LworCWNwICR7V09SS0RJUn0vTWFrZWZpbGUuaW4uaW4gJHtEfSR7ZGF0YWRpcn0vZ2V0dGV4dC9wby8KKwljcCAke1dPUktESVJ9L3JlbW92ZS1wb3RjZGF0ZS5zaW4gJHtEfSR7ZGF0YWRpcn0vZ2V0dGV4dC9wby8KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0XzAuMTYuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0XzAuMTYuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWY3YTdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHRfMC4xNi4xLmJiCkBAIC0wLDAgKzEsMTA3IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBhbmQgbGlicmFyaWVzIGZvciBwcm9kdWNpbmcgbXVsdGktbGluZ3VhbCBtZXNzYWdlcyIKK0RFU0NSSVBUSU9OID0gIkdOVSBnZXR0ZXh0IGlzIGEgc2V0IG9mIHRvb2xzIHRoYXQgcHJvdmlkZXMgYSBmcmFtZXdvcmsgdG8gaGVscCBvdGhlciBwcm9ncmFtcyBwcm9kdWNlIG11bHRpLWxpbmd1YWwgbWVzc2FnZXMuIFRoZXNlIHRvb2xzIGluY2x1ZGUgYSBzZXQgb2YgY29udmVudGlvbnMgYWJvdXQgaG93IHByb2dyYW1zIHNob3VsZCBiZSB3cml0dGVuIHRvIHN1cHBvcnQgbWVzc2FnZSBjYXRhbG9ncywgYSBkaXJlY3RvcnkgYW5kIGZpbGUgbmFtaW5nIG9yZ2FuaXphdGlvbiBmb3IgdGhlIG1lc3NhZ2UgY2F0YWxvZ3MgdGhlbXNlbHZlcywgYSBydW50aW1lIGxpYnJhcnkgc3VwcG9ydGluZyB0aGUgcmV0cmlldmFsIG9mIHRyYW5zbGF0ZWQgbWVzc2FnZXMsIGFuZCBhIGZldyBzdGFuZC1hbG9uZSBwcm9ncmFtcyB0byBtYXNzYWdlIGluIHZhcmlvdXMgd2F5cyB0aGUgc2V0cyBvZiB0cmFuc2xhdGFibGUgYW5kIGFscmVhZHkgdHJhbnNsYXRlZCBzdHJpbmdzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nZXR0ZXh0L2dldHRleHQuaHRtbCIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05ZWEzMTQ0ZjA0YzQxY2QyZWFkYTVkM2Y0NzJlNmVhNSIKKworUFIgPSAicjYiCitERVBFTkRTID0gInZpcnR1YWwvbGliaWNvbnYiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYmludGwgdmlydHVhbC9nZXR0ZXh0IgorUFJPVklERVNfY2xhc3MtbmF0aXZlID0gIiIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dldHRleHQvZ2V0dGV4dC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZ2V0dGV4dC12cGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saW5rbGliX2Zyb21fMC4xNy5wYXRjaCBcCisJICAgZmlsZTovL2dldHRleHQtYXV0b2NvbmYtbGliLWxpbmstbm8tTC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX2phdmEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X2FjbG9jYWxfdmVyc2lvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfZ251X3NvdXJjZV9jaXJjdWxhci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9oYXJkY29kZV9tYWNyb192ZXJzaW9uLnBhdGNoIFwKKyAgICAgICAgICAiCisKK0xERkxBR1NfcHJlcGVuZF9saWJjLXVjbGliYyA9ICIgLWxydCAtbHB0aHJlYWQgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2Q5YWQyNDMwMWM2ZDZiMTdlYzMwNzA0YTEzZmUxMjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGJmODUwZDFhMDc5ZmI1YTYxZjBhNDdiMWE5ZWZkMzVlYjQ0MDMyMjU1Mzc1ZTFjZWRiMDI1M2JjMjdiMzc2ZCIKKworUEFSQUxMRUxfTUFLRSA9ICIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlzcCAtLWRpc2FibGUtY3NoYXJwIC0tZGlzYWJsZS1vcGVubXAgLS13aXRob3V0LWVtYWNzIgorYWNwYXRocyA9ICctSSAke1N9L2F1dG9jb25mLWxpYi1saW5rL200LyBcCisgICAgICAgICAgIC1JICR7U30vZ2V0dGV4dC1ydW50aW1lL200IFwKKyAgICAgICAgICAgLUkgJHtTfS9nZXR0ZXh0LXRvb2xzL200JworCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlybSAtZiAke1N9L2NvbmZpZy9tNC9saWJ0b29sLm00Cit9CisKKyMgdGhlc2UgbGFjayB0aGUgLnggYmVoaW5kIHRoZSAuc28sIGJ1dCBzaG91bGRuJ3QgYmUgaW4gdGhlIC1kZXYgcGFja2FnZQorIyBPdGhlcndpc2UgeW91IGdldCB0aGUgZm9sbG93aW5nIHJlc3VsdHM6CisjIDcuNE0gICAgZ2xpYmMvaW1hZ2VzL2VwOTN4eC9BbmdzdHJvbS1jb25zb2xlLWltYWdlLWdsaWJjLWlway0yMDA4LjEtdGVzdC0yMDA4MDEwNC1lcDkzeHgucm9vdGZzLnRhci5negorIyAyNU0gICAgIHVjbGliYy9pbWFnZXMvZXA5M3h4L0FuZ3N0cm9tLWNvbnNvbGUtaW1hZ2UtdWNsaWJjLWlway0yMDA4LjEtdGVzdC0yMDA4MDEwNC1lcDkzeHgucm9vdGZzLnRhci5negorIyBiZWNhdXNlIGdldHRleHQgZGVwZW5kcyBvbiBnZXR0ZXh0LWRldiwgd2hpY2ggcHVsbHMgaW4gbW9yZSAtZGV2IHBhY2thZ2VzOgorIyAxNTIyOCAgIEtpQiAvZXA5M3h4L2xpYnN0ZGMrKy1kZXZfNC4yLjItcjJfZXA5M3h4LmlwaworIyAxMzAwICAgIEtpQiAvZXA5M3h4L3VjbGliYy1kZXZfMC45LjI5LXI4X2VwOTN4eC5pcGsKKyMgMTQwICAgICBLaUIgL2FybXY0dC9nZXR0ZXh0LWRldl8wLjE0LjEtcjZfYXJtdjR0LmlwaworIyA0ICAgICAgIEtpQiAvZXA5M3h4L2xpYmdjYy1zLWRldl80LjIuMi1yMl9lcDkzeHguaXBrCisKK1BBQ0tBR0VTID0rICJsaWJnZXR0ZXh0bGliIGxpYmdldHRleHRzcmMiCitGSUxFU19saWJnZXR0ZXh0bGliID0gIiR7bGliZGlyfS9saWJnZXR0ZXh0bGliLSouc28qIgorRklMRVNfbGliZ2V0dGV4dHNyYyA9ICIke2xpYmRpcn0vbGliZ2V0dGV4dHNyYy0qLnNvKiIKKworUEFDS0FHRVMgPSsgImdldHRleHQtcnVudGltZSBnZXR0ZXh0LXJ1bnRpbWUtZGV2IGdldHRleHQtcnVudGltZS1zdGF0aWNkZXYgZ2V0dGV4dC1ydW50aW1lLWRvYyIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vKiIKKworRklMRVNfZ2V0dGV4dC1ydW50aW1lID0gIiR7YmluZGlyfS9nZXR0ZXh0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vbmdldHRleHQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9lbnZzdWJzdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2dldHRleHQuc2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJhc3ByaW50ZiR7U09ERVZ9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vR05VLkdldHRleHQuZGxsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICIKK0ZJTEVTX2dldHRleHQtcnVudGltZV9hcHBlbmRfbGliYy11Y2xpYmMgPSAiICR7bGliZGlyfS9saWJpbnRsLnNvLiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2NoYXJzZXQuYWxpYXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKK0ZJTEVTX2dldHRleHQtcnVudGltZS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9saWJhc3ByaW50Zi5hIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLWRldiArPSAiJHtpbmNsdWRlZGlyfS9hdXRvc3ByaW50Zi5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJhc3ByaW50ZiR7U09MSUJERVZ9IgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLWRldl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiICR7bGliZGlyfS9saWJpbnRsLnNvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L2xpYmludGwuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKK0ZJTEVTX2dldHRleHQtcnVudGltZS1kb2MgPSAiJHttYW5kaXJ9L21hbjEvZ2V0dGV4dC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvbmdldHRleHQuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xL2VudnN1YnN0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS8uKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4zLyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC9nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC9uZ2V0dGV4dC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvZW52c3Vic3QuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0LyouMy5odG1sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9nZXR0ZXh0L0FCT1VULU5MUyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L2NzaGFycGRvYy8qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2xpYmFzcHJpbnRmL2F1dG9zcHJpbnRmLmh0bWwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2luZm9kaXJ9L2F1dG9zcHJpbnRmLmluZm8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKKworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAtZiAke0R9JHtsaWJkaXJ9L3ByZWxvYWRhYmxlX2xpYmludGwuc28KK30KKworIyBBbnlvbmUgaW5oZXJpdGluZyBnZXR0ZXh0IHdpbGwgaGF2ZSBib3RoIGdldHRleHQtbmF0aXZlIGFuZCBnZXR0ZXh0CisjIGF2YWlsYWJsZSwgYW5kIHdlIGRvbid0IHdhbnQgdG8gdXNlIG9sZGVyIG1hY3JvcyBmcm9tIHRoZSB0YXJnZXQgZ2V0dGV4dCBpbgorIyBhIG5vbi1ncGx2MyBidWlsZCwgc28ga2lsbCB0aGVtIGFuZCBsZXQgZGVwZW5kZW50IHJlY2lwZXMgcmVseSBvbgorIyBnZXR0ZXh0LW5hdGl2ZS4KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJyZW1vdmVfc3lzcm9vdF9tNF9tYWNyb3MiCisKK3JlbW92ZV9zeXNyb290X200X21hY3JvcyAoKSB7CisgICAgcm0gLXIgIiR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vYWNsb2NhbCIKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHRfMC4xOS40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHRfMC4xOS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYmY2YzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE5LjQuYmIKQEAgLTAsMCArMSwxMDYgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGFuZCBsaWJyYXJpZXMgZm9yIHByb2R1Y2luZyBtdWx0aS1saW5ndWFsIG1lc3NhZ2VzIgorREVTQ1JJUFRJT04gPSAiR05VIGdldHRleHQgaXMgYSBzZXQgb2YgdG9vbHMgdGhhdCBwcm92aWRlcyBhIGZyYW1ld29yayB0byBoZWxwIG90aGVyIHByb2dyYW1zIHByb2R1Y2UgbXVsdGktbGluZ3VhbCBtZXNzYWdlcy4gVGhlc2UgdG9vbHMgaW5jbHVkZSBhIHNldCBvZiBjb252ZW50aW9ucyBhYm91dCBob3cgcHJvZ3JhbXMgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gc3VwcG9ydCBtZXNzYWdlIGNhdGFsb2dzLCBhIGRpcmVjdG9yeSBhbmQgZmlsZSBuYW1pbmcgb3JnYW5pemF0aW9uIGZvciB0aGUgbWVzc2FnZSBjYXRhbG9ncyB0aGVtc2VsdmVzLCBhIHJ1bnRpbWUgbGlicmFyeSBzdXBwb3J0aW5nIHRoZSByZXRyaWV2YWwgb2YgdHJhbnNsYXRlZCBtZXNzYWdlcywgYW5kIGEgZmV3IHN0YW5kLWFsb25lIHByb2dyYW1zIHRvIG1hc3NhZ2UgaW4gdmFyaW91cyB3YXlzIHRoZSBzZXRzIG9mIHRyYW5zbGF0YWJsZSBhbmQgYWxyZWFkeSB0cmFuc2xhdGVkIHN0cmluZ3MuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dldHRleHQvZ2V0dGV4dC5odG1sIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MysgJiBMR1BMLTIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworREVQRU5EUyA9ICJnZXR0ZXh0LW5hdGl2ZSB2aXJ0dWFsL2xpYmljb252IGV4cGF0IgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiZ2V0dGV4dC1taW5pbWFsLW5hdGl2ZSIKK1BST1ZJREVTID0gInZpcnR1YWwvbGliaW50bCB2aXJ0dWFsL2dldHRleHQiCitQUk9WSURFU19jbGFzcy1uYXRpdmUgPSAidmlydHVhbC9nZXR0ZXh0LW5hdGl2ZSIKK1JDT05GTElDVFNfJHtQTn0gPSAicHJveHktbGliaW50bCIKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nZXR0ZXh0L2dldHRleHQtJHtQVn0udGFyLmd6IFwKKwkgICBmaWxlOi8vcGFyYWxsZWwucGF0Y2ggXAorICAgICAgICAgICIKKworUEFDS0FHRUNPTkZJR1ttc2djYXQtY3Vyc2VzXSA9ICItLXdpdGgtbGlibmN1cnNlcy1wcmVmaXg9JHtTVEFHSU5HX0xJQkRJUn0vLi4sLS1kaXNhYmxlLWN1cnNlcyxuY3Vyc2VzLCIKKworTERGTEFHU19wcmVwZW5kX2xpYmMtdWNsaWJjID0gIiAtbHJ0IC1scHRocmVhZCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkMzUxMWFmMWU2MDRhMzQ3ODkwMGQyYzJiNGE0YTQ4ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4YWM5ZjFlZDFhNWY4YzRlNjU2YTJmMzdmNWJhNmI5ZWUwNGM0ZGY3OWE1NzVlODc2YjBiNjk0NmFhNDE3ZjNmIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWxpc3BkaXIgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtY3NoYXJwIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxpYmFzcHJpbnRmIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWphdmEgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtbmF0aXZlLWphdmEgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtb3Blbm1wIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWFjbCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1pbmNsdWRlZC1nbGliIFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LWVtYWNzIFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LWN2cyBcCisgICAgICAgICAgICAgICAgIC0td2l0aG91dC1naXQgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtaW5jbHVkZWQtbGlieG1sIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWluY2x1ZGVkLWxpYmNyb2NvIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWluY2x1ZGVkLWxpYnVuaXN0cmluZyBcCisgICAgICAgICAgICAgICAgIgorCithY3BhdGhzID0gJy1JICR7U30vZ2V0dGV4dC1ydW50aW1lL200IFwKKyAgICAgICAgICAgLUkgJHtTfS9nZXR0ZXh0LXRvb2xzL200JworCisKKyMgdGhlc2UgbGFjayB0aGUgLnggYmVoaW5kIHRoZSAuc28sIGJ1dCBzaG91bGRuJ3QgYmUgaW4gdGhlIC1kZXYgcGFja2FnZQorIyBPdGhlcndpc2UgeW91IGdldCB0aGUgZm9sbG93aW5nIHJlc3VsdHM6CisjIDcuNE0gICAgZ2xpYmMvaW1hZ2VzL2VwOTN4eC9BbmdzdHJvbS1jb25zb2xlLWltYWdlLWdsaWJjLWlway0yMDA4LjEtdGVzdC0yMDA4MDEwNC1lcDkzeHgucm9vdGZzLnRhci5negorIyAyNU0gICAgIHVjbGliYy9pbWFnZXMvZXA5M3h4L0FuZ3N0cm9tLWNvbnNvbGUtaW1hZ2UtdWNsaWJjLWlway0yMDA4LjEtdGVzdC0yMDA4MDEwNC1lcDkzeHgucm9vdGZzLnRhci5negorIyBiZWNhdXNlIGdldHRleHQgZGVwZW5kcyBvbiBnZXR0ZXh0LWRldiwgd2hpY2ggcHVsbHMgaW4gbW9yZSAtZGV2IHBhY2thZ2VzOgorIyAxNTIyOCAgIEtpQiAvZXA5M3h4L2xpYnN0ZGMrKy1kZXZfNC4yLjItcjJfZXA5M3h4LmlwaworIyAxMzAwICAgIEtpQiAvZXA5M3h4L3VjbGliYy1kZXZfMC45LjI5LXI4X2VwOTN4eC5pcGsKKyMgMTQwICAgICBLaUIgL2FybXY0dC9nZXR0ZXh0LWRldl8wLjE0LjEtcjZfYXJtdjR0LmlwaworIyA0ICAgICAgIEtpQiAvZXA5M3h4L2xpYmdjYy1zLWRldl80LjIuMi1yMl9lcDkzeHguaXBrCisKK1BBQ0tBR0VTID0rICJsaWJnZXR0ZXh0bGliIGxpYmdldHRleHRzcmMiCitGSUxFU19saWJnZXR0ZXh0bGliID0gIiR7bGliZGlyfS9saWJnZXR0ZXh0bGliLSouc28qIgorRklMRVNfbGliZ2V0dGV4dHNyYyA9ICIke2xpYmRpcn0vbGliZ2V0dGV4dHNyYy0qLnNvKiIKKworUEFDS0FHRVMgPSsgImdldHRleHQtcnVudGltZSBnZXR0ZXh0LXJ1bnRpbWUtZGV2IGdldHRleHQtcnVudGltZS1kb2MiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vJHtCUE59LyoiCisKK0ZJTEVTX2dldHRleHQtcnVudGltZSA9ICIke2JpbmRpcn0vZ2V0dGV4dCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L25nZXR0ZXh0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZW52c3Vic3QgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9nZXR0ZXh0LnNoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliYXNwcmludGYuc28qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vR05VLkdldHRleHQuZGxsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICIKK0ZJTEVTX2dldHRleHQtcnVudGltZV9hcHBlbmRfbGliYy11Y2xpYmMgPSAiICR7bGliZGlyfS9saWJpbnRsLnNvLiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2NoYXJzZXQuYWxpYXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKK0ZJTEVTX2dldHRleHQtcnVudGltZS1kZXYgKz0gIiR7bGliZGlyfS9saWJhc3ByaW50Zi5hIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L2F1dG9zcHJpbnRmLmggXAorICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLWRldl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiICR7bGliZGlyfS9saWJpbnRsLnNvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L2xpYmludGwuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKK0ZJTEVTX2dldHRleHQtcnVudGltZS1kb2MgPSAiJHttYW5kaXJ9L21hbjEvZ2V0dGV4dC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvbmdldHRleHQuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xL2VudnN1YnN0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS8uKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4zLyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC9nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC9uZ2V0dGV4dC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvZW52c3Vic3QuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0LyouMy5odG1sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9nZXR0ZXh0L0FCT1VULU5MUyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L2NzaGFycGRvYy8qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2xpYmFzcHJpbnRmL2F1dG9zcHJpbnRmLmh0bWwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2luZm9kaXJ9L2F1dG9zcHJpbnRmLmluZm8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9wcmVsb2FkYWJsZV9saWJpbnRsLnNvCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisJcm0gJHtEfSR7ZGF0YWRpcn0vYWNsb2NhbC8qCisJcm0gJHtEfSR7ZGF0YWRpcn0vZ2V0dGV4dC9jb25maWcucnBhdGgKKwlybSAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvL01ha2VmaWxlLmluLmluCisJcm0gJHtEfSR7ZGF0YWRpcn0vZ2V0dGV4dC9wby9yZW1vdmUtcG90Y2RhdGUuc2luCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvMDAwMS1SZW1vdmUtdGhlLXdhcm5pbmctYWJvdXQtZGVwcmVjYXRlZC1wYXRocy1pbi1zY2hlbWFzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAxLVJlbW92ZS10aGUtd2FybmluZy1hYm91dC1kZXByZWNhdGVkLXBhdGhzLWluLXNjaGVtYXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFhMTkwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvMDAwMS1SZW1vdmUtdGhlLXdhcm5pbmctYWJvdXQtZGVwcmVjYXRlZC1wYXRocy1pbi1zY2hlbWFzLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Zyb20gNDE1MzQyNTNiNmI2MWVkNDc2OWViNmEzOTY2Njk4YTUwZWU3M2I3MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogRnJpLCAxMiBKdW4gMjAxNSAxNzowODo0NiArMDMwMAorU3ViamVjdDogW1BBVENIXSBSZW1vdmUgdGhlIHdhcm5pbmcgYWJvdXQgZGVwcmVjYXRlZCBwYXRocyBpbiBzY2hlbWFzCisKK1NvbWUgc2NoZW1hcyBpbiBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIChzdWNoIGFzIHByb3h5IGFuZCBsb2NhbGUpCithcmUgc3RpbGwgdXNpbmcgZGVwcmVjYXRlZCBwYXRocywgYXMgb2YgMy4xNi4xLiBUaGlzIGNhdXNlcyB3YXJuaW5nCittZXNzYWdlcywgYW5kIG1ldGEvbGliL29lL3Jvb3Rmcy5weSBjb21wbGFpbnRzIGFib3V0IHRoZW0uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CisKKy0tLQorIGdpby9nbGliLWNvbXBpbGUtc2NoZW1hcy5jIHwgNiAtLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dpby9nbGliLWNvbXBpbGUtc2NoZW1hcy5jIGIvZ2lvL2dsaWItY29tcGlsZS1zY2hlbWFzLmMKK2luZGV4IGU0Mjk0OWIuLmVjNzlkN2MgMTAwNjQ0CistLS0gYS9naW8vZ2xpYi1jb21waWxlLXNjaGVtYXMuYworKysrIGIvZ2lvL2dsaWItY29tcGlsZS1zY2hlbWFzLmMKK0BAIC0xMjAyLDEyICsxMjAyLDYgQEAgcGFyc2Vfc3RhdGVfc3RhcnRfc2NoZW1hIChQYXJzZVN0YXRlICAqc3RhdGUsCisgICAgICAgcmV0dXJuOworICAgICB9CisgCistICBpZiAocGF0aCAmJiAoZ19zdHJfaGFzX3ByZWZpeCAocGF0aCwgIi9hcHBzLyIpIHx8CistICAgICAgICAgICAgICAgZ19zdHJfaGFzX3ByZWZpeCAocGF0aCwgIi9kZXNrdG9wLyIpIHx8CistICAgICAgICAgICAgICAgZ19zdHJfaGFzX3ByZWZpeCAocGF0aCwgIi9zeXN0ZW0vIikpKQorLSAgICBnX3ByaW50ZXJyICgid2FybmluZzogU2NoZW1hICclcycgaGFzIHBhdGggJyVzJy4gIFBhdGhzIHN0YXJ0aW5nIHdpdGggIgorLSAgICAgICAgICAgICAgICAiJy9hcHBzLycsICcvZGVza3RvcC8nIG9yICcvc3lzdGVtLycgYXJlIGRlcHJlY2F0ZWQuXG4iLCBpZCwgcGF0aCk7CistCisgICBzdGF0ZS0+c2NoZW1hX3N0YXRlID0gc2NoZW1hX3N0YXRlX25ldyAocGF0aCwgZ2V0dGV4dF9kb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kcywgZXh0ZW5kc19uYW1lLCBsaXN0X29mKTsKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAxLWNvbmZpZ3VyZS5hYy1Eby1ub3QtdXNlLXJlYWRsaW5rLXdoZW4tY3Jvc3MtY29tcGlsaW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wLzAwMDEtY29uZmlndXJlLmFjLURvLW5vdC11c2UtcmVhZGxpbmstd2hlbi1jcm9zcy1jb21waWxpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmUzNjMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAxLWNvbmZpZ3VyZS5hYy1Eby1ub3QtdXNlLXJlYWRsaW5rLXdoZW4tY3Jvc3MtY29tcGlsaW4ucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorY29tbWl0IDliMzhkNTA3ZWMzN2IzZDdkNGRmNjA5NWZhN2VkMTZiNDdkMzk5ZjcKK0F1dGhvcjogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KK0RhdGU6ICAgU2F0IE1hciAyOSAyMToxMDo0MyAyMDE0IC0wNDAwCisKKyAgICBjb25maWd1cmUuYWM6IERvIG5vdCB1c2UgcmVhZGxpbmsgd2hlbiBjcm9zcyBjb21waWxpbmcuCisKKyAgICBEbyBub3QgdXNlIHJlYWRsaW5rIHRvIHNldCBBQlNfR0xJQl9SVU5USU1FX0xJQkRJUiB3aGVuIGNyb3NzCisgICAgY29tcGlsaW5nLiAgRG9pbmcgc28gY2F1c2VzIGhvc3QgcGF0aHMgdG8gcG90ZW50aWFsbHkgcG9sbHV0ZQorICAgIHRoZSB0YXJnZXQuCisKKyAgICBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlIHRoZSBwYXRoIGlzIG5vdCBjb252ZXJ0ZWQgdG8gYWJzb2x1dGUgaWYKKyAgICBpdCBjb250YWlucyBhbnkgIi4uIiByZWZlcmVuY2VzIHNvIGl0J3Mgbm90IGNvbXBsZXRlbHkgY29ycmVjdC4KKworICAgIFVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3NTc1XQorICAgIFNpZ25lZC1vZmYtYnk6IERyZXcgTW9zZWxleSA8ZHJld19tb3NlbGV5QG1lbnRvci5jb20+CisKK2RpZmYgLXJ1YiBnbGliLTIuMzguMi5vcmlnL2NvbmZpZ3VyZS5hYyBnbGliLTIuMzguMi9jb25maWd1cmUuYWMKKy0tLSBnbGliLTIuMzguMi5vcmlnL2NvbmZpZ3VyZS5hYwkyMDE0LTA0LTAzIDIwOjE3OjEzLjAzNTU2NzE0MyAtMDQwMAorKysrIGdsaWItMi4zOC4yL2NvbmZpZ3VyZS5hYwkyMDE0LTA0LTAzIDIwOjE5OjA3LjA3MTU2NjA1NyAtMDQwMAorQEAgLTI3NSw3ICsyNzUsMTEgQEAKKyAgICAgICAgICAgIFtdLAorIAkgICBbd2l0aF9ydW50aW1lX2xpYmRpcj0iIl0pCisgR0xJQl9SVU5USU1FX0xJQkRJUj0iJHdpdGhfcnVudGltZV9saWJkaXIiCisrQVNfSUYoWyB0ZXN0ICRjcm9zc19jb21waWxpbmcgPSB5ZXMgXSwgWworK0FCU19HTElCX1JVTlRJTUVfTElCRElSPSIkbGliZGlyLyR3aXRoX3J1bnRpbWVfbGliZGlyIgorK10sIFsKKyBBQlNfR0xJQl9SVU5USU1FX0xJQkRJUj0iYHJlYWRsaW5rIC1tICRsaWJkaXIvJHdpdGhfcnVudGltZV9saWJkaXJgIgorK10pCisgQUNfU1VCU1QoR0xJQl9SVU5USU1FX0xJQkRJUikKKyBBQ19TVUJTVChBQlNfR0xJQl9SVU5USU1FX0xJQkRJUikKKyBBTV9DT05ESVRJT05BTChIQVZFX0dMSUJfUlVOVElNRV9MSUJESVIsIFt0ZXN0ICJ4JHdpdGhfcnVudGltZV9saWJkaXIiICE9ICJ4Il0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2FkZC1tYXJjaC1pNDg2LWludG8tQ0ZMQUdTLWF1dG9tYXRpY2FsbHkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2FkZC1tYXJjaC1pNDg2LWludG8tQ0ZMQUdTLWF1dG9tYXRpY2FsbHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhYzM1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvYWRkLW1hcmNoLWk0ODYtaW50by1DRkxBR1MtYXV0b21hdGljYWxseS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIDU1MjUzYjU1YjljNjVmM2UwZWZiYmUwM2NiYWIyYTRjNDAxNGExNmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTb25nLkxpIDxTb25nLkxpQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDUgSnVsIDIwMTIgMTU6MDk6NDEgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gYWRkIC1tYXJjaD1pNDg2IGludG8gQ0ZMQUdTIGF1dG9tYXRpY2FsbHkKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitnbGliIGNvbmZpZ3VyZSB3aWxsIGNoZWNrIGlmIGN1cnJlbnQgZ2NjIG5lZWQgLW1hcmNoPWk0ODYsCit3aGVuIGdjYyBuZWVkIC1tYXJjaD1pNDg2IGJ1dCBDRkxBR1MgZG9uJ3QgaGF2ZSwKK2dsaWIgY29uZmlndXJlIHdpbGwgYWJvcnQgYW5kIGFkdmlzZSB0aGUgdXNlciB0byBhZGQgLW1hcmNoPWk0ODYgb3IgbGF0ZXIuCitUaGlzIHdpbGwgYnJlYWsgdGhlIGJ1aWxkIHByb2Nlc3MsaXQncyBub3QgZ29vZCBmb3IgYXV0b21hdGljIGJ1aWxkIHN5c3RlbS4KK3NvIGNoYW5nZSB0aGlzIHRvIGFkZGluZyAtbWFyY2g9aTQ4NSBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgaXMgbmVlZGVkLgorLS0tCisgY29uZmlndXJlLmFjIHwgICAgNiArKysrLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdsaWItMi4zNi4wL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdsaWItMi4zNi4wLm9yaWcvY29uZmlndXJlLmFjCisrKysgZ2xpYi0yLjM2LjAvY29uZmlndXJlLmFjCitAQCAtMjM3OCw3ICsyMzc4LDcgQEAgZG5sCisgZG5sIE5vdGUgdGhhdCB0aGUgYXRvbWljIG9wcyBhcmUgb25seSBhdmFpbGFibGUgd2l0aCBHQ0Mgb24geDg2IHdoZW4KKyBkbmwgdXNpbmcgLW1hcmNoPWk0ODYgb3IgaGlnaGVyLiAgSWYgd2UgZGV0ZWN0IHRoYXQgdGhlIGF0b21pYyBvcHMgYXJlCisgZG5sIG5vdCBhdmFpbGFibGUgYnV0IHdvdWxkIGJlIGF2YWlsYWJsZSBnaXZlbiB0aGUgcmlnaHQgZmxhZ3MsIHdlIHdhbnQKKy1kbmwgdG8gYWJvcnQgYW5kIGFkdmlzZSB0aGUgdXNlciB0byBmaXggdGhlaXIgQ0ZMQUdTLiAgSXQncyBiZXR0ZXIgdG8gZG8KKytkbmwgdG8gYWRkIC1tYXJjaD1pNDg2IGF1dG9tYXRpY2FsbHkgdG8gZml4IHRoZWlyIENGTEFHUy4gIEl0J3MgYmV0dGVyIHRvIGRvCisgZG5sIHRoYXQgdGhlbiB0byBzaWxlbnRseSBmYWxsIGJhY2sgb24gZW11bGF0ZWQgYXRvbWljIG9wcyBqdXN0IGJlY2F1c2UKKyBkbmwgdGhlIHVzZXIgaGFkIHRoZSB3cm9uZyBidWlsZCBlbnZpcm9ubWVudC4KKworQEAgLTI0MDEsNyArMjQwMSw4IEBAIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbG9jay1mcmVlIGF0b21pYyBpbnQKKyAgICAgICAgIEFDX1RSWV9DT01QSUxFKFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgW3ZvbGF0aWxlIGludCBhdG9taWMgPSAyO1wKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwICgmYXRvbWljLCAyLCAzKTtdLAorLSAgICAgICAgICAgICAgICAgICAgICAgW0FDX01TR19FUlJPUihbR0xpYiBtdXN0IGJlIGJ1aWxkIHdpdGggLW1hcmNoPWk0ODYgb3IgbGF0ZXIuXSldLAorKyAgICAgICAgICAgICAgICAgICAgICAgW0FDX01TR19XQVJOKFtHTGliIG11c3QgYmUgYnVpbGQgd2l0aCAtbWFyY2g9aTQ4NiBvciBsYXRlci5dKQorKyAgICAgICAgICAgICAgICAgICAgICAgU0FWRV9DRkxBR1M9IiR7U0FWRV9DRkxBR1N9IC1tYXJjaD1pNDg2Il0sCisgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKyAgICAgICAgIENGTEFHUz0iJHtTQVZFX0NGTEFHU30iCisgICAgICAgZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvYWxsb3ctcnVuLW1lZGlhLXNkWC1kcml2ZS1tb3VudC1pZi11c2VybmFtZS1yb290LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9hbGxvdy1ydW4tbWVkaWEtc2RYLWRyaXZlLW1vdW50LWlmLXVzZXJuYW1lLXJvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QwYzAwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvYWxsb3ctcnVuLW1lZGlhLXNkWC1kcml2ZS1tb3VudC1pZi11c2VybmFtZS1yb290LnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gYzUzZTk0YTUyMGI1NzNhYTBkY2YxMjkwM2U5NTYzZmU4YmFkYzM0YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcml1cyBBdnJhbSA8bWFyaXVzLmF2cmFtQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMTI6MTA6NDEgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWxsb3cgL3J1bi9tZWRpYS9zZFggZHJpdmUgbW91bnQgaWYgdXNlcm5hbWUgcm9vdAorCitJbiBjYXNlIHRoYXQgdGhlIHVzZXJuYW1lIGxvZ2dlZCBpbiB0aGUgc3lzdGVtIGlzIHJvb3QKK3RoZSBkcml2ZXMgYXJlIGRpcmVjdGx5IG1vdW50ZWQgaW4gL3J1bi9tZWRpYS9zZFggYW5kCitub3QgL3J1bi9tZWRpYS88dXNlcm5hbWU+L3NkWCBhcyB0aGUgZnVuY3Rpb24KK2dfdW5peF9tb3VudF9ndWVzc19zaG91bGRfZGlzcGxheSgpIGV4cGVjdHMuCisKK1dpdGhvdXQgdGhpcyBjaGFuZ2UgVVNCIHN0aWNrIG1vdW50cyBhcmUgbm90IGFjY2VzaWJsZSBmcm9tCitncmFwaGljYWwgYXBwbGljYXRpb25zIHN1Y2ggYXMgdGhlIEZpbGUgTWFuYWdlciAocGNtYW5mbSkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBNYXJpdXMgQXZyYW0gPG1hcml1cy5hdnJhbUBpbnRlbC5jb20+CistLS0KKyBnaW8vZ3VuaXhtb3VudHMuYyB8ICAgIDUgKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9naW8vZ3VuaXhtb3VudHMuYyBiL2dpby9ndW5peG1vdW50cy5jCitpbmRleCA0OTk5MzU0Li5mNmMxNDcyIDEwMDY0NAorLS0tIGEvZ2lvL2d1bml4bW91bnRzLmMKKysrKyBiL2dpby9ndW5peG1vdW50cy5jCitAQCAtMjEzNiw2ICsyMTM2LDExIEBAIGdfdW5peF9tb3VudF9ndWVzc19zaG91bGRfZGlzcGxheSAoR1VuaXhNb3VudEVudHJ5ICptb3VudF9lbnRyeSkKKyAgICAgICAgICAgbW91bnRfcGF0aFtzaXplb2YgKCIvcnVuL21lZGlhLyIpIC0gMSArIHVzZXJfbmFtZV9sZW5dID09ICcvJykKKyAgICAgICAgIGlzX2luX3J1bnRpbWVfZGlyID0gVFJVRTsKKyAKKysgICAgICAvKiBBbGxvdyBubyB1c2VybmFtZSBpbiBwYXRoIGluIC9ydW4vbWVkaWEgaWYgY3VycmVudCB1c2VyIGlzIHJvb3QgKi8KKysgICAgICBpZiAoc3RyY21wKHVzZXJfbmFtZSwgInJvb3QiKSA9PSAwICYmCisrICAgICAgICAgIHN0cm5jbXAgKG1vdW50X3BhdGgsICIvcnVuL21lZGlhLyIsIHNpemVvZigicnVuL21lZGlhIikpID09IDApCisrICAgICAgICBpc19pbl9ydW50aW1lX2RpciA9IFRSVUU7CisrCisgICAgICAgaWYgKGlzX2luX3J1bnRpbWVfZGlyIHx8IGdfc3RyX2hhc19wcmVmaXggKG1vdW50X3BhdGgsICIvbWVkaWEvIikpCisgICAgICAgICB7CisgICAgICAgICAgIGNoYXIgKnBhdGg7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9jb25maWd1cmUtbGlidG9vbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvY29uZmlndXJlLWxpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ2OWEzZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvY29uZmlndXJlLWxpYnRvb2wucGF0Y2gKQEAgLTAsMCArMSw2MCBAQAorRnJvbSAxYzU3MTg2NDhkNDllNzk1ZWZlZTkxYzIyMGEyYmY5Mzg2YzE4NGYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogU2F0LCAyOCBBcHIgMjAxMiAxODoyNDo1MCArMDIwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmU6IHVzZSAkaG9zdF9hbGlhcy1saWJ0b29sIGluc3RlYWQgb2YgbGlidG9vbAorIGRpcmVjdGx5CisKK1Bva3kgcmVuYW1lcyBsaWJ0b29sIHRvICRob3N0X2FsaWFzLWxpYnRvb2wuCisuLyRob3N0X2FsaWFzLWxpYnRvb2wgaXNuJ3QgY3JlYXRlZCB1bnRpbCBhZnRlciBjb25maWd1cmUgcnVucyB3aXRoCitsaWJ0b29sID49IDIuMi4yCitzbyB3ZSBjYW4ndCBjYWxsICMgaXQgYXQgdGhpcyBwb2ludC4gV2UgY2FuIHNhZmVseSBhc3N1bWUgYSB2ZXJzaW9uIGlzCithdmFpbGFibGUKK2Zyb20gUEFUSCB0aG91Z2gKKworUmViYXNlZCB0byBnbGliLTIuMjcuMyBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorUmViYXNlZCB0byBnbGliLTIuMzIuMSBieSBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgICAgOCArKysrLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBhNjQ3OGM2Li45YTkzZDYwIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNDcwLDcgKzE0NzAsNyBAQCBpZiB0ZXN0IHgiJGdsaWJfbmF0aXZlX3dpbjMyIiA9IHh5ZXM7IHRoZW4KKyAgIEdfTU9EVUxFX0xERkxBR1M9CisgZWxzZQorICAgZXhwb3J0IFNFRAorLSAgR19NT0RVTEVfTERGTEFHUz1gKC4vbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorKyAgR19NT0RVTEVfTERGTEFHUz1gKC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorIGZpCisgZG5sIEdfTU9EVUxFX0lNUEw9IGRvbid0IHJlc2V0LCBzbyBjbWQtbGluZSBjYW4gb3ZlcnJpZGUKKyBHX01PRFVMRV9ORUVEX1VTQ09SRT0wCitAQCAtMTUzNSw5ICsxNTM1LDkgQEAgaWYgdGVzdCAiJEdfTU9EVUxFX0lNUEwiID0gIkdfTU9EVUxFX0lNUExfREwiOyB0aGVuCisgCUxERkxBR1M9IiRMREZMQUdTICRHX01PRFVMRV9MREZMQUdTIgorIGRubCAqKiogY2hlY2sgZm9yIE9TRjEvNS4wIFJUTERfR0xPQkFMIGJyb2tlbm5lc3MKKyAJZWNobyAidm9pZCBnbGliX3BsdWdpbl90ZXN0KHZvaWQpIHsgfSIgPiBwbHVnaW4uYworLQkke1NIRUxMfSAuL2xpYnRvb2wgLS1tb2RlPWNvbXBpbGUgLS10YWc9Q0MgJHtDQ30gJHtDRkxBR1N9IFwKKysJJHtTSEVMTH0gLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tbW9kZT1jb21waWxlIC0tdGFnPUNDICR7Q0N9ICR7Q0ZMQUdTfSBcCisgCQkke0NQUEZMQUdTfSAtYyAtbyBwbHVnaW4ubG8gcGx1Z2luLmMgPi9kZXYvbnVsbCAyPiYxCistCSR7U0hFTEx9IC4vbGlidG9vbCAtLW1vZGU9bGluayAtLXRhZz1DQyAke0NDfSAke0NGTEFHU30gXAorKwkke1NIRUxMfSAuLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1tb2RlPWxpbmsgLS10YWc9Q0MgJHtDQ30gJHtDRkxBR1N9IFwKKyAJCSR7TERGTEFHU30gLW1vZHVsZSAtbyBwbHVnaW4ubGEgLWV4cG9ydC1keW5hbWljIFwKKyAJCS1zaHJleHQgIi5vIiAtYXZvaWQtdmVyc2lvbiBwbHVnaW4ubG8gXAorIAkJLXJwYXRoIC9kb250L2NhcmUgPi9kZXYvbnVsbCAyPiYxCitAQCAtMTYxNCw3ICsxNjE0LDcgQEAgZmkKKyAKKyBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHRoZSBzdWZmaXggb2YgbW9kdWxlIHNoYXJlZCBsaWJyYXJpZXMpCisgZXhwb3J0IFNFRAorLXNocmV4dF9jbWRzPWAuL2xpYnRvb2wgLS1jb25maWcgfCBncmVwICdec2hyZXh0X2NtZHM9J2AKKytzaHJleHRfY21kcz1gLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnIHwgZ3JlcCAnXnNocmV4dF9jbWRzPSdgCisgZXZhbCAkc2hyZXh0X2NtZHMKKyBtb2R1bGU9eWVzIGV2YWwgc3RkX3NocmV4dD0kc2hyZXh0X2NtZHMKKyAjIGNob3AgdGhlIGluaXRpYWwgZG90CistLSAKKzEuNy44LjYKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9maXgtY29uZmxpY3RpbmctcmFuZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZml4LWNvbmZsaWN0aW5nLXJhbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU3MTExMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZml4LWNvbmZsaWN0aW5nLXJhbmQucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorUmVuYW1lICdyYW5kJyB2YXJpYWJsZSB0byBhdm9pZCBjb25mbGljdC4KKworVXBzdHJlYW0tU3RhdHVzOiBwZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBCasO2cm4gU3RlbmJlcmcgPGJqc3RAZW5lYS5jb20+CisKK2RpZmYgLXUgZ2xpYi0yLjM0LjMvdGVzdHMvcmVmY291bnQvc2lnbmFscy5jfiBnbGliLTIuMzQuMy90ZXN0cy9yZWZjb3VudC9zaWduYWxzLmMKKy0tLSBnbGliLTIuMzQuMy90ZXN0cy9yZWZjb3VudC9zaWduYWxzLmMJMjAxMi0xMS0yNiAxNzo1Mjo0OC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbGliLTIuMzQuMy90ZXN0cy9yZWZjb3VudC9zaWduYWxzLmMJMjAxMy0wMi0wOCAxNDoyNDoxMC4wNTI0Nzc1NDYgKzAxMDAKK0BAIC05LDcgKzksNyBAQAorICNkZWZpbmUgTVlfSVNfVEVTVF9DTEFTUyh0Y2xhc3MpICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgodGNsYXNzKSwgR19UWVBFX1RFU1QpKQorICNkZWZpbmUgTVlfVEVTVF9HRVRfQ0xBU1ModGVzdCkgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKCh0ZXN0KSwgR19UWVBFX1RFU1QsIEdUZXN0Q2xhc3MpKQorIAorLXN0YXRpYyBHUmFuZCAqcmFuZDsKKytzdGF0aWMgR1JhbmQgKmdyYW5kOworIAorIHR5cGVkZWYgc3RydWN0IF9HVGVzdCBHVGVzdDsKKyB0eXBlZGVmIHN0cnVjdCBfR1Rlc3RDbGFzcyBHVGVzdENsYXNzOworQEAgLTg0LDcgKzg0LDcgQEAKKyAgICAgICBOVUxMCisgICAgIH07CisgCistICAgIHJhbmQgPSBnX3JhbmRfbmV3KCk7CisrICAgIGdyYW5kID0gZ19yYW5kX25ldygpOworIAorICAgICB0ZXN0X3R5cGUgPSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChHX1RZUEVfT0JKRUNULCAiR1Rlc3QiLAorICAgICAgICAgJnRlc3RfaW5mbywgMCk7CitAQCAtMjE4LDcgKzIxOCw3IEBACisgc3RhdGljIHZvaWQKKyBteV90ZXN0X2RvX3Byb3AgKEdUZXN0ICogdGVzdCkKKyB7CistICB0ZXN0LT52YWx1ZSA9IGdfcmFuZF9pbnQgKHJhbmQpOworKyAgdGVzdC0+dmFsdWUgPSBnX3JhbmRfaW50IChncmFuZCk7CisgICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUICh0ZXN0KSwgInRlc3QtcHJvcCIpOworIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZ2xpYi0yLjAtY29uZmlndXJlLXJlYWRsaW5rLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9nbGliLTIuMC1jb25maWd1cmUtcmVhZGxpbmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc1OWQxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZ2xpYi0yLjAtY29uZmlndXJlLXJlYWRsaW5rLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK2NvbmZpZ3VyZS5hYzogY2hhbmdlIHJlYWRsaW5rIC1mIHRvIC1tCisKK0NoYW5nZSAicmVhZGxpbmsgLWYiIHRvICJyZWFkbGluayAtbSIgc2luY2UgJGxpYmRpci8kd2l0aF9ydW50aW1lX2xpYmRpcgorbWF5IG5vdCBleGlzdC4KKworVGhpcyBwYXRjaCBzaG91bGQgZ28gdG8gdGhlIHVwc3RyZWFtLCBJIHdpbGwgc2VuZCBpdCBzb29uZXIuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yNzEsNyArMjcxLDcgQEAgQUNfQVJHX1dJVEgocnVudGltZS1saWJkaXIsCisgICAgICAgICAgICBbXSwKKyAJICAgW3dpdGhfcnVudGltZV9saWJkaXI9IiJdKQorIEdMSUJfUlVOVElNRV9MSUJESVI9IiR3aXRoX3J1bnRpbWVfbGliZGlyIgorLUFCU19HTElCX1JVTlRJTUVfTElCRElSPSJgcmVhZGxpbmsgLWYgJGxpYmRpci8kd2l0aF9ydW50aW1lX2xpYmRpcmAiCisrQUJTX0dMSUJfUlVOVElNRV9MSUJESVI9ImByZWFkbGluayAtbSAkbGliZGlyLyR3aXRoX3J1bnRpbWVfbGliZGlyYCIKKyBBQ19TVUJTVChHTElCX1JVTlRJTUVfTElCRElSKQorIEFDX1NVQlNUKEFCU19HTElCX1JVTlRJTUVfTElCRElSKQorIEFNX0NPTkRJVElPTkFMKEhBVkVfR0xJQl9SVU5USU1FX0xJQkRJUiwgW3Rlc3QgIngkd2l0aF9ydW50aW1lX2xpYmRpciIgIT0gIngiXSkKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2dsaWItZ2V0dGV4dGl6ZS1kaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2dsaWItZ2V0dGV4dGl6ZS1kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0MzUxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZ2xpYi1nZXR0ZXh0aXplLWRpci5wYXRjaApAQCAtMCwwICsxLDI0IEBACisjIGFuIHZlcnkgb2xkIHBhdGNoIGNoZXJyeS1waWNrZWQgaW4gZXZlcnkgZ2xpYi0yLjAgcGF0Y2ggZGlyZWN0b3J5LiBUaGUgZWFybGllc3QgY29udGFpbmVyCisjIGZvciBpdCBpcyAyLjYuNSBpbiBPRS4gVGhlIGVhcmxpZXN0IGNvbW1pdCBmb3IgaXQgaXMgYzhlNTcwMjEyN2U1MDdlODJlNmY2OGE0YjhjNTQ2ODAzYWNjZWE5ZAorIyBpbiBPRSBzaWRlIHdoaWNoIHBvcnRzIGZyb20gcHJldmlvdXMgYml0a2VlcGVyIFNDTS4gSW4gT0Ugc2lkZSBpdCdzIG9ubHkgdXNlZCB0aWwgMi4xMi40LgorIworIyBrZWVwIGl0IHNpbmNlIGl0J3MgYWx3YXlzIGNsZWFuZXIgdG8gbm90IGhhcmRjb2RlIGRlc3RpbmF0aW9uIHBhdGguIFVzZSBAZGF0YWRpckAgaXMgbW9yZQorIyBwb3J0YWJsZSBoZXJlLiBtYXJrIGZvciB1cHN0cmVhbQorIworIyBieSBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4sIDA2LzI1LzIwMTAKKyMgUmViYXNlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPiwgMTEvMTYvMjAxMAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2RpZmYgLXJ1TiBnbGliLTIuMjcuMy1vcmlnL2dsaWItZ2V0dGV4dGl6ZS5pbiBnbGliLTIuMjcuMy9nbGliLWdldHRleHRpemUuaW4KKy0tLSBnbGliLTIuMjcuMy1vcmlnL2dsaWItZ2V0dGV4dGl6ZS5pbgkyMDA5LTA0LTAxIDA3OjA0OjIwLjAwMDAwMDAwMCArMDgwMAorKysrIGdsaWItMi4yNy4zL2dsaWItZ2V0dGV4dGl6ZS5pbgkyMDEwLTExLTE2IDEyOjU1OjA2Ljg3NDYwNTkxNiArMDgwMAorQEAgLTUyLDcgKzUyLDcgQEAKKyBkYXRhZGlyPUBkYXRhZGlyQAorIGRhdGFyb290ZGlyPUBkYXRhcm9vdGRpckAKKyAKKy1nZXR0ZXh0X2Rpcj0kcHJlZml4L3NoYXJlL2dsaWItMi4wL2dldHRleHQKKytnZXR0ZXh0X2Rpcj1AZGF0YWRpckAvZ2xpYi0yLjAvZ2V0dGV4dAorIAorIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisgICBjYXNlICIkMSIgaW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvcHRlc3QtcGF0aHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3B0ZXN0LXBhdGhzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYmUwMjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3B0ZXN0LXBhdGhzLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0luc3RlYWQgb2Ygd3JpdGluZyB0aGUgdGVtcG9yYXJ5IG1hcHBpbmcgZmlsZXMgaW4gdGhlIG1hcHBlZGZpbGUgdGVzdCB0byB0aGUKK3VzZXIgcnVudGltZSBkaXJlY3RvcnksIHdyaXRlIHRoZW0gdG8gJFRNUC4gIFRoZSBydW50aW1lIGRpcmVjdG9yeSBtYXkgbm90CitjdXJyZW50bHkgZXhpc3QgaWYgdGhlIHRlc3QgaXMgZXhlY3V0ZWQgb24gYSBub24tZGVza3RvcCBzeXN0ZW0gYW5kIHRoZSB0ZXN0Citkb2Vzbid0IGF0dGVtcHQgdG8gY3JlYXRlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9nbGliL3Rlc3RzL21hcHBlZGZpbGUuYyBiL2dsaWIvdGVzdHMvbWFwcGVkZmlsZS5jCitpbmRleCA0MGUwZTYwLi4yN2EyNGJlIDEwMDY0NAorLS0tIGEvZ2xpYi90ZXN0cy9tYXBwZWRmaWxlLmMKKysrKyBiL2dsaWIvdGVzdHMvbWFwcGVkZmlsZS5jCitAQCAtODEsNyArODEsNyBAQCB0ZXN0X3dyaXRhYmxlICh2b2lkKQorICAgY29uc3QgZ2NoYXIgKm5ldyA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2eHl6IjsKKyAgIGdjaGFyICp0bXBfY29weV9wYXRoOworIAorLSAgdG1wX2NvcHlfcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0X3VzZXJfcnVudGltZV9kaXIgKCksICJnbGliLXRlc3QtNDA5Ni1yYW5kb20tYnl0ZXMiLCBOVUxMKTsKKysgIHRtcF9jb3B5X3BhdGggPSBnX2J1aWxkX2ZpbGVuYW1lIChnX2dldF90bXBfZGlyICgpLCAiZ2xpYi10ZXN0LTQwOTYtcmFuZG9tLWJ5dGVzIiwgTlVMTCk7CisgCisgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzIChnX3Rlc3RfZ2V0X2ZpbGVuYW1lIChHX1RFU1RfRElTVCwgIjQwOTYtcmFuZG9tLWJ5dGVzIiwgTlVMTCksICZjb250ZW50cywgJmxlbiwgJmVycm9yKTsKKyAgIGdfYXNzZXJ0X25vX2Vycm9yIChlcnJvcik7CitAQCAtMTI1LDcgKzEyNSw3IEBAIHRlc3Rfd3JpdGFibGVfZmQgKHZvaWQpCisgICBpbnQgZmQ7CisgICBnY2hhciAqdG1wX2NvcHlfcGF0aDsKKyAKKy0gIHRtcF9jb3B5X3BhdGggPSBnX2J1aWxkX2ZpbGVuYW1lIChnX2dldF91c2VyX3J1bnRpbWVfZGlyICgpLCAiZ2xpYi10ZXN0LTQwOTYtcmFuZG9tLWJ5dGVzIiwgTlVMTCk7CisrICB0bXBfY29weV9wYXRoID0gZ19idWlsZF9maWxlbmFtZSAoZ19nZXRfdG1wX2RpciAoKSwgImdsaWItdGVzdC00MDk2LXJhbmRvbS1ieXRlcyIsIE5VTEwpOworIAorICAgZ19maWxlX2dldF9jb250ZW50cyAoZ190ZXN0X2dldF9maWxlbmFtZSAoR19URVNUX0RJU1QsICI0MDk2LXJhbmRvbS1ieXRlcyIsIE5VTEwpLCAmY29udGVudHMsICZsZW4sICZlcnJvcik7CisgICBnX2Fzc2VydF9ub19lcnJvciAoZXJyb3IpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzBhZTA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjISAvYmluL3NoCisKK2dub21lLWRlc2t0b3AtdGVzdGluZy1ydW5uZXIgZ2xpYgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC91Y2xpYmMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3VjbGliYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTE1NGZkZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvdWNsaWJjLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK0ZpeCBEQVRBRElSTkFNRSBvbiB1Y2xpYmMvTGludXgKKwordHJhbnNsYXRpb24gZmlsZXMgYXJlIGFsd2F5cyBpbnN0YWxsZWQgdW5kZXIgUFJFRklYL3NoYXJlL2xvY2FsZSBpbiB1Y2xpYmMKK2Jhc2VkIHN5c3RlbXMgdGhlcmVmb3JlIGxldHMgc2V0IERBVEFESVJOQU1FIHRvICJzaGFyZSIuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK0luZGV4OiBnbGliLTIuMzguMi9tNG1hY3Jvcy9nbGliLWdldHRleHQubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbGliLTIuMzguMi5vcmlnL200bWFjcm9zL2dsaWItZ2V0dGV4dC5tNAkyMDEzLTExLTA3IDA3OjI5OjEzLjAwMDAwMDAwMCAtMDgwMAorKysrIGdsaWItMi4zOC4yL200bWFjcm9zL2dsaWItZ2V0dGV4dC5tNAkyMDE0LTAzLTE1IDE0OjUxOjU0LjcxMjEzNTY0NCAtMDcwMAorQEAgLTIzOSw3ICsyMzksNyBAQAorIAkgICAgICBbQ0FUT0JKRVhUPS5tbworICAgICAgICAgICAgICAgIERBVEFESVJOQU1FPWxpYl0pCisgCSAgICA7OworLQkgICAgKi0qLW9wZW5ic2QqKQorKwkgICAgKi0qLW9wZW5ic2QqIHwgKi0qLWxpbnV4LXVjbGliYyopCisgCSAgICBDQVRPQkpFWFQ9Lm1vCisgICAgICAgICAgICAgREFUQURJUk5BTUU9c2hhcmUKKyAJICAgIDs7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wXzIuNDQuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjBfMi40NC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlM2QzNmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wXzIuNDQuMS5iYgpAQCAtMCwwICsxLDIzIEBACityZXF1aXJlIGdsaWIuaW5jCisKK1BFID0gIjEiCisKK1NIUlRfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9L2dsaWIvJHtTSFJUX1ZFUn0vZ2xpYi0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWxpYnRvb2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWNvbmZsaWN0aW5nLXJhbmQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWRkLW1hcmNoLWk0ODYtaW50by1DRkxBR1MtYXV0b21hdGljYWxseS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nbGliLTIuMC1jb25maWd1cmUtcmVhZGxpbmsucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL3B0ZXN0LXBhdGhzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VjbGliYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1Eby1ub3QtdXNlLXJlYWRsaW5rLXdoZW4tY3Jvc3MtY29tcGlsaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWxsb3ctcnVuLW1lZGlhLXNkWC1kcml2ZS1tb3VudC1pZi11c2VybmFtZS1yb290LnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwMS1SZW1vdmUtdGhlLXdhcm5pbmctYWJvdXQtZGVwcmVjYXRlZC1wYXRocy1pbi1zY2hlbWFzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZTovL2dsaWItZ2V0dGV4dGl6ZS1kaXIucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4M2VmYmE0NzIyYTk2NzRiOTc0MzdkMWQ5OWFmNzlkYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ODExZGVhY2FmOGE1MDNkMGE5YjcwMTc3N2VhMDc5Y2E2YTQyNzdiZTEwZTNkNzMwZDIxMTI3MzVkNWVjYTA3IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcyZjc5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi5pbmMKQEAgLTAsMCArMSwxMDQgQEAKK1NVTU1BUlkgPSAiQSBnZW5lcmFsLXB1cnBvc2UgdXRpbGl0eSBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiR0xpYiBpcyBhIGdlbmVyYWwtcHVycG9zZSB1dGlsaXR5IGxpYnJhcnksIHdoaWNoIHByb3ZpZGVzIG1hbnkgdXNlZnVsIGRhdGEgdHlwZXMsIG1hY3JvcywgdHlwZSBjb252ZXJzaW9ucywgc3RyaW5nIHV0aWxpdGllcywgZmlsZSB1dGlsaXRpZXMsIGEgbWFpbiBsb29wIGFic3RyYWN0aW9uLCBhbmQgc28gb24uIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dsaWIvIgorCisjIHBjcmUgaXMgdW5kZXIgQlNEOworIyBkb2NzL3JlZmVyZW5jZS9DT1BZSU5HIGlzIHdpdGggYSAncHVibGljIGRvbWFpJy1saWtlIGxpY2Vuc2UhCitMSUNFTlNFID0gIkxHUEx2MisgJiBCU0QgJiBQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dsaWIvZ2xpYi5oO2JlZ2lubGluZT00O2VuZGxpbmU9MTc7bWQ1PWI0ZjBmNGEzOTljMTllNWViYjIwYzMxYjc5ZDZiYzMyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dtb2R1bGUvQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ21vZHVsZS9nbW9kdWxlLmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0xNzttZDU9YjRmMGY0YTM5OWMxOWU1ZWJiMjBjMzFiNzlkNmJjMzIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xpYi9wY3JlL0NPUFlJTkc7bWQ1PTI2NmViYzNmZjc0ZWU5Y2U2ZmFkNjU1Nzc2NjdjMGY0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dsaWIvcGNyZS9wY3JlLmg7YmVnaW5saW5lPTExO2VuZGxpbmU9MzU7bWQ1PWRlMjdmMmJmNjMzZDIwYTJiN2FmMGIxOTgzNDIzMjgzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvY3MvcmVmZXJlbmNlL0NPUFlJTkc7bWQ1PWY1MWE1MTAwYzE3YWY2YmFlMDA3MzVjZDc5MWUxZmNjIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnIgorU0VDVElPTiA9ICJsaWJzIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAtbmF0aXZlIHZpcnR1YWwvbGliaWNvbnYgbGliZmZpIHpsaWIiCitERVBFTkRTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdGVzdCcsICcgZGJ1cycsICcnLCBkKX0iCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJwa2djb25maWctbmF0aXZlIGdldHRleHQtbmF0aXZlIGxpYmZmaS1uYXRpdmUgemxpYi1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICJuYXRpdmVzZGstbGlidG9vbCBuYXRpdmVzZGstZ2V0dGV4dCBuYXRpdmVzZGstbGliZmZpIG5hdGl2ZXNkay16bGliICR7QlBOfS1uYXRpdmUiCisKK1BBQ0tBR0VTID0rICIke1BOfS11dGlscyAke1BOfS1iYXNoLWNvbXBsZXRpb24gJHtQTn0tY29kZWdlbiIKKworTEVBRF9TT05BTUUgPSAibGliZ2xpYi0yLjAuKiIKK0ZJTEVTXyR7UE59LXV0aWxzID0gIiR7YmluZGlyfS8qICR7ZGF0YWRpcn0vZ2xpYi0yLjAvZ2V0dGV4dCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBndGstZG9jIHBrZ2NvbmZpZyBwdGVzdC1nbm9tZQorCitTID0gIiR7V09SS0RJUn0vZ2xpYi0ke1BWfSIKKworQ09SRUNPTkYgPSAiLS1kaXNhYmxlLWR0cmFjZSAtLWRpc2FibGUtZmFtIC0tZGlzYWJsZS1saWJlbGYgLS1kaXNhYmxlLXN5c3RlbXRhcCAtLWRpc2FibGUtbWFuIgorCitQUklOVEYgPSAiLS1lbmFibGUtaW5jbHVkZWQtcHJpbnRmPW5vIgorUFJJTlRGX2RhcndpbiA9ICItLWVuYWJsZS1pbmNsdWRlZC1wcmludGY9eWVzIgorUFJJTlRGX21pbmd3MzIgPSAiLS1lbmFibGUtaW5jbHVkZWQtcHJpbnRmPXllcyIKK0VYVFJBX09FQ09ORiA9ICIke1BSSU5URn0gJHtDT1JFQ09ORn0iCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIiR7Q09SRUNPTkZ9IC0tZGlzYWJsZS1zZWxpbnV4IgorRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS13aXRoLWxpYmljb252PWdudSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJc2VkIC1pIC1lICcxcywjIS4qLCMhJHtVU1JCSU5QQVRIfS9lbnYgcHl0aG9uLCcgJHtTfS9naW8vZ2RidXMtMi4wL2NvZGVnZW4vZ2RidXMtY29kZWdlbi5pbgorfQorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTfSAke2xpYmRpcn0vZ2lvICR7ZGF0YWRpcn0vZ2xpYi0yLjAvc2NoZW1hcyBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dsaWItMi4wL2dldHRleHQvbWtpbnN0YWxsZGlycyAke2RhdGFkaXJ9L2dsaWItMi4wL2dldHRleHQvcG8vTWFrZWZpbGUuaW4uaW4iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9nbGliLTIuMC9pbmNsdWRlIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2dpby9tb2R1bGVzL2xpYioke1NPTElCU0RFVn0gXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ2lvL21vZHVsZXMvKi5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtkYXRhZGlyfS9nbGliLTIuMC9nZGIgJHtkYXRhZGlyfS9nZGIgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ2lvL21vZHVsZXMvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2dsaWItMi4wL2luc3RhbGxlZC10ZXN0cy9nbGliLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWNvZGVnZW4gPSAiJHtkYXRhZGlyfS9nbGliLTIuMC9jb2RlZ2VuLyoucHkiCitGSUxFU18ke1BOfS1iYXNoLWNvbXBsZXRpb24gPSAiJHtzeXNjb25mZGlyfS9iYXNoX2NvbXBsZXRpb24uZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24iCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorVVNFX05MUyA9ICJ5ZXMiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpZiBbIC1mICR7RH0ke2JpbmRpcn0vZ3Rlc3Rlci1yZXBvcnQgXTsgdGhlbgorCQlzZWQgJHtEfSR7YmluZGlyfS9ndGVzdGVyLXJlcG9ydCAtaSAtZSAnMXN8XiMhLip8IyEvdXNyL2Jpbi9lbnYgcHl0aG9ufCcKKwlmaQorCisJIyBSZW1vdmUgc29tZSB1bnBhY2thZ2VkIGZpbGVzCisJcm0gLWYgJHtEfSR7ZGF0YWRpcn0vZ2xpYi0yLjAvY29kZWdlbi8qLnB5YworCXJtIC1mICR7RH0ke2RhdGFkaXJ9L2dsaWItMi4wL2NvZGVnZW4vKi5weW8KKworCSMgU29tZSBkaXN0cm9zIGhhdmUgYm90aCAvYmluL3BlcmwgYW5kIC91c3IvYmluL3BlcmwsIGJ1dCB3ZSBzZXQgcGVybCBsb2NhdGlvbgorCSMgZm9yIHRhcmdldCBhcyAvdXNyL2Jpbi9wZXJsLCBzbyBmaXggaXQgdG8gL3Vzci9iaW4vcGVybC4KKwlpZiBbIC1mICR7RH0ke2JpbmRpcn0vZ2xpYi1ta2VudW1zIF07IHRoZW4KKwkJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISAke1VTUkJJTlBBVEh9L2VudiBwZXJsLCcgJHtEfSR7YmluZGlyfS9nbGliLW1rZW51bXMKKwlmaQorfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiXAorICAgICAgICAgICAgZ25vbWUtZGVza3RvcC10ZXN0aW5nIFwKKyAgICAgICAgICAgIHR6ZGF0YSBcCisgICAgICAgICAgICB0emRhdGEtYW1lcmljYXMgXAorICAgICAgICAgICAgdHpkYXRhLWFzaWEgXAorICAgICAgICAgICAgdHpkYXRhLWV1cm9wZSBcCisgICAgICAgICAgICB0emRhdGEtcG9zaXggXAorICAgICAgICAgICAgcHl0aG9uLXB5Z29iamVjdCBcCisgICAgICAgICAgICBweXRob24tZGJ1cyBcCisgICAgICAgICAgICBzaGFyZWQtbWltZS1pbmZvIFwKKyAgICAgICAgICAgIgorCitSREVQRU5EU18ke1BOfS1wdGVzdF9hcHBlbmRfbGliYy1nbGliYyA9ICJcCisgICAgICAgICAgICBnbGliYy1nY29udi11dGYtMTYgXAorICAgICAgICAgICAgZ2xpYmMtY2hhcm1hcC11dGYtOCBcCisgICAgICAgICAgICBnbGliYy1nY29udi1jcDEyNTUgXAorICAgICAgICAgICAgZ2xpYmMtY2hhcm1hcC1jcDEyNTUgXAorICAgICAgICAgICAgZ2xpYmMtZ2NvbnYtdXRmLTMyIFwKKyAgICAgICAgICAgIGdsaWJjLWdjb252LXV0Zi03IFwKKyAgICAgICAgICAgIGdsaWJjLWdjb252LWV1Yy1qcCBcCisgICAgICAgICAgICBnbGliYy1nY29udi1pc284ODU5LTEgXAorICAgICAgICAgICAgZ2xpYmMtZ2NvbnYtaXNvODg1OS0xNSBcCisgICAgICAgICAgICBnbGliYy1jaGFybWFwLWludmFyaWFudCBcCisgICAgICAgICAgICBnbGliYy1sb2NhbGVkYXRhLXRyYW5zbGl0LWNqay12YXJpYW50cyBcCisgICAgICAgICAgICIKKworSU5TQU5FX1NLSVBfJHtQTn0tcHRlc3QgKz0gImxpYmRpciIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi1uZXR3b3JraW5nL2dsaWItbmV0d29ya2luZ18yLjQ0LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItbmV0d29ya2luZy9nbGliLW5ldHdvcmtpbmdfMi40NC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTFiNzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItbmV0d29ya2luZy9nbGliLW5ldHdvcmtpbmdfMi40NC4wLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiR0xpYiBuZXR3b3JraW5nIGV4dGVuc2lvbnMiCitERVNDUklQVElPTiA9ICJnbGliLW5ldHdvcmtpbmcgY29udGFpbnMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBjZXJ0YWluIEdMaWIgbmV0d29ya2luZyBmZWF0dXJlcyB0aGF0IGNhbm5vdCBiZSBpbXBsZW1lbnRlZCBkaXJlY3RseSBpbiBHTGliIGl0c2VsZiBiZWNhdXNlIG9mIHRoZWlyIGRlcGVuZGVuY2llcy4iCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0Lmdub21lLm9yZy9icm93c2UvZ2xpYi1uZXR3b3JraW5nLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZyIKKworTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKKworU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJnbGliLTIuMCBpbnRsdG9vbC1uYXRpdmUiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjY5ODliMjBjZjNiMjZkZDVhZTI3MmUwNGE5YWNiMGIzIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiOGY4YTM0MGQzYmE5OWJmZGVmMzhiNjUzZGE5Mjk2NTJlYTY2NDBlMjc5NjlkMjlmN2FjNTFmYmJlMTFhNDM0NiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImNhLWNlcnRpZmljYXRlcyBnbnV0bHMiCisKKyMgTm8gZXhwbGljaXQgZGVwZW5kZW5jeSBhcyBpdCB3b3JrcyB3aXRob3V0IGNhLWNlcnRpZmljYXRlcyBpbnN0YWxsZWQKK1BBQ0tBR0VDT05GSUdbY2EtY2VydGlmaWNhdGVzXSA9ICItLXdpdGgtY2EtY2VydGlmaWNhdGVzPSR7c3lzY29uZmRpcn0vc3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQsLS13aXRob3V0LWNhLWNlcnRpZmljYXRlcyIKK1BBQ0tBR0VDT05GSUdbZ251dGxzXSA9ICItLXdpdGgtZ251dGxzLC0td2l0aG91dC1nbnV0bHMsZ251dGxzIgorUEFDS0FHRUNPTkZJR1tsaWJwcm94eV0gPSAiLS13aXRoLWxpYnByb3h5LC0td2l0aG91dC1saWJwcm94eSxsaWJwcm94eSIKK1BBQ0tBR0VDT05GSUdbcGtjczExXSA9ICItLXdpdGgtcGtjczExLC0td2l0aG91dC1wa2NzMTEscDExLWtpdCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1nbm9tZS1wcm94eSIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ2V0dGV4dAorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2dpby9tb2R1bGVzL2xpYmdpbyouc28gJHtkYXRhZGlyfS9kYnVzLTEvc2VydmljZXMvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ2lvL21vZHVsZXMvLmRlYnVnLyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2dpby9tb2R1bGVzL2xpYmdpbyoubGEiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9naW8vbW9kdWxlcy9saWJnaW8qLmEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmUvZml4X2Zvcl9jZW50b3NfNS44LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlL2ZpeF9mb3JfY2VudG9zXzUuOC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODZhNDgwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlL2ZpeF9mb3JfY2VudG9zXzUuOC5wYXRjaApAQCAtMCwwICsxLDE4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorCitUaGlzIGlzIGEgaGFjayB0byBmaXggYnVpbGRpbmcgdGhlIGxvY2FsZSBiaXRzIG9uIGFuIG9sZGVyCitDZW50T3MgNS5YIG1hY2hpbmUKKworSW5kZXg6IGdpdC9sb2NhbGUvcHJvZ3JhbXMvY29uZmlnLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQvbG9jYWxlL3Byb2dyYW1zL2NvbmZpZy5oCisrKysgZ2l0Lm9yaWcvbG9jYWxlL3Byb2dyYW1zL2NvbmZpZy5oCitAQCAtMTksNiArMTksOCBAQAorICNpZm5kZWYgX0xEX0NPTkZJR19ICisgI2RlZmluZSBfTERfQ09ORklHX0gJMQorIAorKyNkZWZpbmUgRFVNTVlfTE9DQUxFX1QKKysKKyAvKiBVc2UgdGhlIGludGVybmFsIHRleHRkb21haW4gdXNlZCBmb3IgbGliYyBtZXNzYWdlcy4gICovCisgI2RlZmluZSBQQUNLQUdFIF9saWJjX2ludGxfZG9tYWlubmFtZQorICNpZm5kZWYgVkVSU0lPTgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlXzIuMjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmVfMi4yMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTUzZWNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlXzIuMjIuYmIKQEAgLTAsMCArMSw1OSBAQAorU1VNTUFSWSA9ICJDcm9zcyBsb2NhbGUgZ2VuZXJhdGlvbiB0b29sIGZvciBnbGliYyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJjL2xpYmMuaHRtbCIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTC0yLjEiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0VTO21kNT1lOWE1NThlMjQzYjM2ZDMyMDlmMzgwZGViMzk0YjIxMyBcCisgICAgICBmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgZmlsZTovL3Bvc2l4L3J4c3BlbmNlci9DT1BZUklHSFQ7bWQ1PWRjNTQ4NWJiMzk0YTEzYjIzMzJlYzFjNzg1ZjVkODNhIFwKKyAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKKworaW5oZXJpdCBuYXRpdmUKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9LyR7UE59OiR7RklMRV9ESVJOQU1FfS9nbGliYzoiCisKK0JSQU5DSCA/PSAicmVsZWFzZS8ke1BWfS9tYXN0ZXIiCitHTElCQ19HSVRfVVJJID89ICJnaXQ6Ly9zb3VyY2V3YXJlLm9yZy9naXQvZ2xpYmMuZ2l0IgorCitTUkNfVVJJID0gIiR7R0xJQkNfR0lUX1VSSX07YnJhbmNoPSR7QlJBTkNIfTtuYW1lPWdsaWJjIFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0aHViLmNvbS9rcmFqL2xvY2FsZWRlZjticmFuY2g9bWFzdGVyO25hbWU9bG9jYWxlZGVmO2Rlc3RzdWZmaXg9Z2l0L2xvY2FsZWRlZiBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfZm9yX2NlbnRvc181LjgucGF0Y2ggXAorICAgICAgICAgICAke0VHTElCQ1BBVENIRVN9IFwKKyIKK0VHTElCQ1BBVENIRVMgPSAiXAorICAgICAgICAgICBmaWxlOi8vMDAxNy10aW1lem9uZS1yZS13cml0dGVuLXR6c2VsZWN0LWFzLXBvc2l4LXNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTgtZWdsaWJjLUNyb3NzLWJ1aWxkaW5nLWFuZC10ZXN0aW5nLWluc3RydWN0aW9ucy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE5LWVnbGliYy1CcmluZy1FZ2xpYmMtb3B0aW9uLWdyb3VwLWluZnJhc3RydWN0dXJlLXRvLWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMC1lZ2xpYmMtSGVscC1ib290c3RyYXAtY3Jvc3MtdG9vbGNoYWluLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjEtZWdsaWJjLWNoZXJyeS1waWNrZWQtZnJvbS1odHRwLXd3dy5lZ2xpYmMub3JnLWFyY2hpdi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIyLWVnbGliYy1DbGVhci1jYWNoZS1saW5lcy1vbi1wcGM4eHgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMy1lZ2xpYmMtUmVzb2x2ZS1fX2Zwc2NyX3ZhbHVlcy1vbi1TSDQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNC1lZ2xpYmMtRm9yd2FyZC1wb3J0LWVnbGliYy1vcHRpb25zLWdyb3Vwcy1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjUtZWdsaWJjLUluc3RhbGwtUElDLWFyY2hpdmVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjYtZWdsaWJjLWRsX2RlYnVnX21hc2staXMtY29udHJvbGxlZC1ieS1fX09QVElPTl9FR0xJQi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI3LWVnbGliYy11c2Utb3B0aW9uLWdyb3Vwcy1Db25kaXRpb25hbGx5LWV4Y2x1ZGUtYy10ZXMucGF0Y2ggXAorIgorCitTUkNSRVZfZ2xpYmMgPz0gImEzNGQxYzZhZmM4NjUyMWQ2YWQxNzY2MmEzYjUzNjJkODQ4MTUxNGMiCitTUkNSRVZfbG9jYWxlZGVmID89ICJjODMzMzY3MzQ4ZDM5ZGFkN2JhMDE4OTkwYmZkYWZmYWVjOGU5ZWQzIgorCisjIE1ha2VzIGZvciBhIHJhdGhlciBsb25nIHJldiAoMjIgY2hhcmFjdGVycyksIGJ1dC4uLgorIworU1JDUkVWX0ZPUk1BVCA9ICJnbGliY19sb2NhbGVkZWYiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtZ2xpYmM9JHtTfSIKK0NGTEFHUyArPSAiLWZnbnU4OS1pbmxpbmUgLXN0ZD1nbnU5OSAtRElTX0lOXCh4XCk9JzAnIgorCitkb19jb25maWd1cmUgKCkgeworCSR7U30vbG9jYWxlZGVmL2NvbmZpZ3VyZSAke0VYVFJBX09FQ09ORn0KK30KKworCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke0J9L2xvY2FsZWRlZiAke0R9JHtiaW5kaXJ9L2Nyb3NzLWxvY2FsZWRlZgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1jb2xsYXRlcmFsLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtY29sbGF0ZXJhbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA2NTVlYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtY29sbGF0ZXJhbC5pbmMKQEAgLTAsMCArMSwyMiBAQAorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPz0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vR1BMLTIuMDttZDU9ODAxZjgwOTgwZDE3MWRkNjQyNTYxMDgzM2EyMmRiZTYgXAorICAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9MR1BMLTIuMTttZDU9MWE2ZDI2OGZkMjE4Njc1ZmZlYThiZTU1Njc4OGI3ODAiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliYy9pbmRleC5odG1sIgorCisjIFRoaXMgbmVlZHMgdG8gbWF0Y2ggd2l0aCBnbGliYy5pbmMsIG90aGVyd2lzZSBnbGliYy1zY3JpcHRzIGFuZCBnbGliYy1sb2NhbGUKKyMgd2lsbCBmYWlsIHRvIGZpbmQgbWFpbiBnbGliYywgZm9yIGRldGFpbHMgc2VlCisjIGh0dHA6Ly9saXN0cy5vcGVuZW1iZWRkZWQub3JnL3BpcGVybWFpbC9vcGVuZW1iZWRkZWQtY29yZS8yMDE1LUphbnVhcnkvMTAwNjc5Lmh0bWwKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitkb19mZXRjaFtub2V4ZWNdID0gIjEiCitkb191bnBhY2tbbm9leGVjXSA9ICIxIgorZG9fcGF0Y2hbbm9leGVjXSA9ICIxIgorZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorCitkb19pbnN0YWxsW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wb3B1bGF0ZV9zeXNyb290IgorCitDT01QQVRJQkxFX0hPU1RfbGliYy1tdXNsX2NsYXNzLXRhcmdldCA9ICJudWxsIgorQ09NUEFUSUJMRV9IT1NUX2xpYmMtdWNsaWJjX2NsYXNzLXRhcmdldCA9ICJudWxsIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWNvbW1vbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhMTU2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtY29tbW9uLmluYwpAQCAtMCwwICsxLDkgQEAKK1NVTU1BUlkgPSAiR0xJQkMgKEdOVSBDIExpYnJhcnkpIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSBDIExpYnJhcnkgaXMgdXNlZCBhcyB0aGUgc3lzdGVtIEMgbGlicmFyeSBpbiBtb3N0IHN5c3RlbXMgd2l0aCB0aGUgTGludXgga2VybmVsLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJjL2xpYmMuaHRtbCIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPz0gImZpbGU6Ly9MSUNFTlNFUzttZDU9MDdhMzk0YjI2ZTA5MDJiOWZmZGVjMDM3NjUyMDk3NzAgXAorICAgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTM5M2E1Y2E0NDVmNjk2NTg3M2VjYTAyNTlhMTdmODMzIFwKKyAgICAgIGZpbGU6Ly9wb3NpeC9yeHNwZW5jZXIvQ09QWVJJR0hUO21kNT1kYzU0ODViYjM5NGExM2IyMzMyZWMxYzc4NWY1ZDgzYSBcCisgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWJiYjQ2MTIxMWEzM2IxMzRkNDJlZDVlZTgwMmIzN2ZmICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWluaXRpYWwuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MDA4NDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWluaXRpYWwuaW5jCkBAIC0wLDAgKzEsNzYgQEAKK0RFUEVORFMgPSAibGludXgtbGliYy1oZWFkZXJzIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsIGxpYmdjYy1pbml0aWFsIgorUFJPVklERVMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1pbml0aWFsIgorCitQQUNLQUdFUyA9ICIiCitQQUNLQUdFU19EWU5BTUlDID0gIiIKKworU1RBR0lOR0NDID0gImdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorU1RBR0lOR0NDX2NsYXNzLW5hdGl2ZXNkayA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1RPT0xDSEFJTl9PUFRJT05TID0gIiAtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0iCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJKGNkICR7U30gJiYgZ251LWNvbmZpZ2l6ZSkgfHwgZGllICJmYWlsdXJlIGluIHJ1bm5pbmcgZ251LWNvbmZpZ2l6ZSIKKwlmaW5kICR7U30gLW5hbWUgImNvbmZpZ3VyZSIgfCB4YXJncyB0b3VjaAorCSR7U30vY29uZmlndXJlIC0taG9zdD0ke1RBUkdFVF9TWVN9IC0tYnVpbGQ9JHtCVUlMRF9TWVN9IFwKKwkJLS1wcmVmaXg9L3VzciBcCisJCS0td2l0aG91dC1jdnMgLS1kaXNhYmxlLXNhbml0eS1jaGVja3MgXAorCQktLXdpdGgtaGVhZGVycz0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke2luY2x1ZGVkaXJ9IFwKKwkJLS13aXRoLWtjb25maWc9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IFwKKwkJLS1lbmFibGUtaGFja2VyLW1vZGUgLS1lbmFibGUtYWRkb25zCit9CisKK2RvX2NvbXBpbGUgKCkgeworCToKK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSBjcm9zcy1jb21waWxpbmc9eWVzIGluc3RhbGxfcm9vdD0ke0R9IFwKKwlpbmNsdWRlZGlyPScke2luY2x1ZGVkaXJ9JyBwcmVmaXg9JyR7cHJlZml4fScgXAorCWluc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnM9eWVzIGluc3RhbGwtaGVhZGVycworCisJb2VfcnVubWFrZSBjc3Uvc3ViZGlyX2xpYgorCW1rZGlyIC1wICR7RH0ke2xpYmRpcn0vCisJaW5zdGFsbCAtbSA2NDQgY3N1L2NydFsxaW5dLm8gJHtEfSR7bGliZGlyfQorCisJIyBUd28gaGVhZGVycyAtLSBzdHVicy5oIGFuZCBmZWF0dXJlcy5oIC0tIGFyZW4ndCBpbnN0YWxsZWQgYnkgaW5zdGFsbC1oZWFkZXJzLAorCSMgc28gZG8gdGhlbSBieSBoYW5kLiAgV2UgY2FuIHRvbGVyYXRlIGFuIGVtcHR5IHN0dWJzLmggZm9yIHRoZSBtb21lbnQuCisJIyBTZWUgZS5nLiBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLzIwMDItMDEvbXNnMDA5MDAuaHRtbAorCW1rZGlyIC1wICR7RH0ke2luY2x1ZGVkaXJ9L2dudS8KKwl0b3VjaCAke0R9JHtpbmNsdWRlZGlyfS9nbnUvc3R1YnMuaAorCWNwICR7U30vaW5jbHVkZS9mZWF0dXJlcy5oICR7RH0ke2luY2x1ZGVkaXJ9L2ZlYXR1cmVzLmgKKworCWlmIFsgLWUgJHtCfS9iaXRzL3N0ZGlvX2xpbS5oIF07IHRoZW4KKwkJY3AgJHtCfS9iaXRzL3N0ZGlvX2xpbS5oICAke0R9JHtpbmNsdWRlZGlyfS9iaXRzLworCWZpCisJIyBhZGQgbGlua3MgdG8gbGludXgtbGliYy1oZWFkZXJzOiBmaW5hbCBnbGliYyBidWlsZCBuZWVkIHRoaXMuCisJZm9yIHQgaW4gbGludXggYXNtIGFzbS1nZW5lcmljOyBkbworCQlsbiAtcyAke1NUQUdJTkdfRElSX1RBUkdFVH0ke2luY2x1ZGVkaXJ9LyR0ICR7RH0ke2luY2x1ZGVkaXJ9LworCWRvbmUKK30KKworZG9faW5zdGFsbF9sb2NhbGUoKSB7CisJOgorfQorCitkb19zaXRlY29uZmlnICgpIHsKKwk6Cit9CisKK1NTVEFURVBPU1RJTlNURlVOQ1MgKz0gImdsaWJjaW5pdGlhbF9zc3RhdGVfcG9zdGluc3QiCitnbGliY2luaXRpYWxfc3N0YXRlX3Bvc3RpbnN0KCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisJCSMgUmVjcmVhdGUgdGhlIHN5bWxpbmtzIHRvIGVuc3VyZSB0aGV5IHBvaW50IHRvIHRoZSBjb3JyZWN0IGxvY2F0aW9uCisJCWZvciB0IGluIGxpbnV4IGFzbSBhc20tZ2VuZXJpYzsgZG8KKwkJCXJtIC1mICR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9JHtpbmNsdWRlZGlyfS8kdAorCQkJbG4gLXMgJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtpbmNsdWRlZGlyfS8kdCAke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfSR7aW5jbHVkZWRpcn0vCisJCWRvbmUKKwlmaQorfQorCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfS8iCisKKyMgV2UgZG9uJ3QgaW5zdGFsbCBhbnkgc2NyaXB0cyBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGV2YWN1YXRlCitkb19ldmFjdWF0ZV9zY3JpcHRzICgpIHsKKwk6Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWluaXRpYWxfMi4yMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbF8yLjIyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYjAxZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWluaXRpYWxfMi4yMi5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIGdsaWJjXyR7UFZ9LmJiCityZXF1aXJlIGdsaWJjLWluaXRpYWwuaW5jCisKK0RFUEVORFMgKz0gImtjb25maWctZnJvbnRlbmRzLW5hdGl2ZSIKKworIyBtYWluIGdsaWJjIHJlY2lwZXMgbXVjayB3aXRoIFRBUkdFVF9DUFBGTEFHUyB0byBwb2ludCBpbnRvCisjIGZpbmFsIHRhcmdldCBzeXNyb290IGJ1dCB3ZQorIyBhcmUgbm90IHRoZXJlIHdoZW4gYnVpbGRpbmcgZ2xpYmMtaW5pdGlhbAorIyBzbyByZXNldCBpdCBoZXJlCisKK1RBUkdFVF9DUFBGTEFHUyA9ICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxkLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbGQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MmQ2NjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxkLmluYwpAQCAtMCwwICsxLDU2IEBACitkZWYgbGRfYXBwZW5kX2lmX3R1bmVfZXhpc3RzKGQsIGluZm9zLCBkaWN0KToKKyAgICB0dW5lID0gZC5nZXRWYXIoIkRFRkFVTFRUVU5FIiwgVHJ1ZSkgb3IgIiIKKyAgICBsaWJkaXIgPSBkLmdldFZhcigiYmFzZV9saWJkaXIiLCBUcnVlKSBvciAiIgorICAgIGlmIHR1bmUgaW4gZGljdDoKKyAgICAgICAgaW5mb3NbJ2xkY29uZmlnJ10uYWRkKCd7IicgKyBsaWJkaXIgKyAnLycgKyBkaWN0W3R1bmVdWzBdICsgJyIsJyArIGRpY3RbdHVuZV1bMV0gKyAnIH0nKQorICAgICAgICBpbmZvc1snbGRkcmV3cml0ZSddLmFkZChsaWJkaXIrJy8nK2RpY3RbdHVuZV1bMF0pCisKK2RlZiBnbGliY19kbF9pbmZvKGQpOgorICAgIGxkX2luZm9fYWxsID0geworICAgICAgICAibWlwcyI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwczY0LW4zMiI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwczY0IjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzZWwiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHM2NGVsLW4zMiI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwczY0ZWwiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHMtbmYiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHM2NC1uZi1uMzIiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHM2NC1uZiI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwczY0ZWwtbmYtbjMyIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzNjRlbC1uZiI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAicG93ZXJwYyI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAicG93ZXJwYy1uZiI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAicG93ZXJwYzY0IjogWyJsZDY0LnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgInBvd2VycGM2NC1uZiI6IFsibGQ2NC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJjb3JlMi0zMiI6IFsibGQtbGludXguc28uMiIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAiY29yZTItNjQiOiBbImxkLWxpbnV4LXg4Ni02NC5zby4yIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJ4ODYiOiBbImxkLWxpbnV4LnNvLjIiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIng4Ni02NCI6IFsibGQtbGludXgteDg2LTY0LnNvLjIiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgImk1ODYiOiBbImxkLWxpbnV4LnNvLjIiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgImNvcmVpNy0zMiI6IFsibGQtbGludXguc28uMiIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAiY29yZWk3LTY0IjogWyJsZC1saW51eC14ODYtNjQuc28uMiIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgIH0KKworICAgIGluZm9zID0geydsZGNvbmZpZyc6c2V0KCksICdsZGRyZXdyaXRlJzpzZXQoKX0KKyAgICBsZF9hcHBlbmRfaWZfdHVuZV9leGlzdHMoZCwgaW5mb3MsIGxkX2luZm9fYWxsKQorCisgICAgI0RFRkFVTFRUVU5FX01VTFRJTElCX09SSUdJTkFMCisgICAgb3JpZ2luYWxfdHVuZT1kLmdldFZhcigiREVGQVVMVFRVTkVfTVVMVElMSUJfT1JJR0lOQUwiLFRydWUpCisgICAgaWYgb3JpZ2luYWxfdHVuZToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIkRFRkFVTFRUVU5FIiwgb3JpZ2luYWxfdHVuZSkKKyAgICAgICAgbGRfYXBwZW5kX2lmX3R1bmVfZXhpc3RzKGxvY2FsZGF0YSwgaW5mb3MsIGxkX2luZm9fYWxsKQorCisgICAgdmFyaWFudHMgPSBkLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKSBvciAiIgorICAgIGZvciBpdGVtIGluIHZhcmlhbnRzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgaXRlbQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBvdmVycmlkZXMpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICBsZF9hcHBlbmRfaWZfdHVuZV9leGlzdHMobG9jYWxkYXRhLCBpbmZvcywgbGRfaW5mb19hbGwpCisgICAgaW5mb3NbJ2xkY29uZmlnJ10gPSAnLCcuam9pbihpbmZvc1snbGRjb25maWcnXSkKKyAgICBpbmZvc1snbGRkcmV3cml0ZSddID0gJyAnLmpvaW4oaW5mb3NbJ2xkZHJld3JpdGUnXSkKKyAgICByZXR1cm4gaW5mb3MKKworRUdMSUJDX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTID0gIiR7QGdsaWJjX2RsX2luZm8oZClbJ2xkY29uZmlnJ119IgorUlRMRExJU1QgPSAiJHtAZ2xpYmNfZGxfaW5mbyhkKVsnbGRkcmV3cml0ZSddfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjZkMDczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sb2NhbGUuaW5jCkBAIC0wLDAgKzEsOTYgQEAKK2luY2x1ZGUgZ2xpYmMtY29sbGF0ZXJhbC5pbmMKKworU1VNTUFSWSA9ICJMb2NhbGUgZGF0YSBmcm9tIGdsaWJjIgorCitCUE4gPSAiZ2xpYmMiCitMT0NBTEVCQVNFUE4gPSAiJHtNTFBSRUZJWH1nbGliYyIKKworIyBnbGliYy1jb2xsYXRlcmFsLmluYyBpbmhpYml0cyBhbGwgZGVmYXVsdCBkZXBzLCBidXQgZG9fcGFja2FnZSBuZWVkcyBvYmpjb3B5CisjIEVSUk9SOiBvYmpjb3B5IGZhaWxlZCB3aXRoIGV4aXQgY29kZSAxMjcgKGNtZCB3YXMgJ2k1ODYtd2Vib3MtbGludXgtb2JqY29weScgLS1vbmx5LWtlZXAtZGVidWcgJ2dsaWJjLWxvY2FsZS8yLjE3LXIwL3BhY2thZ2UvdXNyL2xpYi9nY29udi9JQk0xMTY2LnNvJyAnZ2xpYmMtbG9jYWxlLzIuMTctcjAvcGFja2FnZS91c3IvbGliL2djb252Ly5kZWJ1Zy9JQk0xMTY2LnNvJykKKyMgRVJST1I6IEZ1bmN0aW9uIGZhaWxlZDogc3BsaXRfYW5kX3N0cmlwX2ZpbGVzCitCSU5VVElMU0RFUCA9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9JHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitCSU5VVElMU0RFUF9jbGFzcy1uYXRpdmVzZGsgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMtY3Jvc3NzZGs6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX3BhY2thZ2VbZGVwZW5kc10gKz0gIiR7QklOVVRJTFNERVB9IgorCisjIEJpbmFyeSBsb2NhbGVzIGFyZSBnZW5lcmF0ZWQgYXQgYnVpbGQgdGltZSBpZiBFTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OCisjIGlzIHNldC4gVGhlIGlkZWEgaXMgdG8gYXZvaWQgcnVubmluZyBsb2NhbGVkZWYgb24gdGhlIHRhcmdldCAoYXQgZmlyc3QgYm9vdCkKKyMgdG8gZGVjcmVhc2UgaW5pdGlhbCBib290IHRpbWUgYW5kIGF2b2lkIGxvY2FsZWRlZiBiZWluZyBraWxsZWQgYnkgdGhlIE9PTQorIyBraWxsZXIgd2hpY2ggdXNlZCB0byBlZmZlY3RpdmVseSBicmVhayBpMThuIG9uIG1hY2hpbmVzIHdpdGggPCAxMjhNQiBSQU0uCisKKyMgZGVmYXVsdCB0byBkaXNhYmxlZCAKK0VOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT04gPz0gIjAiCitFTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OX3BuLW5hdGl2ZXNkay1nbGliYy1sb2NhbGUgPSAiMCIKKworI2VuYWJsZSBsb2NhbGUgZ2VuZXJhdGlvbiBvbiB0aGVzZSBhcmNoZXMKKyMgQklOQVJZX0xPQ0FMRV9BUkNIRVMgaXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiByZWd1bGFyIGV4cHJlc3Npb25zCitCSU5BUllfTE9DQUxFX0FSQ0hFUyA/PSAiYXJtLiogYWFyY2g2NCBpWzMtNl04NiB4ODZfNjQgcG93ZXJwYyBtaXBzIG1pcHM2NCIKKworIyBzZXQgIjEiIHRvIHVzZSBjcm9zcy1sb2NhbGVkZWYgZm9yIGxvY2FsZSBnZW5lcmF0aW9uCisjIHNldCAiMCIgZm9yIHFlbXUgZW11bGF0aW9uIG9mIG5hdGl2ZSBsb2NhbGVkZWYgZm9yIGxvY2FsZSBnZW5lcmF0aW9uCitMT0NBTEVfR0VORVJBVElPTl9XSVRIX0NST1NTLUxPQ0FMRURFRiA9ICIxIgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYmMtbG9jYWxlIgorCitQQUNLQUdFUyA9ICJsb2NhbGVkZWYgJHtQTn0tZGJnIgorCitQQUNLQUdFU19EWU5BTUlDID0gIl5sb2NhbGUtYmFzZS0uKiBcCisgICAgICAgICAgICAgICAgICAgIF5nbGliYy1nY29udi0uKiBeZ2xpYmMtY2hhcm1hcC0uKiBeZ2xpYmMtbG9jYWxlZGF0YS0uKiBeZ2xpYmMtYmluYXJ5LWxvY2FsZWRhdGEtLiogXAorICAgICAgICAgICAgICAgICAgICBeZ2xpYmMtZ2NvbnYtLiogIF5nbGliYy1jaGFybWFwLS4qICBeZ2xpYmMtbG9jYWxlZGF0YS0uKiAgXmdsaWJjLWJpbmFyeS1sb2NhbGVkYXRhLS4qIFwKKyAgICAgICAgICAgICAgICAgICAgXiR7TUxQUkVGSVh9Z2xpYmMtZ2NvbnYkIgorCisjIENyZWF0ZSBhIGdsaWJjLWJpbmFyaWVzIHBhY2thZ2UKK0FMTE9XX0VNUFRZXyR7QlBOfS1iaW5hcmllcyA9ICIxIgorUEFDS0FHRVMgKz0gIiR7QlBOfS1iaW5hcmllcyIKK1JSRUNPTU1FTkRTXyR7QlBOfS1iaW5hcmllcyA9ICAiJHtAIiAiLmpvaW4oW3AgZm9yIHAgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKSBpZiBwLmZpbmQoImdsaWJjLWJpbmFyeSIpICE9IC0xXSl9IgorCisjIENyZWF0ZSBhIGdsaWJjLWNoYXJtYXBzIHBhY2thZ2UKK0FMTE9XX0VNUFRZXyR7QlBOfS1jaGFybWFwcyA9ICIxIgorUEFDS0FHRVMgKz0gIiR7QlBOfS1jaGFybWFwcyIKK1JSRUNPTU1FTkRTXyR7QlBOfS1jaGFybWFwcyA9ICAiJHtAIiAiLmpvaW4oW3AgZm9yIHAgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKSBpZiBwLmZpbmQoImdsaWJjLWNoYXJtYXAiKSAhPSAtMV0pfSIKKworIyBDcmVhdGUgYSBnbGliYy1nY29udnMgcGFja2FnZQorQUxMT1dfRU1QVFlfJHtCUE59LWdjb252cyA9ICIxIgorUEFDS0FHRVMgKz0gIiR7QlBOfS1nY29udnMiCitSUkVDT01NRU5EU18ke0JQTn0tZ2NvbnZzID0gICIke0AiICIuam9pbihbcCBmb3IgcCBpbiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpIGlmIHAuZmluZCgiZ2xpYmMtZ2NvbnYiKSAhPSAtMV0pfSIKKworIyBDcmVhdGUgYSBnbGliYy1sb2NhbGVkYXRhcyBwYWNrYWdlCitBTExPV19FTVBUWV8ke0JQTn0tbG9jYWxlZGF0YXMgPSAiMSIKK1BBQ0tBR0VTICs9ICIke0JQTn0tbG9jYWxlZGF0YXMiCitSUkVDT01NRU5EU18ke0JQTn0tbG9jYWxlZGF0YXMgPSAgIiR7QCIgIi5qb2luKFtwIGZvciBwIGluIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkgaWYgcC5maW5kKCJnbGliYy1sb2NhbGVkYXRhIikgIT0gLTFdKX0iCisKK0RFU0NSSVBUSU9OX2xvY2FsZWRlZiA9ICJnbGliYzogY29tcGlsZSBsb2NhbGUgZGVmaW5pdGlvbiBmaWxlcyIKKworIyBnbGliYy1nY29udiBpcyBkeW5hbWljYWxseSBhZGRlZCBpbnRvIFBBQ0tBR0VTLCB0aHVzCisjIEZJTEVTX2dsaWJjLWdjb252IHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgaW4gbXVsdGlsaWIuCisjIEV4cGxpY2l0bHkgYWRkICR7TUxQUkVGSVh9IGZvciBGSUxFU19nbGliYy1nY29udi4KK0ZJTEVTXyR7TUxQUkVGSVh9Z2xpYmMtZ2NvbnYgPSAiJHtsaWJkaXJ9L2djb252LyoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9nY29udi8uZGVidWcvKiIKK0ZJTEVTX2xvY2FsZWRlZiA9ICIke2JpbmRpcn0vbG9jYWxlZGVmIgorCitMT0NBTEVUUkVFU1JDID0gIiR7U1RBR0lOR19JTkNESVJ9L2dsaWJjLWxvY2FsZS1pbnRlcm5hbC0ke01VTFRJTUFDSF9UQVJHRVRfU1lTfSIKKworZG9faW5zdGFsbCAoKSB7CisJbWtkaXIgLXAgJHtEfSR7YmluZGlyfSAke0R9JHtkYXRhZGlyfSAke0R9JHtsaWJkaXJ9CisJaWYgWyAtbiAiJChscyAke0xPQ0FMRVRSRUVTUkN9LyR7YmluZGlyfSkiIF07IHRoZW4KKwkJY3AgLWZwUFIgJHtMT0NBTEVUUkVFU1JDfS8ke2JpbmRpcn0vKiAke0R9JHtiaW5kaXJ9CisJZmkKKwlpZiBbIC1uICIkKGxzICR7TE9DQUxFVFJFRVNSQ30vJHtsb2NhbGVkaXJ9KSIgXTsgdGhlbgorCQlta2RpciAtcCAke0R9JHtsb2NhbGVkaXJ9CisJCWNwIC1mcFBSICR7TE9DQUxFVFJFRVNSQ30vJHtsb2NhbGVkaXJ9LyogJHtEfSR7bG9jYWxlZGlyfQorCWZpCisJaWYgWyAtZSAke0xPQ0FMRVRSRUVTUkN9LyR7bGliZGlyfS9nY29udiBdOyB0aGVuCisJCWNwIC1mcFBSICR7TE9DQUxFVFJFRVNSQ30vJHtsaWJkaXJ9L2djb252ICR7RH0ke2xpYmRpcn0KKwlmaQorCWlmIFsgLWUgJHtMT0NBTEVUUkVFU1JDfS8ke2RhdGFkaXJ9L2kxOG4gXTsgdGhlbgorCQljcCAtZnBQUiAke0xPQ0FMRVRSRUVTUkN9LyR7ZGF0YWRpcn0vaTE4biAke0R9JHtkYXRhZGlyfQorCWZpCisJaWYgWyAtZSAke0xPQ0FMRVRSRUVTUkN9LyR7ZGF0YWRpcn0vbG9jYWxlIF07IHRoZW4KKwkJY3AgLWZwUFIgJHtMT0NBTEVUUkVFU1JDfS8ke2RhdGFkaXJ9L2xvY2FsZSAke0R9JHtkYXRhZGlyfQorCWZpCisJY2hvd24gcm9vdC5yb290IC1SICR7RH0KKwljcCAtZnBQUiAke0xPQ0FMRVRSRUVTUkN9L1NVUFBPUlRFRCAke1dPUktESVJ9Cit9CisKK2luaGVyaXQgbGliYy1wYWNrYWdlCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sb2NhbGVfMi4yMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlXzIuMjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc3MDJlMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlXzIuMjIuYmIKQEAgLTAsMCArMSBAQAorcmVxdWlyZSBnbGliYy1sb2NhbGUuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW10cmFjZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW10cmFjZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEyYjA3OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbXRyYWNlLmluYwpAQCAtMCwwICsxLDEzIEBACitpbmNsdWRlIGdsaWJjLWNvbGxhdGVyYWwuaW5jCisKK1NVTU1BUlkgPSAibXRyYWNlIHV0aWxpdHkgcHJvdmlkZWQgYnkgZ2xpYmMiCitERVNDUklQVElPTiA9ICJtdHJhY2UgdXRpbGl0eSBwcm92aWRlZCBieSBnbGliYyIKK1JERVBFTkRTXyR7UE59ID0gInBlcmwiCitSUFJPVklERVNfJHtQTn0gPSAibGliYy1tdHJhY2UiCisKK1NSQyA9ICIke1NUQUdJTkdfSU5DRElSfS9nbGliYy1zY3JpcHRzLWludGVybmFsLSR7TVVMVElNQUNIX1RBUkdFVF9TWVN9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgLW0gMDc1NSAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7U1JDfS9tdHJhY2UgJHtEfSR7YmluZGlyfS8KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbXRyYWNlXzIuMjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW10cmFjZV8yLjIyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNjliYWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW10cmFjZV8yLjIyLmJiCkBAIC0wLDAgKzEgQEAKK3JlcXVpcmUgZ2xpYmMtbXRyYWNlLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1vcHRpb25zLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtb3B0aW9ucy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkMjdmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtb3B0aW9ucy5pbmMKQEAgLTAsMCArMSwxNjIgQEAKK2RlZiBnbGliY19jZmcoZmVhdHVyZSwgdG9rZW5zLCBjbmYpOgorICAgIGlmIHR5cGUodG9rZW5zKSA9PSB0eXBlKCIiKToKKyAgICAgICAgdG9rZW5zID0gW3Rva2Vuc10KKyAgICBpZiBmZWF0dXJlOgorICAgICAgICBjbmYuZXh0ZW5kKFt0b2tlbiArICc9eScgZm9yIHRva2VuIGluIHRva2Vuc10pCisgICAgZWxzZToKKyAgICAgICAgZm9yIHRva2VuIGluIHRva2VuczoKKyAgICAgICAgICAgIGNuZi5leHRlbmQoW3Rva2VuICsgJz1uJ10pCisgICAgICAgICAgICBpZiB0b2tlbiA9PSAnT1BUSU9OX0VHTElCQ19OU1NXSVRDSCc6CisgICAgICAgICAgICAgICAgY25mLmV4dGVuZChbIk9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfQ09ORklHPVwiJHtTfS9uc3MvbnNzd2l0Y2guY29uZlwiIl0pCisgICAgICAgICAgICAgICAgY25mLmV4dGVuZChbIk9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TPVwiJHtTfS9uc3MvZml4ZWQtbnNzd2l0Y2guZnVuY3Rpb25zXCIiXSkKKworIyBNYXAgZGlzdHJvIGZlYXR1cmVzIHRvIGdsaWJjIG9wdGlvbnMgc2V0dGluZ3MKK2RlZiBmZWF0dXJlc190b19nbGliY19zZXR0aW5ncyhkKToKKyAgICBjbmYgPSAoW10pCisKKyAgICBpcHY0ID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY0JywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgaXB2NiA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfYmFja3RyYWNlID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWJhY2t0cmFjZScsIFRydWUsIEZhbHNlLCBkKSAKKyAgICBsaWJjX2JpZ19tYWNyb3MgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtYmlnLW1hY3JvcycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfYnNkID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWJzZCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfY3h4X3Rlc3RzID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWN4eC10ZXN0cycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfY2F0Z2V0cyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1jYXRnZXRzJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19jaGFyc2V0cyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1jaGFyc2V0cycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfY3J5cHQgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtY3J5cHQnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2NyeXB0X3VmYyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1jcnlwdC11ZmMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2RiX2FsaWFzZXMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtZGItYWxpYXNlcycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfZW52eiA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1lbnZ6JywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19mY3Z0ID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWZjdnQnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2ZtdG1zZyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1mbXRtc2cnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2ZzdGFiID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWZzdGFiJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19mdHJhdmVyc2UgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtZnRyYXZlcnNlJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19nZXRsb2dpbiA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1nZXRsb2dpbicsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfaWRuID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWlkbicsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfaW5ldF9hbmwgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtaW5ldC1hbmwnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2xpYm0gPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbGlibScsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfbG9jYWxlcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1sb2NhbGVzJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19sb2NhbGVfY29kZSA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1sb2NhbGUtY29kZScsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfbWVtdXNhZ2UgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbWVtdXNhZ2UnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX25pcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1uaXMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX25zc3dpdGNoID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLW5zc3dpdGNoJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19yY21kID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXJjbWQnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3J0bGRfZGVidWcgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtcnRsZC1kZWJ1ZycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfc3Bhd24gPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtc3Bhd24nLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3N0cmVhbXMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtc3RyZWFtcycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfc3VucnBjID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXN1bnJwYycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfdXRtcCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy11dG1wJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY191dG1weCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy11dG1weCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfd29yZGV4cCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy13b3JkZXhwJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19wb3NpeF9jbGFuZ193Y2hhciA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1wb3NpeC1jbGFuZy13Y2hhcicsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfcG9zaXhfcmVnZXhwID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXBvc2l4LXJlZ2V4cCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfcG9zaXhfcmVnZXhwX2dsaWJjID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXBvc2l4LXJlZ2V4cC1nbGliYycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfcG9zaXhfd2NoYXJfaW8gPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtcG9zaXgtd2NoYXItaW8nLCBUcnVlLCBGYWxzZSwgZCkKKworICAgICMgYXJyYW5nZSB0aGUgZGVwZW5kZW5jaWVzIGFtb25nIGdsaWJjIGNvbmZpZ3VhYmxlIG9wdGlvbnMgYWNjb3JkaW5nIHRvIGZpbGUgb3B0aW9uLWdyb3Vwcy5kZWYgZnJvbSBnbGliYyBzb3VyY2UgY29kZQorICAgIG5ld19kZXAgPSBUcnVlCisgICAgd2hpbGUgbmV3X2RlcDoKKyAgICAgICAgbmV3X2RlcCA9IEZhbHNlCisKKyAgICAgICAgaWYgaXB2NiBhbmQgbm90IGlwdjQ6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgaXB2NCA9IFRydWUKKworICAgICAgICBpZiBpcHY0IGFuZCBub3QgbGliY19uc3N3aXRjaDoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBsaWJjX25zc3dpdGNoID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfY3h4X3Rlc3RzOgorICAgICAgICAgICAgaWYgbm90IGxpYmNfcG9zaXhfd2NoYXJfaW86CisgICAgICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgICAgICBsaWJjX3Bvc2l4X3djaGFyX2lvID0gVHJ1ZQorICAgICAgICAgICAgaWYgbm90IGxpYmNfbGlibToKKyAgICAgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgICAgIGxpYmNfbGlibSA9IFRydWUKKworICAgICAgICBpZiBsaWJjX2NhdGdldHMgYW5kIG5vdCBsaWJjX2xvY2FsZV9jb2RlOgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGxpYmNfbG9jYWxlX2NvZGUgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19jcnlwdF91ZmMgYW5kIG5vdCBsaWJjX2NyeXB0OgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGxpYmNfY3J5cHQgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19nZXRsb2dpbiBhbmQgbm90IGxpYmNfdXRtcDoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBsaWJjX3V0bXAgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19pbmV0X2FubCBhbmQgbm90IGlwdjQ6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgaXB2NCA9IFRydWUKKworICAgICAgICBpZiBsaWJjX2xvY2FsZV9jb2RlIGFuZCBub3QgbGliY19wb3NpeF9jbGFuZ193Y2hhcjoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBsaWJjX3Bvc2l4X2NsYW5nX3djaGFyID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfbmlzOgorICAgICAgICAgICAgaWYgbm90IGlwdjQ6CisgICAgICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgICAgICBpcHY0ID0gVHJ1ZQorICAgICAgICAgICAgaWYgbm90IGxpYmNfc3VucnBjOgorICAgICAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICAgICAgbGliY19zdW5ycGMgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19yY21kIGFuZCBub3QgaXB2NDoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBpcHY0ID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfc3VucnBjIGFuZCBub3QgaXB2NDoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBpcHY0ID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfdXRtcHggYW5kIG5vdCBsaWJjX3V0bXA6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgbGliY191dG1wID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfcG9zaXhfcmVnZXhwX2dsaWJjIGFuZCBub3QgbGliY19wb3NpeF9yZWdleHA6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgbGliY19wb3NpeF9yZWdleHAgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19wb3NpeF93Y2hhcl9pbyBhbmQgbm90IGxpYmNfcG9zaXhfY2xhbmdfd2NoYXI6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgbGliY19wb3NpeF9jbGFuZ193Y2hhciA9IFRydWUKKworICAgIGdsaWJjX2NmZyhpcHY2LCAnT1BUSU9OX0VHTElCQ19BRFZBTkNFRF9JTkVUNicsIGNuZikKKyAgICBnbGliY19jZmcobGliY19iYWNrdHJhY2UsICdPUFRJT05fRUdMSUJDX0JBQ0tUUkFDRScsIGNuZikKKyAgICBnbGliY19jZmcobGliY19iaWdfbWFjcm9zLCAnT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2JzZCwgJ09QVElPTl9FR0xJQkNfQlNEJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2N4eF90ZXN0cywgJ09QVElPTl9FR0xJQkNfQ1hYX1RFU1RTJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2NhdGdldHMsICdPUFRJT05fRUdMSUJDX0NBVEdFVFMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfY2hhcnNldHMsICdPUFRJT05fRUdMSUJDX0NIQVJTRVRTJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2NyeXB0LCAnT1BUSU9OX0VHTElCQ19DUllQVCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY19jcnlwdF91ZmMsICdPUFRJT05fRUdMSUJDX0NSWVBUX1VGQycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19kYl9hbGlhc2VzLCAnT1BUSU9OX0VHTElCQ19EQl9BTElBU0VTJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2VudnosICdPUFRJT05fRUdMSUJDX0VOVlonLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfZmN2dCwgJ09QVElPTl9FR0xJQkNfRkNWVCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY19mbXRtc2csICdPUFRJT05fRUdMSUJDX0ZNVE1TRycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19mc3RhYiwgJ09QVElPTl9FR0xJQkNfRlNUQUInLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfZnRyYXZlcnNlLCAnT1BUSU9OX0VHTElCQ19GVFJBVkVSU0UnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfZ2V0bG9naW4sICdPUFRJT05fRUdMSUJDX0dFVExPR0lOJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2lkbiwgJ09QVElPTl9FR0xJQkNfSUROJywgY25mKQorICAgIGdsaWJjX2NmZyhpcHY0LCAnT1BUSU9OX0VHTElCQ19JTkVUJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2luZXRfYW5sLCAnT1BUSU9OX0VHTElCQ19JTkVUX0FOTCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY19saWJtLCAnT1BUSU9OX0VHTElCQ19MSUJNJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2xvY2FsZXMsICdPUFRJT05fRUdMSUJDX0xPQ0FMRVMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfbG9jYWxlX2NvZGUsICdPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX21lbXVzYWdlLCAnT1BUSU9OX0VHTElCQ19NRU1VU0FHRScsIGNuZikKKyAgICBnbGliY19jZmcobGliY19uaXMsICdPUFRJT05fRUdMSUJDX05JUycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19uc3N3aXRjaCwgJ09QVElPTl9FR0xJQkNfTlNTV0lUQ0gnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfcmNtZCwgJ09QVElPTl9FR0xJQkNfUkNNRCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY19ydGxkX2RlYnVnLCAnT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3NwYXduLCAnT1BUSU9OX0VHTElCQ19TUEFXTicsIGNuZikKKyAgICBnbGliY19jZmcobGliY19zdHJlYW1zLCAnT1BUSU9OX0VHTElCQ19TVFJFQU1TJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3N1bnJwYywgJ09QVElPTl9FR0xJQkNfU1VOUlBDJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3V0bXAsICdPUFRJT05fRUdMSUJDX1VUTVAnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfdXRtcHgsICdPUFRJT05fRUdMSUJDX1VUTVBYJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3dvcmRleHAsICdPUFRJT05fRUdMSUJDX1dPUkRFWFAnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfcG9zaXhfY2xhbmdfd2NoYXIsICdPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUicsIGNuZikKKyAgICBnbGliY19jZmcobGliY19wb3NpeF9yZWdleHAsICdPUFRJT05fUE9TSVhfUkVHRVhQJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3Bvc2l4X3JlZ2V4cF9nbGliYywgJ09QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfcG9zaXhfd2NoYXJfaW8sICdPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTycsIGNuZikKKworICAgIHJldHVybiAiXG4iLmpvaW4oY25mKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1wYWNrYWdlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtcGFja2FnZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY2MDM2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtcGFja2FnZS5pbmMKQEAgLTAsMCArMSwyMTQgQEAKKyMKKyMgRm9yIG5vdywgd2Ugd2lsbCBza2lwIGJ1aWxkaW5nIG9mIGEgZ2NjIHBhY2thZ2UgaWYgaXQgaXMgYSB1Y2xpYmMgb25lCisjIGFuZCBvdXIgYnVpbGQgaXMgbm90IGEgdWNsaWJjIG9uZSwgYW5kIHdlIHNraXAgYSBnbGliYyBvbmUgaWYgb3VyIGJ1aWxkCisjIGlzIGEgdWNsaWJjIGJ1aWxkLgorIworIyBTZWUgdGhlIG5vdGUgaW4gZ2NjL2djY18zLjQuMC5vZQorIworCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIGltcG9ydCBiYiwgcmUKKyAgICB1Y19vcyA9IChyZS5tYXRjaCgnLip1Y2xpYmMqJywgZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpKSAhPSBOb25lKQorICAgIGlmIHVjX29zOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiaW5jb21wYXRpYmxlIHdpdGggdGFyZ2V0ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKSkKK30KKworIyBTZXQgdGhpcyB0byB6ZXJvIGlmIHlvdSBkb24ndCB3YW50IGxkY29uZmlnIGluIHRoZSBvdXRwdXQgcGFja2FnZQorVVNFX0xEQ09ORklHID89ICIxIgorCitJTkhJQklUX1NZU1JPT1RfU1RSSVAgPSAiMSIKKworUEFDS0FHRVMgPSAiJHtQTn0tZGJnIGNhdGNoc2VndiBzbG4gbnNjZCBsZGQgdHpjb2RlICR7UE59LXV0aWxzIGdsaWJjLXRocmVhZC1kYiAke1BOfS1waWMgbGliY2lkbiBsaWJtZW11c2FnZSBsaWJzZWdmYXVsdCAke1BOfS1wY3Byb2ZpbGUgbGlic290cnVzcyAke1BOfSBnbGliYy1leHRyYS1uc3MgJHtQTn0tZGV2ICR7UE59LXN0YXRpY2RldiAke1BOfS1kb2MiCisKKyMgVGhlIGxkLnNvIGluIHRoaXMgZ2xpYmMgc3VwcG9ydHMgdGhlIEdOVV9IQVNICitSUFJPVklERVNfJHtQTn0gPSAiZWdsaWJjIHJ0bGQoR05VX0hBU0gpIgorUlBST1ZJREVTXyR7UE59LXV0aWxzID0gImVnbGliYy11dGlscyIKK1JQUk9WSURFU18ke1BOfS1tdHJhY2UgPSAiZWdsaWJjLW10cmFjZSBsaWJjLW10cmFjZSIKK1JQUk9WSURFU18ke1BOfS1waWMgPSAiZWdsaWJjLXBpYyIKK1JQUk9WSURFU18ke1BOfS1kZXYgPSAiZWdsaWJjLWRldiBsaWJjNi1kZXYgdmlydHVhbC1saWJjLWRldiIKK1JQUk9WSURFU18ke1BOfS1zdGF0aWNkZXYgPSAiZWdsaWJjLXN0YXRpY2RldiIKK1JQUk9WSURFU18ke1BOfS1kb2MgPSAiZWdsaWJjLWRvYyIKK1JQUk9WSURFU19nbGliYy1leHRyYS1uc3MgPSAiZWdsaWJjLWV4dHJhLW5zcyIKK1JQUk9WSURFU19nbGliYy10aHJlYWQtZGIgPSAiZWdsaWJjLXRocmVhZC1kYiIKK1JQUk9WSURFU18ke1BOfS1wY3Byb2ZpbGUgPSAiZWdsaWJjLXBjcHJvZmlsZSIKK1JQUk9WSURFU18ke1BOfS1kYmcgPSAiZWdsaWJjLWRiZyIKK2xpYmNfYmFzZWxpYnMgPSAiJHtiYXNlX2xpYmRpcn0vbGliY3J5cHQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGliY3J5cHQtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJjLnNvLiogJHtiYXNlX2xpYmRpcn0vbGliYy0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYm0qLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlibS0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYm12ZWMtKi5zbyAke2Jhc2VfbGliZGlyfS9sZCouc28uKiAke2Jhc2VfbGliZGlyfS9sZC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYnB0aHJlYWQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlicHRocmVhZC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYnJlc29sdiouc28uKiAke2Jhc2VfbGliZGlyfS9saWJyZXNvbHYtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJydCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJydC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYnV0aWwqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlidXRpbC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYm5zbCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJuc2wtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJuc3NfZmlsZXMqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlibnNzX2ZpbGVzLSouc28gJHtiYXNlX2xpYmRpcn0vbGlibnNzX2NvbXBhdCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJuc3NfY29tcGF0LSouc28gJHtiYXNlX2xpYmRpcn0vbGlibnNzX2Rucyouc28uKiAke2Jhc2VfbGliZGlyfS9saWJuc3NfZG5zLSouc28gJHtiYXNlX2xpYmRpcn0vbGliZGwqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGliZGwtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJhbmwqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGliYW5sLSouc28gJHtiYXNlX2xpYmRpcn0vbGliQnJva2VuTG9jYWxlKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYkJyb2tlbkxvY2FsZS0qLnNvIgorbGliY19iYXNlbGlic19hcHBlbmRfYWFyY2g2NCA9ICIgL2xpYi9sZC1saW51eC1hYXJjaDY0Ki5zby4xIgorSU5TQU5FX1NLSVBfJHtQTn1fYXBwZW5kX2FhcmNoNjQgPSAiIGxpYmRpciIKKworRklMRVNfJHtQTn0gPSAiJHtsaWJjX2Jhc2VsaWJzfSAke2xpYmV4ZWNkaXJ9LyogJHtAYmFzZV9jb25kaXRpb25hbCgnVVNFX0xEQ09ORklHJywgJzEnLCAnJHtiYXNlX3NiaW5kaXJ9L2xkY29uZmlnICR7c3lzY29uZmRpcn0vbGQuc28uY29uZicsICcnLCBkKX0iCitGSUxFU19sZGQgPSAiJHtiaW5kaXJ9L2xkZCIKK0ZJTEVTX2xpYnNlZ2ZhdWx0ID0gIiR7YmFzZV9saWJkaXJ9L2xpYlNlZ0ZhdWx0KiIKK0ZJTEVTX2xpYmNpZG4gPSAiJHtiYXNlX2xpYmRpcn0vbGliY2lkbi0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYmNpZG4uc28uKiIKK0ZJTEVTX2xpYm1lbXVzYWdlID0gIiR7YmFzZV9saWJkaXJ9L2xpYm1lbXVzYWdlLnNvIgorRklMRVNfZ2xpYmMtZXh0cmEtbnNzID0gIiR7YmFzZV9saWJkaXJ9L2xpYm5zc18qLSouc28gJHtiYXNlX2xpYmRpcn0vbGlibnNzXyouc28uKiIKK0ZJTEVTX3NsbiA9ICIke2Jhc2Vfc2JpbmRpcn0vc2xuIgorRklMRVNfJHtQTn0tcGljID0gIiR7bGliZGlyfS8qX3BpYy5hICR7bGliZGlyfS8qX3BpYy5tYXAgJHtsaWJkaXJ9L2xpYmNfcGljLyoubyIKK0ZJTEVTX2xpYnNvdHJ1c3MgPSAiJHtsaWJkaXJ9L2F1ZGl0L3NvdHJ1c3MtbGliLnNvIgorRklMRVNfU09MSUJTREVWID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9IgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vcnBjZ2VuICR7bGliZGlyfS8qX25vbnNoYXJlZC5hICR7YmFzZV9saWJkaXJ9Lypfbm9uc2hhcmVkLmEgJHtiYXNlX2xpYmRpcn0vKi5vICR7ZGF0YWRpcn0vYWNsb2NhbCIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9LyouYSAke2Jhc2VfbGliZGlyfS8qLmEiCitGSUxFU19uc2NkID0gIiR7c2JpbmRpcn0vbnNjZCogJHtzeXNjb25mZGlyfS9pbml0LmQvbnNjZCAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL25zY2QqICR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC9uc2NkLmNvbmYgXAorICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L25zY2QuY29uZiAke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzLzk4X25zY2QgJHtsb2NhbHN0YXRlZGlyfS9kYi9uc2NkIgorRklMRVNfJHtQTn0tbXRyYWNlID0gIiR7YmluZGlyfS9tdHJhY2UiCitGSUxFU190emNvZGUgPSAiJHtiaW5kaXJ9L3R6c2VsZWN0ICR7c2JpbmRpcn0vemljICR7c2JpbmRpcn0vemR1bXAiCitGSUxFU18ke1BOfS11dGlscyA9ICIke2JpbmRpcn0vKiAke3NiaW5kaXJ9LyoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vKi8uZGVidWcgJHtsaWJkaXJ9L2F1ZGl0Ly5kZWJ1ZyIKK0ZJTEVTX2NhdGNoc2VndiA9ICIke2JpbmRpcn0vY2F0Y2hzZWd2IgorUkRFUEVORFNfY2F0Y2hzZWd2ID0gImxpYnNlZ2ZhdWx0IgorRklMRVNfJHtQTn0tcGNwcm9maWxlID0gIiR7YmFzZV9saWJkaXJ9L2xpYnBjcHJvZmlsZS5zbyIKK0ZJTEVTX2dsaWJjLXRocmVhZC1kYiA9ICIke2Jhc2VfbGliZGlyfS9saWJ0aHJlYWRfZGIuc28uKiAke2Jhc2VfbGliZGlyfS9saWJ0aHJlYWRfZGItKi5zbyIKK1JQUk9WSURFU18ke1BOfS1kZXYgKz0gImxpYmMtZGV2IgorUlBST1ZJREVTXyR7UE59LXN0YXRpY2RldiArPSAibGliYy1zdGF0aWNkZXYiCisKK1NVTU1BUllfc2xuID0gIlRoZSBzdGF0aWMgbG4iCitERVNDUklQVElPTl9zbG4gPSAiU2ltaWxhciB0byB0aGUgJ2xuJyB1dGlsaXR5LCBidXQgc3RhdGljYWxseSBsaW5rZWQuICBzbG4gaXMgdXNlZnVsIHRvIG1ha2Ugc3ltYm9saWMgbGlua3MgdG8gZHluYW1pYyBsaWJyYXJpZXMgaWYgdGhlIGR5bmFtaWMgbGlua2luZyBzeXN0ZW0sIGZvciBzb21lIHJlYXNvbiwgaXMgbm90IGZ1bmN0aW9uYWwuIgorU1VNTUFSWV9uc2NkID0gIk5hbWUgc2VydmljZSBjYWNoZSBkYWVtb24iCitERVNDUklQVElPTl9uc2NkID0gIm5zY2QsIG5hbWUgc2VydmljZSBjYWNoZSBkYWVtb24sIGNhY2hlcyBuYW1lIHNlcnZpY2UgbG9va3VwcyBmb3IgdGhlIHBhc3N3ZCwgZ3JvdXAgYW5kIGhvc3RzIGluZm9ybWF0aW9uLiAgSXQgY2FuIGRhbWF0aWNhbGx5IGltcHJvdmlkZSBwZXJmb3JtYW5jZSB3aXRoIHJlbW90ZSwgc3VjaCBhcyBOSVMgb3IgTklTKywgbmFtZSBzZXJ2aWNlcy4iCitTVU1NQVJZX2dsaWJjLWV4dHJhLW5zcyA9ICJoZXNpb2QsIE5JUyBhbmQgTklTKyBuc3MgbGlicmFyaWVzIgorREVTQ1JJUFRJT05fZ2xpYmMtZXh0cmEtbnNzID0gImdsaWJjOiBuaXMsIG5pc3BsdXMgYW5kIGhlc2lvZCBzZWFyY2ggc2VydmljZXMuIgorU1VNTUFSWV9sZGQgPSAicHJpbnQgc2hhcmVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzIgorREVTQ1JJUFRJT05fbGRkID0gIiR7YmluZGlyfS9sZGQgcHJpbnRzIHNoYXJlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmb3IgZWFjaCBwcm9ncmFtIG9yIHNoYXJlZCBsaWJyYXJ5IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKK1NVTU1BUllfJHtQTn0tdXRpbHMgPSAiTWlzY2VsbGFuZW91cyB1dGlsaXRpZXMgcHJvdmlkZWQgYnkgZ2xpYmMiCitERVNDUklQVElPTl8ke1BOfS11dGlscyA9ICJNaXNjZWxsYW5lb3VzIHV0aWxpdGllcyBpbmNsdWRpbmcgZ2V0Y29uZiwgaWNvbnYsIGxvY2FsZSwgZ2VuY2F0LCBycGNnZW4sIC4uLiIKK0RFU0NSSVBUSU9OX2xpYnNvdHJ1c3MgPSAiTGlicmFyeSB0byBzdXBwb3J0IHNvdHJ1c3Mgd2hpY2ggdHJhY2VzIGNhbGxzIHRocm91Z2ggUExUcyIKK0RFU0NSSVBUSU9OX3R6Y29kZSA9ICJ0emNvZGUsIHRpbWV6b25lIHpvbmVpbmZvIHV0aWxzIC0tIHppYywgemR1bXAsIHR6c2VsZWN0IgorCitpbmhlcml0IGxpYmMtY29tbW9uIG11bHRpbGliX2hlYWRlcgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJcm0gLWYgJHtEfSR7c3lzY29uZmRpcn0vbG9jYWx0aW1lCisJcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9CisKKwkjIHJlbW92ZSBlbXB0eSBnbGliYyBkaXIKKwlpZiBbIC1kICR7RH0ke2xpYmRpcn0vZ2xpYmMgLWEgISAtZSAke0R9JHtsaWJkaXJ9L2dsaWJjL3B0X2Nob3duIF07IHRoZW4KKwkJcm1kaXIgJHtEfSR7bGliZGlyfS9nbGliYworCWZpCisJb2VfbXVsdGlsaWJfaGVhZGVyIGJpdHMvc3lzY2FsbC5oCisKKwlpZiBbIC1mICR7RH0ke2JpbmRpcn0vbXRyYWNlIF07IHRoZW4KKwkJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISAke1VTUkJJTlBBVEh9L2VudiBwZXJsLCcgLWUgJzJzLGV4ZWMuKnBlcmwsZXhlYyAke1VTUkJJTlBBVEh9L2VudiBwZXJsLCcgJHtEfSR7YmluZGlyfS9tdHJhY2UKKwlmaQorCXJtIC1yZiAke0R9JHtpbmNsdWRlZGlyfS9ycGNzdmMvcnF1b3RhKgorCSMgSW5mbyBkaXIgbGlzdGluZyBpc24ndCBpbnRlcmVzdGluZyBhdCB0aGlzIHBvaW50IHNvIHJlbW92ZSBpdCBpZiBpdCBleGlzdHMuCisJaWYgWyAtZSAiJHtEfSR7aW5mb2Rpcn0vZGlyIiBdOyB0aGVuCisJCXJtIC1mICR7RH0ke2luZm9kaXJ9L2RpcgorCWZpCisKKwlpZiBbICIke1VTRV9MRENPTkZJR30iICE9ICIxIiBdOyB0aGVuCisJCSMgV2Ugd29uJ3Qgc2hpcCB0aGVzZSBmaWxlcyAoc2VlIEZJTEVTIGFib3ZlKSBzbyBsZXQncyBub3QgaW5zdGFsbCB0aGVtCisJCXJtIC1mICR7RH0ke3N5c2NvbmZkaXJ9L2xkLnNvLmNvbmYKKwkJcm0gLWYgJHtEfSR7YmFzZV9zYmluZGlyfS9sZGNvbmZpZworCQkjIFRoaXMgZGlyZWN0b3J5IHdpbGwgYmUgZW1wdHkgbm93IHNvIHJlbW92ZSBpdCB0b28uCisJCSMgQnV0IGNoZWNrIHdoZXRoZXIgaXQgZXhpc3RzIGZpcnN0LCBzaW5jZSBpdCB3b24ndCBmb3IgZ2xpYmMtaW5pdGlhbC4KKwkJaWYgWyAtZCAke0R9JHtzeXNjb25mZGlyfSBdOyB0aGVuCisJCQlybWRpciAke0R9JHtzeXNjb25mZGlyfQorCQlmaQorCWZpCisKKwlpZiBlY2hvICR7UE59fGdyZXAgLXEgImdsaWJjLWluaXRpYWwiOyB0aGVuCisJCXJldHVybgorCWZpCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vZGIvbnNjZAorCWluc3RhbGwgLW0gMDc1NSAke1N9L25zY2QvbnNjZC5pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uc2NkCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vbnNjZC9uc2NkLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vbnNjZC5jb25mCisJc2VkIC1pICJzJWRhZW1vbiVzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tZXhlYyVnIiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvbnNjZAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1N9L25zY2QvbnNjZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kCisJCWVjaG8gImQgL3J1bi9uc2NkIDc1NSByb290IHJvb3QgLSIgXAorCQkJPiAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kL25zY2QuY29uZgorCWVsc2UKKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCQllY2hvICJkIHJvb3Qgcm9vdCAwNzU1IC92YXIvcnVuL25zY2Qgbm9uZSIgXAorCQkJPiAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy85OF9uc2NkCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmRfYWFyY2g2NCAoKSB7CisJaWYgWyAiJHtiYXNlX2xpYmRpcn0iICE9ICIvbGliIiBdIDsgdGhlbgorCQkjIFRoZSBhYXJjaDY0IEFCSSBzYXlzIHRoZSBkeW5hbWljIGxpbmtlciAtbXVzdC0gYmUgL2xpYi9sZC1saW51eC1hYXJjaDY0W19iZV0uc28uMQorCQlpbnN0YWxsIC1kICR7RH0vbGliCisJCWlmIFsgLWUgJHtEfSR7YmFzZV9saWJkaXJ9L2xkLWxpbnV4LWFhcmNoNjQuc28uMSBdOyB0aGVuCisJCQlsbiAtcyAke0BiYXNlX3BhdGhfcmVsYXRpdmUoJy9saWInLCAnJHtiYXNlX2xpYmRpcn0nKX0vbGQtbGludXgtYWFyY2g2NC5zby4xIFwKKwkJCQkke0R9L2xpYi9sZC1saW51eC1hYXJjaDY0LnNvLjEKKwkJZWxpZiBbIC1lICR7RH0ke2Jhc2VfbGliZGlyfS9sZC1saW51eC1hYXJjaDY0X2JlLnNvLjEgXTsgdGhlbgorCQkJbG4gLXMgJHtAYmFzZV9wYXRoX3JlbGF0aXZlKCcvbGliJywgJyR7YmFzZV9saWJkaXJ9Jyl9L2xkLWxpbnV4LWFhcmNoNjRfYmUuc28uMSBcCisJCQkJJHtEfS9saWIvbGQtbGludXgtYWFyY2g2NF9iZS5zby4xCisJCWZpCisJZmkKK30KKworZG9faW5zdGFsbF9sb2NhbGUgKCkgeworCWRlc3Q9JHtEfS8ke2luY2x1ZGVkaXJ9L2dsaWJjLWxvY2FsZS1pbnRlcm5hbC0ke01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCWluc3RhbGwgLWQgJHtkZXN0fSR7YmFzZV9saWJkaXJ9ICR7ZGVzdH0ke2JpbmRpcn0gJHtkZXN0fSR7bGliZGlyfSAke2Rlc3R9JHtkYXRhZGlyfQorCWlmIFsgIiR7YmFzZV9saWJkaXJ9IiAhPSAiJHtsaWJkaXJ9IiBdOyB0aGVuCisJCWNwIC1mcFBSICR7RH0ke2Jhc2VfbGliZGlyfS8qICR7ZGVzdH0ke2Jhc2VfbGliZGlyfQorCWZpCisJaWYgWyAtZSAke0R9JHtiaW5kaXJ9L2xvY2FsZWRlZiBdOyB0aGVuCisJCW12IC1mICR7RH0ke2JpbmRpcn0vbG9jYWxlZGVmICR7ZGVzdH0ke2JpbmRpcn0KKwlmaQorCWlmIFsgLWUgJHtEfSR7bGliZGlyfS9nY29udiBdOyB0aGVuCisJCW12IC1mICR7RH0ke2xpYmRpcn0vZ2NvbnYgJHtkZXN0fSR7bGliZGlyfQorCWZpCisJaWYgWyAtZSAke0R9JHtleGVjX3ByZWZpeH0vbGliIF07IHRoZW4KKwkJY3AgLWZwUFIgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYiAke2Rlc3R9JHtleGVjX3ByZWZpeH0KKwlmaQorCWlmIFsgLWUgJHtEfSR7ZGF0YWRpcn0vaTE4biBdOyB0aGVuCisJCW12ICR7RH0ke2RhdGFkaXJ9L2kxOG4gJHtkZXN0fSR7ZGF0YWRpcn0KKwlmaQorCWNwIC1mcFBSICR7RH0ke2RhdGFkaXJ9LyogJHtkZXN0fSR7ZGF0YWRpcn0KKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vbG9jYWxlLworCWNwIC1mcFBSICR7V09SS0RJUn0vU1VQUE9SVEVEICR7ZGVzdH0KK30KKworYWRkdGFzayBkb19pbnN0YWxsX2xvY2FsZSBhZnRlciBkb19pbnN0YWxsIGJlZm9yZSBkb19wb3B1bGF0ZV9zeXNyb290IGRvX3BhY2thZ2UKKworYmFzaHNjcmlwdHMgPSAibXRyYWNlIHNvdHJ1c3MgeHRyYWNlIgorCitkb19ldmFjdWF0ZV9zY3JpcHRzICgpIHsKKwl0YXJnZXQ9JHtEfSR7aW5jbHVkZWRpcn0vZ2xpYmMtc2NyaXB0cy1pbnRlcm5hbC0ke01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCW1rZGlyIC1wICR0YXJnZXQKKwlmb3IgaSBpbiAke2Jhc2hzY3JpcHRzfTsgZG8KKwkJaWYgWyAtZiAke0R9JHtiaW5kaXJ9LyRpIF07IHRoZW4KKwkJCWNwICR7RH0ke2JpbmRpcn0vJGkgJHRhcmdldC8KKwkJZmkKKwlkb25lCit9CisKK2FkZHRhc2sgZXZhY3VhdGVfc2NyaXB0cyBhZnRlciBkb19pbnN0YWxsIGJlZm9yZSBkb19wb3B1bGF0ZV9zeXNyb290IGRvX3BhY2thZ2UKKworUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTICs9ICJnbGliY19wYWNrYWdlX3ByZXByb2Nlc3MiCisKK2dsaWJjX3BhY2thZ2VfcHJlcHJvY2VzcyAoKSB7CisJcm0gLXJmICR7UEtHRH0vJHtpbmNsdWRlZGlyfS9nbGliYy1sb2NhbGUtaW50ZXJuYWwtJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30KKwlybSAtcmYgJHtQS0dEfS8ke2luY2x1ZGVkaXJ9L2dsaWJjLXNjcmlwdHMtaW50ZXJuYWwtJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30KKwlmb3IgaSBpbiAke2Jhc2hzY3JpcHRzfTsgZG8KKwkgICAgcm0gLWYgJHtQS0dEfSR7YmluZGlyfS8kaQorCWRvbmUKKwlybSAtcmYgJHtQS0dEfS8ke2xvY2FsZWRpcn0KKwlpZiBbICIke2xpYmRpcn0iICE9ICIke2V4ZWNfcHJlZml4fS9saWIiIF07IHRoZW4KKwkJIyBUaGlzIGRpciBvbmx5IGV4aXN0cyB0byBob2xkIGxvY2FsZXMKKwkJcm0gLXJmICR7UEtHRH0ke2V4ZWNfcHJlZml4fS9saWIKKwlmaQorfQorCitwa2dfcG9zdGluc3RfbnNjZCAoKSB7CisJaWYgWyAteiAiJEQiIF07IHRoZW4KKwkJaWYgY29tbWFuZCAtdiBzeXN0ZW1kLXRtcGZpbGVzID4vZGV2L251bGw7IHRoZW4KKwkJCXN5c3RlbWQtdG1wZmlsZXMgLS1jcmVhdGUgJHtzeXNjb25mZGlyfS90bXBmaWxlcy5kL25zY2QuY29uZgorCQllbGlmIFsgLWUgJHtzeXNjb25mZGlyfS9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggXTsgdGhlbgorCQkJJHtzeXNjb25mZGlyfS9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggdXBkYXRlCisJCWZpCisJZmkKK30KK0NPTkZGSUxFU19uc2NkPSIke3N5c2NvbmZkaXJ9L25zY2QuY29uZiIKKworU1lTVEVNRF9QQUNLQUdFUyA9ICJuc2NkIgorU1lTVEVNRF9TRVJWSUNFX25zY2QgPSAibnNjZC5zZXJ2aWNlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1zY3JpcHRzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtc2NyaXB0cy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EwNjc3MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtc2NyaXB0cy5pbmMKQEAgLTAsMCArMSwxNiBAQAoraW5jbHVkZSBnbGliYy1jb2xsYXRlcmFsLmluYworCitTVU1NQVJZID0gInV0aWxpdHkgc2NyaXB0cyBwcm92aWRlZCBieSBnbGliYyIKK0RFU0NSSVBUSU9OID0gInV0aWxpdHkgc2NyaXB0cyBwcm92aWRlZCBieSBnbGliYyIKK1JERVBFTkRTXyR7UE59ID0gImJhc2ggZ2xpYmMtbXRyYWNlIgorCitTUkMgPSAiJHtTVEFHSU5HX0lOQ0RJUn0vZ2xpYmMtc2NyaXB0cy1pbnRlcm5hbC0ke01VTFRJTUFDSF9UQVJHRVRfU1lTfSIKKworYmFzaHNjcmlwdHMgPSAic290cnVzcyB4dHJhY2UiCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAtbSAwNzU1ICR7RH0ke2JpbmRpcn0KKwlmb3IgaSBpbiAke2Jhc2hzY3JpcHRzfTsgZG8KKwkJaW5zdGFsbCAtbSAwNzU1ICR7U1JDfS8kaSAke0R9JHtiaW5kaXJ9LworCWRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtc2NyaXB0c18yLjIyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1zY3JpcHRzXzIuMjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE4OWJkOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtc2NyaXB0c18yLjIyLmJiCkBAIC0wLDAgKzEgQEAKK3JlcXVpcmUgZ2xpYmMtc2NyaXB0cy5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtdGVzdGluZy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXRlc3RpbmcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YmJmMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXRlc3RpbmcuaW5jCkBAIC0wLDAgKzEsOTYgQEAKK2RvX2NvbXBpbGVfYXBwZW5kICgpIHsKKwkjIG5vdyBnZW5lcmF0ZSBzY3JpcHQgdG8gZHJpdmUgdGVzdGluZworCWVjaG8gIiMhL3Vzci9iaW4vZW52IHNoIiA+JHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNldCA+PiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJIyBwcnVuZSBvdXQgdGhlIHVubmVlZGVkIHZhcnMKKwlzZWQgLWkgLWUgIi9eQkFTSC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlVTRVIvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15PUFQvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15ESVJTVEFDSy9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXkVVSUQvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15GVU5DTkFNRS9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXkdST1VQUy9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXkhPU1QvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15IT01FL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eSUZTL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eTENfQUxML2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eTE9HTkFNRS9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXk1BQ0hUWVBFL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eT1NUWVBFL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eUElQRS9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlNIRUxML2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eJy9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlVJRC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlRFUk0vZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15QQVRDSF9HRVQvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15QS0dfL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eUE9TSVhMWV8vZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15QUElEL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eUFM0L2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eUS9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlNITFZML2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eU1RBR0lORy9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXkxEX0xJQlJBUllfUEFUSC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlBTRVVETy9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisKKwkjIHBvaW50IHRvIHJlYWwgc3lzcm9vdCBub3QgdGhlIHRvb2xjaGFpbiBib290c3RyYXAgc3lzcm9vdAorCXNlZCAtaSAtZSAicy9cLXRjYm9vdHN0cmFwLy9nIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisKKwkjIHVzZSB0aGUgZmluYWwgY3Jvc3MtZ2NjIHRvIHRlc3Qgc2luY2Ugc29tZSB0ZXN0cyBuZWVkIGxpYnN0ZGMrKworCXNlZCAtaSAtZSAicy9eUEFUSD0uKlwuZ2NjLWNyb3NzLWluaXRpYWxcOi9QQVRIPS9nIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisKKwkjIGFwcGVuZCBleGVjdXRpb24gcGFydCBzY3JpcHQKK2NhdCA+PiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjIDw8IFNUT1AKK3RhcmdldD0iXCQxIgoraWYgWyAieFwkdGFyZ2V0IiA9ICJ4IiBdCit0aGVuCisJZWNobyAiUGxlYXNlIHNwZWNpZnkgdGhlIHRhcmdldCBtYWNoaW5lIGFuZCByZW1vdGUgdXNlciBpbiBmb3JtIG9mIHVzZXJAdGFyZ2V0IgorCWV4aXQgMTsKK2ZpCitzc2ggXCR0YXJnZXQgbHMgXCRQV0RcICAyPiYxID4gL2Rldi9udWxsCitpZiBbICJ4XCQ/IiAhPSAieDAiIF0KK3RoZW4KKwllY2hvICJGYWlsZWQgY29ubmVjdGluZyB0byBcJHRhcmdldCBpdCBjb3VsZCBiZSBiZWNhdXNlIG9mOiIKKwllY2hvICIxLiBZb3UgZG9udCBoYXZlIHBhc3N3b3JkbGVzcyBzc2ggc2V0dXAgdG8gYWNjZXNzIFwkdGFyZ2V0IgorCWVjaG8gIjIuIE5GUyBzaGFyZSBvbiBcJHRhcmdldCBpcyBub3QgbW91bnRlZCBvciBpZiBtb3VudGVkIHRoZW4gbm90IG1hdGNoaW5nIHRoZSBidWlsZCB0cmVlIGxheW91dC4iCisJZWNobyAiICAgVGhlIHRyZWUgc2hvdWxkIGJlIGFjY2Vzc2libGUgYXQgc2FtZSBsb2NhdGlvbiBvbiBidWlsZCBob3N0IGFuZCB0YXJnZXQiCisJZWNobyAiICAgWW91IGNhbiBhZGQgbmZzLWNsaWVudCB0byBJTUFHRV9GRUFUVVJFUyB0byBnZXQgdGhlIG5mcyBjbGllbnQgb24gdGFyZ2V0IgorCWVjaG8gIjMuIG5mcyBzZXJ2ZXIgb24gYnVpbGQgaG9zdCBpcyBub3QgcnVubmluZy4iCisJZWNobyAiICAgUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlICdub19yb290X3NxdWFzaCcgYWRkZWQgaW4gL2V0Yy9leHBvcnRzIGlmIHlvdSB3YW50IgorCWVjaG8gIiAgIHRvIHRlc3QgYXMgcm9vdCB1c2VyIG9uIHRhcmdldCAodXN1YWxseSBpdHMgcmVjb21tZW5kZWQgdG8gY3JlYXRlIGEgbm9uIgorCWVjaG8gIiAgIHJvb3QgdXNlci4iCisJZWNobyAiICAgQXMgYSBzYW5pdHkgY2hlY2sgbWFrZSBzdXJlIHRoYXQgdGFyZ2V0IGNhbiByZWFkL3dyaXRlIHRvIHRoZSBnbGliYyBidWlsZCB0cmVlIgorCWVjaG8gIiAgIFBsZWFzZSByZWZlciB0byAke1N9L0VHTElCQy5jcm9zcy10ZXN0aW5nIGZvciBmdXJ0aGVyIGluc3RydWN0aW9ucyBvbiBzZXR1cCIKKwlleGl0IDEKK2ZpCisJZWNobyAiIyB3ZSB0ZXN0IHVzaW5nIGNyb3NzIGNvbXBpbGVyIGZyb20gcmVhbCBzeXNyb290IHRoZXJlZm9yZSBvdmVycmlkZSB0aGUiID4gJHtCfS9jb25maWdwYXJtcworCWVjaG8gIiMgZGVmaW5pdGlvbnMgdGhhdCBjb21lIGZyb20gJHtCfS9jb25maWcubWFrZSIgPj4gJHtCfS9jb25maWdwYXJtcworCWZncmVwIHRjYm9vdHN0cmFwICR7Qn0vY29uZmlnLm1ha2UgPiAke0J9L2NvbmZpZ3Bhcm1zCisJc2VkIC1pIC1lICJzL1wtdGNib290c3RyYXAvL2ciICR7Qn0vY29uZmlncGFybXMKKworIyBnKysgdXNlcyBmbGFnIC1ub3N0ZGluYywgc28gdGhlIGxvY2F0aW9ucyBvZiBzeXN0ZW0gaW5jbHVkZSBoZWFkZXJzIG11c3QgYmUgZXhwbGljaXRseSBzcGVjaWZpZWQKKyMgSWYgdGhlIGxvY2F0aW9ucyBhcmUgbm90IGFscmVhZHkgc3BlY2lmaWVkIGluIGNvbmZpZy5tYWtlLCB0aGVuIHdlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisjICAgIDxzeXNyb290Pi91c3IvaW5jbHVkZS9jKysvPGcrKyB2ZXJzaW9uPgorIyAgICA8c3lzcm9vdD4vdXNyL2luY2x1ZGUvYysrLzxnKysgdmVyc2lvbj4vPG1hY2hpbmU+CisKK2N4eGluY2x1ZGVzPVxgY2F0ICR7Qn0vY29uZmlnLm1ha2UgfCBnYXdrICdcJDEgPT0gImMrKy1zeXNpbmNsdWRlcyInIHwgZ2F3ayAtRiI9IiAne3ByaW50IFwkMn0nIHwgc2VkICJzL1sgXHRdXD8vL2ciXGAKKworaWYgWyAteiAiXCRjeHhpbmNsdWRlcyIgXTsgdGhlbgorICBzeXNyb290PVxgY2F0ICR7Qn0vY29uZmlncGFybXMgfCBzZWQgLW4gIi9DWFgvcCIgfCBzZWQgLWUgInMvXi4qLS1zeXNyb290PS8vIlxgCisgIGN4eD1cYGNhdCAke0J9L2NvbmZpZ3Bhcm1zIHwgZ2F3ayAnXCQxIH4gL15DWFgvJyB8IGdhd2sgLUYiPSIgJ3twcmludCBcJDJ9JyB8IGdhd2sgJ3twcmludCBcJDF9J1xgCisgIGN4eG1hY2hpbmU9XGBcJGN4eCAtZHVtcG1hY2hpbmVcYAorICBjeHh2ZXJzaW9uPVxgXCRjeHggLWR1bXB2ZXJzaW9uXGAKKyAgIyBwYXNzIHRoZSBuZXcgdmFsdWUgb2YgYysrLXN5c2luY2x1ZGVzIHZpYSBjb25maWdwYXJtcworICBlY2hvICIjIGMrKy1zeXNpbmNsdWRlcyBhZGRlZDoiID4+ICR7Qn0vY29uZmlncGFybXMKKyAgZWNobyAiYysrLXN5c2luY2x1ZGVzID0gLWlzeXN0ZW0gXCRzeXNyb290L3Vzci9pbmNsdWRlL2MrKy9cJGN4eHZlcnNpb24gLWlzeXN0ZW0gXCRzeXNyb290L3Vzci9pbmNsdWRlL2MrKy9cJGN4eHZlcnNpb24vXCRjeHhtYWNoaW5lIiA+PiAke0J9L2NvbmZpZ3Bhcm1zCitmaQorCit3cmFwcGVyPSIke1N9L3NjcmlwdHMvY3Jvc3MtdGVzdC1zc2guc2ggXCR0YXJnZXQiCitsb2NhbGVkZWY9IiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9jcm9zcy1sb2NhbGVkZWYgLS1saXR0bGUtZW5kaWFuIC0tdWludDMyLWFsaWduPTQiCittYWtlIHRlc3RzLWNsZWFuCittYWtlIGNyb3NzLWxvY2FsZWRlZj0iXCRsb2NhbGVkZWYiIGNyb3NzLXRlc3Qtd3JhcHBlcj0iXCR3cmFwcGVyIiAtayBjaGVjaworcm0gLXJmICR7Qn0vY29uZmlncGFybXMKK1NUT1AKKworCWNobW9kICt4ICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdmYTJkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMuaW5jCkBAIC0wLDAgKzEsMTA1IEBACityZXF1aXJlIGdsaWJjLWNvbW1vbi5pbmMKK3JlcXVpcmUgZ2xpYmMtbGQuaW5jCityZXF1aXJlIGdsaWJjLXRlc3RpbmcuaW5jCisKK1NUQUdJTkdDQyA9ICJnY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1NUQUdJTkdDQ19jbGFzcy1uYXRpdmVzZGsgPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitQQVRIX3ByZXBlbmQgPSAiJHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59LiR7U1RBR0lOR0NDfToiCisKK1RPT0xDSEFJTl9PUFRJT05TID0gIiAtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0iCisKKyMgZ2xpYmMgY2FuJ3QgYmUgYnVpbHQgd2l0aG91dCBvcHRpbWl6YXRpb24sIGlmIHNvbWVvbmUgdHJpZXMgdG8gY29tcGlsZSBhbgorIyBlbnRpcmUgaW1hZ2UgYXMgLU8wLCB3ZSBvdmVycmlkZSBpdCB3aXRoIC1PMiBoZXJlIGFuZCBnaXZlIGEgbm90ZSBhYm91dCBpdC4KK2RlZiBnZXRfb3B0aW1pemF0aW9uKGQpOgorICAgIHNlbGVjdGVkX29wdGltaXphdGlvbiA9IGQuZ2V0VmFyKCJTRUxFQ1RFRF9PUFRJTUlaQVRJT04iLCBUcnVlKQorICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCJTRUxFQ1RFRF9PUFRJTUlaQVRJT04iLCAiLU8yIiwgIngiLCAiIiwgZCkgPT0gIngiOgorICAgICAgICByZXR1cm4gc2VsZWN0ZWRfb3B0aW1pemF0aW9uCisgICAgZWxpZiBiYi51dGlscy5jb250YWlucygiU0VMRUNURURfT1BUSU1JWkFUSU9OIiwgIi1PIiwgIngiLCAiIiwgZCkgPT0gIngiOgorICAgICAgICBiYi5ub3RlKCJnbGliYyBjYW4ndCBiZSBidWlsdCB3aXRoIC1PLCAtTyAtV25vLWVycm9yIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiIpCisgICAgICAgIHJldHVybiBzZWxlY3RlZF9vcHRpbWl6YXRpb24ucmVwbGFjZSgiLU8iLCAiLU8gLVduby1lcnJvciIpCisgICAgZWxpZiBiYi51dGlscy5jb250YWlucygiU0VMRUNURURfT1BUSU1JWkFUSU9OIiwgIi1PMCIsICJ4IiwgIiIsIGQpID09ICJ4IjoKKyAgICAgICAgYmIubm90ZSgiZ2xpYmMgY2FuJ3QgYmUgYnVpbHQgd2l0aCAtTzAsIC1PMiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4iKQorICAgICAgICByZXR1cm4gc2VsZWN0ZWRfb3B0aW1pemF0aW9uLnJlcGxhY2UoIi1PMCIsICItTzIiKQorICAgIGVsaWYgYmIudXRpbHMuY29udGFpbnMoIlNFTEVDVEVEX09QVElNSVpBVElPTiIsICItT3MiLCAieCIsICIiLCBkKSA9PSAieCI6CisgICAgICAgIGJiLm5vdGUoImdsaWJjIGNhbid0IGJlIGJ1aWx0IHdpdGggLU9zLCAtT3MgLVduby1lcnJvciB3aWxsIGJlIHVzZWQgaW5zdGVhZC4iKQorICAgICAgICByZXR1cm4gc2VsZWN0ZWRfb3B0aW1pemF0aW9uLnJlcGxhY2UoIi1PcyIsICItT3MgLVduby1lcnJvciIpCisgICAgZWxpZiBiYi51dGlscy5jb250YWlucygiU0VMRUNURURfT1BUSU1JWkFUSU9OIiwgIi1PMSIsICJ4IiwgIiIsIGQpID09ICJ4IjoKKyAgICAgICAgYmIubm90ZSgiZ2xpYmMgY2FuJ3QgYmUgYnVpbHQgd2l0aCAtTzEsIC1PMSAtV25vLWVycm9yIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiIpCisgICAgICAgIHJldHVybiBzZWxlY3RlZF9vcHRpbWl6YXRpb24ucmVwbGFjZSgiLU8xIiwgIi1PMSAtV25vLWVycm9yIikKKyAgICByZXR1cm4gc2VsZWN0ZWRfb3B0aW1pemF0aW9uCisKK1NFTEVDVEVEX09QVElNSVpBVElPTiA6PSAiJHtAZ2V0X29wdGltaXphdGlvbihkKX0iCisKKyMgc2l0ZWNvbmZpZy5iYmNsYXNzIHJ1bnMgY29uZmlndXJlIHdoaWNoIG5lZWRzIGEgd29ya2luZyBjb21waWxlcgorIyBGb3IgdGhlIGNvbXBpbGVyIHRvIHdvcmsgd2UgbmVlZCBhIHdvcmtpbmcgbGliYyB5ZXQgbGliYyBpc24ndAorIyBpbiB0aGUgc3lzcm9vdHMgZGlyZWN0b3J5IGF0IHRoaXMgcG9pbnQuIFRoaXMgbWVhbnMgdGhlIGxpYmMuc28KKyMgbGlua2VyIHNjcmlwdCB3b24ndCB3b3JrIGFzIHRoZSAtLXN5c3Jvb3Qgc2V0dGluZyBpc24ndCBjb3JyZWN0LgorIyBIZXJlIHdlIGNyZWF0ZSBhIGhhY2tlZCB1cCBsaWJjIGxpbmtlciBzY3JpcHQgYW5kIHBhc3MgaW4gdGhlIHJpZ2h0CisjIGZsYWdzIHRvIGxldCBjb25maWd1cmUgd29yay4gVWdseS4KK0VYVFJBU0lURUNPTkZJRyA9ICJDRkxBR1M9JyR7Q0ZMQUdTfSAtV2wsLUwke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmMgLUwke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmMgLUwke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0gLUwke1NZU1JPT1RfREVTVERJUn0ke2Jhc2VfbGliZGlyfSAtV2wsLUwke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0gLVdsLC1MJHtTWVNST09UX0RFU1RESVJ9JHtiYXNlX2xpYmRpcn0nIgorc2l0ZWNvbmZpZ19kb19zaXRlY29uZmlnX2dlbmNhY2hlX3ByZXBlbmQgPSAiIFwKKwlta2RpciAtcCAke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmM7IFwKKwljcCAke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0vbGliYy5zbyAke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmM7IFwKKwlzZWQgLWkgLWUgJ3MjICR7YmFzZV9saWJkaXJ9IyAke1NZU1JPT1RfREVTVERJUn0ke2Jhc2VfbGliZGlyfSNnJyAtZSAncyMgJHtsaWJkaXJ9IyAke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0jZycgJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjL2xpYmMuc287IFwKKyIKKworIyBucHRsIG5lZWRzIHVud2luZCBzdXBwb3J0IGluIGdjYywgd2hpY2ggY2FuJ3QgYmUgYnVpbHQgd2l0aG91dCBnbGliYy4KK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRpYWwgbGliZ2NjLWluaXRpYWwgbGludXgtbGliYy1oZWFkZXJzIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtaW5pdGlhbCIKKyMgbnB0bCBuZWVkcyBsaWJnY2MgYnV0IGRsb3BlbnMgaXQsIHNvIG91ciBzaGxpYnMgY29kZSBkb2Vzbid0IGRldGVjdCB0aGlzCisjUkRFUEVORFNfJHtQTn0gKz0gIiR7QFsnJywnbGliZ2NjJ11bJ25wdGwnIGluICcke0dMSUJDX0FERE9OU30nXX0iCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYmMgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1mb3ItZ2NjIgorUFJPVklERVMgKz0gInZpcnR1YWwvbGliaW50bCB2aXJ0dWFsL2xpYmljb252IgoraW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgc3lzdGVtZAorcmVxdWlyZSBnbGliYy1vcHRpb25zLmluYworCisjIFRoZSBtYWluIHB1cnBvc2Ugb2Ygc2V0dGluZyB0aGlzIHZhcmlhYmxlIGlzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSBhY2NpZGVudGx5CisjIG92ZXJyaWRpbmcgRElTVFJPX0ZFQVRSVUVTLCBjYXVzaW5nIG9ic2N1cmUgYnVpbGQgZmFpbHVyZXMgYmVjYXVzZSBvZiBsYWNrCisjIG9mIGxpYmMgZnVuY3Rpb25zLgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIiR7RElTVFJPX0ZFQVRVUkVTX0xJQkN9IgorCitMRUFEX1NPTkFNRSA9ICJsaWJjLnNvIgorCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiIFwKKyAgYWNfY3ZfcGF0aF9CQVNIX1NIRUxMPSR7YmFzZV9iaW5kaXJ9L2Jhc2ggXAorICBsaWJjX2N2X3NsaWJkaXI9JHtiYXNlX2xpYmRpcn0gXAorICBsaWJjX2N2X3Jvb3RzYmluZGlyPSR7YmFzZV9zYmluZGlyfSBcCisgIGxpYmNfY3ZfbG9jYWxlZGlyPSR7bG9jYWxlZGlyfSBcCisgIGxpYmNfY3Zfc3NwPW5vIFwKKyIKKworR0xJQkNfRVhUUkFfT0VDT05GID89ICIiCitHTElCQ19FWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlc2RrID0gIiIKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKKyMgVGhpcyBuZWVkcyB0byBtYXRjaCB3aXRoIGdsaWJjLWNvbGxhdGVyYWwuaW5jLCBvdGhlcndpc2UgZ2xpYmMtc2NyaXB0cyBhbmQgZ2xpYmMtbG9jYWxlCisjIHdpbGwgZmFpbCB0byBmaW5kIG1haW4gZ2xpYmMsIGZvciBkZXRhaWxzIHNlZQorIyBodHRwOi8vbGlzdHMub3BlbmVtYmVkZGVkLm9yZy9waXBlcm1haWwvb3BlbmVtYmVkZGVkLWNvcmUvMjAxNS1KYW51YXJ5LzEwMDY3OS5odG1sCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworIyBnbGliYyB1c2VzIFBBUkFMTEVMTUZMQUdTIHZhcmlhYmxlIHRvIHBhc3MgcGFyYWxsZWwgYnVpbGQgaW5mbyBzbyB0cmFuc2ZlcgorIyBQQVJBTExFTF9NQUtFIGludG8gUEFSQUxMRUxNRkxBR1MgYW5kIGVtcHR5IG91dCBQQVJBTExFTF9NQUtFCitFR0xJQkNQQVJBTExFTElTTSA6PSAiUEFSQUxMRUxNRkxBR1M9IiR7UEFSQUxMRUxfTUFLRX0iIgorRVhUUkFfT0VNQUtFW3ZhcmRlcHNleGNsdWRlXSArPSAiRUdMSUJDUEFSQUxMRUxJU00iCitFWFRSQV9PRU1BS0UgKz0gIiR7RUdMSUJDUEFSQUxMRUxJU019IgorUEFSQUxMRUxfTUFLRSA9ICIiCisKKyMgZ2xpYmMgbWFrZS1zeXNjYWxscy5zaCBoYXMgYSBudW1iZXIgb2YgaXNzdWVzIHdpdGggL2Jpbi9kYXNoIGFuZAorIyBpdCdzIG91dHB1dCB3aGljaCBtYWtlIGNhbGxzIHZpYSB0aGUgU0hFTEwgYWxzbyBoYXMgaXNzdWVzLCBzbworIyBlbnN1cmUgbWFrZSB1c2VzIC9iaW4vYmFzaAorRVhUUkFfT0VNQUtFICs9ICJTSEVMTD0vYmluL2Jhc2giCisKK09FX0ZFQVRVUkVTID0gIiR7QGZlYXR1cmVzX3RvX2dsaWJjX3NldHRpbmdzKGQpfSIKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCXNlZCAtZSAicyNAQkFTSEAjL2Jpbi9zaCMiIC1pICR7U30vZWxmL2xkZC5iYXNoLmluCisJZWNobyAnJHtPRV9GRUFUVVJFU30nID4gJHtCfS9vcHRpb24tZ3JvdXBzLmNvbmZpZworfQorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCXllcyAnJyB8IG9lX3J1bm1ha2UgY29uZmlnCisKKwkjIFJlbW92ZSBxdW90YXRpb24gbWFya3MgZnJvbSBPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEXyouIFRoaXMgd2lsbAorCSMgYXZvaWQgaW5zdGFsbCBlcnJvci4KKwlzZWQgLWkgJ3MvXk9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfXCguKlwpPSJcKC4qXCkiJC9PUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX1wxPVwyLycgb3B0aW9uLWdyb3Vwcy5jb25maWcKK30KKworR0xJQkNfQURET05TID89ICJucHRsLGxpYmlkbiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMS1uYXRpdmVzZGstZ2xpYmMtTG9vay1mb3ItaG9zdC1zeXN0ZW0tbGQuc28uY2FjaGUtYXMtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAxLW5hdGl2ZXNkay1nbGliYy1Mb29rLWZvci1ob3N0LXN5c3RlbS1sZC5zby5jYWNoZS1hcy0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q2NjM0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMS1uYXRpdmVzZGstZ2xpYmMtTG9vay1mb3ItaG9zdC1zeXN0ZW0tbGQuc28uY2FjaGUtYXMtLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK0Zyb20gMDg3NmZlYTFiNWIyNmRhODRmMjk4NzE0YTJlMjNiYTY5NjYwN2RiYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAxOjQ4OjI0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDEvMjddIG5hdGl2ZXNkay1nbGliYzogTG9vayBmb3IgaG9zdCBzeXN0ZW0gbGQuc28uY2FjaGUgYXMKKyB3ZWxsCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1RoZSBkZWZhdWx0IGxpYiBzZWFyY2ggcGF0aCBvcmRlciBpczoKKworICAxKSBMRF9MSUJSQVJZX1BBVEgKKyAgMikgUlBBVEggZnJvbSB0aGUgYmluYXJ5CisgIDMpIGxkLnNvLmNhY2hlCisgIDQpIGRlZmF1bHQgc2VhcmNoIHBhdGhzIGVtYmVkZGVkIGluIHRoZSBsaW5rZXIKKworRm9yIG5hdGl2ZXNkayBiaW5hcmllcyB3aGljaCBhcmUgYmVpbmcgdXNlZCBhbG9uZ3NpZGUgYmluYXJpZXMgb24gYSBob3N0IHN5c3RlbSwgd2UKK25lZWQgdGhlIHNlYXJjaCBwYXRocyB0byBmaXJzdGx5IHNlYXJjaCB0aGUgc2hpcHBlZCBuYXRpdmVzZGsgbGlicyBidXQgdGhlbiBhbHNvCitjb3ZlciB0aGUgaG9zdCBzeXN0ZW0uIEZvciBleGFtcGxlIHdlIHdhbnQgdGhlIGhvc3Qgc3lzdGVtJ3MgbGliR0wgYW5kIHRoaXMgbWF5IGJlCitpbiBhIG5vbi1zdGFuZGFyZCBsb2NhdGlvbiBsaWtlIC91c3IvbGliL21lc2EuIFRoZSBvbmx5IHBsYWNlIHRoZSBsb2NhdGlvbiBpcyBrbm93CithYm91dCBpcyBpbiB0aGUgbGQuc28uY2FjaGUgb2YgdGhlIGhvc3Qgc3lzdGVtLgorCitTaW5jZSBuYXRpdmVzZGsgaGFzIGEgc2ltcGxlIHN0cnVjdHVyZSBhbmQgZG9lc24ndCBuZWVkIHRvIHVzZSBhIGNhY2hlIGl0c2VsZiwgd2UKK3JlcHVycG9zZSB0aGUgY2FjaGUgZm9yIHVzZSBhcyBhIGxhc3QgcmVzb3J0IGluIGZpbmRpbmcgaG9zdCBzeXN0ZW0gYmluYXJpZXMuIFRoaXMKK21lYW5zIHdlIG5lZWQgdG8gc3dpdGNoIHRoZSBvcmRlciBvZiAzIGFuZCA0IGFib3ZlIHRvIG1ha2UgdGhpcyB3b3JrIGVmZmVjdGl2ZWx5LgorCitSUCAxNC8xMC8yMDEwCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBlbGYvZGwtbG9hZC5jIHwgMTcgKysrKysrKystLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWxvYWQuYyBiL2VsZi9kbC1sb2FkLmMKK2luZGV4IDBjMDUyZTQuLmY0NTA4NWEgMTAwNjQ0CistLS0gYS9lbGYvZGwtbG9hZC5jCisrKysgYi9lbGYvZGwtbG9hZC5jCitAQCAtMjA0MCw3ICsyMDQwLDE0IEBAIF9kbF9tYXBfb2JqZWN0IChzdHJ1Y3QgbGlua19tYXAgKmxvYWRlciwgY29uc3QgY2hhciAqbmFtZSwKKyAJZmQgPSBvcGVuX3BhdGggKG5hbWUsIG5hbWVsZW4sIG1vZGUsCisgCQkJJmxvYWRlci0+bF9ydW5wYXRoX2RpcnMsICZyZWFsbmFtZSwgJmZiLCBsb2FkZXIsCisgCQkJTEFfU0VSX1JVTlBBVEgsICZmb3VuZF9vdGhlcl9jbGFzcyk7CistCisrICAgICAgLyogdHJ5IHRoZSBkZWZhdWx0IHBhdGguICAqLworKyAgICAgIGlmIChmZCA9PSAtMQorKwkgICYmICgobCA9IGxvYWRlciA/OiBHTChkbF9ucylbbnNpZF0uX25zX2xvYWRlZCkgPT0gTlVMTAorKwkgICB8fCBfX2J1aWx0aW5fZXhwZWN0ICghKGwtPmxfZmxhZ3NfMSAmIERGXzFfTk9ERUZMSUIpLCAxKSkKKysJICYmIHJ0bGRfc2VhcmNoX2RpcnMuZGlycyAhPSAodm9pZCAqKSAtMSkKKysJZmQgPSBvcGVuX3BhdGggKG5hbWUsIG5hbWVsZW4sIG1vZGUgJiBfX1JUTERfU0VDVVJFLCAmcnRsZF9zZWFyY2hfZGlycywKKysJCQkmcmVhbG5hbWUsICZmYiwgbCwgTEFfU0VSX0RFRkFVTFQsICZmb3VuZF9vdGhlcl9jbGFzcyk7CisrICAgICAgLyogRmluYWxseSB0cnkgbGQuc28uY2FjaGUgKi8KKyAjaWZkZWYgVVNFX0xEQ09ORklHCisgICAgICAgaWYgKGZkID09IC0xCisgCSAgJiYgKF9fZ2xpYmNfbGlrZWx5ICgobW9kZSAmIF9fUlRMRF9TRUNVUkUpID09IDApCitAQCAtMjA5OSwxNCArMjEwNiw2IEBAIF9kbF9tYXBfb2JqZWN0IChzdHJ1Y3QgbGlua19tYXAgKmxvYWRlciwgY29uc3QgY2hhciAqbmFtZSwKKyAJfQorICNlbmRpZgorIAorLSAgICAgIC8qIEZpbmFsbHksIHRyeSB0aGUgZGVmYXVsdCBwYXRoLiAgKi8KKy0gICAgICBpZiAoZmQgPT0gLTEKKy0JICAmJiAoKGwgPSBsb2FkZXIgPzogR0woZGxfbnMpW25zaWRdLl9uc19sb2FkZWQpID09IE5VTEwKKy0JICAgICAgfHwgX19nbGliY19saWtlbHkgKCEobC0+bF9mbGFnc18xICYgREZfMV9OT0RFRkxJQikpKQorLQkgICYmIHJ0bGRfc2VhcmNoX2RpcnMuZGlycyAhPSAodm9pZCAqKSAtMSkKKy0JZmQgPSBvcGVuX3BhdGggKG5hbWUsIG5hbWVsZW4sIG1vZGUsICZydGxkX3NlYXJjaF9kaXJzLAorLQkJCSZyZWFsbmFtZSwgJmZiLCBsLCBMQV9TRVJfREVGQVVMVCwgJmZvdW5kX290aGVyX2NsYXNzKTsKKy0KKyAgICAgICAvKiBBZGQgYW5vdGhlciBuZXdsaW5lIHdoZW4gd2UgYXJlIHRyYWNpbmcgdGhlIGxpYnJhcnkgbG9hZGluZy4gICovCisgICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTKSkKKyAJX2RsX2RlYnVnX3ByaW50ZiAoIlxuIik7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMi1uYXRpdmVzZGstZ2xpYmMtRml4LWJ1ZmZlci1vdmVycnVuLXdpdGgtYS1yZWxvY2F0ZWQtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAyLW5hdGl2ZXNkay1nbGliYy1GaXgtYnVmZmVyLW92ZXJydW4td2l0aC1hLXJlbG9jYXRlZC0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU2OGZjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMi1uYXRpdmVzZGstZ2xpYmMtRml4LWJ1ZmZlci1vdmVycnVuLXdpdGgtYS1yZWxvY2F0ZWQtLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gMDg2YjY1ZDlhYWNmZmM0N2ZjZDhkZjY4ODE4YTQ3NmE1YWU3NmZhMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAxOjUwOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDIvMjddIG5hdGl2ZXNkay1nbGliYzogRml4IGJ1ZmZlciBvdmVycnVuIHdpdGggYSByZWxvY2F0ZWQKKyBTREsKKworV2hlbiBsZC1saW51eC0qLnNvLjIgaXMgcmVsb2NhdGVkIHRvIGEgcGF0aCB0aGF0IGlzIGxvbmdlciB0aGFuIHRoZQorb3JpZ2luYWwgZml4ZWQgbG9jYXRpb24sIHRoZSBkeW5hbWljIGxvYWRlciB3aWxsIGNyYXNoIGluIG9wZW5fcGF0aAorYmVjYXVzZSBpdCBpbXBsaWNpdGx5IGFzc3VtZXMgdGhhdCBtYXhfZGlybmFtZWxlbiBpcyBhIGZpeGVkIHNpemUgdGhhdAorbmV2ZXIgY2hhbmdlcy4KKworVGhlIGFsbG9jYXRlZCBidWZmZXIgd2lsbCBub3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGRpcmVjdG9yeQorcGF0aCBzdHJpbmcgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gdGhlIGZpeGVkIGxvY2F0aW9uIHByb3ZpZGVkIGF0IGJ1aWxkCit0aW1lLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIFNESyBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBlbGYvZGwtbG9hZC5jIHwgMTIgKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2VsZi9kbC1sb2FkLmMgYi9lbGYvZGwtbG9hZC5jCitpbmRleCBmNDUwODVhLi5mMWViNWVkIDEwMDY0NAorLS0tIGEvZWxmL2RsLWxvYWQuYworKysrIGIvZWxmL2RsLWxvYWQuYworQEAgLTE3NjUsNyArMTc2NSwxOSBAQCBvcGVuX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLCBpbnQgbW9kZSwKKyAgICAgICAgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSB3aGVuIHJ0bGQgaXMgcnVuIGRpcmVjdGx5LiAgKi8KKyAgICAgcmV0dXJuIC0xOworIAorKyAgZG8KKysgICAgeworKyAgICAgIHN0cnVjdCByX3NlYXJjaF9wYXRoX2VsZW0gKnRoaXNfZGlyID0gKmRpcnM7CisrICAgICAgaWYgKHRoaXNfZGlyLT5kaXJuYW1lbGVuID4gbWF4X2Rpcm5hbWVsZW4pCisrCXsKKysJICBtYXhfZGlybmFtZWxlbiA9IHRoaXNfZGlyLT5kaXJuYW1lbGVuOworKwl9CisrICAgIH0KKysgIHdoaWxlICgqKytkaXJzICE9IE5VTEwpOworKworICAgYnVmID0gYWxsb2NhIChtYXhfZGlybmFtZWxlbiArIG1heF9jYXBzdHJsZW4gKyBuYW1lbGVuKTsKKysKKysgIGRpcnMgPSBzcHMtPmRpcnM7CisgICBkbworICAgICB7CisgICAgICAgc3RydWN0IHJfc2VhcmNoX3BhdGhfZWxlbSAqdGhpc19kaXIgPSAqZGlyczsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAzLW5hdGl2ZXNkay1nbGliYy1SYWlzZS10aGUtc2l6ZS1vZi1hcnJheXMtY29udGFpbmluZy0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDMtbmF0aXZlc2RrLWdsaWJjLVJhaXNlLXRoZS1zaXplLW9mLWFycmF5cy1jb250YWluaW5nLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjgxYTY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAzLW5hdGl2ZXNkay1nbGliYy1SYWlzZS10aGUtc2l6ZS1vZi1hcnJheXMtY29udGFpbmluZy0ucGF0Y2gKQEAgLTAsMCArMSwxMjYgQEAKK0Zyb20gZmQ1OTVhNWVjODg1YmNiNGMxNDQxN2RhYTIxYzJlNjFjNWI3MmU0MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAxOjUxOjM4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMjddIG5hdGl2ZXNkay1nbGliYzogUmFpc2UgdGhlIHNpemUgb2YgYXJyYXlzIGNvbnRhaW5pbmcgZGwKKyBwYXRocworCitUaGlzIHBhdGNoIHB1dHMgdGhlIGR5bmFtaWMgbG9hZGVyIHBhdGggaW4gdGhlIGJpbmFyaWVzLCBTWVNURU1fRElSUyBzdHJpbmdzCithbmQgbGVuZ3RocyBhcyB3ZWxsIGFzIGxkLnNvLmNhY2hlIHBhdGggaW4gdGhlIGR5bmFtaWMgbG9hZGVyIHRvIHNwZWNpZmljCitzZWN0aW9ucyBpbiBtZW1vcnkuIFRoZSBzZWN0aW9ucyB0aGF0IGNvbnRhaW4gcGF0aHMgaGF2ZSBiZWVuIGFsbG9jYXRlZCBhIDQwOTYKK2J5dGUgc2VjdGlvbiwgd2hpY2ggaXMgdGhlIG1heGltdW0gcGF0aCBsZW5ndGggaW4gbGludXguIFRoaXMgd2lsbCBhbGxvdyB0aGUKK3JlbG9jYXRpbmcgc2NyaXB0IHRvIHBhcnNlIHRoZSBFTEYgYmluYXJ5LCBkZXRlY3QgdGhlIHNlY3Rpb24gYW5kIGVhc2lseSByZXBsYWNlCit0aGUgc3RyaW5ncyBpbiBhIGNlcnRhaW4gcGF0aC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtTREsgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBlbGYvZGwtY2FjaGUuYyAgICAgICAgICAgICB8IDQgKysrKworIGVsZi9kbC1sb2FkLmMgICAgICAgICAgICAgIHwgNCArKy0tCisgZWxmL2ludGVycC5jICAgICAgICAgICAgICAgfCAyICstCisgZWxmL2xkY29uZmlnLmMgICAgICAgICAgICAgfCAzICsrKworIGVsZi9ydGxkLmMgICAgICAgICAgICAgICAgIHwgNSArKystLQorIHN5c2RlcHMvZ2VuZXJpYy9kbC1jYWNoZS5oIHwgNCAtLS0tCisgNiBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWNhY2hlLmMgYi9lbGYvZGwtY2FjaGUuYworaW5kZXggZGVjNDliYy4uODYyZjFkOCAxMDA2NDQKKy0tLSBhL2VsZi9kbC1jYWNoZS5jCisrKysgYi9lbGYvZGwtY2FjaGUuYworQEAgLTEzMiw2ICsxMzIsMTAgQEAgZG8JCQkJCQkJCQkgICAgICBcCisgd2hpbGUgKDApCisgCisgCisrY29uc3QgY2hhciBMRF9TT19DQUNIRVs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5sZHNvY2FjaGUiKSkpID0KKysJCVNZU0NPTkZESVIgIi9sZC5zby5jYWNoZSI7CisrCisrCisgaW50CisgaW50ZXJuYWxfZnVuY3Rpb24KKyBfZGxfY2FjaGVfbGliY21wIChjb25zdCBjaGFyICpwMSwgY29uc3QgY2hhciAqcDIpCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWxvYWQuYyBiL2VsZi9kbC1sb2FkLmMKK2luZGV4IGYxZWI1ZWQuLmY2NjRmNTAgMTAwNjQ0CistLS0gYS9lbGYvZGwtbG9hZC5jCisrKysgYi9lbGYvZGwtbG9hZC5jCitAQCAtMTA0LDggKzEwNCw4IEBAIHN0YXRpYyBzaXplX3QgbWF4X2NhcHN0cmxlbiBhdHRyaWJ1dGVfcmVscm87CisgLyogR2V0IHRoZSBnZW5lcmF0ZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRydXN0ZWQgZGlyZWN0b3JpZXMuICAqLworICNpbmNsdWRlICJ0cnVzdGVkLWRpcnMuaCIKKyAKKy1zdGF0aWMgY29uc3QgY2hhciBzeXN0ZW1fZGlyc1tdID0gU1lTVEVNX0RJUlM7Cistc3RhdGljIGNvbnN0IHNpemVfdCBzeXN0ZW1fZGlyc19sZW5bXSA9Cisrc3RhdGljIGNvbnN0IGNoYXIgc3lzdGVtX2RpcnNbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuc3lzZGlycyIpKSkgPSBTWVNURU1fRElSUzsKKyt2b2xhdGlsZSBzdGF0aWMgY29uc3Qgc2l6ZV90IHN5c3RlbV9kaXJzX2xlbltdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLnN5c2RpcnNsZW4iKSkpID0KKyB7CisgICBTWVNURU1fRElSU19MRU4KKyB9OworZGlmZiAtLWdpdCBhL2VsZi9pbnRlcnAuYyBiL2VsZi9pbnRlcnAuYworaW5kZXggNDIyZWE5NWUuLjZkNjFhMzYgMTAwNjQ0CistLS0gYS9lbGYvaW50ZXJwLmMKKysrKyBiL2VsZi9pbnRlcnAuYworQEAgLTE4LDUgKzE4LDUgQEAKKyAKKyAjaW5jbHVkZSA8cnVudGltZS1saW5rZXIuaD4KKyAKKy1jb25zdCBjaGFyIF9faW52b2tlX2R5bmFtaWNfbGlua2VyX19bXSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5pbnRlcnAiKSkpCisrY29uc3QgY2hhciBfX2ludm9rZV9keW5hbWljX2xpbmtlcl9fWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmludGVycCIpKSkKKyAgID0gUlVOVElNRV9MSU5LRVI7CitkaWZmIC0tZ2l0IGEvZWxmL2xkY29uZmlnLmMgYi9lbGYvbGRjb25maWcuYworaW5kZXggZjU0ZWMyMi4uMGU3OGE4MyAxMDA2NDQKKy0tLSBhL2VsZi9sZGNvbmZpZy5jCisrKysgYi9lbGYvbGRjb25maWcuYworQEAgLTE2Nyw2ICsxNjcsOSBAQCBzdGF0aWMgc3RydWN0IGFyZ3AgYXJncCA9CisgICBvcHRpb25zLCBwYXJzZV9vcHQsIE5VTEwsIGRvYywgTlVMTCwgbW9yZV9oZWxwLCBOVUxMCisgfTsKKyAKKysKKytleHRlcm4gY29uc3QgY2hhciBMRF9TT19DQUNIRVs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5sZHNvY2FjaGUiKSkpOworKworIC8qIENoZWNrIGlmIHN0cmluZyBjb3JyZXNwb25kcyB0byBhbiBpbXBvcnRhbnQgaGFyZHdhcmUgY2FwYWJpbGl0eSBvcgorICAgIGEgcGxhdGZvcm0uICAqLworIHN0YXRpYyBpbnQKK2RpZmYgLS1naXQgYS9lbGYvcnRsZC5jIGIvZWxmL3J0bGQuYworaW5kZXggNjk4NzNjMi4uNmQzYWRkNyAxMDA2NDQKKy0tLSBhL2VsZi9ydGxkLmMKKysrKyBiL2VsZi9ydGxkLmMKK0BAIC05OSw2ICs5OSw3IEBAIHVpbnRwdHJfdCBfX3BvaW50ZXJfY2hrX2d1YXJkX2xvY2FsCisgc3Ryb25nX2FsaWFzIChfX3BvaW50ZXJfY2hrX2d1YXJkX2xvY2FsLCBfX3BvaW50ZXJfY2hrX2d1YXJkKQorICNlbmRpZgorIAorK2V4dGVybiBjb25zdCBjaGFyIExEX1NPX0NBQ0hFWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmxkc29jYWNoZSIpKSk7CisgCisgLyogTGlzdCBvZiBhdWRpdGluZyBEU09zLiAgKi8KKyBzdGF0aWMgc3RydWN0IGF1ZGl0X2xpc3QKK0BAIC04NzcsMTIgKzg3OCwxMiBAQCBvZiB0aGlzIGhlbHBlciBwcm9ncmFtOyBjaGFuY2VzIGFyZSB5b3UgZGlkIG5vdCBpbnRlbmQgdG8gcnVuIHRoaXMgcHJvZ3JhbS5cblwKKyAgIC0tbGlzdCAgICAgICAgICAgICAgICBsaXN0IGFsbCBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGV5IGFyZSByZXNvbHZlZFxuXAorICAgLS12ZXJpZnkgICAgICAgICAgICAgIHZlcmlmeSB0aGF0IGdpdmVuIG9iamVjdCByZWFsbHkgaXMgYSBkeW5hbWljYWxseSBsaW5rZWRcblwKKyAJCQlvYmplY3Qgd2UgY2FuIGhhbmRsZVxuXAorLSAgLS1pbmhpYml0LWNhY2hlICAgICAgIERvIG5vdCB1c2UgIiBMRF9TT19DQUNIRSAiXG5cCisrICAtLWluaGliaXQtY2FjaGUgICAgICAgRG8gbm90IHVzZSAlc1xuXAorICAgLS1saWJyYXJ5LXBhdGggUEFUSCAgIHVzZSBnaXZlbiBQQVRIIGluc3RlYWQgb2YgY29udGVudCBvZiB0aGUgZW52aXJvbm1lbnRcblwKKyAJCQl2YXJpYWJsZSBMRF9MSUJSQVJZX1BBVEhcblwKKyAgIC0taW5oaWJpdC1ycGF0aCBMSVNUICBpZ25vcmUgUlVOUEFUSCBhbmQgUlBBVEggaW5mb3JtYXRpb24gaW4gb2JqZWN0IG5hbWVzXG5cCisgCQkJaW4gTElTVFxuXAorLSAgLS1hdWRpdCBMSVNUICAgICAgICAgIHVzZSBvYmplY3RzIG5hbWVkIGluIExJU1QgYXMgYXVkaXRvcnNcbiIpOworKyAgLS1hdWRpdCBMSVNUICAgICAgICAgIHVzZSBvYmplY3RzIG5hbWVkIGluIExJU1QgYXMgYXVkaXRvcnNcbiIsIExEX1NPX0NBQ0hFKTsKKyAKKyAgICAgICArK19kbF9za2lwX2FyZ3M7CisgICAgICAgLS1fZGxfYXJnYzsKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2dlbmVyaWMvZGwtY2FjaGUuaCBiL3N5c2RlcHMvZ2VuZXJpYy9kbC1jYWNoZS5oCitpbmRleCA0YjQ5ODY5Li4xODAwZDAzIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9nZW5lcmljL2RsLWNhY2hlLmgKKysrKyBiL3N5c2RlcHMvZ2VuZXJpYy9kbC1jYWNoZS5oCitAQCAtMjcsMTAgKzI3LDYgQEAKKyAgICgoZmxhZ3MpID09IDEgfHwgKGZsYWdzKSA9PSBfRExfQ0FDSEVfREVGQVVMVF9JRCkKKyAjZW5kaWYKKyAKKy0jaWZuZGVmIExEX1NPX0NBQ0hFCistIyBkZWZpbmUgTERfU09fQ0FDSEUgU1lTQ09ORkRJUiAiL2xkLnNvLmNhY2hlIgorLSNlbmRpZgorLQorICNpZm5kZWYgYWRkX3N5c3RlbV9kaXIKKyAjIGRlZmluZSBhZGRfc3lzdGVtX2RpcihkaXIpIGFkZF9kaXIgKGRpcikKKyAjZW5kaWYKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA0LUJhY2twb3J0LWh0dHBzLXNvdXJjZXdhcmUub3JnLW1sLWxpYmMtcG9ydHMtMjAwNy0xMi0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDQtQmFja3BvcnQtaHR0cHMtc291cmNld2FyZS5vcmctbWwtbGliYy1wb3J0cy0yMDA3LTEyLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDg3NTAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA0LUJhY2twb3J0LWh0dHBzLXNvdXJjZXdhcmUub3JnLW1sLWxpYmMtcG9ydHMtMjAwNy0xMi0ucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSAyNTYwYjU2NGI1Njc0YmYyOTkwZTU2MDdmNjM0MmMxNjQ3YTVkYzRmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgOCBNYXIgMjAxNSAwNDowMTowMSArMDAwMAorU3ViamVjdDogW1BBVENIIDA0LzI3XSBCYWNrcG9ydAorIGh0dHBzOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1wb3J0cy8yMDA3LTEyL21zZzAwMDAwLmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKzIwMDctMTItMDMgIEtyaXN0aWFuIFZhbiBEZXIgVmxpZXQgIDx2YW5kZXJzQGxpcXd5ZC5jb20+CisKKyAgICAgICAgKiBiaXRzL3N0ZGlvLWxvY2suaCAoX0lPX2FjcXVpcmVfbG9ja19jbGVhcl9mbGFnczIpOiBEZWZpbmUKKworU2lnbmVkLW9mZi1ieTogS3Jpc3RpYW4gVmFuIERlciBWbGlldCA8dmFuZGVyc0BsaXF3eWQuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGJpdHMvc3RkaW8tbG9jay5oIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2JpdHMvc3RkaW8tbG9jay5oIGIvYml0cy9zdGRpby1sb2NrLmgKK2luZGV4IDBjNWJiNjUuLjY2MzA0YTYgMTAwNjQ0CistLS0gYS9iaXRzL3N0ZGlvLWxvY2suaAorKysrIGIvYml0cy9zdGRpby1sb2NrLmgKK0BAIC00OSw2ICs0OSw4IEBAIF9fbGliY19sb2NrX2RlZmluZV9yZWN1cnNpdmUgKHR5cGVkZWYsIF9JT19sb2NrX3QpCisgICBfSU9fY2xlYW51cF9yZWdpb25fc3RhcnQgKCh2b2lkICgqKSAodm9pZCAqKSkgX0lPX2Z1bmxvY2tmaWxlLCAoX2ZwKSk7ICAgICAgXAorICAgX0lPX2Zsb2NrZmlsZSAoX2ZwKQorIAorKyMgZGVmaW5lIF9JT19hY3F1aXJlX2xvY2tfY2xlYXJfZmxhZ3MyKF9mcCkgX0lPX2FjcXVpcmVfbG9jayAoX2ZwKQorKworICMgZGVmaW5lIF9JT19yZWxlYXNlX2xvY2soX2ZwKSBcCisgICBfSU9fZnVubG9ja2ZpbGUgKF9mcCk7CQkJCQkJICAgICAgXAorICAgX0lPX2NsZWFudXBfcmVnaW9uX2VuZCAoMCkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA1LWZzbC1lNTAwLWU1NTAwLWU2NTAwLTYwM2UtZnNxcnQtaW1wbGVtZW50YXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDUtZnNsLWU1MDAtZTU1MDAtZTY1MDAtNjAzZS1mc3FydC1pbXBsZW1lbnRhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDNmODU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA1LWZzbC1lNTAwLWU1NTAwLWU2NTAwLTYwM2UtZnNxcnQtaW1wbGVtZW50YXRpb24ucGF0Y2gKQEAgLTAsMCArMSwxNTg0IEBACitGcm9tIGFhMGNkODI4OTJmMzJlNTg2MDIxNDNjNjk3ZWYwNTI0Njk2YTY0MjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDowMTo1MCArMDAwMAorU3ViamVjdDogW1BBVENIIDA1LzI3XSBmc2wgZTUwMC9lNTUwMC9lNjUwMC82MDNlIGZzcXJ0IGltcGxlbWVudGF0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogRWRtYXIgV2llbnNrb3NraSA8ZWRtYXJAZnJlZXNjYWxlLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jICAgICAgICB8IDEzNCArKysrKysrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYyAgICAgICB8IDEwMSArKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jICAgICAgfCAxMzQgKysrKysrKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYyAgICAgfCAxMDEgKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jICAgICAgIHwgMTM0ICsrKysrKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYyAgICAgIHwgMTAxICsrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYyAgICAgICB8IDEzNCArKysrKysrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMgICAgICB8IDEwMSArKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMgICAgICAgfCAxMzQgKysrKysrKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jICAgICAgfCAxMDEgKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jICAgICAgIHwgMTM0ICsrKysrKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYyAgICAgIHwgMTAxICsrKysrKysrKysrKysrKysKKyAuLi4vc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9JbXBsaWVzICB8ICAgMSArCisgLi4uL2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2UzMDBjMy9mcHUvSW1wbGllcyAgICAgfCAgIDIgKworIC4uLi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L0ltcGxpZXMgICAgIHwgICAxICsKKyAuLi4vc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvSW1wbGllcyB8ICAgMSArCisgLi4uL3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L0ltcGxpZXMgfCAgIDEgKworIC4uLi9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9JbXBsaWVzIHwgICAxICsKKyAuLi4vc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvSW1wbGllcyB8ICAgMSArCisgMTkgZmlsZXMgY2hhbmdlZCwgMTQxOCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L0ltcGxpZXMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTMwMGMzL2ZwdS9JbXBsaWVzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvSW1wbGllcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvSW1wbGllcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvSW1wbGllcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvSW1wbGllcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvSW1wbGllcworCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43MWU1MTZkCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCitAQCAtMCwwICsxLDEzNCBAQAorKy8qIERvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvMTA4ID0gMy4yNDUxODU1MzY1ODQyNjcyNjllKzMyOworK3N0YXRpYyBjb25zdCBmbG9hdCB0d29tNTQgPSA1LjU1MTExNTEyMzEyNTc4MjcwMmUtMTc7Cisrc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSBhY3R1YWwgc3F1YXJlIHJvb3QgYW5kIGhhbGYgb2YgaXRzIHJlY2lwcm9jYWwKKysgICBzaW11bHRhbmVvdXNseS4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorKyNlbHNlCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGIpCisrICAgICBkb3VibGUgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrICAgICAgZG91YmxlIHksIGcsIGgsIGQsIHI7CisrICAgICAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSB1OworKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICB1LnZhbHVlID0gYjsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVtlc3RpbWF0ZV0sICVbeF1cbiIKKysgICAgICAgICAgICAgICAgICAgOiBbZXN0aW1hdGVdICI9ZiIgKHkpIDogW3hdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBGb2xsb3dpbmcgTXVsbGVyIGV0IGFsLCBwYWdlIDE2OCwgZXF1YXRpb24gNS4yMC4KKysKKysgICAgICAgICAgICAgaCBnb2VzIHRvIDEvKDIqc3FydChiKSkKKysgICAgICAgICAgICAgZyBnb2VzIHRvIHNxcnQoYikuCisrCisrICAgICAgICAgICAgIFdlIG5lZWQgdGhyZWUgaXRlcmF0aW9ucyB0byBnZXQgd2l0aGluIDF1bHAuICAqLworKworKyAgICAgICAgICAvKiBJbmRpY2F0ZSB0aGF0IHRoZXNlIGNhbiBiZSBwZXJmb3JtZWQgcHJpb3IgdG8gdGhlIGJyYW5jaC4gIEdDQworKyAgICAgICAgICAgICBpbnNpc3RzIG9uIHNpbmtpbmcgdGhlbSBiZWxvdyB0aGUgYnJhbmNoLCBob3dldmVyOyBpdCBzZWVtcyBsaWtlCisrICAgICAgICAgICAgIHRoZXknZCBiZSBiZXR0ZXIgYmVmb3JlIHRoZSBicmFuY2ggc28gdGhhdCB3ZSBjYW4gY292ZXIgYW55IGxhdGVuY3kKKysgICAgICAgICAgICAgZnJvbSBzdG9yaW5nIHRoZSBhcmd1bWVudCBhbmQgbG9hZGluZyBpdHMgaGlnaCB3b3JkLiAgT2ggd2VsbC4gICovCisrCisrICAgICAgICAgIGcgPSBiICogeTsKKysgICAgICAgICAgaCA9IDAuNSAqIHk7CisrCisrICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworKyAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCisrICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysKKysjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm1hZGQgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIC8qIGcgaXMgbm93ICsvLSAxdWxwLCBvciBleGFjdGx5IGVxdWFsIHRvLCB0aGUgc3F1YXJlIHJvb3Qgb2YgYi4gICovCisrCisrICAgICAgICAgIC8qIEZpbmFsIHJlZmluZW1lbnQuICAqLworKyAgICAgICAgICBkID0gRk5NU1VCIChnLCBnLCBiKTsKKysKKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIEZNQUREIChkLCBoLCBnKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI2ZmEwNjcKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCitAQCAtMCwwICsxLDEwMSBAQAorKy8qIFNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhbmQgdXNlIHRoYXQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsCisrICAgc3F1YXJlIHJvb3QuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorKyNlbHNlCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGIpCisrICAgICBmbG9hdCBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysjZGVmaW5lIEZNU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZtc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZG91YmxlIHksIHg7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgLyogQ29tcHV0ZSB5ID0gMS41ICogYiAtIGIuICBVc2VzIGZld2VyIGNvbnN0YW50cyB0aGFuIHkgPSAwLjUgKiBiLiAgKi8KKysgICAgICAgICAgeSA9IEZNU1VCICh0aHJlZWhhbGYsIGIsIGIpOworKworKyAgICAgICAgICAvKiBJbml0aWFsIGVzdGltYXRlLiAgKi8KKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVt4XSwgJVtiXVxuIiA6IFt4XSAiPWYiICh4KSA6IFtiXSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogSXRlcmF0ZS4gIHhfe24rMX0gPSB4X24gKiAoMS41IC0geSAqICh4X24gKiB4X24pKS4gICovCisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrCisrICAgICAgICAgIC8qIEFsbCBkb25lLiAgKi8KKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIHggKiBiOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2hmIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzFlNTE2ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCitAQCAtMCwwICsxLDEzNCBAQAorKy8qIERvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvMTA4ID0gMy4yNDUxODU1MzY1ODQyNjcyNjllKzMyOworK3N0YXRpYyBjb25zdCBmbG9hdCB0d29tNTQgPSA1LjU1MTExNTEyMzEyNTc4MjcwMmUtMTc7Cisrc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSBhY3R1YWwgc3F1YXJlIHJvb3QgYW5kIGhhbGYgb2YgaXRzIHJlY2lwcm9jYWwKKysgICBzaW11bHRhbmVvdXNseS4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorKyNlbHNlCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGIpCisrICAgICBkb3VibGUgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrICAgICAgZG91YmxlIHksIGcsIGgsIGQsIHI7CisrICAgICAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSB1OworKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICB1LnZhbHVlID0gYjsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVtlc3RpbWF0ZV0sICVbeF1cbiIKKysgICAgICAgICAgICAgICAgICAgOiBbZXN0aW1hdGVdICI9ZiIgKHkpIDogW3hdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBGb2xsb3dpbmcgTXVsbGVyIGV0IGFsLCBwYWdlIDE2OCwgZXF1YXRpb24gNS4yMC4KKysKKysgICAgICAgICAgICAgaCBnb2VzIHRvIDEvKDIqc3FydChiKSkKKysgICAgICAgICAgICAgZyBnb2VzIHRvIHNxcnQoYikuCisrCisrICAgICAgICAgICAgIFdlIG5lZWQgdGhyZWUgaXRlcmF0aW9ucyB0byBnZXQgd2l0aGluIDF1bHAuICAqLworKworKyAgICAgICAgICAvKiBJbmRpY2F0ZSB0aGF0IHRoZXNlIGNhbiBiZSBwZXJmb3JtZWQgcHJpb3IgdG8gdGhlIGJyYW5jaC4gIEdDQworKyAgICAgICAgICAgICBpbnNpc3RzIG9uIHNpbmtpbmcgdGhlbSBiZWxvdyB0aGUgYnJhbmNoLCBob3dldmVyOyBpdCBzZWVtcyBsaWtlCisrICAgICAgICAgICAgIHRoZXknZCBiZSBiZXR0ZXIgYmVmb3JlIHRoZSBicmFuY2ggc28gdGhhdCB3ZSBjYW4gY292ZXIgYW55IGxhdGVuY3kKKysgICAgICAgICAgICAgZnJvbSBzdG9yaW5nIHRoZSBhcmd1bWVudCBhbmQgbG9hZGluZyBpdHMgaGlnaCB3b3JkLiAgT2ggd2VsbC4gICovCisrCisrICAgICAgICAgIGcgPSBiICogeTsKKysgICAgICAgICAgaCA9IDAuNSAqIHk7CisrCisrICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworKyAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCisrICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysKKysjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm1hZGQgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIC8qIGcgaXMgbm93ICsvLSAxdWxwLCBvciBleGFjdGx5IGVxdWFsIHRvLCB0aGUgc3F1YXJlIHJvb3Qgb2YgYi4gICovCisrCisrICAgICAgICAgIC8qIEZpbmFsIHJlZmluZW1lbnQuICAqLworKyAgICAgICAgICBkID0gRk5NU1VCIChnLCBnLCBiKTsKKysKKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIEZNQUREIChkLCBoLCBnKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yNmZhMDY3CistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCitAQCAtMCwwICsxLDEwMSBAQAorKy8qIFNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhbmQgdXNlIHRoYXQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsCisrICAgc3F1YXJlIHJvb3QuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorKyNlbHNlCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGIpCisrICAgICBmbG9hdCBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysjZGVmaW5lIEZNU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZtc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZG91YmxlIHksIHg7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgLyogQ29tcHV0ZSB5ID0gMS41ICogYiAtIGIuICBVc2VzIGZld2VyIGNvbnN0YW50cyB0aGFuIHkgPSAwLjUgKiBiLiAgKi8KKysgICAgICAgICAgeSA9IEZNU1VCICh0aHJlZWhhbGYsIGIsIGIpOworKworKyAgICAgICAgICAvKiBJbml0aWFsIGVzdGltYXRlLiAgKi8KKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVt4XSwgJVtiXVxuIiA6IFt4XSAiPWYiICh4KSA6IFtiXSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogSXRlcmF0ZS4gIHhfe24rMX0gPSB4X24gKiAoMS41IC0geSAqICh4X24gKiB4X24pKS4gICovCisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrCisrICAgICAgICAgIC8qIEFsbCBkb25lLiAgKi8KKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIHggKiBiOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2hmIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcxZTUxNmQKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCitAQCAtMCwwICsxLDEzNCBAQAorKy8qIERvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvMTA4ID0gMy4yNDUxODU1MzY1ODQyNjcyNjllKzMyOworK3N0YXRpYyBjb25zdCBmbG9hdCB0d29tNTQgPSA1LjU1MTExNTEyMzEyNTc4MjcwMmUtMTc7Cisrc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSBhY3R1YWwgc3F1YXJlIHJvb3QgYW5kIGhhbGYgb2YgaXRzIHJlY2lwcm9jYWwKKysgICBzaW11bHRhbmVvdXNseS4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorKyNlbHNlCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGIpCisrICAgICBkb3VibGUgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrICAgICAgZG91YmxlIHksIGcsIGgsIGQsIHI7CisrICAgICAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSB1OworKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICB1LnZhbHVlID0gYjsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVtlc3RpbWF0ZV0sICVbeF1cbiIKKysgICAgICAgICAgICAgICAgICAgOiBbZXN0aW1hdGVdICI9ZiIgKHkpIDogW3hdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBGb2xsb3dpbmcgTXVsbGVyIGV0IGFsLCBwYWdlIDE2OCwgZXF1YXRpb24gNS4yMC4KKysKKysgICAgICAgICAgICAgaCBnb2VzIHRvIDEvKDIqc3FydChiKSkKKysgICAgICAgICAgICAgZyBnb2VzIHRvIHNxcnQoYikuCisrCisrICAgICAgICAgICAgIFdlIG5lZWQgdGhyZWUgaXRlcmF0aW9ucyB0byBnZXQgd2l0aGluIDF1bHAuICAqLworKworKyAgICAgICAgICAvKiBJbmRpY2F0ZSB0aGF0IHRoZXNlIGNhbiBiZSBwZXJmb3JtZWQgcHJpb3IgdG8gdGhlIGJyYW5jaC4gIEdDQworKyAgICAgICAgICAgICBpbnNpc3RzIG9uIHNpbmtpbmcgdGhlbSBiZWxvdyB0aGUgYnJhbmNoLCBob3dldmVyOyBpdCBzZWVtcyBsaWtlCisrICAgICAgICAgICAgIHRoZXknZCBiZSBiZXR0ZXIgYmVmb3JlIHRoZSBicmFuY2ggc28gdGhhdCB3ZSBjYW4gY292ZXIgYW55IGxhdGVuY3kKKysgICAgICAgICAgICAgZnJvbSBzdG9yaW5nIHRoZSBhcmd1bWVudCBhbmQgbG9hZGluZyBpdHMgaGlnaCB3b3JkLiAgT2ggd2VsbC4gICovCisrCisrICAgICAgICAgIGcgPSBiICogeTsKKysgICAgICAgICAgaCA9IDAuNSAqIHk7CisrCisrICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworKyAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCisrICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysKKysjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm1hZGQgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIC8qIGcgaXMgbm93ICsvLSAxdWxwLCBvciBleGFjdGx5IGVxdWFsIHRvLCB0aGUgc3F1YXJlIHJvb3Qgb2YgYi4gICovCisrCisrICAgICAgICAgIC8qIEZpbmFsIHJlZmluZW1lbnQuICAqLworKyAgICAgICAgICBkID0gRk5NU1VCIChnLCBnLCBiKTsKKysKKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIEZNQUREIChkLCBoLCBnKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjZmYTA2NworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtMCwwICsxLDEwMSBAQAorKy8qIFNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhbmQgdXNlIHRoYXQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsCisrICAgc3F1YXJlIHJvb3QuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorKyNlbHNlCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGIpCisrICAgICBmbG9hdCBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysjZGVmaW5lIEZNU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZtc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZG91YmxlIHksIHg7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgLyogQ29tcHV0ZSB5ID0gMS41ICogYiAtIGIuICBVc2VzIGZld2VyIGNvbnN0YW50cyB0aGFuIHkgPSAwLjUgKiBiLiAgKi8KKysgICAgICAgICAgeSA9IEZNU1VCICh0aHJlZWhhbGYsIGIsIGIpOworKworKyAgICAgICAgICAvKiBJbml0aWFsIGVzdGltYXRlLiAgKi8KKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVt4XSwgJVtiXVxuIiA6IFt4XSAiPWYiICh4KSA6IFtiXSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogSXRlcmF0ZS4gIHhfe24rMX0gPSB4X24gKiAoMS41IC0geSAqICh4X24gKiB4X24pKS4gICovCisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrCisrICAgICAgICAgIC8qIEFsbCBkb25lLiAgKi8KKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIHggKiBiOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2hmIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcxZTUxNmQKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCitAQCAtMCwwICsxLDEzNCBAQAorKy8qIERvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvMTA4ID0gMy4yNDUxODU1MzY1ODQyNjcyNjllKzMyOworK3N0YXRpYyBjb25zdCBmbG9hdCB0d29tNTQgPSA1LjU1MTExNTEyMzEyNTc4MjcwMmUtMTc7Cisrc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSBhY3R1YWwgc3F1YXJlIHJvb3QgYW5kIGhhbGYgb2YgaXRzIHJlY2lwcm9jYWwKKysgICBzaW11bHRhbmVvdXNseS4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorKyNlbHNlCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGIpCisrICAgICBkb3VibGUgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrICAgICAgZG91YmxlIHksIGcsIGgsIGQsIHI7CisrICAgICAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSB1OworKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICB1LnZhbHVlID0gYjsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVtlc3RpbWF0ZV0sICVbeF1cbiIKKysgICAgICAgICAgICAgICAgICAgOiBbZXN0aW1hdGVdICI9ZiIgKHkpIDogW3hdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBGb2xsb3dpbmcgTXVsbGVyIGV0IGFsLCBwYWdlIDE2OCwgZXF1YXRpb24gNS4yMC4KKysKKysgICAgICAgICAgICAgaCBnb2VzIHRvIDEvKDIqc3FydChiKSkKKysgICAgICAgICAgICAgZyBnb2VzIHRvIHNxcnQoYikuCisrCisrICAgICAgICAgICAgIFdlIG5lZWQgdGhyZWUgaXRlcmF0aW9ucyB0byBnZXQgd2l0aGluIDF1bHAuICAqLworKworKyAgICAgICAgICAvKiBJbmRpY2F0ZSB0aGF0IHRoZXNlIGNhbiBiZSBwZXJmb3JtZWQgcHJpb3IgdG8gdGhlIGJyYW5jaC4gIEdDQworKyAgICAgICAgICAgICBpbnNpc3RzIG9uIHNpbmtpbmcgdGhlbSBiZWxvdyB0aGUgYnJhbmNoLCBob3dldmVyOyBpdCBzZWVtcyBsaWtlCisrICAgICAgICAgICAgIHRoZXknZCBiZSBiZXR0ZXIgYmVmb3JlIHRoZSBicmFuY2ggc28gdGhhdCB3ZSBjYW4gY292ZXIgYW55IGxhdGVuY3kKKysgICAgICAgICAgICAgZnJvbSBzdG9yaW5nIHRoZSBhcmd1bWVudCBhbmQgbG9hZGluZyBpdHMgaGlnaCB3b3JkLiAgT2ggd2VsbC4gICovCisrCisrICAgICAgICAgIGcgPSBiICogeTsKKysgICAgICAgICAgaCA9IDAuNSAqIHk7CisrCisrICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworKyAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCisrICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysKKysjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm1hZGQgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIC8qIGcgaXMgbm93ICsvLSAxdWxwLCBvciBleGFjdGx5IGVxdWFsIHRvLCB0aGUgc3F1YXJlIHJvb3Qgb2YgYi4gICovCisrCisrICAgICAgICAgIC8qIEZpbmFsIHJlZmluZW1lbnQuICAqLworKyAgICAgICAgICBkID0gRk5NU1VCIChnLCBnLCBiKTsKKysKKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIEZNQUREIChkLCBoLCBnKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjZmYTA2NworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtMCwwICsxLDEwMSBAQAorKy8qIFNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhbmQgdXNlIHRoYXQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsCisrICAgc3F1YXJlIHJvb3QuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorKyNlbHNlCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGIpCisrICAgICBmbG9hdCBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysjZGVmaW5lIEZNU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZtc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZG91YmxlIHksIHg7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgLyogQ29tcHV0ZSB5ID0gMS41ICogYiAtIGIuICBVc2VzIGZld2VyIGNvbnN0YW50cyB0aGFuIHkgPSAwLjUgKiBiLiAgKi8KKysgICAgICAgICAgeSA9IEZNU1VCICh0aHJlZWhhbGYsIGIsIGIpOworKworKyAgICAgICAgICAvKiBJbml0aWFsIGVzdGltYXRlLiAgKi8KKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVt4XSwgJVtiXVxuIiA6IFt4XSAiPWYiICh4KSA6IFtiXSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogSXRlcmF0ZS4gIHhfe24rMX0gPSB4X24gKiAoMS41IC0geSAqICh4X24gKiB4X24pKS4gICovCisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrCisrICAgICAgICAgIC8qIEFsbCBkb25lLiAgKi8KKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIHggKiBiOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2hmIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcxZTUxNmQKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCitAQCAtMCwwICsxLDEzNCBAQAorKy8qIERvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvMTA4ID0gMy4yNDUxODU1MzY1ODQyNjcyNjllKzMyOworK3N0YXRpYyBjb25zdCBmbG9hdCB0d29tNTQgPSA1LjU1MTExNTEyMzEyNTc4MjcwMmUtMTc7Cisrc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSBhY3R1YWwgc3F1YXJlIHJvb3QgYW5kIGhhbGYgb2YgaXRzIHJlY2lwcm9jYWwKKysgICBzaW11bHRhbmVvdXNseS4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorKyNlbHNlCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGIpCisrICAgICBkb3VibGUgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrICAgICAgZG91YmxlIHksIGcsIGgsIGQsIHI7CisrICAgICAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSB1OworKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICB1LnZhbHVlID0gYjsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVtlc3RpbWF0ZV0sICVbeF1cbiIKKysgICAgICAgICAgICAgICAgICAgOiBbZXN0aW1hdGVdICI9ZiIgKHkpIDogW3hdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBGb2xsb3dpbmcgTXVsbGVyIGV0IGFsLCBwYWdlIDE2OCwgZXF1YXRpb24gNS4yMC4KKysKKysgICAgICAgICAgICAgaCBnb2VzIHRvIDEvKDIqc3FydChiKSkKKysgICAgICAgICAgICAgZyBnb2VzIHRvIHNxcnQoYikuCisrCisrICAgICAgICAgICAgIFdlIG5lZWQgdGhyZWUgaXRlcmF0aW9ucyB0byBnZXQgd2l0aGluIDF1bHAuICAqLworKworKyAgICAgICAgICAvKiBJbmRpY2F0ZSB0aGF0IHRoZXNlIGNhbiBiZSBwZXJmb3JtZWQgcHJpb3IgdG8gdGhlIGJyYW5jaC4gIEdDQworKyAgICAgICAgICAgICBpbnNpc3RzIG9uIHNpbmtpbmcgdGhlbSBiZWxvdyB0aGUgYnJhbmNoLCBob3dldmVyOyBpdCBzZWVtcyBsaWtlCisrICAgICAgICAgICAgIHRoZXknZCBiZSBiZXR0ZXIgYmVmb3JlIHRoZSBicmFuY2ggc28gdGhhdCB3ZSBjYW4gY292ZXIgYW55IGxhdGVuY3kKKysgICAgICAgICAgICAgZnJvbSBzdG9yaW5nIHRoZSBhcmd1bWVudCBhbmQgbG9hZGluZyBpdHMgaGlnaCB3b3JkLiAgT2ggd2VsbC4gICovCisrCisrICAgICAgICAgIGcgPSBiICogeTsKKysgICAgICAgICAgaCA9IDAuNSAqIHk7CisrCisrICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworKyAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCisrICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysKKysjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm1hZGQgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIC8qIGcgaXMgbm93ICsvLSAxdWxwLCBvciBleGFjdGx5IGVxdWFsIHRvLCB0aGUgc3F1YXJlIHJvb3Qgb2YgYi4gICovCisrCisrICAgICAgICAgIC8qIEZpbmFsIHJlZmluZW1lbnQuICAqLworKyAgICAgICAgICBkID0gRk5NU1VCIChnLCBnLCBiKTsKKysKKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIEZNQUREIChkLCBoLCBnKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjZmYTA2NworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtMCwwICsxLDEwMSBAQAorKy8qIFNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhbmQgdXNlIHRoYXQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsCisrICAgc3F1YXJlIHJvb3QuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorKyNlbHNlCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGIpCisrICAgICBmbG9hdCBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysjZGVmaW5lIEZNU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZtc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZG91YmxlIHksIHg7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgLyogQ29tcHV0ZSB5ID0gMS41ICogYiAtIGIuICBVc2VzIGZld2VyIGNvbnN0YW50cyB0aGFuIHkgPSAwLjUgKiBiLiAgKi8KKysgICAgICAgICAgeSA9IEZNU1VCICh0aHJlZWhhbGYsIGIsIGIpOworKworKyAgICAgICAgICAvKiBJbml0aWFsIGVzdGltYXRlLiAgKi8KKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVt4XSwgJVtiXVxuIiA6IFt4XSAiPWYiICh4KSA6IFtiXSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogSXRlcmF0ZS4gIHhfe24rMX0gPSB4X24gKiAoMS41IC0geSAqICh4X24gKiB4X24pKS4gICovCisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrCisrICAgICAgICAgIC8qIEFsbCBkb25lLiAgKi8KKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIHggKiBiOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2hmIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcxZTUxNmQKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCitAQCAtMCwwICsxLDEzNCBAQAorKy8qIERvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvMTA4ID0gMy4yNDUxODU1MzY1ODQyNjcyNjllKzMyOworK3N0YXRpYyBjb25zdCBmbG9hdCB0d29tNTQgPSA1LjU1MTExNTEyMzEyNTc4MjcwMmUtMTc7Cisrc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSBhY3R1YWwgc3F1YXJlIHJvb3QgYW5kIGhhbGYgb2YgaXRzIHJlY2lwcm9jYWwKKysgICBzaW11bHRhbmVvdXNseS4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorKyNlbHNlCisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGIpCisrICAgICBkb3VibGUgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrICAgICAgZG91YmxlIHksIGcsIGgsIGQsIHI7CisrICAgICAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSB1OworKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICB1LnZhbHVlID0gYjsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVtlc3RpbWF0ZV0sICVbeF1cbiIKKysgICAgICAgICAgICAgICAgICAgOiBbZXN0aW1hdGVdICI9ZiIgKHkpIDogW3hdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBGb2xsb3dpbmcgTXVsbGVyIGV0IGFsLCBwYWdlIDE2OCwgZXF1YXRpb24gNS4yMC4KKysKKysgICAgICAgICAgICAgaCBnb2VzIHRvIDEvKDIqc3FydChiKSkKKysgICAgICAgICAgICAgZyBnb2VzIHRvIHNxcnQoYikuCisrCisrICAgICAgICAgICAgIFdlIG5lZWQgdGhyZWUgaXRlcmF0aW9ucyB0byBnZXQgd2l0aGluIDF1bHAuICAqLworKworKyAgICAgICAgICAvKiBJbmRpY2F0ZSB0aGF0IHRoZXNlIGNhbiBiZSBwZXJmb3JtZWQgcHJpb3IgdG8gdGhlIGJyYW5jaC4gIEdDQworKyAgICAgICAgICAgICBpbnNpc3RzIG9uIHNpbmtpbmcgdGhlbSBiZWxvdyB0aGUgYnJhbmNoLCBob3dldmVyOyBpdCBzZWVtcyBsaWtlCisrICAgICAgICAgICAgIHRoZXknZCBiZSBiZXR0ZXIgYmVmb3JlIHRoZSBicmFuY2ggc28gdGhhdCB3ZSBjYW4gY292ZXIgYW55IGxhdGVuY3kKKysgICAgICAgICAgICAgZnJvbSBzdG9yaW5nIHRoZSBhcmd1bWVudCBhbmQgbG9hZGluZyBpdHMgaGlnaCB3b3JkLiAgT2ggd2VsbC4gICovCisrCisrICAgICAgICAgIGcgPSBiICogeTsKKysgICAgICAgICAgaCA9IDAuNSAqIHk7CisrCisrICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworKyAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCisrICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysKKysjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm1hZGQgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIC8qIGcgaXMgbm93ICsvLSAxdWxwLCBvciBleGFjdGx5IGVxdWFsIHRvLCB0aGUgc3F1YXJlIHJvb3Qgb2YgYi4gICovCisrCisrICAgICAgICAgIC8qIEZpbmFsIHJlZmluZW1lbnQuICAqLworKyAgICAgICAgICBkID0gRk5NU1VCIChnLCBnLCBiKTsKKysKKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIEZNQUREIChkLCBoLCBnKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjZmYTA2NworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtMCwwICsxLDEwMSBAQAorKy8qIFNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgc3F1YXJlIHJvb3QuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxtYXRoX3ByaXZhdGUuaD4KKysjaW5jbHVkZSA8ZmVudl9saWJjLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisrI2luY2x1ZGUgPHN5c2RlcC5oPgorKyNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9uYW4gPSB7LndvcmQgPSAweDdmYzAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX2luZiA9IHsud29yZCA9IDB4N2Y4MDAwMDAgfTsKKytzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhbmQgdXNlIHRoYXQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsCisrICAgc3F1YXJlIHJvb3QuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorKyNlbHNlCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGIpCisrICAgICBmbG9hdCBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysjZGVmaW5lIEZNU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZtc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiICE9IGFfaW5mLnZhbHVlLCAxKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZG91YmxlIHksIHg7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgcmVsYXhfZmVudl9zdGF0ZSAoKTsKKysKKysgICAgICAgICAgLyogQ29tcHV0ZSB5ID0gMS41ICogYiAtIGIuICBVc2VzIGZld2VyIGNvbnN0YW50cyB0aGFuIHkgPSAwLjUgKiBiLiAgKi8KKysgICAgICAgICAgeSA9IEZNU1VCICh0aHJlZWhhbGYsIGIsIGIpOworKworKyAgICAgICAgICAvKiBJbml0aWFsIGVzdGltYXRlLiAgKi8KKysgICAgICAgICAgX19hc21fXyAoImZyc3FydGUgJVt4XSwgJVtiXVxuIiA6IFt4XSAiPWYiICh4KSA6IFtiXSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogSXRlcmF0ZS4gIHhfe24rMX0gPSB4X24gKiAoMS41IC0geSAqICh4X24gKiB4X24pKS4gICovCisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrCisrICAgICAgICAgIC8qIEFsbCBkb25lLiAgKi8KKysgICAgICAgICAgZmVzZXRlbnZfcmVnaXN0ZXIgKGZlKTsKKysgICAgICAgICAgcmV0dXJuIHggKiBiOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2hmIChiKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvSW1wbGllcyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L0ltcGxpZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMTAzYjRkCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9JbXBsaWVzCitAQCAtMCwwICsxIEBACisrcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lMzAwYzMvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lMzAwYzMvZnB1L0ltcGxpZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42NGRiMTdmCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lMzAwYzMvZnB1L0ltcGxpZXMKK0BAIC0wLDAgKzEsMiBAQAorKyMgZTMwMGMzIGlzIGEgdmFyaWFudCBvZiA2MDNlIHNvIHVzZSB0aGUgc2FtZSBvcHRpbWl6YXRpb25zIGZvciBzcXJ0CisrcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L0ltcGxpZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43ZWFjNWZjCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L0ltcGxpZXMKK0BAIC0wLDAgKzEgQEAKKytwb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvSW1wbGllcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI2NGIyYTcKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9JbXBsaWVzCitAQCAtMCwwICsxIEBACisrcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvSW1wbGllcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmEyNTkzNDQKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9JbXBsaWVzCitAQCAtMCwwICsxIEBACisrcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvSW1wbGllcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmE3YmM4NTQKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9JbXBsaWVzCitAQCAtMCwwICsxIEBACisrcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvSW1wbGllcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjA0ZmY4Y2MKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9JbXBsaWVzCitAQCAtMCwwICsxIEBACisrcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNi1yZWFkbGliLUFkZC1PRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMtdG8ta25vd24tLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA2LXJlYWRsaWItQWRkLU9FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUy10by1rbm93bi0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVjMjI3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNi1yZWFkbGliLUFkZC1PRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMtdG8ta25vd24tLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gNWVjMWJjNTE3Mjg1MTI3ODIzMWNlOTQwYjY4YjM1Y2U5Y2JmODUwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjExOjIyICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMjddIHJlYWRsaWI6IEFkZCBPRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMgdG8ga25vd24KKyBuYW1lcworCitUaGlzIGJvbHRzIGluIGEgaG9vayBmb3IgT0UgdG8gcGFzcyBpdHMgb3duIHZlcnNpb24gb2YgaW50ZXJwcmV0ZXIKK25hbWVzIGludG8gZ2xpYmMgZXNwZWNpYWxseSBmb3IgbXVsdGlsaWIgY2FzZSwgd2hlcmUgaXQgZGlmZmVycyBmcm9tIGFueQorb3RoZXIgZGlzdHJvcworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBMaWFuaGFvIEx1IDxsaWFuaGFvLmx1QGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBlbGYvcmVhZGxpYi5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9lbGYvcmVhZGxpYi5jIGIvZWxmL3JlYWRsaWIuYworaW5kZXggN2ZkNWI4YS4uMmY1ZGE5ZiAxMDA2NDQKKy0tLSBhL2VsZi9yZWFkbGliLmMKKysrKyBiL2VsZi9yZWFkbGliLmMKK0BAIC01MSw2ICs1MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga25vd25fbmFtZXMgaW50ZXJwcmV0ZXJzW10gPQorICNpZmRlZiBTWVNERVBfS05PV05fSU5URVJQUkVURVJfTkFNRVMKKyAgIFNZU0RFUF9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUworICNlbmRpZgorKyAgT0VDT1JFX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTCisgfTsKKyAKKyBzdGF0aWMgc3RydWN0IGtub3duX25hbWVzIGtub3duX2xpYnNbXSA9CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNy1wcGMtc3FydC1GaXgtdW5kZWZpbmVkLXJlZmVyZW5jZS10by1fX3NxcnRfZmluaXRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA3LXBwYy1zcXJ0LUZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLV9fc3FydF9maW5pdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjOGZiZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNy1wcGMtc3FydC1GaXgtdW5kZWZpbmVkLXJlZmVyZW5jZS10by1fX3NxcnRfZmluaXRlLnBhdGNoCkBAIC0wLDAgKzEsMjA4IEBACitGcm9tIGVhOThiMWExMmI1Zjc3OWZkNzk0NzhmZjkzMGE3OWVmNjAzODc4NTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoxNTowNyArMDAwMAorU3ViamVjdDogW1BBVENIIDA3LzI3XSBwcGMvc3FydDogRml4IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fc3FydF9maW5pdGUnCisKK29uIHBwYyBmaXhlcyB0aGUgZXJyb3JzIGxpa2UgYmVsb3cKK3wgLi8ubGlicy9saWJwdWxzZWNvcmUtMS4xLnNvOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX3NxcnRfZmluaXRlJworfCBjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQ2hhbmdlTG9nCisKKzIwMTItMDEtMDYgIEtoZW0gUmFqICA8cmFqLmtoZW1AZ21haWwuY29tPgorCisgICAgICAgICogc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jOiBBZGQgX18qX2Zpbml0ZSBhbGlhcy4KKyAgICAgICAgUmVtb3ZlIGNydWZ0LgorICAgICAgICAqIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jOiBEaXR0by4KKyAgICAgICAgKiBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jOiBEaXR0by4KKyAgICAgICAgKiBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYzogRGl0dG8uCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jICAgIHwgNyArLS0tLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMgICB8IDcgKy0tLS0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYyAgfCAxICsKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jIHwgMSArCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMgICB8IDEgKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYyAgfCAxICsKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYyAgIHwgMSArCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jICB8IDEgKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jICAgfCA3ICstLS0tLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMgIHwgNyArLS0tLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMgICB8IDEgKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYyAgfCAxICsKKyAxMiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCitpbmRleCA3MWU1MTZkLi4xNzk1ZmQ2IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYworQEAgLTM5LDE0ICszOSw4IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworICAgIFdlIGZpbmQgdGhlIGFjdHVhbCBzcXVhcmUgcm9vdCBhbmQgaGFsZiBvZiBpdHMgcmVjaXByb2NhbAorICAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKyAKKy0jaWZkZWYgX19TVERDX18KKyBkb3VibGUKKyBfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCistI2Vsc2UKKy1kb3VibGUKKy1fX2llZWU3NTRfc3FydCAoYikKKy0gICAgIGRvdWJsZSBiOworLSNlbmRpZgorIHsKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisgICAgIHsKK0BAIC0xMzIsMyArMTI2LDQgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDI2ZmEwNjcuLmE5MTdmMzEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKK0BAIC0zNywxNCArMzcsOCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworICAgIFdlIGZpbmQgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYW5kIHVzZSB0aGF0IHRvIGNvbXB1dGUgdGhlIGFjdHVhbAorICAgIHNxdWFyZSByb290LiAgKi8KKyAKKy0jaWZkZWYgX19TVERDX18KKyBmbG9hdAorIF9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKy0jZWxzZQorLWZsb2F0CistX19pZWVlNzU0X3NxcnRmIChiKQorLSAgICAgZmxvYXQgYjsKKy0jZW5kaWYKKyB7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorICAgICB7CitAQCAtOTksMyArOTMsNCBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYworaW5kZXggNzFlNTE2ZC4uZmM0YTc0OSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCitAQCAtMTMyLDMgKzEzMiw0IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYworaW5kZXggMjZmYTA2Ny4uOWQxNzUxMiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKK0BAIC05OSwzICs5OSw0IEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYworaW5kZXggNzFlNTE2ZC4uZmM0YTc0OSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYworQEAgLTEzMiwzICsxMzIsNCBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitpbmRleCAyNmZhMDY3Li45ZDE3NTEyIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC05OSwzICs5OSw0IEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworaW5kZXggNzFlNTE2ZC4uZmM0YTc0OSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworQEAgLTEzMiwzICsxMzIsNCBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitpbmRleCAyNmZhMDY3Li45ZDE3NTEyIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC05OSwzICs5OSw0IEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYworaW5kZXggNzFlNTE2ZC4uMTc5NWZkNiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYworQEAgLTM5LDE0ICszOSw4IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworICAgIFdlIGZpbmQgdGhlIGFjdHVhbCBzcXVhcmUgcm9vdCBhbmQgaGFsZiBvZiBpdHMgcmVjaXByb2NhbAorICAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKyAKKy0jaWZkZWYgX19TVERDX18KKyBkb3VibGUKKyBfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCistI2Vsc2UKKy1kb3VibGUKKy1fX2llZWU3NTRfc3FydCAoYikKKy0gICAgIGRvdWJsZSBiOworLSNlbmRpZgorIHsKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisgICAgIHsKK0BAIC0xMzIsMyArMTI2LDQgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYworaW5kZXggMjZmYTA2Ny4uYTkxN2YzMSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtMzcsMTQgKzM3LDggQEAgc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKyAgICBXZSBmaW5kIHRoZSByZWNpcHJvY2FsIHNxdWFyZSByb290IGFuZCB1c2UgdGhhdCB0byBjb21wdXRlIHRoZSBhY3R1YWwKKyAgICBzcXVhcmUgcm9vdC4gICovCisgCistI2lmZGVmIF9fU1REQ19fCisgZmxvYXQKKyBfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCistI2Vsc2UKKy1mbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoYikKKy0gICAgIGZsb2F0IGI7CistI2VuZGlmCisgeworICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKyAgICAgeworQEAgLTk5LDMgKzkzLDQgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCitpbmRleCA3MWU1MTZkLi5mYzRhNzQ5IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCitAQCAtMTMyLDMgKzEzMiw0IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDI2ZmEwNjcuLjlkMTc1MTIgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYworQEAgLTk5LDMgKzk5LDQgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA4LV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDgtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2ZhOTMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA4LV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2gKQEAgLTAsMCArMSwzODcgQEAKK0Zyb20gMjQ1NmVhNDRhZWVlZGFlODdlZGI1MjJmNzdhNzk2OWQ2MzYzOTliMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjE2OjM4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDgvMjddIF9faWVlZTc1NF9zcXJ0eyxmfSBhcmUgbm93IGlubGluZSBmdW5jdGlvbnMgYW5kIGNhbGwKKyBvdXQgX19zbG93IHZlcnNpb25zCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYyAgICB8IDEyICsrKysrKysrKystLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jICAgfCAgOCArKysrKysrLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYyAgfCAxNCArKysrKysrKysrKy0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMgfCAxMiArKysrKysrKysrLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYyAgIHwgMTQgKysrKysrKysrKystLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMgIHwgMTIgKysrKysrKysrKy0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMgICB8ICA4ICsrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jICB8ICA4ICsrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMgICB8IDEyICsrKysrKysrKystLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYyAgfCAgOSArKysrKysrKy0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYyAgIHwgMTQgKysrKysrKysrKystLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMgIHwgMTIgKysrKysrKysrKy0tCisgMTIgZmlsZXMgY2hhbmdlZCwgMTE0IGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKK2luZGV4IDE3OTVmZDYuLmRhYTgzZjMgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCitAQCAtNDAsNyArNDAsNyBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKyAgICBzaW11bHRhbmVvdXNseS4gICovCisgCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorIHsKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisgICAgIHsKK0BAIC03Nyw3ICs3Nyw3IEBAIF9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyAKKyAgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisgICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKy0gICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKyAgICAgICAgICAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKyAKKyAjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorQEAgLTEyNiw0ICsxMjYsMTIgQEAgX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0CisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSB4KQorK3sKKysgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYworaW5kZXggYTkxN2YzMS4uYjgxMmNmMSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYworQEAgLTM4LDcgKzM4LDcgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKyAgICBzcXVhcmUgcm9vdC4gICovCisgCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisgeworICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKyAgICAgeworQEAgLTkzLDQgKzkzLDEwIEBAIF9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKysjdW5kZWYgX19pZWVlNzU0X3NxcnRmCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IHgpCisreworKyAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnRmICh4KTsKKyt9Cisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYworaW5kZXggZmM0YTc0OS4uNzAzOGE3MCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCitAQCAtNDEsMTAgKzQxLDEwIEBAIHN0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworIAorICNpZmRlZiBfX1NURENfXworIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyAjZWxzZQorIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGIpCisgICAgICBkb3VibGUgYjsKKyAjZW5kaWYKKyB7CitAQCAtODMsNyArODMsNyBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAKKyAgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisgICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKy0gICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKyAgICAgICAgICAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKyAKKyAjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorQEAgLTEzMiw0ICsxMzIsMTIgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnQKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIHgpCisreworKyAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYworaW5kZXggOWQxNzUxMi4uMTBkZTFmMCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKK0BAIC0zOSwxMCArMzksMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKyAKKyAjaWZkZWYgX19TVERDX18KKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKyAjZWxzZQorIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChiKQorICAgICAgZmxvYXQgYjsKKyAjZW5kaWYKKyB7CitAQCAtOTksNCArOTksMTIgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydGYKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgeCkKKyt7CisrICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydGYgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYworaW5kZXggZmM0YTc0OS4uNzAzOGE3MCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYworQEAgLTQxLDEwICs0MSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKyAKKyAjaWZkZWYgX19TVERDX18KKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgI2Vsc2UKKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiKQorICAgICAgZG91YmxlIGI7CisgI2VuZGlmCisgeworQEAgLTgzLDcgKzgzLDcgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgCisgICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworICAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCistICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysgICAgICAgICAgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisgCisgI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0BAIC0xMzIsNCArMTMyLDEyIEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0CisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSB4KQorK3sKKysgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitpbmRleCA5ZDE3NTEyLi4xMGRlMWYwIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC0zOSwxMCArMzksMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKyAKKyAjaWZkZWYgX19TVERDX18KKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKyAjZWxzZQorIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChiKQorICAgICAgZmxvYXQgYjsKKyAjZW5kaWYKKyB7CitAQCAtOTksNCArOTksMTIgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydGYKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgeCkKKyt7CisrICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydGYgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworaW5kZXggZmM0YTc0OS4uMWMzNDI0NCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworQEAgLTEzMiw0ICsxMzIsMTIgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnQKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIHgpCisreworKyAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDlkMTc1MTIuLjgxMjY1MzUgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworQEAgLTk5LDQgKzk5LDEyIEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnRmCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IHgpCisreworKyAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnRmICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKK2luZGV4IDE3OTVmZDYuLjEzYTgxOTcgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKK0BAIC00MCw3ICs0MCw3IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworICAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKyAKKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgeworICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKyAgICAgeworQEAgLTc3LDcgKzc3LDcgQEAgX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorIAorICAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKyAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorLSAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrICAgICAgICAgICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworIAorICNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitAQCAtMTI2LDQgKzEyNiwxMiBAQCBfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnQKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIHgpCisreworKyAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYworaW5kZXggYTkxN2YzMS4uZmFlMmQ4MSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtMzgsNyArMzgsNyBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworICAgIHNxdWFyZSByb290LiAgKi8KKyAKKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKyB7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorICAgICB7CitAQCAtOTMsNCArOTMsMTEgQEAgX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorKyN1bmRlZiBfX2llZWU3NTRfc3FydGYKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgeCkKKyt7CisrICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydGYgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYworaW5kZXggZmM0YTc0OS4uNzAzOGE3MCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYworQEAgLTQxLDEwICs0MSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKyAKKyAjaWZkZWYgX19TVERDX18KKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgI2Vsc2UKKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiKQorICAgICAgZG91YmxlIGI7CisgI2VuZGlmCisgeworQEAgLTgzLDcgKzgzLDcgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgCisgICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworICAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCistICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysgICAgICAgICAgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisgCisgI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0BAIC0xMzIsNCArMTMyLDEyIEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0CisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSB4KQorK3sKKysgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitpbmRleCA5ZDE3NTEyLi4xMGRlMWYwIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC0zOSwxMCArMzksMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKyAKKyAjaWZkZWYgX19TVERDX18KKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKyAjZWxzZQorIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChiKQorICAgICAgZmxvYXQgYjsKKyAjZW5kaWYKKyB7CitAQCAtOTksNCArOTksMTIgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydGYKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgeCkKKyt7CisrICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydGYgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOS1RdW90ZS1mcm9tLWJ1Zy0xNDQzLXdoaWNoLWV4cGxhaW5zLXdoYXQtdGhlLXBhdGNoLWRvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA5LVF1b3RlLWZyb20tYnVnLTE0NDMtd2hpY2gtZXhwbGFpbnMtd2hhdC10aGUtcGF0Y2gtZG8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1NDc1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOS1RdW90ZS1mcm9tLWJ1Zy0xNDQzLXdoaWNoLWV4cGxhaW5zLXdoYXQtdGhlLXBhdGNoLWRvLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb20gYWNmN2EwMjg4MTdlNzFlYjk5ZDc4NTAzNzY1OWFiZDRkMTIwZmZlMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjIwOjA5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMjddIFF1b3RlIGZyb20gYnVnIDE0NDMgd2hpY2ggZXhwbGFpbnMgd2hhdCB0aGUgcGF0Y2ggZG9lcworIDoKKworICBXZSBidWlsZCBzb21lIHJhbmRvbSBwcm9ncmFtIGFuZCBsaW5rIGl0IHdpdGggLWx1c3QuICBXaGVuIHdlIHJ1biBpdCwKKyAgaXQgZGllcyB3aXRoIGEgU0lHU0VHViBiZWZvcmUgcmVhY2hpbmcgbWFpbigpLgorCisgIExpYnVzdC5zbyBkZXBlbmRzIG9uIGxpYnVyY3UtYnAuc28gZnJvbSB0aGUgdXNlcm1vZGUtcmN1IHBhY2thZ2UuCisgIEFsdGhvdWdoIGxpYnVzdC5zbyBpcyBub3QgcHJlbGlua2VkLCBsaWJ1cmN1LWJwLnNvIElTIHByZWxpbmtlZDsgdGhpcworICBpcyBjcml0aWNhbC4KKworICBMaWJ1c3Quc28gdXNlcyBhIFRMUyAvIF9fdGhyZWFkIHZhcmlhYmxlIHRoYXQgaXMgZGVmaW5lZCBpbiBsaWJ1cmN1LQorICBicC5zby4gIFRoZXJlIGFyZSBzcGVjaWFsIEFSTS1zcGVjaWZpYyByZWxvY2F0aW9uIHR5cGVzIHRoYXQgYWxsb3cgdHdvCisgIHNoYXJlZCBsaWJyYXJpZXMgdG8gc2hhcmUgdGhyZWFkLXNwZWNpZmljIGRhdGEuICBUaGlzIGlzIGNyaXRpY2FsIHRvby4KKworICBPbmUgbW9yZSBjcml0aWNhbCBpc3N1ZTogYWx0aG91Z2ggbGlidXJjdS1icC5zbyBpcyBwcmVsaW5rZWQsIHdlIGNhbid0CisgIGxvYWQgaXQgYXQgaXRzIHByZWxpbmtlZCBhZGRyZXNzLCBiZWNhdXNlIHdlIGFsc28gbGluayBhZ2FpbnN0CisgIGxpYnJ0LnNvLCBhbmQgbGlicnQuc28gdXNlcyB0aGF0IGFkZHJlc3MuCisKKyAgVGhlIGR5bmFtaWMgbGlua2VyIGlzIGZvcmNlZCB0byByZWxpbmsgbGlidXJjdS1icC5zbyBhdCBhIGRpZmZlcmVudAorICBhZGRyZXNzLiAgSW4gdGhlIGNvdXJzZSBvZiByZWxpbmtpbmcsIGl0IHByb2Nlc3NlcyB0aGUgc3BlY2lhbCBBUk0KKyAgcmVsb2NhdGlvbiByZWNvcmQgbWVudGlvbmVkIGFib3ZlLiAgVGhlIHByZWxpbmtlciBoYXMgYWxyZWFkeSBmaWxsZWQKKyAgaW4gdGhlIGluZm9ybWF0aW9uLCB3aGljaCBpcyBhIHNob3J0IG9mZnNldCBpbnRvIGEgdGFibGUgb2YgdGhyZWFkLQorICBzcGVjaWZpYyBkYXRhIHRoYXQgaXMgYWxsb2NhdGVkIHBlci10aHJlYWQgZm9yIGVhY2ggbGlicmFyeSB0aGF0IHVzZXMKKyAgVExTLiAgQmVjYXVzZSB0aGUgbm9ybWFsIGJlaGF2aW9yIG9mIGEgcmVsb2NhdGlvbiBpcyB0byBhZGQgdGhlIHN5bWJvbAorICB2YWx1ZSB0byBhbiBhZGRlbmQgc3RvcmVkIGF0IHRoZSBhZGRyZXNzIGJlaW5nIHJlbG9jYXRlZCwgd2UgZW5kIHVwCisgIGFkZGluZyB0aGUgc2hvcnQgb2Zmc2V0IHRvIGl0c2VsZiwgZG91YmxpbmcgaXQuCisKKyAgTm93IHdlIGhhdmUgYW4gYXdrd2FyZCBzaXR1YXRpb24uICBUaGUgbGlidXN0LnNvIGxpYnJhcnkgZG9lc24ndCBrbm93CisgIGFib3V0IHRoZSBhZGRlbmQsIHNvIGl0cyBUTFMgZGF0YSBmb3IgdGhpcyBlbGVtZW50IGlzIGNvcnJlY3QuICBUaGUKKyAgbGlidXJjdS1icC5zbyBsaWJyYXJ5IGhhcyBhIGRpZmZlcmVudCBvZmZzZXQgZm9yIHRoZSBlbGVtZW50LiAgV2hlbiB3ZQorICBnbyB0byBpbml0aWFsaXplIHRoZSBlbGVtZW50IGZvciB0aGUgZmlyc3QgdGltZSBpbiBsaWJ1cmN1LWJwLnNvLCB3ZQorICB3cml0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgcmVzdWx0IGF0IHRoZSBkb3VibGVkIChicm9rZW4pIG9mZnNldC4KKyAgTGF0ZXIsIHdoZW4gd2UgcmVmZXIgdG8gdGhlIGFkZHJlc3MgZnJvbSBsaWJ1c3Quc28sIHdlIGNoZWNrIHRoZSB2YWx1ZQorICBhdCB0aGUgY29ycmVjdCBvZmZzZXQsIGJ1dCBpdCdzIE5VTEwsIHNvIHdlIGVhdCBob3QgU0lHU0VHVi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBEaW51IDxhbmRyZWkuYWRyaWFueC5kaW51QGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzeXNkZXBzL2FybS9kbC1tYWNoaW5lLmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2FybS9kbC1tYWNoaW5lLmggYi9zeXNkZXBzL2FybS9kbC1tYWNoaW5lLmgKK2luZGV4IDZmYjIwYmQuLjg4MDU1MzcgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2FybS9kbC1tYWNoaW5lLmgKKysrKyBiL3N5c2RlcHMvYXJtL2RsLW1hY2hpbmUuaAorQEAgLTQ5OSw3ICs0OTksNyBAQCBlbGZfbWFjaGluZV9yZWwgKHN0cnVjdCBsaW5rX21hcCAqbWFwLCBjb25zdCBFbGYzMl9SZWwgKnJlbG9jLAorIAorIAljYXNlIFJfQVJNX1RMU19EVFBPRkYzMjoKKyAJICBpZiAoc3ltICE9IE5VTEwpCistCSAgICAqcmVsb2NfYWRkciArPSBzeW0tPnN0X3ZhbHVlOworKwkgICAgKnJlbG9jX2FkZHIgPSBzeW0tPnN0X3ZhbHVlOworIAkgIGJyZWFrOworIAorIAljYXNlIFJfQVJNX1RMU19UUE9GRjMyOgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTAtZWdsaWJjLXJ1bi1saWJtLWVyci10YWIucGwtd2l0aC1zcGVjaWZpYy1kaXJzLWluLVMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTAtZWdsaWJjLXJ1bi1saWJtLWVyci10YWIucGwtd2l0aC1zcGVjaWZpYy1kaXJzLWluLVMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcxZTU3NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMC1lZ2xpYmMtcnVuLWxpYm0tZXJyLXRhYi5wbC13aXRoLXNwZWNpZmljLWRpcnMtaW4tUy5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGcm9tIDAxNzMyMmVlMjhjMTU3OWNlNmM4MTkwNDg0MmFhYWRhOWM4MjQwM2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUaW5nIExpdSA8YjI4NDk1QGZyZWVzY2FsZS5jb20+CitEYXRlOiBXZWQsIDE5IERlYyAyMDEyIDA0OjM5OjU3IC0wNjAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMjddIGVnbGliYzogcnVuIGxpYm0tZXJyLXRhYi5wbCB3aXRoIHNwZWNpZmljIGRpcnMgaW4gJHtTfQorCitsaWJtLWVyci10YWIucGwgd2lsbCBwYXJzZSBhbGwgdGhlIGZpbGVzIG5hbWVkICJsaWJtLXRlc3QtdWxwcyIKK2luIHRoZSBnaXZlbiBkaXIgcmVjdXJzaXZlbHkuIFRvIGF2b2lkIHBhcnNpbmcgdGhlIG9uZSBpbgorJHtTfS8ucGMvIChpdCBkb2VzIGV4aXN0IGFmdGVyIGVnbGliYyBhZGRzIGFhcmNoNjQgc3VwcG9ydCwKKyR7U30vLnBjL2FhcmNoNjQtMDAwMS1nbGliYy1mc2YtdjEtZWFmNmYyMDUucGF0Y2gvcG9ydHMvc3lzZGVwcy8KK2FhcmNoNjQvbGlibS10ZXN0LXVscHMpLCBydW4gbGlibS1lcnItdGFiLnBsIHdpdGggc3BlY2lmaWMgZGlycworaW4gJHtTfS4KKworVXBzdHJlYW0tU3RhdHVzOiBpbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogVGluZyBMaXUgPGIyODQ5NUBmcmVlc2NhbGUuY29tPgorLS0tCisgbWFudWFsL01ha2VmaWxlIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9tYW51YWwvTWFrZWZpbGUgYi9tYW51YWwvTWFrZWZpbGUKK2luZGV4IDUzODIyMDguLjZiNzAxYjAgMTAwNjQ0CistLS0gYS9tYW51YWwvTWFrZWZpbGUKKysrKyBiL21hbnVhbC9NYWtlZmlsZQorQEAgLTEwNSw3ICsxMDUsOCBAQCAkKG9ianBmeClsaWJtLWVyci50ZXhpOiAkKG9ianBmeClzdGFtcC1saWJtLWVycgorICQob2JqcGZ4KXN0YW1wLWxpYm0tZXJyOiBsaWJtLWVyci10YWIucGwgJCh3aWxkY2FyZCAkKGZvcmVhY2ggZGlyLCQoc3lzZGlycyksXAorIAkJCQkJCSAgICAgJChkaXIpL2xpYm0tdGVzdC11bHBzKSkKKyAJcHdkPWBwd2RgOyBcCistCSQoUEVSTCkgJDwgJCRwd2QvLi4gPiAkKG9ianBmeClsaWJtLWVyci10bXAKKysJJChQRVJMKSAkPCAkJHB3ZC8uLi9wb3J0cyA+ICQob2JqcGZ4KWxpYm0tZXJyLXRtcAorKwkkKFBFUkwpICQ8ICQkcHdkLy4uL3N5c2RlcHMgPj4gJChvYmpwZngpbGlibS1lcnItdG1wCisgCSQobW92ZS1pZi1jaGFuZ2UpICQob2JqcGZ4KWxpYm0tZXJyLXRtcCAkKG9ianBmeClsaWJtLWVyci50ZXhpCisgCXRvdWNoICRACisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMS1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDExLV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhMTEyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMS1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK0Zyb20gMWJlNDVmODcwZWJiYjAyNTliZWE1MjUwYTZkMmMyZmJjYjMzNDA5ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjI0OjQ2ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMjddIF9faWVlZTc1NF9zcXJ0eyxmfSBhcmUgbm93IGlubGluZSBmdW5jdGlvbnMgYW5kIGNhbGwKKyBvdXQgX19zbG93IHZlcnNpb25zCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBjaHVucm9uZyBndW8gPEI0MDI5MEBmcmVlc2NhbGUuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jICB8IDYgKysrLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jIHwgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCitpbmRleCAxYzM0MjQ0Li43MDM4YTcwIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCitAQCAtNDEsMTAgKzQxLDEwIEBAIHN0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworIAorICNpZmRlZiBfX1NURENfXworIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyAjZWxzZQorIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGIpCisgICAgICBkb3VibGUgYjsKKyAjZW5kaWYKKyB7CitAQCAtODMsNyArODMsNyBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAKKyAgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisgICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKy0gICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKyAgICAgICAgICAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKyAKKyAjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworaW5kZXggODEyNjUzNS4uMTBkZTFmMCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtMzksMTAgKzM5LDEwIEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisgCisgI2lmZGVmIF9fU1REQ19fCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisgI2Vsc2UKKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgIGZsb2F0IGI7CisgI2VuZGlmCisgeworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTItTWFrZS1sZC12ZXJzaW9uLW91dHB1dC1tYXRjaGluZy1ncm9rLWdvbGQtcy1vdXRwdXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTItTWFrZS1sZC12ZXJzaW9uLW91dHB1dC1tYXRjaGluZy1ncm9rLWdvbGQtcy1vdXRwdXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY3NzkxMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMi1NYWtlLWxkLXZlcnNpb24tb3V0cHV0LW1hdGNoaW5nLWdyb2stZ29sZC1zLW91dHB1dC5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDQ5NDcxYWIxZjkwZTM5MmRhOTUyMGVlYTgzMWNlODczMWJlOWZjOGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoyNTo0NSArMDAwMAorU3ViamVjdDogW1BBVENIIDEyLzI3XSBNYWtlIGxkIC0tdmVyc2lvbiBvdXRwdXQgbWF0Y2hpbmcgZ3JvayBnb2xkJ3Mgb3V0cHV0CisKK2FkYXB0ZWQgZnJvbSBmcm9tIHVwc3RyZWFtIGJyYW5jaCByb2xhbmQvZ29sZC12cy1saWJjCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSAgICB8IDIgKy0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDQ1Y2M3Y2IuLjdkNzI5OWEgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTQ3MDksNyArNDcwOSw3IEBAIGVsc2UKKyAgICMgRm91bmQgaXQsIG5vdyBjaGVjayB0aGUgdmVyc2lvbi4KKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdmVyc2lvbiBvZiAkTEQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIHZlcnNpb24gb2YgJExELi4uICIgPiY2OyB9CistICBhY19wcm9nX3ZlcnNpb249YCRMRCAtLXZlcnNpb24gMj4mMSB8IHNlZCAtbiAncy9eLipHTlUgbGQuKiBcKFswLTldWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCisrICBhY19wcm9nX3ZlcnNpb249YCRMRCAtLXZlcnNpb24gMj4mMSB8IHNlZCAtbiAncy9eLipHTlUgW0JiaW51dGlsc2RdW14uXSogXChbMC05XVswLTldKlwuWzAtOS5dKlwpLiokL1wxL3AnYAorICAgY2FzZSAkYWNfcHJvZ192ZXJzaW9uIGluCisgICAgICcnKSBhY19wcm9nX3ZlcnNpb249InYuID8uPz8sIGJhZCI7IGFjX3ZlcmNfZmFpbD15ZXM7OworICAgICAyLjFbMC05XVswLTldKnwyLjJbMi05XSp8Mi5bMy05XVswLTldKnxbMy05XS4qfFsxLTldWzAtOV0qKQorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggN2U5MzgzYS4uYTQ2N2E2OSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtOTQxLDcgKzk0MSw3IEBAIEFDX0NIRUNLX1BST0dfVkVSKEFTLCAkQVMsIC0tdmVyc2lvbiwKKyAJCSAgWzIuMVswLTldWzAtOV0qfDIuMlsyLTldKnwyLlszLTldWzAtOV0qfFszLTldLip8WzEtOV1bMC05XSpdLAorIAkJICBBUz06IGNyaXRpY19taXNzaW5nPSIkY3JpdGljX21pc3NpbmcgYXMiKQorIEFDX0NIRUNLX1BST0dfVkVSKExELCAkTEQsIC0tdmVyc2lvbiwKKy0JCSAgW0dOVSBsZC4qIFwoWzAtOV1bMC05XSpcLlswLTkuXSpcKV0sCisrCQkgIFtHTlUgW0JiaW51dGlsc2RdW14uXSogXChbMC05XVswLTldKlwuWzAtOS5dKlwpXSwKKyAJCSAgWzIuMVswLTldWzAtOV0qfDIuMlsyLTldKnwyLlszLTldWzAtOV0qfFszLTldLip8WzEtOV1bMC05XSpdLAorIAkJICBMRD06IGNyaXRpY19taXNzaW5nPSIkY3JpdGljX21pc3NpbmcgbGQiKQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTMtc3lzZGVwcy1nbnUtY29uZmlndXJlLmFjLWhhbmRsZS1jb3JyZWN0bHktbGliY19jdl9yby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMy1zeXNkZXBzLWdudS1jb25maWd1cmUuYWMtaGFuZGxlLWNvcnJlY3RseS1saWJjX2N2X3JvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZmRhOWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTMtc3lzZGVwcy1nbnUtY29uZmlndXJlLmFjLWhhbmRsZS1jb3JyZWN0bHktbGliY19jdl9yby5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIGI1NWU0OWIxOTljNDZhMjc4YWI2NmI2YjFlM2VhYjQ4M2I5MTMxOTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoyNzoxMCArMDAwMAorU3ViamVjdDogW1BBVENIIDEzLzI3XSBzeXNkZXBzL2dudS9jb25maWd1cmUuYWM6IGhhbmRsZSBjb3JyZWN0bHkKKyAkbGliY19jdl9yb290c2JpbmRpcgorCitVcHN0cmVhbS1TdGF0dXM6UGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXR0aGlldSBDcmFwZXQgPE1hdHRoaWV1LkNyYXBldEBpbmdlbmljby5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy9nbnUvY29uZmlndXJlICAgIHwgMiArLQorIHN5c2RlcHMvZ251L2NvbmZpZ3VyZS5hYyB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvZ251L2NvbmZpZ3VyZSBiL3N5c2RlcHMvZ251L2NvbmZpZ3VyZQoraW5kZXggOTIzOTI5Ny4uYzVlZDNjYSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvZ251L2NvbmZpZ3VyZQorKysrIGIvc3lzZGVwcy9nbnUvY29uZmlndXJlCitAQCAtMzIsNiArMzIsNiBAQCBjYXNlICIkcHJlZml4IiBpbgorICAgZWxzZQorICAgICBsaWJjX2N2X2xvY2Fsc3RhdGVkaXI9JGxvY2Fsc3RhdGVkaXIKKyAgICBmaQorLSAgbGliY19jdl9yb290c2JpbmRpcj0vc2JpbgorKyAgdGVzdCAtbiAiJGxpYmNfY3Zfcm9vdHNiaW5kaXIiIHx8IGxpYmNfY3Zfcm9vdHNiaW5kaXI9L3NiaW4KKyAgIDs7CisgZXNhYworZGlmZiAtLWdpdCBhL3N5c2RlcHMvZ251L2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvZ251L2NvbmZpZ3VyZS5hYworaW5kZXggNjM0ZmU0ZC4uM2RiMTY5NyAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvZ251L2NvbmZpZ3VyZS5hYworKysrIGIvc3lzZGVwcy9nbnUvY29uZmlndXJlLmFjCitAQCAtMjEsNiArMjEsNiBAQCBjYXNlICIkcHJlZml4IiBpbgorICAgZWxzZQorICAgICBsaWJjX2N2X2xvY2Fsc3RhdGVkaXI9JGxvY2Fsc3RhdGVkaXIKKyAgICBmaQorLSAgbGliY19jdl9yb290c2JpbmRpcj0vc2JpbgorKyAgdGVzdCAtbiAiJGxpYmNfY3Zfcm9vdHNiaW5kaXIiIHx8IGxpYmNfY3Zfcm9vdHNiaW5kaXI9L3NiaW4KKyAgIDs7CisgZXNhYworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTQtQWRkLXVudXNlZC1hdHRyaWJ1dGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTQtQWRkLXVudXNlZC1hdHRyaWJ1dGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJhNWQyZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNC1BZGQtdW51c2VkLWF0dHJpYnV0ZS5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDAyMjlkNmM5YzBlNzcyMTc3MzExOGQ1YWUxZDE3MmMyNjliYzk4MjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoyODo0MSArMDAwMAorU3ViamVjdDogW1BBVENIIDE0LzI3XSBBZGQgdW51c2VkIGF0dHJpYnV0ZQorCitIZWxwcyBpbiBhdm9pZGluZyBnY2Mgd2FybmluZyB3aGVuIGhlYWRlciBpcyBpcyBpbmNsdWRlZCBpbgorYSBzb3VyY2UgZmlsZSB3aGljaCBkb2VzIG5vdCB1c2UgYm90aCBmdW5jdGlvbnMKKworICAgICAgICAqIGljb252L2djb252X2NoYXJzZXQuaCAoc3RyaXApOgorICAgICAgICBBZGQgdW51c2VkIGF0dHJpYnV0ZS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBpY29udi9nY29udl9jaGFyc2V0LmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9pY29udi9nY29udl9jaGFyc2V0LmggYi9pY29udi9nY29udl9jaGFyc2V0LmgKK2luZGV4IDgwMjkwYmMuLjc4OTBhOGUgMTAwNjQ0CistLS0gYS9pY29udi9nY29udl9jaGFyc2V0LmgKKysrKyBiL2ljb252L2djb252X2NoYXJzZXQuaAorQEAgLTIxLDcgKzIxLDcgQEAKKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgCisgCistc3RhdGljIHZvaWQKKytzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKyBzdHJpcCAoY2hhciAqd3AsIGNvbnN0IGNoYXIgKnMpCisgeworICAgaW50IHNsYXNoX2NvdW50ID0gMDsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE1LVdoZW4tZGlzYWJsaW5nLVNTRS1hbHNvLW1ha2Utc3VyZS10aGF0LWZwbWF0aC1pcy1ub3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTUtV2hlbi1kaXNhYmxpbmctU1NFLWFsc28tbWFrZS1zdXJlLXRoYXQtZnBtYXRoLWlzLW5vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjI2MWNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE1LVdoZW4tZGlzYWJsaW5nLVNTRS1hbHNvLW1ha2Utc3VyZS10aGF0LWZwbWF0aC1pcy1ub3QucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSBmMDU4Yzg4NGRkMjZkMTBjOTQ1NTBjYTUyNTJlZDY1NzY2MTRkNjU5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTkgRmViIDIwMTUgMDM6MjM6NDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxNS8yN10gV2hlbiBkaXNhYmxpbmcgU1NFIGFsc28gbWFrZSBzdXJlIHRoYXQgZnBtYXRoIGlzIG5vdAorIHNldCB0byB1c2UgU1NFIGFzIHdlbGwKKworVGhpcyBmaXhlcyBlcnJvcnMgd2hlbiB3ZSBpbmplY3Qgc3NlIG9wdGlvbnMgdGhyb3VnaCBDRkxBR1MgYW5kIG5vdwordGhhdCB3ZSBoYXZlIC1XZXJyb3IgdHVybmVkIG9uIGJ5IGRlZmF1bHQgdGhpcyB3YXJuaW5nIHR1cm5zIHRvIGJlY29tZQorZXJyb3Igb24geDg2CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgc3lzZGVwcy94ODYvTWFrZWZpbGUgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3g4Ni9NYWtlZmlsZSBiL3N5c2RlcHMveDg2L01ha2VmaWxlCitpbmRleCAxOWY1ZWNhLi44MjdlYTcxIDEwMDY0NAorLS0tIGEvc3lzZGVwcy94ODYvTWFrZWZpbGUKKysrKyBiL3N5c2RlcHMveDg2L01ha2VmaWxlCitAQCAtMSw2ICsxLDYgQEAKKyBpZmVxICgkKHN1YmRpciksZWxmKQorIENGTEFHUy0ub3MgKz0gJChpZiAkKGZpbHRlciAkKEBGKSwkKHBhdHN1YnN0ICUsJS5vcywkKGFsbC1ydGxkLXJvdXRpbmVzKSkpLFwKKy0JCSAgIC1tbm8tc3NlIC1tbm8tbW14KQorKwkJICAgLW1uby1zc2UgLW1uby1tbXggLW1mcG1hdGg9Mzg3KQorIAorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpdHN0LWxkLXNzZS11c2Uub3V0CisgJChvYmpwZngpdHN0LWxkLXNzZS11c2Uub3V0OiAuLi9zeXNkZXBzL3g4Ni90c3QtbGQtc3NlLXVzZS5zaCAkKG9ianBmeClsZC5zbworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTYteWVzLXdpdGhpbi10aGUtcGF0aC1zZXRzLXdyb25nLWNvbmZpZy12YXJpYWJsZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTYteWVzLXdpdGhpbi10aGUtcGF0aC1zZXRzLXdyb25nLWNvbmZpZy12YXJpYWJsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg5ZThiMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNi15ZXMtd2l0aGluLXRoZS1wYXRoLXNldHMtd3JvbmctY29uZmlnLXZhcmlhYmxlcy5wYXRjaApAQCAtMCwwICsxLDI2MyBAQAorRnJvbSA3MDE5OWZlNTljMzhiNjIxYWI0MTIxZDdhNTU3MTliMmIyOWIzNmRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MzE6MDYgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxNi8yN10gJ3llcycgd2l0aGluIHRoZSBwYXRoIHNldHMgd3JvbmcgY29uZmlnIHZhcmlhYmxlcworCitJdCBzZWVtcyB0aGF0IHRoZSAnQUNfRUdSRVBfQ1BQKHllcy4uLicgZXhhbXBsZSBpcyBxdWl0ZSBwb3B1bGFyCitidXQgYmVpbmcgc3VjaCBhIHNob3J0IHdvcmQgdG8gZ3JlcCBpdCBpcyBsaWtlbHkgdG8gcHJvZHVjZQorZmFsc2UtcG9zaXRpdmUgbWF0Y2hlcyB3aXRoIHRoZSBwYXRoIGl0IGlzIGNvbmZpZ3VyZWQgaW50by4KKworVGhlIGNoYW5nZSBpcyB0byB1c2UgYSBtb3JlIGVsYWJvcmF0ZWQgc3RyaW5nIHRvIGdyZXAgZm9yLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbbGliYy1hbHBoYUBzb3VyY2V3YXJlLm9yZ10KKworU2lnbmVkLW9mZi1ieTogQmVuamFtaW4gRXNxdWl2ZWwgPGJlbmphbWluLmVzcXVpdmVsQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL2FybS9jb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL2FybS9jb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL21pcHMvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL21pcHMvY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL25pb3MyL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL25pb3MyL2NvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgfCA0ICsrLS0KKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUgICAgfCA4ICsrKystLS0tCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlLmFjIHwgOCArKysrLS0tLQorIDEyIGZpbGVzIGNoYW5nZWQsIDI4IGluc2VydGlvbnMoKyksIDI4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZSBiL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUKK2luZGV4IDViZDM1NWEuLjNiYzU1MzcgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlCisrKysgYi9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlCitAQCAtMTQ4LDEyICsxNDgsMTIgQEAgZWxzZQorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaWZkZWYgX19BQVJDSDY0RUJfXworLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgICAgICAgICAgICAgICAgICAgICAgaXNfYWFyY2g2NF9iZQorICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorIAorIF9BQ0VPRgorIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorKyAgJEVHUkVQICJpc19hYXJjaDY0X2JlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICAgbGliY19jdl9hYXJjaDY0X2JlPXllcworIGVsc2UKKyAgIGxpYmNfY3ZfYWFyY2g2NF9iZT1ubworZGlmZiAtLWdpdCBhL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUuYWMgYi9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlLmFjCitpbmRleCA3ODUxZGQ0Li42ZTkyMzgxIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZS5hYworKysrIGIvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZS5hYworQEAgLTEwLDggKzEwLDggQEAgR0xJQkNfUFJPVklERVMgZG5sIFNlZSBhY2xvY2FsLm00IGluIHRoZSB0b3AgbGV2ZWwgc291cmNlIGRpcmVjdG9yeS4KKyAjIHRoZSBkeW5hbWljIGxpbmtlciB2aWEgJWlmZGVmLgorIEFDX0NBQ0hFX0NIRUNLKFtmb3IgYmlnIGVuZGlhbl0sCisgICBbbGliY19jdl9hYXJjaDY0X2JlXSwKKy0gIFtBQ19FR1JFUF9DUFAoeWVzLFsjaWZkZWYgX19BQVJDSDY0RUJfXworLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgIFtBQ19FR1JFUF9DUFAoaXNfYWFyY2g2NF9iZSxbI2lmZGVmIF9fQUFSQ0g2NEVCX18KKysgICAgICAgICAgICAgICAgICAgICAgaXNfYWFyY2g2NF9iZQorICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgXSwgbGliY19jdl9hYXJjaDY0X2JlPXllcywgbGliY19jdl9hYXJjaDY0X2JlPW5vKV0pCisgaWYgdGVzdCAkbGliY19jdl9hYXJjaDY0X2JlID0geWVzOyB0aGVuCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9hcm0vY29uZmlndXJlIGIvc3lzZGVwcy9hcm0vY29uZmlndXJlCitpbmRleCAxNTgxMTZiLi41ZWFmNTRlIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9hcm0vY29uZmlndXJlCisrKysgYi9zeXNkZXBzL2FybS9jb25maWd1cmUKK0BAIC0xNTEsMTIgKzE1MSwxMiBAQCBlbHNlCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpZmRlZiBfX0FSTV9QQ1NfVkZQCistCQkgICAgICB5ZXMKKysJCSAgICAgIHVzZV9hcm1fcGNzX3ZmcAorIAkJICAgICAjZW5kaWYKKyAKKyBfQUNFT0YKKyBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysgICRFR1JFUCAidXNlX2FybV9wY3NfdmZwIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICAgbGliY19jdl9hcm1fcGNzX3ZmcD15ZXMKKyBlbHNlCisgICBsaWJjX2N2X2FybV9wY3NfdmZwPW5vCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9hcm0vY29uZmlndXJlLmFjIGIvc3lzZGVwcy9hcm0vY29uZmlndXJlLmFjCitpbmRleCA4NTljOTJhLi4yZjRhNmUyIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9hcm0vY29uZmlndXJlLmFjCisrKysgYi9zeXNkZXBzL2FybS9jb25maWd1cmUuYWMKK0BAIC0xNSw4ICsxNSw4IEBAIEFDX0RFRklORShQSV9TVEFUSUNfQU5EX0hJRERFTikKKyAjIHRoZSBkeW5hbWljIGxpbmtlciB2aWEgJWlmZGVmLgorIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBjb21waWxlciBpcyB1c2luZyB0aGUgQVJNIGhhcmQtZmxvYXQgQUJJXSwKKyAgIFtsaWJjX2N2X2FybV9wY3NfdmZwXSwKKy0gIFtBQ19FR1JFUF9DUFAoeWVzLFsjaWZkZWYgX19BUk1fUENTX1ZGUAorLQkJICAgICAgeWVzCisrICBbQUNfRUdSRVBfQ1BQKHVzZV9hcm1fcGNzX3ZmcCxbI2lmZGVmIF9fQVJNX1BDU19WRlAKKysJCSAgICAgIHVzZV9hcm1fcGNzX3ZmcAorIAkJICAgICAjZW5kaWYKKyAgIF0sIGxpYmNfY3ZfYXJtX3Bjc192ZnA9eWVzLCBsaWJjX2N2X2FybV9wY3NfdmZwPW5vKV0pCisgaWYgdGVzdCAkbGliY19jdl9hcm1fcGNzX3ZmcCA9IHllczsgdGhlbgorZGlmZiAtLWdpdCBhL3N5c2RlcHMvbWlwcy9jb25maWd1cmUgYi9zeXNkZXBzL21pcHMvY29uZmlndXJlCitpbmRleCA0ZTEzMjQ4Li5mMTRhZjk1IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZQorKysrIGIvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZQorQEAgLTE0MywxMSArMTQzLDExIEBAIGVsc2UKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgZG5sCisgI2lmZGVmIF9fbWlwc19uYW4yMDA4CisteWVzCisrdXNlX21pcHNfbmFuMjAwOAorICNlbmRpZgorIF9BQ0VPRgorIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorKyAgJEVHUkVQICJ1c2VfbWlwc19uYW4yMDA4IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICAgbGliY19jdl9taXBzX25hbjIwMDg9eWVzCisgZWxzZQorICAgbGliY19jdl9taXBzX25hbjIwMDg9bm8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL21pcHMvY29uZmlndXJlLmFjIGIvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZS5hYworaW5kZXggYmNiZGFmZi4uYWQzMDU3ZiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvbWlwcy9jb25maWd1cmUuYWMKKysrKyBiL3N5c2RlcHMvbWlwcy9jb25maWd1cmUuYWMKK0BAIC02LDkgKzYsOSBAQCBkbmwgcG9zaXRpb24gaW5kZXBlbmRlbnQgd2F5LgorIGRubCBBQ19ERUZJTkUoUElfU1RBVElDX0FORF9ISURERU4pCisgCisgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGNvbXBpbGVyIGlzIHVzaW5nIHRoZSAyMDA4IE5hTiBlbmNvZGluZ10sCistICBsaWJjX2N2X21pcHNfbmFuMjAwOCwgW0FDX0VHUkVQX0NQUCh5ZXMsIFtkbmwKKysgIGxpYmNfY3ZfbWlwc19uYW4yMDA4LCBbQUNfRUdSRVBfQ1BQKHVzZV9taXBzX25hbjIwMDgsIFtkbmwKKyAjaWZkZWYgX19taXBzX25hbjIwMDgKKy15ZXMKKyt1c2VfbWlwc19uYW4yMDA4CisgI2VuZGlmXSwgbGliY19jdl9taXBzX25hbjIwMDg9eWVzLCBsaWJjX2N2X21pcHNfbmFuMjAwOD1ubyldKQorIGlmIHRlc3QgeCRsaWJjX2N2X21pcHNfbmFuMjAwOCA9IHh5ZXM7IHRoZW4KKyAgIEFDX0RFRklORShIQVZFX01JUFNfTkFOMjAwOCkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZSBiL3N5c2RlcHMvbmlvczIvY29uZmlndXJlCitpbmRleCAxNGM4YTNhLi5kZGUzODE0IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUKKysrKyBiL3N5c2RlcHMvbmlvczIvY29uZmlndXJlCitAQCAtMTQyLDEyICsxNDIsMTIgQEAgZWxzZQorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaWZkZWYgX19uaW9zMl9iaWdfZW5kaWFuX18KKy0gICAgICAgICAgICAgICAgICAgICAgeWVzCisrICAgICAgICAgICAgICAgICAgICAgIGlzX25pb3MyX2JlCisgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgCisgX0FDRU9GCisgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisrICAkRUdSRVAgImlzX25pb3MyX2JlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICAgbGliY19jdl9uaW9zMl9iZT15ZXMKKyBlbHNlCisgICBsaWJjX2N2X25pb3MyX2JlPW5vCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUuYWMgYi9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZS5hYworaW5kZXggZjA1ZjQzOC4uZGM4NjM5OSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvbmlvczIvY29uZmlndXJlLmFjCisrKysgYi9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZS5hYworQEAgLTQsOCArNCw4IEBAIEdMSUJDX1BST1ZJREVTIGRubCBTZWUgYWNsb2NhbC5tNCBpbiB0aGUgdG9wIGxldmVsIHNvdXJjZSBkaXJlY3RvcnkuCisgIyBOaW9zIElJIGJpZyBlbmRpYW4gaXMgbm90IHlldCBzdXBwb3J0ZWQuCisgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBiaWcgZW5kaWFuXSwKKyAgIFtsaWJjX2N2X25pb3MyX2JlXSwKKy0gIFtBQ19FR1JFUF9DUFAoeWVzLFsjaWZkZWYgX19uaW9zMl9iaWdfZW5kaWFuX18KKy0gICAgICAgICAgICAgICAgICAgICAgeWVzCisrICBbQUNfRUdSRVBfQ1BQKGlzX25pb3MyX2JlLFsjaWZkZWYgX19uaW9zMl9iaWdfZW5kaWFuX18KKysgICAgICAgICAgICAgICAgICAgICAgaXNfbmlvczJfYmUKKyAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgIF0sIGxpYmNfY3ZfbmlvczJfYmU9eWVzLCBsaWJjX2N2X25pb3MyX2JlPW5vKV0pCisgaWYgdGVzdCAkbGliY19jdl9uaW9zMl9iZSA9IHllczsgdGhlbgorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUKK2luZGV4IDgzZjhiMTMuLjJiNmNiZWUgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZQorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUKK0BAIC0zODcsMTEgKzM4NywxMSBAQCBlbHNlCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIGRubAorICNpZmRlZiBfX21pcHNfbmFuMjAwOAorLXllcworK3VzZV9taXBzX25hbjIwMDgKKyAjZW5kaWYKKyBfQUNFT0YKKyBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysgICRFR1JFUCAidXNlX21pcHNfbmFuMjAwOCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgIGxpYmNfY3ZfbWlwc19uYW4yMDA4PXllcworIGVsc2UKKyAgIGxpYmNfY3ZfbWlwc19uYW4yMDA4PW5vCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUuYWMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZS5hYworaW5kZXggNTAzOWVjOS4uMTAzNWY3NiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlLmFjCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZS5hYworQEAgLTk4LDkgKzk4LDkgQEAgQUNfQ09NUElMRV9JRkVMU0UoCisgTElCQ19DT05GSUdfVkFSKFttaXBzLW1vZGUtc3dpdGNoXSxbJHtsaWJjX21pcHNfbW9kZV9zd2l0Y2h9XSkKKyAKKyBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgY29tcGlsZXIgaXMgdXNpbmcgdGhlIDIwMDggTmFOIGVuY29kaW5nXSwKKy0gIGxpYmNfY3ZfbWlwc19uYW4yMDA4LCBbQUNfRUdSRVBfQ1BQKHllcywgW2RubAorKyAgbGliY19jdl9taXBzX25hbjIwMDgsIFtBQ19FR1JFUF9DUFAodXNlX21pcHNfbmFuMjAwOCwgW2RubAorICNpZmRlZiBfX21pcHNfbmFuMjAwOAorLXllcworK3VzZV9taXBzX25hbjIwMDgKKyAjZW5kaWZdLCBsaWJjX2N2X21pcHNfbmFuMjAwOD15ZXMsIGxpYmNfY3ZfbWlwc19uYW4yMDA4PW5vKV0pCisgCisgbGliY19taXBzX25hbj0KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUKK2luZGV4IDcwYmIxOGEuLmZmZDllM2UgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZQorQEAgLTE1NSwxMiArMTU1LDEyIEBAIGVsc2UKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2lmIF9DQUxMX0VMRiA9PSAyCistICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgICAgICAgICAgICAgICAgICAgICB1c2VfcHBjX2VsZnYyX2FiaQorICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorIAorIF9BQ0VPRgorIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorKyAgJEVHUkVQICJ1c2VfcHBjX2VsZnYyX2FiaSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgIGxpYmNfY3ZfcHBjNjRfZWxmdjJfYWJpPXllcworIGVsc2UKKyAgIGxpYmNfY3ZfcHBjNjRfZWxmdjJfYWJpPW5vCitAQCAtMTg4LDEyICsxODgsMTIgQEAgZWxzZQorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaWZkZWYgX0NBTExfRUxGCistICAgICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgICAgICAgICAgICAgICAgICAgICAgICBpc19kZWZfY2FsbF9lbGYKKyAgICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorIAorIF9BQ0VPRgorIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorKyAgJEVHUkVQICJpc19kZWZfY2FsbF9lbGYiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZj15ZXMKKyBlbHNlCisgICBsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZj1ubworZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZS5hYworaW5kZXggMDgyMjkxNS4uOWEzMmZkZCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZS5hYworKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlLmFjCitAQCAtNiw4ICs2LDggQEAgTElCQ19TTElCRElSX1JUTERESVIoW2xpYjY0XSwgW2xpYjY0XSkKKyAjIERlZmluZSBkZWZhdWx0LWFiaSBhY2NvcmRpbmcgdG8gY29tcGlsZXIgZmxhZ3MuCisgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGNvbXBpbGVyIGlzIHVzaW5nIHRoZSBQb3dlclBDNjQgRUxGdjIgQUJJXSwKKyAgIFtsaWJjX2N2X3BwYzY0X2VsZnYyX2FiaV0sCistICBbQUNfRUdSRVBfQ1BQKHllcyxbI2lmIF9DQUxMX0VMRiA9PSAyCistICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgW0FDX0VHUkVQX0NQUCh1c2VfcHBjX2VsZnYyX2FiaSxbI2lmIF9DQUxMX0VMRiA9PSAyCisrICAgICAgICAgICAgICAgICAgICAgIHVzZV9wcGNfZWxmdjJfYWJpCisgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICBdLCBsaWJjX2N2X3BwYzY0X2VsZnYyX2FiaT15ZXMsIGxpYmNfY3ZfcHBjNjRfZWxmdjJfYWJpPW5vKV0pCisgaWYgdGVzdCAkbGliY19jdl9wcGM2NF9lbGZ2Ml9hYmkgPSB5ZXM7IHRoZW4KK0BAIC0xOSw4ICsxOSw4IEBAIGVsc2UKKyAgICMgQ29tcGlsZXIgdGhhdCBkbyBub3Qgc3VwcG9ydCBFTEZ2MiBBQkkgZG9lcyBub3QgZGVmaW5lIF9DQUxMX0VMRgorICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGNvbXBpbGVyIGRlZmluZXMgX0NBTExfRUxGXSwKKyAgICAgW2xpYmNfY3ZfcHBjNjRfZGVmX2NhbGxfZWxmXSwKKy0gICAgW0FDX0VHUkVQX0NQUCh5ZXMsWyNpZmRlZiBfQ0FMTF9FTEYKKy0gICAgICAgICAgICAgICAgICAgICAgICAgeWVzCisrICAgIFtBQ19FR1JFUF9DUFAoaXNfZGVmX2NhbGxfZWxmLFsjaWZkZWYgX0NBTExfRUxGCisrICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2RlZl9jYWxsX2VsZgorICAgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgIF0sIGxpYmNfY3ZfcHBjNjRfZGVmX2NhbGxfZWxmPXllcywgbGliY19jdl9wcGM2NF9kZWZfY2FsbF9lbGY9bm8pXSkKKyAgIGlmIHRlc3QgJGxpYmNfY3ZfcHBjNjRfZGVmX2NhbGxfZWxmID0gbm87IHRoZW4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE3LXRpbWV6b25lLXJlLXdyaXR0ZW4tdHpzZWxlY3QtYXMtcG9zaXgtc2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTctdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2U4MjMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE3LXRpbWV6b25lLXJlLXdyaXR0ZW4tdHpzZWxlY3QtYXMtcG9zaXgtc2gucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSBjOTAzMDYxMDdmYmJlMjk3OTAxMjkxN2U4Nzc0N2NlNzhjODJhYjg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MzM6MDMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxNy8yN10gdGltZXpvbmU6IHJlLXdyaXR0ZW4gdHpzZWxlY3QgYXMgcG9zaXggc2gKKworVG8gYXZvaWQgdGhlIGJhc2ggZGVwZW5kZW5jeS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyB0aW1lem9uZS9NYWtlZmlsZSAgICAgfCAyICstCisgdGltZXpvbmUvdHpzZWxlY3Qua3NoIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGltZXpvbmUvTWFrZWZpbGUgYi90aW1lem9uZS9NYWtlZmlsZQoraW5kZXggMjRjOTNjNi4uODg2YjA2ZSAxMDA2NDQKKy0tLSBhL3RpbWV6b25lL01ha2VmaWxlCisrKysgYi90aW1lem9uZS9NYWtlZmlsZQorQEAgLTEyNiw3ICsxMjYsNyBAQCAkKHRlc3RkYXRhKS9YVCU6IHRlc3RkYXRhL1hUJQorIAljcCAkPCAkQAorIAorICQob2JqcGZ4KXR6c2VsZWN0OiB0enNlbGVjdC5rc2ggJChjb21tb24tb2JqcGZ4KWNvbmZpZy5tYWtlCistCXNlZCAtZSAnc3wvYmluL2Jhc2h8JChCQVNIKXwnIFwKKysJc2VkIC1lICdzfC9iaW4vYmFzaHwvYmluL3NofCcgXAorIAkgICAgLWUgJ3N8VFpESVI9W159XSp8VFpESVI9JCh6b25lZGlyKXwnIFwKKyAJICAgIC1lICcvVFpWRVJTSU9OPS9zfHNlZV9NYWtlZmlsZXwiJCh2ZXJzaW9uKSJ8JyBcCisgCSAgICAtZSAnL1BLR1ZFUlNJT049L3N8PS4qfD0iJChQS0dWRVJTSU9OKSJ8JyBcCitkaWZmIC0tZ2l0IGEvdGltZXpvbmUvdHpzZWxlY3Qua3NoIGIvdGltZXpvbmUvdHpzZWxlY3Qua3NoCitpbmRleCA5ZDcwNjkxLi4yNWY0NWE4IDEwMDc1NQorLS0tIGEvdGltZXpvbmUvdHpzZWxlY3Qua3NoCisrKysgYi90aW1lem9uZS90enNlbGVjdC5rc2gKK0BAIC0zNSw3ICszNSw3IEBAIFJFUE9SVF9CVUdTX1RPPXR6QGlhbmEub3JnCisgCisgIyBTcGVjaWZ5IGRlZmF1bHQgdmFsdWVzIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaWYgdGhleSBhcmUgdW5zZXQuCisgOiAke0FXSz1hd2t9CistOiAke1RaRElSPWBwd2RgfQorKzogJHtUWkRJUj0kKHB3ZCl9CisgCisgIyBDaGVjayBmb3IgYXdrIFBvc2l4IGNvbXBsaWFuY2UuCisgKCRBV0sgLXYgeD15ICdCRUdJTiB7IGV4aXQgMTIzIH0nKSA8L2Rldi9udWxsID4vZGV2L251bGwgMj4mMQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTgtZWdsaWJjLUNyb3NzLWJ1aWxkaW5nLWFuZC10ZXN0aW5nLWluc3RydWN0aW9ucy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxOC1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYWNiYzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTgtZWdsaWJjLUNyb3NzLWJ1aWxkaW5nLWFuZC10ZXN0aW5nLWluc3RydWN0aW9ucy5wYXRjaApAQCAtMCwwICsxLDYxOSBAQAorRnJvbSBlZmYwNDgwNzRhYzdiNTI1OGJiNjE1ZTVhNWIyMjFkYWExOWIxOGFlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NDI6NTggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxOC8yN10gZWdsaWJjOiBDcm9zcyBidWlsZGluZyBhbmQgdGVzdGluZyBpbnN0cnVjdGlvbnMKKworUG9ydGVkIGZyb20gZWdsaWJjCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIEdMSUJDLmNyb3NzLWJ1aWxkaW5nIHwgMzgzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIEdMSUJDLmNyb3NzLXRlc3RpbmcgIHwgMjA1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgNTg4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgR0xJQkMuY3Jvc3MtYnVpbGRpbmcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgR0xJQkMuY3Jvc3MtdGVzdGluZworCitkaWZmIC0tZ2l0IGEvR0xJQkMuY3Jvc3MtYnVpbGRpbmcgYi9HTElCQy5jcm9zcy1idWlsZGluZworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmU2ZTBkYTEKKy0tLSAvZGV2L251bGwKKysrKyBiL0dMSUJDLmNyb3NzLWJ1aWxkaW5nCitAQCAtMCwwICsxLDM4MyBAQAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIG1vZGU6IHRleHQgLSotCisrCisrICAgICAgICAgICAgICAgICAgICAgICAgQ3Jvc3MtQ29tcGlsaW5nIEdMSUJDCisrICAgICAgICAgICAgICAgICAgSmltIEJsYW5keSA8amltYkBjb2Rlc291cmNlcnkuY29tPgorKworKworK0ludHJvZHVjdGlvbgorKworK01vc3QgR05VIHRvb2xzIGhhdmUgYSBzaW1wbGUgYnVpbGQgcHJvY2VkdXJlOiB5b3UgcnVuIHRoZWlyCisrJ2NvbmZpZ3VyZScgc2NyaXB0LCBhbmQgdGhlbiB5b3UgcnVuICdtYWtlJy4gIFVuZm9ydHVuYXRlbHksIHRoZQorK3Byb2Nlc3Mgb2YgY3Jvc3MtY29tcGlsaW5nIHRoZSBHTlUgQyBsaWJyYXJ5IGlzIHF1aXRlIGEgYml0IG1vcmUKKytpbnZvbHZlZDoKKysKKysxKSBCdWlsZCBhIGNyb3NzLWNvbXBpbGVyLCB3aXRoIGNlcnRhaW4gZmFjaWxpdGllcyBkaXNhYmxlZC4KKysKKysyKSBDb25maWd1cmUgdGhlIEMgbGlicmFyeSB1c2luZyB0aGUgY29tcGlsZXIgeW91IGJ1aWx0IGluIHN0ZXAgMSkuCisrICAgQnVpbGQgYSBmZXcgb2YgdGhlIEMgcnVuLXRpbWUgb2JqZWN0IGZpbGVzLCBidXQgbm90IHRoZSByZXN0IG9mIHRoZQorKyAgIGxpYnJhcnkuICBJbnN0YWxsIHRoZSBsaWJyYXJ5J3MgaGVhZGVyIGZpbGVzIGFuZCB0aGUgcnVuLXRpbWUKKysgICBvYmplY3QgZmlsZXMsIGFuZCBjcmVhdGUgYSBkdW1teSBsaWJjLnNvLgorKworKzMpIEJ1aWxkIGEgc2Vjb25kIGNyb3NzLWNvbXBpbGVyLCB1c2luZyB0aGUgaGVhZGVyIGZpbGVzIGFuZCBvYmplY3QKKysgICBmaWxlcyB5b3UgaW5zdGFsbGVkIGluIHN0ZXAgMi4KKysKKys0KSBDb25maWd1cmUsIGJ1aWxkLCBhbmQgaW5zdGFsbCBhIGZyZXNoIEMgbGlicmFyeSwgdXNpbmcgdGhlIGNvbXBpbGVyCisrICAgYnVpbHQgaW4gc3RlcCAzLgorKworKzUpIEJ1aWxkIGEgdGhpcmQgY3Jvc3MtY29tcGlsZXIsIGJhc2VkIG9uIHRoZSBDIGxpYnJhcnkgYnVpbHQgaW4gc3RlcCA0LgorKworK1RoZSByZWFzb24gZm9yIHRoaXMgY29tcGxleGl0eSBpcyB0aGF0LCBhbHRob3VnaCBHQ0MgYW5kIHRoZSBHTlUgQworK2xpYnJhcnkgYXJlIGRpc3RyaWJ1dGVkIHNlcGFyYXRlbHksIHRoZXkgYXJlIG5vdCBhY3R1YWxseSBpbmRlcGVuZGVudAorK29mIGVhY2ggb3RoZXI6IEdDQyByZXF1aXJlcyB0aGUgQyBsaWJyYXJ5J3MgaGVhZGVycyBhbmQgc29tZSBvYmplY3QKKytmaWxlcyB0byBjb21waWxlIGl0cyBvd24gbGlicmFyaWVzLCB3aGlsZSB0aGUgQyBsaWJyYXJ5IGRlcGVuZHMgb24KKytHQ0MncyBsaWJyYXJpZXMuICBHTElCQyBpbmNsdWRlcyBmZWF0dXJlcyBhbmQgYnVnIGZpeGVzIHRvIHRoZSBzdG9jaworK0dOVSBDIGxpYnJhcnkgdGhhdCBzaW1wbGlmeSB0aGlzIHByb2Nlc3MsIGJ1dCB0aGUgZnVuZGFtZW50YWwKKytpbnRlcmRlcGVuZGVuY3kgc3RhbmRzLgorKworK0luIHRoaXMgZG9jdW1lbnQsIHdlIGV4cGxhaW4gaG93IHRvIGNyb3NzLWNvbXBpbGUgYW4gR0xJQkMvR0NDIHBhaXIKKytmcm9tIHNvdXJjZS4gIE91ciBpbnRlbmRlZCBhdWRpZW5jZSBpcyBkZXZlbG9wZXJzIHdobyBhcmUgYWxyZWFkeQorK2ZhbWlsaWFyIHdpdGggdGhlIEdOVSB0b29sY2hhaW4gYW5kIGNvbWZvcnRhYmxlIHdvcmtpbmcgd2l0aAorK2Nyb3NzLWRldmVsb3BtZW50IHRvb2xzLiAgV2hpbGUgd2UgZG8gcHJlc2VudCBhIHdvcmtlZCBleGFtcGxlIHRvCisrYWNjb21wYW55IHRoZSBleHBsYW5hdGlvbiwgZm9yIGNsYXJpdHkncyBzYWtlIHdlIGRvIG5vdCBjb3ZlciBtYW55IG9mCisrdGhlIG9wdGlvbnMgYXZhaWxhYmxlIHRvIGNyb3NzLXRvb2xjaGFpbiB1c2Vycy4KKysKKysKKytQcmVwYXJhdGlvbgorKworK0dMSUJDIHJlcXVpcmVzIHJlY2VudCB2ZXJzaW9ucyBvZiB0aGUgR05VIGJpbnV0aWxzLCBHQ0MsIGFuZCB0aGUKKytMaW51eCBrZXJuZWwuICBUaGUgd2ViIHBhZ2UgPGh0dHA6Ly93d3cuZWdsaWJjLm9yZy9wcmVyZXF1aXNpdGVzPgorK2RvY3VtZW50cyB0aGUgY3VycmVudCByZXF1aXJlbWVudHMsIGFuZCBsaXN0cyBwYXRjaGVzIG5lZWRlZCBmb3IKKytjZXJ0YWluIHRhcmdldCBhcmNoaXRlY3R1cmVzLiAgQXMgb2YgdGhpcyB3cml0aW5nLCB0aGVzZSBidWlsZAorK2luc3RydWN0aW9ucyBoYXZlIGJlZW4gdGVzdGVkIHdpdGggYmludXRpbHMgMi4yMi41MSwgR0NDIDQuNi4yLAorK2FuZCBMaW51eCAzLjEuCisrCisrRmlyc3QsIGxldCdzIHNldCBzb21lIHZhcmlhYmxlcywgdG8gc2ltcGxpZnkgbGF0ZXIgY29tbWFuZHMuICBXZSdsbAorK2J1aWxkIEdMSUJDIGFuZCBHQ0MgZm9yIGFuIEFSTSB0YXJnZXQsIGtub3duIHRvIHRoZSBMaW51eCBrZXJuZWwKKythcyAnYXJtJywgYW5kIHdlJ2xsIGRvIHRoZSBidWlsZCBvbiBhbiBJbnRlbCB4ODZfNjQgTGludXggYm94OgorKworKyAgICAkIGJ1aWxkPXg4Nl82NC1wYy1saW51eC1nbnUKKysgICAgJCBob3N0PSRidWlsZAorKyAgICAkIHRhcmdldD1hcm0tbm9uZS1saW51eC1nbnVlYWJpCisrICAgICQgbGludXhfYXJjaD1hcm0KKysKKytXZSdyZSB1c2luZyB0aGUgYWZvcmVtZW50aW9uZWQgdmVyc2lvbnMgb2YgQmludXRpbHMsIEdDQywgYW5kIExpbnV4OgorKworKyAgICAkIGJpbnV0aWxzdj1iaW51dGlscy0yLjIyLjUxCisrICAgICQgZ2Njdj1nY2MtNC42LjIKKysgICAgJCBsaW51eHY9bGludXgtMy4xCisrCisrV2UncmUgY2Fycnlpbmcgb3V0IHRoZSBlbnRpcmUgcHJvY2VzcyB1bmRlciAnfi9jcm9zcy1idWlsZCcsIHdoaWNoCisrY29udGFpbnMgdW5wYWNrZWQgc291cmNlIHRyZWVzIGZvciBiaW51dGlscywgZ2NjLCBhbmQgbGludXgga2VybmVsLAorK2Fsb25nIHdpdGggR0xJQkMgc3ZuIHRydW5rICh3aGljaCBjYW4gYmUgY2hlY2tlZC1vdXQgd2l0aAorKydzdm4gY28gaHR0cDovL3d3dy5lZ2xpYmMub3JnL3N2bi90cnVuayBlZ2xpYmMnKToKKysKKysgICAgJCB0b3A9JEhPTUUvY3Jvc3MtYnVpbGQvJHRhcmdldAorKyAgICAkIHNyYz0kSE9NRS9jcm9zcy1idWlsZC9zcmMKKysgICAgJCBscyAkc3JjCisrICAgIGJpbnV0aWxzLTIuMjIuNTEgIGdsaWJjICBnY2MtNC42LjIgIGxpbnV4LTMuMQorKworK1dlJ3JlIGdvaW5nIHRvIHBsYWNlIG91ciBidWlsZCBkaXJlY3RvcmllcyBpbiBhIHN1YmRpcmVjdG9yeSAnb2JqJywKKyt3ZSdsbCBpbnN0YWxsIHRoZSBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gaW4gJ3Rvb2xzJywgYW5kIHdlJ2xsCisrcGxhY2Ugb3VyIHN5c3Jvb3QgKGNvbnRhaW5pbmcgZmlsZXMgdG8gYmUgaW5zdGFsbGVkIG9uIHRoZSB0YXJnZXQKKytzeXN0ZW0pIGluICdzeXNyb290JzoKKysKKysgICAgJCBvYmo9JHRvcC9vYmoKKysgICAgJCB0b29scz0kdG9wL3Rvb2xzCisrICAgICQgc3lzcm9vdD0kdG9wL3N5c3Jvb3QKKysKKysKKytCaW51dGlscworKworK0NvbmZpZ3VyaW5nIGFuZCBidWlsZGluZyBiaW51dGlscyBmb3IgdGhlIHRhcmdldCBpcyBzdHJhaWdodGZvcndhcmQ6CisrCisrICAgICQgbWtkaXIgLXAgJG9iai9iaW51dGlscworKyAgICAkIGNkICRvYmovYmludXRpbHMKKysgICAgJCAkc3JjLyRiaW51dGlsc3YvY29uZmlndXJlIFwKKysgICAgPiAgICAgLS10YXJnZXQ9JHRhcmdldCBcCisrICAgID4gICAgIC0tcHJlZml4PSR0b29scyBcCisrICAgID4gICAgIC0td2l0aC1zeXNyb290PSRzeXNyb290CisrICAgICQgbWFrZQorKyAgICAkIG1ha2UgaW5zdGFsbAorKworKworK1RoZSBGaXJzdCBHQ0MKKysKKytGb3Igb3VyIHdvcmssIHdlIG5lZWQgYSBjcm9zcy1jb21waWxlciB0YXJnZXRpbmcgYW4gQVJNIExpbnV4Cisrc3lzdGVtLiAgSG93ZXZlciwgdGhhdCBjb25maWd1cmF0aW9uIGluY2x1ZGVzIHRoZSBzaGFyZWQgbGlicmFyeQorKydsaWJnY2Nfcy5zbycsIHdoaWNoIGlzIGNvbXBpbGVkIGFnYWluc3QgdGhlIEdMSUJDIGhlYWRlcnMgKHdoaWNoIHdlCisraGF2ZW4ndCBpbnN0YWxsZWQgeWV0KSBhbmQgbGlua2VkIGFnYWluc3QgJ2xpYmMuc28nICh3aGljaCB3ZSBoYXZlbid0CisrYnVpbHQgeWV0KS4KKysKKytGb3J0dW5hdGVseSwgdGhlcmUgYXJlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgR0NDIHdoaWNoIHRlbGwgaXQgbm90CisrdG8gYnVpbGQgJ2xpYmdjY19zLnNvJy4gIFRoZSAnLS13aXRob3V0LWhlYWRlcnMnIG9wdGlvbiBpcyBzdXBwb3NlZCB0bworK3Rha2UgY2FyZSBvZiB0aGlzLCBidXQgaXRzIGltcGxlbWVudGF0aW9uIGlzIGluY29tcGxldGUsIHNvIHlvdSBtdXN0CisrYWxzbyBjb25maWd1cmUgd2l0aCB0aGUgJy0td2l0aC1uZXdsaWInIG9wdGlvbi4gIFdoaWxlICctLXdpdGgtbmV3bGliJworK2FwcGVhcnMgdG8gbWVhbiAiVXNlIHRoZSBOZXdsaWIgQyBsaWJyYXJ5IiwgaXRzIGVmZmVjdCBpcyB0byB0ZWxsIHRoZQorK0dDQyBidWlsZCBtYWNoaW5lcnksICJEb24ndCBhc3N1bWUgdGhlcmUgaXMgYSBDIGxpYnJhcnkgYXZhaWxhYmxlLiIKKysKKytXZSBhbHNvIG5lZWQgdG8gZGlzYWJsZSBzb21lIG9mIHRoZSBsaWJyYXJpZXMgdGhhdCB3b3VsZCBub3JtYWxseSBiZQorK2J1aWx0IGFsb25nIHdpdGggR0NDLCBhbmQgc3BlY2lmeSB0aGF0IG9ubHkgdGhlIGNvbXBpbGVyIGZvciB0aGUgQworK2xhbmd1YWdlIGlzIG5lZWRlZC4KKysKKytTbywgd2UgY3JlYXRlIGEgYnVpbGQgZGlyZWN0b3J5LCBjb25maWd1cmUsIG1ha2UsIGFuZCBpbnN0YWxsLgorKworKyAgICAkIG1rZGlyIC1wICRvYmovZ2NjMQorKyAgICAkIGNkICRvYmovZ2NjMQorKyAgICAkICRzcmMvJGdjY3YvY29uZmlndXJlIFwKKysgICAgPiAgICAgLS10YXJnZXQ9JHRhcmdldCBcCisrICAgID4gICAgIC0tcHJlZml4PSR0b29scyBcCisrICAgID4gICAgIC0td2l0aG91dC1oZWFkZXJzIC0td2l0aC1uZXdsaWIgXAorKyAgICA+ICAgICAtLWRpc2FibGUtc2hhcmVkIC0tZGlzYWJsZS10aHJlYWRzIC0tZGlzYWJsZS1saWJzc3AgXAorKyAgICA+ICAgICAtLWRpc2FibGUtbGliZ29tcCAtLWRpc2FibGUtbGlibXVkZmxhcCAtLWRpc2FibGUtbGlicXVhZG1hdGggXAorKyAgICA+ICAgICAtLWRpc2FibGUtZGVjaW1hbC1mbG9hdCAtLWRpc2FibGUtbGliZmZpIFwKKysgICAgPiAgICAgLS1lbmFibGUtbGFuZ3VhZ2VzPWMKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZQorKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIGluc3RhbGwKKysKKysKKytMaW51eCBLZXJuZWwgSGVhZGVycworKworK1RvIGNvbmZpZ3VyZSBHTElCQywgd2UgYWxzbyBuZWVkIExpbnV4IGtlcm5lbCBoZWFkZXJzIGluIHBsYWNlLgorK0ZvcnR1bmF0ZWx5LCB0aGUgTGludXggbWFrZWZpbGVzIGhhdmUgYSB0YXJnZXQgdGhhdCBpbnN0YWxscyB0aGVtIGZvcgorK3VzLiAgU2luY2UgdGhlIHByb2Nlc3MgZG9lcyBtb2RpZnkgdGhlIHNvdXJjZSB0cmVlIGEgYml0LCB3ZSBtYWtlIGEKKytjb3B5IGZpcnN0OgorKworKyAgICAkIGNwIC1yICRzcmMvJGxpbnV4diAkb2JqL2xpbnV4CisrICAgICQgY2QgJG9iai9saW51eAorKworK05vdyB3ZSdyZSByZWFkeSB0byBpbnN0YWxsIHRoZSBoZWFkZXJzIGludG8gdGhlIHN5c3Jvb3Q6CisrCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIFwKKysgICAgPiBtYWtlIGhlYWRlcnNfaW5zdGFsbCBcCisrICAgID4gICAgICBBUkNIPSRsaW51eF9hcmNoIENST1NTX0NPTVBJTEU9JHRhcmdldC0gXAorKyAgICA+ICAgICAgSU5TVEFMTF9IRFJfUEFUSD0kc3lzcm9vdC91c3IKKysKKysKKytHTElCQyBIZWFkZXJzIGFuZCBQcmVsaW1pbmFyeSBPYmplY3RzCisrCisrVXNpbmcgdGhlIGNyb3NzLWNvbXBpbGVyIHdlJ3ZlIGp1c3QgYnVpbHQsIHdlIGNhbiBub3cgY29uZmlndXJlIEdMSUJDCisrd2VsbCBlbm91Z2ggdG8gaW5zdGFsbCB0aGUgaGVhZGVycyBhbmQgYnVpbGQgdGhlIG9iamVjdCBmaWxlcyB0aGF0IHRoZQorK2Z1bGwgY3Jvc3MtY29tcGlsZXIgd2lsbCBuZWVkOgorKworKyAgICAkIG1rZGlyIC1wICRvYmovZ2xpYmMtaGVhZGVycworKyAgICAkIGNkICRvYmovZ2xpYmMtaGVhZGVycworKyAgICAkIEJVSUxEX0NDPWdjYyBcCisrICAgID4gQ0M9JHRvb2xzL2Jpbi8kdGFyZ2V0LWdjYyBcCisrICAgID4gQ1hYPSR0b29scy9iaW4vJHRhcmdldC1nKysgXAorKyAgICA+IEFSPSR0b29scy9iaW4vJHRhcmdldC1hciBcCisrICAgID4gUkFOTElCPSR0b29scy9iaW4vJHRhcmdldC1yYW5saWIgXAorKyAgICA+ICRzcmMvZ2xpYmMvbGliYy9jb25maWd1cmUgXAorKyAgICA+ICAgICAtLXByZWZpeD0vdXNyIFwKKysgICAgPiAgICAgLS13aXRoLWhlYWRlcnM9JHN5c3Jvb3QvdXNyL2luY2x1ZGUgXAorKyAgICA+ICAgICAtLWJ1aWxkPSRidWlsZCBcCisrICAgID4gICAgIC0taG9zdD0kdGFyZ2V0IFwKKysgICAgPiAgICAgLS1kaXNhYmxlLXByb2ZpbGUgLS13aXRob3V0LWdkIC0td2l0aG91dC1jdnMgXAorKyAgICA+ICAgICAtLWVuYWJsZS1hZGQtb25zPW5wdGwsbGliaWRuLC4uL3BvcnRzCisrCisrVGhlIG9wdGlvbiAnLS1wcmVmaXg9L3VzcicgbWF5IGxvb2sgc3RyYW5nZSwgYnV0IHlvdSBzaG91bGQgbmV2ZXIKKytjb25maWd1cmUgR0xJQkMgd2l0aCBhIHByZWZpeCBvdGhlciB0aGFuICcvdXNyJzogaW4gdmFyaW91cyBwbGFjZXMsCisrR0xJQkMncyBidWlsZCBzeXN0ZW0gY2hlY2tzIHdoZXRoZXIgdGhlIHByZWZpeCBpcyAnL3VzcicsIGFuZCBkb2VzCisrc3BlY2lhbCBoYW5kbGluZyBvbmx5IGlmIHRoYXQgaXMgdGhlIGNhc2UuICBVbmxlc3MgeW91IHVzZSB0aGlzCisrcHJlZml4LCB5b3Ugd2lsbCBnZXQgYSBzeXNyb290IHRoYXQgZG9lcyBub3QgdXNlIHRoZSBzdGFuZGFyZCBMaW51eAorK2RpcmVjdG9yeSBsYXlvdXRzIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBhIGJhc2lzIGZvciB0aGUgcm9vdAorK2ZpbGVzeXN0ZW0gb24geW91ciB0YXJnZXQgc3lzdGVtIGNvbXBhdGlibHkgd2l0aCBub3JtYWwgR0xJQkMKKytpbnN0YWxsYXRpb25zLgorKworK1RoZSAnLS13aXRoLWhlYWRlcnMnIG9wdGlvbiB0ZWxscyBHTElCQyB3aGVyZSB0aGUgTGludXggaGVhZGVycyBoYXZlCisrYmVlbiBpbnN0YWxsZWQuCisrCisrVGhlICctLWVuYWJsZS1hZGQtb25zPW5wdGwsbGliaWRuLC4uL3BvcnRzJyBvcHRpb24gdGVsbHMgR0xJQkMgdG8gbG9vaworK2ZvciB0aGUgbGlzdGVkIGdsaWJjIGFkZC1vbnMuIE1vc3Qgbm90YWJseSB0aGUgcG9ydHMgYWRkLW9uIChsb2NhdGVkCisranVzdCBhYm92ZSB0aGUgbGliYyBzb3VyY2VzIGluIHRoZSBHTElCQyBzdm4gdHJlZSkgaXMgcmVxdWlyZWQgdG8KKytzdXBwb3J0IEFSTSB0YXJnZXRzLgorKworK1dlIGNhbiBub3cgdXNlIHRoZSAnaW5zdGFsbC1oZWFkZXJzJyBtYWtlZmlsZSB0YXJnZXQgdG8gaW5zdGFsbCB0aGUKKytoZWFkZXJzOgorKworKyAgICAkIG1ha2UgaW5zdGFsbC1oZWFkZXJzIGluc3RhbGxfcm9vdD0kc3lzcm9vdCBcCisrICAgID4gICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbC1ib290c3RyYXAtaGVhZGVycz15ZXMKKysKKytUaGUgJ2luc3RhbGxfcm9vdCcgdmFyaWFibGUgaW5kaWNhdGVzIHdoZXJlIHRoZSBmaWxlcyBzaG91bGQgYWN0dWFsbHkKKytiZSBpbnN0YWxsZWQ7IGl0cyB2YWx1ZSBpcyB0cmVhdGVkIGFzIHRoZSBwYXJlbnQgb2YgdGhlICctLXByZWZpeCcKKytkaXJlY3Rvcnkgd2UgcGFzc2VkIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0LCBzbyB0aGUgaGVhZGVycyB3aWxsIGdvIGluCisrJyRzeXNyb290L3Vzci9pbmNsdWRlJy4gIFRoZSAnaW5zdGFsbC1ib290c3RyYXAtaGVhZGVycycgdmFyaWFibGUKKytyZXF1ZXN0cyBzcGVjaWFsIGhhbmRsaW5nIGZvciBjZXJ0YWluIHRyaWNreSBoZWFkZXIgZmlsZXMuCisrCisrTmV4dCwgdGhlcmUgYXJlIGEgZmV3IG9iamVjdCBmaWxlcyBuZWVkZWQgdG8gbGluayBzaGFyZWQgbGlicmFyaWVzLAorK3doaWNoIHdlIGJ1aWxkIGFuZCBpbnN0YWxsIGJ5IGhhbmQ6CisrCisrICAgICQgbWtkaXIgLXAgJHN5c3Jvb3QvdXNyL2xpYgorKyAgICAkIG1ha2UgY3N1L3N1YmRpcl9saWIKKysgICAgJCBjcCBjc3UvY3J0MS5vIGNzdS9jcnRpLm8gY3N1L2NydG4ubyAkc3lzcm9vdC91c3IvbGliCisrCisrRmluYWxseSwgJ2xpYmdjY19zLnNvJyByZXF1aXJlcyBhICdsaWJjLnNvJyB0byBsaW5rIGFnYWluc3QuICBIb3dldmVyLAorK3NpbmNlIHdlIHdpbGwgbmV2ZXIgYWN0dWFsbHkgZXhlY3V0ZSBpdHMgY29kZSwgaXQgZG9lc24ndCBtYXR0ZXIgd2hhdAorK2l0IGNvbnRhaW5zLiAgU28sIHRyZWF0aW5nICcvZGV2L251bGwnIGFzIGEgQyBzb3VyY2UgZmlsZSwgd2UgcHJvZHVjZQorK2EgZHVtbXkgJ2xpYmMuc28nIGluIG9uZSBzdGVwOgorKworKyAgICAkICR0b29scy9iaW4vJHRhcmdldC1nY2MgLW5vc3RkbGliIC1ub3N0YXJ0ZmlsZXMgLXNoYXJlZCAteCBjIC9kZXYvbnVsbCBcCisrICAgID4gICAgICAgICAgICAgICAgICAgICAgICAtbyAkc3lzcm9vdC91c3IvbGliL2xpYmMuc28KKysKKysKKytUaGUgU2Vjb25kIEdDQworKworK1dpdGggdGhlIEdMSUJDIGhlYWRlcnMgYW5kIHNlbGVjdGVkIG9iamVjdCBmaWxlcyBpbnN0YWxsZWQsIHdlIGNhbgorK25vdyBidWlsZCBhIEdDQyB0aGF0IGlzIGNhcGFibGUgb2YgY29tcGlsaW5nIEdMSUJDLiAgV2UgY29uZmlndXJlLAorK2J1aWxkLCBhbmQgaW5zdGFsbCB0aGUgc2Vjb25kIEdDQywgYWdhaW4gYnVpbGRpbmcgb25seSB0aGUgQyBjb21waWxlciwKKythbmQgYXZvaWRpbmcgbGlicmFyaWVzIHdlIHdvbid0IHVzZToKKysKKysgICAgJCBta2RpciAtcCAkb2JqL2djYzIKKysgICAgJCBjZCAkb2JqL2djYzIKKysgICAgJCAkc3JjLyRnY2N2L2NvbmZpZ3VyZSBcCisrICAgID4gICAgIC0tdGFyZ2V0PSR0YXJnZXQgXAorKyAgICA+ICAgICAtLXByZWZpeD0kdG9vbHMgXAorKyAgICA+ICAgICAtLXdpdGgtc3lzcm9vdD0kc3lzcm9vdCBcCisrICAgID4gICAgIC0tZGlzYWJsZS1saWJzc3AgLS1kaXNhYmxlLWxpYmdvbXAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorKyAgICA+ICAgICAtLWRpc2FibGUtbGliZmZpIC0tZGlzYWJsZS1saWJxdWFkbWF0aCBcCisrICAgID4gICAgIC0tZW5hYmxlLWxhbmd1YWdlcz1jCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZSBpbnN0YWxsCisrCisrCisrR0xJQkMsIENvbXBsZXRlCisrCisrV2l0aCB0aGUgc2Vjb25kIGNvbXBpbGVyIGJ1aWx0IGFuZCBpbnN0YWxsZWQsIHdlJ3JlIG5vdyByZWFkeSBmb3IgdGhlCisrZnVsbCBHTElCQyBidWlsZDoKKysKKysgICAgJCBta2RpciAtcCAkb2JqL2dsaWJjCisrICAgICQgY2QgJG9iai9nbGliYworKyAgICAkIEJVSUxEX0NDPWdjYyBcCisrICAgID4gQ0M9JHRvb2xzL2Jpbi8kdGFyZ2V0LWdjYyBcCisrICAgID4gQ1hYPSR0b29scy9iaW4vJHRhcmdldC1nKysgXAorKyAgICA+IEFSPSR0b29scy9iaW4vJHRhcmdldC1hciBcCisrICAgID4gUkFOTElCPSR0b29scy9iaW4vJHRhcmdldC1yYW5saWIgXAorKyAgICA+ICRzcmMvZ2xpYmMvbGliYy9jb25maWd1cmUgXAorKyAgICA+ICAgICAtLXByZWZpeD0vdXNyIFwKKysgICAgPiAgICAgLS13aXRoLWhlYWRlcnM9JHN5c3Jvb3QvdXNyL2luY2x1ZGUgXAorKyAgICA+ICAgICAtLXdpdGgta2NvbmZpZz0kb2JqL2xpbnV4L3NjcmlwdHMva2NvbmZpZyBcCisrICAgID4gICAgIC0tYnVpbGQ9JGJ1aWxkIFwKKysgICAgPiAgICAgLS1ob3N0PSR0YXJnZXQgXAorKyAgICA+ICAgICAtLWRpc2FibGUtcHJvZmlsZSAtLXdpdGhvdXQtZ2QgLS13aXRob3V0LWN2cyBcCisrICAgID4gICAgIC0tZW5hYmxlLWFkZC1vbnM9bnB0bCxsaWJpZG4sLi4vcG9ydHMKKysKKytOb3RlIHRoZSBhZGRpdGlvbmFsICctLXdpdGgta2NvbmZpZycgb3B0aW9uLiBUaGlzIHRlbGxzIEdMSUJDIHdoZXJlIHRvCisrZmluZCB0aGUgaG9zdCBjb25maWcgdG9vbHMgdXNlZCBieSB0aGUga2VybmVsICdtYWtlIGNvbmZpZycgYW5kICdtYWtlCisrbWVudWNvbmZpZycuICBUaGVzZSB0b29scyBjYW4gYmUgcmUtdXNlZCBieSBHTElCQyBmb3IgaXRzIG93biAnbWFrZQorKypjb25maWcnIHN1cHBvcnQsIHdoaWNoIHdpbGwgY3JlYXRlICdvcHRpb24tZ3JvdXBzLmNvbmZpZycgZm9yIHlvdS4KKytCdXQgZmlyc3QgbWFrZSBzdXJlIHRob3NlIHRvb2xzIGhhdmUgYmVlbiBidWlsdCBieSBydW5uaW5nIHNvbWUKKytkdW1teSAnbWFrZSAqY29uZmlnJyBjYWxscyBpbiB0aGUga2VybmVsIGRpcmVjdG9yeToKKysKKysgICAgJCBjZCAkb2JqL2xpbnV4CisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UgY29uZmlnIFwKKysgICAgPiAgICAgIEFSQ0g9JGxpbnV4X2FyY2ggQ1JPU1NfQ09NUElMRT0kdGFyZ2V0LSBcCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UgbWVudWNvbmZpZyBcCisrICAgID4gICAgICBBUkNIPSRsaW51eF9hcmNoIENST1NTX0NPTVBJTEU9JHRhcmdldC0gXAorKworK05vdyB3ZSBjYW4gY29uZmlndXJlIGFuZCBidWlsZCB0aGUgZnVsbCBHTElCQzoKKysKKysgICAgJCBjZCAkb2JqL2dsaWJjCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UgZGVmY29uZmlnCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UgbWVudWNvbmZpZworKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UgaW5zdGFsbCBpbnN0YWxsX3Jvb3Q9JHN5c3Jvb3QKKysKKytBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGEgY29tcGxldGUgR0xJQkMgaW5zdGFsbGF0aW9uIGluICckc3lzcm9vdCcsCisrd2l0aCBoZWFkZXIgZmlsZXMsIGxpYnJhcnkgZmlsZXMsIGFuZCBtb3N0IG9mIHRoZSBDIHJ1bnRpbWUgc3RhcnR1cAorK2ZpbGVzIGluIHBsYWNlLgorKworKworK1RoZSBUaGlyZCBHQ0MKKysKKytGaW5hbGx5LCB3ZSByZWNvbXBpbGUgR0NDIGFnYWluc3QgdGhpcyBmdWxsIGluc3RhbGxhdGlvbiwgZW5hYmxpbmcKKyt3aGF0ZXZlciBsYW5ndWFnZXMgYW5kIGxpYnJhcmllcyB3ZSB3b3VsZCBsaWtlIHRvIHVzZToKKysKKysgICAgJCBta2RpciAtcCAkb2JqL2djYzMKKysgICAgJCBjZCAkb2JqL2djYzMKKysgICAgJCAkc3JjLyRnY2N2L2NvbmZpZ3VyZSBcCisrICAgID4gICAgIC0tdGFyZ2V0PSR0YXJnZXQgXAorKyAgICA+ICAgICAtLXByZWZpeD0kdG9vbHMgXAorKyAgICA+ICAgICAtLXdpdGgtc3lzcm9vdD0kc3lzcm9vdCBcCisrICAgID4gICAgIC0tZW5hYmxlLV9fY3hhX2F0ZXhpdCBcCisrICAgID4gICAgIC0tZGlzYWJsZS1saWJzc3AgLS1kaXNhYmxlLWxpYmdvbXAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorKyAgICA+ICAgICAtLWVuYWJsZS1sYW5ndWFnZXM9YyxjKysKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZQorKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIGluc3RhbGwKKysKKytUaGUgJy0tZW5hYmxlLV9fY3hhX2F0ZXhpdCcgb3B0aW9uIHRlbGxzIEdDQyB3aGF0IHNvcnQgb2YgQysrCisrZGVzdHJ1Y3RvciBzdXBwb3J0IHRvIGV4cGVjdCBmcm9tIHRoZSBDIGxpYnJhcnk7IGl0J3MgcmVxdWlyZWQgd2l0aAorK0dMSUJDLgorKworK0FuZCBzaW5jZSBHQ0MncyBpbnN0YWxsYXRpb24gcHJvY2VzcyBpc24ndCBkZXNpZ25lZCB0byBoZWxwIGNvbnN0cnVjdAorK3N5c3Jvb3QgdHJlZXMsIHdlIG11c3QgbWFudWFsbHkgY29weSBjZXJ0YWluIGxpYnJhcmllcyBpbnRvIHBsYWNlIGluCisrdGhlIHN5c3Jvb3QuCisrCisrICAgICQgY3AgLWQgJHRvb2xzLyR0YXJnZXQvbGliL2xpYmdjY19zLnNvKiAkc3lzcm9vdC9saWIKKysgICAgJCBjcCAtZCAkdG9vbHMvJHRhcmdldC9saWIvbGlic3RkYysrLnNvKiAkc3lzcm9vdC91c3IvbGliCisrCisrCisrVHJ5aW5nIFRoaW5ncyBPdXQKKysKKytBdCB0aGlzIHBvaW50LCAnJHRvb2xzJyBjb250YWlucyBhIGNyb3NzIHRvb2xjaGFpbiByZWFkeSB0byB1c2UKKyt0aGUgR0xJQkMgaW5zdGFsbGF0aW9uIGluICckc3lzcm9vdCc6CisrCisrICAgICQgY2F0ID4gaGVsbG8uYyA8PEVPRgorKyAgICA+ICNpbmNsdWRlIDxzdGRpby5oPgorKyAgICA+IGludAorKyAgICA+IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKysgICAgPiB7CisrICAgID4gICBwdXRzICgiSGVsbG8sIHdvcmxkISIpOworKyAgICA+ICAgcmV0dXJuIDA7CisrICAgID4gfQorKyAgICA+IEVPRgorKyAgICAkICR0b29scy9iaW4vJHRhcmdldC1nY2MgLVdhbGwgaGVsbG8uYyAtbyBoZWxsbworKyAgICAkIGNhdCA+IGMrKy1oZWxsby5jYyA8PEVPRgorKyAgICA+ICNpbmNsdWRlIDxpb3N0cmVhbT4KKysgICAgPiBpbnQKKysgICAgPiBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrICAgID4geworKyAgICA+ICAgc3RkOjpjb3V0IDw8ICJIZWxsbywgQysrIHdvcmxkISIgPDwgc3RkOjplbmRsOworKyAgICA+ICAgcmV0dXJuIDA7CisrICAgID4gfQorKyAgICA+IEVPRgorKyAgICAkICR0b29scy9iaW4vJHRhcmdldC1nKysgLVdhbGwgYysrLWhlbGxvLmNjIC1vIGMrKy1oZWxsbworKworKworK1dlIGNhbiB1c2UgJ3JlYWRlbGYnIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGFyZSBpbmRlZWQgZXhlY3V0YWJsZXMgZm9yCisrb3VyIHRhcmdldCwgdXNpbmcgb3VyIGR5bmFtaWMgbGlua2VyOgorKworKyAgICAkICR0b29scy9iaW4vJHRhcmdldC1yZWFkZWxmIC1obCBoZWxsbworKyAgICBFTEYgSGVhZGVyOgorKyAgICAuLi4KKysgICAgICBUeXBlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYRUMgKEV4ZWN1dGFibGUgZmlsZSkKKysgICAgICBNYWNoaW5lOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSTQorKworKyAgICAuLi4KKysgICAgUHJvZ3JhbSBIZWFkZXJzOgorKyAgICAgIFR5cGUgICAgICAgICAgIE9mZnNldCAgIFZpcnRBZGRyICAgUGh5c0FkZHIgICBGaWxlU2l6IE1lbVNpeiAgRmxnIEFsaWduCisrICAgICAgUEhEUiAgICAgICAgICAgMHgwMDAwMzQgMHgxMDAwMDAzNCAweDEwMDAwMDM0IDB4MDAxMDAgMHgwMDEwMCBSIEUgMHg0CisrICAgICAgSU5URVJQICAgICAgICAgMHgwMDAxMzQgMHgwMDAwODEzNCAweDAwMDA4MTM0IDB4MDAwMTMgMHgwMDAxMyBSICAgMHgxCisrICAgICAgICAgIFtSZXF1ZXN0aW5nIHByb2dyYW0gaW50ZXJwcmV0ZXI6IC9saWIvbGQtbGludXguc28uM10KKysgICAgICBMT0FEICAgICAgICAgICAweDAwMDAwMCAweDAwMDA4MDAwIDB4MDAwMDgwMDAgMHgwMDQyYyAweDAwNDJjIFIgRSAweDgwMDAKKysgICAgLi4uCisrCisrTG9va2luZyBhdCB0aGUgZHluYW1pYyBzZWN0aW9uIG9mIHRoZSBpbnN0YWxsZWQgJ2xpYmdjY19zLnNvJywgd2Ugc2VlCisrdGhhdCB0aGUgJ05FRURFRCcgZW50cnkgZm9yIHRoZSBDIGxpYnJhcnkgZG9lcyBpbmNsdWRlIHRoZSAnLjYnCisrc3VmZml4LCBpbmRpY2F0aW5nIHRoYXQgd2FzIGxpbmtlZCBhZ2FpbnN0IG91ciBmdWxseSBidWlsZCBHTElCQywgYW5kCisrbm90IG91ciBkdW1teSAnbGliYy5zbyc6CisrCisrICAgICQgJHRvb2xzL2Jpbi8kdGFyZ2V0LXJlYWRlbGYgLWQgJHN5c3Jvb3QvbGliL2xpYmdjY19zLnNvLjEKKysgICAgRHluYW1pYyBzZWN0aW9uIGF0IG9mZnNldCAweDEwODNjIGNvbnRhaW5zIDI0IGVudHJpZXM6CisrICAgICAgVGFnICAgICAgICBUeXBlICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUvVmFsdWUKKysgICAgIDB4MDAwMDAwMDEgKE5FRURFRCkgICAgICAgICAgICAgICAgICAgICBTaGFyZWQgbGlicmFyeTogW2xpYmMuc28uNl0KKysgICAgIDB4MDAwMDAwMGUgKFNPTkFNRSkgICAgICAgICAgICAgICAgICAgICBMaWJyYXJ5IHNvbmFtZTogW2xpYmdjY19zLnNvLjFdCisrICAgIC4uLgorKworKworK0FuZCBvbiB0aGUgdGFyZ2V0IG1hY2hpbmUsIHdlIGNhbiBydW4gb3VyIHByb2dyYW1zOgorKworKyAgICAkICRzeXNyb290L2xpYi9sZC5zby4xIC0tbGlicmFyeS1wYXRoICRzeXNyb290L2xpYjokc3lzcm9vdC91c3IvbGliIFwKKysgICAgPiAuL2hlbGxvCisrICAgIEhlbGxvLCB3b3JsZCEKKysgICAgJCAkc3lzcm9vdC9saWIvbGQuc28uMSAtLWxpYnJhcnktcGF0aCAkc3lzcm9vdC9saWI6JHN5c3Jvb3QvdXNyL2xpYiBcCisrICAgID4gLi9jKystaGVsbG8KKysgICAgSGVsbG8sIEMrKyB3b3JsZCEKK2RpZmYgLS1naXQgYS9HTElCQy5jcm9zcy10ZXN0aW5nIGIvR0xJQkMuY3Jvc3MtdGVzdGluZworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmI2N2I0NjgKKy0tLSAvZGV2L251bGwKKysrKyBiL0dMSUJDLmNyb3NzLXRlc3RpbmcKK0BAIC0wLDAgKzEsMjA1IEBACisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gbW9kZTogdGV4dCAtKi0KKysKKysgICAgICAgICAgICAgICAgICAgICAgQ3Jvc3MtVGVzdGluZyBXaXRoIEdMSUJDCisrICAgICAgICAgICAgICAgICAgSmltIEJsYW5keSA8amltYkBjb2Rlc291cmNlcnkuY29tPgorKworKworK0ludHJvZHVjdGlvbgorKworK0RldmVsb3BlcnMgd3JpdGluZyBzb2Z0d2FyZSBmb3IgZW1iZWRkZWQgc3lzdGVtcyBvZnRlbiB1c2UgYSBkZXNrdG9wCisrb3Igb3RoZXIgc2ltaWxhcmx5IGNhcGFibGUgY29tcHV0ZXIgZm9yIGRldmVsb3BtZW50LCBidXQgbmVlZCB0byBydW4KKyt0ZXN0cyBvbiB0aGUgZW1iZWRkZWQgc3lzdGVtLCBvciBwZXJoYXBzIG9uIGEgc2ltdWxhdG9yLiAgV2hlbgorK2NvbmZpZ3VyZWQgZm9yIGNyb3NzLWNvbXBpbGF0aW9uLCB0aGUgc3RvY2sgR05VIEMgbGlicmFyeSBzaW1wbHkKKytkaXNhYmxlcyBydW5uaW5nIHRlc3RzIGFsdG9nZXRoZXI6IHRoZSBjb21tYW5kICdtYWtlIHRlc3RzJyBidWlsZHMKKyt0ZXN0IHByb2dyYW1zLCBidXQgZG9lcyBub3QgcnVuIHRoZW0uICBHTElCQywgaG93ZXZlciwgcHJvdmlkZXMKKytmYWNpbGl0aWVzIGZvciBjb21waWxpbmcgdGVzdHMgYW5kIGdlbmVyYXRpbmcgZGF0YSBmaWxlcyBvbiB0aGUgYnVpbGQKKytzeXN0ZW0sIGJ1dCBydW5uaW5nIHRoZSB0ZXN0IHByb2dyYW1zIHRoZW1zZWx2ZXMgb24gYSByZW1vdGUgc3lzdGVtIG9yCisrc2ltdWxhdG9yLgorKworKworK1Rlc3QgZW52aXJvbm1lbnQgcmVxdWlyZW1lbnRzCisrCisrVGhlIHRlc3QgZW52aXJvbm1lbnQgbXVzdCBtZWV0IGNlcnRhaW4gY29uZGl0aW9ucyBmb3IgR0xJQkMncworK2Nyb3NzLXRlc3RpbmcgZmFjaWxpdGllcyB0byB3b3JrOgorKworKy0gU2hhcmVkIGZpbGVzeXN0ZW1zLiAgVGhlICdidWlsZCcgc3lzdGVtLCBvbiB3aGljaCB5b3UgY29uZmlndXJlIGFuZAorKyAgY29tcGlsZSBHTElCQywgYW5kIHRoZSAnaG9zdCcgc3lzdGVtLCBvbiB3aGljaCB5b3UgaW50ZW5kIHRvIHJ1bgorKyAgR0xJQkMsIG11c3Qgc2hhcmUgYSBmaWxlc3lzdGVtIGNvbnRhaW5pbmcgdGhlIEdMSUJDIGJ1aWxkIGFuZAorKyAgc291cmNlIHRyZWVzLiAgRmlsZXMgbXVzdCBhcHBlYXIgYXQgdGhlIHNhbWUgcGF0aHMgb24gYm90aCBzeXN0ZW1zLgorKworKy0gUmVtb3RlLXNoZWxsIGxpa2UgaW52b2NhdGlvbi4gIFRoZXJlIG11c3QgYmUgYSB3YXkgdG8gcnVuIGEgcHJvZ3JhbQorKyAgb24gdGhlIGhvc3Qgc3lzdGVtIGZyb20gdGhlIGJ1aWxkIHN5c3RlbSwgcGFzc2luZyBpdCBwcm9wZXJseSBxdW90ZWQKKysgIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIHNldHRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBhbmQKKysgIGluaGVyaXRpbmcgdGhlIGNhbGxlcidzIHN0YW5kYXJkIGlucHV0IGFuZCBvdXRwdXQuCisrCisrCisrVXNhZ2UKKysKKytUbyB1c2UgR0xJQkMncyBjcm9zcy10ZXN0aW5nIHN1cHBvcnQsIHByb3ZpZGUgdmFsdWVzIGZvciB0aGUKKytmb2xsb3dpbmcgTWFrZSB2YXJpYWJsZXMgd2hlbiB5b3UgaW52b2tlICdtYWtlJzoKKysKKystIGNyb3NzLXRlc3Qtd3JhcHBlcgorKworKyAgVGhpcyBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGNyb3NzLXRlc3Rpbmcgd3JhcHBlciBjb21tYW5kLCBhbG9uZworKyAgd2l0aCBhbnkgYXJndW1lbnRzLgorKworKy0gY3Jvc3MtbG9jYWxlZGVmCisrCisrICBUaGlzIHNob3VsZCBiZSB0aGUgbmFtZSBvZiBhIGNyb3NzLWNhcGFibGUgbG9jYWxlZGVmIHByb2dyYW0sIGxpa2UKKysgIHRoYXQgaW5jbHVkZWQgaW4gdGhlIEdMSUJDICdsb2NhbGVkZWYnIG1vZHVsZSwgYWxvbmcgd2l0aCBhbnkKKysgIGFyZ3VtZW50cyBuZWVkZWQuCisrCisrVGhlc2UgYXJlIGVhY2ggZXhwbGFpbmVkIGluIGRldGFpbCBiZWxvdy4KKysKKysKKytUaGUgQ3Jvc3MtVGVzdGluZyBXcmFwcGVyCisrCisrVG8gcnVuIHRlc3QgcHJvZ3JhbXMgcmVsaWFibHksIHRoZSBzdG9jayBHTlUgQyBsaWJyYXJ5IHRha2VzIGNhcmUgdG8KKytlbnN1cmUgdGhhdCB0ZXN0IHByb2dyYW1zIHVzZSB0aGUgbmV3bHkgY29tcGlsZWQgZHluYW1pYyBsaW5rZXIgYW5kCisrc2hhcmVkIGxpYnJhcmllcywgYW5kIG5ldmVyIHRoZSBob3N0IHN5c3RlbSdzIGluc3RhbGxlZCBsaWJyYXJpZXMuICBUbworK2FjY29tcGxpc2ggdGhpcywgaXQgcnVucyB0aGUgdGVzdHMgYnkgZXhwbGljaXRseSBpbnZva2luZyB0aGUgZHluYW1pYworK2xpbmtlciBmcm9tIHRoZSBidWlsZCB0cmVlLCBwYXNzaW5nIGl0IGEgbGlzdCBvZiBidWlsZCB0cmVlCisrZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBzaGFyZWQgbGlicmFyaWVzLCBmb2xsb3dlZCBieSB0aGUgbmFtZSBvZgorK3RoZSBleGVjdXRhYmxlIHRvIHJ1biBhbmQgaXRzIGFyZ3VtZW50cy4KKysKKytGb3IgZXhhbXBsZSwgd2hlcmUgb25lIG1pZ2h0IG5vcm1hbGx5IHJ1biBhIHRlc3QgcHJvZ3JhbSBsaWtlIHRoaXM6CisrCisrICAgICQgLi90c3QtZm9vIGFyZzEgYXJnMgorKworK3RoZSBHTlUgQyBsaWJyYXJ5IG1pZ2h0IHJ1biB0aGF0IHByb2dyYW0gbGlrZSB0aGlzOgorKworKyAgICAkICRvYmpkaXIvZWxmL2xkLWxpbnV4LnNvLjMgLS1saWJyYXJ5LXBhdGggJG9iamRpciBcCisrICAgICAgLi90c3QtZm9vIGFyZzEgYXJnMgorKworKyh3aGVyZSAkb2JqZGlyIGlzIHRoZSBwYXRoIHRvIHRoZSB0b3Agb2YgdGhlIGJ1aWxkIHRyZWUsIGFuZCB0aGUKKyt0cmFpbGluZyBiYWNrc2xhc2ggaW5kaWNhdGVzIGEgY29udGludWF0aW9uIG9mIHRoZSBjb21tYW5kKS4gIEluIG90aGVyCisrd29yZHMsIGVhY2ggdGVzdCBwcm9ncmFtIGludm9jYXRpb24gaXMgJ3dyYXBwZWQgdXAnIGluc2lkZSBhbiBleHBsaWNpdAorK2ludm9jYXRpb24gb2YgdGhlIGR5bmFtaWMgbGlua2VyLCB3aGljaCBtdXN0IGl0c2VsZiBleGVjdXRlIHRoZSB0ZXN0CisrcHJvZ3JhbSwgaGF2aW5nIGxvYWRlZCBzaGFyZWQgbGlicmFyaWVzIGZyb20gdGhlIGFwcHJvcHJpYXRlCisrZGlyZWN0b3JpZXMuCisrCisrVG8gc3VwcG9ydCBjcm9zcy10ZXN0aW5nLCBHTElCQyBhbGxvd3MgdGhlIGRldmVsb3BlciB0byBvcHRpb25hbGx5Cisrc2V0IHRoZSAnY3Jvc3MtdGVzdC13cmFwcGVyJyBNYWtlIHZhcmlhYmxlIHRvIGFub3RoZXIgd3JhcHBlciBjb21tYW5kLAorK3RvIHdoaWNoIGl0IHBhc3NlcyB0aGUgZW50aXJlIGR5bmFtaWMgbGlua2VyIGludm9jYXRpb24gc2hvd24gYWJvdmUgYXMKKythcmd1bWVudHMuICBGb3IgZXhhbXBsZSwgaWYgdGhlIGRldmVsb3BlciBzdXBwbGllcyBhIHdyYXBwZXIgb2YKKysnbXktd3JhcHBlciBob3N0bmFtZScsIHRoZW4gR0xJQkMgd291bGQgcnVuIHRoZSB0ZXN0IGFib3ZlIGFzCisrZm9sbG93czoKKysKKysgICAgJCBteS13cmFwcGVyIGhvc3RuYW1lIFwKKysgICAgICAkb2JqZGlyL2VsZi9sZC1saW51eC5zby4zIC0tbGlicmFyeS1wYXRoICRvYmpkaXIgXAorKyAgICAgIC4vdHN0LWZvbyBhcmcxIGFyZzIKKysKKytUaGUgJ215LXdyYXBwZXInIGNvbW1hbmQgaXMgcmVzcG9uc2libGUgZm9yIGV4ZWN1dGluZyB0aGUgY29tbWFuZAorK2dpdmVuIG9uIHRoZSBob3N0IHN5c3RlbS4KKysKKytTaW5jZSB0ZXN0cyBhcmUgcnVuIGluIHZhcnlpbmcgZGlyZWN0b3JpZXMsIHRoZSB3cmFwcGVyIHNob3VsZCBlaXRoZXIKKytiZSBpbiB5b3VyIGNvbW1hbmQgc2VhcmNoIHBhdGgsIG9yICdjcm9zcy10ZXN0LXdyYXBwZXInIHNob3VsZCBnaXZlIGFuCisrYWJzb2x1dGUgcGF0aCBmb3IgdGhlIHdyYXBwZXIuCisrCisrVGhlIHdyYXBwZXIgbXVzdCBtZWV0IHNldmVyYWwgcmVxdWlyZW1lbnRzOgorKworKy0gSXQgbXVzdCBwcmVzZXJ2ZSB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBBcyBleHBsYWluZWQgYWJvdmUsIHRoZQorKyAgYnVpbGQgZGlyZWN0b3J5IHRyZWUgbXVzdCBiZSB2aXNpYmxlIG9uIGJvdGggdGhlIGJ1aWxkIGFuZCBob3N0CisrICBzeXN0ZW1zLCBhdCB0aGUgc2FtZSBwYXRoLiAgVGhlIHRlc3Qgd3JhcHBlciBtdXN0IGVuc3VyZSB0aGF0IHRoZQorKyAgY3VycmVudCBkaXJlY3RvcnkgaXQgaW5oZXJpdHMgaXMgYWxzbyBpbmhlcml0ZWQgYnkgdGhlIGR5bmFtaWMKKysgIGxpbmtlciAoYW5kIHRodXMgdGhlIHRlc3QgcHJvZ3JhbSBpdHNlbGYpLgorKworKy0gSXQgbXVzdCBwcmVzZXJ2ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMnIHZhbHVlcy4gIE1hbnkgR0xJQkMgdGVzdHMKKysgIHNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRlc3QgcnVuczsgaW4gbmF0aXZlIHRlc3RpbmcsIGl0CisrICBpbnZva2VzIHByb2dyYW1zIGxpa2UgdGhpczoKKysKKysgICAgJCBHQ09OVl9QQVRIPSRvYmpkaXIvaWNvbnZkYXRhIFwKKysgICAgICAkb2JqZGlyL2VsZi9sZC1saW51eC5zby4zIC0tbGlicmFyeS1wYXRoICRvYmpkaXIgXAorKyAgICAgIC4vdHN0LWZvbyBhcmcxIGFyZzIKKysKKysgIFdpdGggdGhlIGNyb3NzLXRlc3Rpbmcgd3JhcHBlciwgdGhhdCBpbnZvY2F0aW9uIGJlY29tZXM6CisrCisrICAgICQgR0NPTlZfUEFUSD0kb2JqZGlyL2ljb252ZGF0YSBcCisrICAgICAgbXktd3JhcHBlciBob3N0bmFtZSBcCisrICAgICAgJG9iamRpci9lbGYvbGQtbGludXguc28uMyAtLWxpYnJhcnktcGF0aCAkb2JqZGlyIFwKKysgICAgICAuL3RzdC1mb28gYXJnMSBhcmcyCisrCisrICBIZXJlLCAnbXktd3JhcHBlcicgbXVzdCBlbnN1cmUgdGhhdCB0aGUgdmFsdWUgaXQgc2VlcyBmb3IKKysgICdHQ09OVl9QQVRIJyB3aWxsIGJlIHNlZW4gYnkgdGhlIGR5bmFtaWMgbGlua2VyLCBhbmQgdGh1cyAndHN0LWZvbycKKysgIGl0c2VsZi4gIChUaGUgd3JhcHBlciBzdXBwbGllZCB3aXRoIEdMSUJDIHNpbXBseSBwcmVzZXJ2ZXMgdGhlCisrICB2YWx1ZXMgb2YgKmFsbCogZW52aXJvbWVudCB2YXJpYWJsZXMsIHdpdGggYSBmaXhlZCBzZXQgb2YKKysgIGV4Y2VwdGlvbnMuKQorKworKyAgSWYgeW91ciB3cmFwcGVyIGlzIGEgc2hlbGwgc2NyaXB0LCB0YWtlIGNhcmUgdG8gY29ycmVjdGx5IHByb3BhZ2F0ZQorKyAgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdob3NlIHZhbHVlcyBjb250YWluIHNwYWNlcyBhbmQgc2hlbGwKKysgIG1ldGFjaGFyYWN0ZXJzLgorKworKy0gSXQgbXVzdCBwYXNzIHRoZSBjb21tYW5kJ3MgYXJndW1lbnRzLCB1bm1vZGlmaWVkLiAgVGhlIGFyZ3VtZW50cworKyAgc2VlbiBieSB0aGUgdGVzdCBwcm9ncmFtIHNob3VsZCBiZSBleGFjdGx5IHRob3NlIHNlZW4gYnkgdGhlIHdyYXBwZXIKKysgIChhZnRlciB3aGF0ZXZlciBhcmd1bWVudHMgYXJlIGdpdmVuIHRvIHRoZSB3cmFwcGVyIGl0c2VsZikuICBUaGUKKysgIEdMSUJDIHRlc3QgZnJhbWV3b3JrIHBlcmZvcm1zIGFsbCBuZWVkZWQgc2hlbGwgd29yZCBzcGxpdHRpbmcgYW5kCisrICBleHBhbnNpb24gKHdpbGRjYXJkIGV4cGFuc2lvbiwgcGFyYW1ldGVyIHN1YnN0aXR1dGlvbiwgYW5kIHNvIG9uKQorKyAgYmVmb3JlIGludm9raW5nIHRoZSB3cmFwcGVyOyBmdXJ0aGVyIGV4cGFuc2lvbiBtYXkgYnJlYWsgdGhlIHRlc3RzLgorKworKworK1RoZSAnY3Jvc3MtdGVzdC1zc2guc2gnIHNjcmlwdAorKworK0lmIHlvdSB3YW50IHRvIHVzZSAnc3NoJyAob3Igc29tZXRoaW5nIHN1ZmZpY2llbnRseSBzaW1pbGFyKSB0byBydW4KKyt0ZXN0IHByb2dyYW1zIG9uIHlvdXIgaG9zdCBzeXN0ZW0sIEdMSUJDIGluY2x1ZGVzIGEgc2hlbGwgc2NyaXB0LAorKydzY3JpcHRzL2Nyb3NzLXRlc3Qtc3NoLnNoJywgd2hpY2ggeW91IGNhbiB1c2UgYXMgeW91ciB3cmFwcGVyCisrY29tbWFuZC4gIFRoaXMgc2NyaXB0IHRha2VzIGNhcmUgb2Ygc2V0dGluZyB0aGUgdGVzdCBjb21tYW5kJ3MgY3VycmVudAorK2RpcmVjdG9yeSwgcHJvcGFnYXRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWVzLCBhbmQgY2FycnlpbmcKKytjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBhbGwgYWNyb3NzIGFuICdzc2gnIGNvbm5lY3Rpb24uICBZb3UgbWF5IGV2ZW4KKytzdXBwbHkgYW4gYWx0ZXJuYXRpdmUgdG8gJ3NzaCcgb24gdGhlIGNvbW1hbmQgbGluZSwgaWYgbmVlZGVkLgorKworK0ZvciBtb3JlIGRldGFpbHMsIHBhc3MgJ2Nyb3NzLXRlc3Qtc3NoLnNoJyB0aGUgJy0taGVscCcgb3B0aW9uLgorKworKworK1RoZSBDcm9zcy1Db21waWxpbmcgTG9jYWxlIERlZmluaXRpb24gQ29tbWFuZAorKworK1NvbWUgR0xJQkMgdGVzdHMgcmVseSBvbiBsb2NhbGVzIGdlbmVyYXRlZCBlc3BlY2lhbGx5IGZvciB0aGUgdGVzdAorK3Byb2Nlc3MuICBJbiBhIG5hdGl2ZSBjb25maWd1cmF0aW9uLCB0aGVzZSB0ZXN0cyBzaW1wbHkgcnVuIHRoZQorKydsb2NhbGVkZWYnIGNvbW1hbmQgYnVpbHQgYnkgdGhlIG5vcm1hbCBHTElCQyBidWlsZCBwcm9jZXNzLAorKydsb2NhbGUvbG9jYWxlZGVmJywgdG8gcHJvY2VzcyBhbmQgaW5zdGFsbCB0aGVpciBsb2NhbGVzLiAgSG93ZXZlciwgaW4KKythIGNyb3NzLWNvbXBpbGluZyBjb25maWd1cmF0aW9uLCB0aGlzICdsb2NhbGVkZWYnIGlzIGJ1aWx0IGZvciB0aGUKKytob3N0IHN5c3RlbSwgbm90IHRoZSBidWlsZCBzeXN0ZW0sIGFuZCBzaW5jZSBpdCByZXF1aXJlcyBxdWl0ZSBhIGJpdAorK29mIG1lbW9yeSB0byBydW4gKHdlIGhhdmUgc2VlbiBpdCBmYWlsIG9uIHN5c3RlbXMgd2l0aCA2NE1pQiBvZgorK21lbW9yeSksIGl0IG1heSBub3QgYmUgcHJhY3RpY2FsIHRvIHJ1biBpdCBvbiB0aGUgaG9zdCBzeXN0ZW0uCisrCisrSWYgc2V0LCBHTElCQyB1c2VzIHRoZSAnY3Jvc3MtbG9jYWxlZGVmJyBNYWtlIHZhcmlhYmxlIGFzIHRoZSBjb21tYW5kCisrdG8gcnVuIG9uIHRoZSBidWlsZCBzeXN0ZW0gdG8gcHJvY2VzcyBhbmQgaW5zdGFsbCBsb2NhbGVzLiAgVGhlCisrbG9jYWxlZGVmIHByb2dyYW0gYnVpbHQgZnJvbSB0aGUgR0xJQkMgJ2xvY2FsZWRlZicgbW9kdWxlIGlzCisrc3VpdGFibGUuCisrCisrVGhlIHZhbHVlIG9mICdjcm9zcy1sb2NhbGVkZWYnIG1heSBhbHNvIGluY2x1ZGUgY29tbWFuZC1saW5lIGFyZ3VtZW50cworK3RvIGJlIHBhc3NlZCB0byB0aGUgcHJvZ3JhbTsgaWYgeW91IGFyZSB1c2luZyBHTElCQydzICdsb2NhbGVkZWYnLAorK3lvdSBtYXkgaW5jbHVkZSBlbmRpYW5uZXNzIGFuZCAndWludDMyX3QnIGFsaWdubWVudCBhcmd1bWVudHMgaGVyZS4KKysKKysKKytFeGFtcGxlCisrCisrSW4gZGV2ZWxvcGluZyBHTElCQydzIGNyb3NzLXRlc3RpbmcgZmFjaWxpdHksIHdlIGludm9rZWQgJ21ha2UnIHdpdGgKKyt0aGUgZm9sbG93aW5nIHNjcmlwdDoKKysKKysgICAgIyEvYmluL3NoCisrCisrICAgIHNyY2Rpcj0uLi4KKysgICAgdGVzdF9ob3N0bmFtZT0uLi4KKysgICAgbG9jYWxlZGVmZGlyPS4uLgorKyAgICBjcm9zc19neHg9Li4uLWcrKworKworKyAgICB3cmFwcGVyPSIkc3JjZGlyL3NjcmlwdHMvY3Jvc3MtdGVzdC1zc2guc2ggJHRlc3RfaG9zdG5hbWUiCisrICAgIGxvY2FsZWRlZj0iJGxvY2FsZWRlZmRpci9sb2NhbGVkZWYgLS1saXR0bGUtZW5kaWFuIC0tdWludDMyLWFsaWduPTQiCisrCisrICAgIG1ha2UgY3Jvc3MtdGVzdC13cmFwcGVyPSIkd3JhcHBlciIgXAorKyAgICAgICAgIGNyb3NzLWxvY2FsZWRlZj0iJGxvY2FsZWRlZiIgXAorKyAgICAgICAgIENYWD0iJGNyb3NzX2d4eCIgXAorKyAgICAgICAgICIkQCIKKysKKysKKytPdGhlciBDcm9zcy1UZXN0aW5nIENvbmNlcm5zCisrCisrSGVyZSBhcmUgbm90ZXMgb24gc29tZSBvdGhlciBpc3N1ZXMgd2hpY2ggeW91IG1heSBlbmNvdW50ZXIgaW4gcnVubmluZworK3RoZSBHTElCQyB0ZXN0cyBpbiBhIGNyb3NzLWNvbXBpbGluZyBlbnZpcm9ubWVudDoKKysKKystIFNvbWUgdGVzdHMgcmVxdWlyZSBhIEMrKyBjcm9zcy1jb21waWxlcjsgeW91IHNob3VsZCBzZXQgdGhlICdDWFgnCisrICBNYWtlIHZhcmlhYmxlIHRvIHRoZSBuYW1lIG9mIGFuIGFwcHJvcHJpYXRlIGNyb3NzLWNvbXBpbGVyLgorKworKy0gU29tZSB0ZXN0cyByZXF1aXJlIGFjY2VzcyB0byBsaWJzdGRjKysuc28uNiBhbmQgbGliZ2NjX3Muc28uMTsgd2UKKysgIHNpbXBseSBwbGFjZSBjb3BpZXMgb2YgdGhlc2UgbGlicmFyaWVzIGluIHRoZSB0b3AgR0xJQkMgYnVpbGQKKysgIGRpcmVjdG9yeS4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE5LWVnbGliYy1CcmluZy1FZ2xpYmMtb3B0aW9uLWdyb3VwLWluZnJhc3RydWN0dXJlLXRvLWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTktZWdsaWJjLUJyaW5nLUVnbGliYy1vcHRpb24tZ3JvdXAtaW5mcmFzdHJ1Y3R1cmUtdG8tZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2I4MGY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE5LWVnbGliYy1CcmluZy1FZ2xpYmMtb3B0aW9uLWdyb3VwLWluZnJhc3RydWN0dXJlLXRvLWcucGF0Y2gKQEAgLTAsMCArMSwxNDM2IEBACitGcm9tIGFhN2M1ZmU4NmQwNDU4NGE5YWVkNGRjNDBiYTg1NmM2NWExZWY5YzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDo0NToxOCArMDAwMAorU3ViamVjdDogW1BBVENIIDE5LzI3XSBlZ2xpYmM6IEJyaW5nIEVnbGliYyBvcHRpb24gZ3JvdXAgaW5mcmFzdHJ1Y3R1cmUgdG8KKyBnbGliYworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIEVHTElCQy5vcHRpb24tZ3JvdXBzICAgICAgICAgICAgICB8IDEyMiArKysrKysKKyBNYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKworIGNvbmZpZy5tYWtlLmluICAgICAgICAgICAgICAgICAgICB8ICAgMiArCisgY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEzICsKKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgfCAgMTAgKworIG9wdGlvbi1ncm91cHMuZGVmICAgICAgICAgICAgICAgICB8IDg2OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIG9wdGlvbi1ncm91cHMuZGVmYXVsdHMgICAgICAgICAgICB8ICA0NyArKysKKyBvcHRpb24tZ3JvdXBzLm1hayAgICAgICAgICAgICAgICAgfCAgNDEgKysKKyBvcHRpb25zLWNvbmZpZy9NYWtlZmlsZSAgICAgICAgICAgfCAgNTUgKysrCisgb3B0aW9ucy1jb25maWcvY29uZmlnLXBvc3Rwcm9jLnBsIHwgIDU4ICsrKworIG9wdGlvbnMtY29uZmlnL2NvbmZpZy1wcmVwcm9jLnBsICB8ICAgOCArCisgc2NyaXB0cy9vcHRpb24tZ3JvdXBzLmF3ayAgICAgICAgIHwgIDYzICsrKworIDEyIGZpbGVzIGNoYW5nZWQsIDEyODggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBFR0xJQkMub3B0aW9uLWdyb3VwcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBvcHRpb24tZ3JvdXBzLmRlZgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBvcHRpb24tZ3JvdXBzLmRlZmF1bHRzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG9wdGlvbi1ncm91cHMubWFrCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG9wdGlvbnMtY29uZmlnL01ha2VmaWxlCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG9wdGlvbnMtY29uZmlnL2NvbmZpZy1wb3N0cHJvYy5wbAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBvcHRpb25zLWNvbmZpZy9jb25maWctcHJlcHJvYy5wbAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzY3JpcHRzL29wdGlvbi1ncm91cHMuYXdrCisKK2RpZmYgLS1naXQgYS9FR0xJQkMub3B0aW9uLWdyb3VwcyBiL0VHTElCQy5vcHRpb24tZ3JvdXBzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNmE1MGI4ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvRUdMSUJDLm9wdGlvbi1ncm91cHMKK0BAIC0wLDAgKzEsMTIyIEBACisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gbW9kZTogdGV4dCAtKi0KKysKKysgICAgICAgICAgICAgIFRoZSBFR0xJQkMgQ29tcG9uZW50IENvbmZpZ3VyYXRpb24gU3lzdGVtCisrICAgICAgICAgICAgICAgICAgSmltIEJsYW5keSA8amltYkBjb2Rlc291cmNlcnkuY29tPgorKworK0ludHJvZHVjdGlvbgorKworK1RoZSBHTlUgQyBsaWJyYXJ5IChHTElCQykgcHJvdmlkZXMgYSBicm9hZCByYW5nZSBvZiBmdW5jdGlvbmFsaXR5LAorK3JhbmdpbmcgZnJvbSBpbnRlcm5hdGlvbmFsaXphdGlvbiBzdXBwb3J0IHRvIHRyYW5zY2VuZGVudGFsCisrbWF0aGVtYXRpY2FsIGZ1bmN0aW9ucy4gIEl0cyB3ZWJzaXRlIGJvYXN0cyB0aGF0ICJuZWFybHkgYWxsIGtub3duIGFuZAorK3VzZWZ1bCBmdW5jdGlvbnMgZnJvbSBhbnkgb3RoZXIgQyBsaWJyYXJ5IGFyZSBhdmFpbGFibGUuIiAgVGhpcworK2V4aGF1c3RpdmUgYXBwcm9hY2ggaGFzIGJlZW4gb25lIG9mIEdMSUJDJ3Mgc3RyZW5ndGhzIG9uIGRlc2t0b3AgYW5kCisrc2VydmVyIHN5c3RlbXMsIGJ1dCBpdCBoYXMgYWxzbyBnaXZlbiBHTElCQyBhIGxhcmdlIGZvb3RwcmludCwgYm90aCBpbgorK21lbW9yeSBhbmQgb24gZGlzaywgbWFraW5nIGl0IGEgY2hhbGxlbmdlIHRvIHVzZSBpbiBlbWJlZGRlZCBzeXN0ZW1zCisrd2l0aCBsaW1pdGVkIHJlc291cmNlcy4KKysKKytUaGUgRW1iZWRkZWQgR05VIEMgbGlicmFyeSAoRUdMSUJDKSBpcyBhIHZhcmlhbnQgb2YgdGhlIEdOVSBDIGxpYnJhcnkKKytkZXNpZ25lZCB0byB3b3JrIHdlbGwgb24gZW1iZWRkZWQgc3lzdGVtcy4gIEluIHBhcnRpY3VsYXIsIEVHTElCQydzCisrY29tcG9uZW50IGNvbmZpZ3VyYXRpb24gc3lzdGVtIGFsbG93cyBlbWJlZGRlZCBkZXZlbG9wZXJzIHRvIGJ1aWxkCisrY3VzdG9taXplZCB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeSB0aGF0IGluY2x1ZGUgb25seSB0aGUgZmVhdHVyZXMKKyt0aGVpciBhcHBsaWNhdGlvbiB1c2VzLCByZWR1Y2luZyBpdHMgc3BhY2UgcmVxdWlyZW1lbnRzLgorKworK0VHTElCQydzIGNvbXBvbmVudCBjb25maWd1cmF0aW9uIHN5c3RlbSBjYXRlZ29yaXplcyB0aGUgbGlicmFyeSdzCisrZnVuY3Rpb25zIGludG8gIm9wdGlvbiBncm91cHMiLCBhbmQgYWxsb3dzIHlvdSB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUKKytvcHRpb24gZ3JvdXBzIGluZGl2aWR1YWxseS4gIFNvbWUgb3B0aW9uIGdyb3VwcyBkZXBlbmQgb24gb3RoZXJzOworK0VHTElCQyB0cmFja3MgdGhlc2UgcmVsYXRpb25zaGlwcywgYW5kIGVuc3VyZXMgdGhhdCB0aGUgc2VsZWN0ZWQKKytjb25maWd1cmF0aW9uIHlpZWxkcyBhIGZ1bmN0aW9uaW5nIGxpYnJhcnkuCisrCisrCisrQ29uc2lzdGVudCBhbmQgUHJlZGljdGFibGUgQmVoYXZpb3IKKysKKytBIGZsZXhpYmxlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGlzIGEgbWl4ZWQgYmxlc3Npbmc6IGlmIHRoZSBvcHRpb25zCisrb2ZmZXJlZCBhcmUgcG9vcmx5IGRlc2lnbmVkLCBpdCBjYW4gYmUgaGFyZCB0byBzZWUgd2hpY2ggY2hvaWNlcyB3aWxsCisraGF2ZSB0aGUgZGVzaXJlZCBlZmZlY3RzLCBhbmQgY2hvaWNlcyB3aXRoIG9ic2N1cmUgY29uc2VxdWVuY2VzIGNhbgorK21ha2UgZGVidWdnaW5nIGRpZmZpY3VsdC4gIEVHTElCQydzIGNvbmZpZ3VyYXRpb24gZm9sbG93cyBzb21lIGdlbmVyYWwKKytwcmluY2lwbGVzIHRvIHJlZHVjZSB0aGVzZSByaXNrczoKKysKKystIEVHTElCQyBoYXMgYSBzaW5nbGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBlYWNoIHRhcmdldAorKyAgYXJjaGl0ZWN0dXJlLgorKworKy0gSW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgYWxsIG9wdGlvbiBncm91cHMgYXJlIGVuYWJsZWQsIGFuZAorKyAgRUdMSUJDIGlzIHVwd2FyZGx5IEFQSS0gYW5kIEFCSS1jb21wYXRpYmxlIHdpdGggR0xJQkMuCisrCisrLSBBcyBtdWNoIGFzIHBvc3NpYmxlLCBjb25maWd1cmF0aW9ucyBvbmx5IGFmZmVjdCB3aGF0IGZ1bmN0aW9ucyBhcmUKKysgIHByZXNlbnQsIG5vdCBob3cgdGhleSBiZWhhdmUuICBJZiB0aGUgc3lzdGVtIHdvcmtzIHdpdGggYW4gb3B0aW9uCisrICBncm91cCBkaXNhYmxlZCwgaXQgd2lsbCBzdGlsbCB3b3JrIHdpdGggaXQgZW5hYmxlZC4KKysKKystIEFzIG11Y2ggYXMgcG9zc2libGUsIGNvbmZpZ3VyYXRpb25zIG9ubHkgc2VsZWN0IG9wdGlvbiBncm91cHMgLS0tCisrICB0aGV5IGRvIG5vdCBkZXNjcmliZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCisrCisrVGhlc2UgcnVsZXMgbWVhbiB0aGF0IHlvdSBoYXZlIGEgc2ltcGxlIGRlYnVnZ2luZyBzdHJhdGVneSBhdmFpbGFibGUKKytpZiB5b3Ugc3VzcGVjdCB0aGF0IHlvdXIgRUdMSUJDIGNvbmZpZ3VyYXRpb24gbWlnaHQgYmUgdGhlIHNvdXJjZSBvZiBhCisrcHJvYmxlbTogZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIHJlLXRlc3QsIGFuZCB0aGVuCisrZGlzYWJsZSBvcHRpb24gZ3JvdXBzIG9uZSBieSBvbmUsIHVudGlsIHRoZSBwcm9ibGVtIHJlYXBwZWFycy4KKysKKysKKytUaGUgT3B0aW9uIEdyb3VwcworKworK1RvIHNlZSB0aGUgY3VycmVudCBmdWxsIGxpc3Qgb2YgaW1wbGVtZW50ZWQgb3B0aW9uIGdyb3VwcywgcmVmZXIgdG8gdGhlCisrZmlsZSAnb3B0aW9uLWdyb3Vwcy5kZWYnIGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLCBvciBydW4KKysnbWFrZSBtZW51Y29uZmlnJyBmcm9tIHRoZSB0b3AtbGV2ZWwgYnVpbGQgZGlyZWN0b3J5LgorKworK1RoZSBQT1NJWC4xLTIwMDEgc3BlY2lmaWNhdGlvbiBpbmNsdWRlcyBhIHN1Z2dlc3RlZCBwYXJ0aXRpb24gb2YgYWxsCisrdGhlIGZ1bmN0aW9ucyBpbiB0aGUgUE9TSVggQyBBUEkgaW50byBvcHRpb24gZ3JvdXBzOiBtYXRoIGZ1bmN0aW9ucworK2xpa2UgJ3NpbicgYW5kICdjb3MnOyBuZXR3b3JraW5nIGZ1bmN0aW9ucyBsaWtlICdzb2NrZXQnIGFuZAorKydjb25uZWN0JzsgYW5kIHNvIG9uLiAgRUdMSUJDIGNvdWxkIHVzZSB0aGlzIHBhcnRpdGlvbmluZyBhcyB0aGUgYmFzaXMKKytmb3IgZnV0dXJlIG9wdGlvbiBncm91cHMuCisrCisrCisrSW1wbGVtZW50YXRpb24KKysKKytUaGUgRUdMSUJDIGNvbXBvbmVudCBjb25maWd1cmF0aW9uIHN5c3RlbSByZXNlbWJsZXMgdGhlIGFwcHJvYWNoIHVzZWQKKytieSB0aGUgTGludXgga2VybmVsIHRvIHNlbGVjdCBkZXZpY2UgZHJpdmVycywgbmV0d29yayBwcm90b2NvbHMsIGFuZAorK290aGVyIGZlYXR1cmVzLiAgQSBmaWxlIG5hbWVkICdvcHRpb24tZ3JvdXBzLmNvbmZpZycgaW4gdGhlIHRvcC1sZXZlbAorK2J1aWxkIGRpcmVjdG9yeSBjb250YWlucyBhc3NpZ25tZW50cyB0byBNYWtlIHZhcmlhYmxlcywgZWFjaCBvZiB3aGljaAorK2VuYWJsZXMgb3IgZGlzYWJsZXMgYSBwYXJ0aWN1bGFyIG9wdGlvbiBncm91cC4gIElmIHRoZSB2YXJpYWJsZSdzCisrdmFsdWUgaXMgc2V0IHRvICd5JywgdGhlbiB0aGUgb3B0aW9uIGdyb3VwIGlzIGVuYWJsZWQ7IGlmIGl0IHNldCB0bworK2FueXRoaW5nIGVsc2UsIHRoZSBvcHRpb24gZ3JvdXAgaXMgb21pdHRlZC4gIFRoZSBmaWxlCisrJ29wdGlvbi1ncm91cHMuZGVmYXVsdHMnLCBhdCB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSwgZXN0YWJsaXNoZXMKKytkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHZhcmlhYmxlczsgYWxsIG9wdGlvbiBncm91cHMgYXJlIGVuYWJsZWQgYnkKKytkZWZhdWx0LgorKworK0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nICdvcHRpb24tZ3JvdXBzLmNvbmZpZycgd291bGQgb21pdCBsb2NhbGUKKytkYXRhLCBidXQgaW5jbHVkZSBtYXRoZW1hdGljYWwgZnVuY3Rpb25zLCBhbmQgZXZlcnl0aGluZyBlbHNlOgorKworKyAgIE9QVElPTl9FR0xJQkNfTE9DQUxFUyA9IG4KKysgICBPUFRJT05fRUdMSUJDX0xJQk0gPSB5CisrCisrTGlrZSB0aGUgTGludXgga2VybmVsLCBFR0xJQkMgc3VwcG9ydHMgYSBzaW1pbGFyIHNldCBvZiAnKmNvbmZpZycgbWFrZQorK3RhcmdldHMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gY3JlYXRlICdvcHRpb24tZ3JvdXBzLmNvbmZpZycsIHdpdGggYWxsCisrZGVwZW5kZW5jaWVzIGJldHdlZW4gb3B0aW9uIGdyb3VwcyBhdXRvbWF0aWNhbGx5IHNhdGlzZmllZC4gIFJ1bgorKydtYWtlIGhlbHAnIHRvIHNlZSB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgbWFrZSBjb25maWcgdGFyZ2V0cy4gIEZvcgorK2V4YW1wbGUsICdtYWtlIG1lbnVjb25maWcnIHdpbGwgdXBkYXRlIHRoZSBjdXJyZW50IGNvbmZpZyB1dGlsaXNpbmcgYQorK21lbnUgYmFzZWQgcHJvZ3JhbS4KKysKKytUaGUgb3B0aW9uIGdyb3VwIG5hbWVzIGFuZCB0aGVpciB0eXBlIChib29sZWFuLCBpbnQsIGhleCwgc3RyaW5nKSwgaGVscAorK2Rlc2NyaXB0aW9uLCBhbmQgZGVwZW5kZW5jaWVzIHdpdGggb3RoZXIgb3B0aW9uIGdyb3VwcywgYXJlIGRlc2NyaWJlZCBieQorKydvcHRpb24tZ3JvdXBzLmRlZicgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUsIGFuYWxvZ291cyB0byB0aGUKKysnS2NvbmZpZycgZmlsZXMgaW4gdGhlIExpbnV4IGtlcm5lbC4KKysKKytJbiBnZW5lcmFsLCBlYWNoIG9wdGlvbiBncm91cCB2YXJpYWJsZSBjb250cm9scyB3aGV0aGVyIGEgZ2l2ZW4gc2V0IG9mCisrb2JqZWN0IGZpbGVzIGluIEVHTElCQyBpcyBjb21waWxlZCBhbmQgaW5jbHVkZWQgaW4gdGhlIGZpbmFsCisrbGlicmFyaWVzLCBvciBvbWl0dGVkIGZyb20gdGhlIGJ1aWxkLgorKworK0VhY2ggc3ViZGlyZWN0b3J5J3MgTWFrZWZpbGUgY2F0ZWdvcml6ZXMgaXRzIHJvdXRpbmVzLCBsaWJyYXJpZXMsIGFuZAorK2V4ZWN1dGFibGVzIGJ5IG9wdGlvbiBncm91cC4gIEZvciBleGFtcGxlLCBFR0xJQkMncyAnbWF0aC9NYWtlZmlsZScKKytwbGFjZXMgdGhlICdsaWJtJyBsaWJyYXJ5IGluIHRoZSBPUFRJT05fRUdMSUJDX0xJQk0gZ3JvdXAgYXMgZm9sbG93czoKKysKKysgICBleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19MSUJNKSA6PSBsaWJtCisrCisrRmluYWxseSwgY29tbW9uIGNvZGUgaW4gJ01ha2VydWxlcycgY2l0ZXMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZQorKydleHRyYS1saWJzLXknLCBzZWxlY3Rpbmcgb25seSB0aG9zZSBsaWJyYXJpZXMgdGhhdCBiZWxvbmcgdG8gZW5hYmxlZAorK29wdGlvbiBncm91cHMgdG8gYmUgYnVpbHQuCisrCisrCisrQ3VycmVudCBTdGF0dXMgYW5kIEZ1dHVyZSBEaXJlY3Rpb25zCisrCisrVGhlIEVHTElCQyBjb21wb25lbnQgY29uZmlndXJhdGlvbiBzeXN0ZW0gZGVzY3JpYmVkIGhlcmUgaXMgc3RpbGwKKyt1bmRlciBkZXZlbG9wbWVudC4KKysKKytXZSBoYXZlIHVzZWQgdGhlIHN5c3RlbSB0byBzdWJzZXQgc29tZSBwb3J0aW9ucyBvZiBFR0xJQkMncworK0luZGV4OiBsaWJjL2NvbmZpZ3VyZS5hYworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDY1OGNjZmEuLmY5MDYzOTEgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0yNCw2ICsyNCw3IEBAIGVuZGlmCisgCisgaW5jbHVkZSBNYWtlY29uZmlnCisgCisraW5jbHVkZSBvcHRpb25zLWNvbmZpZy9NYWtlZmlsZQorIAorICMgVGhpcyBpcyB0aGUgZGVmYXVsdCB0YXJnZXQ7IGl0IG1ha2VzIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSB0ZXN0cy4KKyAuUEhPTlk6IGFsbAorZGlmZiAtLWdpdCBhL2NvbmZpZy5tYWtlLmluIGIvY29uZmlnLm1ha2UuaW4KK2luZGV4IGE5ZjU2OTYuLjI5NGY4ZDEgMTAwNjQ0CistLS0gYS9jb25maWcubWFrZS5pbgorKysrIGIvY29uZmlnLm1ha2UuaW4KK0BAIC00Nyw2ICs0Nyw4IEBAIGMrKy1zeXNpbmNsdWRlcyA9IEBDWFhfU1lTSU5DTFVERVNACisgYWxsLXdhcm5pbmdzID0gQGFsbF93YXJuaW5nc0AKKyBlbmFibGUtd2Vycm9yID0gQGVuYWJsZV93ZXJyb3JACisgCisra2NvbmZpZ190b29scyA9IEBLQ09ORklHX1RPT0xTQAorKworIGhhdmUtei1jb21icmVsb2MgPSBAbGliY19jdl96X2NvbWJyZWxvY0AKKyBoYXZlLXotZXhlY3N0YWNrID0gQGxpYmNfY3Zfel9leGVjc3RhY2tACisgaGF2ZS1CZ3JvdXAgPSBAbGliY19jdl9CZ3JvdXBACitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA3ZDcyOTlhLi40MTE2NDA0IDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC02NDEsNiArNjQxLDcgQEAgSU5TVEFMTF9JTkZPCisgUEVSTAorIEJBU0hfU0hFTEwKKyBsaWJjX2N2X2djY19zdGF0aWNfbGliZ2NjCisrS0NPTkZJR19UT09MUworIENYWF9TWVNJTkNMVURFUworIFNZU0lOQ0xVREVTCisgQVVUT0NPTkYKK0BAIC03NTUsNiArNzU2LDcgQEAgd2l0aF9mcAorIHdpdGhfYmludXRpbHMKKyB3aXRoX3NlbGludXgKKyB3aXRoX2hlYWRlcnMKKyt3aXRoX2tjb25maWcKKyB3aXRoX2RlZmF1bHRfbGluaworIGVuYWJsZV9zYW5pdHlfY2hlY2tzCisgZW5hYmxlX3NoYXJlZAorQEAgLTE0NTksNiArMTQ2MSw5IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgorICAgLS13aXRoLXNlbGludXggICAgICAgICAgaWYgYnVpbGRpbmcgd2l0aCBTRUxpbnV4IHN1cHBvcnQKKyAgIC0td2l0aC1oZWFkZXJzPVBBVEggICAgIGxvY2F0aW9uIG9mIHN5c3RlbSBoZWFkZXJzIHRvIHVzZSAoZm9yIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC91c3Ivc3JjL2xpbnV4L2luY2x1ZGUpIFtkZWZhdWx0PWNvbXBpbGVyIGRlZmF1bHRdCisrICAtLXdpdGgta2NvbmZpZz1QQVRIICAgICBsb2NhdGlvbiBvZiBrY29uZmlnIHRvb2xzIHRvIHVzZSAoZnJvbSBMaW51eCBrZXJuZWwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkcykgdG8gcmUtdXNlIGZvciBjb25maWd1cmluZyBFR0xJQkMgb3B0aW9uCisrICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHMKKyAgIC0td2l0aC1kZWZhdWx0LWxpbmsgICAgIGRvIG5vdCB1c2UgZXhwbGljaXQgbGlua2VyIHNjcmlwdHMKKyAgIC0td2l0aC1jcHU9Q1BVICAgICAgICAgIHNlbGVjdCBjb2RlIGZvciBDUFUgdmFyaWFudAorIAorQEAgLTM1MTcsNiArMzUyMiwxNCBAQCBmaQorIAorIAorIAorKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgta2NvbmZpZyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2tjb25maWcrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIHdpdGh2YWw9JHdpdGhfa2NvbmZpZzsgS0NPTkZJR19UT09MUz0kd2l0aHZhbAorK2Vsc2UKKysgIEtDT05GSUdfVE9PTFM9JycKKytmaQorKworKworIAorICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGVmYXVsdC1saW5rIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke3dpdGhfZGVmYXVsdF9saW5rK3NldH0iID0gc2V0OyB0aGVuIDoKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGE0NjdhNjkuLmZjMGVkNGQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEzNiw2ICsxMzYsMTYgQEAgQUNfQVJHX1dJVEgoW2hlYWRlcnNdLAorIAkgICAgW3N5c2hlYWRlcnM9JyddKQorIEFDX1NVQlNUKHN5c2hlYWRlcnMpCisgCisrQUNfQVJHX1dJVEgoW2tjb25maWddLAorKwkgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1rY29uZmlnPVBBVEhdLAorKwkJCSAgIFtsb2NhdGlvbiBvZiBrY29uZmlnIHRvb2xzIHRvIHVzZSAoZnJvbSBMaW51eAorKwkJCSAgICBrZXJuZWwgYnVpbGRzKSB0byByZS11c2UgZm9yIGNvbmZpZ3VyaW5nIEVHTElCQworKwkJCSAgICBvcHRpb24gZ3JvdXBzXSksCisrCSAgICBbS0NPTkZJR19UT09MUz0kd2l0aHZhbF0sCisrCSAgICBbS0NPTkZJR19UT09MUz0nJ10pCisrQUNfU1VCU1QoS0NPTkZJR19UT09MUykKKysKKysKKyBBQ19TVUJTVCh1c2VfZGVmYXVsdF9saW5rKQorIEFDX0FSR19XSVRIKFtkZWZhdWx0LWxpbmtdLAorIAkgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1kZWZhdWx0LWxpbmtdLAorZGlmZiAtLWdpdCBhL29wdGlvbi1ncm91cHMuZGVmIGIvb3B0aW9uLWdyb3Vwcy5kZWYKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42YWViZDk0CistLS0gL2Rldi9udWxsCisrKysgYi9vcHRpb24tZ3JvdXBzLmRlZgorQEAgLTAsMCArMSw4NjggQEAKKysjIFRoaXMgZmlsZSBkb2N1bWVudHMgdGhlIG9wdGlvbiBncm91cHMgRUdMSUJDIGN1cnJlbnRseSBzdXBwb3J0cywgaW4KKysjIGEgZm9ybWF0IGFraW4gdG8gdGhlIExpbnV4IEtjb25maWcgc3lzdGVtJ3MuICBUaGUgc3ludGF4IG1heSBjaGFuZ2UKKysjIG92ZXIgdGltZS4KKysjCisrIyBBbiBlbnRyeSBvZiB0aGUgZm9ybToKKysjCisrIyAgIGNvbmZpZyBHUk9VUF9OQU1FCisrIyAgICAgICBib29sICJvbmUtbGluZSBleHBsYW5hdGlvbiBvZiB3aGF0IHRoaXMgb3B0aW9uIGdyb3VwIGNvbnRyb2xzIgorKyMgICAgICAgaGVscAorKyMgICAgICAgICAgIE11bHRpLWxpbmUgaGVscCBleHBsYWluaW5nIHRoZSBvcHRpb24gZ3JvdXAncyBtZWFuaW5nIGluCisrIyAgICAgICAgICAgc29tZSBkZXRhaWwsIHRlcm1pbmF0ZWQgYnkgaW5kZW50YXRpb24gbGV2ZWwuCisrIworKyMgZGVmaW5lcyBhbiBvcHRpb24gZ3JvdXAgd2hvc2UgdmFyaWFibGUgaXMgR1JPVVBfTkFNRSwgd2l0aAorKyMgbWVhbmluZ2Z1bCB2YWx1ZXMgJ3knIChlbmFibGVkKSBhbmQgJ24nIChkaXNhYmxlZCkuICBUaGUKKysjIGRvY3VtZW50YXRpb24gaXMgZm9ybWF0dGVkIHRvIGJlIGNvbnN1bWVkIGJ5IHNvbWUgc29ydCBvZgorKyMgaW50ZXJhY3RpdmUgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UsIGJ1dCBFR0xJQkMgZG9lc24ndCBoYXZlIHN1Y2ggYW4KKysjIGludGVyZmFjZSB5ZXQuCisrIworKyMgQW4gb3B0aW9uIG1heSBoYXZlIGEgJ2RlcGVuZHMgb24nIGxpbmUsIGluZGljYXRpbmcgd2hpY2ggb3RoZXIgb3B0aW9ucworKyMgbXVzdCBhbHNvIGJlIGVuYWJsZWQgaWYgdGhpcyBvcHRpb24gaXMuICBBdCBwcmVzZW50LCBFR0xJQkMgZG9lc24ndAorKyMgY2hlY2sgdGhhdCB0aGVzZSBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZC4KKysjCisrIyBPcHRpb24gZ3JvdXAgdmFyaWFibGVzIGdldCB0aGVpciBkZWZhdWx0IHZhbHVlcyBmcm9tIHRoZSBmaWxlCisrIyAnb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cycsIGluIHRoZSB0b3AgZGlyZWN0b3J5IG9mIHRoZSBFR0xJQkMgc291cmNlCisrIyB0cmVlLiAgQnkgZGVmYXVsdCwgYWxsIEVHTElCQyBvcHRpb24gZ3JvdXBzIGFyZSBlbmFibGVkIC0tLSB0aGVpcgorKyMgdmFyaWFibGVzIGFyZSBzZXQgdG8gJ3knLgorKyMKKysjIEFmdGVyIGluY2x1ZGluZyAnb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cycsIHRoZSBFR0xJQkMgbWFrZSBtYWNoaW5lcnkKKysjIGluY2x1ZGVzIHRoZSBmaWxlICdvcHRpb24tZ3JvdXBzLmNvbmZpZycgZnJvbSB0aGUgdG9wIG9mIHRoZSBidWlsZAorKyMgdHJlZSwgaWYgaXQgaXMgcHJlc2VudC4gIERldmVsb3BlcnMgY2FuIHBsYWNlIGFzc2lnbm1lbnRzIHRvIG9wdGlvbgorKyMgZ3JvdXAgdmFyaWFibGVzIGluIHRoYXQgZmlsZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMuICBGb3IgZXhhbXBsZSwKKysjIHRvIGRpc2FibGUgYW4gb3B0aW9uIGdyb3VwLCBwbGFjZSBhIGxpbmUgb2YgdGhlIGZvcm06CisrIworKyMgICAgT1BUSU9OX0dST1VQX05BTUUgPSBuCisrIworKyMgaW4gJ29wdGlvbi1ncm91cHMuY29uZmlnJyBhdCB0aGUgdG9wIG9mIHlvdXIgYnVpbGQgdHJlZS4gIFRvCisrIyBleHBsaWNpdGx5IGVuYWJsZSBhbiBvcHRpb24gZ3JvdXAsIHlvdSBtYXkgYWxzbyB3cml0ZToKKysjCisrIyAgICBPUFRJT05fR1JPVVBfTkFNRSA9IHkKKysjCisrIyBhbHRob3VnaCB0aGlzIHNpbXBseSByZWVzdGFibGlzaGVzIHRoZSB2YWx1ZSBhbHJlYWR5IHNldCBieQorKyMgJ29wdGlvbi1ncm91cHMuZGVmYXVsdHMnLgorKworK2NvbmZpZyBFR0xJQkNfQURWQU5DRURfSU5FVDYKKysgICBib29sICJJUHY2IEFkdmFuY2VkIFNvY2tldHMgQVBJIHN1cHBvcnQgKFJGQzM1NDIpIgorKyAgIGRlcGVuZHMgb24gRUdMSUJDX0lORVQKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmdW5jdGlvbnMgc3BlY2lmaWVkIGJ5IFJGQyAzNTQyLAorKyAgICAgICAiQWR2YW5jZWQgU29ja2V0cyBBcHBsaWNhdGlvbiBQcm9ncmFtIEludGVyZmFjZSAoQVBJKSBmb3IKKysgICAgICAgSVB2NiIuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGluZXQ2X29wdF9hcHBlbmQKKysgICAgICAgICBpbmV0Nl9vcHRfZmluZAorKyAgICAgICAgIGluZXQ2X29wdF9maW5pc2gKKysgICAgICAgICBpbmV0Nl9vcHRfZ2V0X3ZhbAorKyAgICAgICAgIGluZXQ2X29wdF9pbml0CisrICAgICAgICAgaW5ldDZfb3B0aW9uX2FsbG9jCisrICAgICAgICAgaW5ldDZfb3B0aW9uX2FwcGVuZAorKyAgICAgICAgIGluZXQ2X29wdGlvbl9maW5kCisrICAgICAgICAgaW5ldDZfb3B0aW9uX2luaXQKKysgICAgICAgICBpbmV0Nl9vcHRpb25fbmV4dAorKyAgICAgICAgIGluZXQ2X29wdGlvbl9zcGFjZQorKyAgICAgICAgIGluZXQ2X29wdF9uZXh0CisrICAgICAgICAgaW5ldDZfb3B0X3NldF92YWwKKysgICAgICAgICBpbmV0Nl9ydGhfYWRkCisrICAgICAgICAgaW5ldDZfcnRoX2dldGFkZHIKKysgICAgICAgICBpbmV0Nl9ydGhfaW5pdAorKyAgICAgICAgIGluZXQ2X3J0aF9yZXZlcnNlCisrICAgICAgICAgaW5ldDZfcnRoX3NlZ21lbnRzCisrICAgICAgICAgaW5ldDZfcnRoX3NwYWNlCisrCisrY29uZmlnIEVHTElCQ19CQUNLVFJBQ0UKKysgICBib29sICJGdW5jdGlvbnMgZm9yIHByb2R1Y2luZyBiYWNrdHJhY2VzIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciBwcm9kdWNpbmcgYSBsaXN0IG9mCisrICAgICAgIHRoZSBmdW5jdGlvbiBjYWxscyB0aGF0IGFyZSBjdXJyZW50bHkgYWN0aXZlIGluIGEgdGhyZWFkLCBmcm9tCisrICAgICAgIHdpdGhpbiB0aGUgdGhyZWFkIGl0c2VsZi4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gdXNlZAorKyAgICAgICB3aXRoaW4gc2lnbmFsIGhhbmRsZXJzLCB0byBwcm9kdWNlIGRpYWdub3N0aWMgb3V0cHV0LgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBiYWNrdHJhY2UKKysgICAgICAgICBiYWNrdHJhY2Vfc3ltYm9scworKyAgICAgICAgIGJhY2t0cmFjZV9zeW1ib2xzX2ZkCisrCisrY29uZmlnIEVHTElCQ19CSUdfTUFDUk9TCisrICAgYm9vbCAiVXNlIGV4dGVuc2l2ZSBpbmxpbmUgY29kZSIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIHNwZWNpZmllcyB3aGV0aGVyIGNlcnRhaW4gcGllY2VzIG9mIGNvZGUKKysgICAgICAgc2hvdWxkIGJlIGlubGluZWQgdG8gYWNoaWV2ZSBtYXhpbXVtIHNwZWVkLiAgSWYgdGhpcyBvcHRpb24KKysgICAgICAgZ3JvdXAgaXMgbm90IHNlbGVjdGVkLCBmdW5jdGlvbiBjYWxscyB3aWxsIGJlIHVzZWQgaW5zdGVhZCwKKysgICAgICAgaGVuY2UgcmVkdWNpbmcgdGhlIGxpYnJhcnkgZm9vdHByaW50LgorKworK2NvbmZpZyBFR0xJQkNfQlNECisrICAgYm9vbCAiQlNELXNwZWNpZmljIGZ1bmN0aW9ucywgYW5kIHRoZWlyIGNvbXBhdGliaWxpdHkgc3R1YnMiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBmdW5jdGlvbnMgc3BlY2lmaWMgdG8gQlNEIGtlcm5lbHMuCisrICAgICAgIEEgbnVtYmVyIG9mIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIHN0dWIgdmVyc2lvbnMgdGhhdCBhcmUgYWxzbworKyAgICAgICBpbmNsdWRlZCBpbiBsaWJyYXJpZXMgYnVpbHQgZm9yIG5vbi1CU0Qgc3lzdGVtcyBmb3IKKysgICAgICAgY29tcGF0aWJpbGl0eS4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgY2hmbGFncworKyAgICAgICAgIGZjaGZsYWdzCisrICAgICAgICAgbGNobW9kCisrICAgICAgICAgcmV2b2tlCisrICAgICAgICAgc2V0bG9naW4KKysKKytjb25maWcgRUdMSUJDX0NYWF9URVNUUworKyAgIGJvb2wgIlRlc3RzIHRoYXQgbGluayBhZ2FpbnN0IHRoZSBzdGFuZGFyZCBDKysgbGlicmFyeS4iCisrICAgZGVwZW5kcyBvbiBQT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPICYmIEVHTElCQ19MSUJNCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBkb2VzIG5vdCBpbmNsdWRlIGFueSBDIGxpYnJhcnkgZnVuY3Rpb25zOworKyAgICAgICBpbnN0ZWFkLCBpdCBjb250cm9scyB3aGljaCBFR0xJQkMgdGVzdHMgYW4gb3JkaW5hcnkgJ21ha2UKKysgICAgICAgdGVzdHMnIHJ1bnMuICBXaXRoIHRoaXMgZ3JvdXAgZGlzYWJsZWQsIHRlc3RzIHRoYXQgd291bGQKKysgICAgICAgbm9ybWFsbHkgbGluayBhZ2FpbnN0IHRoZSBzdGFuZGFyZCBDKysgbGlicmFyeSBhcmUgbm90CisrICAgICAgIHJ1bi4KKysKKysgICAgICAgVGhlIHN0YW5kYXJkIEMrKyBsaWJyYXJ5IGRlcGVuZHMgb24gdGhlIG1hdGggbGlicmFyeSAnbGlibScgYW5kCisrICAgICAgIHRoZSB3aWRlIGNoYXJhY3RlciBJL08gZnVuY3Rpb25zIGluY2x1ZGVkIGluIEVHTElCQy4gIFNvIHRob3NlCisrICAgICAgIG9wdGlvbiBncm91cHMgbXVzdCBiZSBlbmFibGVkIGlmIHRoaXMgdGVzdCBpcyBlbmFibGVkLgorKworK2NvbmZpZyBFR0xJQkNfQ0FUR0VUUworKyAgIGJvb2wgIkZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIG1lc3NhZ2UgY2F0YWxvZ3MiCisrICAgZGVwZW5kcyBvbiBFR0xJQkNfTE9DQUxFX0NPREUKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIG1lc3NhZ2UKKysgICAgICAgY2F0YWxvZ3M6IGNhdG9wZW4sIGNhdGNsb3NlLCBhbmQgY2F0Z2V0cy4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgZGVwZW5kcyBvbiB0aGUgRUdMSUJDX0xPQ0FMRV9DT0RFCisrICAgICAgIG9wdGlvbiBncm91cC4KKysKKytjb25maWcgRUdMSUJDX0NIQVJTRVRTCisrICAgYm9vbCAiaWNvbnYvZ2NvbnYgY2hhcmFjdGVyIHNldCBjb252ZXJzaW9uIGxpYnJhcmllcyIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHN1cHBvcnQgZm9yIGNoYXJhY3RlciBzZXRzIG90aGVyCisrICAgICAgIHRoYW4gQVNDSUkgKEFOU0lfWDMuNC0xOTY4KSBhbmQgVW5pY29kZSBhbmQgSVNPLTEwNjQ2IGluIHRoZWlyCisrICAgICAgIHZhcmlvdXMgZW5jb2RpbmdzLiAgVGhpcyBhZmZlY3RzIGJvdGggdGhlIGNoYXJhY3RlciBzZXRzCisrICAgICAgIHN1cHBvcnRlZCBieSB0aGUgd2lkZSBhbmQgbXVsdGlieXRlIGNoYXJhY3RlciBmdW5jdGlvbnMsIGFuZAorKyAgICAgICB0aG9zZSBzdXBwb3J0ZWQgYnkgdGhlICdpY29udicgZnVuY3Rpb25zLgorKworKyAgICAgICBXaXRoIHRoaXMgb3B0aW9uIGdyb3VwIGRpc2FibGVkLCBFR0xJQkMgc3VwcG9ydHMgb25seSB0aGUKKysgICAgICAgZm9sbG93aW5nIGNoYXJhY3RlciBzZXRzOgorKworKyAgICAgICAgICBBTlNJX1gzLjQgICAgICAgICAtIEFTQ0lJCisrICAgICAgICAgIEFOU0lfWDMuNC0xOTY4CisrICAgICAgICAgIEFOU0lfWDMuNC0xOTg2CisrICAgICAgICAgIEFTQ0lJCisrICAgICAgICAgIENQMzY3CisrICAgICAgICAgIENTQVNDSUkKKysgICAgICAgICAgSUJNMzY3CisrICAgICAgICAgIElTTy1JUi02CisrICAgICAgICAgIElTTzY0Ni1VUworKyAgICAgICAgICBJU09fNjQ2LklSVjoxOTkxCisrICAgICAgICAgIE9TRjAwMDEwMDIwCisrICAgICAgICAgIFVTCisrICAgICAgICAgIFVTLUFTQ0lJCisrCisrICAgICAgICAgIDEwNjQ2LTE6MTk5MyAgICAgIC0gSVNPIDEwNjQ2LCBpbiBiaWctZW5kaWFuIFVDUzQgZm9ybQorKyAgICAgICAgICAxMDY0Ni0xOjE5OTMvVUNTNAorKyAgICAgICAgICBDU1VDUzQKKysgICAgICAgICAgSVNPLTEwNjQ2CisrICAgICAgICAgIElTTy0xMDY0Ni9VQ1M0CisrICAgICAgICAgIE9TRjAwMDEwMTA0CisrICAgICAgICAgIE9TRjAwMDEwMTA1CisrICAgICAgICAgIE9TRjAwMDEwMTA2CisrICAgICAgICAgIFVDUy00CisrICAgICAgICAgIFVDUy00QkUKKysgICAgICAgICAgVUNTNAorKworKyAgICAgICAgICBVQ1MtNExFICAgICAgICAgICAtIElTTyAxMDY0NiwgaW4gbGl0dGxlLWVuZGlhbiBVQ1M0IGZvcm0KKysKKysgICAgICAgICAgSVNPLTEwNjQ2L1VURi04ICAgLSBJU08gMTA2NDYsIGluIFVURi04IGZvcm0KKysgICAgICAgICAgSVNPLTEwNjQ2L1VURjgKKysgICAgICAgICAgSVNPLUlSLTE5MworKyAgICAgICAgICBPU0YwNTAxMDAwMQorKyAgICAgICAgICBVVEYtOAorKyAgICAgICAgICBVVEY4CisrCisrICAgICAgICAgIElTTy0xMDY0Ni9VQ1MyICAgIC0gSVNPIDEwNjQ2LCBpbiB0YXJnZXQtZW5kaWFuIFVDUzIgZm9ybQorKyAgICAgICAgICBPU0YwMDAxMDEwMAorKyAgICAgICAgICBPU0YwMDAxMDEwMQorKyAgICAgICAgICBPU0YwMDAxMDEwMgorKyAgICAgICAgICBVQ1MtMgorKyAgICAgICAgICBVQ1MyCisrCisrICAgICAgICAgIFVDUy0yQkUgICAgICAgICAgIC0gSVNPIDEwNjQ2LCBpbiBiaWctZW5kaWFuIFVDUzIgZm9ybQorKyAgICAgICAgICBVTklDT0RFQklHCisrCisrICAgICAgICAgIFVDUy0yTEUgICAgICAgICAgIC0gSVNPIDEwNjQ2LCBpbiBsaXR0bGUtZW5kaWFuIFVDUzIgZm9ybQorKyAgICAgICAgICBVTklDT0RFTElUVExFCisrCisrICAgICAgICAgIFdDSEFSX1QgICAgICAgICAgIC0gRUdMSUJDJ3MgaW50ZXJuYWwgZm9ybSAodGFyZ2V0LWVuZGlhbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMi1iaXQgSVNPIDEwNjQ2KQorKworK2NvbmZpZyBFR0xJQkNfQ1JZUFQKKysgICBib29sICJFbmNyeXB0aW9uIGxpYnJhcnkiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgYGxpYmNyeXB0JyBsaWJyYXJ5IHdoaWNoCisrICAgICAgIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3Igb25lLXdheSBlbmNyeXB0aW9uLiAgU3VwcG9ydGVkCisrICAgICAgIGVuY3J5cHRpb24gYWxnb3JpdGhtcyBpbmNsdWRlIE1ENSwgU0hBLTI1NiwgU0hBLTUxMiBhbmQgREVTLgorKworK2NvbmZpZyBFR0xJQkNfQ1JZUFRfVUZDCisrICAgYm9vbCAiVWx0cmEgZmFzdCBgY3J5cHQnIGltcGxlbWVudGF0aW9uIgorKyAgIGRlcGVuZHMgb24gRUdMSUJDX0NSWVBUCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBwcm92aWRlcyB1bHRyYSBmYXN0IERFUy1iYXNlZCBpbXBsZW1lbnRhdGlvbiBvZgorKyAgICAgICB0aGUgYGNyeXB0JyBmdW5jdGlvbi4gIFdoZW4gdGhpcyBvcHRpb24gZ3JvdXAgaXMgZGlzYWJsZWQsCisrICAgICAgIChhKSB0aGUgbGlicmFyeSB3aWxsIG5vdCBwcm92aWRlIHRoZSBzZXRrZXlbX3JdIGFuZCBlbmNyeXB0W19yXQorKyAgICAgICBmdW5jdGlvbnMgYW5kIChiKSB0aGUgY3J5cHRbX3JdIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIE5VTEwgYW5kIHNldCB0aGUKKysgICAgICAgZXJybm8gdG8gRU5PU1lTIGlmIC9zYWx0LyBwYXNzZWQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBlaXRoZXIgTUQ1LAorKyAgICAgICBTSEEtMjU2IG9yIFNIQS01MTIgYWxnb3JpdGhtLgorKworK2NvbmZpZyBFR0xJQkNfREJfQUxJQVNFUworKyAgIGJvb2wgIkZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIHRoZSBtYWlsIGFsaWFzZXMgZGF0YWJhc2UiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWR1ZXMgZnVuY3Rpb25zIGZvciBsb29raW5nIHVwIG1haWwKKysgICAgICAgYWxpYXNlcyBpbiAnL2V0Yy9hbGlhc2VzJyBvciB1c2luZyBuc3N3aXRjaC4gIEl0IGluY2x1ZGVzIHRoZQorKyAgICAgICBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGVuZGFsaWFzZW50CisrICAgICAgICAgZ2V0YWxpYXNieW5hbWUKKysgICAgICAgICBnZXRhbGlhc2J5bmFtZV9yCisrICAgICAgICAgZ2V0YWxpYXNlbnQKKysgICAgICAgICBnZXRhbGlhc2VudF9yCisrICAgICAgICAgc2V0YWxpYXNlbnQKKysKKysgICAgICAgV2hlbiB0aGlzIG9wdGlvbiBncm91cCBpcyBkaXNhYmxlZCwgdGhlIE5TUyBzZXJ2aWNlIGxpYnJhcmllcworKyAgICAgICBhbHNvIGxhY2sgc3VwcG9ydCBmb3IgcXVlcnlpbmcgdGhlaXIgbWFpbCBhbGlhcyB0YWJsZXMuCisrCisrY29uZmlnIEVHTElCQ19FTlZaCisrICAgYm9vbCAiRnVuY3Rpb25zIGZvciBoYW5kbGluZyBlbnZ6LXN0eWxlIGVudmlyb25tZW50IHZlY3RvcnMuIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgY29udGFpbnMgZnVuY3Rpb25zIGZvciBjcmVhdGluZyBhbmQgb3BlcmF0aW5nCisrICAgICAgIG9uIGVudnogdmVjdG9ycy4gIEFuICJlbnZ6IHZlY3RvciIgaXMgYSB2ZWN0b3Igb2Ygc3RyaW5ncyBpbiBhCisrICAgICAgIGNvbnRpZ3VvdXMgYmxvY2sgb2YgbWVtb3J5LCB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgYSBuYW1lLXZhbHVlCisrICAgICAgIHBhaXIsIGFuZCBlbGVtZW50cyBhcmUgc2VwYXJhdGVkIGZyb20gdGhlaXIgbmVpZ2hib3JzIGJ5IG51bGwKKysgICAgICAgY2hhcmFjdGVycy4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICBlbnZ6X2FkZCAgICAgICAgZW52el9tZXJnZQorKyAgICAgICAgZW52el9lbnRyeSAgICAgIGVudnpfcmVtb3ZlCisrICAgICAgICBlbnZ6X2dldCAgICAgICAgZW52el9zdHJpcAorKworK2NvbmZpZyBFR0xJQkNfRkNWVAorKyAgIGJvb2wgIkZ1bmN0aW9ucyBmb3IgY29udmVydGluZyBmbG9hdGluZy1wb2ludCBudW1iZXJzIHRvIHN0cmluZ3MiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBmdW5jdGlvbnMgZm9yIGNvbnZlcnRpbmcKKysgICAgICAgZmxvYXRpbmctcG9pbnQgbnVtYmVycyB0byBzdHJpbmdzLgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBlY3Z0ICAgICAgICAgICBxZWN2dAorKwkgZWN2dF9yCQlxZWN2dF9yCisrICAgICAgICAgZmN2dAkJcWZjdnQKKysJIGZjdnRfcgkJcWZjdnRfcgorKyAgICAgICAgIGdjdnQJCXFnY3Z0CisrCisrY29uZmlnIEVHTElCQ19GTVRNU0cKKysgICBib29sICJGdW5jdGlvbnMgZm9yIGZvcm1hdHRpbmcgbWVzc2FnZXMiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBhZGRzZXZlcml0eSAgICBmbXRtc2cKKysKKytjb25maWcgRUdMSUJDX0ZTVEFCCisrICAgYm9vbCAiQWNjZXNzIGZ1bmN0aW9ucyBmb3IgJ2ZzdGFiJyIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyB0aGUgbW91bnQKKysgICAgICAgcG9pbnQgc3BlY2lmaWNhdGlvbiB0YWJsZSwgJy9ldGMvZnN0YWInLiAgVGhlc2UgZnVuY3Rpb25zIGFyZQorKyAgICAgICBub3QgaW5jbHVkZWQgaW4gdGhlIFBPU0lYIHN0YW5kYXJkLCB3aGljaCBwcm92aWRlcyB0aGUKKysgICAgICAgJ2dldG1udGVudCcgZmFtaWx5IG9mIGZ1bmN0aW9ucyBpbnN0ZWFkLgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBlbmRmc2VudCAgICAgICBnZXRmc3NwZWMKKysgICAgICAgICBnZXRmc2VudCAgICAgICBzZXRmc2VudAorKyAgICAgICAgIGdldGZzZmlsZQorKworK2NvbmZpZyBFR0xJQkNfRlRSQVZFUlNFCisrICAgYm9vbCAiRnVuY3Rpb25zIGZvciB0cmF2ZXJzaW5nIGZpbGUgaGllcmFyY2hpZXMiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBmdW5jdGlvbnMgZm9yIHRyYXZlcnNpbmcgZmlsZQorKyAgICAgICBVTklYIGZpbGUgaGllcmFjaGllcy4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgZnRzX29wZW4gICAgICAgZnR3CisrCSBmdHNfcmVhZAluZnR3CisrICAgICAgICAgZnRzX2NoaWxkcmVuCWZ0dzY0CisrCSBmdHNfc2V0CW5mdHc2NAorKyAgICAgICAgIGZ0c19jbG9zZQorKworK2NvbmZpZyBFR0xJQkNfR0VUTE9HSU4KKysgICBib29sICJUaGUgZ2V0bG9naW4gZnVuY3Rpb24iCisrICAgZGVwZW5kcyBvbiBFR0xJQkNfVVRNUAorKyAgIGhlbHAKKysgICAgICAgVGhpcyBmdW5jdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgJ2dldGxvZ2luJyBhbmQgJ2dldGxvZ2luX3InCisrICAgICAgIGZ1bmN0aW9ucywgd2hpY2ggcmV0dXJuIHRoZSB1c2VyIG5hbWUgYXNzb2NpYXRlZCBieSB0aGUgbG9naW4KKysgICAgICAgYWN0aXZpdHkgd2l0aCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgY29udHJvbGxpbmcgdGVybWluYWwuCisrCisrICAgICAgIFdpdGggdGhpcyBvcHRpb24gZ3JvdXAgZGlzYWJsZWQsIHRoZSAnZ2xvYicgZnVuY3Rpb24gd2lsbCBub3QKKysgICAgICAgZmFsbCBiYWNrIG9uICdnZXRsb2dpbicgdG8gZmluZCB0aGUgdXNlcidzIGxvZ2luIG5hbWUgZm9yIHRpbGRlCisrICAgICAgIGV4cGFuc2lvbiB3aGVuIHRoZSAnSE9NRScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldC4KKysKKytjb25maWcgRUdMSUJDX0lETgorKyAgIGJvb2wgIkludGVybmF0aW9uYWwgZG9tYWluIG5hbWVzIHN1cHBvcnQiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgYGxpYmNpZG4nIGxpYnJhcnkgd2hpY2gKKysgICAgICAgcHJvdmlkZXMgc3VwcG9ydCBmb3IgaW50ZXJuYXRpb25hbCBkb21haW4gbmFtZXMuCisrCisrY29uZmlnIEVHTElCQ19JTkVUCisrICAgYm9vbCAiTmV0d29ya2luZyBzdXBwb3J0IgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgbmV0d29ya2luZy1zcGVjaWZpYyBmdW5jdGlvbnMgYW5kCisrICAgICAgIGRhdGEuICBXaXRoIEVHTElCQ19JTkVUIGRpc2FibGVkLCB0aGUgRUdMSUJDCisrICAgICAgIGluc3RhbGxhdGlvbiBhbmQgQVBJIGNoYW5nZXMgYXMgZm9sbG93czoKKysKKysgICAgICAgLSBUaGUgZm9sbG93aW5nIGxpYnJhcmllcyBhcmUgbm90IGluc3RhbGxlZDoKKysKKysgICAgICAgICBsaWJuc2wKKysgICAgICAgICBsaWJuc3NfY29tcGF0CisrICAgICAgICAgbGlibnNzX2RucworKyAgICAgICAgIGxpYm5zc19oZXNpb2QKKysgICAgICAgICBsaWJuc3NfbmlzCisrICAgICAgICAgbGlibnNzX25pc3BsdXMKKysgICAgICAgICBsaWJyZXNvbHYKKysKKysgICAgICAgLSBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGFyZSBvbWl0dGVkIGZyb20gbGliYzoKKysKKysgICAgICAgICBhdXRoZGVzX2NyZWF0ZSAgICAgICAgICAgaHN0cmVycm9yICAgICAgICAgICAgICBzdmNfZmRzZXQKKysgICAgICAgICBhdXRoZGVzX2dldHVjcmVkICAgICAgICAgaHRvbmwgICAgICAgICAgICAgICAgICBzdmNfZ2V0cmVxCisrICAgICAgICAgYXV0aGRlc19wa19jcmVhdGUgICAgICAgIGh0b25zICAgICAgICAgICAgICAgICAgc3ZjX2dldHJlcV9jb21tb24KKysgICAgICAgICBhdXRobm9uZV9jcmVhdGUgICAgICAgICAgaWZfZnJlZW5hbWVpbmRleCAgICAgICBzdmNfZ2V0cmVxX3BvbGwKKysgICAgICAgICBhdXRodW5peF9jcmVhdGUgICAgICAgICAgaWZfaW5kZXh0b25hbWUgICAgICAgICBzdmNfZ2V0cmVxc2V0CisrICAgICAgICAgYXV0aHVuaXhfY3JlYXRlX2RlZmF1bHQgIGlmX25hbWVpbmRleCAgICAgICAgICAgc3ZjX21heF9wb2xsZmQKKysgICAgICAgICBiaW5kcmVzdnBvcnQgICAgICAgICAgICAgaWZfbmFtZXRvaW5kZXggICAgICAgICBzdmNfcG9sbGZkCisrICAgICAgICAgY2FsbHJwYyAgICAgICAgICAgICAgICAgIGluNmFkZHJfYW55ICAgICAgICAgICAgc3ZjcmF3X2NyZWF0ZQorKyAgICAgICAgIGNiY19jcnlwdCAgICAgICAgICAgICAgICBpbjZhZGRyX2xvb3BiYWNrICAgICAgIHN2Y19yZWdpc3RlcgorKyAgICAgICAgIGNsbnRfYnJvYWRjYXN0ICAgICAgICAgICBpbmV0Nl9vcHRfYXBwZW5kICAgICAgIHN2Y19ydW4KKysgICAgICAgICBjbG50X2NyZWF0ZSAgICAgICAgICAgICAgaW5ldDZfb3B0X2ZpbmQgICAgICAgICBzdmNfc2VuZHJlcGx5CisrICAgICAgICAgY2xudF9wY3JlYXRlZXJyb3IgICAgICAgIGluZXQ2X29wdF9maW5pc2ggICAgICAgc3ZjdGNwX2NyZWF0ZQorKyAgICAgICAgIGNsbnRfcGVycm5vICAgICAgICAgICAgICBpbmV0Nl9vcHRfZ2V0X3ZhbCAgICAgIHN2Y3VkcF9idWZjcmVhdGUKKysgICAgICAgICBjbG50X3BlcnJvciAgICAgICAgICAgICAgaW5ldDZfb3B0X2luaXQgICAgICAgICBzdmN1ZHBfY3JlYXRlCisrICAgICAgICAgY2xudHJhd19jcmVhdGUgICAgICAgICAgIGluZXQ2X29wdGlvbl9hbGxvYyAgICAgc3ZjdWRwX2VuYWJsZWNhY2hlCisrICAgICAgICAgY2xudF9zcGNyZWF0ZWVycm9yICAgICAgIGluZXQ2X29wdGlvbl9hcHBlbmQgICAgc3ZjdW5peF9jcmVhdGUKKysgICAgICAgICBjbG50X3NwZXJybm8gICAgICAgICAgICAgaW5ldDZfb3B0aW9uX2ZpbmQgICAgICBzdmN1bml4ZmRfY3JlYXRlCisrICAgICAgICAgY2xudF9zcGVycm9yICAgICAgICAgICAgIGluZXQ2X29wdGlvbl9pbml0ICAgICAgc3ZjX3VucmVnaXN0ZXIKKysgICAgICAgICBjbG50dGNwX2NyZWF0ZSAgICAgICAgICAgaW5ldDZfb3B0aW9uX25leHQgICAgICB1c2VyMm5ldG5hbWUKKysgICAgICAgICBjbG50dWRwX2J1ZmNyZWF0ZSAgICAgICAgaW5ldDZfb3B0aW9uX3NwYWNlICAgICB4ZGVjcnlwdAorKyAgICAgICAgIGNsbnR1ZHBfY3JlYXRlICAgICAgICAgICBpbmV0Nl9vcHRfbmV4dCAgICAgICAgIHhkcl9hY2NlcHRlZF9yZXBseQorKyAgICAgICAgIGNsbnR1bml4X2NyZWF0ZSAgICAgICAgICBpbmV0Nl9vcHRfc2V0X3ZhbCAgICAgIHhkcl9hcnJheQorKyAgICAgICAgIGRlc19zZXRwYXJpdHkgICAgICAgICAgICBpbmV0Nl9ydGhfYWRkICAgICAgICAgIHhkcl9hdXRoZGVzX2NyZWQKKysgICAgICAgICBlY2JfY3J5cHQgICAgICAgICAgICAgICAgaW5ldDZfcnRoX2dldGFkZHIgICAgICB4ZHJfYXV0aGRlc192ZXJmCisrICAgICAgICAgZW5kYWxpYXNlbnQgICAgICAgICAgICAgIGluZXQ2X3J0aF9pbml0ICAgICAgICAgeGRyX2F1dGh1bml4X3Bhcm1zCisrICAgICAgICAgZW5kaG9zdGVudCAgICAgICAgICAgICAgIGluZXQ2X3J0aF9yZXZlcnNlICAgICAgeGRyX2Jvb2wKKysgICAgICAgICBlbmRuZXRlbnQgICAgICAgICAgICAgICAgaW5ldDZfcnRoX3NlZ21lbnRzICAgICB4ZHJfYnl0ZXMKKysgICAgICAgICBlbmRuZXRncmVudCAgICAgICAgICAgICAgaW5ldDZfcnRoX3NwYWNlICAgICAgICB4ZHJfY2FsbGhkcgorKyAgICAgICAgIGVuZHByb3RvZW50ICAgICAgICAgICAgICBpbmV0X2FkZHIgICAgICAgICAgICAgIHhkcl9jYWxsbXNnCisrICAgICAgICAgZW5kcnBjZW50ICAgICAgICAgICAgICAgIGluZXRfYXRvbiAgICAgICAgICAgICAgeGRyX2NoYXIKKysgICAgICAgICBlbmRzZXJ2ZW50ICAgICAgICAgICAgICAgaW5ldF9sbmFvZiAgICAgICAgICAgICB4ZHJfY3J5cHRrZXlhcmcKKysgICAgICAgICBldGhlcl9hdG9uICAgICAgICAgICAgICAgaW5ldF9tYWtlYWRkciAgICAgICAgICB4ZHJfY3J5cHRrZXlhcmcyCisrICAgICAgICAgZXRoZXJfYXRvbl9yICAgICAgICAgICAgIGluZXRfbmV0b2YgICAgICAgICAgICAgeGRyX2NyeXB0a2V5cmVzCisrICAgICAgICAgZXRoZXJfaG9zdHRvbiAgICAgICAgICAgIGluZXRfbmV0d29yayAgICAgICAgICAgeGRyX2Rlc19ibG9jaworKyAgICAgICAgIGV0aGVyX2xpbmUgICAgICAgICAgICAgICBpbmV0X25zYXBfYWRkciAgICAgICAgIHhkcl9kb3VibGUKKysgICAgICAgICBldGhlcl9udG9hICAgICAgICAgICAgICAgaW5ldF9uc2FwX250b2EgICAgICAgICB4ZHJfZW51bQorKyAgICAgICAgIGV0aGVyX250b2FfciAgICAgICAgICAgICBpbmV0X250b2EgICAgICAgICAgICAgIHhkcl9mbG9hdAorKyAgICAgICAgIGV0aGVyX250b2hvc3QgICAgICAgICAgICBpbmV0X250b3AgICAgICAgICAgICAgIHhkcl9mcmVlCisrICAgICAgICAgZnJlZWFkZHJpbmZvICAgICAgICAgICAgIGluZXRfcHRvbiAgICAgICAgICAgICAgeGRyX2dldGNyZWRyZXMKKysgICAgICAgICBmcmVlaWZhZGRycyAgICAgICAgICAgICAgaW5uZXRnciAgICAgICAgICAgICAgICB4ZHJfaHlwZXIKKysgICAgICAgICBnYWlfc3RyZXJyb3IgICAgICAgICAgICAgaXJ1c2Vyb2sgICAgICAgICAgICAgICB4ZHJfaW50CisrICAgICAgICAgZ2V0YWRkcmluZm8gICAgICAgICAgICAgIGlydXNlcm9rX2FmICAgICAgICAgICAgeGRyX2ludDE2X3QKKysgICAgICAgICBnZXRhbGlhc2J5bmFtZSAgICAgICAgICAga2V5X2RlY3J5cHRzZXNzaW9uICAgICB4ZHJfaW50MzJfdAorKyAgICAgICAgIGdldGFsaWFzYnluYW1lX3IgICAgICAgICBrZXlfZGVjcnlwdHNlc3Npb25fcGsgIHhkcl9pbnQ2NF90CisrICAgICAgICAgZ2V0YWxpYXNlbnQgICAgICAgICAgICAgIGtleV9lbmNyeXB0c2Vzc2lvbiAgICAgeGRyX2ludDhfdAorKyAgICAgICAgIGdldGFsaWFzZW50X3IgICAgICAgICAgICBrZXlfZW5jcnlwdHNlc3Npb25fcGsgIHhkcl9rZXlidWYKKysgICAgICAgICBnZXRob3N0YnlhZGRyICAgICAgICAgICAga2V5X2dlbmRlcyAgICAgICAgICAgICB4ZHJfa2V5X25ldHN0YXJnCisrICAgICAgICAgZ2V0aG9zdGJ5YWRkcl9yICAgICAgICAgIGtleV9nZXRfY29udiAgICAgICAgICAgeGRyX2tleV9uZXRzdHJlcworKyAgICAgICAgIGdldGhvc3RieW5hbWUgICAgICAgICAgICBrZXlfc2VjcmV0a2V5X2lzX3NldCAgIHhkcl9rZXlzdGF0dXMKKysgICAgICAgICBnZXRob3N0YnluYW1lMiAgICAgICAgICAga2V5X3NldG5ldCAgICAgICAgICAgICB4ZHJfbG9uZworKyAgICAgICAgIGdldGhvc3RieW5hbWUyX3IgICAgICAgICBrZXlfc2V0c2VjcmV0ICAgICAgICAgIHhkcl9sb25nbG9uZ190CisrICAgICAgICAgZ2V0aG9zdGJ5bmFtZV9yICAgICAgICAgIG5ldG5hbWUyaG9zdCAgICAgICAgICAgeGRybWVtX2NyZWF0ZQorKyAgICAgICAgIGdldGhvc3RlbnQgICAgICAgICAgICAgICBuZXRuYW1lMnVzZXIgICAgICAgICAgIHhkcl9uZXRuYW1lc3RyCisrICAgICAgICAgZ2V0aG9zdGVudF9yICAgICAgICAgICAgIG50b2hsICAgICAgICAgICAgICAgICAgeGRyX25ldG9iagorKyAgICAgICAgIGdldGlmYWRkcnMgICAgICAgICAgICAgICBudG9ocyAgICAgICAgICAgICAgICAgIHhkcl9vcGFxdWUKKysgICAgICAgICBnZXRpcHY0c291cmNlZmlsdGVyICAgICAgcGFzc3dkMmRlcyAgICAgICAgICAgICB4ZHJfb3BhcXVlX2F1dGgKKysgICAgICAgICBnZXRfbXlhZGRyZXNzICAgICAgICAgICAgcG1hcF9nZXRtYXBzICAgICAgICAgICB4ZHJfcG1hcAorKyAgICAgICAgIGdldG5hbWVpbmZvICAgICAgICAgICAgICBwbWFwX2dldHBvcnQgICAgICAgICAgIHhkcl9wbWFwbGlzdAorKyAgICAgICAgIGdldG5ldGJ5YWRkciAgICAgICAgICAgICBwbWFwX3JtdGNhbGwgICAgICAgICAgIHhkcl9wb2ludGVyCisrICAgICAgICAgZ2V0bmV0YnlhZGRyX3IgICAgICAgICAgIHBtYXBfc2V0ICAgICAgICAgICAgICAgeGRyX3F1YWRfdAorKyAgICAgICAgIGdldG5ldGJ5bmFtZSAgICAgICAgICAgICBwbWFwX3Vuc2V0ICAgICAgICAgICAgIHhkcnJlY19jcmVhdGUKKysgICAgICAgICBnZXRuZXRieW5hbWVfciAgICAgICAgICAgcmNtZCAgICAgICAgICAgICAgICAgICB4ZHJyZWNfZW5kb2ZyZWNvcmQKKysgICAgICAgICBnZXRuZXRlbnQgICAgICAgICAgICAgICAgcmNtZF9hZiAgICAgICAgICAgICAgICB4ZHJyZWNfZW9mCisrICAgICAgICAgZ2V0bmV0ZW50X3IgICAgICAgICAgICAgIHJlZ2lzdGVycnBjICAgICAgICAgICAgeGRycmVjX3NraXByZWNvcmQKKysgICAgICAgICBnZXRuZXRncmVudCAgICAgICAgICAgICAgcmVzX2luaXQgICAgICAgICAgICAgICB4ZHJfcmVmZXJlbmNlCisrICAgICAgICAgZ2V0bmV0Z3JlbnRfciAgICAgICAgICAgIHJleGVjICAgICAgICAgICAgICAgICAgeGRyX3JlamVjdGVkX3JlcGx5CisrICAgICAgICAgZ2V0bmV0bmFtZSAgICAgICAgICAgICAgIHJleGVjX2FmICAgICAgICAgICAgICAgeGRyX3JlcGx5bXNnCisrICAgICAgICAgZ2V0cHJvdG9ieW5hbWUgICAgICAgICAgIHJleGVjb3B0aW9ucyAgICAgICAgICAgeGRyX3JtdGNhbGxfYXJncworKyAgICAgICAgIGdldHByb3RvYnluYW1lX3IgICAgICAgICBycGNfY3JlYXRlZXJyICAgICAgICAgIHhkcl9ybXRjYWxscmVzCisrICAgICAgICAgZ2V0cHJvdG9ieW51bWJlciAgICAgICAgIHJyZXN2cG9ydCAgICAgICAgICAgICAgeGRyX3Nob3J0CisrICAgICAgICAgZ2V0cHJvdG9ieW51bWJlcl9yICAgICAgIHJyZXN2cG9ydF9hZiAgICAgICAgICAgeGRyX3NpemVvZgorKyAgICAgICAgIGdldHByb3RvZW50ICAgICAgICAgICAgICBydGltZSAgICAgICAgICAgICAgICAgIHhkcnN0ZGlvX2NyZWF0ZQorKyAgICAgICAgIGdldHByb3RvZW50X3IgICAgICAgICAgICBydXNlcm9rICAgICAgICAgICAgICAgIHhkcl9zdHJpbmcKKysgICAgICAgICBnZXRwdWJsaWNrZXkgICAgICAgICAgICAgcnVzZXJva19hZiAgICAgICAgICAgICB4ZHJfdV9jaGFyCisrICAgICAgICAgZ2V0cnBjYnluYW1lICAgICAgICAgICAgIHJ1c2VycGFzcyAgICAgICAgICAgICAgeGRyX3VfaHlwZXIKKysgICAgICAgICBnZXRycGNieW5hbWVfciAgICAgICAgICAgc2V0YWxpYXNlbnQgICAgICAgICAgICB4ZHJfdV9pbnQKKysgICAgICAgICBnZXRycGNieW51bWJlciAgICAgICAgICAgc2V0aG9zdGVudCAgICAgICAgICAgICB4ZHJfdWludDE2X3QKKysgICAgICAgICBnZXRycGNieW51bWJlcl9yICAgICAgICAgc2V0aXB2NHNvdXJjZWZpbHRlciAgICB4ZHJfdWludDMyX3QKKysgICAgICAgICBnZXRycGNlbnQgICAgICAgICAgICAgICAgc2V0bmV0ZW50ICAgICAgICAgICAgICB4ZHJfdWludDY0X3QKKysgICAgICAgICBnZXRycGNlbnRfciAgICAgICAgICAgICAgc2V0bmV0Z3JlbnQgICAgICAgICAgICB4ZHJfdWludDhfdAorKyAgICAgICAgIGdldHJwY3BvcnQgICAgICAgICAgICAgICBzZXRwcm90b2VudCAgICAgICAgICAgIHhkcl91X2xvbmcKKysgICAgICAgICBnZXRzZWNyZXRrZXkgICAgICAgICAgICAgc2V0cnBjZW50ICAgICAgICAgICAgICB4ZHJfdV9sb25nbG9uZ190CisrICAgICAgICAgZ2V0c2VydmJ5bmFtZSAgICAgICAgICAgIHNldHNlcnZlbnQgICAgICAgICAgICAgeGRyX3VuaW9uCisrICAgICAgICAgZ2V0c2VydmJ5bmFtZV9yICAgICAgICAgIHNldHNvdXJjZWZpbHRlciAgICAgICAgeGRyX3VuaXhjcmVkCisrICAgICAgICAgZ2V0c2VydmJ5cG9ydCAgICAgICAgICAgIHN2Y2F1dGhkZXNfc3RhdHMgICAgICAgeGRyX3VfcXVhZF90CisrICAgICAgICAgZ2V0c2VydmJ5cG9ydF9yICAgICAgICAgIHN2Y2Vycl9hdXRoICAgICAgICAgICAgeGRyX3Vfc2hvcnQKKysgICAgICAgICBnZXRzZXJ2ZW50ICAgICAgICAgICAgICAgc3ZjZXJyX2RlY29kZSAgICAgICAgICB4ZHJfdmVjdG9yCisrICAgICAgICAgZ2V0c2VydmVudF9yICAgICAgICAgICAgIHN2Y2Vycl9ub3Byb2MgICAgICAgICAgeGRyX3ZvaWQKKysgICAgICAgICBnZXRzb3VyY2VmaWx0ZXIgICAgICAgICAgc3ZjZXJyX25vcHJvZyAgICAgICAgICB4ZHJfd3JhcHN0cmluZworKyAgICAgICAgIGhfZXJybGlzdCAgICAgICAgICAgICAgICBzdmNlcnJfcHJvZ3ZlcnMgICAgICAgIHhlbmNyeXB0CisrICAgICAgICAgaF9lcnJubyAgICAgICAgICAgICAgICAgIHN2Y2Vycl9zeXN0ZW1lcnIgICAgICAgeHBydF9yZWdpc3RlcgorKyAgICAgICAgIGhlcnJvciAgICAgICAgICAgICAgICAgICBzdmNlcnJfd2Vha2F1dGggICAgICAgIHhwcnRfdW5yZWdpc3RlcgorKyAgICAgICAgIGhfbmVyciAgICAgICAgICAgICAgICAgICBzdmNfZXhpdAorKyAgICAgICAgIGhvc3QybmV0bmFtZSAgICAgICAgICAgICBzdmNmZF9jcmVhdGUKKysKKysgICAgICAgLSBUaGUgcnBjZ2VuLCBuc2NkLCBhbmQgcnBjaW5mbyBjb21tYW5kcyBhcmUgbm90IGluc3RhbGxlZC4KKysKKysgICAgICAgLSBUaGUgJ3JwYycgZmlsZSAoYSB0ZXh0IGZpbGUgbGlzdGluZyBSUEMgc2VydmljZXMpIGlzIG5vdCBpbnN0YWxsZWQuCisrCisrICAgICAgIFNvY2tldC1yZWxhdGVkIHN5c3RlbSBjYWxscyBkbyBub3QgZmFsbCBpbiB0aGlzIG9wdGlvbiBncm91cCwKKysgICAgICAgYmVjYXVzZSBtYW55IGFyZSBhbHNvIHVzZWQgZm9yIG90aGVyIGludGVyLXByb2Nlc3MKKysgICAgICAgY29tbXVuaWNhdGlvbiBtZWNoYW5pc21zLiAgRm9yIGV4YW1wbGUsIHRoZSAnc3lzbG9nJyByb3V0aW5lcworKyAgICAgICB1c2UgVW5peC1kb21haW4gc29ja2V0cyB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBzeXNsb2cgZGFlbW9uOworKyAgICAgICBzeXNsb2cgaXMgdmFsdWFibGUgaW4gbm9uLW5ldHdvcmtlZCBjb250ZXh0cy4KKysKKytjb25maWcgRUdMSUJDX0lORVRfQU5MCisrICAgYm9vbCAiQXN5bmNocm9ub3VzIG5hbWUgbG9va3VwIgorKyAgIGRlcGVuZHMgb24gRUdMSUJDX0lORVQKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBgbGliYW5sJyBsaWJyYXJ5IHdoaWNoCisrICAgICAgIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGFzeW5jaHJvbm91cyBuYW1lIGxvb2t1cC4KKysKKytjb25maWcgRUdMSUJDX0xJQk0KKysgICBib29sICJsaWJtIChtYXRoIGxpYnJhcnkpIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlICdsaWJtJyBsaWJyYXJ5LCBjb250YWluaW5nCisrICAgICAgIG1hdGhlbWF0aWNhbCBmdW5jdGlvbnMuICBJZiB0aGlzIG9wdGlvbiBncm91cCBpcyBvbWl0dGVkLCB0aGVuCisrICAgICAgIGFuIEVHTElCQyBpbnN0YWxsYXRpb24gZG9lcyBub3QgaW5jbHVkZSBzaGFyZWQgb3IgdW5zaGFyZWQgdmVyc2lvbnMKKysgICAgICAgb2YgdGhlIG1hdGggbGlicmFyeS4KKysKKysgICAgICAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgcmVtb3ZlIGFsbCBmbG9hdGluZy1wb2ludCByZWxhdGVkCisrICAgICAgIGZ1bmN0aW9uYWxpdHkgZnJvbSBFR0xJQkM7IGZvciBleGFtcGxlLCAncHJpbnRmJyBhbmQgJ3NjYW5mJworKyAgICAgICBjYW4gc3RpbGwgcHJpbnQgYW5kIHJlYWQgZmxvYXRpbmctcG9pbnQgdmFsdWVzIHdpdGggdGhpcyBvcHRpb24KKysgICAgICAgZ3JvdXAgZGlzYWJsZWQuCisrCisrICAgICAgIE5vdGUgdGhhdCB0aGUgSVNPIFN0YW5kYXJkIEMrKyBsaWJyYXJ5ICdsaWJzdGRjKysnIGRlcGVuZHMgb24KKysgICAgICAgRUdMSUJDJ3MgbWF0aCBsaWJyYXJ5ICdsaWJtJy4gIElmIHlvdSBkaXNhYmxlIHRoaXMgb3B0aW9uCisrICAgICAgIGdyb3VwLCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBidWlsZCAnbGlic3RkYysrJyBhZ2FpbnN0IHRoZQorKyAgICAgICByZXN1bHRpbmcgRUdMSUJDIGluc3RhbGxhdGlvbi4KKysKKytjb25maWcgRUdMSUJDX0xPQ0FMRVMKKysgICBib29sICJMb2NhbGUgZGVmaW5pdGlvbnMiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBhbGwgbG9jYWxlIGRlZmluaXRpb25zIG90aGVyIHRoYW4KKysgICAgICAgdGhhdCBmb3IgdGhlICJDIiBsb2NhbGUuICBJZiB0aGlzIG9wdGlvbiBncm91cCBpcyBvbWl0dGVkLCB0aGVuCisrICAgICAgIG9ubHkgdGhlICJDIiBsb2NhbGUgaXMgc3VwcG9ydGVkLgorKworKworK2NvbmZpZyBFR0xJQkNfTE9DQUxFX0NPREUKKysgICBib29sICJMb2NhbGUgZnVuY3Rpb25zIgorKyAgIGRlcGVuZHMgb24gUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgbG9jYWxlIHN1cHBvcnQgZnVuY3Rpb25zLCBwcm9ncmFtcywKKysgICAgICAgYW5kIGxpYnJhcmllcy4gIFdpdGggRUdMSUJDX0xPQ0FMRV9DT0RFIGRpc2FibGVkLAorKyAgICAgICBFR0xJQkMgc3VwcG9ydHMgb25seSB0aGUgJ0MnIGxvY2FsZSAoYWxzbyBrbm93biBhcyAnUE9TSVgnKSwKKysgICAgICAgYW5kIGlnbm9yZXMgdGhlIHNldHRpbmdzIG9mIHRoZSAnTEFORycgYW5kICdMQ18qJyBlbnZpcm9ubWVudAorKyAgICAgICB2YXJpYWJsZXMuCisrCisrICAgICAgIFdpdGggRUdMSUJDX0xPQ0FMRV9DT0RFIGRpc2FibGVkLCB0aGUgZm9sbG93aW5nCisrICAgICAgIGZ1bmN0aW9ucyBhcmUgb21pdHRlZCBmcm9tIGxpYmM6CisrCisrICAgICAgICAgZHVwbG9jYWxlICAgbG9jYWxlY29udiAgbmxfbGFuZ2luZm8gICAgcnBtYXRjaCAgc3RyZm1vbl9sCisrICAgICAgICAgZnJlZWxvY2FsZSAgbmV3bG9jYWxlICAgbmxfbGFuZ2luZm9fbCAgc3RyZm1vbiAgdXNlbG9jYWxlCisrCisrICAgICAgIEZ1cnRoZXJtb3JlLCBvbmx5IHRoZSBMQ19DVFlQRSBhbmQgTENfVElNRSBjYXRlZ29yaWVzIG9mIHRoZQorKyAgICAgICBzdGFuZGFyZCAiQyIgbG9jYWxlIGFyZSBhdmFpbGFibGUuCisrCisrICAgICAgIFRoZSBFR0xJQkNfQ0FUR0VUUyBvcHRpb24gZ3JvdXAgZGVwZW5kcyBvbiB0aGlzIG9wdGlvbiBncm91cC4KKysKKysKKytjb25maWcgRUdMSUJDX01FTVVTQUdFCisrICAgYm9vbCAiTWVtb3J5IHByb2ZpbGluZyBsaWJyYXJ5IgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGBsaWJtZW11c2FnZScgbGlicmFyeSBhbmQKKysgICAgICAgdGhlIGBtZW11c2FnZScgYW5kIGBtZW11c2FnZXN0YXQnIHV0aWxpdGllcy4KKysgICAgICAgVGhlc2UgY29tcG9uZW50cyBwcm92aWRlIG1lbW9yeSBwcm9maWxpbmcgZnVuY3Rpb25zLgorKworK2NvbmZpZyBFR0xJQkNfTUVNVVNBR0VfREVGQVVMVF9CVUZGRVJfU0laRQorKyAgIGludCAiTWVtb3J5IHByb2ZpbGluZyBsaWJyYXJ5IGJ1ZmZlciBzaXplIgorKyAgIGRlcGVuZHMgb24gRUdMSUJDX01FTVVTQUdFCisrICAgZGVmYXVsdCAiMzI3NjgiCisrICAgaGVscAorKyAgICAgICBMaWJtZW11c2FnZSBsaWJyYXJ5IGJ1ZmZlcnMgdGhlIHByb2ZpbGluZyBkYXRhIGluIG1lbW9yeQorKyAgICAgICBiZWZvcmUgd3JpdGluZyBpdCBvdXQgdG8gZGlzay4gIEJ5IGRlZmF1bHQsIHRoZSBsaWJyYXJ5CisrICAgICAgIGFsbG9jYXRlcyAxLjVNIGJ1ZmZlciwgd2hpY2ggY2FuIGJlIHN1YnN0YW50aWFsIGZvciBzb21lCisrICAgICAgIHN5c3RlbXMuICBFR0xJQkNfTUVNVVNBR0VfREVGQVVMVF9CVUZGRVJfU0laRSBvcHRpb24KKysgICAgICAgYWxsb3dzIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBidWZmZXIgc2l6ZS4gIEl0IHNwZWNpZmllcworKyAgICAgICB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhlIGJ1ZmZlciBzaG91bGQgaGF2ZS4KKysgICAgICAgT24gbW9zdCBhcmNoaXRlY3R1cmVzIG9uZSBidWZmZXIgZW50cnkgYW1vdW50cyB0byA0OCBieXRlcywKKysgICAgICAgc28gc2V0dGluZyB0aGlzIG9wdGlvbiB0byB0aGUgdmFsdWUgb2YgNTEyIHdpbGwgcmVkdWNlIHRoZSBzaXplIG9mCisrICAgICAgIHRoZSBtZW1vcnkgYnVmZmVyIHRvIDI0Sy4KKysKKytjb25maWcgRUdMSUJDX05JUworKyAgIGJvb2wgIlN1cHBvcnQgZm9yIE5JUywgTklTKywgYW5kIHRoZSBzcGVjaWFsICdjb21wYXQnIHNlcnZpY2VzLiIKKysgICBkZXBlbmRzIG9uIEVHTElCQ19JTkVUICYmIEVHTElCQ19TVU5SUEMKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBOSVMsIE5JUyssIGFuZCAnY29tcGF0JyBOYW1lCisrICAgICAgIFNlcnZpY2UgU3dpdGNoIHNlcnZpY2UgbGlicmFyaWVzLiAgV2hlbiBpdCBpcyBkaXNhYmxlZCwgdGhvc2UKKysgICAgICAgc2VydmljZXMgbGlicmFyaWVzIGFyZSBub3QgaW5zdGFsbGVkOyB5b3Ugc2hvdWxkIHJlbW92ZSBhbnkKKysgICAgICAgcmVmZXJlbmNlcyB0byB0aGVtIGZyb20geW91ciAnbnNzd2l0Y2guY29uZicgZmlsZS4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgZGVwZW5kcyBvbiB0aGUgRUdMSUJDX0lORVQgb3B0aW9uCisrICAgICAgIGdyb3VwOyB5b3UgbXVzdCBlbmFibGUgdGhhdCB0byBlbmFibGUgdGhpcyBvcHRpb24gZ3JvdXAuCisrCisrY29uZmlnIEVHTElCQ19OU1NXSVRDSAorKyAgIGJvb2wgIk5hbWUgc2VydmljZSBzd2l0Y2ggKG5zc3dpdGNoKSBzdXBwb3J0IgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgc3VwcG9ydCBmb3IgdGhlICduc3N3aXRjaCcgZmFjaWxpdHkuCisrICAgICAgIFdpdGggdGhpcyBvcHRpb24gZ3JvdXAgZW5hYmxlZCwgYWxsIEVHTElCQyBmdW5jdGlvbnMgZm9yCisrICAgICAgIGFjY2Vzc2luZyB2YXJpb3VzIHN5c3RlbSBkYXRhYmFzZXMgKHBhc3N3b3JkcyBhbmQgZ3JvdXBzOworKyAgICAgICBuZXR3b3JraW5nOyBhbGlhc2VzOyBwdWJsaWMga2V5czsgYW5kIHNvIG9uKSBjb25zdWx0IHRoZQorKyAgICAgICAnL2V0Yy9uc3N3aXRjaC5jb25mJyBjb25maWd1cmF0aW9uIGZpbGUgdG8gZGVjaWRlIGhvdyB0byBoYW5kbGUKKysgICAgICAgcXVlcmllcy4KKysKKysgICAgICAgV2l0aCB0aGlzIG9wdGlvbiBncm91cCBkaXNhYmxlZCwgRUdMSUJDIHVzZXMgYSBmaXhlZCBsaXN0IG9mCisrICAgICAgIHNlcnZpY2VzIHRvIHNhdGlzZnkgcXVlcmllcyBvbiBlYWNoIGRhdGFiYXNlLCBhcyByZXF1ZXN0ZWQgYnkKKysgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyBzcGVjaWZpZWQgd2hlbiBFR0xJQkMgaXMgYnVpbHQuICBZb3VyCisrICAgICAgICdvcHRpb24tZ3JvdXBzLmNvbmZpZycgZmlsZSBtdXN0IHNldCB0aGUgZm9sbG93aW5nIHR3bworKyAgICAgICB2YXJpYWJsZXM6CisrCisrY29uZmlnIEVHTElCQ19OU1NXSVRDSF9GSVhFRF9DT05GSUcKKysgICBzdHJpbmcgIk5zc3dpdGNoIGZpeGVkIGNvbmZpZyBmaWxlbmFtZSIKKysgICBkZXBlbmRzIG9uICFFR0xJQkNfTlNTV0lUQ0gKKysgICBkZWZhdWx0ICIiCisrICAgaGVscAorKyAgICAgICAgICBTZXQgdGhpcyB0byB0aGUgbmFtZSBvZiBhIGZpbGUgd2hvc2UgY29udGVudHMgb2JzZXJ2ZSB0aGUKKysgICAgICAgICAgc2FtZSBzeW50YXggYXMgYW4gb3JkaW5hcnkgJy9ldGMvbnNzd2l0Y2guY29uZicgZmlsZS4gIFRoZQorKyAgICAgICAgICBFR0xJQkMgYnVpbGQgcHJvY2VzcyBwYXJzZXMgdGhpcyBmaWxlIGp1c3QgYXMgRUdMSUJDIHdvdWxkCisrICAgICAgICAgIGF0IHJ1biB0aW1lIGlmIEVHTElCQ19OU1NXSVRDSCB3ZXJlIGVuYWJsZWQsIGFuZAorKyAgICAgICAgICBwcm9kdWNlcyBhIEMgbGlicmFyeSB0aGF0IHVzZXMgdGhlIG5zc3dpdGNoIHNlcnZpY2UKKysgICAgICAgICAgbGlicmFyaWVzIHRvIHNlYXJjaCBmb3IgZGF0YWJhc2UgZW50cmllcyBhcyB0aGlzIGZpbGUKKysgICAgICAgICAgc3BlY2lmaWVzLCBpbnN0ZWFkIG9mIGNvbnN1bHRpbmcgJy9ldGMvbnNzd2l0Y2guY29uZicgYXQgcnVuCisrICAgICAgICAgIHRpbWUuCisrCisrICAgICAgICAgIFRoaXMgc2hvdWxkIGJlIGFuIGFic29sdXRlIGZpbGVuYW1lLiAgVGhlIEVHTElCQyBidWlsZAorKyAgICAgICAgICBwcm9jZXNzIG1heSB1c2UgaXQgZnJvbSBzZXZlcmFsIGRpZmZlcmVudCB3b3JraW5nCisrICAgICAgICAgIGRpcmVjdG9yaWVzLiAgSXQgbWF5IGluY2x1ZGUgcmVmZXJlbmNlcyB0byBNYWtlZmlsZQorKyAgICAgICAgICB2YXJpYWJsZXMgbGlrZSAnY29tbW9uLW9ianBmeCcgKHRoZSB0b3Agb2YgdGhlIGJ1aWxkIHRyZWUsCisrICAgICAgICAgIHdpdGggYSB0cmFpbGluZyBzbGFzaCksIG9yICcuLicgKHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLAorKyAgICAgICAgICB3aXRoIGEgdHJhaWxpbmcgc2xhc2gpLgorKworKyAgICAgICAgICBUaGUgRUdMSUJDIHNvdXJjZSB0cmVlIGluY2x1ZGVzIGEgc2FtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZQorKyAgICAgICAgICBuYW1lZCAnbnNzL2ZpeGVkLW5zc3dpdGNoLmNvbmYnOyBmb3Igc2ltcGxlIGNvbmZpZ3VyYXRpb25zLAorKyAgICAgICAgICB5b3Ugd2lsbCBwcm9iYWJseSB3YW50IHRvIGRlbGV0ZSByZWZlcmVuY2VzIHRvIGRhdGFiYXNlcyBub3QKKysgICAgICAgICAgbmVlZGVkIG9uIHlvdXIgc3lzdGVtLgorKworK2NvbmZpZyBFR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TCisrICAgc3RyaW5nICJOc3N3aXRjaCBmaXhlZCBmdW5jdGlvbnMgZmlsZW5hbWUiCisrICAgZGVwZW5kcyBvbiAhRUdMSUJDX05TU1dJVENICisrICAgZGVmYXVsdCAiIgorKyAgIGhlbHAKKysgICAgICAgICAgVGhlIEVHTElCQyBidWlsZCBwcm9jZXNzIHVzZXMgdGhpcyBmaWxlIHRvIGRlY2lkZSB3aGljaAorKyAgICAgICAgICBmdW5jdGlvbnMgdG8gbWFrZSBhdmFpbGFibGUgZnJvbSB3aGljaCBzZXJ2aWNlIGxpYnJhcmllcy4KKysgICAgICAgICAgVGhlIGZpbGUgJ25zcy9maXhlZC1uc3N3aXRjaC5mdW5jdGlvbnMnIHNlcnZlcyBhcyBhIHNhbXBsZQorKyAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoaXMgc2V0dGluZywgYW5kIGV4cGxhaW5zIGl0cyBzeW50YXgKKysgICAgICAgICAgYW5kIG1lYW5pbmcgaW4gbW9yZSBkZXRhaWwuCisrCisrICAgICAgICAgIFRoaXMgc2hvdWxkIGJlIGFuIGFic29sdXRlIGZpbGUgbmFtZS4gIFRoZSBFR0xJQkMgYnVpbGQKKysgICAgICAgICAgcHJvY2VzcyBtYXkgdXNlIGl0IGZyb20gc2V2ZXJhbCBkaWZmZXJlbnQgd29ya2luZworKyAgICAgICAgICBkaXJlY3Rvcmllcy4gIEl0IG1heSBpbmNsdWRlIHJlZmVyZW5jZXMgdG8gTWFrZWZpbGUKKysgICAgICAgICAgdmFyaWFibGVzIGxpa2UgJ2NvbW1vbi1vYmpwZngnICh0aGUgdG9wIG9mIHRoZSBidWlsZCB0cmVlLAorKyAgICAgICAgICB3aXRoIGEgdHJhaWxpbmcgc2xhc2gpLCBvciAnLi4nICh0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSwKKysgICAgICAgICAgd2l0aCBhIHRyYWlsaW5nIHNsYXNoKS4KKysKKysgICAgICAgICAgQmUgc3VyZSB0byBtZW50aW9uIGVhY2ggZnVuY3Rpb24gaW4gZWFjaCBzZXJ2aWNlIHlvdSB3aXNoIHRvCisrICAgICAgICAgIHVzZS4gIElmIHlvdSBkbyBub3QgbWVudGlvbiBhIHNlcnZpY2UncyBmdW5jdGlvbiBoZXJlLCB0aGUKKysgICAgICAgICAgRUdMSUJDIGRhdGFiYXNlIGFjY2VzcyBmdW5jdGlvbnMgd2lsbCBub3QgZmluZCBpdCwgZXZlbiBpZgorKyAgICAgICAgICBpdCBpcyBsaXN0ZWQgaW4gdGhlIEVHTElCQ19OU1NXSVRDSF9GSVhFRF9DT05GSUcKKysgICAgICAgICAgZmlsZS4KKysKKysgICAgICAgICAgSW4gdGhpcyBhcnJhbmdlbWVudCwgRUdMSUJDIHdpbGwgbm90IHVzZSB0aGUgJ2Rsb3BlbicgYW5kCisrICAgICAgICAgICdkbHN5bScgZnVuY3Rpb25zIHRvIGZpbmQgZGF0YWJhc2UgYWNjZXNzIGZ1bmN0aW9ucy4gIEluc3RlYWQsCisrICAgICAgICAgIGxpYmMgaGFyZC1jb2RlcyByZWZlcmVuY2VzIHRvIHRoZSBzZXJ2aWNlIGxpYnJhcmllcycgZGF0YWJhc2UKKysgICAgICAgICAgYWNjZXNzIGZ1bmN0aW9ucy4gIFlvdSBtdXN0IGV4cGxpY2l0bHkgbGluayB5b3VyIHByb2dyYW0KKysgICAgICAgICAgYWdhaW5zdCB0aGUgbmFtZSBzZXJ2aWNlIGxpYnJhcmllcyAodGhvc2Ugd2hvc2UgbmFtZXMgc3RhcnQKKysgICAgICAgICAgd2l0aCAnbGlibnNzXycsIGluIHRoZSBzeXNyb290J3MgJy9saWInIGRpcmVjdG9yeSkgd2hvc2UKKysgICAgICAgICAgZnVuY3Rpb25zIHlvdSBpbnRlbmQgdG8gdXNlLiAgVGhpcyBhcnJhbmdlbWVudCBoZWxwcworKyAgICAgICAgICBzeXN0ZW0td2lkZSBzdGF0aWMgYW5hbHlzaXMgdG9vbHMgZGVjaWRlIHdoaWNoIGZ1bmN0aW9ucyBhCisrICAgICAgICAgIHN5c3RlbSBhY3R1YWxseSB1c2VzLgorKworKyAgICAgICAgICBOb3RlIHRoYXQgc29tZSBuc3N3aXRjaCBzZXJ2aWNlIGxpYnJhcmllcyByZXF1aXJlIG90aGVyIG9wdGlvbgorKyAgICAgICAgICBncm91cHMgdG8gYmUgZW5hYmxlZDsgZm9yIGV4YW1wbGUsIHRoZSBFR0xJQkNfSU5FVAorKyAgICAgICAgICBvcHRpb24gZ3JvdXAgbXVzdCBiZSBlbmFibGVkIHRvIHVzZSB0aGUgJ2xpYm5zc19kbnMuc28uMicKKysgICAgICAgICAgc2VydmljZSBsaWJyYXJ5LCB3aGljaCB1c2VzIHRoZSBEb21haW4gTmFtZSBTeXN0ZW0gbmV0d29yaworKyAgICAgICAgICBwcm90b2NvbCB0byBhbnN3ZXIgcXVlcmllcy4KKysKKytjb25maWcgRUdMSUJDX1JDTUQKKysgICBib29sICJTdXBwb3J0IGZvciAncmNtZCcgYW5kIHJlbGF0ZWQgbGlicmFyeSBmdW5jdGlvbnMiCisrICAgZGVwZW5kcyBvbiBFR0xJQkNfSU5FVAorKyAgIGhlbHAKKysgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBmdW5jdGlvbnMgZm9yIHJ1bm5pbmcgY29tbWFuZHMgb24KKysgICAgICByZW1vdGUgbWFjaGluZXMgdmlhIHRoZSAncnNoJyBwcm90b2NvbCwgYW5kIGRvaW5nIGF1dGhlbnRpY2F0aW9uCisrICAgICAgcmVsYXRlZCB0byB0aG9zZSBmdW5jdGlvbnMuICBUaGlzIGFsc28gaW5jbHVkZXMgZnVuY3Rpb25zIHRoYXQKKysgICAgICB1c2UgdGhlICdyZXhlYycgcHJvdG9jb2wuCisrCisrICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICByY21kICAgICAgICAgICAgcnVzZXJvaworKyAgICAgICAgcmNtZF9hZiAgICAgICAgIHJ1c2Vyb2tfYWYKKysgICAgICAgIHJleGVjICAgICAgICAgICBpcnVzZXJvaworKyAgICAgICAgcmV4ZWNfYWYgICAgICAgIGlydXNlcm9rX2FmCisrICAgICAgICBycmVzdnBvcnQgICAgICAgcnVzZXJwYXNzCisrICAgICAgICBycmVzdnBvcnRfYWYKKysKKytjb25maWcgRUdMSUJDX1JUTERfREVCVUcKKysgICBib29sICJSdW50aW1lIGxpbmtlciBkZWJ1ZyBwcmludCBvdXRzIgorKyAgIGhlbHAKKysgICAgICBUaGlzIG9wdGlvbiBncm91cCBlbmFibGVzIGRlYnVnIG91dHB1dCBvZiB0aGUgcnVudGltZSBsaW5rZXIKKysgICAgICB3aGljaCBpcyBhY3RpdmF0ZWQgdmlhIExEX0RFQlVHIGFuZCBMRF9UUkFDRV9QUkVMSU5LSU5HCisrICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgRGlzYWJsaW5nIHRoaXMgb3B0aW9uIGdyb3VwIHlpZWxkcworKyAgICAgIGEgc21hbGxlciBydW50aW1lIGxpbmtlciBiaW5hcnkuCisrICAgICAgQkVXQVJFOiBEaXNhYmxpbmcgdGhpcyBvcHRpb24gZ3JvdXAgaXMgbGlrZWx5IHRvIGJyZWFrCisrICAgICAgdGhlIGBsZGQnIHV0aWxpdHkgd2hpY2ggbWF5IGFsc28gYmUgdXNlZCBieSB0aGUgcHJlbGlua2VyLgorKyAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSBgLS11bnVzZWQnIGxkZCBvcHRpb24gd2lsbCBub3Qgd29yayBjb3JyZWN0bHkuCisrCisrY29uZmlnIEVHTElCQ19TUEFXTgorKyAgIGJvb2wgIlN1cHBvcnQgZm9yIFBPU0lYIHBvc2l4X3NwYXduIGZ1bmN0aW9ucyIKKysgICBoZWxwCisrICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIFBPU0lYIGZ1bmN0aW9ucyBmb3IgZXhlY3V0aW5nCisrICAgICAgcHJvZ3JhbXMgaW4gY2hpbGQgcHJvY2Vzc2VzIHdpdGhvdXQgdXNpbmcgJ2ZvcmsnIG9yICd2Zm9yaycuCisrCisrICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICBwb3NpeF9zcGF3bgorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3kKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9nZXRmbGFncworKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX2dldHBncm91cAorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcGFyYW0KKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBvbGljeQorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX2dldHNpZ2RlZmF1bHQKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9nZXRzaWdtYXNrCisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfaW5pdAorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzCisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfc2V0cGdyb3VwCisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwYXJhbQorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcG9saWN5CisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnZGVmYXVsdAorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX3NldHNpZ21hc2sKKysgICAgICAgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZQorKyAgICAgICAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGR1cDIKKysgICAgICAgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRvcGVuCisrICAgICAgICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfZGVzdHJveQorKyAgICAgICAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQKKysgICAgICAgIHBvc2l4X3NwYXducAorKworKyAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGFsc28gcHJvdmlkZXMgdGhlIGFiaWxpdHkgZm9yIHRoZSBpY29udiwKKysgICAgICBsb2NhbGVkZWYsIGFuZCBsb2NhbGUgcHJvZ3JhbXMgdG8gb3BlcmF0ZSB0cmFuc3BhcmVudGx5IG9uCisrICAgICAgY29tcHJlc3NlZCBjaGFyc2V0IGRlZmluaXRpb25zLiAgV2hlbiB0aGlzIG9wdGlvbiBncm91cCBpcworKyAgICAgIGRpc2FibGVkLCB0aG9zZSBwcm9ncmFtcyB3aWxsIG9ubHkgb3BlcmF0ZSBvbiB1bmNvbXByZXNzZWQKKysgICAgICBjaGFybWFwIGZpbGVzLgorKworK2NvbmZpZyBFR0xJQkNfU1RSRUFNUworKyAgIGJvb2wgIlN1cHBvcnQgZm9yIGFjY2Vzc2luZyBTVFJFQU1TLiIKKysgICBoZWxwCisrICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nCisrICAgICAgbWVzc2FnZXMgdG8gYW5kIGZyb20gU1RSRUFNUy4gIFRoZSBTVFJFQU1TIGludGVyZmFjZSBwcm92aWRlcyBhCisrICAgICAgdW5pZm9ybSBtZWNoYW5pc20gZm9yIGltcGxlbWVudGluZyBuZXR3b3JraW5nIHNlcnZpY2VzIGFuZCBvdGhlcgorKyAgICAgIGNoYXJhY3Rlci1iYXNlZCBJL08uICAoU1RSRUFNUyBhcmUgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGgKKysgICAgICA8c3RkaW8uaD4gRklMRSBvYmplY3RzLCBhbHNvIGNhbGxlZCAnc3RyZWFtcycuKQorKworKyAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgZ2V0bXNnICAgICAgICAgIHB1dHBtc2cKKysgICAgICAgIGdldHBtc2cgICAgICAgICBmYXR0YWNoCisrICAgICAgICBpc2FzdHJlYW0gICAgICAgZmRldGFjaAorKyAgICAgICAgcHV0bXNnCisrCisrY29uZmlnIEVHTElCQ19TVU5SUEMKKysgICBib29sICJTdXBwb3J0IGZvciB0aGUgU3VuICdSUEMnIHByb3RvY29sLiIKKysgICBkZXBlbmRzIG9uIEVHTElCQ19JTkVUCisrICAgaGVscAorKyAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHN1cHBvcnQgZm9yIHRoZSBTdW4gUlBDIHByb3RvY29scywKKysgICAgICBpbmNsdWRpbmcgdGhlICdycGNnZW4nIGFuZCAncnBjaW5mbycgcHJvZ3JhbXMuCisrCisrY29uZmlnIEVHTElCQ19VVE1QCisrICAgIGJvb2wgIk9sZGVyIGFjY2VzcyBmdW5jdGlvbnMgZm9yICd1dG1wJyBsb2dpbiByZWNvcmRzIgorKyAgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBvbGRlciAndXRlbnQnIGZhbWlseSBvZgorKyAgICAgICBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB1c2VyIGxvZ2luIHJlY29yZHMgaW4gdGhlICd1dG1wJyBmaWxlLgorKyAgICAgICBQT1NJWCBvbWl0cyB0aGVzZSBmdW5jdGlvbnMgaW4gZmF2b3Igb2YgdGhlICd1dHhlbnQnIGZhbWlseSwKKysgICAgICAgYW5kIHRoZXkgYXJlIG9ic29sZXRlIG9uIHN5c3RlbXMgb3RoZXIgdGhhbiBMaW51eC4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgZW5kdXRlbnQKKysgICAgICAgICBnZXR1dGVudAorKyAgICAgICAgIGdldHV0ZW50X3IKKysgICAgICAgICBnZXR1dGlkCisrICAgICAgICAgZ2V0dXRpZF9yCisrICAgICAgICAgZ2V0dXRsaW5lCisrICAgICAgICAgZ2V0dXRsaW5lX3IKKysgICAgICAgICBsb2d3dG1wCisrICAgICAgICAgcHV0dXRsaW5lCisrICAgICAgICAgc2V0dXRlbnQKKysgICAgICAgICB1cGR3dG1wCisrICAgICAgICAgdXRtcG5hbWUKKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBsaWJyYXJpZXM6CisrCisrICAgICAgICAgbGlidXRpbC5zbyAoYW5kIGxpYnV0aWwuYSkKKysKKytjb25maWcgRUdMSUJDX1VUTVBYCisrICAgIGJvb2wgIlBPU0lYIGFjY2VzcyBmdW5jdGlvbnMgZm9yICd1dG1wJyBsb2dpbiByZWNvcmRzIgorKyAgICBkZXBlbmRzIG9uIEVHTElCQ19VVE1QCisrICAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIFBPU0lYIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQKKysgICAgICAgd3JpdGluZyB1c2VyIGxvZ2luIHJlY29yZHMgaW4gdGhlICd1dG1wJyBmaWxlICh1c3VhbGx5CisrICAgICAgICcvdmFyL3J1bi91dG1wJykuICBUaGUgUE9TSVggZnVuY3Rpb25zIG9wZXJhdGUgb24gJ3N0cnVjdAorKyAgICAgICB1dG1weCcgc3RydWN0dXJlcywgYXMgb3Bwb3NlZCB0byB0aGUgZmFtaWx5IG9mIG9sZGVyICd1dGVudCcKKysgICAgICAgZnVuY3Rpb25zLCB3aGljaCBvcGVyYXRlIG9uICdzdHJ1Y3QgdXRtcCcgc3RydWN0dXJlcy4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgZW5kdXR4ZW50CisrICAgICAgICAgZ2V0dXRtcAorKyAgICAgICAgIGdldHV0bXB4CisrICAgICAgICAgZ2V0dXR4ZW50CisrICAgICAgICAgZ2V0dXR4aWQKKysgICAgICAgICBnZXR1dHhsaW5lCisrICAgICAgICAgcHV0dXR4bGluZQorKyAgICAgICAgIHNldHV0eGVudAorKyAgICAgICAgIHVwZHd0bXB4CisrICAgICAgICAgdXRtcHhuYW1lCisrCisrY29uZmlnIEVHTElCQ19XT1JERVhQCisrICAgIGJvb2wgIlNoZWxsLXN0eWxlIHdvcmQgZXhwYW5zaW9uIgorKyAgICBoZWxwCisrICAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgJ3dvcmRleHAnIGZ1bmN0aW9uIGZvcgorKyAgICAgICAgcGVyZm9ybWluZyB3b3JkIGV4cGFuc2lvbiBpbiB0aGUgbWFubmVyIG9mIHRoZSBzaGVsbCwgYW5kIHRoZQorKyAgICAgICAgYWNjb21wYW55aW5nICd3b3JkZnJlZScgZnVuY3Rpb24uCisrCisrY29uZmlnIFBPU0lYX0NfTEFOR19XSURFX0NIQVIKKysgICAgYm9vbCAiSVNPIEMgbGlicmFyeSB3aWRlIGNoYXJhY3RlciBmdW5jdGlvbnMsIGV4Y2x1ZGluZyBJL08iCisrICAgIGhlbHAKKysgICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCBieSB0aGUgSVNPIEMKKysgICAgICAgIHN0YW5kYXJkIGZvciB3b3JraW5nIHdpdGggd2lkZSBhbmQgbXVsdGlieXRlIGNoYXJhY3RlcnMgaW4KKysgICAgICAgIG1lbW9yeS4gIEZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB3aWRlIGFuZCBtdWx0aWJ5dGUKKysgICAgICAgIGNoYXJhY3RlcnMgZnJvbSBhbmQgdG8gZmlsZXMgY2FsbCBpbiB0aGUKKysgICAgICAgIFBPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8gb3B0aW9uIGdyb3VwLgorKworKyAgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgIGJ0b3djICAgICAgICAgbWJzaW5pdCAgICAgICB3Y3Njc3BuICAgICAgIHdjc3RvbGwKKysgICAgICAgICAgaXN3YWxudW0gICAgICBtYnNydG93Y3MgICAgIHdjc2Z0aW1lICAgICAgd2NzdG9tYnMKKysgICAgICAgICAgaXN3YWxwaGEgICAgICBtYnN0b3djcyAgICAgIHdjc2xlbiAgICAgICAgd2NzdG91bAorKyAgICAgICAgICBpc3dibGFuayAgICAgIG1idG93YyAgICAgICAgd2NzbmNhdCAgICAgICB3Y3N0b3VsbAorKyAgICAgICAgICBpc3djbnRybCAgICAgIHN3cHJpbnRmICAgICAgd2NzbmNtcCAgICAgICB3Y3N0b3VtYXgKKysgICAgICAgICAgaXN3Y3R5cGUgICAgICBzd3NjYW5mICAgICAgIHdjc25jcHkgICAgICAgd2NzeGZybQorKyAgICAgICAgICBpc3dkaWdpdCAgICAgIHRvd2N0cmFucyAgICAgd2NzcGJyayAgICAgICB3Y3RvYgorKyAgICAgICAgICBpc3dncmFwaCAgICAgIHRvd2xvd2VyICAgICAgd2NzcmNociAgICAgICB3Y3RvbWIKKysgICAgICAgICAgaXN3bG93ZXIgICAgICB0b3d1cHBlciAgICAgIHdjc3J0b21icyAgICAgd2N0cmFucworKyAgICAgICAgICBpc3dwcmludCAgICAgIHZzd3ByaW50ZiAgICAgd2Nzc3BuICAgICAgICB3Y3R5cGUKKysgICAgICAgICAgaXN3cHVuY3QgICAgICB2c3dzY2FuZiAgICAgIHdjc3N0ciAgICAgICAgd21lbWNocgorKyAgICAgICAgICBpc3dzcGFjZSAgICAgIHdjcnRvbWIgICAgICAgd2NzdG9kICAgICAgICB3bWVtY21wCisrICAgICAgICAgIGlzd3VwcGVyICAgICAgd2NzY2F0ICAgICAgICB3Y3N0b2YgICAgICAgIHdtZW1jcHkKKysgICAgICAgICAgaXN3eGRpZ2l0ICAgICB3Y3NjaHIgICAgICAgIHdjc3RvaW1heCAgICAgd21lbW1vdmUKKysgICAgICAgICAgbWJsZW4gICAgICAgICB3Y3NjbXAgICAgICAgIHdjc3RvayAgICAgICAgd21lbXNldAorKyAgICAgICAgICBtYnJsZW4gICAgICAgIHdjc2NvbGwgICAgICAgd2NzdG9sCisrICAgICAgICAgIG1icnRvd2MgICAgICAgd2NzY3B5ICAgICAgICB3Y3N0b2xkCisrCisrY29uZmlnIFBPU0lYX1JFR0VYUAorKyAgICBib29sICJSZWd1bGFyIGV4cHJlc3Npb25zIgorKyAgICBoZWxwCisrICAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgUE9TSVggcmVndWxhciBleHByZXNzaW9uCisrICAgICAgICBmdW5jdGlvbnMsIGFuZCB0aGUgYXNzb2NpYXRlZCBub24tUE9TSVggZXh0ZW5zaW9ucyBhbmQKKysgICAgICAgIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zLgorKworKyAgICAgICAgV2l0aCBQT1NJWF9SRUdFWFAgZGlzYWJsZWQsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZQorKyAgICAgICAgb21pdHRlZCBmcm9tIGxpYmM6CisrCisrICAgICAgICAgIHJlX2NvbXAgICAgICAgICAgICAgICAgIHJlX21heF9mYWlsdXJlcyAgICAgICAgIHJlZ2NvbXAKKysgICAgICAgICAgcmVfY29tcGlsZV9mYXN0bWFwICAgICAgcmVfc2VhcmNoICAgICAgICAgICAgICAgcmVnZXJyb3IKKysgICAgICAgICAgcmVfY29tcGlsZV9wYXR0ZXJuICAgICAgcmVfc2VhcmNoXzIgICAgICAgICAgICAgcmVnZXhlYworKyAgICAgICAgICByZV9leGVjICAgICAgICAgICAgICAgICByZV9zZXRfcmVnaXN0ZXJzICAgICAgICByZWdmcmVlCisrICAgICAgICAgIHJlX21hdGNoICAgICAgICAgICAgICAgIHJlX3NldF9zeW50YXggICAgICAgICAgIHJwbWF0Y2gKKysgICAgICAgICAgcmVfbWF0Y2hfMiAgICAgICAgICAgICAgcmVfc3ludGF4X29wdGlvbnMKKysKKysgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGUgY29tcGF0aWJpbGl0eSByZWdleHAgaW50ZXJmYWNlIGRlZmluZWQgaW4gdGhlCisrICAgICAgICA8cmVnZXhwLmg+IGhlYWRlciBmaWxlLCAnY29tcGlsZScsICdzdGVwJywgYW5kICdhZHZhbmNlJywgaXMKKysgICAgICAgIG9taXR0ZWQuCisrCisrY29uZmlnIFBPU0lYX1JFR0VYUF9HTElCQworKyAgICBib29sICJSZWd1bGFyIGV4cHJlc3Npb25zIGZyb20gR0xJQkMiCisrICAgIGRlcGVuZHMgb24gUE9TSVhfUkVHRVhQCisrICAgIGhlbHAKKysJVGhpcyBvcHRpb24gZ3JvdXAgc3BlY2lmaWVzIHdoaWNoIHJlZ3VsYXIgZXhwcmVzc2lvbgorKyAgICAgICAgbGlicmFyeSB0byB1c2UuICBUaGUgY2hvaWNlIGlzIGJldHdlZW4gcmVnZXgKKysgICAgICAgIGltcGxlbWVudGF0aW9uIGZyb20gR0xJQkMgYW5kIHJlZ2V4IGltcGxlbWVudGF0aW9uIGZyb20KKysgICAgICAgIGxpYmliZXJ0eS4gIFRoZSBHTElCQyB2YXJpYW50IGlzIGZ1bGx5IFBPU0lYIGNvbmZvcm1hbnQgYW5kCisrICAgICAgICBvcHRpbWl6ZWQgZm9yIHNwZWVkOyByZWdleCBmcm9tIGxpYmliZXJ0eSBpcyBtb3JlIHRoYW4gdHdpY2UKKysgICAgICAgIGFzIHNtYWxsIHdoaWxlIHN0aWxsIGlzIGVub3VnaCBmb3IgbW9zdCBwcmFjdGljYWwgcHVycG9zZXMuCisrCisrY29uZmlnIFBPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKysgICAgYm9vbCAiSW5wdXQgYW5kIG91dHB1dCBmdW5jdGlvbnMgZm9yIHdpZGUgY2hhcmFjdGVycyIKKysgICAgZGVwZW5kcyBvbiBQT1NJWF9DX0xBTkdfV0lERV9DSEFSCisrICAgIGhlbHAKKysgICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZworKyAgICAgICAgd2lkZSBjaGFyYWN0ZXJzIHRvIGFuZCBmcm9tIDxzdGRpby5oPiBzdHJlYW1zLgorKworKyAgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgIGZnZXR3YyAgICAgICAgZndwcmludGYgICAgICBwdXR3Y2hhciAgICAgIHZ3c2NhbmYKKysgICAgICAgICAgZmdldHdzICAgICAgICBmd3NjYW5mICAgICAgIHVuZ2V0d2MgICAgICAgd3ByaW50ZgorKyAgICAgICAgICBmcHV0d2MgICAgICAgIGdldHdjICAgICAgICAgdmZ3cHJpbnRmICAgICB3c2NhbmYKKysgICAgICAgICAgZnB1dHdzICAgICAgICBnZXR3Y2hhciAgICAgIHZmd3NjYW5mCisrICAgICAgICAgIGZ3aWRlICAgICAgICAgcHV0d2MgICAgICAgICB2d3ByaW50ZgorKworKyAgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgZnVydGhlciBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHVubG9ja2VkCisrICAgICAgICB2YXJpYW50cyBvZiB0aGUgYWJvdmUgZnVuY3Rpb25zOgorKworKyAgICAgICAgICBmZ2V0d2NfdW5sb2NrZWQgICAgICAgICAgIGdldHdjX3VubG9ja2VkCisrICAgICAgICAgIGZnZXR3c191bmxvY2tlZCAgICAgICAgICAgZ2V0d2NoYXJfdW5sb2NrZWQKKysgICAgICAgICAgZnB1dHdjX3VubG9ja2VkICAgICAgICAgICBwdXR3Y191bmxvY2tlZAorKyAgICAgICAgICBmcHV0d3NfdW5sb2NrZWQgICAgICAgICAgIHB1dHdjaGFyX3VubG9ja2VkCisrCisrICAgICAgICBOb3RlIHRoYXQgdGhlIEdOVSBzdGFuZGFyZCBDKysgbGlicmFyeSwgJ2xpYnN0ZGMrKy5zbycsIHVzZXMKKysgICAgICAgIHNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zOyB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBsaW5rIG9yIHJ1bgorKyAgICAgICAgQysrIHByb2dyYW1zIGlmIHlvdSBkaXNhYmxlIHRoaXMgb3B0aW9uIGdyb3VwLgorKworKyAgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgYWxzbyBhZmZlY3RzIHRoZSBiZWhhdmlvciBvZiB0aGUgZm9sbG93aW5nCisrICAgICAgICBmdW5jdGlvbnM6CisrCisrICAgICAgICAgIGZkb3BlbgorKyAgICAgICAgICBmb3BlbgorKyAgICAgICAgICBmb3BlbjY0CisrICAgICAgICAgIGZyZW9wZW4KKysgICAgICAgICAgZnJlb3BlbjY0CisrCisrICAgICAgICBUaGVzZSBmdW5jdGlvbnMgYWxsIHRha2UgYW4gT1BFTlRZUEUgcGFyYW1ldGVyIHdoaWNoIG1heQorKyAgICAgICAgY29udGFpbiBhIHN0cmluZyBvZiB0aGUgZm9ybSAiLGNjcz1DSEFSU0VUIiwgaW5kaWNhdGluZyB0aGF0CisrICAgICAgICB0aGUgdW5kZXJseWluZyBmaWxlIHVzZXMgdGhlIGNoYXJhY3RlciBzZXQgbmFtZWQgQ0hBUlNFVC4KKysgICAgICAgIFRoaXMgcHJvZHVjZXMgYSB3aWRlLW9yaWVudGVkIHN0cmVhbSwgd2hpY2ggaXMgb25seSB1c2VmdWwKKysgICAgICAgIHdoZW4gdGhlIGZ1bmN0aW9ucyBpbmNsdWRlZCBpbiB0aGlzIG9wdGlvbiBncm91cCBhcmUgcHJlc2VudC4KKysgICAgICAgIElmIHRoZSB1c2VyIGF0dGVtcHRzIHRvIG9wZW4gYSBmaWxlIHNwZWNpZnlpbmcgYSBjaGFyYWN0ZXIgc2V0CisrICAgICAgICBpbiB0aGUgT1BFTlRZUEUgcGFyYW1ldGVyLCBhbmQgRUdMSUJDIHdhcyBidWlsdCB3aXRoIHRoaXMKKysgICAgICAgIG9wdGlvbiBncm91cCBkaXNhYmxlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgTlVMTCwgYW5kIHNldHMKKysgICAgICAgIGVycm5vIHRvIEVJTlZBTC4KKysKKysMCisrIyBUaGlzIGhlbHBzIEVtYWNzIHVzZXJzIGJyb3dzZSB0aGlzIGZpbGUgdXNpbmcgdGhlIHBhZ2UgbW90aW9uIGNvbW1hbmRzCisrIyBhbmQgY29tbWFuZHMgbGlrZSAncGFnZXMtZGlyZWN0b3J5Jy4KKysjIExvY2FsIFZhcmlhYmxlczoKKysjIHBhZ2UtZGVsaW1pdGVyOiAiXmNvbmZpZ1xccy0iCisrIyBFbmQ6CitkaWZmIC0tZ2l0IGEvb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cyBiL29wdGlvbi1ncm91cHMuZGVmYXVsdHMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44MTQxMjAxCistLS0gL2Rldi9udWxsCisrKysgYi9vcHRpb24tZ3JvdXBzLmRlZmF1bHRzCitAQCAtMCwwICsxLDQ3IEBACisrIyBUaGlzIGZpbGUgc2V0cyBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIG9wdGlvbiBncm91cCB2YXJpYWJsZXMKKysjIG1lbnRpb25lZCBpbiBvcHRpb24tZ3JvdXBzLmRlZjsgc2VlIHRoYXQgZmlsZSBmb3IgYSBkZXNjcmlwdGlvbiBvZgorKyMgZWFjaCBvcHRpb24gZ3JvdXAuCisrIworKyMgU3ViZGlyZWN0b3J5IG1ha2VmaWxlcyBpbmNsdWRlIHRoaXMgZmlsZSBiZWZvcmUgaW5jbHVkaW5nIHRoZSB1c2VyJ3MKKysjIHNldHRpbmdzIGZyb20gb3B0aW9uLWdyb3Vwcy5jb25maWcgYXQgdGhlIHRvcCBvZiB0aGUgYnVpbGQgdHJlZTsKKysjIHRoYXQgZmlsZSBuZWVkIG9ubHkgcmVmZXIgdG8gdGhvc2Ugb3B0aW9ucyB3aG9zZSBkZWZhdWx0IHNldHRpbmdzCisrIyBhcmUgdG8gYmUgY2hhbmdlZC4KKysjCisrIyBCeSBkZWZhdWx0LCBhbGwgb3B0aW9uIGdyb3VwcyBhcmUgZW5hYmxlZC4KKytPUFRJT05fRUdMSUJDX0FEVkFOQ0VEX0lORVQ2ID0geQorK09QVElPTl9FR0xJQkNfQkFDS1RSQUNFID0geQorK09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyA9IHkKKytPUFRJT05fRUdMSUJDX0JTRCA9IHkKKytPUFRJT05fRUdMSUJDX0NYWF9URVNUUyA9IHkKKytPUFRJT05fRUdMSUJDX0NBVEdFVFMgPSB5CisrT1BUSU9OX0VHTElCQ19DSEFSU0VUUyA9IHkKKytPUFRJT05fRUdMSUJDX0NSWVBUID0geQorK09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDID0geQorK09QVElPTl9FR0xJQkNfREJfQUxJQVNFUyA9IHkKKytPUFRJT05fRUdMSUJDX0VOVlogPSB5CisrT1BUSU9OX0VHTElCQ19GQ1ZUID0geQorK09QVElPTl9FR0xJQkNfRk1UTVNHID0geQorK09QVElPTl9FR0xJQkNfRlNUQUIgPSB5CisrT1BUSU9OX0VHTElCQ19GVFJBVkVSU0UgPSB5CisrT1BUSU9OX0VHTElCQ19HRVRMT0dJTiA9IHkKKytPUFRJT05fRUdMSUJDX0lETiA9IHkKKytPUFRJT05fRUdMSUJDX0lORVQgPSB5CisrT1BUSU9OX0VHTElCQ19JTkVUX0FOTCA9IHkKKytPUFRJT05fRUdMSUJDX0xJQk0gPSB5CisrT1BUSU9OX0VHTElCQ19MT0NBTEVTID0geQorK09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgPSB5CisrT1BUSU9OX0VHTElCQ19NRU1VU0FHRSA9IHkKKytPUFRJT05fRUdMSUJDX05JUyA9IHkKKytPUFRJT05fRUdMSUJDX05TU1dJVENIID0geQorK09QVElPTl9FR0xJQkNfUkNNRCA9IHkKKytPUFRJT05fRUdMSUJDX1JUTERfREVCVUcgPSB5CisrT1BUSU9OX0VHTElCQ19TUEFXTiA9IHkKKytPUFRJT05fRUdMSUJDX1NUUkVBTVMgPSB5CisrT1BUSU9OX0VHTElCQ19TVU5SUEMgPSB5CisrT1BUSU9OX0VHTElCQ19VVE1QID0geQorK09QVElPTl9FR0xJQkNfVVRNUFggPSB5CisrT1BUSU9OX0VHTElCQ19XT1JERVhQID0geQorK09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSID0geQorK09QVElPTl9QT1NJWF9SRUdFWFAgPSB5CisrT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQyA9IHkKKytPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTyA9IHkKK2RpZmYgLS1naXQgYS9vcHRpb24tZ3JvdXBzLm1hayBiL29wdGlvbi1ncm91cHMubWFrCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZjgzZTBjMQorLS0tIC9kZXYvbnVsbAorKysrIGIvb3B0aW9uLWdyb3Vwcy5tYWsKK0BAIC0wLDAgKzEsNDEgQEAKKysjIFNldHVwIGZpbGUgZm9yIHN1YmRpcmVjdG9yeSBNYWtlZmlsZXMgdGhhdCBkZWZpbmUgRUdMSUJDIG9wdGlvbiBncm91cHMuCisrCisrIyBFR0xJQkMgc2hvdWxkbid0IG5lZWQgdG8gb3ZlcnJpZGUgdGhpcy4gIEhvd2V2ZXIsIHRoZQorKyMgY3Jvc3MtYnVpbGQtZnJpZW5kbHkgbG9jYWxlZGVmIGluY2x1ZGVzIHRoaXMgbWFrZWZpbGUgdG8gZ2V0IG9wdGlvbgorKyMgZ3JvdXAgdmFyaWFibGUgZGVmaW5pdGlvbnM7IGl0IHVzZXMgYSBzaW5nbGUgYnVpbGQgdHJlZSBmb3IgYWxsIHRoZQorKyMgbXVsdGlsaWJzLCBhbmQgbmVlZHMgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IGEgZGlmZmVyZW50IG9wdGlvbiBncm91cAorKyMgY29uZmlndXJhdGlvbiBmaWxlIGZvciBlYWNoIG11bHRpbGliLgorK29wdGlvbl9ncm91cF9jb25maWdfZmlsZSA/PSAkKG9iamRpcikvb3B0aW9uLWdyb3Vwcy5jb25maWcKKysKKysjIFJlYWQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGFsbCBvcHRpb25zLgorKyMgV2UncmUgaW5jbHVkZWQgYmVmb3JlIC4uL1J1bGVzLCBzbyB3ZSBjYW4ndCBhc3N1bWUgJCguLikgaXMgc2V0LgorK2luY2x1ZGUgJChmaXJzdHdvcmQgJCguLikgLi4vKW9wdGlvbi1ncm91cHMuZGVmYXVsdHMKKysKKysjIFJlYWQgdGhlIGRldmVsb3BlcidzIG9wdGlvbiBncm91cCBzZWxlY3Rpb25zLCBvdmVycmlkaW5nIHRoZQorKyMgZGVmYXVsdHMgZnJvbSBvcHRpb24tZ3JvdXBzLmRlZmF1bHRzLgorKy1pbmNsdWRlICQob3B0aW9uX2dyb3VwX2NvbmZpZ19maWxlKQorKworKyMgJChjYWxsIG9wdGlvbi1kaXNhYmxlZCwgVkFSKSBpcyAneScgaWYgVkFSIGlzIG5vdCAneScsIG9yICduJyBvdGhlcndpc2UuCisrIyBWQVIgc2hvdWxkIGJlIGEgdmFyaWFibGUgbmFtZSwgbm90IGEgdmFyaWFibGUgcmVmZXJlbmNlOyB0aGlzIGlzCisrIyBsZXNzIGdlbmVyYWwsIGJ1dCBtb3JlIHRlcnNlIGZvciB0aGUgaW50ZW5kZWQgdXNlLgorKyMgWW91IGNhbiB1c2UgaXQgdG8gYWRkIGEgZmlsZSB0byBhIGxpc3QgaWYgYW4gb3B0aW9uIGdyb3VwIGlzCisrIyBkaXNhYmxlZCwgbGlrZSB0aGlzOgorKyMgICByb3V0aW5lcy0kKGNhbGwgb3B0aW9uLWRpc2FibGVkLCBPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgKz0gLi4uCisrZGVmaW5lIG9wdGlvbi1kaXNhYmxlZAorKyQoZmlyc3R3b3JkICQoc3Vic3QgeSxuLCQoZmlsdGVyIHksJCgkKHN0cmlwICQoMSkpKSkpIHkpCisrZW5kZWYKKysKKysjIEVzdGFibGlzaCAncm91dGluZXMteScsIGV0Yy4gYXMgc2ltcGx5LWV4cGFuZGVkIHZhcmlhYmxlcy4KKythdXgteQkgICAgICAgCSAgICA6PQorK2V4dHJhLWxpYnMtb3RoZXJzLXkgOj0KKytleHRyYS1saWJzLXkgICAJICAgIDo9CisrZXh0cmEtb2Jqcy15ICAgCSAgICA6PQorK2luc3RhbGwtYmluLXkgIAkgICAgOj0KKytpbnN0YWxsLW90aGVycy15ICAgIDo9CisraW5zdGFsbC1zYmluLXkgCSAgICA6PQorK290aGVycy15ICAgICAgIAkgICAgOj0KKytvdGhlcnMtcGllLXkgICAJICAgIDo9Cisrcm91dGluZXMteSAgICAgCSAgICA6PQorK3Rlc3Qtc3Jjcy15ICAgIAkgICAgOj0KKyt0ZXN0cy15ICAgICAgICAJICAgIDo9CisreHRlc3RzLXkgICAgICAgCSAgICA6PQorZGlmZiAtLWdpdCBhL29wdGlvbnMtY29uZmlnL01ha2VmaWxlIGIvb3B0aW9ucy1jb25maWcvTWFrZWZpbGUKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kYjAwNzA4CistLS0gL2Rldi9udWxsCisrKysgYi9vcHRpb25zLWNvbmZpZy9NYWtlZmlsZQorQEAgLTAsMCArMSw1NSBAQAorKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrIyBFR0xJQkMgb3B0aW9uLWdyb3VwcyBjb25maWd1cmF0aW9uIHRhcmdldHMKKysjIFRoZXNlIHRhcmdldHMgYXJlIGluY2x1ZGVkIGZyb20gdG9wLWxldmVsIG1ha2VmaWxlCisrCisraWZuZXEgKCQoa2NvbmZpZ190b29scyksKQorK2lmbmVxIChubywkKFBFUkwpKQorKworK29jZGlyIDo9IG9wdGlvbnMtY29uZmlnCisrCisrT2NvbmZpZ0RlZmF1bHRzICAgICA6PSBvcHRpb24tZ3JvdXBzLmRlZmF1bHRzCisrT2NvbmZpZ0RlZmF1bHRzX3RtcCA6PSAkKGNvbW1vbi1vYmpwZngpLnRtcC5kZWZjb25maWcKKytPY29uZmlnRGVmICAgICAgICAgIDo9IG9wdGlvbi1ncm91cHMuZGVmCisrT2NvbmZpZyAgICAgICAgICAgICA6PSAkKGNvbW1vbi1vYmpwZngpb3B0aW9uLWdyb3Vwcy5jb25maWcKKytPY29uZmlnX3RtcCAgICAgICAgIDo9ICQoY29tbW9uLW9ianBmeCkudG1wLmNvbmZpZworKworK2NvbmYgIDo9ICQoa2NvbmZpZ190b29scykvY29uZgorK21jb25mIDo9ICQoa2NvbmZpZ190b29scykvbWNvbmYKKysKKytwcmVwcm9jICA6PSAkKFBFUkwpICQob2NkaXIpL2NvbmZpZy1wcmVwcm9jLnBsCisrcG9zdHByb2MgOj0gJChQRVJMKSAkKG9jZGlyKS9jb25maWctcG9zdHByb2MucGwKKysKKytQSE9OWSArPSBkZWZjb25maWcgY29uZmlnIG1lbnVjb25maWcKKysKKytkZWZjb25maWc6ICQoY29uZikgJChPY29uZmlnRGVmYXVsdHMpICQoT2NvbmZpZ0RlZikKKysJcm0gLWYgJChPY29uZmlnRGVmYXVsdHNfdG1wKQorKwlybSAtZiAkKE9jb25maWdfdG1wKQorKwkkKHByZXByb2MpICQoT2NvbmZpZ0RlZmF1bHRzKSA+ICQoT2NvbmZpZ0RlZmF1bHRzX3RtcCkKKysJS0NPTkZJR19DT05GSUc9JChPY29uZmlnX3RtcCkgJDwgLS1kZWZjb25maWc9JChPY29uZmlnRGVmYXVsdHNfdG1wKSBcCisrCQkJCSQoT2NvbmZpZ0RlZikKKysJJChwb3N0cHJvYykgJChPY29uZmlnRGVmYXVsdHMpICQoT2NvbmZpZ190bXApID4gJChPY29uZmlnKQorKwlybSAkKE9jb25maWdfdG1wKQorKwlybSAkKE9jb25maWdEZWZhdWx0c190bXApCisrCisrY29uZmlnOiAkKGNvbmYpICQoT2NvbmZpZ0RlZmF1bHRzKSAkKE9jb25maWdEZWYpCisrCXJtIC1mICQoT2NvbmZpZ190bXApCisrCSQocHJlcHJvYykgJCh3aWxkY2FyZCAkKE9jb25maWcpKSA+ICQoT2NvbmZpZ190bXApCisrCUtDT05GSUdfQ09ORklHPSQoT2NvbmZpZ190bXApICQ8IC0tb2xkYXNrY29uZmlnICQoT2NvbmZpZ0RlZikKKysJJChwb3N0cHJvYykgJChPY29uZmlnRGVmYXVsdHMpICQoT2NvbmZpZ190bXApID4gJChPY29uZmlnKQorKwlybSAkKE9jb25maWdfdG1wKQorKworK21lbnVjb25maWc6ICQobWNvbmYpICQoT2NvbmZpZ0RlZmF1bHRzKSAkKE9jb25maWdEZWYpCisrCXJtIC1mICQoT2NvbmZpZ190bXApCisrCSQocHJlcHJvYykgJCh3aWxkY2FyZCAkKE9jb25maWcpKSA+ICQoT2NvbmZpZ190bXApCisrCUtDT05GSUdfQ09ORklHPSQoT2NvbmZpZ190bXApICQ8ICQoT2NvbmZpZ0RlZikKKysJJChwb3N0cHJvYykgJChPY29uZmlnRGVmYXVsdHMpICQoT2NvbmZpZ190bXApID4gJChPY29uZmlnKQorKwlybSAkKE9jb25maWdfdG1wKQorKworKyMgSGVscCB0ZXh0IHVzZWQgYnkgbWFrZSBoZWxwCisraGVscDoKKysJQGVjaG8gICcgIGRlZmNvbmZpZwkgIC0gTmV3IGNvbmZpZyB3aXRoIGRlZmF1bHQgZnJvbSBkZWZhdWx0IGNvbmZpZycKKysJQGVjaG8gICcgIGNvbmZpZwkgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBhIGxpbmUtb3JpZW50ZWQgcHJvZ3JhbScKKysJQGVjaG8gICcgIG1lbnVjb25maWcJICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyB1dGlsaXNpbmcgYSBtZW51IGJhc2VkIHByb2dyYW0nCisrCisrZW5kaWYKKytlbmRpZgorZGlmZiAtLWdpdCBhL29wdGlvbnMtY29uZmlnL2NvbmZpZy1wb3N0cHJvYy5wbCBiL29wdGlvbnMtY29uZmlnL2NvbmZpZy1wb3N0cHJvYy5wbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjRkZDFjNjMKKy0tLSAvZGV2L251bGwKKysrKyBiL29wdGlvbnMtY29uZmlnL2NvbmZpZy1wb3N0cHJvYy5wbAorQEAgLTAsMCArMSw1OCBAQAorKyMhL3Vzci9iaW4vcGVybAorKworKyR1c2FnZSA9ICJ1c2FnZTogJDAgPGRlZmF1bHQgY29uZmlnIGZpbGU+IDxjb25maWcgZmlsZT5cbiI7CisrCisrZGllICIkdXNhZ2UiIHVubGVzcyBAQVJHVjsKKyskZGVmYXVsdHMgPSBzaGlmdCBAQVJHVjsKKytkaWUgIiR1c2FnZSIgdW5sZXNzIEBBUkdWOworK2RpZSAiQ291bGQgbm90IG9wZW4gJEFSR1ZbMF0iIHVubGVzcyAtVCAkQVJHVlswXTsKKysKKytzdWIgeWFuayB7CisrICAgIEBvcHRpb24gPSBncmVwKCEoJF8gPX4gLyRfWzBdXHMqPS8pLCBAb3B0aW9uKTsKKyt9CisrCisrb3BlbihERUZBVUxUUywgJGRlZmF1bHRzKSB8fCBkaWUgIkNvdWxkIG5vdCBvcGVuICRkZWZhdWx0c1xuIjsKKysKKysjIGdldCB0aGUgZnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBvcHRpb25zIHVzaW5nIHRoZSBkZWZhdWx0IGNvbmZpZyBmaWxlCisrJGkgPSAwOworK3doaWxlICg8REVGQVVMVFM+KSB7CisrICAgIGlmICgvXlxzKk9QVElPTl8oXHcrXHMqPS4qJCkvKSB7CisrCSRvcHRpb25bJGkrK10gPSAkMTsKKysgICAgfQorK30KKysKKysjIG5vdyBnbyB0aHJvdWdoIHRoZSBjb25maWcgZmlsZSwgbWFraW5nIHRoZSBuZWNlc3NhcnkgY2hhbmdlcworK3doaWxlICg8PikgeworKyAgICBpZiAoL0xpbnV4IEtlcm5lbCBDb25maWd1cmF0aW9uLykgeworKwkjIGNoYW5nZSB0aXRsZQorKwlzL0xpbnV4IEtlcm5lbC9PcHRpb24gR3JvdXBzLzsKKysJcHJpbnQ7CisrICAgIH0gZWxzaWYgKC9eXHMqQ09ORklHXyhcdyspXHMqPS8pIHsKKysJIyB0aGlzIGlzIGFuIGV4cGxpY2l0IG9wdGlvbiBzZXQgbGluZSwgY2hhbmdlIENPTkZJR18gdG8gT1BUSU9OXworKwkjIGJlZm9yZSBwcmludGluZyBhbmQgcmVtb3ZlIHRoaXMgb3B0aW9uIGZyb20gb3B0aW9uIGxpc3QKKysJJG9wdCA9ICQxOworKwl5YW5rKCRvcHQpOworKwlzL0NPTkZJR18vT1BUSU9OXy9nOworKwlwcmludDsKKysgICAgfSBlbHNpZiAoL15ccyojXHMrQ09ORklHXyhcdyspIGlzIG5vdCBzZXQvKSB7CisrCSMgdGhpcyBpcyBhIGNvbW1lbnQgbGluZSBmb3IgYW4gdW5zZXQgYm9vbGVhbiBvcHRpb24sIGNoYW5nZSBDT05GSUdfCisrCSMgdG8gT1BUSU9OXywgcmVtb3ZlIHRoaXMgb3B0aW9uIGZyb20gb3B0aW9uIGxpc3QsIGFuZCBjb252ZXJ0IHRvCisrCSMgZXhwbGljaXQgT1BUSU9OX0ZPTz1uCisrCSRvcHQgPSAkMTsKKysJeWFuaygkb3B0KTsKKysJcy9DT05GSUdfL09QVElPTl8vZzsKKysJcHJpbnQgIk9QVElPTl8kb3B0PW5cbiI7CisrICAgIH0gZWxzZSB7CisrCXByaW50OworKyAgICB9CisrfQorKworKyMgYW55IGJvb2xlYW4gb3B0aW9ucyBsZWZ0IGluIEBvcHRpb25zLCBhcmUgb3B0aW9ucyB0aGF0IHdlcmUgbm90IG1lbnRpb25lZCBpbgorKyMgdGhlIGNvbmZpZyBmaWxlLCBhbmQgaW1wbGljaXRseSB0aGF0IG1lYW5zIHRoZSBvcHRpb24gbXVzdCBiZSBzZXQgPW4sCisrIyBzbyBkbyB0aGF0IGhlcmUuCisrZm9yZWFjaCAkb3B0IChAb3B0aW9uKSB7CisrICAgIGlmICgkb3B0ID1+IC89XHMqW3luXS8pIHsKKysJJG9wdCA9fiBzLz1ccypbeW5dLz1uLzsKKysJcHJpbnQgIk9QVElPTl8kb3B0XG4iOworKyAgICB9CisrfQorZGlmZiAtLWdpdCBhL29wdGlvbnMtY29uZmlnL2NvbmZpZy1wcmVwcm9jLnBsIGIvb3B0aW9ucy1jb25maWcvY29uZmlnLXByZXByb2MucGwKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iODNiYjg1CistLS0gL2Rldi9udWxsCisrKysgYi9vcHRpb25zLWNvbmZpZy9jb25maWctcHJlcHJvYy5wbAorQEAgLTAsMCArMSw4IEBACisrIyEvdXNyL2Jpbi9wZXJsCisrCisraWYgKEBBUkdWKSB7CisrICAgIHdoaWxlICg8PikgeworKwlzL09QVElPTl8vQ09ORklHXy9nOworKwlwcmludDsKKysgICAgfQorK30KK2RpZmYgLS1naXQgYS9zY3JpcHRzL29wdGlvbi1ncm91cHMuYXdrIGIvc2NyaXB0cy9vcHRpb24tZ3JvdXBzLmF3aworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjUzM2FmMGMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NjcmlwdHMvb3B0aW9uLWdyb3Vwcy5hd2sKK0BAIC0wLDAgKzEsNjMgQEAKKysjIG9wdGlvbi1ncm91cHMuYXdrIC0tLSBnZW5lcmF0ZSBvcHRpb24gZ3JvdXAgaGVhZGVyIGZpbGUKKysjIEdpdmVuIGlucHV0IGZpbGVzIGNvbnRhaW5pbmcgbWFrZWZpbGUtc3R5bGUgYXNzaWdubWVudHMgdG8gdmFyaWFibGVzLAorKyMgcHJpbnQgb3V0IGEgaGVhZGVyIGZpbGUgdGhhdCAjZGVmaW5lcyBhbiBhcHByb3ByaWF0ZSBwcmVwcm9jZXNzb3IKKysjIHN5bWJvbCBmb3IgZWFjaCB2YXJpYWJsZSBsZWZ0IHNldCB0byAneScuCisrCisrQkVHSU4geyBGUz0iPSIgfQorKworKyMgVHJpbSBzcGFjZXMuCisreyBnc3ViICgvW1s6Ymxhbms6XV0vLCAiIikgfQorKworKyMgU2tpcCBjb21tZW50cy4KKysvXiMvIHsgbmV4dCB9CisrCisrIyBQcm9jZXNzIGFzc2lnbm1lbnRzLgorK05GID09IDIgeworKyAgICB2YXJzWyQxXSA9ICQyCisrfQorKworKyMgUHJpbnQgZmluYWwgdmFsdWVzLgorK0VORCB7CisrICAgIHByaW50ICIvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgc2NyaXB0cy9vcHRpb24tZ3JvdXBzLmF3ayIKKysgICAgcHJpbnQgIiAgIGluIHRoZSBFR0xJQkMgc291cmNlIHRyZWUuIgorKyAgICBwcmludCAiIgorKyAgICBwcmludCAiICAgSXQgZGVmaW5lcyBtYWNyb3MgdGhhdCBpbmRpY2F0ZSB3aGljaCBFR0xJQkMgb3B0aW9uIGdyb3VwcyB3ZXJlIgorKyAgICBwcmludCAiICAgY29uZmlndXJlZCBpbiAnb3B0aW9uLWdyb3Vwcy5jb25maWcnIHdoZW4gdGhpcyBDIGxpYnJhcnkgd2FzIgorKyAgICBwcmludCAiICAgYnVpbHQuICBGb3IgZWFjaCBvcHRpb24gZ3JvdXAgbmFtZWQgT1BUSU9OX2ZvbywgaXQgI2RlZmluZXMiCisrICAgIHByaW50ICIgICBfX09QVElPTl9mb28gdG8gYmUgMSBpZiB0aGUgZ3JvdXAgaXMgZW5hYmxlZCwgb3IgI2RlZmluZXMgdGhhdCIKKysgICAgcHJpbnQgIiAgIHN5bWJvbCB0byBiZSAwIGlmIHRoZSBncm91cCBpcyBkaXNhYmxlZC4gICovIgorKyAgICBwcmludCAiIgorKyAgICBwcmludCAiI2lmbmRlZiBfX0dOVV9PUFRJT05fR1JPVVBTX0giCisrICAgIHByaW50ICIjZGVmaW5lIF9fR05VX09QVElPTl9HUk9VUFNfSCIKKysgICAgcHJpbnQgIiIKKysKKysgICAgIyBQcm9kdWNlIGEgc29ydGVkIGxpc3Qgb2YgdmFyaWFibGUgbmFtZXMuCisrICAgIGk9MAorKyAgICBmb3IgKHZhciBpbiB2YXJzKQorKyAgICAgICAgbmFtZXNbaSsrXSA9IHZhcgorKyAgICBuID0gYXNvcnQgKG5hbWVzKQorKworKyAgICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykKKysgICAgeworKyAgICAgICAgdmFyID0gbmFtZXNbaV0KKysgICAgICAgIGlmICh2YXIgfiAvXk9QVElPTl8vKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmICh2YXJzW3Zhcl0gPT0gInkiKQorKyAgICAgICAgICAgICAgICBwcmludCAiI2RlZmluZSBfXyIgdmFyICIgMSIKKysgICAgICAgICAgICBlbHNlIGlmICh2YXJzW3Zhcl0gPT0gIm4iKQorKyAgICAgICAgICAgICAgICBwcmludCAiI2RlZmluZSBfXyIgdmFyICIgMCIKKysJICAgIGVsc2UgaWYgKHZhcnNbdmFyXSB+IC9eWzAtOV0rLyB8fAorKwkJICAgICB2YXJzW3Zhcl0gfiAvXjB4WzAtOWFBYkJjQ2REZUVmRl0rLyB8fAorKwkJICAgICB2YXJzW3Zhcl0gfiAvXlwiLykKKysJCSBwcmludCAiI2RlZmluZSBfXyIgdmFyICIgIiB2YXJzW3Zhcl0KKysJICAgIGVsc2UKKysJCXByaW50ICIvKiAjdW5kZWYgX18iIHZhciAiICovIgorKyAgICAgICAgICAgICMgSWdub3JlIHZhcmlhYmxlcyB0aGF0IGRvbid0IGhhdmUgYm9vbGVhbiwgaW50LCBoZXgsIG9yCisrCSAgICAjIHN0cmluZyB2YWx1ZXMuIElkZWFsbHksIHRoaXMgd291bGQgYmUgZHJpdmVuIGJ5IHRoZSB0eXBlcworKwkgICAgIyBnaXZlbiBpbiBvcHRpb24tZ3JvdXBzLmRlZi4KKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBwcmludCAiIgorKyAgICBwcmludCAiI2VuZGlmIC8qIF9fR05VX09QVElPTl9HUk9VUFNfSCAqLyIKKyt9CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMC1lZ2xpYmMtSGVscC1ib290c3RyYXAtY3Jvc3MtdG9vbGNoYWluLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIwLWVnbGliYy1IZWxwLWJvb3RzdHJhcC1jcm9zcy10b29sY2hhaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY5MzA5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMC1lZ2xpYmMtSGVscC1ib290c3RyYXAtY3Jvc3MtdG9vbGNoYWluLnBhdGNoCkBAIC0wLDAgKzEsMTAwIEBACitGcm9tIDhmZTBkMjk0ODhiMzc2MDExY2RhYWE0NjJkNTU3ZmZjMGIzMWZiNjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDo0OToyOCArMDAwMAorU3ViamVjdDogW1BBVENIIDIwLzI3XSBlZ2xpYmM6IEhlbHAgYm9vdHN0cmFwIGNyb3NzIHRvb2xjaGFpbgorCitUYWtlbiBmcm9tIEVHTElCQywgcjE0ODQgKyByMTUyNQorCisgICAgICAgIDIwMDctMDItMjAgIEppbSBCbGFuZHkgIDxqaW1iQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICAgICAgICAgICAgICAqIE1ha2VmaWxlIChpbnN0YWxsLWhlYWRlcnMpOiBQcmVzZXJ2ZSBvbGQgYmVoYXZpb3I6IGRlcGVuZCBvbgorICAgICAgICAgICAgICAgICQoaW5zdF9pbmNsdWRlZGlyKS9nbnUvc3R1YnMuaCBvbmx5IGlmIGluc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnMKKyAgICAgICAgICAgICAgICBpcyBzZXQ7IG90aGVyd2lzZSwgcGxhY2UgZ251L3N0dWJzLmggb24gdGhlICdpbnN0YWxsLW90aGVycycgbGlzdC4KKworICAgICAgICAyMDA3LTAyLTE2ICBKaW0gQmxhbmR5ICA8amltYkBjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgICAgICAgICAgKiBNYWtlZmlsZTogQW1lbmQgbWFrZSBpbnN0YWxsLWhlYWRlcnMgdG8gaW5zdGFsbCBldmVyeXRoaW5nCisgICAgICAgICAgICAgICAgbmVjZXNzYXJ5IGZvciBidWlsZGluZyBhIGNyb3NzLWNvbXBpbGVyLiAgSW5zdGFsbCBnbnUvc3R1YnMuaCBhcworICAgICAgICAgICAgICAgIHBhcnQgb2YgJ2luc3RhbGwtaGVhZGVycycsIG5vdCAnaW5zdGFsbC1vdGhlcnMnLgorICAgICAgICAgICAgICAgIElmIGluc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnMgaXMgJ3llcycsIGluc3RhbGwgYSBkdW1teSBjb3B5IG9mCisgICAgICAgICAgICAgICAgZ251L3N0dWJzLmgsIGluc3RlYWQgb2YgY29tcHV0aW5nIHRoZSByZWFsIHRoaW5nLgorICAgICAgICAgICAgICAgICogaW5jbHVkZS9zdHVicy1ib290c3RyYXAuaDogTmV3IGZpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIE1ha2VmaWxlICAgICAgICAgICAgICAgICAgfCAyMiArKysrKysrKysrKysrKysrKysrKystCisgaW5jbHVkZS9zdHVicy1ib290c3RyYXAuaCB8IDEyICsrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCBmOTA2MzkxLi5lNGUxNDllIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtNjksOSArNjksMTggQEAgc3ViZGlyLWRpcnMgPSBpbmNsdWRlCisgdnBhdGggJS5oICQoc3ViZGlyLWRpcnMpCisgCisgIyBXaGF0IHRvIGluc3RhbGwuCistaW5zdGFsbC1vdGhlcnMgPSAkKGluc3RfaW5jbHVkZWRpcikvZ251L3N0dWJzLmgKKyBpbnN0YWxsLWJpbi1zY3JpcHQgPQorIAorKyMgSWYgd2UncmUgYm9vdHN0cmFwcGluZywgaW5zdGFsbCBhIGR1bW15IGdudS9zdHVicy5oIGFsb25nIHdpdGggdGhlCisrIyBvdGhlciBoZWFkZXJzLCBzbyAnbWFrZSBpbnN0YWxsLWhlYWRlcnMnIHByb2R1Y2VzIGEgdXNlYWJsZSBpbmNsdWRlCisrIyB0cmVlLiAgT3RoZXJ3aXNlLCBpbnN0YWxsIGdudS9zdHVicy5oIGxhdGVyLCBhZnRlciB0aGUgcmVzdCBvZiB0aGUKKysjIGJ1aWxkIGlzIGRvbmUuCisraWZlcSAoJChpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzKSx5ZXMpCisraW5zdGFsbC1oZWFkZXJzOiAkKGluc3RfaW5jbHVkZWRpcikvZ251L3N0dWJzLmgKKytlbHNlCisraW5zdGFsbC1vdGhlcnMgPSAkKGluc3RfaW5jbHVkZWRpcikvZ251L3N0dWJzLmgKKytlbmRpZgorKworIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgaGVhZGVycyArPSBnbnUvbGliLW5hbWVzLmgKKyBlbmRpZgorQEAgLTE1MSw2ICsxNjAsMTYgQEAgb3RoZXJzOiAkKGNvbW1vbi1vYmpwZngpdGVzdHJ1bi5zaAorIAorIHN1YmRpci1zdHVicyA6PSAkKGZvcmVhY2ggZGlyLCQoc3ViZGlycyksJChjb21tb24tb2JqcGZ4KSQoZGlyKS9zdHVicykKKyAKKysjIGdudS9zdHVicy5oIGRlcGVuZHMgKHZpYSB0aGUgc3ViZGlyICdzdHVicycgdGFyZ2V0cykgb24gYWxsIHRoZSAubworKyMgZmlsZXMgaW4gRUdMSUJDLiAgRm9yIGJvb3RzdHJhcHBpbmcgYSBHQ0MvRUdMSUJDIHBhaXIsIGFuIGVtcHR5CisrIyBnbnUvc3R1YnMuaCBpcyBnb29kIGVub3VnaC4KKytpZmVxICgkKGluc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnMpLHllcykKKyskKGluc3RfaW5jbHVkZWRpcikvZ251L3N0dWJzLmg6IGluY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmggJCgrZm9yY2UpCisrCSQobWFrZS10YXJnZXQtZGlyZWN0b3J5KQorKwkkKElOU1RBTExfREFUQSkgJDwgJEAKKysKKytpbnN0YWxsZWQtc3R1YnMgPQorK2Vsc2UKKyBpZm5kZWYgYWJpLXZhcmlhbnRzCisgaW5zdGFsbGVkLXN0dWJzID0gJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oCisgZWxzZQorQEAgLTE3Nyw2ICsxOTYsNyBAQCAkKGluc3RfaW5jbHVkZWRpcikvZ251L3N0dWJzLmg6ICQoK2ZvcmNlKQorIAorIGluc3RhbGwtb3RoZXJzLW5vc3ViZGlyOiAkKGluc3RhbGxlZC1zdHVicykKKyBlbmRpZgorK2VuZGlmCisgCisgCisgIyBTaW5jZSBzdHVicy5oIGlzIG5ldmVyIG5lZWRlZCB3aGVuIGJ1aWxkaW5nIHRoZSBsaWJyYXJ5LCB3ZSBzaW1wbGlmeSB0aGUKK2RpZmYgLS1naXQgYS9pbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oIGIvaW5jbHVkZS9zdHVicy1ib290c3RyYXAuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjFkMmI2NjkKKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmgKK0BAIC0wLDAgKzEsMTIgQEAKKysvKiBQbGFjZWhvbGRlciBzdHVicy5oIGZpbGUgZm9yIGJvb3RzdHJhcHBpbmcuCisrCisrICAgV2hlbiBib290c3RyYXBwaW5nIGEgR0NDL0VHTElCQyBwYWlyLCBHQ0MgcmVxdWlyZXMgdGhhdCB0aGUgRUdMSUJDCisrICAgaGVhZGVycyBiZSBpbnN0YWxsZWQsIGJ1dCB3ZSBjYW4ndCBmdWxseSBidWlsZCBFR0xJQkMgd2l0aG91dCB0aGF0CisrICAgR0NDLiAgU28gd2UgcnVuIHRoZSBjb21tYW5kOgorKworKyAgICAgIG1ha2UgaW5zdGFsbC1oZWFkZXJzIGluc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnM9eWVzCisrCisrICAgdG8gaW5zdGFsbCB0aGUgaGVhZGVycyBHQ0MgbmVlZHMsIGJ1dCBhdm9pZCBidWlsZGluZyBjZXJ0YWluCisrICAgZGlmZmljdWx0IGhlYWRlcnMuICBUaGUgPGdudS9zdHVicy5oPiBoZWFkZXIgZGVwZW5kcywgdmlhIHRoZQorKyAgIEVHTElCQyBzdWJkaXIgJ3N0dWJzJyBtYWtlIHRhcmdldHMsIG9uIGV2ZXJ5IC5vIGZpbGUgaW4gRUdMSUJDLCBidXQKKysgICBhbiBlbXB0eSBzdHVicy5oIGxpa2UgdGhpcyB3aWxsIGRvIGZpbmUgZm9yIEdDQy4gICovCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMS1lZ2xpYmMtY2hlcnJ5LXBpY2tlZC1mcm9tLWh0dHAtd3d3LmVnbGliYy5vcmctYXJjaGl2LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIxLWVnbGliYy1jaGVycnktcGlja2VkLWZyb20taHR0cC13d3cuZWdsaWJjLm9yZy1hcmNoaXYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiYjhhMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMS1lZ2xpYmMtY2hlcnJ5LXBpY2tlZC1mcm9tLWh0dHAtd3d3LmVnbGliYy5vcmctYXJjaGl2LnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gZmUyYWU0Zjg3NzkyOGRkNmJmZjViYWMzZjE1YmNlNGI1MGQyYmQxMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjUxOjE2ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjEvMjddIGVnbGliYzogY2hlcnJ5LXBpY2tlZCBmcm9tCisgaHR0cDovL3d3dy5lZ2xpYmMub3JnL2FyY2hpdmVzL3BhdGNoZXMvbXNnMDA3NzIuaHRtbAorCitJdCBoYXNuJ3QgeWV0IGJlZW4gbWVyZ2VkIGludG8gZ2xpYmMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyByZXNvbHYvcmVzX2xpYmMuYyB8IDE1ICsrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcmVzb2x2L3Jlc19saWJjLmMgYi9yZXNvbHYvcmVzX2xpYmMuYworaW5kZXggZWUzZmEyMS4uMjllMjM0MCAxMDA2NDQKKy0tLSBhL3Jlc29sdi9yZXNfbGliYy5jCisrKysgYi9yZXNvbHYvcmVzX2xpYmMuYworQEAgLTIyLDEyICsyMiwxMyBAQAorICNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyAjaW5jbHVkZSA8cmVzb2x2Lmg+CisgI2luY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CistCisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgCisgLyogVGhlIGZvbGxvd2luZyBiaXQgaXMgY29waWVkIGZyb20gcmVzX2RhdGEuYyAod2hlcmUgaXQgaXMgI2lmZGVmJ2VkCisgICAgb3V0KSBzaW5jZSByZXNfaW5pdCgpIHNob3VsZCBnbyBpbnRvIGxpYmMuc28gYnV0IHRoZSByZXN0IG9mIHRoYXQKKyAgICBmaWxlIHNob3VsZCBub3QuICAqLworIAorK19fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAoc3RhdGljLCBsb2NrKTsKKyBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3Jlc19pbml0c3RhbXAgYXR0cmlidXRlX2hpZGRlbjsKKyAvKiBXZSBoYXZlIGF0b21pYyBpbmNyZW1lbnQgb3BlcmF0aW9ucyBvbiA2NC1iaXQgcGxhdGZvcm1zLiAgKi8KKyAjaWYgX19XT1JEU0laRSA9PSA2NAorQEAgLTM1LDcgKzM2LDYgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19yZXNfaW5pdHN0YW1wIGF0dHJpYnV0ZV9oaWRkZW47CisgIyBkZWZpbmUgYXRvbWljaW5jdW5sb2NrKGxvY2spICh2b2lkKSAwCisgIyBkZWZpbmUgYXRvbWljaW5jKHZhcikgY2F0b21pY19pbmNyZW1lbnQgKCYodmFyKSkKKyAjZWxzZQorLV9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAoc3RhdGljLCBsb2NrKTsKKyAjIGRlZmluZSBhdG9taWNpbmNsb2NrKGxvY2spIF9fbGliY19sb2NrX2xvY2sgKGxvY2spCisgIyBkZWZpbmUgYXRvbWljaW5jdW5sb2NrKGxvY2spIF9fbGliY19sb2NrX3VubG9jayAobG9jaykKKyAjIGRlZmluZSBhdG9taWNpbmModmFyKSArK3ZhcgorQEAgLTk0LDcgKzk0LDE4IEBAIHJlc19pbml0KHZvaWQpIHsKKyBpbnQKKyBfX3Jlc19tYXliZV9pbml0IChyZXNfc3RhdGUgcmVzcCwgaW50IHByZWluaXQpCisgeworKwlzdGF0aWMgdGltZV90IGxhc3RfbXRpbWU7CisrCXN0cnVjdCBzdGF0IHN0YXRidWY7CisrCWludCByZXQ7CisrCisgCWlmIChyZXNwLT5vcHRpb25zICYgUkVTX0lOSVQpIHsKKysJCXJldCA9IHN0YXQgKF9QQVRIX1JFU0NPTkYsICZzdGF0YnVmKTsKKysJCV9fbGliY19sb2NrX2xvY2sgKGxvY2spOworKwkJaWYgKChyZXQgPT0gMCkgJiYgKGxhc3RfbXRpbWUgIT0gc3RhdGJ1Zi5zdF9tdGltZSkpIHsKKysJCQlsYXN0X210aW1lID0gc3RhdGJ1Zi5zdF9tdGltZTsKKysJCQlhdG9taWNpbmMgKF9fcmVzX2luaXRzdGFtcCk7CisrCQl9CisrCQlfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworIAkJaWYgKF9fcmVzX2luaXRzdGFtcCAhPSByZXNwLT5fdS5fZXh0LmluaXRzdGFtcCkgeworIAkJCWlmIChyZXNwLT5uc2NvdW50ID4gMCkKKyAJCQkJX19yZXNfaWNsb3NlIChyZXNwLCB0cnVlKTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIyLWVnbGliYy1DbGVhci1jYWNoZS1saW5lcy1vbi1wcGM4eHgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjItZWdsaWJjLUNsZWFyLWNhY2hlLWxpbmVzLW9uLXBwYzh4eC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTRjOWMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIyLWVnbGliYy1DbGVhci1jYWNoZS1saW5lcy1vbi1wcGM4eHgucGF0Y2gKQEAgLTAsMCArMSw4MSBAQAorRnJvbSBiZTcyNzMyMjU2OTgwNzQzNDdhNzFkZTU4MDA2OTc3YmIzMDRkN2Y3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NTM6NDcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyMi8yN10gZWdsaWJjOiBDbGVhciBjYWNoZSBsaW5lcyBvbiBwcGM4eHgKKworMjAwNy0wNi0xMyAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AY29kZXNvdXJjZXJ5LmNvbT4KKyAgICAgICAgICAgIE1hcmsgU2hpbndlbGwgIDxzaGlud2VsbEBjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9saWJjLXN0YXJ0LmMKKyAgICAgICAgKF9fbGliY19zdGFydF9tYWluKTogRGV0ZWN0IDh4eCBwYXJ0cyBhbmQgY2xlYXIKKyAgICAgICAgX19jYWNoZV9saW5lX3NpemUgaWYgZGV0ZWN0ZWQuCisgICAgICAgICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9kbC1zeXNkZXAuYworICAgICAgICAoRExfUExBVEZPUk1fQVVYVik6IExpa2V3aXNlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2RsLXN5c2RlcC5jICB8IDE0ICsrKysrKysrKysrKystCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9saWJjLXN0YXJ0LmMgfCAxNSArKysrKysrKysrKysrKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2RsLXN5c2RlcC5jIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9kbC1zeXNkZXAuYworaW5kZXggYzI1MDRmZi4uZDUwZjFjYiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvZGwtc3lzZGVwLmMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvZGwtc3lzZGVwLmMKK0BAIC0yNCw5ICsyNCwyMSBAQCBpbnQgX19jYWNoZV9saW5lX3NpemUgYXR0cmlidXRlX2hpZGRlbjsKKyAvKiBTY2FuIHRoZSBBdXggVmVjdG9yIGZvciB0aGUgIkRhdGEgQ2FjaGUgQmxvY2sgU2l6ZSIgZW50cnkuICBJZiBmb3VuZAorICAgIHZlcmlmeSB0aGF0IHRoZSBzdGF0aWMgZXh0ZXJuIF9fY2FjaGVfbGluZV9zaXplIGlzIGRlZmluZWQgYnkgY2hlY2tpbmcKKyAgICBmb3Igbm90IE5VTEwuICBJZiBpdCBpcyBkZWZpbmVkIHRoZW4gYXNzaWduIHRoZSBjYWNoZSBibG9jayBzaXplCistICAgdmFsdWUgdG8gX19jYWNoZV9saW5lX3NpemUuICAqLworKyAgIHZhbHVlIHRvIF9fY2FjaGVfbGluZV9zaXplLiAgVGhpcyBpcyB1c2VkIGJ5IG1lbXNldCB0bworKyAgIG9wdGltaXplIHNldHRpbmcgdG8gemVyby4gIFdlIGhhdmUgdG8gZGV0ZWN0IDh4eCBwcm9jZXNzb3JzLCB3aGljaAorKyAgIGhhdmUgYnVnZ3kgZGNieiBpbXBsZW1lbnRhdGlvbnMgdGhhdCBjYW5ub3QgcmVwb3J0IHBhZ2UgZmF1bHRzCisrICAgY29ycmVjdGx5LiAgVGhhdCByZXF1aXJlcyByZWFkaW5nIFNQUiwgd2hpY2ggaXMgYSBwcml2aWxlZ2VkCisrICAgb3BlcmF0aW9uLiAgRm9ydHVuYXRlbHkgMi4yLjE4IGFuZCBsYXRlciBlbXVsYXRlcyBQb3dlclBDIG1mc3ByCisrICAgcmVhZHMgZnJvbSB0aGUgUFZSIHJlZ2lzdGVyLiAgICovCisgI2RlZmluZSBETF9QTEFURk9STV9BVVhWCQkJCQkJICAgICAgXAorICAgICAgIGNhc2UgQVRfRENBQ0hFQlNJWkU6CQkJCQkJICAgICAgXAorKwlpZiAoX19MSU5VWF9LRVJORUxfVkVSU0lPTiA+PSAweDAyMDIxOCkJCQkJICAgICAgXAorKwkgIHsJCQkJCQkJCSAgICAgIFwKKysJICAgIHVuc2lnbmVkIHB2ciA9IDA7CQkJCQkJICAgICAgXAorKwkgICAgYXNtICgibWZzcHIgJTAsIDI4NyIgOiAiPXIiIChwdnIpKTsJCQkJICAgICAgXAorKwkgICAgaWYgKChwdnIgJiAweGZmZmYwMDAwKSA9PSAweDAwNTAwMDAwKQkJCSAgICAgIFwKKysJICAgICAgYnJlYWs7CQkJCQkJCSAgICAgIFwKKysJICB9CQkJCQkJCQkgICAgICBcCisgCV9fY2FjaGVfbGluZV9zaXplID0gYXYtPmFfdW4uYV92YWw7CQkJCSAgICAgIFwKKyAJYnJlYWs7CisgCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9saWJjLXN0YXJ0LmMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xpYmMtc3RhcnQuYworaW5kZXggYTkzNjRjNy4uYTNlZDFkNCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbGliYy1zdGFydC5jCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xpYmMtc3RhcnQuYworQEAgLTY4LDExICs2OCwyNCBAQCBfX2xpYmNfc3RhcnRfbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2LAorICAgICAgIHJ0bGRfZmluaSA9IE5VTEw7CisgICAgIH0KKyAKKy0gIC8qIEluaXRpYWxpemUgdGhlIF9fY2FjaGVfbGluZV9zaXplIHZhcmlhYmxlIGZyb20gdGhlIGF1eCB2ZWN0b3IuICAqLworKyAgLyogSW5pdGlhbGl6ZSB0aGUgX19jYWNoZV9saW5lX3NpemUgdmFyaWFibGUgZnJvbSB0aGUgYXV4IHZlY3Rvci4KKysgICAgIFRoaXMgaXMgdXNlZCBieSBtZW1zZXQgdG8gb3B0aW1pemUgc2V0dGluZyB0byB6ZXJvLiAgV2UgaGF2ZSB0bworKyAgICAgZGV0ZWN0IDh4eCBwcm9jZXNzb3JzLCB3aGljaCBoYXZlIGJ1Z2d5IGRjYnogaW1wbGVtZW50YXRpb25zIHRoYXQKKysgICAgIGNhbm5vdCByZXBvcnQgcGFnZSBmYXVsdHMgY29ycmVjdGx5LiAgVGhhdCByZXF1aXJlcyByZWFkaW5nIFNQUiwKKysgICAgIHdoaWNoIGlzIGEgcHJpdmlsZWdlZCBvcGVyYXRpb24uICBGb3J0dW5hdGVseSAyLjIuMTggYW5kIGxhdGVyCisrICAgICBlbXVsYXRlcyBQb3dlclBDIG1mc3ByIHJlYWRzIGZyb20gdGhlIFBWUiByZWdpc3Rlci4gICovCisgICBmb3IgKEVsZlcgKGF1eHZfdCkgKiBhdiA9IGF1eHZlYzsgYXYtPmFfdHlwZSAhPSBBVF9OVUxMOyArK2F2KQorICAgICBzd2l0Y2ggKGF2LT5hX3R5cGUpCisgICAgICAgeworICAgICAgIGNhc2UgQVRfRENBQ0hFQlNJWkU6CisrCWlmIChfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwMjE4KQorKwkgIHsKKysJICAgIHVuc2lnbmVkIHB2ciA9IDA7CisrCisrCSAgICBhc20gKCJtZnNwciAlMCwgMjg3IiA6ICI9ciIgKHB2cikgOik7CisrCSAgICBpZiAoKHB2ciAmIDB4ZmZmZjAwMDApID09IDB4MDA1MDAwMDApCisrCSAgICAgIGJyZWFrOworKwkgIH0KKyAJX19jYWNoZV9saW5lX3NpemUgPSBhdi0+YV91bi5hX3ZhbDsKKyAJYnJlYWs7CisgICAgICAgfQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjMtZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIzLWVnbGliYy1SZXNvbHZlLV9fZnBzY3JfdmFsdWVzLW9uLVNINC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjNkNzUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIzLWVnbGliYy1SZXNvbHZlLV9fZnBzY3JfdmFsdWVzLW9uLVNINC5wYXRjaApAQCAtMCwwICsxLDU2IEBACitGcm9tIDcxOGU3ZTVkYjFjOGIwNzNhZGI5YTc5ZWM2ZjE2NzIzOGMyZDhiZGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDo1NTo1MyArMDAwMAorU3ViamVjdDogW1BBVENIIDIzLzI3XSBlZ2xpYmM6IFJlc29sdmUgX19mcHNjcl92YWx1ZXMgb24gU0g0CisKKzIwMTAtMDktMjkgIE5vYnVoaXJvIEl3YW1hdHN1ICA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisgICAgICAgICAgICBBbmRyZXcgU3R1YmJzICA8YW1zQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICAgICAgUmVzb2x2ZSBTSCdzIF9fZnBzY3JfdmFsdWVzIHRvIHN5bWJvbCBpbiBsaWJjLnNvLgorCisgICAgICAgICogc3lzZGVwcy9zaC9zaDQvZnB1L2ZwdV9jb250cm9sLmg6IEFkZCBDKysgX19zZXRfZnBzY3IgcHJvdG90eXBlLgorICAgICAgICAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL1ZlcnNpb25zIChHTElCQ18yLjIpOiBBZGQgX19mcHNjcl92YWx1ZXMuCisgICAgICAgICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzZGVwLlMgKF9fX2Zwc2NyX3ZhbHVlcyk6IE5ldyBjb25zdGFudC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9WZXJzaW9ucyB8ICAxICsKKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXNkZXAuUyB8IDExICsrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9WZXJzaW9ucyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL1ZlcnNpb25zCitpbmRleCBlMDkzOGM0Li5jYTFkN2RhIDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvVmVyc2lvbnMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL1ZlcnNpb25zCitAQCAtMiw2ICsyLDcgQEAgbGliYyB7CisgICBHTElCQ18yLjIgeworICAgICAjIGZ1bmN0aW9ucyB1c2VkIGluIG90aGVyIGxpYnJhcmllcworICAgICBfX3hzdGF0NjQ7IF9fZnhzdGF0NjQ7IF9fbHhzdGF0NjQ7CisrICAgIF9fZnBzY3JfdmFsdWVzOworIAorICAgICAjIGEqCisgICAgIGFscGhhc29ydDY0OworZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzZGVwLlMKK2luZGV4IGEwMmI3ZTIuLmI5YmUzMjYgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXNkZXAuUworKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzZGVwLlMKK0BAIC0zMCwzICszMCwxNCBAQCBFTlRSWSAoX19zeXNjYWxsX2Vycm9yKQorIAorICNkZWZpbmUgX19zeXNjYWxsX2Vycm9yIF9fc3lzY2FsbF9lcnJvcl8xCisgI2luY2x1ZGUgPHN5c2RlcHMvdW5peC9zaC9zeXNkZXAuUz4KKysKKysgICAgICAgLmRhdGEKKysgICAgICAgLmFsaWduIDMKKysgICAgICAgLmdsb2JsIF9fX2Zwc2NyX3ZhbHVlcworKyAgICAgICAudHlwZSBfX19mcHNjcl92YWx1ZXMsIEBvYmplY3QKKysgICAgICAgLnNpemUgX19fZnBzY3JfdmFsdWVzLCA4CisrX19fZnBzY3JfdmFsdWVzOgorKyAgICAgICAubG9uZyAwCisrICAgICAgIC5sb25nIDB4ODAwMDAKKyt3ZWFrX2FsaWFzIChfX19mcHNjcl92YWx1ZXMsIF9fZnBzY3JfdmFsdWVzKQorKworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjQtZWdsaWJjLUZvcndhcmQtcG9ydC1lZ2xpYmMtb3B0aW9ucy1ncm91cHMtc3VwcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNC1lZ2xpYmMtRm9yd2FyZC1wb3J0LWVnbGliYy1vcHRpb25zLWdyb3Vwcy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MTRlMjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjQtZWdsaWJjLUZvcndhcmQtcG9ydC1lZ2xpYmMtb3B0aW9ucy1ncm91cHMtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDE2ODQyIEBACitGcm9tIDJhNWQ3YmNmMGZmNzkxYzk1ZWUxMzg4NzcyNDA4YTFiZjQ0NTQ2OTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMTozMzo0OSArMDAwMAorU3ViamVjdDogW1BBVENIIDI0LzI3XSBlZ2xpYmM6IEZvcndhcmQgcG9ydCBlZ2xpYmMgb3B0aW9ucyBncm91cHMgc3VwcG9ydAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIE1ha2Vjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjAgKy0KKyBNYWtlcnVsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE5ICsKKyBhcmdwL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKKyBhcmdwL2FyZ3AtZm10c3RyZWFtLmMgICAgICAgICAgICAgICAgICAgfCAgIDI1ICstCisgYXJncC9hcmdwLWhlbHAuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMyArLQorIGFyZ3AvYXJncC1uYW1lZnJvYi5oICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKworIGNhdGdldHMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTcgKy0KKyBjcnlwdC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICstCisgY3J5cHQvY3J5cHQtZW50cnkuYyAgICAgICAgICAgICAgICAgICAgIHwgICAxMyArCisgY3J5cHQvY3J5cHRfY29tbW9uLmMgICAgICAgICAgICAgICAgICAgIHwgICA0MiArCisgY3J5cHQvY3J5cHRfdXRpbC5jICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCAtCisgY3N1L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCisgZGVidWcvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0MSArLQorIGRlYnVnL3NlZ2ZhdWx0LmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKy0KKyBkZWJ1Zy90c3QtY2hrMS5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICsKKyBkbGZjbi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICstCisgZWxmL2RsLXN1cHBvcnQuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCisgZWxmL3J0bGQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNyArLQorIGV4dHJhLWxpYi5tayAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0KKyBncnAvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKKyBoZXNpb2QvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICstCisgaWNvbnYvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArCisgaWNvbnYvZ2NvbnZfZGIuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCisgaWNvbnYvZ2NvbnZfdHJhbnMuYyAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArCisgaWNvbnYvaWNvbnZfcHJvZy5jICAgICAgICAgICAgICAgICAgICAgIHwgICAgOCArCisgaWNvbnZkYXRhL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgIHwgICAyNyArLQorIGluY2x1ZGUvbmV0ZGIuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKworIGluZXQvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjIgKy0KKyBpbnRsL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICstCisgaW50bC9kY2lnZXR0ZXh0LmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAzOSArLQorIGlvL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTggKy0KKyBsaWJpZG4vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICstCisgbGliaWRuL3RvdXRmOC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArLQorIGxpYmlvL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNjYgKy0KKyBsaWJpby9fX2ZwdXJnZS5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisgbGliaW8vZmlsZW9wcy5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArLQorIGxpYmlvL2lvZndpZGUuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjYgKworIGxpYmlvL2lvc2Vla29mZi5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBsaWJpby9pb3NlZWtwb3MuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisgbGliaW8vaW9zZXRidWZmZXIuYyAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArCisgbGliaW8vbGliaW9QLmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCArLQorIGxpYmlvL3dkdW1teWZpbGVvcHMuYyAgICAgICAgICAgICAgICAgICB8ICAxNjEgKworIGxvY2FsZS9DLWN0eXBlLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjAgKworIGxvY2FsZS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDEgKy0KKyBsb2NhbGUvY2F0bmFtZXMuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ4ICsKKyBsb2NhbGUvZHVtbXktc2V0bG9jYWxlLmMgICAgICAgICAgICAgICAgfCAgIDMzICsKKyBsb2NhbGUvbG9jYWxlaW5mby5oICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisgbG9jYWxlL3Byb2dyYW1zL2NoYXJtYXAtZGlyLmMgICAgICAgICAgIHwgICAgNiArCisgbG9jYWxlL3Byb2dyYW1zL2xkLWNvbGxhdGUuYyAgICAgICAgICAgIHwgICAxNyArLQorIGxvY2FsZS9wcm9ncmFtcy9sZC1jdHlwZS5jICAgICAgICAgICAgICB8ICAgMjcgKy0KKyBsb2NhbGUvcHJvZ3JhbXMvbGQtbWVzc2FnZXMuYyAgICAgICAgICAgfCAgICA1ICsKKyBsb2NhbGUvcHJvZ3JhbXMvbGQtdGltZS5jICAgICAgICAgICAgICAgfCAgIDMxICstCisgbG9jYWxlL3Byb2dyYW1zL2xpbmVyZWFkZXIuYyAgICAgICAgICAgIHwgICAgMiArLQorIGxvY2FsZS9wcm9ncmFtcy9sb2NhbGVkZWYuYyAgICAgICAgICAgICB8ICAgIDggKworIGxvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmMgICAgICAgICAgICAgICB8ICAgIDUgKy0KKyBsb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5oICAgICAgICAgICAgICAgfCAgIDU5ICstCisgbG9jYWxlL3NldGxvY2FsZS5jICAgICAgICAgICAgICAgICAgICAgIHwgICAzMCAtCisgbG9jYWxlL3hsb2NhbGUuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzNyArCisgbG9jYWxlZGF0YS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAzNSArLQorIGxvZ2luL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTcgKy0KKyBtYWxsb2MvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICstCisgbWFsbG9jL21lbXVzYWdlLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArLQorIG1hbGxvYy9tZW11c2FnZS5zaCAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBtYXRoL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICstCisgbWlzYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNSArLQorIG1pc2MvZXJyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKworIG1pc2MvZXJyb3IuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKworIG1pc2MvdHN0LWVmZ2N2dC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBuaXMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMxICstCisgbnB0bC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyOCArLQorIG5wdGwvcHRocmVhZF9jcmVhdGUuYyAgICAgICAgICAgICAgICAgICB8ICAgIDUgKworIG5zY2QvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzMgKy0KKyBuc2NkL25pc19oYXNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKKyBuc3MvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDY3ICstCisgbnNzL2ZpeGVkLW5zc3dpdGNoLmNvbmYgICAgICAgICAgICAgICAgIHwgICAyMiArCisgbnNzL2ZpeGVkLW5zc3dpdGNoLmZ1bmN0aW9ucyAgICAgICAgICAgIHwgIDEyMSArCisgbnNzL2dlbi1maXhlZC1uc3N3aXRjaC5jICAgICAgICAgICAgICAgIHwgIDgwMyArKysKKyBuc3MvZ2V0ZW50LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ2ICstCisgbnNzL2dldG5zc2VudF9yLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOSArLQorIG5zcy9uc3N3aXRjaC5jICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMDkgKy0KKyBuc3MvbnNzd2l0Y2guaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE4ICstCisgcG9zaXgvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5NCArLQorIHBvc2l4L2J1Zy1yZWdleDEuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKworIHBvc2l4L2J1Zy1yZWdleDYuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgIDggKy0KKyBwb3NpeC9mbm1hdGNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICstCisgcG9zaXgvZm5tYXRjaF9sb29wLmMgICAgICAgICAgICAgICAgICAgIHwgICAyMyArLQorIHBvc2l4L2dsb2IuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTUgKy0KKyBwb3NpeC9yZWdjb21wLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDk4ICstCisgcG9zaXgvcmVnZXguaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArCisgcG9zaXgvcmVnZXhfaW50ZXJuYWwuYyAgICAgICAgICAgICAgICAgIHwgICA0NSArLQorIHBvc2l4L3JlZ2V4X2ludGVybmFsLmggICAgICAgICAgICAgICAgICB8ICAgMjMgKy0KKyBwb3NpeC9yZWdleGVjLWNvbXBhdC5jICAgICAgICAgICAgICAgICAgfCAgIDM5ICsKKyBwb3NpeC9yZWdleGVjLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDcxICstCisgcG9zaXgveHJlZ2V4LmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgODIxNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgcHdkL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCisgcmVzb2x2L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMSArLQorIHN0ZGlvLWNvbW1vbi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgMzUgKy0KKyBzdGRpby1jb21tb24vX2kxOG5fbnVtYmVyLmggICAgICAgICAgICAgfCAgIDEzICsKKyBzdGRpby1jb21tb24vZnhwcmludGYuYyAgICAgICAgICAgICAgICAgfCAgICA1ICsKKyBzdGRpby1jb21tb24vcHJpbnRmX2ZwLmMgICAgICAgICAgICAgICAgfCAgIDIyICsKKyBzdGRpby1jb21tb24vcHJpbnRmX2ZwaGV4LmMgICAgICAgICAgICAgfCAgIDEzICsKKyBzdGRpby1jb21tb24vcHJpbnRmX3NpemUuYyAgICAgICAgICAgICAgfCAgICA4ICsKKyBzdGRpby1jb21tb24vc2NhbmYxNC5jICAgICAgICAgICAgICAgICAgfCAgICAzICsKKyBzdGRpby1jb21tb24vdHN0LXBvcGVuLmMgICAgICAgICAgICAgICAgfCAgICAzICsKKyBzdGRpby1jb21tb24vdHN0LXNwcmludGYuYyAgICAgICAgICAgICAgfCAgICA0ICstCisgc3RkaW8tY29tbW9uL3RzdGRpb21pc2MuYyAgICAgICAgICAgICAgIHwgICAgNSArCisgc3RkaW8tY29tbW9uL3ZmcHJpbnRmLmMgICAgICAgICAgICAgICAgIHwgICAzMSArLQorIHN0ZGlvLWNvbW1vbi92ZnNjYW5mLmMgICAgICAgICAgICAgICAgICB8ICAgNTMgKy0KKyBzdGRsaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM0ICstCisgc3RkbGliL3N0cnRvZF9sLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMyArCisgc3RkbGliL3RzdC1zdHJ0b2QuYyAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArCisgc3RyZWFtcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArLQorIHN0cmluZy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTQgKy0KKyBzdHJpbmcvc3RyY29sbF9sLmMgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKKyBzdHJpbmcvc3RyZXJyb3JfbC5jICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKKyBzdHJpbmcvc3RyeGZybV9sLmMgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKKyBzdHJpbmcvdGVzdC1zdHJjbXAuYyAgICAgICAgICAgICAgICAgICAgfCAgIDI4IC0KKyBzdHJpbmcvdHN0LXN0cnhmcm0uYyAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKKyBzdHJpbmcvdHN0LXN0cnhmcm0yLmMgICAgICAgICAgICAgICAgICAgfCAgICAzICsKKyBzdW5ycGMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ0ICstCisgc3lzZGVwcy9hcm0vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgIHwgICAgNSArLQorIHN5c2RlcHMvZ2VuZXJpYy9sZHNvZGVmcy5oICAgICAgICAgICAgICB8ICAgIDggKworIHN5c2RlcHMvZ251L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKy0KKyBzeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvTWFrZWZpbGUgICAgICAgfCAgIDI3ICstCisgc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5jIHwgICA0MCArLQorIHN5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuaCB8ICAgMjQgKy0KKyBzeXNkZXBzL25wdGwvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgfCAgICAzICsKKyBzeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2suaCAgICAgICAgICAgfCAgIDQ1ICsKKyBzeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2tQLmggICAgICAgICAgfCAgIDUwICstCisgc3lzZGVwcy9ucHRsL3NtYWxsLW1hY3Jvcy1mbnMuYyAgICAgICAgIHwgICA3MiArCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvZ2V0aG9zdGlkLmMgICAgIHwgICAgNiArCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvbGliY19mYXRhbC5jICAgIHwgICAgMyArCisgdGltZS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCArLQorIHRpbWUvc3RyZnRpbWVfbC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTIgKy0KKyB0aW1lL3N0cnB0aW1lX2wuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE0ICstCisgdGltZXpvbmUvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQorIHdjc21icy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjcgKy0KKyB3Y3NtYnMvd2NzbWJzbG9hZC5jICAgICAgICAgICAgICAgICAgICAgfCAgIDEzICsKKyB3Y3R5cGUvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE0ICstCisgMTM5IGZpbGVzIGNoYW5nZWQsIDExMzYzIGluc2VydGlvbnMoKyksIDU4MyBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgY3J5cHQvY3J5cHRfY29tbW9uLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliaW8vd2R1bW15ZmlsZW9wcy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxvY2FsZS9jYXRuYW1lcy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxvY2FsZS9kdW1teS1zZXRsb2NhbGUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBuc2NkL25pc19oYXNoLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbnNzL2ZpeGVkLW5zc3dpdGNoLmNvbmYKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbnNzL2ZpeGVkLW5zc3dpdGNoLmZ1bmN0aW9ucworIGNyZWF0ZSBtb2RlIDEwMDY0NCBuc3MvZ2VuLWZpeGVkLW5zc3dpdGNoLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgcG9zaXgvcmVnZXhlYy1jb21wYXQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBwb3NpeC94cmVnZXguYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL25wdGwvc21hbGwtbWFjcm9zLWZucy5jCisKK2RpZmYgLS1naXQgYS9NYWtlY29uZmlnIGIvTWFrZWNvbmZpZworaW5kZXggZjEzNmI4OC4uNTJkYWU4ZiAxMDA2NDQKKy0tLSBhL01ha2Vjb25maWcKKysrKyBiL01ha2Vjb25maWcKK0BAIC02MDksNyArNjA5LDcgQEAgZWxmLW9ianBmeCA9ICQoY29tbW9uLW9ianBmeCllbGYvCisgIyBhbmQgcnVuIG9uIHRoZSBidWlsZCBzeXN0ZW0sIGNhdXNlcyB0aGF0IHByb2dyYW0gd2l0aCB0aG9zZQorICMgYXJndW1lbnRzIHRvIGJlIHJ1biBvbiB0aGUgaG9zdCBmb3Igd2hpY2ggdGhlIGxpYnJhcnkgaXMgYnVpbHQuCisgaWZuZGVmIHRlc3Qtd3JhcHBlcgorLXRlc3Qtd3JhcHBlciA9CisrdGVzdC13cmFwcGVyID0gJChjcm9zcy10ZXN0LXdyYXBwZXIpCisgZW5kaWYKKyAjIExpa2V3aXNlLCBidXQgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gaXMgcHJlY2VkZWQgYnkKKyAjIDx2YXJpYWJsZT49PHZhbHVlPiBhc3NpZ25tZW50cyBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorQEAgLTEwODksNiArMTA4OSwyNCBAQCBsaWJtID0gJChjb21tb24tb2JqcGZ4KW1hdGgvbGlibS5hCisgbGlibXZlYyA9ICQoY29tbW9uLW9ianBmeCltYXRodmVjL2xpYm12ZWMuYQorIGVuZGlmCisgCisrIyBHZW5lcmF0ZSBhIGhlYWRlciBmaWxlIHRoYXQgI2RlZmluZXMgcHJlcHJvY2Vzc29yIHN5bWJvbHMgaW5kaWNhdGluZworKyMgd2hpY2ggb3B0aW9uIGdyb3VwcyBhcmUgZW5hYmxlZC4gIE5vdGUgdGhhdCB0aGUgb3B0aW9uLWdyb3Vwcy5jb25maWcgZmlsZQorKyMgbWF5IG5vdCBleGlzdCBhdCBhbGwuCisrYmVmb3JlLWNvbXBpbGUgKz0gJChjb21tb24tb2JqcGZ4KWdudS9vcHRpb24tZ3JvdXBzLmgKKytjb21tb24tZ2VuZXJhdGVkICs9IGdudS9vcHRpb24tZ3JvdXBzLmggZ251L29wdGlvbi1ncm91cHMuc3RtcAorK2hlYWRlcnMgKz0gZ251L29wdGlvbi1ncm91cHMuaAorKyQoY29tbW9uLW9ianBmeClnbnUvb3B0aW9uLWdyb3Vwcy5oOiAkKGNvbW1vbi1vYmpwZngpZ251L29wdGlvbi1ncm91cHMuc3RtcDsgQDoKKyskKGNvbW1vbi1vYmpwZngpZ251L29wdGlvbi1ncm91cHMuc3RtcDoJCQkJCVwKKysJCSQoLi4pc2NyaXB0cy9vcHRpb24tZ3JvdXBzLmF3awkJCQlcCisrCQkkKC4uKW9wdGlvbi1ncm91cHMuZGVmYXVsdHMJCQkJXAorKwkJJCh3aWxkY2FyZCAkKGNvbW1vbi1vYmpwZngpb3B0aW9uLWdyb3Vwcy5jb25maWcpCisrCSQobWFrZS10YXJnZXQtZGlyZWN0b3J5KQorKwlAcm0gLWYgJHtAOnN0bXA9VH0gJEAKKysJTENfQUxMPUMgJChBV0spIC1mICReID4gJHtAOnN0bXA9VH0KKysJJChtb3ZlLWlmLWNoYW5nZSkgJHtAOnN0bXA9VH0gJHtAOnN0bXA9aH0KKysJdG91Y2ggJEAKKysKKysKKyAjIFRoZXNlIGFyZSB0aGUgc3ViZGlyZWN0b3JpZXMgY29udGFpbmluZyB0aGUgbGlicmFyeSBzb3VyY2UuICBUaGUgb3JkZXIKKyAjIGlzIG1vcmUgb3IgbGVzcyBhcmJpdHJhcnkuICBUaGUgc29ydGluZyBzdGVwIHdpbGwgdGFrZSBjYXJlIG9mIHRoZQorICMgZGVwZW5kZW5jaWVzLgorZGlmZiAtLWdpdCBhL01ha2VydWxlcyBiL01ha2VydWxlcworaW5kZXggZjljYTNmNS4uMWRkNDFhYSAxMDA2NDQKKy0tLSBhL01ha2VydWxlcworKysrIGIvTWFrZXJ1bGVzCitAQCAtNDU2LDYgKzQ1NiwyNSBAQCBkZWZpbmUgc2VkLXJlbW92ZS1vYmpwZngKKyBlbmRlZgorIGVuZGlmCisgDAorKyMgSW5jbHVkZSB0YXJnZXRzIGluIHRoZSBzZWxlY3RlZCBvcHRpb24gZ3JvdXBzLgorK2F1eCAgICAgICAgICAgICAgICAgICs9ICQoYXV4LXkpCisrZXh0cmEtbGlicyAgICAgICAgICAgKz0gJChleHRyYS1saWJzLXkpCisrZXh0cmEtbGlicy1vdGhlcnMgICAgKz0gJChleHRyYS1saWJzLW90aGVycy15KQorK2V4dHJhLW9ianMgICAgICAgICAgICs9ICQoZXh0cmEtb2Jqcy15KQorK2luc3RhbGwtYmluICAgICAgICAgICs9ICQoaW5zdGFsbC1iaW4teSkKKytpbnN0YWxsLW90aGVycyAgICAgICArPSAkKGluc3RhbGwtb3RoZXJzLXkpCisraW5zdGFsbC1zYmluICAgICAgICAgKz0gJChpbnN0YWxsLXNiaW4teSkKKyttb2R1bGVzICAgICAgICAgICAgICArPSAkKG1vZHVsZXMteSkKKytvdGhlcnMgICAgICAgICAgICAgICArPSAkKG90aGVycy15KQorK290aGVycy1waWUgICAgICAgICAgICs9ICQob3RoZXJzLXBpZS15KQorK3JvdXRpbmVzICAgICAgICAgICAgICs9ICQocm91dGluZXMteSkKKytzdGF0aWMtb25seS1yb3V0aW5lcyArPSAkKHN0YXRpYy1vbmx5LXJvdXRpbmVzLXkpCisrc3lzZGVwX3JvdXRpbmVzICAgICAgKz0gJChzeXNkZXBfcm91dGluZXMteSkKKyt0ZXN0LXNyY3MgICAgICAgICAgICArPSAkKHRlc3Qtc3Jjcy15KQorK3Rlc3RzICAgICAgICAgICAgICAgICs9ICQodGVzdHMteSkKKyt4dGVzdHMgICAgICAgICAgICAgICArPSAkKHh0ZXN0cy15KQorKworKwwKKyAjIE1vZGlmeSB0aGUgbGlzdCBvZiByb3V0aW5lcyB3ZSBidWlsZCBmb3IgZGlmZmVyZW50IHRhcmdldHMKKyAKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorZGlmZiAtLWdpdCBhL2FyZ3AvTWFrZWZpbGUgYi9hcmdwL01ha2VmaWxlCitpbmRleCAxYTg3NjI5Li5mN2MxZTQwIDEwMDY0NAorLS0tIGEvYXJncC9NYWtlZmlsZQorKysrIGIvYXJncC9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlNYWtlZmlsZSBmb3IgYXJncC4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBhcmdwCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitkaWZmIC0tZ2l0IGEvYXJncC9hcmdwLWZtdHN0cmVhbS5jIGIvYXJncC9hcmdwLWZtdHN0cmVhbS5jCitpbmRleCAyYjg0NWUwLi5jMzQ0ZTdiIDEwMDY0NAorLS0tIGEvYXJncC9hcmdwLWZtdHN0cmVhbS5jCisrKysgYi9hcmdwL2FyZ3AtZm10c3RyZWFtLmMKK0BAIC00Miw2ICs0Miw3IEBACisgI2lmZGVmIF9MSUJDCisgIyBpbmNsdWRlIDx3Y2hhci5oPgorICMgaW5jbHVkZSA8bGliaW8vbGliaW9QLmg+CisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICMgZGVmaW5lIF9fdnNucHJpbnRmKHMsIGwsIGYsIGEpIF9JT192c25wcmludGYgKHMsIGwsIGYsIGEpCisgI2VuZGlmCisgCitAQCAtMTAwLDcgKzEwMSwxMSBAQCBfX2FyZ3BfZm10c3RyZWFtX2ZyZWUgKGFyZ3BfZm10c3RyZWFtX3QgZnMpCisgICBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoZnMpOworICAgaWYgKGZzLT5wID4gZnMtPmJ1ZikKKyAgICAgeworKyNpZmRlZiBfTElCQworICAgICAgIF9fZnhwcmludGYgKGZzLT5zdHJlYW0sICIlLipzIiwgKGludCkgKGZzLT5wIC0gZnMtPmJ1ZiksIGZzLT5idWYpOworKyNlbHNlCisrICAgICAgZndyaXRlX3VubG9ja2VkIChmcy0+YnVmLCAxLCBmcy0+cCAtIGZzLT5idWYsIGZzLT5zdHJlYW0pOworKyNlbmRpZgorICAgICB9CisgICBmcmVlIChmcy0+YnVmKTsKKyAgIGZyZWUgKGZzKTsKK0BAIC0xNDUsOSArMTUwLDE3IEBAIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChhcmdwX2ZtdHN0cmVhbV90IGZzKQorIAkgICAgICBzaXplX3QgaTsKKyAJICAgICAgZm9yIChpID0gMDsgaSA8IHBhZDsgaSsrKQorIAkJeworKyNpZmRlZiBfTElCQworIAkJICBpZiAoX0lPX2Z3aWRlIChmcy0+c3RyZWFtLCAwKSA+IDApCistCQkgICAgcHV0d2NfdW5sb2NrZWQgKEwnICcsIGZzLT5zdHJlYW0pOworKyAgICAgICAgICAgICAgICAgICAgeworKyNpZiAhIF9MSUJDIHx8IF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKysgICAgICAgICAgICAgICAgICAgICAgcHV0d2NfdW5sb2NrZWQgKEwnICcsIGZzLT5zdHJlYW0pOworKyNlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworKyNlbmRpZgorKyAgICAgICAgICAgICAgICAgICAgfQorIAkJICBlbHNlCisrI2VuZGlmCisgCQkgICAgcHV0Y191bmxvY2tlZCAoJyAnLCBmcy0+c3RyZWFtKTsKKyAJCX0KKyAJICAgIH0KK0BAIC0zMDgsOSArMzIxLDE3IEBAIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChhcmdwX2ZtdHN0cmVhbV90IGZzKQorIAkgICAgICAqbmwrKyA9ICcgJzsKKyAJICBlbHNlCisgCSAgICBmb3IgKGkgPSAwOyBpIDwgZnMtPndtYXJnaW47ICsraSkKKysjaWZkZWYgX0xJQkMKKyAJICAgICAgaWYgKF9JT19md2lkZSAoZnMtPnN0cmVhbSwgMCkgPiAwKQorLQkJcHV0d2NfdW5sb2NrZWQgKEwnICcsIGZzLT5zdHJlYW0pOworKyAgICAgICAgICAgICAgICB7CisrI2lmZGVmIE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisrICAgICAgICAgICAgICAgICAgcHV0d2NfdW5sb2NrZWQgKEwnICcsIGZzLT5zdHJlYW0pOworKyNlbHNlCisrICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisrI2VuZGlmCisrICAgICAgICAgICAgICAgIH0KKyAJICAgICAgZWxzZQorKyNlbmRpZgorIAkJcHV0Y191bmxvY2tlZCAoJyAnLCBmcy0+c3RyZWFtKTsKKyAKKyAJICAvKiBDb3B5IHRoZSB0YWlsIG9mIHRoZSBvcmlnaW5hbCBidWZmZXIgaW50byB0aGUgY3VycmVudCBidWZmZXIKK2RpZmYgLS1naXQgYS9hcmdwL2FyZ3AtaGVscC5jIGIvYXJncC9hcmdwLWhlbHAuYworaW5kZXggYjA1NWU0NS4uNmIzYzRjMSAxMDA2NDQKKy0tLSBhL2FyZ3AvYXJncC1oZWxwLmMKKysrKyBiL2FyZ3AvYXJncC1oZWxwLmMKK0BAIC01MSw2ICs1MSw3IEBAIGNoYXIgKmFsbG9jYSAoKTsKKyAjaWZkZWYgX0xJQkMKKyAjIGluY2x1ZGUgPC4uL2xpYmlvL2xpYmlvUC5oPgorICMgaW5jbHVkZSA8d2NoYXIuaD4KKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2VuZGlmCisgCisgI2lmbmRlZiBfCitAQCAtMTcwMiw3ICsxNzAzLDcgQEAgY2hhciAqX19hcmdwX2Jhc2VuYW1lIChjaGFyICpuYW1lKQorIH0KKyAKKyBjaGFyICoKKy1fX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lICh2b2lkKQorKyhfX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lKSAodm9pZCkKKyB7CisgIyBpZiBIQVZFX0RFQ0xfUFJPR1JBTV9JTlZPQ0FUSU9OX1NIT1JUX05BTUUKKyAgIHJldHVybiBwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKK0BAIC0xODczLDkgKzE4NzQsMTcgQEAgX19hcmdwX2ZhaWx1cmUgKGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwgaW50IHN0YXR1cywgaW50IGVycm51bSwKKyAjZW5kaWYKKyAJICAgIH0KKyAKKysjaWZkZWYgX0xJQkMKKyAJICBpZiAoX0lPX2Z3aWRlIChzdHJlYW0sIDApID4gMCkKKy0JICAgIHB1dHdjX3VubG9ja2VkIChMJ1xuJywgc3RyZWFtKTsKKysgICAgICAgICAgICB7CisrI2lmICEgX0xJQkMgfHwgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworKyAgICAgICAgICAgICAgcHV0d2NfdW5sb2NrZWQgKEwnXG4nLCBzdHJlYW0pOworKyNlbHNlCisrICAgICAgICAgICAgICBhYm9ydCAoKTsKKysjZW5kaWYKKysgICAgICAgICAgICB9CisgCSAgZWxzZQorKyNlbmRpZgorIAkgICAgcHV0Y191bmxvY2tlZCAoJ1xuJywgc3RyZWFtKTsKKyAKKyAjaWYgX0xJQkMgfHwgKEhBVkVfRkxPQ0tGSUxFICYmIEhBVkVfRlVOTE9DS0ZJTEUpCitkaWZmIC0tZ2l0IGEvYXJncC9hcmdwLW5hbWVmcm9iLmggYi9hcmdwL2FyZ3AtbmFtZWZyb2IuaAoraW5kZXggZjY3YzU4Zi4uZTIwMDJkYyAxMDA2NDQKKy0tLSBhL2FyZ3AvYXJncC1uYW1lZnJvYi5oCisrKysgYi9hcmdwL2FyZ3AtbmFtZWZyb2IuaAorQEAgLTc2LDEwICs3NiwxMiBAQAorICN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX3dtYXJnaW4KKyAjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fd21hcmdpbiBhcmdwX2ZtdHN0cmVhbV93bWFyZ2luCisgCisrI2lmIDAKKyAjaW5jbHVkZSAibWVtcGNweS5oIgorICNpbmNsdWRlICJzdHJjYXNlLmgiCisgI2luY2x1ZGUgInN0cmNocm51bC5oIgorICNpbmNsdWRlICJzdHJuZHVwLmgiCisrI2VuZGlmCisgCisgLyogbm9ybWFsIGxpYmMgZnVuY3Rpb25zIHdlIGNhbGwgKi8KKyAjdW5kZWYgX19mbG9ja2ZpbGUKK2RpZmYgLS1naXQgYS9jYXRnZXRzL01ha2VmaWxlIGIvY2F0Z2V0cy9NYWtlZmlsZQoraW5kZXggNDYyNGE4OC4uMDU3MTRmZCAxMDA2NDQKKy0tLSBhL2NhdGdldHMvTWFrZWZpbGUKKysrKyBiL2NhdGdldHMvTWFrZWZpbGUKK0BAIC0yMiwyMCArMjIsMjMgQEAgc3ViZGlyCTo9IGNhdGdldHMKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgaGVhZGVycwkJPSBubF90eXBlcy5oCistcm91dGluZXMJPSBjYXRnZXRzIG9wZW5fY2F0YWxvZworLW90aGVycwkJPSBnZW5jYXQKKy1pbnN0YWxsLWJpbgk9IGdlbmNhdAorLWV4dHJhLW9ianMJPSAkKGdlbmNhdC1tb2R1bGVzOj0ubykKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfQ0FUR0VUUykgICAgOj0gY2F0Z2V0cyBvcGVuX2NhdGFsb2cKKytvdGhlcnMtJChPUFRJT05fRUdMSUJDX0NBVEdFVFMpICAgICAgOj0gZ2VuY2F0CisraW5zdGFsbC1iaW4tJChPUFRJT05fRUdMSUJDX0NBVEdFVFMpIDo9IGdlbmNhdAorK2V4dHJhLW9ianMtJChPUFRJT05fRUdMSUJDX0NBVEdFVFMpICA6PSAkKGdlbmNhdC1tb2R1bGVzOj0ubykKKyAKKy10ZXN0cyA9IHRzdC1jYXRnZXRzCistdGVzdC1zcmNzID0gdGVzdC1nZW5jYXQKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQ0FUR0VUUykgICAgICAgOj0gdHN0LWNhdGdldHMKKyt0ZXN0LXNyY3MtJChPUFRJT05fRUdMSUJDX0NBVEdFVFMpICAgOj0gdGVzdC1nZW5jYXQKKyAKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19DQVRHRVRTKSkKKyBpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpZGUvbGliYy5jYXQgJChvYmpwZngpdGVzdDEuY2F0ICQob2JqcGZ4KXRlc3QyLmNhdCBcCisgCQkgJChvYmpwZngpc2FtcGxlLlNKSVMuY2F0ICQob2JqcGZ4KXRlc3QtZ2VuY2F0Lm91dAorIGVuZGlmCistCisrZW5kaWYKKyBnZW5jYXQtbW9kdWxlcwk9IHhtYWxsb2MKKyAKKyAjIFRvIGZpbmQgeG1hbGxvYy5jCitkaWZmIC0tZ2l0IGEvY3J5cHQvTWFrZWZpbGUgYi9jcnlwdC9NYWtlZmlsZQoraW5kZXggMzRjNGRkNy4uN2MxOGM4OCAxMDA2NDQKKy0tLSBhL2NyeXB0L01ha2VmaWxlCisrKysgYi9jcnlwdC9NYWtlZmlsZQorQEAgLTE4LDIxICsxOCwyNSBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgY3J5cHQoKSBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGNyeXB0CisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgaGVhZGVycyA6PSBjcnlwdC5oCisgCistZXh0cmEtbGlicyA6PSBsaWJjcnlwdAorLWV4dHJhLWxpYnMtb3RoZXJzIDo9ICQoZXh0cmEtbGlicykKKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19DUllQVCkgOj0gbGliY3J5cHQKKytleHRyYS1saWJzLW90aGVycy15IDo9ICQoZXh0cmEtbGlicy15KQorIAorLWxpYmNyeXB0LXJvdXRpbmVzIDo9IGNyeXB0LWVudHJ5IG1kNS1jcnlwdCBzaGEyNTYtY3J5cHQgc2hhNTEyLWNyeXB0IGNyeXB0IFwKKy0JCSAgICAgY3J5cHRfdXRpbAorK2xpYmNyeXB0LXJvdXRpbmVzIDo9Y3J5cHQtZW50cnkgIG1kNS1jcnlwdCBzaGEyNTYtY3J5cHQgc2hhNTEyLWNyeXB0IGNyeXB0X2NvbW1vbgorK2xpYmNyeXB0LXJvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19DUllQVF9VRkMpIDo9IGNyeXB0IGNyeXB0X3V0aWwKKytsaWJjcnlwdC1yb3V0aW5lcyArPSAkKGxpYmNyeXB0LXJvdXRpbmVzLXkpCisgCistdGVzdHMgOj0gY2VydCBtZDVjLXRlc3Qgc2hhMjU2Yy10ZXN0IHNoYTUxMmMtdGVzdCBiYWRzYWx0dGVzdAorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19DUllQVCkgOj0gbWQ1Yy10ZXN0IHNoYTI1NmMtdGVzdCBzaGE1MTJjLXRlc3QgYmFkc2FsdHRlc3QKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQ1JZUFRfVUZDKSArPSBjZXJ0CisgCistaWZlcSAoJChjcnlwdC1pbi1saWJjKSx5ZXMpCisraWZlcSAoJChjcnlwdC1pbi1saWJjKSQoT1BUSU9OX0VHTElCQ19DUllQVCkseWVzeSkKKyByb3V0aW5lcyArPSAkKGxpYmNyeXB0LXJvdXRpbmVzKQorIGVuZGlmCisgCitAQCAtNDQsNyArNDgsNyBAQCBMRExJQlMtY3J5cHQuc28gPSAtbGZyZWVibDMKKyBlbHNlCisgbGliY3J5cHQtcm91dGluZXMgKz0gbWQ1IHNoYTI1NiBzaGE1MTIKKyAKKy10ZXN0cyArPSBtZDV0ZXN0IHNoYTI1NnRlc3Qgc2hhNTEydGVzdAorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19DUllQVCkgKz0gbWQ1dGVzdCBzaGEyNTZ0ZXN0IHNoYTUxMnRlc3QKKyAKKyAjIFRoZSB0ZXN0IG1kNXRlc3QtZ2lhbnQgdXNlcyB1cCB0byA0MDAgTUIgb2YgUlNTIGFuZCBydW5zIG9uIGEgZmFzdAorICMgbWFjaGluZSBvdmVyIGEgbWludXRlLgorQEAgLTY0LDggKzY4LDEwIEBAICQob2JqcGZ4KXNoYTI1NnRlc3Q6ICQocGF0c3Vic3QgJSwgJChvYmpwZngpJS5vLCQoc2hhMjU2LXJvdXRpbmVzKSkKKyAkKG9ianBmeClzaGE1MTJ0ZXN0OiAkKHBhdHN1YnN0ICUsICQob2JqcGZ4KSUubywkKHNoYTUxMi1yb3V0aW5lcykpCisgZW5kaWYKKyAKKytpZmVxICgkKE9QVElPTl9FR0xJQkNfQ1JZUFQpLHkpCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyAkKGFkZHByZWZpeCAkKG9ianBmeCksJCh0ZXN0cykpOiAkKG9ianBmeClsaWJjcnlwdC5zbworIGVsc2UKKyAkKGFkZHByZWZpeCAkKG9ianBmeCksJCh0ZXN0cykpOiAkKG9ianBmeClsaWJjcnlwdC5hCisgZW5kaWYKKytlbmRpZiAjIGVnbGliYzogT1BUSU9OX0VHTElCQ19DUllQVAorZGlmZiAtLWdpdCBhL2NyeXB0L2NyeXB0LWVudHJ5LmMgYi9jcnlwdC9jcnlwdC1lbnRyeS5jCitpbmRleCA3ZTY1NWJhLi42YWU1YzJiIDEwMDY0NAorLS0tIGEvY3J5cHQvY3J5cHQtZW50cnkuYworKysrIGIvY3J5cHQvY3J5cHQtZW50cnkuYworQEAgLTI3LDYgKzI3LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjZW5kaWYKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPGZpcHMtcHJpdmF0ZS5oPgorIAorQEAgLTc2LDkgKzc3LDExIEBAIF9fY3J5cHRfciAoa2V5LCBzYWx0LCBkYXRhKQorICAgICAgY29uc3QgY2hhciAqc2FsdDsKKyAgICAgIHN0cnVjdCBjcnlwdF9kYXRhICogX19yZXN0cmljdCBkYXRhOworIHsKKysjaWYgX19PUFRJT05fRUdMSUJDX0NSWVBUX1VGQworICAgdWZjX2xvbmcgcmVzWzRdOworICAgY2hhciBrdGFiWzldOworICAgdWZjX2xvbmcgeHggPSAyNTsgLyogdG8gY29wZSB3aXRoIEdDQyBsb25nIGxvbmcgY29tcGlsZXIgYnVncyAqLworKyNlbmRpZiAvKl9fT1BUSU9OX0VHTElCQ19DUllQVF9VRkMqLworIAorICNpZmRlZiBfTElCQworICAgLyogVHJ5IHRvIGZpbmQgb3V0IHdoZXRoZXIgd2UgaGF2ZSB0byB1c2UgTUQ1IGVuY3J5cHRpb24gcmVwbGFjZW1lbnQuICAqLworQEAgLTEwNSw2ICsxMDgsNyBAQCBfX2NyeXB0X3IgKGtleSwgc2FsdCwgZGF0YSkKKyAJCQkgICAgIHNpemVvZiAoc3RydWN0IGNyeXB0X2RhdGEpKTsKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0NSWVBUX1VGQworICAgLyoKKyAgICAqIEhhY2sgREVTIHRhYmxlcyBhY2NvcmRpbmcgdG8gc2FsdAorICAgICovCitAQCAtMTQ0LDYgKzE0OCwxMCBAQCBfX2NyeXB0X3IgKGtleSwgc2FsdCwgZGF0YSkKKyAgICAqLworICAgX3VmY19vdXRwdXRfY29udmVyc2lvbl9yIChyZXNbMF0sIHJlc1sxXSwgc2FsdCwgZGF0YSk7CisgICByZXR1cm4gZGF0YS0+Y3J5cHRfM19idWY7CisrI2Vsc2UgLyogX19PUFRJT05fRUdMSUJDX0NSWVBUX1VGQyAqLworKyAgX19zZXRfZXJybm8gKEVOT1NZUyk7CisrICByZXR1cm4gTlVMTDsKKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0NSWVBUX1VGQyAqLworIH0KKyB3ZWFrX2FsaWFzIChfX2NyeXB0X3IsIGNyeXB0X3IpCisgCitAQCAtMTY4LDcgKzE3NiwxMiBAQCBjcnlwdCAoa2V5LCBzYWx0KQorICAgICByZXR1cm4gX19zaGE1MTJfY3J5cHQgKGtleSwgc2FsdCk7CisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19DUllQVF9VRkMKKyAgIHJldHVybiBfX2NyeXB0X3IgKGtleSwgc2FsdCwgJl91ZmNfZm9vYmFyKTsKKysjZWxzZSAvKiBfX09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDICovCisrICBfX3NldF9lcnJubyAoRU5PU1lTKTsKKysgIHJldHVybiBOVUxMOworKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDICovCisgfQorIAorIAorZGlmZiAtLWdpdCBhL2NyeXB0L2NyeXB0X2NvbW1vbi5jIGIvY3J5cHQvY3J5cHRfY29tbW9uLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jY2U2YTMxCistLS0gL2Rldi9udWxsCisrKysgYi9jcnlwdC9jcnlwdF9jb21tb24uYworQEAgLTAsMCArMSw0MiBAQAorKy8qCisrICogY3J5cHQ6IGNyeXB0KDMpIGltcGxlbWVudGF0aW9uCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgKgorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsCisrICogc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysgKgorKyAqIEdlbmVyYWwgU3VwcG9ydCByb3V0aW5lcworKyAqCisrICovCisrCisrI2luY2x1ZGUgImNyeXB0LXByaXZhdGUuaCIKKysKKysvKiBUYWJsZSB3aXRoIGNoYXJhY3RlcnMgZm9yIGJhc2U2NCB0cmFuc2Zvcm1hdGlvbi4gICovCisrc3RhdGljIGNvbnN0IGNoYXIgYjY0dFs2NF0gPQorKyIuLzAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKKysKKyt2b2lkCisrX19iNjRfZnJvbV8yNGJpdCAoY2hhciAqKmNwLCBpbnQgKmJ1ZmxlbiwKKysJCSAgdW5zaWduZWQgaW50IGIyLCB1bnNpZ25lZCBpbnQgYjEsIHVuc2lnbmVkIGludCBiMCwKKysJCSAgaW50IG4pCisreworKyAgdW5zaWduZWQgaW50IHcgPSAoYjIgPDwgMTYpIHwgKGIxIDw8IDgpIHwgYjA7CisrICB3aGlsZSAobi0tID4gMCAmJiAoKmJ1ZmxlbikgPiAwKQorKyAgICB7CisrICAgICAgKigqY3ApKysgPSBiNjR0W3cgJiAweDNmXTsKKysgICAgICAtLSgqYnVmbGVuKTsKKysgICAgICB3ID4+PSA2OworKyAgICB9CisrfQorZGlmZiAtLWdpdCBhL2NyeXB0L2NyeXB0X3V0aWwuYyBiL2NyeXB0L2NyeXB0X3V0aWwuYworaW5kZXggMTU5Nzg4NS4uOTI5Nzk3NCAxMDA2NDQKKy0tLSBhL2NyeXB0L2NyeXB0X3V0aWwuYworKysrIGIvY3J5cHQvY3J5cHRfdXRpbC5jCitAQCAtMjQyLDEwICsyNDIsNiBAQCBzdGF0aWMgdWZjX2xvbmcgZXBlcm0zMnRhYls0XVsyNTZdWzJdOworICAqLworIHN0YXRpYyB1ZmNfbG9uZyBlZnBbMTZdWzY0XVsyXTsKKyAKKy0vKiBUYWJsZSB3aXRoIGNoYXJhY3RlcnMgZm9yIGJhc2U2NCB0cmFuc2Zvcm1hdGlvbi4gICovCistc3RhdGljIGNvbnN0IGNoYXIgYjY0dFs2NF0gPQorLSIuLzAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKKy0KKyAvKgorICAqIEZvciB1c2UgYnkgdGhlIG9sZCwgbm9uLXJlZW50cmFudCByb3V0aW5lcworICAqIChjcnlwdC9lbmNyeXB0L3NldGtleSkKK0BAIC05NDksMTcgKzk0NSwzIEBAIHNldGtleShfX2tleSkKKyB7CisgICBfX3NldGtleV9yKF9fa2V5LCAmX3VmY19mb29iYXIpOworIH0KKy0KKy12b2lkCistX19iNjRfZnJvbV8yNGJpdCAoY2hhciAqKmNwLCBpbnQgKmJ1ZmxlbiwKKy0JCSAgdW5zaWduZWQgaW50IGIyLCB1bnNpZ25lZCBpbnQgYjEsIHVuc2lnbmVkIGludCBiMCwKKy0JCSAgaW50IG4pCisteworLSAgdW5zaWduZWQgaW50IHcgPSAoYjIgPDwgMTYpIHwgKGIxIDw8IDgpIHwgYjA7CistICB3aGlsZSAobi0tID4gMCAmJiAoKmJ1ZmxlbikgPiAwKQorLSAgICB7CistICAgICAgKigqY3ApKysgPSBiNjR0W3cgJiAweDNmXTsKKy0gICAgICAtLSgqYnVmbGVuKTsKKy0gICAgICB3ID4+PSA2OworLSAgICB9CistfQorZGlmZiAtLWdpdCBhL2NzdS9NYWtlZmlsZSBiL2NzdS9NYWtlZmlsZQoraW5kZXggOWYwODU1YS4uYjFjMzM2MyAxMDA2NDQKKy0tLSBhL2NzdS9NYWtlZmlsZQorKysrIGIvY3N1L01ha2VmaWxlCitAQCAtMjIsNiArMjIsOCBAQAorICMgY3J0bi5vLCBzcGVjaWFsICJpbml0aWFsaXplciIgYW5kICJmaW5hbGl6ZXIiIGZpbGVzIHVzZWQgaW4gdGhlIGxpbmsKKyAjIHRvIG1ha2UgdGhlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrIHJpZ2h0LgorIAorK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIgOj0gY3N1CisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitkaWZmIC0tZ2l0IGEvZGVidWcvTWFrZWZpbGUgYi9kZWJ1Zy9NYWtlZmlsZQoraW5kZXggOWZmMzU3Yi4uZDIzZDk3ZCAxMDA2NDQKKy0tLSBhL2RlYnVnL01ha2VmaWxlCisrKysgYi9kZWJ1Zy9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIGRlYnVnIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gZGVidWcKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0yNyw3ICsyOSw3IEBAIGhlYWRlcnMJOj0gZXhlY2luZm8uaAorICMgTm90ZSB0aGF0IHB0c25hbWVfcl9jaGsgYW5kIGdldGxvZ2luX3IgYXJlIG5vdCBoZXJlLCBidXQgaW4KKyAjIGxvZ2luL01ha2VmaWxlIGluc3RlYWQuICBJZiB0aGF0IHN1YmRpciBpcyBvbWl0dGVkIGZyb20gdGhlCisgIyBidWlsZCwgaXRzIF9GT1JUSUZZX1NPVVJDRSBzdXBwb3J0IHdpbGwgYmUgdG9vLgorLXJvdXRpbmVzICA9IGJhY2t0cmFjZSBiYWNrdHJhY2VzeW1zIGJhY2t0cmFjZXN5bXNmZCBub29waG9va3MgXAorK3JvdXRpbmVzICA9IG5vb3Bob29rcyBcCisgCSAgICBtZW1jcHlfY2hrIG1lbW1vdmVfY2hrIG1lbXBjcHlfY2hrIG1lbXNldF9jaGsgc3RwY3B5X2NoayBcCisgCSAgICBzdHJjYXRfY2hrIHN0cmNweV9jaGsgc3RybmNhdF9jaGsgc3RybmNweV9jaGsgc3RwbmNweV9jaGsgXAorIAkgICAgc3ByaW50Zl9jaGsgdnNwcmludGZfY2hrIHNucHJpbnRmX2NoayB2c25wcmludGZfY2hrIFwKK0BAIC0zNiwyMCArMzgsMjcgQEAgcm91dGluZXMgID0gYmFja3RyYWNlIGJhY2t0cmFjZXN5bXMgYmFja3RyYWNlc3ltc2ZkIG5vb3Bob29rcyBcCisgCSAgICByZWFkX2NoayBwcmVhZF9jaGsgcHJlYWQ2NF9jaGsgcmVjdl9jaGsgcmVjdmZyb21fY2hrIFwKKyAJICAgIHJlYWRsaW5rX2NoayByZWFkbGlua2F0X2NoayBnZXR3ZF9jaGsgZ2V0Y3dkX2NoayBcCisgCSAgICByZWFscGF0aF9jaGsgZnJlYWRfY2hrIGZyZWFkX3VfY2hrIFwKKy0JICAgIHdjdG9tYl9jaGsgd2NzY3B5X2NoayB3bWVtY3B5X2NoayB3bWVtbW92ZV9jaGsgd21lbXBjcHlfY2hrIFwKKy0JICAgIHdjcGNweV9jaGsgd2NzbmNweV9jaGsgd2NzY2F0X2NoayB3Y3NuY2F0X2NoayB3bWVtc2V0X2NoayBcCistCSAgICB3Y3BuY3B5X2NoayBcCistCSAgICBzd3ByaW50Zl9jaGsgdnN3cHJpbnRmX2NoayB3cHJpbnRmX2NoayBmd3ByaW50Zl9jaGsgXAorLQkgICAgdndwcmludGZfY2hrIHZmd3ByaW50Zl9jaGsgZmdldHdzX2NoayBmZ2V0d3NfdV9jaGsgXAorIAkgICAgY29uZnN0cl9jaGsgZ2V0Z3JvdXBzX2NoayB0dHluYW1lX3JfY2hrIFwKKy0JICAgIGdldGhvc3RuYW1lX2NoayBnZXRkb21haW5uYW1lX2NoayB3Y3J0b21iX2NoayBtYnNucnRvd2NzX2NoayBcCistCSAgICB3Y3NucnRvbWJzX2NoayBtYnNydG93Y3NfY2hrIHdjc3J0b21ic19jaGsgbWJzdG93Y3NfY2hrIFwKKy0JICAgIHdjc3RvbWJzX2NoayBhc3ByaW50Zl9jaGsgdmFzcHJpbnRmX2NoayBkcHJpbnRmX2NoayBcCisrCSAgICBnZXRob3N0bmFtZV9jaGsgZ2V0ZG9tYWlubmFtZV9jaGsgXAorKwkgICAgYXNwcmludGZfY2hrIHZhc3ByaW50Zl9jaGsgZHByaW50Zl9jaGsgXAorIAkgICAgdmRwcmludGZfY2hrIG9icHJpbnRmX2NoayBcCisgCSAgICBsb25nam1wX2NoayBfX19fbG9uZ2ptcF9jaGsgXAorIAkgICAgZmRlbHRfY2hrIHBvbGxfY2hrIHBwb2xsX2NoayBcCisgCSAgICBzdGFja19jaGtfZmFpbCBmb3J0aWZ5X2ZhaWwgXAorIAkgICAgJChzdGF0aWMtb25seS1yb3V0aW5lcykKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfQkFDS1RSQUNFKSArPSBiYWNrdHJhY2UgYmFja3RyYWNlc3ltcyBiYWNrdHJhY2VzeW1zZmQKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKQkJCVwKKysJICs9IHdwcmludGZfY2hrIGZ3cHJpbnRmX2NoawkJCQlcCisrCSAgICB2d3ByaW50Zl9jaGsgdmZ3cHJpbnRmX2NoayBmZ2V0d3NfY2hrIGZnZXR3c191X2NoaworK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpCQkJCVwKKysJICs9IHdjdG9tYl9jaGsgd2NzY3B5X2NoayB3bWVtY3B5X2NoayB3bWVtbW92ZV9jaGsgd21lbXBjcHlfY2hrCVwKKysJICAgIHdjcGNweV9jaGsgd2NzbmNweV9jaGsgd2NzY2F0X2NoayB3Y3NuY2F0X2NoayB3bWVtc2V0X2NoawlcCisrCSAgICB3Y3BuY3B5X2NoawkJCQkJCQlcCisrCSAgICBzd3ByaW50Zl9jaGsgdnN3cHJpbnRmX2NoawkJCQkJXAorKwkgICAgd2NydG9tYl9jaGsgbWJzbnJ0b3djc19jaGsJCQkJCVwKKysJICAgIHdjc25ydG9tYnNfY2hrIG1ic3J0b3djc19jaGsgd2NzcnRvbWJzX2NoayBtYnN0b3djc19jaGsJXAorKwkgICAgd2NzdG9tYnNfY2hrCisrCisgc3RhdGljLW9ubHktcm91dGluZXMgOj0gd2FybmluZy1ub3Agc3RhY2tfY2hrX2ZhaWxfbG9jYWwKKyAKKyBDRkxBR1MtYmFja3RyYWNlLmMgPSAtZm5vLW9taXQtZnJhbWUtcG9pbnRlcgorQEAgLTEzMSwxMSArMTQwLDE1IEBAIExERkxBR1MtdHN0LWJhY2t0cmFjZTQgPSAtcmR5bmFtaWMKKyBMREZMQUdTLXRzdC1iYWNrdHJhY2U1ID0gLXJkeW5hbWljCisgTERGTEFHUy10c3QtYmFja3RyYWNlNiA9IC1yZHluYW1pYworIAorLXRlc3RzID0gYmFja3RyYWNlLXRzdCB0c3QtbG9uZ2ptcF9jaGsgdHN0LWNoazEgdHN0LWNoazIgdHN0LWNoazMgXAorLQl0c3QtbGZzY2hrMSB0c3QtbGZzY2hrMiB0c3QtbGZzY2hrMyB0ZXN0LXN0cmNweV9jaGsgdGVzdC1zdHBjcHlfY2hrIFwKKy0JdHN0LWNoazQgdHN0LWNoazUgdHN0LWNoazYgdHN0LWxmc2NoazQgdHN0LWxmc2NoazUgdHN0LWxmc2NoazYgXAorLQl0c3QtbG9uZ2ptcF9jaGsyIHRzdC1iYWNrdHJhY2UyIHRzdC1iYWNrdHJhY2UzIHRzdC1iYWNrdHJhY2U0IFwKKy0JdHN0LWJhY2t0cmFjZTUgdHN0LWJhY2t0cmFjZTYKKyt0ZXN0cyA9IHRzdC1sb25nam1wX2NoayB0ZXN0LXN0cmNweV9jaGsgdGVzdC1zdHBjcHlfY2hrIHRzdC1sb25nam1wX2NoazIKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysgICAgICArPSB0c3QtY2hrMSB0c3QtY2hrMiB0c3QtY2hrMyB0c3QtbGZzY2hrMSB0c3QtbGZzY2hrMiB0c3QtbGZzY2hrMworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19CQUNLVFJBQ0UpIFwKKysgICAgICArPSBiYWNrdHJhY2UtdHN0IHRzdC1iYWNrdHJhY2UyIHRzdC1iYWNrdHJhY2UzIHRzdC1iYWNrdHJhY2U0IFwKKysgICAgICAgICB0c3QtYmFja3RyYWNlNSB0c3QtYmFja3RyYWNlNgorK2lmZXEgKHl5LCQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkkKE9QVElPTl9FR0xJQkNfQ1hYX1RFU1RTKSkKKyt0ZXN0cyArPSB0c3QtY2hrNCB0c3QtY2hrNSB0c3QtY2hrNiB0c3QtbGZzY2hrNCB0c3QtbGZzY2hrNSB0c3QtbGZzY2hrNgorK2VuZGlmCisgCisgaWZlcSAoLCQoQ1hYKSkKKyB0ZXN0cy11bnN1cHBvcnRlZCA9IHRzdC1jaGs0IHRzdC1jaGs1IHRzdC1jaGs2IFwKK2RpZmYgLS1naXQgYS9kZWJ1Zy9zZWdmYXVsdC5jIGIvZGVidWcvc2VnZmF1bHQuYworaW5kZXggMzQ1OWEyYS4uZWU5YTE0NiAxMDA2NDQKKy0tLSBhL2RlYnVnL3NlZ2ZhdWx0LmMKKysrKyBiL2RlYnVnL3NlZ2ZhdWx0LmMKK0BAIC0zMCw2ICszMCw3IEBACisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxfaXRvYS5oPgorICNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIC8qIFRoaXMgZmlsZSBkZWZpbmVzIG1hY3JvcyB0byBhY2Nlc3MgdGhlIGNvbnRlbnQgb2YgdGhlIHNpZ2NvbnRleHQgZWxlbWVudAorICAgIHBhc3NlZCB1cCBieSB0aGUgc2lnbmFsIGhhbmRsZXIuICAqLworQEAgLTY4LDExICs2OSwxMyBAQCB3cml0ZV9zdHJzaWduYWwgKGludCBmZCwgaW50IHNpZ25hbCkKKyBzdGF0aWMgdm9pZAorIGNhdGNoX3NlZ2ZhdWx0IChpbnQgc2lnbmFsLCBTSUdDT05URVhUIGN0eCkKKyB7CistICBpbnQgZmQsIGNudCwgaTsKKy0gIHZvaWQgKiphcnI7CisrICBpbnQgZmQ7CisgICBzdHJ1Y3Qgc2lnYWN0aW9uIHNhOworKyNpZiBfX09QVElPTl9FR0xJQkNfQkFDS1RSQUNFCisrICBpbnQgY250LCBpOworKyAgdm9pZCAqKmFycjsKKyAgIHVpbnRwdHJfdCBwYzsKKy0KKysjZW5kaWYKKyAgIC8qIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgd2UgYXJlIHdyaXRpbmcgdG8uICBJZiBub25lIGlzIGdpdmVuCisgICAgICBvciB3ZSBjYW5ub3Qgd3JpdGUgdG8gdGhpcyBmaWxlIHdyaXRlIHRvIHN0ZGVyci4gICovCisgICBmZCA9IDI7CitAQCAtOTEsNiArOTQsNyBAQCBjYXRjaF9zZWdmYXVsdCAoaW50IHNpZ25hbCwgU0lHQ09OVEVYVCBjdHgpCisgICBSRUdJU1RFUl9EVU1QOworICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfQkFDS1RSQUNFCisgICBXUklURV9TVFJJTkcgKCJcbkJhY2t0cmFjZTpcbiIpOworIAorICAgLyogR2V0IHRoZSBiYWNrdHJhY2UuICAqLworQEAgLTExMyw2ICsxMTcsNyBAQCBjYXRjaF9zZWdmYXVsdCAoaW50IHNpZ25hbCwgU0lHQ09OVEVYVCBjdHgpCisgCisgICAvKiBOb3cgZ2VuZXJhdGUgbmljZWx5IGZvcm1hdHRlZCBvdXRwdXQuICAqLworICAgX19iYWNrdHJhY2Vfc3ltYm9sc19mZCAoYXJyICsgaSwgY250IC0gaSwgZmQpOworKyNlbmRpZgorIAorICNpZmRlZiBIQVZFX1BST0NfU0VMRgorICAgLyogTm93IHRoZSBsaW5rIG1hcC4gICovCitkaWZmIC0tZ2l0IGEvZGVidWcvdHN0LWNoazEuYyBiL2RlYnVnL3RzdC1jaGsxLmMKK2luZGV4IDUzNTU5ZTYuLjM2MmQ5MmEgMTAwNjQ0CistLS0gYS9kZWJ1Zy90c3QtY2hrMS5jCisrKysgYi9kZWJ1Zy90c3QtY2hrMS5jCitAQCAtMzEsNiArMzEsNyBAQAorICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAjaW5jbHVkZSA8c3lzL3VuLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgCisgI2RlZmluZSBvYnN0YWNrX2NodW5rX2FsbG9jIG1hbGxvYworQEAgLTMwNyw2ICszMDgsNyBAQCBkb190ZXN0ICh2b2lkKQorICAgc25wcmludGYgKGJ1ZiArIDgsIGwwICsgMywgIiVkIiwgbnVtMik7CisgICBDSEtfRkFJTF9FTkQKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorICAgQ0hLX0ZBSUxfU1RBUlQKKyAgIHN3cHJpbnRmICh3YnVmICsgOCwgMywgTCIlZCIsIG51bTEpOworICAgQ0hLX0ZBSUxfRU5ECitAQCAtMzE0LDYgKzMxNiw3IEBAIGRvX3Rlc3QgKHZvaWQpCisgICBDSEtfRkFJTF9TVEFSVAorICAgc3dwcmludGYgKHdidWYgKyA4LCBsMCArIDMsIEwiJWQiLCBudW0xKTsKKyAgIENIS19GQUlMX0VORAorKyNlbmRpZiAvKiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSICovCisgIyBlbmRpZgorIAorICAgbWVtY3B5IChidWYsIHN0cjEgKyAyLCBsMCArIDkpOworQEAgLTM4MSw2ICszODQsNyBAQCBkb190ZXN0ICh2b2lkKQorICAgQ0hLX0ZBSUxfRU5ECisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAKKyAgIC8qIFRoZXNlIG9wcyBjYW4gYmUgZG9uZSB3aXRob3V0IHJ1bnRpbWUgY2hlY2tpbmcgb2Ygb2JqZWN0IHNpemUuICAqLworICAgd21lbWNweSAod2J1ZiwgTCJhYmNkZWZnaGlqIiwgMTApOworQEAgLTYwNSw2ICs2MDksNyBAQCBkb190ZXN0ICh2b2lkKQorICAgQ0hLX0ZBSUxfRU5ECisgI2VuZGlmCisgCisrI2VuZGlmIC8qIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgKi8KKyAKKyAgIC8qIE5vdyBjaGVja3MgZm9yICVuIHByb3RlY3Rpb24uICAqLworIAorQEAgLTExOTIsNiArMTE5Nyw3IEBAIGRvX3Rlc3QgKHZvaWQpCisgIyBlbmRpZgorICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICJkZV9ERS5VVEYtOCIpICE9IE5VTEwpCisgICAgIHsKKyAgICAgICBhc3NlcnQgKE1CX0NVUl9NQVggPD0gMTApOworQEAgLTEzNDgsNiArMTM1NCw3IEBAIGRvX3Rlc3QgKHZvaWQpCisgICAgICAgcHV0cyAoImNhbm5vdCBzZXQgbG9jYWxlIik7CisgICAgICAgcmV0ID0gMTsKKyAgICAgfQorKyNlbmRpZiAvKiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSICovCisgCisgICBpbnQgZmQgPSBwb3NpeF9vcGVucHQgKE9fUkRXUik7CisgICBpZiAoZmQgIT0gLTEpCitkaWZmIC0tZ2l0IGEvZGxmY24vTWFrZWZpbGUgYi9kbGZjbi9NYWtlZmlsZQoraW5kZXggNzU5NzgwZC4uMzgyNzYwNyAxMDA2NDQKKy0tLSBhL2RsZmNuL01ha2VmaWxlCisrKysgYi9kbGZjbi9NYWtlZmlsZQorQEAgLTE1LDYgKzE1LDggQEAKKyAjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKyAjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCQk6PSBkbGZjbgorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTM2LDggKzM4LDExIEBAIGVuZGlmCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyB0ZXN0cyA9IGdscmVmbWFpbiBmYWlsdGVzdCB0c3QtZGxhZGRyIGRlZmF1bHQgZXJybXNnMSB0c3RjeGFhdGV4aXQgXAorIAlidWctZGxvcGVuMSBidWctZGxzeW0xIHRzdC1kbGluZm8gYnVnLWF0ZXhpdDEgYnVnLWF0ZXhpdDIgXAorLQlidWctYXRleGl0MyB0c3RhdGV4aXQgYnVnLWRsLWxlYWYgdHN0LXJlYy1kbG9wZW4KKysJdHN0YXRleGl0IGJ1Zy1kbC1sZWFmIHRzdC1yZWMtZGxvcGVuCisgZW5kaWYKKysKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQ1hYX1RFU1RTKSArPSBidWctYXRleGl0MworKworIG1vZHVsZXMtbmFtZXMgPSBnbHJlZmxpYjEgZ2xyZWZsaWIyIGdscmVmbGliMyBmYWlsdGVzdG1vZCBkZWZhdWx0bW9kMSBcCisgCQlkZWZhdWx0bW9kMiBlcnJtc2cxbW9kIG1vZGF0ZXhpdCBtb2RjeGFhdGV4aXQgXAorIAkJYnVnLWRsc3ltMS1saWIxIGJ1Zy1kbHN5bTEtbGliMiBidWctYXRleGl0MS1saWIgXAorZGlmZiAtLWdpdCBhL2VsZi9kbC1zdXBwb3J0LmMgYi9lbGYvZGwtc3VwcG9ydC5jCitpbmRleCA0ZDAzNmYxLi5jMTVmNDA1IDEwMDY0NAorLS0tIGEvZWxmL2RsLXN1cHBvcnQuYworKysrIGIvZWxmL2RsLXN1cHBvcnQuYworQEAgLTE5LDYgKzE5LDcgQEAKKyAvKiBUaGlzIGZpbGUgZGVmaW5lcyBzb21lIHRoaW5ncyB0aGF0IGZvciB0aGUgZHluYW1pYyBsaW5rZXIgYXJlIGRlZmluZWQgaW4KKyAgICBydGxkLmMgYW5kIGRsLXN5c2RlcC5jIGluIHdheXMgYXBwcm9wcmlhdGUgdG8gYm9vdHN0cmFwIGR5bmFtaWMgbGlua2luZy4gICovCisgCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CitAQCAtNDIsNyArNDMsOSBAQCBjaGFyICoqX2RsX2FyZ3YgPSAmX19wcm9nbmFtZTsJLyogVGhpcyBpcyBjaGVja2VkIGZvciBzb21lIGVycm9yIG1lc3NhZ2VzLiAgKi8KKyBjb25zdCBjaGFyICpfZGxfcGxhdGZvcm07Cisgc2l6ZV90IF9kbF9wbGF0Zm9ybWxlbjsKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKyBpbnQgX2RsX2RlYnVnX21hc2s7CisrI2VuZGlmCisgaW50IF9kbF9sYXp5OworIEVsZlcoQWRkcikgX2RsX3VzZV9sb2FkX2JpYXMgPSAtMjsKKyBpbnQgX2RsX2R5bmFtaWNfd2VhazsKK2RpZmYgLS1naXQgYS9lbGYvcnRsZC5jIGIvZWxmL3J0bGQuYworaW5kZXggNmQzYWRkNy4uZmMzYTJkYiAxMDA2NDQKKy0tLSBhL2VsZi9ydGxkLmMKKysrKyBiL2VsZi9ydGxkLmMKK0BAIC0xNiw2ICsxNiw3IEBACisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPGRsZmNuLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CitAQCAtMjIwMSw2ICsyMjAyLDcgQEAgcHJpbnRfbWlzc2luZ192ZXJzaW9uIChpbnQgZXJyY29kZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgCQkgICAgb2JqbmFtZSwgZXJyc3RyaW5nKTsKKyB9CisgDAorKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworIC8qIE5vbnplcm8gaWYgYW55IG9mIHRoZSBkZWJ1Z2dpbmcgb3B0aW9ucyBpcyBlbmFibGVkLiAgKi8KKyBzdGF0aWMgaW50IGFueV9kZWJ1ZyBhdHRyaWJ1dGVfcmVscm87CisgCitAQCAtMjMxMCw2ICsyMzEyLDcgQEAgYSBmaWxlbmFtZSBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZSBMRF9ERUJVR19PVVRQVVQgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4iKTsKKyAgICAgICBfZXhpdCAoMCk7CisgICAgIH0KKyB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHICovCisgDAorIHN0YXRpYyB2b2lkCisgcHJvY2Vzc19kbF9hdWRpdCAoY2hhciAqc3RyKQorQEAgLTIzNDksOCArMjM1Miw5IEBAIHByb2Nlc3NfZW52dmFycyAoZW51bSBtb2RlICptb2RlcCkKKyAgIGNoYXIgKipydW5wID0gX2Vudmlyb247CisgICBjaGFyICplbnZsaW5lOworICAgZW51bSBtb2RlIG1vZGUgPSBub3JtYWw7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisgICBjaGFyICpkZWJ1Z19vdXRwdXQgPSBOVUxMOworLQorKyNlbmRpZgorICAgLyogVGhpcyBpcyB0aGUgZGVmYXVsdCBwbGFjZSBmb3IgcHJvZmlsaW5nIGRhdGEgZmlsZS4gICovCisgICBHTFJPKGRsX3Byb2ZpbGVfb3V0cHV0KQorICAgICA9ICYiL3Zhci90bXBcMC92YXIvcHJvZmlsZSJbX19saWJjX2VuYWJsZV9zZWN1cmUgPyA5IDogMF07CitAQCAtMjM3NywxMiArMjM4MSwxNCBAQCBwcm9jZXNzX2VudnZhcnMgKGVudW0gbW9kZSAqbW9kZXApCisgCSAgYnJlYWs7CisgCisgCWNhc2UgNToKKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKyAJICAvKiBEZWJ1Z2dpbmcgb2YgdGhlIGR5bmFtaWMgbGlua2VyPyAgKi8KKyAJICBpZiAobWVtY21wIChlbnZsaW5lLCAiREVCVUciLCA1KSA9PSAwKQorIAkgICAgeworIAkgICAgICBwcm9jZXNzX2RsX2RlYnVnICgmZW52bGluZVs2XSk7CisgCSAgICAgIGJyZWFrOworIAkgICAgfQorKyNlbmRpZgorIAkgIGlmIChtZW1jbXAgKGVudmxpbmUsICJBVURJVCIsIDUpID09IDApCisgCSAgICBwcm9jZXNzX2RsX2F1ZGl0ICgmZW52bGluZVs2XSk7CisgCSAgYnJlYWs7CitAQCAtMjQ0OCwxMyArMjQ1NCwxNCBAQCBwcm9jZXNzX2VudnZhcnMgKGVudW0gbW9kZSAqbW9kZXApCisgCSAgICAgIGJyZWFrOworIAkgICAgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworIAkgIC8qIFdoZXJlIHRvIHBsYWNlIHRoZSBwcm9maWxpbmcgZGF0YSBmaWxlLiAgKi8KKyAJICBpZiAobWVtY21wIChlbnZsaW5lLCAiREVCVUdfT1VUUFVUIiwgMTIpID09IDApCisgCSAgICB7CisgCSAgICAgIGRlYnVnX291dHB1dCA9ICZlbnZsaW5lWzEzXTsKKyAJICAgICAgYnJlYWs7CisgCSAgICB9CistCisrI2VuZGlmCisgCSAgaWYgKCFfX2xpYmNfZW5hYmxlX3NlY3VyZQorIAkgICAgICAmJiBtZW1jbXAgKGVudmxpbmUsICJEWU5BTUlDX1dFQUsiLCAxMikgPT0gMCkKKyAJICAgIEdMUk8oZGxfZHluYW1pY193ZWFrKSA9IDE7CitAQCAtMjQ5MSw3ICsyNDk4LDkgQEAgcHJvY2Vzc19lbnZ2YXJzIChlbnVtIG1vZGUgKm1vZGVwKQorIAkgICAgeworIAkgICAgICBtb2RlID0gdHJhY2U7CisgCSAgICAgIEdMUk8oZGxfdmVyYm9zZSkgPSAxOworKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworIAkgICAgICBHTFJPKGRsX2RlYnVnX21hc2spIHw9IERMX0RFQlVHX1BSRUxJTks7CisrI2VuZGlmCisgCSAgICAgIEdMUk8oZGxfdHJhY2VfcHJlbGluaykgPSAmZW52bGluZVsxN107CisgCSAgICB9CisgCSAgYnJlYWs7CitAQCAtMjUzOCwxMiArMjU0NywxNSBAQCBwcm9jZXNzX2VudnZhcnMgKGVudW0gbW9kZSAqbW9kZXApCisgICAgICAgaWYgKF9fYWNjZXNzICgiL2V0Yy9zdWlkLWRlYnVnIiwgRl9PSykgIT0gMCkKKyAJeworIAkgIHVuc2V0ZW52ICgiTUFMTE9DX0NIRUNLXyIpOworKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworIAkgIEdMUk8oZGxfZGVidWdfbWFzaykgPSAwOworKyNlbmRpZgorIAl9CisgCisgICAgICAgaWYgKG1vZGUgIT0gbm9ybWFsKQorIAlfZXhpdCAoNSk7CisgICAgIH0KKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKyAgIC8qIElmIHdlIGhhdmUgdG8gcnVuIHRoZSBkeW5hbWljIGxpbmtlciBpbiBkZWJ1Z2dpbmcgbW9kZSBhbmQgdGhlCisgICAgICBMRF9ERUJVR19PVVRQVVQgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgZ2l2ZW4sIHdlIHdyaXRlIHRoZSBkZWJ1ZworICAgICAgbWVzc2FnZXMgdG8gdGhpcyBmaWxlLiAgKi8KK0BAIC0yNTY4LDYgKzI1ODAsNyBAQCBwcm9jZXNzX2VudnZhcnMgKGVudW0gbW9kZSAqbW9kZXApCisgCS8qIFdlIHVzZSBzdGFuZGFyZCBvdXRwdXQgaWYgb3BlbmluZyB0aGUgZmlsZSBmYWlsZWQuICAqLworIAlHTFJPKGRsX2RlYnVnX2ZkKSA9IFNURE9VVF9GSUxFTk87CisgICAgIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcgKi8KKyB9CisgCisgCitkaWZmIC0tZ2l0IGEvZXh0cmEtbGliLm1rIGIvZXh0cmEtbGliLm1rCitpbmRleCBiMTA3NDhkLi5kNzFhMDZmIDEwMDY0NAorLS0tIGEvZXh0cmEtbGliLm1rCisrKysgYi9leHRyYS1saWIubWsKK0BAIC0yNSw3ICsyNSw5IEBAIGluc3RhbGwtbGliIDo9ICQoaW5zdGFsbC1saWIpCisgZXh0cmEtb2JqcyA6PSAkKGV4dHJhLW9ianMpCisgCisgIyBUaGUgbW9kdWxlcyB0aGF0IGdvIGluICQobGliKS4KKy1hbGwtJChsaWIpLXJvdXRpbmVzIDo9ICQoJChsaWIpLXJvdXRpbmVzKSAkKCQobGliKS1zeXNkZXBfcm91dGluZXMpCisrYWxsLSQobGliKS1yb3V0aW5lcyA6PSAkKCQobGliKS1yb3V0aW5lcykJCVwKKysJICAgICAgICAgICAgICAgJCgkKGxpYiktcm91dGluZXMteSkJCVwKKysJCSAgICAgICAkKCQobGliKS1zeXNkZXBfcm91dGluZXMpCisgCisgIyBBZGQgZWFjaCBmbGF2b3Igb2YgbGlicmFyeSB0byB0aGUgbGlzdHMgb2YgdGhpbmdzIHRvIGJ1aWxkIGFuZCBpbnN0YWxsLgorIGluc3RhbGwtbGliICs9ICQoZm9yZWFjaCBvLCQob2JqZWN0LXN1ZmZpeGVzLSQobGliKSksJChsaWI6bGliJT0kKGxpYnR5cGUkbykpKQorQEAgLTEwMSw3ICsxMDMsNyBAQCBlbmRpZgorIGVuZGlmCisgCisgIyBUaGlzIHdpbGwgZGVmaW5lIGBsaWJvZi1ST1VUSU5FIDo9IExJQicgZm9yIGVhY2ggb2YgdGhlIHJvdXRpbmVzLgorLWNwcC1zcmNzLWxlZnQgOj0gJCgkKGxpYiktcm91dGluZXMpICQoJChsaWIpLXN5c2RlcF9yb3V0aW5lcykKKytjcHAtc3Jjcy1sZWZ0IDo9ICQoYWxsLSQobGliKS1yb3V0aW5lcykKKyBpZm5lcSAoLCQoY3BwLXNyY3MtbGVmdCkpCisgaW5jbHVkZSAkKHBhdHN1YnN0ICUsJCguLiljcHBmbGFncy1pdGVyYXRvci5taywkKGNwcC1zcmNzLWxlZnQpKQorIGVuZGlmCitkaWZmIC0tZ2l0IGEvZ3JwL01ha2VmaWxlIGIvZ3JwL01ha2VmaWxlCitpbmRleCBjNjNiNTUyLi43NDg2ZjMyIDEwMDY0NAorLS0tIGEvZ3JwL01ha2VmaWxlCisrKysgYi9ncnAvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBncnAgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBncnAKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0yOSw2ICszMSw5IEBAIHJvdXRpbmVzIDo9IGZnZXRncmVudCBpbml0Z3JvdXBzIHNldGdyb3VwcyBcCisgCSAgICBnZXRncmVudF9yIGdldGdyZ2lkX3IgZ2V0Z3JuYW1fciBmZ2V0Z3JlbnRfcgorIAorIHRlc3RzIDo9IHRlc3RncnAKKytpZm5lcSAoeSwkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0gpKQorK0xETElCUy10ZXN0Z3JwICs9ICQoc2hlbGwgY2F0ICQoY29tbW9uLW9ianBmeCluc3MvZml4ZWQtbnNzd2l0Y2gtbGlicykKKytlbmRpZgorIAorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgdGVzdC1zcmNzIDo9ICB0c3RfZmdldGdyZW50CitkaWZmIC0tZ2l0IGEvaGVzaW9kL01ha2VmaWxlIGIvaGVzaW9kL01ha2VmaWxlCitpbmRleCBhYzBiYzAxLi4zODI2M2I0IDEwMDY0NAorLS0tIGEvaGVzaW9kL01ha2VmaWxlCisrKysgYi9oZXNpb2QvTWFrZWZpbGUKK0BAIC0xOCwxMiArMTgsMTQgQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIGhlc2lvZCBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGhlc2lvZAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorLWV4dHJhLWxpYnMgOj0gbGlibnNzX2hlc2lvZAorLWV4dHJhLWxpYnMtb3RoZXJzID0gJChleHRyYS1saWJzKQorK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IGxpYm5zc19oZXNpb2QKKytleHRyYS1saWJzLW90aGVycy15ICs9ICQoZXh0cmEtbGlicy15KQorIAorIHN1YmRpci1kaXJzID0gbnNzX2hlc2lvZAorIHZwYXRoICUuYyBuc3NfaGVzaW9kCitkaWZmIC0tZ2l0IGEvaWNvbnYvTWFrZWZpbGUgYi9pY29udi9NYWtlZmlsZQoraW5kZXggMGQ1NWVkYS4uYTE4NDdjNiAxMDA2NDQKKy0tLSBhL2ljb252L01ha2VmaWxlCisrKysgYi9pY29udi9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlNYWtlZmlsZSBmb3IgaWNvbnYuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gaWNvbnYKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0zOSw2ICs0MSwxMSBAQCBDRkxBR1MtaWNvbnZfY2hhcm1hcC5jID0gLUkuLi9sb2NhbGUvcHJvZ3JhbXMKKyBDRkxBR1MtZHVtbXktcmVwZXJ0b2lyZS5jID0gLUkuLi9sb2NhbGUvcHJvZ3JhbXMKKyBDRkxBR1MtY2hhcm1hcC5jID0gLURDSEFSTUFQX1BBVEg9JyIkKGkxOG5kaXIpL2NoYXJtYXBzIicgXAorIAkJICAgLURERUZBVUxUX0NIQVJNQVA9bnVsbF9wb2ludGVyIC1ETkVFRF9OVUxMX1BPSU5URVIKKysKKytpZm5lcSAoeSwkKE9QVElPTl9FR0xJQkNfU1BBV04pKQorK0NGTEFHUy1jaGFybWFwLWRpci5jICs9IC1ETk9fVU5DT01QUkVTUworK2VuZGlmCisrCisgQ0ZMQUdTLWxpbmVyZWFkZXIuYyA9IC1ETk9fVFJBTlNMSVRFUkFUSU9OCisgQ0ZMQUdTLXNpbXBsZS1oYXNoLmMgPSAtSS4uL2xvY2FsZQorIAorZGlmZiAtLWdpdCBhL2ljb252L2djb252X2RiLmMgYi9pY29udi9nY29udl9kYi5jCitpbmRleCBjZTQ2MjE2Li5lYTE4OTY0IDEwMDY0NAorLS0tIGEvaWNvbnYvZ2NvbnZfZGIuYworKysrIGIvaWNvbnYvZ2NvbnZfZGIuYworQEAgLTI1LDYgKzI1LDcgQEAKKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgI2luY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisgI2luY2x1ZGUgPGxvY2FsZS9sb2NhbGVpbmZvLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2luY2x1ZGUgPGRsZmNuLmg+CisgI2luY2x1ZGUgPGdjb252X2ludC5oPgorQEAgLTgyOCw5ICs4MjksMTEgQEAgZnJlZV9tb2R1bGVzX2RiIChzdHJ1Y3QgZ2NvbnZfbW9kdWxlICpub2RlKQorIC8qIEZyZWUgYWxsIHJlc291cmNlcyBpZiBuZWNlc3NhcnkuICAqLworIGxpYmNfZnJlZXJlc19mbiAoZnJlZV9tZW0pCisgeworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIC8qIEZpcnN0IGZyZWUgbG9jYWxlIG1lbW9yeS4gIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUgZnJlZWluZyBkZXJpdmF0aW9ucywKKyAgICAgIGFzIGN0eXBlIGNsZWFudXAgZnVuY3Rpb25zIGRlcmVmZXJlbmNlIHN0ZXBzIGFycmF5cyB3aGljaCB3ZSBmcmVlIGJlbG93LiAgKi8KKyAgIF9ubF9sb2NhbGVfc3ViZnJlZXJlcyAoKTsKKysjZW5kaWYKKyAKKyAgIC8qIGZpbmRkb21haW4uYyBoYXMgc2ltaWxhciBwcm9ibGVtLiAgKi8KKyAgIGV4dGVybiB2b2lkIF9ubF9maW5kZG9tYWluX3N1YmZyZWVyZXMgKHZvaWQpIGF0dHJpYnV0ZV9oaWRkZW47CitkaWZmIC0tZ2l0IGEvaWNvbnYvZ2NvbnZfdHJhbnMuYyBiL2ljb252L2djb252X3RyYW5zLmMKK2luZGV4IDVkNWQ0ZDcuLmE3ZDMwNzIgMTAwNjQ0CistLS0gYS9pY29udi9nY29udl90cmFucy5jCisrKysgYi9pY29udi9nY29udl90cmFucy5jCitAQCAtMjMsNiArMjMsNyBAQAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorICNpbmNsdWRlICJnY29udl9pbnQuaCIKK0BAIC0zOCwxNSArMzksMTkgQEAgX19nY29udl90cmFuc2xpdGVyYXRlIChzdHJ1Y3QgX19nY29udl9zdGVwICpzdGVwLAorIAkJICAgICAgIHVuc2lnbmVkIGNoYXIgKipvdXRidWZzdGFydCwgc2l6ZV90ICppcnJldmVyc2libGUpCisgeworICAgLyogRmluZCBvdXQgYWJvdXQgdGhlIGxvY2FsZSdzIHRyYW5zbGl0ZXJhdGlvbi4gICovCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgdWludF9mYXN0MzJfdCBzaXplOworICAgY29uc3QgdWludDMyX3QgKmZyb21faWR4OworICAgY29uc3QgdWludDMyX3QgKmZyb21fdGJsOworICAgY29uc3QgdWludDMyX3QgKnRvX2lkeDsKKyAgIGNvbnN0IHVpbnQzMl90ICp0b190Ymw7CisrI2VuZGlmCisgICBjb25zdCB1aW50MzJfdCAqd2luYnVmOworICAgY29uc3QgdWludDMyX3QgKndpbmJ1ZmVuZDsKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICB1aW50X2Zhc3QzMl90IGxvdzsKKyAgIHVpbnRfZmFzdDMyX3QgaGlnaDsKKysjZW5kaWYKKyAKKyAgIC8qIFRoZSBpbnB1dCBidWZmZXIuICBUaGVyZSBhcmUgYWN0dWFsbHkgNC1ieXRlIHZhbHVlcy4gICovCisgICB3aW5idWYgPSAoY29uc3QgdWludDMyX3QgKikgKmluYnVmcDsKK0BAIC01OCw2ICs2Myw3IEBAIF9fZ2NvbnZfdHJhbnNsaXRlcmF0ZSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqc3RlcCwKKyAgICAgUFRSX0RFTUFOR0xFIChmY3QpOworICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIC8qIElmIHRoZXJlIGlzIG5vIHRyYW5zbGl0ZXJhdGlvbiBpbmZvcm1hdGlvbiBpbiB0aGUgbG9jYWxlIGRvbid0IGRvCisgICAgICBhbnl0aGluZyBhbmQgcmV0dXJuIHRoZSBlcnJvci4gICovCisgICBzaXplID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ1RZUEUsIF9OTF9DVFlQRV9UUkFOU0xJVF9UQUJfU0laRSk7CitAQCAtMTkzLDYgKzE5OSw3IEBAIF9fZ2NvbnZfdHJhbnNsaXRlcmF0ZSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqc3RlcCwKKyAgICAgICAgICAgICAgc29ydGVkLiAgKi8KKyAJICBicmVhazsKKyAgICAgfQorKyNlbmRpZgorIAorICAgLyogT25lIGxhc3QgY2hhbmNlOiB1c2UgdGhlIGRlZmF1bHQgcmVwbGFjZW1lbnQuICAqLworICAgaWYgKF9OTF9DVVJSRU5UX1dPUkQgKExDX0NUWVBFLCBfTkxfQ1RZUEVfVFJBTlNMSVRfREVGQVVMVF9NSVNTSU5HX0xFTikgIT0gMCkKK2RpZmYgLS1naXQgYS9pY29udi9pY29udl9wcm9nLmMgYi9pY29udi9pY29udl9wcm9nLmMKK2luZGV4IGUyNDliY2UuLjQwM2VjZTUgMTAwNjQ0CistLS0gYS9pY29udi9pY29udl9wcm9nLmMKKysrKyBiL2ljb252L2ljb252X3Byb2cuYworQEAgLTM1LDYgKzM1LDcgQEAKKyAjaWZkZWYgX1BPU0lYX01BUFBFRF9GSUxFUworICMgaW5jbHVkZSA8c3lzL21tYW4uaD4KKyAjZW5kaWYKKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8Y2hhcm1hcC5oPgorICNpbmNsdWRlIDxnY29udl9pbnQuaD4KKyAjaW5jbHVkZSAiaWNvbnZfcHJvZy5oIgorQEAgLTIyMSwxMCArMjIyLDE3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCSAgICAgIGJvb2wgdG9fd3JvbmcgPQorIAkJKGljb252X29wZW4gKHRvX2NvZGUsICJVVEYtOCIpID09IChpY29udl90KSAtMQorIAkJICYmIGVycm5vID09IEVJTlZBTCk7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIAkgICAgICBjb25zdCBjaGFyICpmcm9tX3ByZXR0eSA9CisgCQkoZnJvbV9jb2RlWzBdID8gZnJvbV9jb2RlIDogbmxfbGFuZ2luZm8gKENPREVTRVQpKTsKKyAJICAgICAgY29uc3QgY2hhciAqdG9fcHJldHR5ID0KKyAJCShvcmlnX3RvX2NvZGVbMF0gPyBvcmlnX3RvX2NvZGUgOiBubF9sYW5naW5mbyAoQ09ERVNFVCkpOworKyNlbHNlCisrCSAgICAgIGNvbnN0IGNoYXIgKmZyb21fcHJldHR5ID0KKysJCShmcm9tX2NvZGVbMF0gPyBmcm9tX2NvZGUgOiAiQU5TSV9YMy40LTE5NjgiKTsKKysJICAgICAgY29uc3QgY2hhciAqdG9fcHJldHR5ID0KKysgICAgICAgICAgICAgICAgIChvcmlnX3RvX2NvZGVbMF0gPyBvcmlnX3RvX2NvZGUgOiAiQU5TSV9YMy40LTE5NjgiKTsKKysjZW5kaWYKKyAKKyAJICAgICAgaWYgKGZyb21fd3JvbmcpCisgCQl7CitkaWZmIC0tZ2l0IGEvaWNvbnZkYXRhL01ha2VmaWxlIGIvaWNvbnZkYXRhL01ha2VmaWxlCitpbmRleCBhM2QxZDA5Li4wODMyNzA4IDEwMDY0NAorLS0tIGEvaWNvbnZkYXRhL01ha2VmaWxlCisrKysgYi9pY29udmRhdGEvTWFrZWZpbGUKK0BAIC0xOCwxMiArMTgsMTUgQEAKKyAjCisgIwlNYWtlZmlsZSBmb3IgaWNvbnYgZGF0YSBhbmQgY29kZS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBpY29udmRhdGEKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyAjIE5hbWVzIG9mIGFsbCB0aGUgc2hhcmVkIG9iamVjdHMgd2hpY2ggaW1wbGVtZW50IHRoZSB0cmFuc2Zvcm1hdGlvbnMuCistbW9kdWxlcwk6PSBJU084ODU5LTEgSVNPODg1OS0yIElTTzg4NTktMyBJU084ODU5LTQgSVNPODg1OS01CQkgXAorK21vZHVsZXMtJChPUFRJT05fRUdMSUJDX0NIQVJTRVRTKQkJCQkJIFwKKysJOj0gSVNPODg1OS0xIElTTzg4NTktMiBJU084ODU5LTMgSVNPODg1OS00IElTTzg4NTktNQkJIFwKKyAJICAgSVNPODg1OS02IElTTzg4NTktNyBJU084ODU5LTggSVNPODg1OS05IElTTzg4NTktMTAJCSBcCisgCSAgIElTTzg4NTktMTEgSVNPODg1OS0xMyBJU084ODU5LTE0IElTTzg4NTktMTUgSVNPODg1OS0xNgkgXAorIAkgICBULjYxIElTT182OTM3IFNKSVMgS09JLTggSFAtUk9NQU44IEhQLVJPTUFOOSBFQkNESUMtQVQtREUJIFwKK0BAIC02MywxMSArNjYsMTMgQEAgbW9kdWxlcwk6PSBJU084ODU5LTEgSVNPODg1OS0yIElTTzg4NTktMyBJU084ODU5LTQgSVNPODg1OS01CQkgXAorIAkgICBNQUMtQ0VOVFJBTEVVUk9QRSBLT0k4LVJVIElTTzg4NTktOUUJCQkJIFwKKyAJICAgQ1A3NzAgQ1A3NzEgQ1A3NzIgQ1A3NzMgQ1A3NzQKKyAKKy1tb2R1bGVzLnNvIDo9ICQoYWRkc3VmZml4IC5zbywgJChtb2R1bGVzKSkKKyttb2R1bGVzLnNvIDo9ICQoYWRkc3VmZml4IC5zbywgJChtb2R1bGVzLXkpKQorIAorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgdGVzdHMgPSBidWctaWNvbnYxIGJ1Zy1pY29udjIgdHN0LWxvYWRpbmcgdHN0LWUyYmlnIHRzdC1pY29udjQgYnVnLWljb252NCBcCistCXRzdC1pY29udjYgYnVnLWljb252NSBidWctaWNvbnY2IHRzdC1pY29udjcgYnVnLWljb252OCBidWctaWNvbnY5CisrCXRzdC1pY29udjYgYnVnLWljb252NSBidWctaWNvbnY4IGJ1Zy1pY29udjkKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICs9IGJ1Zy1pY29udjYgdHN0LWljb252NworKworIGlmZXEgKCQoaGF2ZS10aHJlYWQtbGlicmFyeSkseWVzKQorIHRlc3RzICs9IGJ1Zy1pY29udjMKKyBlbmRpZgorQEAgLTEyNywxMyArMTMyLDEzIEBAIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgIyBSdWxlIHRvIGdlbmVyYXRlIHRoZSBzaGFyZWQgb2JqZWN0cy4KKyBjaGFybWFwcyA9IC4uL2xvY2FsZWRhdGEvY2hhcm1hcHMKKyAtaW5jbHVkZSAkKG9ianBmeClpY29udi1ydWxlcworLWV4dHJhLW1vZHVsZXMtbGVmdCA6PSAkKG1vZHVsZXMpCisrZXh0cmEtbW9kdWxlcy1sZWZ0IDo9ICQobW9kdWxlcy15KQorIGluY2x1ZGUgZXh0cmEtbW9kdWxlLm1rCisgCisgCisgZXh0cmEtb2JqcwkrPSAkKG1vZHVsZXMuc28pCistaW5zdGFsbC1vdGhlcnMJPSAkKGFkZHByZWZpeCAkKGluc3RfZ2NvbnZkaXIpLywgJChtb2R1bGVzLnNvKSkJXAorLQkJICAkKGluc3RfZ2NvbnZkaXIpL2djb252LW1vZHVsZXMKKytpbnN0YWxsLW90aGVycy15ICs9ICQoYWRkcHJlZml4ICQoaW5zdF9nY29udmRpcikvLCAkKG1vZHVsZXMuc28pKQorK2luc3RhbGwtb3RoZXJzLSQoT1BUSU9OX0VHTElCQ19DSEFSU0VUUykgKz0gJChpbnN0X2djb252ZGlyKS9nY29udi1tb2R1bGVzCisgCisgIyBXZSBjYW4gYnVpbGQgdGhlIGNvbnZlcnNpb24gdGFibGVzIGZvciBudW1lcm91cyBjaGFyc2V0cyBhdXRvbWF0aWNhbGx5LgorIAorQEAgLTIwMSw3ICsyMDYsNyBAQCBiZWZvcmUtY29tcGlsZSArPSAkKGFkZHByZWZpeCAkKG9ianBmeCksJChnZW5lcmF0ZWQtbW9kdWxlczo9LmgpKQorIGlmbmRlZiBhdm9pZC1nZW5lcmF0ZWQKKyAkKG9ianBmeClpY29udi1ydWxlczogTWFrZWZpbGUKKyAJJChtYWtlLXRhcmdldC1kaXJlY3RvcnkpCistCXsgZWNobyAkKGZpbHRlci1vdXQgbGliJSwgJChtb2R1bGVzKSk7IFwKKysJeyBlY2hvICQoZmlsdGVyLW91dCBsaWIlLCAkKG1vZHVsZXMteSkpOyBcCisgCSAgZWNobyA4Yml0ICQoZ2VuLThiaXQtbW9kdWxlcyk7IFwKKyAJICBlY2hvIDhiaXQtZ2FwICQoZ2VuLThiaXQtZ2FwLW1vZHVsZXMpOyB9IHwgXAorIAlMQ19BTEw9QyBcCitAQCAtMjQ1LDcgKzI1MCw3IEBAICQoYWRkcHJlZml4ICQoaW5zdF9nY29udmRpcikvLCAkKG1vZHVsZXMuc28pKTogXAorIAkkKGRvLWluc3RhbGwtcHJvZ3JhbSkKKyAkKGluc3RfZ2NvbnZkaXIpL2djb252LW1vZHVsZXM6IGdjb252LW1vZHVsZXMgJCgrZm9yY2UpCisgCSQoZG8taW5zdGFsbCkKKy1pZmVxIChubywkKGNyb3NzLWNvbXBpbGluZykpCisrIyBlZ2xpYmM6IGlmZXEgKG5vLCQoY3Jvc3MtY29tcGlsaW5nKSkKKyAjIFVwZGF0ZSB0aGUgJChwcmVmaXgpL2xpYi9nY29udi9nY29udi1tb2R1bGVzLmNhY2hlIGZpbGUuIFRoaXMgaXMgbmVjZXNzYXJ5CisgIyBpZiB0aGlzIGxpYmMgaGFzIG1vcmUgZ2NvbnYgbW9kdWxlcyB0aGFuIHRoZSBwcmV2aW91c2x5IGluc3RhbGxlZCBvbmUuCisgCWlmIHRlc3QgLWYgIiQoaW5zdF9nY29udmRpcikvZ2NvbnYtbW9kdWxlcy5jYWNoZSI7IHRoZW4gXAorQEAgLTI1NCw5ICsyNTksOSBAQCBpZmVxIChubywkKGNyb3NzLWNvbXBpbGluZykpCisgCSAgICQoY29tbW9uLW9ianBmeClpY29udi9pY29udmNvbmZpZyBcCisgCSAgICAgJChhZGRwcmVmaXggLS1wcmVmaXg9LCQoaW5zdGFsbF9yb290KSk7IFwKKyAJZmkKKy1lbHNlCistCUBlY2hvICcqQCpAKkAgWW91IHNob3VsZCByZWNyZWF0ZSAkKGluc3RfZ2NvbnZkaXIpL2djb252LW1vZHVsZXMuY2FjaGUnCistZW5kaWYKKysjIGVnbGliYzogZWxzZQorKyMgZWdsaWJjOglAZWNobyAnKkAqQCpAIFlvdSBzaG91bGQgcmVjcmVhdGUgJChpbnN0X2djb252ZGlyKS9nY29udi1tb2R1bGVzLmNhY2hlJworKyMgZWdsaWJjOiBlbmRpZgorIAorIGVuZGlmICMgYnVpbGQtc2hhcmVkID0geWVzCisgCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXRkYi5oIGIvaW5jbHVkZS9uZXRkYi5oCitpbmRleCBlMWYwNTFkLi5mNmQxNWFhIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9uZXRkYi5oCisrKysgYi9pbmNsdWRlL25ldGRiLmgKK0BAIC0yMzIsNiArMjMyLDEwIEBAIGV4dGVybiBlbnVtIG5zc19zdGF0dXMgX25zc18gIyMgc2VydmljZSAjIyBfZ2V0aG9zdGJ5bmFtZTJfcgkJICAgICAgXAorIAkJICAgICAgIChjb25zdCBjaGFyICpuYW1lLCBpbnQgYWYsIHN0cnVjdCBob3N0ZW50ICpob3N0LAkgICAgICBcCisgCQkJY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuLCBpbnQgKmVycm5vcCwJICAgICAgXAorIAkJCWludCAqaF9lcnJub3ApOwkJCQkJICAgICAgXAorK2V4dGVybiBlbnVtIG5zc19zdGF0dXMgX25zc18gIyMgc2VydmljZSAjIyBfZ2V0aG9zdGJ5bmFtZTNfcgkJICAgICAgXAorKwkJICAgICAgIChjb25zdCBjaGFyICpuYW1lLCBpbnQgYWYsIHN0cnVjdCBob3N0ZW50ICpyZXN1bHQsICAgICBcCisrCQkJY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuLCBpbnQgKmVycm5vcCwJICAgICAgXAorKwkJCWludCAqaF9lcnJub3AsIGludDMyX3QgKnR0bHAsIGNoYXIgKipjYW5vbnApOyAgICAgICAgIFwKKyBleHRlcm4gZW51bSBuc3Nfc3RhdHVzIF9uc3NfICMjIHNlcnZpY2UgIyMgX2dldGhvc3RieW5hbWVfcgkJICAgICAgXAorIAkJICAgICAgIChjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgaG9zdGVudCAqaG9zdCwgY2hhciAqYnVmZmVyLCBcCisgCQkJc2l6ZV90IGJ1ZmxlbiwgaW50ICplcnJub3AsIGludCAqaF9lcnJub3ApOwkgICAgICBcCitkaWZmIC0tZ2l0IGEvaW5ldC9NYWtlZmlsZSBiL2luZXQvTWFrZWZpbGUKK2luZGV4IGYxZDg3MWYuLjdjYjE3MDkgMTAwNjQ0CistLS0gYS9pbmV0L01ha2VmaWxlCisrKysgYi9pbmV0L01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgaW5ldCBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGluZXQKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0yNyw3ICsyOSw4IEBAIGhlYWRlcnMJOj0gbmV0aW5ldC9ldGhlci5oIG5ldGluZXQvaW4uaCBuZXRpbmV0L2luX3N5c3RtLmggXAorIAkgICBuZXRpbmV0L3RjcC5oIG5ldGluZXQvaXAuaCAkKHdpbGRjYXJkIGFycGEvKi5oIHByb3RvY29scy8qLmgpIFwKKyAJICAgYWxpYXNlcy5oIGlmYWRkcnMuaCBuZXRpbmV0L2lwNi5oIG5ldGluZXQvaWNtcDYuaCBiaXRzL2luLmgKKyAKKy1yb3V0aW5lcyA6PSBodG9ubCBodG9ucwkJXAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSBcCisrCSArPSBodG9ubCBodG9ucyBcCisgCSAgICBpbmV0X2xuYW9mIGluZXRfbWthZHIJXAorIAkgICAgaW5ldF9uZXRvZiBpbmV0X250b2EgaW5ldF9uZXQgaGVycm5vIGhlcnJuby1sb2MgXAorIAkgICAgZ2V0aHN0YnlhZCBnZXRoc3RieWFkX3IgZ2V0aHN0YnlubSBnZXRoc3RieW5tMiBnZXRoc3RieW5tMl9yIFwKK0BAIC0zOSwxOCArNDIsMjMgQEAgcm91dGluZXMgOj0gaHRvbmwgaHRvbnMJCVwKKyAJICAgIGdldHNlcnZlbnRfcglcCisgCSAgICBldGhlcl9hdG9uIGV0aGVyX2F0b25fciBldGhlcl9odG9uIGV0aGVyX2xpbmUgXAorIAkgICAgZXRoZXJfbnRvYSBldGhlcl9udG9hX3IgZXRoZXJfbnRvaCBcCistCSAgICByY21kIHJleGVjIHJ1c2VycGFzcyBcCisgCSAgICBnZXRuZXRncmVudF9yIGdldG5ldGdyZW50IFwKKy0JICAgIGdldGFsaWFzZW50X3IgZ2V0YWxpYXNlbnQgZ2V0YWxpYXNuYW1lIGdldGFsaWFzbmFtZV9yIFwKKy0JICAgIGluNl9hZGRyIGdldG5hbWVpbmZvIGlmX2luZGV4IGlmYWRkcnMgaW5ldDZfb3B0aW9uIFwKKysJICAgIGluNl9hZGRyIGdldG5hbWVpbmZvIGlmX2luZGV4IGlmYWRkcnMgXAorIAkgICAgZ2V0aXB2NHNvdXJjZWZpbHRlciBzZXRpcHY0c291cmNlZmlsdGVyIFwKKy0JICAgIGdldHNvdXJjZWZpbHRlciBzZXRzb3VyY2VmaWx0ZXIgaW5ldDZfb3B0IGluZXQ2X3J0aAorKwkgICAgZ2V0c291cmNlZmlsdGVyIHNldHNvdXJjZWZpbHRlcgorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19SQ01EKSBcCisrCSArPSByY21kIHJleGVjIHJ1c2VycGFzcworK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19EQl9BTElBU0VTKSBcCisrCSArPSBnZXRhbGlhc2VudF9yIGdldGFsaWFzZW50IGdldGFsaWFzbmFtZSBnZXRhbGlhc25hbWVfcgorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19BRFZBTkNFRF9JTkVUNikgXAorKwkgKz0gaW5ldDZfb3B0aW9uIGluZXQ2X29wdCBpbmV0Nl9ydGgKKyAKKy1hdXggOj0gY2hlY2tfcGYgY2hlY2tfbmF0aXZlIGlmcmVxCisrYXV4LSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBjaGVja19wZiBjaGVja19uYXRpdmUgaWZyZXEKKyAKKyB0ZXN0cyA6PSBodG9udGVzdCB0ZXN0X2lmaW5kZXggdHN0LW50b2EgdHN0LWV0aGVyX2F0b24gdHN0LW5ldHdvcmsgXAorLQkgdHN0LWdldGhubSB0ZXN0LWlmYWRkcnMgYnVnLWlmMSB0ZXN0LWluZXQ2X29wdCB0c3QtZXRoZXJfbGluZSBcCisrCSB0c3QtZ2V0aG5tIHRlc3QtaWZhZGRycyBidWctaWYxIHRzdC1ldGhlcl9saW5lIFwKKyAJIHRzdC1nZXRuaTEgdHN0LWdldG5pMiB0c3QtaW5ldDZfcnRoIHRzdC1jaGVja3MKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQURWQU5DRURfSU5FVDYpICs9IHRlc3QtaW5ldDZfb3B0CisgCisgaW5jbHVkZSAuLi9SdWxlcworIAorZGlmZiAtLWdpdCBhL2ludGwvTWFrZWZpbGUgYi9pbnRsL01ha2VmaWxlCitpbmRleCA5ZWNmOGZlLi41ODdiYzBkIDEwMDY0NAorLS0tIGEvaW50bC9NYWtlZmlsZQorKysrIGIvaW50bC9NYWtlZmlsZQorQEAgLTE2LDYgKzE2LDcgQEAKKyAjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAKKyAjIE1ha2VmaWxlIGZvciBpbnRsIHN1YmRpcmVjdG9yeTogbWVzc2FnZSBoYW5kbGluZyBjb2RlIGZyb20gR05VIGdldHRleHQuCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworIAorIHN1YmRpciA9IGludGwKKyAKK0BAIC00OCw3ICs0OSw3IEBAIGVuZGlmCisgJChvYmpwZngpcGx1cmFsLm86IHBsdXJhbC5jCisgCisgaWZlcSAoJChydW4tYnVpbHQtdGVzdHMpLHllcykKKy1pZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorK2lmZXEgKHl5eWVzLCQoT1BUSU9OX0VHTElCQ19MT0NBTEVTKSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkkKGJ1aWxkLXNoYXJlZCkpCisgaWZuZXEgKCQoc3RyaXAgJChNU0dGTVQpKSw6KQorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpdHN0LXRyYW5zbGl0Lm91dCAkKG9ianBmeCl0c3QtZ2V0dGV4dC5vdXQgXAorIAkJICQob2JqcGZ4KXRzdC1nZXR0ZXh0Mi5vdXQgJChvYmpwZngpdHN0LWNvZGVzZXQub3V0IFwKK2RpZmYgLS1naXQgYS9pbnRsL2RjaWdldHRleHQuYyBiL2ludGwvZGNpZ2V0dGV4dC5jCitpbmRleCA4YTNmMDkxLi5lMjcxNjQ4IDEwMDY0NAorLS0tIGEvaW50bC9kY2lnZXR0ZXh0LmMKKysrKyBiL2ludGwvZGNpZ2V0dGV4dC5jCitAQCAtMTAwLDExICsxMDAsMTUgQEAgZXh0ZXJuIGludCBlcnJubzsKKyAjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKyAjZW5kaWYKKyAjaW5jbHVkZSAiaGFzaC1zdHJpbmcuaCIKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrI2VuZGlmCisgCisgLyogSGFuZGxlIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4gICovCisgI2lmZGVmIF9MSUJDCisgIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorICMgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgX19saWJjX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQKKysjIGRlZmluZSBnbF9yd2xvY2tfZGVmaW5lIF9fbGliY19yd2xvY2tfZGVmaW5lCisgIyBkZWZpbmUgZ2xfcndsb2NrX3JkbG9jayBfX2xpYmNfcndsb2NrX3JkbG9jaworICMgZGVmaW5lIGdsX3J3bG9ja193cmxvY2sgX19saWJjX3J3bG9ja193cmxvY2sKKyAjIGRlZmluZSBnbF9yd2xvY2tfdW5sb2NrIF9fbGliY19yd2xvY2tfdW5sb2NrCitAQCAtNTIzLDggKzUyNywxMCBAQCBEQ0lHRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwKKyAgIHNhdmVkX2Vycm5vID0gZXJybm87CisgCisgI2lmZGVmIF9MSUJDCistICBfX2xpYmNfcndsb2NrX2RlZmluZSAoZXh0ZXJuLCBfX2xpYmNfc2V0bG9jYWxlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKy0gIF9fbGliY19yd2xvY2tfcmRsb2NrIChfX2xpYmNfc2V0bG9jYWxlX2xvY2spOworKyMgaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrICBnbF9yd2xvY2tfZGVmaW5lIChleHRlcm4sIF9fbGliY19zZXRsb2NhbGVfbG9jayBhdHRyaWJ1dGVfaGlkZGVuKQorKyAgZ2xfcndsb2NrX3JkbG9jayAoX19saWJjX3NldGxvY2FsZV9sb2NrKTsKKysjIGVuZGlmCisgI2VuZGlmCisgCisgICBnbF9yd2xvY2tfcmRsb2NrIChfbmxfc3RhdGVfbG9jayk7CitAQCAtNTUwLDcgKzU1NiwxMSBAQCBEQ0lHRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwKKyAjaWZkZWYgSEFWRV9QRVJfVEhSRUFEX0xPQ0FMRQorICMgaWZuZGVmIElOX0xJQkdMT0NBTEUKKyAjICBpZmRlZiBfTElCQworLSAgbG9jYWxlbmFtZSA9IHN0cmR1cGEgKF9fY3VycmVudF9sb2NhbGVfbmFtZSAoY2F0ZWdvcnkpKTsKKysjICAgaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrICAgICAgbG9jYWxlbmFtZSA9IHN0cmR1cGEgKF9fY3VycmVudF9sb2NhbGVfbmFtZSAoY2F0ZWdvcnkpKTsKKysjICAgZWxzZQorKyAgICAgIGxvY2FsZW5hbWUgPSAiQyI7CisrIyAgIGVuZGlmCisgIyAgZWxzZQorICAgY2F0ZWdvcnluYW1lID0gY2F0ZWdvcnlfdG9fbmFtZSAoY2F0ZWdvcnkpOworICMgICBkZWZpbmUgQ0FURUdPUllOQU1FX0lOSVRJQUxJWkVECitAQCAtNTgxLDEwICs1OTEsMTIgQEAgRENJR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsCisgICAgICAgZWxzZQorIAlyZXR2YWwgPSAoY2hhciAqKSAoKmZvdW5kcCktPnRyYW5zbGF0aW9uOworIAorLSAgICAgIGdsX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKyAjIGlmZGVmIF9MSUJDCistICAgICAgX19saWJjX3J3bG9ja191bmxvY2sgKF9fbGliY19zZXRsb2NhbGVfbG9jayk7CisrIyAgaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrICAgICAgZ2xfcndsb2NrX3VubG9jayAoX19saWJjX3NldGxvY2FsZV9sb2NrKTsKKysjICBlbmRpZgorICMgZW5kaWYKKysgICAgICBnbF9yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisgICAgICAgX19zZXRfZXJybm8gKHNhdmVkX2Vycm5vKTsKKyAgICAgICByZXR1cm4gcmV0dmFsOworICAgICB9CitAQCAtODM4LDEwICs4NTAsMTMgQEAgRENJR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsCisgCSAgICAgIGlmIChwbHVyYWwpCisgCQlyZXR2YWwgPSBwbHVyYWxfbG9va3VwIChkb21haW4sIG4sIHJldHZhbCwgcmV0bGVuKTsKKyAKKy0JICAgICAgZ2xfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworICNpZmRlZiBfTElCQworLQkgICAgICBfX2xpYmNfcndsb2NrX3VubG9jayAoX19saWJjX3NldGxvY2FsZV9sb2NrKTsKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKworKwkgICAgICBnbF9yd2xvY2tfdW5sb2NrIChfX2xpYmNfc2V0bG9jYWxlX2xvY2spOworKyMgZW5kaWYKKyAjZW5kaWYKKysJICAgICAgZ2xfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworIAkgICAgICByZXR1cm4gcmV0dmFsOworIAkgICAgfQorIAl9CitAQCAtODUwLDEwICs4NjUsMTIgQEAgRENJR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsCisgIHJldHVybl91bnRyYW5zbGF0ZWQ6CisgICAvKiBSZXR1cm4gdGhlIHVudHJhbnNsYXRlZCBNU0dJRC4gICovCisgICBGUkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CistICBnbF9yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisgI2lmZGVmIF9MSUJDCistICBfX2xpYmNfcndsb2NrX3VubG9jayAoX19saWJjX3NldGxvY2FsZV9sb2NrKTsKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyAgIGdsX3J3bG9ja191bmxvY2sgKF9fbGliY19zZXRsb2NhbGVfbG9jayk7CisrIyBlbmRpZgorICNlbmRpZgorKyAgZ2xfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworICNpZm5kZWYgX0xJQkMKKyAgIGlmICghRU5BQkxFX1NFQ1VSRSkKKyAgICAgeworQEAgLTE1NTAsNyArMTU2NywxMSBAQCBndWVzc19jYXRlZ29yeV92YWx1ZSAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWUpCisgICAgICBgTENfeHh4JywgYW5kIGBMQU5HJy4gIE9uIHNvbWUgc3lzdGVtcyB0aGlzIGNhbiBiZSBkb25lIGJ5IHRoZQorICAgICAgYHNldGxvY2FsZScgZnVuY3Rpb24gaXRzZWxmLiAgKi8KKyAjIGlmZGVmIF9MSUJDCisrIyAgaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBsb2NhbGUgPSBfX2N1cnJlbnRfbG9jYWxlX25hbWUgKGNhdGVnb3J5KTsKKysjICBlbHNlCisrICBsb2NhbGUgPSAiQyI7CisrIyAgZW5kaWYKKyAjIGVsc2UKKyAgIGxvY2FsZV9kZWZhdWx0ZWQgPSAwOworICMgIGlmIEhBVkVfVVNFTE9DQUxFCitkaWZmIC0tZ2l0IGEvaW8vTWFrZWZpbGUgYi9pby9NYWtlZmlsZQoraW5kZXggNjEzZGNlMC4uNjk3NDM5ZSAxMDA2NDQKKy0tLSBhL2lvL01ha2VmaWxlCisrKysgYi9pby9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIEkvTyBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGlvCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMzYsNyArMzgsNyBAQCByb3V0aW5lcyA6PQkJCQkJCQkJXAorIAlmeHN0YXRhdCBmeHN0YXRhdDY0CQkJCQkJXAorIAlzdGF0ZnMgZnN0YXRmcyBzdGF0ZnM2NCBmc3RhdGZzNjQJCQkJXAorIAlzdGF0dmZzIGZzdGF0dmZzIHN0YXR2ZnM2NCBmc3RhdHZmczY0CQkJCVwKKy0JdW1hc2sgY2htb2QgZmNobW9kIGxjaG1vZCBmY2htb2RhdAkJCQlcCisrCXVtYXNrIGNobW9kIGZjaG1vZCBmY2htb2RhdAkJCQkJXAorIAlta2RpciBta2RpcmF0CQkJCQkJCVwKKyAJb3BlbiBvcGVuXzIgb3BlbjY0IG9wZW42NF8yIG9wZW5hdCBvcGVuYXRfMiBvcGVuYXQ2NCBvcGVuYXQ2NF8yCVwKKyAJcmVhZCB3cml0ZSBsc2VlayBsc2VlazY0IGFjY2VzcyBldWlkYWNjZXNzIGZhY2Nlc3NhdAkJXAorQEAgLTQ5LDExICs1MSwxMyBAQCByb3V0aW5lcyA6PQkJCQkJCQkJXAorIAl0dHluYW1lIHR0eW5hbWVfciBpc2F0dHkJCQkJCVwKKyAJbGluayBsaW5rYXQgc3ltbGluayBzeW1saW5rYXQgcmVhZGxpbmsgcmVhZGxpbmthdAkJXAorIAl1bmxpbmsgdW5saW5rYXQgcm1kaXIJCQkJCQlcCistCWZ0dyBmdHc2NCBmdHMgcG9sbCBwcG9sbAkJCQkJXAorKwlwb2xsIHBwb2xsCQkJCQkJCVwKKyAJcG9zaXhfZmFkdmlzZSBwb3NpeF9mYWR2aXNlNjQJCQkJCVwKKyAJcG9zaXhfZmFsbG9jYXRlIHBvc2l4X2ZhbGxvY2F0ZTY0CQkJCVwKKyAJc2VuZGZpbGUgc2VuZGZpbGU2NCBcCisgCXV0aW1lbnNhdCBmdXRpbWVucworK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19CU0QpICs9IGxjaG1vZAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19GVFJBVkVSU0UpICs9IGZ0dyBmdHc2NCBmdHMKKyAKKyBhdXggOj0gaGF2ZV9vX2Nsb2V4ZWMKKyAKK0BAIC02NCwxOCArNjgsMjIgQEAgc3RhdGljLW9ubHktcm91dGluZXMgPSBzdGF0IGZzdGF0IGxzdGF0IHN0YXQ2NCBmc3RhdDY0IGxzdGF0NjQJXAorIAkJICAgICAgIGZzdGF0YXQgZnN0YXRhdDY0IG1rbm9kIG1rbm9kYXQKKyAKKyBvdGhlcnMJCTo9IHB3ZAorLXRlc3Qtc3Jjcwk6PSBmdHd0ZXN0CisrdGVzdC1zcmNzLSQoT1BUSU9OX0VHTElCQ19GVFJBVkVSU0UpIDo9IGZ0d3Rlc3QKKyB0ZXN0cwkJOj0gdGVzdC11dGltZSB0ZXN0LXN0YXQgdGVzdC1zdGF0MiB0ZXN0LWxmcyB0c3QtZ2V0Y3dkIFwKKy0JCSAgIHRzdC1mY250bCBidWctZnR3MSBidWctZnR3MiBidWctZnR3MyBidWctZnR3NCB0c3Qtc3RhdHZmcyBcCisrCQkgICB0c3QtZmNudGwgdHN0LXN0YXR2ZnMgXAorIAkJICAgdHN0LW9wZW5hdCB0c3QtdW5saW5rYXQgdHN0LWZzdGF0YXQgdHN0LWZ1dGltZXNhdCBcCisgCQkgICB0c3QtcmVuYW1lYXQgdHN0LWZjaG93bmF0IHRzdC1mY2htb2RhdCB0c3QtZmFjY2Vzc2F0IFwKKyAJCSAgIHRzdC1zeW1saW5rYXQgdHN0LWxpbmthdCB0c3QtcmVhZGxpbmthdCB0c3QtbWtkaXJhdCBcCistCQkgICB0c3QtbWtub2RhdCB0c3QtbWtmaWZvYXQgdHN0LXR0eW5hbWVfciBidWctZnR3NSBcCisrCQkgICB0c3QtbWtub2RhdCB0c3QtbWtmaWZvYXQgdHN0LXR0eW5hbWVfciBcCisgCQkgICB0c3QtcG9zaXhfZmFsbG9jYXRlCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0ZUUkFWRVJTRSkgKz0gYnVnLWZ0dzEgYnVnLWZ0dzIgYnVnLWZ0dzMgYnVnLWZ0dzQgXAorKwkJCQkgICAgYnVnLWZ0dzUKKyAKKyBpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0ZUUkFWRVJTRSkpCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClmdHd0ZXN0Lm91dAorIGVuZGlmCisrZW5kaWYKKyAKKyBpbmNsdWRlIC4uL1J1bGVzCisgCitkaWZmIC0tZ2l0IGEvbGliaWRuL01ha2VmaWxlIGIvbGliaWRuL01ha2VmaWxlCitpbmRleCA5NDBmYTUyLi40M2FhZDBjIDEwMDY0NAorLS0tIGEvbGliaWRuL01ha2VmaWxlCisrKysgYi9saWJpZG4vTWFrZWZpbGUKK0BAIC0xNiw2ICsxNiw3IEBACisgIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgCisgIyBNYWtlZmlsZSBmb3IgbGliaWRuIHN1YmRpcmVjdG9yeSBvZiBHTlUgQyBMaWJyYXJ5LgorK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKyAKKyBzdWJkaXIJOj0gbGliaWRuCisgCitAQCAtMjMsOCArMjQsOCBAQCBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyByb3V0aW5lcyA9IGlkbi1zdHViCisgCistZXh0cmEtbGlicwkJPSBsaWJjaWRuCistZXh0cmEtbGlicy1vdGhlcnMJPSAkKGV4dHJhLWxpYnMpCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfSUROKSA9IGxpYmNpZG4KKytleHRyYS1saWJzLW90aGVycy15ID0gJChleHRyYS1saWJzLXkpCisgCisgbGliY2lkbi1yb3V0aW5lcyA6PSBwdW55Y29kZSB0b3V0ZjggbmZrYyBzdHJpbmdwcmVwIHJmYzM0NTQgcHJvZmlsZXMgaWRuYSBcCisgCQkgICAgaWNvbnZtZQorZGlmZiAtLWdpdCBhL2xpYmlkbi90b3V0ZjguYyBiL2xpYmlkbi90b3V0ZjguYworaW5kZXggYzdlNjdjYS4uNjJkZjQ3OCAxMDA2NDQKKy0tLSBhL2xpYmlkbi90b3V0ZjguYworKysrIGIvbGliaWRuL3RvdXRmOC5jCitAQCAtMzMsNiArMzMsMTEgQEAKKyAvKiBHZXQgc3RybGVuLiAqLworICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKysvKiBHZXQgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrI2VuZGlmCisrCisgLyogR2V0IGljb252X3N0cmluZy4gKi8KKyAjaW5jbHVkZSAiaWNvbnZtZS5oIgorIAorQEAgLTQ3LDcgKzUyLDExIEBACisgI2VuZGlmCisgCisgI2lmZGVmIF9MSUJDCistIyBkZWZpbmUgc3RyaW5ncHJlcF9sb2NhbGVfY2hhcnNldCgpIG5sX2xhbmdpbmZvIChDT0RFU0VUKQorKyMgaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrIyAgZGVmaW5lIHN0cmluZ3ByZXBfbG9jYWxlX2NoYXJzZXQoKSBubF9sYW5naW5mbyAoQ09ERVNFVCkKKysjIGVsc2UKKysjICBkZWZpbmUgc3RyaW5ncHJlcF9sb2NhbGVfY2hhcnNldCgpICJBTlNJX1gzLjQtMTk2OCIKKysjIGVuZGlmCisgI2Vsc2UKKyAvKioKKyAgKiBzdHJpbmdwcmVwX2xvY2FsZV9jaGFyc2V0IC0gcmV0dXJuIGNoYXJzZXQgdXNlZCBpbiBjdXJyZW50IGxvY2FsZQorZGlmZiAtLWdpdCBhL2xpYmlvL01ha2VmaWxlIGIvbGliaW8vTWFrZWZpbGUKK2luZGV4IDdiM2JjZjkuLjI3YzkxODYgMTAwNjQ0CistLS0gYS9saWJpby9NYWtlZmlsZQorKysrIGIvbGliaW8vTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3BlY2lmaWMgbWFrZWZpbGUgZm9yIGxpYmlvLgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGxpYmlvCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMjcsMTYgKzI5LDEzIEBAIGhlYWRlcnMJOj0gc3RkaW8uaCBsaWJpby5oIF9HX2NvbmZpZy5oIGJpdHMvc3RkaW8uaCBiaXRzL3N0ZGlvLWxvY2suaCBcCisgCisgcm91dGluZXMJOj0JCQkJCQkJICAgICAgXAorIAlmaWxlZG9hbGxvYyBpb2ZjbG9zZSBpb2Zkb3BlbiBpb2ZmbHVzaCBpb2ZnZXRwb3MgaW9mZ2V0cyBpb2ZvcGVuICAgICAgXAorLQlpb2ZvcG5jb29rIGlvZnB1dHMgaW9mcmVhZCBpb2ZzZXRwb3MgaW9mdGVsbCB3ZmlsZWRvYWxsb2MJICAgICAgXAorKwlpb2ZvcG5jb29rIGlvZnB1dHMgaW9mcmVhZCBpb2ZzZXRwb3MgaW9mdGVsbAkJCSAgICAgIFwKKyAJaW9md3JpdGUgaW9nZXRkZWxpbSBpb2dldGxpbmUgaW9nZXRzIGlvcGFkbiBpb3BvcGVuIGlvcHV0cwkgICAgICBcCisgCWlvc2Vla29mZiBpb3NlZWtwb3MgaW9zZXRidWZmZXIgaW9zZXR2YnVmIGlvdW5nZXRjCQkgICAgICBcCisgCWlvdnNwcmludGYgaW92c3NjYW5mCQkJCQkJICAgICAgXAorIAlpb2ZnZXRwb3M2NCBpb2ZvcGVuNjQgaW9mc2V0cG9zNjQJCQkJICAgICAgXAorLQlmcHV0d2MgZnB1dHdjX3UgZ2V0d2MgZ2V0d2NfdSBnZXR3Y2hhciBnZXR3Y2hhcl91IGlvZmdldHdzIGlvZmdldHdzX3UgXAorLQlpb2ZwdXR3cyBpb2ZwdXR3c191IGlvZ2V0d2xpbmUgaW93cGFkbiBpb3VuZ2V0d2MgcHV0d2MgcHV0d2NfdQkgICAgICBcCistCXB1dHdjaGFyIHB1dHdjaGFyX3UgcHV0Y2hhciBwdXRjaGFyX3UgZndwcmludGYgc3dwcmludGYgdndwcmludGYgICAgICBcCistCXdwcmludGYgd3NjYW5mIGZ3c2NhbmYgdndzY2FuZiB2c3dwcmludGYgaW92c3dzY2FuZiBzd3NjYW5mIHdnZW5vcHMgICBcCistCXdzdHJvcHMgd2ZpbGVvcHMgaW9md2lkZSBmd2lkZSB3bWVtc3RyZWFtCQkJICAgICAgXAorKwlwdXRjaGFyIHB1dGNoYXJfdQkJCQkJCSAgICAgIFwKKysJaW9md2lkZQkJCQkJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAJY2xlYXJlcnIgZmVvZiBmZXJyb3IgZmlsZW5vIGZwdXRjIGZyZW9wZW4gZnNlZWsgZ2V0YyBnZXRjaGFyCSAgICAgIFwKKyAJbWVtc3RyZWFtIHBjbG9zZSBwdXRjIHB1dGNoYXIgcmV3aW5kIHNldGJ1ZiBzZXRsaW5lYnVmIHZhc3ByaW50ZiAgICAgIFwKK0BAIC00OCwyNCArNDcsNDkgQEAgcm91dGluZXMJOj0JCQkJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAJbGliY19mYXRhbCBmbWVtb3BlbiBvbGRmbWVtb3BlbgorIAorLXRlc3RzID0gdHN0X3N3cHJpbnRmIHRzdF93cHJpbnRmIHRzdF9zd3NjYW5mIHRzdF93c2NhbmYgdHN0X2dldHdjIHRzdF9wdXR3YyAgIFwKKy0JdHN0X3dwcmludGYyIHRzdC13aWRldGV4dCB0ZXN0LWZtZW1vcGVuIHRzdC1leHQgdHN0LWV4dDIgXAorLQl0c3QtZmdldHdzIHRzdC11bmdldHdjMSB0c3QtdW5nZXR3YzIgdHN0LXN3c2NhbmYgdHN0LXNzY2FuZgkgICAgICBcCistCXRzdC1tbWFwLXNldHZidWYgYnVnLXVuZ2V0d2MxIGJ1Zy11bmdldHdjMiB0c3QtYXRpbWUgdHN0LWVvZiAgICAgICAgICBcCistCXRzdC1mcmVvcGVuIGJ1Zy1yZXdpbmQgYnVnLXJld2luZDIgYnVnLXVuZ2V0YyBidWctZnNlZWsgXAorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpICs9CQkJCSAgICAgIFwKKysJd2ZpbGVkb2FsbG9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJaW93cGFkbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJc3dwcmludGYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJdnN3cHJpbnRmIGlvdnN3c2NhbmYgc3dzY2FuZiB3Z2Vub3BzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJd3N0cm9wcyB3ZmlsZW9wcyB3bWVtc3RyZWFtCisrcm91dGluZXMtJChjYWxsIG9wdGlvbi1kaXNhYmxlZCwgT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpICs9CSAgICAgIFwKKysJd2R1bW15ZmlsZW9wcworK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pICs9CQkJCSAgICAgIFwKKysJZnB1dHdjIGZwdXR3Y191IGdldHdjIGdldHdjX3UgZ2V0d2NoYXIgZ2V0d2NoYXJfdSBpb2ZnZXR3cyBpb2ZnZXR3c191IFwKKysJaW9mcHV0d3MgaW9mcHV0d3NfdSBpb2dldHdsaW5lIGlvdW5nZXR3YyBwdXR3YyBwdXR3Y191ICAgICAgICAgICAgICAgIFwKKysJcHV0d2NoYXIgcHV0d2NoYXJfdSBmd3ByaW50ZiB2d3ByaW50ZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJd3ByaW50ZiB3c2NhbmYgZndzY2FuZiB2d3NjYW5mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJZndpZGUKKysKKyt0ZXN0cyA9IHRlc3QtZm1lbW9wZW4gdHN0LWV4dCB0c3QtZXh0MiBcCisrCXRzdC1tbWFwLXNldHZidWYgdHN0LWF0aW1lIHRzdC1lb2YgXAorKwl0c3QtZnJlb3BlbiBidWctdW5nZXRjIGJ1Zy1mc2VlayBcCisgCXRzdC1tbWFwLWVvZnN5bmMgdHN0LW1tYXAtZmZsdXNoc3luYyBidWctbW1hcC1mZmx1c2ggXAorLQl0c3QtbW1hcDItZW9mc3luYyB0c3QtbW1hcC1vZmZlbmQgYnVnLWZvcGVuYSsgYnVnLXdmZmx1c2ggXAorLQlidWctdW5nZXRjMiBidWctZnRlbGwgYnVnLXVuZ2V0YzMgYnVnLXVuZ2V0YzQgdHN0LWZvcGVubG9jMiBcCisrCXRzdC1tbWFwMi1lb2ZzeW5jIHRzdC1tbWFwLW9mZmVuZCBidWctZm9wZW5hKyBcCisrCWJ1Zy11bmdldGMyIGJ1Zy11bmdldGMzIGJ1Zy11bmdldGM0IFwKKyAJdHN0LW1lbXN0cmVhbTEgdHN0LW1lbXN0cmVhbTIgXAorLQl0c3Qtd21lbXN0cmVhbTEgdHN0LXdtZW1zdHJlYW0yIFwKKy0JYnVnLW1lbXN0cmVhbTEgYnVnLXdtZW1zdHJlYW0xIFwKKy0JdHN0LXNldHZidWYxIHRzdC1wb3BlbjEgdHN0LWZnZXR3YyBidWctd3NldHBvcyB0c3QtZnNlZWsgXAorLQl0c3QtZndyaXRlLWVycm9yIHRzdC1mdGVsbC1wYXJ0aWFsLXdpZGUgdHN0LWZ0ZWxsLWFjdGl2ZS1oYW5kbGVyIFwKKy0JdHN0LWZ0ZWxsLWFwcGVuZCB0c3QtZnB1dHdzCisrCWJ1Zy1tZW1zdHJlYW0xIHRzdC1wb3BlbjEgdHN0LWZ3cml0ZS1lcnJvciBcCisrCXRzdC1mdGVsbC1hY3RpdmUtaGFuZGxlciB0c3QtZnRlbGwtYXBwZW5kCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCSs9IHRzdC1zd3NjYW5mIHRzdC1mZ2V0d3MgdHN0LXNldHZidWYxIFwKKysJdHN0LXVuZ2V0d2MxIHRzdC11bmdldHdjMiBidWctZnRlbGwgYnVnLXVuZ2V0d2MyIFwKKysJdHN0LXdpZGV0ZXh0IHRzdC1mcHV0d3MKKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKSBcCisrCSs9IGJ1Zy1yZXdpbmQgYnVnLXJld2luZDIgYnVnLXVuZ2V0d2MxIFwKKysJYnVnLXdmZmx1c2ggYnVnLXdtZW1zdHJlYW0xIHRzdC1mb3BlbmxvYzIgXAorKwl0c3RfZ2V0d2MgXAorKwl0c3RfcHV0d2MgdHN0X3dwcmludGYgdHN0X3dwcmludGYyIHRzdF93c2NhbmYgXAorKwl0c3QtZmdldHdjIGJ1Zy13c2V0cG9zIHRzdC1mc2VlayB0c3QtZnRlbGwtcGFydGlhbC13aWRlCisrdGVzdHMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgXAorKwkrPSB0c3Rfc3dwcmludGYgdHN0X3N3c2NhbmYgXAorKwl0c3Qtc3NjYW5mIFwKKysJdHN0LXdtZW1zdHJlYW0xIHRzdC13bWVtc3RyZWFtMgorKworIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgIyBBZGQgdGVzdC1mb3BlbmxvYyBvbmx5IGlmIHNoYXJlZCBsaWJyYXJ5IGlzIGVuYWJsZWQgc2luY2UgaXQgZGVwZW5kcyBvbgorICMgc2hhcmVkIGxvY2FsZWRhdGEgb2JqZWN0cy4KKy10ZXN0cyArPSB0c3QtZm9wZW5sb2MKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICs9IHRzdC1mb3BlbmxvYworIGVuZGlmCisgdGVzdC1zcmNzID0gdGVzdC1mcmVvcGVuCisgCitAQCAtMTY0LDEzICsxODgsMTcgQEAgc2hhcmVkLW9ubHktcm91dGluZXMgPSBvbGRpb2ZvcGVuIG9sZGlvZmRvcGVuIG9sZGlvZmNsb3NlIG9sZGZpbGVvcHMJXAorIAkJICAgICAgIG9sZGlvZnNldHBvczY0CisgCisgaWZlcSAoJChydW4tYnVpbHQtdGVzdHMpLHllcykKKytpZmVxICh5LCQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pKQorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpdGVzdC1mcmVvcGVuLm91dAorK2VuZGlmCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpKQorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgIyBSdW4gdHN0LWZvcGVubG9jLWNtcC5vdXQgYW5kIHRzdC1vcGVubG9jLW1lbS5vdXQgb25seSBpZiBzaGFyZWQKKyAjIGxpYnJhcnkgaXMgZW5hYmxlZCBzaW5jZSB0aGV5IGRlcGVuZCBvbiB0c3QtZm9wZW5sb2Mub3V0LgorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpdHN0LWZvcGVubG9jLWNtcC5vdXQgJChvYmpwZngpdHN0LWZvcGVubG9jLW1lbS5vdXQKKyBlbmRpZgorIGVuZGlmCisrZW5kaWYKKyAKKyBpbmNsdWRlIC4uL1J1bGVzCisgCitkaWZmIC0tZ2l0IGEvbGliaW8vX19mcHVyZ2UuYyBiL2xpYmlvL19fZnB1cmdlLmMKK2luZGV4IDA2NWNmNjEuLmUzMmEzZTkgMTAwNjQ0CistLS0gYS9saWJpby9fX2ZwdXJnZS5jCisrKysgYi9saWJpby9fX2ZwdXJnZS5jCitAQCAtMjEsNyArMjEsNyBAQAorIHZvaWQKKyBfX2ZwdXJnZSAoRklMRSAqZnApCisgeworLSAgaWYgKGZwLT5fbW9kZSA+IDApCisrICBpZiAoX0lPX2lzX3dpZGUgKGZwKSkKKyAgICAgeworICAgICAgIC8qIFdpZGUtY2hhciBzdHJlYW0uICAqLworICAgICAgIGlmIChfSU9faW5fYmFja3VwIChmcCkpCitkaWZmIC0tZ2l0IGEvbGliaW8vZmlsZW9wcy5jIGIvbGliaW8vZmlsZW9wcy5jCitpbmRleCBjYmNkNmY1Li4xOWU0M2MyIDEwMDY0NAorLS0tIGEvbGliaW8vZmlsZW9wcy5jCisrKysgYi9saWJpby9maWxlb3BzLmMKK0BAIC0zOSw2ICszOSw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2lmIF9MSUJDCisgIyBpbmNsdWRlICIuLi93Y3NtYnMvd2NzbWJzbG9hZC5oIgorQEAgLTE3Myw3ICsxNzQsNyBAQCBfSU9fbmV3X2ZpbGVfY2xvc2VfaXQgKF9JT19GSUxFICpmcCkKKyAKKyAgIC8qIEZyZWUgYnVmZmVyLiAqLworICNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgX0dMSUJDUFBfVVNFX1dDSEFSX1QKKy0gIGlmIChmcC0+X21vZGUgPiAwKQorKyAgaWYgKF9JT19pc193aWRlIChmcCkpCisgICAgIHsKKyAgICAgICBpZiAoX0lPX2hhdmVfd2JhY2t1cCAoZnApKQorIAlfSU9fZnJlZV93YmFja3VwX2FyZWEgKGZwKTsKK0BAIC0zNDgsNiArMzQ5LDcgQEAgX0lPX25ld19maWxlX2ZvcGVuIChfSU9fRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlLAorICAgICAgIGNzID0gc3Ryc3RyIChsYXN0X3JlY29nbml6ZWQgKyAxLCAiLGNjcz0iKTsKKyAgICAgICBpZiAoY3MgIT0gTlVMTCkKKyAJeworKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgCSAgLyogWWVwLiAgTG9hZCB0aGUgYXBwcm9wcmlhdGUgY29udmVyc2lvbnMgYW5kIHNldCB0aGUgb3JpZW50YXRpb24KKyAJICAgICB0byB3aWRlLiAgKi8KKyAJICBzdHJ1Y3QgZ2NvbnZfZmN0cyBmY3RzOworQEAgLTQxOCw2ICs0MjAsMTIgQEAgX0lPX25ld19maWxlX2ZvcGVuIChfSU9fRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlLAorIAorIAkgIC8qIFNldCB0aGUgbW9kZSBub3cuICAqLworIAkgIHJlc3VsdC0+X21vZGUgPSAxOworKyNlbHNlCisrICAgICAgICAgIC8qIFRyZWF0IHRoaXMgYXMgaWYgd2UgY291bGRuJ3QgZmluZCB0aGUgZ2l2ZW4gY2hhcmFjdGVyIHNldC4gICovCisrICAgICAgICAgICh2b2lkKSBfSU9fZmlsZV9jbG9zZV9pdCAoZnApOworKyAgICAgICAgICBfX3NldF9lcnJubyAoRUlOVkFMKTsKKysgICAgICAgICAgcmV0dXJuIE5VTEw7CisrI2VuZGlmCisgCX0KKyAgICAgfQorIAorZGlmZiAtLWdpdCBhL2xpYmlvL2lvZndpZGUuYyBiL2xpYmlvL2lvZndpZGUuYworaW5kZXggMGMxNzVkMS4uM2U5ZjUyYiAxMDA2NDQKKy0tLSBhL2xpYmlvL2lvZndpZGUuYworKysrIGIvbGliaW8vaW9md2lkZS5jCitAQCAtMjYsNiArMjYsNyBAQAorIAorICNpbmNsdWRlIDxsaWJpb1AuaD4KKyAjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgIyBpbmNsdWRlIDxkbGZjbi5oPgorICMgaW5jbHVkZSA8d2NoYXIuaD4KKyAjZW5kaWYKK0BAIC00Myw2ICs0NCw4IEBACisgI2VuZGlmCisgCisgCisrI2lmICEgZGVmaW5lZCBfTElCQyB8fCBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisrCisgLyogUHJvdG90eXBlcyBvZiBsaWJpbydzIGNvZGVjdnQgZnVuY3Rpb25zLiAgKi8KKyBzdGF0aWMgZW51bSBfX2NvZGVjdnRfcmVzdWx0IGRvX291dCAoc3RydWN0IF9JT19jb2RlY3Z0ICpjb2RlY3Z0LAorIAkJCQkgICAgIF9fbWJzdGF0ZV90ICpzdGF0ZXAsCitAQCAtNDk5LDMgKzUwMiwyNiBAQCBkb19tYXhfbGVuZ3RoIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKmNvZGVjdnQpCisgICByZXR1cm4gTUJfQ1VSX01BWDsKKyAjZW5kaWYKKyB9CisrCisrI2Vsc2UKKysvKiBPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiBpcyBkaXNhYmxlZC4gICovCisrCisrI3VuZGVmIF9JT19md2lkZQorK2ludAorK19JT19md2lkZSAoZnAsIG1vZGUpCisrICAgICBfSU9fRklMRSAqZnA7CisrICAgICBpbnQgbW9kZTsKKyt7CisrICAvKiBEaWUgaGVscGZ1bGx5IGlmIHRoZSB1c2VyIHRyaWVzIHRvIGNyZWF0ZSBhIHdpZGUgc3RyZWFtOyBJCisrICAgICBkaXNiZWxpZXZlIHRoYXQgbW9zdCB1c2VycyBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIGZyb20KKysgICAgICdmd2lkZSAoZnAsIDEpJy4gICovCisrICBhc3NlcnQgKG1vZGUgPD0gMCk7CisrCisrICAvKiBXZSBjYW4gb25seSBtYWtlIHN0cmVhbXMgYnl0ZS1vcmllbnRlZCwgd2hpY2ggaXMgdHJpdmlhbC4gICovCisrICBpZiAobW9kZSA8IDApCisrICAgIGZwLT5fbW9kZSA9IC0xOworKworKyAgcmV0dXJuIGZwLT5fbW9kZTsKKyt9CisrCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvbGliaW8vaW9zZWVrb2ZmLmMgYi9saWJpby9pb3NlZWtvZmYuYworaW5kZXggMTE3NjVjZi4uMTVkNjIzMCAxMDA2NDQKKy0tLSBhL2xpYmlvL2lvc2Vla29mZi5jCisrKysgYi9saWJpby9pb3NlZWtvZmYuYworQEAgLTYwLDcgKzYwLDcgQEAgX0lPX3NlZWtvZmZfdW5sb2NrZWQgKGZwLCBvZmZzZXQsIGRpciwgbW9kZSkKKyAJICBlbHNlCisgCSAgICBhYm9ydCAoKTsKKyAJfQorLSAgICAgIGlmIChfSU9fZndpZGUgKGZwLCAwKSA8IDApCisrICAgICAgaWYgKCEgX0lPX2lzX3dpZGUgKGZwKSkKKyAJX0lPX2ZyZWVfYmFja3VwX2FyZWEgKGZwKTsKKyAgICAgICBlbHNlCisgCV9JT19mcmVlX3diYWNrdXBfYXJlYSAoZnApOworZGlmZiAtLWdpdCBhL2xpYmlvL2lvc2Vla3Bvcy5jIGIvbGliaW8vaW9zZWVrcG9zLmMKK2luZGV4IGE3NjUyYTEuLjY5MzhiNjggMTAwNjQ0CistLS0gYS9saWJpby9pb3NlZWtwb3MuYworKysrIGIvbGliaW8vaW9zZWVrcG9zLmMKK0BAIC0zNSw3ICszNSw3IEBAIF9JT19zZWVrcG9zX3VubG9ja2VkIChmcCwgcG9zLCBtb2RlKQorICAgLyogSWYgd2UgaGF2ZSBhIGJhY2t1cCBidWZmZXIsIGdldCByaWQgb2YgaXQsIHNpbmNlIHRoZSBfX3NlZWtvZmYKKyAgICAgIGNhbGxiYWNrIG1heSBub3Qga25vdyB0byBkbyB0aGUgcmlnaHQgdGhpbmcgYWJvdXQgaXQuCisgICAgICBUaGlzIG1heSBiZSBvdmVyLWtpbGwsIGJ1dCBpdCdsbCBkbyBmb3Igbm93LiBUT0RPICovCistICBpZiAoX0lPX2Z3aWRlIChmcCwgMCkgPD0gMCkKKysgIGlmICghIF9JT19pc193aWRlIChmcCkpCisgICAgIHsKKyAgICAgICBpZiAoX0lPX2hhdmVfYmFja3VwIChmcCkpCisgCV9JT19mcmVlX2JhY2t1cF9hcmVhIChmcCk7CitkaWZmIC0tZ2l0IGEvbGliaW8vaW9zZXRidWZmZXIuYyBiL2xpYmlvL2lvc2V0YnVmZmVyLmMKK2luZGV4IDBhNDFjMTAuLjNkOTlmYTAgMTAwNjQ0CistLS0gYS9saWJpby9pb3NldGJ1ZmZlci5jCisrKysgYi9saWJpby9pb3NldGJ1ZmZlci5jCitAQCAtMjQsNiArMjQsOCBAQAorICAgIFRoaXMgZXhjZXB0aW9uIGFwcGxpZXMgdG8gY29kZSByZWxlYXNlZCBieSBpdHMgY29weXJpZ2h0IGhvbGRlcnMKKyAgICBpbiBmaWxlcyBjb250YWluaW5nIHRoZSBleGNlcHRpb24uICAqLworIAorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKworICNpbmNsdWRlICJsaWJpb1AuaCIKKyAKKyB2b2lkCitAQCAtMzgsOSArNDAsMTEgQEAgX0lPX3NldGJ1ZmZlciAoZnAsIGJ1Ziwgc2l6ZSkKKyAgIGlmICghYnVmKQorICAgICBzaXplID0gMDsKKyAgICh2b2lkKSBfSU9fU0VUQlVGIChmcCwgYnVmLCBzaXplKTsKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorICAgaWYgKF9JT192dGFibGVfb2Zmc2V0IChmcCkgPT0gMCAmJiBmcC0+X21vZGUgPT0gMCAmJiBfSU9fQ0hFQ0tfV0lERSAoZnApKQorICAgICAvKiBXZSBhbHNvIGhhdmUgdG8gc2V0IHRoZSBidWZmZXIgdXNpbmcgdGhlIHdpZGUgY2hhciBmdW5jdGlvbi4gICovCisgICAgICh2b2lkKSBfSU9fV1NFVEJVRiAoZnAsIGJ1Ziwgc2l6ZSk7CisrI2VuZGlmIC8qIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgKi8KKyAgIF9JT19yZWxlYXNlX2xvY2sgKGZwKTsKKyB9CisgbGliY19oaWRkZW5fZGVmIChfSU9fc2V0YnVmZmVyKQorZGlmZiAtLWdpdCBhL2xpYmlvL2xpYmlvUC5oIGIvbGliaW8vbGliaW9QLmgKK2luZGV4IDBmMTZlMmQuLmQyNjI2ZDYgMTAwNjQ0CistLS0gYS9saWJpby9saWJpb1AuaAorKysrIGIvbGliaW8vbGliaW9QLmgKK0BAIC00NCw2ICs0NCwxMCBAQAorIC8qIyBpbmNsdWRlIDxjb210aHJlYWQuaD4qLworICNlbmRpZgorIAorKyNpZiBkZWZpbmVkIF9MSUJDCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKyNlbmRpZgorKworICNpbmNsdWRlIDxtYXRoX2xkYmxfb3B0Lmg+CisgCisgI2luY2x1ZGUgImlvbGliaW8uaCIKK0BAIC01MjMsOCArNTI3LDIwIEBAIGV4dGVybiB2b2lkIF9JT19vbGRfaW5pdCAoX0lPX0ZJTEUgKmZwLCBpbnQgZmxhZ3MpIF9fVEhST1c7CisgCisgCisgI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBfR0xJQkNQUF9VU0VfV0NIQVJfVAorKworKy8qIF9JT19pc193aWRlIChmcCkgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvICdfSU9fZndpZGUgKGZwLCAwKSA+IDAnLAorKyAgIGV4Y2VwdCB0aGF0IHdoZW4gT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgaXMgZGlzYWJsZWQsIGl0CisrICAgZXhwYW5kcyB0byBhIGNvbnN0YW50LCBhbGxvd2luZyB0aGUgY29tcGlsZXIgdG8gcmVhbGl6ZSB0aGF0IGl0IGNhbgorKyAgIGVsaW1pbmF0ZSBjb2RlIHRoYXQgcmVmZXJlbmNlcyB3aWRlIHN0cmVhbSBoYW5kbGluZyBmdW5jdGlvbnMuCisrICAgVGhpcywgaW4gdHVybiwgYWxsb3dzIHVzIHRvIG9taXQgdGhlbS4gICovCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKysjIGRlZmluZSBfSU9faXNfd2lkZShfZikgKChfZiktPl9tb2RlID4gMCkKKysjZWxzZQorKyMgZGVmaW5lIF9JT19pc193aWRlKF9mKSAoMCkKKysjZW5kaWYKKysKKyAjIGRlZmluZSBfSU9fZG9fZmx1c2goX2YpIFwKKy0gICgoX2YpLT5fbW9kZSA8PSAwCQkJCQkJCSAgICAgIFwKKysgICghIF9JT19pc193aWRlIChfZikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgPyBfSU9fZG9fd3JpdGUoX2YsIChfZiktPl9JT193cml0ZV9iYXNlLAkJCQkgICAgICBcCisgCQkgIChfZiktPl9JT193cml0ZV9wdHItKF9mKS0+X0lPX3dyaXRlX2Jhc2UpCQkgICAgICBcCisgICAgOiBfSU9fd2RvX3dyaXRlKF9mLCAoX2YpLT5fd2lkZV9kYXRhLT5fSU9fd3JpdGVfYmFzZSwJCSAgICAgIFwKK2RpZmYgLS1naXQgYS9saWJpby93ZHVtbXlmaWxlb3BzLmMgYi9saWJpby93ZHVtbXlmaWxlb3BzLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jMDE1MGI4CistLS0gL2Rldi9udWxsCisrKysgYi9saWJpby93ZHVtbXlmaWxlb3BzLmMKK0BAIC0wLDAgKzEsMTYxIEBACisrLyogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLgorKworKyAgIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIHlvdSBsaW5rIHRoZSBjb2RlIGluIHRoaXMgZmlsZSB3aXRoCisrICAgZmlsZXMgY29tcGlsZWQgd2l0aCBhIEdOVSBjb21waWxlciB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsCisrICAgdGhhdCBkb2VzIG5vdCBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKyAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdAorKyAgIGhvd2V2ZXIgaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZQorKyAgIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysgICBUaGlzIGV4Y2VwdGlvbiBhcHBsaWVzIHRvIGNvZGUgcmVsZWFzZWQgYnkgaXRzIGNvcHlyaWdodCBob2xkZXJzCisrICAgaW4gZmlsZXMgY29udGFpbmluZyB0aGUgZXhjZXB0aW9uLiAgKi8KKysKKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxsaWJpb1AuaD4KKysKKytzdGF0aWMgdm9pZCBfX1RIUk9XIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKQorK19JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAodm9pZCkKKyt7CisrICBzdGF0aWMgY29uc3QgY2hhciBlcnJzdHJbXQorKyAgICA9ICgiVGhlIGFwcGxpY2F0aW9uIHRyaWVkIHRvIHVzZSB3aWRlIGNoYXJhY3RlciBJL08sIGJ1dCBsaWJjLnNvIgorKyAgICAgICAiIHdhcyBjb21waWxlZFxuIgorKyAgICAgICAid2l0aCB0aGUgT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgb3B0aW9uIGdyb3VwIGRpc2FibGVkLlxuIik7CisrICBfX2xpYmNfd3JpdGUgKFNUREVSUl9GSUxFTk8sIGVycnN0ciwgc2l6ZW9mIChlcnJzdHIpIC0gMSk7CisrICBhYm9ydCAoKTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytfSU9fd2ZpbGVfZGlzYWJsZWRfdm9pZF9pbnQgKF9JT19GSUxFICpmcCwgaW50IHgpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgaW50CisrX0lPX3dmaWxlX2Rpc2FibGVkX2ludF9pbnQgKF9JT19GSUxFICpmcCwgaW50IHgpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgaW50CisrX0lPX3dmaWxlX2Rpc2FibGVkX2ludF9ub25lIChfSU9fRklMRSAqZnApCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgX0lPX3NpemVfdAorK19JT193ZmlsZV9kaXNhYmxlZF94c3B1dG4gKF9JT19GSUxFICpmcCwgY29uc3Qgdm9pZCAqZGF0YSwgX0lPX3NpemVfdCBuKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIF9JT19zaXplX3QKKytfSU9fd2ZpbGVfZGlzYWJsZWRfeHNnZXRuIChfSU9fRklMRSAqZnAsIHZvaWQgKmRhdGEsIF9JT19zaXplX3QgbikKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBfSU9fb2ZmNjRfdAorK19JT193ZmlsZV9kaXNhYmxlZF9zZWVrb2ZmIChfSU9fRklMRSAqZnAsIF9JT19vZmY2NF90IG9mZiwgaW50IGRpciwgaW50IG1vZGUpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgX0lPX29mZjY0X3QKKytfSU9fd2ZpbGVfZGlzYWJsZWRfc2Vla3BvcyAoX0lPX0ZJTEUgKmZwLCBfSU9fb2ZmNjRfdCBwb3MsIGludCBmbGFncykKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBfSU9fRklMRSAqCisrX0lPX3dmaWxlX2Rpc2FibGVkX3NldGJ1ZiAoX0lPX0ZJTEUgKmZwLCBjaGFyICpidWZmZXIsIF9JT19zc2l6ZV90IGxlbmd0aCkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBfSU9fc3NpemVfdAorK19JT193ZmlsZV9kaXNhYmxlZF9yZWFkIChfSU9fRklMRSAqZnAsIHZvaWQgKmJ1ZmZlciwgX0lPX3NzaXplX3QgbGVuZ3RoKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIF9JT19zc2l6ZV90CisrX0lPX3dmaWxlX2Rpc2FibGVkX3dyaXRlIChfSU9fRklMRSAqZnAsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgX0lPX3NzaXplX3QgbGVuZ3RoKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIF9JT19vZmY2NF90CisrX0lPX3dmaWxlX2Rpc2FibGVkX3NlZWsgKF9JT19GSUxFICpmcCwgX0lPX29mZjY0X3Qgb2Zmc2V0LCBpbnQgbW9kZSkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBpbnQKKytfSU9fd2ZpbGVfZGlzYWJsZWRfY2xvc2UgKF9JT19GSUxFICpmcCkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBpbnQKKytfSU9fd2ZpbGVfZGlzYWJsZWRfc3RhdCAoX0lPX0ZJTEUgKmZwLCB2b2lkICpidWYpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgaW50CisrX0lPX3dmaWxlX2Rpc2FibGVkX3Nob3dtYW55YyAoX0lPX0ZJTEUgKmZwKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytfSU9fd2ZpbGVfZGlzYWJsZWRfaW1idWUgKF9JT19GSUxFICpmcCwgdm9pZCAqbG9jYWxlKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBfSU9fanVtcF90IF9JT193ZmlsZV9qdW1wc19kaXNhYmxlZCA9CisreworKyAgSlVNUF9JTklUX0RVTU1ZLAorKyAgSlVNUF9JTklUKGZpbmlzaCwgX0lPX3dmaWxlX2Rpc2FibGVkX3ZvaWRfaW50KSwKKysgIEpVTVBfSU5JVChvdmVyZmxvdywgX0lPX3dmaWxlX2Rpc2FibGVkX2ludF9pbnQpLAorKyAgSlVNUF9JTklUKHVuZGVyZmxvdywgX0lPX3dmaWxlX2Rpc2FibGVkX2ludF9ub25lKSwKKysgIEpVTVBfSU5JVCh1ZmxvdywgX0lPX3dmaWxlX2Rpc2FibGVkX2ludF9ub25lKSwKKysgIEpVTVBfSU5JVChwYmFja2ZhaWwsIF9JT193ZmlsZV9kaXNhYmxlZF9pbnRfaW50KSwKKysgIEpVTVBfSU5JVCh4c3B1dG4sIF9JT193ZmlsZV9kaXNhYmxlZF94c3B1dG4pLAorKyAgSlVNUF9JTklUKHhzZ2V0biwgX0lPX3dmaWxlX2Rpc2FibGVkX3hzZ2V0biksCisrICBKVU1QX0lOSVQoc2Vla29mZiwgX0lPX3dmaWxlX2Rpc2FibGVkX3NlZWtvZmYpLAorKyAgSlVNUF9JTklUKHNlZWtwb3MsIF9JT193ZmlsZV9kaXNhYmxlZF9zZWVrcG9zKSwKKysgIEpVTVBfSU5JVChzZXRidWYsIF9JT193ZmlsZV9kaXNhYmxlZF9zZXRidWYpLAorKyAgSlVNUF9JTklUKHN5bmMsIF9JT193ZmlsZV9kaXNhYmxlZF9pbnRfbm9uZSksCisrICBKVU1QX0lOSVQoZG9hbGxvY2F0ZSwgX0lPX3dmaWxlX2Rpc2FibGVkX2ludF9ub25lKSwKKysgIEpVTVBfSU5JVChyZWFkLCBfSU9fd2ZpbGVfZGlzYWJsZWRfcmVhZCksCisrICBKVU1QX0lOSVQod3JpdGUsIF9JT193ZmlsZV9kaXNhYmxlZF93cml0ZSksCisrICBKVU1QX0lOSVQoc2VlaywgX0lPX3dmaWxlX2Rpc2FibGVkX3NlZWspLAorKyAgSlVNUF9JTklUKGNsb3NlLCBfSU9fd2ZpbGVfZGlzYWJsZWRfY2xvc2UpLAorKyAgSlVNUF9JTklUKHN0YXQsIF9JT193ZmlsZV9kaXNhYmxlZF9zdGF0KSwKKysgIEpVTVBfSU5JVChzaG93bWFueWMsIF9JT193ZmlsZV9kaXNhYmxlZF9zaG93bWFueWMpLAorKyAgSlVNUF9JTklUKGltYnVlLCBfSU9fd2ZpbGVfZGlzYWJsZWRfaW1idWUpCisrfTsKKysKKytzdHJvbmdfYWxpYXMgKF9JT193ZmlsZV9qdW1wc19kaXNhYmxlZCwgX0lPX3dmaWxlX2p1bXBzKQorK2xpYmNfaGlkZGVuX2RhdGFfZGVmIChfSU9fd2ZpbGVfanVtcHMpCisrc3Ryb25nX2FsaWFzIChfSU9fd2ZpbGVfanVtcHNfZGlzYWJsZWQsIF9JT193ZmlsZV9qdW1wc19tbWFwKQorK3N0cm9uZ19hbGlhcyAoX0lPX3dmaWxlX2p1bXBzX2Rpc2FibGVkLCBfSU9fd2ZpbGVfanVtcHNfbWF5YmVfbW1hcCkKK2RpZmYgLS1naXQgYS9sb2NhbGUvQy1jdHlwZS5jIGIvbG9jYWxlL0MtY3R5cGUuYworaW5kZXggYWE1ZjE5Zi4uMDZiZTA4MSAxMDA2NDQKKy0tLSBhL2xvY2FsZS9DLWN0eXBlLmMKKysrKyBiL2xvY2FsZS9DLWN0eXBlLmMKK0BAIC0xOSw4ICsxOSwxMSBAQAorICNpbmNsdWRlICJsb2NhbGVpbmZvLmgiCisgI2luY2x1ZGUgPGVuZGlhbi5oPgorICNpbmNsdWRlIDxzdGRpbnQuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgI2luY2x1ZGUgIkMtdHJhbnNsaXQuaCIKKysjZW5kaWYKKyAKKyAvKiBUaGlzIHRhYmxlJ3MgZW50cmllcyBhcmUgdGFrZW4gZnJvbSBQT1NJWC4yIFRhYmxlIDItNgorICAgIGBgTENfQ1RZUEUgQ2F0ZWdvcnkgRGVmaW5pdGlvbiBpbiB0aGUgUE9TSVggTG9jYWxlJycuCitAQCAtNjM0LDYgKzYzNyw3IEBAIGNvbnN0IHN0cnVjdCBfX2xvY2FsZV9kYXRhIF9ubF9DX0xDX0NUWVBFIGF0dHJpYnV0ZV9oaWRkZW4gPQorICAgICB7IC53b3JkID0gTCc3JyB9LAorICAgICB7IC53b3JkID0gTCc4JyB9LAorICAgICB7IC53b3JkID0gTCc5JyB9LAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX1RBQl9TSVpFICovCisgICAgIHsgLndvcmQgPSBOVFJBTlNMSVQgfSwKKyAgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX0ZST01fSURYICovCitAQCAtNjQ0LDYgKzY0OCwyMiBAQCBjb25zdCBzdHJ1Y3QgX19sb2NhbGVfZGF0YSBfbmxfQ19MQ19DVFlQRSBhdHRyaWJ1dGVfaGlkZGVuID0KKyAgICAgeyAud3N0ciA9IHRyYW5zbGl0X3RvX2lkeCB9LAorICAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9fVEJMICovCisgICAgIHsgLndzdHIgPSAodWludDMyX3QgKikgdHJhbnNsaXRfdG9fdGJsIH0sCisrI2Vsc2UKKysgICAgLyogSWYgdGhlIGxvY2FsZSBjb2RlIGlzbid0IGVuYWJsZWQsIHdlIGRvbid0IGhhdmUgdGhlCisrICAgICAgIHRyYW5zbGl0ZXJhdGlvbiBjb2RlIGluIGljb252L2djb252X3RyYW5zLmMgYW55d2F5LCBzbyB0aGVyZSdzCisrICAgICAgIG5vIG5lZWQgZm9yIHRoZSB0cmFuc2xpdGVyYXRpb24gdGFibGVzIGhlcmUuICBXZSdsbCBmYWxsIGJhY2sKKysgICAgICAgb24gdGhlIGRlZmF1bHQgbWlzc2luZyByZXBsYWNlbWVudCwgJz8nLiAgKi8KKysgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX1RBQl9TSVpFICovCisrICAgIHsgLndvcmQgPSAwIH0sCisrICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCAqLworKyAgICB7IC53c3RyID0gTlVMTCB9LAorKyAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9UQkwgKi8KKysgICAgeyAud3N0ciA9IE5VTEwgfSwKKysgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX1RPX0lEWCAqLworKyAgICB7IC53c3RyID0gTlVMTCB9LAorKyAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9fVEJMICovCisrICAgIHsgLndzdHIgPSBOVUxMIH0sCisrI2VuZGlmCisgICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkdfTEVOICovCisgICAgIHsgLndvcmQgPSAxIH0sCisgICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkcgKi8KK2RpZmYgLS1naXQgYS9sb2NhbGUvTWFrZWZpbGUgYi9sb2NhbGUvTWFrZWZpbGUKK2luZGV4IGYxYjQzNDMuLjU5OWExYTkgMTAwNjQ0CistLS0gYS9sb2NhbGUvTWFrZWZpbGUKKysrKyBiL2xvY2FsZS9NYWtlZmlsZQorQEAgLTE4LDI3ICsxOCw0MyBAQAorICMKKyAjCU1ha2VmaWxlIGZvciBsb2NhbGVzLgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGxvY2FsZQorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorIGhlYWRlcnMJCT0gbG9jYWxlLmggYml0cy9sb2NhbGUuaCBsYW5naW5mby5oIHhsb2NhbGUuaAorLXJvdXRpbmVzCT0gc2V0bG9jYWxlIGZpbmRsb2NhbGUgbG9hZGxvY2FsZSBsb2FkYXJjaGl2ZSBcCistCQkgIGxvY2FsZWNvbnYgbmxfbGFuZ2luZm8gbmxfbGFuZ2luZm9fbCBtYl9jdXJfbWF4IFwKKy0JCSAgbmV3bG9jYWxlIGR1cGxvY2FsZSBmcmVlbG9jYWxlIHVzZWxvY2FsZQorLXRlc3RzCQk9IHRzdC1DLWxvY2FsZSB0c3QtbG9jbmFtZSB0c3QtZHVwbG9jYWxlCisrIyBjYXRuYW1lcyBpcyBuZWVkZWQgYnkgT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBhbmQgYnkgdGhlICdpbnRsJyBjb2RlLgorKyMgSWYgd2UgcHV0IHRoZSBsYXR0ZXIgaW4gYW4gb3B0aW9uIGdyb3VwLCB0b28sIHdlIGNhbiBvbWl0IGNhdG5hbWVzCisrIyB3aGVuIGJvdGggb3B0aW9uIGdyb3VwcyBhcmUgZGlzYWJsZWQuICBsaWJzdGRjKystdjMgbmVlZHMgbWJfY3VyX21heC4KKytyb3V0aW5lcy15ICAgICAgOj0gY2F0bmFtZXMgbWJfY3VyX21heAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkJKz0gc2V0bG9jYWxlIGZpbmRsb2NhbGUgbG9hZGxvY2FsZSBsb2FkYXJjaGl2ZSBcCisrCQkgICBsb2NhbGVjb252IG5sX2xhbmdpbmZvIG5sX2xhbmdpbmZvX2wgXAorKwkJICAgbmV3bG9jYWxlIGR1cGxvY2FsZSBmcmVlbG9jYWxlIHVzZWxvY2FsZQorK2lmbmVxICh5LCQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkpCisrcm91dGluZXMteQkrPSBkdW1teS1zZXRsb2NhbGUKKytlbmRpZgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgKz0gdHN0LUMtbG9jYWxlIHRzdC1sb2NuYW1lIHRzdC1kdXBsb2NhbGUKKyBjYXRlZ29yaWVzCT0gY3R5cGUgbWVzc2FnZXMgbW9uZXRhcnkgbnVtZXJpYyB0aW1lIHBhcGVyIG5hbWUgXAorIAkJICBhZGRyZXNzIHRlbGVwaG9uZSBtZWFzdXJlbWVudCBpZGVudGlmaWNhdGlvbiBjb2xsYXRlCistYXV4CQk9ICQoY2F0ZWdvcmllczolPWxjLSUpICQoY2F0ZWdvcmllczolPUMtJSkgU1lTX2xpYmMgQ19uYW1lIFwKKy0JCSAgeGxvY2FsZSBsb2NhbGVuYW1lIGdsb2JhbC1sb2NhbGUgY29sbC1sb29rdXAKKy1vdGhlcnMJCT0gbG9jYWxlZGVmIGxvY2FsZQorKyMgQy1tZXNzYWdlcyBiZWxvbmdzIGluIGFuIGludGwgb3B0aW9uIGdyb3VwLgorK2F1eC15CQk6PSBDLWN0eXBlIEMtdGltZSBcCisrCQkgICBTWVNfbGliYyBDX25hbWUgeGxvY2FsZSBnbG9iYWwtbG9jYWxlIGNvbGwtbG9va3VwCisrYXV4LSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkJKz0gJChmaWx0ZXItb3V0ICQoYXV4LXkpLCBcCisrCSAgICAgICAgICAgICAgICAgICAgICAgICQoY2F0ZWdvcmllczolPWxjLSUpICQoY2F0ZWdvcmllczolPUMtJSkpIFwKKysJICAgICAgICAgICBsb2NhbGVuYW1lCisrb3RoZXJzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgPSBsb2NhbGVkZWYgbG9jYWxlCisgI290aGVycy1zdGF0aWMJPSBsb2NhbGVkZWYgbG9jYWxlCistaW5zdGFsbC1iaW4JPSBsb2NhbGVkZWYgbG9jYWxlCistZXh0cmEtb2Jqcwk9ICQobG9jYWxlZGVmLW1vZHVsZXM6PS5vKSAkKGxvY2FsZWRlZi1hdXg6PS5vKSBcCisraW5zdGFsbC1iaW4JPSAkKG90aGVycy15KQorK2V4dHJhLW9ianMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCQk9ICQobG9jYWxlZGVmLW1vZHVsZXM6PS5vKSAkKGxvY2FsZWRlZi1hdXg6PS5vKSBcCisgCQkgICQobG9jYWxlLW1vZHVsZXM6PS5vKSAkKGxpYi1tb2R1bGVzOj0ubykKKyAKKy1leHRyYS1saWJzCT0gbGliQnJva2VuTG9jYWxlCistZXh0cmEtbGlicy1vdGhlcnMgPSAkKGV4dHJhLWxpYnMpCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpID0gbGliQnJva2VuTG9jYWxlCisrZXh0cmEtbGlicy1vdGhlcnMgPSAkKGV4dHJhLWxpYnMteSkKKyAKKyBsaWJCcm9rZW5Mb2NhbGUtcm91dGluZXMgPSBicm9rZW5fY3VyX21heAorIAorQEAgLTkzLDYgKzEwOSw5IEBAIENQUEZMQUdTLWxvY2FsZS1wcm9ncmFtcyA9IC1ETE9DQUxFX1BBVEg9JyQobG9jYWxlcGF0aCknIFwKKyBDRkxBR1MtY2hhcm1hcC5jID0gLVduby13cml0ZS1zdHJpbmdzIC1Xbm8tY2hhci1zdWJzY3JpcHRzCisgQ0ZMQUdTLWxvY2ZpbGUuYyA9IC1Xbm8td3JpdGUtc3RyaW5ncyAtV25vLWNoYXItc3Vic2NyaXB0cworIENGTEFHUy1jaGFybWFwLWRpci5jID0gLVduby13cml0ZS1zdHJpbmdzCisraWZuZXEgKHksJChPUFRJT05fRUdMSUJDX1NQQVdOKSkKKytDRkxBR1MtY2hhcm1hcC1kaXIuYyArPSAtRE5PX1VOQ09NUFJFU1MKKytlbmRpZgorIAorICMgU2V0IGxpYm9mLSogZm9yIGVhY2ggcm91dGluZS4KKyBjcHAtc3Jjcy1sZWZ0IDo9ICQobG9jYWxlZGVmLW1vZHVsZXMpICQobG9jYWxlZGVmLWF1eCkgJChsb2NhbGUtbW9kdWxlcykgXAorZGlmZiAtLWdpdCBhL2xvY2FsZS9jYXRuYW1lcy5jIGIvbG9jYWxlL2NhdG5hbWVzLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45ZmFkMzU3CistLS0gL2Rldi9udWxsCisrKysgYi9sb2NhbGUvY2F0bmFtZXMuYworQEAgLTAsMCArMSw0OCBAQAorKy8qIENvcHlyaWdodCAoQykgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlICJsb2NhbGVpbmZvLmgiCisrCisrLyogRGVmaW5lIGFuIGFycmF5IG9mIGNhdGVnb3J5IG5hbWVzIChhbHNvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcykuICAqLworK2NvbnN0IHVuaW9uIGNhdG5hbWVzdHJfdCBfbmxfY2F0ZWdvcnlfbmFtZXMgYXR0cmlidXRlX2hpZGRlbiA9CisrICB7CisrICAgIHsKKysjZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKKysgICAgICBjYXRlZ29yeV9uYW1lLAorKyNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKysjdW5kZWYgREVGSU5FX0NBVEVHT1JZCisrICAgIH0KKysgIH07CisrCisrY29uc3QgdWludDhfdCBfbmxfY2F0ZWdvcnlfbmFtZV9pZHhzW19fTENfTEFTVF0gYXR0cmlidXRlX2hpZGRlbiA9CisrICB7CisrI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCisrICAgIFtjYXRlZ29yeV0gPSBvZmZzZXRvZiAodW5pb24gY2F0bmFtZXN0cl90LCBDQVROQU1FTUYgKF9fTElORV9fKSksCisrI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorKyN1bmRlZiBERUZJTkVfQ0FURUdPUlkKKysgIH07CisrCisrLyogQW4gYXJyYXkgb2YgdGhlaXIgbGVuZ3RocywgZm9yIGNvbnZlbmllbmNlLiAgKi8KKytjb25zdCB1aW50OF90IF9ubF9jYXRlZ29yeV9uYW1lX3NpemVzW10gYXR0cmlidXRlX2hpZGRlbiA9CisrICB7CisrI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCisrICAgIFtjYXRlZ29yeV0gPSBzaXplb2YgKGNhdGVnb3J5X25hbWUpIC0gMSwKKysjaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCisrI3VuZGVmCURFRklORV9DQVRFR09SWQorKyAgICBbTENfQUxMXSA9IHNpemVvZiAoIkxDX0FMTCIpIC0gMQorKyAgfTsKK2RpZmYgLS1naXQgYS9sb2NhbGUvZHVtbXktc2V0bG9jYWxlLmMgYi9sb2NhbGUvZHVtbXktc2V0bG9jYWxlLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yMTk5NjRhCistLS0gL2Rldi9udWxsCisrKysgYi9sb2NhbGUvZHVtbXktc2V0bG9jYWxlLmMKK0BAIC0wLDAgKzEsMzMgQEAKKysvKiBDb3B5cmlnaHQgKEMpIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGxvY2FsZS5oPgorKworK2NoYXIgKgorK3NldGxvY2FsZSAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUpCisreworKyAgaWYgKCEgbG9jYWxlCisrICAgICAgfHwgbG9jYWxlWzBdID09ICdcMCcKKysgICAgICB8fCBzdHJjbXAgKGxvY2FsZSwgIkMiKSA9PSAwCisrICAgICAgfHwgc3RyY21wIChsb2NhbGUsICJQT1NJWCIpID09IDApCisrICAgIHJldHVybiAoY2hhciAqKSAiQyI7CisrICBlbHNlCisrICAgIHJldHVybiBOVUxMOworK30KKytsaWJjX2hpZGRlbl9kZWYgKHNldGxvY2FsZSkKK2RpZmYgLS1naXQgYS9sb2NhbGUvbG9jYWxlaW5mby5oIGIvbG9jYWxlL2xvY2FsZWluZm8uaAoraW5kZXggYmRhYjlmZS4uYTc1MTZjMCAxMDA2NDQKKy0tLSBhL2xvY2FsZS9sb2NhbGVpbmZvLmgKKysrKyBiL2xvY2FsZS9sb2NhbGVpbmZvLmgKK0BAIC0yMzIsNyArMjMyLDcgQEAgX19saWJjX3RzZF9kZWZpbmUgKGV4dGVybiwgX19sb2NhbGVfdCwgTE9DQUxFKQorICAgIHVudXNlZC4gIFdlIGNhbiBtYW5hZ2UgdGhpcyBwbGF5aW5nIHNvbWUgdHJpY2tzIHdpdGggd2VhayByZWZlcmVuY2VzLgorICAgIEJ1dCB3aXRoIHRocmVhZC1sb2NhbCBsb2NhbGUgc2V0dGluZ3MsIGl0IGJlY29tZXMgcXVpdGUgdW5nYWlubHkgdW5sZXNzCisgICAgd2UgY2FuIHVzZSBfX3RocmVhZCB2YXJpYWJsZXMuICBTbyBvbmx5IGluIHRoYXQgY2FzZSBkbyB3ZSBhdHRlbXB0IHRoaXMuICAqLworLSNpZm5kZWYgU0hBUkVECisrI2lmICFkZWZpbmVkIFNIQVJFRCAmJiAhZGVmaW5lZCBJTl9HTElCQ19MT0NBTEVERUYKKyAjIGluY2x1ZGUgPHRscy5oPgorICMgZGVmaW5lIE5MX0NVUlJFTlRfSU5ESVJFQ1QJMQorICNlbmRpZgorZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9jaGFybWFwLWRpci5jIGIvbG9jYWxlL3Byb2dyYW1zL2NoYXJtYXAtZGlyLmMKK2luZGV4IGNmN2FkZWEuLmVmM2I4MTEgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvY2hhcm1hcC1kaXIuYworKysrIGIvbG9jYWxlL3Byb2dyYW1zL2NoYXJtYXAtZGlyLmMKK0BAIC0xOSw3ICsxOSw5IEBACisgI2luY2x1ZGUgPGVycm9yLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KKysjaWZuZGVmIE5PX1VOQ09NUFJFU1MKKyAjaW5jbHVkZSA8c3Bhd24uaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorQEAgLTE1Niw2ICsxNTgsNyBAQCBjaGFybWFwX2Nsb3NlZGlyIChDSEFSTUFQX0RJUiAqY2RpcikKKyAgIHJldHVybiBjbG9zZWRpciAoZGlyKTsKKyB9CisgCisrI2lmbmRlZiBOT19VTkNPTVBSRVNTCisgLyogQ3JlYXRlcyBhIHN1YnByb2Nlc3MgZGVjb21wcmVzc2luZyB0aGUgZ2l2ZW4gcGF0aG5hbWUsIGFuZCByZXR1cm5zCisgICAgYSBzdHJlYW0gcmVhZGluZyBpdHMgb3V0cHV0ICh0aGUgZGVjb21wcmVzc2VkIGRhdGEpLiAgKi8KKyBzdGF0aWMKK0BAIC0yMDQsNiArMjA3LDcgQEAgZm9wZW5fdW5jb21wcmVzc2VkIChjb25zdCBjaGFyICpwYXRobmFtZSwgY29uc3QgY2hhciAqY29tcHJlc3NvcikKKyAgICAgfQorICAgcmV0dXJuIE5VTEw7CisgfQorKyNlbmRpZgorIAorIC8qIE9wZW5zIGEgY2hhcm1hcCBmb3IgcmVhZGluZywgZ2l2ZW4gaXRzIG5hbWUgKG5vdCBhbiBhbGlhcyBuYW1lKS4gICovCisgRklMRSAqCitAQCAtMjI2LDYgKzIzMCw3IEBAIGNoYXJtYXBfb3BlbiAoY29uc3QgY2hhciAqZGlyZWN0b3J5LCBjb25zdCBjaGFyICpuYW1lKQorICAgaWYgKHN0cmVhbSAhPSBOVUxMKQorICAgICByZXR1cm4gc3RyZWFtOworIAorKyNpZm5kZWYgTk9fVU5DT01QUkVTUworICAgbWVtY3B5IChwLCAiLmd6IiwgNCk7CisgICBzdHJlYW0gPSBmb3Blbl91bmNvbXByZXNzZWQgKHBhdGhuYW1lLCAiZ3ppcCIpOworICAgaWYgKHN0cmVhbSAhPSBOVUxMKQorQEAgLTIzNSw2ICsyNDAsNyBAQCBjaGFybWFwX29wZW4gKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqbmFtZSkKKyAgIHN0cmVhbSA9IGZvcGVuX3VuY29tcHJlc3NlZCAocGF0aG5hbWUsICJiemlwMiIpOworICAgaWYgKHN0cmVhbSAhPSBOVUxMKQorICAgICByZXR1cm4gc3RyZWFtOworKyNlbmRpZgorIAorICAgcmV0dXJuIE5VTEw7CisgfQorZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sZC1jb2xsYXRlLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtY29sbGF0ZS5jCitpbmRleCBhMzlhOTRmLi4xNmU5MDM5IDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xkLWNvbGxhdGUuYworKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xkLWNvbGxhdGUuYworQEAgLTM1MSw3ICszNTEsNyBAQCBuZXdfZWxlbWVudCAoc3RydWN0IGxvY2FsZV9jb2xsYXRlX3QgKmNvbGxhdGUsIGNvbnN0IGNoYXIgKm1icywgc2l6ZV90IG1ic2xlbiwKKyAgICAgfQorICAgaWYgKHdjcyAhPSBOVUxMKQorICAgICB7CistICAgICAgc2l6ZV90IG53Y3MgPSB3Y3NsZW4gKCh3Y2hhcl90ICopIHdjcyk7CisrICAgICAgc2l6ZV90IG53Y3MgPSB3Y3NsZW5fdWludDMyICh3Y3MpOworICAgICAgIHVpbnQzMl90IHplcm8gPSAwOworICAgICAgIC8qIEhhbmRsZSA8VTAwMDA+IGFzIGEgc2luZ2xlIGNoYXJhY3Rlci4gICovCisgICAgICAgaWYgKG53Y3MgPT0gMCkKK0BAIC0xNzc3LDggKzE3NzcsNyBAQCBzeW1ib2wgYCVzJyBoYXMgdGhlIHNhbWUgZW5jb2RpbmcgYXMiKSwgKCplcHRyKS0+bmFtZSk7CisgCisgCSAgICAgIGlmICgoKmVwdHIpLT5ud2NzID09IHJ1bnAtPm53Y3MpCisgCQl7CistCQkgIGludCBjID0gd21lbWNtcCAoKHdjaGFyX3QgKikgKCplcHRyKS0+d2NzLAorLQkJCQkgICAod2NoYXJfdCAqKSBydW5wLT53Y3MsIHJ1bnAtPm53Y3MpOworKwkJICBpbnQgYyA9IHdtZW1jbXBfdWludDMyICgoKmVwdHIpLT53Y3MsIHJ1bnAtPndjcywgcnVucC0+bndjcyk7CisgCisgCQkgIGlmIChjID09IDApCisgCQkgICAgeworQEAgLTIwMTEsOSArMjAxMCw5IEBAIGFkZF90b190YWJsZXdjICh1aW50MzJfdCBjaCwgc3RydWN0IGVsZW1lbnRfdCAqcnVucCkKKyAJICAgICBvbmUgY29uc2VjdXRpdmUgZW50cnkuICAqLworIAkgIGlmIChydW5wLT53Y25leHQgIT0gTlVMTAorIAkgICAgICAmJiBydW5wLT5ud2NzID09IHJ1bnAtPndjbmV4dC0+bndjcworLQkgICAgICAmJiB3bWVtY21wICgod2NoYXJfdCAqKSBydW5wLT53Y3MsCistCQkJICAod2NoYXJfdCAqKXJ1bnAtPndjbmV4dC0+d2NzLAorLQkJCSAgcnVucC0+bndjcyAtIDEpID09IDAKKysJICAgICAgJiYgd21lbWNtcF91aW50MzIgKHJ1bnAtPndjcywKKysJCQkJIHJ1bnAtPndjbmV4dC0+d2NzLAorKwkJCQkgcnVucC0+bndjcyAtIDEpID09IDAKKyAJICAgICAgJiYgKHJ1bnAtPndjc1tydW5wLT5ud2NzIC0gMV0KKyAJCSAgPT0gcnVucC0+d2NuZXh0LT53Y3NbcnVucC0+bndjcyAtIDFdICsgMSkpCisgCSAgICB7CitAQCAtMjAzNyw5ICsyMDM2LDkgQEAgYWRkX3RvX3RhYmxld2MgKHVpbnQzMl90IGNoLCBzdHJ1Y3QgZWxlbWVudF90ICpydW5wKQorIAkJcnVucCA9IHJ1bnAtPndjbmV4dDsKKyAJICAgICAgd2hpbGUgKHJ1bnAtPndjbmV4dCAhPSBOVUxMCisgCQkgICAgICYmIHJ1bnAtPm53Y3MgPT0gcnVucC0+d2NuZXh0LT5ud2NzCistCQkgICAgICYmIHdtZW1jbXAgKCh3Y2hhcl90ICopIHJ1bnAtPndjcywKKy0JCQkJICh3Y2hhcl90ICopcnVucC0+d2NuZXh0LT53Y3MsCistCQkJCSBydW5wLT5ud2NzIC0gMSkgPT0gMAorKwkJICAgICAmJiB3bWVtY21wX3VpbnQzMiAocnVucC0+d2NzLAorKwkJCQkJcnVucC0+d2NuZXh0LT53Y3MsCisrCQkJCQlydW5wLT5ud2NzIC0gMSkgPT0gMAorIAkJICAgICAmJiAocnVucC0+d2NzW3J1bnAtPm53Y3MgLSAxXQorIAkJCSA9PSBydW5wLT53Y25leHQtPndjc1tydW5wLT5ud2NzIC0gMV0gKyAxKSk7CisgCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xkLWN0eXBlLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtY3R5cGUuYworaW5kZXggM2Y0NjRlZi4uYjdiNmI1MSAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sZC1jdHlwZS5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtY3R5cGUuYworQEAgLTkyNiw3ICs5MjYsNyBAQCBjdHlwZV9vdXRwdXQgKHN0cnVjdCBsb2NhbGVkZWZfdCAqbG9jYWxlLCBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAorICAgYWxsb2NhdGVfYXJyYXlzIChjdHlwZSwgY2hhcm1hcCwgY3R5cGUtPnJlcGVydG9pcmUpOworIAorICAgZGVmYXVsdF9taXNzaW5nX2xlbiA9IChjdHlwZS0+ZGVmYXVsdF9taXNzaW5nCistCQkJID8gd2NzbGVuICgod2NoYXJfdCAqKSBjdHlwZS0+ZGVmYXVsdF9taXNzaW5nKQorKwkJCSA/IHdjc2xlbl91aW50MzIgKGN0eXBlLT5kZWZhdWx0X21pc3NpbmcpCisgCQkJIDogMCk7CisgCisgICBpbml0X2xvY2FsZV9kYXRhICgmZmlsZSwgbmVsZW1zKTsKK0BAIC0xOTM3LDcgKzE5MzcsNyBAQCByZWFkX3RyYW5zbGl0X2VudHJ5IChzdHJ1Y3QgbGluZXJlYWRlciAqbGRmaWxlLCBzdHJ1Y3QgbG9jYWxlX2N0eXBlX3QgKmN0eXBlLAorIAkgICAgaWdub3JlID0gMTsKKyAJICBlbHNlCisgCSAgICAvKiBUaGlzIHZhbHVlIGlzIHVzYWJsZS4gICovCistCSAgICBvYnN0YWNrX2dyb3cgKG9iLCB0b193c3RyLCB3Y3NsZW4gKCh3Y2hhcl90ICopIHRvX3dzdHIpICogNCk7CisrCSAgICBvYnN0YWNrX2dyb3cgKG9iLCB0b193c3RyLCB3Y3NsZW5fdWludDMyICh0b193c3RyKSAqIDQpOworIAorIAkgIGZpcnN0ID0gMDsKKyAJfQorQEAgLTI0NzEsOCArMjQ3MSw4IEBAIHdpdGggY2hhcmFjdGVyIGNvZGUgcmFuZ2UgdmFsdWVzIG9uZSBtdXN0IHVzZSB0aGUgYWJzb2x1dGUgZWxsaXBzaXMgYC4uLiciKSk7CisgCSAgICB9CisgCisgCWhhbmRsZV90b2tfZGlnaXQ6CistCSAgY2xhc3NfYml0ID0gX0lTd2RpZ2l0OworLQkgIGNsYXNzMjU2X2JpdCA9IF9JU2RpZ2l0OworKwkgIGNsYXNzX2JpdCA9IEJJVHcgKHRva19kaWdpdCk7CisrCSAgY2xhc3MyNTZfYml0ID0gQklUICh0b2tfZGlnaXQpOworIAkgIGhhbmRsZV9kaWdpdHMgPSAxOworIAkgIGdvdG8gcmVhZF9jaGFyY2xhc3M7CisgCitAQCAtMzkyOSw4ICszOTI5LDcgQEAgYWxsb2NhdGVfYXJyYXlzIChzdHJ1Y3QgbG9jYWxlX2N0eXBlX3QgKmN0eXBlLCBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAorIAorIAkgIHdoaWxlIChpZHggPCBudW1iZXIpCisgCSAgICB7CistCSAgICAgIGludCByZXMgPSB3Y3NjbXAgKChjb25zdCB3Y2hhcl90ICopIHNvcnRlZFtpZHhdLT5mcm9tLAorLQkJCQkoY29uc3Qgd2NoYXJfdCAqKSBydW5wLT5mcm9tKTsKKysJICAgICAgaW50IHJlcyA9IHdjc2NtcF91aW50MzIgKHNvcnRlZFtpZHhdLT5mcm9tLCBydW5wLT5mcm9tKTsKKyAJICAgICAgaWYgKHJlcyA9PSAwKQorIAkJeworIAkJICByZXBsYWNlID0gMTsKK0BAIC0zOTY3LDExICszOTY2LDExIEBAIGFsbG9jYXRlX2FycmF5cyAoc3RydWN0IGxvY2FsZV9jdHlwZV90ICpjdHlwZSwgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKKyAgICAgICBmb3IgKHNpemVfdCBjbnQgPSAwOyBjbnQgPCBudW1iZXI7ICsrY250KQorIAl7CisgCSAgc3RydWN0IHRyYW5zbGl0X3RvX3QgKnNydW5wOworLQkgIGZyb21fbGVuICs9IHdjc2xlbiAoKGNvbnN0IHdjaGFyX3QgKikgc29ydGVkW2NudF0tPmZyb20pICsgMTsKKysJICBmcm9tX2xlbiArPSB3Y3NsZW5fdWludDMyIChzb3J0ZWRbY250XS0+ZnJvbSkgKyAxOworIAkgIHNydW5wID0gc29ydGVkW2NudF0tPnRvOworIAkgIHdoaWxlIChzcnVucCAhPSBOVUxMKQorIAkgICAgeworLQkgICAgICB0b19sZW4gKz0gd2NzbGVuICgoY29uc3Qgd2NoYXJfdCAqKSBzcnVucC0+c3RyKSArIDE7CisrCSAgICAgIHRvX2xlbiArPSB3Y3NsZW5fdWludDMyIChzcnVucC0+c3RyKSArIDE7CisgCSAgICAgIHNydW5wID0gc3J1bnAtPm5leHQ7CisgCSAgICB9CisgCSAgLyogUGx1cyBvbmUgZm9yIHRoZSBleHRyYSBOVUwgY2hhcmFjdGVyIG1hcmtpbmcgdGhlIGVuZCBvZgorQEAgLTM5OTUsMTggKzM5OTQsMTggQEAgYWxsb2NhdGVfYXJyYXlzIChzdHJ1Y3QgbG9jYWxlX2N0eXBlX3QgKmN0eXBlLCBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAorIAkgIGN0eXBlLT50cmFuc2xpdF9mcm9tX2lkeFtjbnRdID0gZnJvbV9sZW47CisgCSAgY3R5cGUtPnRyYW5zbGl0X3RvX2lkeFtjbnRdID0gdG9fbGVuOworIAorLQkgIGxlbiA9IHdjc2xlbiAoKGNvbnN0IHdjaGFyX3QgKikgc29ydGVkW2NudF0tPmZyb20pICsgMTsKKy0JICB3bWVtY3B5ICgod2NoYXJfdCAqKSAmY3R5cGUtPnRyYW5zbGl0X2Zyb21fdGJsW2Zyb21fbGVuXSwKKy0JCSAgIChjb25zdCB3Y2hhcl90ICopIHNvcnRlZFtjbnRdLT5mcm9tLCBsZW4pOworKwkgIGxlbiA9IHdjc2xlbl91aW50MzIgKHNvcnRlZFtjbnRdLT5mcm9tKSArIDE7CisrCSAgd21lbWNweV91aW50MzIgKCZjdHlwZS0+dHJhbnNsaXRfZnJvbV90YmxbZnJvbV9sZW5dLAorKwkJCSAgc29ydGVkW2NudF0tPmZyb20sIGxlbik7CisgCSAgZnJvbV9sZW4gKz0gbGVuOworIAorIAkgIGN0eXBlLT50cmFuc2xpdF90b19pZHhbY250XSA9IHRvX2xlbjsKKyAJICBzcnVucCA9IHNvcnRlZFtjbnRdLT50bzsKKyAJICB3aGlsZSAoc3J1bnAgIT0gTlVMTCkKKyAJICAgIHsKKy0JICAgICAgbGVuID0gd2NzbGVuICgoY29uc3Qgd2NoYXJfdCAqKSBzcnVucC0+c3RyKSArIDE7CistCSAgICAgIHdtZW1jcHkgKCh3Y2hhcl90ICopICZjdHlwZS0+dHJhbnNsaXRfdG9fdGJsW3RvX2xlbl0sCistCQkgICAgICAgKGNvbnN0IHdjaGFyX3QgKikgc3J1bnAtPnN0ciwgbGVuKTsKKysJICAgICAgbGVuID0gd2NzbGVuX3VpbnQzMiAoc3J1bnAtPnN0cikgKyAxOworKwkgICAgICB3bWVtY3B5X3VpbnQzMiAoJmN0eXBlLT50cmFuc2xpdF90b190YmxbdG9fbGVuXSwKKysJCQkgICAgICBzcnVucC0+c3RyLCBsZW4pOworIAkgICAgICB0b19sZW4gKz0gbGVuOworIAkgICAgICBzcnVucCA9IHNydW5wLT5uZXh0OworIAkgICAgfQorZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sZC1tZXNzYWdlcy5jIGIvbG9jYWxlL3Byb2dyYW1zL2xkLW1lc3NhZ2VzLmMKK2luZGV4IGVjMWE4MGIuLjczNmVlZDggMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbGQtbWVzc2FnZXMuYworKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xkLW1lc3NhZ2VzLmMKK0BAIC0yNSw2ICsyNSw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAjaW5jbHVkZSA8c3lzL3Vpby5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAKK0BAIC0xMjQsNiArMTI1LDcgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX01FU1NBR0VTIikpOworICAgICB9CisgICBlbHNlCisgICAgIHsKKysjaWYgX19PUFRJT05fUE9TSVhfUkVHRVhQCisgICAgICAgaW50IHJlc3VsdDsKKyAgICAgICByZWdleF90IHJlOworIAorQEAgLTE0MCw2ICsxNDIsNyBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfTUVTU0FHRVMiKSk7CisgCX0KKyAgICAgICBlbHNlIGlmIChyZXN1bHQgIT0gMCkKKyAJcmVnZnJlZSAoJnJlKTsKKysjZW5kaWYKKyAgICAgfQorIAorICAgaWYgKG1lc3NhZ2VzLT5ub2V4cHIgPT0gTlVMTCkKK0BAIC0xNTgsNiArMTYxLDcgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX01FU1NBR0VTIikpOworICAgICB9CisgICBlbHNlCisgICAgIHsKKysjaWYgX19PUFRJT05fUE9TSVhfUkVHRVhQCisgICAgICAgaW50IHJlc3VsdDsKKyAgICAgICByZWdleF90IHJlOworIAorQEAgLTE3NCw2ICsxNzgsNyBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfTUVTU0FHRVMiKSk7CisgCX0KKyAgICAgICBlbHNlIGlmIChyZXN1bHQgIT0gMCkKKyAJcmVnZnJlZSAoJnJlKTsKKysjZW5kaWYKKyAgICAgfQorIH0KKyAKK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbGQtdGltZS5jIGIvbG9jYWxlL3Byb2dyYW1zL2xkLXRpbWUuYworaW5kZXggZGI0OTBjNi4uNzVkYzUwNSAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sZC10aW1lLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sZC10aW1lLmMKK0BAIC0yMTUsOCArMjE1LDEwIEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19USU1FIikpOworIAl9CisgICAgICAgZWxzZQorIAl7CisrCSAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHd0X2ZtdF9hbXBtW10KKysJICAgID0geyAnJScsJ0knLCc6JywnJScsJ00nLCc6JywnJScsJ1MnLCcgJywnJScsJ3AnLDAgfTsKKyAJICB0aW1lLT50X2ZtdF9hbXBtID0gIiVJOiVNOiVTICVwIjsKKy0JICB0aW1lLT53dF9mbXRfYW1wbSA9IChjb25zdCB1aW50MzJfdCAqKSBMIiVJOiVNOiVTICVwIjsKKysJICB0aW1lLT53dF9mbXRfYW1wbSA9IHd0X2ZtdF9hbXBtOworIAl9CisgICAgIH0KKyAKK0BAIC0yMjYsNyArMjI4LDcgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX1RJTUUiKSk7CisgICAgICAgY29uc3QgaW50IGRheXNfcGVyX21vbnRoWzEyXSA9IHsgMzEsIDI5LCAzMSwgMzAsIDMxLCAzMCwKKyAJCQkJICAgICAgIDMxLCAzMSwgMzAsIDMxICwzMCwgMzEgfTsKKyAgICAgICBzaXplX3QgaWR4OworLSAgICAgIHdjaGFyX3QgKndzdHI7CisrICAgICAgdWludDMyX3QgKndzdHI7CisgCisgICAgICAgdGltZS0+ZXJhX2VudHJpZXMgPQorIAkoc3RydWN0IGVyYV9kYXRhICopIHhtYWxsb2MgKHRpbWUtPm51bV9lcmEKK0BAIC00NjQsMTggKzQ2NiwxOCBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfVElNRSIpKTsKKyAJICAgIH0KKyAKKyAJICAvKiBOb3cgZ2VuZXJhdGUgdGhlIHdpZGUgY2hhcmFjdGVyIG5hbWUgYW5kIGZvcm1hdC4gICovCistCSAgd3N0ciA9IHdjc2NociAoKHdjaGFyX3QgKikgdGltZS0+d2VyYVtpZHhdLCBMJzonKTsvKiBlbmQgZGlyZWN0aW9uICovCistCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7CS8qIGVuZCBvZmZzZXQgKi8KKy0JICB3c3RyID0gd3N0ciA/IHdjc2NociAod3N0ciArIDEsIEwnOicpIDogTlVMTDsJLyogZW5kIHN0YXJ0ICovCistCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7CS8qIGVuZCBlbmQgKi8KKysJICB3c3RyID0gd2NzY2hyX3VpbnQzMiAodGltZS0+d2VyYVtpZHhdLCBMJzonKTsgLyogZW5kIGRpcmVjdGlvbiAqLworKwkgIHdzdHIgPSB3c3RyID8gd2NzY2hyX3VpbnQzMiAod3N0ciArIDEsIEwnOicpIDogTlVMTDsgLyogZW5kIG9mZnNldCAqLworKwkgIHdzdHIgPSB3c3RyID8gd2NzY2hyX3VpbnQzMiAod3N0ciArIDEsIEwnOicpIDogTlVMTDsgLyogZW5kIHN0YXJ0ICovCisrCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHJfdWludDMyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOyAvKiBlbmQgZW5kICovCisgCSAgaWYgKHdzdHIgIT0gTlVMTCkKKyAJICAgIHsKKy0JICAgICAgdGltZS0+ZXJhX2VudHJpZXNbaWR4XS53bmFtZSA9ICh1aW50MzJfdCAqKSB3c3RyICsgMTsKKy0JICAgICAgd3N0ciA9IHdjc2NociAod3N0ciArIDEsIEwnOicpOwkvKiBlbmQgbmFtZSAqLworKwkgICAgICB0aW1lLT5lcmFfZW50cmllc1tpZHhdLnduYW1lID0gd3N0ciArIDE7CisrCSAgICAgIHdzdHIgPSB3Y3NjaHJfdWludDMyICh3c3RyICsgMSwgTCc6Jyk7IC8qIGVuZCBuYW1lICovCisgCSAgICAgIGlmICh3c3RyICE9IE5VTEwpCisgCQl7CisgCQkgICp3c3RyID0gTCdcMCc7CistCQkgIHRpbWUtPmVyYV9lbnRyaWVzW2lkeF0ud2Zvcm1hdCA9ICh1aW50MzJfdCAqKSB3c3RyICsgMTsKKysJCSAgdGltZS0+ZXJhX2VudHJpZXNbaWR4XS53Zm9ybWF0ID0gd3N0ciArIDE7CisgCQl9CisgCSAgICAgIGVsc2UKKyAJCXRpbWUtPmVyYV9lbnRyaWVzW2lkeF0ud25hbWUgPQorQEAgLTUzMCw3ICs1MzIsMTYgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX1RJTUUiKSk7CisgICBpZiAodGltZS0+ZGF0ZV9mbXQgPT0gTlVMTCkKKyAgICAgdGltZS0+ZGF0ZV9mbXQgPSAiJWEgJWIgJWUgJUg6JU06JVMgJVogJVkiOworICAgaWYgKHRpbWUtPndkYXRlX2ZtdCA9PSBOVUxMKQorLSAgICB0aW1lLT53ZGF0ZV9mbXQgPSAoY29uc3QgdWludDMyX3QgKikgTCIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSI7CisrICAgIHsKKysgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgd2RhdGVfZm10W10gPQorKwl7ICclJywnYScsJyAnLAorKwkgICclJywnYicsJyAnLAorKwkgICclJywnZScsJyAnLAorKwkgICclJywnSCcsJzonLCclJywnTScsJzonLCclJywnUycsJyAnLAorKwkgICclJywnWicsJyAnLAorKwkgICclJywnWScsMCB9OworKyAgICAgIHRpbWUtPndkYXRlX2ZtdCA9IHdkYXRlX2ZtdDsKKysgICAgfQorIH0KKyAKKyAKK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbGluZXJlYWRlci5jIGIvbG9jYWxlL3Byb2dyYW1zL2xpbmVyZWFkZXIuYworaW5kZXggMmUwNTEzMC4uNjUzYjY4YyAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9saW5lcmVhZGVyLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9saW5lcmVhZGVyLmMKK0BAIC01OTUsNyArNTk1LDcgQEAgZ2V0X3N0cmluZyAoc3RydWN0IGxpbmVyZWFkZXIgKmxyLCBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAorIHsKKyAgIGludCByZXR1cm5fd2lkZXN0ciA9IGxyLT5yZXR1cm5fd2lkZXN0cjsKKyAgIGNoYXIgKmJ1ZjsKKy0gIHdjaGFyX3QgKmJ1ZjIgPSBOVUxMOworKyAgdWludDMyX3QgKmJ1ZjIgPSBOVUxMOworICAgc2l6ZV90IGJ1ZmFjdDsKKyAgIHNpemVfdCBidWZtYXggPSA1NjsKKyAKK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbG9jYWxlZGVmLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbG9jYWxlZGVmLmMKK2luZGV4IDJhMGYyYWEuLjU4M2QyMzMgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbG9jYWxlZGVmLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sb2NhbGVkZWYuYworQEAgLTExNCw2ICsxMTQsNyBAQCB2b2lkICgqYXJncF9wcm9ncmFtX3ZlcnNpb25faG9vaykgKEZJTEUgKiwgc3RydWN0IGFyZ3Bfc3RhdGUgKikgPSBwcmludF92ZXJzaW9uOworICNkZWZpbmUgT1BUX0xJU1RfQVJDSElWRSAzMDkKKyAjZGVmaW5lIE9QVF9MSVRUTEVfRU5ESUFOIDQwMAorICNkZWZpbmUgT1BUX0JJR19FTkRJQU4gNDAxCisrI2RlZmluZSBPUFRfVUlOVDMyX0FMSUdOIDQwMgorIAorIC8qIERlZmluaXRpb25zIG9mIGFyZ3VtZW50cyBmb3IgYXJncCBmdW5jdGlvbnMuICAqLworIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1tdID0KK0BAIC0xNTAsNiArMTUxLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRpb25zW10gPQorICAgICBOXygiR2VuZXJhdGUgbGl0dGxlLWVuZGlhbiBvdXRwdXQiKSB9LAorICAgeyAiYmlnLWVuZGlhbiIsIE9QVF9CSUdfRU5ESUFOLCBOVUxMLCAwLAorICAgICBOXygiR2VuZXJhdGUgYmlnLWVuZGlhbiBvdXRwdXQiKSB9LAorKyAgeyAidWludDMyLWFsaWduIiwgT1BUX1VJTlQzMl9BTElHTiwgIkFMSUdOTUVOVCIsIDAsCisrICAgIE5fKCJTZXQgdGhlIHRhcmdldCdzIHVpbnQzMl90IGFsaWdubWVudCBpbiBieXRlcyAoZGVmYXVsdCA0KSIpIH0sCisgICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQorIH07CisgCitAQCAtMjM5LDEyICsyNDIsMTQgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgIGN0eXBlIGxvY2FsZS4gIChQMTAwMy4yIDQuMzUuNS4yKSAgKi8KKyAgIHNldGxvY2FsZSAoTENfQ1RZUEUsICJQT1NJWCIpOworIAorKyNpZm5kZWYgTk9fU1lTQ09ORgorICAgLyogTG9vayB3aGV0aGVyIHRoZSBzeXN0ZW0gcmVhbGx5IGFsbG93cyBsb2NhbGUgZGVmaW5pdGlvbnMuICBQT1NJWAorICAgICAgZGVmaW5lcyBlcnJvciBjb2RlIDMgZm9yIHRoaXMgc2l0dWF0aW9uIHNvIEkgdGhpbmsgaXQgbXVzdCBiZQorICAgICAgYSBmYXRhbCBlcnJvciAoc2VlIFAxMDAzLjIgNC4zNS44KS4gICovCisgICBpZiAoc3lzY29uZiAoX1NDXzJfTE9DQUxFREVGKSA8IDApCisgICAgIFdJVEhfQ1VSX0xPQ0FMRSAoZXJyb3IgKDMsIDAsIF8oIlwKKyBGQVRBTDogc3lzdGVtIGRvZXMgbm90IGRlZmluZSBgX1BPU0lYMl9MT0NBTEVERUYnIikpKTsKKysjZW5kaWYKKyAKKyAgIC8qIFByb2Nlc3MgY2hhcm1hcCBmaWxlLiAgKi8KKyAgIGNoYXJtYXAgPSBjaGFybWFwX3JlYWQgKGNoYXJtYXBfZmlsZSwgdmVyYm9zZSwgMSwgYmVfcXVpZXQsIDEpOworQEAgLTMzOCw2ICszNDMsOSBAQCBwYXJzZV9vcHQgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorICAgICBjYXNlIE9QVF9CSUdfRU5ESUFOOgorICAgICAgIHNldF9iaWdfZW5kaWFuICh0cnVlKTsKKyAgICAgICBicmVhazsKKysgICAgY2FzZSBPUFRfVUlOVDMyX0FMSUdOOgorKyAgICAgIHVpbnQzMl9hbGlnbl9tYXNrID0gc3RydG9sIChhcmcsIE5VTEwsIDApIC0gMTsKKysgICAgICBicmVhazsKKyAgICAgY2FzZSAnYyc6CisgICAgICAgZm9yY2Vfb3V0cHV0ID0gMTsKKyAgICAgICBicmVhazsKK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5jIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuYworaW5kZXggMzNkYTUyZS4uZjc5MGM0YyAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmMKK0BAIC01NDQsNiArNTQ0LDkgQEAgY29tcGFyZV9maWxlcyAoY29uc3QgY2hhciAqZmlsZW5hbWUxLCBjb25zdCBjaGFyICpmaWxlbmFtZTIsIHNpemVfdCBzaXplLAorICAgIG1hY2hpbmUgcnVubmluZyBsb2NhbGVkZWYuICAqLworIGJvb2wgc3dhcF9lbmRpYW5uZXNzX3A7CisgCisrLyogVGhlIHRhcmdldCdzIHZhbHVlIG9mIF9fYWxpZ25fXyh1aW50MzJfdCkgLSAxLiAgKi8KKyt1bnNpZ25lZCBpbnQgdWludDMyX2FsaWduX21hc2sgPSAzOworKworIC8qIFdoZW4gY2FsbGVkIG91dHNpZGUgYSBzdGFydF9sb2NhbGVfc3RydWN0dXJlL2VuZF9sb2NhbGVfc3RydWN0dXJlCisgICAgb3Igc3RhcnRfbG9jYWxlX3ByZWx1ZGUvZW5kX2xvY2FsZV9wcmVsdWRlIGJsb2NrLCByZWNvcmQgdGhhdCB0aGUKKyAgICBuZXh0IGJ5dGUgaW4gRklMRSdzIG9ic3RhY2sgd2lsbCBiZSB0aGUgZmlyc3QgYnl0ZSBvZiBhIG5ldyBlbGVtZW50LgorQEAgLTYyMSw3ICs2MjQsNyBAQCBhZGRfbG9jYWxlX3N0cmluZyAoc3RydWN0IGxvY2FsZV9maWxlICpmaWxlLCBjb25zdCBjaGFyICpzdHJpbmcpCisgdm9pZAorIGFkZF9sb2NhbGVfd3N0cmluZyAoc3RydWN0IGxvY2FsZV9maWxlICpmaWxlLCBjb25zdCB1aW50MzJfdCAqc3RyaW5nKQorIHsKKy0gIGFkZF9sb2NhbGVfdWludDMyX2FycmF5IChmaWxlLCBzdHJpbmcsIHdjc2xlbiAoKGNvbnN0IHdjaGFyX3QgKikgc3RyaW5nKSArIDEpOworKyAgYWRkX2xvY2FsZV91aW50MzJfYXJyYXkgKGZpbGUsIHN0cmluZywgd2NzbGVuX3VpbnQzMiAoc3RyaW5nKSArIDEpOworIH0KKyAKKyAvKiBSZWNvcmQgdGhhdCBGSUxFJ3MgbmV4dCBlbGVtZW50IGlzIHRoZSAzMi1iaXQgaW50ZWdlciBWQUxVRS4gICovCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuaCBiL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmgKK2luZGV4IDZmYzQ0MWIuLjExOGIxNzEgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5oCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5oCitAQCAtNzEsNiArNzEsOCBAQCBleHRlcm4gdm9pZCB3cml0ZV9hbGxfY2F0ZWdvcmllcyAoc3RydWN0IGxvY2FsZWRlZl90ICpkZWZpbml0aW9ucywKKyAKKyBleHRlcm4gYm9vbCBzd2FwX2VuZGlhbm5lc3NfcDsKKyAKKytleHRlcm4gdW5zaWduZWQgaW50IHVpbnQzMl9hbGlnbl9tYXNrOworKworIC8qIENoYW5nZSB0aGUgb3V0cHV0IHRvIGJlIGJpZy1lbmRpYW4gaWYgQklHX0VORElBTiBpcyB0cnVlIGFuZAorICAgIGxpdHRsZS1lbmRpYW4gb3RoZXJ3aXNlLiAgKi8KKyBzdGF0aWMgaW5saW5lIHZvaWQKK0BAIC04OSw3ICs5MSw4IEBAIG1heWJlX3N3YXBfdWludDMyICh1aW50MzJfdCB2YWx1ZSkKKyB9CisgCisgLyogTGlrZXdpc2UsIGJ1dCBtdW5nZSBhbiBhcnJheSBvZiBOIHVpbnQzMl90cyBzdGFydGluZyBhdCBBUlJBWS4gICovCistc3RhdGljIGlubGluZSB2b2lkCisrc3RhdGljIHZvaWQKKytfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKyBtYXliZV9zd2FwX3VpbnQzMl9hcnJheSAodWludDMyX3QgKmFycmF5LCBzaXplX3QgbikKKyB7CisgICBpZiAoc3dhcF9lbmRpYW5uZXNzX3ApCitAQCAtOTksNyArMTAyLDggQEAgbWF5YmVfc3dhcF91aW50MzJfYXJyYXkgKHVpbnQzMl90ICphcnJheSwgc2l6ZV90IG4pCisgCisgLyogTGlrZSBtYXliZV9zd2FwX3VpbnQzMl9hcnJheSwgYnV0IHRoZSBhcnJheSBvZiBOIGVsZW1lbnRzIGlzIGF0CisgICAgdGhlIGVuZCBvZiBPQlNUQUNLJ3MgY3VycmVudCBvYmplY3QuICAqLworLXN0YXRpYyBpbmxpbmUgdm9pZAorK3N0YXRpYyB2b2lkCisrX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisgbWF5YmVfc3dhcF91aW50MzJfb2JzdGFjayAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2ssIHNpemVfdCBuKQorIHsKKyAgIG1heWJlX3N3YXBfdWludDMyX2FycmF5ICgodWludDMyX3QgKikgb2JzdGFja19uZXh0X2ZyZWUgKG9ic3RhY2spIC0gbiwgbik7CitAQCAtMjc2LDQgKzI4MCw1NSBAQCBleHRlcm4gdm9pZCBpZGVudGlmaWNhdGlvbl9vdXRwdXQgKHN0cnVjdCBsb2NhbGVkZWZfdCAqbG9jYWxlLAorIAkJCQkgICBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAorIAkJCQkgICBjb25zdCBjaGFyICpvdXRwdXRfcGF0aCk7CisgCisrc3RhdGljIHNpemVfdCB3Y3NsZW5fdWludDMyIChjb25zdCB1aW50MzJfdCAqc3RyKSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7Cisrc3RhdGljIHVpbnQzMl90ICogd21lbWNweV91aW50MzIgKHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyLCBzaXplX3QgbikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworK3N0YXRpYyB1aW50MzJfdCAqIHdjc2Nocl91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzLCB1aW50MzJfdCBjaCkgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworK3N0YXRpYyBpbnQgd2NzY21wX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIpIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKytzdGF0aWMgaW50IHdtZW1jbXBfdWludDMyIChjb25zdCB1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMiwgc2l6ZV90IG4pIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysKKytzdGF0aWMgc2l6ZV90Cisrd2NzbGVuX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnN0cikKKyt7CisrICBzaXplX3QgbGVuID0gMDsKKysgIHdoaWxlIChzdHJbbGVuXSAhPSAwKQorKyAgICBsZW4rKzsKKysgIHJldHVybiBsZW47CisrfQorKworK3N0YXRpYyAgaW50Cisrd21lbWNtcF91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyLCBzaXplX3QgbikKKyt7CisrICB3aGlsZSAobi0tICE9IDApCisrICAgIHsKKysgICAgICBpbnQgZGlmZiA9ICpzMSsrIC0gKnMyKys7CisrICAgICAgaWYgKGRpZmYgIT0gMCkKKysJcmV0dXJuIGRpZmY7CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50Cisrd2NzY21wX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIpCisreworKyAgd2hpbGUgKCpzMSAhPSAwICYmICpzMSA9PSAqczIpCisrICAgIHMxKyssIHMyKys7CisrICByZXR1cm4gKnMxIC0gKnMyOworK30KKysKKytzdGF0aWMgdWludDMyX3QgKgorK3dtZW1jcHlfdWludDMyICh1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMiwgc2l6ZV90IG4pCisreworKyAgcmV0dXJuIG1lbWNweSAoczEsIHMyLCBuICogc2l6ZW9mICh1aW50MzJfdCkpOworK30KKysKKytzdGF0aWMgdWludDMyX3QgKgorK3djc2Nocl91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzLCB1aW50MzJfdCBjaCkKKyt7CisrICBkbworKyAgICBpZiAoKnMgPT0gY2gpCisrICAgICAgcmV0dXJuICh1aW50MzJfdCAqKSBzOworKyAgd2hpbGUgKCpzKysgIT0gMCk7CisrICByZXR1cm4gMDsKKyt9CisrCisgI2VuZGlmIC8qIGxvY2ZpbGUuaCAqLworZGlmZiAtLWdpdCBhL2xvY2FsZS9zZXRsb2NhbGUuYyBiL2xvY2FsZS9zZXRsb2NhbGUuYworaW5kZXggZmE5Y2IzYS4uOGVlZTI4NCAxMDA2NDQKKy0tLSBhL2xvY2FsZS9zZXRsb2NhbGUuYworKysrIGIvbG9jYWxlL3NldGxvY2FsZS5jCitAQCAtNjQsMzYgKzY0LDYgQEAgc3RhdGljIGNoYXIgKmNvbnN0IF9ubF9jdXJyZW50X3VzZWRbXSA9CisgI2VuZGlmCisgCisgCistLyogRGVmaW5lIGFuIGFycmF5IG9mIGNhdGVnb3J5IG5hbWVzIChhbHNvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcykuICAqLworLWNvbnN0IHVuaW9uIGNhdG5hbWVzdHJfdCBfbmxfY2F0ZWdvcnlfbmFtZXMgYXR0cmlidXRlX2hpZGRlbiA9CistICB7CistICAgIHsKKy0jZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKKy0gICAgICBjYXRlZ29yeV9uYW1lLAorLSNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKy0jdW5kZWYgREVGSU5FX0NBVEVHT1JZCistICAgIH0KKy0gIH07CistCistY29uc3QgdWludDhfdCBfbmxfY2F0ZWdvcnlfbmFtZV9pZHhzW19fTENfTEFTVF0gYXR0cmlidXRlX2hpZGRlbiA9CistICB7CistI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCistICAgIFtjYXRlZ29yeV0gPSBvZmZzZXRvZiAodW5pb24gY2F0bmFtZXN0cl90LCBDQVROQU1FTUYgKF9fTElORV9fKSksCistI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorLSN1bmRlZiBERUZJTkVfQ0FURUdPUlkKKy0gIH07CistCistLyogQW4gYXJyYXkgb2YgdGhlaXIgbGVuZ3RocywgZm9yIGNvbnZlbmllbmNlLiAgKi8KKy1jb25zdCB1aW50OF90IF9ubF9jYXRlZ29yeV9uYW1lX3NpemVzW10gYXR0cmlidXRlX2hpZGRlbiA9CistICB7CistI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCistICAgIFtjYXRlZ29yeV0gPSBzaXplb2YgKGNhdGVnb3J5X25hbWUpIC0gMSwKKy0jaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCistI3VuZGVmCURFRklORV9DQVRFR09SWQorLSAgICBbTENfQUxMXSA9IHNpemVvZiAoIkxDX0FMTCIpIC0gMQorLSAgfTsKKy0KKy0KKyAjaWZkZWYgTkxfQ1VSUkVOVF9JTkRJUkVDVAorICMgZGVmaW5lIFdFQUtfUE9TVExPQUQocG9zdGxvYWQpIHdlYWtfZXh0ZXJuIChwb3N0bG9hZCkKKyAjZWxzZQorZGlmZiAtLWdpdCBhL2xvY2FsZS94bG9jYWxlLmMgYi9sb2NhbGUveGxvY2FsZS5jCitpbmRleCBmZWM0NTY0Li5mMDAyNjljIDEwMDY0NAorLS0tIGEvbG9jYWxlL3hsb2NhbGUuYworKysrIGIvbG9jYWxlL3hsb2NhbGUuYworQEAgLTE4LDYgKzE4LDcgQEAKKyAgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNpbmNsdWRlIDxsb2NhbGUuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSAibG9jYWxlaW5mby5oIgorIAorICNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorQEAgLTI1LDYgKzI2LDE5IEBAIGV4dGVybiBzdHJ1Y3QgX19sb2NhbGVfZGF0YSBfbmxfQ18jI2NhdGVnb3J5OworICNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKyAjdW5kZWYJREVGSU5FX0NBVEVHT1JZCisgCisrLyogSWYgdGhlIGxvY2FsZSBzdXBwb3J0IGNvZGUgaXNuJ3QgZW5hYmxlZCwgZG9uJ3QgZ2VuZXJhdGUgc3Ryb25nCisrICAgcmVmZXJlbmNlIHRvIHRoZSBDIGxvY2FsZV9kYXRhIHN0cnVjdHVyZXMgaGVyZTsgbGV0IHRoZSBNYWtlZmlsZQorKyAgIGRlY2lkZSB3aGljaCBvbmVzIHRvIGluY2x1ZGUuICAoSW4gdGhlIHN0YXRpYyBsaW5raW5nIGNhc2UsIHRoZQorKyAgIHN0cm9uZyByZWZlcmVuY2UgdG8gdGhlICdjbGFzcycsICd0b3VwcGVyJywgYW5kICd0b2xvd2VyJyB0YWJsZXMKKysgICB3aWxsIGNhdXNlIEMtY3R5cGUubyB0byBiZSBicm91Z2h0IGluLCBhcyBpdCBzaG91bGQgYmUsIGV2ZW4gd2hlbgorKyAgIHRoZSByZWZlcmVuY2UgdG8gX25sX0NfTENfQ1RZUEUgd2lsbCBiZSB3ZWFrLikgICovCisrI2lmICEgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrIyBkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorKyAgd2Vha19leHRlcm4gKF9ubF9DXyMjY2F0ZWdvcnkpCisrIyBpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKysjIHVuZGVmCURFRklORV9DQVRFR09SWQorKyNlbmRpZgorKworIC8qIERlZmluZWQgaW4gbG9jYWxlL0MtY3R5cGUuYy4gICovCisgZXh0ZXJuIGNvbnN0IGNoYXIgX25sX0NfTENfQ1RZUEVfY2xhc3NbXSBhdHRyaWJ1dGVfaGlkZGVuOworIGV4dGVybiBjb25zdCBjaGFyIF9ubF9DX0xDX0NUWVBFX3RvdXBwZXJbXSBhdHRyaWJ1dGVfaGlkZGVuOworQEAgLTUyLDMgKzY2LDI2IEBAIGNvbnN0IHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QgX25sX0NfbG9jb2JqIGF0dHJpYnV0ZV9oaWRkZW4gPQorICAgICAuX19jdHlwZV90b2xvd2VyID0gKGNvbnN0IGludCAqKSBfbmxfQ19MQ19DVFlQRV90b2xvd2VyICsgMTI4LAorICAgICAuX19jdHlwZV90b3VwcGVyID0gKGNvbnN0IGludCAqKSBfbmxfQ19MQ19DVFlQRV90b3VwcGVyICsgMTI4CisgICB9OworKworKworKyNpZiAhIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKy8qIFdoZW4gbG9jYWxlIGNvZGUgaXMgZW5hYmxlZCwgdGhlc2UgYXJlIGVhY2ggZGVmaW5lZCBpbiB0aGUKKysgICBhcHByb3ByaWF0ZSBsYy1DQVRFR09SWS5jIGZpbGUsIHNvIHRoYXQgc3RhdGljIGxpbmtzICh3aGVuIF9fdGhyZWFkCisrICAgaXMgc3VwcG9ydGVkKSBicmluZyBpbiBvbmx5IHRob3NlIGxjLUNBVEVHT1JZLm8gZmlsZXMgZm9yCisrICAgY2F0ZWdvcmllcyB0aGUgcHJvZ3JhbSBhY3R1YWxseSB1c2VzOyBsb29rIGZvciBOTF9DVVJSRU5UX0lORElSRUNUCisrICAgaW4gbG9jYWxlaW5mby5oLgorKworKyAgIFdoZW4gbG9jYWxlIGNvZGUgaXMgZGlzYWJsZWQsIHRoZSBfbmxfQ19DQVRFR09SWSBvYmplY3RzIGFyZSB0aGUKKysgICBvbmx5IHBvc3NpYmxlIHJlZmVyZW50cy4gIEF0IHRoZSBtb21lbnQsIHRoZXJlIGlzbid0IGEgd2F5IHRvIGdldAorKyAgIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBkZWZpbmVkIGluIGV2ZXJ5IGNvbXBpbGF0aW9uIHVuaXQgdGhhdAorKyAgICNpbmNsdWRlcyBsb2NhbGVpbmZvLmgsIHNvIHdlIGNhbid0IGp1c3QgdHVybiBvZmYKKysgICBOTF9DVVJSRU5UX0lORElSRUNULiAgU28gd2UnbGwgZGVmaW5lIHRoZSBfbmxfY3VycmVudF9DQVRFR09SWQorKyAgIHBvaW50ZXJzIGhlcmUuICAqLworKyNpZiBkZWZpbmVkIChOTF9DVVJSRU5UX0lORElSRUNUKQorKyNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgICAgICBcCisrICBfX3RocmVhZCBzdHJ1Y3QgX19sb2NhbGVfZGF0YSAqIGNvbnN0ICpfbmxfY3VycmVudF8jI2NhdGVnb3J5ICAgXAorKyAgYXR0cmlidXRlX2hpZGRlbiA9ICZfbmxfQ19sb2NvYmouX19sb2NhbGVzW2NhdGVnb3J5XTsKKysjaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCisrI3VuZGVmIERFRklORV9DQVRFR09SWQorKyNlbmRpZgorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KK2RpZmYgLS1naXQgYS9sb2NhbGVkYXRhL01ha2VmaWxlIGIvbG9jYWxlZGF0YS9NYWtlZmlsZQoraW5kZXggZWJmNmFjOS4uMTg3MDc1MyAxMDA2NDQKKy0tLSBhL2xvY2FsZWRhdGEvTWFrZWZpbGUKKysrKyBiL2xvY2FsZWRhdGEvTWFrZWZpbGUKK0BAIC0yMSwxMiArMjEsMjIgQEAgc3ViZGlyIDo9IGxvY2FsZWRhdGEKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKy0jIExpc3Qgd2l0aCBhbGwgYXZhaWxhYmxlIGNoYXJhY3RlciBzZXQgZGVzY3JpcHRpb25zLgorLWNoYXJtYXBzIDo9ICQod2lsZGNhcmQgY2hhcm1hcHMvW0EtSV0qKSAkKHdpbGRjYXJkIGNoYXJtYXBzL1tKLVpdKikKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisgCisgIyBMaXN0IHdpdGggYWxsIGF2YWlsYWJsZSBjaGFyYWN0ZXIgc2V0IGRlc2NyaXB0aW9ucy4KKy1sb2NhbGVzIDo9ICQod2lsZGNhcmQgbG9jYWxlcy8qKQorLQorK2FsbC1jaGFybWFwcyA6PSAkKHdpbGRjYXJkIGNoYXJtYXBzL1tBLUldKikgJCh3aWxkY2FyZCBjaGFybWFwcy9bSi1aXSopCisrCisrYWxsLWxvY2FsZXMgOj0gJCh3aWxkY2FyZCBsb2NhbGVzLyopCisrCisrIyBJZiB0aGUgRUdMSUJDX0xPQ0FMRVMgb3B0aW9uIGdyb3VwIGlzIG5vdCBlbmFibGVkLCB0cmltIHRoZQorKyMgbGlzdCBvZiBjaGFybWFwIGFuZCBsb2NhbGUgc291cmNlIGZpbGVzLgorK2lmZXEgKCQoT1BUSU9OX0VHTElCQ19MT0NBTEVTKSx5KQorK2NoYXJtYXBzIDo9ICQoYWxsLWNoYXJtYXBzKQorK2xvY2FsZXMgIDo9ICQoYWxsLWxvY2FsZXMpCisrZWxzZQorK2NoYXJtYXBzIDo9CisrbG9jYWxlcyAgOj0gbG9jYWxlcy9QT1NJWAorK2VuZGlmCisgCisgc3ViZGlyLWRpcnMgPSB0ZXN0cy1tYndjCisgdnBhdGggJS5jIHRlc3RzLW1id2MKK0BAIC03MSwxNCArODEsMjAgQEAgbG9jYWxlX3Rlc3Rfc3VpdGUgOj0gdHN0X2lzd2FsbnVtIHRzdF9pc3dhbHBoYSB0c3RfaXN3Y250cmwgICAgICAgICAgICBcCisgCQkgICAgIHRzdF93Y3N4ZnJtIHRzdF93Y3RvYiB0c3Rfd2N0b21iIHRzdF93Y3RyYW5zICAgICAgXAorIAkJICAgICB0c3Rfd2N0eXBlIHRzdF93Y3dpZHRoCisgCistdGVzdHMgPSAkKGxvY2FsZV90ZXN0X3N1aXRlKSB0c3QtZGlnaXRzIHRzdC1zZXRsb2NhbGUgYnVnLWljb252LXRyYW5zIFwKKysjIFNpbmNlIHRoZXNlIHRlc3RzIGJ1aWxkIHRoZWlyIG93biBsb2NhbGUgZmlsZXMsIHRoZXkncmUgbm90CisrIyBkZXBlbmRlbnQgb24gdGhlIE9QVElPTl9FR0xJQkNfTE9DQUxFUyBvcHRpb24gZ3JvdXAuICBCdXQgdGhleSBkbworKyMgbmVlZCB0aGUgbG9jYWxlIGZ1bmN0aW9ucyB0byBiZSBwcmVzZW50LgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKyAgICAgKz0gJChsb2NhbGVfdGVzdF9zdWl0ZSkgdHN0LWRpZ2l0cyB0c3Qtc2V0bG9jYWxlIGJ1Zy1pY29udi10cmFucyBcCisgCXRzdC1sZWFrcyB0c3QtbWJzd2NzMSB0c3QtbWJzd2NzMiB0c3QtbWJzd2NzMyB0c3QtbWJzd2NzNCB0c3QtbWJzd2NzNSBcCisgCXRzdC1tYnN3Y3M2IHRzdC14bG9jYWxlMSB0c3QteGxvY2FsZTIgYnVnLXVzZXNldGxvY2FsZSBcCisgCXRzdC1zdHJmbW9uMSB0c3Qtc3NjYW5mIGJ1Zy1zZXRsb2NhbGUxIHRzdC1zZXRsb2NhbGUyIHRzdC1zZXRsb2NhbGUzIFwKKyAJdHN0LXdjdHlwZQorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSkKKyB0ZXN0cy1zdGF0aWMgPSBidWctc2V0bG9jYWxlMS1zdGF0aWMKKyB0ZXN0cyArPSAkKHRlc3RzLXN0YXRpYykKKy1pZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorK2VuZGlmCisraWZlcSAoeWVzeSwkKGJ1aWxkLXNoYXJlZCkkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpKQorIGlmbmVxIChubywkKFBFUkwpKQorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpbXRyYWNlLXRzdC1sZWFrcy5vdXQKKyBlbmRpZgorQEAgLTk1LDYgKzExMSw3IEBAIHRlc3RzOiAkKG9iamRpcikvaWNvbnZkYXRhL2djb252LW1vZHVsZXMKKyB0ZXN0cy1zdGF0aWMgKz0gdHN0LWxhbmdpbmZvLXN0YXRpYworIAorIGlmZXEgKCQocnVuLWJ1aWx0LXRlc3RzKSx5ZXMpCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpKQorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpc29ydC10ZXN0Lm91dCAkKG9ianBmeCl0c3QtZm1vbi5vdXQgXAorIAkJICQob2JqcGZ4KXRzdC1sb2NhbGUub3V0ICQob2JqcGZ4KXRzdC1ycG1hdGNoLm91dCBcCisgCQkgJChvYmpwZngpdHN0LXRyYW5zLm91dCAkKG9ianBmeCl0c3QtY3R5cGUub3V0IFwKK0BAIC0xMDksNiArMTI2LDcgQEAgTE9DQUxFUyA6PSBkZV9ERS5JU08tODg1OS0xIGRlX0RFLlVURi04IGVuX1VTLkFOU0lfWDMuNC0xOTY4IFwKKyAJICAgdHJfVFIuSVNPLTg4NTktOSBlbl9HQi5VVEYtOCB1a19VQS5VVEYtOAorIGluY2x1ZGUgLi4vZ2VuLWxvY2FsZXMubWsKKyBlbmRpZgorK2VuZGlmCisgCisgaW5jbHVkZSAuLi9SdWxlcworIAorQEAgLTE5MSw2ICsyMDksMTEgQEAgZW5kaWYKKyAKKyBpbmNsdWRlIFNVUFBPUlRFRAorIAorKyMgT25seSBpbnN0YWxsIGxvY2FsZSBkYXRhIGlmIE9QVElPTl9FR0xJQkNfTE9DQUxFUyBpcyBzZWxlY3RlZC4KKytpZm5lcSAoJChPUFRJT05fRUdMSUJDX0xPQ0FMRVMpLHkpCisrU1VQUE9SVEVELUxPQ0FMRVMgOj0KKytlbmRpZgorKworIElOU1RBTEwtU1VQUE9SVEVELUxPQ0FMRVM9JChhZGRwcmVmaXggaW5zdGFsbC0sICQoU1VQUE9SVEVELUxPQ0FMRVMpKQorIAorICMgU29tZXRpbWVzIHRoZSB3aG9sZSBjb2xsZWN0aW9uIG9mIGxvY2FsZSBmaWxlcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorZGlmZiAtLWdpdCBhL2xvZ2luL01ha2VmaWxlIGIvbG9naW4vTWFrZWZpbGUKK2luZGV4IDBmNGJiMjIuLjQwMzZkZGIgMTAwNjQ0CistLS0gYS9sb2dpbi9NYWtlZmlsZQorKysrIGIvbG9naW4vTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw3IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBsb2dpbiBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisgCisgc3ViZGlyCTo9IGxvZ2luCisgCitAQCAtMjUsMTQgKzI2LDE2IEBAIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorIGhlYWRlcnMJOj0gdXRtcC5oIGJpdHMvdXRtcC5oIGxhc3Rsb2cuaCBwdHkuaAorIAorLXJvdXRpbmVzIDo9IGdldGxvZ2luIGdldGxvZ2luX3Igc2V0bG9naW4gZ2V0bG9naW5fcl9jaGsgXAorLQkgICAgZ2V0dXRlbnQgZ2V0dXRlbnRfciBnZXR1dGlkIGdldHV0bGluZSBnZXR1dGlkX3IgZ2V0dXRsaW5lX3IgXAorLQkgICAgdXRtcF9maWxlIHV0bXBuYW1lIHVwZHd0bXAgZ2V0cHQgZ3JhbnRwdCB1bmxvY2twdCBwdHNuYW1lIFwKKy0JICAgIHB0c25hbWVfcl9jaGsKKytyb3V0aW5lcyA6PSBnZXRwdCBncmFudHB0IHVubG9ja3B0IHB0c25hbWUgcHRzbmFtZV9yX2NoaworK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19VVE1QKSBcCisrCSArPSBnZXR1dGVudCBnZXR1dGVudF9yIGdldHV0aWQgZ2V0dXRsaW5lIGdldHV0aWRfciBnZXR1dGxpbmVfciBcCisrCSAgICB1dG1wX2ZpbGUgdXRtcG5hbWUgdXBkd3RtcAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19HRVRMT0dJTikgKz0gZ2V0bG9naW4gZ2V0bG9naW5fciBnZXRsb2dpbl9yX2NoaworK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19CU0QpICs9IHNldGxvZ2luCisgCisgQ0ZMQUdTLWdyYW50cHQuYyA9IC1ETElCRVhFQ0RJUj0nIiQobGliZXhlY2RpcikiJworIAorLW90aGVycyA9IHV0bXBkdW1wCisrb3RoZXJzLSQoT1BUSU9OX0VHTElCQ19VVE1QKSArPSB1dG1wZHVtcAorIAorIGlmZXEgKHllcywkKGJ1aWxkLXB0LWNob3duKSkKKyBvdGhlcnMgKz0gcHRfY2hvd24KK0BAIC00Niw4ICs0OSw4IEBAIHZwYXRoICUuYyBwcm9ncmFtcworIHRlc3RzIDo9IHRzdC11dG1wIHRzdC11dG1weCB0c3QtZ3JhbnRwdCB0c3QtcHRzbmFtZSB0c3QtZ2V0bG9naW4KKyAKKyAjIEJ1aWxkIHRoZSAtbHV0aWwgbGlicmFyeSB3aXRoIHRoZXNlIGV4dHJhIGZ1bmN0aW9ucy4KKy1leHRyYS1saWJzICAgICAgOj0gbGlidXRpbAorLWV4dHJhLWxpYnMtb3RoZXJzIDo9ICQoZXh0cmEtbGlicykKKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19VVE1QKSA6PSBsaWJ1dGlsCisrZXh0cmEtbGlicy1vdGhlcnMgOj0gJChleHRyYS1saWJzLXkpCisgCisgbGlidXRpbC1yb3V0aW5lczo9IGxvZ2luIGxvZ2luX3R0eSBsb2dvdXQgbG9nd3RtcCBvcGVucHR5IGZvcmtwdHkKKyAKK2RpZmYgLS1naXQgYS9tYWxsb2MvTWFrZWZpbGUgYi9tYWxsb2MvTWFrZWZpbGUKK2luZGV4IDY3ZWQyOTMuLjI3MmNhNGQgMTAwNjQ0CistLS0gYS9tYWxsb2MvTWFrZWZpbGUKKysrKyBiL21hbGxvYy9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlNYWtlZmlsZSBmb3IgbWFsbG9jIHJvdXRpbmVzCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gbWFsbG9jCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMzksOSArNDEsMTUgQEAgaW5zdGFsbC1saWIgOj0gbGlibWNoZWNrLmEKKyBub24tbGliLmEgOj0gbGlibWNoZWNrLmEKKyAKKyAjIEFkZGl0aW9uYWwgbGlicmFyeS4KKytpZmVxICgkKE9QVElPTl9FR0xJQkNfTUVNVVNBR0UpLHkpCisgZXh0cmEtbGlicyA9IGxpYm1lbXVzYWdlCisgZXh0cmEtbGlicy1vdGhlcnMgPSAkKGV4dHJhLWxpYnMpCisgCisraWZkZWYgT1BUSU9OX0VHTElCQ19NRU1VU0FHRV9ERUZBVUxUX0JVRkZFUl9TSVpFCisrQ1BQRkxBR1MtbWVtdXNhZ2UgKz0gLURfX09QVElPTl9FR0xJQkNfTUVNVVNBR0VfREVGQVVMVF9CVUZGRVJfU0laRT0kKE9QVElPTl9FR0xJQkNfTUVNVVNBR0VfREVGQVVMVF9CVUZGRVJfU0laRSkKKytlbmRpZgorK2VuZGlmCisrCisgbGlibWVtdXNhZ2Utcm91dGluZXMgPSBtZW11c2FnZQorIGxpYm1lbXVzYWdlLWluaGliaXQtbyA9ICQoZmlsdGVyLW91dCAub3MsJChvYmplY3Qtc3VmZml4ZXMpKQorIAorQEAgLTcxLDcgKzc5LDcgQEAgZW5kaWYKKyAjIFVubGVzcyB3ZSBnZXQgYSB0ZXN0IGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIGxpYmdkIHdoaWNoIGFsc28gd29ya3MKKyAjIGZvciBjcm9zcy1jb21waWxpbmcgd2UgZGlzYWJsZSB0aGUgbWVtdXNhZ2VzdGF0IGdlbmVyYXRpb24gaW4gdGhpcworICMgc2l0dWF0aW9uLgorLWlmbmVxICgkKGNyb3NzLWNvbXBpbGluZykseWVzKQorK2lmZXEgKCQoY3Jvc3MtY29tcGlsaW5nKSQoT1BUSU9OX0VHTElCQ19NRU1VU0FHRSksbm95KQorICMgSWYgdGhlIGdkIGxpYnJhcnkgaXMgYXZhaWxhYmxlIHdlIGJ1aWxkIHRoZSBgbWVtdXNhZ2VzdGF0JyBwcm9ncmFtLgorIGlmbmVxICgkKExJQkdEKSxubykKKyBvdGhlcnM6ICQob2JqcGZ4KW1lbXVzYWdlCitkaWZmIC0tZ2l0IGEvbWFsbG9jL21lbXVzYWdlLmMgYi9tYWxsb2MvbWVtdXNhZ2UuYworaW5kZXggYTU3YmE4ZS4uNzMyYmE5ZCAxMDA2NDQKKy0tLSBhL21hbGxvYy9tZW11c2FnZS5jCisrKysgYi9tYWxsb2MvbWVtdXNhZ2UuYworQEAgLTMzLDYgKzMzLDcgQEAKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisgI2luY2x1ZGUgPHN5cy90aW1lLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2luY2x1ZGUgPG1lbXVzYWdlLmg+CisgCitAQCAtOTMsNyArOTQsMTEgQEAgc3RhdGljIF9fdGhyZWFkIHVpbnRwdHJfdCBzdGFydF9zcDsKKyAjZGVmaW5lIHBlYWtfc3RhY2sgICAgICBwZWFrX3VzZVsxXQorICNkZWZpbmUgcGVha190b3RhbCAgICAgIHBlYWtfdXNlWzJdCisgCistI2RlZmluZSBERUZBVUxUX0JVRkZFUl9TSVpFICAgICAzMjc2OAorKyNpZm5kZWYgX19PUFRJT05fRUdMSUJDX01FTVVTQUdFX0RFRkFVTFRfQlVGRkVSX1NJWkUKKysjIGRlZmluZSBERUZBVUxUX0JVRkZFUl9TSVpFCTMyNzY4CisrI2Vsc2UKKysjIGRlZmluZSBERUZBVUxUX0JVRkZFUl9TSVpFCV9fT1BUSU9OX0VHTElCQ19NRU1VU0FHRV9ERUZBVUxUX0JVRkZFUl9TSVpFCisrI2VuZGlmCisgc3RhdGljIHNpemVfdCBidWZmZXJfc2l6ZTsKKyAKKyBzdGF0aWMgaW50IGZkID0gLTE7CitkaWZmIC0tZ2l0IGEvbWFsbG9jL21lbXVzYWdlLnNoIGIvbWFsbG9jL21lbXVzYWdlLnNoCitpbmRleCA4YWI4Y2MyLi5kMThmNDQ2IDEwMDc1NQorLS0tIGEvbWFsbG9jL21lbXVzYWdlLnNoCisrKysgYi9tYWxsb2MvbWVtdXNhZ2Uuc2gKK0BAIC0zNSw3ICszNSw3IEBAIGRvX21pc3NpbmdfYXJnKCkgeworIAorICMgUHJpbnQgaGVscCBtZXNzYWdlCisgZG9faGVscCgpIHsKKy0gIGVjaG8gJCJVc2FnZTogbWVtdXNhZ2UgW09QVElPTl0uLi4gUFJPR1JBTSBbUFJPR1JBTU9QVElPTl0uLi4KKysgIHByaW50ZiAkIlVzYWdlOiBtZW11c2FnZSBbT1BUSU9OXS4uLiBQUk9HUkFNIFtQUk9HUkFNT1BUSU9OXS4uLgorIFByb2ZpbGUgbWVtb3J5IHVzYWdlIG9mIFBST0dSQU0uCisgCisgICAgLW4sLS1wcm9nbmFtZT1OQU1FICAgICBOYW1lIG9mIHRoZSBwcm9ncmFtIGZpbGUgdG8gcHJvZmlsZQorZGlmZiAtLWdpdCBhL21hdGgvTWFrZWZpbGUgYi9tYXRoL01ha2VmaWxlCitpbmRleCA2Mzg4YmFlLi5lZDFjNTExIDEwMDY0NAorLS0tIGEvbWF0aC9NYWtlZmlsZQorKysrIGIvbWF0aC9NYWtlZmlsZQorQEAgLTIxLDYgKzIxLDggQEAgc3ViZGlyCQk6PSBtYXRoCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworICMgSW5zdGFsbGVkIGhlYWRlciBmaWxlcy4KKyBoZWFkZXJzCQk6PSBtYXRoLmggYml0cy9tYXRoY2FsbHMuaCBiaXRzL21hdGhpbmxpbmUuaCBiaXRzL2h1Z2VfdmFsLmggXAorIAkJICAgYml0cy9odWdlX3ZhbGYuaCBiaXRzL2h1Z2VfdmFsbC5oIGJpdHMvaW5mLmggYml0cy9uYW4uaCBcCitAQCAtMzQsOCArMzYsOCBAQCBhdXgJCTo9IHNldGZwdWN3IGZwdV9jb250cm9sCisgCisgIyBCdWlsZCB0aGUgLWxtIGxpYnJhcnkuCisgCistZXh0cmEtbGlicwk6PSBsaWJtCistZXh0cmEtbGlicy1vdGhlcnMgPSAkKGV4dHJhLWxpYnMpCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfTElCTSkgOj0gbGlibQorK2V4dHJhLWxpYnMtb3RoZXJzLSQoT1BUSU9OX0VHTElCQ19MSUJNKSA9ICQoZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfTElCTSkpCisgCisgbGlibS1zdXBwb3J0ID0gc19saWJfdmVyc2lvbiBzX21hdGhlcnIgc19zaWduZ2FtCQkJXAorIAkgICAgICAgZmNscmV4Y3B0IGZnZXRleGNwdGZsZyBmcmFpc2VleGNwdCBmc2V0ZXhjcHRmbGcJCVwKK2RpZmYgLS1naXQgYS9taXNjL01ha2VmaWxlIGIvbWlzYy9NYWtlZmlsZQoraW5kZXggYWVjYjBkYS4uZTZiN2MyMyAxMDA2NDQKKy0tLSBhL21pc2MvTWFrZWZpbGUKKysrKyBiL21pc2MvTWFrZWZpbGUKK0BAIC0xOSw2ICsxOSwxMCBAQAorICMJU3ViLW1ha2VmaWxlIGZvciBtaXNjIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworIAorKyMgU29tZSBzeXN0ZW0tZGVwZW5kZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMgdXNlIG9wdGlvbgorKyMgZ3JvdXBzIChzZWUgc3lzZGVwcy91bml4L3N5c3YvbGludXgvTWFrZWZpbGUsIGZvciBleGFtcGxlKS4KKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IG1pc2MKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC00Niw0MCArNTAsNDcgQEAgcm91dGluZXMgOj0gYnJrIHNicmsgc3N0ayBpb2N0bCBcCisgCSAgICBzZWxlY3QgcHNlbGVjdCBcCisgCSAgICBhY2N0IGNocm9vdCBmc3luYyBzeW5jIGZkYXRhc3luYyBzeW5jZnMgcmVib290IFwKKyAJICAgIGdldGhvc3RpZCBzZXRob3N0aWQgXAorLQkgICAgcmV2b2tlIHZoYW5ndXAgXAorKwkgICAgdmhhbmd1cCBcCisgCSAgICBzd2Fwb24gc3dhcG9mZiBta3RlbXAgbWtzdGVtcCBta3N0ZW1wNjQgbWtkdGVtcCBcCisgCSAgICBta29zdGVtcCBta29zdGVtcDY0IG1rc3RlbXBzIG1rc3RlbXBzNjQgbWtvc3RlbXBzIG1rb3N0ZW1wczY0IFwKKyAJICAgIHVhbGFybSB1c2xlZXAgXAorIAkgICAgZ3R0eSBzdHR5IFwKKyAJICAgIHB0cmFjZSBcCistCSAgICBmc3RhYiBtbnRlbnQgbW50ZW50X3IgXAorKwkgICAgbW50ZW50IG1udGVudF9yIFwKKyAJICAgIHV0aW1lcyBsdXRpbWVzIGZ1dGltZXMgZnV0aW1lc2F0IFwKKyAJICAgIHRydW5jYXRlIGZ0cnVuY2F0ZSB0cnVuY2F0ZTY0IGZ0cnVuY2F0ZTY0IFwKKy0JICAgIGNoZmxhZ3MgZmNoZmxhZ3MgXAorIAkgICAgaW5zcmVtcXVlIGdldHR0eWVudCBnZXR1c2Vyc2hlbGwgZ2V0cGFzcyB0dHlzbG90IFwKKyAJICAgIHN5c2xvZyBzeXNjYWxsIGRhZW1vbiBcCisgCSAgICBtbWFwIG1tYXA2NCBtdW5tYXAgbXByb3RlY3QgbXN5bmMgbWFkdmlzZSBtaW5jb3JlIHJlbWFwX2ZpbGVfcGFnZXNcCisgCSAgICBtbG9jayBtdW5sb2NrIG1sb2NrYWxsIG11bmxvY2thbGwgXAorLQkgICAgZWZnY3Z0IGVmZ2N2dF9yIHFlZmdjdnQgcWVmZ2N2dF9yIFwKKyAJICAgIGhzZWFyY2ggaHNlYXJjaF9yIHRzZWFyY2ggbHNlYXJjaCBcCisgCSAgICBlcnIgZXJyb3IgdXN0YXQgXAorLQkgICAgZ2V0c3lzc3RhdHMgZGlybmFtZSByZWdleHAgXAorKwkgICAgZ2V0c3lzc3RhdHMgZGlybmFtZSBcCisgCSAgICBnZXRsb2FkYXZnIGdldGNsa3RjayBcCisgCSAgICBmZ2V0eGF0dHIgZmxpc3R4YXR0ciBmcmVtb3ZleGF0dHIgZnNldHhhdHRyIGdldHhhdHRyIFwKKyAJICAgIGxpc3R4YXR0ciBsZ2V0eGF0dHIgbGxpc3R4YXR0ciBscmVtb3ZleGF0dHIgbHNldHhhdHRyIFwKKyAJICAgIHJlbW92ZXhhdHRyIHNldHhhdHRyIGdldGF1eHZhbCBpZnVuYy1pbXBsLWxpc3QKKyAKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9SRUdFWFApICs9IHJlZ2V4cAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19GU1RBQikgKz0gZnN0YWIKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfQlNEKSArPSBjaGZsYWdzIGZjaGZsYWdzIHJldm9rZQorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19GQ1ZUKSArPSBlZmdjdnQgZWZnY3Z0X3IgcWVmZ2N2dCBxZWZnY3Z0X3IKKysKKyBnZW5lcmF0ZWQgKz0gdHN0LWVycm9yMS5tdHJhY2UgdHN0LWVycm9yMS1tZW0ub3V0CisgCisgYXV4IDo9IGluaXQtbWlzYworIGluc3RhbGwtbGliIDo9IGxpYmcuYQorIGdwbDJsZ3BsIDo9IGVycm9yLmMgZXJyb3IuaAorIAorLXRlc3RzIDo9IHRzdC1kaXJuYW1lIHRzdC10c2VhcmNoIHRzdC1mZHNldCB0c3QtZWZnY3Z0IHRzdC1tbnRlbnQgdHN0LWhzZWFyY2ggXAorLQkgdHN0LWVycm9yMSB0c3QtcHNlbGVjdCB0c3QtaW5zcmVtcXVlIHRzdC1tbnRlbnQyIGJ1Zy1oc2VhcmNoMQorK3Rlc3RzIDo9IHRzdC1kaXJuYW1lIHRzdC10c2VhcmNoIHRzdC1mZHNldCB0c3QtbW50ZW50IHRzdC1oc2VhcmNoIFwKKysJIHRzdC1wc2VsZWN0IHRzdC1pbnNyZW1xdWUgdHN0LW1udGVudDIgYnVnLWhzZWFyY2gxCisrdGVzdHMtJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykgKz0gdHN0LWVycm9yMQorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19GQ1ZUKSArPSB0c3QtZWZnY3Z0CisgaWZlcSAoJChydW4tYnVpbHQtdGVzdHMpLHllcykKKytpZmVxICh5LCQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pKQorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpdHN0LWVycm9yMS1tZW0ub3V0CisgZW5kaWYKKytlbmRpZgorIAorIENGTEFHUy1zZWxlY3QuYyA9IC1mZXhjZXB0aW9ucyAtZmFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzCisgQ0ZMQUdTLXRzZWFyY2guYyA9ICQodXNlcy1jYWxsYmFja3MpCitkaWZmIC0tZ2l0IGEvbWlzYy9lcnIuYyBiL21pc2MvZXJyLmMKK2luZGV4IDdiOTgxNTcuLmVmY2U4ZDUgMTAwNjQ0CistLS0gYS9taXNjL2Vyci5jCisrKysgYi9taXNjL2Vyci5jCitAQCAtMjIsNiArMjIsNyBAQAorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaW5jbHVkZSA8d2NoYXIuaD4KKyAjZGVmaW5lIGZsb2NrZmlsZShzKSBfSU9fZmxvY2tmaWxlIChzKQorQEAgLTM3LDYgKzM4LDcgQEAgZXh0ZXJuIGNoYXIgKl9fcHJvZ25hbWU7CisgICB2YV9lbmQgKGFwKTsJCQkJCQkJCSAgICAgIFwKKyB9CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBzdGF0aWMgdm9pZAorIGNvbnZlcnRfYW5kX3ByaW50IChjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0IGFwKQorIHsKK0BAIC04MSw2ICs4Myw3IEBAIGNvbnZlcnRfYW5kX3ByaW50IChjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0IGFwKQorIAorICAgX192ZndwcmludGYgKHN0ZGVyciwgd2Zvcm1hdCwgYXApOworIH0KKysjZW5kaWYKKyAKKyB2b2lkCisgdndhcm54IChjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0IGFwKQorQEAgLTg4LDkgKzkxLDEzIEBAIHZ3YXJueCAoY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBhcCkKKyAgIGZsb2NrZmlsZSAoc3RkZXJyKTsKKyAgIGlmIChfSU9fZndpZGUgKHN0ZGVyciwgMCkgPiAwKQorICAgICB7CisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyAgICAgICBfX2Z3cHJpbnRmIChzdGRlcnIsIEwiJXM6ICIsIF9fcHJvZ25hbWUpOworICAgICAgIGNvbnZlcnRfYW5kX3ByaW50IChmb3JtYXQsIGFwKTsKKyAgICAgICBwdXR3Y191bmxvY2tlZCAoTCdcbicsIHN0ZGVycik7CisrI2Vsc2UKKysgICAgICBhYm9ydCAoKTsKKysjZW5kaWYKKyAgICAgfQorICAgZWxzZQorICAgICB7CitAQCAtMTExLDYgKzExOCw3IEBAIHZ3YXJuIChjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0IGFwKQorICAgZmxvY2tmaWxlIChzdGRlcnIpOworICAgaWYgKF9JT19md2lkZSAoc3RkZXJyLCAwKSA+IDApCisgICAgIHsKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworICAgICAgIF9fZndwcmludGYgKHN0ZGVyciwgTCIlczogIiwgX19wcm9nbmFtZSk7CisgICAgICAgaWYgKGZvcm1hdCkKKyAJeworQEAgLTExOSw2ICsxMjcsOSBAQCB2d2FybiAoY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBhcCkKKyAJfQorICAgICAgIF9fc2V0X2Vycm5vIChlcnJvcik7CisgICAgICAgX19md3ByaW50ZiAoc3RkZXJyLCBMIiVtXG4iKTsKKysjZWxzZQorKyAgICAgIGFib3J0ICgpOworKyNlbmRpZgorICAgICB9CisgICBlbHNlCisgICAgIHsKK2RpZmYgLS1naXQgYS9taXNjL2Vycm9yLmMgYi9taXNjL2Vycm9yLmMKK2luZGV4IGFhYTEyMGQuLmQ2Y2JjODIgMTAwNjQ0CistLS0gYS9taXNjL2Vycm9yLmMKKysrKyBiL21pc2MvZXJyb3IuYworQEAgLTM1LDYgKzM1LDcgQEAKKyAjZW5kaWYKKyAKKyAjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisgIyBpbmNsdWRlIDxzdGRib29sLmg+CisgIyBpbmNsdWRlIDxzdGRpbnQuaD4KK0BAIC0yMDUsNiArMjA2LDcgQEAgZXJyb3JfdGFpbCAoaW50IHN0YXR1cywgaW50IGVycm51bSwgY29uc3QgY2hhciAqbWVzc2FnZSwgdmFfbGlzdCBhcmdzKQorICNpZiBfTElCQworICAgaWYgKF9JT19md2lkZSAoc3RkZXJyLCAwKSA+IDApCisgICAgIHsKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKG1lc3NhZ2UpICsgMTsKKyAgICAgICB3Y2hhcl90ICp3bWVzc2FnZSA9IE5VTEw7CisgICAgICAgbWJzdGF0ZV90IHN0OworQEAgLTI2NSw2ICsyNjcsOSBAQCBlcnJvcl90YWlsIChpbnQgc3RhdHVzLCBpbnQgZXJybnVtLCBjb25zdCBjaGFyICptZXNzYWdlLCB2YV9saXN0IGFyZ3MpCisgCisgICAgICAgaWYgKHVzZV9tYWxsb2MpCisgCWZyZWUgKHdtZXNzYWdlKTsKKysjZWxzZQorKyAgICAgIGFib3J0ICgpOworKyNlbmRpZgorICAgICB9CisgICBlbHNlCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvbWlzYy90c3QtZWZnY3Z0LmMgYi9taXNjL3RzdC1lZmdjdnQuYworaW5kZXggNTA4M2ZlYy4uNzllZDM2YyAxMDA2NDQKKy0tLSBhL21pc2MvdHN0LWVmZ2N2dC5jCisrKysgYi9taXNjL3RzdC1lZmdjdnQuYworQEAgLTU5LDcgKzU5LDcgQEAgc3RhdGljIHRlc3RjYXNlIGVjdnRfdGVzdHNbXSA9CisgICB7IDEyMy4wMSwgLTQsIDMsICIiIH0sCisgICB7IDEyNi43MSwgLTQsIDMsICIiIH0sCisgICB7IDAuMCwgNCwgMSwgIjAwMDAiIH0sCistI2lmIERCTF9NQU5UX0RJRyA9PSA1MworKyNpZiBEQkxfTUFOVF9ESUcgPT0gNTMgJiYgIShkZWZpbmVkIF9fcG93ZXJwY19fICYmIGRlZmluZWQgX19OT19GUFJTX18gJiYgIWRlZmluZWQgX1NPRlRfRkxPQVQgJiYgIWRlZmluZWQgX1NPRlRfRE9VQkxFKQorICAgeyAweDFwLTEwNzQsIDMsIC0zMjMsICI0OTQiIH0sCisgICB7IC0weDFwLTEwNzQsIDMsIC0zMjMsICI0OTQiIH0sCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvbmlzL01ha2VmaWxlIGIvbmlzL01ha2VmaWxlCitpbmRleCAwMzdlNjc0Li5jOTY3ODUwIDEwMDY0NAorLS0tIGEvbmlzL01ha2VmaWxlCisrKysgYi9uaXMvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJTWFrZWZpbGUgZm9yIE5JUy9OSVMrIHBhcnQuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gbmlzCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMzAsMTkgKzMyLDI2IEBAIGVuZGlmCisgCisgIyBUaGVzZSBhcmUgdGhlIGRhdGFiYXNlcyBhdmFpbGFibGUgZm9yIHRoZSBuaXMgKGFuZCBwZXJoYXBzIGxhdGVyIG5pc3BsdXMpCisgIyBzZXJ2aWNlLiAgVGhpcyBtdXN0IGJlIGEgc3VwZXJzZXQgb2YgdGhlIHNlcnZpY2VzIGluIG5zcy4KKy1kYXRhYmFzZXMJCT0gcHJvdG8gc2VydmljZSBob3N0cyBuZXR3b3JrIGdycCBwd2QgcnBjIGV0aGVycyBcCistCQkJICBzcHdkIG5ldGdycCBhbGlhcyBwdWJsaWNrZXkKKytkYXRhYmFzZXMteQkJOj0gcHJvdG8gc2VydmljZSBob3N0cyBuZXR3b3JrIGdycCBwd2QgcnBjIGV0aGVycyBcCisrCQkJICAgc3B3ZCBuZXRncnAgcHVibGlja2V5CisrZGF0YWJhc2VzLSQoT1BUSU9OX0VHTElCQ19EQl9BTElBU0VTKSArPSBhbGlhcworIAorICMgU3BlY2lmeSBydWxlcyBmb3IgdGhlIG5zc18qIG1vZHVsZXMuCistc2VydmljZXMJCTo9IG5pcyBuaXNwbHVzIGNvbXBhdAorKyMgVGhlICdjb21wYXQnIG1vZHVsZSBpbmNsdWRlcyBuaXMgc3VwcG9ydCwgYW5kIHRoZSAnbnNzJyBkaXJlY3RvcnkKKysjIGluY2x1ZGVzIGEgYmFyZS1ib25lcyAiZmlsZXMiIGxpYnJhcnksIHNvIHdlJ2xsIGluY2x1ZGUgJ2NvbXBhdCcgaW4KKysjIE9QVElPTl9FR0xJQkNfTklTLgorK3NlcnZpY2VzLXkJCTo9Cisrc2VydmljZXMtJChPUFRJT05fRUdMSUJDX05JUykgKz0gbmlzIG5pc3BsdXMgY29tcGF0CisrCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfTklTKSArPSBsaWJuc2wKKytleHRyYS1saWJzLXkJCSs9ICQoc2VydmljZXMteTolPWxpYm5zc18lKQorIAorLWV4dHJhLWxpYnMJCT0gbGlibnNsICQoc2VydmljZXM6JT1saWJuc3NfJSkKKyAjIFRoZXNlIGxpYnJhcmllcyB3aWxsIGJlIGJ1aWx0IGluIHRoZSBgb3RoZXJzJyBwYXNzIHJhdGhlciB0aGFuCisgIyB0aGUgYGxpYicgcGFzcywgYmVjYXVzZSB0aGV5IGRlcGVuZCBvbiBsaWJjLnNvIGJlaW5nIGJ1aWx0IGFscmVhZHkuCistZXh0cmEtbGlicy1vdGhlcnMJPSAkKGV4dHJhLWxpYnMpCisrZXh0cmEtbGlicy1vdGhlcnMteQkrPSAkKGV4dHJhLWxpYnMteSkKKyAKKyAjIFRoZSBzb3VyY2VzIGFyZSBmb3VuZCBpbiB0aGUgYXBwcm9wcmlhdGUgc3ViZGlyLgorLXN1YmRpci1kaXJzID0gJChzZXJ2aWNlczolPW5zc18lKQorK3N1YmRpci1kaXJzID0gJChzZXJ2aWNlcy15OiU9bnNzXyUpCisgdnBhdGggJS5jICQoc3ViZGlyLWRpcnMpCisgCisgbGlibnNsLXJvdXRpbmVzID0geXBfeGRyIHlwY2xudCB5cHVwZGF0ZV94ZHIgXAorQEAgLTYwLDExICs2OSwxMSBAQCBsaWJuc2wtcm91dGluZXMgPSB5cF94ZHIgeXBjbG50IHlwdXBkYXRlX3hkciBcCisgbGlibnNzX2NvbXBhdC1yb3V0aW5lcwk6PSAkKGFkZHByZWZpeCBjb21wYXQtLGdycCBwd2Qgc3B3ZCBpbml0Z3JvdXBzKQorIGxpYm5zc19jb21wYXQtaW5oaWJpdC1vCT0gJChmaWx0ZXItb3V0IC5vcywkKG9iamVjdC1zdWZmaXhlcykpCisgCistbGlibnNzX25pcy1yb3V0aW5lcwk6PSAkKGFkZHByZWZpeCBuaXMtLCQoZGF0YWJhc2VzKSkgbmlzLWluaXRncm91cHMgXAorK2xpYm5zc19uaXMtcm91dGluZXMJOj0gJChhZGRwcmVmaXggbmlzLSwkKGRhdGFiYXNlcy15KSkgbmlzLWluaXRncm91cHMgXAorIAkJCSAgIG5zcy1uaXMKKyBsaWJuc3NfbmlzLWluaGliaXQtbwk9ICQoZmlsdGVyLW91dCAub3MsJChvYmplY3Qtc3VmZml4ZXMpKQorIAorLWxpYm5zc19uaXNwbHVzLXJvdXRpbmVzCTo9ICQoYWRkcHJlZml4IG5pc3BsdXMtLCQoZGF0YWJhc2VzKSkgbmlzcGx1cy1wYXJzZXIgXAorK2xpYm5zc19uaXNwbHVzLXJvdXRpbmVzCTo9ICQoYWRkcHJlZml4IG5pc3BsdXMtLCQoZGF0YWJhc2VzLXkpKSBuaXNwbHVzLXBhcnNlciBcCisgCQkJICAgbnNzLW5pc3BsdXMgbmlzcGx1cy1pbml0Z3JvdXBzCisgbGlibnNzX25pc3BsdXMtaW5oaWJpdC1vID0gJChmaWx0ZXItb3V0IC5vcywkKG9iamVjdC1zdWZmaXhlcykpCisgCitAQCAtODAsMTIgKzg5LDEyIEBAIGxpYm5zbC1saWJjID0gJChjb21tb24tb2JqcGZ4KWxpbmtvYmovbGliYy5zbworICMgVGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlIHNldHRpbmcgdG8gbGluayBvYmplY3RzIHVzaW5nIGRlcHJlY2F0ZWQKKyAjIFJQQyBpbnRlcmZhY2VzIHdpdGggdGhlIHZlcnNpb24gb2YgbGliYy5zbyB0aGF0IG1ha2VzIHRoZW0gYXZhaWxhYmxlCisgIyBmb3IgbmV3IGxpbmtzOgorLSQoc2VydmljZXM6JT0kKG9ianBmeClsaWJuc3NfJS5zbykgJChvYmpwZngpbGlibnNsLnNvOiBcCisrJChzZXJ2aWNlcy15OiU9JChvYmpwZngpbGlibnNzXyUuc28pICQob2JqcGZ4KWxpYm5zbC5zbzogXAorICAgbGliYy1mb3ItbGluayA9ICQobGlibnNsLWxpYmMpCisgCisgCisgaWZlcSAoJChidWlsZC1zaGFyZWQpLHllcykKKy0kKG90aGVyczolPSQob2JqcGZ4KSUpOiAkKG9ianBmeClsaWJuc2wuc28kKGxpYm5zbC5zby12ZXJzaW9uKQorKyQob3RoZXJzLXk6JT0kKG9ianBmeCklKTogJChvYmpwZngpbGlibnNsLnNvJChsaWJuc2wuc28tdmVyc2lvbikKKyBlbHNlCistJChvdGhlcnM6JT0kKG9ianBmeCklKTogJChvYmpwZngpbGlibnNsLmEKKyskKG90aGVycy15OiU9JChvYmpwZngpJSk6ICQob2JqcGZ4KWxpYm5zbC5hCisgZW5kaWYKK2RpZmYgLS1naXQgYS9ucHRsL01ha2VmaWxlIGIvbnB0bC9NYWtlZmlsZQoraW5kZXggYWFjYTBhNC4uNTk2Y2EzYyAxMDA2NDQKKy0tLSBhL25wdGwvTWFrZWZpbGUKKysrKyBiL25wdGwvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBOUFRMIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gbnB0bAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTExOCw3ICsxMjAsNyBAQCBsaWJwdGhyZWFkLXJvdXRpbmVzID0gbnB0bC1pbml0IHZhcnMgZXZlbnRzIHZlcnNpb24gcHQtaW50ZXJwIFwKKyAJCSAgICAgIHB0LXJhaXNlIHB0LXN5c3RlbSBcCisgCQkgICAgICBmbG9ja2ZpbGUgZnRyeWxvY2tmaWxlIGZ1bmxvY2tmaWxlIFwKKyAJCSAgICAgIHNpZ2FjdGlvbiBcCistCQkgICAgICBoZXJybm8gcmVzIHB0LWFsbG9jcnRzaWcgXAorKwkJICAgICAgcHQtYWxsb2NydHNpZyBcCisgCQkgICAgICBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkcyBcCisgCQkgICAgICBwdGhyZWFkX2dldGFmZmluaXR5IHB0aHJlYWRfc2V0YWZmaW5pdHkgXAorIAkJICAgICAgcHRocmVhZF9hdHRyX2dldGFmZmluaXR5IHB0aHJlYWRfYXR0cl9zZXRhZmZpbml0eSBcCitAQCAtMTM4LDggKzE0MCwxMCBAQCBsaWJwdGhyZWFkLXJvdXRpbmVzID0gbnB0bC1pbml0IHZhcnMgZXZlbnRzIHZlcnNpb24gcHQtaW50ZXJwIFwKKyAjCQkgICAgICBwdGhyZWFkX3NldGdpZCBwdGhyZWFkX3NldGVnaWQgcHRocmVhZF9zZXRyZWdpZCBcCisgIwkJICAgICAgcHRocmVhZF9zZXRyZXNnaWQKKyAKKytsaWJwdGhyZWFkLXJvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSA6PSBoZXJybm8gcmVzCisgbGlicHRocmVhZC1zaGFyZWQtb25seS1yb3V0aW5lcyA9IHZlcnNpb24gcHQtaW50ZXJwIHB0LWFsbG9jcnRzaWcgXAorIAkJCQkgIHVud2luZC1mb3JjZWR1bndpbmQKKysKKyBsaWJwdGhyZWFkLXN0YXRpYy1vbmx5LXJvdXRpbmVzID0gcHRocmVhZF9hdGZvcmsKKyAKKyAjIFNpbmNlIGNhbmNlbGxhdGlvbiBoYW5kbGluZyBpcyBpbiBsYXJnZSBwYXJ0cyBoYW5kbGVkIHVzaW5nIGV4Y2VwdGlvbnMKK0BAIC0yMjAsNyArMjI0LDcgQEAgdGVzdHMgPSB0c3QtdHlwZXNpemVzIFwKKyAJdHN0LW11dGV4cGkxIHRzdC1tdXRleHBpMiB0c3QtbXV0ZXhwaTMgdHN0LW11dGV4cGk0IHRzdC1tdXRleHBpNSBcCisgCXRzdC1tdXRleHBpNWEgdHN0LW11dGV4cGk2IHRzdC1tdXRleHBpNyB0c3QtbXV0ZXhwaTdhIHRzdC1tdXRleHBpOCBcCisgCXRzdC1tdXRleHBpOSBcCistCXRzdC1zcGluMSB0c3Qtc3BpbjIgdHN0LXNwaW4zIHRzdC1zcGluNCBcCisrCXRzdC1zcGluMSB0c3Qtc3BpbjIgdHN0LXNwaW4zIFwKKyAJdHN0LWNvbmQxIHRzdC1jb25kMiB0c3QtY29uZDMgdHN0LWNvbmQ0IHRzdC1jb25kNSB0c3QtY29uZDYgdHN0LWNvbmQ3IFwKKyAJdHN0LWNvbmQ4IHRzdC1jb25kOSB0c3QtY29uZDEwIHRzdC1jb25kMTEgdHN0LWNvbmQxMiB0c3QtY29uZDEzIFwKKyAJdHN0LWNvbmQxNCB0c3QtY29uZDE1IHRzdC1jb25kMTYgdHN0LWNvbmQxNyB0c3QtY29uZDE4IHRzdC1jb25kMTkgXAorQEAgLTI1NiwxNCArMjYwLDE0IEBAIHRlc3RzID0gdHN0LXR5cGVzaXplcyBcCisgCXRzdC1jYW5jZWw2IHRzdC1jYW5jZWw3IHRzdC1jYW5jZWw4IHRzdC1jYW5jZWw5IHRzdC1jYW5jZWwxMCBcCisgCXRzdC1jYW5jZWwxMSB0c3QtY2FuY2VsMTIgdHN0LWNhbmNlbDEzIHRzdC1jYW5jZWwxNCB0c3QtY2FuY2VsMTUgXAorIAl0c3QtY2FuY2VsMTYgdHN0LWNhbmNlbDE3IHRzdC1jYW5jZWwxOCB0c3QtY2FuY2VsMTkgdHN0LWNhbmNlbDIwIFwKKy0JdHN0LWNhbmNlbDIxIHRzdC1jYW5jZWwyMiB0c3QtY2FuY2VsMjMgdHN0LWNhbmNlbDI0IHRzdC1jYW5jZWwyNSBcCisrCXRzdC1jYW5jZWwyMSB0c3QtY2FuY2VsMjIgdHN0LWNhbmNlbDIzIHRzdC1jYW5jZWwyNSBcCisgCXRzdC1jYW5jZWwtc2VsZiB0c3QtY2FuY2VsLXNlbGYtY2FuY2Vsc3RhdGUgXAorIAl0c3QtY2FuY2VsLXNlbGYtY2FuY2VsdHlwZSB0c3QtY2FuY2VsLXNlbGYtdGVzdGNhbmNlbCBcCisgCXRzdC1jbGVhbnVwMCB0c3QtY2xlYW51cDEgdHN0LWNsZWFudXAyIHRzdC1jbGVhbnVwMyB0c3QtY2xlYW51cDQgXAorIAl0c3QtZmxvY2sxIHRzdC1mbG9jazIgXAorIAl0c3Qtc2lnbmFsMSB0c3Qtc2lnbmFsMiB0c3Qtc2lnbmFsMyB0c3Qtc2lnbmFsNCB0c3Qtc2lnbmFsNSBcCisgCXRzdC1zaWduYWw2IHRzdC1zaWduYWw3IFwKKy0JdHN0LWV4ZWMxIHRzdC1leGVjMiB0c3QtZXhlYzMgdHN0LWV4ZWM0IFwKKysJdHN0LWV4ZWMyIHRzdC1leGVjMyB0c3QtZXhlYzQgXAorIAl0c3QtZXhpdDEgdHN0LWV4aXQyIHRzdC1leGl0MyBcCisgCXRzdC1zdGRpbzEgdHN0LXN0ZGlvMiBcCisgCXRzdC1zdGFjazEgdHN0LXN0YWNrMiB0c3Qtc3RhY2szIHRzdC1zdGFjazQgdHN0LXB0aHJlYWQtZ2V0YXR0ciBcCitAQCAtMjcxLDEzICsyNzUsMTIgQEAgdGVzdHMgPSB0c3QtdHlwZXNpemVzIFwKKyAJdHN0LXVubG9hZCBcCisgCXRzdC1kbHN5bTEgXAorIAl0c3Qtc3lzY29uZiBcCistCXRzdC1sb2NhbGUxIHRzdC1sb2NhbGUyIFwKKysJdHN0LWxvY2FsZTIgXAorIAl0c3QtdW1hc2sxIFwKKyAJdHN0LXBvcGVuMSBcCisgCXRzdC1jbG9jazEgXAorIAl0c3QtY29udGV4dDEgXAorIAl0c3Qtc2NoZWQxIFwKKy0JdHN0LWJhY2t0cmFjZTEgXAorIAl0c3QtYWJzdGltZSBcCisgCXRzdC12Zm9yazEgdHN0LXZmb3JrMiB0c3QtdmZvcmsxeCB0c3QtdmZvcmsyeCBcCisgCXRzdC1nZXRwaWQzIFwKK0BAIC0yODgsOSArMjkxLDE2IEBAIHh0ZXN0cyA9IHRzdC1zZXR1aWQxIHRzdC1zZXR1aWQxLXN0YXRpYyB0c3Qtc2V0dWlkMiBcCisgCXRzdC1tdXRleHBwMSB0c3QtbXV0ZXhwcDYgdHN0LW11dGV4cHAxMAorIHRlc3Qtc3JjcyA9IHRzdC1vZGRzdGFja2xpbWl0CisgCistIyBUZXN0IGV4cGVjdGVkIHRvIGZhaWwgb24gbW9zdCB0YXJnZXRzIChleGNlcHQgeDg2XzY0KSBkdWUgdG8gYnVnCistIyAxODQzNSAtIHB0aHJlYWRfb25jZSBoYW5ncyB3aGVuIGluaXQgcm91dGluZSB0aHJvd3MgYW4gZXhjZXB0aW9uLgorLXRlc3QteGZhaWwtdHN0LW9uY2U1ID0geWVzCisrIyBUaGlzIHRlc3QgdXNlcyB0aGUgcG9zaXhfc3Bhd24gZnVuY3Rpb25zLgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19TUEFXTikgKz0gdHN0LWV4ZWMxCisrCisrIyBUaGlzIHRlc3QgdXNlcyB0aGUgJ2JhY2t0cmFjZScgZnVuY3Rpb25zLgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19CQUNLVFJBQ0UpICs9IHRzdC1iYWNrdHJhY2UxCisrCisrIyBUaGlzIHRlc3QgaXMgd3JpdHRlbiBpbiBDKysuCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0NYWF9URVNUUykgKz0gdHN0LWNhbmNlbDI0CisrCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSArPSB0c3QtbG9jYWxlMQorIAorICMgRmlsZXMgd2hpY2ggbXVzdCBub3QgYmUgbGlua2VkIHdpdGggbGlicHRocmVhZC4KKyB0ZXN0cy1ub2xpYnB0aHJlYWQgPSB0c3QtdW5sb2FkCitkaWZmIC0tZ2l0IGEvbnB0bC9wdGhyZWFkX2NyZWF0ZS5jIGIvbnB0bC9wdGhyZWFkX2NyZWF0ZS5jCitpbmRleCBkMTBmNGVhLi4xNDI1N2NlIDEwMDY0NAorLS0tIGEvbnB0bC9wdGhyZWFkX2NyZWF0ZS5jCisrKysgYi9ucHRsL3B0aHJlYWRfY3JlYXRlLmMKK0BAIC0zMyw2ICszMyw3IEBACisgI2luY2x1ZGUgPGRlZmF1bHQtc2NoZWQuaD4KKyAjaW5jbHVkZSA8ZnV0ZXgtaW50ZXJuYWwuaD4KKyAKKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8c2hsaWItY29tcGF0Lmg+CisgCisgI2luY2x1ZGUgPHN0YXAtcHJvYmUuaD4KK0BAIC0yNjIsOCArMjYzLDEwIEBAIFNUQVJUX1RIUkVBRF9ERUZOCisgICBUSFJFQURfU0VUTUVNIChwZCwgY3B1Y2xvY2tfb2Zmc2V0LCBub3cpOworICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorICAgLyogSW5pdGlhbGl6ZSByZXNvbHZlciBzdGF0ZSBwb2ludGVyLiAgKi8KKyAgIF9fcmVzcCA9ICZwZC0+cmVzOworKyNlbmRpZgorIAorICAgLyogSW5pdGlhbGl6ZSBwb2ludGVycyB0byBsb2NhbGUgZGF0YS4gICovCisgICBfX2N0eXBlX2luaXQgKCk7CitAQCAtMzQ2LDggKzM0OSwxMCBAQCBTVEFSVF9USFJFQURfREVGTgorICAgLyogUnVuIHRoZSBkZXN0cnVjdG9yIGZvciB0aGUgdGhyZWFkLWxvY2FsIGRhdGEuICAqLworICAgX19ucHRsX2RlYWxsb2NhdGVfdHNkICgpOworIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorICAgLyogQ2xlYW4gdXAgYW55IHN0YXRlIGxpYmMgc3RvcmVkIGluIHRocmVhZC1sb2NhbCB2YXJpYWJsZXMuICAqLworICAgX19saWJjX3RocmVhZF9mcmVlcmVzICgpOworKyNlbmRpZgorIAorICAgLyogSWYgdGhpcyBpcyB0aGUgbGFzdCB0aHJlYWQgd2UgdGVybWluYXRlIHRoZSBwcm9jZXNzIG5vdy4gIFdlCisgICAgICBkbyBub3Qgbm90aWZ5IHRoZSBkZWJ1Z2dlciwgaXQgbWlnaHQganVzdCBpcnJpdGF0ZSBpdCBpZiB0aGVyZQorZGlmZiAtLWdpdCBhL25zY2QvTWFrZWZpbGUgYi9uc2NkL01ha2VmaWxlCitpbmRleCBlZGU5NDFkLi5mNGYzZjhkIDEwMDY0NAorLS0tIGEvbnNjZC9NYWtlZmlsZQorKysrIGIvbnNjZC9NYWtlZmlsZQorQEAgLTE4LDE0ICsxOCwxNyBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgbnNjZCBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IG5zY2QKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyBpZm5lcSAoJCh1c2UtbnNjZCksbm8pCistcm91dGluZXMgOj0gbnNjZF9nZXRwd19yIG5zY2RfZ2V0Z3JfciBuc2NkX2dldGhzdF9yIG5zY2RfZ2V0YWkgXAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBcCisrCSAgICAgbnNjZF9nZXRwd19yIG5zY2RfZ2V0Z3JfciBuc2NkX2dldGhzdF9yIG5zY2RfZ2V0YWkgXAorIAkgICAgbnNjZF9pbml0Z3JvdXBzIG5zY2RfZ2V0c2Vydl9yIG5zY2RfbmV0Z3JvdXAKKy1hdXgJOj0gbnNjZF9oZWxwZXIKKythdXgtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IG5zY2RfaGVscGVyCisgZW5kaWYKKyAKKyAjIFRvIGZpbmQgeG1hbGxvYy5jCitAQCAtMzcsMTQgKzQwLDE4IEBAIG5zY2QtbW9kdWxlcyA6PSBuc2NkIGNvbm5lY3Rpb25zIHB3ZGNhY2hlIGdldHB3bmFtX3IgZ2V0cHd1aWRfciBncnBjYWNoZSBcCisgCQlkYmdfbG9nIG5zY2RfY29uZiBuc2NkX3N0YXQgY2FjaGUgbWVtIG5zY2Rfc2V0dXBfdGhyZWFkIFwKKyAJCXhtYWxsb2MgeHN0cmR1cCBhaWNhY2hlIGluaXRncmNhY2hlIGdhaSByZXNfaGNvbmYgXAorIAkJbmV0Z3JvdXBjYWNoZQorLQorK2lmbmVxICh5LCQoT1BUSU9OX0VHTElCQ19OSVMpKQorKyMgSWYgd2UgaGF2ZW4ndCBidWlsZCBsaWJuc2wuc28sIHRoZW4gd2UnbGwgbmVlZCB0byBpbmNsdWRlIG91cgorKyMgb3duIGNvcHkgb2YgbmlzX2hhc2guCisrbnNjZC1tb2R1bGVzICs9IG5pc19oYXNoCisrZW5kaWYKKyBpZmVxICgkKGJ1aWxkLW5zY2QpJChoYXZlLXRocmVhZC1saWJyYXJ5KSx5ZXN5ZXMpCisgCistb3RoZXJzICs9IG5zY2QKKy1vdGhlcnMtcGllICs9IG5zY2QKKy1pbnN0YWxsLXNiaW4gOj0gbnNjZAorK290aGVycy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gbnNjZAorK290aGVycy1waWUtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IG5zY2QKKytpbnN0YWxsLXNiaW4tJChPUFRJT05fRUdMSUJDX0lORVQpICs9IG5zY2QKKyAKKy1leHRyYS1vYmpzID0gJChuc2NkLW1vZHVsZXM6PS5vKQorK2V4dHJhLW9ianMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9ICQobnNjZC1tb2R1bGVzOj0ubykKKyAKKyBlbmRpZgorIAorQEAgLTEwMCw3ICsxMDcsMTUgQEAgaW5jbHVkZSAkKHBhdHN1YnN0ICUsJCguLiljcHBmbGFncy1pdGVyYXRvci5taywkKGNwcC1zcmNzLWxlZnQpKQorICQob2JqcGZ4KW5zY2Q6ICQobnNjZC1tb2R1bGVzOiU9JChvYmpwZngpJS5vKQorIAorIGlmZXEgKCQoYnVpbGQtc2hhcmVkKSx5ZXMpCistJChvYmpwZngpbnNjZDogJChzaGFyZWQtdGhyZWFkLWxpYnJhcnkpICQoY29tbW9uLW9ianBmeCluaXMvbGlibnNsLnNvCisrJChvYmpwZngpbnNjZDogJChzaGFyZWQtdGhyZWFkLWxpYnJhcnkpCisrZWxzZQorKyQob2JqcGZ4KW5zY2Q6ICQoc3RhdGljLXRocmVhZC1saWJyYXJ5KQorK2VuZGlmCisrCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfTklTKSkKKytpZmVxICgkKGJ1aWxkLXNoYXJlZCkseWVzKQorKyQob2JqcGZ4KW5zY2Q6ICQoY29tbW9uLW9ianBmeCluaXMvbGlibnNsLnNvCisgZWxzZQorLSQob2JqcGZ4KW5zY2Q6ICQoc3RhdGljLXRocmVhZC1saWJyYXJ5KSAkKGNvbW1vbi1vYmpwZngpbmlzL2xpYm5zbC5hCisrJChvYmpwZngpbnNjZDogJChjb21tb24tb2JqcGZ4KW5pcy9saWJuc2wuYQorK2VuZGlmCisgZW5kaWYKK2RpZmYgLS1naXQgYS9uc2NkL25pc19oYXNoLmMgYi9uc2NkL25pc19oYXNoLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kMjQ0YzQxCistLS0gL2Rldi9udWxsCisrKysgYi9uc2NkL25pc19oYXNoLmMKK0BAIC0wLDAgKzEsMyBAQAorKy8qIElmIE9QVElPTl9FR0xJQkNfTklTIGlzIGRpc2FibGVkLCBuc2NkIGNhbid0IGdldCB0aGlzIGZyb20gbGlibnNsLnNvOworKyAgIHdlIG5lZWQgb3VyIG93biBjb3B5LiAgKi8KKysjaW5jbHVkZSAiLi4vbmlzL25pc19oYXNoLmMiCitkaWZmIC0tZ2l0IGEvbnNzL01ha2VmaWxlIGIvbnNzL01ha2VmaWxlCitpbmRleCA2NWFiN2I1Li4xOWYwYWVmIDEwMDY0NAorLS0tIGEvbnNzL01ha2VmaWxlCisrKysgYi9uc3MvTWFrZWZpbGUKK0BAIC0xOCwyOCArMTgsMzUgQEAKKyAjCisgIwlNYWtlZmlsZSBmb3IgbmFtZSBzZXJ2aWNlIHN3aXRjaC4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBuc3MKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyBoZWFkZXJzCQkJOj0gbnNzLmgKKyAKKy0jIFRoaXMgaXMgdGhlIHRyaXZpYWwgcGFydCB3aGljaCBnb2VzIGludG8gbGliYyBpdHNlbGYuCistcm91dGluZXMJCT0gbnNzd2l0Y2ggZ2V0bnNzZW50IGdldG5zc2VudF9yIGRpZ2l0c19kb3RzIFwKKy0JCQkgICQoYWRkc3VmZml4IC1sb29rdXAsJChkYXRhYmFzZXMpKQorLQorICMgVGhlc2UgYXJlIHRoZSBkYXRhYmFzZXMgdGhhdCBnbyB0aHJvdWdoIG5zcyBkaXNwYXRjaC4KKyAjIENhdXRpb246IGlmIHlvdSBhZGQgYSBkYXRhYmFzZSBoZXJlLCB5b3UgbXVzdCBhZGQgaXRzIHJlYWwgbmFtZQorICMgaW4gZGF0YWJhc2VzLmRlZiwgdG9vLgorLWRhdGFiYXNlcwkJPSBwcm90byBzZXJ2aWNlIGhvc3RzIG5ldHdvcmsgZ3JwIHB3ZCBldGhlcnMgXAorLQkJCSAgc3B3ZCBuZXRncnAgYWxpYXMgc2dycAorK2RhdGFiYXNlcy15CQk9IGdycCBwd2Qgc3B3ZCBzZ3JwCisrZGF0YWJhc2VzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSBcCisrCQkJKz0gcHJvdG8gc2VydmljZSBob3N0cyBuZXR3b3JrIGV0aGVycyBcCisrCQkJICAgbmV0Z3JwCisrZGF0YWJhc2VzLSQoT1BUSU9OX0VHTElCQ19EQl9BTElBU0VTKSArPSBhbGlhcworKworK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBkaWdpdHNfZG90cworIAorIGlmbmVxICgsJChmaWx0ZXIgc3VucnBjLCQoc3ViZGlycykpKQorLWRhdGFiYXNlcwkJKz0ga2V5IHJwYworK2RhdGFiYXNlcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkJKz0ga2V5IHJwYworIGhhdmUtc3VucnBjCQk6PSAxCisgZWxzZQorIGhhdmUtc3VucnBjCQk6PSAwCisgZW5kaWYKKysjIFRoaXMgaXMgdGhlIHRyaXZpYWwgcGFydCB3aGljaCBnb2VzIGludG8gbGliYyBpdHNlbGYuCisrcm91dGluZXMteQkJKz0gbnNzd2l0Y2ggZ2V0bnNzZW50IGdldG5zc2VudF9yIFwKKysJCQkgICQoYWRkc3VmZml4IC1sb29rdXAsJChkYXRhYmFzZXMteSkpCisrCisgQ1BQRkxBR1MtZ2V0ZW50LmMJPSAtREhBVkVfU1VOUlBDPSQoaGF2ZS1zdW5ycGMpCisgCisgb3RoZXJzICAgICAgICAgICAgICAgICAgOj0gZ2V0ZW50IG1ha2VkYgorQEAgLTQ3LDggKzU0LDkgQEAgaW5zdGFsbC1iaW4gICAgICAgICAgICAgOj0gZ2V0ZW50IG1ha2VkYgorIG1ha2VkYi1tb2R1bGVzID0geG1hbGxvYyBoYXNoLXN0cmluZworIGV4dHJhLW9ianMJCSs9ICQobWFrZWRiLW1vZHVsZXM6PS5vKQorIAorLXRlc3RzCQkJPSB0ZXN0LW5ldGRiIHRzdC1uc3MtdGVzdDEgdGVzdC1kaWdpdHMtZG90cyB0c3QtbnNzLWdldHB3ZW50CisteHRlc3RzCQkJPSBidWctZXJhbmdlCisrdGVzdHMJCQk9IHRzdC1uc3MtdGVzdDEgdHN0LW5zcy1nZXRwd2VudAorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19JTkVUKQkrPSB0ZXN0LW5ldGRiIHRlc3QtZGlnaXRzLWRvdHMKKyt4dGVzdHMtJChPUFRJT05fRUdMSUJDX0lORVQpCSs9IGJ1Zy1lcmFuZ2UKKyAKKyAjIFNwZWNpZnkgcnVsZXMgZm9yIHRoZSBuc3NfKiBtb2R1bGVzLiAgV2UgaGF2ZSBzb21lIHNlcnZpY2VzLgorIHNlcnZpY2VzCQk6PSBmaWxlcyBkYgorQEAgLTYzLDcgKzcxLDcgQEAgc3ViZGlyLWRpcnMgPSAkKHNlcnZpY2VzOiU9bnNzXyUpCisgdnBhdGggJS5jICQoc3ViZGlyLWRpcnMpIC4uL2xvY2FsZS9wcm9ncmFtcyAuLi9pbnRsCisgCisgCistbGlibnNzX2ZpbGVzLXJvdXRpbmVzCTo9ICQoYWRkcHJlZml4IGZpbGVzLSwkKGRhdGFiYXNlcykpIFwKKytsaWJuc3NfZmlsZXMtcm91dGluZXMJOj0gJChhZGRwcmVmaXggZmlsZXMtLCQoZGF0YWJhc2VzLXkpKSBcCisgCQkJICAgZmlsZXMtaW5pdGdyb3VwcyBmaWxlcy1oYXZlX29fY2xvZXhlYyBmaWxlcy1pbml0CisgCisgbGlibnNzX2RiLWRicwkJOj0gJChhZGRwcmVmaXggZGItLFwKK0BAIC04Niw2ICs5NCw0NSBAQCB0ZXN0cy1zdGF0aWMJCT0gdHN0LW5zcy1zdGF0aWMKKyB0ZXN0cwkJCSs9ICQodGVzdHMtc3RhdGljKQorIGVuZGlmCisgCisraWZuZXEgKCQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSCkseSkKKysKKytpZm5kZWYgT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9DT05GSUcKKyskKGVycm9yIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfQ09ORklHIHZhcmlhYmxlIGxlZnQgdW5zZXQpCisrZW5kaWYKKysKKytpZm5kZWYgT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9GVU5DVElPTlMKKyskKGVycm9yIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TIHZhcmlhYmxlIGxlZnQgdW5zZXQpCisrZW5kaWYKKysKKytpZmVxICgsJCh3aWxkY2FyZCAkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfQ09ORklHKSkpCisrJCh3YXJuaW5nIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0ggaXMgZGlzYWJsZWQsIGJ1dCBmaXhlZCBjb25maWcgZmlsZSkKKyskKGVycm9yIGRvZXMgbm90IGV4aXN0OiAkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfQ09ORklHKSkKKytlbmRpZgorKworK2lmZXEgKCwkKHdpbGRjYXJkICQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9GVU5DVElPTlMpKSkKKyskKHdhcm5pbmcgT1BUSU9OX0VHTElCQ19OU1NXSVRDSCBpcyBkaXNhYmxlZCwgYnV0IGZpeGVkIGZ1bmN0aW9ucyBmaWxlKQorKyQoZXJyb3IgZG9lcyBub3QgZXhpc3Q6ICQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9GVU5DVElPTlMpKQorK2VuZGlmCisrCisrYmVmb3JlLWNvbXBpbGUgOj0gJChvYmpwZngpZml4ZWQtbnNzd2l0Y2guaAorK2dlbmVyYXRlZCA6PSBmaXhlZC1uc3N3aXRjaC5oCisrJChvYmpwZngpZml4ZWQtbnNzd2l0Y2guaCAkKG9iamZweClmaXhlZC1uc3N3aXRjaC1saWJzOglcCisrICAgICQob2JqcGZ4KWdlbi1maXhlZC1uc3N3aXRjaAkJCQlcCisrICAgICQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9DT05GSUcpCisrCSQ8ICQob2JqcGZ4KWZpeGVkLW5zc3dpdGNoLmgJCQlcCisrCSAgICQob2JqcGZ4KWZpeGVkLW5zc3dpdGNoLWxpYnMJCQlcCisrCSAgICQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9DT05GSUcpCisrCisrJChvYmpwZngpZ2VuLWZpeGVkLW5zc3dpdGNoOiBnZW4tZml4ZWQtbnNzd2l0Y2guYwlcCisrICAgICQoY29tbW9uLW9ianBmeClvcHRpb24tZ3JvdXBzLmNvbmZpZwkJXAorKyAgICAkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TKQorKwkkKG5hdGl2ZS1jb21waWxlKQorK2dlbi1maXhlZC1uc3N3aXRjaC1DRkxBR1MgPQkJCQkJCVwKKysJLWczIC1PIC1XYWxsCQkJCQkJCVwKKysJLUkgJChvYmpwZngpCQkJCQkJCVwKKysJLURGSVhFRF9GVU5DVElPTlM9JyIkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TKSInCisrZW5kaWYKKysKKyBpbmNsdWRlIC4uL1J1bGVzCisgCisgaWZlcSAoeWVzLCQoaGF2ZS1zZWxpbnV4KSkKK2RpZmYgLS1naXQgYS9uc3MvZml4ZWQtbnNzd2l0Y2guY29uZiBiL25zcy9maXhlZC1uc3N3aXRjaC5jb25mCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOTFiYjY3NQorLS0tIC9kZXYvbnVsbAorKysrIGIvbnNzL2ZpeGVkLW5zc3dpdGNoLmNvbmYKK0BAIC0wLDAgKzEsMjIgQEAKKysjIC9ldGMvbnNzd2l0Y2guY29uZgorKyMKKysjIEV4YW1wbGUgY29uZmlndXJhdGlvbiBmb3IgZml4ZWQgbmFtZSBzZXJ2aWNlLgorKyMgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBPUFRJT05fRUdMSUJDX05TU1dJVENIIGluIG9wdGlvbi1ncm91cHMuZGVmCisrIyBmb3IgZGV0YWlscy4KKysjCisrCisrYWxpYXNlczogICAgICAgIGZpbGVzCisrCisrcGFzc3dkOiAgICAgICAgIGZpbGVzCisrZ3JvdXA6ICAgICAgICAgIGZpbGVzCisrc2hhZG93OiAgICAgICAgIGZpbGVzCisrCisraG9zdHM6ICAgICAgICAgIGZpbGVzIGRucworK25ldHdvcmtzOiAgICAgICBmaWxlcyBkbnMKKysKKytwcm90b2NvbHM6ICAgICAgZmlsZXMKKytzZXJ2aWNlczogICAgICAgZmlsZXMKKytldGhlcnM6ICAgICAgICAgZmlsZXMKKytycGM6ICAgICAgICAgICAgZmlsZXMKKysKKytuZXRncm91cDogICAgICAgZmlsZXMKK2RpZmYgLS1naXQgYS9uc3MvZml4ZWQtbnNzd2l0Y2guZnVuY3Rpb25zIGIvbnNzL2ZpeGVkLW5zc3dpdGNoLmZ1bmN0aW9ucworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjJmM2ZhODMKKy0tLSAvZGV2L251bGwKKysrKyBiL25zcy9maXhlZC1uc3N3aXRjaC5mdW5jdGlvbnMKK0BAIC0wLDAgKzEsMTIxIEBACisrLyogTGlzdCBvZiBmdW5jdGlvbnMgZGVmaW5lZCBmb3IgZml4ZWQgTlNTIGluIEdOVSBDIExpYnJhcnkuCisrICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysvKiBXaGVuIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0ggaXMgZGlzYWJsZWQgKHNlZSBvcHRpb24tZ3JvdXBzLmRlZiksCisrICAgRUdMSUJDIGRvZXMgbm90IHVzZSB0aGUgJ2Rsb3BlbicgYW5kICdkbHN5bScgZnVuY3Rpb25zIHRvIGxvb2sgZm9yCisrICAgZGF0YWJhc2UgcXVlcnkgZnVuY3Rpb25zIGluIHRoZSBpbmRpdmlkdWFsIG5hbWUgc2VydmljZSBsaWJyYXJpZXMuCisrICAgSW5zdGVhZCwgaXQgdXNlcyBhIHNldCBvZiBmdW5jdGlvbnMgY2hvc2VuIGF0IGNvbXBpbGUgdGltZSwgYXMKKysgICBkaXJlY3RlZCBieSB0aGUgT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9GVU5DVElPTlMgZmlsZS4gIFRoaXMKKysgICBmaWxlIGlzIGEgc2FtcGxlIG9mIHdoYXQgeW91IG1pZ2h0IHVzZSB0aGVyZS4KKysKKysgICBUaGlzIGZpbGUgaXMgQyBzb3VyY2UgY29kZTsgaXQgc2hvdWxkIG9ubHkgY29udGFpbiBpbnZvY2F0aW9ucyBvZgorKyAgIHRoZSBmb2xsb3dpbmcgbWFjcm9zOgorKworKyAgIC0gREVGSU5FX0VOVCAoREFUQUJBU0UsIFNFUlZJQ0UsIFgpCisrCisrICAgICBEZWNsYXJlIHRoZSAnc2V0WGVudCcsICdnZXRYZW50X3InLCBhbmQgJ2VuZFhlbnQnIGZ1bmN0aW9ucyB0aGF0CisrICAgICBxdWVyeSBEQVRBQkFTRSB1c2luZyB0aGUgc2VydmljZSBsaWJyYXJ5ICdsaWJuc3NfU0VSVklDRS5zby4yJy4KKysgICAgIERBVEFCQVNFIHNob3VsZCBiZSB0aGUgZnVsbCBuYW1lIG9mIHRoZSBkYXRhYmFzZSBhcyBpdCBhcHBlYXJzIGluCisrICAgICAnbnNzd2l0Y2guY29uZicsIGxpa2UgJ3Bhc3N3ZCcgb3IgJ2FsaWFzZXMnLgorKworKyAgICAgKFRoZSBub24tcmVlbnRyYW50ICdnZXRYZW50JyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIGluIHRlcm1zCisrICAgICBvZiB0aGUgcmVlbnRyYW50ICdnZXRYZW50X3InIGZ1bmN0aW9ucywgc28gdGhlcmUgaXMgbm8gbmVlZCB0bworKyAgICAgcmVmZXIgdG8gdGhlbSBleHBsaWNpdGx5IGhlcmUuKQorKworKyAgIC0gREVGSU5FX0dFVEJZIChEQVRBQkFTRSwgU0VSVklDRSwgWCwgS0VZKQorKworKyAgICAgRGVjbGFyZSB0aGUgJ2dldFhieUtFWV9yJyBmdW5jdGlvbnMgdGhhdCBxdWVyeSBEQVRBQkFTRSB1c2luZworKyAgICAgU0VSVklDRS4gIERBVEFCQVNFIGFuZCBTRVJWSUNFIGFyZSBhcyBkZXNjcmliZWQgYWJvdmUuCisrCisrICAgICAoVGhlIG5vbi1yZWVudHJhbnQgJ2dldFhieUtFWScgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcworKyAgICAgb2YgdGhlIHJlZW50cmFudCAnZ2V0WGJ5S0VZX3InIGZ1bmN0aW9ucywgc28gdGhlcmUgaXMgbm8gbmVlZCB0bworKyAgICAgcmVmZXIgdG8gdGhlbSBleHBsaWNpdGx5IGhlcmUuKQorKworKyAgICAgVXNlIHRoZSBzcGVjaWFsIGtleSAnbmFtZTMnIGZvciB0aGUgc2VydmljZSBsaWJyYXJ5IGZ1bmN0aW9uIHRoYXQKKysgICAgIGltcGxlbWVudHMgdGhlICdnZXRhZGRyaW5mbycgZnVuY3Rpb24uCisrCisrICAgLSBERUZJTkVfR0VUIChEQVRBQkFTRSwgU0VSVklDRSwgUVVFUlkpCisrCisrICAgICBEZWNsYXJlIHRoZSAnZ2V0UVVFUllfcicgZnVuY3Rpb25zIHRoYXQgcXVlcnkgREFUQUJBU0UgdXNpbmcKKysgICAgIFNFUlZJQ0UuICBUaGlzIGlzIHVzZWQgZm9yIGZ1bmN0aW9ucyBsaWtlICdnZXRwd25hbScuCisrCisrICAgICAoVGhlIG5vbi1yZWVudHJhbnQgJ2dldFFVRVJZJyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIGluIHRlcm1zCisrICAgICBvZiB0aGUgcmVlbnRyYW50ICdnZXRRVUVSWV9yJyBmdW5jdGlvbnMsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8KKysgICAgIHJlZmVyIHRvIHRoZW0gZXhwbGljaXRseSBoZXJlLikKKysKKysgICBUaGlzIHNhbXBsZSBmaWxlIG9ubHkgaW5jbHVkZXMgZnVuY3Rpb25zIHRoYXQgY29uc3VsdCB0aGUgZmlsZXMgaW4KKysgICAnL2V0YycsIGFuZCB0aGUgRG9tYWluIE5hbWUgU3lzdGVtIChETlMpLiAgKi8KKysKKysvKiBhbGlhc2VzICovCisrREVGSU5FX0VOVCAoYWxpYXNlcywgZmlsZXMsIGFsaWFzKQorK0RFRklORV9HRVRCWSAoYWxpYXNlcywgZmlsZXMsIGFsaWFzLCBuYW1lKQorKworKy8qIGV0aGVycyAqLworK0RFRklORV9FTlQgKGV0aGVycywgZmlsZXMsIGV0aGVyKQorKworKy8qIGdyb3VwICovCisrREVGSU5FX0VOVCAoZ3JvdXAsIGZpbGVzLCBncikKKytERUZJTkVfR0VUIChncm91cCwgZmlsZXMsIGdyZ2lkKQorK0RFRklORV9HRVQgKGdyb3VwLCBmaWxlcywgZ3JuYW0pCisrCisrLyogaG9zdHMgKi8KKytERUZJTkVfRU5UIChob3N0cywgZmlsZXMsIGhvc3QpCisrREVGSU5FX0dFVEJZIChob3N0cywgZmlsZXMsIGhvc3QsIGFkZHIpCisrREVGSU5FX0dFVEJZIChob3N0cywgZmlsZXMsIGhvc3QsIG5hbWUpCisrREVGSU5FX0dFVEJZIChob3N0cywgZmlsZXMsIGhvc3QsIG5hbWUyKQorK0RFRklORV9HRVQgKGhvc3RzLCBmaWxlcywgaG9zdHRvbikKKytERUZJTkVfR0VUIChob3N0cywgZmlsZXMsIG50b2hvc3QpCisrREVGSU5FX0dFVEJZIChob3N0cywgZG5zLCBob3N0LCBhZGRyKQorK0RFRklORV9HRVRCWSAoaG9zdHMsIGRucywgaG9zdCwgbmFtZSkKKytERUZJTkVfR0VUQlkgKGhvc3RzLCBkbnMsIGhvc3QsIG5hbWUyKQorK0RFRklORV9HRVRCWSAoaG9zdHMsIGRucywgaG9zdCwgbmFtZTMpCisrCisrLyogbmV0Z3JvdXAgKi8KKytERUZJTkVfRU5UIChuZXRncm91cCwgZmlsZXMsIG5ldGdyKQorKworKy8qIG5ldHdvcmtzICovCisrREVGSU5FX0VOVCAobmV0d29ya3MsIGZpbGVzLCBuZXQpCisrREVGSU5FX0dFVEJZIChuZXR3b3JrcywgZmlsZXMsIG5ldCwgbmFtZSkKKytERUZJTkVfR0VUQlkgKG5ldHdvcmtzLCBmaWxlcywgbmV0LCBhZGRyKQorK0RFRklORV9HRVRCWSAobmV0d29ya3MsIGRucywgbmV0LCBuYW1lKQorK0RFRklORV9HRVRCWSAobmV0d29ya3MsIGRucywgbmV0LCBhZGRyKQorKworKy8qIHByb3RvY29scyAqLworK0RFRklORV9FTlQgKHByb3RvY29scywgZmlsZXMsIHByb3RvKQorK0RFRklORV9HRVRCWSAocHJvdG9jb2xzLCBmaWxlcywgcHJvdG8sIG5hbWUpCisrREVGSU5FX0dFVEJZIChwcm90b2NvbHMsIGZpbGVzLCBwcm90bywgbnVtYmVyKQorKworKy8qIHBhc3N3ZCAqLworK0RFRklORV9FTlQgKHBhc3N3ZCwgZmlsZXMsIHB3KQorK0RFRklORV9HRVQgKHBhc3N3ZCwgZmlsZXMsIHB3bmFtKQorK0RFRklORV9HRVQgKHBhc3N3ZCwgZmlsZXMsIHB3dWlkKQorKworKy8qIHJwYyAqLworK0RFRklORV9FTlQgKHJwYywgZmlsZXMsIHJwYykKKytERUZJTkVfR0VUQlkgKHJwYywgZmlsZXMsIHJwYywgbmFtZSkKKytERUZJTkVfR0VUQlkgKHJwYywgZmlsZXMsIHJwYywgbnVtYmVyKQorKworKy8qIHNlcnZpY2VzICovCisrREVGSU5FX0VOVCAoc2VydmljZXMsIGZpbGVzLCBzZXJ2KQorK0RFRklORV9HRVRCWSAoc2VydmljZXMsIGZpbGVzLCBzZXJ2LCBuYW1lKQorK0RFRklORV9HRVRCWSAoc2VydmljZXMsIGZpbGVzLCBzZXJ2LCBwb3J0KQorKworKy8qIHNoYWRvdyAqLworK0RFRklORV9FTlQgKHNoYWRvdywgZmlsZXMsIHNwKQorK0RFRklORV9HRVQgKHNoYWRvdywgZmlsZXMsIHNwbmFtKQorZGlmZiAtLWdpdCBhL25zcy9nZW4tZml4ZWQtbnNzd2l0Y2guYyBiL25zcy9nZW4tZml4ZWQtbnNzd2l0Y2guYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjZlMWM5OGMKKy0tLSAvZGV2L251bGwKKysrKyBiL25zcy9nZW4tZml4ZWQtbnNzd2l0Y2guYworQEAgLTAsMCArMSw4MDMgQEAKKysvKiBnZW4tZml4ZWQtbnNzd2l0Y2guYyAtLS0gZ2VuZXJhdGUgZml4ZWQgbmFtZSBzZXJ2aWNlIGRhdGEgc3RydWN0dXJlcworKyAgIENvcHlyaWdodCAoQykgMTk5Ni0xOTk5LCAyMDAxLTIwMDYsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrCisrI2luY2x1ZGUgImdudS9saWItbmFtZXMuaCIKKysjaW5jbHVkZSAibnNzLmgiCisrCisrLyogUHJvdmlkZSBhIGZhbGxiYWNrIGRlZmluaXRpb24gdG8gYWxsb3cgdGhpcyBmaWxlIHRvIGJlIGNvbXBpbGVkIG91dHNpZGUKKysgICBsaWJjLiAgKi8KKysjaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCisrIyBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKysjZW5kaWYKKysKKysMCisrLyogU2ltcGxlIHV0aWxpdGllcy4gICovCisrCisrdm9pZCBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKQorK2Vycm9yIChjb25zdCBjaGFyICptZXNzYWdlKQorK3sKKysgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBtZXNzYWdlKTsKKysgIGV4aXQgKDEpOworK30KKysKKysKKyt2b2lkICoKKytjaGVja19hbGxvYyAodm9pZCAqcCkKKyt7CisrICBpZiAocCkKKysgICAgcmV0dXJuIHA7CisrICBlbHNlCisrICAgIGVycm9yICgib3V0IG9mIG1lbW9yeSIpOworK30KKysKKyt2b2lkICoKKyt4bWFsbG9jIChzaXplX3Qgc2l6ZSkKKyt7CisrICByZXR1cm4gY2hlY2tfYWxsb2MgKG1hbGxvYyAoc2l6ZSkpOworK30KKysKKysKKysvKiBGb3JtYXQgQVJHUyBhY2NvcmRpbmcgdG8gRk9STUFULCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMgYQorKyAgIG1hbGxvYydlZCBzdHJpbmcuICAqLworK2NoYXIgKgorK3NhcHJpbnRmIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyt7CisrICB2YV9saXN0IGFyZ3M7CisrICBzaXplX3QgbGVuOworKyAgY2hhciAqYnVmOworKworKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisrICBsZW4gPSB2c25wcmludGYgKE5VTEwsIDAsIGZvcm1hdCwgYXJncyk7CisrICB2YV9lbmQgKGFyZ3MpOworKworKyAgYnVmID0geG1hbGxvYyAobGVuICsgMSk7CisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIGFzc2VydCAobGVuID09IHZzbnByaW50ZiAoYnVmLCBsZW4gKyAxLCBmb3JtYXQsIGFyZ3MpKTsKKysgIHZhX2VuZCAoYXJncyk7CisrCisrICByZXR1cm4gYnVmOworK30KKysKKysKKysMCisrLyogRGF0YSBzdHJ1Y3R1cmVzIHJlcHJlc2VudGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGluIG1lbW9yeS4gICovCisrCisrLyogVGhlc2UgYXJlIGNvcGllZCBmcm9tIG5zc3dpdGNoLmguCisrCisrICAgV2UgY291bGQgc2ltcGx5ICNpbmNsdWRlIHRoYXQgZmlsZSwgYnV0IHRoaXMgcHJvZ3JhbSBydW5zIG9uIHRoZQorKyAgIGJ1aWxkIG1hY2hpbmUgYW5kIGxpbmtzIGFnYWluc3QgdGhlIGJ1aWxkIG1hY2hpbmUncyBsaWJyYXJpZXMsCisrICAgd2hlcmVhcyB0aGF0IGhlYWRlciBpcyBtZWFudCBmb3IgdXNlIGJ5IHRhcmdldCBjb2RlOyBpdCB1c2VzCisrICAgJ2xpYmNfaGlkZGVuX3Byb3RvJywgJ2ludGVybmFsX2Z1bmN0aW9uJywgYW5kIHJlbGF0ZWQgaGFpci4gIFNpbmNlCisrICAgd2UndmUgY29waWVkIHRoZSBwYXJzaW5nIGNvZGUsIHdlIG1pZ2h0IGFzIHdlbGwgY29weSB0aGUgZGF0YQorKyAgIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBhcyB3ZWxsLiAgKi8KKysKKysvKiBBY3Rpb25zIHBlcmZvcm1lZCBhZnRlciBsb29rdXAgZmluaXNoZWQuICAqLworK3R5cGVkZWYgZW51bQorK3sKKysgIE5TU19BQ1RJT05fQ09OVElOVUUsCisrICBOU1NfQUNUSU9OX1JFVFVSTgorK30gbG9va3VwX2FjdGlvbnM7CisrCisrCisrdHlwZWRlZiBzdHJ1Y3Qgc2VydmljZV9saWJyYXJ5CisreworKyAgLyogTmFtZSBvZiBzZXJ2aWNlIChgZmlsZXMnLCBgZG5zJywgYG5pcycsIC4uLikuICAqLworKyAgY29uc3QgY2hhciAqbmFtZTsKKysgIC8qIFBvaW50ZXIgdG8gdGhlIGxvYWRlZCBzaGFyZWQgbGlicmFyeS4gICovCisrICB2b2lkICpsaWJfaGFuZGxlOworKyAgLyogQW5kIHRoZSBsaW5rIHRvIHRoZSBuZXh0IGVudHJ5LiAgKi8KKysgIHN0cnVjdCBzZXJ2aWNlX2xpYnJhcnkgKm5leHQ7CisrfSBzZXJ2aWNlX2xpYnJhcnk7CisrCisrCisrLyogRm9yIG1hcHBpbmcgYSBmdW5jdGlvbiBuYW1lIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gIEl0IGlzIGtub3duIGluCisrICAgbnNzd2l0Y2guYzpuc3NfbG9va3VwX2Z1bmN0aW9uIHRoYXQgYSBzdHJpbmcgcG9pbnRlciBmb3IgdGhlIGxvb2t1cCBrZXkKKysgICBpcyB0aGUgZmlyc3QgbWVtYmVyLiAgKi8KKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIGNvbnN0IGNoYXIgKmZjdF9uYW1lOworKyAgdm9pZCAqZmN0X3B0cjsKKyt9IGtub3duX2Z1bmN0aW9uOworKworKworK3R5cGVkZWYgc3RydWN0IHNlcnZpY2VfdXNlcgorK3sKKysgIC8qIEFuZCB0aGUgbGluayB0byB0aGUgbmV4dCBlbnRyeS4gICovCisrICBzdHJ1Y3Qgc2VydmljZV91c2VyICpuZXh0OworKyAgLyogQWN0aW9uIGFjY29yZGluZyB0byByZXN1bHQuICAqLworKyAgbG9va3VwX2FjdGlvbnMgYWN0aW9uc1s1XTsKKysgIC8qIExpbmsgdG8gdGhlIHVuZGVybHlpbmcgbGlicmFyeSBvYmplY3QuICAqLworKyAgc2VydmljZV9saWJyYXJ5ICpsaWJyYXJ5OworKyAgLyogQ29sbGVjdGlvbiBvZiBrbm93biBmdW5jdGlvbnMuCisrCisrICAgICBXaXRoIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0ggZW5hYmxlZCwgdGhpcyBpcyB0aGUgcm9vdCBvZiBhCisrICAgICAndHNlYXJjaCctc3R5bGUgdHJlZS4KKysKKysgICAgIFdpdGggT1BUSU9OX0VHTElCQ19OU1NXSVRDSCBkaXNhYmxlZCwgdGhpcyBpcyBhbiBhcnJheSBvZgorKyAgICAgcG9pbnRlcnMgdG8ga25vd25fZnVuY3Rpb24gc3RydWN0dXJlcywgTlVMTC10ZXJtaW5hdGVkLiAgKi8KKysgIHVuaW9uCisrICB7CisrICAgIHZvaWQgKnRyZWU7CisrICAgIGNvbnN0IGtub3duX2Z1bmN0aW9uICoqYXJyYXk7CisrICB9IGtub3duOworKyAgLyogTmFtZSBvZiB0aGUgc2VydmljZSAoYGZpbGVzJywgYGRucycsIGBuaXMnLCAuLi4pLiAgKi8KKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrfSBzZXJ2aWNlX3VzZXI7CisrCisrLyogVG8gYWNjZXNzIHRoZSBhY3Rpb24gYmFzZWQgb24gdGhlIHN0YXR1cyB2YWx1ZSB1c2UgdGhpcyBtYWNyby4gICovCisrI2RlZmluZSBuc3NfbmV4dF9hY3Rpb24obmksIHN0YXR1cykgKChuaSktPmFjdGlvbnNbMiArIHN0YXR1c10pCisrCisrCisrdHlwZWRlZiBzdHJ1Y3QgbmFtZV9kYXRhYmFzZV9lbnRyeQorK3sKKysgIC8qIEFuZCB0aGUgbGluayB0byB0aGUgbmV4dCBlbnRyeS4gICovCisrICBzdHJ1Y3QgbmFtZV9kYXRhYmFzZV9lbnRyeSAqbmV4dDsKKysgIC8qIExpc3Qgb2Ygc2VydmljZSB0byBiZSB1c2VkLiAgKi8KKysgIHNlcnZpY2VfdXNlciAqc2VydmljZTsKKysgIC8qIE5hbWUgb2YgdGhlIGRhdGFiYXNlLiAgKi8KKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrfSBuYW1lX2RhdGFiYXNlX2VudHJ5OworKworKworK3R5cGVkZWYgc3RydWN0IG5hbWVfZGF0YWJhc2UKKyt7CisrICAvKiBMaXN0IG9mIGFsbCBrbm93biBkYXRhYmFzZXMuICAqLworKyAgbmFtZV9kYXRhYmFzZV9lbnRyeSAqZW50cnk7CisrICAvKiBMaXN0IG9mIGxpYnJhcmllcyB3aXRoIHNlcnZpY2UgaW1wbGVtZW50YXRpb24uICAqLworKyAgc2VydmljZV9saWJyYXJ5ICpsaWJyYXJ5OworK30gbmFtZV9kYXRhYmFzZTsKKysKKysKKysMCisrLyogR2F0aGVyaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgRklYRURfRlVOQ1RJT05TIGZpbGUuICAqLworKworKy8qIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBnZW5lcmF0ZSB0aGlzIGxpc3QgYXV0b21hdGljYWxseSBieQorKyAgIGxvb2tpbmcgYXQgdGhlIHNlcnZpY2VzIGFuZCBkYXRhYmFzZXMgdXNlZCBpbiB0aGUgbnNzd2l0Y2guY29uZgorKyAgIGZpbGUsIGFuZCBoYXZpbmcgYSBoYXJkLWNvZGVkIHNldCBvZiBxdWVyaWVzIHN1cHBvcnRlZCBvbiBlYWNoCisrICAgZGF0YWJhc2UuICAqLworKworKy8qIFdlICNpbmNsdWRlIHRoZSBGSVhFRF9GVU5DVElPTlMgZmlsZSBzZXZlcmFsIHRpbWVzIHRvIGJ1aWxkIGFuCisrICAgYXJyYXkgb2YgZnVuY3Rpb24gc3RydWN0dXJlcyBob2xkaW5nIGl0cyBkYXRhLiAgKi8KKytlbnVtIGZ1bmN0aW9uX2tpbmQgeworKyAgZmtfZW5kID0gMCwgICAgICAgICAgICAgICAgICAgLyogTGFzdCBlbnRyeS4gICovCisrICBma19zZXRlbnQsICAgICAgICAgICAgICAgICAgICAvKiBMaWtlIHNldHB3ZW50LiAgKi8KKysgIGZrX2dldGVudCwgICAgICAgICAgICAgICAgICAgIC8qIExpa2UgZ2V0cHdlbnQuICAqLworKyAgZmtfZW5kZW50LCAgICAgICAgICAgICAgICAgICAgLyogTGlrZSBlbmRwd2VudC4gICovCisrICBma19nZXRieSwgICAgICAgICAgICAgICAgICAgICAvKiBMaWtlIGdldGhvc3RieW5hbWUuICAqLworKyAgZmtfZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgLyogTGlrZSBnZXRwd25hbS4gICovCisrfTsKKysKKysKKytzdHJ1Y3QgZnVuY3Rpb24geworKyAgLyogV2hhdCBraW5kIG9mIGZ1bmN0aW9uIHRoaXMgaXMuICAqLworKyAgZW51bSBmdW5jdGlvbl9raW5kIGtpbmQ7CisrCisrICAvKiBUaGUgZGF0YWJhc2UgYW5kIHNlcnZpY2Ugb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIGhhcmR3aXJlZCBpbi4gICovCisrICBjaGFyICpkYXRhYmFzZSwgKnNlcnZpY2U7CisrCisrICAvKiBUaGUga2luZCBvZiBlbnRyeSBiZWluZyBxdWVyaWVkLCBmb3IgJ2ZrX3NldGVudCcsICdma19nZXRlbnQnLAorKyAgICAgJ2ZrX2VuZGVudCcsIGFuZCAnZmtfZ2V0YnknIGZ1bmN0aW9ucy4gICovCisrICBjaGFyICplbnRyeTsKKysKKysgIC8qIFRoZSBrZXksIGZvciAnZmtfZ2V0YnknIGVudHJpZXMuICAqLworKyAgY2hhciAqa2V5OworKworKyAgLyogVGhlIHZhbHVlIGFuZCBrZXksIGZvciAnZmtfZ2V0JyBlbnRyaWVzLiAgKi8KKysgIGNoYXIgKnZhbHVlX2FuZF9rZXk7CisrfTsKKysKKysKKytjb25zdCBzdHJ1Y3QgZnVuY3Rpb24gZnVuY3Rpb25zW10gPQorKyAgeworKworKyNkZWZpbmUgREVGSU5FX0VOVChkYXRhYmFzZSwgc2VydmljZSwgZW50cnkpICAgIFwKKysgICAgeyBma19zZXRlbnQsICNkYXRhYmFzZSwgI3NlcnZpY2UsICNlbnRyeSB9LCBcCisrICAgIHsgZmtfZ2V0ZW50LCAjZGF0YWJhc2UsICNzZXJ2aWNlLCAjZW50cnkgfSwgXAorKyAgICB7IGZrX2VuZGVudCwgI2RhdGFiYXNlLCAjc2VydmljZSwgI2VudHJ5IH0sCisrI2RlZmluZSBERUZJTkVfR0VUQlkoZGF0YWJhc2UsIHNlcnZpY2UsIGVudHJ5LCBrZXkpICAgXAorKyAgICB7IGZrX2dldGJ5LCAjZGF0YWJhc2UsICNzZXJ2aWNlLCAjZW50cnksICNrZXkgfSwKKysjZGVmaW5lIERFRklORV9HRVQoZGF0YWJhc2UsIHNlcnZpY2UsIHZhbHVlX2FuZF9rZXkpICAgICBcCisrICAgIHsgZmtfZ2V0LCAjZGF0YWJhc2UsICNzZXJ2aWNlLCBOVUxMLCBOVUxMLCAjdmFsdWVfYW5kX2tleSB9LAorKworKyNpbmNsdWRlIEZJWEVEX0ZVTkNUSU9OUworKworKyN1bmRlZiBERUZJTkVfRU5UCisrI3VuZGVmIERFRklORV9HRVRCWQorKyN1bmRlZiBERUZJTkVfR0VUCisrCisrICAgIHsgZmtfZW5kIH0KKysgIH07CisrCisrDAorKy8qIFBhcnNpbmcgdGhlIGNvbmZpZyBmaWxlLiAgRnVuY3Rpb25zIGNvcGllZCBmcm9tIG5zc3dpdGNoLmMuICAqLworKworKyNkZWZpbmUgX19zdHJjaHJudWwgc3RyY2hybnVsCisrI2RlZmluZSBfX2dldGxpbmUgZ2V0bGluZQorKyNkZWZpbmUgX19zdHJuY2FzZWNtcCBzdHJuY2FzZWNtcAorKworKy8qIFByb3RvdHlwZXMgZm9yIHRoZSBsb2NhbCBmdW5jdGlvbnMuICAqLworK3N0YXRpYyBuYW1lX2RhdGFiYXNlICpuc3NfcGFyc2VfZmlsZSAoY29uc3QgY2hhciAqZm5hbWUpIGludGVybmFsX2Z1bmN0aW9uOworK3N0YXRpYyBuYW1lX2RhdGFiYXNlX2VudHJ5ICpuc3NfZ2V0bGluZSAoY2hhciAqbGluZSkgaW50ZXJuYWxfZnVuY3Rpb247Cisrc3RhdGljIHNlcnZpY2VfdXNlciAqbnNzX3BhcnNlX3NlcnZpY2VfbGlzdCAoY29uc3QgY2hhciAqbGluZSkKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworKworK3N0YXRpYyBuYW1lX2RhdGFiYXNlICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK25zc19wYXJzZV9maWxlIChjb25zdCBjaGFyICpmbmFtZSkKKyt7CisrICBGSUxFICpmcDsKKysgIG5hbWVfZGF0YWJhc2UgKnJlc3VsdDsKKysgIG5hbWVfZGF0YWJhc2VfZW50cnkgKmxhc3Q7CisrICBjaGFyICpsaW5lOworKyAgc2l6ZV90IGxlbjsKKysKKysgIC8qIE9wZW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gICovCisrICBmcCA9IGZvcGVuIChmbmFtZSwgInJjIik7CisrICBpZiAoZnAgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICAvLyAvKiBObyB0aHJlYWRzIHVzZSB0aGlzIHN0cmVhbS4gICovCisrICAvLyBfX2ZzZXRsb2NraW5nIChmcCwgRlNFVExPQ0tJTkdfQllDQUxMRVIpOworKworKyAgcmVzdWx0ID0gKG5hbWVfZGF0YWJhc2UgKikgeG1hbGxvYyAoc2l6ZW9mIChuYW1lX2RhdGFiYXNlKSk7CisrCisrICByZXN1bHQtPmVudHJ5ID0gTlVMTDsKKysgIHJlc3VsdC0+bGlicmFyeSA9IE5VTEw7CisrICBsYXN0ID0gTlVMTDsKKysgIGxpbmUgPSBOVUxMOworKyAgbGVuID0gMDsKKysgIGRvCisrICAgIHsKKysgICAgICBuYW1lX2RhdGFiYXNlX2VudHJ5ICp0aGlzOworKyAgICAgIHNzaXplX3QgbjsKKysKKysgICAgICBuID0gX19nZXRsaW5lICgmbGluZSwgJmxlbiwgZnApOworKyAgICAgIGlmIChuIDwgMCkKKysJYnJlYWs7CisrICAgICAgaWYgKGxpbmVbbiAtIDFdID09ICdcbicpCisrCWxpbmVbbiAtIDFdID0gJ1wwJzsKKysKKysgICAgICAvKiBCZWNhdXNlIHRoZSBmaWxlIGZvcm1hdCBkb2VzIG5vdCBrbm93IGFueSBmb3JtIG9mIHF1b3Rpbmcgd2UKKysJIGNhbiBzZWFyY2ggZm9yd2FyZCBmb3IgdGhlIG5leHQgJyMnIGNoYXJhY3RlciBhbmQgaWYgZm91bmQKKysJIG1ha2UgaXQgdGVybWluYXRpbmcgdGhlIGxpbmUuICAqLworKyAgICAgICpfX3N0cmNocm51bCAobGluZSwgJyMnKSA9ICdcMCc7CisrCisrICAgICAgLyogSWYgdGhlIGxpbmUgaXMgYmxhbmsgaXQgaXMgaWdub3JlZC4gICovCisrICAgICAgaWYgKGxpbmVbMF0gPT0gJ1wwJykKKysJY29udGludWU7CisrCisrICAgICAgLyogRWFjaCBsaW5lIGNvbXBsZXRlbHkgc3BlY2lmaWVzIHRoZSBhY3Rpb25zIGZvciBhIGRhdGFiYXNlLiAgKi8KKysgICAgICB0aGlzID0gbnNzX2dldGxpbmUgKGxpbmUpOworKyAgICAgIGlmICh0aGlzICE9IE5VTEwpCisrCXsKKysJICBpZiAobGFzdCAhPSBOVUxMKQorKwkgICAgbGFzdC0+bmV4dCA9IHRoaXM7CisrCSAgZWxzZQorKwkgICAgcmVzdWx0LT5lbnRyeSA9IHRoaXM7CisrCisrCSAgbGFzdCA9IHRoaXM7CisrCX0KKysgICAgfQorKyAgd2hpbGUgKCFmZW9mX3VubG9ja2VkIChmcCkpOworKworKyAgLyogRnJlZSB0aGUgYnVmZmVyLiAgKi8KKysgIGZyZWUgKGxpbmUpOworKyAgLyogQ2xvc2UgY29uZmlndXJhdGlvbiBmaWxlLiAgKi8KKysgIGZjbG9zZSAoZnApOworKworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrLyogUmVhZCB0aGUgc291cmNlIG5hbWVzOgorKwlgKCA8c291cmNlPiAoICJbIiAiISI/ICg8c3RhdHVzPiAiPSIgPGFjdGlvbj4gKSsgIl0iICk/ICkqJworKyAgICovCisrc3RhdGljIHNlcnZpY2VfdXNlciAqCisraW50ZXJuYWxfZnVuY3Rpb24KKytuc3NfcGFyc2Vfc2VydmljZV9saXN0IChjb25zdCBjaGFyICpsaW5lKQorK3sKKysgIHNlcnZpY2VfdXNlciAqcmVzdWx0ID0gTlVMTCwgKipuZXh0cCA9ICZyZXN1bHQ7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIHNlcnZpY2VfdXNlciAqbmV3X3NlcnZpY2U7CisrICAgICAgY29uc3QgY2hhciAqbmFtZTsKKysKKysgICAgICB3aGlsZSAoaXNzcGFjZSAobGluZVswXSkpCisrCSsrbGluZTsKKysgICAgICBpZiAobGluZVswXSA9PSAnXDAnKQorKwkvKiBObyBzb3VyY2Ugc3BlY2lmaWVkLiAgKi8KKysJcmV0dXJuIHJlc3VsdDsKKysKKysgICAgICAvKiBSZWFkIDxzb3VyY2U+IGlkZW50aWZpZXIuICAqLworKyAgICAgIG5hbWUgPSBsaW5lOworKyAgICAgIHdoaWxlIChsaW5lWzBdICE9ICdcMCcgJiYgIWlzc3BhY2UgKGxpbmVbMF0pICYmIGxpbmVbMF0gIT0gJ1snKQorKwkrK2xpbmU7CisrICAgICAgaWYgKG5hbWUgPT0gbGluZSkKKysJcmV0dXJuIHJlc3VsdDsKKysKKysKKysgICAgICBuZXdfc2VydmljZSA9IChzZXJ2aWNlX3VzZXIgKikgeG1hbGxvYyAoc2l6ZW9mICgqbmV3X3NlcnZpY2UpKTsKKysgICAgICBuZXdfc2VydmljZS0+bmFtZSA9IChjaGFyICopIHhtYWxsb2MgKGxpbmUgLSBuYW1lICsgMSk7CisrCisrICAgICAgKigoY2hhciAqKSBfX21lbXBjcHkgKChjaGFyICopIG5ld19zZXJ2aWNlLT5uYW1lLCBuYW1lLCBsaW5lIC0gbmFtZSkpCisrICAgICAgICA9ICdcMCc7CisrCisrICAgICAgLyogU2V0IGRlZmF1bHQgYWN0aW9ucy4gICovCisrICAgICAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfVFJZQUdBSU5dID0gTlNTX0FDVElPTl9DT05USU5VRTsKKysgICAgICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19VTkFWQUlMXSA9IE5TU19BQ1RJT05fQ09OVElOVUU7CisrICAgICAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfTk9URk9VTkRdID0gTlNTX0FDVElPTl9DT05USU5VRTsKKysgICAgICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19TVUNDRVNTXSA9IE5TU19BQ1RJT05fUkVUVVJOOworKyAgICAgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1JFVFVSTl0gPSBOU1NfQUNUSU9OX1JFVFVSTjsKKysgICAgICBuZXdfc2VydmljZS0+bGlicmFyeSA9IE5VTEw7CisrICAgICAgbmV3X3NlcnZpY2UtPmtub3duLnRyZWUgPSBOVUxMOworKyAgICAgIG5ld19zZXJ2aWNlLT5uZXh0ID0gTlVMTDsKKysKKysgICAgICB3aGlsZSAoaXNzcGFjZSAobGluZVswXSkpCisrCSsrbGluZTsKKysKKysgICAgICBpZiAobGluZVswXSA9PSAnWycpCisrCXsKKysJICAvKiBSZWFkIGNyaXRlcmlvbnMuICAqLworKwkgIGRvCisrCSAgICArK2xpbmU7CisrCSAgd2hpbGUgKGxpbmVbMF0gIT0gJ1wwJyAmJiBpc3NwYWNlIChsaW5lWzBdKSk7CisrCisrCSAgZG8KKysJICAgIHsKKysJICAgICAgaW50IG5vdDsKKysJICAgICAgZW51bSBuc3Nfc3RhdHVzIHN0YXR1czsKKysJICAgICAgbG9va3VwX2FjdGlvbnMgYWN0aW9uOworKworKwkgICAgICAvKiBHcm9rICEgYmVmb3JlIG5hbWUgdG8gbWVhbiBhbGwgc3RhdGlpIGJ1dCB0aGF0IG9uZS4gICovCisrCSAgICAgIG5vdCA9IGxpbmVbMF0gPT0gJyEnOworKwkgICAgICBpZiAobm90KQorKwkJKytsaW5lOworKworKwkgICAgICAvKiBSZWFkIHN0YXR1cyBuYW1lLiAgKi8KKysJICAgICAgbmFtZSA9IGxpbmU7CisrCSAgICAgIHdoaWxlIChsaW5lWzBdICE9ICdcMCcgJiYgIWlzc3BhY2UgKGxpbmVbMF0pICYmIGxpbmVbMF0gIT0gJz0nCisrCQkgICAgICYmIGxpbmVbMF0gIT0gJ10nKQorKwkJKytsaW5lOworKworKwkgICAgICAvKiBDb21wYXJlIHdpdGgga25vd24gc3RhdGlpLiAgKi8KKysJICAgICAgaWYgKGxpbmUgLSBuYW1lID09IDcpCisrCQl7CisrCQkgIGlmIChfX3N0cm5jYXNlY21wIChuYW1lLCAiU1VDQ0VTUyIsIDcpID09IDApCisrCQkgICAgc3RhdHVzID0gTlNTX1NUQVRVU19TVUNDRVNTOworKwkJICBlbHNlIGlmIChfX3N0cm5jYXNlY21wIChuYW1lLCAiVU5BVkFJTCIsIDcpID09IDApCisrCQkgICAgc3RhdHVzID0gTlNTX1NUQVRVU19VTkFWQUlMOworKwkJICBlbHNlCisrCQkgICAgcmV0dXJuIHJlc3VsdDsKKysJCX0KKysJICAgICAgZWxzZSBpZiAobGluZSAtIG5hbWUgPT0gOCkKKysJCXsKKysJCSAgaWYgKF9fc3RybmNhc2VjbXAgKG5hbWUsICJOT1RGT1VORCIsIDgpID09IDApCisrCQkgICAgc3RhdHVzID0gTlNTX1NUQVRVU19OT1RGT1VORDsKKysJCSAgZWxzZSBpZiAoX19zdHJuY2FzZWNtcCAobmFtZSwgIlRSWUFHQUlOIiwgOCkgPT0gMCkKKysJCSAgICBzdGF0dXMgPSBOU1NfU1RBVFVTX1RSWUFHQUlOOworKwkJICBlbHNlCisrCQkgICAgcmV0dXJuIHJlc3VsdDsKKysJCX0KKysJICAgICAgZWxzZQorKwkJcmV0dXJuIHJlc3VsdDsKKysKKysJICAgICAgd2hpbGUgKGlzc3BhY2UgKGxpbmVbMF0pKQorKwkJKytsaW5lOworKwkgICAgICBpZiAobGluZVswXSAhPSAnPScpCisrCQlyZXR1cm4gcmVzdWx0OworKwkgICAgICBkbworKwkJKytsaW5lOworKwkgICAgICB3aGlsZSAoaXNzcGFjZSAobGluZVswXSkpOworKworKwkgICAgICBuYW1lID0gbGluZTsKKysJICAgICAgd2hpbGUgKGxpbmVbMF0gIT0gJ1wwJyAmJiAhaXNzcGFjZSAobGluZVswXSkgJiYgbGluZVswXSAhPSAnPScKKysJCSAgICAgJiYgbGluZVswXSAhPSAnXScpCisrCQkrK2xpbmU7CisrCisrCSAgICAgIGlmIChsaW5lIC0gbmFtZSA9PSA2ICYmIF9fc3RybmNhc2VjbXAgKG5hbWUsICJSRVRVUk4iLCA2KSA9PSAwKQorKwkJYWN0aW9uID0gTlNTX0FDVElPTl9SRVRVUk47CisrCSAgICAgIGVsc2UgaWYgKGxpbmUgLSBuYW1lID09IDgKKysJCSAgICAgICAmJiBfX3N0cm5jYXNlY21wIChuYW1lLCAiQ09OVElOVUUiLCA4KSA9PSAwKQorKwkJYWN0aW9uID0gTlNTX0FDVElPTl9DT05USU5VRTsKKysJICAgICAgZWxzZQorKwkJcmV0dXJuIHJlc3VsdDsKKysKKysJICAgICAgaWYgKG5vdCkKKysJCXsKKysJCSAgLyogU2F2ZSB0aGUgY3VycmVudCBhY3Rpb24gc2V0dGluZyBmb3IgdGhpcyBzdGF0dXMsCisrCQkgICAgIHNldCB0aGVtIGFsbCB0byB0aGUgZ2l2ZW4gYWN0aW9uLCBhbmQgcmVzZXQgdGhpcyBvbmUuICAqLworKwkJICBjb25zdCBsb29rdXBfYWN0aW9ucyBzYXZlID0gbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIHN0YXR1c107CisrCQkgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1RSWUFHQUlOXSA9IGFjdGlvbjsKKysJCSAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfVU5BVkFJTF0gPSBhY3Rpb247CisrCQkgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX05PVEZPVU5EXSA9IGFjdGlvbjsKKysJCSAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfU1VDQ0VTU10gPSBhY3Rpb247CisrCQkgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBzdGF0dXNdID0gc2F2ZTsKKysJCX0KKysJICAgICAgZWxzZQorKwkJbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIHN0YXR1c10gPSBhY3Rpb247CisrCisrCSAgICAgIC8qIFNraXAgd2hpdGUgc3BhY2VzLiAgKi8KKysJICAgICAgd2hpbGUgKGlzc3BhY2UgKGxpbmVbMF0pKQorKwkJKytsaW5lOworKwkgICAgfQorKwkgIHdoaWxlIChsaW5lWzBdICE9ICddJyk7CisrCisrCSAgLyogU2tpcCB0aGUgJ10nLiAgKi8KKysJICArK2xpbmU7CisrCX0KKysKKysgICAgICAqbmV4dHAgPSBuZXdfc2VydmljZTsKKysgICAgICBuZXh0cCA9ICZuZXdfc2VydmljZS0+bmV4dDsKKysgICAgfQorK30KKysKKytzdGF0aWMgbmFtZV9kYXRhYmFzZV9lbnRyeSAqCisraW50ZXJuYWxfZnVuY3Rpb24KKytuc3NfZ2V0bGluZSAoY2hhciAqbGluZSkKKyt7CisrICBjb25zdCBjaGFyICpuYW1lOworKyAgbmFtZV9kYXRhYmFzZV9lbnRyeSAqcmVzdWx0OworKyAgc2l6ZV90IGxlbjsKKysKKysgIC8qIElnbm9yZSBsZWFkaW5nIHdoaXRlIHNwYWNlcy4gIEFUVEVOVElPTjogdGhpcyBpcyBkaWZmZXJlbnQgZnJvbQorKyAgICAgd2hhdCBpcyBpbXBsZW1lbnRlZCBpbiBTb2xhcmlzLiAgVGhlIFNvbGFyaXMgbWFuIHBhZ2Ugc2F5cyBhIGxpbmUKKysgICAgIGJlZ2lubmluZyB3aXRoIGEgd2hpdGUgc3BhY2UgY2hhcmFjdGVyIGlzIGlnbm9yZWQuICBXZSByZWdhcmQKKysgICAgIHRoaXMgYXMganVzdCBhbm90aGVyIG1pc2ZlYXR1cmUgaW4gU29sYXJpcy4gICovCisrICB3aGlsZSAoaXNzcGFjZSAobGluZVswXSkpCisrICAgICsrbGluZTsKKysKKysgIC8qIFJlY29nbml6ZSBgPGRhdGFiYXNlPiAiOiInLiAgKi8KKysgIG5hbWUgPSBsaW5lOworKyAgd2hpbGUgKGxpbmVbMF0gIT0gJ1wwJyAmJiAhaXNzcGFjZSAobGluZVswXSkgJiYgbGluZVswXSAhPSAnOicpCisrICAgICsrbGluZTsKKysgIGlmIChsaW5lWzBdID09ICdcMCcgfHwgbmFtZSA9PSBsaW5lKQorKyAgICAvKiBTeW50YXggZXJyb3IuICAqLworKyAgICByZXR1cm4gTlVMTDsKKysgICpsaW5lKysgPSAnXDAnOworKworKyAgbGVuID0gc3RybGVuIChuYW1lKSArIDE7CisrCisrICByZXN1bHQgPSAobmFtZV9kYXRhYmFzZV9lbnRyeSAqKSB4bWFsbG9jIChzaXplb2YgKCpyZXN1bHQpKTsKKysgIHJlc3VsdC0+bmFtZSA9IChjaGFyICopIHhtYWxsb2MgKGxlbik7CisrCisrICAvKiBTYXZlIHRoZSBkYXRhYmFzZSBuYW1lLiAgKi8KKysgIG1lbWNweSAoKGNoYXIgKikgcmVzdWx0LT5uYW1lLCBuYW1lLCBsZW4pOworKworKyAgLyogUGFyc2UgdGhlIGxpc3Qgb2Ygc2VydmljZXMuICAqLworKyAgcmVzdWx0LT5zZXJ2aWNlID0gbnNzX3BhcnNlX3NlcnZpY2VfbGlzdCAobGluZSk7CisrCisrICByZXN1bHQtPm5leHQgPSBOVUxMOworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrDAorKy8qIEdlbmVyYXRpbmcgY29kZSBmb3Igc3RhdGljYWxseSBpbml0aWFsaXplZCBuc3N3aXRjaCBzdHJ1Y3R1cmVzLiAgKi8KKysKKysKKysvKiBSZXR1cm4gdGhlIHNlcnZpY2UtbmV1dHJhbCBzdWZmaXggb2YgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UKKysgICBsaWJyYXJ5IGZ1bmN0aW9uIHJlZmVycmVkIHRvIGJ5IHRoZSBmdW5jdGlvbiBGLiAgVGhlIHJlc3VsdCBpcworKyAgIGFsbG9jYXRlZCB3aXRoIG1hbGxvYy4gICovCisrY2hhciAqCisra25vd25fZnVuY3Rpb25fc3VmZml4IChjb25zdCBzdHJ1Y3QgZnVuY3Rpb24gKmYpCisreworKyAgc3dpdGNoIChmLT5raW5kKQorKyAgICB7CisrICAgIGNhc2UgZmtfc2V0ZW50OgorKyAgICAgIHJldHVybiBzYXByaW50ZiAoInNldCVzZW50IiwgZi0+ZW50cnkpOworKworKyAgICBjYXNlIGZrX2dldGVudDoKKysgICAgICByZXR1cm4gc2FwcmludGYgKCJnZXQlc2VudF9yIiwgZi0+ZW50cnkpOworKworKyAgICBjYXNlIGZrX2VuZGVudDoKKysgICAgICByZXR1cm4gc2FwcmludGYgKCJlbmQlc2VudCIsIGYtPmVudHJ5KTsKKysKKysgICAgY2FzZSBma19nZXRieToKKysgICAgICByZXR1cm4gc2FwcmludGYgKCJnZXQlc2J5JXNfciIsIGYtPmVudHJ5LCBmLT5rZXkpOworKworKyAgICBjYXNlIGZrX2dldDoKKysgICAgICByZXR1cm4gc2FwcmludGYgKCJnZXQlc19yIiwgZi0+dmFsdWVfYW5kX2tleSk7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgYWJvcnQgKCk7CisrICAgIH0KKyt9CisrCisrCisrLyogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGxpYnJhcnkgZnVuY3Rpb24gcmVmZXJyZWQgdG8gYnkgdGhlCisrICAgZnVuY3Rpb24gRi4gIFRoZSByZXN1bHQgaXMgYWxsb2NhdGVkIHdpdGggbWFsbG9jLiAgKi8KKytjaGFyICoKKytrbm93bl9mdW5jdGlvbl9uYW1lIChjb25zdCBzdHJ1Y3QgZnVuY3Rpb24gKmYpCisreworKyAgcmV0dXJuIHNhcHJpbnRmICgiX25zc18lc18lcyIsIGYtPnNlcnZpY2UsIGtub3duX2Z1bmN0aW9uX3N1ZmZpeCAoZikpOworK30KKysKKysKKysvKiBXcml0ZSBpbml0aWFsaXplZCBrbm93bl9mdW5jdGlvbiBzdHJ1Y3R1cmVzIHRvIE9VVCBmb3IKKysgICBhbGwgdGhlIGZ1bmN0aW9ucyB3ZSdsbCB1c2UuICAqLworK3ZvaWQKKytnZW5lcmF0ZV9rbm93bl9mdW5jdGlvbnMgKEZJTEUgKm91dCkKKyt7CisrICBpbnQgaTsKKysKKysgIC8qIEZpcnN0LCBnZW5lcmF0ZSB3ZWFrIHJlZmVyZW5jZXMgdG8gdGhlIGZ1bmN0aW9ucy4gIFRoZSBzZXJ2aWNlCisrICAgICBsaWJyYXJpZXMgZGVwZW5kIG9uIGxpYmMsIGFuZCBpZiB0aGVzZSByZWZlcmVuY2VzIHdlcmVuJ3Qgd2VhaywKKysgICAgIHdlJ2QgYmUgbWFraW5nIGxpYmMgZGVwZW5kIGNpcmN1bGFybHkgb24gdGhlIHNlcnZpY2UKKysgICAgIGxpYnJhcmllcy4gICovCisrICBmb3IgKGkgPSAwOyBmdW5jdGlvbnNbaV0ua2luZDsgaSsrKQorKyAgICB7CisrICAgICAgY2hhciAqbmFtZSA9IGtub3duX2Z1bmN0aW9uX25hbWUgKCZmdW5jdGlvbnNbaV0pOworKyAgICAgIGZwcmludGYgKG91dCwgInR5cGVvZiAoJXMpICVzIF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7XG4iLAorKyAgICAgICAgICAgICAgIG5hbWUsIG5hbWUpOworKyAgICB9CisrICBmcHV0cyAoIlxuIiwgb3V0KTsKKysKKysgIC8qIFRoZW4sIGEgdGFibGUgbWFwcGluZyBuYW1lcyB0byBmdW5jdGlvbnMuICAqLworKyAgZnB1dHMgKCJzdGF0aWMgY29uc3Qga25vd25fZnVuY3Rpb24gZml4ZWRfa25vd25fZnVuY3Rpb25zW10gPSB7XG4iLAorKyAgICAgICAgIG91dCk7CisrICBmb3IgKGkgPSAwOyBmdW5jdGlvbnNbaV0ua2luZDsgaSsrKQorKyAgICB7CisrICAgICAgY29uc3Qgc3RydWN0IGZ1bmN0aW9uICpmID0gJmZ1bmN0aW9uc1tpXTsKKysgICAgICBjaGFyICpzdWZmaXggPSBrbm93bl9mdW5jdGlvbl9zdWZmaXggKGYpOworKworKyAgICAgIGZwcmludGYgKG91dCwgIiAgLyogJTJkICovIHsgXCIlc1wiLCBfbnNzXyVzXyVzIH0sXG4iLAorKyAgICAgICAgICAgICAgIGksIHN1ZmZpeCwgZi0+c2VydmljZSwgc3VmZml4KTsKKysgICAgfQorKyAgZnB1dHMgKCJ9O1xuIiwgb3V0KTsKKysgIGZwdXRzICgiXG4iLCBvdXQpOworK30KKysKKysKKysvKiBQcmludCBjb2RlIHRvIE9VVCBmb3IgYW4gaW5pdGlhbGl6ZWQgYXJyYXkgb2YgcG9pbnRlcnMgdG8gdGhlCisrICAgJ2tub3duX2Z1bmN0aW9uJyBzdHJ1Y3R1cmVzIG5lZWRlZCBmb3IgVVNFUiwgd2hpY2ggaXMgZm9yCisrICAgREFUQUJBU0UuICBSZXR1cm4gaXRzIG5hbWUsIGFsbG9jYXRlZCB3aXRoIG1hbGxvYy4gICovCisrY2hhciAqCisrZ2VuZXJhdGVfa25vd25fZnVuY3Rpb25fbGlzdCAoRklMRSAqb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVfZGF0YWJhc2VfZW50cnkgKmRhdGFiYXNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VfdXNlciAqdXNlcikKKyt7CisrICBjaGFyICpsaXN0X25hbWUgPSBzYXByaW50ZiAoImZpeGVkXyVzXyVzX2tub3duX2Z1bmNzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZS0+bmFtZSwgdXNlci0+bmFtZSk7CisrICBmcHJpbnRmIChvdXQsICJzdGF0aWMgY29uc3Qga25vd25fZnVuY3Rpb24gKiVzW10gPSB7XG4iLAorKyAgICAgICAgICAgbGlzdF9uYW1lKTsKKysgIGludCBpOworKyAgZm9yIChpID0gMDsgZnVuY3Rpb25zW2ldLmtpbmQ7IGkrKykKKysgICAgaWYgKHN0cmNtcCAoZnVuY3Rpb25zW2ldLmRhdGFiYXNlLCBkYXRhYmFzZS0+bmFtZSkgPT0gMAorKyAgICAgICAgJiYgc3RyY21wIChmdW5jdGlvbnNbaV0uc2VydmljZSwgdXNlci0+bmFtZSkgPT0gMCkKKysgICAgICBmcHJpbnRmIChvdXQsICIgICZmaXhlZF9rbm93bl9mdW5jdGlvbnNbJWRdLCAvKiAlcyAqL1xuIiwKKysgICAgICAgICAgICAgICBpLCBrbm93bl9mdW5jdGlvbl9uYW1lICgmZnVuY3Rpb25zW2ldKSk7CisrICBmcHV0cyAoIiAgTlVMTFxuIiwgb3V0KTsKKysgIGZwdXRzICgifTtcbiIsIG91dCk7CisrICBmcHV0cyAoIlxuIiwgb3V0KTsKKysKKysgIHJldHVybiBsaXN0X25hbWU7CisrfQorKworKworKy8qIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgc3RhdHVzIHZhbHVlIFNUQVRVUywgYXMgYSBzdGF0aWNhbGx5CisrICAgYWxsb2NhdGVkIHN0cmluZy4gICovCisrY29uc3QgY2hhciAqCisrbG9va3VwX3N0YXR1c19uYW1lIChlbnVtIG5zc19zdGF0dXMgc3RhdHVzKQorK3sKKysgIHN3aXRjaCAoc3RhdHVzKQorKyAgICB7CisrICAgIGNhc2UgTlNTX1NUQVRVU19UUllBR0FJTjogcmV0dXJuICJOU1NfU1RBVFVTX1RSWUFHQUlOIjsKKysgICAgY2FzZSBOU1NfU1RBVFVTX1VOQVZBSUw6IHJldHVybiAiTlNTX1NUQVRVU19VTkFWQUlMIjsKKysgICAgY2FzZSBOU1NfU1RBVFVTX05PVEZPVU5EOiByZXR1cm4gIk5TU19TVEFUVVNfTk9URk9VTkQiOworKyAgICBjYXNlIE5TU19TVEFUVVNfU1VDQ0VTUzogcmV0dXJuICJOU1NfU1RBVFVTX1NVQ0NFU1MiOworKyAgICBjYXNlIE5TU19TVEFUVVNfUkVUVVJOOiByZXR1cm4gIk5TU19TVEFUVVNfUkVUVVJOIjsKKysgICAgZGVmYXVsdDogYWJvcnQgKCk7CisrICAgIH07CisrfQorKworKworKy8qIFJldHVybiB0aGUgbmFtZSBvZiBBQ1RJT04gYXMgYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBzdHJpbmcuICAqLworK2NvbnN0IGNoYXIgKgorK2xvb2t1cF9hY3Rpb25fbmFtZSAobG9va3VwX2FjdGlvbnMgYWN0aW9uKQorK3sKKysgIHN3aXRjaCAoYWN0aW9uKQorKyAgICB7CisrICAgIGNhc2UgTlNTX0FDVElPTl9DT05USU5VRTogcmV0dXJuICJOU1NfQUNUSU9OX0NPTlRJTlVFIjsKKysgICAgY2FzZSBOU1NfQUNUSU9OX1JFVFVSTjogcmV0dXJuICJOU1NfQUNUSU9OX1JFVFVSTiI7CisrICAgIGRlZmF1bHQ6IGFib3J0ICgpOworKyAgICB9CisrfQorKworKworKy8qIFByaW50IGNvZGUgdG8gT1VUIGZvciB0aGUgbGlzdCBvZiBzZXJ2aWNlX3VzZXIgc3RydWN0dXJlcyBzdGFydGluZworKyAgIHdpdGggVVNFUiwgd2hpY2ggYXJlIGFsbCBmb3IgREFUQUJBU0UuICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlCisrICAgZmlyc3Qgc3RydWN0dXJlIGluIHRoYXQgbGlzdCwgb3IgemVybyBpZiBVU0VSIGlzIE5VTEwuICAqLworK2NoYXIgKgorK2dlbmVyYXRlX3NlcnZpY2VfdXNlcl9saXN0IChGSUxFICpvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfZGF0YWJhc2VfZW50cnkgKmRhdGFiYXNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlX3VzZXIgKnVzZXIpCisreworKyAgaWYgKHVzZXIpCisrICAgIHsKKysgICAgICAvKiBHZW5lcmF0ZSB0aGUgdGFpbCBvZiB0aGUgbGlzdC4gICovCisrICAgICAgY2hhciAqbmV4dF9uYW1lID0gZ2VuZXJhdGVfc2VydmljZV91c2VyX2xpc3QgKG91dCwgZGF0YWJhc2UsIHVzZXItPm5leHQpOworKyAgICAgIC8qIEdlbmVyYXRlIG91ciBrbm93biBmdW5jdGlvbiBsaXN0LiAgKi8KKysgICAgICBjaGFyICprbm93bl9mdW5jdGlvbl9saXN0X25hbWUgPQorKyAgICAgICAgZ2VuZXJhdGVfa25vd25fZnVuY3Rpb25fbGlzdCAob3V0LCBkYXRhYmFzZSwgdXNlcik7CisrCisrICAgICAgY2hhciAqbmFtZSA9IHNhcHJpbnRmICgiZml4ZWRfJXNfJXNfdXNlciIsIGRhdGFiYXNlLT5uYW1lLCB1c2VyLT5uYW1lKTsKKysKKysgICAgICBmcHJpbnRmIChvdXQsICJzdGF0aWMgY29uc3Qgc2VydmljZV91c2VyICVzID0ge1xuIiwgbmFtZSk7CisrICAgICAgaWYgKG5leHRfbmFtZSkKKysgICAgICAgIGZwcmludGYgKG91dCwgIiAgKHNlcnZpY2VfdXNlciAqKSAmJXMsXG4iLCBuZXh0X25hbWUpOworKyAgICAgIGVsc2UKKysgICAgICAgIGZwcmludGYgKG91dCwgIiAgTlVMTCwgLyogbm8gbmV4dCBlbnRyeSAqL1xuIik7CisrICAgICAgZnB1dHMgKCIgIHtcbiIsIG91dCk7CisrICAgICAgaW50IGk7CisrICAgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZiAodXNlci0+YWN0aW9ucykgLyBzaXplb2YgKHVzZXItPmFjdGlvbnNbMF0pOyBpKyspCisrICAgICAgICBmcHJpbnRmIChvdXQsICIgICAgJXMsIC8qICVzICovXG4iLAorKyAgICAgICAgICAgICAgICAgbG9va3VwX2FjdGlvbl9uYW1lICh1c2VyLT5hY3Rpb25zW2ldKSwKKysgICAgICAgICAgICAgICAgIGxvb2t1cF9zdGF0dXNfbmFtZSAoaSAtIDIpKTsKKysgICAgICBmcHV0cyAoIiAgfSxcbiIsIG91dCk7CisrICAgICAgZnByaW50ZiAob3V0LCAiICBOVUxMLCAgLyogd2UgbmV2ZXIgbmVlZCB0aGUgc2VydmljZSBsaWJyYXJ5ICovXG4iKTsKKysgICAgICBmcHJpbnRmIChvdXQsICIgIHsgLmFycmF5ID0gJXMgfSxcbiIsIGtub3duX2Z1bmN0aW9uX2xpc3RfbmFtZSk7CisrICAgICAgZnByaW50ZiAob3V0LCAiICBcIiVzXCJcbiIsIHVzZXItPm5hbWUpOworKyAgICAgIGZwdXRzICgifTtcbiIsIG91dCk7CisrICAgICAgZnB1dHMgKCJcbiIsIG91dCk7CisrCisrICAgICAgcmV0dXJuIG5hbWU7CisrICAgIH0KKysgIGVsc2UKKysgICAgcmV0dXJuIE5VTEw7CisrfQorKworKworKy8qIFByaW50IGNvZGUgdG8gT1VUIGZvciB0aGUgbGlzdCBvZiBuYW1lX2RhdGFiYXNlX2VudHJ5IHN0cnVjdHVyZXMKKysgICBzdGFydGluZyB3aXRoIERBVEFCQVNFLiAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBmaXJzdCBzdHJ1Y3R1cmUKKysgICBpbiB0aGF0IGxpc3QsIG9yIHplcm8gaWYgREFUQUJBU0UgaXMgTlVMTC4gICovCisrY2hhciAqCisrZ2VuZXJhdGVfbmFtZV9kYXRhYmFzZV9lbnRyaWVzIChGSUxFICpvdXQsIG5hbWVfZGF0YWJhc2VfZW50cnkgKmRhdGFiYXNlKQorK3sKKysgIGlmIChkYXRhYmFzZSkKKysgICAgeworKyAgICAgIGNoYXIgKm5leHRfbmFtZSA9IGdlbmVyYXRlX25hbWVfZGF0YWJhc2VfZW50cmllcyAob3V0LCBkYXRhYmFzZS0+bmV4dCk7CisrICAgICAgY2hhciAqc2VydmljZV91c2VyX25hbWUKKysgICAgICAgID0gZ2VuZXJhdGVfc2VydmljZV91c2VyX2xpc3QgKG91dCwgZGF0YWJhc2UsIGRhdGFiYXNlLT5zZXJ2aWNlKTsKKysgICAgICBjaGFyICpuYW1lID0gc2FwcmludGYgKCJmaXhlZF8lc19uYW1lX2RhdGFiYXNlIiwgZGF0YWJhc2UtPm5hbWUpOworKworKyAgICAgIGZwcmludGYgKG91dCwgInN0YXRpYyBjb25zdCBuYW1lX2RhdGFiYXNlX2VudHJ5ICVzID0ge1xuIiwgbmFtZSk7CisrCisrICAgICAgaWYgKG5leHRfbmFtZSkKKysgICAgICAgIGZwcmludGYgKG91dCwgIiAgKG5hbWVfZGF0YWJhc2VfZW50cnkgKikgJiVzLFxuIiwgbmV4dF9uYW1lKTsKKysgICAgICBlbHNlCisrICAgICAgICBmcHJpbnRmIChvdXQsICIgIE5VTEwsXG4iKTsKKysKKysgICAgICBpZiAoc2VydmljZV91c2VyX25hbWUpCisrICAgICAgICBmcHJpbnRmIChvdXQsICIgIChzZXJ2aWNlX3VzZXIgKikgJiVzLFxuIiwgc2VydmljZV91c2VyX25hbWUpOworKyAgICAgIGVsc2UKKysgICAgICAgIGZwcmludGYgKG91dCwgIiAgTlVMTCxcbiIpOworKworKyAgICAgIGZwcmludGYgKG91dCwgIiAgXCIlc1wiXG4iLCBkYXRhYmFzZS0+bmFtZSk7CisrICAgICAgZnByaW50ZiAob3V0LCAifTtcbiIpOworKyAgICAgIGZwdXRzICgiXG4iLCBvdXQpOworKworKyAgICAgIHJldHVybiBuYW1lOworKyAgICB9CisrICBlbHNlCisrICAgIHJldHVybiBOVUxMOworK30KKysKKysKKyt2b2lkCisrZ2VuZXJhdGVfbmFtZV9kYXRhYmFzZSAoRklMRSAqb3V0LCBuYW1lX2RhdGFiYXNlICpzZXJ2aWNlX3RhYmxlKQorK3sKKysgIC8qIFByb2R1Y2UgYSBsaW5rZWQgbGlzdCBvZiB0aGUga25vd24gbmFtZV9kYXRhYmFzZV9lbnRyeQorKyAgICAgc3RydWN0dXJlcy4gICovCisrICBjaGFyICplbnRyaWVzID0gZ2VuZXJhdGVfbmFtZV9kYXRhYmFzZV9lbnRyaWVzIChvdXQsIHNlcnZpY2VfdGFibGUtPmVudHJ5KTsKKysKKysgIC8qIE5vdyBwcm9kdWNlIHRoZSBtYWluIHN0cnVjdHVyZSB0aGF0IHBvaW50cyB0byB0aGVtIGFsbC4gICovCisrICBmcHJpbnRmIChvdXQsICJzdGF0aWMgY29uc3QgbmFtZV9kYXRhYmFzZSBmaXhlZF9uYW1lX2RhdGFiYXNlID0ge1xuIik7CisrICBpZiAoZW50cmllcykKKysgICAgZnByaW50ZiAob3V0LCAiICAobmFtZV9kYXRhYmFzZV9lbnRyeSAqKSAmJXMsXG4iLCBlbnRyaWVzKTsKKysgIGVsc2UKKysgICAgZnByaW50ZiAob3V0LCAiICBOVUxMLFxuIik7CisrICBmcHV0cyAoIiAgTlVMTCAvKiB3ZSBkb24ndCBuZWVkIHRoZSBsaWJyYXJpZXMgKi9cbiIKKysgICAgICAgICAifTtcbiIsCisrICAgICAgICAgb3V0KTsKKyt9CisrCisrCisrDAorKy8qIEdlbmVyYXRpbmcgdGhlIGxpc3Qgb2Ygc2VydmljZSBsaWJyYXJpZXMgd2UgZ2VuZXJhdGUgcmVmZXJlbmNlcyB0by4gICovCisrCisrLyogU3RyaW5nIHdpdGggcmV2aXNpb24gbnVtYmVyIG9mIHRoZSBzaGFyZWQgb2JqZWN0IGZpbGVzLiAgKi8KKytzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbnNzX3NobGliX3JldmlzaW9uID0gTElCTlNTX0ZJTEVTX1NPICsgMTU7CisrCisrdm9pZAorK2dlbmVyYXRlX3NlcnZpY2VfbGliX2xpc3QgKEZJTEUgKm91dCwgbmFtZV9kYXRhYmFzZSAqc2VydmljZV90YWJsZSkKKyt7CisrICBpbnQgaSwgajsKKysgIGludCBwcmludGVkX2FueSA9IDA7CisrCisrICBmb3IgKGkgPSAwOyBmdW5jdGlvbnNbaV0ua2luZDsgaSsrKQorKyAgICB7CisrICAgICAgLyogTWVudGlvbiBlYWNoIHNlcnZpY2UgbGlicmFyeSBvbmx5IG9uY2UuICAqLworKyAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKyspCisrICAgICAgICBpZiAoc3RyY21wIChmdW5jdGlvbnNbaV0uc2VydmljZSwgZnVuY3Rpb25zW2pdLnNlcnZpY2UpID09IDApCisrICAgICAgICAgIGJyZWFrOworKworKyAgICAgIGlmIChqID49IGkpCisrICAgICAgICB7CisrICAgICAgICAgIGlmIChwcmludGVkX2FueSkKKysgICAgICAgICAgICBwdXRjICgnICcsIG91dCk7CisrICAgICAgICAgIGZwcmludGYgKG91dCwgIi1sbnNzXyVzIiwKKysgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zW2ldLnNlcnZpY2UsCisrICAgICAgICAgICAgICAgICAgIG5zc19zaGxpYl9yZXZpc2lvbik7CisrICAgICAgICAgIHByaW50ZWRfYW55ID0gMTsKKysgICAgICAgIH0KKysgICAgfQorK30KKysKKysMCisrLyogTWFpbi4gICovCisrCisraW50CisrbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgIGlmIChhcmdjICE9IDQpCisrICAgIHsKKysgICAgICBmcHJpbnRmIChzdGRlcnIsICJ1c2FnZTogZ2VuLWZpeGVkLW5zc3dpdGNoIEhFQURFUiBTRVJWTElCUyBDT05GSUdcbiIpOworKyAgICAgIGV4aXQgKDEpOworKyAgICB9CisrCisrICBuYW1lX2RhdGFiYXNlICpzZXJ2aWNlX3RhYmxlID0gbnNzX3BhcnNlX2ZpbGUgKGFyZ3ZbM10pOworKworKyAgRklMRSAqaGVhZGVyID0gZm9wZW4gKGFyZ3ZbMV0sICJ3Iik7CisrICBpZiAoISBoZWFkZXIpCisrICAgIHsKKysgICAgICBmcHJpbnRmIChzdGRlcnIsCisrICAgICAgICAgICAgICAgImdlbi1maXhlZC1uc3N3aXRjaDogY291bGRuJ3Qgb3BlbiBvdXRwdXQgZmlsZSAlczogJXNcbiIsCisrICAgICAgICAgICAgICAgYXJndlsxXSwgc3RyZXJyb3IgKGVycm5vKSk7CisrICAgICAgZXhpdCAoMSk7CisrICAgIH0KKysgIGZwdXRzICgiLyogR2VuZXJhdGVkIGJ5IG5zcy9nZW4tZml4ZWQtbnNzd2l0Y2guYy4gICovXG4iLCBoZWFkZXIpOworKyAgZnB1dHMgKCJcbiIsIGhlYWRlcik7CisrICBnZW5lcmF0ZV9rbm93bl9mdW5jdGlvbnMgKGhlYWRlcik7CisrICBnZW5lcmF0ZV9uYW1lX2RhdGFiYXNlIChoZWFkZXIsIHNlcnZpY2VfdGFibGUpOworKyAgZmNsb3NlIChoZWFkZXIpOworKworKyAgRklMRSAqc2VydmljZV9saWJfbGlzdCA9IGZvcGVuIChhcmd2WzJdLCAidyIpOworKyAgaWYgKCEgc2VydmljZV9saWJfbGlzdCkKKysgICAgeworKyAgICAgIGZwcmludGYgKHN0ZGVyciwKKysgICAgICAgICAgICAgICAiZ2VuLWZpeGVkLW5zc3dpdGNoOiBjb3VsZG4ndCBvcGVuIG91dHB1dCBmaWxlICVzOiAlc1xuIiwKKysgICAgICAgICAgICAgICBhcmd2WzJdLCBzdHJlcnJvciAoZXJybm8pKTsKKysgICAgICBleGl0ICgxKTsKKysgICAgfQorKyAgZ2VuZXJhdGVfc2VydmljZV9saWJfbGlzdCAoc2VydmljZV9saWJfbGlzdCwgc2VydmljZV90YWJsZSk7CisrICBmY2xvc2UgKHNlcnZpY2VfbGliX2xpc3QpOworKworKyAgcmV0dXJuIDA7CisrfQorZGlmZiAtLWdpdCBhL25zcy9nZXRlbnQuYyBiL25zcy9nZXRlbnQuYworaW5kZXggMzRkZjg0OC4uNjc0YzhlZSAxMDA2NDQKKy0tLSBhL25zcy9nZXRlbnQuYworKysrIGIvbnNzL2dldGVudC5jCitAQCAtMzksNiArMzksNyBAQAorICNpbmNsdWRlIDxuZXRpbmV0L2V0aGVyLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIC8qIEdldCBsaWJjIHZlcnNpb24gbnVtYmVyLiAgKi8KKyAjaW5jbHVkZSA8dmVyc2lvbi5oPgorQEAgLTkxLDYgKzkyLDcgQEAgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG5cCisgICBmcHJpbnRmIChzdHJlYW0sIGdldHRleHQgKCJXcml0dGVuIGJ5ICVzLlxuIiksICJUaG9yc3RlbiBLdWt1ayIpOworIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0RCX0FMSUFTRVMKKyAvKiBUaGlzIGlzIGZvciBhbGlhc2VzICovCisgc3RhdGljIHZvaWQKKyBwcmludF9hbGlhc2VzIChzdHJ1Y3QgYWxpYXNlbnQgKmFsaWFzKQorQEAgLTEzNSw3ICsxMzcsOSBAQCBhbGlhc2VzX2tleXMgKGludCBudW1iZXIsIGNoYXIgKmtleVtdKQorIAorICAgcmV0dXJuIHJlc3VsdDsKKyB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19EQl9BTElBU0VTICovCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgLyogVGhpcyBpcyBmb3IgZXRoZXJzICovCisgc3RhdGljIGludAorIGV0aGVyc19rZXlzIChpbnQgbnVtYmVyLCBjaGFyICprZXlbXSkKK0BAIC0xNzksNiArMTgzLDcgQEAgZXRoZXJzX2tleXMgKGludCBudW1iZXIsIGNoYXIgKmtleVtdKQorIAorICAgcmV0dXJuIHJlc3VsdDsKKyB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19JTkVUICovCisgCisgLyogVGhpcyBpcyBmb3IgZ3JvdXAgKi8KKyBzdGF0aWMgdm9pZAorQEAgLTMwMSw2ICszMDYsNyBAQCBnc2hhZG93X2tleXMgKGludCBudW1iZXIsIGNoYXIgKmtleVtdKQorICAgcmV0dXJuIHJlc3VsdDsKKyB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgLyogVGhpcyBpcyBmb3IgaG9zdHMgKi8KKyBzdGF0aWMgdm9pZAorIHByaW50X2hvc3RzIChzdHJ1Y3QgaG9zdGVudCAqaG9zdCkKK0BAIC01OTgsNiArNjA0LDcgQEAgbmV0d29ya3Nfa2V5cyAoaW50IG51bWJlciwgY2hhciAqa2V5W10pCisgCisgICByZXR1cm4gcmVzdWx0OworIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0lORVQgKi8KKyAKKyAvKiBOb3cgaXMgYWxsIGZvciBwYXNzd2QgKi8KKyBzdGF0aWMgdm9pZAorQEAgLTY1MCw2ICs2NTcsNyBAQCBwYXNzd2Rfa2V5cyAoaW50IG51bWJlciwgY2hhciAqa2V5W10pCisgICByZXR1cm4gcmVzdWx0OworIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAvKiBUaGlzIGlzIGZvciBwcm90b2NvbHMgKi8KKyBzdGF0aWMgdm9pZAorIHByaW50X3Byb3RvY29scyAoc3RydWN0IHByb3RvZW50ICpwcm90bykKK0BAIC04MDcsNiArODE1LDcgQEAgc2VydmljZXNfa2V5cyAoaW50IG51bWJlciwgY2hhciAqa2V5W10pCisgCisgICByZXR1cm4gcmVzdWx0OworIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0lORVQgKi8KKyAKKyAvKiBUaGlzIGlzIGZvciBzaGFkb3cgKi8KKyBzdGF0aWMgdm9pZAorQEAgLTg3MywyMyArODgyLDM2IEBAIHN0cnVjdAorICAgfSBkYXRhYmFzZXNbXSA9CisgICB7CisgI2RlZmluZSBEKG5hbWUpIHsgI25hbWUsIG5hbWUgIyMgX2tleXMgfSwKKy1EKGFob3N0cykKKy1EKGFob3N0c3Y0KQorLUQoYWhvc3RzdjYpCistRChhbGlhc2VzKQorLUQoZXRoZXJzKQorKworKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorKyMgZGVmaW5lIEROKG5hbWUpIEQobmFtZSkKKysjZWxzZQorKyMgZGVmaW5lIEROKG5hbWUpCisrI2VuZGlmCisrCisrI2lmIF9fT1BUSU9OX0VHTElCQ19EQl9BTElBU0VTCisrIyBkZWZpbmUgREEobmFtZSkgRChuYW1lKQorKyNlbHNlCisrIyBkZWZpbmUgREEobmFtZSkKKysjZW5kaWYKKysKKytETihhaG9zdHMpCisrRE4oYWhvc3RzdjQpCisrRE4oYWhvc3RzdjYpCisrREEoYWxpYXNlcykKKytETihldGhlcnMpCisgRChncm91cCkKKyBEKGdzaGFkb3cpCistRChob3N0cykKKy1EKGluaXRncm91cHMpCistRChuZXRncm91cCkKKy1EKG5ldHdvcmtzKQorK0ROKGhvc3RzKQorK0ROKGluaXRncm91cHMpCisrRE4obmV0Z3JvdXApCisrRE4obmV0d29ya3MpCisgRChwYXNzd2QpCistRChwcm90b2NvbHMpCisrRE4ocHJvdG9jb2xzKQorICNpZiBIQVZFX1NVTlJQQworLUQocnBjKQorK0ROKHJwYykKKyAjZW5kaWYKKy1EKHNlcnZpY2VzKQorK0ROKHNlcnZpY2VzKQorIEQoc2hhZG93KQorICN1bmRlZiBECisgICAgIHsgTlVMTCwgTlVMTCB9CitkaWZmIC0tZ2l0IGEvbnNzL2dldG5zc2VudF9yLmMgYi9uc3MvZ2V0bnNzZW50X3IuYworaW5kZXggZjViOTAzNi4uZjA5ZjdmZSAxMDA2NDQKKy0tLSBhL25zcy9nZXRuc3NlbnRfci5jCisrKysgYi9uc3MvZ2V0bnNzZW50X3IuYworQEAgLTE2LDYgKzE2LDcgQEAKKyAgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDxuZXRkYi5oPgorICNpbmNsdWRlICJuc3N3aXRjaC5oIgorIAorQEAgLTU5LDExICs2MCwxMyBAQCBfX25zc19zZXRlbnQgKGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSwgZGJfbG9va3VwX2Z1bmN0aW9uIGxvb2t1cF9mY3QsCisgICB9IGZjdDsKKyAgIGludCBub19tb3JlOworIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorICAgaWYgKHJlcyAmJiBfX3Jlc19tYXliZV9pbml0ICgmX3JlcywgMCkgPT0gLTEpCisgICAgIHsKKyAgICAgICBfX3NldF9oX2Vycm5vIChORVREQl9JTlRFUk5BTCk7CisgICAgICAgcmV0dXJuOworICAgICB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19JTkVUICovCisgCisgICAvKiBDeWNsZSB0aHJvdWdoIHRoZSBzZXJ2aWNlcyBhbmQgcnVuIHRoZWlyIGBzZXRYWGVudCcgZnVuY3Rpb25zIHVudGlsCisgICAgICB3ZSBmaW5kIGFuIGF2YWlsYWJsZSBzZXJ2aWNlLiAgKi8KK0BAIC0xMDEsMTEgKzEwNCwxMyBAQCBfX25zc19lbmRlbnQgKGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSwgZGJfbG9va3VwX2Z1bmN0aW9uIGxvb2t1cF9mY3QsCisgICB9IGZjdDsKKyAgIGludCBub19tb3JlOworIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorICAgaWYgKHJlcyAmJiBfX3Jlc19tYXliZV9pbml0ICgmX3JlcywgMCkgPT0gLTEpCisgICAgIHsKKyAgICAgICBfX3NldF9oX2Vycm5vIChORVREQl9JTlRFUk5BTCk7CisgICAgICAgcmV0dXJuOworICAgICB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19JTkVUICovCisgCisgICAvKiBDeWNsZSB0aHJvdWdoIGFsbCB0aGUgc2VydmljZXMgYW5kIHJ1biB0aGVpciBlbmRYWGVudCBmdW5jdGlvbnMuICAqLworICAgbm9fbW9yZSA9IHNldHVwIChmdW5jX25hbWUsIGxvb2t1cF9mY3QsICZmY3QucHRyLCBuaXAsIHN0YXJ0cCwgMSk7CitAQCAtMTQxLDEyICsxNDYsMTQgQEAgX19uc3NfZ2V0ZW50X3IgKGNvbnN0IGNoYXIgKmdldGVudF9mdW5jX25hbWUsCisgICBpbnQgbm9fbW9yZTsKKyAgIGVudW0gbnNzX3N0YXR1cyBzdGF0dXM7CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgICBpZiAocmVzICYmIF9fcmVzX21heWJlX2luaXQgKCZfcmVzLCAwKSA9PSAtMSkKKyAgICAgeworICAgICAgICpoX2Vycm5vcCA9IE5FVERCX0lOVEVSTkFMOworICAgICAgICpyZXN1bHQgPSBOVUxMOworICAgICAgIHJldHVybiBlcnJubzsKKyAgICAgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfSU5FVCAqLworIAorICAgLyogSW5pdGlhbGl6ZSBzdGF0dXMgdG8gcmV0dXJuIGlmIG5vIG1vcmUgZnVuY3Rpb25zIGFyZSBmb3VuZC4gICovCisgICBzdGF0dXMgPSBOU1NfU1RBVFVTX05PVEZPVU5EOworQEAgLTE2MSw3ICsxNjgsNyBAQCBfX25zc19nZXRlbnRfciAoY29uc3QgY2hhciAqZ2V0ZW50X2Z1bmNfbmFtZSwKKyAgICAgICBpbnQgaXNfbGFzdF9uaXAgPSAqbmlwID09ICpsYXN0X25pcDsKKyAKKyAgICAgICBzdGF0dXMgPSBETF9DQUxMX0ZDVCAoZmN0LmYsCistCQkJICAgIChyZXNidWYsIGJ1ZmZlciwgYnVmbGVuLCAmZXJybm8sICZoX2Vycm5vKSk7CisrCQkJICAgIChyZXNidWYsIGJ1ZmZlciwgYnVmbGVuLCAmZXJybm8sIGhfZXJybm9wKSk7CisgCisgICAgICAgLyogVGhlIHN0YXR1cyBpcyBOU1NfU1RBVFVTX1RSWUFHQUlOIGFuZCBlcnJubyBpcyBFUkFOR0UgdGhlCisgCSBwcm92aWRlZCBidWZmZXIgaXMgdG9vIHNtYWxsLiAgSW4gdGhpcyBjYXNlIHdlIHNob3VsZCBnaXZlCitkaWZmIC0tZ2l0IGEvbnNzL25zc3dpdGNoLmMgYi9uc3MvbnNzd2l0Y2guYworaW5kZXggOTcxMjYyMy4uYzgxZTIwNyAxMDA2NDQKKy0tLSBhL25zcy9uc3N3aXRjaC5jCisrKysgYi9uc3MvbnNzd2l0Y2guYworQEAgLTI2LDYgKzI2LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaW5jbHVkZSA8YWxpYXNlcy5oPgorICNpbmNsdWRlIDxncnAuaD4KK0BAIC00MSw2ICs0MiwxNSBAQAorICNpbmNsdWRlICIuLi9uc2NkL25zY2RfcHJvdG8uaCIKKyAjaW5jbHVkZSA8c3lzZGVwLmg+CisgCisrLyogV2hlbiBPUFRJT05fRUdMSUJDX05TU1dJVENIIGlzIGRpc2FibGVkLCB3ZSB1c2UgZml4ZWQgdGFibGVzIG9mCisrICAgZGF0YWJhc2VzIGFuZCBzZXJ2aWNlcywgZ2VuZXJhdGVkIGF0IGxpYnJhcnkgYnVpbGQgdGltZS4gIFRodXM6CisrICAgLSBXZSBjYW4ndCByZWNvbmZpZ3VyZSBpbmRpdmlkdWFsIGRhdGFiYXNlcywgc28gd2UgZG9uJ3QgbmVlZCBhCisrICAgICBuYW1lLXRvLWRhdGFiYXNlIG1hcC4KKysgICAtIFdlIG5ldmVyIGFkZCBkYXRhYmFzZXMgb3Igc2VydmljZSBsaWJyYXJpZXMsIG9yIGxvb2sgdXAgZnVuY3Rpb25zCisrICAgICBhdCBydW50aW1lLCBzbyB0aGVyZSdzIG5vIG5lZWQgZm9yIGEgbG9jayB0byBwcm90ZWN0IG91ciB0YWJsZXMuCisrICAgU2VlIC4uL29wdGlvbi1ncm91cHMuZGVmIGZvciB0aGUgZGV0YWlscy4gICovCisrI2lmIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSAorKworIC8qIFByb3RvdHlwZXMgZm9yIHRoZSBsb2NhbCBmdW5jdGlvbnMuICAqLworIHN0YXRpYyBuYW1lX2RhdGFiYXNlICpuc3NfcGFyc2VfZmlsZSAoY29uc3QgY2hhciAqZm5hbWUpIGludGVybmFsX2Z1bmN0aW9uOworIHN0YXRpYyBuYW1lX2RhdGFiYXNlX2VudHJ5ICpuc3NfZ2V0bGluZSAoY2hhciAqbGluZSkgaW50ZXJuYWxfZnVuY3Rpb247CitAQCAtNzksNiArODksOSBAQCBib29sIF9fbnNzX2RhdGFiYXNlX2N1c3RvbVtOU1NfREJTSURYX21heF07CisgCisgX19saWJjX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkIChzdGF0aWMsIGxvY2spCisgCisrI2RlZmluZSBsb2NrX25zc3dpdGNoIF9fbGliY19sb2NrX2xvY2sgKGxvY2spCisrI2RlZmluZSB1bmxvY2tfbnNzd2l0Y2ggX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKQorKworICNpZiAhZGVmaW5lZCBET19TVEFUSUNfTlNTIHx8IGRlZmluZWQgU0hBUkVECisgLyogU3RyaW5nIHdpdGggcmV2aXNpb24gbnVtYmVyIG9mIHRoZSBzaGFyZWQgb2JqZWN0IGZpbGVzLiAgKi8KKyBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgX19uc3Nfc2hsaWJfcmV2aXNpb24gPSBMSUJOU1NfRklMRVNfU08gKyAxNTsKK0BAIC05Myw2ICsxMDYsMjAgQEAgc3RhdGljIG5hbWVfZGF0YWJhc2UgKnNlcnZpY2VfdGFibGU7CisgICAgX19saWJjX2ZyZWVyZXMuICAqLworIHN0YXRpYyBuYW1lX2RhdGFiYXNlX2VudHJ5ICpkZWZjb25maWdfZW50cmllczsKKyAKKysjZWxzZSAvKiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0ggKi8KKysKKysvKiBCcmluZyBpbiB0aGUgc3RhdGljYWxseSBpbml0aWFsaXplZCBzZXJ2aWNlIHRhYmxlIHdlIGdlbmVyYXRlZCBhdAorKyAgIGJ1aWxkIHRpbWUuICAqLworKyNpbmNsdWRlICJmaXhlZC1uc3N3aXRjaC5oIgorKworK2NvbnN0IHN0YXRpYyBuYW1lX2RhdGFiYXNlICpzZXJ2aWNlX3RhYmxlID0gJmZpeGVkX25hbWVfZGF0YWJhc2U7CisrCisrLyogTm90aGluZyBldmVyIGNoYW5nZXMsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBsb2NrIGFueXRoaW5nLiAgKi8KKysjZGVmaW5lIGxvY2tfbnNzd2l0Y2ggKDApCisrI2RlZmluZSB1bmxvY2tfbnNzd2l0Y2ggKDApCisrCisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSCAqLworKworIAorICNpZmRlZiBVU0VfTlNDRAorIC8qIE5vbnplcm8gaWYgdGhpcyBpcyB0aGUgbnNjZCBwcm9jZXNzLiAgKi8KK0BAIC0xMDksMjAgKzEzNiwyMiBAQCBfX25zc19kYXRhYmFzZV9sb29rdXAgKGNvbnN0IGNoYXIgKmRhdGFiYXNlLCBjb25zdCBjaGFyICphbHRlcm5hdGVfbmFtZSwKKyAJCSAgICAgICBjb25zdCBjaGFyICpkZWZjb25maWcsIHNlcnZpY2VfdXNlciAqKm5pKQorIHsKKyAgIC8qIFByZXZlbnQgbXVsdGlwbGUgdGhyZWFkcyB0byBjaGFuZ2UgdGhlIHNlcnZpY2UgdGFibGUuICAqLworLSAgX19saWJjX2xvY2tfbG9jayAobG9jayk7CisrICBsb2NrX25zc3dpdGNoOworIAorICAgLyogUmVjb25zaWRlciBkYXRhYmFzZSB2YXJpYWJsZSBpbiBjYXNlIHNvbWUgb3RoZXIgdGhyZWFkIGNhbGxlZAorICAgICAgYF9fbnNzX2NvbmZpZ3VyZV9sb29rdXAnIHdoaWxlIHdlIHdhaXRlZCBmb3IgdGhlIGxvY2suICAqLworICAgaWYgKCpuaSAhPSBOVUxMKQorICAgICB7CistICAgICAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKysgICAgICB1bmxvY2tfbnNzd2l0Y2g7CisgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX05TU1dJVENICisgICAvKiBBcmUgd2UgaW5pdGlhbGl6ZWQgeWV0PyAgKi8KKyAgIGlmIChzZXJ2aWNlX3RhYmxlID09IE5VTEwpCisgICAgIC8qIFJlYWQgY29uZmlnIGZpbGUuICAqLworICAgICBzZXJ2aWNlX3RhYmxlID0gbnNzX3BhcnNlX2ZpbGUgKF9QQVRIX05TU1dJVENIX0NPTkYpOworKyNlbmRpZgorIAorICAgLyogVGVzdCB3aGV0aGVyIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBhdmFpbGFibGUuICAqLworICAgaWYgKHNlcnZpY2VfdGFibGUgIT0gTlVMTCkKK0BAIC0xNDQsNiArMTczLDcgQEAgX19uc3NfZGF0YWJhc2VfbG9va3VwIChjb25zdCBjaGFyICpkYXRhYmFzZSwgY29uc3QgY2hhciAqYWx0ZXJuYXRlX25hbWUsCisgCSAgICAqbmkgPSBlbnRyeS0+c2VydmljZTsKKyAgICAgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0gKKyAgIC8qIE5vIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBhdmFpbGFibGUsIGVpdGhlciBiZWNhdXNlIG5zc3dpdGNoLmNvbmYKKyAgICAgIGRvZXNuJ3QgZXhpc3Qgb3IgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgYSBsaW5lIGZvciB0aGlzIGRhdGFiYXNlLgorIAorQEAgLTE2NiwxMyArMTk2LDIzIEBAIF9fbnNzX2RhdGFiYXNlX2xvb2t1cCAoY29uc3QgY2hhciAqZGF0YWJhc2UsIGNvbnN0IGNoYXIgKmFsdGVybmF0ZV9uYW1lLAorIAkgICAgeworIAkgICAgICBlbnRyeS0+bmV4dCA9IGRlZmNvbmZpZ19lbnRyaWVzOworIAkgICAgICBlbnRyeS0+c2VydmljZSA9ICpuaTsKKy0JICAgICAgZW50cnktPm5hbWVbMF0gPSAnXDAnOworKwkgICAgICBlbnRyeS0+bmFtZSA9ICIiOworIAkgICAgICBkZWZjb25maWdfZW50cmllcyA9IGVudHJ5OworIAkgICAgfQorIAl9CisgICAgIH0KKysjZWxzZQorKyAgLyogV2l0aG91dCB0aGUgZHluYW1pYyBiZWhhdmlvciwgd2UgY2FuJ3QgcHJvY2VzcyBkZWZjb25maWcuICBUaGUKKysgICAgIGRhdGFiYXNlcyB0aGUgdXNlciBzcGVjaWZpZWQgYXQgbGlicmFyeSBidWlsZCB0aW1lIGFyZSBhbGwgeW91CisrICAgICBnZXQuICAqLworKyAgaWYgKCpuaSA9PSBOVUxMKQorKyAgICB7CisrICAgICAgdW5sb2NrX25zc3dpdGNoOworKyAgICAgIHJldHVybiAtMTsKKysgICAgfQorKyNlbmRpZgorIAorLSAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKysgIHVubG9ja19uc3N3aXRjaDsKKyAKKyAgIHJldHVybiAqbmkgIT0gTlVMTCA/IDAgOiAtMTsKKyB9CitAQCAtMjUyLDYgKzI5Miw3IEBAIF9fbnNzX25leHQyIChzZXJ2aWNlX3VzZXIgKipuaSwgY29uc3QgY2hhciAqZmN0X25hbWUsIGNvbnN0IGNoYXIgKmZjdDJfbmFtZSwKKyBsaWJjX2hpZGRlbl9kZWYgKF9fbnNzX25leHQyKQorIAorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0gKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorIF9fbnNzX25leHQgKHNlcnZpY2VfdXNlciAqKm5pLCBjb25zdCBjaGFyICpmY3RfbmFtZSwgdm9pZCAqKmZjdHAsIGludCBzdGF0dXMsCitAQCAtMzAwLDEzICszNDEsMTMgQEAgX19uc3NfY29uZmlndXJlX2xvb2t1cCAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpzZXJ2aWNlX2xpbmUpCisgICAgIH0KKyAKKyAgIC8qIFByZXZlbnQgbXVsdGlwbGUgdGhyZWFkcyB0byBjaGFuZ2UgdGhlIHNlcnZpY2UgdGFibGUuICAqLworLSAgX19saWJjX2xvY2tfbG9jayAobG9jayk7CisrICBsb2NrX25zc3dpdGNoOworIAorICAgLyogSW5zdGFsbCBuZXcgcnVsZXMuICAqLworICAgKmRhdGFiYXNlc1tjbnRdLmRicCA9IG5ld19kYjsKKyAgIF9fbnNzX2RhdGFiYXNlX2N1c3RvbVtjbnRdID0gdHJ1ZTsKKyAKKy0gIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisrICB1bmxvY2tfbnNzd2l0Y2g7CisgCisgICByZXR1cm4gMDsKKyB9CitAQCAtNDAyLDcgKzQ0Myw3IEBAIF9fbnNzX2xvb2t1cF9mdW5jdGlvbiAoc2VydmljZV91c2VyICpuaSwgY29uc3QgY2hhciAqZmN0X25hbWUpCisgICB2b2lkICoqZm91bmQsICpyZXN1bHQ7CisgCisgICAvKiBXZSBub3cgbW9kaWZ5IGdsb2JhbCBkYXRhLiAgUHJvdGVjdCBpdC4gICovCistICBfX2xpYmNfbG9ja19sb2NrIChsb2NrKTsKKysgIGxvY2tfbnNzd2l0Y2g7CisgCisgICAvKiBTZWFyY2ggdGhlIHRyZWUgb2YgZnVuY3Rpb25zIHByZXZpb3VzbHkgcmVxdWVzdGVkLiAgRGF0YSBpbiB0aGUKKyAgICAgIHRyZWUgYXJlIGBrbm93bl9mdW5jdGlvbicgc3RydWN0dXJlcywgd2hvc2UgZmlyc3QgbWVtYmVyIGlzIGEKK0BAIC00MTMsNyArNDU0LDcgQEAgX19uc3NfbG9va3VwX2Z1bmN0aW9uIChzZXJ2aWNlX3VzZXIgKm5pLCBjb25zdCBjaGFyICpmY3RfbmFtZSkKKyAgICAgIGVub3VnaCB0byBhIHBvaW50ZXIgdG8gb3VyIHN0cnVjdHVyZSB0byB1c2UgYXMgYSBsb29rdXAga2V5IHRoYXQKKyAgICAgIHdpbGwgYmUgcGFzc2VkIHRvIGBrbm93bl9jb21wYXJlJyAoYWJvdmUpLiAgKi8KKyAKKy0gIGZvdW5kID0gX190c2VhcmNoICgmZmN0X25hbWUsICZuaS0+a25vd24sICZrbm93bl9jb21wYXJlKTsKKysgIGZvdW5kID0gX190c2VhcmNoICgmZmN0X25hbWUsICZuaS0+a25vd24udHJlZSwgJmtub3duX2NvbXBhcmUpOworICAgaWYgKGZvdW5kID09IE5VTEwpCisgICAgIC8qIFRoaXMgbWVhbnMgb3V0LW9mLW1lbW9yeS4gICovCisgICAgIHJlc3VsdCA9IE5VTEw7CitAQCAtNDQwLDcgKzQ4MSw3IEBAIF9fbnNzX2xvb2t1cF9mdW5jdGlvbiAoc2VydmljZV91c2VyICpuaSwgY29uc3QgY2hhciAqZmN0X25hbWUpCisgI2VuZGlmCisgCSAgLyogT29wcy4gIFdlIGNhbid0IGluc3RhbnRpYXRlIHRoaXMgbm9kZSBwcm9wZXJseS4KKyAJICAgICBSZW1vdmUgaXQgZnJvbSB0aGUgdHJlZS4gICovCistCSAgX190ZGVsZXRlICgmZmN0X25hbWUsICZuaS0+a25vd24sICZrbm93bl9jb21wYXJlKTsKKysJICBfX3RkZWxldGUgKCZmY3RfbmFtZSwgJm5pLT5rbm93bi50cmVlLCAma25vd25fY29tcGFyZSk7CisgCSAgZnJlZSAoa25vd24pOworIAkgIHJlc3VsdCA9IE5VTEw7CisgCX0KK0BAIC01MjAsMTMgKzU2MSw0MyBAQCBfX25zc19sb29rdXBfZnVuY3Rpb24gKHNlcnZpY2VfdXNlciAqbmksIGNvbnN0IGNoYXIgKmZjdF9uYW1lKQorICAgICB9CisgCisgICAvKiBSZW1vdmUgdGhlIGxvY2suICAqLworLSAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKysgIHVubG9ja19uc3N3aXRjaDsKKyAKKyAgIHJldHVybiByZXN1bHQ7CisgfQorIGxpYmNfaGlkZGVuX2RlZiAoX19uc3NfbG9va3VwX2Z1bmN0aW9uKQorIAorIAorKyNlbHNlIC8qIGJlbG93IGlmICEgX19PUFRJT05fRUdMSUJDX05TU1dJVENIICovCisrCisrCisraW50CisrX19uc3NfY29uZmlndXJlX2xvb2t1cCAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpzZXJ2aWNlX2xpbmUpCisreworKyAgLyogV2UgY2FuJ3QgZHluYW1pY2FsbHkgY29uZmlndXJlIGxvb2t1cCB3aXRob3V0CisrICAgICBPUFRJT05fRUdMSUJDX05TU1dJVENILiAgKi8KKysgIF9fc2V0X2Vycm5vIChFSU5WQUwpOworKyAgcmV0dXJuIC0xOworK30KKysKKysKKyt2b2lkICoKKytfX25zc19sb29rdXBfZnVuY3Rpb24gKHNlcnZpY2VfdXNlciAqbmksIGNvbnN0IGNoYXIgKmZjdF9uYW1lKQorK3sKKysgIGludCBpOworKyAgY29uc3Qga25vd25fZnVuY3Rpb24gKiprbm93biA9IG5pLT5rbm93bi5hcnJheTsKKysKKysgIGZvciAoaSA9IDA7IGtub3duW2ldOyBpKyspCisrICAgIGlmIChzdHJjbXAgKGZjdF9uYW1lLCBrbm93bltpXS0+ZmN0X25hbWUpID09IDApCisrICAgICAgcmV0dXJuIGtub3duW2ldLT5mY3RfcHRyOworKworKyAgcmV0dXJuIE5VTEw7CisrfQorK2xpYmNfaGlkZGVuX2RlZiAoX19uc3NfbG9va3VwX2Z1bmN0aW9uKQorKyNlbmRpZgorKworKworKyNpZiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0gKKyBzdGF0aWMgbmFtZV9kYXRhYmFzZSAqCisgaW50ZXJuYWxfZnVuY3Rpb24KKyBuc3NfcGFyc2VfZmlsZSAoY29uc3QgY2hhciAqZm5hbWUpCitAQCAtNjMyLDggKzcwMywxMCBAQCBuc3NfcGFyc2Vfc2VydmljZV9saXN0IChjb25zdCBjaGFyICpsaW5lKQorIAkJCQkJICAgICArIChsaW5lIC0gbmFtZSArIDEpKTsKKyAgICAgICBpZiAobmV3X3NlcnZpY2UgPT0gTlVMTCkKKyAJcmV0dXJuIHJlc3VsdDsKKysgICAgICBuZXdfc2VydmljZS0+bmFtZSA9IChjaGFyICopIChuZXdfc2VydmljZSArIDEpOworIAorLSAgICAgICooKGNoYXIgKikgX19tZW1wY3B5IChuZXdfc2VydmljZS0+bmFtZSwgbmFtZSwgbGluZSAtIG5hbWUpKSA9ICdcMCc7CisrICAgICAgKigoY2hhciAqKSBfX21lbXBjcHkgKChjaGFyICopIG5ld19zZXJ2aWNlLT5uYW1lLCBuYW1lLCBsaW5lIC0gbmFtZSkpCisrICAgICAgICA9ICdcMCc7CisgCisgICAgICAgLyogU2V0IGRlZmF1bHQgYWN0aW9ucy4gICovCisgICAgICAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfVFJZQUdBSU5dID0gTlNTX0FDVElPTl9DT05USU5VRTsKK0BAIC02NDIsNyArNzE1LDcgQEAgbnNzX3BhcnNlX3NlcnZpY2VfbGlzdCAoY29uc3QgY2hhciAqbGluZSkKKyAgICAgICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19TVUNDRVNTXSA9IE5TU19BQ1RJT05fUkVUVVJOOworICAgICAgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1JFVFVSTl0gPSBOU1NfQUNUSU9OX1JFVFVSTjsKKyAgICAgICBuZXdfc2VydmljZS0+bGlicmFyeSA9IE5VTEw7CistICAgICAgbmV3X3NlcnZpY2UtPmtub3duID0gTlVMTDsKKysgICAgICBuZXdfc2VydmljZS0+a25vd24udHJlZSA9IE5VTEw7CisgICAgICAgbmV3X3NlcnZpY2UtPm5leHQgPSBOVUxMOworIAorICAgICAgIHdoaWxlIChpc3NwYWNlIChsaW5lWzBdKSkKK0BAIC03NzgsOSArODUxLDEwIEBAIG5zc19nZXRsaW5lIChjaGFyICpsaW5lKQorICAgcmVzdWx0ID0gKG5hbWVfZGF0YWJhc2VfZW50cnkgKikgbWFsbG9jIChzaXplb2YgKG5hbWVfZGF0YWJhc2VfZW50cnkpICsgbGVuKTsKKyAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgcmV0dXJuIE5VTEw7CisrICByZXN1bHQtPm5hbWUgPSAoY2hhciAqKSAocmVzdWx0ICsgMSk7CisgCisgICAvKiBTYXZlIHRoZSBkYXRhYmFzZSBuYW1lLiAgKi8KKy0gIG1lbWNweSAocmVzdWx0LT5uYW1lLCBuYW1lLCBsZW4pOworKyAgbWVtY3B5ICgoY2hhciAqKSByZXN1bHQtPm5hbWUsIG5hbWUsIGxlbik7CisgCisgICAvKiBQYXJzZSB0aGUgbGlzdCBvZiBzZXJ2aWNlcy4gICovCisgICByZXN1bHQtPnNlcnZpY2UgPSBuc3NfcGFyc2Vfc2VydmljZV9saXN0IChsaW5lKTsKK0BAIC04MTYsNiArODkwLDcgQEAgbnNzX25ld19zZXJ2aWNlIChuYW1lX2RhdGFiYXNlICpkYXRhYmFzZSwgY29uc3QgY2hhciAqbmFtZSkKKyAgIHJldHVybiAqY3VycmVudHA7CisgfQorICNlbmRpZgorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0ggKi8KKyAKKyAKKyAjaWYgZGVmaW5lZCBTSEFSRUQgJiYgZGVmaW5lZCBVU0VfTlNDRAorQEAgLTgzNCw2ICs5MDksNyBAQCBuc3NfbG9hZF9hbGxfbGlicmFyaWVzIChjb25zdCBjaGFyICpzZXJ2aWNlLCBjb25zdCBjaGFyICpkZWYpCisgfQorIAorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorIC8qIENhbGxlZCBieSBuc2NkIGFuZCBuc2NkIGFsb25lLiAgKi8KKyB2b2lkCisgX19uc3NfZGlzYWJsZV9uc2NkICh2b2lkICgqY2IpIChzaXplX3QsIHN0cnVjdCB0cmFjZWRfZmlsZSAqKSkKK0BAIC04NTcsOCArOTMzLDEwIEBAIF9fbnNzX2Rpc2FibGVfbnNjZCAodm9pZCAoKmNiKSAoc2l6ZV90LCBzdHJ1Y3QgdHJhY2VkX2ZpbGUgKikpCisgICBfX25zc19ub3RfdXNlX25zY2Rfc2VydmljZXMgPSAtMTsKKyAgIF9fbnNzX25vdF91c2VfbnNjZF9uZXRncm91cCA9IC0xOworIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0lORVQgKi8KKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX05TU1dJVENICisgc3RhdGljIHZvaWQKKyBmcmVlX2RhdGFiYXNlX2VudHJpZXMgKG5hbWVfZGF0YWJhc2VfZW50cnkgKmVudHJ5KQorIHsKK0BAIC04NzEsOCArOTQ5LDggQEAgZnJlZV9kYXRhYmFzZV9lbnRyaWVzIChuYW1lX2RhdGFiYXNlX2VudHJ5ICplbnRyeSkKKyAJeworIAkgIHNlcnZpY2VfdXNlciAqb2xkcyA9IHNlcnZpY2U7CisgCistCSAgaWYgKHNlcnZpY2UtPmtub3duICE9IE5VTEwpCistCSAgICBfX3RkZXN0cm95IChzZXJ2aWNlLT5rbm93biwgZnJlZSk7CisrCSAgaWYgKHNlcnZpY2UtPmtub3duLnRyZWUgIT0gTlVMTCkKKysJICAgIF9fdGRlc3Ryb3kgKHNlcnZpY2UtPmtub3duLnRyZWUsIGZyZWUpOworIAorIAkgIHNlcnZpY2UgPSBzZXJ2aWNlLT5uZXh0OworIAkgIGZyZWUgKG9sZHMpOworQEAgLTkyNiwzICsxMDA0LDQgQEAgbGliY19mcmVlcmVzX2ZuIChmcmVlX21lbSkKKyAKKyAgIGZyZWUgKHRvcCk7CisgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0ggKi8KK2RpZmYgLS1naXQgYS9uc3MvbnNzd2l0Y2guaCBiL25zcy9uc3N3aXRjaC5oCitpbmRleCBhNTMxOGZhLi4xNzMwOTc3IDEwMDY0NAorLS0tIGEvbnNzL25zc3dpdGNoLmgKKysrKyBiL25zcy9uc3N3aXRjaC5oCitAQCAtNjUsMTAgKzY1LDIwIEBAIHR5cGVkZWYgc3RydWN0IHNlcnZpY2VfdXNlcgorICAgbG9va3VwX2FjdGlvbnMgYWN0aW9uc1s1XTsKKyAgIC8qIExpbmsgdG8gdGhlIHVuZGVybHlpbmcgbGlicmFyeSBvYmplY3QuICAqLworICAgc2VydmljZV9saWJyYXJ5ICpsaWJyYXJ5OworLSAgLyogQ29sbGVjdGlvbiBvZiBrbm93biBmdW5jdGlvbnMuICAqLworLSAgdm9pZCAqa25vd247CisrICAvKiBDb2xsZWN0aW9uIG9mIGtub3duIGZ1bmN0aW9ucy4KKysKKysgICAgIFdpdGggT1BUSU9OX0VHTElCQ19OU1NXSVRDSCBlbmFibGVkLCB0aGlzIGlzIHRoZSByb290IG9mIGEKKysgICAgICd0c2VhcmNoJy1zdHlsZSB0cmVlLgorKworKyAgICAgV2l0aCBPUFRJT05fRUdMSUJDX05TU1dJVENIIGRpc2FibGVkLCB0aGlzIGlzIGFuIGFycmF5IG9mCisrICAgICBwb2ludGVycyB0byBrbm93bl9mdW5jdGlvbiBzdHJ1Y3R1cmVzLCBOVUxMLXRlcm1pbmF0ZWQuICAqLworKyAgdW5pb24KKysgIHsKKysgICAgdm9pZCAqdHJlZTsKKysgICAgY29uc3Qga25vd25fZnVuY3Rpb24gKiphcnJheTsKKysgIH0ga25vd247CisgICAvKiBOYW1lIG9mIHRoZSBzZXJ2aWNlIChgZmlsZXMnLCBgZG5zJywgYG5pcycsIC4uLikuICAqLworLSAgY2hhciBuYW1lWzBdOworKyAgY29uc3QgY2hhciAqbmFtZTsKKyB9IHNlcnZpY2VfdXNlcjsKKyAKKyAvKiBUbyBhY2Nlc3MgdGhlIGFjdGlvbiBiYXNlZCBvbiB0aGUgc3RhdHVzIHZhbHVlIHVzZSB0aGlzIG1hY3JvLiAgKi8KK0BAIC04Miw3ICs5Miw3IEBAIHR5cGVkZWYgc3RydWN0IG5hbWVfZGF0YWJhc2VfZW50cnkKKyAgIC8qIExpc3Qgb2Ygc2VydmljZSB0byBiZSB1c2VkLiAgKi8KKyAgIHNlcnZpY2VfdXNlciAqc2VydmljZTsKKyAgIC8qIE5hbWUgb2YgdGhlIGRhdGFiYXNlLiAgKi8KKy0gIGNoYXIgbmFtZVswXTsKKysgIGNvbnN0IGNoYXIgKm5hbWU7CisgfSBuYW1lX2RhdGFiYXNlX2VudHJ5OworIAorIAorZGlmZiAtLWdpdCBhL3Bvc2l4L01ha2VmaWxlIGIvcG9zaXgvTWFrZWZpbGUKK2luZGV4IDE1ZTg4MTguLjYwOWVkMDMgMTAwNjQ0CistLS0gYS9wb3NpeC9NYWtlZmlsZQorKysrIGIvcG9zaXgvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBQT1NJWCBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHBvc2l4CisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtNDMsMTMgKzQ1LDI0IEBAIHJvdXRpbmVzIDo9CQkJCQkJCQkgICAgICBcCisgCWdldHBnaWQgc2V0cGdpZCBnZXRwZ3JwIGJzZC1nZXRwZ3JwIHNldHBncnAgZ2V0c2lkIHNldHNpZAkgICAgICBcCisgCWdldHJlc3VpZCBnZXRyZXNnaWQgc2V0cmVzdWlkIHNldHJlc2dpZAkJCQkgICAgICBcCisgCXBhdGhjb25mIHN5c2NvbmYgZnBhdGhjb25mCQkJCQkgICAgICBcCistCWdsb2IgZ2xvYjY0IGZubWF0Y2ggcmVnZXgJCQkJCSAgICAgIFwKKysJZ2xvYiBnbG9iNjQgZm5tYXRjaAkJCQkJCSAgICAgIFwKKyAJY29uZnN0cgkJCQkJCQkJICAgICAgXAorIAlnZXRvcHQgZ2V0b3B0MSBnZXRvcHRfaW5pdAkJCQkJICAgICAgXAorIAlzY2hlZF9zZXRwIHNjaGVkX2dldHAgc2NoZWRfc2V0cyBzY2hlZF9nZXRzIHNjaGVkX3lpZWxkIHNjaGVkX3ByaW1heCAgXAorIAlzY2hlZF9wcmltaW4gc2NoZWRfcnJfZ2kgc2NoZWRfZ2V0YWZmaW5pdHkgc2NoZWRfc2V0YWZmaW5pdHkJICAgICAgXAorLQlnZXRhZGRyaW5mbyBnYWlfc3RyZXJyb3Igd29yZGV4cAkJCQkgICAgICBcCisgCXByZWFkIHB3cml0ZSBwcmVhZDY0IHB3cml0ZTY0CQkJCQkgICAgICBcCisrCXBvc2l4X21hZHZpc2UJCQkJCQkJICAgICAgXAorKwlnZXRfY2hpbGRfbWF4IHNjaGVkX2NwdWNvdW50IHNjaGVkX2NwdWFsbG9jIHNjaGVkX2NwdWZyZWUKKysKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gZ2V0YWRkcmluZm8gZ2FpX3N0cmVycm9yCisrCisraWZlcSAoeSwkKE9QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMpKQorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX1JFR0VYUCkgKz0gcmVnZXgKKytlbHNlCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfUkVHRVhQKSArPSB4cmVnZXgKKytlbmRpZgorKworK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19TUEFXTikgKz0JCQkJCSAgICAgIFwKKyAJc3Bhd25fZmFjdGlvbl9pbml0IHNwYXduX2ZhY3Rpb25fZGVzdHJveSBzcGF3bl9mYWN0aW9uX2FkZGNsb3NlCSAgICAgIFwKKyAJc3Bhd25fZmFjdGlvbl9hZGRvcGVuIHNwYXduX2ZhY3Rpb25fYWRkZHVwMgkJCSAgICAgIFwKKyAJc3Bhd25hdHRyX2luaXQgc3Bhd25hdHRyX2Rlc3Ryb3kJCQkJICAgICAgXAorQEAgLTYxLDM3ICs3NCw1NCBAQCByb3V0aW5lcyA6PQkJCQkJCQkJICAgICAgXAorIAlwb3NpeF9tYWR2aXNlCQkJCQkJCSAgICAgIFwKKyAJZ2V0X2NoaWxkX21heCBzY2hlZF9jcHVjb3VudCBzY2hlZF9jcHVhbGxvYyBzY2hlZF9jcHVmcmVlCisgCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX1dPUkRFWFApICs9IHdvcmRleHAKKysKKyBhdXgJCTo9IGluaXQtcG9zaXggZW52aXJvbgorLXRlc3RzCQk6PSB0c3RnZXRvcHQgdGVzdGZubSBydW50ZXN0cyBydW5wdGVzdHMJICAgICBcCisrdGVzdHMJCTo9IHRzdGdldG9wdCB0ZXN0Zm5tIHJ1bnRlc3RzIFwKKyAJCSAgIHRzdC1wcmVhZHdyaXRlIHRzdC1wcmVhZHdyaXRlNjQgdGVzdC12Zm9yayByZWdleGJ1ZzEgXAorLQkJICAgdHN0LW1tYXAgdHN0LWdldGFkZHJpbmZvIHRzdC10cnVuY2F0ZSBcCistCQkgICB0c3QtdHJ1bmNhdGU2NCB0c3QtZm9yayB0c3QtZm5tYXRjaCB0c3QtcmVnZXhsb2MgdHN0LWRpciBcCistCQkgICB0c3QtY2htb2QgYnVnLXJlZ2V4MSBidWctcmVnZXgyIGJ1Zy1yZWdleDMgYnVnLXJlZ2V4NCBcCistCQkgICB0c3QtZ251Z2xvYiB0c3QtcmVnZXggYnVnLXJlZ2V4NSBidWctcmVnZXg2IGJ1Zy1yZWdleDcgXAorLQkJICAgYnVnLXJlZ2V4OCBidWctcmVnZXg5IGJ1Zy1yZWdleDEwIGJ1Zy1yZWdleDExIGJ1Zy1yZWdleDEyIFwKKy0JCSAgIGJ1Zy1yZWdleDEzIGJ1Zy1yZWdleDE0IGJ1Zy1yZWdleDE1IGJ1Zy1yZWdleDE2IFwKKy0JCSAgIGJ1Zy1yZWdleDE3IGJ1Zy1yZWdleDE4IGJ1Zy1yZWdleDE5IGJ1Zy1yZWdleDIwIFwKKy0JCSAgIGJ1Zy1yZWdleDIxIGJ1Zy1yZWdleDIyIGJ1Zy1yZWdleDIzIGJ1Zy1yZWdleDI0IFwKKy0JCSAgIGJ1Zy1yZWdleDI1IGJ1Zy1yZWdleDI2IGJ1Zy1yZWdleDI3IGJ1Zy1yZWdleDI4IFwKKysJCSAgIHRzdC1tbWFwIHRzdC10cnVuY2F0ZSBcCisrCQkgICB0c3QtdHJ1bmNhdGU2NCB0c3QtZm9yayB0c3QtZGlyIFwKKysJCSAgIHRzdC1jaG1vZCBidWctcmVnZXgyIGJ1Zy1yZWdleDMgYnVnLXJlZ2V4NCBcCisrCQkgICB0c3QtZ251Z2xvYiBidWctcmVnZXg2IGJ1Zy1yZWdleDcgXAorKwkJICAgYnVnLXJlZ2V4OCBidWctcmVnZXg5IGJ1Zy1yZWdleDEwIGJ1Zy1yZWdleDEyIFwKKysJCSAgIGJ1Zy1yZWdleDE0IGJ1Zy1yZWdleDE1IFwKKysJCSAgIGJ1Zy1yZWdleDIxIGJ1Zy1yZWdleDI0IFwKKysJCSAgIGJ1Zy1yZWdleDI3IGJ1Zy1yZWdleDI4IFwKKyAJCSAgIGJ1Zy1yZWdleDI5IGJ1Zy1yZWdleDMwIGJ1Zy1yZWdleDMxIGJ1Zy1yZWdleDMyIFwKKy0JCSAgIGJ1Zy1yZWdleDMzIHRzdC1uaWNlIHRzdC1uYW5vc2xlZXAgdHN0LXJlZ2V4MiBcCistCQkgICB0cmFuc2J1ZyB0c3QtcnhzcGVuY2VyIHRzdC1wY3JlIHRzdC1ib29zdCBcCistCQkgICBidWctZ2ExIHRzdC12Zm9yazEgdHN0LXZmb3JrMiB0c3QtdmZvcmszIHRzdC13YWl0aWQgXAorLQkJICAgdHN0LWdldGFkZHJpbmZvMiBidWctZ2xvYjEgYnVnLWdsb2IyIGJ1Zy1nbG9iMyB0c3Qtc3lzY29uZiBcCisrCQkgICB0c3QtbmljZSB0c3QtbmFub3NsZWVwIFwKKysJCSAgIHRyYW5zYnVnIFwKKysJCSAgIHRzdC12Zm9yazEgdHN0LXZmb3JrMiB0c3QtdmZvcmszIHRzdC13YWl0aWQgXAorKwkJICAgYnVnLWdsb2IxIGJ1Zy1nbG9iMiBidWctZ2xvYjMgdHN0LXN5c2NvbmYgXAorIAkJICAgdHN0LWV4ZWN2cDEgdHN0LWV4ZWN2cDIgdHN0LWV4ZWNscDEgdHN0LWV4ZWNscDIgXAorIAkJICAgdHN0LWV4ZWN2MSB0c3QtZXhlY3YyIHRzdC1leGVjbDEgdHN0LWV4ZWNsMiBcCisgCQkgICB0c3QtZXhlY3ZlMSB0c3QtZXhlY3ZlMiB0c3QtZXhlY2xlMSB0c3QtZXhlY2xlMiBcCistCQkgICB0c3QtZXhlY3ZwMyB0c3QtZXhlY3ZwNCB0c3QtcmZjMzQ4NCB0c3QtcmZjMzQ4NC0yIFwKKy0JCSAgIHRzdC1yZmMzNDg0LTMgXAorLQkJICAgdHN0LWdldGFkZHJpbmZvMyB0c3QtZm5tYXRjaDIgdHN0LWNwdWNvdW50IHRzdC1jcHVzZXQgXAorKwkJICAgdHN0LWV4ZWN2cDMgdHN0LWV4ZWN2cDQgXAorKwkJICAgdHN0LWZubWF0Y2gyIHRzdC1jcHVjb3VudCB0c3QtY3B1c2V0IFwKKyAJCSAgIGJ1Zy1nZXRvcHQxIGJ1Zy1nZXRvcHQyIGJ1Zy1nZXRvcHQzIGJ1Zy1nZXRvcHQ0IFwKKyAJCSAgIGJ1Zy1nZXRvcHQ1IHRzdC1nZXRvcHRfbG9uZzEgYnVnLXJlZ2V4MzQgYnVnLXJlZ2V4MzUgXAorIAkJICAgdHN0LXBhdGhjb25mIHRzdC1nZXRhZGRyaW5mbzQgdHN0LXJ4c3BlbmNlci1uby11dGY4IFwKKyAJCSAgIHRzdC1mbm1hdGNoMyBidWctcmVnZXgzNiB0c3QtZ2V0YWRkcmluZm81CisteHRlc3RzCQk6PSBidWctZ2EyCisrCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCQkrPSB0c3QtZm5tYXRjaCB0c3QtcmVnZXhsb2MgYnVnLXJlZ2V4MSBidWctcmVnZXg1IFwKKysJCSAgIGJ1Zy1yZWdleDIzIGJ1Zy1yZWdleDI1IGJ1Zy1yZWdleDMyIGJ1Zy1yZWdleDMzCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0lORVQpIFwKKysJCSs9IHRzdC1nZXRhZGRyaW5mbyBidWctZ2ExIHRzdC1nZXRhZGRyaW5mbzIgXAorKwkJICAgdHN0LXJmYzM0ODQgdHN0LXJmYzM0ODQtMiB0c3QtcmZjMzQ4NC0zIHRzdC1nZXRhZGRyaW5mbzMKKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMpIFwKKysJCSs9IHJ1bnB0ZXN0cyBidWctcmVnZXgxMSBidWctcmVnZXgxMyBidWctcmVnZXgxNiBcCisrCQkgICB0c3QtcmVnZXgyIHRzdC1yeHNwZW5jZXIgdHN0LXBjcmUgdHN0LWJvb3N0CisraWZlcSAoeXksJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSQoT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQykpCisrdGVzdHMJCSs9IHRzdC1yZWdleCBidWctcmVnZXgxNyBidWctcmVnZXgxOCBidWctcmVnZXgxOSBidWctcmVnZXgyMCBcCisrCQkgICBidWctcmVnZXgyMiBidWctcmVnZXgyNgorK2VuZGlmCisreHRlc3RzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBidWctZ2EyCisrCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyB0ZXN0LXNyY3MJOj0gZ2xvYnRlc3QKKy10ZXN0cyAgICAgICAgICAgKz0gd29yZGV4cC10ZXN0IHRzdC1leGVjIHRzdC1zcGF3bgorK3Rlc3RzCQkrPSB0c3QtZXhlYworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19TUEFXTikgKz0gdHN0LXNwYXduCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX1dPUkRFWFApICs9IHdvcmRleHAtdGVzdAorIGVuZGlmCisgdGVzdHMtc3RhdGljCT0gdHN0LWV4ZWMtc3RhdGljIHRzdC1zcGF3bi1zdGF0aWMKKyB0ZXN0cwkJKz0gJCh0ZXN0cy1zdGF0aWMpCitAQCAtMTE3LDcgKzE0NywxMCBAQCBnZW5lcmF0ZWQgKz0gJChhZGRwcmVmaXggd29yZGV4cC10ZXN0LXJlc3VsdCwgMSAyIDMgNCA1IDYgNyA4IDkgMTApIFwKKyAKKyBpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCistdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClnbG9idGVzdC5vdXQgJChvYmpwZngpd29yZGV4cC10c3Qub3V0CisrdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClnbG9idGVzdC5vdXQKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19XT1JERVhQKSkKKyt0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KXdvcmRleHAtdHN0Lm91dAorK2VuZGlmCisgZW5kaWYKKyBlbmRpZgorIAorQEAgLTEyNSwxMiArMTU4LDE2IEBAIGVuZGlmCisgIyBYWFggUGxlYXNlIG5vdGUgdGhhdCBmb3Igbm93IHdlIGlnbm9yZSB0aGUgcmVzdWx0IG9mIHRoaXMgdGVzdC4KKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWFubmV4Yy5vdXQKKyBpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorLXRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpYnVnLXJlZ2V4Mi1tZW0ub3V0ICQob2JqcGZ4KWJ1Zy1yZWdleDE0LW1lbS5vdXQgXAorK3Rlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpYnVnLXJlZ2V4Mi1tZW0ub3V0IFwKKyAJCSAkKG9ianBmeClidWctcmVnZXgyMS1tZW0ub3V0ICQob2JqcGZ4KWJ1Zy1yZWdleDMxLW1lbS5vdXQgXAorLQkJICQob2JqcGZ4KXRzdC1yeHNwZW5jZXItbm8tdXRmOC1tZW0ub3V0ICQob2JqcGZ4KXRzdC1wY3JlLW1lbS5vdXQgXAorLQkJICQob2JqcGZ4KXRzdC1ib29zdC1tZW0ub3V0ICQob2JqcGZ4KXRzdC1nZXRjb25mLm91dCBcCisrCQkgJChvYmpwZngpdHN0LWdldGNvbmYub3V0IFwKKyAJCSAkKG9ianBmeClidWctZ2xvYjItbWVtLm91dCAkKG9ianBmeCl0c3QtdmZvcmszLW1lbS5vdXQgXAorIAkJICQob2JqcGZ4KXRzdC1mbm1hdGNoLW1lbS5vdXQgJChvYmpwZngpYnVnLXJlZ2V4MzYtbWVtLm91dAorK2lmZXEgKHksJChPUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDKSkKKyt0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWJ1Zy1yZWdleDE0LW1lbS5vdXQgJChvYmpwZngpdHN0LXJ4c3BlbmNlci1uby11dGY4LW1lbS5vdXQgXAorKyAgCQkgJChvYmpwZngpdHN0LXBjcmUtbWVtLm91dCAkKG9ianBmeCl0c3QtYm9vc3QtbWVtLm91dAorK2VuZGlmCisrCisgeHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpYnVnLWdhMi1tZW0ub3V0CisgZW5kaWYKKyAKK0BAIC0xNDMsNiArMTgwLDggQEAgJChvYmpwZngpZ2xvYnRlc3Qub3V0OiBnbG9idGVzdC5zaCAkKG9ianBmeClnbG9idGVzdAorIAkkKFNIRUxMKSAkPCAkKGNvbW1vbi1vYmpwZngpICckKHRlc3QtdmlhLXJ0bGQtcHJlZml4KScgXAorIAkJJyQodGVzdC1wcm9ncmFtLXByZWZpeCknICckKHRlc3Qtd3JhcHBlci1lbnYpJzsgXAorIAkkKGV2YWx1YXRlLXRlc3QpCisrTERMSUJTLWdsb2J0ZXN0ICs9ICQoc2hlbGwgY2F0ICQoY29tbW9uLW9ianBmeCluc3MvZml4ZWQtbnNzd2l0Y2gtbGlicykKKysKKyAkKG9ianBmeCl3b3JkZXhwLXRzdC5vdXQ6IHdvcmRleHAtdHN0LnNoICQob2JqcGZ4KXdvcmRleHAtdGVzdAorIAkkKFNIRUxMKSAkPCAkKGNvbW1vbi1vYmpwZngpICckKHRlc3QtcHJvZ3JhbS1wcmVmaXgtYmVmb3JlLWVudiknIFwKKyAJCSAnJChydW4tcHJvZ3JhbS1lbnYpJyAnJCh0ZXN0LXByb2dyYW0tcHJlZml4LWFmdGVyLWVudiknOyBcCitAQCAtMjA1LDcgKzI0NCwxMCBAQCB0c3QtZGlyLUFSR1MgPSBgcHdkYCBgY2QgJChjb21tb24tb2JqZGlyKS8kKHN1YmRpcik7IHB3ZGAgYGNkICQoY29tbW9uLW9iamRpcik7CisgdHN0LWNobW9kLUFSR1MgPSAkKG9iamRpcikKKyB0c3QtdmZvcmszLUFSR1MgPSAtLXRlc3QtZGlyPSQob2JqcGZ4KQorIAorLXRzdC1yeHNwZW5jZXItQVJHUyA9IC0tdXRmOCByeHNwZW5jZXIvdGVzdHMKKyt0c3QtcnhzcGVuY2VyLUFSR1MgPSByeHNwZW5jZXIvdGVzdHMKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkpCisrdHN0LXJ4c3BlbmNlci1BUkdTICs9IC0tdXRmOAorK2VuZGlmCisgdHN0LXJ4c3BlbmNlci1uby11dGY4LUFSR1MgPSByeHNwZW5jZXIvdGVzdHMKKyB0c3QtcGNyZS1BUkdTID0gUENSRS50ZXN0cworIHRzdC1ib29zdC1BUkdTID0gQk9PU1QudGVzdHMKK2RpZmYgLS1naXQgYS9wb3NpeC9idWctcmVnZXgxLmMgYi9wb3NpeC9idWctcmVnZXgxLmMKK2luZGV4IDM4ZWI1NDMuLjE3Y2QxYTAgMTAwNjQ0CistLS0gYS9wb3NpeC9idWctcmVnZXgxLmMKKysrKyBiL3Bvc2l4L2J1Zy1yZWdleDEuYworQEAgLTQsNiArNCw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxyZWdleC5oPgorICNpbmNsdWRlIDx3Y2hhci5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIGludAorIG1haW4gKHZvaWQpCitAQCAtMTcsNyArMTgsOSBAQCBtYWluICh2b2lkKQorICAgbWVtc2V0ICgmcmVnZXgsICdcMCcsIHNpemVvZiAocmVnZXgpKTsKKyAKKyAgIHNldGxvY2FsZSAoTENfQUxMLCAiZGVfREUuSVNPLTg4NTktMSIpOworKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgICBmd2lkZSAoc3Rkb3V0LCAtMSk7CisrI2VuZGlmCisgCisgICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfUE9TSVhfRUdSRVAgfCBSRV9ERUJVRyk7CisgCitkaWZmIC0tZ2l0IGEvcG9zaXgvYnVnLXJlZ2V4Ni5jIGIvcG9zaXgvYnVnLXJlZ2V4Ni5jCitpbmRleCBlZmNjODkwLi4zYjI3MGM3IDEwMDY0NAorLS0tIGEvcG9zaXgvYnVnLXJlZ2V4Ni5jCisrKysgYi9wb3NpeC9idWctcmVnZXg2LmMKK0BAIC0yMiw2ICsyMiw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8cmVnZXguaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAKKyBpbnQKK0BAIC0zMCw3ICszMSwxMiBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgcmVnZXhfdCByZTsKKyAgIHJlZ21hdGNoX3QgbWF0WzEwXTsKKyAgIGludCBpLCBqLCByZXQgPSAwOworLSAgY29uc3QgY2hhciAqbG9jYWxlc1tdID0geyAiQyIsICJkZV9ERS5VVEYtOCIgfTsKKysgIGNvbnN0IGNoYXIgKmxvY2FsZXNbXSA9IHsKKysgICAgIkMiLAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysgICAgImRlX0RFLlVURi04IgorKyNlbmRpZgorKyAgfTsKKyAgIGNvbnN0IGNoYXIgKnN0cmluZyA9ICJodHRwOi8vd3d3LnJlZ2V4LmNvbS9wYXR0ZXJuL21hdGNoaW5nLmh0bWwjaW50cm8iOworICAgcmVnbWF0Y2hfdCBleHBlY3RbMTBdID0geworICAgICB7IDAsIDQ4IH0sIHsgMCwgNSB9LCB7IDAsIDQgfSwgeyA1LCAyMCB9LCB7IDcsIDIwIH0sIHsgMjAsIDQyIH0sCitkaWZmIC0tZ2l0IGEvcG9zaXgvZm5tYXRjaC5jIGIvcG9zaXgvZm5tYXRjaC5jCitpbmRleCBmZDg1ZWZhLi4wMWNjOWZlIDEwMDY0NAorLS0tIGEvcG9zaXgvZm5tYXRjaC5jCisrKysgYi9wb3NpeC9mbm1hdGNoLmMKK0BAIC0zMCw2ICszMCwxMCBAQAorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKysjaWYgZGVmaW5lZCBfTElCQworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysjZW5kaWYKKysKKyAjaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworICMgaW5jbHVkZSA8c3RkbGliLmg+CisgI2VuZGlmCitAQCAtMTMxLDcgKzEzNSw3IEBAIGV4dGVybiBpbnQgZm5tYXRjaCAoY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgZmxhZ3MpOworICMgICBkZWZpbmUgSVNXQ1RZUEUoV0MsIFdUKQlpc3djdHlwZSAoV0MsIFdUKQorICMgIGVuZGlmCisgCistIyAgaWYgKEhBVkVfTUJTVEFURV9UICYmIEhBVkVfTUJTUlRPV0NTKSB8fCBfTElCQworKyMgIGlmIChIQVZFX01CU1RBVEVfVCAmJiBIQVZFX01CU1JUT1dDUyAmJiBfTElCQyAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpCisgLyogSW4gdGhpcyBjYXNlIHdlIGFyZSBpbXBsZW1lbnRpbmcgdGhlIG11bHRpYnl0ZSBjaGFyYWN0ZXIgaGFuZGxpbmcuICAqLworICMgICBkZWZpbmUgSEFORExFX01VTFRJQllURQkxCisgIyAgZW5kaWYKK2RpZmYgLS1naXQgYS9wb3NpeC9mbm1hdGNoX2xvb3AuYyBiL3Bvc2l4L2ZubWF0Y2hfbG9vcC5jCitpbmRleCBmNDZjOWRmLi43NGUxNzU0IDEwMDY0NAorLS0tIGEvcG9zaXgvZm5tYXRjaF9sb29wLmMKKysrKyBiL3Bvc2l4L2ZubWF0Y2hfbG9vcC5jCitAQCAtMTUsNiArMTUsOCBAQAorICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKyAgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKworICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKyBzdHJ1Y3QgU1RSVUNUCitAQCAtNTQsMTAgKzU2LDE1IEBAIEZDVCAocGF0dGVybiwgc3RyaW5nLCBzdHJpbmdfZW5kLCBub19sZWFkaW5nX3BlcmlvZCwgZmxhZ3MsIGVuZHMsIGFsbG9jYV91c2VkKQorICAgY29uc3QgY2hhciAqY29sbHNlcSA9IChjb25zdCBjaGFyICopCisgICAgIF9OTF9DVVJSRU5UKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0NPTExTRVFXQyk7CisgIyBlbHNlCisrIyAgaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBjb25zdCBVQ0hBUiAqY29sbHNlcSA9IChjb25zdCBVQ0hBUiAqKQorICAgICBfTkxfQ1VSUkVOVChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9DT0xMU0VRTUIpOworLSMgZW5kaWYKKy0jZW5kaWYKKysjICAgZGVmaW5lIENPTExTRVFfQllURV9MT09LVVAoaXgpIChjb2xsc2VxWyhpeCldKQorKyMgIGVsc2UKKysjICAgZGVmaW5lIENPTExTRVFfQllURV9MT09LVVAoaXgpIChpeCkKKysjICBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKysjIGVuZGlmIC8qIFdJREVfQ0hBUl9WRVJTSU9OICovCisrI2VuZGlmIC8qIF9MSUJDICovCisgCisgICB3aGlsZSAoKGMgPSAqcCsrKSAhPSBMKCdcMCcpKQorICAgICB7CitAQCAtMjc3LDcgKzI4NCw3IEBAIEZDVCAocGF0dGVybiwgc3RyaW5nLCBzdHJpbmdfZW5kLCBub19sZWFkaW5nX3BlcmlvZCwgZmxhZ3MsIGVuZHMsIGFsbG9jYV91c2VkKQorIAkJICAgIC8qIExlYXZlIHJvb20gZm9yIHRoZSBudWxsLiAgKi8KKyAJCSAgICBDSEFSIHN0cltDSEFSX0NMQVNTX01BWF9MRU5HVEggKyAxXTsKKyAJCSAgICBzaXplX3QgYzEgPSAwOworLSNpZiBkZWZpbmVkIF9MSUJDIHx8IChkZWZpbmVkIEhBVkVfV0NUWVBFX0ggJiYgZGVmaW5lZCBIQVZFX1dDSEFSX0gpCisrI2lmIGRlZmluZWQgX0xJQkMgPyBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSIDogKGRlZmluZWQgSEFWRV9XQ1RZUEVfSCAmJiBkZWZpbmVkIEhBVkVfV0NIQVJfSCkKKyAJCSAgICB3Y3R5cGVfdCB3dDsKKyAjZW5kaWYKKyAJCSAgICBjb25zdCBDSEFSICpzdGFydHAgPSBwOworQEAgLTMwNyw3ICszMTQsNyBAQCBGQ1QgKHBhdHRlcm4sIHN0cmluZywgc3RyaW5nX2VuZCwgbm9fbGVhZGluZ19wZXJpb2QsIGZsYWdzLCBlbmRzLCBhbGxvY2FfdXNlZCkKKyAJCSAgICAgIH0KKyAJCSAgICBzdHJbYzFdID0gTCgnXDAnKTsKKyAKKy0jaWYgZGVmaW5lZCBfTElCQyB8fCAoZGVmaW5lZCBIQVZFX1dDVFlQRV9IICYmIGRlZmluZWQgSEFWRV9XQ0hBUl9IKQorKyNpZiBkZWZpbmVkIF9MSUJDID8gX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiA6IChkZWZpbmVkIEhBVkVfV0NUWVBFX0ggJiYgZGVmaW5lZCBIQVZFX1dDSEFSX0gpCisgCQkgICAgd3QgPSBJU19DSEFSX0NMQVNTIChzdHIpOworIAkJICAgIGlmICh3dCA9PSAwKQorIAkJICAgICAgLyogSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZS4gICovCitAQCAtNjgwLDggKzY4NywxMCBAQCBGQ1QgKHBhdHRlcm4sIHN0cmluZywgc3RyaW5nX2VuZCwgbm9fbGVhZGluZ19wZXJpb2QsIGZsYWdzLCBlbmRzLCBhbGxvY2FfdXNlZCkKKyAJCQllbHNlCisgCQkJICBsY29sbHNlcSA9IF9fY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXEsIGNvbGQpOworICMgZWxzZQorLQkJCWZjb2xsc2VxID0gY29sbHNlcVtmbl07CistCQkJbGNvbGxzZXEgPSBpc19zZXF2YWwgPyBjb2xkIDogY29sbHNlcVsoVUNIQVIpIGNvbGRdOworKwkJCWZjb2xsc2VxID0gQ09MTFNFUV9CWVRFX0xPT0tVUCAoZm4pOworKwkJCWxjb2xsc2VxID0gKGlzX3NlcXZhbAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY29sZAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ09MTFNFUV9CWVRFX0xPT0tVUCAoKFVDSEFSKSBjb2xkKSk7CisgIyBlbmRpZgorIAorIAkJCWlzX3NlcXZhbCA9IDA7CitAQCAtODU3LDcgKzg2Niw3IEBAIEZDVCAocGF0dGVybiwgc3RyaW5nLCBzdHJpbmdfZW5kLCBub19sZWFkaW5nX3BlcmlvZCwgZmxhZ3MsIGVuZHMsIGFsbG9jYV91c2VkKQorIAkJCQkgICAgZ290byBtYXRjaGVkOworIAkJCQkgIH0KKyAjIGVsc2UKKy0JCQkJaGNvbGxzZXEgPSBjb2xsc2VxW2NlbmRdOworKwkJCQloY29sbHNlcSA9IENPTExTRVFfQllURV9MT09LVVAgKGNlbmQpOworICMgZW5kaWYKKyAJCQkgICAgICB9CisgCitkaWZmIC0tZ2l0IGEvcG9zaXgvZ2xvYi5jIGIvcG9zaXgvZ2xvYi5jCitpbmRleCBkNjVlNTVkLi4xYWMwMGExIDEwMDY0NAorLS0tIGEvcG9zaXgvZ2xvYi5jCisrKysgYi9wb3NpeC9nbG9iLmMKK0BAIC0yNSw2ICsyNSw5IEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzdGRkZWYuaD4KKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrI2VuZGlmCisgCisgLyogT3V0Y29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgZm9yIHByb2R1Y3Rpb24gcXVhbGl0eSBjb2RlLiAgKi8KKyAvKiAjZGVmaW5lIE5ERUJVRyAxICovCitAQCAtNjA3LDYgKzYxMCw3IEBAIGdsb2IgKHBhdHRlcm4sIGZsYWdzLCBlcnJmdW5jLCBwZ2xvYikKKyAJICBpZiAoaG9tZV9kaXIgPT0gTlVMTCB8fCBob21lX2RpclswXSA9PSAnXDAnKQorIAkgICAgaG9tZV9kaXIgPSAiYzovdXNlcnMvZGVmYXVsdCI7IC8qIHBvb3IgZGVmYXVsdCAqLworICMgIGVsc2UKKysjICAgaWYgISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfR0VUTE9HSU4KKyAJICBpZiAoaG9tZV9kaXIgPT0gTlVMTCB8fCBob21lX2RpclswXSA9PSAnXDAnKQorIAkgICAgeworIAkgICAgICBpbnQgc3VjY2VzczsKK0BAIC02MjMsMTkgKzYyNywxOSBAQCBnbG9iIChwYXR0ZXJuLCBmbGFncywgZXJyZnVuYywgcGdsb2IpCisgCSAgICAgIGlmIChzdWNjZXNzKQorIAkJeworIAkJICBzdHJ1Y3QgcGFzc3dkICpwOworLSMgICBpZiBkZWZpbmVkIEhBVkVfR0VUUFdOQU1fUiB8fCBkZWZpbmVkIF9MSUJDCisrIyAgICBpZiBkZWZpbmVkIEhBVkVfR0VUUFdOQU1fUiB8fCBkZWZpbmVkIF9MSUJDCisgCQkgIGxvbmcgaW50IHB3YnVmbGVuID0gR0VUUFdfUl9TSVpFX01BWCAoKTsKKyAJCSAgY2hhciAqcHd0bXBidWY7CisgCQkgIHN0cnVjdCBwYXNzd2QgcHdidWY7CisgCQkgIGludCBtYWxsb2NfcHd0bXBidWYgPSAwOworIAkJICBpbnQgc2F2ZSA9IGVycm5vOworIAorLSMgICAgaWZuZGVmIF9MSUJDCisrIyAgICAgaWZuZGVmIF9MSUJDCisgCQkgIGlmIChwd2J1ZmxlbiA9PSAtMSkKKyAJCSAgICAvKiBgc3lzY29uZicgZG9lcyBub3Qgc3VwcG9ydCBfU0NfR0VUUFdfUl9TSVpFX01BWC4KKyAJCSAgICAgICBUcnkgYSBtb2RlcmF0ZSB2YWx1ZS4gICovCisgCQkgICAgcHdidWZsZW4gPSAxMDI0OworLSMgICAgZW5kaWYKKysjICAgICBlbmRpZgorIAkJICBpZiAoX19saWJjX3VzZV9hbGxvY2EgKGFsbG9jYV91c2VkICsgcHdidWZsZW4pKQorIAkJICAgIHB3dG1wYnVmID0gYWxsb2NhX2FjY291bnQgKHB3YnVmbGVuLCBhbGxvY2FfdXNlZCk7CisgCQkgIGVsc2UKK0BAIC02ODIsOSArNjg2LDkgQEAgZ2xvYiAocGF0dGVybiwgZmxhZ3MsIGVycmZ1bmMsIHBnbG9iKQorIAkJCX0KKyAJCSAgICAgIF9fc2V0X2Vycm5vIChzYXZlKTsKKyAJCSAgICB9CistIyAgIGVsc2UKKysjICAgIGVsc2UKKyAJCSAgcCA9IGdldHB3bmFtIChuYW1lKTsKKy0jICAgZW5kaWYKKysjICAgIGVuZGlmCisgCQkgIGlmIChwICE9IE5VTEwpCisgCQkgICAgeworIAkJICAgICAgaWYgKCFtYWxsb2NfcHd0bXBidWYpCitAQCAtNzEzLDYgKzcxNyw3IEBAIGdsb2IgKHBhdHRlcm4sIGZsYWdzLCBlcnJmdW5jLCBwZ2xvYikKKyAJCSAgICB9CisgCQl9CisgCSAgICB9CisrIyAgIGVuZGlmIC8qICEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0dFVExPR0lOICovCisgCSAgaWYgKGhvbWVfZGlyID09IE5VTEwgfHwgaG9tZV9kaXJbMF0gPT0gJ1wwJykKKyAJICAgIHsKKyAJICAgICAgaWYgKGZsYWdzICYgR0xPQl9USUxERV9DSEVDSykKK2RpZmYgLS1naXQgYS9wb3NpeC9yZWdjb21wLmMgYi9wb3NpeC9yZWdjb21wLmMKK2luZGV4IGJmOGFhMTYuLjZhNDEyNTEgMTAwNjQ0CistLS0gYS9wb3NpeC9yZWdjb21wLmMKKysrKyBiL3Bvc2l4L3JlZ2NvbXAuYworQEAgLTE4LDYgKzE4LDcgQEAKKyAgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaWZkZWYgX0xJQkMKKyAjIGluY2x1ZGUgPGxvY2FsZS93ZWlnaHQuaD4KK0BAIC0zMDksNyArMzEwLDcgQEAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKHJlZ2V4X3QgKmJ1ZnAsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGUsCisgeworICAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBidWZwLT5idWZmZXI7CisgICBpbnQgbm9kZV9jbnQ7CistICBpbnQgaWNhc2UgPSAoZGZhLT5tYl9jdXJfbWF4ID09IDEgJiYgKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSk7CisrICBpbnQgaWNhc2UgPSAoZGZhX21iX2N1cl9tYXggKGRmYSkgPT0gMSAmJiAoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpKTsKKyAgIGZvciAobm9kZV9jbnQgPSAwOyBub2RlX2NudCA8IGluaXRfc3RhdGUtPm5vZGVzLm5lbGVtOyArK25vZGVfY250KQorICAgICB7CisgICAgICAgaW50IG5vZGUgPSBpbml0X3N0YXRlLT5ub2Rlcy5lbGVtc1tub2RlX2NudF07CitAQCAtMzE5LDkgKzMyMCw5IEBAIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChyZWdleF90ICpidWZwLCBjb25zdCByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlLAorIAl7CisgCSAgcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIGljYXNlLCBkZmEtPm5vZGVzW25vZGVdLm9wci5jKTsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0JICBpZiAoKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKQorKwkgIGlmICgoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpICYmIGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJICAgIHsKKy0JICAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gYWxsb2NhIChkZmEtPm1iX2N1cl9tYXgpLCAqcDsKKysJICAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gYWxsb2NhIChkZmFfbWJfY3VyX21heCAoZGZhKSksICpwOworIAkgICAgICB3Y2hhcl90IHdjOworIAkgICAgICBtYnN0YXRlX3Qgc3RhdGU7CisgCitAQCAtMzUyLDcgKzM1MywxMSBAQCByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAocmVnZXhfdCAqYnVmcCwgY29uc3QgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZSwKKyAJCSAgcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIGljYXNlLCBjaCk7CisgCSAgICB9CisgCX0KKy0jaWZkZWYgUkVfRU5BQkxFX0kxOE4KKysKKysgICAgICAvKiBXaGVuIE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMgZGlzYWJsZWQsIHRoZSBjdXJyZW50CisrICAgICAgICAgbG9jYWxlIGlzIGFsd2F5cyBDLCB3aGljaCBoYXMgbm8gcnVsZXMgYW5kIG5vIG11bHRpLWJ5dGUKKysgICAgICAgICBjaGFyYWN0ZXJzLiAgKi8KKysjaWYgZGVmaW5lZCBSRV9FTkFCTEVfSTE4TiAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgICAgICBlbHNlIGlmICh0eXBlID09IENPTVBMRVhfQlJBQ0tFVCkKKyAJeworIAkgIHJlX2NoYXJzZXRfdCAqY3NldCA9IGRmYS0+bm9kZXNbbm9kZV0ub3ByLm1iY3NldDsKK0BAIC0zODAsNyArMzg1LDcgQEAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKHJlZ2V4X3QgKmJ1ZnAsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGUsCisgCSAgICAgaS5lLiB3aGVyZSB3ZSB3b3VsZCBub3QgZmluZCBhbiBpbnZhbGlkIHNlcXVlbmNlLiAgVGhpcyBvbmx5CisgCSAgICAgYXBwbGllcyB0byBtdWx0aWJ5dGUgY2hhcmFjdGVyIHNldHM7IGZvciBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIKKyAJICAgICBzZXRzLCB0aGUgU0lNUExFX0JSQUNLRVQgYWdhaW4gc3VmZmljZXMuICAqLworLQkgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxCisrCSAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMQorIAkgICAgICAmJiAoY3NldC0+bmNoYXJfY2xhc3NlcyB8fCBjc2V0LT5ub25fbWF0Y2ggfHwgY3NldC0+bnJhbmdlcworICMgaWZkZWYgX0xJQkMKKyAJCSAgfHwgY3NldC0+bmVxdWl2X2NsYXNzZXMKK0BAIC00MDgsNyArNDEzLDcgQEAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKHJlZ2V4X3QgKmJ1ZnAsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGUsCisgCQkgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKHN0YXRlKSk7CisgCQkgIGlmIChfX3djcnRvbWIgKGJ1ZiwgY3NldC0+bWJjaGFyc1tpXSwgJnN0YXRlKSAhPSAoc2l6ZV90KSAtMSkKKyAJCSAgICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgaWNhc2UsICoodW5zaWduZWQgY2hhciAqKSBidWYpOworLQkJICBpZiAoKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKQorKwkJICBpZiAoKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSAmJiBkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCQkgICAgeworIAkJICAgICAgaWYgKF9fd2NydG9tYiAoYnVmLCBfX3Rvd2xvd2VyIChjc2V0LT5tYmNoYXJzW2ldKSwgJnN0YXRlKQorIAkJCSAgIT0gKHNpemVfdCkgLTEpCitAQCAtNDE3LDcgKzQyMiw3IEBAIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChyZWdleF90ICpidWZwLCBjb25zdCByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlLAorIAkJfQorIAkgICAgfQorIAl9CistI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisrI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gT1BfUEVSSU9ECisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgCSAgICAgICB8fCB0eXBlID09IE9QX1VURjhfUEVSSU9ECitAQCAtODYwLDExICs4NjUsMTUgQEAgaW5pdF9kZmEgKHJlX2RmYV90ICpkZmEsIHNpemVfdCBwYXRfbGVuKQorIAorICAgZGZhLT5tYl9jdXJfbWF4ID0gTUJfQ1VSX01BWDsKKyAjaWZkZWYgX0xJQkMKKy0gIGlmIChkZmEtPm1iX2N1cl9tYXggPT0gNgorKyAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID09IDYKKyAgICAgICAmJiBzdHJjbXAgKF9OTF9DVVJSRU5UIChMQ19DVFlQRSwgX05MX0NUWVBFX0NPREVTRVRfTkFNRSksICJVVEYtOCIpID09IDApCisgICAgIGRmYS0+aXNfdXRmOCA9IDE7CisrIyBpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGRmYS0+bWFwX25vdGFzY2lpID0gKF9OTF9DVVJSRU5UX1dPUkQgKExDX0NUWVBFLCBfTkxfQ1RZUEVfTUFQX1RPX05PTkFTQ0lJKQorIAkJICAgICAgICE9IDApOworKyMgZWxzZQorKyAgZGZhLT5tYXBfbm90YXNjaWkgPSAwOworKyMgZW5kaWYKKyAjZWxzZQorICMgaWZkZWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisgICBjb2Rlc2V0X25hbWUgPSBubF9sYW5naW5mbyAoQ09ERVNFVCk7CitAQCAtODkwLDcgKzg5OSw3IEBAIGluaXRfZGZhIChyZV9kZmFfdCAqZGZhLCBzaXplX3QgcGF0X2xlbikKKyAjZW5kaWYKKyAKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKyAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAgICAgeworICAgICAgIGlmIChkZmEtPmlzX3V0ZjgpCisgCWRmYS0+c2JfY2hhciA9IChyZV9iaXRzZXRfcHRyX3QpIHV0Zjhfc2JfbWFwOworQEAgLTE3ODgsNyArMTc5Nyw3IEBAIHBlZWtfdG9rZW4gKHJlX3Rva2VuX3QgKnRva2VuLCByZV9zdHJpbmdfdCAqaW5wdXQsIHJlZ19zeW50YXhfdCBzeW50YXgpCisgICB0b2tlbi0+d29yZF9jaGFyID0gMDsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgIHRva2VuLT5tYl9wYXJ0aWFsID0gMDsKKy0gIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEgJiYKKysgIGlmIChzdHJpbmdfbWJfY3VyX21heCAoaW5wdXQpID4gMSAmJgorICAgICAgICFyZV9zdHJpbmdfZmlyc3RfYnl0ZSAoaW5wdXQsIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkpKQorICAgICB7CisgICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CitAQCAtMTgwOSw3ICsxODE4LDcgQEAgcGVla190b2tlbiAocmVfdG9rZW5fdCAqdG9rZW4sIHJlX3N0cmluZ190ICppbnB1dCwgcmVnX3N5bnRheF90IHN5bnRheCkKKyAgICAgICB0b2tlbi0+b3ByLmMgPSBjMjsKKyAgICAgICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gICAgICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxKQorKyAgICAgIGlmIChzdHJpbmdfbWJfY3VyX21heCAoaW5wdXQpID4gMSkKKyAJeworIAkgIHdpbnRfdCB3YyA9IHJlX3N0cmluZ193Y2hhcl9hdCAoaW5wdXQsCisgCQkJCQkgIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkgKyAxKTsKK0BAIC0xOTIzLDcgKzE5MzIsNyBAQCBwZWVrX3Rva2VuIChyZV90b2tlbl90ICp0b2tlbiwgcmVfc3RyaW5nX3QgKmlucHV0LCByZWdfc3ludGF4X3Qgc3ludGF4KQorIAorICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxKQorKyAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChpbnB1dCkgPiAxKQorICAgICB7CisgICAgICAgd2ludF90IHdjID0gcmVfc3RyaW5nX3djaGFyX2F0IChpbnB1dCwgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSk7CisgICAgICAgdG9rZW4tPndvcmRfY2hhciA9IElTX1dJREVfV09SRF9DSEFSICh3YykgIT0gMDsKK0BAIC0yMDIzLDcgKzIwMzIsNyBAQCBwZWVrX3Rva2VuX2JyYWNrZXQgKHJlX3Rva2VuX3QgKnRva2VuLCByZV9zdHJpbmdfdCAqaW5wdXQsIHJlZ19zeW50YXhfdCBzeW50YXgpCisgICB0b2tlbi0+b3ByLmMgPSBjOworIAorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSAmJgorKyAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChpbnB1dCkgPiAxICYmCisgICAgICAgIXJlX3N0cmluZ19maXJzdF9ieXRlIChpbnB1dCwgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSkpCisgICAgIHsKKyAgICAgICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKK0BAIC0yMjQ2LDcgKzIyNTUsNyBAQCBwYXJzZV9leHByZXNzaW9uIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLCByZV90b2tlbl90ICp0b2tlbiwKKyAJICByZXR1cm4gTlVMTDsKKyAJfQorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKyAgICAgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCXsKKyAJICB3aGlsZSAoIXJlX3N0cmluZ19lb2kgKHJlZ2V4cCkKKyAJCSAmJiAhcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKHJlZ2V4cCwgcmVfc3RyaW5nX2N1cl9pZHggKHJlZ2V4cCkpKQorQEAgLTIzODQsNyArMjM5Myw3IEBAIHBhcnNlX2V4cHJlc3Npb24gKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsIHJlX3Rva2VuX3QgKnRva2VuLAorIAkgICplcnIgPSBSRUdfRVNQQUNFOworIAkgIHJldHVybiBOVUxMOworIAl9CistICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrICAgICAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJZGZhLT5oYXNfbWJfbm9kZSA9IDE7CisgICAgICAgYnJlYWs7CisgICAgIGNhc2UgT1BfV09SRDoKK0BAIC0yNjkwLDcgKzI2OTksNyBAQCBidWlsZF9yYW5nZV9leHAgKGJpdHNldF90IHNiY3NldCwgYnJhY2tldF9lbGVtX3QgKnN0YXJ0X2VsZW0sCisgICAgICAgIEhvd2V2ZXIsIGZvciAhX0xJQkMgd2UgaGF2ZSBubyBjb2xsYXRpb24gZWxlbWVudHM6IGlmIHRoZQorICAgICAgICBjaGFyYWN0ZXIgc2V0IGlzIHNpbmdsZSBieXRlLCB0aGUgc2luZ2xlIGJ5dGUgY2hhcmFjdGVyIHNldAorICAgICAgICB0aGF0IHdlIGJ1aWxkIGJlbG93IHN1ZmZpY2VzLiAgcGFyc2VfYnJhY2tldF9leHAgcGFzc2VzCistICAgICAgIG5vIE1CQ1NFVCBpZiBkZmEtPm1iX2N1cl9tYXggPT0gMS4gICovCisrICAgICAgIG5vIE1CQ1NFVCBpZiBkZmFfbWJfY3VyX21heCAoZGZhKSA9PSAxLiAgKi8KKyAgICAgaWYgKG1iY3NldCkKKyAgICAgICB7CisgCS8qIENoZWNrIHRoZSBzcGFjZSBvZiB0aGUgYXJyYXlzLiAgKi8KK0BAIC0yNzg2LDcgKzI3OTUsMTMgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorIAkJICAgcmVnX3N5bnRheF90IHN5bnRheCwgcmVnX2VycmNvZGVfdCAqZXJyKQorIHsKKyAjaWZkZWYgX0xJQkMKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb2xsc2VxbWI7CisrIyBkZWZpbmUgQ09MTFNFUU1CX0xPT0tVUChpeCkgKGNvbGxzZXFtYlsoaXgpXSkKKysjZWxzZQorKyMgZGVmaW5lIENPTExTRVFNQl9MT09LVVAoaXgpIChpeCkKKysjZW5kaWYKKysKKyAgIGNvbnN0IGNoYXIgKmNvbGxzZXF3YzsKKyAgIHVpbnQzMl90IG5ydWxlczsKKyAgIGludDMyX3QgdGFibGVfc2l6ZTsKK0BAIC0yODM0LDE4ICsyODQ5LDIwIEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAJICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorIAkgICovCisgCSAgaWYgKG5ydWxlcyA9PSAwKQorLQkgICAgcmV0dXJuIGNvbGxzZXFtYlticl9lbGVtLT5vcHIuY2hdOworKwkgICAgcmV0dXJuIENPTExTRVFNQl9MT09LVVAgKGJyX2VsZW0tPm9wci5jaCk7CisgCSAgZWxzZQorIAkgICAgeworIAkgICAgICB3aW50X3Qgd2MgPSBfX2J0b3djIChicl9lbGVtLT5vcHIuY2gpOworIAkgICAgICByZXR1cm4gX19jb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcXdjLCB3Yyk7CisgCSAgICB9CisgCX0KKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICAgICAgZWxzZSBpZiAoYnJfZWxlbS0+dHlwZSA9PSBNQl9DSEFSKQorIAl7CisgCSAgaWYgKG5ydWxlcyAhPSAwKQorIAkgICAgcmV0dXJuIF9fY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXF3YywgYnJfZWxlbS0+b3ByLndjaCk7CisgCX0KKysjZW5kaWYKKyAgICAgICBlbHNlIGlmIChicl9lbGVtLT50eXBlID09IENPTExfU1lNKQorIAl7CisgCSAgc2l6ZV90IHN5bV9uYW1lX2xlbiA9IHN0cmxlbiAoKGNoYXIgKikgYnJfZWxlbS0+b3ByLm5hbWUpOworQEAgLTI4NzYsMTEgKzI4OTMsMTEgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorIAkJeworIAkJICAvKiBObyB2YWxpZCBjaGFyYWN0ZXIuICBNYXRjaCBpdCBhcyBhIHNpbmdsZSBieXRlCisgCQkgICAgIGNoYXJhY3Rlci4gICovCistCQkgIHJldHVybiBjb2xsc2VxbWJbYnJfZWxlbS0+b3ByLm5hbWVbMF1dOworKwkJICByZXR1cm4gQ09MTFNFUU1CX0xPT0tVUCAoYnJfZWxlbS0+b3ByLm5hbWVbMF0pOworIAkJfQorIAkgICAgfQorIAkgIGVsc2UgaWYgKHN5bV9uYW1lX2xlbiA9PSAxKQorLQkgICAgcmV0dXJuIGNvbGxzZXFtYlticl9lbGVtLT5vcHIubmFtZVswXV07CisrCSAgICByZXR1cm4gQ09MTFNFUU1CX0xPT0tVUCAoYnJfZWxlbS0+b3ByLm5hbWVbMF0pOworIAl9CisgICAgICAgcmV0dXJuIFVJTlRfTUFYOworICAgICB9CitAQCAtMjkyMCw3ICsyOTM3LDcgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorIAkgSG93ZXZlciwgaWYgd2UgaGF2ZSBubyBjb2xsYXRpb24gZWxlbWVudHMsIGFuZCB0aGUgY2hhcmFjdGVyIHNldAorIAkgaXMgc2luZ2xlIGJ5dGUsIHRoZSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIgc2V0IHRoYXQgd2UKKyAJIGJ1aWxkIGJlbG93IHN1ZmZpY2VzLiAqLworLSAgICAgIGlmIChucnVsZXMgPiAwIHx8IGRmYS0+bWJfY3VyX21heCA+IDEpCisrICAgICAgaWYgKG5ydWxlcyA+IDAgfHwgZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAl7CisgCSAgLyogQ2hlY2sgdGhlIHNwYWNlIG9mIHRoZSBhcnJheXMuICAqLworIAkgIGlmIChCRSAoKnJhbmdlX2FsbG9jID09IG1iY3NldC0+bnJhbmdlcywgMCkpCitAQCAtMjk1Nyw3ICsyOTc0LDcgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorIAkgIGlmIChNQl9DVVJfTUFYID09IDEpCisgCSAgKi8KKyAJICBpZiAobnJ1bGVzID09IDApCistCSAgICBjaF9jb2xsc2VxID0gY29sbHNlcW1iW2NoXTsKKysJICAgIGNoX2NvbGxzZXEgPSBDT0xMU0VRTUJfTE9PS1VQIChjaCk7CisgCSAgZWxzZQorIAkgICAgY2hfY29sbHNlcSA9IF9fY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXF3YywgX19idG93YyAoY2gpKTsKKyAJICBpZiAoc3RhcnRfY29sbHNlcSA8PSBjaF9jb2xsc2VxICYmIGNoX2NvbGxzZXEgPD0gZW5kX2NvbGxzZXEpCitAQCAtMzAzNSw3ICszMDUyLDEwIEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAgIHJlX2JpdHNldF9wdHJfdCBzYmNzZXQ7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICByZV9jaGFyc2V0X3QgKm1iY3NldDsKKy0gIGludCBjb2xsX3N5bV9hbGxvYyA9IDAsIHJhbmdlX2FsbG9jID0gMCwgbWJjaGFyX2FsbG9jID0gMDsKKysgIGludCBjb2xsX3N5bV9hbGxvYyA9IDAsIHJhbmdlX2FsbG9jID0gMDsKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrICBpbnQgbWJjaGFyX2FsbG9jID0gMDsKKysjZW5kaWYKKyAgIGludCBlcXVpdl9jbGFzc19hbGxvYyA9IDAsIGNoYXJfY2xhc3NfYWxsb2MgPSAwOworICNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgIGludCBub25fbWF0Y2ggPSAwOworQEAgLTMwNDMsOSArMzA2MywxNSBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgICBpbnQgdG9rZW5fbGVuOworICAgaW50IGZpcnN0X3JvdW5kID0gMTsKKyAjaWZkZWYgX0xJQkMKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBjb2xsc2VxbWIgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorICAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfQ09MTFNFUU1CKTsKKyAgIG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisrI2Vsc2UKKysgIC8qIFRoaXMgaXMgdHJ1ZSB3aGVuIE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMgZGlzYWJsZWQsIGJ1dCB0aGUKKysgICAgIGNvbXBpbGVyIGNhbid0IGZpZ3VyZSB0aGF0IG91dC4gICovCisrICBucnVsZXMgPSAwOworKyNlbmRpZgorICAgaWYgKG5ydWxlcykKKyAgICAgeworICAgICAgIC8qCitAQCAtMzE3NSw3ICszMjAxLDcgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorICNlbHNlCisgIyBpZmRlZiBSRV9FTkFCTEVfSTE4TgorIAkgICplcnIgPSBidWlsZF9yYW5nZV9leHAgKHNiY3NldCwKKy0JCQkJICBkZmEtPm1iX2N1cl9tYXggPiAxID8gbWJjc2V0IDogTlVMTCwKKysJCQkJICBkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEgPyBtYmNzZXQgOiBOVUxMLAorIAkJCQkgICZyYW5nZV9hbGxvYywgJnN0YXJ0X2VsZW0sICZlbmRfZWxlbSk7CisgIyBlbHNlCisgCSAgKmVyciA9IGJ1aWxkX3JhbmdlX2V4cCAoc2Jjc2V0LCAmc3RhcnRfZWxlbSwgJmVuZF9lbGVtKTsKK0BAIC0zMTkxLDcgKzMyMTcsNyBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgCSAgICBjYXNlIFNCX0NIQVI6CisgCSAgICAgIGJpdHNldF9zZXQgKHNiY3NldCwgc3RhcnRfZWxlbS5vcHIuY2gpOworIAkgICAgICBicmVhazsKKy0jaWZkZWYgUkVfRU5BQkxFX0kxOE4KKysjaWYgZGVmaW5lZCBSRV9FTkFCTEVfSTE4TiAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAJICAgIGNhc2UgTUJfQ0hBUjoKKyAJICAgICAgLyogQ2hlY2sgd2hldGhlciB0aGUgYXJyYXkgaGFzIGVub3VnaCBzcGFjZS4gICovCisgCSAgICAgIGlmIChCRSAobWJjaGFyX2FsbG9jID09IG1iY3NldC0+bm1iY2hhcnMsIDApKQorQEAgLTMyMDksNyArMzIzNSw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAJCX0KKyAJICAgICAgbWJjc2V0LT5tYmNoYXJzW21iY3NldC0+bm1iY2hhcnMrK10gPSBzdGFydF9lbGVtLm9wci53Y2g7CisgCSAgICAgIGJyZWFrOworLSNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAJICAgIGNhc2UgRVFVSVZfQ0xBU1M6CisgCSAgICAgICplcnIgPSBidWlsZF9lcXVpdl9jbGFzcyAoc2Jjc2V0LAorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorQEAgLTMyNTksMTEgKzMyODUsMTEgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorIAorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgLyogRW5zdXJlIG9ubHkgc2luZ2xlIGJ5dGUgY2hhcmFjdGVycyBhcmUgc2V0LiAgKi8KKy0gIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKyAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAgICAgYml0c2V0X21hc2sgKHNiY3NldCwgZGZhLT5zYl9jaGFyKTsKKyAKKyAgIGlmIChtYmNzZXQtPm5tYmNoYXJzIHx8IG1iY3NldC0+bmNvbGxfc3ltcyB8fCBtYmNzZXQtPm5lcXVpdl9jbGFzc2VzCistICAgICAgfHwgbWJjc2V0LT5ucmFuZ2VzIHx8IChkZmEtPm1iX2N1cl9tYXggPiAxICYmIChtYmNzZXQtPm5jaGFyX2NsYXNzZXMKKysgICAgICB8fCBtYmNzZXQtPm5yYW5nZXMgfHwgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSAmJiAobWJjc2V0LT5uY2hhcl9jbGFzc2VzCisgCQkJCQkJICAgICB8fCBtYmNzZXQtPm5vbl9tYXRjaCkpKQorICAgICB7CisgICAgICAgYmluX3RyZWVfdCAqbWJjX3RyZWU7CitAQCAtMzMzMiw3ICszMzU4LDcgQEAgcGFyc2VfYnJhY2tldF9lbGVtZW50IChicmFja2V0X2VsZW1fdCAqZWxlbSwgcmVfc3RyaW5nX3QgKnJlZ2V4cCwKKyAJCSAgICAgICByZV90b2tlbl90ICp0b2tlbiwgaW50IHRva2VuX2xlbiwgcmVfZGZhX3QgKmRmYSwKKyAJCSAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LCBpbnQgYWNjZXB0X2h5cGhlbikKKyB7CistI2lmZGVmIFJFX0VOQUJMRV9JMThOCisrI2lmIGRlZmluZWQgUkVfRU5BQkxFX0kxOE4gJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBpbnQgY3VyX2NoYXJfc2l6ZTsKKyAgIGN1cl9jaGFyX3NpemUgPSByZV9zdHJpbmdfY2hhcl9zaXplX2F0IChyZWdleHAsIHJlX3N0cmluZ19jdXJfaWR4IChyZWdleHApKTsKKyAgIGlmIChjdXJfY2hhcl9zaXplID4gMSkKK0BAIC0zMzQyLDcgKzMzNjgsNyBAQCBwYXJzZV9icmFja2V0X2VsZW1lbnQgKGJyYWNrZXRfZWxlbV90ICplbGVtLCByZV9zdHJpbmdfdCAqcmVnZXhwLAorICAgICAgIHJlX3N0cmluZ19za2lwX2J5dGVzIChyZWdleHAsIGN1cl9jaGFyX3NpemUpOworICAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyAgICAgfQorLSNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAgIHJlX3N0cmluZ19za2lwX2J5dGVzIChyZWdleHAsIHRva2VuX2xlbik7IC8qIFNraXAgYSB0b2tlbi4gICovCisgICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9DT0xMX0VMRU0gfHwgdG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9DSEFSX0NMQVNTCisgICAgICAgfHwgdG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9FUVVJVl9DTEFTUykKK0BAIC0zNDIyLDcgKzM0NDgsOSBAQCBidWlsZF9lcXVpdl9jbGFzcyAoYml0c2V0X3Qgc2Jjc2V0LCByZV9jaGFyc2V0X3QgKm1iY3NldCwKKyBidWlsZF9lcXVpdl9jbGFzcyAoYml0c2V0X3Qgc2Jjc2V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKQorICNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyB7CistI2lmZGVmIF9MSUJDCisrICAvKiBXaGVuIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcyBkaXNhYmxlZCwgb25seSB0aGUgQyBsb2NhbGUKKysgICAgIGlzIHN1cHBvcnRlZDsgaXQgaGFzIG5vIGNvbGxhdGlvbiBydWxlcy4gICovCisrI2lmIGRlZmluZWQgX0xJQkMgJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICB1aW50MzJfdCBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworICAgaWYgKG5ydWxlcyAhPSAwKQorICAgICB7CitAQCAtMzQ5Miw3ICszNTIwLDcgQEAgYnVpbGRfZXF1aXZfY2xhc3MgKGJpdHNldF90IHNiY3NldCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSkKKyAgICAgICBtYmNzZXQtPmVxdWl2X2NsYXNzZXNbbWJjc2V0LT5uZXF1aXZfY2xhc3NlcysrXSA9IGlkeDE7CisgICAgIH0KKyAgIGVsc2UKKy0jZW5kaWYgLyogX0xJQkMgKi8KKysjZW5kaWYgLyogX0xJQkMgJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgICAgIHsKKyAgICAgICBpZiAoQkUgKHN0cmxlbiAoKGNvbnN0IGNoYXIgKikgbmFtZSkgIT0gMSwgMCkpCisgCXJldHVybiBSRUdfRUNPTExBVEU7CitAQCAtMzUyNiw3ICszNTU0LDcgQEAgYnVpbGRfY2hhcmNsYXNzIChSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywgYml0c2V0X3Qgc2Jjc2V0LAorICAgICAgICYmIChzdHJjbXAgKG5hbWUsICJ1cHBlciIpID09IDAgfHwgc3RyY21wIChuYW1lLCAibG93ZXIiKSA9PSAwKSkKKyAgICAgbmFtZSA9ICJhbHBoYSI7CisgCistI2lmZGVmIFJFX0VOQUJMRV9JMThOCisrI2lmIGRlZmluZWQgUkVfRU5BQkxFX0kxOE4gJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICAvKiBDaGVjayB0aGUgc3BhY2Ugb2YgdGhlIGFycmF5cy4gICovCisgICBpZiAoQkUgKCpjaGFyX2NsYXNzX2FsbG9jID09IG1iY3NldC0+bmNoYXJfY2xhc3NlcywgMCkpCisgICAgIHsKK0BAIC0zNTQyLDcgKzM1NzAsNyBAQCBidWlsZF9jaGFyY2xhc3MgKFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLCBiaXRzZXRfdCBzYmNzZXQsCisgICAgICAgKmNoYXJfY2xhc3NfYWxsb2MgPSBuZXdfY2hhcl9jbGFzc19hbGxvYzsKKyAgICAgfQorICAgbWJjc2V0LT5jaGFyX2NsYXNzZXNbbWJjc2V0LT5uY2hhcl9jbGFzc2VzKytdID0gX193Y3R5cGUgKG5hbWUpOworLSNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAKKyAjZGVmaW5lIEJVSUxEX0NIQVJDTEFTU19MT09QKGN0eXBlX2Z1bmMpCVwKKyAgIGRvIHsJCQkJCQlcCitAQCAtMzY1Myw3ICszNjgxLDcgQEAgYnVpbGRfY2hhcmNsYXNzX29wIChyZV9kZmFfdCAqZGZhLCBSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywKKyAKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgIC8qIEVuc3VyZSBvbmx5IHNpbmdsZSBieXRlIGNoYXJhY3RlcnMgYXJlIHNldC4gICovCistICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgICAgIGJpdHNldF9tYXNrIChzYmNzZXQsIGRmYS0+c2JfY2hhcik7CisgI2VuZGlmCisgCitAQCAtMzY2NSw3ICszNjkzLDcgQEAgYnVpbGRfY2hhcmNsYXNzX29wIChyZV9kZmFfdCAqZGZhLCBSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywKKyAgICAgZ290byBidWlsZF93b3JkX29wX2VzcGFjZTsKKyAKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKyAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAgICAgeworICAgICAgIGJpbl90cmVlX3QgKm1iY190cmVlOworICAgICAgIC8qIEJ1aWxkIGEgdHJlZSBmb3IgY29tcGxleCBicmFja2V0LiAgKi8KK2RpZmYgLS1naXQgYS9wb3NpeC9yZWdleC5oIGIvcG9zaXgvcmVnZXguaAoraW5kZXggNWIxOTgxZS4uMjk0MWY5NCAxMDA2NDQKKy0tLSBhL3Bvc2l4L3JlZ2V4LmgKKysrKyBiL3Bvc2l4L3JlZ2V4LmgKK0BAIC0yMSw2ICsyMSw3IEBACisgI2RlZmluZSBfUkVHRVhfSCAxCisgCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIC8qIEFsbG93IHRoZSB1c2UgaW4gQysrIGNvZGUuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworQEAgLTE1Niw2ICsxNTcsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHJlZ19zeW50YXhfdDsKKyAgICB0cmVhdGVkIGFzICdhXHsxJy4gICovCisgIyBkZWZpbmUgUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQgKFJFX0RFQlVHIDw8IDEpCisgCisrLyogRUdMSUJDOiBPbGQgcmVnZXggaW1wbGVtZW50YXRpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGVzZS4gICovCisrIyBpZiBfX09QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMKKyAvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gaWdub3JlIGNhc2Ugd2hlbiBtYXRjaGluZy4KKyAgICBJZiBub3Qgc2V0LCB0aGVuIGNhc2UgaXMgc2lnbmlmaWNhbnQuICAqLworICMgZGVmaW5lIFJFX0lDQVNFIChSRV9JTlZBTElEX0lOVEVSVkFMX09SRCA8PCAxKQorQEAgLTE3Miw2ICsxNzUsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHJlZ19zeW50YXhfdDsKKyAvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gbm9fc3ViIHdpbGwgYmUgc2V0IHRvIDEgZHVyaW5nCisgICAgcmVfY29tcGlsZV9wYXR0ZXJuLiAgKi8KKyAjIGRlZmluZSBSRV9OT19TVUIgKFJFX0NPTlRFWFRfSU5WQUxJRF9EVVAgPDwgMSkKKysjIGVuZGlmIC8qIF9fT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQyAqLworICNlbmRpZgorIAorIC8qIFRoaXMgZ2xvYmFsIHZhcmlhYmxlIGRlZmluZXMgdGhlIHBhcnRpY3VsYXIgcmVnZXhwIHN5bnRheCB0byB1c2UgKGZvcgorQEAgLTIzMSw4ICsyMzUsMTMgQEAgZXh0ZXJuIHJlZ19zeW50YXhfdCByZV9zeW50YXhfb3B0aW9uczsKKyAgIChSRV9DSEFSX0NMQVNTRVMgfCBSRV9ET1RfTkVXTElORSAgICAgIHwgUkVfRE9UX05PVF9OVUxMCQlcCisgICAgfCBSRV9JTlRFUlZBTFMgIHwgUkVfTk9fRU1QVFlfUkFOR0VTKQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMKKyAjZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9CQVNJQwkJCQkJCVwKKyAgIChfUkVfU1lOVEFYX1BPU0lYX0NPTU1PTiB8IFJFX0JLX1BMVVNfUU0gfCBSRV9DT05URVhUX0lOVkFMSURfRFVQKQorKyNlbHNlCisrI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfQkFTSUMJCQkJCQlcCisrICAoX1JFX1NZTlRBWF9QT1NJWF9DT01NT04gfCBSRV9CS19QTFVTX1FNKQorKyNlbmRpZgorIAorIC8qIERpZmZlcnMgZnJvbSAuLi5fUE9TSVhfQkFTSUMgb25seSBpbiB0aGF0IFJFX0JLX1BMVVNfUU0gYmVjb21lcworICAgIFJFX0xJTUlURURfT1BTLCBpLmUuLCBcPyBcKyBcfCBhcmUgbm90IHJlY29nbml6ZWQuICBBY3R1YWxseSwgdGhpcworQEAgLTI5OCw5ICszMDcsMTEgQEAgZXh0ZXJuIHJlZ19zeW50YXhfdCByZV9zeW50YXhfb3B0aW9uczsKKyAvKiBMaWtlIFJFR19OT1RCT0wsIGV4Y2VwdCBmb3IgdGhlIGVuZC1vZi1saW5lLiAgKi8KKyAjZGVmaW5lIFJFR19OT1RFT0wgKDEgPDwgMSkKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDCisgLyogVXNlIFBNQVRDSFswXSB0byBkZWxpbWl0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBzZWFyY2ggaW4gdGhlCisgICAgYnVmZmVyLiAgKi8KKyAjZGVmaW5lIFJFR19TVEFSVEVORCAoMSA8PCAyKQorKyNlbmRpZgorIAorIAorIC8qIElmIGFueSBlcnJvciBjb2RlcyBhcmUgcmVtb3ZlZCwgY2hhbmdlZCwgb3IgYWRkZWQsIHVwZGF0ZSB0aGUKK2RpZmYgLS1naXQgYS9wb3NpeC9yZWdleF9pbnRlcm5hbC5jIGIvcG9zaXgvcmVnZXhfaW50ZXJuYWwuYworaW5kZXggODU5N2Q3ZS4uZDUzYjJhOCAxMDA2NDQKKy0tLSBhL3Bvc2l4L3JlZ2V4X2ludGVybmFsLmMKKysrKyBiL3Bvc2l4L3JlZ2V4X2ludGVybmFsLmMKK0BAIC00Myw4ICs0Myw4IEBAIHJlX3N0cmluZ19hbGxvY2F0ZSAocmVfc3RyaW5nX3QgKnBzdHIsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgaW50IGluaXRfbGVuLAorICAgaW50IGluaXRfYnVmX2xlbjsKKyAKKyAgIC8qIEVuc3VyZSBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGZpdHMgaW50byB0aGUgYnVmZmVycy4gICovCistICBpZiAoaW5pdF9sZW4gPCBkZmEtPm1iX2N1cl9tYXgpCistICAgIGluaXRfbGVuID0gZGZhLT5tYl9jdXJfbWF4OworKyAgaWYgKGluaXRfbGVuIDwgZGZhX21iX2N1cl9tYXggKGRmYSkpCisrICAgIGluaXRfbGVuID0gZGZhX21iX2N1cl9tYXggKGRmYSk7CisgICBpbml0X2J1Zl9sZW4gPSAobGVuICsgMSA8IGluaXRfbGVuKSA/IGxlbiArIDE6IGluaXRfbGVuOworICAgcmVfc3RyaW5nX2NvbnN0cnVjdF9jb21tb24gKHN0ciwgbGVuLCBwc3RyLCB0cmFucywgaWNhc2UsIGRmYSk7CisgCitAQCAtNTUsNyArNTUsNyBAQCByZV9zdHJpbmdfYWxsb2NhdGUgKHJlX3N0cmluZ190ICpwc3RyLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIGludCBpbml0X2xlbiwKKyAgIHBzdHItPndvcmRfY2hhciA9IGRmYS0+d29yZF9jaGFyOworICAgcHN0ci0+d29yZF9vcHNfdXNlZCA9IGRmYS0+d29yZF9vcHNfdXNlZDsKKyAgIHBzdHItPm1icyA9IHBzdHItPm1ic19hbGxvY2F0ZWQgPyBwc3RyLT5tYnMgOiAodW5zaWduZWQgY2hhciAqKSBzdHI7CistICBwc3RyLT52YWxpZF9sZW4gPSAocHN0ci0+bWJzX2FsbG9jYXRlZCB8fCBkZmEtPm1iX2N1cl9tYXggPiAxKSA/IDAgOiBsZW47CisrICBwc3RyLT52YWxpZF9sZW4gPSAocHN0ci0+bWJzX2FsbG9jYXRlZCB8fCBkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpID8gMCA6IGxlbjsKKyAgIHBzdHItPnZhbGlkX3Jhd19sZW4gPSBwc3RyLT52YWxpZF9sZW47CisgICByZXR1cm4gUkVHX05PRVJST1I7CisgfQorQEAgLTgyLDcgKzgyLDcgQEAgcmVfc3RyaW5nX2NvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwKKyAgIGlmIChpY2FzZSkKKyAgICAgeworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKyAgICAgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCXsKKyAJICB3aGlsZSAoMSkKKyAJICAgIHsKK0BAIC05MSw3ICs5MSw3IEBAIHJlX3N0cmluZ19jb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4sCisgCQlyZXR1cm4gcmV0OworIAkgICAgICBpZiAocHN0ci0+dmFsaWRfcmF3X2xlbiA+PSBsZW4pCisgCQlicmVhazsKKy0JICAgICAgaWYgKHBzdHItPmJ1ZnNfbGVuID4gcHN0ci0+dmFsaWRfbGVuICsgZGZhLT5tYl9jdXJfbWF4KQorKwkgICAgICBpZiAocHN0ci0+YnVmc19sZW4gPiBwc3RyLT52YWxpZF9sZW4gKyBkZmFfbWJfY3VyX21heCAoZGZhKSkKKyAJCWJyZWFrOworIAkgICAgICByZXQgPSByZV9zdHJpbmdfcmVhbGxvY19idWZmZXJzIChwc3RyLCBwc3RyLT5idWZzX2xlbiAqIDIpOworIAkgICAgICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCitAQCAtMTA1LDcgKzEwNSw3IEBAIHJlX3N0cmluZ19jb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4sCisgICBlbHNlCisgICAgIHsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysgICAgICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAlidWlsZF93Y3NfYnVmZmVyIChwc3RyKTsKKyAgICAgICBlbHNlCisgI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworQEAgLTEzMCw3ICsxMzAsNyBAQCBpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZV93YXJuX3VudXNlZF9yZXN1bHRfXworIHJlX3N0cmluZ19yZWFsbG9jX2J1ZmZlcnMgKHJlX3N0cmluZ190ICpwc3RyLCBpbnQgbmV3X2J1Zl9sZW4pCisgeworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorKyAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA+IDEpCisgICAgIHsKKyAgICAgICB3aW50X3QgKm5ld193Y3M7CisgCitAQCAtMTc3LDcgKzE3Nyw3IEBAIHJlX3N0cmluZ19jb25zdHJ1Y3RfY29tbW9uIChjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHJlX3N0cmluZ190ICpwc3RyLAorICAgcHN0ci0+dHJhbnMgPSB0cmFuczsKKyAgIHBzdHItPmljYXNlID0gaWNhc2UgPyAxIDogMDsKKyAgIHBzdHItPm1ic19hbGxvY2F0ZWQgPSAodHJhbnMgIT0gTlVMTCB8fCBpY2FzZSk7CistICBwc3RyLT5tYl9jdXJfbWF4ID0gZGZhLT5tYl9jdXJfbWF4OworKyAgcHN0ci0+bWJfY3VyX21heCA9IGRmYV9tYl9jdXJfbWF4IChkZmEpOworICAgcHN0ci0+aXNfdXRmOCA9IGRmYS0+aXNfdXRmODsKKyAgIHBzdHItPm1hcF9ub3Rhc2NpaSA9IGRmYS0+bWFwX25vdGFzY2lpOworICAgcHN0ci0+c3RvcCA9IHBzdHItPmxlbjsKK0BAIC0yMDMsNyArMjAzLDcgQEAgYnVpbGRfd2NzX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpCisgeworICNpZmRlZiBfTElCQworICAgdW5zaWduZWQgY2hhciBidWZbTUJfTEVOX01BWF07CistICBhc3NlcnQgKE1CX0xFTl9NQVggPj0gcHN0ci0+bWJfY3VyX21heCk7CisrICBhc3NlcnQgKE1CX0xFTl9NQVggPj0gc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpKTsKKyAjZWxzZQorICAgdW5zaWduZWQgY2hhciBidWZbNjRdOworICNlbmRpZgorQEAgLTIyNiw3ICsyMjYsNyBAQCBidWlsZF93Y3NfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKKyAJeworIAkgIGludCBpLCBjaDsKKyAKKy0JICBmb3IgKGkgPSAwOyBpIDwgcHN0ci0+bWJfY3VyX21heCAmJiBpIDwgcmVtYWluX2xlbjsgKytpKQorKwkgIGZvciAoaSA9IDA7IGkgPCBzdHJpbmdfbWJfY3VyX21heCAocHN0cikgJiYgaSA8IHJlbWFpbl9sZW47ICsraSkKKyAJICAgIHsKKyAJICAgICAgY2ggPSBwc3RyLT5yYXdfbWJzIFtwc3RyLT5yYXdfbWJzX2lkeCArIGJ5dGVfaWR4ICsgaV07CisgCSAgICAgIGJ1ZltpXSA9IHBzdHItPm1ic1tieXRlX2lkeCArIGldID0gcHN0ci0+dHJhbnNbY2hdOworQEAgLTI3NSw3ICsyNzUsNyBAQCBidWlsZF93Y3NfdXBwZXJfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKKyAgIHNpemVfdCBtYmNsZW47CisgI2lmZGVmIF9MSUJDCisgICBjaGFyIGJ1ZltNQl9MRU5fTUFYXTsKKy0gIGFzc2VydCAoTUJfTEVOX01BWCA+PSBwc3RyLT5tYl9jdXJfbWF4KTsKKysgIGFzc2VydCAoTUJfTEVOX01BWCA+PSBzdHJpbmdfbWJfY3VyX21heCAocHN0cikpOworICNlbHNlCisgICBjaGFyIGJ1Zls2NF07CisgI2VuZGlmCitAQCAtMzY5LDcgKzM2OSw3IEBAIGJ1aWxkX3djc191cHBlcl9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQorIAkgIHsKKyAJICAgIGludCBpLCBjaDsKKyAKKy0JICAgIGZvciAoaSA9IDA7IGkgPCBwc3RyLT5tYl9jdXJfbWF4ICYmIGkgPCByZW1haW5fbGVuOyArK2kpCisrCSAgICBmb3IgKGkgPSAwOyBpIDwgc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpICYmIGkgPCByZW1haW5fbGVuOyArK2kpCisgCSAgICAgIHsKKyAJCWNoID0gcHN0ci0+cmF3X21icyBbcHN0ci0+cmF3X21ic19pZHggKyBzcmNfaWR4ICsgaV07CisgCQlidWZbaV0gPSBwc3RyLT50cmFuc1tjaF07CitAQCAtNTY3LDggKzU2Nyw5IEBAIHJlX3N0cmluZ190cmFuc2xhdGVfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKKyB9CisgCisgLyogVGhpcyBmdW5jdGlvbiByZS1jb25zdHJ1Y3QgdGhlIGJ1ZmZlcnMuCistICAgQ29uY3JldGVseSwgY29udmVydCB0byB3aWRlIGNoYXJhY3RlciBpbiBjYXNlIG9mIHBzdHItPm1iX2N1cl9tYXggPiAxLAorLSAgIGNvbnZlcnQgdG8gdXBwZXIgY2FzZSBpbiBjYXNlIG9mIFJFR19JQ0FTRSwgYXBwbHkgdHJhbnNsYXRpb24uICAqLworKyAgIENvbmNyZXRlbHksIGNvbnZlcnQgdG8gd2lkZSBjaGFyYWN0ZXIgaW4gY2FzZSBvZgorKyAgIHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA+IDEsIGNvbnZlcnQgdG8gdXBwZXIgY2FzZSBpbiBjYXNlIG9mCisrICAgUkVHX0lDQVNFLCBhcHBseSB0cmFuc2xhdGlvbi4gICovCisgCisgc3RhdGljIHJlZ19lcnJjb2RlX3QKKyBpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZV93YXJuX3VudXNlZF9yZXN1bHRfXworQEAgLTU3OSw3ICs1ODAsNyBAQCByZV9zdHJpbmdfcmVjb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBpbnQgaWR4LCBpbnQgZWZsYWdzKQorICAgICB7CisgICAgICAgLyogUmVzZXQgYnVmZmVyLiAgKi8KKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisrICAgICAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA+IDEpCisgCW1lbXNldCAoJnBzdHItPmN1cl9zdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyAjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICAgICBwc3RyLT5sZW4gPSBwc3RyLT5yYXdfbGVuOworQEAgLTY3MCw3ICs2NzEsNyBAQCByZV9zdHJpbmdfcmVjb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBpbnQgaWR4LCBpbnQgZWZsYWdzKQorIAkgICAgICBwc3RyLT50aXBfY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0IChwc3RyLCBvZmZzZXQgLSAxLAorIAkJCQkJCQllZmxhZ3MpOworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLQkgICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisrCSAgICAgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPiAxKQorIAkJbWVtbW92ZSAocHN0ci0+d2NzLCBwc3RyLT53Y3MgKyBvZmZzZXQsCisgCQkJIChwc3RyLT52YWxpZF9sZW4gLSBvZmZzZXQpICogc2l6ZW9mICh3aW50X3QpKTsKKyAjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KK0BAIC02OTksNyArNzAwLDcgQEAgcmVfc3RyaW5nX3JlY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCwgaW50IGVmbGFncykKKyAjZW5kaWYKKyAJICBwc3RyLT52YWxpZF9sZW4gPSAwOworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLQkgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKysJICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID4gMSkKKyAJICAgIHsKKyAJICAgICAgaW50IHdjc19pZHg7CisgCSAgICAgIHdpbnRfdCB3YyA9IFdFT0Y7CitAQCAtNzExLDcgKzcxMiw3IEBAIHJlX3N0cmluZ19yZWNvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgsIGludCBlZmxhZ3MpCisgCQkgIC8qIFNwZWNpYWwgY2FzZSBVVEYtOC4gIE11bHRpLWJ5dGUgY2hhcnMgc3RhcnQgd2l0aCBhbnkKKyAJCSAgICAgYnl0ZSBvdGhlciB0aGFuIDB4ODAgLSAweGJmLiAgKi8KKyAJCSAgcmF3ID0gcHN0ci0+cmF3X21icyArIHBzdHItPnJhd19tYnNfaWR4OworLQkJICBlbmQgPSByYXcgKyAob2Zmc2V0IC0gcHN0ci0+bWJfY3VyX21heCk7CisrCQkgIGVuZCA9IHJhdyArIChvZmZzZXQgLSBzdHJpbmdfbWJfY3VyX21heCAocHN0cikpOworIAkJICBpZiAoZW5kIDwgcHN0ci0+cmF3X21icykKKyAJCSAgICBlbmQgPSBwc3RyLT5yYXdfbWJzOworIAkJICBwID0gcmF3ICsgb2Zmc2V0IC0gMTsKK0BAIC04MDMsNyArODA0LDcgQEAgcmVfc3RyaW5nX3JlY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCwgaW50IGVmbGFncykKKyAKKyAgIC8qIFRoZW4gYnVpbGQgdGhlIGJ1ZmZlcnMuICAqLworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorKyAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA+IDEpCisgICAgIHsKKyAgICAgICBpZiAocHN0ci0+aWNhc2UpCisgCXsKK0BAIC04NDEsNyArODQyLDcgQEAgcmVfc3RyaW5nX3BlZWtfYnl0ZV9jYXNlIChjb25zdCByZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCkKKyAgICAgcmV0dXJuIHJlX3N0cmluZ19wZWVrX2J5dGUgKHBzdHIsIGlkeCk7CisgCisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEKKysgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPiAxCisgICAgICAgJiYgISByZV9zdHJpbmdfaXNfc2luZ2xlX2J5dGVfY2hhciAocHN0ciwgcHN0ci0+Y3VyX2lkeCArIGlkeCkpCisgICAgIHJldHVybiByZV9zdHJpbmdfcGVla19ieXRlIChwc3RyLCBpZHgpOworICNlbmRpZgorQEAgLTkzMCw3ICs5MzEsNyBAQCByZV9zdHJpbmdfY29udGV4dF9hdCAoY29uc3QgcmVfc3RyaW5nX3QgKmlucHV0LCBpbnQgaWR4LCBpbnQgZWZsYWdzKQorICAgICByZXR1cm4gKChlZmxhZ3MgJiBSRUdfTk9URU9MKSA/IENPTlRFWFRfRU5EQlVGCisgCSAgICA6IENPTlRFWFRfTkVXTElORSB8IENPTlRFWFRfRU5EQlVGKTsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEpCisrICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKGlucHV0KSA+IDEpCisgICAgIHsKKyAgICAgICB3aW50X3Qgd2M7CisgICAgICAgaW50IHdjX2lkeCA9IGlkeDsKK0BAIC0xNDQ0LDcgKzE0NDUsNyBAQCByZV9kZmFfYWRkX25vZGUgKHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgdG9rZW4pCisgICBkZmEtPm5vZGVzW2RmYS0+bm9kZXNfbGVuXS5jb25zdHJhaW50ID0gMDsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgIGRmYS0+bm9kZXNbZGZhLT5ub2Rlc19sZW5dLmFjY2VwdF9tYiA9CistICAgICh0eXBlID09IE9QX1BFUklPRCAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKSB8fCB0eXBlID09IENPTVBMRVhfQlJBQ0tFVDsKKysgICAgKHR5cGUgPT0gT1BfUEVSSU9EICYmIGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkgfHwgdHlwZSA9PSBDT01QTEVYX0JSQUNLRVQ7CisgI2VuZGlmCisgICBkZmEtPm5leHRzW2RmYS0+bm9kZXNfbGVuXSA9IC0xOworICAgcmVfbm9kZV9zZXRfaW5pdF9lbXB0eSAoZGZhLT5lZGVzdHMgKyBkZmEtPm5vZGVzX2xlbik7CitkaWZmIC0tZ2l0IGEvcG9zaXgvcmVnZXhfaW50ZXJuYWwuaCBiL3Bvc2l4L3JlZ2V4X2ludGVybmFsLmgKK2luZGV4IDE1NGU5NjkuLmM0MzkwOWEgMTAwNjQ0CistLS0gYS9wb3NpeC9yZWdleF9pbnRlcm5hbC5oCisrKysgYi9wb3NpeC9yZWdleF9pbnRlcm5hbC5oCitAQCAtMjYsNiArMjYsMTAgQEAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorKyNpZiBkZWZpbmVkIF9MSUJDCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKyNlbmRpZgorKworICNpZiBkZWZpbmVkIEhBVkVfTEFOR0lORk9fSCB8fCBkZWZpbmVkIEhBVkVfTEFOR0lORk9fQ09ERVNFVCB8fCBkZWZpbmVkIF9MSUJDCisgIyBpbmNsdWRlIDxsYW5naW5mby5oPgorICNlbmRpZgorQEAgLTM2OSw2ICszNzMsMTMgQEAgc3RydWN0IHJlX3N0cmluZ190CisgfTsKKyB0eXBlZGVmIHN0cnVjdCByZV9zdHJpbmdfdCByZV9zdHJpbmdfdDsKKyAKKysvKiBXaGVuIE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMgZGlzYWJsZWQsIHRoaXMgaXMgYWx3YXlzIDE7CisrICAgaGVscCB0aGUgY29tcGlsZXIgbWFrZSB1c2Ugb2YgdGhhdCBmYWN0LiAgKi8KKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrIyBkZWZpbmUgc3RyaW5nX21iX2N1cl9tYXgoc3RyKSAoKHN0ciktPm1iX2N1cl9tYXggKyAwKQorKyNlbHNlCisrIyBkZWZpbmUgc3RyaW5nX21iX2N1cl9tYXgoc3RyKSAoMSkKKysjZW5kaWYKKyAKKyBzdHJ1Y3QgcmVfZGZhX3Q7CisgdHlwZWRlZiBzdHJ1Y3QgcmVfZGZhX3QgcmVfZGZhX3Q7CitAQCAtNjU0LDYgKzY2NSwxNCBAQCBzdHJ1Y3QgcmVfZGZhX3QKKyAgIF9fbGliY19sb2NrX2RlZmluZSAoLCBsb2NrKQorIH07CisgCisrLyogV2hlbiBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzIGRpc2FibGVkLCB0aGlzIGlzIGFsd2F5cyAxOworKyAgIGhlbHAgdGhlIGNvbXBpbGVyIG1ha2UgdXNlIG9mIHRoYXQgZmFjdC4gICovCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyMgZGVmaW5lIGRmYV9tYl9jdXJfbWF4KGRmYSkgKChkZmEpLT5tYl9jdXJfbWF4ICsgMCkKKysjZWxzZQorKyMgZGVmaW5lIGRmYV9tYl9jdXJfbWF4KGRmYSkgKDEpCisrI2VuZGlmCisrCisgI2RlZmluZSByZV9ub2RlX3NldF9pbml0X2VtcHR5KHNldCkgbWVtc2V0IChzZXQsICdcMCcsIHNpemVvZiAocmVfbm9kZV9zZXQpKQorICNkZWZpbmUgcmVfbm9kZV9zZXRfcmVtb3ZlKHNldCxpZCkgXAorICAgKHJlX25vZGVfc2V0X3JlbW92ZV9hdCAoc2V0LCByZV9ub2RlX3NldF9jb250YWlucyAoc2V0LCBpZCkgLSAxKSkKK0BAIC03MTQsNyArNzMzLDcgQEAgaW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGVfXyAoKHB1cmUsIHVudXNlZCkpCisgcmVfc3RyaW5nX2NoYXJfc2l6ZV9hdCAoY29uc3QgcmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgpCisgeworICAgaW50IGJ5dGVfaWR4OworLSAgaWYgKHBzdHItPm1iX2N1cl9tYXggPT0gMSkKKysgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPT0gMSkKKyAgICAgcmV0dXJuIDE7CisgICBmb3IgKGJ5dGVfaWR4ID0gMTsgaWR4ICsgYnl0ZV9pZHggPCBwc3RyLT52YWxpZF9sZW47ICsrYnl0ZV9pZHgpCisgICAgIGlmIChwc3RyLT53Y3NbaWR4ICsgYnl0ZV9pZHhdICE9IFdFT0YpCitAQCAtNzI2LDcgKzc0NSw3IEBAIHN0YXRpYyB3aW50X3QKKyBpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZV9fICgocHVyZSwgdW51c2VkKSkKKyByZV9zdHJpbmdfd2NoYXJfYXQgKGNvbnN0IHJlX3N0cmluZ190ICpwc3RyLCBpbnQgaWR4KQorIHsKKy0gIGlmIChwc3RyLT5tYl9jdXJfbWF4ID09IDEpCisrICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID09IDEpCisgICAgIHJldHVybiAod2ludF90KSBwc3RyLT5tYnNbaWR4XTsKKyAgIHJldHVybiAod2ludF90KSBwc3RyLT53Y3NbaWR4XTsKKyB9CitkaWZmIC0tZ2l0IGEvcG9zaXgvcmVnZXhlYy1jb21wYXQuYyBiL3Bvc2l4L3JlZ2V4ZWMtY29tcGF0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wZjliN2M3CistLS0gL2Rldi9udWxsCisrKysgYi9wb3NpeC9yZWdleGVjLWNvbXBhdC5jCitAQCAtMCwwICsxLDM5IEBACisrLyogRXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGFuZCBzZWFyY2ggbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgQ29udHJpYnV0ZWQgYnkgSXNhbXUgSGFzZWdhd2EgPGlzYW11QHlhbWF0by5pYm0uY29tPi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxzaGxpYi1jb21wYXQuaD4KKyt2ZXJzaW9uZWRfc3ltYm9sIChsaWJjLCBfX3JlZ2V4ZWMsIHJlZ2V4ZWMsIEdMSUJDXzJfM180KTsKKysKKysjIGlmIFNITElCX0NPTVBBVCAobGliYywgR0xJQkNfMl8wLCBHTElCQ18yXzNfNCkKKytfX3R5cGVvZl9fIChfX3JlZ2V4ZWMpIF9fY29tcGF0X3JlZ2V4ZWM7CisrCisraW50CisrYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKytfX2NvbXBhdF9yZWdleGVjIChjb25zdCByZWdleF90ICpfX3Jlc3RyaWN0IHByZWcsCisrCQkgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3Qgc3RyaW5nLCBzaXplX3Qgbm1hdGNoLAorKwkJICByZWdtYXRjaF90IHBtYXRjaFtdLCBpbnQgZWZsYWdzKQorK3sKKysgIHJldHVybiByZWdleGVjIChwcmVnLCBzdHJpbmcsIG5tYXRjaCwgcG1hdGNoLAorKwkJICBlZmxhZ3MgJiAoUkVHX05PVEJPTCB8IFJFR19OT1RFT0wpKTsKKyt9CisrY29tcGF0X3N5bWJvbCAobGliYywgX19jb21wYXRfcmVnZXhlYywgcmVnZXhlYywgR0xJQkNfMl8wKTsKKysjIGVuZGlmCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvcG9zaXgvcmVnZXhlYy5jIGIvcG9zaXgvcmVnZXhlYy5jCitpbmRleCA3MGNkNjA2Li5lM2I0OWU0IDEwMDY0NAorLS0tIGEvcG9zaXgvcmVnZXhlYy5jCisrKysgYi9wb3NpeC9yZWdleGVjLmMKK0BAIC0xOCw2ICsxOCw3IEBACisgICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgc3RhdGljIHJlZ19lcnJjb2RlX3QgbWF0Y2hfY3R4X2luaXQgKHJlX21hdGNoX2NvbnRleHRfdCAqY2FjaGUsIGludCBlZmxhZ3MsCisgCQkJCSAgICAgaW50IG4pIGludGVybmFsX2Z1bmN0aW9uOworQEAgLTE4NiwxMSArMTg3LDExIEBAIHN0YXRpYyBpbnQgYnVpbGRfdHJ0YWJsZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKyBzdGF0aWMgaW50IGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisgCQkJCSAgICBjb25zdCByZV9zdHJpbmdfdCAqaW5wdXQsIGludCBpZHgpCisgICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKy0jIGlmZGVmIF9MSUJDCisrIyBpZiBkZWZpbmVkIF9MSUJDICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9jb2xsYXRpb25fc2VxdWVuY2VfdmFsdWUgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1icywKKyAJCQkJCQkgICBzaXplX3QgbmFtZV9sZW4pCisgICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKy0jIGVuZGlmIC8qIF9MSUJDICovCisrIyBlbmRpZiAvKiBfTElCQyAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyBzdGF0aWMgaW50IGdyb3VwX25vZGVzX2ludG9fREZBc3RhdGVzIChjb25zdCByZV9kZmFfdCAqZGZhLAorIAkJCQkgICAgICAgY29uc3QgcmVfZGZhc3RhdGVfdCAqc3RhdGUsCitAQCAtMjU1LDI1ICsyNTYsOSBAQCByZWdleGVjIChwcmVnLCBzdHJpbmcsIG5tYXRjaCwgcG1hdGNoLCBlZmxhZ3MpCisgICByZXR1cm4gZXJyICE9IFJFR19OT0VSUk9SOworIH0KKyAKKy0jaWZkZWYgX0xJQkMKKy0jIGluY2x1ZGUgPHNobGliLWNvbXBhdC5oPgorLXZlcnNpb25lZF9zeW1ib2wgKGxpYmMsIF9fcmVnZXhlYywgcmVnZXhlYywgR0xJQkNfMl8zXzQpOworLQorLSMgaWYgU0hMSUJfQ09NUEFUIChsaWJjLCBHTElCQ18yXzAsIEdMSUJDXzJfM180KQorLV9fdHlwZW9mX18gKF9fcmVnZXhlYykgX19jb21wYXRfcmVnZXhlYzsKKy0KKy1pbnQKKy1hdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorLV9fY29tcGF0X3JlZ2V4ZWMgKGNvbnN0IHJlZ2V4X3QgKl9fcmVzdHJpY3QgcHJlZywKKy0JCSAgY29uc3QgY2hhciAqX19yZXN0cmljdCBzdHJpbmcsIHNpemVfdCBubWF0Y2gsCistCQkgIHJlZ21hdGNoX3QgcG1hdGNoW10sIGludCBlZmxhZ3MpCisteworLSAgcmV0dXJuIHJlZ2V4ZWMgKHByZWcsIHN0cmluZywgbm1hdGNoLCBwbWF0Y2gsCistCQkgIGVmbGFncyAmIChSRUdfTk9UQk9MIHwgUkVHX05PVEVPTCkpOworLX0KKy1jb21wYXRfc3ltYm9sIChsaWJjLCBfX2NvbXBhdF9yZWdleGVjLCByZWdleGVjLCBHTElCQ18yXzApOworLSMgZW5kaWYKKy0jZW5kaWYKKysvKiBFR0xJQkM6IFRoZSBjb2RlIHRoYXQgdXNlZCB0byBiZSBoZXJlIHdhcyBtb3ZlIHRvIGEgc2VwYXJhdGUgZmlsZQorKyAgIHNvIHRoYXQgaXQgY2FuIGJlIHNoYXJlZCB3aXRoIHhyZWdleC5jLiAgKi8KKysjaW5jbHVkZSAicmVnZXhlYy1jb21wYXQuYyIKKyAKKyAvKiBFbnRyeSBwb2ludHMgZm9yIEdOVSBjb2RlLiAgKi8KKyAKK0BAIC03MjgsNyArNzEzLDcgQEAgcmVfc2VhcmNoX2ludGVybmFsIChwcmVnLCBzdHJpbmcsIGxlbmd0aCwgc3RhcnQsIHJhbmdlLCBzdG9wLCBubWF0Y2gsIHBtYXRjaCwKKyAgIGluY3IgPSAocmFuZ2UgPCAwKSA/IC0xIDogMTsKKyAgIGxlZnRfbGltID0gKHJhbmdlIDwgMCkgPyBzdGFydCArIHJhbmdlIDogc3RhcnQ7CisgICByaWdodF9saW0gPSAocmFuZ2UgPCAwKSA/IHN0YXJ0IDogc3RhcnQgKyByYW5nZTsKKy0gIHNiID0gZGZhLT5tYl9jdXJfbWF4ID09IDE7CisrICBzYiA9IGRmYV9tYl9jdXJfbWF4IChkZmEpID09IDE7CisgICBtYXRjaF9raW5kID0KKyAgICAgKGZhc3RtYXAKKyAgICAgID8gKChzYiB8fCAhKHByZWctPnN5bnRheCAmIFJFX0lDQVNFIHx8IHQpID8gNCA6IDApCitAQCAtMzQ0OCw3ICszNDMzLDcgQEAgb3V0X2ZyZWU6CisgCSAgaWYgKEJFIChkZXN0X3N0YXRlc193b3JkW2ldID09IE5VTEwgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAJICAgIGdvdG8gb3V0X2ZyZWU7CisgCistCSAgaWYgKGRlc3Rfc3RhdGVzW2ldICE9IGRlc3Rfc3RhdGVzX3dvcmRbaV0gJiYgZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysJICBpZiAoZGVzdF9zdGF0ZXNbaV0gIT0gZGVzdF9zdGF0ZXNfd29yZFtpXSAmJiBkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCSAgICBuZWVkX3dvcmRfdHJ0YWJsZSA9IDE7CisgCisgCSAgZGVzdF9zdGF0ZXNfbmxbaV0gPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKCZlcnIsIGRmYSwgJmZvbGxvd3MsCitAQCAtMzU5MCw3ICszNTc1LDcgQEAgZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKnN0YXRlLAorICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gT1BfUEVSSU9EKQorIAl7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistCSAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrCSAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJICAgIGJpdHNldF9tZXJnZSAoYWNjZXB0cywgZGZhLT5zYl9jaGFyKTsKKyAJICBlbHNlCisgI2VuZGlmCitAQCAtMzY0MSw3ICszNjI2LDcgQEAgZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKnN0YXRlLAorIAkJICBjb250aW51ZTsKKyAJCX0KKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0JICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrCSAgICAgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCQlmb3IgKGogPSAwOyBqIDwgQklUU0VUX1dPUkRTOyArK2opCisgCQkgIGFueV9zZXQgfD0gKGFjY2VwdHNbal0gJj0gKGRmYS0+d29yZF9jaGFyW2pdIHwgfmRmYS0+c2JfY2hhcltqXSkpOworIAkgICAgICBlbHNlCitAQCAtMzY2MCw3ICszNjQ1LDcgQEAgZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKnN0YXRlLAorIAkJICBjb250aW51ZTsKKyAJCX0KKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0JICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrCSAgICAgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCQlmb3IgKGogPSAwOyBqIDwgQklUU0VUX1dPUkRTOyArK2opCisgCQkgIGFueV9zZXQgfD0gKGFjY2VwdHNbal0gJj0gfihkZmEtPndvcmRfY2hhcltqXSAmIGRmYS0+c2JfY2hhcltqXSkpOworIAkgICAgICBlbHNlCitAQCAtMzgzNiwxMiArMzgyMSw2IEBAIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisgICBpZiAobm9kZS0+dHlwZSA9PSBDT01QTEVYX0JSQUNLRVQpCisgICAgIHsKKyAgICAgICBjb25zdCByZV9jaGFyc2V0X3QgKmNzZXQgPSBub2RlLT5vcHIubWJjc2V0OworLSMgaWZkZWYgX0xJQkMKKy0gICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwaW4KKy0JPSAoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcmVfc3RyaW5nX2dldF9idWZmZXIgKGlucHV0KSArIHN0cl9pZHgpOworLSAgICAgIGludCBqOworLSAgICAgIHVpbnQzMl90IG5ydWxlczsKKy0jIGVuZGlmIC8qIF9MSUJDICovCisgICAgICAgaW50IG1hdGNoX2xlbiA9IDA7CisgICAgICAgd2NoYXJfdCB3YyA9ICgoY3NldC0+bnJhbmdlcyB8fCBjc2V0LT5uY2hhcl9jbGFzc2VzIHx8IGNzZXQtPm5tYmNoYXJzKQorIAkJICAgID8gcmVfc3RyaW5nX3djaGFyX2F0IChpbnB1dCwgc3RyX2lkeCkgOiAwKTsKK0BAIC0zODUzLDYgKzM4MzIsNyBAQCBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGVfaWR4LAorIAkgICAgbWF0Y2hfbGVuID0gY2hhcl9sZW47CisgCSAgICBnb3RvIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzX21hdGNoOworIAkgIH0KKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICAgICAgLyogbWF0Y2ggd2l0aCBjaGFyYWN0ZXJfY2xhc3M/ICAqLworICAgICAgIGZvciAoaSA9IDA7IGkgPCBjc2V0LT5uY2hhcl9jbGFzc2VzOyArK2kpCisgCXsKK0BAIC0zODYzLDE0ICszODQzLDIyIEBAIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisgCSAgICAgIGdvdG8gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g7CisgCSAgICB9CisgCX0KKysjZW5kaWYKKysKKysgICAgICAvKiBXaGVuIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcyBkaXNhYmxlZCwgb25seSB0aGUgQworKyAgICAgICAgIGxvY2FsZSBpcyBzdXBwb3J0ZWQ7IGl0IGhhcyBubyBjb2xsYXRpb24gcnVsZXMuICAqLworKyMgaWYgZGVmaW5lZCBfTElCQyAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwaW4KKysJPSAoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcmVfc3RyaW5nX2dldF9idWZmZXIgKGlucHV0KSArIHN0cl9pZHgpOworKyAgICAgIGludCBqOworKyAgICAgIHVpbnQzMl90IG5ydWxlczsKKyAKKy0jIGlmZGVmIF9MSUJDCisgICAgICAgbnJ1bGVzID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKyAgICAgICBpZiAobnJ1bGVzICE9IDApCisgCXsKKyAJICB1bnNpZ25lZCBpbnQgaW5fY29sbHNlcSA9IDA7CisgCSAgY29uc3QgaW50MzJfdCAqdGFibGUsICppbmRpcmVjdDsKKy0JICBjb25zdCB1bnNpZ25lZCBjaGFyICp3ZWlnaHRzLCAqZXh0cmE7CisrCSAgY29uc3QgdW5zaWduZWQgY2hhciAqd2VpZ2h0cywgKmV4dHJhID0gTlVMTDsKKyAJICBjb25zdCBjaGFyICpjb2xsc2Vxd2M7CisgCisgCSAgLyogbWF0Y2ggd2l0aCBjb2xsYXRpbmdfc3ltYm9sPyAgKi8KK0BAIC0zOTU1LDggKzM5NDMsMTIgQEAgY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBub2RlX2lkeCwKKyAJICAgIH0KKyAJfQorICAgICAgIGVsc2UKKy0jIGVuZGlmIC8qIF9MSUJDICovCisrIyBlbmRpZiAvKiBfTElCQyAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAJeworKyAgICAgICAgICAvKiBJbiB0aGUgX0xJQkMgdmVyc2lvbiwgaWYgT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcworKyAgICAgICAgICAgICBkaXNhYmxlZCwgdGhlcmUgY2FuIGJlIG5vIG11bHRpYnl0ZSByYW5nZSBlbmRwb2ludHMsIGFuZAorKyAgICAgICAgICAgICBjc2V0LT5ucmFuZ2VzIGlzIGFsd2F5cyB6ZXJvLiAgKi8KKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgCSAgLyogbWF0Y2ggd2l0aCByYW5nZSBleHByZXNzaW9uPyAgKi8KKyAjaWYgX19HTlVDX18gPj0gMgorIAkgIHdjaGFyX3QgY21wX2J1ZltdID0ge0wnXDAnLCBMJ1wwJywgd2MsIEwnXDAnLCBMJ1wwJywgTCdcMCd9OworQEAgLTM5NzUsNiArMzk2Nyw3IEBAIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisgCQkgIGdvdG8gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g7CisgCQl9CisgCSAgICB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworIAl9CisgICAgIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzX21hdGNoOgorICAgICAgIGlmICghY3NldC0+bm9uX21hdGNoKQorQEAgLTM5OTAsNyArMzk4Myw3IEBAIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisgICByZXR1cm4gMDsKKyB9CisgCistIyBpZmRlZiBfTElCQworKyMgaWYgZGVmaW5lZCBfTElCQyAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyBzdGF0aWMgdW5zaWduZWQgaW50CisgaW50ZXJuYWxfZnVuY3Rpb24KKyBmaW5kX2NvbGxhdGlvbl9zZXF1ZW5jZV92YWx1ZSAoY29uc3QgdW5zaWduZWQgY2hhciAqbWJzLCBzaXplX3QgbWJzX2xlbikKK0BAIC00MDQ4LDcgKzQwNDEsNyBAQCBmaW5kX2NvbGxhdGlvbl9zZXF1ZW5jZV92YWx1ZSAoY29uc3QgdW5zaWduZWQgY2hhciAqbWJzLCBzaXplX3QgbWJzX2xlbikKKyAgICAgICByZXR1cm4gVUlOVF9NQVg7CisgICAgIH0KKyB9CistIyBlbmRpZiAvKiBfTElCQyAqLworKyMgZW5kaWYgLyogX0xJQkMgJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgCisgLyogQ2hlY2sgd2hldGhlciB0aGUgbm9kZSBhY2NlcHRzIHRoZSBieXRlIHdoaWNoIGlzIElEWC10aAorQEAgLTQxMzksNyArNDEzMiw3IEBAIGV4dGVuZF9idWZmZXJzIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBtaW5fbGVuKQorICAgaWYgKHBzdHItPmljYXNlKQorICAgICB7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICAgICAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorKyAgICAgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPiAxKQorIAl7CisgCSAgcmV0ID0gYnVpbGRfd2NzX3VwcGVyX2J1ZmZlciAocHN0cik7CisgCSAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorQEAgLTQxNTIsNyArNDE0NSw3IEBAIGV4dGVuZF9idWZmZXJzIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBtaW5fbGVuKQorICAgZWxzZQorICAgICB7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICAgICAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorKyAgICAgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPiAxKQorIAlidWlsZF93Y3NfYnVmZmVyIChwc3RyKTsKKyAgICAgICBlbHNlCisgI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworZGlmZiAtLWdpdCBhL3Bvc2l4L3hyZWdleC5jIGIvcG9zaXgveHJlZ2V4LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kM2Y3YWNlCistLS0gL2Rldi9udWxsCisrKysgYi9wb3NpeC94cmVnZXguYworQEAgLTAsMCArMSw4MjE1IEBACisrLyogRXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGFuZCBzZWFyY2ggbGlicmFyeSwKKysgICB2ZXJzaW9uIDAuMTIuCisrICAgKEltcGxlbWVudHMgUE9TSVggZHJhZnQgUDEwMDMuMi9EMTEuMiwgZXhjZXB0IGZvciBzb21lIG9mIHRoZQorKyAgIGludGVybmF0aW9uYWxpemF0aW9uIGZlYXR1cmVzLikKKysKKysgICBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisrICAgMjAwMiwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorKyAgIDAyMTEwLTEzMDEgVVNBLiAgKi8KKysKKysvKiBBSVggcmVxdWlyZXMgdGhpcyB0byBiZSB0aGUgZmlyc3QgdGhpbmcgaW4gdGhlIGZpbGUuICovCisrI2lmIGRlZmluZWQgX0FJWCAmJiAhZGVmaW5lZCBfX0dOVUNfXyAmJiAhZGVmaW5lZCBSRUdFWF9NQUxMT0MKKysgICNwcmFnbWEgYWxsb2NhCisrI2VuZGlmCisrCisrI3VuZGVmCV9HTlVfU09VUkNFCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworKyNpZm5kZWYgSU5TSURFX1JFQ1VSU0lPTgorKyMgaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysvKiNpbmNsdWRlIDxhbnNpZGVjbC5oPiovCisrCisrCisrI2lmbmRlZiBJTlNJREVfUkVDVVJTSU9OCisrCisrIyBpZiBkZWZpbmVkIFNURENfSEVBREVSUyAmJiAhZGVmaW5lZCBlbWFjcworKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPgorKyMgZWxzZQorKy8qIFdlIG5lZWQgdGhpcyBmb3IgYHJlZ2V4LmgnLCBhbmQgcGVyaGFwcyBmb3IgdGhlIEVtYWNzIGluY2x1ZGUgZmlsZXMuICAqLworKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorKyMgZW5kaWYKKysKKysjIGlmIChkZWZpbmVkIEhBVkVfV0NUWVBFX0ggJiYgZGVmaW5lZCBIQVZFX1dDSEFSX0ggJiYgZGVmaW5lZCBIQVZFX0JUT1dDKQorKyMgIGRlZmluZSBXSURFX0NIQVJfU1VQUE9SVCAoSEFWRV9XQ1RZUEVfSCAmJiBIQVZFX1dDSEFSX0ggJiYgSEFWRV9CVE9XQykKKysjIGVsc2UKKysjICBkZWZpbmUgV0lERV9DSEFSX1NVUFBPUlQgMAorKyMgZW5kaWYKKysvKiBGb3IgcGxhdGZvcm0gd2hpY2ggc3VwcG9ydCB0aGUgSVNPIEMgYW1lbmRlbWVudCAxIGZ1bmN0aW9uYWxpdHkgd2UKKysgICBzdXBwb3J0IHVzZXIgZGVmaW5lZCBjaGFyYWN0ZXIgY2xhc3Nlcy4gICovCisrIyBpZiBXSURFX0NIQVJfU1VQUE9SVAorKy8qIFNvbGFyaXMgMi41IGhhcyBhIGJ1ZzogPHdjaGFyLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlIDx3Y3R5cGUuaD4uICAqLworKyMgIGluY2x1ZGUgPHdjaGFyLmg+CisrIyAgaW5jbHVkZSA8d2N0eXBlLmg+CisrIyBlbmRpZgorKworKyMgaWZkZWYgX0xJQkMKKysvKiBXZSBoYXZlIHRvIGtlZXAgdGhlIG5hbWVzcGFjZSBjbGVhbi4gICovCisrIyAgZGVmaW5lIHJlZ2ZyZWUocHJlZykgX19yZWdmcmVlIChwcmVnKQorKyMgIGRlZmluZSByZWdleGVjKHByLCBzdCwgbm0sIHBtLCBlZikgX19yZWdleGVjIChwciwgc3QsIG5tLCBwbSwgZWYpCisrIyAgZGVmaW5lIHJlZ2NvbXAocHJlZywgcGF0dGVybiwgY2ZsYWdzKSBfX3JlZ2NvbXAgKHByZWcsIHBhdHRlcm4sIGNmbGFncykKKysjICBkZWZpbmUgcmVnZXJyb3IoZXJyY29kZSwgcHJlZywgZXJyYnVmLCBlcnJidWZfc2l6ZSkgXAorKwlfX3JlZ2Vycm9yKGVycmNvZGUsIHByZWcsIGVycmJ1ZiwgZXJyYnVmX3NpemUpCisrIyAgZGVmaW5lIHJlX3NldF9yZWdpc3RlcnMoYnUsIHJlLCBudSwgc3QsIGVuKSBcCisrCV9fcmVfc2V0X3JlZ2lzdGVycyAoYnUsIHJlLCBudSwgc3QsIGVuKQorKyMgIGRlZmluZSByZV9tYXRjaF8yKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMiwgcG9zLCByZWdzLCBzdG9wKSBcCisrCV9fcmVfbWF0Y2hfMiAoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyLCBwb3MsIHJlZ3MsIHN0b3ApCisrIyAgZGVmaW5lIHJlX21hdGNoKGJ1ZnAsIHN0cmluZywgc2l6ZSwgcG9zLCByZWdzKSBcCisrCV9fcmVfbWF0Y2ggKGJ1ZnAsIHN0cmluZywgc2l6ZSwgcG9zLCByZWdzKQorKyMgIGRlZmluZSByZV9zZWFyY2goYnVmcCwgc3RyaW5nLCBzaXplLCBzdGFydHBvcywgcmFuZ2UsIHJlZ3MpIFwKKysJX19yZV9zZWFyY2ggKGJ1ZnAsIHN0cmluZywgc2l6ZSwgc3RhcnRwb3MsIHJhbmdlLCByZWdzKQorKyMgIGRlZmluZSByZV9jb21waWxlX3BhdHRlcm4ocGF0dGVybiwgbGVuZ3RoLCBidWZwKSBcCisrCV9fcmVfY29tcGlsZV9wYXR0ZXJuIChwYXR0ZXJuLCBsZW5ndGgsIGJ1ZnApCisrIyAgZGVmaW5lIHJlX3NldF9zeW50YXgoc3ludGF4KSBfX3JlX3NldF9zeW50YXggKHN5bnRheCkKKysjICBkZWZpbmUgcmVfc2VhcmNoXzIoYnVmcCwgc3QxLCBzMSwgc3QyLCBzMiwgc3RhcnRwb3MsIHJhbmdlLCByZWdzLCBzdG9wKSBcCisrCV9fcmVfc2VhcmNoXzIgKGJ1ZnAsIHN0MSwgczEsIHN0MiwgczIsIHN0YXJ0cG9zLCByYW5nZSwgcmVncywgc3RvcCkKKysjICBkZWZpbmUgcmVfY29tcGlsZV9mYXN0bWFwKGJ1ZnApIF9fcmVfY29tcGlsZV9mYXN0bWFwIChidWZwKQorKworKyMgIGRlZmluZSBidG93YyBfX2J0b3djCisrCisrLyogV2UgYXJlIGFsc28gdXNpbmcgc29tZSBsaWJyYXJ5IGludGVybmFscy4gICovCisrIyAgaW5jbHVkZSA8bG9jYWxlL2xvY2FsZWluZm8uaD4KKysjICBpbmNsdWRlIDxsb2NhbGUvZWxlbS1oYXNoLmg+CisrIyAgaW5jbHVkZSA8bGFuZ2luZm8uaD4KKysjICBpbmNsdWRlIDxsb2NhbGUvY29sbC1sb29rdXAuaD4KKysjIGVuZGlmCisrCisrLyogVGhpcyBpcyBmb3Igb3RoZXIgR05VIGRpc3RyaWJ1dGlvbnMgd2l0aCBpbnRlcm5hdGlvbmFsaXplZCBtZXNzYWdlcy4gICovCisrIyBpZiAoSEFWRV9MSUJJTlRMX0ggJiYgRU5BQkxFX05MUykgfHwgZGVmaW5lZCBfTElCQworKyMgIGluY2x1ZGUgPGxpYmludGwuaD4KKysjICBpZmRlZiBfTElCQworKyMgICB1bmRlZiBnZXR0ZXh0CisrIyAgIGRlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dCAoImxpYmMiLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrIyAgZW5kaWYKKysjIGVsc2UKKysjICBkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorKyMgZW5kaWYKKysKKysjIGlmbmRlZiBnZXR0ZXh0X25vb3AKKysvKiBUaGlzIGRlZmluZSBpcyBzbyB4Z2V0dGV4dCBjYW4gZmluZCB0aGUgaW50ZXJuYXRpb25hbGl6YWJsZQorKyAgIHN0cmluZ3MuICAqLworKyMgIGRlZmluZSBnZXR0ZXh0X25vb3AoU3RyaW5nKSBTdHJpbmcKKysjIGVuZGlmCisrCisrLyogVGhlIGBlbWFjcycgc3dpdGNoIHR1cm5zIG9uIGNlcnRhaW4gbWF0Y2hpbmcgY29tbWFuZHMKKysgICB0aGF0IG1ha2Ugc2Vuc2Ugb25seSBpbiBFbWFjcy4gKi8KKysjIGlmZGVmIGVtYWNzCisrCisrIyAgaW5jbHVkZSAibGlzcC5oIgorKyMgIGluY2x1ZGUgImJ1ZmZlci5oIgorKyMgIGluY2x1ZGUgInN5bnRheC5oIgorKworKyMgZWxzZSAgLyogbm90IGVtYWNzICovCisrCisrLyogSWYgd2UgYXJlIG5vdCBsaW5raW5nIHdpdGggRW1hY3MgcHJvcGVyLAorKyAgIHdlIGNhbid0IHVzZSB0aGUgcmVsb2NhdGluZyBhbGxvY2F0b3IKKysgICBldmVuIGlmIGNvbmZpZy5oIHNheXMgdGhhdCB3ZSBjYW4uICAqLworKyMgIHVuZGVmIFJFTF9BTExPQworKworKyMgIGlmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgX0xJQkMKKysjICAgaW5jbHVkZSA8c3RkbGliLmg+CisrIyAgZWxzZQorK2NoYXIgKm1hbGxvYyAoKTsKKytjaGFyICpyZWFsbG9jICgpOworKyMgIGVuZGlmCisrCisrLyogV2hlbiB1c2VkIGluIEVtYWNzJ3MgbGliLXNyYywgd2UgbmVlZCB0byBnZXQgYnplcm8gYW5kIGJjb3B5IHNvbWVob3cuCisrICAgSWYgbm90aGluZyBlbHNlIGhhcyBiZWVuIGRvbmUsIHVzZSB0aGUgbWV0aG9kIGJlbG93LiAgKi8KKysjICBpZmRlZiBJTkhJQklUX1NUUklOR19IRUFERVIKKysjICAgaWYgIShkZWZpbmVkIEhBVkVfQlpFUk8gJiYgZGVmaW5lZCBIQVZFX0JDT1BZKQorKyMgICAgaWYgIWRlZmluZWQgYnplcm8gJiYgIWRlZmluZWQgYmNvcHkKKysjICAgICB1bmRlZiBJTkhJQklUX1NUUklOR19IRUFERVIKKysjICAgIGVuZGlmCisrIyAgIGVuZGlmCisrIyAgZW5kaWYKKysKKysvKiBUaGlzIGlzIHRoZSBub3JtYWwgd2F5IG9mIG1ha2luZyBzdXJlIHdlIGhhdmUgYSBiY29weSBhbmQgYSBiemVyby4KKysgICBUaGlzIGlzIHVzZWQgaW4gbW9zdCBwcm9ncmFtcy0tYSBmZXcgb3RoZXIgcHJvZ3JhbXMgYXZvaWQgdGhpcworKyAgIGJ5IGRlZmluaW5nIElOSElCSVRfU1RSSU5HX0hFQURFUi4gICovCisrIyAgaWZuZGVmIElOSElCSVRfU1RSSU5HX0hFQURFUgorKyMgICBpZiBkZWZpbmVkIEhBVkVfU1RSSU5HX0ggfHwgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworKyMgICAgaW5jbHVkZSA8c3RyaW5nLmg+CisrIyAgICBpZm5kZWYgYnplcm8KKysjICAgICBpZm5kZWYgX0xJQkMKKysjICAgICAgZGVmaW5lIGJ6ZXJvKHMsIG4pCShtZW1zZXQgKHMsICdcMCcsIG4pLCAocykpCisrIyAgICAgZWxzZQorKyMgICAgICBkZWZpbmUgYnplcm8ocywgbikJX19iemVybyAocywgbikKKysjICAgICBlbmRpZgorKyMgICAgZW5kaWYKKysjICAgZWxzZQorKyMgICAgaW5jbHVkZSA8c3RyaW5ncy5oPgorKyMgICAgaWZuZGVmIG1lbWNtcAorKyMgICAgIGRlZmluZSBtZW1jbXAoczEsIHMyLCBuKQliY21wIChzMSwgczIsIG4pCisrIyAgICBlbmRpZgorKyMgICAgaWZuZGVmIG1lbWNweQorKyMgICAgIGRlZmluZSBtZW1jcHkoZCwgcywgbikJKGJjb3B5IChzLCBkLCBuKSwgKGQpKQorKyMgICAgZW5kaWYKKysjICAgZW5kaWYKKysjICBlbmRpZgorKworKy8qIERlZmluZSB0aGUgc3ludGF4IHN0dWZmIGZvciBcPCwgXD4sIGV0Yy4gICovCisrCisrLyogVGhpcyBtdXN0IGJlIG5vbnplcm8gZm9yIHRoZSB3b3JkY2hhciBhbmQgbm90d29yZGNoYXIgcGF0dGVybgorKyAgIGNvbW1hbmRzIGluIHJlX21hdGNoXzIuICAqLworKyMgIGlmbmRlZiBTd29yZAorKyMgICBkZWZpbmUgU3dvcmQgMQorKyMgIGVuZGlmCisrCisrIyAgaWZkZWYgU1dJVENIX0VOVU1fQlVHCisrIyAgIGRlZmluZSBTV0lUQ0hfRU5VTV9DQVNUKHgpICgoaW50KSh4KSkKKysjICBlbHNlCisrIyAgIGRlZmluZSBTV0lUQ0hfRU5VTV9DQVNUKHgpICh4KQorKyMgIGVuZGlmCisrCisrIyBlbmRpZiAvKiBub3QgZW1hY3MgKi8KKysKKysjIGlmIGRlZmluZWQgX0xJQkMgfHwgSEFWRV9MSU1JVFNfSAorKyMgIGluY2x1ZGUgPGxpbWl0cy5oPgorKyMgZW5kaWYKKysKKysjIGlmbmRlZiBNQl9MRU5fTUFYCisrIyAgZGVmaW5lIE1CX0xFTl9NQVggMQorKyMgZW5kaWYKKysMCisrLyogR2V0IHRoZSBpbnRlcmZhY2UsIGluY2x1ZGluZyB0aGUgc3ludGF4IGJpdHMuICAqLworKyMgaW5jbHVkZSAicmVnZXguaCIKKysKKysvKiBpc2FscGhhIGV0Yy4gYXJlIHVzZWQgZm9yIHRoZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gICovCisrIyBpbmNsdWRlIDxjdHlwZS5oPgorKworKy8qIEppbSBNZXllcmluZyB3cml0ZXM6CisrCisrICAgIi4uLiBTb21lIGN0eXBlIG1hY3JvcyBhcmUgdmFsaWQgb25seSBmb3IgY2hhcmFjdGVyIGNvZGVzIHRoYXQKKysgICBpc2FzY2lpIHNheXMgYXJlIEFTQ0lJIChTR0kncyBJUklYLTQuMC41IGlzIG9uZSBzdWNoIHN5c3RlbSAtLXdoZW4KKysgICB1c2luZyAvYmluL2NjIG9yIGdjYyBidXQgd2l0aG91dCBnaXZpbmcgYW4gYW5zaSBvcHRpb24pLiAgU28sIGFsbAorKyAgIGN0eXBlIHVzZXMgc2hvdWxkIGJlIHRocm91Z2ggbWFjcm9zIGxpa2UgSVNQUklOVC4uLiAgSWYKKysgICBTVERDX0hFQURFUlMgaXMgZGVmaW5lZCwgdGhlbiBhdXRvY29uZiBoYXMgdmVyaWZpZWQgdGhhdCB0aGUgY3R5cGUKKysgICBtYWNyb3MgZG9uJ3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggcmVmZXJlbmNlcyB0byBpc2FzY2lpLiAuLi4KKysgICBEZWZpbmluZyBpc2FzY2lpIHRvIDEgc2hvdWxkIGxldCBhbnkgY29tcGlsZXIgd29ydGggaXRzIHNhbHQKKysgICBlbGltaW5hdGUgdGhlICYmIHRocm91Z2ggY29uc3RhbnQgZm9sZGluZy4iCisrICAgU29sYXJpcyBkZWZpbmVzIHNvbWUgb2YgdGhlc2Ugc3ltYm9scyBzbyB3ZSBtdXN0IHVuZGVmaW5lIHRoZW0gZmlyc3QuICAqLworKworKyMgdW5kZWYgSVNBU0NJSQorKyMgaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgKCFkZWZpbmVkIGlzYXNjaWkgJiYgIWRlZmluZWQgSEFWRV9JU0FTQ0lJKQorKyMgIGRlZmluZSBJU0FTQ0lJKGMpIDEKKysjIGVsc2UKKysjICBkZWZpbmUgSVNBU0NJSShjKSBpc2FzY2lpKGMpCisrIyBlbmRpZgorKworKyMgaWZkZWYgaXNibGFuaworKyMgIGRlZmluZSBJU0JMQU5LKGMpIChJU0FTQ0lJIChjKSAmJiBpc2JsYW5rIChjKSkKKysjIGVsc2UKKysjICBkZWZpbmUgSVNCTEFOSyhjKSAoKGMpID09ICcgJyB8fCAoYykgPT0gJ1x0JykKKysjIGVuZGlmCisrIyBpZmRlZiBpc2dyYXBoCisrIyAgZGVmaW5lIElTR1JBUEgoYykgKElTQVNDSUkgKGMpICYmIGlzZ3JhcGggKGMpKQorKyMgZWxzZQorKyMgIGRlZmluZSBJU0dSQVBIKGMpIChJU0FTQ0lJIChjKSAmJiBpc3ByaW50IChjKSAmJiAhaXNzcGFjZSAoYykpCisrIyBlbmRpZgorKworKyMgdW5kZWYgSVNQUklOVAorKyMgZGVmaW5lIElTUFJJTlQoYykgKElTQVNDSUkgKGMpICYmIGlzcHJpbnQgKGMpKQorKyMgZGVmaW5lIElTRElHSVQoYykgKElTQVNDSUkgKGMpICYmIGlzZGlnaXQgKGMpKQorKyMgZGVmaW5lIElTQUxOVU0oYykgKElTQVNDSUkgKGMpICYmIGlzYWxudW0gKGMpKQorKyMgZGVmaW5lIElTQUxQSEEoYykgKElTQVNDSUkgKGMpICYmIGlzYWxwaGEgKGMpKQorKyMgZGVmaW5lIElTQ05UUkwoYykgKElTQVNDSUkgKGMpICYmIGlzY250cmwgKGMpKQorKyMgZGVmaW5lIElTTE9XRVIoYykgKElTQVNDSUkgKGMpICYmIGlzbG93ZXIgKGMpKQorKyMgZGVmaW5lIElTUFVOQ1QoYykgKElTQVNDSUkgKGMpICYmIGlzcHVuY3QgKGMpKQorKyMgZGVmaW5lIElTU1BBQ0UoYykgKElTQVNDSUkgKGMpICYmIGlzc3BhY2UgKGMpKQorKyMgZGVmaW5lIElTVVBQRVIoYykgKElTQVNDSUkgKGMpICYmIGlzdXBwZXIgKGMpKQorKyMgZGVmaW5lIElTWERJR0lUKGMpIChJU0FTQ0lJIChjKSAmJiBpc3hkaWdpdCAoYykpCisrCisrIyBpZmRlZiBfdG9sb3dlcgorKyMgIGRlZmluZSBUT0xPV0VSKGMpIF90b2xvd2VyKGMpCisrIyBlbHNlCisrIyAgZGVmaW5lIFRPTE9XRVIoYykgdG9sb3dlcihjKQorKyMgZW5kaWYKKysKKysjIGlmbmRlZiBOVUxMCisrIyAgZGVmaW5lIE5VTEwgKHZvaWQgKikwCisrIyBlbmRpZgorKworKy8qIFdlIHJlbW92ZSBhbnkgcHJldmlvdXMgZGVmaW5pdGlvbiBvZiBgU0lHTl9FWFRFTkRfQ0hBUicsCisrICAgc2luY2Ugb3VycyAod2UgaG9wZSkgd29ya3MgcHJvcGVybHkgd2l0aCBhbGwgY29tYmluYXRpb25zIG9mCisrICAgbWFjaGluZXMsIGNvbXBpbGVycywgYGNoYXInIGFuZCBgdW5zaWduZWQgY2hhcicgYXJndW1lbnQgdHlwZXMuCisrICAgKFBlciBCb3RobmVyIHN1Z2dlc3RlZCB0aGUgYmFzaWMgYXBwcm9hY2guKSAgKi8KKysjIHVuZGVmIFNJR05fRVhURU5EX0NIQVIKKysjIGlmIF9fU1REQ19fCisrIyAgZGVmaW5lIFNJR05fRVhURU5EX0NIQVIoYykgKChzaWduZWQgY2hhcikgKGMpKQorKyMgZWxzZSAgLyogbm90IF9fU1REQ19fICovCisrLyogQXMgaW4gSGFyYmlzb24gYW5kIFN0ZWVsZS4gICovCisrIyAgZGVmaW5lIFNJR05fRVhURU5EX0NIQVIoYykgKCgoKHVuc2lnbmVkIGNoYXIpIChjKSkgXiAxMjgpIC0gMTI4KQorKyMgZW5kaWYKKysMCisrIyBpZm5kZWYgZW1hY3MKKysvKiBIb3cgbWFueSBjaGFyYWN0ZXJzIGluIHRoZSBjaGFyYWN0ZXIgc2V0LiAgKi8KKysjICBkZWZpbmUgQ0hBUl9TRVRfU0laRSAyNTYKKysKKysjICBpZmRlZiBTWU5UQVhfVEFCTEUKKysKKytleHRlcm4gY2hhciAqcmVfc3ludGF4X3RhYmxlOworKworKyMgIGVsc2UgLyogbm90IFNZTlRBWF9UQUJMRSAqLworKworK3N0YXRpYyBjaGFyIHJlX3N5bnRheF90YWJsZVtDSEFSX1NFVF9TSVpFXTsKKysKKytzdGF0aWMgdm9pZCBpbml0X3N5bnRheF9vbmNlICh2b2lkKTsKKysKKytzdGF0aWMgdm9pZAorK2luaXRfc3ludGF4X29uY2UgKHZvaWQpCisreworKyAgIHJlZ2lzdGVyIGludCBjOworKyAgIHN0YXRpYyBpbnQgZG9uZSA9IDA7CisrCisrICAgaWYgKGRvbmUpCisrICAgICByZXR1cm47CisrICAgYnplcm8gKHJlX3N5bnRheF90YWJsZSwgc2l6ZW9mIHJlX3N5bnRheF90YWJsZSk7CisrCisrICAgZm9yIChjID0gMDsgYyA8IENIQVJfU0VUX1NJWkU7ICsrYykKKysgICAgIGlmIChJU0FMTlVNIChjKSkKKysJcmVfc3ludGF4X3RhYmxlW2NdID0gU3dvcmQ7CisrCisrICAgcmVfc3ludGF4X3RhYmxlWydfJ10gPSBTd29yZDsKKysKKysgICBkb25lID0gMTsKKyt9CisrCisrIyAgZW5kaWYgLyogbm90IFNZTlRBWF9UQUJMRSAqLworKworKyMgIGRlZmluZSBTWU5UQVgoYykgcmVfc3ludGF4X3RhYmxlWyh1bnNpZ25lZCBjaGFyKSAoYyldCisrCisrIyBlbmRpZiAvKiBlbWFjcyAqLworKwwKKysvKiBJbnRlZ2VyIHR5cGUgZm9yIHBvaW50ZXJzLiAgKi8KKysjIGlmICFkZWZpbmVkIF9MSUJDICYmICFkZWZpbmVkIEhBVkVfVUlOVFBUUl9UCisrdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1aW50cHRyX3Q7CisrIyBlbmRpZgorKworKy8qIFNob3VsZCB3ZSB1c2UgbWFsbG9jIG9yIGFsbG9jYT8gIElmIFJFR0VYX01BTExPQyBpcyBub3QgZGVmaW5lZCwgd2UKKysgICB1c2UgYGFsbG9jYScgaW5zdGVhZCBvZiBgbWFsbG9jJy4gIFRoaXMgaXMgYmVjYXVzZSB1c2luZyBtYWxsb2MgaW4KKysgICByZV9zZWFyY2gqIG9yIHJlX21hdGNoKiBjb3VsZCBjYXVzZSBtZW1vcnkgbGVha3Mgd2hlbiBDLWcgaXMgdXNlZCBpbgorKyAgIEVtYWNzOyBhbHNvLCBtYWxsb2MgaXMgc2xvd2VyIGFuZCBjYXVzZXMgc3RvcmFnZSBmcmFnbWVudGF0aW9uLiAgT24KKysgICB0aGUgb3RoZXIgaGFuZCwgbWFsbG9jIGlzIG1vcmUgcG9ydGFibGUsIGFuZCBlYXNpZXIgdG8gZGVidWcuCisrCisrICAgQmVjYXVzZSB3ZSBzb21ldGltZXMgdXNlIGFsbG9jYSwgc29tZSByb3V0aW5lcyBoYXZlIHRvIGJlIG1hY3JvcywKKysgICBub3QgZnVuY3Rpb25zIC0tIGBhbGxvY2EnLWFsbG9jYXRlZCBzcGFjZSBkaXNhcHBlYXJzIGF0IHRoZSBlbmQgb2YgdGhlCisrICAgZnVuY3Rpb24gaXQgaXMgY2FsbGVkIGluLiAgKi8KKysKKysjIGlmZGVmIFJFR0VYX01BTExPQworKworKyMgIGRlZmluZSBSRUdFWF9BTExPQ0FURSBtYWxsb2MKKysjICBkZWZpbmUgUkVHRVhfUkVBTExPQ0FURShzb3VyY2UsIG9zaXplLCBuc2l6ZSkgcmVhbGxvYyAoc291cmNlLCBuc2l6ZSkKKysjICBkZWZpbmUgUkVHRVhfRlJFRSBmcmVlCisrCisrIyBlbHNlIC8qIG5vdCBSRUdFWF9NQUxMT0MgICovCisrCisrLyogRW1hY3MgYWxyZWFkeSBkZWZpbmVzIGFsbG9jYSwgc29tZXRpbWVzLiAgKi8KKysjICBpZm5kZWYgYWxsb2NhCisrCisrLyogTWFrZSBhbGxvY2Egd29yayB0aGUgYmVzdCBwb3NzaWJsZSB3YXkuICAqLworKyMgICBpZmRlZiBfX0dOVUNfXworKyMgICAgZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCisrIyAgIGVsc2UgLyogbm90IF9fR05VQ19fICovCisrIyAgICBpZiBIQVZFX0FMTE9DQV9ICisrIyAgICAgaW5jbHVkZSA8YWxsb2NhLmg+CisrIyAgICBlbmRpZiAvKiBIQVZFX0FMTE9DQV9IICovCisrIyAgIGVuZGlmIC8qIG5vdCBfX0dOVUNfXyAqLworKworKyMgIGVuZGlmIC8qIG5vdCBhbGxvY2EgKi8KKysKKysjICBkZWZpbmUgUkVHRVhfQUxMT0NBVEUgYWxsb2NhCisrCisrLyogQXNzdW1lcyBhIGBjaGFyICpkZXN0aW5hdGlvbicgdmFyaWFibGUuICAqLworKyMgIGRlZmluZSBSRUdFWF9SRUFMTE9DQVRFKHNvdXJjZSwgb3NpemUsIG5zaXplKQkJCVwKKysgIChkZXN0aW5hdGlvbiA9IChjaGFyICopIGFsbG9jYSAobnNpemUpLAkJCQlcCisrICAgbWVtY3B5IChkZXN0aW5hdGlvbiwgc291cmNlLCBvc2l6ZSkpCisrCisrLyogTm8gbmVlZCB0byBkbyBhbnl0aGluZyB0byBmcmVlLCBhZnRlciBhbGxvY2EuICAqLworKyMgIGRlZmluZSBSRUdFWF9GUkVFKGFyZykgKCh2b2lkKTApIC8qIERvIG5vdGhpbmchICBCdXQgaW5oaWJpdCBnY2Mgd2FybmluZy4gICovCisrCisrIyBlbmRpZiAvKiBub3QgUkVHRVhfTUFMTE9DICovCisrCisrLyogRGVmaW5lIGhvdyB0byBhbGxvY2F0ZSB0aGUgZmFpbHVyZSBzdGFjay4gICovCisrCisrIyBpZiBkZWZpbmVkIFJFTF9BTExPQyAmJiBkZWZpbmVkIFJFR0VYX01BTExPQworKworKyMgIGRlZmluZSBSRUdFWF9BTExPQ0FURV9TVEFDSyhzaXplKQkJCQlcCisrICByX2FsbG9jICgmZmFpbHVyZV9zdGFja19wdHIsIChzaXplKSkKKysjICBkZWZpbmUgUkVHRVhfUkVBTExPQ0FURV9TVEFDSyhzb3VyY2UsIG9zaXplLCBuc2l6ZSkJCVwKKysgIHJfcmVfYWxsb2MgKCZmYWlsdXJlX3N0YWNrX3B0ciwgKG5zaXplKSkKKysjICBkZWZpbmUgUkVHRVhfRlJFRV9TVEFDSyhwdHIpCQkJCQlcCisrICByX2FsbG9jX2ZyZWUgKCZmYWlsdXJlX3N0YWNrX3B0cikKKysKKysjIGVsc2UgLyogbm90IHVzaW5nIHJlbG9jYXRpbmcgYWxsb2NhdG9yICovCisrCisrIyAgaWZkZWYgUkVHRVhfTUFMTE9DCisrCisrIyAgIGRlZmluZSBSRUdFWF9BTExPQ0FURV9TVEFDSyBtYWxsb2MKKysjICAgZGVmaW5lIFJFR0VYX1JFQUxMT0NBVEVfU1RBQ0soc291cmNlLCBvc2l6ZSwgbnNpemUpIHJlYWxsb2MgKHNvdXJjZSwgbnNpemUpCisrIyAgIGRlZmluZSBSRUdFWF9GUkVFX1NUQUNLIGZyZWUKKysKKysjICBlbHNlIC8qIG5vdCBSRUdFWF9NQUxMT0MgKi8KKysKKysjICAgZGVmaW5lIFJFR0VYX0FMTE9DQVRFX1NUQUNLIGFsbG9jYQorKworKyMgICBkZWZpbmUgUkVHRVhfUkVBTExPQ0FURV9TVEFDSyhzb3VyY2UsIG9zaXplLCBuc2l6ZSkJCQlcCisrICAgUkVHRVhfUkVBTExPQ0FURSAoc291cmNlLCBvc2l6ZSwgbnNpemUpCisrLyogTm8gbmVlZCB0byBleHBsaWNpdGx5IGZyZWUgYW55dGhpbmcuICAqLworKyMgICBkZWZpbmUgUkVHRVhfRlJFRV9TVEFDSyhhcmcpCisrCisrIyAgZW5kaWYgLyogbm90IFJFR0VYX01BTExPQyAqLworKyMgZW5kaWYgLyogbm90IHVzaW5nIHJlbG9jYXRpbmcgYWxsb2NhdG9yICovCisrCisrCisrLyogVHJ1ZSBpZiBgc2l6ZTEnIGlzIG5vbi1OVUxMIGFuZCBQVFIgaXMgcG9pbnRpbmcgYW55d2hlcmUgaW5zaWRlCisrICAgYHN0cmluZzEnIG9yIGp1c3QgcGFzdCBpdHMgZW5kLiAgVGhpcyB3b3JrcyBpZiBQVFIgaXMgTlVMTCwgd2hpY2ggaXMKKysgICBhIGdvb2QgdGhpbmcuICAqLworKyMgZGVmaW5lIEZJUlNUX1NUUklOR19QKHB0cikgCQkJCQlcCisrICAoc2l6ZTEgJiYgc3RyaW5nMSA8PSAocHRyKSAmJiAocHRyKSA8PSBzdHJpbmcxICsgc2l6ZTEpCisrCisrLyogKFJlKUFsbG9jYXRlIE4gaXRlbXMgb2YgdHlwZSBUIHVzaW5nIG1hbGxvYywgb3IgZmFpbC4gICovCisrIyBkZWZpbmUgVEFMTE9DKG4sIHQpICgodCAqKSBtYWxsb2MgKChuKSAqIHNpemVvZiAodCkpKQorKyMgZGVmaW5lIFJFVEFMTE9DKGFkZHIsIG4sIHQpICgoYWRkcikgPSAodCAqKSByZWFsbG9jIChhZGRyLCAobikgKiBzaXplb2YgKHQpKSkKKysjIGRlZmluZSBSRVRBTExPQ19JRihhZGRyLCBuLCB0KSBcCisrICBpZiAoYWRkcikgUkVUQUxMT0MoKGFkZHIpLCAobiksIHQpOyBlbHNlIChhZGRyKSA9IFRBTExPQyAoKG4pLCB0KQorKyMgZGVmaW5lIFJFR0VYX1RBTExPQyhuLCB0KSAoKHQgKikgUkVHRVhfQUxMT0NBVEUgKChuKSAqIHNpemVvZiAodCkpKQorKworKyMgZGVmaW5lIEJZVEVXSURUSCA4IC8qIEluIGJpdHMuICAqLworKworKyMgZGVmaW5lIFNUUkVRKHMxLCBzMikgKChzdHJjbXAgKHMxLCBzMikgPT0gMCkpCisrCisrIyB1bmRlZiBNQVgKKysjIHVuZGVmIE1JTgorKyMgZGVmaW5lIE1BWChhLCBiKSAoKGEpID4gKGIpID8gKGEpIDogKGIpKQorKyMgZGVmaW5lIE1JTihhLCBiKSAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQorKworK3R5cGVkZWYgY2hhciBib29sZWFuOworKyMgZGVmaW5lIGZhbHNlIDAKKysjIGRlZmluZSB0cnVlIDEKKysKKytzdGF0aWMgcmVnX2VycmNvZGVfdCBieXRlX3JlZ2V4X2NvbXBpbGUgKGNvbnN0IGNoYXIgKnBhdHRlcm4sIHNpemVfdCBzaXplLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCk7CisrCisrc3RhdGljIGludCBieXRlX3JlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMSwgaW50IHNpemUxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgc2l6ZTIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdG9wKTsKKytzdGF0aWMgaW50IGJ5dGVfcmVfc2VhcmNoXzIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzEsIGludCBzaXplMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBzaXplMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydHBvcywgaW50IHJhbmdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgaW50IHN0b3ApOworK3N0YXRpYyBpbnQgYnl0ZV9yZV9jb21waWxlX2Zhc3RtYXAgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCk7CisrCisrI2lmZGVmIE1CU19TVVBQT1JUCisrc3RhdGljIHJlZ19lcnJjb2RlX3Qgd2NzX3JlZ2V4X2NvbXBpbGUgKGNvbnN0IGNoYXIgKnBhdHRlcm4sIHNpemVfdCBzaXplLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApOworKworKworK3N0YXRpYyBpbnQgd2NzX3JlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjc3RyaW5nMSwgaW50IGNzaXplMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjc3RyaW5nMiwgaW50IGNzaXplMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9zLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0b3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqc3RyaW5nMSwgaW50IHNpemUxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKnN0cmluZzIsIGludCBzaXplMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm1ic19vZmZzZXQxLCBpbnQgKm1ic19vZmZzZXQyKTsKKytzdGF0aWMgaW50IHdjc19yZV9zZWFyY2hfMiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcxLCBpbnQgc2l6ZTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBzaXplMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0cG9zLCBpbnQgcmFuZ2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIGludCBzdG9wKTsKKytzdGF0aWMgaW50IHdjc19yZV9jb21waWxlX2Zhc3RtYXAgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCk7CisrI2VuZGlmCisrDAorKy8qIFRoZXNlIGFyZSB0aGUgY29tbWFuZCBjb2RlcyB0aGF0IGFwcGVhciBpbiBjb21waWxlZCByZWd1bGFyCisrICAgZXhwcmVzc2lvbnMuICBTb21lIG9wY29kZXMgYXJlIGZvbGxvd2VkIGJ5IGFyZ3VtZW50IGJ5dGVzLiAgQQorKyAgIGNvbW1hbmQgY29kZSBjYW4gc3BlY2lmeSBhbnkgaW50ZXJwcmV0YXRpb24gd2hhdHNvZXZlciBmb3IgaXRzCisrICAgYXJndW1lbnRzLiAgWmVybyBieXRlcyBtYXkgYXBwZWFyIGluIHRoZSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24uICAqLworKworK3R5cGVkZWYgZW51bQorK3sKKysgIG5vX29wID0gMCwKKysKKysgIC8qIFN1Y2NlZWQgcmlnaHQgYXdheS0tbm8gbW9yZSBiYWNrdHJhY2tpbmcuICAqLworKyAgc3VjY2VlZCwKKysKKysgICAgICAgIC8qIEZvbGxvd2VkIGJ5IG9uZSBieXRlIGdpdmluZyBuLCB0aGVuIGJ5IG4gbGl0ZXJhbCBieXRlcy4gICovCisrICBleGFjdG4sCisrCisrIyBpZmRlZiBNQlNfU1VQUE9SVAorKwkvKiBTYW1lIGFzIGV4YWN0biwgYnV0IGNvbnRhaW5zIGJpbmFyeSBkYXRhLiAgKi8KKysgIGV4YWN0bl9iaW4sCisrIyBlbmRpZgorKworKyAgICAgICAgLyogTWF0Y2hlcyBhbnkgKG1vcmUgb3IgbGVzcykgY2hhcmFjdGVyLiAgKi8KKysgIGFueWNoYXIsCisrCisrICAgICAgICAvKiBNYXRjaGVzIGFueSBvbmUgY2hhciBiZWxvbmdpbmcgdG8gc3BlY2lmaWVkIHNldC4gIEZpcnN0CisrICAgICAgICAgICBmb2xsb3dpbmcgYnl0ZSBpcyBudW1iZXIgb2YgYml0bWFwIGJ5dGVzLiAgVGhlbiBjb21lIGJ5dGVzCisrICAgICAgICAgICBmb3IgYSBiaXRtYXAgc2F5aW5nIHdoaWNoIGNoYXJzIGFyZSBpbi4gIEJpdHMgaW4gZWFjaCBieXRlCisrICAgICAgICAgICBhcmUgb3JkZXJlZCBsb3ctYml0LWZpcnN0LiAgQSBjaGFyYWN0ZXIgaXMgaW4gdGhlIHNldCBpZiBpdHMKKysgICAgICAgICAgIGJpdCBpcyAxLiAgQSBjaGFyYWN0ZXIgdG9vIGxhcmdlIHRvIGhhdmUgYSBiaXQgaW4gdGhlIG1hcCBpcworKyAgICAgICAgICAgYXV0b21hdGljYWxseSBub3QgaW4gdGhlIHNldC4gICovCisrICAgICAgICAvKiBpZmRlZiBNQlNfU1VQUE9SVCwgZm9sbG93aW5nIGVsZW1lbnQgaXMgbGVuZ3RoIG9mIGNoYXJhY3RlcgorKwkgICBjbGFzc2VzLCBsZW5ndGggb2YgY29sbGF0aW5nIHN5bWJvbHMsIGxlbmd0aCBvZiBlcXVpdmFsZW5jZQorKwkgICBjbGFzc2VzLCBsZW5ndGggb2YgY2hhcmFjdGVyIHJhbmdlcywgYW5kIGxlbmd0aCBvZiBjaGFyYWN0ZXJzLgorKwkgICBOZXh0LCBjaGFyYWN0ZXIgY2xhc3MgZWxlbWVudCwgY29sbGF0aW5nIHN5bWJvbHMgZWxlbWVudHMsCisrCSAgIGVxdWl2YWxlbmNlIGNsYXNzIGVsZW1lbnRzLCByYW5nZSBlbGVtZW50cywgYW5kIGNoYXJhY3RlcgorKwkgICBlbGVtZW50cyBmb2xsb3cuCisrCSAgIFNlZSByZWdleF9jb21waWxlIGZ1bmN0aW9uLiAgKi8KKysgIGNoYXJzZXQsCisrCisrICAgICAgICAvKiBTYW1lIHBhcmFtZXRlcnMgYXMgY2hhcnNldCwgYnV0IG1hdGNoIGFueSBjaGFyYWN0ZXIgdGhhdCBpcworKyAgICAgICAgICAgbm90IG9uZSBvZiB0aG9zZSBzcGVjaWZpZWQuICAqLworKyAgY2hhcnNldF9ub3QsCisrCisrICAgICAgICAvKiBTdGFydCByZW1lbWJlcmluZyB0aGUgdGV4dCB0aGF0IGlzIG1hdGNoZWQsIGZvciBzdG9yaW5nIGluIGEKKysgICAgICAgICAgIHJlZ2lzdGVyLiAgRm9sbG93ZWQgYnkgb25lIGJ5dGUgd2l0aCB0aGUgcmVnaXN0ZXIgbnVtYmVyLCBpbgorKyAgICAgICAgICAgdGhlIHJhbmdlIDAgdG8gb25lIGxlc3MgdGhhbiB0aGUgcGF0dGVybiBidWZmZXIncyByZV9uc3ViCisrICAgICAgICAgICBmaWVsZC4gIFRoZW4gZm9sbG93ZWQgYnkgb25lIGJ5dGUgd2l0aCB0aGUgbnVtYmVyIG9mIGdyb3VwcworKyAgICAgICAgICAgaW5uZXIgdG8gdGhpcyBvbmUuICAoVGhpcyBsYXN0IGhhcyB0byBiZSBwYXJ0IG9mIHRoZQorKyAgICAgICAgICAgc3RhcnRfbWVtb3J5IG9ubHkgYmVjYXVzZSB3ZSBuZWVkIGl0IGluIHRoZSBvbl9mYWlsdXJlX2p1bXAKKysgICAgICAgICAgIG9mIHJlX21hdGNoXzIuKSAgKi8KKysgIHN0YXJ0X21lbW9yeSwKKysKKysgICAgICAgIC8qIFN0b3AgcmVtZW1iZXJpbmcgdGhlIHRleHQgdGhhdCBpcyBtYXRjaGVkIGFuZCBzdG9yZSBpdCBpbiBhCisrICAgICAgICAgICBtZW1vcnkgcmVnaXN0ZXIuICBGb2xsb3dlZCBieSBvbmUgYnl0ZSB3aXRoIHRoZSByZWdpc3RlcgorKyAgICAgICAgICAgbnVtYmVyLCBpbiB0aGUgcmFuZ2UgMCB0byBvbmUgbGVzcyB0aGFuIGByZV9uc3ViJyBpbiB0aGUKKysgICAgICAgICAgIHBhdHRlcm4gYnVmZmVyLCBhbmQgb25lIGJ5dGUgd2l0aCB0aGUgbnVtYmVyIG9mIGlubmVyIGdyb3VwcywKKysgICAgICAgICAgIGp1c3QgbGlrZSBgc3RhcnRfbWVtb3J5Jy4gIChXZSBuZWVkIHRoZSBudW1iZXIgb2YgaW5uZXIKKysgICAgICAgICAgIGdyb3VwcyBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgZWFzeSB3YXkgb2YgZmluZGluZyB0aGUKKysgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgc3RhcnRfbWVtb3J5IHdoZW4gd2UncmUgYXQgYSBzdG9wX21lbW9yeS4pICAqLworKyAgc3RvcF9tZW1vcnksCisrCisrICAgICAgICAvKiBNYXRjaCBhIGR1cGxpY2F0ZSBvZiBzb21ldGhpbmcgcmVtZW1iZXJlZC4gRm9sbG93ZWQgYnkgb25lCisrICAgICAgICAgICBieXRlIGNvbnRhaW5pbmcgdGhlIHJlZ2lzdGVyIG51bWJlci4gICovCisrICBkdXBsaWNhdGUsCisrCisrICAgICAgICAvKiBGYWlsIHVubGVzcyBhdCBiZWdpbm5pbmcgb2YgbGluZS4gICovCisrICBiZWdsaW5lLAorKworKyAgICAgICAgLyogRmFpbCB1bmxlc3MgYXQgZW5kIG9mIGxpbmUuICAqLworKyAgZW5kbGluZSwKKysKKysgICAgICAgIC8qIFN1Y2NlZWRzIGlmIGF0IGJlZ2lubmluZyBvZiBidWZmZXIgKGlmIGVtYWNzKSBvciBhdCBiZWdpbm5pbmcKKysgICAgICAgICAgIG9mIHN0cmluZyB0byBiZSBtYXRjaGVkIChpZiBub3QpLiAgKi8KKysgIGJlZ2J1ZiwKKysKKysgICAgICAgIC8qIEFuYWxvZ291c2x5LCBmb3IgZW5kIG9mIGJ1ZmZlci9zdHJpbmcuICAqLworKyAgZW5kYnVmLAorKworKyAgICAgICAgLyogRm9sbG93ZWQgYnkgdHdvIGJ5dGUgcmVsYXRpdmUgYWRkcmVzcyB0byB3aGljaCB0byBqdW1wLiAgKi8KKysgIGp1bXAsCisrCisrCS8qIFNhbWUgYXMganVtcCwgYnV0IG1hcmtzIHRoZSBlbmQgb2YgYW4gYWx0ZXJuYXRpdmUuICAqLworKyAganVtcF9wYXN0X2FsdCwKKysKKysgICAgICAgIC8qIEZvbGxvd2VkIGJ5IHR3by1ieXRlIHJlbGF0aXZlIGFkZHJlc3Mgb2YgcGxhY2UgdG8gcmVzdW1lIGF0CisrICAgICAgICAgICBpbiBjYXNlIG9mIGZhaWx1cmUuICAqLworKyAgICAgICAgLyogaWZkZWYgTUJTX1NVUFBPUlQsIHRoZSBzaXplIG9mIGFkZHJlc3MgaXMgMS4gICovCisrICBvbl9mYWlsdXJlX2p1bXAsCisrCisrICAgICAgICAvKiBMaWtlIG9uX2ZhaWx1cmVfanVtcCwgYnV0IHB1c2hlcyBhIHBsYWNlaG9sZGVyIGluc3RlYWQgb2YgdGhlCisrICAgICAgICAgICBjdXJyZW50IHN0cmluZyBwb3NpdGlvbiB3aGVuIGV4ZWN1dGVkLiAgKi8KKysgIG9uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcCwKKysKKysgICAgICAgIC8qIFRocm93IGF3YXkgbGF0ZXN0IGZhaWx1cmUgcG9pbnQgYW5kIHRoZW4ganVtcCB0byBmb2xsb3dpbmcKKysgICAgICAgICAgIHR3by1ieXRlIHJlbGF0aXZlIGFkZHJlc3MuICAqLworKyAgICAgICAgLyogaWZkZWYgTUJTX1NVUFBPUlQsIHRoZSBzaXplIG9mIGFkZHJlc3MgaXMgMS4gICovCisrICBwb3BfZmFpbHVyZV9qdW1wLAorKworKyAgICAgICAgLyogQ2hhbmdlIHRvIHBvcF9mYWlsdXJlX2p1bXAgaWYga25vdyB3b24ndCBoYXZlIHRvIGJhY2t0cmFjayB0bworKyAgICAgICAgICAgbWF0Y2g7IG90aGVyd2lzZSBjaGFuZ2UgdG8ganVtcC4gIFRoaXMgaXMgdXNlZCB0byBqdW1wCisrICAgICAgICAgICBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSByZXBlYXQuICBJZiB3aGF0IGZvbGxvd3MgdGhpcyBqdW1wCisrICAgICAgICAgICBjbGVhcmx5IHdvbid0IG1hdGNoIHdoYXQgdGhlIHJlcGVhdCBkb2VzLCBzdWNoIHRoYXQgd2UgY2FuIGJlCisrICAgICAgICAgICBzdXJlIHRoYXQgdGhlcmUgaXMgbm8gdXNlIGJhY2t0cmFja2luZyBvdXQgb2YgcmVwZXRpdGlvbnMKKysgICAgICAgICAgIGFscmVhZHkgbWF0Y2hlZCwgdGhlbiB3ZSBjaGFuZ2UgaXQgdG8gYSBwb3BfZmFpbHVyZV9qdW1wLgorKyAgICAgICAgICAgRm9sbG93ZWQgYnkgdHdvLWJ5dGUgYWRkcmVzcy4gICovCisrICAgICAgICAvKiBpZmRlZiBNQlNfU1VQUE9SVCwgdGhlIHNpemUgb2YgYWRkcmVzcyBpcyAxLiAgKi8KKysgIG1heWJlX3BvcF9qdW1wLAorKworKyAgICAgICAgLyogSnVtcCB0byBmb2xsb3dpbmcgdHdvLWJ5dGUgYWRkcmVzcywgYW5kIHB1c2ggYSBkdW1teSBmYWlsdXJlCisrICAgICAgICAgICBwb2ludC4gVGhpcyBmYWlsdXJlIHBvaW50IHdpbGwgYmUgdGhyb3duIGF3YXkgaWYgYW4gYXR0ZW1wdAorKyAgICAgICAgICAgaXMgbWFkZSB0byB1c2UgaXQgZm9yIGEgZmFpbHVyZS4gIEEgYCsnIGNvbnN0cnVjdCBtYWtlcyB0aGlzCisrICAgICAgICAgICBiZWZvcmUgdGhlIGZpcnN0IHJlcGVhdC4gIEFsc28gdXNlZCBhcyBhbiBpbnRlcm1lZGlhcnkga2luZAorKyAgICAgICAgICAgb2YganVtcCB3aGVuIGNvbXBpbGluZyBhbiBhbHRlcm5hdGl2ZS4gICovCisrICAgICAgICAvKiBpZmRlZiBNQlNfU1VQUE9SVCwgdGhlIHNpemUgb2YgYWRkcmVzcyBpcyAxLiAgKi8KKysgIGR1bW15X2ZhaWx1cmVfanVtcCwKKysKKysJLyogUHVzaCBhIGR1bW15IGZhaWx1cmUgcG9pbnQgYW5kIGNvbnRpbnVlLiAgVXNlZCBhdCB0aGUgZW5kIG9mCisrCSAgIGFsdGVybmF0aXZlcy4gICovCisrICBwdXNoX2R1bW15X2ZhaWx1cmUsCisrCisrICAgICAgICAvKiBGb2xsb3dlZCBieSB0d28tYnl0ZSByZWxhdGl2ZSBhZGRyZXNzIGFuZCB0d28tYnl0ZSBudW1iZXIgbi4KKysgICAgICAgICAgIEFmdGVyIG1hdGNoaW5nIE4gdGltZXMsIGp1bXAgdG8gdGhlIGFkZHJlc3MgdXBvbiBmYWlsdXJlLiAgKi8KKysgICAgICAgIC8qIGlmZGVmIE1CU19TVVBQT1JULCB0aGUgc2l6ZSBvZiBhZGRyZXNzIGlzIDEuICAqLworKyAgc3VjY2VlZF9uLAorKworKyAgICAgICAgLyogRm9sbG93ZWQgYnkgdHdvLWJ5dGUgcmVsYXRpdmUgYWRkcmVzcywgYW5kIHR3by1ieXRlIG51bWJlciBuLgorKyAgICAgICAgICAgSnVtcCB0byB0aGUgYWRkcmVzcyBOIHRpbWVzLCB0aGVuIGZhaWwuICAqLworKyAgICAgICAgLyogaWZkZWYgTUJTX1NVUFBPUlQsIHRoZSBzaXplIG9mIGFkZHJlc3MgaXMgMS4gICovCisrICBqdW1wX24sCisrCisrICAgICAgICAvKiBTZXQgdGhlIGZvbGxvd2luZyB0d28tYnl0ZSByZWxhdGl2ZSBhZGRyZXNzIHRvIHRoZQorKyAgICAgICAgICAgc3Vic2VxdWVudCB0d28tYnl0ZSBudW1iZXIuICBUaGUgYWRkcmVzcyAqaW5jbHVkZXMqIHRoZSB0d28KKysgICAgICAgICAgIGJ5dGVzIG9mIG51bWJlci4gICovCisrICAgICAgICAvKiBpZmRlZiBNQlNfU1VQUE9SVCwgdGhlIHNpemUgb2YgYWRkcmVzcyBpcyAxLiAgKi8KKysgIHNldF9udW1iZXJfYXQsCisrCisrICB3b3JkY2hhciwJLyogTWF0Y2hlcyBhbnkgd29yZC1jb25zdGl0dWVudCBjaGFyYWN0ZXIuICAqLworKyAgbm90d29yZGNoYXIsCS8qIE1hdGNoZXMgYW55IGNoYXIgdGhhdCBpcyBub3QgYSB3b3JkLWNvbnN0aXR1ZW50LiAgKi8KKysKKysgIHdvcmRiZWcsCS8qIFN1Y2NlZWRzIGlmIGF0IHdvcmQgYmVnaW5uaW5nLiAgKi8KKysgIHdvcmRlbmQsCS8qIFN1Y2NlZWRzIGlmIGF0IHdvcmQgZW5kLiAgKi8KKysKKysgIHdvcmRib3VuZCwJLyogU3VjY2VlZHMgaWYgYXQgYSB3b3JkIGJvdW5kYXJ5LiAgKi8KKysgIG5vdHdvcmRib3VuZAkvKiBTdWNjZWVkcyBpZiBub3QgYXQgYSB3b3JkIGJvdW5kYXJ5LiAgKi8KKysKKysjIGlmZGVmIGVtYWNzCisrICAsYmVmb3JlX2RvdCwJLyogU3VjY2VlZHMgaWYgYmVmb3JlIHBvaW50LiAgKi8KKysgIGF0X2RvdCwJLyogU3VjY2VlZHMgaWYgYXQgcG9pbnQuICAqLworKyAgYWZ0ZXJfZG90LAkvKiBTdWNjZWVkcyBpZiBhZnRlciBwb2ludC4gICovCisrCisrCS8qIE1hdGNoZXMgYW55IGNoYXJhY3RlciB3aG9zZSBzeW50YXggaXMgc3BlY2lmaWVkLiAgRm9sbG93ZWQgYnkKKysgICAgICAgICAgIGEgYnl0ZSB3aGljaCBjb250YWlucyBhIHN5bnRheCBjb2RlLCBlLmcuLCBTd29yZC4gICovCisrICBzeW50YXhzcGVjLAorKworKwkvKiBNYXRjaGVzIGFueSBjaGFyYWN0ZXIgd2hvc2Ugc3ludGF4IGlzIG5vdCB0aGF0IHNwZWNpZmllZC4gICovCisrICBub3RzeW50YXhzcGVjCisrIyBlbmRpZiAvKiBlbWFjcyAqLworK30gcmVfb3Bjb2RlX3Q7CisrI2VuZGlmIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrDAorKworKyNpZmRlZiBCWVRFCisrIyBkZWZpbmUgQ0hBUl9UIGNoYXIKKysjIGRlZmluZSBVQ0hBUl9UIHVuc2lnbmVkIGNoYXIKKysjIGRlZmluZSBDT01QSUxFRF9CVUZGRVJfVkFSIGJ1ZnAtPmJ1ZmZlcgorKyMgZGVmaW5lIE9GRlNFVF9BRERSRVNTX1NJWkUgMgorKyMgZGVmaW5lIFBSRUZJWChuYW1lKSBieXRlXyMjbmFtZQorKyMgZGVmaW5lIEFSR19QUkVGSVgobmFtZSkgbmFtZQorKyMgZGVmaW5lIFBVVF9DSEFSKGMpIHB1dGNoYXIgKGMpCisrIyBpbmNsdWRlIDxsb2NhbGUvd2VpZ2h0Lmg+CisrIyBkZWZpbmUgRklORElEWCBmaW5kaWR4CisrI2Vsc2UKKysjIGlmZGVmIFdDSEFSCisrIyAgZGVmaW5lIENIQVJfVCB3Y2hhcl90CisrIyAgZGVmaW5lIFVDSEFSX1Qgd2NoYXJfdAorKyMgIGRlZmluZSBDT01QSUxFRF9CVUZGRVJfVkFSIHdjX2J1ZmZlcgorKyMgIGRlZmluZSBPRkZTRVRfQUREUkVTU19TSVpFIDEgLyogdGhlIHNpemUgd2hpY2ggU1RPUkVfTlVNQkVSIG1hY3JvIHVzZSAqLworKyMgIGRlZmluZSBDSEFSX0NMQVNTX1NJWkUgKChfX2FsaWdub2ZfXyh3Y3R5cGVfdCkrc2l6ZW9mKHdjdHlwZV90KSkvc2l6ZW9mKENIQVJfVCkrMSkKKysjICBkZWZpbmUgUFJFRklYKG5hbWUpIHdjc18jI25hbWUKKysjICBkZWZpbmUgQVJHX1BSRUZJWChuYW1lKSBjIyNuYW1lCisrLyogU2hvdWxkIHdlIHVzZSB3aWRlIHN0cmVhbT8/ICAqLworKyMgIGRlZmluZSBQVVRfQ0hBUihjKSBwcmludGYgKCIlQyIsIGMpOworKyMgIGRlZmluZSBUUlVFIDEKKysjICBkZWZpbmUgRkFMU0UgMAorKyMgIGRlZmluZSBmaW5kaWR4IGZpbmRpZHh3YworKyMgIGluY2x1ZGUgPGxvY2FsZS93ZWlnaHR3Yy5oPgorKyMgIHVuZGVmIGZpbmRpZHgKKysjICBkZWZpbmUgRklORElEWCBmaW5kaWR4d2MKKysjIGVsc2UKKysjICBpZmRlZiBNQlNfU1VQUE9SVAorKyMgICBkZWZpbmUgV0NIQVIKKysjICAgZGVmaW5lIElOU0lERV9SRUNVUlNJT04KKysjICAgaW5jbHVkZSAieHJlZ2V4LmMiCisrIyAgIHVuZGVmIElOU0lERV9SRUNVUlNJT04KKysjICBlbmRpZgorKyMgIGRlZmluZSBCWVRFCisrIyAgZGVmaW5lIElOU0lERV9SRUNVUlNJT04KKysjICBpbmNsdWRlICJ4cmVnZXguYyIKKysjICB1bmRlZiBJTlNJREVfUkVDVVJTSU9OCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpZmRlZiBJTlNJREVfUkVDVVJTSU9OCisrLyogQ29tbW9uIG9wZXJhdGlvbnMgb24gdGhlIGNvbXBpbGVkIHBhdHRlcm4uICAqLworKworKy8qIFN0b3JlIE5VTUJFUiBpbiB0d28gY29udGlndW91cyBieXRlcyBzdGFydGluZyBhdCBERVNUSU5BVElPTi4gICovCisrLyogaWZkZWYgTUJTX1NVUFBPUlQsIHdlIHN0b3JlIE5VTUJFUiBpbiAxIGVsZW1lbnQuICAqLworKworKyMgaWZkZWYgV0NIQVIKKysjICBkZWZpbmUgU1RPUkVfTlVNQkVSKGRlc3RpbmF0aW9uLCBudW1iZXIpCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgICooZGVzdGluYXRpb24pID0gKFVDSEFSX1QpKG51bWJlcik7CQkJCVwKKysgIH0gd2hpbGUgKDApCisrIyBlbHNlIC8qIEJZVEUgKi8KKysjICBkZWZpbmUgU1RPUkVfTlVNQkVSKGRlc3RpbmF0aW9uLCBudW1iZXIpCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIChkZXN0aW5hdGlvbilbMF0gPSAobnVtYmVyKSAmIDAzNzc7CQkJCQlcCisrICAgIChkZXN0aW5hdGlvbilbMV0gPSAobnVtYmVyKSA+PiA4OwkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysjIGVuZGlmIC8qIFdDSEFSICovCisrCisrLyogU2FtZSBhcyBTVE9SRV9OVU1CRVIsIGV4Y2VwdCBpbmNyZW1lbnQgREVTVElOQVRJT04gdG8KKysgICB0aGUgYnl0ZSBhZnRlciB3aGVyZSB0aGUgbnVtYmVyIGlzIHN0b3JlZC4gIFRoZXJlZm9yZSwgREVTVElOQVRJT04KKysgICBtdXN0IGJlIGFuIGx2YWx1ZS4gICovCisrLyogaWZkZWYgTUJTX1NVUFBPUlQsIHdlIHN0b3JlIE5VTUJFUiBpbiAxIGVsZW1lbnQuICAqLworKworKyMgZGVmaW5lIFNUT1JFX05VTUJFUl9BTkRfSU5DUihkZXN0aW5hdGlvbiwgbnVtYmVyKQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIFNUT1JFX05VTUJFUiAoZGVzdGluYXRpb24sIG51bWJlcik7CQkJCQlcCisrICAgIChkZXN0aW5hdGlvbikgKz0gT0ZGU0VUX0FERFJFU1NfU0laRTsJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysKKysvKiBQdXQgaW50byBERVNUSU5BVElPTiBhIG51bWJlciBzdG9yZWQgaW4gdHdvIGNvbnRpZ3VvdXMgYnl0ZXMgc3RhcnRpbmcKKysgICBhdCBTT1VSQ0UuICAqLworKy8qIGlmZGVmIE1CU19TVVBQT1JULCB3ZSBzdG9yZSBOVU1CRVIgaW4gMSBlbGVtZW50LiAgKi8KKysKKysjIGlmZGVmIFdDSEFSCisrIyAgZGVmaW5lIEVYVFJBQ1RfTlVNQkVSKGRlc3RpbmF0aW9uLCBzb3VyY2UpCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIChkZXN0aW5hdGlvbikgPSAqKHNvdXJjZSk7CQkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysjIGVsc2UgLyogQllURSAqLworKyMgIGRlZmluZSBFWFRSQUNUX05VTUJFUihkZXN0aW5hdGlvbiwgc291cmNlKQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICAoZGVzdGluYXRpb24pID0gKihzb3VyY2UpICYgMDM3NzsJCQkJCVwKKysgICAgKGRlc3RpbmF0aW9uKSArPSBTSUdOX0VYVEVORF9DSEFSICgqKChzb3VyY2UpICsgMSkpIDw8IDg7CQlcCisrICB9IHdoaWxlICgwKQorKyMgZW5kaWYKKysKKysjIGlmZGVmIERFQlVHCisrc3RhdGljIHZvaWQgUFJFRklYKGV4dHJhY3RfbnVtYmVyKSAoaW50ICpkZXN0LCBVQ0hBUl9UICpzb3VyY2UpOworK3N0YXRpYyB2b2lkCisrUFJFRklYKGV4dHJhY3RfbnVtYmVyKSAoaW50ICpkZXN0LCBVQ0hBUl9UICpzb3VyY2UpCisreworKyMgIGlmZGVmIFdDSEFSCisrICAqZGVzdCA9ICpzb3VyY2U7CisrIyAgZWxzZSAvKiBCWVRFICovCisrICBpbnQgdGVtcCA9IFNJR05fRVhURU5EX0NIQVIgKCooc291cmNlICsgMSkpOworKyAgKmRlc3QgPSAqc291cmNlICYgMDM3NzsKKysgICpkZXN0ICs9IHRlbXAgPDwgODsKKysjICBlbmRpZgorK30KKysKKysjICBpZm5kZWYgRVhUUkFDVF9NQUNST1MgLyogVG8gZGVidWcgdGhlIG1hY3Jvcy4gICovCisrIyAgIHVuZGVmIEVYVFJBQ1RfTlVNQkVSCisrIyAgIGRlZmluZSBFWFRSQUNUX05VTUJFUihkZXN0LCBzcmMpIFBSRUZJWChleHRyYWN0X251bWJlcikgKCZkZXN0LCBzcmMpCisrIyAgZW5kaWYgLyogbm90IEVYVFJBQ1RfTUFDUk9TICovCisrCisrIyBlbmRpZiAvKiBERUJVRyAqLworKworKy8qIFNhbWUgYXMgRVhUUkFDVF9OVU1CRVIsIGV4Y2VwdCBpbmNyZW1lbnQgU09VUkNFIHRvIGFmdGVyIHRoZSBudW1iZXIuCisrICAgU09VUkNFIG11c3QgYmUgYW4gbHZhbHVlLiAgKi8KKysKKysjIGRlZmluZSBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUihkZXN0aW5hdGlvbiwgc291cmNlKQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIEVYVFJBQ1RfTlVNQkVSIChkZXN0aW5hdGlvbiwgc291cmNlKTsJCQkJXAorKyAgICAoc291cmNlKSArPSBPRkZTRVRfQUREUkVTU19TSVpFOyAJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrCisrIyBpZmRlZiBERUJVRworK3N0YXRpYyB2b2lkIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKGludCAqZGVzdGluYXRpb24sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNIQVJfVCAqKnNvdXJjZSk7Cisrc3RhdGljIHZvaWQKKytQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpIChpbnQgKmRlc3RpbmF0aW9uLCBVQ0hBUl9UICoqc291cmNlKQorK3sKKysgIFBSRUZJWChleHRyYWN0X251bWJlcikgKGRlc3RpbmF0aW9uLCAqc291cmNlKTsKKysgICpzb3VyY2UgKz0gT0ZGU0VUX0FERFJFU1NfU0laRTsKKyt9CisrCisrIyAgaWZuZGVmIEVYVFJBQ1RfTUFDUk9TCisrIyAgIHVuZGVmIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSCisrIyAgIGRlZmluZSBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUihkZXN0LCBzcmMpIFwKKysgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZkZXN0LCAmc3JjKQorKyMgIGVuZGlmIC8qIG5vdCBFWFRSQUNUX01BQ1JPUyAqLworKworKyMgZW5kaWYgLyogREVCVUcgKi8KKysKKysMCisrCisrLyogSWYgREVCVUcgaXMgZGVmaW5lZCwgUmVnZXggcHJpbnRzIG1hbnkgdm9sdW1pbm91cyBtZXNzYWdlcyBhYm91dCB3aGF0CisrICAgaXQgaXMgZG9pbmcgKGlmIHRoZSB2YXJpYWJsZSBgZGVidWcnIGlzIG5vbnplcm8pLiAgSWYgbGlua2VkIHdpdGggdGhlCisrICAgbWFpbiBwcm9ncmFtIGluIGBpcmVnZXguYycsIHlvdSBjYW4gZW50ZXIgcGF0dGVybnMgYW5kIHN0cmluZ3MKKysgICBpbnRlcmFjdGl2ZWx5LiAgQW5kIGlmIGxpbmtlZCB3aXRoIHRoZSBtYWluIHByb2dyYW0gaW4gYG1haW4uYycgYW5kCisrICAgdGhlIG90aGVyIHRlc3QgZmlsZXMsIHlvdSBjYW4gcnVuIHRoZSBhbHJlYWR5LXdyaXR0ZW4gdGVzdHMuICAqLworKworKyMgaWZkZWYgREVCVUcKKysKKysjICBpZm5kZWYgREVGSU5FRF9PTkNFCisrCisrLyogV2UgdXNlIHN0YW5kYXJkIEkvTyBmb3IgZGVidWdnaW5nLiAgKi8KKysjICAgaW5jbHVkZSA8c3RkaW8uaD4KKysKKysvKiBJdCBpcyB1c2VmdWwgdG8gdGVzdCB0aGluZ3MgdGhhdCBgYG11c3QnJyBiZSB0cnVlIHdoZW4gZGVidWdnaW5nLiAgKi8KKysjICAgaW5jbHVkZSA8YXNzZXJ0Lmg+CisrCisrc3RhdGljIGludCBkZWJ1ZzsKKysKKysjICAgZGVmaW5lIERFQlVHX1NUQVRFTUVOVChlKSBlCisrIyAgIGRlZmluZSBERUJVR19QUklOVDEoeCkgaWYgKGRlYnVnKSBwcmludGYgKHgpCisrIyAgIGRlZmluZSBERUJVR19QUklOVDIoeDEsIHgyKSBpZiAoZGVidWcpIHByaW50ZiAoeDEsIHgyKQorKyMgICBkZWZpbmUgREVCVUdfUFJJTlQzKHgxLCB4MiwgeDMpIGlmIChkZWJ1ZykgcHJpbnRmICh4MSwgeDIsIHgzKQorKyMgICBkZWZpbmUgREVCVUdfUFJJTlQ0KHgxLCB4MiwgeDMsIHg0KSBpZiAoZGVidWcpIHByaW50ZiAoeDEsIHgyLCB4MywgeDQpCisrIyAgZW5kaWYgLyogbm90IERFRklORURfT05DRSAqLworKworKyMgIGRlZmluZSBERUJVR19QUklOVF9DT01QSUxFRF9QQVRURVJOKHAsIHMsIGUpIAkJCVwKKysgIGlmIChkZWJ1ZykgUFJFRklYKHByaW50X3BhcnRpYWxfY29tcGlsZWRfcGF0dGVybikgKHMsIGUpCisrIyAgZGVmaW5lIERFQlVHX1BSSU5UX0RPVUJMRV9TVFJJTkcodywgczEsIHN6MSwgczIsIHN6MikJCVwKKysgIGlmIChkZWJ1ZykgUFJFRklYKHByaW50X2RvdWJsZV9zdHJpbmcpICh3LCBzMSwgc3oxLCBzMiwgc3oyKQorKworKworKy8qIFByaW50IHRoZSBmYXN0bWFwIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0uICAqLworKworKyMgIGlmbmRlZiBERUZJTkVEX09OQ0UKKyt2b2lkCisrcHJpbnRfZmFzdG1hcCAoY2hhciAqZmFzdG1hcCkKKyt7CisrICB1bnNpZ25lZCB3YXNfYV9yYW5nZSA9IDA7CisrICB1bnNpZ25lZCBpID0gMDsKKysKKysgIHdoaWxlIChpIDwgKDEgPDwgQllURVdJRFRIKSkKKysgICAgeworKyAgICAgIGlmIChmYXN0bWFwW2krK10pCisrCXsKKysJICB3YXNfYV9yYW5nZSA9IDA7CisrICAgICAgICAgIHB1dGNoYXIgKGkgLSAxKTsKKysgICAgICAgICAgd2hpbGUgKGkgPCAoMSA8PCBCWVRFV0lEVEgpICAmJiAgZmFzdG1hcFtpXSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICB3YXNfYV9yYW5nZSA9IDE7CisrICAgICAgICAgICAgICBpKys7CisrICAgICAgICAgICAgfQorKwkgIGlmICh3YXNfYV9yYW5nZSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBwcmludGYgKCItIik7CisrICAgICAgICAgICAgICBwdXRjaGFyIChpIC0gMSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9CisrICBwdXRjaGFyICgnXG4nKTsKKyt9CisrIyAgZW5kaWYgLyogbm90IERFRklORURfT05DRSAqLworKworKworKy8qIFByaW50IGEgY29tcGlsZWQgcGF0dGVybiBzdHJpbmcgaW4gaHVtYW4tcmVhZGFibGUgZm9ybSwgc3RhcnRpbmcgYXQKKysgICB0aGUgU1RBUlQgcG9pbnRlciBpbnRvIGl0IGFuZCBlbmRpbmcganVzdCBiZWZvcmUgdGhlIHBvaW50ZXIgRU5ELiAgKi8KKysKKyt2b2lkCisrUFJFRklYKHByaW50X3BhcnRpYWxfY29tcGlsZWRfcGF0dGVybikgKFVDSEFSX1QgKnN0YXJ0LCBVQ0hBUl9UICplbmQpCisreworKyAgaW50IG1jbnQsIG1jbnQyOworKyAgVUNIQVJfVCAqcDE7CisrICBVQ0hBUl9UICpwID0gc3RhcnQ7CisrICBVQ0hBUl9UICpwZW5kID0gZW5kOworKworKyAgaWYgKHN0YXJ0ID09IE5VTEwpCisrICAgIHsKKysgICAgICBwcmludGYgKCIobnVsbClcbiIpOworKyAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgLyogTG9vcCBvdmVyIHBhdHRlcm4gY29tbWFuZHMuICAqLworKyAgd2hpbGUgKHAgPCBwZW5kKQorKyAgICB7CisrIyAgaWZkZWYgX0xJQkMKKysgICAgICBwcmludGYgKCIldGQ6XHQiLCBwIC0gc3RhcnQpOworKyMgIGVsc2UKKysgICAgICBwcmludGYgKCIlbGQ6XHQiLCAobG9uZyBpbnQpIChwIC0gc3RhcnQpKTsKKysjICBlbmRpZgorKworKyAgICAgIHN3aXRjaCAoKHJlX29wY29kZV90KSAqcCsrKQorKwl7CisrICAgICAgICBjYXNlIG5vX29wOgorKyAgICAgICAgICBwcmludGYgKCIvbm9fb3AiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2UgZXhhY3RuOgorKwkgIG1jbnQgPSAqcCsrOworKyAgICAgICAgICBwcmludGYgKCIvZXhhY3RuLyVkIiwgbWNudCk7CisrICAgICAgICAgIGRvCisrCSAgICB7CisrICAgICAgICAgICAgICBwdXRjaGFyICgnLycpOworKwkgICAgICBQVVRfQ0hBUiAoKnArKyk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICB3aGlsZSAoLS1tY250KTsKKysgICAgICAgICAgYnJlYWs7CisrCisrIyAgaWZkZWYgTUJTX1NVUFBPUlQKKysJY2FzZSBleGFjdG5fYmluOgorKwkgIG1jbnQgPSAqcCsrOworKwkgIHByaW50ZiAoIi9leGFjdG5fYmluLyVkIiwgbWNudCk7CisrICAgICAgICAgIGRvCisrCSAgICB7CisrCSAgICAgIHByaW50ZigiLyVseCIsIChsb25nIGludCkgKnArKyk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICB3aGlsZSAoLS1tY250KTsKKysgICAgICAgICAgYnJlYWs7CisrIyAgZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysKKysJY2FzZSBzdGFydF9tZW1vcnk6CisrICAgICAgICAgIG1jbnQgPSAqcCsrOworKyAgICAgICAgICBwcmludGYgKCIvc3RhcnRfbWVtb3J5LyVkLyVsZCIsIG1jbnQsIChsb25nIGludCkgKnArKyk7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIHN0b3BfbWVtb3J5OgorKyAgICAgICAgICBtY250ID0gKnArKzsKKysJICBwcmludGYgKCIvc3RvcF9tZW1vcnkvJWQvJWxkIiwgbWNudCwgKGxvbmcgaW50KSAqcCsrKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2UgZHVwbGljYXRlOgorKwkgIHByaW50ZiAoIi9kdXBsaWNhdGUvJWxkIiwgKGxvbmcgaW50KSAqcCsrKTsKKysJICBicmVhazsKKysKKysJY2FzZSBhbnljaGFyOgorKwkgIHByaW50ZiAoIi9hbnljaGFyIik7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgY2hhcnNldDoKKysgICAgICAgIGNhc2UgY2hhcnNldF9ub3Q6CisrICAgICAgICAgIHsKKysjICBpZmRlZiBXQ0hBUgorKwkgICAgaW50IGksIGxlbmd0aDsKKysJICAgIHdjaGFyX3QgKndvcmtwID0gcDsKKysJICAgIHByaW50ZiAoIi9jaGFyc2V0IFslcyIsCisrCSAgICAgICAgICAgIChyZV9vcGNvZGVfdCkgKih3b3JrcCAtIDEpID09IGNoYXJzZXRfbm90ID8gIl4iIDogIiIpOworKwkgICAgcCArPSA1OworKwkgICAgbGVuZ3RoID0gKndvcmtwKys7IC8qIHRoZSBsZW5ndGggb2YgY2hhcl9jbGFzc2VzICovCisrCSAgICBmb3IgKGk9MCA7IGk8bGVuZ3RoIDsgaSsrKQorKwkgICAgICBwcmludGYoIls6JWx4Ol0iLCAobG9uZyBpbnQpICpwKyspOworKwkgICAgbGVuZ3RoID0gKndvcmtwKys7IC8qIHRoZSBsZW5ndGggb2YgY29sbGF0aW5nX3N5bWJvbCAqLworKwkgICAgZm9yIChpPTAgOyBpPGxlbmd0aCA7KQorKwkgICAgICB7CisrCQlwcmludGYoIlsuIik7CisrCQl3aGlsZSgqcCAhPSAwKQorKwkJICBQVVRfQ0hBUigoaSsrLCpwKyspKTsKKysJCWkrKyxwKys7CisrCQlwcmludGYoIi5dIik7CisrCSAgICAgIH0KKysJICAgIGxlbmd0aCA9ICp3b3JrcCsrOyAvKiB0aGUgbGVuZ3RoIG9mIGVxdWl2YWxlbmNlX2NsYXNzICovCisrCSAgICBmb3IgKGk9MCA7IGk8bGVuZ3RoIDspCisrCSAgICAgIHsKKysJCXByaW50ZigiWz0iKTsKKysJCXdoaWxlKCpwICE9IDApCisrCQkgIFBVVF9DSEFSKChpKyssKnArKykpOworKwkJaSsrLHArKzsKKysJCXByaW50ZigiPV0iKTsKKysJICAgICAgfQorKwkgICAgbGVuZ3RoID0gKndvcmtwKys7IC8qIHRoZSBsZW5ndGggb2YgY2hhcl9yYW5nZSAqLworKwkgICAgZm9yIChpPTAgOyBpPGxlbmd0aCA7IGkrKykKKysJICAgICAgeworKwkJd2NoYXJfdCByYW5nZV9zdGFydCA9ICpwKys7CisrCQl3Y2hhcl90IHJhbmdlX2VuZCA9ICpwKys7CisrCQlwcmludGYoIiVDLSVDIiwgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCk7CisrCSAgICAgIH0KKysJICAgIGxlbmd0aCA9ICp3b3JrcCsrOyAvKiB0aGUgbGVuZ3RoIG9mIGNoYXIgKi8KKysJICAgIGZvciAoaT0wIDsgaTxsZW5ndGggOyBpKyspCisrCSAgICAgIHByaW50ZigiJUMiLCAqcCsrKTsKKysJICAgIHB1dGNoYXIgKCddJyk7CisrIyAgZWxzZQorKyAgICAgICAgICAgIHJlZ2lzdGVyIGludCBjLCBsYXN0ID0gLTEwMDsKKysJICAgIHJlZ2lzdGVyIGludCBpbl9yYW5nZSA9IDA7CisrCisrCSAgICBwcmludGYgKCIvY2hhcnNldCBbJXMiLAorKwkgICAgICAgICAgICAocmVfb3Bjb2RlX3QpICoocCAtIDEpID09IGNoYXJzZXRfbm90ID8gIl4iIDogIiIpOworKworKyAgICAgICAgICAgIGFzc2VydCAocCArICpwIDwgcGVuZCk7CisrCisrICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IDI1NjsgYysrKQorKwkgICAgICBpZiAoYyAvIDggPCAqcAorKwkJICAmJiAocFsxICsgKGMvOCldICYgKDEgPDwgKGMgJSA4KSkpKQorKwkJeworKwkJICAvKiBBcmUgd2Ugc3RhcnRpbmcgYSByYW5nZT8gICovCisrCQkgIGlmIChsYXN0ICsgMSA9PSBjICYmICEgaW5fcmFuZ2UpCisrCQkgICAgeworKwkJICAgICAgcHV0Y2hhciAoJy0nKTsKKysJCSAgICAgIGluX3JhbmdlID0gMTsKKysJCSAgICB9CisrCQkgIC8qIEhhdmUgd2UgYnJva2VuIGEgcmFuZ2U/ICAqLworKwkJICBlbHNlIGlmIChsYXN0ICsgMSAhPSBjICYmIGluX3JhbmdlKQorKyAgICAgICAgICAgICAgeworKwkJICAgICAgcHV0Y2hhciAobGFzdCk7CisrCQkgICAgICBpbl9yYW5nZSA9IDA7CisrCQkgICAgfQorKworKwkJICBpZiAoISBpbl9yYW5nZSkKKysJCSAgICBwdXRjaGFyIChjKTsKKysKKysJCSAgbGFzdCA9IGM7CisrICAgICAgICAgICAgICB9CisrCisrCSAgICBpZiAoaW5fcmFuZ2UpCisrCSAgICAgIHB1dGNoYXIgKGxhc3QpOworKworKwkgICAgcHV0Y2hhciAoJ10nKTsKKysKKysJICAgIHAgKz0gMSArICpwOworKyMgIGVuZGlmIC8qIFdDSEFSICovCisrCSAgfQorKwkgIGJyZWFrOworKworKwljYXNlIGJlZ2xpbmU6CisrCSAgcHJpbnRmICgiL2JlZ2xpbmUiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2UgZW5kbGluZToKKysgICAgICAgICAgcHJpbnRmICgiL2VuZGxpbmUiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2Ugb25fZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKyMgIGlmZGVmIF9MSUJDCisrICAJICBwcmludGYgKCIvb25fZmFpbHVyZV9qdW1wIHRvICV0ZCIsIHAgKyBtY250IC0gc3RhcnQpOworKyMgIGVsc2UKKysgIAkgIHByaW50ZiAoIi9vbl9mYWlsdXJlX2p1bXAgdG8gJWxkIiwgKGxvbmcgaW50KSAocCArIG1jbnQgLSBzdGFydCkpOworKyMgIGVuZGlmCisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIG9uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcDoKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysjICBpZmRlZiBfTElCQworKyAgCSAgcHJpbnRmICgiL29uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcCB0byAldGQiLCBwICsgbWNudCAtIHN0YXJ0KTsKKysjICBlbHNlCisrICAJICBwcmludGYgKCIvb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wIHRvICVsZCIsCisrCQkgIChsb25nIGludCkgKHAgKyBtY250IC0gc3RhcnQpKTsKKysjICBlbmRpZgorKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBkdW1teV9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrIyAgaWZkZWYgX0xJQkMKKysgIAkgIHByaW50ZiAoIi9kdW1teV9mYWlsdXJlX2p1bXAgdG8gJXRkIiwgcCArIG1jbnQgLSBzdGFydCk7CisrIyAgZWxzZQorKyAgCSAgcHJpbnRmICgiL2R1bW15X2ZhaWx1cmVfanVtcCB0byAlbGQiLCAobG9uZyBpbnQpIChwICsgbWNudCAtIHN0YXJ0KSk7CisrIyAgZW5kaWYKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2UgcHVzaF9kdW1teV9mYWlsdXJlOgorKyAgICAgICAgICBwcmludGYgKCIvcHVzaF9kdW1teV9mYWlsdXJlIik7CisrICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBtYXliZV9wb3BfanVtcDoKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysjICBpZmRlZiBfTElCQworKyAgCSAgcHJpbnRmICgiL21heWJlX3BvcF9qdW1wIHRvICV0ZCIsIHAgKyBtY250IC0gc3RhcnQpOworKyMgIGVsc2UKKysgIAkgIHByaW50ZiAoIi9tYXliZV9wb3BfanVtcCB0byAlbGQiLCAobG9uZyBpbnQpIChwICsgbWNudCAtIHN0YXJ0KSk7CisrIyAgZW5kaWYKKysJICBicmVhazsKKysKKysgICAgICAgIGNhc2UgcG9wX2ZhaWx1cmVfanVtcDoKKysJICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKyMgIGlmZGVmIF9MSUJDCisrICAJICBwcmludGYgKCIvcG9wX2ZhaWx1cmVfanVtcCB0byAldGQiLCBwICsgbWNudCAtIHN0YXJ0KTsKKysjICBlbHNlCisrICAJICBwcmludGYgKCIvcG9wX2ZhaWx1cmVfanVtcCB0byAlbGQiLCAobG9uZyBpbnQpIChwICsgbWNudCAtIHN0YXJ0KSk7CisrIyAgZW5kaWYKKysJICBicmVhazsKKysKKysgICAgICAgIGNhc2UganVtcF9wYXN0X2FsdDoKKysJICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKyMgIGlmZGVmIF9MSUJDCisrICAJICBwcmludGYgKCIvanVtcF9wYXN0X2FsdCB0byAldGQiLCBwICsgbWNudCAtIHN0YXJ0KTsKKysjICBlbHNlCisrICAJICBwcmludGYgKCIvanVtcF9wYXN0X2FsdCB0byAlbGQiLCAobG9uZyBpbnQpIChwICsgbWNudCAtIHN0YXJ0KSk7CisrIyAgZW5kaWYKKysJICBicmVhazsKKysKKysgICAgICAgIGNhc2UganVtcDoKKysJICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKyMgIGlmZGVmIF9MSUJDCisrICAJICBwcmludGYgKCIvanVtcCB0byAldGQiLCBwICsgbWNudCAtIHN0YXJ0KTsKKysjICBlbHNlCisrICAJICBwcmludGYgKCIvanVtcCB0byAlbGQiLCAobG9uZyBpbnQpIChwICsgbWNudCAtIHN0YXJ0KSk7CisrIyAgZW5kaWYKKysJICBicmVhazsKKysKKysgICAgICAgIGNhc2Ugc3VjY2VlZF9uOgorKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKwkgIHAxID0gcCArIG1jbnQ7CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250MiwgJnApOworKyMgIGlmZGVmIF9MSUJDCisrCSAgcHJpbnRmICgiL3N1Y2NlZWRfbiB0byAldGQsICVkIHRpbWVzIiwgcDEgLSBzdGFydCwgbWNudDIpOworKyMgIGVsc2UKKysJICBwcmludGYgKCIvc3VjY2VlZF9uIHRvICVsZCwgJWQgdGltZXMiLAorKwkJICAobG9uZyBpbnQpIChwMSAtIHN0YXJ0KSwgbWNudDIpOworKyMgIGVuZGlmCisrICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBqdW1wX246CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrCSAgcDEgPSBwICsgbWNudDsKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQyLCAmcCk7CisrCSAgcHJpbnRmICgiL2p1bXBfbiB0byAlZCwgJWQgdGltZXMiLCBwMSAtIHN0YXJ0LCBtY250Mik7CisrICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBzZXRfbnVtYmVyX2F0OgorKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKwkgIHAxID0gcCArIG1jbnQ7CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250MiwgJnApOworKyMgIGlmZGVmIF9MSUJDCisrCSAgcHJpbnRmICgiL3NldF9udW1iZXJfYXQgbG9jYXRpb24gJXRkIHRvICVkIiwgcDEgLSBzdGFydCwgbWNudDIpOworKyMgIGVsc2UKKysJICBwcmludGYgKCIvc2V0X251bWJlcl9hdCBsb2NhdGlvbiAlbGQgdG8gJWQiLAorKwkJICAobG9uZyBpbnQpIChwMSAtIHN0YXJ0KSwgbWNudDIpOworKyMgIGVuZGlmCisrICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSB3b3JkYm91bmQ6CisrCSAgcHJpbnRmICgiL3dvcmRib3VuZCIpOworKwkgIGJyZWFrOworKworKwljYXNlIG5vdHdvcmRib3VuZDoKKysJICBwcmludGYgKCIvbm90d29yZGJvdW5kIik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIHdvcmRiZWc6CisrCSAgcHJpbnRmICgiL3dvcmRiZWciKTsKKysJICBicmVhazsKKysKKysJY2FzZSB3b3JkZW5kOgorKwkgIHByaW50ZiAoIi93b3JkZW5kIik7CisrCSAgYnJlYWs7CisrCisrIyAgaWZkZWYgZW1hY3MKKysJY2FzZSBiZWZvcmVfZG90OgorKwkgIHByaW50ZiAoIi9iZWZvcmVfZG90Iik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIGF0X2RvdDoKKysJICBwcmludGYgKCIvYXRfZG90Iik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIGFmdGVyX2RvdDoKKysJICBwcmludGYgKCIvYWZ0ZXJfZG90Iik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIHN5bnRheHNwZWM6CisrICAgICAgICAgIHByaW50ZiAoIi9zeW50YXhzcGVjIik7CisrCSAgbWNudCA9ICpwKys7CisrCSAgcHJpbnRmICgiLyVkIiwgbWNudCk7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIG5vdHN5bnRheHNwZWM6CisrICAgICAgICAgIHByaW50ZiAoIi9ub3RzeW50YXhzcGVjIik7CisrCSAgbWNudCA9ICpwKys7CisrCSAgcHJpbnRmICgiLyVkIiwgbWNudCk7CisrCSAgYnJlYWs7CisrIyAgZW5kaWYgLyogZW1hY3MgKi8KKysKKysJY2FzZSB3b3JkY2hhcjoKKysJICBwcmludGYgKCIvd29yZGNoYXIiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2Ugbm90d29yZGNoYXI6CisrCSAgcHJpbnRmICgiL25vdHdvcmRjaGFyIik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIGJlZ2J1ZjoKKysJICBwcmludGYgKCIvYmVnYnVmIik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIGVuZGJ1ZjoKKysJICBwcmludGYgKCIvZW5kYnVmIik7CisrICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgcHJpbnRmICgiPyVsZCIsIChsb25nIGludCkgKihwLTEpKTsKKysJfQorKworKyAgICAgIHB1dGNoYXIgKCdcbicpOworKyAgICB9CisrCisrIyAgaWZkZWYgX0xJQkMKKysgIHByaW50ZiAoIiV0ZDpcdGVuZCBvZiBwYXR0ZXJuLlxuIiwgcCAtIHN0YXJ0KTsKKysjICBlbHNlCisrICBwcmludGYgKCIlbGQ6XHRlbmQgb2YgcGF0dGVybi5cbiIsIChsb25nIGludCkgKHAgLSBzdGFydCkpOworKyMgIGVuZGlmCisrfQorKworKworK3ZvaWQKKytQUkVGSVgocHJpbnRfY29tcGlsZWRfcGF0dGVybikgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCkKKyt7CisrICBVQ0hBUl9UICpidWZmZXIgPSAoVUNIQVJfVCopIGJ1ZnAtPmJ1ZmZlcjsKKysKKysgIFBSRUZJWChwcmludF9wYXJ0aWFsX2NvbXBpbGVkX3BhdHRlcm4pIChidWZmZXIsIGJ1ZmZlcgorKwkJCQkgICsgYnVmcC0+dXNlZCAvIHNpemVvZihVQ0hBUl9UKSk7CisrICBwcmludGYgKCIlbGQgYnl0ZXMgdXNlZC8lbGQgYnl0ZXMgYWxsb2NhdGVkLlxuIiwKKysJICBidWZwLT51c2VkLCBidWZwLT5hbGxvY2F0ZWQpOworKworKyAgaWYgKGJ1ZnAtPmZhc3RtYXBfYWNjdXJhdGUgJiYgYnVmcC0+ZmFzdG1hcCkKKysgICAgeworKyAgICAgIHByaW50ZiAoImZhc3RtYXA6ICIpOworKyAgICAgIHByaW50X2Zhc3RtYXAgKGJ1ZnAtPmZhc3RtYXApOworKyAgICB9CisrCisrIyAgaWZkZWYgX0xJQkMKKysgIHByaW50ZiAoInJlX25zdWI6ICVaZFx0IiwgYnVmcC0+cmVfbnN1Yik7CisrIyAgZWxzZQorKyAgcHJpbnRmICgicmVfbnN1YjogJWxkXHQiLCAobG9uZyBpbnQpIGJ1ZnAtPnJlX25zdWIpOworKyMgIGVuZGlmCisrICBwcmludGYgKCJyZWdzX2FsbG9jOiAlZFx0IiwgYnVmcC0+cmVnc19hbGxvY2F0ZWQpOworKyAgcHJpbnRmICgiY2FuX2JlX251bGw6ICVkXHQiLCBidWZwLT5jYW5fYmVfbnVsbCk7CisrICBwcmludGYgKCJuZXdsaW5lX2FuY2hvcjogJWRcbiIsIGJ1ZnAtPm5ld2xpbmVfYW5jaG9yKTsKKysgIHByaW50ZiAoIm5vX3N1YjogJWRcdCIsIGJ1ZnAtPm5vX3N1Yik7CisrICBwcmludGYgKCJub3RfYm9sOiAlZFx0IiwgYnVmcC0+bm90X2JvbCk7CisrICBwcmludGYgKCJub3RfZW9sOiAlZFx0IiwgYnVmcC0+bm90X2VvbCk7CisrICBwcmludGYgKCJzeW50YXg6ICVseFxuIiwgYnVmcC0+c3ludGF4KTsKKysgIC8qIFBlcmhhcHMgd2Ugc2hvdWxkIHByaW50IHRoZSB0cmFuc2xhdGUgdGFibGU/ICAqLworK30KKysKKysKKyt2b2lkCisrUFJFRklYKHByaW50X2RvdWJsZV9zdHJpbmcpIChjb25zdCBDSEFSX1QgKndoZXJlLCBjb25zdCBDSEFSX1QgKnN0cmluZzEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZTEsIGNvbnN0IENIQVJfVCAqc3RyaW5nMiwgaW50IHNpemUyKQorK3sKKysgIGludCB0aGlzX2NoYXI7CisrCisrICBpZiAod2hlcmUgPT0gTlVMTCkKKysgICAgcHJpbnRmICgiKG51bGwpIik7CisrICBlbHNlCisrICAgIHsKKysgICAgICBpbnQgY250OworKworKyAgICAgIGlmIChGSVJTVF9TVFJJTkdfUCAod2hlcmUpKQorKyAgICAgICAgeworKyAgICAgICAgICBmb3IgKHRoaXNfY2hhciA9IHdoZXJlIC0gc3RyaW5nMTsgdGhpc19jaGFyIDwgc2l6ZTE7IHRoaXNfY2hhcisrKQorKwkgICAgUFVUX0NIQVIgKHN0cmluZzFbdGhpc19jaGFyXSk7CisrCisrICAgICAgICAgIHdoZXJlID0gc3RyaW5nMjsKKysgICAgICAgIH0KKysKKysgICAgICBjbnQgPSAwOworKyAgICAgIGZvciAodGhpc19jaGFyID0gd2hlcmUgLSBzdHJpbmcyOyB0aGlzX2NoYXIgPCBzaXplMjsgdGhpc19jaGFyKyspCisrCXsKKysJICBQVVRfQ0hBUiAoc3RyaW5nMlt0aGlzX2NoYXJdKTsKKysJICBpZiAoKytjbnQgPiAxMDApCisrCSAgICB7CisrCSAgICAgIGZwdXRzICgiLi4uIiwgc3Rkb3V0KTsKKysJICAgICAgYnJlYWs7CisrCSAgICB9CisrCX0KKysgICAgfQorK30KKysKKysjICBpZm5kZWYgREVGSU5FRF9PTkNFCisrdm9pZAorK3ByaW50Y2hhciAoaW50IGMpCisreworKyAgcHV0YyAoYywgc3RkZXJyKTsKKyt9CisrIyAgZW5kaWYKKysKKysjIGVsc2UgLyogbm90IERFQlVHICovCisrCisrIyAgaWZuZGVmIERFRklORURfT05DRQorKyMgICB1bmRlZiBhc3NlcnQKKysjICAgZGVmaW5lIGFzc2VydChlKQorKworKyMgICBkZWZpbmUgREVCVUdfU1RBVEVNRU5UKGUpCisrIyAgIGRlZmluZSBERUJVR19QUklOVDEoeCkKKysjICAgZGVmaW5lIERFQlVHX1BSSU5UMih4MSwgeDIpCisrIyAgIGRlZmluZSBERUJVR19QUklOVDMoeDEsIHgyLCB4MykKKysjICAgZGVmaW5lIERFQlVHX1BSSU5UNCh4MSwgeDIsIHgzLCB4NCkKKysjICBlbmRpZiAvKiBub3QgREVGSU5FRF9PTkNFICovCisrIyAgZGVmaW5lIERFQlVHX1BSSU5UX0NPTVBJTEVEX1BBVFRFUk4ocCwgcywgZSkKKysjICBkZWZpbmUgREVCVUdfUFJJTlRfRE9VQkxFX1NUUklORyh3LCBzMSwgc3oxLCBzMiwgc3oyKQorKworKyMgZW5kaWYgLyogbm90IERFQlVHICovCisrCisrDAorKworKyMgaWZkZWYgV0NIQVIKKysvKiBUaGlzICBjb252ZXJ0IGEgbXVsdGlieXRlIHN0cmluZyB0byBhIHdpZGUgY2hhcmFjdGVyIHN0cmluZy4KKysgICBBbmQgd3JpdGUgdGhlaXIgY29ycmVzcG9uZGFuY2VzIHRvIG9mZnNldF9idWZmZXIoc2VlIGJlbG93KQorKyAgIGFuZCB3cml0ZSB3aGV0aGVyIGVhY2ggd2NoYXJfdCBpcyBiaW5hcnkgZGF0YSB0byBpc19iaW5hcnkuCisrICAgVGhpcyBhc3N1bWUgaW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2VzIGFzIGJpbmFyeSBkYXRhLgorKyAgIFdlIGFzc3VtZSBvZmZzZXRfYnVmZmVyIGFuZCBpc19iaW5hcnkgaXMgYWxyZWFkeSBhbGxvY2F0ZWQKKysgICBlbm91Z2ggc3BhY2UuICAqLworKworK3N0YXRpYyBzaXplX3QgY29udmVydF9tYnNfdG9fd2NzIChDSEFSX1QgKmRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYywKKysJCQkJICBzaXplX3QgbGVuLCBpbnQgKm9mZnNldF9idWZmZXIsCisrCQkJCSAgY2hhciAqaXNfYmluYXJ5KTsKKytzdGF0aWMgc2l6ZV90CisrY29udmVydF9tYnNfdG9fd2NzIChDSEFSX1QgKmRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIqc3JjLCBzaXplX3QgbGVuLAorKyAgICAgICAgICAgICAgICAgICAgaW50ICpvZmZzZXRfYnVmZmVyLCBjaGFyICppc19iaW5hcnkpCisrICAgICAvKiBJdCBob2xkIGNvcnJlc3BvbmRhbmNlcyBiZXR3ZWVuIHNyYyhjaGFyIHN0cmluZykgYW5kCisrCWRlc3Qod2NoYXJfdCBzdHJpbmcpIGZvciBvcHRpbWl6YXRpb24uCisrCWUuZy4gc3JjICA9ICJ4eHh5enoiCisrICAgICAgICAgICAgIGRlc3QgPSB7J1gnLCAnWScsICdaJ30KKysJICAgICAgKGVhY2ggInh4eCIsICJ5IiBhbmQgInp6IiByZXByZXNlbnQgb25lIG11bHRpYnl0ZSBjaGFyYWN0ZXIKKysJICAgICAgIGNvcnJlc3BvbmRpbmcgdG8gJ1gnLCAnWScgYW5kICdaJy4pCisrCSAgb2Zmc2V0X2J1ZmZlciA9IHswLCAwKzMoInh4eCIpLCAwKzMrMSgieSIpLCAwKzMrMSsyKCJ6eiIpfQorKwkgIAkgICAgICAgID0gezAsIDMsIDQsIDZ9CisrICAgICAqLworK3sKKysgIHdjaGFyX3QgKnBkZXN0ID0gZGVzdDsKKysgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzcmMgPSBzcmM7CisrICBzaXplX3Qgd2NfY291bnQgPSAwOworKworKyAgbWJzdGF0ZV90IG1iczsKKysgIGludCBpLCBjb25zdW1lZDsKKysgIHNpemVfdCBtYl9yZW1haW4gPSBsZW47CisrICBzaXplX3QgbWJfY291bnQgPSAwOworKworKyAgLyogSW5pdGlhbGl6ZSB0aGUgY29udmVyc2lvbiBzdGF0ZS4gICovCisrICBtZW1zZXQgKCZtYnMsIDAsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCisrICBvZmZzZXRfYnVmZmVyWzBdID0gMDsKKysgIGZvciggOyBtYl9yZW1haW4gPiAwIDsgKyt3Y19jb3VudCwgKytwZGVzdCwgbWJfcmVtYWluIC09IGNvbnN1bWVkLAorKwkgcHNyYyArPSBjb25zdW1lZCkKKysgICAgeworKyNpZmRlZiBfTElCQworKyAgICAgIGNvbnN1bWVkID0gX19tYnJ0b3djIChwZGVzdCwgcHNyYywgbWJfcmVtYWluLCAmbWJzKTsKKysjZWxzZQorKyAgICAgIGNvbnN1bWVkID0gbWJydG93YyAocGRlc3QsIHBzcmMsIG1iX3JlbWFpbiwgJm1icyk7CisrI2VuZGlmCisrCisrICAgICAgaWYgKGNvbnN1bWVkIDw9IDApCisrCS8qIGZhaWxlZCB0byBjb252ZXJ0LiBtYXliZSBzcmMgY29udGFpbnMgYmluYXJ5IGRhdGEuCisrCSAgIFNvIHdlIGNvbnN1bWUgMSBieXRlIG1hbnVhbHkuICAqLworKwl7CisrCSAgKnBkZXN0ID0gKnBzcmM7CisrCSAgY29uc3VtZWQgPSAxOworKwkgIGlzX2JpbmFyeVt3Y19jb3VudF0gPSBUUlVFOworKwl9CisrICAgICAgZWxzZQorKwlpc19iaW5hcnlbd2NfY291bnRdID0gRkFMU0U7CisrICAgICAgLyogSW4gc2ppcyBlbmNvZGluZywgd2UgdXNlIHllbiBzaWduIGFzIGVzY2FwZSBjaGFyYWN0ZXIgaW4KKysJIHBsYWNlIG9mIHJldmVyc2Ugc29saWR1cy4gU28gd2UgY29udmVydCAweDVjKHllbiBzaWduIGluCisrCSBzamlzKSB0byBub3QgMHhhNSh5ZW4gc2lnbiBpbiBVQ1MyKSBidXQgMHg1YyhyZXZlcnNlCisrCSBzb2xpZHVzIGluIFVDUzIpLiAgKi8KKysgICAgICBpZiAoY29uc3VtZWQgPT0gMSAmJiAoaW50KSAqcHNyYyA9PSAweDVjICYmIChpbnQpICpwZGVzdCA9PSAweGE1KQorKwkqcGRlc3QgPSAod2NoYXJfdCkgKnBzcmM7CisrCisrICAgICAgb2Zmc2V0X2J1ZmZlclt3Y19jb3VudCArIDFdID0gbWJfY291bnQgKz0gY29uc3VtZWQ7CisrICAgIH0KKysKKysgIC8qIEZpbGwgcmVtYWluIG9mIHRoZSBidWZmZXIgd2l0aCBzZW50aW5lbC4gICovCisrICBmb3IgKGkgPSB3Y19jb3VudCArIDEgOyBpIDw9IGxlbiA7IGkrKykKKysgICAgb2Zmc2V0X2J1ZmZlcltpXSA9IG1iX2NvdW50ICsgMTsKKysKKysgIHJldHVybiB3Y19jb3VudDsKKyt9CisrCisrIyBlbmRpZiAvKiBXQ0hBUiAqLworKworKyNlbHNlIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisrLyogU2V0IGJ5IGByZV9zZXRfc3ludGF4JyB0byB0aGUgY3VycmVudCByZWdleHAgc3ludGF4IHRvIHJlY29nbml6ZS4gIENhbgorKyAgIGFsc28gYmUgYXNzaWduZWQgdG8gYXJiaXRyYXJpbHk6IGVhY2ggcGF0dGVybiBidWZmZXIgc3RvcmVzIGl0cyBvd24KKysgICBzeW50YXgsIHNvIGl0IGNhbiBiZSBjaGFuZ2VkIGJldHdlZW4gcmVnZXggY29tcGlsYXRpb25zLiAgKi8KKysvKiBUaGlzIGhhcyBubyBpbml0aWFsaXplciBiZWNhdXNlIGluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBFbWFjcworKyAgIGJlY29tZSByZWFkLW9ubHkgYWZ0ZXIgZHVtcGluZy4gICovCisrcmVnX3N5bnRheF90IHJlX3N5bnRheF9vcHRpb25zOworKworKworKy8qIFNwZWNpZnkgdGhlIHByZWNpc2Ugc3ludGF4IG9mIHJlZ2V4cHMgZm9yIGNvbXBpbGF0aW9uLiAgVGhpcyBwcm92aWRlcworKyAgIGZvciBjb21wYXRpYmlsaXR5IGZvciB2YXJpb3VzIHV0aWxpdGllcyB3aGljaCBoaXN0b3JpY2FsbHkgaGF2ZQorKyAgIGRpZmZlcmVudCwgaW5jb21wYXRpYmxlIHN5bnRheGVzLgorKworKyAgIFRoZSBhcmd1bWVudCBTWU5UQVggaXMgYSBiaXQgbWFzayBjb21wcmlzZWQgb2YgdGhlIHZhcmlvdXMgYml0cworKyAgIGRlZmluZWQgaW4gcmVnZXguaC4gIFdlIHJldHVybiB0aGUgb2xkIHN5bnRheC4gICovCisrCisrcmVnX3N5bnRheF90CisrcmVfc2V0X3N5bnRheCAocmVnX3N5bnRheF90IHN5bnRheCkKKyt7CisrICByZWdfc3ludGF4X3QgcmV0ID0gcmVfc3ludGF4X29wdGlvbnM7CisrCisrICByZV9zeW50YXhfb3B0aW9ucyA9IHN5bnRheDsKKysjIGlmZGVmIERFQlVHCisrICBpZiAoc3ludGF4ICYgUkVfREVCVUcpCisrICAgIGRlYnVnID0gMTsKKysgIGVsc2UgaWYgKGRlYnVnKSAvKiB3YXMgb24gYnV0IG5vdyBpcyBub3QgKi8KKysgICAgZGVidWcgPSAwOworKyMgZW5kaWYgLyogREVCVUcgKi8KKysgIHJldHVybiByZXQ7CisrfQorKyMgaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlX3NldF9zeW50YXgsIHJlX3NldF9zeW50YXgpCisrIyBlbmRpZgorKwwKKysvKiBUaGlzIHRhYmxlIGdpdmVzIGFuIGVycm9yIG1lc3NhZ2UgZm9yIGVhY2ggb2YgdGhlIGVycm9yIGNvZGVzIGxpc3RlZAorKyAgIGluIHJlZ2V4LmguICBPYnZpb3VzbHkgdGhlIG9yZGVyIGhlcmUgaGFzIHRvIGJlIHNhbWUgYXMgdGhlcmUuCisrICAgUE9TSVggZG9lc24ndCByZXF1aXJlIHRoYXQgd2UgZG8gYW55dGhpbmcgZm9yIFJFR19OT0VSUk9SLAorKyAgIGJ1dCB3aHkgbm90IGJlIG5pY2U/ICAqLworKworK3N0YXRpYyBjb25zdCBjaGFyICpyZV9lcnJvcl9tc2dpZFtdID0KKysgIHsKKysgICAgZ2V0dGV4dF9ub29wICgiU3VjY2VzcyIpLAkvKiBSRUdfTk9FUlJPUiAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJObyBtYXRjaCIpLAkvKiBSRUdfTk9NQVRDSCAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiIpLCAvKiBSRUdfQkFEUEFUICovCisrICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgY29sbGF0aW9uIGNoYXJhY3RlciIpLCAvKiBSRUdfRUNPTExBVEUgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIpLCAvKiBSRUdfRUNUWVBFICovCisrICAgIGdldHRleHRfbm9vcCAoIlRyYWlsaW5nIGJhY2tzbGFzaCIpLCAvKiBSRUdfRUVTQ0FQRSAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIGJhY2sgcmVmZXJlbmNlIiksIC8qIFJFR19FU1VCUkVHICovCisrICAgIGdldHRleHRfbm9vcCAoIlVubWF0Y2hlZCBbIG9yIFteIiksCS8qIFJFR19FQlJBQ0sgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiVW5tYXRjaGVkICggb3IgXFwoIiksIC8qIFJFR19FUEFSRU4gKi8KKysgICAgZ2V0dGV4dF9ub29wICgiVW5tYXRjaGVkIFxceyIpLCAvKiBSRUdfRUJSQUNFICovCisrICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgY29udGVudCBvZiBcXHtcXH0iKSwgLyogUkVHX0JBREJSICovCisrICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgcmFuZ2UgZW5kIiksCS8qIFJFR19FUkFOR0UgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiTWVtb3J5IGV4aGF1c3RlZCIpLCAvKiBSRUdfRVNQQUNFICovCisrICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgcHJlY2VkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiIpLCAvKiBSRUdfQkFEUlBUICovCisrICAgIGdldHRleHRfbm9vcCAoIlByZW1hdHVyZSBlbmQgb2YgcmVndWxhciBleHByZXNzaW9uIiksIC8qIFJFR19FRU5EICovCisrICAgIGdldHRleHRfbm9vcCAoIlJlZ3VsYXIgZXhwcmVzc2lvbiB0b28gYmlnIiksIC8qIFJFR19FU0laRSAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJVbm1hdGNoZWQgKSBvciBcXCkiKSAvKiBSRUdfRVJQQVJFTiAqLworKyAgfTsKKysMCisrI2VuZGlmIC8qIElOU0lERV9SRUNVUlNJT04gKi8KKysKKysjaWZuZGVmIERFRklORURfT05DRQorKy8qIEF2b2lkaW5nIGFsbG9jYSBkdXJpbmcgbWF0Y2hpbmcsIHRvIHBsYWNhdGUgcl9hbGxvYy4gICovCisrCisrLyogRGVmaW5lIE1BVENIX01BWV9BTExPQ0FURSB1bmxlc3Mgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUKKysgICBzZWFyY2hpbmcgYW5kIG1hdGNoaW5nIGZ1bmN0aW9ucyBzaG91bGQgbm90IGNhbGwgYWxsb2NhLiAgT24gc29tZQorKyAgIHN5c3RlbXMsIGFsbG9jYSBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBtYWxsb2MsIGFuZCBpZiB3ZSdyZQorKyAgIHVzaW5nIHRoZSByZWxvY2F0aW5nIGFsbG9jYXRvciByb3V0aW5lcywgdGhlbiBtYWxsb2MgY291bGQgY2F1c2UgYQorKyAgIHJlbG9jYXRpb24sIHdoaWNoIG1pZ2h0IChpZiB0aGUgc3RyaW5ncyBiZWluZyBzZWFyY2hlZCBhcmUgaW4gdGhlCisrICAgcmFsbG9jIGhlYXApIHNoaWZ0IHRoZSBkYXRhIG91dCBmcm9tIHVuZGVybmVhdGggdGhlIHJlZ2V4cAorKyAgIHJvdXRpbmVzLgorKworKyAgIEhlcmUncyBhbm90aGVyIHJlYXNvbiB0byBhdm9pZCBhbGxvY2F0aW9uOiBFbWFjcworKyAgIHByb2Nlc3NlcyBpbnB1dCBmcm9tIFggaW4gYSBzaWduYWwgaGFuZGxlcjsgcHJvY2Vzc2luZyBYIGlucHV0IG1heQorKyAgIGNhbGwgbWFsbG9jOyBpZiBpbnB1dCBhcnJpdmVzIHdoaWxlIGEgbWF0Y2hpbmcgcm91dGluZSBpcyBjYWxsaW5nCisrICAgbWFsbG9jLCB0aGVuIHdlJ3JlIHNjcm9kLiAgQnV0IEVtYWNzIGNhbid0IGp1c3QgYmxvY2sgaW5wdXQgd2hpbGUKKysgICBjYWxsaW5nIG1hdGNoaW5nIHJvdXRpbmVzOyB0aGVuIHdlIGRvbid0IG5vdGljZSBpbnRlcnJ1cHRzIHdoZW4KKysgICB0aGV5IGNvbWUgaW4uICBTbywgRW1hY3MgYmxvY2tzIGlucHV0IGFyb3VuZCBhbGwgcmVnZXhwIGNhbGxzCisrICAgZXhjZXB0IHRoZSBtYXRjaGluZyBjYWxscywgd2hpY2ggaXQgbGVhdmVzIHVucHJvdGVjdGVkLCBpbiB0aGUKKysgICBmYWl0aCB0aGF0IHRoZXkgd2lsbCBub3QgbWFsbG9jLiAgKi8KKysKKysvKiBOb3JtYWxseSwgdGhpcyBpcyBmaW5lLiAgKi8KKysjIGRlZmluZSBNQVRDSF9NQVlfQUxMT0NBVEUKKysKKysvKiBXaGVuIHVzaW5nIEdOVSBDLCB3ZSBhcmUgbm90IFJFQUxMWSB1c2luZyB0aGUgQyBhbGxvY2EsIG5vIG1hdHRlcgorKyAgIHdoYXQgY29uZmlnLmggbWF5IHNheS4gIFNvIGRvbid0IHRha2UgcHJlY2F1dGlvbnMgZm9yIGl0LiAgKi8KKysjIGlmZGVmIF9fR05VQ19fCisrIyAgdW5kZWYgQ19BTExPQ0EKKysjIGVuZGlmCisrCisrLyogVGhlIG1hdGNoIHJvdXRpbmVzIG1heSBub3QgYWxsb2NhdGUgaWYgKDEpIHRoZXkgd291bGQgZG8gaXQgd2l0aCBtYWxsb2MKKysgICBhbmQgKDIpIGl0J3Mgbm90IHNhZmUgZm9yIHRoZW0gdG8gdXNlIG1hbGxvYy4KKysgICBOb3RlIHRoYXQgaWYgUkVMX0FMTE9DIGlzIGRlZmluZWQsIG1hdGNoaW5nIHdvdWxkIG5vdCB1c2UgbWFsbG9jIGZvciB0aGUKKysgICBmYWlsdXJlIHN0YWNrLCBidXQgd2Ugd291bGQgc3RpbGwgdXNlIGl0IGZvciB0aGUgcmVnaXN0ZXIgdmVjdG9yczsKKysgICBzbyBSRUxfQUxMT0Mgc2hvdWxkIG5vdCBhZmZlY3QgdGhpcy4gICovCisrIyBpZiAoZGVmaW5lZCBDX0FMTE9DQSB8fCBkZWZpbmVkIFJFR0VYX01BTExPQykgJiYgZGVmaW5lZCBlbWFjcworKyMgIHVuZGVmIE1BVENIX01BWV9BTExPQ0FURQorKyMgZW5kaWYKKysjZW5kaWYgLyogbm90IERFRklORURfT05DRSAqLworKwwKKysjaWZkZWYgSU5TSURFX1JFQ1VSU0lPTgorKy8qIEZhaWx1cmUgc3RhY2sgZGVjbGFyYXRpb25zIGFuZCBtYWNyb3M7IGJvdGggcmVfY29tcGlsZV9mYXN0bWFwIGFuZAorKyAgIHJlX21hdGNoXzIgdXNlIGEgZmFpbHVyZSBzdGFjay4gIFRoZXNlIGhhdmUgdG8gYmUgbWFjcm9zIGJlY2F1c2Ugb2YKKysgICBSRUdFWF9BTExPQ0FURV9TVEFDSy4gICovCisrCisrCisrLyogTnVtYmVyIG9mIGZhaWx1cmUgcG9pbnRzIGZvciB3aGljaCB0byBpbml0aWFsbHkgYWxsb2NhdGUgc3BhY2UKKysgICB3aGVuIG1hdGNoaW5nLiAgSWYgdGhpcyBudW1iZXIgaXMgZXhjZWVkZWQsIHdlIGFsbG9jYXRlIG1vcmUKKysgICBzcGFjZSwgc28gaXQgaXMgbm90IGEgaGFyZCBsaW1pdC4gICovCisrIyBpZm5kZWYgSU5JVF9GQUlMVVJFX0FMTE9DCisrIyAgZGVmaW5lIElOSVRfRkFJTFVSRV9BTExPQyA1CisrIyBlbmRpZgorKworKy8qIFJvdWdobHkgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZhaWx1cmUgcG9pbnRzIG9uIHRoZSBzdGFjay4gIFdvdWxkIGJlCisrICAgZXhhY3RseSB0aGF0IGlmIGFsd2F5cyB1c2VkIE1BWF9GQUlMVVJFX0lURU1TIGl0ZW1zIGVhY2ggdGltZSB3ZSBmYWlsZWQuCisrICAgVGhpcyBpcyBhIHZhcmlhYmxlIG9ubHkgc28gdXNlcnMgb2YgcmVnZXggY2FuIGFzc2lnbiB0byBpdDsgd2UgbmV2ZXIKKysgICBjaGFuZ2UgaXQgb3Vyc2VsdmVzLiAgKi8KKysKKysKKysjIGlmbmRlZiBERUZJTkVEX09OQ0UKKysKKysjICBpZmRlZiBJTlRfSVNfMTZCSVQKKysjICAgZGVmaW5lIFJFX01fRl9UWVBFIGxvbmcgaW50CisrIyAgZWxzZQorKyMgICBkZWZpbmUgUkVfTV9GX1RZUEUgaW50CisrIyAgZW5kaWYgLyogSU5UX0lTXzE2QklUICovCisrCisrIyAgaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCisrLyogNDQwMCB3YXMgZW5vdWdoIHRvIGNhdXNlIGEgY3Jhc2ggb24gQWxwaGEgT1NGLzEsCisrICAgd2hvc2UgZGVmYXVsdCBzdGFjayBsaW1pdCBpcyAybWIuICAqLworKyMgICBkZWZpbmUgUkVfTV9GX0RFRkFVTFQgNDAwMAorKyMgIGVsc2UKKysjICAgZGVmaW5lIFJFX01fRl9ERUZBVUxUIDIwMDAKKysjICBlbmRpZiAvKiBNQVRDSF9NQVlfQUxMT0NBVEUgKi8KKysKKysjICBpbmNsdWRlIDxzaGxpYi1jb21wYXQuaD4KKysKKysjICBpZiBTSExJQl9DT01QQVQgKGxpYmMsIEdMSUJDXzJfMCwgR0xJQkNfMl8zKQorK2xpbmtfd2FybmluZyAocmVfbWF4X2ZhaWx1cmVzLCAidGhlICdyZV9tYXhfZmFpbHVyZXMnIHZhcmlhYmxlIGlzIG9ic29sZXRlIGFuZCB3aWxsIGdvIGF3YXkuIikKKytSRV9NX0ZfVFlQRSByZV9tYXhfZmFpbHVyZXMgPSBSRV9NX0ZfREVGQVVMVDsKKysjICBlbHNlCisrUkVfTV9GX1RZUEUgcmVfbWF4X2ZhaWx1cmVzIGF0dHJpYnV0ZV9oaWRkZW4gPSBSRV9NX0ZfREVGQVVMVDsKKysjICBlbmRpZiAvKiBTSExJQl9DT01QQVQgKi8KKysKKysjICB1bmRlZiBSRV9NX0ZfVFlQRQorKyMgIHVuZGVmIFJFX01fRl9ERUZBVUxUCisrCisrIyBlbmRpZiAvKiBERUZJTkVEX09OQ0UgKi8KKysKKysjIGlmZGVmIElOVF9JU18xNkJJVAorKworK3VuaW9uIFBSRUZJWChmYWlsX3N0YWNrX2VsdCkKKyt7CisrICBVQ0hBUl9UICpwb2ludGVyOworKyAgbG9uZyBpbnQgaW50ZWdlcjsKKyt9OworKworK3R5cGVkZWYgdW5pb24gUFJFRklYKGZhaWxfc3RhY2tfZWx0KSBQUkVGSVgoZmFpbF9zdGFja19lbHRfdCk7CisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkgKnN0YWNrOworKyAgdW5zaWduZWQgbG9uZyBpbnQgc2l6ZTsKKysgIHVuc2lnbmVkIGxvbmcgaW50IGF2YWlsOwkJLyogT2Zmc2V0IG9mIG5leHQgb3BlbiBwb3NpdGlvbi4gICovCisrfSBQUkVGSVgoZmFpbF9zdGFja190eXBlKTsKKysKKysjIGVsc2UgLyogbm90IElOVF9JU18xNkJJVCAqLworKworK3VuaW9uIFBSRUZJWChmYWlsX3N0YWNrX2VsdCkKKyt7CisrICBVQ0hBUl9UICpwb2ludGVyOworKyAgaW50IGludGVnZXI7CisrfTsKKysKKyt0eXBlZGVmIHVuaW9uIFBSRUZJWChmYWlsX3N0YWNrX2VsdCkgUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpOworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpICpzdGFjazsKKysgIHVuc2lnbmVkIHNpemU7CisrICB1bnNpZ25lZCBhdmFpbDsJCQkvKiBPZmZzZXQgb2YgbmV4dCBvcGVuIHBvc2l0aW9uLiAgKi8KKyt9IFBSRUZJWChmYWlsX3N0YWNrX3R5cGUpOworKworKyMgZW5kaWYgLyogSU5UX0lTXzE2QklUICovCisrCisrIyBpZm5kZWYgREVGSU5FRF9PTkNFCisrIyAgZGVmaW5lIEZBSUxfU1RBQ0tfRU1QVFkoKSAgICAgKGZhaWxfc3RhY2suYXZhaWwgPT0gMCkKKysjICBkZWZpbmUgRkFJTF9TVEFDS19QVFJfRU1QVFkoKSAoZmFpbF9zdGFja19wdHItPmF2YWlsID09IDApCisrIyAgZGVmaW5lIEZBSUxfU1RBQ0tfRlVMTCgpICAgICAgKGZhaWxfc3RhY2suYXZhaWwgPT0gZmFpbF9zdGFjay5zaXplKQorKyMgZW5kaWYKKysKKysKKysvKiBEZWZpbmUgbWFjcm9zIHRvIGluaXRpYWxpemUgYW5kIGZyZWUgdGhlIGZhaWx1cmUgc3RhY2suCisrICAgRG8gYHJldHVybiAtMicgaWYgdGhlIGFsbG9jIGZhaWxzLiAgKi8KKysKKysjIGlmZGVmIE1BVENIX01BWV9BTExPQ0FURQorKyMgIGRlZmluZSBJTklUX0ZBSUxfU1RBQ0soKQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIGZhaWxfc3RhY2suc3RhY2sgPSAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpICopCQlcCisrICAgICAgUkVHRVhfQUxMT0NBVEVfU1RBQ0sgKElOSVRfRkFJTFVSRV9BTExPQyAqIHNpemVvZiAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpKSk7IFwKKysJCQkJCQkJCQlcCisrICAgIGlmIChmYWlsX3N0YWNrLnN0YWNrID09IE5VTEwpCQkJCVwKKysgICAgICByZXR1cm4gLTI7CQkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgIGZhaWxfc3RhY2suc2l6ZSA9IElOSVRfRkFJTFVSRV9BTExPQzsJCQlcCisrICAgIGZhaWxfc3RhY2suYXZhaWwgPSAwOwkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysKKysjICBkZWZpbmUgUkVTRVRfRkFJTF9TVEFDSygpICBSRUdFWF9GUkVFX1NUQUNLIChmYWlsX3N0YWNrLnN0YWNrKQorKyMgZWxzZQorKyMgIGRlZmluZSBJTklUX0ZBSUxfU1RBQ0soKQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIGZhaWxfc3RhY2suYXZhaWwgPSAwOwkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysKKysjICBkZWZpbmUgUkVTRVRfRkFJTF9TVEFDSygpCisrIyBlbmRpZgorKworKworKy8qIERvdWJsZSB0aGUgc2l6ZSBvZiBGQUlMX1NUQUNLLCB1cCB0byBhcHByb3hpbWF0ZWx5IGByZV9tYXhfZmFpbHVyZXMnIGl0ZW1zLgorKworKyAgIFJldHVybiAxIGlmIHN1Y2NlZWRzLCBhbmQgMCBpZiBlaXRoZXIgcmFuIG91dCBvZiBtZW1vcnkKKysgICBhbGxvY2F0aW5nIHNwYWNlIGZvciBpdCBvciBpdCB3YXMgYWxyZWFkeSB0b28gbGFyZ2UuCisrCisrICAgUkVHRVhfUkVBTExPQ0FURV9TVEFDSyByZXF1aXJlcyBgZGVzdGluYXRpb24nIGJlIGRlY2xhcmVkLiAgICovCisrCisrIyBkZWZpbmUgRE9VQkxFX0ZBSUxfU1RBQ0soZmFpbF9zdGFjaykJCQkJCVwKKysgICgoZmFpbF9zdGFjaykuc2l6ZSA+ICh1bnNpZ25lZCkgKHJlX21heF9mYWlsdXJlcyAqIE1BWF9GQUlMVVJFX0lURU1TKQlcCisrICAgPyAwCQkJCQkJCQkJXAorKyAgIDogKChmYWlsX3N0YWNrKS5zdGFjayA9IChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkgKikJCQlcCisrICAgICAgICBSRUdFWF9SRUFMTE9DQVRFX1NUQUNLICgoZmFpbF9zdGFjaykuc3RhY2ssIAkJCVwKKysgICAgICAgICAgKGZhaWxfc3RhY2spLnNpemUgKiBzaXplb2YgKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSksCVwKKysgICAgICAgICAgKChmYWlsX3N0YWNrKS5zaXplIDw8IDEpICogc2l6ZW9mIChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkpKSxcCisrCQkJCQkJCQkJXAorKyAgICAgIChmYWlsX3N0YWNrKS5zdGFjayA9PSBOVUxMCQkJCQlcCisrICAgICAgPyAwCQkJCQkJCQlcCisrICAgICAgOiAoKGZhaWxfc3RhY2spLnNpemUgPDw9IDEsIAkJCQkJXAorKyAgICAgICAgIDEpKSkKKysKKysKKysvKiBQdXNoIHBvaW50ZXIgUE9JTlRFUiBvbiBGQUlMX1NUQUNLLgorKyAgIFJldHVybiAxIGlmIHdhcyBhYmxlIHRvIGRvIHNvIGFuZCAwIGlmIHJhbiBvdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcKKysgICBzcGFjZSB0byBkbyBzby4gICovCisrIyBkZWZpbmUgUFVTSF9QQVRURVJOX09QKFBPSU5URVIsIEZBSUxfU1RBQ0spCQkJCVwKKysgICgoRkFJTF9TVEFDS19GVUxMICgpCQkJCQkJCVwKKysgICAgJiYgIURPVUJMRV9GQUlMX1NUQUNLIChGQUlMX1NUQUNLKSkJCQkJCVwKKysgICA/IDAJCQkJCQkJCQlcCisrICAgOiAoKEZBSUxfU1RBQ0spLnN0YWNrWyhGQUlMX1NUQUNLKS5hdmFpbCsrXS5wb2ludGVyID0gUE9JTlRFUiwJXAorKyAgICAgIDEpKQorKworKy8qIFB1c2ggYSBwb2ludGVyIHZhbHVlIG9udG8gdGhlIGZhaWx1cmUgc3RhY2suCisrICAgQXNzdW1lcyB0aGUgdmFyaWFibGUgYGZhaWxfc3RhY2snLiAgUHJvYmFibHkgc2hvdWxkIG9ubHkKKysgICBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYFBVU0hfRkFJTFVSRV9QT0lOVCcuICAqLworKyMgZGVmaW5lIFBVU0hfRkFJTFVSRV9QT0lOVEVSKGl0ZW0pCQkJCQlcCisrICBmYWlsX3N0YWNrLnN0YWNrW2ZhaWxfc3RhY2suYXZhaWwrK10ucG9pbnRlciA9IChVQ0hBUl9UICopIChpdGVtKQorKworKy8qIFRoaXMgcHVzaGVzIGFuIGludGVnZXItdmFsdWVkIGl0ZW0gb250byB0aGUgZmFpbHVyZSBzdGFjay4KKysgICBBc3N1bWVzIHRoZSB2YXJpYWJsZSBgZmFpbF9zdGFjaycuICBQcm9iYWJseSBzaG91bGQgb25seQorKyAgIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBgUFVTSF9GQUlMVVJFX1BPSU5UJy4gICovCisrIyBkZWZpbmUgUFVTSF9GQUlMVVJFX0lOVChpdGVtKQkJCQkJXAorKyAgZmFpbF9zdGFjay5zdGFja1tmYWlsX3N0YWNrLmF2YWlsKytdLmludGVnZXIgPSAoaXRlbSkKKysKKysvKiBQdXNoIGEgZmFpbF9zdGFja19lbHRfdCB2YWx1ZSBvbnRvIHRoZSBmYWlsdXJlIHN0YWNrLgorKyAgIEFzc3VtZXMgdGhlIHZhcmlhYmxlIGBmYWlsX3N0YWNrJy4gIFByb2JhYmx5IHNob3VsZCBvbmx5CisrICAgYmUgY2FsbGVkIGZyb20gd2l0aGluIGBQVVNIX0ZBSUxVUkVfUE9JTlQnLiAgKi8KKysjIGRlZmluZSBQVVNIX0ZBSUxVUkVfRUxUKGl0ZW0pCQkJCQlcCisrICBmYWlsX3N0YWNrLnN0YWNrW2ZhaWxfc3RhY2suYXZhaWwrK10gPSAgKGl0ZW0pCisrCisrLyogVGhlc2UgdGhyZWUgUE9QLi4uIG9wZXJhdGlvbnMgY29tcGxlbWVudCB0aGUgdGhyZWUgUFVTSC4uLiBvcGVyYXRpb25zLgorKyAgIEFsbCBhc3N1bWUgdGhhdCBgZmFpbF9zdGFjaycgaXMgbm9uZW1wdHkuICAqLworKyMgZGVmaW5lIFBPUF9GQUlMVVJFX1BPSU5URVIoKSBmYWlsX3N0YWNrLnN0YWNrWy0tZmFpbF9zdGFjay5hdmFpbF0ucG9pbnRlcgorKyMgZGVmaW5lIFBPUF9GQUlMVVJFX0lOVCgpIGZhaWxfc3RhY2suc3RhY2tbLS1mYWlsX3N0YWNrLmF2YWlsXS5pbnRlZ2VyCisrIyBkZWZpbmUgUE9QX0ZBSUxVUkVfRUxUKCkgZmFpbF9zdGFjay5zdGFja1stLWZhaWxfc3RhY2suYXZhaWxdCisrCisrLyogVXNlZCB0byBvbWl0IHB1c2hpbmcgZmFpbHVyZSBwb2ludCBpZCdzIHdoZW4gd2UncmUgbm90IGRlYnVnZ2luZy4gICovCisrIyBpZmRlZiBERUJVRworKyMgIGRlZmluZSBERUJVR19QVVNIIFBVU0hfRkFJTFVSRV9JTlQKKysjICBkZWZpbmUgREVCVUdfUE9QKGl0ZW1fYWRkcikgKihpdGVtX2FkZHIpID0gUE9QX0ZBSUxVUkVfSU5UICgpCisrIyBlbHNlCisrIyAgZGVmaW5lIERFQlVHX1BVU0goaXRlbSkKKysjICBkZWZpbmUgREVCVUdfUE9QKGl0ZW1fYWRkcikKKysjIGVuZGlmCisrCisrCisrLyogUHVzaCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIHdlIHdpbGwgbmVlZAorKyAgIGlmIHdlIGV2ZXIgZmFpbCBiYWNrIHRvIGl0LgorKworKyAgIFJlcXVpcmVzIHZhcmlhYmxlcyBmYWlsX3N0YWNrLCByZWdzdGFydCwgcmVnZW5kLCByZWdfaW5mbywgYW5kCisrICAgbnVtX3JlZ3NfcHVzaGVkIGJlIGRlY2xhcmVkLiAgRE9VQkxFX0ZBSUxfU1RBQ0sgcmVxdWlyZXMgYGRlc3RpbmF0aW9uJworKyAgIGJlIGRlY2xhcmVkLgorKworKyAgIERvZXMgYHJldHVybiBGQUlMVVJFX0NPREUnIGlmIHJ1bnMgb3V0IG9mIG1lbW9yeS4gICovCisrCisrIyBkZWZpbmUgUFVTSF9GQUlMVVJFX1BPSU5UKHBhdHRlcm5fcGxhY2UsIHN0cmluZ19wbGFjZSwgZmFpbHVyZV9jb2RlKQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBjaGFyICpkZXN0aW5hdGlvbjsJCQkJCQkJXAorKyAgICAvKiBNdXN0IGJlIGludCwgc28gd2hlbiB3ZSBkb24ndCBzYXZlIGFueSByZWdpc3RlcnMsIHRoZSBhcml0aG1ldGljCVwKKysgICAgICAgb2YgMCArIC0xIGlzbid0IGRvbmUgYXMgdW5zaWduZWQuICAqLwkJCQlcCisrICAgIC8qIENhbid0IGJlIGludCwgc2luY2UgdGhlcmUgaXMgbm90IGEgc2hyZWQgb2YgYSBndWFyYW50ZWUgdGhhdCBpbnQJXAorKyAgICAgICBpcyB3aWRlIGVub3VnaCB0byBob2xkIGEgdmFsdWUgb2Ygc29tZXRoaW5nIHRvIHdoaWNoIHBvaW50ZXIgY2FuCVwKKysgICAgICAgYmUgYXNzaWduZWQgKi8JCQkJCQkJXAorKyAgICBhY3RpdmVfcmVnX3QgdGhpc19yZWc7CQkJCQkJXAorKyAgICAJCQkJCQkJCQlcCisrICAgIERFQlVHX1NUQVRFTUVOVCAoZmFpbHVyZV9pZCsrKTsJCQkJCVwKKysgICAgREVCVUdfU1RBVEVNRU5UIChuZmFpbHVyZV9wb2ludHNfcHVzaGVkKyspOwkJCQlcCisrICAgIERFQlVHX1BSSU5UMiAoIlxuUFVTSF9GQUlMVVJFX1BPSU5UICMldTpcbiIsIGZhaWx1cmVfaWQpOwkJXAorKyAgICBERUJVR19QUklOVDIgKCIgIEJlZm9yZSBwdXNoLCBuZXh0IGF2YWlsOiAlZFxuIiwgKGZhaWxfc3RhY2spLmF2YWlsKTtcCisrICAgIERFQlVHX1BSSU5UMiAoIiAgICAgICAgICAgICAgICAgICAgIHNpemU6ICVkXG4iLCAoZmFpbF9zdGFjaykuc2l6ZSk7XAorKwkJCQkJCQkJCVwKKysgICAgREVCVUdfUFJJTlQyICgiICBzbG90cyBuZWVkZWQ6ICVsZFxuIiwgTlVNX0ZBSUxVUkVfSVRFTVMpOwkJXAorKyAgICBERUJVR19QUklOVDIgKCIgICAgIGF2YWlsYWJsZTogJWRcbiIsIFJFTUFJTklOR19BVkFJTF9TTE9UUyk7CVwKKysJCQkJCQkJCQlcCisrICAgIC8qIEVuc3VyZSB3ZSBoYXZlIGVub3VnaCBzcGFjZSBhbGxvY2F0ZWQgZm9yIHdoYXQgd2Ugd2lsbCBwdXNoLiAgKi8JXAorKyAgICB3aGlsZSAoUkVNQUlOSU5HX0FWQUlMX1NMT1RTIDwgTlVNX0ZBSUxVUkVfSVRFTVMpCQkJXAorKyAgICAgIHsJCQkJCQkJCQlcCisrICAgICAgICBpZiAoIURPVUJMRV9GQUlMX1NUQUNLIChmYWlsX3N0YWNrKSkJCQkJXAorKyAgICAgICAgICByZXR1cm4gZmFpbHVyZV9jb2RlOwkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgICAgICBERUJVR19QUklOVDIgKCJcbiAgRG91YmxlZCBzdGFjazsgc2l6ZSBub3c6ICVkXG4iLAkJXAorKwkJICAgICAgIChmYWlsX3N0YWNrKS5zaXplKTsJCQkJXAorKyAgICAgICAgREVCVUdfUFJJTlQyICgiICBzbG90cyBhdmFpbGFibGU6ICVkXG4iLCBSRU1BSU5JTkdfQVZBSUxfU0xPVFMpO1wKKysgICAgICB9CQkJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgLyogUHVzaCB0aGUgaW5mbywgc3RhcnRpbmcgd2l0aCB0aGUgcmVnaXN0ZXJzLiAgKi8JCQlcCisrICAgIERFQlVHX1BSSU5UMSAoIlxuIik7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgaWYgKDEpCQkJCQkJCQlcCisrICAgICAgZm9yICh0aGlzX3JlZyA9IGxvd2VzdF9hY3RpdmVfcmVnOyB0aGlzX3JlZyA8PSBoaWdoZXN0X2FjdGl2ZV9yZWc7IFwKKysJICAgdGhpc19yZWcrKykJCQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCSAgREVCVUdfUFJJTlQyICgiICBQdXNoaW5nIHJlZzogJWx1XG4iLCB0aGlzX3JlZyk7CQlcCisrCSAgREVCVUdfU1RBVEVNRU5UIChudW1fcmVnc19wdXNoZWQrKyk7CQkJCVwKKysJCQkJCQkJCQlcCisrCSAgREVCVUdfUFJJTlQyICgiICAgIHN0YXJ0OiAlcFxuIiwgcmVnc3RhcnRbdGhpc19yZWddKTsJCVwKKysJICBQVVNIX0ZBSUxVUkVfUE9JTlRFUiAocmVnc3RhcnRbdGhpc19yZWddKTsJCQlcCisrCQkJCQkJCQkJXAorKwkgIERFQlVHX1BSSU5UMiAoIiAgICBlbmQ6ICVwXG4iLCByZWdlbmRbdGhpc19yZWddKTsJCVwKKysJICBQVVNIX0ZBSUxVUkVfUE9JTlRFUiAocmVnZW5kW3RoaXNfcmVnXSk7CQkJXAorKwkJCQkJCQkJCVwKKysJICBERUJVR19QUklOVDIgKCIgICAgaW5mbzogJXBcbiAgICAgICIsCQkJCVwKKysJCQlyZWdfaW5mb1t0aGlzX3JlZ10ud29yZC5wb2ludGVyKTsJCVwKKysJICBERUJVR19QUklOVDIgKCIgbWF0Y2hfbnVsbD0lZCIsCQkJCVwKKysJCQlSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bdGhpc19yZWddKSk7CVwKKysJICBERUJVR19QUklOVDIgKCIgYWN0aXZlPSVkIiwgSVNfQUNUSVZFIChyZWdfaW5mb1t0aGlzX3JlZ10pKTsJXAorKwkgIERFQlVHX1BSSU5UMiAoIiBtYXRjaGVkX3NvbWV0aGluZz0lZCIsCQkJXAorKwkJCU1BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1t0aGlzX3JlZ10pKTsJXAorKwkgIERFQlVHX1BSSU5UMiAoIiBldmVyX21hdGNoZWQ9JWQiLAkJCQlcCisrCQkJRVZFUl9NQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bdGhpc19yZWddKSk7CVwKKysJICBERUJVR19QUklOVDEgKCJcbiIpOwkJCQkJCVwKKysJICBQVVNIX0ZBSUxVUkVfRUxUIChyZWdfaW5mb1t0aGlzX3JlZ10ud29yZCk7CQkJXAorKwl9CQkJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICBERUJVR19QUklOVDIgKCIgIFB1c2hpbmcgIGxvdyBhY3RpdmUgcmVnOiAlbGRcbiIsIGxvd2VzdF9hY3RpdmVfcmVnKTtcCisrICAgIFBVU0hfRkFJTFVSRV9JTlQgKGxvd2VzdF9hY3RpdmVfcmVnKTsJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgREVCVUdfUFJJTlQyICgiICBQdXNoaW5nIGhpZ2ggYWN0aXZlIHJlZzogJWxkXG4iLCBoaWdoZXN0X2FjdGl2ZV9yZWcpO1wKKysgICAgUFVTSF9GQUlMVVJFX0lOVCAoaGlnaGVzdF9hY3RpdmVfcmVnKTsJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgREVCVUdfUFJJTlQyICgiICBQdXNoaW5nIHBhdHRlcm4gJXA6XG4iLCBwYXR0ZXJuX3BsYWNlKTsJCVwKKysgICAgREVCVUdfUFJJTlRfQ09NUElMRURfUEFUVEVSTiAoYnVmcCwgcGF0dGVybl9wbGFjZSwgcGVuZCk7CQlcCisrICAgIFBVU0hfRkFJTFVSRV9QT0lOVEVSIChwYXR0ZXJuX3BsYWNlKTsJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgREVCVUdfUFJJTlQyICgiICBQdXNoaW5nIHN0cmluZyAlcDogYCIsIHN0cmluZ19wbGFjZSk7CQlcCisrICAgIERFQlVHX1BSSU5UX0RPVUJMRV9TVFJJTkcgKHN0cmluZ19wbGFjZSwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsICAgXAorKwkJCQkgc2l6ZTIpOwkJCQlcCisrICAgIERFQlVHX1BSSU5UMSAoIidcbiIpOwkJCQkJCVwKKysgICAgUFVTSF9GQUlMVVJFX1BPSU5URVIgKHN0cmluZ19wbGFjZSk7CQkJCVwKKysJCQkJCQkJCQlcCisrICAgIERFQlVHX1BSSU5UMiAoIiAgUHVzaGluZyBmYWlsdXJlIGlkOiAldVxuIiwgZmFpbHVyZV9pZCk7CQlcCisrICAgIERFQlVHX1BVU0ggKGZhaWx1cmVfaWQpOwkJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrCisrIyBpZm5kZWYgREVGSU5FRF9PTkNFCisrLyogVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgYXJlIHB1c2hlZCBhbmQgcG9wcGVkIG9uIHRoZSBzdGFjaworKyAgIGZvciBlYWNoIHJlZ2lzdGVyLiAgKi8KKysjICBkZWZpbmUgTlVNX1JFR19JVEVNUyAgMworKworKy8qIEluZGl2aWR1YWwgaXRlbXMgYXNpZGUgZnJvbSB0aGUgcmVnaXN0ZXJzLiAgKi8KKysjICBpZmRlZiBERUJVRworKyMgICBkZWZpbmUgTlVNX05PTlJFR19JVEVNUyA1IC8qIEluY2x1ZGVzIGZhaWx1cmUgcG9pbnQgaWQuICAqLworKyMgIGVsc2UKKysjICAgZGVmaW5lIE5VTV9OT05SRUdfSVRFTVMgNAorKyMgIGVuZGlmCisrCisrLyogV2UgcHVzaCBhdCBtb3N0IHRoaXMgbWFueSBpdGVtcyBvbiB0aGUgc3RhY2suICAqLworKy8qIFdlIHVzZWQgdG8gdXNlIChudW1fcmVncyAtIDEpLCB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVycworKyAgIHRoaXMgcmVnZXhwIHdpbGwgc2F2ZTsgYnV0IHRoYXQgd2FzIGNoYW5nZWQgdG8gNQorKyAgIHRvIGF2b2lkIHN0YWNrIG92ZXJmbG93IGZvciBhIHJlZ2V4cCB3aXRoIGxvdHMgb2YgcGFyZW5zLiAgKi8KKysjICBkZWZpbmUgTUFYX0ZBSUxVUkVfSVRFTVMgKDUgKiBOVU1fUkVHX0lURU1TICsgTlVNX05PTlJFR19JVEVNUykKKysKKysvKiBXZSBhY3R1YWxseSBwdXNoIHRoaXMgbWFueSBpdGVtcy4gICovCisrIyAgZGVmaW5lIE5VTV9GQUlMVVJFX0lURU1TCQkJCVwKKysgICgoKDAJCQkJCQkJXAorKyAgICAgPyAwIDogaGlnaGVzdF9hY3RpdmVfcmVnIC0gbG93ZXN0X2FjdGl2ZV9yZWcgKyAxKQlcCisrICAgICogTlVNX1JFR19JVEVNUykJCQkJCVwKKysgICArIE5VTV9OT05SRUdfSVRFTVMpCisrCisrLyogSG93IG1hbnkgaXRlbXMgY2FuIHN0aWxsIGJlIGFkZGVkIHRvIHRoZSBzdGFjayB3aXRob3V0IG92ZXJmbG93aW5nIGl0LiAgKi8KKysjICBkZWZpbmUgUkVNQUlOSU5HX0FWQUlMX1NMT1RTICgoZmFpbF9zdGFjaykuc2l6ZSAtIChmYWlsX3N0YWNrKS5hdmFpbCkKKysjIGVuZGlmIC8qIG5vdCBERUZJTkVEX09OQ0UgKi8KKysKKysKKysvKiBQb3BzIHdoYXQgUFVTSF9GQUlMX1NUQUNLIHB1c2hlcy4KKysKKysgICBXZSByZXN0b3JlIGludG8gdGhlIHBhcmFtZXRlcnMsIGFsbCBvZiB3aGljaCBzaG91bGQgYmUgbHZhbHVlczoKKysgICAgIFNUUiAtLSB0aGUgc2F2ZWQgZGF0YSBwb3NpdGlvbi4KKysgICAgIFBBVCAtLSB0aGUgc2F2ZWQgcGF0dGVybiBwb3NpdGlvbi4KKysgICAgIExPV19SRUcsIEhJR0hfUkVHIC0tIHRoZSBoaWdoZXN0IGFuZCBsb3dlc3QgYWN0aXZlIHJlZ2lzdGVycy4KKysgICAgIFJFR1NUQVJULCBSRUdFTkQgLS0gYXJyYXlzIG9mIHN0cmluZyBwb3NpdGlvbnMuCisrICAgICBSRUdfSU5GTyAtLSBhcnJheSBvZiBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIHN1YmV4cHJlc3Npb24uCisrCisrICAgQWxzbyBhc3N1bWVzIHRoZSB2YXJpYWJsZXMgYGZhaWxfc3RhY2snIGFuZCAoaWYgZGVidWdnaW5nKSwgYGJ1ZnAnLAorKyAgIGBwZW5kJywgYHN0cmluZzEnLCBgc2l6ZTEnLCBgc3RyaW5nMicsIGFuZCBgc2l6ZTInLiAgKi8KKysjIGRlZmluZSBQT1BfRkFJTFVSRV9QT0lOVChzdHIsIHBhdCwgbG93X3JlZywgaGlnaF9yZWcsIHJlZ3N0YXJ0LCByZWdlbmQsIHJlZ19pbmZvKVwKKyt7CQkJCQkJCQkJXAorKyAgREVCVUdfU1RBVEVNRU5UICh1bnNpZ25lZCBmYWlsdXJlX2lkOykJCQkJXAorKyAgYWN0aXZlX3JlZ190IHRoaXNfcmVnOwkJCQkJCVwKKysgIGNvbnN0IFVDSEFSX1QgKnN0cmluZ190ZW1wOwkJCQkJCVwKKysJCQkJCQkJCQlcCisrICBhc3NlcnQgKCFGQUlMX1NUQUNLX0VNUFRZICgpKTsJCQkJCVwKKysJCQkJCQkJCQlcCisrICAvKiBSZW1vdmUgZmFpbHVyZSBwb2ludHMgYW5kIHBvaW50IHRvIGhvdyBtYW55IHJlZ3MgcHVzaGVkLiAgKi8JXAorKyAgREVCVUdfUFJJTlQxICgiUE9QX0ZBSUxVUkVfUE9JTlQ6XG4iKTsJCQkJXAorKyAgREVCVUdfUFJJTlQyICgiICBCZWZvcmUgcG9wLCBuZXh0IGF2YWlsOiAlZFxuIiwgZmFpbF9zdGFjay5hdmFpbCk7CVwKKysgIERFQlVHX1BSSU5UMiAoIiAgICAgICAgICAgICAgICAgICAgc2l6ZTogJWRcbiIsIGZhaWxfc3RhY2suc2l6ZSk7CVwKKysJCQkJCQkJCQlcCisrICBhc3NlcnQgKGZhaWxfc3RhY2suYXZhaWwgPj0gTlVNX05PTlJFR19JVEVNUyk7CQkJXAorKwkJCQkJCQkJCVwKKysgIERFQlVHX1BPUCAoJmZhaWx1cmVfaWQpOwkJCQkJCVwKKysgIERFQlVHX1BSSU5UMiAoIiAgUG9wcGluZyBmYWlsdXJlIGlkOiAldVxuIiwgZmFpbHVyZV9pZCk7CQlcCisrCQkJCQkJCQkJXAorKyAgLyogSWYgdGhlIHNhdmVkIHN0cmluZyBsb2NhdGlvbiBpcyBOVUxMLCBpdCBjYW1lIGZyb20gYW4JCVwKKysgICAgIG9uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcCBvcGNvZGUsIGFuZCB3ZSB3YW50IHRvIHRocm93IGF3YXkgdGhlCVwKKysgICAgIHNhdmVkIE5VTEwsIHRodXMgcmV0YWluaW5nIG91ciBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzdHJpbmcuICAqLwlcCisrICBzdHJpbmdfdGVtcCA9IFBPUF9GQUlMVVJFX1BPSU5URVIgKCk7CQkJCQlcCisrICBpZiAoc3RyaW5nX3RlbXAgIT0gTlVMTCkJCQkJCQlcCisrICAgIHN0ciA9IChjb25zdCBDSEFSX1QgKikgc3RyaW5nX3RlbXA7CQkJCQlcCisrCQkJCQkJCQkJXAorKyAgREVCVUdfUFJJTlQyICgiICBQb3BwaW5nIHN0cmluZyAlcDogYCIsIHN0cik7CQkJCVwKKysgIERFQlVHX1BSSU5UX0RPVUJMRV9TVFJJTkcgKHN0ciwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyKTsJXAorKyAgREVCVUdfUFJJTlQxICgiJ1xuIik7CQkJCQkJCVwKKysJCQkJCQkJCQlcCisrICBwYXQgPSAoVUNIQVJfVCAqKSBQT1BfRkFJTFVSRV9QT0lOVEVSICgpOwkJCQlcCisrICBERUJVR19QUklOVDIgKCIgIFBvcHBpbmcgcGF0dGVybiAlcDpcbiIsIHBhdCk7CQkJXAorKyAgREVCVUdfUFJJTlRfQ09NUElMRURfUEFUVEVSTiAoYnVmcCwgcGF0LCBwZW5kKTsJCQlcCisrCQkJCQkJCQkJXAorKyAgLyogUmVzdG9yZSByZWdpc3RlciBpbmZvLiAgKi8JCQkJCQlcCisrICBoaWdoX3JlZyA9IChhY3RpdmVfcmVnX3QpIFBPUF9GQUlMVVJFX0lOVCAoKTsJCQkJXAorKyAgREVCVUdfUFJJTlQyICgiICBQb3BwaW5nIGhpZ2ggYWN0aXZlIHJlZzogJWxkXG4iLCBoaWdoX3JlZyk7CQlcCisrCQkJCQkJCQkJXAorKyAgbG93X3JlZyA9IChhY3RpdmVfcmVnX3QpIFBPUF9GQUlMVVJFX0lOVCAoKTsJCQkJXAorKyAgREVCVUdfUFJJTlQyICgiICBQb3BwaW5nICBsb3cgYWN0aXZlIHJlZzogJWxkXG4iLCBsb3dfcmVnKTsJCVwKKysJCQkJCQkJCQlcCisrICBpZiAoMSkJCQkJCQkJCVwKKysgICAgZm9yICh0aGlzX3JlZyA9IGhpZ2hfcmVnOyB0aGlzX3JlZyA+PSBsb3dfcmVnOyB0aGlzX3JlZy0tKQkJXAorKyAgICAgIHsJCQkJCQkJCQlcCisrCURFQlVHX1BSSU5UMiAoIiAgICBQb3BwaW5nIHJlZzogJWxkXG4iLCB0aGlzX3JlZyk7CQlcCisrCQkJCQkJCQkJXAorKwlyZWdfaW5mb1t0aGlzX3JlZ10ud29yZCA9IFBPUF9GQUlMVVJFX0VMVCAoKTsJCQlcCisrCURFQlVHX1BSSU5UMiAoIiAgICAgIGluZm86ICVwXG4iLAkJCQlcCisrCQkgICAgICByZWdfaW5mb1t0aGlzX3JlZ10ud29yZC5wb2ludGVyKTsJCQlcCisrCQkJCQkJCQkJXAorKwlyZWdlbmRbdGhpc19yZWddID0gKGNvbnN0IENIQVJfVCAqKSBQT1BfRkFJTFVSRV9QT0lOVEVSICgpOwlcCisrCURFQlVHX1BSSU5UMiAoIiAgICAgIGVuZDogJXBcbiIsIHJlZ2VuZFt0aGlzX3JlZ10pOwkJXAorKwkJCQkJCQkJCVwKKysJcmVnc3RhcnRbdGhpc19yZWddID0gKGNvbnN0IENIQVJfVCAqKSBQT1BfRkFJTFVSRV9QT0lOVEVSICgpOwlcCisrCURFQlVHX1BSSU5UMiAoIiAgICAgIHN0YXJ0OiAlcFxuIiwgcmVnc3RhcnRbdGhpc19yZWddKTsJCVwKKysgICAgICB9CQkJCQkJCQkJXAorKyAgZWxzZQkJCQkJCQkJCVwKKysgICAgewkJCQkJCQkJCVwKKysgICAgICBmb3IgKHRoaXNfcmVnID0gaGlnaGVzdF9hY3RpdmVfcmVnOyB0aGlzX3JlZyA+IGhpZ2hfcmVnOyB0aGlzX3JlZy0tKSBcCisrCXsJCQkJCQkJCVwKKysJICByZWdfaW5mb1t0aGlzX3JlZ10ud29yZC5pbnRlZ2VyID0gMDsJCQkJXAorKwkgIHJlZ2VuZFt0aGlzX3JlZ10gPSAwOwkJCQkJCVwKKysJICByZWdzdGFydFt0aGlzX3JlZ10gPSAwOwkJCQkJXAorKwl9CQkJCQkJCQlcCisrICAgICAgaGlnaGVzdF9hY3RpdmVfcmVnID0gaGlnaF9yZWc7CQkJCQlcCisrICAgIH0JCQkJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgc2V0X3JlZ3NfbWF0Y2hlZF9kb25lID0gMDsJCQkJCQlcCisrICBERUJVR19TVEFURU1FTlQgKG5mYWlsdXJlX3BvaW50c19wb3BwZWQrKyk7CQkJCVwKKyt9IC8qIFBPUF9GQUlMVVJFX1BPSU5UICovCisrDAorKy8qIFN0cnVjdHVyZSBmb3IgcGVyLXJlZ2lzdGVyIChhLmsuYS4gcGVyLWdyb3VwKSBpbmZvcm1hdGlvbi4KKysgICBPdGhlciByZWdpc3RlciBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUKKysgICBzdGFydGluZyBhbmQgZW5kaW5nIHBvc2l0aW9ucyAod2hpY2ggYXJlIGFkZHJlc3NlcyksIGFuZCB0aGUgbGlzdCBvZgorKyAgIGlubmVyIGdyb3VwcyAod2hpY2ggaXMgYSBiaXRzIGxpc3QpIGFyZSBtYWludGFpbmVkIGluIHNlcGFyYXRlCisrICAgdmFyaWFibGVzLgorKworKyAgIFdlIGFyZSBtYWtpbmcgYSAoc3RyaWN0bHkgc3BlYWtpbmcpIG5vbnBvcnRhYmxlIGFzc3VtcHRpb24gaGVyZTogdGhhdAorKyAgIHRoZSBjb21waWxlciB3aWxsIHBhY2sgb3VyIGJpdCBmaWVsZHMgaW50byBzb21ldGhpbmcgdGhhdCBmaXRzIGludG8KKysgICB0aGUgdHlwZSBvZiBgd29yZCcsIGkuZS4sIGlzIHNvbWV0aGluZyB0aGF0IGZpdHMgaW50byBvbmUgaXRlbSBvbiB0aGUKKysgICBmYWlsdXJlIHN0YWNrLiAgKi8KKysKKysKKysvKiBEZWNsYXJhdGlvbnMgYW5kIG1hY3JvcyBmb3IgcmVfbWF0Y2hfMi4gICovCisrCisrdHlwZWRlZiB1bmlvbgorK3sKKysgIFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSB3b3JkOworKyAgc3RydWN0CisrICB7CisrICAgICAgLyogVGhpcyBmaWVsZCBpcyBvbmUgaWYgdGhpcyBncm91cCBjYW4gbWF0Y2ggdGhlIGVtcHR5IHN0cmluZywKKysgICAgICAgICB6ZXJvIGlmIG5vdC4gIElmIG5vdCB5ZXQgZGV0ZXJtaW5lZCwgIGBNQVRDSF9OVUxMX1VOU0VUX1ZBTFVFJy4gICovCisrIyBkZWZpbmUgTUFUQ0hfTlVMTF9VTlNFVF9WQUxVRSAzCisrICAgIHVuc2lnbmVkIG1hdGNoX251bGxfc3RyaW5nX3AgOiAyOworKyAgICB1bnNpZ25lZCBpc19hY3RpdmUgOiAxOworKyAgICB1bnNpZ25lZCBtYXRjaGVkX3NvbWV0aGluZyA6IDE7CisrICAgIHVuc2lnbmVkIGV2ZXJfbWF0Y2hlZF9zb21ldGhpbmcgOiAxOworKyAgfSBiaXRzOworK30gUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSk7CisrCisrIyBpZm5kZWYgREVGSU5FRF9PTkNFCisrIyAgZGVmaW5lIFJFR19NQVRDSF9OVUxMX1NUUklOR19QKFIpICAoKFIpLmJpdHMubWF0Y2hfbnVsbF9zdHJpbmdfcCkKKysjICBkZWZpbmUgSVNfQUNUSVZFKFIpICAoKFIpLmJpdHMuaXNfYWN0aXZlKQorKyMgIGRlZmluZSBNQVRDSEVEX1NPTUVUSElORyhSKSAgKChSKS5iaXRzLm1hdGNoZWRfc29tZXRoaW5nKQorKyMgIGRlZmluZSBFVkVSX01BVENIRURfU09NRVRISU5HKFIpICAoKFIpLmJpdHMuZXZlcl9tYXRjaGVkX3NvbWV0aGluZykKKysKKysKKysvKiBDYWxsIHRoaXMgd2hlbiBoYXZlIG1hdGNoZWQgYSByZWFsIGNoYXJhY3RlcjsgaXQgc2V0cyBgbWF0Y2hlZCcgZmxhZ3MKKysgICBmb3IgdGhlIHN1YmV4cHJlc3Npb25zIHdoaWNoIHdlIGFyZSBjdXJyZW50bHkgaW5zaWRlLiAgQWxzbyByZWNvcmRzCisrICAgdGhhdCB0aG9zZSBzdWJleHBycyBoYXZlIG1hdGNoZWQuICAqLworKyMgIGRlZmluZSBTRVRfUkVHU19NQVRDSEVEKCkJCQkJCQlcCisrICBkbwkJCQkJCQkJCVwKKysgICAgewkJCQkJCQkJCVwKKysgICAgICBpZiAoIXNldF9yZWdzX21hdGNoZWRfZG9uZSkJCQkJCVwKKysJewkJCQkJCQkJXAorKwkgIGFjdGl2ZV9yZWdfdCByOwkJCQkJCVwKKysJICBzZXRfcmVnc19tYXRjaGVkX2RvbmUgPSAxOwkJCQkJXAorKwkgIGZvciAociA9IGxvd2VzdF9hY3RpdmVfcmVnOyByIDw9IGhpZ2hlc3RfYWN0aXZlX3JlZzsgcisrKQlcCisrCSAgICB7CQkJCQkJCQlcCisrCSAgICAgIE1BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1tyXSkJCQkJXAorKwkJPSBFVkVSX01BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1tyXSkJCQlcCisrCQk9IDE7CQkJCQkJCVwKKysJICAgIH0JCQkJCQkJCVwKKysJfQkJCQkJCQkJXAorKyAgICB9CQkJCQkJCQkJXAorKyAgd2hpbGUgKDApCisrIyBlbmRpZiAvKiBub3QgREVGSU5FRF9PTkNFICovCisrCisrLyogUmVnaXN0ZXJzIGFyZSBzZXQgdG8gYSBzZW50aW5lbCB3aGVuIHRoZXkgaGF2ZW4ndCB5ZXQgbWF0Y2hlZC4gICovCisrc3RhdGljIENIQVJfVCBQUkVGSVgocmVnX3Vuc2V0X2R1bW15KTsKKysjIGRlZmluZSBSRUdfVU5TRVRfVkFMVUUgKCZQUkVGSVgocmVnX3Vuc2V0X2R1bW15KSkKKysjIGRlZmluZSBSRUdfVU5TRVQoZSkgKChlKSA9PSBSRUdfVU5TRVRfVkFMVUUpCisrCisrLyogU3Vicm91dGluZSBkZWNsYXJhdGlvbnMgYW5kIG1hY3JvcyBmb3IgcmVnZXhfY29tcGlsZS4gICovCisrc3RhdGljIHZvaWQgUFJFRklYKHN0b3JlX29wMSkgKHJlX29wY29kZV90IG9wLCBVQ0hBUl9UICpsb2MsIGludCBhcmcpOworK3N0YXRpYyB2b2lkIFBSRUZJWChzdG9yZV9vcDIpIChyZV9vcGNvZGVfdCBvcCwgVUNIQVJfVCAqbG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJnMSwgaW50IGFyZzIpOworK3N0YXRpYyB2b2lkIFBSRUZJWChpbnNlcnRfb3AxKSAocmVfb3Bjb2RlX3Qgb3AsIFVDSEFSX1QgKmxvYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmcsIFVDSEFSX1QgKmVuZCk7Cisrc3RhdGljIHZvaWQgUFJFRklYKGluc2VydF9vcDIpIChyZV9vcGNvZGVfdCBvcCwgVUNIQVJfVCAqbG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZzEsIGludCBhcmcyLCBVQ0hBUl9UICplbmQpOworK3N0YXRpYyBib29sZWFuIFBSRUZJWChhdF9iZWdsaW5lX2xvY19wKSAoY29uc3QgQ0hBUl9UICpwYXR0ZXJuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUl9UICpwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCk7Cisrc3RhdGljIGJvb2xlYW4gUFJFRklYKGF0X2VuZGxpbmVfbG9jX3ApIChjb25zdCBDSEFSX1QgKnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSX1QgKnBlbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4KTsKKysjIGlmZGVmIFdDSEFSCisrc3RhdGljIHJlZ19lcnJjb2RlX3Qgd2NzX2NvbXBpbGVfcmFuZ2UgKENIQVJfVCByYW5nZV9zdGFydCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUl9UICoqcF9wdHIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVJfVCAqcGVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdHJhbnNsYXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUl9UICpiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEFSX1QgKmNoYXJfc2V0KTsKKytzdGF0aWMgdm9pZCBpbnNlcnRfc3BhY2UgKGludCBudW0sIENIQVJfVCAqbG9jLCBDSEFSX1QgKmVuZCk7CisrIyBlbHNlIC8qIEJZVEUgKi8KKytzdGF0aWMgcmVnX2VycmNvZGVfdCBieXRlX2NvbXBpbGVfcmFuZ2UgKHVuc2lnbmVkIGludCByYW5nZV9zdGFydCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipwX3B0ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBlbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuc2xhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYik7CisrIyBlbmRpZiAvKiBXQ0hBUiAqLworKworKy8qIEZldGNoIHRoZSBuZXh0IGNoYXJhY3RlciBpbiB0aGUgdW5jb21waWxlZCBwYXR0ZXJuLS0tdHJhbnNsYXRpbmcgaXQKKysgICBpZiBuZWNlc3NhcnkuICBBbHNvIGNhc3QgZnJvbSBhIHNpZ25lZCBjaGFyYWN0ZXIgaW4gdGhlIGNvbnN0YW50CisrICAgc3RyaW5nIHBhc3NlZCB0byB1cyBieSB0aGUgdXNlciB0byBhbiB1bnNpZ25lZCBjaGFyIHRoYXQgd2UgY2FuIHVzZQorKyAgIGFzIGFuIGFycmF5IGluZGV4IChpbiwgZS5nLiwgYHRyYW5zbGF0ZScpLiAgKi8KKysvKiBpZmRlZiBNQlNfU1VQUE9SVCwgd2UgdHJhbnNsYXRlIG9ubHkgaWYgY2hhcmFjdGVyIDw9IDB4ZmYsCisrICAgYmVjYXVzZSBpdCBpcyBpbXBvc3NpYmxlIHRvIGFsbG9jYXRlIDRHQiBhcnJheSBmb3Igc29tZSBlbmNvZGluZ3MKKysgICB3aGljaCBoYXZlIDQgYnl0ZSBjaGFyYWN0ZXJfc2V0IGxpa2UgVUNTNC4gICovCisrIyBpZm5kZWYgUEFURkVUQ0gKKysjICBpZmRlZiBXQ0hBUgorKyMgICBkZWZpbmUgUEFURkVUQ0goYykJCQkJCQkJXAorKyAgZG8ge2lmIChwID09IHBlbmQpIHJldHVybiBSRUdfRUVORDsJCQkJCVwKKysgICAgYyA9IChVQ0hBUl9UKSAqcCsrOwkJCQkJCQlcCisrICAgIGlmICh0cmFuc2xhdGUgJiYgKGMgPD0gMHhmZikpIGMgPSAoVUNIQVJfVCkgdHJhbnNsYXRlW2NdOwkJXAorKyAgfSB3aGlsZSAoMCkKKysjICBlbHNlIC8qIEJZVEUgKi8KKysjICAgZGVmaW5lIFBBVEZFVENIKGMpCQkJCQkJCVwKKysgIGRvIHtpZiAocCA9PSBwZW5kKSByZXR1cm4gUkVHX0VFTkQ7CQkJCQlcCisrICAgIGMgPSAodW5zaWduZWQgY2hhcikgKnArKzsJCQkJCQlcCisrICAgIGlmICh0cmFuc2xhdGUpIGMgPSAodW5zaWduZWQgY2hhcikgdHJhbnNsYXRlW2NdOwkJCVwKKysgIH0gd2hpbGUgKDApCisrIyAgZW5kaWYgLyogV0NIQVIgKi8KKysjIGVuZGlmCisrCisrLyogRmV0Y2ggdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSB1bmNvbXBpbGVkIHBhdHRlcm4sIHdpdGggbm8KKysgICB0cmFuc2xhdGlvbi4gICovCisrIyBkZWZpbmUgUEFURkVUQ0hfUkFXKGMpCQkJCQkJXAorKyAgZG8ge2lmIChwID09IHBlbmQpIHJldHVybiBSRUdfRUVORDsJCQkJCVwKKysgICAgYyA9IChVQ0hBUl9UKSAqcCsrOyAJICAgICAgIAkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysKKysvKiBHbyBiYWNrd2FyZHMgb25lIGNoYXJhY3RlciBpbiB0aGUgcGF0dGVybi4gICovCisrIyBkZWZpbmUgUEFUVU5GRVRDSCBwLS0KKysKKysKKysvKiBJZiBgdHJhbnNsYXRlJyBpcyBub24tbnVsbCwgcmV0dXJuIHRyYW5zbGF0ZVtEXSwgZWxzZSBqdXN0IEQuICBXZQorKyAgIGNhc3QgdGhlIHN1YnNjcmlwdCB0byB0cmFuc2xhdGUgYmVjYXVzZSBzb21lIGRhdGEgaXMgZGVjbGFyZWQgYXMKKysgICBgY2hhciAqJywgdG8gYXZvaWQgd2FybmluZ3Mgd2hlbiBhIHN0cmluZyBjb25zdGFudCBpcyBwYXNzZWQuICBCdXQKKysgICB3aGVuIHdlIHVzZSBhIGNoYXJhY3RlciBhcyBhIHN1YnNjcmlwdCB3ZSBtdXN0IG1ha2UgaXQgdW5zaWduZWQuICAqLworKy8qIGlmZGVmIE1CU19TVVBQT1JULCB3ZSB0cmFuc2xhdGUgb25seSBpZiBjaGFyYWN0ZXIgPD0gMHhmZiwKKysgICBiZWNhdXNlIGl0IGlzIGltcG9zc2libGUgdG8gYWxsb2NhdGUgNEdCIGFycmF5IGZvciBzb21lIGVuY29kaW5ncworKyAgIHdoaWNoIGhhdmUgNCBieXRlIGNoYXJhY3Rlcl9zZXQgbGlrZSBVQ1M0LiAgKi8KKysKKysjIGlmbmRlZiBUUkFOU0xBVEUKKysjICBpZmRlZiBXQ0hBUgorKyMgICBkZWZpbmUgVFJBTlNMQVRFKGQpIFwKKysgICgodHJhbnNsYXRlICYmICgoVUNIQVJfVCkgKGQpKSA8PSAweGZmKSBcCisrICAgPyAoY2hhcikgdHJhbnNsYXRlWyh1bnNpZ25lZCBjaGFyKSAoZCldIDogKGQpKQorKyMgZWxzZSAvKiBCWVRFICovCisrIyAgIGRlZmluZSBUUkFOU0xBVEUoZCkgXAorKyAgKHRyYW5zbGF0ZSA/IChjaGFyKSB0cmFuc2xhdGVbKHVuc2lnbmVkIGNoYXIpIChkKV0gOiAoY2hhcikgKGQpKQorKyMgIGVuZGlmIC8qIFdDSEFSICovCisrIyBlbmRpZgorKworKworKy8qIE1hY3JvcyBmb3Igb3V0cHV0dGluZyB0aGUgY29tcGlsZWQgcGF0dGVybiBpbnRvIGBidWZmZXInLiAgKi8KKysKKysvKiBJZiB0aGUgYnVmZmVyIGlzbid0IGFsbG9jYXRlZCB3aGVuIGl0IGNvbWVzIGluLCB1c2UgdGhpcy4gICovCisrIyBkZWZpbmUgSU5JVF9CVUZfU0laRSAgKDMyICogc2l6ZW9mKFVDSEFSX1QpKQorKworKy8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IE4gbW9yZSBieXRlcyBvZiBzcGFjZSBpbiBidWZmZXIuICAqLworKyMgaWZkZWYgV0NIQVIKKysjICBkZWZpbmUgR0VUX0JVRkZFUl9TUEFDRShuKQkJCQkJCVwKKysgICAgd2hpbGUgKCgodW5zaWduZWQgbG9uZyliIC0gKHVuc2lnbmVkIGxvbmcpQ09NUElMRURfQlVGRkVSX1ZBUglcCisrICAgICAgICAgICAgKyAobikqc2l6ZW9mKENIQVJfVCkpID4gYnVmcC0+YWxsb2NhdGVkKQkJCVwKKysgICAgICBFWFRFTkRfQlVGRkVSICgpCisrIyBlbHNlIC8qIEJZVEUgKi8KKysjICBkZWZpbmUgR0VUX0JVRkZFUl9TUEFDRShuKQkJCQkJCVwKKysgICAgd2hpbGUgKCh1bnNpZ25lZCBsb25nKSAoYiAtIGJ1ZnAtPmJ1ZmZlciArIChuKSkgPiBidWZwLT5hbGxvY2F0ZWQpCVwKKysgICAgICBFWFRFTkRfQlVGRkVSICgpCisrIyBlbmRpZiAvKiBXQ0hBUiAqLworKworKy8qIE1ha2Ugc3VyZSB3ZSBoYXZlIG9uZSBtb3JlIGJ5dGUgb2YgYnVmZmVyIHNwYWNlIGFuZCB0aGVuIGFkZCBDIHRvIGl0LiAgKi8KKysjIGRlZmluZSBCVUZfUFVTSChjKQkJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBHRVRfQlVGRkVSX1NQQUNFICgxKTsJCQkJCQlcCisrICAgICpiKysgPSAoVUNIQVJfVCkgKGMpOwkJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrCisrCisrLyogRW5zdXJlIHdlIGhhdmUgdHdvIG1vcmUgYnl0ZXMgb2YgYnVmZmVyIHNwYWNlIGFuZCB0aGVuIGFwcGVuZCBDMSBhbmQgQzIuICAqLworKyMgZGVmaW5lIEJVRl9QVVNIXzIoYzEsIGMyKQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDIpOwkJCQkJCVwKKysgICAgKmIrKyA9IChVQ0hBUl9UKSAoYzEpOwkJCQkJCVwKKysgICAgKmIrKyA9IChVQ0hBUl9UKSAoYzIpOwkJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrCisrCisrLyogQXMgd2l0aCBCVUZfUFVTSF8yLCBleGNlcHQgZm9yIHRocmVlIGJ5dGVzLiAgKi8KKysjIGRlZmluZSBCVUZfUFVTSF8zKGMxLCBjMiwgYzMpCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgR0VUX0JVRkZFUl9TUEFDRSAoMyk7CQkJCQkJXAorKyAgICAqYisrID0gKFVDSEFSX1QpIChjMSk7CQkJCQkJXAorKyAgICAqYisrID0gKFVDSEFSX1QpIChjMik7CQkJCQkJXAorKyAgICAqYisrID0gKFVDSEFSX1QpIChjMyk7CQkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysKKysvKiBTdG9yZSBhIGp1bXAgd2l0aCBvcGNvZGUgT1AgYXQgTE9DIHRvIGxvY2F0aW9uIFRPLiAgV2Ugc3RvcmUgYQorKyAgIHJlbGF0aXZlIGFkZHJlc3Mgb2Zmc2V0IGJ5IHRoZSB0aHJlZSBieXRlcyB0aGUganVtcCBpdHNlbGYgb2NjdXBpZXMuICAqLworKyMgZGVmaW5lIFNUT1JFX0pVTVAob3AsIGxvYywgdG8pIFwKKysgUFJFRklYKHN0b3JlX29wMSkgKG9wLCBsb2MsIChpbnQpICgodG8pIC0gKGxvYykgLSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpKSkKKysKKysvKiBMaWtld2lzZSwgZm9yIGEgdHdvLWFyZ3VtZW50IGp1bXAuICAqLworKyMgZGVmaW5lIFNUT1JFX0pVTVAyKG9wLCBsb2MsIHRvLCBhcmcpIFwKKysgIFBSRUZJWChzdG9yZV9vcDIpIChvcCwgbG9jLCAoaW50KSAoKHRvKSAtIChsb2MpIC0gKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKSksIGFyZykKKysKKysvKiBMaWtlIGBTVE9SRV9KVU1QJywgYnV0IGZvciBpbnNlcnRpbmcuICBBc3N1bWUgYGInIGlzIHRoZSBidWZmZXIgZW5kLiAgKi8KKysjIGRlZmluZSBJTlNFUlRfSlVNUChvcCwgbG9jLCB0bykgXAorKyAgUFJFRklYKGluc2VydF9vcDEpIChvcCwgbG9jLCAoaW50KSAoKHRvKSAtIChsb2MpIC0gKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKSksIGIpCisrCisrLyogTGlrZSBgU1RPUkVfSlVNUDInLCBidXQgZm9yIGluc2VydGluZy4gIEFzc3VtZSBgYicgaXMgdGhlIGJ1ZmZlciBlbmQuICAqLworKyMgZGVmaW5lIElOU0VSVF9KVU1QMihvcCwgbG9jLCB0bywgYXJnKSBcCisrICBQUkVGSVgoaW5zZXJ0X29wMikgKG9wLCBsb2MsIChpbnQpICgodG8pIC0gKGxvYykgLSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpKSxcCisrCSAgICAgIGFyZywgYikKKysKKysvKiBUaGlzIGlzIG5vdCBhbiBhcmJpdHJhcnkgbGltaXQ6IHRoZSBhcmd1bWVudHMgd2hpY2ggcmVwcmVzZW50IG9mZnNldHMKKysgICBpbnRvIHRoZSBwYXR0ZXJuIGFyZSB0d28gYnl0ZXMgbG9uZy4gIFNvIGlmIDJeMTYgYnl0ZXMgdHVybnMgb3V0IHRvCisrICAgYmUgdG9vIHNtYWxsLCBtYW55IHRoaW5ncyB3b3VsZCBoYXZlIHRvIGNoYW5nZS4gICovCisrLyogQW55IG90aGVyIGNvbXBpbGVyIHdoaWNoLCBsaWtlIE1TQywgaGFzIGFsbG9jYXRpb24gbGltaXQgYmVsb3cgMl4xNgorKyAgIGJ5dGVzIHdpbGwgaGF2ZSB0byB1c2UgYXBwcm9hY2ggc2ltaWxhciB0byB3aGF0IHdhcyBkb25lIGJlbG93IGZvcgorKyAgIE1TQyBhbmQgZHJvcCBNQVhfQlVGX1NJWkUgYSBiaXQuICBPdGhlcndpc2UgeW91IG1heSBlbmQgdXAKKysgICByZWFsbG9jYXRpbmcgdG8gMCBieXRlcy4gIFN1Y2ggdGhpbmcgaXMgbm90IGdvaW5nIHRvIHdvcmsgdG9vIHdlbGwuCisrICAgWW91IGhhdmUgYmVlbiB3YXJuZWQhISAgKi8KKysjIGlmbmRlZiBERUZJTkVEX09OQ0UKKysjICBpZiBkZWZpbmVkIF9NU0NfVkVSICAmJiAhZGVmaW5lZCBXSU4zMgorKy8qIE1pY3Jvc29mdCBDIDE2LWJpdCB2ZXJzaW9ucyBsaW1pdCBtYWxsb2MgdG8gYXBwcm94IDY1NTEyIGJ5dGVzLgorKyAgIFRoZSBSRUFMTE9DIGRlZmluZSBlbGltaW5hdGVzIGEgZmx1cnJ5IG9mIGNvbnZlcnNpb24gd2FybmluZ3MsCisrICAgYnV0IGlzIG5vdCByZXF1aXJlZC4gKi8KKysjICAgZGVmaW5lIE1BWF9CVUZfU0laRSAgNjU1MDBMCisrIyAgIGRlZmluZSBSRUFMTE9DKHAscykgcmVhbGxvYyAoKHApLCAoc2l6ZV90KSAocykpCisrIyAgZWxzZQorKyMgICBkZWZpbmUgTUFYX0JVRl9TSVpFICgxTCA8PCAxNikKKysjICAgZGVmaW5lIFJFQUxMT0MocCxzKSByZWFsbG9jICgocCksIChzKSkKKysjICBlbmRpZgorKworKy8qIEV4dGVuZCB0aGUgYnVmZmVyIGJ5IHR3aWNlIGl0cyBjdXJyZW50IHNpemUgdmlhIHJlYWxsb2MgYW5kCisrICAgcmVzZXQgdGhlIHBvaW50ZXJzIHRoYXQgcG9pbnRlZCBpbnRvIHRoZSBvbGQgYmxvY2sgdG8gcG9pbnQgdG8gdGhlCisrICAgY29ycmVjdCBwbGFjZXMgaW4gdGhlIG5ldyBvbmUuICBJZiBleHRlbmRpbmcgdGhlIGJ1ZmZlciByZXN1bHRzIGluIGl0CisrICAgYmVpbmcgbGFyZ2VyIHRoYW4gTUFYX0JVRl9TSVpFLCB0aGVuIGZsYWcgbWVtb3J5IGV4aGF1c3RlZC4gICovCisrIyAgaWZuZGVmIF9fQk9VTkRFRF9QT0lOVEVSU19fCisrIyAgICBkZWZpbmUgX19CT1VOREVEX1BPSU5URVJTX18gMAorKyMgIGVuZGlmCisrIyAgaWYgX19CT1VOREVEX1BPSU5URVJTX18KKysjICAgZGVmaW5lIFNFVF9ISUdIX0JPVU5EKFApIChfX3B0cmhpZ2ggKFApID0gX19wdHJsb3cgKFApICsgYnVmcC0+YWxsb2NhdGVkKQorKyMgICBkZWZpbmUgTU9WRV9CVUZGRVJfUE9JTlRFUihQKSBcCisrICAoX19wdHJsb3cgKFApICs9IGluY3IsIFNFVF9ISUdIX0JPVU5EIChQKSwgX19wdHJ2YWx1ZSAoUCkgKz0gaW5jcikKKysjICAgZGVmaW5lIEVMU0VfRVhURU5EX0JVRkZFUl9ISUdIX0JPVU5ECVwKKysgIGVsc2UJCQkJCQlcCisrICAgIHsJCQkJCQlcCisrICAgICAgU0VUX0hJR0hfQk9VTkQgKGIpOwkJCVwKKysgICAgICBTRVRfSElHSF9CT1VORCAoYmVnYWx0KTsJCQlcCisrICAgICAgaWYgKGZpeHVwX2FsdF9qdW1wKQkJCVwKKysJU0VUX0hJR0hfQk9VTkQgKGZpeHVwX2FsdF9qdW1wKTsJXAorKyAgICAgIGlmIChsYXN0c3RhcnQpCQkJCVwKKysJU0VUX0hJR0hfQk9VTkQgKGxhc3RzdGFydCk7CQlcCisrICAgICAgaWYgKHBlbmRpbmdfZXhhY3QpCQkJXAorKwlTRVRfSElHSF9CT1VORCAocGVuZGluZ19leGFjdCk7CQlcCisrICAgIH0KKysjICBlbHNlCisrIyAgIGRlZmluZSBNT1ZFX0JVRkZFUl9QT0lOVEVSKFApIChQKSArPSBpbmNyCisrIyAgIGRlZmluZSBFTFNFX0VYVEVORF9CVUZGRVJfSElHSF9CT1VORAorKyMgIGVuZGlmCisrIyBlbmRpZiAvKiBub3QgREVGSU5FRF9PTkNFICovCisrCisrIyBpZmRlZiBXQ0hBUgorKyMgIGRlZmluZSBFWFRFTkRfQlVGRkVSKCkJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBVQ0hBUl9UICpvbGRfYnVmZmVyID0gQ09NUElMRURfQlVGRkVSX1ZBUjsJCQkJXAorKyAgICBpbnQgd2NoYXJfY291bnQ7CQkJCQkJCVwKKysgICAgaWYgKGJ1ZnAtPmFsbG9jYXRlZCArIHNpemVvZihVQ0hBUl9UKSA+IE1BWF9CVUZfU0laRSkJCVwKKysgICAgICByZXR1cm4gUkVHX0VTSVpFOwkJCQkJCQlcCisrICAgIGJ1ZnAtPmFsbG9jYXRlZCA8PD0gMTsJCQkJCQlcCisrICAgIGlmIChidWZwLT5hbGxvY2F0ZWQgPiBNQVhfQlVGX1NJWkUpCQkJCQlcCisrICAgICAgYnVmcC0+YWxsb2NhdGVkID0gTUFYX0JVRl9TSVpFOwkJCQkJXAorKyAgICAvKiBIb3cgbWFueSBjaGFyYWN0ZXJzIHRoZSBuZXcgYnVmZmVyIGNhbiBoYXZlPyAgKi8JCQlcCisrICAgIHdjaGFyX2NvdW50ID0gYnVmcC0+YWxsb2NhdGVkIC8gc2l6ZW9mKFVDSEFSX1QpOwkJCVwKKysgICAgaWYgKHdjaGFyX2NvdW50ID09IDApIHdjaGFyX2NvdW50ID0gMTsJCQkJXAorKyAgICAvKiBUcnVuY2F0ZSB0aGUgYnVmZmVyIHRvIENIQVJfVCBhbGlnbi4gICovCQkJXAorKyAgICBidWZwLT5hbGxvY2F0ZWQgPSB3Y2hhcl9jb3VudCAqIHNpemVvZihVQ0hBUl9UKTsJCQlcCisrICAgIFJFVEFMTE9DIChDT01QSUxFRF9CVUZGRVJfVkFSLCB3Y2hhcl9jb3VudCwgVUNIQVJfVCk7CQlcCisrICAgIGJ1ZnAtPmJ1ZmZlciA9IChjaGFyKilDT01QSUxFRF9CVUZGRVJfVkFSOwkJCQlcCisrICAgIGlmIChDT01QSUxFRF9CVUZGRVJfVkFSID09IE5VTEwpCQkJCQlcCisrICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CQkJCQkJXAorKyAgICAvKiBJZiB0aGUgYnVmZmVyIG1vdmVkLCBtb3ZlIGFsbCB0aGUgcG9pbnRlcnMgaW50byBpdC4gICovCQlcCisrICAgIGlmIChvbGRfYnVmZmVyICE9IENPTVBJTEVEX0JVRkZFUl9WQVIpCQkJCVwKKysgICAgICB7CQkJCQkJCQkJXAorKwlpbnQgaW5jciA9IENPTVBJTEVEX0JVRkZFUl9WQVIgLSBvbGRfYnVmZmVyOwkJCVwKKysJTU9WRV9CVUZGRVJfUE9JTlRFUiAoYik7CQkJCQlcCisrCU1PVkVfQlVGRkVSX1BPSU5URVIgKGJlZ2FsdCk7CQkJCQlcCisrCWlmIChmaXh1cF9hbHRfanVtcCkJCQkJCQlcCisrCSAgTU9WRV9CVUZGRVJfUE9JTlRFUiAoZml4dXBfYWx0X2p1bXApOwkJCQlcCisrCWlmIChsYXN0c3RhcnQpCQkJCQkJCVwKKysJICBNT1ZFX0JVRkZFUl9QT0lOVEVSIChsYXN0c3RhcnQpOwkJCQlcCisrCWlmIChwZW5kaW5nX2V4YWN0KQkJCQkJCVwKKysJICBNT1ZFX0JVRkZFUl9QT0lOVEVSIChwZW5kaW5nX2V4YWN0KTsJCQkJXAorKyAgICAgIH0JCQkJCQkJCQlcCisrICAgIEVMU0VfRVhURU5EX0JVRkZFUl9ISUdIX0JPVU5ECQkJCQlcCisrICB9IHdoaWxlICgwKQorKyMgZWxzZSAvKiBCWVRFICovCisrIyAgZGVmaW5lIEVYVEVORF9CVUZGRVIoKQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIFVDSEFSX1QgKm9sZF9idWZmZXIgPSBDT01QSUxFRF9CVUZGRVJfVkFSOwkJCQlcCisrICAgIGlmIChidWZwLT5hbGxvY2F0ZWQgPT0gTUFYX0JVRl9TSVpFKQkJCQlcCisrICAgICAgcmV0dXJuIFJFR19FU0laRTsJCQkJCQkJXAorKyAgICBidWZwLT5hbGxvY2F0ZWQgPDw9IDE7CQkJCQkJXAorKyAgICBpZiAoYnVmcC0+YWxsb2NhdGVkID4gTUFYX0JVRl9TSVpFKQkJCQkJXAorKyAgICAgIGJ1ZnAtPmFsbG9jYXRlZCA9IE1BWF9CVUZfU0laRTsJCQkJCVwKKysgICAgYnVmcC0+YnVmZmVyID0gKFVDSEFSX1QgKikgUkVBTExPQyAoQ09NUElMRURfQlVGRkVSX1ZBUiwJCVwKKysJCQkJCQlidWZwLT5hbGxvY2F0ZWQpOwlcCisrICAgIGlmIChDT01QSUxFRF9CVUZGRVJfVkFSID09IE5VTEwpCQkJCQlcCisrICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CQkJCQkJXAorKyAgICAvKiBJZiB0aGUgYnVmZmVyIG1vdmVkLCBtb3ZlIGFsbCB0aGUgcG9pbnRlcnMgaW50byBpdC4gICovCQlcCisrICAgIGlmIChvbGRfYnVmZmVyICE9IENPTVBJTEVEX0JVRkZFUl9WQVIpCQkJCVwKKysgICAgICB7CQkJCQkJCQkJXAorKwlpbnQgaW5jciA9IENPTVBJTEVEX0JVRkZFUl9WQVIgLSBvbGRfYnVmZmVyOwkJCVwKKysJTU9WRV9CVUZGRVJfUE9JTlRFUiAoYik7CQkJCQlcCisrCU1PVkVfQlVGRkVSX1BPSU5URVIgKGJlZ2FsdCk7CQkJCQlcCisrCWlmIChmaXh1cF9hbHRfanVtcCkJCQkJCQlcCisrCSAgTU9WRV9CVUZGRVJfUE9JTlRFUiAoZml4dXBfYWx0X2p1bXApOwkJCQlcCisrCWlmIChsYXN0c3RhcnQpCQkJCQkJCVwKKysJICBNT1ZFX0JVRkZFUl9QT0lOVEVSIChsYXN0c3RhcnQpOwkJCQlcCisrCWlmIChwZW5kaW5nX2V4YWN0KQkJCQkJCVwKKysJICBNT1ZFX0JVRkZFUl9QT0lOVEVSIChwZW5kaW5nX2V4YWN0KTsJCQkJXAorKyAgICAgIH0JCQkJCQkJCQlcCisrICAgIEVMU0VfRVhURU5EX0JVRkZFUl9ISUdIX0JPVU5ECQkJCQlcCisrICB9IHdoaWxlICgwKQorKyMgZW5kaWYgLyogV0NIQVIgKi8KKysKKysjIGlmbmRlZiBERUZJTkVEX09OQ0UKKysvKiBTaW5jZSB3ZSBoYXZlIG9uZSBieXRlIHJlc2VydmVkIGZvciB0aGUgcmVnaXN0ZXIgbnVtYmVyIGFyZ3VtZW50IHRvCisrICAge3N0YXJ0LHN0b3B9X21lbW9yeSwgdGhlIG1heGltdW0gbnVtYmVyIG9mIGdyb3VwcyB3ZSBjYW4gcmVwb3J0CisrICAgdGhpbmdzIGFib3V0IGlzIHdoYXQgZml0cyBpbiB0aGF0IGJ5dGUuICAqLworKyMgIGRlZmluZSBNQVhfUkVHTlVNIDI1NQorKworKy8qIEJ1dCBwYXR0ZXJucyBjYW4gaGF2ZSBtb3JlIHRoYW4gYE1BWF9SRUdOVU0nIHJlZ2lzdGVycy4gIFdlIGp1c3QKKysgICBpZ25vcmUgdGhlIGV4Y2Vzcy4gICovCisrdHlwZWRlZiB1bnNpZ25lZCByZWdudW1fdDsKKysKKysKKysvKiBNYWNyb3MgZm9yIHRoZSBjb21waWxlIHN0YWNrLiAgKi8KKysKKysvKiBTaW5jZSBvZmZzZXRzIGNhbiBnbyBlaXRoZXIgZm9yd2FyZHMgb3IgYmFja3dhcmRzLCB0aGlzIHR5cGUgbmVlZHMgdG8KKysgICBiZSBhYmxlIHRvIGhvbGQgdmFsdWVzIGZyb20gLShNQVhfQlVGX1NJWkUgLSAxKSB0byBNQVhfQlVGX1NJWkUgLSAxLiAgKi8KKysvKiBpbnQgbWF5IGJlIG5vdCBlbm91Z2ggd2hlbiBzaXplb2YoaW50KSA9PSAyLiAgKi8KKyt0eXBlZGVmIGxvbmcgcGF0dGVybl9vZmZzZXRfdDsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIHBhdHRlcm5fb2Zmc2V0X3QgYmVnYWx0X29mZnNldDsKKysgIHBhdHRlcm5fb2Zmc2V0X3QgZml4dXBfYWx0X2p1bXA7CisrICBwYXR0ZXJuX29mZnNldF90IGlubmVyX2dyb3VwX29mZnNldDsKKysgIHBhdHRlcm5fb2Zmc2V0X3QgbGFzdHN0YXJ0X29mZnNldDsKKysgIHJlZ251bV90IHJlZ251bTsKKyt9IGNvbXBpbGVfc3RhY2tfZWx0X3Q7CisrCisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBjb21waWxlX3N0YWNrX2VsdF90ICpzdGFjazsKKysgIHVuc2lnbmVkIHNpemU7CisrICB1bnNpZ25lZCBhdmFpbDsJCQkvKiBPZmZzZXQgb2YgbmV4dCBvcGVuIHBvc2l0aW9uLiAgKi8KKyt9IGNvbXBpbGVfc3RhY2tfdHlwZTsKKysKKysKKysjICBkZWZpbmUgSU5JVF9DT01QSUxFX1NUQUNLX1NJWkUgMzIKKysKKysjICBkZWZpbmUgQ09NUElMRV9TVEFDS19FTVBUWSAgKGNvbXBpbGVfc3RhY2suYXZhaWwgPT0gMCkKKysjICBkZWZpbmUgQ09NUElMRV9TVEFDS19GVUxMICAoY29tcGlsZV9zdGFjay5hdmFpbCA9PSBjb21waWxlX3N0YWNrLnNpemUpCisrCisrLyogVGhlIG5leHQgYXZhaWxhYmxlIGVsZW1lbnQuICAqLworKyMgIGRlZmluZSBDT01QSUxFX1NUQUNLX1RPUCAoY29tcGlsZV9zdGFjay5zdGFja1tjb21waWxlX3N0YWNrLmF2YWlsXSkKKysKKysjIGVuZGlmIC8qIG5vdCBERUZJTkVEX09OQ0UgKi8KKysKKysvKiBTZXQgdGhlIGJpdCBmb3IgY2hhcmFjdGVyIEMgaW4gYSBsaXN0LiAgKi8KKysjIGlmbmRlZiBERUZJTkVEX09OQ0UKKysjICBkZWZpbmUgU0VUX0xJU1RfQklUKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIChiWygodW5zaWduZWQgY2hhcikgKGMpKSAvIEJZVEVXSURUSF0gICAgICAgICAgICAgICBcCisrICAgfD0gMSA8PCAoKCh1bnNpZ25lZCBjaGFyKSBjKSAlIEJZVEVXSURUSCkpCisrIyBlbmRpZiAvKiBERUZJTkVEX09OQ0UgKi8KKysKKysvKiBHZXQgdGhlIG5leHQgdW5zaWduZWQgbnVtYmVyIGluIHRoZSB1bmNvbXBpbGVkIHBhdHRlcm4uICAqLworKyMgZGVmaW5lIEdFVF9VTlNJR05FRF9OVU1CRVIobnVtKSBcCisrICB7CQkJCQkJCQkJXAorKyAgICB3aGlsZSAocCAhPSBwZW5kKQkJCQkJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysJUEFURkVUQ0ggKGMpOwkJCQkJCQlcCisrCWlmIChjIDwgJzAnIHx8IGMgPiAnOScpCQkJCQkJXAorKwkgIGJyZWFrOwkJCQkJCQlcCisrCWlmIChudW0gPD0gUkVfRFVQX01BWCkJCQkJCQlcCisrCSAgewkJCQkJCQkJXAorKwkgICAgaWYgKG51bSA8IDApCQkJCQkJXAorKwkgICAgICBudW0gPSAwOwkJCQkJCQlcCisrCSAgICBudW0gPSBudW0gKiAxMCArIGMgLSAnMCc7CQkJCQlcCisrCSAgfQkJCQkJCQkJXAorKyAgICAgIH0JCQkJCQkJCQlcCisrICB9CisrCisrIyBpZm5kZWYgREVGSU5FRF9PTkNFCisrIyAgaWYgV0lERV9DSEFSX1NVUFBPUlQKKysvKiBUaGUgR05VIEMgbGlicmFyeSBwcm92aWRlcyBzdXBwb3J0IGZvciB1c2VyLWRlZmluZWQgY2hhcmFjdGVyIGNsYXNzZXMKKysgICBhbmQgdGhlIGZ1bmN0aW9ucyBmcm9tIElTTyBDIGFtZW5kZW1lbnQgMS4gICovCisrIyAgIGlmZGVmIENIQVJDTEFTU19OQU1FX01BWAorKyMgICAgZGVmaW5lIENIQVJfQ0xBU1NfTUFYX0xFTkdUSCBDSEFSQ0xBU1NfTkFNRV9NQVgKKysjICAgZWxzZQorKy8qIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBidXQgc29tZSBpbXBsZW1lbnRhdGlvbiBtaWdodCBzdGlsbCBoYXZlIHRoaXMKKysgICBwcm9ibGVtLiAgVXNlIGEgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlLiAgKi8KKysjICAgIGRlZmluZSBDSEFSX0NMQVNTX01BWF9MRU5HVEggMjU2CisrIyAgIGVuZGlmCisrCisrIyAgIGlmZGVmIF9MSUJDCisrIyAgICBkZWZpbmUgSVNfQ0hBUl9DTEFTUyhzdHJpbmcpIF9fd2N0eXBlIChzdHJpbmcpCisrIyAgIGVsc2UKKysjICAgIGRlZmluZSBJU19DSEFSX0NMQVNTKHN0cmluZykgd2N0eXBlIChzdHJpbmcpCisrIyAgIGVuZGlmCisrIyAgZWxzZQorKyMgICBkZWZpbmUgQ0hBUl9DTEFTU19NQVhfTEVOR1RIICA2IC8qIE5hbWVseSwgYHhkaWdpdCcuICAqLworKworKyMgICBkZWZpbmUgSVNfQ0hBUl9DTEFTUyhzdHJpbmcpCQkJCQlcCisrICAgKFNUUkVRIChzdHJpbmcsICJhbHBoYSIpIHx8IFNUUkVRIChzdHJpbmcsICJ1cHBlciIpCQkJXAorKyAgICB8fCBTVFJFUSAoc3RyaW5nLCAibG93ZXIiKSB8fCBTVFJFUSAoc3RyaW5nLCAiZGlnaXQiKQkJXAorKyAgICB8fCBTVFJFUSAoc3RyaW5nLCAiYWxudW0iKSB8fCBTVFJFUSAoc3RyaW5nLCAieGRpZ2l0IikJCVwKKysgICAgfHwgU1RSRVEgKHN0cmluZywgInNwYWNlIikgfHwgU1RSRVEgKHN0cmluZywgInByaW50IikJCVwKKysgICAgfHwgU1RSRVEgKHN0cmluZywgInB1bmN0IikgfHwgU1RSRVEgKHN0cmluZywgImdyYXBoIikJCVwKKysgICAgfHwgU1RSRVEgKHN0cmluZywgImNudHJsIikgfHwgU1RSRVEgKHN0cmluZywgImJsYW5rIikpCisrIyAgZW5kaWYKKysjIGVuZGlmIC8qIERFRklORURfT05DRSAqLworKwwKKysjIGlmbmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKKysKKysvKiBJZiB3ZSBjYW5ub3QgYWxsb2NhdGUgbGFyZ2Ugb2JqZWN0cyB3aXRoaW4gcmVfbWF0Y2hfMl9pbnRlcm5hbCwKKysgICB3ZSBtYWtlIHRoZSBmYWlsIHN0YWNrIGFuZCByZWdpc3RlciB2ZWN0b3JzIGdsb2JhbC4KKysgICBUaGUgZmFpbCBzdGFjaywgd2UgZ3JvdyB0byB0aGUgbWF4aW11bSBzaXplIHdoZW4gYSByZWdleHAKKysgICBpcyBjb21waWxlZC4KKysgICBUaGUgcmVnaXN0ZXIgdmVjdG9ycywgd2UgYWRqdXN0IGluIHNpemUgZWFjaCB0aW1lIHdlCisrICAgY29tcGlsZSBhIHJlZ2V4cCwgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJzIGl0IG5lZWRzLiAgKi8KKysKKytzdGF0aWMgUFJFRklYKGZhaWxfc3RhY2tfdHlwZSkgZmFpbF9zdGFjazsKKysKKysvKiBTaXplIHdpdGggd2hpY2ggdGhlIGZvbGxvd2luZyB2ZWN0b3JzIGFyZSBjdXJyZW50bHkgYWxsb2NhdGVkLgorKyAgIFRoYXQgaXMgc28gd2UgY2FuIG1ha2UgdGhlbSBiaWdnZXIgYXMgbmVlZGVkLAorKyAgIGJ1dCBuZXZlciBtYWtlIHRoZW0gc21hbGxlci4gICovCisrIyAgaWZkZWYgREVGSU5FRF9PTkNFCisrc3RhdGljIGludCByZWdzX2FsbG9jYXRlZF9zaXplOworKworK3N0YXRpYyBjb25zdCBjaGFyICoqICAgICByZWdzdGFydCwgKiogICAgIHJlZ2VuZDsKKytzdGF0aWMgY29uc3QgY2hhciAqKiBvbGRfcmVnc3RhcnQsICoqIG9sZF9yZWdlbmQ7Cisrc3RhdGljIGNvbnN0IGNoYXIgKipiZXN0X3JlZ3N0YXJ0LCAqKmJlc3RfcmVnZW5kOworK3N0YXRpYyBjb25zdCBjaGFyICoqcmVnX2R1bW15OworKyMgIGVuZGlmIC8qIERFRklORURfT05DRSAqLworKworK3N0YXRpYyBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqUFJFRklYKHJlZ19pbmZvKTsKKytzdGF0aWMgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKlBSRUZJWChyZWdfaW5mb19kdW1teSk7CisrCisrLyogTWFrZSB0aGUgcmVnaXN0ZXIgdmVjdG9ycyBiaWcgZW5vdWdoIGZvciBOVU1fUkVHUyByZWdpc3RlcnMsCisrICAgYnV0IGRvbid0IG1ha2UgdGhlbSBzbWFsbGVyLiAgKi8KKysKKytzdGF0aWMgdm9pZAorK1BSRUZJWChyZWdleF9ncm93X3JlZ2lzdGVycykgKGludCBudW1fcmVncykKKyt7CisrICBpZiAobnVtX3JlZ3MgPiByZWdzX2FsbG9jYXRlZF9zaXplKQorKyAgICB7CisrICAgICAgUkVUQUxMT0NfSUYgKHJlZ3N0YXJ0LAkgbnVtX3JlZ3MsIGNvbnN0IGNoYXIgKik7CisrICAgICAgUkVUQUxMT0NfSUYgKHJlZ2VuZCwJIG51bV9yZWdzLCBjb25zdCBjaGFyICopOworKyAgICAgIFJFVEFMTE9DX0lGIChvbGRfcmVnc3RhcnQsIG51bV9yZWdzLCBjb25zdCBjaGFyICopOworKyAgICAgIFJFVEFMTE9DX0lGIChvbGRfcmVnZW5kLAkgbnVtX3JlZ3MsIGNvbnN0IGNoYXIgKik7CisrICAgICAgUkVUQUxMT0NfSUYgKGJlc3RfcmVnc3RhcnQsIG51bV9yZWdzLCBjb25zdCBjaGFyICopOworKyAgICAgIFJFVEFMTE9DX0lGIChiZXN0X3JlZ2VuZCwJIG51bV9yZWdzLCBjb25zdCBjaGFyICopOworKyAgICAgIFJFVEFMTE9DX0lGIChQUkVGSVgocmVnX2luZm8pLCBudW1fcmVncywgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkpOworKyAgICAgIFJFVEFMTE9DX0lGIChyZWdfZHVtbXksCSBudW1fcmVncywgY29uc3QgY2hhciAqKTsKKysgICAgICBSRVRBTExPQ19JRiAoUFJFRklYKHJlZ19pbmZvX2R1bW15KSwgbnVtX3JlZ3MsIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpKTsKKysKKysgICAgICByZWdzX2FsbG9jYXRlZF9zaXplID0gbnVtX3JlZ3M7CisrICAgIH0KKyt9CisrCisrIyBlbmRpZiAvKiBub3QgTUFUQ0hfTUFZX0FMTE9DQVRFICovCisrDAorKyMgaWZuZGVmIERFRklORURfT05DRQorK3N0YXRpYyBib29sZWFuIGdyb3VwX2luX2NvbXBpbGVfc3RhY2sgKGNvbXBpbGVfc3RhY2tfdHlwZSBjb21waWxlX3N0YWNrLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ251bV90IHJlZ251bSk7CisrIyBlbmRpZiAvKiBub3QgREVGSU5FRF9PTkNFICovCisrCisrLyogYHJlZ2V4X2NvbXBpbGUnIGNvbXBpbGVzIFBBVFRFUk4gKG9mIGxlbmd0aCBTSVpFKSBhY2NvcmRpbmcgdG8gU1lOVEFYLgorKyAgIFJldHVybnMgb25lIG9mIGVycm9yIGNvZGVzIGRlZmluZWQgaW4gYHJlZ2V4LmgnLCBvciB6ZXJvIGZvciBzdWNjZXNzLgorKworKyAgIEFzc3VtZXMgdGhlIGBhbGxvY2F0ZWQnIChhbmQgcGVyaGFwcyBgYnVmZmVyJykgYW5kIGB0cmFuc2xhdGUnCisrICAgZmllbGRzIGFyZSBzZXQgaW4gQlVGUCBvbiBlbnRyeS4KKysKKysgICBJZiBpdCBzdWNjZWVkcywgcmVzdWx0cyBhcmUgcHV0IGluIEJVRlAgKGlmIGl0IHJldHVybnMgYW4gZXJyb3IsIHRoZQorKyAgIGNvbnRlbnRzIG9mIEJVRlAgYXJlIHVuZGVmaW5lZCk6CisrICAgICBgYnVmZmVyJyBpcyB0aGUgY29tcGlsZWQgcGF0dGVybjsKKysgICAgIGBzeW50YXgnIGlzIHNldCB0byBTWU5UQVg7CisrICAgICBgdXNlZCcgaXMgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlIGNvbXBpbGVkIHBhdHRlcm47CisrICAgICBgZmFzdG1hcF9hY2N1cmF0ZScgaXMgemVybzsKKysgICAgIGByZV9uc3ViJyBpcyB0aGUgbnVtYmVyIG9mIHN1YmV4cHJlc3Npb25zIGluIFBBVFRFUk47CisrICAgICBgbm90X2JvbCcgYW5kIGBub3RfZW9sJyBhcmUgemVybzsKKysKKysgICBUaGUgYGZhc3RtYXAnIGFuZCBgbmV3bGluZV9hbmNob3InIGZpZWxkcyBhcmUgbmVpdGhlcgorKyAgIGV4YW1pbmVkIG5vciBzZXQuICAqLworKworKy8qIFJldHVybiwgZnJlZWluZyBzdG9yYWdlIHdlIGFsbG9jYXRlZC4gICovCisrIyBpZmRlZiBXQ0hBUgorKyMgIGRlZmluZSBGUkVFX1NUQUNLX1JFVFVSTih2YWx1ZSkJCVwKKysgIHJldHVybiAoZnJlZShwYXR0ZXJuKSwgZnJlZShtYnNfb2Zmc2V0KSwgZnJlZShpc19iaW5hcnkpLCBmcmVlIChjb21waWxlX3N0YWNrLnN0YWNrKSwgdmFsdWUpCisrIyBlbHNlCisrIyAgZGVmaW5lIEZSRUVfU1RBQ0tfUkVUVVJOKHZhbHVlKQkJXAorKyAgcmV0dXJuIChmcmVlIChjb21waWxlX3N0YWNrLnN0YWNrKSwgdmFsdWUpCisrIyBlbmRpZiAvKiBXQ0hBUiAqLworKworK3N0YXRpYyByZWdfZXJyY29kZV90CisrUFJFRklYKHJlZ2V4X2NvbXBpbGUpIChjb25zdCBjaGFyICpBUkdfUFJFRklYKHBhdHRlcm4pLAorKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IEFSR19QUkVGSVgoc2l6ZSksIHJlZ19zeW50YXhfdCBzeW50YXgsCisrICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApCisreworKyAgLyogV2UgZmV0Y2ggY2hhcmFjdGVycyBmcm9tIFBBVFRFUk4gaGVyZS4gIEV2ZW4gdGhvdWdoIFBBVFRFUk4gaXMKKysgICAgIGBjaGFyIConIChpLmUuLCBzaWduZWQpLCB3ZSBkZWNsYXJlIHRoZXNlIHZhcmlhYmxlcyBhcyB1bnNpZ25lZCwgc28KKysgICAgIHRoZXkgY2FuIGJlIHJlbGlhYmx5IHVzZWQgYXMgYXJyYXkgaW5kaWNlcy4gICovCisrICByZWdpc3RlciBVQ0hBUl9UIGMsIGMxOworKworKyNpZmRlZiBXQ0hBUgorKyAgLyogQSB0ZW1wb3Jhcnkgc3BhY2UgdG8ga2VlcCB3Y2hhcl90IHBhdHRlcm4gYW5kIGNvbXBpbGVkIHBhdHRlcm4uICAqLworKyAgQ0hBUl9UICpwYXR0ZXJuLCAqQ09NUElMRURfQlVGRkVSX1ZBUjsKKysgIHNpemVfdCBzaXplOworKyAgLyogb2Zmc2V0IGJ1ZmZlciBmb3Igb3B0aW1pemF0aW9uLiBTZWUgY29udmVydF9tYnNfdG9fd2MuICAqLworKyAgaW50ICptYnNfb2Zmc2V0ID0gTlVMTDsKKysgIC8qIEl0IGhvbGQgd2hldGhlciBlYWNoIHdjaGFyX3QgaXMgYmluYXJ5IGRhdGEgb3Igbm90LiAgKi8KKysgIGNoYXIgKmlzX2JpbmFyeSA9IE5VTEw7CisrICAvKiBBIGZsYWcgd2hldGhlciBleGFjdG4gaXMgaGFuZGxpbmcgYmluYXJ5IGRhdGEgb3Igbm90LiAgKi8KKysgIGNoYXIgaXNfZXhhY3RuX2JpbiA9IEZBTFNFOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgLyogQSByYW5kb20gdGVtcG9yYXJ5IHNwb3QgaW4gUEFUVEVSTi4gICovCisrICBjb25zdCBDSEFSX1QgKnAxOworKworKyAgLyogUG9pbnRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgd2hlcmUgd2Ugc2hvdWxkIGFwcGVuZC4gICovCisrICByZWdpc3RlciBVQ0hBUl9UICpiOworKworKyAgLyogS2VlcHMgdHJhY2sgb2YgdW5jbG9zZWQgZ3JvdXBzLiAgKi8KKysgIGNvbXBpbGVfc3RhY2tfdHlwZSBjb21waWxlX3N0YWNrOworKworKyAgLyogUG9pbnRzIHRvIHRoZSBjdXJyZW50IChlbmRpbmcpIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLiAgKi8KKysjaWZkZWYgV0NIQVIKKysgIGNvbnN0IENIQVJfVCAqcDsKKysgIGNvbnN0IENIQVJfVCAqcGVuZDsKKysjZWxzZSAvKiBCWVRFICovCisrICBjb25zdCBDSEFSX1QgKnAgPSBwYXR0ZXJuOworKyAgY29uc3QgQ0hBUl9UICpwZW5kID0gcGF0dGVybiArIHNpemU7CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAvKiBIb3cgdG8gdHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLiAgKi8KKysgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSA9IGJ1ZnAtPnRyYW5zbGF0ZTsKKysKKysgIC8qIEFkZHJlc3Mgb2YgdGhlIGNvdW50LWJ5dGUgb2YgdGhlIG1vc3QgcmVjZW50bHkgaW5zZXJ0ZWQgYGV4YWN0bicKKysgICAgIGNvbW1hbmQuICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHRlbGwgaWYgYSBuZXcgZXhhY3QtbWF0Y2gKKysgICAgIGNoYXJhY3RlciBjYW4gYmUgYWRkZWQgdG8gdGhhdCBjb21tYW5kIG9yIGlmIHRoZSBjaGFyYWN0ZXIgcmVxdWlyZXMKKysgICAgIGEgbmV3IGBleGFjdG4nIGNvbW1hbmQuICAqLworKyAgVUNIQVJfVCAqcGVuZGluZ19leGFjdCA9IDA7CisrCisrICAvKiBBZGRyZXNzIG9mIHN0YXJ0IG9mIHRoZSBtb3N0IHJlY2VudGx5IGZpbmlzaGVkIGV4cHJlc3Npb24uCisrICAgICBUaGlzIHRlbGxzLCBlLmcuLCBwb3N0Zml4ICogd2hlcmUgdG8gZmluZCB0aGUgc3RhcnQgb2YgaXRzCisrICAgICBvcGVyYW5kLiAgUmVzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiBncm91cHMgYW5kIGFsdGVybmF0aXZlcy4gICovCisrICBVQ0hBUl9UICpsYXN0c3RhcnQgPSAwOworKworKyAgLyogQWRkcmVzcyBvZiBiZWdpbm5pbmcgb2YgcmVnZXhwLCBvciBpbnNpZGUgb2YgbGFzdCBncm91cC4gICovCisrICBVQ0hBUl9UICpiZWdhbHQ7CisrCisrICAvKiBBZGRyZXNzIG9mIHRoZSBwbGFjZSB3aGVyZSBhIGZvcndhcmQganVtcCBzaG91bGQgZ28gdG8gdGhlIGVuZCBvZgorKyAgICAgdGhlIGNvbnRhaW5pbmcgZXhwcmVzc2lvbi4gIEVhY2ggYWx0ZXJuYXRpdmUgb2YgYW4gYG9yJyAtLSBleGNlcHQgdGhlCisrICAgICBsYXN0IC0tIGVuZHMgd2l0aCBhIGZvcndhcmQganVtcCBvZiB0aGlzIHNvcnQuICAqLworKyAgVUNIQVJfVCAqZml4dXBfYWx0X2p1bXAgPSAwOworKworKyAgLyogQ291bnRzIG9wZW4tZ3JvdXBzIGFzIHRoZXkgYXJlIGVuY291bnRlcmVkLiAgUmVtZW1iZXJlZCBmb3IgdGhlCisrICAgICBtYXRjaGluZyBjbG9zZS1ncm91cCBvbiB0aGUgY29tcGlsZSBzdGFjaywgc28gdGhlIHNhbWUgcmVnaXN0ZXIKKysgICAgIG51bWJlciBpcyBwdXQgaW4gdGhlIHN0b3BfbWVtb3J5IGFzIHRoZSBzdGFydF9tZW1vcnkuICAqLworKyAgcmVnbnVtX3QgcmVnbnVtID0gMDsKKysKKysjaWZkZWYgV0NIQVIKKysgIC8qIEluaXRpYWxpemUgdGhlIHdjaGFyX3QgUEFUVEVSTiBhbmQgb2Zmc2V0X2J1ZmZlci4gICovCisrICBwID0gcGVuZCA9IHBhdHRlcm4gPSBUQUxMT0MoY3NpemUgKyAxLCBDSEFSX1QpOworKyAgbWJzX29mZnNldCA9IFRBTExPQyhjc2l6ZSArIDEsIGludCk7CisrICBpc19iaW5hcnkgPSBUQUxMT0MoY3NpemUgKyAxLCBjaGFyKTsKKysgIGlmIChwYXR0ZXJuID09IE5VTEwgfHwgbWJzX29mZnNldCA9PSBOVUxMIHx8IGlzX2JpbmFyeSA9PSBOVUxMKQorKyAgICB7CisrICAgICAgZnJlZShwYXR0ZXJuKTsKKysgICAgICBmcmVlKG1ic19vZmZzZXQpOworKyAgICAgIGZyZWUoaXNfYmluYXJ5KTsKKysgICAgICByZXR1cm4gUkVHX0VTUEFDRTsKKysgICAgfQorKyAgcGF0dGVybltjc2l6ZV0gPSBMJ1wwJzsJLyogc2VudGluZWwgKi8KKysgIHNpemUgPSBjb252ZXJ0X21ic190b193Y3MocGF0dGVybiwgY3BhdHRlcm4sIGNzaXplLCBtYnNfb2Zmc2V0LCBpc19iaW5hcnkpOworKyAgcGVuZCA9IHAgKyBzaXplOworKyAgaWYgKHNpemUgPCAwKQorKyAgICB7CisrICAgICAgZnJlZShwYXR0ZXJuKTsKKysgICAgICBmcmVlKG1ic19vZmZzZXQpOworKyAgICAgIGZyZWUoaXNfYmluYXJ5KTsKKysgICAgICByZXR1cm4gUkVHX0JBRFBBVDsKKysgICAgfQorKyNlbmRpZgorKworKyNpZmRlZiBERUJVRworKyAgREVCVUdfUFJJTlQxICgiXG5Db21waWxpbmcgcGF0dGVybjogIik7CisrICBpZiAoZGVidWcpCisrICAgIHsKKysgICAgICB1bnNpZ25lZCBkZWJ1Z19jb3VudDsKKysKKysgICAgICBmb3IgKGRlYnVnX2NvdW50ID0gMDsgZGVidWdfY291bnQgPCBzaXplOyBkZWJ1Z19jb3VudCsrKQorKyAgICAgICAgUFVUX0NIQVIgKHBhdHRlcm5bZGVidWdfY291bnRdKTsKKysgICAgICBwdXRjaGFyICgnXG4nKTsKKysgICAgfQorKyNlbmRpZiAvKiBERUJVRyAqLworKworKyAgLyogSW5pdGlhbGl6ZSB0aGUgY29tcGlsZSBzdGFjay4gICovCisrICBjb21waWxlX3N0YWNrLnN0YWNrID0gVEFMTE9DIChJTklUX0NPTVBJTEVfU1RBQ0tfU0laRSwgY29tcGlsZV9zdGFja19lbHRfdCk7CisrICBpZiAoY29tcGlsZV9zdGFjay5zdGFjayA9PSBOVUxMKQorKyAgICB7CisrI2lmZGVmIFdDSEFSCisrICAgICAgZnJlZShwYXR0ZXJuKTsKKysgICAgICBmcmVlKG1ic19vZmZzZXQpOworKyAgICAgIGZyZWUoaXNfYmluYXJ5KTsKKysjZW5kaWYKKysgICAgICByZXR1cm4gUkVHX0VTUEFDRTsKKysgICAgfQorKworKyAgY29tcGlsZV9zdGFjay5zaXplID0gSU5JVF9DT01QSUxFX1NUQUNLX1NJWkU7CisrICBjb21waWxlX3N0YWNrLmF2YWlsID0gMDsKKysKKysgIC8qIEluaXRpYWxpemUgdGhlIHBhdHRlcm4gYnVmZmVyLiAgKi8KKysgIGJ1ZnAtPnN5bnRheCA9IHN5bnRheDsKKysgIGJ1ZnAtPmZhc3RtYXBfYWNjdXJhdGUgPSAwOworKyAgYnVmcC0+bm90X2JvbCA9IGJ1ZnAtPm5vdF9lb2wgPSAwOworKworKyAgLyogU2V0IGB1c2VkJyB0byB6ZXJvLCBzbyB0aGF0IGlmIHdlIHJldHVybiBhbiBlcnJvciwgdGhlIHBhdHRlcm4KKysgICAgIHByaW50ZXIgKGZvciBkZWJ1Z2dpbmcpIHdpbGwgdGhpbmsgdGhlcmUncyBubyBwYXR0ZXJuLiAgV2UgcmVzZXQgaXQKKysgICAgIGF0IHRoZSBlbmQuICAqLworKyAgYnVmcC0+dXNlZCA9IDA7CisrCisrICAvKiBBbHdheXMgY291bnQgZ3JvdXBzLCB3aGV0aGVyIG9yIG5vdCBidWZwLT5ub19zdWIgaXMgc2V0LiAgKi8KKysgIGJ1ZnAtPnJlX25zdWIgPSAwOworKworKyNpZiAhZGVmaW5lZCBlbWFjcyAmJiAhZGVmaW5lZCBTWU5UQVhfVEFCTEUKKysgIC8qIEluaXRpYWxpemUgdGhlIHN5bnRheCB0YWJsZS4gICovCisrICAgaW5pdF9zeW50YXhfb25jZSAoKTsKKysjZW5kaWYKKysKKysgIGlmIChidWZwLT5hbGxvY2F0ZWQgPT0gMCkKKysgICAgeworKyAgICAgIGlmIChidWZwLT5idWZmZXIpCisrCXsgLyogSWYgemVybyBhbGxvY2F0ZWQsIGJ1dCBidWZmZXIgaXMgbm9uLW51bGwsIHRyeSB0byByZWFsbG9jCisrICAgICAgICAgICAgIGVub3VnaCBzcGFjZS4gIFRoaXMgbG9zZXMgaWYgYnVmZmVyJ3MgYWRkcmVzcyBpcyBib2d1cywgYnV0CisrICAgICAgICAgICAgIHRoYXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4gICovCisrI2lmZGVmIFdDSEFSCisrCSAgLyogRnJlZSBidWZwLT5idWZmZXIgYW5kIGFsbG9jYXRlIGFuIGFycmF5IGZvciB3Y2hhcl90IHBhdHRlcm4KKysJICAgICBidWZmZXIuICAqLworKyAgICAgICAgICBmcmVlKGJ1ZnAtPmJ1ZmZlcik7CisrICAgICAgICAgIENPTVBJTEVEX0JVRkZFUl9WQVIgPSBUQUxMT0MgKElOSVRfQlVGX1NJWkUvc2l6ZW9mKFVDSEFSX1QpLAorKwkJCQkJVUNIQVJfVCk7CisrI2Vsc2UKKysgICAgICAgICAgUkVUQUxMT0MgKENPTVBJTEVEX0JVRkZFUl9WQVIsIElOSVRfQlVGX1NJWkUsIFVDSEFSX1QpOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIHsgLyogQ2FsbGVyIGRpZCBub3QgYWxsb2NhdGUgYSBidWZmZXIuICBEbyBpdCBmb3IgdGhlbS4gICovCisrICAgICAgICAgIENPTVBJTEVEX0JVRkZFUl9WQVIgPSBUQUxMT0MgKElOSVRfQlVGX1NJWkUgLyBzaXplb2YoVUNIQVJfVCksCisrCQkJCQlVQ0hBUl9UKTsKKysgICAgICAgIH0KKysKKysgICAgICBpZiAoIUNPTVBJTEVEX0JVRkZFUl9WQVIpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRVNQQUNFKTsKKysjaWZkZWYgV0NIQVIKKysgICAgICBidWZwLT5idWZmZXIgPSAoY2hhciopQ09NUElMRURfQlVGRkVSX1ZBUjsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysgICAgICBidWZwLT5hbGxvY2F0ZWQgPSBJTklUX0JVRl9TSVpFOworKyAgICB9CisrI2lmZGVmIFdDSEFSCisrICBlbHNlCisrICAgIENPTVBJTEVEX0JVRkZFUl9WQVIgPSAoVUNIQVJfVCopIGJ1ZnAtPmJ1ZmZlcjsKKysjZW5kaWYKKysKKysgIGJlZ2FsdCA9IGIgPSBDT01QSUxFRF9CVUZGRVJfVkFSOworKworKyAgLyogTG9vcCB0aHJvdWdoIHRoZSB1bmNvbXBpbGVkIHBhdHRlcm4gdW50aWwgd2UncmUgYXQgdGhlIGVuZC4gICovCisrICB3aGlsZSAocCAhPSBwZW5kKQorKyAgICB7CisrICAgICAgUEFURkVUQ0ggKGMpOworKworKyAgICAgIHN3aXRjaCAoYykKKysgICAgICAgIHsKKysgICAgICAgIGNhc2UgJ14nOgorKyAgICAgICAgICB7CisrICAgICAgICAgICAgaWYgKCAgIC8qIElmIGF0IHN0YXJ0IG9mIHBhdHRlcm4sIGl0J3MgYW4gb3BlcmF0b3IuICAqLworKyAgICAgICAgICAgICAgICAgICBwID09IHBhdHRlcm4gKyAxCisrICAgICAgICAgICAgICAgICAgIC8qIElmIGNvbnRleHQgaW5kZXBlbmRlbnQsIGl0J3MgYW4gb3BlcmF0b3IuICAqLworKyAgICAgICAgICAgICAgICB8fCBzeW50YXggJiBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMKKysgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlLCBkZXBlbmRzIG9uIHdoYXQncyBjb21lIGJlZm9yZS4gICovCisrICAgICAgICAgICAgICAgIHx8IFBSRUZJWChhdF9iZWdsaW5lX2xvY19wKSAocGF0dGVybiwgcCwgc3ludGF4KSkKKysgICAgICAgICAgICAgIEJVRl9QVVNIIChiZWdsaW5lKTsKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICB9CisrICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgY2FzZSAnJCc6CisrICAgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoICAgLyogSWYgYXQgZW5kIG9mIHBhdHRlcm4sIGl0J3MgYW4gb3BlcmF0b3IuICAqLworKyAgICAgICAgICAgICAgICAgICBwID09IHBlbmQKKysgICAgICAgICAgICAgICAgICAgLyogSWYgY29udGV4dCBpbmRlcGVuZGVudCwgaXQncyBhbiBvcGVyYXRvci4gICovCisrICAgICAgICAgICAgICAgIHx8IHN5bnRheCAmIFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUworKyAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UsIGRlcGVuZHMgb24gd2hhdCdzIG5leHQuICAqLworKyAgICAgICAgICAgICAgICB8fCBQUkVGSVgoYXRfZW5kbGluZV9sb2NfcCkgKHAsIHBlbmQsIHN5bnRheCkpCisrICAgICAgICAgICAgICAgQlVGX1BVU0ggKGVuZGxpbmUpOworKyAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgIH0KKysgICAgICAgICAgIGJyZWFrOworKworKworKwljYXNlICcrJzoKKysgICAgICAgIGNhc2UgJz8nOgorKyAgICAgICAgICBpZiAoKHN5bnRheCAmIFJFX0JLX1BMVVNfUU0pCisrICAgICAgICAgICAgICB8fCAoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMpKQorKyAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICBoYW5kbGVfcGx1czoKKysgICAgICAgIGNhc2UgJyonOgorKyAgICAgICAgICAvKiBJZiB0aGVyZSBpcyBubyBwcmV2aW91cyBwYXR0ZXJuLi4uICovCisrICAgICAgICAgIGlmICghbGFzdHN0YXJ0KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGlmIChzeW50YXggJiBSRV9DT05URVhUX0lOVkFMSURfT1BTKQorKyAgICAgICAgICAgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0JBRFJQVCk7CisrICAgICAgICAgICAgICBlbHNlIGlmICghKHN5bnRheCAmIFJFX0NPTlRFWFRfSU5ERVBfT1BTKSkKKysgICAgICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgIHsKKysgICAgICAgICAgICAvKiBBcmUgd2Ugb3B0aW1pemluZyB0aGlzIGp1bXA/ICAqLworKyAgICAgICAgICAgIGJvb2xlYW4ga2VlcF9zdHJpbmdfcCA9IGZhbHNlOworKworKyAgICAgICAgICAgIC8qIDEgbWVhbnMgemVybyAobWFueSkgbWF0Y2hlcyBpcyBhbGxvd2VkLiAgKi8KKysgICAgICAgICAgICBjaGFyIHplcm9fdGltZXNfb2sgPSAwLCBtYW55X3RpbWVzX29rID0gMDsKKysKKysgICAgICAgICAgICAvKiBJZiB0aGVyZSBpcyBhIHNlcXVlbmNlIG9mIHJlcGV0aXRpb24gY2hhcnMsIGNvbGxhcHNlIGl0CisrICAgICAgICAgICAgICAgZG93biB0byBqdXN0IG9uZSAodGhlIHJpZ2h0IG9uZSkuICBXZSBjYW4ndCBjb21iaW5lCisrICAgICAgICAgICAgICAgaW50ZXJ2YWwgb3BlcmF0b3JzIHdpdGggdGhlc2UgYmVjYXVzZSBvZiwgZS5nLiwgYGF7Mn0qJywKKysgICAgICAgICAgICAgICB3aGljaCBzaG91bGQgb25seSBtYXRjaCBhbiBldmVuIG51bWJlciBvZiBgYSdzLiAgKi8KKysKKysgICAgICAgICAgICBmb3IgKDs7KQorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICB6ZXJvX3RpbWVzX29rIHw9IGMgIT0gJysnOworKyAgICAgICAgICAgICAgICBtYW55X3RpbWVzX29rIHw9IGMgIT0gJz8nOworKworKyAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKQorKyAgICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrCisrICAgICAgICAgICAgICAgIGlmIChjID09ICcqJworKyAgICAgICAgICAgICAgICAgICAgfHwgKCEoc3ludGF4ICYgUkVfQktfUExVU19RTSkgJiYgKGMgPT0gJysnIHx8IGMgPT0gJz8nKSkpCisrICAgICAgICAgICAgICAgICAgOworKworKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW50YXggJiBSRV9CS19QTFVTX1FNICAmJiAgYyA9PSAnXFwnKQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUVTQ0FQRSk7CisrCisrICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYzEpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoYzEgPT0gJysnIHx8IGMxID09ICc/JykpCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBQQVRVTkZFVENIOworKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVFVORkVUQ0g7CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgICAgIGMgPSBjMTsKKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBQQVRVTkZFVENIOworKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAvKiBJZiB3ZSBnZXQgaGVyZSwgd2UgZm91bmQgYW5vdGhlciByZXBlYXQgY2hhcmFjdGVyLiAgKi8KKysgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgLyogU3RhciwgZXRjLiBhcHBsaWVkIHRvIGFuIGVtcHR5IHBhdHRlcm4gaXMgZXF1aXZhbGVudAorKyAgICAgICAgICAgICAgIHRvIGFuIGVtcHR5IHBhdHRlcm4uICAqLworKyAgICAgICAgICAgIGlmICghbGFzdHN0YXJ0KQorKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgLyogTm93IHdlIGtub3cgd2hldGhlciBvciBub3QgemVybyBtYXRjaGVzIGlzIGFsbG93ZWQKKysgICAgICAgICAgICAgICBhbmQgYWxzbyB3aGV0aGVyIG9yIG5vdCB0d28gb3IgbW9yZSBtYXRjaGVzIGlzIGFsbG93ZWQuICAqLworKyAgICAgICAgICAgIGlmIChtYW55X3RpbWVzX29rKQorKyAgICAgICAgICAgICAgeyAvKiBNb3JlIHRoYW4gb25lIHJlcGV0aXRpb24gaXMgYWxsb3dlZCwgc28gcHV0IGluIGF0IHRoZQorKyAgICAgICAgICAgICAgICAgICBlbmQgYSBiYWNrd2FyZCByZWxhdGl2ZSBqdW1wIGZyb20gYGInIHRvIGJlZm9yZSB0aGUgbmV4dAorKyAgICAgICAgICAgICAgICAgICBqdW1wIHdlJ3JlIGdvaW5nIHRvIHB1dCBpbiBiZWxvdyAod2hpY2gganVtcHMgZnJvbQorKyAgICAgICAgICAgICAgICAgICBsYXN0c3RhcnQgdG8gYWZ0ZXIgdGhpcyBqdW1wKS4KKysKKysgICAgICAgICAgICAgICAgICAgQnV0IGlmIHdlIGFyZSBhdCB0aGUgYConIGluIHRoZSBleGFjdCBzZXF1ZW5jZSBgLipcbicsCisrICAgICAgICAgICAgICAgICAgIGluc2VydCBhbiB1bmNvbmRpdGlvbmFsIGp1bXAgYmFja3dhcmRzIHRvIHRoZSAuLAorKyAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AuICBUaGlzIHdheSB3ZSBvbmx5CisrICAgICAgICAgICAgICAgICAgIHB1c2ggYSBmYWlsdXJlIHBvaW50IG9uY2UsIGluc3RlYWQgb2YgZXZlcnkgdGltZQorKyAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBsb29wLiAgKi8KKysgICAgICAgICAgICAgICAgYXNzZXJ0IChwIC0gMSA+IHBhdHRlcm4pOworKworKyAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSB0aGUgc3BhY2UgZm9yIHRoZSBqdW1wLiAgKi8KKysgICAgICAgICAgICAgICAgR0VUX0JVRkZFUl9TUEFDRSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKworKyAgICAgICAgICAgICAgICAvKiBXZSBrbm93IHdlIGFyZSBub3QgYXQgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgcGF0dGVybiwKKysgICAgICAgICAgICAgICAgICAgYmVjYXVzZSBsYXN0c3RhcnQgd2FzIG5vbnplcm8uICBBbmQgd2UndmUgYWxyZWFkeQorKyAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRlZCBgcCcsIGJ5IHRoZSB3YXksIHRvIGJlIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIKKysgICAgICAgICAgICAgICAgICAgdGhlIGAqJy4gIERvIHdlIGhhdmUgdG8gZG8gc29tZXRoaW5nIGFuYWxvZ291cyBoZXJlCisrICAgICAgICAgICAgICAgICAgIGZvciBudWxsIGJ5dGVzLCBiZWNhdXNlIG9mIFJFX0RPVF9OT1RfTlVMTD8gICovCisrICAgICAgICAgICAgICAgIGlmIChUUkFOU0xBVEUgKCoocCAtIDIpKSA9PSBUUkFOU0xBVEUgKCcuJykKKysJCSAgICAmJiB6ZXJvX3RpbWVzX29rCisrICAgICAgICAgICAgICAgICAgICAmJiBwIDwgcGVuZCAmJiBUUkFOU0xBVEUgKCpwKSA9PSBUUkFOU0xBVEUgKCdcbicpCisrICAgICAgICAgICAgICAgICAgICAmJiAhKHN5bnRheCAmIFJFX0RPVF9ORVdMSU5FKSkKKysgICAgICAgICAgICAgICAgICB7IC8qIFdlIGhhdmUgLipcbi4gICovCisrICAgICAgICAgICAgICAgICAgICBTVE9SRV9KVU1QIChqdW1wLCBiLCBsYXN0c3RhcnQpOworKyAgICAgICAgICAgICAgICAgICAga2VlcF9zdHJpbmdfcCA9IHRydWU7CisrICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgLyogQW55dGhpbmcgZWxzZS4gICovCisrICAgICAgICAgICAgICAgICAgU1RPUkVfSlVNUCAobWF5YmVfcG9wX2p1bXAsIGIsIGxhc3RzdGFydCAtCisrCQkJICAgICAgKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKSk7CisrCisrICAgICAgICAgICAgICAgIC8qIFdlJ3ZlIGFkZGVkIG1vcmUgc3R1ZmYgdG8gdGhlIGJ1ZmZlci4gICovCisrICAgICAgICAgICAgICAgIGIgKz0gMSArIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgLyogT24gZmFpbHVyZSwganVtcCBmcm9tIGxhc3RzdGFydCB0byBiICsgMywgd2hpY2ggd2lsbCBiZSB0aGUKKysgICAgICAgICAgICAgICBlbmQgb2YgdGhlIGJ1ZmZlciBhZnRlciB0aGlzIGp1bXAgaXMgaW5zZXJ0ZWQuICAqLworKwkgICAgLyogaWZkZWYgV0NIQVIsICdiICsgMSArIE9GRlNFVF9BRERSRVNTX1NJWkUnIGluc3RlYWQgb2YKKysJICAgICAgICdiICsgMycuICAqLworKyAgICAgICAgICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgICBJTlNFUlRfSlVNUCAoa2VlcF9zdHJpbmdfcCA/IG9uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb25fZmFpbHVyZV9qdW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0c3RhcnQsIGIgKyAxICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgICAgcGVuZGluZ19leGFjdCA9IDA7CisrICAgICAgICAgICAgYiArPSAxICsgT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgICAgICAgICAgICBpZiAoIXplcm9fdGltZXNfb2spCisrICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIC8qIEF0IGxlYXN0IG9uZSByZXBldGl0aW9uIGlzIHJlcXVpcmVkLCBzbyBpbnNlcnQgYQorKyAgICAgICAgICAgICAgICAgICBgZHVtbXlfZmFpbHVyZV9qdW1wJyBiZWZvcmUgdGhlIGluaXRpYWwKKysgICAgICAgICAgICAgICAgICAgYG9uX2ZhaWx1cmVfanVtcCcgaW5zdHJ1Y3Rpb24gb2YgdGhlIGxvb3AuIFRoaXMKKysgICAgICAgICAgICAgICAgICAgZWZmZWN0cyBhIHNraXAgb3ZlciB0aGF0IGluc3RydWN0aW9uIHRoZSBmaXJzdCB0aW1lCisrICAgICAgICAgICAgICAgICAgIHdlIGhpdCB0aGF0IGxvb3AuICAqLworKyAgICAgICAgICAgICAgICBHRVRfQlVGRkVSX1NQQUNFICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgICAgICAgIElOU0VSVF9KVU1QIChkdW1teV9mYWlsdXJlX2p1bXAsIGxhc3RzdGFydCwgbGFzdHN0YXJ0ICsKKysJCQkgICAgIDIgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgICAgICAgIGIgKz0gMSArIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKwkgIGJyZWFrOworKworKworKwljYXNlICcuJzoKKysgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysgICAgICAgICAgQlVGX1BVU0ggKGFueWNoYXIpOworKyAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgIGNhc2UgJ1snOgorKyAgICAgICAgICB7CisrICAgICAgICAgICAgYm9vbGVhbiBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKyNpZmRlZiBXQ0hBUgorKwkgICAgQ0hBUl9UIHJhbmdlX3N0YXJ0ID0gMHhmZmZmZmZmZjsKKysjZWxzZQorKwkgICAgdW5zaWduZWQgaW50IHJhbmdlX3N0YXJ0ID0gMHhmZmZmZmZmZjsKKysjZW5kaWYKKysgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrI2lmZGVmIFdDSEFSCisrCSAgICAvKiBXZSBhc3N1bWUgYSBjaGFyc2V0KF9ub3QpIHN0cnVjdHVyZSBhcyBhIHdjaGFyX3QgYXJyYXkuCisrCSAgICAgICBjaGFyc2V0WzBdID0gKHJlX29wY29kZV90KSBjaGFyc2V0KF9ub3QpCisrICAgICAgICAgICAgICAgY2hhcnNldFsxXSA9IGwgKD0gbGVuZ3RoIG9mIGNoYXJfY2xhc3NlcykKKysgICAgICAgICAgICAgICBjaGFyc2V0WzJdID0gbSAoPSBsZW5ndGggb2YgY29sbGF0aW5nX3N5bWJvbHMpCisrICAgICAgICAgICAgICAgY2hhcnNldFszXSA9IG4gKD0gbGVuZ3RoIG9mIGVxdWl2YWxlbmNlX2NsYXNzZXMpCisrCSAgICAgICBjaGFyc2V0WzRdID0gbyAoPSBsZW5ndGggb2YgY2hhcl9yYW5nZXMpCisrCSAgICAgICBjaGFyc2V0WzVdID0gcCAoPSBsZW5ndGggb2YgY2hhcnMpCisrCisrICAgICAgICAgICAgICAgY2hhcnNldFs2XSA9IGNoYXJfY2xhc3MgKHdjdHlwZV90KQorKyAgICAgICAgICAgICAgIGNoYXJzZXRbNitDSEFSX0NMQVNTX1NJWkVdID0gY2hhcl9jbGFzcyAod2N0eXBlX3QpCisrICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorKyAgICAgICAgICAgICAgIGNoYXJzZXRbbCs1XSAgPSBjaGFyX2NsYXNzICh3Y3R5cGVfdCkKKysKKysgICAgICAgICAgICAgICBjaGFyc2V0W2wrNl0gID0gY29sbGF0aW5nX3N5bWJvbCAod2NoYXJfdCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisrICAgICAgICAgICAgICAgY2hhcnNldFtsK20rNV0gID0gY29sbGF0aW5nX3N5bWJvbCAod2NoYXJfdCkKKysJCQkJCWlmZGVmIF9MSUJDIHdlIHVzZSB0aGUgaW5kZXggaWYKKysJCQkJCV9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQiBpbnN0ZWFkIG9mCisrCQkJCQl3Y2hhcl90IHN0cmluZy4KKysKKysgICAgICAgICAgICAgICBjaGFyc2V0W2wrbSs2XSAgPSBlcXVpdmFsZW5jZV9jbGFzc2VzICh3Y2hhcl90KQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorKyAgICAgICAgICAgICAgIGNoYXJzZXRbbCttK24rNV0gID0gZXF1aXZhbGVuY2VfY2xhc3NlcyAod2NoYXJfdCkKKysJCQkJCWlmZGVmIF9MSUJDIHdlIHVzZSB0aGUgaW5kZXggaW4KKysJCQkJCV9OTF9DT0xMQVRFX1dFSUdIVCBpbnN0ZWFkIG9mCisrCQkJCQl3Y2hhcl90IHN0cmluZy4KKysKKysJICAgICAgIGNoYXJzZXRbbCttK24rNl0gPSByYW5nZV9zdGFydAorKwkgICAgICAgY2hhcnNldFtsK20rbis3XSA9IHJhbmdlX2VuZAorKwkgICAgICAgICAgICAgICAgICAgICAgIC4uLgorKwkgICAgICAgY2hhcnNldFtsK20rbisybys0XSA9IHJhbmdlX3N0YXJ0CisrCSAgICAgICBjaGFyc2V0W2wrbStuKzJvKzVdID0gcmFuZ2VfZW5kCisrCQkJCQlpZmRlZiBfTElCQyB3ZSB1c2UgdGhlIHZhbHVlIGxvb2tlZCB1cAorKwkJCQkJaW4gX05MX0NPTExBVEVfQ09MTFNFUSBpbnN0ZWFkIG9mCisrCQkJCQl3Y2hhcl90IGNoYXJhY3Rlci4KKysKKysJICAgICAgIGNoYXJzZXRbbCttK24rMm8rNl0gPSBjaGFyCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisrCSAgICAgICBjaGFyc2V0W2wrbStuKzJvK3ArNV0gPSBjaGFyCisrCisrCSAgICAgKi8KKysKKysJICAgIC8qIFdlIG5lZWQgYXQgbGVhc3QgNiBzcGFjZXM6IHRoZSBvcGNvZGUsIHRoZSBsZW5ndGggb2YKKysgICAgICAgICAgICAgICBjaGFyX2NsYXNzZXMsIHRoZSBsZW5ndGggb2YgY29sbGF0aW5nX3N5bWJvbHMsIHRoZSBsZW5ndGggb2YKKysgICAgICAgICAgICAgICBlcXVpdmFsZW5jZV9jbGFzc2VzLCB0aGUgbGVuZ3RoIG9mIGNoYXJfcmFuZ2VzLCB0aGUgbGVuZ3RoIG9mCisrICAgICAgICAgICAgICAgY2hhcnMuICAqLworKwkgICAgR0VUX0JVRkZFUl9TUEFDRSAoNik7CisrCisrCSAgICAvKiBTYXZlIGIgYXMgbGFzdHN0YXJ0LiBBbmQgV2UgdXNlIGxhc3RzdGFydCBhcyB0aGUgcG9pbnRlcgorKwkgICAgICAgdG8gdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGNoYXJzZXQgaGVyZS4KKysJICAgICAgIEluIG90aGVyIHdvcmRzLCBsYXN0c3RhcnRbaV0gaW5kaWNhdGVzIGNoYXJzZXRbaV0uICAqLworKyAgICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrCisrICAgICAgICAgICAgLyogV2UgdGVzdCBgKnAgPT0gJ14nIHR3aWNlLCBpbnN0ZWFkIG9mIHVzaW5nIGFuIGlmCisrICAgICAgICAgICAgICAgc3RhdGVtZW50LCBzbyB3ZSBvbmx5IG5lZWQgb25lIEJVRl9QVVNILiAgKi8KKysgICAgICAgICAgICBCVUZfUFVTSCAoKnAgPT0gJ14nID8gY2hhcnNldF9ub3QgOiBjaGFyc2V0KTsKKysgICAgICAgICAgICBpZiAoKnAgPT0gJ14nKQorKyAgICAgICAgICAgICAgcCsrOworKworKyAgICAgICAgICAgIC8qIFB1c2ggdGhlIGxlbmd0aCBvZiBjaGFyX2NsYXNzZXMsIHRoZSBsZW5ndGggb2YKKysgICAgICAgICAgICAgICBjb2xsYXRpbmdfc3ltYm9scywgdGhlIGxlbmd0aCBvZiBlcXVpdmFsZW5jZV9jbGFzc2VzLCB0aGUKKysgICAgICAgICAgICAgICBsZW5ndGggb2YgY2hhcl9yYW5nZXMgYW5kIHRoZSBsZW5ndGggb2YgY2hhcnMuICAqLworKyAgICAgICAgICAgIEJVRl9QVVNIXzMgKDAsIDAsIDApOworKyAgICAgICAgICAgIEJVRl9QVVNIXzIgKDAsIDApOworKworKyAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUgYnJhY2tldCBleHByZXNzaW9uLiAgKi8KKysgICAgICAgICAgICBwMSA9IHA7CisrCisrICAgICAgICAgICAgLyogY2hhcnNldF9ub3QgbWF0Y2hlcyBuZXdsaW5lIGFjY29yZGluZyB0byBhIHN5bnRheCBiaXQuICAqLworKyAgICAgICAgICAgIGlmICgocmVfb3Bjb2RlX3QpIGJbLTZdID09IGNoYXJzZXRfbm90CisrICAgICAgICAgICAgICAgICYmIChzeW50YXggJiBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUpKQorKwkgICAgICB7CisrCQlCVUZfUFVTSCgnXG4nKTsKKysJCWxhc3RzdGFydFs1XSsrOyAvKiBVcGRhdGUgdGhlIGxlbmd0aCBvZiBjaGFyYWN0ZXJzICAqLworKwkgICAgICB9CisrCisrICAgICAgICAgICAgLyogUmVhZCBpbiBjaGFyYWN0ZXJzIGFuZCByYW5nZXMsIHNldHRpbmcgbWFwIGJpdHMuICAqLworKyAgICAgICAgICAgIGZvciAoOzspCisrICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKworKyAgICAgICAgICAgICAgICAvKiBcIG1pZ2h0IGVzY2FwZSBjaGFyYWN0ZXJzIGluc2lkZSBbLi4uXSBhbmQgW14uLi5dLiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKChzeW50YXggJiBSRV9CQUNLU0xBU0hfRVNDQVBFX0lOX0xJU1RTKSAmJiBjID09ICdcXCcpCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FRVNDQVBFKTsKKysKKysgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjMSk7CisrCQkgICAgQlVGX1BVU0goYzEpOworKwkJICAgIGxhc3RzdGFydFs1XSsrOyAvKiBVcGRhdGUgdGhlIGxlbmd0aCBvZiBjaGFycyAgKi8KKysJCSAgICByYW5nZV9zdGFydCA9IGMxOworKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAvKiBDb3VsZCBiZSB0aGUgZW5kIG9mIHRoZSBicmFja2V0IGV4cHJlc3Npb24uICBJZiBpdCdzCisrICAgICAgICAgICAgICAgICAgIG5vdCAoaS5lLiwgd2hlbiB0aGUgYnJhY2tldCBleHByZXNzaW9uIGlzIGBbXScgc28KKysgICAgICAgICAgICAgICAgICAgZmFyKSwgdGhlICddJyBjaGFyYWN0ZXIgYml0IGdldHMgc2V0IHdheSBiZWxvdy4gICovCisrICAgICAgICAgICAgICAgIGlmIChjID09ICddJyAmJiBwICE9IHAxICsgMSkKKysgICAgICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgLyogTG9vayBhaGVhZCB0byBzZWUgaWYgaXQncyBhIHJhbmdlIHdoZW4gdGhlIGxhc3QgdGhpbmcKKysgICAgICAgICAgICAgICAgICAgd2FzIGEgY2hhcmFjdGVyIGNsYXNzLiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKGhhZF9jaGFyX2NsYXNzICYmIGMgPT0gJy0nICYmICpwICE9ICddJykKKysgICAgICAgICAgICAgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VSQU5HRSk7CisrCisrICAgICAgICAgICAgICAgIC8qIExvb2sgYWhlYWQgdG8gc2VlIGlmIGl0J3MgYSByYW5nZSB3aGVuIHRoZSBsYXN0IHRoaW5nCisrICAgICAgICAgICAgICAgICAgIHdhcyBhIGNoYXJhY3RlcjogaWYgdGhpcyBpcyBhIGh5cGhlbiBub3QgYXQgdGhlCisrICAgICAgICAgICAgICAgICAgIGJlZ2lubmluZyBvciB0aGUgZW5kIG9mIGEgbGlzdCwgdGhlbiBpdCdzIHRoZSByYW5nZQorKyAgICAgICAgICAgICAgICAgICBvcGVyYXRvci4gICovCisrICAgICAgICAgICAgICAgIGlmIChjID09ICctJworKyAgICAgICAgICAgICAgICAgICAgJiYgIShwIC0gMiA+PSBwYXR0ZXJuICYmIHBbLTJdID09ICdbJykKKysgICAgICAgICAgICAgICAgICAgICYmICEocCAtIDMgPj0gcGF0dGVybiAmJiBwWy0zXSA9PSAnWycgJiYgcFstMl0gPT0gJ14nKQorKyAgICAgICAgICAgICAgICAgICAgJiYgKnAgIT0gJ10nKQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIHJlZ19lcnJjb2RlX3QgcmV0OworKwkJICAgIC8qIEFsbG9jYXRlIHRoZSBzcGFjZSBmb3IgcmFuZ2Vfc3RhcnQgYW5kIHJhbmdlX2VuZC4gICovCisrCQkgICAgR0VUX0JVRkZFUl9TUEFDRSAoMik7CisrCQkgICAgLyogVXBkYXRlIHRoZSBwb2ludGVyIHRvIGluZGljYXRlIGVuZCBvZiBidWZmZXIuICAqLworKyAgICAgICAgICAgICAgICAgICAgYiArPSAyOworKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gd2NzX2NvbXBpbGVfcmFuZ2UgKHJhbmdlX3N0YXJ0LCAmcCwgcGVuZCwgdHJhbnNsYXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4LCBiLCBsYXN0c3RhcnQpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBSRUdfTk9FUlJPUikgRlJFRV9TVEFDS19SRVRVUk4gKHJldCk7CisrICAgICAgICAgICAgICAgICAgICByYW5nZV9zdGFydCA9IDB4ZmZmZmZmZmY7CisrICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlIGlmIChwWzBdID09ICctJyAmJiBwWzFdICE9ICddJykKKysgICAgICAgICAgICAgICAgICB7IC8qIFRoaXMgaGFuZGxlcyByYW5nZXMgbWFkZSB1cCBvZiBjaGFyYWN0ZXJzIG9ubHkuICAqLworKyAgICAgICAgICAgICAgICAgICAgcmVnX2VycmNvZGVfdCByZXQ7CisrCisrCQkgICAgLyogTW92ZSBwYXN0IHRoZSBgLScuICAqLworKyAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMxKTsKKysJCSAgICAvKiBBbGxvY2F0ZSB0aGUgc3BhY2UgZm9yIHJhbmdlX3N0YXJ0IGFuZCByYW5nZV9lbmQuICAqLworKwkJICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDIpOworKwkJICAgIC8qIFVwZGF0ZSB0aGUgcG9pbnRlciB0byBpbmRpY2F0ZSBlbmQgb2YgYnVmZmVyLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIGIgKz0gMjsKKysgICAgICAgICAgICAgICAgICAgIHJldCA9IHdjc19jb21waWxlX3JhbmdlIChjLCAmcCwgcGVuZCwgdHJhbnNsYXRlLCBzeW50YXgsIGIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0c3RhcnQpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBSRUdfTk9FUlJPUikgRlJFRV9TVEFDS19SRVRVUk4gKHJldCk7CisrCQkgICAgcmFuZ2Vfc3RhcnQgPSAweGZmZmZmZmZmOworKyAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgLyogU2VlIGlmIHdlJ3JlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBwb3NzaWJsZSBjaGFyYWN0ZXIKKysgICAgICAgICAgICAgICAgICAgY2xhc3MuICAqLworKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW50YXggJiBSRV9DSEFSX0NMQVNTRVMgJiYgYyA9PSAnWycgJiYgKnAgPT0gJzonKQorKyAgICAgICAgICAgICAgICAgIHsgLyogTGVhdmUgcm9vbSBmb3IgdGhlIG51bGwuICAqLworKyAgICAgICAgICAgICAgICAgICAgY2hhciBzdHJbQ0hBUl9DTEFTU19NQVhfTEVOR1RIICsgMV07CisrCisrICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrICAgICAgICAgICAgICAgICAgICBjMSA9IDA7CisrCisrICAgICAgICAgICAgICAgICAgICAvKiBJZiBwYXR0ZXJuIGlzIGBbWzonLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGZvciAoOzspCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjID09ICc6JyAmJiAqcCA9PSAnXScpIHx8IHAgPT0gcGVuZCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKwkJCWlmIChjMSA8IENIQVJfQ0xBU1NfTUFYX0xFTkdUSCkKKysJCQkgIHN0cltjMSsrXSA9IGM7CisrCQkJZWxzZQorKwkJCSAgLyogVGhpcyBpcyBpbiBhbnkgY2FzZSBhbiBpbnZhbGlkIGNsYXNzIG5hbWUuICAqLworKwkJCSAgc3RyWzBdID0gJ1wwJzsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgc3RyW2MxXSA9ICdcMCc7CisrCisrICAgICAgICAgICAgICAgICAgICAvKiBJZiBpc24ndCBhIHdvcmQgYnJhY2tldGVkIGJ5IGBbOicgYW5kIGA6XSc6CisrICAgICAgICAgICAgICAgICAgICAgICB1bmRvIHRoZSBlbmRpbmcgY2hhcmFjdGVyLCB0aGUgbGV0dGVycywgYW5kIGxlYXZlCisrICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGVhZGluZyBgOicgYW5kIGBbJyAoYnV0IHN0b3JlIHRoZW0gYXMgY2hhcmFjdGVyKS4gICovCisrICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnOicgJiYgKnAgPT0gJ10nKQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrCQkJd2N0eXBlX3Qgd3Q7CisrCQkJdWludHB0cl90IGFsaWduZWRwOworKworKwkJCS8qIFF1ZXJ5IHRoZSBjaGFyYWN0ZXIgY2xhc3MgYXMgd2N0eXBlX3QuICAqLworKwkJCXd0ID0gSVNfQ0hBUl9DTEFTUyAoc3RyKTsKKysJCQlpZiAod3QgPT0gMCkKKysJCQkgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNUWVBFKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaHJvdyBhd2F5IHRoZSBdIGF0IHRoZSBlbmQgb2YgdGhlIGNoYXJhY3RlcgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKwkJCS8qIEFsbG9jYXRlIHRoZSBzcGFjZSBmb3IgY2hhcmFjdGVyIGNsYXNzLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBHRVRfQlVGRkVSX1NQQUNFKENIQVJfQ0xBU1NfU0laRSk7CisrCQkJLyogVXBkYXRlIHRoZSBwb2ludGVyIHRvIGluZGljYXRlIGVuZCBvZiBidWZmZXIuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIGIgKz0gQ0hBUl9DTEFTU19TSVpFOworKwkJCS8qIE1vdmUgZGF0YSB3aGljaCBmb2xsb3cgY2hhcmFjdGVyIGNsYXNzZXMKKysJCQkgICAgbm90IHRvIHZpb2xhdGUgdGhlIGRhdGEuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydF9zcGFjZShDSEFSX0NMQVNTX1NJWkUsCisrCQkJCSAgICAgbGFzdHN0YXJ0ICsgNiArIGxhc3RzdGFydFsxXSwKKysJCQkJICAgICBiIC0gMSk7CisrCQkJYWxpZ25lZHAgPSAoKHVpbnRwdHJfdCkobGFzdHN0YXJ0ICsgNiArIGxhc3RzdGFydFsxXSkKKysJCQkJICAgICsgX19hbGlnbm9mX18od2N0eXBlX3QpIC0gMSkKKysJCQkgIAkgICAgJiB+KHVpbnRwdHJfdCkoX19hbGlnbm9mX18od2N0eXBlX3QpIC0gMSk7CisrCQkJLyogU3RvcmUgdGhlIGNoYXJhY3RlciBjbGFzcy4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgKigod2N0eXBlX3QqKWFsaWduZWRwKSA9IHd0OworKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBsZW5ndGggb2YgY2hhcl9jbGFzc2VzICovCisrICAgICAgICAgICAgICAgICAgICAgICAgbGFzdHN0YXJ0WzFdICs9IENIQVJfQ0xBU1NfU0laRTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IHRydWU7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGMxKys7CisrICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGMxLS0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRVTkZFVENIOworKyAgICAgICAgICAgICAgICAgICAgICAgIEJVRl9QVVNIICgnWycpOworKyAgICAgICAgICAgICAgICAgICAgICAgIEJVRl9QVVNIICgnOicpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RzdGFydFs1XSArPSAyOyAvKiBVcGRhdGUgdGhlIGxlbmd0aCBvZiBjaGFyYWN0ZXJzICAqLworKwkJCXJhbmdlX3N0YXJ0ID0gJzonOworKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bnRheCAmIFJFX0NIQVJfQ0xBU1NFUyAmJiBjID09ICdbJyAmJiAoKnAgPT0gJz0nCisrCQkJCQkJCSAgfHwgKnAgPT0gJy4nKSkKKysJCSAgeworKwkJICAgIENIQVJfVCBzdHJbMTI4XTsJLyogU2hvdWxkIGJlIGxhcmdlIGVub3VnaC4gICovCisrCQkgICAgQ0hBUl9UIGRlbGltID0gKnA7IC8qICc9JyBvciAnLicgICovCisrIyBpZmRlZiBfTElCQworKwkJICAgIHVpbnQzMl90IG5ydWxlcyA9CisrCQkgICAgICBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworKyMgZW5kaWYKKysJCSAgICBQQVRGRVRDSCAoYyk7CisrCQkgICAgYzEgPSAwOworKworKwkJICAgIC8qIElmIHBhdHRlcm4gaXMgYFtbPScgb3IgJ1tbLicuICAqLworKwkJICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysJCSAgICBmb3IgKDs7KQorKwkJICAgICAgeworKwkJCVBBVEZFVENIIChjKTsKKysJCQlpZiAoKGMgPT0gZGVsaW0gJiYgKnAgPT0gJ10nKSB8fCBwID09IHBlbmQpCisrCQkJICBicmVhazsKKysJCQlpZiAoYzEgPCBzaXplb2YgKHN0cikgLSAxKQorKwkJCSAgc3RyW2MxKytdID0gYzsKKysJCQllbHNlCisrCQkJICAvKiBUaGlzIGlzIGluIGFueSBjYXNlIGFuIGludmFsaWQgY2xhc3MgbmFtZS4gICovCisrCQkJICBzdHJbMF0gPSAnXDAnOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCQkgICAgc3RyW2MxXSA9ICdcMCc7CisrCisrCQkgICAgaWYgKGMgPT0gZGVsaW0gJiYgKnAgPT0gJ10nICYmIHN0clswXSAhPSAnXDAnKQorKwkJICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpLCBvZmZzZXQ7CisrCQkJLyogSWYgd2UgaGF2ZSBubyBjb2xsYXRpb24gZGF0YSB3ZSB1c2UgdGhlIGRlZmF1bHQKKysJCQkgICBjb2xsYXRpb24gaW4gd2hpY2ggZWFjaCBjaGFyYWN0ZXIgaXMgaW4gYSBjbGFzcworKwkJCSAgIGJ5IGl0c2VsZi4gIEl0IGFsc28gbWVhbnMgdGhhdCBBU0NJSSBpcyB0aGUKKysJCQkgICBjaGFyYWN0ZXIgc2V0IGFuZCB0aGVyZWZvcmUgd2UgY2Fubm90IGhhdmUgY2hhcmFjdGVyCisrCQkJICAgd2l0aCBtb3JlIHRoYW4gb25lIGJ5dGUgaW4gdGhlIG11bHRpYnl0ZQorKwkJCSAgIHJlcHJlc2VudGF0aW9uLiAgKi8KKysKKysgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBub3QgZGVmaW5lZCBfTElCQywgd2UgcHVzaCB0aGUgbmFtZSBhbmQKKysJCQkgICBgXDAnIGZvciB0aGUgc2FrZSBvZiBtYXRjaGluZyBwZXJmb3JtYW5jZS4gICovCisrCQkJaW50IGRhdGFzaXplID0gYzEgKyAxOworKworKyMgaWZkZWYgX0xJQkMKKysJCQlpbnQzMl90IGlkeCA9IDA7CisrCQkJaWYgKG5ydWxlcyA9PSAwKQorKyMgZW5kaWYKKysJCQkgIHsKKysJCQkgICAgaWYgKGMxICE9IDEpCisrCQkJICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ09MTEFURSk7CisrCQkJICB9CisrIyBpZmRlZiBfTElCQworKwkJCWVsc2UKKysJCQkgIHsKKysJCQkgICAgY29uc3QgaW50MzJfdCAqdGFibGU7CisrCQkJICAgIGNvbnN0IGludDMyX3QgKndlaWdodHM7CisrCQkJICAgIGNvbnN0IGludDMyX3QgKmV4dHJhOworKwkJCSAgICBjb25zdCBpbnQzMl90ICppbmRpcmVjdDsKKysJCQkgICAgd2ludF90ICpjcDsKKysKKysJCQkgICAgaWYoZGVsaW0gPT0gJz0nKQorKwkJCSAgICAgIHsKKysJCQkJLyogV2UgcHVzaCB0aGUgaW5kZXggZm9yIGVxdWl2YWxlbmNlIGNsYXNzLiAgKi8KKysJCQkJY3AgPSAod2ludF90KilzdHI7CisrCisrCQkJCXRhYmxlID0gKGNvbnN0IGludDMyX3QgKikKKysJCQkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKysJCQkJCSAgICAgICBfTkxfQ09MTEFURV9UQUJMRVdDKTsKKysJCQkJd2VpZ2h0cyA9IChjb25zdCBpbnQzMl90ICopCisrCQkJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisrCQkJCQkgICAgICAgX05MX0NPTExBVEVfV0VJR0hUV0MpOworKwkJCQlleHRyYSA9IChjb25zdCB3aW50X3QgKikKKysJCQkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKysJCQkJCSAgICAgICBfTkxfQ09MTEFURV9FWFRSQVdDKTsKKysJCQkJaW5kaXJlY3QgPSAoY29uc3QgaW50MzJfdCAqKQorKwkJCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorKwkJCQkJICAgICAgIF9OTF9DT0xMQVRFX0lORElSRUNUV0MpOworKworKwkJCQlpZHggPSBGSU5ESURYICh0YWJsZSwgaW5kaXJlY3QsIGV4dHJhLCAmY3AsIDEpOworKwkJCQlpZiAoaWR4ID09IDAgfHwgY3AgPCAod2ludF90Kikgc3RyICsgYzEpCisrCQkJCSAgLyogVGhpcyBpcyBubyB2YWxpZCBjaGFyYWN0ZXIuICAqLworKwkJCQkgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNPTExBVEUpOworKworKwkJCQlzdHJbMF0gPSAod2NoYXJfdClpZHg7CisrCQkJICAgICAgfQorKwkJCSAgICBlbHNlIC8qIGRlbGltID09ICcuJyAqLworKwkJCSAgICAgIHsKKysJCQkJLyogV2UgcHVzaCBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWUKKysJCQkJICAgZm9yIGNvbGxhdGluZyBzeW1ib2wuICAqLworKwkJCQlpbnQzMl90IHRhYmxlX3NpemU7CisrCQkJCWNvbnN0IGludDMyX3QgKnN5bWJfdGFibGU7CisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4dHJhOworKwkJCQlpbnQzMl90IGlkeDsKKysJCQkJaW50MzJfdCBlbGVtOworKwkJCQlpbnQzMl90IHNlY29uZDsKKysJCQkJaW50MzJfdCBoYXNoOworKwkJCQljaGFyIGNoYXJfc3RyW2MxXTsKKysKKysJCQkJLyogV2UgaGF2ZSB0byBjb252ZXJ0IHRoZSBuYW1lIHRvIGEgc2luZ2xlLWJ5dGUKKysJCQkJICAgc3RyaW5nLiAgVGhpcyBpcyBwb3NzaWJsZSBzaW5jZSB0aGUgbmFtZXMKKysJCQkJICAgY29uc2lzdCBvZiBBU0NJSSBjaGFyYWN0ZXJzIGFuZCB0aGUgaW50ZXJuYWwKKysJCQkJICAgcmVwcmVzZW50YXRpb24gaXMgVUNTNC4gICovCisrCQkJCWZvciAoaSA9IDA7IGkgPCBjMTsgKytpKQorKwkJCQkgIGNoYXJfc3RyW2ldID0gc3RyW2ldOworKworKwkJCQl0YWJsZV9zaXplID0KKysJCQkJICBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLAorKwkJCQkJCSAgICBfTkxfQ09MTEFURV9TWU1CX0hBU0hfU0laRU1CKTsKKysJCQkJc3ltYl90YWJsZSA9IChjb25zdCBpbnQzMl90ICopCisrCQkJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisrCQkJCQkgICAgICAgX05MX0NPTExBVEVfU1lNQl9UQUJMRU1CKTsKKysJCQkJZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorKwkJCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorKwkJCQkJICAgICAgIF9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQik7CisrCisrCQkJCS8qIExvY2F0ZSB0aGUgY2hhcmFjdGVyIGluIHRoZSBoYXNoaW5nIHRhYmxlLiAgKi8KKysJCQkJaGFzaCA9IGVsZW1faGFzaCAoY2hhcl9zdHIsIGMxKTsKKysKKysJCQkJaWR4ID0gMDsKKysJCQkJZWxlbSA9IGhhc2ggJSB0YWJsZV9zaXplOworKwkJCQlzZWNvbmQgPSBoYXNoICUgKHRhYmxlX3NpemUgLSAyKTsKKysJCQkJd2hpbGUgKHN5bWJfdGFibGVbMiAqIGVsZW1dICE9IDApCisrCQkJCSAgeworKwkJCQkgICAgLyogRmlyc3QgY29tcGFyZSB0aGUgaGFzaGluZyB2YWx1ZS4gICovCisrCQkJCSAgICBpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gPT0gaGFzaAorKwkJCQkJJiYgYzEgPT0gZXh0cmFbc3ltYl90YWJsZVsyICogZWxlbSArIDFdXQorKwkJCQkJJiYgbWVtY21wIChjaGFyX3N0ciwKKysJCQkJCQkgICAmZXh0cmFbc3ltYl90YWJsZVsyICogZWxlbSArIDFdCisrCQkJCQkJCSArIDFdLCBjMSkgPT0gMCkKKysJCQkJICAgICAgeworKwkJCQkJLyogWWVwLCB0aGlzIGlzIHRoZSBlbnRyeS4gICovCisrCQkJCQlpZHggPSBzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV07CisrCQkJCQlpZHggKz0gMSArIGV4dHJhW2lkeF07CisrCQkJCQlicmVhazsKKysJCQkJICAgICAgfQorKworKwkJCQkgICAgLyogTmV4dCBlbnRyeS4gICovCisrCQkJCSAgICBlbGVtICs9IHNlY29uZDsKKysJCQkJICB9CisrCisrCQkJCWlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSAhPSAwKQorKwkJCQkgIHsKKysJCQkJICAgIC8qIENvbXB1dGUgdGhlIGluZGV4IG9mIHRoZSBieXRlIHNlcXVlbmNlCisrCQkJCSAgICAgICBpbiB0aGUgdGFibGUuICAqLworKwkJCQkgICAgaWR4ICs9IDEgKyBleHRyYVtpZHhdOworKwkJCQkgICAgLyogQWRqdXN0IGZvciB0aGUgYWxpZ25tZW50LiAgKi8KKysJCQkJICAgIGlkeCA9IChpZHggKyAzKSAmIH4zOworKworKwkJCQkgICAgc3RyWzBdID0gKHdjaGFyX3QpIGlkeCArIDQ7CisrCQkJCSAgfQorKwkJCQllbHNlIGlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSA9PSAwICYmIGMxID09IDEpCisrCQkJCSAgeworKwkJCQkgICAgLyogTm8gdmFsaWQgY2hhcmFjdGVyLiAgTWF0Y2ggaXQgYXMgYQorKwkJCQkgICAgICAgc2luZ2xlIGJ5dGUgY2hhcmFjdGVyLiAgKi8KKysJCQkJICAgIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrCQkJCSAgICBCVUZfUFVTSChzdHJbMF0pOworKwkJCQkgICAgLyogVXBkYXRlIHRoZSBsZW5ndGggb2YgY2hhcmFjdGVycyAgKi8KKysJCQkJICAgIGxhc3RzdGFydFs1XSsrOworKwkJCQkgICAgcmFuZ2Vfc3RhcnQgPSBzdHJbMF07CisrCisrCQkJCSAgICAvKiBUaHJvdyBhd2F5IHRoZSBdIGF0IHRoZSBlbmQgb2YgdGhlCisrCQkJCSAgICAgICBjb2xsYXRpbmcgc3ltYm9sLiAgKi8KKysJCQkJICAgIFBBVEZFVENIIChjKTsKKysJCQkJICAgIC8qIGV4aXQgZnJvbSB0aGUgc3dpdGNoIGJsb2NrLiAgKi8KKysJCQkJICAgIGNvbnRpbnVlOworKwkJCQkgIH0KKysJCQkJZWxzZQorKwkJCQkgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNPTExBVEUpOworKwkJCSAgICAgIH0KKysJCQkgICAgZGF0YXNpemUgPSAxOworKwkJCSAgfQorKyMgZW5kaWYKKysgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaHJvdyBhd2F5IHRoZSBdIGF0IHRoZSBlbmQgb2YgdGhlIGVxdWl2YWxlbmNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgKG9yIGNvbGxhdGluZyBzeW1ib2wpLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrCisrCQkJLyogQWxsb2NhdGUgdGhlIHNwYWNlIGZvciB0aGUgZXF1aXZhbGVuY2UgY2xhc3MKKysJCQkgICAob3IgY29sbGF0aW5nIHN5bWJvbCkgKGFuZCAnXDAnIGlmIG5lZWRlZCkuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIEdFVF9CVUZGRVJfU1BBQ0UoZGF0YXNpemUpOworKwkJCS8qIFVwZGF0ZSB0aGUgcG9pbnRlciB0byBpbmRpY2F0ZSBlbmQgb2YgYnVmZmVyLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBiICs9IGRhdGFzaXplOworKworKwkJCWlmIChkZWxpbSA9PSAnPScpCisrCQkJICB7IC8qIGVxdWl2YWxlbmNlIGNsYXNzICAqLworKwkJCSAgICAvKiBDYWxjdWxhdGUgdGhlIG9mZnNldCBvZiBjaGFyX3JhbmdlcywKKysJCQkgICAgICAgd2hpY2ggaXMgbmV4dCB0byBlcXVpdmFsZW5jZV9jbGFzc2VzLiAgKi8KKysJCQkgICAgb2Zmc2V0ID0gbGFzdHN0YXJ0WzFdICsgbGFzdHN0YXJ0WzJdCisrCQkJICAgICAgKyBsYXN0c3RhcnRbM10gKzY7CisrCQkJICAgIC8qIEluc2VydCBzcGFjZS4gICovCisrCQkJICAgIGluc2VydF9zcGFjZShkYXRhc2l6ZSwgbGFzdHN0YXJ0ICsgb2Zmc2V0LCBiIC0gMSk7CisrCisrCQkJICAgIC8qIFdyaXRlIHRoZSBlcXVpdmFsZW5jZV9jbGFzcyBhbmQgXDAuICAqLworKwkJCSAgICBmb3IgKGkgPSAwIDsgaSA8IGRhdGFzaXplIDsgaSsrKQorKwkJCSAgICAgIGxhc3RzdGFydFtvZmZzZXQgKyBpXSA9IHN0cltpXTsKKysKKysJCQkgICAgLyogVXBkYXRlIHRoZSBsZW5ndGggb2YgZXF1aXZhbGVuY2VfY2xhc3Nlcy4gICovCisrCQkJICAgIGxhc3RzdGFydFszXSArPSBkYXRhc2l6ZTsKKysJCQkgICAgaGFkX2NoYXJfY2xhc3MgPSB0cnVlOworKwkJCSAgfQorKwkJCWVsc2UgLyogZGVsaW0gPT0gJy4nICovCisrCQkJICB7IC8qIGNvbGxhdGluZyBzeW1ib2wgICovCisrCQkJICAgIC8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IG9mIHRoZSBlcXVpdmFsZW5jZV9jbGFzc2VzLAorKwkJCSAgICAgICB3aGljaCBpcyBuZXh0IHRvIGNvbGxhdGluZ19zeW1ib2xzLiAgKi8KKysJCQkgICAgb2Zmc2V0ID0gbGFzdHN0YXJ0WzFdICsgbGFzdHN0YXJ0WzJdICsgNjsKKysJCQkgICAgLyogSW5zZXJ0IHNwYWNlIGFuZCB3cml0ZSB0aGUgY29sbGF0aW9uZ19zeW1ib2wKKysJCQkgICAgICAgYW5kIFwwLiAgKi8KKysJCQkgICAgaW5zZXJ0X3NwYWNlKGRhdGFzaXplLCBsYXN0c3RhcnQgKyBvZmZzZXQsIGItMSk7CisrCQkJICAgIGZvciAoaSA9IDAgOyBpIDwgZGF0YXNpemUgOyBpKyspCisrCQkJICAgICAgbGFzdHN0YXJ0W29mZnNldCArIGldID0gc3RyW2ldOworKworKwkJCSAgICAvKiBJbiByZV9tYXRjaF8yX2ludGVybmFsIGlmIHJhbmdlX3N0YXJ0IDwgLTEsIHdlCisrCQkJICAgICAgIGFzc3VtZSAtcmFuZ2Vfc3RhcnQgaXMgdGhlIG9mZnNldCBvZiB0aGUKKysJCQkgICAgICAgY29sbGF0aW5nIHN5bWJvbCB3aGljaCBpcyBzcGVjaWZpZWQgYXMKKysJCQkgICAgICAgdGhlIGNoYXJhY3RlciBvZiB0aGUgcmFuZ2Ugc3RhcnQuICBTbyB3ZSBhc3NpZ24KKysJCQkgICAgICAgLShsYXN0c3RhcnRbMV0gKyBsYXN0c3RhcnRbMl0gKyA2KSB0bworKwkJCSAgICAgICByYW5nZV9zdGFydC4gICovCisrCQkJICAgIHJhbmdlX3N0YXJ0ID0gLShsYXN0c3RhcnRbMV0gKyBsYXN0c3RhcnRbMl0gKyA2KTsKKysJCQkgICAgLyogVXBkYXRlIHRoZSBsZW5ndGggb2YgY29sbGF0aW5nX3N5bWJvbC4gICovCisrCQkJICAgIGxhc3RzdGFydFsyXSArPSBkYXRhc2l6ZTsKKysJCQkgICAgaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysJCQkgIH0KKysJCSAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGMxKys7CisrICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGMxLS0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRVTkZFVENIOworKyAgICAgICAgICAgICAgICAgICAgICAgIEJVRl9QVVNIICgnWycpOworKyAgICAgICAgICAgICAgICAgICAgICAgIEJVRl9QVVNIIChkZWxpbSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgbGFzdHN0YXJ0WzVdICs9IDI7IC8qIFVwZGF0ZSB0aGUgbGVuZ3RoIG9mIGNoYXJhY3RlcnMgICovCisrCQkJcmFuZ2Vfc3RhcnQgPSBkZWxpbTsKKysgICAgICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCQkgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrCQkgICAgQlVGX1BVU0goYyk7CisrCQkgICAgbGFzdHN0YXJ0WzVdKys7ICAvKiBVcGRhdGUgdGhlIGxlbmd0aCBvZiBjaGFyYWN0ZXJzICAqLworKwkJICAgIHJhbmdlX3N0YXJ0ID0gYzsKKysgICAgICAgICAgICAgICAgICB9CisrCSAgICAgIH0KKysKKysjZWxzZSAvKiBCWVRFICovCisrICAgICAgICAgICAgLyogRW5zdXJlIHRoYXQgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgdG8gcHVzaCBhIGNoYXJzZXQ6IHRoZQorKyAgICAgICAgICAgICAgIG9wY29kZSwgdGhlIGxlbmd0aCBjb3VudCwgYW5kIHRoZSBiaXRzZXQ7IDM0IGJ5dGVzIGluIGFsbC4gICovCisrCSAgICBHRVRfQlVGRkVSX1NQQUNFICgzNCk7CisrCisrICAgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysKKysgICAgICAgICAgICAvKiBXZSB0ZXN0IGAqcCA9PSAnXicgdHdpY2UsIGluc3RlYWQgb2YgdXNpbmcgYW4gaWYKKysgICAgICAgICAgICAgICBzdGF0ZW1lbnQsIHNvIHdlIG9ubHkgbmVlZCBvbmUgQlVGX1BVU0guICAqLworKyAgICAgICAgICAgIEJVRl9QVVNIICgqcCA9PSAnXicgPyBjaGFyc2V0X25vdCA6IGNoYXJzZXQpOworKyAgICAgICAgICAgIGlmICgqcCA9PSAnXicpCisrICAgICAgICAgICAgICBwKys7CisrCisrICAgICAgICAgICAgLyogUmVtZW1iZXIgdGhlIGZpcnN0IHBvc2l0aW9uIGluIHRoZSBicmFja2V0IGV4cHJlc3Npb24uICAqLworKyAgICAgICAgICAgIHAxID0gcDsKKysKKysgICAgICAgICAgICAvKiBQdXNoIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJpdG1hcC4gICovCisrICAgICAgICAgICAgQlVGX1BVU0ggKCgxIDw8IEJZVEVXSURUSCkgLyBCWVRFV0lEVEgpOworKworKyAgICAgICAgICAgIC8qIENsZWFyIHRoZSB3aG9sZSBtYXAuICAqLworKyAgICAgICAgICAgIGJ6ZXJvIChiLCAoMSA8PCBCWVRFV0lEVEgpIC8gQllURVdJRFRIKTsKKysKKysgICAgICAgICAgICAvKiBjaGFyc2V0X25vdCBtYXRjaGVzIG5ld2xpbmUgYWNjb3JkaW5nIHRvIGEgc3ludGF4IGJpdC4gICovCisrICAgICAgICAgICAgaWYgKChyZV9vcGNvZGVfdCkgYlstMl0gPT0gY2hhcnNldF9ub3QKKysgICAgICAgICAgICAgICAgJiYgKHN5bnRheCAmIFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSkpCisrICAgICAgICAgICAgICBTRVRfTElTVF9CSVQgKCdcbicpOworKworKyAgICAgICAgICAgIC8qIFJlYWQgaW4gY2hhcmFjdGVycyBhbmQgcmFuZ2VzLCBzZXR0aW5nIG1hcCBiaXRzLiAgKi8KKysgICAgICAgICAgICBmb3IgKDs7KQorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysKKysgICAgICAgICAgICAgICAgLyogXCBtaWdodCBlc2NhcGUgY2hhcmFjdGVycyBpbnNpZGUgWy4uLl0gYW5kIFteLi4uXS4gICovCisrICAgICAgICAgICAgICAgIGlmICgoc3ludGF4ICYgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUykgJiYgYyA9PSAnXFwnKQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUVTQ0FQRSk7CisrCisrICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYzEpOworKyAgICAgICAgICAgICAgICAgICAgU0VUX0xJU1RfQklUIChjMSk7CisrCQkgICAgcmFuZ2Vfc3RhcnQgPSBjMTsKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgLyogQ291bGQgYmUgdGhlIGVuZCBvZiB0aGUgYnJhY2tldCBleHByZXNzaW9uLiAgSWYgaXQncworKyAgICAgICAgICAgICAgICAgICBub3QgKGkuZS4sIHdoZW4gdGhlIGJyYWNrZXQgZXhwcmVzc2lvbiBpcyBgW10nIHNvCisrICAgICAgICAgICAgICAgICAgIGZhciksIHRoZSAnXScgY2hhcmFjdGVyIGJpdCBnZXRzIHNldCB3YXkgYmVsb3cuICAqLworKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXScgJiYgcCAhPSBwMSArIDEpCisrICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgIC8qIExvb2sgYWhlYWQgdG8gc2VlIGlmIGl0J3MgYSByYW5nZSB3aGVuIHRoZSBsYXN0IHRoaW5nCisrICAgICAgICAgICAgICAgICAgIHdhcyBhIGNoYXJhY3RlciBjbGFzcy4gICovCisrICAgICAgICAgICAgICAgIGlmIChoYWRfY2hhcl9jbGFzcyAmJiBjID09ICctJyAmJiAqcCAhPSAnXScpCisrICAgICAgICAgICAgICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FUkFOR0UpOworKworKyAgICAgICAgICAgICAgICAvKiBMb29rIGFoZWFkIHRvIHNlZSBpZiBpdCdzIGEgcmFuZ2Ugd2hlbiB0aGUgbGFzdCB0aGluZworKyAgICAgICAgICAgICAgICAgICB3YXMgYSBjaGFyYWN0ZXI6IGlmIHRoaXMgaXMgYSBoeXBoZW4gbm90IGF0IHRoZQorKyAgICAgICAgICAgICAgICAgICBiZWdpbm5pbmcgb3IgdGhlIGVuZCBvZiBhIGxpc3QsIHRoZW4gaXQncyB0aGUgcmFuZ2UKKysgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuICAqLworKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnLScKKysgICAgICAgICAgICAgICAgICAgICYmICEocCAtIDIgPj0gcGF0dGVybiAmJiBwWy0yXSA9PSAnWycpCisrICAgICAgICAgICAgICAgICAgICAmJiAhKHAgLSAzID49IHBhdHRlcm4gJiYgcFstM10gPT0gJ1snICYmIHBbLTJdID09ICdeJykKKysgICAgICAgICAgICAgICAgICAgICYmICpwICE9ICddJykKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICByZWdfZXJyY29kZV90IHJldAorKyAgICAgICAgICAgICAgICAgICAgICA9IGJ5dGVfY29tcGlsZV9yYW5nZSAocmFuZ2Vfc3RhcnQsICZwLCBwZW5kLCB0cmFuc2xhdGUsCisrCQkJCQkgICAgc3ludGF4LCBiKTsKKysgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gUkVHX05PRVJST1IpIEZSRUVfU1RBQ0tfUkVUVVJOIChyZXQpOworKwkJICAgIHJhbmdlX3N0YXJ0ID0gMHhmZmZmZmZmZjsKKysgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBbMF0gPT0gJy0nICYmIHBbMV0gIT0gJ10nKQorKyAgICAgICAgICAgICAgICAgIHsgLyogVGhpcyBoYW5kbGVzIHJhbmdlcyBtYWRlIHVwIG9mIGNoYXJhY3RlcnMgb25seS4gICovCisrICAgICAgICAgICAgICAgICAgICByZWdfZXJyY29kZV90IHJldDsKKysKKysJCSAgICAvKiBNb3ZlIHBhc3QgdGhlIGAtJy4gICovCisrICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYzEpOworKworKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gYnl0ZV9jb21waWxlX3JhbmdlIChjLCAmcCwgcGVuZCwgdHJhbnNsYXRlLCBzeW50YXgsIGIpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBSRUdfTk9FUlJPUikgRlJFRV9TVEFDS19SRVRVUk4gKHJldCk7CisrCQkgICAgcmFuZ2Vfc3RhcnQgPSAweGZmZmZmZmZmOworKyAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgLyogU2VlIGlmIHdlJ3JlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBwb3NzaWJsZSBjaGFyYWN0ZXIKKysgICAgICAgICAgICAgICAgICAgY2xhc3MuICAqLworKworKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW50YXggJiBSRV9DSEFSX0NMQVNTRVMgJiYgYyA9PSAnWycgJiYgKnAgPT0gJzonKQorKyAgICAgICAgICAgICAgICAgIHsgLyogTGVhdmUgcm9vbSBmb3IgdGhlIG51bGwuICAqLworKyAgICAgICAgICAgICAgICAgICAgY2hhciBzdHJbQ0hBUl9DTEFTU19NQVhfTEVOR1RIICsgMV07CisrCisrICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrICAgICAgICAgICAgICAgICAgICBjMSA9IDA7CisrCisrICAgICAgICAgICAgICAgICAgICAvKiBJZiBwYXR0ZXJuIGlzIGBbWzonLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGZvciAoOzspCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjID09ICc6JyAmJiAqcCA9PSAnXScpIHx8IHAgPT0gcGVuZCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKwkJCWlmICgoKGludCkgYzEpIDwgQ0hBUl9DTEFTU19NQVhfTEVOR1RIKQorKwkJCSAgc3RyW2MxKytdID0gYzsKKysJCQllbHNlCisrCQkJICAvKiBUaGlzIGlzIGluIGFueSBjYXNlIGFuIGludmFsaWQgY2xhc3MgbmFtZS4gICovCisrCQkJICBzdHJbMF0gPSAnXDAnOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBzdHJbYzFdID0gJ1wwJzsKKysKKysgICAgICAgICAgICAgICAgICAgIC8qIElmIGlzbid0IGEgd29yZCBicmFja2V0ZWQgYnkgYFs6JyBhbmQgYDpdJzoKKysgICAgICAgICAgICAgICAgICAgICAgIHVuZG8gdGhlIGVuZGluZyBjaGFyYWN0ZXIsIHRoZSBsZXR0ZXJzLCBhbmQgbGVhdmUKKysgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsZWFkaW5nIGA6JyBhbmQgYFsnIChidXQgc2V0IGJpdHMgZm9yIHRoZW0pLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICc6JyAmJiAqcCA9PSAnXScpCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysjIGlmIFdJREVfQ0hBUl9TVVBQT1JUCisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19sb3dlciA9IFNUUkVRIChzdHIsICJsb3dlciIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfdXBwZXIgPSBTVFJFUSAoc3RyLCAidXBwZXIiKTsKKysJCQl3Y3R5cGVfdCB3dDsKKysgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2g7CisrCisrCQkJd3QgPSBJU19DSEFSX0NMQVNTIChzdHIpOworKwkJCWlmICh3dCA9PSAwKQorKwkJCSAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ1RZUEUpOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRocm93IGF3YXkgdGhlIF0gYXQgdGhlIGVuZCBvZiB0aGUgY2hhcmFjdGVyCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjaCA9IDA7IGNoIDwgMSA8PCBCWVRFV0lEVEg7ICsrY2gpCisrCQkJICB7CisrIyAgaWZkZWYgX0xJQkMKKysJCQkgICAgaWYgKF9faXN3Y3R5cGUgKF9fYnRvd2MgKGNoKSwgd3QpKQorKwkJCSAgICAgIFNFVF9MSVNUX0JJVCAoY2gpOworKyMgIGVsc2UKKysJCQkgICAgaWYgKGlzd2N0eXBlIChidG93YyAoY2gpLCB3dCkpCisrCQkJICAgICAgU0VUX0xJU1RfQklUIChjaCk7CisrIyAgZW5kaWYKKysKKysJCQkgICAgaWYgKHRyYW5zbGF0ZSAmJiAoaXNfdXBwZXIgfHwgaXNfbG93ZXIpCisrCQkJCSYmIChJU1VQUEVSIChjaCkgfHwgSVNMT1dFUiAoY2gpKSkKKysJCQkgICAgICBTRVRfTElTVF9CSVQgKGNoKTsKKysJCQkgIH0KKysKKysgICAgICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IHRydWU7CisrIyBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNoOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfYWxudW0gPSBTVFJFUSAoc3RyLCAiYWxudW0iKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX2FscGhhID0gU1RSRVEgKHN0ciwgImFscGhhIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19ibGFuayA9IFNUUkVRIChzdHIsICJibGFuayIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfY250cmwgPSBTVFJFUSAoc3RyLCAiY250cmwiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX2RpZ2l0ID0gU1RSRVEgKHN0ciwgImRpZ2l0Iik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19ncmFwaCA9IFNUUkVRIChzdHIsICJncmFwaCIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfbG93ZXIgPSBTVFJFUSAoc3RyLCAibG93ZXIiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX3ByaW50ID0gU1RSRVEgKHN0ciwgInByaW50Iik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19wdW5jdCA9IFNUUkVRIChzdHIsICJwdW5jdCIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfc3BhY2UgPSBTVFJFUSAoc3RyLCAic3BhY2UiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX3VwcGVyID0gU1RSRVEgKHN0ciwgInVwcGVyIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc194ZGlnaXQgPSBTVFJFUSAoc3RyLCAieGRpZ2l0Iik7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJU19DSEFSX0NMQVNTIChzdHIpKQorKwkJCSAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ1RZUEUpOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRocm93IGF3YXkgdGhlIF0gYXQgdGhlIGVuZCBvZiB0aGUgY2hhcmFjdGVyCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjaCA9IDA7IGNoIDwgMSA8PCBCWVRFV0lEVEg7IGNoKyspCisrICAgICAgICAgICAgICAgICAgICAgICAgICB7CisrCQkJICAgIC8qIFRoaXMgd2FzIHNwbGl0IGludG8gMyBpZidzIHRvCisrCQkJICAgICAgIGF2b2lkIGFuIGFyYml0cmFyeSBsaW1pdCBpbiBzb21lIGNvbXBpbGVyLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAgIChpc19hbG51bSAgJiYgSVNBTE5VTSAoY2gpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGlzX2FscGhhICAmJiBJU0FMUEhBIChjaCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNfYmxhbmsgICYmIElTQkxBTksgKGNoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpc19jbnRybCAgJiYgSVNDTlRSTCAoY2gpKSkKKysJCQkgICAgICBTRVRfTElTVF9CSVQgKGNoKTsKKysJCQkgICAgaWYgKCAgIChpc19kaWdpdCAgJiYgSVNESUdJVCAoY2gpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGlzX2dyYXBoICAmJiBJU0dSQVBIIChjaCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNfbG93ZXIgICYmIElTTE9XRVIgKGNoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpc19wcmludCAgJiYgSVNQUklOVCAoY2gpKSkKKysJCQkgICAgICBTRVRfTElTVF9CSVQgKGNoKTsKKysJCQkgICAgaWYgKCAgIChpc19wdW5jdCAgJiYgSVNQVU5DVCAoY2gpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGlzX3NwYWNlICAmJiBJU1NQQUNFIChjaCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNfdXBwZXIgICYmIElTVVBQRVIgKGNoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpc194ZGlnaXQgJiYgSVNYRElHSVQgKGNoKSkpCisrCQkJICAgICAgU0VUX0xJU1RfQklUIChjaCk7CisrCQkJICAgIGlmICggICB0cmFuc2xhdGUgJiYgKGlzX3VwcGVyIHx8IGlzX2xvd2VyKQorKwkJCQkmJiAoSVNVUFBFUiAoY2gpIHx8IElTTE9XRVIgKGNoKSkpCisrCQkJICAgICAgU0VUX0xJU1RfQklUIChjaCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSB0cnVlOworKyMgZW5kaWYJLyogbGliYyB8fCB3Y3R5cGUuaCAqLworKyAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBjMSsrOworKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjMS0tKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUVU5GRVRDSDsKKysgICAgICAgICAgICAgICAgICAgICAgICBTRVRfTElTVF9CSVQgKCdbJyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0xJU1RfQklUICgnOicpOworKwkJCXJhbmdlX3N0YXJ0ID0gJzonOworKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bnRheCAmIFJFX0NIQVJfQ0xBU1NFUyAmJiBjID09ICdbJyAmJiAqcCA9PSAnPScpCisrCQkgIHsKKysJCSAgICB1bnNpZ25lZCBjaGFyIHN0cltNQl9MRU5fTUFYICsgMV07CisrIyBpZmRlZiBfTElCQworKwkJICAgIHVpbnQzMl90IG5ydWxlcyA9CisrCQkgICAgICBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworKyMgZW5kaWYKKysKKysJCSAgICBQQVRGRVRDSCAoYyk7CisrCQkgICAgYzEgPSAwOworKworKwkJICAgIC8qIElmIHBhdHRlcm4gaXMgYFtbPScuICAqLworKwkJICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysJCSAgICBmb3IgKDs7KQorKwkJICAgICAgeworKwkJCVBBVEZFVENIIChjKTsKKysJCQlpZiAoKGMgPT0gJz0nICYmICpwID09ICddJykgfHwgcCA9PSBwZW5kKQorKwkJCSAgYnJlYWs7CisrCQkJaWYgKGMxIDwgTUJfTEVOX01BWCkKKysJCQkgIHN0cltjMSsrXSA9IGM7CisrCQkJZWxzZQorKwkJCSAgLyogVGhpcyBpcyBpbiBhbnkgY2FzZSBhbiBpbnZhbGlkIGNsYXNzIG5hbWUuICAqLworKwkJCSAgc3RyWzBdID0gJ1wwJzsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKwkJICAgIHN0cltjMV0gPSAnXDAnOworKworKwkJICAgIGlmIChjID09ICc9JyAmJiAqcCA9PSAnXScgJiYgc3RyWzBdICE9ICdcMCcpCisrCQkgICAgICB7CisrCQkJLyogSWYgd2UgaGF2ZSBubyBjb2xsYXRpb24gZGF0YSB3ZSB1c2UgdGhlIGRlZmF1bHQKKysJCQkgICBjb2xsYXRpb24gaW4gd2hpY2ggZWFjaCBjaGFyYWN0ZXIgaXMgaW4gYSBjbGFzcworKwkJCSAgIGJ5IGl0c2VsZi4gIEl0IGFsc28gbWVhbnMgdGhhdCBBU0NJSSBpcyB0aGUKKysJCQkgICBjaGFyYWN0ZXIgc2V0IGFuZCB0aGVyZWZvcmUgd2UgY2Fubm90IGhhdmUgY2hhcmFjdGVyCisrCQkJICAgd2l0aCBtb3JlIHRoYW4gb25lIGJ5dGUgaW4gdGhlIG11bHRpYnl0ZQorKwkJCSAgIHJlcHJlc2VudGF0aW9uLiAgKi8KKysjIGlmZGVmIF9MSUJDCisrCQkJaWYgKG5ydWxlcyA9PSAwKQorKyMgZW5kaWYKKysJCQkgIHsKKysJCQkgICAgaWYgKGMxICE9IDEpCisrCQkJICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ09MTEFURSk7CisrCisrCQkJICAgIC8qIFRocm93IGF3YXkgdGhlIF0gYXQgdGhlIGVuZCBvZiB0aGUgZXF1aXZhbGVuY2UKKysJCQkgICAgICAgY2xhc3MuICAqLworKwkJCSAgICBQQVRGRVRDSCAoYyk7CisrCisrCQkJICAgIC8qIFNldCB0aGUgYml0IGZvciB0aGUgY2hhcmFjdGVyLiAgKi8KKysJCQkgICAgU0VUX0xJU1RfQklUIChzdHJbMF0pOworKwkJCSAgfQorKyMgaWZkZWYgX0xJQkMKKysJCQllbHNlCisrCQkJICB7CisrCQkJICAgIC8qIFRyeSB0byBtYXRjaCB0aGUgYnl0ZSBzZXF1ZW5jZSBpbiBgc3RyJyBhZ2FpbnN0CisrCQkJICAgICAgIHRob3NlIGtub3duIHRvIHRoZSBjb2xsYXRlIGltcGxlbWVudGF0aW9uLgorKwkJCSAgICAgICBGaXJzdCBmaW5kIG91dCB3aGV0aGVyIHRoZSBieXRlcyBpbiBgc3RyJyBhcmUKKysJCQkgICAgICAgYWN0dWFsbHkgZnJvbSBleGFjdGx5IG9uZSBjaGFyYWN0ZXIuICAqLworKwkJCSAgICBjb25zdCBpbnQzMl90ICp0YWJsZTsKKysJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqd2VpZ2h0czsKKysJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZXh0cmE7CisrCQkJICAgIGNvbnN0IGludDMyX3QgKmluZGlyZWN0OworKwkJCSAgICBpbnQzMl90IGlkeDsKKysJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3AgPSBzdHI7CisrCQkJICAgIGludCBjaDsKKysKKysJCQkgICAgdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKQorKwkJCSAgICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9UQUJMRU1CKTsKKysJCQkgICAgd2VpZ2h0cyA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisrCQkJICAgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1dFSUdIVE1CKTsKKysJCQkgICAgZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorKwkJCSAgICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9FWFRSQU1CKTsKKysJCQkgICAgaW5kaXJlY3QgPSAoY29uc3QgaW50MzJfdCAqKQorKwkJCSAgICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9JTkRJUkVDVE1CKTsKKysJCQkgICAgaWR4ID0gRklORElEWCAodGFibGUsIGluZGlyZWN0LCBleHRyYSwgJmNwLCAxKTsKKysJCQkgICAgaWYgKGlkeCA9PSAwIHx8IGNwIDwgc3RyICsgYzEpCisrCQkJICAgICAgLyogVGhpcyBpcyBubyB2YWxpZCBjaGFyYWN0ZXIuICAqLworKwkJCSAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNPTExBVEUpOworKworKwkJCSAgICAvKiBUaHJvdyBhd2F5IHRoZSBdIGF0IHRoZSBlbmQgb2YgdGhlIGVxdWl2YWxlbmNlCisrCQkJICAgICAgIGNsYXNzLiAgKi8KKysJCQkgICAgUEFURkVUQ0ggKGMpOworKworKwkJCSAgICAvKiBOb3cgd2UgaGF2ZSB0byBnbyB0aHJvdWdodCB0aGUgd2hvbGUgdGFibGUKKysJCQkgICAgICAgYW5kIGZpbmQgYWxsIGNoYXJhY3RlcnMgd2hpY2ggaGF2ZSB0aGUgc2FtZQorKwkJCSAgICAgICBmaXJzdCBsZXZlbCB3ZWlnaHQuCisrCisrCQkJICAgICAgIFhYWCBOb3RlIHRoYXQgdGhpcyBpcyBub3QgZW50aXJlbHkgY29ycmVjdC4KKysJCQkgICAgICAgd2Ugd291bGQgaGF2ZSB0byBtYXRjaCBtdWx0aWJ5dGUgc2VxdWVuY2VzCisrCQkJICAgICAgIGJ1dCB0aGlzIGlzIG5vdCBwb3NzaWJsZSB3aXRoIHRoZSBjdXJyZW50CisrCQkJICAgICAgIGltcGxlbWVudGF0aW9uLiAgKi8KKysJCQkgICAgZm9yIChjaCA9IDE7IGNoIDwgMjU2OyArK2NoKQorKwkJCSAgICAgIC8qIFhYWCBUaGlzIHRlc3Qgd291bGQgaGF2ZSB0byBiZSBjaGFuZ2VkIGlmIHdlCisrCQkJCSB3b3VsZCBhbGxvdyBtYXRjaGluZyBtdWx0aWJ5dGUgc2VxdWVuY2VzLiAgKi8KKysJCQkgICAgICBpZiAodGFibGVbY2hdID4gMCkKKysJCQkJeworKwkJCQkgIGludDMyX3QgaWR4MiA9IHRhYmxlW2NoXTsKKysJCQkJICBzaXplX3QgbGVuID0gd2VpZ2h0c1tpZHgyXTsKKysKKysJCQkJICAvKiBUZXN0IHdoZXRoZXIgdGhlIGxlbmdodHMgbWF0Y2guICAqLworKwkJCQkgIGlmICh3ZWlnaHRzW2lkeF0gPT0gbGVuKQorKwkJCQkgICAgeworKwkJCQkgICAgICAvKiBUaGV5IGRvLiAgTmV3IGNvbXBhcmUgdGhlIGJ5dGVzIG9mCisrCQkJCQkgdGhlIHdlaWdodC4gICovCisrCQkJCSAgICAgIHNpemVfdCBjbnQgPSAwOworKworKwkJCQkgICAgICB3aGlsZSAoY250IDwgbGVuCisrCQkJCQkgICAgICYmICh3ZWlnaHRzW2lkeCArIDEgKyBjbnRdCisrCQkJCQkJID09IHdlaWdodHNbaWR4MiArIDEgKyBjbnRdKSkKKysJCQkJCSsrY250OworKworKwkJCQkgICAgICBpZiAoY250ID09IGxlbikKKysJCQkJCS8qIFRoZXkgbWF0Y2guICBNYXJrIHRoZSBjaGFyYWN0ZXIgYXMKKysJCQkJCSAgIGFjY2VwdGFibGUuICAqLworKwkJCQkJU0VUX0xJU1RfQklUIChjaCk7CisrCQkJCSAgICB9CisrCQkJCX0KKysJCQkgIH0KKysjIGVuZGlmCisrCQkJaGFkX2NoYXJfY2xhc3MgPSB0cnVlOworKwkJICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgYzErKzsKKysgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYzEtLSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVFVORkVUQ0g7CisrICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0xJU1RfQklUICgnWycpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9MSVNUX0JJVCAoJz0nKTsKKysJCQlyYW5nZV9zdGFydCA9ICc9JzsKKysgICAgICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCQkgIH0KKysgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVfQ0hBUl9DTEFTU0VTICYmIGMgPT0gJ1snICYmICpwID09ICcuJykKKysJCSAgeworKwkJICAgIHVuc2lnbmVkIGNoYXIgc3RyWzEyOF07CS8qIFNob3VsZCBiZSBsYXJnZSBlbm91Z2guICAqLworKyMgaWZkZWYgX0xJQkMKKysJCSAgICB1aW50MzJfdCBucnVsZXMgPQorKwkJICAgICAgX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKysjIGVuZGlmCisrCisrCQkgICAgUEFURkVUQ0ggKGMpOworKwkJICAgIGMxID0gMDsKKysKKysJCSAgICAvKiBJZiBwYXR0ZXJuIGlzIGBbWy4nLiAgKi8KKysJCSAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrCQkgICAgZm9yICg7OykKKysJCSAgICAgIHsKKysJCQlQQVRGRVRDSCAoYyk7CisrCQkJaWYgKChjID09ICcuJyAmJiAqcCA9PSAnXScpIHx8IHAgPT0gcGVuZCkKKysJCQkgIGJyZWFrOworKwkJCWlmIChjMSA8IHNpemVvZiAoc3RyKSkKKysJCQkgIHN0cltjMSsrXSA9IGM7CisrCQkJZWxzZQorKwkJCSAgLyogVGhpcyBpcyBpbiBhbnkgY2FzZSBhbiBpbnZhbGlkIGNsYXNzIG5hbWUuICAqLworKwkJCSAgc3RyWzBdID0gJ1wwJzsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKwkJICAgIHN0cltjMV0gPSAnXDAnOworKworKwkJICAgIGlmIChjID09ICcuJyAmJiAqcCA9PSAnXScgJiYgc3RyWzBdICE9ICdcMCcpCisrCQkgICAgICB7CisrCQkJLyogSWYgd2UgaGF2ZSBubyBjb2xsYXRpb24gZGF0YSB3ZSB1c2UgdGhlIGRlZmF1bHQKKysJCQkgICBjb2xsYXRpb24gaW4gd2hpY2ggZWFjaCBjaGFyYWN0ZXIgaXMgdGhlIG5hbWUKKysJCQkgICBmb3IgaXRzIG93biBjbGFzcyB3aGljaCBjb250YWlucyBvbmx5IHRoZSBvbmUKKysJCQkgICBjaGFyYWN0ZXIuICBJdCBhbHNvIG1lYW5zIHRoYXQgQVNDSUkgaXMgdGhlCisrCQkJICAgY2hhcmFjdGVyIHNldCBhbmQgdGhlcmVmb3JlIHdlIGNhbm5vdCBoYXZlIGNoYXJhY3RlcgorKwkJCSAgIHdpdGggbW9yZSB0aGFuIG9uZSBieXRlIGluIHRoZSBtdWx0aWJ5dGUKKysJCQkgICByZXByZXNlbnRhdGlvbi4gICovCisrIyBpZmRlZiBfTElCQworKwkJCWlmIChucnVsZXMgPT0gMCkKKysjIGVuZGlmCisrCQkJICB7CisrCQkJICAgIGlmIChjMSAhPSAxKQorKwkJCSAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNPTExBVEUpOworKworKwkJCSAgICAvKiBUaHJvdyBhd2F5IHRoZSBdIGF0IHRoZSBlbmQgb2YgdGhlIGVxdWl2YWxlbmNlCisrCQkJICAgICAgIGNsYXNzLiAgKi8KKysJCQkgICAgUEFURkVUQ0ggKGMpOworKworKwkJCSAgICAvKiBTZXQgdGhlIGJpdCBmb3IgdGhlIGNoYXJhY3Rlci4gICovCisrCQkJICAgIFNFVF9MSVNUX0JJVCAoc3RyWzBdKTsKKysJCQkgICAgcmFuZ2Vfc3RhcnQgPSAoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc3RyKVswXTsKKysJCQkgIH0KKysjIGlmZGVmIF9MSUJDCisrCQkJZWxzZQorKwkJCSAgeworKwkJCSAgICAvKiBUcnkgdG8gbWF0Y2ggdGhlIGJ5dGUgc2VxdWVuY2UgaW4gYHN0cicgYWdhaW5zdAorKwkJCSAgICAgICB0aG9zZSBrbm93biB0byB0aGUgY29sbGF0ZSBpbXBsZW1lbnRhdGlvbi4KKysJCQkgICAgICAgRmlyc3QgZmluZCBvdXQgd2hldGhlciB0aGUgYnl0ZXMgaW4gYHN0cicgYXJlCisrCQkJICAgICAgIGFjdHVhbGx5IGZyb20gZXhhY3RseSBvbmUgY2hhcmFjdGVyLiAgKi8KKysJCQkgICAgaW50MzJfdCB0YWJsZV9zaXplOworKwkJCSAgICBjb25zdCBpbnQzMl90ICpzeW1iX3RhYmxlOworKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpleHRyYTsKKysJCQkgICAgaW50MzJfdCBpZHg7CisrCQkJICAgIGludDMyX3QgZWxlbTsKKysJCQkgICAgaW50MzJfdCBzZWNvbmQ7CisrCQkJICAgIGludDMyX3QgaGFzaDsKKysKKysJCQkgICAgdGFibGVfc2l6ZSA9CisrCQkJICAgICAgX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwKKysJCQkJCQlfTkxfQ09MTEFURV9TWU1CX0hBU0hfU0laRU1CKTsKKysJCQkgICAgc3ltYl90YWJsZSA9IChjb25zdCBpbnQzMl90ICopCisrCQkJICAgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisrCQkJCQkgICBfTkxfQ09MTEFURV9TWU1CX1RBQkxFTUIpOworKwkJCSAgICBleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisrCQkJICAgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisrCQkJCQkgICBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIpOworKworKwkJCSAgICAvKiBMb2NhdGUgdGhlIGNoYXJhY3RlciBpbiB0aGUgaGFzaGluZyB0YWJsZS4gICovCisrCQkJICAgIGhhc2ggPSBlbGVtX2hhc2ggKChjb25zdCBjaGFyICopIHN0ciwgYzEpOworKworKwkJCSAgICBpZHggPSAwOworKwkJCSAgICBlbGVtID0gaGFzaCAlIHRhYmxlX3NpemU7CisrCQkJICAgIHNlY29uZCA9IGhhc2ggJSAodGFibGVfc2l6ZSAtIDIpOworKwkJCSAgICB3aGlsZSAoc3ltYl90YWJsZVsyICogZWxlbV0gIT0gMCkKKysJCQkgICAgICB7CisrCQkJCS8qIEZpcnN0IGNvbXBhcmUgdGhlIGhhc2hpbmcgdmFsdWUuICAqLworKwkJCQlpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gPT0gaGFzaAorKwkJCQkgICAgJiYgYzEgPT0gZXh0cmFbc3ltYl90YWJsZVsyICogZWxlbSArIDFdXQorKwkJCQkgICAgJiYgbWVtY21wIChzdHIsCisrCQkJCQkgICAgICAgJmV4dHJhW3N5bWJfdGFibGVbMiAqIGVsZW0gKyAxXQorKwkJCQkJCSAgICAgKyAxXSwKKysJCQkJCSAgICAgICBjMSkgPT0gMCkKKysJCQkJICB7CisrCQkJCSAgICAvKiBZZXAsIHRoaXMgaXMgdGhlIGVudHJ5LiAgKi8KKysJCQkJICAgIGlkeCA9IHN5bWJfdGFibGVbMiAqIGVsZW0gKyAxXTsKKysJCQkJICAgIGlkeCArPSAxICsgZXh0cmFbaWR4XTsKKysJCQkJICAgIGJyZWFrOworKwkJCQkgIH0KKysKKysJCQkJLyogTmV4dCBlbnRyeS4gICovCisrCQkJCWVsZW0gKz0gc2Vjb25kOworKwkJCSAgICAgIH0KKysKKysJCQkgICAgaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dID09IDApCisrCQkJICAgICAgLyogVGhpcyBpcyBubyB2YWxpZCBjaGFyYWN0ZXIuICAqLworKwkJCSAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNPTExBVEUpOworKworKwkJCSAgICAvKiBUaHJvdyBhd2F5IHRoZSBdIGF0IHRoZSBlbmQgb2YgdGhlIGVxdWl2YWxlbmNlCisrCQkJICAgICAgIGNsYXNzLiAgKi8KKysJCQkgICAgUEFURkVUQ0ggKGMpOworKworKwkJCSAgICAvKiBOb3cgYWRkIHRoZSBtdWx0aWJ5dGUgY2hhcmFjdGVyKHMpIHdlIGZvdW5kCisrCQkJICAgICAgIHRvIHRoZSBhY2NlcHQgbGlzdC4KKysKKysJCQkgICAgICAgWFhYIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBlbnRpcmVseSBjb3JyZWN0LgorKwkJCSAgICAgICB3ZSB3b3VsZCBoYXZlIHRvIG1hdGNoIG11bHRpYnl0ZSBzZXF1ZW5jZXMKKysJCQkgICAgICAgYnV0IHRoaXMgaXMgbm90IHBvc3NpYmxlIHdpdGggdGhlIGN1cnJlbnQKKysJCQkgICAgICAgaW1wbGVtZW50YXRpb24uICBBbHNvLCB3ZSBoYXZlIHRvIG1hdGNoCisrCQkJICAgICAgIGNvbGxhdGluZyBzeW1ib2xzLCB3aGljaCBleHBhbmQgdG8gbW9yZSB0aGFuCisrCQkJICAgICAgIG9uZSBmaWxlLCBhcyBhIHdob2xlIGFuZCBub3QgYWxsb3cgdGhlCisrCQkJICAgICAgIGluZGl2aWR1YWwgYnl0ZXMuICAqLworKwkJCSAgICBjMSA9IGV4dHJhW2lkeCsrXTsKKysJCQkgICAgaWYgKGMxID09IDEpCisrCQkJICAgICAgcmFuZ2Vfc3RhcnQgPSBleHRyYVtpZHhdOworKwkJCSAgICB3aGlsZSAoYzEtLSA+IDApCisrCQkJICAgICAgeworKwkJCQlTRVRfTElTVF9CSVQgKGV4dHJhW2lkeF0pOworKwkJCQkrK2lkeDsKKysJCQkgICAgICB9CisrCQkJICB9CisrIyBlbmRpZgorKwkJCWhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrCQkgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBjMSsrOworKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjMS0tKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUVU5GRVRDSDsKKysgICAgICAgICAgICAgICAgICAgICAgICBTRVRfTElTVF9CSVQgKCdbJyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0xJU1RfQklUICgnLicpOworKwkJCXJhbmdlX3N0YXJ0ID0gJy4nOworKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgfQorKyAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysgICAgICAgICAgICAgICAgICAgIFNFVF9MSVNUX0JJVCAoYyk7CisrCQkgICAgcmFuZ2Vfc3RhcnQgPSBjOworKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAvKiBEaXNjYXJkIGFueSAobm9uKW1hdGNoaW5nIGxpc3QgYnl0ZXMgdGhhdCBhcmUgYWxsIDAgYXQgdGhlCisrICAgICAgICAgICAgICAgZW5kIG9mIHRoZSBtYXAuICBEZWNyZWFzZSB0aGUgbWFwLWxlbmd0aCBieXRlIHRvby4gICovCisrICAgICAgICAgICAgd2hpbGUgKChpbnQpIGJbLTFdID4gMCAmJiBiW2JbLTFdIC0gMV0gPT0gMCkKKysgICAgICAgICAgICAgIGJbLTFdLS07CisrICAgICAgICAgICAgYiArPSBiWy0xXTsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysgICAgICAgICAgfQorKyAgICAgICAgICBicmVhazsKKysKKysKKysJY2FzZSAnKCc6CisrICAgICAgICAgIGlmIChzeW50YXggJiBSRV9OT19CS19QQVJFTlMpCisrICAgICAgICAgICAgZ290byBoYW5kbGVfb3BlbjsKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrCisrCisrICAgICAgICBjYXNlICcpJzoKKysgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0JLX1BBUkVOUykKKysgICAgICAgICAgICBnb3RvIGhhbmRsZV9jbG9zZTsKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrCisrCisrICAgICAgICBjYXNlICdcbic6CisrICAgICAgICAgIGlmIChzeW50YXggJiBSRV9ORVdMSU5FX0FMVCkKKysgICAgICAgICAgICBnb3RvIGhhbmRsZV9hbHQ7CisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKworKworKwljYXNlICd8JzoKKysgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0JLX1ZCQVIpCisrICAgICAgICAgICAgZ290byBoYW5kbGVfYWx0OworKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysKKysKKysgICAgICAgIGNhc2UgJ3snOgorKyAgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX0lOVEVSVkFMUyAmJiBzeW50YXggJiBSRV9OT19CS19CUkFDRVMpCisrICAgICAgICAgICAgIGdvdG8gaGFuZGxlX2ludGVydmFsOworKyAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKworKworKyAgICAgICAgY2FzZSAnXFwnOgorKyAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VFU0NBUEUpOworKworKyAgICAgICAgICAvKiBEbyBub3QgdHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIFwsIHNvIHRoYXQgd2UgY2FuCisrICAgICAgICAgICAgIGRpc3Rpbmd1aXNoLCBlLmcuLCBcQiBmcm9tIFxiLCBldmVuIGlmIHdlIG5vcm1hbGx5IHdvdWxkCisrICAgICAgICAgICAgIHRyYW5zbGF0ZSwgZS5nLiwgQiB0byBiLiAgKi8KKysgICAgICAgICAgUEFURkVUQ0hfUkFXIChjKTsKKysKKysgICAgICAgICAgc3dpdGNoIChjKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICBjYXNlICcoJzoKKysgICAgICAgICAgICAgIGlmIChzeW50YXggJiBSRV9OT19CS19QQVJFTlMpCisrICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2JhY2tzbGFzaDsKKysKKysgICAgICAgICAgICBoYW5kbGVfb3BlbjoKKysgICAgICAgICAgICAgIGJ1ZnAtPnJlX25zdWIrKzsKKysgICAgICAgICAgICAgIHJlZ251bSsrOworKworKyAgICAgICAgICAgICAgaWYgKENPTVBJTEVfU1RBQ0tfRlVMTCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIFJFVEFMTE9DIChjb21waWxlX3N0YWNrLnN0YWNrLCBjb21waWxlX3N0YWNrLnNpemUgPDwgMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZV9zdGFja19lbHRfdCk7CisrICAgICAgICAgICAgICAgICAgaWYgKGNvbXBpbGVfc3RhY2suc3RhY2sgPT0gTlVMTCkgcmV0dXJuIFJFR19FU1BBQ0U7CisrCisrICAgICAgICAgICAgICAgICAgY29tcGlsZV9zdGFjay5zaXplIDw8PSAxOworKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAvKiBUaGVzZSBhcmUgdGhlIHZhbHVlcyB0byByZXN0b3JlIHdoZW4gd2UgaGl0IGVuZCBvZiB0aGlzCisrICAgICAgICAgICAgICAgICBncm91cC4gIFRoZXkgYXJlIGFsbCByZWxhdGl2ZSBvZmZzZXRzLCBzbyB0aGF0IGlmIHRoZQorKyAgICAgICAgICAgICAgICAgd2hvbGUgcGF0dGVybiBtb3ZlcyBiZWNhdXNlIG9mIHJlYWxsb2MsIHRoZXkgd2lsbCBzdGlsbAorKyAgICAgICAgICAgICAgICAgYmUgdmFsaWQuICAqLworKyAgICAgICAgICAgICAgQ09NUElMRV9TVEFDS19UT1AuYmVnYWx0X29mZnNldCA9IGJlZ2FsdCAtIENPTVBJTEVEX0JVRkZFUl9WQVI7CisrICAgICAgICAgICAgICBDT01QSUxFX1NUQUNLX1RPUC5maXh1cF9hbHRfanVtcAorKyAgICAgICAgICAgICAgICA9IGZpeHVwX2FsdF9qdW1wID8gZml4dXBfYWx0X2p1bXAgLSBDT01QSUxFRF9CVUZGRVJfVkFSICsgMSA6IDA7CisrICAgICAgICAgICAgICBDT01QSUxFX1NUQUNLX1RPUC5sYXN0c3RhcnRfb2Zmc2V0ID0gYiAtIENPTVBJTEVEX0JVRkZFUl9WQVI7CisrICAgICAgICAgICAgICBDT01QSUxFX1NUQUNLX1RPUC5yZWdudW0gPSByZWdudW07CisrCisrICAgICAgICAgICAgICAvKiBXZSB3aWxsIGV2ZW50dWFsbHkgcmVwbGFjZSB0aGUgMCB3aXRoIHRoZSBudW1iZXIgb2YKKysgICAgICAgICAgICAgICAgIGdyb3VwcyBpbm5lciB0byB0aGlzIG9uZS4gIEJ1dCBkbyBub3QgcHVzaCBhCisrICAgICAgICAgICAgICAgICBzdGFydF9tZW1vcnkgZm9yIGdyb3VwcyBiZXlvbmQgdGhlIGxhc3Qgb25lIHdlIGNhbgorKyAgICAgICAgICAgICAgICAgcmVwcmVzZW50IGluIHRoZSBjb21waWxlZCBwYXR0ZXJuLiAgKi8KKysgICAgICAgICAgICAgIGlmIChyZWdudW0gPD0gTUFYX1JFR05VTSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIENPTVBJTEVfU1RBQ0tfVE9QLmlubmVyX2dyb3VwX29mZnNldCA9IGIKKysJCSAgICAtIENPTVBJTEVEX0JVRkZFUl9WQVIgKyAyOworKyAgICAgICAgICAgICAgICAgIEJVRl9QVVNIXzMgKHN0YXJ0X21lbW9yeSwgcmVnbnVtLCAwKTsKKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgY29tcGlsZV9zdGFjay5hdmFpbCsrOworKworKyAgICAgICAgICAgICAgZml4dXBfYWx0X2p1bXAgPSAwOworKyAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gMDsKKysgICAgICAgICAgICAgIGJlZ2FsdCA9IGI7CisrCSAgICAgIC8qIElmIHdlJ3ZlIHJlYWNoZWQgTUFYX1JFR05VTSBncm91cHMsIHRoZW4gdGhpcyBvcGVuCisrCQkgd29uJ3QgYWN0dWFsbHkgZ2VuZXJhdGUgYW55IGNvZGUsIHNvIHdlJ2xsIGhhdmUgdG8KKysJCSBjbGVhciBwZW5kaW5nX2V4YWN0IGV4cGxpY2l0bHkuICAqLworKwkgICAgICBwZW5kaW5nX2V4YWN0ID0gMDsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgICAgIGNhc2UgJyknOgorKyAgICAgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0JLX1BBUkVOUykgZ290byBub3JtYWxfYmFja3NsYXNoOworKworKyAgICAgICAgICAgICAgaWYgKENPTVBJTEVfU1RBQ0tfRU1QVFkpCisrCQl7CisrCQkgIGlmIChzeW50YXggJiBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEKQorKwkJICAgIGdvdG8gbm9ybWFsX2JhY2tzbGFzaDsKKysJCSAgZWxzZQorKwkJICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRVJQQVJFTik7CisrCQl9CisrCisrICAgICAgICAgICAgaGFuZGxlX2Nsb3NlOgorKyAgICAgICAgICAgICAgaWYgKGZpeHVwX2FsdF9qdW1wKQorKyAgICAgICAgICAgICAgICB7IC8qIFB1c2ggYSBkdW1teSBmYWlsdXJlIHBvaW50IGF0IHRoZSBlbmQgb2YgdGhlCisrICAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmUgZm9yIGEgcG9zc2libGUgZnV0dXJlCisrICAgICAgICAgICAgICAgICAgICAgYHBvcF9mYWlsdXJlX2p1bXAnIHRvIHBvcC4gIFNlZSBjb21tZW50cyBhdAorKyAgICAgICAgICAgICAgICAgICAgIGBwdXNoX2R1bW15X2ZhaWx1cmUnIGluIGByZV9tYXRjaF8yJy4gICovCisrICAgICAgICAgICAgICAgICAgQlVGX1BVU0ggKHB1c2hfZHVtbXlfZmFpbHVyZSk7CisrCisrICAgICAgICAgICAgICAgICAgLyogV2UgYWxsb2NhdGVkIHNwYWNlIGZvciB0aGlzIGp1bXAgd2hlbiB3ZSBhc3NpZ25lZAorKyAgICAgICAgICAgICAgICAgICAgIHRvIGBmaXh1cF9hbHRfanVtcCcsIGluIHRoZSBgaGFuZGxlX2FsdCcgY2FzZSBiZWxvdy4gICovCisrICAgICAgICAgICAgICAgICAgU1RPUkVfSlVNUCAoanVtcF9wYXN0X2FsdCwgZml4dXBfYWx0X2p1bXAsIGIgLSAxKTsKKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgLyogU2VlIHNpbWlsYXIgY29kZSBmb3IgYmFja3NsYXNoZWQgbGVmdCBwYXJlbiBhYm92ZS4gICovCisrICAgICAgICAgICAgICBpZiAoQ09NUElMRV9TVEFDS19FTVBUWSkKKysJCXsKKysJCSAgaWYgKHN5bnRheCAmIFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQpCisrCQkgICAgZ290byBub3JtYWxfY2hhcjsKKysJCSAgZWxzZQorKwkJICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRVJQQVJFTik7CisrCQl9CisrCisrICAgICAgICAgICAgICAvKiBTaW5jZSB3ZSBqdXN0IGNoZWNrZWQgZm9yIGFuIGVtcHR5IHN0YWNrIGFib3ZlLCB0aGlzCisrICAgICAgICAgICAgICAgICBgYGNhbid0IGhhcHBlbicnLiAgKi8KKysgICAgICAgICAgICAgIGFzc2VydCAoY29tcGlsZV9zdGFjay5hdmFpbCAhPSAwKTsKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgLyogV2UgZG9uJ3QganVzdCB3YW50IHRvIHJlc3RvcmUgaW50byBgcmVnbnVtJywgYmVjYXVzZQorKyAgICAgICAgICAgICAgICAgICBsYXRlciBncm91cHMgc2hvdWxkIGNvbnRpbnVlIHRvIGJlIG51bWJlcmVkIGhpZ2hlciwKKysgICAgICAgICAgICAgICAgICAgYXMgaW4gYChhYiljKGRlKScgLS0gdGhlIHNlY29uZCBncm91cCBpcyAjMi4gICovCisrICAgICAgICAgICAgICAgIHJlZ251bV90IHRoaXNfZ3JvdXBfcmVnbnVtOworKworKyAgICAgICAgICAgICAgICBjb21waWxlX3N0YWNrLmF2YWlsLS07CisrICAgICAgICAgICAgICAgIGJlZ2FsdCA9IENPTVBJTEVEX0JVRkZFUl9WQVIgKyBDT01QSUxFX1NUQUNLX1RPUC5iZWdhbHRfb2Zmc2V0OworKyAgICAgICAgICAgICAgICBmaXh1cF9hbHRfanVtcAorKyAgICAgICAgICAgICAgICAgID0gQ09NUElMRV9TVEFDS19UT1AuZml4dXBfYWx0X2p1bXAKKysgICAgICAgICAgICAgICAgICAgID8gQ09NUElMRURfQlVGRkVSX1ZBUiArIENPTVBJTEVfU1RBQ0tfVE9QLmZpeHVwX2FsdF9qdW1wIC0gMQorKyAgICAgICAgICAgICAgICAgICAgOiAwOworKyAgICAgICAgICAgICAgICBsYXN0c3RhcnQgPSBDT01QSUxFRF9CVUZGRVJfVkFSICsgQ09NUElMRV9TVEFDS19UT1AubGFzdHN0YXJ0X29mZnNldDsKKysgICAgICAgICAgICAgICAgdGhpc19ncm91cF9yZWdudW0gPSBDT01QSUxFX1NUQUNLX1RPUC5yZWdudW07CisrCQkvKiBJZiB3ZSd2ZSByZWFjaGVkIE1BWF9SRUdOVU0gZ3JvdXBzLCB0aGVuIHRoaXMgb3BlbgorKwkJICAgd29uJ3QgYWN0dWFsbHkgZ2VuZXJhdGUgYW55IGNvZGUsIHNvIHdlJ2xsIGhhdmUgdG8KKysJCSAgIGNsZWFyIHBlbmRpbmdfZXhhY3QgZXhwbGljaXRseS4gICovCisrCQlwZW5kaW5nX2V4YWN0ID0gMDsKKysKKysgICAgICAgICAgICAgICAgLyogV2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgZ3JvdXAsIHNvIG5vdyB3ZSBrbm93IGhvdyBtYW55CisrICAgICAgICAgICAgICAgICAgIGdyb3VwcyB3ZXJlIGluc2lkZSB0aGlzIG9uZS4gICovCisrICAgICAgICAgICAgICAgIGlmICh0aGlzX2dyb3VwX3JlZ251bSA8PSBNQVhfUkVHTlVNKQorKyAgICAgICAgICAgICAgICAgIHsKKysJCSAgICBVQ0hBUl9UICppbm5lcl9ncm91cF9sb2MKKysgICAgICAgICAgICAgICAgICAgICAgPSBDT01QSUxFRF9CVUZGRVJfVkFSICsgQ09NUElMRV9TVEFDS19UT1AuaW5uZXJfZ3JvdXBfb2Zmc2V0OworKworKyAgICAgICAgICAgICAgICAgICAgKmlubmVyX2dyb3VwX2xvYyA9IHJlZ251bSAtIHRoaXNfZ3JvdXBfcmVnbnVtOworKyAgICAgICAgICAgICAgICAgICAgQlVGX1BVU0hfMyAoc3RvcF9tZW1vcnksIHRoaXNfZ3JvdXBfcmVnbnVtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnbnVtIC0gdGhpc19ncm91cF9yZWdudW0pOworKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgICAgIGNhc2UgJ3wnOgkJCQkJLyogYFx8Jy4gICovCisrICAgICAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMgfHwgc3ludGF4ICYgUkVfTk9fQktfVkJBUikKKysgICAgICAgICAgICAgICAgZ290byBub3JtYWxfYmFja3NsYXNoOworKyAgICAgICAgICAgIGhhbmRsZV9hbHQ6CisrICAgICAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMpCisrICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrCisrICAgICAgICAgICAgICAvKiBJbnNlcnQgYmVmb3JlIHRoZSBwcmV2aW91cyBhbHRlcm5hdGl2ZSBhIGp1bXAgd2hpY2gKKysgICAgICAgICAgICAgICAgIGp1bXBzIHRvIHRoaXMgYWx0ZXJuYXRpdmUgaWYgdGhlIGZvcm1lciBmYWlscy4gICovCisrICAgICAgICAgICAgICBHRVRfQlVGRkVSX1NQQUNFICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgICAgICBJTlNFUlRfSlVNUCAob25fZmFpbHVyZV9qdW1wLCBiZWdhbHQsCisrCQkJICAgYiArIDIgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgICAgICBwZW5kaW5nX2V4YWN0ID0gMDsKKysgICAgICAgICAgICAgIGIgKz0gMSArIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICAgICAgICAgICAgICAvKiBUaGUgYWx0ZXJuYXRpdmUgYmVmb3JlIHRoaXMgb25lIGhhcyBhIGp1bXAgYWZ0ZXIgaXQKKysgICAgICAgICAgICAgICAgIHdoaWNoIGdldHMgZXhlY3V0ZWQgaWYgaXQgZ2V0cyBtYXRjaGVkLiAgQWRqdXN0IHRoYXQKKysgICAgICAgICAgICAgICAgIGp1bXAgc28gaXQgd2lsbCBqdW1wIHRvIHRoaXMgYWx0ZXJuYXRpdmUncyBhbmFsb2dvdXMKKysgICAgICAgICAgICAgICAgIGp1bXAgKHB1dCBpbiBiZWxvdywgd2hpY2ggaW4gdHVybiB3aWxsIGp1bXAgdG8gdGhlIG5leHQKKysgICAgICAgICAgICAgICAgIChpZiBhbnkpIGFsdGVybmF0aXZlJ3Mgc3VjaCBqdW1wLCBldGMuKS4gIFRoZSBsYXN0IHN1Y2gKKysgICAgICAgICAgICAgICAgIGp1bXAganVtcHMgdG8gdGhlIGNvcnJlY3QgZmluYWwgZGVzdGluYXRpb24uICBBIHBpY3R1cmU6CisrICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fXyBfX19fXworKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgfCAgIHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB2IHwgICB2CisrICAgICAgICAgICAgICAgICAgICAgICAgIGEgfCBiICAgfCBjCisrCisrICAgICAgICAgICAgICAgICBJZiB3ZSBhcmUgYXQgYGInLCB0aGVuIGZpeHVwX2FsdF9qdW1wIHJpZ2h0IG5vdyBwb2ludHMgdG8gYQorKyAgICAgICAgICAgICAgICAgdGhyZWUtYnl0ZSBzcGFjZSBhZnRlciBgYScuICBXZSdsbCBwdXQgaW4gdGhlIGp1bXAsIHNldAorKyAgICAgICAgICAgICAgICAgZml4dXBfYWx0X2p1bXAgdG8gcmlnaHQgYWZ0ZXIgYGInLCBhbmQgbGVhdmUgYmVoaW5kIHRocmVlCisrICAgICAgICAgICAgICAgICBieXRlcyB3aGljaCB3ZSdsbCBmaWxsIGluIHdoZW4gd2UgZ2V0IHRvIGFmdGVyIGBjJy4gICovCisrCisrICAgICAgICAgICAgICBpZiAoZml4dXBfYWx0X2p1bXApCisrICAgICAgICAgICAgICAgIFNUT1JFX0pVTVAgKGp1bXBfcGFzdF9hbHQsIGZpeHVwX2FsdF9qdW1wLCBiKTsKKysKKysgICAgICAgICAgICAgIC8qIE1hcmsgYW5kIGxlYXZlIHNwYWNlIGZvciBhIGp1bXAgYWZ0ZXIgdGhpcyBhbHRlcm5hdGl2ZSwKKysgICAgICAgICAgICAgICAgIHRvIGJlIGZpbGxlZCBpbiBsYXRlciBlaXRoZXIgYnkgbmV4dCBhbHRlcm5hdGl2ZSBvcgorKyAgICAgICAgICAgICAgICAgd2hlbiBrbm93IHdlJ3JlIGF0IHRoZSBlbmQgb2YgYSBzZXJpZXMgb2YgYWx0ZXJuYXRpdmVzLiAgKi8KKysgICAgICAgICAgICAgIGZpeHVwX2FsdF9qdW1wID0gYjsKKysgICAgICAgICAgICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgICAgIGIgKz0gMSArIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICAgICAgICAgICAgICBsYXN0c3RhcnQgPSAwOworKyAgICAgICAgICAgICAgYmVnYWx0ID0gYjsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgICAgIGNhc2UgJ3snOgorKyAgICAgICAgICAgICAgLyogSWYgXHsgaXMgYSBsaXRlcmFsLiAgKi8KKysgICAgICAgICAgICAgIGlmICghKHN5bnRheCAmIFJFX0lOVEVSVkFMUykKKysgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSdyZSBhdCBgXHsnIGFuZCBpdCdzIG5vdCB0aGUgb3Blbi1pbnRlcnZhbAorKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLiAgKi8KKysJCSAgfHwgKHN5bnRheCAmIFJFX05PX0JLX0JSQUNFUykpCisrICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2JhY2tzbGFzaDsKKysKKysgICAgICAgICAgICBoYW5kbGVfaW50ZXJ2YWw6CisrICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIC8qIElmIGdvdCBoZXJlLCB0aGVuIHRoZSBzeW50YXggYWxsb3dzIGludGVydmFscy4gICovCisrCisrICAgICAgICAgICAgICAgIC8qIEF0IGxlYXN0IChtb3N0KSB0aGlzIG1hbnkgbWF0Y2hlcyBtdXN0IGJlIG1hZGUuICAqLworKyAgICAgICAgICAgICAgICBpbnQgbG93ZXJfYm91bmQgPSAtMSwgdXBwZXJfYm91bmQgPSAtMTsKKysKKysJCS8qIFBsYWNlIGluIHRoZSB1bmNvbXBpbGVkIHBhdHRlcm4gKGkuZS4sIGp1c3QgYWZ0ZXIKKysJCSAgIHRoZSAneycpIHRvIGdvIGJhY2sgdG8gaWYgdGhlIGludGVydmFsIGlzIGludmFsaWQuICAqLworKwkJY29uc3QgQ0hBUl9UICpiZWdfaW50ZXJ2YWwgPSBwOworKworKyAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKQorKwkJICBnb3RvIGludmFsaWRfaW50ZXJ2YWw7CisrCisrICAgICAgICAgICAgICAgIEdFVF9VTlNJR05FRF9OVU1CRVIgKGxvd2VyX2JvdW5kKTsKKysKKysgICAgICAgICAgICAgICAgaWYgKGMgPT0gJywnKQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIEdFVF9VTlNJR05FRF9OVU1CRVIgKHVwcGVyX2JvdW5kKTsKKysJCSAgICBpZiAodXBwZXJfYm91bmQgPCAwKQorKwkJICAgICAgdXBwZXJfYm91bmQgPSBSRV9EVVBfTUFYOworKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgIC8qIEludGVydmFsIHN1Y2ggYXMgYHsxfScgPT4gbWF0Y2ggZXhhY3RseSBvbmNlLiAqLworKyAgICAgICAgICAgICAgICAgIHVwcGVyX2JvdW5kID0gbG93ZXJfYm91bmQ7CisrCisrICAgICAgICAgICAgICAgIGlmICghICgwIDw9IGxvd2VyX2JvdW5kICYmIGxvd2VyX2JvdW5kIDw9IHVwcGVyX2JvdW5kKSkKKysJCSAgZ290byBpbnZhbGlkX2ludGVydmFsOworKworKyAgICAgICAgICAgICAgICBpZiAoIShzeW50YXggJiBSRV9OT19CS19CUkFDRVMpKQorKyAgICAgICAgICAgICAgICAgIHsKKysJCSAgICBpZiAoYyAhPSAnXFwnIHx8IHAgPT0gcGVuZCkKKysJCSAgICAgIGdvdG8gaW52YWxpZF9pbnRlcnZhbDsKKysgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIGlmIChjICE9ICd9JykKKysJCSAgZ290byBpbnZhbGlkX2ludGVydmFsOworKworKyAgICAgICAgICAgICAgICAvKiBJZiBpdCdzIGludmFsaWQgdG8gaGF2ZSBubyBwcmVjZWRpbmcgcmUuICAqLworKyAgICAgICAgICAgICAgICBpZiAoIWxhc3RzdGFydCkKKysgICAgICAgICAgICAgICAgICB7CisrCQkgICAgaWYgKHN5bnRheCAmIFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMKKysJCQkmJiAhKHN5bnRheCAmIFJFX0lOVkFMSURfSU5URVJWQUxfT1JEKSkKKysgICAgICAgICAgICAgICAgICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19CQURSUFQpOworKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVfQ09OVEVYVF9JTkRFUF9PUFMpCisrICAgICAgICAgICAgICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdW5mZXRjaF9pbnRlcnZhbDsKKysgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIC8qIFdlIGp1c3QgcGFyc2VkIGEgdmFsaWQgaW50ZXJ2YWwuICAqLworKworKyAgICAgICAgICAgICAgICBpZiAoUkVfRFVQX01BWCA8IHVwcGVyX2JvdW5kKQorKwkJICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0JBREJSKTsKKysKKysgICAgICAgICAgICAgICAgLyogSWYgdGhlIHVwcGVyIGJvdW5kIGlzIHplcm8sIGRvbid0IHdhbnQgdG8gc3VjY2VlZCBhdAorKyAgICAgICAgICAgICAgICAgICBhbGw7IGp1bXAgZnJvbSBgbGFzdHN0YXJ0JyB0byBgYiArIDMnLCB3aGljaCB3aWxsIGJlCisrCQkgICB0aGUgZW5kIG9mIHRoZSBidWZmZXIgYWZ0ZXIgd2UgaW5zZXJ0IHRoZSBqdW1wLiAgKi8KKysJCS8qIGlmZGVmIFdDSEFSLCAnYiArIDEgKyBPRkZTRVRfQUREUkVTU19TSVpFJworKwkJICAgaW5zdGVhZCBvZiAnYiArIDMnLiAgKi8KKysgICAgICAgICAgICAgICAgIGlmICh1cHBlcl9ib3VuZCA9PSAwKQorKyAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgR0VUX0JVRkZFUl9TUEFDRSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICAgICAgICAgICAgIElOU0VSVF9KVU1QIChqdW1wLCBsYXN0c3RhcnQsIGIgKyAxCisrCQkJCSAgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgICAgICAgICAgICBiICs9IDEgKyBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UsIHdlIGhhdmUgYSBub250cml2aWFsIGludGVydmFsLiAgV2hlbgorKyAgICAgICAgICAgICAgICAgICAgd2UncmUgYWxsIGRvbmUsIHRoZSBwYXR0ZXJuIHdpbGwgbG9vayBsaWtlOgorKyAgICAgICAgICAgICAgICAgICAgICBzZXRfbnVtYmVyX2F0IDxqdW1wIGNvdW50PiA8dXBwZXIgYm91bmQ+CisrICAgICAgICAgICAgICAgICAgICAgIHNldF9udW1iZXJfYXQgPHN1Y2NlZWRfbiBjb3VudD4gPGxvd2VyIGJvdW5kPgorKyAgICAgICAgICAgICAgICAgICAgICBzdWNjZWVkX24gPGFmdGVyIGp1bXAgYWRkcj4gPHN1Y2NlZWRfbiBjb3VudD4KKysgICAgICAgICAgICAgICAgICAgICAgPGJvZHkgb2YgbG9vcD4KKysgICAgICAgICAgICAgICAgICAgICAganVtcF9uIDxzdWNjZWVkX24gYWRkcj4gPGp1bXAgY291bnQ+CisrICAgICAgICAgICAgICAgICAgICAoVGhlIHVwcGVyIGJvdW5kIGFuZCBganVtcF9uJyBhcmUgb21pdHRlZCBpZgorKyAgICAgICAgICAgICAgICAgICAgYHVwcGVyX2JvdW5kJyBpcyAxLCB0aG91Z2guKSAgKi8KKysgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgeyAvKiBJZiB0aGUgdXBwZXIgYm91bmQgaXMgPiAxLCB3ZSBuZWVkIHRvIGluc2VydAorKyAgICAgICAgICAgICAgICAgICAgICAgIG1vcmUgYXQgdGhlIGVuZCBvZiB0aGUgbG9vcC4gICovCisrICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbmJ5dGVzID0gMiArIDQgKiBPRkZTRVRfQUREUkVTU19TSVpFICsKKysJCSAgICAgICAodXBwZXJfYm91bmQgPiAxKSAqICgyICsgNCAqIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKworKyAgICAgICAgICAgICAgICAgICAgIEdFVF9CVUZGRVJfU1BBQ0UgKG5ieXRlcyk7CisrCisrICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBsb3dlciBib3VuZCBvZiB0aGUgYHN1Y2NlZWRfbicsIGV2ZW4KKysgICAgICAgICAgICAgICAgICAgICAgICB0aG91Z2ggaXQgd2lsbCBiZSBzZXQgZHVyaW5nIG1hdGNoaW5nIGJ5IGl0cworKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGVuZGFudCBgc2V0X251bWJlcl9hdCcgKGluc2VydGVkIG5leHQpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgYHJlX2NvbXBpbGVfZmFzdG1hcCcgbmVlZHMgdG8ga25vdy4KKysgICAgICAgICAgICAgICAgICAgICAgICBKdW1wIHRvIHRoZSBganVtcF9uJyB3ZSBtaWdodCBpbnNlcnQgYmVsb3cuICAqLworKyAgICAgICAgICAgICAgICAgICAgIElOU0VSVF9KVU1QMiAoc3VjY2VlZF9uLCBsYXN0c3RhcnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiICsgMSArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFCisrCQkJCSAgICsgKHVwcGVyX2JvdW5kID4gMSkgKiAoMSArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFKQorKwkJCQkgICAsIGxvd2VyX2JvdW5kKTsKKysgICAgICAgICAgICAgICAgICAgICBiICs9IDEgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgICAgICAgICAgICAgICAgICAgICAvKiBDb2RlIHRvIGluaXRpYWxpemUgdGhlIGxvd2VyIGJvdW5kLiAgSW5zZXJ0CisrICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlIHRoZSBgc3VjY2VlZF9uJy4gIFRoZSBgNScgaXMgdGhlIGxhc3QgdHdvCisrICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgb2YgdGhpcyBgc2V0X251bWJlcl9hdCcsIHBsdXMgMyBieXRlcyBvZgorKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgYHN1Y2NlZWRfbicuICAqLworKwkJICAgICAvKiBpZmRlZiBXQ0hBUiwgVGhlICcxKzIqT0ZGU0VUX0FERFJFU1NfU0laRScKKysJCQlpcyB0aGUgJ3NldF9udW1iZXJfYXQnLCBwbHVzICcxK09GRlNFVF9BRERSRVNTX1NJWkUnCisrCQkJb2YgdGhlIGZvbGxvd2luZyBgc3VjY2VlZF9uJy4gICovCisrICAgICAgICAgICAgICAgICAgICAgUFJFRklYKGluc2VydF9vcDIpIChzZXRfbnVtYmVyX2F0LCBsYXN0c3RhcnQsIDEKKysJCQkJICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkUsIGxvd2VyX2JvdW5kLCBiKTsKKysgICAgICAgICAgICAgICAgICAgICBiICs9IDEgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgICAgICAgICAgICAgICAgICAgICBpZiAodXBwZXJfYm91bmQgPiAxKQorKyAgICAgICAgICAgICAgICAgICAgICAgeyAvKiBNb3JlIHRoYW4gb25lIHJlcGV0aXRpb24gaXMgYWxsb3dlZCwgc28KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kIGEgYmFja3dhcmQganVtcCB0byB0aGUgYHN1Y2NlZWRfbicKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzdGFydHMgdGhpcyBpbnRlcnZhbC4KKysKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB3ZSd2ZSByZWFjaGVkIHRoaXMgZHVyaW5nIG1hdGNoaW5nLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZSdsbCBoYXZlIG1hdGNoZWQgdGhlIGludGVydmFsIG9uY2UsIHNvCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bXAgYmFjayBvbmx5IGB1cHBlcl9ib3VuZCAtIDEnIHRpbWVzLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgU1RPUkVfSlVNUDIgKGp1bXBfbiwgYiwgbGFzdHN0YXJ0CisrCQkJCSAgICAgICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkUgKyAxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfYm91bmQgLSAxKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgYiArPSAxICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBsb2NhdGlvbiB3ZSB3YW50IHRvIHNldCBpcyB0aGUgc2Vjb25kCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBvZiB0aGUgYGp1bXBfbic7IHRoYXQgaXMgYGItMicgYXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gYWJzb2x1dGUgYWRkcmVzcy4gIGBsYXN0c3RhcnQnIHdpbGwgYmUKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGBzZXRfbnVtYmVyX2F0JyB3ZSdyZSBhYm91dCB0byBpbnNlcnQ7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBsYXN0c3RhcnQrMycgdGhlIG51bWJlciB0byBzZXQsIHRoZSBzb3VyY2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSByZWxhdGl2ZSBhZGRyZXNzLiAgQnV0IHdlIGFyZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpbmcgaW50byB0aGUgbWlkZGxlIG9mIHRoZSBwYXR0ZXJuIC0tCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvIGV2ZXJ5dGhpbmcgaXMgZ2V0dGluZyBtb3ZlZCB1cCBieSA1LgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25jbHVzaW9uOiAoYiAtIDIpIC0gKGxhc3RzdGFydCArIDMpICsgNSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaS5lLiwgYiAtIGxhc3RzdGFydC4KKysKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2UgaW5zZXJ0IHRoaXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbyB0aGF0IGlmIHdlIGZhaWwgZHVyaW5nIG1hdGNoaW5nLCB3ZSdsbAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWluaXRpYWxpemUgdGhlIGJvdW5kcy4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgIFBSRUZJWChpbnNlcnRfb3AyKSAoc2V0X251bWJlcl9hdCwgbGFzdHN0YXJ0LAorKwkJCQkJICAgICBiIC0gbGFzdHN0YXJ0LAorKwkJCQkJICAgICB1cHBlcl9ib3VuZCAtIDEsIGIpOworKyAgICAgICAgICAgICAgICAgICAgICAgICBiICs9IDEgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBwZW5kaW5nX2V4YWN0ID0gMDsKKysJCWJyZWFrOworKworKwkgICAgICBpbnZhbGlkX2ludGVydmFsOgorKwkJaWYgKCEoc3ludGF4ICYgUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQpKQorKwkJICBGUkVFX1NUQUNLX1JFVFVSTiAocCA9PSBwZW5kID8gUkVHX0VCUkFDRSA6IFJFR19CQURCUik7CisrCSAgICAgIHVuZmV0Y2hfaW50ZXJ2YWw6CisrCQkvKiBNYXRjaCB0aGUgY2hhcmFjdGVycyBhcyBsaXRlcmFscy4gICovCisrCQlwID0gYmVnX2ludGVydmFsOworKwkJYyA9ICd7JzsKKysJCWlmIChzeW50YXggJiBSRV9OT19CS19CUkFDRVMpCisrCQkgIGdvdG8gbm9ybWFsX2NoYXI7CisrCQllbHNlCisrCQkgIGdvdG8gbm9ybWFsX2JhY2tzbGFzaDsKKysJICAgICAgfQorKworKyNpZmRlZiBlbWFjcworKyAgICAgICAgICAgIC8qIFRoZXJlIGlzIG5vIHdheSB0byBzcGVjaWZ5IHRoZSBiZWZvcmVfZG90IGFuZCBhZnRlcl9kb3QKKysgICAgICAgICAgICAgICBvcGVyYXRvcnMuICBybXMgc2F5cyB0aGlzIGlzIG9rLiAgLS1rYXJsICAqLworKyAgICAgICAgICAgIGNhc2UgJz0nOgorKyAgICAgICAgICAgICAgQlVGX1BVU0ggKGF0X2RvdCk7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBjYXNlICdzJzoKKysgICAgICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrICAgICAgICAgICAgICBCVUZfUFVTSF8yIChzeW50YXhzcGVjLCBzeW50YXhfc3BlY19jb2RlW2NdKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgJ1MnOgorKyAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysgICAgICAgICAgICAgIEJVRl9QVVNIXzIgKG5vdHN5bnRheHNwZWMsIHN5bnRheF9zcGVjX2NvZGVbY10pOworKyAgICAgICAgICAgICAgYnJlYWs7CisrI2VuZGlmIC8qIGVtYWNzICovCisrCisrCisrICAgICAgICAgICAgY2FzZSAndyc6CisrCSAgICAgIGlmIChzeW50YXggJiBSRV9OT19HTlVfT1BTKQorKwkJZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrICAgICAgICAgICAgICBCVUZfUFVTSCAod29yZGNoYXIpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICAgICAgY2FzZSAnVyc6CisrCSAgICAgIGlmIChzeW50YXggJiBSRV9OT19HTlVfT1BTKQorKwkJZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrICAgICAgICAgICAgICBCVUZfUFVTSCAobm90d29yZGNoYXIpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICAgICAgY2FzZSAnPCc6CisrCSAgICAgIGlmIChzeW50YXggJiBSRV9OT19HTlVfT1BTKQorKwkJZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICAgIEJVRl9QVVNIICh3b3JkYmVnKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgJz4nOgorKwkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKKysJCWdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgICBCVUZfUFVTSCAod29yZGVuZCk7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBjYXNlICdiJzoKKysJICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpCisrCQlnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgICAgQlVGX1BVU0ggKHdvcmRib3VuZCk7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBjYXNlICdCJzoKKysJICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpCisrCQlnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgICAgQlVGX1BVU0ggKG5vdHdvcmRib3VuZCk7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBjYXNlICdgJzoKKysJICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpCisrCQlnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgICAgQlVGX1BVU0ggKGJlZ2J1Zik7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBjYXNlICdcJyc6CisrCSAgICAgIGlmIChzeW50YXggJiBSRV9OT19HTlVfT1BTKQorKwkJZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICAgIEJVRl9QVVNIIChlbmRidWYpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOgorKyAgICAgICAgICAgIGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorKyAgICAgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0JLX1JFRlMpCisrICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrCisrICAgICAgICAgICAgICBjMSA9IGMgLSAnMCc7CisrCisrICAgICAgICAgICAgICBpZiAoYzEgPiByZWdudW0pCisrICAgICAgICAgICAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRVNVQlJFRyk7CisrCisrICAgICAgICAgICAgICAvKiBDYW4ndCBiYWNrIHJlZmVyZW5jZSB0byBhIHN1YmV4cHJlc3Npb24gaWYgaW5zaWRlIG9mIGl0LiAgKi8KKysgICAgICAgICAgICAgIGlmIChncm91cF9pbl9jb21waWxlX3N0YWNrIChjb21waWxlX3N0YWNrLCAocmVnbnVtX3QpIGMxKSkKKysgICAgICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysKKysgICAgICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrICAgICAgICAgICAgICBCVUZfUFVTSF8yIChkdXBsaWNhdGUsIGMxKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgICAgIGNhc2UgJysnOgorKyAgICAgICAgICAgIGNhc2UgJz8nOgorKyAgICAgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX0JLX1BMVVNfUU0pCisrICAgICAgICAgICAgICAgIGdvdG8gaGFuZGxlX3BsdXM7CisrICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2JhY2tzbGFzaDsKKysKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIG5vcm1hbF9iYWNrc2xhc2g6CisrICAgICAgICAgICAgICAvKiBZb3UgbWlnaHQgdGhpbmsgaXQgd291bGQgYmUgdXNlZnVsIGZvciBcIHRvIG1lYW4KKysgICAgICAgICAgICAgICAgIG5vdCB0byB0cmFuc2xhdGU7IGJ1dCBpZiB3ZSBkb24ndCB0cmFuc2xhdGUgaXQKKysgICAgICAgICAgICAgICAgIGl0IHdpbGwgbmV2ZXIgbWF0Y2ggYW55dGhpbmcuICAqLworKyAgICAgICAgICAgICAgYyA9IFRSQU5TTEFURSAoYyk7CisrICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgYnJlYWs7CisrCisrCisrCWRlZmF1bHQ6CisrICAgICAgICAvKiBFeHBlY3RzIHRoZSBjaGFyYWN0ZXIgaW4gYGMnLiAgKi8KKysJbm9ybWFsX2NoYXI6CisrCSAgICAgIC8qIElmIG5vIGV4YWN0biBjdXJyZW50bHkgYmVpbmcgYnVpbHQuICAqLworKyAgICAgICAgICBpZiAoIXBlbmRpbmdfZXhhY3QKKysjaWZkZWYgV0NIQVIKKysJICAgICAgLyogSWYgbGFzdCBleGFjdG4gaGFuZGxlIGJpbmFyeShvciBjaGFyYWN0ZXIpIGFuZAorKwkJIG5ldyBleGFjdG4gaGFuZGxlIGNoYXJhY3RlcihvciBiaW5hcnkpLiAgKi8KKysJICAgICAgfHwgaXNfZXhhY3RuX2JpbiAhPSBpc19iaW5hcnlbcCAtIDEgLSBwYXR0ZXJuXQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgICAgICAgICAgICAgLyogSWYgbGFzdCBleGFjdG4gbm90IGF0IGN1cnJlbnQgcG9zaXRpb24uICAqLworKyAgICAgICAgICAgICAgfHwgcGVuZGluZ19leGFjdCArICpwZW5kaW5nX2V4YWN0ICsgMSAhPSBiCisrCisrICAgICAgICAgICAgICAvKiBXZSBoYXZlIG9ubHkgb25lIGJ5dGUgZm9sbG93aW5nIHRoZSBleGFjdG4gZm9yIHRoZSBjb3VudC4gICovCisrCSAgICAgIHx8ICpwZW5kaW5nX2V4YWN0ID09ICgxIDw8IEJZVEVXSURUSCkgLSAxCisrCisrICAgICAgICAgICAgICAvKiBJZiBmb2xsb3dlZCBieSBhIHJlcGV0aXRpb24gb3BlcmF0b3IuICAqLworKyAgICAgICAgICAgICAgfHwgKnAgPT0gJyonIHx8ICpwID09ICdeJworKwkgICAgICB8fCAoKHN5bnRheCAmIFJFX0JLX1BMVVNfUU0pCisrCQkgID8gKnAgPT0gJ1xcJyAmJiAocFsxXSA9PSAnKycgfHwgcFsxXSA9PSAnPycpCisrCQkgIDogKCpwID09ICcrJyB8fCAqcCA9PSAnPycpKQorKwkgICAgICB8fCAoKHN5bnRheCAmIFJFX0lOVEVSVkFMUykKKysgICAgICAgICAgICAgICAgICAmJiAoKHN5bnRheCAmIFJFX05PX0JLX0JSQUNFUykKKysJCSAgICAgID8gKnAgPT0gJ3snCisrICAgICAgICAgICAgICAgICAgICAgIDogKHBbMF0gPT0gJ1xcJyAmJiBwWzFdID09ICd7JykpKSkKKysJICAgIHsKKysJICAgICAgLyogU3RhcnQgYnVpbGRpbmcgYSBuZXcgZXhhY3RuLiAgKi8KKysKKysgICAgICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrCisrI2lmZGVmIFdDSEFSCisrCSAgICAgIC8qIElzIHRoaXMgZXhhY3RuIGJpbmFyeSBkYXRhIG9yIGNoYXJhY3Rlcj8gKi8KKysJICAgICAgaXNfZXhhY3RuX2JpbiA9IGlzX2JpbmFyeVtwIC0gMSAtIHBhdHRlcm5dOworKwkgICAgICBpZiAoaXNfZXhhY3RuX2JpbikKKysJCSAgQlVGX1BVU0hfMiAoZXhhY3RuX2JpbiwgMCk7CisrCSAgICAgIGVsc2UKKysJCSAgQlVGX1BVU0hfMiAoZXhhY3RuLCAwKTsKKysjZWxzZQorKwkgICAgICBCVUZfUFVTSF8yIChleGFjdG4sIDApOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKwkgICAgICBwZW5kaW5nX2V4YWN0ID0gYiAtIDE7CisrICAgICAgICAgICAgfQorKworKwkgIEJVRl9QVVNIIChjKTsKKysgICAgICAgICAgKCpwZW5kaW5nX2V4YWN0KSsrOworKwkgIGJyZWFrOworKyAgICAgICAgfSAvKiBzd2l0Y2ggKGMpICovCisrICAgIH0gLyogd2hpbGUgcCAhPSBwZW5kICovCisrCisrCisrICAvKiBUaHJvdWdoIHRoZSBwYXR0ZXJuIG5vdy4gICovCisrCisrICBpZiAoZml4dXBfYWx0X2p1bXApCisrICAgIFNUT1JFX0pVTVAgKGp1bXBfcGFzdF9hbHQsIGZpeHVwX2FsdF9qdW1wLCBiKTsKKysKKysgIGlmICghQ09NUElMRV9TVEFDS19FTVBUWSkKKysgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FUEFSRU4pOworKworKyAgLyogSWYgd2UgZG9uJ3Qgd2FudCBiYWNrdHJhY2tpbmcsIGZvcmNlIHN1Y2Nlc3MKKysgICAgIHRoZSBmaXJzdCB0aW1lIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIGNvbXBpbGVkIHBhdHRlcm4uICAqLworKyAgaWYgKHN5bnRheCAmIFJFX05PX1BPU0lYX0JBQ0tUUkFDS0lORykKKysgICAgQlVGX1BVU0ggKHN1Y2NlZWQpOworKworKyNpZmRlZiBXQ0hBUgorKyAgZnJlZSAocGF0dGVybik7CisrICBmcmVlIChtYnNfb2Zmc2V0KTsKKysgIGZyZWUgKGlzX2JpbmFyeSk7CisrI2VuZGlmCisrICBmcmVlIChjb21waWxlX3N0YWNrLnN0YWNrKTsKKysKKysgIC8qIFdlIGhhdmUgc3VjY2VlZGVkOyBzZXQgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyLiAgKi8KKysjaWZkZWYgV0NIQVIKKysgIGJ1ZnAtPnVzZWQgPSAodWludHB0cl90KSBiIC0gKHVpbnRwdHJfdCkgQ09NUElMRURfQlVGRkVSX1ZBUjsKKysjZWxzZQorKyAgYnVmcC0+dXNlZCA9IGIgLSBidWZwLT5idWZmZXI7CisrI2VuZGlmCisrCisrI2lmZGVmIERFQlVHCisrICBpZiAoZGVidWcpCisrICAgIHsKKysgICAgICBERUJVR19QUklOVDEgKCJcbkNvbXBpbGVkIHBhdHRlcm46IFxuIik7CisrICAgICAgUFJFRklYKHByaW50X2NvbXBpbGVkX3BhdHRlcm4pIChidWZwKTsKKysgICAgfQorKyNlbmRpZiAvKiBERUJVRyAqLworKworKyNpZm5kZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCisrICAvKiBJbml0aWFsaXplIHRoZSBmYWlsdXJlIHN0YWNrIHRvIHRoZSBsYXJnZXN0IHBvc3NpYmxlIHN0YWNrLiAgVGhpcworKyAgICAgaXNuJ3QgbmVjZXNzYXJ5IHVubGVzcyB3ZSdyZSB0cnlpbmcgdG8gYXZvaWQgY2FsbGluZyBhbGxvY2EgaW4KKysgICAgIHRoZSBzZWFyY2ggYW5kIG1hdGNoIHJvdXRpbmVzLiAgKi8KKysgIHsKKysgICAgaW50IG51bV9yZWdzID0gYnVmcC0+cmVfbnN1YiArIDE7CisrCisrICAgIC8qIFNpbmNlIERPVUJMRV9GQUlMX1NUQUNLIHJlZnVzZXMgdG8gZG91YmxlIG9ubHkgaWYgdGhlIGN1cnJlbnQgc2l6ZQorKyAgICAgICBpcyBzdHJpY3RseSBncmVhdGVyIHRoYW4gcmVfbWF4X2ZhaWx1cmVzLCB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBzdGFjaworKyAgICAgICBpcyAyICogcmVfbWF4X2ZhaWx1cmVzIGZhaWx1cmUgcG9pbnRzLiAgKi8KKysgICAgaWYgKGZhaWxfc3RhY2suc2l6ZSA8ICgyICogcmVfbWF4X2ZhaWx1cmVzICogTUFYX0ZBSUxVUkVfSVRFTVMpKQorKyAgICAgIHsKKysJZmFpbF9zdGFjay5zaXplID0gKDIgKiByZV9tYXhfZmFpbHVyZXMgKiBNQVhfRkFJTFVSRV9JVEVNUyk7CisrCisrIyBpZmRlZiBlbWFjcworKwlpZiAoISBmYWlsX3N0YWNrLnN0YWNrKQorKwkgIGZhaWxfc3RhY2suc3RhY2sKKysJICAgID0gKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSAqKSB4bWFsbG9jIChmYWlsX3N0YWNrLnNpemUKKysJCQkJICAgICogc2l6ZW9mIChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkpKTsKKysJZWxzZQorKwkgIGZhaWxfc3RhY2suc3RhY2sKKysJICAgID0gKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSAqKSB4cmVhbGxvYyAoZmFpbF9zdGFjay5zdGFjaywKKysJCQkJICAgICAoZmFpbF9zdGFjay5zaXplCisrCQkJCSAgICAgICogc2l6ZW9mIChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkpKSk7CisrIyBlbHNlIC8qIG5vdCBlbWFjcyAqLworKwlpZiAoISBmYWlsX3N0YWNrLnN0YWNrKQorKwkgIGZhaWxfc3RhY2suc3RhY2sKKysJICAgID0gKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSAqKSBtYWxsb2MgKGZhaWxfc3RhY2suc2l6ZQorKwkJCQkgICAqIHNpemVvZiAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpKSk7CisrCWVsc2UKKysJICBmYWlsX3N0YWNrLnN0YWNrCisrCSAgICA9IChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkgKikgcmVhbGxvYyAoZmFpbF9zdGFjay5zdGFjaywKKysJCQkJCSAgICAoZmFpbF9zdGFjay5zaXplCisrCQkJCSAgICAgKiBzaXplb2YgKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSkpKTsKKysjIGVuZGlmIC8qIG5vdCBlbWFjcyAqLworKyAgICAgIH0KKysKKysgICBQUkVGSVgocmVnZXhfZ3Jvd19yZWdpc3RlcnMpIChudW1fcmVncyk7CisrICB9CisrI2VuZGlmIC8qIG5vdCBNQVRDSF9NQVlfQUxMT0NBVEUgKi8KKysKKysgIHJldHVybiBSRUdfTk9FUlJPUjsKKyt9IC8qIHJlZ2V4X2NvbXBpbGUgKi8KKysKKysvKiBTdWJyb3V0aW5lcyBmb3IgYHJlZ2V4X2NvbXBpbGUnLiAgKi8KKysKKysvKiBTdG9yZSBPUCBhdCBMT0MgZm9sbG93ZWQgYnkgdHdvLWJ5dGUgaW50ZWdlciBwYXJhbWV0ZXIgQVJHLiAgKi8KKysvKiBpZmRlZiBXQ0hBUiwgaW50ZWdlciBwYXJhbWV0ZXIgaXMgMSB3Y2hhcl90LiAgKi8KKysKKytzdGF0aWMgdm9pZAorK1BSRUZJWChzdG9yZV9vcDEpIChyZV9vcGNvZGVfdCBvcCwgVUNIQVJfVCAqbG9jLCBpbnQgYXJnKQorK3sKKysgICpsb2MgPSAoVUNIQVJfVCkgb3A7CisrICBTVE9SRV9OVU1CRVIgKGxvYyArIDEsIGFyZyk7CisrfQorKworKworKy8qIExpa2UgYHN0b3JlX29wMScsIGJ1dCBmb3IgdHdvIHR3by1ieXRlIHBhcmFtZXRlcnMgQVJHMSBhbmQgQVJHMi4gICovCisrLyogaWZkZWYgV0NIQVIsIGludGVnZXIgcGFyYW1ldGVyIGlzIDEgd2NoYXJfdC4gICovCisrCisrc3RhdGljIHZvaWQKKytQUkVGSVgoc3RvcmVfb3AyKSAocmVfb3Bjb2RlX3Qgb3AsIFVDSEFSX1QgKmxvYywgaW50IGFyZzEsIGludCBhcmcyKQorK3sKKysgICpsb2MgPSAoVUNIQVJfVCkgb3A7CisrICBTVE9SRV9OVU1CRVIgKGxvYyArIDEsIGFyZzEpOworKyAgU1RPUkVfTlVNQkVSIChsb2MgKyAxICsgT0ZGU0VUX0FERFJFU1NfU0laRSwgYXJnMik7CisrfQorKworKworKy8qIENvcHkgdGhlIGJ5dGVzIGZyb20gTE9DIHRvIEVORCB0byBvcGVuIHVwIHRocmVlIGJ5dGVzIG9mIHNwYWNlIGF0IExPQworKyAgIGZvciBPUCBmb2xsb3dlZCBieSB0d28tYnl0ZSBpbnRlZ2VyIHBhcmFtZXRlciBBUkcuICAqLworKy8qIGlmZGVmIFdDSEFSLCBpbnRlZ2VyIHBhcmFtZXRlciBpcyAxIHdjaGFyX3QuICAqLworKworK3N0YXRpYyB2b2lkCisrUFJFRklYKGluc2VydF9vcDEpIChyZV9vcGNvZGVfdCBvcCwgVUNIQVJfVCAqbG9jLCBpbnQgYXJnLCBVQ0hBUl9UICplbmQpCisreworKyAgcmVnaXN0ZXIgVUNIQVJfVCAqcGZyb20gPSBlbmQ7CisrICByZWdpc3RlciBVQ0hBUl9UICpwdG8gPSBlbmQgKyAxICsgT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgIHdoaWxlIChwZnJvbSAhPSBsb2MpCisrICAgICotLXB0byA9ICotLXBmcm9tOworKworKyAgUFJFRklYKHN0b3JlX29wMSkgKG9wLCBsb2MsIGFyZyk7CisrfQorKworKworKy8qIExpa2UgYGluc2VydF9vcDEnLCBidXQgZm9yIHR3byB0d28tYnl0ZSBwYXJhbWV0ZXJzIEFSRzEgYW5kIEFSRzIuICAqLworKy8qIGlmZGVmIFdDSEFSLCBpbnRlZ2VyIHBhcmFtZXRlciBpcyAxIHdjaGFyX3QuICAqLworKworK3N0YXRpYyB2b2lkCisrUFJFRklYKGluc2VydF9vcDIpIChyZV9vcGNvZGVfdCBvcCwgVUNIQVJfVCAqbG9jLCBpbnQgYXJnMSwKKysgICAgICAgICAgICAgICAgICAgIGludCBhcmcyLCBVQ0hBUl9UICplbmQpCisreworKyAgcmVnaXN0ZXIgVUNIQVJfVCAqcGZyb20gPSBlbmQ7CisrICByZWdpc3RlciBVQ0hBUl9UICpwdG8gPSBlbmQgKyAxICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICB3aGlsZSAocGZyb20gIT0gbG9jKQorKyAgICAqLS1wdG8gPSAqLS1wZnJvbTsKKysKKysgIFBSRUZJWChzdG9yZV9vcDIpIChvcCwgbG9jLCBhcmcxLCBhcmcyKTsKKyt9CisrCisrCisrLyogUCBwb2ludHMgdG8ganVzdCBhZnRlciBhIF4gaW4gUEFUVEVSTi4gIFJldHVybiB0cnVlIGlmIHRoYXQgXiBjb21lcworKyAgIGFmdGVyIGFuIGFsdGVybmF0aXZlIG9yIGEgYmVnaW4tc3ViZXhwcmVzc2lvbi4gIFdlIGFzc3VtZSB0aGVyZSBpcyBhdAorKyAgIGxlYXN0IG9uZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBeLiAgKi8KKysKKytzdGF0aWMgYm9vbGVhbgorK1BSRUZJWChhdF9iZWdsaW5lX2xvY19wKSAoY29uc3QgQ0hBUl9UICpwYXR0ZXJuLCBjb25zdCBDSEFSX1QgKnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4KQorK3sKKysgIGNvbnN0IENIQVJfVCAqcHJldiA9IHAgLSAyOworKyAgYm9vbGVhbiBwcmV2X3ByZXZfYmFja3NsYXNoID0gcHJldiA+IHBhdHRlcm4gJiYgcHJldlstMV0gPT0gJ1xcJzsKKysKKysgIHJldHVybgorKyAgICAgICAvKiBBZnRlciBhIHN1YmV4cHJlc3Npb24/ICAqLworKyAgICAgICAoKnByZXYgPT0gJygnICYmIChzeW50YXggJiBSRV9OT19CS19QQVJFTlMgfHwgcHJldl9wcmV2X2JhY2tzbGFzaCkpCisrICAgICAgIC8qIEFmdGVyIGFuIGFsdGVybmF0aXZlPyAgKi8KKysgICAgfHwgKCpwcmV2ID09ICd8JyAmJiAoc3ludGF4ICYgUkVfTk9fQktfVkJBUiB8fCBwcmV2X3ByZXZfYmFja3NsYXNoKSk7CisrfQorKworKworKy8qIFRoZSBkdWFsIG9mIGF0X2JlZ2xpbmVfbG9jX3AuICBUaGlzIG9uZSBpcyBmb3IgJC4gIFdlIGFzc3VtZSB0aGVyZSBpcworKyAgIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlICQsIGkuZS4sIGBQIDwgUEVORCcuICAqLworKworK3N0YXRpYyBib29sZWFuCisrUFJFRklYKGF0X2VuZGxpbmVfbG9jX3ApIChjb25zdCBDSEFSX1QgKnAsIGNvbnN0IENIQVJfVCAqcGVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgpCisreworKyAgY29uc3QgQ0hBUl9UICpuZXh0ID0gcDsKKysgIGJvb2xlYW4gbmV4dF9iYWNrc2xhc2ggPSAqbmV4dCA9PSAnXFwnOworKyAgY29uc3QgQ0hBUl9UICpuZXh0X25leHQgPSBwICsgMSA8IHBlbmQgPyBwICsgMSA6IDA7CisrCisrICByZXR1cm4KKysgICAgICAgLyogQmVmb3JlIGEgc3ViZXhwcmVzc2lvbj8gICovCisrICAgICAgIChzeW50YXggJiBSRV9OT19CS19QQVJFTlMgPyAqbmV4dCA9PSAnKScKKysgICAgICAgIDogbmV4dF9iYWNrc2xhc2ggJiYgbmV4dF9uZXh0ICYmICpuZXh0X25leHQgPT0gJyknKQorKyAgICAgICAvKiBCZWZvcmUgYW4gYWx0ZXJuYXRpdmU/ICAqLworKyAgICB8fCAoc3ludGF4ICYgUkVfTk9fQktfVkJBUiA/ICpuZXh0ID09ICd8JworKyAgICAgICAgOiBuZXh0X2JhY2tzbGFzaCAmJiBuZXh0X25leHQgJiYgKm5leHRfbmV4dCA9PSAnfCcpOworK30KKysKKysjZWxzZSAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworKy8qIFJldHVybnMgdHJ1ZSBpZiBSRUdOVU0gaXMgaW4gb25lIG9mIENPTVBJTEVfU1RBQ0sncyBlbGVtZW50cyBhbmQKKysgICBmYWxzZSBpZiBpdCdzIG5vdC4gICovCisrCisrc3RhdGljIGJvb2xlYW4KKytncm91cF9pbl9jb21waWxlX3N0YWNrIChjb21waWxlX3N0YWNrX3R5cGUgY29tcGlsZV9zdGFjaywgcmVnbnVtX3QgcmVnbnVtKQorK3sKKysgIGludCB0aGlzX2VsZW1lbnQ7CisrCisrICBmb3IgKHRoaXNfZWxlbWVudCA9IGNvbXBpbGVfc3RhY2suYXZhaWwgLSAxOworKyAgICAgICB0aGlzX2VsZW1lbnQgPj0gMDsKKysgICAgICAgdGhpc19lbGVtZW50LS0pCisrICAgIGlmIChjb21waWxlX3N0YWNrLnN0YWNrW3RoaXNfZWxlbWVudF0ucmVnbnVtID09IHJlZ251bSkKKysgICAgICByZXR1cm4gdHJ1ZTsKKysKKysgIHJldHVybiBmYWxzZTsKKyt9CisrI2VuZGlmIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisrI2lmZGVmIElOU0lERV9SRUNVUlNJT04KKysKKysjaWZkZWYgV0NIQVIKKysvKiBUaGlzIGluc2VydCBzcGFjZSwgd2hpY2ggc2l6ZSBpcyAibnVtIiwgaW50byB0aGUgcGF0dGVybiBhdCAibG9jIi4KKysgICAiZW5kIiBtdXN0IHBvaW50IHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuICAqLworK3N0YXRpYyB2b2lkCisraW5zZXJ0X3NwYWNlIChpbnQgbnVtLCBDSEFSX1QgKmxvYywgQ0hBUl9UICplbmQpCisreworKyAgcmVnaXN0ZXIgQ0hBUl9UICpwdG8gPSBlbmQ7CisrICByZWdpc3RlciBDSEFSX1QgKnBmcm9tID0gZW5kIC0gbnVtOworKworKyAgd2hpbGUgKHBmcm9tID49IGxvYykKKysgICAgKnB0by0tID0gKnBmcm9tLS07CisrfQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyNpZmRlZiBXQ0hBUgorK3N0YXRpYyByZWdfZXJyY29kZV90Cisrd2NzX2NvbXBpbGVfcmFuZ2UgKENIQVJfVCByYW5nZV9zdGFydF9jaGFyLCBjb25zdCBDSEFSX1QgKipwX3B0ciwKKysgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUl9UICpwZW5kLCBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuc2xhdGUsCisrICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsIENIQVJfVCAqYiwgQ0hBUl9UICpjaGFyX3NldCkKKyt7CisrICBjb25zdCBDSEFSX1QgKnAgPSAqcF9wdHI7CisrICBDSEFSX1QgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZDsKKysgIHJlZ19lcnJjb2RlX3QgcmV0OworKyMgaWZkZWYgX0xJQkMKKysgIHVpbnQzMl90IG5ydWxlczsKKysgIHVpbnQzMl90IHN0YXJ0X3ZhbCwgZW5kX3ZhbDsKKysjIGVuZGlmCisrICBpZiAocCA9PSBwZW5kKQorKyAgICByZXR1cm4gUkVHX0VSQU5HRTsKKysKKysjIGlmZGVmIF9MSUJDCisrICBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworKyAgaWYgKG5ydWxlcyAhPSAwKQorKyAgICB7CisrICAgICAgY29uc3QgY2hhciAqY29sbHNlcSA9IChjb25zdCBjaGFyICopIF9OTF9DVVJSRU5UKExDX0NPTExBVEUsCisrCQkJCQkJICAgICAgIF9OTF9DT0xMQVRFX0NPTExTRVFXQyk7CisrICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorKwlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CKTsKKysKKysgICAgICBpZiAocmFuZ2Vfc3RhcnRfY2hhciA8IC0xKQorKwl7CisrCSAgLyogcmFuZ2Vfc3RhcnQgaXMgYSBjb2xsYXRpbmcgc3ltYm9sLiAgKi8KKysJICBpbnQzMl90ICp3ZXh0cmE7CisrCSAgLyogUmV0cmVpdmUgdGhlIGluZGV4IGFuZCBnZXQgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlLiAgKi8KKysJICB3ZXh0cmEgPSAoaW50MzJfdCopKGV4dHJhICsgY2hhcl9zZXRbLXJhbmdlX3N0YXJ0X2NoYXJdKTsKKysJICBzdGFydF92YWwgPSB3ZXh0cmFbMSArICp3ZXh0cmFdOworKwl9CisrICAgICAgZWxzZQorKwlzdGFydF92YWwgPSBjb2xsc2VxX3RhYmxlX2xvb2t1cChjb2xsc2VxLCBUUkFOU0xBVEUocmFuZ2Vfc3RhcnRfY2hhcikpOworKworKyAgICAgIGVuZF92YWwgPSBjb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcSwgVFJBTlNMQVRFIChwWzBdKSk7CisrCisrICAgICAgLyogUmVwb3J0IGFuIGVycm9yIGlmIHRoZSByYW5nZSBpcyBlbXB0eSBhbmQgdGhlIHN5bnRheCBwcm9oaWJpdHMKKysJIHRoaXMuICAqLworKyAgICAgIHJldCA9ICgoc3ludGF4ICYgUkVfTk9fRU1QVFlfUkFOR0VTKQorKwkgICAgICYmIChzdGFydF92YWwgPiBlbmRfdmFsKSk/IFJFR19FUkFOR0UgOiBSRUdfTk9FUlJPUjsKKysKKysgICAgICAvKiBJbnNlcnQgc3BhY2UgdG8gdGhlIGVuZCBvZiB0aGUgY2hhcl9yYW5nZXMuICAqLworKyAgICAgIGluc2VydF9zcGFjZSgyLCBiIC0gY2hhcl9zZXRbNV0gLSAyLCBiIC0gMSk7CisrICAgICAgKihiIC0gY2hhcl9zZXRbNV0gLSAyKSA9ICh3Y2hhcl90KXN0YXJ0X3ZhbDsKKysgICAgICAqKGIgLSBjaGFyX3NldFs1XSAtIDEpID0gKHdjaGFyX3QpZW5kX3ZhbDsKKysgICAgICBjaGFyX3NldFs0XSsrOyAvKiByYW5nZXNfaW5kZXggKi8KKysgICAgfQorKyAgZWxzZQorKyMgZW5kaWYKKysgICAgeworKyAgICAgIHJhbmdlX3N0YXJ0ID0gKHJhbmdlX3N0YXJ0X2NoYXIgPj0gMCk/IFRSQU5TTEFURSAocmFuZ2Vfc3RhcnRfY2hhcik6CisrCXJhbmdlX3N0YXJ0X2NoYXI7CisrICAgICAgcmFuZ2VfZW5kID0gVFJBTlNMQVRFIChwWzBdKTsKKysgICAgICAvKiBSZXBvcnQgYW4gZXJyb3IgaWYgdGhlIHJhbmdlIGlzIGVtcHR5IGFuZCB0aGUgc3ludGF4IHByb2hpYml0cworKwkgdGhpcy4gICovCisrICAgICAgcmV0ID0gKChzeW50YXggJiBSRV9OT19FTVBUWV9SQU5HRVMpCisrCSAgICAgJiYgKHJhbmdlX3N0YXJ0ID4gcmFuZ2VfZW5kKSk/IFJFR19FUkFOR0UgOiBSRUdfTk9FUlJPUjsKKysKKysgICAgICAvKiBJbnNlcnQgc3BhY2UgdG8gdGhlIGVuZCBvZiB0aGUgY2hhcl9yYW5nZXMuICAqLworKyAgICAgIGluc2VydF9zcGFjZSgyLCBiIC0gY2hhcl9zZXRbNV0gLSAyLCBiIC0gMSk7CisrICAgICAgKihiIC0gY2hhcl9zZXRbNV0gLSAyKSA9IHJhbmdlX3N0YXJ0OworKyAgICAgICooYiAtIGNoYXJfc2V0WzVdIC0gMSkgPSByYW5nZV9lbmQ7CisrICAgICAgY2hhcl9zZXRbNF0rKzsgLyogcmFuZ2VzX2luZGV4ICovCisrICAgIH0KKysgIC8qIEhhdmUgdG8gaW5jcmVtZW50IHRoZSBwb2ludGVyIGludG8gdGhlIHBhdHRlcm4gc3RyaW5nLCBzbyB0aGUKKysgICAgIGNhbGxlciBpc24ndCBzdGlsbCBhdCB0aGUgZW5kaW5nIGNoYXJhY3Rlci4gICovCisrICAoKnBfcHRyKSsrOworKworKyAgcmV0dXJuIHJldDsKKyt9CisrI2Vsc2UgLyogQllURSAqLworKy8qIFJlYWQgdGhlIGVuZGluZyBjaGFyYWN0ZXIgb2YgYSByYW5nZSAoaW4gYSBicmFja2V0IGV4cHJlc3Npb24pIGZyb20gdGhlCisrICAgdW5jb21waWxlZCBwYXR0ZXJuICpQX1BUUiAod2hpY2ggZW5kcyBhdCBQRU5EKS4gIFdlIGFzc3VtZSB0aGUKKysgICBzdGFydGluZyBjaGFyYWN0ZXIgaXMgaW4gYFBbLTJdJy4gIChgUFstMV0nIGlzIHRoZSBjaGFyYWN0ZXIgYC0nLikKKysgICBUaGVuIHdlIHNldCB0aGUgdHJhbnNsYXRpb24gb2YgYWxsIGJpdHMgYmV0d2VlbiB0aGUgc3RhcnRpbmcgYW5kCisrICAgZW5kaW5nIGNoYXJhY3RlcnMgKGluY2x1c2l2ZSkgaW4gdGhlIGNvbXBpbGVkIHBhdHRlcm4gQi4KKysKKysgICBSZXR1cm4gYW4gZXJyb3IgY29kZS4KKysKKysgICBXZSB1c2UgdGhlc2Ugc2hvcnQgdmFyaWFibGUgbmFtZXMgc28gd2UgY2FuIHVzZSB0aGUgc2FtZSBtYWNyb3MgYXMKKysgICBgcmVnZXhfY29tcGlsZScgaXRzZWxmLiAgKi8KKysKKytzdGF0aWMgcmVnX2VycmNvZGVfdAorK2J5dGVfY29tcGlsZV9yYW5nZSAodW5zaWduZWQgaW50IHJhbmdlX3N0YXJ0X2NoYXIsIGNvbnN0IGNoYXIgKipwX3B0ciwKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBlbmQsIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSwKKysgICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsIHVuc2lnbmVkIGNoYXIgKmIpCisreworKyAgdW5zaWduZWQgdGhpc19jaGFyOworKyAgY29uc3QgY2hhciAqcCA9ICpwX3B0cjsKKysgIHJlZ19lcnJjb2RlX3QgcmV0OworKyMgaWYgX0xJQkMKKysgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbGxzZXE7CisrICB1bnNpZ25lZCBpbnQgc3RhcnRfY29sc2VxOworKyAgdW5zaWduZWQgaW50IGVuZF9jb2xzZXE7CisrIyBlbHNlCisrICB1bnNpZ25lZCBlbmRfY2hhcjsKKysjIGVuZGlmCisrCisrICBpZiAocCA9PSBwZW5kKQorKyAgICByZXR1cm4gUkVHX0VSQU5HRTsKKysKKysgIC8qIEhhdmUgdG8gaW5jcmVtZW50IHRoZSBwb2ludGVyIGludG8gdGhlIHBhdHRlcm4gc3RyaW5nLCBzbyB0aGUKKysgICAgIGNhbGxlciBpc24ndCBzdGlsbCBhdCB0aGUgZW5kaW5nIGNoYXJhY3Rlci4gICovCisrICAoKnBfcHRyKSsrOworKworKyAgLyogUmVwb3J0IGFuIGVycm9yIGlmIHRoZSByYW5nZSBpcyBlbXB0eSBhbmQgdGhlIHN5bnRheCBwcm9oaWJpdHMgdGhpcy4gICovCisrICByZXQgPSBzeW50YXggJiBSRV9OT19FTVBUWV9SQU5HRVMgPyBSRUdfRVJBTkdFIDogUkVHX05PRVJST1I7CisrCisrIyBpZiBfTElCQworKyAgY29sbHNlcSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorKwkJCQkJCSBfTkxfQ09MTEFURV9DT0xMU0VRTUIpOworKworKyAgc3RhcnRfY29sc2VxID0gY29sbHNlcVsodW5zaWduZWQgY2hhcikgVFJBTlNMQVRFIChyYW5nZV9zdGFydF9jaGFyKV07CisrICBlbmRfY29sc2VxID0gY29sbHNlcVsodW5zaWduZWQgY2hhcikgVFJBTlNMQVRFIChwWzBdKV07CisrICBmb3IgKHRoaXNfY2hhciA9IDA7IHRoaXNfY2hhciA8PSAodW5zaWduZWQgY2hhcikgLTE7ICsrdGhpc19jaGFyKQorKyAgICB7CisrICAgICAgdW5zaWduZWQgaW50IHRoaXNfY29sc2VxID0gY29sbHNlcVsodW5zaWduZWQgY2hhcikgVFJBTlNMQVRFICh0aGlzX2NoYXIpXTsKKysKKysgICAgICBpZiAoc3RhcnRfY29sc2VxIDw9IHRoaXNfY29sc2VxICYmIHRoaXNfY29sc2VxIDw9IGVuZF9jb2xzZXEpCisrCXsKKysJICBTRVRfTElTVF9CSVQgKFRSQU5TTEFURSAodGhpc19jaGFyKSk7CisrCSAgcmV0ID0gUkVHX05PRVJST1I7CisrCX0KKysgICAgfQorKyMgZWxzZQorKyAgLyogSGVyZSB3ZSBzZWUgd2h5IGB0aGlzX2NoYXInIGhhcyB0byBiZSBsYXJnZXIgdGhhbiBhbiBgdW5zaWduZWQKKysgICAgIGNoYXInIC0tIHdlIHdvdWxkIG90aGVyd2lzZSBnbyBpbnRvIGFuIGluZmluaXRlIGxvb3AsIHNpbmNlIGFsbAorKyAgICAgY2hhcmFjdGVycyA8PSAweGZmLiAgKi8KKysgIHJhbmdlX3N0YXJ0X2NoYXIgPSBUUkFOU0xBVEUgKHJhbmdlX3N0YXJ0X2NoYXIpOworKyAgLyogVFJBTlNMQVRFKHBbMF0pIGlzIGNhc3RlZCB0byBjaGFyIChub3QgdW5zaWduZWQgY2hhcikgaW4gVFJBTlNMQVRFLAorKyAgICAgYW5kIHNvbWUgY29tcGlsZXJzIGNhc3QgaXQgdG8gaW50IGltcGxpY2l0bHksIHNvIGZvbGxvd2luZyBmb3JfbG9vcAorKyAgICAgbWF5IGZhbGwgdG8gKGFsbW9zdCkgaW5maW5pdGUgbG9vcC4KKysgICAgIGUuZy4gSWYgdHJhbnNsYXRlW3BbMF1dID0gMHhmZiwgZW5kX2NoYXIgbWF5IGVxdWFscyB0byAweGZmZmZmZmZmLgorKyAgICAgVG8gYXZvaWQgdGhpcywgd2UgY2FzdCBwWzBdIHRvIHVuc2lnbmVkIGludCBhbmQgdHJ1bmNhdGUgaXQuICAqLworKyAgZW5kX2NoYXIgPSAoKHVuc2lnbmVkKVRSQU5TTEFURShwWzBdKSAmICgoMSA8PCBCWVRFV0lEVEgpIC0gMSkpOworKworKyAgZm9yICh0aGlzX2NoYXIgPSByYW5nZV9zdGFydF9jaGFyOyB0aGlzX2NoYXIgPD0gZW5kX2NoYXI7ICsrdGhpc19jaGFyKQorKyAgICB7CisrICAgICAgU0VUX0xJU1RfQklUIChUUkFOU0xBVEUgKHRoaXNfY2hhcikpOworKyAgICAgIHJldCA9IFJFR19OT0VSUk9SOworKyAgICB9CisrIyBlbmRpZgorKworKyAgcmV0dXJuIHJldDsKKyt9CisrI2VuZGlmIC8qIFdDSEFSICovCisrDAorKy8qIHJlX2NvbXBpbGVfZmFzdG1hcCBjb21wdXRlcyBhIGBgZmFzdG1hcCcnIGZvciB0aGUgY29tcGlsZWQgcGF0dGVybiBpbgorKyAgIEJVRlAuICBBIGZhc3RtYXAgcmVjb3JkcyB3aGljaCBvZiB0aGUgKDEgPDwgQllURVdJRFRIKSBwb3NzaWJsZQorKyAgIGNoYXJhY3RlcnMgY2FuIHN0YXJ0IGEgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUgcGF0dGVybi4gIFRoaXMgZmFzdG1hcAorKyAgIGlzIHVzZWQgYnkgcmVfc2VhcmNoIHRvIHNraXAgcXVpY2tseSBvdmVyIGltcG9zc2libGUgc3RhcnRpbmcgcG9pbnRzLgorKworKyAgIFRoZSBjYWxsZXIgbXVzdCBzdXBwbHkgdGhlIGFkZHJlc3Mgb2YgYSAoMSA8PCBCWVRFV0lEVEgpLWJ5dGUgZGF0YQorKyAgIGFyZWEgYXMgQlVGUC0+ZmFzdG1hcC4KKysKKysgICBXZSBzZXQgdGhlIGBmYXN0bWFwJywgYGZhc3RtYXBfYWNjdXJhdGUnLCBhbmQgYGNhbl9iZV9udWxsJyBmaWVsZHMgaW4KKysgICB0aGUgcGF0dGVybiBidWZmZXIuCisrCisrICAgUmV0dXJucyAwIGlmIHdlIHN1Y2NlZWQsIC0yIGlmIGFuIGludGVybmFsIGVycm9yLiAgICovCisrCisrI2lmZGVmIFdDSEFSCisrLyogbG9jYWwgZnVuY3Rpb24gZm9yIHJlX2NvbXBpbGVfZmFzdG1hcC4KKysgICB0cnVuY2F0ZSB3Y2hhcl90IGNoYXJhY3RlciB0byBjaGFyLiAgKi8KKytzdGF0aWMgdW5zaWduZWQgY2hhciB0cnVuY2F0ZV93Y2hhciAoQ0hBUl9UIGMpOworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyCisrdHJ1bmNhdGVfd2NoYXIgKENIQVJfVCBjKQorK3sKKysgIHVuc2lnbmVkIGNoYXIgYnVmW01CX0NVUl9NQVhdOworKyAgbWJzdGF0ZV90IHN0YXRlOworKyAgaW50IHJldHZhbDsKKysgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKHN0YXRlKSk7CisrIyBpZmRlZiBfTElCQworKyAgcmV0dmFsID0gX193Y3J0b21iIChidWYsIGMsICZzdGF0ZSk7CisrIyBlbHNlCisrICByZXR2YWwgPSB3Y3J0b21iIChidWYsIGMsICZzdGF0ZSk7CisrIyBlbmRpZgorKyAgcmV0dXJuIHJldHZhbCA+IDAgPyBidWZbMF0gOiAodW5zaWduZWQgY2hhcikgYzsKKyt9CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrc3RhdGljIGludAorK1BSRUZJWChyZV9jb21waWxlX2Zhc3RtYXApIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApCisreworKyAgaW50IGosIGs7CisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURQorKyAgUFJFRklYKGZhaWxfc3RhY2tfdHlwZSkgZmFpbF9zdGFjazsKKysjZW5kaWYKKysjaWZuZGVmIFJFR0VYX01BTExPQworKyAgY2hhciAqZGVzdGluYXRpb247CisrI2VuZGlmCisrCisrICByZWdpc3RlciBjaGFyICpmYXN0bWFwID0gYnVmcC0+ZmFzdG1hcDsKKysKKysjaWZkZWYgV0NIQVIKKysgIC8qIFdlIG5lZWQgdG8gY2FzdCBwYXR0ZXJuIHRvICh3Y2hhcl90KiksIGJlY2F1c2Ugd2UgY2FzdGVkIHRoaXMgY29tcGlsZWQKKysgICAgIHBhdHRlcm4gdG8gKGNoYXIqKSBpbiByZWdleF9jb21waWxlLiAgKi8KKysgIFVDSEFSX1QgKnBhdHRlcm4gPSAoVUNIQVJfVCopYnVmcC0+YnVmZmVyOworKyAgcmVnaXN0ZXIgVUNIQVJfVCAqcGVuZCA9IChVQ0hBUl9UKikgKGJ1ZnAtPmJ1ZmZlciArIGJ1ZnAtPnVzZWQpOworKyNlbHNlIC8qIEJZVEUgKi8KKysgIFVDSEFSX1QgKnBhdHRlcm4gPSBidWZwLT5idWZmZXI7CisrICByZWdpc3RlciBVQ0hBUl9UICpwZW5kID0gcGF0dGVybiArIGJ1ZnAtPnVzZWQ7CisrI2VuZGlmIC8qIFdDSEFSICovCisrICBVQ0hBUl9UICpwID0gcGF0dGVybjsKKysKKysjaWZkZWYgUkVMX0FMTE9DCisrICAvKiBUaGlzIGhvbGRzIHRoZSBwb2ludGVyIHRvIHRoZSBmYWlsdXJlIHN0YWNrLCB3aGVuCisrICAgICBpdCBpcyBhbGxvY2F0ZWQgcmVsb2NhdGFibHkuICAqLworKyAgZmFpbF9zdGFja19lbHRfdCAqZmFpbHVyZV9zdGFja19wdHI7CisrI2VuZGlmCisrCisrICAvKiBBc3N1bWUgdGhhdCBlYWNoIHBhdGggdGhyb3VnaCB0aGUgcGF0dGVybiBjYW4gYmUgbnVsbCB1bnRpbAorKyAgICAgcHJvdmVuIG90aGVyd2lzZS4gIFdlIHNldCB0aGlzIGZhbHNlIGF0IHRoZSBib3R0b20gb2Ygc3dpdGNoCisrICAgICBzdGF0ZW1lbnQsIHRvIHdoaWNoIHdlIGdldCBvbmx5IGlmIGEgcGFydGljdWxhciBwYXRoIGRvZXNuJ3QKKysgICAgIG1hdGNoIHRoZSBlbXB0eSBzdHJpbmcuICAqLworKyAgYm9vbGVhbiBwYXRoX2Nhbl9iZV9udWxsID0gdHJ1ZTsKKysKKysgIC8qIFdlIGFyZW4ndCBkb2luZyBhIGBzdWNjZWVkX24nIHRvIGJlZ2luIHdpdGguICAqLworKyAgYm9vbGVhbiBzdWNjZWVkX25fcCA9IGZhbHNlOworKworKyAgYXNzZXJ0IChmYXN0bWFwICE9IE5VTEwgJiYgcCAhPSBOVUxMKTsKKysKKysgIElOSVRfRkFJTF9TVEFDSyAoKTsKKysgIGJ6ZXJvIChmYXN0bWFwLCAxIDw8IEJZVEVXSURUSCk7ICAvKiBBc3N1bWUgbm90aGluZydzIHZhbGlkLiAgKi8KKysgIGJ1ZnAtPmZhc3RtYXBfYWNjdXJhdGUgPSAxOwkgICAgLyogSXQgd2lsbCBiZSB3aGVuIHdlJ3JlIGRvbmUuICAqLworKyAgYnVmcC0+Y2FuX2JlX251bGwgPSAwOworKworKyAgd2hpbGUgKDEpCisrICAgIHsKKysgICAgICBpZiAocCA9PSBwZW5kIHx8ICpwID09IChVQ0hBUl9UKSBzdWNjZWVkKQorKwl7CisrCSAgLyogV2UgaGF2ZSByZWFjaGVkIHRoZSAoZWZmZWN0aXZlKSBlbmQgb2YgcGF0dGVybi4gICovCisrCSAgaWYgKCFGQUlMX1NUQUNLX0VNUFRZICgpKQorKwkgICAgeworKwkgICAgICBidWZwLT5jYW5fYmVfbnVsbCB8PSBwYXRoX2Nhbl9iZV9udWxsOworKworKwkgICAgICAvKiBSZXNldCBmb3IgbmV4dCBwYXRoLiAgKi8KKysJICAgICAgcGF0aF9jYW5fYmVfbnVsbCA9IHRydWU7CisrCisrCSAgICAgIHAgPSBmYWlsX3N0YWNrLnN0YWNrWy0tZmFpbF9zdGFjay5hdmFpbF0ucG9pbnRlcjsKKysKKysJICAgICAgY29udGludWU7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgYnJlYWs7CisrCX0KKysKKysgICAgICAvKiBXZSBzaG91bGQgbmV2ZXIgYmUgYWJvdXQgdG8gZ28gYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4uICAqLworKyAgICAgIGFzc2VydCAocCA8IHBlbmQpOworKworKyAgICAgIHN3aXRjaCAoU1dJVENIX0VOVU1fQ0FTVCAoKHJlX29wY29kZV90KSAqcCsrKSkKKysJeworKworKyAgICAgICAgLyogSSBndWVzcyB0aGUgaWRlYSBoZXJlIGlzIHRvIHNpbXBseSBub3QgYm90aGVyIHdpdGggYSBmYXN0bWFwCisrICAgICAgICAgICBpZiBhIGJhY2tyZWZlcmVuY2UgaXMgdXNlZCwgc2luY2UgaXQncyB0b28gaGFyZCB0byBmaWd1cmUgb3V0CisrICAgICAgICAgICB0aGUgZmFzdG1hcCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZ3JvdXAuICBTZXR0aW5nCisrICAgICAgICAgICBgY2FuX2JlX251bGwnIHN0b3BzIGByZV9zZWFyY2hfMicgZnJvbSB1c2luZyB0aGUgZmFzdG1hcCwgc28KKysgICAgICAgICAgIHRoYXQgaXMgYWxsIHdlIGRvLiAgKi8KKysJY2FzZSBkdXBsaWNhdGU6CisrCSAgYnVmcC0+Y2FuX2JlX251bGwgPSAxOworKyAgICAgICAgICBnb3RvIGRvbmU7CisrCisrCisrICAgICAgLyogRm9sbG93aW5nIGFyZSB0aGUgY2FzZXMgd2hpY2ggbWF0Y2ggYSBjaGFyYWN0ZXIuICBUaGVzZSBlbmQKKysgICAgICAgICB3aXRoIGBicmVhaycuICAqLworKworKyNpZmRlZiBXQ0hBUgorKwljYXNlIGV4YWN0bjoKKysgICAgICAgICAgZmFzdG1hcFt0cnVuY2F0ZV93Y2hhcihwWzFdKV0gPSAxOworKwkgIGJyZWFrOworKyNlbHNlIC8qIEJZVEUgKi8KKysJY2FzZSBleGFjdG46CisrICAgICAgICAgIGZhc3RtYXBbcFsxXV0gPSAxOworKwkgIGJyZWFrOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKyNpZmRlZiBNQlNfU1VQUE9SVAorKwljYXNlIGV4YWN0bl9iaW46CisrCSAgZmFzdG1hcFtwWzFdXSA9IDE7CisrCSAgYnJlYWs7CisrI2VuZGlmCisrCisrI2lmZGVmIFdDSEFSCisrICAgICAgICAvKiBJdCBpcyBoYXJkIHRvIGRpc3Rpbmd1aXNoIGZhc3RtYXAgZnJvbSAobXVsdGkgYnl0ZSkgY2hhcmFjdGVycworKyAgICAgICAgICAgd2hpY2ggZGVwZW5kcyBvbiBjdXJyZW50IGxvY2FsZS4gICovCisrICAgICAgICBjYXNlIGNoYXJzZXQ6CisrCWNhc2UgY2hhcnNldF9ub3Q6CisrCWNhc2Ugd29yZGNoYXI6CisrCWNhc2Ugbm90d29yZGNoYXI6CisrICAgICAgICAgIGJ1ZnAtPmNhbl9iZV9udWxsID0gMTsKKysgICAgICAgICAgZ290byBkb25lOworKyNlbHNlIC8qIEJZVEUgKi8KKysgICAgICAgIGNhc2UgY2hhcnNldDoKKysgICAgICAgICAgZm9yIChqID0gKnArKyAqIEJZVEVXSURUSCAtIDE7IGogPj0gMDsgai0tKQorKwkgICAgaWYgKHBbaiAvIEJZVEVXSURUSF0gJiAoMSA8PCAoaiAlIEJZVEVXSURUSCkpKQorKyAgICAgICAgICAgICAgZmFzdG1hcFtqXSA9IDE7CisrCSAgYnJlYWs7CisrCisrCisrCWNhc2UgY2hhcnNldF9ub3Q6CisrCSAgLyogQ2hhcnMgYmV5b25kIGVuZCBvZiBtYXAgbXVzdCBiZSBhbGxvd2VkLiAgKi8KKysJICBmb3IgKGogPSAqcCAqIEJZVEVXSURUSDsgaiA8ICgxIDw8IEJZVEVXSURUSCk7IGorKykKKysgICAgICAgICAgICBmYXN0bWFwW2pdID0gMTsKKysKKysJICBmb3IgKGogPSAqcCsrICogQllURVdJRFRIIC0gMTsgaiA+PSAwOyBqLS0pCisrCSAgICBpZiAoIShwW2ogLyBCWVRFV0lEVEhdICYgKDEgPDwgKGogJSBCWVRFV0lEVEgpKSkpCisrICAgICAgICAgICAgICBmYXN0bWFwW2pdID0gMTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCisrCWNhc2Ugd29yZGNoYXI6CisrCSAgZm9yIChqID0gMDsgaiA8ICgxIDw8IEJZVEVXSURUSCk7IGorKykKKysJICAgIGlmIChTWU5UQVggKGopID09IFN3b3JkKQorKwkgICAgICBmYXN0bWFwW2pdID0gMTsKKysJICBicmVhazsKKysKKysKKysJY2FzZSBub3R3b3JkY2hhcjoKKysJICBmb3IgKGogPSAwOyBqIDwgKDEgPDwgQllURVdJRFRIKTsgaisrKQorKwkgICAgaWYgKFNZTlRBWCAoaikgIT0gU3dvcmQpCisrCSAgICAgIGZhc3RtYXBbal0gPSAxOworKwkgIGJyZWFrOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgICAgICAgY2FzZSBhbnljaGFyOgorKwkgIHsKKysJICAgIGludCBmYXN0bWFwX25ld2xpbmUgPSBmYXN0bWFwWydcbiddOworKworKwkgICAgLyogYC4nIG1hdGNoZXMgYW55dGhpbmcgLi4uICAqLworKwkgICAgZm9yIChqID0gMDsgaiA8ICgxIDw8IEJZVEVXSURUSCk7IGorKykKKysJICAgICAgZmFzdG1hcFtqXSA9IDE7CisrCisrCSAgICAvKiAuLi4gZXhjZXB0IHBlcmhhcHMgbmV3bGluZS4gICovCisrCSAgICBpZiAoIShidWZwLT5zeW50YXggJiBSRV9ET1RfTkVXTElORSkpCisrCSAgICAgIGZhc3RtYXBbJ1xuJ10gPSBmYXN0bWFwX25ld2xpbmU7CisrCisrCSAgICAvKiBSZXR1cm4gaWYgd2UgaGF2ZSBhbHJlYWR5IHNldCBgY2FuX2JlX251bGwnOyBpZiB3ZSBoYXZlLAorKwkgICAgICAgdGhlbiB0aGUgZmFzdG1hcCBpcyBpcnJlbGV2YW50LiAgU29tZXRoaW5nJ3Mgd3JvbmcgaGVyZS4gICovCisrCSAgICBlbHNlIGlmIChidWZwLT5jYW5fYmVfbnVsbCkKKysJICAgICAgZ290byBkb25lOworKworKwkgICAgLyogT3RoZXJ3aXNlLCBoYXZlIHRvIGNoZWNrIGFsdGVybmF0aXZlIHBhdGhzLiAgKi8KKysJICAgIGJyZWFrOworKwkgIH0KKysKKysjaWZkZWYgZW1hY3MKKysgICAgICAgIGNhc2Ugc3ludGF4c3BlYzoKKysJICBrID0gKnArKzsKKysJICBmb3IgKGogPSAwOyBqIDwgKDEgPDwgQllURVdJRFRIKTsgaisrKQorKwkgICAgaWYgKFNZTlRBWCAoaikgPT0gKGVudW0gc3ludGF4Y29kZSkgaykKKysJICAgICAgZmFzdG1hcFtqXSA9IDE7CisrCSAgYnJlYWs7CisrCisrCisrCWNhc2Ugbm90c3ludGF4c3BlYzoKKysJICBrID0gKnArKzsKKysJICBmb3IgKGogPSAwOyBqIDwgKDEgPDwgQllURVdJRFRIKTsgaisrKQorKwkgICAgaWYgKFNZTlRBWCAoaikgIT0gKGVudW0gc3ludGF4Y29kZSkgaykKKysJICAgICAgZmFzdG1hcFtqXSA9IDE7CisrCSAgYnJlYWs7CisrCisrCisrICAgICAgLyogQWxsIGNhc2VzIGFmdGVyIHRoaXMgbWF0Y2ggdGhlIGVtcHR5IHN0cmluZy4gIFRoZXNlIGVuZCB3aXRoCisrICAgICAgICAgYGNvbnRpbnVlJy4gICovCisrCisrCisrCWNhc2UgYmVmb3JlX2RvdDoKKysJY2FzZSBhdF9kb3Q6CisrCWNhc2UgYWZ0ZXJfZG90OgorKyAgICAgICAgICBjb250aW51ZTsKKysjZW5kaWYgLyogZW1hY3MgKi8KKysKKysKKysgICAgICAgIGNhc2Ugbm9fb3A6CisrICAgICAgICBjYXNlIGJlZ2xpbmU6CisrICAgICAgICBjYXNlIGVuZGxpbmU6CisrCWNhc2UgYmVnYnVmOgorKwljYXNlIGVuZGJ1ZjoKKysJY2FzZSB3b3JkYm91bmQ6CisrCWNhc2Ugbm90d29yZGJvdW5kOgorKwljYXNlIHdvcmRiZWc6CisrCWNhc2Ugd29yZGVuZDoKKysgICAgICAgIGNhc2UgcHVzaF9kdW1teV9mYWlsdXJlOgorKyAgICAgICAgICBjb250aW51ZTsKKysKKysKKysJY2FzZSBqdW1wX246CisrICAgICAgICBjYXNlIHBvcF9mYWlsdXJlX2p1bXA6CisrCWNhc2UgbWF5YmVfcG9wX2p1bXA6CisrCWNhc2UganVtcDoKKysgICAgICAgIGNhc2UganVtcF9wYXN0X2FsdDoKKysJY2FzZSBkdW1teV9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChqLCBwKTsKKysJICBwICs9IGo7CisrCSAgaWYgKGogPiAwKQorKwkgICAgY29udGludWU7CisrCisrICAgICAgICAgIC8qIEp1bXAgYmFja3dhcmQgaW1wbGllcyB3ZSBqdXN0IHdlbnQgdGhyb3VnaCB0aGUgYm9keSBvZiBhCisrICAgICAgICAgICAgIGxvb3AgYW5kIG1hdGNoZWQgbm90aGluZy4gIE9wY29kZSBqdW1wZWQgdG8gc2hvdWxkIGJlCisrICAgICAgICAgICAgIGBvbl9mYWlsdXJlX2p1bXAnIG9yIGBzdWNjZWVkX24nLiAgSnVzdCB0cmVhdCBpdCBsaWtlIGFuCisrICAgICAgICAgICAgIG9yZGluYXJ5IGp1bXAuICBGb3IgYSAqIGxvb3AsIGl0IGhhcyBwdXNoZWQgaXRzIGZhaWx1cmUKKysgICAgICAgICAgICAgcG9pbnQgYWxyZWFkeTsgaWYgc28sIGRpc2NhcmQgdGhhdCBhcyByZWR1bmRhbnQuICAqLworKyAgICAgICAgICBpZiAoKHJlX29wY29kZV90KSAqcCAhPSBvbl9mYWlsdXJlX2p1bXAKKysJICAgICAgJiYgKHJlX29wY29kZV90KSAqcCAhPSBzdWNjZWVkX24pCisrCSAgICBjb250aW51ZTsKKysKKysgICAgICAgICAgcCsrOworKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAoaiwgcCk7CisrICAgICAgICAgIHAgKz0gajsKKysKKysgICAgICAgICAgLyogSWYgd2hhdCdzIG9uIHRoZSBzdGFjayBpcyB3aGVyZSB3ZSBhcmUgbm93LCBwb3AgaXQuICAqLworKyAgICAgICAgICBpZiAoIUZBSUxfU1RBQ0tfRU1QVFkgKCkKKysJICAgICAgJiYgZmFpbF9zdGFjay5zdGFja1tmYWlsX3N0YWNrLmF2YWlsIC0gMV0ucG9pbnRlciA9PSBwKQorKyAgICAgICAgICAgIGZhaWxfc3RhY2suYXZhaWwtLTsKKysKKysgICAgICAgICAgY29udGludWU7CisrCisrCisrICAgICAgICBjYXNlIG9uX2ZhaWx1cmVfanVtcDoKKysgICAgICAgIGNhc2Ugb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wOgorKwloYW5kbGVfb25fZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAoaiwgcCk7CisrCisrICAgICAgICAgIC8qIEZvciBzb21lIHBhdHRlcm5zLCBlLmcuLCBgKGE/KT8nLCBgcCtqJyBoZXJlIHBvaW50cyB0byB0aGUKKysgICAgICAgICAgICAgZW5kIG9mIHRoZSBwYXR0ZXJuLiAgV2UgZG9uJ3Qgd2FudCB0byBwdXNoIHN1Y2ggYSBwb2ludCwKKysgICAgICAgICAgICAgc2luY2Ugd2hlbiB3ZSByZXN0b3JlIGl0IGFib3ZlLCBlbnRlcmluZyB0aGUgc3dpdGNoIHdpbGwKKysgICAgICAgICAgICAgaW5jcmVtZW50IGBwJyBwYXN0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4uICBXZSBkb24ndCBuZWVkCisrICAgICAgICAgICAgIHRvIHB1c2ggc3VjaCBhIHBvaW50IHNpbmNlIHdlIG9idmlvdXNseSB3b24ndCBmaW5kIGFueSBtb3JlCisrICAgICAgICAgICAgIGZhc3RtYXAgZW50cmllcyBiZXlvbmQgYHBlbmQnLiAgU3VjaCBhIHBhdHRlcm4gY2FuIG1hdGNoCisrICAgICAgICAgICAgIHRoZSBudWxsIHN0cmluZywgdGhvdWdoLiAgKi8KKysgICAgICAgICAgaWYgKHAgKyBqIDwgcGVuZCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBpZiAoIVBVU0hfUEFUVEVSTl9PUCAocCArIGosIGZhaWxfc3RhY2spKQorKwkJeworKwkJICBSRVNFVF9GQUlMX1NUQUNLICgpOworKwkJICByZXR1cm4gLTI7CisrCQl9CisrICAgICAgICAgICAgfQorKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgYnVmcC0+Y2FuX2JlX251bGwgPSAxOworKworKyAgICAgICAgICBpZiAoc3VjY2VlZF9uX3ApCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKGssIHApOwkvKiBTa2lwIHRoZSBuLiAgKi8KKysgICAgICAgICAgICAgIHN1Y2NlZWRfbl9wID0gZmFsc2U7CisrCSAgICB9CisrCisrICAgICAgICAgIGNvbnRpbnVlOworKworKworKwljYXNlIHN1Y2NlZWRfbjoKKysgICAgICAgICAgLyogR2V0IHRvIHRoZSBudW1iZXIgb2YgdGltZXMgdG8gc3VjY2VlZC4gICovCisrICAgICAgICAgIHAgKz0gT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgICAgICAgICAgLyogSW5jcmVtZW50IHAgcGFzdCB0aGUgbiBmb3Igd2hlbiBrICE9IDAuICAqLworKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAoaywgcCk7CisrICAgICAgICAgIGlmIChrID09IDApCisrCSAgICB7CisrICAgICAgICAgICAgICBwIC09IDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgCSAgICAgIHN1Y2NlZWRfbl9wID0gdHJ1ZTsgIC8qIFNwYWdoZXR0aSBjb2RlIGFsZXJ0LiAgKi8KKysgICAgICAgICAgICAgIGdvdG8gaGFuZGxlX29uX2ZhaWx1cmVfanVtcDsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIGNvbnRpbnVlOworKworKworKwljYXNlIHNldF9udW1iZXJfYXQ6CisrICAgICAgICAgIHAgKz0gMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgIGNvbnRpbnVlOworKworKworKwljYXNlIHN0YXJ0X21lbW9yeToKKysgICAgICAgIGNhc2Ugc3RvcF9tZW1vcnk6CisrCSAgcCArPSAyOworKwkgIGNvbnRpbnVlOworKworKworKwlkZWZhdWx0OgorKyAgICAgICAgICBhYm9ydCAoKTsgLyogV2UgaGF2ZSBsaXN0ZWQgYWxsIHRoZSBjYXNlcy4gICovCisrICAgICAgICB9IC8qIHN3aXRjaCAqcCsrICovCisrCisrICAgICAgLyogR2V0dGluZyBoZXJlIG1lYW5zIHdlIGhhdmUgZm91bmQgdGhlIHBvc3NpYmxlIHN0YXJ0aW5nCisrICAgICAgICAgY2hhcmFjdGVycyBmb3Igb25lIHBhdGggb2YgdGhlIHBhdHRlcm4gLS0gYW5kIHRoYXQgdGhlIGVtcHR5CisrICAgICAgICAgc3RyaW5nIGRvZXMgbm90IG1hdGNoLiAgV2UgbmVlZCBub3QgZm9sbG93IHRoaXMgcGF0aCBmdXJ0aGVyLgorKyAgICAgICAgIEluc3RlYWQsIGxvb2sgYXQgdGhlIG5leHQgYWx0ZXJuYXRpdmUgKHJlbWVtYmVyZWQgb24gdGhlCisrICAgICAgICAgc3RhY2spLCBvciBxdWl0IGlmIG5vIG1vcmUuICBUaGUgdGVzdCBhdCB0aGUgdG9wIG9mIHRoZSBsb29wCisrICAgICAgICAgZG9lcyB0aGVzZSB0aGluZ3MuICAqLworKyAgICAgIHBhdGhfY2FuX2JlX251bGwgPSBmYWxzZTsKKysgICAgICBwID0gcGVuZDsKKysgICAgfSAvKiB3aGlsZSBwICovCisrCisrICAvKiBTZXQgYGNhbl9iZV9udWxsJyBmb3IgdGhlIGxhc3QgcGF0aCAoYWxzbyB0aGUgZmlyc3QgcGF0aCwgaWYgdGhlCisrICAgICBwYXR0ZXJuIGlzIGVtcHR5KS4gICovCisrICBidWZwLT5jYW5fYmVfbnVsbCB8PSBwYXRoX2Nhbl9iZV9udWxsOworKworKyBkb25lOgorKyAgUkVTRVRfRkFJTF9TVEFDSyAoKTsKKysgIHJldHVybiAwOworK30KKysKKysjZWxzZSAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworK2ludAorK3JlX2NvbXBpbGVfZmFzdG1hcCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKQorK3sKKysjIGlmZGVmIE1CU19TVVBQT1JUCisrICBpZiAoTUJfQ1VSX01BWCAhPSAxKQorKyAgICByZXR1cm4gd2NzX3JlX2NvbXBpbGVfZmFzdG1hcChidWZwKTsKKysgIGVsc2UKKysjIGVuZGlmCisrICAgIHJldHVybiBieXRlX3JlX2NvbXBpbGVfZmFzdG1hcChidWZwKTsKKyt9IC8qIHJlX2NvbXBpbGVfZmFzdG1hcCAqLworKyNpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVfY29tcGlsZV9mYXN0bWFwLCByZV9jb21waWxlX2Zhc3RtYXApCisrI2VuZGlmCisrDAorKworKy8qIFNldCBSRUdTIHRvIGhvbGQgTlVNX1JFR1MgcmVnaXN0ZXJzLCBzdG9yaW5nIHRoZW0gaW4gU1RBUlRTIGFuZAorKyAgIEVORFMuICBTdWJzZXF1ZW50IG1hdGNoZXMgdXNpbmcgUEFUVEVSTl9CVUZGRVIgYW5kIFJFR1Mgd2lsbCB1c2UKKysgICB0aGlzIG1lbW9yeSBmb3IgcmVjb3JkaW5nIHJlZ2lzdGVyIGluZm9ybWF0aW9uLiAgU1RBUlRTIGFuZCBFTkRTCisrICAgbXVzdCBiZSBhbGxvY2F0ZWQgdXNpbmcgdGhlIG1hbGxvYyBsaWJyYXJ5IHJvdXRpbmUsIGFuZCBtdXN0IGVhY2gKKysgICBiZSBhdCBsZWFzdCBOVU1fUkVHUyAqIHNpemVvZiAocmVnb2ZmX3QpIGJ5dGVzIGxvbmcuCisrCisrICAgSWYgTlVNX1JFR1MgPT0gMCwgdGhlbiBzdWJzZXF1ZW50IG1hdGNoZXMgc2hvdWxkIGFsbG9jYXRlIHRoZWlyIG93bgorKyAgIHJlZ2lzdGVyIGRhdGEuCisrCisrICAgVW5sZXNzIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgZmlyc3Qgc2VhcmNoIG9yIG1hdGNoIHVzaW5nCisrICAgUEFUVEVSTl9CVUZGRVIgd2lsbCBhbGxvY2F0ZSBpdHMgb3duIHJlZ2lzdGVyIGRhdGEsIHdpdGhvdXQKKysgICBmcmVlaW5nIHRoZSBvbGQgZGF0YS4gICovCisrCisrdm9pZAorK3JlX3NldF9yZWdpc3RlcnMgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKysgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCB1bnNpZ25lZCBudW1fcmVncywKKysgICAgICAgICAgICAgICAgICByZWdvZmZfdCAqc3RhcnRzLCByZWdvZmZfdCAqZW5kcykKKyt7CisrICBpZiAobnVtX3JlZ3MpCisrICAgIHsKKysgICAgICBidWZwLT5yZWdzX2FsbG9jYXRlZCA9IFJFR1NfUkVBTExPQ0FURTsKKysgICAgICByZWdzLT5udW1fcmVncyA9IG51bV9yZWdzOworKyAgICAgIHJlZ3MtPnN0YXJ0ID0gc3RhcnRzOworKyAgICAgIHJlZ3MtPmVuZCA9IGVuZHM7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID0gUkVHU19VTkFMTE9DQVRFRDsKKysgICAgICByZWdzLT5udW1fcmVncyA9IDA7CisrICAgICAgcmVncy0+c3RhcnQgPSByZWdzLT5lbmQgPSAocmVnb2ZmX3QgKikgMDsKKysgICAgfQorK30KKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlX3NldF9yZWdpc3RlcnMsIHJlX3NldF9yZWdpc3RlcnMpCisrI2VuZGlmCisrDAorKy8qIFNlYXJjaGluZyByb3V0aW5lcy4gICovCisrCisrLyogTGlrZSByZV9zZWFyY2hfMiwgYmVsb3csIGJ1dCBvbmx5IG9uZSBzdHJpbmcgaXMgc3BlY2lmaWVkLCBhbmQKKysgICBkb2Vzbid0IGxldCB5b3Ugc2F5IHdoZXJlIHRvIHN0b3AgbWF0Y2hpbmcuICAqLworKworK2ludAorK3JlX3NlYXJjaCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBjb25zdCBjaGFyICpzdHJpbmcsIGludCBzaXplLAorKyAgICAgICAgICAgaW50IHN0YXJ0cG9zLCBpbnQgcmFuZ2UsIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MpCisreworKyAgcmV0dXJuIHJlX3NlYXJjaF8yIChidWZwLCBOVUxMLCAwLCBzdHJpbmcsIHNpemUsIHN0YXJ0cG9zLCByYW5nZSwKKysJCSAgICAgIHJlZ3MsIHNpemUpOworK30KKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlX3NlYXJjaCwgcmVfc2VhcmNoKQorKyNlbmRpZgorKworKworKy8qIFVzaW5nIHRoZSBjb21waWxlZCBwYXR0ZXJuIGluIEJVRlAtPmJ1ZmZlciwgZmlyc3QgdHJpZXMgdG8gbWF0Y2ggdGhlCisrICAgdmlydHVhbCBjb25jYXRlbmF0aW9uIG9mIFNUUklORzEgYW5kIFNUUklORzIsIHN0YXJ0aW5nIGZpcnN0IGF0IGluZGV4CisrICAgU1RBUlRQT1MsIHRoZW4gYXQgU1RBUlRQT1MgKyAxLCBhbmQgc28gb24uCisrCisrICAgU1RSSU5HMSBhbmQgU1RSSU5HMiBoYXZlIGxlbmd0aCBTSVpFMSBhbmQgU0laRTIsIHJlc3BlY3RpdmVseS4KKysKKysgICBSQU5HRSBpcyBob3cgZmFyIHRvIHNjYW4gd2hpbGUgdHJ5aW5nIHRvIG1hdGNoLiAgUkFOR0UgPSAwIG1lYW5zIHRyeQorKyAgIG9ubHkgYXQgU1RBUlRQT1M7IGluIGdlbmVyYWwsIHRoZSBsYXN0IHN0YXJ0IHRyaWVkIGlzIFNUQVJUUE9TICsKKysgICBSQU5HRS4KKysKKysgICBJbiBSRUdTLCByZXR1cm4gdGhlIGluZGljZXMgb2YgdGhlIHZpcnR1YWwgY29uY2F0ZW5hdGlvbiBvZiBTVFJJTkcxCisrICAgYW5kIFNUUklORzIgdGhhdCBtYXRjaGVkIHRoZSBlbnRpcmUgQlVGUC0+YnVmZmVyIGFuZCBpdHMgY29udGFpbmVkCisrICAgc3ViZXhwcmVzc2lvbnMuCisrCisrICAgRG8gbm90IGNvbnNpZGVyIG1hdGNoaW5nIG9uZSBwYXN0IHRoZSBpbmRleCBTVE9QIGluIHRoZSB2aXJ0dWFsCisrICAgY29uY2F0ZW5hdGlvbiBvZiBTVFJJTkcxIGFuZCBTVFJJTkcyLgorKworKyAgIFdlIHJldHVybiBlaXRoZXIgdGhlIHBvc2l0aW9uIGluIHRoZSBzdHJpbmdzIGF0IHdoaWNoIHRoZSBtYXRjaCB3YXMKKysgICBmb3VuZCwgLTEgaWYgbm8gbWF0Y2gsIG9yIC0yIGlmIGVycm9yIChzdWNoIGFzIGZhaWx1cmUKKysgICBzdGFjayBvdmVyZmxvdykuICAqLworKworK2ludAorK3JlX3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIGNvbnN0IGNoYXIgKnN0cmluZzEsIGludCBzaXplMSwKKysgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IHNpemUyLCBpbnQgc3RhcnRwb3MsIGludCByYW5nZSwKKysgICAgICAgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgaW50IHN0b3ApCisreworKyMgaWZkZWYgTUJTX1NVUFBPUlQKKysgIGlmIChNQl9DVVJfTUFYICE9IDEpCisrICAgIHJldHVybiB3Y3NfcmVfc2VhcmNoXzIgKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMiwgc3RhcnRwb3MsCisrCQkJICAgIHJhbmdlLCByZWdzLCBzdG9wKTsKKysgIGVsc2UKKysjIGVuZGlmCisrICAgIHJldHVybiBieXRlX3JlX3NlYXJjaF8yIChidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIsIHN0YXJ0cG9zLAorKwkJCSAgICAgcmFuZ2UsIHJlZ3MsIHN0b3ApOworK30gLyogcmVfc2VhcmNoXzIgKi8KKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlX3NlYXJjaF8yLCByZV9zZWFyY2hfMikKKysjZW5kaWYKKysKKysjZW5kaWYgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKysjaWZkZWYgSU5TSURFX1JFQ1VSU0lPTgorKworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKKysjIGRlZmluZSBGUkVFX1ZBUih2YXIpIGlmICh2YXIpIFJFR0VYX0ZSRUUgKHZhcik7IHZhciA9IE5VTEwKKysjZWxzZQorKyMgZGVmaW5lIEZSRUVfVkFSKHZhcikgaWYgKHZhcikgZnJlZSAodmFyKTsgdmFyID0gTlVMTAorKyNlbmRpZgorKworKyNpZmRlZiBXQ0hBUgorKyMgZGVmaW5lIE1BWF9BTExPQ0FfU0laRQkyMDAwCisrCisrIyBkZWZpbmUgRlJFRV9XQ1NfQlVGRkVSUygpIFwKKysgIGRvIHsJCQkJCQkJCQkgICAgICBcCisrICAgIGlmIChzaXplMSA+IE1BWF9BTExPQ0FfU0laRSkJCQkJCSAgICAgIFwKKysgICAgICB7CQkJCQkJCQkJICAgICAgXAorKwlmcmVlICh3Y3Nfc3RyaW5nMSk7CQkJCQkJICAgICAgXAorKwlmcmVlIChtYnNfb2Zmc2V0MSk7CQkJCQkJICAgICAgXAorKyAgICAgIH0JCQkJCQkJCQkgICAgICBcCisrICAgIGVsc2UJCQkJCQkJCSAgICAgIFwKKysgICAgICB7CQkJCQkJCQkJICAgICAgXAorKwlGUkVFX1ZBUiAod2NzX3N0cmluZzEpOwkJCQkJCSAgICAgIFwKKysJRlJFRV9WQVIgKG1ic19vZmZzZXQxKTsJCQkJCQkgICAgICBcCisrICAgICAgfQkJCQkJCQkJCSAgICAgIFwKKysgICAgaWYgKHNpemUyID4gTUFYX0FMTE9DQV9TSVpFKSAJCQkJCSAgICAgIFwKKysgICAgICB7CQkJCQkJCQkJICAgICAgXAorKwlmcmVlICh3Y3Nfc3RyaW5nMik7CQkJCQkJICAgICAgXAorKwlmcmVlIChtYnNfb2Zmc2V0Mik7CQkJCQkJICAgICAgXAorKyAgICAgIH0JCQkJCQkJCQkgICAgICBcCisrICAgIGVsc2UJCQkJCQkJCSAgICAgIFwKKysgICAgICB7CQkJCQkJCQkJICAgICAgXAorKwlGUkVFX1ZBUiAod2NzX3N0cmluZzIpOwkJCQkJCSAgICAgIFwKKysJRlJFRV9WQVIgKG1ic19vZmZzZXQyKTsJCQkJCQkgICAgICBcCisrICAgICAgfQkJCQkJCQkJCSAgICAgIFwKKysgIH0gd2hpbGUgKDApCisrCisrI2VuZGlmCisrCisrCisrc3RhdGljIGludAorK1BSRUZJWChyZV9zZWFyY2hfMikgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgY29uc3QgY2hhciAqc3RyaW5nMSwKKysgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZTEsIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBzaXplMiwKKysgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnRwb3MsIGludCByYW5nZSwKKysgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCBpbnQgc3RvcCkKKyt7CisrICBpbnQgdmFsOworKyAgcmVnaXN0ZXIgY2hhciAqZmFzdG1hcCA9IGJ1ZnAtPmZhc3RtYXA7CisrICByZWdpc3RlciBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuc2xhdGUgPSBidWZwLT50cmFuc2xhdGU7CisrICBpbnQgdG90YWxfc2l6ZSA9IHNpemUxICsgc2l6ZTI7CisrICBpbnQgZW5kcG9zID0gc3RhcnRwb3MgKyByYW5nZTsKKysjaWZkZWYgV0NIQVIKKysgIC8qIFdlIG5lZWQgd2NoYXJfdCogYnVmZmVycyBjb3JyZXNwb25kIHRvIGNzdHJpbmcxLCBjc3RyaW5nMi4gICovCisrICB3Y2hhcl90ICp3Y3Nfc3RyaW5nMSA9IE5VTEwsICp3Y3Nfc3RyaW5nMiA9IE5VTEw7CisrICAvKiBXZSBuZWVkIHRoZSBzaXplIG9mIHdjaGFyX3QgYnVmZmVycyBjb3JyZXNwb25kIHRvIGNzaXplMSwgY3NpemUyLiAgKi8KKysgIGludCB3Y3Nfc2l6ZTEgPSAwLCB3Y3Nfc2l6ZTIgPSAwOworKyAgLyogb2Zmc2V0IGJ1ZmZlciBmb3Igb3B0aW1pemF0b2luLiBTZWUgY29udmVydF9tYnNfdG9fd2MuICAqLworKyAgaW50ICptYnNfb2Zmc2V0MSA9IE5VTEwsICptYnNfb2Zmc2V0MiA9IE5VTEw7CisrICAvKiBUaGV5IGhvbGQgd2hldGhlciBlYWNoIHdjaGFyX3QgaXMgYmluYXJ5IGRhdGEgb3Igbm90LiAgKi8KKysgIGNoYXIgKmlzX2JpbmFyeSA9IE5VTEw7CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAvKiBDaGVjayBmb3Igb3V0LW9mLXJhbmdlIFNUQVJUUE9TLiAgKi8KKysgIGlmIChzdGFydHBvcyA8IDAgfHwgc3RhcnRwb3MgPiB0b3RhbF9zaXplKQorKyAgICByZXR1cm4gLTE7CisrCisrICAvKiBGaXggdXAgUkFOR0UgaWYgaXQgbWlnaHQgZXZlbnR1YWxseSB0YWtlIHVzIG91dHNpZGUKKysgICAgIHRoZSB2aXJ0dWFsIGNvbmNhdGVuYXRpb24gb2YgU1RSSU5HMSBhbmQgU1RSSU5HMi4KKysgICAgIE1ha2Ugc3VyZSB3ZSB3b24ndCBtb3ZlIFNUQVJUUE9TIGJlbG93IDAgb3IgYWJvdmUgVE9UQUxfU0laRS4gICovCisrICBpZiAoZW5kcG9zIDwgMCkKKysgICAgcmFuZ2UgPSAwIC0gc3RhcnRwb3M7CisrICBlbHNlIGlmIChlbmRwb3MgPiB0b3RhbF9zaXplKQorKyAgICByYW5nZSA9IHRvdGFsX3NpemUgLSBzdGFydHBvczsKKysKKysgIC8qIElmIHRoZSBzZWFyY2ggaXNuJ3QgdG8gYmUgYSBiYWNrd2FyZHMgb25lLCBkb24ndCB3YXN0ZSB0aW1lIGluIGEKKysgICAgIHNlYXJjaCBmb3IgYSBwYXR0ZXJuIHRoYXQgbXVzdCBiZSBhbmNob3JlZC4gICovCisrICBpZiAoYnVmcC0+dXNlZCA+IDAgJiYgcmFuZ2UgPiAwCisrICAgICAgJiYgKChyZV9vcGNvZGVfdCkgYnVmcC0+YnVmZmVyWzBdID09IGJlZ2J1ZgorKwkgIC8qIGBiZWdsaW5lJyBpcyBsaWtlIGBiZWdidWYnIGlmIGl0IGNhbm5vdCBtYXRjaCBhdCBuZXdsaW5lcy4gICovCisrCSAgfHwgKChyZV9vcGNvZGVfdCkgYnVmcC0+YnVmZmVyWzBdID09IGJlZ2xpbmUKKysJICAgICAgJiYgIWJ1ZnAtPm5ld2xpbmVfYW5jaG9yKSkpCisrICAgIHsKKysgICAgICBpZiAoc3RhcnRwb3MgPiAwKQorKwlyZXR1cm4gLTE7CisrICAgICAgZWxzZQorKwlyYW5nZSA9IDE7CisrICAgIH0KKysKKysjaWZkZWYgZW1hY3MKKysgIC8qIEluIGEgZm9yd2FyZCBzZWFyY2ggZm9yIHNvbWV0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIFw9LgorKyAgICAgZG9uJ3Qga2VlcCBzZWFyY2hpbmcgcGFzdCBwb2ludC4gICovCisrICBpZiAoYnVmcC0+dXNlZCA+IDAgJiYgKHJlX29wY29kZV90KSBidWZwLT5idWZmZXJbMF0gPT0gYXRfZG90ICYmIHJhbmdlID4gMCkKKysgICAgeworKyAgICAgIHJhbmdlID0gUFQgLSBzdGFydHBvczsKKysgICAgICBpZiAocmFuZ2UgPD0gMCkKKysJcmV0dXJuIC0xOworKyAgICB9CisrI2VuZGlmIC8qIGVtYWNzICovCisrCisrICAvKiBVcGRhdGUgdGhlIGZhc3RtYXAgbm93IGlmIG5vdCBjb3JyZWN0IGFscmVhZHkuICAqLworKyAgaWYgKGZhc3RtYXAgJiYgIWJ1ZnAtPmZhc3RtYXBfYWNjdXJhdGUpCisrICAgIGlmIChyZV9jb21waWxlX2Zhc3RtYXAgKGJ1ZnApID09IC0yKQorKyAgICAgIHJldHVybiAtMjsKKysKKysjaWZkZWYgV0NIQVIKKysgIC8qIEFsbG9jYXRlIHdjaGFyX3QgYXJyYXkgZm9yIHdjc19zdHJpbmcxIGFuZCB3Y3Nfc3RyaW5nMiBhbmQKKysgICAgIGZpbGwgdGhlbSB3aXRoIGNvbnZlcnRlZCBzdHJpbmcuICAqLworKyAgaWYgKHNpemUxICE9IDApCisrICAgIHsKKysgICAgICBpZiAoc2l6ZTEgPiBNQVhfQUxMT0NBX1NJWkUpCisrCXsKKysJICB3Y3Nfc3RyaW5nMSA9IFRBTExPQyAoc2l6ZTEgKyAxLCBDSEFSX1QpOworKwkgIG1ic19vZmZzZXQxID0gVEFMTE9DIChzaXplMSArIDEsIGludCk7CisrCSAgaXNfYmluYXJ5ID0gVEFMTE9DIChzaXplMSArIDEsIGNoYXIpOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgd2NzX3N0cmluZzEgPSBSRUdFWF9UQUxMT0MgKHNpemUxICsgMSwgQ0hBUl9UKTsKKysJICBtYnNfb2Zmc2V0MSA9IFJFR0VYX1RBTExPQyAoc2l6ZTEgKyAxLCBpbnQpOworKwkgIGlzX2JpbmFyeSA9IFJFR0VYX1RBTExPQyAoc2l6ZTEgKyAxLCBjaGFyKTsKKysJfQorKyAgICAgIGlmICghd2NzX3N0cmluZzEgfHwgIW1ic19vZmZzZXQxIHx8ICFpc19iaW5hcnkpCisrCXsKKysJICBpZiAoc2l6ZTEgPiBNQVhfQUxMT0NBX1NJWkUpCisrCSAgICB7CisrCSAgICAgIGZyZWUgKHdjc19zdHJpbmcxKTsKKysJICAgICAgZnJlZSAobWJzX29mZnNldDEpOworKwkgICAgICBmcmVlIChpc19iaW5hcnkpOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgRlJFRV9WQVIgKHdjc19zdHJpbmcxKTsKKysJICAgICAgRlJFRV9WQVIgKG1ic19vZmZzZXQxKTsKKysJICAgICAgRlJFRV9WQVIgKGlzX2JpbmFyeSk7CisrCSAgICB9CisrCSAgcmV0dXJuIC0yOworKwl9CisrICAgICAgd2NzX3NpemUxID0gY29udmVydF9tYnNfdG9fd2NzKHdjc19zdHJpbmcxLCBzdHJpbmcxLCBzaXplMSwKKysJCQkJICAgICBtYnNfb2Zmc2V0MSwgaXNfYmluYXJ5KTsKKysgICAgICB3Y3Nfc3RyaW5nMVt3Y3Nfc2l6ZTFdID0gTCdcMCc7IC8qIGZvciBhIHNlbnRpbmVsICAqLworKyAgICAgIGlmIChzaXplMSA+IE1BWF9BTExPQ0FfU0laRSkKKysJZnJlZSAoaXNfYmluYXJ5KTsKKysgICAgICBlbHNlCisrCUZSRUVfVkFSIChpc19iaW5hcnkpOworKyAgICB9CisrICBpZiAoc2l6ZTIgIT0gMCkKKysgICAgeworKyAgICAgIGlmIChzaXplMiA+IE1BWF9BTExPQ0FfU0laRSkKKysJeworKwkgIHdjc19zdHJpbmcyID0gVEFMTE9DIChzaXplMiArIDEsIENIQVJfVCk7CisrCSAgbWJzX29mZnNldDIgPSBUQUxMT0MgKHNpemUyICsgMSwgaW50KTsKKysJICBpc19iaW5hcnkgPSBUQUxMT0MgKHNpemUyICsgMSwgY2hhcik7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICB3Y3Nfc3RyaW5nMiA9IFJFR0VYX1RBTExPQyAoc2l6ZTIgKyAxLCBDSEFSX1QpOworKwkgIG1ic19vZmZzZXQyID0gUkVHRVhfVEFMTE9DIChzaXplMiArIDEsIGludCk7CisrCSAgaXNfYmluYXJ5ID0gUkVHRVhfVEFMTE9DIChzaXplMiArIDEsIGNoYXIpOworKwl9CisrICAgICAgaWYgKCF3Y3Nfc3RyaW5nMiB8fCAhbWJzX29mZnNldDIgfHwgIWlzX2JpbmFyeSkKKysJeworKwkgIEZSRUVfV0NTX0JVRkZFUlMgKCk7CisrCSAgaWYgKHNpemUyID4gTUFYX0FMTE9DQV9TSVpFKQorKwkgICAgZnJlZSAoaXNfYmluYXJ5KTsKKysJICBlbHNlCisrCSAgICBGUkVFX1ZBUiAoaXNfYmluYXJ5KTsKKysJICByZXR1cm4gLTI7CisrCX0KKysgICAgICB3Y3Nfc2l6ZTIgPSBjb252ZXJ0X21ic190b193Y3Mod2NzX3N0cmluZzIsIHN0cmluZzIsIHNpemUyLAorKwkJCQkgICAgIG1ic19vZmZzZXQyLCBpc19iaW5hcnkpOworKyAgICAgIHdjc19zdHJpbmcyW3djc19zaXplMl0gPSBMJ1wwJzsgLyogZm9yIGEgc2VudGluZWwgICovCisrICAgICAgaWYgKHNpemUyID4gTUFYX0FMTE9DQV9TSVpFKQorKwlmcmVlIChpc19iaW5hcnkpOworKyAgICAgIGVsc2UKKysJRlJFRV9WQVIgKGlzX2JpbmFyeSk7CisrICAgIH0KKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysKKysgIC8qIExvb3AgdGhyb3VnaCB0aGUgc3RyaW5nLCBsb29raW5nIGZvciBhIHBsYWNlIHRvIHN0YXJ0IG1hdGNoaW5nLiAgKi8KKysgIGZvciAoOzspCisrICAgIHsKKysgICAgICAvKiBJZiBhIGZhc3RtYXAgaXMgc3VwcGxpZWQsIHNraXAgcXVpY2tseSBvdmVyIGNoYXJhY3RlcnMgdGhhdAorKyAgICAgICAgIGNhbm5vdCBiZSB0aGUgc3RhcnQgb2YgYSBtYXRjaC4gIElmIHRoZSBwYXR0ZXJuIGNhbiBtYXRjaCB0aGUKKysgICAgICAgICBudWxsIHN0cmluZywgaG93ZXZlciwgd2UgZG9uJ3QgbmVlZCB0byBza2lwIGNoYXJhY3RlcnM7IHdlIHdhbnQKKysgICAgICAgICB0aGUgZmlyc3QgbnVsbCBzdHJpbmcuICAqLworKyAgICAgIGlmIChmYXN0bWFwICYmIHN0YXJ0cG9zIDwgdG90YWxfc2l6ZSAmJiAhYnVmcC0+Y2FuX2JlX251bGwpCisrCXsKKysJICBpZiAocmFuZ2UgPiAwKQkvKiBTZWFyY2hpbmcgZm9yd2FyZHMuICAqLworKwkgICAgeworKwkgICAgICByZWdpc3RlciBjb25zdCBjaGFyICpkOworKwkgICAgICByZWdpc3RlciBpbnQgbGltID0gMDsKKysJICAgICAgaW50IGlyYW5nZSA9IHJhbmdlOworKworKyAgICAgICAgICAgICAgaWYgKHN0YXJ0cG9zIDwgc2l6ZTEgJiYgc3RhcnRwb3MgKyByYW5nZSA+PSBzaXplMSkKKysgICAgICAgICAgICAgICAgbGltID0gcmFuZ2UgLSAoc2l6ZTEgLSBzdGFydHBvcyk7CisrCisrCSAgICAgIGQgPSAoc3RhcnRwb3MgPj0gc2l6ZTEgPyBzdHJpbmcyIC0gc2l6ZTEgOiBzdHJpbmcxKSArIHN0YXJ0cG9zOworKworKyAgICAgICAgICAgICAgLyogV3JpdHRlbiBvdXQgYXMgYW4gaWYtZWxzZSB0byBhdm9pZCB0ZXN0aW5nIGB0cmFuc2xhdGUnCisrICAgICAgICAgICAgICAgICBpbnNpZGUgdGhlIGxvb3AuICAqLworKwkgICAgICBpZiAodHJhbnNsYXRlKQorKyAgICAgICAgICAgICAgICB3aGlsZSAocmFuZ2UgPiBsaW0KKysgICAgICAgICAgICAgICAgICAgICAgICYmICFmYXN0bWFwWyh1bnNpZ25lZCBjaGFyKQorKwkJCQkgICB0cmFuc2xhdGVbKHVuc2lnbmVkIGNoYXIpICpkKytdXSkKKysgICAgICAgICAgICAgICAgICByYW5nZS0tOworKwkgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIHdoaWxlIChyYW5nZSA+IGxpbSAmJiAhZmFzdG1hcFsodW5zaWduZWQgY2hhcikgKmQrK10pCisrICAgICAgICAgICAgICAgICAgcmFuZ2UtLTsKKysKKysJICAgICAgc3RhcnRwb3MgKz0gaXJhbmdlIC0gcmFuZ2U7CisrCSAgICB9CisrCSAgZWxzZQkJCQkvKiBTZWFyY2hpbmcgYmFja3dhcmRzLiAgKi8KKysJICAgIHsKKysJICAgICAgcmVnaXN0ZXIgQ0hBUl9UIGMgPSAoc2l6ZTEgPT0gMCB8fCBzdGFydHBvcyA+PSBzaXplMQorKwkJCQkgICAgICA/IHN0cmluZzJbc3RhcnRwb3MgLSBzaXplMV0KKysJCQkJICAgICAgOiBzdHJpbmcxW3N0YXJ0cG9zXSk7CisrCisrCSAgICAgIGlmICghZmFzdG1hcFsodW5zaWduZWQgY2hhcikgVFJBTlNMQVRFIChjKV0pCisrCQlnb3RvIGFkdmFuY2U7CisrCSAgICB9CisrCX0KKysKKysgICAgICAvKiBJZiBjYW4ndCBtYXRjaCB0aGUgbnVsbCBzdHJpbmcsIGFuZCB0aGF0J3MgYWxsIHdlIGhhdmUgbGVmdCwgZmFpbC4gICovCisrICAgICAgaWYgKHJhbmdlID49IDAgJiYgc3RhcnRwb3MgPT0gdG90YWxfc2l6ZSAmJiBmYXN0bWFwCisrICAgICAgICAgICYmICFidWZwLT5jYW5fYmVfbnVsbCkKKysgICAgICAgeworKyNpZmRlZiBXQ0hBUgorKyAgICAgICAgIEZSRUVfV0NTX0JVRkZFUlMgKCk7CisrI2VuZGlmCisrICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICB9CisrCisrI2lmZGVmIFdDSEFSCisrICAgICAgdmFsID0gd2NzX3JlX21hdGNoXzJfaW50ZXJuYWwgKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLAorKwkJCQkgICAgIHNpemUyLCBzdGFydHBvcywgcmVncywgc3RvcCwKKysJCQkJICAgICB3Y3Nfc3RyaW5nMSwgd2NzX3NpemUxLAorKwkJCQkgICAgIHdjc19zdHJpbmcyLCB3Y3Nfc2l6ZTIsCisrCQkJCSAgICAgbWJzX29mZnNldDEsIG1ic19vZmZzZXQyKTsKKysjZWxzZSAvKiBCWVRFICovCisrICAgICAgdmFsID0gYnl0ZV9yZV9tYXRjaF8yX2ludGVybmFsIChidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwKKysJCQkJICAgICAgc2l6ZTIsIHN0YXJ0cG9zLCByZWdzLCBzdG9wKTsKKysjZW5kaWYgLyogQllURSAqLworKworKyNpZm5kZWYgUkVHRVhfTUFMTE9DCisrIyBpZmRlZiBDX0FMTE9DQQorKyAgICAgIGFsbG9jYSAoMCk7CisrIyBlbmRpZgorKyNlbmRpZgorKworKyAgICAgIGlmICh2YWwgPj0gMCkKKysJeworKyNpZmRlZiBXQ0hBUgorKwkgIEZSRUVfV0NTX0JVRkZFUlMgKCk7CisrI2VuZGlmCisrCSAgcmV0dXJuIHN0YXJ0cG9zOworKwl9CisrCisrICAgICAgaWYgKHZhbCA9PSAtMikKKysJeworKyNpZmRlZiBXQ0hBUgorKwkgIEZSRUVfV0NTX0JVRkZFUlMgKCk7CisrI2VuZGlmCisrCSAgcmV0dXJuIC0yOworKwl9CisrCisrICAgIGFkdmFuY2U6CisrICAgICAgaWYgKCFyYW5nZSkKKysgICAgICAgIGJyZWFrOworKyAgICAgIGVsc2UgaWYgKHJhbmdlID4gMCkKKysgICAgICAgIHsKKysgICAgICAgICAgcmFuZ2UtLTsKKysgICAgICAgICAgc3RhcnRwb3MrKzsKKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgIHJhbmdlKys7CisrICAgICAgICAgIHN0YXJ0cG9zLS07CisrICAgICAgICB9CisrICAgIH0KKysjaWZkZWYgV0NIQVIKKysgIEZSRUVfV0NTX0JVRkZFUlMgKCk7CisrI2VuZGlmCisrICByZXR1cm4gLTE7CisrfQorKworKyNpZmRlZiBXQ0hBUgorKy8qIFRoaXMgY29udmVydHMgUFRSLCBhIHBvaW50ZXIgaW50byBvbmUgb2YgdGhlIHNlYXJjaCB3Y2hhcl90IHN0cmluZ3MKKysgICBgc3RyaW5nMScgYW5kIGBzdHJpbmcyJyBpbnRvIGFuIG11bHRpYnl0ZSBzdHJpbmcgb2Zmc2V0IGZyb20gdGhlCisrICAgYmVnaW5uaW5nIG9mIHRoYXQgc3RyaW5nLiBXZSB1c2UgbWJzX29mZnNldCB0byBvcHRpbWl6ZS4KKysgICBTZWUgY29udmVydF9tYnNfdG9fd2NzLiAgKi8KKysjIGRlZmluZSBQT0lOVEVSX1RPX09GRlNFVChwdHIpCQkJCQkJXAorKyAgKEZJUlNUX1NUUklOR19QIChwdHIpCQkJCQkJCVwKKysgICA/ICgocmVnb2ZmX3QpKG1ic19vZmZzZXQxICE9IE5VTEw/IG1ic19vZmZzZXQxWyhwdHIpLXN0cmluZzFdIDogMCkpCVwKKysgICA6ICgocmVnb2ZmX3QpKChtYnNfb2Zmc2V0MiAhPSBOVUxMPyBtYnNfb2Zmc2V0MlsocHRyKS1zdHJpbmcyXSA6IDApCVwKKysJCSArIGNzaXplMSkpKQorKyNlbHNlIC8qIEJZVEUgKi8KKysvKiBUaGlzIGNvbnZlcnRzIFBUUiwgYSBwb2ludGVyIGludG8gb25lIG9mIHRoZSBzZWFyY2ggc3RyaW5ncyBgc3RyaW5nMScKKysgICBhbmQgYHN0cmluZzInIGludG8gYW4gb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGF0IHN0cmluZy4gICovCisrIyBkZWZpbmUgUE9JTlRFUl9UT19PRkZTRVQocHRyKQkJCVwKKysgIChGSVJTVF9TVFJJTkdfUCAocHRyKQkJCQlcCisrICAgPyAoKHJlZ29mZl90KSAoKHB0cikgLSBzdHJpbmcxKSkJCVwKKysgICA6ICgocmVnb2ZmX3QpICgocHRyKSAtIHN0cmluZzIgKyBzaXplMSkpKQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKy8qIE1hY3JvcyBmb3IgZGVhbGluZyB3aXRoIHRoZSBzcGxpdCBzdHJpbmdzIGluIHJlX21hdGNoXzIuICAqLworKworKyNkZWZpbmUgTUFUQ0hJTkdfSU5fRklSU1RfU1RSSU5HICAoZGVuZCA9PSBlbmRfbWF0Y2hfMSkKKysKKysvKiBDYWxsIGJlZm9yZSBmZXRjaGluZyBhIGNoYXJhY3RlciB3aXRoICpkLiAgVGhpcyBzd2l0Y2hlcyBvdmVyIHRvCisrICAgc3RyaW5nMiBpZiBuZWNlc3NhcnkuICAqLworKyNkZWZpbmUgUFJFRkVUQ0goKQkJCQkJCQlcCisrICB3aGlsZSAoZCA9PSBkZW5kKQkJCQkJCSAgICAJXAorKyAgICB7CQkJCQkJCQkJXAorKyAgICAgIC8qIEVuZCBvZiBzdHJpbmcyID0+IGZhaWwuICAqLwkJCQkJXAorKyAgICAgIGlmIChkZW5kID09IGVuZF9tYXRjaF8yKSAJCQkJCQlcCisrICAgICAgICBnb3RvIGZhaWw7CQkJCQkJCVwKKysgICAgICAvKiBFbmQgb2Ygc3RyaW5nMSA9PiBhZHZhbmNlIHRvIHN0cmluZzIuICAqLyAJCQlcCisrICAgICAgZCA9IHN0cmluZzI7CQkJCQkJICAgICAgICBcCisrICAgICAgZGVuZCA9IGVuZF9tYXRjaF8yOwkJCQkJCVwKKysgICAgfQorKworKy8qIFRlc3QgaWYgYXQgdmVyeSBiZWdpbm5pbmcgb3IgYXQgdmVyeSBlbmQgb2YgdGhlIHZpcnR1YWwgY29uY2F0ZW5hdGlvbgorKyAgIG9mIGBzdHJpbmcxJyBhbmQgYHN0cmluZzInLiAgSWYgb25seSBvbmUgc3RyaW5nLCBpdCdzIGBzdHJpbmcyJy4gICovCisrI2RlZmluZSBBVF9TVFJJTkdTX0JFRyhkKSAoKGQpID09IChzaXplMSA/IHN0cmluZzEgOiBzdHJpbmcyKSB8fCAhc2l6ZTIpCisrI2RlZmluZSBBVF9TVFJJTkdTX0VORChkKSAoKGQpID09IGVuZDIpCisrCisrCisrLyogVGVzdCBpZiBEIHBvaW50cyB0byBhIGNoYXJhY3RlciB3aGljaCBpcyB3b3JkLWNvbnN0aXR1ZW50LiAgV2UgaGF2ZQorKyAgIHR3byBzcGVjaWFsIGNhc2VzIHRvIGNoZWNrIGZvcjogaWYgcGFzdCB0aGUgZW5kIG9mIHN0cmluZzEsIGxvb2sgYXQKKysgICB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHN0cmluZzI7IGFuZCBpZiBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZgorKyAgIHN0cmluZzIsIGxvb2sgYXQgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHN0cmluZzEuICAqLworKyNpZmRlZiBXQ0hBUgorKy8qIFVzZSBpbnRlcm5hdGlvbmFsaXplZCBBUEkgaW5zdGVhZCBvZiBTWU5UQVguICAqLworKyMgZGVmaW5lIFdPUkRDSEFSX1AoZCkJCQkJCQkJXAorKyAgKGlzd2FsbnVtICgod2ludF90KSgoZCkgPT0gZW5kMSA/ICpzdHJpbmcyCQkJCVwKKysgICAgICAgICAgIDogKGQpID09IHN0cmluZzIgLSAxID8gKihlbmQxIC0gMSkgOiAqKGQpKSkgIT0gMAkJXAorKyAgIHx8ICgoZCkgPT0gZW5kMSA/ICpzdHJpbmcyCQkJCQkJXAorKyAgICAgICA6IChkKSA9PSBzdHJpbmcyIC0gMSA/ICooZW5kMSAtIDEpIDogKihkKSkgPT0gTCdfJykKKysjZWxzZSAvKiBCWVRFICovCisrIyBkZWZpbmUgV09SRENIQVJfUChkKQkJCQkJCQlcCisrICAoU1lOVEFYICgoZCkgPT0gZW5kMSA/ICpzdHJpbmcyCQkJCQlcCisrICAgICAgICAgICA6IChkKSA9PSBzdHJpbmcyIC0gMSA/ICooZW5kMSAtIDEpIDogKihkKSkJCQlcCisrICAgPT0gU3dvcmQpCisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrLyogRGlzYWJsZWQgZHVlIHRvIGEgY29tcGlsZXIgYnVnIC0tIHNlZSBjb21tZW50IGF0IGNhc2Ugd29yZGJvdW5kICovCisrI2lmIDAKKysvKiBUZXN0IGlmIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIEQgYW5kIHRoZSBvbmUgYXQgRCBkaWZmZXIgd2l0aCByZXNwZWN0CisrICAgdG8gYmVpbmcgd29yZC1jb25zdGl0dWVudC4gICovCisrI2RlZmluZSBBVF9XT1JEX0JPVU5EQVJZKGQpCQkJCQkJXAorKyAgKEFUX1NUUklOR1NfQkVHIChkKSB8fCBBVF9TVFJJTkdTX0VORCAoZCkJCQkJXAorKyAgIHx8IFdPUkRDSEFSX1AgKGQgLSAxKSAhPSBXT1JEQ0hBUl9QIChkKSkKKysjZW5kaWYKKysKKysvKiBGcmVlIGV2ZXJ5dGhpbmcgd2UgbWFsbG9jLiAgKi8KKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCisrIyBpZmRlZiBXQ0hBUgorKyMgIGRlZmluZSBGUkVFX1ZBUklBQkxFUygpCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgUkVHRVhfRlJFRV9TVEFDSyAoZmFpbF9zdGFjay5zdGFjayk7CQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ3N0YXJ0KTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdlbmQpOwkJCQkJCQlcCisrICAgIEZSRUVfVkFSIChvbGRfcmVnc3RhcnQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKG9sZF9yZWdlbmQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKGJlc3RfcmVnc3RhcnQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKGJlc3RfcmVnZW5kKTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdfaW5mbyk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnX2R1bW15KTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdfaW5mb19kdW1teSk7CQkJCQkJXAorKyAgICBpZiAoIWNhbnRfZnJlZV93Y3NfYnVmKQkJCQkJCVwKKysgICAgICB7CQkJCQkJCQkJXAorKyAgICAgICAgRlJFRV9WQVIgKHN0cmluZzEpOwkJCQkJCVwKKysgICAgICAgIEZSRUVfVkFSIChzdHJpbmcyKTsJCQkJCQlcCisrICAgICAgICBGUkVFX1ZBUiAobWJzX29mZnNldDEpOwkJCQkJCVwKKysgICAgICAgIEZSRUVfVkFSIChtYnNfb2Zmc2V0Mik7CQkJCQkJXAorKyAgICAgIH0JCQkJCQkJCQlcCisrICB9IHdoaWxlICgwKQorKyMgZWxzZSAvKiBCWVRFICovCisrIyAgZGVmaW5lIEZSRUVfVkFSSUFCTEVTKCkJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBSRUdFWF9GUkVFX1NUQUNLIChmYWlsX3N0YWNrLnN0YWNrKTsJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnc3RhcnQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ2VuZCk7CQkJCQkJCVwKKysgICAgRlJFRV9WQVIgKG9sZF9yZWdzdGFydCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAob2xkX3JlZ2VuZCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAoYmVzdF9yZWdzdGFydCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAoYmVzdF9yZWdlbmQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ19pbmZvKTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdfZHVtbXkpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ19pbmZvX2R1bW15KTsJCQkJCQlcCisrICB9IHdoaWxlICgwKQorKyMgZW5kaWYgLyogV0NIQVIgKi8KKysjZWxzZQorKyMgaWZkZWYgV0NIQVIKKysjICBkZWZpbmUgRlJFRV9WQVJJQUJMRVMoKQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIGlmICghY2FudF9mcmVlX3djc19idWYpCQkJCQkJXAorKyAgICAgIHsJCQkJCQkJCQlcCisrICAgICAgICBGUkVFX1ZBUiAoc3RyaW5nMSk7CQkJCQkJXAorKyAgICAgICAgRlJFRV9WQVIgKHN0cmluZzIpOwkJCQkJCVwKKysgICAgICAgIEZSRUVfVkFSIChtYnNfb2Zmc2V0MSk7CQkJCQkJXAorKyAgICAgICAgRlJFRV9WQVIgKG1ic19vZmZzZXQyKTsJCQkJCQlcCisrICAgICAgfQkJCQkJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrIyBlbHNlIC8qIEJZVEUgKi8KKysjICBkZWZpbmUgRlJFRV9WQVJJQUJMRVMoKSAoKHZvaWQpMCkgLyogRG8gbm90aGluZyEgIEJ1dCBpbmhpYml0IGdjYyB3YXJuaW5nLiAqLworKyMgZW5kaWYgLyogV0NIQVIgKi8KKysjZW5kaWYgLyogbm90IE1BVENIX01BWV9BTExPQ0FURSAqLworKworKy8qIFRoZXNlIHZhbHVlcyBtdXN0IG1lZXQgc2V2ZXJhbCBjb25zdHJhaW50cy4gIFRoZXkgbXVzdCBub3QgYmUgdmFsaWQKKysgICByZWdpc3RlciB2YWx1ZXM7IHNpbmNlIHdlIGhhdmUgYSBsaW1pdCBvZiAyNTUgcmVnaXN0ZXJzIChiZWNhdXNlCisrICAgd2UgdXNlIG9ubHkgb25lIGJ5dGUgaW4gdGhlIHBhdHRlcm4gZm9yIHRoZSByZWdpc3RlciBudW1iZXIpLCB3ZSBjYW4KKysgICB1c2UgbnVtYmVycyBsYXJnZXIgdGhhbiAyNTUuICBUaGV5IG11c3QgZGlmZmVyIGJ5IDEsIGJlY2F1c2Ugb2YKKysgICBOVU1fRkFJTFVSRV9JVEVNUyBhYm92ZS4gIEFuZCB0aGUgdmFsdWUgZm9yIHRoZSBsb3dlc3QgcmVnaXN0ZXIgbXVzdAorKyAgIGJlIGxhcmdlciB0aGFuIHRoZSB2YWx1ZSBmb3IgdGhlIGhpZ2hlc3QgcmVnaXN0ZXIsIHNvIHdlIGRvIG5vdCB0cnkKKysgICB0byBhY3R1YWxseSBzYXZlIGFueSByZWdpc3RlcnMgd2hlbiBub25lIGFyZSBhY3RpdmUuICAqLworKyNkZWZpbmUgTk9fSElHSEVTVF9BQ1RJVkVfUkVHICgxIDw8IEJZVEVXSURUSCkKKysjZGVmaW5lIE5PX0xPV0VTVF9BQ1RJVkVfUkVHIChOT19ISUdIRVNUX0FDVElWRV9SRUcgKyAxKQorKwwKKysjZWxzZSAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKy8qIE1hdGNoaW5nIHJvdXRpbmVzLiAgKi8KKysKKysjaWZuZGVmIGVtYWNzICAgLyogRW1hY3MgbmV2ZXIgdXNlcyB0aGlzLiAgKi8KKysvKiByZV9tYXRjaCBpcyBsaWtlIHJlX21hdGNoXzIgZXhjZXB0IGl0IHRha2VzIG9ubHkgYSBzaW5nbGUgc3RyaW5nLiAgKi8KKysKKytpbnQKKytyZV9tYXRjaCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBjb25zdCBjaGFyICpzdHJpbmcsCisrICAgICAgICAgIGludCBzaXplLCBpbnQgcG9zLCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzKQorK3sKKysgIGludCByZXN1bHQ7CisrIyBpZmRlZiBNQlNfU1VQUE9SVAorKyAgaWYgKE1CX0NVUl9NQVggIT0gMSkKKysgICAgcmVzdWx0ID0gd2NzX3JlX21hdGNoXzJfaW50ZXJuYWwgKGJ1ZnAsIE5VTEwsIDAsIHN0cmluZywgc2l6ZSwKKysJCQkJICAgICAgcG9zLCByZWdzLCBzaXplLAorKwkJCQkgICAgICBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKKysgIGVsc2UKKysjIGVuZGlmCisrICAgIHJlc3VsdCA9IGJ5dGVfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoYnVmcCwgTlVMTCwgMCwgc3RyaW5nLCBzaXplLAorKwkJCQkgIHBvcywgcmVncywgc2l6ZSk7CisrIyBpZm5kZWYgUkVHRVhfTUFMTE9DCisrIyAgaWZkZWYgQ19BTExPQ0EKKysgIGFsbG9jYSAoMCk7CisrIyAgZW5kaWYKKysjIGVuZGlmCisrICByZXR1cm4gcmVzdWx0OworK30KKysjIGlmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZV9tYXRjaCwgcmVfbWF0Y2gpCisrIyBlbmRpZgorKyNlbmRpZiAvKiBub3QgZW1hY3MgKi8KKysKKysjZW5kaWYgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKysjaWZkZWYgSU5TSURFX1JFQ1VSU0lPTgorK3N0YXRpYyBib29sZWFuIFBSRUZJWChncm91cF9tYXRjaF9udWxsX3N0cmluZ19wKSAoVUNIQVJfVCAqKnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUl9UICplbmQsCisrCQkJCQlQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqcmVnX2luZm8pOworK3N0YXRpYyBib29sZWFuIFBSRUZJWChhbHRfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKFVDSEFSX1QgKnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNIQVJfVCAqZW5kLAorKwkJCQkJUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKnJlZ19pbmZvKTsKKytzdGF0aWMgYm9vbGVhbiBQUkVGSVgoY29tbW9uX29wX21hdGNoX251bGxfc3RyaW5nX3ApIChVQ0hBUl9UICoqcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUl9UICplbmQsCisrCQkJCQlQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqcmVnX2luZm8pOworK3N0YXRpYyBpbnQgUFJFRklYKGJjbXBfdHJhbnNsYXRlKSAoY29uc3QgQ0hBUl9UICpzMSwgY29uc3QgQ0hBUl9UICpzMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBsZW4sCisrCQkJCSAgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSk7CisrI2Vsc2UgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKysvKiByZV9tYXRjaF8yIG1hdGNoZXMgdGhlIGNvbXBpbGVkIHBhdHRlcm4gaW4gQlVGUCBhZ2FpbnN0IHRoZQorKyAgIHRoZSAodmlydHVhbCkgY29uY2F0ZW5hdGlvbiBvZiBTVFJJTkcxIGFuZCBTVFJJTkcyIChvZiBsZW5ndGggU0laRTEKKysgICBhbmQgU0laRTIsIHJlc3BlY3RpdmVseSkuICBXZSBzdGFydCBtYXRjaGluZyBhdCBQT1MsIGFuZCBzdG9wCisrICAgbWF0Y2hpbmcgYXQgU1RPUC4KKysKKysgICBJZiBSRUdTIGlzIG5vbi1udWxsIGFuZCB0aGUgYG5vX3N1YicgZmllbGQgb2YgQlVGUCBpcyBub256ZXJvLCB3ZQorKyAgIHN0b3JlIG9mZnNldHMgZm9yIHRoZSBzdWJzdHJpbmcgZWFjaCBncm91cCBtYXRjaGVkIGluIFJFR1MuICBTZWUgdGhlCisrICAgZG9jdW1lbnRhdGlvbiBmb3IgZXhhY3RseSBob3cgbWFueSBncm91cHMgd2UgZmlsbC4KKysKKysgICBXZSByZXR1cm4gLTEgaWYgbm8gbWF0Y2gsIC0yIGlmIGFuIGludGVybmFsIGVycm9yIChzdWNoIGFzIHRoZQorKyAgIGZhaWx1cmUgc3RhY2sgb3ZlcmZsb3dpbmcpLiAgT3RoZXJ3aXNlLCB3ZSByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUKKysgICBtYXRjaGVkIHN1YnN0cmluZy4gICovCisrCisraW50CisrcmVfbWF0Y2hfMiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBjb25zdCBjaGFyICpzdHJpbmcxLCBpbnQgc2l6ZTEsCisrICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IHNpemUyLCBpbnQgcG9zLAorKyAgICAgICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIGludCBzdG9wKQorK3sKKysgIGludCByZXN1bHQ7CisrIyBpZmRlZiBNQlNfU1VQUE9SVAorKyAgaWYgKE1CX0NVUl9NQVggIT0gMSkKKysgICAgcmVzdWx0ID0gd2NzX3JlX21hdGNoXzJfaW50ZXJuYWwgKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMiwKKysJCQkJICAgICAgcG9zLCByZWdzLCBzdG9wLAorKwkJCQkgICAgICBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKKysgIGVsc2UKKysjIGVuZGlmCisrICAgIHJlc3VsdCA9IGJ5dGVfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyLAorKwkJCQkgIHBvcywgcmVncywgc3RvcCk7CisrCisrI2lmbmRlZiBSRUdFWF9NQUxMT0MKKysjIGlmZGVmIENfQUxMT0NBCisrICBhbGxvY2EgKDApOworKyMgZW5kaWYKKysjZW5kaWYKKysgIHJldHVybiByZXN1bHQ7CisrfQorKyNpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVfbWF0Y2hfMiwgcmVfbWF0Y2hfMikKKysjZW5kaWYKKysKKysjZW5kaWYgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKysjaWZkZWYgSU5TSURFX1JFQ1VSU0lPTgorKworKyNpZmRlZiBXQ0hBUgorK3N0YXRpYyBpbnQgY291bnRfbWJzX2xlbmd0aCAoaW50ICosIGludCk7CisrCisrLyogVGhpcyBjaGVjayB0aGUgc3Vic3RyaW5nIChmcm9tIDAsIHRvIGxlbmd0aCkgb2YgdGhlIG11bHRpYnl0ZSBzdHJpbmcsCisrICAgdG8gd2hpY2ggb2Zmc2V0X2J1ZmZlciBjb3JyZXNwb25kLiBBbmQgY291bnQgaG93IG1hbnkgd2NoYXJfdF9jaGFyYWN0ZXJzCisrICAgdGhlIHN1YnN0cmluZyBvY2N1cHkuIFdlIHVzZSBvZmZzZXRfYnVmZmVyIHRvIG9wdGltaXphdGlvbi4KKysgICBTZWUgY29udmVydF9tYnNfdG9fd2NzLiAgKi8KKysKKytzdGF0aWMgaW50CisrY291bnRfbWJzX2xlbmd0aChpbnQgKm9mZnNldF9idWZmZXIsIGludCBsZW5ndGgpCisreworKyAgaW50IHVwcGVyLCBsb3dlcjsKKysKKysgIC8qIENoZWNrIHdoZXRoZXIgdGhlIHNpemUgaXMgdmFsaWQuICAqLworKyAgaWYgKGxlbmd0aCA8IDApCisrICAgIHJldHVybiAtMTsKKysKKysgIGlmIChvZmZzZXRfYnVmZmVyID09IE5VTEwpCisrICAgIHJldHVybiAwOworKworKyAgLyogSWYgdGhlcmUgYXJlIG5vIG11bHRpYnl0ZSBjaGFyYWN0ZXIsIG9mZnNldF9idWZmZXJbaV0gPT0gaS4KKysgICBPcHRtaXplIGZvciB0aGlzIGNhc2UuICAqLworKyAgaWYgKG9mZnNldF9idWZmZXJbbGVuZ3RoXSA9PSBsZW5ndGgpCisrICAgIHJldHVybiBsZW5ndGg7CisrCisrICAvKiBTZXQgdXAgdXBwZXIgd2l0aCBsZW5ndGguIChiZWNhdXNlIGZvciBhbGwgaSwgb2Zmc2V0X2J1ZmZlcltpXSA+PSBpKSAgKi8KKysgIHVwcGVyID0gbGVuZ3RoOworKyAgbG93ZXIgPSAwOworKworKyAgd2hpbGUgKHRydWUpCisrICAgIHsKKysgICAgICBpbnQgbWlkZGxlID0gKGxvd2VyICsgdXBwZXIpIC8gMjsKKysgICAgICBpZiAobWlkZGxlID09IGxvd2VyIHx8IG1pZGRsZSA9PSB1cHBlcikKKysJYnJlYWs7CisrICAgICAgaWYgKG9mZnNldF9idWZmZXJbbWlkZGxlXSA+IGxlbmd0aCkKKysJdXBwZXIgPSBtaWRkbGU7CisrICAgICAgZWxzZSBpZiAob2Zmc2V0X2J1ZmZlclttaWRkbGVdIDwgbGVuZ3RoKQorKwlsb3dlciA9IG1pZGRsZTsKKysgICAgICBlbHNlCisrCXJldHVybiBtaWRkbGU7CisrICAgIH0KKysKKysgIHJldHVybiAtMTsKKyt9CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrLyogVGhpcyBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIHRoYXQgd2UgY2FuIGZvcmNlIGFuIGFsbG9jYSBjbGVhbnVwCisrICAgYWZ0ZXJ3YXJkcy4gICovCisrI2lmZGVmIFdDSEFSCisrc3RhdGljIGludAorK3djc19yZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNzdHJpbmcxLCBpbnQgY3NpemUxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjc3RyaW5nMiwgaW50IGNzaXplMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcywKKysJCQkgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywKKysgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0b3AsCisrICAgICAvKiBzdHJpbmcxID09IHN0cmluZzIgPT0gTlVMTCBtZWFucyBzdHJpbmcxLzIsIHNpemUxLzIgYW5kCisrCW1ic19vZmZzZXQxLzIgbmVlZCBzZXRpbmcgdXAgaW4gdGhpcyBmdW5jdGlvbi4gICovCisrICAgICAvKiBXZSBuZWVkIHdjaGFyX3QqIGJ1ZmZlcnMgY29ycmVzcG9uZCB0byBjc3RyaW5nMSwgY3N0cmluZzIuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICpzdHJpbmcxLCBpbnQgc2l6ZTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKnN0cmluZzIsIGludCBzaXplMiwKKysgICAgIC8qIG9mZnNldCBidWZmZXIgZm9yIG9wdGltaXphdG9pbi4gU2VlIGNvbnZlcnRfbWJzX3RvX3djLiAgKi8KKysJCQkgaW50ICptYnNfb2Zmc2V0MSwgaW50ICptYnNfb2Zmc2V0MikKKysjZWxzZSAvKiBCWVRFICovCisrc3RhdGljIGludAorK2J5dGVfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMSwgaW50IHNpemUxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IHNpemUyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcywKKysJCQkgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIGludCBzdG9wKQorKyNlbmRpZiAvKiBCWVRFICovCisreworKyAgLyogR2VuZXJhbCB0ZW1wb3Jhcmllcy4gICovCisrICBpbnQgbWNudDsKKysgIFVDSEFSX1QgKnAxOworKyNpZmRlZiBXQ0hBUgorKyAgLyogVGhleSBob2xkIHdoZXRoZXIgZWFjaCB3Y2hhcl90IGlzIGJpbmFyeSBkYXRhIG9yIG5vdC4gICovCisrICBjaGFyICppc19iaW5hcnkgPSBOVUxMOworKyAgLyogSWYgdHJ1ZSwgd2UgY2FuJ3QgZnJlZSBzdHJpbmcxLzIsIG1ic19vZmZzZXQxLzIuICAqLworKyAgaW50IGNhbnRfZnJlZV93Y3NfYnVmID0gMTsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgIC8qIEp1c3QgcGFzdCB0aGUgZW5kIG9mIHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZy4gICovCisrICBjb25zdCBDSEFSX1QgKmVuZDEsICplbmQyOworKworKyAgLyogUG9pbnRlcnMgaW50byBzdHJpbmcxIGFuZCBzdHJpbmcyLCBqdXN0IHBhc3QgdGhlIGxhc3QgY2hhcmFjdGVycyBpbgorKyAgICAgZWFjaCB0byBjb25zaWRlciBtYXRjaGluZy4gICovCisrICBjb25zdCBDSEFSX1QgKmVuZF9tYXRjaF8xLCAqZW5kX21hdGNoXzI7CisrCisrICAvKiBXaGVyZSB3ZSBhcmUgaW4gdGhlIGRhdGEsIGFuZCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHN0cmluZy4gICovCisrICBjb25zdCBDSEFSX1QgKmQsICpkZW5kOworKworKyAgLyogV2hlcmUgd2UgYXJlIGluIHRoZSBwYXR0ZXJuLCBhbmQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybi4gICovCisrI2lmZGVmIFdDSEFSCisrICBVQ0hBUl9UICpwYXR0ZXJuLCAqcDsKKysgIHJlZ2lzdGVyIFVDSEFSX1QgKnBlbmQ7CisrI2Vsc2UgLyogQllURSAqLworKyAgVUNIQVJfVCAqcCA9IGJ1ZnAtPmJ1ZmZlcjsKKysgIHJlZ2lzdGVyIFVDSEFSX1QgKnBlbmQgPSBwICsgYnVmcC0+dXNlZDsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgIC8qIE1hcmsgdGhlIG9wY29kZSBqdXN0IGFmdGVyIGEgc3RhcnRfbWVtb3J5LCBzbyB3ZSBjYW4gdGVzdCBmb3IgYW4KKysgICAgIGVtcHR5IHN1YnBhdHRlcm4gd2hlbiB3ZSBnZXQgdG8gdGhlIHN0b3BfbWVtb3J5LiAgKi8KKysgIFVDSEFSX1QgKmp1c3RfcGFzdF9zdGFydF9tZW0gPSAwOworKworKyAgLyogV2UgdXNlIHRoaXMgdG8gbWFwIGV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiAgKi8KKysgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSA9IGJ1ZnAtPnRyYW5zbGF0ZTsKKysKKysgIC8qIEZhaWx1cmUgcG9pbnQgc3RhY2suICBFYWNoIHBsYWNlIHRoYXQgY2FuIGhhbmRsZSBhIGZhaWx1cmUgZnVydGhlcgorKyAgICAgZG93biB0aGUgbGluZSBwdXNoZXMgYSBmYWlsdXJlIHBvaW50IG9uIHRoaXMgc3RhY2suICBJdCBjb25zaXN0cyBvZgorKyAgICAgcmVzdGFydCwgcmVnZW5kLCBhbmQgcmVnX2luZm8gZm9yIGFsbCByZWdpc3RlcnMgY29ycmVzcG9uZGluZyB0bworKyAgICAgdGhlIHN1YmV4cHJlc3Npb25zIHdlJ3JlIGN1cnJlbnRseSBpbnNpZGUsIHBsdXMgdGhlIG51bWJlciBvZiBzdWNoCisrICAgICByZWdpc3RlcnMsIGFuZCwgZmluYWxseSwgdHdvIGNoYXIgKidzLiAgVGhlIGZpcnN0IGNoYXIgKiBpcyB3aGVyZQorKyAgICAgdG8gcmVzdW1lIHNjYW5uaW5nIHRoZSBwYXR0ZXJuOyB0aGUgc2Vjb25kIG9uZSBpcyB3aGVyZSB0byByZXN1bWUKKysgICAgIHNjYW5uaW5nIHRoZSBzdHJpbmdzLiAgSWYgdGhlIGxhdHRlciBpcyB6ZXJvLCB0aGUgZmFpbHVyZSBwb2ludCBpcworKyAgICAgYSBgYGR1bW15Jyc7IGlmIGEgZmFpbHVyZSBoYXBwZW5zIGFuZCB0aGUgZmFpbHVyZSBwb2ludCBpcyBhIGR1bW15LAorKyAgICAgaXQgZ2V0cyBkaXNjYXJkZWQgYW5kIHRoZSBuZXh0IG5leHQgb25lIGlzIHRyaWVkLiAgKi8KKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFIC8qIG90aGVyd2lzZSwgdGhpcyBpcyBnbG9iYWwuICAqLworKyAgUFJFRklYKGZhaWxfc3RhY2tfdHlwZSkgZmFpbF9zdGFjazsKKysjZW5kaWYKKysjaWZkZWYgREVCVUcKKysgIHN0YXRpYyB1bnNpZ25lZCBmYWlsdXJlX2lkOworKyAgdW5zaWduZWQgbmZhaWx1cmVfcG9pbnRzX3B1c2hlZCA9IDAsIG5mYWlsdXJlX3BvaW50c19wb3BwZWQgPSAwOworKyNlbmRpZgorKworKyNpZmRlZiBSRUxfQUxMT0MKKysgIC8qIFRoaXMgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGZhaWx1cmUgc3RhY2ssIHdoZW4KKysgICAgIGl0IGlzIGFsbG9jYXRlZCByZWxvY2F0YWJseS4gICovCisrICBmYWlsX3N0YWNrX2VsdF90ICpmYWlsdXJlX3N0YWNrX3B0cjsKKysjZW5kaWYKKysKKysgIC8qIFdlIGZpbGwgYWxsIHRoZSByZWdpc3RlcnMgaW50ZXJuYWxseSwgaW5kZXBlbmRlbnQgb2Ygd2hhdCB3ZQorKyAgICAgcmV0dXJuLCBmb3IgdXNlIGluIGJhY2tyZWZlcmVuY2VzLiAgVGhlIG51bWJlciBoZXJlIGluY2x1ZGVzCisrICAgICBhbiBlbGVtZW50IGZvciByZWdpc3RlciB6ZXJvLiAgKi8KKysgIHNpemVfdCBudW1fcmVncyA9IGJ1ZnAtPnJlX25zdWIgKyAxOworKworKyAgLyogVGhlIGN1cnJlbnRseSBhY3RpdmUgcmVnaXN0ZXJzLiAgKi8KKysgIGFjdGl2ZV9yZWdfdCBsb3dlc3RfYWN0aXZlX3JlZyA9IE5PX0xPV0VTVF9BQ1RJVkVfUkVHOworKyAgYWN0aXZlX3JlZ190IGhpZ2hlc3RfYWN0aXZlX3JlZyA9IE5PX0hJR0hFU1RfQUNUSVZFX1JFRzsKKysKKysgIC8qIEluZm9ybWF0aW9uIG9uIHRoZSBjb250ZW50cyBvZiByZWdpc3RlcnMuIFRoZXNlIGFyZSBwb2ludGVycyBpbnRvCisrICAgICB0aGUgaW5wdXQgc3RyaW5nczsgdGhleSByZWNvcmQganVzdCB3aGF0IHdhcyBtYXRjaGVkIChvbiB0aGlzCisrICAgICBhdHRlbXB0KSBieSBhIHN1YmV4cHJlc3Npb24gcGFydCBvZiB0aGUgcGF0dGVybiwgdGhhdCBpcywgdGhlCisrICAgICByZWdudW0tdGggcmVnc3RhcnQgcG9pbnRlciBwb2ludHMgdG8gd2hlcmUgaW4gdGhlIHBhdHRlcm4gd2UgYmVnYW4KKysgICAgIG1hdGNoaW5nIGFuZCB0aGUgcmVnbnVtLXRoIHJlZ2VuZCBwb2ludHMgdG8gcmlnaHQgYWZ0ZXIgd2hlcmUgd2UKKysgICAgIHN0b3BwZWQgbWF0Y2hpbmcgdGhlIHJlZ251bS10aCBzdWJleHByZXNzaW9uLiAgKFRoZSB6ZXJvdGggcmVnaXN0ZXIKKysgICAgIGtlZXBzIHRyYWNrIG9mIHdoYXQgdGhlIHdob2xlIHBhdHRlcm4gbWF0Y2hlcy4pICAqLworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUgLyogb3RoZXJ3aXNlLCB0aGVzZSBhcmUgZ2xvYmFsLiAgKi8KKysgIGNvbnN0IENIQVJfVCAqKnJlZ3N0YXJ0LCAqKnJlZ2VuZDsKKysjZW5kaWYKKysKKysgIC8qIElmIGEgZ3JvdXAgdGhhdCdzIG9wZXJhdGVkIHVwb24gYnkgYSByZXBldGl0aW9uIG9wZXJhdG9yIGZhaWxzIHRvCisrICAgICBtYXRjaCBhbnl0aGluZywgdGhlbiB0aGUgcmVnaXN0ZXIgZm9yIGl0cyBzdGFydCB3aWxsIG5lZWQgdG8gYmUKKysgICAgIHJlc3RvcmVkIGJlY2F1c2UgaXQgd2lsbCBoYXZlIGJlZW4gc2V0IHRvIHdoZXJldmVyIGluIHRoZSBzdHJpbmcgd2UKKysgICAgIGFyZSB3aGVuIHdlIGxhc3Qgc2VlIGl0cyBvcGVuLWdyb3VwIG9wZXJhdG9yLiAgU2ltaWxhcmx5IGZvciBhCisrICAgICByZWdpc3RlcidzIGVuZC4gICovCisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURSAvKiBvdGhlcndpc2UsIHRoZXNlIGFyZSBnbG9iYWwuICAqLworKyAgY29uc3QgQ0hBUl9UICoqb2xkX3JlZ3N0YXJ0LCAqKm9sZF9yZWdlbmQ7CisrI2VuZGlmCisrCisrICAvKiBUaGUgaXNfYWN0aXZlIGZpZWxkIG9mIHJlZ19pbmZvIGhlbHBzIHVzIGtlZXAgdHJhY2sgb2Ygd2hpY2ggKHBvc3NpYmx5CisrICAgICBuZXN0ZWQpIHN1YmV4cHJlc3Npb25zIHdlIGFyZSBjdXJyZW50bHkgaW4uIFRoZSBtYXRjaGVkX3NvbWV0aGluZworKyAgICAgZmllbGQgb2YgcmVnX2luZm9bcmVnX251bV0gaGVscHMgdXMgdGVsbCB3aGV0aGVyIG9yIG5vdCB3ZSBoYXZlCisrICAgICBtYXRjaGVkIGFueSBvZiB0aGUgcGF0dGVybiBzbyBmYXIgdGhpcyB0aW1lIHRocm91Z2ggdGhlIHJlZ19udW0tdGgKKysgICAgIHN1YmV4cHJlc3Npb24uICBUaGVzZSB0d28gZmllbGRzIGdldCByZXNldCBlYWNoIHRpbWUgdGhyb3VnaCBhbnkKKysgICAgIGxvb3AgdGhlaXIgcmVnaXN0ZXIgaXMgaW4uICAqLworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUgLyogb3RoZXJ3aXNlLCB0aGlzIGlzIGdsb2JhbC4gICovCisrICBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqcmVnX2luZm87CisrI2VuZGlmCisrCisrICAvKiBUaGUgZm9sbG93aW5nIHJlY29yZCB0aGUgcmVnaXN0ZXIgaW5mbyBhcyBmb3VuZCBpbiB0aGUgYWJvdmUKKysgICAgIHZhcmlhYmxlcyB3aGVuIHdlIGZpbmQgYSBtYXRjaCBiZXR0ZXIgdGhhbiBhbnkgd2UndmUgc2VlbiBiZWZvcmUuCisrICAgICBUaGlzIGhhcHBlbnMgYXMgd2UgYmFja3RyYWNrIHRocm91Z2ggdGhlIGZhaWx1cmUgcG9pbnRzLCB3aGljaCBpbgorKyAgICAgdHVybiBoYXBwZW5zIG9ubHkgaWYgd2UgaGF2ZSBub3QgeWV0IG1hdGNoZWQgdGhlIGVudGlyZSBzdHJpbmcuICovCisrICB1bnNpZ25lZCBiZXN0X3JlZ3Nfc2V0ID0gZmFsc2U7CisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURSAvKiBvdGhlcndpc2UsIHRoZXNlIGFyZSBnbG9iYWwuICAqLworKyAgY29uc3QgQ0hBUl9UICoqYmVzdF9yZWdzdGFydCwgKipiZXN0X3JlZ2VuZDsKKysjZW5kaWYKKysKKysgIC8qIExvZ2ljYWxseSwgdGhpcyBpcyBgYmVzdF9yZWdlbmRbMF0nLiAgQnV0IHdlIGRvbid0IHdhbnQgdG8gaGF2ZSB0bworKyAgICAgYWxsb2NhdGUgc3BhY2UgZm9yIHRoYXQgaWYgd2UncmUgbm90IGFsbG9jYXRpbmcgc3BhY2UgZm9yIGFueXRoaW5nCisrICAgICBlbHNlIChzZWUgYmVsb3cpLiAgQWxzbywgd2UgbmV2ZXIgbmVlZCBpbmZvIGFib3V0IHJlZ2lzdGVyIDAgZm9yCisrICAgICBhbnkgb2YgdGhlIG90aGVyIHJlZ2lzdGVyIHZlY3RvcnMsIGFuZCBpdCBzZWVtcyByYXRoZXIgYSBrbHVkZ2UgdG8KKysgICAgIHRyZWF0IGBiZXN0X3JlZ2VuZCcgZGlmZmVyZW50bHkgdGhhbiB0aGUgcmVzdC4gIFNvIHdlIGtlZXAgdHJhY2sgb2YKKysgICAgIHRoZSBlbmQgb2YgdGhlIGJlc3QgbWF0Y2ggc28gZmFyIGluIGEgc2VwYXJhdGUgdmFyaWFibGUuICBXZQorKyAgICAgaW5pdGlhbGl6ZSB0aGlzIHRvIE5VTEwgc28gdGhhdCB3aGVuIHdlIGJhY2t0cmFjayB0aGUgZmlyc3QgdGltZQorKyAgICAgYW5kIG5lZWQgdG8gdGVzdCBpdCwgaXQncyBub3QgZ2FyYmFnZS4gICovCisrICBjb25zdCBDSEFSX1QgKm1hdGNoX2VuZCA9IE5VTEw7CisrCisrICAvKiBUaGlzIGhlbHBzIFNFVF9SRUdTX01BVENIRUQgYXZvaWQgZG9pbmcgcmVkdW5kYW50IHdvcmsuICAqLworKyAgaW50IHNldF9yZWdzX21hdGNoZWRfZG9uZSA9IDA7CisrCisrICAvKiBVc2VkIHdoZW4gd2UgcG9wIHZhbHVlcyB3ZSBkb24ndCBjYXJlIGFib3V0LiAgKi8KKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFIC8qIG90aGVyd2lzZSwgdGhlc2UgYXJlIGdsb2JhbC4gICovCisrICBjb25zdCBDSEFSX1QgKipyZWdfZHVtbXk7CisrICBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqcmVnX2luZm9fZHVtbXk7CisrI2VuZGlmCisrCisrI2lmZGVmIERFQlVHCisrICAvKiBDb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcnMgcHVzaGVkLiAgKi8KKysgIHVuc2lnbmVkIG51bV9yZWdzX3B1c2hlZCA9IDA7CisrI2VuZGlmCisrCisrICBERUJVR19QUklOVDEgKCJcblxuRW50ZXJpbmcgcmVfbWF0Y2hfMi5cbiIpOworKworKyAgSU5JVF9GQUlMX1NUQUNLICgpOworKworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKKysgIC8qIERvIG5vdCBib3RoZXIgdG8gaW5pdGlhbGl6ZSBhbGwgdGhlIHJlZ2lzdGVyIHZhcmlhYmxlcyBpZiB0aGVyZSBhcmUKKysgICAgIG5vIGdyb3VwcyBpbiB0aGUgcGF0dGVybiwgYXMgaXQgdGFrZXMgYSBmYWlyIGFtb3VudCBvZiB0aW1lLiAgSWYKKysgICAgIHRoZXJlIGFyZSBncm91cHMsIHdlIGluY2x1ZGUgc3BhY2UgZm9yIHJlZ2lzdGVyIDAgKHRoZSB3aG9sZQorKyAgICAgcGF0dGVybiksIGV2ZW4gdGhvdWdoIHdlIG5ldmVyIHVzZSBpdCwgc2luY2UgaXQgc2ltcGxpZmllcyB0aGUKKysgICAgIGFycmF5IGluZGV4aW5nLiAgV2Ugc2hvdWxkIGZpeCB0aGlzLiAgKi8KKysgIGlmIChidWZwLT5yZV9uc3ViKQorKyAgICB7CisrICAgICAgcmVnc3RhcnQgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBjb25zdCBDSEFSX1QgKik7CisrICAgICAgcmVnZW5kID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgY29uc3QgQ0hBUl9UICopOworKyAgICAgIG9sZF9yZWdzdGFydCA9IFJFR0VYX1RBTExPQyAobnVtX3JlZ3MsIGNvbnN0IENIQVJfVCAqKTsKKysgICAgICBvbGRfcmVnZW5kID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgY29uc3QgQ0hBUl9UICopOworKyAgICAgIGJlc3RfcmVnc3RhcnQgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBjb25zdCBDSEFSX1QgKik7CisrICAgICAgYmVzdF9yZWdlbmQgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBjb25zdCBDSEFSX1QgKik7CisrICAgICAgcmVnX2luZm8gPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSk7CisrICAgICAgcmVnX2R1bW15ID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgY29uc3QgQ0hBUl9UICopOworKyAgICAgIHJlZ19pbmZvX2R1bW15ID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkpOworKworKyAgICAgIGlmICghKHJlZ3N0YXJ0ICYmIHJlZ2VuZCAmJiBvbGRfcmVnc3RhcnQgJiYgb2xkX3JlZ2VuZCAmJiByZWdfaW5mbworKyAgICAgICAgICAgICYmIGJlc3RfcmVnc3RhcnQgJiYgYmVzdF9yZWdlbmQgJiYgcmVnX2R1bW15ICYmIHJlZ19pbmZvX2R1bW15KSkKKysgICAgICAgIHsKKysgICAgICAgICAgRlJFRV9WQVJJQUJMRVMgKCk7CisrICAgICAgICAgIHJldHVybiAtMjsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogV2UgbXVzdCBpbml0aWFsaXplIGFsbCBvdXIgdmFyaWFibGVzIHRvIE5VTEwsIHNvIHRoYXQKKysgICAgICAgICBgRlJFRV9WQVJJQUJMRVMnIGRvZXNuJ3QgdHJ5IHRvIGZyZWUgdGhlbS4gICovCisrICAgICAgcmVnc3RhcnQgPSByZWdlbmQgPSBvbGRfcmVnc3RhcnQgPSBvbGRfcmVnZW5kID0gYmVzdF9yZWdzdGFydAorKyAgICAgICAgPSBiZXN0X3JlZ2VuZCA9IHJlZ19kdW1teSA9IE5VTEw7CisrICAgICAgcmVnX2luZm8gPSByZWdfaW5mb19kdW1teSA9IChQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqKSBOVUxMOworKyAgICB9CisrI2VuZGlmIC8qIE1BVENIX01BWV9BTExPQ0FURSAqLworKworKyAgLyogVGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGlzIGJvZ3VzLiAgKi8KKysjaWZkZWYgV0NIQVIKKysgIGlmIChwb3MgPCAwIHx8IHBvcyA+IGNzaXplMSArIGNzaXplMikKKysjZWxzZSAvKiBCWVRFICovCisrICBpZiAocG9zIDwgMCB8fCBwb3MgPiBzaXplMSArIHNpemUyKQorKyNlbmRpZgorKyAgICB7CisrICAgICAgRlJFRV9WQVJJQUJMRVMgKCk7CisrICAgICAgcmV0dXJuIC0xOworKyAgICB9CisrCisrI2lmZGVmIFdDSEFSCisrICAvKiBBbGxvY2F0ZSB3Y2hhcl90IGFycmF5IGZvciBzdHJpbmcxIGFuZCBzdHJpbmcyIGFuZAorKyAgICAgZmlsbCB0aGVtIHdpdGggY29udmVydGVkIHN0cmluZy4gICovCisrICBpZiAoc3RyaW5nMSA9PSBOVUxMICYmIHN0cmluZzIgPT0gTlVMTCkKKysgICAgeworKyAgICAgIC8qIFdlIG5lZWQgc2V0aW5nIHVwIGJ1ZmZlcnMgaGVyZS4gICovCisrCisrICAgICAgLyogV2UgbXVzdCBmcmVlIHdjcyBidWZmZXJzIGluIHRoaXMgZnVuY3Rpb24uICAqLworKyAgICAgIGNhbnRfZnJlZV93Y3NfYnVmID0gMDsKKysKKysgICAgICBpZiAoY3NpemUxICE9IDApCisrCXsKKysJICBzdHJpbmcxID0gUkVHRVhfVEFMTE9DIChjc2l6ZTEgKyAxLCBDSEFSX1QpOworKwkgIG1ic19vZmZzZXQxID0gUkVHRVhfVEFMTE9DIChjc2l6ZTEgKyAxLCBpbnQpOworKwkgIGlzX2JpbmFyeSA9IFJFR0VYX1RBTExPQyAoY3NpemUxICsgMSwgY2hhcik7CisrCSAgaWYgKCFzdHJpbmcxIHx8ICFtYnNfb2Zmc2V0MSB8fCAhaXNfYmluYXJ5KQorKwkgICAgeworKwkgICAgICBGUkVFX1ZBUiAoc3RyaW5nMSk7CisrCSAgICAgIEZSRUVfVkFSIChtYnNfb2Zmc2V0MSk7CisrCSAgICAgIEZSRUVfVkFSIChpc19iaW5hcnkpOworKwkgICAgICByZXR1cm4gLTI7CisrCSAgICB9CisrCX0KKysgICAgICBpZiAoY3NpemUyICE9IDApCisrCXsKKysJICBzdHJpbmcyID0gUkVHRVhfVEFMTE9DIChjc2l6ZTIgKyAxLCBDSEFSX1QpOworKwkgIG1ic19vZmZzZXQyID0gUkVHRVhfVEFMTE9DIChjc2l6ZTIgKyAxLCBpbnQpOworKwkgIGlzX2JpbmFyeSA9IFJFR0VYX1RBTExPQyAoY3NpemUyICsgMSwgY2hhcik7CisrCSAgaWYgKCFzdHJpbmcyIHx8ICFtYnNfb2Zmc2V0MiB8fCAhaXNfYmluYXJ5KQorKwkgICAgeworKwkgICAgICBGUkVFX1ZBUiAoc3RyaW5nMSk7CisrCSAgICAgIEZSRUVfVkFSIChtYnNfb2Zmc2V0MSk7CisrCSAgICAgIEZSRUVfVkFSIChzdHJpbmcyKTsKKysJICAgICAgRlJFRV9WQVIgKG1ic19vZmZzZXQyKTsKKysJICAgICAgRlJFRV9WQVIgKGlzX2JpbmFyeSk7CisrCSAgICAgIHJldHVybiAtMjsKKysJICAgIH0KKysJICBzaXplMiA9IGNvbnZlcnRfbWJzX3RvX3djcyhzdHJpbmcyLCBjc3RyaW5nMiwgY3NpemUyLAorKwkJCQkgICAgIG1ic19vZmZzZXQyLCBpc19iaW5hcnkpOworKwkgIHN0cmluZzJbc2l6ZTJdID0gTCdcMCc7IC8qIGZvciBhIHNlbnRpbmVsICAqLworKwkgIEZSRUVfVkFSIChpc19iaW5hcnkpOworKwl9CisrICAgIH0KKysKKysgIC8qIFdlIG5lZWQgdG8gY2FzdCBwYXR0ZXJuIHRvICh3Y2hhcl90KiksIGJlY2F1c2Ugd2UgY2FzdGVkIHRoaXMgY29tcGlsZWQKKysgICAgIHBhdHRlcm4gdG8gKGNoYXIqKSBpbiByZWdleF9jb21waWxlLiAgKi8KKysgIHAgPSBwYXR0ZXJuID0gKENIQVJfVCopYnVmcC0+YnVmZmVyOworKyAgcGVuZCA9IChDSEFSX1QqKShidWZwLT5idWZmZXIgKyBidWZwLT51c2VkKTsKKysKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgIC8qIEluaXRpYWxpemUgc3ViZXhwcmVzc2lvbiB0ZXh0IHBvc2l0aW9ucyB0byAtMSB0byBtYXJrIG9uZXMgdGhhdCBubworKyAgICAgc3RhcnRfbWVtb3J5L3N0b3BfbWVtb3J5IGhhcyBiZWVuIHNlZW4gZm9yLiBBbHNvIGluaXRpYWxpemUgdGhlCisrICAgICByZWdpc3RlciBpbmZvcm1hdGlvbiBzdHJ1Y3QuICAqLworKyAgZm9yIChtY250ID0gMTsgKHVuc2lnbmVkKSBtY250IDwgbnVtX3JlZ3M7IG1jbnQrKykKKysgICAgeworKyAgICAgIHJlZ3N0YXJ0W21jbnRdID0gcmVnZW5kW21jbnRdCisrICAgICAgICA9IG9sZF9yZWdzdGFydFttY250XSA9IG9sZF9yZWdlbmRbbWNudF0gPSBSRUdfVU5TRVRfVkFMVUU7CisrCisrICAgICAgUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvW21jbnRdKSA9IE1BVENIX05VTExfVU5TRVRfVkFMVUU7CisrICAgICAgSVNfQUNUSVZFIChyZWdfaW5mb1ttY250XSkgPSAwOworKyAgICAgIE1BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1ttY250XSkgPSAwOworKyAgICAgIEVWRVJfTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvW21jbnRdKSA9IDA7CisrICAgIH0KKysKKysgIC8qIFdlIG1vdmUgYHN0cmluZzEnIGludG8gYHN0cmluZzInIGlmIHRoZSBsYXR0ZXIncyBlbXB0eSAtLSBidXQgbm90IGlmCisrICAgICBgc3RyaW5nMScgaXMgbnVsbC4gICovCisrICBpZiAoc2l6ZTIgPT0gMCAmJiBzdHJpbmcxICE9IE5VTEwpCisrICAgIHsKKysgICAgICBzdHJpbmcyID0gc3RyaW5nMTsKKysgICAgICBzaXplMiA9IHNpemUxOworKyAgICAgIHN0cmluZzEgPSAwOworKyAgICAgIHNpemUxID0gMDsKKysjaWZkZWYgV0NIQVIKKysgICAgICBtYnNfb2Zmc2V0MiA9IG1ic19vZmZzZXQxOworKyAgICAgIGNzaXplMiA9IGNzaXplMTsKKysgICAgICBtYnNfb2Zmc2V0MSA9IE5VTEw7CisrICAgICAgY3NpemUxID0gMDsKKysjZW5kaWYKKysgICAgfQorKyAgZW5kMSA9IHN0cmluZzEgKyBzaXplMTsKKysgIGVuZDIgPSBzdHJpbmcyICsgc2l6ZTI7CisrCisrICAvKiBDb21wdXRlIHdoZXJlIHRvIHN0b3AgbWF0Y2hpbmcsIHdpdGhpbiB0aGUgdHdvIHN0cmluZ3MuICAqLworKyNpZmRlZiBXQ0hBUgorKyAgaWYgKHN0b3AgPD0gY3NpemUxKQorKyAgICB7CisrICAgICAgbWNudCA9IGNvdW50X21ic19sZW5ndGgobWJzX29mZnNldDEsIHN0b3ApOworKyAgICAgIGVuZF9tYXRjaF8xID0gc3RyaW5nMSArIG1jbnQ7CisrICAgICAgZW5kX21hdGNoXzIgPSBzdHJpbmcyOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBpZiAoc3RvcCA+IGNzaXplMSArIGNzaXplMikKKysJc3RvcCA9IGNzaXplMSArIGNzaXplMjsKKysgICAgICBlbmRfbWF0Y2hfMSA9IGVuZDE7CisrICAgICAgbWNudCA9IGNvdW50X21ic19sZW5ndGgobWJzX29mZnNldDIsIHN0b3AtY3NpemUxKTsKKysgICAgICBlbmRfbWF0Y2hfMiA9IHN0cmluZzIgKyBtY250OworKyAgICB9CisrICBpZiAobWNudCA8IDApCisrICAgIHsgLyogY291bnRfbWJzX2xlbmd0aCByZXR1cm4gZXJyb3IuICAqLworKyAgICAgIEZSRUVfVkFSSUFCTEVTICgpOworKyAgICAgIHJldHVybiAtMTsKKysgICAgfQorKyNlbHNlCisrICBpZiAoc3RvcCA8PSBzaXplMSkKKysgICAgeworKyAgICAgIGVuZF9tYXRjaF8xID0gc3RyaW5nMSArIHN0b3A7CisrICAgICAgZW5kX21hdGNoXzIgPSBzdHJpbmcyOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBlbmRfbWF0Y2hfMSA9IGVuZDE7CisrICAgICAgZW5kX21hdGNoXzIgPSBzdHJpbmcyICsgc3RvcCAtIHNpemUxOworKyAgICB9CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAvKiBgcCcgc2NhbnMgdGhyb3VnaCB0aGUgcGF0dGVybiBhcyBgZCcgc2NhbnMgdGhyb3VnaCB0aGUgZGF0YS4KKysgICAgIGBkZW5kJyBpcyB0aGUgZW5kIG9mIHRoZSBpbnB1dCBzdHJpbmcgdGhhdCBgZCcgcG9pbnRzIHdpdGhpbi4gIGBkJworKyAgICAgaXMgYWR2YW5jZWQgaW50byB0aGUgZm9sbG93aW5nIGlucHV0IHN0cmluZyB3aGVuZXZlciBuZWNlc3NhcnksIGJ1dAorKyAgICAgdGhpcyBoYXBwZW5zIGJlZm9yZSBmZXRjaGluZzsgdGhlcmVmb3JlLCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorKyAgICAgbG9vcCwgYGQnIGNhbiBiZSBwb2ludGluZyBhdCB0aGUgZW5kIG9mIGEgc3RyaW5nLCBidXQgaXQgY2Fubm90CisrICAgICBlcXVhbCBgc3RyaW5nMicuICAqLworKyNpZmRlZiBXQ0hBUgorKyAgaWYgKHNpemUxID4gMCAmJiBwb3MgPD0gY3NpemUxKQorKyAgICB7CisrICAgICAgbWNudCA9IGNvdW50X21ic19sZW5ndGgobWJzX29mZnNldDEsIHBvcyk7CisrICAgICAgZCA9IHN0cmluZzEgKyBtY250OworKyAgICAgIGRlbmQgPSBlbmRfbWF0Y2hfMTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgbWNudCA9IGNvdW50X21ic19sZW5ndGgobWJzX29mZnNldDIsIHBvcy1jc2l6ZTEpOworKyAgICAgIGQgPSBzdHJpbmcyICsgbWNudDsKKysgICAgICBkZW5kID0gZW5kX21hdGNoXzI7CisrICAgIH0KKysKKysgIGlmIChtY250IDwgMCkKKysgICAgeyAvKiBjb3VudF9tYnNfbGVuZ3RoIHJldHVybiBlcnJvci4gICovCisrICAgICAgRlJFRV9WQVJJQUJMRVMgKCk7CisrICAgICAgcmV0dXJuIC0xOworKyAgICB9CisrI2Vsc2UKKysgIGlmIChzaXplMSA+IDAgJiYgcG9zIDw9IHNpemUxKQorKyAgICB7CisrICAgICAgZCA9IHN0cmluZzEgKyBwb3M7CisrICAgICAgZGVuZCA9IGVuZF9tYXRjaF8xOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBkID0gc3RyaW5nMiArIHBvcyAtIHNpemUxOworKyAgICAgIGRlbmQgPSBlbmRfbWF0Y2hfMjsKKysgICAgfQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgREVCVUdfUFJJTlQxICgiVGhlIGNvbXBpbGVkIHBhdHRlcm4gaXM6XG4iKTsKKysgIERFQlVHX1BSSU5UX0NPTVBJTEVEX1BBVFRFUk4gKGJ1ZnAsIHAsIHBlbmQpOworKyAgREVCVUdfUFJJTlQxICgiVGhlIHN0cmluZyB0byBtYXRjaCBpczogYCIpOworKyAgREVCVUdfUFJJTlRfRE9VQkxFX1NUUklORyAoZCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyKTsKKysgIERFQlVHX1BSSU5UMSAoIidcbiIpOworKworKyAgLyogVGhpcyBsb29wcyBvdmVyIHBhdHRlcm4gY29tbWFuZHMuICBJdCBleGl0cyBieSByZXR1cm5pbmcgZnJvbSB0aGUKKysgICAgIGZ1bmN0aW9uIGlmIHRoZSBtYXRjaCBpcyBjb21wbGV0ZSwgb3IgaXQgZHJvcHMgdGhyb3VnaCBpZiB0aGUgbWF0Y2gKKysgICAgIGZhaWxzIGF0IHRoaXMgc3RhcnRpbmcgcG9pbnQgaW4gdGhlIGlucHV0IGRhdGEuICAqLworKyAgZm9yICg7OykKKysgICAgeworKyNpZmRlZiBfTElCQworKyAgICAgIERFQlVHX1BSSU5UMiAoIlxuJXA6ICIsIHApOworKyNlbHNlCisrICAgICAgREVCVUdfUFJJTlQyICgiXG4weCV4OiAiLCBwKTsKKysjZW5kaWYKKysKKysgICAgICBpZiAocCA9PSBwZW5kKQorKwl7IC8qIEVuZCBvZiBwYXR0ZXJuIG1lYW5zIHdlIG1pZ2h0IGhhdmUgc3VjY2VlZGVkLiAgKi8KKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiZW5kIG9mIHBhdHRlcm4gLi4uICIpOworKworKwkgIC8qIElmIHdlIGhhdmVuJ3QgbWF0Y2hlZCB0aGUgZW50aXJlIHN0cmluZywgYW5kIHdlIHdhbnQgdGhlCisrICAgICAgICAgICAgIGxvbmdlc3QgbWF0Y2gsIHRyeSBiYWNrdHJhY2tpbmcuICAqLworKyAgICAgICAgICBpZiAoZCAhPSBlbmRfbWF0Y2hfMikKKysJICAgIHsKKysJICAgICAgLyogMSBpZiB0aGlzIG1hdGNoIGVuZHMgaW4gdGhlIHNhbWUgc3RyaW5nIChzdHJpbmcxIG9yIHN0cmluZzIpCisrCQkgYXMgdGhlIGJlc3QgcHJldmlvdXMgbWF0Y2guICAqLworKwkgICAgICBib29sZWFuIHNhbWVfc3RyX3AgPSAoRklSU1RfU1RSSU5HX1AgKG1hdGNoX2VuZCkKKysJCQkJICAgID09IE1BVENISU5HX0lOX0ZJUlNUX1NUUklORyk7CisrCSAgICAgIC8qIDEgaWYgdGhpcyBtYXRjaCBpcyB0aGUgYmVzdCBzZWVuIHNvIGZhci4gICovCisrCSAgICAgIGJvb2xlYW4gYmVzdF9tYXRjaF9wOworKworKwkgICAgICAvKiBBSVggY29tcGlsZXIgZ290IGNvbmZ1c2VkIHdoZW4gdGhpcyB3YXMgY29tYmluZWQKKysJCSB3aXRoIHRoZSBwcmV2aW91cyBkZWNsYXJhdGlvbi4gICovCisrCSAgICAgIGlmIChzYW1lX3N0cl9wKQorKwkJYmVzdF9tYXRjaF9wID0gZCA+IG1hdGNoX2VuZDsKKysJICAgICAgZWxzZQorKwkJYmVzdF9tYXRjaF9wID0gIU1BVENISU5HX0lOX0ZJUlNUX1NUUklORzsKKysKKysgICAgICAgICAgICAgIERFQlVHX1BSSU5UMSAoImJhY2t0cmFja2luZy5cbiIpOworKworKyAgICAgICAgICAgICAgaWYgKCFGQUlMX1NUQUNLX0VNUFRZICgpKQorKyAgICAgICAgICAgICAgICB7IC8qIE1vcmUgZmFpbHVyZSBwb2ludHMgdG8gdHJ5LiAgKi8KKysKKysgICAgICAgICAgICAgICAgICAvKiBJZiBleGNlZWRzIGJlc3QgbWF0Y2ggc28gZmFyLCBzYXZlIGl0LiAgKi8KKysgICAgICAgICAgICAgICAgICBpZiAoIWJlc3RfcmVnc19zZXQgfHwgYmVzdF9tYXRjaF9wKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICBiZXN0X3JlZ3Nfc2V0ID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hfZW5kID0gZDsKKysKKysgICAgICAgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQxICgiXG5TQVZJTkcgbWF0Y2ggYXMgYmVzdCBzbyBmYXIuXG4iKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgZm9yIChtY250ID0gMTsgKHVuc2lnbmVkKSBtY250IDwgbnVtX3JlZ3M7IG1jbnQrKykKKysgICAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0X3JlZ3N0YXJ0W21jbnRdID0gcmVnc3RhcnRbbWNudF07CisrICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0X3JlZ2VuZFttY250XSA9IHJlZ2VuZFttY250XTsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAvKiBJZiBubyBmYWlsdXJlIHBvaW50cywgZG9uJ3QgcmVzdG9yZSBnYXJiYWdlLiAgQW5kIGlmCisrICAgICAgICAgICAgICAgICBsYXN0IG1hdGNoIGlzIHJlYWwgYmVzdCBtYXRjaCwgZG9uJ3QgcmVzdG9yZSBzZWNvbmQKKysgICAgICAgICAgICAgICAgIGJlc3Qgb25lLiAqLworKyAgICAgICAgICAgICAgZWxzZSBpZiAoYmVzdF9yZWdzX3NldCAmJiAhYmVzdF9tYXRjaF9wKQorKyAgICAgICAgICAgICAgICB7CisrICAJICAgICAgICByZXN0b3JlX2Jlc3RfcmVnczoKKysgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGJlc3QgbWF0Y2guICBJdCBtYXkgaGFwcGVuIHRoYXQgYGRlbmQgPT0KKysgICAgICAgICAgICAgICAgICAgICBlbmRfbWF0Y2hfMScgd2hpbGUgdGhlIHJlc3RvcmVkIGQgaXMgaW4gc3RyaW5nMi4KKysgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIHBhdHRlcm4gYHguKnkuKnonIGFnYWluc3QgdGhlCisrICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncyBgeC0nIGFuZCBgeS16LScsIGlmIHRoZSB0d28gc3RyaW5ncyBhcmUKKysgICAgICAgICAgICAgICAgICAgICBub3QgY29uc2VjdXRpdmUgaW4gbWVtb3J5LiAgKi8KKysgICAgICAgICAgICAgICAgICBERUJVR19QUklOVDEgKCJSZXN0b3JpbmcgYmVzdCByZWdpc3RlcnMuXG4iKTsKKysKKysgICAgICAgICAgICAgICAgICBkID0gbWF0Y2hfZW5kOworKyAgICAgICAgICAgICAgICAgIGRlbmQgPSAoKGQgPj0gc3RyaW5nMSAmJiBkIDw9IGVuZDEpCisrCQkgICAgICAgICAgID8gZW5kX21hdGNoXzEgOiBlbmRfbWF0Y2hfMik7CisrCisrCQkgIGZvciAobWNudCA9IDE7ICh1bnNpZ25lZCkgbWNudCA8IG51bV9yZWdzOyBtY250KyspCisrCQkgICAgeworKwkJICAgICAgcmVnc3RhcnRbbWNudF0gPSBiZXN0X3JlZ3N0YXJ0W21jbnRdOworKwkJICAgICAgcmVnZW5kW21jbnRdID0gYmVzdF9yZWdlbmRbbWNudF07CisrCQkgICAgfQorKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfSAvKiBkICE9IGVuZF9tYXRjaF8yICovCisrCisrCXN1Y2NlZWRfbGFiZWw6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkFjY2VwdGluZyBtYXRjaC5cbiIpOworKyAgICAgICAgICAvKiBJZiBjYWxsZXIgd2FudHMgcmVnaXN0ZXIgY29udGVudHMgZGF0YSBiYWNrLCBkbyBpdC4gICovCisrICAgICAgICAgIGlmIChyZWdzICYmICFidWZwLT5ub19zdWIpCisrCSAgICB7CisrCSAgICAgIC8qIEhhdmUgdGhlIHJlZ2lzdGVyIGRhdGEgYXJyYXlzIGJlZW4gYWxsb2NhdGVkPyAgKi8KKysgICAgICAgICAgICAgIGlmIChidWZwLT5yZWdzX2FsbG9jYXRlZCA9PSBSRUdTX1VOQUxMT0NBVEVEKQorKyAgICAgICAgICAgICAgICB7IC8qIE5vLiAgU28gYWxsb2NhdGUgdGhlbSB3aXRoIG1hbGxvYy4gIFdlIG5lZWQgb25lCisrICAgICAgICAgICAgICAgICAgICAgZXh0cmEgZWxlbWVudCBiZXlvbmQgYG51bV9yZWdzJyBmb3IgdGhlIGAtMScgbWFya2VyCisrICAgICAgICAgICAgICAgICAgICAgR05VIGNvZGUgdXNlcy4gICovCisrICAgICAgICAgICAgICAgICAgcmVncy0+bnVtX3JlZ3MgPSBNQVggKFJFX05SRUdTLCBudW1fcmVncyArIDEpOworKyAgICAgICAgICAgICAgICAgIHJlZ3MtPnN0YXJ0ID0gVEFMTE9DIChyZWdzLT5udW1fcmVncywgcmVnb2ZmX3QpOworKyAgICAgICAgICAgICAgICAgIHJlZ3MtPmVuZCA9IFRBTExPQyAocmVncy0+bnVtX3JlZ3MsIHJlZ29mZl90KTsKKysgICAgICAgICAgICAgICAgICBpZiAocmVncy0+c3RhcnQgPT0gTlVMTCB8fCByZWdzLT5lbmQgPT0gTlVMTCkKKysJCSAgICB7CisrCQkgICAgICBGUkVFX1ZBUklBQkxFUyAoKTsKKysJCSAgICAgIHJldHVybiAtMjsKKysJCSAgICB9CisrICAgICAgICAgICAgICAgICAgYnVmcC0+cmVnc19hbGxvY2F0ZWQgPSBSRUdTX1JFQUxMT0NBVEU7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgIGVsc2UgaWYgKGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID09IFJFR1NfUkVBTExPQ0FURSkKKysgICAgICAgICAgICAgICAgeyAvKiBZZXMuICBJZiB3ZSBuZWVkIG1vcmUgZWxlbWVudHMgdGhhbiB3ZXJlIGFscmVhZHkKKysgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZWQsIHJlYWxsb2NhdGUgdGhlbS4gIElmIHdlIG5lZWQgZmV3ZXIsIGp1c3QKKysgICAgICAgICAgICAgICAgICAgICBsZWF2ZSBpdCBhbG9uZS4gICovCisrICAgICAgICAgICAgICAgICAgaWYgKHJlZ3MtPm51bV9yZWdzIDwgbnVtX3JlZ3MgKyAxKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICByZWdzLT5udW1fcmVncyA9IG51bV9yZWdzICsgMTsKKysgICAgICAgICAgICAgICAgICAgICAgUkVUQUxMT0MgKHJlZ3MtPnN0YXJ0LCByZWdzLT5udW1fcmVncywgcmVnb2ZmX3QpOworKyAgICAgICAgICAgICAgICAgICAgICBSRVRBTExPQyAocmVncy0+ZW5kLCByZWdzLT5udW1fcmVncywgcmVnb2ZmX3QpOworKyAgICAgICAgICAgICAgICAgICAgICBpZiAocmVncy0+c3RhcnQgPT0gTlVMTCB8fCByZWdzLT5lbmQgPT0gTlVMTCkKKysJCQl7CisrCQkJICBGUkVFX1ZBUklBQkxFUyAoKTsKKysJCQkgIHJldHVybiAtMjsKKysJCQl9CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgIGVsc2UKKysJCXsKKysJCSAgLyogVGhlc2UgYnJhY2VzIGZlbmQgb2ZmIGEgImVtcHR5IGJvZHkgaW4gYW4gZWxzZS1zdGF0ZW1lbnQiCisrCQkgICAgIHdhcm5pbmcgdW5kZXIgR0NDIHdoZW4gYXNzZXJ0IGV4cGFuZHMgdG8gbm90aGluZy4gICovCisrCQkgIGFzc2VydCAoYnVmcC0+cmVnc19hbGxvY2F0ZWQgPT0gUkVHU19GSVhFRCk7CisrCQl9CisrCisrICAgICAgICAgICAgICAvKiBDb252ZXJ0IHRoZSBwb2ludGVyIGRhdGEgaW4gYHJlZ3N0YXJ0JyBhbmQgYHJlZ2VuZCcgdG8KKysgICAgICAgICAgICAgICAgIGluZGljZXMuICBSZWdpc3RlciB6ZXJvIGhhcyB0byBiZSBzZXQgZGlmZmVyZW50bHksCisrICAgICAgICAgICAgICAgICBzaW5jZSB3ZSBoYXZlbid0IGtlcHQgdHJhY2sgb2YgYW55IGluZm8gZm9yIGl0LiAgKi8KKysgICAgICAgICAgICAgIGlmIChyZWdzLT5udW1fcmVncyA+IDApCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICByZWdzLT5zdGFydFswXSA9IHBvczsKKysjaWZkZWYgV0NIQVIKKysJCSAgaWYgKE1BVENISU5HX0lOX0ZJUlNUX1NUUklORykKKysJCSAgICByZWdzLT5lbmRbMF0gPSBtYnNfb2Zmc2V0MSAhPSBOVUxMID8KKysJCQkJCW1ic19vZmZzZXQxW2Qtc3RyaW5nMV0gOiAwOworKwkJICBlbHNlCisrCQkgICAgcmVncy0+ZW5kWzBdID0gY3NpemUxICsgKG1ic19vZmZzZXQyICE9IE5VTEwgPworKwkJCQkJICAgICBtYnNfb2Zmc2V0MltkLXN0cmluZzJdIDogMCk7CisrI2Vsc2UKKysgICAgICAgICAgICAgICAgICByZWdzLT5lbmRbMF0gPSAoTUFUQ0hJTkdfSU5fRklSU1RfU1RSSU5HCisrCQkJCSAgPyAoKHJlZ29mZl90KSAoZCAtIHN0cmluZzEpKQorKwkJCSAgICAgICAgICA6ICgocmVnb2ZmX3QpIChkIC0gc3RyaW5nMiArIHNpemUxKSkpOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAvKiBHbyB0aHJvdWdoIHRoZSBmaXJzdCBgbWluIChudW1fcmVncywgcmVncy0+bnVtX3JlZ3MpJworKyAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzLCBzaW5jZSB0aGF0IGlzIGFsbCB3ZSBpbml0aWFsaXplZC4gICovCisrCSAgICAgIGZvciAobWNudCA9IDE7ICh1bnNpZ25lZCkgbWNudCA8IE1JTiAobnVtX3JlZ3MsIHJlZ3MtPm51bV9yZWdzKTsKKysJCSAgIG1jbnQrKykKKysJCXsKKysgICAgICAgICAgICAgICAgICBpZiAoUkVHX1VOU0VUIChyZWdzdGFydFttY250XSkgfHwgUkVHX1VOU0VUIChyZWdlbmRbbWNudF0pKQorKyAgICAgICAgICAgICAgICAgICAgcmVncy0+c3RhcnRbbWNudF0gPSByZWdzLT5lbmRbbWNudF0gPSAtMTsKKysgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICB7CisrCQkgICAgICByZWdzLT5zdGFydFttY250XQorKwkJCT0gKHJlZ29mZl90KSBQT0lOVEVSX1RPX09GRlNFVCAocmVnc3RhcnRbbWNudF0pOworKyAgICAgICAgICAgICAgICAgICAgICByZWdzLT5lbmRbbWNudF0KKysJCQk9IChyZWdvZmZfdCkgUE9JTlRFUl9UT19PRkZTRVQgKHJlZ2VuZFttY250XSk7CisrICAgICAgICAgICAgICAgICAgICB9CisrCQl9CisrCisrICAgICAgICAgICAgICAvKiBJZiB0aGUgcmVncyBzdHJ1Y3R1cmUgd2UgcmV0dXJuIGhhcyBtb3JlIGVsZW1lbnRzIHRoYW4KKysgICAgICAgICAgICAgICAgIHdlcmUgaW4gdGhlIHBhdHRlcm4sIHNldCB0aGUgZXh0cmEgZWxlbWVudHMgdG8gLTEuICBJZgorKyAgICAgICAgICAgICAgICAgd2UgKHJlKWFsbG9jYXRlZCB0aGUgcmVnaXN0ZXJzLCB0aGlzIGlzIHRoZSBjYXNlLAorKyAgICAgICAgICAgICAgICAgYmVjYXVzZSB3ZSBhbHdheXMgYWxsb2NhdGUgZW5vdWdoIHRvIGhhdmUgYXQgbGVhc3Qgb25lCisrICAgICAgICAgICAgICAgICAtMSBhdCB0aGUgZW5kLiAgKi8KKysgICAgICAgICAgICAgIGZvciAobWNudCA9IG51bV9yZWdzOyAodW5zaWduZWQpIG1jbnQgPCByZWdzLT5udW1fcmVnczsgbWNudCsrKQorKyAgICAgICAgICAgICAgICByZWdzLT5zdGFydFttY250XSA9IHJlZ3MtPmVuZFttY250XSA9IC0xOworKwkgICAgfSAvKiByZWdzICYmICFidWZwLT5ub19zdWIgKi8KKysKKysgICAgICAgICAgREVCVUdfUFJJTlQ0ICgiJXUgZmFpbHVyZSBwb2ludHMgcHVzaGVkLCAldSBwb3BwZWQgKCV1IHJlbWFpbikuXG4iLAorKyAgICAgICAgICAgICAgICAgICAgICAgIG5mYWlsdXJlX3BvaW50c19wdXNoZWQsIG5mYWlsdXJlX3BvaW50c19wb3BwZWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgbmZhaWx1cmVfcG9pbnRzX3B1c2hlZCAtIG5mYWlsdXJlX3BvaW50c19wb3BwZWQpOworKyAgICAgICAgICBERUJVR19QUklOVDIgKCIldSByZWdpc3RlcnMgcHVzaGVkLlxuIiwgbnVtX3JlZ3NfcHVzaGVkKTsKKysKKysjaWZkZWYgV0NIQVIKKysJICBpZiAoTUFUQ0hJTkdfSU5fRklSU1RfU1RSSU5HKQorKwkgICAgbWNudCA9IG1ic19vZmZzZXQxICE9IE5VTEwgPyBtYnNfb2Zmc2V0MVtkLXN0cmluZzFdIDogMDsKKysJICBlbHNlCisrCSAgICBtY250ID0gKG1ic19vZmZzZXQyICE9IE5VTEwgPyBtYnNfb2Zmc2V0MltkLXN0cmluZzJdIDogMCkgKworKwkJCWNzaXplMTsKKysgICAgICAgICAgbWNudCAtPSBwb3M7CisrI2Vsc2UKKysgICAgICAgICAgbWNudCA9IGQgLSBwb3MgLSAoTUFUQ0hJTkdfSU5fRklSU1RfU1RSSU5HCisrCQkJICAgID8gc3RyaW5nMQorKwkJCSAgICA6IHN0cmluZzIgLSBzaXplMSk7CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIlJldHVybmluZyAlZCBmcm9tIHJlX21hdGNoXzIuXG4iLCBtY250KTsKKysKKysgICAgICAgICAgRlJFRV9WQVJJQUJMRVMgKCk7CisrICAgICAgICAgIHJldHVybiBtY250OworKyAgICAgICAgfQorKworKyAgICAgIC8qIE90aGVyd2lzZSBtYXRjaCBuZXh0IHBhdHRlcm4gY29tbWFuZC4gICovCisrICAgICAgc3dpdGNoIChTV0lUQ0hfRU5VTV9DQVNUICgocmVfb3Bjb2RlX3QpICpwKyspKQorKwl7CisrICAgICAgICAvKiBJZ25vcmUgdGhlc2UuICBVc2VkIHRvIGlnbm9yZSB0aGUgbiBvZiBzdWNjZWVkX24ncyB3aGljaAorKyAgICAgICAgICAgY3VycmVudGx5IGhhdmUgbiA9PSAwLiAgKi8KKysgICAgICAgIGNhc2Ugbm9fb3A6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBub19vcC5cbiIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBzdWNjZWVkOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgc3VjY2VlZC5cbiIpOworKwkgIGdvdG8gc3VjY2VlZF9sYWJlbDsKKysKKysgICAgICAgIC8qIE1hdGNoIHRoZSBuZXh0IG4gcGF0dGVybiBjaGFyYWN0ZXJzIGV4YWN0bHkuICBUaGUgZm9sbG93aW5nCisrICAgICAgICAgICBieXRlIGluIHRoZSBwYXR0ZXJuIGRlZmluZXMgbiwgYW5kIHRoZSBuIGJ5dGVzIGFmdGVyIHRoYXQKKysgICAgICAgICAgIGFyZSB0aGUgY2hhcmFjdGVycyB0byBtYXRjaC4gICovCisrCWNhc2UgZXhhY3RuOgorKyNpZmRlZiBNQlNfU1VQUE9SVAorKwljYXNlIGV4YWN0bl9iaW46CisrI2VuZGlmCisrCSAgbWNudCA9ICpwKys7CisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIkVYRUNVVElORyBleGFjdG4gJWQuXG4iLCBtY250KTsKKysKKysgICAgICAgICAgLyogVGhpcyBpcyB3cml0dGVuIG91dCBhcyBhbiBpZi1lbHNlIHNvIHdlIGRvbid0IHdhc3RlIHRpbWUKKysgICAgICAgICAgICAgdGVzdGluZyBgdHJhbnNsYXRlJyBpbnNpZGUgdGhlIGxvb3AuICAqLworKyAgICAgICAgICBpZiAodHJhbnNsYXRlKQorKwkgICAgeworKwkgICAgICBkbworKwkJeworKwkJICBQUkVGRVRDSCAoKTsKKysjaWZkZWYgV0NIQVIKKysJCSAgaWYgKCpkIDw9IDB4ZmYpCisrCQkgICAgeworKwkJICAgICAgaWYgKChVQ0hBUl9UKSB0cmFuc2xhdGVbKHVuc2lnbmVkIGNoYXIpICpkKytdCisrCQkJICAhPSAoVUNIQVJfVCkgKnArKykKKysJCQlnb3RvIGZhaWw7CisrCQkgICAgfQorKwkJICBlbHNlCisrCQkgICAgeworKwkJICAgICAgaWYgKCpkKysgIT0gKENIQVJfVCkgKnArKykKKysJCQlnb3RvIGZhaWw7CisrCQkgICAgfQorKyNlbHNlCisrCQkgIGlmICgoVUNIQVJfVCkgdHJhbnNsYXRlWyh1bnNpZ25lZCBjaGFyKSAqZCsrXQorKwkJICAgICAgIT0gKFVDSEFSX1QpICpwKyspCisrICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrI2VuZGlmIC8qIFdDSEFSICovCisrCQl9CisrCSAgICAgIHdoaWxlICgtLW1jbnQpOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgZG8KKysJCXsKKysJCSAgUFJFRkVUQ0ggKCk7CisrCQkgIGlmICgqZCsrICE9IChDSEFSX1QpICpwKyspIGdvdG8gZmFpbDsKKysJCX0KKysJICAgICAgd2hpbGUgKC0tbWNudCk7CisrCSAgICB9CisrCSAgU0VUX1JFR1NfTUFUQ0hFRCAoKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICAvKiBNYXRjaCBhbnkgY2hhcmFjdGVyIGV4Y2VwdCBwb3NzaWJseSBhIG5ld2xpbmUgb3IgYSBudWxsLiAgKi8KKysJY2FzZSBhbnljaGFyOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgYW55Y2hhci5cbiIpOworKworKyAgICAgICAgICBQUkVGRVRDSCAoKTsKKysKKysgICAgICAgICAgaWYgKCghKGJ1ZnAtPnN5bnRheCAmIFJFX0RPVF9ORVdMSU5FKSAmJiBUUkFOU0xBVEUgKCpkKSA9PSAnXG4nKQorKyAgICAgICAgICAgICAgfHwgKGJ1ZnAtPnN5bnRheCAmIFJFX0RPVF9OT1RfTlVMTCAmJiBUUkFOU0xBVEUgKCpkKSA9PSAnXDAwMCcpKQorKwkgICAgZ290byBmYWlsOworKworKyAgICAgICAgICBTRVRfUkVHU19NQVRDSEVEICgpOworKyAgICAgICAgICBERUJVR19QUklOVDIgKCIgIE1hdGNoZWQgYCVsZCcuXG4iLCAobG9uZyBpbnQpICpkKTsKKysgICAgICAgICAgZCsrOworKwkgIGJyZWFrOworKworKworKwljYXNlIGNoYXJzZXQ6CisrCWNhc2UgY2hhcnNldF9ub3Q6CisrCSAgeworKwkgICAgcmVnaXN0ZXIgVUNIQVJfVCBjOworKyNpZmRlZiBXQ0hBUgorKwkgICAgdW5zaWduZWQgaW50IGksIGNoYXJfY2xhc3NfbGVuZ3RoLCBjb2xsX3N5bWJvbF9sZW5ndGgsCisrICAgICAgICAgICAgICBlcXVpdl9jbGFzc19sZW5ndGgsIHJhbmdlc19sZW5ndGgsIGNoYXJzX2xlbmd0aCwgbGVuZ3RoOworKwkgICAgQ0hBUl9UICp3b3JrcCwgKndvcmtwMiwgKmNoYXJzZXRfdG9wOworKyNkZWZpbmUgV09SS19CVUZGRVJfU0laRSAxMjgKKysgICAgICAgICAgICBDSEFSX1Qgc3RyX2J1ZltXT1JLX0JVRkZFUl9TSVpFXTsKKysjIGlmZGVmIF9MSUJDCisrCSAgICB1aW50MzJfdCBucnVsZXM7CisrIyBlbmRpZiAvKiBfTElCQyAqLworKyNlbmRpZiAvKiBXQ0hBUiAqLworKwkgICAgYm9vbGVhbiBuZWdhdGUgPSAocmVfb3Bjb2RlX3QpICoocCAtIDEpID09IGNoYXJzZXRfbm90OworKworKyAgICAgICAgICAgIERFQlVHX1BSSU5UMiAoIkVYRUNVVElORyBjaGFyc2V0JXMuXG4iLCBuZWdhdGUgPyAiX25vdCIgOiAiIik7CisrCSAgICBQUkVGRVRDSCAoKTsKKysJICAgIGMgPSBUUkFOU0xBVEUgKCpkKTsgLyogVGhlIGNoYXJhY3RlciB0byBtYXRjaC4gICovCisrI2lmZGVmIFdDSEFSCisrIyBpZmRlZiBfTElCQworKwkgICAgbnJ1bGVzID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKysjIGVuZGlmIC8qIF9MSUJDICovCisrCSAgICBjaGFyc2V0X3RvcCA9IHAgLSAxOworKwkgICAgY2hhcl9jbGFzc19sZW5ndGggPSAqcCsrOworKwkgICAgY29sbF9zeW1ib2xfbGVuZ3RoID0gKnArKzsKKysJICAgIGVxdWl2X2NsYXNzX2xlbmd0aCA9ICpwKys7CisrCSAgICByYW5nZXNfbGVuZ3RoID0gKnArKzsKKysJICAgIGNoYXJzX2xlbmd0aCA9ICpwKys7CisrCSAgICAvKiBwIHBvaW50cyBjaGFyc2V0WzZdLCBzbyB0aGUgYWRkcmVzcyBvZiB0aGUgbmV4dCBpbnN0cnVjdGlvbgorKwkgICAgICAgKGNoYXJzZXRbbCttK24rMm8raytwJ10pIGVxdWFscyBwW2wrbStuKzIqbytwJ10sCisrCSAgICAgICB3aGVyZSBsPWxlbmd0aCBvZiBjaGFyX2NsYXNzZXMsIG09bGVuZ3RoIG9mIGNvbGxhdGluZ19zeW1ib2wsCisrCSAgICAgICBuPWVxdWl2YWxlbmNlX2NsYXNzLCBvPWxlbmd0aCBvZiBjaGFyX3JhbmdlLAorKwkgICAgICAgcCc9bGVuZ3RoIG9mIGNoYXJhY3Rlci4gICovCisrCSAgICB3b3JrcCA9IHA7CisrCSAgICAvKiBVcGRhdGUgcCB0byBpbmRpY2F0ZSB0aGUgbmV4dCBpbnN0cnVjdGlvbi4gICovCisrCSAgICBwICs9IGNoYXJfY2xhc3NfbGVuZ3RoICsgY29sbF9zeW1ib2xfbGVuZ3RoKyBlcXVpdl9jbGFzc19sZW5ndGggKworKyAgICAgICAgICAgICAgMipyYW5nZXNfbGVuZ3RoICsgY2hhcnNfbGVuZ3RoOworKworKyAgICAgICAgICAgIC8qIG1hdGNoIHdpdGggY2hhcl9jbGFzcz8gICovCisrCSAgICBmb3IgKGkgPSAwOyBpIDwgY2hhcl9jbGFzc19sZW5ndGggOyBpICs9IENIQVJfQ0xBU1NfU0laRSkKKysJICAgICAgeworKwkJd2N0eXBlX3Qgd2N0eXBlOworKwkJdWludHB0cl90IGFsaWduZWRwID0gKCh1aW50cHRyX3Qpd29ya3AKKysJCQkJICAgICAgKyBfX2FsaWdub2ZfXyh3Y3R5cGVfdCkgLSAxKQorKwkJICAJCSAgICAgICYgfih1aW50cHRyX3QpKF9fYWxpZ25vZl9fKHdjdHlwZV90KSAtIDEpOworKwkJd2N0eXBlID0gKigod2N0eXBlX3QqKWFsaWduZWRwKTsKKysJCXdvcmtwICs9IENIQVJfQ0xBU1NfU0laRTsKKysjIGlmZGVmIF9MSUJDCisrCQlpZiAoX19pc3djdHlwZSgod2ludF90KWMsIHdjdHlwZSkpCisrCQkgIGdvdG8gY2hhcl9zZXRfbWF0Y2hlZDsKKysjIGVsc2UKKysJCWlmIChpc3djdHlwZSgod2ludF90KWMsIHdjdHlwZSkpCisrCQkgIGdvdG8gY2hhcl9zZXRfbWF0Y2hlZDsKKysjIGVuZGlmCisrCSAgICAgIH0KKysKKysgICAgICAgICAgICAvKiBtYXRjaCB3aXRoIGNvbGxhdGluZ19zeW1ib2w/ICAqLworKyMgaWZkZWYgX0xJQkMKKysJICAgIGlmIChucnVsZXMgIT0gMCkKKysJICAgICAgeworKwkJY29uc3QgdW5zaWduZWQgY2hhciAqZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorKwkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CKTsKKysKKysJCWZvciAod29ya3AyID0gd29ya3AgKyBjb2xsX3N5bWJvbF9sZW5ndGggOyB3b3JrcCA8IHdvcmtwMiA7CisrCQkgICAgIHdvcmtwKyspCisrCQkgIHsKKysJCSAgICBpbnQzMl90ICp3ZXh0cmE7CisrCQkgICAgd2V4dHJhID0gKGludDMyX3QqKShleHRyYSArICp3b3JrcCsrKTsKKysJCSAgICBmb3IgKGkgPSAwOyBpIDwgKndleHRyYTsgKytpKQorKwkJICAgICAgaWYgKFRSQU5TTEFURShkW2ldKSAhPSB3ZXh0cmFbMSArIGldKQorKwkJCWJyZWFrOworKworKwkJICAgIGlmIChpID09ICp3ZXh0cmEpCisrCQkgICAgICB7CisrCQkJLyogVXBkYXRlIGQsIGhvd2V2ZXIgZCB3aWxsIGJlIGluY3JlbWVudGVkIGF0CisrCQkJICAgY2hhcl9zZXRfbWF0Y2hlZDosIHdlIGRlY3JlbWVudCBkIGhlcmUuICAqLworKwkJCWQgKz0gaSAtIDE7CisrCQkJZ290byBjaGFyX3NldF9tYXRjaGVkOworKwkJICAgICAgfQorKwkJICB9CisrCSAgICAgIH0KKysJICAgIGVsc2UgLyogKG5ydWxlcyA9PSAwKSAqLworKyMgZW5kaWYKKysJICAgICAgLyogSWYgd2UgY2FuJ3QgbG9vayB1cCBjb2xsYXRpb24gZGF0YSwgd2UgdXNlIHdjc2NvbGwKKysJCSBpbnN0ZWFkLiAgKi8KKysJICAgICAgeworKwkJZm9yICh3b3JrcDIgPSB3b3JrcCArIGNvbGxfc3ltYm9sX2xlbmd0aCA7IHdvcmtwIDwgd29ya3AyIDspCisrCQkgIHsKKysJCSAgICBjb25zdCBDSEFSX1QgKmJhY2t1cF9kID0gZCwgKmJhY2t1cF9kZW5kID0gZGVuZDsKKysjIGlmZGVmIF9MSUJDCisrCQkgICAgbGVuZ3RoID0gX193Y3NsZW4gKHdvcmtwKTsKKysjIGVsc2UKKysJCSAgICBsZW5ndGggPSB3Y3NsZW4gKHdvcmtwKTsKKysjIGVuZGlmCisrCisrCQkgICAgLyogSWYgd2NzY29sbCh0aGUgY29sbGF0aW5nIHN5bWJvbCwgd2hvbGUgc3RyaW5nKSA+IDAsCisrCQkgICAgICAgYW55IHN1YnN0cmluZyBvZiB0aGUgc3RyaW5nIG5ldmVyIG1hdGNoIHdpdGggdGhlCisrCQkgICAgICAgY29sbGF0aW5nIHN5bWJvbC4gICovCisrIyBpZmRlZiBfTElCQworKwkJICAgIGlmIChfX3djc2NvbGwgKHdvcmtwLCBkKSA+IDApCisrIyBlbHNlCisrCQkgICAgaWYgKHdjc2NvbGwgKHdvcmtwLCBkKSA+IDApCisrIyBlbmRpZgorKwkJICAgICAgeworKwkJCXdvcmtwICs9IGxlbmd0aCArIDE7CisrCQkJY29udGludWU7CisrCQkgICAgICB9CisrCisrCQkgICAgLyogRmlyc3QsIHdlIGNvbXBhcmUgdGhlIGNvbGxhdGluZyBzeW1ib2wgd2l0aAorKwkJICAgICAgIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZy4KKysJCSAgICAgICBJZiBpdCBkb24ndCBtYXRjaCwgd2UgYWRkIHRoZSBuZXh0IGNoYXJhY3RlciB0bworKwkJICAgICAgIHRoZSBjb21wYXJlIGJ1ZmZlciBpbiB0dXJuLiAgKi8KKysJCSAgICBmb3IgKGkgPSAwIDsgaSA8IFdPUktfQlVGRkVSX1NJWkUtMSA7IGkrKywgZCsrKQorKwkJICAgICAgeworKwkJCWludCBtYXRjaDsKKysJCQlpZiAoZCA9PSBkZW5kKQorKwkJCSAgeworKwkJCSAgICBpZiAoZGVuZCA9PSBlbmRfbWF0Y2hfMikKKysJCQkgICAgICBicmVhazsKKysJCQkgICAgZCA9IHN0cmluZzI7CisrCQkJICAgIGRlbmQgPSBlbmRfbWF0Y2hfMjsKKysJCQkgIH0KKysKKysJCQkvKiBhZGQgbmV4dCBjaGFyYWN0ZXIgdG8gdGhlIGNvbXBhcmUgYnVmZmVyLiAgKi8KKysJCQlzdHJfYnVmW2ldID0gVFJBTlNMQVRFKCpkKTsKKysJCQlzdHJfYnVmW2krMV0gPSAnXDAnOworKworKyMgaWZkZWYgX0xJQkMKKysJCQltYXRjaCA9IF9fd2NzY29sbCAod29ya3AsIHN0cl9idWYpOworKyMgZWxzZQorKwkJCW1hdGNoID0gd2NzY29sbCAod29ya3AsIHN0cl9idWYpOworKyMgZW5kaWYKKysJCQlpZiAobWF0Y2ggPT0gMCkKKysJCQkgIGdvdG8gY2hhcl9zZXRfbWF0Y2hlZDsKKysKKysJCQlpZiAobWF0Y2ggPCAwKQorKwkJCSAgLyogKHN0cl9idWYgPiB3b3JrcCkgaW5kaWNhdGUgKHN0cl9idWYgKyBYID4gd29ya3ApLAorKwkJCSAgICAgYmVjYXVzZSBmb3IgYWxsIFggKHN0cl9idWYgKyBYID4gc3RyX2J1ZikuCisrCQkJICAgICBTbyB3ZSBkb24ndCBuZWVkIGNvbnRpbnVlIHRoaXMgbG9vcC4gICovCisrCQkJICBicmVhazsKKysKKysJCQkvKiBPdGhlcndpc2Uoc3RyX2J1ZiA8IHdvcmtwKSwKKysJCQkgICAoc3RyX2J1ZituZXh0X2NoYXJhY3RlcikgbWF5IGVxdWFscyAod29ya3ApLgorKwkJCSAgIFNvIHdlIGNvbnRpbnVlIHRoaXMgbG9vcC4gICovCisrCQkgICAgICB9CisrCQkgICAgLyogbm90IG1hdGNoZWQgKi8KKysJCSAgICBkID0gYmFja3VwX2Q7CisrCQkgICAgZGVuZCA9IGJhY2t1cF9kZW5kOworKwkJICAgIHdvcmtwICs9IGxlbmd0aCArIDE7CisrCQkgIH0KKysgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAvKiBtYXRjaCB3aXRoIGVxdWl2YWxlbmNlX2NsYXNzPyAgKi8KKysjIGlmZGVmIF9MSUJDCisrCSAgICBpZiAobnJ1bGVzICE9IDApCisrCSAgICAgIHsKKysgICAgICAgICAgICAgICAgY29uc3QgQ0hBUl9UICpiYWNrdXBfZCA9IGQsICpiYWNrdXBfZGVuZCA9IGRlbmQ7CisrCQkvKiBUcnkgdG8gbWF0Y2ggdGhlIGVxdWl2YWxlbmNlIGNsYXNzIGFnYWluc3QKKysJCSAgIHRob3NlIGtub3duIHRvIHRoZSBjb2xsYXRlIGltcGxlbWVudGF0aW9uLiAgKi8KKysJCWNvbnN0IGludDMyX3QgKnRhYmxlOworKwkJY29uc3QgaW50MzJfdCAqd2VpZ2h0czsKKysJCWNvbnN0IGludDMyX3QgKmV4dHJhOworKwkJY29uc3QgaW50MzJfdCAqaW5kaXJlY3Q7CisrCQlpbnQzMl90IGlkeCwgaWR4MjsKKysJCXdpbnRfdCAqY3A7CisrCQlzaXplX3QgbGVuOworKworKwkJdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKQorKwkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfVEFCTEVXQyk7CisrCQl3ZWlnaHRzID0gKGNvbnN0IHdpbnRfdCAqKQorKwkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfV0VJR0hUV0MpOworKwkJZXh0cmEgPSAoY29uc3Qgd2ludF90ICopCisrCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9FWFRSQVdDKTsKKysJCWluZGlyZWN0ID0gKGNvbnN0IGludDMyX3QgKikKKysJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0lORElSRUNUV0MpOworKworKwkJLyogV3JpdGUgMSBjb2xsYXRpbmcgZWxlbWVudCB0byBzdHJfYnVmLCBhbmQKKysJCSAgIGdldCBpdHMgaW5kZXguICAqLworKwkJaWR4MiA9IDA7CisrCisrCQlmb3IgKGkgPSAwIDsgaWR4MiA9PSAwICYmIGkgPCBXT1JLX0JVRkZFUl9TSVpFIC0gMTsgaSsrKQorKwkJICB7CisrCQkgICAgY3AgPSAod2ludF90KilzdHJfYnVmOworKwkJICAgIGlmIChkID09IGRlbmQpCisrCQkgICAgICB7CisrCQkJaWYgKGRlbmQgPT0gZW5kX21hdGNoXzIpCisrCQkJICBicmVhazsKKysJCQlkID0gc3RyaW5nMjsKKysJCQlkZW5kID0gZW5kX21hdGNoXzI7CisrCQkgICAgICB9CisrCQkgICAgc3RyX2J1ZltpXSA9IFRSQU5TTEFURSgqKGQraSkpOworKwkJICAgIHN0cl9idWZbaSsxXSA9ICdcMCc7IC8qIHNlbnRpbmVsICovCisrCQkgICAgaWR4MiA9IEZJTkRJRFggKHRhYmxlLCBpbmRpcmVjdCwgZXh0cmEsICZjcCwgMSk7CisrCQkgIH0KKysKKysJCS8qIFVwZGF0ZSBkLCBob3dldmVyIGQgd2lsbCBiZSBpbmNyZW1lbnRlZCBhdAorKwkJICAgY2hhcl9zZXRfbWF0Y2hlZDosIHdlIGRlY3JlbWVudCBkIGhlcmUuICAqLworKwkJZCA9IGJhY2t1cF9kICsgKCh3Y2hhcl90KiljcCAtICh3Y2hhcl90KilzdHJfYnVmIC0gMSk7CisrCQlpZiAoZCA+PSBkZW5kKQorKwkJICB7CisrCQkgICAgaWYgKGRlbmQgPT0gZW5kX21hdGNoXzIpCisrCQkJZCA9IGRlbmQ7CisrCQkgICAgZWxzZQorKwkJICAgICAgeworKwkJCWQgPSBzdHJpbmcyOworKwkJCWRlbmQgPSBlbmRfbWF0Y2hfMjsKKysJCSAgICAgIH0KKysJCSAgfQorKworKwkJbGVuID0gd2VpZ2h0c1tpZHgyXTsKKysKKysJCWZvciAod29ya3AyID0gd29ya3AgKyBlcXVpdl9jbGFzc19sZW5ndGggOyB3b3JrcCA8IHdvcmtwMiA7CisrCQkgICAgIHdvcmtwKyspCisrCQkgIHsKKysJCSAgICBpZHggPSAoaW50MzJfdCkqd29ya3A7CisrCQkgICAgLyogV2UgYWxyZWFkeSBjaGVja2VkIGlkeCAhPSAwIGluIHJlZ2V4X2NvbXBpbGUuICovCisrCisrCQkgICAgaWYgKGlkeDIgIT0gMCAmJiBsZW4gPT0gd2VpZ2h0c1tpZHhdKQorKwkJICAgICAgeworKwkJCWludCBjbnQgPSAwOworKwkJCXdoaWxlIChjbnQgPCBsZW4gJiYgKHdlaWdodHNbaWR4ICsgMSArIGNudF0KKysJCQkJCSAgICAgPT0gd2VpZ2h0c1tpZHgyICsgMSArIGNudF0pKQorKwkJCSAgKytjbnQ7CisrCisrCQkJaWYgKGNudCA9PSBsZW4pCisrCQkJICBnb3RvIGNoYXJfc2V0X21hdGNoZWQ7CisrCQkgICAgICB9CisrCQkgIH0KKysJCS8qIG5vdCBtYXRjaGVkICovCisrICAgICAgICAgICAgICAgIGQgPSBiYWNrdXBfZDsKKysgICAgICAgICAgICAgICAgZGVuZCA9IGJhY2t1cF9kZW5kOworKwkgICAgICB9CisrCSAgICBlbHNlIC8qIChucnVsZXMgPT0gMCkgKi8KKysjIGVuZGlmCisrCSAgICAgIC8qIElmIHdlIGNhbid0IGxvb2sgdXAgY29sbGF0aW9uIGRhdGEsIHdlIHVzZSB3Y3Njb2xsCisrCQkgaW5zdGVhZC4gICovCisrCSAgICAgIHsKKysJCWZvciAod29ya3AyID0gd29ya3AgKyBlcXVpdl9jbGFzc19sZW5ndGggOyB3b3JrcCA8IHdvcmtwMiA7KQorKwkJICB7CisrCQkgICAgY29uc3QgQ0hBUl9UICpiYWNrdXBfZCA9IGQsICpiYWNrdXBfZGVuZCA9IGRlbmQ7CisrIyBpZmRlZiBfTElCQworKwkJICAgIGxlbmd0aCA9IF9fd2NzbGVuICh3b3JrcCk7CisrIyBlbHNlCisrCQkgICAgbGVuZ3RoID0gd2NzbGVuICh3b3JrcCk7CisrIyBlbmRpZgorKworKwkJICAgIC8qIElmIHdjc2NvbGwodGhlIGNvbGxhdGluZyBzeW1ib2wsIHdob2xlIHN0cmluZykgPiAwLAorKwkJICAgICAgIGFueSBzdWJzdHJpbmcgb2YgdGhlIHN0cmluZyBuZXZlciBtYXRjaCB3aXRoIHRoZQorKwkJICAgICAgIGNvbGxhdGluZyBzeW1ib2wuICAqLworKyMgaWZkZWYgX0xJQkMKKysJCSAgICBpZiAoX193Y3Njb2xsICh3b3JrcCwgZCkgPiAwKQorKyMgZWxzZQorKwkJICAgIGlmICh3Y3Njb2xsICh3b3JrcCwgZCkgPiAwKQorKyMgZW5kaWYKKysJCSAgICAgIHsKKysJCQl3b3JrcCArPSBsZW5ndGggKyAxOworKwkJCWJyZWFrOworKwkJICAgICAgfQorKworKwkJICAgIC8qIEZpcnN0LCB3ZSBjb21wYXJlIHRoZSBlcXVpdmFsZW5jZSBjbGFzcyB3aXRoCisrCQkgICAgICAgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nLgorKwkJICAgICAgIElmIGl0IGRvbid0IG1hdGNoLCB3ZSBhZGQgdGhlIG5leHQgY2hhcmFjdGVyIHRvCisrCQkgICAgICAgdGhlIGNvbXBhcmUgYnVmZmVyIGluIHR1cm4uICAqLworKwkJICAgIGZvciAoaSA9IDAgOyBpIDwgV09SS19CVUZGRVJfU0laRSAtIDEgOyBpKyssIGQrKykKKysJCSAgICAgIHsKKysJCQlpbnQgbWF0Y2g7CisrCQkJaWYgKGQgPT0gZGVuZCkKKysJCQkgIHsKKysJCQkgICAgaWYgKGRlbmQgPT0gZW5kX21hdGNoXzIpCisrCQkJICAgICAgYnJlYWs7CisrCQkJICAgIGQgPSBzdHJpbmcyOworKwkJCSAgICBkZW5kID0gZW5kX21hdGNoXzI7CisrCQkJICB9CisrCisrCQkJLyogYWRkIG5leHQgY2hhcmFjdGVyIHRvIHRoZSBjb21wYXJlIGJ1ZmZlci4gICovCisrCQkJc3RyX2J1ZltpXSA9IFRSQU5TTEFURSgqZCk7CisrCQkJc3RyX2J1ZltpKzFdID0gJ1wwJzsKKysKKysjIGlmZGVmIF9MSUJDCisrCQkJbWF0Y2ggPSBfX3djc2NvbGwgKHdvcmtwLCBzdHJfYnVmKTsKKysjIGVsc2UKKysJCQltYXRjaCA9IHdjc2NvbGwgKHdvcmtwLCBzdHJfYnVmKTsKKysjIGVuZGlmCisrCisrCQkJaWYgKG1hdGNoID09IDApCisrCQkJICBnb3RvIGNoYXJfc2V0X21hdGNoZWQ7CisrCisrCQkJaWYgKG1hdGNoIDwgMCkKKysJCQkvKiAoc3RyX2J1ZiA+IHdvcmtwKSBpbmRpY2F0ZSAoc3RyX2J1ZiArIFggPiB3b3JrcCksCisrCQkJICAgYmVjYXVzZSBmb3IgYWxsIFggKHN0cl9idWYgKyBYID4gc3RyX2J1ZikuCisrCQkJICAgU28gd2UgZG9uJ3QgbmVlZCBjb250aW51ZSB0aGlzIGxvb3AuICAqLworKwkJCSAgYnJlYWs7CisrCisrCQkJLyogT3RoZXJ3aXNlKHN0cl9idWYgPCB3b3JrcCksCisrCQkJICAgKHN0cl9idWYrbmV4dF9jaGFyYWN0ZXIpIG1heSBlcXVhbHMgKHdvcmtwKS4KKysJCQkgICBTbyB3ZSBjb250aW51ZSB0aGlzIGxvb3AuICAqLworKwkJICAgICAgfQorKwkJICAgIC8qIG5vdCBtYXRjaGVkICovCisrCQkgICAgZCA9IGJhY2t1cF9kOworKwkJICAgIGRlbmQgPSBiYWNrdXBfZGVuZDsKKysJCSAgICB3b3JrcCArPSBsZW5ndGggKyAxOworKwkJICB9CisrCSAgICAgIH0KKysKKysgICAgICAgICAgICAvKiBtYXRjaCB3aXRoIGNoYXJfcmFuZ2U/ICAqLworKyMgaWZkZWYgX0xJQkMKKysJICAgIGlmIChucnVsZXMgIT0gMCkKKysJICAgICAgeworKwkJdWludDMyX3QgY29sbHNlcXZhbDsKKysJCWNvbnN0IGNoYXIgKmNvbGxzZXEgPSAoY29uc3QgY2hhciAqKQorKwkJICBfTkxfQ1VSUkVOVChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9DT0xMU0VRV0MpOworKworKwkJY29sbHNlcXZhbCA9IGNvbGxzZXFfdGFibGVfbG9va3VwIChjb2xsc2VxLCBjKTsKKysKKysJCWZvciAoOyB3b3JrcCA8IHAgLSBjaGFyc19sZW5ndGggOykKKysJCSAgeworKwkJICAgIHVpbnQzMl90IHN0YXJ0X3ZhbCwgZW5kX3ZhbDsKKysKKysJCSAgICAvKiBXZSBhbHJlYWR5IGNvbXB1dGUgdGhlIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZQorKwkJICAgICAgIG9mIHRoZSBjaGFyYWN0ZXJzIChvciBjb2xsYXRpbmcgc3ltYm9scykuICAqLworKwkJICAgIHN0YXJ0X3ZhbCA9ICh1aW50MzJfdCkgKndvcmtwKys7IC8qIHJhbmdlX3N0YXJ0ICovCisrCQkgICAgZW5kX3ZhbCA9ICh1aW50MzJfdCkgKndvcmtwKys7IC8qIHJhbmdlX2VuZCAqLworKworKwkJICAgIGlmIChzdGFydF92YWwgPD0gY29sbHNlcXZhbCAmJiBjb2xsc2VxdmFsIDw9IGVuZF92YWwpCisrCQkgICAgICBnb3RvIGNoYXJfc2V0X21hdGNoZWQ7CisrCQkgIH0KKysJICAgICAgfQorKwkgICAgZWxzZQorKyMgZW5kaWYKKysJICAgICAgeworKwkJLyogV2Ugc2V0IHJhbmdlX3N0YXJ0X2NoYXIgYXQgc3RyX2J1ZlswXSwgcmFuZ2VfZW5kX2NoYXIKKysJCSAgIGF0IHN0cl9idWZbNF0sIGFuZCBjb21wYXJlZCBjaGFyIGF0IHN0cl9idWZbMl0uICAqLworKwkJc3RyX2J1ZlsxXSA9IDA7CisrCQlzdHJfYnVmWzJdID0gYzsKKysJCXN0cl9idWZbM10gPSAwOworKwkJc3RyX2J1Zls1XSA9IDA7CisrCQlmb3IgKDsgd29ya3AgPCBwIC0gY2hhcnNfbGVuZ3RoIDspCisrCQkgIHsKKysJCSAgICB3Y2hhcl90ICpyYW5nZV9zdGFydF9jaGFyLCAqcmFuZ2VfZW5kX2NoYXI7CisrCisrCQkgICAgLyogbWF0Y2ggaWYgKHJhbmdlX3N0YXJ0X2NoYXIgPD0gYyA8PSByYW5nZV9lbmRfY2hhcikuICAqLworKworKwkJICAgIC8qIElmIHJhbmdlX3N0YXJ0KG9yIGVuZCkgPCAwLCB3ZSBhc3N1bWUgLXJhbmdlX3N0YXJ0KGVuZCkKKysJCSAgICAgICBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBjb2xsYXRpbmcgc3ltYm9sIHdoaWNoIGlzIHNwZWNpZmllZAorKwkJICAgICAgIGFzIHRoZSBjaGFyYWN0ZXIgb2YgdGhlIHJhbmdlIHN0YXJ0KGVuZCkuICAqLworKworKwkJICAgIC8qIHJhbmdlX3N0YXJ0ICovCisrCQkgICAgaWYgKCp3b3JrcCA8IDApCisrCQkgICAgICByYW5nZV9zdGFydF9jaGFyID0gY2hhcnNldF90b3AgLSAoKndvcmtwKyspOworKwkJICAgIGVsc2UKKysJCSAgICAgIHsKKysJCQlzdHJfYnVmWzBdID0gKndvcmtwKys7CisrCQkJcmFuZ2Vfc3RhcnRfY2hhciA9IHN0cl9idWY7CisrCQkgICAgICB9CisrCisrCQkgICAgLyogcmFuZ2VfZW5kICovCisrCQkgICAgaWYgKCp3b3JrcCA8IDApCisrCQkgICAgICByYW5nZV9lbmRfY2hhciA9IGNoYXJzZXRfdG9wIC0gKCp3b3JrcCsrKTsKKysJCSAgICBlbHNlCisrCQkgICAgICB7CisrCQkJc3RyX2J1Zls0XSA9ICp3b3JrcCsrOworKwkJCXJhbmdlX2VuZF9jaGFyID0gc3RyX2J1ZiArIDQ7CisrCQkgICAgICB9CisrCisrIyBpZmRlZiBfTElCQworKwkJICAgIGlmIChfX3djc2NvbGwgKHJhbmdlX3N0YXJ0X2NoYXIsIHN0cl9idWYrMikgPD0gMAorKwkJCSYmIF9fd2NzY29sbCAoc3RyX2J1ZisyLCByYW5nZV9lbmRfY2hhcikgPD0gMCkKKysjIGVsc2UKKysJCSAgICBpZiAod2NzY29sbCAocmFuZ2Vfc3RhcnRfY2hhciwgc3RyX2J1ZisyKSA8PSAwCisrCQkJJiYgd2NzY29sbCAoc3RyX2J1ZisyLCByYW5nZV9lbmRfY2hhcikgPD0gMCkKKysjIGVuZGlmCisrCQkgICAgICBnb3RvIGNoYXJfc2V0X21hdGNoZWQ7CisrCQkgIH0KKysJICAgICAgfQorKworKyAgICAgICAgICAgIC8qIG1hdGNoIHdpdGggY2hhcj8gICovCisrCSAgICBmb3IgKDsgd29ya3AgPCBwIDsgd29ya3ArKykKKysJICAgICAgaWYgKGMgPT0gKndvcmtwKQorKwkJZ290byBjaGFyX3NldF9tYXRjaGVkOworKworKwkgICAgbmVnYXRlID0gIW5lZ2F0ZTsKKysKKysJICBjaGFyX3NldF9tYXRjaGVkOgorKwkgICAgaWYgKG5lZ2F0ZSkgZ290byBmYWlsOworKyNlbHNlCisrICAgICAgICAgICAgLyogQ2FzdCB0byBgdW5zaWduZWQnIGluc3RlYWQgb2YgYHVuc2lnbmVkIGNoYXInIGluIGNhc2UgdGhlCisrICAgICAgICAgICAgICAgYml0IGxpc3QgaXMgYSBmdWxsIDMyIGJ5dGVzIGxvbmcuICAqLworKwkgICAgaWYgKGMgPCAodW5zaWduZWQpICgqcCAqIEJZVEVXSURUSCkKKysJCSYmIHBbMSArIGMgLyBCWVRFV0lEVEhdICYgKDEgPDwgKGMgJSBCWVRFV0lEVEgpKSkKKysJICAgICAgbmVnYXRlID0gIW5lZ2F0ZTsKKysKKysJICAgIHAgKz0gMSArICpwOworKworKwkgICAgaWYgKCFuZWdhdGUpIGdvdG8gZmFpbDsKKysjdW5kZWYgV09SS19CVUZGRVJfU0laRQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKwkgICAgU0VUX1JFR1NfTUFUQ0hFRCAoKTsKKysgICAgICAgICAgICBkKys7CisrCSAgICBicmVhazsKKysJICB9CisrCisrCisrICAgICAgICAvKiBUaGUgYmVnaW5uaW5nIG9mIGEgZ3JvdXAgaXMgcmVwcmVzZW50ZWQgYnkgc3RhcnRfbWVtb3J5LgorKyAgICAgICAgICAgVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHJlZ2lzdGVyIG51bWJlciBpbiB0aGUgbmV4dCBieXRlLCBhbmQgdGhlCisrICAgICAgICAgICBudW1iZXIgb2YgZ3JvdXBzIGlubmVyIHRvIHRoaXMgb25lIGluIHRoZSBuZXh0LiAgVGhlIHRleHQKKysgICAgICAgICAgIG1hdGNoZWQgd2l0aGluIHRoZSBncm91cCBpcyByZWNvcmRlZCAoaW4gdGhlIGludGVybmFsCisrICAgICAgICAgICByZWdpc3RlcnMgZGF0YSBzdHJ1Y3R1cmUpIHVuZGVyIHRoZSByZWdpc3RlciBudW1iZXIuICAqLworKyAgICAgICAgY2FzZSBzdGFydF9tZW1vcnk6CisrCSAgREVCVUdfUFJJTlQzICgiRVhFQ1VUSU5HIHN0YXJ0X21lbW9yeSAlbGQgKCVsZCk6XG4iLAorKwkJCShsb25nIGludCkgKnAsIChsb25nIGludCkgcFsxXSk7CisrCisrICAgICAgICAgIC8qIEZpbmQgb3V0IGlmIHRoaXMgZ3JvdXAgY2FuIG1hdGNoIHRoZSBlbXB0eSBzdHJpbmcuICAqLworKwkgIHAxID0gcDsJCS8qIFRvIHNlbmQgdG8gZ3JvdXBfbWF0Y2hfbnVsbF9zdHJpbmdfcC4gICovCisrCisrICAgICAgICAgIGlmIChSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bKnBdKSA9PSBNQVRDSF9OVUxMX1VOU0VUX1ZBTFVFKQorKyAgICAgICAgICAgIFJFR19NQVRDSF9OVUxMX1NUUklOR19QIChyZWdfaW5mb1sqcF0pCisrICAgICAgICAgICAgICA9IFBSRUZJWChncm91cF9tYXRjaF9udWxsX3N0cmluZ19wKSAoJnAxLCBwZW5kLCByZWdfaW5mbyk7CisrCisrICAgICAgICAgIC8qIFNhdmUgdGhlIHBvc2l0aW9uIGluIHRoZSBzdHJpbmcgd2hlcmUgd2Ugd2VyZSB0aGUgbGFzdCB0aW1lCisrICAgICAgICAgICAgIHdlIHdlcmUgYXQgdGhpcyBvcGVuLWdyb3VwIG9wZXJhdG9yIGluIGNhc2UgdGhlIGdyb3VwIGlzCisrICAgICAgICAgICAgIG9wZXJhdGVkIHVwb24gYnkgYSByZXBldGl0aW9uIG9wZXJhdG9yLCBlLmcuLCB3aXRoIGAoYSopKmInCisrICAgICAgICAgICAgIGFnYWluc3QgYGFiJzsgdGhlbiB3ZSB3YW50IHRvIGlnbm9yZSB3aGVyZSB3ZSBhcmUgbm93IGluCisrICAgICAgICAgICAgIHRoZSBzdHJpbmcgaW4gY2FzZSB0aGlzIGF0dGVtcHQgdG8gbWF0Y2ggZmFpbHMuICAqLworKyAgICAgICAgICBvbGRfcmVnc3RhcnRbKnBdID0gUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvWypwXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUkVHX1VOU0VUIChyZWdzdGFydFsqcF0pID8gZCA6IHJlZ3N0YXJ0WypwXQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZWdzdGFydFsqcF07CisrCSAgREVCVUdfUFJJTlQyICgiICBvbGRfcmVnc3RhcnQ6ICVkXG4iLAorKwkJCSBQT0lOVEVSX1RPX09GRlNFVCAob2xkX3JlZ3N0YXJ0WypwXSkpOworKworKyAgICAgICAgICByZWdzdGFydFsqcF0gPSBkOworKwkgIERFQlVHX1BSSU5UMiAoIiAgcmVnc3RhcnQ6ICVkXG4iLCBQT0lOVEVSX1RPX09GRlNFVCAocmVnc3RhcnRbKnBdKSk7CisrCisrICAgICAgICAgIElTX0FDVElWRSAocmVnX2luZm9bKnBdKSA9IDE7CisrICAgICAgICAgIE1BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1sqcF0pID0gMDsKKysKKysJICAvKiBDbGVhciB0aGlzIHdoZW5ldmVyIHdlIGNoYW5nZSB0aGUgcmVnaXN0ZXIgYWN0aXZpdHkgc3RhdHVzLiAgKi8KKysJICBzZXRfcmVnc19tYXRjaGVkX2RvbmUgPSAwOworKworKyAgICAgICAgICAvKiBUaGlzIGlzIHRoZSBuZXcgaGlnaGVzdCBhY3RpdmUgcmVnaXN0ZXIuICAqLworKyAgICAgICAgICBoaWdoZXN0X2FjdGl2ZV9yZWcgPSAqcDsKKysKKysgICAgICAgICAgLyogSWYgbm90aGluZyB3YXMgYWN0aXZlIGJlZm9yZSwgdGhpcyBpcyB0aGUgbmV3IGxvd2VzdCBhY3RpdmUKKysgICAgICAgICAgICAgcmVnaXN0ZXIuICAqLworKyAgICAgICAgICBpZiAobG93ZXN0X2FjdGl2ZV9yZWcgPT0gTk9fTE9XRVNUX0FDVElWRV9SRUcpCisrICAgICAgICAgICAgbG93ZXN0X2FjdGl2ZV9yZWcgPSAqcDsKKysKKysgICAgICAgICAgLyogTW92ZSBwYXN0IHRoZSByZWdpc3RlciBudW1iZXIgYW5kIGlubmVyIGdyb3VwIGNvdW50LiAgKi8KKysgICAgICAgICAgcCArPSAyOworKwkgIGp1c3RfcGFzdF9zdGFydF9tZW0gPSBwOworKworKyAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgIC8qIFRoZSBzdG9wX21lbW9yeSBvcGNvZGUgcmVwcmVzZW50cyB0aGUgZW5kIG9mIGEgZ3JvdXAuICBJdHMKKysgICAgICAgICAgIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgc3RhcnRfbWVtb3J5J3M6IHRoZSByZWdpc3RlcgorKyAgICAgICAgICAgbnVtYmVyLCBhbmQgdGhlIG51bWJlciBvZiBpbm5lciBncm91cHMuICAqLworKwljYXNlIHN0b3BfbWVtb3J5OgorKwkgIERFQlVHX1BSSU5UMyAoIkVYRUNVVElORyBzdG9wX21lbW9yeSAlbGQgKCVsZCk6XG4iLAorKwkJCShsb25nIGludCkgKnAsIChsb25nIGludCkgcFsxXSk7CisrCisrICAgICAgICAgIC8qIFdlIG5lZWQgdG8gc2F2ZSB0aGUgc3RyaW5nIHBvc2l0aW9uIHRoZSBsYXN0IHRpbWUgd2Ugd2VyZSBhdAorKyAgICAgICAgICAgICB0aGlzIGNsb3NlLWdyb3VwIG9wZXJhdG9yIGluIGNhc2UgdGhlIGdyb3VwIGlzIG9wZXJhdGVkCisrICAgICAgICAgICAgIHVwb24gYnkgYSByZXBldGl0aW9uIG9wZXJhdG9yLCBlLmcuLCB3aXRoIGAoKGEqKSooYiopKikqJworKyAgICAgICAgICAgICBhZ2FpbnN0IGBhYmEnOyB0aGVuIHdlIHdhbnQgdG8gaWdub3JlIHdoZXJlIHdlIGFyZSBub3cgaW4KKysgICAgICAgICAgICAgdGhlIHN0cmluZyBpbiBjYXNlIHRoaXMgYXR0ZW1wdCB0byBtYXRjaCBmYWlscy4gICovCisrICAgICAgICAgIG9sZF9yZWdlbmRbKnBdID0gUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvWypwXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFJFR19VTlNFVCAocmVnZW5kWypwXSkgPyBkIDogcmVnZW5kWypwXQorKwkJCSAgIDogcmVnZW5kWypwXTsKKysJICBERUJVR19QUklOVDIgKCIgICAgICBvbGRfcmVnZW5kOiAlZFxuIiwKKysJCQkgUE9JTlRFUl9UT19PRkZTRVQgKG9sZF9yZWdlbmRbKnBdKSk7CisrCisrICAgICAgICAgIHJlZ2VuZFsqcF0gPSBkOworKwkgIERFQlVHX1BSSU5UMiAoIiAgICAgIHJlZ2VuZDogJWRcbiIsIFBPSU5URVJfVE9fT0ZGU0VUIChyZWdlbmRbKnBdKSk7CisrCisrICAgICAgICAgIC8qIFRoaXMgcmVnaXN0ZXIgaXNuJ3QgYWN0aXZlIGFueW1vcmUuICAqLworKyAgICAgICAgICBJU19BQ1RJVkUgKHJlZ19pbmZvWypwXSkgPSAwOworKworKwkgIC8qIENsZWFyIHRoaXMgd2hlbmV2ZXIgd2UgY2hhbmdlIHRoZSByZWdpc3RlciBhY3Rpdml0eSBzdGF0dXMuICAqLworKwkgIHNldF9yZWdzX21hdGNoZWRfZG9uZSA9IDA7CisrCisrICAgICAgICAgIC8qIElmIHRoaXMgd2FzIHRoZSBvbmx5IHJlZ2lzdGVyIGFjdGl2ZSwgbm90aGluZyBpcyBhY3RpdmUKKysgICAgICAgICAgICAgYW55bW9yZS4gICovCisrICAgICAgICAgIGlmIChsb3dlc3RfYWN0aXZlX3JlZyA9PSBoaWdoZXN0X2FjdGl2ZV9yZWcpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgbG93ZXN0X2FjdGl2ZV9yZWcgPSBOT19MT1dFU1RfQUNUSVZFX1JFRzsKKysgICAgICAgICAgICAgIGhpZ2hlc3RfYWN0aXZlX3JlZyA9IE5PX0hJR0hFU1RfQUNUSVZFX1JFRzsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7IC8qIFdlIG11c3Qgc2NhbiBmb3IgdGhlIG5ldyBoaWdoZXN0IGFjdGl2ZSByZWdpc3Rlciwgc2luY2UKKysgICAgICAgICAgICAgICAgIGl0IGlzbid0IG5lY2Vzc2FyaWx5IG9uZSBsZXNzIHRoYW4gbm93OiBjb25zaWRlcgorKyAgICAgICAgICAgICAgICAgKGEoYiljKGQoZSlmKWcpLiAgV2hlbiBncm91cCAzIGVuZHMsIGFmdGVyIHRoZSBmKSwgdGhlCisrICAgICAgICAgICAgICAgICBuZXcgaGlnaGVzdCBhY3RpdmUgcmVnaXN0ZXIgaXMgMS4gICovCisrICAgICAgICAgICAgICBVQ0hBUl9UIHIgPSAqcCAtIDE7CisrICAgICAgICAgICAgICB3aGlsZSAociA+IDAgJiYgIUlTX0FDVElWRSAocmVnX2luZm9bcl0pKQorKyAgICAgICAgICAgICAgICByLS07CisrCisrICAgICAgICAgICAgICAvKiBJZiB3ZSBlbmQgdXAgYXQgcmVnaXN0ZXIgemVybywgdGhhdCBtZWFucyB0aGF0IHdlIHNhdmVkCisrICAgICAgICAgICAgICAgICB0aGUgcmVnaXN0ZXJzIGFzIHRoZSByZXN1bHQgb2YgYW4gYG9uX2ZhaWx1cmVfanVtcCcsIG5vdAorKyAgICAgICAgICAgICAgICAgYSBgc3RhcnRfbWVtb3J5JywgYW5kIHdlIGp1bXBlZCB0byBwYXN0IHRoZSBpbm5lcm1vc3QKKysgICAgICAgICAgICAgICAgIGBzdG9wX21lbW9yeScuICBGb3IgZXhhbXBsZSwgaW4gKCguKSopIHdlIHNhdmUKKysgICAgICAgICAgICAgICAgIHJlZ2lzdGVycyAxIGFuZCAyIGFzIGEgcmVzdWx0IG9mIHRoZSAqLCBidXQgd2hlbiB3ZSBwb3AKKysgICAgICAgICAgICAgICAgIGJhY2sgdG8gdGhlIHNlY29uZCApLCB3ZSBhcmUgYXQgdGhlIHN0b3BfbWVtb3J5IDEuCisrICAgICAgICAgICAgICAgICBUaHVzLCBub3RoaW5nIGlzIGFjdGl2ZS4gICovCisrCSAgICAgIGlmIChyID09IDApCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICBsb3dlc3RfYWN0aXZlX3JlZyA9IE5PX0xPV0VTVF9BQ1RJVkVfUkVHOworKyAgICAgICAgICAgICAgICAgIGhpZ2hlc3RfYWN0aXZlX3JlZyA9IE5PX0hJR0hFU1RfQUNUSVZFX1JFRzsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICBoaWdoZXN0X2FjdGl2ZV9yZWcgPSByOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgLyogSWYganVzdCBmYWlsZWQgdG8gbWF0Y2ggc29tZXRoaW5nIHRoaXMgdGltZSBhcm91bmQgd2l0aCBhCisrICAgICAgICAgICAgIGdyb3VwIHRoYXQncyBvcGVyYXRlZCBvbiBieSBhIHJlcGV0aXRpb24gb3BlcmF0b3IsIHRyeSB0bworKyAgICAgICAgICAgICBmb3JjZSBleGl0IGZyb20gdGhlIGBgbG9vcCcnLCBhbmQgcmVzdG9yZSB0aGUgcmVnaXN0ZXIKKysgICAgICAgICAgICAgaW5mb3JtYXRpb24gZm9yIHRoaXMgZ3JvdXAgdGhhdCB3ZSBoYWQgYmVmb3JlIHRyeWluZyB0aGlzCisrICAgICAgICAgICAgIGxhc3QgbWF0Y2guICAqLworKyAgICAgICAgICBpZiAoKCFNQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bKnBdKQorKyAgICAgICAgICAgICAgIHx8IGp1c3RfcGFzdF9zdGFydF9tZW0gPT0gcCAtIDEpCisrCSAgICAgICYmIChwICsgMikgPCBwZW5kKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGJvb2xlYW4gaXNfYV9qdW1wX24gPSBmYWxzZTsKKysKKysgICAgICAgICAgICAgIHAxID0gcCArIDI7CisrICAgICAgICAgICAgICBtY250ID0gMDsKKysgICAgICAgICAgICAgIHN3aXRjaCAoKHJlX29wY29kZV90KSAqcDErKykKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIGNhc2UganVtcF9uOgorKwkJICAgIGlzX2FfanVtcF9uID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgICBjYXNlIHBvcF9mYWlsdXJlX2p1bXA6CisrCQkgIGNhc2UgbWF5YmVfcG9wX2p1bXA6CisrCQkgIGNhc2UganVtcDoKKysJCSAgY2FzZSBkdW1teV9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgICAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcDEpOworKwkJICAgIGlmIChpc19hX2p1bXBfbikKKysJCSAgICAgIHAxICs9IE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyAqLyA7CisrICAgICAgICAgICAgICAgIH0KKysJICAgICAgcDEgKz0gbWNudDsKKysKKysgICAgICAgICAgICAgIC8qIElmIHRoZSBuZXh0IG9wZXJhdGlvbiBpcyBhIGp1bXAgYmFja3dhcmRzIGluIHRoZSBwYXR0ZXJuCisrCSAgICAgICAgIHRvIGFuIG9uX2ZhaWx1cmVfanVtcCByaWdodCBiZWZvcmUgdGhlIHN0YXJ0X21lbW9yeQorKyAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyB0byB0aGlzIHN0b3BfbWVtb3J5LCBleGl0IGZyb20gdGhlIGxvb3AKKysgICAgICAgICAgICAgICAgIGJ5IGZvcmNpbmcgYSBmYWlsdXJlIGFmdGVyIHB1c2hpbmcgb24gdGhlIHN0YWNrIHRoZQorKyAgICAgICAgICAgICAgICAgb25fZmFpbHVyZV9qdW1wJ3MganVtcCBpbiB0aGUgcGF0dGVybiwgYW5kIGQuICAqLworKyAgICAgICAgICAgICAgaWYgKG1jbnQgPCAwICYmIChyZV9vcGNvZGVfdCkgKnAxID09IG9uX2ZhaWx1cmVfanVtcAorKyAgICAgICAgICAgICAgICAgICYmIChyZV9vcGNvZGVfdCkgcDFbMStPRkZTRVRfQUREUkVTU19TSVpFXSA9PSBzdGFydF9tZW1vcnkKKysJCSAgJiYgcDFbMitPRkZTRVRfQUREUkVTU19TSVpFXSA9PSAqcCkKKysJCXsKKysgICAgICAgICAgICAgICAgICAvKiBJZiB0aGlzIGdyb3VwIGV2ZXIgbWF0Y2hlZCBhbnl0aGluZywgdGhlbiByZXN0b3JlCisrICAgICAgICAgICAgICAgICAgICAgd2hhdCBpdHMgcmVnaXN0ZXJzIHdlcmUgYmVmb3JlIHRyeWluZyB0aGlzIGxhc3QKKysgICAgICAgICAgICAgICAgICAgICBmYWlsZWQgbWF0Y2gsIGUuZy4sIHdpdGggYChhKikqYicgYWdhaW5zdCBgYWInIGZvcgorKyAgICAgICAgICAgICAgICAgICAgIHJlZ3N0YXJ0WzFdLCBhbmQsIGUuZy4sIHdpdGggYCgoYSopKihiKikqKSonCisrICAgICAgICAgICAgICAgICAgICAgYWdhaW5zdCBgYWJhJyBmb3IgcmVnZW5kWzNdLgorKworKyAgICAgICAgICAgICAgICAgICAgIEFsc28gcmVzdG9yZSB0aGUgcmVnaXN0ZXJzIGZvciBpbm5lciBncm91cHMgZm9yLAorKyAgICAgICAgICAgICAgICAgICAgIGUuZy4sIGAoKGEqKShiKikpKicgYWdhaW5zdCBgYWJhJyAocmVnaXN0ZXIgMyB3b3VsZAorKyAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSBnZXQgdHJhc2hlZCkuICAqLworKworKyAgICAgICAgICAgICAgICAgIGlmIChFVkVSX01BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1sqcF0pKQorKwkJICAgIHsKKysJCSAgICAgIHVuc2lnbmVkIHI7CisrCisrICAgICAgICAgICAgICAgICAgICAgIEVWRVJfTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvWypwXSkgPSAwOworKworKwkJICAgICAgLyogUmVzdG9yZSB0aGlzIGFuZCBpbm5lciBncm91cHMnIChpZiBhbnkpIHJlZ2lzdGVycy4gICovCisrICAgICAgICAgICAgICAgICAgICAgIGZvciAociA9ICpwOyByIDwgKHVuc2lnbmVkKSAqcCArICh1bnNpZ25lZCkgKihwICsgMSk7CisrCQkJICAgcisrKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3N0YXJ0W3JdID0gb2xkX3JlZ3N0YXJ0W3JdOworKworKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogeHggd2h5IHRoaXMgdGVzdD8gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkX3JlZ2VuZFtyXSA+PSByZWdzdGFydFtyXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnZW5kW3JdID0gb2xkX3JlZ2VuZFtyXTsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICB9CisrCQkgIHAxKys7CisrICAgICAgICAgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHAxKTsKKysgICAgICAgICAgICAgICAgICBQVVNIX0ZBSUxVUkVfUE9JTlQgKHAxICsgbWNudCwgZCwgLTIpOworKworKyAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgLyogTW92ZSBwYXN0IHRoZSByZWdpc3RlciBudW1iZXIgYW5kIHRoZSBpbm5lciBncm91cCBjb3VudC4gICovCisrICAgICAgICAgIHAgKz0gMjsKKysgICAgICAgICAgYnJlYWs7CisrCisrCisrCS8qIFw8ZGlnaXQ+IGhhcyBiZWVuIHR1cm5lZCBpbnRvIGEgYGR1cGxpY2F0ZScgY29tbWFuZCB3aGljaCBpcworKyAgICAgICAgICAgZm9sbG93ZWQgYnkgdGhlIG51bWVyaWMgdmFsdWUgb2YgPGRpZ2l0PiBhcyB0aGUgcmVnaXN0ZXIgbnVtYmVyLiAgKi8KKysgICAgICAgIGNhc2UgZHVwbGljYXRlOgorKwkgIHsKKysJICAgIHJlZ2lzdGVyIGNvbnN0IENIQVJfVCAqZDIsICpkZW5kMjsKKysJICAgIGludCByZWdubyA9ICpwKys7ICAgLyogR2V0IHdoaWNoIHJlZ2lzdGVyIHRvIG1hdGNoIGFnYWluc3QuICAqLworKwkgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIGR1cGxpY2F0ZSAlZC5cbiIsIHJlZ25vKTsKKysKKysJICAgIC8qIENhbid0IGJhY2sgcmVmZXJlbmNlIGEgZ3JvdXAgd2hpY2ggd2UndmUgbmV2ZXIgbWF0Y2hlZC4gICovCisrICAgICAgICAgICAgaWYgKFJFR19VTlNFVCAocmVnc3RhcnRbcmVnbm9dKSB8fCBSRUdfVU5TRVQgKHJlZ2VuZFtyZWdub10pKQorKyAgICAgICAgICAgICAgZ290byBmYWlsOworKworKyAgICAgICAgICAgIC8qIFdoZXJlIGluIGlucHV0IHRvIHRyeSB0byBzdGFydCBtYXRjaGluZy4gICovCisrICAgICAgICAgICAgZDIgPSByZWdzdGFydFtyZWdub107CisrCisrICAgICAgICAgICAgLyogV2hlcmUgdG8gc3RvcCBtYXRjaGluZzsgaWYgYm90aCB0aGUgcGxhY2UgdG8gc3RhcnQgYW5kCisrICAgICAgICAgICAgICAgdGhlIHBsYWNlIHRvIHN0b3AgbWF0Y2hpbmcgYXJlIGluIHRoZSBzYW1lIHN0cmluZywgdGhlbgorKyAgICAgICAgICAgICAgIHNldCB0byB0aGUgcGxhY2UgdG8gc3RvcCwgb3RoZXJ3aXNlLCBmb3Igbm93IGhhdmUgdG8gdXNlCisrICAgICAgICAgICAgICAgdGhlIGVuZCBvZiB0aGUgZmlyc3Qgc3RyaW5nLiAgKi8KKysKKysgICAgICAgICAgICBkZW5kMiA9ICgoRklSU1RfU1RSSU5HX1AgKHJlZ3N0YXJ0W3JlZ25vXSkKKysJCSAgICAgID09IEZJUlNUX1NUUklOR19QIChyZWdlbmRbcmVnbm9dKSkKKysJCSAgICAgPyByZWdlbmRbcmVnbm9dIDogZW5kX21hdGNoXzEpOworKwkgICAgZm9yICg7OykKKysJICAgICAgeworKwkJLyogSWYgbmVjZXNzYXJ5LCBhZHZhbmNlIHRvIG5leHQgc2VnbWVudCBpbiByZWdpc3RlcgorKyAgICAgICAgICAgICAgICAgICBjb250ZW50cy4gICovCisrCQl3aGlsZSAoZDIgPT0gZGVuZDIpCisrCQkgIHsKKysJCSAgICBpZiAoZGVuZDIgPT0gZW5kX21hdGNoXzIpIGJyZWFrOworKwkJICAgIGlmIChkZW5kMiA9PSByZWdlbmRbcmVnbm9dKSBicmVhazsKKysKKysgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBzdHJpbmcxID0+IGFkdmFuY2UgdG8gc3RyaW5nMi4gKi8KKysgICAgICAgICAgICAgICAgICAgIGQyID0gc3RyaW5nMjsKKysgICAgICAgICAgICAgICAgICAgIGRlbmQyID0gcmVnZW5kW3JlZ25vXTsKKysJCSAgfQorKwkJLyogQXQgZW5kIG9mIHJlZ2lzdGVyIGNvbnRlbnRzID0+IHN1Y2Nlc3MgKi8KKysJCWlmIChkMiA9PSBkZW5kMikgYnJlYWs7CisrCisrCQkvKiBJZiBuZWNlc3NhcnksIGFkdmFuY2UgdG8gbmV4dCBzZWdtZW50IGluIGRhdGEuICAqLworKwkJUFJFRkVUQ0ggKCk7CisrCisrCQkvKiBIb3cgbWFueSBjaGFyYWN0ZXJzIGxlZnQgaW4gdGhpcyBzZWdtZW50IHRvIG1hdGNoLiAgKi8KKysJCW1jbnQgPSBkZW5kIC0gZDsKKysKKysJCS8qIFdhbnQgaG93IG1hbnkgY29uc2VjdXRpdmUgY2hhcmFjdGVycyB3ZSBjYW4gbWF0Y2ggaW4KKysgICAgICAgICAgICAgICAgICAgb25lIHNob3QsIHNvLCBpZiBuZWNlc3NhcnksIGFkanVzdCB0aGUgY291bnQuICAqLworKyAgICAgICAgICAgICAgICBpZiAobWNudCA+IGRlbmQyIC0gZDIpCisrCQkgIG1jbnQgPSBkZW5kMiAtIGQyOworKworKwkJLyogQ29tcGFyZSB0aGF0IG1hbnk7IGZhaWx1cmUgaWYgbWlzbWF0Y2gsIGVsc2UgbW92ZQorKyAgICAgICAgICAgICAgICAgICBwYXN0IHRoZW0uICAqLworKwkJaWYgKHRyYW5zbGF0ZQorKyAgICAgICAgICAgICAgICAgICAgPyBQUkVGSVgoYmNtcF90cmFuc2xhdGUpIChkLCBkMiwgbWNudCwgdHJhbnNsYXRlKQorKyAgICAgICAgICAgICAgICAgICAgOiBtZW1jbXAgKGQsIGQyLCBtY250KnNpemVvZihVQ0hBUl9UKSkpCisrCQkgIGdvdG8gZmFpbDsKKysJCWQgKz0gbWNudCwgZDIgKz0gbWNudDsKKysKKysJCS8qIERvIHRoaXMgYmVjYXVzZSB3ZSd2ZSBtYXRjaCBzb21lIGNoYXJhY3RlcnMuICAqLworKwkJU0VUX1JFR1NfTUFUQ0hFRCAoKTsKKysJICAgICAgfQorKwkgIH0KKysJICBicmVhazsKKysKKysKKysgICAgICAgIC8qIGJlZ2xpbmUgbWF0Y2hlcyB0aGUgZW1wdHkgc3RyaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZworKyAgICAgICAgICAgKHVubGVzcyBgbm90X2JvbCcgaXMgc2V0IGluIGBidWZwJyksIGFuZCwgaWYKKysgICAgICAgICAgIGBuZXdsaW5lX2FuY2hvcicgaXMgc2V0LCBhZnRlciBuZXdsaW5lcy4gICovCisrCWNhc2UgYmVnbGluZToKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGJlZ2xpbmUuXG4iKTsKKysKKysgICAgICAgICAgaWYgKEFUX1NUUklOR1NfQkVHIChkKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBpZiAoIWJ1ZnAtPm5vdF9ib2wpIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgZWxzZSBpZiAoZFstMV0gPT0gJ1xuJyAmJiBidWZwLT5uZXdsaW5lX2FuY2hvcikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIC8qIEluIGFsbCBvdGhlciBjYXNlcywgd2UgZmFpbC4gICovCisrICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysKKysgICAgICAgIC8qIGVuZGxpbmUgaXMgdGhlIGR1YWwgb2YgYmVnbGluZS4gICovCisrCWNhc2UgZW5kbGluZToKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGVuZGxpbmUuXG4iKTsKKysKKysgICAgICAgICAgaWYgKEFUX1NUUklOR1NfRU5EIChkKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBpZiAoIWJ1ZnAtPm5vdF9lb2wpIGJyZWFrOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgLyogV2UgaGF2ZSB0byBgYHByZWZldGNoJycgdGhlIG5leHQgY2hhcmFjdGVyLiAgKi8KKysgICAgICAgICAgZWxzZSBpZiAoKGQgPT0gZW5kMSA/ICpzdHJpbmcyIDogKmQpID09ICdcbicKKysgICAgICAgICAgICAgICAgICAgJiYgYnVmcC0+bmV3bGluZV9hbmNob3IpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICBnb3RvIGZhaWw7CisrCisrCisrCS8qIE1hdGNoIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiB0aGUgZGF0YS4gICovCisrICAgICAgICBjYXNlIGJlZ2J1ZjoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGJlZ2J1Zi5cbiIpOworKyAgICAgICAgICBpZiAoQVRfU1RSSU5HU19CRUcgKGQpKQorKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICBnb3RvIGZhaWw7CisrCisrCisrCS8qIE1hdGNoIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgZGF0YS4gICovCisrICAgICAgICBjYXNlIGVuZGJ1ZjoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGVuZGJ1Zi5cbiIpOworKwkgIGlmIChBVF9TVFJJTkdTX0VORCAoZCkpCisrCSAgICBicmVhazsKKysgICAgICAgICAgZ290byBmYWlsOworKworKworKyAgICAgICAgLyogb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wIGlzIHVzZWQgdG8gb3B0aW1pemUgYC4qXG4nLiAgSXQKKysgICAgICAgICAgIHB1c2hlcyBOVUxMIGFzIHRoZSB2YWx1ZSBmb3IgdGhlIHN0cmluZyBvbiB0aGUgc3RhY2suICBUaGVuCisrICAgICAgICAgICBgcG9wX2ZhaWx1cmVfcG9pbnQnIHdpbGwga2VlcCB0aGUgY3VycmVudCB2YWx1ZSBmb3IgdGhlCisrICAgICAgICAgICBzdHJpbmcsIGluc3RlYWQgb2YgcmVzdG9yaW5nIGl0LiAgVG8gc2VlIHdoeSwgY29uc2lkZXIKKysgICAgICAgICAgIG1hdGNoaW5nIGBmb29cbmJhcicgYWdhaW5zdCBgLipcbicuICBUaGUgLiogbWF0Y2hlcyB0aGUgZm9vOworKyAgICAgICAgICAgdGhlbiB0aGUgLiBmYWlscyBhZ2FpbnN0IHRoZSBcbi4gIEJ1dCB0aGUgbmV4dCB0aGluZyB3ZSB3YW50CisrICAgICAgICAgICB0byBkbyBpcyBtYXRjaCB0aGUgXG4gYWdhaW5zdCB0aGUgXG47IGlmIHdlIHJlc3RvcmVkIHRoZQorKyAgICAgICAgICAgc3RyaW5nIHZhbHVlLCB3ZSB3b3VsZCBiZSBiYWNrIGF0IHRoZSBmb28uCisrCisrICAgICAgICAgICBCZWNhdXNlIHRoaXMgaXMgdXNlZCBvbmx5IGluIHNwZWNpZmljIGNhc2VzLCB3ZSBkb24ndCBuZWVkIHRvCisrICAgICAgICAgICBjaGVjayBhbGwgdGhlIHRoaW5ncyB0aGF0IGBvbl9mYWlsdXJlX2p1bXAnIGRvZXMsIHRvIG1ha2UKKysgICAgICAgICAgIHN1cmUgdGhlIHJpZ2h0IHRoaW5ncyBnZXQgc2F2ZWQgb24gdGhlIHN0YWNrLiAgSGVuY2Ugd2UgZG9uJ3QKKysgICAgICAgICAgIHNoYXJlIGl0cyBjb2RlLiAgVGhlIG9ubHkgcmVhc29uIHRvIHB1c2ggYW55dGhpbmcgb24gdGhlCisrICAgICAgICAgICBzdGFjayBhdCBhbGwgaXMgdGhhdCBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZSB0byBjaGFuZ2UKKysgICAgICAgICAgIGBhbnljaGFyJ3MgY29kZSB0byBkbyBzb21ldGhpbmcgYmVzaWRlcyBnb3RvIGZhaWwgaW4gdGhpcworKyAgICAgICAgICAgY2FzZTsgdGhhdCBzZWVtcyB3b3JzZSB0aGFuIHRoaXMuICAqLworKyAgICAgICAgY2FzZSBvbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXA6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBvbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXAiKTsKKysKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOworKyNpZmRlZiBfTElCQworKyAgICAgICAgICBERUJVR19QUklOVDMgKCIgJWQgKHRvICVwKTpcbiIsIG1jbnQsIHAgKyBtY250KTsKKysjZWxzZQorKyAgICAgICAgICBERUJVR19QUklOVDMgKCIgJWQgKHRvIDB4JXgpOlxuIiwgbWNudCwgcCArIG1jbnQpOworKyNlbmRpZgorKworKyAgICAgICAgICBQVVNIX0ZBSUxVUkVfUE9JTlQgKHAgKyBtY250LCBOVUxMLCAtMik7CisrICAgICAgICAgIGJyZWFrOworKworKworKwkvKiBVc2VzIG9mIG9uX2ZhaWx1cmVfanVtcDoKKysKKysgICAgICAgICAgIEVhY2ggYWx0ZXJuYXRpdmUgc3RhcnRzIHdpdGggYW4gb25fZmFpbHVyZV9qdW1wIHRoYXQgcG9pbnRzCisrICAgICAgICAgICB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGFsdGVybmF0aXZlLiAgRWFjaCBhbHRlcm5hdGl2ZQorKyAgICAgICAgICAgZXhjZXB0IHRoZSBsYXN0IGVuZHMgd2l0aCBhIGp1bXAgdGhhdCBpbiBlZmZlY3QganVtcHMgcGFzdAorKyAgICAgICAgICAgdGhlIHJlc3Qgb2YgdGhlIGFsdGVybmF0aXZlcy4gIChUaGV5IHJlYWxseSBqdW1wIHRvIHRoZQorKyAgICAgICAgICAgZW5kaW5nIGp1bXAgb2YgdGhlIGZvbGxvd2luZyBhbHRlcm5hdGl2ZSwgYmVjYXVzZSB0ZW5zaW9uaW5nCisrICAgICAgICAgICB0aGVzZSBqdW1wcyBpcyBhIGhhc3NsZS4pCisrCisrICAgICAgICAgICBSZXBlYXRzIHN0YXJ0IHdpdGggYW4gb25fZmFpbHVyZV9qdW1wIHRoYXQgcG9pbnRzIHBhc3QgYm90aAorKyAgICAgICAgICAgdGhlIHJlcGV0aXRpb24gdGV4dCBhbmQgZWl0aGVyIHRoZSBmb2xsb3dpbmcganVtcCBvcgorKyAgICAgICAgICAgcG9wX2ZhaWx1cmVfanVtcCBiYWNrIHRvIHRoaXMgb25fZmFpbHVyZV9qdW1wLiAgKi8KKysJY2FzZSBvbl9mYWlsdXJlX2p1bXA6CisrICAgICAgICBvbl9mYWlsdXJlOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgb25fZmFpbHVyZV9qdW1wIik7CisrCisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwKTsKKysjaWZkZWYgX0xJQkMKKysgICAgICAgICAgREVCVUdfUFJJTlQzICgiICVkICh0byAlcCkiLCBtY250LCBwICsgbWNudCk7CisrI2Vsc2UKKysgICAgICAgICAgREVCVUdfUFJJTlQzICgiICVkICh0byAweCV4KSIsIG1jbnQsIHAgKyBtY250KTsKKysjZW5kaWYKKysKKysgICAgICAgICAgLyogSWYgdGhpcyBvbl9mYWlsdXJlX2p1bXAgY29tZXMgcmlnaHQgYmVmb3JlIGEgZ3JvdXAgKGkuZS4sCisrICAgICAgICAgICAgIHRoZSBvcmlnaW5hbCAqIGFwcGxpZWQgdG8gYSBncm91cCksIHNhdmUgdGhlIGluZm9ybWF0aW9uCisrICAgICAgICAgICAgIGZvciB0aGF0IGdyb3VwIGFuZCBhbGwgaW5uZXIgb25lcywgc28gdGhhdCBpZiB3ZSBmYWlsIGJhY2sKKysgICAgICAgICAgICAgdG8gdGhpcyBwb2ludCwgdGhlIGdyb3VwJ3MgaW5mb3JtYXRpb24gd2lsbCBiZSBjb3JyZWN0LgorKyAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaW4gXChhKlwpKlwxLCB3ZSBuZWVkIHRoZSBwcmVjZWRpbmcgZ3JvdXAsCisrICAgICAgICAgICAgIGFuZCBpbiBcKHp6XChhKlwpYipcKVwyLCB3ZSBuZWVkIHRoZSBpbm5lciBncm91cC4gICovCisrCisrICAgICAgICAgIC8qIFdlIGNhbid0IHVzZSBgcCcgdG8gY2hlY2sgYWhlYWQgYmVjYXVzZSB3ZSBwdXNoCisrICAgICAgICAgICAgIGEgZmFpbHVyZSBwb2ludCB0byBgcCArIG1jbnQnIGFmdGVyIHdlIGRvIHRoaXMuICAqLworKyAgICAgICAgICBwMSA9IHA7CisrCisrICAgICAgICAgIC8qIFdlIG5lZWQgdG8gc2tpcCBub19vcCdzIGJlZm9yZSB3ZSBsb29rIGZvciB0aGUKKysgICAgICAgICAgICAgc3RhcnRfbWVtb3J5IGluIGNhc2UgdGhpcyBvbl9mYWlsdXJlX2p1bXAgaXMgaGFwcGVuaW5nIGFzCisrICAgICAgICAgICAgIHRoZSByZXN1bHQgb2YgYSBjb21wbGV0ZWQgc3VjY2VlZF9uLCBhcyBpbiBcKGFcKVx7MSwzXH1iXDEKKysgICAgICAgICAgICAgYWdhaW5zdCBhYmEuICAqLworKyAgICAgICAgICB3aGlsZSAocDEgPCBwZW5kICYmIChyZV9vcGNvZGVfdCkgKnAxID09IG5vX29wKQorKyAgICAgICAgICAgIHAxKys7CisrCisrICAgICAgICAgIGlmIChwMSA8IHBlbmQgJiYgKHJlX29wY29kZV90KSAqcDEgPT0gc3RhcnRfbWVtb3J5KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIC8qIFdlIGhhdmUgYSBuZXcgaGlnaGVzdCBhY3RpdmUgcmVnaXN0ZXIgbm93LiAgVGhpcyB3aWxsCisrICAgICAgICAgICAgICAgICBnZXQgcmVzZXQgYXQgdGhlIHN0YXJ0X21lbW9yeSB3ZSBhcmUgYWJvdXQgdG8gZ2V0IHRvLAorKyAgICAgICAgICAgICAgICAgYnV0IHdlIHdpbGwgaGF2ZSBzYXZlZCBhbGwgdGhlIHJlZ2lzdGVycyByZWxldmFudCB0bworKyAgICAgICAgICAgICAgICAgdGhpcyByZXBldGl0aW9uIG9wLCBhcyBkZXNjcmliZWQgYWJvdmUuICAqLworKyAgICAgICAgICAgICAgaGlnaGVzdF9hY3RpdmVfcmVnID0gKihwMSArIDEpICsgKihwMSArIDIpOworKyAgICAgICAgICAgICAgaWYgKGxvd2VzdF9hY3RpdmVfcmVnID09IE5PX0xPV0VTVF9BQ1RJVkVfUkVHKQorKyAgICAgICAgICAgICAgICBsb3dlc3RfYWN0aXZlX3JlZyA9ICoocDEgKyAxKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIjpcbiIpOworKyAgICAgICAgICBQVVNIX0ZBSUxVUkVfUE9JTlQgKHAgKyBtY250LCBkLCAtMik7CisrICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgLyogQSBzbWFydCByZXBlYXQgZW5kcyB3aXRoIGBtYXliZV9wb3BfanVtcCcuCisrCSAgIFdlIGNoYW5nZSBpdCB0byBlaXRoZXIgYHBvcF9mYWlsdXJlX2p1bXAnIG9yIGBqdW1wJy4gICovCisrICAgICAgICBjYXNlIG1heWJlX3BvcF9qdW1wOgorKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcCk7CisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIkVYRUNVVElORyBtYXliZV9wb3BfanVtcCAlZC5cbiIsIG1jbnQpOworKyAgICAgICAgICB7CisrCSAgICByZWdpc3RlciBVQ0hBUl9UICpwMiA9IHA7CisrCisrICAgICAgICAgICAgLyogQ29tcGFyZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZXBlYXQgd2l0aCB3aGF0IGluIHRoZQorKyAgICAgICAgICAgICAgIHBhdHRlcm4gZm9sbG93cyBpdHMgZW5kLiBJZiB3ZSBjYW4gZXN0YWJsaXNoIHRoYXQgdGhlcmUKKysgICAgICAgICAgICAgICBpcyBub3RoaW5nIHRoYXQgdGhleSB3b3VsZCBib3RoIG1hdGNoLCBpLmUuLCB0aGF0IHdlCisrICAgICAgICAgICAgICAgd291bGQgaGF2ZSB0byBiYWNrdHJhY2sgYmVjYXVzZSBvZiAoYXMgaW4sIGUuZy4sIGBhKmEnKQorKyAgICAgICAgICAgICAgIHRoZW4gd2UgY2FuIGNoYW5nZSB0byBwb3BfZmFpbHVyZV9qdW1wLCBiZWNhdXNlIHdlJ2xsCisrICAgICAgICAgICAgICAgbmV2ZXIgaGF2ZSB0byBiYWNrdHJhY2suCisrCisrICAgICAgICAgICAgICAgVGhpcyBpcyBub3QgdHJ1ZSBpbiB0aGUgY2FzZSBvZiBhbHRlcm5hdGl2ZXM6IGluCisrICAgICAgICAgICAgICAgYChhfGFiKSonIHdlIGRvIG5lZWQgdG8gYmFja3RyYWNrIHRvIHRoZSBgYWInIGFsdGVybmF0aXZlCisrICAgICAgICAgICAgICAgKGUuZy4sIGlmIHRoZSBzdHJpbmcgd2FzIGBhYicpLiAgQnV0IGluc3RlYWQgb2YgdHJ5aW5nIHRvCisrICAgICAgICAgICAgICAgZGV0ZWN0IHRoYXQgaGVyZSwgdGhlIGFsdGVybmF0aXZlIGhhcyBwdXQgb24gYSBkdW1teQorKyAgICAgICAgICAgICAgIGZhaWx1cmUgcG9pbnQgd2hpY2ggaXMgd2hhdCB3ZSB3aWxsIGVuZCB1cCBwb3BwaW5nLiAgKi8KKysKKysJICAgIC8qIFNraXAgb3ZlciBvcGVuL2Nsb3NlLWdyb3VwIGNvbW1hbmRzLgorKwkgICAgICAgSWYgd2hhdCBmb2xsb3dzIHRoaXMgbG9vcCBpcyBhIC4uLisgY29uc3RydWN0LAorKwkgICAgICAgbG9vayBhdCB3aGF0IGJlZ2lucyBpdHMgYm9keSwgc2luY2Ugd2Ugd2lsbCBoYXZlIHRvCisrCSAgICAgICBtYXRjaCBhdCBsZWFzdCBvbmUgb2YgdGhhdC4gICovCisrCSAgICB3aGlsZSAoMSkKKysJICAgICAgeworKwkJaWYgKHAyICsgMiA8IHBlbmQKKysJCSAgICAmJiAoKHJlX29wY29kZV90KSAqcDIgPT0gc3RvcF9tZW1vcnkKKysJCQl8fCAocmVfb3Bjb2RlX3QpICpwMiA9PSBzdGFydF9tZW1vcnkpKQorKwkJICBwMiArPSAzOworKwkJZWxzZSBpZiAocDIgKyAyICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkUgPCBwZW5kCisrCQkJICYmIChyZV9vcGNvZGVfdCkgKnAyID09IGR1bW15X2ZhaWx1cmVfanVtcCkKKysJCSAgcDIgKz0gMiArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKwkJZWxzZQorKwkJICBicmVhazsKKysJICAgICAgfQorKworKwkgICAgcDEgPSBwICsgbWNudDsKKysJICAgIC8qIHAxWzBdIC4uLiBwMVsyXSBhcmUgdGhlIGBvbl9mYWlsdXJlX2p1bXAnIGNvcnJlc3BvbmRpbmcKKysJICAgICAgIHRvIHRoZSBgbWF5YmVfZmluYWxpemVfanVtcCcgb2YgdGhpcyBjYXNlLiAgRXhhbWluZSB3aGF0CisrCSAgICAgICBmb2xsb3dzLiAgKi8KKysKKysgICAgICAgICAgICAvKiBJZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCB3ZSBjYW4gY2hhbmdlLiAgKi8KKysgICAgICAgICAgICBpZiAocDIgPT0gcGVuZCkKKysJICAgICAgeworKwkJLyogQ29uc2lkZXIgd2hhdCBoYXBwZW5zIHdoZW4gbWF0Y2hpbmcgIjpcKC4qXCkiCisrCQkgICBhZ2FpbnN0ICI6LyIuICBJIGRvbid0IHJlYWxseSB1bmRlcnN0YW5kIHRoaXMgY29kZQorKwkJICAgeWV0LiAgKi8KKysgIAkgICAgICAgIHBbLSgxK09GRlNFVF9BRERSRVNTX1NJWkUpXSA9IChVQ0hBUl9UKQorKwkJICBwb3BfZmFpbHVyZV9qdW1wOworKyAgICAgICAgICAgICAgICBERUJVR19QUklOVDEKKysgICAgICAgICAgICAgICAgICAoIiAgRW5kIG9mIHBhdHRlcm46IGNoYW5nZSB0byBgcG9wX2ZhaWx1cmVfanVtcCcuXG4iKTsKKysgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBlbHNlIGlmICgocmVfb3Bjb2RlX3QpICpwMiA9PSBleGFjdG4KKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJCSAgICAgfHwgKHJlX29wY29kZV90KSAqcDIgPT0gZXhhY3RuX2JpbgorKyNlbmRpZgorKwkJICAgICB8fCAoYnVmcC0+bmV3bGluZV9hbmNob3IgJiYgKHJlX29wY29kZV90KSAqcDIgPT0gZW5kbGluZSkpCisrCSAgICAgIHsKKysJCXJlZ2lzdGVyIFVDSEFSX1QgYworKyAgICAgICAgICAgICAgICAgID0gKnAyID09IChVQ0hBUl9UKSBlbmRsaW5lID8gJ1xuJyA6IHAyWzJdOworKworKyAgICAgICAgICAgICAgICBpZiAoKChyZV9vcGNvZGVfdCkgcDFbMStPRkZTRVRfQUREUkVTU19TSVpFXSA9PSBleGFjdG4KKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJCSAgICAgfHwgKHJlX29wY29kZV90KSBwMVsxK09GRlNFVF9BRERSRVNTX1NJWkVdID09IGV4YWN0bl9iaW4KKysjZW5kaWYKKysJCSAgICApICYmIHAxWzMrT0ZGU0VUX0FERFJFU1NfU0laRV0gIT0gYykKKysgICAgICAgICAgICAgICAgICB7CisrICAJCSAgICBwWy0oMStPRkZTRVRfQUREUkVTU19TSVpFKV0gPSAoVUNIQVJfVCkKKysJCSAgICAgIHBvcF9mYWlsdXJlX2p1bXA7CisrI2lmZGVmIFdDSEFSCisrCQkgICAgICBERUJVR19QUklOVDMgKCIgICVDICE9ICVDID0+IHBvcF9mYWlsdXJlX2p1bXAuXG4iLAorKwkJCQkgICAgKHdpbnRfdCkgYywKKysJCQkJICAgICh3aW50X3QpIHAxWzMrT0ZGU0VUX0FERFJFU1NfU0laRV0pOworKyNlbHNlCisrCQkgICAgICBERUJVR19QUklOVDMgKCIgICVjICE9ICVjID0+IHBvcF9mYWlsdXJlX2p1bXAuXG4iLAorKwkJCQkgICAgKGNoYXIpIGMsCisrCQkJCSAgICAoY2hhcikgcDFbMytPRkZTRVRfQUREUkVTU19TSVpFXSk7CisrI2VuZGlmCisrICAgICAgICAgICAgICAgICAgfQorKworKyNpZm5kZWYgV0NIQVIKKysJCWVsc2UgaWYgKChyZV9vcGNvZGVfdCkgcDFbM10gPT0gY2hhcnNldAorKwkJCSB8fCAocmVfb3Bjb2RlX3QpIHAxWzNdID09IGNoYXJzZXRfbm90KQorKwkJICB7CisrCQkgICAgaW50IG5lZ2F0ZSA9IChyZV9vcGNvZGVfdCkgcDFbM10gPT0gY2hhcnNldF9ub3Q7CisrCisrCQkgICAgaWYgKGMgPCAodW5zaWduZWQpIChwMVs0XSAqIEJZVEVXSURUSCkKKysJCQkmJiBwMVs1ICsgYyAvIEJZVEVXSURUSF0gJiAoMSA8PCAoYyAlIEJZVEVXSURUSCkpKQorKwkJICAgICAgbmVnYXRlID0gIW5lZ2F0ZTsKKysKKysgICAgICAgICAgICAgICAgICAgIC8qIGBuZWdhdGUnIGlzIGVxdWFsIHRvIDEgaWYgYyB3b3VsZCBtYXRjaCwgd2hpY2ggbWVhbnMKKysgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHdlIGNhbid0IGNoYW5nZSB0byBwb3BfZmFpbHVyZV9qdW1wLiAgKi8KKysJCSAgICBpZiAoIW5lZ2F0ZSkKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgCQkgICAgICAgIHBbLTNdID0gKHVuc2lnbmVkIGNoYXIpIHBvcF9mYWlsdXJlX2p1bXA7CisrICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQxICgiICBObyBtYXRjaCA9PiBwb3BfZmFpbHVyZV9qdW1wLlxuIik7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgfQorKyNlbmRpZiAvKiBub3QgV0NIQVIgKi8KKysJICAgICAgfQorKyNpZm5kZWYgV0NIQVIKKysgICAgICAgICAgICBlbHNlIGlmICgocmVfb3Bjb2RlX3QpICpwMiA9PSBjaGFyc2V0KQorKwkgICAgICB7CisrCQkvKiBXZSB3aW4gaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgbG9vcCBpcyBub3QgcGFydAorKyAgICAgICAgICAgICAgICAgICBvZiB0aGUgY2hhcnNldC4gICovCisrICAgICAgICAgICAgICAgIGlmICgocmVfb3Bjb2RlX3QpIHAxWzNdID09IGV4YWN0bgorKyAJCSAgICAmJiAhICgoaW50KSBwMlsxXSAqIEJZVEVXSURUSCA+IChpbnQpIHAxWzVdCisrIAkJCSAgJiYgKHAyWzIgKyBwMVs1XSAvIEJZVEVXSURUSF0KKysgCQkJICAgICAgJiAoMSA8PCAocDFbNV0gJSBCWVRFV0lEVEgpKSkpKQorKwkJICB7CisrCQkgICAgcFstM10gPSAodW5zaWduZWQgY2hhcikgcG9wX2ZhaWx1cmVfanVtcDsKKysJCSAgICBERUJVR19QUklOVDEgKCIgIE5vIG1hdGNoID0+IHBvcF9mYWlsdXJlX2p1bXAuXG4iKTsKKysgICAgICAgICAgICAgICAgICB9CisrCisrCQllbHNlIGlmICgocmVfb3Bjb2RlX3QpIHAxWzNdID09IGNoYXJzZXRfbm90KQorKwkJICB7CisrCQkgICAgaW50IGlkeDsKKysJCSAgICAvKiBXZSB3aW4gaWYgdGhlIGNoYXJzZXRfbm90IGluc2lkZSB0aGUgbG9vcAorKwkJICAgICAgIGxpc3RzIGV2ZXJ5IGNoYXJhY3RlciBsaXN0ZWQgaW4gdGhlIGNoYXJzZXQgYWZ0ZXIuICAqLworKwkJICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgKGludCkgcDJbMV07IGlkeCsrKQorKwkJICAgICAgaWYgKCEgKHAyWzIgKyBpZHhdID09IDAKKysJCQkgICAgIHx8IChpZHggPCAoaW50KSBwMVs0XQorKwkJCQkgJiYgKChwMlsyICsgaWR4XSAmIH4gcDFbNSArIGlkeF0pID09IDApKSkpCisrCQkJYnJlYWs7CisrCisrCQkgICAgaWYgKGlkeCA9PSBwMlsxXSkKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgCQkgICAgICAgIHBbLTNdID0gKHVuc2lnbmVkIGNoYXIpIHBvcF9mYWlsdXJlX2p1bXA7CisrICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQxICgiICBObyBtYXRjaCA9PiBwb3BfZmFpbHVyZV9qdW1wLlxuIik7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgfQorKwkJZWxzZSBpZiAoKHJlX29wY29kZV90KSBwMVszXSA9PSBjaGFyc2V0KQorKwkJICB7CisrCQkgICAgaW50IGlkeDsKKysJCSAgICAvKiBXZSB3aW4gaWYgdGhlIGNoYXJzZXQgaW5zaWRlIHRoZSBsb29wCisrCQkgICAgICAgaGFzIG5vIG92ZXJsYXAgd2l0aCB0aGUgb25lIGFmdGVyIHRoZSBsb29wLiAgKi8KKysJCSAgICBmb3IgKGlkeCA9IDA7CisrCQkJIGlkeCA8IChpbnQpIHAyWzFdICYmIGlkeCA8IChpbnQpIHAxWzRdOworKwkJCSBpZHgrKykKKysJCSAgICAgIGlmICgocDJbMiArIGlkeF0gJiBwMVs1ICsgaWR4XSkgIT0gMCkKKysJCQlicmVhazsKKysKKysJCSAgICBpZiAoaWR4ID09IHAyWzFdIHx8IGlkeCA9PSBwMVs0XSkKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgCQkgICAgICAgIHBbLTNdID0gKHVuc2lnbmVkIGNoYXIpIHBvcF9mYWlsdXJlX2p1bXA7CisrICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQxICgiICBObyBtYXRjaCA9PiBwb3BfZmFpbHVyZV9qdW1wLlxuIik7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgfQorKwkgICAgICB9CisrI2VuZGlmIC8qIG5vdCBXQ0hBUiAqLworKwkgIH0KKysJICBwIC09IE9GRlNFVF9BRERSRVNTX1NJWkU7CS8qIFBvaW50IGF0IHJlbGF0aXZlIGFkZHJlc3MgYWdhaW4uICAqLworKwkgIGlmICgocmVfb3Bjb2RlX3QpIHBbLTFdICE9IHBvcF9mYWlsdXJlX2p1bXApCisrCSAgICB7CisrCSAgICAgIHBbLTFdID0gKFVDSEFSX1QpIGp1bXA7CisrICAgICAgICAgICAgICBERUJVR19QUklOVDEgKCIgIE1hdGNoID0+IGp1bXAuXG4iKTsKKysJICAgICAgZ290byB1bmNvbmRpdGlvbmFsX2p1bXA7CisrCSAgICB9CisrICAgICAgICAvKiBOb3RlIGZhbGwgdGhyb3VnaC4gICovCisrCisrCisrCS8qIFRoZSBlbmQgb2YgYSBzaW1wbGUgcmVwZWF0IGhhcyBhIHBvcF9mYWlsdXJlX2p1bXAgYmFjayB0bworKyAgICAgICAgICAgaXRzIG1hdGNoaW5nIG9uX2ZhaWx1cmVfanVtcCwgd2hlcmUgdGhlIGxhdHRlciB3aWxsIHB1c2ggYQorKyAgICAgICAgICAgZmFpbHVyZSBwb2ludC4gIFRoZSBwb3BfZmFpbHVyZV9qdW1wIHRha2VzIG9mZiBmYWlsdXJlCisrICAgICAgICAgICBwb2ludHMgcHV0IG9uIGJ5IHRoaXMgcG9wX2ZhaWx1cmVfanVtcCdzIG1hdGNoaW5nCisrICAgICAgICAgICBvbl9mYWlsdXJlX2p1bXA7IHdlIGdvdCB0aHJvdWdoIHRoZSBwYXR0ZXJuIHRvIGhlcmUgZnJvbSB0aGUKKysgICAgICAgICAgIG1hdGNoaW5nIG9uX2ZhaWx1cmVfanVtcCwgc28gZGlkbid0IGZhaWwuICAqLworKyAgICAgICAgY2FzZSBwb3BfZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICB7CisrICAgICAgICAgICAgLyogV2UgbmVlZCB0byBwYXNzIHNlcGFyYXRlIHN0b3JhZ2UgZm9yIHRoZSBsb3dlc3QgYW5kCisrICAgICAgICAgICAgICAgaGlnaGVzdCByZWdpc3RlcnMsIGV2ZW4gdGhvdWdoIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlCisrICAgICAgICAgICAgICAgYWN0dWFsIHZhbHVlcy4gIE90aGVyd2lzZSwgd2Ugd2lsbCByZXN0b3JlIG9ubHkgb25lCisrICAgICAgICAgICAgICAgcmVnaXN0ZXIgZnJvbSB0aGUgc3RhY2ssIHNpbmNlIGxvd2VzdCB3aWxsID09IGhpZ2hlc3QgaW4KKysgICAgICAgICAgICAgICBgcG9wX2ZhaWx1cmVfcG9pbnQnLiAgKi8KKysgICAgICAgICAgICBhY3RpdmVfcmVnX3QgZHVtbXlfbG93X3JlZywgZHVtbXlfaGlnaF9yZWc7CisrICAgICAgICAgICAgVUNIQVJfVCAqcGR1bW15IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSA9IE5VTEw7CisrICAgICAgICAgICAgY29uc3QgQ0hBUl9UICpzZHVtbXkgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpID0gTlVMTDsKKysKKysgICAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgcG9wX2ZhaWx1cmVfanVtcC5cbiIpOworKyAgICAgICAgICAgIFBPUF9GQUlMVVJFX1BPSU5UIChzZHVtbXksIHBkdW1teSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfbG93X3JlZywgZHVtbXlfaGlnaF9yZWcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kdW1teSwgcmVnX2R1bW15LCByZWdfaW5mb19kdW1teSk7CisrICAgICAgICAgIH0KKysJICAvKiBOb3RlIGZhbGwgdGhyb3VnaC4gICovCisrCisrCXVuY29uZGl0aW9uYWxfanVtcDoKKysjaWZkZWYgX0xJQkMKKysJICBERUJVR19QUklOVDIgKCJcbiVwOiAiLCBwKTsKKysjZWxzZQorKwkgIERFQlVHX1BSSU5UMiAoIlxuMHgleDogIiwgcCk7CisrI2VuZGlmCisrICAgICAgICAgIC8qIE5vdGUgZmFsbCB0aHJvdWdoLiAgKi8KKysKKysgICAgICAgIC8qIFVuY29uZGl0aW9uYWxseSBqdW1wICh3aXRob3V0IHBvcHBpbmcgYW55IGZhaWx1cmUgcG9pbnRzKS4gICovCisrICAgICAgICBjYXNlIGp1bXA6CisrCSAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOwkvKiBHZXQgdGhlIGFtb3VudCB0byBqdW1wLiAgKi8KKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIGp1bXAgJWQgIiwgbWNudCk7CisrCSAgcCArPSBtY250OwkJCQkvKiBEbyB0aGUganVtcC4gICovCisrI2lmZGVmIF9MSUJDCisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIih0byAlcCkuXG4iLCBwKTsKKysjZWxzZQorKyAgICAgICAgICBERUJVR19QUklOVDIgKCIodG8gMHgleCkuXG4iLCBwKTsKKysjZW5kaWYKKysJICBicmVhazsKKysKKysKKysgICAgICAgIC8qIFdlIG5lZWQgdGhpcyBvcGNvZGUgc28gd2UgY2FuIGRldGVjdCB3aGVyZSBhbHRlcm5hdGl2ZXMgZW5kCisrICAgICAgICAgICBpbiBgZ3JvdXBfbWF0Y2hfbnVsbF9zdHJpbmdfcCcgZXQgYWwuICAqLworKyAgICAgICAgY2FzZSBqdW1wX3Bhc3RfYWx0OgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcganVtcF9wYXN0X2FsdC5cbiIpOworKyAgICAgICAgICBnb3RvIHVuY29uZGl0aW9uYWxfanVtcDsKKysKKysKKysgICAgICAgIC8qIE5vcm1hbGx5LCB0aGUgb25fZmFpbHVyZV9qdW1wIHB1c2hlcyBhIGZhaWx1cmUgcG9pbnQsIHdoaWNoCisrICAgICAgICAgICB0aGVuIGdldHMgcG9wcGVkIGF0IHBvcF9mYWlsdXJlX2p1bXAuICBXZSB3aWxsIGVuZCB1cCBhdAorKyAgICAgICAgICAgcG9wX2ZhaWx1cmVfanVtcCwgYWxzbywgYW5kIHdpdGggYSBwYXR0ZXJuIG9mLCBzYXksIGBhKycsIHdlCisrICAgICAgICAgICBhcmUgc2tpcHBpbmcgb3ZlciB0aGUgb25fZmFpbHVyZV9qdW1wLCBzbyB3ZSBoYXZlIHRvIHB1c2gKKysgICAgICAgICAgIHNvbWV0aGluZyBtZWFuaW5nbGVzcyBmb3IgcG9wX2ZhaWx1cmVfanVtcCB0byBwb3AuICAqLworKyAgICAgICAgY2FzZSBkdW1teV9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBkdW1teV9mYWlsdXJlX2p1bXAuXG4iKTsKKysgICAgICAgICAgLyogSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB3ZSBwdXNoIGZvciB0aGUgc3RyaW5nIGhlcmUuICBXaGF0CisrICAgICAgICAgICAgIHRoZSBjb2RlIGF0IGBmYWlsJyB0ZXN0cyBpcyB0aGUgdmFsdWUgZm9yIHRoZSBwYXR0ZXJuLiAgKi8KKysgICAgICAgICAgUFVTSF9GQUlMVVJFX1BPSU5UIChOVUxMLCBOVUxMLCAtMik7CisrICAgICAgICAgIGdvdG8gdW5jb25kaXRpb25hbF9qdW1wOworKworKworKyAgICAgICAgLyogQXQgdGhlIGVuZCBvZiBhbiBhbHRlcm5hdGl2ZSwgd2UgbmVlZCB0byBwdXNoIGEgZHVtbXkgZmFpbHVyZQorKyAgICAgICAgICAgcG9pbnQgaW4gY2FzZSB3ZSBhcmUgZm9sbG93ZWQgYnkgYSBgcG9wX2ZhaWx1cmVfanVtcCcsIGJlY2F1c2UKKysgICAgICAgICAgIHdlIGRvbid0IHdhbnQgdGhlIGZhaWx1cmUgcG9pbnQgZm9yIHRoZSBhbHRlcm5hdGl2ZSB0byBiZQorKyAgICAgICAgICAgcG9wcGVkLiAgRm9yIGV4YW1wbGUsIG1hdGNoaW5nIGAoYXxhYikqJyBhZ2FpbnN0IGBhYWInCisrICAgICAgICAgICByZXF1aXJlcyB0aGF0IHdlIG1hdGNoIHRoZSBgYWInIGFsdGVybmF0aXZlLiAgKi8KKysgICAgICAgIGNhc2UgcHVzaF9kdW1teV9mYWlsdXJlOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgcHVzaF9kdW1teV9mYWlsdXJlLlxuIik7CisrICAgICAgICAgIC8qIFNlZSBjb21tZW50cyBqdXN0IGFib3ZlIGF0IGBkdW1teV9mYWlsdXJlX2p1bXAnIGFib3V0IHRoZQorKyAgICAgICAgICAgICB0d28gemVyb2VzLiAgKi8KKysgICAgICAgICAgUFVTSF9GQUlMVVJFX1BPSU5UIChOVUxMLCBOVUxMLCAtMik7CisrICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgLyogSGF2ZSB0byBzdWNjZWVkIG1hdGNoaW5nIHdoYXQgZm9sbG93cyBhdCBsZWFzdCBuIHRpbWVzLgorKyAgICAgICAgICAgQWZ0ZXIgdGhhdCwgaGFuZGxlIGxpa2UgYG9uX2ZhaWx1cmVfanVtcCcuICAqLworKyAgICAgICAgY2FzZSBzdWNjZWVkX246CisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSIChtY250LCBwICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIkVYRUNVVElORyBzdWNjZWVkX24gJWQuXG4iLCBtY250KTsKKysKKysgICAgICAgICAgYXNzZXJ0IChtY250ID49IDApOworKyAgICAgICAgICAvKiBPcmlnaW5hbGx5LCB0aGlzIGlzIGhvdyBtYW55IHRpbWVzIHdlIEhBVkUgdG8gc3VjY2VlZC4gICovCisrICAgICAgICAgIGlmIChtY250ID4gMCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgbWNudC0tOworKwkgICAgICAgcCArPSBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICAgICAgIFNUT1JFX05VTUJFUl9BTkRfSU5DUiAocCwgbWNudCk7CisrI2lmZGVmIF9MSUJDCisrICAgICAgICAgICAgICAgREVCVUdfUFJJTlQzICgiICBTZXR0aW5nICVwIHRvICVkLlxuIiwgcCAtIE9GRlNFVF9BRERSRVNTX1NJWkUKKysJCQkgICAgICwgbWNudCk7CisrI2Vsc2UKKysgICAgICAgICAgICAgICBERUJVR19QUklOVDMgKCIgIFNldHRpbmcgMHgleCB0byAlZC5cbiIsIHAgLSBPRkZTRVRfQUREUkVTU19TSVpFCisrCQkJICAgICAsIG1jbnQpOworKyNlbmRpZgorKyAgICAgICAgICAgIH0KKysJICBlbHNlIGlmIChtY250ID09IDApCisrICAgICAgICAgICAgeworKyNpZmRlZiBfTElCQworKyAgICAgICAgICAgICAgREVCVUdfUFJJTlQyICgiICBTZXR0aW5nIHR3byBieXRlcyBmcm9tICVwIHRvIG5vX29wLlxuIiwKKysJCQkgICAgcCArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyNlbHNlCisrICAgICAgICAgICAgICBERUJVR19QUklOVDIgKCIgIFNldHRpbmcgdHdvIGJ5dGVzIGZyb20gMHgleCB0byBub19vcC5cbiIsCisrCQkJICAgIHAgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysjZW5kaWYgLyogX0xJQkMgKi8KKysKKysjaWZkZWYgV0NIQVIKKysJICAgICAgcFsxXSA9IChVQ0hBUl9UKSBub19vcDsKKysjZWxzZQorKwkgICAgICBwWzJdID0gKFVDSEFSX1QpIG5vX29wOworKyAgICAgICAgICAgICAgcFszXSA9IChVQ0hBUl9UKSBub19vcDsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysgICAgICAgICAgICAgIGdvdG8gb25fZmFpbHVyZTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBqdW1wX246CisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSIChtY250LCBwICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIkVYRUNVVElORyBqdW1wX24gJWQuXG4iLCBtY250KTsKKysKKysgICAgICAgICAgLyogT3JpZ2luYWxseSwgdGhpcyBpcyBob3cgbWFueSB0aW1lcyB3ZSBDQU4ganVtcC4gICovCisrICAgICAgICAgIGlmIChtY250KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICBtY250LS07CisrICAgICAgICAgICAgICAgU1RPUkVfTlVNQkVSIChwICsgT0ZGU0VUX0FERFJFU1NfU0laRSwgbWNudCk7CisrCisrI2lmZGVmIF9MSUJDCisrICAgICAgICAgICAgICAgREVCVUdfUFJJTlQzICgiICBTZXR0aW5nICVwIHRvICVkLlxuIiwgcCArIE9GRlNFVF9BRERSRVNTX1NJWkUsCisrCQkJICAgICBtY250KTsKKysjZWxzZQorKyAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAgU2V0dGluZyAweCV4IHRvICVkLlxuIiwgcCArIE9GRlNFVF9BRERSRVNTX1NJWkUsCisrCQkJICAgICBtY250KTsKKysjZW5kaWYgLyogX0xJQkMgKi8KKysJICAgICAgIGdvdG8gdW5jb25kaXRpb25hbF9qdW1wOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgLyogSWYgZG9uJ3QgaGF2ZSB0byBqdW1wIGFueSBtb3JlLCBza2lwIG92ZXIgdGhlIHJlc3Qgb2YgY29tbWFuZC4gICovCisrCSAgZWxzZQorKwkgICAgcCArPSAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2Ugc2V0X251bWJlcl9hdDoKKysJICB7CisrICAgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIHNldF9udW1iZXJfYXQuXG4iKTsKKysKKysgICAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcCk7CisrICAgICAgICAgICAgcDEgPSBwICsgbWNudDsKKysgICAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcCk7CisrI2lmZGVmIF9MSUJDCisrICAgICAgICAgICAgREVCVUdfUFJJTlQzICgiICBTZXR0aW5nICVwIHRvICVkLlxuIiwgcDEsIG1jbnQpOworKyNlbHNlCisrICAgICAgICAgICAgREVCVUdfUFJJTlQzICgiICBTZXR0aW5nIDB4JXggdG8gJWQuXG4iLCBwMSwgbWNudCk7CisrI2VuZGlmCisrCSAgICBTVE9SRV9OVU1CRVIgKHAxLCBtY250KTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgfQorKworKyNpZiAwCisrCS8qIFRoZSBERUMgQWxwaGEgQyBjb21waWxlciAzLnggZ2VuZXJhdGVzIGluY29ycmVjdCBjb2RlIGZvciB0aGUKKysJICAgdGVzdCAgV09SRENIQVJfUCAoZCAtIDEpICE9IFdPUkRDSEFSX1AgKGQpICBpbiB0aGUgZXhwYW5zaW9uIG9mCisrCSAgIEFUX1dPUkRfQk9VTkRBUlksIHNvIHRoaXMgY29kZSBpcyBkaXNhYmxlZC4gIEV4cGFuZGluZyB0aGUKKysJICAgbWFjcm8gYW5kIGludHJvZHVjaW5nIHRlbXBvcmFyeSB2YXJpYWJsZXMgd29ya3MgYXJvdW5kIHRoZSBidWcuICAqLworKworKwljYXNlIHdvcmRib3VuZDoKKysJICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgd29yZGJvdW5kLlxuIik7CisrCSAgaWYgKEFUX1dPUkRfQk9VTkRBUlkgKGQpKQorKwkgICAgYnJlYWs7CisrCSAgZ290byBmYWlsOworKworKwljYXNlIG5vdHdvcmRib3VuZDoKKysJICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgbm90d29yZGJvdW5kLlxuIik7CisrCSAgaWYgKEFUX1dPUkRfQk9VTkRBUlkgKGQpKQorKwkgICAgZ290byBmYWlsOworKwkgIGJyZWFrOworKyNlbHNlCisrCWNhc2Ugd29yZGJvdW5kOgorKwl7CisrCSAgYm9vbGVhbiBwcmV2Y2hhciwgdGhpc2NoYXI7CisrCisrCSAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIHdvcmRib3VuZC5cbiIpOworKwkgIGlmIChBVF9TVFJJTkdTX0JFRyAoZCkgfHwgQVRfU1RSSU5HU19FTkQgKGQpKQorKwkgICAgYnJlYWs7CisrCisrCSAgcHJldmNoYXIgPSBXT1JEQ0hBUl9QIChkIC0gMSk7CisrCSAgdGhpc2NoYXIgPSBXT1JEQ0hBUl9QIChkKTsKKysJICBpZiAocHJldmNoYXIgIT0gdGhpc2NoYXIpCisrCSAgICBicmVhazsKKysJICBnb3RvIGZhaWw7CisrCX0KKysKKysgICAgICBjYXNlIG5vdHdvcmRib3VuZDoKKysJeworKwkgIGJvb2xlYW4gcHJldmNoYXIsIHRoaXNjaGFyOworKworKwkgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBub3R3b3JkYm91bmQuXG4iKTsKKysJICBpZiAoQVRfU1RSSU5HU19CRUcgKGQpIHx8IEFUX1NUUklOR1NfRU5EIChkKSkKKysJICAgIGdvdG8gZmFpbDsKKysKKysJICBwcmV2Y2hhciA9IFdPUkRDSEFSX1AgKGQgLSAxKTsKKysJICB0aGlzY2hhciA9IFdPUkRDSEFSX1AgKGQpOworKwkgIGlmIChwcmV2Y2hhciAhPSB0aGlzY2hhcikKKysJICAgIGdvdG8gZmFpbDsKKysJICBicmVhazsKKysJfQorKyNlbmRpZgorKworKwljYXNlIHdvcmRiZWc6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyB3b3JkYmVnLlxuIik7CisrCSAgaWYgKCFBVF9TVFJJTkdTX0VORCAoZCkgJiYgV09SRENIQVJfUCAoZCkKKysJICAgICAgJiYgKEFUX1NUUklOR1NfQkVHIChkKSB8fCAhV09SRENIQVJfUCAoZCAtIDEpKSkKKysJICAgIGJyZWFrOworKyAgICAgICAgICBnb3RvIGZhaWw7CisrCisrCWNhc2Ugd29yZGVuZDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIHdvcmRlbmQuXG4iKTsKKysJICBpZiAoIUFUX1NUUklOR1NfQkVHIChkKSAmJiBXT1JEQ0hBUl9QIChkIC0gMSkKKysgICAgICAgICAgICAgICYmIChBVF9TVFJJTkdTX0VORCAoZCkgfHwgIVdPUkRDSEFSX1AgKGQpKSkKKysJICAgIGJyZWFrOworKyAgICAgICAgICBnb3RvIGZhaWw7CisrCisrI2lmZGVmIGVtYWNzCisrICAJY2FzZSBiZWZvcmVfZG90OgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgYmVmb3JlX2RvdC5cbiIpOworKyAJICBpZiAoUFRSX0NIQVJfUE9TICgodW5zaWduZWQgY2hhciAqKSBkKSA+PSBwb2ludCkKKysgIAkgICAgZ290byBmYWlsOworKyAgCSAgYnJlYWs7CisrCisrICAJY2FzZSBhdF9kb3Q6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBhdF9kb3QuXG4iKTsKKysgCSAgaWYgKFBUUl9DSEFSX1BPUyAoKHVuc2lnbmVkIGNoYXIgKikgZCkgIT0gcG9pbnQpCisrICAJICAgIGdvdG8gZmFpbDsKKysgIAkgIGJyZWFrOworKworKyAgCWNhc2UgYWZ0ZXJfZG90OgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgYWZ0ZXJfZG90LlxuIik7CisrICAgICAgICAgIGlmIChQVFJfQ0hBUl9QT1MgKCh1bnNpZ25lZCBjaGFyICopIGQpIDw9IHBvaW50KQorKyAgCSAgICBnb3RvIGZhaWw7CisrICAJICBicmVhazsKKysKKysJY2FzZSBzeW50YXhzcGVjOgorKyAgICAgICAgICBERUJVR19QUklOVDIgKCJFWEVDVVRJTkcgc3ludGF4c3BlYyAlZC5cbiIsIG1jbnQpOworKwkgIG1jbnQgPSAqcCsrOworKwkgIGdvdG8gbWF0Y2hzeW50YXg7CisrCisrICAgICAgICBjYXNlIHdvcmRjaGFyOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgRW1hY3Mgd29yZGNoYXIuXG4iKTsKKysJICBtY250ID0gKGludCkgU3dvcmQ7CisrICAgICAgICBtYXRjaHN5bnRheDoKKysJICBQUkVGRVRDSCAoKTsKKysJICAvKiBDYW4ndCB1c2UgKmQrKyBoZXJlOyBTWU5UQVggbWF5IGJlIGFuIHVuc2FmZSBtYWNyby4gICovCisrCSAgZCsrOworKwkgIGlmIChTWU5UQVggKGRbLTFdKSAhPSAoZW51bSBzeW50YXhjb2RlKSBtY250KQorKwkgICAgZ290byBmYWlsOworKyAgICAgICAgICBTRVRfUkVHU19NQVRDSEVEICgpOworKwkgIGJyZWFrOworKworKwljYXNlIG5vdHN5bnRheHNwZWM6CisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIkVYRUNVVElORyBub3RzeW50YXhzcGVjICVkLlxuIiwgbWNudCk7CisrCSAgbWNudCA9ICpwKys7CisrCSAgZ290byBtYXRjaG5vdHN5bnRheDsKKysKKysgICAgICAgIGNhc2Ugbm90d29yZGNoYXI6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBFbWFjcyBub3R3b3JkY2hhci5cbiIpOworKwkgIG1jbnQgPSAoaW50KSBTd29yZDsKKysgICAgICAgIG1hdGNobm90c3ludGF4OgorKwkgIFBSRUZFVENIICgpOworKwkgIC8qIENhbid0IHVzZSAqZCsrIGhlcmU7IFNZTlRBWCBtYXkgYmUgYW4gdW5zYWZlIG1hY3JvLiAgKi8KKysJICBkKys7CisrCSAgaWYgKFNZTlRBWCAoZFstMV0pID09IChlbnVtIHN5bnRheGNvZGUpIG1jbnQpCisrCSAgICBnb3RvIGZhaWw7CisrCSAgU0VUX1JFR1NfTUFUQ0hFRCAoKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrI2Vsc2UgLyogbm90IGVtYWNzICovCisrCWNhc2Ugd29yZGNoYXI6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBub24tRW1hY3Mgd29yZGNoYXIuXG4iKTsKKysJICBQUkVGRVRDSCAoKTsKKysgICAgICAgICAgaWYgKCFXT1JEQ0hBUl9QIChkKSkKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrCSAgU0VUX1JFR1NfTUFUQ0hFRCAoKTsKKysgICAgICAgICAgZCsrOworKwkgIGJyZWFrOworKworKwljYXNlIG5vdHdvcmRjaGFyOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgbm9uLUVtYWNzIG5vdHdvcmRjaGFyLlxuIik7CisrCSAgUFJFRkVUQ0ggKCk7CisrCSAgaWYgKFdPUkRDSEFSX1AgKGQpKQorKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgICAgU0VUX1JFR1NfTUFUQ0hFRCAoKTsKKysgICAgICAgICAgZCsrOworKwkgIGJyZWFrOworKyNlbmRpZiAvKiBub3QgZW1hY3MgKi8KKysKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgIGFib3J0ICgpOworKwl9CisrICAgICAgY29udGludWU7ICAvKiBTdWNjZXNzZnVsbHkgZXhlY3V0ZWQgb25lIHBhdHRlcm4gY29tbWFuZDsga2VlcCBnb2luZy4gICovCisrCisrCisrICAgIC8qIFdlIGdvdG8gaGVyZSBpZiBhIG1hdGNoaW5nIG9wZXJhdGlvbiBmYWlscy4gKi8KKysgICAgZmFpbDoKKysgICAgICBpZiAoIUZBSUxfU1RBQ0tfRU1QVFkgKCkpCisrCXsgLyogQSByZXN0YXJ0IHBvaW50IGlzIGtub3duLiAgUmVzdG9yZSB0byB0aGF0IHN0YXRlLiAgKi8KKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiXG5GQUlMOlxuIik7CisrICAgICAgICAgIFBPUF9GQUlMVVJFX1BPSU5UIChkLCBwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ZXN0X2FjdGl2ZV9yZWcsIGhpZ2hlc3RfYWN0aXZlX3JlZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3N0YXJ0LCByZWdlbmQsIHJlZ19pbmZvKTsKKysKKysgICAgICAgICAgLyogSWYgdGhpcyBmYWlsdXJlIHBvaW50IGlzIGEgZHVtbXksIHRyeSB0aGUgbmV4dCBvbmUuICAqLworKyAgICAgICAgICBpZiAoIXApCisrCSAgICBnb3RvIGZhaWw7CisrCisrICAgICAgICAgIC8qIElmIHdlIGZhaWxlZCB0byB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCBkb24ndCBleGFtaW5lICpwLiAgKi8KKysJICBhc3NlcnQgKHAgPD0gcGVuZCk7CisrICAgICAgICAgIGlmIChwIDwgcGVuZCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBib29sZWFuIGlzX2FfanVtcF9uID0gZmFsc2U7CisrCisrICAgICAgICAgICAgICAvKiBJZiBmYWlsZWQgdG8gYSBiYWNrd2FyZHMganVtcCB0aGF0J3MgcGFydCBvZiBhIHJlcGV0aXRpb24KKysgICAgICAgICAgICAgICAgIGxvb3AsIG5lZWQgdG8gcG9wIHRoaXMgZmFpbHVyZSBwb2ludCBhbmQgdXNlIHRoZSBuZXh0IG9uZS4gICovCisrICAgICAgICAgICAgICBzd2l0Y2ggKChyZV9vcGNvZGVfdCkgKnApCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY2FzZSBqdW1wX246CisrICAgICAgICAgICAgICAgICAgaXNfYV9qdW1wX24gPSB0cnVlOworKyAgICAgICAgICAgICAgICBjYXNlIG1heWJlX3BvcF9qdW1wOgorKyAgICAgICAgICAgICAgICBjYXNlIHBvcF9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgICAgICAgIGNhc2UganVtcDoKKysgICAgICAgICAgICAgICAgICBwMSA9IHAgKyAxOworKyAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwMSk7CisrICAgICAgICAgICAgICAgICAgcDEgKz0gbWNudDsKKysKKysgICAgICAgICAgICAgICAgICBpZiAoKGlzX2FfanVtcF9uICYmIChyZV9vcGNvZGVfdCkgKnAxID09IHN1Y2NlZWRfbikKKysgICAgICAgICAgICAgICAgICAgICAgfHwgKCFpc19hX2p1bXBfbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHJlX29wY29kZV90KSAqcDEgPT0gb25fZmFpbHVyZV9qdW1wKSkKKysgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgICAvKiBkbyBub3RoaW5nICovIDsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgaWYgKGQgPj0gc3RyaW5nMSAmJiBkIDw9IGVuZDEpCisrCSAgICBkZW5kID0gZW5kX21hdGNoXzE7CisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgYnJlYWs7ICAgLyogTWF0Y2hpbmcgYXQgdGhpcyBzdGFydGluZyBwb2ludCByZWFsbHkgZmFpbHMuICAqLworKyAgICB9IC8qIGZvciAoOzspICovCisrCisrICBpZiAoYmVzdF9yZWdzX3NldCkKKysgICAgZ290byByZXN0b3JlX2Jlc3RfcmVnczsKKysKKysgIEZSRUVfVkFSSUFCTEVTICgpOworKworKyAgcmV0dXJuIC0xOyAgICAgICAgIAkJCS8qIEZhaWx1cmUgdG8gbWF0Y2guICAqLworK30gLyogcmVfbWF0Y2hfMiAqLworKwwKKysvKiBTdWJyb3V0aW5lIGRlZmluaXRpb25zIGZvciByZV9tYXRjaF8yLiAgKi8KKysKKysKKysvKiBXZSBhcmUgcGFzc2VkIFAgcG9pbnRpbmcgdG8gYSByZWdpc3RlciBudW1iZXIgYWZ0ZXIgYSBzdGFydF9tZW1vcnkuCisrCisrICAgUmV0dXJuIHRydWUgaWYgdGhlIHBhdHRlcm4gdXAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgc3RvcF9tZW1vcnkgY2FuCisrICAgbWF0Y2ggdGhlIGVtcHR5IHN0cmluZywgYW5kIGZhbHNlIG90aGVyd2lzZS4KKysKKysgICBJZiB3ZSBmaW5kIHRoZSBtYXRjaGluZyBzdG9wX21lbW9yeSwgc2V0cyBQIHRvIHBvaW50IHRvIG9uZSBwYXN0IGl0cyBudW1iZXIuCisrICAgT3RoZXJ3aXNlLCBzZXRzIFAgdG8gYW4gdW5kZWZpbmVkIGJ5dGUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIEVORC4KKysKKysgICBXZSBkb24ndCBoYW5kbGUgZHVwbGljYXRlcyBwcm9wZXJseSAoeWV0KS4gICovCisrCisrc3RhdGljIGJvb2xlYW4KKytQUkVGSVgoZ3JvdXBfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKFVDSEFSX1QgKipwLCBVQ0hBUl9UICplbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqcmVnX2luZm8pCisreworKyAgaW50IG1jbnQ7CisrICAvKiBQb2ludCB0byBhZnRlciB0aGUgYXJncyB0byB0aGUgc3RhcnRfbWVtb3J5LiAgKi8KKysgIFVDSEFSX1QgKnAxID0gKnAgKyAyOworKworKyAgd2hpbGUgKHAxIDwgZW5kKQorKyAgICB7CisrICAgICAgLyogU2tpcCBvdmVyIG9wY29kZXMgdGhhdCBjYW4gbWF0Y2ggbm90aGluZywgYW5kIHJldHVybiB0cnVlIG9yCisrCSBmYWxzZSwgYXMgYXBwcm9wcmlhdGUsIHdoZW4gd2UgZ2V0IHRvIG9uZSB0aGF0IGNhbid0LCBvciB0byB0aGUKKysgICAgICAgICBtYXRjaGluZyBzdG9wX21lbW9yeS4gICovCisrCisrICAgICAgc3dpdGNoICgocmVfb3Bjb2RlX3QpICpwMSkKKysgICAgICAgIHsKKysgICAgICAgIC8qIENvdWxkIGJlIGVpdGhlciBhIGxvb3Agb3IgYSBzZXJpZXMgb2YgYWx0ZXJuYXRpdmVzLiAgKi8KKysgICAgICAgIGNhc2Ugb25fZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICBwMSsrOworKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcDEpOworKworKyAgICAgICAgICAvKiBJZiB0aGUgbmV4dCBvcGVyYXRpb24gaXMgbm90IGEganVtcCBiYWNrd2FyZHMgaW4gdGhlCisrCSAgICAgcGF0dGVybi4gICovCisrCisrCSAgaWYgKG1jbnQgPj0gMCkKKysJICAgIHsKKysgICAgICAgICAgICAgIC8qIEdvIHRocm91Z2ggdGhlIG9uX2ZhaWx1cmVfanVtcHMgb2YgdGhlIGFsdGVybmF0aXZlcywKKysgICAgICAgICAgICAgICAgIHNlZWluZyBpZiBhbnkgb2YgdGhlIGFsdGVybmF0aXZlcyBjYW5ub3QgbWF0Y2ggbm90aGluZy4KKysgICAgICAgICAgICAgICAgIFRoZSBsYXN0IGFsdGVybmF0aXZlIHN0YXJ0cyB3aXRoIG9ubHkgYSBqdW1wLAorKyAgICAgICAgICAgICAgICAgd2hlcmVhcyB0aGUgcmVzdCBzdGFydCB3aXRoIG9uX2ZhaWx1cmVfanVtcCBhbmQgZW5kCisrICAgICAgICAgICAgICAgICB3aXRoIGEganVtcCwgZS5nLiwgaGVyZSBpcyB0aGUgcGF0dGVybiBmb3IgYGF8YnxjJzoKKysKKysgICAgICAgICAgICAgICAgIC9vbl9mYWlsdXJlX2p1bXAvMC82L2V4YWN0bi8xL2EvanVtcF9wYXN0X2FsdC8wLzYKKysgICAgICAgICAgICAgICAgIC9vbl9mYWlsdXJlX2p1bXAvMC82L2V4YWN0bi8xL2IvanVtcF9wYXN0X2FsdC8wLzMKKysgICAgICAgICAgICAgICAgIC9leGFjdG4vMS9jCisrCisrICAgICAgICAgICAgICAgICBTbywgd2UgaGF2ZSB0byBmaXJzdCBnbyB0aHJvdWdoIHRoZSBmaXJzdCAobi0xKQorKyAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVzIGFuZCB0aGVuIGRlYWwgd2l0aCB0aGUgbGFzdCBvbmUgc2VwYXJhdGVseS4gICovCisrCisrCisrICAgICAgICAgICAgICAvKiBEZWFsIHdpdGggdGhlIGZpcnN0IChuLTEpIGFsdGVybmF0aXZlcywgd2hpY2ggc3RhcnQKKysgICAgICAgICAgICAgICAgIHdpdGggYW4gb25fZmFpbHVyZV9qdW1wIChzZWUgYWJvdmUpIHRoYXQganVtcHMgdG8gcmlnaHQKKysgICAgICAgICAgICAgICAgIHBhc3QgYSBqdW1wX3Bhc3RfYWx0LiAgKi8KKysKKysgICAgICAgICAgICAgIHdoaWxlICgocmVfb3Bjb2RlX3QpIHAxW21jbnQtKDErT0ZGU0VUX0FERFJFU1NfU0laRSldID09CisrCQkgICAgIGp1bXBfcGFzdF9hbHQpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAvKiBgbWNudCcgaG9sZHMgaG93IG1hbnkgYnl0ZXMgbG9uZyB0aGUgYWx0ZXJuYXRpdmUKKysgICAgICAgICAgICAgICAgICAgICBpcywgaW5jbHVkaW5nIHRoZSBlbmRpbmcgYGp1bXBfcGFzdF9hbHQnIGFuZAorKyAgICAgICAgICAgICAgICAgICAgIGl0cyBudW1iZXIuICAqLworKworKyAgICAgICAgICAgICAgICAgIGlmICghUFJFRklYKGFsdF9tYXRjaF9udWxsX3N0cmluZ19wKSAocDEsIHAxICsgbWNudCAtCisrCQkJCQkJKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKSwKKysJCQkJCQlyZWdfaW5mbykpCisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrCisrICAgICAgICAgICAgICAgICAgLyogTW92ZSB0byByaWdodCBhZnRlciB0aGlzIGFsdGVybmF0aXZlLCBpbmNsdWRpbmcgdGhlCisrCQkgICAgIGp1bXBfcGFzdF9hbHQuICAqLworKyAgICAgICAgICAgICAgICAgIHAxICs9IG1jbnQ7CisrCisrICAgICAgICAgICAgICAgICAgLyogQnJlYWsgaWYgaXQncyB0aGUgYmVnaW5uaW5nIG9mIGFuIG4tdGggYWx0ZXJuYXRpdmUKKysgICAgICAgICAgICAgICAgICAgICB0aGF0IGRvZXNuJ3QgYmVnaW4gd2l0aCBhbiBvbl9mYWlsdXJlX2p1bXAuICAqLworKyAgICAgICAgICAgICAgICAgIGlmICgocmVfb3Bjb2RlX3QpICpwMSAhPSBvbl9mYWlsdXJlX2p1bXApCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysKKysJCSAgLyogU3RpbGwgaGF2ZSB0byBjaGVjayB0aGF0IGl0J3Mgbm90IGFuIG4tdGgKKysJCSAgICAgYWx0ZXJuYXRpdmUgdGhhdCBzdGFydHMgd2l0aCBhbiBvbl9mYWlsdXJlX2p1bXAuICAqLworKwkJICBwMSsrOworKyAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwMSk7CisrICAgICAgICAgICAgICAgICAgaWYgKChyZV9vcGNvZGVfdCkgcDFbbWNudC0oMStPRkZTRVRfQUREUkVTU19TSVpFKV0gIT0KKysJCSAgICAgIGp1bXBfcGFzdF9hbHQpCisrICAgICAgICAgICAgICAgICAgICB7CisrCQkgICAgICAvKiBHZXQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbi10aCBhbHRlcm5hdGl2ZS4gICovCisrICAgICAgICAgICAgICAgICAgICAgIHAxIC09IDEgKyBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgLyogRGVhbCB3aXRoIHRoZSBsYXN0IGFsdGVybmF0aXZlOiBnbyBiYWNrIGFuZCBnZXQgbnVtYmVyCisrICAgICAgICAgICAgICAgICBvZiB0aGUgYGp1bXBfcGFzdF9hbHQnIGp1c3QgYmVmb3JlIGl0LiAgYG1jbnQnIGNvbnRhaW5zCisrICAgICAgICAgICAgICAgICB0aGUgbGVuZ3RoIG9mIHRoZSBhbHRlcm5hdGl2ZS4gICovCisrICAgICAgICAgICAgICBFWFRSQUNUX05VTUJFUiAobWNudCwgcDEgLSBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysKKysgICAgICAgICAgICAgIGlmICghUFJFRklYKGFsdF9tYXRjaF9udWxsX3N0cmluZ19wKSAocDEsIHAxICsgbWNudCwgcmVnX2luZm8pKQorKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrCisrICAgICAgICAgICAgICBwMSArPSBtY250OwkvKiBHZXQgcGFzdCB0aGUgbi10aCBhbHRlcm5hdGl2ZS4gICovCisrICAgICAgICAgICAgfSAvKiBpZiBtY250ID4gMCAqLworKyAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgIGNhc2Ugc3RvcF9tZW1vcnk6CisrCSAgYXNzZXJ0IChwMVsxXSA9PSAqKnApOworKyAgICAgICAgICAqcCA9IHAxICsgMjsKKysgICAgICAgICAgcmV0dXJuIHRydWU7CisrCisrCisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICBpZiAoIVBSRUZJWChjb21tb25fb3BfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKCZwMSwgZW5kLCByZWdfaW5mbykpCisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICB9IC8qIHdoaWxlIHAxIDwgZW5kICovCisrCisrICByZXR1cm4gZmFsc2U7CisrfSAvKiBncm91cF9tYXRjaF9udWxsX3N0cmluZ19wICovCisrCisrCisrLyogU2ltaWxhciB0byBncm91cF9tYXRjaF9udWxsX3N0cmluZ19wLCBidXQgZG9lc24ndCBkZWFsIHdpdGggYWx0ZXJuYXRpdmVzOgorKyAgIEl0IGV4cGVjdHMgUCB0byBiZSB0aGUgZmlyc3QgYnl0ZSBvZiBhIHNpbmdsZSBhbHRlcm5hdGl2ZSBhbmQgRU5EIG9uZQorKyAgIGJ5dGUgcGFzdCB0aGUgbGFzdC4gVGhlIGFsdGVybmF0aXZlIGNhbiBjb250YWluIGdyb3Vwcy4gICovCisrCisrc3RhdGljIGJvb2xlYW4KKytQUkVGSVgoYWx0X21hdGNoX251bGxfc3RyaW5nX3ApIChVQ0hBUl9UICpwLCBVQ0hBUl9UICplbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKnJlZ19pbmZvKQorK3sKKysgIGludCBtY250OworKyAgVUNIQVJfVCAqcDEgPSBwOworKworKyAgd2hpbGUgKHAxIDwgZW5kKQorKyAgICB7CisrICAgICAgLyogU2tpcCBvdmVyIG9wY29kZXMgdGhhdCBjYW4gbWF0Y2ggbm90aGluZywgYW5kIGJyZWFrIHdoZW4gd2UgZ2V0CisrICAgICAgICAgdG8gb25lIHRoYXQgY2FuJ3QuICAqLworKworKyAgICAgIHN3aXRjaCAoKHJlX29wY29kZV90KSAqcDEpCisrICAgICAgICB7CisrCS8qIEl0J3MgYSBsb29wLiAgKi8KKysgICAgICAgIGNhc2Ugb25fZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICBwMSsrOworKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcDEpOworKyAgICAgICAgICBwMSArPSBtY250OworKyAgICAgICAgICBicmVhazsKKysKKysJZGVmYXVsdDoKKysgICAgICAgICAgaWYgKCFQUkVGSVgoY29tbW9uX29wX21hdGNoX251bGxfc3RyaW5nX3ApICgmcDEsIGVuZCwgcmVnX2luZm8pKQorKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysgICAgfSAgLyogd2hpbGUgcDEgPCBlbmQgKi8KKysKKysgIHJldHVybiB0cnVlOworK30gLyogYWx0X21hdGNoX251bGxfc3RyaW5nX3AgKi8KKysKKysKKysvKiBEZWFscyB3aXRoIHRoZSBvcHMgY29tbW9uIHRvIGdyb3VwX21hdGNoX251bGxfc3RyaW5nX3AgYW5kCisrICAgYWx0X21hdGNoX251bGxfc3RyaW5nX3AuCisrCisrICAgU2V0cyBQIHRvIG9uZSBhZnRlciB0aGUgb3AgYW5kIGl0cyBhcmd1bWVudHMsIGlmIGFueS4gICovCisrCisrc3RhdGljIGJvb2xlYW4KKytQUkVGSVgoY29tbW9uX29wX21hdGNoX251bGxfc3RyaW5nX3ApIChVQ0hBUl9UICoqcCwgVUNIQVJfVCAqZW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpyZWdfaW5mbykKKyt7CisrICBpbnQgbWNudDsKKysgIGJvb2xlYW4gcmV0OworKyAgaW50IHJlZ19ubzsKKysgIFVDSEFSX1QgKnAxID0gKnA7CisrCisrICBzd2l0Y2ggKChyZV9vcGNvZGVfdCkgKnAxKyspCisrICAgIHsKKysgICAgY2FzZSBub19vcDoKKysgICAgY2FzZSBiZWdsaW5lOgorKyAgICBjYXNlIGVuZGxpbmU6CisrICAgIGNhc2UgYmVnYnVmOgorKyAgICBjYXNlIGVuZGJ1ZjoKKysgICAgY2FzZSB3b3JkYmVnOgorKyAgICBjYXNlIHdvcmRlbmQ6CisrICAgIGNhc2Ugd29yZGJvdW5kOgorKyAgICBjYXNlIG5vdHdvcmRib3VuZDoKKysjaWZkZWYgZW1hY3MKKysgICAgY2FzZSBiZWZvcmVfZG90OgorKyAgICBjYXNlIGF0X2RvdDoKKysgICAgY2FzZSBhZnRlcl9kb3Q6CisrI2VuZGlmCisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2Ugc3RhcnRfbWVtb3J5OgorKyAgICAgIHJlZ19ubyA9ICpwMTsKKysgICAgICBhc3NlcnQgKHJlZ19ubyA+IDAgJiYgcmVnX25vIDw9IE1BWF9SRUdOVU0pOworKyAgICAgIHJldCA9IFBSRUZJWChncm91cF9tYXRjaF9udWxsX3N0cmluZ19wKSAoJnAxLCBlbmQsIHJlZ19pbmZvKTsKKysKKysgICAgICAvKiBIYXZlIHRvIHNldCB0aGlzIGhlcmUgaW4gY2FzZSB3ZSdyZSBjaGVja2luZyBhIGdyb3VwIHdoaWNoCisrICAgICAgICAgY29udGFpbnMgYSBncm91cCBhbmQgYSBiYWNrIHJlZmVyZW5jZSB0byBpdC4gICovCisrCisrICAgICAgaWYgKFJFR19NQVRDSF9OVUxMX1NUUklOR19QIChyZWdfaW5mb1tyZWdfbm9dKSA9PSBNQVRDSF9OVUxMX1VOU0VUX1ZBTFVFKQorKyAgICAgICAgUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvW3JlZ19ub10pID0gcmV0OworKworKyAgICAgIGlmICghcmV0KQorKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgIGJyZWFrOworKworKyAgICAvKiBJZiB0aGlzIGlzIGFuIG9wdGltaXplZCBzdWNjZWVkX24gZm9yIHplcm8gdGltZXMsIG1ha2UgdGhlIGp1bXAuICAqLworKyAgICBjYXNlIGp1bXA6CisrICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHAxKTsKKysgICAgICBpZiAobWNudCA+PSAwKQorKyAgICAgICAgcDEgKz0gbWNudDsKKysgICAgICBlbHNlCisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2Ugc3VjY2VlZF9uOgorKyAgICAgIC8qIEdldCB0byB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHN1Y2NlZWQuICAqLworKyAgICAgIHAxICs9IE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHAxKTsKKysKKysgICAgICBpZiAobWNudCA9PSAwKQorKyAgICAgICAgeworKyAgICAgICAgICBwMSAtPSAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHAxKTsKKysgICAgICAgICAgcDEgKz0gbWNudDsKKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgZHVwbGljYXRlOgorKyAgICAgIGlmICghUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvWypwMV0pKQorKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIHNldF9udW1iZXJfYXQ6CisrICAgICAgcDEgKz0gMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgLyogQWxsIG90aGVyIG9wY29kZXMgbWVhbiB3ZSBjYW5ub3QgbWF0Y2ggdGhlIGVtcHR5IHN0cmluZy4gICovCisrICAgICAgcmV0dXJuIGZhbHNlOworKyAgfQorKworKyAgKnAgPSBwMTsKKysgIHJldHVybiB0cnVlOworK30gLyogY29tbW9uX29wX21hdGNoX251bGxfc3RyaW5nX3AgKi8KKysKKysKKysvKiBSZXR1cm4gemVybyBpZiBUUkFOU0xBVEVbUzFdIGFuZCBUUkFOU0xBVEVbUzJdIGFyZSBpZGVudGljYWwgZm9yIExFTgorKyAgIGJ5dGVzOyBub256ZXJvIG90aGVyd2lzZS4gICovCisrCisrc3RhdGljIGludAorK1BSRUZJWChiY21wX3RyYW5zbGF0ZSkgKGNvbnN0IENIQVJfVCAqczEsIGNvbnN0IENIQVJfVCAqczIsIHJlZ2lzdGVyIGludCBsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnNsYXRlKQorK3sKKysgIHJlZ2lzdGVyIGNvbnN0IFVDSEFSX1QgKnAxID0gKGNvbnN0IFVDSEFSX1QgKikgczE7CisrICByZWdpc3RlciBjb25zdCBVQ0hBUl9UICpwMiA9IChjb25zdCBVQ0hBUl9UICopIHMyOworKyAgd2hpbGUgKGxlbikKKysgICAgeworKyNpZmRlZiBXQ0hBUgorKyAgICAgIGlmICgoKCpwMTw9MHhmZik/dHJhbnNsYXRlWypwMSsrXToqcDErKykKKysJICAhPSAoKCpwMjw9MHhmZik/dHJhbnNsYXRlWypwMisrXToqcDIrKykpCisrCXJldHVybiAxOworKyNlbHNlIC8qIEJZVEUgKi8KKysgICAgICBpZiAodHJhbnNsYXRlWypwMSsrXSAhPSB0cmFuc2xhdGVbKnAyKytdKSByZXR1cm4gMTsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysgICAgICBsZW4tLTsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorKwwKKysKKysjZWxzZSAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworKy8qIEVudHJ5IHBvaW50cyBmb3IgR05VIGNvZGUuICAqLworKworKy8qIHJlX2NvbXBpbGVfcGF0dGVybiBpcyB0aGUgR05VIHJlZ3VsYXIgZXhwcmVzc2lvbiBjb21waWxlcjogaXQKKysgICBjb21waWxlcyBQQVRURVJOIChvZiBsZW5ndGggU0laRSkgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiBCVUZQLgorKyAgIFJldHVybnMgMCBpZiB0aGUgcGF0dGVybiB3YXMgdmFsaWQsIG90aGVyd2lzZSBhbiBlcnJvciBzdHJpbmcuCisrCisrICAgQXNzdW1lcyB0aGUgYGFsbG9jYXRlZCcgKGFuZCBwZXJoYXBzIGBidWZmZXInKSBhbmQgYHRyYW5zbGF0ZScgZmllbGRzCisrICAgYXJlIHNldCBpbiBCVUZQIG9uIGVudHJ5LgorKworKyAgIFdlIGNhbGwgcmVnZXhfY29tcGlsZSB0byBkbyB0aGUgYWN0dWFsIGNvbXBpbGF0aW9uLiAgKi8KKysKKytjb25zdCBjaGFyICoKKytyZV9jb21waWxlX3BhdHRlcm4gKGNvbnN0IGNoYXIgKnBhdHRlcm4sIHNpemVfdCBsZW5ndGgsCisrICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApCisreworKyAgcmVnX2VycmNvZGVfdCByZXQ7CisrCisrICAvKiBHTlUgY29kZSBpcyB3cml0dGVuIHRvIGFzc3VtZSBhdCBsZWFzdCBSRV9OUkVHUyByZWdpc3RlcnMgd2lsbCBiZSBzZXQKKysgICAgIChhbmQgYXQgbGVhc3Qgb25lIGV4dHJhIHdpbGwgYmUgLTEpLiAgKi8KKysgIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID0gUkVHU19VTkFMTE9DQVRFRDsKKysKKysgIC8qIEFuZCBHTlUgY29kZSBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRvIGdldCByZWdpc3RlciBpbmZvcm1hdGlvbgorKyAgICAgYnkgcGFzc2luZyBudWxsIGZvciB0aGUgUkVHUyBhcmd1bWVudCB0byByZV9tYXRjaCwgZXRjLiwgbm90IGJ5CisrICAgICBzZXR0aW5nIG5vX3N1Yi4gICovCisrICBidWZwLT5ub19zdWIgPSAwOworKworKyAgLyogTWF0Y2ggYW5jaG9ycyBhdCBuZXdsaW5lLiAgKi8KKysgIGJ1ZnAtPm5ld2xpbmVfYW5jaG9yID0gMTsKKysKKysjIGlmZGVmIE1CU19TVVBQT1JUCisrICBpZiAoTUJfQ1VSX01BWCAhPSAxKQorKyAgICByZXQgPSB3Y3NfcmVnZXhfY29tcGlsZSAocGF0dGVybiwgbGVuZ3RoLCByZV9zeW50YXhfb3B0aW9ucywgYnVmcCk7CisrICBlbHNlCisrIyBlbmRpZgorKyAgICByZXQgPSBieXRlX3JlZ2V4X2NvbXBpbGUgKHBhdHRlcm4sIGxlbmd0aCwgcmVfc3ludGF4X29wdGlvbnMsIGJ1ZnApOworKworKyAgaWYgKCFyZXQpCisrICAgIHJldHVybiBOVUxMOworKyAgcmV0dXJuIGdldHRleHQgKHJlX2Vycm9yX21zZ2lkWyhpbnQpIHJldF0pOworK30KKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlX2NvbXBpbGVfcGF0dGVybiwgcmVfY29tcGlsZV9wYXR0ZXJuKQorKyNlbmRpZgorKwwKKysvKiBFbnRyeSBwb2ludHMgY29tcGF0aWJsZSB3aXRoIDQuMiBCU0QgcmVnZXggbGlicmFyeS4gIFdlIGRvbid0IGRlZmluZQorKyAgIHRoZW0gdW5sZXNzIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQuICAqLworKworKyNpZiBkZWZpbmVkIF9SRUdFWF9SRV9DT01QIHx8IGRlZmluZWQgX0xJQkMKKysKKysvKiBCU0QgaGFzIG9uZSBhbmQgb25seSBvbmUgcGF0dGVybiBidWZmZXIuICAqLworK3N0YXRpYyBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgcmVfY29tcF9idWY7CisrCisrY2hhciAqCisrI2lmZGVmIF9MSUJDCisrLyogTWFrZSB0aGVzZSBkZWZpbml0aW9ucyB3ZWFrIGluIGxpYmMsIHNvIFBPU0lYIHByb2dyYW1zIGNhbiByZWRlZmluZQorKyAgIHRoZXNlIG5hbWVzIGlmIHRoZXkgZG9uJ3QgdXNlIG91ciBmdW5jdGlvbnMsIGFuZCBzdGlsbCB1c2UKKysgICByZWdjb21wL3JlZ2V4ZWMgYmVsb3cgd2l0aG91dCBsaW5rIGVycm9ycy4gICovCisrd2Vha19mdW5jdGlvbgorKyNlbmRpZgorK3JlX2NvbXAgKGNvbnN0IGNoYXIgKnMpCisreworKyAgcmVnX2VycmNvZGVfdCByZXQ7CisrCisrICBpZiAoIXMpCisrICAgIHsKKysgICAgICBpZiAoIXJlX2NvbXBfYnVmLmJ1ZmZlcikKKysJcmV0dXJuIChjaGFyICopIGdldHRleHQgKCJObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24iKTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgaWYgKCFyZV9jb21wX2J1Zi5idWZmZXIpCisrICAgIHsKKysgICAgICByZV9jb21wX2J1Zi5idWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSBtYWxsb2MgKDIwMCk7CisrICAgICAgaWYgKHJlX2NvbXBfYnVmLmJ1ZmZlciA9PSBOVUxMKQorKyAgICAgICAgcmV0dXJuIChjaGFyICopIGdldHRleHQgKHJlX2Vycm9yX21zZ2lkWyhpbnQpIFJFR19FU1BBQ0VdKTsKKysgICAgICByZV9jb21wX2J1Zi5hbGxvY2F0ZWQgPSAyMDA7CisrCisrICAgICAgcmVfY29tcF9idWYuZmFzdG1hcCA9IChjaGFyICopIG1hbGxvYyAoMSA8PCBCWVRFV0lEVEgpOworKyAgICAgIGlmIChyZV9jb21wX2J1Zi5mYXN0bWFwID09IE5VTEwpCisrCXJldHVybiAoY2hhciAqKSBnZXR0ZXh0IChyZV9lcnJvcl9tc2dpZFsoaW50KSBSRUdfRVNQQUNFXSk7CisrICAgIH0KKysKKysgIC8qIFNpbmNlIGByZV9leGVjJyBhbHdheXMgcGFzc2VzIE5VTEwgZm9yIHRoZSBgcmVncycgYXJndW1lbnQsIHdlCisrICAgICBkb24ndCBuZWVkIHRvIGluaXRpYWxpemUgdGhlIHBhdHRlcm4gYnVmZmVyIGZpZWxkcyB3aGljaCBhZmZlY3QgaXQuICAqLworKworKyAgLyogTWF0Y2ggYW5jaG9ycyBhdCBuZXdsaW5lcy4gICovCisrICByZV9jb21wX2J1Zi5uZXdsaW5lX2FuY2hvciA9IDE7CisrCisrIyBpZmRlZiBNQlNfU1VQUE9SVAorKyAgaWYgKE1CX0NVUl9NQVggIT0gMSkKKysgICAgcmV0ID0gd2NzX3JlZ2V4X2NvbXBpbGUgKHMsIHN0cmxlbiAocyksIHJlX3N5bnRheF9vcHRpb25zLCAmcmVfY29tcF9idWYpOworKyAgZWxzZQorKyMgZW5kaWYKKysgICAgcmV0ID0gYnl0ZV9yZWdleF9jb21waWxlIChzLCBzdHJsZW4gKHMpLCByZV9zeW50YXhfb3B0aW9ucywgJnJlX2NvbXBfYnVmKTsKKysKKysgIGlmICghcmV0KQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8qIFllcywgd2UncmUgZGlzY2FyZGluZyBgY29uc3QnIGhlcmUgaWYgIUhBVkVfTElCSU5UTC4gICovCisrICByZXR1cm4gKGNoYXIgKikgZ2V0dGV4dCAocmVfZXJyb3JfbXNnaWRbKGludCkgcmV0XSk7CisrfQorKworKworK2ludAorKyNpZmRlZiBfTElCQworK3dlYWtfZnVuY3Rpb24KKysjZW5kaWYKKytyZV9leGVjIChjb25zdCBjaGFyICpzKQorK3sKKysgIGNvbnN0IGludCBsZW4gPSBzdHJsZW4gKHMpOworKyAgcmV0dXJuCisrICAgIDAgPD0gcmVfc2VhcmNoICgmcmVfY29tcF9idWYsIHMsIGxlbiwgMCwgbGVuLCAoc3RydWN0IHJlX3JlZ2lzdGVycyAqKSAwKTsKKyt9CisrCisrI2VuZGlmIC8qIF9SRUdFWF9SRV9DT01QICovCisrDAorKy8qIFBPU0lYLjIgZnVuY3Rpb25zLiAgRG9uJ3QgZGVmaW5lIHRoZXNlIGZvciBFbWFjcy4gICovCisrCisrI2lmbmRlZiBlbWFjcworKworKy8qIHJlZ2NvbXAgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYXMgYSBzdHJpbmcgYW5kIGNvbXBpbGVzIGl0LgorKworKyAgIFBSRUcgaXMgYSByZWdleF90ICouICBXZSBkbyBub3QgZXhwZWN0IGFueSBmaWVsZHMgdG8gYmUgaW5pdGlhbGl6ZWQsCisrICAgc2luY2UgUE9TSVggc2F5cyB3ZSBzaG91bGRuJ3QuICBUaHVzLCB3ZSBzZXQKKysKKysgICAgIGBidWZmZXInIHRvIHRoZSBjb21waWxlZCBwYXR0ZXJuOworKyAgICAgYHVzZWQnIHRvIHRoZSBsZW5ndGggb2YgdGhlIGNvbXBpbGVkIHBhdHRlcm47CisrICAgICBgc3ludGF4JyB0byBSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQgaWYgdGhlCisrICAgICAgIFJFR19FWFRFTkRFRCBiaXQgaW4gQ0ZMQUdTIGlzIHNldDsgb3RoZXJ3aXNlLCB0bworKyAgICAgICBSRV9TWU5UQVhfUE9TSVhfQkFTSUM7CisrICAgICBgbmV3bGluZV9hbmNob3InIHRvIFJFR19ORVdMSU5FIGJlaW5nIHNldCBpbiBDRkxBR1M7CisrICAgICBgZmFzdG1hcCcgdG8gYW4gYWxsb2NhdGVkIHNwYWNlIGZvciB0aGUgZmFzdG1hcDsKKysgICAgIGBmYXN0bWFwX2FjY3VyYXRlJyB0byB6ZXJvOworKyAgICAgYHJlX25zdWInIHRvIHRoZSBudW1iZXIgb2Ygc3ViZXhwcmVzc2lvbnMgaW4gUEFUVEVSTi4KKysKKysgICBQQVRURVJOIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBwYXR0ZXJuIHN0cmluZy4KKysKKysgICBDRkxBR1MgaXMgYSBzZXJpZXMgb2YgYml0cyB3aGljaCBhZmZlY3QgY29tcGlsYXRpb24uCisrCisrICAgICBJZiBSRUdfRVhURU5ERUQgaXMgc2V0LCB3ZSB1c2UgUE9TSVggZXh0ZW5kZWQgc3ludGF4OyBvdGhlcndpc2UsIHdlCisrICAgICB1c2UgUE9TSVggYmFzaWMgc3ludGF4LgorKworKyAgICAgSWYgUkVHX05FV0xJTkUgaXMgc2V0LCB0aGVuIC4gYW5kIFteLi4uXSBkb24ndCBtYXRjaCBuZXdsaW5lLgorKyAgICAgQWxzbywgcmVnZXhlYyB3aWxsIHRyeSBhIG1hdGNoIGJlZ2lubmluZyBhZnRlciBldmVyeSBuZXdsaW5lLgorKworKyAgICAgSWYgUkVHX0lDQVNFIGlzIHNldCwgdGhlbiB3ZSBjb25zaWRlcnMgdXBwZXItIGFuZCBsb3dlcmNhc2UKKysgICAgIHZlcnNpb25zIG9mIGxldHRlcnMgdG8gYmUgZXF1aXZhbGVudCB3aGVuIG1hdGNoaW5nLgorKworKyAgICAgSWYgUkVHX05PU1VCIGlzIHNldCwgdGhlbiB3aGVuIFBSRUcgaXMgcGFzc2VkIHRvIHJlZ2V4ZWMsIHRoYXQKKysgICAgIHJvdXRpbmUgd2lsbCByZXBvcnQgb25seSBzdWNjZXNzIG9yIGZhaWx1cmUsIGFuZCBub3RoaW5nIGFib3V0IHRoZQorKyAgICAgcmVnaXN0ZXJzLgorKworKyAgIEl0IHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgbm9uemVybyBpZiBpdCBkb2Vzbid0LiAgKFNlZSByZWdleC5oIGZvcgorKyAgIHRoZSByZXR1cm4gY29kZXMgYW5kIHRoZWlyIG1lYW5pbmdzLikgICovCisrCisraW50CisrcmVnY29tcCAocmVnZXhfdCAqcHJlZywgY29uc3QgY2hhciAqcGF0dGVybiwgaW50IGNmbGFncykKKyt7CisrICByZWdfZXJyY29kZV90IHJldDsKKysgIHJlZ19zeW50YXhfdCBzeW50YXgKKysgICAgPSAoY2ZsYWdzICYgUkVHX0VYVEVOREVEKSA/CisrICAgICAgUkVfU1lOVEFYX1BPU0lYX0VYVEVOREVEIDogUkVfU1lOVEFYX1BPU0lYX0JBU0lDOworKworKyAgLyogcmVnZXhfY29tcGlsZSB3aWxsIGFsbG9jYXRlIHRoZSBzcGFjZSBmb3IgdGhlIGNvbXBpbGVkIHBhdHRlcm4uICAqLworKyAgcHJlZy0+YnVmZmVyID0gMDsKKysgIHByZWctPmFsbG9jYXRlZCA9IDA7CisrICBwcmVnLT51c2VkID0gMDsKKysKKysgIC8qIFRyeSB0byBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGZhc3RtYXAuICAqLworKyAgcHJlZy0+ZmFzdG1hcCA9IChjaGFyICopIG1hbGxvYyAoMSA8PCBCWVRFV0lEVEgpOworKworKyAgaWYgKGNmbGFncyAmIFJFR19JQ0FTRSkKKysgICAgeworKyAgICAgIGludCBpOworKworKyAgICAgIHByZWctPnRyYW5zbGF0ZQorKwk9IChSRV9UUkFOU0xBVEVfVFlQRSkgbWFsbG9jIChDSEFSX1NFVF9TSVpFCisrCQkJCSAgICAgICogc2l6ZW9mICgqKFJFX1RSQU5TTEFURV9UWVBFKTApKTsKKysgICAgICBpZiAocHJlZy0+dHJhbnNsYXRlID09IE5VTEwpCisrICAgICAgICByZXR1cm4gKGludCkgUkVHX0VTUEFDRTsKKysKKysgICAgICAvKiBNYXAgdXBwZXJjYXNlIGNoYXJhY3RlcnMgdG8gY29ycmVzcG9uZGluZyBsb3dlcmNhc2Ugb25lcy4gICovCisrICAgICAgZm9yIChpID0gMDsgaSA8IENIQVJfU0VUX1NJWkU7IGkrKykKKysgICAgICAgIHByZWctPnRyYW5zbGF0ZVtpXSA9IElTVVBQRVIgKGkpID8gVE9MT1dFUiAoaSkgOiBpOworKyAgICB9CisrICBlbHNlCisrICAgIHByZWctPnRyYW5zbGF0ZSA9IE5VTEw7CisrCisrICAvKiBJZiBSRUdfTkVXTElORSBpcyBzZXQsIG5ld2xpbmVzIGFyZSB0cmVhdGVkIGRpZmZlcmVudGx5LiAgKi8KKysgIGlmIChjZmxhZ3MgJiBSRUdfTkVXTElORSkKKysgICAgeyAvKiBSRUdfTkVXTElORSBpbXBsaWVzIG5laXRoZXIgLiBub3IgW14uLi5dIG1hdGNoIG5ld2xpbmUuICAqLworKyAgICAgIHN5bnRheCAmPSB+UkVfRE9UX05FV0xJTkU7CisrICAgICAgc3ludGF4IHw9IFJFX0hBVF9MSVNUU19OT1RfTkVXTElORTsKKysgICAgICAvKiBJdCBhbHNvIGNoYW5nZXMgdGhlIG1hdGNoaW5nIGJlaGF2aW9yLiAgKi8KKysgICAgICBwcmVnLT5uZXdsaW5lX2FuY2hvciA9IDE7CisrICAgIH0KKysgIGVsc2UKKysgICAgcHJlZy0+bmV3bGluZV9hbmNob3IgPSAwOworKworKyAgcHJlZy0+bm9fc3ViID0gISEoY2ZsYWdzICYgUkVHX05PU1VCKTsKKysKKysgIC8qIFBPU0lYIHNheXMgYSBudWxsIGNoYXJhY3RlciBpbiB0aGUgcGF0dGVybiB0ZXJtaW5hdGVzIGl0LCBzbyB3ZQorKyAgICAgY2FuIHVzZSBzdHJsZW4gaGVyZSBpbiBjb21waWxpbmcgdGhlIHBhdHRlcm4uICAqLworKyMgaWZkZWYgTUJTX1NVUFBPUlQKKysgIGlmIChNQl9DVVJfTUFYICE9IDEpCisrICAgIHJldCA9IHdjc19yZWdleF9jb21waWxlIChwYXR0ZXJuLCBzdHJsZW4gKHBhdHRlcm4pLCBzeW50YXgsIHByZWcpOworKyAgZWxzZQorKyMgZW5kaWYKKysgICAgcmV0ID0gYnl0ZV9yZWdleF9jb21waWxlIChwYXR0ZXJuLCBzdHJsZW4gKHBhdHRlcm4pLCBzeW50YXgsIHByZWcpOworKworKyAgLyogUE9TSVggZG9lc24ndCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFuIHVubWF0Y2hlZCBvcGVuLWdyb3VwIGFuZCBhbgorKyAgICAgdW5tYXRjaGVkIGNsb3NlLWdyb3VwOiBib3RoIGFyZSBSRUdfRVBBUkVOLiAgKi8KKysgIGlmIChyZXQgPT0gUkVHX0VSUEFSRU4pIHJldCA9IFJFR19FUEFSRU47CisrCisrICBpZiAocmV0ID09IFJFR19OT0VSUk9SICYmIHByZWctPmZhc3RtYXApCisrICAgIHsKKysgICAgICAvKiBDb21wdXRlIHRoZSBmYXN0bWFwIG5vdywgc2luY2UgcmVnZXhlYyBjYW5ub3QgbW9kaWZ5IHRoZSBwYXR0ZXJuCisrCSBidWZmZXIuICAqLworKyAgICAgIGlmIChyZV9jb21waWxlX2Zhc3RtYXAgKHByZWcpID09IC0yKQorKwl7CisrCSAgLyogU29tZSBlcnJvciBvY2N1cnJlZCB3aGlsZSBjb21wdXRpbmcgdGhlIGZhc3RtYXAsIGp1c3QgZm9yZ2V0CisrCSAgICAgYWJvdXQgaXQuICAqLworKwkgIGZyZWUgKHByZWctPmZhc3RtYXApOworKwkgIHByZWctPmZhc3RtYXAgPSBOVUxMOworKwl9CisrICAgIH0KKysKKysgIHJldHVybiAoaW50KSByZXQ7CisrfQorKyNpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVnY29tcCwgcmVnY29tcCkKKysjZW5kaWYKKysKKysKKysvKiByZWdleGVjIHNlYXJjaGVzIGZvciBhIGdpdmVuIHBhdHRlcm4sIHNwZWNpZmllZCBieSBQUkVHLCBpbiB0aGUKKysgICBzdHJpbmcgU1RSSU5HLgorKworKyAgIElmIE5NQVRDSCBpcyB6ZXJvIG9yIFJFR19OT1NVQiB3YXMgc2V0IGluIHRoZSBjZmxhZ3MgYXJndW1lbnQgdG8KKysgICBgcmVnY29tcCcsIHdlIGlnbm9yZSBQTUFUQ0guICBPdGhlcndpc2UsIHdlIGFzc3VtZSBQTUFUQ0ggaGFzIGF0CisrICAgbGVhc3QgTk1BVENIIGVsZW1lbnRzLCBhbmQgd2Ugc2V0IHRoZW0gdG8gdGhlIG9mZnNldHMgb2YgdGhlCisrICAgY29ycmVzcG9uZGluZyBtYXRjaGVkIHN1YnN0cmluZ3MuCisrCisrICAgRUZMQUdTIHNwZWNpZmllcyBgZXhlY3V0aW9uIGZsYWdzJyB3aGljaCBhZmZlY3QgbWF0Y2hpbmc6IGlmCisrICAgUkVHX05PVEJPTCBpcyBzZXQsIHRoZW4gXiBkb2VzIG5vdCBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorKyAgIHN0cmluZzsgaWYgUkVHX05PVEVPTCBpcyBzZXQsIHRoZW4gJCBkb2VzIG5vdCBtYXRjaCBhdCB0aGUgZW5kLgorKworKyAgIFdlIHJldHVybiAwIGlmIHdlIGZpbmQgYSBtYXRjaCBhbmQgUkVHX05PTUFUQ0ggaWYgbm90LiAgKi8KKysKKytpbnQKKytyZWdleGVjIChjb25zdCByZWdleF90ICpwcmVnLCBjb25zdCBjaGFyICpzdHJpbmcsIHNpemVfdCBubWF0Y2gsCisrICAgICAgICAgcmVnbWF0Y2hfdCBwbWF0Y2hbXSwgaW50IGVmbGFncykKKyt7CisrICBpbnQgcmV0OworKyAgc3RydWN0IHJlX3JlZ2lzdGVycyByZWdzOworKyAgcmVnZXhfdCBwcml2YXRlX3ByZWc7CisrICBpbnQgbGVuID0gc3RybGVuIChzdHJpbmcpOworKyAgYm9vbGVhbiB3YW50X3JlZ19pbmZvID0gIXByZWctPm5vX3N1YiAmJiBubWF0Y2ggPiAwOworKworKyAgcHJpdmF0ZV9wcmVnID0gKnByZWc7CisrCisrICBwcml2YXRlX3ByZWcubm90X2JvbCA9ICEhKGVmbGFncyAmIFJFR19OT1RCT0wpOworKyAgcHJpdmF0ZV9wcmVnLm5vdF9lb2wgPSAhIShlZmxhZ3MgJiBSRUdfTk9URU9MKTsKKysKKysgIC8qIFRoZSB1c2VyIGhhcyB0b2xkIHVzIGV4YWN0bHkgaG93IG1hbnkgcmVnaXN0ZXJzIHRvIHJldHVybgorKyAgICAgaW5mb3JtYXRpb24gYWJvdXQsIHZpYSBgbm1hdGNoJy4gIFdlIGhhdmUgdG8gcGFzcyB0aGF0IG9uIHRvIHRoZQorKyAgICAgbWF0Y2hpbmcgcm91dGluZXMuICAqLworKyAgcHJpdmF0ZV9wcmVnLnJlZ3NfYWxsb2NhdGVkID0gUkVHU19GSVhFRDsKKysKKysgIGlmICh3YW50X3JlZ19pbmZvKQorKyAgICB7CisrICAgICAgcmVncy5udW1fcmVncyA9IG5tYXRjaDsKKysgICAgICByZWdzLnN0YXJ0ID0gVEFMTE9DIChubWF0Y2ggKiAyLCByZWdvZmZfdCk7CisrICAgICAgaWYgKHJlZ3Muc3RhcnQgPT0gTlVMTCkKKysgICAgICAgIHJldHVybiAoaW50KSBSRUdfTk9NQVRDSDsKKysgICAgICByZWdzLmVuZCA9IHJlZ3Muc3RhcnQgKyBubWF0Y2g7CisrICAgIH0KKysKKysgIC8qIFBlcmZvcm0gdGhlIHNlYXJjaGluZyBvcGVyYXRpb24uICAqLworKyAgcmV0ID0gcmVfc2VhcmNoICgmcHJpdmF0ZV9wcmVnLCBzdHJpbmcsIGxlbiwKKysgICAgICAgICAgICAgICAgICAgLyogc3RhcnQ6ICovIDAsIC8qIHJhbmdlOiAqLyBsZW4sCisrICAgICAgICAgICAgICAgICAgIHdhbnRfcmVnX2luZm8gPyAmcmVncyA6IChzdHJ1Y3QgcmVfcmVnaXN0ZXJzICopIDApOworKworKyAgLyogQ29weSB0aGUgcmVnaXN0ZXIgaW5mb3JtYXRpb24gdG8gdGhlIFBPU0lYIHN0cnVjdHVyZS4gICovCisrICBpZiAod2FudF9yZWdfaW5mbykKKysgICAgeworKyAgICAgIGlmIChyZXQgPj0gMCkKKysgICAgICAgIHsKKysgICAgICAgICAgdW5zaWduZWQgcjsKKysKKysgICAgICAgICAgZm9yIChyID0gMDsgciA8IG5tYXRjaDsgcisrKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIHBtYXRjaFtyXS5ybV9zbyA9IHJlZ3Muc3RhcnRbcl07CisrICAgICAgICAgICAgICBwbWF0Y2hbcl0ucm1fZW8gPSByZWdzLmVuZFtyXTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgLyogSWYgd2UgbmVlZGVkIHRoZSB0ZW1wb3JhcnkgcmVnaXN0ZXIgaW5mbywgZnJlZSB0aGUgc3BhY2Ugbm93LiAgKi8KKysgICAgICBmcmVlIChyZWdzLnN0YXJ0KTsKKysgICAgfQorKworKyAgLyogV2Ugd2FudCB6ZXJvIHJldHVybiB0byBtZWFuIHN1Y2Nlc3MsIHVubGlrZSBgcmVfc2VhcmNoJy4gICovCisrICByZXR1cm4gcmV0ID49IDAgPyAoaW50KSBSRUdfTk9FUlJPUiA6IChpbnQpIFJFR19OT01BVENIOworK30KKysjaWZkZWYgX0xJQkMKKysvKiBFR0xJQkM6IFRoaXMgaXMgaGFuZGxlZCBpbiByZWdleGVjLWNvbXBhdC5jLiAgKi8KKysvKndlYWtfYWxpYXMgKF9fcmVnZXhlYywgcmVnZXhlYykqLworKyNpbmNsdWRlICJyZWdleGVjLWNvbXBhdC5jIgorKyNlbmRpZgorKworKworKy8qIFJldHVybnMgYSBtZXNzYWdlIGNvcnJlc3BvbmRpbmcgdG8gYW4gZXJyb3IgY29kZSwgRVJSQ09ERSwgcmV0dXJuZWQKKysgICBmcm9tIGVpdGhlciByZWdjb21wIG9yIHJlZ2V4ZWMuICAgV2UgZG9uJ3QgdXNlIFBSRUcgaGVyZS4gICovCisrCisrc2l6ZV90CisrcmVnZXJyb3IgKGludCBlcnJjb2RlLCBjb25zdCByZWdleF90ICpwcmVnIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysgICAgICAgICAgY2hhciAqZXJyYnVmLCBzaXplX3QgZXJyYnVmX3NpemUpCisreworKyAgY29uc3QgY2hhciAqbXNnOworKyAgc2l6ZV90IG1zZ19zaXplOworKworKyAgaWYgKGVycmNvZGUgPCAwCisrICAgICAgfHwgZXJyY29kZSA+PSAoaW50KSAoc2l6ZW9mIChyZV9lcnJvcl9tc2dpZCkKKysJCQkgICAvIHNpemVvZiAocmVfZXJyb3JfbXNnaWRbMF0pKSkKKysgICAgLyogT25seSBlcnJvciBjb2RlcyByZXR1cm5lZCBieSB0aGUgcmVzdCBvZiB0aGUgY29kZSBzaG91bGQgYmUgcGFzc2VkCisrICAgICAgIHRvIHRoaXMgcm91dGluZS4gIElmIHdlIGFyZSBnaXZlbiBhbnl0aGluZyBlbHNlLCBvciBpZiBvdGhlciByZWdleAorKyAgICAgICBjb2RlIGdlbmVyYXRlcyBhbiBpbnZhbGlkIGVycm9yIGNvZGUsIHRoZW4gdGhlIHByb2dyYW0gaGFzIGEgYnVnLgorKyAgICAgICBEdW1wIGNvcmUgc28gd2UgY2FuIGZpeCBpdC4gICovCisrICAgIGFib3J0ICgpOworKworKyAgbXNnID0gZ2V0dGV4dCAocmVfZXJyb3JfbXNnaWRbZXJyY29kZV0pOworKworKyAgbXNnX3NpemUgPSBzdHJsZW4gKG1zZykgKyAxOyAvKiBJbmNsdWRlcyB0aGUgbnVsbC4gICovCisrCisrICBpZiAoZXJyYnVmX3NpemUgIT0gMCkKKysgICAgeworKyAgICAgIGlmIChtc2dfc2l6ZSA+IGVycmJ1Zl9zaXplKQorKyAgICAgICAgeworKyNpZiBkZWZpbmVkIEhBVkVfTUVNUENQWSB8fCBkZWZpbmVkIF9MSUJDCisrCSAgKigoY2hhciAqKSBtZW1wY3B5IChlcnJidWYsIG1zZywgZXJyYnVmX3NpemUgLSAxKSkgPSAnXDAnOworKyNlbHNlCisrICAgICAgICAgIG1lbWNweSAoZXJyYnVmLCBtc2csIGVycmJ1Zl9zaXplIC0gMSk7CisrICAgICAgICAgIGVycmJ1ZltlcnJidWZfc2l6ZSAtIDFdID0gMDsKKysjZW5kaWYKKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICBtZW1jcHkgKGVycmJ1ZiwgbXNnLCBtc2dfc2l6ZSk7CisrICAgIH0KKysKKysgIHJldHVybiBtc2dfc2l6ZTsKKyt9CisrI2lmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZWdlcnJvciwgcmVnZXJyb3IpCisrI2VuZGlmCisrCisrCisrLyogRnJlZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3BhY2UgdXNlZCBieSBQUkVHLiAgKi8KKysKKyt2b2lkCisrcmVnZnJlZSAocmVnZXhfdCAqcHJlZykKKyt7CisrICBpZiAocHJlZy0+YnVmZmVyICE9IE5VTEwpCisrICAgIGZyZWUgKHByZWctPmJ1ZmZlcik7CisrICBwcmVnLT5idWZmZXIgPSBOVUxMOworKworKyAgcHJlZy0+YWxsb2NhdGVkID0gMDsKKysgIHByZWctPnVzZWQgPSAwOworKworKyAgaWYgKHByZWctPmZhc3RtYXAgIT0gTlVMTCkKKysgICAgZnJlZSAocHJlZy0+ZmFzdG1hcCk7CisrICBwcmVnLT5mYXN0bWFwID0gTlVMTDsKKysgIHByZWctPmZhc3RtYXBfYWNjdXJhdGUgPSAwOworKworKyAgaWYgKHByZWctPnRyYW5zbGF0ZSAhPSBOVUxMKQorKyAgICBmcmVlIChwcmVnLT50cmFuc2xhdGUpOworKyAgcHJlZy0+dHJhbnNsYXRlID0gTlVMTDsKKyt9CisrI2lmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZWdmcmVlLCByZWdmcmVlKQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBub3QgZW1hY3MgICovCisrCisrI2VuZGlmIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisrDAorKyN1bmRlZiBTVE9SRV9OVU1CRVIKKysjdW5kZWYgU1RPUkVfTlVNQkVSX0FORF9JTkNSCisrI3VuZGVmIEVYVFJBQ1RfTlVNQkVSCisrI3VuZGVmIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSCisrCisrI3VuZGVmIERFQlVHX1BSSU5UX0NPTVBJTEVEX1BBVFRFUk4KKysjdW5kZWYgREVCVUdfUFJJTlRfRE9VQkxFX1NUUklORworKworKyN1bmRlZiBJTklUX0ZBSUxfU1RBQ0sKKysjdW5kZWYgUkVTRVRfRkFJTF9TVEFDSworKyN1bmRlZiBET1VCTEVfRkFJTF9TVEFDSworKyN1bmRlZiBQVVNIX1BBVFRFUk5fT1AKKysjdW5kZWYgUFVTSF9GQUlMVVJFX1BPSU5URVIKKysjdW5kZWYgUFVTSF9GQUlMVVJFX0lOVAorKyN1bmRlZiBQVVNIX0ZBSUxVUkVfRUxUCisrI3VuZGVmIFBPUF9GQUlMVVJFX1BPSU5URVIKKysjdW5kZWYgUE9QX0ZBSUxVUkVfSU5UCisrI3VuZGVmIFBPUF9GQUlMVVJFX0VMVAorKyN1bmRlZiBERUJVR19QVVNICisrI3VuZGVmIERFQlVHX1BPUAorKyN1bmRlZiBQVVNIX0ZBSUxVUkVfUE9JTlQKKysjdW5kZWYgUE9QX0ZBSUxVUkVfUE9JTlQKKysKKysjdW5kZWYgUkVHX1VOU0VUX1ZBTFVFCisrI3VuZGVmIFJFR19VTlNFVAorKworKyN1bmRlZiBQQVRGRVRDSAorKyN1bmRlZiBQQVRGRVRDSF9SQVcKKysjdW5kZWYgUEFUVU5GRVRDSAorKyN1bmRlZiBUUkFOU0xBVEUKKysKKysjdW5kZWYgSU5JVF9CVUZfU0laRQorKyN1bmRlZiBHRVRfQlVGRkVSX1NQQUNFCisrI3VuZGVmIEJVRl9QVVNICisrI3VuZGVmIEJVRl9QVVNIXzIKKysjdW5kZWYgQlVGX1BVU0hfMworKyN1bmRlZiBTVE9SRV9KVU1QCisrI3VuZGVmIFNUT1JFX0pVTVAyCisrI3VuZGVmIElOU0VSVF9KVU1QCisrI3VuZGVmIElOU0VSVF9KVU1QMgorKyN1bmRlZiBFWFRFTkRfQlVGRkVSCisrI3VuZGVmIEdFVF9VTlNJR05FRF9OVU1CRVIKKysjdW5kZWYgRlJFRV9TVEFDS19SRVRVUk4KKysKKysjIHVuZGVmIFBPSU5URVJfVE9fT0ZGU0VUCisrIyB1bmRlZiBNQVRDSElOR19JTl9GUlNUX1NUUklORworKyMgdW5kZWYgUFJFRkVUQ0gKKysjIHVuZGVmIEFUX1NUUklOR1NfQkVHCisrIyB1bmRlZiBBVF9TVFJJTkdTX0VORAorKyMgdW5kZWYgV09SRENIQVJfUAorKyMgdW5kZWYgRlJFRV9WQVIKKysjIHVuZGVmIEZSRUVfVkFSSUFCTEVTCisrIyB1bmRlZiBOT19ISUdIRVNUX0FDVElWRV9SRUcKKysjIHVuZGVmIE5PX0xPV0VTVF9BQ1RJVkVfUkVHCisrCisrIyB1bmRlZiBDSEFSX1QKKysjIHVuZGVmIFVDSEFSX1QKKysjIHVuZGVmIENPTVBJTEVEX0JVRkZFUl9WQVIKKysjIHVuZGVmIE9GRlNFVF9BRERSRVNTX1NJWkUKKysjIHVuZGVmIENIQVJfQ0xBU1NfU0laRQorKyMgdW5kZWYgUFJFRklYCisrIyB1bmRlZiBBUkdfUFJFRklYCisrIyB1bmRlZiBQVVRfQ0hBUgorKyMgdW5kZWYgQllURQorKyMgdW5kZWYgV0NIQVIKKysKKysjIGRlZmluZSBERUZJTkVEX09OQ0UKK2RpZmYgLS1naXQgYS9wd2QvTWFrZWZpbGUgYi9wd2QvTWFrZWZpbGUKK2luZGV4IDdmNmRlMDMuLjkxNmQ1NDYgMTAwNjQ0CistLS0gYS9wd2QvTWFrZWZpbGUKKysrKyBiL3B3ZC9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIHB3ZCBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHB3ZAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworZGlmZiAtLWdpdCBhL3Jlc29sdi9NYWtlZmlsZSBiL3Jlc29sdi9NYWtlZmlsZQoraW5kZXggMWRjYjc1Zi4uMmU0YjYzMCAxMDA2NDQKKy0tLSBhL3Jlc29sdi9NYWtlZmlsZQorKysrIGIvcmVzb2x2L01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgcmVzb2x2IHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gcmVzb2x2CisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMjcsMjEgKzI5LDIyIEBAIGhlYWRlcnMJOj0gcmVzb2x2LmggXAorIAkgICBhcnBhL25hbWVzZXIuaCBhcnBhL25hbWVzZXJfY29tcGF0LmggXAorIAkgICBzeXMvYml0eXBlcy5oCisgCistcm91dGluZXMgOj0gaGVycm9yIGluZXRfYWRkciBpbmV0X250b3AgaW5ldF9wdG9uIG5zYXBfYWRkciByZXNfaW5pdCBcCistCSAgICByZXNfaGNvbmYgcmVzX2xpYmMgcmVzLXN0YXRlCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0lORVQpIFwKKysJKz0gaGVycm9yIGluZXRfYWRkciBpbmV0X250b3AgaW5ldF9wdG9uIG5zYXBfYWRkciByZXNfaW5pdCBcCisrCSAgIHJlc19oY29uZiByZXNfbGliYyByZXMtc3RhdGUKKyAKKy10ZXN0cyA9IHRzdC1hdG9uIHRzdC1sZWFrcyB0c3QtaW5ldF9udG9wCisteHRlc3RzID0gdHN0LWxlYWtzMgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSB0c3QtYXRvbiB0c3QtbGVha3MgdHN0LWluZXRfbnRvcAorK3h0ZXN0cy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gdHN0LWxlYWtzMgorIAorIGdlbmVyYXRlIDo9IG10cmFjZS10c3QtbGVha3Mub3V0IHRzdC1sZWFrcy5tdHJhY2UgdHN0LWxlYWtzMi5tdHJhY2UKKyAKKy1leHRyYS1saWJzIDo9IGxpYnJlc29sdiBsaWJuc3NfZG5zCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gbGlicmVzb2x2IGxpYm5zc19kbnMKKyBpZmVxICgkKGhhdmUtdGhyZWFkLWxpYnJhcnkpLHllcykKKy1leHRyYS1saWJzICs9IGxpYmFubAorLXJvdXRpbmVzICs9IGdhaV9zaWdxdWV1ZQorK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX0lORVRfQU5MKSArPSBsaWJhbmwKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gZ2FpX3NpZ3F1ZXVlCisgdGVzdHMgKz0gdHN0LXJlc19oY29uZl9yZW9yZGVyCisgZW5kaWYKKy1leHRyYS1saWJzLW90aGVycyA9ICQoZXh0cmEtbGlicykKKytleHRyYS1saWJzLW90aGVycy15ICs9ICQoZXh0cmEtbGlicy15KQorIGxpYnJlc29sdi1yb3V0aW5lcyA6PSBnZXRobmFtYWRkciByZXNfY29tcCByZXNfZGVidWcJXAorIAkJICAgICAgcmVzX2RhdGEgcmVzX21rcXVlcnkgcmVzX3F1ZXJ5IHJlc19zZW5kCQlcCisgCQkgICAgICBpbmV0X25ldF9udG9wIGluZXRfbmV0X3B0b24gaW5ldF9uZXRhIGJhc2U2NAlcCitAQCAtNjEsNyArNjQsNyBAQCByb3V0aW5lcyAgICAgICAgICAgICAgICArPSAkKGxpYm5zc19kbnMtcm91dGluZXMpICQobGlicmVzb2x2LXJvdXRpbmVzKQorIHN0YXRpYy1vbmx5LXJvdXRpbmVzICAgICs9ICQobGlibnNzX2Rucy1yb3V0aW5lcykgJChsaWJyZXNvbHYtcm91dGluZXMpCisgZW5kaWYKKyAKKy1pZmVxICh5ZXN5ZXMsJChidWlsZC1zaGFyZWQpJChoYXZlLXRocmVhZC1saWJyYXJ5KSkKKytpZmVxICh5ZXN5ZXN5LCQoYnVpbGQtc2hhcmVkKSQoaGF2ZS10aHJlYWQtbGlicmFyeSkkKE9QVElPTl9FR0xJQkNfSU5FVF9BTkwpKQorIHRlc3RzOiAkKG9ianBmeClnYV90ZXN0CisgZW5kaWYKKyAKK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vTWFrZWZpbGUgYi9zdGRpby1jb21tb24vTWFrZWZpbGUKK2luZGV4IGQwYmYwZTEuLjg2NTU4MDEgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vTWFrZWZpbGUKKysrKyBiL3N0ZGlvLWNvbW1vbi9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTcGVjaWZpYyBtYWtlZmlsZSBmb3Igc3RkaW8tY29tbW9uLgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHN0ZGlvLWNvbW1vbgorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTMwLDcgKzMyLDcgQEAgcm91dGluZXMJOj0JCQkJCQkJICAgICAgXAorIAl2ZnByaW50ZiB2cHJpbnRmIHByaW50Zl9mcCByZWctcHJpbnRmIHByaW50Zi1wcnMgcHJpbnRmX2ZwaGV4CSAgICAgIFwKKyAJcmVnLW1vZGlmaWVyIHJlZy10eXBlCQkJCQkJICAgICAgXAorIAlwcmludGZfc2l6ZSBmcHJpbnRmIHByaW50ZiBzbnByaW50ZiBzcHJpbnRmIGFzcHJpbnRmIGRwcmludGYJICAgICAgXAorLQl2ZndwcmludGYgdmZzY2FuZiB2ZndzY2FuZgkJCQkJICAgICAgXAorKwl2ZnNjYW5mCQkJCQkJCQkgICAgICBcCisgCWZzY2FuZiBzY2FuZiBzc2NhbmYJCQkJCQkgICAgICBcCisgCXBlcnJvciBwc2lnbmFsCQkJCQkJCSAgICAgIFwKKyAJdG1wZmlsZSB0bXBmaWxlNjQgdG1wbmFtIHRtcG5hbV9yIHRlbXBuYW0gdGVtcG5hbWUJCSAgICAgIFwKK0BAIC00MSwyMyArNDMsMzYgQEAgcm91dGluZXMJOj0JCQkJCQkJICAgICAgXAorIAlpc29jOTlfdnNzY2FuZgkJCQkJCQkgICAgICBcCisgCXBzaWdpbmZvCisgCistYXV4CTo9IGVycmxpc3Qgc2lnbGlzdCBwcmludGYtcGFyc2VtYiBwcmludGYtcGFyc2V3YyBmeHByaW50ZgorKyMgSWRlYWxseSwgX2l0b3dhIGFuZCBpdG93YS1kaWdpdHMgd291bGQgYmUgaW4gdGhpcyBvcHRpb24gZ3JvdXAgYXMKKysjIHdlbGwsIGJ1dCBpdCBpcyB1c2VkIHVuY29uZGl0aW9uYWxseSBieSBwcmludGZfZnAgYW5kIHByaW50Zl9mcGhleCwKKysjIGFuZCBpdCBkaWRuJ3Qgc2VlbSBzdHJhaWdodGZvcndhcmQgdG8gZGlzZW50YW5nbGUgaXQuCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgXAorKwkrPSB2ZndwcmludGYgdmZ3c2NhbmYKKysKKythdXgJOj0gZXJybGlzdCBzaWdsaXN0IHByaW50Zi1wYXJzZW1iIGZ4cHJpbnRmCisrYXV4LSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpICs9IHByaW50Zi1wYXJzZXdjCisgCisgdGVzdHMgOj0gdHN0c2NhbmYgdGVzdF9yZHdyIHRlc3QtcG9wZW4gdHN0Z2V0bG4gdGVzdC1mc2VlayBcCisgCSB0ZW1wdGVzdCB0c3QtZmlsZW5vIHRlc3QtZndyaXRlIHRzdC11bmdldGMgdHN0LWZlcnJvciBcCisgCSB4YnVnIGVycm5vYnVnIFwKKyAJIGJ1ZzEgYnVnMiBidWczIGJ1ZzQgYnVnNSBidWc2IGJ1ZzcgYnVnOCBidWc5IGJ1ZzEwIGJ1ZzExIGJ1ZzEyIGJ1ZzEzIFwKKy0JIHRmZm9ybWF0IHRpZm9ybWF0IHRsbGZvcm1hdCB0c3RkaW9taXNjIHRzdC1wcmludGZzeiB0c3Qtd2MtcHJpbnRmIFwKKysJIHRmZm9ybWF0IHRpZm9ybWF0IHRsbGZvcm1hdCB0c3RkaW9taXNjIHRzdC1wcmludGZzeiBcCisgCSBzY2FuZjEgc2NhbmYyIHNjYW5mMyBzY2FuZjQgc2NhbmY1IHNjYW5mNyBzY2FuZjggc2NhbmY5IHNjYW5mMTAgXAorLQkgc2NhbmYxMSBzY2FuZjEyIHRzdC10bXBuYW0gdHN0LWNvb2tpZSB0c3Qtb2JwcmludGYgdHN0LXNzY2FuZiBcCistCSB0c3Qtc3dwcmludGYgdHN0LWZzZWVrIHRzdC1mbWVtb3BlbiB0ZXN0LXZmcHJpbnRmIHRzdC1nZXRzIFwKKy0JIHRzdC1wZXJyb3IgdHN0LXNwcmludGYgdHN0LXJuZHNlZWsgdHN0LWZkb3BlbiB0c3QtZnBoZXggYnVnMTQgXAorKwkgc2NhbmYxMSBzY2FuZjEyIHRzdC10bXBuYW0gdHN0LWNvb2tpZSB0c3Qtb2JwcmludGYgXAorKwkgdHN0LWZzZWVrIHRzdC1mbWVtb3BlbiB0c3QtZ2V0cyBcCisrCSB0c3Qtc3ByaW50ZiB0c3Qtcm5kc2VlayB0c3QtZmRvcGVuIHRzdC1mcGhleCBcCisgCSB0c3QtcG9wZW4gdHN0LXVubG9ja2VkaW8gdHN0LWZtZW1vcGVuMiB0c3QtcHV0LWVycm9yIHRzdC1mZ2V0cyBcCistCSB0c3QtZndyaXRlIGJ1ZzE2IGJ1ZzE3IHRzdC1zd3NjYW5mIHRzdC1zcHJpbnRmMiBidWcxOCBidWcxOGEgXAorLQkgYnVnMTkgYnVnMTlhIHRzdC1wb3BlbjIgc2NhbmYxMyBzY2FuZjE0IHNjYW5mMTUgYnVnMjAgYnVnMjEgYnVnMjIgXAorLQkgc2NhbmYxNiBzY2FuZjE3IHRzdC1zZXR2YnVmMSB0c3QtZ3JvdXBpbmcgYnVnMjMgYnVnMjQgXAorLQkgYnVnLXZmcHJpbnRmLW5hcmdzIHRzdC1sb25nLWRibC1mcGhleCB0c3QtZnBoZXgtd2lkZSB0c3Qtc3ByaW50ZjMgXAorKwkgdHN0LWZ3cml0ZSBidWcxNiBidWcxNyB0c3Qtc3ByaW50ZjIgYnVnMTggXAorKwkgYnVnMTkgdHN0LXBvcGVuMiBzY2FuZjE0IHNjYW5mMTUgYnVnMjEgYnVnMjIgXAorKwkgc2NhbmYxNiBzY2FuZjE3IHRzdC1zZXR2YnVmMSBidWcyMyBidWcyNCBcCisrCSBidWctdmZwcmludGYtbmFyZ3MgdHN0LXNwcmludGYzIFwKKyAJIGJ1ZzI1IHRzdC1wcmludGYtcm91bmQgYnVnMjMtMiBidWcyMy0zIGJ1ZzIzLTQgYnVnMjYgdHN0LWZtZW1vcGVuMworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkgKz0gdHN0LXNzY2FuZiB0c3Qtc3dwcmludGYgdGVzdC12ZnByaW50ZiBidWcxNCBzY2FuZjEzIHRzdC1ncm91cGluZworK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pIFwKKysJICs9IHRzdC1wZXJyb3IgYnVnMTlhIGJ1ZzIwIHRzdC1sb25nLWRibC1mcGhleCB0c3QtZnBoZXgtd2lkZQorK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpIFwKKysJICs9IGJ1ZzE4YSB0c3Qtc3dzY2FuZiB0c3Qtd2MtcHJpbnRmCisgCisgdGVzdC1zcmNzID0gdHN0LXVuYnB1dGMgdHN0LXByaW50ZgorIAorZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi9faTE4bl9udW1iZXIuaCBiL3N0ZGlvLWNvbW1vbi9faTE4bl9udW1iZXIuaAoraW5kZXggM2M3MzA0NC4uYWM2MmIzYSAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi9faTE4bl9udW1iZXIuaAorKysrIGIvc3RkaW8tY29tbW9uL19pMThuX251bWJlci5oCitAQCAtMTksMTAgKzE5LDEzIEBACisgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyAjaW5jbHVkZSA8d2NoYXIuaD4KKyAjaW5jbHVkZSA8d2N0eXBlLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2luY2x1ZGUgIi4uL2xvY2FsZS9vdXRkaWdpdHMuaCIKKyAjaW5jbHVkZSAiLi4vbG9jYWxlL291dGRpZ2l0c3djLmgiCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKworIHN0YXRpYyBDSEFSX1QgKgorIF9pMThuX251bWJlcl9yZXdyaXRlIChDSEFSX1QgKncsIENIQVJfVCAqcmVhcl9wdHIsIENIQVJfVCAqZW5kKQorIHsKK0BAIC0xMTUsMyArMTE4LDEzIEBAIF9pMThuX251bWJlcl9yZXdyaXRlIChDSEFSX1QgKncsIENIQVJfVCAqcmVhcl9wdHIsIENIQVJfVCAqZW5kKQorIAorICAgcmV0dXJuIHc7CisgfQorKworKyNlbHNlCisrCisrc3RhdGljIENIQVJfVCAqCisrX2kxOG5fbnVtYmVyX3Jld3JpdGUgKENIQVJfVCAqdywgQ0hBUl9UICpyZWFyX3B0ciwgQ0hBUl9UICplbmQpCisreworKyAgcmV0dXJuIHc7CisrfQorKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi9meHByaW50Zi5jIGIvc3RkaW8tY29tbW9uL2Z4cHJpbnRmLmMKK2luZGV4IDdiMmViOTQuLjg0NzYwNzYgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vZnhwcmludGYuYworKysrIGIvc3RkaW8tY29tbW9uL2Z4cHJpbnRmLmMKK0BAIC0yMyw2ICsyMyw3IEBACisgI2luY2x1ZGUgPHdjaGFyLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxsaWJpb1AuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAKKyBpbnQKK0BAIC0zNyw2ICszOCw3IEBAIF9fZnhwcmludGYgKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyAgIGludCByZXM7CisgICBpZiAoX0lPX2Z3aWRlIChmcCwgMCkgPiAwKQorICAgICB7CisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyAgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChmbXQpICsgMTsKKyAgICAgICB3Y2hhcl90IHdmbXRbbGVuXTsKKyAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgKytpKQorQEAgLTQ1LDYgKzQ3LDkgQEAgX19meHByaW50ZiAoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorIAkgIHdmbXRbaV0gPSBmbXRbaV07CisgCX0KKyAgICAgICByZXMgPSBfX3Zmd3ByaW50ZiAoZnAsIHdmbXQsIGFwKTsKKysjZWxzZQorKyAgICAgIGFib3J0KCk7CisrI2VuZGlmCisgICAgIH0KKyAgIGVsc2UKKyAgICAgcmVzID0gX0lPX3ZmcHJpbnRmIChmcCwgZm10LCBhcCk7CitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL3ByaW50Zl9mcC5jIGIvc3RkaW8tY29tbW9uL3ByaW50Zl9mcC5jCitpbmRleCAzMDIzYjIwLi5iZDBkZjY2IDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL3ByaW50Zl9mcC5jCisrKysgYi9zdGRpby1jb21tb24vcHJpbnRmX2ZwLmMKK0BAIC0zOSw2ICszOSw3IEBACisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8d2NoYXIuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8c3RkYm9vbC5oPgorICNpbmNsdWRlIDxyb3VuZGluZy1tb2RlLmg+CisgCitAQCAtMTQyLDYgKzE0MywxMCBAQCBleHRlcm4gbXBfc2l6ZV90IF9fbXBuX2V4dHJhY3RfbG9uZ19kb3VibGUgKG1wX3B0ciByZXNfcHRyLCBtcF9zaXplX3Qgc2l6ZSwKKyBleHRlcm4gdW5zaWduZWQgaW50IF9fZ3Vlc3NfZ3JvdXBpbmcgKHVuc2lnbmVkIGludCBpbnRkaWdfbWF4LAorIAkJCQkgICAgICBjb25zdCBjaGFyICpncm91cGluZyk7CisgCisrLyogSWRlYWxseSwgd2hlbiBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzIGRpc2FibGVkLCB0aGlzIHNob3VsZCBkbworKyAgIGFsbCBpdHMgd29yayBpbiBvcmRpbmFyeSBjaGFyYWN0ZXJzLCByYXRoZXIgdGhhbiBkb2luZyBpdCBpbiB3aWRlCisrICAgY2hhcmFjdGVycyBhbmQgdGhlbiBjb252ZXJ0aW5nIGF0IHRoZSBlbmQuICBCdXQgdGhhdCBpcyBhIGNoYWxsZW5nZQorKyAgIGZvciBhbm90aGVyIGRheS4gICovCisgCisgc3RhdGljIHdjaGFyX3QgKmdyb3VwX251bWJlciAod2NoYXJfdCAqYnVmLCB3Y2hhcl90ICpidWZlbmQsCisgCQkJICAgICAgdW5zaWduZWQgaW50IGludGRpZ19ubywgY29uc3QgY2hhciAqZ3JvdXBpbmcsCitAQCAtMjUxLDcgKzI1NiwxNCBAQCBfX19wcmludGZfZnAgKEZJTEUgKmZwLAorICAgbXBfbGltYl90IGN5OworIAorICAgLyogTm9uemVybyBpZiB0aGlzIGlzIG91dHB1dCBvbiBhIHdpZGUgY2hhcmFjdGVyIHN0cmVhbS4gICovCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAgIGludCB3aWRlID0gaW5mby0+d2lkZTsKKysjZWxzZQorKyAgLyogVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIG9uIGEgd2lkZS1vcmllbnRlZCBzdHJlYW0gd2hlbgorKyAgICAgT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgaXMgZGlzYWJsZWQsIGJ1dCB0aGUgY29tcGlsZXIgY2FuJ3QKKysgICAgIGJlIHRydXN0ZWQgdG8gZmlndXJlIHRoYXQgb3V0LiAgKi8KKysgIGNvbnN0IGludCB3aWRlID0gMDsKKysjZW5kaWYKKyAKKyAgIC8qIEJ1ZmZlciBpbiB3aGljaCB3ZSBwcm9kdWNlIHRoZSBvdXRwdXQuICAqLworICAgd2NoYXJfdCAqd2J1ZmZlciA9IE5VTEw7CitAQCAtMjYxLDYgKzI3Myw3IEBAIF9fX3ByaW50Zl9mcCAoRklMRSAqZnAsCisgICBwLmV4cHNpZ24gPSAwOworIAorICAgLyogRmlndXJlIG91dCB0aGUgZGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIuICAqLworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGlmIChpbmZvLT5leHRyYSA9PSAwKQorICAgICB7CisgICAgICAgZGVjaW1hbCA9IF9OTF9DVVJSRU5UIChMQ19OVU1FUklDLCBERUNJTUFMX1BPSU5UKTsKK0BAIC0yODAsNyArMjkzLDEzIEBAIF9fX3ByaW50Zl9mcCAoRklMRSAqZnAsCisgICAvKiBUaGUgZGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIgbXVzdCBub3QgYmUgemVyby4gICovCisgICBhc3NlcnQgKCpkZWNpbWFsICE9ICdcMCcpOworICAgYXNzZXJ0IChkZWNpbWFsd2MgIT0gTCdcMCcpOworKyNlbHNlCisrICAvKiBIYXJkLWNvZGUgdmFsdWVzIGZyb20gJ0MnIGxvY2FsZS4gICovCisrICBkZWNpbWFsID0gIi4iOworKyAgZGVjaW1hbHdjID0gTCcuJzsKKysjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBpZiAoaW5mby0+Z3JvdXApCisgICAgIHsKKyAgICAgICBpZiAoaW5mby0+ZXh0cmEgPT0gMCkKK0BAIC0zMjQsNiArMzQzLDkgQEAgX19fcHJpbnRmX2ZwIChGSUxFICpmcCwKKyAgICAgfQorICAgZWxzZQorICAgICBncm91cGluZyA9IE5VTEw7CisrI2Vsc2UKKysgIGdyb3VwaW5nID0gTlVMTDsKKysjZW5kaWYKKyAKKyAgIC8qIEZldGNoIHRoZSBhcmd1bWVudCB2YWx1ZS4JKi8KKyAjaWZuZGVmIF9fTk9fTE9OR19ET1VCTEVfTUFUSAorZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi9wcmludGZfZnBoZXguYyBiL3N0ZGlvLWNvbW1vbi9wcmludGZfZnBoZXguYworaW5kZXggNmMzYjVlOS4uZjY2MGNlMCAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi9wcmludGZfZnBoZXguYworKysrIGIvc3RkaW8tY29tbW9uL3ByaW50Zl9mcGhleC5jCitAQCAtMjgsNiArMjgsNyBAQAorICNpbmNsdWRlIDxfaXRvYS5oPgorICNpbmNsdWRlIDxfaXRvd2EuaD4KKyAjaW5jbHVkZSA8bG9jYWxlL2xvY2FsZWluZm8uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8c3RkYm9vbC5oPgorICNpbmNsdWRlIDxyb3VuZGluZy1tb2RlLmg+CisgCitAQCAtMTM5LDEwICsxNDAsMTggQEAgX19wcmludGZfZnBoZXggKEZJTEUgKmZwLAorICAgaW50IGRvbmUgPSAwOworIAorICAgLyogTm9uemVybyBpZiB0aGlzIGlzIG91dHB1dCBvbiBhIHdpZGUgY2hhcmFjdGVyIHN0cmVhbS4gICovCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAgIGludCB3aWRlID0gaW5mby0+d2lkZTsKKysjZWxzZQorKyAgLyogVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIG9uIGEgd2lkZS1vcmllbnRlZCBzdHJlYW0gd2hlbgorKyAgICAgT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgaXMgZGlzYWJsZWQsIGJ1dCB0aGUgY29tcGlsZXIgY2FuJ3QKKysgICAgIGJlIHRydXN0ZWQgdG8gZmlndXJlIHRoYXQgb3V0LiAgKi8KKysgIGNvbnN0IGludCB3aWRlID0gMDsKKysjZW5kaWYKKyAKKyAKKyAgIC8qIEZpZ3VyZSBvdXQgdGhlIGRlY2ltYWwgcG9pbnQgY2hhcmFjdGVyLiAgKi8KKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBpZiAoaW5mby0+ZXh0cmEgPT0gMCkKKyAgICAgeworICAgICAgIGRlY2ltYWwgPSBfTkxfQ1VSUkVOVCAoTENfTlVNRVJJQywgREVDSU1BTF9QT0lOVCk7CitAQCAtMTU2LDYgKzE2NSwxMCBAQCBfX3ByaW50Zl9mcGhleCAoRklMRSAqZnAsCisgICAgIH0KKyAgIC8qIFRoZSBkZWNpbWFsIHBvaW50IGNoYXJhY3RlciBtdXN0IG5ldmVyIGJlIHplcm8uICAqLworICAgYXNzZXJ0ICgqZGVjaW1hbCAhPSAnXDAnICYmIGRlY2ltYWx3YyAhPSBMJ1wwJyk7CisrI2Vsc2UKKysgIGRlY2ltYWwgPSAiLiI7CisrICBkZWNpbWFsd2MgPSBMJy4nOworKyNlbmRpZgorIAorIAorICAgLyogRmV0Y2ggdGhlIGFyZ3VtZW50IHZhbHVlLgkqLworZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi9wcmludGZfc2l6ZS5jIGIvc3RkaW8tY29tbW9uL3ByaW50Zl9zaXplLmMKK2luZGV4IDdkY2Q1OGUuLjZmYjc0OTEgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vcHJpbnRmX3NpemUuYworKysrIGIvc3RkaW8tY29tbW9uL3ByaW50Zl9zaXplLmMKK0BAIC0yMyw2ICsyMyw3IEBACisgI2luY2x1ZGUgPG1hdGguaD4KKyAjaW5jbHVkZSA8cHJpbnRmLmg+CisgI2luY2x1ZGUgPGxpYmlvUC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIAorIC8qIFRoaXMgZGVmaW5lcyBtYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSB0aGUgc2FtZSBjb2RlIGZvciBHTlUgQyBsaWJyYXJ5IGFuZAorQEAgLTExNiw3ICsxMTcsMTQgQEAgX19wcmludGZfc2l6ZSAoRklMRSAqZnAsIGNvbnN0IHN0cnVjdCBwcmludGZfaW5mbyAqaW5mbywKKyAKKyAgIHN0cnVjdCBwcmludGZfaW5mbyBmcF9pbmZvOworICAgaW50IGRvbmUgPSAwOworKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgICBpbnQgd2lkZSA9IGluZm8tPndpZGU7CisrI2Vsc2UKKysgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBvbiBhIHdpZGUtb3JpZW50ZWQgc3RyZWFtIHdoZW4KKysgICAgIE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSIGlzIGRpc2FibGVkLCBidXQgdGhlIGNvbXBpbGVyIGNhbid0CisrICAgICBiZSB0cnVzdGVkIHRvIGZpZ3VyZSB0aGF0IG91dC4gICovCisrICBjb25zdCBpbnQgd2lkZSA9IDA7CisrI2VuZGlmCisgICBpbnQgcmVzOworIAorICAgLyogRmV0Y2ggdGhlIGFyZ3VtZW50IHZhbHVlLgkqLworZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi9zY2FuZjE0LmMgYi9zdGRpby1jb21tb24vc2NhbmYxNC5jCitpbmRleCBjZmZjY2IwLi42Y2MyNjBhIDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL3NjYW5mMTQuYworKysrIGIvc3RkaW8tY29tbW9uL3NjYW5mMTQuYworQEAgLTMsNiArMyw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDx3Y2hhci5oPgorICNpbmNsdWRlIDxsaWJjLWludGVybmFsLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2RlZmluZSBGQUlMKCkgXAorICAgZG8gewkJCQkJCQlcCitAQCAtNDgsNiArNDksNyBAQCBtYWluICh2b2lkKQorICAgLyogU2VlIGV4cGxhbmF0aW9uIGFib3ZlLiAgKi8KKyAgIERJQUdfUFVTSF9ORUVEU19DT01NRU5UOworICAgRElBR19JR05PUkVfTkVFRFNfQ09NTUVOVCAoNC45LCAiLVdmb3JtYXQiKTsKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBpZiAoc3NjYW5mICgiIDMuMjVTIHgiLCAiJTRhUyUzYyIsICZsc3AsIGMpICE9IDIpCisgICAgIEZBSUwgKCk7CisgICBlbHNlCitAQCAtNTcsNiArNTksNyBAQCBtYWluICh2b2lkKQorICAgICAgIG1lbXNldCAobHNwLCAneCcsIHNpemVvZiBMIjMuMjUiKTsKKyAgICAgICBmcmVlIChsc3ApOworICAgICB9CisrI2VuZGlmCisgICBpZiAoc3NjYW5mICgiNC4yNVswLTkuXSB4IiwgIiVhWzAtOS5dJThjIiwgJnNwLCBjKSAhPSAyKQorICAgICBGQUlMICgpOworICAgZWxzZQorZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi90c3QtcG9wZW4uYyBiL3N0ZGlvLWNvbW1vbi90c3QtcG9wZW4uYworaW5kZXggNWRlZjI3Zi4uN2M5YjkxZSAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi90c3QtcG9wZW4uYworKysrIGIvc3RkaW8tY29tbW9uL3RzdC1wb3Blbi5jCitAQCAtMTksNiArMTksNyBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8d2NoYXIuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyBzdGF0aWMgaW50CisgZG9fdGVzdCAodm9pZCkKK0BAIC0zNCwxMiArMzUsMTQgQEAgZG9fdGVzdCAodm9pZCkKKyAgICAgICByZXR1cm4gMTsKKyAgICAgfQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgICAvKiBQT1NJWCBzYXlzIHRoYXQgcGlwZSBzdHJlYW1zIGFyZSBieXRlLW9yaWVudGVkLiAgKi8KKyAgIGlmIChmd2lkZSAoZiwgMCkgPj0gMCkKKyAgICAgeworICAgICAgIHB1dHMgKCJwb3BlbiBkaWQgbm90IHJldHVybiBieXRlLW9yaWVudGVkIHN0cmVhbSIpOworICAgICAgIHJlc3VsdCA9IDE7CisgICAgIH0KKysjZW5kaWYKKyAKKyAgIGlmIChnZXRsaW5lICgmbGluZSwgJmxlbiwgZikgIT0gNSkKKyAgICAgeworZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi90c3Qtc3ByaW50Zi5jIGIvc3RkaW8tY29tbW9uL3RzdC1zcHJpbnRmLmMKK2luZGV4IGQ1Mjg0YjkuLmYxZTNkMjEgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vdHN0LXNwcmludGYuYworKysrIGIvc3RkaW8tY29tbW9uL3RzdC1zcHJpbnRmLmMKK0BAIC0zLDcgKzMsNyBAQAorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGxpYmMtaW50ZXJuYWwuaD4KKy0KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyBzdGF0aWMgaW50CisgZG9fdGVzdCAodm9pZCkKK0BAIC0xMSwxMiArMTEsMTQgQEAgZG9fdGVzdCAodm9pZCkKKyAgIGNoYXIgYnVmWzEwMF07CisgICBpbnQgcmVzdWx0ID0gMDsKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorICAgaWYgKHNwcmludGYgKGJ1ZiwgIiUuMGxzIiwgTCJmb28iKSAhPSAwCisgICAgICAgfHwgc3RybGVuIChidWYpICE9IDApCisgICAgIHsKKyAgICAgICBwdXRzICgic3ByaW50ZiAoYnVmLCBcIiUuMGxzXCIsIExcImZvb1wiKSBwcm9kdWNlZCBzb21lIG91dHB1dCIpOworICAgICAgIHJlc3VsdCA9IDE7CisgICAgIH0KKysjZW5kaWYgLyogX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiAqLworIAorICNkZWZpbmUgU0laRSAoMTAyNCo3MDAwMCkKKyAjZGVmaW5lIFNUUih4KSAjeAorZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi90c3RkaW9taXNjLmMgYi9zdGRpby1jb21tb24vdHN0ZGlvbWlzYy5jCitpbmRleCA1NTQ4YTcxLi4zMWVkMDI0IDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL3RzdGRpb21pc2MuYworKysrIGIvc3RkaW8tY29tbW9uL3RzdGRpb21pc2MuYworQEAgLTQsNiArNCw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDx3Y2hhci5oPgorICNpbmNsdWRlIDxsaWJjLWludGVybmFsLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgc3RhdGljIGludAorIHQxICh2b2lkKQorQEAgLTEzNCw2ICsxMzUsNyBAQCBGICh2b2lkKQorICAgcHJpbnRmICgiZXhwZWN0ZWQgXCItaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkZcIiwgZ290IFwiJXNcIlxuIiwKKyAJICBidWYpOworIAorKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgICBzd3ByaW50ZiAod2J1Ziwgc2l6ZW9mIHdidWYgLyBzaXplb2YgKHdidWZbMF0pLCBMIiVhICVBICVlICVFICVmICVGICVnICVHIiwKKyAJICAgIHFuYW52YWwsIHFuYW52YWwsIHFuYW52YWwsIHFuYW52YWwsCisgCSAgICBxbmFudmFsLCBxbmFudmFsLCBxbmFudmFsLCBxbmFudmFsKTsKK0BAIC0xNzEsNiArMTczLDcgQEAgRiAodm9pZCkKKyAgIHJlc3VsdCB8PSB3Y3NjbXAgKHdidWYsIEwiLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GIikgIT0gMDsKKyAgIHByaW50ZiAoImV4cGVjdGVkIExcIi1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORlwiLCBnb3QgTFwiJVNcIlxuIiwKKyAJICB3YnVmKTsKKysjZW5kaWYgLyogX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiAqLworIAorICAgbHFuYW52YWwgPSBOQU47CisgCitAQCAtMjE1LDYgKzIxOCw3IEBAIEYgKHZvaWQpCisgICBwcmludGYgKCJleHBlY3RlZCBcIi1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORlwiLCBnb3QgXCIlc1wiXG4iLAorIAkgIGJ1Zik7CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAgIHN3cHJpbnRmICh3YnVmLCBzaXplb2Ygd2J1ZiAvIHNpemVvZiAod2J1ZlswXSksCisgCSAgICBMIiVMYSAlTEEgJUxlICVMRSAlTGYgJUxGICVMZyAlTEciLAorIAkgICAgbHFuYW52YWwsIGxxbmFudmFsLCBscW5hbnZhbCwgbHFuYW52YWwsCitAQCAtMjU5LDYgKzI2Myw3IEBAIEYgKHZvaWQpCisgICByZXN1bHQgfD0gd2NzY21wICh3YnVmLCBMIi1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORiIpICE9IDA7CisgICBwcmludGYgKCJleHBlY3RlZCBMXCItaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkZcIiwgZ290IExcIiVTXCJcbiIsCisgCSAgd2J1Zik7CisrI2VuZGlmIC8qIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgKi8KKyAKKyAgIHJldHVybiByZXN1bHQ7CisgfQorZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi92ZnByaW50Zi5jIGIvc3RkaW8tY29tbW9uL3ZmcHJpbnRmLmMKK2luZGV4IDA1OTJlNzAuLmYyMWQ5NzMgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vdmZwcmludGYuYworKysrIGIvc3RkaW8tY29tbW9uL3ZmcHJpbnRmLmMKK0BAIC0yOSw2ICsyOSw3IEBACisgI2luY2x1ZGUgPF9pdG9hLmg+CisgI2luY2x1ZGUgPGxvY2FsZS9sb2NhbGVpbmZvLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgLyogVGhpcyBjb2RlIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBzdGFuZGFyZCBzdGRpbyBpbXBsZW1lbnRhdGlvbiBmb3VuZAorICAgIGluIEdOVSBDIGxpYnJhcnkgYW5kIHRoZSBsaWJpbyBpbXBsZW1lbnRhdGlvbiBvcmlnaW5hbGx5IGZvdW5kIGluCitAQCAtMTQwLDYgKzE0MSwxOCBAQCB0eXBlZGVmIHdjaGFyX3QgVEhPVVNBTkRTX1NFUF9UOworICMgZGVmaW5lIEVPRiBXRU9GCisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKysjIGRlZmluZSBNVUxUSUJZVEVfU1VQUE9SVCAoMSkKKysjZWxzZQorKyMgZGVmaW5lIE1VTFRJQllURV9TVVBQT1JUICgwKQorKyNlbmRpZgorKworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysjIGRlZmluZSBMT0NBTEVfU1VQUE9SVCAoMSkKKysjZWxzZQorKyMgZGVmaW5lIExPQ0FMRV9TVVBQT1JUICgwKQorKyNlbmRpZgorKworICNpbmNsdWRlICJfaTE4bl9udW1iZXIuaCIKKyAKKyAvKiBJbmNsdWRlIHRoZSBzaGFyZWQgY29kZSBmb3IgcGFyc2luZyB0aGUgZm9ybWF0IHN0cmluZy4gICovCitAQCAtMTA2NSw4ICsxMDc4LDExIEBAIHN0YXRpYyBjb25zdCB1aW50OF90IGp1bXBfdGFibGVbXSA9CisgIyBkZWZpbmUgcHJvY2Vzc19zdHJpbmdfYXJnKGZzcGVjKSBcCisgICAgIExBQkVMIChmb3JtX2NoYXJhY3Rlcik6CQkJCQkJICAgICAgXAorICAgICAgIC8qIENoYXJhY3Rlci4gICovCQkJCQkJCSAgICAgIFwKKy0gICAgICBpZiAoaXNfbG9uZykJCQkJCQkJICAgICAgXAorLQlnb3RvIExBQkVMIChmb3JtX3djaGFyYWN0ZXIpOwkJCQkJICAgICAgXAorKyAgICAgIGlmIChpc19sb25nKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIGFzc2VydCAoTVVMVElCWVRFX1NVUFBPUlQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBnb3RvIExBQkVMIChmb3JtX3djaGFyYWN0ZXIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgLS13aWR0aDsJLyogQWNjb3VudCBmb3IgdGhlIGNoYXJhY3RlciBpdHNlbGYuICAqLwkJICAgICAgXAorICAgICAgIGlmICghbGVmdCkJCQkJCQkJICAgICAgXAorIAlQQUQgKCcgJyk7CQkJCQkJCSAgICAgIFwKK0BAIC0xMDc5LDYgKzEwOTUsNyBAQCBzdGF0aWMgY29uc3QgdWludDhfdCBqdW1wX3RhYmxlW10gPQorICAgICAgIGJyZWFrOwkJCQkJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKKyAgICAgTEFCRUwgKGZvcm1fd2NoYXJhY3Rlcik6CQkJCQkJICAgICAgXAorKyAgICAgIGFzc2VydCAoTVVMVElCWVRFX1NVUFBPUlQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB7CQkJCQkJCQkJICAgICAgXAorIAkvKiBXaWRlIGNoYXJhY3Rlci4gICovCQkJCQkJICAgICAgXAorIAljaGFyIGJ1ZltNQl9DVVJfTUFYXTsJCQkJCQkgICAgICBcCitAQCAtMTE0NSw2ICsxMTYyLDcgQEAgc3RhdGljIGNvbnN0IHVpbnQ4X3QganVtcF90YWJsZVtdID0KKyAJICB9CQkJCQkJCQkgICAgICBcCisgCWVsc2UJCQkJCQkJCSAgICAgIFwKKyAJICB7CQkJCQkJCQkgICAgICBcCisrICAgICAgICAgICAgYXNzZXJ0IChNVUxUSUJZVEVfU1VQUE9SVCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkgICAgY29uc3Qgd2NoYXJfdCAqczIgPSAoY29uc3Qgd2NoYXJfdCAqKSBzdHJpbmc7CQkgICAgICBcCisgCSAgICBtYnN0YXRlX3QgbWJzdGF0ZTsJCQkJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorQEAgLTEzOTksNyArMTQxNyw5IEBAIHZmcHJpbnRmIChGSUxFICpzLCBjb25zdCBDSEFSX1QgKmZvcm1hdCwgdmFfbGlzdCBhcCkKKyAgICAgTEFCRUwgKGZsYWdfcXVvdGUpOgorICAgICAgIGdyb3VwID0gMTsKKyAKKy0gICAgICBpZiAoZ3JvdXBpbmcgPT0gKGNvbnN0IGNoYXIgKikgLTEpCisrICAgICAgaWYgKCEgTE9DQUxFX1NVUFBPUlQpCisrICAgICAgICBncm91cGluZyA9IE5VTEw7CisrICAgICAgZWxzZSBpZiAoZ3JvdXBpbmcgPT0gKGNvbnN0IGNoYXIgKikgLTEpCisgCXsKKyAjaWZkZWYgQ09NUElMRV9XUFJJTlRGCisgCSAgdGhvdXNhbmRzX3NlcCA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX05VTUVSSUMsCitAQCAtMTcyOCw4ICsxNzQ4LDkgQEAgcHJpbnRmX3Bvc2l0aW9uYWwgKF9JT19GSUxFICpzLCBjb25zdCBDSEFSX1QgKmZvcm1hdCwgaW50IHJlYWRvbmx5X2Zvcm1hdCwKKyAgIHNpemVfdCBjbnQ7CisgCisgICBDSEFSX1QgKndvcmtzdGFydCA9IE5VTEw7CistCistICBpZiAoZ3JvdXBpbmcgPT0gKGNvbnN0IGNoYXIgKikgLTEpCisrICBpZiAoISBMT0NBTEVfU1VQUE9SVCkKKysgICAgZ3JvdXBpbmcgPSBOVUxMOworKyAgZWxzZSBpZiAoZ3JvdXBpbmcgPT0gKGNvbnN0IGNoYXIgKikgLTEpCisgICAgIHsKKyAjaWZkZWYgQ09NUElMRV9XUFJJTlRGCisgICAgICAgdGhvdXNhbmRzX3NlcCA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX05VTUVSSUMsCitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL3Zmc2NhbmYuYyBiL3N0ZGlvLWNvbW1vbi92ZnNjYW5mLmMKK2luZGV4IDBlMjA0ZTcuLjY2Y2MwYWYgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vdmZzY2FuZi5jCisrKysgYi9zdGRpby1jb21tb24vdmZzY2FuZi5jCitAQCAtMjksNiArMjksNyBAQAorICNpbmNsdWRlIDx3Y3R5cGUuaD4KKyAjaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKyAjaW5jbHVkZSA8bG9jYWxlL2xvY2FsZWluZm8uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaWZkZWYJX19HTlVDX18KKyAjIGRlZmluZSBIQVZFX0xPTkdMT05HCitAQCAtMTMzLDYgKzEzNCwxMiBAQAorICMgZGVmaW5lIFdJTlRfVAkJaW50CisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKysjIGRlZmluZSBNVUxUSUJZVEVfU1VQUE9SVCAoMSkKKysjZWxzZQorKyMgZGVmaW5lIE1VTFRJQllURV9TVVBQT1JUICgwKQorKyNlbmRpZgorKworICNkZWZpbmUgZW5jb2RlX2Vycm9yKCkgZG8gewkJCQkJCSAgICAgIFwKKyAJCQkgIGVycnZhbCA9IDQ7CQkJCQkgICAgICBcCisgCQkJICBfX3NldF9lcnJubyAoRUlMU0VRKTsJCQkJICAgICAgXAorQEAgLTMxNiwyNCArMzIzLDM1IEBAIF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfSU9fdmFfbGlzdCBhcmdwdHIsCisgICBBUkdDSEVDSyAocywgZm9ybWF0KTsKKyAKKyAgeworLSNpZm5kZWYgQ09NUElMRV9XU0NBTkYKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICYmICFkZWZpbmVkIChDT01QSUxFX1dTQ0FORikKKyAgICBzdHJ1Y3QgX19sb2NhbGVfZGF0YSAqY29uc3QgY3VybnVtZXJpYyA9IGxvYy0+X19sb2NhbGVzW0xDX05VTUVSSUNdOworICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgICAvKiBGaWd1cmUgb3V0IHRoZSBkZWNpbWFsIHBvaW50IGNoYXJhY3Rlci4gICovCistI2lmZGVmIENPTVBJTEVfV1NDQU5GCisrIyBpZmRlZiBDT01QSUxFX1dTQ0FORgorICAgIGRlY2ltYWwgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19OVU1FUklDLCBfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDKTsKKy0jZWxzZQorKyMgZWxzZQorICAgIGRlY2ltYWwgPSBjdXJudW1lcmljLT52YWx1ZXNbX05MX0lURU1fSU5ERVggKERFQ0lNQUxfUE9JTlQpXS5zdHJpbmc7CistI2VuZGlmCisrIyBlbmRpZgorICAgIC8qIEZpZ3VyZSBvdXQgdGhlIHRob3VzYW5kcyBzZXBhcmF0b3IgY2hhcmFjdGVyLiAgKi8KKy0jaWZkZWYgQ09NUElMRV9XU0NBTkYKKysjIGlmZGVmIENPTVBJTEVfV1NDQU5GCisgICAgdGhvdXNhbmRzID0gX05MX0NVUlJFTlRfV09SRCAoTENfTlVNRVJJQywgX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQyk7CistI2Vsc2UKKysjIGVsc2UKKyAgICB0aG91c2FuZHMgPSBjdXJudW1lcmljLT52YWx1ZXNbX05MX0lURU1fSU5ERVggKFRIT1VTQU5EU19TRVApXS5zdHJpbmc7CisgICAgaWYgKCp0aG91c2FuZHMgPT0gJ1wwJykKKyAgICAgIHRob3VzYW5kcyA9IE5VTEw7CistI2VuZGlmCisrIyBlbmRpZgorKyNlbHNlIC8qIGlmICEgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisrICAgLyogSGFyZC1jb2RlIHZhbHVlcyBmcm9tIHRoZSBDIGxvY2FsZS4gICovCisrIyBpZmRlZiBDT01QSUxFX1dTQ0FORgorKyAgIGRlY2ltYWwgPSBMJy4nOworKyAgIHRob3VzYW5kcyA9IEwnXDAnOworKyMgZWxzZQorKyAgIGRlY2ltYWwgPSAiLiI7CisrICAgdGhvdXNhbmRzID0gTlVMTDsKKysjIGVuZGlmCisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworICB9CisgCisgICAvKiBMb2NrIHRoZSBzdHJlYW0uICAqLworQEAgLTM4NSw2ICs0MDMsOCBAQCBfSU9fdmZzY2FuZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX0lPX3ZhX2xpc3QgYXJncHRyLAorICNpZm5kZWYgQ09NUElMRV9XU0NBTkYKKyAgICAgICBpZiAoIWlzYXNjaWkgKCh1bnNpZ25lZCBjaGFyKSAqZikpCisgCXsKKysgICAgICAgICAgYXNzZXJ0IChNVUxUSUJZVEVfU1VQUE9SVCk7CisrCisgCSAgLyogTm9uLUFTQ0lJLCBtYXkgYmUgYSBtdWx0aWJ5dGUuICAqLworIAkgIGludCBsZW4gPSBfX21icmxlbiAoZiwgc3RybGVuIChmKSwgJnN0YXRlKTsKKyAJICBpZiAobGVuID4gMCkKK0BAIC04MzAsNiArODUwLDggQEAgX0lPX3Zmc2NhbmZfaW50ZXJuYWwgKF9JT19GSUxFICpzLCBjb25zdCBjaGFyICpmb3JtYXQsIF9JT192YV9saXN0IGFyZ3B0ciwKKyAJICAgIH0KKyAJICAvKiBGQUxMVEhST1VHSCAqLworIAljYXNlIExfKCdDJyk6CisrICAgICAgICAgIGFzc2VydCAoTVVMVElCWVRFX1NVUFBPUlQpOworKworIAkgIGlmICh3aWR0aCA9PSAtMSkKKyAJICAgIHdpZHRoID0gMTsKKyAKK0BAIC0xMTcyLDYgKzExOTQsOCBAQCBfSU9fdmZzY2FuZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX0lPX3ZhX2xpc3QgYXJncHRyLAorIAkgIC8qIEZBTExUSFJPVUdIICovCisgCisgCWNhc2UgTF8oJ1MnKToKKysgICAgICAgICAgYXNzZXJ0IChNVUxUSUJZVEVfU1VQUE9SVCk7CisrCisgCSAgeworICNpZm5kZWYgQ09NUElMRV9XU0NBTkYKKyAJICAgIG1ic3RhdGVfdCBjc3RhdGU7CitAQCAtMTQxOSwxMCArMTQ0MywxNyBAQCBfSU9fdmZzY2FuZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX0lPX3ZhX2xpc3QgYXJncHRyLAorIAkgICAgICBjb25zdCBjaGFyICptYmRpZ2l0c1sxMF07CisgCSAgICAgIGNvbnN0IGNoYXIgKm1iZGlnaXRzX2V4dGVuZGVkWzEwXTsKKyAjZW5kaWYKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgCSAgICAgIC8qICAidG9faW5wdW5jdCIgaXMgYSBtYXAgZnJvbSBBU0NJSSBkaWdpdHMgdG8gdGhlaXIKKyAJCSAgZXF1aXZhbGVudCBpbiBsb2NhbGUuIFRoaXMgaXMgZGVmaW5lZCBmb3IgbG9jYWxlcworIAkJICB3aGljaCB1c2UgYW4gZXh0cmEgZGlnaXRzIHNldC4gICovCisgCSAgICAgIHdjdHJhbnNfdCBtYXAgPSBfX3djdHJhbnMgKCJ0b19pbnB1bmN0Iik7CisrI2Vsc2UKKysgICAgICAgICAgICAgIC8qIFRoaXMgd2lsbCBhbHdheXMgYmUgdGhlIGNhc2Ugd2hlbgorKyAgICAgICAgICAgICAgICAgT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcyBkaXNhYmxlZCwgYnV0IHRoZQorKyAgICAgICAgICAgICAgICAgY29tcGlsZXIgY2FuJ3QgZmlndXJlIHRoYXQgb3V0LiAgKi8KKysgICAgICAgICAgICAgIHdjdHJhbnNfdCBtYXAgPSBOVUxMOworKyNlbmRpZgorIAkgICAgICBpbnQgbjsKKyAKKyAJICAgICAgZnJvbV9sZXZlbCA9IDA7CitAQCAtMjA4OCw2ICsyMTE5LDcgQEAgX0lPX3Zmc2NhbmZfaW50ZXJuYWwgKF9JT19GSUxFICpzLCBjb25zdCBjaGFyICpmb3JtYXQsIF9JT192YV9saXN0IGFyZ3B0ciwKKyAJCS0td2lkdGg7CisgCSAgICB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIAkgIHdjdHJhbnNfdCBtYXA7CisgCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKChmbGFncyAmIEkxOE4pICE9IDAsIDApCisgCSAgICAgIC8qIEhleGFkZWNpbWFsIGZsb2F0cyBtYWtlIG5vIHNlbnNlLCBmaXhpbmcgbG9jYWxpemVkCitAQCAtMjMwNCw2ICsyMzM2LDcgQEAgX0lPX3Zmc2NhbmZfaW50ZXJuYWwgKF9JT19GSUxFICpzLCBjb25zdCBjaGFyICpmb3JtYXQsIF9JT192YV9saXN0IGFyZ3B0ciwKKyAJICAgICAgOworICNlbmRpZgorIAkgICAgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAKKyAJICAvKiBIYXZlIHdlIHJlYWQgYW55IGNoYXJhY3Rlcj8gIElmIHdlIHRyeSB0byByZWFkIGEgbnVtYmVyCisgCSAgICAgaW4gaGV4YWRlY2ltYWwgbm90YXRpb24gYW5kIHdlIGhhdmUgcmVhZCBvbmx5IHRoZSBgMHgnCitAQCAtMjM0Myw3ICsyMzc2LDEwIEBAIF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfSU9fdmFfbGlzdCBhcmdwdHIsCisgCisgCWNhc2UgTF8oJ1snKToJLyogQ2hhcmFjdGVyIGNsYXNzLiAgKi8KKyAJICBpZiAoZmxhZ3MgJiBMT05HKQorLQkgICAgU1RSSU5HX0FSRyAod3N0ciwgd2NoYXJfdCwgMTAwKTsKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBhc3NlcnQgKE1VTFRJQllURV9TVVBQT1JUKTsKKysgICAgICAgICAgICAgIFNUUklOR19BUkcgKHdzdHIsIHdjaGFyX3QsIDEwMCk7CisrICAgICAgICAgICAgfQorIAkgIGVsc2UKKyAJICAgIFNUUklOR19BUkcgKHN0ciwgY2hhciwgMTAwKTsKKyAKK0BAIC0yNDE3LDYgKzI0NTMsNyBAQCBfSU9fdmZzY2FuZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX0lPX3ZhX2xpc3QgYXJncHRyLAorIAkgIGlmIChmbGFncyAmIExPTkcpCisgCSAgICB7CisgCSAgICAgIHNpemVfdCBub3cgPSByZWFkX2luOworKyAgICAgICAgICAgICAgYXNzZXJ0IChNVUxUSUJZVEVfU1VQUE9SVCk7CisgI2lmZGVmIENPTVBJTEVfV1NDQU5GCisgCSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChpbmNoYXIgKCkgPT0gV0VPRikpCisgCQlpbnB1dF9lcnJvciAoKTsKK2RpZmYgLS1naXQgYS9zdGRsaWIvTWFrZWZpbGUgYi9zdGRsaWIvTWFrZWZpbGUKK2luZGV4IDQwMjQ2NmEuLjdlN2UzMDQgMTAwNjQ0CistLS0gYS9zdGRsaWIvTWFrZWZpbGUKKysrKyBiL3N0ZGxpYi9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlNYWtlZmlsZSBmb3Igc3RkbGliIHJvdXRpbmVzCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gc3RkbGliCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMzAsNyArMzIsNyBAQCBoZWFkZXJzCTo9IHN0ZGxpYi5oIGJpdHMvc3RkbGliLmggYml0cy9zdGRsaWItbGRibC5oIGJpdHMvc3RkbGliLWZsb2F0LmggICAgICBcCisgCSAgIGFsbG9jYS5oIGZtdG1zZy5oCQkJCQkJICAgICAgXAorIAkgICBiaXRzL3N0ZGxpYi1ic2VhcmNoLmgKKyAKKy1yb3V0aW5lcwk6PQkJCQkJCQkgICAgICBcCisrcm91dGluZXMteQk6PQkJCQkJCQkgICAgICBcCisgCWF0b2YgYXRvaSBhdG9sIGF0b2xsCQkJCQkJICAgICAgXAorIAlhYm9ydAkJCQkJCQkJICAgICAgXAorIAlic2VhcmNoIHFzb3J0IG1zb3J0CQkJCQkJICAgICAgXAorQEAgLTM5LDcgKzQxLDYgQEAgcm91dGluZXMJOj0JCQkJCQkJICAgICAgXAorIAlxdWlja19leGl0IGF0X3F1aWNrX2V4aXQgY3hhX2F0X3F1aWNrX2V4aXQgY3hhX3RocmVhZF9hdGV4aXRfaW1wbCAgICAgXAorIAlhYnMgbGFicyBsbGFicwkJCQkJCQkgICAgICBcCisgCWRpdiBsZGl2IGxsZGl2CQkJCQkJCSAgICAgIFwKKy0JbWJsZW4gbWJzdG93Y3MgbWJ0b3djIHdjc3RvbWJzIHdjdG9tYgkJCQkgICAgICBcCisgCXJhbmRvbSByYW5kb21fciByYW5kIHJhbmRfcgkJCQkJICAgICAgXAorIAlkcmFuZDQ4IGVyYW5kNDggbHJhbmQ0OCBucmFuZDQ4IG1yYW5kNDgganJhbmQ0OAkJCSAgICAgIFwKKyAJc3JhbmQ0OCBzZWVkNDggbGNvbmc0OAkJCQkJCSAgICAgIFwKK0BAIC01Miw5ICs1MywxOCBAQCByb3V0aW5lcwk6PQkJCQkJCQkgICAgICBcCisgCXN0cnRvZl9sIHN0cnRvZF9sIHN0cnRvbGRfbAkJCQkJICAgICAgXAorIAlzeXN0ZW0gY2Fub25pY2FsaXplCQkJCQkJICAgICAgXAorIAlhNjRsIGw2NGEJCQkJCQkJICAgICAgXAorLQlycG1hdGNoIHN0cmZtb24gc3RyZm1vbl9sIGdldHN1Ym9wdCB4cGdfYmFzZW5hbWUgZm10bXNnCQkgICAgICBcCistCXN0cnRvaW1heCBzdHJ0b3VtYXggd2NzdG9pbWF4IHdjc3RvdW1heAkJCQkgICAgICBcCisrCWdldHN1Ym9wdCB4cGdfYmFzZW5hbWUJCQkJCQkgICAgICBcCisrCXN0cnRvaW1heCBzdHJ0b3VtYXgJCQkJCQkgICAgICBcCisgCWdldGNvbnRleHQgc2V0Y29udGV4dCBtYWtlY29udGV4dCBzd2FwY29udGV4dAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgKz0JCQkJICAgICAgXAorKwlzdHJmbW9uIHN0cmZtb25fbAorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpICs9CQkJCSAgICAgIFwKKysJbWJsZW4gbWJzdG93Y3MgbWJ0b3djIHdjc3RvbWJzIHdjdG9tYgkJCQkgICAgICBcCisrCXdjc3RvaW1heCB3Y3N0b3VtYXgKKytpZmVxICh5eSwkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpJChPUFRJT05fUE9TSVhfUkVHRVhQKSkKKytyb3V0aW5lcy15ICs9IHJwbWF0Y2gKKytlbmRpZgorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19GTVRNU0cpICs9IGZtdG1zZworIGF1eCA9CWdyb3VwaW5nIGdyb3VwaW5nd2MgdGVuc19pbl9saW1iCisgCisgIyBUaGVzZSByb3V0aW5lcyB3aWxsIGJlIG9taXR0ZWQgZnJvbSB0aGUgbGliYyBzaGFyZWQgb2JqZWN0LgorQEAgLTYyLDIwICs3MiwyNCBAQCBhdXggPQlncm91cGluZyBncm91cGluZ3djIHRlbnNfaW5fbGltYgorICMgbGlua2VkIGFnYWluc3Qgd2hlbiB0aGUgc2hhcmVkIGxpYnJhcnkgd2lsbCBiZSB1c2VkLgorIHN0YXRpYy1vbmx5LXJvdXRpbmVzID0gYXRleGl0IGF0X3F1aWNrX2V4aXQKKyAKKy10ZXN0LXNyY3MJOj0gdHN0LWZtdG1zZworLXRlc3RzCQk6PSB0c3Qtc3RydG9sIHRzdC1zdHJ0b2QgdGVzdG1iIHRlc3RyYW5kIHRlc3Rzb3J0IHRlc3RkaXYgICBcCisrdGVzdC1zcmNzLSQoT1BUSU9OX0VHTElCQ19GTVRNU0cpCTo9IHRzdC1mbXRtc2cKKyt0ZXN0cwkJOj0gdHN0LXN0cnRvbCB0c3Qtc3RydG9kIHRlc3RyYW5kIHRlc3Rzb3J0IHRlc3RkaXYJICAgIFwKKyAJCSAgIHRlc3QtY2Fub24gdGVzdC1jYW5vbjIgdHN0LXN0cnRvbGwgdHN0LWVudmlyb24JICAgIFwKKyAJCSAgIHRzdC14cGctYmFzZW5hbWUgdHN0LXJhbmRvbSB0c3QtcmFuZG9tMiB0c3QtYnNlYXJjaAkgICAgXAorIAkJICAgdHN0LWxpbWl0cyB0c3QtcmFuZDQ4IGJ1Zy1zdHJ0b2QgdHN0LXNldGNvbnRleHQgICAgICAgICAgXAorLQkJICAgdHN0LXNldGNvbnRleHQyIHRlc3QtYTY0bCB0c3QtcXNvcnQgdHN0LXN5c3RlbSB0ZXN0bWIyICAgXAorLQkJICAgYnVnLXN0cnRvZDIgdHN0LWF0b2YxIHRzdC1hdG9mMiB0c3Qtc3RydG9kMiB0c3Qtc3RydG9kMyAgXAorLQkJICAgdHN0LXJhbmQ0OC0yIHRzdC1tYWtlY29udGV4dCB0c3Qtc3RydG9kNCB0c3Qtc3RydG9kNSAgICAgXAorKwkJICAgdHN0LXNldGNvbnRleHQyIHRlc3QtYTY0bCB0c3QtcXNvcnQgdHN0LXN5c3RlbQkgICAgXAorKwkJICAgYnVnLXN0cnRvZDIgdHN0LWF0b2YxIHRzdC1hdG9mMiB0c3Qtc3RydG9kMiAJCSAgICBcCisrCQkgICB0c3QtcmFuZDQ4LTIgdHN0LW1ha2Vjb250ZXh0IAkJCSAgICBcCisgCQkgICB0c3QtcXNvcnQyIHRzdC1tYWtlY29udGV4dDIgdHN0LXN0cnRvZDYgdHN0LXVuc2V0ZW52MSAgICBcCisgCQkgICB0c3QtbWFrZWNvbnRleHQzIGJ1Zy1nZXRjb250ZXh0IGJ1Zy1mbXRtc2cxCQkgICAgXAorIAkJICAgdHN0LXNlY3VyZS1nZXRlbnYgdHN0LXN0cnRvZC1vdmVyZmxvdyB0c3Qtc3RydG9kLXJvdW5kICAgXAorIAkJICAgdHN0LXRpbmluZXNzIHRzdC1zdHJ0b2QtdW5kZXJmbG93IHRzdC10bHMtYXRleGl0CSAgICBcCisgCQkgICB0c3Qtc2V0Y29udGV4dDMgdHN0LXRscy1hdGV4aXQtbm9kZWxldGUKKyB0ZXN0cy1zdGF0aWMJOj0gdHN0LXNlY3VyZS1nZXRlbnYKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJCSs9IHRzdC1zdHJ0b2QzIHRzdC1zdHJ0b2Q0IHRzdC1zdHJ0b2Q1IHRlc3RtYjIKKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSBcCisrCQkrPSB0ZXN0bWIKKyAKKyBtb2R1bGVzLW5hbWVzCT0gdHN0LXRscy1hdGV4aXQtbGliCisgCitAQCAtMTE2LDggKzEzMCwxMCBAQCBDRkxBR1MtdHN0LW1ha2Vjb250ZXh0Mi5jID0gJChzdGFjay1hbGlnbi10ZXN0LWZsYWdzKQorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpaXNvbWFjLm91dAorIAorIGlmZXEgKCQocnVuLWJ1aWx0LXRlc3RzKSx5ZXMpCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfRk1UTVNHKSkKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KXRzdC1mbXRtc2cub3V0CisgZW5kaWYKKytlbmRpZgorIAorIGluY2x1ZGUgLi4vUnVsZXMKKyAKK2RpZmYgLS1naXQgYS9zdGRsaWIvc3RydG9kX2wuYyBiL3N0ZGxpYi9zdHJ0b2RfbC5jCitpbmRleCBlMTNhYjFlLi42M2VmZTQxIDEwMDY0NAorLS0tIGEvc3RkbGliL3N0cnRvZF9sLmMKKysrKyBiL3N0ZGxpYi9zdHJ0b2RfbC5jCitAQCAtMTcsNiArMTcsNyBAQAorICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKyAgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDx4bG9jYWxlLmg+CisgCisgZXh0ZXJuIGRvdWJsZSBfX19fc3RydG9kX2xfaW50ZXJuYWwgKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50LCBfX2xvY2FsZV90KTsKK0BAIC01NDgsNiArNTQ5LDcgQEAgX19fX1NUUlRPRl9JTlRFUk5BTCAobnB0ciwgZW5kcHRyLCBncm91cCwgbG9jKQorICAgLyogVXNlZCBpbiBzZXZlcmFsIHBsYWNlcy4gICovCisgICBpbnQgY250OworIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIHN0cnVjdCBfX2xvY2FsZV9kYXRhICpjdXJyZW50ID0gbG9jLT5fX2xvY2FsZXNbTENfTlVNRVJJQ107CisgCisgICBpZiAoX19nbGliY191bmxpa2VseSAoZ3JvdXApKQorQEAgLTU4Niw2ICs1ODgsMTcgQEAgX19fX1NUUlRPRl9JTlRFUk5BTCAobnB0ciwgZW5kcHRyLCBncm91cCwgbG9jKQorICAgZGVjaW1hbF9sZW4gPSBzdHJsZW4gKGRlY2ltYWwpOworICAgYXNzZXJ0IChkZWNpbWFsX2xlbiA+IDApOworICNlbmRpZgorKyNlbHNlIC8qIGlmICEgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisrICAvKiBIYXJkLWNvZGUgdmFsdWVzIGZyb20gdGhlICdDJyBsb2NhbGUuICAqLworKyAgZ3JvdXBpbmcgPSBOVUxMOworKyNpZmRlZiBVU0VfV0lERV9DSEFSCisrICBkZWNpbWFsID0gTCcuJzsKKysjIGRlZmluZSBkZWNpbWFsX2xlbiAxCisrI2Vsc2UKKysgIGRlY2ltYWwgPSAiLiI7CisrICBkZWNpbWFsX2xlbiA9IDE7CisrI2VuZGlmCisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworIAorICAgLyogUHJlcGFyZSBudW1iZXIgcmVwcmVzZW50YXRpb24uICAqLworICAgZXhwb25lbnQgPSAwOworZGlmZiAtLWdpdCBhL3N0ZGxpYi90c3Qtc3RydG9kLmMgYi9zdGRsaWIvdHN0LXN0cnRvZC5jCitpbmRleCBhNDY5MjA4Li4yOGZiNDIzIDEwMDY0NAorLS0tIGEvc3RkbGliL3RzdC1zdHJ0b2QuYworKysrIGIvc3RkbGliL3RzdC1zdHJ0b2QuYworQEAgLTIzLDYgKzIzLDcgQEAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyBzdHJ1Y3QgbHRlc3QKKyAgIHsKK0BAIC0xNzYsNyArMTc3LDkgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiogYXJndikKKyAKKyAgIHN0YXR1cyB8PSBsb25nX2RibCAoKTsKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBzdGF0dXMgfD0gbG9jYWxlX3Rlc3QgKCk7CisrI2VuZGlmCisgCisgICByZXR1cm4gc3RhdHVzID8gRVhJVF9GQUlMVVJFIDogRVhJVF9TVUNDRVNTOworIH0KK0BAIC0yMTksNiArMjIyLDcgQEAgbG9uZ19kYmwgKHZvaWQpCisgICByZXR1cm4gMDsKKyB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIC8qIFBlcmZvcm0gYSBmZXcgdGVzdHMgaW4gYSBsb2NhbGUgd2l0aCB0aG91c2FuZHMgc2VwYXJhdG9ycy4gICovCisgc3RhdGljIGludAorIGxvY2FsZV90ZXN0ICh2b2lkKQorQEAgLTI3NiwzICsyODAsNCBAQCBsb2NhbGVfdGVzdCAodm9pZCkKKyAKKyAgIHJldHVybiByZXN1bHQ7CisgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KK2RpZmYgLS1naXQgYS9zdHJlYW1zL01ha2VmaWxlIGIvc3RyZWFtcy9NYWtlZmlsZQoraW5kZXggYThhNjE2Mi4uY2ViNDIzZiAxMDA2NDQKKy0tLSBhL3N0cmVhbXMvTWFrZWZpbGUKKysrKyBiL3N0cmVhbXMvTWFrZWZpbGUKK0BAIC0xOCwxMSArMTgsMTQgQEAKKyAjCisgIwlNYWtlZmlsZSBmb3Igc3RyZWFtcy4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBzdHJlYW1zCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgaGVhZGVycwkJPSBzdHJvcHRzLmggc3lzL3N0cm9wdHMuaCBiaXRzL3N0cm9wdHMuaCBiaXRzL3h0aXR5cGVzLmgKKy1yb3V0aW5lcwk9IGlzYXN0cmVhbSBnZXRtc2cgZ2V0cG1zZyBwdXRtc2cgcHV0cG1zZyBmYXR0YWNoIGZkZXRhY2gKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfU1RSRUFNUykgXAorKwkrPSBpc2FzdHJlYW0gZ2V0bXNnIGdldHBtc2cgcHV0bXNnIHB1dHBtc2cgZmF0dGFjaCBmZGV0YWNoCisgCisgaW5jbHVkZSAuLi9SdWxlcworZGlmZiAtLWdpdCBhL3N0cmluZy9NYWtlZmlsZSBiL3N0cmluZy9NYWtlZmlsZQoraW5kZXggODQyNGE2MS4uNTk4ODgzNCAxMDA2NDQKKy0tLSBhL3N0cmluZy9NYWtlZmlsZQorKysrIGIvc3RyaW5nL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3Igc3RyaW5nIHBvcnRpb24gb2YgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBzdHJpbmcKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0zOSwxMCArNDEsMTIgQEAgcm91dGluZXMJOj0gc3RyY2F0IHN0cmNociBzdHJjbXAgc3RyY29sbCBzdHJjcHkgc3RyY3NwbgkJXAorIAkJICAgJChhZGRwcmVmaXggYXJnei0sYXBwZW5kIGNvdW50IGNyZWF0ZSBjdHNlcCBuZXh0CVwKKyAJCQkJICAgICBkZWxldGUgZXh0cmFjdCBpbnNlcnQgc3RyaW5naWZ5CVwKKyAJCQkJICAgICBhZGRzZXAgcmVwbGFjZSkJCQlcCistCQkgICBlbnZ6IGJhc2VuYW1lCQkJCQlcCisrCQkgICBiYXNlbmFtZQkJCQkJCVwKKyAJCSAgIHN0cmNvbGxfbCBzdHJ4ZnJtX2wgc3RyaW5nLWlubGluZXMgbWVtcmNocgkJXAorIAkJICAgeHBnLXN0cmVycm9yIHN0cmVycm9yX2wKKyAKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfRU5WWikgKz0gZW52egorKworIHN0cm9wLXRlc3RzCTo9IG1lbWNociBtZW1jbXAgbWVtY3B5IG1lbW1vdmUgbWVtcGNweSBtZW1zZXQgbWVtY2NweQlcCisgCQkgICBzdHBjcHkgc3RwbmNweSBzdHJjYXQgc3RyY2hyIHN0cmNtcCBzdHJjcHkgc3RyY3NwbglcCisgCQkgICBzdHJsZW4gc3RybmNtcCBzdHJuY3B5IHN0cnBicmsgc3RycmNociBzdHJzcG4gbWVtbWVtCVwKK0BAIC01MSwxMCArNTUsMTIgQEAgc3Ryb3AtdGVzdHMJOj0gbWVtY2hyIG1lbWNtcCBtZW1jcHkgbWVtbW92ZSBtZW1wY3B5IG1lbXNldCBtZW1jY3B5CVwKKyB0ZXN0cwkJOj0gdGVzdGVyIGlubC10ZXN0ZXIgbm9pbmwtdGVzdGVyIHRlc3Rjb3B5IHRlc3QtZmZzCVwKKyAJCSAgIHRzdC1zdHJsZW4gc3RyYXRjbGlmZiB0c3Qtc3ZjIHRzdC1pbmxjYWxsCQlcCisgCQkgICBidWctc3RybmNhdDEgYnVnLXN0cnNwbjEgYnVnLXN0cnBicmsxIHRzdC1ic3dhcAlcCistCQkgICB0c3Qtc3RydG9rIHRzdC1zdHJ4ZnJtIGJ1Zy1zdHJjb2xsMSB0c3Qtc3RyZnJ5CVwKKysJCSAgIHRzdC1zdHJ0b2sgdHN0LXN0cmZyeQlcCisgCQkgICBidWctc3RydG9rMSAkKGFkZHByZWZpeCB0ZXN0LSwkKHN0cm9wLXRlc3RzKSkJXAorLQkJICAgYnVnLWVudnoxIHRzdC1zdHJ4ZnJtMiB0c3QtZW5kaWFuIHRzdC1zdmMyCQlcCistCQkgICB0c3Qtc3RydG9rX3IKKysJCSAgIHRzdC1zdHJ4ZnJtMiB0c3QtZW5kaWFuIHRzdC1zdmMyIHRzdC1zdHJ0b2tfcgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19FTlZaKSArPSBidWctZW52ejEKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJCSs9IHRzdC1zdHJ4ZnJtIGJ1Zy1zdHJjb2xsMQorIAorIHh0ZXN0cyA9IHRzdC1zdHJjb2xsLW92ZXJmbG93CisgCitkaWZmIC0tZ2l0IGEvc3RyaW5nL3N0cmNvbGxfbC5jIGIvc3RyaW5nL3N0cmNvbGxfbC5jCitpbmRleCA4ZjEyMjVmLi5iMzZiMThjIDEwMDY0NAorLS0tIGEvc3RyaW5nL3N0cmNvbGxfbC5jCisrKysgYi9zdHJpbmcvc3RyY29sbF9sLmMKK0BAIC0yNCw2ICsyNCw3IEBACisgI2luY2x1ZGUgPHN0ZGludC5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2lmbmRlZiBTVFJJTkdfVFlQRQorICMgZGVmaW5lIFNUUklOR19UWVBFIGNoYXIKK0BAIC0yNjAsNyArMjYxLDExIEBAIGludAorIFNUUkNPTEwgKGNvbnN0IFNUUklOR19UWVBFICpzMSwgY29uc3QgU1RSSU5HX1RZUEUgKnMyLCBfX2xvY2FsZV90IGwpCisgeworICAgc3RydWN0IF9fbG9jYWxlX2RhdGEgKmN1cnJlbnQgPSBsLT5fX2xvY2FsZXNbTENfQ09MTEFURV07CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgdWludF9mYXN0MzJfdCBucnVsZXMgPSBjdXJyZW50LT52YWx1ZXNbX05MX0lURU1fSU5ERVggKF9OTF9DT0xMQVRFX05SVUxFUyldLndvcmQ7CisrI2Vsc2UKKysgIGNvbnN0IHVpbnRfZmFzdDMyX3QgbnJ1bGVzID0gMDsKKysjZW5kaWYKKyAgIC8qIFdlIGRvbid0IGFzc2lnbiB0aGUgZm9sbG93aW5nIHZhbHVlcyByaWdodCBhd2F5IHNpbmNlIGl0IG1pZ2h0IGJlCisgICAgICB1bm5lY2Vzc2FyeSBpbiBjYXNlIHRoZXJlIGFyZSBubyBydWxlcy4gICovCisgICBjb25zdCB1bnNpZ25lZCBjaGFyICpydWxlc2V0czsKK2RpZmYgLS1naXQgYS9zdHJpbmcvc3RyZXJyb3JfbC5jIGIvc3RyaW5nL3N0cmVycm9yX2wuYworaW5kZXggMmVkNzhiNS4uNjU4NDgxMyAxMDA2NDQKKy0tLSBhL3N0cmluZy9zdHJlcnJvcl9sLmMKKysrKyBiL3N0cmluZy9zdHJlcnJvcl9sLmMKK0BAIC0yMSw2ICsyMSw3IEBACisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgCisgc3RhdGljIF9fdGhyZWFkIGNoYXIgKmxhc3RfdmFsdWU7CitAQCAtMjksMTAgKzMwLDE0IEBAIHN0YXRpYyBfX3RocmVhZCBjaGFyICpsYXN0X3ZhbHVlOworIHN0YXRpYyBjb25zdCBjaGFyICoKKyB0cmFuc2xhdGUgKGNvbnN0IGNoYXIgKnN0ciwgbG9jYWxlX3QgbG9jKQorIHsKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBsb2NhbGVfdCBvbGRsb2MgPSBfX3VzZWxvY2FsZSAobG9jKTsKKyAgIGNvbnN0IGNoYXIgKnJlcyA9IF8oc3RyKTsKKyAgIF9fdXNlbG9jYWxlIChvbGRsb2MpOworICAgcmV0dXJuIHJlczsKKysjZWxzZQorKyAgcmV0dXJuIHN0cjsKKysjZW5kaWYKKyB9CisgCisgCitkaWZmIC0tZ2l0IGEvc3RyaW5nL3N0cnhmcm1fbC5jIGIvc3RyaW5nL3N0cnhmcm1fbC5jCitpbmRleCA4YjYxZWEyLi40MWZkYzIyIDEwMDY0NAorLS0tIGEvc3RyaW5nL3N0cnhmcm1fbC5jCisrKysgYi9zdHJpbmcvc3RyeGZybV9sLmMKK0BAIC0yNCw2ICsyNCw3IEBACisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2lmbmRlZiBTVFJJTkdfVFlQRQorICMgZGVmaW5lIFNUUklOR19UWVBFIGNoYXIKK0BAIC02NjksNyArNjcwLDExIEBAIFNUUlhGUk0gKFNUUklOR19UWVBFICpkZXN0LCBjb25zdCBTVFJJTkdfVFlQRSAqc3JjLCBzaXplX3QgbiwgX19sb2NhbGVfdCBsKQorIHsKKyAgIGxvY2FsZV9kYXRhX3QgbF9kYXRhOworICAgc3RydWN0IF9fbG9jYWxlX2RhdGEgKmN1cnJlbnQgPSBsLT5fX2xvY2FsZXNbTENfQ09MTEFURV07CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgbF9kYXRhLm5ydWxlcyA9IGN1cnJlbnQtPnZhbHVlc1tfTkxfSVRFTV9JTkRFWCAoX05MX0NPTExBVEVfTlJVTEVTKV0ud29yZDsKKysjZWxzZQorKyAgbF9kYXRhLm5ydWxlcyA9IDA7CisrI2VuZGlmCisgCisgICAvKiBIYW5kbGUgYnl0ZSBjb21wYXJpc29uIGNhc2UuICAqLworICAgaWYgKGxfZGF0YS5ucnVsZXMgPT0gMCkKK2RpZmYgLS1naXQgYS9zdHJpbmcvdGVzdC1zdHJjbXAuYyBiL3N0cmluZy90ZXN0LXN0cmNtcC5jCitpbmRleCBkYzRiYTZmLi5hOTc4NjU2IDEwMDY0NAorLS0tIGEvc3RyaW5nL3Rlc3Qtc3RyY21wLmMKKysrKyBiL3N0cmluZy90ZXN0LXN0cmNtcC5jCitAQCAtMzI5LDM0ICszMjksNiBAQCBjaGVjayAodm9pZCkKKyAJCUZPUl9FQUNIX0lNUEwgKGltcGwsIDApCisgCQljaGVja19yZXN1bHQgKGltcGwsIHMxICsgaTEsIHMyICsgaTIsIGV4cF9yZXN1bHQpOworICAgICAgIH0KKy0KKy0gIC8qIFRlc3QgY2FzZXMgd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlIHplcm8gYnl0ZXMgYWZ0ZXIgdGhlIGZpcnN0LiAgKi8KKy0KKy0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTYgKyAxOyBpKyspCistICAgIHsKKy0gICAgICBzMVtpXSA9IDB4MDA7CistICAgICAgczJbaV0gPSAweDAwOworLSAgICB9CistCistICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDE2OyBpKyspCistICAgIHsKKy0gICAgICBpbnQgZXhwX3Jlc3VsdDsKKy0KKy0gICAgICBmb3IgKGludCB2YWwgPSAweDAxOyB2YWwgPCAweDEwMDsgdmFsKyspCistCXsKKy0JICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGk7IGorKykKKy0JICAgIHsKKy0JICAgICAgczFbal0gPSB2YWw7CistCSAgICAgIHMyW2pdID0gdmFsOworLQkgICAgfQorLQorLQkgIHMyW2ldID0gdmFsOworLQorLQkgIGV4cF9yZXN1bHQgPSBTSU1QTEVfU1RSQ01QIChzMSwgczIpOworLQkgIEZPUl9FQUNIX0lNUEwgKGltcGwsIDApCistCSAgICBjaGVja19yZXN1bHQgKGltcGwsIHMxLCBzMiwgZXhwX3Jlc3VsdCk7CistCX0KKy0gICAgfQorIH0KKyAKKyAKK2RpZmYgLS1naXQgYS9zdHJpbmcvdHN0LXN0cnhmcm0uYyBiL3N0cmluZy90c3Qtc3RyeGZybS5jCitpbmRleCBmNDhjZmMwLi5jM2E1MWY5IDEwMDY0NAorLS0tIGEvc3RyaW5nL3RzdC1zdHJ4ZnJtLmMKKysrKyBiL3N0cmluZy90c3Qtc3RyeGZybS5jCitAQCAtMyw2ICszLDcgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIAorIGNoYXIgY29uc3Qgc3RyaW5nW10gPSAiIjsKK0BAIC02NCw4ICs2NSwxMCBAQCBkb190ZXN0ICh2b2lkKQorICAgaW50IHJlc3VsdCA9IDA7CisgCisgICByZXN1bHQgfD0gdGVzdCAoIkMiKTsKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICByZXN1bHQgfD0gdGVzdCAoImVuX1VTLklTTy04ODU5LTEiKTsKKyAgIHJlc3VsdCB8PSB0ZXN0ICgiZGVfREUuVVRGLTgiKTsKKysjZW5kaWYKKyAKKyAgIHJldHVybiByZXN1bHQ7CisgfQorZGlmZiAtLWdpdCBhL3N0cmluZy90c3Qtc3RyeGZybTIuYyBiL3N0cmluZy90c3Qtc3RyeGZybTIuYworaW5kZXggZDVhMTExNS4uMTljN2YzMCAxMDA2NDQKKy0tLSBhL3N0cmluZy90c3Qtc3RyeGZybTIuYworKysrIGIvc3RyaW5nL3RzdC1zdHJ4ZnJtMi5jCitAQCAtMSw2ICsxLDcgQEAKKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIHN0YXRpYyBpbnQKKyBkb190ZXN0ICh2b2lkKQorQEAgLTM4LDYgKzM5LDcgQEAgZG9fdGVzdCAodm9pZCkKKyAgICAgICByZXMgPSAxOworICAgICB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiZGVfREUuVVRGLTgiKSA9PSBOVUxMKQorICAgICB7CisgICAgICAgcHV0cyAoInNldGxvY2FsZSBmYWlsZWQiKTsKK0BAIC03NSw2ICs3Nyw3IEBAIGRvX3Rlc3QgKHZvaWQpCisgCSAgcmVzID0gMTsKKyAJfQorICAgICB9CisrI2VuZGlmCisgCisgICByZXR1cm4gcmVzOworIH0KK2RpZmYgLS1naXQgYS9zdW5ycGMvTWFrZWZpbGUgYi9zdW5ycGMvTWFrZWZpbGUKK2luZGV4IDYwY2FhMGEuLjViYzcwYWIgMTAwNjQ0CistLS0gYS9zdW5ycGMvTWFrZWZpbGUKKysrKyBiL3N1bnJwYy9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIHN1bnJwYyBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHN1bnJwYworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTU1LDcgKzU3LDYgQEAgaGVhZGVycy1pbi10aXJwYyA9ICQoYWRkcHJlZml4IHJwYy8sYXV0aC5oIGF1dGhfdW5peC5oIGNsbnQuaCBwbWFwX2NsbnQuaCBcCisgaGVhZGVycy1ub3QtaW4tdGlycGMgPSAkKGFkZHByZWZpeCBycGMvLGtleV9wcm90LmggcnBjX2Rlcy5oKSBcCisgCQkgICAgICAgJChycGNzdmM6JT1ycGNzdmMvJSkgcnBjc3ZjL2Jvb3RwYXJhbS5oCisgaGVhZGVycyA9IHJwYy9uZXRkYi5oCistaW5zdGFsbC1vdGhlcnMgPSAkKGluc3Rfc3lzY29uZmRpcikvcnBjCisgZ2VuZXJhdGVkICs9ICQocnBjc3ZjOiUueD1ycGNzdmMvJS5oKSAkKHJwY3N2YzolLng9eCUuYykgJChycGNzdmM6JS54PXglLnN0bXApIFwKKyAJICAgICAkKHJwY3N2YzolLng9cnBjc3ZjLyUuc3RtcCkgcnBjZ2VuCisgZ2VuZXJhdGVkLWRpcnMgKz0gcnBjc3ZjCitAQCAtNjUsMjAgKzY2LDI4IEBAIGhlYWRlcnMgKz0gJChoZWFkZXJzLWluLXRpcnBjKSAkKGhlYWRlcnMtbm90LWluLXRpcnBjKQorIGVuZGlmCisgCisgaWZlcSAoJChidWlsZC1zaGFyZWQpLHllcykKKy1uZWVkLWV4cG9ydC1yb3V0aW5lcyA6PSBhdXRoX2RlcyBhdXRoX3VuaXggY2xudF9nZW4gY2xudF9wZXJyIGNsbnRfdGNwIFwKKytuZWVkLWV4cG9ydC1yb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSA6PSBcCisrCQkJYXV0aF9kZXMgYXV0aF91bml4IGNsbnRfZ2VuIGNsbnRfcGVyciBjbG50X3RjcCBcCisgCQkJY2xudF91ZHAgZ2V0X215YWRkciBrZXlfY2FsbCBuZXRuYW1lIHBtX2dldHBvcnQgXAorLQkJCXJwY190aHJlYWQgc3ZjIHN2Y190Y3Agc3ZjX3VkcCB4Y3J5cHQgeGRyX2FycmF5IHhkciBcCisrCQkJcnBjX3RocmVhZCBzdmMgc3ZjX3RjcCBzdmNfdWRwIHhkcl9hcnJheSB4ZHIgXAorIAkJCXhkcl9pbnRYWF90IHhkcl9tZW0geGRyX3JlZiB4ZHJfc2l6ZW9mIHhkcl9zdGRpbyBcCisgCQkJc3ZjX3J1bgorK25lZWQtZXhwb3J0LXJvdXRpbmVzLXkgKz0geGNyeXB0CisrbmVlZC1leHBvcnQtcm91dGluZXMgOj0gJChuZWVkLWV4cG9ydC1yb3V0aW5lcy15KQorIAorLXJvdXRpbmVzIDo9IGF1dGhfbm9uZSBhdXRodXhwcm90IGJpbmRyc3ZwcnQgY2xudF9yYXcgY2xudF9zaW1wIFwKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSA6PSBcCisrCSAgICBhdXRoX25vbmUgYXV0aHV4cHJvdCBiaW5kcnN2cHJ0IGNsbnRfcmF3IGNsbnRfc2ltcCBcCisgCSAgICBycGNfZHRhYmxlIGdldHJwY3BvcnQgcG1hcF9jbG50IHBtX2dldG1hcHMgcG1hcF9wcm90IHBtYXBfcHJvdDIgXAorIAkgICAgcG1hcF9ybXQgcnBjX3Byb3QgcnBjX2NvbW1vbiBycGNfY21zZyBzdmNfYXV0aCBzdmNfYXV0aHV4IHN2Y19yYXcgXAorIAkgICAgc3ZjX3NpbXBsZSB4ZHJfZmxvYXQgeGRyX3JlYyBwdWJsaWNrZXkgYXV0aGRlc19wcm90IFwKKy0JICAgIGRlc19jcnlwdCBkZXNfaW1wbCBkZXNfc29mdCBrZXlfcHJvdCBvcGVuY2hpbGQgcnRpbWUgc3ZjYXV0aF9kZXMgXAorKwkgICAga2V5X3Byb3Qgb3BlbmNoaWxkIHJ0aW1lIHN2Y2F1dGhfZGVzIFwKKyAJICAgIGdldHJwY2VudCBnZXRycGNieW5hbWUgZ2V0cnBjYnludW1iZXIgXAorIAkgICAgZ2V0cnBjZW50X3IgZ2V0cnBjYnluYW1lX3IgZ2V0cnBjYnludW1iZXJfciBcCistCSAgICBjbG50X3VuaXggc3ZjX3VuaXggY3JlYXRlX3hpZCAkKG5lZWQtZXhwb3J0LXJvdXRpbmVzKQorKwkgICAgY2xudF91bml4IHN2Y191bml4IGNyZWF0ZV94aWQKKysKKysjIHhkZWNyeXB0IGlzIGFsc28gdXNlZCBieSBuc3MvbnNzX2ZpbGVzL2ZpbGVzLWtleS5jLgorK3JvdXRpbmVzLXkgKz0gZGVzX2NyeXB0IGRlc19pbXBsIGRlc19zb2Z0ICQobmVlZC1leHBvcnQtcm91dGluZXMpCisrCisgaWZuZXEgKCQobGluay1vYnNvbGV0ZS1ycGMpLHllcykKKyAjIFdlIG9ubHkgYWRkIHRoZSBSUEMgZm9yIGNvbXBhdGliaWxpdHkgdG8gbGliYy5zby4KKyBzaGFyZWQtb25seS1yb3V0aW5lcyA9ICQocm91dGluZXMpCitAQCAtODcsMjUgKzk2LDI4IEBAIGVuZGlmCisgCisgIyBXZSBkbyBub3QgYnVpbGQgcnBjaW5mbyBhbnltb3JlLiAgSXQgaXMgbm90IG5lZWRlZCBmb3IgYSBib290c3RyYXAKKyAjIGFuZCBub3Qgd2FudGVkIG9uIGNvbXBsZXRlIHN5c3RlbXMuCistIyBvdGhlcnMgOj0gcnBjaW5mbworLSMgaW5zdGFsbC1zYmluIDo9IHJwY2luZm8KKy1pbnN0YWxsLWJpbiA6PSBycGNnZW4KKysjIG90aGVycy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSArPSBycGNpbmZvCisrIyBpbnN0YWxsLXNiaW4tJChPUFRJT05fRUdMSUJDX1NVTlJQQykgKz0gcnBjaW5mbworK2luc3RhbGwtYmluLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpICs9IHJwY2dlbgorIHJwY2dlbi1vYmpzID0gcnBjX21haW4ubyBycGNfaG91dC5vIHJwY19jb3V0Lm8gcnBjX3BhcnNlLm8gXAorIAkgICAgICBycGNfc2Nhbi5vIHJwY191dGlsLm8gcnBjX3N2Y291dC5vIHJwY19jbG50b3V0Lm8gXAorIAkgICAgICBycGNfdGJsb3V0Lm8gcnBjX3NhbXBsZS5vCistZXh0cmEtb2JqcyA9ICQocnBjZ2VuLW9ianMpICQoYWRkcHJlZml4IGNyb3NzLSwkKHJwY2dlbi1vYmpzKSkKKy1vdGhlcnMgKz0gcnBjZ2VuCisrZXh0cmEtb2Jqcy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSA9ICQocnBjZ2VuLW9ianMpICQoYWRkcHJlZml4IGNyb3NzLSwkKHJwY2dlbi1vYmpzKSkKKytvdGhlcnMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgKz0gcnBjZ2VuCisrCisraW5zdGFsbC1vdGhlcnMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgKz0gJChpbnN0X3N5c2NvbmZkaXIpL3JwYworIAorLXRlc3RzID0gdHN0LXhkcm1lbSB0c3QteGRybWVtMiB0ZXN0LXJwY2VudAorLXh0ZXN0cyA6PSB0c3QtZ2V0bXlhZGRyCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgPSB0c3QteGRybWVtIHRzdC14ZHJtZW0yIHRlc3QtcnBjZW50CisreHRlc3RzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpIDo9IHRzdC1nZXRteWFkZHIKKyAKKyBpZmVxICgkKGhhdmUtdGhyZWFkLWxpYnJhcnkpLHllcykKKy14dGVzdHMgKz0gdGhyc3ZjCisreHRlc3RzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpICs9IHRocnN2YworIGVuZGlmCisgCisgaGVhZGVycyArPSAkKHJwY3N2YzolLng9cnBjc3ZjLyUuaCkKKy1leHRyYS1saWJzIDo9IGxpYnJwY3N2YworLWV4dHJhLWxpYnMtb3RoZXJzIDo9IGxpYnJwY3N2YyAjIE1ha2UgaXQgaW4gYG90aGVycycgcGFzcywgbm90IGBsaWInIHBhc3MuCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSArPSBsaWJycGNzdmMKKysjIE1ha2UgaXQgaW4gYG90aGVycycgcGFzcywgbm90IGBsaWInIHBhc3MuCisrZXh0cmEtbGlicy1vdGhlcnMteSArPSAkKGV4dHJhLWxpYnMteSkKKyBsaWJycGNzdmMtcm91dGluZXMgPSAkKHJwY3N2YzolLng9eCUpCisgbGlicnBjc3ZjLWluaGliaXQtbyA9IC5vcyAjIEJ1aWxkIG5vIHNoYXJlZCBycGNzdmMgbGlicmFyeS4KKyBvbWl0LWRlcHMgPSAkKGxpYnJwY3N2Yy1yb3V0aW5lcykKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2FybS9NYWtlZmlsZSBiL3N5c2RlcHMvYXJtL01ha2VmaWxlCitpbmRleCAxN2MxMjliLi41NDM3OTFhIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9hcm0vTWFrZWZpbGUKKysrKyBiL3N5c2RlcHMvYXJtL01ha2VmaWxlCitAQCAtMzcsMTAgKzM3LDEzIEBAIGlmZXEgKCQoc3ViZGlyKSxjc3UpCisgIyBnZXQgb2Zmc2V0IHRvIHJ0bGRfZ2xvYmFsLl9kbF9od2NhcAorIGdlbi1hcy1jb25zdC1oZWFkZXJzICs9IHJ0bGQtZ2xvYmFsLW9mZnNldHMuc3ltIHRsc2Rlc2Muc3ltCisgYWVhYmlfY29uc3RhbnRzID0gYWVhYmlfbGNzdHMgYWVhYmlfc2lnaGFuZGxlcnMgYWVhYmlfbWF0aAorLWFlYWJpX3JvdXRpbmVzID0gYWVhYmlfYXNzZXJ0IGFlYWJpX2xvY2FsZWNvbnYgYWVhYmlfZXJybm9fYWRkciBcCisrYWVhYmlfcm91dGluZXMgPSBhZWFiaV9hc3NlcnQgYWVhYmlfZXJybm9fYWRkciBcCisgCQkgYWVhYmlfbWJfY3VyX21heCBhZWFiaV9hdGV4aXQgYWVhYmlfbWVtY2xyIGFlYWJpX21lbWNweSBcCisgCQkgYWVhYmlfbWVtbW92ZSBhZWFiaV9tZW1zZXQgXAorIAkJIGFlYWJpX3JlYWRfdHAgbGliYy1hZWFiaV9yZWFkX3RwCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpKQorK2FlYWJpX3JvdXRpbmVzICs9IGFlYWJpX2xvY2FsZWNvbnYKKytlbmRpZgorIAorIHN5c2RlcF9yb3V0aW5lcyArPSAkKGFlYWJpX2NvbnN0YW50cykgJChhZWFiaV9yb3V0aW5lcykKKyBzdGF0aWMtb25seS1yb3V0aW5lcyArPSAkKGFlYWJpX2NvbnN0YW50cykgYWVhYmlfcmVhZF90cAorZGlmZiAtLWdpdCBhL3N5c2RlcHMvZ2VuZXJpYy9sZHNvZGVmcy5oIGIvc3lzZGVwcy9nZW5lcmljL2xkc29kZWZzLmgKK2luZGV4IDdhMGZlOGQuLmEzZTJjMGEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2dlbmVyaWMvbGRzb2RlZnMuaAorKysrIGIvc3lzZGVwcy9nZW5lcmljL2xkc29kZWZzLmgKK0BAIC00MzUsNiArNDM1LDEyIEBAIGV4dGVybiBzdHJ1Y3QgcnRsZF9nbG9iYWwgX3J0bGRfZ2xvYmFsIF9fcnRsZF9nbG9iYWxfYXR0cmlidXRlX187CisgIyB1bmRlZiBfX3J0bGRfZ2xvYmFsX2F0dHJpYnV0ZV9fCisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisrIyBkZWZpbmUgR0xST19kbF9kZWJ1Z19tYXNrIEdMUk8oZGxfZGVidWdfbWFzaykKKysjZWxzZQorKyMgZGVmaW5lIEdMUk9fZGxfZGVidWdfbWFzayAwCisrI2VuZGlmCisrCisgI2lmbmRlZiBTSEFSRUQKKyAjIGRlZmluZSBHTFJPKG5hbWUpIF8jI25hbWUKKyAjZWxzZQorQEAgLTQ0Nyw4ICs0NTMsMTAgQEAgc3RydWN0IHJ0bGRfZ2xvYmFsX3JvCisgeworICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworICAgLyogSWYgbm9uemVybyB0aGUgYXBwcm9wcmlhdGUgZGVidWcgaW5mb3JtYXRpb24gaXMgcHJpbnRlZC4gICovCisgICBFWFRFUk4gaW50IF9kbF9kZWJ1Z19tYXNrOworKyNlbmRpZgorICNkZWZpbmUgRExfREVCVUdfTElCUwkgICAgKDEgPDwgMCkKKyAjZGVmaW5lIERMX0RFQlVHX0lNUENBTExTICAgKDEgPDwgMSkKKyAjZGVmaW5lIERMX0RFQlVHX0JJTkRJTkdTICAgKDEgPDwgMikKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2dudS9NYWtlZmlsZSBiL3N5c2RlcHMvZ251L01ha2VmaWxlCitpbmRleCBlYTY4MDM3Li4zMTc1Y2MzIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9nbnUvTWFrZWZpbGUKKysrKyBiL3N5c2RlcHMvZ251L01ha2VmaWxlCitAQCAtNTksNyArNTksOCBAQCAkKGZvcmVhY2ggbywkKG9iamVjdC1zdWZmaXhlcykgJChvYmplY3Qtc3VmZml4ZXM6PS5kKSxcCisgZW5kaWYKKyAKKyBpZmVxICgkKHN1YmRpciksbG9naW4pCistc3lzZGVwX3JvdXRpbmVzICs9IHNldHV0eGVudCBnZXR1dHhlbnQgZW5kdXR4ZW50IGdldHV0eGlkIGdldHV0eGxpbmUgXAorK3N5c2RlcF9yb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfVVRNUFgpIFwKKysJCSs9IHNldHV0eGVudCBnZXR1dHhlbnQgZW5kdXR4ZW50IGdldHV0eGlkIGdldHV0eGxpbmUgXAorIAkJICAgcHV0dXR4bGluZSB1dG1weG5hbWUgdXBkd3RtcHggZ2V0dXRtcHggZ2V0dXRtcAorIAorIHN5c2RlcF9oZWFkZXJzICs9IHV0bXB4LmggYml0cy91dG1weC5oCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L01ha2VmaWxlIGIvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L01ha2VmaWxlCitpbmRleCAyMjIxMjJkLi40NTA5MzU3IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L01ha2VmaWxlCisrKysgYi9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvTWFrZWZpbGUKK0BAIC0xMSwxOSArMTEsMTggQEAgbGlibS1yb3V0aW5lcyArPSBzX25leHR0b3dhcmRmZAorIHJvdXRpbmVzICs9IG1hdGhfbGRibF9vcHQgbmxkYmwtY29tcGF0CisgCisgZXh0cmEtbGlicyArPSBsaWJubGRibAorLWxpYm5sZGJsLWNhbGxzID0gYXNwcmludGYgZHByaW50ZiBmcHJpbnRmIGZzY2FuZiBmd3ByaW50ZiBmd3NjYW5mIGlvdmZzY2FuZiBcCisrbGlibmxkYmwtY2FsbHMgPSBhc3ByaW50ZiBkcHJpbnRmIGZwcmludGYgZnNjYW5mIGlvdmZzY2FuZiBcCisgCQkgb2JzdGFja19wcmludGYgb2JzdGFja192cHJpbnRmIHByaW50ZiBzY2FuZiBzbnByaW50ZiBcCistCQkgc3ByaW50ZiBzc2NhbmYgc3dwcmludGYgc3dzY2FuZiB2YXNwcmludGYgdmRwcmludGYgdmZwcmludGYgXAorLQkJIHZmc2NhbmYgdmZ3cHJpbnRmIHZmd3NjYW5mIHZwcmludGYgdnNjYW5mIHZzbnByaW50ZiBcCistCQkgdnNwcmludGYgdnNzY2FuZiB2c3dwcmludGYgdnN3c2NhbmYgdndwcmludGYgdndzY2FuZiBcCistCQkgd3ByaW50ZiB3c2NhbmYgcHJpbnRmX2ZwIHByaW50Zl9zaXplIFwKKy0JCSBmcHJpbnRmX2NoayBmd3ByaW50Zl9jaGsgcHJpbnRmX2NoayBzbnByaW50Zl9jaGsgc3ByaW50Zl9jaGsgXAorLQkJIHN3cHJpbnRmX2NoayB2ZnByaW50Zl9jaGsgdmZ3cHJpbnRmX2NoayB2cHJpbnRmX2NoayBcCistCQkgdnNucHJpbnRmX2NoayB2c3ByaW50Zl9jaGsgdnN3cHJpbnRmX2NoayB2d3ByaW50Zl9jaGsgXAorLQkJIHdwcmludGZfY2hrIGFzcHJpbnRmX2NoayB2YXNwcmludGZfY2hrIGRwcmludGZfY2hrIFwKKysJCSBzcHJpbnRmIHNzY2FuZiB2YXNwcmludGYgdmRwcmludGYgdmZwcmludGYgXAorKwkJIHZmc2NhbmYgdnByaW50ZiB2c2NhbmYgdnNucHJpbnRmIFwKKysJCSB2c3ByaW50ZiB2c3NjYW5mIFwKKysJCSBwcmludGZfZnAgcHJpbnRmX3NpemUgXAorKwkJIGZwcmludGZfY2hrIHByaW50Zl9jaGsgc25wcmludGZfY2hrIHNwcmludGZfY2hrIFwKKysJCSB2ZnByaW50Zl9jaGsgdnByaW50Zl9jaGsgXAorKwkJIHZzbnByaW50Zl9jaGsgdnNwcmludGZfY2hrIFwKKysJCSBhc3ByaW50Zl9jaGsgdmFzcHJpbnRmX2NoayBkcHJpbnRmX2NoayBcCisgCQkgdmRwcmludGZfY2hrIG9ic3RhY2tfcHJpbnRmX2NoayBvYnN0YWNrX3ZwcmludGZfY2hrIFwKKyAJCSBzeXNsb2cgc3lzbG9nX2NoayB2c3lzbG9nIHZzeXNsb2dfY2hrIFwKKy0JCSBzdHJmbW9uIHN0cmZtb25fbCBcCisgCQkgc3RydG9sZCBzdHJ0b2xkX2wgc3RydG9sZGludCB3Y3N0b2xkIHdjc3RvbGRfbCB3Y3N0b2xkaW50IFwKKyAJCSBxZWN2dCBxZmN2dCBxZ2N2dCBxZWN2dF9yIHFmY3Z0X3IgXAorIAkJIGlzaW5mIGlzbmFuIGZpbml0ZSBzaWduYml0IHNjYWxiIGxvZzIgbGdhbW1hX3IgY2VpbCBcCitAQCAtMzgsOSArMzcsMTUgQEAgbGlibmxkYmwtY2FsbHMgPSBhc3ByaW50ZiBkcHJpbnRmIGZwcmludGYgZnNjYW5mIGZ3cHJpbnRmIGZ3c2NhbmYgaW92ZnNjYW5mIFwKKyAJCSBjYXNpbmggY2V4cCBjbG9nIGNwcm9qIGNzaW4gY3NpbmggY3NxcnQgY3RhbiBjdGFuaCBjcG93IFwKKyAJCSBjYWJzIGNhcmcgY2ltYWcgY3JlYWwgY2xvZzEwIFwKKyAJCSBpc29jOTlfc2NhbmYgaXNvYzk5X2ZzY2FuZiBpc29jOTlfc3NjYW5mIFwKKy0JCSBpc29jOTlfdnNjYW5mIGlzb2M5OV92ZnNjYW5mIGlzb2M5OV92c3NjYW5mIFwKKysJCSBpc29jOTlfdnNjYW5mIGlzb2M5OV92ZnNjYW5mIGlzb2M5OV92c3NjYW5mCisrbGlibmxkYmwtY2FsbHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSArPSBzdHJmbW9uIHN0cmZtb25fbAorK2xpYm5sZGJsLWNhbGxzLSQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pICs9IGZ3cHJpbnRmIGZ3c2NhbmYgXAorKwkJIHN3cHJpbnRmIHN3c2NhbmYgdmZ3cHJpbnRmIHZmd3NjYW5mIHZzd3ByaW50ZiB2c3dzY2FuZiBcCisrCQkgdndwcmludGYgdndzY2FuZiB3cHJpbnRmIHdzY2FuZiBmd3ByaW50Zl9jaGsgc3dwcmludGZfY2hrIFwKKysJCSB2ZndwcmludGZfY2hrIHZzd3ByaW50Zl9jaGsgdndwcmludGZfY2hrIHdwcmludGZfY2hrIFwKKyAJCSBpc29jOTlfd3NjYW5mIGlzb2M5OV9md3NjYW5mIGlzb2M5OV9zd3NjYW5mIFwKKyAJCSBpc29jOTlfdndzY2FuZiBpc29jOTlfdmZ3c2NhbmYgaXNvYzk5X3Zzd3NjYW5mCisrbGlibmxkYmwtY2FsbHMgKz0gJChsaWJubGRibC1jYWxscy15KQorIGxpYm5sZGJsLXJvdXRpbmVzID0gJChsaWJubGRibC1jYWxsczolPW5sZGJsLSUpCisgbGlibmxkYmwtaW5oaWJpdC1vID0gJChvYmplY3Qtc3VmZml4ZXMpCisgbGlibmxkYmwtc3RhdGljLW9ubHktcm91dGluZXMgPSAkKGxpYm5sZGJsLXJvdXRpbmVzKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuYyBiL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuYworaW5kZXggMDE5ODg4Ni4uNTU1MDFjZCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuYworKysrIGIvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5jCitAQCAtMjYsNiArMjYsNyBAQAorICNpbmNsdWRlIDxsb2NhbGUvbG9jYWxlaW5mby5oPgorICNpbmNsdWRlIDxzeXMvc3lzbG9nLmg+CisgI2luY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2luY2x1ZGUgIm5sZGJsLWNvbXBhdC5oIgorIAorQEAgLTMzLDIwICszNCwxNCBAQCBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92ZnByaW50ZikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92c3NjYW5mKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3ZzcHJpbnRmKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zmc2NhbmYpCistbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdmZ3c2NhbmYpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdmRwcmludGYpCistbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdnN3c2NhbmYpCistbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdmZ3cHJpbnRmKQorLWxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zzd3ByaW50ZikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92c25wcmludGYpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdmFzcHJpbnRmKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX29ic3RhY2tfdnByaW50ZikKKy1saWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3Zmd3ByaW50Zl9jaGspCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192c25wcmludGZfY2hrKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdmZwcmludGZfY2hrKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdnN5c2xvZ19jaGspCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192c3ByaW50Zl9jaGspCistbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192c3dwcmludGZfY2hrKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdmFzcHJpbnRmX2NoaykKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3ZkcHJpbnRmX2NoaykKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX29ic3RhY2tfdnByaW50Zl9jaGspCitAQCAtNTQsOCArNDksMTcgQEAgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192c3RyZm1vbikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3ZzdHJmbW9uX2wpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX19pc29jOTlfdnNzY2FuZikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX2lzb2M5OV92ZnNjYW5mKQorKworKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisrbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdmZ3c2NhbmYpCisrbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdnN3c2NhbmYpCisrbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdmZ3cHJpbnRmKQorK2xpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zzd3ByaW50ZikKKytsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3Zmd3ByaW50Zl9jaGspCisrbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192c3dwcmludGZfY2hrKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19faXNvYzk5X3Zzd3NjYW5mKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19faXNvYzk5X3Zmd3NjYW5mKQorKyNlbmRpZgorIAorIHN0YXRpYyB2b2lkCisgX19ubGRibF9jbGVhbnVwICh2b2lkICphcmcpCitAQCAtMTE3LDYgKzEyMSw3IEBAIF9fbmxkYmxfZnByaW50ZiAoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyB9Cisgd2Vha19hbGlhcyAoX19ubGRibF9mcHJpbnRmLCBfX25sZGJsX19JT19mcHJpbnRmKQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24gd2Vha19mdW5jdGlvbgorIF9fbmxkYmxfZndwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCitAQCAtMTMwLDYgKzEzNSw3IEBAIF9fbmxkYmxfZndwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCisgCisgICByZXR1cm4gZG9uZTsKKyB9CisrI2VuZGlmCisgCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK0BAIC0yMjYsNiArMjMyLDcgQEAgX19ubGRibF9zbnByaW50ZiAoY2hhciAqcywgc2l6ZV90IG1heGxlbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCisgICByZXR1cm4gZG9uZTsKKyB9CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorIF9fbmxkYmxfc3dwcmludGYgKHdjaGFyX3QgKnMsIHNpemVfdCBuLCBjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKK0BAIC0yMzksNiArMjQ2LDcgQEAgX19ubGRibF9zd3ByaW50ZiAod2NoYXJfdCAqcywgc2l6ZV90IG4sIGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorIAorICAgcmV0dXJuIGRvbmU7CisgfQorKyNlbmRpZgorIAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uIHdlYWtfZnVuY3Rpb24KK0BAIC0yNjQsNiArMjcyLDcgQEAgX19ubGRibF92ZHByaW50ZiAoaW50IGQsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmcpCisgfQorIGxpYmNfaGlkZGVuX2RlZiAoX19ubGRibF92ZHByaW50ZikKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uIHdlYWtfZnVuY3Rpb24KKyBfX25sZGJsX3Zmd3ByaW50ZiAoRklMRSAqcywgY29uc3Qgd2NoYXJfdCAqZm10LCB2YV9saXN0IGFwKQorQEAgLTI3NSw2ICsyODQsNyBAQCBfX25sZGJsX3Zmd3ByaW50ZiAoRklMRSAqcywgY29uc3Qgd2NoYXJfdCAqZm10LCB2YV9saXN0IGFwKQorICAgcmV0dXJuIHJlczsKKyB9CisgbGliY19oaWRkZW5fZGVmIChfX25sZGJsX3Zmd3ByaW50ZikKKysjZW5kaWYKKyAKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorQEAgLTI5Nyw2ICszMDcsNyBAQCBfX25sZGJsX3ZzbnByaW50ZiAoY2hhciAqc3RyaW5nLCBzaXplX3QgbWF4bGVuLCBjb25zdCBjaGFyICpmbXQsCisgbGliY19oaWRkZW5fZGVmIChfX25sZGJsX3ZzbnByaW50ZikKKyB3ZWFrX2FsaWFzIChfX25sZGJsX3ZzbnByaW50ZiwgX19ubGRibF9fX3ZzbnByaW50ZikKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uIHdlYWtfZnVuY3Rpb24KKyBfX25sZGJsX3Zzd3ByaW50ZiAod2NoYXJfdCAqc3RyaW5nLCBzaXplX3QgbWF4bGVuLCBjb25zdCB3Y2hhcl90ICpmbXQsCitAQCAtMzMwLDYgKzM0MSw3IEBAIF9fbmxkYmxfd3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCisgCisgICByZXR1cm4gZG9uZTsKKyB9CisrI2VuZGlmCisgCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK0BAIC00MTksNiArNDMxLDcgQEAgX19ubGRibF9zY2FuZiAoY29uc3QgY2hhciAqZm10LCAuLi4pCisgICByZXR1cm4gZG9uZTsKKyB9CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorIF9fbmxkYmxfdmZ3c2NhbmYgKEZJTEUgKnMsIGNvbnN0IHdjaGFyX3QgKmZtdCwgdmFfbGlzdCBhcCkKK0BAIC00OTEsNiArNTA0LDcgQEAgX19ubGRibF93c2NhbmYgKGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorIAorICAgcmV0dXJuIGRvbmU7CisgfQorKyNlbmRpZgorIAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitAQCAtNTA2LDYgKzUyMCw3IEBAIF9fbmxkYmxfX19mcHJpbnRmX2NoayAoRklMRSAqc3RyZWFtLCBpbnQgZmxhZywgY29uc3QgY2hhciAqZm10LCAuLi4pCisgICByZXR1cm4gZG9uZTsKKyB9CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorIF9fbmxkYmxfX19md3ByaW50Zl9jaGsgKEZJTEUgKnN0cmVhbSwgaW50IGZsYWcsIGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorQEAgLTUxOSw2ICs1MzQsNyBAQCBfX25sZGJsX19fZndwcmludGZfY2hrIChGSUxFICpzdHJlYW0sIGludCBmbGFnLCBjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKKyAKKyAgIHJldHVybiBkb25lOworIH0KKysjZW5kaWYKKyAKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorQEAgLTU2Myw2ICs1NzksNyBAQCBfX25sZGJsX19fc3ByaW50Zl9jaGsgKGNoYXIgKnMsIGludCBmbGFnLCBzaXplX3Qgc2xlbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCisgICByZXR1cm4gZG9uZTsKKyB9CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorIF9fbmxkYmxfX19zd3ByaW50Zl9jaGsgKHdjaGFyX3QgKnMsIHNpemVfdCBuLCBpbnQgZmxhZywgc2l6ZV90IHNsZW4sCitAQCAtNTc3LDYgKzU5NCw3IEBAIF9fbmxkYmxfX19zd3ByaW50Zl9jaGsgKHdjaGFyX3QgKnMsIHNpemVfdCBuLCBpbnQgZmxhZywgc2l6ZV90IHNsZW4sCisgCisgICByZXR1cm4gZG9uZTsKKyB9CisrI2VuZGlmCisgCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK0BAIC01OTAsNiArNjA4LDcgQEAgX19ubGRibF9fX3ZmcHJpbnRmX2NoayAoRklMRSAqcywgaW50IGZsYWcsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKKyB9CisgbGliY19oaWRkZW5fZGVmIChfX25sZGJsX19fdmZwcmludGZfY2hrKQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKyBfX25sZGJsX19fdmZ3cHJpbnRmX2NoayAoRklMRSAqcywgaW50IGZsYWcsIGNvbnN0IHdjaGFyX3QgKmZtdCwgdmFfbGlzdCBhcCkKK0BAIC02MDEsNiArNjIwLDcgQEAgX19ubGRibF9fX3Zmd3ByaW50Zl9jaGsgKEZJTEUgKnMsIGludCBmbGFnLCBjb25zdCB3Y2hhcl90ICpmbXQsIHZhX2xpc3QgYXApCisgICByZXR1cm4gcmVzOworIH0KKyBsaWJjX2hpZGRlbl9kZWYgKF9fbmxkYmxfX192ZndwcmludGZfY2hrKQorKyNlbmRpZgorIAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitAQCAtNjM1LDYgKzY1NSw3IEBAIF9fbmxkYmxfX192c3ByaW50Zl9jaGsgKGNoYXIgKnN0cmluZywgaW50IGZsYWcsIHNpemVfdCBzbGVuLCBjb25zdCBjaGFyICpmbXQsCisgfQorIGxpYmNfaGlkZGVuX2RlZiAoX19ubGRibF9fX3ZzcHJpbnRmX2NoaykKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisgX19ubGRibF9fX3Zzd3ByaW50Zl9jaGsgKHdjaGFyX3QgKnN0cmluZywgc2l6ZV90IG1heGxlbiwgaW50IGZsYWcsIHNpemVfdCBzbGVuLAorQEAgLTY2OCw2ICs2ODksNyBAQCBfX25sZGJsX19fd3ByaW50Zl9jaGsgKGludCBmbGFnLCBjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKKyAKKyAgIHJldHVybiBkb25lOworIH0KKysjZW5kaWYKKyAKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorQEAgLTc3NSw2ICs3OTcsNyBAQCBfX25sZGJsX19fcHJpbnRmX2ZwIChGSUxFICpmcCwgY29uc3Qgc3RydWN0IHByaW50Zl9pbmZvICppbmZvLAorICAgcmV0dXJuIF9fX3ByaW50Zl9mcCAoZnAsICZpbmZvX25vX2xkYmwsIGFyZ3MpOworIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgc3NpemVfdAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisgX19ubGRibF9zdHJmbW9uIChjaGFyICpzLCBzaXplX3QgbWF4c2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCitAQCAtODI5LDYgKzg1Miw3IEBAIF9fbmxkYmxfX192c3RyZm1vbl9sIChjaGFyICpzLCBzaXplX3QgbWF4c2l6ZSwgX19sb2NhbGVfdCBsb2MsCisgICByZXR1cm4gcmVzOworIH0KKyBsaWJjX2hpZGRlbl9kZWYgKF9fbmxkYmxfX192c3RyZm1vbl9sKQorKyNlbmRpZgorIAorIHZvaWQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorQEAgLTk0MSw2ICs5NjUsNyBAQCBfX25sZGJsX19faXNvYzk5X3NjYW5mIChjb25zdCBjaGFyICpmbXQsIC4uLikKKyAgIHJldHVybiBkb25lOworIH0KKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisgX19ubGRibF9fX2lzb2M5OV92ZndzY2FuZiAoRklMRSAqcywgY29uc3Qgd2NoYXJfdCAqZm10LCB2YV9saXN0IGFwKQorQEAgLTEwMTQsNiArMTAzOSw3IEBAIF9fbmxkYmxfX19pc29jOTlfd3NjYW5mIChjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKKyAKKyAgIHJldHVybiBkb25lOworIH0KKysjZW5kaWYKKyAKKyAjaWYgTE9OR19ET1VCTEVfQ09NUEFUKGxpYmMsIEdMSUJDXzJfMCkKKyBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX19JT19wcmludGYsIF9JT19wcmludGYsIEdMSUJDXzJfMCk7CitAQCAtMTA1Nyw2ICsxMDgzLDcgQEAgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF9wcmludGZfc2l6ZSwgcHJpbnRmX3NpemUsIEdMSUJDXzJfMSk7CisgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF9fX3N0cmZtb25fbCwgX19zdHJmbW9uX2wsIEdMSUJDXzJfMSk7CisgI2VuZGlmCisgI2lmIExPTkdfRE9VQkxFX0NPTVBBVChsaWJjLCBHTElCQ18yXzIpCisrIyBpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF9zd3ByaW50Ziwgc3dwcmludGYsIEdMSUJDXzJfMik7CisgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF92d3ByaW50ZiwgdndwcmludGYsIEdMSUJDXzJfMik7CisgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF93cHJpbnRmLCB3cHJpbnRmLCBHTElCQ18yXzIpOworQEAgLTEwNjksNiArMTA5Niw3IEBAIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfdmZ3c2NhbmYsIHZmd3NjYW5mLCBHTElCQ18yXzIpOworIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfdnN3c2NhbmYsIHZzd3NjYW5mLCBHTElCQ18yXzIpOworIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfdndzY2FuZiwgdndzY2FuZiwgR0xJQkNfMl8yKTsKKyBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX3dzY2FuZiwgd3NjYW5mLCBHTElCQ18yXzIpOworKyMgZW5kaWYKKyAjZW5kaWYKKyAjaWYgTE9OR19ET1VCTEVfQ09NUEFUKGxpYmMsIEdMSUJDXzJfMykKKyBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX3N0cmZtb25fbCwgc3RyZm1vbl9sLCBHTElCQ18yXzMpOworZGlmZiAtLWdpdCBhL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuaCBiL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuaAoraW5kZXggMGQyYzhhZi4uZjRjZWE1MCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuaAorKysrIGIvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5oCitAQCAtMzAsNiArMzAsNyBAQAorICNpbmNsdWRlIDxtYXRoLmg+CisgI2luY2x1ZGUgPG1vbmV0YXJ5Lmg+CisgI2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAKKyAvKiBEZWNsYXJlIHRoZSBfX25sZGJsX05BTUUgZnVuY3Rpb24gdGhlIHdyYXBwZXJzIGNhbGwgdGhhdCdzIGluIGxpYmMuc28uICAqLworQEAgLTM3LDE5ICszOCwxNSBAQAorIAorIE5MREJMX0RFQ0wgKF9JT192ZnNjYW5mKTsKKyBOTERCTF9ERUNMICh2ZnNjYW5mKTsKKy1OTERCTF9ERUNMICh2ZndzY2FuZik7CisgTkxEQkxfREVDTCAob2JzdGFja192cHJpbnRmKTsKKyBOTERCTF9ERUNMICh2YXNwcmludGYpOworIE5MREJMX0RFQ0wgKGRwcmludGYpOworIE5MREJMX0RFQ0wgKHZkcHJpbnRmKTsKKyBOTERCTF9ERUNMIChmcHJpbnRmKTsKKyBOTERCTF9ERUNMICh2ZnByaW50Zik7CistTkxEQkxfREVDTCAodmZ3cHJpbnRmKTsKKyBOTERCTF9ERUNMICh2c25wcmludGYpOworIE5MREJMX0RFQ0wgKHZzcHJpbnRmKTsKKyBOTERCTF9ERUNMICh2c3NjYW5mKTsKKy1OTERCTF9ERUNMICh2c3dwcmludGYpOworLU5MREJMX0RFQ0wgKHZzd3NjYW5mKTsKKyBOTERCTF9ERUNMIChfX2FzcHJpbnRmKTsKKyBOTERCTF9ERUNMIChhc3ByaW50Zik7CisgTkxEQkxfREVDTCAoX19wcmludGZfZnApOworQEAgLTY2LDEyICs2MywxOCBAQCBOTERCTF9ERUNMIChfX2lzb2M5OV9zc2NhbmYpOworIE5MREJMX0RFQ0wgKF9faXNvYzk5X3ZzY2FuZik7CisgTkxEQkxfREVDTCAoX19pc29jOTlfdmZzY2FuZik7CisgTkxEQkxfREVDTCAoX19pc29jOTlfdnNzY2FuZik7CisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKytOTERCTF9ERUNMICh2ZndzY2FuZik7CisrTkxEQkxfREVDTCAodmZ3cHJpbnRmKTsKKytOTERCTF9ERUNMICh2c3dwcmludGYpOworK05MREJMX0RFQ0wgKHZzd3NjYW5mKTsKKyBOTERCTF9ERUNMIChfX2lzb2M5OV93c2NhbmYpOworIE5MREJMX0RFQ0wgKF9faXNvYzk5X2Z3c2NhbmYpOworIE5MREJMX0RFQ0wgKF9faXNvYzk5X3N3c2NhbmYpOworIE5MREJMX0RFQ0wgKF9faXNvYzk5X3Z3c2NhbmYpOworIE5MREJMX0RFQ0wgKF9faXNvYzk5X3Zmd3NjYW5mKTsKKyBOTERCTF9ERUNMIChfX2lzb2M5OV92c3dzY2FuZik7CisrI2VuZGlmCisgCisgLyogVGhpcyBvbmUgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG5vcm1hbCBpbnRlcmZhY2UsIG9ubHkKKyAgICBfX25sZGJsX19fdnN0cmZtb24gcmVhbGx5IGV4aXN0cy4gICovCitAQCAtODIsMjIgKzg1LDIzIEBAIGV4dGVybiBzc2l6ZV90IF9fbmxkYmxfX192c3RyZm1vbiAoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCkKKyAgICBzaW5jZSB3ZSBkb24ndCBjb21waWxlIHdpdGggX0ZPUlRJRllfU09VUkNFLiAgKi8KKyBleHRlcm4gaW50IF9fbmxkYmxfX192ZnByaW50Zl9jaGsgKEZJTEUgKl9fcmVzdHJpY3QsIGludCwKKyAJCQkJICAgY29uc3QgY2hhciAqX19yZXN0cmljdCwgX0dfdmFfbGlzdCk7CistZXh0ZXJuIGludCBfX25sZGJsX19fdmZ3cHJpbnRmX2NoayAoRklMRSAqX19yZXN0cmljdCwgaW50LAorLQkJCQkgICAgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCwgX19nbnVjX3ZhX2xpc3QpOworIGV4dGVybiBpbnQgX19ubGRibF9fX3ZzcHJpbnRmX2NoayAoY2hhciAqX19yZXN0cmljdCwgaW50LCBzaXplX3QsCisgCQkJCSAgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIF9HX3ZhX2xpc3QpIF9fVEhST1c7CisgZXh0ZXJuIGludCBfX25sZGJsX19fdnNucHJpbnRmX2NoayAoY2hhciAqX19yZXN0cmljdCwgc2l6ZV90LCBpbnQsIHNpemVfdCwKKyAJCQkJICAgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIF9HX3ZhX2xpc3QpCisgICBfX1RIUk9XOworLWV4dGVybiBpbnQgX19ubGRibF9fX3Zzd3ByaW50Zl9jaGsgKHdjaGFyX3QgKl9fcmVzdHJpY3QsIHNpemVfdCwgaW50LCBzaXplX3QsCistCQkJCSAgICBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0LCBfX2dudWNfdmFfbGlzdCkKKy0gIF9fVEhST1c7CisgZXh0ZXJuIGludCBfX25sZGJsX19fdmFzcHJpbnRmX2NoayAoY2hhciAqKiwgaW50LCBjb25zdCBjaGFyICosIF9HX3ZhX2xpc3QpCisgICBfX1RIUk9XOworIGV4dGVybiBpbnQgX19ubGRibF9fX3ZkcHJpbnRmX2NoayAoaW50LCBpbnQsIGNvbnN0IGNoYXIgKiwgX0dfdmFfbGlzdCk7CisgZXh0ZXJuIGludCBfX25sZGJsX19fb2JzdGFja192cHJpbnRmX2NoayAoc3RydWN0IG9ic3RhY2sgKiwgaW50LCBjb25zdCBjaGFyICosCisgCQkJCQkgIF9HX3ZhX2xpc3QpIF9fVEhST1c7CisgZXh0ZXJuIHZvaWQgX19ubGRibF9fX3ZzeXNsb2dfY2hrIChpbnQsIGludCwgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKKy0KKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworK2V4dGVybiBpbnQgX19ubGRibF9fX3Zmd3ByaW50Zl9jaGsgKEZJTEUgKl9fcmVzdHJpY3QsIGludCwKKysJCQkJICAgIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QsIF9fZ251Y192YV9saXN0KTsKKytleHRlcm4gaW50IF9fbmxkYmxfX192c3dwcmludGZfY2hrICh3Y2hhcl90ICpfX3Jlc3RyaWN0LCBzaXplX3QsIGludCwgc2l6ZV90LAorKwkJCQkgICAgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCwgX19nbnVjX3ZhX2xpc3QpCisrICBfX1RIUk9XOworKyNlbmRpZgorIAorICNlbmRpZiAvKiBfX05MREJMX0NPTVBBVF9IICovCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9ucHRsL01ha2VmaWxlIGIvc3lzZGVwcy9ucHRsL01ha2VmaWxlCitpbmRleCBlOTMzOWEzLi43ODIwMDliIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9ucHRsL01ha2VmaWxlCisrKysgYi9zeXNkZXBzL25wdGwvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw5IEBACisgCisgaWZlcSAoJChzdWJkaXIpLG5wdGwpCisgbGlicHRocmVhZC1zeXNkZXBfcm91dGluZXMgKz0gZXJybm8tbG9jCisraWZlcSAoJChPUFRJT05fRUdMSUJDX0JJR19NQUNST1MpLG4pCisrc3lzZGVwX3JvdXRpbmVzICs9IHNtYWxsLW1hY3Jvcy1mbnMKKytlbmRpZgorIGVuZGlmCisgCisgaWZlcSAoJChzdWJkaXIpLHJ0KQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9jay5oIGIvc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrLmgKK2luZGV4IDU1OTljZjEuLmI4MzkzNzggMTAwNjQ0CistLS0gYS9zeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2suaAorKysrIGIvc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrLmgKK0BAIC0yNCw2ICsyNCwxNCBAQAorICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAKKyAKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxvd2xldmVsbG9jay5oPgorKyMgaW5jbHVkZSA8dGxzLmg+CisrIyBpbmNsdWRlIDxwdGhyZWFkLWZ1bmN0aW9ucy5oPgorKyMgaW5jbHVkZSA8ZXJybm8uaD4gLyogRm9yIEVCVVNZLiAgKi8KKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+IC8qIEZvciBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUy4gICovCisrI2VuZGlmCisrCisgLyogTXV0ZXggdHlwZS4gICovCisgI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBfSU9fTVRTQUZFX0lPCisgIyBpZiAoIUlTX0lOIChsaWJjKSAmJiAhSVNfSU4gKGxpYnB0aHJlYWQpKSB8fCAhZGVmaW5lZCBfTElCQworQEAgLTg3LDYgKzk1LDE1IEBAIHR5cGVkZWYgc3RydWN0IF9fbGliY19sb2NrX3JlY3Vyc2l2ZV9vcGFxdWVfXyBfX2xpYmNfbG9ja19yZWN1cnNpdmVfdDsKKyAKKyAvKiBMb2NrIHRoZSByZWN1cnNpdmUgbmFtZWQgbG9jayB2YXJpYWJsZS4gICovCisgI2lmIGRlZmluZWQgX0xJQkMgJiYgKElTX0lOIChsaWJjKSB8fCBJU19JTiAobGlicHRocmVhZCkpCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxCisrLyogRUdMSUJDOiBEZWNsYXJlIHdyYXBwZXIgZnVuY3Rpb24gZm9yIGEgYmlnIG1hY3JvIGlmIGVpdGhlcgorKyAgICFfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyBvciB3ZSBhcmUgdXNpbmcgYSBiYWNrIGRvb3IgZnJvbQorKyAgIHNtYWxsLW1hY3Jvcy1mbnMuYyAoX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgPT0gMikuICAqLworK2V4dGVybiB2b2lkIF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlX2ZuIChfX2xpYmNfbG9ja19yZWN1cnNpdmVfdCAqKTsKKytsaWJjX2hpZGRlbl9wcm90byAoX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmVfZm4pOworKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMSAqLworKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MKKysKKyAjIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisgICBkbyB7CQkJCQkJCQkJICAgICAgXAorICAgICB2b2lkICpzZWxmID0gVEhSRUFEX1NFTEY7CQkJCQkJICAgICAgXAorQEAgLTk3LDYgKzExNCwxMCBAQCB0eXBlZGVmIHN0cnVjdCBfX2xpYmNfbG9ja19yZWN1cnNpdmVfb3BhcXVlX18gX19saWJjX2xvY2tfcmVjdXJzaXZlX3Q7CisgICAgICAgfQkJCQkJCQkJCSAgICAgIFwKKyAgICAgKysoTkFNRSkuY250OwkJCQkJCQkgICAgICBcCisgICB9IHdoaWxlICgwKQorKyMgZWxzZQorKyMgZGVmaW5lIF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlKE5BTUUpCQkJCVwKKysgIF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlX2ZuICgmKE5BTUUpKQorKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgKi8KKyAjZWxzZQorICMgZGVmaW5lIF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlKE5BTUUpIFwKKyAgIF9fbGliY19tYXliZV9jYWxsIChfX3B0aHJlYWRfbXV0ZXhfbG9jaywgKCYoTkFNRSkubXV0ZXgpLCAwKQorQEAgLTEwNCw2ICsxMjUsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgX19saWJjX2xvY2tfcmVjdXJzaXZlX29wYXF1ZV9fIF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90OworIAorIC8qIFRyeSB0byBsb2NrIHRoZSByZWN1cnNpdmUgbmFtZWQgbG9jayB2YXJpYWJsZS4gICovCisgI2lmIGRlZmluZWQgX0xJQkMgJiYgKElTX0lOIChsaWJjKSB8fCBJU19JTiAobGlicHRocmVhZCkpCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxCisrLyogRUdMSUJDOiBEZWNsYXJlIHdyYXBwZXIgZnVuY3Rpb24gZm9yIGEgYmlnIG1hY3JvIGlmIGVpdGhlcgorKyAgICFfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyBvciB3ZSBhcmUgdXNpbmcgYSBiYWNrIGRvb3IgZnJvbQorKyAgIHNtYWxsLW1hY3Jvcy1mbnMuYyAoX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgPT0gMikuICAqLworK2V4dGVybiBpbnQgX19saWJjX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmVfZm4gKF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90ICopOworK2xpYmNfaGlkZGVuX3Byb3RvIChfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZV9mbik7CisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxICovCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUworICMgZGVmaW5lIF9fbGliY19sb2NrX3RyeWxvY2tfcmVjdXJzaXZlKE5BTUUpIFwKKyAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICBpbnQgcmVzdWx0ID0gMDsJCQkJCQkJICAgICAgXAorQEAgLTEyMiw2ICsxNTEsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX19saWJjX2xvY2tfcmVjdXJzaXZlX29wYXF1ZV9fIF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90OworICAgICAgICsrKE5BTUUpLmNudDsJCQkJCQkJICAgICAgXAorICAgICByZXN1bHQ7CQkJCQkJCQkgICAgICBcCisgICB9KQorKyMgZWxzZQorKyMgZGVmaW5lIF9fbGliY19sb2NrX3RyeWxvY2tfcmVjdXJzaXZlKE5BTUUpIFwKKysgIF9fbGliY19sb2NrX3RyeWxvY2tfcmVjdXJzaXZlX2ZuICgmKE5BTUUpKQorKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgKi8KKyAjZWxzZQorICMgZGVmaW5lIF9fbGliY19sb2NrX3RyeWxvY2tfcmVjdXJzaXZlKE5BTUUpIFwKKyAgIF9fbGliY19tYXliZV9jYWxsIChfX3B0aHJlYWRfbXV0ZXhfdHJ5bG9jaywgKCYoTkFNRSkubXV0ZXgpLCAwKQorQEAgLTEyOSw2ICsxNjIsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgX19saWJjX2xvY2tfcmVjdXJzaXZlX29wYXF1ZV9fIF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90OworIAorIC8qIFVubG9jayB0aGUgcmVjdXJzaXZlIG5hbWVkIGxvY2sgdmFyaWFibGUuICAqLworICNpZiBkZWZpbmVkIF9MSUJDICYmIChJU19JTiAobGliYykgfHwgSVNfSU4gKGxpYnB0aHJlYWQpKQorKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMQorKy8qIEVHTElCQzogRGVjbGFyZSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBhIGJpZyBtYWNybyBpZiBlaXRoZXIKKysgICAhX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MsIG9yIHdlIGFyZSB1c2luZyBhIGJhY2sgZG9vciBmcm9tCisrICAgc21hbGwtbWFjcm9zLWZucy5jIChfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyA9PSAyKS4gICovCisrZXh0ZXJuIHZvaWQgX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZV9mbiAoX19saWJjX2xvY2tfcmVjdXJzaXZlX3QgKik7CisrbGliY19oaWRkZW5fcHJvdG8gKF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmVfZm4pOworKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMSAqLworKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MKKyAvKiBXZSBkbyBubyBlcnJvciBjaGVja2luZyBoZXJlLiAgKi8KKyAjIGRlZmluZSBfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlKE5BTUUpIFwKKyAgIGRvIHsJCQkJCQkJCQkgICAgICBcCitAQCAtMTM4LDYgKzE3OSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBfX2xpYmNfbG9ja19yZWN1cnNpdmVfb3BhcXVlX18gX19saWJjX2xvY2tfcmVjdXJzaXZlX3Q7CisgCWxsbF91bmxvY2sgKChOQU1FKS5sb2NrLCBMTExfUFJJVkFURSk7CQkJCSAgICAgIFwKKyAgICAgICB9CQkJCQkJCQkJICAgICAgXAorICAgfSB3aGlsZSAoMCkKKysjIGVsc2UKKysjIGRlZmluZSBfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlKE5BTUUpIFwKKysgIF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmVfZm4gKCYoTkFNRSkpCisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAqLworICNlbHNlCisgIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisgICBfX2xpYmNfbWF5YmVfY2FsbCAoX19wdGhyZWFkX211dGV4X3VubG9jaywgKCYoTkFNRSkubXV0ZXgpLCAwKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9ja1AuaCBiL3N5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9ja1AuaAoraW5kZXggZjU1ZjYyMS4uZGE5ODg2OSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9ja1AuaAorKysrIGIvc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrUC5oCitAQCAtMzMsNiArMzMsOCBAQAorICNpbmNsdWRlIDxsb3dsZXZlbGxvY2suaD4KKyAjaW5jbHVkZSA8dGxzLmg+CisgI2luY2x1ZGUgPHB0aHJlYWQtZnVuY3Rpb25zLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+IC8qIEZvciBFQlVTWS4gICovCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+IC8qIEZvciBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUy4gICovCisgCisgI2lmIElTX0lOIChsaWJwdGhyZWFkKQorIC8qIFRoaXMgZ2V0cyB1cyB0aGUgZGVjbGFyYXRpb25zIG9mIHRoZSBfX3B0aHJlYWRfKiBpbnRlcm5hbCBuYW1lcywKK0BAIC0xNzEsMTAgKzE3MywyMiBAQCB0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19saWJjX2tleV90OworIAorIC8qIExvY2sgdGhlIG5hbWVkIGxvY2sgdmFyaWFibGUuICAqLworICNpZiBJU19JTiAobGliYykgfHwgSVNfSU4gKGxpYnB0aHJlYWQpCistIyBpZm5kZWYgX19saWJjX2xvY2tfbG9jaworLSMgIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrKE5BTUUpIFwKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEKKysvKiBFR0xJQkM6IERlY2xhcmUgd3JhcHBlciBmdW5jdGlvbiBmb3IgYSBiaWcgbWFjcm8gaWYgZWl0aGVyCisrICAgIV9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TIG9yIHdlIGFyZSB1c2luZyBhIGJhY2sgZG9vciBmcm9tCisrICAgc21hbGwtbWFjcm9zLWZucy5jIChfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyA9PSAyKS4gICovCisrZXh0ZXJuIHZvaWQgX19saWJjX2xvY2tfbG9ja19mbiAoX19saWJjX2xvY2tfdCAqKTsKKytsaWJjX2hpZGRlbl9wcm90byAoX19saWJjX2xvY2tfbG9ja19mbik7CisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxICovCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUworKyMgIGlmbmRlZiBfX2xpYmNfbG9ja19sb2NrCisrIyAgIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrKE5BTUUpIFwKKyAgICh7IGxsbF9sb2NrIChOQU1FLCBMTExfUFJJVkFURSk7IDA7IH0pCistIyBlbmRpZgorKyMgIGVuZGlmCisrIyBlbHNlCisrIyAgZGVmaW5lIF9fbGliY19sb2NrX2xvY2soTkFNRSkgICAgICAgICAgICAgICBcCisrICBfX2xpYmNfbG9ja19sb2NrX2ZuICgmKE5BTUUpKQorKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgKi8KKyAjZWxzZQorICMgdW5kZWYgX19saWJjX2xvY2tfbG9jaworICMgZGVmaW5lIF9fbGliY19sb2NrX2xvY2soTkFNRSkgXAorQEAgLTE4NywxMCArMjAxLDIyIEBAIHR5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2xpYmNfa2V5X3Q7CisgCisgLyogVHJ5IHRvIGxvY2sgdGhlIG5hbWVkIGxvY2sgdmFyaWFibGUuICAqLworICNpZiBJU19JTiAobGliYykgfHwgSVNfSU4gKGxpYnB0aHJlYWQpCistIyBpZm5kZWYgX19saWJjX2xvY2tfdHJ5bG9jaworLSMgIGRlZmluZSBfX2xpYmNfbG9ja190cnlsb2NrKE5BTUUpIFwKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEKKysvKiBFR0xJQkM6IERlY2xhcmUgd3JhcHBlciBmdW5jdGlvbiBmb3IgYSBiaWcgbWFjcm8gaWYgZWl0aGVyCisrICAgIV9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TIG9yIHdlIGFyZSB1c2luZyBhIGJhY2sgZG9vciBmcm9tCisrICAgc21hbGwtbWFjcm9zLWZucy5jIChfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyA9PSAyKS4gICovCisrZXh0ZXJuIGludCBfX2xpYmNfbG9ja190cnlsb2NrX2ZuIChfX2xpYmNfbG9ja190ICopOworK2xpYmNfaGlkZGVuX3Byb3RvIChfX2xpYmNfbG9ja190cnlsb2NrX2ZuKTsKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEgKi8KKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TCisrIyAgaWZuZGVmIF9fbGliY19sb2NrX3RyeWxvY2sKKysjICAgZGVmaW5lIF9fbGliY19sb2NrX3RyeWxvY2soTkFNRSkgXAorICAgbGxsX3RyeWxvY2sgKE5BTUUpCistIyBlbmRpZgorKyMgIGVuZGlmCisrIyBlbHNlCisrIyBkZWZpbmUgX19saWJjX2xvY2tfdHJ5bG9jayhOQU1FKSBcCisrICBfX2xpYmNfbG9ja190cnlsb2NrX2ZuICgmKE5BTUUpKQorKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgKi8KKyAjZWxzZQorICMgdW5kZWYgX19saWJjX2xvY2tfdHJ5bG9jaworICMgZGVmaW5lIF9fbGliY19sb2NrX3RyeWxvY2soTkFNRSkgXAorQEAgLTIwNiw4ICsyMzIsMjAgQEAgdHlwZWRlZiBwdGhyZWFkX2tleV90IF9fbGliY19rZXlfdDsKKyAKKyAvKiBVbmxvY2sgdGhlIG5hbWVkIGxvY2sgdmFyaWFibGUuICAqLworICNpZiBJU19JTiAobGliYykgfHwgSVNfSU4gKGxpYnB0aHJlYWQpCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxCisrLyogRUdMSUJDOiBEZWNsYXJlIHdyYXBwZXIgZnVuY3Rpb24gZm9yIGEgYmlnIG1hY3JvIGlmIGVpdGhlcgorKyAgICFfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUywgb3Igd2UgYXJlIHVzaW5nIGEgYmFjayBkb29yIGZyb20KKysgICBzbWFsbC1tYWNyb3MtZm5zLmMgKF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TID09IDIpLiAgKi8KKytleHRlcm4gdm9pZCBfX2xpYmNfbG9ja191bmxvY2tfZm4gKF9fbGliY19sb2NrX3QgKik7CisrbGliY19oaWRkZW5fcHJvdG8gKF9fbGliY19sb2NrX3VubG9ja19mbik7CisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxICovCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUworICMgZGVmaW5lIF9fbGliY19sb2NrX3VubG9jayhOQU1FKSBcCisgICBsbGxfdW5sb2NrIChOQU1FLCBMTExfUFJJVkFURSkKKysjIGVsc2UKKysjIGRlZmluZSBfX2xpYmNfbG9ja191bmxvY2soTkFNRSkgXAorKyAgX19saWJjX2xvY2tfdW5sb2NrX2ZuICgmKE5BTUUpKQorKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgKi8KKyAjZWxzZQorICMgZGVmaW5lIF9fbGliY19sb2NrX3VubG9jayhOQU1FKSBcCisgICBfX2xpYmNfbWF5YmVfY2FsbCAoX19wdGhyZWFkX211dGV4X3VubG9jaywgKCYoTkFNRSkpLCAwKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvbnB0bC9zbWFsbC1tYWNyb3MtZm5zLmMgYi9zeXNkZXBzL25wdGwvc21hbGwtbWFjcm9zLWZucy5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZjc1MTA1MworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9ucHRsL3NtYWxsLW1hY3Jvcy1mbnMuYworQEAgLTAsMCArMSw3MiBAQAorKy8qIEVHTElCQzogZnVuY3Rpb24gd3JhcHBlcnMgZm9yIGJpZyBtYWNyb3MuCisrICAgQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisrICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwKKysgICB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisrICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKworKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKworKy8qIEhhbmRsZSBtYWNyb3MgZnJvbSAuL2JpdHMvbGliYy1sb2NrLmguICAqLworKyNpZiBkZWZpbmVkIF9MSUJDICYmICghZGVmaW5lZCBOT1RfSU5fbGliYyB8fCBkZWZpbmVkIElTX0lOX2xpYnB0aHJlYWQpCisrCisrLyogR2V0IHRoZSBtYWNyb3MgZm9yIGZ1bmN0aW9uIGJvZGllcyB0aHJvdWdoIGEgYmFjayBkb29yLiAgKi8KKysjIHVuZGVmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TCisrIyBkZWZpbmUgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgMgorKyMgaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKysKKyt2b2lkCisrX19saWJjX2xvY2tfbG9ja19mbiAoX19saWJjX2xvY2tfdCAqbmFtZSkKKyt7CisrICBfX2xpYmNfbG9ja19sb2NrICgqbmFtZSk7CisrfQorK2xpYmNfaGlkZGVuX2RlZiAoX19saWJjX2xvY2tfbG9ja19mbik7CisrCisrdm9pZAorK19fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlX2ZuIChfX2xpYmNfbG9ja19yZWN1cnNpdmVfdCAqbmFtZSkKKyt7CisrICBfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZSAoKm5hbWUpOworK30KKytsaWJjX2hpZGRlbl9kZWYgKF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlX2ZuKTsKKysKKytpbnQKKytfX2xpYmNfbG9ja190cnlsb2NrX2ZuIChfX2xpYmNfbG9ja190ICpuYW1lKQorK3sKKysgIHJldHVybiBfX2xpYmNfbG9ja190cnlsb2NrICgqbmFtZSk7CisrfQorK2xpYmNfaGlkZGVuX2RlZiAoX19saWJjX2xvY2tfdHJ5bG9ja19mbik7CisrCisraW50CisrX19saWJjX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmVfZm4gKF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90ICpuYW1lKQorK3sKKysgIHJldHVybiBfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZSAoKm5hbWUpOworK30KKytsaWJjX2hpZGRlbl9kZWYgKF9fbGliY19sb2NrX3RyeWxvY2tfcmVjdXJzaXZlX2ZuKTsKKysKKyt2b2lkCisrX19saWJjX2xvY2tfdW5sb2NrX2ZuIChfX2xpYmNfbG9ja190ICpuYW1lKQorK3sKKysgIF9fbGliY19sb2NrX3VubG9jayAoKm5hbWUpOworK30KKytsaWJjX2hpZGRlbl9kZWYgKF9fbGliY19sb2NrX3VubG9ja19mbik7CisrCisrdm9pZAorK19fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmVfZm4gKF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90ICpuYW1lKQorK3sKKysgIF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmUgKCpuYW1lKTsKKyt9CisrbGliY19oaWRkZW5fZGVmIChfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlX2ZuKTsKKysKKysjZW5kaWYgLypkZWZpbmVkIF9MSUJDICYmICghZGVmaW5lZCBOT1RfSU5fbGliYyB8fCBkZWZpbmVkIElTX0lOX2xpYnB0aHJlYWQpKi8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9nZXRob3N0aWQuYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2dldGhvc3RpZC5jCitpbmRleCAyNmU0NjkyLi5kMGEyNmM4IDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZ2V0aG9zdGlkLmMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2dldGhvc3RpZC5jCitAQCAtMjEsNiArMjEsNyBAQAorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8bmV0ZGIuaD4KKyAjaW5jbHVkZSA8bm90LWNhbmNlbC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNkZWZpbmUgSE9TVElERklMRSAiL2V0Yy9ob3N0aWQiCisgCitAQCAtODksNiArOTAsNyBAQCBnZXRob3N0aWQgKHZvaWQpCisgCXJldHVybiBpZDsKKyAgICAgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorICAgLyogR2V0dGluZyBmcm9tIHRoZSBmaWxlIHdhcyBub3Qgc3VjY2Vzc2Z1bC4gIEFuIGludGVsbGlnZW50IGd1ZXNzIGZvcgorICAgICAgYSB1bmlxdWUgbnVtYmVyIG9mIGEgaG9zdCBpcyBpdHMgSVAgYWRkcmVzcy4gIFJldHVybiB0aGlzLiAgKi8KKyAgIGlmIChfX2dldGhvc3RuYW1lIChob3N0bmFtZSwgTUFYSE9TVE5BTUVMRU4pIDwgMCB8fCBob3N0bmFtZVswXSA9PSAnXDAnKQorQEAgLTExNSw1ICsxMTcsOSBAQCBnZXRob3N0aWQgKHZvaWQpCisgICAvKiBGb3IgdGhlIHJldHVybiB2YWx1ZSB0byBiZSBub3QgZXhhY3RseSB0aGUgSVAgYWRkcmVzcyB3ZSBkbyBzb21lCisgICAgICBiaXQgZmlkZGxpbmcuICAqLworICAgcmV0dXJuIChpbnQzMl90KSAoaW4uc19hZGRyIDw8IDE2IHwgaW4uc19hZGRyID4+IDE2KTsKKysjZWxzZQorKyAgLyogUmV0dXJuIGFuIGFyYml0cmFyeSB2YWx1ZS4gICovCisrICByZXR1cm4gMDsKKysjZW5kaWYKKyB9CisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbGliY19mYXRhbC5jIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbGliY19mYXRhbC5jCitpbmRleCA1M2E4YmJiLi5jYjExMGQ0IDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbGliY19mYXRhbC5jCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9saWJjX2ZhdGFsLmMKK0BAIC0yMyw2ICsyMyw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorICNpbmNsdWRlIDxzeXMvdWlvLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgc3RhdGljIGJvb2wKKyB3cml0ZXZfZm9yX2ZhdGFsIChpbnQgZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBzaXplX3Qgbmlvdiwgc2l6ZV90IHRvdGFsKQorQEAgLTQwLDYgKzQxLDcgQEAgd3JpdGV2X2Zvcl9mYXRhbCAoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgc2l6ZV90IG5pb3YsIHNpemVfdCB0b3RhbCkKKyBzdGF0aWMgdm9pZAorIGJhY2t0cmFjZV9hbmRfbWFwcyAoaW50IGRvX2Fib3J0LCBib29sIHdyaXR0ZW4sIGludCBmZCkKKyB7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19CQUNLVFJBQ0UKKyAgIGlmIChkb19hYm9ydCA+IDEgJiYgd3JpdHRlbikKKyAgICAgeworICAgICAgIHZvaWQgKmFkZHJzWzY0XTsKK0BAIC02Miw2ICs2NCw3IEBAIGJhY2t0cmFjZV9hbmRfbWFwcyAoaW50IGRvX2Fib3J0LCBib29sIHdyaXR0ZW4sIGludCBmZCkKKyAgICAgICAgICAgY2xvc2Vfbm90X2NhbmNlbF9ub19zdGF0dXMgKGZkMik7CisgICAgICAgICB9CisgICAgIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JBQ0tUUkFDRSAqLworIH0KKyAjZGVmaW5lIEJFRk9SRV9BQk9SVAkJYmFja3RyYWNlX2FuZF9tYXBzCisgCitkaWZmIC0tZ2l0IGEvdGltZS9NYWtlZmlsZSBiL3RpbWUvTWFrZWZpbGUKK2luZGV4IGE0MTFmNjIuLjJkMDIyY2EgMTAwNjQ0CistLS0gYS90aW1lL01ha2VmaWxlCisrKysgYi90aW1lL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCU1ha2VmaWxlIGZvciB0aW1lIHJvdXRpbmVzCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gdGltZQorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTMwLDE1ICszMiwyMyBAQCByb3V0aW5lcyA6PSBvZmZ0aW1lIGFzY3RpbWUgY2xvY2sgY3RpbWUgY3RpbWVfciBkaWZmdGltZSBcCisgCSAgICB0emZpbGUgZ2V0aXRpbWVyIHNldGl0aW1lcgkJCSBcCisgCSAgICBzdGltZSBkeXNpemUgdGltZWdtIGZ0aW1lCQkJIFwKKyAJICAgIGdldGRhdGUgc3RycHRpbWUgc3RycHRpbWVfbAkJCSBcCistCSAgICBzdHJmdGltZSB3Y3NmdGltZSBzdHJmdGltZV9sIHdjc2Z0aW1lX2wJIFwKKysJICAgIHN0cmZ0aW1lIHN0cmZ0aW1lX2wJCQkJIFwKKyAJICAgIHRpbWVzcGVjX2dldAorLWF1eCA6PQkgICAgZXJhIGFsdF9kaWdpdCBsYy10aW1lLWNsZWFudXAKKyAKKy10ZXN0cwk6PSB0ZXN0X3RpbWUgY2xvY2t0ZXN0IHRzdC1wb3NpeHR6IHRzdC1zdHJwdGltZSB0c3Rfd2NzZnRpbWUgXAorLQkgICB0c3QtZ2V0ZGF0ZSB0c3QtbWt0aW1lIHRzdC1ta3RpbWUyIHRzdC1mdGltZV9sIHRzdC1zdHJmdGltZSBcCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgICAgICAgICAgICAgICAgXAorKwkgICAgOj0gd2NzZnRpbWUgd2NzZnRpbWVfbAorK2F1eC0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICs9IGFsdF9kaWdpdCBlcmEgbGMtdGltZS1jbGVhbnVwCisrCisrdGVzdHMJOj0gdGVzdF90aW1lIGNsb2NrdGVzdCB0c3QtcG9zaXh0eiBcCisrCSAgIHRzdC1nZXRkYXRlIHRzdC1ta3RpbWUgdHN0LW1rdGltZTIgdHN0LXN0cmZ0aW1lIFwKKyAJICAgdHN0LW1rdGltZTMgdHN0LXN0cnB0aW1lMiBidWctYXNjdGltZSBidWctYXNjdGltZV9yIGJ1Zy1ta3RpbWUxIFwKKyAJICAgdHN0LXN0cnB0aW1lMyBidWctZ2V0ZGF0ZTEgdHN0LXN0cnB0aW1lLXdoaXRlc3BhY2UgdHN0LWZ0aW1lCisgCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCSAgICAgICAgKz0gdHN0LXN0cnB0aW1lIHRzdC1mdGltZV9sCisrdGVzdHMtJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykgXAorKwkgICAgICAgICs9IHRzdF93Y3NmdGltZQorKworIGluY2x1ZGUgLi4vUnVsZXMKKyAKKyB0ei1jZmxhZ3MgPSAtRFRaRElSPSciJCh6b25lZGlyKSInIFwKK2RpZmYgLS1naXQgYS90aW1lL3N0cmZ0aW1lX2wuYyBiL3RpbWUvc3RyZnRpbWVfbC5jCitpbmRleCBiNDhlZjM0Li5iZmRkNjE4IDEwMDY0NAorLS0tIGEvdGltZS9zdHJmdGltZV9sLmMKKysrKyBiL3RpbWUvc3RyZnRpbWVfbC5jCitAQCAtMzUsNiArMzUsMTAgQEAKKyAjIGluY2x1ZGUgIi4uL2xvY2FsZS9sb2NhbGVpbmZvLmgiCisgI2VuZGlmCisgCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKyNlbmRpZgorKworICNpZiBkZWZpbmVkIGVtYWNzICYmICFkZWZpbmVkIEhBVkVfQkNPUFkKKyAjIGRlZmluZSBIQVZFX01FTUNQWSAxCisgI2VuZGlmCitAQCAtODgyLDcgKzg4Niw3IEBAIF9fc3RyZnRpbWVfaW50ZXJuYWwgKHMsIG1heHNpemUsIGZvcm1hdCwgdHAsIHR6c2V0X2NhbGxlZCB1dF9hcmd1bWVudAorIAljYXNlIExfKCdDJyk6CisgCSAgaWYgKG1vZGlmaWVyID09IExfKCdFJykpCisgCSAgICB7CistI2lmIEhBVkVfU1RSVUNUX0VSQV9FTlRSWQorKyNpZiAoISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICYmIEhBVkVfU1RSVUNUX0VSQV9FTlRSWQorIAkgICAgICBzdHJ1Y3QgZXJhX2VudHJ5ICplcmEgPSBfbmxfZ2V0X2VyYV9lbnRyeSAodHAgSEVMUEVSX0xPQ0FMRV9BUkcpOworIAkgICAgICBpZiAoZXJhKQorIAkJeworQEAgLTk1NSw3ICs5NTksNyBAQCBfX3N0cmZ0aW1lX2ludGVybmFsIChzLCBtYXhzaXplLCBmb3JtYXQsIHRwLCB0enNldF9jYWxsZWQgdXRfYXJndW1lbnQKKyAKKyAJICBpZiAobW9kaWZpZXIgPT0gTF8oJ08nKSAmJiAwIDw9IG51bWJlcl92YWx1ZSkKKyAJICAgIHsKKy0jaWZkZWYgX05MX0NVUlJFTlQKKysjaWYgKCEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSAmJiBkZWZpbmVkIChfTkxfQ1VSUkVOVCkKKyAJICAgICAgLyogR2V0IHRoZSBsb2NhbGUgc3BlY2lmaWMgYWx0ZXJuYXRlIHJlcHJlc2VudGF0aW9uIG9mCisgCQkgdGhlIG51bWJlciBOVU1CRVJfVkFMVUUuICBJZiBub25lIGV4aXN0IE5VTEwgaXMgcmV0dXJuZWQuICAqLworIAkgICAgICBjb25zdCBDSEFSX1QgKmNwID0gbmxfZ2V0X2FsdF9kaWdpdCAobnVtYmVyX3ZhbHVlCitAQCAtMTI2MCw3ICsxMjY0LDcgQEAgX19zdHJmdGltZV9pbnRlcm5hbCAocywgbWF4c2l6ZSwgZm9ybWF0LCB0cCwgdHpzZXRfY2FsbGVkIHV0X2FyZ3VtZW50CisgCWNhc2UgTF8oJ1knKToKKyAJICBpZiAobW9kaWZpZXIgPT0gJ0UnKQorIAkgICAgeworLSNpZiBIQVZFX1NUUlVDVF9FUkFfRU5UUlkKKysjaWYgKCEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSAmJiBIQVZFX1NUUlVDVF9FUkFfRU5UUlkKKyAJICAgICAgc3RydWN0IGVyYV9lbnRyeSAqZXJhID0gX25sX2dldF9lcmFfZW50cnkgKHRwIEhFTFBFUl9MT0NBTEVfQVJHKTsKKyAJICAgICAgaWYgKGVyYSkKKyAJCXsKK0BAIC0xMjg1LDcgKzEyODksNyBAQCBfX3N0cmZ0aW1lX2ludGVybmFsIChzLCBtYXhzaXplLCBmb3JtYXQsIHRwLCB0enNldF9jYWxsZWQgdXRfYXJndW1lbnQKKyAJY2FzZSBMXygneScpOgorIAkgIGlmIChtb2RpZmllciA9PSBMXygnRScpKQorIAkgICAgeworLSNpZiBIQVZFX1NUUlVDVF9FUkFfRU5UUlkKKysjaWYgKCEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSAmJiBIQVZFX1NUUlVDVF9FUkFfRU5UUlkKKyAJICAgICAgc3RydWN0IGVyYV9lbnRyeSAqZXJhID0gX25sX2dldF9lcmFfZW50cnkgKHRwIEhFTFBFUl9MT0NBTEVfQVJHKTsKKyAJICAgICAgaWYgKGVyYSkKKyAJCXsKK2RpZmYgLS1naXQgYS90aW1lL3N0cnB0aW1lX2wuYyBiL3RpbWUvc3RycHRpbWVfbC5jCitpbmRleCA1NjQwY2NlLi43ODRjY2JjIDEwMDY0NAorLS0tIGEvdGltZS9zdHJwdGltZV9sLmMKKysrKyBiL3RpbWUvc3RycHRpbWVfbC5jCitAQCAtMjksNiArMjksNyBAQAorIAorICNpZmRlZiBfTElCQworICMgZGVmaW5lIEhBVkVfTE9DQUxUSU1FX1IgMAorKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjIGluY2x1ZGUgIi4uL2xvY2FsZS9sb2NhbGVpbmZvLmgiCisgI2VuZGlmCisgCitAQCAtODQsNyArODUsNyBAQCBsb2NhbHRpbWVfciAodCwgdHApCisgICAgIGlmICh2YWwgPCBmcm9tIHx8IHZhbCA+IHRvKQkJCQkJCSAgICAgIFwKKyAgICAgICByZXR1cm4gTlVMTDsJCQkJCQkJICAgICAgXAorICAgfSB3aGlsZSAoMCkKKy0jaWZkZWYgX05MX0NVUlJFTlQKKysjaWYgKCEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSAmJiBkZWZpbmVkIChfTkxfQ1VSUkVOVCkKKyAjIGRlZmluZSBnZXRfYWx0X251bWJlcihmcm9tLCB0bywgbikgXAorICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgICBfX2xhYmVsX18gZG9fbm9ybWFsOwkJCQkJCSAgICAgIFwKK0BAIC0yNTcsOCArMjU4LDEwIEBAIF9fc3RycHRpbWVfaW50ZXJuYWwgKHJwLCBmbXQsIHRtcCwgc3RhdGVwIExPQ0FMRV9QQVJBTSkKKyAgIGludCBjbnQ7CisgICBpbnQgY250X2xvbmdlc3Q7CisgICBzaXplX3QgdmFsOworKyNpZiAhIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgc2l6ZV90IG51bV9lcmFzOworICAgc3RydWN0IGVyYV9lbnRyeSAqZXJhID0gTlVMTDsKKysjZW5kaWYKKyAgIGVudW0gcHRpbWVfbG9jYWxlX3N0YXR1cyB7IG5vdCwgbG9jLCByYXcgfSBkZWNpZGVkX2xvbmdlc3Q7CisgICBzdHJ1Y3QgX19zdHJwdGltZV9zdGF0ZQorICAgeworQEAgLTgyMCw2ICs4MjMsNyBAQCBfX3N0cnB0aW1lX2ludGVybmFsIChycCwgZm10LCB0bXAsIHN0YXRlcCBMT0NBTEVfUEFSQU0pCisgCSAgICAgIHMud2FudF94ZGF5ID0gMTsKKyAJICAgICAgYnJlYWs7CisgCSAgICBjYXNlICdDJzoKKysjaWYgISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAJICAgICAgaWYgKHMuZGVjaWRlZCAhPSByYXcpCisgCQl7CisgCQkgIGlmIChzLmVyYV9jbnQgPj0gMCkKK0BAIC04NTYsMTAgKzg2MCwxMiBAQCBfX3N0cnB0aW1lX2ludGVybmFsIChycCwgZm10LCB0bXAsIHN0YXRlcCBMT0NBTEVfUEFSQU0pCisgCisgCQkgIHMuZGVjaWRlZCA9IHJhdzsKKyAJCX0KKysjZW5kaWYKKyAJICAgICAgLyogVGhlIEMgbG9jYWxlIGhhcyBubyBlcmEgaW5mb3JtYXRpb24sIHNvIHVzZSB0aGUKKyAJCSBub3JtYWwgcmVwcmVzZW50YXRpb24uICAqLworIAkgICAgICBnb3RvIG1hdGNoX2NlbnR1cnk7CisgIAkgICAgY2FzZSAneSc6CisrI2lmICEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgCSAgICAgIGlmIChzLmRlY2lkZWQgIT0gcmF3KQorIAkJeworIAkJICBnZXRfbnVtYmVyKDAsIDk5OTksIDQpOworQEAgLTkxOCw5ICs5MjQsMTAgQEAgX19zdHJwdGltZV9pbnRlcm5hbCAocnAsIGZtdCwgdG1wLCBzdGF0ZXAgTE9DQUxFX1BBUkFNKQorIAorIAkJICBzLmRlY2lkZWQgPSByYXc7CisgCQl9CistCisrI2VuZGlmCisgCSAgICAgIGdvdG8gbWF0Y2hfeWVhcl9pbl9jZW50dXJ5OworIAkgICAgY2FzZSAnWSc6CisrI2lmICEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgCSAgICAgIGlmIChzLmRlY2lkZWQgIT0gcmF3KQorIAkJeworIAkJICBudW1fZXJhcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX1RJTUUsCitAQCAtOTQ4LDYgKzk1NSw3IEBAIF9fc3RycHRpbWVfaW50ZXJuYWwgKHJwLCBmbXQsIHRtcCwgc3RhdGVwIExPQ0FMRV9QQVJBTSkKKyAKKyAJCSAgcy5kZWNpZGVkID0gcmF3OworIAkJfQorKyNlbmRpZgorIAkgICAgICBnZXRfbnVtYmVyICgwLCA5OTk5LCA0KTsKKyAJICAgICAgdG0tPnRtX3llYXIgPSB2YWwgLSAxOTAwOworIAkgICAgICBzLndhbnRfY2VudHVyeSA9IDA7CitAQCAtMTExOCw2ICsxMTI2LDcgQEAgX19zdHJwdGltZV9pbnRlcm5hbCAocnAsIGZtdCwgdG1wLCBzdGF0ZXAgTE9DQUxFX1BBUkFNKQorIAl0bS0+dG1feWVhciA9IChzLmNlbnR1cnkgLSAxOSkgKiAxMDA7CisgICAgIH0KKyAKKysjaWYgISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGlmIChzLmVyYV9jbnQgIT0gLTEpCisgICAgIHsKKyAgICAgICBlcmEgPSBfbmxfc2VsZWN0X2VyYV9lbnRyeSAocy5lcmFfY250IEhFTFBFUl9MT0NBTEVfQVJHKTsKK0BAIC0xMTMyLDYgKzExNDEsNyBAQCBfX3N0cnB0aW1lX2ludGVybmFsIChycCwgZm10LCB0bXAsIHN0YXRlcCBMT0NBTEVfUEFSQU0pCisgCXRtLT50bV95ZWFyID0gZXJhLT5zdGFydF9kYXRlWzBdOworICAgICB9CisgICBlbHNlCisrI2VuZGlmCisgICAgIGlmIChzLndhbnRfZXJhKQorICAgICAgIHsKKyAJLyogTm8gZXJhIGZvdW5kIGJ1dCB3ZSBoYXZlIHNlZW4gYW4gRSBtb2RpZmllci4gIFJlY3RpZnkgc29tZQorZGlmZiAtLWdpdCBhL3RpbWV6b25lL01ha2VmaWxlIGIvdGltZXpvbmUvTWFrZWZpbGUKK2luZGV4IDg4NmIwNmUuLmY5MjI2ODQgMTAwNjQ0CistLS0gYS90aW1lem9uZS9NYWtlZmlsZQorKysrIGIvdGltZXpvbmUvTWFrZWZpbGUKK0BAIC0xMjcsNyArMTI3LDcgQEAgJCh0ZXN0ZGF0YSkvWFQlOiB0ZXN0ZGF0YS9YVCUKKyAKKyAkKG9ianBmeCl0enNlbGVjdDogdHpzZWxlY3Qua3NoICQoY29tbW9uLW9ianBmeCljb25maWcubWFrZQorIAlzZWQgLWUgJ3N8L2Jpbi9iYXNofC9iaW4vc2h8JyBcCistCSAgICAtZSAnc3xUWkRJUj1bXn1dKnxUWkRJUj0kKHpvbmVkaXIpfCcgXAorKwkgICAgLWUgJy9UWkRJUj0vc3xcJCQocHdkKXwkKHpvbmVkaXIpfCcgXAorIAkgICAgLWUgJy9UWlZFUlNJT049L3N8c2VlX01ha2VmaWxlfCIkKHZlcnNpb24pInwnIFwKKyAJICAgIC1lICcvUEtHVkVSU0lPTj0vc3w9Lip8PSIkKFBLR1ZFUlNJT04pInwnIFwKKyAJICAgIC1lICcvUkVQT1JUX0JVR1NfVE89L3N8PS4qfD0iJChSRVBPUlRfQlVHU19UTykifCcgXAorZGlmZiAtLWdpdCBhL3djc21icy9NYWtlZmlsZSBiL3djc21icy9NYWtlZmlsZQoraW5kZXggNDRhNDQ5NC4uZGI5ZmMyNCAxMDA2NDQKKy0tLSBhL3djc21icy9NYWtlZmlsZQorKysrIGIvd2NzbWJzL01ha2VmaWxlCitAQCAtMTgsMTUgKzE4LDIxIEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciB3Y3NtYnMgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSB3Y3NtYnMKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyBoZWFkZXJzCTo9IHdjaGFyLmggYml0cy93Y2hhci5oIGJpdHMvd2NoYXIyLmggYml0cy93Y2hhci1sZGJsLmggdWNoYXIuaAorIAorLXJvdXRpbmVzIDo9IHdjc2NhdCB3Y3NjaHIgd2NzY21wIHdjc2NweSB3Y3Njc3BuIHdjc2R1cCB3Y3NsZW4gd2NzbmNhdCBcCisrIyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgYnkgcHJpbnRmX2ZwLmMsIGV2ZW4gaW4gdGhlIHBsYWluIGNhc2U7IHNlZQorKyMgY29tbWVudHMgdGhlcmUgZm9yIE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUuCisrcm91dGluZXMgIDo9IHdtZW1jcHkgd21lbXNldAorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpIFwKKysJICA6PSB3Y3NjYXQgd2NzY2hyIHdjc2NtcCB3Y3NjcHkgd2NzY3NwbiB3Y3NkdXAgd2NzbGVuIHdjc25jYXQgXAorIAkgICAgd2NzbmNtcCB3Y3NuY3B5IHdjc3Bicmsgd2NzcmNociB3Y3NzcG4gd2NzdG9rIHdjc3N0ciB3bWVtY2hyIFwKKy0JICAgIHdtZW1jbXAgd21lbWNweSB3bWVtbW92ZSB3bWVtc2V0IHdjcGNweSB3Y3BuY3B5IHdtZW1wY3B5IFwKKysJICAgIHdtZW1jbXAgd21lbW1vdmUgd2NwY3B5IHdjcG5jcHkgd21lbXBjcHkgXAorIAkgICAgYnRvd2Mgd2N0b2IgbWJzaW5pdCBcCisgCSAgICBtYnJsZW4gbWJydG93YyB3Y3J0b21iIG1ic3J0b3djcyB3Y3NydG9tYnMgXAorIAkgICAgbWJzbnJ0b3djcyB3Y3NucnRvbWJzIHdjc25sZW4gd2NzY2hybnVsIFwKK0BAIC0zOCwxNCArNDQsMjEgQEAgcm91dGluZXMgOj0gd2NzY2F0IHdjc2NociB3Y3NjbXAgd2NzY3B5IHdjc2NzcG4gd2NzZHVwIHdjc2xlbiB3Y3NuY2F0IFwKKyAJICAgIHdjc2NvbGxfbCB3Y3N4ZnJtX2wgXAorIAkgICAgd2NzY2FzZWNtcCB3Y3NuY2FzZSB3Y3NjYXNlY21wX2wgd2NzbmNhc2VfbCBcCisgCSAgICB3Y3NtYnNsb2FkIG1ic3J0b3djc19sIFwKKy0JICAgIGlzb2M5OV93c2NhbmYgaXNvYzk5X3Z3c2NhbmYgaXNvYzk5X2Z3c2NhbmYgaXNvYzk5X3Zmd3NjYW5mIFwKKyAJICAgIGlzb2M5OV9zd3NjYW5mIGlzb2M5OV92c3dzY2FuZiBcCisgCSAgICBtYnJ0b2MxNiBjMTZydG9tYgorIAorLXN0cm9wLXRlc3RzIDo9ICB3Y3NjbXAgd2NzbmNtcCB3bWVtY21wIHdjc2xlbiB3Y3NjaHIgd2NzcmNociB3Y3NjcHkKKy10ZXN0cyA6PSB0c3Qtd2NzdG9mIHdjc21icy10c3QxIHRzdC13Y3NubGVuIHRzdC1idG93YyB0c3QtbWJydG93YyBcCistCSB0c3Qtd2NydG9tYiB0c3Qtd2NwbmNweSB0c3QtbWJzcnRvd2NzIHRzdC13Y2hhci1oIHRzdC1tYnJ0b3djMiBcCistCSB0c3QtYzE2YzMyLTEgd2NzYXRjbGlmZiAkKGFkZHByZWZpeCB0ZXN0LSwkKHN0cm9wLXRlc3RzKSkKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJKz0gaXNvYzk5X3dzY2FuZiBpc29jOTlfdndzY2FuZiBpc29jOTlfZndzY2FuZiBpc29jOTlfdmZ3c2NhbmYKKysKKytzdHJvcC10ZXN0cyA6PSAgd2NzY21wIHdtZW1jbXAgd21lbWNtcCB3Y3NsZW4gd2NzY2hyIHdjc3JjaHIgd2NzY3B5CisrCisrdGVzdHMgOj0gdHN0LXdjaGFyLWgKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJKz0gdHN0LWJ0b3djIHRzdC1tYnJ0b3djIHRzdC1tYnJ0b3djMiB0c3Qtd2NydG9tYiB0c3QtYzE2YzMyLTEKKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSBcCisrCSs9IHRzdC13Y3N0b2Ygd2NzbWJzLXRzdDEgdHN0LXdjc25sZW4gXAorKwl0c3Qtd2NwbmNweSB0c3QtbWJzcnRvd2NzIFwKKysJd2NzYXRjbGlmZiAkKGFkZHByZWZpeCB0ZXN0LSwkKHN0cm9wLXRlc3RzKSkKKyAKKyBpbmNsdWRlIC4uL1J1bGVzCisgCitkaWZmIC0tZ2l0IGEvd2NzbWJzL3djc21ic2xvYWQuYyBiL3djc21icy93Y3NtYnNsb2FkLmMKK2luZGV4IDZiYjQ5YmMuLjJhYjlkMDcgMTAwNjQ0CistLS0gYS93Y3NtYnMvd2NzbWJzbG9hZC5jCisrKysgYi93Y3NtYnMvd2NzbWJzbG9hZC5jCitAQCAtMjEsNiArMjEsNyBAQAorICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpbmNsdWRlIDxsb2NhbGUvbG9jYWxlaW5mby5oPgorICNpbmNsdWRlIDx3Y3NtYnNsb2FkLmg+CitAQCAtMTQzLDYgKzE0NCw3IEBAIF9fd2NzbWJzX2dldGZjdCAoY29uc3QgY2hhciAqdG8sIGNvbnN0IGNoYXIgKmZyb20sIHNpemVfdCAqbnN0ZXBzcCkKKyAgIH0pCisgCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIC8qIFNvbWUgb2YgdGhlIGZ1bmN0aW9ucyBoZXJlIG11c3Qgbm90IGJlIHVzZWQgd2hpbGUgc2V0bG9jYWxlIGlzIGNhbGxlZC4gICovCisgX19saWJjX3J3bG9ja19kZWZpbmUgKGV4dGVybiwgX19saWJjX3NldGxvY2FsZV9sb2NrIGF0dHJpYnV0ZV9oaWRkZW4pCisgCitAQCAtMjExLDYgKzIxMywxNyBAQCBfX3djc21ic19sb2FkX2NvbnYgKHN0cnVjdCBfX2xvY2FsZV9kYXRhICpuZXdfY2F0ZWdvcnkpCisgCisgICBfX2xpYmNfcndsb2NrX3VubG9jayAoX19saWJjX3NldGxvY2FsZV9sb2NrKTsKKyB9CisrI2Vsc2UKKyt2b2lkCisraW50ZXJuYWxfZnVuY3Rpb24KKytfX3djc21ic19sb2FkX2NvbnYgKHN0cnVjdCBfX2xvY2FsZV9kYXRhICpuZXdfY2F0ZWdvcnkpCisreworKyAgLyogV2hlbiBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzIGRpc2FibGVkLCB3ZSBzaG91bGQgbmV2ZXIgcmVhY2gKKysgICAgIHRoaXMgcG9pbnQ6IHRoZXJlIGlzIG5vIHdheSB0byBjaGFuZ2UgbG9jYWxlcywgc28gZXZlcnkgbG9jYWxlCisrICAgICBwYXNzZWQgdG8gZ2V0X2djb252X2ZjdHMgc2hvdWxkIGJlIF9ubF9DX0xDX0NUWVBFLiAgKi8KKysgIGFib3J0ICgpOworK30KKysjZW5kaWYKKyAKKyAKKyAvKiBDbG9uZSB0aGUgY3VycmVudCBjb252ZXJzaW9uIGZ1bmN0aW9uIHNldC4gICovCitkaWZmIC0tZ2l0IGEvd2N0eXBlL01ha2VmaWxlIGIvd2N0eXBlL01ha2VmaWxlCitpbmRleCBjNTZmMDdjLi40ZThhZjQzIDEwMDY0NAorLS0tIGEvd2N0eXBlL01ha2VmaWxlCisrKysgYi93Y3R5cGUvTWFrZWZpbGUKK0BAIC0xOCwxNCArMTgsMjAgQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIHdjdHlwZSBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHdjdHlwZQorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorIGhlYWRlcnMJCTo9IHdjdHlwZS5oCistcm91dGluZXMJOj0gd2NmdW5jcyB3Y3R5cGUgaXN3Y3R5cGUgd2N0cmFucyB0b3djdHJhbnMgXAorLQkJICAgd2NmdW5jc19sIHdjdHlwZV9sIGlzd2N0eXBlX2wgd2N0cmFuc19sIHRvd2N0cmFuc19sCistCistdGVzdHMJOj0gdGVzdF93Y3R5cGUgdGVzdF93Y2Z1bmNzIGJ1Zy13Y3R5cGVoCisrcm91dGluZXMgCTo9IHdjdHJhbnMgdG93Y3RyYW5zIHRvd2N0cmFuc19sCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgXAorKwkJOj0gd2NmdW5jcyB3Y3R5cGUgaXN3Y3R5cGUgXAorKwkJICAgd2NmdW5jc19sIHdjdHlwZV9sIGlzd2N0eXBlX2wgd2N0cmFuc19sCisrCisrdGVzdHMJOj0KKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSBcCisrICAgICArPSB0ZXN0X3djdHlwZSB0ZXN0X3djZnVuY3MgYnVnLXdjdHlwZWgKKyAKKyBpbmNsdWRlIC4uL1J1bGVzCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNS1lZ2xpYmMtSW5zdGFsbC1QSUMtYXJjaGl2ZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjUtZWdsaWJjLUluc3RhbGwtUElDLWFyY2hpdmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNTljY2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjUtZWdsaWJjLUluc3RhbGwtUElDLWFyY2hpdmVzLnBhdGNoCkBAIC0wLDAgKzEsMTIzIEBACitGcm9tIDU3NzM0MTdmYTkxYTE4Y2QzOWZiMzVjOTkwN2Q3MmFmMGVkOWVhMzMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMTo1NzowMSArMDAwMAorU3ViamVjdDogW1BBVENIIDI1LzI3XSBlZ2xpYmM6IEluc3RhbGwgUElDIGFyY2hpdmVzCisKK0ZvcndhcmQgcG9ydCBmcm9tIGVnbGliYworCisyMDA4LTAyLTA3ICBKb3NlcGggTXllcnMgIDxqb3NlcGhAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgICAgICAqIE1ha2VydWxlcyAoaW5zdGFsbC1leHRyYXMsIGluc3RhbGwtbWFwKTogTmV3IHZhcmlhYmxlcy4KKyAgICAgICAgKGluc3RhbGxlZC1saWJjcyk6IEFkZCBsaWJjX3BpYy5hLgorICAgICAgICAoaW5zdGFsbC1saWIpOiBJbmNsdWRlIF9waWMuYSBmaWxlcyBmb3IgdmVyc2lvbmVkIHNoYXJlZAorICAgICAgICBsaWJyYXJpZXMuCisgICAgICAgIChpbnN0YWxsLW1hcC1ub3N1YmRpciwgaW5zdGFsbC1leHRyYXMtbm9zdWJkaXIpOiBBZGQgcnVsZXMgZm9yCisgICAgICAgIGluc3RhbGxpbmcgZXh0cmEgZmlsZXMuCisgICAgICAgIChpbnN0YWxsLW5vLWxpYmMuYS1ub3N1YmRpcik6IERlcGVuZCBvbiBpbnN0YWxsLW1hcC1ub3N1YmRpciBhbmQKKyAgICAgICAgaW5zdGFsbC1leHRyYXMtbm9zdWJkaXIuCisKKzIwMDgtMDQtMDEgIE1heGltIEt1dnlya292ICA8bWF4aW1AY29kZXNvdXJjZXJ5LmNvbT4KKworICAgICAgICAqIE1ha2VydWxlcyAoaW5zdGFsbC1saWIpOiBEb24ndCBpbnN0YWxsIGxpYnB0aHJlYWRfcGljLmEuCisgICAgICAgIChpbnN0YWxsLW1hcCk6IERvbid0IGluc3RhbGwgbGlicHRocmVhZF9waWMubWFwLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIE1ha2VydWxlcyB8IDQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA0MCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZXJ1bGVzIGIvTWFrZXJ1bGVzCitpbmRleCAxZGQ0MWFhLi40MTc3OGUxIDEwMDY0NAorLS0tIGEvTWFrZXJ1bGVzCisrKysgYi9NYWtlcnVsZXMKK0BAIC03MTMsNiArNzEzLDkgQEAgaWZlcSAoJChidWlsZC1zaGFyZWQpLHllcykKKyAkKGNvbW1vbi1vYmpwZngpbGliYy5zbzogJChjb21tb24tb2JqcGZ4KWxpYmMubWFwCisgZW5kaWYKKyBjb21tb24tZ2VuZXJhdGVkICs9IGxpYmMuc28gbGliY19waWMub3MKKytpZm5kZWYgc3ViZGlyCisraW5zdGFsbC1leHRyYXMgOj0gc29pbml0Lm8gc29maW5pLm8KKytlbmRpZgorIGlmZGVmIGxpYmMuc28tdmVyc2lvbgorICQoY29tbW9uLW9ianBmeClsaWJjLnNvJChsaWJjLnNvLXZlcnNpb24pOiAkKGNvbW1vbi1vYmpwZngpbGliYy5zbworIAkkKG1ha2UtbGluaykKK0BAIC05NTUsNiArOTU4LDcgQEAgZW5kaWYKKyAKKyBpbnN0YWxsOiBjaGVjay1pbnN0YWxsLXN1cHBvcnRlZAorIAorK2luc3RhbGxlZC1saWJjcyA6PSAkKGluc3RhbGxlZC1saWJjcykgJChpbnN0X2xpYmRpcikvbGliY19waWMuYQorIGluc3RhbGw6ICQoaW5zdGFsbGVkLWxpYmNzKQorICQoaW5zdGFsbGVkLWxpYmNzKTogJChpbnN0X2xpYmRpcikvbGliJChsaWJwcmVmaXgpJTogbGliICQoK2ZvcmNlKQorIAkkKG1ha2UtdGFyZ2V0LWRpcmVjdG9yeSkKK0BAIC05ODMsNiArOTg3LDIyIEBAIHZlcnNpb25lZCA6PSAkKHN0cmlwICQoZm9yZWFjaCBzbywkKGluc3RhbGwtbGliLnNvKSxcCisgaW5zdGFsbC1saWIuc28tdmVyc2lvbmVkIDo9ICQoZmlsdGVyICQodmVyc2lvbmVkKSwgJChpbnN0YWxsLWxpYi5zbykpCisgaW5zdGFsbC1saWIuc28tdW52ZXJzaW9uZWQgOj0gJChmaWx0ZXItb3V0ICQodmVyc2lvbmVkKSwgJChpbnN0YWxsLWxpYi5zbykpCisgCisrIyBJbnN0YWxsIHRoZSBfcGljLmEgZmlsZXMgZm9yIHZlcnNpb25lZCBsaWJyYXJpZXMsIGFuZCBjb3JyZXNwb25kaW5nCisrIyAubWFwIGZpbGVzLgorKyMgbGlicHRocmVhZF9waWMuYSBicmVha3MgbWtsaWJzLCBzbyBkb24ndCBpbnN0YWxsIGl0IGFuZCBpdHMgbWFwLgorK2luc3RhbGwtbGliIDo9ICQoaW5zdGFsbC1saWIpICQoaW5zdGFsbC1saWIuc28tdmVyc2lvbmVkOiUuc289JV9waWMuYSkKKytpbnN0YWxsLWxpYiA6PSAkKGZpbHRlci1vdXQgbGlicHRocmVhZF9waWMuYSwkKGluc3RhbGwtbGliKSkKKysjIERlc3BpdGUgaGF2aW5nIGEgc29uYW1lIGxpYmh1cmR1c2VyIGFuZCBsaWJtYWNodXNlciBkbyBub3QgdXNlIHN5bWJvbAorKyMgdmVyc2lvbmluZywgc28gZG9uJ3QgaW5zdGFsbCB0aGUgY29ycmVzcG9uZGluZyAubWFwIGZpbGVzLgorK2lmZXEgKCQoYnVpbGQtc2hhcmVkKSx5ZXMpCisraW5zdGFsbC1tYXAgOj0gJChwYXRzdWJzdCAlLnNvLCUubWFwLFwKKysJCQkkKGZvcmVhY2ggTCwkKGluc3RhbGwtbGliLnNvLXZlcnNpb25lZCksJChub3RkaXIgJEwpKSkKKytpbnN0YWxsLW1hcCA6PSAkKGZpbHRlci1vdXQgbGliaHVyZHVzZXIubWFwIGxpYm1hY2h1c2VyLm1hcCBsaWJwdGhyZWFkLm1hcCwkKGluc3RhbGwtbWFwKSkKKytpZm5kZWYgc3ViZGlyCisraW5zdGFsbC1tYXAgOj0gJChpbnN0YWxsLW1hcCkgbGliYy5tYXAKKytlbmRpZgorK2VuZGlmCisrCisgIyBGb3IgdmVyc2lvbmVkIGxpYnJhcmllcywgd2UgaW5zdGFsbCB0aHJlZSBmaWxlczoKKyAjCSQoaW5zdF9saWJkaXIpL2xpYmZvby5zbwktLSBmb3IgbGlua2luZywgc3ltbGluayBvciBsZCBzY3JpcHQKKyAjCSQoaW5zdF9zbGliZGlyKS9saWJmb28uc28uTk4JLS0gZm9yIGxvYWRpbmcgYnkgU09OQU1FLCBzeW1saW5rCitAQCAtMTIyNSw5ICsxMjQ1LDIyIEBAICQoYWRkcHJlZml4ICQoaW5zdF9pbmNsdWRlZGlyKS8sJChoZWFkZXJzLW5vbmgpKTogJChpbnN0X2luY2x1ZGVkaXIpLyU6IFwKKyBlbmRpZgkjIGhlYWRlcnMtbm9uaAorIGVuZGlmCSMgaGVhZGVycworIAorK2lmZGVmIGluc3RhbGwtbWFwCisrJChhZGRwcmVmaXggJChpbnN0X2xpYmRpcikvLCQocGF0c3Vic3QgbGliJS5tYXAsbGliJV9waWMubWFwLCQoaW5zdGFsbC1tYXApKSk6IFwKKysgICQoaW5zdF9saWJkaXIpL2xpYiVfcGljLm1hcDogJChjb21tb24tb2JqcGZ4KWxpYiUubWFwICQoK2ZvcmNlKQorKwkkKGRvLWluc3RhbGwpCisrZW5kaWYKKysKKytpZmRlZiBpbnN0YWxsLWV4dHJhcworKyQoYWRkcHJlZml4ICQoaW5zdF9saWJkaXIpL2xpYmNfcGljLywkKGluc3RhbGwtZXh0cmFzKSk6IFwKKysgICQoaW5zdF9saWJkaXIpL2xpYmNfcGljLyUubzogJChlbGYtb2JqcGZ4KSUub3MgJCgrZm9yY2UpCisrCSQoZG8taW5zdGFsbCkKKytlbmRpZgorKworIC5QSE9OWTogaW5zdGFsbC1iaW4tbm9zdWJkaXIgaW5zdGFsbC1iaW4tc2NyaXB0LW5vc3ViZGlyIFwKKyAJaW5zdGFsbC1yb290c2Jpbi1ub3N1YmRpciBpbnN0YWxsLXNiaW4tbm9zdWJkaXIgaW5zdGFsbC1saWItbm9zdWJkaXIgXAorLQlpbnN0YWxsLWRhdGEtbm9zdWJkaXIgaW5zdGFsbC1oZWFkZXJzLW5vc3ViZGlyCisrCWluc3RhbGwtZGF0YS1ub3N1YmRpciBpbnN0YWxsLWhlYWRlcnMtbm9zdWJkaXIgaW5zdGFsbC1tYXAtbm9zdWJkaXIgXAorKwlpbnN0YWxsLWV4dHJhcy1ub3N1YmRpcgorIGluc3RhbGwtYmluLW5vc3ViZGlyOiAkKGFkZHByZWZpeCAkKGluc3RfYmluZGlyKS8sJChpbnN0YWxsLWJpbikpCisgaW5zdGFsbC1iaW4tc2NyaXB0LW5vc3ViZGlyOiAkKGFkZHByZWZpeCAkKGluc3RfYmluZGlyKS8sJChpbnN0YWxsLWJpbi1zY3JpcHQpKQorIGluc3RhbGwtcm9vdHNiaW4tbm9zdWJkaXI6IFwKK0BAIC0xMjQwLDYgKzEyNzMsMTAgQEAgaW5zdGFsbC1kYXRhLW5vc3ViZGlyOiAkKGFkZHByZWZpeCAkKGluc3RfZGF0YWRpcikvLCQoaW5zdGFsbC1kYXRhKSkKKyBpbnN0YWxsLWhlYWRlcnMtbm9zdWJkaXI6ICQoYWRkcHJlZml4ICQoaW5zdF9pbmNsdWRlZGlyKS8sJChoZWFkZXJzKSkKKyBpbnN0YWxsLW90aGVycy1ub3N1YmRpcjogJChpbnN0YWxsLW90aGVycykKKyBpbnN0YWxsLW90aGVycy1wcm9ncmFtcy1ub3N1YmRpcjogJChpbnN0YWxsLW90aGVycy1wcm9ncmFtcykKKytpbnN0YWxsLW1hcC1ub3N1YmRpcjogJChhZGRwcmVmaXggJChpbnN0X2xpYmRpcikvLFwKKysJCSAgICAgICAkKHBhdHN1YnN0IGxpYiUubWFwLGxpYiVfcGljLm1hcCwkKGluc3RhbGwtbWFwKSkpCisraW5zdGFsbC1leHRyYXMtbm9zdWJkaXI6ICQoYWRkcHJlZml4ICQoaW5zdF9saWJkaXIpL2xpYmNfcGljLyxcCisrCQkgICAgICAgJChpbnN0YWxsLWV4dHJhcykpCisgCisgIyBXZSBuZWVkIGFsbCB0aGUgYC1ub3N1YmRpcicgdGFyZ2V0cyBzbyB0aGF0IGBpbnN0YWxsJyBpbiB0aGUgcGFyZW50CisgIyBkb2Vzbid0IGRlcGVuZCBvbiBzZXZlcmFsIHRoaW5ncyB3aGljaCBlYWNoIGl0ZXJhdGUgb3ZlciB0aGUgc3ViZGlycy4KK0BAIC0xMjQ5LDcgKzEyODYsOCBAQCBpbnN0YWxsLSU6OiBpbnN0YWxsLSUtbm9zdWJkaXIgOworIAorIC5QSE9OWTogaW5zdGFsbCBpbnN0YWxsLW5vLWxpYmMuYS1ub3N1YmRpcgorIGluc3RhbGwtbm8tbGliYy5hLW5vc3ViZGlyOiBpbnN0YWxsLWhlYWRlcnMtbm9zdWJkaXIgaW5zdGFsbC1kYXRhLW5vc3ViZGlyIFwKKy0JCQkgICAgaW5zdGFsbC1saWItbm9zdWJkaXIgaW5zdGFsbC1vdGhlcnMtbm9zdWJkaXIKKysJCQkgICAgaW5zdGFsbC1saWItbm9zdWJkaXIgaW5zdGFsbC1vdGhlcnMtbm9zdWJkaXIgXAorKwkJCSAgICBpbnN0YWxsLW1hcC1ub3N1YmRpciBpbnN0YWxsLWV4dHJhcy1ub3N1YmRpcgorIGlmZXEgKCQoYnVpbGQtcHJvZ3JhbXMpLHllcykKKyBpbnN0YWxsLW5vLWxpYmMuYS1ub3N1YmRpcjogaW5zdGFsbC1iaW4tbm9zdWJkaXIgaW5zdGFsbC1iaW4tc2NyaXB0LW5vc3ViZGlyIFwKKyAJCQkgICAgaW5zdGFsbC1yb290c2Jpbi1ub3N1YmRpciBpbnN0YWxsLXNiaW4tbm9zdWJkaXIgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjYtZWdsaWJjLWRsX2RlYnVnX21hc2staXMtY29udHJvbGxlZC1ieS1fX09QVElPTl9FR0xJQi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNi1lZ2xpYmMtZGxfZGVidWdfbWFzay1pcy1jb250cm9sbGVkLWJ5LV9fT1BUSU9OX0VHTElCLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNjExZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjYtZWdsaWJjLWRsX2RlYnVnX21hc2staXMtY29udHJvbGxlZC1ieS1fX09QVElPTl9FR0xJQi5wYXRjaApAQCAtMCwwICsxLDU1NiBAQAorRnJvbSBiYTA2OWIzMTA3ZjVhZDIwMGM0YWI5NWU2OWNmMzY4ZTIzNTNiMDBhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NDY6NTAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyNi8yN10gZWdsaWJjOiBkbF9kZWJ1Z19tYXNrIGlzIGNvbnRyb2xsZWQgYnkKKyBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworCit1c2UgR0xST19kbF9kZWJ1Z19tYXNrCisKK1NpbmdlZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgY3N1L2xpYmMtc3RhcnQuYyAgICAgICB8ICA0ICsrLS0KKyBlbGYvZGwtY2FjaGUuYyAgICAgICAgIHwgIDQgKystLQorIGVsZi9kbC1jbG9zZS5jICAgICAgICAgfCAgNiArKystLS0KKyBlbGYvZGwtY29uZmxpY3QuYyAgICAgIHwgIDIgKy0KKyBlbGYvZGwtZGVwcy5jICAgICAgICAgIHwgIDYgKysrLS0tCisgZWxmL2RsLWVycm9yLmMgICAgICAgICB8ICAyICstCisgZWxmL2RsLWZpbmkuYyAgICAgICAgICB8ICA0ICsrLS0KKyBlbGYvZGwtaW5pdC5jICAgICAgICAgIHwgIDQgKystLQorIGVsZi9kbC1sb2FkLmMgICAgICAgICAgfCAxNiArKysrKysrKy0tLS0tLS0tCisgZWxmL2RsLWxvb2t1cC5jICAgICAgICB8IDE0ICsrKysrKystLS0tLS0tCisgZWxmL2RsLW9iamVjdC5jICAgICAgICB8ICAyICstCisgZWxmL2RsLW9wZW4uYyAgICAgICAgICB8IDEwICsrKysrLS0tLS0KKyBlbGYvZGwtcmVsb2MuYyAgICAgICAgIHwgIDIgKy0KKyBlbGYvZGwtdmVyc2lvbi5jICAgICAgIHwgIDIgKy0KKyBlbGYvZ2V0LWR5bmFtaWMtaW5mby5oIHwgIDIgKy0KKyBlbGYvcnRsZC5jICAgICAgICAgICAgIHwgMjIgKysrKysrKysrKystLS0tLS0tLS0tLQorIDE2IGZpbGVzIGNoYW5nZWQsIDUxIGluc2VydGlvbnMoKyksIDUxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3N1L2xpYmMtc3RhcnQuYyBiL2NzdS9saWJjLXN0YXJ0LmMKK2luZGV4IDBhZmE3YzAuLjIxNTFmYjYgMTAwNjQ0CistLS0gYS9jc3UvbGliYy1zdGFydC5jCisrKysgYi9jc3UvbGliYy1zdGFydC5jCitAQCAtMjM4LDcgKzIzOCw3IEBAIExJQkNfU1RBUlRfTUFJTiAoaW50ICgqbWFpbikgKGludCwgY2hhciAqKiwgY2hhciAqKiBNQUlOX0FVWFZFQ19ERUNMKSwKKyAKKyAgIC8qIENhbGwgdGhlIGluaXRpYWxpemVyIG9mIHRoZSBwcm9ncmFtLCBpZiBhbnkuICAqLworICNpZmRlZiBTSEFSRUQKKy0gIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfSU1QQ0FMTFMsIDApKQorKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0lNUENBTExTLCAwKSkKKyAgICAgR0xSTyhkbF9kZWJ1Z19wcmludGYpICgiXG5pbml0aWFsaXplIHByb2dyYW06ICVzXG5cbiIsIGFyZ3ZbMF0pOworICNlbmRpZgorICAgaWYgKGluaXQpCitAQCAtMjYxLDcgKzI2MSw3IEBAIExJQkNfU1RBUlRfTUFJTiAoaW50ICgqbWFpbikgKGludCwgY2hhciAqKiwgY2hhciAqKiBNQUlOX0FVWFZFQ19ERUNMKSwKKyAjZW5kaWYKKyAKKyAjaWZkZWYgU0hBUkVECistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0lNUENBTExTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19JTVBDQUxMUykpCisgICAgIEdMUk8oZGxfZGVidWdfcHJpbnRmKSAoIlxudHJhbnNmZXJyaW5nIGNvbnRyb2w6ICVzXG5cbiIsIGFyZ3ZbMF0pOworICNlbmRpZgorIAorZGlmZiAtLWdpdCBhL2VsZi9kbC1jYWNoZS5jIGIvZWxmL2RsLWNhY2hlLmMKK2luZGV4IDg2MmYxZDguLmRhYjljNTEgMTAwNjQ0CistLS0gYS9lbGYvZGwtY2FjaGUuYworKysrIGIvZWxmL2RsLWNhY2hlLmMKK0BAIC0xOTQsNyArMTk0LDcgQEAgX2RsX2xvYWRfY2FjaGVfbG9va3VwIChjb25zdCBjaGFyICpuYW1lKQorICAgY29uc3QgY2hhciAqYmVzdDsKKyAKKyAgIC8qIFByaW50IGEgbWVzc2FnZSBpZiB0aGUgbG9hZGluZyBvZiBsaWJzIGlzIHRyYWNlZC4gICovCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMpKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiIHNlYXJjaCBjYWNoZT0lc1xuIiwgTERfU09fQ0FDSEUpOworIAorICAgaWYgKGNhY2hlID09IE5VTEwpCitAQCAtMjkyLDcgKzI5Miw3IEBAIF9kbF9sb2FkX2NhY2hlX2xvb2t1cCAoY29uc3QgY2hhciAqbmFtZSkKKyAgICAgfQorIAorICAgLyogUHJpbnQgb3VyIHJlc3VsdCBpZiB3YW50ZWQuICAqLworLSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTLCAwKQorKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMsIDApCisgICAgICAgJiYgYmVzdCAhPSBOVUxMKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiICB0cnlpbmcgZmlsZT0lc1xuIiwgYmVzdCk7CisgCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWNsb3NlLmMgYi9lbGYvZGwtY2xvc2UuYworaW5kZXggYzg5NzI0Ny4uYjFiNGJkNSAxMDA2NDQKKy0tLSBhL2VsZi9kbC1jbG9zZS5jCisrKysgYi9lbGYvZGwtY2xvc2UuYworQEAgLTEyNSw3ICsxMjUsNyBAQCBfZGxfY2xvc2Vfd29ya2VyIChzdHJ1Y3QgbGlua19tYXAgKm1hcCwgYm9vbCBmb3JjZSkKKyAJZGxfY2xvc2Vfc3RhdGUgPSByZXJ1bjsKKyAKKyAgICAgICAvKiBUaGVyZSBhcmUgc3RpbGwgcmVmZXJlbmNlcyB0byB0aGlzIG9iamVjdC4gIERvIG5vdGhpbmcgbW9yZS4gICovCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19GSUxFUykpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0ZJTEVTKSkKKyAJX2RsX2RlYnVnX3ByaW50ZiAoIlxuY2xvc2luZyBmaWxlPSVzOyBkaXJlY3Rfb3BlbmNvdW50PSV1XG4iLAorIAkJCSAgbWFwLT5sX25hbWUsIG1hcC0+bF9kaXJlY3Rfb3BlbmNvdW50KTsKKyAKK0BAIC0yNjksNyArMjY5LDcgQEAgX2RsX2Nsb3NlX3dvcmtlciAoc3RydWN0IGxpbmtfbWFwICptYXAsIGJvb2wgZm9yY2UpCisgCSAgaWYgKGltYXAtPmxfaW5pdF9jYWxsZWQpCisgCSAgICB7CisgCSAgICAgIC8qIFdoZW4gZGVidWdnaW5nIHByaW50IGEgbWVzc2FnZSBmaXJzdC4gICovCistCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfSU1QQ0FMTFMsCisrCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19JTVBDQUxMUywKKyAJCQkJICAgIDApKQorIAkJX2RsX2RlYnVnX3ByaW50ZiAoIlxuY2FsbGluZyBmaW5pOiAlcyBbJWx1XVxuXG4iLAorIAkJCQkgIGltYXAtPmxfbmFtZSwgbnNpZCk7CitAQCAtNzExLDcgKzcxMSw3IEBAIF9kbF9jbG9zZV93b3JrZXIgKHN0cnVjdCBsaW5rX21hcCAqbWFwLCBib29sIGZvcmNlKQorIAkgIGZyZWUgKGltYXAtPmxfcmVsZGVwcyk7CisgCisgCSAgLyogUHJpbnQgZGVidWdnaW5nIG1lc3NhZ2UuICAqLworLQkgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfRklMRVMpKQorKwkgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19GSUxFUykpCisgCSAgICBfZGxfZGVidWdfcHJpbnRmICgiXG5maWxlPSVzIFslbHVdOyAgZGVzdHJveWluZyBsaW5rIG1hcFxuIiwKKyAJCQkgICAgICBpbWFwLT5sX25hbWUsIGltYXAtPmxfbnMpOworIAorZGlmZiAtLWdpdCBhL2VsZi9kbC1jb25mbGljdC5jIGIvZWxmL2RsLWNvbmZsaWN0LmMKK2luZGV4IDQ3YTk0NmUuLmU2YTNmMjEgMTAwNjQ0CistLS0gYS9lbGYvZGwtY29uZmxpY3QuYworKysrIGIvZWxmL2RsLWNvbmZsaWN0LmMKK0BAIC0zMiw3ICszMiw3IEBAIF9kbF9yZXNvbHZlX2NvbmZsaWN0cyAoc3RydWN0IGxpbmtfbWFwICpsLCBFbGZXKFJlbGEpICpjb25mbGljdCwKKyAJCSAgICAgICBFbGZXKFJlbGEpICpjb25mbGljdGVuZCkKKyB7CisgI2lmICEgRUxGX01BQ0hJTkVfTk9fUkVMQQorLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19SRUxPQykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfUkVMT0MpKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiXG5jb25mbGljdCBwcm9jZXNzaW5nOiAlc1xuIiwgRFNPX0ZJTEVOQU1FIChsLT5sX25hbWUpKTsKKyAKKyAgIHsKK2RpZmYgLS1naXQgYS9lbGYvZGwtZGVwcy5jIGIvZWxmL2RsLWRlcHMuYworaW5kZXggZWVlMTQ2YS4uMWE0YjAwNCAxMDA2NDQKKy0tLSBhL2VsZi9kbC1kZXBzLmMKKysrKyBiL2VsZi9kbC1kZXBzLmMKK0BAIC0xMjcsNyArMTI3LDcgQEAgZW1wdHkgZHluYW1pYyBzdHJpbmcgdG9rZW4gc3Vic3RpdHV0aW9uIikpOwkJCQkgICAgICBcCisgCSAgICBlbHNlCQkJCQkJCSAgICAgIFwKKyAJICAgICAgewkJCQkJCQkJICAgICAgXAorIAkJLyogVGhpcyBpcyBmb3IgRFRfQVVYSUxJQVJZLiAgKi8JCQkgICAgICBcCistCQlpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMpKSAgIFwKKysJCWlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTKSkgICBcCisgCQkgIF9kbF9kZWJ1Z19wcmludGYgKE5fKCJcCisgY2Fubm90IGxvYWQgYXV4aWxpYXJ5IGAlcycgYmVjYXVzZSBvZiBlbXB0eSBkeW5hbWljIHN0cmluZyB0b2tlbiAiCSAgICAgIFwKKyAJCQkJCSAgICAic3Vic3RpdHV0aW9uXG4iKSwgX19zdHIpOwkgICAgICBcCitAQCAtMzAzLDcgKzMwMyw3IEBAIF9kbF9tYXBfb2JqZWN0X2RlcHMgKHN0cnVjdCBsaW5rX21hcCAqbWFwLAorIAkJYXJncy5uYW1lID0gbmFtZTsKKyAKKyAJCS8qIFNheSB0aGF0IHdlIGFyZSBhYm91dCB0byBsb2FkIGFuIGF1eGlsaWFyeSBsaWJyYXJ5LiAgKi8KKy0JCWlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUywKKysJCWlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTLAorIAkJCQkgICAgICAwKSkKKyAJCSAgX2RsX2RlYnVnX3ByaW50ZiAoImxvYWQgYXV4aWxpYXJ5IG9iamVjdD0lcyIKKyAJCQkJICAgICIgcmVxdWVzdGVkIGJ5IGZpbGU9JXNcbiIsCitAQCAtNTIwLDcgKzUyMCw3IEBAIF9kbF9tYXBfb2JqZWN0X2RlcHMgKHN0cnVjdCBsaW5rX21hcCAqbWFwLAorICAgICAgIHJ1bnAtPm1hcC0+bF9yZXNlcnZlZCA9IDA7CisgICAgIH0KKyAKKy0gIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfUFJFTElOSywgMCkgIT0gMAorKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1BSRUxJTkssIDApICE9IDAKKyAgICAgICAmJiBtYXAgPT0gR0woZGxfbnMpW0xNX0lEX0JBU0VdLl9uc19sb2FkZWQpCisgICAgIHsKKyAgICAgICAvKiBJZiB3ZSBhcmUgdG8gY29tcHV0ZSBjb25mbGljdHMsIHdlIGhhdmUgdG8gYnVpbGQgbG9jYWwgc2NvcGUKK2RpZmYgLS1naXQgYS9lbGYvZGwtZXJyb3IuYyBiL2VsZi9kbC1lcnJvci5jCitpbmRleCAwZmMzZmQ4Li5lYTgyZjRkIDEwMDY0NAorLS0tIGEvZWxmL2RsLWVycm9yLmMKKysrKyBiL2VsZi9kbC1lcnJvci5jCitAQCAtMTM5LDcgKzEzOSw3IEBAIGludGVybmFsX2Z1bmN0aW9uCisgX2RsX3NpZ25hbF9jZXJyb3IgKGludCBlcnJjb2RlLCBjb25zdCBjaGFyICpvYmpuYW1lLCBjb25zdCBjaGFyICpvY2NhdGlvbiwKKyAJCSAgIGNvbnN0IGNoYXIgKmVycnN0cmluZykKKyB7CistICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xSTyhkbF9kZWJ1Z19tYXNrKQorKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzaworIAkJCSYgfihETF9ERUJVR19TVEFUSVNUSUNTfERMX0RFQlVHX1BSRUxJTkspLCAwKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIiVzOiBlcnJvcjogJXM6ICVzICglcylcbiIsIG9iam5hbWUsIG9jY2F0aW9uLAorIAkJICAgICAgZXJyc3RyaW5nLCByZWNlaXZlciA/ICJjb250aW51ZWQiIDogImZhdGFsIik7CitkaWZmIC0tZ2l0IGEvZWxmL2RsLWZpbmkuYyBiL2VsZi9kbC1maW5pLmMKK2luZGV4IDZjZmU2NTEuLmY1OWY3ZmUgMTAwNjQ0CistLS0gYS9lbGYvZGwtZmluaS5jCisrKysgYi9lbGYvZGwtZmluaS5jCitAQCAtMjM0LDcgKzIzNCw3IEBAIF9kbF9maW5pICh2b2lkKQorIAkJICB8fCBsLT5sX2luZm9bRFRfRklOSV0gIT0gTlVMTCkKKyAJCXsKKyAJCSAgLyogV2hlbiBkZWJ1Z2dpbmcgcHJpbnQgYSBtZXNzYWdlIGZpcnN0LiAgKi8KKy0JCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk8oZGxfZGVidWdfbWFzaykKKysJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzaworIAkJCQkJJiBETF9ERUJVR19JTVBDQUxMUywgMCkpCisgCQkgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlxuY2FsbGluZyBmaW5pOiAlcyBbJWx1XVxuXG4iLAorIAkJCQkgICAgICBEU09fRklMRU5BTUUgKGwtPmxfbmFtZSksCitAQCAtMjg2LDcgKzI4Niw3IEBAIF9kbF9maW5pICh2b2lkKQorICAgICAgIGdvdG8gYWdhaW47CisgICAgIH0KKyAKKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfU1RBVElTVElDUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfU1RBVElTVElDUykpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcbnJ1bnRpbWUgbGlua2VyIHN0YXRpc3RpY3M6XG4iCisgCQkgICAgICAiICAgICAgICAgICBmaW5hbCBudW1iZXIgb2YgcmVsb2NhdGlvbnM6ICVsdVxuIgorIAkJICAgICAgImZpbmFsIG51bWJlciBvZiByZWxvY2F0aW9ucyBmcm9tIGNhY2hlOiAlbHVcbiIsCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWluaXQuYyBiL2VsZi9kbC1pbml0LmMKK2luZGV4IDJmODU3MzEuLmU0NmU4YjYgMTAwNjQ0CistLS0gYS9lbGYvZGwtaW5pdC5jCisrKysgYi9lbGYvZGwtaW5pdC5jCitAQCAtNDYsNyArNDYsNyBAQCBjYWxsX2luaXQgKHN0cnVjdCBsaW5rX21hcCAqbCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICoqZW52KQorICAgICByZXR1cm47CisgCisgICAvKiBQcmludCBhIGRlYnVnIG1lc3NhZ2UgaWYgd2FudGVkLiAgKi8KKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfSU1QQ0FMTFMpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0lNUENBTExTKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlxuY2FsbGluZyBpbml0OiAlc1xuXG4iLAorIAkJICAgICAgRFNPX0ZJTEVOQU1FIChsLT5sX25hbWUpKTsKKyAKK0BAIC05Niw3ICs5Niw3IEBAIF9kbF9pbml0IChzdHJ1Y3QgbGlua19tYXAgKm1haW5fbWFwLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnYpCisgICAgICAgRWxmVyhBZGRyKSAqYWRkcnM7CisgICAgICAgdW5zaWduZWQgaW50IGNudDsKKyAKKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0lNUENBTExTKSkKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfSU1QQ0FMTFMpKQorIAlfZGxfZGVidWdfcHJpbnRmICgiXG5jYWxsaW5nIHByZWluaXQ6ICVzXG5cbiIsCisgCQkJICBEU09fRklMRU5BTUUgKG1haW5fbWFwLT5sX25hbWUpKTsKKyAKK2RpZmYgLS1naXQgYS9lbGYvZGwtbG9hZC5jIGIvZWxmL2RsLWxvYWQuYworaW5kZXggZjY2NGY1MC4uOGMyODc0NCAxMDA2NDQKKy0tLSBhL2VsZi9kbC1sb2FkLmMKKysrKyBiL2VsZi9kbC1sb2FkLmMKK0BAIC05NDMsNyArOTQzLDcgQEAgX2RsX21hcF9vYmplY3RfZnJvbV9mZCAoY29uc3QgY2hhciAqbmFtZSwgaW50IGZkLCBzdHJ1Y3QgZmlsZWJ1ZiAqZmJwLAorICAgICB9CisgCisgICAvKiBQcmludCBkZWJ1Z2dpbmcgbWVzc2FnZS4gICovCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0ZJTEVTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19GSUxFUykpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJmaWxlPSVzIFslbHVdOyAgZ2VuZXJhdGluZyBsaW5rIG1hcFxuIiwgbmFtZSwgbnNpZCk7CisgCisgICAvKiBUaGlzIGlzIHRoZSBFTEYgaGVhZGVyLiAgV2UgcmVhZCBpdCBpbiBgb3Blbl92ZXJpZnknLiAgKi8KK0BAIC0xMzQ3LDcgKzEzNDcsNyBAQCBjYW5ub3QgZW5hYmxlIGV4ZWN1dGFibGUgc3RhY2sgYXMgc2hhcmVkIG9iamVjdCByZXF1aXJlcyIpOworIAorICAgbC0+bF9lbnRyeSArPSBsLT5sX2FkZHI7CisgCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0ZJTEVTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19GSUxFUykpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcCisgICBkeW5hbWljOiAweCUwKmx4ICBiYXNlOiAweCUwKmx4ICAgc2l6ZTogMHglMCpaeFxuXAorICAgICBlbnRyeTogMHglMCpseCAgcGhkcjogMHglMCpseCAgcGhudW06ICAgJSp1XG5cbiIsCitAQCAtMTc4OSw3ICsxNzg5LDcgQEAgb3Blbl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwgaW50IG1vZGUsCisgCisgICAgICAgLyogSWYgd2UgYXJlIGRlYnVnZ2luZyB0aGUgc2VhcmNoIGZvciBsaWJyYXJpZXMgcHJpbnQgdGhlIHBhdGgKKyAJIG5vdyBpZiBpdCBoYXNuJ3QgaGFwcGVuZWQgbm93LiAgKi8KKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMpCisgCSAgJiYgY3VycmVudF93aGF0ICE9IHRoaXNfZGlyLT53aGF0KQorIAl7CisgCSAgY3VycmVudF93aGF0ID0gdGhpc19kaXItPndoYXQ7CitAQCAtMTgxMCw3ICsxODEwLDcgQEAgb3Blbl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwgaW50IG1vZGUsCisgCSAgICAgLSBidWYpOworIAorIAkgIC8qIFByaW50IG5hbWUgd2UgdHJ5IGlmIHRoaXMgaXMgd2FudGVkLiAgKi8KKy0JICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMpKQorKwkgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTKSkKKyAJICAgIF9kbF9kZWJ1Z19wcmludGYgKCIgIHRyeWluZyBmaWxlPSVzXG4iLCBidWYpOworIAorIAkgIGZkID0gb3Blbl92ZXJpZnkgKGJ1ZiwgZmJwLCBsb2FkZXIsIHdoYXRjb2RlLCBtb2RlLAorQEAgLTE5NTUsNyArMTk1NSw3IEBAIF9kbF9tYXBfb2JqZWN0IChzdHJ1Y3QgbGlua19tYXAgKmxvYWRlciwgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgfQorIAorICAgLyogRGlzcGxheSBpbmZvcm1hdGlvbiBpZiB3ZSBhcmUgZGVidWdnaW5nLiAgKi8KKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfRklMRVMpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfRklMRVMpCisgICAgICAgJiYgbG9hZGVyICE9IE5VTEwpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKChtb2RlICYgX19SVExEX0NBTExNQVApID09IDAKKyAJCSAgICAgID8gIlxuZmlsZT0lcyBbJWx1XTsgIG5lZWRlZCBieSAlcyBbJWx1XVxuIgorQEAgLTE5OTcsNyArMTk5Nyw3IEBAIF9kbF9tYXBfb2JqZWN0IChzdHJ1Y3QgbGlua19tYXAgKmxvYWRlciwgY29uc3QgY2hhciAqbmFtZSwKKyAKKyAgICAgICBzaXplX3QgbmFtZWxlbiA9IHN0cmxlbiAobmFtZSkgKyAxOworIAorLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUykpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMpKQorIAlfZGxfZGVidWdfcHJpbnRmICgiZmluZCBsaWJyYXJ5PSVzIFslbHVdOyBzZWFyY2hpbmdcbiIsIG5hbWUsIG5zaWQpOworIAorICAgICAgIGZkID0gLTE7CitAQCAtMjExOSw3ICsyMTE5LDcgQEAgX2RsX21hcF9vYmplY3QgKHN0cnVjdCBsaW5rX21hcCAqbG9hZGVyLCBjb25zdCBjaGFyICpuYW1lLAorICNlbmRpZgorIAorICAgICAgIC8qIEFkZCBhbm90aGVyIG5ld2xpbmUgd2hlbiB3ZSBhcmUgdHJhY2luZyB0aGUgbGlicmFyeSBsb2FkaW5nLiAgKi8KKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMpKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTKSkKKyAJX2RsX2RlYnVnX3ByaW50ZiAoIlxuIik7CisgICAgIH0KKyAgIGVsc2UKK0BAIC0yMTUyLDcgKzIxNTIsNyBAQCBfZGxfbWFwX29iamVjdCAoc3RydWN0IGxpbmtfbWFwICpsb2FkZXIsIGNvbnN0IGNoYXIgKm5hbWUsCisgICBpZiAoX19nbGliY191bmxpa2VseSAoZmQgPT0gLTEpKQorICAgICB7CisgICAgICAgaWYgKHRyYWNlX21vZGUKKy0JICAmJiBfX2dsaWJjX2xpa2VseSAoKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19QUkVMSU5LKSA9PSAwKSkKKysJICAmJiBfX2dsaWJjX2xpa2VseSAoKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1BSRUxJTkspID09IDApKQorIAl7CisgCSAgLyogV2UgaGF2ZW4ndCBmb3VuZCBhbiBhcHByb3ByaWF0ZSBsaWJyYXJ5LiAgQnV0IHNpbmNlIHdlCisgCSAgICAgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgbGlzdCBvZiBsaWJyYXJpZXMgdGhpcyBpc24ndAorZGlmZiAtLWdpdCBhL2VsZi9kbC1sb29rdXAuYyBiL2VsZi9kbC1sb29rdXAuYworaW5kZXggMTFjYjQ0Yi4uNTg4YzNlNCAxMDA2NDQKKy0tLSBhL2VsZi9kbC1sb29rdXAuYworKysrIGIvZWxmL2RsLWxvb2t1cC5jCitAQCAtMzAyLDcgKzMwMiw3IEBAIGRvX2xvb2t1cF91bmlxdWUgKGNvbnN0IGNoYXIgKnVuZGVmX25hbWUsIHVpbnRfZmFzdDMyX3QgbmV3X2hhc2gsCisgCSBoYXNoIHRhYmxlLiAgKi8KKyAgICAgICBpZiAoX19nbGliY191bmxpa2VseSAodGFiLT5zaXplKSkKKyAJeworLQkgIGFzc2VydCAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1BSRUxJTkspOworKwkgIGFzc2VydCAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfUFJFTElOSyk7CisgCSAgZ290byBzdWNjZXNzOworIAl9CisgI2VuZGlmCitAQCAtMzc4LDcgKzM3OCw3IEBAIGRvX2xvb2t1cF94IChjb25zdCBjaGFyICp1bmRlZl9uYW1lLCB1aW50X2Zhc3QzMl90IG5ld19oYXNoLAorIAljb250aW51ZTsKKyAKKyAgICAgICAvKiBQcmludCBzb21lIGRlYnVnZ2luZyBpbmZvIGlmIHdhbnRlZC4gICovCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19TWU1CT0xTKSkKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfU1lNQk9MUykpCisgCV9kbF9kZWJ1Z19wcmludGYgKCJzeW1ib2w9JXM7ICBsb29rdXAgaW4gZmlsZT0lcyBbJWx1XVxuIiwKKyAJCQkgIHVuZGVmX25hbWUsIERTT19GSUxFTkFNRSAobWFwLT5sX25hbWUpLAorIAkJCSAgbWFwLT5sX25zKTsKK0BAIC03NTUsNyArNzU1LDcgQEAgYWRkX2RlcGVuZGVuY3kgKHN0cnVjdCBsaW5rX21hcCAqdW5kZWZfbWFwLCBzdHJ1Y3QgbGlua19tYXAgKm1hcCwgaW50IGZsYWdzKQorIAl9CisgCisgICAgICAgLyogRGlzcGxheSBpbmZvcm1hdGlvbiBpZiB3ZSBhcmUgZGVidWdnaW5nLiAgKi8KKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0ZJTEVTKSkKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfRklMRVMpKQorIAlfZGxfZGVidWdfcHJpbnRmICgiXAorIFxuZmlsZT0lcyBbJWx1XTsgIG5lZWRlZCBieSAlcyBbJWx1XSAocmVsb2NhdGlvbiBkZXBlbmRlbmN5KVxuXG4iLAorIAkJCSAgRFNPX0ZJTEVOQU1FIChtYXAtPmxfbmFtZSksCitAQCAtODU5LDcgKzg1OSw3IEBAIF9kbF9sb29rdXBfc3ltYm9sX3ggKGNvbnN0IGNoYXIgKnVuZGVmX25hbWUsIHN0cnVjdCBsaW5rX21hcCAqdW5kZWZfbWFwLAorICAgICB7CisgICAgICAgaWYgKCgqcmVmID09IE5VTEwgfHwgRUxGVyhTVF9CSU5EKSAoKCpyZWYpLT5zdF9pbmZvKSAhPSBTVEJfV0VBSykKKyAJICAmJiBza2lwX21hcCA9PSBOVUxMCistCSAgJiYgIShHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfVU5VU0VEKSkKKysJICAmJiAhKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1VOVVNFRCkpCisgCXsKKyAJICAvKiBXZSBjb3VsZCBmaW5kIG5vIHZhbHVlIGZvciBhIHN0cm9uZyByZWZlcmVuY2UuICAqLworIAkgIGNvbnN0IGNoYXIgKnJlZmVyZW5jZV9uYW1lID0gdW5kZWZfbWFwID8gdW5kZWZfbWFwLT5sX25hbWUgOiAiIjsKK0BAIC05MzUsNyArOTM1LDcgQEAgX2RsX2xvb2t1cF9zeW1ib2xfeCAoY29uc3QgY2hhciAqdW5kZWZfbmFtZSwgc3RydWN0IGxpbmtfbWFwICp1bmRlZl9tYXAsCisgICBpZiAoX19nbGliY191bmxpa2VseSAoY3VycmVudF92YWx1ZS5tLT5sX3VzZWQgPT0gMCkpCisgICAgIGN1cnJlbnRfdmFsdWUubS0+bF91c2VkID0gMTsKKyAKKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrCisgCQkJJiAoRExfREVCVUdfQklORElOR1N8RExfREVCVUdfUFJFTElOSykpKQorICAgICBfZGxfZGVidWdfYmluZGluZ3MgKHVuZGVmX25hbWUsIHVuZGVmX21hcCwgcmVmLAorIAkJCSZjdXJyZW50X3ZhbHVlLCB2ZXJzaW9uLCB0eXBlX2NsYXNzLCBwcm90ZWN0ZWQpOworQEAgLTEwMDAsNyArMTAwMCw3IEBAIF9kbF9kZWJ1Z19iaW5kaW5ncyAoY29uc3QgY2hhciAqdW5kZWZfbmFtZSwgc3RydWN0IGxpbmtfbWFwICp1bmRlZl9tYXAsCisgeworICAgY29uc3QgY2hhciAqcmVmZXJlbmNlX25hbWUgPSB1bmRlZl9tYXAtPmxfbmFtZTsKKyAKKy0gIGlmIChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfQklORElOR1MpCisrICBpZiAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfQklORElOR1MpCisgICAgIHsKKyAgICAgICBfZGxfZGVidWdfcHJpbnRmICgiYmluZGluZyBmaWxlICVzIFslbHVdIHRvICVzIFslbHVdOiAlcyBzeW1ib2wgYCVzJyIsCisgCQkJRFNPX0ZJTEVOQU1FIChyZWZlcmVuY2VfbmFtZSksCitAQCAtMTAxNCw3ICsxMDE0LDcgQEAgX2RsX2RlYnVnX2JpbmRpbmdzIChjb25zdCBjaGFyICp1bmRlZl9uYW1lLCBzdHJ1Y3QgbGlua19tYXAgKnVuZGVmX21hcCwKKyAJX2RsX2RlYnVnX3ByaW50Zl9jICgiXG4iKTsKKyAgICAgfQorICNpZmRlZiBTSEFSRUQKKy0gIGlmIChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfUFJFTElOSykKKysgIGlmIChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19QUkVMSU5LKQorICAgICB7CisgICAgICAgaW50IGNvbmZsaWN0ID0gMDsKKyAgICAgICBzdHJ1Y3Qgc3ltX3ZhbCB2YWwgPSB7IE5VTEwsIE5VTEwgfTsKK2RpZmYgLS1naXQgYS9lbGYvZGwtb2JqZWN0LmMgYi9lbGYvZGwtb2JqZWN0LmMKK2luZGV4IDFkNThiYmMuLjkzOGEyNTcgMTAwNjQ0CistLS0gYS9lbGYvZGwtb2JqZWN0LmMKKysrKyBiL2VsZi9kbC1vYmplY3QuYworQEAgLTk4LDcgKzk4LDcgQEAgX2RsX25ld19vYmplY3QgKGNoYXIgKnJlYWxuYW1lLCBjb25zdCBjaGFyICpsaWJuYW1lLCBpbnQgdHlwZSwKKyAgIG5ldy0+bF90eXBlID0gdHlwZTsKKyAgIC8qIElmIHdlIHNldCB0aGUgYml0IG5vdyBzaW5jZSB3ZSBrbm93IGl0IGlzIG5ldmVyIHVzZWQgd2UgYXZvaWQKKyAgICAgIGRpcnR5aW5nIHRoZSBjYWNoZSBsaW5lIGxhdGVyLiAgKi8KKy0gIGlmICgoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1VOVVNFRCkgPT0gMCkKKysgIGlmICgoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfVU5VU0VEKSA9PSAwKQorICAgICBuZXctPmxfdXNlZCA9IDE7CisgICBuZXctPmxfbG9hZGVyID0gbG9hZGVyOworICNpZiBOT19UTFNfT0ZGU0VUICE9IDAKK2RpZmYgLS1naXQgYS9lbGYvZGwtb3Blbi5jIGIvZWxmL2RsLW9wZW4uYworaW5kZXggMmRiMWMwMi4uMTI4ODYwNCAxMDA2NDQKKy0tLSBhL2VsZi9kbC1vcGVuLmMKKysrKyBiL2VsZi9kbC1vcGVuLmMKK0BAIC0xNDcsNyArMTQ3LDcgQEAgYWRkX3RvX2dsb2JhbCAoc3RydWN0IGxpbmtfbWFwICpuZXcpCisgCSAgbnMtPl9uc19tYWluX3NlYXJjaGxpc3QtPnJfbGlzdFtuZXdfbmxpc3QrK10gPSBtYXA7CisgCisgCSAgLyogV2UgbW9kaWZ5IHRoZSBnbG9iYWwgc2NvcGUuICBSZXBvcnQgdGhpcy4gICovCistCSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19TQ09QRVMpKQorKwkgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19TQ09QRVMpKQorIAkgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlxuYWRkICVzIFslbHVdIHRvIGdsb2JhbCBzY29wZVxuIiwKKyAJCQkgICAgICBtYXAtPmxfbmFtZSwgbWFwLT5sX25zKTsKKyAJfQorQEAgLTI1MSw3ICsyNTEsNyBAQCBkbF9vcGVuX3dvcmtlciAodm9pZCAqYSkKKyAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChuZXctPmxfc2VhcmNobGlzdC5yX2xpc3QgIT0gTlVMTCkpCisgICAgIHsKKyAgICAgICAvKiBMZXQgdGhlIHVzZXIga25vdyBhYm91dCB0aGUgb3BlbmNvdW50LiAgKi8KKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0ZJTEVTKSkKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfRklMRVMpKQorIAlfZGxfZGVidWdfcHJpbnRmICgib3BlbmluZyBmaWxlPSVzIFslbHVdOyBkaXJlY3Rfb3BlbmNvdW50PSV1XG5cbiIsCisgCQkJICBuZXctPmxfbmFtZSwgbmV3LT5sX25zLCBuZXctPmxfZGlyZWN0X29wZW5jb3VudCk7CisgCitAQCAtMzAyLDcgKzMwMiw3IEBAIGRsX29wZW5fd29ya2VyICh2b2lkICphKQorICAgTElCQ19QUk9CRSAobWFwX2NvbXBsZXRlLCAzLCBhcmdzLT5uc2lkLCByLCBuZXcpOworIAorICAgLyogUHJpbnQgc2NvcGUgaW5mb3JtYXRpb24uICAqLworLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19TQ09QRVMpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1NDT1BFUykpCisgICAgIF9kbF9zaG93X3Njb3BlIChuZXcsIDApOworIAorICAgLyogT25seSBkbyBsYXp5IHJlbG9jYXRpb24gaWYgYExEX0JJTkRfTk9XJyBpcyBub3Qgc2V0LiAgKi8KK0BAIC01MTksNyArNTE5LDcgQEAgZGxfb3Blbl93b3JrZXIgKHZvaWQgKmEpCisgCX0KKyAKKyAgICAgICAvKiBQcmludCBzY29wZSBpbmZvcm1hdGlvbi4gICovCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19TQ09QRVMpKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19TQ09QRVMpKQorIAlfZGxfc2hvd19zY29wZSAoaW1hcCwgZnJvbV9zY29wZSk7CisgICAgIH0KKyAKK0BAIC01NzcsNyArNTc3LDcgQEAgVExTIGdlbmVyYXRpb24gY291bnRlciB3cmFwcGVkISAgUGxlYXNlIHJlcG9ydCB0aGlzLiIpKTsKKyAjZW5kaWYKKyAKKyAgIC8qIExldCB0aGUgdXNlciBrbm93IGFib3V0IHRoZSBvcGVuY291bnQuICAqLworLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19GSUxFUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfRklMRVMpKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgib3BlbmluZyBmaWxlPSVzIFslbHVdOyBkaXJlY3Rfb3BlbmNvdW50PSV1XG5cbiIsCisgCQkgICAgICBuZXctPmxfbmFtZSwgbmV3LT5sX25zLCBuZXctPmxfZGlyZWN0X29wZW5jb3VudCk7CisgfQorZGlmZiAtLWdpdCBhL2VsZi9kbC1yZWxvYy5jIGIvZWxmL2RsLXJlbG9jLmMKK2luZGV4IDYxMjUyZDcuLjRjODM4MTUgMTAwNjQ0CistLS0gYS9lbGYvZGwtcmVsb2MuYworKysrIGIvZWxmL2RsLXJlbG9jLmMKK0BAIC0xNzgsNyArMTc4LDcgQEAgX2RsX3JlbG9jYXRlX29iamVjdCAoc3RydWN0IGxpbmtfbWFwICpsLCBzdHJ1Y3Qgcl9zY29wZV9lbGVtICpzY29wZVtdLAorICAgICAgICYmIF9fYnVpbHRpbl9leHBlY3QgKGwtPmxfaW5mb1tEVF9CSU5EX05PV10gIT0gTlVMTCwgMCkpCisgICAgIGxhenkgPSAwOworIAorLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19SRUxPQykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfUkVMT0MpKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiXG5yZWxvY2F0aW9uIHByb2Nlc3Npbmc6ICVzJXNcbiIsCisgCQkgICAgICBEU09fRklMRU5BTUUgKGwtPmxfbmFtZSksIGxhenkgPyAiIChsYXp5KSIgOiAiIik7CisgCitkaWZmIC0tZ2l0IGEvZWxmL2RsLXZlcnNpb24uYyBiL2VsZi9kbC12ZXJzaW9uLmMKK2luZGV4IGY2ZTVjZDkuLjMyMDYyOGMgMTAwNjQ0CistLS0gYS9lbGYvZGwtdmVyc2lvbi5jCisrKysgYi9lbGYvZGwtdmVyc2lvbi5jCitAQCAtODIsNyArODIsNyBAQCBtYXRjaF9zeW1ib2wgKGNvbnN0IGNoYXIgKm5hbWUsIExtaWRfdCBucywgRWxmVyhXb3JkKSBoYXNoLCBjb25zdCBjaGFyICpzdHJpbmcsCisgICBpbnQgcmVzdWx0ID0gMDsKKyAKKyAgIC8qIERpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB3ZSBhcmUgZG9pbmcgd2hpbGUgZGVidWdnaW5nLiAgKi8KKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfVkVSU0lPTlMpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1ZFUlNJT05TKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlwKKyBjaGVja2luZyBmb3IgdmVyc2lvbiBgJXMnIGluIGZpbGUgJXMgWyVsdV0gcmVxdWlyZWQgYnkgZmlsZSAlcyBbJWx1XVxuIiwKKyAJCSAgICAgIHN0cmluZywgRFNPX0ZJTEVOQU1FIChtYXAtPmxfbmFtZSksCitkaWZmIC0tZ2l0IGEvZWxmL2dldC1keW5hbWljLWluZm8uaCBiL2VsZi9nZXQtZHluYW1pYy1pbmZvLmgKK2luZGV4IGRjODM1OWQuLjc3NzRmZGEgMTAwNjQ0CistLS0gYS9lbGYvZ2V0LWR5bmFtaWMtaW5mby5oCisrKysgYi9lbGYvZ2V0LWR5bmFtaWMtaW5mby5oCitAQCAtMTY2LDcgKzE2Niw3IEBAIGVsZl9nZXRfZHluYW1pY19pbmZvIChzdHJ1Y3QgbGlua19tYXAgKmwsIEVsZlcoRHluKSAqdGVtcCkKKyAJIHRoZW0uIFRoZXJlZm9yZSB0byBhdm9pZCBicmVha2luZyBleGlzdGluZyBhcHBsaWNhdGlvbnMgdGhlCisgCSBiZXN0IHdlIGNhbiBkbyBpcyBhZGQgYSB3YXJuaW5nIGR1cmluZyBkZWJ1Z2dpbmcgd2l0aCB0aGUKKyAJIGludGVudCBvZiBub3RpZnlpbmcgdGhlIHVzZXIgb2YgdGhlIHByb2JsZW0uICAqLworLSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfRklMRVMsIDApCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0ZJTEVTLCAwKQorIAkgICYmIGwtPmxfZmxhZ3NfMSAmIH5EVF8xX1NVUFBPUlRFRF9NQVNLKQorIAlfZGxfZGVidWdfcHJpbnRmICgiXG5XQVJOSU5HOiBVbnN1cHBvcnRlZCBmbGFnIHZhbHVlKHMpIG9mIDB4JXggaW4gRFRfRkxBR1NfMS5cbiIsCisgCQkJICBsLT5sX2ZsYWdzXzEgJiB+RFRfMV9TVVBQT1JURURfTUFTSyk7CitkaWZmIC0tZ2l0IGEvZWxmL3J0bGQuYyBiL2VsZi9ydGxkLmMKK2luZGV4IGZjM2EyZGIuLjU5YzQ2MzcgMTAwNjQ0CistLS0gYS9lbGYvcnRsZC5jCisrKysgYi9lbGYvcnRsZC5jCitAQCAtMzIzLDcgKzMyMyw3IEBAIF9kbF9zdGFydF9maW5hbCAodm9pZCAqYXJnLCBzdHJ1Y3QgZGxfc3RhcnRfZmluYWxfaW5mbyAqaW5mbykKKyAgICAgfQorICNlbmRpZgorIAorLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19TVEFUSVNUSUNTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19TVEFUSVNUSUNTKSkKKyAgICAgeworICNpZm5kZWYgSFBfVElNSU5HX05PTkFWQUlMCisgICAgICAgcHJpbnRfc3RhdGlzdGljcyAoJnJ0bGRfdG90YWxfdGltZSk7CitAQCAtMTcwMSw3ICsxNzAxLDcgQEAgRVJST1I6IGxkLnNvOiBvYmplY3QgJyVzJyBjYW5ub3QgYmUgbG9hZGVkIGFzIGF1ZGl0IGludGVyZmFjZTogJXM7IGlnbm9yZWQuXG4iLAorIAkgYWZ0ZXIgcmVsb2NhdGlvbi4gICovCisgICAgICAgc3RydWN0IGxpbmtfbWFwICpsOworIAorLSAgICAgIGlmIChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfUFJFTElOSykKKysgICAgICBpZiAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfUFJFTElOSykKKyAJeworIAkgIHN0cnVjdCByX3Njb3BlX2VsZW0gKnNjb3BlID0gJm1haW5fbWFwLT5sX3NlYXJjaGxpc3Q7CisgCitAQCAtMTczMSw3ICsxNzMxLDcgQEAgRVJST1I6IGxkLnNvOiBvYmplY3QgJyVzJyBjYW5ub3QgYmUgbG9hZGVkIGFzIGF1ZGl0IGludGVyZmFjZTogJXM7IGlnbm9yZWQuXG4iLAorIAkJX2RsX3ByaW50ZiAoIlxuIik7CisgCSAgICB9CisgCX0KKy0gICAgICBlbHNlIGlmIChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfVU5VU0VEKQorKyAgICAgIGVsc2UgaWYgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1VOVVNFRCkKKyAJeworIAkgIC8qIExvb2sgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBtYWluIGV4ZWN1dGFibGUKKyAJICAgICBhbmQgZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZW0gaXMgbm90IGFjdHVhbGx5CitAQCAtMTgzOSw3ICsxODM5LDcgQEAgRVJST1I6IGxkLnNvOiBvYmplY3QgJyVzJyBjYW5ub3QgYmUgbG9hZGVkIGFzIGF1ZGl0IGludGVyZmFjZTogJXM7IGlnbm9yZWQuXG4iLAorIAkJICAgIH0KKyAJCX0KKyAKKy0JICAgICAgaWYgKChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfUFJFTElOSykKKysJICAgICAgaWYgKChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19QUkVMSU5LKQorIAkJICAmJiBydGxkX211bHRpcGxlX3JlZikKKyAJCXsKKyAJCSAgLyogTWFyayB0aGUgbGluayBtYXAgYXMgbm90IHlldCByZWxvY2F0ZWQgYWdhaW4uICAqLworQEAgLTE5NzIsNyArMTk3Miw3IEBAIEVSUk9SOiBsZC5zbzogb2JqZWN0ICclcycgY2Fubm90IGJlIGxvYWRlZCBhcyBhdWRpdCBpbnRlcmZhY2U6ICVzOyBpZ25vcmVkLlxuIiwKKyAgICAgICBpZiAocl9saXN0ID09IHJfbGlzdGVuZCAmJiBsaWJsaXN0ID09IGxpYmxpc3RlbmQpCisgCXByZWxpbmtlZCA9IHRydWU7CisgCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTKSkKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUykpCisgCV9kbF9kZWJ1Z19wcmludGYgKCJcbnByZWxpbmsgY2hlY2tpbmc6ICVzXG4iLAorIAkJCSAgcHJlbGlua2VkID8gIm9rIiA6ICJmYWlsZWQiKTsKKyAgICAgfQorQEAgLTE5OTAsNyArMTk5MCw3IEBAIEVSUk9SOiBsZC5zbzogb2JqZWN0ICclcycgY2Fubm90IGJlIGxvYWRlZCBhcyBhdWRpdCBpbnRlcmZhY2U6ICVzOyBpZ25vcmVkLlxuIiwKKyAgIEdMUk8oZGxfaW5pdF9hbGxfZGlycykgPSBHTChkbF9hbGxfZGlycyk7CisgCisgICAvKiBQcmludCBzY29wZSBpbmZvcm1hdGlvbi4gICovCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1NDT1BFUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfU0NPUEVTKSkKKyAgICAgeworICAgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcbkluaXRpYWwgb2JqZWN0IHNjb3Blc1xuIik7CisgCitAQCAtMjI2NSw3ICsyMjY1LDcgQEAgcHJvY2Vzc19kbF9kZWJ1ZyAoY29uc3QgY2hhciAqZGxfZGVidWcpCisgCSAgICBpZiAoZGVib3B0c1tjbnRdLmxlbiA9PSBsZW4KKyAJCSYmIG1lbWNtcCAoZGxfZGVidWcsIGRlYm9wdHNbY250XS5uYW1lLCBsZW4pID09IDApCisgCSAgICAgIHsKKy0JCUdMUk8oZGxfZGVidWdfbWFzaykgfD0gZGVib3B0c1tjbnRdLm1hc2s7CisrCQlHTFJPX2RsX2RlYnVnX21hc2sgfD0gZGVib3B0c1tjbnRdLm1hc2s7CisgCQlhbnlfZGVidWcgPSAxOworIAkJYnJlYWs7CisgCSAgICAgIH0KK0BAIC0yMjg2LDcgKzIyODYsNyBAQCB3YXJuaW5nOiBkZWJ1ZyBvcHRpb24gYCVzJyB1bmtub3duOyB0cnkgTERfREVCVUc9aGVscFxuIiwgY29weSk7CisgICAgICAgKytkbF9kZWJ1ZzsKKyAgICAgfQorIAorLSAgaWYgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19VTlVTRUQpCisrICBpZiAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfVU5VU0VEKQorICAgICB7CisgICAgICAgLyogSW4gb3JkZXIgdG8gZ2V0IGFuIGFjY3VyYXRlIHBpY3R1cmUgb2Ygd2hldGhlciBhIHBhcnRpY3VsYXIKKyAJIERUX05FRURFRCBlbnRyeSBpcyBhY3R1YWxseSB1c2VkIHdlIGhhdmUgdG8gcHJvY2VzcyBib3RoCitAQCAtMjI5NCw3ICsyMjk0LDcgQEAgd2FybmluZzogZGVidWcgb3B0aW9uIGAlcycgdW5rbm93bjsgdHJ5IExEX0RFQlVHPWhlbHBcbiIsIGNvcHkpOworICAgICAgIEdMUk8oZGxfbGF6eSkgPSAwOworICAgICB9CisgCistICBpZiAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0hFTFApCisrICBpZiAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfSEVMUCkKKyAgICAgeworICAgICAgIHNpemVfdCBjbnQ7CisgCitAQCAtMjQ5OSw3ICsyNDk5LDcgQEAgcHJvY2Vzc19lbnZ2YXJzIChlbnVtIG1vZGUgKm1vZGVwKQorIAkgICAgICBtb2RlID0gdHJhY2U7CisgCSAgICAgIEdMUk8oZGxfdmVyYm9zZSkgPSAxOworICNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworLQkgICAgICBHTFJPKGRsX2RlYnVnX21hc2spIHw9IERMX0RFQlVHX1BSRUxJTks7CisrCSAgICAgIEdMUk9fZGxfZGVidWdfbWFzayB8PSBETF9ERUJVR19QUkVMSU5LOworICNlbmRpZgorIAkgICAgICBHTFJPKGRsX3RyYWNlX3ByZWxpbmspID0gJmVudmxpbmVbMTddOworIAkgICAgfQorQEAgLTI1NDgsNyArMjU0OCw3IEBAIHByb2Nlc3NfZW52dmFycyAoZW51bSBtb2RlICptb2RlcCkKKyAJeworIAkgIHVuc2V0ZW52ICgiTUFMTE9DX0NIRUNLXyIpOworICNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworLQkgIEdMUk8oZGxfZGVidWdfbWFzaykgPSAwOworKwkgIEdMUk9fZGxfZGVidWdfbWFzayA9IDA7CisgI2VuZGlmCisgCX0KKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI3LWVnbGliYy11c2Utb3B0aW9uLWdyb3Vwcy1Db25kaXRpb25hbGx5LWV4Y2x1ZGUtYy10ZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjctZWdsaWJjLXVzZS1vcHRpb24tZ3JvdXBzLUNvbmRpdGlvbmFsbHktZXhjbHVkZS1jLXRlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTA2MTY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI3LWVnbGliYy11c2Utb3B0aW9uLWdyb3Vwcy1Db25kaXRpb25hbGx5LWV4Y2x1ZGUtYy10ZXMucGF0Y2gKQEAgLTAsMCArMSwxNDUgQEAKK0Zyb20gZTk4Nzc5YWE1NmZhZTAzNDZkZmYyZDBiNzJhY2FkZDBlYWYwMTg5MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI3IE1heSAyMDE1IDE2OjEwOjUwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMjcvMjddIGVnbGliYy11c2Utb3B0aW9uLWdyb3VwczogQ29uZGl0aW9uYWxseSBleGNsdWRlIGMrKworIHRlc3RzCisKKyAgICBTb21lIHRlc3QgcHJvZ3JhbXMgd3JpdHRlbiBpbiBjKysgYXJlIHN0aWxsIGluY2x1ZGVkIGluIHNwaXRlIG9mCisgICAgImxpYmMtY3h4LXRlc3RzIiBiZWluZyBvbWl0dGVkIGZyb20gRElTVFJPX0ZFQVRVUkVTX0xJQkMuCisgICAgQWxsIC5jYyBwcm9ncmFtcyBhcmUgY29tcGlsZWQgd2l0aCBnKysuCisgICAgZysrIGF1dG9tYXRpY2FsbHkgc3BlY2lmaWVzIGxpbmtpbmcgYWdhaW5zdCB0aGUgQysrIGxpYnJhcnkuCisgICAgVGhpcyBwYXRjaCBjb25kaXRpb25hbGx5IGV4Y2x1ZGVzIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXMgd2VsbDoKKworICAgICAgYnVnLWF0ZXhpdDMtbGliLmNjCisgICAgICB0c3QtY2FuY2VsMjQuY2MKKyAgICAgIHRzdC1jYW5jZWwyNC1zdGF0aWMuY2MKKyAgICAgIHRzdC11bmlxdWUzbGliLmNjCisgICAgICB0c3QtdW5pcXVlM2xpYjIuY2MKKyAgICAgIHRzdC11bmlxdWU0bGliLmNjCisgICAgICB0c3QtdW5pcXVlMy5jYworICAgICAgdHN0LXVuaXF1ZTQuY2MKKworICAgIFRlc3RlZCB3aXRoIERJU1RST19GRUFUVVJFU19MSUJDX3JlbW92ZSA9ICIgbGliYy1jeHgtdGVzdHMiCisKKyAgICBbWU9DVE8gIzcwMDNdCisKK1NpZ25lZC1vZmYtYnk6IEp1cm8gQnlzdHJpY2t5IDxqdXJvLmJ5c3RyaWNreUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZGxmY24vTWFrZWZpbGUgfCAgOCArKysrKystLQorIGVsZi9NYWtlZmlsZSAgIHwgMTkgKysrKysrKysrKysrKystLS0tLQorIG5wdGwvTWFrZWZpbGUgIHwgMTIgKysrKysrKysrKy0tCisgMyBmaWxlcyBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGxmY24vTWFrZWZpbGUgYi9kbGZjbi9NYWtlZmlsZQoraW5kZXggMzgyNzYwNy4uOTIwYmQ1OCAxMDA2NDQKKy0tLSBhL2RsZmNuL01ha2VmaWxlCisrKysgYi9kbGZjbi9NYWtlZmlsZQorQEAgLTM5LDE2ICszOSwyMCBAQCBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorIHRlc3RzID0gZ2xyZWZtYWluIGZhaWx0ZXN0IHRzdC1kbGFkZHIgZGVmYXVsdCBlcnJtc2cxIHRzdGN4YWF0ZXhpdCBcCisgCWJ1Zy1kbG9wZW4xIGJ1Zy1kbHN5bTEgdHN0LWRsaW5mbyBidWctYXRleGl0MSBidWctYXRleGl0MiBcCisgCXRzdGF0ZXhpdCBidWctZGwtbGVhZiB0c3QtcmVjLWRsb3BlbgorLWVuZGlmCistCisgdGVzdHMtJChPUFRJT05fRUdMSUJDX0NYWF9URVNUUykgKz0gYnVnLWF0ZXhpdDMKKyAKKytlbmRpZgorKworIG1vZHVsZXMtbmFtZXMgPSBnbHJlZmxpYjEgZ2xyZWZsaWIyIGdscmVmbGliMyBmYWlsdGVzdG1vZCBkZWZhdWx0bW9kMSBcCisgCQlkZWZhdWx0bW9kMiBlcnJtc2cxbW9kIG1vZGF0ZXhpdCBtb2RjeGFhdGV4aXQgXAorIAkJYnVnLWRsc3ltMS1saWIxIGJ1Zy1kbHN5bTEtbGliMiBidWctYXRleGl0MS1saWIgXAorIAkJYnVnLWF0ZXhpdDItbGliIGJ1Zy1kbC1sZWFmLWxpYiBcCisgCQlidWctZGwtbGVhZi1saWItY2IgbW9kZHVtbXkxIG1vZGR1bW15MgorIAorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0NYWF9URVNUUykpCisrbW9kdWxlcy1uYW1lcyArPSBidWctYXRleGl0My1saWIKKytlbmRpZgorKworIGZhaWx0ZXN0bW9kLnNvLW5vLXotZGVmcyA9IHllcworIGdscmVmbGliMi5zby1uby16LWRlZnMgPSB5ZXMKKyBlcnJtc2cxbW9kLnNvLW5vLXotZGVmcyA9IHllcworZGlmZiAtLWdpdCBhL2VsZi9NYWtlZmlsZSBiL2VsZi9NYWtlZmlsZQoraW5kZXggNzFhMThhMS4uMjZmZTNjNSAxMDA2NDQKKy0tLSBhL2VsZi9NYWtlZmlsZQorKysrIGIvZWxmL01ha2VmaWxlCitAQCAtMTcsNiArMTcsOCBAQAorIAorICMgTWFrZWZpbGUgZm9yIGVsZiBzdWJkaXJlY3Rvcnkgb2YgR05VIEMgTGlicmFyeS4KKyAKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCQk6PSBlbGYKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0xNDUsMTIgKzE0NywxNSBAQCB0ZXN0cyArPSBsb2FkdGVzdCByZXN0ZXN0MSBwcmVsb2FkdGVzdCBsb2FkZmFpbCBtdWx0aWxvYWQgb3JpZ3Rlc3QgcmVzb2x2ZmFpbCBcCisgCSB1bmxvYWQzIHVubG9hZDQgdW5sb2FkNSB1bmxvYWQ2IHVubG9hZDcgdW5sb2FkOCB0c3QtZ2xvYmFsMSBvcmRlcjIgXAorIAkgdHN0LWF1ZGl0MSB0c3QtYXVkaXQyIHRzdC1hdWRpdDggdHN0LWF1ZGl0OSBcCisgCSB0c3Qtc3RhY2tndWFyZDEgdHN0LWFkZHIxIHRzdC10aHJsb2NrIFwKKy0JIHRzdC11bmlxdWUxIHRzdC11bmlxdWUyICQoaWYgJChDWFgpLHRzdC11bmlxdWUzIHRzdC11bmlxdWU0IFwKKy0JIHRzdC1ub2RlbGV0ZSkgXAorKwkgdHN0LXVuaXF1ZTEgdHN0LXVuaXF1ZTIgXAorIAkgdHN0LWluaXRvcmRlciB0c3QtaW5pdG9yZGVyMiB0c3QtcmVsc29ydDEgdHN0LW51bGwtYXJndiBcCisgCSB0c3QtcHRyZ3VhcmQxIHRzdC10bHNhbGlnbiB0c3QtdGxzYWxpZ24tZXh0ZXJuIHRzdC1ub2RlbGV0ZS1vcGVuZWQgXAorIAkgdHN0LW5vZGVsZXRlMgorICMJIHJlbGRlcDkKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMpKQorK3Rlc3RzICs9ICQoaWYgJChDWFgpLHRzdC11bmlxdWUzIHRzdC11bmlxdWU0IHRzdC1ub2RlbGV0ZSkKKytlbmRpZgorKworIGlmZXEgKCQoYnVpbGQtaGFyZGNvZGVkLXBhdGgtaW4tdGVzdHMpLHllcykKKyB0ZXN0cyArPSB0c3QtZGxvcGVuLWFvdXQKKyBMREZMQUdTLXRzdC1kbG9wZW4tYW91dCA9ICQobm8tcGllLWxkZmxhZykKK0BAIC0yMDksOSArMjE0LDYgQEAgbW9kdWxlcy1uYW1lcyA9IHRlc3RvYmoxIHRlc3RvYmoyIHRlc3RvYmozIHRlc3RvYmo0IHRlc3RvYmo1IHRlc3RvYmo2IFwKKyAJCXRzdC11bmlxdWUxbW9kMSB0c3QtdW5pcXVlMW1vZDIgXAorIAkJdHN0LXVuaXF1ZTJtb2QxIHRzdC11bmlxdWUybW9kMiBcCisgCQl0c3QtYXVkaXRtb2Q5YSB0c3QtYXVkaXRtb2Q5YiBcCistCQkkKGlmICQoQ1hYKSx0c3QtdW5pcXVlM2xpYiB0c3QtdW5pcXVlM2xpYjIgdHN0LXVuaXF1ZTRsaWIgXAorLQkJICB0c3Qtbm9kZWxldGUtdW5pcXVlbW9kIHRzdC1ub2RlbGV0ZS1ydGxkbW9kIFwKKy0JCSAgdHN0LW5vZGVsZXRlLXptb2QpIFwKKyAJCXRzdC1pbml0b3JkZXJhMSB0c3QtaW5pdG9yZGVyYjEgXAorIAkJdHN0LWluaXRvcmRlcmEyIHRzdC1pbml0b3JkZXJiMiBcCisgCQl0c3QtaW5pdG9yZGVyYTMgdHN0LWluaXRvcmRlcmE0IFwKK0BAIC0yMjAsNiArMjIyLDEzIEBAIG1vZHVsZXMtbmFtZXMgPSB0ZXN0b2JqMSB0ZXN0b2JqMiB0ZXN0b2JqMyB0ZXN0b2JqNCB0ZXN0b2JqNSB0ZXN0b2JqNiBcCisgCQl0c3QtcmVsc29ydDFtb2QxIHRzdC1yZWxzb3J0MW1vZDIgdHN0LWFycmF5MmRlcCBcCisgCQl0c3QtYXJyYXk1ZGVwIHRzdC1udWxsLWFyZ3YtbGliIFwKKyAJCXRzdC10bHNhbGlnbi1saWIgdHN0LW5vZGVsZXRlLW9wZW5lZC1saWIgdHN0LW5vZGVsZXRlMm1vZAorKworK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0NYWF9URVNUUykpCisrbW9kdWxlcy1uYW1lcyArPSAkKGlmICQoQ1hYKSx0c3QtdW5pcXVlM2xpYiB0c3QtdW5pcXVlM2xpYjIgdHN0LXVuaXF1ZTRsaWIgXAorKwkJICB0c3Qtbm9kZWxldGUtdW5pcXVlbW9kIHRzdC1ub2RlbGV0ZS1ydGxkbW9kIFwKKysJCSAgdHN0LW5vZGVsZXRlLXptb2QpCisrZW5kaWYKKysKKyBpZmVxICh5ZXMsJChoYXZlLXByb3RlY3RlZC1kYXRhKSkKKyBtb2R1bGVzLW5hbWVzICs9IHRzdC1wcm90ZWN0ZWQxbW9kYSB0c3QtcHJvdGVjdGVkMW1vZGIKKyB0ZXN0cyArPSB0c3QtcHJvdGVjdGVkMWEgdHN0LXByb3RlY3RlZDFiCitkaWZmIC0tZ2l0IGEvbnB0bC9NYWtlZmlsZSBiL25wdGwvTWFrZWZpbGUKK2luZGV4IDU5NmNhM2MuLjUwYTcwOGIgMTAwNjQ0CistLS0gYS9ucHRsL01ha2VmaWxlCisrKysgYi9ucHRsL01ha2VmaWxlCitAQCAtMzkwLDEyICszOTAsMjAgQEAgbGluay1saWJjLXN0YXRpYyA6PSAkKGNvbW1vbi1vYmpwZngpbGliYy5hICQoc3RhdGljLWdudWxpYikgXAorIAkJICAgICQoY29tbW9uLW9ianBmeClsaWJjLmEKKyAKKyB0ZXN0cy1zdGF0aWMgKz0gdHN0LWxvY2FsZTEgdHN0LWxvY2FsZTIgdHN0LXN0YWNrZ3VhcmQxLXN0YXRpYyBcCistCQl0c3QtY2FuY2VsMjEtc3RhdGljIHRzdC1jYW5jZWwyNC1zdGF0aWMgdHN0LWNvbmQ4LXN0YXRpYyBcCisrCQl0c3QtY2FuY2VsMjEtc3RhdGljIHRzdC1jb25kOC1zdGF0aWMgXAorIAkJdHN0LW11dGV4OC1zdGF0aWMgdHN0LW11dGV4cGk4LXN0YXRpYyB0c3Qtc2VtMTEtc3RhdGljIFwKKyAJCXRzdC1zZW0xMi1zdGF0aWMKKy10ZXN0cyArPSB0c3Qtc3RhY2tndWFyZDEtc3RhdGljIHRzdC1jYW5jZWwyMS1zdGF0aWMgdHN0LWNhbmNlbDI0LXN0YXRpYyBcCisrCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfQ1hYX1RFU1RTKSkKKyt0ZXN0cy1zdGF0aWMgKz0gdHN0LWNhbmNlbDI0LXN0YXRpYworK2VuZGlmCisrCisrdGVzdHMgKz0gdHN0LXN0YWNrZ3VhcmQxLXN0YXRpYyB0c3QtY2FuY2VsMjEtc3RhdGljIFwKKyAJIHRzdC1jb25kOC1zdGF0aWMgdHN0LW11dGV4OC1zdGF0aWMgdHN0LW11dGV4cGk4LXN0YXRpYyBcCisgCSB0c3Qtc2VtMTEtc3RhdGljIHRzdC1zZW0xMi1zdGF0aWMKKysKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQ1hYX1RFU1RTKSArPSB0c3QtY2FuY2VsMjQtc3RhdGljCisrCisgeHRlc3RzLXN0YXRpYyArPSB0c3Qtc2V0dWlkMS1zdGF0aWMKKyAKKyAjIFRoZXNlIHRlc3RzIGFyZSBsaW5rZWQgd2l0aCBsaWJjIGJlZm9yZSBsaWJwdGhyZWFkCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvZXRjL2xkLnNvLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjL2V0Yy9sZC5zby5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjL2V0Yy9sZC5zby5jb25mCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjL2dlbmVyYXRlLXN1cHBvcnRlZC5tayBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvZ2VuZXJhdGUtc3VwcG9ydGVkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYTI4YzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjL2dlbmVyYXRlLXN1cHBvcnRlZC5tawpAQCAtMCwwICsxLDExIEBACisjIS91c3IvYmluL21ha2UKKworaW5jbHVkZSAkKElOKQorCithbGw6CisJcm0gLWYgJChPVVQpCisJdG91Y2ggJChPVVQpCisJZm9yIGxvY2FsZSBpbiAkKFNVUFBPUlRFRC1MT0NBTEVTKTsgZG8gXAorCQlbICQkbG9jYWxlID0gdHJ1ZSBdICYmIGNvbnRpbnVlOyBcCisJCWVjaG8gJCRsb2NhbGUgfCBzZWQgJ3MsLywgLCcgPj4gJChPVVQpOyBcCisJZG9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliY18yLjIyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliY18yLjIyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZTFmYWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjXzIuMjIuYmIKQEAgLTAsMCArMSwxMzUgQEAKK3JlcXVpcmUgZ2xpYmMuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0VTO21kNT1lOWE1NThlMjQzYjM2ZDMyMDlmMzgwZGViMzk0YjIxMyBcCisgICAgICBmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgZmlsZTovL3Bvc2l4L3J4c3BlbmNlci9DT1BZUklHSFQ7bWQ1PWRjNTQ4NWJiMzk0YTEzYjIzMzJlYzFjNzg1ZjVkODNhIFwKKyAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK0RFUEVORFMgKz0gImdwZXJmLW5hdGl2ZSBrY29uZmlnLWZyb250ZW5kcy1uYXRpdmUiCisKK1NSQ1JFViA/PSAiYTM0ZDFjNmFmYzg2NTIxZDZhZDE3NjYyYTNiNTM2MmQ4NDgxNTE0YyIKKworQlJBTkNIID89ICJyZWxlYXNlLyR7UFZ9L21hc3RlciIKKworR0xJQkNfR0lUX1VSSSA/PSAiZ2l0Oi8vc291cmNld2FyZS5vcmcvZ2l0L2dsaWJjLmdpdCIKKworU1JDX1VSSSA9ICIke0dMSUJDX0dJVF9VUkl9O2JyYW5jaD0ke0JSQU5DSH07bmFtZT1nbGliYyBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LUJhY2twb3J0LWh0dHBzLXNvdXJjZXdhcmUub3JnLW1sLWxpYmMtcG9ydHMtMjAwNy0xMi0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNS1mc2wtZTUwMC1lNTUwMC1lNjUwMC02MDNlLWZzcXJ0LWltcGxlbWVudGF0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDYtcmVhZGxpYi1BZGQtT0VDT1JFX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTLXRvLWtub3duLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LXBwYy1zcXJ0LUZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLV9fc3FydF9maW5pdGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktUXVvdGUtZnJvbS1idWctMTQ0My13aGljaC1leHBsYWlucy13aGF0LXRoZS1wYXRjaC1kby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEwLWVnbGliYy1ydW4tbGlibS1lcnItdGFiLnBsLXdpdGgtc3BlY2lmaWMtZGlycy1pbi1TLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTEtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLU1ha2UtbGQtdmVyc2lvbi1vdXRwdXQtbWF0Y2hpbmctZ3Jvay1nb2xkLXMtb3V0cHV0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTMtc3lzZGVwcy1nbnUtY29uZmlndXJlLmFjLWhhbmRsZS1jb3JyZWN0bHktbGliY19jdl9yby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE0LUFkZC11bnVzZWQtYXR0cmlidXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTUtV2hlbi1kaXNhYmxpbmctU1NFLWFsc28tbWFrZS1zdXJlLXRoYXQtZnBtYXRoLWlzLW5vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE2LXllcy13aXRoaW4tdGhlLXBhdGgtc2V0cy13cm9uZy1jb25maWctdmFyaWFibGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTctdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE4LWVnbGliYy1Dcm9zcy1idWlsZGluZy1hbmQtdGVzdGluZy1pbnN0cnVjdGlvbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOS1lZ2xpYmMtQnJpbmctRWdsaWJjLW9wdGlvbi1ncm91cC1pbmZyYXN0cnVjdHVyZS10by1nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjAtZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIxLWVnbGliYy1jaGVycnktcGlja2VkLWZyb20taHR0cC13d3cuZWdsaWJjLm9yZy1hcmNoaXYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMi1lZ2xpYmMtQ2xlYXItY2FjaGUtbGluZXMtb24tcHBjOHh4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjMtZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjQtZWdsaWJjLUZvcndhcmQtcG9ydC1lZ2xpYmMtb3B0aW9ucy1ncm91cHMtc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI1LWVnbGliYy1JbnN0YWxsLVBJQy1hcmNoaXZlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI2LWVnbGliYy1kbF9kZWJ1Z19tYXNrLWlzLWNvbnRyb2xsZWQtYnktX19PUFRJT05fRUdMSUIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNy1lZ2xpYmMtdXNlLW9wdGlvbi1ncm91cHMtQ29uZGl0aW9uYWxseS1leGNsdWRlLWMtdGVzLnBhdGNoIFwKKyIKKworU1JDX1VSSSArPSAiXAorICAgICAgICAgICBmaWxlOi8vZXRjL2xkLnNvLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vZ2VuZXJhdGUtc3VwcG9ydGVkLm1rIFwKKyIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIlwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbmF0aXZlc2RrLWdsaWJjLUxvb2stZm9yLWhvc3Qtc3lzdGVtLWxkLnNvLmNhY2hlLWFzLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLW5hdGl2ZXNkay1nbGliYy1GaXgtYnVmZmVyLW92ZXJydW4td2l0aC1hLXJlbG9jYXRlZC0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1uYXRpdmVzZGstZ2xpYmMtUmFpc2UtdGhlLXNpemUtb2YtYXJyYXlzLWNvbnRhaW5pbmctLnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKK0IgPSAiJHtXT1JLRElSfS9idWlsZC0ke1RBUkdFVF9TWVN9IgorCitQQUNLQUdFU19EWU5BTUlDID0gIiIKKworIyB0aGUgLWlzeXN0ZW0gaW4gYml0YmFrZS5jb25mIHNjcmV3cyB1cCBnbGliYyBkb19zdGFnZQorQlVJTERfQ1BQRkxBR1MgPSAiLUkke1NUQUdJTkdfSU5DRElSX05BVElWRX0iCitUQVJHRVRfQ1BQRkxBR1MgPSAiLUkke1NUQUdJTkdfRElSX1RBUkdFVH0ke2luY2x1ZGVkaXJ9IgorCitHTElCQ19CUk9LRU5fTE9DQUxFUyA9ICIgX0VSIF9FVCBzb19FVCB5bl9FUiBzaWRfRVQgdHJfVFIgbW5fTU4gZ2V6X0VUIGdlel9FUiBibl9CRCB0ZV9JTiBlc19DUi5JU08tODg1OS0xIgorCisjCisjIFdlIHdpbGwgc2tpcCBwYXJzaW5nIGdsaWJjIHdoZW4gdGFyZ2V0IHN5c3RlbSBDIGxpYnJhcnkgc2VsZWN0aW9uIGlzIG5vdCBnbGliYworIyB0aGlzIGhlbHBzIGluIGVhc2luZyBvdXQgcGFyc2luZyBmb3Igbm9uLWdsaWJjIHN5c3RlbSBsaWJyYXJpZXMKKyMKK0NPTVBBVElCTEVfSE9TVF9saWJjLW11c2xfY2xhc3MtdGFyZ2V0ID0gIm51bGwiCitDT01QQVRJQkxFX0hPU1RfbGliYy11Y2xpYmNfY2xhc3MtdGFyZ2V0ID0gIm51bGwiCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1rZXJuZWw9JHtPTERFU1RfS0VSTkVMfSBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LWN2cyAtLWRpc2FibGUtcHJvZmlsZSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRlYnVnIC0td2l0aG91dC1nZCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtY2xvY2FsZT1nbnUgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWFkZC1vbnMgXAorICAgICAgICAgICAgICAgIC0td2l0aC1oZWFkZXJzPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtc2VsaW51eCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtb2Jzb2xldGUtcnBjIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgta2NvbmZpZz0ke1NUQUdJTkdfQklORElSX05BVElWRX0gXAorICAgICAgICAgICAgICAgICR7R0xJQkNfRVhUUkFfT0VDT05GfSIKKworRVhUUkFfT0VDT05GICs9ICIke0BnZXRfbGliY19mcHVfc2V0dGluZyhiYiwgZCl9IgorRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtaW5ldC1hbmwnLCAnLS1lbmFibGUtbnNjZCcsICctLWRpc2FibGUtbnNjZCcsIGQpfSIKKworCitkb19wYXRjaF9hcHBlbmQoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19maXhfcmVhZGxpYl9jJywgZCkKK30KKworZG9fZml4X3JlYWRsaWJfYyAoKSB7CisJc2VkIC1pIC1lICdzI09FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUyMke0VHTElCQ19LTk9XTl9JTlRFUlBSRVRFUl9OQU1FU30jJyAke1N9L2VsZi9yZWFkbGliLmMKK30KKworZG9fY29uZmlndXJlICgpIHsKKyMgb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBhdm9pZCB0aGUgYXV0b2NvbmYvYXV0b21ha2UvYWNsb2NhbC9hdXRvaGVhZGVyCisjIGNhbGxzIGZvciBub3cKKyMgZG9uJ3QgcGFzcyBDUFBGTEFHUyBpbnRvIGNvbmZpZ3VyZSwgc2luY2UgaXQgdXBzZXRzIHRoZSBrZXJuZWwtaGVhZGVycworIyB2ZXJzaW9uIGNoZWNrIGFuZCBkb2Vzbid0IHJlYWxseSBoZWxwIHdpdGggYW55dGhpbmcKKyAgICAgICAgKGNkICR7U30gJiYgZ251LWNvbmZpZ2l6ZSkgfHwgZGllICJmYWlsdXJlIGluIHJ1bm5pbmcgZ251LWNvbmZpZ2l6ZSIKKyAgICAgICAgZmluZCAke1N9IC1uYW1lICJjb25maWd1cmUiIHwgeGFyZ3MgdG91Y2gKKyAgICAgICAgQ1BQRkxBR1M9IiIgb2VfcnVuY29uZgorfQorCitycGNzdmMgPSAiYm9vdHBhcmFtX3Byb3QueCBubG1fcHJvdC54IHJzdGF0LnggXAorCSAgeXBwYXNzd2QueCBrbG1fcHJvdC54IHJleC54IHNtX2ludGVyLnggbW91bnQueCBcCisJICBydXNlcnMueCBzcHJheS54IG5mc19wcm90LnggcnF1b3RhLngga2V5X3Byb3QueCIKKworZG9fY29tcGlsZSAoKSB7CisJIyAtV2wsLXJwYXRoLWxpbmsgPHN0YWdpbmc+L2xpYiBpbiBMREZMQUdTIGNhbiBjYXVzZSBicmVha2FnZSBpZiBhbm90aGVyIGdsaWJjIGlzIGluIHN0YWdpbmcKKwl1bnNldCBMREZMQUdTCisJYmFzZV9kb19jb21waWxlCisJKAorCQljZCAke1N9L3N1bnJwYy9ycGNzdmMKKwkJZm9yIHIgaW4gJHtycGNzdmN9OyBkbworCQkJaD1gZWNobyAkcnxzZWQgLWUncyxcLngkLC5oLCdgCisJCQlybSAtZiAkaAorCQkJJHtCfS9zdW5ycGMvY3Jvc3MtcnBjZ2VuIC1oICRyIC1vICRoIHx8IGJid2FybiAiJHtQTn06IHVuYWJsZSB0byBnZW5lcmF0ZSBoZWFkZXIgZm9yICRyIgorCQlkb25lCisJKQorCWVjaG8gIkFkanVzdCBsZGQgc2NyaXB0IgorCWlmIFsgLW4gIiR7UlRMRExJU1R9IiBdCisJdGhlbgorCQlwcmV2cnRsZD1gY2F0ICR7Qn0vZWxmL2xkZCB8IGdyZXAgIl5SVExETElTVD0iIHwgc2VkICdzI15SVExETElTVD0iXD9cKFteIl0qXCkiXD8kI1wxIydgCisJCWlmIFsgIiR7cHJldnJ0bGR9IiAhPSAiJHtSVExETElTVH0iIF0KKwkJdGhlbgorCQkJc2VkIC1pICR7Qn0vZWxmL2xkZCAtZSAicyNeUlRMRExJU1Q9LipcJCNSVExETElTVD1cIiR7cHJldnJ0bGR9ICR7UlRMRExJU1R9XCIjIgorCQlmaQorCWZpCisKK30KKworcmVxdWlyZSBnbGliYy1wYWNrYWdlLmluYworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS8zMmFuZDY0Yml0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xLzMyYW5kNjRiaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmZWFlYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS8zMmFuZDY0Yml0LnBhdGNoCkBAIC0wLDAgKzEsMzMxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitXZSBydW4gdGhlIGxkY29uZmlnIGluIHRoZSBjcm9zcyBmYXNoaW9uLiBtYWtlIHRoZSBjb2RlIGJpdHNpemUgYXdhcmUgc28gdGhhdCAKK3dlIGNhbiBjcm9zcyBidWlsZCBsZGNvbmZpZyBjYWNoZSBmb3IgdmFyaW91cyBhcmNoaXRlY3R1cmVzLgorCitSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4gMjAwOS8wNS8xOQorTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAwOS8wMy8yOQorCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkZWxmbGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGVsZmxpYi5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkZWxmbGliLmMKK0BAIC00MCwzOSArNDAsMjEyIEBAIGRvCQkJCQkJCQlcCisgCisgLyogUmV0dXJucyAwIGlmIGV2ZXJ5dGhpbmcgaXMgb2ssICE9IDAgaW4gY2FzZSBvZiBlcnJvci4gICovCisgaW50CistcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBjb25zdCBjaGFyICpsaWIsIGludCAqZmxhZywKKytwcm9jZXNzX2VsZl9maWxlMzIgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisgCQkgIHVuc2lnbmVkIGludCAqb3N2ZXJzaW9uLCBjaGFyICoqc29uYW1lLCB2b2lkICpmaWxlX2NvbnRlbnRzLAorIAkJICBzaXplX3QgZmlsZV9sZW5ndGgpCisgeworICAgaW50IGk7CisgICB1bnNpZ25lZCBpbnQgajsKKy0gIEVsZlcoQWRkcikgbG9hZGFkZHI7CisrICBFbGYzMl9BZGRyIGxvYWRhZGRyOworICAgdW5zaWduZWQgaW50IGR5bmFtaWNfYWRkcjsKKyAgIHNpemVfdCBkeW5hbWljX3NpemU7CisgICBjaGFyICpwcm9ncmFtX2ludGVycHJldGVyOworIAorLSAgRWxmVyhFaGRyKSAqZWxmX2hlYWRlcjsKKy0gIEVsZlcoUGhkcikgKmVsZl9waGVhZGVyLCAqc2VnbWVudDsKKy0gIEVsZlcoRHluKSAqZHluYW1pY19zZWdtZW50LCAqZHluX2VudHJ5OworKyAgRWxmMzJfRWhkciAqZWxmX2hlYWRlcjsKKysgIEVsZjMyX1BoZHIgKmVsZl9waGVhZGVyLCAqc2VnbWVudDsKKysgIEVsZjMyX0R5biAqZHluYW1pY19zZWdtZW50LCAqZHluX2VudHJ5OworICAgY2hhciAqZHluYW1pY19zdHJpbmdzOworIAorLSAgZWxmX2hlYWRlciA9IChFbGZXKEVoZHIpICopIGZpbGVfY29udGVudHM7CisrICBlbGZfaGVhZGVyID0gKEVsZjMyX0VoZHIgKikgZmlsZV9jb250ZW50czsKKyAgICpvc3ZlcnNpb24gPSAwOworIAorLSAgaWYgKGVsZl9oZWFkZXItPmVfaWRlbnQgW0VJX0NMQVNTXSAhPSBFbGZXIChDTEFTUykpCisrICBpZiAoZWxmX2hlYWRlci0+ZV90eXBlICE9IEVUX0RZTikKKyAgICAgeworLSAgICAgIGlmIChvcHRfdmVyYm9zZSkKKysgICAgICBlcnJvciAoMCwgMCwgXygiJXMgaXMgbm90IGEgc2hhcmVkIG9iamVjdCBmaWxlIChUeXBlOiAlZCkuXG4iKSwgZmlsZV9uYW1lLAorKwkgICAgIGVsZl9oZWFkZXItPmVfdHlwZSk7CisrICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgIC8qIEdldCBpbmZvcm1hdGlvbiBmcm9tIGVsZiBwcm9ncmFtIGhlYWRlci4gICovCisrICBlbGZfcGhlYWRlciA9IChFbGYzMl9QaGRyICopIChlbGZfaGVhZGVyLT5lX3Bob2ZmICsgZmlsZV9jb250ZW50cyk7CisrICBjaGVja19wdHIgKGVsZl9waGVhZGVyKTsKKysKKysgIC8qIFRoZSBsaWJyYXJ5IGlzIGFuIGVsZiBsaWJyYXJ5LCBub3cgc2VhcmNoIGZvciBzb25hbWUgYW5kCisrICAgICBsaWJjNS9saWJjNi4gICovCisrICAqZmxhZyA9IEZMQUdfRUxGOworKworKyAgbG9hZGFkZHIgPSAtMTsKKysgIGR5bmFtaWNfYWRkciA9IDA7CisrICBkeW5hbWljX3NpemUgPSAwOworKyAgcHJvZ3JhbV9pbnRlcnByZXRlciA9IE5VTEw7CisrICBmb3IgKGkgPSAwLCBzZWdtZW50ID0gZWxmX3BoZWFkZXI7CisrICAgICAgIGkgPCBlbGZfaGVhZGVyLT5lX3BobnVtOyBpKyssIHNlZ21lbnQrKykKKysgICAgeworKyAgICAgIGNoZWNrX3B0ciAoc2VnbWVudCk7CisrCisrICAgICAgc3dpdGNoIChzZWdtZW50LT5wX3R5cGUpCisgCXsKKy0JICBpZiAoZWxmX2hlYWRlci0+ZV9pZGVudCBbRUlfQ0xBU1NdID09IEVMRkNMQVNTMzIpCistCSAgICBlcnJvciAoMCwgMCwgXygiJXMgaXMgYSAzMiBiaXQgRUxGIGZpbGUuXG4iKSwgZmlsZV9uYW1lKTsKKy0JICBlbHNlIGlmIChlbGZfaGVhZGVyLT5lX2lkZW50IFtFSV9DTEFTU10gPT0gRUxGQ0xBU1M2NCkKKy0JICAgIGVycm9yICgwLCAwLCBfKCIlcyBpcyBhIDY0IGJpdCBFTEYgZmlsZS5cbiIpLCBmaWxlX25hbWUpOworLQkgIGVsc2UKKy0JICAgIGVycm9yICgwLCAwLCBfKCJVbmtub3duIEVMRkNMQVNTIGluIGZpbGUgJXMuXG4iKSwgZmlsZV9uYW1lKTsKKysJY2FzZSBQVF9MT0FEOgorKwkgIGlmIChsb2FkYWRkciA9PSAoRWxmMzJfQWRkcikgLTEpCisrCSAgICBsb2FkYWRkciA9IHNlZ21lbnQtPnBfdmFkZHIgLSBzZWdtZW50LT5wX29mZnNldDsKKysJICBicmVhazsKKysKKysJY2FzZSBQVF9EWU5BTUlDOgorKwkgIGlmIChkeW5hbWljX2FkZHIpCisrCSAgICBlcnJvciAoMCwgMCwgXygibW9yZSB0aGFuIG9uZSBkeW5hbWljIHNlZ21lbnRcbiIpKTsKKysKKysJICBkeW5hbWljX2FkZHIgPSBzZWdtZW50LT5wX29mZnNldDsKKysJICBkeW5hbWljX3NpemUgPSBzZWdtZW50LT5wX2ZpbGVzejsKKysJICBicmVhazsKKysKKysJY2FzZSBQVF9JTlRFUlA6CisrCSAgcHJvZ3JhbV9pbnRlcnByZXRlciA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgc2VnbWVudC0+cF9vZmZzZXQpOworKwkgIGNoZWNrX3B0ciAocHJvZ3JhbV9pbnRlcnByZXRlcik7CisrCisrCSAgLyogQ2hlY2sgaWYgdGhpcyBpcyBlbm91Z2ggdG8gY2xhc3NpZnkgdGhlIGJpbmFyeS4gICovCisrCSAgZm9yIChqID0gMDsgaiA8IHNpemVvZiAoaW50ZXJwcmV0ZXJzKSAvIHNpemVvZiAoaW50ZXJwcmV0ZXJzIFswXSk7CisrCSAgICAgICArK2opCisrCSAgICBpZiAoc3RyY21wIChwcm9ncmFtX2ludGVycHJldGVyLCBpbnRlcnByZXRlcnNbal0uc29uYW1lKSA9PSAwKQorKwkgICAgICB7CisrCQkqZmxhZyA9IGludGVycHJldGVyc1tqXS5mbGFnOworKwkJYnJlYWs7CisrCSAgICAgIH0KKysJICBicmVhazsKKysKKysJY2FzZSBQVF9OT1RFOgorKwkgIGlmICghKm9zdmVyc2lvbiAmJiBzZWdtZW50LT5wX2ZpbGVzeiA+PSAzMiAmJiBzZWdtZW50LT5wX2FsaWduID49IDQpCisrCSAgICB7CisrCSAgICAgIEVsZjMyX1dvcmQgKmFiaV9ub3RlID0gKEVsZjMyX1dvcmQgKikgKGZpbGVfY29udGVudHMKKysJCQkJCQkgICAgICsgc2VnbWVudC0+cF9vZmZzZXQpOworKwkgICAgICBFbGYzMl9BZGRyIHNpemUgPSBzZWdtZW50LT5wX2ZpbGVzejsKKysKKysJICAgICAgd2hpbGUgKGFiaV9ub3RlIFswXSAhPSA0IHx8IGFiaV9ub3RlIFsxXSAhPSAxNgorKwkJICAgICB8fCBhYmlfbm90ZSBbMl0gIT0gMQorKwkJICAgICB8fCBtZW1jbXAgKGFiaV9ub3RlICsgMywgIkdOVSIsIDQpICE9IDApCisrCQl7CisrI2RlZmluZSBST1VORChsZW4pICgoKGxlbikgKyBzaXplb2YgKEVsZjMyX1dvcmQpKSAtIDEpICYgLXNpemVvZiAoRWxmMzJfV29yZCkpKQorKwkJICBFbGYzMl9BZGRyKSBub3RlX3NpemUgPSAzICogc2l6ZW9mIChFbGYzMl9Xb3JkKSkKKysJCQkJCSArIFJPVU5EIChhYmlfbm90ZVswXSkKKysJCQkJCSArIFJPVU5EIChhYmlfbm90ZVsxXSk7CisrCisrCQkgIGlmIChzaXplIC0gMzIgPCBub3RlX3NpemUgfHwgbm90ZV9zaXplID09IDApCisrCQkgICAgeworKwkJICAgICAgc2l6ZSA9IDA7CisrCQkgICAgICBicmVhazsKKysJCSAgICB9CisrCQkgIHNpemUgLT0gbm90ZV9zaXplOworKwkJICBhYmlfbm90ZSA9ICh2b2lkICopIGFiaV9ub3RlICsgbm90ZV9zaXplOworKwkJfQorKworKwkgICAgICBpZiAoc2l6ZSA9PSAwKQorKwkJYnJlYWs7CisrCisrCSAgICAgICpvc3ZlcnNpb24gPSAoYWJpX25vdGUgWzRdIDw8IDI0KSB8CisrCQkJICAgKChhYmlfbm90ZSBbNV0gJiAweGZmKSA8PCAxNikgfAorKwkJCSAgICgoYWJpX25vdGUgWzZdICYgMHhmZikgPDwgOCkgfAorKwkJCSAgIChhYmlfbm90ZSBbN10gJiAweGZmKTsKKysJICAgIH0KKysJICBicmVhazsKKysKKysJZGVmYXVsdDoKKysJICBicmVhazsKKysJfQorKworKyAgICB9CisrICBpZiAobG9hZGFkZHIgPT0gKEVsZjMyX0FkZHIpIC0xKQorKyAgICB7CisrICAgICAgLyogVmVyeSBzdHJhbmdlLiAqLworKyAgICAgIGxvYWRhZGRyID0gMDsKKysgICAgfQorKworKyAgLyogTm93IHdlIGNhbiByZWFkIHRoZSBkeW5hbWljIHNlY3Rpb25zLiAgKi8KKysgIGlmIChkeW5hbWljX3NpemUgPT0gMCkKKysgICAgcmV0dXJuIDE7CisrCisrICBkeW5hbWljX3NlZ21lbnQgPSAoRWxmMzJfRHluICopIChmaWxlX2NvbnRlbnRzICsgZHluYW1pY19hZGRyKTsKKysgIGNoZWNrX3B0ciAoZHluYW1pY19zZWdtZW50KTsKKysKKysgIC8qIEZpbmQgdGhlIHN0cmluZyB0YWJsZS4gICovCisrICBkeW5hbWljX3N0cmluZ3MgPSBOVUxMOworKyAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IGR5bl9lbnRyeS0+ZF90YWcgIT0gRFRfTlVMTDsKKysgICAgICAgKytkeW5fZW50cnkpCisrICAgIHsKKysgICAgICBjaGVja19wdHIgKGR5bl9lbnRyeSk7CisrICAgICAgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfU1RSVEFCKQorKwl7CisrCSAgZHluYW1pY19zdHJpbmdzID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyBkeW5fZW50cnktPmRfdW4uZF92YWwgLSBsb2FkYWRkcik7CisrCSAgY2hlY2tfcHRyIChkeW5hbWljX3N0cmluZ3MpOworKwkgIGJyZWFrOworIAl9CistICAgICAgcmV0dXJuIDE7CisgICAgIH0KKyAKKysgIGlmIChkeW5hbWljX3N0cmluZ3MgPT0gTlVMTCkKKysgICAgcmV0dXJuIDE7CisrCisrICAvKiBOb3cgcmVhZCB0aGUgRFRfTkVFREVEIGFuZCBEVF9TT05BTUUgZW50cmllcy4gICovCisrICBmb3IgKGR5bl9lbnRyeSA9IGR5bmFtaWNfc2VnbWVudDsgZHluX2VudHJ5LT5kX3RhZyAhPSBEVF9OVUxMOworKyAgICAgICArK2R5bl9lbnRyeSkKKysgICAgeworKyAgICAgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX05FRURFRCB8fCBkeW5fZW50cnktPmRfdGFnID09IERUX1NPTkFNRSkKKysJeworKwkgIGNoYXIgKm5hbWUgPSBkeW5hbWljX3N0cmluZ3MgKyBkeW5fZW50cnktPmRfdW4uZF92YWw7CisrCSAgY2hlY2tfcHRyIChuYW1lKTsKKysKKysJICBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9ORUVERUQpCisrCSAgICB7CisrCisrCSAgICAgIGlmICgqZmxhZyA9PSBGTEFHX0VMRikKKysJCXsKKysJCSAgLyogQ2hlY2sgaWYgdGhpcyBpcyBlbm91Z2ggdG8gY2xhc3NpZnkgdGhlIGJpbmFyeS4gICovCisrCQkgIGZvciAoaiA9IDA7CisrCQkgICAgICAgaiA8IHNpemVvZiAoa25vd25fbGlicykgLyBzaXplb2YgKGtub3duX2xpYnMgWzBdKTsKKysJCSAgICAgICArK2opCisrCQkgICAgaWYgKHN0cmNtcCAobmFtZSwga25vd25fbGlicyBbal0uc29uYW1lKSA9PSAwKQorKwkJICAgICAgeworKwkJCSpmbGFnID0ga25vd25fbGlicyBbal0uZmxhZzsKKysJCQlicmVhazsKKysJCSAgICAgIH0KKysJCX0KKysJICAgIH0KKysKKysJICBlbHNlIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX1NPTkFNRSkKKysJICAgICpzb25hbWUgPSB4c3RyZHVwIChuYW1lKTsKKysKKysJICAvKiBEbyB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZD8gICovCisrCSAgaWYgKCpzb25hbWUgJiYgKmZsYWcgIT0gRkxBR19FTEYpCisrCSAgICByZXR1cm4gMDsKKysJfQorKyAgICB9CisrCisrICAvKiBXZSByZWFjaCB0aGlzIHBvaW50IG9ubHkgaWYgdGhlIGZpbGUgZG9lc24ndCBjb250YWluIGEgRFRfU09OQU1FCisrICAgICBvciBpZiB3ZSBjYW4ndCBjbGFzc2lmeSB0aGUgbGlicmFyeS4gIElmIGl0IGRvZXNuJ3QgaGF2ZSBhCisrICAgICBzb25hbWUsIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeS4gICovCisrICBpZiAoKnNvbmFtZSA9PSBOVUxMKQorKyAgICAqc29uYW1lID0geHN0cmR1cCAobGliKTsKKysKKysgIHJldHVybiAwOworK30KKysKKytpbnQKKytwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisrCQkgIHVuc2lnbmVkIGludCAqb3N2ZXJzaW9uLCBjaGFyICoqc29uYW1lLCB2b2lkICpmaWxlX2NvbnRlbnRzLAorKwkJICBzaXplX3QgZmlsZV9sZW5ndGgpCisreworKyAgaW50IGk7CisrICB1bnNpZ25lZCBpbnQgajsKKysgIEVsZjY0X0FkZHIgbG9hZGFkZHI7CisrICB1bnNpZ25lZCBpbnQgZHluYW1pY19hZGRyOworKyAgc2l6ZV90IGR5bmFtaWNfc2l6ZTsKKysgIGNoYXIgKnByb2dyYW1faW50ZXJwcmV0ZXI7CisrCisrICBFbGY2NF9FaGRyICplbGZfaGVhZGVyOworKyAgRWxmNjRfUGhkciAqZWxmX3BoZWFkZXIsICpzZWdtZW50OworKyAgRWxmNjRfRHluICpkeW5hbWljX3NlZ21lbnQsICpkeW5fZW50cnk7CisrICBjaGFyICpkeW5hbWljX3N0cmluZ3M7CisrCisrICBlbGZfaGVhZGVyID0gKEVsZjY0X0VoZHIgKikgZmlsZV9jb250ZW50czsKKysgICpvc3ZlcnNpb24gPSAwOworKworICAgaWYgKGVsZl9oZWFkZXItPmVfdHlwZSAhPSBFVF9EWU4pCisgICAgIHsKKyAgICAgICBlcnJvciAoMCwgMCwgXygiJXMgaXMgbm90IGEgc2hhcmVkIG9iamVjdCBmaWxlIChUeXBlOiAlZCkuXG4iKSwgZmlsZV9uYW1lLAorQEAgLTgxLDcgKzI1NCw3IEBAIHByb2Nlc3NfZWxmX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwKKyAgICAgfQorIAorICAgLyogR2V0IGluZm9ybWF0aW9uIGZyb20gZWxmIHByb2dyYW0gaGVhZGVyLiAgKi8KKy0gIGVsZl9waGVhZGVyID0gKEVsZlcoUGhkcikgKikgKGVsZl9oZWFkZXItPmVfcGhvZmYgKyBmaWxlX2NvbnRlbnRzKTsKKysgIGVsZl9waGVhZGVyID0gKEVsZjY0X1BoZHIgKikgKGVsZl9oZWFkZXItPmVfcGhvZmYgKyBmaWxlX2NvbnRlbnRzKTsKKyAgIGNoZWNrX3B0ciAoZWxmX3BoZWFkZXIpOworIAorICAgLyogVGhlIGxpYnJhcnkgaXMgYW4gZWxmIGxpYnJhcnksIG5vdyBzZWFyY2ggZm9yIHNvbmFtZSBhbmQKK0BAIC0xMDAsNyArMjczLDcgQEAgcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLAorICAgICAgIHN3aXRjaCAoc2VnbWVudC0+cF90eXBlKQorIAl7CisgCWNhc2UgUFRfTE9BRDoKKy0JICBpZiAobG9hZGFkZHIgPT0gKEVsZlcoQWRkcikpIC0xKQorKwkgIGlmIChsb2FkYWRkciA9PSAoRWxmNjRfQWRkcikgLTEpCisgCSAgICBsb2FkYWRkciA9IHNlZ21lbnQtPnBfdmFkZHIgLSBzZWdtZW50LT5wX29mZnNldDsKKyAJICBicmVhazsKKyAKK0BAIC0xMjksMTYgKzMwMiwxNiBAQCBwcm9jZXNzX2VsZl9maWxlIChjb25zdCBjaGFyICpmaWxlX25hbWUsCisgCWNhc2UgUFRfTk9URToKKyAJICBpZiAoISpvc3ZlcnNpb24gJiYgc2VnbWVudC0+cF9maWxlc3ogPj0gMzIgJiYgc2VnbWVudC0+cF9hbGlnbiA+PSA0KQorIAkgICAgeworLQkgICAgICBFbGZXKFdvcmQpICphYmlfbm90ZSA9IChFbGZXKFdvcmQpICopIChmaWxlX2NvbnRlbnRzCisrCSAgICAgIEVsZjY0X1dvcmQgKmFiaV9ub3RlID0gKEVsZjY0X1dvcmQgKikgKGZpbGVfY29udGVudHMKKyAJCQkJCQkgICAgICsgc2VnbWVudC0+cF9vZmZzZXQpOworLQkgICAgICBFbGZXKEFkZHIpIHNpemUgPSBzZWdtZW50LT5wX2ZpbGVzejsKKysJICAgICAgRWxmNjRfQWRkciBzaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisgCisgCSAgICAgIHdoaWxlIChhYmlfbm90ZSBbMF0gIT0gNCB8fCBhYmlfbm90ZSBbMV0gIT0gMTYKKyAJCSAgICAgfHwgYWJpX25vdGUgWzJdICE9IDEKKyAJCSAgICAgfHwgbWVtY21wIChhYmlfbm90ZSArIDMsICJHTlUiLCA0KSAhPSAwKQorIAkJeworLSNkZWZpbmUgUk9VTkQobGVuKSAoKChsZW4pICsgc2l6ZW9mIChFbGZXKFdvcmQpKSAtIDEpICYgLXNpemVvZiAoRWxmVyhXb3JkKSkpCistCQkgIEVsZlcoQWRkcikgbm90ZV9zaXplID0gMyAqIHNpemVvZiAoRWxmVyhXb3JkKSkKKysjZGVmaW5lIFJPVU5EKGxlbikgKCgobGVuKSArIHNpemVvZiAoRWxmNjRfV29yZCkgLSAxKSAmIC1zaXplb2YgKEVsZjY0X1dvcmQpKQorKwkJICBFbGY2NF9BZGRyIG5vdGVfc2l6ZSA9IDMgKiBzaXplb2YgKEVsZjY0X1dvcmQpCisgCQkJCQkgKyBST1VORCAoYWJpX25vdGVbMF0pCisgCQkJCQkgKyBST1VORCAoYWJpX25vdGVbMV0pOworIAorQEAgLTE2Niw3ICszMzksNyBAQCBwcm9jZXNzX2VsZl9maWxlIChjb25zdCBjaGFyICpmaWxlX25hbWUsCisgCX0KKyAKKyAgICAgfQorLSAgaWYgKGxvYWRhZGRyID09IChFbGZXKEFkZHIpKSAtMSkKKysgIGlmIChsb2FkYWRkciA9PSAoRWxmNjRfQWRkcikgLTEpCisgICAgIHsKKyAgICAgICAvKiBWZXJ5IHN0cmFuZ2UuICovCisgICAgICAgbG9hZGFkZHIgPSAwOworQEAgLTE3Niw3ICszNDksNyBAQCBwcm9jZXNzX2VsZl9maWxlIChjb25zdCBjaGFyICpmaWxlX25hbWUsCisgICBpZiAoZHluYW1pY19zaXplID09IDApCisgICAgIHJldHVybiAxOworIAorLSAgZHluYW1pY19zZWdtZW50ID0gKEVsZlcoRHluKSAqKSAoZmlsZV9jb250ZW50cyArIGR5bmFtaWNfYWRkcik7CisrICBkeW5hbWljX3NlZ21lbnQgPSAoRWxmNjRfRHluICopIChmaWxlX2NvbnRlbnRzICsgZHluYW1pY19hZGRyKTsKKyAgIGNoZWNrX3B0ciAoZHluYW1pY19zZWdtZW50KTsKKyAKKyAgIC8qIEZpbmQgdGhlIHN0cmluZyB0YWJsZS4gICovCitAQCAtMjMzLDMgKzQwNiwzMyBAQCBwcm9jZXNzX2VsZl9maWxlIChjb25zdCBjaGFyICpmaWxlX25hbWUsCisgCisgICByZXR1cm4gMDsKKyB9CisrLyogUmV0dXJucyAwIGlmIGV2ZXJ5dGhpbmcgaXMgb2ssICE9IDAgaW4gY2FzZSBvZiBlcnJvci4gICovCisraW50CisrcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBjb25zdCBjaGFyICpsaWIsIGludCAqZmxhZywKKysJCSAgdW5zaWduZWQgaW50ICpvc3ZlcnNpb24sIGNoYXIgKipzb25hbWUsIHZvaWQgKmZpbGVfY29udGVudHMsCisrCQkgIHNpemVfdCBmaWxlX2xlbmd0aCkKKyt7CisrICBpbnQgaTsKKysgIHVuc2lnbmVkIGludCBqOworKyAgRWxmVyhBZGRyKSBsb2FkYWRkcjsKKysgIHVuc2lnbmVkIGludCBkeW5hbWljX2FkZHI7CisrICBzaXplX3QgZHluYW1pY19zaXplOworKyAgY2hhciAqcHJvZ3JhbV9pbnRlcnByZXRlcjsKKysKKysgIEVsZlcoRWhkcikgKmVsZl9oZWFkZXI7CisrICBFbGZXKFBoZHIpICplbGZfcGhlYWRlciwgKnNlZ21lbnQ7CisrICBFbGZXKER5bikgKmR5bmFtaWNfc2VnbWVudCwgKmR5bl9lbnRyeTsKKysgIGNoYXIgKmR5bmFtaWNfc3RyaW5nczsKKysKKysgIGVsZl9oZWFkZXIgPSAoRWxmVyhFaGRyKSAqKSBmaWxlX2NvbnRlbnRzOworKyAgKm9zdmVyc2lvbiA9IDA7CisrCisrICBpZiAoZWxmX2hlYWRlci0+ZV9pZGVudCBbRUlfQ0xBU1NdID09IEVMRkNMQVNTMzIpCisrICAgIHJldHVybiBwcm9jZXNzX2VsZl9maWxlMzIoZmlsZV9uYW1lLCBsaWIsZmxhZywgb3N2ZXJzaW9uLCBzb25hbWUsIGZpbGVfY29udGVudHMsIGZpbGVfbGVuZ3RoKTsKKysgIGVsc2UgaWYgKGVsZl9oZWFkZXItPmVfaWRlbnQgW0VJX0NMQVNTXSA9PSBFTEZDTEFTUzY0KQorKyAgICByZXR1cm4gcHJvY2Vzc19lbGZfZmlsZTY0KGZpbGVfbmFtZSwgbGliLGZsYWcsIG9zdmVyc2lvbiwgc29uYW1lLCBmaWxlX2NvbnRlbnRzLCBmaWxlX2xlbmd0aCk7CisrICBlcnJvciAoMCwgMCwgXygiVW5rbm93biBFTEZDTEFTUyBpbiBmaWxlICVzLlxuIiksIGZpbGVfbmFtZSk7CisrICByZXR1cm4gMTsKKyt9CisrCisrCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvUkVBRE1FIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2ZiOTgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL1JFQURNRQpAQCAtMCwwICsxLDggQEAKK1RoZSBmaWxlcyBhcmUgcHVsbGVkIHZlcmJhdGltIGZyb20gZ2xpYmMgMi41IGFuZCB0aGVuIHBhdGNoZWQgdG8gYWxsb3cKK3N0YW5kYWxvbmUgY29tcGlsYXRpb24gb2YgbGRjb25maWcuCisKK1JpY2hhcmQgUHVyZGllCitPcGVuZWRIYW5kIEx0ZC4KKworVXBncmFkZWQgdGhlIGxkY29uZmlnIHJlY2lwZSB0byBlZ2xpYmMgMi4xMi4xCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzAzLzI5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvYWRkLTY0LWJpdC1mbGFnLWZvci1FTEY2NC1lbnRyaWVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2FkZC02NC1iaXQtZmxhZy1mb3ItRUxGNjQtZW50cmllcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWFmMTEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2FkZC02NC1iaXQtZmxhZy1mb3ItRUxGNjQtZW50cmllcy5wYXRjaApAQCAtMCwwICsxLDEwMyBAQAorRnJvbSA5ZDYyNTQ0MDkwYjA4ODQ5MjE4Y2QxZmM1MmEzNmNkZDVkOTAzNjNlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAyNCBBcHIgMjAxNSAwMzoyOTozMSArMDAwMAorU3ViamVjdDogW1BBVENIXSBBZGQgNjQtYml0IGZsYWcgZm9yIEVMRjY0IGVudHJpZXMuCisKK2xkY29uZmlnLW5hdGl2ZSB3YXMgZ3JlcHBlZCBmcm9tIGFuIG9sZCB2ZXJzaW9uIG9mIGdsaWJjLCBhbmQgaXRzIG91dHB1dAorbGFja3MgbmVjY2Vzc2FyeSA2NGJpdCBmbGFnIGluIGVudHJpZXMuCitEdWUgdG8gdGhpcyBkZWZlY3QsIGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSgpIHB5dGhvbiBmdW5jdGlvbiBmYWlscyB0bworZGV0ZWN0IGFueSBsaWJyYXJ5IGR1ZSB0byB0aGUgb2xkIGZpbGUgZm9ybWF0IHRoYXQgbGRjb25maWctbmF0aXZlCitjcmVhdGVzLiBUaGlzIGZpeCBzZXRzIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgNjRiaXQgZmxhZ3MgZm9yIDY0LWJpdCBFTEYuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNhY2hlLmMgICAgICB8ICA0ICsrKysKKyBsZGNvbmZpZy5oICAgfCAgNCArKysrCisgcmVhZGVsZmxpYi5jIHwgMzQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY2FjaGUuYyBiL2NhY2hlLmMKK2luZGV4IGE5MDRkNDQuLmM0ZjU0MTEgMTAwNjQ0CistLS0gYS9jYWNoZS5jCisrKysgYi9jYWNoZS5jCitAQCAtMTIxLDYgKzEyMSwxMCBAQCBwcmludF9lbnRyeSAoY29uc3QgY2hhciAqbGliLCBpbnQgZmxhZywgdW5zaWduZWQgaW50IG9zdmVyc2lvbiwKKyAgICAgICBicmVhazsKKyAgICAgY2FzZSBGTEFHX01JUFM2NF9MSUJONjQ6CisgICAgICAgZnB1dHMgKCIsNjRiaXQiLCBzdGRvdXQpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEZMQUdfQUFSQ0g2NF9MSUI2NDoKKysgICAgICBmcHV0cyAoIixBQXJjaDY0Iiwgc3Rkb3V0KTsKKysgICAgICBicmVhazsKKyAgICAgY2FzZSAwOgorICAgICAgIGJyZWFrOworICAgICBkZWZhdWx0OgorZGlmZiAtLWdpdCBhL2xkY29uZmlnLmggYi9sZGNvbmZpZy5oCitpbmRleCBmYWRkNWVjLi42YThhNzUwIDEwMDY0NAorLS0tIGEvbGRjb25maWcuaAorKysrIGIvbGRjb25maWcuaAorQEAgLTM0LDYgKzM0LDEwIEBACisgI2RlZmluZSBGTEFHX1BPV0VSUENfTElCNjQJMHgwNTAwCisgI2RlZmluZSBGTEFHX01JUFM2NF9MSUJOMzIJMHgwNjAwCisgI2RlZmluZSBGTEFHX01JUFM2NF9MSUJONjQJMHgwNzAwCisrI2RlZmluZSBGTEFHX1g4NjY0X0xJQlgzMgkJMHgwODAwCisrI2RlZmluZSBGTEFHX0FSTV9MSUJIRgkJCTB4MDkwMAorKyNkZWZpbmUgRkxBR19BQVJDSDY0X0xJQjY0CQkweDBhMDAKKysjZGVmaW5lIEZMQUdfQVJNX0xJQlNGCQkJMHgwYjAwCisgCisgLyogTmFtZSBvZiBhdXhpbGlhcnkgY2FjaGUuICAqLworICNkZWZpbmUgX1BBVEhfTERDT05GSUdfQVVYX0NBQ0hFICIvdmFyL2NhY2hlL2xkY29uZmlnL2F1eC1jYWNoZSIKK2RpZmYgLS1naXQgYS9yZWFkZWxmbGliLmMgYi9yZWFkZWxmbGliLmMKK2luZGV4IDBiZjBkZTMuLjZlODdhZmMgMTAwNjQ0CistLS0gYS9yZWFkZWxmbGliLmMKKysrKyBiL3JlYWRlbGZsaWIuYworQEAgLTI4LDYgKzI4LDExIEBACisgCisgI2luY2x1ZGUgImVuZGlhbl9leHRyYS5oIgorIAorKy8qIFdvcmstYXJvdW5kIGZvciBvbGQgaG9zdCB0aGF0IGRvZXMgbm90IGhhdmUgQUFyY2g2NCBkZWZpbmVkIGluIGVsZi5oLiAqLworKyNpZm5kZWYgRU1fQUFSQ0g2NAorKyNkZWZpbmUgRU1fQUFSQ0g2NAkxODMJCS8qIEFSTSBBQVJDSDY0ICovCisrI2VuZGlmCisrCisgI3VuZGVmIGNoZWNrX3B0cgorICNkZWZpbmUgY2hlY2tfcHRyKHB0cikJCQkJCQlcCisgZG8JCQkJCQkJCVwKK0BAIC0yOTAsNiArMjk1LDM1IEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBjb25zdCBjaGFyICpsaWIsIGludCAqZmxhZywKKyAgICAgIGxpYmM1L2xpYmM2LiAgKi8KKyAgICpmbGFnID0gRkxBR19FTEY7CisgCisrICAvKiBTZXQgZmxhZ3MgYWNjb3JkaW5nIHRvIGluZm9ybWF0aW9uIGluIEVMRiBoZWFkZXIgdG8gYWxpZ24gd2l0aCB0YXJnZXQKKysgICAgIGxkY29uZmlnICovCisrICBzd2l0Y2ggKGVsZl9oZWFkZXItPmVfbWFjaGluZSkKKysgICAgeworKyAgICBjYXNlIEVNX0lBXzY0OgorKyAgICAgICpmbGFnIHw9IEZMQUdfSUE2NF9MSUI2NDsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTV9YODZfNjQ6CisrICAgICAgKmZsYWcgfD0gRkxBR19YODY2NF9MSUI2NDsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTV9TMzkwOgorKyAgICAgICpmbGFnIHw9IEZMQUdfUzM5MF9MSUI2NDsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTV9QUEM2NDoKKysgICAgICAqZmxhZyB8PSBGTEFHX1BPV0VSUENfTElCNjQ7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU1fTUlQUzoKKysgICAgY2FzZSBFTV9NSVBTX1JTM19MRToKKysgICAgICAqZmxhZyB8PSBGTEFHX01JUFM2NF9MSUJONjQ7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU1fQUFSQ0g2NDoKKysgICAgICAqZmxhZyB8PSBGTEFHX0FBUkNINjRfTElCNjQ7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgZXJyb3IoMCwgMCwgIiVzIGlzIGEgNjQtYml0IEVMRiBmb3IgdW5rbm93biBtYWNoaW5lICVseFxuIiwKKysgICAgICAgICAgICBmaWxlX25hbWUsIChsb25nKWVsZl9oZWFkZXItPmVfbWFjaGluZSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKyAgIGxvYWRhZGRyID0gLTE7CisgICBkeW5hbWljX2FkZHIgPSAwOworICAgZHluYW1pY19zaXplID0gMDsKKy0tIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbi1uZXNzX2hhbmRsaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbi1uZXNzX2hhbmRsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOGU0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuLW5lc3NfaGFuZGxpbmcucGF0Y2gKQEAgLTAsMCArMSw0NTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0RvIGRhdGEgaW5wdXQvb3V0cHV0IGhhbmRsaW5nIGFjY29yZGluZyB0byBlbmRpZW4tbmVzcyBvZiB0aGUgbGlicmFyeSBmaWxlLiBUaGF0IAorZW5hYmxlcyB1c2Ugb2YgbGRjb25maWcgaW4gdGhlIGNyb3NzIGZhc2hpb24gZm9yIGFueSBhcmNoaXRlY3R1cmUuCisKKzIwMTEvMDQvMDQKK1JpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgorTml0aW4gS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK0luZGV4OiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRlbGZsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkZWxmbGliLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRlbGZsaWIuYworQEAgLTM4LDYgKzM4LDI4IEBAIGRvCQkJCQkJCQlcCisgICB9CQkJCQkJCQlcCisgIHdoaWxlICgwKTsKKyAKKytpbnQgYmU7Cisrc3RhdGljIHVpbnQxNl90IHJlYWQxNih1aW50MTZfdCB4LCBpbnQgYmUpCisreworKyAgaWYgKGJlKQorKyAgICAgICAgcmV0dXJuIGJlMTZ0b2goeCk7CisrICByZXR1cm4gbGUxNnRvaCh4KTsKKyt9CisrCisrc3RhdGljIHVpbnQzMl90IHJlYWQzMih1aW50MzJfdCB4LCBpbnQgYmUpCisreworKyAgaWYgKGJlKQorKyAgICAgICAgcmV0dXJuIGJlMzJ0b2goeCk7CisrICByZXR1cm4gbGUzMnRvaCh4KTsKKyt9CisrCisrc3RhdGljIHVpbnQ2NF90IHJlYWQ2NCh1aW50NjRfdCB4LCBpbnQgYmUpCisreworKyAgaWYgKGJlKQorKyAgICAgICAgcmV0dXJuIGJlNjR0b2goeCk7CisrICByZXR1cm4gbGU2NHRvaCh4KTsKKyt9CisrCisgLyogUmV0dXJucyAwIGlmIGV2ZXJ5dGhpbmcgaXMgb2ssICE9IDAgaW4gY2FzZSBvZiBlcnJvci4gICovCisgaW50CisgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IGNoYXIgKmxpYiwgaW50ICpmbGFnLAorQEAgLTU5LDE1ICs4MSwxNyBAQCBwcm9jZXNzX2VsZl9maWxlMzIgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgICBlbGZfaGVhZGVyID0gKEVsZjMyX0VoZHIgKikgZmlsZV9jb250ZW50czsKKyAgICpvc3ZlcnNpb24gPSAwOworIAorLSAgaWYgKGVsZl9oZWFkZXItPmVfdHlwZSAhPSBFVF9EWU4pCisrICBiZSA9IChlbGZfaGVhZGVyLT5lX2lkZW50W0VJX0RBVEFdID09IEVMRkRBVEEyTVNCKTsKKysKKysgIGlmIChyZWFkMTYoZWxmX2hlYWRlci0+ZV90eXBlLCBiZSkgIT0gRVRfRFlOKQorICAgICB7CisgICAgICAgZXJyb3IgKDAsIDAsIF8oIiVzIGlzIG5vdCBhIHNoYXJlZCBvYmplY3QgZmlsZSAoVHlwZTogJWQpLlxuIiksIGZpbGVfbmFtZSwKKy0JICAgICBlbGZfaGVhZGVyLT5lX3R5cGUpOworKwkgICAgIHJlYWQxNihlbGZfaGVhZGVyLT5lX3R5cGUsIGJlKSk7CisgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKyAKKyAgIC8qIEdldCBpbmZvcm1hdGlvbiBmcm9tIGVsZiBwcm9ncmFtIGhlYWRlci4gICovCistICBlbGZfcGhlYWRlciA9IChFbGYzMl9QaGRyICopIChlbGZfaGVhZGVyLT5lX3Bob2ZmICsgZmlsZV9jb250ZW50cyk7CisrICBlbGZfcGhlYWRlciA9IChFbGYzMl9QaGRyICopIChyZWFkMzIoZWxmX2hlYWRlci0+ZV9waG9mZiwgYmUpICsgZmlsZV9jb250ZW50cyk7CisgICBjaGVja19wdHIgKGVsZl9waGVhZGVyKTsKKyAKKyAgIC8qIFRoZSBsaWJyYXJ5IGlzIGFuIGVsZiBsaWJyYXJ5LCBub3cgc2VhcmNoIGZvciBzb25hbWUgYW5kCitAQCAtNzksMjcgKzEwMywyNyBAQCBwcm9jZXNzX2VsZl9maWxlMzIgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgICBkeW5hbWljX3NpemUgPSAwOworICAgcHJvZ3JhbV9pbnRlcnByZXRlciA9IE5VTEw7CisgICBmb3IgKGkgPSAwLCBzZWdtZW50ID0gZWxmX3BoZWFkZXI7CistICAgICAgIGkgPCBlbGZfaGVhZGVyLT5lX3BobnVtOyBpKyssIHNlZ21lbnQrKykKKysgICAgICAgaSA8IHJlYWQxNihlbGZfaGVhZGVyLT5lX3BobnVtLCBiZSk7IGkrKywgc2VnbWVudCsrKQorICAgICB7CisgICAgICAgY2hlY2tfcHRyIChzZWdtZW50KTsKKyAKKy0gICAgICBzd2l0Y2ggKHNlZ21lbnQtPnBfdHlwZSkKKysgICAgICBzd2l0Y2ggKHJlYWQzMihzZWdtZW50LT5wX3R5cGUsIGJlKSkKKyAJeworIAljYXNlIFBUX0xPQUQ6CisgCSAgaWYgKGxvYWRhZGRyID09IChFbGYzMl9BZGRyKSAtMSkKKy0JICAgIGxvYWRhZGRyID0gc2VnbWVudC0+cF92YWRkciAtIHNlZ21lbnQtPnBfb2Zmc2V0OworKwkgICAgbG9hZGFkZHIgPSByZWFkMzIoc2VnbWVudC0+cF92YWRkciwgYmUpIC0gcmVhZDMyKHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSk7CisgCSAgYnJlYWs7CisgCisgCWNhc2UgUFRfRFlOQU1JQzoKKyAJICBpZiAoZHluYW1pY19hZGRyKQorIAkgICAgZXJyb3IgKDAsIDAsIF8oIm1vcmUgdGhhbiBvbmUgZHluYW1pYyBzZWdtZW50XG4iKSk7CisgCistCSAgZHluYW1pY19hZGRyID0gc2VnbWVudC0+cF9vZmZzZXQ7CistCSAgZHluYW1pY19zaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCSAgZHluYW1pY19hZGRyID0gcmVhZDMyKHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSk7CisrCSAgZHluYW1pY19zaXplID0gcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSk7CisgCSAgYnJlYWs7CisgCisgCWNhc2UgUFRfSU5URVJQOgorLQkgIHByb2dyYW1faW50ZXJwcmV0ZXIgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKysJICBwcm9ncmFtX2ludGVycHJldGVyID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyByZWFkMzIoc2VnbWVudC0+cF9vZmZzZXQsIGJlKSk7CisgCSAgY2hlY2tfcHRyIChwcm9ncmFtX2ludGVycHJldGVyKTsKKyAKKyAJICAvKiBDaGVjayBpZiB0aGlzIGlzIGVub3VnaCB0byBjbGFzc2lmeSB0aGUgYmluYXJ5LiAgKi8KK0BAIC0xMTMsMjAgKzEzNywyMCBAQCBwcm9jZXNzX2VsZl9maWxlMzIgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgCSAgYnJlYWs7CisgCisgCWNhc2UgUFRfTk9URToKKy0JICBpZiAoISpvc3ZlcnNpb24gJiYgc2VnbWVudC0+cF9maWxlc3ogPj0gMzIgJiYgc2VnbWVudC0+cF9hbGlnbiA+PSA0KQorKwkgIGlmICghKm9zdmVyc2lvbiAmJiByZWFkMzIoc2VnbWVudC0+cF9maWxlc3osIGJlKSA+PSAzMiAmJiBzZWdtZW50LT5wX2FsaWduID49IDQpCisgCSAgICB7CisgCSAgICAgIEVsZjMyX1dvcmQgKmFiaV9ub3RlID0gKEVsZjMyX1dvcmQgKikgKGZpbGVfY29udGVudHMKKy0JCQkJCQkgICAgICsgc2VnbWVudC0+cF9vZmZzZXQpOworLQkgICAgICBFbGYzMl9BZGRyIHNpemUgPSBzZWdtZW50LT5wX2ZpbGVzejsKKysJCQkJCQkgICAgICsgcmVhZDMyKHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSkpOworKwkgICAgICBFbGYzMl9BZGRyIHNpemUgPSByZWFkMzIoc2VnbWVudC0+cF9maWxlc3osIGJlKTsKKyAKKy0JICAgICAgd2hpbGUgKGFiaV9ub3RlIFswXSAhPSA0IHx8IGFiaV9ub3RlIFsxXSAhPSAxNgorLQkJICAgICB8fCBhYmlfbm90ZSBbMl0gIT0gMQorKwkgICAgICB3aGlsZSAocmVhZDMyKGFiaV9ub3RlIFswXSwgYmUpICE9IDQgfHwgcmVhZDMyKGFiaV9ub3RlIFsxXSwgYmUpICE9IDE2CisrCQkgICAgIHx8IHJlYWQzMihhYmlfbm90ZSBbMl0sIGJlKSAhPSAxCisgCQkgICAgIHx8IG1lbWNtcCAoYWJpX25vdGUgKyAzLCAiR05VIiwgNCkgIT0gMCkKKyAJCXsKKy0jZGVmaW5lIFJPVU5EKGxlbikgKCgobGVuKSArIHNpemVvZiAoRWxmMzJfV29yZCkpIC0gMSkgJiAtc2l6ZW9mIChFbGYzMl9Xb3JkKSkpCistCQkgIEVsZjMyX0FkZHIpIG5vdGVfc2l6ZSA9IDMgKiBzaXplb2YgKEVsZjMyX1dvcmQpKQorLQkJCQkJICsgUk9VTkQgKGFiaV9ub3RlWzBdKQorLQkJCQkJICsgUk9VTkQgKGFiaV9ub3RlWzFdKTsKKysjZGVmaW5lIFJPVU5EKGxlbikgKCgobGVuKSArIHNpemVvZiAoRWxmMzJfV29yZCkgLSAxKSAmIC1zaXplb2YgKEVsZjMyX1dvcmQpKQorKwkJICBFbGYzMl9BZGRyIG5vdGVfc2l6ZSA9IDMgKiBzaXplb2YgKEVsZjMyX1dvcmQpCisrCQkJCQkgKyBST1VORCAocmVhZDMyKGFiaV9ub3RlWzBdLCBiZSkpCisrCQkJCQkgKyBST1VORCAocmVhZDMyKGFiaV9ub3RlWzFdLCBiZSkpOworIAorIAkJICBpZiAoc2l6ZSAtIDMyIDwgbm90ZV9zaXplIHx8IG5vdGVfc2l6ZSA9PSAwKQorIAkJICAgIHsKK0BAIC0xNDAsMTAgKzE2NCwxMCBAQCBwcm9jZXNzX2VsZl9maWxlMzIgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgCSAgICAgIGlmIChzaXplID09IDApCisgCQlicmVhazsKKyAKKy0JICAgICAgKm9zdmVyc2lvbiA9IChhYmlfbm90ZSBbNF0gPDwgMjQpIHwKKy0JCQkgICAoKGFiaV9ub3RlIFs1XSAmIDB4ZmYpIDw8IDE2KSB8CistCQkJICAgKChhYmlfbm90ZSBbNl0gJiAweGZmKSA8PCA4KSB8CistCQkJICAgKGFiaV9ub3RlIFs3XSAmIDB4ZmYpOworKwkgICAgICAqb3N2ZXJzaW9uID0gKHJlYWQzMihhYmlfbm90ZSBbNF0sIGJlKSA8PCAyNCkgfAorKwkJCSAgICgocmVhZDMyKGFiaV9ub3RlIFs1XSwgYmUpICYgMHhmZikgPDwgMTYpIHwKKysJCQkgICAoKHJlYWQzMihhYmlfbm90ZSBbNl0sIGJlKSAmIDB4ZmYpIDw8IDgpIHwKKysJCQkgICAocmVhZDMyKGFiaV9ub3RlIFs3XSwgYmUpICYgMHhmZik7CisgCSAgICB9CisgCSAgYnJlYWs7CisgCitAQCAtMTY3LDEzICsxOTEsMTMgQEAgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbQorIAorICAgLyogRmluZCB0aGUgc3RyaW5nIHRhYmxlLiAgKi8KKyAgIGR5bmFtaWNfc3RyaW5ncyA9IE5VTEw7CistICBmb3IgKGR5bl9lbnRyeSA9IGR5bmFtaWNfc2VnbWVudDsgZHluX2VudHJ5LT5kX3RhZyAhPSBEVF9OVUxMOworKyAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IHJlYWQzMihkeW5fZW50cnktPmRfdGFnLCBiZSkgIT0gRFRfTlVMTDsKKyAgICAgICAgKytkeW5fZW50cnkpCisgICAgIHsKKyAgICAgICBjaGVja19wdHIgKGR5bl9lbnRyeSk7CistICAgICAgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfU1RSVEFCKQorKyAgICAgIGlmIChyZWFkMzIoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX1NUUlRBQikKKyAJeworLQkgIGR5bmFtaWNfc3RyaW5ncyA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgZHluX2VudHJ5LT5kX3VuLmRfdmFsIC0gbG9hZGFkZHIpOworKwkgIGR5bmFtaWNfc3RyaW5ncyA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgcmVhZDMyKGR5bl9lbnRyeS0+ZF91bi5kX3ZhbCwgYmUpIC0gbG9hZGFkZHIpOworIAkgIGNoZWNrX3B0ciAoZHluYW1pY19zdHJpbmdzKTsKKyAJICBicmVhazsKKyAJfQorQEAgLTE4MywxNSArMjA3LDE1IEBAIHByb2Nlc3NfZWxmX2ZpbGUzMiAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAgICAgcmV0dXJuIDE7CisgCisgICAvKiBOb3cgcmVhZCB0aGUgRFRfTkVFREVEIGFuZCBEVF9TT05BTUUgZW50cmllcy4gICovCistICBmb3IgKGR5bl9lbnRyeSA9IGR5bmFtaWNfc2VnbWVudDsgZHluX2VudHJ5LT5kX3RhZyAhPSBEVF9OVUxMOworKyAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IHJlYWQzMihkeW5fZW50cnktPmRfdGFnLCBiZSkgIT0gRFRfTlVMTDsKKyAgICAgICAgKytkeW5fZW50cnkpCisgICAgIHsKKy0gICAgICBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9ORUVERUQgfHwgZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9TT05BTUUpCisrICAgICAgaWYgKHJlYWQzMihkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfTkVFREVEIHx8IHJlYWQzMihkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfU09OQU1FKQorIAl7CistCSAgY2hhciAqbmFtZSA9IGR5bmFtaWNfc3RyaW5ncyArIGR5bl9lbnRyeS0+ZF91bi5kX3ZhbDsKKysJICBjaGFyICpuYW1lID0gZHluYW1pY19zdHJpbmdzICsgcmVhZDMyKGR5bl9lbnRyeS0+ZF91bi5kX3ZhbCwgYmUpOworIAkgIGNoZWNrX3B0ciAobmFtZSk7CisgCistCSAgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfTkVFREVEKQorKwkgIGlmIChyZWFkMzIoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX05FRURFRCkKKyAJICAgIHsKKyAKKyAJICAgICAgaWYgKCpmbGFnID09IEZMQUdfRUxGKQorQEAgLTIwOCw3ICsyMzIsNyBAQCBwcm9jZXNzX2VsZl9maWxlMzIgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgCQl9CisgCSAgICB9CisgCistCSAgZWxzZSBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9TT05BTUUpCisrCSAgZWxzZSBpZiAocmVhZDMyKGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9TT05BTUUpCisgCSAgICAqc29uYW1lID0geHN0cmR1cCAobmFtZSk7CisgCisgCSAgLyogRG8gd2UgaGF2ZSBldmVyeXRoaW5nIHdlIG5lZWQ/ICAqLworQEAgLTI0NiwxNSArMjcwLDE3IEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAgIGVsZl9oZWFkZXIgPSAoRWxmNjRfRWhkciAqKSBmaWxlX2NvbnRlbnRzOworICAgKm9zdmVyc2lvbiA9IDA7CisgCistICBpZiAoZWxmX2hlYWRlci0+ZV90eXBlICE9IEVUX0RZTikKKysgIGJlID0gKGVsZl9oZWFkZXItPmVfaWRlbnRbRUlfREFUQV0gPT0gRUxGREFUQTJNU0IpOworKworKyAgaWYgKHJlYWQxNihlbGZfaGVhZGVyLT5lX3R5cGUsIGJlKSAhPSBFVF9EWU4pCisgICAgIHsKKyAgICAgICBlcnJvciAoMCwgMCwgXygiJXMgaXMgbm90IGEgc2hhcmVkIG9iamVjdCBmaWxlIChUeXBlOiAlZCkuXG4iKSwgZmlsZV9uYW1lLAorLQkgICAgIGVsZl9oZWFkZXItPmVfdHlwZSk7CisrCSAgICAgcmVhZDE2KGVsZl9oZWFkZXItPmVfdHlwZSwgYmUpKTsKKyAgICAgICByZXR1cm4gMTsKKyAgICAgfQorIAorICAgLyogR2V0IGluZm9ybWF0aW9uIGZyb20gZWxmIHByb2dyYW0gaGVhZGVyLiAgKi8KKy0gIGVsZl9waGVhZGVyID0gKEVsZjY0X1BoZHIgKikgKGVsZl9oZWFkZXItPmVfcGhvZmYgKyBmaWxlX2NvbnRlbnRzKTsKKysgIGVsZl9waGVhZGVyID0gKEVsZjY0X1BoZHIgKikgKHJlYWQ2NChlbGZfaGVhZGVyLT5lX3Bob2ZmLCBiZSkgKyBmaWxlX2NvbnRlbnRzKTsKKyAgIGNoZWNrX3B0ciAoZWxmX3BoZWFkZXIpOworIAorICAgLyogVGhlIGxpYnJhcnkgaXMgYW4gZWxmIGxpYnJhcnksIG5vdyBzZWFyY2ggZm9yIHNvbmFtZSBhbmQKK0BAIC0yNjYsMjcgKzI5MiwyNyBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgICBkeW5hbWljX3NpemUgPSAwOworICAgcHJvZ3JhbV9pbnRlcnByZXRlciA9IE5VTEw7CisgICBmb3IgKGkgPSAwLCBzZWdtZW50ID0gZWxmX3BoZWFkZXI7CistICAgICAgIGkgPCBlbGZfaGVhZGVyLT5lX3BobnVtOyBpKyssIHNlZ21lbnQrKykKKysgICAgICAgaSA8IHJlYWQxNihlbGZfaGVhZGVyLT5lX3BobnVtLCBiZSk7IGkrKywgc2VnbWVudCsrKQorICAgICB7CisgICAgICAgY2hlY2tfcHRyIChzZWdtZW50KTsKKyAKKy0gICAgICBzd2l0Y2ggKHNlZ21lbnQtPnBfdHlwZSkKKysgICAgICBzd2l0Y2ggKHJlYWQzMihzZWdtZW50LT5wX3R5cGUsIGJlKSkKKyAJeworIAljYXNlIFBUX0xPQUQ6CisgCSAgaWYgKGxvYWRhZGRyID09IChFbGY2NF9BZGRyKSAtMSkKKy0JICAgIGxvYWRhZGRyID0gc2VnbWVudC0+cF92YWRkciAtIHNlZ21lbnQtPnBfb2Zmc2V0OworKwkgICAgbG9hZGFkZHIgPSByZWFkNjQoc2VnbWVudC0+cF92YWRkciwgYmUpIC0gcmVhZDY0KHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSk7CisgCSAgYnJlYWs7CisgCisgCWNhc2UgUFRfRFlOQU1JQzoKKyAJICBpZiAoZHluYW1pY19hZGRyKQorIAkgICAgZXJyb3IgKDAsIDAsIF8oIm1vcmUgdGhhbiBvbmUgZHluYW1pYyBzZWdtZW50XG4iKSk7CisgCistCSAgZHluYW1pY19hZGRyID0gc2VnbWVudC0+cF9vZmZzZXQ7CistCSAgZHluYW1pY19zaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCSAgZHluYW1pY19hZGRyID0gcmVhZDY0KHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSk7CisrCSAgZHluYW1pY19zaXplID0gcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSk7CisgCSAgYnJlYWs7CisgCisgCWNhc2UgUFRfSU5URVJQOgorLQkgIHByb2dyYW1faW50ZXJwcmV0ZXIgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKysJICBwcm9ncmFtX2ludGVycHJldGVyID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyByZWFkNjQoc2VnbWVudC0+cF9vZmZzZXQsIGJlKSk7CisgCSAgY2hlY2tfcHRyIChwcm9ncmFtX2ludGVycHJldGVyKTsKKyAKKyAJICAvKiBDaGVjayBpZiB0aGlzIGlzIGVub3VnaCB0byBjbGFzc2lmeSB0aGUgYmluYXJ5LiAgKi8KK0BAIC0zMDAsMjAgKzMyNiwyMSBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgCSAgYnJlYWs7CisgCisgCWNhc2UgUFRfTk9URToKKy0JICBpZiAoISpvc3ZlcnNpb24gJiYgc2VnbWVudC0+cF9maWxlc3ogPj0gMzIgJiYgc2VnbWVudC0+cF9hbGlnbiA+PSA0KQorKwkgIGlmICghKm9zdmVyc2lvbiAmJiByZWFkMzIoc2VnbWVudC0+cF9maWxlc3osIGJlKSA+PSAzMiAmJiByZWFkMzIoc2VnbWVudC0+cF9hbGlnbiwgYmUpID49IDQpCisgCSAgICB7CisgCSAgICAgIEVsZjY0X1dvcmQgKmFiaV9ub3RlID0gKEVsZjY0X1dvcmQgKikgKGZpbGVfY29udGVudHMKKy0JCQkJCQkgICAgICsgc2VnbWVudC0+cF9vZmZzZXQpOworLQkgICAgICBFbGY2NF9BZGRyIHNpemUgPSBzZWdtZW50LT5wX2ZpbGVzejsKKysJCQkJCQkgICAgICsgcmVhZDY0KHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSkpOworKwkgICAgICBFbGY2NF9BZGRyIHNpemUgPSByZWFkMzIoc2VnbWVudC0+cF9maWxlc3osIGJlKTsKKyAKKy0JICAgICAgd2hpbGUgKGFiaV9ub3RlIFswXSAhPSA0IHx8IGFiaV9ub3RlIFsxXSAhPSAxNgorLQkJICAgICB8fCBhYmlfbm90ZSBbMl0gIT0gMQorKwkgICAgICB3aGlsZSAocmVhZDMyKGFiaV9ub3RlIFswXSwgYmUpICE9IDQgfHwgcmVhZDMyKGFiaV9ub3RlIFsxXSwgYmUpICE9IDE2CisrCQkgICAgIHx8IHJlYWQzMihhYmlfbm90ZSBbMl0sIGJlKSAhPSAxCisgCQkgICAgIHx8IG1lbWNtcCAoYWJpX25vdGUgKyAzLCAiR05VIiwgNCkgIT0gMCkKKyAJCXsKKysjdW5kZWYgUk9VTkQKKyAjZGVmaW5lIFJPVU5EKGxlbikgKCgobGVuKSArIHNpemVvZiAoRWxmNjRfV29yZCkgLSAxKSAmIC1zaXplb2YgKEVsZjY0X1dvcmQpKQorIAkJICBFbGY2NF9BZGRyIG5vdGVfc2l6ZSA9IDMgKiBzaXplb2YgKEVsZjY0X1dvcmQpCistCQkJCQkgKyBST1VORCAoYWJpX25vdGVbMF0pCistCQkJCQkgKyBST1VORCAoYWJpX25vdGVbMV0pOworKwkJCQkJICsgUk9VTkQgKHJlYWQzMihhYmlfbm90ZVswXSwgYmUpKQorKwkJCQkJICsgUk9VTkQgKHJlYWQzMihhYmlfbm90ZVsxXSwgYmUpKTsKKyAKKyAJCSAgaWYgKHNpemUgLSAzMiA8IG5vdGVfc2l6ZSB8fCBub3RlX3NpemUgPT0gMCkKKyAJCSAgICB7CitAQCAtMzI3LDEwICszNTQsMTAgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbQorIAkgICAgICBpZiAoc2l6ZSA9PSAwKQorIAkJYnJlYWs7CisgCistCSAgICAgICpvc3ZlcnNpb24gPSAoYWJpX25vdGUgWzRdIDw8IDI0KSB8CistCQkJICAgKChhYmlfbm90ZSBbNV0gJiAweGZmKSA8PCAxNikgfAorLQkJCSAgICgoYWJpX25vdGUgWzZdICYgMHhmZikgPDwgOCkgfAorLQkJCSAgIChhYmlfbm90ZSBbN10gJiAweGZmKTsKKysJICAgICAgKm9zdmVyc2lvbiA9IChyZWFkMzIoYWJpX25vdGUgWzRdLCBiZSkgPDwgMjQpIHwKKysJCQkgICAoKHJlYWQzMihhYmlfbm90ZSBbNV0sIGJlKSAmIDB4ZmYpIDw8IDE2KSB8CisrCQkJICAgKChyZWFkMzIoYWJpX25vdGUgWzZdLCBiZSkgJiAweGZmKSA8PCA4KSB8CisrCQkJICAgKHJlYWQzMihhYmlfbm90ZSBbN10sIGJlKSAmIDB4ZmYpOworIAkgICAgfQorIAkgIGJyZWFrOworIAorQEAgLTM1NCwxMyArMzgxLDEzIEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAKKyAgIC8qIEZpbmQgdGhlIHN0cmluZyB0YWJsZS4gICovCisgICBkeW5hbWljX3N0cmluZ3MgPSBOVUxMOworLSAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IGR5bl9lbnRyeS0+ZF90YWcgIT0gRFRfTlVMTDsKKysgIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyByZWFkNjQoZHluX2VudHJ5LT5kX3RhZywgYmUpICE9IERUX05VTEw7CisgICAgICAgICsrZHluX2VudHJ5KQorICAgICB7CisgICAgICAgY2hlY2tfcHRyIChkeW5fZW50cnkpOworLSAgICAgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX1NUUlRBQikKKysgICAgICBpZiAocmVhZDY0KGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9TVFJUQUIpCisgCXsKKy0JICBkeW5hbWljX3N0cmluZ3MgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIGR5bl9lbnRyeS0+ZF91bi5kX3ZhbCAtIGxvYWRhZGRyKTsKKysJICBkeW5hbWljX3N0cmluZ3MgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIHJlYWQ2NChkeW5fZW50cnktPmRfdW4uZF92YWwsIGJlKSAtIGxvYWRhZGRyKTsKKyAJICBjaGVja19wdHIgKGR5bmFtaWNfc3RyaW5ncyk7CisgCSAgYnJlYWs7CisgCX0KK0BAIC0zNzAsMTUgKzM5NywxNSBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgICAgIHJldHVybiAxOworIAorICAgLyogTm93IHJlYWQgdGhlIERUX05FRURFRCBhbmQgRFRfU09OQU1FIGVudHJpZXMuICAqLworLSAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IGR5bl9lbnRyeS0+ZF90YWcgIT0gRFRfTlVMTDsKKysgIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyByZWFkNjQoZHluX2VudHJ5LT5kX3RhZywgYmUpICE9IERUX05VTEw7CisgICAgICAgICsrZHluX2VudHJ5KQorICAgICB7CistICAgICAgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfTkVFREVEIHx8IGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfU09OQU1FKQorKyAgICAgIGlmIChyZWFkNjQoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX05FRURFRCB8fCByZWFkNjQoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX1NPTkFNRSkKKyAJeworLQkgIGNoYXIgKm5hbWUgPSBkeW5hbWljX3N0cmluZ3MgKyBkeW5fZW50cnktPmRfdW4uZF92YWw7CisrCSAgY2hhciAqbmFtZSA9IGR5bmFtaWNfc3RyaW5ncyArIHJlYWQ2NChkeW5fZW50cnktPmRfdW4uZF92YWwsIGJlKTsKKyAJICBjaGVja19wdHIgKG5hbWUpOworIAorLQkgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX05FRURFRCkKKysJICBpZiAocmVhZDY0KGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9ORUVERUQpCisgCSAgICB7CisgCisgCSAgICAgIGlmICgqZmxhZyA9PSBGTEFHX0VMRikKK0BAIC0zOTUsNyArNDIyLDcgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbQorIAkJfQorIAkgICAgfQorIAorLQkgIGVsc2UgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfU09OQU1FKQorKwkgIGVsc2UgaWYgKHJlYWQ2NChkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfU09OQU1FKQorIAkgICAgKnNvbmFtZSA9IHhzdHJkdXAgKG5hbWUpOworIAorIAkgIC8qIERvIHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkPyAgKi8KK0luZGV4OiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkbGliLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYworQEAgLTE2OSw3ICsxNjksOCBAQCBwcm9jZXNzX2ZpbGUgKGNvbnN0IGNoYXIgKnJlYWxfZmlsZV9uYW1lCisgICAgICAgcmV0ID0gMTsKKyAgICAgfQorICAgLyogTGlicmFyaWVzIGhhdmUgdG8gYmUgc2hhcmVkIG9iamVjdCBmaWxlcy4gICovCistICBlbHNlIGlmIChlbGZfaGVhZGVyLT5lX3R5cGUgIT0gRVRfRFlOKQorKyAgZWxzZSBpZiAoKGVsZl9oZWFkZXItPmVfaWRlbnRbRUlfREFUQV0gPT0gRUxGREFUQTJNU0IgJiYgYmUxNnRvaChlbGZfaGVhZGVyLT5lX3R5cGUpICE9IEVUX0RZTikgfHwKKysgICAgICAoZWxmX2hlYWRlci0+ZV9pZGVudFtFSV9EQVRBXSA9PSBFTEZEQVRBMkxTQiAmJiBsZTE2dG9oKGVsZl9oZWFkZXItPmVfdHlwZSkgIT0gRVRfRFlOKSkKKyAgICAgcmV0ID0gMTsKKyAgIGVsc2UgaWYgKHByb2Nlc3NfZWxmX2ZpbGUgKGZpbGVfbmFtZSwgbGliLCBmbGFnLCBvc3ZlcnNpb24sIHNvbmFtZSwKKyAJCQkgICAgIGZpbGVfY29udGVudHMsIHN0YXRidWYuc3Rfc2l6ZSkpCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9jYWNoZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2NhY2hlLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2NhY2hlLmMKK0BAIC0zOSw2ICszOSwyOSBAQAorICMgZGVmaW5lIE5fKG1zZ2lkKSAgbXNnaWQKKyAjZGVmaW5lIF8obXNnKSBtc2cKKyAKKytleHRlcm4gaW50IGJlOworKworK3N0YXRpYyB1aW50MTZfdCB3cml0ZTE2KHVpbnQxNl90IHgsIGludCBiZSkKKyt7CisrICBpZiAoYmUpCisrICAgICAgICByZXR1cm4gaHRvYmUxNih4KTsKKysgIHJldHVybiBodG9sZTE2KHgpOworK30KKysKKytzdGF0aWMgdWludDMyX3Qgd3JpdGUzMih1aW50MzJfdCB4LCBpbnQgYmUpCisreworKyAgaWYgKGJlKQorKyAgICAgICAgcmV0dXJuIGh0b2JlMzIoeCk7CisrICByZXR1cm4gaHRvbGUzMih4KTsKKyt9CisrCisrc3RhdGljIHVpbnQ2NF90IHdyaXRlNjQodWludDY0X3QgeCwgaW50IGJlKQorK3sKKysgIGlmIChiZSkKKysgICAgICAgIHJldHVybiBodG9iZTY0KHgpOworKyAgcmV0dXJuIGh0b2xlNjQoeCk7CisrfQorKworIHN0cnVjdCBjYWNoZV9lbnRyeQorIHsKKyAgIGNoYXIgKmxpYjsJCQkvKiBMaWJyYXJ5IG5hbWUuICAqLworQEAgLTI3OSw3ICszMDIsMTIgQEAgc2F2ZV9jYWNoZSAoY29uc3QgY2hhciAqY2FjaGVfbmFtZSkKKyAgIC8qIE51bWJlciBvZiBub3JtYWwgY2FjaGUgZW50cmllcy4gICovCisgICBpbnQgY2FjaGVfZW50cnlfb2xkX2NvdW50ID0gMDsKKyAKKy0gIGZvciAoZW50cnkgPSBlbnRyaWVzOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IGVudHJ5LT5uZXh0KQorKyAgICBpZiAoYmUpCisrICAgICAgcHJpbnRmKCJzYXZpbmcgY2FjaGUgaW4gYmlnIGVuZGlhbiBlbmNvZGluZ1xuIik7CisrICAgIGVsc2UKKysgICAgICBwcmludGYoInNhdmluZyBjYWNoZSBpbiBsaXR0bGUgZW5kaWFuIGVuY29kaW5nXG4iKTsKKysKKysgICAgZm9yIChlbnRyeSA9IGVudHJpZXM7IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gZW50cnktPm5leHQpCisgICAgIHsKKyAgICAgICAvKiBBY2NvdW50IHRoZSBmaW5hbCBOVUxzLiAgKi8KKyAgICAgICB0b3RhbF9zdHJsZW4gKz0gc3RybGVuIChlbnRyeS0+bGliKSArIHN0cmxlbiAoZW50cnktPnBhdGgpICsgMjsKK0BAIC0zMTAsNyArMzM4LDcgQEAgc2F2ZV9jYWNoZSAoY29uc3QgY2hhciAqY2FjaGVfbmFtZSkKKyAgICAgICBtZW1zZXQgKGZpbGVfZW50cmllcywgJ1wwJywgc2l6ZW9mIChzdHJ1Y3QgY2FjaGVfZmlsZSkpOworICAgICAgIG1lbWNweSAoZmlsZV9lbnRyaWVzLT5tYWdpYywgQ0FDSEVNQUdJQywgc2l6ZW9mIENBQ0hFTUFHSUMgLSAxKTsKKyAKKy0gICAgICBmaWxlX2VudHJpZXMtPm5saWJzID0gY2FjaGVfZW50cnlfb2xkX2NvdW50OworKyAgICAgIGZpbGVfZW50cmllcy0+bmxpYnMgPSB3cml0ZTMyKGNhY2hlX2VudHJ5X29sZF9jb3VudCwgYmUpOworICAgICB9CisgCisgICBzdHJ1Y3QgY2FjaGVfZmlsZV9uZXcgKmZpbGVfZW50cmllc19uZXcgPSBOVUxMOworQEAgLTMzMCw4ICszNTgsOCBAQCBzYXZlX2NhY2hlIChjb25zdCBjaGFyICpjYWNoZV9uYW1lKQorICAgICAgIG1lbWNweSAoZmlsZV9lbnRyaWVzX25ldy0+dmVyc2lvbiwgQ0FDSEVfVkVSU0lPTiwKKyAJICAgICAgc2l6ZW9mIENBQ0hFX1ZFUlNJT04gLSAxKTsKKyAKKy0gICAgICBmaWxlX2VudHJpZXNfbmV3LT5ubGlicyA9IGNhY2hlX2VudHJ5X2NvdW50OworLSAgICAgIGZpbGVfZW50cmllc19uZXctPmxlbl9zdHJpbmdzID0gdG90YWxfc3RybGVuOworKyAgICAgIGZpbGVfZW50cmllc19uZXctPm5saWJzID0gd3JpdGUzMihjYWNoZV9lbnRyeV9jb3VudCwgYmUpOworKyAgICAgIGZpbGVfZW50cmllc19uZXctPmxlbl9zdHJpbmdzID0gd3JpdGUzMih0b3RhbF9zdHJsZW4sIGJlKTsKKyAgICAgfQorIAorICAgLyogUGFkIGZvciBhbGlnbm1lbnQgb2YgY2FjaGVfZmlsZV9uZXcuICAqLworQEAgLTM1OCw5ICszODYsOSBAQCBzYXZlX2NhY2hlIChjb25zdCBjaGFyICpjYWNoZV9uYW1lKQorICAgICAgIC8qIEZpcnN0IHRoZSBsaWJyYXJ5LiAgKi8KKyAgICAgICBpZiAob3B0X2Zvcm1hdCAhPSAyICYmIGVudHJ5LT5od2NhcCA9PSAwKQorIAl7CistCSAgZmlsZV9lbnRyaWVzLT5saWJzW2lkeF9vbGRdLmZsYWdzID0gZW50cnktPmZsYWdzOworKwkgIGZpbGVfZW50cmllcy0+bGlic1tpZHhfb2xkXS5mbGFncyA9IHdyaXRlMzIoZW50cnktPmZsYWdzLCBiZSk7CisgCSAgLyogWFhYOiBBY3R1YWxseSB3ZSBjYW4gb3B0aW1pemUgaGVyZSBhbmQgcmVtb3ZlIGR1cGxpY2F0ZXMuICAqLworLQkgIGZpbGVfZW50cmllcy0+bGlic1tpZHhfb2xkXS5rZXkgPSBzdHJfb2Zmc2V0ICsgcGFkOworKwkgIGZpbGVfZW50cmllcy0+bGlic1tpZHhfb2xkXS5rZXkgPSB3cml0ZTMyKHN0cl9vZmZzZXQgKyBwYWQsIGJlKTsKKyAJfQorICAgICAgIGlmIChvcHRfZm9ybWF0ICE9IDApCisgCXsKK0BAIC0zNjgsMTAgKzM5NiwxMCBAQCBzYXZlX2NhY2hlIChjb25zdCBjaGFyICpjYWNoZV9uYW1lKQorIAkgICAgIG5vdCBkb2luZyBzbyBtYWtlcyB0aGUgY29kZSBlYXNpZXIsIHRoZSBzdHJpbmcgdGFibGUKKyAJICAgICBhbHdheXMgYmVnaW5zIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRoZSBuZXcgY2FjaGUKKyAJICAgICBzdHJ1Y3QuICAqLworLQkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10uZmxhZ3MgPSBlbnRyeS0+ZmxhZ3M7CistCSAgZmlsZV9lbnRyaWVzX25ldy0+bGlic1tpZHhfbmV3XS5vc3ZlcnNpb24gPSBlbnRyeS0+b3N2ZXJzaW9uOworLQkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10uaHdjYXAgPSBlbnRyeS0+aHdjYXA7CistCSAgZmlsZV9lbnRyaWVzX25ldy0+bGlic1tpZHhfbmV3XS5rZXkgPSBzdHJfb2Zmc2V0OworKwkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10uZmxhZ3MgPSB3cml0ZTMyKGVudHJ5LT5mbGFncywgYmUpOworKwkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10ub3N2ZXJzaW9uID0gd3JpdGUzMihlbnRyeS0+b3N2ZXJzaW9uLCBiZSk7CisrCSAgZmlsZV9lbnRyaWVzX25ldy0+bGlic1tpZHhfbmV3XS5od2NhcCA9IHdyaXRlNjQoZW50cnktPmh3Y2FwLCBiZSk7CisrCSAgZmlsZV9lbnRyaWVzX25ldy0+bGlic1tpZHhfbmV3XS5rZXkgPSB3cml0ZTMyKHN0cl9vZmZzZXQsIGJlKTsKKyAJfQorIAorICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGVudHJ5LT5saWIpICsgMTsKK0BAIC0zNzksOSArNDA3LDkgQEAgc2F2ZV9jYWNoZSAoY29uc3QgY2hhciAqY2FjaGVfbmFtZSkKKyAgICAgICBzdHJfb2Zmc2V0ICs9IGxlbjsKKyAgICAgICAvKiBUaGVuIHRoZSBwYXRoLiAgKi8KKyAgICAgICBpZiAob3B0X2Zvcm1hdCAhPSAyICYmIGVudHJ5LT5od2NhcCA9PSAwKQorLQlmaWxlX2VudHJpZXMtPmxpYnNbaWR4X29sZF0udmFsdWUgPSBzdHJfb2Zmc2V0ICsgcGFkOworKwlmaWxlX2VudHJpZXMtPmxpYnNbaWR4X29sZF0udmFsdWUgPSB3cml0ZTMyKHN0cl9vZmZzZXQgKyBwYWQsIGJlKTsKKyAgICAgICBpZiAob3B0X2Zvcm1hdCAhPSAwKQorLQlmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLnZhbHVlID0gc3RyX29mZnNldDsKKysJZmlsZV9lbnRyaWVzX25ldy0+bGlic1tpZHhfbmV3XS52YWx1ZSA9IHdyaXRlMzIoc3RyX29mZnNldCwgYmUpOworICAgICAgIGxlbiA9IHN0cmxlbiAoZW50cnktPnBhdGgpICsgMTsKKyAgICAgICBzdHIgPSBtZW1wY3B5IChzdHIsIGVudHJ5LT5wYXRoLCBsZW4pOworICAgICAgIHN0cl9vZmZzZXQgKz0gbGVuOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbi1uZXNzX2hhbmRsaW5nX2ZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW4tbmVzc19oYW5kbGluZ19maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlY2ZlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW4tbmVzc19oYW5kbGluZ19maXgucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworRml4IHByb2JsZW0gZHVyaW5nIHBhcnNpbmcgb2YgRUxGIGhlYWRlcnMgZm9yIDY0Yml0IG9uIGJpZy1lbmRpYW4uCitTb21lIGhlYWRlciBmaWVsZHMgd2VyZSByZWFkIHdpdGggd3Jvbmcgc2l6ZS4KKworMjAxNC8xMC8yNAorUGFyIE9sc3NvbiA8UGFyLk9sc3NvbkB3aW5kcml2ZXIuY29tPgorU2hhbiBIYWkgPHNoYW4uaGFpQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9yZWFkZWxmbGliLmMgYi9yZWFkZWxmbGliLmMKK2luZGV4IDNmNWIyNWIuLjBiZjBkZTMgMTAwNjQ0CistLS0gYS9yZWFkZWxmbGliLmMKKysrKyBiL3JlYWRlbGZsaWIuYworQEAgLTI2MSw4ICsyNjEsOCBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisgICBpbnQgaTsKKyAgIHVuc2lnbmVkIGludCBqOworICAgRWxmNjRfQWRkciBsb2FkYWRkcjsKKy0gIHVuc2lnbmVkIGludCBkeW5hbWljX2FkZHI7CistICBzaXplX3QgZHluYW1pY19zaXplOworKyAgRWxmNjRfQWRkciBkeW5hbWljX2FkZHI7CisrICBFbGY2NF9Yd29yZCBkeW5hbWljX3NpemU7CisgICBjaGFyICpwcm9ncmFtX2ludGVycHJldGVyOworIAorICAgRWxmNjRfRWhkciAqZWxmX2hlYWRlcjsKK0BAIC0zMTEsNyArMzExLDcgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IGNoYXIgKmxpYiwgaW50ICpmbGFnLAorIAkgICAgZXJyb3IgKDAsIDAsIF8oIm1vcmUgdGhhbiBvbmUgZHluYW1pYyBzZWdtZW50XG4iKSk7CisgCisgCSAgZHluYW1pY19hZGRyID0gcmVhZDY0KHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSk7CistCSAgZHluYW1pY19zaXplID0gcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSk7CisrCSAgZHluYW1pY19zaXplID0gcmVhZDY0KHNlZ21lbnQtPnBfZmlsZXN6LCBiZSk7CisgCSAgYnJlYWs7CisgCisgCWNhc2UgUFRfSU5URVJQOgorQEAgLTMyOSwxMSArMzI5LDExIEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBjb25zdCBjaGFyICpsaWIsIGludCAqZmxhZywKKyAJICBicmVhazsKKyAKKyAJY2FzZSBQVF9OT1RFOgorLQkgIGlmICghKm9zdmVyc2lvbiAmJiByZWFkMzIoc2VnbWVudC0+cF9maWxlc3osIGJlKSA+PSAzMiAmJiByZWFkMzIoc2VnbWVudC0+cF9hbGlnbiwgYmUpID49IDQpCisrCSAgaWYgKCEqb3N2ZXJzaW9uICYmIHJlYWQ2NChzZWdtZW50LT5wX2ZpbGVzeiwgYmUpID49IDMyICYmIHJlYWQ2NChzZWdtZW50LT5wX2FsaWduLCBiZSkgPj0gNCkKKyAJICAgIHsKKyAJICAgICAgRWxmNjRfV29yZCAqYWJpX25vdGUgPSAoRWxmNjRfV29yZCAqKSAoZmlsZV9jb250ZW50cworIAkJCQkJCSAgICAgKyByZWFkNjQoc2VnbWVudC0+cF9vZmZzZXQsIGJlKSk7CistCSAgICAgIEVsZjY0X0FkZHIgc2l6ZSA9IHJlYWQzMihzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworKwkgICAgICBFbGY2NF9Yd29yZCBzaXplID0gcmVhZDY0KHNlZ21lbnQtPnBfZmlsZXN6LCBiZSk7CisgCisgCSAgICAgIHdoaWxlIChyZWFkMzIoYWJpX25vdGUgWzBdLCBiZSkgIT0gNCB8fCByZWFkMzIoYWJpX25vdGUgWzFdLCBiZSkgIT0gMTYKKyAJCSAgICAgfHwgcmVhZDMyKGFiaV9ub3RlIFsyXSwgYmUpICE9IDEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW5lc3MtaGVhZGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbmVzcy1oZWFkZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4YjJjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW5lc3MtaGVhZGVyLnBhdGNoCkBAIC0wLDAgKzEsMTEzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2ZpeCBwb2t5IHBhdGNoXQorCitUaGlzIHBhdGNoIGZpeGVzIGJ1aWxkIGlzc3VlcyB3aXRoIGEgcHJldmlvdXMgZW5kaWFuLW5lc3NfaGFuZGxpbmcucGF0Y2ggb24KK2Rpc3Ryb3MgdGhhdCBkb24ndCBoYXZlIG1hY3JvcyByZWZlcmVuY2VkCisKKzcvMjAvMjAxMQorTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KKworZGlmZiAtcHVyTiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvZW5kaWFuX2V4dHJhLmggbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW5fZXh0cmEuaAorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9lbmRpYW5fZXh0cmEuaAkxOTY5LTEyLTMxIDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYwMAorKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuX2V4dHJhLmgJMjAxMS0wNy0xOSAxODowOToxNC4zMjMwNDg0MTcgLTA1MDAKK0BAIC0wLDAgKzEsNjQgQEAKKysvKiBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTYsIDE5OTcsIDIwMDAsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxlbmRpYW4uaD4KKysKKysjaWZuZGVmCV9FTkRJQU5fRVhUUkFfSAorKyNkZWZpbmUJX0VORElBTl9FWFRSQV9ICTEKKysKKysvKiBEb24ndCByZWRlZmluZSB0aGVzZSBtYWNyb3MgaWYgdGhleSBhbHJlYWR5IGV4aXN0ICovCisrI2lmbmRlZiBodG9iZTE2CisrI2lmZGVmIF9fVVNFX0JTRAorKy8qIENvbnZlcnNpb24gaW50ZXJmYWNlcy4gICovCisrIyBpbmNsdWRlIDxieXRlc3dhcC5oPgorKworKyMgaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorKyMgIGRlZmluZSBodG9iZTE2KHgpIF9fYnN3YXBfMTYgKHgpCisrIyAgZGVmaW5lIGh0b2xlMTYoeCkgKHgpCisrIyAgZGVmaW5lIGJlMTZ0b2goeCkgX19ic3dhcF8xNiAoeCkKKysjICBkZWZpbmUgbGUxNnRvaCh4KSAoeCkKKysKKysjICBkZWZpbmUgaHRvYmUzMih4KSBfX2Jzd2FwXzMyICh4KQorKyMgIGRlZmluZSBodG9sZTMyKHgpICh4KQorKyMgIGRlZmluZSBiZTMydG9oKHgpIF9fYnN3YXBfMzIgKHgpCisrIyAgZGVmaW5lIGxlMzJ0b2goeCkgKHgpCisrCisrIyAgZGVmaW5lIGh0b2JlNjQoeCkgX19ic3dhcF82NCAoeCkKKysjICBkZWZpbmUgaHRvbGU2NCh4KSAoeCkKKysjICBkZWZpbmUgYmU2NHRvaCh4KSBfX2Jzd2FwXzY0ICh4KQorKyMgIGRlZmluZSBsZTY0dG9oKHgpICh4KQorKyMgZWxzZQorKyMgIGRlZmluZSBodG9iZTE2KHgpICh4KQorKyMgIGRlZmluZSBodG9sZTE2KHgpIF9fYnN3YXBfMTYgKHgpCisrIyAgZGVmaW5lIGJlMTZ0b2goeCkgKHgpCisrIyAgZGVmaW5lIGxlMTZ0b2goeCkgX19ic3dhcF8xNiAoeCkKKysKKysjICBkZWZpbmUgaHRvYmUzMih4KSAoeCkKKysjICBkZWZpbmUgaHRvbGUzMih4KSBfX2Jzd2FwXzMyICh4KQorKyMgIGRlZmluZSBiZTMydG9oKHgpICh4KQorKyMgIGRlZmluZSBsZTMydG9oKHgpIF9fYnN3YXBfMzIgKHgpCisrCisrIyAgZGVmaW5lIGh0b2JlNjQoeCkgKHgpCisrIyAgZGVmaW5lIGh0b2xlNjQoeCkgX19ic3dhcF82NCAoeCkKKysjICBkZWZpbmUgYmU2NHRvaCh4KSAoeCkKKysjICBkZWZpbmUgbGU2NHRvaCh4KSBfX2Jzd2FwXzY0ICh4KQorKyMgZW5kaWYKKysjZW5kaWYKKysjZW5kaWYKKysKKysjZW5kaWYJLyogZW5kaWFuX2V4dHJhLmggKi8KK2RpZmYgLXB1ck4gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2NhY2hlLmMgbGRjb25maWctbmF0aXZlLTIuMTIuMS9jYWNoZS5jCistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2NhY2hlLmMJMjAxMS0wNy0xOSAxODoyMToyOC4zNDcwNDEzMDEgLTA1MDAKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2NhY2hlLmMJMjAxMS0wNy0xOSAxODoyMjo1NC4xMTgwNDgwNjQgLTA1MDAKK0BAIC0zOSw2ICszOSw4IEBACisgIyBkZWZpbmUgTl8obXNnaWQpICBtc2dpZAorICNkZWZpbmUgXyhtc2cpIG1zZworIAorKyNpbmNsdWRlICJlbmRpYW5fZXh0cmEuaCIKKysKKyBleHRlcm4gaW50IGJlOworIAorIHN0YXRpYyB1aW50MTZfdCB3cml0ZTE2KHVpbnQxNl90IHgsIGludCBiZSkKK2RpZmYgLXB1ck4gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3JlYWRlbGZsaWIuYyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRlbGZsaWIuYworLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkZWxmbGliLmMJMjAxMS0wNy0xOSAxODoyMToyOC4zNDYwNDE1OTMgLTA1MDAKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRlbGZsaWIuYwkyMDExLTA3LTE5IDE4OjIzOjA1LjMyNDA1OTg3NSAtMDUwMAorQEAgLTI1LDYgKzI1LDkgQEAKKyAKKyAvKiBjaGVja19wdHIgY2hlY2tzIHRoYXQgYSBwb2ludGVyIGlzIGluIHRoZSBtbWFwZWQgZmlsZSBhbmQgZG9lc24ndAorICAgIHBvaW50IG91dHNpZGUgaXQuICAqLworKworKyNpbmNsdWRlICJlbmRpYW5fZXh0cmEuaCIKKysKKyAjdW5kZWYgY2hlY2tfcHRyCisgI2RlZmluZSBjaGVja19wdHIocHRyKQkJCQkJCVwKKyBkbwkJCQkJCQkJXAorZGlmZiAtcHVyTiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGxpYi5jIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGxpYi5jCistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3JlYWRsaWIuYwkyMDExLTA3LTE5IDE4OjIxOjI4LjM0NjA0MTU5MyAtMDUwMAorKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGxpYi5jCTIwMTEtMDctMTkgMTg6MjM6MjMuODc3MDQ2MjEwIC0wNTAwCitAQCAtNDAsNiArNDAsOCBAQAorIAorICNpbmNsdWRlICJsZGNvbmZpZy5oIgorIAorKyNpbmNsdWRlICJlbmRpYW5fZXh0cmEuaCIKKysKKyAjZGVmaW5lIF8obXNnKSBtc2cKKyAKKyAjZGVmaW5lIEVsZjMyX0NMQVNTIEVMRkNMQVNTMzIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9mbGFnX2ZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9mbGFnX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTlhYWI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2ZsYWdfZml4LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1RoZSBuYXRpdmUgdmVyc2lvbiBvZiBsZGNvbmZpZyB3YXMgdXNpbmcgbmF0aXZlIGRlZmluaXRpb24gb2YgTERfU08gKGkuZS4gCitsZC1saW51eC14ODYtNjQuc28uMiApIHdoaWNoIGlzIG5vdCBjb3JyZWN0IGZvciBkb2luZyB0aGUgY3Jvc3MgbGRjb25maWcuCitUaGlzIHdhcyBjYXVzaW5nIGxpYmMuc28gb24gdGhlIHRhcmdldCBtYXJrZWQgYXMgRUxGIGxpYiByYXRoZXIgdGhhbiAKK0ZMQUdfRUxGX0xJQkM2IGluIHRoZSBsZC5zby5jYWNoZS4KKworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8wNC80CisKK0luZGV4OiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkbGliLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYworQEAgLTUxLDYgKzUxLDEwIEBAIHN0cnVjdCBrbm93bl9uYW1lcworICAgaW50IGZsYWc7CisgfTsKKyAKKysvKiBkb24ndCB1c2UgaG9zdCdzIGRlZmluaXRpb24gb2YgTERfU08gKi8KKysjdW5kZWYgTERfU08gCisrI2RlZmluZSBMRF9TTyAibGQuc28uMSIKKysKKyBzdGF0aWMgc3RydWN0IGtub3duX25hbWVzIGludGVycHJldGVyc1tdID0KKyB7CisgICB7ICIvbGliLyIgTERfU08sIEZMQUdfRUxGX0xJQkM2IH0sCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWctZGVmYXVsdC10by1hbGwtbXVsdGlsaWItZGlycy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy1kZWZhdWx0LXRvLWFsbC1tdWx0aWxpYi1kaXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZDRmNmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWctZGVmYXVsdC10by1hbGwtbXVsdGlsaWItZGlycy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCittYWtlIGxkY29uZmlnIGRlZmF1bHQgdG8gYm90aCAvbGliKy91c3IvbGliLCAvbGliMzIrL3Vzci9saWIzMiBhbmQKKy9saWI2NCsvdXNyL2xpYjY0IG9uIGJpLUFCSSBhcmNoaXRlY3R1cmVzLgorCistLS0KKyBsZGNvbmZpZy5jIHwgICAxMCArKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKykKKworZGlmZiAtdXJwTiBhL2xkY29uZmlnLmMgYi9sZGNvbmZpZy5jCistLS0gYS9sZGNvbmZpZy5jCisrKysgYi9sZGNvbmZpZy5jCitAQCAtNTIsNyArNTIsMTEgQEAKKyAKKyAjZGVmaW5lIFNZU0NPTkZESVIgIi9ldGMiCisgI2RlZmluZSBMSUJESVIgIi91c3IvbGliIgorKyNkZWZpbmUgTElCRElSMzIgIi91c3IvbGliMzIiCisrI2RlZmluZSBMSUJESVI2NCAiL3Vzci9saWI2NCIKKyAjZGVmaW5lIFNMSUJESVIgIi9saWIiCisrI2RlZmluZSBTTElCRElSMzIgIi9saWIzMiIKKysjZGVmaW5lIFNMSUJESVI2NCAiL2xpYjY0IgorICMgZGVmaW5lIE5fKG1zZ2lkKSAgbXNnaWQKKyAjZGVmaW5lIF8obXNnKSBtc2cKKyAKK0BAIC0xMzczLDYgKzEzNzcsMTIgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgIGFkZF9zeXN0ZW1fZGlyIChTTElCRElSKTsKKyAgICAgICBpZiAoc3RyY21wIChTTElCRElSLCBMSUJESVIpKQorIAlhZGRfc3lzdGVtX2RpciAoTElCRElSKTsKKysgICAgICBhZGRfc3lzdGVtX2RpciAoU0xJQkRJUjMyKTsKKysgICAgICBpZiAoc3RyY21wIChTTElCRElSMzIsIExJQkRJUjMyKSkKKysJYWRkX3N5c3RlbV9kaXIgKExJQkRJUjMyKTsKKysgICAgICBhZGRfc3lzdGVtX2RpciAoU0xJQkRJUjY0KTsKKysgICAgICBpZiAoc3RyY21wIChTTElCRElSNjQsIExJQkRJUjY0KSkKKysJYWRkX3N5c3RlbV9kaXIgKExJQkRJUjY0KTsKKyAgICAgfQorIAorICAgY29uc3QgY2hhciAqYXV4X2NhY2hlX2ZpbGUgPSBfUEFUSF9MRENPTkZJR19BVVhfQ0FDSEU7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWctbmF0aXZlLTIuMTIuMS50YXIuYnoyIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEudGFyLmJ6MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzFlNzk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEudGFyLmJ6MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI5ODZlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDQ3MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworZW5hYmxlIHN0YW5kYWxvbmUgYnVpbGRpbmcgb2YgbGRjb25maWcKKworLS0tCisgY2FjaGUuYyAgICAgICAgfCAgIDExICstCisgY2hyb290X2Nhbm9uLmMgfCAgICA3ICsKKyBkbC1jYWNoZS5jICAgICB8ICAyMzUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZGwtY2FjaGUuaCAgICAgfCAgICAzIAorIGxkY29uZmlnLmMgICAgIHwgICAyNyArKysrLS0KKyByZWFkbGliLmMgICAgICB8ICAgIDcgKworIHhzdHJkdXAuYyAgICAgIHwgICAxMSAtLQorIDcgZmlsZXMgY2hhbmdlZCwgNDUgaW5zZXJ0aW9ucygrKSwgMjU2IGRlbGV0aW9ucygtKQorCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9jYWNoZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2NhY2hlLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2NhY2hlLmMKK0BAIC0xNiw2ICsxNiw5IEBACisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKyAKKysjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPGVycm9yLmg+CisgI2luY2x1ZGUgPGRpcmVudC5oPgorQEAgLTMxLDggKzM0LDEwIEBACisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorLSNpbmNsdWRlIDxsZGNvbmZpZy5oPgorLSNpbmNsdWRlIDxkbC1jYWNoZS5oPgorKyNpbmNsdWRlICJsZGNvbmZpZy5oIgorKyNpbmNsdWRlICJkbC1jYWNoZS5oIgorKyMgZGVmaW5lIE5fKG1zZ2lkKSAgbXNnaWQKKysjZGVmaW5lIF8obXNnKSBtc2cKKyAKKyBzdHJ1Y3QgY2FjaGVfZW50cnkKKyB7CitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9jaHJvb3RfY2Fub24uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9jaHJvb3RfY2Fub24uYworKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvY2hyb290X2Nhbm9uLmMKK0BAIC0xNyw2ICsxNyw5IEBACisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKyAKKysjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CitAQCAtMjcsNyArMzAsOSBAQAorICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgCistI2luY2x1ZGUgPGxkY29uZmlnLmg+CisrI2luY2x1ZGUgImxkY29uZmlnLmgiCisrCisrI2RlZmluZSBfX3NldF9lcnJubyhWYWwpIGVycm5vID0gKFZhbCkKKyAKKyAjaWZuZGVmIFBBVEhfTUFYCisgI2RlZmluZSBQQVRIX01BWCAxMDI0CitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9kbC1jYWNoZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2RsLWNhY2hlLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2RsLWNhY2hlLmMKK0BAIC0yMCwxMiArMjAsMTIgQEAKKyAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorLSNpbmNsdWRlIDxsZHNvZGVmcy5oPgorKy8vI2luY2x1ZGUgImxkc29kZWZzLmgiCisgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisgI2luY2x1ZGUgPGRsLWNhY2hlLmg+CisgI2luY2x1ZGUgPGRsLXByb2NpbmZvLmg+CisgCistI2luY2x1ZGUgPHN0ZGlvLWNvbW1vbi9faXRvYS5oPgorKy8vI2luY2x1ZGUgIl9pdG9hLmgiCisgCisgI2lmbmRlZiBfRExfUExBVEZPUk1TX0NPVU5UCisgIyBkZWZpbmUgX0RMX1BMQVRGT1JNU19DT1VOVCAwCitAQCAtMzksMTAzICszOSw3IEBAIHN0YXRpYyBzaXplX3QgY2FjaGVzaXplOworIC8qIDEgaWYgY2FjaGVfZGF0YSArIFBUUiBwb2ludHMgaW50byB0aGUgY2FjaGUuICAqLworICNkZWZpbmUgX2RsX2NhY2hlX3ZlcmlmeV9wdHIocHRyKSAocHRyIDwgY2FjaGVfZGF0YV9zaXplKQorIAorLSNkZWZpbmUgU0VBUkNIX0NBQ0hFKGNhY2hlKSBcCistLyogV2UgdXNlIGJpbmFyeSBzZWFyY2ggc2luY2UgdGhlIHRhYmxlIGlzIHNvcnRlZCBpbiB0aGUgY2FjaGUgZmlsZS4JICAgICAgXAorLSAgIFRoZSBmaXJzdCBtYXRjaGluZyBlbnRyeSBpbiB0aGUgdGFibGUgaXMgcmV0dXJuZWQuCQkJICAgICAgXAorLSAgIEl0IGlzIGltcG9ydGFudCB0byB1c2UgdGhlIHNhbWUgYWxnb3JpdGhtIGFzIHVzZWQgd2hpbGUgZ2VuZXJhdGluZwkgICAgICBcCistICAgdGhlIGNhY2hlIGZpbGUuICAqLwkJCQkJCQkgICAgICBcCistZG8JCQkJCQkJCQkgICAgICBcCistICB7CQkJCQkJCQkJICAgICAgXAorLSAgICBsZWZ0ID0gMDsJCQkJCQkJCSAgICAgIFwKKy0gICAgcmlnaHQgPSBjYWNoZS0+bmxpYnMgLSAxOwkJCQkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistICAgIHdoaWxlIChsZWZ0IDw9IHJpZ2h0KQkJCQkJCSAgICAgIFwKKy0gICAgICB7CQkJCQkJCQkJICAgICAgXAorLQlfX3R5cGVvZl9fIChjYWNoZS0+bGlic1swXS5rZXkpIGtleTsJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JbWlkZGxlID0gKGxlZnQgKyByaWdodCkgLyAyOwkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0Ja2V5ID0gY2FjaGUtPmxpYnNbbWlkZGxlXS5rZXk7CQkJCQkgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLQkvKiBNYWtlIHN1cmUgc3RyaW5nIHRhYmxlIGluZGljZXMgYXJlIG5vdCBib2d1cyBiZWZvcmUgdXNpbmcJICAgICAgXAorLQkgICB0aGVtLiAgKi8JCQkJCQkJICAgICAgXAorLQlpZiAoISBfZGxfY2FjaGVfdmVyaWZ5X3B0ciAoa2V5KSkJCQkJICAgICAgXAorLQkgIHsJCQkJCQkJCSAgICAgIFwKKy0JICAgIGNtcHJlcyA9IDE7CQkJCQkJCSAgICAgIFwKKy0JICAgIGJyZWFrOwkJCQkJCQkgICAgICBcCistCSAgfQkJCQkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JLyogQWN0dWFsbHkgY29tcGFyZSB0aGUgZW50cnkgd2l0aCB0aGUga2V5LiAgKi8JCQkgICAgICBcCistCWNtcHJlcyA9IF9kbF9jYWNoZV9saWJjbXAgKG5hbWUsIGNhY2hlX2RhdGEgKyBrZXkpOwkJICAgICAgXAorLQlpZiAoX19idWlsdGluX2V4cGVjdCAoY21wcmVzID09IDAsIDApKQkJCQkgICAgICBcCistCSAgewkJCQkJCQkJICAgICAgXAorLQkgICAgLyogRm91bmQgaXQuICBMRUZUIG5vdyBtYXJrcyB0aGUgbGFzdCBlbnRyeSBmb3Igd2hpY2ggd2UJICAgICAgXAorLQkgICAgICAga25vdyB0aGUgbmFtZSBpcyBjb3JyZWN0LiAgKi8JCQkJICAgICAgXAorLQkgICAgbGVmdCA9IG1pZGRsZTsJCQkJCQkgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLQkgICAgLyogVGhlcmUgbWlnaHQgYmUgZW50cmllcyB3aXRoIHRoaXMgbmFtZSBiZWZvcmUgdGhlIG9uZSB3ZQkgICAgICBcCistCSAgICAgICBmb3VuZC4gIFNvIHdlIGhhdmUgdG8gZmluZCB0aGUgYmVnaW5uaW5nLiAgKi8JCSAgICAgIFwKKy0JICAgIHdoaWxlIChtaWRkbGUgPiAwKQkJCQkJCSAgICAgIFwKKy0JICAgICAgewkJCQkJCQkJICAgICAgXAorLQkJX190eXBlb2ZfXyAoY2FjaGUtPmxpYnNbMF0ua2V5KSBrZXk7CQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JCWtleSA9IGNhY2hlLT5saWJzW21pZGRsZSAtIDFdLmtleTsJCQkgICAgICBcCistCQkvKiBNYWtlIHN1cmUgc3RyaW5nIHRhYmxlIGluZGljZXMgYXJlIG5vdCBib2d1cyBiZWZvcmUJICAgICAgXAorLQkJICAgdXNpbmcgdGhlbS4gICovCQkJCQkgICAgICBcCistCQlpZiAoISBfZGxfY2FjaGVfdmVyaWZ5X3B0ciAoa2V5KQkJCSAgICAgIFwKKy0JCSAgICAvKiBBY3R1YWxseSBjb21wYXJlIHRoZSBlbnRyeS4gICovCQkJICAgICAgXAorLQkJICAgIHx8IF9kbF9jYWNoZV9saWJjbXAgKG5hbWUsIGNhY2hlX2RhdGEgKyBrZXkpICE9IDApCSAgICAgIFwKKy0JCSAgYnJlYWs7CQkJCQkJICAgICAgXAorLQkJLS1taWRkbGU7CQkJCQkJICAgICAgXAorLQkgICAgICB9CQkJCQkJCQkgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLQkgICAgZG8JCQkJCQkJCSAgICAgIFwKKy0JICAgICAgewkJCQkJCQkJICAgICAgXAorLQkJaW50IGZsYWdzOwkJCQkJCSAgICAgIFwKKy0JCV9fdHlwZW9mX18gKGNhY2hlLT5saWJzWzBdKSAqbGliID0gJmNhY2hlLT5saWJzW21pZGRsZV07ICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JCS8qIE9ubHkgcGVyZm9ybSB0aGUgbmFtZSB0ZXN0IGlmIG5lY2Vzc2FyeS4gICovCQkgICAgICBcCistCQlpZiAobWlkZGxlID4gbGVmdAkJCQkJICAgICAgXAorLQkJICAgIC8qIFdlIGhhdmVuJ3Qgc2VlbiB0aGlzIHN0cmluZyBzbyBmYXIuICBUZXN0IHdoZXRoZXIgdGhlICBcCistCQkgICAgICAgaW5kZXggaXMgb2sgYW5kIHdoZXRoZXIgdGhlIG5hbWUgbWF0Y2hlcy4gIE90aGVyd2lzZSAgIFwKKy0JCSAgICAgICB3ZSBhcmUgZG9uZS4gICovCQkJCQkgICAgICBcCistCQkgICAgJiYgKCEgX2RsX2NhY2hlX3ZlcmlmeV9wdHIgKGxpYi0+a2V5KQkJICAgICAgXAorLQkJCXx8IChfZGxfY2FjaGVfbGliY21wIChuYW1lLCBjYWNoZV9kYXRhICsgbGliLT5rZXkpICAgIFwKKy0JCQkgICAgIT0gMCkpKQkJCQkJICAgICAgXAorLQkJICBicmVhazsJCQkJCQkgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLQkJZmxhZ3MgPSBsaWItPmZsYWdzOwkJCQkJICAgICAgXAorLQkJaWYgKF9kbF9jYWNoZV9jaGVja19mbGFncyAoZmxhZ3MpCQkJICAgICAgXAorLQkJICAgICYmIF9kbF9jYWNoZV92ZXJpZnlfcHRyIChsaWItPnZhbHVlKSkJCSAgICAgIFwKKy0JCSAgewkJCQkJCQkgICAgICBcCistCQkgICAgaWYgKGJlc3QgPT0gTlVMTCB8fCBmbGFncyA9PSBHTFJPKGRsX2NvcnJlY3RfY2FjaGVfaWQpKSAgIFwKKy0JCSAgICAgIHsJCQkJCQkJICAgICAgXAorLQkJCUhXQ0FQX0NIRUNLOwkJCQkJICAgICAgXAorLQkJCWJlc3QgPSBjYWNoZV9kYXRhICsgbGliLT52YWx1ZTsJCQkgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLQkJCWlmIChmbGFncyA9PSBHTFJPKGRsX2NvcnJlY3RfY2FjaGVfaWQpKQkJICAgICAgXAorLQkJCSAgLyogV2UndmUgZm91bmQgYW4gZXhhY3QgbWF0Y2ggZm9yIHRoZSBzaGFyZWQJICAgICAgXAorLQkJCSAgICAgb2JqZWN0IGFuZCBubyBnZW5lcmFsIGBFTEYnIHJlbGVhc2UuICBTdG9wCSAgICAgIFwKKy0JCQkgICAgIHNlYXJjaGluZy4gICovCQkJCSAgICAgIFwKKy0JCQkgIGJyZWFrOwkJCQkJICAgICAgXAorLQkJICAgICAgfQkJCQkJCQkgICAgICBcCistCQkgIH0JCQkJCQkJICAgICAgXAorLQkgICAgICB9CQkJCQkJCQkgICAgICBcCistCSAgICB3aGlsZSAoKyttaWRkbGUgPD0gcmlnaHQpOwkJCQkJICAgICAgXAorLQkgICAgYnJlYWs7CQkJCQkJCSAgICAgIFwKKy0JfQkJCQkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JaWYgKGNtcHJlcyA8IDApCQkJCQkJCSAgICAgIFwKKy0JICBsZWZ0ID0gbWlkZGxlICsgMTsJCQkJCQkgICAgICBcCistCWVsc2UJCQkJCQkJCSAgICAgIFwKKy0JICByaWdodCA9IG1pZGRsZSAtIDE7CQkJCQkJICAgICAgXAorLSAgICAgIH0JCQkJCQkJCQkgICAgICBcCistICB9CQkJCQkJCQkJICAgICAgXAorLXdoaWxlICgwKQorLQorLQorIGludAorLWludGVybmFsX2Z1bmN0aW9uCisgX2RsX2NhY2hlX2xpYmNtcCAoY29uc3QgY2hhciAqcDEsIGNvbnN0IGNoYXIgKnAyKQorIHsKKyAgIHdoaWxlICgqcDEgIT0gJ1wwJykKK0BAIC0xNzIsMTM5ICs3NiwzIEBAIF9kbF9jYWNoZV9saWJjbXAgKGNvbnN0IGNoYXIgKnAxLCBjb25zdCAKKyAgICAgfQorICAgcmV0dXJuICpwMSAtICpwMjsKKyB9CistCistCistLyogTG9vayB1cCBOQU1FIGluIGxkLnNvLmNhY2hlIGFuZCByZXR1cm4gdGhlIGZpbGUgbmFtZSBzdG9yZWQgdGhlcmUsCistICAgb3IgbnVsbCBpZiBub25lIGlzIGZvdW5kLiAgKi8KKy0KKy1jb25zdCBjaGFyICoKKy1pbnRlcm5hbF9mdW5jdGlvbgorLV9kbF9sb2FkX2NhY2hlX2xvb2t1cCAoY29uc3QgY2hhciAqbmFtZSkKKy17CistICBpbnQgbGVmdCwgcmlnaHQsIG1pZGRsZTsKKy0gIGludCBjbXByZXM7CistICBjb25zdCBjaGFyICpjYWNoZV9kYXRhOworLSAgdWludDMyX3QgY2FjaGVfZGF0YV9zaXplOworLSAgY29uc3QgY2hhciAqYmVzdDsKKy0KKy0gIC8qIFByaW50IGEgbWVzc2FnZSBpZiB0aGUgbG9hZGluZyBvZiBsaWJzIGlzIHRyYWNlZC4gICovCistICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUywgMCkpCistICAgIF9kbF9kZWJ1Z19wcmludGYgKCIgc2VhcmNoIGNhY2hlPSVzXG4iLCBMRF9TT19DQUNIRSk7CistCistICBpZiAoY2FjaGUgPT0gTlVMTCkKKy0gICAgeworLSAgICAgIC8qIFJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLiAgKi8KKy0gICAgICB2b2lkICpmaWxlID0gX2RsX3N5c2RlcF9yZWFkX3dob2xlX2ZpbGUgKExEX1NPX0NBQ0hFLCAmY2FjaGVzaXplLAorLQkJCQkJICAgICAgIFBST1RfUkVBRCk7CistCistICAgICAgLyogV2UgY2FuIGhhbmRsZSB0aHJlZSBkaWZmZXJlbnQgY2FjaGUgZmlsZSBmb3JtYXRzIGhlcmU6CistCSAtIHRoZSBvbGQgbGliYzUvZ2xpYmMyLjAvMi4xIGZvcm1hdAorLQkgLSB0aGUgb2xkIGZvcm1hdCB3aXRoIHRoZSBuZXcgZm9ybWF0IGluIGl0CistCSAtIG9ubHkgdGhlIG5ldyBmb3JtYXQKKy0JIFRoZSBmb2xsb3dpbmcgY2hlY2tzIGlmIHRoZSBjYWNoZSBjb250YWlucyBhbnkgb2YgdGhlc2UgZm9ybWF0cy4gICovCistICAgICAgaWYgKGZpbGUgIT0gTUFQX0ZBSUxFRCAmJiBjYWNoZXNpemUgPiBzaXplb2YgKmNhY2hlCistCSAgJiYgbWVtY21wIChmaWxlLCBDQUNIRU1BR0lDLCBzaXplb2YgQ0FDSEVNQUdJQyAtIDEpID09IDApCistCXsKKy0JICBzaXplX3Qgb2Zmc2V0OworLQkgIC8qIExvb2tzIG9rLiAgKi8KKy0JICBjYWNoZSA9IGZpbGU7CistCistCSAgLyogQ2hlY2sgZm9yIG5ldyB2ZXJzaW9uLiAgKi8KKy0JICBvZmZzZXQgPSBBTElHTl9DQUNIRSAoc2l6ZW9mIChzdHJ1Y3QgY2FjaGVfZmlsZSkKKy0JCQkJKyBjYWNoZS0+bmxpYnMgKiBzaXplb2YgKHN0cnVjdCBmaWxlX2VudHJ5KSk7CistCistCSAgY2FjaGVfbmV3ID0gKHN0cnVjdCBjYWNoZV9maWxlX25ldyAqKSAoKHZvaWQgKikgY2FjaGUgKyBvZmZzZXQpOworLQkgIGlmIChjYWNoZXNpemUgPCAob2Zmc2V0ICsgc2l6ZW9mIChzdHJ1Y3QgY2FjaGVfZmlsZV9uZXcpKQorLQkgICAgICB8fCBtZW1jbXAgKGNhY2hlX25ldy0+bWFnaWMsIENBQ0hFTUFHSUNfVkVSU0lPTl9ORVcsCistCQkJIHNpemVvZiBDQUNIRU1BR0lDX1ZFUlNJT05fTkVXIC0gMSkgIT0gMCkKKy0JICAgIGNhY2hlX25ldyA9ICh2b2lkICopIC0xOworLQl9CistICAgICAgZWxzZSBpZiAoZmlsZSAhPSBNQVBfRkFJTEVEICYmIGNhY2hlc2l6ZSA+IHNpemVvZiAqY2FjaGVfbmV3CistCSAgICAgICAmJiBtZW1jbXAgKGZpbGUsIENBQ0hFTUFHSUNfVkVSU0lPTl9ORVcsCistCQkJICBzaXplb2YgQ0FDSEVNQUdJQ19WRVJTSU9OX05FVyAtIDEpID09IDApCistCXsKKy0JICBjYWNoZV9uZXcgPSBmaWxlOworLQkgIGNhY2hlID0gZmlsZTsKKy0JfQorLSAgICAgIGVsc2UKKy0JeworLQkgIGlmIChmaWxlICE9IE1BUF9GQUlMRUQpCistCSAgICBfX211bm1hcCAoZmlsZSwgY2FjaGVzaXplKTsKKy0JICBjYWNoZSA9ICh2b2lkICopIC0xOworLQl9CistCistICAgICAgYXNzZXJ0IChjYWNoZSAhPSBOVUxMKTsKKy0gICAgfQorLQorLSAgaWYgKGNhY2hlID09ICh2b2lkICopIC0xKQorLSAgICAvKiBQcmV2aW91c2x5IGxvb2tlZCBmb3IgdGhlIGNhY2hlIGZpbGUgYW5kIGRpZG4ndCBmaW5kIGl0LiAgKi8KKy0gICAgcmV0dXJuIE5VTEw7CistCistICBiZXN0ID0gTlVMTDsKKy0KKy0gIGlmIChjYWNoZV9uZXcgIT0gKHZvaWQgKikgLTEpCistICAgIHsKKy0gICAgICB1aW50NjRfdCBwbGF0Zm9ybTsKKy0KKy0gICAgICAvKiBUaGlzIGlzIHdoZXJlIHRoZSBzdHJpbmdzIHN0YXJ0LiAgKi8KKy0gICAgICBjYWNoZV9kYXRhID0gKGNvbnN0IGNoYXIgKikgY2FjaGVfbmV3OworLQorLSAgICAgIC8qIE5vdyB3ZSBjYW4gY29tcHV0ZSBob3cgbGFyZ2UgdGhlIHN0cmluZyB0YWJsZSBpcy4gICovCistICAgICAgY2FjaGVfZGF0YV9zaXplID0gKGNvbnN0IGNoYXIgKikgY2FjaGUgKyBjYWNoZXNpemUgLSBjYWNoZV9kYXRhOworLQorLSAgICAgIHBsYXRmb3JtID0gX2RsX3N0cmluZ19wbGF0Zm9ybSAoR0xSTyhkbF9wbGF0Zm9ybSkpOworLSAgICAgIGlmIChwbGF0Zm9ybSAhPSAodWludDY0X3QpIC0xKQorLQlwbGF0Zm9ybSA9IDFVTEwgPDwgcGxhdGZvcm07CistCistI2RlZmluZSBfRExfSFdDQVBfVExTX01BU0sgKDFMTCA8PCA2MykKKy0gICAgICB1aW50NjRfdCBod2NhcF9leGNsdWRlID0gfigoR0xSTyhkbF9od2NhcCkgJiBHTFJPKGRsX2h3Y2FwX21hc2spKQorLQkJCQkgfCBfRExfSFdDQVBfUExBVEZPUk0gfCBfRExfSFdDQVBfVExTX01BU0spOworLQorLSAgICAgIC8qIE9ubHkgYWNjZXB0IGh3Y2FwIGlmIGl0J3MgZm9yIHRoZSByaWdodCBwbGF0Zm9ybS4gICovCistI2RlZmluZSBIV0NBUF9DSEVDSyBcCistICAgICAgaWYgKGxpYi0+aHdjYXAgJiBod2NhcF9leGNsdWRlKQkJCQkJICAgICAgXAorLQljb250aW51ZTsJCQkJCQkJICAgICAgXAorLSAgICAgIGlmIChHTFJPKGRsX29zdmVyc2lvbikgJiYgbGliLT5vc3ZlcnNpb24gPiBHTFJPKGRsX29zdmVyc2lvbikpCSAgICAgIFwKKy0JY29udGludWU7CQkJCQkJCSAgICAgIFwKKy0gICAgICBpZiAoX0RMX1BMQVRGT1JNU19DT1VOVAkJCQkJCSAgICAgIFwKKy0JICAmJiAobGliLT5od2NhcCAmIF9ETF9IV0NBUF9QTEFURk9STSkgIT0gMAkJCSAgICAgIFwKKy0JICAmJiAobGliLT5od2NhcCAmIF9ETF9IV0NBUF9QTEFURk9STSkgIT0gcGxhdGZvcm0pCQkgICAgICBcCistCWNvbnRpbnVlCistICAgICAgU0VBUkNIX0NBQ0hFIChjYWNoZV9uZXcpOworLSAgICB9CistICBlbHNlCistICAgIHsKKy0gICAgICAvKiBUaGlzIGlzIHdoZXJlIHRoZSBzdHJpbmdzIHN0YXJ0LiAgKi8KKy0gICAgICBjYWNoZV9kYXRhID0gKGNvbnN0IGNoYXIgKikgJmNhY2hlLT5saWJzW2NhY2hlLT5ubGlic107CistCistICAgICAgLyogTm93IHdlIGNhbiBjb21wdXRlIGhvdyBsYXJnZSB0aGUgc3RyaW5nIHRhYmxlIGlzLiAgKi8KKy0gICAgICBjYWNoZV9kYXRhX3NpemUgPSAoY29uc3QgY2hhciAqKSBjYWNoZSArIGNhY2hlc2l6ZSAtIGNhY2hlX2RhdGE7CistCistI3VuZGVmIEhXQ0FQX0NIRUNLCistI2RlZmluZSBIV0NBUF9DSEVDSyBkbyB7fSB3aGlsZSAoMCkKKy0gICAgICBTRUFSQ0hfQ0FDSEUgKGNhY2hlKTsKKy0gICAgfQorLQorLSAgLyogUHJpbnQgb3VyIHJlc3VsdCBpZiB3YW50ZWQuICAqLworLSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMsIDApCistICAgICAgJiYgYmVzdCAhPSBOVUxMKQorLSAgICBfZGxfZGVidWdfcHJpbnRmICgiICB0cnlpbmcgZmlsZT0lc1xuIiwgYmVzdCk7CistCistICByZXR1cm4gYmVzdDsKKy19CistCistI2lmbmRlZiBNQVBfQ09QWQorLS8qIElmIHRoZSBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBNQVBfQ09QWSB3ZSBjYW5ub3QgbGVhdmUgdGhlIGZpbGUgb3BlbgorLSAgIGFsbCB0aGUgdGltZSBzaW5jZSB0aGlzIHdvdWxkIGNyZWF0ZSBwcm9ibGVtcyB3aGVuIHRoZSBmaWxlIGlzIHJlcGxhY2VkLgorLSAgIFRoZXJlZm9yZSB3ZSBwcm92aWRlIHRoaXMgZnVuY3Rpb24gdG8gY2xvc2UgdGhlIGZpbGUgYW5kIG9wZW4gaXQgYWdhaW4KKy0gICBvbmNlIG5lZWRlZC4gICovCistdm9pZAorLV9kbF91bmxvYWRfY2FjaGUgKHZvaWQpCisteworLSAgaWYgKGNhY2hlICE9IE5VTEwgJiYgY2FjaGUgIT0gKHN0cnVjdCBjYWNoZV9maWxlICopIC0xKQorLSAgICB7CistICAgICAgX19tdW5tYXAgKGNhY2hlLCBjYWNoZXNpemUpOworLSAgICAgIGNhY2hlID0gTlVMTDsKKy0gICAgfQorLX0KKy0jZW5kaWYKK0luZGV4OiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2RsLWNhY2hlLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvZGwtY2FjaGUuaAorKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZGwtY2FjaGUuaAorQEAgLTEwMSw1ICsxMDEsNCBAQCBzdHJ1Y3QgY2FjaGVfZmlsZV9uZXcKKyAoKChhZGRyKSArIF9fYWxpZ25vZl9fIChzdHJ1Y3QgY2FjaGVfZmlsZV9uZXcpIC0xKQlcCisgICYgKH4oX19hbGlnbm9mX18gKHN0cnVjdCBjYWNoZV9maWxlX25ldykgLSAxKSkpCisgCistZXh0ZXJuIGludCBfZGxfY2FjaGVfbGliY21wIChjb25zdCBjaGFyICpwMSwgY29uc3QgY2hhciAqcDIpCistICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKytleHRlcm4gaW50IF9kbF9jYWNoZV9saWJjbXAgKGNvbnN0IGNoYXIgKnAxLCBjb25zdCBjaGFyICpwMik7CitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2xkY29uZmlnLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLmMKK0BAIC0xNiw2ICsxNiw5IEBACisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKyAKKysjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisgI2RlZmluZSBQUk9DSU5GT19DTEFTUyBzdGF0aWMKKyAjaW5jbHVkZSA8YWxsb2NhLmg+CisgI2luY2x1ZGUgPGFyZ3AuaD4KK0BAIC0zOSwxMCArNDIsMjAgQEAKKyAjaW5jbHVkZSA8Z2xvYi5oPgorICNpbmNsdWRlIDxsaWJnZW4uaD4KKyAKKy0jaW5jbHVkZSA8bGRjb25maWcuaD4KKy0jaW5jbHVkZSA8ZGwtY2FjaGUuaD4KKysjaW5jbHVkZSAibGRjb25maWcuaCIKKysjaW5jbHVkZSAiZGwtY2FjaGUuaCIKKysKKysjaW5jbHVkZSAiZGwtcHJvY2luZm8uaCIKKysKKysjaW5jbHVkZSAiYXJncC5oIgorKworKworKyNkZWZpbmUgU1lTQ09ORkRJUiAiL2V0YyIKKysjZGVmaW5lIExJQkRJUiAiL3Vzci9saWIiCisrI2RlZmluZSBTTElCRElSICIvbGliIgorKyMgZGVmaW5lIE5fKG1zZ2lkKSAgbXNnaWQKKysjZGVmaW5lIF8obXNnKSBtc2cKKyAKKy0jaW5jbHVkZSA8ZGwtcHJvY2luZm8uaD4KKyAKKyAjaWZkZWYgX0RMX0ZJUlNUX1BMQVRGT1JNCisgIyBkZWZpbmUgX0RMX0ZJUlNUX0VYVFJBIChfRExfRklSU1RfUExBVEZPUk0gKyBfRExfUExBVEZPUk1TX0NPVU5UKQorQEAgLTU1LDcgKzY4LDcgQEAKKyAjZW5kaWYKKyAKKyAvKiBHZXQgbGliYyB2ZXJzaW9uIG51bWJlci4gICovCistI2luY2x1ZGUgPHZlcnNpb24uaD4KKysjaW5jbHVkZSAidmVyc2lvbi5oIgorIAorICNkZWZpbmUgUEFDS0FHRSBfbGliY19pbnRsX2RvbWFpbm5hbWUKKyAKK0BAIC0xNTIsOCArMTY1LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRpb25zWworICAgeyBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMLCAwIH0KKyB9OworIAorLSNkZWZpbmUgUFJPQ0lORk9fQ0xBU1Mgc3RhdGljCistI2luY2x1ZGUgPGRsLXByb2NpbmZvLmM+CisrLy8jZGVmaW5lIFBST0NJTkZPX0NMQVNTIHN0YXRpYworKy8vI2luY2x1ZGUgPGRsLXByb2NpbmZvLmM+CisgCisgLyogU2hvcnQgZGVzY3JpcHRpb24gb2YgcHJvZ3JhbS4gICovCisgc3RhdGljIGNvbnN0IGNoYXIgZG9jW10gPSBOXygiQ29uZmlndXJlIER5bmFtaWMgTGlua2VyIFJ1biBUaW1lIEJpbmRpbmdzLiIpOworQEAgLTI5MSw2ICszMDQsNyBAQCBwYXJzZV9vcHQgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyCisgICByZXR1cm4gMDsKKyB9CisgCisrI2RlZmluZSBSRVBPUlRfQlVHU19UTyAibWFpbGluZyBsaXN0IDogcG9reUB5b2N0b3Byb2plY3Qub3JnIgorIC8qIFByaW50IGJ1Zy1yZXBvcnRpbmcgaW5mb3JtYXRpb24gaW4gdGhlIGhlbHAgbWVzc2FnZS4gICovCisgc3RhdGljIGNoYXIgKgorIG1vcmVfaGVscCAoaW50IGtleSwgY29uc3QgY2hhciAqdGV4dCwgdm9pZCAqaW5wdXQpCitAQCAtMzE1LDcgKzMyOSw3IEBAIEZvciBidWcgcmVwb3J0aW5nIGluc3RydWN0aW9ucywgcGxlYXNlIHMKKyBzdGF0aWMgdm9pZAorIHByaW50X3ZlcnNpb24gKEZJTEUgKnN0cmVhbSwgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorIHsKKy0gIGZwcmludGYgKHN0cmVhbSwgImxkY29uZmlnICVzJXNcbiIsIFBLR1ZFUlNJT04sIFZFUlNJT04pOworKyAgZnByaW50ZiAoc3RyZWFtLCAibGRjb25maWcgKEhhY2tlZCBQb2t5IFZlcnNpb24pXG4iKTsKKyAgIGZwcmludGYgKHN0cmVhbSwgZ2V0dGV4dCAoIlwKKyBDb3B5cmlnaHQgKEMpICVzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuXAorIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PXG5cCitAQCAtMTIzMyw2ICsxMjQ3LDcgQEAgc2V0X2h3Y2FwICh2b2lkKQorICAgICBod2NhcF9tYXNrID0gc3RydG91bCAobWFzaywgTlVMTCwgMCk7CisgfQorIAorK2NvbnN0IGNoYXIgX2xpYmNfaW50bF9kb21haW5uYW1lW10gPSAibGliYyI7CisgCisgaW50CisgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGxpYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3JlYWRsaWIuYworKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGxpYi5jCitAQCAtMjIsNiArMjIsOSBAQAorICAgIGRldmVsb3BtZW50IHZlcnNpb24uICBCZXNpZGVzIHRoZSBzaW1wbGlmaWNhdGlvbiwgaXQgaGFzIGFsc28gYmVlbgorICAgIG1vZGlmaWVkIHRvIHJlYWQgc29tZSBvdGhlciBmaWxlIGZvcm1hdHMuICAqLworIAorKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKyAjaW5jbHVkZSA8YS5vdXQuaD4KKyAjaW5jbHVkZSA8ZWxmLmg+CisgI2luY2x1ZGUgPGVycm9yLmg+CitAQCAtMzUsNyArMzgsOSBAQAorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxnbnUvbGliLW5hbWVzLmg+CisgCistI2luY2x1ZGUgPGxkY29uZmlnLmg+CisrI2luY2x1ZGUgImxkY29uZmlnLmgiCisrCisrI2RlZmluZSBfKG1zZykgbXNnCisgCisgI2RlZmluZSBFbGYzMl9DTEFTUyBFTEZDTEFTUzMyCisgI2RlZmluZSBFbGY2NF9DTEFTUyBFTEZDTEFTUzY0CitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS94c3RyZHVwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcveHN0cmR1cC5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS94c3RyZHVwLmMKK0BAIC0xNiwxNSArMTYsMTAgQEAKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworIAorLSNpZmRlZiBIQVZFX0NPTkZJR19ICistIyBpbmNsdWRlIDxjb25maWcuaD4KKy0jZW5kaWYKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorIAorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIEhBVkVfU1RSSU5HX0ggfHwgX0xJQkMKKy0jIGluY2x1ZGUgPHN0cmluZy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxzdHJpbmdzLmg+CistI2VuZGlmCisgdm9pZCAqeG1hbGxvYyAoc2l6ZV90IG4pIF9fVEhST1c7CisgY2hhciAqeHN0cmR1cCAoY2hhciAqc3RyaW5nKSBfX1RIUk9XOworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnX2F1eC1jYWNoZV9wYXRoX2ZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZ19hdXgtY2FjaGVfcGF0aF9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdiYzQxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZ19hdXgtY2FjaGVfcGF0aF9maXgucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0NvbWluZyBmcm9tIHRoaXMgYnVnOiBodHRwOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTExMTQ5CisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+MjAxMS8wMy8yOQorCistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2xkY29uZmlnLmMJCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy5jCQorQEAgLTEzNTksMTQgKzEzNTksOSBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCisgICBjb25zdCBjaGFyICphdXhfY2FjaGVfZmlsZSA9IF9QQVRIX0xEQ09ORklHX0FVWF9DQUNIRTsKKyAgIGlmIChvcHRfY2hyb290KQorLSAgICB7CistICAgICAgYXV4X2NhY2hlX2ZpbGUgPSBjaHJvb3RfY2Fub24gKG9wdF9jaHJvb3QsIGF1eF9jYWNoZV9maWxlKTsKKy0gICAgICBpZiAoYXV4X2NhY2hlX2ZpbGUgPT0gTlVMTCkKKy0JZXJyb3IgKEVYSVRfRkFJTFVSRSwgZXJybm8sIF8oIkNhbid0IG9wZW4gY2FjaGUgZmlsZSAlc1xuIiksCistCSAgICAgICBfUEFUSF9MRENPTkZJR19BVVhfQ0FDSEUpOworLSAgICB9CisrICAgIGF1eF9jYWNoZV9maWxlID0gY2hyb290X2Nhbm9uIChvcHRfY2hyb290LCBhdXhfY2FjaGVfZmlsZSk7CisgCistICBpZiAoISBvcHRfaWdub3JlX2F1eF9jYWNoZSkKKysgIGlmICghIG9wdF9pZ25vcmVfYXV4X2NhY2hlICYmIGF1eF9jYWNoZV9maWxlKQorICAgICBsb2FkX2F1eF9jYWNoZSAoYXV4X2NhY2hlX2ZpbGUpOworICAgZWxzZQorICAgICBpbml0X2F1eF9jYWNoZSAoKTsKK0BAIC0xMzc2LDcgKzEzNzEsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICBpZiAob3B0X2J1aWxkX2NhY2hlKQorICAgICB7CisgICAgICAgc2F2ZV9jYWNoZSAoY2FjaGVfZmlsZSk7CistICAgICAgc2F2ZV9hdXhfY2FjaGUgKGF1eF9jYWNoZV9maWxlKTsKKysgICAgICBpZiAoYXV4X2NhY2hlX2ZpbGUpCisrICAgICAgICBzYXZlX2F1eF9jYWNoZSAoYXV4X2NhY2hlX2ZpbGUpOworICAgICB9CisgCisgICByZXR1cm4gMDsKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmVfMi4xMi4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmVfMi4xMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYzBiMTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZV8yLjEyLjEuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJBIHN0YW5kYWxvbmUgbmF0aXZlIGxkY29uZmlnIGJ1aWxkIgorCitMSUNFTlNFID0gIkdQTHYyKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtTfS9sZGNvbmZpZy5jO2VuZGxpbmU9MTc7bWQ1PTFkMTVmMjA5MzdjMDU1Y2I1ZGUyMzI5YTRjMDU0Mzk5IgorCitTUkNfVVJJID0gImZpbGU6Ly9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xLnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbGRjb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGRjb25maWdfYXV4LWNhY2hlX3BhdGhfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzMyYW5kNjRiaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZW5kaWFuLW5lc3NfaGFuZGxpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZmxhZ19maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZW5kaWFuZXNzLWhlYWRlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sZGNvbmZpZy1kZWZhdWx0LXRvLWFsbC1tdWx0aWxpYi1kaXJzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2VuZGlhbi1uZXNzX2hhbmRsaW5nX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtNjQtYml0LWZsYWctZm9yLUVMRjY0LWVudHJpZXMucGF0Y2ggXAorIgorCitQUiA9ICJyMiIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vJHtQfToiCisKK2luaGVyaXQgbmF0aXZlCisKK1MgPSAiJHtXT1JLRElSfS8ke1BOfS0ke1BWfSIKKworZG9fY29tcGlsZSAoKSB7CisJJENDIGxkY29uZmlnLmMgLXN0ZD1nbnU5OSBjaHJvb3RfY2Fub24uYyB4bWFsbG9jLmMgeHN0cmR1cC5jIGNhY2hlLmMgcmVhZGxpYi5jICAtSS4gZGwtY2FjaGUuYyAtbyBsZGNvbmZpZworfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtiaW5kaXJ9LworCWluc3RhbGwgbGRjb25maWcgJHtEfS8ke2JpbmRpcn0vCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL3NpdGVfY29uZmlnL2Z1bmNzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy9mdW5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2M4NTM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy9mdW5jcwpAQCAtMCwwICsxLDQ3NCBAQAorYTY0bAorYWJzCithY2Nlc3MKK19fYWRqdGltZXgKK2FsYXJtCithbHBoYXNvcnQKK2FyZ3pfYXBwZW5kCitfX2FyZ3pfY291bnQKK2FyZ3pfY3JlYXRlX3NlcAorYXJnel9pbnNlcnQKK19fYXJnel9uZXh0Cithcmd6X25leHQKK19fYXJnel9zdHJpbmdpZnkKK2FyZ3pfc3RyaW5naWZ5Cithc3ByaW50ZgorYXRleGl0CithdG9mCithdG9pCitiY21wCitiY29weQorYmluZHJlc3Zwb3J0CitiaW5kX3RleHRkb21haW5fY29kZXNldAorYnRvd2MKK2J6ZXJvCitjYWxsb2MKK2Nhbm9uaWNhbGl6ZV9maWxlX25hbWUKK2NhdGdldHMKK2NmZ2V0b3NwZWVkCitjZnNldGlzcGVlZAorY2ZzZXRzcGVlZAorY2htb2QKK2Nob3duCitjaHJvb3QKK2Nsb2NrCitjbG9zZQorY2xvc2VkaXIKK2Nsb3NlbG9nCitjb25mc3RyCitjb25uZWN0CitkYWVtb24KK2RjZ2V0dGV4dAorZGlmZnRpbWUKK2RpcmZkCitkaXJuYW1lCitkbmdldHRleHQKK2R1cDIKK2VjdnQKK2VuZGdyZW50CitlbmRtbnRlbnQKK2VuZHB3ZW50CitlbmR1dGVudAorZW5kdXR4ZW50CitlcG9sbF9jdGwKK2VycgorZXRoZXJfaG9zdHRvbgorZXRoZXJfbnRvaG9zdAorZXVpZGFjY2VzcworZXhlY3YKK2ZjaGRpcgorZmNobW9kCitmY2htb2RhdAorZmNob3duCitmY2hvd25hdAorZmNudGwKK2ZjdnQKK2ZkYXRhc3luYworZmRvcGVuZGlyCitmZW9mX3VubG9ja2VkCitmZ2V0c191bmxvY2tlZAorZmdldHhhdHRyCitmaW5pdGUKK2ZsaXN0eGF0dHIKK2Zsb2NrCitmbG9ja2ZpbGUKK2ZubWF0Y2gKK2ZvcmsKK2ZwYXRoY29uZgorX19mcGVuZGluZworZnByaW50ZgorZnJlZQorZnJlZWFkZHJpbmZvCitmcmVlaWZhZGRycworZnNlZWtvCitfX2ZzZXRsb2NraW5nCitmc2V0eGF0dHIKK2ZzdGF0NjQKK2ZzdGF0Citmc3RhdGZzCitmc3luYworZnRlbGxvCitmdGltZQorZnRydW5jYXRlCitmdW5sb2NrZmlsZQorZnV0aW1lcworZnV0aW1lc2F0CitnYWlfc3RyZXJyb3IKK2djdnQKK2dldGFkZHJpbmZvCitnZXRjX3VubG9ja2VkCitnZXRjd2QKK2dldGRlbGltCitnZXRkb21haW5uYW1lCitnZXRkdGFibGVzaXplCitnZXRlZ2lkCitnZXRlbnYKK2dldGV1aWQKK2dldGdpZAorZ2V0Z3JlbnQKK2dldGdyZW50X3IKK2dldGdyZ2lkX3IKK2dldGdybmFtCitnZXRncm5hbV9yCitnZXRncm91cGxpc3QKK2dldGdyb3VwcworZ2V0aG9zdGJ5YWRkcl9yCitnZXRob3N0YnluYW1lMgorZ2V0aG9zdGJ5bmFtZQorZ2V0aG9zdGJ5bmFtZV9yCitnZXRob3N0ZW50CitnZXRob3N0aWQKK2dldGhvc3RuYW1lCitnZXRpZmFkZHJzCitnZXRsaW5lCitnZXRsb2FkYXZnCitnZXRtbnRlbnQKK2dldG1zZworZ2V0bmFtZWluZm8KK2dldG5ldGJ5YWRkcl9yCitnZXRuZXRncmVudF9yCitnZXRvcHQKK2dldG9wdF9sb25nCitnZXRvcHRfbG9uZ19vbmx5CitnZXRwYWdlc2l6ZQorZ2V0cGFzcworZ2V0cGVlcm5hbWUKK2dldHBncnAKK2dldHBpZAorZ2V0cHBpZAorZ2V0cHJvdG9lbnRfcgorZ2V0cHdlbnQKK2dldHB3ZW50X3IKK2dldHB3bmFtCitnZXRwd25hbV9yCitnZXRwd3VpZAorZ2V0cHd1aWRfcgorZ2V0cmVzdWlkCitnZXRybGltaXQKK2dldHJ1c2FnZQorZ2V0c2VydmJ5bmFtZQorZ2V0c2VydmJ5bmFtZV9yCitnZXRzZXJ2Ynlwb3J0X3IKK2dldHNlcnZlbnQKK2dldHNlcnZlbnRfcgorZ2V0c3BuYW0KK2dldHNwbmFtX3IKK2dldHRpbWVvZmRheQorZ2V0dHR5ZW50CitnZXR0dHluYW0KK2dldHVpZAorZ2V0dXNlcnNoZWxsCitnZXR1dGVudAorZ2V0dXRpZAorZ2V0dXRsaW5lCitnZXR1dG1wCitnZXR1dG1weAorZ2V0dXR4ZW50CitnZXR1dHhpZAorZ2V0dXR4bGluZQorZ2V0d2QKK2dldHhhdHRyCitnbG9iCitnbXRpbWUKK2dtdGltZV9yCitncmFudHB0Citncm91cF9tZW1iZXIKK2hlcnJvcgoraHN0cmVycm9yCitpY29udgoraWNvbnZfb3BlbgoraWZfZnJlZW5hbWVpbmRleAoraWZfaW5kZXh0b25hbWUKK2lmX25hbWVpbmRleAoraWZfbmFtZXRvaW5kZXgKK2luZGV4CitpbmV0X2FkZHIKK2luZXRfYXRvbgoraW5ldF9udG9hCitpbmV0X250b3AKK2luZXRfcHRvbgoraW5pdGdyb3VwcworaW5uZXRncgoraXJ1c2Vyb2sKK2lzYXNjaWkKK2lzYXR0eQoraXNibGFuaworaXNncmFwaAoraXNpbmYKK2lzbmFuCitpc3ByaW50Citpc3NwYWNlCitpc3dhbG51bQoraXN3Y250cmwKK2lzd2N0eXBlCitpc3dwcmludAoraXN3c3BhY2UKK2lzd3VwcGVyCitpc3hkaWdpdAora2lsbAora2lsbHBnCitsY2hvd24KK2xja3B3ZGYKK2xnZXR4YXR0cgorbGluaworbGlzdHhhdHRyCitsbGlzdHhhdHRyCitsb2NhbHRpbWUKK2xvY2FsdGltZV9yCitsb2NrZgorbHJhbmQ0OAorbHNlYXJjaAorbHNlZWs2NAorbHNldHhhdHRyCitsc3RhdAorbWFsbGluZm8KK21hbGxvYworbWJsZW4KK21icmxlbgorbWJydG93YworbWJzaW5pdAorbWJzcnRvd2NzCittYnRvd2MKK21lbWFsaWduCittZW1jaHIKK21lbWNtcAorbWVtY3B5CittZW1tb3ZlCittZW1wY3B5CittZW1yY2hyCittZW1zZXQKK21rZGlyCitta2RpcmF0Citta2R0ZW1wCitta2ZpZm8KK21rbm9kCitta3N0ZW1wNjQKK21rc3RlbXAKK21rdGltZQorbWxvY2sKK21tYXAKK210cmFjZQorbXVubG9jaworbXVubWFwCituYW5vc2xlZXAKK25pY2UKK25sX2xhbmdpbmZvCitudHBfYWRqdGltZQorbnRwX2dldHRpbWUKK19vYnN0YWNrX2ZyZWUKK29uX2V4aXQKK29wZW42NAorb3Blbgorb3BlbmF0CitvcGVuZGlyCitvcGVubG9nCitwYXRoY29uZgorcGlwZQorcG9sbAorcG9wZW4KK3Bvc2l4X21lbWFsaWduCitwcmN0bAorcHJlYWQKK3ByaW50ZgorX19wcm9nbmFtZQorcHNlbGVjdAorcHRocmVhZF9tdXRleF9sb2NrCitwdHNuYW1lCitwdXRlbnYKK3B1dGdyZW50CitwdXRwd2VudAorcHV0c3BlbnQKK3B1dHV0bGluZQorcHV0dXR4bGluZQorcHV0d2MKK3B3cml0ZQorcXNvcnQKK3JhaXNlCityYW5kCityYW5kb20KK3JhbmRfcgorcmVhZAorcmVhZGRpcgorcmVhZGRpcl9yCityZWFkbGluaworcmVhbGxvYworcmVhbHBhdGgKK3JlX2NvbXAKK3JlY3Ztc2cKK3JlX2V4ZWMKK3JlZ2NvbXAKK3JlZ2V4ZWMKK3JlbW92ZQorcmVuYW1lCityZV9zZWFyY2gKK3JtZGlyCitycG1hdGNoCitycmVzdnBvcnRfYWYKK3J1c2Vyb2sKK3J1c2Vyb2tfYWYKK3NicmsKK3NjYW5kaXIKK3NjaGVkX3NldHNjaGVkdWxlcgorc2NoZWRfeWllbGQKK19fc2VjdXJlX2dldGVudgorc2VsZWN0CitzZW1jdGwKK3NlbWdldAorc2VuZG1zZworc2V0YnVmCitzZXRidWZmZXIKK3NldGVnaWQKK3NldGVudgorc2V0ZXVpZAorc2V0Z2lkCitzZXRncm91cHMKK3NldGhvc3RuYW1lCitzZXRpdGltZXIKK19zZXRqbXAKK3NldGptcAorc2V0bGluZWJ1Zgorc2V0bG9jYWxlCitzZXRtbnRlbnQKK3NldHBnaWQKK3NldHBncnAKK3NldHByaW9yaXR5CitzZXRyZWdpZAorc2V0cmVzZ2lkCitzZXRyZXN1aWQKK3NldHJldWlkCitzZXRybGltaXQKK3NldHNpZAorc2V0c29ja29wdAorc2V0dGltZW9mZGF5CitzZXR1aWQKK3NldHV0ZW50CitzZXR1dHhlbnQKK3NldHZidWYKK3NldHhhdHRyCitzZ2V0c3BlbnQKK3NobWF0CitzaG1jdGwKK3NobWR0CitzaG1nZXQKK3NodXRkb3duCitzaWdhY3Rpb24KK3NpZ2FkZHNldAorc2lnYWx0c3RhY2sKK3NpZ2Jsb2NrCitzaWdlbXB0eXNldAorc2lnaG9sZAorc2lnaW50ZXJydXB0CitzaWduYWwKK3NpZ3Byb2NtYXNrCitzaWdzZXQKK3NpZ3NldG1hc2sKK3NpZ3N0YWNrCitzaWdzdXNwZW5kCitzaWd2ZWMKK3NucHJpbnRmCitzb2NrZXQKK3NvY2tldHBhaXIKK3NwcmludGYKK3NyYW5kNDgKK3NyYW5kCitzcmFuZG9tCitzc2NhbmYKK3N0YXQKK3N0YXRmcworc3RhdHZmcworc3RpbWUKK3N0cGNweQorc3RyY2FzZWNtcAorc3RyY2FzZXN0cgorc3RyY2hyCitzdHJjaHJudWwKK3N0cmNtcAorc3RyY3Nwbgorc3RyZHVwCitzdHJlcnJvcgorc3RyZXJyb3Jfcgorc3RyZnRpbWUKK3N0cmxlbgorc3RybmNhc2VjbXAKK3N0cm5jbXAKK3N0cm5kdXAKK3N0cm5sZW4KK3N0cnBicmsKK3N0cnB0aW1lCitzdHJyY2hyCitzdHJzZXAKK3N0cnNpZ25hbAorc3Ryc3BuCitzdHJzdHIKK3N0cnRvZAorc3RydG9pbWF4CitzdHJ0b2tfcgorc3RydG9sCitzdHJ0b2xsCitzdHJ0b3VsCitzdHJ0b3VsbAorc3RydG91bWF4CitzdHJ2ZXJzY21wCitzdHJ4ZnJtCitzeW1saW5rCitzeW5jCitzeXNjb25mCitzeXNjdGwKK3N5c2luZm8KK3N5c2xvZworX3N5c19zaWdsaXN0CitzeXNfc2lnbGlzdAorc3lzdGVtCit0Y2dldGF0dHIKK3RjZ2V0cGdycAordGNzZXRhdHRyCit0Y3NldHBncnAKK3RpbWUKK3RpbWVnbQordGltZXMKK3RpbWV6b25lCit0bXBuYW0KK3Rvd2xvd2VyCit0b3d1cHBlcgordHJ1bmNhdGUKK3RzZWFyY2gKK3R0eW5hbWUKK3R6c2V0Cit1bGltaXQKK3VtYXNrCit1bmFtZQordW5saW5rCit1bnNldGVudgordW5zaGFyZQordXBkd3RtcAordXBkd3RtcHgKK3VzbGVlcAordXN0YXQKK3V0aW1lCit1dGltZXMKK3V0bXBuYW1lCit1dG1weG5hbWUKK3ZhbGxvYwordmFzcHJpbnRmCit2ZXJyeAordmZvcmsKK3ZmcHJpbnRmCit2ZnNjYW5mCit2aGFuZ3VwCit2cHJpbnRmCit2c25wcmludGYKK3ZzcHJpbnRmCit3YWl0Mword2FpdDQKK3dhaXRwaWQKK3djcnRvbWIKK3djc2NvbGwKK3djc2R1cAord2NzbGVuCit3Y3RvYgord2N0b21iCit3Y3R5cGUKK3djd2lkdGgKK3dtZW1jaHIKK3dtZW1jcHkKK3dtZW1wY3B5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL3NpdGVfY29uZmlnL2hlYWRlcnMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL3NpdGVfY29uZmlnL2hlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5YWI1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvc2l0ZV9jb25maWcvaGVhZGVycwpAQCAtMCwwICsxLDE1NiBAQAorYWlvLmgKK2FsbG9jYS5oCithcmd6LmgKK2FycGEvaW5ldC5oCithcnBhL25hbWVzZXIuaAorYXNtL2J5dGVvcmRlci5oCithc20vaW9jdGxzLmgKK2FzbS9wYWdlLmgKK2FzbS90eXBlcy5oCithc3NlcnQuaAorYnl0ZXN3YXAuaAorY3J5cHQuaAorY3R5cGUuaAorZGlyZW50LmgKK2RsZmNuLmgKK2VsZi5oCitlbmRpYW4uaAorZXJyLmgKK2Vycm5vLmgKK2V4ZWNpbmZvLmgKK2ZjbnRsLmgKK2ZlYXR1cmVzLmgKK2Zsb2F0LmgKK2ZzdGFiLmgKK2Z0dy5oCitnZXRvcHQuaAorZ2xvYi5oCitncnAuaAoraWNvbnYuaAoraWZhZGRycy5oCitpbnR0eXBlcy5oCitsYW5naW5mby5oCitsYXN0bG9nLmgKK2xpYmdlbi5oCitsaWJpbnRsLmgKK2xpbWl0cy5oCitsaW51eC9jYXBhYmlsaXR5LmgKK2xpbnV4L2ZkLmgKK2xpbnV4L2ZzLmgKK2xpbnV4L2hheWVzZXNwLmgKK2xpbnV4L2hkcmVnLmgKK2xpbnV4L2ljbXAuaAorbGludXgvaW42LmgKK2xpbnV4L2pveXN0aWNrLmgKK2xpbnV4L3B0cmFjZS5oCitsaW51eC9zZXJpYWwuaAorbGludXgvc29ueXBpLmgKK2xpbnV4L3VuaXN0ZC5oCitsaW51eC91dHNuYW1lLmgKK2xpbnV4L3ZlcnNpb24uaAorbG9jYWxlLmgKK21hbGxvYy5oCittYXRoLmgKK21jaGVjay5oCittZW1vcnkuaAorbW50ZW50LmgKK21xdWV1ZS5oCituZXRkYi5oCituZXQvaWYuaAorbmV0aW5ldC9ldGhlci5oCituZXRpbmV0L2luLmgKK25ldGluZXQvaXA2LmgKK25ldGluZXQvaXAuaAorbmV0aW5ldC90Y3AuaAorbmV0aW5ldC91ZHAuaAorbmV0aXB4L2lweC5oCituZXQvcm91dGUuaAorcGF0aHMuaAorcG9sbC5oCitwdGhyZWFkLmgKK3B0eS5oCitwd2QuaAorcmVnZXguaAorcmVzb2x2LmgKK3JwYy9ycGMuaAorcnBjL3R5cGVzLmgKK3NjaGVkLmgKK3Njc2kvc2NzaS5oCitzZWFyY2guaAorc2VtYXBob3JlLmgKK3NldGptcC5oCitzZ3R0eS5oCitzaGFkb3cuaAorc2lnbmFsLmgKK3N0ZGFyZy5oCitzdGRib29sLmgKK3N0ZGMKK3N0ZGRlZi5oCitzdGRpbnQuaAorc3RkaW8uaAorc3RkbGliLmgKK3N0cmluZy5oCitzdHJpbmdzLmgKK3N0cm9wdHMuaAorc3lzL2JpdHlwZXMuaAorc3lzL2NkZWZzLmgKK3N5cy9kaXIuaAorc3lzL2Vwb2xsLmgKK3N5c2V4aXRzLmgKK3N5cy9mY250bC5oCitzeXMvZmlsZS5oCitzeXMvZnN1aWQuaAorc3lzL2lvY3RsLmgKK3N5cy9pcGMuaAorc3lzbG9nLmgKK3N5cy9tbWFuLmgKK3N5cy9tb3VudC5oCitzeXMvbXRpby5oCitzeXMvcGFyYW0uaAorc3lzL3BvbGwuaAorc3lzL3ByY3RsLmgKK3N5cy9wdHJhY2UuaAorc3lzL3F1ZXVlLmgKK3N5cy9yZWcuaAorc3lzL3Jlc291cmNlLmgKK3N5cy9zZWxlY3QuaAorc3lzL3NlbS5oCitzeXMvc2htLmgKK3N5cy9zaWduYWwuaAorc3lzL3NvY2tldC5oCitzeXMvc29ja2V0dmFyLmgKK3N5cy9zb3VuZGNhcmQuaAorc3lzL3N0YXRmcy5oCitzeXMvc3RhdC5oCitzeXMvc3RhdHZmcy5oCitzeXMvc3Ryb3B0cy5oCitzeXMvc3dhcC5oCitzeXMvc3lzY3RsLmgKK3N5cy9zeXNpbmZvLmgKK3N5cy9zeXNtYWNyb3MuaAorc3lzL3Rlcm1pb3MuaAorc3lzL3RpbWViLmgKK3N5cy90aW1lLmgKK3N5cy90aW1lcy5oCitzeXMvdGltZXguaAorc3lzL3R5cGVzLmgKK3N5cy91aW8uaAorc3lzL3VuLmgKK3N5cy91bmlzdGQuaAorc3lzL3VzZXIuaAorc3lzL3V0c25hbWUuaAorc3lzL3Zmcy5oCitzeXMvd2FpdC5oCit0ZXJtaW8uaAordGVybWlvcy5oCit0aW1lLmgKK3R0eWVudC5oCit1bGltaXQuaAordW5pc3RkLmgKK3VzdGF0LmgKK3V0aW1lLmgKK3V0bXAuaAordXRtcHguaAordmFsdWVzLmgKK3djaGFyLmgKK3djdHlwZS5oCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL3NpdGVfY29uZmlnL3R5cGVzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy90eXBlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzhiZDg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy90eXBlcwpAQCAtMCwwICsxLDIxIEBACitjaGFyCitjaGFyICoKK2RvdWJsZQorZmxvYXQKK2ludAorbG9uZworbG9uZyBkb3VibGUKK2xvbmcgaW50Citsb25nIGxvbmcKK2xvbmcgbG9uZyBpbnQKK3Nob3J0CitzaG9ydCBpbnQKK3NpZ25lZCBjaGFyCit1bnNpZ25lZCBjaGFyCit1bnNpZ25lZCBpbnQKK3Vuc2lnbmVkIGxvbmcKK3Vuc2lnbmVkIGxvbmcgaW50Cit1bnNpZ25lZCBsb25nIGxvbmcgaW50Cit1bnNpZ25lZCBzaG9ydAordW5zaWduZWQgc2hvcnQgaW50Cit2b2lkICoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvOTlfbmV0d29yayBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvOTlfbmV0d29yawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmQ1ODk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9maWxlcy85OV9uZXR3b3JrCkBAIC0wLDAgKzEgQEAKK2Qgcm9vdCByb290IDA3NTUgL3J1bi9uZXR3b3JrIG5vbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvZGVmbjItYy1tYW4tZG9uLXQtcmVseS1vbi1kcGtnLWFyY2hpdGVjdHVyZS10by1zZXQtYS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvZGVmbjItYy1tYW4tZG9uLXQtcmVseS1vbi1kcGtnLWFyY2hpdGVjdHVyZS10by1zZXQtYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzRkOTUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9maWxlcy9kZWZuMi1jLW1hbi1kb24tdC1yZWx5LW9uLWRwa2ctYXJjaGl0ZWN0dXJlLXRvLXNldC1hLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK0Zyb20gN2FmOWRiNzQ4OTc0Y2IzYTJjNmVmOGY5ZTAzZDdkYjFmOWY4ZWUxNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCA2IEF1ZyAyMDE0IDE0OjU0OjEyIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBkZWZuMltjfG1hbl06IGRvbid0IHJlbHkgb24gZHBrZy1hcmNoaXRlY3R1cmUgdG8gc2V0IGFyY2gKKworSW4geW9jdG8gd2UnbGwgYWx3YXlzIGJlIGNyb3NzIGNvbXBpbGluZywgYW5kIHdlJ2xsIGFsd2F5cworYmUgYnVpbGRpbmcgb24gbGludXggZm9yIGxpbnV4ICh2cy4gKkJTRCwgaHVyZCwgZXRjLikKKworV2l0aG91dCB0aGlzIHRoZSBhcmNoIGlzIG5vdCBkZXRlY3RlZCwgYnV0IGl0IGRvZXNuJ3QgZXJyb3IKK291dCwgYW5kIGhlbmNlIHlvdSBnZXQgdXNlbGVzcyBiaW5hcmllcyB0aGF0IGRvbid0IGtub3cgYW55CithcmNoIHNwZWNpZmljIG1ldGhvZHMsIGFuZCB0aGUgZW5kIHJlc3VsdCB3aWxsIGJlIHN0cmFuZ2VuZXNzCitsaWtlIHRoZSBsb29wYmFjayBkZXZpY2Ugbm90IGJlaW5nIGNvbmZpZ3VyZWQvZW5hYmxlZC4KKworU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CistLS0KKyBkZWZuMmMucGwgICB8IDYgKysrLS0tCisgZGVmbjJtYW4ucGwgfCA2ICsrKy0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGVmbjJjLnBsIGIvZGVmbjJjLnBsCitpbmRleCBjNDQ5ZGUyZjNkMWMuLjM4ODQ1ZTM3NGM3NiAxMDA3NTUKKy0tLSBhL2RlZm4yYy5wbAorKysrIGIvZGVmbjJjLnBsCitAQCAtMiw5ICsyLDkgQEAKKyAKKyB1c2Ugc3RyaWN0OworIAorLW15ICRERUJfSE9TVF9BUkNIX09TID0gYGRwa2ctYXJjaGl0ZWN0dXJlIC1xREVCX0hPU1RfQVJDSF9PU2A7CistCistJERFQl9IT1NUX0FSQ0hfT1MgPX4gcy9cbi8vOworKyNteSAkREVCX0hPU1RfQVJDSF9PUyA9IGBkcGtnLWFyY2hpdGVjdHVyZSAtcURFQl9IT1NUX0FSQ0hfT1NgOworKyMkREVCX0hPU1RfQVJDSF9PUyA9fiBzL1xuLy87CisrbXkgJERFQl9IT1NUX0FSQ0hfT1MgPSJsaW51eCI7CisgCisgIyBkZWNsYXJhdGlvbnMKKyBteSAkYWRkcmVzc19mYW1pbHkgPSAiIjsKK2RpZmYgLS1naXQgYS9kZWZuMm1hbi5wbCBiL2RlZm4ybWFuLnBsCitpbmRleCA2ZGRjZmRkNGZlNjguLmM5YzRkZDA0NjU5NyAxMDA3NTUKKy0tLSBhL2RlZm4ybWFuLnBsCisrKysgYi9kZWZuMm1hbi5wbAorQEAgLTIsOSArMiw5IEBACisgCisgdXNlIHN0cmljdDsKKyAKKy1teSAkREVCX0hPU1RfQVJDSF9PUyA9IGBkcGtnLWFyY2hpdGVjdHVyZSAtcURFQl9IT1NUX0FSQ0hfT1NgOworLQorLSRERUJfSE9TVF9BUkNIX09TID1+IHMvXG4vLzsKKysjbXkgJERFQl9IT1NUX0FSQ0hfT1MgPSBgZHBrZy1hcmNoaXRlY3R1cmUgLXFERUJfSE9TVF9BUkNIX09TYDsKKysjJERFQl9IT1NUX0FSQ0hfT1MgPX4gcy9cbi8vOworK215ICRERUJfSE9TVF9BUkNIX09TID0gImxpbnV4IjsKKyAKKyAjIGRlY2xhcmF0aW9ucworIG15ICRsaW5lOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzL2luZXQtNi0uZGVmbi1maXgtaW52ZXJ0ZWQtY2hlY2tzLWZvci1sb29wYmFjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvaW5ldC02LS5kZWZuLWZpeC1pbnZlcnRlZC1jaGVja3MtZm9yLWxvb3BiYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZjM1MmUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9maWxlcy9pbmV0LTYtLmRlZm4tZml4LWludmVydGVkLWNoZWNrcy1mb3ItbG9vcGJhY2sucGF0Y2gKQEAgLTAsMCArMSwxMDMgQEAKK0Zyb20gNzQxNTJhYzc0YTNlMWVhMGYzYmUyOTJhYTFlZWNhNWFkMWZlNjljMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCA2IEF1ZyAyMDE0IDE1OjEyOjExIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBpbmV0WzZdLmRlZm46IGZpeCBpbnZlcnRlZCBjaGVja3MgZm9yIGxvb3BiYWNrCisKK0NvbXBhcmVkIHRvIHRoZSBodXJkIGxpbmsuZGVmbiBmb3IgbG9vcGJhY2ssIHdlIHNlZSB0aGVzZQorYXJlIGludmVydGVkLCBtZWFuaW5nIHRoYXQgeW91IHdvdWxkIG9ubHkgYmUgYWJsZSB0byBjb25maWd1cmUKK2EgbG9vcGJhY2sgZGV2aWNlIHRoYXQgd2FzIF9ub3RfIG5hbWVkICJsbyIgKHVubGlrZWx5IHRvIGV4aXN0KS4KKworVGhlIHJlc3VsdCB3YXMgdGhhdCB3ZSdkIHVwZGF0ZSAvcnVuL25ldHdvcmsvaWZzdGF0ZSBmb3IgImxvIgorYnV0IG5ldmVyIGFjdHVhbGx5IGRvIGFueXRoaW5nIGZvciB1cC9kb3duLCBhcyBzaG93biBiZWxvdzoKKworcm9vdEBsb2NhbGhvc3Q6fiMgaWZjb25maWcgLXMKK0lmYWNlICAgTVRVIE1ldCAgIFJYLU9LIFJYLUVSUiBSWC1EUlAgUlgtT1ZSICAgIFRYLU9LIFRYLUVSUiBUWC1EUlAgVFgtT1ZSIEZsZworZXRoMCAgICAgICAxNTAwIDAgICA3NzM2MzI5ICAgICAgMCAgIDIwMTYgMCAgICAgICA1Mjg5NDIyICAgICAgMCAgICAgIDAgICAgICAwIEJNUlUKK2xvICAgICAgICA2NTUzNiAwICAgICAgICAxOCAgICAgIDAgICAgICAwIDAgICAgICAgICAgICAxOCAgICAgIDAgICAgICAwICAgICAgMCBMUlUKK3Jvb3RAbG9jYWxob3N0On4jIGlmZG93biBsbworcm9vdEBsb2NhbGhvc3Q6fiMgZWNobyAkPworMAorcm9vdEBsb2NhbGhvc3Q6fiMgaWZjb25maWcgLXMKK0lmYWNlICAgTVRVIE1ldCAgIFJYLU9LIFJYLUVSUiBSWC1EUlAgUlgtT1ZSICAgIFRYLU9LIFRYLUVSUiBUWC1EUlAgVFgtT1ZSIEZsZworZXRoMCAgICAgICAxNTAwIDAgICA3NzM2NDA2ICAgICAgMCAgIDIwMTYgMCAgICAgICA1Mjg5NDU1ICAgICAgMCAgICAgIDAgICAgICAwIEJNUlUKK2xvICAgICAgICA2NTUzNiAwICAgICAgICAxOCAgICAgIDAgICAgICAwIDAgICAgICAgICAgICAxOCAgICAgIDAgICAgICAwICAgICAgMCBMUlUKK3Jvb3RAbG9jYWxob3N0On4jIGlmY29uZmlnIGxvIGRvd24KK3Jvb3RAbG9jYWxob3N0On4jIGlmY29uZmlnIC1zCitJZmFjZSAgIE1UVSBNZXQgICBSWC1PSyBSWC1FUlIgUlgtRFJQIFJYLU9WUiAgICBUWC1PSyBUWC1FUlIgVFgtRFJQIFRYLU9WUiBGbGcKK2V0aDAgICAgICAgMTUwMCAwICAgNzczNjQ3NCAgICAgIDAgICAyMDE2IDAgICAgICAgNTI4OTQ4MSAgICAgIDAgICAgICAwICAgICAgMCBCTVJVCityb290QGxvY2FsaG9zdDp+IworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KKy0tLQorIGluZXQuZGVmbiAgfCAxMiArKysrKystLS0tLS0KKyBpbmV0Ni5kZWZuIHwgIDggKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvaW5ldC5kZWZuIGIvaW5ldC5kZWZuCitpbmRleCBiMTc2YWI0ZWQwM2UuLjVmZGZiMTRhMGUxYyAxMDA2NDQKKy0tLSBhL2luZXQuZGVmbgorKysrIGIvaW5ldC5kZWZuCitAQCAtNiwxMCArNiwxMCBAQCBtZXRob2QgbG9vcGJhY2sKKyAgICAgVGhpcyBtZXRob2QgbWF5IGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBJUHY0IGxvb3BiYWNrIGludGVyZmFjZS4KKyAKKyAgIHVwCistICAgIGlwIGxpbmsgc2V0IGRldiAlaWZhY2UlIHVwIGlmICghaWZhY2VfaXNfbG8oKSkKKysgICAgaXAgbGluayBzZXQgZGV2ICVpZmFjZSUgdXAgaWYgKGlmYWNlX2lzX2xvKCkpCisgCisgICBkb3duCistICAgIGlwIGxpbmsgc2V0IGRldiAlaWZhY2UlIGRvd24gaWYgKCFpZmFjZV9pc19sbygpKQorKyAgICBpcCBsaW5rIHNldCBkZXYgJWlmYWNlJSBkb3duIGlmIChpZmFjZV9pc19sbygpKQorIAorIG1ldGhvZCBzdGF0aWMKKyAgIGRlc2NyaXB0aW9uCitAQCAtMjEyLDExICsyMTIsMTEgQEAgbWV0aG9kIGxvb3BiYWNrCisgCisgICB1cAorICAgICBpZmNvbmZpZyAlaWZhY2UlIDEyNy4wLjAuMSB1cCBcCistCWlmICghaWZhY2VfaXNfbG8oKSkKKysJaWYgKGlmYWNlX2lzX2xvKCkpCisgCisgICBkb3duCisgICAgIGlmY29uZmlnICVpZmFjZSUgZG93biBcCistCWlmICghaWZhY2VfaXNfbG8oKSkKKysJaWYgKGlmYWNlX2lzX2xvKCkpCisgCisgbWV0aG9kIHN0YXRpYworICAgZGVzY3JpcHRpb24KK0BAIC0zNzEsMTEgKzM3MSwxMSBAQCBtZXRob2QgbG9vcGJhY2sKKyAKKyAgIHVwCisgICAgIGluZXR1dGlscy1pZmNvbmZpZyAtLWludGVyZmFjZSAlaWZhY2UlIC0tYWRkcmVzcyAxMjcuMC4wLjEgLS11cCBcCistCWlmICghaWZhY2VfaXNfbG8oKSkKKysJaWYgKGlmYWNlX2lzX2xvKCkpCisgCisgICBkb3duCisgICAgIGluZXR1dGlscy1pZmNvbmZpZyAtLWludGVyZmFjZSAlaWZhY2UlIC0tZG93biBcCistCWlmICghaWZhY2VfaXNfbG8oKSkKKysJaWYgKGlmYWNlX2lzX2xvKCkpCisgCisgbWV0aG9kIHN0YXRpYworICAgZGVzY3JpcHRpb24KK2RpZmYgLS1naXQgYS9pbmV0Ni5kZWZuIGIvaW5ldDYuZGVmbgoraW5kZXggMDkzMjU1MzljZDAxLi40ZGY2NGFmZjM4Y2MgMTAwNjQ0CistLS0gYS9pbmV0Ni5kZWZuCisrKysgYi9pbmV0Ni5kZWZuCitAQCAtMzMsMTEgKzMzLDExIEBAIG1ldGhvZCBsb29wYmFjaworICAgZGVzY3JpcHRpb24KKyAgICAgVGhpcyBtZXRob2QgbWF5IGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBJUHY2IGxvb3BiYWNrIGludGVyZmFjZS4KKyAgIHVwCistICAgIC1pcCBsaW5rIHNldCBkZXYgJWlmYWNlJSB1cCAyPi9kZXYvbnVsbCBpZiAoIWlmYWNlX2lzX2xvKCkpCistICAgIC1pcCBhZGRyIGFkZCBkZXYgJWlmYWNlJSA6OjEgMj4vZGV2L251bGwgaWYgKCFpZmFjZV9pc19sbygpKQorKyAgICAtaXAgbGluayBzZXQgZGV2ICVpZmFjZSUgdXAgMj4vZGV2L251bGwgaWYgKGlmYWNlX2lzX2xvKCkpCisrICAgIC1pcCBhZGRyIGFkZCBkZXYgJWlmYWNlJSA6OjEgMj4vZGV2L251bGwgaWYgKGlmYWNlX2lzX2xvKCkpCisgICBkb3duCistICAgIC1pcCBhZGRyIGRlbCBkZXYgJWlmYWNlJSA6OjEgMj4vZGV2L251bGwgaWYgKCFpZmFjZV9pc19sbygpKQorLSAgICAtaXAgbGluayBzZXQgZGV2ICVpZmFjZSUgZG93biAyPi9kZXYvbnVsbCBpZiAoIWlmYWNlX2lzX2xvKCkpCisrICAgIC1pcCBhZGRyIGRlbCBkZXYgJWlmYWNlJSA6OjEgMj4vZGV2L251bGwgaWYgKGlmYWNlX2lzX2xvKCkpCisrICAgIC1pcCBsaW5rIHNldCBkZXYgJWlmYWNlJSBkb3duIDI+L2Rldi9udWxsIGlmIChpZmFjZV9pc19sbygpKQorIAorIG1ldGhvZCBzdGF0aWMKKyAgIGRlc2NyaXB0aW9uCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vaWZ1cGRvd25fMC43LjQ4LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2lmdXBkb3duXzAuNy40OC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZWI4N2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2lmdXBkb3duXzAuNy40OC4xLmJiCkBAIC0wLDAgKzEsNTQgQEAKK1NVTU1BUlkgPSAiaWZ1cGRvd246IGJhc2ljIGlmdXAgYW5kIGlmZG93biB1c2VkIGJ5IGluaXRzY3JpcHRzIgorREVTQ1JJUFRJT04gPSAiSGlnaCBsZXZlbCB0b29scyB0byBjb25maWd1cmUgbmV0d29yayBpbnRlcmZhY2VzIFwKK1RoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgdG9vbHMgaWZ1cCBhbmQgaWZkb3duIHdoaWNoIG1heSBiZSB1c2VkIHRvIFwKK2NvbmZpZ3VyZSAob3IsIHJlc3BlY3RpdmVseSwgZGVjb25maWd1cmUpIG5ldHdvcmsgaW50ZXJmYWNlcywgYmFzZWQgb24gXAordGhlIGZpbGUgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMuIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitTUkNfVVJJID0gImh0dHA6Ly9hcmNoaXZlLnVidW50dS5jb20vdWJ1bnR1L3Bvb2wvbWFpbi9pL2lmdXBkb3duL2lmdXBkb3duXzAuNy40OC4xdWJ1bnR1NS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9kZWZuMi1jLW1hbi1kb24tdC1yZWx5LW9uLWRwa2ctYXJjaGl0ZWN0dXJlLXRvLXNldC1hLnBhdGNoIFwKKwkgICBmaWxlOi8vaW5ldC02LS5kZWZuLWZpeC1pbnZlcnRlZC1jaGVja3MtZm9yLWxvb3BiYWNrLnBhdGNoIFwKKwkgICBmaWxlOi8vOTlfbmV0d29yayBcCisJICAiCisKK0VYVFJBX09FTUFLRSA9ICIiCisKKyMgbmVlZGVkIHNvIHdlIGRvbid0IGdldCBkZWZhdWx0IFM9IiR7V09SS0RJUn0vaWZ1cGRvd24tJHtQVn0iCitTID0gIiR7V09SS0RJUn0vaWZ1cGRvd24tJHtQVn11YnVudHU1IgorCisKK2luaGVyaXQgdXBkYXRlLXJjLmQgdXBkYXRlLWFsdGVybmF0aXZlcworCitkb19jb21waWxlICgpIHsKKwljaG1vZCBhK3J4ICoucGwgKi5zaAorCW9lX3J1bm1ha2UgJ0NDPSR7Q0N9JyAiQ0ZMQUdTPSR7Q0ZMQUdTfSAtV2FsbCAtVyAtRCdJRlVQRE9XTl9WRVJTSU9OPVwiJHtQVn1cIiciCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW44IFwKKwkJICAke0R9JHttYW5kaXJ9L21hbjUgXAorCQkgICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKworCSMgSWYgdm9sYXRpbGVzIGFyZSB1c2VkLCB0aGVuIHdlJ2xsIGFsc28gbmVlZCAvcnVuL25ldHdvcmsgdGhlcmUgdG9vLgorCWluc3RhbGwgLWQgJHtEfS9ldGMvZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS85OV9uZXR3b3JrICR7RH0vZXRjL2RlZmF1bHQvdm9sYXRpbGVzCisKKwlpbnN0YWxsIC1tIDA3NTUgaWZ1cCAke0R9JHtiYXNlX3NiaW5kaXJ9LworCWxuICR7RH0ke2Jhc2Vfc2JpbmRpcn0vaWZ1cCAke0R9JHtiYXNlX3NiaW5kaXJ9L2lmZG93bgorCWluc3RhbGwgLW0gMDY0NCBpZnVwLjggJHtEfSR7bWFuZGlyfS9tYW44CisJaW5zdGFsbCAtbSAwNjQ0IGludGVyZmFjZXMuNSAke0R9JHttYW5kaXJ9L21hbjUKKwljZCAke0R9JHttYW5kaXJ9L21hbjggJiYgbG4gLXMgaWZ1cC44IGlmZG93bi44Cit9CisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImlmdXAgaWZkb3duIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaWZ1cF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2lmdXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaWZkb3duXSA9ICIke2Jhc2Vfc2JpbmRpcn0vaWZkb3duIgorCitJTklUU0NSSVBUX05BTUUgPSAiaWZ1cCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDM5IFMgLiBzdG9wIDM5IDAgNiAxIC4iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NWJhMzc1ZjNjNmYyNmQzNGVmYjJhODU3NWU3N2ZjOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwOGRjZTE0NjkyYzA3YjcyYjU4M2I4NmM0ZDNhY2UwZDlkYWMxOTI4OTI1MTQ0Y2MzZGRkZTE1YjY5NGViYmRmIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2UvWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZteApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDcyZTg3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXgKQEAgLTAsMCArMSw0NiBAQAorLmVuY29kaW5nID0gIlVURi04IgorY29uZmlnLnZlcnNpb24gPSAiOCIKK3ZpcnR1YWxIVy52ZXJzaW9uID0gIjEwIgorbnVtdmNwdXMgPSAiMiIKK3ZjcHUuaG90YWRkID0gIlRSVUUiCittZW1zaXplID0gIjQwOTYiCittZW0uaG90YWRkID0gIlRSVUUiCitzYXRhMC5wcmVzZW50ID0gIlRSVUUiCitzYXRhMDowLnByZXNlbnQgPSAiVFJVRSIKK3NhdGEwOjAuZmlsZU5hbWUgPSAiWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZtZGsiCitldGhlcm5ldDAucHJlc2VudCA9ICJUUlVFIgorZXRoZXJuZXQwLnZpcnR1YWxEZXYgPSAiZTEwMDAiCitldGhlcm5ldDAud2FrZU9uUGNrdFJjdiA9ICJGQUxTRSIKK2V0aGVybmV0MC5hZGRyZXNzVHlwZSA9ICJnZW5lcmF0ZWQiCit1c2IucHJlc2VudCA9ICJUUlVFIgorZWhjaS5wY2lTbG90TnVtYmVyID0gIjAiCitzb3VuZC5wcmVzZW50ID0gIlRSVUUiCitzb3VuZC5maWxlTmFtZSA9ICItMSIKK3NvdW5kLmF1dG9kZXRlY3QgPSAiVFJVRSIKK3BjaUJyaWRnZTAucHJlc2VudCA9ICJUUlVFIgorcGNpQnJpZGdlNC5wcmVzZW50ID0gIlRSVUUiCitwY2lCcmlkZ2U0LnZpcnR1YWxEZXYgPSAicGNpZVJvb3RQb3J0IgorcGNpQnJpZGdlNC5mdW5jdGlvbnMgPSAiOCIKK3BjaUJyaWRnZTUucHJlc2VudCA9ICJUUlVFIgorcGNpQnJpZGdlNS52aXJ0dWFsRGV2ID0gInBjaWVSb290UG9ydCIKK3BjaUJyaWRnZTUuZnVuY3Rpb25zID0gIjgiCitwY2lCcmlkZ2U2LnByZXNlbnQgPSAiVFJVRSIKK3BjaUJyaWRnZTYudmlydHVhbERldiA9ICJwY2llUm9vdFBvcnQiCitwY2lCcmlkZ2U2LmZ1bmN0aW9ucyA9ICI4IgorcGNpQnJpZGdlNy5wcmVzZW50ID0gIlRSVUUiCitwY2lCcmlkZ2U3LnZpcnR1YWxEZXYgPSAicGNpZVJvb3RQb3J0IgorcGNpQnJpZGdlNy5mdW5jdGlvbnMgPSAiOCIKK3ZtY2kwLnByZXNlbnQgPSAiVFJVRSIKK2hwZXQwLnByZXNlbnQgPSAiVFJVRSIKK3VzYi52Ymx1ZXRvb3RoLnN0YXJ0Q29ubmVjdGVkID0gIlRSVUUiCitkaXNwbGF5TmFtZSA9ICJZb2N0byBCdWlsZCBBcHBsaWFuY2UiCitndWVzdE9TID0gIm90aGVyM3hsaW51eC02NCIKK3ZpcnR1YWxIVy5wcm9kdWN0Q29tcGF0aWJpbGl0eSA9ICJob3N0ZWQiCitndWkuZXhpdE9uQ0xJSExUID0gIkZBTFNFIgorcG93ZXJUeXBlLnBvd2VyT2ZmID0gInNvZnQiCitwb3dlclR5cGUucG93ZXJPbiA9ICJzb2Z0IgorcG93ZXJUeXBlLnN1c3BlbmQgPSAic29mdCIKK3Bvd2VyVHlwZS5yZXNldCA9ICJzb2Z0IgorZXh0ZW5kZWRDb25maWdGaWxlID0gIllvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXhmIgorc2NzaTA6MC5wcmVzZW50ID0gIkZBTFNFIgorZmxvcHB5MC5wcmVzZW50ID0gIkZBTFNFIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXhmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXhmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllOTQxZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2UvWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZteGYKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzxGb3VuZHJ5PgorPFZNPgorPFZNSWQgdHlwZT0ic3RyaW5nIj41MiBhNSBkOCBjYiBlZCA2YyA4NSA0OC1jZCA5OSA2OCBhZiBjYyAzMCBhMCA5ODwvVk1JZD4KKzxDbGllbnRNZXRhRGF0YT4KKzxjbGllbnRNZXRhRGF0YUF0dHJpYnV0ZXMvPgorPEhpc3RvcnlFdmVudExpc3QvPjwvQ2xpZW50TWV0YURhdGE+Cis8dm14UGF0aE5hbWUgdHlwZT0ic3RyaW5nIj5Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14PC92bXhQYXRoTmFtZT48L1ZNPjwvRm91bmRyeT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZV8xMi4wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2VfMTIuMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhODZiYTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2VfMTIuMC4xLmJiCkBAIC0wLDAgKzEsOTMgQEAKK1NVTU1BUlkgPSAiQW4gaW1hZ2UgY29udGFpbmluZyB0aGUgYnVpbGQgc3lzdGVtIGl0c2VsZiIKK0RFU0NSSVBUSU9OID0gIkFuIGltYWdlIGNvbnRhaW5pbmcgdGhlIGJ1aWxkIHN5c3RlbSB0aGF0IHlvdSBjYW4gYm9vdCBhbmQgcnVuIHVzaW5nIGVpdGhlciBWTXdhcmUgUGxheWVyIG9yIFZNd2FyZSBXb3Jrc3RhdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jdW1lbnRhdGlvbi9idWlsZC1hcHBsaWFuY2UiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK0lNQUdFX0lOU1RBTEwgPSAicGFja2FnZWdyb3VwLWNvcmUtYm9vdCBwYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaCBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQiCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJ4MTEtYmFzZSBwYWNrYWdlLW1hbmFnZW1lbnQgc3BsYXNoIgorCisjIEVuc3VyZSB0aGVyZSdzIGVub3VnaCBzcGFjZSB0byBkbyBhIGNvcmUtaW1hZ2Utc2F0byBidWlsZCwgd2l0aCBybV93b3JrIGVuYWJsZWQKK0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSA9ICI0MTk0MzA0MCIKKworIyBEbyBhIHF1aWV0IGJvb3Qgd2l0aCBsaW1pdGVkIGNvbnNvbGUgbWVzc2FnZXMKK0FQUEVORCArPSAicm9vdGZzdHlwZT1leHQ0IHF1aWV0IgorCitERVBFTkRTID0gInppcC1uYXRpdmUiCitJTUFHRV9GU1RZUEVTID0gInZtZGsiCisKK2luaGVyaXQgY29yZS1pbWFnZQorCitTUkNSRVYgPz0gImQwMWNkNTM0MjliMWMyMGYwMWRhYzk3ZjFiOWI2NTljYjlkYzk4MTIiCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kgXAorICAgICAgICAgICBmaWxlOi8vWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZteCBcCisgICAgICAgICAgIGZpbGU6Ly9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14ZiBcCisgICAgICAgICAgIgorCitJTUFHRV9DTURfZXh0NF9hcHBlbmQgKCkgeworCSMgV2UgZG9uJ3QgbmVlZCB0byByZXNlcnZlIG11Y2ggc3BhY2UgZm9yIHJvb3QsIDAuNSUgaXMgbW9yZSB0aGFuIGVub3VnaAorCXR1bmUyZnMgLW0gMC41ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuZXh0NAorfQorCitmYWtlcm9vdCBkb19wb3B1bGF0ZV9wb2t5X3NyYyAoKSB7CisJIyBCZWNhdXNlIGZldGNoMidzIGdpdCdzIHVucGFjayB1c2VzIC1zIGNsb25lZmxhZywgdGhlIHVucGFja2VkIGdpdCByZXBvCisJIyB3aWxsIGJlY29tZSBpbnZhbGlkIGluIHRoZSB0YXJnZXQuCisJcm0gLXJmICR7V09SS0RJUn0vZ2l0Ly5naXQKKwlybSAtZiAke1dPUktESVJ9L2dpdC8uZ2l0aWdub3JlCisKKwljcCAtUnAgJHtXT1JLRElSfS9naXQgJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5CisKKwlta2RpciAtcCAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvY29uZgorCW1rZGlyIC1wICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reS9idWlsZC9kb3dubG9hZHMKKwljcCAtUnBMICR7RExfRElSfS8qICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reS9idWlsZC9kb3dubG9hZHMvCisKKwkjIFJlbW92ZSB0aGUgZ2l0Ml8qIHRhcmJhbGxzIC0tIHRoaXMgaXMgb2sgc2luY2Ugd2Ugc3RpbGwgaGF2ZSB0aGUgZ2l0Mi8uCisJcm0gLXJmICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reS9idWlsZC9kb3dubG9hZHMvZ2l0Ml8qCisKKwllY2hvICIvdXNyL2JpbiIgPiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvcHNldWRvZG9uZQorCWVjaG8gIklOSEVSSVQgKz0gXCJybV93b3JrXCIiID4+ICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reS9idWlsZC9jb25mL2F1dG8uY29uZgorCW1rZGlyIC1wICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcHNldWRvCisJZWNobyAiZXhwb3J0IFBTRVVET19QUkVGSVg9L3VzciIgPj4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci8uYmFzaHJjCisJZWNobyAiZXhwb3J0IFBTRVVET19MT0NBTFNUQVRFRElSPS9ob21lL2J1aWxkZXIvcHNldWRvIiA+PiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyLy5iYXNocmMKKwllY2hvICJleHBvcnQgUFNFVURPX0xJQkRJUj0vdXNyL2xpYi9wc2V1ZG8vbGliNjQiID4+ICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvLmJhc2hyYworCisJY2hvd24gYnVpbGRlci5idWlsZGVyICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcHNldWRvCisKKwljaG93biAtUiBidWlsZGVyLmJ1aWxkZXIgICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reQorCisJIyBBbGxvdyBidWlsZGVyIHRvIHVzZSBzdWRvIHRvIHNldHVwIHRhcC90dW4KKwllY2hvICJidWlsZGVyIEFMTD0oQUxMKSBOT1BBU1NXRDogQUxMIiA+PiAke0lNQUdFX1JPT1RGU30vZXRjL3N1ZG9lcnMKKworCSMgVXNlIENsZWFybG9va3MgR1RLKyB0aGVtZQorCW1rZGlyIC1wICR7SU1BR0VfUk9PVEZTfS9ldGMvZ3RrLTIuMAorCWVjaG8gJ2d0ay10aGVtZS1uYW1lID0gIkNsZWFybG9va3MiJyA+ICR7SU1BR0VfUk9PVEZTfS9ldGMvZ3RrLTIuMC9ndGtyYworfQorCitJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQgKz0gImRvX3BvcHVsYXRlX3Bva3lfc3JjOyAiCisKK2FkZHRhc2sgcm9vdGZzIGFmdGVyIGRvX3VucGFjaworCitweXRob24gKCkgeworCSMgRW5zdXJlIHdlIHJ1biB0aGVzZSB1c3VhbGx5IG5vZXhlYyB0YXNrcworCWQuZGVsVmFyRmxhZygiZG9fZmV0Y2giLCAibm9leGVjIikKKwlkLmRlbFZhckZsYWcoImRvX3VucGFjayIsICJub2V4ZWMiKQorfQorCitjcmVhdGVfYnVuZGxlX2ZpbGVzICgpIHsKKwljZCAke1dPUktESVJ9CisJbWtkaXIgLXAgWW9jdG9fQnVpbGRfQXBwbGlhbmNlCisJY3AgKi52bXgqIFlvY3RvX0J1aWxkX0FwcGxpYW5jZQorCWxuIC1zZiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0udm1kayBZb2N0b19CdWlsZF9BcHBsaWFuY2UvWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZtZGsKKwl6aXAgLXIgJHtERVBMT1lfRElSX0lNQUdFfS9Zb2N0b19CdWlsZF9BcHBsaWFuY2UtJHtEQVRFVElNRX0uemlwIFlvY3RvX0J1aWxkX0FwcGxpYW5jZQorCWxuIC1zZiBZb2N0b19CdWlsZF9BcHBsaWFuY2UtJHtEQVRFVElNRX0uemlwICR7REVQTE9ZX0RJUl9JTUFHRX0vWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnppcCAKK30KKworcHl0aG9uIGRvX2J1bmRsZV9maWxlcygpIHsKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2NyZWF0ZV9idW5kbGVfZmlsZXMnLCBkKQorfQorCithZGR0YXNrIGJ1bmRsZV9maWxlcyBhZnRlciBkb192bWltZyBiZWZvcmUgZG9fYnVpbGQKK2RvX2J1bmRsZV9maWxlc1tub3N0YW1wXSA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1iYXNlLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1iYXNlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YTA4Y2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLWJhc2UuYmIKQEAgLTAsMCArMSw4IEBACitTVU1NQVJZID0gIkEgY29uc29sZS1vbmx5IGltYWdlIHRoYXQgZnVsbHkgc3VwcG9ydHMgdGhlIHRhcmdldCBkZXZpY2UgXAoraGFyZHdhcmUuIgorCitJTUFHRV9GRUFUVVJFUyArPSAic3BsYXNoIgorCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBjb3JlLWltYWdlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtZGV2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWRldi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2VhZDIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWRldi5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgY29yZS1pbWFnZS1taW5pbWFsLmJiCisKK0RFU0NSSVBUSU9OID0gIkEgc21hbGwgaW1hZ2UganVzdCBjYXBhYmxlIG9mIGFsbG93aW5nIGEgZGV2aWNlIHRvIGJvb3QgYW5kIFwKK2lzIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCB3b3JrLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gImRldi1wa2dzIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjBmYTk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcy5iYgpAQCAtMCwwICsxLDIxIEBACisjIFNpbXBsZSBpbml0cmFtZnMgaW1hZ2UuIE1vc3RseSB1c2VkIGZvciBsaXZlIGltYWdlcy4KK0RFU0NSSVBUSU9OID0gIlNtYWxsIGltYWdlIGNhcGFibGUgb2YgYm9vdGluZyBhIGRldmljZS4gVGhlIGtlcm5lbCBpbmNsdWRlcyBcCit0aGUgTWluaW1hbCBSQU0tYmFzZWQgSW5pdGlhbCBSb290IEZpbGVzeXN0ZW0gKGluaXRyYW1mcyksIHdoaWNoIGZpbmRzIHRoZSBcCitmaXJzdCAnaW5pdCcgcHJvZ3JhbSBtb3JlIGVmZmljaWVudGx5LiIKKworUEFDS0FHRV9JTlNUQUxMID0gImluaXRyYW1mcy1saXZlLWJvb3QgaW5pdHJhbWZzLWxpdmUtaW5zdGFsbCBpbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaSBidXN5Ym94IHVkZXYgYmFzZS1wYXNzd2QgJHtST09URlNfQk9PVFNUUkFQX0lOU1RBTEx9IgorCisjIERvIG5vdCBwb2xsdXRlIHRoZSBpbml0cmQgaW1hZ2Ugd2l0aCByb290ZnMgZmVhdHVyZXMKK0lNQUdFX0ZFQVRVUkVTID0gIiIKKworZXhwb3J0IElNQUdFX0JBU0VOQU1FID0gImNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMiCitJTUFHRV9MSU5HVUFTID0gIiIKKworTElDRU5TRSA9ICJNSVQiCisKK0lNQUdFX0ZTVFlQRVMgPSAiJHtJTklUUkFNRlNfRlNUWVBFU30iCitpbmhlcml0IGNvcmUtaW1hZ2UKKworSU1BR0VfUk9PVEZTX1NJWkUgPSAiODE5MiIKKworQkFEX1JFQ09NTUVOREFUSU9OUyArPSAiYnVzeWJveC1zeXNsb2ciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtbXRkdXRpbHMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtbXRkdXRpbHMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyMjM0YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC1tdGR1dGlscy5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgY29yZS1pbWFnZS1taW5pbWFsLmJiCisKK0RFU0NSSVBUSU9OID0gIlNtYWxsIGltYWdlIGNhcGFibGUgb2YgYm9vdGluZyBhIGRldmljZSB3aXRoIHN1cHBvcnQgZm9yIHRoZSBcCitNaW5pbWFsIE1URCBVdGlsaXRpZXMsIHdoaWNoIGxldCB0aGUgdXNlciBpbnRlcmFjdCB3aXRoIHRoZSBNVEQgc3Vic3lzdGVtIGluIFwKK3RoZSBrZXJuZWwgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGZsYXNoIGRldmljZXMuIgorCitJTUFHRV9JTlNUQUxMICs9ICJtdGQtdXRpbHMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkNzdiMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC5iYgpAQCAtMCwwICsxLDEyIEBACitTVU1NQVJZID0gIkEgc21hbGwgaW1hZ2UganVzdCBjYXBhYmxlIG9mIGFsbG93aW5nIGEgZGV2aWNlIHRvIGJvb3QuIgorCitJTUFHRV9JTlNUQUxMID0gInBhY2thZ2Vncm91cC1jb3JlLWJvb3QgJHtST09URlNfUEtHTUFOQUdFX0JPT1RTVFJBUH0gJHtDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEx9IgorCitJTUFHRV9MSU5HVUFTID0gIiAiCisKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IGNvcmUtaW1hZ2UKKworSU1BR0VfUk9PVEZTX1NJWkUgPz0gIjgxOTIiCitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0VfYXBwZW5kID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAic3lzdGVtZCIsICIgKyA0MDk2IiwgIiIgLGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9jb3B5cmlnaHQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvY29weXJpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOGUwZDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvY29weXJpZ2h0CkBAIC0wLDAgKzEsMTEgQEAKK1RoaXMgcGFja2FnZSB3YXMgY3JlYXRlZCBieSBQZXRlciBUb2JpYXMgdG9iaWFzQGV0LWluZi5maG8tZW1kZW4uZGUgb24KK1dlZCwgMjQgQXVnIDE5OTQgMjE6MzM6MjggKzAyMDAgYW5kIG1haW50YWluZWQgYnkgQW50aG9ueSBUb3ducworPGFqdEBkZWJpYW4ub3JnPiB1bnRpbCAyMDAxLgorSXQgaXMgY3VycmVudGx5IG1haW50YWluZWQgYnkgTWFyY28gZCdJdHJpIDxtZEBsaW51eC5pdD4uCisKK0NvcHlyaWdodCAxOTk0LTIwMTAgUGV0ZXIgVG9iaWFzLCBBbnRob255IFRvd25zIGFuZCBNYXJjbyBkJ0l0cmkKKworVGhlIHByb2dyYW1zIGluIHRoaXMgcGFja2FnZSBhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiBhcyBkaXN0cmlidXRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4gT24gRGViaWFuIHN5c3RlbXMsIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGluCisvdXNyL3NoYXJlL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9pbml0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIzMWM2MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9pbml0CkBAIC0wLDAgKzEsOTAgQEAKKyMhL2Jpbi9zaCAtZQorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgbmV0d29ya2luZworIyBSZXF1aXJlZC1TdGFydDogICAgbW91bnR2aXJ0ZnMgJGxvY2FsX2ZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbG9jYWxfZnMKKyMgU2hvdWxkLVN0YXJ0OiAgICAgIGlmdXBkb3duCisjIFNob3VsZC1TdG9wOiAgICAgICBpZnVwZG93bgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6ICAgICAgMCA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBSYWlzZSBuZXR3b3JrIGludGVyZmFjZXMuCisjIyMgRU5EIElOSVQgSU5GTworCitQQVRIPSIvdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iCisKK1sgLXggL3NiaW4vaWZ1cCBdIHx8IGV4aXQgMAorCitjaGVja19uZXR3b3JrX2ZpbGVfc3lzdGVtcygpIHsKKyAgICBbIC1lIC9wcm9jL21vdW50cyBdIHx8IHJldHVybiAwCisKKyAgICBpZiBbIC1lIC9ldGMvaXNjc2kvaXNjc2kuaW5pdHJhbWZzIF07IHRoZW4KKwllY2hvICJub3QgZGVjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXM6IGlTQ1NJIHJvb3QgaXMgbW91bnRlZC4iCisJZXhpdCAwCisgICAgZmkKKworICAgIGV4ZWMgOTwmMCA8IC9wcm9jL21vdW50cworICAgIHdoaWxlIHJlYWQgREVWIE1UUFQgRlNUWVBFIFJFU1Q7IGRvCisJY2FzZSAkREVWIGluCisJL2Rldi9uYmQqfC9kZXYvbmRbYS16XSp8L2Rldi9ldGhlcmQvZSopCisJICAgIGVjaG8gIm5vdCBkZWNvbmZpZ3VyaW5nIG5ldHdvcmsgaW50ZXJmYWNlczogbmV0d29yayBkZXZpY2VzIHN0aWxsIG1vdW50ZWQuIgorCSAgICBleGl0IDAKKwkgICAgOzsKKwllc2FjCisJY2FzZSAkRlNUWVBFIGluCisJbmZzfG5mczR8c21iZnN8bmNwfG5jcGZzfGNpZnN8Y29kYXxvY2ZzMnxnZnN8cHZmc3xwdmZzMnxmdXNlLmh0dHBmc3xmdXNlLmN1cmxmdHBmcykKKwkgICAgZWNobyAibm90IGRlY29uZmlndXJpbmcgbmV0d29yayBpbnRlcmZhY2VzOiBuZXR3b3JrIGZpbGUgc3lzdGVtcyBzdGlsbCBtb3VudGVkLiIKKwkgICAgZXhpdCAwCisJICAgIDs7CisJZXNhYworICAgIGRvbmUKKyAgICBleGVjIDA8JjkgOTwmLQorfQorCitjaGVja19uZXR3b3JrX3N3YXAoKSB7CisgICAgWyAtZSAvcHJvYy9zd2FwcyBdIHx8IHJldHVybiAwCisKKyAgICBleGVjIDk8JjAgPCAvcHJvYy9zd2FwcworICAgIHdoaWxlIHJlYWQgREVWIE1UUFQgRlNUWVBFIFJFU1Q7IGRvCisJY2FzZSAkREVWIGluCisJL2Rldi9uYmQqfC9kZXYvbmRbYS16XSp8L2Rldi9ldGhlcmQvZSopCisJICAgIGVjaG8gIm5vdCBkZWNvbmZpZ3VyaW5nIG5ldHdvcmsgaW50ZXJmYWNlczogbmV0d29yayBzd2FwIHN0aWxsIG1vdW50ZWQuIgorCSAgICBleGl0IDAKKwkgICAgOzsKKwllc2FjCisgICAgZG9uZQorICAgIGV4ZWMgMDwmOSA5PCYtCit9CisKK2Nhc2UgIiQxIiBpbgorc3RhcnQpCisJZWNobyAtbiAiQ29uZmlndXJpbmcgbmV0d29yayBpbnRlcmZhY2VzLi4uICIKKwlzeXNjdGwgLWUgLXAgL2V0Yy9zeXNjdGwuY29uZiA+L2Rldi9udWxsIDI+JjEKKwlpZnVwIC1hCisJZWNobyAiZG9uZS4iCisJOzsKKworc3RvcCkKKwljaGVja19uZXR3b3JrX2ZpbGVfc3lzdGVtcworCWNoZWNrX25ldHdvcmtfc3dhcAorCisJZWNobyAtbiAiRGVjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXMuLi4gIgorCWlmZG93biAtYQorCWVjaG8gImRvbmUuIgorCTs7CisKK2ZvcmNlLXJlbG9hZHxyZXN0YXJ0KQorCWVjaG8gIlJ1bm5pbmcgJDAgJDEgaXMgZGVwcmVjYXRlZCBiZWNhdXNlIGl0IG1heSBub3QgZW5hYmxlIGFnYWluIHNvbWUgaW50ZXJmYWNlcyIKKwllY2hvICJSZWNvbmZpZ3VyaW5nIG5ldHdvcmsgaW50ZXJmYWNlcy4uLiAiCisJaWZkb3duIC1hIHx8IHRydWUKKwlpZnVwIC1hCisJZWNobyAiZG9uZS4iCisJOzsKKworKikKKwllY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvbmV0d29ya2luZyB7c3RhcnR8c3RvcH0iCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9pbnRlcmZhY2VzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFjZjRjZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsMzEgQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjaworCisjIFdpcmVsZXNzIGludGVyZmFjZXMKK2lmYWNlIHdsYW4wIGluZXQgZGhjcAorCXdpcmVsZXNzX21vZGUgbWFuYWdlZAorCXdpcmVsZXNzX2Vzc2lkIGFueQorCXdwYS1kcml2ZXIgd2V4dAorCXdwYS1jb25mIC9ldGMvd3BhX3N1cHBsaWNhbnQuY29uZgorCitpZmFjZSBhdG1sMCBpbmV0IGRoY3AKKworIyBXaXJlZCBvciB3aXJlbGVzcyBpbnRlcmZhY2VzCithdXRvIGV0aDAKK2lmYWNlIGV0aDAgaW5ldCBkaGNwCitpZmFjZSBldGgxIGluZXQgZGhjcAorCisjIEV0aGVybmV0L1JORElTIGdhZGdldCAoZ19ldGhlcikKKyMgLi4uIG9yIG9uIGhvc3Qgc2lkZSwgdXNibmV0IGFuZCByYW5kb20gaHdhZGRyCitpZmFjZSB1c2IwIGluZXQgc3RhdGljCisJYWRkcmVzcyAxOTIuMTY4LjcuMgorCW5ldG1hc2sgMjU1LjI1NS4yNTUuMAorCW5ldHdvcmsgMTkyLjE2OC43LjAKKwlnYXRld2F5IDE5Mi4xNjguNy4xCisKKyMgQmx1ZXRvb3RoIG5ldHdvcmtpbmcKK2lmYWNlIGJuZXAwIGluZXQgZGhjcAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvbmZzcm9vdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9uZnNyb290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MGMwYTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvbmZzcm9vdApAQCAtMCwwICsxLDM5IEBACisjISAvYmluL3NoCisKKyMgSW4gY2FzZSB0aGUgaW50ZXJmYWNlIGlzIHVzZWQgYXMgbmZzcm9vdCwgYXZvaWQgaWZ1cCwgb3RoZXJ3aXNlCisjIG5mc3Jvb3QgbWF5IGxvc2UgcmVzcG9uc2UKKworbmZzcm9vdD0wCisKK2lmIHRlc3QgIngkSUZBQ0UiID0geGxvIDsgdGhlbgorCWV4aXQgMAorZmkKKworZXhlYyA5PCYwIDwgL3Byb2MvbW91bnRzCit3aGlsZSByZWFkIGRldiBtdHB0IGZzdHlwZSByZXN0OyBkbworICAgIGlmIHRlc3QgJG10cHQgPSAiLyIgOyB0aGVuCisgICAgICAgIGNhc2UgJGZzdHlwZSBpbgorICAgICAgICAgICAgbmZzIHwgbmZzNCkKKyAgICAgICAgICAgICAgICBuZnNyb290PTEKKyAgICAgICAgICAgICAgICBuZnNfYWRkcj1gZWNobyAkcmVzdCB8IHNlZCAtZSAncy9eLiphZGRyPVwoWzAtOS5dKlwpLiokL1wxLydgCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgZmkKK2RvbmUKK2V4ZWMgMDwmOSA5PCYtCisKK3Rlc3QgJG5mc3Jvb3QgLWVxIDAgJiYgZXhpdCAwCisKK2lmIFsgLXggL2Jpbi9pcCAtbyAteCAvc2Jpbi9pcCBdIDsgdGhlbgorICAgIG5mc19pZmFjZT1gaXAgcm91dGUgZ2V0ICRuZnNfYWRkciB8IGdyZXAgZGV2IHwgc2VkIC1lICdzL14uKmRldiBcKFstYS16MC05Ll0qXCkuKiQvXDEvJ2AKK2ZpCisKK2lmIHRlc3QgIngkSUZBQ0UiID0gIngkbmZzX2lmYWNlIiA7IHRoZW4KKyAgICBlY2hvICJpZnVwIHNraXBwZWQgZm9yIG5mc3Jvb3QgaW50ZXJmYWNlICRuZnNfaWZhY2UiCisgICAgZXhpdCAxCitmaQorCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtL2ludGVyZmFjZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybS9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OTY3NzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybS9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsNSBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybTY0L2ludGVyZmFjZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybTY0L2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5Njc3NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtNjQvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDUgQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjawpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm12Ni9pbnRlcmZhY2VzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm12Ni9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OTY3NzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybXY2L2ludGVyZmFjZXMKQEAgLTAsMCArMSw1IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtdjcvaW50ZXJmYWNlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtdjcvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjk2Nzc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm12Ny9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsNSBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdW1pcHMvaW50ZXJmYWNlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11bWlwcy9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MmI5YTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdW1pcHMvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDggQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjaworCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVtaXBzNjQvaW50ZXJmYWNlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11bWlwczY0L2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyYjlhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11bWlwczY0L2ludGVyZmFjZXMKQEAgLTAsMCArMSw4IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11cHBjL2ludGVyZmFjZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXBwYy9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MmI5YTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXBwYy9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsOCBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXNoNC9pbnRlcmZhY2VzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVzaDQvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjJiOWE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVzaDQvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDggQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjaworCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXV4ODYtNjQvaW50ZXJmYWNlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11eDg2LTY0L2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyYjlhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11eDg2LTY0L2ludGVyZmFjZXMKQEAgLTAsMCArMSw4IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11eDg2L2ludGVyZmFjZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXg4Ni9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MmI5YTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXg4Ni9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsOCBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bl8xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bl8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMzYWU0MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duXzEuMC5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIkJhc2ljIFRDUC9JUCBuZXR3b3JraW5nIGluaXQgc2NyaXB0cyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyBoaWdoIGxldmVsIHRvb2xzIHRvIGNvbmZpZ3VyZSBuZXR3b3JrIGludGVyZmFjZXMiCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMuZGViaWFuLm9yZy9pZnVwZG93biIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L2NvcHlyaWdodDttZDU9M2RkNjE5MmQzMDZmNTgyZGVlNzY4N2RhM2Q4NzQ4YWIiCitQUiA9ICJyNyIKKworaW5oZXJpdCB1cGRhdGUtcmMuZAorCitJTklUU0NSSVBUX05BTUUgPSAibmV0d29ya2luZyIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDAxIDIgMyA0IDUgLiBzdG9wIDgwIDAgNiAxIC4iCisKK1NSQ19VUkkgPSAiZmlsZTovL2NvcHlyaWdodCBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgZmlsZTovL2ludGVyZmFjZXMgXAorICAgICAgICAgICBmaWxlOi8vbmZzcm9vdCIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZCBcCisJCQkke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXByZS11cC5kIFwKKwkJCSR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtdXAuZCBcCisJCQkke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLWRvd24uZCBcCisJCQkke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXBvc3QtZG93bi5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvbmV0d29ya2luZworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2ludGVyZmFjZXMgJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pbnRlcmZhY2VzCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbmZzcm9vdCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXByZS11cC5kCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX3FlbXVhbGwgKCkgeworCSMgRGlzYWJsZSBuZXR3b3JrIG1hbmFnZXIgb24gbWFjaGluZXMgdGhhdCBjb21tb25seSBkbyBORlMgYm9vdGluZworCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvbm0tZGlzYWJsZWQtZXRoMAorfQorCitQQUNLQUdFX0FSQ0hfcWVtdWFsbCA9ICIke01BQ0hJTkVfQVJDSH0iCitSREVQRU5EU18ke1BOfSA9ICJuZXRiYXNlIgorUkNPTkZMSUNUU18ke1BOfSA9ICJuZXRiYXNlICg8IDE6NS4wKSIKKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vbmV0d29yay9pbnRlcmZhY2VzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtYm9vdC5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWJvb3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgyZWJhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWJvb3Quc2gKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworbWtkaXIgL3Byb2MKK21rZGlyIC9zeXMKK21vdW50IC10IHByb2MgcHJvYyAvcHJvYworbW91bnQgLXQgc3lzZnMgc3lzZnMgL3N5cworCitleGVjIHNoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLWVmaS10ZXN0ZnMuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLWVmaS10ZXN0ZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EwYjRkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtZWZpLXRlc3Rmcy5zaApAQCAtMCwwICsxLDE5OSBAQAorIyEvYmluL3NoIC1lCisjCisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIGluc3RhbGwuc2ggW2RldmljZV9uYW1lXSBbcm9vdGZzX25hbWVdCisjCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworIyBXZSBuZWVkIDIwMCBNYiBmb3IgdGhlIGJvb3QgcGFydGl0aW9uCitib290X3NpemU9MjAwCisKKyMgNTAlIGZvciB0aGUgc2Vjb25kIHJvb3RmcwordGVzdGZzX3JhdGlvPTUwCisKK2ZvdW5kPSJubyIKKworZWNobyAiU2VhcmNoaW5nIGZvciBhIGhhcmQgZHJpdmUuLi4iCitmb3IgZGV2aWNlIGluICdoZGEnICdoZGInICdzZGEnICdzZGInICdtbWNibGswJyAnbW1jYmxrMScKK2RvCisgICAgaWYgWyAtZSAvc3lzL2Jsb2NrLyR7ZGV2aWNlfS9yZW1vdmFibGUgXTsgdGhlbgorICAgICAgICBpZiBbICIkKGNhdCAvc3lzL2Jsb2NrLyR7ZGV2aWNlfS9yZW1vdmFibGUpIiA9ICIwIiBdOyB0aGVuCisgICAgICAgICAgICBmb3VuZD0ieWVzIgorCisgICAgICAgICAgICB3aGlsZSB0cnVlOyBkbworICAgICAgICAgICAgICAgICMgVHJ5IHNsZWVwaW5nIGhlcmUgdG8gYXZvaWQgZ2V0dGluZyBrZXJuZWwgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAjIG9ic2N1cmluZy9jb25mdXNpbmcgdXNlcgorICAgICAgICAgICAgICAgIHNsZWVwIDUKKyAgICAgICAgICAgICAgICBlY2hvICJGb3VuZCBkcml2ZSBhdCAvZGV2LyR7ZGV2aWNlfS4gRG8geW91IHdhbnQgdG8gaW5zdGFsbCB0aGlzIGltYWdlIHRoZXJlID8gW3kvbl0iCisgICAgICAgICAgICAgICAgcmVhZCBhbnN3ZXIKKyAgICAgICAgICAgICAgICBpZiBbICIkYW5zd2VyIiA9ICJ5IiBdIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgICAgICBpZiBbICIkYW5zd2VyIiA9ICJuIiBdIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmb3VuZD1ubworICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgICAgICBlY2hvICJQbGVhc2UgYW5zd2VyIHkgb3IgbiIKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgWyAiJGZvdW5kIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgYnJlYWs7CisgICAgZmkKKworZG9uZQorCitpZiBbICIkZm91bmQiID0gIm5vIiBdOyB0aGVuCisgICAgZXhpdCAxCitmaQorCitlY2hvICJJbnN0YWxsaW5nIGltYWdlIG9uIC9kZXYvJHtkZXZpY2V9IgorCisjCisjIFRoZSB1ZGV2IGF1dG9tb3VudGVyIGNhbiBjYXVzZSBwYWluIGhlcmUsIGtpbGwgaXQKKyMKK3JtIC1mIC9ldGMvdWRldi9ydWxlcy5kL2F1dG9tb3VudC5ydWxlcworcm0gLWYgL2V0Yy91ZGV2L3NjcmlwdHMvbW91bnQqCisKKyMKKyMgVW5tb3VudCBhbnl0aGluZyB0aGUgYXV0b21vdW50ZXIgaGFkIG1vdW50ZWQKKyMKK3Vtb3VudCAvZGV2LyR7ZGV2aWNlfSogMj4gL2Rldi9udWxsIHx8IC9iaW4vdHJ1ZQorCitta2RpciAtcCAvdG1wCitjYXQgL3Byb2MvbW91bnRzID4gL2V0Yy9tdGFiCisKK2Rpc2tfc2l6ZT0kKHBhcnRlZCAvZGV2LyR7ZGV2aWNlfSB1bml0IG1iIHByaW50IHwgZ3JlcCBEaXNrIHwgY3V0IC1kIiAiIC1mIDMgfCBzZWQgLWUgInMvTUIvLyIpCisKK3Rlc3Rmc19zaXplPSQoKGRpc2tfc2l6ZSp0ZXN0ZnNfcmF0aW8vMTAwKSkKK3Jvb3Rmc19zaXplPSQoKGRpc2tfc2l6ZS1ib290X3NpemUtdGVzdGZzX3NpemUpKQorCityb290ZnNfc3RhcnQ9JCgoYm9vdF9zaXplKSkKK3Jvb3Rmc19lbmQ9JCgocm9vdGZzX3N0YXJ0K3Jvb3Rmc19zaXplKSkKK3Rlc3Rmc19zdGFydD0kKChyb290ZnNfZW5kKSkKKworIyBNTUMgZGV2aWNlcyBhcmUgc3BlY2lhbCBpbiBhIGNvdXBsZSBvZiB3YXlzCisjIDEpIHRoZXkgdXNlIGEgcGFydGl0aW9uIHByZWZpeCBjaGFyYWN0ZXIgJ3AnCisjIDIpIHRoZXkgYXJlIGRldGVjdGVkIGFzeW5jaHJvbm91c2x5IChuZWVkIHJvb3R3YWl0KQorcm9vdHdhaXQ9IiIKK3BhcnRfcHJlZml4PSIiCitpZiBbICEgIiR7ZGV2aWNlI21tY2Jsa30iID0gIiR7ZGV2aWNlfSIgXTsgdGhlbgorICAgIHBhcnRfcHJlZml4PSJwIgorICAgIHJvb3R3YWl0PSJyb290d2FpdCIKK2ZpCitib290ZnM9L2Rldi8ke2RldmljZX0ke3BhcnRfcHJlZml4fTEKK3Jvb3Rmcz0vZGV2LyR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MgordGVzdGZzPS9kZXYvJHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0zCisKK2VjaG8gIioqKioqKioqKioqKioqKioqIgorZWNobyAiQm9vdCBwYXJ0aXRpb24gc2l6ZTogICAkYm9vdF9zaXplIE1CICgkYm9vdGZzKSIKK2VjaG8gIlJvb3RmcyBwYXJ0aXRpb24gc2l6ZTogJHJvb3Rmc19zaXplIE1CICgkcm9vdGZzKSIKK2VjaG8gIlRlc3RmcyBwYXJ0aXRpb24gc2l6ZTogICAkdGVzdGZzX3NpemUgTUIgKCR0ZXN0ZnMpIgorZWNobyAiKioqKioqKioqKioqKioqKioiCitlY2hvICJEZWxldGluZyBwYXJ0aXRpb24gdGFibGUgb24gL2Rldi8ke2RldmljZX0gLi4uIgorZGQgaWY9L2Rldi96ZXJvIG9mPS9kZXYvJHtkZXZpY2V9IGJzPTUxMiBjb3VudD0yCisKK2VjaG8gIkNyZWF0aW5nIG5ldyBwYXJ0aXRpb24gdGFibGUgb24gL2Rldi8ke2RldmljZX0gLi4uIgorcGFydGVkIC9kZXYvJHtkZXZpY2V9IG1rbGFiZWwgZ3B0CisKK2VjaG8gIkNyZWF0aW5nIGJvb3QgcGFydGl0aW9uIG9uICRib290ZnMiCitwYXJ0ZWQgL2Rldi8ke2RldmljZX0gbWtwYXJ0IHByaW1hcnkgMCUgJGJvb3Rfc2l6ZQorcGFydGVkIC9kZXYvJHtkZXZpY2V9IHNldCAxIGJvb3Qgb24KKworZWNobyAiQ3JlYXRpbmcgcm9vdGZzIHBhcnRpdGlvbiBvbiAkcm9vdGZzIgorcGFydGVkIC9kZXYvJHtkZXZpY2V9IG1rcGFydCBwcmltYXJ5ICRyb290ZnNfc3RhcnQgJHJvb3Rmc19lbmQKKworZWNobyAiQ3JlYXRpbmcgdGVzdGZzIHBhcnRpdGlvbiBvbiAkdGVzdGZzIgorcGFydGVkIC9kZXYvJHtkZXZpY2V9IG1rcGFydCBwcmltYXJ5ICR0ZXN0ZnNfc3RhcnQgMTAwJQorCitwYXJ0ZWQgL2Rldi8ke2RldmljZX0gcHJpbnQKKworZWNobyAiRm9ybWF0dGluZyAkYm9vdGZzIHRvIHZmYXQuLi4iCitta2ZzLnZmYXQgLW4gImJvb3QiICRib290ZnMKKworZWNobyAiRm9ybWF0dGluZyAkcm9vdGZzIHRvIGV4dDMuLi4iCitta2ZzLmV4dDMgLUwgInBsYXRmb3JtIiAkcm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgJHRlc3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzIC1MICJ0ZXN0cm9vdGZzIiAkdGVzdGZzCisKK21rZGlyIC9zc2QKK21rZGlyIC9yb290bW50Citta2RpciAvYm9vdG1udAorCittb3VudCAkcm9vdGZzIC9zc2QKK21vdW50IC1vIHJ3LGxvb3Asbm9hdGltZSxub2RpcmF0aW1lIC9ydW4vbWVkaWEvJDEvJDIgL3Jvb3RtbnQKKworZWNobyAiQ29weWluZyByb290ZnMgZmlsZXMuLi4iCitjcCAtYSAvcm9vdG1udC8qIC9zc2QKKwordG91Y2ggL3NzZC9ldGMvbWFzdGVyaW1hZ2UKKworaWYgWyAtZCAvc3NkL2V0Yy8gXSA7IHRoZW4KKyAgICAjIFdlIGRvbnQgd2FudCB1ZGV2IHRvIG1vdW50IG91ciByb290IGRldmljZSB3aGlsZSB3ZSdyZSBib290aW5nLi4uCisgICAgaWYgWyAtZCAvc3NkL2V0Yy91ZGV2LyBdIDsgdGhlbgorICAgICAgICBlY2hvICIvZGV2LyR7ZGV2aWNlfSIgPj4gL3NzZC9ldGMvdWRldi9tb3VudC5ibGFja2xpc3QKKyAgICBmaQorZmkKKwordW1vdW50IC9zc2QKK3Vtb3VudCAvcm9vdG1udAorCitlY2hvICJQcmVwYXJpbmcgYm9vdCBwYXJ0aXRpb24uLi4iCittb3VudCAkYm9vdGZzIC9zc2QKKworRUZJRElSPSIvc3NkL0VGSS9CT09UIgorbWtkaXIgLXAgJEVGSURJUgorY3AgL3J1bi9tZWRpYS8kMS92bWxpbnV6IC9zc2QKKyMgQ29weSB0aGUgZWZpIGxvYWRlcgorY3AgL3J1bi9tZWRpYS8kMS9FRkkvQk9PVC8qLmVmaSAkRUZJRElSCisKK2lmIFsgLWYgL3J1bi9tZWRpYS8kMS9FRkkvQk9PVC9ncnViLmNmZyBdOyB0aGVuCisgICAgR1JVQkNGRz0iJEVGSURJUi9ncnViLmNmZyIKKyAgICBjcCAvcnVuL21lZGlhLyQxL0VGSS9CT09UL2dydWIuY2ZnICRHUlVCQ0ZHCisgICAgIyBVcGRhdGUgZ3J1YiBjb25maWcgZm9yIHRoZSBpbnN0YWxsZWQgaW1hZ2UKKyAgICAjIERlbGV0ZSB0aGUgaW5zdGFsbCBlbnRyeQorICAgIHNlZCAtaSAiL21lbnVlbnRyeSAnaW5zdGFsbCcvLC9efS9kIiAkR1JVQkNGRworICAgICMgRGVsZXRlIHRoZSBpbml0cmQgbGluZXMKKyAgICBzZWQgLWkgIi9pbml0cmQgL2QiICRHUlVCQ0ZHCisgICAgIyBEZWxldGUgYW55IExBQkVMPSBzdHJpbmdzCisgICAgc2VkIC1pICJzLyBMQUJFTD1bXiBdKi8gLyIgJEdSVUJDRkcKKyAgICAjIERlbGV0ZSBhbnkgcm9vdD0gc3RyaW5ncworICAgIHNlZCAtaSAicy8gcm9vdD1bXiBdKi8gLyIgJEdSVUJDRkcKKyAgICAjIEFkZCB0aGUgcm9vdD0gYW5kIG90aGVyIHN0YW5kYXJkIGJvb3Qgb3B0aW9ucworICAgIHNlZCAtaSAic0BsaW51eCAvdm1saW51eiAqQGxpbnV4IC92bWxpbnV6IHJvb3Q9JHJvb3RmcyBydyAkcm9vdHdhaXQgcXVpZXQgQCIgJEdSVUJDRkcKK2ZpCisKK2lmIFsgLWQgL3J1bi9tZWRpYS8kMS9sb2FkZXIgXTsgdGhlbgorICAgIEdVTU1JQk9PVF9DRkdTPSIvc3NkL2xvYWRlci9lbnRyaWVzLyouY29uZiIKKyAgICAjIGNvcHkgY29uZmlnIGZpbGVzIGZvciBndW1taWJvb3QKKyAgICBjcCAtZHIgL3J1bi9tZWRpYS8kMS9sb2FkZXIgL3NzZAorICAgICMgZGVsZXRlIHRoZSBpbnN0YWxsIGVudHJ5CisgICAgcm0gLWYgL3NzZC9sb2FkZXIvZW50cmllcy9pbnN0YWxsLmNvbmYKKyAgICAjIGRlbGV0ZSB0aGUgaW5pdHJkIGxpbmVzCisgICAgc2VkIC1pICIvaW5pdHJkIC9kIiAkR1VNTUlCT09UX0NGR1MKKyAgICAjIGRlbGV0ZSBhbnkgTEFCRUw9IHN0cmluZ3MKKyAgICBzZWQgLWkgInMvIExBQkVMPVteIF0qLyAvIiAkR1VNTUlCT09UX0NGR1MKKyAgICAjIGRlbGV0ZSBhbnkgcm9vdD0gc3RyaW5ncworICAgIHNlZCAtaSAicy8gcm9vdD1bXiBdKi8gLyIgJEdVTU1JQk9PVF9DRkdTCisgICAgIyBhZGQgdGhlIHJvb3Q9IGFuZCBvdGhlciBzdGFuZGFyZCBib290IG9wdGlvbnMKKyAgICBzZWQgLWkgInNAb3B0aW9ucyAqQG9wdGlvbnMgcm9vdD0kcm9vdGZzIHJ3ICRyb290d2FpdCBxdWlldCBAIiAkR1VNTUlCT09UX0NGR1MKKyAgICAjIEFkZCB0aGUgdGVzdCBsYWJlbAorICAgIGVjaG8gLW5lICJ0aXRsZSB0ZXN0XG5saW51eCAvdGVzdC1rZXJuZWxcbm9wdGlvbnMgcm9vdD0kdGVzdGZzIHJ3ICRyb290d2FpdCBxdWlldFxuIiA+IC9zc2QvbG9hZGVyL2VudHJpZXMvdGVzdC5jb25mCitmaQorCit1bW91bnQgL3NzZAorc3luYworCitlY2hvICJSZW1vdmUgeW91ciBpbnN0YWxsYXRpb24gbWVkaWEsIGFuZCBwcmVzcyBFTlRFUiIKKworcmVhZCBlbnRlcgorCitlY2hvICJSZWJvb3RpbmcuLi4iCityZWJvb3QgLWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtZWZpLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC1lZmkuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNlZDc0YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtZWZpLnNoCkBAIC0wLDAgKzEsMjUwIEBACisjIS9iaW4vc2ggLWUKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgaW5zdGFsbC5zaCBbZGV2aWNlX25hbWVdIFtyb290ZnNfbmFtZV0KKyMKKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorCisjIFdlIG5lZWQgMjAgTWIgZm9yIHRoZSBib290IHBhcnRpdGlvbgorYm9vdF9zaXplPTIwCisKKyMgNSUgZm9yIHN3YXAKK3N3YXBfcmF0aW89NQorCisjIEdldCBhIGxpc3Qgb2YgaGFyZCBkcml2ZXMKK2hkbmFtZWxpc3Q9IiIKK2xpdmVfZGV2X25hbWU9YGNhdCAvcHJvYy9tb3VudHMgfCBncmVwICR7MSUvfSB8IGF3ayAne3ByaW50ICQxfSdgCitsaXZlX2Rldl9uYW1lPSR7bGl2ZV9kZXZfbmFtZSNcL2Rldi99CisjIE9ubHkgc3RyaXAgdGhlIGRpZ2l0IGlkZW50aWZpZXIgaWYgdGhlIGRldmljZSBpcyBub3QgYW4gbW1jCitjYXNlICRsaXZlX2Rldl9uYW1lIGluCisgICAgbW1jYmxrKikKKyAgICA7OworICAgICopCisgICAgICAgIGxpdmVfZGV2X25hbWU9JHtsaXZlX2Rldl9uYW1lJSVbMC05XSp9CisgICAgOzsKK2VzYWMKKworZWNobyAiU2VhcmNoaW5nIGZvciBoYXJkIGRyaXZlcyAuLi4iCisKK2ZvciBkZXZpY2UgaW4gYGxzIC9zeXMvYmxvY2svYDsgZG8KKyAgICBjYXNlICRkZXZpY2UgaW4KKyAgICAgICAgbG9vcCopCisgICAgICAgICAgICAjIHNraXAgbG9vcCBkZXZpY2UKKyAgICAgICAgICAgIDs7CisgICAgICAgIHNyKikKKyAgICAgICAgICAgICMgc2tpcCBDRFJPTSBkZXZpY2UKKyAgICAgICAgICAgIDs7CisgICAgICAgIHJhbSopCisgICAgICAgICAgICAjIHNraXAgcmFtIGRldmljZQorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgICMgc2tpcCB0aGUgZGV2aWNlIExpdmVPUyBpcyBvbgorICAgICAgICAgICAgIyBBZGQgdmFsaWQgaGFyZCBkcml2ZSBuYW1lIHRvIHRoZSBsaXN0CisgICAgICAgICAgICBjYXNlICRkZXZpY2UgaW4KKyAgICAgICAgICAgICAgICAkbGl2ZV9kZXZfbmFtZSopCisgICAgICAgICAgICAgICAgIyBza2lwIHRoZSBkZXZpY2Ugd2UgYXJlIHJ1bm5pbmcgZnJvbQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgaGRuYW1lbGlzdD0iJGhkbmFtZWxpc3QgJGRldmljZSIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK2lmIFsgLXogIiR7aGRuYW1lbGlzdH0iIF07IHRoZW4KKyAgICBlY2hvICJZb3UgbmVlZCBhbm90aGVyIGRldmljZSAoYmVzaWRlcyB0aGUgbGl2ZSBkZXZpY2UgL2Rldi8ke2xpdmVfZGV2X25hbWV9KSB0byBpbnN0YWxsIHRoZSBpbWFnZS4gSW5zdGFsbGF0aW9uIGFib3J0ZWQuIgorICAgIGV4aXQgMQorZmkKKworVEFSR0VUX0RFVklDRV9OQU1FPSIiCitmb3IgaGRuYW1lIGluICRoZG5hbWVsaXN0OyBkbworICAgICMgRGlzcGxheSBmb3VuZCBoYXJkIGRyaXZlcyBhbmQgdGhlaXIgYmFzaWMgaW5mbworICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgZWNobyAvZGV2LyRoZG5hbWUKKyAgICBpZiBbIC1yIC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdmVuZG9yIF07IHRoZW4KKyAgICAgICAgZWNobyAtbiAiVkVORE9SPSIKKyAgICAgICAgY2F0IC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdmVuZG9yCisgICAgZmkKKyAgICBpZiBbIC1yIC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvbW9kZWwgXTsgdGhlbgorICAgICAgICBlY2hvIC1uICJNT0RFTD0iCisgICAgICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL21vZGVsCisgICAgZmkKKyAgICBpZiBbIC1yIC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdWV2ZW50IF07IHRoZW4KKyAgICAgICAgZWNobyAtbiAiVUVWRU5UPSIKKyAgICAgICAgY2F0IC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdWV2ZW50CisgICAgZmkKKyAgICBlY2hvCisgICAgIyBHZXQgdXNlciBjaG9pY2UKKyAgICB3aGlsZSB0cnVlOyBkbworICAgICAgICBlY2hvIC1uICJEbyB5b3Ugd2FudCB0byBpbnN0YWxsIHRoaXMgaW1hZ2UgdGhlcmU/IFt5L25dICIKKyAgICAgICAgcmVhZCBhbnN3ZXIKKyAgICAgICAgaWYgWyAiJGFuc3dlciIgPSAieSIgLW8gIiRhbnN3ZXIiID0gIm4iIF07IHRoZW4KKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICAgIGVjaG8gIlBsZWFzZSBhbnN3ZXIgeSBvciBuIgorICAgIGRvbmUKKyAgICBpZiBbICIkYW5zd2VyIiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIFRBUkdFVF9ERVZJQ0VfTkFNRT0kaGRuYW1lCisgICAgICAgIGJyZWFrCisgICAgZmkKK2RvbmUKKworaWYgWyAtbiAiJFRBUkdFVF9ERVZJQ0VfTkFNRSIgXTsgdGhlbgorICAgIGVjaG8gIkluc3RhbGxpbmcgaW1hZ2Ugb24gL2Rldi8kVEFSR0VUX0RFVklDRV9OQU1FIC4uLiIKK2Vsc2UKKyAgICBlY2hvICJObyBoYXJkIGRyaXZlIHNlbGVjdGVkLiBJbnN0YWxsYXRpb24gYWJvcnRlZC4iCisgICAgZXhpdCAxCitmaQorCitkZXZpY2U9L2Rldi8kVEFSR0VUX0RFVklDRV9OQU1FCisKKyMKKyMgVGhlIHVkZXYgYXV0b21vdW50ZXIgY2FuIGNhdXNlIHBhaW4gaGVyZSwga2lsbCBpdAorIworcm0gLWYgL2V0Yy91ZGV2L3J1bGVzLmQvYXV0b21vdW50LnJ1bGVzCitybSAtZiAvZXRjL3VkZXYvc2NyaXB0cy9tb3VudCoKKworIworIyBVbm1vdW50IGFueXRoaW5nIHRoZSBhdXRvbW91bnRlciBoYWQgbW91bnRlZAorIwordW1vdW50ICR7ZGV2aWNlfSogMj4gL2Rldi9udWxsIHx8IC9iaW4vdHJ1ZQorCitta2RpciAtcCAvdG1wCitjYXQgL3Byb2MvbW91bnRzID4gL2V0Yy9tdGFiCisKK2Rpc2tfc2l6ZT0kKHBhcnRlZCAke2RldmljZX0gdW5pdCBtYiBwcmludCB8IGdyZXAgRGlzayB8IGN1dCAtZCIgIiAtZiAzIHwgc2VkIC1lICJzL01CLy8iKQorCitzd2FwX3NpemU9JCgoZGlza19zaXplKnN3YXBfcmF0aW8vMTAwKSkKK3Jvb3Rmc19zaXplPSQoKGRpc2tfc2l6ZS1ib290X3NpemUtc3dhcF9zaXplKSkKKworcm9vdGZzX3N0YXJ0PSQoKGJvb3Rfc2l6ZSkpCityb290ZnNfZW5kPSQoKHJvb3Rmc19zdGFydCtyb290ZnNfc2l6ZSkpCitzd2FwX3N0YXJ0PSQoKHJvb3Rmc19lbmQpKQorCisjIE1NQyBkZXZpY2VzIGFyZSBzcGVjaWFsIGluIGEgY291cGxlIG9mIHdheXMKKyMgMSkgdGhleSB1c2UgYSBwYXJ0aXRpb24gcHJlZml4IGNoYXJhY3RlciAncCcKKyMgMikgdGhleSBhcmUgZGV0ZWN0ZWQgYXN5bmNocm9ub3VzbHkgKG5lZWQgcm9vdHdhaXQpCityb290d2FpdD0iIgorcGFydF9wcmVmaXg9IiIKK2lmIFsgISAiJHtkZXZpY2UjbW1jYmxrfSIgPSAiJHtkZXZpY2V9IiBdOyB0aGVuCisgICAgcGFydF9wcmVmaXg9InAiCisgICAgcm9vdHdhaXQ9InJvb3R3YWl0IgorZmkKK2Jvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTEKK3Jvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTIKK3N3YXA9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0zCisKK2VjaG8gIioqKioqKioqKioqKioqKioqIgorZWNobyAiQm9vdCBwYXJ0aXRpb24gc2l6ZTogICAkYm9vdF9zaXplIE1CICgkYm9vdGZzKSIKK2VjaG8gIlJvb3RmcyBwYXJ0aXRpb24gc2l6ZTogJHJvb3Rmc19zaXplIE1CICgkcm9vdGZzKSIKK2VjaG8gIlN3YXAgcGFydGl0aW9uIHNpemU6ICAgJHN3YXBfc2l6ZSBNQiAoJHN3YXApIgorZWNobyAiKioqKioqKioqKioqKioqKioiCitlY2hvICJEZWxldGluZyBwYXJ0aXRpb24gdGFibGUgb24gJHtkZXZpY2V9IC4uLiIKK2RkIGlmPS9kZXYvemVybyBvZj0ke2RldmljZX0gYnM9NTEyIGNvdW50PTM1CisKK2VjaG8gIkNyZWF0aW5nIG5ldyBwYXJ0aXRpb24gdGFibGUgb24gJHtkZXZpY2V9IC4uLiIKK3BhcnRlZCAke2RldmljZX0gbWtsYWJlbCBncHQKKworZWNobyAiQ3JlYXRpbmcgYm9vdCBwYXJ0aXRpb24gb24gJGJvb3RmcyIKK3BhcnRlZCAke2RldmljZX0gbWtwYXJ0IGJvb3QgZmF0MzIgMCUgJGJvb3Rfc2l6ZQorcGFydGVkICR7ZGV2aWNlfSBzZXQgMSBib290IG9uCisKK2VjaG8gIkNyZWF0aW5nIHJvb3RmcyBwYXJ0aXRpb24gb24gJHJvb3RmcyIKK3BhcnRlZCAke2RldmljZX0gbWtwYXJ0IHJvb3QgZXh0MyAkcm9vdGZzX3N0YXJ0ICRyb290ZnNfZW5kCisKK2VjaG8gIkNyZWF0aW5nIHN3YXAgcGFydGl0aW9uIG9uICRzd2FwIgorcGFydGVkICR7ZGV2aWNlfSBta3BhcnQgc3dhcCBsaW51eC1zd2FwICRzd2FwX3N0YXJ0IDEwMCUKKworcGFydGVkICR7ZGV2aWNlfSBwcmludAorCitlY2hvICJGb3JtYXR0aW5nICRib290ZnMgdG8gdmZhdC4uLiIKK21rZnMudmZhdCAkYm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgJHJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzICRyb290ZnMKKworZWNobyAiRm9ybWF0dGluZyBzd2FwIHBhcnRpdGlvbi4uLigkc3dhcCkiCitta3N3YXAgJHN3YXAKKworbWtkaXIgL3RndF9yb290Citta2RpciAvc3JjX3Jvb3QKK21rZGlyIC1wIC9ib290CisKKyMgSGFuZGxpbmcgb2YgdGhlIHRhcmdldCByb290IHBhcnRpdGlvbgorbW91bnQgJHJvb3RmcyAvdGd0X3Jvb3QKK21vdW50IC1vIHJ3LGxvb3Asbm9hdGltZSxub2RpcmF0aW1lIC9ydW4vbWVkaWEvJDEvJDIgL3NyY19yb290CitlY2hvICJDb3B5aW5nIHJvb3RmcyBmaWxlcy4uLiIKK2NwIC1hIC9zcmNfcm9vdC8qIC90Z3Rfcm9vdAoraWYgWyAtZCAvdGd0X3Jvb3QvZXRjLyBdIDsgdGhlbgorICAgIGJvb3RfdXVpZD0kKGJsa2lkIC1vIHZhbHVlIC1zIFVVSUQgJHtkZXZpY2V9MSkKKyAgICBzd2FwX3BhcnRfdXVpZD0kKGJsa2lkIC1vIHZhbHVlIC1zIFBBUlRVVUlEICR7ZGV2aWNlfTMpCisgICAgZWNobyAiL2Rldi9kaXNrL2J5LXBhcnR1dWlkLyRzd2FwX3BhcnRfdXVpZCAgICAgICAgICAgICAgICBzd2FwICAgICAgICAgICAgIHN3YXAgICAgICAgZGVmYXVsdHMgICAgICAgICAgICAgIDAgIDAiID4+IC90Z3Rfcm9vdC9ldGMvZnN0YWIKKyAgICBlY2hvICJVVUlEPSRib290X3V1aWQgICAgICAgICAgICAgIC9ib290ICAgICAgICAgICAgdmZhdCAgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMSAgMiIgPj4gL3RndF9yb290L2V0Yy9mc3RhYgorICAgICMgV2UgZG9udCB3YW50IHVkZXYgdG8gbW91bnQgb3VyIHJvb3QgZGV2aWNlIHdoaWxlIHdlJ3JlIGJvb3RpbmcuLi4KKyAgICBpZiBbIC1kIC90Z3Rfcm9vdC9ldGMvdWRldi8gXSA7IHRoZW4KKyAgICAgICAgZWNobyAiJHtkZXZpY2V9IiA+PiAvdGd0X3Jvb3QvZXRjL3VkZXYvbW91bnQuYmxhY2tsaXN0CisgICAgZmkKK2ZpCisKK3Vtb3VudCAvc3JjX3Jvb3QKKworIyBIYW5kbGluZyBvZiB0aGUgdGFyZ2V0IGJvb3QgcGFydGl0aW9uCittb3VudCAkYm9vdGZzIC9ib290CitlY2hvICJQcmVwYXJpbmcgYm9vdCBwYXJ0aXRpb24uLi4iCisKK0VGSURJUj0iL2Jvb3QvRUZJL0JPT1QiCitta2RpciAtcCAkRUZJRElSCisjIENvcHkgdGhlIGVmaSBsb2FkZXIKK2NwIC9ydW4vbWVkaWEvJDEvRUZJL0JPT1QvKi5lZmkgJEVGSURJUgorCitpZiBbIC1mIC9ydW4vbWVkaWEvJDEvRUZJL0JPT1QvZ3J1Yi5jZmcgXTsgdGhlbgorICAgIHJvb3RfcGFydF91dWlkPSQoYmxraWQgLW8gdmFsdWUgLXMgUEFSVFVVSUQgJHtkZXZpY2V9MikKKyAgICBHUlVCQ0ZHPSIkRUZJRElSL2dydWIuY2ZnIgorICAgIGNwIC9ydW4vbWVkaWEvJDEvRUZJL0JPT1QvZ3J1Yi5jZmcgJEdSVUJDRkcKKyAgICAjIFVwZGF0ZSBncnViIGNvbmZpZyBmb3IgdGhlIGluc3RhbGxlZCBpbWFnZQorICAgICMgRGVsZXRlIHRoZSBpbnN0YWxsIGVudHJ5CisgICAgc2VkIC1pICIvbWVudWVudHJ5ICdpbnN0YWxsJy8sL159L2QiICRHUlVCQ0ZHCisgICAgIyBEZWxldGUgdGhlIGluaXRyZCBsaW5lcworICAgIHNlZCAtaSAiL2luaXRyZCAvZCIgJEdSVUJDRkcKKyAgICAjIERlbGV0ZSBhbnkgTEFCRUw9IHN0cmluZ3MKKyAgICBzZWQgLWkgInMvIExBQkVMPVteIF0qLyAvIiAkR1JVQkNGRworICAgICMgRGVsZXRlIGFueSByb290PSBzdHJpbmdzCisgICAgc2VkIC1pICJzLyByb290PVteIF0qLyAvIiAkR1JVQkNGRworICAgICMgQWRkIHRoZSByb290PSBhbmQgb3RoZXIgc3RhbmRhcmQgYm9vdCBvcHRpb25zCisgICAgc2VkIC1pICJzQGxpbnV4IC92bWxpbnV6ICpAbGludXggL3ZtbGludXogcm9vdD1QQVJUVVVJRD0kcm9vdF9wYXJ0X3V1aWQgcncgJHJvb3R3YWl0IHF1aWV0IEAiICRHUlVCQ0ZHCitmaQorCitpZiBbIC1kIC9ydW4vbWVkaWEvJDEvbG9hZGVyIF07IHRoZW4KKyAgICBHVU1NSUJPT1RfQ0ZHUz0iL2Jvb3QvbG9hZGVyL2VudHJpZXMvKi5jb25mIgorICAgICMgY29weSBjb25maWcgZmlsZXMgZm9yIGd1bW1pYm9vdAorICAgIGNwIC1kciAvcnVuL21lZGlhLyQxL2xvYWRlciAvYm9vdAorICAgICMgZGVsZXRlIHRoZSBpbnN0YWxsIGVudHJ5CisgICAgcm0gLWYgL2Jvb3QvbG9hZGVyL2VudHJpZXMvaW5zdGFsbC5jb25mCisgICAgIyBkZWxldGUgdGhlIGluaXRyZCBsaW5lcworICAgIHNlZCAtaSAiL2luaXRyZCAvZCIgJEdVTU1JQk9PVF9DRkdTCisgICAgIyBkZWxldGUgYW55IExBQkVMPSBzdHJpbmdzCisgICAgc2VkIC1pICJzLyBMQUJFTD1bXiBdKi8gLyIgJEdVTU1JQk9PVF9DRkdTCisgICAgIyBkZWxldGUgYW55IHJvb3Q9IHN0cmluZ3MKKyAgICBzZWQgLWkgInMvIHJvb3Q9W14gXSovIC8iICRHVU1NSUJPT1RfQ0ZHUworICAgICMgYWRkIHRoZSByb290PSBhbmQgb3RoZXIgc3RhbmRhcmQgYm9vdCBvcHRpb25zCisgICAgc2VkIC1pICJzQG9wdGlvbnMgKkBvcHRpb25zIHJvb3Q9UEFSVFVVSUQ9JHJvb3R1dWlkIHJ3ICRyb290d2FpdCBxdWlldCBAIiAkR1VNTUlCT09UX0NGR1MKK2ZpCisKK3Vtb3VudCAvdGd0X3Jvb3QKKworY3AgL3J1bi9tZWRpYS8kMS92bWxpbnV6IC9ib290CisKK3Vtb3VudCAvYm9vdAorCitzeW5jCisKK2VjaG8gIlJlbW92ZSB5b3VyIGluc3RhbGxhdGlvbiBtZWRpYSwgYW5kIHByZXNzIEVOVEVSIgorCityZWFkIGVudGVyCisKK2VjaG8gIlJlYm9vdGluZy4uLiIKK3JlYm9vdCAtZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC10ZXN0ZnMuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLXRlc3Rmcy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzYyMTYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC10ZXN0ZnMuc2gKQEAgLTAsMCArMSwyMjAgQEAKKyMhL2Jpbi9zaCAtZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSBJbnRlbAorIworIyBpbnN0YWxsLnNoIFtkZXZpY2VfbmFtZV0gW3Jvb3Rmc19uYW1lXSBbdmlkZW9fbW9kZV0gW3ZnYV9tb2RlXQorIworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgV2UgbmVlZCAyMCBNYiBmb3IgdGhlIGJvb3QgcGFydGl0aW9uCitib290X3NpemU9MjAwCisKKyMgNTAlIGZvciB0aGUgdGhlIHRlc3QgcGFydGl0aW9uCit0ZXN0ZnNfcmF0aW89NTAKKworIyBHZXQgYSBsaXN0IG9mIGhhcmQgZHJpdmVzCitoZG5hbWVsaXN0PSIiCitsaXZlX2Rldl9uYW1lPSR7MSUlLyp9CisKK2VjaG8gIlNlYXJjaGluZyBmb3IgaGFyZCBkcml2ZXMgLi4uIgorCitmb3IgZGV2aWNlIGluIGBscyAvc3lzL2Jsb2NrL2A7IGRvCisgICAgY2FzZSAkZGV2aWNlIGluCisJbG9vcCopCisgICAgICAgICAgICAjIHNraXAgbG9vcCBkZXZpY2UKKwkgICAgOzsKKwlyYW0qKQorICAgICAgICAgICAgIyBza2lwIHJhbSBkZXZpY2UKKwkgICAgOzsKKwkqKQorCSAgICAjIHNraXAgdGhlIGRldmljZSBMaXZlT1MgaXMgb24KKwkgICAgIyBBZGQgdmFsaWQgaGFyZCBkcml2ZSBuYW1lIHRvIHRoZSBsaXN0CisJICAgIGlmIFsgJGRldmljZSAhPSAkbGl2ZV9kZXZfbmFtZSAtYSAtZSAvZGV2LyRkZXZpY2UgXTsgdGhlbgorCQloZG5hbWVsaXN0PSIkaGRuYW1lbGlzdCAkZGV2aWNlIgorCSAgICBmaQorCSAgICA7OworICAgIGVzYWMKK2RvbmUKKworVEFSR0VUX0RFVklDRV9OQU1FPSIiCitmb3IgaGRuYW1lIGluICRoZG5hbWVsaXN0OyBkbworICAgICMgRGlzcGxheSBmb3VuZCBoYXJkIGRyaXZlcyBhbmQgdGhlaXIgYmFzaWMgaW5mbworICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgZWNobyAvZGV2LyRoZG5hbWUKKyAgICBpZiBbIC1yIC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdmVuZG9yIF07IHRoZW4KKwllY2hvIC1uICJWRU5ET1I9IgorCWNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3ZlbmRvcgorICAgIGZpCisgICAgZWNobyAtbiAiTU9ERUw9IgorICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL21vZGVsCisgICAgY2F0IC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdWV2ZW50CisgICAgZWNobworICAgICMgR2V0IHVzZXIgY2hvaWNlCisgICAgd2hpbGUgdHJ1ZTsgZG8KKwllY2hvIC1uICJEbyB5b3Ugd2FudCB0byBpbnN0YWxsIHRoaXMgaW1hZ2UgdGhlcmU/IFt5L25dICIKKwlyZWFkIGFuc3dlcgorCWlmIFsgIiRhbnN3ZXIiID0gInkiIC1vICIkYW5zd2VyIiA9ICJuIiBdOyB0aGVuCisJICAgIGJyZWFrCisJZmkKKwllY2hvICJQbGVhc2UgYW5zd2VyIHkgb3IgbiIKKyAgICBkb25lCisgICAgaWYgWyAiJGFuc3dlciIgPSAieSIgXTsgdGhlbgorCVRBUkdFVF9ERVZJQ0VfTkFNRT0kaGRuYW1lCisJYnJlYWsKKyAgICBmaQorZG9uZQorCitpZiBbIC1uICIkVEFSR0VUX0RFVklDRV9OQU1FIiBdOyB0aGVuCisgICAgZWNobyAiSW5zdGFsbGluZyBpbWFnZSBvbiAvZGV2LyRUQVJHRVRfREVWSUNFX05BTUUgLi4uIgorZWxzZQorICAgIGVjaG8gIk5vIGhhcmQgZHJpdmUgc2VsZWN0ZWQuIEluc3RhbGxhdGlvbiBhYm9ydGVkLiIKKyAgICBleGl0IDEKK2ZpCisKK2RldmljZT0kVEFSR0VUX0RFVklDRV9OQU1FCisKKyMKKyMgVGhlIHVkZXYgYXV0b21vdW50ZXIgY2FuIGNhdXNlIHBhaW4gaGVyZSwga2lsbCBpdAorIworcm0gLWYgL2V0Yy91ZGV2L3J1bGVzLmQvYXV0b21vdW50LnJ1bGVzCitybSAtZiAvZXRjL3VkZXYvc2NyaXB0cy9tb3VudCoKKworIworIyBVbm1vdW50IGFueXRoaW5nIHRoZSBhdXRvbW91bnRlciBoYWQgbW91bnRlZAorIwordW1vdW50IC9kZXYvJHtkZXZpY2V9KiAyPiAvZGV2L251bGwgfHwgL2Jpbi90cnVlCisKK2lmIFsgISAtYiAvZGV2L2xvb3AwIF0gOyB0aGVuCisgICAgbWtub2QgL2Rldi9sb29wMCBiIDcgMAorZmkKKworbWtkaXIgLXAgL3RtcAoraWYgWyAhIC1MIC9ldGMvbXRhYiBdOyB0aGVuCisJY2F0IC9wcm9jL21vdW50cyA+IC9ldGMvbXRhYgorZmkKKworZGlza19zaXplPSQocGFydGVkIC9kZXYvJHtkZXZpY2V9IHVuaXQgbWIgcHJpbnQgfCBncmVwIERpc2sgfCBjdXQgLWQiICIgLWYgMyB8IHNlZCAtZSAicy9NQi8vIikKKwordGVzdGZzX3NpemU9JCgoZGlza19zaXplKnRlc3Rmc19yYXRpby8xMDApKQorcm9vdGZzX3NpemU9JCgoZGlza19zaXplLWJvb3Rfc2l6ZS10ZXN0ZnNfc2l6ZSkpCisKK3Jvb3Rmc19zdGFydD0kKChib290X3NpemUpKQorcm9vdGZzX2VuZD0kKChyb290ZnNfc3RhcnQrcm9vdGZzX3NpemUpKQordGVzdGZzX3N0YXJ0PSQoKHJvb3Rmc19lbmQpKQorCisjIE1NQyBkZXZpY2VzIGFyZSBzcGVjaWFsIGluIGEgY291cGxlIG9mIHdheXMKKyMgMSkgdGhleSB1c2UgYSBwYXJ0aXRpb24gcHJlZml4IGNoYXJhY3RlciAncCcKKyMgMikgdGhleSBhcmUgZGV0ZWN0ZWQgYXN5bmNocm9ub3VzbHkgKG5lZWQgcm9vdHdhaXQpCityb290d2FpdD0iIgorcGFydF9wcmVmaXg9IiIKK2lmIFsgISAiJHtkZXZpY2UjbW1jYmxrfSIgPSAiJHtkZXZpY2V9IiBdOyB0aGVuCisJcGFydF9wcmVmaXg9InAiCisJcm9vdHdhaXQ9InJvb3R3YWl0IgorZmkKK2Jvb3Rmcz0vZGV2LyR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MQorcm9vdGZzPS9kZXYvJHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0yCit0ZXN0ZnM9L2Rldi8ke2RldmljZX0ke3BhcnRfcHJlZml4fTMKKworZWNobyAiKioqKioqKioqKioqKioqKioiCitlY2hvICJCb290IHBhcnRpdGlvbiBzaXplOiAgICRib290X3NpemUgTUIgKCRib290ZnMpIgorZWNobyAiUm9vdGZzIHBhcnRpdGlvbiBzaXplOiAkcm9vdGZzX3NpemUgTUIgKCRyb290ZnMpIgorZWNobyAiVGVzdGZzIHBhcnRpdGlvbiBzaXplOiAkdGVzdGZzX3NpemUgTUIgKCR0ZXN0ZnMpIgorZWNobyAiKioqKioqKioqKioqKioqKioiCitlY2hvICJEZWxldGluZyBwYXJ0aXRpb24gdGFibGUgb24gL2Rldi8ke2RldmljZX0gLi4uIgorZGQgaWY9L2Rldi96ZXJvIG9mPS9kZXYvJHtkZXZpY2V9IGJzPTUxMiBjb3VudD0yCisKK2VjaG8gIkNyZWF0aW5nIG5ldyBwYXJ0aXRpb24gdGFibGUgb24gL2Rldi8ke2RldmljZX0gLi4uIgorcGFydGVkIC9kZXYvJHtkZXZpY2V9IG1rbGFiZWwgbXNkb3MKKworZWNobyAiQ3JlYXRpbmcgYm9vdCBwYXJ0aXRpb24gb24gJGJvb3RmcyIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta3BhcnQgcHJpbWFyeSAwJSAkYm9vdF9zaXplCisKK2VjaG8gIkNyZWF0aW5nIHJvb3RmcyBwYXJ0aXRpb24gb24gJHJvb3RmcyIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta3BhcnQgcHJpbWFyeSAkcm9vdGZzX3N0YXJ0ICRyb290ZnNfZW5kCisKK2VjaG8gIkNyZWF0aW5nIHRlc3RmcyBwYXJ0aXRpb24gb24gJHRlc3RmcyIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta3BhcnQgcHJpbWFyeSAkdGVzdGZzX3N0YXJ0IDEwMCUKKworcGFydGVkIC9kZXYvJHtkZXZpY2V9IHByaW50CisKK2VjaG8gIkZvcm1hdHRpbmcgJGJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzIC1MICJib290IiAkYm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgJHJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzIC1MICJyb290ZnMiICRyb290ZnMKKworZWNobyAiRm9ybWF0dGluZyAkdGVzdGZzIHRvIGV4dDMuLi4iCitta2ZzLmV4dDMgLUwgInRlc3Ryb290ZnMiICR0ZXN0ZnMKKworbWtkaXIgL3RndF9yb290Citta2RpciAvc3JjX3Jvb3QKK21rZGlyIC1wIC9ib290CisKKyMgSGFuZGxpbmcgb2YgdGhlIHRhcmdldCByb290IHBhcnRpdGlvbgorbW91bnQgJHJvb3RmcyAvdGd0X3Jvb3QKK21vdW50IC1vIHJ3LGxvb3Asbm9hdGltZSxub2RpcmF0aW1lIC9ydW4vbWVkaWEvJDEvJDIgL3NyY19yb290CisKK2VjaG8gIkNvcHlpbmcgcm9vdGZzIGZpbGVzLi4uIgorY3AgLWEgL3NyY19yb290LyogL3RndF9yb290CisKK3RvdWNoIC90Z3Rfcm9vdC9ldGMvbWFzdGVyaW1hZ2UKKworaWYgWyAtZCAvdGd0X3Jvb3QvZXRjLyBdIDsgdGhlbgorICAgIGVjaG8gIiRib290ZnMgICAgICAgICAgICAgIC9ib290ICAgICAgICAgICAgZXh0MyAgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMSAgMiIgPj4gL3RndF9yb290L2V0Yy9mc3RhYgorICAgICMgV2UgZG9udCB3YW50IHVkZXYgdG8gbW91bnQgb3VyIHJvb3QgZGV2aWNlIHdoaWxlIHdlJ3JlIGJvb3RpbmcuLi4KKyAgICBpZiBbIC1kIC90Z3Rfcm9vdC9ldGMvdWRldi8gXSA7IHRoZW4KKwllY2hvICIvZGV2LyR7ZGV2aWNlfSIgPj4gL3RndF9yb290L2V0Yy91ZGV2L21vdW50LmJsYWNrbGlzdAorICAgIGZpCitmaQordW1vdW50IC90Z3Rfcm9vdAordW1vdW50IC9zcmNfcm9vdAorCisjIEhhbmRsaW5nIG9mIHRoZSB0YXJnZXQgYm9vdCBwYXJ0aXRpb24KK21vdW50ICRib290ZnMgL2Jvb3QKK2VjaG8gIlByZXBhcmluZyBib290IHBhcnRpdGlvbi4uLiIKK2lmIFsgLWYgL2V0Yy9ncnViLmQvMDBfaGVhZGVyIF0gOyB0aGVuCisgICAgZWNobyAiUHJlcGFyaW5nIGN1c3RvbSBncnViMiBtZW51Li4uIgorICAgIEdSVUJDRkc9Ii9ib290L2dydWIvZ3J1Yi5jZmciCisgICAgbWtkaXIgLXAgJChkaXJuYW1lICRHUlVCQ0ZHKQorICAgIGNhdCA+JEdSVUJDRkcgPDxfRU9GIAorc2VyaWFsIC0tc3BlZWQ9MTE1MjAwIC0tdW5pdD0wIC0td29yZD04IC0tcGFyaXR5PW5vIC0tc3RvcD0xCit0ZXJtaW5hbF9pbnB1dCAtLWFwcGVuZCAgc2VyaWFsCit0ZXJtaW5hbF9vdXRwdXQgLS1hcHBlbmQgc2VyaWFsCitzZXQgdGltZW91dF9zdHlsZT1oaWRkZW4KK3NldCB0aW1lb3V0PTUKK21lbnVlbnRyeSAiTGludXgiIHsKKyAgICBzZXQgcm9vdD0oaGQwLDEpCisgICAgbGludXggL3ZtbGludXogcm9vdD0kcm9vdGZzICRyb290d2FpdCBydyAkNSAkMyAkNCBxdWlldAorfQorX0VPRgorICAgICMgQWRkIHRoZSB0ZXN0IGxhYmVsCisgICAgZWNobyAtbmUgIlxubWVudWVudHJ5ICd0ZXN0JyAtLWhvdGtleSB4IHtcbmxpbnV4IC90ZXN0LWtlcm5lbCByb290PSR0ZXN0ZnMgcncgJHJvb3R3YWl0IHF1aWV0XG59XG4iID4+ICRHUlVCQ0ZHCisKKyAgICBjaG1vZCAwNDQ0ICRHUlVCQ0ZHCitmaQorZ3J1Yi1pbnN0YWxsIC9kZXYvJHtkZXZpY2V9CitlY2hvICIoaGQwKSAvZGV2LyR7ZGV2aWNlfSIgPiAvYm9vdC9ncnViL2RldmljZS5tYXAKKworIyBJZiBncnViLmNmZyBkb2Vzbid0IGV4aXN0LCBhc3N1bWUgR1JVQiAwLjk3IGFuZCBjcmVhdGUgYSBtZW51LmxzdAoraWYgWyAhIC1mIC9ib290L2dydWIvZ3J1Yi5jZmcgXSA7IHRoZW4KKyAgICBlY2hvICJQcmVwYXJpbmcgY3VzdG9tIGdydWIgbWVudS4uLiIKKyAgICBlY2hvICJkZWZhdWx0IDAiID4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gInRpbWVvdXQgMzAiID4+IC9ib290L2dydWIvbWVudS5sc3QKKyAgICBlY2hvICJ0aXRsZSBMaXZlIEJvb3QvSW5zdGFsbC1JbWFnZSIgPj4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gInJvb3QgIChoZDAsMCkiID4+IC9ib290L2dydWIvbWVudS5sc3QKKyAgICBlY2hvICJrZXJuZWwgL3ZtbGludXogcm9vdD0kcm9vdGZzIHJ3ICQzICQ0IHF1aWV0IiA+PiAvYm9vdC9ncnViL21lbnUubHN0CitmaQorCitjcCAvcnVuL21lZGlhLyQxL3ZtbGludXogL2Jvb3QvCisKK3Vtb3VudCAvYm9vdAorCitzeW5jCisKK2VjaG8gIlJlbW92ZSB5b3VyIGluc3RhbGxhdGlvbiBtZWRpYSwgYW5kIHByZXNzIEVOVEVSIgorCityZWFkIGVudGVyCisKK2VjaG8gIlJlYm9vdGluZy4uLiIKK3JlYm9vdCAtZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllOTc2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwuc2gKQEAgLTAsMCArMSwyNzIgQEAKKyMhL2Jpbi9zaCAtZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSBJbnRlbAorIworIyBpbnN0YWxsLnNoIFtkZXZpY2VfbmFtZV0gW3Jvb3Rmc19uYW1lXSBbdmlkZW9fbW9kZV0gW3ZnYV9tb2RlXQorIworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgV2UgbmVlZCAyMCBNYiBmb3IgdGhlIGJvb3QgcGFydGl0aW9uCitib290X3NpemU9MjAKKworIyA1JSBmb3IgdGhlIHN3YXAKK3N3YXBfcmF0aW89NQorCisjIEdldCBhIGxpc3Qgb2YgaGFyZCBkcml2ZXMKK2hkbmFtZWxpc3Q9IiIKK2xpdmVfZGV2X25hbWU9YGNhdCAvcHJvYy9tb3VudHMgfCBncmVwICR7MSUvfSB8IGF3ayAne3ByaW50ICQxfSdgCitsaXZlX2Rldl9uYW1lPSR7bGl2ZV9kZXZfbmFtZSNcL2Rldi99CisjIE9ubHkgc3RyaXAgdGhlIGRpZ2l0IGlkZW50aWZpZXIgaWYgdGhlIGRldmljZSBpcyBub3QgYW4gbW1jCitjYXNlICRsaXZlX2Rldl9uYW1lIGluCisgICAgbW1jYmxrKikKKyAgICA7OworICAgICopCisgICAgICAgIGxpdmVfZGV2X25hbWU9JHtsaXZlX2Rldl9uYW1lJSVbMC05XSp9CisgICAgOzsKK2VzYWMKKworZWNobyAiU2VhcmNoaW5nIGZvciBoYXJkIGRyaXZlcyAuLi4iCisKK2ZvciBkZXZpY2UgaW4gYGxzIC9zeXMvYmxvY2svYDsgZG8KKyAgICBjYXNlICRkZXZpY2UgaW4KKyAgICAgICAgbG9vcCopCisgICAgICAgICAgICAjIHNraXAgbG9vcCBkZXZpY2UKKyAgICAgICAgICAgIDs7CisgICAgICAgIHNyKikKKyAgICAgICAgICAgICMgc2tpcCBDRFJPTSBkZXZpY2UKKyAgICAgICAgICAgIDs7CisgICAgICAgIHJhbSopCisgICAgICAgICAgICAjIHNraXAgcmFtIGRldmljZQorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgICMgc2tpcCB0aGUgZGV2aWNlIExpdmVPUyBpcyBvbgorICAgICAgICAgICAgIyBBZGQgdmFsaWQgaGFyZCBkcml2ZSBuYW1lIHRvIHRoZSBsaXN0CisgICAgICAgICAgICBjYXNlICRkZXZpY2UgaW4KKyAgICAgICAgICAgICAgICAkbGl2ZV9kZXZfbmFtZSopCisgICAgICAgICAgICAgICAgIyBza2lwIHRoZSBkZXZpY2Ugd2UgYXJlIHJ1bm5pbmcgZnJvbQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgaGRuYW1lbGlzdD0iJGhkbmFtZWxpc3QgJGRldmljZSIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK1RBUkdFVF9ERVZJQ0VfTkFNRT0iIgorZm9yIGhkbmFtZSBpbiAkaGRuYW1lbGlzdDsgZG8KKyAgICAjIERpc3BsYXkgZm91bmQgaGFyZCBkcml2ZXMgYW5kIHRoZWlyIGJhc2ljIGluZm8KKyAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgIGVjaG8gL2Rldi8kaGRuYW1lCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3ZlbmRvciBdOyB0aGVuCisgICAgICAgIGVjaG8gLW4gIlZFTkRPUj0iCisgICAgICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3ZlbmRvcgorICAgIGZpCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL21vZGVsIF07IHRoZW4KKyAgICAgICAgZWNobyAtbiAiTU9ERUw9IgorICAgICAgICBjYXQgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS9tb2RlbAorICAgIGZpCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3VldmVudCBdOyB0aGVuCisgICAgICAgIGVjaG8gLW4gIlVFVkVOVD0iCisgICAgICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3VldmVudAorICAgIGZpCisgICAgZWNobworICAgICMgR2V0IHVzZXIgY2hvaWNlCisgICAgd2hpbGUgdHJ1ZTsgZG8KKyAgICAgICAgZWNobyAtbiAiRG8geW91IHdhbnQgdG8gaW5zdGFsbCB0aGlzIGltYWdlIHRoZXJlPyBbeS9uXSAiCisgICAgICAgIHJlYWQgYW5zd2VyCisgICAgICAgIGlmIFsgIiRhbnN3ZXIiID0gInkiIC1vICIkYW5zd2VyIiA9ICJuIiBdOyB0aGVuCisgICAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgICBlY2hvICJQbGVhc2UgYW5zd2VyIHkgb3IgbiIKKyAgICBkb25lCisgICAgaWYgWyAiJGFuc3dlciIgPSAieSIgXTsgdGhlbgorICAgICAgICBUQVJHRVRfREVWSUNFX05BTUU9JGhkbmFtZQorICAgICAgICBicmVhaworICAgIGZpCitkb25lCisKK2lmIFsgLW4gIiRUQVJHRVRfREVWSUNFX05BTUUiIF07IHRoZW4KKyAgICBlY2hvICJJbnN0YWxsaW5nIGltYWdlIG9uIC9kZXYvJFRBUkdFVF9ERVZJQ0VfTkFNRSAuLi4iCitlbHNlCisgICAgZWNobyAiTm8gaGFyZCBkcml2ZSBzZWxlY3RlZC4gSW5zdGFsbGF0aW9uIGFib3J0ZWQuIgorICAgIGV4aXQgMQorZmkKKworZGV2aWNlPS9kZXYvJFRBUkdFVF9ERVZJQ0VfTkFNRQorCisjCisjIFRoZSB1ZGV2IGF1dG9tb3VudGVyIGNhbiBjYXVzZSBwYWluIGhlcmUsIGtpbGwgaXQKKyMKK3JtIC1mIC9ldGMvdWRldi9ydWxlcy5kL2F1dG9tb3VudC5ydWxlcworcm0gLWYgL2V0Yy91ZGV2L3NjcmlwdHMvbW91bnQqCisKKyMKKyMgVW5tb3VudCBhbnl0aGluZyB0aGUgYXV0b21vdW50ZXIgaGFkIG1vdW50ZWQKKyMKK3Vtb3VudCAke2RldmljZX0qIDI+IC9kZXYvbnVsbCB8fCAvYmluL3RydWUKKworaWYgWyAhIC1iIC9kZXYvbG9vcDAgXSA7IHRoZW4KKyAgICBta25vZCAvZGV2L2xvb3AwIGIgNyAwCitmaQorCitta2RpciAtcCAvdG1wCitpZiBbICEgLUwgL2V0Yy9tdGFiIF07IHRoZW4KKyAgICBjYXQgL3Byb2MvbW91bnRzID4gL2V0Yy9tdGFiCitmaQorCitkaXNrX3NpemU9JChwYXJ0ZWQgJHtkZXZpY2V9IHVuaXQgbWIgcHJpbnQgfCBncmVwIERpc2sgfCBjdXQgLWQiICIgLWYgMyB8IHNlZCAtZSAicy9NQi8vIikKKworZ3J1Yl92ZXJzaW9uPSQoZ3J1Yi1pbnN0YWxsIC12fHNlZCAncy8uKiBcKFswLTldXCkuKi9cMS8nKQorCitpZiBbICRncnViX3ZlcnNpb24gLWVxIDAgXSA7IHRoZW4KKyAgICBiaW9zX2Jvb3Rfc2l6ZT0wCitlbHNlCisgICAgIyBGb3IgR1JVQiAyIHdlIG5lZWQgc2VwYXJhdGUgcGFyaXRpb24gdG8gc3RvcmUgc3RhZ2UyIGdydWIgaW1hZ2UKKyAgICAjIDJNYiB2YWx1ZSBpcyBjaG9zZW4gdG8gYWxpZ24gcGFydGl0aW9uIGZvciBiZXN0IHBlcmZvcm1hbmNlLgorICAgIGJpb3NfYm9vdF9zaXplPTIKK2ZpCisKK3N3YXBfc2l6ZT0kKChkaXNrX3NpemUqc3dhcF9yYXRpby8xMDApKQorcm9vdGZzX3NpemU9JCgoZGlza19zaXplLWJpb3NfYm9vdF9zaXplLWJvb3Rfc2l6ZS1zd2FwX3NpemUpKQorCitib290X3N0YXJ0PSQoKGJpb3NfYm9vdF9zaXplKSkKK3Jvb3Rmc19zdGFydD0kKChiaW9zX2Jvb3Rfc2l6ZStib290X3NpemUpKQorcm9vdGZzX2VuZD0kKChyb290ZnNfc3RhcnQrcm9vdGZzX3NpemUpKQorc3dhcF9zdGFydD0kKChyb290ZnNfZW5kKSkKKworIyBNTUMgZGV2aWNlcyBhcmUgc3BlY2lhbCBpbiBhIGNvdXBsZSBvZiB3YXlzCisjIDEpIHRoZXkgdXNlIGEgcGFydGl0aW9uIHByZWZpeCBjaGFyYWN0ZXIgJ3AnCisjIDIpIHRoZXkgYXJlIGRldGVjdGVkIGFzeW5jaHJvbm91c2x5IChuZWVkIHJvb3R3YWl0KQorcm9vdHdhaXQ9IiIKK3BhcnRfcHJlZml4PSIiCitpZiBbICEgIiR7ZGV2aWNlI21tY2Jsa30iID0gIiR7ZGV2aWNlfSIgXTsgdGhlbgorICAgIHBhcnRfcHJlZml4PSJwIgorICAgIHJvb3R3YWl0PSJyb290d2FpdCIKK2ZpCisKK2lmIFsgJGdydWJfdmVyc2lvbiAtZXEgMCBdIDsgdGhlbgorICAgIGJpb3NfYm9vdD0nJworICAgIGJvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTEKKyAgICByb290ZnM9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0yCisgICAgc3dhcD0ke2RldmljZX0ke3BhcnRfcHJlZml4fTMKK2Vsc2UKKyAgICBiaW9zX2Jvb3Q9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0xCisgICAgYm9vdGZzPSR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MgorICAgIHJvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTMKKyAgICBzd2FwPSR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9NAorZmkKKworZWNobyAiKioqKioqKioqKioqKioqKioiCitbICRncnViX3ZlcnNpb24gLW5lIDAgXSAmJiBlY2hvICJCSU9TIGJvb3QgcGFydGl0aW9uIHNpemU6ICRiaW9zX2Jvb3Rfc2l6ZSBNQiAoJGJpb3NfYm9vdCkiCitlY2hvICJCb290IHBhcnRpdGlvbiBzaXplOiAgICRib290X3NpemUgTUIgKCRib290ZnMpIgorZWNobyAiUm9vdGZzIHBhcnRpdGlvbiBzaXplOiAkcm9vdGZzX3NpemUgTUIgKCRyb290ZnMpIgorZWNobyAiU3dhcCBwYXJ0aXRpb24gc2l6ZTogICAkc3dhcF9zaXplIE1CICgkc3dhcCkiCitlY2hvICIqKioqKioqKioqKioqKioqKiIKK2VjaG8gIkRlbGV0aW5nIHBhcnRpdGlvbiB0YWJsZSBvbiAke2RldmljZX0gLi4uIgorZGQgaWY9L2Rldi96ZXJvIG9mPSR7ZGV2aWNlfSBicz01MTIgY291bnQ9MzUKKworZWNobyAiQ3JlYXRpbmcgbmV3IHBhcnRpdGlvbiB0YWJsZSBvbiAke2RldmljZX0gLi4uIgoraWYgWyAkZ3J1Yl92ZXJzaW9uIC1lcSAwIF0gOyB0aGVuCisgICAgcGFydGVkICR7ZGV2aWNlfSBta3RhYmxlIG1zZG9zCisgICAgZWNobyAiQ3JlYXRpbmcgYm9vdCBwYXJ0aXRpb24gb24gJGJvb3RmcyIKKyAgICBwYXJ0ZWQgJHtkZXZpY2V9IG1rcGFydCBwcmltYXJ5IGV4dDMgMCUgJGJvb3Rfc2l6ZQorZWxzZQorICAgIHBhcnRlZCAke2RldmljZX0gbWt0YWJsZSBncHQKKyAgICBlY2hvICJDcmVhdGluZyBCSU9TIGJvb3QgcGFydGl0aW9uIG9uICRiaW9zX2Jvb3QiCisgICAgcGFydGVkICR7ZGV2aWNlfSBta3BhcnQgYmlvc19ib290IDAlICRiaW9zX2Jvb3Rfc2l6ZQorICAgIHBhcnRlZCAke2RldmljZX0gc2V0IDEgYmlvc19ncnViIG9uCisgICAgZWNobyAiQ3JlYXRpbmcgYm9vdCBwYXJ0aXRpb24gb24gJGJvb3RmcyIKKyAgICBwYXJ0ZWQgJHtkZXZpY2V9IG1rcGFydCBib290IGV4dDMgJGJvb3Rfc3RhcnQgJGJvb3Rfc2l6ZQorZmkKKworZWNobyAiQ3JlYXRpbmcgcm9vdGZzIHBhcnRpdGlvbiBvbiAkcm9vdGZzIgorWyAkZ3J1Yl92ZXJzaW9uIC1lcSAwIF0gJiYgcG5hbWU9J3ByaW1hcnknIHx8IHBuYW1lPSdyb290JworcGFydGVkICR7ZGV2aWNlfSBta3BhcnQgJHBuYW1lIGV4dDMgJHJvb3Rmc19zdGFydCAkcm9vdGZzX2VuZAorCitlY2hvICJDcmVhdGluZyBzd2FwIHBhcnRpdGlvbiBvbiAkc3dhcCIKK1sgJGdydWJfdmVyc2lvbiAtZXEgMCBdICYmIHBuYW1lPSdwcmltYXJ5JyB8fCBwbmFtZT0nc3dhcCcKK3BhcnRlZCAke2RldmljZX0gbWtwYXJ0ICRwbmFtZSBsaW51eC1zd2FwICRzd2FwX3N0YXJ0IDEwMCUKKworcGFydGVkICR7ZGV2aWNlfSBwcmludAorCitlY2hvICJGb3JtYXR0aW5nICRib290ZnMgdG8gZXh0My4uLiIKK21rZnMuZXh0MyAkYm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgJHJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzICRyb290ZnMKKworZWNobyAiRm9ybWF0dGluZyBzd2FwIHBhcnRpdGlvbi4uLigkc3dhcCkiCitta3N3YXAgJHN3YXAKKworbWtkaXIgL3RndF9yb290Citta2RpciAvc3JjX3Jvb3QKK21rZGlyIC1wIC9ib290CisKKyMgSGFuZGxpbmcgb2YgdGhlIHRhcmdldCByb290IHBhcnRpdGlvbgorbW91bnQgJHJvb3RmcyAvdGd0X3Jvb3QKK21vdW50IC1vIHJ3LGxvb3Asbm9hdGltZSxub2RpcmF0aW1lIC9ydW4vbWVkaWEvJDEvJDIgL3NyY19yb290CitlY2hvICJDb3B5aW5nIHJvb3RmcyBmaWxlcy4uLiIKK2NwIC1hIC9zcmNfcm9vdC8qIC90Z3Rfcm9vdAoraWYgWyAtZCAvdGd0X3Jvb3QvZXRjLyBdIDsgdGhlbgorICAgIGlmIFsgJGdydWJfdmVyc2lvbiAtbmUgMCBdIDsgdGhlbgorICAgICAgICBib290X3V1aWQ9JChibGtpZCAtbyB2YWx1ZSAtcyBVVUlEICR7ZGV2aWNlfTIpCisgICAgICAgIHN3YXBfcGFydF91dWlkPSQoYmxraWQgLW8gdmFsdWUgLXMgUEFSVFVVSUQgJHtkZXZpY2V9NCkKKyAgICAgICAgYm9vdGRldj0iVVVJRD0kYm9vdF91dWlkIgorICAgICAgICBzd2FwZGV2PS9kZXYvZGlzay9ieS1wYXJ0dXVpZC8kc3dhcF9wYXJ0X3V1aWQKKyAgICBlbHNlCisgICAgICAgIGJvb3RkZXY9JHtkZXZpY2V9MgorICAgICAgICBzd2FwZGV2PSR7ZGV2aWNlfTQKKyAgICBmaQorICAgIGVjaG8gIiRzd2FwZGV2ICAgICAgICAgICAgICAgIHN3YXAgICAgICAgICAgICAgc3dhcCAgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMCAgMCIgPj4gL3RndF9yb290L2V0Yy9mc3RhYgorICAgIGVjaG8gIiRib290ZGV2ICAgICAgICAgICAgICAvYm9vdCAgICAgICAgICAgIGV4dDMgICAgICAgZGVmYXVsdHMgICAgICAgICAgICAgIDEgIDIiID4+IC90Z3Rfcm9vdC9ldGMvZnN0YWIKKyAgICAjIFdlIGRvbnQgd2FudCB1ZGV2IHRvIG1vdW50IG91ciByb290IGRldmljZSB3aGlsZSB3ZSdyZSBib290aW5nLi4uCisgICAgaWYgWyAtZCAvdGd0X3Jvb3QvZXRjL3VkZXYvIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIiR7ZGV2aWNlfSIgPj4gL3RndF9yb290L2V0Yy91ZGV2L21vdW50LmJsYWNrbGlzdAorICAgIGZpCitmaQordW1vdW50IC90Z3Rfcm9vdAordW1vdW50IC9zcmNfcm9vdAorCisjIEhhbmRsaW5nIG9mIHRoZSB0YXJnZXQgYm9vdCBwYXJ0aXRpb24KK21vdW50ICRib290ZnMgL2Jvb3QKK2VjaG8gIlByZXBhcmluZyBib290IHBhcnRpdGlvbi4uLiIKK2lmIFsgLWYgL2V0Yy9ncnViLmQvMDBfaGVhZGVyIC1hICRncnViX3ZlcnNpb24gLW5lIDAgXSA7IHRoZW4KKyAgICBlY2hvICJQcmVwYXJpbmcgY3VzdG9tIGdydWIyIG1lbnUuLi4iCisgICAgcm9vdF9wYXJ0X3V1aWQ9JChibGtpZCAtbyB2YWx1ZSAtcyBQQVJUVVVJRCAke2RldmljZX0zKQorICAgIGJvb3RfdXVpZD0kKGJsa2lkIC1vIHZhbHVlIC1zIFVVSUQgJHtkZXZpY2V9MikKKyAgICBHUlVCQ0ZHPSIvYm9vdC9ncnViL2dydWIuY2ZnIgorICAgIG1rZGlyIC1wICQoZGlybmFtZSAkR1JVQkNGRykKKyAgICBjYXQgPiRHUlVCQ0ZHIDw8X0VPRgorbWVudWVudHJ5ICJMaW51eCIgeworICAgIHNlYXJjaCAtLW5vLWZsb3BweSAtLWZzLXV1aWQgJGJvb3RfdXVpZCAtLXNldCByb290CisgICAgbGludXggL3ZtbGludXogcm9vdD1QQVJUVVVJRD0kcm9vdF9wYXJ0X3V1aWQgJHJvb3R3YWl0IHJ3ICQ1ICQzICQ0IHF1aWV0Cit9CitfRU9GCisgICAgY2htb2QgMDQ0NCAkR1JVQkNGRworZmkKK2dydWItaW5zdGFsbCAke2RldmljZX0KKworaWYgWyAkZ3J1Yl92ZXJzaW9uIC1lcSAwIF0gOyB0aGVuCisgICAgZWNobyAiKGhkMCkgJHtkZXZpY2V9IiA+IC9ib290L2dydWIvZGV2aWNlLm1hcAorICAgIGVjaG8gIlByZXBhcmluZyBjdXN0b20gZ3J1YiBtZW51Li4uIgorICAgIGVjaG8gImRlZmF1bHQgMCIgPiAvYm9vdC9ncnViL21lbnUubHN0CisgICAgZWNobyAidGltZW91dCAzMCIgPj4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gInRpdGxlIExpdmUgQm9vdC9JbnN0YWxsLUltYWdlIiA+PiAvYm9vdC9ncnViL21lbnUubHN0CisgICAgZWNobyAicm9vdCAgKGhkMCwwKSIgPj4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gImtlcm5lbCAvdm1saW51eiByb290PSRyb290ZnMgcncgJDMgJDQgcXVpZXQiID4+IC9ib290L2dydWIvbWVudS5sc3QKK2ZpCisKK2NwIC9ydW4vbWVkaWEvJDEvdm1saW51eiAvYm9vdC8KKwordW1vdW50IC9ib290CisKK3N5bmMKKworZWNobyAiUmVtb3ZlIHlvdXIgaW5zdGFsbGF0aW9uIG1lZGlhLCBhbmQgcHJlc3MgRU5URVIiCisKK3JlYWQgZW50ZXIKKworZWNobyAiUmVib290aW5nLi4uIgorcmVib290IC1mCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1saXZlLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtbGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODUyYzU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtbGl2ZS5zaApAQCAtMCwwICsxLDIzNSBAQAorIyEvYmluL3NoCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworUk9PVF9NT1VOVD0iL3Jvb3Rmcy8iCitST09UX0lNQUdFPSJyb290ZnMuaW1nIgorTU9VTlQ9Ii9iaW4vbW91bnQiCitVTU9VTlQ9Ii9iaW4vdW1vdW50IgorSVNPTElOVVg9IiIKKworUk9PVF9ESVNLPSIiCisKKyMgQ29waWVkIGZyb20gaW5pdHJhbWZzLWZyYW1ld29yay4gVGhlIGNvcmUgb2YgdGhpcyBzY3JpcHQgcHJvYmFibHkgc2hvdWxkIGJlCisjIHR1cm5lZCBpbnRvIGluaXRyYW1mcy1mcmFtZXdvcmsgbW9kdWxlcyB0byByZWR1Y2UgZHVwbGljYXRpb24uCit1ZGV2X2RhZW1vbigpIHsKKwlPUFRJT05TPSIvc2Jpbi91ZGV2L3VkZXZkIC9zYmluL3VkZXZkIC9saWIvdWRldi91ZGV2ZCAvbGliL3N5c3RlbWQvc3lzdGVtZC11ZGV2ZCIKKworCWZvciBvIGluICRPUFRJT05TOyBkbworCQlpZiBbIC14ICIkbyIgXTsgdGhlbgorCQkJZWNobyAkbworCQkJcmV0dXJuIDAKKwkJZmkKKwlkb25lCisKKwlyZXR1cm4gMQorfQorCitfVURFVl9EQUVNT049YHVkZXZfZGFlbW9uYAorCitlYXJseV9zZXR1cCgpIHsKKyAgICBta2RpciAtcCAvcHJvYworICAgIG1rZGlyIC1wIC9zeXMKKyAgICBtb3VudCAtdCBwcm9jIHByb2MgL3Byb2MKKyAgICBtb3VudCAtdCBzeXNmcyBzeXNmcyAvc3lzCisgICAgbW91bnQgLXQgZGV2dG1wZnMgbm9uZSAvZGV2CisKKyAgICAjIHN1cHBvcnQgbW9kdWxhciBrZXJuZWwKKyAgICBtb2Rwcm9iZSBpc29mcyAyPiAvZGV2L251bGwKKworICAgIG1rZGlyIC1wIC9ydW4KKyAgICBta2RpciAtcCAvdmFyL3J1bgorCisgICAgJF9VREVWX0RBRU1PTiAtLWRhZW1vbgorICAgIHVkZXZhZG0gdHJpZ2dlciAtLWFjdGlvbj1hZGQKK30KKworcmVhZF9hcmdzKCkgeworICAgIFsgLXogIiRDTURMSU5FIiBdICYmIENNRExJTkU9YGNhdCAvcHJvYy9jbWRsaW5lYAorICAgIGZvciBhcmcgaW4gJENNRExJTkU7IGRvCisgICAgICAgIG9wdGFyZz1gZXhwciAieCRhcmciIDogJ3hbXj1dKj1cKC4qXCknYAorICAgICAgICBjYXNlICRhcmcgaW4KKyAgICAgICAgICAgIHJvb3Q9KikKKyAgICAgICAgICAgICAgICBST09UX0RFVklDRT0kb3B0YXJnIDs7CisgICAgICAgICAgICByb290aW1hZ2U9KikKKyAgICAgICAgICAgICAgICBST09UX0lNQUdFPSRvcHRhcmcgOzsKKyAgICAgICAgICAgIHJvb3Rmc3R5cGU9KikKKyAgICAgICAgICAgICAgICBtb2Rwcm9iZSAkb3B0YXJnIDI+IC9kZXYvbnVsbCA7OworICAgICAgICAgICAgTEFCRUw9KikKKyAgICAgICAgICAgICAgICBsYWJlbD0kb3B0YXJnIDs7CisgICAgICAgICAgICB2aWRlbz0qKQorICAgICAgICAgICAgICAgIHZpZGVvX21vZGU9JGFyZyA7OworICAgICAgICAgICAgdmdhPSopCisgICAgICAgICAgICAgICAgdmdhX21vZGU9JGFyZyA7OworICAgICAgICAgICAgY29uc29sZT0qKQorICAgICAgICAgICAgICAgIGlmIFsgLXogIiR7Y29uc29sZV9wYXJhbXN9IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVfcGFyYW1zPSRhcmcKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVfcGFyYW1zPSIkY29uc29sZV9wYXJhbXMgJGFyZyIKKyAgICAgICAgICAgICAgICBmaSA7OworICAgICAgICAgICAgZGVidWdzaGVsbCopCisgICAgICAgICAgICAgICAgaWYgWyAteiAiJG9wdGFyZyIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGx0aW1lb3V0PTMwCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGx0aW1lb3V0PSRvcHRhcmcKKyAgICAgICAgICAgICAgICBmaSAKKyAgICAgICAgZXNhYworICAgIGRvbmUKK30KKworYm9vdF9saXZlX3Jvb3QoKSB7CisgICAgIyBXYXRjaGVzIHRoZSB1ZGV2IGV2ZW50IHF1ZXVlLCBhbmQgZXhpdHMgaWYgYWxsIGN1cnJlbnQgZXZlbnRzIGFyZSBoYW5kbGVkCisgICAgdWRldmFkbSBzZXR0bGUgLS10aW1lb3V0PTMgLS1xdWlldAorICAgIGtpbGxhbGwgIiR7X1VERVZfREFFTU9OIyMqL30iIDI+L2Rldi9udWxsCisKKyAgICAjIEFsbG93IGZvciBpZGVudGlmaWNhdGlvbiBvZiB0aGUgcmVhbCByb290IGV2ZW4gYWZ0ZXIgYm9vdAorICAgIG1rZGlyIC1wICAke1JPT1RfTU9VTlR9L21lZGlhL3JlYWxyb290CisgICAgbW91bnQgLW4gLS1tb3ZlICIvcnVuL21lZGlhLyR7Uk9PVF9ESVNLfSIgJHtST09UX01PVU5UfS9tZWRpYS9yZWFscm9vdAorCisgICAgIyBNb3ZlIHRoZSBtb3VudCBwb2ludHMgb2Ygc29tZSBmaWxlc3lzdGVtcyBvdmVyIHRvCisgICAgIyB0aGUgY29ycmVzcG9uZGluZyBkaXJlY3RvcmllcyB1bmRlciB0aGUgcmVhbCByb290IGZpbGVzeXN0ZW0uCisgICAgZm9yIGRpciBpbiBgYXdrICcvXC9kZXYuKiBcL3J1blwvbWVkaWEve3ByaW50ICQyfScgL3Byb2MvbW91bnRzYDsgZG8KKyAgICAgICAgbWtkaXIgLXAgICR7Uk9PVF9NT1VOVH0vbWVkaWEvJHtkaXIjIyovfQorICAgICAgICBtb3VudCAtbiAtLW1vdmUgJGRpciAke1JPT1RfTU9VTlR9L21lZGlhLyR7ZGlyIyMqL30KKyAgICBkb25lCisgICAgbW91bnQgLW4gLS1tb3ZlIC9wcm9jICR7Uk9PVF9NT1VOVH0vcHJvYworICAgIG1vdW50IC1uIC0tbW92ZSAvc3lzICR7Uk9PVF9NT1VOVH0vc3lzCisgICAgbW91bnQgLW4gLS1tb3ZlIC9kZXYgJHtST09UX01PVU5UfS9kZXYKKworICAgIGNkICRST09UX01PVU5UCisKKyAgICAjIGJ1c3lib3ggc3dpdGNoX3Jvb3Qgc3VwcG9ydHMgLWMgb3B0aW9uCisgICAgZXhlYyBzd2l0Y2hfcm9vdCAtYyAvZGV2L2NvbnNvbGUgJFJPT1RfTU9VTlQgL3NiaW4vaW5pdCAkQ01ETElORSB8fAorICAgICAgICBmYXRhbCAiQ291bGRuJ3Qgc3dpdGNoX3Jvb3QsIGRyb3BwaW5nIHRvIHNoZWxsIgorfQorCitmYXRhbCgpIHsKKyAgICBlY2hvICQxID4kQ09OU09MRQorICAgIGVjaG8gPiRDT05TT0xFCisgICAgZXhlYyBzaAorfQorCitlYXJseV9zZXR1cAorCitbIC16ICIkQ09OU09MRSIgXSAmJiBDT05TT0xFPSIvZGV2L2NvbnNvbGUiCisKK3JlYWRfYXJncworCitlY2hvICJXYWl0aW5nIGZvciByZW1vdmFibGUgbWVkaWEuLi4iCitDPTAKK3doaWxlIHRydWUKK2RvCisgIGZvciBpIGluIGBscyAvcnVuL21lZGlhIDI+L2Rldi9udWxsYDsgZG8KKyAgICAgIGlmIFsgLWYgL3J1bi9tZWRpYS8kaS8kUk9PVF9JTUFHRSBdIDsgdGhlbgorCQlmb3VuZD0ieWVzIgorCQlST09UX0RJU0s9IiRpIgorCQlicmVhaworCSAgZWxpZiBbIC1mIC9ydW4vbWVkaWEvJGkvaXNvbGludXgvJFJPT1RfSU1BR0UgXTsgdGhlbgorCQlmb3VuZD0ieWVzIgorCQlJU09MSU5VWD0iaXNvbGludXgiCisJCVJPT1RfRElTSz0iJGkiCisJCWJyZWFrCQorICAgICAgZmkKKyAgZG9uZQorICBpZiBbICIkZm91bmQiID0gInllcyIgXTsgdGhlbgorICAgICAgYnJlYWs7CisgIGZpCisgICMgZG9uJ3Qgd2FpdCBmb3IgbW9yZSB0aGFuICRzaGVsbHRpbWVvdXQgc2Vjb25kcywgaWYgaXQncyBzZXQKKyAgaWYgWyAtbiAiJHNoZWxsdGltZW91dCIgXTsgdGhlbgorICAgICAgZWNobyAtbiAiICIgJCgoICRzaGVsbHRpbWVvdXQgLSAkQyApKQorICAgICAgaWYgWyAkQyAtZ2UgJHNoZWxsdGltZW91dCBdOyB0aGVuCisgICAgICAgICAgIGVjaG8gIi4uLiIKKwkgICBlY2hvICJNb3VudGVkIGZpbGVzeXN0ZW1zIgorICAgICAgICAgICBtb3VudCB8IGdyZXAgbWVkaWEKKyAgICAgICAgICAgZWNobyAiQXZhaWxhYmxlIGJsb2NrIGRldmljZXMiCisgICAgICAgICAgIGNhdCAvcHJvYy9wYXJ0aXRpb25zCisgICAgICAgICAgIGZhdGFsICJDYW5ub3QgZmluZCAkUk9PVF9JTUFHRSBmaWxlIGluIC9ydW4vbWVkaWEvKiAsIGRyb3BwaW5nIHRvIGEgc2hlbGwgIgorICAgICAgZmkKKyAgICAgIEM9JCgoIEMgKyAxICkpCisgIGZpCisgIHNsZWVwIDEKK2RvbmUKKworIyBUcnkgdG8gbW91bnQgdGhlIHJvb3QgaW1hZ2UgcmVhZC13cml0ZSBhbmQgdGhlbiBib290IGl0IHVwLgorIyBUaGlzIGZ1bmN0aW9uIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBhIHJlYWQtb25seSBpbWFnZSBhbmQgYSByZWFkLXdyaXRlIGltYWdlLgorIyBJbiB0aGUgZm9ybWVyIGNhc2UgKHR5cGljYWxseSBhbiBpc28pLCBpdCB0cmllcyB0byBtYWtlIGEgdW5pb24gbW91bnQgaWYgcG9zc2libGUuCisjIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIHJvb3QgaW1hZ2UgY291bGQgYmUgbW91bnRlZCBhbmQgdGhlbiBkaXJlY3RseSBib290ZWQgdXAuCittb3VudF9hbmRfYm9vdCgpIHsKKyAgICBta2RpciAkUk9PVF9NT1VOVAorICAgIG1rbm9kIC9kZXYvbG9vcDAgYiA3IDAgMj4vZGV2L251bGwKKworICAgIGlmICEgbW91bnQgLW8gcncsbG9vcCxub2F0aW1lLG5vZGlyYXRpbWUgL3J1bi9tZWRpYS8kUk9PVF9ESVNLLyRJU09MSU5VWC8kUk9PVF9JTUFHRSAkUk9PVF9NT1VOVCA7IHRoZW4KKwlmYXRhbCAiQ291bGQgbm90IG1vdW50IHJvb3RmcyBpbWFnZSIKKyAgICBmaQorCisgICAgaWYgdG91Y2ggJFJPT1RfTU9VTlQvYmluIDI+L2Rldi9udWxsOyB0aGVuCisJIyBUaGUgcm9vdCBpbWFnZSBpcyByZWFkLXdyaXRlLCBkaXJlY3RseSBib290IGl0IHVwLgorCWJvb3RfbGl2ZV9yb290CisgICAgZmkKKworICAgICMgZGV0ZXJtaW5lIHdoaWNoIHVuaWZpY2F0aW9uIGZpbGVzeXN0ZW0gdG8gdXNlCisgICAgdW5pb25fZnNfdHlwZT0iIgorICAgIGlmIGdyZXAgLXEgLXcgIm92ZXJsYXlmcyIgL3Byb2MvZmlsZXN5c3RlbXM7IHRoZW4KKwl1bmlvbl9mc190eXBlPSJvdmVybGF5ZnMiCisgICAgZWxpZiBncmVwIC1xIC13ICJhdWZzIiAvcHJvYy9maWxlc3lzdGVtczsgdGhlbgorCXVuaW9uX2ZzX3R5cGU9ImF1ZnMiCisgICAgZWxzZQorCXVuaW9uX2ZzX3R5cGU9IiIKKyAgICBmaQorCisgICAgIyBtYWtlIGEgdW5pb24gbW91bnQgaWYgcG9zc2libGUKKyAgICBjYXNlICR1bmlvbl9mc190eXBlIGluCisJIm92ZXJsYXlmcyIpCisJICAgIG1rZGlyIC1wIC9yb290ZnMucm8gL3Jvb3Rmcy5ydworCSAgICBpZiAhIG1vdW50IC1uIC0tbW92ZSAkUk9PVF9NT1VOVCAvcm9vdGZzLnJvOyB0aGVuCisJCXJtIC1yZiAvcm9vdGZzLnJvIC9yb290ZnMucncKKwkJZmF0YWwgIkNvdWxkIG5vdCBtb3ZlIHJvb3RmcyBtb3VudCBwb2ludCIKKwkgICAgZWxzZQorCQltb3VudCAtdCB0bXBmcyAtbyBydyxub2F0aW1lLG1vZGU9NzU1IHRtcGZzIC9yb290ZnMucncKKwkJbW91bnQgLXQgb3ZlcmxheWZzIC1vICJsb3dlcmRpcj0vcm9vdGZzLnJvLHVwcGVyZGlyPS9yb290ZnMucnciIG92ZXJsYXlmcyAkUk9PVF9NT1VOVAorCQlta2RpciAtcCAkUk9PVF9NT1VOVC9yb290ZnMucm8gJFJPT1RfTU9VTlQvcm9vdGZzLnJ3CisJCW1vdW50IC0tbW92ZSAvcm9vdGZzLnJvICRST09UX01PVU5UL3Jvb3Rmcy5ybworCQltb3VudCAtLW1vdmUgL3Jvb3Rmcy5ydyAkUk9PVF9NT1VOVC9yb290ZnMucncKKwkgICAgZmkKKwkgICAgOzsKKwkiYXVmcyIpCisJICAgIG1rZGlyIC1wIC9yb290ZnMucm8gL3Jvb3Rmcy5ydworCSAgICBpZiAhIG1vdW50IC1uIC0tbW92ZSAkUk9PVF9NT1VOVCAvcm9vdGZzLnJvOyB0aGVuCisJCXJtIC1yZiAvcm9vdGZzLnJvIC9yb290ZnMucncKKwkJZmF0YWwgIkNvdWxkIG5vdCBtb3ZlIHJvb3RmcyBtb3VudCBwb2ludCIKKwkgICAgZWxzZQorCQltb3VudCAtdCB0bXBmcyAtbyBydyxub2F0aW1lLG1vZGU9NzU1IHRtcGZzIC9yb290ZnMucncKKwkJbW91bnQgLXQgYXVmcyAtbyAiZGlycz0vcm9vdGZzLnJ3PXJ3Oi9yb290ZnMucm89cm8iIGF1ZnMgJFJPT1RfTU9VTlQKKwkJbWtkaXIgLXAgJFJPT1RfTU9VTlQvcm9vdGZzLnJvICRST09UX01PVU5UL3Jvb3Rmcy5ydworCQltb3VudCAtLW1vdmUgL3Jvb3Rmcy5ybyAkUk9PVF9NT1VOVC9yb290ZnMucm8KKwkJbW91bnQgLS1tb3ZlIC9yb290ZnMucncgJFJPT1RfTU9VTlQvcm9vdGZzLnJ3CisJICAgIGZpCisJICAgIDs7CisJIiIpCisJICAgIG1vdW50IC10IHRtcGZzIC1vIHJ3LG5vYXRpbWUsbW9kZT03NTUgdG1wZnMgJFJPT1RfTU9VTlQvbWVkaWEKKwkgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIGJvb3QgdGhlIGltYWdlCisgICAgYm9vdF9saXZlX3Jvb3QKK30KKworY2FzZSAkbGFiZWwgaW4KKyAgICBib290KQorCW1vdW50X2FuZF9ib290CisJOzsKKyAgICBpbnN0YWxsfGluc3RhbGwtZWZpKQorCWlmIFsgLWYgL3J1bi9tZWRpYS8kaS8kSVNPTElOVVgvJFJPT1RfSU1BR0UgXSA7IHRoZW4KKwkgICAgLi8kbGFiZWwuc2ggJGkvJElTT0xJTlVYICRST09UX0lNQUdFICR2aWRlb19tb2RlICR2Z2FfbW9kZSAkY29uc29sZV9wYXJhbXMKKwllbHNlCisJICAgIGZhdGFsICJDb3VsZCBub3QgZmluZCAkbGFiZWwgc2NyaXB0IgorCWZpCisKKwkjIElmIHdlJ3JlIGdldHRpbmcgaGVyZSwgd2UgZmFpbGVkLi4uCisJZmF0YWwgIkluc3RhbGxhdGlvbiBpbWFnZSBmYWlsZWQiCisJOzsKKyAgICAqKQorCSMgTm90IHN1cmUgd2hhdCBib290IGxhYmVsIGlzIHByb3ZpZGVkLiAgVHJ5IHRvIGJvb3QgdG8gYXZvaWQgbG9ja2luZyB1cC4KKwltb3VudF9hbmRfYm9vdAorCTs7Citlc2FjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWJvb3RfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1ib290XzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWU3OTY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1ib290XzEuMC5iYgpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIkV4dHJlbWVseSBiYXNpYyBsaXZlIGltYWdlIGluaXQgc2NyaXB0IgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQtYm9vdC5zaCIKKworUFIgPSAicjIiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdC1ib290LnNoICR7RH0vaW5pdAorfQorCitpbmhlcml0IGFsbGFyY2gKKworRklMRVNfJHtQTn0gKz0gIiAvaW5pdCAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9kZWJ1ZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2RlYnVnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYmZkN2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9kZWJ1ZwpAQCAtMCwwICsxLDgyIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAyMDExIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorIyBMaWNlbnNlZCBvbiBNSVQKKworIyBBZGRzIHN1cHBvcnQgdG8gZHluYW1pYyBkZWJ1Z2dpbmcgb2YgaW5pdHJhbWZzIHVzaW5nIGJvb3RwYXJhbSBpbgorIyBmb2xsb3dpbmcgZm9ybWF0OgorIyAgIHNoZWxsICAgICAgICAgICAgICAgICA6IHN0YXJ0cyBhIHNoZWxsIGJlZm9yZSBhbmQgYWZ0ZXIgZWFjaCBtb2R1bGUKKyMgICBzaGVsbD1iZWZvcmU6PG1vZHVsZT4gOiBzdGFydHMgYSBzaGVsbCBiZWZvcmUgPG1vZHVsZT4gaXMgbG9hZGVkIGFuZCBydW4KKyMgICBzaGVsbD1hZnRlcjo8bW9kdWxlPiAgOiBzdGFydHMgYSBzaGVsbCBhZnRlciA8bW9kdWxlPiBpcyBsb2FkZWQgYW5kIHJ1bgorIworIyAgIHNoZWxsLWRlYnVnICAgICAgICAgICAgICAgICA6IHJ1biBzZXQgLXggYXMgc29vbiBhcyBwb3NzaWJsZQorIyAgIHNoZWxsLWRlYnVnPWJlZm9yZTo8bW9kdWxlPiA6IHJ1biBzZXQgLXggYmVmb3JlIDxtb2R1bGU+IGlzIGxvYWRlZCBhbmQgcnVuCisjICAgc2hlbGwtZGVidWc9YWZ0ZXI6PG1vZHVsZT4gIDogcnVuIHNldCAteCBhZnRlciA8bW9kdWxlPiBpcyBsb2FkZWQgYW5kIHJ1bgorCitERUJVR19TSEVMTD0iZmFsc2UiCisKK2RlYnVnX2hvb2tfaGFuZGxlcigpIHsKKwlzdGF0dXM9JDEKKwltb2R1bGU9JDIKKworCWlmIFsgLW4gIiRib290cGFyYW1fc2hlbGwiIF0gJiYgWyAiJGJvb3RwYXJhbV9zaGVsbCIgIT0gInRydWUiIF07IHRoZW4KKwkJc2hlbGxfd2FudGVkX3N0YXR1cz1gZXhwciAkYm9vdHBhcmFtX3NoZWxsIDogJ1woLipcKTouKidgCisJCXNoZWxsX3dhbnRlZF9tb2R1bGU9YGV4cHIgJGJvb3RwYXJhbV9zaGVsbCA6ICcuKjpcKC4qXCknYAorCisJCWlmIFsgIiRzaGVsbF93YW50ZWRfc3RhdHVzIiA9ICJiZWZvcmUiIF07IHRoZW4KKwkJCXNoZWxsX3dhbnRlZF9zdGF0dXM9cHJlCisJCWVsc2UKKwkJCXNoZWxsX3dhbnRlZF9zdGF0dXM9cG9zdAorCQlmaQorCWZpCisKKwlpZiBbICIkYm9vdHBhcmFtX3NoZWxsIiA9ICJ0cnVlIiBdIHx8CisJCSggWyAiJHN0YXR1cyIgPSAiJHNoZWxsX3dhbnRlZF9zdGF0dXMiIF0gJiYKKwkJCVsgIiRtb2R1bGUiID0gIiRzaGVsbF93YW50ZWRfbW9kdWxlIiBdICk7IHRoZW4KKwkJaWYgWyAiJHN0YXR1cyIgPSAicHJlIiBdOyB0aGVuCisJCQlzdGF0dXNfbXNnPSJiZWZvcmUiCisJCWVsc2UKKwkJCXN0YXR1c19tc2c9ImFmdGVyIgorCQlmaQorCisJCW1zZyAiU3RhcnRpbmcgc2hlbGwgJHN0YXR1c19tc2cgJG1vZHVsZS4uLiIKKwkJc2gKKwlmaQorCisJaWYgWyAtbiAiJGJvb3RwYXJhbV9zaGVsbF9kZWJ1ZyIgXSAmJiBbICIkYm9vdHBhcmFtX3NoZWxsX2RlYnVnIiAhPSAidHJ1ZSIgXTsgdGhlbgorCQlzaGVsbF9kZWJ1Z193YW50ZWRfc3RhdHVzPWBleHByICRib290cGFyYW1fc2hlbGxfZGVidWcgOiAnXCguKlwpOi4qJ2AKKwkJc2hlbGxfZGVidWdfd2FudGVkX21vZHVsZT1gZXhwciAkYm9vdHBhcmFtX3NoZWxsX2RlYnVnIDogJy4qOlwoLipcKSdgCisKKwkJaWYgWyAiJHNoZWxsX2RlYnVnX3dhbnRlZF9zdGF0dXMiID0gImJlZm9yZSIgXTsgdGhlbgorCQkJc2hlbGxfZGVidWdfd2FudGVkX3N0YXR1cz1wcmUKKwkJZWxzZQorCQkJc2hlbGxfZGVidWdfd2FudGVkX3N0YXR1cz1wb3N0CisJCWZpCisJZmkKKworCWlmIFsgIiRib290cGFyYW1fc2hlbGxfZGVidWciID0gInRydWUiIF0gfHwKKwkJKCBbICIkc3RhdHVzIiA9ICIkc2hlbGxfZGVidWdfd2FudGVkX3N0YXR1cyIgXSAmJgorCQkJWyAiJG1vZHVsZSIgPSAiJHNoZWxsX2RlYnVnX3dhbnRlZF9tb2R1bGUiIF0gKTsgdGhlbgorCQlpZiBbICIkREVCVUdfU0hFTEwiID0gInRydWUiIF07IHRoZW4KKwkJCXJldHVybiAwCisJCWZpCisKKwkJaWYgWyAiJHN0YXR1cyIgPSAicHJlIiBdOyB0aGVuCisJCQlzdGF0dXNfbXNnPSJiZWZvcmUiCisJCWVsc2UKKwkJCXN0YXR1c19tc2c9ImFmdGVyIgorCQlmaQorCisJCW1zZyAiU3RhcnRpbmcgc2hlbGwgZGVidWdnaW5nICRzdGF0dXNfbXNnICRtb2R1bGUuLi4iCisJCURFQlVHX1NIRUxMPSJ0cnVlIgorCQlzZXQgLXgKKwlmaQorfQorCitkZWJ1Z19lbmFibGVkKCkgeworCXJldHVybiAwCit9CisKK2RlYnVnX3J1bigpIHsKKwlhZGRfbW9kdWxlX3ByZV9ob29rICJkZWJ1Z19ob29rX2hhbmRsZXIiCisJYWRkX21vZHVsZV9wb3N0X2hvb2sgImRlYnVnX2hvb2tfaGFuZGxlciIKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2UyZnMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9lMmZzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI5ZjgwMWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9lMmZzCkBAIC0wLDAgKzEsMjggQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjIExpY2Vuc2VkIG9uIE1JVAorCitlMmZzX2VuYWJsZWQoKSB7CisJcmV0dXJuIDAKK30KKworZTJmc19ydW4oKSB7CisJZmlsZXN5c3RlbXM9ImV4dDQgZXh0MyBleHQyIgorCisJIyBsb2FkIG1vZHVsZXMKKwlmb3IgZnMgaW4gJGZpbGVzeXN0ZW1zOyBkbworCQlsb2FkX2tlcm5lbF9tb2R1bGUgJGZzCisJZG9uZQorCisJZm9yIGZzIGluICRmaWxlc3lzdGVtczsgZG8KKwkJZXZhbCAiZnNfb3B0aW9ucz1cJGJvb3RwYXJhbV8ke2ZzfSIKKwkJaWYgWyAtbiAiJGZzX29wdGlvbnMiIF07IHRoZW4KKwkJICAgIGRldj1gZXhwciAiJGZzX29wdGlvbnMiIDogJ1woW146XSpcKS4qJ2AKKwkJICAgIHBhdGg9YGV4cHIgIiRmc19vcHRpb25zIiA6ICdbXjpdKjpcKFteOl0qXCkuKidgCisKKwkJICAgIGluZm8gIk1vdW50aW5nICRkZXYgYXMgJGZzIG9uICRwYXRoIGFzICRmcy4uLiIKKwkJCW1rZGlyIC1wICRwYXRoCisJCSAgICBtb3VudCAtdCAkZnMgJGRldiAkcGF0aAorCQlmaQorCWRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2ZpbmlzaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2ZpbmlzaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNzEyZmYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvZmluaXNoCkBAIC0wLDAgKzEsNjAgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjIExpY2Vuc2VkIG9uIE1JVAorCitmaW5pc2hfZW5hYmxlZCgpIHsKKwlyZXR1cm4gMAorfQorCitmaW5pc2hfcnVuKCkgeworCWlmIFsgLW4gIiRST09URlNfRElSIiBdOyB0aGVuCisJCWlmIFsgLW4gIiRib290cGFyYW1fcm9vdGRlbGF5IiBdOyB0aGVuCisJCQlkZWJ1ZyAiU2xlZXBpbmcgZm9yICRyb290ZGVsYXkgc2Vjb25kKHMpIHRvIHdhaXQgcm9vdCB0byBzZXR0bGUuLi4iCisJCQlzbGVlcCAkYm9vdHBhcmFtX3Jvb3RkZWxheQorCQlmaQorCisJCWlmIFsgLW4gIiRib290cGFyYW1fcm9vdCIgXTsgdGhlbgorCQkJZGVidWcgIk5vIGUyZnMgY29tcGF0aWJsZSBmaWxlc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQsIG1vdW50aW5nICRib290cGFyYW1fcm9vdC4uLiIKKworCQkJaWYgWyAiYGVjaG8gJHtib290cGFyYW1fcm9vdH0gfCBjdXQgLWMxLTVgIiA9ICJVVUlEPSIgXTsgdGhlbgorCQkJCXJvb3RfdXVpZD1gZWNobyAkYm9vdHBhcmFtX3Jvb3QgfCBjdXQgLWM2LWAKKwkJCQlib290cGFyYW1fcm9vdD0iL2Rldi9kaXNrL2J5LXV1aWQvJHJvb3RfdXVpZCIKKwkJCWZpCisKKwkJCWlmIFsgLWUgIiRib290cGFyYW1fcm9vdCIgXTsgdGhlbgorCQkJCWZsYWdzPSIiCisJCQkJaWYgWyAtbiAiJGJvb3RwYXJhbV9ybyIgXTsgdGhlbgorCQkJCQlpZiBbICAtbiAiJGJvb3RwYXJhbV9yb290ZmxhZ3MiIF07IHRoZW4KKwkJCQkJCWJvb3RwYXJhbV9yb290ZmxhZ3M9IiRib290cGFyYW1fcm9vdGZsYWdzLCIKKwkJCQkJZmkKKwkJCQkJYm9vdHBhcmFtX3Jvb3RmbGFncz0iJHtib290cGFyYW1fcm9vdGZsYWdzfXJvIgorCQkJCWZpCisJCQkJaWYgWyAtbiAiJGJvb3RwYXJhbV9yb290ZmxhZ3MiIF07IHRoZW4KKwkJCQkJZmxhZ3M9IiRmbGFncyAtbyRib290cGFyYW1fcm9vdGZsYWdzIgorCQkJCWZpCisJCQkJaWYgWyAtbiAiJGJvb3RwYXJhbV9yb290ZnN0eXBlIiBdOyB0aGVuCisJCQkJCWZsYWdzPSIkZmxhZ3MgLXQkYm9vdHBhcmFtX3Jvb3Rmc3R5cGUiCisJCQkJZmkKKwkJCQltb3VudCAkZmxhZ3MgJGJvb3RwYXJhbV9yb290ICRST09URlNfRElSCisJCQllbHNlCisJCQkJZGVidWcgInJvb3QgJyRib290cGFyYW1fcm9vdCcgZG9lc24ndCBleGlzdC4iCisJCQlmaQorCQlmaQorCisJCWlmIFsgISAtZCAkUk9PVEZTX0RJUi9kZXYgXTsgdGhlbgorCQkJZmF0YWwgIkVSUk9SOiBUaGVyZSdzIG5vICcvZGV2JyBvbiByb290ZnMuIgorCQlmaQorCisJCWluZm8gIlN3aXRjaGluZyByb290IHRvICckUk9PVEZTX0RJUicuLi4iCisKKwkJZGVidWcgIk1vdmluZyAvZGV2LCAvcHJvYyBhbmQgL3N5cyBvbnRvIHJvb3Rmcy4uLiIKKwkJbW91bnQgLS1tb3ZlIC9kZXYgJFJPT1RGU19ESVIvZGV2CisJCW1vdW50IC0tbW92ZSAvcHJvYyAkUk9PVEZTX0RJUi9wcm9jCisJCW1vdW50IC0tbW92ZSAvc3lzICRST09URlNfRElSL3N5cworCisJCWNkICRST09URlNfRElSCisJCWV4ZWMgc3dpdGNoX3Jvb3QgLWMgL2Rldi9jb25zb2xlICRST09URlNfRElSICR7Ym9vdHBhcmFtX2luaXQ6LS9zYmluL2luaXR9CisJZWxzZQorCQlkZWJ1ZyAiTm8gcm9vdGZzIGhhcyBiZWVuIHNldCIKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTI5MWFkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2luaXQKQEAgLTAsMCArMSwxNDUgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjIExpY2Vuc2VkIG9uIE1JVAorIworIyBQcm92aWRlcyB0aGUgQVBJIHRvIGJlIHVzZWQgYnkgdGhlIGluaXRyYW1mcyBtb2R1bGVzCisjCisjIE1vZHVsZXMgbmVlZCB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorIworIyA8bW9kdWxlPl9lbmFibGVkIDogY2hlY2sgaWYgdGhlIG1vZHVsZSBvdWdodCB0byBydW4gKHJldHVybiAxIHRvIHNraXApCisjIDxtb2R1bGU+X3J1biAgICAgOiBkbyB3aGF0IGlzIG5lZWQKKyMKKyMgQm9vdCBwYXJhbWV0ZXJzIGFyZSBhdmFpbGFibGUgb24gZW52aXJvbm1lbnQgaW4gdGhlIGFzOgorIworIyAnZm9vPXZhbHVlJyBhcyAnYm9vdHBhcmFtX2Zvbz12YWx1ZScKKyMgJ2ZvbycgYXMgJ2Jvb3RwYXJhbV9mb289dHJ1ZScKKyMgJ2Zvby5iYXJbPXZhbHVlXSBhcyAnZm9vX2Jhcj1bdmFsdWV8dHJ1ZV0nCisKKyMgUmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYmVmb3JlIHJ1bm5pbmcgYSBtb2R1bGUKKyMgVGhlIGhvb2sgaXMgY2FsbGVkIGFzOgorIyAgIDxmdW5jdGlvbj4gcHJlIDxtb2R1bGU+CithZGRfbW9kdWxlX3ByZV9ob29rKCkgeworCU1PRFVMRV9QUkVfSE9PS1M9IiRNT0RVTEVfUFJFX0hPT0tTICQxIgorfQorCisjIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIHJ1bm5pbmcgYSBtb2R1bGUKKyMgVGhlIGhvb2sgaXMgY2FsbGVkIGFzOgorIyAgIDxmdW5jdGlvbj4gcG9zdCA8bW9kdWxlPgorYWRkX21vZHVsZV9wb3N0X2hvb2soKSB7CisJTU9EVUxFX1BPU1RfSE9PS1M9IiRNT0RVTEVfUE9TVF9IT09LUyAkMSIKK30KKworIyBMb2FkIGtlcm5lbCBtb2R1bGUKK2xvYWRfa2VybmVsX21vZHVsZSgpIHsKKwlpZiBtb2Rwcm9iZSAkMSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJaW5mbyAiTG9hZGVkIG1vZHVsZSAkMSIKKwllbHNlCisJCWRlYnVnICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgJDEiCisJZmkKK30KKworIyBQcmludHMgaW5mb3JtYXRpb24KK21zZygpIHsKKwllY2hvICIkQCIgPi9kZXYvY29uc29sZQorfQorCisjIFByaW50cyBpbmZvcm1hdGlvbiBpZiB2ZXJib3NlIGJvb3RwYXJhbSBpcyB1c2VkCitpbmZvKCkgeworCVsgLW4gIiRib290cGFyYW1fdmVyYm9zZSIgXSAmJiBlY2hvICIkQCIgPi9kZXYvY29uc29sZQorfQorCisjIFByaW50cyBpbmZvcm1hdGlvbiBpZiBkZWJ1ZyBib290cGFyYW0gaXMgdXNlZAorZGVidWcoKSB7CisJWyAtbiAiJGJvb3RwYXJhbV9kZWJ1ZyIgXSAmJiBlY2hvICJERUJVRzogJEAiID4vZGV2L2NvbnNvbGUKK30KKworIyBQcmludHMgYSBtZXNzYWdlIGFuZCBzdGFydCBhIGVuZGxlc3MgbG9vcAorZmF0YWwoKSB7CisgICAgZWNobyAkMSA+L2Rldi9jb25zb2xlCisgICAgZWNobyA+L2Rldi9jb25zb2xlCisKKyAgICBpZiBbIC1uICJib290cGFyYW1faW5pdF9mYXRhbF9zaCIgXTsgdGhlbgorICAgICAgICBzaAorICAgIGVsc2UKKwl3aGlsZSBbICJ0cnVlIiBdOyBkbworCQlzbGVlcCAzNjAwCisJZG9uZQorICAgIGZpCit9CisKKyMgVmFyaWFibGVzIHNoYXJlZCBhbW91bmcgbW9kdWxlcworUk9PVEZTX0RJUj0iL3Jvb3RmcyIgIyB3aGVyZSB0byBkbyB0aGUgc3dpdGNoIHJvb3QKK01PRFVMRV9QUkVfSE9PS1M9IiIgICMgZnVuY3Rpb25zIHRvIGNhbGwgYmVmb3JlIHJ1bm5pbmcgZWFjaCBtb2R1bGUKK01PRFVMRV9QT1NUX0hPT0tTPSIiICMgZnVuY3Rpb25zIHRvIGNhbGwgYWZ0ZXIgcnVubmluZyBlYWNoIG1vZHVsZQorTU9EVUxFU19ESVI9L2luaXQuZCAgIyBwbGFjZSB0byBsb29rIGZvciBtb2R1bGVzCisKKyMgbWFrZSBtb3VudCBzdG9wIGNvbXBsYWluaW5nIGFib3V0IG1pc3NpbmcgL2V0Yy9mc3RhYgordG91Y2ggL2V0Yy9mc3RhYgorCisjIGluaXRpYWxpemUgL3Byb2MsIC9zeXMgYW5kIC92YXIvbG9jaworbWtkaXIgLXAgL3Byb2MgL3N5cyAvdmFyL2xvY2sKK21vdW50IC10IHByb2MgcHJvYyAvcHJvYworbW91bnQgLXQgc3lzZnMgc3lzZnMgL3N5cworCisjIHBvcHVsYXRlIGJvb3RwYXJhbSBlbnZpcm9ubWVudAorZm9yIHAgaW4gYGNhdCAvcHJvYy9jbWRsaW5lYDsgZG8KKwlvcHQ9YGVjaG8gJHAgfCBjdXQgLWQnPScgLWYxYAorCW9wdD1gZWNobyAkb3B0IHwgdHIgJy4tJyAnX18nYAorCWlmIFsgImBlY2hvICRwIHwgY3V0IC1kJz0nIC1mMWAiID0gIiRwIiBdOyB0aGVuCisJCWV2YWwgImJvb3RwYXJhbV8ke29wdH09dHJ1ZSIKKwllbHNlCisJCXZhbHVlPSJgZWNobyAkcCB8IGN1dCAtZCc9JyAtZjItYCIKKwkJZXZhbCAiYm9vdHBhcmFtXyR7b3B0fT1cIiR7dmFsdWV9XCIiCisJZmkKK2RvbmUKKworIyB1c2UgL2RldiB3aXRoIGRldnRtcGZzCitpZiBncmVwIC1xIGRldnRtcGZzIC9wcm9jL2ZpbGVzeXN0ZW1zOyB0aGVuCisJbWtkaXIgLXAgL2RldgorCW1vdW50IC10IGRldnRtcGZzIGRldnRtcGZzIC9kZXYKK2Vsc2UKKwlpZiBbICEgLWQgL2RldiBdOyB0aGVuCisJCWZhdGFsICJFUlJPUjogL2RldiBkb2Vzbid0IGV4aXN0IGFuZCBrZXJuZWwgZG9lc24ndCBoYXMgZGV2dG1wZnMgZW5hYmxlZC4iCisJZmkKK2ZpCisKK21rZGlyICRST09URlNfRElSCisKKyMgTG9hZCBhbmQgcnVuIG1vZHVsZXMKK2ZvciBtIGluICRNT0RVTEVTX0RJUi8qOyBkbworCSMgU2tpcCBiYWNrdXAgZmlsZXMKKwlpZiBbICJgZWNobyAkbSB8IHNlZCAtZSAncy9cfiQvLydgIiAhPSAiJG0iIF07IHRoZW4KKwkJY29udGludWUKKwlmaQorCisJbW9kdWxlPWBiYXNlbmFtZSAkbSB8IGN1dCAtZCctJyAtZiAyYAorCWRlYnVnICJMb2FkaW5nIG1vZHVsZSAkbW9kdWxlIgorCisJIyBwcmUgaG9va3MKKwlmb3IgaCBpbiAkTU9EVUxFX1BSRV9IT09LUzsgZG8KKwkJZGVidWcgIkNhbGxpbmcgbW9kdWxlIGhvb2sgKHByZSk6ICRoIgorCQlldmFsICIkaCBwcmUgJG1vZHVsZSIKKwkJZGVidWcgIkZpbmlzaGVkIG1vZHVsZSBob29rIChwcmUpOiAkaCIKKwlkb25lCisKKwkjIHByb2Nlc3MgbW9kdWxlCisJLiAkbQorCisJaWYgISBldmFsICIke21vZHVsZX1fZW5hYmxlZCI7IHRoZW4KKwkJZGVidWcgIlNraXBwaW5nIG1vZHVsZSAkbW9kdWxlIgorCQljb250aW51ZQorCWZpCisKKwlkZWJ1ZyAiUnVubmluZyAke21vZHVsZX1fcnVuIgorCWV2YWwgIiR7bW9kdWxlfV9ydW4iCisKKwkjIHBvc3QgaG9va3MKKwlmb3IgaCBpbiAkTU9EVUxFX1BPU1RfSE9PS1M7IGRvCisJCWRlYnVnICJDYWxsaW5nIG1vZHVsZSBob29rIChwb3N0KTogJGgiCisJCWV2YWwgIiRoIHBvc3QgJG1vZHVsZSIKKwkJZGVidWcgIkZpbmlzaGVkIG1vZHVsZSBob29rIChwb3N0KTogJGgiCisJZG9uZQorZG9uZQorCisjIENhdGNoIGFsbAorZmF0YWwgIkVSUk9SOiBJbml0cmFtZnMgZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHN5c3RlbS4iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9tZGV2IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvbWRldgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWRmMWQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvbWRldgpAQCAtMCwwICsxLDMwIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAyMDExIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorIyBMaWNlbnNlZCBvbiBNSVQKKworbWRldl9lbmFibGVkKCkgeworCWlmIFsgISAtZSAvc2Jpbi9tZGV2IF07IHRoZW4KKwkJZGVidWcgIi9zYmluL21kZXYgZG9lc24ndCBleGlzdCIKKwkJcmV0dXJuIDEKKwlmaQorCisJcmV0dXJuIDAKK30KKworbWRldl9ydW4oKSB7CisJIyBzZXR1cCB0aGUgZW52aXJvbm1lbnQKKwltb3VudCAtdCB0bXBmcyB0bXBmcyAvZGV2CisKKwlta2RpciAtbSAxNzc3IC9kZXYvc2htCisKKwlta2RpciAtbSAwNzU1IC9kZXYvcHRzCisJbW91bnQgLXQgZGV2cHRzIGRldnB0cyAvZGV2L3B0cworCisJZWNobyAvc2Jpbi9tZGV2ID4gL3Byb2Mvc3lzL2tlcm5lbC9ob3RwbHVnCisJbWRldiAtcworCisJIyBsb2FkIG1vZHVsZXMgZm9yIGRldmljZXMKKwlmaW5kIC9zeXMgLW5hbWUgbW9kYWxpYXMgfCB3aGlsZSByZWFkIG07IGRvCisJCWxvYWRfa2VybmVsX21vZHVsZSAkKGNhdCAkbSkKKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay91ZGV2IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvdWRldgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjQ2MmRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvdWRldgpAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorIyBMaWNlbnNlZCBvbiBNSVQKKwordWRldl9zaHV0ZG93bl9ob29rX2hhbmRsZXIoKSB7CisJc3RhdHVzPSQxCisJbW9kdWxlPSQyCisJaWYgWyAiJHN0YXR1cyIgPSAicHJlIiBdICYmIFsgIiRtb2R1bGUiID0gImZpbmlzaCIgXTsgdGhlbgorCQlraWxsYWxsIGBiYXNlbmFtZSAkX1VERVZfREFFTU9OYCAyPi9kZXYvbnVsbAorCWZpCit9CisKK3VkZXZfZGFlbW9uKCkgeworCU9QVElPTlM9Ii9zYmluL3VkZXYvdWRldmQgL3NiaW4vdWRldmQgL2xpYi91ZGV2L3VkZXZkIC9saWIvc3lzdGVtZC9zeXN0ZW1kLXVkZXZkIgorCisJZm9yIG8gaW4gJE9QVElPTlM7IGRvCisJCWlmIFsgLXggIiRvIiBdOyB0aGVuCisJCQllY2hvICRvCisJCQlyZXR1cm4gMAorCQlmaQorCWRvbmUKKworCXJldHVybiAxCit9CisKK19VREVWX0RBRU1PTj1gdWRldl9kYWVtb25gCisKK3VkZXZfZW5hYmxlZCgpIHsKKwlpZiBbIC16ICIkX1VERVZfREFFTU9OIiBdOyB0aGVuCisJCW1zZyAiV0FSTklORzogQ2Fubm90IGZpbmQgdGhlIHVkZXYgZGFlbW9uOyBkYWVtb24gd2lsbCBub3QgYmUgc3RhcnRlZCBpbiBpbml0cmFtZnMuIgorCQlyZXR1cm4gMQorCWZpCisKKwlyZXR1cm4gMAorfQorCit1ZGV2X3J1bigpIHsKKwlhZGRfbW9kdWxlX3ByZV9ob29rICJ1ZGV2X3NodXRkb3duX2hvb2tfaGFuZGxlciIKKworCW1rZGlyIC1wIC9ydW4KKworCSRfVURFVl9EQUVNT04gLS1kYWVtb24KKwl1ZGV2YWRtIHRyaWdnZXIgLS1hY3Rpb249YWRkCisJdWRldmFkbSBzZXR0bGUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrXzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzM3YjlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmtfMS4wLmJiCkBAIC0wLDAgKzEsNjYgQEAKK1NVTU1BUlkgPSAiTW9kdWxhciBpbml0cmFtZnMgc3lzdGVtIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1JERVBFTkRTXyR7UE59ICs9ICJidXN5Ym94IgorCitQUiA9ICJyMiIKKworaW5oZXJpdCBhbGxhcmNoCisKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vZmluaXNoIFwKKyAgICAgICAgICAgZmlsZTovL21kZXYgXAorICAgICAgICAgICBmaWxlOi8vdWRldiBcCisgICAgICAgICAgIGZpbGU6Ly9lMmZzIFwKKyAgICAgICAgICAgZmlsZTovL2RlYnVnIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9L2luaXQuZAorCisgICAgIyBiYXNlCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9L2luaXQKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9maW5pc2ggJHtEfS9pbml0LmQvOTktZmluaXNoCisKKyAgICAjIG1kZXYKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9tZGV2ICR7RH0vaW5pdC5kLzAxLW1kZXYKKworICAgICMgdWRldgorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3VkZXYgJHtEfS9pbml0LmQvMDEtdWRldgorCisgICAgIyBlMmZzCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZTJmcyAke0R9L2luaXQuZC8xMC1lMmZzCisKKyAgICAjIGRlYnVnCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZGVidWcgJHtEfS9pbml0LmQvMDAtZGVidWcKKworICAgICMgQ3JlYXRlIGRldmljZSBub2RlcyBleHBlY3RlZCBieSBzb21lIGtlcm5lbHMgaW4gaW5pdHJhbWZzCisgICAgIyBiZWZvcmUgZXZlbiBleGVjdXRpbmcgL2luaXQuCisgICAgaW5zdGFsbCAtZCAke0R9L2RldgorICAgIG1rbm9kIC1tIDYyMiAke0R9L2Rldi9jb25zb2xlIGMgNSAxCit9CisKK1BBQ0tBR0VTID0gIiR7UE59LWJhc2UgXAorICAgICAgICAgICAgaW5pdHJhbWZzLW1vZHVsZS1tZGV2IFwKKyAgICAgICAgICAgIGluaXRyYW1mcy1tb2R1bGUtdWRldiBcCisgICAgICAgICAgICBpbml0cmFtZnMtbW9kdWxlLWUyZnMgXAorICAgICAgICAgICAgaW5pdHJhbWZzLW1vZHVsZS1kZWJ1ZyIKKworRklMRVNfJHtQTn0tYmFzZSA9ICIvaW5pdCAvaW5pdC5kLzk5LWZpbmlzaCAvZGV2IgorCitTVU1NQVJZX2luaXRyYW1mcy1tb2R1bGUtbWRldiA9ICJpbml0cmFtZnMgc3VwcG9ydCBmb3IgbWRldiIKK1JERVBFTkRTX2luaXRyYW1mcy1tb2R1bGUtbWRldiA9ICIke1BOfS1iYXNlIgorRklMRVNfaW5pdHJhbWZzLW1vZHVsZS1tZGV2ID0gIi9pbml0LmQvMDEtbWRldiIKKworU1VNTUFSWV9pbml0cmFtZnMtbW9kdWxlLXVkZXYgPSAiaW5pdHJhbWZzIHN1cHBvcnQgZm9yIHVkZXYiCitSREVQRU5EU19pbml0cmFtZnMtbW9kdWxlLXVkZXYgPSAiJHtQTn0tYmFzZSB1ZGV2IgorRklMRVNfaW5pdHJhbWZzLW1vZHVsZS11ZGV2ID0gIi9pbml0LmQvMDEtdWRldiIKKworU1VNTUFSWV9pbml0cmFtZnMtbW9kdWxlLWUyZnMgPSAiaW5pdHJhbWZzIHN1cHBvcnQgZm9yIGV4dDQvZXh0My9leHQyIGZpbGVzeXN0ZW1zIgorUkRFUEVORFNfaW5pdHJhbWZzLW1vZHVsZS1lMmZzID0gIiR7UE59LWJhc2UiCitGSUxFU19pbml0cmFtZnMtbW9kdWxlLWUyZnMgPSAiL2luaXQuZC8xMC1lMmZzIgorCitTVU1NQVJZX2luaXRyYW1mcy1tb2R1bGUtZGVidWcgPSAiaW5pdHJhbWZzIGR5bmFtaWMgZGVidWcgc3VwcG9ydCIKK1JERVBFTkRTX2luaXRyYW1mcy1tb2R1bGUtZGVidWcgPSAiJHtQTn0tYmFzZSIKK0ZJTEVTX2luaXRyYW1mcy1tb2R1bGUtZGVidWcgPSAiL2luaXQuZC8wMC1kZWJ1ZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1ib290XzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1ib290XzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2IzMDI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWJvb3RfMS4wLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiTGl2ZSBpbWFnZSBpbml0IHNjcmlwdCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitERVBFTkRTID0gInZpcnR1YWwva2VybmVsIgorUkRFUEVORFNfJHtQTn0gPSAidWRldiB1ZGV2LWV4dHJhY29uZiIKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQtbGl2ZS5zaCIKKworUFIgPSAicjEyIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtbGl2ZS5zaCAke0R9L2luaXQKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9L2RldgorICAgICAgICBta25vZCAtbSA2MjIgJHtEfS9kZXYvY29uc29sZSBjIDUgMQorfQorCitGSUxFU18ke1BOfSArPSAiIC9pbml0IC9kZXYgIgorCisjIER1ZSB0byBrZXJuZWwgZGVwZW5kZW5jeQorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaS10ZXN0ZnNfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpLXRlc3Rmc18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzYmQyZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaS10ZXN0ZnNfMS4wLmJiCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiTGl2ZSBpbWFnZSBpbnN0YWxsIHNjcmlwdCBmb3Igd2l0aCBhIHNlY29uZCByb290ZnMva2VybmVsIG9wdGlvbiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitTUkNfVVJJID0gImZpbGU6Ly9pbml0LWluc3RhbGwtZWZpLXRlc3Rmcy5zaCIKKworUkRFUEVORFNfJHtQTn0gPSAicGFydGVkIGUyZnNwcm9ncy1ta2UyZnMgZG9zZnN0b29scyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LWluc3RhbGwtZWZpLXRlc3Rmcy5zaCAke0R9L2luc3RhbGwtZWZpLnNoCit9CisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitGSUxFU18ke1BOfSA9ICIgL2luc3RhbGwtZWZpLnNoICIKK0NPTVBBVElCTEVfSE9TVCA9ICIoaS44Nnx4ODZfNjQpLiotbGludXgiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmlfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmMxZmNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpXzEuMC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkxpdmUgaW1hZ2UgaW5zdGFsbCBzY3JpcHQgZm9yIGdydWItZWZpIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQtaW5zdGFsbC1lZmkuc2giCisKK1BSID0gInIxIgorCitSREVQRU5EU18ke1BOfSA9ICJwYXJ0ZWQgZTJmc3Byb2dzLW1rZTJmcyBkb3Nmc3Rvb2xzIHV0aWwtbGludXgtYmxraWQiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdC1pbnN0YWxsLWVmaS5zaCAke0R9L2luc3RhbGwtZWZpLnNoCit9CisKKyMgV2hpbGUgdGhpcyBwYWNrYWdlIG1heWJlIGFuIGFsbGFyY2ggZHVlIHRvIGl0IGJlaW5nIGEKKyMgc2ltcGxlIHNjcmlwdCwgcmVhbGl0eSBpcyB0aGF0IGl0IGlzIEhvc3Qgc3BlY2lmaWMgYmFzZWQKKyMgb24gdGhlIENPTVBBVElCTEVfSE9TVCBiZWxvdywgd2hpY2ggbmVlZHMgdG8gdGFrZSBwcmVjZWRlbmNlCisjaW5oZXJpdCBhbGxhcmNoCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitGSUxFU18ke1BOfSA9ICIgL2luc3RhbGwtZWZpLnNoICIKKworQ09NUEFUSUJMRV9IT1NUID0gIihpLjg2fHg4Nl82NCkuKi1saW51eCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLXRlc3Rmc18xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC10ZXN0ZnNfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzN2JmZDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC10ZXN0ZnNfMS4wLmJiCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiTGl2ZSBpbWFnZSBpbnN0YWxsIHNjcmlwdCB3aXRoIGEgc2Vjb25kIHJvb3Rmcy9rZXJuZWwiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorU1JDX1VSSSA9ICJmaWxlOi8vaW5pdC1pbnN0YWxsLXRlc3Rmcy5zaCIKKworUkRFUEVORFNfJHtQTn0gPSAiZ3J1YiBwYXJ0ZWQgZTJmc3Byb2dzLW1rZTJmcyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LWluc3RhbGwtdGVzdGZzLnNoICR7RH0vaW5zdGFsbC5zaAorfQorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorRklMRVNfJHtQTn0gPSAiIC9pbnN0YWxsLnNoICIKK0NPTVBBVElCTEVfSE9TVCA9ICIoaS44Nnx4ODZfNjQpLiotbGludXgiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbF8xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbF8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhiM2IzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsXzEuMC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkxpdmUgaW1hZ2UgaW5zdGFsbCBzY3JpcHQgZm9yIGdydWIiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorU1JDX1VSSSA9ICJmaWxlOi8vaW5pdC1pbnN0YWxsLnNoIgorCitQUiA9ICJyOSIKKworUyA9ICIke1dPUktESVJ9IgorCitSREVQRU5EU18ke1BOfSA9ICJncnViIHBhcnRlZCBlMmZzcHJvZ3MtbWtlMmZzIHV0aWwtbGludXgtYmxraWQiCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtaW5zdGFsbC5zaCAke0R9L2luc3RhbGwuc2gKK30KKworIyBXaGlsZSB0aGlzIHBhY2thZ2UgbWF5YmUgYW4gYWxsYXJjaCBkdWUgdG8gaXQgYmVpbmcgYSAKKyMgc2ltcGxlIHNjcmlwdCwgcmVhbGl0eSBpcyB0aGF0IGl0IGlzIEhvc3Qgc3BlY2lmaWMgYmFzZWQKKyMgb24gdGhlIENPTVBBVElCTEVfSE9TVCBiZWxvdywgd2hpY2ggbmVlZHMgdG8gdGFrZSBwcmVjZWRlbmNlCisjaW5oZXJpdCBhbGxhcmNoCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitGSUxFU18ke1BOfSA9ICIgL2luc3RhbGwuc2ggIgorCitDT01QQVRJQkxFX0hPU1QgPSAiKGkuODZ8eDg2XzY0KS4qLWxpbnV4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvR1BMdjIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9HUEx2Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWU4MTgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvR1BMdjIucGF0Y2gKQEAgLTAsMCArMSwzNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kNTExOTA1CistLS0gL2Rldi9udWxsCisrKysgYi9DT1BZSU5HCitAQCAtMCwwICsxLDMzOSBAQAorKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKysKKysgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKysgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKysgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisrCisrCQkJICAgIFByZWFtYmxlCisrCisrICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCisrZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKytMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCisrc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKKytHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KKyt1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5CisrdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KKyt5b3VyIHByb2dyYW1zLCB0b28uCisrCisrICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CisrcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQorK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKKyt0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKKytpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAorK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKysKKysgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKKythbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCisrVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKKytkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisrCisrICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCisrZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0CisreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKKytzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCisrcmlnaHRzLgorKworKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCisrZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKysKKysgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCisrdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKKytzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKKyt3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbworK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCisrYXV0aG9ycycgcmVwdXRhdGlvbnMuCisrCisrICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKKytwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCisrcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CisrcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKysKKysgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCisrbW9kaWZpY2F0aW9uIGZvbGxvdy4KKysKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorKworKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCisrdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6CisrdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKKytlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KKyt0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKysKKytBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKKytydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCisraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorKworKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCisrc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CisrY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKKytub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CisrYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisrCisrWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCisreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKysKKysgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KKytvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCisrZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCisrYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKysKKysgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisrICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisrCisrICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKysgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKysgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisrICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKysgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKysgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisrICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKysgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKysgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKysgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKysKKytUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCisraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKKythbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KKyt0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCisrc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CisrZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCisrb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCisrdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKKytlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisrCisrVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CisreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCisrZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCisrY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKysKKytJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCisrd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCisrYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKKyt0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCisrdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCisrU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorKworKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisrICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKysgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKysgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisrICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisrICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKysgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKysgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKysgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKysKKytUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCisrbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKKytjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKKytzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKKythbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCisrb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKKytpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisrCisrSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKKythY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKKytkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKKytjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorKworKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisrZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcworK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KKytIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgorK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCisrcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorKworKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90Cisrc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKKytkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKKytwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5CisrbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKKythbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCisrdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisrCisrICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKKytvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCisrdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKKytyZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisrWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KKyt0aGlzIExpY2Vuc2UuCisrCisrICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CisraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKKytjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCisrb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CisrZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKKyttYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CisrbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgorK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KKytyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorKworK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KKythcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorK2NpcmN1bXN0YW5jZXMuCisrCisrSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55Cisrc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQorK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKKyt0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKKyt0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKKytpbXBvc2UgdGhhdCBjaG9pY2UuCisrCisrVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCisrYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKKyttYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKKyt0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCisrY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCisrdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorKworK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KKytzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKytlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKKyt0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbi4KKysKKysgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKKytwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCisrdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCisrbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKKytvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCisrb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisrCisrCQkJICAgIE5PIFdBUlJBTlRZCisrCisrICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKKytGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KKytPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCisrUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKKytPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKKytUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCisrUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCisrUkVQQUlSIE9SIENPUlJFQ1RJT04uCisrCisrICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCisrV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCisrSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCisrT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCisrUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCisrUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorKworKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKysKKysJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworKworKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKKytmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKysKKysgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CisrdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CisrdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisrCisrICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisrICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisrCisrSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcworK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisrCisrICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisrICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKysgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorKworK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKKytiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKKyttb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorKworK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCisrc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKKytuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisrCisrICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisrICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKysKKysgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKysKKytUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KKytwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisrUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9hcm0vYWxpZ25tZW50LnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvYXJtL2FsaWdubWVudC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTc3YjlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvYXJtL2FsaWdubWVudC5zaApAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6IGFsaWdubWVudAorIyBSZXF1aXJlZC1TdGFydDogICAgbW91bnRrZXJuZnMKKyMgUmVxdWlyZWQtU3RvcDogICAgIG1vdW50a2VybmZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK2lmIFsgLWUgL3Byb2MvY3B1L2FsaWdubWVudCBdOyB0aGVuCisgICBlY2hvICIzIiA+IC9wcm9jL2NwdS9hbGlnbm1lbnQKK2ZpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Jhbm5lci5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Jhbm5lci5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTJiMDkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvYmFubmVyLnNoCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogYmFubmVyCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIyMgRU5EIElOSVQgSU5GTworCitpZiBbICEgLWUgL2Rldi90dHkgXTsgdGhlbgorICAgIC9iaW4vbWtub2QgLW0gMDY2NiAvZGV2L3R0eSBjIDUgMAorZmkKKworaWYgKCA+IC9kZXYvdHR5MCApIDI+L2Rldi9udWxsOyB0aGVuCisgICAgdnRtYXN0ZXI9L2Rldi90dHkwCitlbGlmICggPiAvZGV2L3ZjLzAgKSAyPi9kZXYvbnVsbDsgdGhlbgorICAgIHZ0bWFzdGVyPS9kZXYvdmMvMAorZWxpZiAoID4gL2Rldi9jb25zb2xlICkgMj4vZGV2L251bGw7IHRoZW4KKyAgICB2dG1hc3Rlcj0vZGV2L2NvbnNvbGUKK2Vsc2UKKyAgICB2dG1hc3Rlcj0vZGV2L251bGwKK2ZpCitlY2hvID4gJHZ0bWFzdGVyCitlY2hvICJQbGVhc2Ugd2FpdDogYm9vdGluZy4uLiIgPiAkdnRtYXN0ZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Jvb3RtaXNjLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvYm9vdG1pc2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGY1NTNiYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Jvb3RtaXNjLnNoCkBAIC0wLDAgKzEsODEgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgYm9vdG1pc2MKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRsb2NhbF9mcyBtb3VudHZpcnRmcworIyBSZXF1aXJlZC1TdG9wOiAgICAgJGxvY2FsX2ZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDogICAgICAwIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IE1pc2MgYW5kIG90aGVyLgorIyMjIEVORCBJTklUIElORk8KKworLiAvZXRjL2RlZmF1bHQvcmNTCisjCisjIFB1dCBhIG5vbG9naW4gZmlsZSBpbiAvZXRjIHRvIHByZXZlbnQgcGVvcGxlIGZyb20gbG9nZ2luZyBpbiBiZWZvcmUKKyMgc3lzdGVtIHN0YXJ0dXAgaXMgY29tcGxldGUuCisjCitpZiB0ZXN0ICIkREVMQVlMT0dJTiIgPSB5ZXMKK3RoZW4KKyAgZWNobyAiU3lzdGVtIGJvb3R1cCBpbiBwcm9ncmVzcyAtIHBsZWFzZSB3YWl0IiA+IC9ldGMvbm9sb2dpbgorICBjcCAvZXRjL25vbG9naW4gL2V0Yy9ub2xvZ2luLmJvb3QKK2ZpCisKKyMKKyMgU2V0IHBzZXVkby10ZXJtaW5hbCBhY2Nlc3MgcGVybWlzc2lvbnMuCisjCitpZiB0ZXN0IC1jIC9kZXYvdHR5cDAKK3RoZW4KKwljaG1vZCA2NjYgL2Rldi90dHlbcC16YS1lXVswLTlhLWZdCisJY2hvd24gcm9vdDp0dHkgL2Rldi90dHlbcC16YS1lXVswLTlhLWZdCitmaQorCisjCisjIEFwcGx5IC9wcm9jIHNldHRpbmdzIGlmIGRlZmluZWQKKyMKK1NZU0NUTF9DT05GPSIvZXRjL3N5c2N0bC5jb25mIgoraWYgWyAtZiAiJHtTWVNDVExfQ09ORn0iIF0KK3RoZW4KKwlpZiBbIC14ICIvc2Jpbi9zeXNjdGwiIF0KKwl0aGVuCisJCSMgYnVzeWJveCBzeXNjdGwgZG9lcyBub3Qgc3VwcG9ydCAtcQorCQlWRVJCT1NFX1JFRElSPSIxPi9kZXYvbnVsbCIKKwkJaWYgWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdOyB0aGVuCisJCQlWRVJCT1NFX1JFRElSPSIxPiYxIgorCQlmaQorCQlldmFsIC9zYmluL3N5c2N0bCAtcCAiJHtTWVNDVExfQ09ORn0iICRWRVJCT1NFX1JFRElSCisJZWxzZQorCQllY2hvICJUbyBoYXZlICR7U1lTQ1RMX0NPTkZ9IGFwcGxpZWQgZHVyaW5nIGJvb3QsIGluc3RhbGwgcGFja2FnZSA8cHJvY3BzPi4iCisJZmkKK2ZpCisKKyMKKyMgVXBkYXRlIC9ldGMvbW90ZC4KKyMKK2lmIHRlc3QgIiRFRElUTU9URCIgIT0gbm8KK3RoZW4KKwl1bmFtZSAtYSA+IC9ldGMvbW90ZC50bXAKKwlzZWQgMWQgL2V0Yy9tb3RkID4+IC9ldGMvbW90ZC50bXAKKwltdiAvZXRjL21vdGQudG1wIC9ldGMvbW90ZAorZmkKKworIworIyBUaGlzIGlzIGFzIGdvb2QgYSBwbGFjZSBhcyBhbnkgZm9yIGEgc2FuaXR5IGNoZWNrCisjCisjIFNldCB0aGUgc3lzdGVtIGNsb2NrIGZyb20gaGFyZHdhcmUgY2xvY2sKKyMgSWYgdGhlIHRpbWVzdGFtcCBpcyBtb3JlIHJlY2VudCB0aGFuIHRoZSBjdXJyZW50IHRpbWUsCisjIHVzZSB0aGUgdGltZXN0YW1wIGluc3RlYWQuCit0ZXN0IC14IC9ldGMvaW5pdC5kL2h3Y2xvY2suc2ggJiYgL2V0Yy9pbml0LmQvaHdjbG9jay5zaCBzdGFydAoraWYgdGVzdCAtZSAvZXRjL3RpbWVzdGFtcAordGhlbgorCVNZU1RFTURBVEU9YGRhdGUgLXUgKyU0WSUybSUyZCUySCUyTSUyU2AKKwlyZWFkIFRJTUVTVEFNUCA8IC9ldGMvdGltZXN0YW1wCisJaWYgWyAke1RJTUVTVEFNUH0gLWd0ICRTWVNURU1EQVRFIF07IHRoZW4KKwkJIyBmb3JtYXQgdGhlIHRpbWVzdGFtcCBhcyBkYXRlIGV4cGVjdHMgaXQgKDJtMmQySDJNNFkuMlMpCisJCVRTX1lSPSR7VElNRVNUQU1QJT8/Pz8/Pz8/Pz99CisJCVRTX1NFQz0ke1RJTUVTVEFNUCM/Pz8/Pz8/Pz8/Pz99CisJCVRTX0ZJUlNUMTI9JHtUSU1FU1RBTVAlPz99CisJCVRTX01JRERMRTg9JHtUU19GSVJTVDEyIz8/Pz99CisJCWRhdGUgLXUgJHtUU19NSURETEU4fSR7VFNfWVJ9LiR7VFNfU0VDfQorCQl0ZXN0IC14IC9ldGMvaW5pdC5kL2h3Y2xvY2suc2ggJiYgL2V0Yy9pbml0LmQvaHdjbG9jay5zaCBzdG9wCisJZmkKK2ZpCis6IGV4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvY2hlY2tmcy5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2NoZWNrZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjI4Njk0NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2NoZWNrZnMuc2gKQEAgLTAsMCArMSw1MCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBjaGVja2ZzCisjIFJlcXVpcmVkLVN0YXJ0OiAgICBjaGVja3Jvb3QKKyMgUmVxdWlyZWQtU3RvcDogICAgIAorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBDaGVjayBhbGwgb3RoZXIgZmlsZSBzeXN0ZW1zCisjIyMgRU5EIElOSVQgSU5GTworCisuIC9ldGMvZGVmYXVsdC9yY1MKKworIworIyBDaGVjayB0aGUgcmVzdCBvZiB0aGUgZmlsZXN5c3RlbXMuCisjCitpZiB0ZXN0ICEgLWYgL2Zhc3Rib290Cit0aGVuCisgICAgaWYgdGVzdCAtZiAvZm9yY2Vmc2NrCisgICAgdGhlbgorICAgICAgICBmb3JjZT0iLWYiCisgICAgZWxzZQorICAgICAgICBmb3JjZT0iIgorICAgIGZpCisgICAgaWYgdGVzdCAiJEZTQ0tGSVgiICA9IHllcworICAgIHRoZW4KKwlmaXg9Ii15IgorICAgIGVsc2UKKwlmaXg9Ii1hIgorICAgIGZpCisgICAgc3Bpbm5lcj0iLUMiCisgICAgY2FzZSAiJFRFUk0iIGluCisJZHVtYnxuZXR3b3JrfHVua25vd258IiIpIHNwaW5uZXI9IiIgOzsKKyAgICBlc2FjCisgICAgdGVzdCAiYHVuYW1lIC1tYCIgPSAiczM5MCIgJiYgc3Bpbm5lcj0iIiAjIFRoaXMgc2hvdWxkIGdvIGF3YXkKKyAgICB0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiQ2hlY2tpbmcgYWxsIGZpbGVzeXN0ZW1zLi4uIgorICAgIGZzY2sgJHNwaW5uZXIgLVIgLUEgJGZpeCAkZm9yY2UKKyAgICBpZiB0ZXN0ICIkPyIgLWd0IDEKKyAgICB0aGVuCisgICAgICBlY2hvCisgICAgICBlY2hvICJmc2NrIGZhaWxlZC4gIFBsZWFzZSByZXBhaXIgbWFudWFsbHkuIgorICAgICAgZWNobworICAgICAgZWNobyAiQ09OVFJPTC1EIHdpbGwgZXhpdCBmcm9tIHRoaXMgc2hlbGwgYW5kIGNvbnRpbnVlIHN5c3RlbSBzdGFydHVwLiIKKyAgICAgIGVjaG8KKyAgICAgICMgU3RhcnQgYSBzaW5nbGUgdXNlciBzaGVsbCBvbiB0aGUgY29uc29sZQorICAgICAgL3NiaW4vc3Vsb2dpbiAkQ09OU09MRQorICAgIGZpCitmaQorcm0gLWYgL2Zhc3Rib290IC9mb3JjZWZzY2sKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2NoZWNrcm9vdC5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2NoZWNrcm9vdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZmVlMmFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvY2hlY2tyb290LnNoCkBAIC0wLDAgKzEsMTQ4IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGNoZWNrcm9vdAorIyBSZXF1aXJlZC1TdGFydDogICAgdWRldgorIyBSZXF1aXJlZC1TdG9wOiAgICAgCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IENoZWNrIHRvIHJvb3QgZmlsZSBzeXN0ZW0uCisjIyMgRU5EIElOSVQgSU5GTworCisuIC9ldGMvZGVmYXVsdC9yY1MKKworIworIyBTZXQgU1VMT0dJTiBpbiAvZXRjL2RlZmF1bHQvcmNTIHRvIHllcyBpZiB5b3Ugd2FudCBhIHN1bG9naW4gdG8gYmUgc3Bhd25lZAorIyBmcm9tIHRoaXMgc2NyaXB0ICpiZWZvcmUgYW55dGhpbmcgZWxzZSogd2l0aCBhIHRpbWVvdXQsIGxpa2UgU0NPIGRvZXMuCisjCit0ZXN0ICIkU1VMT0dJTiIgPSB5ZXMgJiYgc3Vsb2dpbiAtdCAzMCAkQ09OU09MRQorCisjCisjIFJlYWQgL2V0Yy9mc3RhYi4KKyMKK2V4ZWMgOTwgL2V0Yy9mc3RhYgorcm9vdG1vZGU9cncKK3Jvb3RvcHRzPXJ3Cityb290Y2hlY2s9JEVOQUJMRV9ST09URlNfRlNDSworc3dhcF9vbl9tZD1ubworZGV2ZnM9Cit3aGlsZSByZWFkIGZzIG1udCB0eXBlIG9wdHMgZHVtcCBwYXNzIGp1bmsgPCY5CitkbworCWNhc2UgIiRmcyIgaW4KKwkJIiJ8XCMqKQorCQkJY29udGludWU7CisJCQk7OworCQkvZGV2L21kKikKKwkJCSMgU3dhcCBvbiBtZCBkZXZpY2UuCisJCQl0ZXN0ICIkdHlwZSIgPSBzd2FwICYmIHN3YXBfb25fbWQ9eWVzCisJCQk7OworCQkvZGV2LyopCisJCQk7OworCQkqKQorCQkJIyBNaWdodCBiZSBhIHN3YXBmaWxlLgorCQkJdGVzdCAiJHR5cGUiID0gc3dhcCAmJiBzd2FwX29uX21kPXllcworCQkJOzsKKwllc2FjCisJdGVzdCAiJHR5cGUiID0gZGV2ZnMgJiYgZGV2ZnM9IiRmcyIKKwl0ZXN0ICIkbW50IiAhPSAvICYmIGNvbnRpbnVlCisJcm9vdG9wdHM9IiRvcHRzIgorCXRlc3QgIiRwYXNzIiA9IDAgLW8gIiRwYXNzIiA9ICIiICYmIHJvb3RjaGVjaz1ubworCWNhc2UgIiRvcHRzIiBpbgorCQlyb3xybywqfCoscm98KixybywqKQorCQkJcm9vdG1vZGU9cm8KKwkJCTs7CisJZXNhYworZG9uZQorZXhlYyAwPiY5IDk+Ji0KKworIyBDaGVjayBmb3IgY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMKK2lmIFsgIiRyb290bW9kZSIgPSAicm8iIC1hICIkUk9PVEZTX1JFQURfT05MWSIgPSAibm8iIF0gfHwgXAorCVsgIiRyb290bW9kZSIgPSAicnciIC1hICIkUk9PVEZTX1JFQURfT05MWSIgPSAieWVzIiBdOyB0aGVuCisJZWNobyAiIgorCWVjaG8gIldBUk46IGNvbmZsaWN0aW5nIGNvbmZpZ3VyYXRpb25zIGluIC9ldGMvZnN0YWIgYW5kIC9ldGMvZGVmYXVsdC9yY1MiCisJZWNobyAiICAgICAgcmVnYXJkaW5nIHRoZSB3cml0YWJpbGl0eSBvZiByb290ZnMuIFBsZWFzZSBmaXggb25lIG9mIHRoZW0uIgorCWVjaG8gIiIKK2ZpCisKKworIworIyBBY3RpdmF0ZSB0aGUgc3dhcCBkZXZpY2UocykgaW4gL2V0Yy9mc3RhYi4gVGhpcyBuZWVkcyB0byBiZSBkb25lCisjIGJlZm9yZSBmc2NrLCBzaW5jZSBmc2NrIGNhbiBiZSBxdWl0ZSBtZW1vcnktaHVuZ3J5LgorIwordGVzdCAiJFZFUkJPU0UiICE9IG5vICYmIGVjaG8gIkFjdGl2YXRpbmcgc3dhcCIKK3N3YXBvbiAtYSAyPiAvZGV2L251bGwKKworIworIyBDaGVjayB0aGUgcm9vdCBmaWxlc3lzdGVtLgorIworaWYgdGVzdCAtZiAvZmFzdGJvb3QgfHwgdGVzdCAkcm9vdGNoZWNrID0gbm8KK3RoZW4KKyAgdGVzdCAkcm9vdGNoZWNrID0geWVzICYmIGVjaG8gIkZhc3QgYm9vdCwgbm8gZmlsZXN5c3RlbSBjaGVjayIKK2Vsc2UKKyAgIworICAjIEVuc3VyZSB0aGF0IHJvb3QgaXMgcXVpZXNjZW50IGFuZCByZWFkLW9ubHkgYmVmb3JlIGZzY2snaW5nLgorICAjCisgIG1vdW50IC1uIC1vIHJlbW91bnQscm8gLworICBpZiB0ZXN0ICQ/ID0gMAorICB0aGVuCisgICAgaWYgdGVzdCAtZiAvZm9yY2Vmc2NrCisgICAgdGhlbgorCWZvcmNlPSItZiIKKyAgICBlbHNlCisJZm9yY2U9IiIKKyAgICBmaQorICAgIGlmIHRlc3QgIiRGU0NLRklYIiA9IHllcworICAgIHRoZW4KKwlmaXg9Ii15IgorICAgIGVsc2UKKwlmaXg9Ii1hIgorICAgIGZpCisgICAgc3Bpbm5lcj0iLUMiCisgICAgY2FzZSAiJFRFUk0iIGluCisgICAgICAgIGR1bWJ8bmV0d29ya3x1bmtub3dufCIiKSBzcGlubmVyPSIiIDs7CisgICAgZXNhYworICAgIHRlc3QgYHVuYW1lIC1tYCA9IHMzOTAgJiYgc3Bpbm5lcj0iIiAjIFRoaXMgc2hvdWxkIGdvIGF3YXkKKyAgICB0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiQ2hlY2tpbmcgcm9vdCBmaWxlc3lzdGVtLi4uIgorICAgIGZzY2sgJHNwaW5uZXIgJGZvcmNlICRmaXggLworICAgICMKKyAgICAjIElmIHRoZXJlIHdhcyBhIGZhaWx1cmUsIGRyb3AgaW50byBzaW5nbGUtdXNlciBtb2RlLgorICAgICMKKyAgICAjIE5PVEU6ICJmYWlsdXJlIiBpcyBkZWZpbmVkIGFzIGV4aXRpbmcgd2l0aCBhIHJldHVybiBjb2RlIG9mCisgICAgIyAyIG9yIGxhcmdlci4gIEEgcmV0dXJuIGNvZGUgb2YgMSBpbmRpY2F0ZXMgdGhhdCBmaWxlc3lzdGVtCisgICAgIyBlcnJvcnMgd2VyZSBjb3JyZWN0ZWQgYnV0IHRoYXQgdGhlIGJvb3QgbWF5IHByb2NlZWQuCisgICAgIworICAgIGlmIHRlc3QgIiQ/IiAtZ3QgMQorICAgIHRoZW4KKyAgICAgICMgU3VycHJpc2UhIFJlLWRpcmVjdGluZyBmcm9tIGEgSEVSRSBkb2N1bWVudCAoYXMgaW4KKyAgICAgICMgImNhdCA8PCBFT0YiKSB3b24ndCB3b3JrLCBiZWNhdXNlIHRoZSByb290IGlzIHJlYWQtb25seS4KKyAgICAgIGVjaG8KKyAgICAgIGVjaG8gImZzY2sgZmFpbGVkLiAgUGxlYXNlIHJlcGFpciBtYW51YWxseSBhbmQgcmVib290LiAgUGxlYXNlIG5vdGUiCisgICAgICBlY2hvICJ0aGF0IHRoZSByb290IGZpbGVzeXN0ZW0gaXMgY3VycmVudGx5IG1vdW50ZWQgcmVhZC1vbmx5LiAgVG8iCisgICAgICBlY2hvICJyZW1vdW50IGl0IHJlYWQtd3JpdGU6IgorICAgICAgZWNobworICAgICAgZWNobyAiICAgIyBtb3VudCAtbiAtbyByZW1vdW50LHJ3IC8iCisgICAgICBlY2hvCisgICAgICBlY2hvICJDT05UUk9MLUQgd2lsbCBleGl0IGZyb20gdGhpcyBzaGVsbCBhbmQgUkVCT09UIHRoZSBzeXN0ZW0uIgorICAgICAgZWNobworICAgICAgIyBTdGFydCBhIHNpbmdsZSB1c2VyIHNoZWxsIG9uIHRoZSBjb25zb2xlCisgICAgICAvc2Jpbi9zdWxvZ2luICRDT05TT0xFCisgICAgICByZWJvb3QgLWYKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiKioqIEVSUk9SISAgQ2Fubm90IGZzY2sgcm9vdCBmcyBiZWNhdXNlIGl0IGlzIG5vdCBtb3VudGVkIHJlYWQtb25seSEiCisgICAgZWNobworICBmaQorZmkKKworIworIwlJZiB0aGUgcm9vdCBmaWxlc3lzdGVtIHdhcyBub3QgbWFya2VkIGFzIHJlYWQtb25seSBpbiAvZXRjL2ZzdGFiLAorIwlyZW1vdW50IHRoZSByb290ZnMgcncgYnV0IGRvIG5vdCB0cnkgdG8gY2hhbmdlIG10YWIgYmVjYXVzZSBpdAorIwlpcyBvbiBhIHJvIGZzIHVudGlsIHRoZSByZW1vdW50IHN1Y2NlZWRlZC4gVGhlbiBjbGVhbiB1cCBvbGQgbXRhYnMKKyMJYW5kIGZpbmFsbHkgd3JpdGUgdGhlIG5ldyBtdGFiLgorIworbW91bnQgLW4gLW8gcmVtb3VudCwkcm9vdG1vZGUgLworaWYgdGVzdCAiJHJvb3Rtb2RlIiA9IHJ3Cit0aGVuCisJbG4gLXNmIC9wcm9jL21vdW50cyAvZGV2L210YWIKK2ZpCisKKzogZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kZXZwdHMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kZXZwdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEwOTc4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2RldnB0cwpAQCAtMCwwICsxLDUgQEAKKyMgR0lEIG9mIHRoZSBgdHR5JyBncm91cAorVFRZR1JQPTUKKyAKKyMgU2V0IHRvIDYwMCB0byBoYXZlIGBtZXNnIG4nIGJlIHRoZSBkZWZhdWx0CitUVFlNT0RFPTYyMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZGV2cHRzLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZGV2cHRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM2MDQzZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kZXZwdHMuc2gKQEAgLTAsMCArMSwyOCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBkZXZwdHMKKyMgUmVxdWlyZWQtU3RhcnQ6IHVkZXYKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogTW91bnQgL2Rldi9wdHMgZmlsZSBzeXN0ZW1zLgorIyMjIEVORCBJTklUIElORk8KKworLiAvZXRjL2RlZmF1bHQvZGV2cHRzCisKK2lmIGdyZXAgLXEgZGV2cHRzIC9wcm9jL2ZpbGVzeXN0ZW1zCit0aGVuCisJIworCSMJQ3JlYXRlIG11bHRpcGxleG9yIGRldmljZS4KKwkjCisJdGVzdCAtYyAvZGV2L3B0bXggfHwgbWtub2QgLW0gNjY2IC9kZXYvcHRteCBjIDUgMgorCisJIworCSMJTW91bnQgL2Rldi9wdHMgaWYgbmVlZGVkLgorCSMKKwlpZiAhIGdyZXAgLXEgZGV2cHRzIC9wcm9jL21vdW50cworCXRoZW4KKwkJbWtkaXIgLXAgL2Rldi9wdHMKKwkJbW91bnQgLXQgZGV2cHRzIGRldnB0cyAvZGV2L3B0cyAtb2dpZD0ke1RUWUdSUH0sbW9kZT0ke1RUWU1PREV9CisJZmkKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kbWVzZy5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2RtZXNnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5N2IwNjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kbWVzZy5zaApAQCAtMCwwICsxLDE3IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgICAgIGRtZXNnCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIyMgRU5EIElOSVQgSU5GTworCitpZiBbIC1mIC92YXIvbG9nL2RtZXNnIF07IHRoZW4KKwlpZiBbIC1mIC91c3Ivc2Jpbi9sb2dyb3RhdGUgXTsgdGhlbgorCQlsb2dyb3RhdGUgLWYgL2V0Yy9sb2dyb3RhdGUtZG1lc2cuY29uZgorCWVsc2UKKwkJbXYgLWYgL3Zhci9sb2cvZG1lc2cgL3Zhci9sb2cvZG1lc2cub2xkCisJZmkKK2ZpCitkbWVzZyAtcyAxMzEwNzIgPiAvdmFyL2xvZy9kbWVzZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZnVuY3Rpb25zIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZnVuY3Rpb25zCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAxYWQxZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9mdW5jdGlvbnMKQEAgLTAsMCArMSw5MSBAQAorIyAtKi1TaGVsbC1zY3JpcHQtKi0KKyMKKyMgZnVuY3Rpb25zICAgICBUaGlzIGZpbGUgY29udGFpbnMgZnVuY3Rpb25zIHRvIGJlIHVzZWQgYnkgbW9zdCBvciBhbGwKKyMgICAgICAgICAgICAgICBzaGVsbCBzY3JpcHRzIGluIHRoZSAvZXRjL2luaXQuZCBkaXJlY3RvcnkuCisjCisKK05PUk1BTD0iXFwwMzNbMDszOW0iICAgICAgICAgIyBTdGFuZGFyZCBjb25zb2xlIGdyZXkKK1NVQ0NFU1M9IlxcMDMzWzE7MzJtIiAgICAgICAgIyBTdWNjZXNzIGlzIGdyZWVuCitXQVJOSU5HPSJcXDAzM1sxOzMzbSIgICAgICAgICMgV2FybmluZ3MgYXJlIHllbGxvdworRkFJTFVSRT0iXFwwMzNbMTszMW0iICAgICAgICAjIEZhaWx1cmVzIGFyZSByZWQKK0lORk89IlxcMDMzWzE7MzZtIiAgICAgICAgICAgIyBJbmZvcm1hdGlvbiBpcyBsaWdodCBjeWFuCitCUkFDS0VUPSJcXDAzM1sxOzM0bSIgICAgICAgICMgQnJhY2tldHMgYXJlIGJsdWUKKworIyBOT1RFOiBUaGUgcGlkb2Zwcm9jICgpIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgcHJvY2VzcyB3aGljaCBpcyBhIHNjcmlwdCB1bmxlc3MKKyMgICAgICAgdGhlIHBpZG9mIHN1cHBvcnRzICIteCIgb3B0aW9uLiBJZiB5b3Ugd2FudCB0byB1c2UgaXQgZm9yIHN1Y2ggYQorIyAgICAgICBwcm9jZXNzOgorIyAgICAgICAxKSBJZiB0aGVyZSBpcyBubyAicGlkb2YgLXgiLCByZXBsYWNlIHRoZSAicGlkb2YgJDEiIHdpdGggYW5vdGhlcgorIyAgICAgICAgICBjb21tYW5kIGxpa2UoZm9yIGNvcmUtaW1hZ2UtbWluaW1hbCk6CisjICAgICAgICAgICAgcHMgfCBhd2sgJy8nIiQxIicvIHtwcmludCAkMX0nCisjICAgICAgIE9yCisjICAgICAgIDIpIElmIHRoZXJlIGlzICJwaWRvZiAteCIsIHJlcGxhY2UgInBpZG9mIiB3aXRoICJwaWRvZiAteCIuCisjCisjIHBpZG9mcHJvYyAtIHByaW50IHRoZSBwaWQgb2YgYSBwcm9jZXNzCisjICQxOiB0aGUgbmFtZSBvZiB0aGUgcHJvY2VzcworcGlkb2Zwcm9jICgpIHsKKworCSMgcGlkb2Ygb3V0cHV0IG51bGwgd2hlbiBubyBwcm9ncmFtIGlzIHJ1bm5pbmcsIHNvIG5vICIyPi9kZXYvbnVsbCIuCisJcGlkPWBwaWRvZiAkMWAKKwlzdGF0dXM9JD8KKwljYXNlICRzdGF0dXMgaW4KKwkwKQorCQllY2hvICRwaWQKKwkJcmV0dXJuIDAKKwkJOzsKKwkxMjcpCisJCWVjaG8gIkVSUk9SOiBjb21tYW5kIHBpZG9mIG5vdCBmb3VuZCIgPiYyCisJCWV4aXQgMTI3CisJCTs7CisJKikKKwkJcmV0dXJuICRzdGF0dXMKKwkJOzsKKwllc2FjCit9CisKK21hY2hpbmVfaWQoKSB7ICMgcmV0dXJuIHRoZSBtYWNoaW5lIElECisJYXdrICdCRUdJTiB7IEZTPSI6ICIgfSAvSGFyZHdhcmUvIFwKKwkJeyBnc3ViKCIgIiwgIl8iLCAkMik7IHByaW50IHRvbG93ZXIoJDIpIH0gJyA8L3Byb2MvY3B1aW5mbworfQorCitraWxscHJvYygpIHsgIyBraWxsIHRoZSBuYW1lZCBwcm9jZXNzKGVzKQorCXBpZD1gcGlkb2Zwcm9jICQxYCAmJiBraWxsICRwaWQKK30KKworc3RhdHVzKCkgeworICAgIGxvY2FsIHBpZAorICAgIGlmIFsgIiQjIiA9IDAgXTsgdGhlbgorICAgICAgICBlY2hvICJVc2FnZTogc3RhdHVzIHtwcm9ncmFtfSIKKyAgICAgICAgcmV0dXJuIDEKKyAgICBmaQorICAgIHBpZD1gcGlkb2Zwcm9jICQxYAorICAgIGlmIFsgLW4gIiRwaWQiIF07IHRoZW4KKyAgICAgICAgZWNobyAiJDEgKHBpZCAkcGlkKSBpcyBydW5uaW5nLi4uIgorICAgICAgICByZXR1cm4gMAorICAgIGVsc2UKKyAgICAgICAgZWNobyAiJDEgaXMgc3RvcHBlZCIKKyAgICBmaQorICAgIHJldHVybiAzCit9CisKK3N1Y2Nlc3MoKSB7CisgICAgZWNobyAtbiAtZSAiJHtCUkFDS0VUfVske1NVQ0NFU1N9ICBPSyAgJHtCUkFDS0VUfV0ke05PUk1BTH0iCisgICAgcmV0dXJuIDAKK30KKworZmFpbHVyZSgpIHsKKyAgICBsb2NhbCByYz0kKgorICAgIGVjaG8gLW4gLWUgIiR7QlJBQ0tFVH1bJHtGQUlMVVJFfSBGQUlMICR7QlJBQ0tFVH1dJHtOT1JNQUx9IgorICAgIHJldHVybiAkcmMKK30KKword2FybmluZygpIHsKKyAgICBsb2NhbCByYz0kKgorICAgIGVjaG8gLW4gLWUgIiR7QlJBQ0tFVH1bJHtXQVJOSU5HfSBXQVJOICR7QlJBQ0tFVH1dJHtOT1JNQUx9IgorICAgIHJldHVybiAkcmMKK30KKworcGFzc2VkKCkgeworICAgIGxvY2FsIHJjPSQqCisgICAgZWNobyAtbiAtZSAiJHtCUkFDS0VUfVske1NVQ0NFU1N9IFBBU1MgJHtCUkFDS0VUfV0ke05PUk1BTH0iCisgICAgcmV0dXJuICRyYworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvaGFsdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2hhbHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTU2ZjczNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2hhbHQKQEAgLTAsMCArMSwyOSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBoYWx0CisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OgorIyBEZWZhdWx0LVN0b3A6ICAgICAgMAorIyBTaG9ydC1EZXNjcmlwdGlvbjogRXhlY3V0ZSB0aGUgaGFsdCBjb21tYW5kLgorIyBEZXNjcmlwdGlvbjoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworIyBTZWUgaWYgd2UgbmVlZCB0byBjdXQgdGhlIHBvd2VyLgoraWYgdGVzdCAteCAvZXRjL2luaXQuZC91cHMtbW9uaXRvcgordGhlbgorCS9ldGMvaW5pdC5kL3Vwcy1tb25pdG9yIHBvd2Vyb2ZmCitmaQorCisjIERvbid0IHNodXQgZG93biBkcml2ZXMgaWYgd2UncmUgdXNpbmcgUkFJRC4KK2hkZG93bj0iLWgiCitpZiBncmVwIC1xcyAnXm1kLiphY3RpdmUnIC9wcm9jL21kc3RhdAordGhlbgorCWhkZG93bj0iIgorZmkKKworaGFsdCBTRURfSEFMVEFSR1MgLXAgJGhkZG93bgorCis6IGV4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvaG9zdG5hbWUuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9ob3N0bmFtZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NTI4N2NjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2hvc3RuYW1lLnNoCkBAIC0wLDAgKzEsMjIgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgaG9zdG5hbWUKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IFNldCBob3N0bmFtZSBiYXNlZCBvbiAvZXRjL2hvc3RuYW1lCisjIyMgRU5EIElOSVQgSU5GTworSE9TVE5BTUU9JCgvYmluL2hvc3RuYW1lKQorCitob3N0bmFtZSAtYiAtRiAvZXRjL2hvc3RuYW1lIDI+IC9kZXYvbnVsbAoraWYgWyAkPyAtZXEgMCBdOyB0aGVuCisJZXhpdAorZmkKKworIyBCdXN5Ym94IGhvc3RuYW1lIGRvZXNuJ3Qgc3VwcG9ydCAtYiBzbyB3ZSBuZWVkIGltcGxlbWVudCBpdCBvbiBvdXIgb3duCitpZiBbIC1mIC9ldGMvaG9zdG5hbWUgXTt0aGVuCisJaG9zdG5hbWUgYGNhdCAvZXRjL2hvc3RuYW1lYAorZWxpZiBbIC16ICIkSE9TVE5BTUUiIC1vICIkSE9TVE5BTUUiID0gIihub25lKSIgLW8gISAteiAiYGVjaG8gJEhPU1ROQU1FIHwgc2VkIC1uICcvXlswLTldKlwuWzAtOV0uKi9wJ2AiIF0gOyB0aGVuCisJaG9zdG5hbWUgbG9jYWxob3N0CitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbG9ncm90YXRlLWRtZXNnLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9sb2dyb3RhdGUtZG1lc2cuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjQ2ZTQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbG9ncm90YXRlLWRtZXNnLmNvbmYKQEAgLTAsMCArMSw5IEBACisjIHNlZSAibWFuIGxvZ3JvdGF0ZSIgZm9yIGRldGFpbHMKKyMgcm90YXRlIGRtZXNnLCBhbmQga2VlcCA1IHZlcnNpb25zLgorCisvdmFyL2xvZy9kbWVzZyB7CisJY3JlYXRlCisJcm90YXRlIDUKKwlub2RhdGVleHQKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbW91bnRhbGwuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9tb3VudGFsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NGJhZTQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbW91bnRhbGwuc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBtb3VudGFsbAorIyBSZXF1aXJlZC1TdGFydDogICAgbW91bnR2aXJ0ZnMKKyMgUmVxdWlyZWQtU3RvcDogCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IE1vdW50IGFsbCBmaWxlc3lzdGVtcy4KKyMgRGVzY3JpcHRpb246CisjIyMgRU5EIElOSVQgSU5GTworCisuIC9ldGMvZGVmYXVsdC9yY1MKKworIworIyBNb3VudCBsb2NhbCBmaWxlc3lzdGVtcyBpbiAvZXRjL2ZzdGFiLiBGb3Igc29tZSByZWFzb24sIHBlb3BsZQorIyBtaWdodCB3YW50IHRvIG1vdW50ICJwcm9jIiBzZXZlcmFsIHRpbWVzLCBhbmQgbW91bnQgLXYgY29tcGxhaW5zCisjIGFib3V0IHRoaXMuIFNvIHdlIG1vdW50ICJwcm9jIiBmaWxlc3lzdGVtcyB3aXRob3V0IC12LgorIwordGVzdCAiJFZFUkJPU0UiICE9IG5vICYmIGVjaG8gIk1vdW50aW5nIGxvY2FsIGZpbGVzeXN0ZW1zLi4uIgorbW91bnQgLWF0IG5vbmZzLG5vc21iZnMsbm9uY3BmcyAyPi9kZXYvbnVsbAorCisjCisjIFdlIG1pZ2h0IGhhdmUgbW91bnRlZCBzb21ldGhpbmcgb3ZlciAvZGV2LCBzZWUgaWYgL2Rldi9pbml0Y3RsIGlzIHRoZXJlLgorIworaWYgdGVzdCAhIC1wIC9kZXYvaW5pdGN0bAordGhlbgorCXJtIC1mIC9kZXYvaW5pdGN0bAorCW1rbm9kIC1tIDYwMCAvZGV2L2luaXRjdGwgcAorZmkKK2tpbGwgLVVTUjEgMQorCisjCisjIEV4ZWN1dGUgc3dhcG9uIGNvbW1hbmQgYWdhaW4sIGluIGNhc2Ugd2Ugd2FudCB0byBzd2FwIHRvCisjIGEgZmlsZSBvbiBhIG5vdyBtb3VudGVkIGZpbGVzeXN0ZW0uCisjCitzd2Fwb24gLWEgMj4gL2Rldi9udWxsCisKKzogZXhpdCAwCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL21vdW50bmZzLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbW91bnRuZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmU2YzE5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL21vdW50bmZzLnNoCkBAIC0wLDAgKzEsODggQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgbW91bnRuZnMKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRsb2NhbF9mcyAkbmV0d29yayAkcnBjYmluZAorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIyMgRU5EIElOSVQgSU5GTworCisjCisjCVJ1biBpbiBhIHN1YnNoZWxsIGJlY2F1c2Ugb2YgSS9PIHJlZGlyZWN0aW9uLgorIwordGVzdCAtZiAvZXRjL2ZzdGFiICYmICgKKworIworIwlSZWFkIHRocm91Z2ggZnN0YWIgbGluZSBieSBsaW5lLiBJZiBpdCBpcyBORlMsIHNldCB0aGUgZmxhZworIwlmb3IgbW91bnRpbmcgTkZTIGZpbGVzeXN0ZW1zLiBJZiBhbnkgTkZTIHBhcnRpdGlvbiBpcyBmb3VuZCBhbmQgaXQKKyMJbm90IG1vdW50ZWQgd2l0aCB0aGUgbm9sb2NrIG9wdGlvbiwgd2Ugc3RhcnQgdGhlIHJwY2JpbmQuCisjCitycGNiaW5kPW5vCittb3VudF9uZnM9bm8KK21vdW50X3NtYj1ubworbW91bnRfbmNwPW5vCittb3VudF9jaWZzPW5vCit3aGlsZSByZWFkIGRldmljZSBtb3VudHB0IGZzdHlwZSBvcHRpb25zCitkbworCWNhc2UgIiRkZXZpY2UiIGluCisJCSIifFwjKikKKwkJCWNvbnRpbnVlCisJCQk7OworCWVzYWMKKworCWNhc2UgIiRvcHRpb25zIiBpbgorCQkqbm9hdXRvKikKKwkJCWNvbnRpbnVlCisJCQk7OworCWVzYWMKKworCWlmIHRlc3QgIiRmc3R5cGUiID0gbmZzCisJdGhlbgorCQltb3VudF9uZnM9eWVzCisJCWNhc2UgIiRvcHRpb25zIiBpbgorCQkJKm5vbG9jayopCisJCQkJOzsKKwkJCSopCisJCQkJcnBjYmluZD15ZXMKKwkJCQk7OworCQllc2FjCisJZmkKKwlpZiB0ZXN0ICIkZnN0eXBlIiA9IHNtYmZzCisJdGhlbgorCQltb3VudF9zbWI9eWVzCisJZmkKKwlpZiB0ZXN0ICIkZnN0eXBlIiA9IG5jcGZzCisJdGhlbgorCQltb3VudF9uY3A9eWVzCisJZmkKKwlpZiB0ZXN0ICIkZnN0eXBlIiA9IGNpZnMKKwl0aGVuCisJCW1vdW50X2NpZnM9eWVzCisJZmkKK2RvbmUKKworZXhlYyAwPiYxCisKK2lmIHRlc3QgIiRycGNiaW5kIiA9IHllcwordGhlbgorCWlmIHRlc3QgLXggL3Vzci9zYmluL3JwY2JpbmQKKwl0aGVuCisJCWVjaG8gLW4gIlN0YXJ0aW5nIHJwY2JpbmQuLi4gIgorCQlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1leGVjIC91c3Ivc2Jpbi9ycGNiaW5kCisJCXNsZWVwIDIKKwlmaQorZmkKKworaWYgdGVzdCAiJG1vdW50X25mcyIgPSB5ZXMgfHwgdGVzdCAiJG1vdW50X3NtYiIgPSB5ZXMgfHwgdGVzdCAiJG1vdW50X25jcCIgPSB5ZXMgfHwgdGVzdCAiJG1vdW50X2NpZnMiID0geWVzCit0aGVuCisJZWNobyAiTW91bnRpbmcgcmVtb3RlIGZpbGVzeXN0ZW1zLi4uIgorCXRlc3QgIiRtb3VudF9uZnMiID0geWVzICYmIG1vdW50IC1hIC10IG5mcworCXRlc3QgIiRtb3VudF9zbWIiID0geWVzICYmIG1vdW50IC1hIC10IHNtYmZzCisJdGVzdCAiJG1vdW50X25jcCIgPSB5ZXMgJiYgbW91bnQgLWEgLXQgbmNwZnMKKwl0ZXN0ICIkbW91bnRfY2lmcyIgPSB5ZXMgJiYgbW91bnQgLWEgLXQgY2lmcworZmkKKworKSA8IC9ldGMvZnN0YWIKKworOiBleGl0IDAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcG9wdWxhdGUtdm9sYXRpbGUuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9wb3B1bGF0ZS12b2xhdGlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MDQwMzdlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcG9wdWxhdGUtdm9sYXRpbGUuc2gKQEAgLTAsMCArMSwyMjIgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgICAgdm9sYXRpbGUKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICAgICRsb2NhbF9mcworIyBSZXF1aXJlZC1TdG9wOiAgICAgICRsb2NhbF9mcworIyBEZWZhdWx0LVN0YXJ0OiAgICAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiAgUG9wdWxhdGUgdGhlIHZvbGF0aWxlIGZpbGVzeXN0ZW0KKyMjIyBFTkQgSU5JVCBJTkZPCisKKyMgR2V0IFJPT1RfRElSCitESVJOQU1FPWBkaXJuYW1lICQwYAorUk9PVF9ESVI9YGVjaG8gJERJUk5BTUUgfCBzZWQgLW5lICdzOi9ldGMvLio6OnAnYAorCitbIC1lICR7Uk9PVF9ESVJ9L2V0Yy9kZWZhdWx0L3JjUyBdICYmIC4gJHtST09UX0RJUn0vZXRjL2RlZmF1bHQvcmNTCisjIFdoZW4gcnVubmluZyBwb3B1bGF0ZS12b2xhdGlsZS5zaCBhdCByb290ZnMgdGltZSwgZGlzYWJsZSBjYWNoZS4KK1sgLW4gIiRST09UX0RJUiIgXSAmJiBWT0xBVElMRV9FTkFCTEVfQ0FDSEU9bm8KKyMgSWYgcm9vdGZzIGlzIHJlYWQtb25seSwgZGlzYWJsZSBjYWNoZS4KK1sgIiRST09URlNfUkVBRF9PTkxZIiA9ICJ5ZXMiIF0gJiYgVk9MQVRJTEVfRU5BQkxFX0NBQ0hFPW5vCisKK0NGR0RJUj0iJHtST09UX0RJUn0vZXRjL2RlZmF1bHQvdm9sYXRpbGVzIgorVE1QUk9PVD0iJHtST09UX0RJUn0vdmFyL3ZvbGF0aWxlL3RtcCIKK0NPUkVERUY9IjAwX2NvcmUiCisKK1sgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJQb3B1bGF0aW5nIHZvbGF0aWxlIEZpbGVzeXN0ZW1zLiIKKworY3JlYXRlX2ZpbGUoKSB7CisJRVhFQz0iCisJdG91Y2ggXCIkMVwiOworCWNob3duICR7VFVTRVJ9LiR7VEdST1VQfSAkMSB8fCBlY2hvIFwiRmFpbGVkIHRvIHNldCBvd25lciAtJHtUVVNFUn0tIGZvciAtJDEtLlwiID4vZGV2L3R0eTAgMj4mMTsKKwljaG1vZCAke1RNT0RFfSAkMSB8fCBlY2hvIFwiRmFpbGVkIHRvIHNldCBtb2RlIC0ke1RNT0RFfS0gZm9yIC0kMS0uXCIgPi9kZXYvdHR5MCAyPiYxICIKKworCXRlc3QgIiRWT0xBVElMRV9FTkFCTEVfQ0FDSEUiID0geWVzICYmIGVjaG8gIiRFWEVDIiA+PiAvZXRjL3ZvbGF0aWxlLmNhY2hlLmJ1aWxkCisKKwlbIC1lICIkMSIgXSAmJiB7CisJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJUYXJnZXQgYWxyZWFkeSBleGlzdHMuIFNraXBwaW5nLiIKKwl9IHx8IHsKKwkJaWYgWyAteiAiJFJPT1RfRElSIiBdOyB0aGVuCisJCQlldmFsICRFWEVDICYKKwkJZWxzZQorCQkJIyBDcmVhdGluZyBzb21lIGZpbGVzIGF0IHJvb3RmcyB0aW1lIG1heSBmYWlsIGFuZCBzaG91bGQgZmFpbCwKKwkJCSMgYnV0IHRoZXNlIGZhaWx1cmVzIHNob3VsZCBub3QgYmUgbG9nZ2VkIHRvIG1ha2Ugc3VyZSB0aGUgZG9fcm9vdGZzCisJCQkjIHByb2Nlc3MgZG9lc24ndCBmYWlsLiBUaGlzIGRvZXMgbm8gaGFybSwgYXMgdGhpcyBzY3JpcHQgd2lsbAorCQkJIyBydW4gb24gdGFyZ2V0IHRvIHNldCB1cCB0aGUgY29ycmVjdCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCisJCQlldmFsICRFWEVDID4gL2Rldi9udWxsIDI+JjEKKwkJZmkKKwl9Cit9CisKK21rX2RpcigpIHsKKwlFWEVDPSIKKwlta2RpciAtcCBcIiQxXCI7CisJY2hvd24gJHtUVVNFUn0uJHtUR1JPVVB9ICQxIHx8IGVjaG8gXCJGYWlsZWQgdG8gc2V0IG93bmVyIC0ke1RVU0VSfS0gZm9yIC0kMS0uXCIgPi9kZXYvdHR5MCAyPiYxOworCWNobW9kICR7VE1PREV9ICQxIHx8IGVjaG8gXCJGYWlsZWQgdG8gc2V0IG1vZGUgLSR7VE1PREV9LSBmb3IgLSQxLS5cIiA+L2Rldi90dHkwIDI+JjEgIgorCisJdGVzdCAiJFZPTEFUSUxFX0VOQUJMRV9DQUNIRSIgPSB5ZXMgJiYgZWNobyAiJEVYRUMiID4+IC9ldGMvdm9sYXRpbGUuY2FjaGUuYnVpbGQKKwlbIC1lICIkMSIgXSAmJiB7CisJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJUYXJnZXQgYWxyZWFkeSBleGlzdHMuIFNraXBwaW5nLiIKKwl9IHx8IHsKKwkJaWYgWyAteiAiJFJPT1RfRElSIiBdOyB0aGVuCisJCQlldmFsICRFWEVDCisJCWVsc2UKKwkJCSMgRm9yIHRoZSBzYW1lIHJlYXNvbiB3aXRoIGNyZWF0ZV9maWxlKCksIGZhaWx1cmVzIHNob3VsZAorCQkJIyBub3QgYmUgbG9nZ2VkLgorCQkJZXZhbCAkRVhFQyA+IC9kZXYvbnVsbCAyPiYxCisJCWZpCisJfQorfQorCitsaW5rX2ZpbGUoKSB7CisJRVhFQz0iCisJaWYgWyAtTCBcIiQyXCIgXTsgdGhlbgorCQlbIFwiXCQocmVhZGxpbmsgLWYgXCIkMlwiKVwiICE9IFwiXCQocmVhZGxpbmsgLWYgXCIkMVwiKVwiIF0gJiYgeyBybSAtZiBcIiQyXCI7IGxuIC1zZiBcIiQxXCIgXCIkMlwiOyB9OworCWVsaWYgWyAtZCBcIiQyXCIgXTsgdGhlbgorCQlpZiBhd2sgJ1wkMiA9PSBcIiQyXCIge2V4aXQgMX0nIC9wcm9jL21vdW50czsgdGhlbgorCQkJY3AgLWEgJDIvKiAkMSAyPi9kZXYvbnVsbDsKKwkJCWNwIC1hICQyLy5bIS5dKiAkMSAyPi9kZXYvbnVsbDsKKwkJCXJtIC1yZiBcIiQyXCI7CisJCQlsbiAtc2YgXCIkMVwiIFwiJDJcIjsKKwkJZmkKKwllbHNlCisJCWxuIC1zZiBcIiQxXCIgXCIkMlwiOworCWZpCisgICAgICAgICIKKworCXRlc3QgIiRWT0xBVElMRV9FTkFCTEVfQ0FDSEUiID0geWVzICYmIGVjaG8gIgkkRVhFQyIgPj4gL2V0Yy92b2xhdGlsZS5jYWNoZS5idWlsZAorCisJaWYgWyAteiAiJFJPT1RfRElSIiBdOyB0aGVuCisJCWV2YWwgJEVYRUMgJgorCWVsc2UKKwkJIyBGb3IgdGhlIHNhbWUgcmVhc29uIHdpdGggY3JlYXRlX2ZpbGUoKSwgZmFpbHVyZXMgc2hvdWxkCisJCSMgbm90IGJlIGxvZ2dlZC4KKwkJZXZhbCAkRVhFQyA+IC9kZXYvbnVsbCAyPiYxCisJZmkKK30KKworY2hlY2tfcmVxdWlyZW1lbnRzKCkgeworCWNsZWFudXAoKSB7CisJCXJtICIke1RNUF9JTlRFUk1FRH0iCisJCXJtICIke1RNUF9ERUZJTkVEfSIKKwkJcm0gIiR7VE1QX0NPTUJJTkVEfSIKKwl9CisKKwlDRkdGSUxFPSIkMSIKKwlbIGBiYXNlbmFtZSAiJHtDRkdGSUxFfSJgID0gIiR7Q09SRURFRn0iIF0gJiYgcmV0dXJuIDAKKworCVRNUF9JTlRFUk1FRD0iJHtUTVBST09UfS90bXAuJCQiCisJVE1QX0RFRklORUQ9IiR7VE1QUk9PVH0vdG1wZGVmaW5lZC4kJCIKKwlUTVBfQ09NQklORUQ9IiR7VE1QUk9PVH0vdG1wY29tYmluZWQuJCQiCisKKwlzZWQgJ3NAXCheOlwpKjouKkBcMUAnICR7Uk9PVF9ESVJ9L2V0Yy9wYXNzd2QgfCBzb3J0IHwgdW5pcSA+ICIke1RNUF9ERUZJTkVEfSIKKwljYXQgJHtDRkdGSUxFfSB8IGdyZXAgLXYgIl4jIiB8IGN1dCAtcyAtZCAiICIgLWYgMiA+ICIke1RNUF9JTlRFUk1FRH0iCisJY2F0ICIke1RNUF9ERUZJTkVEfSIgIiR7VE1QX0lOVEVSTUVEfSIgfCBzb3J0IHwgdW5pcSA+ICIke1RNUF9DT01CSU5FRH0iCisJTlJfREVGSU5FRF9VU0VSUz0iYGNhdCAiJHtUTVBfREVGSU5FRH0iIHwgd2MgLWxgIgorCU5SX0NPTUJJTkVEX1VTRVJTPSJgY2F0ICIke1RNUF9DT01CSU5FRH0iIHwgd2MgLWxgIgorCisJWyAiJHtOUl9ERUZJTkVEX1VTRVJTfSIgLW5lICIke05SX0NPTUJJTkVEX1VTRVJTfSIgXSAmJiB7CisJCWVjaG8gIlVuZGVmaW5lZCB1c2VyczoiCisJCWRpZmYgIiR7VE1QX0RFRklORUR9IiAiJHtUTVBfQ09NQklORUR9IiB8IGdyZXAgIl4+IgorCQljbGVhbnVwCisJCXJldHVybiAxCisJfQorCisKKwlzZWQgJ3NAXCheOlwpKjouKkBcMUAnICR7Uk9PVF9ESVJ9L2V0Yy9ncm91cCB8IHNvcnQgfCB1bmlxID4gIiR7VE1QX0RFRklORUR9IgorCWNhdCAke0NGR0ZJTEV9IHwgZ3JlcCAtdiAiXiMiIHwgY3V0IC1zIC1kICIgIiAtZiAzID4gIiR7VE1QX0lOVEVSTUVEfSIKKwljYXQgIiR7VE1QX0RFRklORUR9IiAiJHtUTVBfSU5URVJNRUR9IiB8IHNvcnQgfCB1bmlxID4gIiR7VE1QX0NPTUJJTkVEfSIKKworCU5SX0RFRklORURfR1JPVVBTPSJgY2F0ICIke1RNUF9ERUZJTkVEfSIgfCB3YyAtbGAiCisJTlJfQ09NQklORURfR1JPVVBTPSJgY2F0ICIke1RNUF9DT01CSU5FRH0iIHwgd2MgLWxgIgorCisJWyAiJHtOUl9ERUZJTkVEX0dST1VQU30iIC1uZSAiJHtOUl9DT01CSU5FRF9HUk9VUFN9IiBdICYmIHsKKwkJZWNobyAiVW5kZWZpbmVkIGdyb3VwczoiCisJCWRpZmYgIiR7VE1QX0RFRklORUR9IiAiJHtUTVBfQ09NQklORUR9IiB8IGdyZXAgIl4+IgorCQljbGVhbnVwCisJCXJldHVybiAxCisJfQorCisJIyBBZGQgY2hlY2tzIGZvciByZXF1aXJlZCBkaXJlY3RvcmllcyBoZXJlCisKKwljbGVhbnVwCisJcmV0dXJuIDAKK30KKworYXBwbHlfY2ZnZmlsZSgpIHsKKwlDRkdGSUxFPSIkMSIKKworCWNoZWNrX3JlcXVpcmVtZW50cyAiJHtDRkdGSUxFfSIgfHwgeworCQllY2hvICJTa2lwcGluZyAke0NGR0ZJTEV9IgorCQlyZXR1cm4gMQorCX0KKworCWNhdCAke0NGR0ZJTEV9IHwgZ3JlcCAtdiAiXiMiIHwgXAorCQl3aGlsZSByZWFkIExJTkU7IGRvCisJCWV2YWwgYGVjaG8gIiRMSU5FIiB8IHNlZCAtbiAicy9cKC4qXClcIFwoLipcKSBcKC4qXClcIFwoLipcKVwgXCguKlwpXCBcKC4qXCkvVFRZUEU9XDEgOyBUVVNFUj1cMjsgVEdST1VQPVwzOyBUTU9ERT1cNDsgVE5BTUU9XDUgVExUQVJHRVQ9XDYvcCJgCisJCVROQU1FPSR7Uk9PVF9ESVJ9JHtUTkFNRX0KKwkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIkNoZWNraW5nIGZvciAtJHtUTkFNRX0tLiIKKworCQlbICIke1RUWVBFfSIgPSAibCIgXSAmJiB7CisJCQlUU09VUkNFPSIkVExUQVJHRVQiCisJCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiQ3JlYXRpbmcgbGluayAtJHtUTkFNRX0tIHBvaW50aW5nIHRvIC0ke1RTT1VSQ0V9LS4iCisJCQlsaW5rX2ZpbGUgIiR7VFNPVVJDRX0iICIke1ROQU1FfSIKKwkJCWNvbnRpbnVlCisJCX0KKworCQlbIC1MICIke1ROQU1FfSIgXSAmJiB7CisJCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiRm91bmQgbGluay4iCisJCQlORVdOQU1FPWBscyAtbCAiJHtUTkFNRX0iIHwgc2VkIC1lICdzL14uKi0+IFwoLipcKSQvXDEvJ2AKKwkJCWVjaG8gJHtORVdOQU1FfSB8IGdyZXAgLXYgIl4vIiA+L2Rldi9udWxsICYmIHsKKwkJCQlUTkFNRT0iYGVjaG8gJHtUTkFNRX0gfCBzZWQgLWUgJ3NAXCguKlwpLy4qQFwxQCdgLyR7TkVXTkFNRX0iCisJCQkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIkNvbnZlcnRlZCByZWxhdGl2ZSBsaW5rdGFyZ2V0IHRvIGFic29sdXRlIHBhdGggLSR7VE5BTUV9LS4iCisJCQl9IHx8IHsKKwkJCQlUTkFNRT0iJHtORVdOQU1FfSIKKwkJCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiVXNpbmcgYWJzb2x1dGUgbGluayB0YXJnZXQgLSR7VE5BTUV9LS4iCisJCQl9CisJCX0KKworCQljYXNlICIke1RUWVBFfSIgaW4KKwkJCSJmIikgIFsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJDcmVhdGluZyBmaWxlIC0ke1ROQU1FfS0uIgorCQkJCWNyZWF0ZV9maWxlICIke1ROQU1FfSIgJgorCQkJCTs7CisJCQkiZCIpICBbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiQ3JlYXRpbmcgZGlyZWN0b3J5IC0ke1ROQU1FfS0uIgorCQkJCW1rX2RpciAiJHtUTkFNRX0iCisJCQkJIyBBZGQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYW4gZW50cnkgaW4gZnN0YWIgdG8gbW91bnQuCisJCQkJOzsKKwkJCSopICAgIFsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJJbnZhbGlkIHR5cGUgLSR7VFRZUEV9LS4iCisJCQkJY29udGludWUKKwkJCQk7OworCQllc2FjCisJZG9uZQorCXJldHVybiAwCit9CisKK2NsZWFyY2FjaGU9MAorZXhlYyA5PC9wcm9jL2NtZGxpbmUKK3doaWxlIHJlYWQgbGluZSA8JjkKK2RvCisJY2FzZSAiJGxpbmUiIGluCisJCSpjbGVhcmNhY2hlKikgIGNsZWFyY2FjaGU9MQorCQkJICAgICAgIDs7CisJCSopCSAgICAgICBjb250aW51ZQorCQkJICAgICAgIDs7CisJZXNhYworZG9uZQorZXhlYyA5PiYtCisKK2lmIHRlc3QgLWUgJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlIC1hICIkVk9MQVRJTEVfRU5BQkxFX0NBQ0hFIiA9ICJ5ZXMiIC1hICJ4JDEiICE9ICJ4dXBkYXRlIiAtYSAieCRjbGVhcmNhY2hlIiA9ICJ4MCIKK3RoZW4KKwlzaCAke1JPT1RfRElSfS9ldGMvdm9sYXRpbGUuY2FjaGUKK2Vsc2UKKwlybSAtZiAke1JPT1RfRElSfS9ldGMvdm9sYXRpbGUuY2FjaGUgJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlLmJ1aWxkCisJZm9yIGZpbGUgaW4gYGxzIC0xICIke0NGR0RJUn0iIHwgc29ydGA7IGRvCisJCWFwcGx5X2NmZ2ZpbGUgIiR7Q0ZHRElSfS8ke2ZpbGV9IgorCWRvbmUKKworCVsgLWUgJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlLmJ1aWxkIF0gJiYgc3luYyAmJiBtdiAke1JPT1RfRElSfS9ldGMvdm9sYXRpbGUuY2FjaGUuYnVpbGQgJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlCitmaQorCitpZiBbIC16ICIke1JPT1RfRElSfSIgXSAmJiBbIC1mIC9ldGMvbGQuc28uY2FjaGUgXSAmJiBbICEgLWYgL3Zhci9ydW4vbGQuc28uY2FjaGUgXQordGhlbgorCWxuIC1zIC9ldGMvbGQuc28uY2FjaGUgL3Zhci9ydW4vbGQuc28uY2FjaGUKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9yZWFkLW9ubHktcm9vdGZzLWhvb2suc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9yZWFkLW9ubHktcm9vdGZzLWhvb2suc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwMzI4ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3JlYWQtb25seS1yb290ZnMtaG9vay5zaApAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gKKworLiAvZXRjL2RlZmF1bHQvcmNTCisKK1sgIiRST09URlNfUkVBRF9PTkxZIiA9ICJubyIgXSAmJiBleGl0IDAKKworaXNfb25fcmVhZF9vbmx5X3BhcnRpdGlvbiAoKSB7CisJRElSRUNUT1JZPSQxCisJZGlyPWByZWFkbGluayAtZiAkRElSRUNUT1JZYAorCXdoaWxlIHRydWU7IGRvCisJCWlmIFsgISAtZCAiJGRpciIgXTsgdGhlbgorCQkJZWNobyAiRVJST1I6ICRkaXIgaXMgbm90IGEgZGlyZWN0b3J5IgorCQkJZXhpdCAxCisJCWVsc2UKKwkJCWZvciBmbGFnIGluIGBhd2sgLXYgZGlyPSRkaXIgJ3sgaWYgKCQyID09IGRpcikgeyBwcmludCAiRk9VTkQiOyBzcGxpdCgkNCxGTEFHUywiLCIpIH0gfTsgXAorCQkJCUVORCB7IGZvciAoZiBpbiBGTEFHUykgcHJpbnQgRkxBR1NbZl0gfScgPCAvcHJvYy9tb3VudHNgOyBkbworCQkJCVsgIiRmbGFnIiA9ICJGT1VORCIgXSAmJiBwYXJ0aXRpb249InJlYWQtd3JpdGUiCisJCQkJWyAiJGZsYWciID0gInJvIiBdICYmIHsgcGFydGl0aW9uPSJyZWFkLW9ubHkiOyBicmVhazsgfQorCQkJZG9uZQorCQkJaWYgWyAiJGRpciIgPSAiLyIgLW8gLW4gIiRwYXJ0aXRpb24iIF07IHRoZW4KKwkJCQlicmVhaworCQkJZWxzZQorCQkJCWRpcj1gZGlybmFtZSAkZGlyYAorCQkJZmkKKwkJZmkKKwlkb25lCisJWyAiJHBhcnRpdGlvbiIgPSAicmVhZC1vbmx5IiBdICYmIGVjaG8gInllcyIgfHwgZWNobyAibm8iCit9CisKK2lmIFsgIiQxIiA9ICJzdGFydCIgXSA7IHRoZW4KKwlpZiBbIGBpc19vbl9yZWFkX29ubHlfcGFydGl0aW9uIC92YXIvbGliYCA9ICJ5ZXMiIF07IHRoZW4KKwkJZ3JlcCAtcSAidG1wZnMgL3Zhci92b2xhdGlsZSIgL3Byb2MvbW91bnRzIHx8IG1vdW50IC92YXIvdm9sYXRpbGUKKwkJbWtkaXIgLXAgL3Zhci92b2xhdGlsZS9saWIKKwkJY3AgLWEgL3Zhci9saWIvKiAvdmFyL3ZvbGF0aWxlL2xpYgorCQltb3VudCAtLWJpbmQgL3Zhci92b2xhdGlsZS9saWIgL3Zhci9saWIKKwlmaQorZmkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcmVib290IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcmVib290Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA4N2Q4ZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9yZWJvb3QKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICByZWJvb3QKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6CisjIERlZmF1bHQtU3RvcDogICAgICA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBFeGVjdXRlIHRoZSByZWJvb3QgY29tbWFuZC4KKyMgRGVzY3JpcHRpb246CisjIyMgRU5EIElOSVQgSU5GTworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKK2VjaG8gLW4gIlJlYm9vdGluZy4uLiAiCityZWJvb3QgU0VEX0hBTFRBUkdTCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9ybW5vbG9naW4uc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9ybW5vbG9naW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzZkZTM0MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Jtbm9sb2dpbi5zaApAQCAtMCwwICsxLDIwIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHJtbm9sb2dpbgorIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyAkYWxsCisjIFJlcXVpcmVkLVN0b3A6IAorIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBSZW1vdmUgL2V0Yy9ub2xvZ2luIGF0IGJvb3QKKyMgRGVzY3JpcHRpb246ICAgICAgIFRoaXMgc2NyaXB0IHJlbW92ZXMgdGhlIC9ldGMvbm9sb2dpbiBmaWxlIGFzIHRoZQorIyAgICAgICAgICAgICAgICAgICAgbGFzdCBzdGVwIGluIHRoZSBib290IHByb2Nlc3MsIGlmIERFTEFZTE9HSU49eWVzLgorIyAgICAgICAgICAgICAgICAgICAgSWYgREVMQVlMT0dJTj1ubywgL2V0Yy9ub2xvZ2luIHdhcyBub3QgY3JlYXRlZCBieQorIyAgICAgICAgICAgICAgICAgICAgYm9vdG1pc2MgZWFybGllciBpbiB0aGUgYm9vdCBwcm9jZXNzLgorIyMjIEVORCBJTklUIElORk8KKworaWYgdGVzdCAtZiAvZXRjL25vbG9naW4uYm9vdAordGhlbgorCXJtIC1mIC9ldGMvbm9sb2dpbiAvZXRjL25vbG9naW4uYm9vdAorZmkKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3NhdmUtcnRjLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc2F2ZS1ydGMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAzOGZjNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3NhdmUtcnRjLnNoCkBAIC0wLDAgKzEsMTMgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgc2F2ZS1ydGMKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbG9jYWxfZnMgaHdjbG9jaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6ICAgICAgMCA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBTdG9yZSBzeXN0ZW0gY2xvY2sgaW50byBmaWxlCisjIERlc2NyaXB0aW9uOiAgICAgICAKKyMjIyBFTkQgSU5JVCBJTkZPCisKKyMgVXBkYXRlIHRoZSB0aW1lc3RhbXAKK2RhdGUgLXUgKyU0WSUybSUyZCUySCUyTSUyUyA+IC9ldGMvdGltZXN0YW1wCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zZW5kc2lncyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3NlbmRzaWdzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM0ZTFiNzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zZW5kc2lncwpAQCAtMCwwICsxLDIxIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHNlbmRzaWdzCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAKKyMgUmVxdWlyZWQtU3RvcDogICAgIHVtb3VudG5mcworIyBEZWZhdWx0LVN0YXJ0OgorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBLaWxsIGFsbCByZW1haW5pbmcgcHJvY2Vzc2VzLgorIyBEZXNjcmlwdGlvbjogCisjIyMgRU5EIElOSVQgSU5GTworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgS2lsbCBhbGwgcHJvY2Vzc2VzLgorZWNobyAiU2VuZGluZyBhbGwgcHJvY2Vzc2VzIHRoZSBURVJNIHNpZ25hbC4uLiIKK2tpbGxhbGw1IC0xNQorc2xlZXAgNQorZWNobyAiU2VuZGluZyBhbGwgcHJvY2Vzc2VzIHRoZSBLSUxMIHNpZ25hbC4uLiIKK2tpbGxhbGw1IC05CisKKzogZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zaW5nbGUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zaW5nbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGE4MmQxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3NpbmdsZQpAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHNpbmdsZQorIyBSZXF1aXJlZC1TdGFydDogICAgJGxvY2FsX2ZzICRhbGwga2lsbHByb2NzCisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICAxCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IGV4ZWN1dGVkIGJ5IGluaXQoOCkgdXBvbiBlbnRlcmluZyBydW5sZXZlbCAxIChzaW5nbGUpLgorIyMjIEVORCBJTklUIElORk8KKworUEFUSD0iL3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iCisKKyMgS2lsbCBhbGwgcHJvY2Vzc2VzLgorZWNobyAiU2VuZGluZyBhbGwgcHJvY2Vzc2VzIHRoZSBURVJNIHNpZ25hbC4uLiIKK2tpbGxhbGw1IC0xNQorc2xlZXAgNQorZWNobyAiU2VuZGluZyBhbGwgcHJvY2Vzc2VzIHRoZSBLSUxMIHNpZ25hbC4uLiIKK2tpbGxhbGw1IC05CisKKyMgV2Ugc3RhcnQgdXBkYXRlIGhlcmUsIHNpbmNlIHdlIGp1c3Qga2lsbGVkIGl0LgordGVzdCAteCAvc2Jpbi91cGRhdGUgJiYgdXBkYXRlCisKK2VjaG8gIkVudGVyaW5nIHNpbmdsZS11c2VyIG1vZGUuLi4iCitleGVjIGluaXQgLXQxIFMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3N1c2hlbGwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zdXNoZWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMTlkOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zdXNoZWxsCkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisKK1sgLXogIiRTVVNIRUxMIiBdICYmIFNVU0hFTEw9L2Jpbi9zaAorCitleGVjICRTVVNIRUxMCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zeXNmcy5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3N5c2ZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZmU3NmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zeXNmcy5zaApAQCAtMCwwICsxLDIzIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG1vdW50dmlydGZzCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBNb3VudCBrZXJuZWwgdmlydHVhbCBmaWxlIHN5c3RlbXMuCisjIERlc2NyaXB0aW9uOiAgICAgICBNb3VudCBpbml0aWFsIHNldCBvZiB2aXJ0dWFsIGZpbGVzeXN0ZW1zIHRoZSBrZXJuZWwKKyMgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzIGFuZCB0aGF0IGFyZSByZXF1aXJlZCBieSBldmVyeXRoaW5nLgorIyMjIEVORCBJTklUIElORk8KKworaWYgWyAtZSAvcHJvYyBdICYmICEgWyAtZSAvcHJvYy9tb3VudHMgXTsgdGhlbgorICBtb3VudCAtdCBwcm9jIHByb2MgL3Byb2MKK2ZpCisKK2lmIFsgLWUgL3N5cyBdICYmIGdyZXAgLXEgc3lzZnMgL3Byb2MvZmlsZXN5c3RlbXMgJiYgISBbIC1lIC9zeXMvY2xhc3MgXTsgdGhlbgorICBtb3VudCAtdCBzeXNmcyBzeXNmcyAvc3lzCitmaQorCitpZiBbIC1lIC9zeXMva2VybmVsL2RlYnVnIF0gJiYgZ3JlcCAtcSBkZWJ1Z2ZzIC9wcm9jL2ZpbGVzeXN0ZW1zOyB0aGVuCisgIG1vdW50IC10IGRlYnVnZnMgZGVidWdmcyAvc3lzL2tlcm5lbC9kZWJ1ZworZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Vtb3VudGZzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdW1vdW50ZnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjEzMjRjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Vtb3VudGZzCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdW1vdW50ZnMKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6ICAgICAKKyMgRGVmYXVsdC1TdGFydDoKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogVHVybiBvZmYgc3dhcCBhbmQgdW5tb3VudCBhbGwgbG9jYWwgZmlsZSBzeXN0ZW1zLgorIyBEZXNjcmlwdGlvbjoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworZWNobyAiRGVhY3RpdmF0aW5nIHN3YXAuLi4iCitzd2Fwb2ZmIC1hCisKKyMgV2UgbGVhdmUgL3Byb2MgbW91bnRlZC4KK2VjaG8gIlVubW91bnRpbmcgbG9jYWwgZmlsZXN5c3RlbXMuLi4iCitncmVwIC1xIC9tbnQvcmFtIC9wcm9jL21vdW50cyAmJiBtb3VudCAtbyByZW1vdW50LHJvIC9tbnQvcmFtCittb3VudCAtbyByZW1vdW50LHJvIC8KKwordW1vdW50IC1mIC1hIC1yID4gL2Rldi9udWxsIDI+JjEKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Vtb3VudG5mcy5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Vtb3VudG5mcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZjA3NTQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdW1vdW50bmZzLnNoCkBAIC0wLDAgKzEsMzMgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdW1vdW50bmZzCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOiAgICAgdW1vdW50ZnMKKyMgU2hvdWxkLVN0b3A6ICAgICAgICRuZXR3b3JrICRwb3J0bWFwCisjIERlZmF1bHQtU3RhcnQ6CisjIERlZmF1bHQtU3RvcDogICAgICAwIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IFVubW91bnQgYWxsIG5ldHdvcmsgZmlsZXN5c3RlbXMKKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworIyBXcml0ZSBhIHJlYm9vdCByZWNvcmQgdG8gL3Zhci9sb2cvd3RtcCBiZWZvcmUgdW5tb3VudGluZworaGFsdCAtdworCitlY2hvICJVbm1vdW50aW5nIHJlbW90ZSBmaWxlc3lzdGVtcy4uLiIKKwordGVzdCAtZiAvZXRjL2ZzdGFiICYmICgKKworIworIwlSZWFkIHRocm91Z2ggZnN0YWIgbGluZSBieSBsaW5lIGFuZCB1bm91bnQgbmV0d29yayBmaWxlIHN5c3RlbXMKKyMKK3doaWxlIHJlYWQgZGV2aWNlIG1vdW50cHQgZnN0eXBlIG9wdGlvbnMKK2RvCisJaWYgdGVzdCAiJGZzdHlwZSIgPSBuZnMgfHwgIHRlc3QgIiRmc3R5cGUiID0gc21iZnMgfHwgIHRlc3QgIiRmc3R5cGUiID0gbmNwZnMgfHwgdGVzdCAiJGZzdHlwZSIgPSBjaWZzCisJdGhlbgorCQl1bW91bnQgLWYgJG1vdW50cHQKKwlmaQorZG9uZQorKSA8IC9ldGMvZnN0YWIKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3VyYW5kb20gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91cmFuZG9tCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFmMTYyNWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91cmFuZG9tCkBAIC0wLDAgKzEsNDkgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdXJhbmRvbQorIyBSZXF1aXJlZC1TdGFydDogICAgJGxvY2FsX2ZzIG1vdW50dmlydGZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbG9jYWxfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogU2F2ZSBhbmQgcmVzdG9yZSB0aGUgcmFuZG9tIHNlZWQKKyMgRGVzY3JpcHRpb246ICAgICAgIFNhdmUgdGhlIHJhbmRvbSBzZWVkIG9uIHNodXRkb3duIGFuZCByZXN0b3JlIGl0IG9uIGJvb3QsCisjICAgICAgICAgICAgICAgICAgICB0byBlbnN1cmUgdGhhdCB0aGUgc2VlZCBpc24ndCBwcmVkaWNhYmxlIG9uIHN0YXJ0dXAKKyMgICAgICAgICAgICAgICAgICAgIChiZWNhdXNlIHRoZSBib290IHByb2Nlc3MgaXMgcHJlZGljdGFibGUpCisjIyMgRU5EIElOSVQgSU5GTworCit0ZXN0IC1jIC9kZXYvdXJhbmRvbSB8fCBleGl0IDAKKworUkFORE9NX1NFRURfRklMRT0vdmFyL2xpYi91cmFuZG9tL3JhbmRvbS1zZWVkCisKKy4gL2V0Yy9kZWZhdWx0L3JjUworWyAtZiAvZXRjL2RlZmF1bHQvdXJhbmRvbSBdICYmIC4gL2V0Yy9kZWZhdWx0L3VyYW5kb20KKworY2FzZSAiJDEiIGluCisJc3RhcnR8IiIpCisJCXRlc3QgIiRWRVJCT1NFIiAhPSBubyAmJiBlY2hvICJJbml0aWFsaXppbmcgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuLi4iCisJCSMgTG9hZCBhbmQgdGhlbiBzYXZlIDUxMiBieXRlcywgd2hpY2ggaXMgdGhlIHNpemUgb2YgdGhlIGVudHJvcHkKKwkJIyBwb29sLiBBbHNvIGxvYWQgdGhlIGN1cnJlbnQgZGF0ZSwgaW4gY2FzZSB0aGUgc2VlZCBmaWxlIGlzCisJCSMgZW1wdHkuCisJCSggZGF0ZSArJXMuJU47IFsgLWYgIiRSQU5ET01fU0VFRF9GSUxFIiBdICYmIGNhdCAiJFJBTkRPTV9TRUVEX0ZJTEUiICkgXAorCQkJPi9kZXYvdXJhbmRvbQorCQlybSAtZiAiJFJBTkRPTV9TRUVEX0ZJTEUiCisJCXVtYXNrIDA3NworCQlkZCBpZj0vZGV2L3VyYW5kb20gb2Y9JFJBTkRPTV9TRUVEX0ZJTEUgY291bnQ9MSBcCisJCQk+L2Rldi9udWxsIDI+JjEgfHwgZWNobyAidXJhbmRvbSBzdGFydDogZmFpbGVkLiIKKwkJdW1hc2sgMDIyCisJCTs7CisJc3RvcCkKKwkJIyBDYXJyeSBhIHJhbmRvbSBzZWVkIGZyb20gc2h1dC1kb3duIHRvIHN0YXJ0LXVwOworCQkjIHNlZSBkb2N1bWVudGF0aW9uIGluIGxpbnV4L2RyaXZlcnMvY2hhci9yYW5kb20uYworCQl0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiU2F2aW5nIHJhbmRvbSBzZWVkLi4uIgorCQl1bWFzayAwNzcKKwkJZGQgaWY9L2Rldi91cmFuZG9tIG9mPSRSQU5ET01fU0VFRF9GSUxFIGNvdW50PTEgXAorCQkJPi9kZXYvbnVsbCAyPiYxIHx8IGVjaG8gInVyYW5kb20gc3RvcDogZmFpbGVkLiIKKwkJOzsKKwkqKQorCQllY2hvICJVc2FnZTogdXJhbmRvbSB7c3RhcnR8c3RvcH0iID4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC92b2xhdGlsZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC92b2xhdGlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk3MjQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3ZvbGF0aWxlcwpAQCAtMCwwICsxLDM2IEBACisjIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIGxpc3RzIGZpbGVzeXN0ZW0gb2JqZWN0cyB0aGF0IHNob3VsZCBnZXQgdmVyaWZpZWQKKyMgZHVyaW5nIHN0YXJ0dXAgYW5kIGJlIGNyZWF0ZWQgaWYgbWlzc2luZy4KKyMKKyMgRXZlcnkgbGluZSBtdXN0IGVpdGhlciBiZSBhIGNvbW1lbnQgc3RhcnRpbmcgd2l0aCAjCisjIG9yIGEgZGVmaW5pdGlvbiBvZiBmb3JtYXQ6CisjIDx0eXBlPiA8b3duZXI+IDxncm91cD4gPG1vZGU+IDxwYXRoPiA8bGlua3NvdXJjZT4KKyMgd2hlcmUgdGhlIGl0ZW1zIGFyZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSAhCisjCisjIDx0eXBlPiA6IGR8ZnxsIDogKGQpaXJlY3Rvcnl8KGYpaWxlfChsKWluaworIworIyBBIGxpbmtpbmcgZXhhbXBsZToKKyMgbCByb290IHJvb3QgMDc3NyAvdmFyL3Rlc3QgL3RtcC90ZXN0ZmlsZQorIyBmIHJvb3Qgcm9vdCAwNjQ0IC92YXIvdGVzdCBub25lCisjCisjIFVuZGVyc3RhbmRpbmcgbGlua3M6CisjIFdoZW4gcG9wdWxhdGUtdm9sYXRpbGUgaXMgdG8gdmVyaWZ5L2NyZWF0ZSBhIGRpcmVjdG9yeSBvciBmaWxlLCBpdCB3aWxsIGZpcnN0CisjIGNoZWNrIGl0J3MgZXhpc3RlbmNlLiBJZiBhIGxpbmsgaXMgZm91bmQgdG8gZXhpc3QgaW4gdGhlIHBsYWNlIG9mIHRoZSB0YXJnZXQsCisjIHRoZSBwYXRoIG9mIHRoZSB0YXJnZXQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgdGFyZ2V0IHRoZSBsaW5rIHBvaW50cyB0by4KKyMgVGh1cywgaWYgYSBsaW5rIGlzIGluIHRoZSBwbGFjZSB0byBiZSB2ZXJpZmllZCwgdGhlIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQKKyMgaW4gdGhlIHBsYWNlIHRoZSBsaW5rIHBvaW50cyB0byBpbnN0ZWFkLgorIyBUaGlzIGV4cGxhaW5zIHRoZSBvcmRlciBvZiAibGluayBiZWZvcmUgb2JqZWN0IiBhcyBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgd2hlcmUKKyMgYSBsaW5rIHdpbGwgYmUgY3JlYXRlZCBhdCAvdmFyL3Rlc3QgcG9pbnRpbmcgdG8gL3RtcC90ZXN0ZmlsZSBhbmQgZHVlIHRvIHRoaXMKKyMgbGluayB0aGUgZmlsZSBkZWZpbmVkIGFzIC92YXIvdGVzdCB3aWxsIGFjdHVhbGx5IGJlIGNyZWF0ZWQgYXMgL3RtcC90ZXN0ZmlsZS4KK2Qgcm9vdCByb290IDE3NzcgL3J1bi9sb2NrIG5vbmUKK2Qgcm9vdCByb290IDA3NTUgL3Zhci92b2xhdGlsZS9sb2cgbm9uZQorZCByb290IHJvb3QgMTc3NyAvdmFyL3ZvbGF0aWxlL3RtcCBub25lCitsIHJvb3Qgcm9vdCAxNzc3IC92YXIvbG9jayAvcnVuL2xvY2sKK2wgcm9vdCByb290IDA3NTUgL3Zhci9sb2cgL3Zhci92b2xhdGlsZS9sb2cKK2wgcm9vdCByb290IDA3NTUgL3Zhci9ydW4gL3J1bgorbCByb290IHJvb3QgMTc3NyAvdmFyL3RtcCAvdmFyL3ZvbGF0aWxlL3RtcAorbCByb290IHJvb3QgMTc3NyAvdG1wIC92YXIvdG1wCitkIHJvb3Qgcm9vdCAwNzU1IC92YXIvbG9jay9zdWJzeXMgbm9uZQorZiByb290IHJvb3QgMDY2NCAvdmFyL2xvZy93dG1wIG5vbmUKK2Ygcm9vdCByb290IDA2NjQgL3Zhci9ydW4vdXRtcCBub25lCitsIHJvb3Qgcm9vdCAwNjQ0IC9ldGMvcmVzb2x2LmNvbmYgL3Zhci9ydW4vcmVzb2x2LmNvbmYKK2Ygcm9vdCByb290IDA2NDQgL3Zhci9ydW4vcmVzb2x2LmNvbmYgbm9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0c18xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTBkZTZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0c18xLjAuYmIKQEAgLTAsMCArMSwxODIgQEAKK1NVTU1BUlkgPSAiU3lzViBpbml0IHNjcmlwdHMiCitERVNDUklQVElPTiA9ICJJbml0c2NyaXB0cyBwcm92aWRlIHRoZSBiYXNpYyBzeXN0ZW0gc3RhcnR1cCBpbml0aWFsaXphdGlvbiBzY3JpcHRzIGZvciB0aGUgc3lzdGVtLiAgVGhlc2Ugc2NyaXB0cyBpbmNsdWRlIGFjdGlvbnMgc3VjaCBhcyBmaWxlc3lzdGVtIG1vdW50aW5nLCBmc2NrLCBSVEMgbWFuaXB1bGF0aW9uIGFuZCBvdGhlciBhY3Rpb25zIHJvdXRpbmVseSBwZXJmb3JtZWQgYXQgc3lzdGVtIHN0YXJ0dXAuICBJbiBhZGRpdGlvbiwgdGhlIHNjcmlwdHMgYXJlIGFsc28gdXNlZCBkdXJpbmcgc3lzdGVtIHNodXRkb3duIHRvIHJldmVyc2UgdGhlIGFjdGlvbnMgcGVyZm9ybWVkIGF0IHN0YXJ0dXAuIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorUFIgPSAicjE1NSIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworU1JDX1VSSSA9ICJmaWxlOi8vZnVuY3Rpb25zIFwKKyAgICAgICAgICAgZmlsZTovL2hhbHQgXAorICAgICAgICAgICBmaWxlOi8vdW1vdW50ZnMgXAorICAgICAgICAgICBmaWxlOi8vZGV2cHRzLnNoIFwKKyAgICAgICAgICAgZmlsZTovL2RldnB0cyBcCisgICAgICAgICAgIGZpbGU6Ly9ob3N0bmFtZS5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9tb3VudGFsbC5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9iYW5uZXIuc2ggXAorICAgICAgICAgICBmaWxlOi8vYm9vdG1pc2Muc2ggXAorICAgICAgICAgICBmaWxlOi8vbW91bnRuZnMuc2ggXAorICAgICAgICAgICBmaWxlOi8vcmVib290IFwKKyAgICAgICAgICAgZmlsZTovL2NoZWNrZnMuc2ggXAorICAgICAgICAgICBmaWxlOi8vc2luZ2xlIFwKKyAgICAgICAgICAgZmlsZTovL3NlbmRzaWdzIFwKKyAgICAgICAgICAgZmlsZTovL3VyYW5kb20gXAorICAgICAgICAgICBmaWxlOi8vcm1ub2xvZ2luLnNoIFwKKyAgICAgICAgICAgZmlsZTovL2NoZWNrcm9vdC5zaCBcCisgICAgICAgICAgIGZpbGU6Ly91bW91bnRuZnMuc2ggXAorICAgICAgICAgICBmaWxlOi8vc3lzZnMuc2ggXAorICAgICAgICAgICBmaWxlOi8vcG9wdWxhdGUtdm9sYXRpbGUuc2ggXAorICAgICAgICAgICBmaWxlOi8vcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoIFwKKyAgICAgICAgICAgZmlsZTovL3ZvbGF0aWxlcyBcCisgICAgICAgICAgIGZpbGU6Ly9zYXZlLXJ0Yy5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9HUEx2Mi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kbWVzZy5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9sb2dyb3RhdGUtZG1lc2cuY29uZiBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzZWxpbnV4JywnZmlsZTovL3N1c2hlbGwnLCcnLGQpfSBcCisiCisKK1MgPSAiJHtXT1JLRElSfSIKKworU1JDX1VSSV9hcHBlbmRfYXJtID0gIiBmaWxlOi8vYWxpZ25tZW50LnNoIgorCitLRVJORUxfVkVSU0lPTiA9ICIiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworREVQRU5EU19hcHBlbmQgPSAiIHVwZGF0ZS1yYy5kLW5hdGl2ZSIKK0RFUEVORFNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZScsJycsZCl9IgorCitQQUNLQUdFUyA9KyAiJHtQTn0tZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0gPSAiJHtQTn0tZnVuY3Rpb25zIFwKKyAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzZWxpbnV4JywnYmFzaCcsJycsZCl9IFwKKwkJICIKK0ZJTEVTXyR7UE59LWZ1bmN0aW9ucyA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9mdW5jdGlvbnMqIgorCitBTFRFUk5BVElWRV9QUklPUklUWV8ke1BOfS1mdW5jdGlvbnMgPSAiOTAiCitBTFRFUk5BVElWRV8ke1BOfS1mdW5jdGlvbnMgPSAiZnVuY3Rpb25zIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2Z1bmN0aW9uc10gPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvZnVuY3Rpb25zIgorCitIQUxUQVJHUyA/PSAiLWQgLWYiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwlzZWQgLWkgLWUgInM6U0VEX0hBTFRBUkdTOiR7SEFMVEFSR1N9OmciICR7V09SS0RJUn0vaGFsdAorCXNlZCAtaSAtZSAiczpTRURfSEFMVEFSR1M6JHtIQUxUQVJHU306ZyIgJHtXT1JLRElSfS9yZWJvb3QKK30KKworZG9faW5zdGFsbCAoKSB7CisjCisjIENyZWF0ZSBkaXJlY3RvcmllcyBhbmQgaW5zdGFsbCBkZXZpY2UgaW5kZXBlbmRlbnQgc2NyaXB0cworIworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yY1MuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmMwLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3JjMS5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yYzIuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmMzLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3JjNC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yYzUuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmM2LmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisJIyBIb2xkcyBzdGF0ZSBpbmZvcm1hdGlvbiBwZXJ0YWluaW5nIHRvIHVyYW5kb20KKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi91cmFuZG9tCisKKwlpbnN0YWxsIC1tIDA2NDQgICAgJHtXT1JLRElSfS9mdW5jdGlvbnMJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2Jvb3RtaXNjLnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2NoZWNrcm9vdC5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9oYWx0CQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9ob3N0bmFtZS5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9tb3VudGFsbC5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9tb3VudG5mcy5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9yZWJvb3QJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3Jtbm9sb2dpbi5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9zZW5kc2lncwkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vc2luZ2xlCQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS91bW91bnRuZnMuc2gJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vdXJhbmRvbQkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJc2VkIC1pICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC91cmFuZG9tIC1lICdzLC92YXIvLCR7bG9jYWxzdGF0ZWRpcn0vLGc7cywvZXRjLywke3N5c2NvbmZkaXJ9LyxnJworCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2RldnB0cy5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9kZXZwdHMJCSR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9zeXNmcy5zaAkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vcG9wdWxhdGUtdm9sYXRpbGUuc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3NhdmUtcnRjLnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDY0NCAgICAke1dPUktESVJ9L3ZvbGF0aWxlcwkJJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMvMDBfY29yZQorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2RtZXNnLnNoCQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA2NDQgICAgJHtXT1JLRElSfS9sb2dyb3RhdGUtZG1lc2cuY29uZiAke0R9JHtzeXNjb25mZGlyfS8KKworCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJhcm0iIF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYWxpZ25tZW50LnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWZpCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc2VsaW51eCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfS8ke2Jhc2Vfc2JpbmRpcn0KKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vc3VzaGVsbCAke0R9LyR7YmFzZV9zYmluZGlyfQorCWZpCisjCisjIEluc3RhbGwgZGV2aWNlIGRlcGVuZGVudCBzY3JpcHRzCisjCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYmFubmVyLnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9iYW5uZXIuc2gKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS91bW91bnRmcwkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdW1vdW50ZnMKKyMKKyMgQ3JlYXRlIHJ1bmxldmVsIGxpbmtzCisjCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBybW5vbG9naW4uc2ggc3RhcnQgOTkgMiAzIDQgNSAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBzZW5kc2lncyBzdGFydCAyMCAwIDYgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gdXJhbmRvbSBzdGFydCAzMCBTIDAgNiAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSB1bW91bnRuZnMuc2ggc3RhcnQgMzEgMCAxIDYgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gdW1vdW50ZnMgc3RhcnQgNDAgMCA2IC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IHJlYm9vdCBzdGFydCA5MCA2IC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IGhhbHQgc3RhcnQgOTAgMCAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBzYXZlLXJ0Yy5zaCBzdGFydCAyNSAwIDYgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gYmFubmVyLnNoIHN0YXJ0IDAyIFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gY2hlY2tyb290LnNoIHN0YXJ0IDA2IFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gbW91bnRhbGwuc2ggc3RhcnQgMDMgUyAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBob3N0bmFtZS5zaCBzdGFydCAzOSBTIC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IG1vdW50bmZzLnNoIHN0YXJ0IDE1IDIgMyA0IDUgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gYm9vdG1pc2Muc2ggc3RhcnQgNTUgUyAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBzeXNmcy5zaCBzdGFydCAwMiBTIC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IHBvcHVsYXRlLXZvbGF0aWxlLnNoIHN0YXJ0IDM3IFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoIHN0YXJ0IDI5IFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gZGV2cHRzLnNoIHN0YXJ0IDM4IFMgLgorCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJhcm0iIF07IHRoZW4KKwkgICAgICAgIHVwZGF0ZS1yYy5kIC1yICR7RH0gYWxpZ25tZW50LnNoIHN0YXJ0IDA2IFMgLgorCWZpCisJIyBXZSB3aXNoIHRvIGhhdmUgL3Zhci9sb2cgcmVhZHkgYXQgdGhpcyBzdGFnZSBzbyBleGVjdXRlIHRoaXMgYWZ0ZXIKKwkjIHBvcHVsYXRlLXZvbGF0aWxlLnNoCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBkbWVzZy5zaCBzdGFydCAzOCBTIC4KK30KKworTUFTS0VEX1NDUklQVFMgPSAiIFwKKyAgYmFubmVyIFwKKyAgYm9vdG1pc2MgXAorICBjaGVja2ZzIFwKKyAgY2hlY2tyb290IFwKKyAgZGV2cHRzIFwKKyAgZG1lc2cgXAorICBob3N0bmFtZSBcCisgIG1vdW50YWxsIFwKKyAgbW91bnRuZnMgXAorICBwb3B1bGF0ZS12b2xhdGlsZSBcCisgIHJlYWQtb25seS1yb290ZnMtaG9vayBcCisgIHJtbm9sb2dpbiBcCisgIHN5c2ZzIFwKKyAgdXJhbmRvbSIKKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCQlPUFRTPSItLXJvb3Q9JEQiCisJCWZpCisJCWZvciBTRVJWSUNFIGluICR7TUFTS0VEX1NDUklQVFN9OyBkbworCQkJc3lzdGVtY3RsICRPUFRTIG1hc2sgJFNFUlZJQ0Uuc2VydmljZQorCQlkb25lCisJZmkKKworICAgICMgRGVsZXRlIGFueSBvbGQgdm9sYXRpbGUgY2FjaGUgc2NyaXB0LCBhcyBkaXJlY3RvcmllcyBtYXkgaGF2ZSBtb3ZlZAorICAgIGlmIFsgLXogIiREIiBdOyB0aGVuCisgICAgICAgIHJtIC1mICIvZXRjL3ZvbGF0aWxlLmNhY2hlIgorICAgIGZpCit9CisKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvY2hlY2tyb290LnNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9qcGVnL2pwZWdfOWEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2pwZWcvanBlZ185YS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTJlNjVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9qcGVnL2pwZWdfOWEuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJsaWJqcGVnIGlzIGEgbGlicmFyeSBmb3IgaGFuZGxpbmcgdGhlIEpQRUcgKEpGSUYpIGltYWdlIGZvcm1hdCIKK0RFU0NSSVBUSU9OID0gImxpYmpwZWcgY29udGFpbnMgYSBsaWJyYXJ5IGZvciBoYW5kbGluZyB0aGUgSlBFRyAoSkZJRikgaW1hZ2UgZm9ybWF0LCBhcyB3ZWxsIGFzIHJlbGF0ZWQgcHJvZ3JhbXMgZm9yIGFjY2Vzc2luZyB0aGUgbGlianBlZyBmdW5jdGlvbnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pamcub3JnLyIKKworTElDRU5TRSA9IkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTttZDU9ZWE5M2E4YTJmZWQxMDEwNmI2M2JjMjE2NzllZGFjYjkiCisKK1NFQ1RJT04gPSAibGlicyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmlqZy5vcmcvZmlsZXMvanBlZ3NyYy52JHtQVn0udGFyLmd6IFwKKwkgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjMzNTM5OTJhZWNhZWUxODA1ZWY0MTA5YWFkZDQzM2U3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNhNzUzZWE0OGQ5MTc5NDVkZDU0YTJkOTdkZTM4OGFhMDZjYTJlYjEwNjZjYmZkYzY2NTIwMzYzNDlmZTA1YTciCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1BBQ0tBR0VTID0rIAkJImpwZWctdG9vbHMgIgorREVTQ1JJUFRJT05fanBlZy10b29scyA9ICJUaGUganBlZy10b29scyBwYWNrYWdlIGluY2x1ZGVzIHRoZSBjbGllbnQgcHJvZ3JhbXMgZm9yIGFjY2VzcyBsaWJqcGVnIGZ1bmN0aW9uYWxpdHkuICBUaGVzZSB0b29scyBhbGxvdyBmb3IgdGhlIGNvbXByZXNzaW9uLCBkZWNvbXByZXNzaW9uLCB0cmFuc2Zvcm1hdGlvbiBhbmQgZGlzcGxheSBvZiBKUEVHIGZpbGVzLiIKK0ZJTEVTX2pwZWctdG9vbHMgPSAJIiR7YmluZGlyfS8qIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworcGtnX3Bvc3RpbnN0XyR7UE59X2xpbnV4c3RkYmFzZSAoKSB7CisgICAgaWYgWyAhIC1lICREJHtsaWJkaXJ9L2xpYmpwZWcuc28uNjIgXTsgdGhlbgorICAgICAgICBKUEVHPWBmaW5kICREJHtsaWJkaXJ9IC10eXBlIGYgLW5hbWUgbGlianBlZy5zby5cKi5cKi5cKmAKKyAgICAgICAgbG4gLXNmIGBiYXNlbmFtZSAkSlBFR2AgJEQke2xpYmRpcn0vbGlianBlZy5zby42MgorICAgIGZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmQvMDAwMy1Pbmx5LWlubHVjbHVkZS1rZXJuZWwtaGVhZGVycy13aXRoLWdsaWJjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkLzAwMDMtT25seS1pbmx1Y2x1ZGUta2VybmVsLWhlYWRlcnMtd2l0aC1nbGliYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmZjYjBjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkLzAwMDMtT25seS1pbmx1Y2x1ZGUta2VybmVsLWhlYWRlcnMtd2l0aC1nbGliYy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDNjNWM3YWNjN2VmODc0YjkxOWIyNjU4M2QzODkyZTIxYjkwNzgzM2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOYXRhbmFlbCBDb3BhIDxuY29wYUBhbHBpbmVsaW51eC5vcmc+CitEYXRlOiBXZWQsIDIwIEF1ZyAyMDE0IDA5OjAwOjAzICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMy80XSBPbmx5IGlubHVjbHVkZSBrZXJuZWwgaGVhZGVycyB3aXRoIGdsaWJjCisKK1RoaXMgZml4ZXMgY29tcGlsZSBlcnJvcnMgd2l0aCBtdXNsIGxpYmMKKworU2lnbmVkLW9mZi1ieTogTmF0YW5hZWwgQ29wYSA8bmNvcGFAYWxwaW5lbGludXgub3JnPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBzcmMvcmVzaXplY29ucy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3Jlc2l6ZWNvbnMuYyBiL3NyYy9yZXNpemVjb25zLmMKK2luZGV4IDVmODQ4NDUuLjY5MWRmY2MgMTAwNjQ0CistLS0gYS9zcmMvcmVzaXplY29ucy5jCisrKysgYi9zcmMvcmVzaXplY29ucy5jCitAQCAtODAsNyArODAsNyBAQAorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyAjaWYgKF9fR05VX0xJQlJBUllfXyA+PSA2KQorICNpbmNsdWRlIDxzeXMvcGVybS5oPgorLSNlbHNlCisrI2VsaWYgZGVmaW5lZChfX0dMSUJDX18pCisgI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisgI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KKyAjZW5kaWYKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkL3VjbGliYy1zdGRhcmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmQvdWNsaWJjLXN0ZGFyZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTdmMzI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkL3VjbGliYy1zdGRhcmcucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorSW4gZmlsZSBpbmNsdWRlZCBmcm9tIGtleW1hcC5oOjU6MCwKKyAgICAgICAgICAgICAgICAgZnJvbSBrc3ltcy5jOjY6CisuL2tleW1hcC9jb21tb24uaDo2NTozODogZXJyb3I6IHVua25vd24gdHlwZSBuYW1lICd2YV9saXN0JworICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL2tleW1hcC9jb21tb24uaDo2NjozOiBlcnJvcjogZXhwZWN0ZWQgJzsnLCAnLCcgb3IgJyknIGJlZm9yZSAnY29uc3QnCisgICBjb25zdCB2b2lkICpkYXRhKTsKKyAgIF4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorSW5kZXg6IGtiZC0yLjAuMC9zcmMvbGlia2V5bWFwL2NvbnRleHRQLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrYmQtMi4wLjAub3JpZy9zcmMvbGlia2V5bWFwL2NvbnRleHRQLmgJMjAxMy0wOC0xMyAwNjo0NjoyMy4wMDAwMDAwMDAgLTA3MDAKKysrKyBrYmQtMi4wLjAvc3JjL2xpYmtleW1hcC9jb250ZXh0UC5oCTIwMTMtMTEtMDUgMjI6MzM6NDkuMjAwNTI4MjI2IC0wODAwCitAQCAtMiw3ICsyLDcgQEAKKyAjZGVmaW5lIExLX0NPTlRFWFRQX0gKKyAKKyAjaW5jbHVkZSAia2V5bWFwLmgiCistCisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorIC8qKgorICAqIEBicmllZiBDb3B5IG9mIHN0cnVjdCBrYmRpYWNydWMuCisgICovCitJbmRleDoga2JkLTIuMC4wL3NyYy9saWJrZXltYXAva2V5bWFwL2NvbW1vbi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2JkLTIuMC4wLm9yaWcvc3JjL2xpYmtleW1hcC9rZXltYXAvY29tbW9uLmgJMjAxMy0wOC0xMyAwNjo0NjoyMy4wMDAwMDAwMDAgLTA3MDAKKysrKyBrYmQtMi4wLjAvc3JjL2xpYmtleW1hcC9rZXltYXAvY29tbW9uLmgJMjAxMy0xMS0wNSAyMjozMzo1OS45NjQ1Mjg0MzggLTA4MDAKK0BAIC02LDYgKzYsNyBAQAorICAqLworIAorICNpbmNsdWRlIDxrZXltYXAvY29udGV4dC5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyAKKyAvKiogSW5pdGlhbGl6ZXMgdGhlIHN0cnVjdHVyZXMgbmVjZXNzYXJ5IHRvIHJlYWQgYW5kL29yIHBhcnNlIGtleW1hcC4KKyAgKgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkXzIuMC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkXzIuMC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNmRjN2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmRfMi4wLjIuYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJLZXl0YWJsZSBmaWxlcyBhbmQga2V5Ym9hcmQgdXRpbGl0aWVzIgorIyBldmVyeXRoaW5nIG1pbnVzIGNvbnNvbGUtZm9udHMgaXMgR1BMdjIrCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE1ZmNjMzYxMjFkOTNlMWY2OWQ5NmEzMTMwNzhjOGI1IgorREVQRU5EUyA9ICJsaWJjaGVjayIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwdGVzdCBwa2djb25maWcKKworUlJFUExBQ0VTXyR7UE59ID0gImNvbnNvbGUtdG9vbHMiCitSUFJPVklERVNfJHtQTn0gPSAiY29uc29sZS10b29scyIKK1JDT05GTElDVFNfJHtQTn0gPSAiY29uc29sZS10b29scyIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzLyR7QlBOfS8ke0JQfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vdWNsaWJjLXN0ZGFyZy5wYXRjaCBcCisJICAgZmlsZTovLzAwMDMtT25seS1pbmx1Y2x1ZGUta2VybmVsLWhlYWRlcnMtd2l0aC1nbGliYy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODc0NzVlYjc4YjFkNmU2YWIwNjY4NmRkMzIzYWQ0YmEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWRmZGRhYmY5NjAxMmUzMjljNGJlYmI5NmEyMWFlZWY3YzM4NzJmNjI0ZTk2ZTgxNTZiYTU0MmI4MmFlYjkxMiIKKworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbcGFtXSA9ICItLWVuYWJsZS12bG9jaywgLS1kaXNhYmxlLXZsb2NrLCBsaWJwYW0sIgorCitQQUNLQUdFUyArPSAiJHtQTn0tY29uc29sZWZvbnRzICR7UE59LWtleW1hcHMgJHtQTn0tdW5pbWFwcyAke1BOfS1jb25zb2xldHJhbnMiCisKK0ZJTEVTXyR7UE59LWNvbnNvbGVmb250cyA9ICIke2RhdGFkaXJ9L2NvbnNvbGVmb250cyIKK0ZJTEVTXyR7UE59LWNvbnNvbGV0cmFucyA9ICIke2RhdGFkaXJ9L2NvbnNvbGV0cmFucyIKK0ZJTEVTXyR7UE59LWtleW1hcHMgPSAiJHtkYXRhZGlyfS9rZXltYXBzIgorRklMRVNfJHtQTn0tdW5pbWFwcyA9ICIke2RhdGFkaXJ9L3VuaW1hcHMiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJjaHZ0IGRlYWxsb2N2dCBmZ2NvbnNvbGUgb3BlbnZ0IgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGliY2dyb3VwL2xpYmNncm91cF8wLjQxLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJjZ3JvdXAvbGliY2dyb3VwXzAuNDEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJiYTFkNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGliY2dyb3VwL2xpYmNncm91cF8wLjQxLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiTGludXggY29udHJvbCBncm91cCBhYnN0cmFjdGlvbiBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAibGliY2dyb3VwIGlzIGEgbGlicmFyeSB0aGF0IGFic3RyYWN0cyB0aGUgY29udHJvbCBncm91cCBmaWxlIHN5c3RlbSBcCitpbiBMaW51eC4gQ29udHJvbCBncm91cHMgYWxsb3cgeW91IHRvIGxpbWl0LCBhY2NvdW50IGFuZCBpc29sYXRlIHJlc291cmNlIHVzYWdlIFwKKyhDUFUsIG1lbW9yeSwgZGlzayBJL08sIGV0Yy4pIG9mIGdyb3VwcyBvZiBwcm9jZXNzZXMuIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworREVQRU5EUyA9ICJiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9saWJjZy8ke0JQTn0vdjAuNDEvJHtCUE59LSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZGVhOWQ1MGI4YTViNzNmZjBiZjFjZGNiMjEwZjYzZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlNGUzOGJkYzdlZjcwNjQ1Y2UzMzc0MGRkY2NhMDUxMjQ4ZDU2YjUzMjgzYzBkYzZkNDA0ZTE3NzA2ZjZmYjUxIgorCitFWFRSQV9PRUNPTkYgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnLS1lbmFibGUtcGFtLW1vZHVsZS1kaXI9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkgLS1lbmFibGUtcGFtPXllcycsICctLWVuYWJsZS1wYW09bm8nLCBkKX0iCisKK1BBQ0tBR0VTID0rICJjZ3JvdXBzLXBhbS1wbHVnaW4iCitGSUxFU19jZ3JvdXBzLXBhbS1wbHVnaW4gPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2Nncm91cC5zbyoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5sYSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBNb3ZpbmcgbGliY2dyb3VwIHRvIGJhc2VfbGliZGlyCisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCW1rZGlyIC1wICR7RH0vJHtiYXNlX2xpYmRpcn0vCisJCW12IC1mICR7RH0ke2xpYmRpcn0vbGliY2dyb3VwLnNvLiogJHtEfSR7YmFzZV9saWJkaXJ9LworCQlyZWxfbGliX3ByZWZpeD1gZWNobyAke2xpYmRpcn0gfCBzZWQgJ3MsXCheL1x8XClbXi9dW14vXSosLi4sZydgCisJCWxuIC1zZiAke3JlbF9saWJfcHJlZml4fSR7YmFzZV9saWJkaXJ9L2xpYmNncm91cC5zby4xICR7RH0ke2xpYmRpcn0vbGliY2dyb3VwLnNvCisJZmkKKwkjIHBhbSBtb2R1bGVzIGluICR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5LyBzaG91bGQgYmUgYmluYXJ5IC5zbyBmaWxlcywgbm90IHN5bWxpbmtzLgorCWlmIFsgLWYgJHtEfSR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5L3BhbV9jZ3JvdXAuc28uMC4wLjAgXTsgdGhlbgorCQltdiAtZiAke0R9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2Nncm91cC5zby4wLjAuMCAke0R9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2Nncm91cC5zbworCQlybSAtZiAke0R9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2Nncm91cC5zby4qCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMzYzM3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIuaW5jCkBAIC0wLDAgKzEsNzggQEAKK1NVTU1BUlkgPSAiWE1MIEMgUGFyc2VyIExpYnJhcnkgYW5kIFRvb2xraXQiCitERVNDUklQVElPTiA9ICJUaGUgWE1MIFBhcnNlciBMaWJyYXJ5IGFsbG93cyBmb3IgbWFuaXB1bGF0aW9uIG9mIFhNTCBmaWxlcy4gIExpYnhtbDIgZXhwb3J0cyBQdXNoIGFuZCBQdWxsIHR5cGUgcGFyc2VyIGludGVyZmFjZXMgZm9yIGJvdGggWE1MIGFuZCBIVE1MLiAgSXQgY2FuIGRvIERURCB2YWxpZGF0aW9uIGF0IHBhcnNlIHRpbWUsIG9uIGEgcGFyc2VkIGRvY3VtZW50IGluc3RhbmNlIG9yIHdpdGggYW4gYXJiaXRyYXJ5IERURC4gIExpYnhtbDIgaW5jbHVkZXMgY29tcGxldGUgWFBhdGgsIFhQb2ludGVyIGFuZCBYaW5jbHVkZSBpbXBsZW1lbnRhdGlvbnMuICBJdCBhbHNvIGhhcyBhIFNBWCBsaWtlIGludGVyZmFjZSwgd2hpY2ggaXMgZGVzaWduZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIEV4cGF0LiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueG1sc29mdC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2J1Z2xpc3QuY2dpP3Byb2R1Y3Q9bGlieG1sMiIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ29weXJpZ2h0O21kNT0yMDQ0NDE3ZTJlNTAwNmI2NWE4YjkwNjdiNjgzZmNmMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9oYXNoLmM7YmVnaW5saW5lPTY7ZW5kbGluZT0xNTttZDU9OTZmNzI5NjYwNWVhZTgwNzY3MGZiMDg5NDc4Mjk5NjkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlzdC5jO2JlZ2lubGluZT00O2VuZGxpbmU9MTM7bWQ1PWNkYmZhM2RlZTUxYzA5OWVkYjA0ZTM5Zjc2MmVlOTA3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3RyaW8uYztiZWdpbmxpbmU9NTtlbmRsaW5lPTE0O21kNT02YzAyNTc1M2M4NmQ5NTg3MjJlYzc2ZTk0Y2FlOTMyZSIKKworREVQRU5EUyA9KyAiemxpYiIKKworU1JDX1VSSSA9ICJmdHA6Ly94bWxzb2Z0Lm9yZy9saWJ4bWwyL2xpYnhtbDItJHtQVn0udGFyLmd6O25hbWU9bGlidGFyIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnhtbC02NGJpdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbnNpZGVjbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW50ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJ4bWwyLUNWRS0yMDE0LTAxOTEtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3B5dGhvbi1zaXRlcGFja2FnZXMtZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnhtbC1tNC11c2UtcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5hYy1maXgtY3Jvc3MtY29tcGlsaW5nLXdhcm5pbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1DVkUtMjAxNS0xODE5LUVuZm9yY2UtdGhlLXJlYWRlci10by1ydW4taW4tY29uc3RhbnQtLnBhdGNoIFwKKyAgICAgICAgICAiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0veG1sMi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBiaW5jb25maWctZGlzYWJsZWQgcHl0aG9ubmF0aXZlIHB0ZXN0CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJweXRob24tY29yZSIKKworUkRFUEVORFNfJHtQTn0tcHl0aG9uICs9ICJweXRob24tY29yZSIKKworUkRFUEVORFNfJHtQTn0tcHRlc3RfYXBwZW5kX2xpYmMtZ2xpYmMgKz0gImdsaWJjLWdjb252LWViY2RpYy11cyBnbGliYy1nY29udi1pYm0xMTQxIgorCisjIFdlIGRvbid0IERFUEVORCBvbiBiaW51dGlscyBmb3IgYW5zaWRlY2wuaCBzbyBlbnN1cmUgd2UgZG9uJ3QgdXNlIHRoZSBoZWFkZXIKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlzZWQgLWkgLWUgJy8uKmFuc2lkZWNsLmguKi9kJyAke1N9L2NvbmZpZ3VyZS5hYworfQorCitleHBvcnQgUFlUSE9OX1NJVEVfUEFDS0FHRVM9IiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IgorCitQQUNLQUdFQ09ORklHID8/PSAicHl0aG9uIgorCitQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLS13aXRoLXB5dGhvbj0ke1BZVEhPTn0sLS13aXRob3V0LXB5dGhvbixweXRob24iCisjIFdBUk5JTkc6IHpsaWIgaXMgcmVxdWlyZSBmb3IgUlBNIHVzZQorRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1kZWJ1ZyAtLXdpdGhvdXQtbGVnYWN5IC0td2l0aC1jYXRhbG9nIC0td2l0aG91dC1kb2Nib29rIC0td2l0aC1jMTRuIC0td2l0aG91dC1sem1hIC0td2l0aC1mZXhjZXB0aW9ucyIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS13aXRob3V0LWxlZ2FjeSAtLXdpdGhvdXQtZG9jYm9vayAtLXdpdGgtYzE0biAtLXdpdGhvdXQtbHptYSAtLXdpdGgtemxpYiIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiLS13aXRob3V0LWxlZ2FjeSAtLXdpdGhvdXQtZG9jYm9vayAtLXdpdGgtYzE0biAtLXdpdGhvdXQtbHptYSAtLXdpdGgtemxpYiIKK0VYVFJBX09FQ09ORl9saW51eHN0ZGJhc2UgPSAiLS13aXRoLWRlYnVnIC0td2l0aC1sZWdhY3kgLS13aXRoLWRvY2Jvb2sgLS13aXRoLWMxNG4gLS13aXRob3V0LWx6bWEgLS13aXRoLXpsaWIiCisKKyMgcmVxdWlyZWQgZm9yIHB5dGhvbmcgYmluZGluZworZXhwb3J0IEhPU1RfU1lTCitleHBvcnQgQlVJTERfU1lTCitleHBvcnQgU1RBR0lOR19MSUJESVIKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorCitleHBvcnQgTERGTEFHUyArPSAiLWxkbCIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgICMgYXV0b25hbWVyIHdvdWxkIGNhbGwgdGhpcyBsaWJ4bWwyLTIsIGJ1dCB3ZSBkb24ndCB3YW50IHRoYXQKKyAgICBpZiBkLmdldFZhcignREVCSUFOX05BTUVTJywgVHJ1ZSk6CisgICAgICAgIGQuc2V0VmFyKCdQS0dfbGlieG1sMicsICcke01MUFJFRklYfWxpYnhtbDInKQorfQorCitQQUNLQUdFUyArPSAiJHtQTn0tdXRpbHMgJHtQTn0tcHl0aG9uIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKi5hIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0veG1sMkNvbmYuc2ggJHtsaWJkaXJ9L2NtYWtlLyoiCitGSUxFU18ke1BOfS11dGlscyArPSAiJHtiaW5kaXJ9LyoiCitGSUxFU18ke1BOfS1weXRob24gKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IgorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKyAgY3AgLXIgJHtXT1JLRElSfS94bWxjb25mICR7RH0ke1BURVNUX1BBVEh9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvMDAwMS1DVkUtMjAxNS0xODE5LUVuZm9yY2UtdGhlLXJlYWRlci10by1ydW4taW4tY29uc3RhbnQtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi8wMDAxLUNWRS0yMDE1LTE4MTktRW5mb3JjZS10aGUtcmVhZGVyLXRvLXJ1bi1pbi1jb25zdGFudC0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZkNThmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvMDAwMS1DVkUtMjAxNS0xODE5LUVuZm9yY2UtdGhlLXJlYWRlci10by1ydW4taW4tY29uc3RhbnQtLnBhdGNoCkBAIC0wLDAgKzEsMTgxIEBACitGcm9tIDIxM2YxZmUwZDc2ZDMwZWFlZDZlNTg1MzA1N2RlZmM0M2U2ZGYyYzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEYW5pZWwgVmVpbGxhcmQgPHZlaWxsYXJkQHJlZGhhdC5jb20+CitEYXRlOiBUdWUsIDE0IEFwciAyMDE1IDE3OjQxOjQ4ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIENWRS0yMDE1LTE4MTkgRW5mb3JjZSB0aGUgcmVhZGVyIHRvIHJ1biBpbiBjb25zdGFudCBtZW1vcnkKKworT25lIG9mIHRoZSBvcGVyYXRpb24gb24gdGhlIHJlYWRlciBjb3VsZCByZXNvbHZlIGVudGl0aWVzCitsZWFkaW5nIHRvIHRoZSBjbGFzc2ljIGV4cGFuc2lvbiBpc3N1ZS4gTWFrZSBzdXJlIHRoZQorYnVmZmVyIHVzZWQgZm9yIHhtbHJlYWRlciBvcGVyYXRpb24gaXMgYm91bmRlZC4KK0ludHJvZHVjZSBhIG5ldyBhbGxvY2F0aW9uIHR5cGUgZm9yIHRoZSBidWZmZXJzIGZvciB0aGlzIGVmZmVjdC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDxZdWUuVGFvQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGJ1Zi5jICAgICAgICAgICAgICAgICB8ICAgNDMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQorIGluY2x1ZGUvbGlieG1sL3RyZWUuaCB8ICAgIDMgKystCisgeG1scmVhZGVyLmMgICAgICAgICAgIHwgICAyMCArKysrKysrKysrKysrKysrKysrLQorIDMgZmlsZXMgY2hhbmdlZCwgNjMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2J1Zi5jIGIvYnVmLmMKK2luZGV4IDZlZmM3YjYuLjA3OTIyZmYgMTAwNjQ0CistLS0gYS9idWYuYworKysrIGIvYnVmLmMKK0BAIC0yNyw2ICsyNyw3IEBACisgI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CisgI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+CisgI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CisrI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4gLyogZm9yIFhNTF9NQVhfVEVYVF9MRU5HVEggKi8KKyAjaW5jbHVkZSAiYnVmLmgiCisgCisgI2RlZmluZSBXSVRIX0JVRkZFUl9DT01QQVQKK0BAIC0yOTksNyArMzAwLDggQEAgeG1sQnVmU2V0QWxsb2NhdGlvblNjaGVtZSh4bWxCdWZQdHIgYnVmLAorICAgICBpZiAoKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0RPVUJMRUlUKSB8fAorICAgICAgICAgKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0VYQUNUKSB8fAorICAgICAgICAgKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0hZQlJJRCkgfHwKKy0gICAgICAgIChzY2hlbWUgPT0gWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUpKSB7CisrICAgICAgICAoc2NoZW1lID09IFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFKSB8fAorKwkoc2NoZW1lID09IFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCkpIHsKKyAJYnVmLT5hbGxvYyA9IHNjaGVtZTsKKyAgICAgICAgIGlmIChidWYtPmJ1ZmZlcikKKyAgICAgICAgICAgICBidWYtPmJ1ZmZlci0+YWxsb2MgPSBzY2hlbWU7CitAQCAtNDU4LDYgKzQ2MCwxOCBAQCB4bWxCdWZHcm93SW50ZXJuYWwoeG1sQnVmUHRyIGJ1Ziwgc2l6ZV90IGxlbikgeworICAgICBzaXplID0gYnVmLT51c2UgKyBsZW4gKyAxMDA7CisgI2VuZGlmCisgCisrICAgIGlmIChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCkgeworKyAgICAgICAgLyoKKysJICogVXNlZCB0byBwcm92aWRlIHBhcnNpbmcgbGltaXRzCisrCSAqLworKyAgICAgICAgaWYgKChidWYtPnVzZSArIGxlbiA+PSBYTUxfTUFYX1RFWFRfTEVOR1RIKSB8fAorKwkgICAgKGJ1Zi0+c2l6ZSA+PSBYTUxfTUFYX1RFWFRfTEVOR1RIKSkgeworKwkgICAgeG1sQnVmTWVtb3J5RXJyb3IoYnVmLCAiYnVmZmVyIGVycm9yOiB0ZXh0IHRvbyBsb25nXG4iKTsKKysJICAgIHJldHVybigwKTsKKysJfQorKwlpZiAoc2l6ZSA+PSBYTUxfTUFYX1RFWFRfTEVOR1RIKQorKwkgICAgc2l6ZSA9IFhNTF9NQVhfVEVYVF9MRU5HVEg7CisrICAgIH0KKyAgICAgaWYgKChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU8pICYmIChidWYtPmNvbnRlbnRJTyAhPSBOVUxMKSkgeworICAgICAgICAgc2l6ZV90IHN0YXJ0X2J1ZiA9IGJ1Zi0+Y29udGVudCAtIGJ1Zi0+Y29udGVudElPOworIAorQEAgLTczOSw2ICs3NTMsMTUgQEAgeG1sQnVmUmVzaXplKHhtbEJ1ZlB0ciBidWYsIHNpemVfdCBzaXplKQorICAgICBDSEVDS19DT01QQVQoYnVmKQorIAorICAgICBpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSkgcmV0dXJuKDApOworKyAgICBpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0JPVU5ERUQpIHsKKysgICAgICAgIC8qCisrCSAqIFVzZWQgdG8gcHJvdmlkZSBwYXJzaW5nIGxpbWl0cworKwkgKi8KKysgICAgICAgIGlmIChzaXplID49IFhNTF9NQVhfVEVYVF9MRU5HVEgpIHsKKysJICAgIHhtbEJ1Zk1lbW9yeUVycm9yKGJ1ZiwgImJ1ZmZlciBlcnJvcjogdGV4dCB0b28gbG9uZ1xuIik7CisrCSAgICByZXR1cm4oMCk7CisrCX0KKysgICAgfQorIAorICAgICAvKiBEb24ndCByZXNpemUgaWYgd2UgZG9uJ3QgaGF2ZSB0byAqLworICAgICBpZiAoc2l6ZSA8IGJ1Zi0+c2l6ZSkKK0BAIC04NjcsNiArODkwLDE1IEBAIHhtbEJ1ZkFkZCh4bWxCdWZQdHIgYnVmLCBjb25zdCB4bWxDaGFyICpzdHIsIGludCBsZW4pIHsKKyAKKyAgICAgbmVlZFNpemUgPSBidWYtPnVzZSArIGxlbiArIDI7CisgICAgIGlmIChuZWVkU2l6ZSA+IGJ1Zi0+c2l6ZSl7CisrCWlmIChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCkgeworKwkgICAgLyoKKysJICAgICAqIFVzZWQgdG8gcHJvdmlkZSBwYXJzaW5nIGxpbWl0cworKwkgICAgICovCisrCSAgICBpZiAobmVlZFNpemUgPj0gWE1MX01BWF9URVhUX0xFTkdUSCkgeworKwkJeG1sQnVmTWVtb3J5RXJyb3IoYnVmLCAiYnVmZmVyIGVycm9yOiB0ZXh0IHRvbyBsb25nXG4iKTsKKysJCXJldHVybigtMSk7CisrCSAgICB9CisrCX0KKyAgICAgICAgIGlmICgheG1sQnVmUmVzaXplKGJ1ZiwgbmVlZFNpemUpKXsKKyAJICAgIHhtbEJ1Zk1lbW9yeUVycm9yKGJ1ZiwgImdyb3dpbmcgYnVmZmVyIik7CisgICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJfTk9fTUVNT1JZOworQEAgLTkzOCw2ICs5NzAsMTUgQEAgeG1sQnVmQWRkSGVhZCh4bWxCdWZQdHIgYnVmLCBjb25zdCB4bWxDaGFyICpzdHIsIGludCBsZW4pIHsKKyAgICAgfQorICAgICBuZWVkU2l6ZSA9IGJ1Zi0+dXNlICsgbGVuICsgMjsKKyAgICAgaWYgKG5lZWRTaXplID4gYnVmLT5zaXplKXsKKysJaWYgKGJ1Zi0+YWxsb2MgPT0gWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEKSB7CisrCSAgICAvKgorKwkgICAgICogVXNlZCB0byBwcm92aWRlIHBhcnNpbmcgbGltaXRzCisrCSAgICAgKi8KKysJICAgIGlmIChuZWVkU2l6ZSA+PSBYTUxfTUFYX1RFWFRfTEVOR1RIKSB7CisrCQl4bWxCdWZNZW1vcnlFcnJvcihidWYsICJidWZmZXIgZXJyb3I6IHRleHQgdG9vIGxvbmdcbiIpOworKwkJcmV0dXJuKC0xKTsKKysJICAgIH0KKysJfQorICAgICAgICAgaWYgKCF4bWxCdWZSZXNpemUoYnVmLCBuZWVkU2l6ZSkpeworIAkgICAgeG1sQnVmTWVtb3J5RXJyb3IoYnVmLCAiZ3Jvd2luZyBidWZmZXIiKTsKKyAgICAgICAgICAgICByZXR1cm4gWE1MX0VSUl9OT19NRU1PUlk7CitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGIvaW5jbHVkZS9saWJ4bWwvdHJlZS5oCitpbmRleCAyZjkwNzE3Li40YTliM2JjIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9saWJ4bWwvdHJlZS5oCisrKysgYi9pbmNsdWRlL2xpYnhtbC90cmVlLmgKK0BAIC03Niw3ICs3Niw4IEBAIHR5cGVkZWYgZW51bSB7CisgICAgIFhNTF9CVUZGRVJfQUxMT0NfRVhBQ1QsCS8qIGdyb3cgb25seSB0byB0aGUgbWluaW1hbCBzaXplICovCisgICAgIFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFLCAvKiBpbW11dGFibGUgYnVmZmVyICovCisgICAgIFhNTF9CVUZGRVJfQUxMT0NfSU8sCS8qIHNwZWNpYWwgYWxsb2NhdGlvbiBzY2hlbWUgdXNlZCBmb3IgSS9PICovCistICAgIFhNTF9CVUZGRVJfQUxMT0NfSFlCUklECS8qIGV4YWN0IHVwIHRvIGEgdGhyZXNob2xkLCBhbmQgZG91YmxlaXQgdGhlcmVhZnRlciAqLworKyAgICBYTUxfQlVGRkVSX0FMTE9DX0hZQlJJRCwJLyogZXhhY3QgdXAgdG8gYSB0aHJlc2hvbGQsIGFuZCBkb3VibGVpdCB0aGVyZWFmdGVyICovCisrICAgIFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRAkvKiBsaW1pdCB0aGUgdXBwZXIgc2l6ZSBvZiB0aGUgYnVmZmVyICovCisgfSB4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lOworIAorIC8qKgorZGlmZiAtLWdpdCBhL3htbHJlYWRlci5jIGIveG1scmVhZGVyLmMKK2luZGV4IGYxOWUxMjMuLjQ3MWU3ZTIgMTAwNjQ0CistLS0gYS94bWxyZWFkZXIuYworKysrIGIveG1scmVhZGVyLmMKK0BAIC0yMDkxLDYgKzIwOTEsOSBAQCB4bWxOZXdUZXh0UmVhZGVyKHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGlucHV0LCBjb25zdCBjaGFyICpVUkkpIHsKKyAJCSJ4bWxOZXdUZXh0UmVhZGVyIDogbWFsbG9jIGZhaWxlZFxuIik7CisgCXJldHVybihOVUxMKTsKKyAgICAgfQorKyAgICAvKiBubyBvcGVyYXRpb24gb24gYSByZWFkZXIgc2hvdWxkIHJlcXVpcmUgYSBodWdlIGJ1ZmZlciAqLworKyAgICB4bWxCdWZTZXRBbGxvY2F0aW9uU2NoZW1lKHJldC0+YnVmZmVyLAorKwkJCSAgICAgIFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCk7CisgICAgIHJldC0+c2F4ID0gKHhtbFNBWEhhbmRsZXIgKikgeG1sTWFsbG9jKHNpemVvZih4bWxTQVhIYW5kbGVyKSk7CisgICAgIGlmIChyZXQtPnNheCA9PSBOVUxMKSB7CisgCXhtbEJ1ZkZyZWUocmV0LT5idWZmZXIpOworQEAgLTM2MTYsNiArMzYxOSw3IEBAIHhtbFRleHRSZWFkZXJDb25zdFZhbHVlKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKSB7CisgCSAgICByZXR1cm4oKCh4bWxOc1B0cikgbm9kZSktPmhyZWYpOworICAgICAgICAgY2FzZSBYTUxfQVRUUklCVVRFX05PREU6eworIAkgICAgeG1sQXR0clB0ciBhdHRyID0gKHhtbEF0dHJQdHIpIG5vZGU7CisrCSAgICBjb25zdCB4bWxDaGFyICpyZXQ7CisgCisgCSAgICBpZiAoKGF0dHItPmNoaWxkcmVuICE9IE5VTEwpICYmCisgCSAgICAgICAgKGF0dHItPmNoaWxkcmVuLT50eXBlID09IFhNTF9URVhUX05PREUpICYmCitAQCAtMzYyOSwxMCArMzYzMywyMSBAQCB4bWxUZXh0UmVhZGVyQ29uc3RWYWx1ZSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieG1sVGV4dFJlYWRlclNldHVwIDogbWFsbG9jIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgICB4bWxCdWZTZXRBbGxvY2F0aW9uU2NoZW1lKHJlYWRlci0+YnVmZmVyLAorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEKTsKKyAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICB4bWxCdWZFbXB0eShyZWFkZXItPmJ1ZmZlcik7CisgCSAgICAgICAgeG1sQnVmR2V0Tm9kZUNvbnRlbnQocmVhZGVyLT5idWZmZXIsIG5vZGUpOworLQkJcmV0dXJuKHhtbEJ1ZkNvbnRlbnQocmVhZGVyLT5idWZmZXIpKTsKKysJCXJldCA9IHhtbEJ1ZkNvbnRlbnQocmVhZGVyLT5idWZmZXIpOworKwkJaWYgKHJldCA9PSBOVUxMKSB7CisrCQkgICAgLyogZXJyb3Igb24gdGhlIGJ1ZmZlciBiZXN0IHRvIHJlYWxsb2NhdGUgKi8KKysJCSAgICB4bWxCdWZGcmVlKHJlYWRlci0+YnVmZmVyKTsKKysJCSAgICByZWFkZXItPmJ1ZmZlciA9IHhtbEJ1ZkNyZWF0ZVNpemUoMTAwKTsKKysJCSAgICB4bWxCdWZTZXRBbGxvY2F0aW9uU2NoZW1lKHJlYWRlci0+YnVmZmVyLAorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEKTsKKysJCSAgICByZXQgPSBCQURfQ0FTVCAiIjsKKysJCX0KKysJCXJldHVybihyZXQpOworIAkgICAgfQorIAkgICAgYnJlYWs7CisgCX0KK0BAIC01MTMxLDYgKzUxNDYsOSBAQCB4bWxUZXh0UmVhZGVyU2V0dXAoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInhtbFRleHRSZWFkZXJTZXR1cCA6IG1hbGxvYyBmYWlsZWRcbiIpOworICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgIH0KKysgICAgLyogbm8gb3BlcmF0aW9uIG9uIGEgcmVhZGVyIHNob3VsZCByZXF1aXJlIGEgaHVnZSBidWZmZXIgKi8KKysgICAgeG1sQnVmU2V0QWxsb2NhdGlvblNjaGVtZShyZWFkZXItPmJ1ZmZlciwKKysJCQkgICAgICBYTUxfQlVGRkVSX0FMTE9DX0JPVU5ERUQpOworICAgICBpZiAocmVhZGVyLT5zYXggPT0gTlVMTCkKKyAJcmVhZGVyLT5zYXggPSAoeG1sU0FYSGFuZGxlciAqKSB4bWxNYWxsb2Moc2l6ZW9mKHhtbFNBWEhhbmRsZXIpKTsKKyAgICAgaWYgKHJlYWRlci0+c2F4ID09IE5VTEwpIHsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzAwMDEtdGhyZWFkcy1EZWZpbmUtcHRocmVhZC1kZWZpbml0aW9ucy1mb3ItZ2xpYmMtY29tcGxpYS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvMDAwMS10aHJlYWRzLURlZmluZS1wdGhyZWFkLWRlZmluaXRpb25zLWZvci1nbGliYy1jb21wbGlhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NTNhODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzAwMDEtdGhyZWFkcy1EZWZpbmUtcHRocmVhZC1kZWZpbml0aW9ucy1mb3ItZ2xpYmMtY29tcGxpYS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDY3NTBjYzU2NGExN2M4MTI1NTVjY2E1ODc2NjAyNDBjY2ZmYWFlZDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCA0IEFwciAyMDE1IDA4OjUwOjQwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHRocmVhZHM6IERlZmluZSBwdGhyZWFkKiBkZWZpbml0aW9ucyBmb3IgZ2xpYmMgY29tcGxpYW50IGxpYnMKKworVGhpcyBjb2RlIGlzIGFzc3VtaW5nIGdsaWJjIGJ1dCBub3QgZXhwbGljaXRseSBzYXlpbmcgaXQKK3NvIGxldHMgbWFrZSBpdCBzby4gRml4ZXMgZm9sbG93aW5nIG9uIG11c2wKKwordGhyZWFkcy5jOjgwOjI3OiBlcnJvcjogbWFjcm8gInB0aHJlYWRfZXF1YWwiIHJlcXVpcmVzIDIgYXJndW1lbnRzLCBidXQKK29ubHkgMSBnaXZlbgorfCAgZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFsICgpCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgdGhyZWFkcy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogbGlieG1sMi0yLjkuMi90aHJlYWRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ4bWwyLTIuOS4yLm9yaWcvdGhyZWFkcy5jCisrKysgbGlieG1sMi0yLjkuMi90aHJlYWRzLmMKK0BAIC00Nyw3ICs0Nyw3IEBACisgI2lmZGVmIEhBVkVfUFRIUkVBRF9ICisgCisgc3RhdGljIGludCBsaWJ4bWxfaXNfdGhyZWFkZWQgPSAtMTsKKy0jaWZkZWYgX19HTlVDX18KKysjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0dMSUJDX18pCisgI2lmZGVmIGxpbnV4CisgI2lmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDMpIHx8IChfX0dOVUNfXyA+IDMpCisgZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvNzJhNDZhNTE5Y2U3MzI2ZDlhMDBmMGI2YTdmMmE4ZTk1OGNkMTY3NS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvNzJhNDZhNTE5Y2U3MzI2ZDlhMDBmMGI2YTdmMmE4ZTk1OGNkMTY3NS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGE4MTEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi83MmE0NmE1MTljZTczMjZkOWEwMGYwYjZhN2YyYThlOTU4Y2QxNjc1LnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gNzJhNDZhNTE5Y2U3MzI2ZDlhMDBmMGI2YTdmMmE4ZTk1OGNkMTY3NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERhbmllbCBWZWlsbGFyZCA8dmVpbGxhcmRAcmVkaGF0LmNvbT4KK0RhdGU6IFRodSwgMjMgT2N0IDIwMTQgMTE6MzU6MzYgKzA4MDAKK1N1YmplY3Q6IEZpeCBtaXNzaW5nIGVudGl0aWVzIGFmdGVyIENWRS0yMDE0LTM2NjAgZml4CisKK0ZvciBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4ODA1CisKK1RoZSBmaXggZm9yIENWRS0yMDE0LTM2NjAgaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24gaW4gc29tZSBjYXNlCit3aGVyZSBlbnRpdHkgc3Vic3RpdHV0aW9uIGlzIHJlcXVpcmVkIGFuZCB0aGUgZW50aXR5IGlzIHVzZWQKK2ZpcnN0IGluIGFub3R0aGVyIGVudGl0eSByZWZlcmVuY2VkIGZyb20gYW4gYXR0cmlidXRlIHZhbHVlCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtLWdpdCBhL3BhcnNlci5jIGIvcGFyc2VyLmMKK2luZGV4IDY3YzlkZmQuLmE4ZDFiNjcgMTAwNjQ0CistLS0gYS9wYXJzZXIuYworKysrIGIvcGFyc2VyLmMKK0BAIC03MjM1LDcgKzcyMzUsOCBAQCB4bWxQYXJzZVJlZmVyZW5jZSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpIHsKKyAgICAgICogZmFyIG1vcmUgc2VjdXJlIGFzIHRoZSBwYXJzZXIgd2lsbCBvbmx5IHByb2Nlc3MgZGF0YSBjb21pbmcgZnJvbQorICAgICAgKiB0aGUgZG9jdW1lbnQgZW50aXR5IGJ5IGRlZmF1bHQuCisgICAgICAqLworLSAgICBpZiAoKGVudC0+Y2hlY2tlZCA9PSAwKSAmJgorKyAgICBpZiAoKChlbnQtPmNoZWNrZWQgPT0gMCkgfHwKKysgICAgICAgICAoKGVudC0+Y2hpbGRyZW4gPT0gTlVMTCkgJiYgKGN0eHQtPm9wdGlvbnMgJiBYTUxfUEFSU0VfTk9FTlQpKSkgJiYKKyAgICAgICAgICgoZW50LT5ldHlwZSAhPSBYTUxfRVhURVJOQUxfR0VORVJBTF9QQVJTRURfRU5USVRZKSB8fAorICAgICAgICAgIChjdHh0LT5vcHRpb25zICYgKFhNTF9QQVJTRV9OT0VOVCB8IFhNTF9QQVJTRV9EVERWQUxJRCkpKSkgeworIAl1bnNpZ25lZCBsb25nIG9sZG5iZW50ID0gY3R4dC0+bmJlbnRpdGllczsKKy0tIAorY2dpdCB2MC4xMC4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvYW5zaWRlY2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2Fuc2lkZWNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NTJkNzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2Fuc2lkZWNsLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1NhZGx5IGNtYWtlIGlzIGJyb2tlbi4gSWYgaXQgc2VlcyB0aGlzIHJlZmVyZW5jZSBhbmQgYW5zaWRlY2wgaXMgcHJlc2VudCwgaXQgd2lsbCBhZGQgYSAKK2RlcGVuZGVuY3kgdXBvbiBpdCwgZXZlbiBpZiBIQVZFX0FOU0lERUNfSCBpcyBuZXZlciBzZXQuCisKK1RoZSBlYXNpZXN0IHNvbHV0aW9uIGlzIHRvIHJlbW92ZSB0aGVzZSBsaW5lcywgb3RoZXJ3aXNlIHJlY2lwZXMgbGlrZSBsaWJ6eXBwIGNhbiBoYXZlIGEgCitkZXBlbmRlbmN5IG9uIHRoZSBhbnNpZGVjbC5oIGhlYWRlciB2aWEgY21ha2UuIFRoaXMgY2FuIGxlYWQgdG8gb2RkIHJlc3VsdHMgaWYgdGhlIAoraGVhZGVyIGlzIHJlbW92ZWQgKGNsZWFuIGJpbnV0aWxzKSBhbmQgdGhlbiB0aGUgY29kZSBpcyByZWNvbXBpbGVkLgorCitSUCAyMDEyLzcvMTAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtpdHMgcmVhbGx5IGEgY21ha2UgYnVnXQorCitJbmRleDogbGlieG1sMi0yLjguMC9pbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ4bWwyLTIuOC4wLm9yaWcvaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluCTIwMTItMDctMTAgMTE6NTE6NTIuNDYwNzUwNTczICswMDAwCisrKysgbGlieG1sMi0yLjguMC9pbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4JMjAxMi0wNy0xMCAxMTo1Mjo0MS40MzY3NDkzOTcgKzAwMDAKK0BAIC00MDEsOSArNDAxLDYgQEAKKyAjZW5kaWYKKyAKKyAjaWZkZWYgX19HTlVDX18KKy0jaWZkZWYgSEFWRV9BTlNJREVDTF9ICistI2luY2x1ZGUgPGFuc2lkZWNsLmg+CistI2VuZGlmCisgCisgLyoqCisgICogQVRUUklCVVRFX1VOVVNFRDoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvY29uZmlndXJlLmFjLWZpeC1jcm9zcy1jb21waWxpbmctd2FybmluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvY29uZmlndXJlLmFjLWZpeC1jcm9zcy1jb21waWxpbmctd2FybmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjgwNzliCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9jb25maWd1cmUuYWMtZml4LWNyb3NzLWNvbXBpbGluZy13YXJuaW5nLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK2NvbmZpZ3VyZS5hYzogZml4IGNyb3NzIGNvbXBpbGluZyB3YXJuaW5nCisKK1RoZXJlIGlzIGEgd2FybmluZyB3aGlsZSBjcm9zcyBjb21waWxpbmcgd2hpY2ggdHJpZ2dlcmVkIGEKK2ZhaWx1cmUgYnkgZG9fcWFfY29uZmlndXJlCisuLi4KK3xjb25maWd1cmU6MTI2NTI6IGNoZWNraW5nIGZvciBnenJlYWQgaW4gLWx6Cit8Y29uZmlndXJlOjEyNjc3OiBtaXBzLXBva3ktbGludXgtZ2NjICAtbWViIC1tYWJpPTMyIC1taGFyZC1mbG9hdAorIC1ML2xpYiBjb25mdGVzdC5jIC1seiAgID4mNQorfGxkOiB3YXJuaW5nOiBsaWJyYXJ5IHNlYXJjaCBwYXRoICIvbGliIiBpcyB1bnNhZmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uCisuLi4KKworV2hpbGUgZG8gdGhlIGxpYiBjaGVja2luZywgZG8gbm90IGFkZCAnLUwke1pfRElSfS9saWInIHRvIExERkxBR1MgY291bGQgZml4IGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lIHNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgNSArLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOWE5MDYwMC4uMGJhYzhhNCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzkxLDggKzM5MSw2IEBAIGlmIHRlc3QgIiR3aXRoX3psaWIiID0gIm5vIjsgdGhlbgorICAgICBlY2hvICJEaXNhYmxpbmcgY29tcHJlc3Npb24gc3VwcG9ydCIKKyBlbHNlCisgICAgIEFDX0NIRUNLX0hFQURFUlMoemxpYi5oLAorLSAgICAgICAgW1NBVkVfTERGTEFHUz0iJHtMREZMQUdTfSIKKy0JIExERkxBR1M9Ii1MJHtaX0RJUn0vbGliIgorIAlBQ19DSEVDS19MSUIoeiwgZ3pyZWFkLFsKKyAJICAgIEFDX0RFRklORShbSEFWRV9MSUJaXSwgWzFdLCBbSGF2ZSBjb21wcmVzc2lvbiBsaWJyYXJ5XSkKKyAJICAgIFdJVEhfWkxJQj0xCitAQCAtNDA2LDggKzQwNCw3IEBAIGVsc2UKKyAJCWVzYWNdCisgCSAgICBlbHNlCisgCQlaX0xJQlM9Ii1seiIKKy0JICAgIGZpXSkKKy0JIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSJdKQorKwkgICAgZmldKSkKKyBmaQorIAorIEFDX1NVQlNUKFpfQ0ZMQUdTKQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbC02NGJpdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sLTY0Yml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNDcwMTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbC02NGJpdC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtmcm9tIGRlYmlhbjogYnVncy5kZWJpYW4ub3JnLzQzOTg0M10KKworLS0tCisgbGlieG1sLmggfCAgICAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworLS0tIGxpYnhtbDItMi42LjI5Lm9yaWcvbGlieG1sLmgKKysrKyBsaWJ4bWwyLTIuNi4yOS9saWJ4bWwuaAorQEAgLTExLDEwICsxMSwxMyBAQAorIAorICNpZm5kZWYgTk9fTEFSR0VGSUxFX1NPVVJDRQorICNpZm5kZWYgX0xBUkdFRklMRV9TT1VSQ0UKKyAjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFCisgI2VuZGlmCisrI2lmbmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFCisrI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisrI2VuZGlmCisgI2lmbmRlZiBfRklMRV9PRkZTRVRfQklUUworICNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKKyAjZW5kaWYKKyAjZW5kaWYKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sLW00LXVzZS1wa2djb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbC1tNC11c2UtcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYzg0MDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbC1tNC11c2UtcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMjA0IEBACitBTV9QQVRIX1hNTDIgdXNlcyB4bWwtY29uZmlnIHdoaWNoIHdlIGRpc2FibGUgdGhyb3VnaAorYmluY29uZmlnLWRpc2FibGVkLmJiY2xhc3MsIHNvIHBvcnQgaXQgdG8gdXNlIHBrZy1jb25maWcgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvbGlieG1sLm00IGIvbGlieG1sLm00CitpbmRleCA2OGNkODI0Li41ZmEwYTliIDEwMDY0NAorLS0tIGEvbGlieG1sLm00CisrKysgYi9saWJ4bWwubTQKK0BAIC0xLDE4OCArMSwxMiBAQAorLSMgQ29uZmlndXJlIHBhdGhzIGZvciBMSUJYTUwyCistIyBNaWtlIEhvbW1leSAyMDA0LTA2LTE5CistIyB1c2UgQ1BQRkxBR1MgaW5zdGVhZCBvZiBDRkxBR1MKKy0jIFRvc2hpbyBLdXJhdG9taSAyMDAxLTA0LTIxCistIyBBZGFwdGVkIGZyb206CistIyBDb25maWd1cmUgcGF0aHMgZm9yIEdMSUIKKy0jIE93ZW4gVGF5bG9yICAgICA5Ny0xMS0zCistCisgZG5sIEFNX1BBVEhfWE1MMihbTUlOSU1VTS1WRVJTSU9OLCBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXV0pCisgZG5sIFRlc3QgZm9yIFhNTCwgYW5kIGRlZmluZSBYTUxfQ1BQRkxBR1MgYW5kIFhNTF9MSUJTCisgZG5sCistQUNfREVGVU4oW0FNX1BBVEhfWE1MMl0sWyAKKy1BQ19BUkdfV0lUSCh4bWwtcHJlZml4LAorLSAgICAgICAgICAgIFsgIC0td2l0aC14bWwtcHJlZml4PVBGWCAgIFByZWZpeCB3aGVyZSBsaWJ4bWwgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorLSAgICAgICAgICAgIHhtbF9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIHhtbF9jb25maWdfcHJlZml4PSIiKQorLUFDX0FSR19XSVRIKHhtbC1leGVjLXByZWZpeCwKKy0gICAgICAgICAgICBbICAtLXdpdGgteG1sLWV4ZWMtcHJlZml4PVBGWCBFeGVjIHByZWZpeCB3aGVyZSBsaWJ4bWwgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorLSAgICAgICAgICAgIHhtbF9jb25maWdfZXhlY19wcmVmaXg9IiR3aXRodmFsIiwgeG1sX2NvbmZpZ19leGVjX3ByZWZpeD0iIikKKy1BQ19BUkdfRU5BQkxFKHhtbHRlc3QsCistICAgICAgICAgICAgICBbICAtLWRpc2FibGUteG1sdGVzdCAgICAgICBEbyBub3QgdHJ5IHRvIGNvbXBpbGUgYW5kIHJ1biBhIHRlc3QgTElCWE1MIHByb2dyYW1dLCwKKy0gICAgICAgICAgICAgIGVuYWJsZV94bWx0ZXN0PXllcykKKy0KKy0gIGlmIHRlc3QgeCR4bWxfY29uZmlnX2V4ZWNfcHJlZml4ICE9IHggOyB0aGVuCistICAgICB4bWxfY29uZmlnX2FyZ3M9IiR4bWxfY29uZmlnX2FyZ3MiCistICAgICBpZiB0ZXN0IHgke1hNTDJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKy0gICAgICAgIFhNTDJfQ09ORklHPSR4bWxfY29uZmlnX2V4ZWNfcHJlZml4L2Jpbi94bWwyLWNvbmZpZworLSAgICAgZmkKKy0gIGZpCistICBpZiB0ZXN0IHgkeG1sX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKy0gICAgIHhtbF9jb25maWdfYXJncz0iJHhtbF9jb25maWdfYXJncyAtLXByZWZpeD0keG1sX2NvbmZpZ19wcmVmaXgiCistICAgICBpZiB0ZXN0IHgke1hNTDJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKy0gICAgICAgIFhNTDJfQ09ORklHPSR4bWxfY29uZmlnX3ByZWZpeC9iaW4veG1sMi1jb25maWcKKy0gICAgIGZpCistICBmaQorLQorLSAgQUNfUEFUSF9QUk9HKFhNTDJfQ09ORklHLCB4bWwyLWNvbmZpZywgbm8pCistICBtaW5feG1sX3ZlcnNpb249aWZlbHNlKFskMV0sICwyLjAuMCxbJDFdKQorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBsaWJ4bWwgLSB2ZXJzaW9uID49ICRtaW5feG1sX3ZlcnNpb24pCistICBub194bWw9IiIKKy0gIGlmIHRlc3QgIiRYTUwyX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorLSAgICBub194bWw9eWVzCistICBlbHNlCistICAgIFhNTF9DUFBGTEFHUz1gJFhNTDJfQ09ORklHICR4bWxfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCistICAgIFhNTF9MSUJTPWAkWE1MMl9DT05GSUcgJHhtbF9jb25maWdfYXJncyAtLWxpYnNgCistICAgIHhtbF9jb25maWdfbWFqb3JfdmVyc2lvbj1gJFhNTDJfQ09ORklHICR4bWxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wxLydgCistICAgIHhtbF9jb25maWdfbWlub3JfdmVyc2lvbj1gJFhNTDJfQ09ORklHICR4bWxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wyLydgCistICAgIHhtbF9jb25maWdfbWljcm9fdmVyc2lvbj1gJFhNTDJfQ09ORklHICR4bWxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wzLydgCistICAgIGlmIHRlc3QgIngkZW5hYmxlX3htbHRlc3QiID0gInh5ZXMiIDsgdGhlbgorLSAgICAgIGFjX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKy0gICAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorLSAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFhNTF9DUFBGTEFHUyIKKy0gICAgICBMSUJTPSIkWE1MX0xJQlMgJExJQlMiCistZG5sCistZG5sIE5vdyBjaGVjayBpZiB0aGUgaW5zdGFsbGVkIGxpYnhtbCBpcyBzdWZmaWNpZW50bHkgbmV3LgorLWRubCAoQWxzbyBzYW5pdHkgY2hlY2tzIHRoZSByZXN1bHRzIG9mIHhtbDItY29uZmlnIHRvIHNvbWUgZXh0ZW50KQorLWRubAorLSAgICAgIHJtIC1mIGNvbmYueG1sdGVzdAorLSAgICAgIEFDX1RSWV9SVU4oWworLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RkaW8uaD4KKy0jaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPGxpYnhtbC94bWx2ZXJzaW9uLmg+CistCistaW50IAorLW1haW4oKQorLXsKKy0gIGludCB4bWxfbWFqb3JfdmVyc2lvbiwgeG1sX21pbm9yX3ZlcnNpb24sIHhtbF9taWNyb192ZXJzaW9uOworLSAgaW50IG1ham9yLCBtaW5vciwgbWljcm87CistICBjaGFyICp0bXBfdmVyc2lvbjsKKy0KKy0gIHN5c3RlbSgidG91Y2ggY29uZi54bWx0ZXN0Iik7CistCistICAvKiBDYXB0dXJlIHhtbDItY29uZmlnIG91dHB1dCB2aWEgYXV0b2NvbmYvY29uZmlndXJlIHZhcmlhYmxlcyAqLworLSAgLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCistICB0bXBfdmVyc2lvbiA9IChjaGFyICopc3RyZHVwKCIkbWluX3htbF92ZXJzaW9uIik7CistICBpZiAoc3NjYW5mKHRtcF92ZXJzaW9uLCAiJWQuJWQuJWQiLCAmbWFqb3IsICZtaW5vciwgJm1pY3JvKSAhPSAzKSB7CistICAgICBwcmludGYoIiVzLCBiYWQgdmVyc2lvbiBzdHJpbmcgZnJvbSB4bWwyLWNvbmZpZ1xuIiwgIiRtaW5feG1sX3ZlcnNpb24iKTsKKy0gICAgIGV4aXQoMSk7CistICAgfQorLSAgIGZyZWUodG1wX3ZlcnNpb24pOworLQorLSAgIC8qIENhcHR1cmUgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgaGVhZGVyIGZpbGVzICovCistICAgdG1wX3ZlcnNpb24gPSAoY2hhciAqKXN0cmR1cChMSUJYTUxfRE9UVEVEX1ZFUlNJT04pOworLSAgIGlmIChzc2NhbmYodG1wX3ZlcnNpb24sICIlZC4lZC4lZCIsICZ4bWxfbWFqb3JfdmVyc2lvbiwgJnhtbF9taW5vcl92ZXJzaW9uLCAmeG1sX21pY3JvX3ZlcnNpb24pICE9IDMpIHsKKy0gICAgIHByaW50ZigiJXMsIGJhZCB2ZXJzaW9uIHN0cmluZyBmcm9tIGxpYnhtbCBpbmNsdWRlc1xuIiwgIkxJQlhNTF9ET1RURURfVkVSU0lPTiIpOworLSAgICAgZXhpdCgxKTsKKy0gICB9CistICAgZnJlZSh0bXBfdmVyc2lvbik7CistCistIC8qIENvbXBhcmUgeG1sMi1jb25maWcgb3V0cHV0IHRvIHRoZSBsaWJ4bWwgaGVhZGVycyAqLworLSAgaWYgKCh4bWxfbWFqb3JfdmVyc2lvbiAhPSAkeG1sX2NvbmZpZ19tYWpvcl92ZXJzaW9uKSB8fAorLSAgICAgICh4bWxfbWlub3JfdmVyc2lvbiAhPSAkeG1sX2NvbmZpZ19taW5vcl92ZXJzaW9uKSB8fAorLSAgICAgICh4bWxfbWljcm9fdmVyc2lvbiAhPSAkeG1sX2NvbmZpZ19taWNyb192ZXJzaW9uKSkKKy0gICAgeworLSAgICAgIHByaW50ZigiKioqIGxpYnhtbCBoZWFkZXIgZmlsZXMgKHZlcnNpb24gJWQuJWQuJWQpIGRvIG5vdCBtYXRjaFxuIiwKKy0gICAgICAgICB4bWxfbWFqb3JfdmVyc2lvbiwgeG1sX21pbm9yX3ZlcnNpb24sIHhtbF9taWNyb192ZXJzaW9uKTsKKy0gICAgICBwcmludGYoIioqKiB4bWwyLWNvbmZpZyAodmVyc2lvbiAlZC4lZC4lZClcbiIsCistICAgICAgICAgJHhtbF9jb25maWdfbWFqb3JfdmVyc2lvbiwgJHhtbF9jb25maWdfbWlub3JfdmVyc2lvbiwgJHhtbF9jb25maWdfbWljcm9fdmVyc2lvbik7CistICAgICAgcmV0dXJuIDE7CistICAgIH0gCistLyogQ29tcGFyZSB0aGUgaGVhZGVycyB0byB0aGUgbGlicmFyeSB0byBtYWtlIHN1cmUgd2UgbWF0Y2ggKi8KKy0gIC8qIExlc3MgdGhhbiBpZGVhbCAtLSBkb2Vzbid0IHByb3ZpZGUgdXMgd2l0aCByZXR1cm4gdmFsdWUgZmVlZGJhY2ssIAorLSAgICogb25seSBleGl0cyBpZiB0aGVyZSdzIGEgc2VyaW91cyBtaXNtYXRjaCBiZXR3ZWVuIGhlYWRlciBhbmQgbGlicmFyeS4KKy0gICAqLworLSAgICBMSUJYTUxfVEVTVF9WRVJTSU9OOworLQorLSAgICAvKiBUZXN0IHRoYXQgdGhlIGxpYnJhcnkgaXMgZ3JlYXRlciB0aGFuIG91ciBtaW5pbXVtIHZlcnNpb24gKi8KKy0gICAgaWYgKCh4bWxfbWFqb3JfdmVyc2lvbiA+IG1ham9yKSB8fAorLSAgICAgICAgKCh4bWxfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKHhtbF9taW5vcl92ZXJzaW9uID4gbWlub3IpKSB8fAorLSAgICAgICAgKCh4bWxfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKHhtbF9taW5vcl92ZXJzaW9uID09IG1pbm9yKSAmJgorLSAgICAgICAgKHhtbF9taWNyb192ZXJzaW9uID49IG1pY3JvKSkpCistICAgICAgeworLSAgICAgICAgcmV0dXJuIDA7CistICAgICAgIH0KKy0gICAgIGVsc2UKKy0gICAgICB7CistICAgICAgICBwcmludGYoIlxuKioqIEFuIG9sZCB2ZXJzaW9uIG9mIGxpYnhtbCAoJWQuJWQuJWQpIHdhcyBmb3VuZC5cbiIsCistICAgICAgICAgICAgICAgeG1sX21ham9yX3ZlcnNpb24sIHhtbF9taW5vcl92ZXJzaW9uLCB4bWxfbWljcm9fdmVyc2lvbik7CistICAgICAgICBwcmludGYoIioqKiBZb3UgbmVlZCBhIHZlcnNpb24gb2YgbGlieG1sIG5ld2VyIHRoYW4gJWQuJWQuJWQuIFRoZSBsYXRlc3QgdmVyc2lvbiBvZlxuIiwKKy0gICAgICAgICAgIG1ham9yLCBtaW5vciwgbWljcm8pOworLSAgICAgICAgcHJpbnRmKCIqKiogbGlieG1sIGlzIGFsd2F5cyBhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAueG1sc29mdC5vcmcuXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqIElmIHlvdSBoYXZlIGFscmVhZHkgaW5zdGFsbGVkIGEgc3VmZmljaWVudGx5IG5ldyB2ZXJzaW9uLCB0aGlzIGVycm9yXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHdyb25nIGNvcHkgb2YgdGhlIHhtbDItY29uZmlnIHNoZWxsIHNjcmlwdCBpc1xuIik7CistICAgICAgICBwcmludGYoIioqKiBiZWluZyBmb3VuZC4gVGhlIGVhc2llc3Qgd2F5IHRvIGZpeCB0aGlzIGlzIHRvIHJlbW92ZSB0aGUgb2xkIHZlcnNpb25cbiIpOworLSAgICAgICAgcHJpbnRmKCIqKiogb2YgTElCWE1MLCBidXQgeW91IGNhbiBhbHNvIHNldCB0aGUgWE1MMl9DT05GSUcgZW52aXJvbm1lbnQgdG8gcG9pbnQgdG8gdGhlXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqIGNvcnJlY3QgY29weSBvZiB4bWwyLWNvbmZpZy4gKEluIHRoaXMgY2FzZSwgeW91IHdpbGwgaGF2ZSB0b1xuIik7CistICAgICAgICBwcmludGYoIioqKiBtb2RpZnkgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmZcbiIpOworLSAgICAgICAgcHJpbnRmKCIqKiogc28gdGhhdCB0aGUgY29ycmVjdCBsaWJyYXJpZXMgYXJlIGZvdW5kIGF0IHJ1bi10aW1lKSlcbiIpOworLSAgICB9CistICByZXR1cm4gMTsKKy19CistXSwsIG5vX3htbD15ZXMsW2VjaG8gJGFjX24gImNyb3NzIGNvbXBpbGluZzsgYXNzdW1lZCBPSy4uLiAkYWNfYyJdKQorLSAgICAgICBDUFBGTEFHUz0iJGFjX3NhdmVfQ1BQRkxBR1MiCistICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCistICAgICBmaQorLSAgZmkKKytBQ19ERUZVTihbQU1fUEFUSF9YTUwyXSxbCisrICBBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKKyAKKy0gIGlmIHRlc3QgIngkbm9feG1sIiA9IHggOyB0aGVuCistICAgICBBQ19NU0dfUkVTVUxUKHllcyAodmVyc2lvbiAkeG1sX2NvbmZpZ19tYWpvcl92ZXJzaW9uLiR4bWxfY29uZmlnX21pbm9yX3ZlcnNpb24uJHhtbF9jb25maWdfbWljcm9fdmVyc2lvbikpCistICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKSAgICAgCistICBlbHNlCistICAgICBBQ19NU0dfUkVTVUxUKG5vKQorLSAgICAgaWYgdGVzdCAiJFhNTDJfQ09ORklHIiA9ICJubyIgOyB0aGVuCistICAgICAgIGVjaG8gIioqKiBUaGUgeG1sMi1jb25maWcgc2NyaXB0IGluc3RhbGxlZCBieSBMSUJYTUwgY291bGQgbm90IGJlIGZvdW5kIgorLSAgICAgICBlY2hvICIqKiogSWYgbGlieG1sIHdhcyBpbnN0YWxsZWQgaW4gUFJFRklYLCBtYWtlIHN1cmUgUFJFRklYL2JpbiBpcyBpbiIKKy0gICAgICAgZWNobyAiKioqIHlvdXIgcGF0aCwgb3Igc2V0IHRoZSBYTUwyX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUiCistICAgICAgIGVjaG8gIioqKiBmdWxsIHBhdGggdG8geG1sMi1jb25maWcuIgorLSAgICAgZWxzZQorLSAgICAgICBpZiB0ZXN0IC1mIGNvbmYueG1sdGVzdCA7IHRoZW4KKy0gICAgICAgIDoKKy0gICAgICAgZWxzZQorLSAgICAgICAgICBlY2hvICIqKiogQ291bGQgbm90IHJ1biBsaWJ4bWwgdGVzdCBwcm9ncmFtLCBjaGVja2luZyB3aHkuLi4iCistICAgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFhNTF9DUFBGTEFHUyIKKy0gICAgICAgICAgTElCUz0iJExJQlMgJFhNTF9MSUJTIgorLSAgICAgICAgICBBQ19UUllfTElOSyhbCistI2luY2x1ZGUgPGxpYnhtbC94bWx2ZXJzaW9uLmg+CistI2luY2x1ZGUgPHN0ZGlvLmg+CistXSwgICAgICBbIExJQlhNTF9URVNUX1ZFUlNJT047IHJldHVybiAwO10sCistICAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGNvbXBpbGVkLCBidXQgZGlkIG5vdCBydW4uIFRoaXMgdXN1YWxseSBtZWFucyIKKy0gICAgICAgICAgZWNobyAiKioqIHRoYXQgdGhlIHJ1bi10aW1lIGxpbmtlciBpcyBub3QgZmluZGluZyBMSUJYTUwgb3IgZmluZGluZyB0aGUgd3JvbmciCistICAgICAgICAgIGVjaG8gIioqKiB2ZXJzaW9uIG9mIExJQlhNTC4gSWYgaXQgaXMgbm90IGZpbmRpbmcgTElCWE1MLCB5b3UnbGwgbmVlZCB0byBzZXQgeW91ciIKKy0gICAgICAgICAgZWNobyAiKioqIExEX0xJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmYgdG8gcG9pbnQiCistICAgICAgICAgIGVjaG8gIioqKiB0byB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uICBBbHNvLCBtYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQiCistICAgICAgICAgIGVjaG8gIioqKiBpcyByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbSIKKy0gICAgICAgICAgZWNobyAiKioqIgorLSAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gaW5zdGFsbGVkLCBpdCBpcyBiZXN0IHRvIHJlbW92ZSBpdCwgYWx0aG91Z2giCistICAgICAgICAgIGVjaG8gIioqKiB5b3UgbWF5IGFsc28gYmUgYWJsZSB0byBnZXQgdGhpbmdzIHRvIHdvcmsgYnkgbW9kaWZ5aW5nIExEX0xJQlJBUllfUEFUSCIgXSwKKy0gICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gZmFpbGVkIHRvIGNvbXBpbGUgb3IgbGluay4gU2VlIHRoZSBmaWxlIGNvbmZpZy5sb2cgZm9yIHRoZSIKKy0gICAgICAgICAgZWNobyAiKioqIGV4YWN0IGVycm9yIHRoYXQgb2NjdXJlZC4gVGhpcyB1c3VhbGx5IG1lYW5zIExJQlhNTCB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgorLSAgICAgICAgICBlY2hvICIqKiogb3IgdGhhdCB5b3UgaGF2ZSBtb3ZlZCBMSUJYTUwgc2luY2UgaXQgd2FzIGluc3RhbGxlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB5b3UiCistICAgICAgICAgIGVjaG8gIioqKiBtYXkgd2FudCB0byBlZGl0IHRoZSB4bWwyLWNvbmZpZyBzY3JpcHQ6ICRYTUwyX0NPTkZJRyIgXSkKKy0gICAgICAgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgorLSAgICAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorLSAgICAgICBmaQorLSAgICAgZmkKKysgIHZlcmRlcD1pZmVsc2UoWyQxXSwgW10sIFtdLCBbPj0gJDFdKQorKyAgUEtHX0NIRUNLX01PRFVMRVMoWE1MLCBbbGlieG1sLTIuMCAkdmVyZGVwXSwgWyQyXSwgWyQzXSkKKyAKKy0gICAgIFhNTF9DUFBGTEFHUz0iIgorLSAgICAgWE1MX0xJQlM9IiIKKy0gICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCistICBmaQorKyAgWE1MX0NQUEZMQUdTPSRYTUxfQ0ZMQUdTCisgICBBQ19TVUJTVChYTUxfQ1BQRkxBR1MpCistICBBQ19TVUJTVChYTUxfTElCUykKKy0gIHJtIC1mIGNvbmYueG1sdGVzdAorIF0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbDItQ1ZFLTIwMTQtMDE5MS1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbDItQ1ZFLTIwMTQtMDE5MS1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwNWFlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sMi1DVkUtMjAxNC0wMTkxLWZpeC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tOiBEYW5pZWwgVmVpbGxhcmQgPHZlaWxsYXJkQHJlZGhhdC5jb20+CitEYXRlOiBUdWUsIDIyIEFwciAyMDE0IDE1OjMwOjU2ICswODAwCitTdWJqZWN0OiBEbyBub3QgZmV0Y2ggZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0aWVzCisKK1VubGVzcyBleHBsaWNpdGVseSBhc2tlZCBmb3Igd2hlbiB2YWxpZGF0aW5nIG9yIHJlcGxhY2luZyBlbnRpdGllcword2l0aCB0aGVpciB2YWx1ZS4gUHJvYmxlbSBwb2ludGVkIG91dCBieSBEYW5pZWwgQmVycmFuZ2UgPGJlcnJhbmdlQHJlZGhhdC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1JlZmVyZW5jZTogaHR0cHM6Ly9hY2Nlc3MucmVkaGF0LmNvbS9zZWN1cml0eS9jdmUvQ1ZFLTIwMTQtMDE5MQorCitTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgVmVpbGxhcmQgPHZlaWxsYXJkQHJlZGhhdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGVuZWEuY29tPgorLS0tCitkaWZmIC1OYXVyIGxpYnhtbDItMi45LjEtb3JpZy9wYXJzZXIuYyBsaWJ4bWwyLTIuOS4xL3BhcnNlci5jCistLS0gbGlieG1sMi0yLjkuMS1vcmlnL3BhcnNlci5jCTIwMTMtMDQtMTYgMTU6Mzk6MTguMDAwMDAwMDAwICswMjAwCisrKysgbGlieG1sMi0yLjkuMS9wYXJzZXIuYwkyMDE0LTA1LTA3IDEzOjM1OjQ2Ljg4MzY4Nzk0NiArMDIwMAorQEAgLTI1OTUsNiArMjU5NSwyMCBAQAorIAkJICAgIHhtbENoYXJFbmNvZGluZyBlbmM7CisgCisgCQkgICAgLyoKKysJCSAgICAgKiBOb3RlOiBleHRlcm5hbCBwYXJzZWQgZW50aXRpZXMgd2lsbCBub3QgYmUgbG9hZGVkLCBpdCBpcworKwkJICAgICAqIG5vdCByZXF1aXJlZCBmb3IgYSBub24tdmFsaWRhdGluZyBwYXJzZXIsIHVubGVzcyB0aGUKKysJCSAgICAgKiBvcHRpb24gb2YgdmFsaWRhdGluZywgb3Igc3Vic3RpdHV0aW5nIGVudGl0aWVzIHdlcmUKKysJCSAgICAgKiBnaXZlbi4gRG9pbmcgc28gaXMgZmFyIG1vcmUgc2VjdXJlIGFzIHRoZSBwYXJzZXIgd2lsbAorKwkJICAgICAqIG9ubHkgcHJvY2VzcyBkYXRhIGNvbWluZyBmcm9tIHRoZSBkb2N1bWVudCBlbnRpdHkgYnkKKysJCSAgICAgKiBkZWZhdWx0LgorKwkJICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgaWYgKChlbnRpdHktPmV0eXBlID09IFhNTF9FWFRFUk5BTF9QQVJBTUVURVJfRU5USVRZKSAmJgorKwkJICAgICAgICAoKGN0eHQtPm9wdGlvbnMgJiBYTUxfUEFSU0VfTk9FTlQpID09IDApICYmCisrCQkJKChjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX0RURFZBTElEKSA9PSAwKSAmJgorKwkJCShjdHh0LT52YWxpZGF0ZSA9PSAwKSkKKysJCQlyZXR1cm47CisrCisrCQkgICAgLyoKKyAJCSAgICAgKiBoYW5kbGUgdGhlIGV4dHJhIHNwYWNlcyBhZGRlZCBiZWZvcmUgYW5kIGFmdGVyCisgCQkgICAgICogYy5mLiBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sI2FzLVBFCisgCQkgICAgICogdGhpcyBpcyBkb25lIGluZGVwZW5kZW50bHkuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL3B5dGhvbi1zaXRlcGFja2FnZXMtZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9weXRob24tc2l0ZXBhY2thZ2VzLWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODNjODMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9weXRob24tc2l0ZXBhY2thZ2VzLWRpci5wYXRjaApAQCAtMCwwICsxLDMwIEBACitBbGxvdyB1cyB0byBwYXNzIGluIFBZVEhPTl9TSVRFX1BBQ0tBR0VTCisKK1RoZSBweXRob24gYmluYXJ5IHVzZWQgd2hlbiBidWlsZGluZyBmb3IgbmF0aXZlc2RrIGRvZXNuJ3QgZ2l2ZSB1cyB0aGUKK2NvcnJlY3QgcGF0aCBoZXJlIHNvIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IGl0IG91cnNlbHZlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWddCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworUmViYXNlIHRvIDIuOS4yCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC04MTMsNyArODEzLDggQEAgZG5sCisgCisgUFlUSE9OX1ZFUlNJT049CisgUFlUSE9OX0lOQ0xVREVTPQorLVBZVEhPTl9TSVRFX1BBQ0tBR0VTPQorKyMgQWxsb3cgdGhpcyB0byBiZSBzZXQgZXh0ZXJuYWxseQorKyNQWVRIT05fU0lURV9QQUNLQUdFUz0KKyBQWVRIT05fVEVTVFM9CisgcHl0aG9uZGlyPQorIGlmIHRlc3QgIiR3aXRoX3B5dGhvbiIgIT0gIm5vIiA7IHRoZW4KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzNkMGI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworbWFrZSAtayBydW50ZXN0cwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9ydW50ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9ydW50ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5N2FiMjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL3J1bnRlc3QucGF0Y2gKQEAgLTAsMCArMSw4MjAgQEAKK0FkZCAnaW5zdGFsbC1wdGVzdCcgcnVsZS4KK1ByaW50IGEgc3RhbmRhcmQgcmVzdWx0IGxpbmUgZm9yIGVhY2ggdGVzdC4KKworU2lnbmVkLW9mZi1ieTogTWloYWVsYSBTZW5kcmVhIDxtaWhhZWxhLnNlbmRyZWFAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtdU5yIGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQorLS0tIGEvTWFrZWZpbGUuYW0JMjAxMy0wNC0xNyAxNDo1MTo0Mi42MzMzODY0NzcgKzAyMDAKKysrKyBiL01ha2VmaWxlLmFtCTIwMTMtMDQtMTkgMTQ6NDc6NTEuNTQ0NzIwNTY4ICswMjAwCitAQCAtMjAyLDEwICsyMDIsMTkgQEAKKyAjdGVzdE9PTV9ERVBFTkRFTkNJRVMgPSAkKERFUFMpCisgI3Rlc3RPT01fTERBREQ9ICQoTERBRERTKQorIAorK2luc3RhbGwtcHRlc3Q6CisrCUAoaWYgWyAtZCAubGlicyBdIDsgdGhlbiBjZCAubGliczsgZmk7IFwKKysJaW5zdGFsbCAkKG5vaW5zdF9QUk9HUkFNUykgJChERVNURElSKSkKKysJY3AgLXIgJChzcmNkaXIpL3Rlc3QgJChERVNURElSKQorKwljcCAtciAkKHNyY2RpcikvcmVzdWx0ICQoREVTVERJUikKKysJY3AgLXIgJChzcmNkaXIpL3B5dGhvbiAkKERFU1RESVIpCisrCWNwIE1ha2VmaWxlICQoREVTVERJUikKKysJc2VkIC1pIC1lICdzfF5NYWtlZmlsZTp8X01ha2VmaWxlOnwnICQoREVTVERJUikvTWFrZWZpbGUKKysKKyBydW50ZXN0czoKKyAJWyAtZCB0ZXN0ICAgXSB8fCAkKExOX1MpICQoc3JjZGlyKS90ZXN0ICAgLgorIAlbIC1kIHJlc3VsdCBdIHx8ICQoTE5fUykgJChzcmNkaXIpL3Jlc3VsdCAuCistCSQoQ0hFQ0tFUikgLi9ydW50ZXN0JChFWEVFWFQpICYmICQoQ0hFQ0tFUikgLi90ZXN0cmVjdXJzZSQoRVhFRVhUKSAmJiQoQ0hFQ0tFUikgLi90ZXN0YXBpJChFWEVFWFQpICYmICQoQ0hFQ0tFUikgLi90ZXN0Y2hhciQoRVhFRVhUKSYmICQoQ0hFQ0tFUikgLi90ZXN0ZGljdCQoRVhFRVhUKSAmJiAkKENIRUNLRVIpIC4vcnVueG1sY29uZiQoRVhFRVhUKQorKwkuL3J1bnRlc3QkKEVYRUVYVCkgOyAuL3Rlc3RyZWN1cnNlJChFWEVFWFQpIDsgLi90ZXN0YXBpJChFWEVFWFQpIDsgLi90ZXN0Y2hhciQoRVhFRVhUKSA7IC4vdGVzdGRpY3QkKEVYRUVYVCkgOyAuL3J1bnhtbGNvbmYkKEVYRUVYVCkKKyAJQChpZiBbICIkKFBZVEhPTl9TVUJESVIpIiAhPSAiIiBdIDsgdGhlbiBjZCBweXRob24gOyBcCisgCSAgICAkKE1BS0UpIHRlc3RzIDsgZmkpCisgCitkaWZmIC11TnIgYS9ydW5zdWl0ZS5jIGIvcnVuc3VpdGUuYworLS0tIGEvcnVuc3VpdGUuYwkyMDEzLTA0LTEyIDE2OjE3OjExLjQ2MjgyMzIzOCArMDIwMAorKysrIGIvcnVuc3VpdGUuYwkyMDEzLTA0LTE3IDE0OjA3OjI0LjM1MjY5MzIxMSArMDIwMAorQEAgLTExNjIsNiArMTE2Miw3IEBACisgCisgICAgIGlmIChsb2dmaWxlICE9IE5VTEwpCisgICAgICAgICBmY2xvc2UobG9nZmlsZSk7CisrICAgIHByaW50ZigiJXM6IHJ1bnN1aXRlXG5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4ocmV0KTsKKyB9CisgI2Vsc2UgLyogIVNDSEVNQVMgKi8KK2RpZmYgLXVOciBhL3J1bnRlc3QuYyBiL3J1bnRlc3QuYworLS0tIGEvcnVudGVzdC5jCTIwMTMtMDQtMTYgMTM6MTk6MTUuMDg3OTk3MjkwICswMjAwCisrKysgYi9ydW50ZXN0LmMJMjAxMy0wNC0xNyAxNDowODoyOS41Mjk5NDk2NTUgKzAyMDAKK0BAIC00Mzg2LDYgKzQzODYsNyBAQAorIAkgICAgZXJyKys7CisgCX0KKyAgICAgfQorKyAgICBwcmludGYoIiVzOiAlc1xuIiwgKGVyciA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIiwgdHN0LT5kZXNjKTsKKyAgICAgcmV0dXJuKGVycik7CisgfQorIAorQEAgLTQ0NTUsNiArNDQ1Niw3IEBACisgICAgIHhtbENsZWFudXBQYXJzZXIoKTsKKyAgICAgeG1sTWVtb3J5RHVtcCgpOworIAorKyAgICBwcmludGYoIiVzOiBydW50ZXN0XG5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4ocmV0KTsKKyB9CisgCitkaWZmIC11TnIgYS9ydW54bWxjb25mLmMgYi9ydW54bWxjb25mLmMKKy0tLSBhL3J1bnhtbGNvbmYuYwkyMDEzLTA0LTE2IDEyOjUzOjQ5LjkwMDk4Mjk5MCArMDIwMAorKysrIGIvcnVueG1sY29uZi5jCTIwMTMtMDQtMTcgMTQ6MDk6MjEuMTExNzc4MTA0ICswMjAwCitAQCAtNTk1LDYgKzU5NSw3IEBACisgCisgICAgIGlmIChsb2dmaWxlICE9IE5VTEwpCisgICAgICAgICBmY2xvc2UobG9nZmlsZSk7CisrICAgIHByaW50ZigiJXM6IHJ1bnhtbGNvbmZcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4ocmV0KTsKKyB9CisgCitkaWZmIC11TnIgYS90ZXN0YXBpLmMgYi90ZXN0YXBpLmMKKy0tLSBhL3Rlc3RhcGkuYwkyMDEzLTA0LTEyIDE2OjE2OjU3Ljc2MzQxNzY1OSArMDIwMAorKysrIGIvdGVzdGFwaS5jCTIwMTMtMDQtMTcgMTQ6MTA6MjguODc2OTI0ODgxICswMjAwCitAQCAtMTI0NSw0OSArMTI0NSw5MSBAQAorIHRlc3RsaWJ4bWwyKHZvaWQpCisgeworICAgICBpbnQgdGVzdF9yZXQgPSAwOworKyAgICBpbnQgcmV0ID0gMDsKKyAKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9IVE1McGFyc2VyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfSFRNTHRyZWUoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9TQVgyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfYzE0bigpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X2NhdGFsb2coKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9jaHZhbGlkKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfZGVidWdYTUwoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9kaWN0KCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfZW5jb2RpbmcoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9lbnRpdGllcygpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X2hhc2goKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9saXN0KCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfbmFub2Z0cCgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X25hbm9odHRwKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfcGFyc2VyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfcGFyc2VySW50ZXJuYWxzKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfcGF0dGVybigpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3JlbGF4bmcoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9zY2hlbWFzSW50ZXJuYWxzKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3Rfc2NoZW1hdHJvbigpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3RyZWUoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF91cmkoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF92YWxpZCgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3hpbmNsdWRlKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sSU8oKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxhdXRvbWF0YSgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3htbGVycm9yKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sbW9kdWxlKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1scmVhZGVyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1scmVnZXhwKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sc2F2ZSgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3htbHNjaGVtYXMoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxzY2hlbWFzdHlwZXMoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxzdHJpbmcoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWx1bmljb2RlKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sd3JpdGVyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeHBhdGgoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94cGF0aEludGVybmFscygpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3hwb2ludGVyKCk7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X0hUTUxwYXJzZXIoKSk7CisrICAgIHByaW50ZigiJXM6IEhUTUxwYXJzZXJcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9IVE1MdHJlZSgpKTsKKysgICAgcHJpbnRmKCIlczogSFRNTHRyZWVcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9TQVgyKCkpOworKyAgICBwcmludGYoIiVzOiBTQVgyXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfYzE0bigpKTsKKysgICAgcHJpbnRmKCIlczogYzE0blxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2NhdGFsb2coKSk7CisrICAgIHByaW50ZigiJXM6IGNhdGFsb2dcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9jaHZhbGlkKCkpOworKyAgICBwcmludGYoIiVzOiBjaHZhbGlkXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfZGVidWdYTUwoKSk7CisrICAgIHByaW50ZigiJXM6IGRlYnVnWE1MXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfZGljdCgpKTsKKysgICAgcHJpbnRmKCIlczogZGljdFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2VuY29kaW5nKCkpOworKyAgICBwcmludGYoIiVzOiBlbmNvZGluZ1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2VudGl0aWVzKCkpOworKyAgICBwcmludGYoIiVzOiBlbnRpdGllc1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2hhc2goKSk7CisrICAgIHByaW50ZigiJXM6IGhhc2hcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9saXN0KCkpOworKyAgICBwcmludGYoIiVzOiBsaXN0XG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfbmFub2Z0cCgpKTsKKysgICAgcHJpbnRmKCIlczogbmFub2Z0cFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X25hbm9odHRwKCkpOworKyAgICBwcmludGYoIiVzOiBuYW5vaHR0cFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3BhcnNlcigpKTsKKysgICAgcHJpbnRmKCIlczogcGFyc2VyXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfcGFyc2VySW50ZXJuYWxzKCkpOworKyAgICBwcmludGYoIiVzOiBwYXJzZXJJbnRlcm5hbHNcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9wYXR0ZXJuKCkpOworKyAgICBwcmludGYoIiVzOiBwYXR0ZXJuXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfcmVsYXhuZygpKTsKKysgICAgcHJpbnRmKCIlczogcmVsYXhuZ1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3NjaGVtYXNJbnRlcm5hbHMoKSk7CisrICAgIHByaW50ZigiJXM6IHNjaGVtYXNJbnRlcm5hbHNcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9zY2hlbWF0cm9uKCkpOworKyAgICBwcmludGYoIiVzOiBzY2hlbWF0cm9uXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfdHJlZSgpKTsKKysgICAgcHJpbnRmKCIlczogdHJlZVxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3VyaSgpKTsKKysgICAgcHJpbnRmKCIlczogdXJpXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfdmFsaWQoKSk7CisrICAgIHByaW50ZigiJXM6IHZhbGlkXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeGluY2x1ZGUoKSk7CisrICAgIHByaW50ZigiJXM6IHhpbmNsdWRlXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sSU8oKSk7CisrICAgIHByaW50ZigiJXM6IHhtbElPXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sYXV0b21hdGEoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbGF1dG9tYXRhXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sZXJyb3IoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbGVycm9yXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sbW9kdWxlKCkpOworKyAgICBwcmludGYoIiVzOiB4bWxtb2R1bGVcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94bWxyZWFkZXIoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbHJlYWRlclxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHJlZ2V4cCgpKTsKKysgICAgcHJpbnRmKCIlczogeG1scmVnZXhwXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sc2F2ZSgpKTsKKysgICAgcHJpbnRmKCIlczogeG1sc2F2ZVxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHNjaGVtYXMoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbHNjaGVtYXNcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94bWxzY2hlbWFzdHlwZXMoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbHNjaGVtYXN0eXBlc1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHN0cmluZygpKTsKKysgICAgcHJpbnRmKCIlczogeG1sc3RyaW5nXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sdW5pY29kZSgpKTsKKysgICAgcHJpbnRmKCIlczogeG1sdW5pY29kZVxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHdyaXRlcigpKTsKKysgICAgcHJpbnRmKCIlczogeG1sd3JpdGVyXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeHBhdGgoKSk7CisrICAgIHByaW50ZigiJXM6IHhwYXRoXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeHBhdGhJbnRlcm5hbHMoKSk7CisrICAgIHByaW50ZigiJXM6IHhwYXRoSW50ZXJuYWxzXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeHBvaW50ZXIoKSk7CisrICAgIHByaW50ZigiJXM6IHhwb2ludGVyXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKyAKKyAgICAgcHJpbnRmKCJUb3RhbDogJWQgZnVuY3Rpb25zLCAlZCB0ZXN0cywgJWQgZXJyb3JzXG4iLAorICAgICAgICAgICAgZnVuY3Rpb25fdGVzdHMsIGNhbGxfdGVzdHMsIHRlc3RfcmV0KTsKKysKKysgICAgcHJpbnRmKCIlczogdGVzdGFwaVxuXG4iLCAodGVzdF9yZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4odGVzdF9yZXQpOworIH0KKyAKK2RpZmYgLXVOciBhL3Rlc3RjaGFyLmMgYi90ZXN0Y2hhci5jCistLS0gYS90ZXN0Y2hhci5jCTIwMTMtMDQtMTcgMTA6NTA6MzAuMjUwMTQ3NDE4ICswMjAwCisrKysgYi90ZXN0Y2hhci5jCTIwMTMtMDQtMTggMTY6MTE6MjguNDU1NzMzODAwICswMjAwCitAQCAtMjMsNyArMjMsNyBAQAorIGNoYXIgZG9jdW1lbnQxWzEwMF0gPSAiPGRvYz5YWFhYPC9kb2M+IjsKKyBjaGFyIGRvY3VtZW50MlsxMDBdID0gIjxkb2MgZm9vPSdYWFhYJy8+IjsKKyAKKy1zdGF0aWMgdm9pZCB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZG9jdW1lbnQsCisrc3RhdGljIGludCB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgaW50IGxlbiwgIGNoYXIgKmRhdGEsIGludCBmb3JiaWQxLCBpbnQgZm9yYmlkMikgeworICAgICBpbnQgaTsKKyAgICAgeG1sRG9jUHRyIHJlczsKK0BAIC0zNywzMyArMzcsNDEgQEAKKyAJcmVzID0geG1sUmVhZE1lbW9yeShkb2N1bWVudCwgbGVuLCAidGVzdCIsIE5VTEwsIDApOworIAorIAlpZiAoKGkgPT0gZm9yYmlkMSkgfHwgKGkgPT0gZm9yYmlkMikpIHsKKy0JICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKSB7CisgCSAgICAgICAgZnByaW50ZihzdGRlcnIsCisgCQkgICAgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlIDB4JTAyWDogJWNcbiIsCisgCQkgICAgICAgIGksIGkpOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgCWVsc2UgaWYgKChpID09ICc8JykgfHwgKGkgPT0gJyYnKSkgeworLQkgICAgaWYgKChsYXN0RXJyb3IgPT0gMCkgfHwgKHJlcyAhPSBOVUxMKSkKKysJICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpIHsKKyAJICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSAgICAiRmFpbGVkIHRvIGRldGVjdCBpbGxlZ2FsIGNoYXIgJWMgZm9yIEJ5dGUgMHglMDJYXG4iLCBpLCBpKTsKKysJCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAJZWxzZSBpZiAoKChpIDwgMHgyMCkgfHwgKGkgPj0gMHg4MCkpICYmCisgCSAgICAoaSAhPSAweDkpICYmIChpICE9IDB4QSkgJiYgKGkgIT0gMHhEKSkgeworLQkgICAgaWYgKChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpICYmIChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgJiYgKHJlcyAhPSBOVUxMKSkgeworIAkgICAgICAgIGZwcmludGYoc3RkZXJyLAorIAkJICAgICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZSAweCUwMlhcbiIsIGkpOworKwkJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAllbHNlIGlmIChyZXMgPT0gTlVMTCkgeworIAkgICAgZnByaW50ZihzdGRlcnIsCisgCQkiRmFpbGVkIHRvIHBhcnNlIHZhbGlkIGNoYXIgZm9yIEJ5dGUgMHglMDJYIDogJWNcbiIsIGksIGkpOworKwkJcmV0dXJuKDEpOworIAl9CisgCWlmIChyZXMgIT0gTlVMTCkKKyAJICAgIHhtbEZyZWVEb2MocmVzKTsKKyAgICAgfQorKwlyZXR1cm4oMCk7CisgfQorIAorLXN0YXRpYyB2b2lkIHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkb2N1bWVudCwKKytzdGF0aWMgaW50IHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkb2N1bWVudCwKKyAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCAgY2hhciAqZGF0YSkgeworICAgICBpbnQgaSwgajsKKyAgICAgeG1sRG9jUHRyIHJlczsKK0BAIC04MCwxMCArODgsMTIgQEAKKyAKKyAJLyogaWYgZmlyc3QgYml0IG9mIGZpcnN0IGNoYXIgaXMgc2V0LCB0aGVuIHNlY29uZCBiaXQgbXVzdCB0b28gKi8KKyAJaWYgKChpICYgMHg4MCkgJiYgKChpICYgMHg0MCkgPT0gMCkpIHsKKy0JICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTkxLDEwICsxMDEsMTIgQEAKKyAJICogYml0cyBtdXN0IGJlIDEwCisgCSAqLworIAllbHNlIGlmICgoaSAmIDB4ODApICYmICgoaiAmIDB4QzApICE9IDB4ODApKSB7CistCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKQorKwkgICAgaWYgKChsYXN0RXJyb3IgPT0gMCkgfHwgKHJlcyAhPSBOVUxMKSkgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSAgICAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJaSwgaik7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAJLyoKK0BAIC0xMDIsMTAgKzExNCwxMiBAQAorIAkgKiB0aGFuIDB4ODAsIGkuZS4gb25lIG9mIGJpdHMgNSB0byAxIG9mIGkgbXVzdCBiZSBzZXQKKyAJICovCisgCWVsc2UgaWYgKChpICYgMHg4MCkgJiYgKChpICYgMHgxRSkgPT0gMCkpIHsKKy0JICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJICAgICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTExMywxMCArMTI3LDEyIEBACisgCSAqIGF0IGxlYXN0IDMgYnl0ZXMsIGJ1dCB3ZSBnaXZlIG9ubHkgMiAhCisgCSAqLworIAllbHNlIGlmICgoaSAmIDB4RTApID09IDB4RTApIHsKKy0JICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJICAgICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweDAwXG4iLAorIAkJCWksIGopOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgCS8qCitAQCAtMTI1LDExICsxNDEsMTMgQEAKKyAJZWxzZSBpZiAoKGxhc3RFcnJvciAhPSAwKSB8fCAocmVzID09IE5VTEwpKSB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gcGFyc2UgZG9jdW1lbnQgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlhcbiIsIGksIGopOworKwkJcmV0dXJuKDEpOworIAl9CisgCWlmIChyZXMgIT0gTlVMTCkKKyAJICAgIHhtbEZyZWVEb2MocmVzKTsKKyAgICAgfQorICAgICB9CisrCXJldHVybigwKTsKKyB9CisgCisgLyoqCitAQCAtMTQxLDkgKzE1OSwxMCBAQAorICAqIENEQVRBIGluIHRleHQgb3IgaW4gYXR0cmlidXRlIHZhbHVlcy4KKyAgKi8KKyAKKy1zdGF0aWMgdm9pZCB0ZXN0RG9jdW1lbnRSYW5nZXModm9pZCkgeworK3N0YXRpYyBpbnQgdGVzdERvY3VtZW50UmFuZ2VzKHZvaWQpIHsKKyAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0OworICAgICBjaGFyICpkYXRhOworKyAgICBpbnQgdGVzdF9yZXQgPSAwOworIAorICAgICAvKgorICAgICAgKiBTZXQgdXAgYSBwYXJzaW5nIGNvbnRleHQgdXNpbmcgdGhlIGZpcnN0IGRvY3VtZW50IGFzCitAQCAtMTUyLDcgKzE3MSw3IEBACisgICAgIGN0eHQgPSB4bWxOZXdQYXJzZXJDdHh0KCk7CisgICAgIGlmIChjdHh0ID09IE5VTEwpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnNlciBjb250ZXh0XG4iKTsKKy0JcmV0dXJuOworKwlyZXR1cm4oMSk7CisgICAgIH0KKyAKKyAgICAgcHJpbnRmKCJ0ZXN0aW5nIDEgYnl0ZSBjaGFyIGluIGRvY3VtZW50OiAxIik7CitAQCAtMTYzLDcgKzE4Miw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMSBieXRlIGluamVjdGlvbiBhdCBiZWdpbm5pbmcgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIC0xLCAtMSk7CisgICAgIHByaW50ZigiIDIiKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CitAQCAtMTcyLDcgKzE5MSw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMSBieXRlIGluamVjdGlvbiBhdCBlbmQgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgKyAzLCAtMSwgLTEpOworIAorICAgICBwcmludGYoIiAzIik7CitAQCAtMTgzLDcgKzIwMiw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMSBieXRlIGluamVjdGlvbiBhdCBiZWdpbm5pbmcgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDJbMF0sIHN0cmxlbihkb2N1bWVudDIpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDJbMF0sIHN0cmxlbihkb2N1bWVudDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsICdcJycsIC0xKTsKKyAgICAgcHJpbnRmKCIgNCIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKK0BAIC0xOTIsNyArMjExLDcgQEAKKyAgICAgZGF0YVsyXSA9ICcgJzsKKyAgICAgZGF0YVszXSA9ICcgJzsKKyAgICAgLyogdGVzdCAxIGJ5dGUgaW5qZWN0aW9uIGF0IGVuZCBvZiBhcmVhICovCistICAgIHRlc3REb2N1bWVudFJhbmdlQnl0ZTEoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisrICAgIHRlc3RfcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlQnl0ZTEoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSArIDMsICdcJycsIC0xKTsKKyAgICAgcHJpbnRmKCIgZG9uZVxuIik7CisgCitAQCAtMjA0LDcgKzIyMyw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMiBieXRlIGluamVjdGlvbiBhdCBiZWdpbm5pbmcgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUyKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUyKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOworICAgICBwcmludGYoIiAyIik7CisgICAgIGZmbHVzaChzdGRvdXQpOworQEAgLTIxMyw3ICsyMzIsNyBAQAorICAgICBkYXRhWzJdID0gJyAnOworICAgICBkYXRhWzNdID0gJyAnOworICAgICAvKiB0ZXN0IDIgYnl0ZSBpbmplY3Rpb24gYXQgZW5kIG9mIGFyZWEgKi8KKy0gICAgdGVzdERvY3VtZW50UmFuZ2VCeXRlMihjdHh0LCAmZG9jdW1lbnQxWzBdLCBzdHJsZW4oZG9jdW1lbnQxKSwKKysgICAgdGVzdF9yZXQgKz0gdGVzdERvY3VtZW50UmFuZ2VCeXRlMihjdHh0LCAmZG9jdW1lbnQxWzBdLCBzdHJsZW4oZG9jdW1lbnQxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICsgMik7CisgCisgICAgIHByaW50ZigiIDMiKTsKK0BAIC0yMjQsNyArMjQzLDcgQEAKKyAgICAgZGF0YVsyXSA9ICcgJzsKKyAgICAgZGF0YVszXSA9ICcgJzsKKyAgICAgLyogdGVzdCAyIGJ5dGUgaW5qZWN0aW9uIGF0IGJlZ2lubmluZyBvZiBhcmVhICovCistICAgIHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisrICAgIHRlc3RfcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSk7CisgICAgIHByaW50ZigiIDQiKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CitAQCAtMjMzLDE0ICsyNTIsMTUgQEAKKyAgICAgZGF0YVsyXSA9ICcgJzsKKyAgICAgZGF0YVszXSA9ICcgJzsKKyAgICAgLyogdGVzdCAyIGJ5dGUgaW5qZWN0aW9uIGF0IGVuZCBvZiBhcmVhICovCistICAgIHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisrICAgIHRlc3RfcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSArIDIpOworICAgICBwcmludGYoIiBkb25lXG4iKTsKKyAKKyAgICAgeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisrICAgIHJldHVybih0ZXN0X3JldCk7CisgfQorIAorLXN0YXRpYyB2b2lkIHRlc3RDaGFyUmFuZ2VCeXRlMSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKytzdGF0aWMgaW50IHRlc3RDaGFyUmFuZ2VCeXRlMSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKyAgICAgaW50IGkgPSAwOworICAgICBpbnQgbGVuLCBjOworIAorQEAgLTI1NSwxOSArMjc1LDI1IEBACisgICAgICAgICBjID0geG1sQ3VycmVudENoYXIoY3R4dCwgJmxlbik7CisgCWlmICgoaSA9PSAwKSB8fCAoaSA+PSAweDgwKSkgeworIAkgICAgLyogd2UgbXVzdCBzZWUgYW4gZXJyb3IgdGhlcmUgKi8KKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCSAgICAgICAgZnByaW50ZihzdGRlcnIsCisgCQkgICAgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlIDB4JTAyWFxuIiwgaSk7CisrCQkJcmV0dXJuKDEpOworKwkJfQorIAl9IGVsc2UgaWYgKGkgPT0gMHhEKSB7CistCSAgICBpZiAoKGMgIT0gMHhBKSB8fCAobGVuICE9IDEpKQorKwkgICAgaWYgKChjICE9IDB4QSkgfHwgKGxlbiAhPSAxKSkgeworIAkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gY29udmVydCBjaGFyIGZvciBCeXRlIDB4JTAyWFxuIiwgaSk7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0gZWxzZSBpZiAoKGMgIT0gaSkgfHwgKGxlbiAhPSAxKSkgeworIAkgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZSAweCUwMlhcbiIsIGkpOworKwkJcmV0dXJuKDEpOworIAl9CisgICAgIH0KKysJcmV0dXJuKDApOworIH0KKyAKKy1zdGF0aWMgdm9pZCB0ZXN0Q2hhclJhbmdlQnl0ZTIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkYXRhKSB7Cisrc3RhdGljIGludCB0ZXN0Q2hhclJhbmdlQnl0ZTIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkYXRhKSB7CisgICAgIGludCBpLCBqOworICAgICBpbnQgbGVuLCBjOworIAorQEAgLTI4NCwxMCArMzEwLDEyIEBACisgCisgCSAgICAvKiBpZiBmaXJzdCBiaXQgb2YgZmlyc3QgY2hhciBpcyBzZXQsIHRoZW4gc2Vjb25kIGJpdCBtdXN0IHRvbyAqLworIAkgICAgaWYgKChpICYgMHg4MCkgJiYgKChpICYgMHg0MCkgPT0gMCkpIHsKKy0JCWlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCQlpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQkgICAgZnByaW50ZihzdGRlcnIsCisgCQkgICAgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYXG4iLAorIAkJICAgICAgICAgICAgaSwgaik7CisrCQkJcmV0dXJuKDEpOworKwkJCX0KKyAJICAgIH0KKyAKKyAJICAgIC8qCitAQCAtMjk1LDEwICszMjMsMTIgQEAKKyAJICAgICAqIGJpdHMgbXVzdCBiZSAxMAorIAkgICAgICovCisgCSAgICBlbHNlIGlmICgoaSAmIDB4ODApICYmICgoaiAmIDB4QzApICE9IDB4ODApKSB7CistCQlpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkJaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJICAgIGZwcmludGYoc3RkZXJyLAorIAkJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYOiAlZFxuIiwKKyAJCSAgICAgICAgICAgIGksIGosIGMpOworKwkJCXJldHVybigxKTsKKysJCQl9CisgCSAgICB9CisgCisgCSAgICAvKgorQEAgLTMwNiwxMCArMzM2LDEyIEBACisgCSAgICAgKiB0aGFuIDB4ODAsIGkuZS4gb25lIG9mIGJpdHMgNSB0byAxIG9mIGkgbXVzdCBiZSBzZXQKKyAJICAgICAqLworIAkgICAgZWxzZSBpZiAoKGkgJiAweDgwKSAmJiAoKGkgJiAweDFFKSA9PSAwKSkgeworLQkJaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJCWlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWDogJWRcbiIsCisgCQkgICAgICAgICAgICBpLCBqLCBjKTsKKysJCQlyZXR1cm4oMSk7CisrCQkJfQorIAkgICAgfQorIAorIAkgICAgLyoKK0BAIC0zMTcsMTAgKzM0OSwxMiBAQAorIAkgICAgICogYXQgbGVhc3QgMyBieXRlcywgYnV0IHdlIGdpdmUgb25seSAyICEKKyAJICAgICAqLworIAkgICAgZWxzZSBpZiAoKGkgJiAweEUwKSA9PSAweEUwKSB7CistCQlpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkJaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJICAgIGZwcmludGYoc3RkZXJyLAorIAkJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4MDBcbiIsCisgCQkgICAgICAgICAgICBpLCBqKTsKKysJCQlyZXR1cm4oMSk7CisrCQkJfQorIAkgICAgfQorIAorICAgICAgICAgICAgIC8qCitAQCAtMzI5LDYgKzM2Myw3IEBACisgCSAgICBlbHNlIGlmICgobGFzdEVycm9yICE9IDApIHx8IChsZW4gIT0gMikpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorIAkJICAgICJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWFxuIiwgaSwgaik7CisrCQlyZXR1cm4oMSk7CisgCSAgICB9CisgCisgICAgICAgICAgICAgLyoKK0BAIC0zMzgsMTIgKzM3MywxNCBAQAorIAkJZnByaW50ZihzdGRlcnIsCisgCSJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWDogZXhwZWN0ICVkIGdvdCAlZFxuIiwKKyAJICAgICAgICAgICAgICAgIGksIGosICgoaiAmIDB4M0YpICsgKChpICYgMHgxRikgPDwgNikpLCBjKTsKKysJCXJldHVybigxKTsKKyAJICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQorKwlyZXR1cm4oMCk7CisgfQorIAorLXN0YXRpYyB2b2lkIHRlc3RDaGFyUmFuZ2VCeXRlMyh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKytzdGF0aWMgaW50IHRlc3RDaGFyUmFuZ2VCeXRlMyh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKyAgICAgaW50IGksIGosIGssIEs7CisgICAgIGludCBsZW4sIGM7CisgICAgIHVuc2lnbmVkIGNoYXIgbG93c1s2XSA9IHswLCAweDgwLCAweDgxLCAweEMxLCAweEZGLCAweEJGfTsKK0BAIC0zNjgsMjAgKzQwNSwyNCBAQAorIAkgKiBhdCBsZWFzdCA0IGJ5dGVzLCBidXQgd2UgZ2l2ZSBvbmx5IDMgIQorIAkgKi8KKyAJaWYgKChpICYgMHhGMCkgPT0gMHhGMCkgeworLQkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorIAkiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqLCBLLCBkYXRhWzNdKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorICAgICAgICAgLyoKKyAJICogVGhlIHNlY29uZCBhbmQgdGhlIHRoaXJkIGJ5dGVzIG11c3Qgc3RhcnQgd2l0aCAxMAorIAkgKi8KKyAJZWxzZSBpZiAoKChqICYgMHhDMCkgIT0gMHg4MCkgfHwgKChLICYgMHhDMCkgIT0gMHg4MCkpIHsKKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqLCBLKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTM5MCwxMCArNDMxLDEyIEBACisgCSAqIHRoZSA2dGggYnl0ZSBvZiBkYXRhWzFdIG11c3QgYmUgc2V0CisgCSAqLworIAllbHNlIGlmICgoKGkgJiAweEYpID09IDApICYmICgoaiAmIDB4MjApID09IDApKSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSAgICAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJCWksIGosIEspOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgICAgICAgICAvKgorQEAgLTQwMSwxMCArNDQ0LDEyIEBACisgCSAqLworIAllbHNlIGlmICgoKHZhbHVlID4gMHhEN0ZGKSAmJiAodmFsdWUgPDB4RTAwMCkpIHx8CisgCSAgICAgICAgICgodmFsdWUgPiAweEZGRkQpICYmICh2YWx1ZSA8MHgxMDAwMCkpKSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciAweCUwNFggZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJCXZhbHVlLCBpLCBqLCBLKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTQxNCw2ICs0NTksNyBAQAorIAkgICAgZnByaW50ZihzdGRlcnIsCisgCQkiRmFpbGVkIHRvIHBhcnNlIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJICAgIGksIGosIEspOworKwkJcmV0dXJuKDEpOworIAl9CisgCisgCS8qCitAQCAtNDIzLDEzICs0NjksMTUgQEAKKyAJICAgIGZwcmludGYoc3RkZXJyLAorICAgICAiRmFpbGVkIHRvIHBhcnNlIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYOiBleHBlY3QgJWQgZ290ICVkXG4iLAorIAkJaSwgaiwgZGF0YVsyXSwgdmFsdWUsIGMpOworKwkJcmV0dXJuKDEpOworIAl9CisgICAgIH0KKyAgICAgfQorICAgICB9CisrCXJldHVybigwKTsKKyB9CisgCistc3RhdGljIHZvaWQgdGVzdENoYXJSYW5nZUJ5dGU0KHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZGF0YSkgeworK3N0YXRpYyBpbnQgdGVzdENoYXJSYW5nZUJ5dGU0KHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZGF0YSkgeworICAgICBpbnQgaSwgaiwgaywgSywgbCwgTDsKKyAgICAgaW50IGxlbiwgYzsKKyAgICAgdW5zaWduZWQgY2hhciBsb3dzWzZdID0gezAsIDB4ODAsIDB4ODEsIDB4QzEsIDB4RkYsIDB4QkZ9OworQEAgLTQ1OCwxMCArNTA2LDEyIEBACisgCSAqIGF0IGxlYXN0IDUgYnl0ZXMsIGJ1dCB3ZSBnaXZlIG9ubHkgNCAhCisgCSAqLworIAlpZiAoKGkgJiAweEY4KSA9PSAweEY4KSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgICAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqLCBLLCBkYXRhWzNdKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorICAgICAgICAgLyoKK0BAIC00NjksMTAgKzUxOSwxMiBAQAorIAkgKi8KKyAJZWxzZSBpZiAoKChqICYgMHhDMCkgIT0gMHg4MCkgfHwgKChLICYgMHhDMCkgIT0gMHg4MCkgfHwKKyAJICAgICAgICAgKChMICYgMHhDMCkgIT0gMHg4MCkpIHsKKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJaSwgaiwgSywgTCk7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAJLyoKK0BAIC00ODEsMTAgKzUzMywxMiBAQAorIAkgKiB0aGUgNiBvciA1dGggYnl0ZSBvZiBqIG11c3QgYmUgc2V0CisgCSAqLworIAllbHNlIGlmICgoKGkgJiAweDcpID09IDApICYmICgoaiAmIDB4MzApID09IDApKSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJCWksIGosIEssIEwpOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgICAgICAgICAvKgorQEAgLTQ5MywxMCArNTQ3LDEyIEBACisgCWVsc2UgaWYgKCgodmFsdWUgPiAweEQ3RkYpICYmICh2YWx1ZSA8MHhFMDAwKSkgfHwKKyAJICAgICAgICAgKCh2YWx1ZSA+IDB4RkZGRCkgJiYgKHZhbHVlIDwweDEwMDAwKSkgfHwKKyAJCSAodmFsdWUgPiAweDEwRkZGRikpIHsKKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgMHglMDRYIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJdmFsdWUsIGksIGosIEssIEwpOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgCS8qCitAQCAtNTA2LDYgKzU2Miw3IEBACisgCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkgICAgaSwgaiwgSyk7CisrCQlyZXR1cm4oMSk7CisgCX0KKyAKKyAJLyoKK0BAIC01MTUsMTEgKzU3MiwxMyBAQAorIAkgICAgZnByaW50ZihzdGRlcnIsCisgICAgICJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlg6IGV4cGVjdCAlZCBnb3QgJWRcbiIsCisgCQlpLCBqLCBkYXRhWzJdLCB2YWx1ZSwgYyk7CisrCQlyZXR1cm4oMSk7CisgCX0KKyAgICAgfQorICAgICB9CisgICAgIH0KKyAgICAgfQorKwlyZXR1cm4oMCk7CisgfQorIAorIC8qKgorQEAgLTUzMCwxMSArNTg5LDEyIEBACisgICogY292ZXIgdGhlIGZ1bGwgcmFuZ2Ugb2YgVVRGLTggY2hhcnMgYWNjZXB0ZWQgYnkgWE1MLTEuMAorICAqLworIAorLXN0YXRpYyB2b2lkIHRlc3RDaGFyUmFuZ2VzKHZvaWQpIHsKKytzdGF0aWMgaW50IHRlc3RDaGFyUmFuZ2VzKHZvaWQpIHsKKyAgICAgY2hhciBkYXRhWzVdOworICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CisgICAgIHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGJ1ZjsKKyAgICAgeG1sUGFyc2VySW5wdXRQdHIgaW5wdXQ7CisrICAgIGludCB0ZXN0X3JldCA9IDA7CisgCisgICAgIG1lbXNldChkYXRhLCAwLCA1KTsKKyAKK0BAIC01NDUsMTcgKzYwNSwxOSBAQAorICAgICBjdHh0ID0geG1sTmV3UGFyc2VyQ3R4dCgpOworICAgICBpZiAoY3R4dCA9PSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBhbGxvY2F0ZSBwYXJzZXIgY29udGV4dFxuIik7CistCXJldHVybjsKKysJcmV0dXJuKDEpOworICAgICB9CisgICAgIGJ1ZiA9IHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlU3RhdGljKGRhdGEsIHNpemVvZihkYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0NIQVJfRU5DT0RJTkdfTk9ORSk7CisgICAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWxsb2NhdGUgaW5wdXQgYnVmZmVyXG4iKTsKKysgICAgICAgIHRlc3RfcmV0ID0gMTsKKyAJZ290byBlcnJvcjsKKyAgICAgfQorICAgICBpbnB1dCA9IHhtbE5ld0lucHV0U3RyZWFtKGN0eHQpOworICAgICBpZiAoaW5wdXQgPT0gTlVMTCkgeworICAgICAgICAgeG1sRnJlZVBhcnNlcklucHV0QnVmZmVyKGJ1Zik7CisrICAgICAgICB0ZXN0X3JldCA9IDE7CisgCWdvdG8gZXJyb3I7CisgICAgIH0KKyAgICAgaW5wdXQtPmZpbGVuYW1lID0gTlVMTDsKK0BAIC01NjcsMjUgKzYyOSwyOCBAQAorIAorICAgICBwcmludGYoInRlc3RpbmcgY2hhciByYW5nZTogMSIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKKy0gICAgdGVzdENoYXJSYW5nZUJ5dGUxKGN0eHQsIGRhdGEpOworKyAgICB0ZXN0X3JldCArPSB0ZXN0Q2hhclJhbmdlQnl0ZTEoY3R4dCwgZGF0YSk7CisgICAgIHByaW50ZigiIDIiKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CistICAgIHRlc3RDaGFyUmFuZ2VCeXRlMihjdHh0LCBkYXRhKTsKKysgICAgdGVzdF9yZXQgKz0gdGVzdENoYXJSYW5nZUJ5dGUyKGN0eHQsIGRhdGEpOworICAgICBwcmludGYoIiAzIik7CisgICAgIGZmbHVzaChzdGRvdXQpOworLSAgICB0ZXN0Q2hhclJhbmdlQnl0ZTMoY3R4dCwgZGF0YSk7CisrICAgIHRlc3RfcmV0ICs9IHRlc3RDaGFyUmFuZ2VCeXRlMyhjdHh0LCBkYXRhKTsKKyAgICAgcHJpbnRmKCIgNCIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKKy0gICAgdGVzdENoYXJSYW5nZUJ5dGU0KGN0eHQsIGRhdGEpOworKyAgICB0ZXN0X3JldCArPSB0ZXN0Q2hhclJhbmdlQnl0ZTQoY3R4dCwgZGF0YSk7CisgICAgIHByaW50ZigiIGRvbmVcbiIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKKyAKKyBlcnJvcjoKKyAgICAgeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisrICAgIHJldHVybih0ZXN0X3JldCk7CisgfQorIAorIGludCBtYWluKHZvaWQpIHsKKyAKKysgICAgaW50IHJldCA9IDA7CisrCisgICAgIC8qCisgICAgICAqIHRoaXMgaW5pdGlhbGl6ZSB0aGUgbGlicmFyeSBhbmQgY2hlY2sgcG90ZW50aWFsIEFCSSBtaXNtYXRjaGVzCisgICAgICAqIGJldHdlZW4gdGhlIHZlcnNpb24gaXQgd2FzIGNvbXBpbGVkIGZvciBhbmQgdGhlIGFjdHVhbCBzaGFyZWQKK0BAIC02MDIsOCArNjY3LDkgQEAKKyAgICAgLyoKKyAgICAgICogUnVuIHRoZSB0ZXN0cworICAgICAgKi8KKy0gICAgdGVzdENoYXJSYW5nZXMoKTsKKy0gICAgdGVzdERvY3VtZW50UmFuZ2VzKCk7CisrICAgIHJldCArPSB0ZXN0Q2hhclJhbmdlcygpOworKyAgICByZXQgKz0gdGVzdERvY3VtZW50UmFuZ2VzKCk7CisrICAgIHByaW50ZigiJXM6IHRlc3RjaGFyXG5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworIAorICAgICAvKgorICAgICAgKiBDbGVhbnVwIGZ1bmN0aW9uIGZvciB0aGUgWE1MIGxpYnJhcnkuCitkaWZmIC11TnIgYS90ZXN0ZGljdC5jIGIvdGVzdGRpY3QuYworLS0tIGEvdGVzdGRpY3QuYwkyMDEzLTA0LTE2IDE1OjA4OjQyLjk3MTE3NzE5MyArMDIwMAorKysrIGIvdGVzdGRpY3QuYwkyMDEzLTA0LTE4IDE1OjU5OjAwLjY5OTQ4MjQzOSArMDIwMAorQEAgLTQ0MCw1ICs0NDAsNiBAQAorICAgICBjbGVhbl9zdHJpbmdzKCk7CisgICAgIHhtbENsZWFudXBQYXJzZXIoKTsKKyAgICAgeG1sTWVtb3J5RHVtcCgpOworKyAgICBwcmludGYoIiVzOiB0ZXN0ZGljdFxuXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKyAgICAgcmV0dXJuKHJldCk7CisgfQorZGlmZiAtdU5yIGEvdGVzdGxpbWl0cy5jIGIvdGVzdGxpbWl0cy5jCistLS0gYS90ZXN0bGltaXRzLmMJMjAxMy0wNC0xMiAxNjoxNjozNi4xODAzNTQxNzcgKzAyMDAKKysrKyBiL3Rlc3RsaW1pdHMuYwkyMDEzLTA0LTE3IDE0OjAzOjE3LjIwMzA5Mjk4NyArMDIwMAorQEAgLTE2MzAsNSArMTYzMCw2IEBACisgICAgIHhtbENsZWFudXBQYXJzZXIoKTsKKyAgICAgeG1sTWVtb3J5RHVtcCgpOworIAorKyAgICBwcmludGYoIiVzOiB0ZXN0bGltaXRzXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKyAgICAgcmV0dXJuKHJldCk7CisgfQorZGlmZiAtdU5yIGEvdGVzdHJlY3Vyc2UuYyBiL3Rlc3RyZWN1cnNlLmMKKy0tLSBhL3Rlc3RyZWN1cnNlLmMJMjAxMy0wNC0xNiAxMzoxOTo0OS4zNjY1MzYyOTUgKzAyMDAKKysrKyBiL3Rlc3RyZWN1cnNlLmMJMjAxMy0wNC0xNyAxNDowNjoyNy4zNjcwOTE2MjIgKzAyMDAKK0BAIC04OTIsNiArODkyLDcgQEAKKyAJICAgIGVycisrOworIAl9CisgICAgIH0KKysgICAgcHJpbnRmKCIlczogJXNcbiIsIChlcnIgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIsIHRzdC0+ZGVzYyk7CisgICAgIHJldHVybihlcnIpOworIH0KKyAKK0BAIC05NjEsNSArOTYyLDYgQEAKKyAgICAgeG1sQ2xlYW51cFBhcnNlcigpOworICAgICB4bWxNZW1vcnlEdW1wKCk7CisgCisrICAgIHByaW50ZigiJXM6IHRlc3RyZWN1cnNlXG5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4ocmV0KTsKKyB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyXzIuOS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMl8yLjkuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWEzOTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMl8yLjkuMi5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIGxpYnhtbDIuaW5jCisKK1NSQ19VUkkgKz0gImh0dHA6Ly93d3cudzMub3JnL1hNTC9UZXN0L3htbHRzMjAwODA4MjcudGFyLmd6O25hbWU9dGVzdHRhciBcCisgICAgICAgICAgICBmaWxlOi8vNzJhNDZhNTE5Y2U3MzI2ZDlhMDBmMGI2YTdmMmE4ZTk1OGNkMTY3NS5wYXRjaCBcCisJICAgIGZpbGU6Ly8wMDAxLXRocmVhZHMtRGVmaW5lLXB0aHJlYWQtZGVmaW5pdGlvbnMtZm9yLWdsaWJjLWNvbXBsaWEucGF0Y2ggXAorCSAgICIKKworU1JDX1VSSVtsaWJ0YXIubWQ1c3VtXSA9ICI5ZTZhOWFjYTlkMTU1NzM3ODY4YjNkYzVmZDgyZjc4OCIKK1NSQ19VUklbbGlidGFyLnNoYTI1NnN1bV0gPSAiNTE3OGMzMGIxNTFkMDQ0YWVmYjFiMDhiZjU0YzMwMDNhMGFjNTVjNTljODY2NzYzOTk3NTI5ZDYwNzcwZDViYyIKK1NSQ19VUklbdGVzdHRhci5tZDVzdW1dID0gImFlM2QxZWJlMDAwYTM5NzJhZmExMDRjYTdmMGUxYjRhIgorU1JDX1VSSVt0ZXN0dGFyLnNoYTI1NnN1bV0gPSAiOTYxNTE2ODVjZWM5OTdlMWY5ZjMzODdlMzYyNmQ2MWU2Mjg0ZDRkNmU2NmUwZTQ0MGMyMDkyODZjMDNlOWNjNyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9idWlsZHRvb2xzLXRhcmJhbGwuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvYnVpbGR0b29scy10YXJiYWxsLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MDQzNGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvYnVpbGR0b29scy10YXJiYWxsLmJiCkBAIC0wLDAgKzEsNTkgQEAKK0RFU0NSSVBUSU9OID0gIlNESyB0eXBlIHRhcmdldCBmb3IgYnVpbGRpbmcgYSBzdGFuZGFsb25lIHRhcmJhbGwgY29udGFpbmluZyBweXRob24sIGNocnBhdGgsIG1ha2UsIGdpdCBhbmQgdGFyLiBUaGUgXAorICAgICAgICAgICAgICAgdGFyYmFsbCBjYW4gYmUgdXNlZCB0byBydW4gYml0YmFrZSBidWlsZHMgb24gc3lzdGVtcyB3aGljaCBkb24ndCBtZWV0IHRoZSB1c3VhbCB2ZXJzaW9uIHJlcXVpcmVtZW50cy4iCitTVU1NQVJZID0gIlN0YW5kYWxvbmUgdGFyYmFsbCBmb3IgcnVubmluZyBidWlsZHMgb24gc3lzdGVtcyB3aXRoIGluYWRlcXVhdGUgc29mdHdhcmUiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitUT09MQ0hBSU5fVEFSR0VUX1RBU0sgPz0gIiIKKworVE9PTENIQUlOX0hPU1RfVEFTSyA/PSAiXAorICAgIG5hdGl2ZXNkay1weXRob24tY29yZSBcCisgICAgbmF0aXZlc2RrLXB5dGhvbi1tb2R1bGVzIFwKKyAgICBuYXRpdmVzZGstcHl0aG9uLW1pc2MgXAorICAgIG5hdGl2ZXNkay1weXRob24tZ2l0IFwKKyAgICBuYXRpdmVzZGstcHl0aG9uLXBleHBlY3QgXAorICAgIG5hdGl2ZXNkay1uY3Vyc2VzLXRlcm1pbmZvLWJhc2UgXAorICAgIG5hdGl2ZXNkay1jaHJwYXRoIFwKKyAgICBuYXRpdmVzZGstdGFyIFwKKyAgICBuYXRpdmVzZGstYnVpbGR0b29scy1wZXJsLWR1bW15IFwKKyAgICBuYXRpdmVzZGstZ2l0IFwKKyAgICBuYXRpdmVzZGstZ2l0LXBlcmx0b29scyBcCisgICAgbmF0aXZlc2RrLXBpZ3ogXAorICAgIG5hdGl2ZXNkay1tYWtlIFwKKyAgICBuYXRpdmVzZGstd2dldCBcCisgICAgbmF0aXZlc2RrLWNhLWNlcnRpZmljYXRlcyBcCisgICAgIgorCitTREtfUEFDS0FHRV9BUkNIUyA9KyAiYnVpbGR0b29scy1kdW1teS0ke1NES1BLR1NVRkZJWH0iCisKK1RPT0xDSEFJTl9PVVRQVVROQU1FID89ICIke1NES19OQU1FfS1idWlsZHRvb2xzLW5hdGl2ZXNkay1zdGFuZGFsb25lLSR7RElTVFJPX1ZFUlNJT059IgorCitTREtfVElUTEUgPSAiQnVpbGQgdG9vbHMiCisKK1JERVBFTkRTID0gIiR7VE9PTENIQUlOX0hPU1RfVEFTS30iCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorCitpbmhlcml0IG1ldGEKK2luaGVyaXQgcG9wdWxhdGVfc2RrCitpbmhlcml0IHRvb2xjaGFpbi1zY3JpcHRzCisKK2NyZWF0ZV9zZGtfZmlsZXNfYXBwZW5kICgpIHsKKwlybSAtZiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vc2l0ZS1jb25maWctKgorCXJtIC1mICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS9lbnZpcm9ubWVudC1zZXR1cC0qCisJcm0gLWYgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3ZlcnNpb24tKgorCisJIyBHZW5lcmF0ZSBuZXcgKG1pbmkpIHNkay1lbnZpcm9ubWVudC1zZXR1cCBmaWxlCisJc2NyaXB0PSR7MTotJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L2Vudmlyb25tZW50LXNldHVwLSR7U0RLX1NZU319CisJdG91Y2ggJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBQQVRIPSR7U0RLUEFUSE5BVElWRX0ke2JpbmRpcl9uYXRpdmVzZGt9OiRQQVRIJyA+PiAkc2NyaXB0CisJIyBJbiBvcmRlciBmb3IgdGhlIHNlbGYtZXh0cmFjdGlvbiBzY3JpcHQgdG8gY29ycmVjdGx5IGV4dHJhY3QgYW5kIHNldCB1cCB0aGluZ3MsCisJIyB3ZSBuZWVkIGEgJ09FQ09SRV9OQVRJVkVfU1lTUk9PVD14eHgnIGxpbmUgaW4gZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LgorCSMgSG93ZXZlciwgYnVpbGR0b29scy10YXJiYWxsIGlzIGluaGVyZW50bHkgYSB0b29sIHNldCBpbnN0ZWFkIG9mIGEgZnVsbHkgZnVuY3Rpb25hbCBTREssCisJIyBzbyBpbnN0ZWFkIG9mIGV4cG9ydGluZyB0aGUgdmFyaWFibGUsIHdlIHVzZSBhIGNvbW1lbnQgaGVyZS4KKwllY2hvICcjT0VDT1JFX05BVElWRV9TWVNST09UPSIke1NES1BBVEhOQVRJVkV9IicgPj4gJHNjcmlwdAorCXRvb2xjaGFpbl9jcmVhdGVfc2RrX3ZlcnNpb24gJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3ZlcnNpb24tJHtTREtfU1lTfQorCisJZWNobyAnZXhwb3J0IEdJVF9TU0xfQ0FJTkZPPSIke1NES1BBVEhOQVRJVkV9JHtzeXNjb25mZGlyfS9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCInID4+JHNjcmlwdAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtZW52aXJvbm1lbnQtZXh0c2RrLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtZW52aXJvbm1lbnQtZXh0c2RrLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZTU5NjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1lbnZpcm9ubWVudC1leHRzZGsuYmIKQEAgLTAsMCArMSwxMiBAQAorIyBtZXRhLWVudmlyb25tZW50IGZvciBleHRlbnNpYmxlIFNESworCityZXF1aXJlIG1ldGEtZW52aXJvbm1lbnQuYmIKKworUE4gPSAibWV0YS1lbnZpcm9ubWVudC1leHRzZGstJHtNQUNISU5FfSIKKworY3JlYXRlX3Nka19maWxlc19hcHBlbmQoKSB7CisJbG9jYWwgc3lzcm9vdD0ke1NES1BBVEh9LyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignU1RBR0lOR19ESVJfVEFSR0VUJywgVHJ1ZSksIGQuZ2V0VmFyKCdUT1BESVInLCBUcnVlKSl9CisJbG9jYWwgc2RrcGF0aG5hdGl2ZT0ke1NES1BBVEh9LyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignU1RBR0lOR19ESVJfTkFUSVZFJyxUcnVlKSwgZC5nZXRWYXIoJ1RPUERJUicsIFRydWUpKX0KKworCXRvb2xjaGFpbl9jcmVhdGVfc2RrX2Vudl9zY3JpcHQgJycgJycgJHN5c3Jvb3QgJycgJHtiaW5kaXJfbmF0aXZlfSAke3ByZWZpeF9uYXRpdmV9ICRzZGtwYXRobmF0aXZlCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1lbnZpcm9ubWVudC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWVudmlyb25tZW50LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZDQ1ZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1lbnZpcm9ubWVudC5iYgpAQCAtMCwwICsxLDc1IEBACitTVU1NQVJZID0gIlBhY2thZ2Ugb2YgZW52aXJvbm1lbnQgZmlsZXMgZm9yIFNESyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyOCIKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK01PRElGWVRPUyA9ICIwIgorCitSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTID0gIiR7VFVORV9QS0dBUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgorCitpbmhlcml0IHRvb2xjaGFpbi1zY3JpcHRzCitUT09MQ0hBSU5fTkVFRF9DT05GSUdTSVRFX0NBQ0hFX2FwcGVuZCA9ICIgemxpYiIKKworU0RLX0RJUiA9ICIke1dPUktESVJ9L3NkayIKK1NES19PVVRQVVQgPSAiJHtTREtfRElSfS9pbWFnZSIKK1NES1RBUkdFVFNZU1JPT1QgPSAiJHtTREtQQVRIfS9zeXNyb290cy8ke1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVN9IgorCitpbmhlcml0IGNyb3NzLWNhbmFkaWFuCisKK2RvX2dlbmVyYXRlX2NvbnRlbnRbY2xlYW5kaXJzXSA9ICIke1NES19PVVRQVVR9IgorZG9fZ2VuZXJhdGVfY29udGVudFtkaXJzXSA9ICIke1NES19PVVRQVVR9LyR7U0RLUEFUSH0iCitweXRob24gZG9fZ2VuZXJhdGVfY29udGVudCgpIHsKKyAgICAjIEhhbmRsZSBtdWx0aWxpYnMgaW4gdGhlIFNESyBlbnZpcm9ubWVudCwgc2l0ZWNvbmZpZywgZXRjIGZpbGVzLi4uCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisKKyAgICAjIG1ha2Ugc3VyZSB3ZSBvbmx5IHVzZSB0aGUgV09SS0RJUiB2YWx1ZSBmcm9tICdkJywgb3IgaXQgY2FuIGNoYW5nZQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1dPUktESVInLCBkLmdldFZhcignV09SS0RJUicsIFRydWUpKQorCisgICAgIyBtYWtlIHN1cmUgd2Ugb25seSB1c2UgdGhlIFNES1RBUkdFVFNZU1JPT1QgdmFsdWUgZnJvbSAnZCcKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdTREtUQVJHRVRTWVNST09UJywgZC5nZXRWYXIoJ1NES1RBUkdFVFNZU1JPT1QnLCBUcnVlKSkKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdsaWJkaXInLCBkLmdldFZhcigndGFyZ2V0X2xpYmRpcicsIEZhbHNlKSkKKworICAgICMgUHJvY2VzcyBERUZBVUxUVFVORQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiY3JlYXRlX3Nka19maWxlcyIsIGxvY2FsZGF0YSkKKworICAgIHZhcmlhbnRzID0gZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIKKyAgICBmb3IgaXRlbSBpbiB2YXJpYW50cy5zcGxpdCgpOgorICAgICAgICAjIExvYWQgb3ZlcnJpZGVzIGZyb20gJ2QnIHRvIGF2b2lkIGhhdmluZyB0byByZXNldCB0aGUgdmFsdWUuLi4KKyAgICAgICAgb3ZlcnJpZGVzID0gZC5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyBpdGVtCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIG92ZXJyaWRlcykKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiTUxQUkVGSVgiLCBpdGVtICsgIi0iKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJjcmVhdGVfc2RrX2ZpbGVzIiwgbG9jYWxkYXRhKQorfQorYWRkdGFzayBnZW5lcmF0ZV9jb250ZW50IGJlZm9yZSBkb19pbnN0YWxsIGFmdGVyIGRvX2NvbXBpbGUKKworY3JlYXRlX3Nka19maWxlcygpIHsKKwkjIFNldHVwIHNpdGUgZmlsZSBmb3IgZXh0ZXJuYWwgdXNlCisJdG9vbGNoYWluX2NyZWF0ZV9zZGtfc2l0ZWNvbmZpZyAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vc2l0ZS1jb25maWctJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCisJdG9vbGNoYWluX2NyZWF0ZV9zZGtfZW52X3NjcmlwdCAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vZW52aXJvbm1lbnQtc2V0dXAtJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCisJIyBBZGQgdmVyc2lvbiBpbmZvcm1hdGlvbgorCXRvb2xjaGFpbl9jcmVhdGVfc2RrX3ZlcnNpb24gJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3ZlcnNpb24tJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfQorfQorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke1NES1BBVEh9CisgICAgaW5zdGFsbCAtbSAwNjQ0IC10ICR7RH0vJHtTREtQQVRIfSAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vKgorfQorCitQTiA9ICJtZXRhLWVudmlyb25tZW50LSR7TUFDSElORX0iCitQQUNLQUdFUyA9ICIke1BOfSIKK0ZJTEVTXyR7UE59PSAiIFwKKyAgICAke1NES1BBVEh9LyogXAorICAgICIKKworZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbbm9leGVjXSA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtaWRlLXN1cHBvcnQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1pZGUtc3VwcG9ydC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjkyOTEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtaWRlLXN1cHBvcnQuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJJbnRlZ3JhdGVkIERldmVsb3BtZW50IEVudmlyb25tZW50IHN1cHBvcnQiCitERVNDUklQVElPTiA9ICJNZXRhIHBhY2thZ2UgZm9yIGVuc3VyaW5nIHRoZSBidWlsZCBkaXJlY3RvcnkgY29udGFpbnMgYWxsIGFwcHJvcHJpYXRlIHRvb2xjaGFpbiBwYWNrYWdlcyBmb3IgdXNpbmcgYW4gSURFIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYmMgZ2RiLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IHFlbXUtbmF0aXZlIHFlbXUtaGVscGVyLW5hdGl2ZSB1bmZzMy1uYXRpdmUiCitQUiA9ICJyMyIKKworaW5oZXJpdCBtZXRhIHRvb2xjaGFpbi1zY3JpcHRzCisKK2RvX3BvcHVsYXRlX2lkZV9zdXBwb3J0ICgpIHsKKyAgdG9vbGNoYWluX2NyZWF0ZV90cmVlX2Vudl9zY3JpcHQKK30KKworZG9fcG9wdWxhdGVfaWRlX3N1cHBvcnRbbm9zdGFtcF0gPSAiMSIKK2FkZHRhc2sgcG9wdWxhdGVfaWRlX3N1cHBvcnQgYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLXRvb2xjaGFpbi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLXRvb2xjaGFpbi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTlmZDg4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtdG9vbGNoYWluLmJiCkBAIC0wLDAgKzEsOSBAQAorU1VNTUFSWSA9ICJNZXRhIHBhY2thZ2UgZm9yIGJ1aWxkaW5nIGEgaW5zdGFsbGFibGUgdG9vbGNoYWluIgorTElDRU5TRSA9ICJNSVQiCisKK1BSID0gInI3IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworaW5oZXJpdCBwb3B1bGF0ZV9zZGsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9uYXRpdmVzZGstYnVpbGR0b29scy1wZXJsLWR1bW15LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL25hdGl2ZXNkay1idWlsZHRvb2xzLXBlcmwtZHVtbXkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk3MWMzYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9uYXRpdmVzZGstYnVpbGR0b29scy1wZXJsLWR1bW15LmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiRHVtbXkgcGFja2FnZSB3aGljaCBlbnN1cmVzIHBlcmwgaXMgZXhjbHVkZWQgZnJvbSBidWlsZHRvb2xzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vTUlUO21kNT0wODM1YWRlNjk4ZTBiY2Y4NTA2ZWNkYTJmN2I0ZjMwMiIKKworaW5oZXJpdCBuYXRpdmVzZGsKKworIyBQdXQgaXQgc29tZXdoZXJlIHNlcGFyYXRlIHRvIGVuc3VyZSBpdCdzIG5ldmVyIHVzZWQgZXhjZXB0IHdoZW4gd2Ugd2FudCBpdAorUEFDS0FHRV9BUkNIID0gImJ1aWxkdG9vbHMtZHVtbXktJHtTREtQS0dTVUZGSVh9IgorCitQRVJMUEFDS0FHRVMgPSAibmF0aXZlc2RrLXBlcmwgXAorICAgICAgICAgICAgICAgIG5hdGl2ZXNkay1wZXJsLW1vZHVsZS1maWxlLXBhdGgiCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIGQuYXBwZW5kVmFyKCdSUFJPVklERVNfJHtQTn0nLCAnJHtQRVJMUEFDS0FHRVN9JykKKyAgICBkLmFwcGVuZFZhcignUkNPTkZMSUNUU18ke1BOfScsICcke1BFUkxQQUNLQUdFU30nKQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvcGFja2FnZS1pbmRleC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9wYWNrYWdlLWluZGV4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNDZiNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvcGFja2FnZS1pbmRleC5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIlJlYnVpbGRzIHRoZSBwYWNrYWdlIGluZGV4IgorTElDRU5TRSA9ICJNSVQiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitQQUNLQUdFUyA9ICIiCisKK2RvX2ZldGNoW25vZXhlY10gPSAiMSIKK2RvX3VucGFja1tub2V4ZWNdID0gIjEiCitkb19wYXRjaFtub2V4ZWNdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCitkb19pbnN0YWxsW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZWRhdGFbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9pcGtbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9ycG1bbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9kZWJbbm9leGVjXSA9ICIxIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtub2V4ZWNdID0gIjEiCisKK2RvX3BhY2thZ2VfaW5kZXhbbm9zdGFtcF0gPSAiMSIKK2RvX3BhY2thZ2VfaW5kZXhbZGVwZW5kc10gKz0gIiR7UEFDS0FHRUlOREVYREVQU30iCisKK3B5dGhvbiBkb19wYWNrYWdlX2luZGV4KCkgeworICAgIGZyb20gb2Uucm9vdGZzIGltcG9ydCBnZW5lcmF0ZV9pbmRleF9maWxlcworICAgIGdlbmVyYXRlX2luZGV4X2ZpbGVzKGQpCit9CithZGR0YXNrIGRvX3BhY2thZ2VfaW5kZXggYmVmb3JlIGRvX2J1aWxkCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS91bmluYXRpdmUtdGFyYmFsbC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS91bmluYXRpdmUtdGFyYmFsbC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWY3OTI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3VuaW5hdGl2ZS10YXJiYWxsLmJiCkBAIC0wLDAgKzEsNTAgQEAKK1NVTU1BUlkgPSAibGliYyBhbmQgcGF0Y2hlbGYgdGFyYmFsbCBmb3IgdXNlIHdpdGggdW5pbmF0aXZlLmJiY2xhc3MiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitUT09MQ0hBSU5fVEFSR0VUX1RBU0sgPSAiIgorCitUT09MQ0hBSU5fSE9TVF9UQVNLID0gIlwKKyAgICBuYXRpdmVzZGstZ2xpYmMgXAorICAgIG5hdGl2ZXNkay1wYXRjaGVsZiBcCisgICAgIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitUT09MQ0hBSU5fT1VUUFVUTkFNRSA/PSAiJHtCVUlMRF9BUkNIfS1uYXRpdmVzZGstbGliYyIKKworUkRFUEVORFMgPSAiJHtUT09MQ0hBSU5fSE9TVF9UQVNLfSIKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK2luaGVyaXQgbWV0YQoraW5oZXJpdCBwb3B1bGF0ZV9zZGsKKworZGVsdGFzayBpbnN0YWxsCitkZWx0YXNrIHBhY2thZ2UKK2RlbHRhc2sgcGFja2FnZWRhdGEKKworU0RLX0RFUEVORFMgKz0gInBhdGNoZWxmLW5hdGl2ZSIKKworU0RLX1BBQ0tBR0lOR19GVU5DID0gIiIKKworZmFrZXJvb3QgY3JlYXRlX3Nka19maWxlcygpIHsKKwljcCAke0NPUkVCQVNFfS9zY3JpcHRzL3JlbG9jYXRlX3Nkay5weSAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vCisKKwkjIFJlcGxhY2UgdGhlICMjREVGQVVMVF9JTlNUQUxMX0RJUiMjIHdpdGggdGhlIGNvcnJlY3QgcGF0dGVybi4KKwkjIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSAnKycgYW5kICcuJyBpbiB0aGUgU0RLUEFUSAorCWVzY2FwZWRfc2RrcGF0aD0kKGVjaG8gJHtTREtQQVRIfS9zeXNyb290cy8ke1NES19TWVN9IHxzZWQgLWUgInM6W1wrXC5dOlxcXFxcXFxcXDA6ZyIpCisJc2VkIC1pIC1lICJzOiMjREVGQVVMVF9JTlNUQUxMX0RJUiMjOiRlc2NhcGVkX3Nka3BhdGg6IiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vcmVsb2NhdGVfc2RrLnB5Cit9CisKKworZmFrZXJvb3QgdGFyX3NkaygpIHsKKwlta2RpciAtcCAke1NES19ERVBMT1l9CisJY2QgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9CisJbXYgc3lzcm9vdHMvJHtTREtfU1lTfSAuLyR7QlVJTERfU1lTfQorCXJtIHN5c3Jvb3RzIC1yZgorCXBhdGNoZWxmIC0tc2V0LWludGVycHJldGVyICR7QCcnLmpvaW4oJ2EnIGZvciBuIGluIHhyYW5nZSgxMDI0KSl9IC4vJHtCVUlMRF9TWVN9L3Vzci9iaW4vcGF0Y2hlbGYKKwltdiAuLyR7QlVJTERfU1lTfS91c3IvYmluL3BhdGNoZWxmIC4vJHtCVUlMRF9TWVN9L3Vzci9iaW4vcGF0Y2hlbGYtdW5pbmF0aXZlCisJdGFyICR7U0RLVEFST1BUU30gLWMgLWogLS1maWxlPSR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0udGFyLmJ6MiAuCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlcy01LjkvY29uZmlnLmNhY2hlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMtNS45L2NvbmZpZy5jYWNoZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTkyMTdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMtNS45L2NvbmZpZy5jYWNoZQpAQCAtMCwwICsxLDQgQEAKKyMhIC9iaW4vc2gKKworY2ZfY3ZfZnVuY19uYW5vc2xlZXA9eWVzCitjZl9jdl9mdW5jX21rc3RlbXA9eWVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlcy01LjkvdGljLWhhbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlcy01LjkvdGljLWhhbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhODlkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzLTUuOS90aWMtaGFuZy5wYXRjaApAQCAtMCwwICsxLDI3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKyd0aWMnIG9mIHNvbWUgbGludXggZGlzdHJpYnV0aW9ucyAoZS5nLiBmZWRvcmEgMTEpIGhhbmcgaW4gYW4gaW5maW5pdGUKK2xvb3Agd2hlbiBwcm9jZXNzaW5nIHRoZSBvcmlnaW5hbCBmaWxlLgorCitJbmRleDogbmN1cnNlcy01LjcvbWlzYy90ZXJtaW5mby5zcmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuY3Vyc2VzLTUuNy5vcmlnL21pc2MvdGVybWluZm8uc3JjCisrKysgbmN1cnNlcy01LjcvbWlzYy90ZXJtaW5mby5zcmMKK0BAIC0zNzA2LDEyICszNzA2LDExIEBAIGtvbnNvbGUteGYzeHxLREUgY29uc29sZSB3aW5kb3cgd2l0aCBrZXkKKyAjIFRoZSB2YWx1ZSBmb3Iga2JzIHJlZmxlY3RzIGxvY2FsIGN1c3RvbWl6YXRpb24gcmF0aGVyIHRoYW4gdGhlIHNldHRpbmdzIHVzZWQKKyAjIGZvciBYRnJlZTg2IHh0ZXJtLgorIGtvbnNvbGUteGY0eHxLREUgY29uc29sZSB3aW5kb3cgd2l0aCBrZXlib2FyZCBmb3IgWEZyZWU4NiA0LnggeHRlcm0sCistCWtlbmQ9XEVPRiwga2hvbWU9XEVPSCwgdXNlPWtvbnNvbGUrcGNma2V5cywKKy0JdXNlPWtvbnNvbGUtdnQxMDAsCistIyBLb25zb2xlIGRvZXMgbm90IGltcGxlbWVudCBzaGlmdGVkIGN1cnNvci1rZXlzLgorLWtvbnNvbGUrcGNma2V5c3xrb25zb2xlIHN1YnNldCBvZiB4dGVybStwY2ZrZXlzLAorLQlrTEZUQCwga1JJVEAsIGtjYnQ9XEVbWiwga2luZEAsIGtyaUAsIGtETkAsIGtVUEAsIHVzZT14dGVybStwY2MyLAorLQl1c2U9eHRlcm0rcGNmMCwKKysJa2VuZD1cRU9GLCBrZjE9XEVPUCwga2YxMz1cRU8yUCwga2YxND1cRU8yUSwga2YxNT1cRU8yUiwKKysJa2YxNj1cRU8yUywga2YxNz1cRVsxNTsyfiwga2YxOD1cRVsxNzsyfiwga2YxOT1cRVsxODsyfiwKKysJa2YyPVxFT1EsIGtmMjA9XEVbMTk7Mn4sIGtmMjE9XEVbMjA7Mn4sIGtmMjI9XEVbMjE7Mn4sCisrCWtmMjM9XEVbMjM7Mn4sIGtmMjQ9XEVbMjQ7Mn4sIGtmMz1cRU9SLCBrZjQ9XEVPUywKKysJa2hvbWU9XEVPSCwgdXNlPWtvbnNvbGUtdnQxMDAsCisgIyBLREUncyAidnQxMDAiIGtleWJvYXJkIGhhcyBubyByZWxhdGlvbnNoaXAgdG8gYW55IHRlcm1pbmFsIHRoYXQgREVDIG1hZGUsIGJ1dAorICMgaXQgaXMgc3RpbGwgdXNlZnVsIGZvciBkZXJpdmluZyB0aGUgb3RoZXIgZW50cmllcy4KKyBrb25zb2xlLXZ0MTAwfEtERSBjb25zb2xlIHdpbmRvdyB3aXRoIHZ0MTAwIChzaWMpIGtleWJvYXJkLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZDgwZWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlcy5pbmMKQEAgLTAsMCArMSwzMDYgQEAKK1NVTU1BUlkgPSAiVGhlIE5ldyBDdXJzZXMgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlNWcjQgYW5kIFhTSS1DdXJzZXMgY29tcGF0aWJsZSBjdXJzZXMgbGlicmFyeSBhbmQgdGVybWluZm8gdG9vbHMgaW5jbHVkaW5nIHRpYywgaW5mb2NtcCwgY2FwdG9pbmZvLiBTdXBwb3J0cyBjb2xvciwgbXVsdGlwbGUgaGlnaGxpZ2h0cywgZm9ybXMtZHJhd2luZyBjaGFyYWN0ZXJzLCBhbmQgYXV0b21hdGljIHJlY29nbml0aW9uIG9mIGtleXBhZCBhbmQgZnVuY3Rpb24ta2V5IHNlcXVlbmNlcy4gRXh0ZW5zaW9ucyBpbmNsdWRlIHJlc2l6YWJsZSB3aW5kb3dzIGFuZCBtb3VzZSBzdXBwb3J0IG9uIGJvdGggeHRlcm0gYW5kIExpbnV4IGNvbnNvbGUgdXNpbmcgdGhlIGdwbSBsaWJyYXJ5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9uY3Vyc2VzL25jdXJzZXMuaHRtbCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbmN1cnNlcy9iYXNlL3ZlcnNpb24uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTI3O21kNT1jYmMxODBhOGM0NGNhNjQyZTk3YzM1NDUyZmFiNWY2NiIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAibmN1cnNlcy1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitJTkNfUFIgPSAicjE1IgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L25jdXJzZXMtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgbXVsdGlsaWJfaGVhZGVyIHBrZ2NvbmZpZworCisjIFVwc3RyZWFtIGhhcyB1c2VmdWwgcGF0Y2hlcyBhdCB0aW1lcyBhdCBmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzLworU1JDX1VSSSA9ICJmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC8ke0JQTn0vY3VycmVudC8ke0JQfS0ke1JFVklTSU9OfS50Z3oiCisKK0VYVFJBX0FVVE9SRUNPTkYgPSAiLUkgbTQiCitDT05GSUdfU0lURSA9KyAiJHtXT1JLRElSfS9jb25maWcuY2FjaGUiCisKKyMgV2hldGhlciB0byBlbmFibGUgc2VwYXJhdGUgd2lkZWMgbGlicmFyaWVzOyBtdXN0IGJlICd0cnVlJyBvciAnZmFsc2UnCisjCisjIFRPRE86IHJlbW92ZSB0aGlzIHZhcmlhYmxlIHdoZW4gd2lkZWMgaXMgc3VwcG9ydGVkIGluIGV2ZXJ5IHNldHVwPworRU5BQkxFX1dJREVDID89ICJ0cnVlIgorCisjIF9HTlVfU09VUkNFIGlzIHJlcXVpcmVkIGZvciB3aWRlYyBzdHVmZiBhbmQgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseQorIyBmb3IgdGFyZ2V0IG9iamVjdHMuICBCdXQgaXQgbXVzdCBiZSBzZXQgbWFudWFsbHkgZm9yIG5hdGl2ZSBhbmQgc2RrCisjIGJ1aWxkcy4KK0JVSUxEX0NQUEZMQUdTICs9ICItRF9HTlVfU09VUkNFIgorCisjIG5hdGl2ZXMgZG9uJ3QgZ2VuZXJhbGx5IGxvb2sgaW4gYmFzZV9saWJkaXIKK2Jhc2VfbGliZGlyX2NsYXNzLW5hdGl2ZSA9ICIke2xpYmRpcn0iCisKKyMgRGlzcGxheSBjb3JydXB0aW9uIG9jY3VycyBvbiA2NCBiaXQgaG9zdHMgd2l0aG91dCB0aGVzZSBzZXR0aW5ncworIyBUaGlzIHdhcyBkZXJyaXZlZCBmcm9tIHRoZSB1cHN0cmVhbSBkZWJpYW4gbmN1cnNlcyB3aGljaCB1c2VzCisjIHRoZXNlIHNldHRpbmdzIGZvciAzMiBhbmQgNjQgYml0IGhvc3RzLgorRVhDT05GSUdfQVJHUyA9ICIiCitFWENPTkZJR19BUkdTX2NsYXNzLW5hdGl2ZSA9ICIgXAorCQktLWRpc2FibGUtbHA2NCBcCisJCS0td2l0aC1jaHR5cGU9J2xvbmcnIFwKKwkJLS13aXRoLW1tYXNrLXQ9J2xvbmcnIgorRVhDT05GSUdfQVJHU19jbGFzcy1uYXRpdmVzZGsgPSAiIFwKKwkJLS1kaXNhYmxlLWxwNjQgXAorCQktLXdpdGgtY2h0eXBlPSdsb25nJyBcCisJCS0td2l0aC1tbWFzay10PSdsb25nJyIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICJeJHtQTn0tbGliLioiCisKKyMgRmFsbCBiYWNrIHRvIHRoZSBob3N0IHRlcm1jYXAgLyB0ZXJtaW5mbyBmb3IgLW5hdGl2ZXNkayBhbmQgLW5hdGl2ZQorIyBUaGUgcmVhbGl0eSBpcyBhIHdvcmsgYXJvdW5kIGZvciBzdHJhbmdlIHByb2JsZW1zIHdpdGggdGhpbmdzIGxpa2UKKyMgImJpdGJha2UgLWMgbWVudWNvbmZpZyBidXN5Ym94IiB3aGVyZSBpdCBjYW5ub3QgZmluZCB0aGUgdGVybWluZm8KKyMgYmVjYXVzZSB0aGUgc3N0YXRlIGhhZCBhIGhhcmQgY29kZWQgc2VhcmNoIHBhdGguICBVbnRpbCB0aGlzIGlzIGZpeGVkCisjIGFub3RoZXIgd2F5IHRoaXMgaXMgZGVlbWVkIGdvb2QgZW5vdWdoLgorRVhfVEVSTUNBUCA9ICIiCitFWF9URVJNQ0FQX2NsYXNzLW5hdGl2ZSA9ICI6L2V0Yy90ZXJtY2FwOi91c3Ivc2hhcmUvbWlzYy90ZXJtY2FwIgorRVhfVEVSTUNBUF9jbGFzcy1uYXRpdmVzZGsgPSAiOi9ldGMvdGVybWNhcDovdXNyL3NoYXJlL21pc2MvdGVybWNhcCIKK0VYX1RFUk1JTkZPID0gIiIKK0VYX1RFUk1JTkZPX2NsYXNzLW5hdGl2ZSA9ICI6L2V0Yy90ZXJtaW5mbzovdXNyL3NoYXJlL3Rlcm1pbmZvOi91c3Ivc2hhcmUvbWlzYy90ZXJtaW5mbzovbGliL3Rlcm1pbmZvIgorRVhfVEVSTUlORk9fY2xhc3MtbmF0aXZlc2RrID0gIjovZXRjL3Rlcm1pbmZvOi91c3Ivc2hhcmUvdGVybWluZm86L3Vzci9zaGFyZS9taXNjL3Rlcm1pbmZvOi9saWIvdGVybWluZm8iCisKKyMgSGVscGVyIGZ1bmN0aW9uIGZvciBkb19jb25maWd1cmUgdG8gYWxsb3cgbXVsdGlwbGUgY29uZmlndXJhdGlvbnMKKyMgJDEgdGhlIGRpcmVjdG9yeSB0byBydW4gY29uZmlndXJlIGluCisjICRAIHRoZSBhcmd1bWVudHMgdG8gcGFzcyB0byBjb25maWd1cmUKK25jdXJzZXNfY29uZmlndXJlKCkgeworCW1rZGlyIC1wICQxCisJY2QgJDEKKwlzaGlmdAorCW9lX3J1bmNvbmYgXAorCSAgICAgICAgLS1kaXNhYmxlLXN0YXRpYyBcCisJICAgICAgICAtLXdpdGhvdXQtZGVidWcgXAorCSAgICAgICAgLS13aXRob3V0LWFkYSBcCisJICAgICAgICAtLXdpdGhvdXQtZ3BtIFwKKwkgICAgICAgIC0tZW5hYmxlLWhhcmQtdGFicyBcCisJICAgICAgICAtLWVuYWJsZS14bWMtZ2xpdGNoIFwKKwkgICAgICAgIC0tZW5hYmxlLWNvbG9yZmdiZyBcCisJICAgICAgICAtLXdpdGgtdGVybXBhdGg9JyR7c3lzY29uZmRpcn0vdGVybWNhcDoke2RhdGFkaXJ9L21pc2MvdGVybWNhcCR7RVhfVEVSTUNBUH0nIFwKKwkgICAgICAgIC0td2l0aC10ZXJtaW5mby1kaXJzPScke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvOiR7ZGF0YWRpcn0vdGVybWluZm8ke0VYX1RFUk1JTkZPfScgXAorCSAgICAgICAgLS13aXRoLXNoYXJlZCBcCisJICAgICAgICAtLWRpc2FibGUtYmlnLWNvcmUgXAorCSAgICAgICAgLS1wcm9ncmFtLXByZWZpeD0gXAorCSAgICAgICAgLS13aXRoLXRpY2xpYiBcCisJICAgICAgICAtLXdpdGgtdGVybWxpYj10aW5mbyBcCisJICAgICAgICAtLWVuYWJsZS1zaWd3aW5jaCBcCisJICAgICAgICAtLWVuYWJsZS1wYy1maWxlcyBcCisJICAgICAgICAtLWRpc2FibGUtcnBhdGgtaGFjayBcCisJCSR7RVhDT05GSUdfQVJHU30gXAorCSAgICAgICAgLS13aXRoLW1hbnBhZ2UtZm9ybWF0PW5vcm1hbCBcCisJICAgICAgICAiJEAiIHx8IHJldHVybiAxCisJY2QgLi4KK30KKworIyBPdmVycmlkZSB0aGUgZnVuY3Rpb24gZnJvbSB0aGUgYXV0b3Rvb2xzIGNsYXNzOyBuY3Vyc2VzIHJlcXVpcmVzIGEKKyMgcGF0Y2hlZCBhdXRvY29uZjIxMyB0byBnZW5lcmF0ZSB0aGUgY29uZmlndXJlIHNjcmlwdC4gVGhpcyBhdXRvY29uZgorIyBpcyBub3QgYXZhaWxhYmxlIHNvIHRoYXQgdGhlIHNoaXBwZWQgc2NyaXB0IHdpbGwgYmUgdXNlZC4KK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAgICAgIyBjaGVjayBkb2VzIG5vdCB3b3JrIHdpdGggY3Jvc3MtY29tcGlsaW5nIGFuZCBpcyBnZW5lcmFsbHkKKyAgICAgICAgIyBicm9rZW4gYmVjYXVzZSBpdCByZXF1aXJlcyBzdGRpbiB0byBiZSBwb2xsYWJsZSAod2hpY2ggaXMKKyAgICAgICAgIyBub3QgdGhlIGNhc2UgZm9yIC9kZXYvbnVsbCByZWRpcmVjdGlvbnMpCisgICAgICAgIGV4cG9ydCBjZl9jdl93b3JraW5nX3BvbGw9eWVzCisJI1JlbW92ZSAke2luY2x1ZGVkaXJ9IGZyb20gQ1BQRkxBR1MsIG5lZWQgZm9yIGNyb3NzIGNvbXBpbGUKKwlzZWQgLWkgJ3MjLUkke2NmX2luY2x1ZGVkaXJ9IyNnJyAke1N9L2NvbmZpZ3VyZSB8fCBkaWUgInNlZCBDUFBGTEFHUyIKKworCSMgVGhlIC0tZW5hYmxlLXBjLWZpbGVzIHJlcXVpcmVzIFBLR19DT05GSUdfTElCRElSIGV4aXN0ZWQKKwlta2RpciAtcCAke1BLR19DT05GSUdfTElCRElSfQorCSggY2QgJHtTfTsgZ251LWNvbmZpZ2l6ZSAtLWZvcmNlICkKKwluY3Vyc2VzX2NvbmZpZ3VyZSAibmFycm93YyIgfHwgXAorCQlyZXR1cm4gMQorCSEgJHtFTkFCTEVfV0lERUN9IHx8IFwKKwkJbmN1cnNlc19jb25maWd1cmUgIndpZGVjIiAiLS1lbmFibGUtd2lkZWMiICItLXdpdGhvdXQtcHJvZ3MiCisKK30KKworZG9fY29tcGlsZSgpIHsKKyAgICAgICAgb2VfcnVubWFrZSAtQyBuYXJyb3djIGxpYnMKKyAgICAgICAgb2VfcnVubWFrZSAtQyBuYXJyb3djL3Byb2dzCisKKyAgICAgICAgISAke0VOQUJMRV9XSURFQ30gfHwgXAorICAgICAgICAgICAgb2VfcnVubWFrZSAtQyB3aWRlYyBsaWJzCit9CisKKyMgc2V0IG9mIGV4cGVjdGVkIGRpZmZlcmVuY2VzIGJldHdlZW4gbmFycm93YyBhbmQgd2lkZWMgaGVhZGVyCisjCisjIFRPRE86IHRoZSBOQ1VSU0VTX0NIX1QgZGlmZmVyZW5jZSBjYW4gY2F1c2UgcmVhbCBwcm9ibGVtcyA6KAorX3VuaWZkZWZfY2xlYW51cCA9ICIgXAorICAtZSAnXCEvXCogXCRJZDogY3Vyc2VzLndpZGUsdiEsXCEvXCogXCRJZDogY3Vyc2VzLnRhaWwsdiFkJyBcCisgIC1lICcvXiNkZWZpbmUgTkNVUlNFU19DSF9UIC9kJyBcCisgIC1lICcvXiNpbmNsdWRlIDx3Y2hhci5oPi9kJyBcCisgIC1lICdcIV4vXCogLiogXCovIWQnIFwKKyIKKworZG9fdGVzdFtkZXBlbmRzXSA9ICJ1bmlmZGVmLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9fdGVzdFtkaXJzXSA9ICIke1N9IgorZG9fdGVzdCgpIHsKKyAgICAgICAgJHtFTkFCTEVfV0lERUN9IHx8IHJldHVybiAwCisKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCB0aGUgbmFycm93IGFuZCB3aWRlYyBoZWFkZXIgYXJlIGNvbXBhdGlibGUKKyAgICAgICAgIyBhbmQgZGlmZmVyIG9ubHkgaW4gbWlub3IgZGV0YWlscy4KKyAgICAgICAgdW5pZmRlZiAtayBuYXJyb3djL2luY2x1ZGUvY3Vyc2VzLmggfCBcCisgICAgICAgICAgICBzZWQgJHtfdW5pZmRlZl9jbGVhbnVwfSA+IGN1cnNlcy1uYXJyb3djLmgKKyAgICAgICAgdW5pZmRlZiAtayB3aWRlYy9pbmNsdWRlL2N1cnNlcy5oIHwgXAorICAgICAgICAgICAgc2VkICR7X3VuaWZkZWZfY2xlYW51cH0gPiBjdXJzZXMtd2lkZWMuaAorCisgICAgICAgIGRpZmYgY3Vyc2VzLW5hcnJvd2MuaCBjdXJzZXMtd2lkZWMuaAorfQorCisjIFNwbGl0IG9yaWdpbmFsIF9pbnN0YWxsX29wdHMgdG8gdHdvIHBhcnRzLgorIyBPbmUgaXMgdGhlIG9wdGlvbnMgdG8gaW5zdGFsbCBjb250ZW50cywgdGhlIG90aGVyIGlzIHRoZSBwYXJhbWV0ZXJzIFwKKyMgd2hlbiBydW5uaW5nIGNvbW1hbmQgIm1ha2UgaW5zdGFsbCIKK19pbnN0YWxsX29wdHMgPSAiXAorICBpbnN0YWxsLmxpYnMgaW5zdGFsbC5pbmNsdWRlcyBpbnN0YWxsLm1hbiBcCisiCitfaW5zdGFsbF9jZmdzID0gIlwKKyAgREVTVERJUj0nJHtEfScgXAorICBQS0dfQ09ORklHX0xJQkRJUj0nJHtsaWJkaXJ9L3BrZ2NvbmZpZycgXAorIgorCitkb19pbnN0YWxsKCkgeworICAgICAgICAjIE9yZGVyIG9mIGluc3RhbGxhdGlvbiBpcyBpbXBvcnRhbnQ7IHdpZGVjIGluc3RhbGxzIGEgJ2N1cnNlcy5oJworICAgICAgICAjIGhlYWRlciB3aXRoIG1vcmUgZGVmaW5pdGlvbnMgYW5kIG11c3QgYmUgaW5zdGFsbGVkIGxhc3QgaGVuY2UuCisgICAgICAgICMgQ29tcGF0aWJpbGl0eSBvZiB0aGVzZSBoZWFkZXJzIHdpbGwgYmUgY2hlY2tlZCBpbiAnZG9fdGVzdCgpJy4KKyAgICAgICAgb2VfcnVubWFrZSAtQyBuYXJyb3djICR7X2luc3RhbGxfY2Znc30gJHtfaW5zdGFsbF9vcHRzfSBcCisgICAgICAgICAgICAgICAgaW5zdGFsbC5wcm9ncworCisgICAgICAgICMgVGhlIGluc3RhbGwuZGF0YSBzaG91bGQgcnVuIGFmdGVyIGluc3RhbGwubGlicywgb3RoZXJ3aXNlCisgICAgICAgICMgdGhlcmUgd291bGQgYmUgYSByYWNlIGlzc3VlIGluIGEgdmVyeSBjcml0aWNhbCBjb25kaXRvbiwgc2luY2UKKyAgICAgICAgIyB0aWMgd2lsbCBiZSBydW4gYnkgaW5zdGFsbC5kYXRhLCBhbmQgdGljIG5lZWRzIGxpYnRpbmZvLnNvCisgICAgICAgICMgd2hpY2ggd291bGQgYmUgcmVnZW5lcmF0ZWQgYnkgaW5zdGFsbC5saWJzLgorICAgICAgICBvZV9ydW5tYWtlIC1DIG5hcnJvd2MgJHtfaW5zdGFsbF9jZmdzfSBcCisgICAgICAgICAgICAgICAgaW5zdGFsbC5kYXRhCisKKworICAgICAgICAhICR7RU5BQkxFX1dJREVDfSB8fCBcCisgICAgICAgICAgICBvZV9ydW5tYWtlIC1DIHdpZGVjICR7X2luc3RhbGxfY2Znc30gJHtfaW5zdGFsbF9vcHRzfQorCisgICAgICAgIGNkIG5hcnJvd2MKKworICAgICAgICAjIGluY2x1ZGUgc29tZSBiYXNpYyB0ZXJtaW5mbyBmaWxlcworICAgICAgICAjIHN0b2xlbiA7KSBmcm9tIGdlbnRvbyBhbmQgbW9kaWZpZWQgYSBiaXQKKyAgICAgICAgZm9yIHggaW4gYW5zaSBjb25zb2xlIGR1bWIgbGludXggcnh2dCBzY3JlZW4gc2NyZWVuLTI1NmNvbG9yIHN1biB2dDUyIHZ0MTAwIHZ0MTAyIHZ0MjAwIHZ0MjIwIHh0ZXJtLWNvbG9yIHh0ZXJtLXhmcmVlODYgeHRlcm0tMjU2Y29sb3IKKyAgICAgICAgZG8KKyAgICAgICAgICAgICAgICBsb2NhbCB0ZXJtZmlsZT0iJChmaW5kICIke0R9JHtkYXRhZGlyfS90ZXJtaW5mby8iIC1uYW1lICIke3h9IiAyPi9kZXYvbnVsbCkiCisgICAgICAgICAgICAgICAgbG9jYWwgYmFzZWRpcj0iJChiYXNlbmFtZSAkKGRpcm5hbWUgIiR7dGVybWZpbGV9IikpIgorCisgICAgICAgICAgICAgICAgaWYgWyAtbiAiJHt0ZXJtZmlsZX0iIF0KKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvLyR7YmFzZWRpcn0KKyAgICAgICAgICAgICAgICAgICAgICAgIG12ICR7dGVybWZpbGV9ICR7RH0ke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvLyR7YmFzZWRpcn0vCisgICAgICAgICAgICAgICAgICAgICAgICBsbiAtcyAvZXRjL3Rlcm1pbmZvLyR7YmFzZWRpcn0vJHt4fSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7RH0ke2RhdGFkaXJ9L3Rlcm1pbmZvLyR7YmFzZWRpcn0vJHt4fQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgICAgIyBpIHRoaW5rIHdlIGNhbiB1c2UgeHRlcm0tY29sb3IgYXMgZGVmYXVsdCB4dGVybQorICAgICAgICBpZiBbIC1lICR7RH0ke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvL3gveHRlcm0tY29sb3IgXQorICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgbG4gLXNmIHh0ZXJtLWNvbG9yICR7RH0ke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvL3gveHRlcm0KKyAgICAgICAgZmkKKworICAgICAgICBybSAtZiAke0R9JHtsaWJkaXJ9L3Rlcm1pbmZvCisKKyAgICAgICAgIyBjcmVhdGUgbGlua2VyIHNjcmlwdHMgZm9yIGxpYmN1cnNlcy5zbyBhbmQgbGlibmN1cnNlcyB0bworICAgICAgICAjIGxpbmsgYWdhaW5zdCAtbHRpbmZvIHdoZW4gbmVlZGVkLiBTb21lIGJ1aWxkcyBtaWdodCBicmVhaworICAgICAgICAjIGVsc2Ugd2hlbiAnLVdsLC0tbm8tY29weS1kdC1uZWVkZWQtZW50cmllcycgaGFzIGJlZW4gc2V0IGluCisgICAgICAgICMgbGlua2VyIGZsYWdzLgorICAgICAgICBmb3IgaSBpbiBsaWJuY3Vyc2VzIGxpYm5jdXJzZXN3OyBkbworICAgICAgICAgICAgICAgIGY9JHtEfSR7bGliZGlyfS8kaS5zbworICAgICAgICAgICAgICAgIHRlc3QgLWggJGYgfHwgY29udGludWUKKyAgICAgICAgICAgICAgICBybSAtZiAkZgorICAgICAgICAgICAgICAgIGVjaG8gJy8qIEdOVSBsZCBzY3JpcHQgKi8nICA+JGYKKyAgICAgICAgICAgICAgICBlY2hvICJJTlBVVCgkaS5zby41IEFTX05FRURFRCgtbHRpbmZvKSkiID4+JGYKKyAgICAgICAgZG9uZQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgbGliY3Vyc2VzIGlzIGxpbmtlZCBzbyB0aGF0IGl0IGdldHMgLWx0aW5mbworICAgICAgICAjIGFsc28sIHRoaXMgc2hvdWxkIGJlIGFkZHJlc3NlZCB1cHN0cmVhbSByZWFsbHkuCisgICAgICAgIGxuIC1zZiBsaWJuY3Vyc2VzLnNvICR7RH0ke2xpYmRpcn0vbGliY3Vyc2VzLnNvCisKKyAgICAgICAgIyBjcmVhdGUgbGlidGVybWNhcC5zbyBsaW5rZXIgc2NyaXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisgICAgICAgIGY9JHtEfSR7bGliZGlyfS9saWJ0ZXJtY2FwLnNvCisgICAgICAgIGVjaG8gJy8qIEdOVSBsZCBzY3JpcHQgKi8nID4kZgorICAgICAgICBlY2hvICdJTlBVVChBU19ORUVERUQoLWx0aW5mbykpJyA+PiRmCisKKyAgICAgICAgaWYgWyAhIC1kICIke0R9JHtiYXNlX2xpYmRpcn0iIF07IHRoZW4KKyAgICAgICAgICAgICMgU2V0dGluZyBiYXNlX2xpYmRpciB0byBsaWJkaXIgYXMgaXMgZG9uZSBpbiB0aGUgLW5hdGl2ZQorICAgICAgICAgICAgIyBjYXNlIHdpbGwgc2tpcCB0aGlzIGNvZGUKKyAgICAgICAgICAgIG1rZGlyICR7RH0ke2Jhc2VfbGliZGlyfQorICAgICAgICAgICAgbXYgJHtEfSR7bGliZGlyfS9saWJuY3Vyc2VzLnNvLiogJHtEfSR7YmFzZV9saWJkaXJ9CisgICAgICAgICAgICAhICR7RU5BQkxFX1dJREVDfSB8fCBcCisgICAgICAgICAgICAgICAgbXYgJHtEfSR7bGliZGlyfS9saWJuY3Vyc2Vzdy5zby4qICR7RH0ke2Jhc2VfbGliZGlyfQorCisgICAgICAgICAgICBtdiAke0R9JHtsaWJkaXJ9L2xpYnRpbmZvLnNvLiogJHtEfSR7YmFzZV9saWJkaXJ9CisgICAgICAgICAgICBybSAke0R9JHtsaWJkaXJ9L2xpYnRpbmZvLnNvCisKKyAgICAgICAgICAgICMgVXNlIGxuciB0byBlbnN1cmUgdGhpcyBpcyBhIHJlbGF0aXZlIGxpbmsgZGVzcGl0ZSBhYnNvbHV0ZSBwYXRocworICAgICAgICAgICAgIyAoYXMgd2UgY2FuJ3Qga25vdyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYmFzZV9saWJkaXIgYW5kIGxpYmRpcikuCisgICAgICAgICAgICAjIEF0IHNvbWUgcG9pbnQgd2UgY2FuIHJlbHkgb24gY29yZXV0aWxzIDguMTYgd2hpY2ggaGFzIGxuIC1yLgorICAgICAgICAgICAgbG5yICR7RH0ke2Jhc2VfbGliZGlyfS9saWJ0aW5mby5zby41ICR7RH0ke2xpYmRpcn0vbGlidGluZm8uc28KKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAtZCAiJHtEfSR7aW5jbHVkZWRpcn0vbmN1cnNlcyIgXTsgdGhlbgorICAgICAgICAgICAgZm9yIGYgaW4gYGZpbmQgJHtEfSR7aW5jbHVkZWRpcn0vbmN1cnNlcyAtbmFtZSAiKi5oImAKKyAgICAgICAgICAgIGRvCisJICAgICAgICBmPWBiYXNlbmFtZSAkZmAKKwkgICAgICAgIHRlc3QgLWUgJHtEfSR7aW5jbHVkZWRpcn0vJGYgJiYgY29udGludWUKKyAgICAgICAgICAgICAgICBsbiAtc2YgbmN1cnNlcy8kZiAke0R9JHtpbmNsdWRlZGlyfS8kZgorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorICAgICAgICBvZV9tdWx0aWxpYl9oZWFkZXIgY3Vyc2VzLmgKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGxpYmRpciA9IGQuZXhwYW5kKCIke2xpYmRpcn0iKQorICAgIGJhc2VfbGliZGlyID0gZC5leHBhbmQoIiR7YmFzZV9saWJkaXJ9IikKKyAgICBwbmJhc2UgPSBkLmV4cGFuZCgiJHtQTn0tbGliJXMiKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpYmRpciwgJ15saWIoLiopXC5zb1wuLionLCBwbmJhc2UsICduY3Vyc2VzICVzIGxpYnJhcnknLCBwcmVwZW5kPVRydWUsIGV4dHJhX2RlcGVuZHMgPSAnJywgYWxsb3dfbGlua3M9VHJ1ZSkKKyAgICBpZiBsaWJkaXIgaXMgbm90IGJhc2VfbGliZGlyOgorICAgICAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBiYXNlX2xpYmRpciwgJ15saWIoLiopXC5zb1wuLionLCBwbmJhc2UsICduY3Vyc2VzICVzIGxpYnJhcnknLCBwcmVwZW5kPVRydWUsIGV4dHJhX2RlcGVuZHMgPSAnJywgYWxsb3dfbGlua3M9VHJ1ZSkKK30KKworCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV9uY3Vyc2VzLXRvb2xzX2NsYXNzLXRhcmdldCA9ICJjbGVhciByZXNldCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitQQUNLQUdFUyArPSAiIFwKKyAgJHtQTn0tdG9vbHMgXAorICAke1BOfS10ZXJtaW5mbyBcCisgICR7UE59LXRlcm1pbmZvLWJhc2UgXAorIgorCitGSUxFU18ke1BOfSA9ICJcCisgICR7YmluZGlyfS90cHV0IFwKKyAgJHtiaW5kaXJ9L3RzZXQgXAorICAke2JpbmRpcn0vbmN1cnNlczUtY29uZmlnIFwKKyAgJHtiaW5kaXJ9L25jdXJzZXN3NS1jb25maWcgXAorICAke2RhdGFkaXJ9L3RhYnNldCBcCisiCisKKyMgVGhpcyBrZWVwcyBvbmx5IHRwdXQvdHNldCBpbiBuY3Vyc2VzCisjIGNsZWFyL3Jlc2V0IGFyZSBpbiBhbHJlYWR5IGJ1c3lib3gKK0ZJTEVTXyR7UE59LXRvb2xzID0gIlwKKyAgJHtiaW5kaXJ9L3RpYyBcCisgICR7YmluZGlyfS90b2UgXAorICAke2JpbmRpcn0vaW5mb3RvY2FwIFwKKyAgJHtiaW5kaXJ9L2NhcHRvaW5mbyBcCisgICR7YmluZGlyfS9pbmZvY21wIFwKKyAgJHtiaW5kaXJ9L2NsZWFyJHtAWycnLCAnLiR7QlBOXHg3ZCddWycke0NMQVNTT1ZFUlJJREV9JyA9PSAnY2xhc3MtdGFyZ2V0J119IFwKKyAgJHtiaW5kaXJ9L3Jlc2V0JHtAWycnLCAnLiR7QlBOXHg3ZCddWycke0NMQVNTT1ZFUlJJREV9JyA9PSAnY2xhc3MtdGFyZ2V0J119IFwKKyAgJHtiaW5kaXJ9L3RhY2sgXAorICAke2JpbmRpcn0vdGFicyBcCisiCisKKyMgJ3Jlc2V0JyBpcyBhIHN5bWxpbmsgdG8gJ3RzZXQnIHdoaWNoIGlzIGluIHRoZSAnbmN1cnNlcycgcGFja2FnZQorUkRFUEVORFNfJHtQTn0tdG9vbHMgPSAiJHtQTn0iCisKK0ZJTEVTXyR7UE59LXRlcm1pbmZvID0gIlwKKyAgJHtkYXRhZGlyfS90ZXJtaW5mbyBcCisiCisKK0ZJTEVTXyR7UE59LXRlcm1pbmZvLWJhc2UgPSAiXAorICAke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvIFwKKyIKKworUlNVR0dFU1RTXyR7UE59LWxpYnRpbmZvID0gIiR7UE59LXRlcm1pbmZvIgorUlJFQ09NTUVORFNfJHtQTn0tbGlidGluZm8gPSAiJHtQTn0tdGVybWluZm8tYmFzZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzXzUuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzXzUuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGQyN2E5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXNfNS45LmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgbmN1cnNlcy5pbmMKKworUkVWSVNJT04gPSAiMjAxNTAzMjkiCisKK1BSID0gIiR7SU5DX1BSfS4xIgorCitTUkNfVVJJICs9ICJmaWxlOi8vdGljLWhhbmcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2NvbmZpZy5jYWNoZSBcCisiCitTID0gIiR7V09SS0RJUn0vJHtCUH0tJHtSRVZJU0lPTn0iCitTUkNfVVJJW21kNXN1bV0gPSAiY2VlOTkxZDA5ZTY5ZTYwZWJlZGVmNDI0ODA0YzUyZDQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWI2NGY0MGU0ZGNlNzNlM2FhODNkMTViZDkyNTdjNmVmZjg3OTBlYzQxMTUwZjA5MzhiZDg3YzBlYjc1ODI4ZiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9zaXRlX2NvbmZpZy9oZWFkZXJzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL3NpdGVfY29uZmlnL2hlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg3YjdiZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9zaXRlX2NvbmZpZy9oZWFkZXJzCkBAIC0wLDAgKzEsNSBAQAorY3Vyc2VzLmgKK25jdXJzZXMvY3Vyc2VzLmgKK25jdXJzZXMuaAorbmN1cnNlcy90ZXJtY2FwLmgKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2UvaG9zdHMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25ldGJhc2UvbmV0YmFzZS9ob3N0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjMzMjQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2UvaG9zdHMKQEAgLTAsMCArMSwyIEBACisxMjcuMC4wLjEJbG9jYWxob3N0LmxvY2FsZG9tYWluCQlsb2NhbGhvc3QKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2UvbmV0YmFzZS1hZGQtcnBjYmluZC1hcy1hbi1hbGlhcy10by1zdW5ycGMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25ldGJhc2UvbmV0YmFzZS9uZXRiYXNlLWFkZC1ycGNiaW5kLWFzLWFuLWFsaWFzLXRvLXN1bnJwYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWNlMjFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2UvbmV0YmFzZS1hZGQtcnBjYmluZC1hcy1hbi1hbGlhcy10by1zdW5ycGMucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorbmV0YmFzZTogYWRkIHJwY2JpbmQgYXMgYW4gYWxpYXMgdG8gc3VucnBjCisKK3RoZSBwYXRjaCBjb21lcyBmcm9tOgoraHR0cHM6Ly9idWdzLmFyY2hsaW51eC5vcmcvdGFzay8yMDI3MworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTGkgV2FuZyA8bGkud2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZXRjLXJwYyAgICAgIHwgICAgMiArLQorIGV0Yy1zZXJ2aWNlcyB8ICAgIDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXRjLXJwYyBiL2V0Yy1ycGMKK2luZGV4IDFiMzA2MjUuLjlhOWE4MWEgMTAwNjQ0CistLS0gYS9ldGMtcnBjCisrKysgYi9ldGMtcnBjCitAQCAtMSw3ICsxLDcgQEAKKyAjIFRoaXMgZmlsZSBjb250YWlucyB1c2VyIHJlYWRhYmxlIG5hbWVzIHRoYXQgY2FuIGJlIHVzZWQgaW4gcGxhY2Ugb2YgcnBjCisgIyBwcm9ncmFtIG51bWJlcnMuCisgCistcG9ydG1hcHBlcgkxMDAwMDAJcG9ydG1hcCBzdW5ycGMKKytwb3J0bWFwcGVyCTEwMDAwMAlwb3J0bWFwIHN1bnJwYyBycGNiaW5kCisgcnN0YXRkCQkxMDAwMDEJcnN0YXQgcnN0YXRfc3ZjIHJ1cCBwZXJmbWV0ZXIKKyBydXNlcnNkCQkxMDAwMDIJcnVzZXJzCisgbmZzCQkxMDAwMDMJbmZzcHJvZworZGlmZiAtLWdpdCBhL2V0Yy1zZXJ2aWNlcyBiL2V0Yy1zZXJ2aWNlcworaW5kZXggOWQ2NGE1Mi4uYTE5ZjdjOCAxMDA2NDQKKy0tLSBhL2V0Yy1zZXJ2aWNlcworKysrIGIvZXRjLXNlcnZpY2VzCitAQCAtNzIsOCArNzIsOCBAQCBwb3AyCQkxMDkvdGNwCQlwb3N0b2ZmaWNlIHBvcC0yICMgUE9QIHZlcnNpb24gMgorIHBvcDIJCTEwOS91ZHAJCXBvcC0yCisgcG9wMwkJMTEwL3RjcAkJcG9wLTMJCSMgUE9QIHZlcnNpb24gMworIHBvcDMJCTExMC91ZHAJCXBvcC0zCistc3VucnBjCQkxMTEvdGNwCQlwb3J0bWFwcGVyCSMgUlBDIDQuMCBwb3J0bWFwcGVyCistc3VucnBjCQkxMTEvdWRwCQlwb3J0bWFwcGVyCisrc3VucnBjCQkxMTEvdGNwCQlwb3J0bWFwcGVyIHJwY2JpbmQJIyBSUEMgNC4wIHBvcnRtYXBwZXIKKytzdW5ycGMJCTExMS91ZHAJCXBvcnRtYXBwZXIgcnBjYmluZAorIGF1dGgJCTExMy90Y3AJCWF1dGhlbnRpY2F0aW9uIHRhcCBpZGVudAorIHNmdHAJCTExNS90Y3AKKyB1dWNwLXBhdGgJMTE3L3RjcAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlXzUuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlXzUuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2Q4OWZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2VfNS4zLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiQmFzaWMgVENQL0lQIG5ldHdvcmtpbmcgc3VwcG9ydCIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGZvciBiYXNpYyBUQ1AvSVAgYmFzZWQgbmV0d29ya2luZyIKK0hPTUVQQUdFID0gImh0dHA6Ly9wYWNrYWdlcy5kZWJpYW4ub3JnL25ldGJhc2UiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9M2RkNjE5MmQzMDZmNTgyZGVlNzY4N2RhM2Q4NzQ4YWIiCitQRSA9ICIxIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9uL25ldGJhc2UvbmV0YmFzZV8ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbmV0YmFzZS1hZGQtcnBjYmluZC1hcy1hbi1hbGlhcy10by1zdW5ycGMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaG9zdHMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyNjM3YTI3ZmQzZGUwMmEyNzhkMmI1YmU3ZTY1NThjMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MWY2YzY5Nzk1MDQ0ZDYyYjhhZDk1OWNmOWRhZjA0OWQwNTQ1ZmQ0NjZjNTI4NjBhZDNmOTMzYjFlOTdiODhiIgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHttYW5kaXJ9L21hbjggJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ob3N0cyAke0R9JHtzeXNjb25mZGlyfS9ob3N0cworCWluc3RhbGwgLW0gMDY0NCBldGMtcnBjICR7RH0ke3N5c2NvbmZkaXJ9L3JwYworCWluc3RhbGwgLW0gMDY0NCBldGMtcHJvdG9jb2xzICR7RH0ke3N5c2NvbmZkaXJ9L3Byb3RvY29scworCWluc3RhbGwgLW0gMDY0NCBldGMtc2VydmljZXMgJHtEfSR7c3lzY29uZmRpcn0vc2VydmljZXMKK30KKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vaG9zdHMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL29zLXJlbGVhc2Uvb3MtcmVsZWFzZS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvb3MtcmVsZWFzZS9vcy1yZWxlYXNlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNDMxZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL29zLXJlbGVhc2Uvb3MtcmVsZWFzZS5iYgpAQCAtMCwwICsxLDQ5IEBACitpbmhlcml0IGFsbGFyY2gKKworU1VNTUFSWSA9ICJPcGVyYXRpbmcgc3lzdGVtIGlkZW50aWZpY2F0aW9uIgorREVTQ1JJUFRJT04gPSAiVGhlIC9ldGMvb3MtcmVsZWFzZSBmaWxlIGNvbnRhaW5zIG9wZXJhdGluZyBzeXN0ZW0gaWRlbnRpZmljYXRpb24gZGF0YS4iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCisKKyMgT3RoZXIgdmFsaWQgZmllbGRzOiBCVUlMRF9JRCBJRF9MSUtFIEFOU0lfQ09MT1IgQ1BFX05BTUUKKyMgICAgICAgICAgICAgICAgICAgICBIT01FX1VSTCBTVVBQT1JUX1VSTCBCVUdfUkVQT1JUX1VSTAorT1NfUkVMRUFTRV9GSUVMRFMgPSAiSUQgSURfTElLRSBOQU1FIFZFUlNJT04gVkVSU0lPTl9JRCBQUkVUVFlfTkFNRSIKKworSUQgPSAiJHtESVNUUk99IgorTkFNRSA9ICIke0RJU1RST19OQU1FfSIKK1ZFUlNJT04gPSAiJHtESVNUUk9fVkVSU0lPTn0ke0AnICglcyknICUgRElTVFJPX0NPREVOQU1FIGlmICdESVNUUk9fQ09ERU5BTUUnIGluIGQgZWxzZSAnJ30iCitWRVJTSU9OX0lEID0gIiR7RElTVFJPX1ZFUlNJT059IgorUFJFVFRZX05BTUUgPSAiJHtESVNUUk9fTkFNRX0gJHtWRVJTSU9OfSIKK0JVSUxEX0lEID89ICIke0RBVEVUSU1FfSIKK0JVSUxEX0lEW3ZhcmRlcHNleGNsdWRlXSA9ICJEQVRFVElNRSIKKworcHl0aG9uIGRvX2NvbXBpbGUgKCkgeworICAgIGltcG9ydCBzaHV0aWwKKyAgICB3aXRoIG9wZW4oZC5leHBhbmQoJyR7Qn0vb3MtcmVsZWFzZScpLCAndycpIGFzIGY6CisgICAgICAgIGZvciBmaWVsZCBpbiBkLmdldFZhcignT1NfUkVMRUFTRV9GSUVMRFMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgdmFsdWUgPSBkLmdldFZhcihmaWVsZCwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIHZhbHVlOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ3swfT17MX1cbicuZm9ybWF0KGZpZWxkLCB2YWx1ZSkpCisgICAgaWYgZC5nZXRWYXIoJ1JQTV9TSUdOX1BBQ0tBR0VTJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICBycG1fZ3BnX3B1YmtleSA9IGQuZ2V0VmFyKCdSUE1fR1BHX1BVQktFWScsIFRydWUpCisgICAgICAgIG9zLm1rZGlyKCcke0J9L3JwbS1ncGcnKQorICAgICAgICBkaXN0cm9fdmVyc2lvbiA9IHNlbGYuZC5nZXRWYXIoJ0RJU1RST19WRVJTSU9OJywgVHJ1ZSkgb3IgIm9lLjAiCisgICAgICAgIHNodXRpbC5jb3B5MihycG1fZ3BnX3B1YmtleSwgZC5leHBhbmQoJyR7Qn0vcnBtLWdwZy9SUE0tR1BHLUtFWS0lcycgJSBkaXN0cm9fdmVyc2lvbikpCit9Citkb19jb21waWxlW3ZhcmRlcHNdICs9ICIke09TX1JFTEVBU0VfRklFTERTfSIKKworZG9faW5zdGFsbCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgIGluc3RhbGwgLW0gMDY0NCBvcy1yZWxlYXNlICR7RH0ke3N5c2NvbmZkaXJ9LworCisgICAgaWYgWyAtZCAicnBtLWdwZyIgXTsgdGhlbgorICAgICAgICBpbnN0YWxsIC1kICIke0R9JHtzeXNjb25mZGlyfS9wa2kiCisgICAgICAgIGNwIC1yICJycG0tZ3BnIiAiJHtEfSR7c3lzY29uZmRpcn0vcGtpLyIKKyAgICBmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1zZGstaG9zdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzZhNTMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QuYmIKQEAgLTAsMCArMSwzMyBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZCBMdGQKKyMKKworU1VNTUFSWSA9ICJIb3N0IHBhY2thZ2VzIGZvciB0aGUgc3RhbmRhbG9uZSBTREsgb3IgZXh0ZXJuYWwgdG9vbGNoYWluIgorUFIgPSAicjEyIgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwIG5hdGl2ZXNkaworCitQQUNLQUdFR1JPVVBfRElTQUJMRV9DT01QTEVNRU5UQVJZID0gIjEiCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICBuYXRpdmVzZGstcGtnY29uZmlnIFwKKyAgICBuYXRpdmVzZGstcWVtdSBcCisgICAgbmF0aXZlc2RrLXFlbXUtaGVscGVyIFwKKyAgICBuYXRpdmVzZGstcHNldWRvIFwKKyAgICBuYXRpdmVzZGstdW5mczMgXAorICAgIG5hdGl2ZXNkay1vcGtnIFwKKyAgICBuYXRpdmVzZGstbGlidG9vbCBcCisgICAgbmF0aXZlc2RrLWF1dG9jb25mIFwKKyAgICBuYXRpdmVzZGstYXV0b21ha2UgXAorICAgIG5hdGl2ZXNkay1zaGFkb3cgXAorICAgIG5hdGl2ZXNkay1tYWtlZGV2cyBcCisgICAgbmF0aXZlc2RrLXNtYXJ0cG0gXAorICAgIG5hdGl2ZXNkay1wb3N0aW5zdC1pbnRlcmNlcHQgXAorICAgICIKKworUkRFUEVORFNfJHtQTn1fZGFyd2luID0gIlwKKyAgICBuYXRpdmVzZGstcGtnY29uZmlnIFwKKyAgICBuYXRpdmVzZGstb3BrZyBcCisgICAgbmF0aXZlc2RrLWxpYnRvb2wgXAorICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtYmFzZS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtYmFzZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQwYjI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1iYXNlLmJiCkBAIC0wLDAgKzEsMzY5IEBACitTVU1NQVJZID0gIk1lcmdlIG1hY2hpbmUgYW5kIGRpc3RybyBvcHRpb25zIHRvIGNyZWF0ZSBhIGJhc2ljIG1hY2hpbmUgdGFzay9wYWNrYWdlIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyODMiCisKKyMKKyMgcGFja2FnZXMgd2hpY2ggY29udGVudCBkZXBlbmQgb24gTUFDSElORV9GRUFUVVJFUyBuZWVkIHRvIGJlIE1BQ0hJTkVfQVJDSAorIworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKK2luaGVyaXQgYmx1ZXRvb3RoCisKK1BST1ZJREVTID0gIiR7UEFDS0FHRVN9IgorUEFDS0FHRVMgPSAnIFwKKyAgICAgICAgICAgIHBhY2thZ2Vncm91cC1iYXNlIFwKKyAgICAgICAgICAgIHBhY2thZ2Vncm91cC1iYXNlLWV4dGVuZGVkIFwKKyAgICAgICAgICAgIHBhY2thZ2Vncm91cC1kaXN0cm8tYmFzZSBcCisgICAgICAgICAgICBwYWNrYWdlZ3JvdXAtbWFjaGluZS1iYXNlIFwKKyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFjcGkiLCAicGFja2FnZWdyb3VwLWJhc2UtYWNwaSIsICIiLGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhbHNhIiwgInBhY2thZ2Vncm91cC1iYXNlLWFsc2EiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFwbSIsICJwYWNrYWdlZ3JvdXAtYmFzZS1hcG0iLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImV4dDIiLCAicGFja2FnZWdyb3VwLWJhc2UtZXh0MiIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAidmZhdCIsICJwYWNrYWdlZ3JvdXAtYmFzZS12ZmF0IiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJpcmRhIiwgInBhY2thZ2Vncm91cC1iYXNlLWlyZGEiLCAiIixkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAia2V5Ym9hcmQiLCAicGFja2FnZWdyb3VwLWJhc2Uta2V5Ym9hcmQiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInBjaSIsICJwYWNrYWdlZ3JvdXAtYmFzZS1wY2kiLCAiIixkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAicGNtY2lhIiwgInBhY2thZ2Vncm91cC1iYXNlLXBjbWNpYSIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAicGhvbmUiLCAicGFja2FnZWdyb3VwLWJhc2UtcGhvbmUiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInNlcmlhbCIsICJwYWNrYWdlZ3JvdXAtYmFzZS1zZXJpYWwiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInVzYmdhZGdldCIsICJwYWNrYWdlZ3JvdXAtYmFzZS11c2JnYWRnZXQiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInVzYmhvc3QiLCAicGFja2FnZWdyb3VwLWJhc2UtdXNiaG9zdCIsICIiLCBkKX0gXAorICAgICAgICAgICAgXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJibHVldG9vdGgiLCAicGFja2FnZWdyb3VwLWJhc2UtYmx1ZXRvb3RoIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIndpZmkiLCAicGFja2FnZWdyb3VwLWJhc2Utd2lmaSIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICIzZyIsICJwYWNrYWdlZ3JvdXAtYmFzZS0zZyIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJuZmMiLCAicGFja2FnZWdyb3VwLWJhc2UtbmZjIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgImNyYW1mcyIsICJwYWNrYWdlZ3JvdXAtYmFzZS1jcmFtZnMiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAiaXBzZWMiLCAicGFja2FnZWdyb3VwLWJhc2UtaXBzZWMiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAiaXB2NiIsICJwYWNrYWdlZ3JvdXAtYmFzZS1pcHY2IiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIm5mcyIsICJwYWNrYWdlZ3JvdXAtYmFzZS1uZnMiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAicHBwIiwgInBhY2thZ2Vncm91cC1iYXNlLXBwcCIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJzbWJmcyIsICJwYWNrYWdlZ3JvdXAtYmFzZS1zbWJmcyIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJ6ZXJvY29uZiIsICJwYWNrYWdlZ3JvdXAtYmFzZS16ZXJvY29uZiIsICIiLCBkKX0gXAorICAgICAgICAgICAgXAorICAgICAgICAgICAgJworCisjIE92ZXJyaWRlIGJ5IGRpc3RybyBpZiBuZWVkZWQKK1ZJUlRVQUwtUlVOVElNRV9rZXltYXBzID89ICJrZXltYXBzIgorCisjCisjIHBhY2thZ2Vncm91cC1iYXNlIGNvbnRhaW4gc3R1ZmYgbmVlZGVkIGZvciBiYXNlIHN5c3RlbSAobWFjaGluZSByZWxhdGVkKQorIworUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UgPSAiXAorICAgIHBhY2thZ2Vncm91cC1kaXN0cm8tYmFzZSBcCisgICAgcGFja2FnZWdyb3VwLW1hY2hpbmUtYmFzZSBcCisgICAgXAorICAgIHN5c2ZzdXRpbHMgXAorICAgIG1vZHVsZS1pbml0LXRvb2xzIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdhcG0nLCAncGFja2FnZWdyb3VwLWJhc2UtYXBtJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdhY3BpJywgJ3BhY2thZ2Vncm91cC1iYXNlLWFjcGknLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdNQUNISU5FX0ZFQVRVUkVTJywgJ2tleWJvYXJkJywgJ3BhY2thZ2Vncm91cC1iYXNlLWtleWJvYXJkJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdwaG9uZScsICdwYWNrYWdlZ3JvdXAtYmFzZS1waG9uZScsICcnLGQpfSBcCisgICAgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdhbHNhJywgJ3BhY2thZ2Vncm91cC1iYXNlLWFsc2EnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdleHQyJywgJ3BhY2thZ2Vncm91cC1iYXNlLWV4dDInLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICd2ZmF0JywgJ3BhY2thZ2Vncm91cC1iYXNlLXZmYXQnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdpcmRhJywgJ3BhY2thZ2Vncm91cC1iYXNlLWlyZGEnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdwY2knLCAncGFja2FnZWdyb3VwLWJhc2UtcGNpJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAncGNtY2lhJywgJ3BhY2thZ2Vncm91cC1iYXNlLXBjbWNpYScsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3VzYmdhZGdldCcsICdwYWNrYWdlZ3JvdXAtYmFzZS11c2JnYWRnZXQnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICd1c2Job3N0JywgJ3BhY2thZ2Vncm91cC1iYXNlLXVzYmhvc3QnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdibHVldG9vdGgnLCAncGFja2FnZWdyb3VwLWJhc2UtYmx1ZXRvb3RoJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAnd2lmaScsICdwYWNrYWdlZ3JvdXAtYmFzZS13aWZpJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAnM2cnLCAncGFja2FnZWdyb3VwLWJhc2UtM2cnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICduZmMnLCAncGFja2FnZWdyb3VwLWJhc2UtbmZjJywgJycsZCl9IFwKKyAgICBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICduZnMnLCAncGFja2FnZWdyb3VwLWJhc2UtbmZzJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2NyYW1mcycsICdwYWNrYWdlZ3JvdXAtYmFzZS1jcmFtZnMnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc21iZnMnLCAncGFja2FnZWdyb3VwLWJhc2Utc21iZnMnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdwYWNrYWdlZ3JvdXAtYmFzZS1pcHY2JywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwc2VjJywgJ3BhY2thZ2Vncm91cC1iYXNlLWlwc2VjJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BwcCcsICdwYWNrYWdlZ3JvdXAtYmFzZS1wcHAnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnemVyb2NvbmYnLCAncGFja2FnZWdyb3VwLWJhc2UtemVyb2NvbmYnLCAnJyxkKX0gXAorICAgICIKKworCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZSA9ICJcCisgICAga2VybmVsLW1vZHVsZS1ubHMtdXRmOCBcCisgICAga2VybmVsLW1vZHVsZS1pbnB1dCBcCisgICAga2VybmVsLW1vZHVsZS11aW5wdXQgXAorICAgIGtlcm5lbC1tb2R1bGUtcnRjLWRldiBcCisgICAga2VybmVsLW1vZHVsZS1ydGMtcHJvYyBcCisgICAga2VybmVsLW1vZHVsZS1ydGMtc3lzZnMgXAorICAgIGtlcm5lbC1tb2R1bGUtdW5peCIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtZXh0ZW5kZWQgPSAiXAorICAgIHBhY2thZ2Vncm91cC1iYXNlIFwKKyAgICAke0FERF9XSUZJfSBcCisgICAgJHtBRERfQlR9IFwKKyAgICAke0FERF8zR30gXAorICAgICR7QUREX05GQ30gXAorICAgICIKKworQUREX1dJRkkgPSAiIgorQUREX0JUID0gIiIKK0FERF8zRyA9ICIiCitBRERfTkZDID0gIiIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICAjIElmIERpc3RybyB3YW50IHdpZmkgYW5kIG1hY2hpbmUgZmVhdHVyZSB3aWZpL3BjaS9wY21jaWEvdXNiaG9zdCAob25lIG9mIHRoZW0pCisgICAgIyB0aGVuIGluY2x1ZGUgcGFja2FnZWdyb3VwLWJhc2Utd2lmaSBpbiBwYWNrYWdlZ3JvdXAtYmFzZQorCisgICAgZGlzdHJvX2ZlYXR1cmVzID0gc2V0KGQuZ2V0VmFyKCJESVNUUk9fRkVBVFVSRVMiLCBUcnVlKS5zcGxpdCgpKQorICAgIG1hY2hpbmVfZmVhdHVyZXM9IHNldChkLmdldFZhcigiTUFDSElORV9GRUFUVVJFUyIsIFRydWUpLnNwbGl0KCkpCisKKyAgICBpZiAiYmx1ZXRvb3RoIiBpbiBkaXN0cm9fZmVhdHVyZXMgYW5kIG5vdCAiYmx1ZXRvb3RoIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIGFuZCAoInBjbWNpYSIgaW4gbWFjaGluZV9mZWF0dXJlcyBvciAicGNpIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIG9yICJ1c2Job3N0IiBpbiBtYWNoaW5lX2ZlYXR1cmVzKToKKyAgICAgICAgZC5zZXRWYXIoIkFERF9CVCIsICJwYWNrYWdlZ3JvdXAtYmFzZS1ibHVldG9vdGgiKQorCisgICAgaWYgIndpZmkiIGluIGRpc3Ryb19mZWF0dXJlcyBhbmQgbm90ICJ3aWZpIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIGFuZCAoInBjbWNpYSIgaW4gbWFjaGluZV9mZWF0dXJlcyBvciAicGNpIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIG9yICJ1c2Job3N0IiBpbiBtYWNoaW5lX2ZlYXR1cmVzKToKKyAgICAgICAgZC5zZXRWYXIoIkFERF9XSUZJIiwgInBhY2thZ2Vncm91cC1iYXNlLXdpZmkiKQorCisgICAgaWYgIjNnIiBpbiBkaXN0cm9fZmVhdHVyZXMgYW5kIG5vdCAiM2ciIGluIG1hY2hpbmVfZmVhdHVyZXMgYW5kICgicGNtY2lhIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIG9yICJwY2kiIGluIG1hY2hpbmVfZmVhdHVyZXMgb3IgInVzYmhvc3QiIGluIG1hY2hpbmVfZmVhdHVyZXMpOgorICAgICAgICBkLnNldFZhcigiQUREXzNHIiwgInBhY2thZ2Vncm91cC1iYXNlLTNnIikKKworICAgIGlmICJuZmMiIGluIGRpc3Ryb19mZWF0dXJlcyBhbmQgbm90ICJuZmMiIGluIG1hY2hpbmVfZmVhdHVyZXMgYW5kICgidXNiaG9zdCIgaW4gbWFjaGluZV9mZWF0dXJlcyk6CisgICAgICAgIGQuc2V0VmFyKCJBRERfTkZDIiwgInBhY2thZ2Vncm91cC1iYXNlLW5mYyIpCit9CisKKyMKKyMgcGFja2FnZXMgYWRkZWQgYnkgZGlzdHJpYnV0aW9uCisjCitTVU1NQVJZX3BhY2thZ2Vncm91cC1kaXN0cm8tYmFzZSA9ICIke0RJU1RST30gZXh0cmFzIgorREVQRU5EU19wYWNrYWdlZ3JvdXAtZGlzdHJvLWJhc2UgPSAiJHtESVNUUk9fRVhUUkFfREVQRU5EU30iCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtZGlzdHJvLWJhc2UgPSAiJHtESVNUUk9fRVhUUkFfUkRFUEVORFN9IgorUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWRpc3Ryby1iYXNlID0gIiR7RElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTfSIKKworIworIyBwYWNrYWdlcyBhZGRlZCBieSBtYWNoaW5lIGNvbmZpZworIworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtbWFjaGluZS1iYXNlID0gIiR7TUFDSElORX0gZXh0cmFzIgorU1VNTUFSWV9wYWNrYWdlZ3JvdXAtbWFjaGluZS1iYXNlID0gIkV4dHJhIHBhY2thZ2VzIHJlcXVpcmVkIHRvIGZ1bGx5IHN1cHBvcnQgJHtNQUNISU5FfSBoYXJkd2FyZSIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1tYWNoaW5lLWJhc2UgPSAiJHtNQUNISU5FX0VYVFJBX1JERVBFTkRTfSIKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1tYWNoaW5lLWJhc2UgPSAiJHtNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTfSIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1rZXlib2FyZCA9ICJLZXlib2FyZCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2Uta2V5Ym9hcmQgPSAiXAorICAgICR7VklSVFVBTC1SVU5USU1FX2tleW1hcHN9IgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXBjaSA9ICJQQ0kgYnVzIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1wY2kgPSAiXAorICAgIHBjaXV0aWxzIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWFjcGkgPSAiQUNQSSBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtYWNwaSA9ICJcCisgICAgYWNwaWQgXAorICAgIGxpYmFjcGkgIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWFwbSA9ICJBUE0gc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLWFwbSA9ICJcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfYXBtfSBcCisgICAgYXBtZCIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1leHQyID0gImV4dDIgZmlsZXN5c3RlbSBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtZXh0MiA9ICJcCisgICAgaGRwYXJtIFwKKyAgICBlMmZzcHJvZ3MgXAorICAgIGUyZnNwcm9ncy1lMmZzY2sgXAorICAgIGUyZnNwcm9ncy1ta2UyZnMiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtdmZhdCA9ICJGQVQgZmlsZXN5c3RlbSBzdXBwb3J0IgorUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtdmZhdCA9ICJcCisgICAga2VybmVsLW1vZHVsZS1tc2RvcyBcCisgICAga2VybmVsLW1vZHVsZS12ZmF0IFwKKyAgICBrZXJuZWwtbW9kdWxlLW5scy1pc284ODU5LTEgXAorICAgIGtlcm5lbC1tb2R1bGUtbmxzLWNwNDM3IFwKKyAgICBkb3Nmc3Rvb2xzIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWFsc2EgPSAiQUxTQSBzb3VuZCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtYWxzYSA9ICJcCisgICAgYWxzYS11dGlscy1hbHNhY3RsIFwKKyAgICBhbHNhLXV0aWxzLWFsc2FtaXhlciBcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfYWxzYS1zdGF0ZX0iCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLWFsc2EgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtc25kLW1peGVyLW9zcyBcCisgICAga2VybmVsLW1vZHVsZS1zbmQtcGNtLW9zcyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1wY21jaWEgPSAiUEMgY2FyZCBzbG90IHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1wY21jaWEgPSAiXAorICAgIHBjbWNpYXV0aWxzIFwKKyAgICAiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXBjbWNpYSA9ICJcCisgICAga2VybmVsLW1vZHVsZS1wY21jaWEgXAorICAgIGtlcm5lbC1tb2R1bGUtYWlyby1jcyBcCisgICAga2VybmVsLW1vZHVsZS1wY25ldC1jcyBcCisgICAga2VybmVsLW1vZHVsZS1zZXJpYWwtY3MgXAorICAgIGtlcm5lbC1tb2R1bGUtaWRlLWNzIFwKKyAgICBrZXJuZWwtbW9kdWxlLWlkZS1kaXNrIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dpZmknLCAna2VybmVsLW1vZHVsZS1ob3N0YXAtY3MnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2lmaScsICdrZXJuZWwtbW9kdWxlLW9yaW5vY28tY3MnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2lmaScsICdrZXJuZWwtbW9kdWxlLXNwZWN0cnVtLWNzJywgJycsZCl9IgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWJsdWV0b290aCA9ICJCbHVldG9vdGggc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLWJsdWV0b290aCA9ICJcCisgICAgJHtCTFVFWn0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdhbHNhJywgJ2xpYmFzb3VuZC1tb2R1bGUtYmx1ZXonLCAnJyxkKX0gXAorICAgICIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtYmx1ZXRvb3RoID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLWJsdWV0b290aCBcCisgICAga2VybmVsLW1vZHVsZS1sMmNhcCBcCisgICAga2VybmVsLW1vZHVsZS1yZmNvbW0gXAorICAgIGtlcm5lbC1tb2R1bGUtaGNpLXZoY2kgXAorICAgIGtlcm5lbC1tb2R1bGUtYm5lcCBcCisgICAga2VybmVsLW1vZHVsZS1oaWRwIFwKKyAgICBrZXJuZWwtbW9kdWxlLWhjaS11YXJ0IFwKKyAgICBrZXJuZWwtbW9kdWxlLXNjbyBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3VzYmhvc3QnLCAna2VybmVsLW1vZHVsZS1oY2ktdXNiJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAncGNtY2lhJywgJ2tlcm5lbC1tb2R1bGUtYmx1ZXRvb3RoM2MtY3MnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdwY21jaWEnLCAna2VybmVsLW1vZHVsZS1ibHVlY2FyZC1jcycsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3BjbWNpYScsICdrZXJuZWwtbW9kdWxlLWJsdWV0b290aHVhcnQtY3MnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdwY21jaWEnLCAna2VybmVsLW1vZHVsZS1kdGwxLWNzJywgJycsZCl9IFwKKyAgICAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtaXJkYSA9ICJJckRBIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1pcmRhID0gIlwKKyAgICBpcmRhLXV0aWxzIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1pcmRhID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLXB4YWZpY3AtaXIgXAorICAgIGtlcm5lbC1tb2R1bGUtaXJkYSBcCisgICAga2VybmVsLW1vZHVsZS1pcmNvbW0gXAorICAgIGtlcm5lbC1tb2R1bGUtaXJjb21tLXR0eSBcCisgICAga2VybmVsLW1vZHVsZS1pcmxhbiBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwcHAnLCAna2VybmVsLW1vZHVsZS1pcm5ldCcsICcnLGQpfSBcCisgICAga2VybmVsLW1vZHVsZS1pcnBvcnQgXAorICAgIGtlcm5lbC1tb2R1bGUtaXJ0dHkgXAorICAgIGtlcm5lbC1tb2R1bGUtaXJ0dHktc2lyIFwKKyAgICBrZXJuZWwtbW9kdWxlLXNpci1kZXYgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICd1c2Job3N0JywgJ2tlcm5lbC1tb2R1bGUtaXItdXNiJywgJycsZCl9ICIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS11c2JnYWRnZXQgPSAiVVNCIGdhZGdldCBzdXBwb3J0IgorUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtdXNiZ2FkZ2V0ID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLXB4YTI3eF91ZGMgXAorICAgIGtlcm5lbC1tb2R1bGUtZ2FkZ2V0ZnMgXAorICAgIGtlcm5lbC1tb2R1bGUtZy1maWxlLXN0b3JhZ2UgXAorICAgIGtlcm5lbC1tb2R1bGUtZy1zZXJpYWwgXAorICAgIGtlcm5lbC1tb2R1bGUtZy1ldGhlciIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS11c2Job3N0ID0gIlVTQiBob3N0IHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS11c2Job3N0ID0gIlwKKyAgICB1c2J1dGlscyAiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXVzYmhvc3QgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtdWhjaS1oY2QgXAorICAgIGtlcm5lbC1tb2R1bGUtb2hjaS1oY2QgXAorICAgIGtlcm5lbC1tb2R1bGUtZWhjaS1oY2QgXAorICAgIGtlcm5lbC1tb2R1bGUtdXNiY29yZSBcCisgICAga2VybmVsLW1vZHVsZS11c2JoaWQgXAorICAgIGtlcm5lbC1tb2R1bGUtdXNibmV0IFwKKyAgICBrZXJuZWwtbW9kdWxlLXNkLW1vZCBcCisgICAga2VybmVsLW1vZHVsZS1zY3NpLW1vZCBcCisgICAga2VybmVsLW1vZHVsZS11c2Jtb3VzZSBcCisgICAga2VybmVsLW1vZHVsZS1tb3VzZWRldiBcCisgICAga2VybmVsLW1vZHVsZS11c2JzZXJpYWwgXAorICAgIGtlcm5lbC1tb2R1bGUtdXNiLXN0b3JhZ2UgIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXBwcCA9ICJQUFAgZGlhbC11cCBwcm90b2NvbCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtcHBwID0gIlwKKyAgICBwcHAgXAorICAgIHBwcC1kaWFsaW4iCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXBwcCA9ICJcCisgICAga2VybmVsLW1vZHVsZS1wcHAtYXN5bmMgXAorICAgIGtlcm5lbC1tb2R1bGUtcHBwLWRlZmxhdGUgXAorICAgIGtlcm5lbC1tb2R1bGUtcHBwLWdlbmVyaWMgXAorICAgIGtlcm5lbC1tb2R1bGUtcHBwLW1wcGUgXAorICAgIGtlcm5lbC1tb2R1bGUtc2xoYyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1pcHNlYyA9ICJJUFNFQyBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtaXBzZWMgPSAiXAorICAgICIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtaXBzZWMgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtaXBzZWMiCisKKyMKKyMgcGFja2FnZWdyb3VwLWJhc2Utd2lmaSBjb250YWluIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIGdldCBXaUZpIHdvcmtpbmcKKyMgV0VQL1dQQSBjb25uZWN0aW9uIG5lZWRzIHRvIGJlIHN1cHBvcnRlZCBvdXQtb2YtYm94CisjCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXdpZmkgPSAiV2lGaSBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2Utd2lmaSA9ICJcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfd2lyZWxlc3MtdG9vbHN9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAncGNtY2lhJywgJ2hvc3RhcC11dGlscycsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3BjaScsICdob3N0YXAtdXRpbHMnLCAnJyxkKX0gXAorICAgIHdwYS1zdXBwbGljYW50IgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS13aWZpID0gIlwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAndXNiaG9zdCcsICdrZXJuZWwtbW9kdWxlLXpkMTIxMXJ3JywgJycsZCl9IFwKKyAgICBrZXJuZWwtbW9kdWxlLWllZWU4MDIxMS1jcnlwdCBcCisgICAga2VybmVsLW1vZHVsZS1pZWVlODAyMTEtY3J5cHQtY2NtcCBcCisgICAga2VybmVsLW1vZHVsZS1pZWVlODAyMTEtY3J5cHQtdGtpcCBcCisgICAga2VybmVsLW1vZHVsZS1pZWVlODAyMTEtY3J5cHQtd2VwIFwKKyAgICBrZXJuZWwtbW9kdWxlLWVjYiBcCisgICAga2VybmVsLW1vZHVsZS1hcmM0IFwKKyAgICBrZXJuZWwtbW9kdWxlLWNyeXB0b19hbGdhcGkgXAorICAgIGtlcm5lbC1tb2R1bGUtY3J5cHRvbWdyIFwKKyAgICBrZXJuZWwtbW9kdWxlLW1pY2hhZWwtbWljIFwKKyAgICBrZXJuZWwtbW9kdWxlLWFlcy1nZW5lcmljIFwKKyAgICBrZXJuZWwtbW9kdWxlLWFlcyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1uZmMgPSAiTmVhciBGaWVsZCBDb21tdW5pY2F0aW9uIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1uZmMgPSAiXAorICAgIG5lYXJkIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1uZmMgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtbmZjIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLTNnID0gIkNlbGx1bGFyIGRhdGEgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLTNnID0gIlwKKyAgICBvZm9ubyIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtM2cgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtY2RjLWFjbSBcCisgICAga2VybmVsLW1vZHVsZS1jZGMtd2RtIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXNtYmZzID0gIlNNQiBuZXR3b3JrIGZpbGVzeXN0ZW0gc3VwcG9ydCIKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXNtYmZzID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLWNpZnMgXAorICAgIGtlcm5lbC1tb2R1bGUtc21iZnMiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtY3JhbWZzID0gImNyYW1mcyBmaWxlc3lzdGVtIHN1cHBvcnQiCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1jcmFtZnMgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtY3JhbWZzIgorCisjCisjIHBhY2thZ2Vncm91cC1iYXNlLW5mcyBwcm92aWRlcyBPTkxZIGNsaWVudCBzdXBwb3J0IC0gc2VydmVyIGlzIGluIG5mcy11dGlscyBwYWNrYWdlCisjCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLW5mcyA9ICJORlMgbmV0d29yayBmaWxlc3lzdGVtIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1uZnMgPSAiXAorICAgIHJwY2JpbmQiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLW5mcyA9ICJcCisgICAga2VybmVsLW1vZHVsZS1uZnMgIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXplcm9jb25mID0gIlplcm9jb25mIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS16ZXJvY29uZiA9ICJcCisgICAgYXZhaGktZGFlbW9uIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtemVyb2NvbmZfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiXAorICAgIGxpYm5zcy1tZG5zIFwKKyAgICAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtaXB2NiA9ICJJUHY2IHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1pcHY2ID0gIlwKKyAgICAiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLWlwdjYgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtaXB2NiAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2Utc2VyaWFsID0gIlNlcmlhbCBwb3J0IHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1zZXJpYWwgPSAiXAorICAgIHNldHNlcmlhbCBcCisgICAgbHJ6c3ogIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXBob25lID0gIkNlbGx1bGFyIHRlbGVwaG9ueSAodm9pY2UpIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1waG9uZSA9ICJcCisgICAgb2Zvbm8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtYm9vdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1ib290LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZjUzNzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtYm9vdC5iYgpAQCAtMCwwICsxLDQ3IEBACisjCisjIENvcHlyaWdodCAoQykgMjAwNyBPcGVuZWRIYW5kIEx0ZC4KKyMKKworU1VNTUFSWSA9ICJNaW5pbWFsIGJvb3QgcmVxdWlyZW1lbnRzIgorREVTQ1JJUFRJT04gPSAiVGhlIG1pbmltYWwgc2V0IG9mIHBhY2thZ2VzIHJlcXVpcmVkIHRvIGJvb3QgdGhlIHN5c3RlbSIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjE3IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCisjCisjIFNldCBieSB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uIHdpdGggcGFja2FnZXMgZXNzZW50aWFsIGZvciBkZXZpY2UgYm9vdHVwCisjCitNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyA/PSAiIgorTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMgPz0gIiIKKworIyBEaXN0cm8gY2FuIG92ZXJyaWRlIHRoZSBmb2xsb3dpbmcgVklSVFVBTC1SVU5USU1FIHByb3ZpZGVyczoKK1ZJUlRVQUwtUlVOVElNRV9kZXZfbWFuYWdlciA/PSAidWRldiIKK1ZJUlRVQUwtUlVOVElNRV9sb2dpbl9tYW5hZ2VyID89ICJidXN5Ym94IgorVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciA/PSAic3lzdmluaXQiCitWSVJUVUFMLVJVTlRJTUVfaW5pdHNjcmlwdHMgPz0gImluaXRzY3JpcHRzIgorVklSVFVBTC1SVU5USU1FX2tleW1hcHMgPz0gImtleW1hcHMiCisKK1NZU1ZJTklUX1NDUklQVFMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ01BQ0hJTkVfRkVBVFVSRVMnLCAncnRjJywgJ2J1c3lib3gtaHdjbG9jaycsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICBtb2R1dGlscy1pbml0c2NyaXB0cyBcCisgICAgICAgICAgICAgICAgICAgIGluaXQtaWZ1cGRvd24gXAorICAgICAgICAgICAgICAgICAgICAke1ZJUlRVQUwtUlVOVElNRV9pbml0c2NyaXB0c30gXAorICAgICAgICAgICAgICAgICAgICIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIGJhc2UtZmlsZXMgXAorICAgIGJhc2UtcGFzc3dkIFwKKyAgICBidXN5Ym94IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgInN5c3Zpbml0IiwgIiR7U1lTVklOSVRfU0NSSVBUU30iLCAiIiwgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJrZXlib2FyZCIsICIke1ZJUlRVQUwtUlVOVElNRV9rZXltYXBzfSIsICIiLCBkKX0gXAorICAgIG5ldGJhc2UgXAorICAgICR7VklSVFVBTC1SVU5USU1FX2xvZ2luX21hbmFnZXJ9IFwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXJ9IFwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9kZXZfbWFuYWdlcn0gXAorICAgICR7VklSVFVBTC1SVU5USU1FX3VwZGF0ZS1hbHRlcm5hdGl2ZXN9IFwKKyAgICAke01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTfSIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiXAorICAgICR7TUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFN9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWJ1aWxkZXNzZW50aWFsLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWJ1aWxkZXNzZW50aWFsLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZWQyNDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtYnVpbGRlc3NlbnRpYWwuYmIKQEAgLTAsMCArMSwyOSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZCBMdGQuCisjIENvcHlyaWdodCAoQykgMjAxMiBSZWQgSGF0LCBJbmMuCisjCisKK1NVTU1BUlkgPSAiRXNzZW50aWFsIGJ1aWxkIGRlcGVuZGVuY2llcyIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1idWlsZGVzc2VudGlhbCA9ICJcCisgICAgYXV0b2NvbmYgXAorICAgIGF1dG9tYWtlIFwKKyAgICBiaW51dGlscyBcCisgICAgYmludXRpbHMtc3ltbGlua3MgXAorICAgIGNwcCBcCisgICAgY3BwLXN5bWxpbmtzIFwKKyAgICBnY2MgXAorICAgIGdjYy1zeW1saW5rcyBcCisgICAgZysrIFwKKyAgICBnKystc3ltbGlua3MgXAorICAgIGdldHRleHQgXAorICAgIG1ha2UgXAorICAgIGxpYnN0ZGMrKyBcCisgICAgbGlic3RkYysrLWRldiBcCisgICAgbGlidG9vbCBcCisgICAgcGtnY29uZmlnIFwKKyAgICAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWVjbGlwc2UtZGVidWcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdiMDEzZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnLmJiCkBAIC0wLDAgKzEsMTAgQEAKK1NVTU1BUlkgPSAiUmVtb3RlIGRlYnVnZ2luZyB0b29scyBmb3IgRWNsaXBzZSBpbnRlZ3JhdGlvbiIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgZ2Ric2VydmVyIFwKKyAgICB0Y2YtYWdlbnQgXAorICAgIG9wZW5zc2gtc2Z0cC1zZXJ2ZXIgXAorICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1uZnMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbmZzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ODJkM2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbmZzLmJiCkBAIC0wLDAgKzEsMjEgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4IE9wZW5lZEhhbmQgTHRkLgorIworCitTVU1NQVJZID0gIk5GUyBwYWNrYWdlIGdyb3VwcyIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjIiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1BST1ZJREVTID0gIiR7UEFDS0FHRVN9IgorUEFDS0FHRVMgPSAiJHtQTn0tc2VydmVyICR7UE59LWNsaWVudCIKKworU1VNTUFSWV8ke1BOfS1jbGllbnQgPSAiTkZTIGNsaWVudCIKK1JERVBFTkRTXyR7UE59LWNsaWVudCA9ICJuZnMtdXRpbHMtY2xpZW50IgorCitTVU1NQVJZXyR7UE59LXNlcnZlciA9ICJORlMgc2VydmVyIgorUkRFUEVORFNfJHtQTn0tc2VydmVyID0gIlwKKyAgICBuZnMtdXRpbHMgXAorICAgIG5mcy11dGlscy1jbGllbnQgXAorICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zZGsuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc2RrLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYWRkMGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc2RrLmJiCkBAIC0wLDAgKzEsODMgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3IE9wZW5lZEhhbmQgTHRkLgorIworCitTVU1NQVJZID0gIlNvZnR3YXJlIGRldmVsb3BtZW50IHRvb2xzIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyOSIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworI1BBQ0tBR0VGVU5DUyA9KyAnZ2VuZXJhdGVfc2RrX3BrZ3MnCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLXNkayA9ICJcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtYnVpbGRlc3NlbnRpYWwgXAorICAgIGNvcmV1dGlscyBcCisgICAgY2NhY2hlIFwKKyAgICBkaWZmdXRpbHMgXAorICAgIGludGx0b29sIFwKKyAgICBwZXJsLW1vZHVsZS1yZSBcCisgICAgcGVybC1tb2R1bGUtdGV4dC13cmFwIFwKKyAgICBmaW5kdXRpbHMgXAorICAgIHF1aWx0IFwKKyAgICBsZXNzIFwKKyAgICBsZGQgXAorICAgIGZpbGUgXAorICAgIHRjbCIKKworU0FOSVRJWkVSUyA9ICJsaWJhc2FuLWRldiBsaWJ1YnNhbi1kZXYiCitTQU5JVElaRVJTX2FhcmNoNjQgPSAiIgorU0FOSVRJWkVSU19taXBzID0gIiIKK1NBTklUSVpFUlNfbWlwczY0ID0gIiIKK1NBTklUSVpFUlNfbWlwczY0bjMyID0gIiIKK1NBTklUSVpFUlNfcG93ZXJwYzY0ID0gIiIKK1NBTklUSVpFUlNfc3BhcmMgPSAiIgorU0FOSVRJWkVSU19saWJjLW11c2wgPSAiIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1zZGsgPSAiXAorICAgIGxpYmdvbXAgXAorICAgIGxpYmdvbXAtZGV2IFwKKyAgICAke1NBTklUSVpFUlN9IgorCisjcHl0aG9uIGdlbmVyYXRlX3Nka19wa2dzICgpIHsKKyMgICAgcG9reV9wa2dzID0gcmVhZF9wa2dkYXRhKCdwYWNrYWdlZ3JvdXAtY29yZScsIGQpWydQQUNLQUdFUyddCisjICAgIHBrZ3MgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisjICAgIGZvciBwa2cgaW4gcG9reV9wa2dzLnNwbGl0KCk6CisjICAgICAgICBuZXdwa2cgPSBwa2cucmVwbGFjZSgncGFja2FnZWdyb3VwLWNvcmUnLCAncGFja2FnZWdyb3VwLWNvcmUtc2RrJykKKyMKKyMgICAgICAgICMgZm9yIGVhY2ggb2YgdGhlIHRhc2sgcGFja2FnZXMsIGFkZCBhIGNvcnJlc3BvbmRpbmcgc2RrIHRhc2sKKyMgICAgICAgIHBrZ3MuYXBwZW5kKG5ld3BrZykKKyMKKyMgICAgICAgICMgZm9yIGVhY2ggc2RrIHRhc2ssIHRha2UgdGhlIHJkZXBlbmRzIG9mIHRoZSBub24tc2RrIHRhc2ssIGFuZCB0dXJuCisjICAgICAgICAjIHRoYXQgaW50byBycmVjb21tZW5kcyB1cG9uIHRoZSAtZGV2IHZlcnNpb25zIG9mIHRob3NlLCBub3QgdW5saWtlCisjICAgICAgICAjIHRoZSBwYWNrYWdlIGRlcGNoYWluIGNvZGUKKyMgICAgICAgIHNwa2dkYXRhID0gcmVhZF9zdWJwa2dkYXRhKHBrZywgZCkKKyMKKyMgICAgICAgIHJkZXBlbmRzID0gZXhwbG9kZV9kZXBzKHNwa2dkYXRhLmdldCgnUkRFUEVORFNfJXMnICUgcGtnKSBvciAnJykKKyMgICAgICAgIHJyZWNsaXN0ID0gW10KKyMKKyMgICAgICAgIGZvciBkZXBlbmQgaW4gcmRlcGVuZHM6CisjICAgICAgICAgICAgc3BsaXRfZGVwZW5kID0gZGVwZW5kLnNwbGl0KCcgKCcpCisjICAgICAgICAgICAgbmFtZSA9IHNwbGl0X2RlcGVuZFswXS5zdHJpcCgpCisjICAgICAgICAgICAgaWYgcGFja2FnZWQoJyVzLWRldicgJSBuYW1lLCBkKToKKyMgICAgICAgICAgICAgICAgcnJlY2xpc3QuYXBwZW5kKCclcy1kZXYnICUgbmFtZSkKKyMgICAgICAgICAgICBlbHNlOgorIyAgICAgICAgICAgICAgICBkZXBwa2dkYXRhID0gcmVhZF9zdWJwa2dkYXRhKG5hbWUsIGQpCisjICAgICAgICAgICAgICAgIHJkZXBlbmRzMiA9IGV4cGxvZGVfZGVwcyhkZXBwa2dkYXRhLmdldCgnUkRFUEVORFNfJXMnICUgbmFtZSkgb3IgJycpCisjICAgICAgICAgICAgICAgIGZvciBkZXBlbmQgaW4gcmRlcGVuZHMyOgorIyAgICAgICAgICAgICAgICAgICAgc3BsaXRfZGVwZW5kID0gZGVwZW5kLnNwbGl0KCcgKCcpCisjICAgICAgICAgICAgICAgICAgICBuYW1lID0gc3BsaXRfZGVwZW5kWzBdLnN0cmlwKCkKKyMgICAgICAgICAgICAgICAgICAgIGlmIHBhY2thZ2VkKCclcy1kZXYnICUgbmFtZSwgZCk6CisjICAgICAgICAgICAgICAgICAgICAgICAgcnJlY2xpc3QuYXBwZW5kKCclcy1kZXYnICUgbmFtZSkKKyMKKyMgICAgICAgICAgICBvbGRycmVjID0gZC5nZXRWYXIoJ1JSRUNPTU1FTkRTXyVzJyAlIG5ld3BrZywgRmFsc2UpIG9yICcnCisjICAgICAgICAgICAgZC5zZXRWYXIoJ1JSRUNPTU1FTkRTXyVzJyAlIG5ld3BrZywgb2xkcnJlYyArICcgJyArICcgJy5qb2luKHJyZWNsaXN0KSkKKyMgICAgICAgICAgICAjIGJiLm5vdGUoJ1JSRUNPTU1FTkRTXyVzID0gIiVzIicgJSAobmV3cGtnLCBkLmdldFZhcignUlJFQ09NTUVORFNfJXMnICUgbmV3cGtnLCBGYWxzZSkpKQorIworIyAgICAjIGJiLm5vdGUoJ3BrZ3MgaXMgJXMnICUgcGtncykKKyMgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgJyAnLmpvaW4ocGtncykpCisjfQorIworI1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5wYWNrYWdlZ3JvdXAtY29yZS1zZGstLioiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3NoLWRyb3BiZWFyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNzaC1kcm9wYmVhci5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTk5NDZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNzaC1kcm9wYmVhci5iYgpAQCAtMCwwICsxLDcgQEAKK1NVTU1BUlkgPSAiRHJvcGJlYXIgU1NIIGNsaWVudC9zZXJ2ZXIiCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInIxIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSREVQRU5EU18ke1BOfSA9ICJkcm9wYmVhciIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmQyMGU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoLmJiCkBAIC0wLDAgKzEsNyBAQAorU1VNTUFSWSA9ICJPcGVuU1NIIFNTSCBjbGllbnQvc2VydmVyIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyMSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUkRFUEVORFNfJHtQTn0gPSAib3BlbnNzaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZjVlNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0LmJiCkBAIC0wLDAgKzEsMTMgQEAKK1NVTU1BUlkgPSAiVGFyZ2V0IHBhY2thZ2VzIGZvciB0aGUgc3RhbmRhbG9uZSBTREsiCitQUiA9ICJyOCIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgbGliZ2NjIFwKKyAgICBsaWJnY2MtZGV2IFwKKyAgICBsaWJzdGRjKysgXAorICAgIGxpYnN0ZGMrKy1kZXYgXAorICAgICR7TElCQ19ERVBFTkRFTkNJRVN9IFwKKyAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtZGVidWcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtZGVidWcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzNDdiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1kZWJ1Zy5iYgpAQCAtMCwwICsxLDIwIEBACisjCisjIENvcHlyaWdodCAoQykgMjAwOCBPcGVuZWRIYW5kIEx0ZC4KKyMKKworU1VNTUFSWSA9ICJEZWJ1Z2dpbmcgdG9vbHMiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUFIgPSAicjMiCisKK01UUkFDRSA9ICIiCitNVFJBQ0VfbGliYy1nbGliYyA9ICJsaWJjLW10cmFjZSIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIGdkYiBcCisgICAgZ2Ric2VydmVyIFwKKyAgICBzdHJhY2UgXAorICAgICR7TVRSQUNFfSBcCisgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXByb2ZpbGUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGY1OTMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXByb2ZpbGUuYmIKQEAgLTAsMCArMSw4MSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggT3BlbmVkSGFuZCBMdGQuCisjCisKK1NVTU1BUlkgPSAiUHJvZmlsaW5nIHRvb2xzIgorTElDRU5TRSA9ICJNSVQiCisKK1BSID0gInIzIgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitQUk9GSUxFX1RPT0xTX1ggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnc3lzcHJvZicsICcnLCBkKX0iCisjIHN5c3Byb2YgZG9lc24ndCBzdXBwb3J0IGFhcmNoNjQKK1BST0ZJTEVfVE9PTFNfWF9hYXJjaDY0ID0gIiIKK1BST0ZJTEVfVE9PTFNfU1lTVEVNRCA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnc3lzdGVtZC1hbmFseXplJywgJycsIGQpfSIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiXAorICAgIHBlcmYgXAorICAgIHRyYWNlLWNtZCBcCisgICAgYmxrdHJhY2UgXAorICAgICR7UFJPRklMRV9UT09MU19YfSBcCisgICAgJHtQUk9GSUxFX1RPT0xTX1NZU1RFTUR9IFwKKyAgICAiCisKK1BST0ZJTEVUT09MUyA9ICJcCisgICAgcG93ZXJ0b3AgXAorICAgIGxhdGVuY3l0b3AgXAorICAgICIKKworIyBzeXN0ZW10YXAgbmVlZHMgZWxmdXRpbHMgd2hpY2ggaXMgbm90IGZ1bGx5IGJ1aWxkYWJsZSBvbiB1Y2xpYmMKKyMgaGVuY2Ugd2UgZXhjbHVkZSBpdCBmcm9tIHVjbGliYyBiYXNlZCBidWlsZHMKK1NZU1RFTVRBUCA9ICJzeXN0ZW10YXAiCitTWVNURU1UQVBfbGliYy11Y2xpYmMgPSAiIgorU1lTVEVNVEFQX21pcHMgPSAiIgorU1lTVEVNVEFQX21pcHM2NCA9ICIiCitTWVNURU1UQVBfbWlwczY0bjMyID0gIiIKK1NZU1RFTVRBUF9hYXJjaDY0ID0gIiIKKworIyBsdHRuZy11c3QgdXNlcyBzY2hlZF9nZXRjcHUoKSB3aGljaCBpcyBub3QgdGhlcmUgb24gdWNsaWJjCisjIGZvciBzb21lIG9mIHRoZSBhcmNoaXRlY3R1cmVzIGl0IGNhbiBiZSBwYXRjaGVkIHRvIGNhbGwgdGhlCisjIHN5c2NhbGwgZGlyZWN0bHkgYnV0IGZvciB4ODZfNjQgX19OUl9nZXRjcHUgaXMgYSB2c3lzY2FsbAorIyB3aGljaCBtZWFucyB3ZSBjYW4gbm90IHVzZSBzeXNjYWxsKCkgdG8gY2FsbCBpdC4gU28gd2UgaWdub3JlCisjIGl0IGZvciB4ODZfNjQvdWNsaWJjCisKK0xUVE5HVVNUID0gImx0dG5nLXVzdCIKK0xUVE5HVVNUX2xpYmMtdWNsaWJjID0gIiIKK0xUVE5HVVNUX2FhcmNoNjQgPSAiIgorCitMVFROR1RPT0xTID0gImx0dG5nLXRvb2xzIgorTFRUTkdUT09MU19hYXJjaDY0ID0gIiIKKworTFRUTkdNT0RVTEVTID0gImx0dG5nLW1vZHVsZXMiCitMVFROR01PRFVMRVNfYWFyY2g2NCA9ICIiCisKK0JBQkVMVFJBQ0UgPSAiYmFiZWx0cmFjZSIKK0JBQkVMVFJBQ0VfYWFyY2g2NCA9ICIiCisKKyMgdmFsZ3JpbmQgZG9lcyBub3Qgd29yayBvbiBtaXBzCisKK1ZBTEdSSU5EID0gInZhbGdyaW5kIgorVkFMR1JJTkRfbGliYy11Y2xpYmMgPSAiIgorVkFMR1JJTkRfbWlwcyA9ICIiCitWQUxHUklORF9taXBzNjQgPSAiIgorVkFMR1JJTkRfbWlwczY0bjMyID0gIiIKK1ZBTEdSSU5EX2FybSA9ICIiCitWQUxHUklORF9hYXJjaDY0ID0gIiIKKworIyAgICBleG1hcC1jb25zb2xlCisjICAgIGV4bWFwLXNlcnZlcgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgJHtQUk9GSUxFVE9PTFN9IFwKKyAgICAke0xUVE5HVVNUfSBcCisgICAgJHtMVFROR1RPT0xTfSBcCisgICAgJHtMVFROR01PRFVMRVN9IFwKKyAgICAke0JBQkVMVFJBQ0V9IFwKKyAgICAke1NZU1RFTVRBUH0gXAorICAgICR7VkFMR1JJTkR9IFwKKyAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTViMzk4OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy10ZXN0YXBwcy5iYgpAQCAtMCwwICsxLDU2IEBACisjCisjIENvcHlyaWdodCAoQykgMjAwOCBPcGVuZWRIYW5kIEx0ZC4KKyMKKworU1VNTUFSWSA9ICJUZXN0aW5nIHRvb2xzL2FwcGxpY2F0aW9ucyIKK0xJQ0VOU0UgPSAiTUlUIgorCitQUiA9ICJyMiIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworIyBrZXhlYy10b29scyBkb2Vzbid0IHdvcmsgb24gTWlwcworS0VYRUNUT09MUyA/PSAia2V4ZWMiCitLRVhFQ1RPT0xTX21pcHMgPz0gIiIKK0tFWEVDVE9PTFNfbWlwc2VsID89ICIiCitLRVhFQ1RPT0xTX3Bvd2VycGMgPz0gIiIKK0tFWEVDVE9PTFNfZTU1MDAtNjRiID89ICIiCitLRVhFQ1RPT0xTX2FhcmNoNjQgPz0gIiIKKworWDExR0xUT09MUyA9ICJcCisgICAgbWVzYS1kZW1vcyBcCisgICAgcGlnbGl0IFwKKyAgICAiCisKKzNHVE9PTFMgPSAiXAorICAgIG9mb25vLXRlc3RzIFwKKyAgICAiCisKK1gxMVRPT0xTID0gIlwKKyAgICBmc3Rlc3RzIFwKKyAgICBnc3QtcGxheWVyLWJpbiBcCisgICAgeDExcGVyZiBcCisgICAgeHJlc3RvcCBcCisgICAgeHdpbmluZm8gXAorICAgIHhwcm9wIFwKKyAgICB4dmlkZW8tdGVzdHMgXAorICAgICIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIGJsa3Rvb2wgXAorICAgIHRzbGliLWNhbGlicmF0ZSBcCisgICAgdHNsaWItdGVzdHMgXAorICAgIGxyenN6IFwKKyAgICAke0tFWEVDVE9PTFN9IFwKKyAgICBhbHNhLXV0aWxzLWFtaXhlciBcCisgICAgYWxzYS11dGlscy1hcGxheSBcCisgICAgbHRwIFwKKyAgICBjb25ubWFuLXRvb2xzIFwKKyAgICBjb25ubWFuLXRlc3RzIFwKKyAgICBjb25ubWFuLWNsaWVudCBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAiJHtYMTFUT09MU30iLCAiIiwgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMSBvcGVuZ2wnLCAiJHtYMTFHTFRPT0xTfSIsICIiLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnM2cnLCAiJHszR1RPT0xTfSIsICIiLCBkKX0gXAorICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4uYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MGRkOTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiSG9zdCBTREsgcGFja2FnZSBmb3IgY3Jvc3MgY2FuYWRpYW4gdG9vbGNoYWluIgorUE4gPSAicGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLSR7TUFDSElORX0iCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBjcm9zcy1jYW5hZGlhbiBwYWNrYWdlZ3JvdXAKKworUEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWSA9ICIxIgorCisjIFVzZSBpbmRpcmVjdGlvbiB0byBzdG9wIHRoZXNlIGJlaW5nIGV4cGFuZGVkIHByZW1hdHVyZWx5CitCSU5VVElMUyA9ICJiaW51dGlscy1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9IgorR0NDID0gImdjYy1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9IgorR0RCID0gImdkYi1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9IgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgJHtAYWxsX211bHRpbGliX3R1bmVfdmFsdWVzKGQsICdCSU5VVElMUycpfSBcCisgICAgJHtAYWxsX211bHRpbGliX3R1bmVfdmFsdWVzKGQsICdHQ0MnKX0gXAorICAgICR7QGFsbF9tdWx0aWxpYl90dW5lX3ZhbHVlcyhkLCAnR0RCJyl9IFwKKyAgICBtZXRhLWVudmlyb25tZW50LSR7TUFDSElORX0gXAorICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOGJlMjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLmJiCkBAIC0wLDAgKzEsMjAyIEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgorIworCitTVU1NQVJZID0gIlNlbGYtaG9zdGluZyIKK0RFU0NSSVBUSU9OID0gIlBhY2thZ2VzIHJlcXVpcmVkIHRvIHJ1biB0aGUgYnVpbGQgc3lzdGVtIgorUFIgPSAicjEzIgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwICBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgcmRlcGVuZHMgb24gbGlieDExLWRldgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRVMgPSAiXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZCBcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWRlYnVnIFwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtc2RrIFwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtZXh0ZW5kZWQgXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1ncmFwaGljcyBcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWhvc3QtdG9vbHMgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtZGVidWcgXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1zZGsgXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1leHRlbmRlZCBcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWdyYXBoaWNzIFwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtaG9zdC10b29scyBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtaG9zdC10b29scyA9ICJcCisgICAgY29ubm1hbiBcCisgICAgY29ubm1hbi1wbHVnaW4tZXRoZXJuZXQgXAorICAgIGRoY3AtY2xpZW50IFwKKyAgICBlMmZzcHJvZ3MgXAorICAgIGUyZnNwcm9ncy1lMmZzY2sgXAorICAgIGUyZnNwcm9ncy1ta2UyZnMgXAorICAgIGUyZnNwcm9ncy10dW5lMmZzIFwKKyAgICBoZHBhcm0gXAorICAgIGlwdGFibGVzIFwKKyAgICBsc2IgXAorICAgIG1jIFwKKyAgICBtYy1maXNoIFwKKyAgICBtYy1oZWxwZXJzIFwKKyAgICBtYy1oZWxwZXJzLXBlcmwgXAorICAgIG1jLWhlbHBlcnMtcHl0aG9uIFwKKyAgICBwYXJ0ZWQgXAorICAgIHBzZXVkbyBcCisgICAgc2NyZWVuIFwKKyAgICAiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1ob3N0LXRvb2xzID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLXR1biBcCisgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLXJhdyBcCisgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLW5hdCBcCisgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLW1hbmdsZSBcCisgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLWZpbHRlciBcCisJIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtc2RrID0gIlwKKyAgICBhdXRvY29uZiBcCisgICAgYXV0b21ha2UgXAorICAgIGJpbnV0aWxzIFwKKyAgICBiaW51dGlscy1zeW1saW5rcyBcCisgICAgY2NhY2hlIFwKKyAgICBjb3JldXRpbHMgXAorICAgIGNwcCBcCisgICAgY3BwLXN5bWxpbmtzIFwKKyAgICBkaXN0Y2MgXAorICAgIGdsaWJjLWdjb252LWlibTg1MCBcCisgICAgZmlsZSBcCisgICAgZmluZHV0aWxzIFwKKyAgICBnKysgXAorICAgIGcrKy1zeW1saW5rcyBcCisgICAgZ2NjIFwKKyAgICBnY2Mtc3ltbGlua3MgXAorICAgIGludGx0b29sIFwKKyAgICBsZGQgXAorICAgIGxlc3MgXAorICAgIGxpYnNzcCBcCisgICAgbGlic3NwLWRldiBcCisgICAgbGlic3NwLXN0YXRpY2RldiBcCisgICAgbGlic3RkYysrIFwKKyAgICBsaWJzdGRjKystZGV2IFwKKyAgICBsaWJ0b29sIFwKKyAgICBtYWtlIFwKKyAgICBta3RlbXAgXAorICAgIHBlcmwtbW9kdWxlLXJlIFwKKyAgICBwZXJsLW1vZHVsZS10ZXh0LXdyYXAgXAorICAgIHBrZ2NvbmZpZyBcCisgICAgcXVpbHQgXAorICAgIHNlZCBcCisgICAgIgorIyBnbGliYy11dGlsczogZm9yIHJwY2dlbgorUkRFUEVORFNfcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLXNka19hcHBlbmRfbGliYy1nbGliYyA9ICJcCisgICAgZ2xpYmMtdXRpbHMgXAorICAgICIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1kZWJ1ZyA9ICIgXAorICAgIGdkYiBcCisgICAgZ2Ric2VydmVyIFwKKyAgICByc3luYyBcCisgICAgc3RyYWNlIFwKKyAgICB0Y2YtYWdlbnQiCisKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWV4dGVuZGVkID0gIlwKKyAgICBiemlwMiBcCisgICAgY2hrY29uZmlnIFwKKyAgICBjaHJwYXRoIFwKKyAgICBjcGlvIFwKKyAgICBjdXJsIFwKKyAgICBkaWZmc3RhdCBcCisgICAgZGlmZnV0aWxzIFwKKyAgICBlbGZ1dGlscyBcCisgICAgZXhwYXQgXAorICAgIGdhd2sgXAorICAgIGdkYm0gXAorICAgIGdldHRleHQgXAorICAgIGdldHRleHQtcnVudGltZSBcCisgICAgZ2l0IFwKKyAgICBnaXQtcGVybHRvb2xzIFwKKyAgICBncmVwIFwKKyAgICBncm9mZiBcCisgICAgZ3ppcCBcCisgICAgc2V0dGluZ3MtZGFlbW9uIFwKKyAgICBoaWNvbG9yLWljb24tdGhlbWUgXAorICAgIHNhdG8taWNvbi10aGVtZSBcCisgICAgbGliYWlvIFwKKyAgICBsaWJ1c2IxIFwKKyAgICBsaWJ4bWwyIFwKKyAgICBscnpzeiBcCisgICAgbHNvZiBcCisgICAgbHpvIFwKKyAgICBtYW4gXAorICAgIG1hbi1wYWdlcyBcCisgICAgbWRhZG0gXAorICAgIG1pbmljb20gXAorICAgIG10b29scyBcCisgICAgbmN1cnNlcyBcCisgICAgbmN1cnNlcy10ZXJtaW5mby1iYXNlIFwKKyAgICBuZW9uIFwKKyAgICBuZnMtdXRpbHMgXAorICAgIG5mcy11dGlscy1jbGllbnQgXAorICAgIG9wZW5zc2wgXAorICAgIG9wZW5zc2gtc2Z0cC1zZXJ2ZXIgXAorICAgIG9wa2cgXAorICAgIG9wa2ctdXRpbHMgXAorICAgIHBhdGNoIFwKKyAgICBwZXJsIFwKKyAgICBwZXJsLWRldiBcCisgICAgcGVybC1tb2R1bGVzIFwKKyAgICBwZXJsLXBvZCBcCisgICAgJHtQVEh9IFwKKyAgICBweXRob24gXAorICAgIHB5dGhvbi1jb21waWxlciBcCisgICAgcHl0aG9uLWdpdCBcCisgICAgcHl0aG9uLW1pc2MgXAorICAgIHB5dGhvbi1tb2R1bGVzIFwKKyAgICBweXRob24tcnBtIFwKKyAgICBxdW90YSBcCisgICAgcmVhZGxpbmUgXAorICAgIHJwbSBcCisgICAgc2V0c2VyaWFsIFwKKyAgICBzb2NhdCBcCisgICAgc3VidmVyc2lvbiBcCisgICAgc3VkbyBcCisgICAgc3lzc3RhdCBcCisgICAgdGFyIFwKKyAgICB0Y2wgXAorICAgIHRleGkyaHRtbCBcCisgICAgdGV4aW5mbyBcCisgICAgdW56aXAgXAorICAgIHVzYnV0aWxzIFwKKyAgICB3YXRjaGRvZyBcCisgICAgd2dldCBcCisgICAgd2hpY2ggXAorICAgIHhpbmV0ZCBcCisgICAgemlwIFwKKyAgICB6bGliIFwKKyAgICB4eiBcCisgICAgIgorCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1ncmFwaGljcyA9ICJcCisgICAgYnVpbGRlciBcCisgICAgbGliZ2wgXAorICAgIGxpYmdsLWRldiBcCisgICAgbGliZ2x1IFwKKyAgICBsaWJnbHUtZGV2IFwKKyAgICBsaWJzZGwgXAorICAgIGxpYnNkbC1kZXYgXAorICAgIGxpYngxMS1kZXYgXAorICAgIHB5dGhvbi1weWd0ayBcCisgICAgZ3RrLXRoZW1lLWNsZWFybG9va3MgXAorICAgIHhkZy11dGlscyBcCisgICAgZXBpcGhhbnkgXAorICAgIGxlYWZwYWQgXAorICAgIHBjbWFuZm0gXAorICAgIHZ0ZSBcCisgICAgIgorUFRIID0gInB0aCIKK1BUSF9saWJjLXVjbGliYyA9ICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvMDAwMS1wc3BsYXNoLWZiLUNvbnZlcnQtcHNwbGFzaF9mYl9wbG90X3BpeGVsLXRvLWEtc3RhdGljLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzLzAwMDEtcHNwbGFzaC1mYi1Db252ZXJ0LXBzcGxhc2hfZmJfcGxvdF9waXhlbC10by1hLXN0YXRpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2IzYzZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzLzAwMDEtcHNwbGFzaC1mYi1Db252ZXJ0LXBzcGxhc2hfZmJfcGxvdF9waXhlbC10by1hLXN0YXRpYy5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIDhmNWRlMTJjYzc1YmZhYTg0MDBhZGYzMmYzMGMwMTVkOGY4MTM1NDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAyMiBBdWcgMjAxNSAwNzoxMjoyMCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBwc3BsYXNoLWZiOiBDb252ZXJ0IHBzcGxhc2hfZmJfcGxvdF9waXhlbCgpIHRvIGEgc3RhdGljCisgaW5saW5lCisKK1RoaXMgZnVuY3Rpb24gaXMgbm90IHVzZWQgb3V0c2lkZSBwc3BsYXNoLWZiLmMgYW5kIGJ5IG1ha2luZyBpdAorc3RhdGljIGlubGluZSB3ZSBrZWVwIHRoZSBwZXJmb3JtYW5jZSBhbmQgYWxzbyBtYWtlIGl0IHBvcnRhYmxlIGFjcm9zcworbXVsdGlwbGUgY29tcGlsZXJzIGFuZCBnY2MgdmVyc2lvbnMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBwc3BsYXNoLWZiLmMgfCAyICstCisgcHNwbGFzaC1mYi5oIHwgOCAtLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9wc3BsYXNoLWZiLmMgYi9wc3BsYXNoLWZiLmMKK2luZGV4IGJkOWNkOWQuLjZkMjM1ZGIgMTAwNjQ0CistLS0gYS9wc3BsYXNoLWZiLmMKKysrKyBiL3BzcGxhc2gtZmIuYworQEAgLTI2MCw3ICsyNjAsNyBAQCBwc3BsYXNoX2ZiX25ldyAoaW50IGFuZ2xlKQorIAorICNkZWZpbmUgT0ZGU0VUKGZiLHgseSkgKCgoeSkgKiAoZmIpLT5zdHJpZGUpICsgKCh4KSAqICgoZmIpLT5icHAgPj4gMykpKQorIAorLWlubGluZSB2b2lkCisrc3RhdGljIGlubGluZSB2b2lkCisgcHNwbGFzaF9mYl9wbG90X3BpeGVsIChQU3BsYXNoRkIgICAgKmZiLAorIAkJICAgICAgIGludCAgICAgICAgICB4LAorIAkJICAgICAgIGludCAgICAgICAgICB5LAorZGlmZiAtLWdpdCBhL3BzcGxhc2gtZmIuaCBiL3BzcGxhc2gtZmIuaAoraW5kZXggNDI1OTJlZC4uYzZjMzE0NCAxMDA2NDQKKy0tLSBhL3BzcGxhc2gtZmIuaAorKysrIGIvcHNwbGFzaC1mYi5oCitAQCAtNTcsMTQgKzU3LDYgQEAgcHNwbGFzaF9mYl9kZXN0cm95IChQU3BsYXNoRkIgKmZiKTsKKyBQU3BsYXNoRkIqCisgcHNwbGFzaF9mYl9uZXcgKGludCBhbmdsZSk7CisgCistaW5saW5lIHZvaWQKKy1wc3BsYXNoX2ZiX3Bsb3RfcGl4ZWwgKFBTcGxhc2hGQiAgICAqZmIsIAorLQkJICAgICAgIGludCAgICAgICAgICB4LCAKKy0JCSAgICAgICBpbnQgICAgICAgICAgeSwgCistCQkgICAgICAgdWludDggICAgICAgIHJlZCwKKy0JCSAgICAgICB1aW50OCAgICAgICAgZ3JlZW4sCistCQkgICAgICAgdWludDggICAgICAgIGJsdWUpOworLQorIHZvaWQKKyBwc3BsYXNoX2ZiX2RyYXdfcmVjdCAoUFNwbGFzaEZCICAgICpmYiwgCisgCQkgICAgICBpbnQgICAgICAgICAgeCwgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9maWxlcy9wc3BsYXNoLWluaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvcHNwbGFzaC1pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY2Yzg1ZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvcHNwbGFzaC1pbml0CkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaCAKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgICAgIHBzcGxhc2gKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK3JlYWQgQ01ETElORSA8IC9wcm9jL2NtZGxpbmUKK2ZvciB4IGluICRDTURMSU5FOyBkbworICAgICAgICBjYXNlICR4IGluCisgICAgICAgIHBzcGxhc2g9ZmFsc2UpCisJCWVjaG8gIkJvb3Qgc3BsYXNoc2NyZWVuIGRpc2FibGVkIiAKKwkJZXhpdCAwOworICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKK2RvbmUKKworZXhwb3J0IFRNUERJUj0vbW50Ly5wc3BsYXNoCittb3VudCB0bXBmcyAtdCB0bXBmcyAkVE1QRElSIC1vLHNpemU9NDBrCisKK3JvdGF0aW9uPTAKK2lmIFsgLWUgL2V0Yy9yb3RhdGlvbiBdOyB0aGVuCisJcmVhZCByb3RhdGlvbiA8IC9ldGMvcm90YXRpb24KK2ZpCisKKy91c3IvYmluL3BzcGxhc2ggLS1hbmdsZSAkcm90YXRpb24gJgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvcHNwbGFzaC1wb2t5LWltZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtcG9reS1pbWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDU2YWEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtcG9reS1pbWcuaApAQCAtMCwwICsxLDEyNTkgQEAKKy8qIEdka1BpeGJ1ZiBSR0IgQy1Tb3VyY2UgaW1hZ2UgZHVtcCAxLWJ5dGUtcnVuLWxlbmd0aC1lbmNvZGVkICovCisKKyNkZWZpbmUgUE9LWV9JTUdfUk9XU1RSSURFICgxOTIwKQorI2RlZmluZSBQT0tZX0lNR19XSURUSCAoNjQwKQorI2RlZmluZSBQT0tZX0lNR19IRUlHSFQgKDQ4MCkKKyNkZWZpbmUgUE9LWV9JTUdfQllURVNfUEVSX1BJWEVMICgzKSAvKiAzOlJHQiwgNDpSR0JBICovCisjZGVmaW5lIFBPS1lfSU1HX1JMRV9QSVhFTF9EQVRBICgodWludDgqKSBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIzN1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NiIgXAorICAiXDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MSIgXAorICAiXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NCIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3IiBcCisgICJcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM2M1wzNzZcMzc3XDM3NFwzXDM3M1wzNzUiIFwKKyAgIlwzNzJcMzYwXDM2NlwzNzBcMzUzXDM2MFwzNjNcMjAyXDM0N1wzNTVcMzU3XDVcMzQ2XDM1NFwzNTZcMzQ3XDM1NVwzNTciIFwKKyAgIlwzNTFcMzU2XDM2MFwzNjBcMzY2XDM3MFwzNzFcMzczXDM3MFwzNjNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzUzXDM3NlwzNzdcMzc0XDEwXDM1NiIgXAorICAiXDM2M1wzNjZcMzI0XDMzMVwzMzNcMjc3XDMwNFwzMDZcMjUyXDI2MlwyNzJcMjI3XDIzN1wyNDd9XDIyMFwyMzNwXDIwMyIgXAorICAiXDIxNmV3XDIwMlwyMTJdb3pcMTBkdlwyMDFuXDIwMVwyMTR+XDIxNVwyMjNcMjE2XDIzNlwyNDRcMjQ3XDI1N1wyNjciIFwKKyAgIlwyNzRcMzAxXDMwM1wzMjBcMzI2XDMzMFwzNTJcMzU3XDM2MlwzNTNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzQ2XDM3NlwzNzdcMzc0XDVcMzY2IiBcCisgICJcMzcwXDM2NFwzMjBcMzI2XDMzMFwyNTVcMjY1XDI3NVwyMTBcMjI3XDIzNWp9XDIxMFwyMzJdb3pcNWd5XDIwNFwyMDQiIFwKKyAgIlwyMjNcMjMxXDI1MFwyNjBcMjcwXDMxNFwzMjFcMzI0XDM1NVwzNjJcMzY1XDM0NlwzNzZcMzc3XDM3NFwzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNDJcMzc2XDM3NyIgXAorICAiXDM3NFw1XDM3M1wzNzVcMzcyXDMyN1wzMzRcMzM3XDI1M1wyNjNcMjczeFwyMTNcMjI3XnB7XDI0M11velw0cVwyMDQiIFwKKyAgIlwyMTdcMjQyXDI1MlwyNjJcMzIwXDMyNlwzMzBcMzY1XDM3MlwzNzVcMzQyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMzN1wzNzZcMzc3XDM3NCIgXAorICAiXDRcMzcxXDM3M1wzNzBcMzE3XDMyNFwzMjdcMjI1XDI0NVwyNTNld1wyMDJcMjUyXW96XDRidFwxNzdcMjExXDIzMFwyMzYiIFwKKyAgIlwzMDZcMzE0XDMxNlwzNjdcMzcxXDM2NlwzMzdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzM1XDM3NlwzNzdcMzc0XDNcMzMzXDM0MFwzNDNcMjM2IiBcCisgICJcMjQ2XDI1NmZ4XDIwM1wyNjBdb3pcM2J0XDE3N1wyMjVcMjM1XDI0NVwzMjBcMzI2XDMzMFwzMzVcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzMyIiBcCisgICJcMzc2XDM3N1wzNzRcM1wzNjdcMzcxXDM2NlwyNzZcMzAzXDMwNXVcMjEwXDIyNFwyNjZdb3pcM21cMjAwXDIxM1wyNTciIFwKKyAgIlwyNjdcMjc3XDM1NVwzNjJcMzY1XDMzMlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMzBcMzc2XDM3N1wzNzRcM1wzNTNcMzYwXDM2M1wyNTJcMjYyIiBcCisgICJcMjcyZnhcMjAzXDI3Ml1velwzYXN+XDIzMFwyNTBcMjU2XDM0MlwzNDdcMzUyXDMzMFwzNzZcMzc3XDM3NFwzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMjZcMzc2XDM3NyIgXAorICAiXDM3NFwzXDM1MlwzNTdcMzYyXDIzNlwyNDZcMjU2YXN+XDI3Nl1velwzXnB7XDIxNlwyMzZcMjQ0XDM0MVwzNDZcMzUxIiBcCisgICJcMzI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDMyNFwzNzZcMzc3XDM3NFwzXDM1NFwzNjFcMzY0XDI0NlwyNTZcMjY2YXN+XDMwMl1velwzXnAiIFwKKyAgIntcMjI3XDIzN1wyNDdcMzQ2XDM1NFwzNTZcMzI0XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMyMlwzNzZcMzc3XDM3NFwzXDM3MlwzNzRcMzcxXDI2NSIgXAorICAiXDI3NlwzMDZmeFwyMDNcMzA2XW96XDNhc35cMjUwXDI2MFwyNzBcMzYyXDM2N1wzNzFcMzIyXDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMyMVwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzIwXDMyNlwzMzBwXDIwM1wyMTZcMzEyXW96XDJoelwyMDVcMzAyXDMwN1wzMTJcMzIxXDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMzE3XDM3NlwzNzdcMzc0XDJcMzU2XDM2M1wzNjZcMjMxXDI0MVwyNTFcMzE2XW96XDJcMjA0XDIyM1wyMzFcMzQ1XDM1MiIgXAorICAiXDM1NVwzMTdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMzE2XDM3NlwzNzdcMzc0XDJcMzExXDMxNlwzMjFpe1wyMDZcMzIwXW96XDJidFwxNzdcMjY0IiBcCisgICJcMjc0XDMwNVwzMTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMzE0XDM3NlwzNzdcMzc0XDJcMzYyXDM2N1wzNzFcMjI2XDI0NlwyNTRcMzI0XW8iIFwKKyAgInpcMlwyMDZcMjI1XDIzM1wzNTNcMzYwXDM2M1wzMTRcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzEzXDM3NlwzNzdcMzc0XDJcMzM0XDM0MlwzNDRvXDIwMiIgXAorICAiXDIxNVwzMjZdb3pcMmd5XDIwNFwzMTVcMzIyXDMyNVwzMTNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzEyXDM3NlwzNzdcMzc0XDJcMzAyXDMwN1wzMTIiIFwKKyAgImFzflwzMzBdb3pcM15we1wyNTRcMjY0XDI3NFwzNzNcMzc1XDM3MlwzMTFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzEwXDM3NlwzNzdcMzc0XDJcMzcyIiBcCisgICJcMzc0XDM3MVwyMzZcMjQ2XDI1NlwzMzRdb3pcMlwyMTBcMjI3XDIzNVwzNjBcMzY2XDM3MFwzMTBcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzA3IiBcCisgICJcMzc2XDM3N1wzNzRcMlwzNjBcMzY2XDM3MFwyMDVcMjI0XDIzMlwzMzZdb3pcMnNcMjA2XDIyMVwzNDdcMzU1XDM1NyIgXAorICAiXDMwN1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wzMDZcMzc2XDM3N1wzNzRcMlwzNDdcMzU1XDM1N3RcMjA3XDIyMlwzNDBdb3pcMml7XDIwNlwzMzMiIFwKKyAgIlwzNDBcMzQzXDMwNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMDVcMzc2XDM3N1wzNzRcMlwzNDNcMzUwXDM1M2p9XDIxMFwyNTFdb3pcN2J0XDE3NyIgXAorICAid1wyMTJcMjI2XDIxNVwyMzRcMjQzXDIzNlwyNDZcMjU2XDI0NlwyNTZcMjY2XDI1NFwyNjRcMjc0XDI2NFwyNzRcMzA1IiBcCisgICJcMjAyXDMwMFwzMDVcMzEwXDdcMjY0XDI3NFwzMDVcMjU1XDI2NVwyNzVcMjUwXDI2MFwyNzBcMjMzXDI1MlwyNjFcMjIyIiBcCisgICJcMjQxXDI0N35cMjE1XDIyM2V3XDIwMlwyNTFdb3pcMmN1XDIwMFwzMjJcMzMwXDMzMlwzMDVcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzA0XDM3NiIgXAorICAiXDM3N1wzNzRcMlwzMzdcMzQ0XDM0Nml7XDIwNlwyNDVdb3pcNWp9XDIxMFwyMzBcMjQwXDI1MFwyNzBcMzAwXDMxMVwzMjIiIFwKKyAgIlwzMzBcMzMyXDM1MVwzNTZcMzYwXDIyMFwzNzZcMzc3XDM3NFw1XDM1NFwzNjFcMzY0XDMyNlwzMzNcMzM1XDMwMFwzMDUiIFwKKyAgIlwzMTBcMjM2XDI0NlwyNTZwXDIwM1wyMTZcMjQ1XW96XDJhc35cMzE2XDMyM1wzMjZcMzA0XDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMwM1wzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzM1XDM0M1wzNDVneVwyMDRcMjQyXW96XDRld1wyMDJcMjIyXDI0MVwyNDdcMjc2XDMwM1wzMDVcMzQyIiBcCisgICJcMzQ3XDM1MlwyMzJcMzc2XDM3N1wzNzRcNFwzNTJcMzU3XDM2MlwzMDRcMzExXDMxNFwyMzNcMjQzXDI1M2p9XDIxMCIgXAorICAiXDI0Ml1velwyYXN+XDMxM1wzMjBcMzIyXDMwM1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMDJcMzc2XDM3N1wzNzRcMlwzNDFcMzQ2XDM1MWh6IiBcCisgICJcMjA1XDI0MF1velw0X3F8XDIxMVwyMzBcMjM2XDMwN1wzMTVcMzE3XDM3MFwzNzJcMzY3XDI0MFwzNzZcMzc3XDM3NCIgXAorICAiXDRcMzczXDM3NVwzNzJcMzIwXDMyNlwzMzBcMjMxXDI0MVwyNTFidFwxNzdcMjQwXW96XDJhc35cMzE3XDMyNFwzMjciIFwKKyAgIlwzMDJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMzAxXDM3NlwzNzdcMzc0XDJcMzQzXDM1MFwzNTNpe1wyMDZcMjM3XW96XDNxXDIwNFwyMTdcMjY2IiBcCisgICJcMjc3XDMwN1wzNTRcMzYxXDM2NFwyNDZcMzc2XDM3N1wzNzRcM1wzNjZcMzcwXDM2NFwzMDNcMzEwXDMxM1wxNzdcMjE2IiBcCisgICJcMjI0XDIzN11velwyYnRcMTc3XDMyNVwzMzJcMzM0XDMwMVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMDBcMzc2XDM3N1wzNzRcMlwzNTVcMzYyXDM2NSIgXAorICAibFwxNzdcMjEyXDIzNl1velwzdVwyMTBcMjI0XDMwN1wzMTVcMzE3XDM3M1wzNzVcMzcyXDI1M1wzNzZcMzc3XDM3NFwyIiBcCisgICJcMzI0XDMzMVwzMzNcMjA0XDIyM1wyMzFcMjM2XW96XDJld1wyMDJcMzQxXDM0NlwzNTFcMzAwXDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI3N1wzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzY1XDM3MlwzNzVcMTc3XDIxNlwyMjRcMjM1XW96XDJ+XDIxNVwyMjNcMzE1XDMyMlwzMjVcMjYwIiBcCisgICJcMzc2XDM3N1wzNzRcMlwzMzFcMzM2XDM0MVwyMTFcMjMwXDIzNlwyMzVdb3pcMmxcMTc3XDIxMlwzNTNcMzYwXDM2MyIgXAorICAiXDI3N1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wyNzdcMzc2XDM3N1wzNzRcMVwyMTRcMjMzXDI0MlwyMzRdb3pcMml7XDIwNlwzMDVcMzEyXDMxNSIgXAorICAiXDI2NFwzNzZcMzc3XDM3NFwyXDMyNFwzMzFcMzMzcVwyMDRcMjE3XDIzNF1velwydVwyMTBcMjI0XDM2N1wzNzFcMzY2IiBcCisgICJcMjc2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI3NlwzNzZcMzc3XDM3NFwxXDI1N1wyNjdcMjc3XDIzM11velwzXnB7XDI0MlwyNTJcMjYyXDM2MiIgXAorICAiXDM2N1wzNzFcMjY2XDM3NlwzNzdcMzc0XDNcMzcyXDM3NFwzNzFcMjYxXDI3MVwzMDJidFwxNzdcMjMzXW96XDFcMjI1IiBcCisgICJcMjM1XDI0NVwyNzZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjc1XDM3NlwzNzdcMzc0XDJcMzE3XDMyNFwzMjdecHtcMjMyXW96XDJ3XDIxMlwyMjYiIFwKKyAgIlwzMzVcMzQzXDM0NVwyNzJcMzc2XDM3N1wzNzRcMlwzNTFcMzU2XDM2MFwyMTFcMjMwXDIzNlwyMzNdb3pcMVwyNjRcMjc0IiBcCisgICJcMzA1XDI3NVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNzRcMzc2XDM3N1wzNzRcMlwzNDdcMzU1XDM1N2V3XDIwMlwyMzJdb3pcMlwyNDJcMjUyIiBcCisgICJcMjYyXDM3MVwzNzNcMzcwXDIyNVwzNzZcMzc3XDM3NFwxMFwzMzZcMzY3XDM3NFwyNjJcMzU1XDM3MFwyMjBcMzQzXDM2MSIgXAorICAibVwzMzJcMzYxR1wzMTdcMzUzLFwzMTFcMzUyKFwzMDdcMzUwI1wzMDRcMzQ2XDIwMlwwXDMwMVwzNTBcMTBcMFwzMDQiIFwKKyAgIlwzNTIoXDMwN1wzNTAsXDMxMVwzNTJCXDMxNFwzNDdpXDMyNlwzNTZcMjA3XDM0MVwzNjRcMjYwXDM1M1wzNjZcMzMzIiBcCisgICJcMzY0XDM3MVwyMjZcMzc2XDM3N1wzNzRcMlwyNjZcMjc3XDMwN2FzflwyMzFdb3pcMl9xfFwzMjdcMzM0XDMzN1wyNzQiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyNzNcMzc2XDM3N1wzNzRcMlwzNzNcMzc1XDM3Mn1cMjIwXDIzM1wyMzFdb3pcMmV3XDIwMlwzMTNcMzIwIiBcCisgICJcMzIyXDIyM1wzNzZcMzc3XDM3NFw0XDMzNFwzNjVcMzcyXDIzM1wzNDVcMzY0TVwzMjNcMzU3XDBcMzA0XDM1MlwyMjIiIFwKKyAgIlwyNVwyNzRcMzQ0XDRcMFwzMDFcMzUwSlwzMjFcMzU1XDIxMVwzNDJcMzY1XDMxNFwzNjFcMzcyXDIyM1wzNzZcMzc3IiBcCisgICJcMzc0XDJcMzMyXDMzN1wzNDJtXDIwMFwyMTNcMjMxXW96XDJsXDE3N1wyMTJcMzYwXDM2NlwzNzBcMjczXDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjczXDM3NlwzNzdcMzc0XDFcMjU3XDI2N1wyNzdcMjMxXW96XDJ4XDIxM1wyMjdcMzQ3XDM1NVwzNTdcMjIxXDM3NiIgXAorICAiXDM3N1wzNzRcM1wzMzZcMzY3XDM3NFwyMDZcMzQwXDM2MypcMzEwXDM1MVwyMzJcMjVcMjc0XDM0NFwzI1wzMDRcMzQ2IiBcCisgICJ3XDMzM1wzNTZcMzE2XDM2M1wzNzRcMjIxXDM3NlwzNzdcMzc0XDJcMzYwXDM2NlwzNzBcMjE0XDIzM1wyNDJcMjMxXSIgXAorICAib3pcMVwyMjdcMjM3XDI0N1wyNzNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjcyXDM3NlwzNzdcMzc0XDJcMzM1XDM0M1wzNDVfcXxcMjMwXW96IiBcCisgICJcMlwyMTBcMjI3XDIzNVwzNjRcMzcxXDM3NFwyMTdcMzc2XDM3N1wzNzRcM1wzNzBcMzc2XDM3N1wyNTZcMzUwXDM2NCIgXAorICAiQlwzMTRcMzQ3XDI0MFwyNVwyNzRcMzQ0XDMqXDMxMFwzNTFcMjMzXDM0NVwzNjRcMzY3XDM3NVwzNzdcMjE3XDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzNzNcMzc1XDM3MlwyNDJcMjUyXDI2MlwyMzFdb3pcMVwzMDVcMzEyXDMxNVwyNzJcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjcxXDM3NiIgXAorICAiXDM3N1wzNzRcMlwzNzJcMzc0XDM3MXdcMjEyXDIyNlwyMzBdb3pcMlwyMzFcMjQxXDI1MVwzNzJcMzc0XDM3MVwyMTYiIFwKKyAgIlwzNzZcMzc3XDM3NFwzXDM2N1wzNzVcMzc3XDIzM1wzNDVcMzY0KFwzMDdcMzUwXDI0NFwyNVwyNzRcMzQ0XDNcMFwzMDIiIFwKKyAgIlwzNTFcMjA2XDM0MFwzNjNcMzU2XDM3M1wzNzRcMjE3XDM3NlwzNzdcMzc0XDFcMjU3XDI2N1wyNzdcMjMwXW96XDJoIiBcCisgICJ6XDIwNVwzNTZcMzYzXDM2NlwyNzFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjcxXDM3NlwzNzdcMzc0XDFcMjU3XDI2N1wyNzdcMjMwXW96XDFcMjQ2IiBcCisgICJcMjU2XDI2NlwyMTdcMzc2XDM3N1wzNzRcMlwyMzdcMzUwXDM2N1wwXDMwNFwzNTJcMjUwXDI1XDI3NFwzNDRcM1wwXDI3NiIgXAorICAiXDM0NVwyMDdcMzQxXDM2NFwzNzBcMzc2XDM3N1wyMTZcMzc2XDM3N1wzNzRcMlwyNzdcMzA0XDMwNl9xfFwyMjddb3oiIFwKKyAgIlwxXDIzMVwyNDFcMjUxXDI3MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNzBcMzc2XDM3N1wzNzRcMlwzNDZcMzU0XDM1NmJ0XDE3N1wyMjddb3pcMSIgXAorICAiXDI1MVwyNjFcMjcxXDIxNlwzNzZcMzc3XDM3NFwyXDMxNVwzNjJcMzczMVwzMTNcMzU0XDI1NFwyNVwyNzRcMzQ0XDIiIFwKKyAgIihcMzA3XDM1MFwyNjJcMzU1XDM3MFwyMTZcMzc2XDM3N1wzNzRcMlwzMDVcMzEyXDMxNV5we1wyMjddb3pcMVwzMjJcMzMwIiBcCisgICJcMzMyXDI3MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNzBcMzc2XDM3N1wzNzRcMVwyMTVcMjM0XDI0M1wyMjddb3pcMVwyMzNcMjUyXDI2MVwyMTUiIFwKKyAgIlwzNzZcMzc3XDM3NFwzXDM2N1wzNzVcMzc3bVwzMzJcMzYxXDBcMjc2XDM0NVwyNTdcMjVcMjc0XDM0NFwyTFwzMjJcMzU2IiBcCisgICJcMzU2XDM3M1wzNzRcMjE1XDM3NlwzNzdcMzc0XDFcMjc0XDMwMVwzMDNcMjI3XW96XDJ0XDIwN1wyMjJcMzczXDM3NSIgXAorICAiXDM3MlwyNjdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjY3XDM3NlwzNzdcMzc0XDFcMzI1XDMzMlwzMzRcMjI3XW96XDJcMjE0XDIzM1wyNDJcMzczIiBcCisgICJcMzc1XDM3MlwyMTRcMzc2XDM3N1wzNzRcMlwzMzNcMzY0XDM3MSxcMzExXDM1MlwyNjJcMjVcMjc0XDM0NFwyXDBcMzA0IiBcCisgICJcMzUyXDMwMVwzNTZcMzY2XDIxNVwzNzZcMzc3XDM3NFwxXDI1MlwyNjJcMjcyXDIyN11velwxXDI3NFwzMDFcMzAzXDI2NyIgXAorICAiXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzciIFwKKyAgIlwzNzdcMzc3XDI2N1wzNzZcMzc3XDM3NFwxdlwyMTFcMjI1XDIyNl1velwyXDIwNVwyMjRcMjMyXDM2NVwzNzJcMzc1IiBcCisgICJcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDI2NFwyNVwyNzRcMzQ0XDNcMFwyNzZcMzQ1XDIwMyIgXAorICAiXDMzNFwzNjBcMzcwXDM3NlwzNzdcMjE0XDM3NlwzNzdcMzc0XDFcMjM2XDI0NlwyNTZcMjI2XW96XDJoelwyMDVcMzYyIiBcCisgICJcMzY3XDM3MVwyNjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY2XDM3NlwzNzdcMzc0XDFcMzA3XDMxNVwzMTdcMjI2XW96XDJuXDIwMVwyMTQiIFwKKyAgIlwzNjBcMzY2XDM3MFwyMTRcMzc2XDM3N1wzNzRcMW1cMzMyXDM2MVwyNzBcMjVcMjc0XDM0NFwySVwzMjBcMzU0XDM2NiIgXAorICAiXDM3M1wzNzZcMjEzXDM3NlwzNzdcMzc0XDJcMzczXDM3NVwzNzJcMjAzXDIyMlwyMzBcMjI2XW96XDFcMjU0XDI2NFwyNzQiIFwKKyAgIlwyNjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMjY1XDM3NlwzNzdcMzc0XDJcMzczXDM3NVwzNzJzXDIwNlwyMjFcMjI1XW96XDJhc35cMzMzXDM0MCIgXAorICAiXDM0M1wyMTNcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3N01cMzIzXDM1N1wyNzJcMjVcMjc0XDM0NFwyIiIxXDMxM1wzNTQiIFwKKyAgIlwzNTZcMzczXDM3NFwyMTNcMzc2XDM3N1wzNzRcMlwzNTNcMzYwXDM2M2l7XDIwNlwyMjVdb3pcMmV3XDIwMlwzNTdcMzY1IiBcCisgICJcMzY3XDI2NVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNjVcMzc2XDM3N1wzNzRcMVwzMDVcMzEyXDMxNVwyMjZdb3pcMVwyNjVcMjc2XDMwNlwyMTMiIFwKKyAgIlwzNzZcMzc3XDM3NFwyXDM2NlwzNzNcMzc2QlwzMTRcMzQ3XDI3NFwyNVwyNzRcMzQ0XDIoXDMwN1wzNTBcMzM2XDM2NyIgXAorICAiXDM3NFwyMTNcMzc2XDM3N1wzNzRcMlwzMjJcMzMwXDMzMl5we1wyMjVdb3pcMVwyNTJcMjYyXDI3MlwyNjVcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwyNjVcMzc2XDM3N1wzNzRcMXVcMjEwXDIyNFwyMjVdb3pcMVwyMTRcMjMzXDI0MlwyMTNcMzc2XDM3N1wzNzRcMlwzNjYiIFwKKyAgIlwzNzNcMzc2QlwzMTRcMzQ3XDI3NlwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM3XDM3MFwzNzVcMjEzXDM3NlwzNzdcMzc0IiBcCisgICJcMVwyNTNcMjYzXDI3M1wyMjVdb3pcMmZ4XDIwM1wzNjdcMzcxXDM2NlwyNjRcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY0XDM3NlwzNzdcMzc0IiBcCisgICJcMVwzMjJcMzMwXDMzMlwyMjVdb3pcMml7XDIwNlwzNjBcMzY2XDM3MFwyMTJcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3NyIgXAorICAiSVwzMjBcMzU0XDMwMFwyNVwyNzRcMzQ0XDIqXDMxMFwzNTFcMzU3XDM3NFwzNzVcMjEyXDM3NlwzNzdcMzc0XDJcMzczIiBcCisgICJcMzc1XDM3Mn5cMjE1XDIyM1wyMjVdb3pcMVwyNjRcMjc0XDMwNVwyNjRcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY0XDM3NlwzNzdcMzc0XDFcMjEwIiBcCisgICJcMjI3XDIzNVwyMjVdb3pcMVwzMDNcMzEwXDMxM1wyMTNcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NlwzMDJcMjVcMjc0XDM0NCIgXAorICAiXDJCXDMxNFwzNDdcMzcwXDM3NlwzNzdcMjEyXDM3NlwzNzdcMzc0XDJcMzM1XDM0M1wzNDVecHtcMjI0XW96XDJtXDIwMCIgXAorICAiXDIxM1wzNzNcMzc1XDM3MlwyNjNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYzXDM3NlwzNzdcMzc0XDJcMzQ1XDM1MlwzNTVecHtcMjI0XW96IiBcCisgICJcMX5cMjIxXDIzNVwyMTNcMzc2XDM3N1wzNzRcMXlcMzM2XDM2MFwzMDRcMjVcMjc0XDM0NFwxTVwzMjNcMzU3XDIxMyIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjQyXDI1MlwyNjJcMjI1XW96XDFcMzE1XDMyMlwzMjVcMjYzXDM3NlwzNzdcMzc0XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2M1wzNzZcMzc3IiBcCisgICJcMzc0XDFcMjUyXDI2MlwyNzJcMjI0XW96XDJfcXxcMzQxXDM0NlwzNTFcMjEyXDM3NlwzNzdcMzc0XDJcMjc0XDM1NSIgXAorICAiXDM3M1wwXDI3NlwzNDVcMzA1XDI1XDI3NFwzNDRcMVwyMjBcMzQzXDM2MVwyMTJcMzc2XDM3N1wzNzRcMlwzNjBcMzY2IiBcCisgICJcMzcwaXtcMjA2XDIyNF1velwxXDIxMVwyMzBcMjM2XDI2M1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjJcMzc2XDM3N1wzNzRcMlwzNzJcMzc0XDM3MSIgXAorICAiaXtcMjA2XDIyNF1velwxXDI1MFwyNjBcMjcwXDIxMlwzNzZcMzc3XDM3NFwyXDM1MFwzNzFcMzc3XDBcMzA0XDM1MlwzMDYiIFwKKyAgIlwyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDMxNlwzNjNcMzc0XDIxMlwzNzZcMzc3XDM3NFwxXDMwM1wzMTBcMzEzXDIyNCIgXAorICAiXW96XDJecHtcMzUyXDM1N1wzNjJcMjYyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MlwzNzZcMzc3XDM3NFwxXDMxNVwzMjJcMzI1XDIyNF1vIiBcCisgICJ6XDJkdlwyMDFcMzU3XDM2NVwzNjdcMjEyXDM3NlwzNzdcMzc0XDFHXDMxN1wzNTNcMjQwXDI1XDI3NFwzNDRcM1wwXDMwMiIgXAorICAiXDM1MSxcMzExXDM1MkpcMzIxXDM1NVwyMDNMXDMyMlwzNTZcMkJcMzE0XDM0NyNcMzA0XDM0NlwyNDBcMjVcMjc0XDM0NCIgXAorICAiXDIqXDMxMFwzNTFcMzY3XDM3NVwzNzdcMjEyXDM3NlwzNzdcMzc0XDFxXDIwNFwyMTdcMjI0XW96XDFcMjU3XDI2N1wyNzciIFwKKyAgIlwyNjJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMjYyXDM3NlwzNzdcMzc0XDFcMjMwXDI0MFwyNTBcMjI0XW96XDFcMjQ3XDI1N1wyNjdcMjEyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMzNcMzQ1XDM2NFwyMzVcMjVcMjc0XDM0NFw0KlwzMTBcMzUxblwzMzNcMzYyXDI3M1wzNTRcMzcxIiBcCisgICJcMzYwXDM3NVwzNzZcMjEwXDM3NlwzNzdcMzc0XDRcMzU3XDM3NFwzNzVcMzAzXDM2MVwzNzBcMjA2XDM0MFwzNjMvXDMxMiIgXAorICAiXDM1M1wyMzVcMjVcMjc0XDM0NFwxd1wzMzNcMzU2XDIxMlwzNzZcMzc3XDM3NFwxXDMwM1wzMTBcMzEzXDIyNF1velwxIiBcCisgICJ2XDIxMVwyMjVcMjYyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MVwzNzZcMzc3XDM3NFwyXDM2NVwzNzJcMzc1ZHZcMjAxXDIyM11velwyYXN+IiBcCisgICJcMzUzXDM2MFwzNjNcMjExXDM3NlwzNzdcMzc0XDJcMzU2XDM3M1wzNzRcMFwzMDJcMzUxXDIzMlwyNVwyNzRcMzQ0XDMiIFwKKyAgIlwwXDI3NlwzNDVtXDMzMlwzNjFcMzM1XDM2NlwzNzNcMjIwXDM3NlwzNzdcMzc0XDJcMzM2XDM2N1wzNzQoXDMwN1wzNTAiIFwKKyAgIlwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIxMlwzNzZcMzc3XDM3NFwyXDM3MlwzNzRcMzcxIiBcCisgICJuXDIwMVwyMTRcMjI0XW96XDFcMzQzXDM1MFwzNTNcMjYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MVwzNzZcMzc3XDM3NFwxXDMxM1wzMjBcMzIyIiBcCisgICJcMjI0XW96XDFcMjMzXDI1MlwyNjFcMjEyXDM3NlwzNzdcMzc0XDFrXDMyN1wzNTdcMjMxXDI1XDI3NFwzNDRcM1wwXDI3NiIgXAorICAiXDM0NVwyMDZcMzQwXDM2M1wzNTdcMzc0XDM3NVwyMjJcMzc2XDM3N1wzNzRcMWtcMzI3XDM1N1wyMzJcMjVcMjc0XDM0NCIgXAorICAiXDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDFcMjc2XDMwM1wzMDVcMjI0XW96XDFcMjU3XDI2NyIgXAorICAiXDI3N1wyNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjYxXDM3NlwzNzdcMzc0XDFcMjI2XDI0NlwyNTRcMjIzXW96XDJecHtcMzQ3XDM1NVwzNTciIFwKKyAgIlwyMTFcMzc2XDM3N1wzNzRcMlwzMTZcMzYzXDM3NFwwXDI3NlwzNDVcMjMwXDI1XDI3NFwzNDRcMkpcMzIxXDM1NVwzMzciIFwKKyAgIlwzNzBcMzc1XDIyM1wzNzZcMzc3XDM3NFwxa1wzMjdcMzU3XDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2NyIgXAorICAiXDM3NFwyMTVcMzc2XDM3N1wzNzRcMlwzNzBcMzcyXDM2N2l7XDIwNlwyMjNdb3pcMVwxNzdcMjE2XDIyNFwyNjFcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wyNjFcMzc2XDM3N1wzNzRcMWt+XDIxMVwyMjNdb3pcMVwyMDVcMjI0XDIzMlwyMTJcMzc2XDM3N1wzNzRcMUoiIFwKKyAgIlwzMjFcMzU1XDIyN1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDI1N1wzNTFcMzY1XDIyNFwzNzZcMzc3XDM3NFwxbVwzMzIiIFwKKyAgIlwzNjFcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMTdcMzc2XDM3N1wzNzRcMVwyNDZcMjU2IiBcCisgICJcMjY2XDIyM11velwyXnB7XDM1NlwzNjNcMzY2XDI2MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjBcMzc2XDM3N1wzNzRcMVwzMzVcMzQzXDM0NSIgXAorICAiXDIyNF1velwxXDMwM1wzMTBcMzEzXDIxMVwzNzZcMzc3XDM3NFwyXDMzM1wzNjRcMzcxXDBcMjc2XDM0NVwyMjZcMjUiIFwKKyAgIlwyNzRcMzQ0XDIjXDMwNFwzNDZcMzE2XDM2M1wzNzRcMjI0XDM3NlwzNzdcMzc0XDFtXDMzMlwzNjFcMjMyXDI1XDI3NCIgXAorICAiXDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIyMFwzNzZcMzc3XDM3NFwxXDMzNVwzNDNcMzQ1XDIyNF1velwxXDMwNiIgXAorICAiXDMxNFwzMTZcMjYwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MFwzNzZcMzc3XDM3NFwxXDI2NFwyNzRcMzA1XDIyM11velwyY3VcMjAwXDM2NyIgXAorICAiXDM3MVwzNjZcMjExXDM3NlwzNzdcMzc0XDFpXDMyNlwzNTZcMjI2XDI1XDI3NFwzNDRcMixcMzExXDM1MlwzNDdcMzcwIiBcCisgICJcMzc2XDIyNFwzNzZcMzc3XDM3NFwxbVwzMzJcMzYxXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzQiIFwKKyAgIlwyMjJcMzc2XDM3N1wzNzRcMXRcMjA3XDIyMlwyMjNdb3pcMVwyMzZcMjQ2XDI1NlwyNjBcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYwXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMTVcMjM0XDI0M1wyMjNdb3pcMVwyMzFcMjQxXDI1MVwyMTFcMzc2XDM3N1wzNzRcMlwzNDdcMzcwIiBcCisgICJcMzc2XDBcMjc2XDM0NVwyMjVcMjVcMjc0XDM0NFwyKlwzMTBcMzUxXDM1N1wzNzRcMzc1XDIyNFwzNzZcMzc3XDM3NCIgXAorICAiXDFtXDMzMlwzNjFcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMjNcMzc2XDM3N1wzNzRcMVwyNjEiIFwKKyAgIlwyNzFcMzAyXDIyM11velwxcVwyMDRcMjE3XDI2MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjBcMzc2XDM3N1wzNzRcMWl7XDIwNlwyMjNdb3pcMSIgXAorICAiXDMxN1wzMjRcMzI3XDIxMVwzNzZcMzc3XDM3NFwxXDIwN1wzNDFcMzY0XDIyNVwyNVwyNzRcMzQ0XDIjXDMwNFwzNDYiIFwKKyAgIlwzMzdcMzcwXDM3NVwyMjRcMzc2XDM3N1wzNzRcMW1cMzMyXDM2MVwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNiIgXAorICAiXDM2N1wzNzRcMjI0XDM3NlwzNzdcMzc0XDFcMzUxXDM1NlwzNjBcMjI0XW96XDFcMzU2XDM2M1wzNjZcMjU3XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU3XDM3NlwzNzdcMzc0XDFcMzQ1XDM1MlwzNTVcMjIzXW96XDJhc35cMzcwXDM3MlwzNjdcMjExXDM3NlwzNzdcMzc0IiBcCisgICJcMSxcMzExXDM1MlwyMjRcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwzMTNcMzYwXDM3MVwyMjRcMzc2XDM3N1wzNzRcMSIgXAorICAibVwzMzJcMzYxXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjI2XDM3NlwzNzdcMzc0XDFxXDIwNCIgXAorICAiXDIxN1wyMjNdb3pcMVwzMTRcMzIxXDMyNFwyNTdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU3XDM3NlwzNzdcMzc0XDFcMzExXDMxNlwzMjFcMjIzIiBcCisgICJdb3pcMVwyMDJcMjIxXDIyN1wyMTFcMzc2XDM3N1wzNzRcMVwzMjBcMzY1XDM3NlwyMjVcMjVcMjc0XDM0NFwxXDIwNyIgXAorICAiXDM0MVwzNjRcMjI0XDM3NlwzNzdcMzc0XDFtXDMzMlwzNjFcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3IiBcCisgICJcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDIzN1wzNTBcMzY3XDIxMVwzNzZcMzc3XDM3NFwxXDIzNiIgXAorICAiXDI0NlwyNTZcMjIzXW96XDFcMjU1XDI2NVwyNzVcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxXDI1NFwyNjRcMjc0IiBcCisgICJcMjIzXW96XDFcMjU1XDI2NVwyNzVcMjExXDM3NlwzNzdcMzc0XDF5XDMzNlwzNjBcMjI0XDI1XDI3NFwzNDRcMi9cMzEyIiBcCisgICJcMzUzXDM3MFwzNzZcMzc3XDIyM1wzNzZcMzc3XDM3NFwxbVwzMzJcMzYxXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDciIFwKKyAgIlwzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcM1wyMzZcMzQ3XDM2NlwwXDI3NlwzNDVKXDMyMVwzNTVcMjExXDM3NiIgXAorICAiXDM3N1wzNzRcMVwzMTFcMzE2XDMyMVwyMjNdb3pcMVwyMTVcMjM0XDI0M1wyNTdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU3XDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMTRcMjMzXDI0MlwyMjNdb3pcMVwzMjZcMzMzXDMzNVwyMTFcMzc2XDM3N1wzNzRcMSxcMzExXDM1MlwyMjRcMjUiIFwKKyAgIlwyNzRcMzQ0XDFcMzEyXDM1N1wzNzBcMjIzXDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjMyXDI1XDI3NFwzNDRcMiVcMzA1IiBcCisgICJcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFw1XDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyNVwyNzRcMzQ0XDAiIFwKKyAgIlwyNzZcMzQ1XDM2N1wzNzVcMzc3XDIxMFwzNzZcMzc3XDM3NFwyXDM1NlwzNjNcMzY2XnB7XDIyMl1velwxb1wyMDJcMjE1IiBcCisgICJcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxb1wyMDJcMjE1XDIyMl1velwyYXN+XDM2NlwzNzNcMzc2XDIxMFwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzU3XDM3NFwzNzVcMFwyNzZcMzQ1XDIyM1wyNVwyNzRcMzQ0XDFKXDMyMVwzNTVcMjIzXDM3NlwzNzciIFwKKyAgIlwzNzRcMW5cMzMzXDM2MlwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NCIgXAorICAiXDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDIwM1wyNVwyNzRcMzQ0XDFcMjc0XDM1NVwzNzNcMjExXDM3NlwzNzdcMzc0IiBcCisgICJcMXVcMjEwXDIyNFwyMjJdb3pcMl5we1wzNzBcMzcyXDM2N1wyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDJcMzczXDM3NSIgXAorICAiXDM3Ml9xfFwyMjJdb3pcMXVcMjEwXDIyNFwyMTFcMzc2XDM3N1wzNzRcMVwyNjFcMzU0XDM2N1wyMjRcMjVcMjc0XDM0NCIgXAorICAiXDFcMzEyXDM1N1wzNzBcMjIyXDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzYiIFwKKyAgIlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyMDRcMjVcMjc0XDM0NFwxXDIwNCIgXAorICAiXDMzNVwzNjFcMjExXDM3NlwzNzdcMzc0XDFcMjMwXDI0MFwyNTBcMjIzXW96XDFcMzQyXDM0N1wzNTJcMjU2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDFcMzUxXDM1NlwzNjBcMjIzXW96XDFcMjI1XDIzNVwyNDVcMjExXDM3NlwzNzdcMzc0XDEiIFwKKyAgIm5cMzMzXDM2MlwyMjNcMjVcMjc0XDM0NFwxLFwzMTFcMzUyXDIyMlwzNzZcMzc3XDM3NFwxblwzMzNcMzYyXDIzMlwyNSIgXAorICAiXDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDUiIFwKKyAgIlwyMDVcMjVcMjc0XDM0NFwxQlwzMTRcMzQ3XDIxMVwzNzZcMzc3XDM3NFwxXDI1N1wyNjdcMjc3XDIyM11velwxXDMxNyIgXAorICAiXDMyNFwzMjdcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDMyNlwzMzNcMzM1XDIyM11velwxXDI1M1wyNjNcMjczIiBcCisgICJcMjExXDM3NlwzNzdcMzc0XDFCXDMxNFwzNDdcMjIzXDI1XDI3NFwzNDRcMVwyMTFcMzQyXDM2NVwyMjFcMzc2XDM3NyIgXAorICAiXDM3NFwxblwzMzNcMzYyXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0IiBcCisgICJcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDVcMjA2XDI1XDI3NFwzNDRcMVwwXDMwMlwzNTFcMjExXDM3NlwzNzdcMzc0XDEiIFwKKyAgIlwzMDdcMzE1XDMxN1wyMjNdb3pcMVwyNzZcMzAzXDMwNVwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMzA2XDMxNCIgXAorICAiXDMxNlwyMjNdb3pcMVwzMDVcMzEyXDMxNVwyMTFcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMjNcMjVcMjc0XDM0NFwxIiBcCisgICJcMzM3XDM3MFwzNzVcMjIwXDM3NlwzNzdcMzc0XDF3XDMzM1wzNTZcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzYiIFwKKyAgIlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyMTBcMjVcMjc0XDM0NFwxXDM1NiIgXAorICAiXDM3M1wzNzRcMjEwXDM3NlwzNzdcMzc0XDFcMzM3XDM0NFwzNDZcMjIzXW96XDFcMjUzXDI2M1wyNzNcMjU2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDFcMjc0XDMwMVwzMDNcMjIzXW96XDFcMzMzXDM0MFwzNDNcMjEwXDM3NlwzNzdcMzc0XDIiIFwKKyAgIlwzNjdcMzc1XDM3N1wwXDI3NlwzNDVcMjIyXDI1XDI3NFwzNDRcMShcMzA3XDM1MFwyMjBcMzc2XDM3N1wzNzRcMVwyMzEiIFwKKyAgIlwzNDJcMzYyXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2IiBcCisgICJcMzQ3XDM2NlwwXDI3NlwzNDVcMjExXDI1XDI3NFwzNDRcMVwzMDJcMzU3XDM2N1wyMTBcMzc2XDM3N1wzNzRcMlwzNjQiIFwKKyAgIlwzNzFcMzc0XnB7XDIyMl1velwxXDIzNlwyNDZcMjU2XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwyNTdcMjY3IiBcCisgICJcMjc3XDIyM11velwxXDM1M1wzNjBcMzYzXDIxMFwzNzZcMzc3XDM3NFwxXDMxNlwzNjNcMzc0XDIyM1wyNVwyNzRcMzQ0IiBcCisgICJcMVxcXDMyNlwzNTVcMjE3XDM3NlwzNzdcMzc0XDJcMzIwXDM2NVwzNzZcMzFcMjc1XDM0NVwyMzFcMjVcMjc0XDM0NCIgXAorICAiXDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDIxMlwyNSIgXAorICAiXDI3NFwzNDRcMVwyMzdcMzUwXDM2N1wyMTFcMzc2XDM3N1wzNzRcMWd5XDIwNFwyMjJdb3pcMVwyMTZcMjM2XDI0NFwyNTYiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwyNDJcMjUyXDI2MlwyMjNdb3pcMVwzNjZcMzcwXDM2NFwyMTBcMzc2XDM3NyIgXAorICAiXDM3NFwxXDI2MlwzNTVcMzcwXDIyM1wyNVwyNzRcMzQ0XDFcMjIwXDM0M1wzNjFcMjE3XDM3NlwzNzdcMzc0XDFKXDMyMSIgXAorICAiXDM1NVwyMzFcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDciIFwKKyAgIlwzNjZcMFwyNzZcMzQ1XDIxM1wyNVwyNzRcMzQ0XDFcMjExXDM0MlwzNjVcMjExXDM3NlwzNzdcMzc0XDFtXDIwMFwyMTMiIFwKKyAgIlwyMjJdb3pcMVwyMDRcMjIzXDIzMVwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMjI2XDI0NlwyNTRcMjIzXW8iIFwKKyAgInpcMjExXDM3NlwzNzdcMzc0XDFcMjM3XDM1MFwzNjdcMjIzXDI1XDI3NFwzNDRcMVwyNjJcMzU1XDM3MFwyMTZcMzc2IiBcCisgICJcMzc3XDM3NFwyXDM1MFwzNzFcMzc3XDBcMjc2XDM0NVwyMzBcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0IiBcCisgICJcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDIxNFwyNVwyNzRcMzQ0XDFuXDMzM1wzNjJcMjExIiBcCisgICJcMzc2XDM3N1wzNzRcMXVcMjEwXDIyNFwyMjJdb3pcMXlcMjE0XDIzMFwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMzFcMjQxXDI1MVwyMjJdb3pcMWN1XDIwMFwyMTFcMzc2XDM3N1wzNzRcMVwyMzNcMzQ1XDM2NFwyMjNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMzE2XDM2M1wzNzRcMjE2XDM3NlwzNzdcMzc0XDFcMjM1XDM0NlwzNjVcMjMwXDI1XDI3NFwzNDRcMiVcMzA1IiBcCisgICJcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyMTVcMjVcMjc0XDM0NCIgXAorICAiXDFrXDMyN1wzNTdcMjExXDM3NlwzNzdcMzc0XDFcMjAwXDIxN1wyMjVcMjIyXW96XDF1XDIxMFwyMjRcMjU2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDFcMjIyXDI0MVwyNDdcMjIyXW96XDFqfVwyMTBcMjExXDM3NlwzNzdcMzc0XDFcMjIwXDM0MyIgXAorICAiXDM2MVwyMjNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIxNlwzNzZcMzc3XDM3NFwxd1wzMzNcMzU2XDIyN1wyNVwyNzQiIFwKKyAgIlwzNDRcMiNcMzA0XDM0NlwzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDVcMjE2IiBcCisgICJcMjVcMjc0XDM0NFwxTVwzMjNcMzU3XDIxMVwzNzZcMzc3XDM3NFwxXDIxMFwyMjdcMjM1XDIyMl1velwxc1wyMDZcMjIxIiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDIxMVwyMzBcMjM2XDIyMl1velwxblwyMDFcMjE0XDIxMVwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjIzXDI1XDI3NFwzNDRcMVwzNTBcMzcxXDM3N1wyMTZcMzc2XDM3N1wzNzRcMSIgXAorICAiaVwzMjZcMzU2XDIyNlwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2IiBcCisgICJcMzQ3XDM2NlwwXDI3NlwzNDVcMjE3XDI1XDI3NFwzNDRcMU1cMzIzXDM1N1wyMTFcMzc2XDM3N1wzNzRcMVwyMTVcMjM0IiBcCisgICJcMjQzXDIyMl1velwxbVwyMDBcMjEzXDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwyMjJcMjQxXDI0N1wyMjJdbyIgXAorICAielwxbFwxNzdcMjEyXDIxMVwzNzZcMzc3XDM3NFwxXDIwN1wzNDFcMzY0XDIyM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzQiIFwKKyAgIlwyMTZcMzc2XDM3N1wzNzRcMW5cMzMzXDM2MlwyMjVcMjVcMjc0XDM0NFwyI1wzMDRcMzQ2XDMzNlwzNjdcMzc0XDIxNCIgXAorICAiXDM3NlwzNzdcMzc0XDJcMjM1XDM0NlwzNjVcMFwyNzZcMzQ1XDIyMFwyNVwyNzRcMzQ0XDFNXDMyM1wzNTdcMjExXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMTFcMjMwXDIzNlwyMjJdb3pcMXNcMjA2XDIyMVwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMzFcMjQxXDI1MVwyMjJdb3pcMWV3XDIwMlwyMTFcMzc2XDM3N1wzNzRcMVwyMzFcMzQyXDM2MlwyMjNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMzIwXDM2NVwzNzZcMjE2XDM3NlwzNzdcMzc0XDFcMjIxXDM0NFwzNjJcMjI0XDI1XDI3NFwzNDRcMiNcMzA0IiBcCisgICJcMzQ2XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNVwzNDZcMzY1XDBcMjc2XDM0NVwyMjFcMjVcMjc0XDM0NCIgXAorICAiXDFpXDMyNlwzNTZcMjExXDM3NlwzNzdcMzc0XDFcMjAyXDIyMVwyMjdcMjIyXW96XDF1XDIxMFwyMjRcMjU2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDFcMjQyXDI1MlwyNjJcMjIyXW96XDFecHtcMjExXDM3NlwzNzdcMzc0XDFcMjM3XDM1MCIgXAorICAiXDM2N1wyMjNcMjVcMjc0XDM0NFwxXDMwMVwzNTZcMzY2XDIxNlwzNzZcMzc3XDM3NFwxXDMzM1wzNjRcMzcxXDIyM1wyNSIgXAorICAiXDI3NFwzNDRcMiNcMzA0XDM0NlwzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwzNTZcMzczXDM3NFwwXDI3NlwzNDUiIFwKKyAgIlwyMjJcMjVcMjc0XDM0NFwxblwzMzNcMzYyXDIxMVwzNzZcMzc3XDM3NFwxd1wyMTJcMjI2XDIyMl1velwxXDIwMlwyMjEiIFwKKyAgIlwyMjdcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDI0NlwyNTZcMjY2XDIyM11velwxXDM3MFwzNzJcMzY3XDIxMCIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjYwXDM1M1wzNjZcMjIzXDI1XDI3NFwzNDRcMVwyMzNcMzQ1XDM2NFwyMTdcMzc2XDM3N1wzNzQiIFwKKyAgIlwxLFwzMTFcMzUyXDIyMVwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2N1wzNzRcMjE1XDM3NlwzNzdcMzc0XDFcMzEyIiBcCisgICJcMzU3XDM3MFwyMjNcMjVcMjc0XDM0NFwxXDIwNFwzMzVcMzYxXDIxMVwzNzZcMzc3XDM3NFwxb1wyMDJcMjE1XDIyMiIgXAorICAiXW96XDFcMjA1XDIyNFwyMzJcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDI1MlwyNjJcMjcyXDIyM11velwxXDM1NSIgXAorICAiXDM2MlwzNjVcMjEwXDM3NlwzNzdcMzc0XDFcMzE0XDM2MVwzNzJcMjIzXDI1XDI3NFwzNDRcMW1cMzMyXDM2MVwyMTciIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDI3M1wzNTRcMzcxXDIyMFwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2N1wzNzRcMjE2IiBcCisgICJcMzc2XDM3N1wzNzRcMVwyMzNcMzQ1XDM2NFwyMjNcMjVcMjc0XDM0NFwxXDIzNlwzNDdcMzY2XDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDFpe1wyMDZcMjIyXW96XDFcMjExXDIzMFwyMzZcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDI2NlwyNzdcMzA3IiBcCisgICJcMjIzXW96XDFcMzQwXDM0NVwzNTBcMjEwXDM3NlwzNzdcMzc0XDFcMzU2XDM3M1wzNzRcMjIzXDI1XDI3NFwzNDRcMSIgXAorICAiLFwzMTFcMzUyXDIyMFwzNzZcMzc3XDM3NFwxaVwzMjZcMzU2XDIxNlwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2NyIgXAorICAiXDM3NFwyMTdcMzc2XDM3N1wzNzRcMVxcXDMyNlwzNTVcMjIzXDI1XDI3NFwzNDRcMVwyNzRcMzU1XDM3M1wyMTBcMzc2IiBcCisgICJcMzc3XDM3NFwyXDM3MlwzNzRcMzcxX3F8XDIyMl1velwxXDIyNlwyNDZcMjU0XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3NyIgXAorICAiXDM3NFwxXDMwN1wzMTVcMzE3XDIyM11velwxXDMxM1wzMjBcMzIyXDIxMVwzNzZcMzc3XDM3NFwxXDBcMzAyXDM1MVwyMjIiIFwKKyAgIlwyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDM1N1wzNzRcMzc1XDIxN1wzNzZcMzc3XDM3NFwyXDM3MFwzNzZcMzc3R1wzMTciIFwKKyAgIlwzNTNcMjE0XDI1XDI3NFwzNDRcMihcMzA3XDM1MFwzMzZcMzY3XDM3NFwyMjBcMzc2XDM3N1wzNzRcMSVcMzA1XDM0NyIgXAorICAiXDIyM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjEwXDM3NlwzNzdcMzc0XDFcMzQzXDM1MFwzNTNcMjIzXW96XDEiIFwKKyAgIlwyNTRcMjY0XDI3NFwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMzI3XDMzNFwzMzdcMjIzXW96XDFcMjU3XDI2NyIgXAorICAiXDI3N1wyMTFcMzc2XDM3N1wzNzRcMUJcMzE0XDM0N1wyMjNcMjVcMjc0XDM0NFwxXDIzN1wzNTBcMzY3XDIyMFwzNzYiIFwKKyAgIlwzNzdcMzc0XDNcMzcwXDM3NlwzNzduXDMzM1wzNjJcMzFcMjc1XDM0NVwyMTFcMjVcMjc0XDM0NFwySlwzMjFcMzU1IiBcCisgICJcMzU2XDM3M1wzNzRcMjIwXDM3NlwzNzdcMzc0XDFcMzE1XDM2MlwzNzNcMjIzXDI1XDI3NFwzNDRcMVwwXDMwMVwzNTAiIFwKKyAgIlwyMTFcMzc2XDM3N1wzNzRcMVwzMTZcMzIzXDMyNlwyMjNdb3pcMVwyNzZcMzAzXDMwNVwyNTZcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NiIgXAorICAiXDM3N1wzNzRcMVwzNDZcMzU0XDM1NlwyMjNdb3pcMVwyMjVcMjQ1XDI1M1wyMTFcMzc2XDM3N1wzNzRcMWtcMzI3XDM1NyIgXAorICAiXDIyM1wyNVwyNzRcMzQ0XDFHXDMxN1wzNTNcMjIyXDM3NlwzNzdcMzc0XDNcMzIwXDM2NVwzNzZaXDMyNVwzNTRcMFwzMDEiIFwKKyAgIlwzNTBcMjA0XDI1XDI3NFwzNDRcM1wwXDI3NlwzNDVHXDMxN1wzNTNcMjc0XDM1NVwzNzNcMjIyXDM3NlwzNzdcMzc0IiBcCisgICJcMXdcMzMzXDM1NlwyMjNcMjVcMjc0XDM0NFwxIiIzXDMxNFwzNTVcMjExXDM3NlwzNzdcMzc0XDFcMjY0XDI3NFwzMDUiIFwKKyAgIlwyMjNdb3pcMVwzMTVcMzIyXDMyNVwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMzY2XDM3M1wzNzZcMjIzXW8iIFwKKyAgInpcMXpcMjE1XDIzMVwyMTFcMzc2XDM3N1wzNzRcMVwyMzdcMzUwXDM2N1wyMjNcMjVcMjc0XDM0NFwyXDMxXDI3NVwzNDUiIFwKKyAgIlwzMzVcMzY2XDM3M1wyMjNcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3N1wzMTZcMzYzXDM3NFwyMDJcMjYxXDM1NFwzNjciIFwKKyAgIlwyXDMxM1wzNjBcMzcxXDM2NlwzNzNcMzc2XDIyM1wzNzZcMzc3XDM3NFwyXDM3MFwzNzZcMzc3XDBcMzAyXDM1MVwyMjMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFuXDMzM1wzNjJcMjExXDM3NlwzNzdcMzc0XDFcMjMwXDI1MFwyNTZcMjIzXW96XDFcMzM0XDM0MiIgXAorICAiXDM0NFwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjU3XDM3NlwzNzdcMzc0XDFtXDIwMFwyMTNcMjIyXW96XDFld1wyMDJcMjExXDM3NlwzNzciIFwKKyAgIlwzNzRcMVwzNDdcMzcwXDM3NlwyMjRcMjVcMjc0XDM0NFwxbVwzMzJcMzYxXDI1NFwzNzZcMzc3XDM3NFwxXDIzM1wzNDUiIFwKKyAgIlwzNjRcMjI0XDI1XDI3NFwzNDRcMVwyNjFcMzU0XDM2N1wyMTFcMzc2XDM3N1wzNzRcMX1cMjIwXDIzM1wyMjNdb3pcMSIgXAorICAiXDM2NlwzNzBcMzY0XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTdcMzc2XDM3N1wzNzRcMVwyMTFcMjMwXDIzNlwyMjNdb3pcMVwzMzVcMzQzIiBcCisgICJcMzQ1XDIxMVwzNzZcMzc3XDM3NFwxJVwzMDVcMzQ3XDIyM1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDMzNlwzNjdcMzc0IiBcCisgICJcMjUyXDM3NlwzNzdcMzc0XDJcMzY3XDM3NVwzNzcjXDMwNFwzNDZcMjIzXDI1XDI3NFwzNDRcMlwzMVwyNzVcMzQ1XDM1NyIgXAorICAiXDM3NFwzNzVcMjEwXDM3NlwzNzdcMzc0XDJcMzcwXDM3MlwzNjdhc35cMjIyXW96XDFtXDIwMFwyMTNcMjU3XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU3XDM3NlwzNzdcMzc0XDFcMjUxXDI2MVwyNzFcMjIzXW96XDFcMjY0XDI3NFwzMDVcMjExXDM3NlwzNzdcMzc0XDEiIFwKKyAgImtcMzI3XDM1N1wyMjRcMjVcMjc0XDM0NFwxTFwzMjJcMzU2XDI1MlwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIyNCIgXAorICAiXDI1XDI3NFwzNDRcMSIiM1wzMTRcMzU1XDIxMVwzNzZcMzc3XDM3NFwxXDMyMlwzMzBcMzMyXDIyM11velwxXDIxMVwyMzAiIFwKKyAgIlwyMzZcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxXDMwNVwzMTJcMzE1XDIyM11velwxXDIxMVwyMzBcMjM2XDIxMSIgXAorICAiXDM3NlwzNzdcMzc0XDFcMzAxXDM1NlwzNjZcMjI1XDI1XDI3NFwzNDRcMVwyNjJcMzU1XDM3MFwyNTBcMzc2XDM3N1wzNzQiIFwKKyAgIlwyXDMzNFwzNjVcMzcyXDBcMjc2XDM0NVwyMjRcMjVcMjc0XDM0NFwxXDIyMFwzNDNcMzYxXDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDFcMjUyXDI2MlwyNzJcMjIzXW96XDFcMjUxXDI2MVwyNzFcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxXDMzN1wzNDQiIFwKKyAgIlwzNDZcMjIzXW96XDJld1wyMDJcMzczXDM3NVwzNzJcMjEwXDM3NlwzNzdcMzc0XDJcMzcwXDM3NlwzNzcjXDMwNFwzNDYiIFwKKyAgIlwyMjRcMjVcMjc0XDM0NFwyXDBcMzAyXDM1MVwzNDdcMzcwXDM3NlwyNDZcMzc2XDM3N1wzNzRcMlwzNjdcMzc1XDM3NyIgXAorICAiLFwzMTFcMzUyXDIyNFwyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDMzN1wzNzBcMzc1XDIxMVwzNzZcMzc3XDM3NFwxXDE3NyIgXAorICAiXDIxNlwyMjRcMjIzXW96XDFcMzA1XDMxMlwzMTVcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwyXDM3M1wzNzVcMzcyIiBcCisgICJkdlwyMDFcMjIzXW96XDFcMzMxXDMzNlwzNDFcMjExXDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjI1XDI1XDI3NFwzNDQiIFwKKyAgIlwyQlwzMTRcMzQ3XDM3MFwzNzZcMzc3XDI0NVwzNzZcMzc3XDM3NFwxaVwzMjZcMzU2XDIyNVwyNVwyNzRcMzQ0XDFCIiBcCisgICJcMzE0XDM0N1wyMTFcMzc2XDM3N1wzNzRcMlwzNjJcMzY3XDM3MV9xfFwyMjNdb3pcMVwzNDZcMzU0XDM1NlwyNTdcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wyNjBcMzc2XDM3N1wzNzRcMVwyMTBcMjI3XDIzNVwyMjNdb3pcMVwyNDZcMjU2XDI2NlwyMTFcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDMxNlwzNjNcMzc0XDIyNlwyNVwyNzRcMzQ0XDJNXDMyM1wzNTdcMzcwXDM3NlwzNzdcMjQzXDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMDZcMzQwXDM2M1wyMjZcMjVcMjc0XDM0NFwxXDI1NlwzNTBcMzY0XDIxMVwzNzZcMzc3XDM3NFwxXDMwMVwzMDYiIFwKKyAgIlwzMTFcMjIzXW96XDFrflwyMTFcMjYwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MFwzNzZcMzc3XDM3NFwxXDI1N1wyNjdcMjc3XDIyM11velwyaSIgXAorICAie1wyMDZcMzczXDM3NVwzNzJcMjExXDM3NlwzNzdcMzc0XDFHXDMxN1wzNTNcMjI2XDI1XDI3NFwzNDRcMlxcXDMyNlwzNTUiIFwKKyAgIlwzNzBcMzc2XDM3N1wyNDFcMzc2XDM3N1wzNzRcMVwyMjBcMzQzXDM2MVwyMjZcMjVcMjc0XDM0NFwyXDBcMzA0XDM1MiIgXAorICAiXDM3MFwzNzZcMzc3XDIxMVwzNzZcMzc3XDM3NFwxXDIwNFwyMjNcMjMxXDIyM11velwxXDIzMFwyNDBcMjUwXDI2MFwzNzYiIFwKKyAgIlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3IiBcCisgICJcMzc3XDI2MFwzNzZcMzc3XDM3NFwxXDMzMVwzMzZcMzQxXDIyNF1velwxXDMxN1wzMjRcMzI3XDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDFcMzAxXDM1NlwzNjZcMjI3XDI1XDI3NFwzNDRcMkpcMzIxXDM1NVwzNjdcMzc1XDM3N1wyMzdcMzc2XDM3N1wzNzQiIFwKKyAgIlwxd1wzMzNcMzU2XDIyN1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjExXDM3NlwzNzdcMzc0XDJcMzUxXDM1NlwzNjAiIFwKKyAgIl5we1wyMjNdb3pcMVwyNzdcMzA0XDMwNlwyNjBcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYwXDM3NlwzNzdcMzc0XDJcMzcyXDM3NFwzNzFjdSIgXAorICAiXDIwMFwyMjNdb3pcMVwyMjJcMjQxXDI0N1wyMTJcMzc2XDM3N1wzNzRcMS9cMzEyXDM1M1wyMjdcMjVcMjc0XDM0NFwyIiBcCisgICIsXDMxMVwzNTJcMzM0XDM2NVwzNzJcMjM0XDM3NlwzNzdcMzc0XDJcMzU2XDM3M1wzNzRJXDMyMFwzNTRcMjI3XDI1XDI3NCIgXAorICAiXDM0NFwyXDBcMzAxXDM1MFwzNjZcMzczXDM3NlwyMTFcMzc2XDM3N1wzNzRcMVwyNjFcMjcxXDMwMlwyMjRdb3pcMVwzNDMiIFwKKyAgIlwzNTBcMzUzXDI2MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjFcMzc2XDM3N1wzNzRcMVwyMTZcMjM2XDI0NFwyMjNdb3pcMmN1XDIwMFwzNjIiIFwKKyAgIlwzNjdcMzcxXDIxMVwzNzZcMzc3XDM3NFwxXDI2MVwzNTRcMzY3XDIzMFwyNVwyNzRcMzQ0XDNcMFwyNzZcMzQ1XDIzMyIgXAorICAiXDM0NVwzNjRcMzcwXDM3NlwzNzdcMjMxXDM3NlwzNzdcMzc0XDJcMjYyXDM1NVwzNzBcMFwzMDRcMzUyXDIzMFwyNVwyNzQiIFwKKyAgIlwzNDRcMVwyMDZcMzQwXDM2M1wyMTJcMzc2XDM3N1wzNzRcMXNcMjA2XDIyMVwyMjNdb3pcMXFcMjA0XDIxN1wyNjFcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wyNjFcMzc2XDM3N1wzNzRcMVwzMDVcMzEyXDMxNVwyMjRdb3pcMVwyNTdcMjY3XDI3N1wyMTJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxQlwzMTRcMzQ3XDIzMVwyNVwyNzRcMzQ0XDIiIjFcMzEzXDM1NFwzMDNcMzYxXDM3MFwyMjZcMzc2XDM3N1wzNzRcMiIgXAorICAiXDMzNFwzNjVcMzcySlwzMjFcMzU1XDIzMVwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzY2XDM3M1wzNzZcMjExXDM3NlwzNzciIFwKKyAgIlwzNzRcMVwzMTVcMzIyXDMyNVwyMjRdb3pcMVwyNTFcMjYxXDI3MVwyNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYxXDM3NlwzNzdcMzc0XDJcMzYyIiBcCisgICJcMzY3XDM3MWFzflwyMjNdb3pcMmh6XDIwNVwzNzBcMzcyXDM2N1wyMTFcMzc2XDM3N1wzNzRcMlwzMzRcMzY1XDM3MiIgXAorICAiXDBcMjc2XDM0NVwyMzJcMjVcMjc0XDM0NFwzQlwzMTRcMzQ3XDI2MlwzNTVcMzcwXDM3MFwzNzZcMzc3XDIyMVwzNzYiIFwKKyAgIlwzNzdcMzc0XDNcMzEzXDM2MFwzNzFMXDMyMlwzNTZcMFwyNzZcMzQ1XDIzMlwyNVwyNzRcMzQ0XDFcMjU2XDM1MFwzNjQiIFwKKyAgIlwyMTJcMzc2XDM3N1wzNzRcMXpcMjE1XDIzMVwyMjRdb3pcMVwzMzNcMzQwXDM0M1wyNjFcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMDdcMjI2XDIzNFwyMjRdb3pcMVwyNzBcMzAwXDMxMVwyMTJcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NiIgXAorICAiXDIzNFwyNVwyNzRcMzQ0XDRcMFwzMDRcMzUybVwzMzJcMzYxXDI3M1wzNTRcMzcxXDM2NlwzNzNcMzc2XDIxMlwzNzYiIFwKKyAgIlwzNzdcMzc0XDRcMzcwXDM3NlwzNzdcMzAyXDM1N1wzNjd5XDMzNlwzNjAoXDMwN1wzNTBcMjM0XDI1XDI3NFwzNDRcMSIgXAorICAiQlwzMTRcMzQ3XDIxMlwzNzZcMzc3XDM3NFwxXDMyNFwzMzFcMzMzXDIyNF1velwxa35cMjExXDI2MlwzNzZcMzc3XDM3NCIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjIiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDMwMVwzMDZcMzExXDIyNF1velwya35cMjExXDM3MlwzNzRcMzcxXDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDJcMzY2XDM3M1wzNzYoXDMwN1wzNTBcMjM2XDI1XDI3NFwzNDRcNVwzMVwyNzVcMzQ1LFwzMTFcMzUyTVwzMjNcMzU3IiBcCisgICJ5XDMzNlwzNjBcMjExXDM0MlwzNjVcMjAyXDIzM1wzNDVcMzY0XDVcMjIwXDM0M1wzNjFcMjA0XDMzNVwzNjFaXDMyNSIgXAorICAiXDM1NDFcMzEzXDM1NFwwXDI3NlwzNDVcMjM2XDI1XDI3NFwzNDRcMlwwXDMwMVwzNTBcMzM2XDM2N1wzNzRcMjEyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMDVcMjI0XDIzMlwyMjRdb3pcMVwyNDZcMjU2XDI2NlwyNjJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYyXDM3NlwzNzdcMzc0IiBcCisgICJcMlwzNjdcMzcxXDM2NmR2XDIwMVwyMjRdb3pcMVwyNzRcMzAxXDMwM1wyMTJcMzc2XDM3N1wzNzRcMlwzMTVcMzYyXDM3MyIgXAorICAiXDBcMjc2XDM0NVwzMDdcMjVcMjc0XDM0NFwxXDIzNlwzNDdcMzY2XDIxMlwzNzZcMzc3XDM3NFwxXDMyNVwzMzJcMzM0IiBcCisgICJcMjI1XW96XDFcMzQxXDM0NlwzNTFcMjYyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2M1wzNzZcMzc3XDM3NFwxXDIzNlwyNDZcMjU2XDIyNF1vIiBcCisgICJ6XDJmeFwyMDNcMzU2XDM2M1wzNjZcMjEyXDM3NlwzNzdcMzc0XDFcMjIxXDM0NFwzNjJcMzA2XDI1XDI3NFwzNDRcMSIgXAorICAiTVwzMjNcMzU3XDIxMlwzNzZcMzc3XDM3NFwyXDM3MlwzNzRcMzcxdFwyMDdcMjIyXDIyNF1velwxXDE3N1wyMTZcMjI0IiBcCisgICJcMjYzXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI2M1wzNzZcMzc3XDM3NFwxXDMzM1wzNDBcMzQzXDIyNV1velwxXDIyNlwyNDZcMjU0XDIxM1wzNzYiIFwKKyAgIlwzNzdcMzc0XDFMXDMyMlwzNTZcMzA0XDI1XDI3NFwzNDRcMixcMzExXDM1MlwzNjZcMzczXDM3NlwyMTJcMzc2XDM3NyIgXAorICAiXDM3NFwxXDI2NVwyNzZcMzA2XDIyNV1velwxXDMwMlwzMDdcMzEyXDI2M1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjRcMzc2XDM3N1wzNzRcMXVcMjEwIiBcCisgICJcMjI0XDIyNF1velwyXnB7XDMzMVwzMzZcMzQxXDIxMlwzNzZcMzc3XDM3NFwyXDM2NlwzNzNcMzc2L1wzMTJcMzUzXDMwMiIgXAorICAiXDI1XDI3NFwzNDRcMlwwXDMwMlwzNTFcMzM2XDM2N1wzNzRcMjEyXDM3NlwzNzdcMzc0XDJcMzUzXDM2MFwzNjNkdlwyMDEiIFwKKyAgIlwyMjRdb3pcMmR2XDIwMVwzNjRcMzcxXDM3NFwyNjNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY0XDM3NlwzNzdcMzc0XDFcMzAyXDMwN1wzMTJcMjI1IiBcCisgICJdb3pcMndcMjEyXDIyNlwzNzJcMzc0XDM3MVwyMTJcMzc2XDM3N1wzNzRcMlwzNTBcMzcxXDM3NyVcMzA1XDM0N1wzMDAiIFwKKyAgIlwyNVwyNzRcMzQ0XDJcMFwzMDFcMzUwXDMxNFwzNjFcMzcyXDIxM1wzNzZcMzc3XDM3NFwxXDIyN1wyMzdcMjQ3XDIyNSIgXAorICAiXW96XDFcMjQ2XDI1NlwyNjZcMjY0XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2NFwzNzZcMzc3XDM3NFwyXDM3MlwzNzRcMzcxbFwxNzdcMjEyXDIyNSIgXAorICAiXW96XDFcMjUyXDI2MlwyNzJcMjEzXDM3NlwzNzdcMzc0XDJcMzM3XDM3MFwzNzVcMFwzMDRcMzUyXDI3NlwyNVwyNzQiIFwKKyAgIlwzNDRcMlwwXDI3NlwzNDVcMjc0XDM1NVwzNzNcMjEzXDM3NlwzNzdcMzc0XDFcMzA1XDMxMlwzMTVcMjI1XW96XDJhIiBcCisgICJzflwzNTNcMzYwXDM2M1wyNjRcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY1XDM3NlwzNzdcMzc0XDFcMjcwXDMwMFwzMTFcMjI1XW96XDJecHtcMzIyIiBcCisgICJcMzMwXDMzMlwyMTNcMzc2XDM3N1wzNzRcMlwzMzJcMzYzXDM3MCNcMzA0XDM0NlwyNzRcMjVcMjc0XDM0NFwyXDBcMjc2IiBcCisgICJcMzQ1XDI3M1wzNTRcMzcxXDIxM1wzNzZcMzc3XDM3NFwyXDM0M1wzNTBcMzUzZHZcMjAxXDIyNV1velwxXDIzNlwyNDYiIFwKKyAgIlwyNTZcMjY1XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI2NVwzNzZcMzc3XDM3NFwyXDM2NVwzNzJcMzc1aHpcMjA1XDIyNV1velwyaXtcMjA2XDM1NCIgXAorICAiXDM2MVwzNjRcMjEzXDM3NlwzNzdcMzc0XDJcMzM3XDM3MFwzNzUqXDMxMFwzNTFcMjcyXDI1XDI3NFwzNDRcMlwwXDMwMiIgXAorICAiXDM1MVwzMTRcMzYxXDM3MlwyMTNcMzc2XDM3N1wzNzRcMlwzNzFcMzczXDM3MHhcMjEzXDIyN1wyMjVdb3pcMl9xfFwzNDYiIFwKKyAgIlwzNTRcMzU2XDI2NVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjZcMzc2XDM3N1wzNzRcMVwyNjFcMjcxXDMwMlwyMjZdb3pcMlwyMDVcMjI0XDIzMiIgXAorICAiXDM3M1wzNzVcMzcyXDIxM1wzNzZcMzc3XDM3NFwyXDM1NlwzNzNcMzc0QlwzMTRcMzQ3XDI3MFwyNVwyNzRcMzQ0XDIiIFwKKyAgIiVcMzA1XDM0N1wzMzVcMzY2XDM3M1wyMTRcMzc2XDM3N1wzNzRcMVwyNDJcMjUyXDI2MlwyMjZdb3pcMVwyMzFcMjQxIiBcCisgICJcMjUxXDI2NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNjZcMzc2XDM3N1wzNzRcMlwzNzBcMzcyXDM2N21cMjAwXDIxM1wyMjZdb3pcMVwyNDIiIFwKKyAgIlwyNTJcMjYyXDIxNFwzNzZcMzc3XDM3NFwyXDM2N1wzNzVcMzc3aVwzMjZcMzU2XDI2NlwyNVwyNzRcMzQ0XDJCXDMxNCIgXAorICAiXDM0N1wzNTBcMzcxXDM3N1wyMTRcMzc2XDM3N1wzNzRcMVwyNzdcMzA0XDMwNlwyMjZdb3pcMmJ0XDE3N1wzNTFcMzU2IiBcCisgICJcMzYwXDI2NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNjdcMzc2XDM3N1wzNzRcMVwzMDVcMzEyXDMxNVwyMjddb3pcMVwyNjFcMjcxXDMwMlwyMTUiIFwKKyAgIlwzNzZcMzc3XDM3NFwyXDI1MFwzNDdcMzcxXDBcMzAxXDM1MFwyNjJcMjVcMjc0XDM0NFwzXDMxXDI3NVwzNDVcMjA2IiBcCisgICJcMzQwXDM2M1wzNzBcMzc2XDM3N1wyMTRcMzc2XDM3N1wzNzRcMlwzMTZcMzIzXDMyNl9xfFwyMjZdb3pcMVwyNTFcMjYxIiBcCisgICJcMjcxXDI2N1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNzBcMzc2XDM3N1wzNzRcMXlcMjE0XDIzMFwyMjZdb3pcMl5we1wzMDFcMzA2XDMxMVwyMTUiIFwKKyAgIlwzNzZcMzc3XDM3NFwyXDMzNVwzNjZcMzczL1wzMTJcMzUzXDI2MFwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzEyXDM1NyIgXAorICAiXDM3MFwyMTVcMzc2XDM3N1wzNzRcMlwzMzBcMzM1XDM0MGN1XDIwMFwyMjZdb3pcMmh6XDIwNVwzNjZcMzcwXDM2NFwyNjciIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyNzBcMzc2XDM3N1wzNzRcMVwzMzJcMzM3XDM0MlwyMzBcMjIyXDI0MVwyNDdcMVwzNTNcMzYwXDM2MyIgXAorICAiXDIxNVwzNzZcMzc3XDM3NFwzXDM3MFwzNzZcMzc3XDIzMVwzNDJcMzYyXDBcMzAxXDM1MFwyNTRcMjVcMjc0XDM0NFwzIiBcCisgICJcMFwyNzZcMzQ1d1wzMzNcMzU2XDM2NlwzNzNcMzc2XDIxNVwzNzZcMzc3XDM3NFwyXDM2NVwzNzJcMzc1XDIzNlwyNDYiIFwKKyAgIlwyNTZcMjI3XDIyMlwyNDFcMjQ3XDFcMzA3XDMxNVwzMTdcMjcwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM0MVwzNzZcMzc3XDM3NFwzXDM1NlwzNzMiIFwKKyAgIlwzNzRpXDMyNlwzNTZcMFwyNzZcMzQ1XDI1MVwyNVwyNzRcMzQ0XDJKXDMyMVwzNTVcMzM1XDM2NlwzNzNcMzQxXDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMzQzXDM3NlwzNzdcMzc0XDNcMzE2XDM2M1wzNzRaXDMyNVwzNTRcMzFcMjc1XDM0NVwyNDVcMjVcMjc0XDM0NCIgXAorICAiXDJHXDMxN1wzNTNcMzAyXDM1N1wzNjdcMzQzXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM0NVwzNzZcMzc3XDM3NFwzXDMzNlwzNjdcMzc0bVwzMzJcMzYxIiBcCisgICJcMFwyNzZcMzQ1XDI0MFwyNVwyNzRcMzQ0XDNcMzFcMjc1XDM0NU1cMzIzXDM1N1wzMTZcMzYzXDM3NFwzNDVcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwzNDdcMzc2XDM3N1wzNzRcNFwzNjZcMzczXDM3NlwyMzdcMzUwXDM2N0lcMzIwXDM1NFwzMVwyNzVcMzQ1XDIzMlwyNSIgXAorICAiXDI3NFwzNDRcNFwwXDI3NlwzNDVCXDMxNFwzNDdcMjMxXDM0MlwzNjJcMzU2XDM3M1wzNzRcMzQ3XDM3NlwzNzdcMzc0IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM1MiIgXAorICAiXDM3NlwzNzdcMzc0XDRcMzU2XDM3M1wzNzRcMjM1XDM0NlwzNjVaXDMyNVwzNTQjXDMwNFwzNDZcMjI0XDI1XDI3NFwzNDQiIFwKKyAgIlw0XDBcMzAyXDM1MUxcMzIyXDM1NlwyMjFcMzQ0XDM2MlwzMzZcMzY3XDM3NFwzNTJcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzU2XDM3NlwzNzciIFwKKyAgIlwzNzRcNlwzMzZcMzY3XDM3NFwyMzdcMzUwXDM2N3dcMzMzXDM1Nk1cMzIzXDM1NyxcMzExXDM1MlwwXDI3NlwzNDVcMjEwIiBcCisgICJcMjVcMjc0XDM0NFw2XDBcMjc2XDM0NSpcMzEwXDM1MUpcMzIxXDM1NW5cMzMzXDM2MlwyMzNcMzQ1XDM2NFwzMjBcMzY1IiBcCisgICJcMzc2XDM1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wzNjRcMzc2XDM3N1wzNzRcMTBcMzY3XDM3NVwzNzdcMzU2XDM3M1wzNzRcMzM1XDM2NlwzNzMiIFwKKyAgIlwzMTZcMzYzXDM3NFwzMTVcMzYyXDM3M1wzMzVcMzY2XDM3M1wzNTBcMzcxXDM3N1wzNjZcMzczXDM3NlwzNjRcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NiIgXAorICAiXDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc1XDM3NlwzNzdcMzc0XDIwMiIgXAorICAiXDM3MFwzNzZcMzc3XDI1MFwzNzZcMzc3XDM3NFwxXDM2N1wzNzVcMzc3XDIxN1wzNzZcMzc3XDM3NFwxXDM2N1wzNzUiIFwKKyAgIlwzNzdcMjM3XDM3NlwzNzdcMzc0XDFcMzY3XDM3NVwzNzdcMjMwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NFwzNzZcMzc3XDM3NFw0XDIzN1wzNTAiIFwKKyAgIlwzNjdcMFwyNzZcMzQ1XDMxXDI3NVwzNDVcMjAzXDMzNFwzNjBcMjQ1XDM3NlwzNzdcMzc0XDVcMzE2XDM2M1wzNzQjIiBcCisgICJcMzA0XDM0NlwyNVwyNzRcMzQ0R1wzMTdcMzUzXDM2N1wzNzVcMzc3XDIxM1wzNzZcMzc3XDM3NFw1XDMzNVwzNjZcMzczIiBcCisgICIoXDMwN1wzNTBcMjVcMjc0XDM0NEJcMzE0XDM0N1wzNjZcMzczXDM3NlwyMzNcMzc2XDM3N1wzNzRcNVwzNTZcMzczXDM3NCIgXAorICAiL1wzMTJcMzUzXDI1XDI3NFwzNDQqXDMxMFwzNTFcMzM3XDM3MFwzNzVcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NFwzNzZcMzc3XDM3NCIgXAorICAiXDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwzNTdcMzc0XDM3NVwyNDRcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NlwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFcMjYwXDM1M1wzNjZcMjEzXDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjAzXDI1XDI3NFwzNDRcMSIgXAorICAiXDIzNVwzNDZcMzY1XDIzM1wzNzZcMzc3XDM3NFwxXDIzMVwzNDJcMzYyXDIwM1wyNVwyNzRcMzQ0XDF5XDMzNlwzNjAiIFwKKyAgIlwyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMzc0XDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzQiIFwKKyAgIlwyNDRcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyXDIxM1wzNzZcMzc3IiBcCisgICJcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMzNcMzc2XDM3N1wzNzRcMVwyMDZcMzQwIiBcCisgICJcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NFwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MCIgXAorICAiXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjQ0XDM3NlwzNzdcMzc0XDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDQiIFwKKyAgIlwxXDIzMVwzNDJcMzYyXDIxM1wzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjMiIFwKKyAgIlwyMzNcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3IiBcCisgICJcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3NyIgXAorICAiXDM3NFwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDI0NFwzNzZcMzc3IiBcCisgICJcMzc0XDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMTNcMzc2XDM3N1wzNzRcMU1cMzIzXDM1NyIgXAorICAiXDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjMzXDM3NlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzRcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMSIgXAorICAiXDMzNlwzNjdcMzc0XDI0NFwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjIiIFwKKyAgIlwyMTNcMzc2XDM3N1wzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIzM1wzNzZcMzc3IiBcCisgICJcMzc0XDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NFwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc0XDM3NlwzNzciIFwKKyAgIlwzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyNDRcMzc2XDM3N1wzNzRcMUlcMzIwIiBcCisgICJcMzU0XDIwM1wyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjJcMjEzXDM3NlwzNzdcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxXDIwNlwzNDBcMzYzXDIzM1wzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyNyIgXAorICAiXDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjMyXDM3NlwzNzdcMzc0XDdcMzExXDMxNlwzMjFcMjExXDIzMFwyMzZqfVwyMTBjdVwyMDAiIFwKKyAgIm5cMjAxXDIxNFwyMzNcMjQzXDI1M1wzMzNcMzQwXDM0M1wyMDZcMzc2XDM3N1wzNzRcMlwyMzZcMjQ2XDI1NmR2XDIwMSIgXAorICAiXDIwNV1velw0X3F8a35cMjExXDIyMlwyNDFcMjQ3XDMzN1wzNDRcMzQ2XDIxMFwzNzZcMzc3XDM3NFw3XDMyMlwzMzAiIFwKKyAgIlwzMzJcMjIyXDI0MVwyNDdsXDE3N1wyMTJjdVwyMDBrflwyMTFcMjIyXDI0MVwyNDdcMzIyXDMzMFwzMzJcMjA2XDM3NiIgXAorICAiXDM3N1wzNzRcMlwyNTdcMjY3XDI3N2d5XDIwNFwyMDVdb3pcNF5we2l7XDIwNlwyMTFcMjMwXDIzNlwzMjVcMzMyXDMzNCIgXAorICAiXDIxMFwzNzZcMzc3XDM3NFwxMFwzMTNcMzYwXDM3MVxcXDMyNlwzNTUlXDMwNVwzNDdcMFwyNzZcMzQ1XDBcMzAyXDM1MSIgXAorICAiR1wzMTdcMzUzXDIzN1wzNTBcMzY3XDM3MFwzNzZcMzc3XDIwNVwzNzZcMzc3XDM3NFwyXDIzNVwzNDZcMzY1XDBcMzA0IiBcCisgICJcMzUyXDIxMlwyNVwyNzRcMzQ0XDRcMFwyNzZcMzQ1XDBcMzA0XDM1Mk1cMzIzXDM1N1wzMTVcMzYyXDM3M1wyMDVcMzc2IiBcCisgICJcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDdcMjVcMjc0XDM0NFw0XDBcMzAxXDM1MEJcMzE0XDM0N1wyMzNcMzQ1XDM2NCIgXAorICAiXDM3MFwzNzZcMzc3XDIwN1wzNzZcMzc3XDM3NFw3XDMwMlwzNTdcMzY3TVwzMjNcMzU3I1wzMDRcMzQ2XDBcMjc2XDM0NSIgXAorICAiXDBcMzA0XDM1MkpcMzIxXDM1NVwyNjBcMzUzXDM2NlwyMTBcMzc2XDM3N1wzNzRcNFwzMTVcMzYyXDM3M01cMzIzXDM1NyIgXAorICAiI1wzMDRcMzQ2XDMxXDI3NVwzNDVcMjA3XDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMDRcMzc2XDM3N1wzNzRcNFwzMjMiIFwKKyAgIlwzNjRcMzY3XFxcMzI2XDM1NSVcMzA1XDM0N1wwXDI3NlwzNDVcMjA3XDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDUiIFwKKyAgIlwzNzZcMzc3XDM3NFwxMFwzMzRcMzY1XDM3Mm1cMzMyXDM2MShcMzA3XDM1MFwwXDI3NlwzNDVcMFwzMDJcMzUxQlwzMTQiIFwKKyAgIlwzNDdcMjMzXDM0NVwzNjRcMzcwXDM3NlwzNzdcMjA3XDM3NlwzNzdcMzc0XDRcMzM2XDM2N1wzNzRtXDMzMlwzNjEoIiBcCisgICJcMzA3XDM1MFwwXDI3NlwzNDVcMjA3XDI1XDI3NFwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjMwXDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzNTZcMzYzXDM2NlwyMDJcMjIxXDIyN1wyMDZdb3pcM15we1wyNDdcMjU3XDI2N1wzNzNcMzc1XDM3MlwyMDMiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDMyN1wzMzRcMzM3XDIxMl1velwyX3F8XDMwM1wzMTBcMzEzXDIwNVwzNzZcMzc3XDM3NFwyIiBcCisgICJcMzY0XDM3MVwzNzRcMjIyXDI0MVwyNDdcMjA3XW96XDJcMjIyXDI0MVwyNDdcMzcwXDM3MlwzNjdcMjAzXDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzNTNcMzYwXDM2M15we1wyMTJdb3pcMVwyNTRcMjY0XDI3NFwyMDVcMzc2XDM3N1wzNzRcMlwzNzBcMzc2IiBcCisgICJcMzc3bVwzMzJcMzYxXDIwN1wyNVwyNzRcMzQ0XDJCXDMxNFwzNDdcMzUwXDM3MVwzNzdcMjAzXDM3NlwzNzdcMzc0XDIiIFwKKyAgIlwzNzBcMzc2XDM3N1wwXDI3NlwzNDVcMjE2XDI1XDI3NFwzNDRcMlwzMVwyNzVcMzQ1XDIzNVwzNDZcMzY1XDIwNFwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIxMlwyNVwyNzRcMzQ0XDJCXDMxNFwzNDdcMzU3XDM3NFwzNzVcMjA0XDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzNjdcMzc1XDM3N1pcMzI1XDM1NFwyMDdcMjVcMjc0XDM0NFwyR1wzMTdcMzUzXDM1N1wzNzRcMzc1XDIwNSIgXAorICAiXDM3NlwzNzdcMzc0XDJcMjM1XDM0NlwzNjVcMzFcMjc1XDM0NVwyMTJcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyXDIwMyIgXAorICAiXDM3NlwzNzdcMzc0XDJcMjU2XDM1MFwzNjRcMFwyNzZcMzQ1XDIxMlwyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjA0IiBcCisgICJcMzc2XDM3N1wzNzRcMlwyMDZcMzQwXDM2M1wzMVwyNzVcMzQ1XDIwNlwyNVwyNzRcMzQ0XDIqXDMxMFwzNTFcMzM1XDM2NiIgXAorICAiXDM3M1wyMDVcMzc2XDM3N1wzNzRcMlwzMDJcMzU3XDM2N1wwXDMwMVwzNTBcMjEyXDI1XDI3NFwzNDRcMWtcMzI3XDM1NyIgXAorICAiXDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjdcMzc2XDM3N1wzNzRcMlwzNjRcMzcxXDM3NHVcMjEwXDIyNFwyMTFdb3pcMVwyNDJcMjUyIiBcCisgICJcMjYyXDIwM1wzNzZcMzc3XDM3NFwxXDMwNlwzMTRcMzE2XDIxM11velwyX3F8XDMyNVwzMzJcMzM0XDIwM1wzNzZcMzc3IiBcCisgICJcMzc0XDJcMzczXDM3NVwzNzJcMjEwXDIyN1wyMzVcMjExXW96XDJcMjExXDIzMFwyMzZcMzczXDM3NVwzNzJcMjAyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwzMzBcMzM1XDM0MFwyMTRdb3pcMVwzMDRcMzExXDMxNFwyMDRcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NiIgXAorICAiXDIxMVwyNVwyNzRcMzQ0XDIqXDMxMFwzNTFcMzY2XDM3M1wzNzZcMjAyXDM3NlwzNzdcMzc0XDFcMzU3XDM3NFwzNzUiIFwKKyAgIlwyMjBcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwyNzRcMzU1XDM3M1wyMDNcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjEzIiBcCisgICJcMjVcMjc0XDM0NFwxTVwzMjNcMzU3XDIwNFwzNzZcMzc3XDM3NFwxTFwzMjJcMzU2XDIxMVwyNVwyNzRcMzQ0XDIiIjMiIFwKKyAgIlwzMTRcMzU1XDM3MFwzNzZcMzc3XDIwM1wzNzZcMzc3XDM3NFwyXDMxM1wzNjBcMzcxXDBcMjc2XDM0NVwyMTNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMjMxXDM0MlwzNjJcMjAyXDM3NlwzNzdcMzc0XDJcMzMzXDM2NFwzNzFcMFwyNzZcMzQ1XDIxM1wyNVwyNzQiIFwKKyAgIlwzNDRcMVwyMDZcMzQwXDM2M1wyMDNcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMTFcMjVcMjc0XDM0NFwyXDBcMzA0IiBcCisgICJcMzUyXDM0N1wzNzBcMzc2XDIwM1wzNzZcMzc3XDM3NFwyXDM1NlwzNzNcMzc0XDBcMzA0XDM1MlwyMTNcMjVcMjc0XDM0NCIgXAorICAiXDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDIyN1wzNzZcMzc3XDM3NFwxXDI1MVwyNjFcMjcxXDIxM11velwxXDMyMlwzMzBcMzMyIiBcCisgICJcMjAyXDM3NlwzNzdcMzc0XDFcMzA2XDMxNFwzMTZcMjE0XW96XDFcMjAwXDIxN1wyMjVcMjAzXDM3NlwzNzdcMzc0XDEiIFwKKyAgIlwyNzdcMzA0XDMwNlwyMTNdb3pcMVwyNzdcMzA0XDMwNlwyMDJcMzc2XDM3N1wzNzRcMVwzMzBcMzM1XDM0MFwyMTRdIiBcCisgICJvelwyan1cMjEwXDM3M1wzNzVcMzcyXDIwMlwzNzZcMzc3XDM3NFwxXDI3M1wzNTRcMzcxXDIxM1wyNVwyNzRcMzQ0XDEiIFwKKyAgIm5cMzMzXDM2MlwyMDJcMzc2XDM3N1wzNzRcMVwzNTdcMzc0XDM3NVwyMjFcMjVcMjc0XDM0NFwxIiIxXDMxM1wzNTRcMjAzIiBcCisgICJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjE0XDI1XDI3NFwzNDRcMVwzMzJcMzYzXDM3MFwyMDJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDIzN1wzNTBcMzY3XDIxM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAzXDM3NlwzNzdcMzc0XDFJXDMyMFwzNTQiIFwKKyAgIlwyMTRcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyXDIwMlwzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIxNFwyNVwyNzRcMzQ0IiBcCisgICJcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3N1wzNzRcMlwzMjBcMzY1XDM3NlwzMVwyNzVcMzQ1XDIxMlwyNVwyNzRcMzQ0IiBcCisgICJcMUxcMzIyXDM1NlwyMDNcMzc2XDM3N1wzNzRcMVwyMDNcMzM0XDM2MFwyMTRcMjVcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNiIgXAorICAiXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyNlwzNzZcMzc3XDM3NFwyXDM3MFwzNzJcMzY3Y3VcMjAwXDIwM11velw1c1wyMDZcMjIxXDMxN1wzMjQiIFwKKyAgIlwzMjdcMzQzXDM1MFwzNTNcMjc2XDMwM1wzMDVld1wyMDJcMjAzXW96XDFcMjEwXDIyN1wyMzVcMjAyXDM3NlwzNzdcMzc0IiBcCisgICJcMVwzMDZcMzE0XDMxNlwyMDNdb3pcMXlcMjE0XDIzMFwyMDNcMzQ3XDM1NVwzNTdcMlwzNDZcMzU0XDM1NlwyNjRcMjc0IiBcCisgICJcMzA1XDIwM11velwyXnB7XDM1N1wzNjVcMzY3XDIwMlwzNzZcMzc3XDM3NFwxcFwyMDNcMjE2XDIwM11velw1a35cMjExIiBcCisgICJcMzA3XDMxNVwzMTdcMzQzXDM1MFwzNTNcMzA2XDMxNFwzMTZrflwyMTFcMjAzXW96XDFwXDIwM1wyMTZcMjAyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwzMzBcMzM1XDM0MFwyMDNdb3pcMWt+XDIxMVwyMDRcMzQ3XDM1NVwzNTdcMlwzMDRcMzExXDMxNF8iIFwKKyAgInF8XDIwM11velwxXDMzNFwzNDJcMzQ0XDIwMlwzNzZcMzc3XDM3NFwxQlwzMTRcMzQ3XDIwM1wyNVwyNzRcMzQ0XDVcMCIgXAorICAiXDMwMVwzNTBcMjMzXDM0NVwzNjRcMzMzXDM2NFwzNzFcMjYwXDM1M1wzNjYoXDMwN1wzNTBcMjAzXDI1XDI3NFwzNDQiIFwKKyAgIlw0XDBcMjc2XDM0NVwzNjdcMzc1XDM3N1wzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDNcMzM1IiBcCisgICJcMzY2XDM3M1wyMDRcMjVcMjc0XDM0NFwzXDMwMlwzNTdcMzY3XDMzNVwzNjZcMzczXDIwNlwzNDBcMzYzXDIwNFwyNSIgXAorICAiXDI3NFwzNDRcMVwzNTZcMzczXDM3NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMDIiIFwKKyAgIlwzNTdcMzY3XDIwM1wzMzVcMzY2XDM3M1wyXDMwMlwzNTdcMzY3XDBcMzA0XDM1MlwyMDNcMjVcMjc0XDM0NFwxXDIwNyIgXAorICAiXDM0MVwzNjRcMjAyXDM3NlwzNzdcMzc0XDEsXDMxMVwzNTJcMjAzXDI1XDI3NFwzNDRcNVwwXDMwMlwzNTFcMjM2XDM0NyIgXAorICAiXDM2NlwzMzJcMzYzXDM3MFwyNTZcMzUwXDM2NCNcMzA0XDM0NlwyMDNcMjVcMjc0XDM0NFw1XDBcMzAyXDM1MVwzNzAiIFwKKyAgIlwzNzZcMzc3XDM3NlwzNzdcMzc0XDM3MFwzNzZcMzc3XDBcMjc2XDM0NVwyMDNcMjVcMjc0XDM0NFwxd1wzMzNcMzU2IiBcCisgICJcMjA0XDMzNVwzNjZcMzczXDFCXDMxNFwzNDdcMjAzXDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMDJcMzc2XDM3NyIgXAorICAiXDM3NFwxXDBcMjc2XDM0NVwyMDNcMjVcMjc0XDM0NFwybVwzMzJcMzYxXDMzNFwzNjVcMzcyXDIwM1wzMzVcMzY2XDM3MyIgXAorICAiXDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NlwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDVcMFwyNzZcMzQ1XDIwNlwzNDBcMzYzXDMyM1wzNjRcMzY3XDI3M1wzNTRcMzcxMVwzMTNcMzU0IiBcCisgICJcMjA0XDI1XDI3NFwzNDRcMVwzMzVcMzY2XDM3M1wyMDJcMzc2XDM3N1wzNzRcMSxcMzExXDM1MlwyMDNcMjVcMjc0XDM0NCIgXAorICAiXDJMXDMyMlwzNTZcMzMyXDM2M1wzNzBcMjAzXDMzNVwzNjZcMzczXDFuXDMzM1wzNjJcMjAzXDI1XDI3NFwzNDRcMWsiIFwKKyAgIlwzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyMjZcMzc2XDM3N1wzNzRcMVwzMjRcMzMxXDMzM1wyMDNdb3pcMmN1XDIwMFwzNTMiIFwKKyAgIlwzNjBcMzYzXDIwM1wzNzZcMzc3XDM3NFwxXDMwN1wzMTVcMzE3XDIwM11velw0YXN+XDM3MlwzNzRcMzcxXDM3NlwzNzciIFwKKyAgIlwzNzRcMzA2XDMxNFwzMTZcMjAzXW96XDFcMjAyXDIyMVwyMjdcMjA1XDM3NlwzNzdcMzc0XDFoelwyMDVcMjAzXW96IiBcCisgICJcM1wzNDFcMzQ2XDM1MVwzNzZcMzc3XDM3NFwzNDdcMzU1XDM1N1wyMDNdb3pcMl5we1wzMzVcMzQzXDM0NVwyMDNcMzc2IiBcCisgICJcMzc3XDM3NFwxXDMzM1wzNDBcMzQzXDIwNF1velwzXDM0N1wzNTVcMzU3XDM3NlwzNzdcMzc0XDMzMFwzMzVcMzQwXDIwMyIgXAorICAiXW96XDFtXDIwMFwyMTNcMjA1XDM3NlwzNzdcMzc0XDF+XDIxNVwyMjNcMjAzXW96XDRcMzEzXDMyMFwzMjJcMzc2XDM3NyIgXAorICAiXDM3NFwzNzBcMzc2XDM3N1wzMVwyNzVcMzQ1XDIwM1wyNVwyNzRcMzQ0XDFcMjU2XDM1MFwzNjRcMjAzXDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzMzZcMzY3XDM3NFwwXDI3NlwzNDVcMjAzXDI1XDI3NFwzNDRcM1wyNzRcMzU1XDM3M1wzNzZcMzc3XDM3NCIgXAorICAiXDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwM1wzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjciIFwKKyAgIlwzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzIzXDM2NFwzNjdcMjAyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMW4iIFwKKyAgIlwzMzNcMzYyXDIwM1wyNVwyNzRcMzQ0XDNtXDMzMlwzNjFcMzc2XDM3N1wzNzRcMzU2XDM3M1wzNzRcMjA0XDI1XDI3NCIgXAorICAiXDM0NFwxXDI3NFwzNTVcMzczXDIwM1wzNzZcMzc3XDM3NFwyXDMyM1wzNjRcMzY3XDBcMjc2XDM0NVwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDNcMzE1XDM2MlwzNzNcMzc2XDM3N1wzNzRcMzM1XDM2NlwzNzNcMjAzXDI1XDI3NFwzNDRcMlwwXDI3NlwzNDUiIFwKKyAgIlwzNzBcMzc2XDM3N1wyMDRcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwzXDIzMVwzNDJcMzYyIiBcCisgICJcMzc2XDM3N1wzNzRcMzY2XDM3M1wzNzZcMjA0XDI1XDI3NFwzNDRcMVwzNjZcMzczXDM3NlwyMDRcMzc2XDM3N1wzNzQiIFwKKyAgIlwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDElXDMwNVwzNDdcMjAzIiBcCisgICJcMjVcMjc0XDM0NFwxXDIwN1wzNDFcMzY0XDIwM1wzNzZcMzc3XDM3NFwyXDM2MFwzNzVcMzc2XDBcMzA0XDM1MlwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFcMjMzXDM0NVwzNjRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0IiBcCisgICJcMVwzMjNcMzY0XDM2N1wyMDRcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjdcMzU3IiBcCisgICJcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDIyNlwzNzZcMzc3XDM3NFwxXDMwM1wzMTBcMzEzXDIwM11velwxXDIwNFwyMjNcMjMxXDIwNFwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzcwXDM3MlwzNjdfcXxcMjAzXW96XDNcMzU0XDM2MVwzNjRcMzc2XDM3N1wzNzRcMzA2XDMxNFwzMTYiIFwKKyAgIlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDVcMzc2XDM3N1wzNzRcMW1cMjAwXDIxM1wyMDNdb3pcM1wzNDFcMzQ2XDM1MSIgXAorICAiXDM3NlwzNzdcMzc0XDMyNlwzMzNcMzM1XDIwM11velwxblwyMDFcMjE0XDIwNVwzNzZcMzc3XDM3NFwxbFwxNzdcMjEyIiBcCisgICJcMjAzXW96XDNcMzI3XDMzNFwzMzdcMzc2XDM3N1wzNzRcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTNcMjA1XDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0XDMxNlwzNzZcMzc3XDM3NFwzMzdcMzcwXDM3NVwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDJcMzFcMjc1XDM0NVwzNzBcMzc2XDM3N1wyMDRcMzc2XDM3N1wzNzRcMSIiM1wzMTRcMzU1XDIwMyIgXAorICAiXDI1XDI3NFwzNDRcM1wyMzZcMzQ3XDM2NlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDMiIFwKKyAgIlwzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwMlwzNzZcMzc3XDM3NFwxI1wzMDRcMzQ2IiBcCisgICJcMjAzXDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxXDMzNlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NFwxd1wzMzNcMzU2XDIwM1wyNVwyNzRcMzQ0XDNrXDMyN1wzNTciIFwKKyAgIlwzNzZcMzc3XDM3NFwzMTVcMzYyXDM3M1wyMDNcMjVcMjc0XDM0NFwxXDBcMzAxXDM1MFwyMDVcMzc2XDM3N1wzNzRcMSIgXAorICAiKlwzMTBcMzUxXDIwM1wyNVwyNzRcMzQ0XDNcMjYxXDM1NFwzNjdcMzc2XDM3N1wzNzRcMzE2XDM2M1wzNzRcMjAzXDI1IiBcCisgICJcMjc0XDM0NFwxXDBcMzAxXDM1MFwyMDVcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwzXDIzMSIgXAorICAiXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjA1XDM3NlwzNzdcMzc0XDFNXDMyMyIgXAorICAiXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwxXDMxXDI3NVwzNDVcMjAzXDI1IiBcCisgICJcMjc0XDM0NFwxXDMzNVwzNjZcMzczXDIwNFwzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjAzIiBcCisgICJcMzM0XDM2MFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDQiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyNiIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjc3XDMwNFwzMDZcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1XDM3NlwzNzdcMzc0XDFld1wyMDIiIFwKKyAgIlwyMDNdb3pcM1wzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDUiIFwKKyAgIlwzNzZcMzc3XDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NlwzNzdcMzc0XDMxN1wzMjRcMzI3IiBcCisgICJcMjAzXW96XDFhc35cMjA1b1wyMDJcMjE1XDFhc35cMjAzXW96XDNcMzE3XDMyNFwzMjdcMzc2XDM3N1wzNzRcMzMwXDMzNSIgXAorICAiXDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0IiBcCisgICJcMzE2XDM3NlwzNzdcMzc0XDMzNlwzNjdcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMFwyNzZcMzQ1XDIwNSVcMzA1XDM0NyIgXAorICAiXDFcMFwyNzZcMzQ1XDIwM1wyNVwyNzRcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0IiBcCisgICJcMjVcMjc0XDM0NFwyMDNcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3NyIgXAorICAiXDM3NFwxI1wzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDEiIFwKKyAgIlwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDNrXDMyN1wzNTdcMzc2XDM3N1wzNzRcMzAyXDM1N1wzNjdcMjAzXDI1XDI3NFwzNDRcMVwzMVwyNzVcMzQ1XDIwNSIgXAorICAiJVwzMDVcMzQ3XDFcMFwyNzZcMzQ1XDIwM1wyNVwyNzRcMzQ0XDNcMjM3XDM1MFwzNjdcMzc2XDM3N1wzNzRcMzE2XDM2MyIgXAorICAiXDM3NFwyMDNcMjVcMjc0XDM0NFwxXDBcMzAxXDM1MFwyMDVcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjA1XDM3NlwzNzciIFwKKyAgIlwzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwyMDRcMjVcMjc0IiBcCisgICJcMzQ0XDEjXDMwNFwzNDZcMjA0JVwzMDVcMzQ3XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDF3XDMzM1wzNTZcMjAyIiBcCisgICJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyNlwzNzZcMzc3XDM3NCIgXAorICAiXDFcMjc3XDMwNFwzMDZcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1XDM3NlwzNzdcMzc0XDFld1wyMDJcMjAzXW96XDMiIFwKKyAgIlwzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDVcMzc2XDM3NyIgXAorICAiXDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NlwzNzdcMzc0XDMxN1wzMjRcMzI3XDIxNV1velwzIiBcCisgICJcMzE3XDMyNFwzMjdcMzc2XDM3N1wzNzRcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTNcMjA1XDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0XDMxNlwzNzZcMzc3XDM3NFwzMzZcMzY3XDM3NFwyMTVcMjVcMjc0IiBcCisgICJcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjAzXDM3NlwzNzciIFwKKyAgIlwzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2NyIgXAorICAiXDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0XDM0NFwza1wzMjdcMzU3XDM3NlwzNzdcMzc0IiBcCisgICJcMzAyXDM1N1wzNjdcMjE1XDI1XDI3NFwzNDRcM1wyMzdcMzUwXDM2N1wzNzZcMzc3XDM3NFwzMTZcMzYzXDM3NFwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFcMFwzMDFcMzUwXDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDNcMjMxIiBcCisgICJcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDVcMzc2XDM3N1wzNzRcMU1cMzIzIiBcCisgICJcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDIxNVwyNVwyNzRcMzQ0XDF3XDMzMyIgXAorICAiXDM1NlwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2IiBcCisgICJcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyNlwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjc3XDMwNFwzMDZcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1XDM3NlwzNzdcMzc0XDFld1wyMDJcMjAzIiBcCisgICJdb3pcM1wzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDVcMzc2IiBcCisgICJcMzc3XDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NlwzNzdcMzc0XDMxN1wzMjRcMzI3XDIxNSIgXAorICAiXW96XDNcMzE3XDMyNFwzMjdcMzc2XDM3N1wzNzRcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTNcMjA1XDM3NlwzNzciIFwKKyAgIlwzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0XDMxNlwzNzZcMzc3XDM3NFwzMzZcMzY3XDM3NFwyMTVcMjUiIFwKKyAgIlwyNzRcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjAzXDM3NiIgXAorICAiXDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0IiBcCisgICJcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0XDM0NFwza1wzMjdcMzU3XDM3NiIgXAorICAiXDM3N1wzNzRcMzAyXDM1N1wzNjdcMjE1XDI1XDI3NFwzNDRcM1wyMzdcMzUwXDM2N1wzNzZcMzc3XDM3NFwzMTZcMzYzIiBcCisgICJcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMFwzMDFcMzUwXDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcM1wyMzFcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDVcMzc2XDM3NyIgXAorICAiXDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDIxNVwyNVwyNzQiIFwKKyAgIlwzNDRcMXdcMzMzXDM1NlwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3IiBcCisgICJcMzc0XDIwNFwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMjI2XDM3NlwzNzdcMzc0XDFcMjc3XDMwNFwzMDZcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1XDM3NlwzNzdcMzc0IiBcCisgICJcMWV3XDIwMlwyMDNdb3pcM1wzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxIiBcCisgICJcMjI3XDIwNVwzNzZcMzc3XDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NlwzNzdcMzc0XDMxNyIgXAorICAiXDMyNFwzMjdcMjE1XW96XDNcMzE3XDMyNFwzMjdcMzc2XDM3N1wzNzRcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTMiIFwKKyAgIlwyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0XDMxNlwzNzZcMzc3XDM3NFwzMzZcMzY3IiBcCisgICJcMzc0XDIxNVwyNVwyNzRcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NCIgXAorICAiXDM0NFwyMDNcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSMiIFwKKyAgIlwzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwMyIgXAorICAiXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0XDM0NFwzIiBcCisgICJrXDMyN1wzNTdcMzc2XDM3N1wzNzRcMzAyXDM1N1wzNjdcMjE1XDI1XDI3NFwzNDRcM1wyMzdcMzUwXDM2N1wzNzZcMzc3IiBcCisgICJcMzc0XDMxNlwzNjNcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMFwzMDFcMzUwXDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0IiBcCisgICJcMjAzXDI1XDI3NFwzNDRcM1wyMzFcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NCIgXAorICAiXDIwNVwzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzciIFwKKyAgIlwzNzRcMjE1XDI1XDI3NFwzNDRcMXdcMzMzXDM1NlwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxXDMzNlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyNyIgXAorICAiXDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjI2XDM3NlwzNzdcMzc0XDFcMzAwXDMwNVwzMTBcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1IiBcCisgICJcMzc2XDM3N1wzNzRcMWJ0XDE3N1wyMDNdb3pcM1wzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDMiIFwKKyAgIl1velwxXDIwMlwyMjFcMjI3XDIwNVwzNzZcMzc3XDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NiIgXAorICAiXDM3N1wzNzRcMzE3XDMyNFwzMjdcMjAzXW96XDFwXDIwM1wyMTZcMjExXDMzNVwzNDNcMzQ1XDNcMzY2XDM3MFwzNjQiIFwKKyAgIlwzNzZcMzc3XDM3NFwzMzBcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxIiBcCisgICJcMjI3XDIwM11velwzXDMwNlwzMTRcMzE2XDM3NlwzNzdcMzc0XDMzNlwzNjdcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMCIgXAorICAiXDI3NlwzNDVcMjExXDMxNFwzNjFcMzcyXDNcMzUwXDM3MVwzNzdcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1IiBcCisgICJcMjc0XDM0NFwyMDNcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxI1wzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwIiBcCisgICJcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0XDM0NCIgXAorICAiXDNrXDMyN1wzNTdcMzc2XDM3N1wzNzRcMzAyXDM1N1wzNjdcMjAzXDI1XDI3NFwzNDRcMVwwXDMwMlwzNTFcMjExXDMxNCIgXAorICAiXDM2MVwzNzJcM1wzNTZcMzczXDM3NFwzNzZcMzc3XDM3NFwzMTZcMzYzXDM3NFwyMDNcMjVcMjc0XDM0NFwxXDBcMzAxIiBcCisgICJcMzUwXDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3NyIgXAorICAiXDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDVcMzc2XDM3N1wzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMzAxXDM1NlwzNjZcMjEwXDMxNCIgXAorICAiXDM2MVwzNzJcMVwzMzdcMzcwXDM3NVwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzYiIFwKKyAgIlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2IiBcCisgICJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3NyIgXAorICAiXDM3N1wzNzdcMjI2XDM3NlwzNzdcMzc0XDFcMzE0XDMyMVwzMjRcMjAzXW96XDJsXDE3N1wyMTJcMzcyXDM3NFwzNzEiIFwKKyAgIlwyMDNcMzc2XDM3N1wzNzRcMVwzMzNcMzQwXDM0M1wyMDNdb3pcNF5we1wzNjZcMzczXDM3NlwzNzZcMzc3XDM3NFwzMDYiIFwKKyAgIlwzMTRcMzE2XDIwM11velwxXDIwMlwyMjFcMjI3XDIwNVwzNzZcMzc3XDM3NFwxa35cMjExXDIwM11velwzXDM0MVwzNDYiIFwKKyAgIlwzNTFcMzc2XDM3N1wzNzRcMzIwXDMyNlwzMzBcMjAzXW96XDF0XDIwN1wyMjJcMjEzXDM3NlwzNzdcMzc0XDFcMzMwIiBcCisgICJcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDYiIFwKKyAgIlwzMTRcMzE2XDM3NlwzNzdcMzc0XDMzNlwzNjdcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMFwyNzZcMzQ1XDIxM1wzNzZcMzc3IiBcCisgICJcMzc0XDFcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjAzXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMzM2IiBcCisgICJcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMDNcMjVcMjc0XDM0NFwxXDMxNlwzNjNcMzc0XDIwMiIgXAorICAiXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjA0XDM3NlwzNzdcMzc0IiBcCisgICJcMW5cMzMzXDM2MlwyMDNcMjVcMjc0XDM0NFwza1wzMjdcMzU3XDM3NlwzNzdcMzc0XDMwM1wzNjFcMzcwXDIwM1wyNSIgXAorICAiXDI3NFwzNDRcMVwwXDMwNFwzNTJcMjEzXDM3NlwzNzdcMzc0XDFcMzMyXDM2M1wzNzBcMjAzXDI1XDI3NFwzNDRcMVwwIiBcCisgICJcMjc2XDM0NVwyMDVcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwzXDIzMVwzNDJcMzYyXDM3NiIgXAorICAiXDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMVwzNzBcMzc2XDM3N1wyMDRcMzc2XDM3N1wzNzRcMU0iIFwKKyAgIlwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0IiBcCisgICJcMVwzNTZcMzczXDM3NFwyMTNcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzVcMzY2XDM3MyIgXAorICAiXDIwNFwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjI2XDM3NlwzNzdcMzc0XDJcMzUzXDM2MFwzNjNecHtcMjAzXW96XDVcMjM2XDI0NlwyNTZcMzY2XDM3M1wzNzZcMzc2IiBcCisgICJcMzc3XDM3NFwzNDdcMzU1XDM1N3dcMjEyXDIyNlwyMDNdb3pcMX5cMjE1XDIyM1wyMDJcMzc2XDM3N1wzNzRcMVwzMDYiIFwKKyAgIlwzMTRcMzE2XDIwM11velwxXDIwMlwyMjFcMjI3XDIwNFwzNzZcMzc3XDM3NFwyXDMzNVwzNDNcMzQ1XnB7XDIwM11vIiBcCisgICJ6XDNcMzUxXDM1NlwzNjBcMzc2XDM3N1wzNzRcMzM1XDM0M1wzNDVcMjAzXW96XDJidFwxNzdcMzQzXDM1MFwzNTNcMjEyIiBcCisgICJcMzc2XDM3N1wzNzRcMVwzMzBcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxIiBcCisgICJcMjI3XDIwM11velwzXDMwNlwzMTRcMzE2XDM3NlwzNzdcMzc0XDM1NlwzNzNcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMjc0IiBcCisgICJcMzU1XDM3M1wyMTJcMzc2XDM3N1wzNzRcMVwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDNcMzc2XDM3N1wzNzQiIFwKKyAgIlwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwMlwzNzZcMzc3XDM3NFwxI1wzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0IiBcCisgICJcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NCIgXAorICAiXDIwM1wzNzZcMzc3XDM3NFwyXDM2N1wzNzVcMzc3L1wzMTJcMzUzXDIwM1wyNVwyNzRcMzQ0XDNcMjA0XDMzNVwzNjEiIFwKKyAgIlwzNzZcMzc3XDM3NFwzMzRcMzY1XDM3MlwyMDNcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwzMTRcMzYxXDM3MlwyMTJcMzc2IiBcCisgICJcMzc3XDM3NFwxXDM1NlwzNzNcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMjc0XDM1NVwzNzNcMjA0XDM3NlwzNzdcMzc0XDEiIFwKKyAgIklcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFw0XDIzMVwzNDJcMzYyXDM3NlwzNzdcMzc0XDM3MFwzNzZcMzc3XDBcMjc2IiBcCisgICJcMzQ1XDIwM1wyNVwyNzRcMzQ0XDFcMjU3XDM1MVwzNjVcMjA0XDM3NlwzNzdcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDIzM1wzNDUiIFwKKyAgIlwzNjRcMjEzXDM3NlwzNzdcMzc0XDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwyMDdcMzQxXDM2NFwyMDRcMzc2IiBcCisgICJcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyN1wzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjExXDIzMFwyMzZcMjA0XW96XDNjdVwyMDBwXDIwM1wyMTZecHtcMjA0XW96XDFcMjc3XDMwNFwzMDYiIFwKKyAgIlwyMDJcMzc2XDM3N1wzNzRcMVwzMDZcMzE0XDMxNlwyMDNdb3pcMWR2XDIwMVwyMDN+XDIxNVwyMjNcMnZcMjExXDIyNSIgXAorICAiYXN+XDIwM11velwxblwyMDFcMjE0XDIwMlwzNzZcMzc3XDM3NFwyXDM3MVwzNzNcMzcwZHZcMjAxXDIwM11velwyYnQiIFwKKyAgIlwxNzd3XDIxMlwyMjZcMjA1flwyMTVcMjIzXDJcMjAzXDIyMlwyMzBcMzA0XDMxMVwzMTRcMjAyXDM3NlwzNzdcMzc0IiBcCisgICJcMVwzMzBcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdbyIgXAorICAielwxXDMwNlwzMTRcMzE2XDIwMlwzNzZcMzc3XDM3NFwxKFwzMDdcMzUwXDIwM1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1IiBcCisgICIqXDMxMFwzNTFcMjA1LFwzMTFcMzUyXDIiIjFcMzEzXDM1NFwyMDdcMzQxXDM2NFwyMDJcMzc2XDM3N1wzNzRcMVwzNTciIFwKKyAgIlwzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwM1wzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0IiBcCisgICJcMjAyXDM3NlwzNzdcMzc0XDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3NyIgXAorICAiXDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxKlwzMTBcMzUxXDIwMyxcMzExXDM1MlwxXDBcMzAyXDM1MVwyMDQiIFwKKyAgIlwyNVwyNzRcMzQ0XDRcMjc0XDM1NVwzNzNcMzc2XDM3N1wzNzRcMzcwXDM3NlwzNzdcMFwzMDJcMzUxXDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcMlwzMVwyNzVcMzQ1KlwzMTBcMzUxXDIwNSxcMzExXDM1MlwyQlwzMTRcMzQ3XDIzMVwzNDJcMzYyXDIwM1wzNzYiIFwKKyAgIlwzNzdcMzc0XDElXDMwNVwzNDdcMjAzXDI1XDI3NFwzNDRcMlwwXDI3NlwzNDUqXDMxMFwzNTFcMjAzLFwzMTFcMzUyIiBcCisgICJcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMDJcMzc2XDM3N1wzNzRcMS9cMzEyXDM1MyIgXAorICAiXDIwM1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1KlwzMTBcMzUxXDIwMyxcMzExXDM1MlwxXDBcMzAxXDM1MFwyMDNcMjUiIFwKKyAgIlwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDFHXDMxN1wzNTNcMjA0XDI1XDI3NFwzNDRcMShcMzA3IiBcCisgICJcMzUwXDIwNSxcMzExXDM1MlwzIiIxXDMxM1wzNTR3XDMzM1wzNTZcMzcwXDM3NlwzNzdcMjAyXDM3NlwzNzdcMzc0XDEiIFwKKyAgIk1cMzIzXDM1N1wyMDRcMjVcMjc0XDM0NFwxKFwzMDdcMzUwXDIwMyxcMzExXDM1MlwxXDBcMzA0XDM1MlwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyN1wzNzZcMzc3XDM3NFwyXDM0M1wzNTBcMzUzZXdcMjAyXDIxMV1velwyIiBcCisgICJcMTc3XDIxNlwyMjRcMzczXDM3NVwzNzJcMjAyXDM3NlwzNzdcMzc0XDFcMzA2XDMxNFwzMTZcMjE0XW96XDFcMjcwXDMwMCIgXAorICAiXDMxMVwyMDNcMzc2XDM3N1wzNzRcMVwyNTNcMjYzXDI3M1wyMTNdb3pcNF9xfFwzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NCIgXAorICAiXDMzMFwzMzVcMzQwXDIwM11velwxbVwyMDBcMjEzXDIwNVwzNzZcMzc3XDM3NFwxXDIwMlwyMjFcMjI3XDIwM11velwxIiBcCisgICJcMzA2XDMxNFwzMTZcMjAyXDM3NlwzNzdcMzc0XDFcMjMzXDM0NVwzNjRcMjE0XDI1XDI3NFwzNDRcM1wzMDFcMzU2XDM2NiIgXAorICAiXDM3NlwzNzdcMzc0XDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwM1wzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NCIgXAorICAiXDFcMzM2XDM2N1wzNzRcMjAyXDM3NlwzNzdcMzc0XDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NCIgXAorICAiXDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMTNcMjVcMjc0XDM0NFwyLFwzMTFcMzUyXDM3MFwzNzZcMzc3XDIwMiIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjE0XDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDIzM1wzNDVcMzY0XDIxNFwyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjJcMjAyXDM3NlwzNzdcMzc0XDFcMjUwXDM0NyIgXAorICAiXDM3MVwyMTRcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwxXDI3M1wzNTRcMzcxXDIxNFwyNSIgXAorICAiXDI3NFwzNDRcMVwyMzZcMzQ3XDM2NlwyMDJcMzc2XDM3N1wzNzRcMlwzMTNcMzYwXDM3MVwwXDI3NlwzNDVcMjEzXDI1IiBcCisgICJcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyMzBcMzc2XDM3N1wzNzRcMlwzMjVcMzMyXDMzNGd5XDIwNFwyMDciIFwKKyAgIl1velwyeFwyMTNcMjI3XDM1NFwzNjFcMzY0XDIwM1wzNzZcMzc3XDM3NFwxXDMwNlwzMTRcMzE2XDIxM11velwxXDIyNSIgXAorICAiXDIzNVwyNDVcMjA0XDM3NlwzNzdcMzc0XDJcMzcyXDM3NFwzNzF+XDIyMVwyMzVcMjEzXW96XDNcMzMzXDM0MFwzNDMiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNDJcMzQ3XDM1MlwyMDNdb3pcMXRcMjA3XDIyMlwyMDVcMzc2XDM3N1wzNzRcMVwyMTFcMjMwIiBcCisgICJcMjM2XDIwM11velwxXDMxN1wzMjRcMzI3XDIwM1wzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIxM1wyNVwyNzRcMzQ0XDQiIFwKKyAgIlwyMzdcMzUwXDM2N1wzNzZcMzc3XDM3NFwzNjdcMzc1XDM3N1wwXDI3NlwzNDVcMjAyXDI1XDI3NFwzNDRcMVwwXDI3NiIgXAorICAiXDM0NVwyMDNcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzNTdcMzc0XDM3NVwyMDJcMzc2IiBcCisgICJcMzc3XDM3NFwxKFwzMDdcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM1XDM2NlwzNzNcMjAyXDM3NlwzNzdcMzc0XDFcMCIgXAorICAiXDMwMlwzNTFcMjEyXDI1XDI3NFwzNDRcMlwwXDMwMVwzNTBcMzMzXDM2NFwzNzFcMjAzXDM3NlwzNzdcMzc0XDJcMzcwIiBcCisgICJcMzc2XDM3N0dcMzE3XDM1M1wyMTNcMjVcMjc0XDM0NFwxXDI3M1wzNTRcMzcxXDIwM1wzNzZcMzc3XDM3NFwxTVwzMjMiIFwKKyAgIlwzNTdcMjEzXDI1XDI3NFwzNDRcMVwyMzdcMzUwXDM2N1wyMDNcMzc2XDM3N1wzNzRcMWtcMzI3XDM1N1wyMTNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMjMxXDM0MlwzNjJcMjAzXDM3NlwzNzdcMzc0XDF3XDMzM1wzNTZcMjEzXDI1XDI3NFwzNDRcMVwyMDZcMzQwIiBcCisgICJcMzYzXDIwM1wzNzZcMzc3XDM3NFwxXDIwN1wzNDFcMzY0XDIxM1wyNVwyNzRcMzQ0XDFuXDMzM1wzNjJcMjI2XDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMjMxXDM3NlwzNzdcMzc0XDNcMzUxXDM1NlwzNjBcMjMxXDI0MVwyNTFidFwxNzdcMjAzXW96XDNrflwyMTFcMjU3IiBcCisgICJcMjY3XDI3N1wzNzBcMzcyXDM2N1wyMDRcMzc2XDM3N1wzNzRcMVwzMDZcMzE0XDMxNlwyMTFdb3pcM2d5XDIwNFwyNjEiIFwKKyAgIlwyNzFcMzAyXDM3M1wzNzVcMzcyXDIwNVwzNzZcMzc3XDM3NFwzXDM3MVwzNzNcMzcwXDI1MlwyNjJcMjcyZHZcMjAxIiBcCisgICJcMjEwXW96XDJ4XDIxM1wyMjdcMzcyXDM3NFwzNzFcMjAyXDM3NlwzNzdcMzc0XDR9XDIyMFwyMzNdb3pecHtcMjY2XDI3NyIgXAorICAiXDMwN1wyMDVcMzc2XDM3N1wzNzRcNVwzMTFcMzE2XDMyMV9xfF1venFcMjA0XDIxN1wzNzBcMzcyXDM2N1wyMDNcMzc2IiBcCisgICJcMzc3XDM3NFwzXDM3MFwzNzZcMzc3XDIxMVwzNDJcMzY1XDBcMzAxXDM1MFwyMTBcMjVcMjc0XDM0NFwyXDBcMzA0XDM1MiIgXAorICAiXDM1NlwzNzNcMzc0XDIwMlwzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwMlwyNVwyNzRcMzQ0XDFtXDMzMlwzNjFcMjAzIiBcCisgICJcMzc2XDM3N1wzNzRcMW5cMzMzXDM2MlwyMDJcMjVcMjc0XDM0NFwxTFwzMjJcMzU2XDIwM1wzNzZcMzc3XDM3NFwxXDIwNiIgXAorICAiXDM0MFwzNjNcMjAyXDI1XDI3NFwzNDRcMkJcMzE0XDM0N1wzNzBcMzc2XDM3N1wyMDJcMzc2XDM3N1wzNzRcMXdcMzMzIiBcCisgICJcMzU2XDIxMFwyNVwyNzRcMzQ0XDNcMFwyNzZcMzQ1TFwzMjJcMzU2XDMzNlwzNjdcMzc0XDIwNVwzNzZcMzc3XDM3NCIgXAorICAiXDNcMzcwXDM3NlwzNzdcMjA0XDMzNVwzNjFcMFwzMDFcMzUwXDIxMFwyNVwyNzRcMzQ0XDIoXDMwN1wzNTBcMzY2XDM3MyIgXAorICAiXDM3NlwyMDNcMzc2XDM3N1wzNzRcM1wzNzBcMzc2XDM3N1wyMTFcMzQyXDM2NVwwXDMwMVwzNTBcMjEwXDI1XDI3NFwzNDQiIFwKKyAgIlwyI1wzMDRcMzQ2XDM1NlwzNzNcMzc0XDIwNFwzNzZcMzc3XDM3NFwyXDIzM1wzNDVcMzY0XDBcMzAyXDM1MVwyMTBcMjUiIFwKKyAgIlwyNzRcMzQ0XDJcMFwzMDJcMzUxXDMzN1wzNzBcMzc1XDIwNFwzNzZcMzc3XDM3NFwyXDIzN1wzNTBcMzY3I1wzMDRcMzQ2IiBcCisgICJcMjEwXDI1XDI3NFwzNDRcMlwwXDMwMVwzNTBcMzMzXDM2NFwzNzFcMjA0XDM3NlwzNzdcMzc0XDJcMjU3XDM1MVwzNjUiIFwKKyAgIiVcMzA1XDM0N1wyMTBcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwzMTRcMzYxXDM3MlwyMjZcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjMzXDM3NiIgXAorICAiXDM3N1wzNzRcNFwzNjVcMzcyXDM3NVwzMzVcMzQzXDM0NVwzMjVcMzMyXDMzNFwzNDNcMzUwXDM1M1wyMDdcMzc2XDM3NyIgXAorICAiXDM3NFwxXDMwNlwzMTRcMzE2XDIwM11velwxdVwyMTBcMjI0XDIwNFwzMjRcMzMxXDMzM1wyXDMzNVwzNDNcMzQ1XDM3MyIgXAorICAiXDM3NVwzNzJcMjExXDM3NlwzNzdcMzc0XDJcMzcyXDM3NFwzNzFcMzM0XDM0MlwzNDRcMjA2XDMyNFwzMzFcMzMzXDIiIFwKKyAgIlwzMzFcMzM2XDM0MVwzNzJcMzc0XDM3MVwyMDNcMzc2XDM3N1wzNzRcM1wzNzNcMzc1XDM3MlwzMzJcMzM3XDM0MlwzNDMiIFwKKyAgIlwzNTBcMzUzXDIwN1wzNzZcMzc3XDM3NFwzXDM1MVwzNTZcMzYwXDMzMFwzMzVcMzQwXDM2NlwzNzNcMzc2XDIwNlwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzcwXDM3NlwzNzdcMzE2XDM2M1wzNzRcMjA2XDI3M1wzNTRcMzcxXDJcMzAyXDM1N1wzNjdcMzY2IiBcCisgICJcMzczXDM3NlwyMDRcMzc2XDM3N1wzNzRcMlwzMTRcMzYxXDM3MlwzMTVcMzYyXDM3M1wyMDVcMzc2XDM3N1wzNzRcMiIgXAorICAiXDMxNlwzNjNcMzc0XDMxM1wzNjBcMzcxXDIwNVwzNzZcMzc3XDM3NFwzXDMzMlwzNjNcMzcwXDMxMlwzNTdcMzcwXDM3MCIgXAorICAiXDM3NlwzNzdcMjA0XDM3NlwzNzdcMzc0XDFcMzE2XDM2M1wzNzRcMjA2XDI3M1wzNTRcMzcxXDJcMzAyXDM1N1wzNjciIFwKKyAgIlwzNTZcMzczXDM3NFwyMTFcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3N1wzMTRcMzYxXDM3MlwyMDZcMjczXDM1NFwzNzEiIFwKKyAgIlwyXDMwMlwzNTdcMzY3XDM2N1wzNzVcMzc3XDIwNlwzNzZcMzc3XDM3NFwyXDM3MFwzNzZcMzc3XDMxNlwzNjNcMzc0IiBcCisgICJcMjA2XDI3M1wzNTRcMzcxXDJcMzAyXDM1N1wzNjdcMzY2XDM3M1wzNzZcMjA2XDM3NlwzNzdcMzc0XDJcMzcwXDM3NiIgXAorICAiXDM3N1wzMTZcMzYzXDM3NFwyMDZcMjczXDM1NFwzNzFcMlwzMDFcMzU2XDM2NlwzNTdcMzc0XDM3NVwyMDdcMzc2XDM3NyIgXAorICAiXDM3NFwxXDMzMlwzNjNcMzcwXDIwNlwyNzNcMzU0XDM3MVwyXDMwMVwzNTZcMzY2XDM1NlwzNzNcMzc0XDIwN1wzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzMzXDM2NFwzNzFcMjc0XDM1NVwzNzNcMjA1XDI3M1wzNTRcMzcxXDJcMjc0XDM1NVwzNzNcMzUwIiBcCisgICJcMzcxXDM3N1wyMjdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjQ2XDM3NlwzNzdcMzc0XDFcMzA2XDMxNFwzMTZcMjAzXW96XDFcMjAyXDIyMVwyMjciIFwKKyAgIlwzNzdcMzc2XDM3N1wzNzRcMzA2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI0NlwzNzZcMzc3XDM3NFwxXDMwNlwzMTRcMzE2XDIwM11velwxXDIwMiIgXAorICAiXDIyMVwyMjdcMzc3XDM3NlwzNzdcMzc0XDMwNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNDZcMzc2XDM3N1wzNzRcMVwzMDZcMzE0XDMxNlwyMDMiIFwKKyAgIl1velwxXDIwMlwyMjFcMjI3XDM3N1wzNzZcMzc3XDM3NFwzMDZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjQ2XDM3NlwzNzdcMzc0XDFcMzA2XDMxNCIgXAorICAiXDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wzNzdcMzc2XDM3N1wzNzRcMzA2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI0NlwzNzZcMzc3XDM3NCIgXAorICAiXDFcMzE1XDMyMlwzMjVcMjAzXW96XDFcMjExXDIzMFwyMzZcMzc3XDM3NlwzNzdcMzc0XDMwNlwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNDZcMzc2IiBcCisgICJcMzc3XDM3NFwyXDM2MFwzNjZcMzcwaXtcMjA2XDIwMl1velwxXDMwMlwzMDdcMzEyXDM3N1wzNzZcMzc3XDM3NFwzMDYiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyNDdcMzc2XDM3N1wzNzRcM1wzNTdcMzY1XDM2N1wzMTNcMzIwXDMyMlwzMzVcMzQzXDM0NVwzNzdcMzc2IiBcCisgICJcMzc3XDM3NFwzMDdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxIiBcCisgICJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NCIgXAorICAiXDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzciIFwKKyAgIlwzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzYiIFwKKyAgIlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2IiBcCisgICJcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjMyXDM3N1wzNzdcMzc3IikKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvcHNwbGFzaF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvcHNwbGFzaF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNiNjQ3OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9wc3BsYXNoX2dpdC5iYgpAQCAtMCwwICsxLDEyMiBAQAorU1VNTUFSWSA9ICJVc2Vyc3BhY2UgZnJhbWVidWZmZXIgYm9vdCBsb2dvIGJhc2VkIG9uIHVzcGxhc2giCitERVNDUklQVElPTiA9ICJQU3BsYXNoIGlzIGEgdXNlcnNwYWNlIGdyYXBoaWNhbCBib290IHNwbGFzaCBzY3JlZW4gZm9yIG1haW5seSBlbWJlZGRlZCBMaW51eCBkZXZpY2VzIHN1cHBvcnRpbmcgYSAxNmJwcCBvciAzMmJwcCBmcmFtZWJ1ZmZlci4gSXQgaGFzIGZldyBkZXBlbmRlbmNpZXMgKGp1c3QgbGliYyksIHN1cHBvcnRzIGJhc2ljIGltYWdlcyBhbmQgdGV4dCBhbmQgaGFuZGxlcyByb3RhdGlvbi4gSXRzIHZpc3VhbCBsb29rIGlzIGNvbmZpZ3VyYWJsZSBieSBiYXNpYyBzb3VyY2UgY2hhbmdlcy4gQWxzbyBpbmNsdWRlZCBpcyBhICdjbGllbnQnIGNvbW1hbmQgdXRpbGl0eSBmb3Igc2VuZGluZyBpbmZvcm1hdGlvbiB0byBwc3BsYXNoIHN1Y2ggYXMgYm9vdCBwcm9ncmVzcyBpbmZvcm1hdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wc3BsYXNoIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9wc3BsYXNoLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xNjttZDU9ODQwZmIyMzU2YjEwYTg1YmVkNzhkZDA5ZGM3NzQ1YzYiCisKK1NSQ1JFViA9ICIxNGM4ZjdiNzA1ZGU5NDRiZWI0ZGUzZjI5NjUwNmQ4MDg3MWU0MTBmIgorUFYgPSAiMC4xK2dpdCR7U1JDUFZ9IgorUFIgPSAicjE1IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBzcGxhc2gtZmItQ29udmVydC1wc3BsYXNoX2ZiX3Bsb3RfcGl4ZWwtdG8tYS1zdGF0aWMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHNwbGFzaC1pbml0IFwKKyAgICAgICAgICAgJHtTUExBU0hfSU1BR0VTfSIKKworU1BMQVNIX0lNQUdFUyA9ICJmaWxlOi8vcHNwbGFzaC1wb2t5LWltZy5oO291dHN1ZmZpeD1kZWZhdWx0IgorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgb2xkcGtncyA9IGQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpLnNwbGl0KCkKKyAgICBzcGxhc2hmaWxlcyA9IGQuZ2V0VmFyKCdTUExBU0hfSU1BR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHBrZ3MgPSBbXQorICAgIGxvY2FscGF0aHMgPSBbXQorICAgIGhhc3BuZyA9IEZhbHNlCisgICAgZm9yIHVyaSBpbiBzcGxhc2hmaWxlczoKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbdXJpXSwgZCkKKyAgICAgICAgZmxvY2FsID0gb3MucGF0aC5iYXNlbmFtZShmZXRjaGVyLmxvY2FscGF0aCh1cmkpKQorICAgICAgICBmYmFzZSA9IG9zLnBhdGguc3BsaXRleHQoZmxvY2FsKVswXQorICAgICAgICBvdXRzdWZmaXggPSBmZXRjaGVyLnVkW3VyaV0ucGFybS5nZXQoIm91dHN1ZmZpeCIpCisgICAgICAgIGlmIG5vdCBvdXRzdWZmaXg6CisgICAgICAgICAgICBpZiBmYmFzZS5zdGFydHN3aXRoKCJwc3BsYXNoLSIpOgorICAgICAgICAgICAgICAgIG91dHN1ZmZpeCA9IGZiYXNlWzg6XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRzdWZmaXggPSBmYmFzZQorICAgICAgICAgICAgaWYgb3V0c3VmZml4LmVuZHN3aXRoKCctaW1nJyk6CisgICAgICAgICAgICAgICAgb3V0c3VmZml4ID0gb3V0c3VmZml4WzotNF0KKyAgICAgICAgb3V0bmFtZSA9ICJwc3BsYXNoLSVzIiAlIG91dHN1ZmZpeAorICAgICAgICBpZiBvdXRuYW1lID09ICcnIG9yIG91dG5hbWUgaW4gb2xkcGtnczoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJUaGUgb3V0cHV0IG5hbWUgJyVzJyBkZXJpdmVkIGZyb20gdGhlIFVSSSAlcyBpcyBub3QgdmFsaWQsIHBsZWFzZSBzcGVjaWZ5IHRoZSBvdXRzdWZmaXggcGFyYW1ldGVyIiAlIChvdXRuYW1lLCB1cmkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtncy5hcHBlbmQob3V0bmFtZSkKKyAgICAgICAgaWYgZmxvY2FsLmVuZHN3aXRoKCIucG5nIik6CisgICAgICAgICAgICBoYXNwbmcgPSBUcnVlCisgICAgICAgIGxvY2FscGF0aHMuYXBwZW5kKGZsb2NhbCkKKworICAgICMgU2V0IHRoZXNlIHNvIHRoYXQgd2UgaGF2ZSBsZXNzIHdvcmsgdG8gZG8gaW4gZG9fY29tcGlsZSBhbmQgZG9faW5zdGFsbF9hcHBlbmQKKyAgICBkLnNldFZhcigiU1BMQVNIX0lOU1RBTEwiLCAiICIuam9pbihwa2dzKSkKKyAgICBkLnNldFZhcigiU1BMQVNIX0xPQ0FMUEFUSFMiLCAiICIuam9pbihsb2NhbHBhdGhzKSkKKworICAgIGlmIGhhc3BuZzoKKyAgICAgICAgZC5hcHBlbmRWYXIoIkRFUEVORFMiLCAiIGdkay1waXhidWYtbmF0aXZlIikKKworICAgIGQucHJlcGVuZFZhcigiUEFDS0FHRVMiLCAiJXMgIiAlICgiICIuam9pbihwa2dzKSkpCisgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAnJworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkgb3IgJycKKyAgICBmb3IgcCBpbiBwa2dzOgorICAgICAgICBlcCA9ICclcyVzJyAlIChtbHByZWZpeCwgcCkKKyAgICAgICAgZXBzcGxhc2ggPSAnJXMlcycgJSAobWxwcmVmaXgsICdwc3BsYXNoJykKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzIiAlIGVwLCAiJHtiaW5kaXJ9LyVzIiAlIHApCisgICAgICAgIGQuc2V0VmFyKCJBTFRFUk5BVElWRV8lcyIgJSBlcCwgJ3BzcGxhc2gnKQorICAgICAgICBkLnNldFZhckZsYWcoIkFMVEVSTkFUSVZFX1RBUkdFVF8lcyIgJSBlcCwgJ3BzcGxhc2gnLCAnJHtiaW5kaXJ9LyVzJyAlIHApCisgICAgICAgIGQuYXBwZW5kVmFyKCJSREVQRU5EU18lcyIgJSBlcCwgIiAlcyIgJSBwbikKKyAgICAgICAgaWYgcCA9PSAicHNwbGFzaC1kZWZhdWx0IjoKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSUkVDT01NRU5EU18lcyIgJSBwbiwgIiAlcyIgJSBlcCkKK30KKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwZGF0ZS1yYy5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3BzcGxhc2hdID0gIiR7YmluZGlyfS9wc3BsYXNoIgorCitweXRob24gZG9fY29tcGlsZSAoKSB7CisgICAgaW1wb3J0IHNodXRpbAorCisgICAgIyBCdWlsZCBhIHNlcGFyYXRlIGV4ZWN1dGFibGUgZm9yIGVhY2ggc3BsYXNoIGltYWdlCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBjb252ZXJ0c2NyaXB0ID0gIiVzL21ha2UtaW1hZ2UtaGVhZGVyLnNoIiAlIGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICBkZXN0ZmlsZSA9ICIlcy9wc3BsYXNoLXBva3ktaW1nLmgiICUgZC5nZXRWYXIoJ1MnLCBUcnVlKQorICAgIGxvY2FsZmlsZXMgPSBkLmdldFZhcignU1BMQVNIX0xPQ0FMUEFUSFMnLCBUcnVlKS5zcGxpdCgpCisgICAgb3V0cHV0ZmlsZXMgPSBkLmdldFZhcignU1BMQVNIX0lOU1RBTEwnLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIGxvY2FsZmlsZSwgb3V0cHV0ZmlsZSBpbiB6aXAobG9jYWxmaWxlcywgb3V0cHV0ZmlsZXMpOgorICAgICAgICBpZiBsb2NhbGZpbGUuZW5kc3dpdGgoIi5wbmciKToKKyAgICAgICAgICAgIG91dHAgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoJyVzICVzIFBPS1knICUgKGNvbnZlcnRzY3JpcHQsIG9zLnBhdGguam9pbih3b3JrZGlyLCBsb2NhbGZpbGUpKSkKKyAgICAgICAgICAgIHByaW50KG91dHBbMV0pCisgICAgICAgICAgICBmYmFzZSA9IG9zLnBhdGguc3BsaXRleHQobG9jYWxmaWxlKVswXQorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKCIlcy1pbWcuaCIgJSBmYmFzZSwgZGVzdGZpbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUob3MucGF0aC5qb2luKHdvcmtkaXIsIGxvY2FsZmlsZSksIGRlc3RmaWxlKQorICAgICAgICAjIEZvciBzb21lIHJlYXNvbiBqdXN0IHVwZGF0aW5nIHRoZSBoZWFkZXIgaXMgbm90IGVub3VnaCwgd2UgaGF2ZSB0byB0b3VjaCB0aGUgLmMKKyAgICAgICAgIyBmaWxlIGluIG9yZGVyIHRvIGdldCBpdCB0byByZWJ1aWxkCisgICAgICAgIG9zLnV0aW1lKCIlcy9wc3BsYXNoLmMiICUgZC5nZXRWYXIoJ1MnLCBUcnVlKSwgTm9uZSkKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJvZV9ydW5tYWtlIiwgZCkKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKCJwc3BsYXNoIiwgb3V0cHV0ZmlsZSkKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9L21udC8ucHNwbGFzaC8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wc3BsYXNoLWluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3BzcGxhc2guc2gKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlmb3IgaSBpbiAke1NQTEFTSF9JTlNUQUxMfSA7IGRvCisJCWluc3RhbGwgLW0gMDc1NSAkaSAke0R9JHtiaW5kaXJ9LyRpCisJZG9uZQorCXJtIC1mICR7RH0ke2JpbmRpcn0vcHNwbGFzaAorfQorCitGSUxFU18ke1BOfSArPSAiL21udC8ucHNwbGFzaCIKKworSU5JVFNDUklQVF9OQU1FID0gInBzcGxhc2guc2giCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAwIFMgLiBzdG9wIDIwIDAgMSA2IC4iCisKK0RFUEVORFNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZScsJycsZCl9IgorcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCQlPUFRTPSItLXJvb3Q9JEQiCisJCWZpCisJCXN5c3RlbWN0bCAkT1BUUyBtYXNrIHBzcGxhc2guc2VydmljZQorCWZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL2ZpbGVzL2NvbmZpZy1kaXJlbnQtc3ltYm9scy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvZmlsZXMvY29uZmlnLWRpcmVudC1zeW1ib2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZmYwM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL2ZpbGVzL2NvbmZpZy1kaXJlbnQtc3ltYm9scy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGaXggdGhlIG5hbWVzIG9mIHRoZSBTVFJVQ1RfRElSRU5UX0Qgc3ltYm9scyB0byBtYXRjaCB0aGUgbmFtZXMgdXNlZCBieSBib3RoCitjb25maWd1cmUgYW5kIHRoZSBzb3VyY2UgY29kZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgKGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctcmVhZGxpbmUvMjAxNC0wNS9tc2cwMDAwOC5odG1sKQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSBlNDg2NTY4MTE1NTA3NzQ4OTJmZDRlMGY0YjNjN2Q0MTg0MjJkYTUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMjcgTWF5IDIwMTQgMjI6MzI6MzEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlnLmguaW46IGZpeCBuYW1lcyBvZiBTVFJVQ1RfRElSRU5UX0Qgc3ltYm9scworCistLS0KKyBjb25maWcuaC5pbiB8ICAgIDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWcuaC5pbiBiL2NvbmZpZy5oLmluCitpbmRleCBhNjdlNDNlLi5hNDJhY2M1IDEwMDY0NAorLS0tIGEvY29uZmlnLmguaW4KKysrKyBiL2NvbmZpZy5oLmluCitAQCAtMjQ0LDkgKzI0NCw5IEBACisgCisgI3VuZGVmIEhBVkVfR0VUUFdfREVDTFMKKyAKKy0jdW5kZWYgU1RSVUNUX0RJUkVOVF9IQVNfRF9JTk8KKysjdW5kZWYgSEFWRV9TVFJVQ1RfRElSRU5UX0RfSU5PCisgCistI3VuZGVmIFNUUlVDVF9ESVJFTlRfSEFTX0RfRklMRU5PCisrI3VuZGVmIEhBVkVfU1RSVUNUX0RJUkVOVF9EX0ZJTEVOTworIAorICN1bmRlZiBIQVZFX0JTRF9TSUdOQUxTCisgCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvZmlsZXMvbm9ycGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvZmlsZXMvbm9ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDcxNTgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9maWxlcy9ub3JwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1RoaXMgc3VwcG9ydCBzY3JpcHQgZW5kcyB1cCBoYXJkY29kaW5nIHVubmVjZXNzYXJ5IHJwYXRocyBpbnRvIHRoZSBsaWJyYXJpZXMuIFdlCit3aWxsIHNlYXJjaCAkbGliZGlyIGF1dG9tYXRpY2FsbHkgc28gdGhpcyBpcyBqdXN0IHdhc3RlcyBzcGFjZS4gVGhlcmUgbWF5IGJlIHNvbWUKK2Nhc2VzIHRoaXMgaXMgbmVjZXNzYXJ5IGJ1dCBvdXIgdXNlIGNhc2VzIGFyZW4ndCBvbmUgb2YgdGhlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1JQIDIwMTIvMi8yMworCitJbmRleDogcmVhZGxpbmUtNi4yL3N1cHBvcnQvc2hvYmotY29uZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJlYWRsaW5lLTYuMi5vcmlnL3N1cHBvcnQvc2hvYmotY29uZgkyMDEyLTAyLTIzIDExOjA2OjM3LjE5MzE3OTM3OSArMDAwMAorKysrIHJlYWRsaW5lLTYuMi9zdXBwb3J0L3Nob2JqLWNvbmYJMjAxMi0wMi0yMyAxMTowNjo1MC4wNDkxNzg5MTggKzAwMDAKK0BAIC0xMTQsNyArMTE0LDcgQEAKKyAJU0hPQkpfTEQ9JyR7Q0N9JworIAlTSE9CSl9MREZMQUdTPSctc2hhcmVkIC1XbCwtc29uYW1lLCRAJworIAorLQlTSExJQl9YTERGTEFHUz0nLVdsLC1ycGF0aCwkKGxpYmRpcikgLVdsLC1zb25hbWUsYGJhc2VuYW1lICRAICQoU0hMSUJfTUlOT1IpYCcKKysJU0hMSUJfWExERkxBR1M9Jy1XbCwtc29uYW1lLGBiYXNlbmFtZSAkQCAkKFNITElCX01JTk9SKWAnCisgCVNITElCX0xJQlZFUlNJT049JyQoU0hMSUJfTElCU1VGRikuJChTSExJQl9NQUpPUikkKFNITElCX01JTk9SKScKKyAJOzsKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNS4yL2NvbmZpZ3VyZS1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTUuMi9jb25maWd1cmUtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNjBhOTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTUuMi9jb25maWd1cmUtZml4LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXaXRob3V0IHRoaXMgaXQgZmFpbHMgdG8gbGluayBhZ2FpbnN0IGxpYnRlcm1jYXAgY2F1c2luZyB2YXJpb3VzIG1pc3Npbmcgc3ltYm9scyAKK2lzc3Vlcy4KKworUlAgLSA4LzEwLzA4CisKK0luZGV4OiByZWFkbGluZS01LjIvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcmVhZGxpbmUtNS4yLm9yaWcvY29uZmlndXJlLmluCTIwMDgtMTAtMDggMDk6NTg6NTIuMDAwMDAwMDAwICswMTAwCisrKysgcmVhZGxpbmUtNS4yL2NvbmZpZ3VyZS5pbgkyMDA4LTEwLTA4IDA5OjU5OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTIxMSwxMCArMjExLDEwIEBACisgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoY29uZmlndXJhdGlvbiBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcykKKyAgICAgICAgIGV2YWwgYFRFUk1DQVBfTElCPSRURVJNQ0FQX0xJQiAke0NPTkZJR19TSEVMTC0vYmluL3NofSAke3NyY2Rpcn0vc3VwcG9ydC9zaG9iai1jb25mIC1DICIke0NDfSIgLWMgJHtob3N0X2NwdX0gLW8gJHtob3N0X29zfSAtdiAke2hvc3RfdmVuZG9yfWAKKyAKKy0jCWNhc2UgIiRTSExJQl9MSUJTIiBpbgorLSMJKmN1cnNlcyp8KnRlcm1jYXAqfCp0ZXJtbGliKikJOzsKKy0jCSopCQkJU0hMSUJfTElCUz0iJFNITElCX0xJQlMgJFRFUk1DQVBfTElCIiA7OworLSMJZXNhYworKwljYXNlICIkU0hMSUJfTElCUyIgaW4KKysJKmN1cnNlcyp8KnRlcm1jYXAqfCp0ZXJtbGliKikJOzsKKysJKikJCQlTSExJQl9MSUJTPSIkU0hMSUJfTElCUyAkVEVSTUNBUF9MSUIiIDs7CisrCWVzYWMKKyAJCisgICAgICAgICBBQ19TVUJTVChTSE9CSl9DQykKKyAgICAgICAgIEFDX1NVQlNUKFNIT0JKX0NGTEFHUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNS4yL2ZpeC1yZWR1bmRhbnQtcnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTUuMi9maXgtcmVkdW5kYW50LXJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNjZiNDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTUuMi9maXgtcmVkdW5kYW50LXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1RoaXMgc3VwcG9ydCBzY3JpcHQgZW5kcyB1cCBoYXJkY29kaW5nIHVubmVjZXNzYXJ5IHJwYXRocyBpbnRvIHRoZSBsaWJyYXJpZXMuIFdlCit3aWxsIHNlYXJjaCAkbGliZGlyIGF1dG9tYXRpY2FsbHkgc28gdGhpcyBpcyBqdXN0IHdhc3RlcyBzcGFjZS4gVGhlcmUgbWF5IGJlIHNvbWUKK2Nhc2VzIHRoaXMgaXMgbmVjZXNzYXJ5IGJ1dCBvdXIgdXNlIGNhc2VzIGFyZW4ndCBvbmUgb2YgdGhlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHJlYWRsaW5lLTUuMi9zdXBwb3J0L3Nob2JqLWNvbmYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSByZWFkbGluZS01LjIub3JpZy9zdXBwb3J0L3Nob2JqLWNvbmYKKysrKyByZWFkbGluZS01LjIvc3VwcG9ydC9zaG9iai1jb25mCitAQCAtMTEwLDcgKzExMCw3IEBAIGxpbnV4Ki0qfGdudSotKnxrKmJzZCotZ251LSopCisgCVNIT0JKX0xEPScke0NDfScKKyAJU0hPQkpfTERGTEFHUz0nLXNoYXJlZCAtV2wsLXNvbmFtZSwkQCcKKyAKKy0JU0hMSUJfWExERkxBR1M9Jy1XbCwtcnBhdGgsJChsaWJkaXIpIC1XbCwtc29uYW1lLGBiYXNlbmFtZSAkQCAkKFNITElCX01JTk9SKWAnCisrCVNITElCX1hMREZMQUdTPSctV2wsLXNvbmFtZSxgYmFzZW5hbWUgJEAgJChTSExJQl9NSU5PUilgJworIAlTSExJQl9MSUJWRVJTSU9OPSckKFNITElCX0xJQlNVRkYpLiQoU0hMSUJfTUFKT1IpJChTSExJQl9NSU5PUiknCisgCTs7CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9jb25maWd1cmUtZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS02LjMvY29uZmlndXJlLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjMxMDRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS02LjMvY29uZmlndXJlLWZpeC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2l0aG91dCB0aGlzIGl0IGZhaWxzIHRvIGxpbmsgYWdhaW5zdCBsaWJ0ZXJtY2FwIGNhdXNpbmcgdmFyaW91cyBtaXNzaW5nCitzeW1ib2xzIGlzc3Vlcy4KKworUlAgLSA4LzEwLzA4CisKK1N1cHBvcnQgNi4zIHdoaWNoIHVzZXMgY29uZmlndXJlLmFjIHJhdGhlciB0aGFuIGNvbmZpZ3VyZS5pbi4KK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBjZWE4ZjkxLi45MDc1YjhmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yMTgsMTAgKzIxOCwxMCBAQCBpZiB0ZXN0IC1mICR7c3JjZGlyfS9zdXBwb3J0L3Nob2JqLWNvbmY7IHRoZW4KKyAgICAgICAgIEFDX01TR19DSEVDS0lORyhjb25maWd1cmF0aW9uIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzKQorICAgICAgICAgZXZhbCBgVEVSTUNBUF9MSUI9JFRFUk1DQVBfTElCICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICR7c3JjZGlyfS9zdXBwb3J0L3Nob2JqLWNvbmYgLUMgIiR7Q0N9IiAtYyAke2hvc3RfY3B1fSAtbyAke2hvc3Rfb3N9IC12ICR7aG9zdF92ZW5kb3J9YAorIAorLSMJY2FzZSAiJFNITElCX0xJQlMiIGluCistIwkqY3Vyc2VzKnwqdGVybWNhcCp8KnRlcm1saWIqKQk7OworLSMJKikJCQlTSExJQl9MSUJTPSIkU0hMSUJfTElCUyAkVEVSTUNBUF9MSUIiIDs7CistIwllc2FjCisrCWNhc2UgIiRTSExJQl9MSUJTIiBpbgorKwkqY3Vyc2VzKnwqdGVybWNhcCp8KnRlcm1saWIqKQk7OworKwkqKQkJCVNITElCX0xJQlM9IiRTSExJQl9MSUJTICRURVJNQ0FQX0xJQiIgOzsKKysJZXNhYworIAkKKyAgICAgICAgIEFDX1NVQlNUKFNIT0JKX0NDKQorICAgICAgICAgQUNfU1VCU1QoU0hPQkpfQ0ZMQUdTKQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNi4zL3JlYWRsaW5lLWRpc3BhdGNoLW11bHRpa2V5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS02LjMvcmVhZGxpbmUtZGlzcGF0Y2gtbXVsdGlrZXkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRkMWFjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNi4zL3JlYWRsaW5lLWRpc3BhdGNoLW11bHRpa2V5LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gOGVmODUyYTViZTcyYzc1ZTE3ZjI1MTBiZWE1MjQ1NWY4MDliNTZjZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoZXQgUmFtZXkgPGNoZXQucmFtZXlAY2FzZS5lZHU+CitEYXRlOiBGcmksIDI4IE1hciAyMDE0IDE0OjA3OjQyIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMTBdIFJlYWRsaW5lLTYuMyBwYXRjaCAyCisKK0ZpeGVzIG11bHRpLWtleSBpc3N1ZSBpZGVudGlmaWVkIGluIHRoaXMgdGhyZWFkOgoraHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1yZWFkbGluZS8yMDE0LTAzL21zZzAwMDEwLmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CistLS0KKyByZWFkbGluZS5jIHwgMyArKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3JlYWRsaW5lLmMgYi9yZWFkbGluZS5jCitpbmRleCBlYjRlYWUzLi5hYmIyOWEwIDEwMDY0NAorLS0tIGEvcmVhZGxpbmUuYworKysrIGIvcmVhZGxpbmUuYworQEAgLTc0NCw3ICs3NDQsOCBAQCBfcmxfZGlzcGF0Y2hfY2FsbGJhY2sgKGN4dCkKKyAgICAgciA9IF9ybF9zdWJzZXFfcmVzdWx0IChyLCBjeHQtPm9sZG1hcCwgY3h0LT5va2V5LCAoY3h0LT5mbGFncyAmIEtTRVFfU1VCU0VRKSk7CisgCisgICBSTF9DSEVDS19TSUdOQUxTICgpOworLSAgaWYgKHIgPT0gMCkJCQkvKiBzdWNjZXNzISAqLworKyAgLyogV2Ugb25seSB0cmVhdCB2YWx1ZXMgPCAwIHNwZWNpYWxseSB0byBzaW11bGF0ZSByZWN1cnNpb24uICovCisrICBpZiAociA+PSAwIHx8IChyID09IC0xICYmIChjeHQtPmZsYWdzICYgS1NFUV9TVUJTRVEpID09IDApKQkvKiBzdWNjZXNzISBvciBmYWlsdXJlISAqLworICAgICB7CisgICAgICAgX3JsX2tleXNlcV9jaGFpbl9kaXNwb3NlICgpOworICAgICAgIFJMX1VOU0VUU1RBVEUgKFJMX1NUQVRFX01VTFRJS0VZKTsKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9yZWFkbGluZTYzLTAwMyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNi4zL3JlYWRsaW5lNjMtMDAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YTlkODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9yZWFkbGluZTYzLTAwMwpAQCAtMCwwICsxLDQzIEBACityZWFkbGluZTogU2VjdXJpdHkgQWR2aXNvcnkgLSByZWFkbGluZSAtIENWRS0yMDE0LTI1MjQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDx5dWUudGFvQHdpbmRyaXZlci5jb20+CisKKwkJCSAgIFJFQURMSU5FIFBBVENIIFJFUE9SVAorCQkJICAgPT09PT09PT09PT09PT09PT09PT09CisKK1JlYWRsaW5lLVJlbGVhc2U6IDYuMworUGF0Y2gtSUQ6IHJlYWRsaW5lNjMtMDAzCisKK0J1Zy1SZXBvcnRlZC1ieToKK0J1Zy1SZWZlcmVuY2UtSUQ6CitCdWctUmVmZXJlbmNlLVVSTDoKKworQnVnLURlc2NyaXB0aW9uOgorCitUaGVyZSBhcmUgZGVidWdnaW5nIGZ1bmN0aW9ucyBpbiB0aGUgcmVhZGxpbmUgcmVsZWFzZSB0aGF0IGFyZSB0aGVvcmV0aWNhbGx5CitleHBsb2l0YWJsZSBhcyBzZWN1cml0eSBwcm9ibGVtcy4gIFRoZXkgYXJlIG5vdCBwdWJsaWMgZnVuY3Rpb25zLCBidXQgaGF2ZQorZ2xvYmFsIGxpbmthZ2UuCisKK1BhdGNoIChhcHBseSB3aXRoIGBwYXRjaCAtcDAnKToKKworKioqIC4uL3JlYWRsaW5lLTYuMy91dGlsLmMJMjAxMy0wOS0wMiAxMzozNjoxMi4wMDAwMDAwMDAgLTA0MDAKKy0tLSB1dGlsLmMJMjAxNC0wMy0yMCAxMDoyNTo1My4wMDAwMDAwMDAgLTA0MDAKKyoqKioqKioqKioqKioqKgorKioqIDQ3Nyw0ODAgKioqKgorLS0tIDQ3OSw0ODMgLS0tLQorICB9CisgIAorKyAjaWYgZGVmaW5lZCAoREVCVUcpCisgICNpZiBkZWZpbmVkIChVU0VfVkFSQVJHUykKKyAgc3RhdGljIEZJTEUgKl9ybF90cmFjZWZwOworKioqKioqKioqKioqKioqCisqKiogNTM5LDU0MiAqKioqCistLS0gNTQyLDU0NiAtLS0tCisgIH0KKyAgI2VuZGlmCisrICNlbmRpZiAvKiBERUJVRyAqLworICAKKyAgCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y2NjJjMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUuaW5jCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgZWRpdGluZyB0eXBlZCBjb21tYW5kIGxpbmVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSBSZWFkbGluZSBsaWJyYXJ5IHByb3ZpZGVzIGEgc2V0IG9mIGZ1bmN0aW9ucyBmb3IgdXNlIGJ5IGFwcGxpY2F0aW9ucyB0aGF0IGFsbG93IHVzZXJzIHRvIGVkaXQgXAorY29tbWFuZCBsaW5lcyBhcyB0aGV5IGFyZSB0eXBlZCBpbi4gQm90aCBFbWFjcyBhbmQgdmkgZWRpdGluZyBtb2RlcyBhcmUgYXZhaWxhYmxlLiBUaGUgUmVhZGxpbmUgbGlicmFyeSBpbmNsdWRlcyAgXAorYWRkaXRpb25hbCBmdW5jdGlvbnMgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIHByZXZpb3VzbHktZW50ZXJlZCBjb21tYW5kIGxpbmVzLCB0byByZWNhbGwgYW5kIHBlcmhhcHMgcmVlZGl0IHRob3NlICAgXAorbGluZXMsIGFuZCBwZXJmb3JtIGNzaC1saWtlIGhpc3RvcnkgZXhwYW5zaW9uIG9uIHByZXZpb3VzIGNvbW1hbmRzLiIKK1NFQ1RJT04gPSAibGlicyIKKworIyBHUEx2MisgKDwgNi4wKSwgR1BMdjMrICg+PSA2LjApCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitERVBFTkRTICs9ICJuY3Vyc2VzIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vcmVhZGxpbmUvJHtCUE59LSR7UFZ9LnRhci5nejtuYW1lPWFyY2hpdmUgXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWctZGlyZW50LXN5bWJvbHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9ycGF0aC5wYXRjaCIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWV4Y2x1ZGU9YXV0b2hlYWRlciIKKworTEVBRF9TT05BTUUgPSAibGlicmVhZGxpbmUuc28iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorCQljYXQgJHtTfS9hY2xvY2FsLm00ID4gJHtTfS9hY2luY2x1ZGUubTQKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBNYWtlIGluc3RhbGwgZG9lc24ndCBwcm9wZXJseSBpbnN0YWxsIHRoZXNlCisJb2VfbGliaW5zdGFsbCAtc28gLUMgc2hsaWIgbGliaGlzdG9yeSAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtc28gLUMgc2hsaWIgbGlicmVhZGxpbmUgJHtEfSR7bGliZGlyfQorCisJcm1kaXIgJHtEfSR7YmluZGlyfQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lXzUuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmVfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMDA3YTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lXzUuMi5iYgpAQCAtMCwwICsxLDg0IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIGVkaXRpbmcgdHlwZWQgY29tbWFuZCBsaW5lcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgUmVhZGxpbmUgbGlicmFyeSBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgZm9yIHVzZSBieSBhcHBsaWNhdGlvbnMgdGhhdCBhbGxvdyB1c2VycyB0byBlZGl0IFwKK2NvbW1hbmQgbGluZXMgYXMgdGhleSBhcmUgdHlwZWQgaW4uIEJvdGggRW1hY3MgYW5kIHZpIGVkaXRpbmcgbW9kZXMgYXJlIGF2YWlsYWJsZS4gVGhlIFJlYWRsaW5lIGxpYnJhcnkgaW5jbHVkZXMgIFwKK2FkZGl0aW9uYWwgZnVuY3Rpb25zIHRvIG1haW50YWluIGEgbGlzdCBvZiBwcmV2aW91c2x5LWVudGVyZWQgY29tbWFuZCBsaW5lcywgdG8gcmVjYWxsIGFuZCBwZXJoYXBzIHJlZWRpdCB0aG9zZSAgIFwKK2xpbmVzLCBhbmQgcGVyZm9ybSBjc2gtbGlrZSBoaXN0b3J5IGV4cGFuc2lvbiBvbiBwcmV2aW91cyBjb21tYW5kcy4iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDNiMzZmZGQ4NGY3NGI4ZDgxODlhMjAyYjk4MGI2N2YiCisKK0RFUEVORFMgKz0gIm5jdXJzZXMiCisKK1BSID0gInI5IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vcmVhZGxpbmUvJHtCUE59LSR7UFZ9LnRhci5nejtuYW1lPWFyY2hpdmUgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDAxO25hbWU9cGF0Y2gxO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDAyO25hbWU9cGF0Y2gyO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDAzO25hbWU9cGF0Y2gzO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA0O25hbWU9cGF0Y2g0O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA1O25hbWU9cGF0Y2g1O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA2O25hbWU9cGF0Y2g2O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA3O25hbWU9cGF0Y2g3O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA4O25hbWU9cGF0Y2g4O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA5O25hbWU9cGF0Y2g5O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDEwO25hbWU9cGF0Y2gxMDthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAxMTtuYW1lPXBhdGNoMTE7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vcmVhZGxpbmUvcmVhZGxpbmUtNS4yLXBhdGNoZXMvcmVhZGxpbmU1Mi0wMTI7bmFtZT1wYXRjaDEyO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDEzO25hbWU9cGF0Y2gxMzthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAxNDtuYW1lPXBhdGNoMTQ7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZy1kaXJlbnQtc3ltYm9scy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcmVkdW5kYW50LXJwYXRoLnBhdGNoIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJlMzkzMzFmMzJhZDE0MDA5YjlmZjQ5Y2MxMGM1ZTc1MSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjEyZTg4ZDk2YWVlMmNkMTE5MjUwMDM1NmYwNTM1NTQwZGI0OTkyODJjYTdmNzYzMzlmYjQyMjhjMzEyNDlmNDUiCisKK1NSQ19VUklbcGF0Y2gxLm1kNXN1bV0gICAgPSAiOWQ0ZDQxNjIyYWE5YjIzMGM1N2Y2ODU0OGNlODdkOGYiCitTUkNfVVJJW3BhdGNoMS5zaGEyNTZzdW1dID0gImVhYzMwNGMzNjkxNTQwNTlmOTMwNDlhZGEzMjg3MzlmYWFmNDAzMzhkM2NiMWZiNGI1NDRjOTNkNWNlM2Y4ZDUiCitTUkNfVVJJW3BhdGNoMi5tZDVzdW1dICAgID0gImYwM2U1MTJkMTQyMDZlMzdmN2Q2YTc0OGI1NmI5NDc2IgorU1JDX1VSSVtwYXRjaDIuc2hhMjU2c3VtXSA9ICI5ZGVhY2FlZjI1NTA3YTBjMmFlMGI2NjFiZjkzNDI1NTliNTlhMjk1NGQ2NmVhM2M1ZjViY2Q5MDBmZGZjZjc4IgorU1JDX1VSSVtwYXRjaDMubWQ1c3VtXSAgICA9ICIyNTJiNDJkODc1MGYxYTk0YjZiZGYwODY2MTJkY2ViMiIKK1NSQ19VUklbcGF0Y2gzLnNoYTI1NnN1bV0gPSAiMmE1NWQyZWNiMWM5YjAxNDdhZWIxOTNhNjMyMzYxNmFiMzFjMWM1MjVhODNiMmRiM2E5OTRiMTU1OTRiYTkzNCIKK1NSQ19VUklbcGF0Y2g0Lm1kNXN1bV0gICAgPSAiYTMyMzMzYzJlNjAzYTNlZDI1MDUxNGU5MTA1MGU1NTIiCitTUkNfVVJJW3BhdGNoNC5zaGEyNTZzdW1dID0gImEwM2I2NTYzMzc4MWVmYTdjM2FhZTVkNTcxNjI5ODVlN2I3YTNjMTBhY2YwZjI2MjFiZTYxMGUxNmYyN2U1ZjIiCitTUkNfVVJJW3BhdGNoNS5tZDVzdW1dICAgID0gIjgxMDY3OTZjMDliNzg5NTIzYTNhNzhhYjY5YzA0YjZkIgorU1JDX1VSSVtwYXRjaDUuc2hhMjU2c3VtXSA9ICIwNjAwMTg5NjUxNDE0OGE3NTdlYTZlZGJiZDQwYzRmYzQzMzFkYzY1Mzg0NzI0NDM4NmMzN2IxMzhiMTUwZjY0IgorU1JDX1VSSVtwYXRjaDYubWQ1c3VtXSAgICA9ICI1MTIxODhlMmJmMDgzN2Y3ZWNhMTlkYmY3MWYxODJhZSIKK1NSQ19VUklbcGF0Y2g2LnNoYTI1NnN1bV0gPSAiZGZlZjNlOTgyYzBhZGY4YmI1YTliN2QwNDY4ZWM4ZjVmMTgxMzhiMzI1ZTI4NzU5NDM3NDY0ZGU1YmU3MTAxMyIKK1NSQ19VUklbcGF0Y2g3Lm1kNXN1bV0gICAgPSAiYWMxN2FjYTYyZWI2ZmIzOThjOWYyZmU5ZGU1NDBhZmYiCitTUkNfVVJJW3BhdGNoNy5zaGEyNTZzdW1dID0gIjc3NWIwMjhjN2I3NjEzOTdhYzZhZTFiZGZiYWM3ZTg5NmRjM2I5YjNhZGMyZjkxMzEyNDk5MTgwY2ExM2JkZDEiCitTUkNfVVJJW3BhdGNoOC5tZDVzdW1dICAgID0gIjI0ODRjMzkyZGIwMjE5MDVmMTEyY2Y5N2E5NGRmZDRjIgorU1JDX1VSSVtwYXRjaDguc2hhMjU2c3VtXSA9ICJhMjFiNGUwYmYwNTMwYjg3OGJhZDI0ZDViZTIzZDE4YTllMDNhNzVhMzFhZTMwODQ0ZGMwOTMzYmIzZDc3ZWNkIgorU1JDX1VSSVtwYXRjaDkubWQ1c3VtXSAgICA9ICJmYzZlYjM1ZDA3OTE0ZmFlNWM1N2Q0OWMxMjQ4M2ZmNyIKK1NSQ19VUklbcGF0Y2g5LnNoYTI1NnN1bV0gPSAiMTM4ZDVlMGYwNzA5YTQ3YTJkMTYyMTI5NWEzZGQ1ZTNjYzczYjYzYjVjYzI4ZGFiMDNhYmM0ZTk0ZmU5NWVjZiIKK1NSQ19VUklbcGF0Y2gxMC5tZDVzdW1dICAgID0gIjdhMmJmM2RjN2FjNzY4MGIxNDYxYTU3MDExMDBlOTFiIgorU1JDX1VSSVtwYXRjaDEwLnNoYTI1NnN1bV0gPSAiODNmOGMxYWFkYjg2YjFhMmZhZDg4MjFhOWM2YmU3MmE4ZGU1YWZkN2ZkOWZkZTU4YTMwYjNiNTdkOTM5NjkzZSIKK1NSQ19VUklbcGF0Y2gxMS5tZDVzdW1dICAgID0gImVmNmNlZjY4MjI2NjM0NzBmNmFjOGM1MTdjNWE3ZWM2IgorU1JDX1VSSVtwYXRjaDExLnNoYTI1NnN1bV0gPSAiMDhhZDMzODRhYjA5MDZlNmZhNGNjNDE3ZWI4YzQzZmY1OTM3NWJjZWFkMTVmZDVjOGUzMTczMGYwNDEzYjNkNiIKK1NSQ19VUklbcGF0Y2gxMi5tZDVzdW1dICAgID0gImUzZTlmNDQxYzgxMTE1ODk4NTViYzM2M2U1NjQwZjZjIgorU1JDX1VSSVtwYXRjaDEyLnNoYTI1NnN1bV0gPSAiMjBmMDI0M2JlMjI5OWMyMzIxMzQ5MmNjMmMxOWNmZDE1Y2M1MjhkMmI1NjZhNzZhMmRlNTgzMDZiYjllNGM5ZSIKK1NSQ19VUklbcGF0Y2gxMy5tZDVzdW1dICAgID0gIjNlMmU1ZjU0M2VkMjY4YTY4ZmQxZmE4MzlmYWFkZTFhIgorU1JDX1VSSVtwYXRjaDEzLnNoYTI1NnN1bV0gPSAiMGNjNjQ5NTE2YTViZGZhNjFjNWU1NjkzNzQwNzU3MDI4OGI2OTcyZDc1YWExYmQwNjBhZDMwZWJlOTgxNDRkNSIKK1NSQ19VUklbcGF0Y2gxNC5tZDVzdW1dICAgID0gImExYmUzMGUxYzZmMTA5OWJiNWZjZWYwMGEyNjMxZmI4IgorU1JDX1VSSVtwYXRjaDE0LnNoYTI1NnN1bV0gPSAiNmYxYTY4MzIwZDAxNTIyY2ExZWE1YTczNzEyNGVjYzg3MzlmM2RjYmZlYTJkZWUyMWUzY2NmODM5YTIxYTgxNyIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1leGNsdWRlPWF1dG9oZWFkZXIiCisKK0xFQURfU09OQU1FID0gImxpYnJlYWRsaW5lLnNvIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJaWYgWyAhIC1lICR7U30vYWNpbmNsdWRlLm00IF07IHRoZW4KKwkJY2F0ICR7U30vYWNsb2NhbC5tNCA+ICR7U30vYWNpbmNsdWRlLm00CisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCSMgTWFrZSBpbnN0YWxsIGRvZXNuJ3QgcHJvcGVybHkgaW5zdGFsbCB0aGVzZQorCW9lX2xpYmluc3RhbGwgLXNvIC1DIHNobGliIGxpYmhpc3RvcnkgJHtEfSR7bGliZGlyfQorCW9lX2xpYmluc3RhbGwgLXNvIC1DIHNobGliIGxpYnJlYWRsaW5lICR7RH0ke2xpYmRpcn0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZV82LjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lXzYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTk2NGE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZV82LjMuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIHJlYWRsaW5lLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vcmVhZGxpbmU2My0wMDMgXAorICAgICAgICAgICAgZmlsZTovL3JlYWRsaW5lLWRpc3BhdGNoLW11bHRpa2V5LnBhdGNoIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzM2M4ZmIyNzllOTgxMjc0ZjQ4NWZkOTFkYTc3ZTk0YSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjU2YmE2MDcxYjk0NjJmOTgwYzVhNzJhYjAwMjM4OTNiNjViYTZkZWJiNGVlYjQ3NWQ3YTU2M2RjNjVjYWZkNDMiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzLTIuMS4wL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzLTIuMS4wL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDgyOGQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHMtMi4xLjAvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2Z1bmM9ZGV0YWlsJmFpZD0zNjAwMzQ1Jmdyb3VwX2lkPTQ0NDI3JmF0aWQ9NDM5NTQ0XQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBzeXNmc3V0aWxzLTIuMS4wL2NvbmZpZ3VyZS5hYyBzeXNmc3V0aWxzLTIuMS4wL2NvbmZpZ3VyZS5hYworLS0tIHN5c2ZzdXRpbHMtMi4xLjAvY29uZmlndXJlLmFjCTIwMDYtMDgtMDcgMDg6MDg6MDAuMDAwMDAwMDAwICswMzAwCisrKysgc3lzZnN1dGlscy0yLjEuMC9jb25maWd1cmUuYWMJMjAxMy0wMS0xMSAwODoxMzowOC42NTE1NTA2MzQgKzAyMDAKK0BAIC0yLDcgKzIsNyBAQAorIEFDX0lOSVQoc3lzZnN1dGlscywgMi4xLjAsIGxpbnV4LWRpYWctZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0KQorIEFNX0lOSVRfQVVUT01BS0UKKyBBQ19DT05GSUdfU1JDRElSKFtjb25maWcuaC5pbl0pCistQU1fQ09ORklHX0hFQURFUihbY29uZmlnLmhdKQorK0FDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCisKKyAjIENoZWNrcyBmb3IgS0xJQkMgc3VwcG9ydCAoc2hvdWxkIGJlIGJlZm9yZSBBQ19QUk9HX0xJQlRPT0wgYW5kIEFDX1BST0dfQ0MpCisgQUNfQ0hFQ0tfS0xJQkMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzLTIuMS4wL3NlcGFyYXRlYnVpbGQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9zZXBhcmF0ZWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZTcyNWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9zZXBhcmF0ZWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGaXggb3V0IG9mIHRyZWUgYnVpbGQgaXNzdWVzIHNvICR7Qn0gIT0gJHtTfSB3b3Jrcy4KKworUlAgMjAxMy8wMy8xOAorCitJbmRleDogc3lzZnN1dGlscy0yLjEuMC9jbWQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNmc3V0aWxzLTIuMS4wLm9yaWcvY21kL01ha2VmaWxlLmFtCTIwMTMtMDMtMDggMDg6NTc6MjcuMjI0NTU2NTA4ICswMDAwCisrKysgc3lzZnN1dGlscy0yLjEuMC9jbWQvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAwODo1NzoyNy40ODA1NTY1MDIgKzAwMDAKK0BAIC0xLDYgKzEsNiBAQAorIGJpbl9QUk9HUkFNUyA9IHN5c3Rvb2wgCisgc3lzdG9vbF9TT1VSQ0VTID0gc3lzdG9vbC5jIG5hbWVzLmMgbmFtZXMuaAorLUlOQ0xVREVTID0gLUkuLi9pbmNsdWRlCisrSU5DTFVERVMgPSAtSSQoc3JjZGlyKS8uLi9pbmNsdWRlCisgTERBREQgPSAuLi9saWIvbGlic3lzZnMubGEKKyBFWFRSQV9DRkxBR1MgPSBARVhUUkFfQ0ZMQUdTQAorIEFNX0NGTEFHUyA9IC1XYWxsIC1XIC1Xc3RyaWN0LXByb3RvdHlwZXMgJChFWFRSQV9DRkxBR1MpCitJbmRleDogc3lzZnN1dGlscy0yLjEuMC9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNmc3V0aWxzLTIuMS4wLm9yaWcvbGliL01ha2VmaWxlLmFtCTIwMTMtMDMtMDggMDg6NTc6MjcuMjI0NTU2NTA4ICswMDAwCisrKysgc3lzZnN1dGlscy0yLjEuMC9saWIvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAwODo1NzoyNy40ODA1NTY1MDIgKzAwMDAKK0BAIC0xLDcgKzEsNyBAQAorIGxpYl9MVExJQlJBUklFUyA9IGxpYnN5c2ZzLmxhCisgbGlic3lzZnNfbGFfU09VUkNFUyA9IHN5c2ZzX3V0aWxzLmMgc3lzZnNfYXR0ci5jIHN5c2ZzX2NsYXNzLmMgZGxpc3QuYyBcCisgICAgICAgc3lzZnNfZGV2aWNlLmMgc3lzZnNfZHJpdmVyLmMgc3lzZnNfYnVzLmMgc3lzZnNfbW9kdWxlLmMgc3lzZnMuaAorLUlOQ0xVREVTID0gLUkuLi9pbmNsdWRlCisrSU5DTFVERVMgPSAtSSQoc3JjZGlyKS8uLi9pbmNsdWRlCisgbGlic3lzZnNfbGFfTERGTEFHUyA9IC12ZXJzaW9uLWluZm8gMjoxOjAKKyBFWFRSQV9DRkxBR1MgPSBARVhUUkFfQ0xGQUdTQAorIGxpYnN5c2ZzX2xhX0NGTEFHUyA9IC1XYWxsIC1XIC1Xc3RyaWN0LXByb3RvdHlwZXMgJChFWFRSQV9DTEZBR1MpCitJbmRleDogc3lzZnN1dGlscy0yLjEuMC90ZXN0L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3lzZnN1dGlscy0yLjEuMC5vcmlnL3Rlc3QvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAwODo1NzoyNy4yMjQ1NTY1MDggKzAwMDAKKysrKyBzeXNmc3V0aWxzLTIuMS4wL3Rlc3QvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAwOTowNjo0OC4xOTY1NDMzMjYgKzAwMDAKK0BAIC0yLDE0ICsyLDE0IEBACisgQlVJTFRfU09VUkNFUyA9IHRlc3QuaAorIENMRUFORklMRVMgPSB0ZXN0LmgKKyB0ZXN0Lmg6CistCS4vY3JlYXRlLXRlc3QKKysJJChzcmNkaXIpL2NyZWF0ZS10ZXN0ICQoc3JjZGlyKS9saWJzeXNmcy5jb25mCisgZ2V0X2RldmljZV9TT1VSQ0VTID0gZ2V0X2RldmljZS5jCisgZ2V0X2RyaXZlcl9TT1VSQ0VTID0gZ2V0X2RyaXZlci5jCisgZ2V0X21vZHVsZV9TT1VSQ0VTID0gZ2V0X21vZHVsZS5jCisgdGVzdGxpYnN5c2ZzX1NPVVJDRVMgPSB0ZXN0LmMgdGVzdF9hdHRyLmMgdGVzdF9idXMuYyB0ZXN0X2NsYXNzLmMgXAorIAkJICAgICAgIHRlc3RfZGV2aWNlLmMgdGVzdF9kcml2ZXIuYyB0ZXN0X21vZHVsZS5jIHRlc3RfdXRpbHMuYyBcCisgCQkgICAgICAgdGVzdG91dC5jIHRlc3QtZGVmcy5oIGxpYnN5c2ZzLmNvbmYgY3JlYXRlLXRlc3QKKy1JTkNMVURFUyA9IC1JLi4vaW5jbHVkZQorK0lOQ0xVREVTID0gLUkkKHNyY2RpcikvLi4vaW5jbHVkZQorIExEQUREID0gLi4vbGliL2xpYnN5c2ZzLmxhCisgRVhUUkFfQ0ZMQUdTID0gQEVYVFJBX0NMRkFHU0AKKyBBTV9DRkxBR1MgPSAtV2FsbCAtVyAtV3N0cmljdC1wcm90b3R5cGVzICQoRVhUUkFfQ0xGQUdTKQorSW5kZXg6IHN5c2ZzdXRpbHMtMi4xLjAvdGVzdC9jcmVhdGUtdGVzdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHN5c2ZzdXRpbHMtMi4xLjAub3JpZy90ZXN0L2NyZWF0ZS10ZXN0CTIwMDUtMTEtMjggMTA6MjI6MTAuMDAwMDAwMDAwICswMDAwCisrKysgc3lzZnN1dGlscy0yLjEuMC90ZXN0L2NyZWF0ZS10ZXN0CTIwMTMtMDMtMDggMDk6MDc6MDMuMzcyNTQyODM4ICswMDAwCitAQCAtMiw3ICsyLDcgQEAKKyAKKyBybSAtZiB0ZXN0LmgKKyAKKy1jb25mX2ZpbGU9Li9saWJzeXNmcy5jb25mCisrY29uZl9maWxlPSQxCisgCisgLiAkY29uZl9maWxlCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9zeXNmc3V0aWxzLTIuMC4wLWNsYXNzLWR1cC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzLTIuMS4wL3N5c2ZzdXRpbHMtMi4wLjAtY2xhc3MtZHVwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMzViNzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9zeXNmc3V0aWxzLTIuMC4wLWNsYXNzLWR1cC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtmcm9tIGZlZG9yYSBjb3JlIDldCisKK1RoaXMgcGF0Y2ggaXMgZnJvbSB0aGUgRmVkb3JhIENvcmUgOSBzeXNmc3V0aWxzLTIuMS4wLTMuZmM5IHBhY2thZ2UuCisKK0l0IGZpeGVzIGEgcHJvYmxlbSBpbiB0aGUgdXBzdHJlYW0gcGFja2FnZSB3aGVyZSBub3QgYWxsIGRldmljZXMgCit3aWxsIGJlIHJldHVybmVkIGJ5IHRoZSBmdW5jdGlvbi4KKworVGhlIHBhY2thZ2UgTGljZW5zZSBpbmRpY2F0ZXMgdGhpcyBpcyBHUEx2MiBsaWNlbnNlZC4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC1wdU4gbGliL3N5c2ZzX2NsYXNzLmN+c3lzZnN1dGlsc19jbGFzc19kdXAgbGliL3N5c2ZzX2NsYXNzLmMKKy0tLSBzeXNmc3V0aWxzLTIuMS4wL2xpYi9zeXNmc19jbGFzcy5jfnN5c2ZzdXRpbHNfY2xhc3NfZHVwCTIwMDYtMDktMDcgMTc6MDE6MjYuMDAwMDAwMDAwIC0wNTAwCisrKysgc3lzZnN1dGlscy0yLjEuMC1iamtpbmcxL2xpYi9zeXNmc19jbGFzcy5jCTIwMDYtMDktMDcgMTc6MDE6MjYuMDAwMDAwMDAwIC0wNTAwCitAQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgaW50IGNkZXZfbmFtZV9lcXVhbCh2b2lkICphLCB2b2lkCisgCQlyZXR1cm4gMDsKKyAKKyAJaWYgKHN0cm5jbXAoKGNoYXIgKilhLCAoKHN0cnVjdCBzeXNmc19jbGFzc19kZXZpY2UgKiliKS0+bmFtZSwKKy0JCQkJc3RybGVuKChjaGFyICopYSkpID09IDApCisrCQkJCVNZU0ZTX05BTUVfTEVOKSA9PSAwKQorIAkJcmV0dXJuIDE7CisgCisgCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHNfMi4xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlsc18yLjEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWY0MGY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHNfMi4xLjAuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJUb29scyBmb3Igd29ya2luZyB3aXRoIHN5c2ZzIgorREVTQ1JJUFRJT04gPSAiVG9vbHMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgc3lzZnMgdmlydHVhbCBmaWxlc3lzdGVtLiAgVGhlIHRvb2wgJ3N5c3Rvb2wnIGNhbiBxdWVyeSBkZXZpY2VzIGJ5IGJ1cywgY2xhc3MgYW5kIHRvcG9sb2d5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9saW51eC1kaWFnLnNvdXJjZWZvcmdlLm5ldC9TeXNmc3V0aWxzLmh0bWwiCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ0VOU0VfJHtQTn0gPSAiR1BMdjIiCitMSUNFTlNFX2xpYnN5c2ZzID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2QwNjQwM2VhNTRjNzU3NGE5ZTU4MWM2NDc4Y2MzOTMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY21kL0dQTDttZDU9ZDQxZDRlMmUxZTEwODU1NGUwMzg4ZWE0YWVjZDhkMjcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL0xHUEw7bWQ1PWI3NWQwNjk3OTExMDNmZmUxYzBkNjQzNWRlZWZmNzJlIgorUFIgPSAicjUiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xpbnV4LWRpYWcvc3lzZnN1dGlscy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vc3lzZnN1dGlscy0yLjAuMC1jbGFzcy1kdXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NlcGFyYXRlYnVpbGQucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNGU3ZGNkMDQzNmQyZjQ5YWE0MDNmNjdlMWVmN2RkYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlODY1ZGUyYzFmNTU5ZmZmMGQzZmM5MzZlNjYwYzBlZmFmN2FmZTY2MjA2NGYyZmI5N2NjYWQxZWMyOGQyMDhhIgorUyA9ICIke1dPUktESVJ9L3N5c2ZzdXRpbHMtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1BBQ0tBR0VTID0rICJsaWJzeXNmcyIKK0ZJTEVTX2xpYnN5c2ZzID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlN9IgorRklMRVNfbGlic3lzZnMtZGV2ID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7aW5jbHVkZWRpcn0iCitGSUxFU19saWJzeXNmcy1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYiouYSIKKworZXhwb3J0IGxpYmRpciA9ICIke2Jhc2VfbGliZGlyfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLWNvbXBhdC11bml0cy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLWNvbXBhdC11bml0cy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjhmZjA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtY29tcGF0LXVuaXRzLmJiCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAiRW5oYW5jZXMgc3lzdGVtZCBjb21wYXRpbGliaXR5IHdpdGggZXhpc3RpbmcgU3lzVmluaXQgc2NyaXB0cyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCIKKworUFIgPSAicjI5IgorCitERVBFTkRTID0gInN5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZSIKKworUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IGFsbGFyY2gKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworU1lTVEVNRF9ESVNBQkxFRF9TWVNWX1NFUlZJQ0VTID0gIiBcCisgIGJ1c3lib3gtdWRoY3BjIFwKKyAgaHdjbG9jayBcCisgIG5ldHdvcmtpbmcgXAorICBuZnNzZXJ2ZXIgXAorICBuZnNjb21tb24gXAorICBzeXNsb2cuYnVzeWJveCBcCisiCisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJY2QgJEQke3N5c2NvbmZkaXJ9L2luaXQuZAorCisJZWNobyAiRGlzYWJsaW5nIHRoZSBmb2xsb3dpbmcgc3lzdiBzY3JpcHRzOiAiCisKKwlPUFRTPSIiCisKKwlpZiBbIC1uICIkRCIgXTsgdGhlbgorCQlPUFRTPSItLXJvb3Q9JEQiCisJZmkKKworCWZvciBpIGluICR7U1lTVEVNRF9ESVNBQkxFRF9TWVNWX1NFUlZJQ0VTfSA7IGRvCisJCWlmIFsgXCggLWUgJGkgLW8gJGkuc2ggXCkgLWEgISBcKCAtZSAkRCR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0vJGkuc2VydmljZSAtbyAgLWUgJEQke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyRpLnNlcnZpY2UgXCkgXSA7IHRoZW4KKwkJCWVjaG8gLW4gIiRpOiAiIDsgc3lzdGVtY3RsICR7T1BUU30gbWFzayAkaS5zZXJ2aWNlCisJCWZpCisJZG9uZSA7IGVjaG8KK30KKworUkRQRVBFTkRTXyR7UE59ID0gInN5c3RlbWQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zZXJpYWxnZXR0eS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXNlcmlhbGdldHR5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OGIxMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zZXJpYWxnZXR0eS5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIlNlcmlhbCB0ZXJtaW5hbCBzdXBwb3J0IGZvciBzeXN0ZW1kIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wO21kNT04MDFmODA5ODBkMTcxZGQ2NDI1NjEwODMzYTIyZGJlNiIKKworUFIgPSAicjUiCisKK1NFUklBTF9DT05TT0xFID89ICIxMTUyMDAgdHR5UzAiCisKK1NSQ19VUkkgPSAiZmlsZTovL3NlcmlhbC1nZXR0eUAuc2VydmljZSIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWlmIFsgISAteiAiJHtTRVJJQUxfQ09OU09MRVN9IiBdIDsgdGhlbgorCQlkZWZhdWx0X2JhdWRyYXRlPWBlY2hvICIke1NFUklBTF9DT05TT0xFU30iIHwgc2VkICdzL1w7LiovLydgCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0vZ2V0dHkudGFyZ2V0LndhbnRzLworCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zZXJpYWwtZ2V0dHlALnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJCXNlZCAtaSAtZSBzL1xAQkFVRFJBVEVcQC8kZGVmYXVsdF9iYXVkcmF0ZS9nICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eUAuc2VydmljZQorCisJCXRtcD0iJHtTRVJJQUxfQ09OU09MRVN9IgorCQlmb3IgZW50cnkgaW4gJHRtcCA7IGRvCisJCQliYXVkcmF0ZT1gZWNobyAkZW50cnkgfCBzZWQgJ3MvXDsuKi8vJ2AKKwkJCXR0eWRldj1gZWNobyAkZW50cnkgfCBzZWQgLWUgJ3MvXlswLTldKlw7Ly8nIC1lICdzL1w7LiovLydgCisJCQlpZiBbICIkYmF1ZHJhdGUiID0gIiRkZWZhdWx0X2JhdWRyYXRlIiBdIDsgdGhlbgorCQkJCSMgZW5hYmxlIHRoZSBzZXJ2aWNlCisJCQkJbG4gLXNmICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc2VyaWFsLWdldHR5QC5zZXJ2aWNlIFwKKwkJCQkJJHtEfSR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0vZ2V0dHkudGFyZ2V0LndhbnRzL3NlcmlhbC1nZXR0eUAkdHR5ZGV2LnNlcnZpY2UKKwkJCWVsc2UKKwkJCQkjIGluc3RhbGwgY3VzdG9tIHNlcnZpY2UgZmlsZSBmb3IgdGhlIG5vbi1kZWZhdWx0IGJhdWRyYXRlCisJCQkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2VyaWFsLWdldHR5QC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eSRiYXVkcmF0ZUAuc2VydmljZQorCQkJCXNlZCAtaSAtZSBzL1xAQkFVRFJBVEVcQC8kYmF1ZHJhdGUvZyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zZXJpYWwtZ2V0dHkkYmF1ZHJhdGVALnNlcnZpY2UKKwkJCQkjIGVuYWJsZSB0aGUgc2VydmljZQorCQkJCWxuIC1zZiAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eSRiYXVkcmF0ZUAuc2VydmljZSBcCisJCQkJCSR7RH0ke3N5c2NvbmZkaXJ9L3N5c3RlbWQvc3lzdGVtL2dldHR5LnRhcmdldC53YW50cy9zZXJpYWwtZ2V0dHkkYmF1ZHJhdGVAJHR0eWRldi5zZXJ2aWNlCisJCQlmaQorCQlkb25lCisJZmkKK30KKworUkRFUEVORFNfJHtQTn0gPSAic3lzdGVtZCIKKworIyBUaGlzIGlzIGEgbWFjaGluZSBzcGVjaWZpYyBmaWxlCitGSUxFU18ke1BOfSA9ICIke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyouc2VydmljZSAke3N5c2NvbmZkaXJ9IgorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworIyBBcyB0aGlzIHBhY2thZ2UgaXMgdGllZCB0byBzeXN0ZW1kLCBvbmx5IGJ1aWxkIGl0IHdoZW4gd2UncmUgYWxzbyBidWlsZGluZyBzeXN0ZW1kLgorcHl0aG9uICgpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMgKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIidzeXN0ZW1kJyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTIikKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXNlcmlhbGdldHR5L3NlcmlhbC1nZXR0eUAuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXNlcmlhbGdldHR5L3NlcmlhbC1nZXR0eUAuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODIxNjdiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc2VyaWFsZ2V0dHkvc2VyaWFsLWdldHR5QC5zZXJ2aWNlCkBAIC0wLDAgKzEsMzcgQEAKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHN5c3RlbWQuCisjCisjICBzeXN0ZW1kIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworW1VuaXRdCitEZXNjcmlwdGlvbj1TZXJpYWwgR2V0dHkgb24gJUkKK0RvY3VtZW50YXRpb249bWFuOmFnZXR0eSg4KSBtYW46c3lzdGVtZC1nZXR0eS1nZW5lcmF0b3IoOCkKK0RvY3VtZW50YXRpb249aHR0cDovLzBwb2ludGVyLmRlL2Jsb2cvcHJvamVjdHMvc2VyaWFsLWNvbnNvbGUuaHRtbAorQmluZHNUbz1kZXYtJWkuZGV2aWNlCitBZnRlcj1kZXYtJWkuZGV2aWNlIHN5c3RlbWQtdXNlci1zZXNzaW9ucy5zZXJ2aWNlIHBseW1vdXRoLXF1aXQtd2FpdC5zZXJ2aWNlCitBZnRlcj1yYy1sb2NhbC5zZXJ2aWNlCisKKyMgSWYgYWRkaXRpb25hbCBnZXR0eXMgYXJlIHNwYXduZWQgZHVyaW5nIGJvb3QgdGhlbiB3ZSBzaG91bGQgbWFrZQorIyBzdXJlIHRoYXQgdGhpcyBpcyBzeW5jaHJvbml6ZWQgYmVmb3JlIGdldHR5LnRhcmdldCwgZXZlbiB0aG91Z2gKKyMgZ2V0dHkudGFyZ2V0IGRpZG4ndCBhY3R1YWxseSBwdWxsIGl0IGluLgorQmVmb3JlPWdldHR5LnRhcmdldAorSWdub3JlT25Jc29sYXRlPXllcworCitbU2VydmljZV0KK0Vudmlyb25tZW50PSJURVJNPXh0ZXJtIgorRXhlY1N0YXJ0PS0vc2Jpbi9hZ2V0dHkgLTggLUwgLS1rZWVwLWJhdWQgJUkgQEJBVURSQVRFQCAkVEVSTQorVHlwZT1pZGxlCitSZXN0YXJ0PWFsd2F5cworUmVzdGFydFNlYz0wCitVdG1wSWRlbnRpZmllcj0lSQorVFRZUGF0aD0vZGV2LyVJCitUVFlSZXNldD15ZXMKK1RUWVZIYW5ndXA9eWVzCitLaWxsTW9kZT1wcm9jZXNzCitJZ25vcmVTSUdQSVBFPW5vCitTZW5kU0lHSFVQPXllcworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PWdldHR5LnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJkYzljMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJXcmFwcGVyIGZvciBlbmFibGluZyBzeXN0ZW1kIHNlcnZpY2VzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIgorCitQUiA9ICJyNiIKKworaW5oZXJpdCBuYXRpdmUKKworU1JDX1VSSSA9ICJmaWxlOi8vc3lzdGVtY3RsIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vc3lzdGVtY3RsICR7RH0ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXN5c3RlbWN0bC9zeXN0ZW1jdGwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zeXN0ZW1jdGwvc3lzdGVtY3RsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlMTYzYmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zeXN0ZW1jdGwvc3lzdGVtY3RsCkBAIC0wLDAgKzEsMTgyIEBACisjIS9iaW4vc2gKK2VjaG8gIlN0YXJ0ZWQgJDAgJCoiCisKK1JPT1Q9CisKKyMgcGFyc2UgY29tbWFuZCBsaW5lIHBhcmFtcworYWN0aW9uPQord2hpbGUgWyAkIyAhPSAwIF07IGRvCisJb3B0PSIkMSIKKworCWNhc2UgIiRvcHQiIGluCisJCWVuYWJsZSkKKwkJCXNoaWZ0CisKKwkJCWFjdGlvbj0iJG9wdCIKKwkJCXNlcnZpY2VzPSIkMSIKKwkJCWNtZF9hcmdzPSIxIgorCQkJc2hpZnQKKwkJCTs7CisJCWRpc2FibGUpCisJCQlzaGlmdAorCisJCQlhY3Rpb249IiRvcHQiCisJCQlzZXJ2aWNlcz0iJDEiCisJCQljbWRfYXJncz0iMSIKKwkJCXNoaWZ0CisJCQk7OworCQltYXNrKQorCQkJc2hpZnQKKworCQkJYWN0aW9uPSIkb3B0IgorCQkJc2VydmljZXM9IiQxIgorCQkJY21kX2FyZ3M9IjEiCisJCQlzaGlmdAorCQkJOzsKKwkJcHJlc2V0KQorCQkJc2hpZnQKKworCQkJYWN0aW9uPSIkb3B0IgorCQkJc2VydmljZXM9IiQxIgorCQkJY21kX2FyZ3M9IjEiCisJCQlzaGlmdAorCQkJOzsKKwkJLS1yb290PSopCisJCQlST09UPSR7b3B0IyMtLXJvb3Q9fQorCQkJY21kX2FyZ3M9IjAiCisJCQlzaGlmdAorCQkJOzsKKwkJKikKKwkJCWlmIFsgIiRjbWRfYXJncyIgPSAiMSIgXTsgdGhlbgorCQkJCXNlcnZpY2VzPSIkc2VydmljZXMgJG9wdCIgCisJCQkJc2hpZnQKKwkJCWVsc2UKKwkJCQllY2hvICInJG9wdCcgaXMgYW4gdW5rb3duIG9wdGlvbjsgZXhpdGluZyB3aXRoIGVycm9yIgorCQkJCWV4aXQgMQorCQkJZmkKKwkJCTs7CisJZXNhYworZG9uZQoraWYgWyAiJGFjdGlvbiIgPSAicHJlc2V0IiAtYSAiJHNlcnZpY2VfZmlsZSIgPSAiIiBdOyB0aGVuCisJc2VydmljZXM9JChmb3IgZiBpbiBgZmluZCAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0gJFJPT1QvbGliL3N5c3RlbWQvc3lzdGVtICRST09UL3Vzci9saWIvc3lzdGVtZC9zeXN0ZW0gLXR5cGUgZiAyPjFgOyBkbyBiYXNlbmFtZSAkZjsgZG9uZSkKKwlzZXJ2aWNlcz0iJHNlcnZpY2VzICRvcHQiCisJcHJlc2V0YWxsPTEKK2ZpCisKK2ZvciBzZXJ2aWNlIGluICRzZXJ2aWNlczsgZG8KKwlpZiBbICIkcHJlc2V0YWxsIiA9ICIxIiBdOyB0aGVuCisJCWFjdGlvbj0icHJlc2V0IgorCWZpCisJaWYgWyAiJGFjdGlvbiIgPSAibWFzayIgXTsgdGhlbgorCQlpZiBbICEgLWQgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyBdOyB0aGVuCisJCQlta2RpciAtcCAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0vCisJCWZpCisJCWNtZD0ibG4gLXMgL2Rldi9udWxsICRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kc2VydmljZSIKKwkJZWNobyAiJGNtZCIKKwkJJGNtZAorCQlleGl0IDAKKwlmaQorCisJc2VydmljZV9iYXNlX2ZpbGU9YGVjaG8gJHNlcnZpY2UgfCBzZWQgJ3MvXChAXCkuKlwoXC5bXi5dXCtcKS9cMVwyLydgCisJaWYgWyAteiBgZWNobyAkc2VydmljZSB8IHNlZCAnL0AvcDtkJ2AgXTsgdGhlbgorCQllY2hvICJUcnkgdG8gZmluZCBsb2NhdGlvbiBvZiAkc2VydmljZS4uLiIKKwkJc2VydmljZV90ZW1wbGF0ZT1mYWxzZQorCWVsc2UKKwkJZWNobyAiVHJ5IHRvIGZpbmQgbG9jYXRpb24gb2YgdGVtcGxhdGUgJHNlcnZpY2VfYmFzZV9maWxlIG9mIGluc3RhbmNlICRzZXJ2aWNlLi4uIgorCQlzZXJ2aWNlX3RlbXBsYXRlPXRydWUKKwkJaWYgWyAteiBgZWNobyAkc2VydmljZSB8IHNlZCAncy9eLlwrQFwoLipcKVwuW14uXVwrL1wxLydgIF07IHRoZW4KKwkJCWluc3RhbmNlX3NwZWNpZmllZD1mYWxzZQorCQllbHNlCisJCQlpbnN0YW5jZV9zcGVjaWZpZWQ9dHJ1ZQorCQlmaQorCWZpCisKKwkjIGZpbmQgc2VydmljZSBmaWxlCisJZm9yIHAgaW4gJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtIFwKKwkJICRST09UL2xpYi9zeXN0ZW1kL3N5c3RlbSBcCisJCSAkUk9PVC91c3IvbGliL3N5c3RlbWQvc3lzdGVtOyBkbworCQlpZiBbIC1lICRwLyRzZXJ2aWNlX2Jhc2VfZmlsZSBdOyB0aGVuCisJCQlzZXJ2aWNlX2ZpbGU9JHAvJHNlcnZpY2VfYmFzZV9maWxlCisJCQlzZXJ2aWNlX2ZpbGU9JHtzZXJ2aWNlX2ZpbGUjIyRST09UfQorCQlmaQorCWRvbmUKKwlpZiBbIC16ICIkc2VydmljZV9maWxlIiBdOyB0aGVuCisJCWVjaG8gIickc2VydmljZV9iYXNlX2ZpbGUnIGNvdWxkbid0IGJlIGZvdW5kOyBleGl0aW5nIHdpdGggZXJyb3IiCisJCWV4aXQgMQorCWZpCisJZWNobyAiRm91bmQgJHNlcnZpY2UgaW4gJHNlcnZpY2VfZmlsZSIKKworCSMgSWYgYW55IG5ldyB1bml0IHR5cGVzIGFyZSBhZGRlZCB0byBzeXN0ZW1kIHRoZXkgc2hvdWxkIGJlIGFkZGVkCisJIyB0byB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKwl1bml0X3R5cGVzX3JlPSdcLlwoc2VydmljZVx8c29ja2V0XHxkZXZpY2VcfG1vdW50XHxhdXRvbW91bnRcfHN3YXBcfHRhcmdldFx8cGF0aFx8dGltZXJcfHNuYXBzaG90XCkkJworCWlmIFsgIiRhY3Rpb24iID0gInByZXNldCIgXTsgdGhlbgorCQlhY3Rpb249YGVncmVwIC1zaCAgJHNlcnZpY2UgJFJPT1QvZXRjL3N5c3RlbWQvdXNlci1wcmVzZXQvKi5wcmVzZXQgfCBjdXQgLWYxIC1kJyAnYAorCQlpZiBbIC16ICIkYWN0aW9uIiBdOyB0aGVuCisJCQlnbG9iYWxwcmVzZXQ9YGVncmVwIC1zaCAgJ1wqJyAgJFJPT1QvZXRjL3N5c3RlbWQvdXNlci1wcmVzZXQvKi5wcmVzZXQgfCBjdXQgLWYxIC1kJyAnYAorCQkJaWYgWyAtbiAiJGdsb2JhbHByZXNldCIgXTsgdGhlbgorCQkJCWFjdGlvbj0iJGdsb2JhbHByZXNldCIKKwkJCWVsc2UKKwkJCQlhY3Rpb249ImVuYWJsZSIKKwkJCWZpCisJCWZpCisJZmkKKwkjIGNyZWF0ZSB0aGUgcmVxdWlyZWQgc3ltYm9saWMgbGlua3MKKwl3YW50ZWRfYnk9JChzZWQgJy9eV2FudGVkQnlbWzpzcGFjZTpdXSo9L3MsW149XSo9LCxwO2QnICIkUk9PVC8kc2VydmljZV9maWxlIiBcCisJCSAgICAgICAgfCB0ciAnLCcgJ1xuJyBcCisJCSAgICAgICAgfCBncmVwICIkdW5pdF90eXBlc19yZSIpCisKKwlmb3IgciBpbiAkd2FudGVkX2J5OyBkbworCQllY2hvICJXYW50ZWRCeT0kciBmb3VuZCBpbiAkc2VydmljZSIKKwkJaWYgWyAiJGFjdGlvbiIgPSAiZW5hYmxlIiBdOyB0aGVuCisJCQllbmFibGVfc2VydmljZT0kc2VydmljZQorCQkJaWYgWyAiJHNlcnZpY2VfdGVtcGxhdGUiID0gdHJ1ZSAtYSAiJGluc3RhbmNlX3NwZWNpZmllZCIgPSBmYWxzZSBdOyB0aGVuCisJCQkJZGVmYXVsdF9pbnN0YW5jZT0kKHNlZCAnL15EZWZhdWx0SW5zdGFuY2VbWzpzcGFjZTpdXSo9L3MsW149XSo9LCxwO2QnICIkUk9PVC8kc2VydmljZV9maWxlIikKKwkJCQlpZiBbIC16ICRkZWZhdWx0X2luc3RhbmNlIF07IHRoZW4KKwkJCQkJZWNobyAiVGVtcGxhdGUgdW5pdCB3aXRob3V0IGluc3RhbmNlIG9yIERlZmF1bHRJbnN0YW5jZSBkaXJlY3RpdmUsIG5vdGhpbmcgdG8gZW5hYmxlIgorCQkJCQljb250aW51ZQorCQkJCWVsc2UKKwkJCQkJZWNobyAiRm91bmQgRGVmYXVsdEluc3RhbmNlICRkZWZhdWx0X2luc3RhbmNlLCBlbmFibGluZyBpdCIKKwkJCQkJZW5hYmxlX3NlcnZpY2U9JChlY2hvICRzZXJ2aWNlIHwgc2VkICJzL0AvQCRkZWZhdWx0X2luc3RhbmNlLyIpCisJCQkJZmkKKwkJCWZpCisJCQlta2RpciAtcCAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0vJHIud2FudHMKKwkJCWxuIC1zICRzZXJ2aWNlX2ZpbGUgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzLyRlbmFibGVfc2VydmljZQorCQkJZWNobyAiRW5hYmxlZCAkZW5hYmxlX3NlcnZpY2UgZm9yICR3YW50ZWRfYnkuIgorCQllbHNlCisJCQlpZiBbICIkc2VydmljZV90ZW1wbGF0ZSIgPSB0cnVlIC1hICIkaW5zdGFuY2Vfc3BlY2lmaWVkIiA9IGZhbHNlIF07IHRoZW4KKwkJCQlkaXNhYmxlX3NlcnZpY2U9IiRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kci53YW50cy9gZWNobyAkc2VydmljZSB8IHNlZCAncy9AL0AqLydgIgorCQkJZWxzZQorCQkJCWRpc2FibGVfc2VydmljZT0iJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzLyRzZXJ2aWNlIgorCQkJZmkKKwkJCXJtIC1mICRkaXNhYmxlX3NlcnZpY2UKKwkJCVsgLWQgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzIF0gJiYgcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgLXAgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzCisJCQllY2hvICJEaXNhYmxlZCAke2Rpc2FibGVfc2VydmljZSMjJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzL30gZm9yICR3YW50ZWRfYnkuIgorCQlmaQorCWRvbmUKKworCSMgY3JlYXRlIHRoZSByZXF1aXJlZCBzeW1ib2xpYyAnQWxpYXMnIGxpbmtzCisJYWxpYXM9JChzZWQgJy9eQWxpYXNbWzpzcGFjZTpdXSo9L3MsW149XSo9LCxwO2QnICIkUk9PVC8kc2VydmljZV9maWxlIiBcCisJCSAgICAgICAgfCB0ciAnLCcgJ1xuJyBcCisJCSAgICAgICAgfCBncmVwICIkdW5pdF90eXBlc19yZSIpCisKKwlmb3IgciBpbiAkYWxpYXM7IGRvCisJCWlmIFsgIiRhY3Rpb24iID0gImVuYWJsZSIgXTsgdGhlbgorCQkJbWtkaXIgLXAgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtCisJCQlsbiAtcyAkc2VydmljZV9maWxlICRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kcgorCQkJZWNobyAiRW5hYmxlZCAkc2VydmljZSBmb3IgJGFsaWFzLiIKKwkJZWxzZQorCQkJcm0gLWYgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyCisJCQllY2hvICJEaXNhYmxlZCAkc2VydmljZSBmb3IgJGFsaWFzLiIKKwkJZmkKKwlkb25lCisKKwkjIGNhbGwgdXMgZm9yIHRoZSBvdGhlciByZXF1aXJlZCBzY3JpcHRzCisJYWxzbz0kKHNlZCAnL15BbHNvW1s6c3BhY2U6XV0qPS9zLFtePV0qPSwscDtkJyAiJFJPT1QvJHNlcnZpY2VfZmlsZSIgXAorCQkgICB8IHRyICcsJyAnXG4nKQorCWZvciBhIGluICRhbHNvOyBkbworCQllY2hvICJBbHNvPSRhIGZvdW5kIGluICRzZXJ2aWNlIgorCQlpZiBbICIkYWN0aW9uIiA9ICJlbmFibGUiIF07IHRoZW4KKwkJCSQwIC0tcm9vdD0kUk9PVCBlbmFibGUgJGEKKwkJZmkKKwlkb25lCitkb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMC1jcmVhdGUtdm9sYXRpbGUuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwLWNyZWF0ZS12b2xhdGlsZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Y2JlMWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMC1jcmVhdGUtdm9sYXRpbGUuY29uZgpAQCAtMCwwICsxLDcgQEAKKyNUaGlzIGdvZXMgaGFuZC1pbi1oYW5kIHdpdGggdGhlIGJhc2UtZmlsZXMgb2YgT0UtQ29yZS4gVGhlIGZpbGUgbXVzdAorIyBiZSBzb3J0ZWQgYmVmb3JlICdzeXN0ZW1kLmNvbmYnIGJlY3Vhc2UgdGhpcyBhdHRlbXB0cyB0byBjcmVhdGUgYSBmaWxlCisjIGluc2lkZSAvdmFyL2xvZy4KKworCitkCQkvdmFyL3ZvbGF0aWxlL2xvZwkJLQktCS0JLQorZAkJL3Zhci92b2xhdGlsZS90bXAJCTE3NzcJLQktCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAxLXVuaXRzLVByZWZlci1nZXR0eS10by1hZ2V0dHktaW4tY29uc29sZS1zZXR1cC1zeXN0ZW0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAxLXVuaXRzLVByZWZlci1nZXR0eS10by1hZ2V0dHktaW4tY29uc29sZS1zZXR1cC1zeXN0ZW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZhYjVlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDEtdW5pdHMtUHJlZmVyLWdldHR5LXRvLWFnZXR0eS1pbi1jb25zb2xlLXNldHVwLXN5c3RlbS5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDEwMGU1MDYwNGVmYzQwMzIwMDFhMmRlNmE2YjQ3ODUzYzAwMDM4MTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNToyOToxNSArMDAwMAorU3ViamVjdDogW1BBVENIIDAxLzExXSB1bml0czogUHJlZmVyIGdldHR5IHRvIGFnZXR0eSBpbiBjb25zb2xlIHNldHVwIHN5c3RlbWQKKyB1bml0cworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb24gc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHVuaXRzL2dldHR5QC5zZXJ2aWNlLm00ICAgICAgICB8IDIgKy0KKyB1bml0cy9zZXJpYWwtZ2V0dHlALnNlcnZpY2UubTQgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS91bml0cy9nZXR0eUAuc2VydmljZS5tNCBiL3VuaXRzL2dldHR5QC5zZXJ2aWNlLm00CitpbmRleCA0NjE2NGFiLi5iZGY2ZWM4IDEwMDY0NAorLS0tIGEvdW5pdHMvZ2V0dHlALnNlcnZpY2UubTQKKysrKyBiL3VuaXRzL2dldHR5QC5zZXJ2aWNlLm00CitAQCAtMjcsNyArMjcsNyBAQCBDb25kaXRpb25QYXRoRXhpc3RzPS9kZXYvdHR5MAorIAorIFtTZXJ2aWNlXQorICMgdGhlIFZUIGlzIGNsZWFyZWQgYnkgVFRZVlREaXNhbGxvY2F0ZQorLUV4ZWNTdGFydD0tL3NiaW4vYWdldHR5IC0tbm9jbGVhciAlSSAkVEVSTQorK0V4ZWNTdGFydD0tL3NiaW4vZ2V0dHkgLUwgJUkgJFRFUk0KKyBUeXBlPWlkbGUKKyBSZXN0YXJ0PWFsd2F5cworIFJlc3RhcnRTZWM9MAorZGlmZiAtLWdpdCBhL3VuaXRzL3NlcmlhbC1nZXR0eUAuc2VydmljZS5tNCBiL3VuaXRzL3NlcmlhbC1nZXR0eUAuc2VydmljZS5tNAoraW5kZXggNDUyMmQwZC4uZTZkNDk5ZCAxMDA2NDQKKy0tLSBhL3VuaXRzL3NlcmlhbC1nZXR0eUAuc2VydmljZS5tNAorKysrIGIvdW5pdHMvc2VyaWFsLWdldHR5QC5zZXJ2aWNlLm00CitAQCAtMjIsNyArMjIsNyBAQCBCZWZvcmU9Z2V0dHkudGFyZ2V0CisgSWdub3JlT25Jc29sYXRlPXllcworIAorIFtTZXJ2aWNlXQorLUV4ZWNTdGFydD0tL3NiaW4vYWdldHR5IC0ta2VlcC1iYXVkIDExNTIwMCwzODQwMCw5NjAwICVJICRURVJNCisrRXhlY1N0YXJ0PS0vc2Jpbi9nZXR0eSAtTCAxMTUyMDAgJUkgJFRFUk0KKyBUeXBlPWlkbGUKKyBSZXN0YXJ0PWFsd2F5cworIFV0bXBJZGVudGlmaWVyPSVJCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDMtYmluZm10LURvbi10LWluc3RhbGwtZGVwZW5kZW5jeS1saW5rcy1hdC1pbnN0YWxsLXRpbS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDMtYmluZm10LURvbi10LWluc3RhbGwtZGVwZW5kZW5jeS1saW5rcy1hdC1pbnN0YWxsLXRpbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTIwZmQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMy1iaW5mbXQtRG9uLXQtaW5zdGFsbC1kZXBlbmRlbmN5LWxpbmtzLWF0LWluc3RhbGwtdGltLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK0Zyb20gMTg0YTg5Y2FhY2ZhMDBmMDdlNzI3NWJjYTU5MmJkN2RkYTFiNTQxZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjAzOjQ0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMTFdIGJpbmZtdDogRG9uJ3QgaW5zdGFsbCBkZXBlbmRlbmN5IGxpbmtzIGF0IGluc3RhbGwgdGltZQorIGZvciB0aGUgYmluZm10IHNlcnZpY2VzCisKK3VzZSBbSW5zdGFsbF0gYmxvY2tzIHNvIHRoYXQgdGhleSBnZXQgY3JlYXRlZCB3aGVuIHRoZSBzZXJ2aWNlIGlzIGVuYWJsZWQKK2xpa2UgYSB0cmFkaXRpb25hbCBzZXJ2aWNlLgorCitUaGUgW0luc3RhbGxdIGJsb2NrcyB3ZXJlIHJlamVjdGVkIHVwc3RyZWFtIGFzIHRoZXkgZG9uJ3QgaGF2ZSBhIHdheSB0bworImVuYWJsZSIKK2l0IG9uIGluc3RhbGwgd2l0aG91dCBzdGF0aWMgc3ltbGlua3Mgd2hpY2ggY2FuJ3QgYmUgZGlzYWJsZWQsIG9ubHkKK21hc2tlZC4gIFdlCitob3dldmVyIGNhbiBkbyB0aGF0IGluIGEgcG9zdGluc3QuCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkCisKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAtLS0tCisgdW5pdHMvcHJvYy1zeXMtZnMtYmluZm10X21pc2MuYXV0b21vdW50IHwgMyArKysKKyB1bml0cy9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlLmluICAgICAgICAgfCA1ICsrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9NYWtlZmlsZS5hbQorKysrIGdpdC9NYWtlZmlsZS5hbQorQEAgLTQyNzEsMTAgKzQyNzEsNiBAQCBJTlNUQUxMX0RJUlMgKz0gXAorIAkkKHByZWZpeCkvbGliL2JpbmZtdC5kIFwKKyAJJChzeXNjb25mZGlyKS9iaW5mbXQuZAorIAorLVNZU0lOSVRfVEFSR0VUX1dBTlRTICs9IFwKKy0Jc3lzdGVtZC1iaW5mbXQuc2VydmljZSBcCistCXByb2Mtc3lzLWZzLWJpbmZtdF9taXNjLmF1dG9tb3VudAorLQorIGVuZGlmCisgCisgRVhUUkFfRElTVCArPSBcCitJbmRleDogZ2l0L3VuaXRzL3Byb2Mtc3lzLWZzLWJpbmZtdF9taXNjLmF1dG9tb3VudAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3VuaXRzL3Byb2Mtc3lzLWZzLWJpbmZtdF9taXNjLmF1dG9tb3VudAorKysrIGdpdC91bml0cy9wcm9jLXN5cy1mcy1iaW5mbXRfbWlzYy5hdXRvbW91bnQKK0BAIC0xNiwzICsxNiw2IEBAIENvbmRpdGlvblBhdGhJc1JlYWRXcml0ZT0vcHJvYy9zeXMvCisgCisgW0F1dG9tb3VudF0KKyBXaGVyZT0vcHJvYy9zeXMvZnMvYmluZm10X21pc2MKKysKKytbSW5zdGFsbF0KKytXYW50ZWRCeT1zeXNpbml0LnRhcmdldAorSW5kZXg6IGdpdC91bml0cy9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdW5pdHMvc3lzdGVtZC1iaW5mbXQuc2VydmljZS5pbgorKysrIGdpdC91bml0cy9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlLmluCitAQCAtMTEsNiArMTEsOCBAQCBEb2N1bWVudGF0aW9uPW1hbjpzeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlCisgRG9jdW1lbnRhdGlvbj1odHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9Eb2N1bWVudGF0aW9uL2JpbmZtdF9taXNjLnR4dAorIERlZmF1bHREZXBlbmRlbmNpZXM9bm8KKyBDb25mbGljdHM9c2h1dGRvd24udGFyZ2V0CisrV2FudHM9cHJvYy1zeXMtZnMtYmluZm10X21pc2MuYXV0b21vdW50CisrCisgQWZ0ZXI9cHJvYy1zeXMtZnMtYmluZm10X21pc2MuYXV0b21vdW50CisgQmVmb3JlPXN5c2luaXQudGFyZ2V0IHNodXRkb3duLnRhcmdldAorIENvbmRpdGlvblBhdGhJc1JlYWRXcml0ZT0vcHJvYy9zeXMvCitAQCAtMjUsMyArMjcsNiBAQCBUeXBlPW9uZXNob3QKKyBSZW1haW5BZnRlckV4aXQ9eWVzCisgRXhlY1N0YXJ0PUByb290bGliZXhlY2RpckAvc3lzdGVtZC1iaW5mbXQKKyBUaW1lb3V0U2VjPTkwcworKworK1tJbnN0YWxsXQorK1dhbnRlZEJ5PXN5c2luaXQudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA0LWNvbmZpZ3VyZS1DaGVjay1mb3ItYWRkaXRpb25hbC1mZWF0dXJlcy10aGF0LXVjbGliYy0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA0LWNvbmZpZ3VyZS1DaGVjay1mb3ItYWRkaXRpb25hbC1mZWF0dXJlcy10aGF0LXVjbGliYy0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA3OGRhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDQtY29uZmlndXJlLUNoZWNrLWZvci1hZGRpdGlvbmFsLWZlYXR1cmVzLXRoYXQtdWNsaWJjLS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIDRlMmU4ZGJmM2YyM2FiN2RjYTMyMjg2Y2MwZjM3YmZmNmFjNDllMjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNTowNTo0NSArMDAwMAorU3ViamVjdDogW1BBVENIIDA0LzExXSBjb25maWd1cmU6IENoZWNrIGZvciBhZGRpdGlvbmFsIGZlYXR1cmVzIHRoYXQgdWNsaWJjCisgZG9lc250IHN1cHBvcnQKKworVGhpcyBoZWxwcyBpbiBzdXBwb3J0aW5nIHVjbGliYyB3aGljaCBkb2VzIG5vdCBoYXZlIGFsbCBmZWF0dXJlcyB0aGF0CitnbGliYyBtaWdodCBoYXZlCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtubyBkZXNpcmUgZm9yIHVjbGliYyBzdXBwb3J0XQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMTggKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKykKKworSW5kZXg6IGdpdC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9jb25maWd1cmUuYWMKKysrKyBnaXQvY29uZmlndXJlLmFjCitAQCAtMTEwLDYgKzExMCwyNCBAQCBBQ19QQVRIX1BST0coW1VNT1VOVF9QQVRIXSwgW3Vtb3VudF0sIFsvCisgCisgQVNfSUYoWyEgbG4gLS1yZWxhdGl2ZSAtLWhlbHAgPiAvZGV2L251bGwgMj4mMV0sIFtBQ19NU0dfRVJST1IoWyoqKiBsbiBkb2Vzbid0IHN1cHBvcnQgLS1yZWxhdGl2ZSAqKipdKV0pCisgCisrIyBjaGVjayBmb3IgZmV3IGZ1bmN0aW9ucyBub3QgaW1wbGVtZW50ZWQgaW4gdUNsaWJjCisrCisrQUNfQ0hFQ0tfRlVOQ1NfT05DRShta29zdGVtcCBleGVjdnBlIHBvc2l4X2ZhbGxvY2F0ZSkKKysKKysjIGNoZWNrIGZvciAlbXMgZm9ybWF0IHN1cHBvcnQgLSBhc3N1bWUgYWx3YXlzIG5vIGlmIGNyb3NzIGNvbXBpbGluZworKworK0FDX01TR19DSEVDS0lORyhbd2hldGhlciAlbXMgZm9ybWF0IGlzIHN1cHBvcnRlZCBieSAqc2NhbmZdKQorKworK0FDX0xJTktfSUZFTFNFKAorKwlbQUNfTEFOR19QUk9HUkFNKFsKKysJICNpbmNsdWRlIDxzdGRpby5oPgorKwkgXSxbCisrCSAgICBjaGFyICpidWYxLCAqYnVmMiwgKmJ1ZjMsIHN0cj0iMSAyLjMgYWJjZGUiIDsKKysJICAgIGludCByYyA9IHNzY2FuZihzdHIsICIlbXMgJW1zICVtcyIsICZidWYxLCAmYnVmMiwgJmJ1ZjMpIDsKKysJICAgIHJldHVybiAocmM9PTMpPzA6MTtdKV0sCisrCVtBQ19ERUZJTkUoW0hBVkVfTVNGT1JNQVRdLCBbMV0sIFtEZWZpbmUgaWYgJW1zIGZvcm1hdCBpcyBzdXBwb3J0ZWQgYnkgKnNjYW5mLl0pXSwKKysJW0FDX01TR19SRVNVTFQoW25vXSldKQorKworIE00X0RFRklORVM9CisgCisgQUNfQ0hFQ0tfVE9PTChPQkpDT1BZLCBvYmpjb3B5KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNS1uc3Bhd24tVXNlLWV4ZWN2cGUtb25seS13aGVuLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA1LW5zcGF3bi1Vc2UtZXhlY3ZwZS1vbmx5LXdoZW4tbGliYy1zdXBwb3J0cy1pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWEwMDg4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNS1uc3Bhd24tVXNlLWV4ZWN2cGUtb25seS13aGVuLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSBhNzQxN2MyZTY5NTBkNTVjMjJjMWIwZDE1NzgzODk4YjhmZjIyOWVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDU6MTA6MzcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8xMV0gbnNwYXduOiBVc2UgZXhlY3ZwZSBvbmx5IHdoZW4gbGliYyBzdXBwb3J0cyBpdAorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZCBbbm8gZGVzaXJlIGZvciB1Y2xpYmMgc3VwcG9ydF0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9uc3Bhd24vbnNwYXduLmMgfCA3ICsrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspCisKK0luZGV4OiBnaXQvc3JjL25zcGF3bi9uc3Bhd24uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9uc3Bhd24vbnNwYXduLmMKKysrKyBnaXQvc3JjL25zcGF3bi9uc3Bhd24uYworQEAgLTE0Myw2ICsxNDMsOCBAQCB0eXBlZGVmIHN0cnVjdCBDdXN0b21Nb3VudCB7CisgICAgICAgICBjaGFyICoqbG93ZXI7CisgfSBDdXN0b21Nb3VudDsKKyAKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrCisgc3RhdGljIGNoYXIgKmFyZ19kaXJlY3RvcnkgPSBOVUxMOworIHN0YXRpYyBjaGFyICphcmdfdGVtcGxhdGUgPSBOVUxMOworIHN0YXRpYyBjaGFyICphcmdfdXNlciA9IE5VTEw7CitAQCAtNDIzOCw3ICs0MjQwLDEyIEBAIHN0YXRpYyBpbnQgaW5uZXJfY2hpbGQoCisgICAgICAgICAgICAgICAgIGFbMF0gPSAoY2hhciopICIvc2Jpbi9pbml0IjsKKyAgICAgICAgICAgICAgICAgZXhlY3ZlKGFbMF0sIGEsIGVudl91c2UpOworICAgICAgICAgfSBlbHNlIGlmIChhcmdjID4gb3B0aW5kKQorKyNpZmRlZiBIQVZFX0VYRUNWUEUKKyAgICAgICAgICAgICAgICAgZXhlY3ZwZShhcmd2W29wdGluZF0sIGFyZ3YgKyBvcHRpbmQsIGVudl91c2UpOworKyNlbHNlCisrICAgICAgICAgICAgICAgIGVudmlyb24gPSBlbnZfdXNlOworKyAgICAgICAgICAgICAgICBleGVjdnAoYXJndltvcHRpbmRdLCBhcmd2ICsgb3B0aW5kKTsKKysjZW5kaWYgLyogSEFWRV9FWEVDVlBFICovCisgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgY2hkaXIoaG9tZSA/IGhvbWUgOiAiL3Jvb3QiKTsKKyAgICAgICAgICAgICAgICAgZXhlY2xlKCIvYmluL2Jhc2giLCAiLWJhc2giLCBOVUxMLCBlbnZfdXNlKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDYtam91cm5hbC1Vc2UtcG9zaXgtZmFsbG9jYXRlLW9ubHktaWYtYXZhaWxhYmxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNi1qb3VybmFsLVVzZS1wb3NpeC1mYWxsb2NhdGUtb25seS1pZi1hdmFpbGFibGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMxZGQ3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDYtam91cm5hbC1Vc2UtcG9zaXgtZmFsbG9jYXRlLW9ubHktaWYtYXZhaWxhYmxlLnBhdGNoCkBAIC0wLDAgKzEsOTYgQEAKK0Zyb20gMzRhNjFiNmM5ZWVkM2ZhZDM2MDA2NmZiNjMxMzJlYmM3ZTBhYWFhNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjEyOjQ4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMTFdIGpvdXJuYWw6IFVzZSBwb3NpeCBmYWxsb2NhdGUgb25seSBpZiBhdmFpbGFibGUKKworU29tZSBhcmNoaXRlY3R1cmUgcG9ydHMgaW4gdWNsaWJjIGRpZCBub3Qgc3VwcG9ydCBpdCBpbiBwYXN0CisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtubyBkZXNpcmUgZm9yIHVjbGliYyBzdXBwb3J0XQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2pvdXJuYWwvam91cm5hbC1maWxlLmMgIHwgMTYgKysrKysrKysrKysrKysrLQorIHNyYy9qb3VybmFsL2pvdXJuYWxkLWttc2cuYyB8IDE1ICsrKysrKysrKysrKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9qb3VybmFsL2pvdXJuYWwtZmlsZS5jIGIvc3JjL2pvdXJuYWwvam91cm5hbC1maWxlLmMKK2luZGV4IDI4NDVlMDUuLjk0MzExNzEgMTAwNjQ0CistLS0gYS9zcmMvam91cm5hbC9qb3VybmFsLWZpbGUuYworKysrIGIvc3JjL2pvdXJuYWwvam91cm5hbC1maWxlLmMKK0BAIC0zNiw2ICszNiw4IEBACisgI2luY2x1ZGUgImNvbXByZXNzLmgiCisgI2luY2x1ZGUgImZzcHJnLmgiCisgCisrI2luY2x1ZGUgImNvbmZpZy5oIgorKworICNkZWZpbmUgREVGQVVMVF9EQVRBX0hBU0hfVEFCTEVfU0laRSAoMjA0N1VMTCpzaXplb2YoSGFzaEl0ZW0pKQorICNkZWZpbmUgREVGQVVMVF9GSUVMRF9IQVNIX1RBQkxFX1NJWkUgKDMzM1VMTCpzaXplb2YoSGFzaEl0ZW0pKQorIAorQEAgLTM1NCw3ICszNTYsNyBAQCBzdGF0aWMgaW50IGpvdXJuYWxfZmlsZV9mc3RhdChKb3VybmFsRmlsZSAqZikgeworIAorIHN0YXRpYyBpbnQgam91cm5hbF9maWxlX2FsbG9jYXRlKEpvdXJuYWxGaWxlICpmLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUpIHsKKyAgICAgICAgIHVpbnQ2NF90IG9sZF9zaXplLCBuZXdfc2l6ZTsKKy0gICAgICAgIGludCByOworKyAgICAgICAgaW50IHIgPSAwOworIAorICAgICAgICAgYXNzZXJ0KGYpOworIAorQEAgLTQxOCw5ICs0MjAsMjEgQEAgc3RhdGljIGludCBqb3VybmFsX2ZpbGVfYWxsb2NhdGUoSm91cm5hbEZpbGUgKmYsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSkKKyAgICAgICAgIC8qIE5vdGUgdGhhdCB0aGUgZ2xpYmMgZmFsbG9jYXRlKCkgZmFsbGJhY2sgaXMgdmVyeQorICAgICAgICAgICAgaW5lZmZpY2llbnQsIGhlbmNlIHdlIHRyeSB0byBtaW5pbWl6ZSB0aGUgYWxsb2NhdGlvbiBhcmVhCisgICAgICAgICAgICBhcyB3ZSBjYW4uICovCisrI2lmZGVmIEhBVkVfUE9TSVhfRkFMTE9DQVRFCisgICAgICAgICByID0gcG9zaXhfZmFsbG9jYXRlKGYtPmZkLCBvbGRfc2l6ZSwgbmV3X3NpemUgLSBvbGRfc2l6ZSk7CisgICAgICAgICBpZiAociAhPSAwKQorICAgICAgICAgICAgICAgICByZXR1cm4gLXI7CisrI2Vsc2UKKysgICAgICAgIC8qIFdyaXRlIHNvbWV0aGluZyBldmVyeSA1MTIgYnl0ZXMgdG8gbWFrZSBzdXJlIHRoZSBibG9jayBpcyBhbGxvY2F0ZWQgKi8KKysgICAgICAgIHVpbnQ2NF90IGxlbiA9IG5ld19zaXplIC0gb2xkX3NpemU7CisrICAgICAgICB1aW50NjRfdCBvZmZzZXQgPSBvbGRfc2l6ZTsKKysgICAgICAgIGZvciAob2Zmc2V0ICs9IChsZW4tMSkgJSA1MTI7IGxlbiA+IDA7IG9mZnNldCArPSA1MTIpIHsKKysgICAgICAgICAgICAgICAgbGVuIC09IDUxMjsKKysgICAgICAgICAgICAgICAgaWYgKHB3cml0ZShmLT5mZCwgIiIsIDEsIG9mZnNldCkgIT0gMSkKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLWVycm5vOworKyAgICAgICAgfQorKworKyNlbmRpZiAvKiBIQVZFX1BPU0lYX0ZBTExPQ0FURSAqLworIAorICAgICAgICAgZi0+aGVhZGVyLT5hcmVuYV9zaXplID0gaHRvbGU2NChuZXdfc2l6ZSAtIGxlNjR0b2goZi0+aGVhZGVyLT5oZWFkZXJfc2l6ZSkpOworIAorZGlmZiAtLWdpdCBhL3NyYy9qb3VybmFsL2pvdXJuYWxkLWttc2cuYyBiL3NyYy9qb3VybmFsL2pvdXJuYWxkLWttc2cuYworaW5kZXggYzQyMTZjNC4uYTk5OGVkNSAxMDA2NDQKKy0tLSBhL3NyYy9qb3VybmFsL2pvdXJuYWxkLWttc2cuYworKysrIGIvc3JjL2pvdXJuYWwvam91cm5hbGQta21zZy5jCitAQCAtNDM2LDYgKzQzNiw3IEBAIGZhaWw6CisgaW50IHNlcnZlcl9vcGVuX2tlcm5lbF9zZXFudW0oU2VydmVyICpzKSB7CisgICAgICAgICBfY2xlYW51cF9jbG9zZV8gaW50IGZkOworICAgICAgICAgdWludDY0X3QgKnA7CisrICAgICAgICBpbnQgciA9IDA7CisgCisgICAgICAgICBhc3NlcnQocyk7CisgCitAQCAtNDQ5LDcgKzQ1MCwxOSBAQCBpbnQgc2VydmVyX29wZW5fa2VybmVsX3NlcW51bShTZXJ2ZXIgKnMpIHsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICB9CisgCistICAgICAgICBpZiAocG9zaXhfZmFsbG9jYXRlKGZkLCAwLCBzaXplb2YodWludDY0X3QpKSA8IDApIHsKKysjaWZkZWYgSEFWRV9QT1NJWF9GQUxMT0NBVEUKKysgICAgICAgIHIgPSBwb3NpeF9mYWxsb2NhdGUoZmQsIDAsIHNpemVvZih1aW50NjRfdCkpOworKyNlbHNlCisrICAgICAgICAvKiBVc2UgZ29vZCBvbGQgbWV0aG9kIHRvIHdyaXRlIHplcm9zIGludG8gdGhlIGpvdXJuYWwgZmlsZQorKyAgICAgICAgICAgcGVyaGFwcyB2ZXJ5IGluZWZmaWNpZW50IHlldCB3b3JraW5nLiAqLworKyAgICAgICAgY2hhciAqYnVmID0gYWxsb2NhKHNpemVvZih1aW50NjRfdCkpOworKyAgICAgICAgb2ZmX3Qgb2xkcG9zID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKTsKKysgICAgICAgIGJ6ZXJvKGJ1Ziwgc2l6ZW9mKHVpbnQ2NF90KSk7CisrICAgICAgICBsc2VlayhmZCwgMCwgU0VFS19TRVQpOworKyAgICAgICAgciA9IHdyaXRlKGZkLCBidWYsIHNpemVvZih1aW50NjRfdCkpOworKyAgICAgICAgbHNlZWsoZmQsIG9sZHBvcywgU0VFS19TRVQpOworKyNlbmRpZiAvKiBIQVZFX1BPU0lYX0ZBTExPQ0FURSAqLworKyAgICAgICAgaWYgKHIgPCAwKSB7CisgICAgICAgICAgICAgICAgIGxvZ19lcnJvcl9lcnJubyhlcnJubywgIkZhaWxlZCB0byBhbGxvY2F0ZSBzZXF1ZW50aWFsIG51bWJlciBmaWxlLCBpZ25vcmluZzogJW0iKTsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICB9CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDctdXRpbC1Vc2UtbWtvc3RlbXAtb25seS1pZi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNy11dGlsLVVzZS1ta29zdGVtcC1vbmx5LWlmLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhYjdjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDctdXRpbC1Vc2UtbWtvc3RlbXAtb25seS1pZi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gZjc3MTQwN2QzZTAyODhjYTBjMDZhODk0MTk0ZDNkZGFkNjliOWE4ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjE3OjA1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvMTFdIHV0aWw6IFVzZSBta29zdGVtcCBvbmx5IGlmIGxpYmMgc3VwcG9ydHMgaXQKKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW25vIGRlc2lyZSBmb3IgdWNsaWJjIHN1cHBvcnRdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvYmFzaWMvdXRpbC5jIHwgOCArKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy91dGlsLmMgYi9zcmMvYmFzaWMvdXRpbC5jCitpbmRleCBkYzY1MjgwLi43MmY0NjY1IDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL3V0aWwuYworKysrIGIvc3JjL2Jhc2ljL3V0aWwuYworQEAgLTk3LDYgKzk3LDggQEAKKyAjaW5jbHVkZSAiZGVmLmgiCisgI2luY2x1ZGUgInNwYXJzZS1lbmRpYW4uaCIKKyAKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrCisgaW50IHNhdmVkX2FyZ2MgPSAwOworIGNoYXIgKipzYXZlZF9hcmd2ID0gTlVMTDsKKyAKK0BAIC02NjgyLDcgKzY2ODQsMTMgQEAgaW50IG1rb3N0ZW1wX3NhZmUoY2hhciAqcGF0dGVybiwgaW50IGZsYWdzKSB7CisgCisgICAgICAgICB1ID0gdW1hc2soMDc3KTsKKyAKKysjaWZkZWYgSEFWRV9NS09TVEVNUAorICAgICAgICAgZmQgPSBta29zdGVtcChwYXR0ZXJuLCBmbGFncyk7CisrI2Vsc2UKKysgICAgICAgIGZkID0gbWtzdGVtcChwYXR0ZXJuKTsKKysgICAgICAgIGlmIChmZCA+PSAwKSBmY250bChmZCwgRl9TRVRGRCwgZmxhZ3MpOworKyNlbmRpZiAvKiBIQVZFX01LT1NURU1QICovCisrCisgICAgICAgICBpZiAoZmQgPCAwKQorICAgICAgICAgICAgICAgICByZXR1cm4gLWVycm5vOworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA4LXV0aWwtYnlwYXNzLXVuaW1wbGVtZW50ZWQtX1NDX1BIWVNfUEFHRVMtc3lzdGVtLWNvbmYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA4LXV0aWwtYnlwYXNzLXVuaW1wbGVtZW50ZWQtX1NDX1BIWVNfUEFHRVMtc3lzdGVtLWNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y0ZDRkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDgtdXRpbC1ieXBhc3MtdW5pbXBsZW1lbnRlZC1fU0NfUEhZU19QQUdFUy1zeXN0ZW0tY29uZi5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGI0NWVhM2JmZDY2MzU3NDRjOGE2Yjc0ZDBhYzcwMWI0NGJiMWQyOTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNToxOTozNyArMDAwMAorU3ViamVjdDogW1BBVENIIDA4LzExXSB1dGlsOiBieXBhc3MgdW5pbXBsZW1lbnRlZCBfU0NfUEhZU19QQUdFUyBzeXN0ZW0KKyBjb25maWd1cmF0aW9uIEFQSSBvbiB1Y2xpYmMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1Y2xpYmMtc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvYmFzaWMvdXRpbC5jIHwgMTUgKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy91dGlsLmMgYi9zcmMvYmFzaWMvdXRpbC5jCitpbmRleCA3MmY0NjY1Li5jYmJlM2IxIDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL3V0aWwuYworKysrIGIvc3JjL2Jhc2ljL3V0aWwuYworQEAgLTY3OTMsMTAgKzY3OTMsMjUgQEAgdWludDY0X3QgcGh5c2ljYWxfbWVtb3J5KHZvaWQpIHsKKyAgICAgICAgIC8qIFdlIHJldHVybiB0aGlzIGFzIHVpbnQ2NF90IGluIGNhc2Ugd2UgYXJlIHJ1bm5pbmcgYXMgMzJiaXQKKyAgICAgICAgICAqIHByb2Nlc3Mgb24gYSA2NGJpdCBrZXJuZWwgd2l0aCBodWdlIGFtb3VudHMgb2YgbWVtb3J5ICovCisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysgICAgICAgIGNoYXIgbGluZVsxMjhdOworKyAgICAgICAgRklMRSAqZiA9IGZvcGVuKCIvcHJvYy9tZW1pbmZvIiwgInIiKTsKKysgICAgICAgIGlmIChmID09IE5VTEwpCisrICAgICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgd2hpbGUgKCFmZW9mKGYpICYmIGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKS0xLCBmKSkgeworKyAgICAgICAgICAgICAgICBpZiAoc3NjYW5mKGxpbmUsICJNZW1Ub3RhbDogJWwga0IiLCAmbWVtKSA9PSAxKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgbWVtICo9IDEwMjQ7CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGZjbG9zZShmKTsKKysgICAgICAgIHJldHVybiAodWludDY0X3QpIG1lbTsKKysjZWxzZQorICAgICAgICAgbWVtID0gc3lzY29uZihfU0NfUEhZU19QQUdFUyk7CisgICAgICAgICBhc3NlcnQobWVtID4gMCk7CisgCisgICAgICAgICByZXR1cm4gKHVpbnQ2NF90KSBtZW0gKiAodWludDY0X3QpIHBhZ2Vfc2l6ZSgpOworKyNlbmRpZgorIH0KKyAKKyB2b2lkIGhleGR1bXAoRklMRSAqZiwgY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHMpIHsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwOS1zeXN2LWdlbmVyYXRvci1hZGQtc3VwcG9ydC1mb3ItZXhlY3V0aW5nLXNjcmlwdHMtdW5kLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwOS1zeXN2LWdlbmVyYXRvci1hZGQtc3VwcG9ydC1mb3ItZXhlY3V0aW5nLXNjcmlwdHMtdW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYTNlODMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA5LXN5c3YtZ2VuZXJhdG9yLWFkZC1zdXBwb3J0LWZvci1leGVjdXRpbmctc2NyaXB0cy11bmQucGF0Y2gKQEAgLTAsMCArMSwxNDMgQEAKK0Zyb20gODc5MWI1YjM5MzRjNTU2OTQ4NzJiNjkxNWE2NzM0MDY4M2VhZDkxYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjIyOjUyICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMTFdIHN5c3YtZ2VuZXJhdG9yOiBhZGQgc3VwcG9ydCBmb3IgZXhlY3V0aW5nIHNjcmlwdHMgdW5kZXIKKyAvZXRjL3JjUy5kLworCitUbyBiZSBjb21wYXRpYmxlLCBhbGwgc2VydmljZXMgdHJhbnNsYXRlZCBmcm9tIHNjcmlwdHMgdW5kZXIgL2V0Yy9yY1MuZCB3b3VsZAorcnVuIGJlZm9yZSBzZXJ2aWNlcyB0cmFuc2xhdGVkIGZyb20gc2NyaXB0cyB1bmRlciAvZXRjL3JjTi5kLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL3N5c3YtZ2VuZXJhdG9yL3N5c3YtZ2VuZXJhdG9yLmMgfCA1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDM4IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3N5c3YtZ2VuZXJhdG9yL3N5c3YtZ2VuZXJhdG9yLmMgYi9zcmMvc3lzdi1nZW5lcmF0b3Ivc3lzdi1nZW5lcmF0b3IuYworaW5kZXggYmQ2N2YzMi4uNjc1NmNjNiAxMDA2NDQKKy0tLSBhL3NyYy9zeXN2LWdlbmVyYXRvci9zeXN2LWdlbmVyYXRvci5jCisrKysgYi9zcmMvc3lzdi1nZW5lcmF0b3Ivc3lzdi1nZW5lcmF0b3IuYworQEAgLTQyLDcgKzQyLDggQEAKKyAKKyB0eXBlZGVmIGVudW0gUnVubGV2ZWxUeXBlIHsKKyAgICAgICAgIFJVTkxFVkVMX1VQLAorLSAgICAgICAgUlVOTEVWRUxfRE9XTgorKyAgICAgICAgUlVOTEVWRUxfRE9XTiwKKysgICAgICAgIFJVTkxFVkVMX1NZU0lOSVQKKyB9IFJ1bmxldmVsVHlwZTsKKyAKKyBzdGF0aWMgY29uc3Qgc3RydWN0IHsKK0BAIC01Nyw2ICs1OCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgICAgeyAicmM0LmQiLCAgU1BFQ0lBTF9NVUxUSV9VU0VSX1RBUkdFVCwgUlVOTEVWRUxfVVAgfSwKKyAgICAgICAgIHsgInJjNS5kIiwgIFNQRUNJQUxfR1JBUEhJQ0FMX1RBUkdFVCwgIFJVTkxFVkVMX1VQIH0sCisgCisrICAgICAgICAvKiBEZWJpYW4gc3R5bGUgcmNTLmQsIGFsc28gYWRvcHRlZCBieSBPRSAqLworKyAgICAgICAgeyAicmNTLmQiLCAgU1BFQ0lBTF9TWVNJTklUX1RBUkdFVCwgICBSVU5MRVZFTF9TWVNJTklUfSwKKysKKyAgICAgICAgIC8qIFN0YW5kYXJkIFN5c1YgcnVubGV2ZWxzIGZvciBzaHV0ZG93biAqLworICAgICAgICAgeyAicmMwLmQiLCAgU1BFQ0lBTF9QT1dFUk9GRl9UQVJHRVQsICBSVU5MRVZFTF9ET1dOIH0sCisgICAgICAgICB7ICJyYzYuZCIsICBTUEVDSUFMX1JFQk9PVF9UQVJHRVQsICAgIFJVTkxFVkVMX0RPV04gfQorQEAgLTY1LDcgKzY5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgICAgICBkaXJlY3RvcmllcyBpbiB0aGlzIG9yZGVyLCBhbmQgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdAorICAgICAgICAgICAgc3lzdl9zdGFydF9wcmlvcml0eSBpcyBrbm93biB3aGVuIHdlIGZpcnN0IGxvYWQgdGhlCisgICAgICAgICAgICB1bml0LiBBbmQgdGhhdCB2YWx1ZSB3ZSBvbmx5IGtub3cgZnJvbSBTIGxpbmtzLiBIZW5jZQorLSAgICAgICAgICAgVVAgbXVzdCBiZSByZWFkIGJlZm9yZSBET1dOICovCisrICAgICAgICAgICBVUC9TWVNJTklUIG11c3QgYmUgcmVhZCBiZWZvcmUgRE9XTiAqLworIH07CisgCisgdHlwZWRlZiBzdHJ1Y3QgU3lzdlN0dWIgeworQEAgLTgxLDYgKzg1LDggQEAgdHlwZWRlZiBzdHJ1Y3QgU3lzdlN0dWIgeworICAgICAgICAgY2hhciAqKmNvbmZsaWN0czsKKyAgICAgICAgIGJvb2wgaGFzX2xzYjsKKyAgICAgICAgIGJvb2wgcmVsb2FkOworKyAgICAgICAgYm9vbCBkZWZhdWx0X2RlcGVuZGVuY2llczsKKysgICAgICAgIGJvb2wgZnJvbV9yY3NkOworIH0gU3lzdlN0dWI7CisgCisgY29uc3QgY2hhciAqYXJnX2Rlc3QgPSAiL3RtcCI7CitAQCAtMTgzLDYgKzE4OSw5IEBAIHN0YXRpYyBpbnQgZ2VuZXJhdGVfdW5pdF9maWxlKFN5c3ZTdHViICpzKSB7CisgICAgICAgICAgICAgICAgICJEZXNjcmlwdGlvbj0lc1xuIiwKKyAgICAgICAgICAgICAgICAgcy0+cGF0aCwgcy0+ZGVzY3JpcHRpb24pOworIAorKyAgICAgICAgaWYgKCFzLT5kZWZhdWx0X2RlcGVuZGVuY2llcykKKysgICAgICAgICAgICAgICAgZnByaW50ZihmLCAiRGVmYXVsdERlcGVuZGVuY2llcz1ub1xuIik7CisrCisgICAgICAgICBpZiAoIWlzZW1wdHkoYmVmb3JlKSkKKyAgICAgICAgICAgICAgICAgZnByaW50ZihmLCAiQmVmb3JlPSVzXG4iLCBiZWZvcmUpOworICAgICAgICAgaWYgKCFpc2VtcHR5KGFmdGVyKSkKK0BAIC03MDQsMTggKzcxMywzMCBAQCBzdGF0aWMgaW50IGZpeF9vcmRlcihTeXN2U3R1YiAqcywgSGFzaG1hcCAqYWxsX3NlcnZpY2VzKSB7CisgICAgICAgICAgICAgICAgIGlmIChzLT5oYXNfbHNiICYmIG90aGVyLT5oYXNfbHNiKQorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworIAorLSAgICAgICAgICAgICAgICBpZiAob3RoZXItPnN5c3Zfc3RhcnRfcHJpb3JpdHkgPCBzLT5zeXN2X3N0YXJ0X3ByaW9yaXR5KSB7CistICAgICAgICAgICAgICAgICAgICAgICAgciA9IHN0cnZfZXh0ZW5kKCZzLT5hZnRlciwgb3RoZXItPm5hbWUpOworKyAgICAgICAgICAgICAgICAvKiBBbGwgc2NyaXB0cyB1bmRlciAvZXRjL3JjUy5kIHNob3VsZCBleGVjdXRlIGJlZm9yZSBzY3JpcHRzIHVuZGVyCisrICAgICAgICAgICAgICAgICAqIC9ldGMvcmNOLmQgKi8KKysgICAgICAgICAgICAgICAgaWYgKCFvdGhlci0+ZnJvbV9yY3NkICYmIHMtPmZyb21fcmNzZCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBzdHJ2X2V4dGVuZCgmcy0+YmVmb3JlLCBvdGhlci0+bmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ19vb20oKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlIGlmIChvdGhlci0+c3lzdl9zdGFydF9wcmlvcml0eSA+IHMtPnN5c3Zfc3RhcnRfcHJpb3JpdHkpIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICByID0gc3Rydl9leHRlbmQoJnMtPmJlZm9yZSwgb3RoZXItPm5hbWUpOworKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG90aGVyLT5mcm9tX3Jjc2QgJiYgIXMtPmZyb21fcmNzZCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBzdHJ2X2V4dGVuZCgmcy0+YWZ0ZXIsIG90aGVyLT5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX29vbSgpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXItPnN5c3Zfc3RhcnRfcHJpb3JpdHkgPCBzLT5zeXN2X3N0YXJ0X3ByaW9yaXR5KSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gc3Rydl9leHRlbmQoJnMtPmFmdGVyLCBvdGhlci0+bmFtZSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IDApCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfb29tKCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG90aGVyLT5zeXN2X3N0YXJ0X3ByaW9yaXR5ID4gcy0+c3lzdl9zdGFydF9wcmlvcml0eSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHN0cnZfZXh0ZW5kKCZzLT5iZWZvcmUsIG90aGVyLT5uYW1lKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyIDwgMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ19vb20oKTsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAgICAgIC8qIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgY29tcGFyZSB0aGUgbmFtZSBoZXJlIGxleGljb2dyYXBoaWNhbGx5PyAqLworICAgICAgICAgfQorQEAgLTc3OCw2ICs3OTksOCBAQCBzdGF0aWMgaW50IGVudW1lcmF0ZV9zeXN2KExvb2t1cFBhdGhzIGxwLCBIYXNobWFwICphbGxfc2VydmljZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfb29tKCk7CisgCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS0+c3lzdl9zdGFydF9wcmlvcml0eSA9IC0xOworKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPmRlZmF1bHRfZGVwZW5kZW5jaWVzID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5mcm9tX3Jjc2QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5wYXRoID0gZnBhdGg7CisgCitAQCAtODY0LDkgKzg4NywxMSBAQCBzdGF0aWMgaW50IHNldF9kZXBlbmRlbmNpZXNfZnJvbV9yY25kKExvb2t1cFBhdGhzIGxwLCBIYXNobWFwICphbGxfc2VydmljZXMpIHsKKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZS0+ZF9uYW1lWzBdID09ICdTJykgIHsKKyAKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9VUCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmNuZF90YWJsZVtpXS50eXBlID09IFJVTkxFVkVMX1VQIHx8IHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9TWVNJTklUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS0+c3lzdl9zdGFydF9wcmlvcml0eSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVgoYSoxMCArIGIsIHNlcnZpY2UtPnN5c3Zfc3RhcnRfcHJpb3JpdHkpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPmRlZmF1bHRfZGVwZW5kZW5jaWVzID0gKHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9TWVNJTklUKT9mYWxzZTp0cnVlOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPmZyb21fcmNzZCA9IChyY25kX3RhYmxlW2ldLnR5cGUgPT0gUlVOTEVWRUxfU1lTSU5JVCk/dHJ1ZTpmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gc2V0X2Vuc3VyZV9hbGxvY2F0ZWQoJnJ1bmxldmVsX3NlcnZpY2VzW2ldLCBOVUxMKTsKK0BAIC04NzgsNyArOTAzLDggQEAgc3RhdGljIGludCBzZXRfZGVwZW5kZW5jaWVzX2Zyb21fcmNuZChMb29rdXBQYXRocyBscCwgSGFzaG1hcCAqYWxsX3NlcnZpY2VzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlLT5kX25hbWVbMF0gPT0gJ0snICYmCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyY25kX3RhYmxlW2ldLnR5cGUgPT0gUlVOTEVWRUxfRE9XTikpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9ET1dOIHx8CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByY25kX3RhYmxlW2ldLnR5cGUgPT0gUlVOTEVWRUxfU1lTSU5JVCkpIHsKKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHNldF9lbnN1cmVfYWxsb2NhdGVkKCZzaHV0ZG93bl9zZXJ2aWNlcywgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyIDwgMCkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMC1NYWtlLXJvb3Qtcy1ob21lLWRpcmVjdG9yeS1jb25maWd1cmFibGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDEwLU1ha2Utcm9vdC1zLWhvbWUtZGlyZWN0b3J5LWNvbmZpZ3VyYWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDdmZjViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMC1NYWtlLXJvb3Qtcy1ob21lLWRpcmVjdG9yeS1jb25maWd1cmFibGUucGF0Y2gKQEAgLTAsMCArMSwxODEgQEAKK0Zyb20gM2RjNzMxYzFkMjcwZTJlMTQzZGU2MjFkYjliZDg5ODI5OWZkODQ5ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjI0OjQ5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMTFdIE1ha2Ugcm9vdCdzIGhvbWUgZGlyZWN0b3J5IGNvbmZpZ3VyYWJsZQorCitPcGVuRW1iZWRkZWQgaGFzIGEgY29uZmlndXJhYmxlIGhvbWUgZGlyZWN0b3J5IGZvciByb290LiBBbGxvdworc3lzdGVtZCB0byBiZSBidWlsdCB1c2luZyBpdHMgaWRlYSBvZiB3aGF0IHJvb3QncyBob21lIGRpcmVjdG9yeQorc2hvdWxkIGJlLgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAorVXBzdHJlYW0gd2FudHMgdG8gaGF2ZSBhIHVuaWZpZWQgaGllcmFyY2h5IHdoZXJlIGV2ZXJ5b25lIGlzCit1c2luZyB0aGUgc2FtZSByb290IGZvbGRlci4KK2h0dHBzOi8vZ2l0aHViLmNvbS9zeXN0ZW1kL3N5c3RlbWQvaXNzdWVzLzU0MQorCitTaWduZWQtb2ZmLWJ5OiBEYW4gTWNHcmVnb3IgPGRhbi5tY2dyZWdvckB1c2Fzay5jYT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgfCAyICsrCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgIHwgNyArKysrKysrCisgc3JjL2NvcmUvdW5pdC1wcmludGYuYyAgICAgICAgICAgIHwgMiArLQorIHNyYy9uc3Bhd24vbnNwYXduLmMgICAgICAgICAgICAgICB8IDQgKystLQorIHNyYy9iYXNpYy91dGlsLmMgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgdW5pdHMvY29uc29sZS1zaGVsbC5zZXJ2aWNlLm00LmluIHwgNCArKy0tCisgdW5pdHMvZW1lcmdlbmN5LnNlcnZpY2UuaW4gICAgICAgIHwgNCArKy0tCisgdW5pdHMvcmVzY3VlLnNlcnZpY2UuaW4gICAgICAgICAgIHwgNCArKy0tCisgOCBmaWxlcyBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdpdC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL01ha2VmaWxlLmFtCisrKysgZ2l0L01ha2VmaWxlLmFtCitAQCAtMjA4LDYgKzIwOCw3IEBAIEFNX0NQUEZMQUdTID0gXAorIAktRExJQkRJUj1cIiQobGliZGlyKVwiIFwKKyAJLURST09UTElCRElSPVwiJChyb290bGliZGlyKVwiIFwKKyAJLURST09UTElCRVhFQ0RJUj1cIiQocm9vdGxpYmV4ZWNkaXIpXCIgXAorKwktRFJPT1RIT01FRElSPVwiJChyb290aG9tZWRpcilcIiBcCisgCS1EVEVTVF9ESVI9XCIkKGFic190b3Bfc3JjZGlyKS90ZXN0XCIgXAorIAktSSAkKHRvcF9zcmNkaXIpL3NyYyBcCisgCS1JICQodG9wX2J1aWxkZGlyKS9zcmMvYmFzaWMgXAorQEAgLTU2MTUsNiArNTYxNiw3IEBAIEVYVFJBX0RJU1QgKz0gXAorIHN1YnN0aXR1dGlvbnMgPSBcCisgICAgICAgICd8cm9vdGxpYmV4ZWNkaXI9JChyb290bGliZXhlY2Rpcil8JyBcCisgICAgICAgICd8cm9vdGJpbmRpcj0kKHJvb3RiaW5kaXIpfCcgXAorKyAgICAgICAnfHJvb3Rob21lZGlyPSQocm9vdGhvbWVkaXIpfCcgXAorICAgICAgICAnfGJpbmRpcj0kKGJpbmRpcil8JyBcCisgICAgICAgICd8U1lTVEVNQ1RMPSQocm9vdGJpbmRpcikvc3lzdGVtY3RsfCcgXAorICAgICAgICAnfFNZU1RFTURfTk9USUZZPSQocm9vdGJpbmRpcikvc3lzdGVtZC1ub3RpZnl8JyBcCitJbmRleDogZ2l0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdpdC9jb25maWd1cmUuYWMKK0BAIC0xMzgzLDYgKzEzODMsMTEgQEAgQUNfQVJHX1dJVEgoW3Jvb3RsaWJkaXJdLAorICAgICAgICAgW3dpdGhfcm9vdGxpYmRpcj0ke2xpYmRpcn1dKQorIEFYX05PUk1BTElaRV9QQVRIKFt3aXRoX3Jvb3RsaWJkaXJdKQorIAorK0FDX0FSR19XSVRIKFtyb290aG9tZWRpcl0sCisrICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXJvb3Rob21lZGlyPURJUl0sIFtIb21lIGRpcmVjdG9yeSBmb3IgdGhlIHJvb3QgdXNlcl0pLAorKyAgICAgICAgW10sCisrICAgICAgICBbd2l0aF9yb290aG9tZWRpcj0vcm9vdF0pCisrCisgQUNfQVJHX1dJVEgoW3BhbWxpYmRpcl0sCisgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXBhbWxpYmRpcj1ESVJdLCBbRGlyZWN0b3J5IGZvciBQQU0gbW9kdWxlc10pLAorICAgICAgICAgW10sCitAQCAtMTQ3NCw2ICsxNDc5LDcgQEAgQUNfU1VCU1QoW3BhbWxpYmRpcl0sIFskd2l0aF9wYW1saWJkaXJdKQorIEFDX1NVQlNUKFtwYW1jb25mZGlyXSwgWyR3aXRoX3BhbWNvbmZkaXJdKQorIEFDX1NVQlNUKFtyb290cHJlZml4XSwgWyR3aXRoX3Jvb3RwcmVmaXhdKQorIEFDX1NVQlNUKFtyb290bGliZGlyXSwgWyR3aXRoX3Jvb3RsaWJkaXJdKQorK0FDX1NVQlNUKFtyb290aG9tZWRpcl0sIFskd2l0aF9yb290aG9tZWRpcl0pCisgCisgQUNfQ09ORklHX0ZJTEVTKFsKKyAgICAgICAgIE1ha2VmaWxlCitAQCAtMTU2Myw2ICsxNTY5LDcgQEAgQUNfTVNHX1JFU1VMVChbCisgICAgICAgICBpbmNsdWRlZGlyOiAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfQorICAgICAgICAgbGliIGRpcjogICAgICAgICAgICAgICAgICR7bGliZGlyfQorICAgICAgICAgcm9vdGxpYiBkaXI6ICAgICAgICAgICAgICR7d2l0aF9yb290bGliZGlyfQorKyAgICAgICAgcm9vdCBob21lIGRpcjogICAgICAgICAgICR7d2l0aF9yb290aG9tZWRpcn0KKyAgICAgICAgIFN5c1YgaW5pdCBzY3JpcHRzOiAgICAgICAke1NZU1RFTV9TWVNWSU5JVF9QQVRIfQorICAgICAgICAgU3lzViByYz8uZCBkaXJlY3RvcmllczogICR7U1lTVEVNX1NZU1ZSQ05EX1BBVEh9CisgICAgICAgICBCdWlsZCBQeXRob246ICAgICAgICAgICAgJHtQWVRIT059CitJbmRleDogZ2l0L3NyYy9jb3JlL3VuaXQtcHJpbnRmLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvY29yZS91bml0LXByaW50Zi5jCisrKysgZ2l0L3NyYy9jb3JlL3VuaXQtcHJpbnRmLmMKK0BAIC0yMzcsNyArMjM3LDcgQEAgc3RhdGljIGludCBzcGVjaWZpZXJfdXNlcl9ob21lKGNoYXIgc3BlYworICAgICAgICAgICAgICAgICAgKiBiZXN0IG9mIGl0IGlmIHdlIGNhbiwgYnV0IGZhaWwgaWYgd2UgY2FuJ3QgKi8KKyAKKyAgICAgICAgICAgICAgICAgaWYgKCFjLT51c2VyIHx8IHN0cmVxKGMtPnVzZXIsICJyb290IikgfHwgc3RyZXEoYy0+dXNlciwgIjAiKSkKKy0gICAgICAgICAgICAgICAgICAgICAgICBuID0gc3RyZHVwKCIvcm9vdCIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBzdHJkdXAoUk9PVEhPTUVESVIpOworICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOworIAorSW5kZXg6IGdpdC9zcmMvbnNwYXduL25zcGF3bi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL25zcGF3bi9uc3Bhd24uYworKysrIGdpdC9zcmMvbnNwYXduL25zcGF3bi5jCitAQCAtNDE3Niw3ICs0MTc2LDcgQEAgc3RhdGljIGludCBpbm5lcl9jaGlsZCgKKyAgICAgICAgIGlmIChlbnZwW25fZW52XSkKKyAgICAgICAgICAgICAgICAgbl9lbnYgKys7CisgCistICAgICAgICBpZiAoKGFzcHJpbnRmKChjaGFyKiopKGVudnAgKyBuX2VudisrKSwgIkhPTUU9JXMiLCBob21lID8gaG9tZTogIi9yb290IikgPCAwKSB8fAorKyAgICAgICAgaWYgKChhc3ByaW50ZigoY2hhcioqKShlbnZwICsgbl9lbnYrKyksICJIT01FPSVzIiwgaG9tZSA/IGhvbWU6IFJPT1RIT01FRElSKSA8IDApIHx8CisgICAgICAgICAgICAgKGFzcHJpbnRmKChjaGFyKiopKGVudnAgKyBuX2VudisrKSwgIlVTRVI9JXMiLCBhcmdfdXNlciA/IGFyZ191c2VyIDogInJvb3QiKSA8IDApIHx8CisgICAgICAgICAgICAgKGFzcHJpbnRmKChjaGFyKiopKGVudnAgKyBuX2VudisrKSwgIkxPR05BTUU9JXMiLCBhcmdfdXNlciA/IGFyZ191c2VyIDogInJvb3QiKSA8IDApKQorICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX29vbSgpOworQEAgLTQyNDcsNyArNDI0Nyw3IEBAIHN0YXRpYyBpbnQgaW5uZXJfY2hpbGQoCisgICAgICAgICAgICAgICAgIGV4ZWN2cChhcmd2W29wdGluZF0sIGFyZ3YgKyBvcHRpbmQpOworICNlbmRpZiAvKiBIQVZFX0VYRUNWUEUgKi8KKyAgICAgICAgIGVsc2UgeworLSAgICAgICAgICAgICAgICBjaGRpcihob21lID8gaG9tZSA6ICIvcm9vdCIpOworKyAgICAgICAgICAgICAgICBjaGRpcihob21lID8gaG9tZSA6IFJPT1RIT01FRElSKTsKKyAgICAgICAgICAgICAgICAgZXhlY2xlKCIvYmluL2Jhc2giLCAiLWJhc2giLCBOVUxMLCBlbnZfdXNlKTsKKyAgICAgICAgICAgICAgICAgZXhlY2xlKCIvYmluL3NoIiwgIi1zaCIsIE5VTEwsIGVudl91c2UpOworICAgICAgICAgfQorSW5kZXg6IGdpdC9zcmMvYmFzaWMvdXRpbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL2Jhc2ljL3V0aWwuYworKysrIGdpdC9zcmMvYmFzaWMvdXRpbC5jCitAQCAtMzIzMyw3ICszMjMzLDcgQEAgaW50IGdldF91c2VyX2NyZWRzKAorICAgICAgICAgICAgICAgICAgICAgICAgICpnaWQgPSAwOworIAorICAgICAgICAgICAgICAgICBpZiAoaG9tZSkKKy0gICAgICAgICAgICAgICAgICAgICAgICAqaG9tZSA9ICIvcm9vdCI7CisrICAgICAgICAgICAgICAgICAgICAgICAgKmhvbWUgPSBST09USE9NRURJUjsKKyAKKyAgICAgICAgICAgICAgICAgaWYgKHNoZWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgICpzaGVsbCA9ICIvYmluL3NoIjsKK0BAIC00MDY5LDcgKzQwNjksNyBAQCBpbnQgZ2V0X2hvbWVfZGlyKGNoYXIgKipfaCkgeworICAgICAgICAgLyogSGFyZGNvZGUgaG9tZSBkaXJlY3RvcnkgZm9yIHJvb3QgdG8gYXZvaWQgTlNTICovCisgICAgICAgICB1ID0gZ2V0dWlkKCk7CisgICAgICAgICBpZiAodSA9PSAwKSB7CistICAgICAgICAgICAgICAgIGggPSBzdHJkdXAoIi9yb290Iik7CisrICAgICAgICAgICAgICAgIGggPSBzdHJkdXAoUk9PVEhPTUVESVIpOworICAgICAgICAgICAgICAgICBpZiAoIWgpCisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgCitJbmRleDogZ2l0L3VuaXRzL2NvbnNvbGUtc2hlbGwuc2VydmljZS5tNC5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3VuaXRzL2NvbnNvbGUtc2hlbGwuc2VydmljZS5tNC5pbgorKysrIGdpdC91bml0cy9jb25zb2xlLXNoZWxsLnNlcnZpY2UubTQuaW4KK0BAIC0xNSw4ICsxNSw4IEBAIEFmdGVyPXJjLWxvY2FsLnNlcnZpY2UKKyBCZWZvcmU9Z2V0dHkudGFyZ2V0CisgCisgW1NlcnZpY2VdCistRW52aXJvbm1lbnQ9SE9NRT0vcm9vdAorLVdvcmtpbmdEaXJlY3Rvcnk9L3Jvb3QKKytFbnZpcm9ubWVudD1IT01FPUByb290aG9tZWRpckAKKytXb3JraW5nRGlyZWN0b3J5PUByb290aG9tZWRpckAKKyBFeGVjU3RhcnQ9LUBTVUxPR0lOQAorIEV4ZWNTdG9wUG9zdD0tQFNZU1RFTUNUTEAgcG93ZXJvZmYKKyBUeXBlPWlkbGUKK0luZGV4OiBnaXQvdW5pdHMvZW1lcmdlbmN5LnNlcnZpY2UuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy91bml0cy9lbWVyZ2VuY3kuc2VydmljZS5pbgorKysrIGdpdC91bml0cy9lbWVyZ2VuY3kuc2VydmljZS5pbgorQEAgLTE0LDggKzE0LDggQEAgQ29uZmxpY3RzPXJlc2N1ZS5zZXJ2aWNlCisgQmVmb3JlPXNodXRkb3duLnRhcmdldAorIAorIFtTZXJ2aWNlXQorLUVudmlyb25tZW50PUhPTUU9L3Jvb3QKKy1Xb3JraW5nRGlyZWN0b3J5PS9yb290CisrRW52aXJvbm1lbnQ9SE9NRT1Acm9vdGhvbWVkaXJACisrV29ya2luZ0RpcmVjdG9yeT1Acm9vdGhvbWVkaXJACisgRXhlY1N0YXJ0UHJlPS0vYmluL3BseW1vdXRoIC0td2FpdCBxdWl0CisgRXhlY1N0YXJ0UHJlPS0vYmluL2VjaG8gLWUgJ1dlbGNvbWUgdG8gZW1lcmdlbmN5IG1vZGUhIEFmdGVyIGxvZ2dpbmcgaW4sIHR5cGUgImpvdXJuYWxjdGwgLXhiIiB0byB2aWV3XFxuc3lzdGVtIGxvZ3MsICJzeXN0ZW1jdGwgcmVib290IiB0byByZWJvb3QsICJzeXN0ZW1jdGwgZGVmYXVsdCIgb3IgXkQgdG9cXG50cnkgYWdhaW4gdG8gYm9vdCBpbnRvIGRlZmF1bHQgbW9kZS4nCisgRXhlY1N0YXJ0PS0vYmluL3NoIC1jICJAU1VMT0dJTkA7IEBTWVNURU1DVExAIC0tam9iLW1vZGU9ZmFpbCAtLW5vLWJsb2NrIGRlZmF1bHQiCitJbmRleDogZ2l0L3VuaXRzL3Jlc2N1ZS5zZXJ2aWNlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdW5pdHMvcmVzY3VlLnNlcnZpY2UuaW4KKysrKyBnaXQvdW5pdHMvcmVzY3VlLnNlcnZpY2UuaW4KK0BAIC0xNCw4ICsxNCw4IEBAIEFmdGVyPXN5c2luaXQudGFyZ2V0IHBseW1vdXRoLXN0YXJ0LnNlcnYKKyBCZWZvcmU9c2h1dGRvd24udGFyZ2V0CisgCisgW1NlcnZpY2VdCistRW52aXJvbm1lbnQ9SE9NRT0vcm9vdAorLVdvcmtpbmdEaXJlY3Rvcnk9L3Jvb3QKKytFbnZpcm9ubWVudD1IT01FPUByb290aG9tZWRpckAKKytXb3JraW5nRGlyZWN0b3J5PUByb290aG9tZWRpckAKKyBFeGVjU3RhcnRQcmU9LS9iaW4vcGx5bW91dGggcXVpdAorIEV4ZWNTdGFydFByZT0tL2Jpbi9lY2hvIC1lICdXZWxjb21lIHRvIGVtZXJnZW5jeSBtb2RlISBBZnRlciBsb2dnaW5nIGluLCB0eXBlICJqb3VybmFsY3RsIC14YiIgdG8gdmlld1xcbnN5c3RlbSBsb2dzLCAic3lzdGVtY3RsIHJlYm9vdCIgdG8gcmVib290LCAic3lzdGVtY3RsIGRlZmF1bHQiIG9yIF5EIHRvXFxuYm9vdCBpbnRvIGRlZmF1bHQgbW9kZS4nCisgRXhlY1N0YXJ0PS0vYmluL3NoIC1jICJAU1VMT0dJTkA7IEBTWVNURU1DVExAIC0tam9iLW1vZGU9ZmFpbCAtLW5vLWJsb2NrIGRlZmF1bHQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDExLXN5c3RlbWQtdXNlci1hdm9pZC11c2luZy1zeXN0ZW0tYXV0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTEtc3lzdGVtZC11c2VyLWF2b2lkLXVzaW5nLXN5c3RlbS1hdXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NjJiY2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDExLXN5c3RlbWQtdXNlci1hdm9pZC11c2luZy1zeXN0ZW0tYXV0aC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDdlMjAyZjcxNzg1YmY1YTY3YzhhNGY2YjU4ZDM1ODU2MDhmYmZkYzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNToyNjoyNSArMDAwMAorU3ViamVjdDogW1BBVENIIDExLzExXSBzeXN0ZW1kLXVzZXI6IGF2b2lkIHVzaW5nIHN5c3RlbS1hdXRoCisKK0luIE9FLCB3ZSBkb24ndCBwcm92aWRlIHN5c3RlbS1hdXRoLCBpbnN0ZWFkLCB3ZSB1c2UgY29tbW9uLSogZmlsZXMuCitTbyBtb2RpZnkgc3lzdGVtZC11c2VyIGZpbGUgdG8gdXNlIGNvbW1vbi0qIGZpbGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL2xvZ2luL3N5c3RlbWQtdXNlciB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbG9naW4vc3lzdGVtZC11c2VyIGIvc3JjL2xvZ2luL3N5c3RlbWQtdXNlcgoraW5kZXggODExMmQ3NC4uOTk2MzVhZiAxMDA2NDQKKy0tLSBhL3NyYy9sb2dpbi9zeXN0ZW1kLXVzZXIKKysrKyBiL3NyYy9sb2dpbi9zeXN0ZW1kLXVzZXIKK0BAIC0yLDUgKzIsNSBAQAorICMKKyAjIFVzZWQgYnkgc3lzdGVtZCAtLXVzZXIgaW5zdGFuY2VzLgorIAorLWFjY291bnQgIGluY2x1ZGUgc3lzdGVtLWF1dGgKKy1zZXNzaW9uICBpbmNsdWRlIHN5c3RlbS1hdXRoCisrYWNjb3VudCAgaW5jbHVkZSBjb21tb24tYWNjb3VudAorK3Nlc3Npb24gIGluY2x1ZGUgY29tbW9uLXNlc3Npb24KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMi1pbXBsbWVudC1zeXN0ZW1kLXN5c3YtaW5zdGFsbC1mb3ItT0UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDEyLWltcGxtZW50LXN5c3RlbWQtc3lzdi1pbnN0YWxsLWZvci1PRS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGI0NWE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMi1pbXBsbWVudC1zeXN0ZW1kLXN5c3YtaW5zdGFsbC1mb3ItT0UucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSA1ZjhiOWYyZDI3NmMwZGRiY2JmNTQyMzczM2EyM2YwNDNkNjg4MDA5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgNSBTZXAgMjAxNSAwNjozMTo0NyArMDAwMAorU3ViamVjdDogW1BBVENIXSBpbXBsbWVudCBzeXN0ZW1kLXN5c3YtaW5zdGFsbCBmb3IgT0UKKworVXNlIHVwZGF0ZS1yYy5kIGZvciBlbmFibGluZy9kaXNhYmxpbmcgYW5kIHN0YXR1cyBjb21tYW5kCit0byBjaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBzeXN2IHNlcnZpY2UKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9zeXN0ZW1jdGwvc3lzdGVtZC1zeXN2LWluc3RhbGwuU0tFTEVUT04gfCA2ICsrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvc3JjL3N5c3RlbWN0bC9zeXN0ZW1kLXN5c3YtaW5zdGFsbC5TS0VMRVRPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9zeXN0ZW1jdGwvc3lzdGVtZC1zeXN2LWluc3RhbGwuU0tFTEVUT04KKysrKyBnaXQvc3JjL3N5c3RlbWN0bC9zeXN0ZW1kLXN5c3YtaW5zdGFsbC5TS0VMRVRPTgorQEAgLTMwLDE3ICszMCwxNyBAQCBjYXNlICIkMSIgaW4KKyAgICAgZW5hYmxlKQorICAgICAgICAgIyBjYWxsIHRoZSBjb21tYW5kIHRvIGVuYWJsZSBTeXNWIGluaXQgc2NyaXB0ICROQU1FIGhlcmUKKyAgICAgICAgICMgKGNvbnNpZGVyIG9wdGlvbmFsICRST09UKQorLSAgICAgICAgZWNobyAiSU1QTEVNRU5UIE1FOiBlbmFibGluZyBTeXNWIGluaXQuZCBzY3JpcHQgJE5BTUUiCisrICAgICAgICB1cGRhdGUtcmMuZCAtZiAkTkFNRSBkZWZhdWx0cworICAgICAgICAgOzsKKyAgICAgZGlzYWJsZSkKKyAgICAgICAgICMgY2FsbCB0aGUgY29tbWFuZCB0byBkaXNhYmxlIFN5c1YgaW5pdCBzY3JpcHQgJE5BTUUgaGVyZQorICAgICAgICAgIyAoY29uc2lkZXIgb3B0aW9uYWwgJFJPT1QpCistICAgICAgICBlY2hvICJJTVBMRU1FTlQgTUU6IGRpc2FibGluZyBTeXNWIGluaXQuZCBzY3JpcHQgJE5BTUUiCisrICAgICAgICB1cGRhdGUtcmMuZCAtZiAkTkFNRSByZW1vdmUKKyAgICAgICAgIDs7CisgICAgIGlzLWVuYWJsZWQpCisgICAgICAgICAjIGV4aXQgd2l0aCAwIGlmICROQU1FIGlzIGVuYWJsZWQsIG5vbi16ZXJvIGlmIGl0IGlzIGRpc2FibGVkCisgICAgICAgICAjIChjb25zaWRlciBvcHRpb25hbCAkUk9PVCkKKy0gICAgICAgIGVjaG8gIklNUExFTUVOVCBNRTogY2hlY2tpbmcgU3lzViBpbml0LmQgc2NyaXB0ICROQU1FIgorKyAgICAgICAgL2V0Yy9pbml0LmQvJE5BTUUgc3RhdHVzCisgICAgICAgICA7OworICAgICAqKQorICAgICAgICAgdXNhZ2UgOzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTQtUmV2ZXJ0LXJ1bGVzLXJlbW92ZS1maXJtd2FyZS1sb2FkaW5nLXJ1bGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNC1SZXZlcnQtcnVsZXMtcmVtb3ZlLWZpcm13YXJlLWxvYWRpbmctcnVsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyYmE1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTQtUmV2ZXJ0LXJ1bGVzLXJlbW92ZS1maXJtd2FyZS1sb2FkaW5nLXJ1bGVzLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gNGYwYTcyMjQ4OTE1NGRhOTllN2Y2YjMwNTFhZmRlOTg0ZWVkMmY3NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTkgTWFyIDIwMTUgMTU6MDE6MjkgKzExMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICJydWxlczogcmVtb3ZlIGZpcm13YXJlIGxvYWRpbmcgcnVsZXMiCisKK1RoaXMgcmV2ZXJ0cyBjb21taXQgNzBlN2Q3NTRkZGIzNTZmYjFhMjk0MmIyNjJmOGNlZTk2NTBlMmExOS4KK1VzZXJzcGFjZSBmaXJtd2FyZSBsb2FkaW5nIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBMaW51eCA8IDMuNy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorLS0tCisgcnVsZXMvNTAtZmlybXdhcmUucnVsZXMgfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgcnVsZXMvNTAtZmlybXdhcmUucnVsZXMKKworZGlmZiAtLWdpdCBhL3J1bGVzLzUwLWZpcm13YXJlLnJ1bGVzIGIvcnVsZXMvNTAtZmlybXdhcmUucnVsZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mMGFlNjg0CistLS0gL2Rldi9udWxsCisrKysgYi9ydWxlcy81MC1maXJtd2FyZS5ydWxlcworQEAgLTAsMCArMSwzIEBACisrIyBkbyBub3QgZWRpdCB0aGlzIGZpbGUsIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gb24gdXBkYXRlCisrCisrU1VCU1lTVEVNPT0iZmlybXdhcmUiLCBBQ1RJT049PSJhZGQiLCBSVU57YnVpbHRpbn09ImZpcm13YXJlIgorLS0gCisyLjMuMworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE1LVJldmVydC11ZGV2LXJlbW92ZS11c2Vyc3BhY2UtZmlybXdhcmUtbG9hZGluZy1zdXBwb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE1LVJldmVydC11ZGV2LXJlbW92ZS11c2Vyc3BhY2UtZmlybXdhcmUtbG9hZGluZy1zdXBwb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMwOGNjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTUtUmV2ZXJ0LXVkZXYtcmVtb3ZlLXVzZXJzcGFjZS1maXJtd2FyZS1sb2FkaW5nLXN1cHBvci5wYXRjaApAQCAtMCwwICsxLDM2NCBAQAorRnJvbSA3ZjA3NGRlZjRlMzIwNDUzNTNiYTQzMzZkNzAzZTE3YjhkZTdlYzRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxOSBNYXIgMjAxNSAxNTowMTozMyArMTEwMAorU3ViamVjdDogW1BBVENIXSBSZXZlcnQgInVkZXY6IHJlbW92ZSB1c2Vyc3BhY2UgZmlybXdhcmUgbG9hZGluZyBzdXBwb3J0IgorCitUaGlzIHJldmVydHMgY29tbWl0IGJlMmVhNzIzYjFkMDIzYjNkMzg1ZDNiNzkxZWU0NjA3Y2JmYjIwY2EuCitVc2Vyc3BhY2UgZmlybXdhcmUgbG9hZGluZyBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgTGludXggPCAzLjcuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgIDEyICsrKworIFJFQURNRSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICsrLQorIFRPRE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICB8ICAyMCArKysrKworIHNyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jIHwgMTU0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIHNyYy91ZGV2L3VkZXYtYnVpbHRpbi5jICAgICAgICAgIHwgICAzICsKKyBzcmMvdWRldi91ZGV2LmggICAgICAgICAgICAgICAgICB8ICAgNiArKworIHNyYy91ZGV2L3VkZXZkLmMgICAgICAgICAgICAgICAgIHwgIDEzICsrKysKKyA4IGZpbGVzIGNoYW5nZWQsIDIxNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdWRldi91ZGV2LWJ1aWx0aW4tZmlybXdhcmUuYworCitJbmRleDogZ2l0L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvTWFrZWZpbGUuYW0KKysrKyBnaXQvTWFrZWZpbGUuYW0KK0BAIC0zNDcwLDYgKzM0NzAsMTggQEAgbGlidWRldl9jb3JlX2xhX0xJQkFERCA9IFwKKyAJJChCTEtJRF9MSUJTKSBcCisgCSQoS01PRF9MSUJTKQorIAorK2xpYnVkZXZfY29yZV9sYV9DUFBGTEFHUyA9IFwKKysJJChBTV9DUFBGTEFHUykgXAorKwktREZJUk1XQVJFX1BBVEg9IiQoRklSTVdBUkVfUEFUSCkiCisrCisraWYgRU5BQkxFX0ZJUk1XQVJFCisrbGlidWRldl9jb3JlX2xhX1NPVVJDRVMgKz0gXAorKwlzcmMvdWRldi91ZGV2LWJ1aWx0aW4tZmlybXdhcmUuYworKworK2Rpc3RfdWRldnJ1bGVzX0RBVEEgKz0gXAorKwlydWxlcy81MC1maXJtd2FyZS5ydWxlcworK2VuZGlmCisrCisgaWYgSEFWRV9LTU9ECisgbGlidWRldl9jb3JlX2xhX1NPVVJDRVMgKz0gXAorIAlzcmMvdWRldi91ZGV2LWJ1aWx0aW4ta21vZC5jCitJbmRleDogZ2l0L1JFQURNRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL1JFQURNRQorKysrIGdpdC9SRUFETUUKK0BAIC0zNiw3ICszNiw4IEBAIExJQ0VOU0U6CisgICAgICAgICAtIGV4Y2VwdCBzcmMvdWRldi8qIHdoaWNoIGlzIChjdXJyZW50bHkgc3RpbGwpIEdQTHYyLCBHUEx2MisKKyAKKyBSRVFVSVJFTUVOVFM6CistICAgICAgICBMaW51eCBrZXJuZWwgPj0gMy43CisrICAgICAgICBMaW51eCBrZXJuZWwgPj0gMy4wCisrICAgICAgICBMaW51eCBrZXJuZWwgPj0gMy4zIGZvciBsb29wIGRldmljZSBwYXJ0aXRpb24gc3VwcG9ydCBmZWF0dXJlcyB3aXRoIG5zcGF3bgorICAgICAgICAgTGludXgga2VybmVsID49IDMuOCBmb3IgU21hY2sgc3VwcG9ydAorIAorICAgICAgICAgS2VybmVsIENvbmZpZyBPcHRpb25zOgorQEAgLTUxLDE0ICs1MiwxNCBAQCBSRVFVSVJFTUVOVFM6CisgICAgICAgICAgIENPTkZJR19QUk9DX0ZTCisgICAgICAgICAgIENPTkZJR19GSEFORExFIChsaWJ1ZGV2LCBtb3VudCBhbmQgYmluZCBtb3VudCBoYW5kbGluZykKKyAKKy0gICAgICAgIHVkZXYgd2lsbCBmYWlsIHRvIHdvcmsgd2l0aCB0aGUgbGVnYWN5IHN5c2ZzIGxheW91dDoKKysgICAgICAgIFVkZXYgd2lsbCBmYWlsIHRvIHdvcmsgd2l0aCB0aGUgbGVnYWN5IGxheW91dDoKKyAgICAgICAgICAgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9bgorIAorICAgICAgICAgTGVnYWN5IGhvdHBsdWcgc2xvd3MgZG93biB0aGUgc3lzdGVtIGFuZCBjb25mdXNlcyB1ZGV2OgorICAgICAgICAgICBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIiCisgCistICAgICAgICBVc2Vyc3BhY2UgZmlybXdhcmUgbG9hZGluZyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBzaG91bGQKKy0gICAgICAgIGJlIGRpc2FibGVkIGluIHRoZSBrZXJuZWw6CisrICAgICAgICBVc2Vyc3BhY2UgZmlybXdhcmUgbG9hZGluZyBpcyBkZXByZWNhdGVkLCB3aWxsIGdvIGF3YXksIGFuZAorKyAgICAgICAgc29tZXRpbWVzIGNhdXNlcyBwcm9ibGVtczoKKyAgICAgICAgICAgQ09ORklHX0ZXX0xPQURFUl9VU0VSX0hFTFBFUj1uCisgCisgICAgICAgICBTb21lIHVkZXYgcnVsZXMgYW5kIHZpcnR1YWxpemF0aW9uIGRldGVjdGlvbiByZWxpZXMgb24gaXQ6CitJbmRleDogZ2l0L1RPRE8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9UT0RPCisrKysgZ2l0L1RPRE8KK0BAIC03NTQsNiArNzU0LDcgQEAgRmVhdHVyZXM6CisgKiBFeGVjT25GYWlsdXJlPS91c3IvYmluL2ZvbworIAorICogdWRldjoKKysgIC0gcmVtb3ZlIHNyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jIChDT05GSUdfRldfTE9BREVSX1VTRVJfSEVMUEVSPW4pCisgICAtIG1vdmUgdG8gTEdQTAorICAgLSBraWxsIHNjc2lfaWQKKyAgIC0gYWRkIHRyaWdnZXIgLS1zdWJzeXN0ZW0tbWF0Y2g9dXNiL3VzYl9kZXZpY2UgZGV2aWNlCitJbmRleDogZ2l0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdpdC9jb25maWd1cmUuYWMKK0BAIC0xMjY4LDYgKzEyNjgsMjYgQEAgZmkKKyBBTV9DT05ESVRJT05BTChIQVZFX01ZSE9TVE5BTUUsIFt0ZXN0ICIkaGF2ZV9teWhvc3RuYW1lIiA9ICJ5ZXMiXSkKKyAKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorK0FDX0FSR19XSVRIKGZpcm13YXJlLXBhdGgsCisrICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZmlybXdhcmUtcGF0aD1ESVJbW1s6RElSWy4uLl1dXV1dLAorKyAgICAgICAgICBbRmlybXdhcmUgc2VhcmNoIHBhdGggKGRlZmF1bHQ9IiIpXSksCisrICAgICAgIFtdLCBbd2l0aF9maXJtd2FyZV9wYXRoPSIiXSkKKytPTERfSUZTPSRJRlMKKytJRlM9OgorK2ZvciBpIGluICR3aXRoX2Zpcm13YXJlX3BhdGg7IGRvCisrICAgICAgIGlmIHRlc3QgIngke0ZJUk1XQVJFX1BBVEh9IiA9ICJ4IjsgdGhlbgorKyAgICAgICAgICAgICAgRklSTVdBUkVfUEFUSD0iXFxcIiR7aX0vXFxcIiIKKysgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgRklSTVdBUkVfUEFUSD0iJHtGSVJNV0FSRV9QQVRIfSwgXFxcIiR7aX0vXFxcIiIKKysgICAgICAgZmkKKytkb25lCisrSUZTPSRPTERfSUZTCisrQUNfU1VCU1QoRklSTVdBUkVfUEFUSCkKKytBU19JRihbdGVzdCAieCR7RklSTVdBUkVfUEFUSH0iICE9ICJ4Il0sIFsgQUNfREVGSU5FKEhBVkVfRklSTVdBUkUsIDEsIFtEZWZpbmUgaWYgRklSTVdBUkUgaXMgYXZhaWxhYmxlXSkgXSkKKytBTV9DT05ESVRJT05BTChFTkFCTEVfRklSTVdBUkUsIFt0ZXN0ICJ4JHtGSVJNV0FSRV9QQVRIfSIgIT0gIngiXSkKKysKKysKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFDX0FSR19FTkFCTEUoaHdkYiwgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtaHdkYl0sIFtkaXNhYmxlIGhhcmR3YXJlIGRhdGFiYXNlIHN1cHBvcnRdKV0sCisgICAgICAgIGVuYWJsZV9od2RiPSRlbmFibGV2YWwsIGVuYWJsZV9od2RiPXllcykKKyBBTV9DT05ESVRJT05BTChFTkFCTEVfSFdEQiwgW3Rlc3QgeCRlbmFibGVfaHdkYiA9IHh5ZXNdKQorQEAgLTE1NzQsNiArMTU5NCw3IEBAIEFDX01TR19SRVNVTFQoWworICAgICAgICAgU3lzViByYz8uZCBkaXJlY3RvcmllczogICR7U1lTVEVNX1NZU1ZSQ05EX1BBVEh9CisgICAgICAgICBCdWlsZCBQeXRob246ICAgICAgICAgICAgJHtQWVRIT059CisgICAgICAgICBzcGhpbnggYmluYXJ5OiAgICAgICAgICAgJHtTUEhJTlhfQlVJTER9CisrICAgICAgICBmaXJtd2FyZSBwYXRoOiAgICAgICAgICAgJHtGSVJNV0FSRV9QQVRIfQorICAgICAgICAgUEFNIG1vZHVsZXMgZGlyOiAgICAgICAgICR7d2l0aF9wYW1saWJkaXJ9CisgICAgICAgICBQQU0gY29uZmlndXJhdGlvbiBkaXI6ICAgJHt3aXRoX3BhbWNvbmZkaXJ9CisgICAgICAgICBELUJ1cyBwb2xpY3kgZGlyOiAgICAgICAgJHt3aXRoX2RidXNwb2xpY3lkaXJ9CitJbmRleDogZ2l0L3NyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgZ2l0L3NyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jCitAQCAtMCwwICsxLDE1NCBAQAorKy8qCisrICogZmlybXdhcmUgLSBLZXJuZWwgZmlybXdhcmUgbG9hZGVyCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUGl0ZXIgUHVuayA8cGl0ZXJwdW5rQHNsYWNrd2FyZS5jb20+CisrICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgS2F5IFNpZXZlcnMgPGtheUB2cmZ5Lm9yZz4KKysgKgorKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorKyAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzOioKKysgKi8KKysKKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Z2V0b3B0Lmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKysjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysKKysjaW5jbHVkZSAidWRldi5oIgorKworK3N0YXRpYyBib29sIHNldF9sb2FkaW5nKHN0cnVjdCB1ZGV2ICp1ZGV2LCBjaGFyICpsb2FkcGF0aCwgY29uc3QgY2hhciAqc3RhdGUpIHsKKysgICAgICAgIEZJTEUgKmxkZmlsZTsKKysKKysgICAgICAgIGxkZmlsZSA9IGZvcGVuKGxvYWRwYXRoLCAid2UiKTsKKysgICAgICAgIGlmIChsZGZpbGUgPT0gTlVMTCkgeworKyAgICAgICAgICAgICAgICBsb2dfZXJyb3IoImVycm9yOiBjYW4gbm90IG9wZW4gJyVzJyIsIGxvYWRwYXRoKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfTsKKysgICAgICAgIGZwcmludGYobGRmaWxlLCAiJXNcbiIsIHN0YXRlKTsKKysgICAgICAgIGZjbG9zZShsZGZpbGUpOworKyAgICAgICAgcmV0dXJuIHRydWU7CisrfQorKworK3N0YXRpYyBib29sIGNvcHlfZmlybXdhcmUoc3RydWN0IHVkZXYgKnVkZXYsIGNvbnN0IGNoYXIgKnNvdXJjZSwgY29uc3QgY2hhciAqdGFyZ2V0LCBzaXplX3Qgc2l6ZSkgeworKyAgICAgICAgY2hhciAqYnVmOworKyAgICAgICAgRklMRSAqZnNvdXJjZSA9IE5VTEwsICpmdGFyZ2V0ID0gTlVMTDsKKysgICAgICAgIGJvb2wgcmV0ID0gZmFsc2U7CisrCisrICAgICAgICBidWYgPSBtYWxsb2Moc2l6ZSk7CisrICAgICAgICBpZiAoYnVmID09IE5VTEwpIHsKKysgICAgICAgICAgICAgICAgbG9nX2Vycm9yKCJObyBtZW1vcnkgYXZhaWxhYmxlIHRvIGxvYWQgZmlybXdhcmUgZmlsZSIpOworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBsb2dfZGVidWcoIndyaXRpbmcgJyVzJyAoJXppKSB0byAnJXMnIiwgc291cmNlLCBzaXplLCB0YXJnZXQpOworKworKyAgICAgICAgZnNvdXJjZSA9IGZvcGVuKHNvdXJjZSwgInJlIik7CisrICAgICAgICBpZiAoZnNvdXJjZSA9PSBOVUxMKQorKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisrICAgICAgICBmdGFyZ2V0ID0gZm9wZW4odGFyZ2V0LCAid2UiKTsKKysgICAgICAgIGlmIChmdGFyZ2V0ID09IE5VTEwpCisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIGlmIChmcmVhZChidWYsIHNpemUsIDEsIGZzb3VyY2UpICE9IDEpCisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIGlmIChmd3JpdGUoYnVmLCBzaXplLCAxLCBmdGFyZ2V0KSA9PSAxKQorKyAgICAgICAgICAgICAgICByZXQgPSB0cnVlOworK2V4aXQ6CisrICAgICAgICBpZiAoZnRhcmdldCAhPSBOVUxMKQorKyAgICAgICAgICAgICAgICBmY2xvc2UoZnRhcmdldCk7CisrICAgICAgICBpZiAoZnNvdXJjZSAhPSBOVUxMKQorKyAgICAgICAgICAgICAgICBmY2xvc2UoZnNvdXJjZSk7CisrICAgICAgICBmcmVlKGJ1Zik7CisrICAgICAgICByZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgaW50IGJ1aWx0aW5fZmlybXdhcmUoc3RydWN0IHVkZXZfZGV2aWNlICpkZXYsIGludCBhcmdjLCBjaGFyICphcmd2W10sIGJvb2wgdGVzdCkgeworKyAgICAgICAgc3RydWN0IHVkZXYgKnVkZXYgPSB1ZGV2X2RldmljZV9nZXRfdWRldihkZXYpOworKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKnNlYXJjaHBhdGhbXSA9IHsgRklSTVdBUkVfUEFUSCB9OworKyAgICAgICAgY2hhciBsb2FkcGF0aFtVVElMX1BBVEhfU0laRV07CisrICAgICAgICBjaGFyIGRhdGFwYXRoW1VUSUxfUEFUSF9TSVpFXTsKKysgICAgICAgIGNoYXIgZndwYXRoW1VUSUxfUEFUSF9TSVpFXTsKKysgICAgICAgIGNvbnN0IGNoYXIgKmZpcm13YXJlOworKyAgICAgICAgRklMRSAqZndmaWxlID0gTlVMTDsKKysgICAgICAgIHN0cnVjdCB1dHNuYW1lIGtlcm5lbDsKKysgICAgICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisrICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKysgICAgICAgIGludCByYyA9IEVYSVRfU1VDQ0VTUzsKKysKKysgICAgICAgIGZpcm13YXJlID0gdWRldl9kZXZpY2VfZ2V0X3Byb3BlcnR5X3ZhbHVlKGRldiwgIkZJUk1XQVJFIik7CisrICAgICAgICBpZiAoZmlybXdhcmUgPT0gTlVMTCkgeworKyAgICAgICAgICAgICAgICBsb2dfZXJyb3IoImZpcm13YXJlIHBhcmFtZXRlciBtaXNzaW5nIik7CisrICAgICAgICAgICAgICAgIHJjID0gRVhJVF9GQUlMVVJFOworKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisrICAgICAgICB9CisrCisrICAgICAgICAvKiBsb29rdXAgZmlybXdhcmUgZmlsZSAqLworKyAgICAgICAgdW5hbWUoJmtlcm5lbCk7CisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRUxFTUVOVFNPRihzZWFyY2hwYXRoKTsgaSsrKSB7CisrICAgICAgICAgICAgICAgIHN0cnNjcHlsKGZ3cGF0aCwgc2l6ZW9mKGZ3cGF0aCksIHNlYXJjaHBhdGhbaV0sIGtlcm5lbC5yZWxlYXNlLCAiLyIsIGZpcm13YXJlLCBOVUxMKTsKKysgICAgICAgICAgICAgICAgZndmaWxlID0gZm9wZW4oZndwYXRoLCAicmUiKTsKKysgICAgICAgICAgICAgICAgaWYgKGZ3ZmlsZSAhPSBOVUxMKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgICAgICBzdHJzY3B5bChmd3BhdGgsIHNpemVvZihmd3BhdGgpLCBzZWFyY2hwYXRoW2ldLCBmaXJtd2FyZSwgTlVMTCk7CisrICAgICAgICAgICAgICAgIGZ3ZmlsZSA9IGZvcGVuKGZ3cGF0aCwgInJlIik7CisrICAgICAgICAgICAgICAgIGlmIChmd2ZpbGUgIT0gTlVMTCkKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysKKysgICAgICAgIHN0cnNjcHlsKGxvYWRwYXRoLCBzaXplb2YobG9hZHBhdGgpLCB1ZGV2X2RldmljZV9nZXRfc3lzcGF0aChkZXYpLCAiL2xvYWRpbmciLCBOVUxMKTsKKysKKysgICAgICAgIGlmIChmd2ZpbGUgPT0gTlVMTCkgeworKyAgICAgICAgICAgICAgICBsb2dfZGVidWcoImRpZCBub3QgZmluZCBmaXJtd2FyZSBmaWxlICclcyciLCBmaXJtd2FyZSk7CisrICAgICAgICAgICAgICAgIHJjID0gRVhJVF9GQUlMVVJFOworKyAgICAgICAgICAgICAgICAvKgorKyAgICAgICAgICAgICAgICAgKiBEbyBub3QgY2FuY2VsIHRoZSByZXF1ZXN0IGluIHRoZSBpbml0cmQsIHRoZSByZWFsIHJvb3QgbWlnaHQgaGF2ZQorKyAgICAgICAgICAgICAgICAgKiB0aGUgZmlybXdhcmUgZmlsZSBhbmQgdGhlICdjb2xkcGx1ZycgcnVuIGluIHRoZSByZWFsIHJvb3Qgd2lsbCBmaW5kCisrICAgICAgICAgICAgICAgICAqIHRoaXMgcGVuZGluZyByZXF1ZXN0IGFuZCBmdWxmaWxsIG9yIGNhbmNlbCBpdC4KKysgICAgICAgICAgICAgICAgICogKi8KKysgICAgICAgICAgICAgICAgaWYgKCFpbl9pbml0cmQoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICBzZXRfbG9hZGluZyh1ZGV2LCBsb2FkcGF0aCwgIi0xIik7CisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChzdGF0KGZ3cGF0aCwgJnN0YXRidWYpIDwgMCB8fCBzdGF0YnVmLnN0X3NpemUgPT0gMCkgeworKyAgICAgICAgICAgICAgICBpZiAoIWluX2luaXRyZCgpKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHNldF9sb2FkaW5nKHVkZXYsIGxvYWRwYXRoLCAiLTEiKTsKKysgICAgICAgICAgICAgICAgcmMgPSBFWElUX0ZBSUxVUkU7CisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICghc2V0X2xvYWRpbmcodWRldiwgbG9hZHBhdGgsICIxIikpCisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysKKysgICAgICAgIHN0cnNjcHlsKGRhdGFwYXRoLCBzaXplb2YoZGF0YXBhdGgpLCB1ZGV2X2RldmljZV9nZXRfc3lzcGF0aChkZXYpLCAiL2RhdGEiLCBOVUxMKTsKKysgICAgICAgIGlmICghY29weV9maXJtd2FyZSh1ZGV2LCBmd3BhdGgsIGRhdGFwYXRoLCBzdGF0YnVmLnN0X3NpemUpKSB7CisrICAgICAgICAgICAgICAgIGxvZ19lcnJvcigiZXJyb3Igc2VuZGluZyBmaXJtd2FyZSAnJXMnIHRvIGRldmljZSIsIGZpcm13YXJlKTsKKysgICAgICAgICAgICAgICAgc2V0X2xvYWRpbmcodWRldiwgbG9hZHBhdGgsICItMSIpOworKyAgICAgICAgICAgICAgICByYyA9IEVYSVRfRkFJTFVSRTsKKysgICAgICAgICAgICAgICAgZ290byBleGl0OworKyAgICAgICAgfTsKKysKKysgICAgICAgIHNldF9sb2FkaW5nKHVkZXYsIGxvYWRwYXRoLCAiMCIpOworK2V4aXQ6CisrICAgICAgICBpZiAoZndmaWxlKQorKyAgICAgICAgICAgICAgICBmY2xvc2UoZndmaWxlKTsKKysgICAgICAgIHJldHVybiByYzsKKyt9CisrCisrY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiB1ZGV2X2J1aWx0aW5fZmlybXdhcmUgPSB7CisrICAgICAgICAubmFtZSA9ICJmaXJtd2FyZSIsCisrICAgICAgICAuY21kID0gYnVpbHRpbl9maXJtd2FyZSwKKysgICAgICAgIC5oZWxwID0gImtlcm5lbCBmaXJtd2FyZSBsb2FkZXIiLAorKyAgICAgICAgLnJ1bl9vbmNlID0gdHJ1ZSwKKyt9OworSW5kZXg6IGdpdC9zcmMvdWRldi91ZGV2LWJ1aWx0aW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy91ZGV2L3VkZXYtYnVpbHRpbi5jCisrKysgZ2l0L3NyYy91ZGV2L3VkZXYtYnVpbHRpbi5jCitAQCAtMzAsNiArMzAsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiAqYnVpbHRpCisgICAgICAgICBbVURFVl9CVUlMVElOX0JMS0lEXSA9ICZ1ZGV2X2J1aWx0aW5fYmxraWQsCisgI2VuZGlmCisgICAgICAgICBbVURFVl9CVUlMVElOX0JUUkZTXSA9ICZ1ZGV2X2J1aWx0aW5fYnRyZnMsCisrI2lmZGVmIEhBVkVfRklSTVdBUkUKKysgICAgICAgIFtVREVWX0JVSUxUSU5fRklSTVdBUkVdID0gJnVkZXZfYnVpbHRpbl9maXJtd2FyZSwKKysjZW5kaWYKKyAgICAgICAgIFtVREVWX0JVSUxUSU5fSFdEQl0gPSAmdWRldl9idWlsdGluX2h3ZGIsCisgICAgICAgICBbVURFVl9CVUlMVElOX0lOUFVUX0lEXSA9ICZ1ZGV2X2J1aWx0aW5faW5wdXRfaWQsCisgICAgICAgICBbVURFVl9CVUlMVElOX0tFWUJPQVJEXSA9ICZ1ZGV2X2J1aWx0aW5fa2V5Ym9hcmQsCitJbmRleDogZ2l0L3NyYy91ZGV2L3VkZXYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy91ZGV2L3VkZXYuaAorKysrIGdpdC9zcmMvdWRldi91ZGV2LmgKK0BAIC0xNDYsNiArMTQ2LDkgQEAgZW51bSB1ZGV2X2J1aWx0aW5fY21kIHsKKyAgICAgICAgIFVERVZfQlVJTFRJTl9CTEtJRCwKKyAjZW5kaWYKKyAgICAgICAgIFVERVZfQlVJTFRJTl9CVFJGUywKKysjaWZkZWYgSEFWRV9GSVJNV0FSRQorKyAgICAgICAgVURFVl9CVUlMVElOX0ZJUk1XQVJFLAorKyNlbmRpZgorICAgICAgICAgVURFVl9CVUlMVElOX0hXREIsCisgICAgICAgICBVREVWX0JVSUxUSU5fSU5QVVRfSUQsCisgICAgICAgICBVREVWX0JVSUxUSU5fS0VZQk9BUkQsCitAQCAtMTc0LDYgKzE3Nyw5IEBAIHN0cnVjdCB1ZGV2X2J1aWx0aW4geworIGV4dGVybiBjb25zdCBzdHJ1Y3QgdWRldl9idWlsdGluIHVkZXZfYnVpbHRpbl9ibGtpZDsKKyAjZW5kaWYKKyBleHRlcm4gY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiB1ZGV2X2J1aWx0aW5fYnRyZnM7CisrI2lmZGVmIEhBVkVfRklSTVdBUkUKKytleHRlcm4gY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiB1ZGV2X2J1aWx0aW5fZmlybXdhcmU7CisrI2VuZGlmCisgZXh0ZXJuIGNvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gdWRldl9idWlsdGluX2h3ZGI7CisgZXh0ZXJuIGNvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gdWRldl9idWlsdGluX2lucHV0X2lkOworIGV4dGVybiBjb25zdCBzdHJ1Y3QgdWRldl9idWlsdGluIHVkZXZfYnVpbHRpbl9rZXlib2FyZDsKK0luZGV4OiBnaXQvc3JjL3VkZXYvdWRldmQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy91ZGV2L3VkZXZkLmMKKysrKyBnaXQvc3JjL3VkZXYvdWRldmQuYworQEAgLTExNiw2ICsxMTYsOSBAQCBzdHJ1Y3QgZXZlbnQgeworICAgICAgICAgYm9vbCBpc19ibG9jazsKKyAgICAgICAgIHNkX2V2ZW50X3NvdXJjZSAqdGltZW91dF93YXJuaW5nOworICAgICAgICAgc2RfZXZlbnRfc291cmNlICp0aW1lb3V0OworKyNpZmRlZiBIQVZFX0ZJUk1XQVJFCisrICAgICAgICBib29sIG5vZGVsYXk7CisrI2VuZGlmCisgfTsKKyAKKyBzdGF0aWMgaW5saW5lIHN0cnVjdCBldmVudCAqbm9kZV90b19ldmVudChzdHJ1Y3QgdWRldl9saXN0X25vZGUgKm5vZGUpIHsKK0BAIC02MDcsNiArNjEwLDEwIEBAIHN0YXRpYyBpbnQgZXZlbnRfcXVldWVfaW5zZXJ0KE1hbmFnZXIgKm0KKyAgICAgICAgIGV2ZW50LT5kZXZudW0gPSB1ZGV2X2RldmljZV9nZXRfZGV2bnVtKGRldik7CisgICAgICAgICBldmVudC0+aXNfYmxvY2sgPSBzdHJlcSgiYmxvY2siLCB1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGRldikpOworICAgICAgICAgZXZlbnQtPmlmaW5kZXggPSB1ZGV2X2RldmljZV9nZXRfaWZpbmRleChkZXYpOworKyNpZmRlZiBIQVZFX0ZJUk1XQVJFCisrICAgICAgICBpZiAoc3RyZXEodWRldl9kZXZpY2VfZ2V0X3N1YnN5c3RlbShkZXYpLCAiZmlybXdhcmUiKSkKKysgICAgICAgICAgICAgICAgZXZlbnQtPm5vZGVsYXkgPSB0cnVlOworKyNlbmRpZgorIAorICAgICAgICAgbG9nX2RlYnVnKCJzZXEgJWxsdSBxdWV1ZWQsICclcycgJyVzJyIsIHVkZXZfZGV2aWNlX2dldF9zZXFudW0oZGV2KSwKKyAgICAgICAgICAgICAgdWRldl9kZXZpY2VfZ2V0X2FjdGlvbihkZXYpLCB1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGRldikpOworQEAgLTY5Miw2ICs2OTksMTIgQEAgc3RhdGljIGJvb2wgaXNfZGV2cGF0aF9idXN5KE1hbmFnZXIgKm1hbgorICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICB9CisgCisrI2lmZGVmIEhBVkVfRklSTVdBUkUKKysgICAgICAgICAgICAgICAgLyogYWxsb3cgdG8gYnlwYXNzIHRoZSBkZXBlbmRlbmN5IHRyYWNraW5nICovCisrICAgICAgICAgICAgICAgIGlmIChldmVudC0+bm9kZWxheSkKKysgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysjZW5kaWYKKysKKyAgICAgICAgICAgICAgICAgLyogcGFyZW50IGRldmljZSBldmVudCBmb3VuZCAqLworICAgICAgICAgICAgICAgICBpZiAoZXZlbnQtPmRldnBhdGhbY29tbW9uXSA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC0+ZGVsYXlpbmdfc2VxbnVtID0gbG9vcF9ldmVudC0+c2VxbnVtOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE1MmJlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL2luaXQKQEAgLTAsMCArMSwxMDQgQEAKKyMhL2Jpbi9zaAorCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICB1ZGV2CisjIFJlcXVpcmVkLVN0YXJ0OiAgICBtb3VudHZpcnRmcworIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBTdGFydCB1ZGV2ZCwgcG9wdWxhdGUgL2RldiBhbmQgbG9hZCBkcml2ZXJzLgorIyMjIEVORCBJTklUIElORk8KKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworZXhwb3J0IFRaPS9ldGMvbG9jYWx0aW1lCisKK1sgLWQgL3N5cy9jbGFzcyBdIHx8IGV4aXQgMQorWyAtciAvcHJvYy9tb3VudHMgXSB8fCBleGl0IDEKK1sgLXggQFVERVZEQCBdIHx8IGV4aXQgMQorWyAtZiAvZXRjL2RlZmF1bHQvdWRldi1jYWNoZSBdICYmIC4gL2V0Yy9kZWZhdWx0L3VkZXYtY2FjaGUKK1sgLWYgL2V0Yy91ZGV2L3VkZXYuY29uZiBdICYmIC4gL2V0Yy91ZGV2L3VkZXYuY29uZgorCityZWFkZmlsZSAoKSB7CisgICBmaWxlbmFtZT0kMQorICAgUkVBRERBVEE9IiIKKyAgIGlmIFsgLXIgJGZpbGVuYW1lIF07IHRoZW4KKyAgICAgICB3aGlsZSByZWFkIGxpbmU7IGRvCisgICAgICAgICAgIFJFQUREQVRBPSIkUkVBRERBVEEkbGluZSIKKyAgICAgICBkb25lIDwgJGZpbGVuYW1lCisgICBmaQorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgZXhwb3J0IEFDVElPTj1hZGQKKyAgICAjIHByb3BhZ2F0ZSAvZGV2IGZyb20gL3N5cworICAgIGVjaG8gIlN0YXJ0aW5nIHVkZXYiCisKKyAgICAjIG1vdW50IHRoZSBkZXZ0bXBmcyBvbiAvZGV2LCBpZiBub3QgYWxyZWFkeSBkb25lCisgICAgTEFORz1DIGF3ayAnJDIgPT0gIi9kZXYiICYmICgkMyA9PSAiZGV2dG1wZnMiKSB7IGV4aXQgMSB9JyAvcHJvYy9tb3VudHMgJiYgeworICAgICAgICAgICAgbW91bnQgLW4gLW8gbW9kZT0wNzU1IC10IGRldnRtcGZzIG5vbmUgIi9kZXYiCisgICAgfQorICAgIFsgLWUgL2Rldi9wdHMgXSB8fCBta2RpciAtbSAwNzU1IC9kZXYvcHRzCisgICAgWyAtZSAvZGV2L3NobSBdIHx8IG1rZGlyIC1tIDE3NzcgL2Rldi9zaG0KKyAgICBtb3VudCAtYSAtdCB0bXBmcyAyPi9kZXYvbnVsbAorCisgICAgIyBjYWNoZSBoYW5kbGluZworICAgIGlmIFsgIiRERVZDQUNIRSIgIT0gIiIgXTsgdGhlbgorICAgICAgICAgICAgcmVhZGZpbGUgL3Byb2MvdmVyc2lvbgorICAgICAgICAgICAgVkVSU0lPTj0iJFJFQUREQVRBIgorICAgICAgICAgICAgcmVhZGZpbGUgL3Byb2MvY21kbGluZQorICAgICAgICAgICAgQ01ETElORT0iJFJFQUREQVRBIgorICAgICAgICAgICAgcmVhZGZpbGUgL3Byb2MvZGV2aWNlcworICAgICAgICAgICAgREVWSUNFUz0iJFJFQUREQVRBIgorICAgICAgICAgICAgcmVhZGZpbGUgL3Byb2MvYXRhZ3MKKyAgICAgICAgICAgIEFUQUdTPSIkUkVBRERBVEEiCisKKyAgICAgICAgICAgIGlmIFsgLWUgJERFVkNBQ0hFIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgcmVhZGZpbGUgL2V0Yy91ZGV2L2NhY2hlLmRhdGEKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAiJFJFQUREQVRBIiA9ICIkVkVSU0lPTiRDTURMSU5FJERFVklDRVMkQVRBR1MiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2QgLzsgdGFyIHhmICRERVZDQUNIRSA+IC9kZXYvbnVsbCAyPiYxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdF9maXJzdF9ib290PTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbICIkVkVSQk9TRSIgIT0gIm5vIiBdICYmIGVjaG8gInVkZXY6IHVzaW5nIGNhY2hlIGZpbGUgJERFVkNBQ0hFIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgLWUgL2Rldi9zaG0vdWRldi5jYWNoZSBdICYmIHJtIC1mIC9kZXYvc2htL3VkZXYuY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiRWRVJTSU9OJENNRExJTkUkREVWSUNFUyRBVEFHUyIgPiAvZGV2L3NobS91ZGV2LmNhY2hlCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGVjaG8gIiRWRVJTSU9OJENNRExJTkUkREVWSUNFUyRBVEFHUyIgPiAvZGV2L3NobS91ZGV2LmNhY2hlCisgICAgICAgICAgICBmaQorICAgIGZpCisKKyAgICAjIG1ha2VfZXh0cmFfbm9kZXMKKyAgICBraWxscHJvYyBzeXN0ZW1kLXVkZXZkID4gIi9kZXYvbnVsbCIgMj4mMQorCisgICAgIyB0cmlnZ2VyIHRoZSBzb3J0ZWQgZXZlbnRzCisgICAgZWNobyAtZSAnXDAwMFwwMDBcMDAwXDAwMCcgPiAvcHJvYy9zeXMva2VybmVsL2hvdHBsdWcKKyAgICBAVURFVkRAIC1kCisKKyAgICB1ZGV2YWRtIGNvbnRyb2wgLS1lbnY9U1RBUlRVUD0xCisgICAgaWYgWyAiJG5vdF9maXJzdF9ib290IiAhPSAiIiBdO3RoZW4KKyAgICAgICAgICAgIHVkZXZhZG0gdHJpZ2dlciAtLWFjdGlvbj1hZGQgLS1zdWJzeXN0ZW0tbm9tYXRjaD10dHkgLS1zdWJzeXN0ZW0tbm9tYXRjaD1tZW0gLS1zdWJzeXN0ZW0tbm9tYXRjaD12YyAtLXN1YnN5c3RlbS1ub21hdGNoPXZ0Y29uc29sZSAtLXN1YnN5c3RlbS1ub21hdGNoPW1pc2MgLS1zdWJzeXN0ZW0tbm9tYXRjaD1kY29uIC0tc3Vic3lzdGVtLW5vbWF0Y2g9cGNpX2J1cyAgLS1zdWJzeXN0ZW0tbm9tYXRjaD1ncmFwaGljcwkgLS1zdWJzeXN0ZW0tbm9tYXRjaD1iYWNrbGlnaHQgLS1zdWJzeXN0ZW0tbm9tYXRjaD12aWRlbzRsaW51eAktLXN1YnN5c3RlbS1ub21hdGNoPXBsYXRmb3JtCisgICAgICAgICAgICAodWRldmFkbSBzZXR0bGUgLS10aW1lb3V0PTM7IHVkZXZhZG0gY29udHJvbCAtLWVudj1TVEFSVFVQPSkmCisgICAgZWxzZQorICAgICAgICAgICAgdWRldmFkbSB0cmlnZ2VyIC0tYWN0aW9uPWFkZAorICAgICAgICAgICAgdWRldmFkbSBzZXR0bGUKKyAgICBmaQorICAgIDs7CisgIHN0b3ApCisgICAgZWNobyAiU3RvcHBpbmcgdWRldmQiCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tbmFtZSBzeXN0ZW1kLXVkZXZkIC0tcXVpZXQKKyAgICA7OworICByZXN0YXJ0KQorICAgICQwIHN0b3AKKyAgICBzbGVlcCAxCisgICAgJDAgc3RhcnQKKyAgICA7OworICBzdGF0dXMpCisgICAgc3RhdHVzIHN5c3RlbWQtdWRldmQKKyAgICA7OworICAqKQorICAgIGVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydH0iCisgICAgZXhpdCAxCitlc2FjCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3FlbXVhbGxfaW9fbGF0ZW5jeS1jb3JlLWRldmljZS5jLUNoYW5nZS10aGUtZGVmYXVsdC1kZXZpY2UtdGltZW91dC10by0yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvcWVtdWFsbF9pb19sYXRlbmN5LWNvcmUtZGV2aWNlLmMtQ2hhbmdlLXRoZS1kZWZhdWx0LWRldmljZS10aW1lb3V0LXRvLTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlMTcxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3FlbXVhbGxfaW9fbGF0ZW5jeS1jb3JlLWRldmljZS5jLUNoYW5nZS10aGUtZGVmYXVsdC1kZXZpY2UtdGltZW91dC10by0yLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbU3BlY2lmaWMgY2FzZSBRRU1VL0FCXQorCitGcm9tIDdiOGM0ZTBhNjdhNzlhNzVlMWJkNzdkZjNhNDUyYTU0OTczMjIxMDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW49QzM9QURiYWw9MjBMaW09QzM9QjNuPz0gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUaHUsIDI3IEF1ZyAyMDE1IDE3OjU4OjI2IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvcmUvZGV2aWNlLmM6IENoYW5nZSB0aGUgZGVmYXVsdCBkZXZpY2UgdGltZW91dCB0byAyNDAgc2VjLgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIHNyYy9jb3JlL2RldmljZS5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZGV2aWNlLmMgYi9zcmMvY29yZS9kZXZpY2UuYworaW5kZXggZTdlZmNmMC4uNGVkOGYwOCAxMDA2NDQKKy0tLSBhL3NyYy9jb3JlL2RldmljZS5jCisrKysgYi9zcmMvY29yZS9kZXZpY2UuYworQEAgLTExMCw3ICsxMTAsNyBAQCBzdGF0aWMgdm9pZCBkZXZpY2VfaW5pdChVbml0ICp1KSB7CisgICAgICAgICAgKiBpbmRlZmluaXRlbHkgZm9yIHBsdWdnZWQgaW4gZGV2aWNlcywgc29tZXRoaW5nIHdoaWNoIGNhbm5vdAorICAgICAgICAgICogaGFwcGVuIGZvciB0aGUgb3RoZXIgdW5pdHMgc2luY2UgdGhlaXIgb3BlcmF0aW9ucyB0aW1lIG91dAorICAgICAgICAgICogYW55d2F5LiAqLworLSAgICAgICAgdS0+am9iX3RpbWVvdXQgPSB1LT5tYW5hZ2VyLT5kZWZhdWx0X3RpbWVvdXRfc3RhcnRfdXNlYzsKKysgICAgICAgIHUtPmpvYl90aW1lb3V0ID0gKDI0MCAqIFVTRUNfUEVSX1NFQyk7CisgCisgICAgICAgICB1LT5pZ25vcmVfb25faXNvbGF0ZSA9IHRydWU7CisgICAgICAgICB1LT5pZ25vcmVfb25fc25hcHNob3QgPSB0cnVlOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJkNjFjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3J1bi1wdGVzdApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCit0YXIgLUMgdGVzdCAteEpmIHRlc3Qvc3lzLnRhci54egorbWFrZSB0ZXN0L3J1bGVzLXRlc3Quc2gubG9nCittYWtlIHRlc3QvdWRldi10ZXN0LnBsLmxvZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvdG91Y2hzY3JlZW4ucnVsZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC90b3VjaHNjcmVlbi5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODNmZDE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvdG91Y2hzY3JlZW4ucnVsZXMKQEAgLTAsMCArMSwxOCBAQAorIyBUaGVyZSBhcmUgYSBudW1iZXIgb2YgbW9kaWZpZXJzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgdXNlZCBpbiBzb21lCisjIG9mIHRoZSBkaWZmZXJlbnQgZmllbGRzLiBUaGV5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBzdWJzaXR1dGlvbnM6CisjCisjICVuIHRoZSAia2VybmVsIG51bWJlciIgb2YgdGhlIGRldmljZS4KKyMgICAgRm9yIGV4YW1wbGUsICdzZGEzJyBoYXMgYSAia2VybmVsIG51bWJlciIgb2YgJzMnCisjICVlIHRoZSBzbWFsbGVzdCBudW1iZXIgZm9yIHRoYXQgbmFtZSB3aGljaCBkb2VzIG5vdCBtYXRjaGVzIGFuIGV4aXN0aW5nIG5vZGUKKyMgJWsgdGhlIGtlcm5lbCBuYW1lIGZvciB0aGUgZGV2aWNlCisjICVNIHRoZSBrZXJuZWwgbWFqb3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICVtIHRoZSBrZXJuZWwgbWlub3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICViIHRoZSBidXMgaWQgZm9yIHRoZSBkZXZpY2UKKyMgJWMgdGhlIHN0cmluZyByZXR1cm5lZCBieSB0aGUgUFJPR1JBTQorIyAlc3tmaWxlbmFtZX0gdGhlIGNvbnRlbnQgb2YgYSBzeXNmcyBhdHRyaWJ1dGUKKyMgJSUgdGhlICclJyBjaGFyIGl0c2VsZgorIworCisjIENyZWF0ZSBhIHN5bWxpbmsgdG8gYW55IHRvdWNoc2NyZWVuIGlucHV0IGRldmljZQorU1VCU1lTVEVNPT0iaW5wdXQiLCBLRVJORUw9PSJldmVudFswLTldKiIsIEFUVFJTe21vZGFsaWFzfT09ImlucHV0OiotZTAqLDMsKmEwLDEsKjE4LCoiLCBTWU1MSU5LKz0iaW5wdXQvdG91Y2hzY3JlZW4wIgorU1VCU1lTVEVNPT0iaW5wdXQiLCBLRVJORUw9PSJldmVudFswLTldKiIsIEFUVFJTe21vZGFsaWFzfT09ImFkczc4NDYiLCBTWU1MSU5LKz0iaW5wdXQvdG91Y2hzY3JlZW4wIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWRfMjI1LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWRfMjI1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYzk5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZF8yMjUuYmIKQEAgLTAsMCArMSw0MTUgQEAKK1NVTU1BUlkgPSAiQSBTeXN0ZW0gYW5kIHNlcnZpY2UgbWFuYWdlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvc3lzdGVtZCIKKworREVTQ1JJUFRJT04gPSAic3lzdGVtZCBpcyBhIHN5c3RlbSBhbmQgc2VydmljZSBtYW5hZ2VyIGZvciBMaW51eCwgY29tcGF0aWJsZSB3aXRoIFwKK1N5c1YgYW5kIExTQiBpbml0IHNjcmlwdHMuIHN5c3RlbWQgcHJvdmlkZXMgYWdncmVzc2l2ZSBwYXJhbGxlbGl6YXRpb24gXAorY2FwYWJpbGl0aWVzLCB1c2VzIHNvY2tldCBhbmQgRC1CdXMgYWN0aXZhdGlvbiBmb3Igc3RhcnRpbmcgc2VydmljZXMsIFwKK29mZmVycyBvbi1kZW1hbmQgc3RhcnRpbmcgb2YgZGFlbW9ucywga2VlcHMgdHJhY2sgb2YgcHJvY2Vzc2VzIHVzaW5nIFwKK0xpbnV4IGNncm91cHMsIHN1cHBvcnRzIHNuYXBzaG90dGluZyBhbmQgcmVzdG9yaW5nIG9mIHRoZSBzeXN0ZW0gXAorc3RhdGUsIG1haW50YWlucyBtb3VudCBhbmQgYXV0b21vdW50IHBvaW50cyBhbmQgaW1wbGVtZW50cyBhbiBcCitlbGFib3JhdGUgdHJhbnNhY3Rpb25hbCBkZXBlbmRlbmN5LWJhc2VkIHNlcnZpY2UgY29udHJvbCBsb2dpYy4gSXQgY2FuIFwKK3dvcmsgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBzeXN2aW5pdC4iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuR1BMMjttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS5MR1BMMi4xO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworUFJPVklERVMgPSAidWRldiIKKworUEUgPSAiMSIKKworREVQRU5EUyA9ICJrbW9kIGRvY2Jvb2stc2dtbC1kdGQtNC4xLW5hdGl2ZSBpbnRsdG9vbC1uYXRpdmUgZ3BlcmYtbmF0aXZlIGFjbCByZWFkbGluZSBkYnVzIGxpYmNhcCBsaWJjZ3JvdXAgZ2xpYi0yLjAgcWVtdS1uYXRpdmUgdXRpbC1saW51eCIKKworU0VDVElPTiA9ICJiYXNlL3NoZWxsIgorCitpbmhlcml0IHVzZXJhZGQgcGtnY29uZmlnIGF1dG90b29scyBwZXJsbmF0aXZlIHVwZGF0ZS1yYy5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcWVtdSBzeXN0ZW1kIHB0ZXN0IGdldHRleHQKKworU1JDUkVWID0gImUxNDM5YTE0NzJjNWY2OTE3MzNiOGVmMTBlNzAyYmVhYzI0OTZhNjMiCisKK1BWID0gIjIyNStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3N5c3RlbWQvc3lzdGVtZC5naXQ7cHJvdG9jb2w9Z2l0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtYmluZm10LURvbi10LWluc3RhbGwtZGVwZW5kZW5jeS1saW5rcy1hdC1pbnN0YWxsLXRpbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LWNvbmZpZ3VyZS1DaGVjay1mb3ItYWRkaXRpb25hbC1mZWF0dXJlcy10aGF0LXVjbGliYy0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNS1uc3Bhd24tVXNlLWV4ZWN2cGUtb25seS13aGVuLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNi1qb3VybmFsLVVzZS1wb3NpeC1mYWxsb2NhdGUtb25seS1pZi1hdmFpbGFibGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNy11dGlsLVVzZS1ta29zdGVtcC1vbmx5LWlmLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC11dGlsLWJ5cGFzcy11bmltcGxlbWVudGVkLV9TQ19QSFlTX1BBR0VTLXN5c3RlbS1jb25mLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktc3lzdi1nZW5lcmF0b3ItYWRkLXN1cHBvcnQtZm9yLWV4ZWN1dGluZy1zY3JpcHRzLXVuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEwLU1ha2Utcm9vdC1zLWhvbWUtZGlyZWN0b3J5LWNvbmZpZ3VyYWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDExLXN5c3RlbWQtdXNlci1hdm9pZC11c2luZy1zeXN0ZW0tYXV0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLWltcGxtZW50LXN5c3RlbWQtc3lzdi1pbnN0YWxsLWZvci1PRS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE0LVJldmVydC1ydWxlcy1yZW1vdmUtZmlybXdhcmUtbG9hZGluZy1ydWxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE1LVJldmVydC11ZGV2LXJlbW92ZS11c2Vyc3BhY2UtZmlybXdhcmUtbG9hZGluZy1zdXBwb3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdG91Y2hzY3JlZW4ucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vMDAtY3JlYXRlLXZvbGF0aWxlLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICIKK1NSQ19VUklfYXBwZW5kX3FlbXVhbGwgPSAiZmlsZTovL3FlbXVhbGxfaW9fbGF0ZW5jeS1jb3JlLWRldmljZS5jLUNoYW5nZS10aGUtZGVmYXVsdC1kZXZpY2UtdGltZW91dC10by0yLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNfVVJJX2FwcGVuZF9saWJjLXVjbGliYyA9ICJcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS11bml0cy1QcmVmZXItZ2V0dHktdG8tYWdldHR5LWluLWNvbnNvbGUtc2V0dXAtc3lzdGVtLnBhdGNoIFwKKyAgICAgICAgICAgIgorTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1scnQiCisKK0dUS0RPQ19ET0NESVIgPSAiJHtTfS9kb2NzLyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInh6IGxkY29uZmlnIFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4a2Jjb21tb24nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3NlbGludXgnLCAnc2VsaW51eCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgIgorCitQQUNLQUdFQ09ORklHW2pvdXJuYWwtdXBsb2FkXSA9ICItLWVuYWJsZS1saWJjdXJsLC0tZGlzYWJsZS1saWJjdXJsLGN1cmwiCisjIFNpZ24gdGhlIGpvdXJuYWwgZm9yIGFudGktdGFtcGVyaW5nCitQQUNLQUdFQ09ORklHW2djcnlwdF0gPSAiLS1lbmFibGUtZ2NyeXB0LC0tZGlzYWJsZS1nY3J5cHQsbGliZ2NyeXB0IgorIyByZWdhcmRsZXNzIG9mIFBBQ0tBR0VDT05GSUcsIGxpYmdjcnlwdCBpcyBhbHdheXMgcmVxdWlyZWQgdG8gZXhwYW5kCisjIHRoZSBBTV9QQVRIX0xJQkdDUllQVCBhdXRvY29uZiBtYWNybworREVQRU5EUyArPSAibGliZ2NyeXB0IgorIyBDb21wcmVzcyB0aGUgam91cm5hbAorUEFDS0FHRUNPTkZJR1t4el0gPSAiLS1lbmFibGUteHosLS1kaXNhYmxlLXh6LHh6IgorUEFDS0FHRUNPTkZJR1tjcnlwdHNldHVwXSA9ICItLWVuYWJsZS1saWJjcnlwdHNldHVwLC0tZGlzYWJsZS1saWJjcnlwdHNldHVwLGNyeXB0c2V0dXAiCitQQUNLQUdFQ09ORklHW21pY3JvaHR0cGRdID0gIi0tZW5hYmxlLW1pY3JvaHR0cGQsLS1kaXNhYmxlLW1pY3JvaHR0cGQsbGlibWljcm9odHRwZCIKK1BBQ0tBR0VDT05GSUdbZWxmdXRpbHNdID0gIi0tZW5hYmxlLWVsZnV0aWxzLC0tZGlzYWJsZS1lbGZ1dGlscyxlbGZ1dGlscyIKK1BBQ0tBR0VDT05GSUdbcmVzb2x2ZWRdID0gIi0tZW5hYmxlLXJlc29sdmVkLC0tZGlzYWJsZS1yZXNvbHZlZCIKK1BBQ0tBR0VDT05GSUdbbmV0d29ya2RdID0gIi0tZW5hYmxlLW5ldHdvcmtkLC0tZGlzYWJsZS1uZXR3b3JrZCIKK1BBQ0tBR0VDT05GSUdbbGliaWRuXSA9ICItLWVuYWJsZS1saWJpZG4sLS1kaXNhYmxlLWxpYmlkbixsaWJpZG4iCitQQUNLQUdFQ09ORklHW2F1ZGl0XSA9ICItLWVuYWJsZS1hdWRpdCwtLWRpc2FibGUtYXVkaXQsYXVkaXQiCitQQUNLQUdFQ09ORklHW21hbnBhZ2VzXSA9ICItLWVuYWJsZS1tYW5wYWdlcywtLWRpc2FibGUtbWFucGFnZXMsbGlieHNsdC1uYXRpdmUgeG1sdG8tbmF0aXZlIGRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdbcGFtXSA9ICItLWVuYWJsZS1wYW0sLS1kaXNhYmxlLXBhbSxsaWJwYW0iCisjIFZlcmlmeSBrZXltYXBzIG9uIGxvY2FsZSBjaGFuZ2UKK1BBQ0tBR0VDT05GSUdbeGtiY29tbW9uXSA9ICItLWVuYWJsZS14a2Jjb21tb24sLS1kaXNhYmxlLXhrYmNvbW1vbixsaWJ4a2Jjb21tb24iCisjIFVwZGF0ZSBOQVQgZmlyZXdhbGwgcnVsZXMKK1BBQ0tBR0VDT05GSUdbaXB0Y10gPSAiLS1lbmFibGUtbGliaXB0YywtLWRpc2FibGUtbGliaXB0YyxpcHRhYmxlcyIKK1BBQ0tBR0VDT05GSUdbbGRjb25maWddID0gIi0tZW5hYmxlLWxkY29uZmlnLC0tZGlzYWJsZS1sZGNvbmZpZywsIgorUEFDS0FHRUNPTkZJR1tzZWxpbnV4XSA9ICItLWVuYWJsZS1zZWxpbnV4LC0tZGlzYWJsZS1zZWxpbnV4LGxpYnNlbGludXgiCitQQUNLQUdFQ09ORklHW3ZhbGdyaW5kXSA9ICJhY19jdl9oZWFkZXJfdmFsZ3JpbmRfbWVtY2hlY2tfaD15ZXMgYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX3ZhbGdyaW5kX2g9eWVzICxhY19jdl9oZWFkZXJfdmFsZ3JpbmRfbWVtY2hlY2tfaD1ubyBhY19jdl9oZWFkZXJfdmFsZ3JpbmRfdmFsZ3JpbmRfaD1ubyAsdmFsZ3JpbmQiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX0tJTEw9JHtiYXNlX2JpbmRpcn0va2lsbCIKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX0tNT0Q9JHtiYXNlX2JpbmRpcn0va21vZCIKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1FVT1RBQ0hFQ0s9JHtzYmluZGlyfS9xdW90YWNoZWNrIgorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfUVVPVEFPTj0ke3NiaW5kaXJ9L3F1b3Rhb24iCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9TVUxPR0lOPSR7YmFzZV9zYmluZGlyfS9zdWxvZ2luIgorCisjIEhlbHBlciB2YXJpYWJsZXMgdG8gY2xhcmlmeSBsb2NhdGlvbnMuICBUaGlzIG1pcnJvcnMgdGhlIGxvZ2ljIGluIHN5c3RlbWQncworIyBidWlsZCBzeXN0ZW0uCityb290cHJlZml4ID89ICIke2Jhc2VfcHJlZml4fSIKK3Jvb3RsaWJkaXIgPz0gIiR7YmFzZV9saWJkaXJ9Igorcm9vdGxpYmV4ZWNkaXIgPSAiJHtyb290cHJlZml4fS9saWIiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTX2NsYXNzLXRhcmdldCA9ICJcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9NT1VOVF9QQVRIPSR7YmFzZV9iaW5kaXJ9L21vdW50IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX1VNT1VOVF9QQVRIPSR7YmFzZV9iaW5kaXJ9L3Vtb3VudCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9LTU9EPSR7YmFzZV9iaW5kaXJ9L2ttb2QgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfS0lMTD0ke2Jhc2VfYmluZGlyfS9raWxsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX1NVTE9HSU49JHtiYXNlX3NiaW5kaXJ9L3N1bG9naW4gXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfS0VYRUM9JHtzYmluZGlyfS9rZXhlYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9RVU9UQUNIRUNLPSR7c2JpbmRpcn0vcXVvdGFjaGVjayBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9RVU9UQU9OPSR7c2JpbmRpcn0vcXVvdGFvbiBcCisJCQkgIgorCitFWFRSQV9PRUNPTkYgPSAiIC0td2l0aC1yb290cHJlZml4PSR7cm9vdHByZWZpeH0gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtcm9vdGxpYmRpcj0ke3Jvb3RsaWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLXJvb3Rob21lZGlyPSR7Uk9PVF9IT01FfSBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1jb3JlZHVtcCBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXNwbGl0LXVzciBcCisgICAgICAgICAgICAgICAgIC0td2l0aG91dC1weXRob24gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtc3lzdnJjbmQtcGF0aD0ke3N5c2NvbmZkaXJ9IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWZpcm13YXJlLXBhdGg9L2xpYi9maXJtd2FyZSBcCisgICAgICAgICAgICAgICAiCisjIHVjbGliYyBkb2VzIG5vdCBoYXZlIE5TUworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLW15aG9zdG5hbWUgIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlleHBvcnQgTk09IiR7SE9TVF9QUkVGSVh9Z2NjLW5tIgorCWV4cG9ydCBBUj0iJHtIT1NUX1BSRUZJWH1nY2MtYXIiCisJZXhwb3J0IFJBTkxJQj0iJHtIT1NUX1BSRUZJWH1nY2MtcmFubGliIgorCWV4cG9ydCBLTU9EPSIke2Jhc2VfYmluZGlyfS9rbW9kIgorCWlmIFsgLWQgJHtTfS91bml0cy5wcmVfc2VkIF0gOyB0aGVuCisJCWNwIC1yICR7U30vdW5pdHMucHJlX3NlZCAke1N9L3VuaXRzCisJZWxzZQorCQljcCAtciAke1N9L3VuaXRzICR7U30vdW5pdHMucHJlX3NlZAorCWZpCisJc2VkIC1pICcvbG4gLS1yZWxhdGl2ZSAtLWhlbHAvZCcgJHtTfS9jb25maWd1cmUuYWMKKwlzZWQgLWkgLWUgJ3M6XCQoTE5fUykgLS1yZWxhdGl2ZSAtZjpsbnI6ZycgJHtTfS9NYWtlZmlsZS5hbQorCXNlZCAtaSAtZSAnczpcJChMTl9TKSAtLXJlbGF0aXZlOmxucjpnJyAke1N9L01ha2VmaWxlLmFtCit9CisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0vJHtiYXNlX3NiaW5kaXJ9CisJIyBQcm92aWRlZCBieSBhIHNlcGFyYXRlIHJlY2lwZQorCXJtICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eSogLWYKKworCSMgUHJvdmlkZSBzdXBwb3J0IGZvciBpbml0cmFtZnMKKwlbICEgLWUgJHtEfS9pbml0IF0gJiYgbG4gLXMgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kICR7RH0vaW5pdAorCVsgISAtZSAke0R9LyR7YmFzZV9zYmluZGlyfS91ZGV2ZCBdICYmIGxuIC1zICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC11ZGV2ZCAke0R9LyR7YmFzZV9zYmluZGlyfS91ZGV2ZAorCisJIyBDcmVhdGUgbWFjaGluZS1pZAorCSMgMjA6MTIgPCBtZXpjYWxlcm8+IGtvZW46IHlvdSBoYXZlIHRocmVlIG9wdGlvbnM6IGEpIHJ1biBzeXN0ZW1kLW1hY2hpbmUtaWQtc2V0dXAgYXQgaW5zdGFsbCB0aW1lLCBiKSBoYXZlIC8gcmVhZC1vbmx5IGFuZCBhbiBlbXB0eSBmaWxlIHRoZXJlIChmb3Igc3RhdGVsZXNzKSBhbmQgYykgYm9vdCB3aXRoIC8gd3JpdGFibGUKKwl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9tYWNoaW5lLWlkCisKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kLworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9LyoucnVsZXMgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kLworCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vMDAtY3JlYXRlLXZvbGF0aWxlLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC8KKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c3RlbWQtdWRldmQKKwkJc2VkIC1pIHMlQFVERVZEQCUke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtdWRldmQlICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9zeXN0ZW1kLXVkZXZkCisJZmkKKworCWNob3duIHJvb3Q6c3lzdGVtZC1qb3VybmFsICR7RH0vJHtsb2NhbHN0YXRlZGlyfS9sb2cvam91cm5hbAorCisgICAgICAgICMgRGVsZXRlIGpvdXJuYWwgUkVBRE1FLCBhcyBsb2cgY2FuIGJlIHN5bWxpbmtlZCBpbnNpZGUgdm9sYXRpbGUuCisgICAgICAgIHJtIC1mICR7RH0vJHtsb2NhbHN0YXRlZGlyfS9sb2cvUkVBRE1FCisKKwkjIENyZWF0ZSBzeW1saW5rcyBmb3Igc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9ncmFwaGljYWwudGFyZ2V0LndhbnRzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9tdWx0aS11c2VyLnRhcmdldC53YW50cworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcG93ZXJvZmYudGFyZ2V0LndhbnRzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9yZWJvb3QudGFyZ2V0LndhbnRzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9yZXNjdWUudGFyZ2V0LndhbnRzCisJbG4gLXNmIC4uL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9ncmFwaGljYWwudGFyZ2V0LndhbnRzL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQorCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbXVsdGktdXNlci50YXJnZXQud2FudHMvc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCisJbG4gLXNmIC4uL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9wb3dlcm9mZi50YXJnZXQud2FudHMvc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCisJbG4gLXNmIC4uL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9yZWJvb3QudGFyZ2V0LndhbnRzL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQorCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcmVzY3VlLnRhcmdldC53YW50cy9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UKKworCSMgRW5hYmxlIGpvdXJuYWwgdG8gZm9yd2FyZCBtZXNzYWdlIHRvIHN5c2xvZyBkYWVtb24KKwlzZWQgLWkgLWUgJ3MvLipGb3J3YXJkVG9TeXNsb2cuKi9Gb3J3YXJkVG9TeXNsb2c9eWVzLycgJHtEfSR7c3lzY29uZmRpcn0vc3lzdGVtZC9qb3VybmFsZC5jb25mCisJIyB0aGlzIGZpbGUgaXMgbmVlZGVkIHRvIGV4aXN0IGlmIG5ldHdvcmtkIGlzIGRpc2FibGVkIGJ1dCB0aW1lc3luY2QgaXMgc3RpbGwgaW4gdXNlIHNpbmNlIHRpbWVzeW5jZCBjaGVja3MgaXQKKwkjIGZvciBleGlzdGVuY2UgZWxzZSBpdCBmYWlscworCWlmIFsgLXMgJHtEfSR7bGliZGlyfS90bXBmaWxlcy5kL3N5c3RlbWQuY29uZiBdOyB0aGVuCisJCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ25ldHdvcmtkJywgJzonLCAnc2VkIC1pIC1lICJcJGFkIC9ydW4vc3lzdGVtZC9uZXRpZi9saW5rcyAwNzU1IHJvb3Qgcm9vdCAtIiAke0R9JHtsaWJkaXJ9L3RtcGZpbGVzLmQvc3lzdGVtZC5jb25mJywgZCl9CisJZmkKKwlpbnN0YWxsIC1EbSAwNzU1ICR7U30vc3JjL3N5c3RlbWN0bC9zeXN0ZW1kLXN5c3YtaW5zdGFsbC5TS0VMRVRPTiAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbWQtc3lzdi1pbnN0YWxsCit9CisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworICAgICAgIGluc3RhbGwgLWQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorICAgICAgIGNwIC1yZiAke1N9L3Rlc3QvKiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisgICAgICAgaW5zdGFsbCAtbSAwNzU1ICAke0J9L3Rlc3QtdWRldiAke0R9JHtQVEVTVF9QQVRIfS8KKyAgICAgICBpbnN0YWxsIC1kICR7RH0ke1BURVNUX1BBVEh9L2J1aWxkLWF1eAorICAgICAgIGNwICR7U30vYnVpbGQtYXV4L3Rlc3QtZHJpdmVyICR7RH0ke1BURVNUX1BBVEh9L2J1aWxkLWF1eC8KKyAgICAgICBjcCAtcmYgJHtCfS9ydWxlcyAke0R9JHtQVEVTVF9QQVRIfS8KKyAgICAgICAjIFRoaXMgZGlyZWN0b3J5IG5lZWRzIHRvIGJlIHRoZXJlIGZvciB1ZGV2LXRlc3QucGwgdG8gd29yay4KKyAgICAgICBpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vdWRldi9ydWxlcy5kCisgICAgICAgY3AgJHtCfS9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfS8KKyAgICAgICBjcCAke1N9L3Rlc3Qvc3lzLnRhci54eiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisgICAgICAgc2VkIC1pICdzLyJ0cmVlIi8ibHMiLycgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdC91ZGV2LXRlc3QucGwKKyAgICAgICBzZWQgLWkgJ3MjJHtTfSMke1BURVNUX1BBVEh9I2cnICR7RH0ke1BURVNUX1BBVEh9L01ha2VmaWxlCisgICAgICAgc2VkIC1pICdzIyR7Qn0jJHtQVEVTVF9QQVRIfSNnJyAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKXsKKyAgICBzeXN0ZW1kbGliZGlyID0gZC5nZXRWYXIoInJvb3RsaWJkaXIiLCBUcnVlKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHN5c3RlbWRsaWJkaXIsICdebGliKC4qKVwuc29cLionLCAnbGliJXMnLCAnU3lzdGVtZCAlcyBsaWJyYXJ5JywgZXh0cmFfZGVwZW5kcz0nJywgYWxsb3dfbGlua3M9VHJ1ZSkKK30KK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5saWIodWRldnxzeXN0ZW1kKS4qIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tZ3VpICR7UE59LXZjb25zb2xlLXNldHVwICR7UE59LWluaXRyYW1mcyAke1BOfS1hbmFseXplICR7UE59LWtlcm5lbC1pbnN0YWxsIFwKKyAgICAgICAgICAgICAke1BOfS1ycG0tbWFjcm9zICR7UE59LWJpbmZtdCAke1BOfS1wYW0gJHtQTn0tenNoICR7UE59LXhvcmcteGluaXRyYyIKKworU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfS1iaW5mbXQiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tYmluZm10ID0gInN5c3RlbWQtYmluZm10LnNlcnZpY2UiCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitVU0VSQUREX1BBUkFNXyR7UE59ICs9ICItLXN5c3RlbSBzeXN0ZW1kLWpvdXJuYWwtZ2F0ZXdheTsgLS1zeXN0ZW0gc3lzdGVtZC10aW1lc3luYyIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi1yIGxvY2s7IC1yIHN5c3RlbWQtam91cm5hbCIKKworRklMRVNfJHtQTn0tYW5hbHl6ZSA9ICIke2JpbmRpcn0vc3lzdGVtZC1hbmFseXplIgorCitGSUxFU18ke1BOfS1pbml0cmFtZnMgPSAiL2luaXQiCitSREVQRU5EU18ke1BOfS1pbml0cmFtZnMgPSAiJHtQTn0iCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJwZXJsIHB5dGhvbiBiYXNoIgorRklMRVNfJHtQTn0tcHRlc3QgKz0gIiR7bGliZGlyfS91ZGV2L3J1bGVzLmQiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3N5c3RlbWQvcHRlc3QvLmRlYnVnIgorCitGSUxFU18ke1BOfS1ndWkgPSAiJHtiaW5kaXJ9L3N5c3RlbWFkbSIKKworRklMRVNfJHtQTn0tdmNvbnNvbGUtc2V0dXAgPSAiJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXZjb25zb2xlLXNldHVwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC12Y29uc29sZS1zZXR1cC5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzaW5pdC50YXJnZXQud2FudHMvc3lzdGVtZC12Y29uc29sZS1zZXR1cC5zZXJ2aWNlIgorCitSREVQRU5EU18ke1BOfS1rZXJuZWwtaW5zdGFsbCArPSAiYmFzaCIKK0ZJTEVTXyR7UE59LWtlcm5lbC1pbnN0YWxsID0gIiR7YmluZGlyfS9rZXJuZWwtaW5zdGFsbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2tlcm5lbC8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL2tlcm5lbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59LXJwbS1tYWNyb3MgPSAiJHtleGVjX3ByZWZpeH0vbGliL3JwbSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIgorCitGSUxFU18ke1BOfS14b3JnLXhpbml0cmMgPSAiJHtzeXNjb25mZGlyfS9YMTEveGluaXQveGluaXRyYy5kLyoiCisKK0ZJTEVTXyR7UE59LXpzaCA9ICIke2RhdGFkaXJ9L3pzaC9zaXRlLWZ1bmN0aW9ucyIKKworRklMRVNfJHtQTn0tYmluZm10ID0gIiR7c3lzY29uZmRpcn0vYmluZm10LmQvIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvYmluZm10LmQgXAorICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1iaW5mbXQgXAorICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcHJvYy1zeXMtZnMtYmluZm10X21pc2MuKiBcCisgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlIgorUlJFQ09NTUVORFNfJHtQTn0tYmluZm10ID0gImtlcm5lbC1tb2R1bGUtYmluZm10LW1pc2MiCisKK1JSRUNPTU1FTkRTXyR7UE59LXZjb25zb2xlLXNldHVwID0gImtiZCBrYmQtY29uc29sZWZvbnRzIGtiZC1rZXltYXBzIgorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9zeXN0ZW1kL2pvdXJuYWxkLmNvbmYgXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzdGVtZC9sb2dpbmQuY29uZiBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXN0ZW1kL3N5c3RlbS5jb25mIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c3RlbWQvdXNlci5jb25mIgorCitGSUxFU18ke1BOfSA9ICIgJHtiYXNlX2JpbmRpcn0vKiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24gXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vcG9sa2l0LTEgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vJHtCUE59IFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2ZhY3RvcnkgXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vYmFzaF9jb21wbGV0aW9uLmQvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RidXMtMS8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vbWFjaGluZS1pZCBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9tb2R1bGVzLWxvYWQuZC8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vcGFtLmQvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c2N0bC5kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXN0ZW1kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS90bXBmaWxlcy5kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS94ZGcvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2luaXQuZC9SRUFETUUgXAorICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvKiBcCisgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9LyogXAorICAgICAgICAgICAgICAgICR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Lyouc28gXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJuc3NfKiBcCisgICAgICAgICAgICAgICAgL2Nncm91cCBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQqIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vYnVzY3RsIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vbG9jYWxlY3RsIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vaG9zdG5hbWVjdGwgXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS90aW1lZGF0ZWN0bCBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2Jvb3RjdGwgXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS9rZXJuZWwtaW5zdGFsbCBcCisgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL3RtcGZpbGVzLmQvKi5jb25mIFwKKyAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvc3lzdGVtZCBcCisgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL21vZHVsZXMtbG9hZC5kIFwKKyAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvc3lzY3RsLmQgXAorICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9zeXN1c2Vycy5kIFwKKyAgICAgICAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAgICAgICAgICAgICAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC83MC11YWNjZXNzLnJ1bGVzIFwKKyAgICAgICAgICAgICAgICAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC83MS1zZWF0LnJ1bGVzIFwKKyAgICAgICAgICAgICAgICAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC83My1zZWF0LWxhdGUucnVsZXMgXAorICAgICAgICAgICAgICAgICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLzk5LXN5c3RlbWQucnVsZXMgXAorICAgICAgICAgICAgICAgIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7cm9vdGxpYmRpcn0vLmRlYnVnICR7c3lzdGVtZF91bml0ZGlyfS8uZGVidWcgJHtzeXN0ZW1kX3VuaXRkaXJ9LyovLmRlYnVnICR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Ly5kZWJ1Zy8iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5LyoubGEgJHtkYXRhZGlyfS9kYnVzLTEvaW50ZXJmYWNlcy8gJHtzeXNjb25mZGlyfS9ycG0vbWFjcm9zLnN5c3RlbWQiCisKK1JERVBFTkRTXyR7UE59ICs9ICJrbW9kIGRidXMgdXRpbC1saW51eC1tb3VudCB1ZGV2ICg9ICR7RVhURU5EUEtHVn0pIgorUkRFUEVORFNfJHtQTn0gKz0gInZvbGF0aWxlLWJpbmRzIHVwZGF0ZS1yYy5kIgorCitSUkVDT01NRU5EU18ke1BOfSArPSAic3lzdGVtZC1zZXJpYWxnZXR0eSBzeXN0ZW1kLXZjb25zb2xlLXNldHVwIFwKKyAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kLWNvbXBhdC11bml0cyB1ZGV2LWh3ZGIgXAorICAgICAgICAgICAgICAgICAgICAgIHV0aWwtbGludXgtYWdldHR5ICB1dGlsLWxpbnV4LWZzY2sgZTJmc3Byb2dzLWUyZnNjayBcCisgICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1hdXRvZnM0IGtlcm5lbC1tb2R1bGUtdW5peCBrZXJuZWwtbW9kdWxlLWlwdjYgXAorICAgICAgICAgICAgICAgICAgICAgIG9zLXJlbGVhc2UgXAorIgorCitQQUNLQUdFUyA9KyAidWRldi1kYmcgdWRldiB1ZGV2LWh3ZGIiCisKK0ZJTEVTX3VkZXYtZGJnICs9ICIke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvLmRlYnVnIgorCitSUFJPVklERVNfdWRldiA9ICJob3RwbHVnIgorCitSREVQRU5EU191ZGV2LWh3ZGIgKz0gInVkZXYiCisKK0ZJTEVTX3VkZXYgKz0gIiR7YmFzZV9zYmluZGlyfS91ZGV2ZCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtdWRldmQgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9hY2NlbGVyb21ldGVyIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvYXRhX2lkIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvY2Ryb21faWQgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9jb2xsZWN0IFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvZmluZGtleWJvYXJkcyBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2tleWJvYXJkLWZvcmNlLXJlbGVhc2Uuc2ggXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9rZXltYXAgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9tdGRfcHJvYmUgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9zY3NpX2lkIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvdjRsX2lkIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYva2V5bWFwcyBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L3J1bGVzLmQvKi5ydWxlcyBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3VkZXYgXAorICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvc3lzdGVtZC11ZGV2ZCBcCisgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyp1ZGV2KiBcCisgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyoud2FudHMvKnVkZXYqIFwKKyAgICAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9L3VkZXZhZG0gXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24vY29tcGxldGlvbnMvdWRldmFkbSBcCisgICAgICAgICAgICAgICIKKworRklMRVNfdWRldi1od2RiID0gIiR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvaHdkYi5kIgorCitJTklUU0NSSVBUX1BBQ0tBR0VTID0gInVkZXYiCitJTklUU0NSSVBUX05BTUVfdWRldiA9ICJzeXN0ZW1kLXVkZXZkIgorSU5JVFNDUklQVF9QQVJBTVNfdWRldiA9ICJzdGFydCAwMyBTIC4iCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgZC5zZXRWYXIoIklOSElCSVRfVVBEQVRFUkNEX0JCQ0xBU1MiLCAiMSIpCit9CisKKyMgVE9ETzoKKyMgdS1hIGZvciBydW5sZXZlbCBhbmQgdGVsaW5pdAorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJpbml0IGhhbHQgcmVib290IHNodXRkb3duIHBvd2Vyb2ZmIHJ1bmxldmVsIgorCitBTFRFUk5BVElWRV9UQVJHRVRbaW5pdF0gPSAiJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2luaXRdID0gIiR7YmFzZV9zYmluZGlyfS9pbml0IgorQUxURVJOQVRJVkVfUFJJT1JJVFlbaW5pdF0gPz0gIjMwMCIKKworQUxURVJOQVRJVkVfVEFSR0VUW2hhbHRdID0gIiR7YmFzZV9iaW5kaXJ9L3N5c3RlbWN0bCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtoYWx0XSA9ICIke2Jhc2Vfc2JpbmRpcn0vaGFsdCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2hhbHRdID89ICIzMDAiCisKK0FMVEVSTkFUSVZFX1RBUkdFVFtyZWJvb3RdID0gIiR7YmFzZV9iaW5kaXJ9L3N5c3RlbWN0bCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtyZWJvb3RdID0gIiR7YmFzZV9zYmluZGlyfS9yZWJvb3QiCitBTFRFUk5BVElWRV9QUklPUklUWVtyZWJvb3RdID89ICIzMDAiCisKK0FMVEVSTkFUSVZFX1RBUkdFVFtzaHV0ZG93bl0gPSAiJHtiYXNlX2JpbmRpcn0vc3lzdGVtY3RsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3NodXRkb3duXSA9ICIke2Jhc2Vfc2JpbmRpcn0vc2h1dGRvd24iCitBTFRFUk5BVElWRV9QUklPUklUWVtzaHV0ZG93bl0gPz0gIjMwMCIKKworQUxURVJOQVRJVkVfVEFSR0VUW3Bvd2Vyb2ZmXSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcG93ZXJvZmZdID0gIiR7YmFzZV9zYmluZGlyfS9wb3dlcm9mZiIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW3Bvd2Vyb2ZmXSA/PSAiMzAwIgorCitBTFRFUk5BVElWRV9UQVJHRVRbcnVubGV2ZWxdID0gIiR7YmFzZV9iaW5kaXJ9L3N5c3RlbWN0bCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtydW5sZXZlbF0gPSAiJHtiYXNlX3NiaW5kaXJ9L3J1bmxldmVsIgorQUxURVJOQVRJVkVfUFJJT1JJVFlbcnVubGV2ZWxdID89ICIzMDAiCisKK3BrZ19wb3N0aW5zdF91ZGV2LWh3ZGIgKCkgeworCWlmIHRlc3QgLW4gIiREIjsgdGhlbgorCQkke0BxZW11X3J1bl9iaW5hcnkoZCwgJyREJywgJyR7YmFzZV9iaW5kaXJ9L3VkZXZhZG0nKX0gaHdkYiAtLXVwZGF0ZSBcCisJCQktLXJvb3QgJEQKKwllbHNlCisJCXVkZXZhZG0gaHdkYiAtLXVwZGF0ZQorCWZpCit9CisKK3BrZ19wcmVybV91ZGV2LWh3ZGIgKCkgeworCWlmIHRlc3QgLW4gIiREIjsgdGhlbgorCQlleGl0IDEKKwlmaQorCisJcm0gLWYgJHtzeXNjb25mZGlyfS91ZGV2L2h3ZGIuYmluCit9CisKKyMgQXMgdGhpcyByZWNpcGUgYnVpbGRzIHVkZXYsIHJlc3BlY3Qgc3lzdGVtZCBiZWluZyBpbiBESVNUUk9fRkVBVFVSRVMgc28KKyMgdGhhdCB3ZSBkb24ndCBidWlsZCBib3RoIHVkZXYgYW5kIHN5c3RlbWQgaW4gd29ybGQgYnVpbGRzLgorcHl0aG9uICgpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMgKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIidzeXN0ZW1kJyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTIikKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtMi44OGRzZi9jcnlwdC1saWIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvY3J5cHQtbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMzQyOTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvY3J5cHQtbGliLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworIyBUaGUgc3JjIE1ha2VmaWxlIHdhcyBjaGVja2luZyBmb3IgbGliY3J5cHQuYSBvbiB0aGUgaG9zdCwgbm90IGluIHRoZQorIyBidWlsZCBlbnZpcm9ubWVudC4gIFRoaXMgcGF0Y2ggY2hlY2tzIGZvciAkTENSWVBUIGluIHRoZSBlbnZpcm9ubWVudAorIyBhbmQgdXNlcyBpdCBpZiBpdCdzIHRoZXJlLgorIyAtIGpkaWtlQGxpbnV4LmludGVsLmNvbQorCitJbmRleDogc3lzdmluaXQtMi44OGRzZi9zcmMvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXN2aW5pdC0yLjg4ZHNmLm9yaWcvc3JjL01ha2VmaWxlCisrKysgc3lzdmluaXQtMi44OGRzZi9zcmMvTWFrZWZpbGUKK0BAIC04NSw5ICs4NSwxMyBAQCBlbHNlCisgZW5kaWYKKyAKKyAjIEFkZGl0aW9uYWwgbGlicyBmb3IgR05VIGxpYmMuCisraWZuZXEgKCQoTENSWVBUKSwpCisrICBTVUxPR0lOTElCUwkrPSAkKExDUllQVCkKKytlbHNlCisgaWZuZXEgKCQod2lsZGNhcmQgL3Vzci9saWIqL2xpYmNyeXB0LmEpLCkKKyAgIFNVTE9HSU5MSUJTCSs9IC1sY3J5cHQKKyBlbmRpZgorK2VuZGlmCisgCisgYWxsOgkJJChCSU4pICQoU0JJTikgJChVU1JCSU4pCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvaW5zdGFsbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtMi44OGRzZi9pbnN0YWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNDIyNWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDgzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZSBiL3NyYy9NYWtlZmlsZQoraW5kZXggZTJiODAyOC4uM2UxMWU5MiAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZQorKysrIGIvc3JjL01ha2VmaWxlCitAQCAtNjUsNyArNjUsMTQgQEAgZWxzZQorICAgSU5TVEFMTF9EQVRBCT0gaW5zdGFsbCAtbSA2NDQKKyBlbmRpZgorIElOU1RBTExfRElSCT0gaW5zdGFsbCAtbSA3NTUgLWQKKy1NQU5ESVIJCT0gL3Vzci9zaGFyZS9tYW4KKysKKytST09UICAgICAgICAgPz0KKytiYXNlX2JpbmRpciAgPz0gL2JpbgorK2Jhc2Vfc2JpbmRpciA/PSAvc2JpbgorK2JpbmRpciAgICAgICA/PSAvdXNyL2JpbgorK3N5c2NvbmZkaXIgICA/PSAvZXRjCisraW5jbHVkZWRpciAgID89IC91c3IvaW5jbHVkZQorK21hbmRpciAgICAgICA/PSAvdXNyL3NoYXJlL21hbgorIAorIGlmZXEgKCQoV0lUSF9TRUxJTlVYKSx5ZXMpCisgICBTRUxJTlVYX0RFRgk9ICAtRFdJVEhfU0VMSU5VWAorQEAgLTEzOCwzOSArMTQ1LDM5IEBAIGNsb2JiZXI6CWNsZWFub2JqcworIGRpc3RjbGVhbjoJY2xvYmJlcgorIAorIGluc3RhbGw6CistCQkkKElOU1RBTExfRElSKSAkKFJPT1QpL2Jpbi8gJChST09UKS9zYmluLworLQkJJChJTlNUQUxMX0RJUikgJChST09UKS91c3IvYmluLworKwkJJChJTlNUQUxMX0RJUikgJChST09UKSQoYmFzZV9iaW5kaXIpLyAkKFJPT1QpJChiYXNlX3NiaW5kaXIpLworKwkJJChJTlNUQUxMX0RJUikgJChST09UKSQoYmluZGlyKS8KKyAJCWZvciBpIGluICQoQklOKTsgZG8gXAorLQkJCSQoSU5TVEFMTF9FWEVDKSAkJGkgJChST09UKS9iaW4vIDsgXAorKwkJCSQoSU5TVEFMTF9FWEVDKSAkJGkgJChST09UKSQoYmFzZV9iaW5kaXIpLyA7IFwKKyAJCWRvbmUKKyAJCWZvciBpIGluICQoU0JJTik7IGRvIFwKKy0JCQkkKElOU1RBTExfRVhFQykgJCRpICQoUk9PVCkvc2Jpbi8gOyBcCisrCQkJJChJTlNUQUxMX0VYRUMpICQkaSAkKFJPT1QpJChiYXNlX3NiaW5kaXIpLyA7IFwKKyAJCWRvbmUKKyAJCWZvciBpIGluICQoVVNSQklOKTsgZG8gXAorLQkJCSQoSU5TVEFMTF9FWEVDKSAkJGkgJChST09UKS91c3IvYmluLyA7IFwKKysJCQkkKElOU1RBTExfRVhFQykgJCRpICQoUk9PVCkkKGJpbmRpcikvIDsgXAorIAkJZG9uZQorLQkJIyAkKElOU1RBTExfRElSKSAkKFJPT1QpL2V0Yy8KKy0JCSMgJChJTlNUQUxMX0VYRUMpIGluaXRzY3JpcHQuc2FtcGxlICQoUk9PVCkvZXRjLworLQkJbG4gLXNmIGhhbHQgJChST09UKS9zYmluL3JlYm9vdAorLQkJbG4gLXNmIGhhbHQgJChST09UKS9zYmluL3Bvd2Vyb2ZmCistCQlsbiAtc2YgaW5pdCAkKFJPT1QpL3NiaW4vdGVsaW5pdAorLQkJbG4gLXNmIC9zYmluL2tpbGxhbGw1ICQoUk9PVCkvYmluL3BpZG9mCistCQlpZiBbICEgLWYgJChST09UKS91c3IvYmluL2xhc3RiIF07IHRoZW4gXAorLQkJCWxuIC1zZiBsYXN0ICQoUk9PVCkvdXNyL2Jpbi9sYXN0YjsgXAorKwkJIyAkKElOU1RBTExfRElSKSAkKFJPT1QpJChzeXNjb25mZGlyKS8KKysJCSMgJChJTlNUQUxMX0VYRUMpIGluaXRzY3JpcHQuc2FtcGxlICQoUk9PVCkkKHN5c2NvbmZkaXIpLworKwkJbG4gLXNmIGhhbHQgJChST09UKSQoYmFzZV9zYmluZGlyKS9yZWJvb3QKKysJCWxuIC1zZiBoYWx0ICQoUk9PVCkkKGJhc2Vfc2JpbmRpcikvcG93ZXJvZmYKKysJCWxuIC1zZiBpbml0ICQoUk9PVCkkKGJhc2Vfc2JpbmRpcikvdGVsaW5pdAorKwkJbG4gLXNmICQoYmFzZV9zYmluZGlyKS9raWxsYWxsNSAkKFJPT1QpJChiYXNlX2JpbmRpcikvcGlkb2YKKysJCWlmIFsgISAtZiAkKFJPT1QpJChiaW5kaXIpL2xhc3RiIF07IHRoZW4gXAorKwkJCWxuIC1zZiBsYXN0ICQoUk9PVCkkKGJpbmRpcikvbGFzdGI7IFwKKyAJCWZpCistCQkkKElOU1RBTExfRElSKSAkKFJPT1QpL3Vzci9pbmNsdWRlLworLQkJJChJTlNUQUxMX0RBVEEpIGluaXRyZXEuaCAkKFJPT1QpL3Vzci9pbmNsdWRlLworLQkJJChJTlNUQUxMX0RJUikgJChST09UKSQoTUFORElSKS9tYW4xLworLQkJJChJTlNUQUxMX0RJUikgJChST09UKSQoTUFORElSKS9tYW41LworLQkJJChJTlNUQUxMX0RJUikgJChST09UKSQoTUFORElSKS9tYW44LworKwkJJChJTlNUQUxMX0RJUikgJChST09UKSQoaW5jbHVkZWRpcikvCisrCQkkKElOU1RBTExfREFUQSkgaW5pdHJlcS5oICQoUk9PVCkkKGluY2x1ZGVkaXIpLworKwkJJChJTlNUQUxMX0RJUikgJChST09UKSQobWFuZGlyKS9tYW4xLworKwkJJChJTlNUQUxMX0RJUikgJChST09UKSQobWFuZGlyKS9tYW41LworKwkJJChJTlNUQUxMX0RJUikgJChST09UKSQobWFuZGlyKS9tYW44LworIAkJZm9yIGkgaW4gJChNQU4xKTsgZG8gXAorLQkJCSQoSU5TVEFMTF9EQVRBKSAuLi9tYW4vJCRpICQoUk9PVCkkKE1BTkRJUikvbWFuMS87IFwKKysJCQkkKElOU1RBTExfREFUQSkgLi4vbWFuLyQkaSAkKFJPT1QpJChtYW5kaXIpL21hbjEvOyBcCisgCQlkb25lCisgCQlmb3IgaSBpbiAkKE1BTjUpOyBkbyBcCistCQkJJChJTlNUQUxMX0RBVEEpIC4uL21hbi8kJGkgJChST09UKSQoTUFORElSKS9tYW41LzsgXAorKwkJCSQoSU5TVEFMTF9EQVRBKSAuLi9tYW4vJCRpICQoUk9PVCkkKG1hbmRpcikvbWFuNS87IFwKKyAJCWRvbmUKKyAJCWZvciBpIGluICQoTUFOOCk7IGRvIFwKKy0JCQkkKElOU1RBTExfREFUQSkgLi4vbWFuLyQkaSAkKFJPT1QpJChNQU5ESVIpL21hbjgvOyBcCisrCQkJJChJTlNUQUxMX0RBVEEpIC4uL21hbi8kJGkgJChST09UKSQobWFuZGlyKS9tYW44LzsgXAorIAkJZG9uZQorIGlmZXEgKCQoUk9PVCksKQorIAkJIwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC0yLjg4ZHNmL3BpZG9mLWFkZC1tLW9wdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtMi44OGRzZi9waWRvZi1hZGQtbS1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI1ZGZkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtMi44OGRzZi9waWRvZi1hZGQtbS1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSwxODkgQEAKK3BpZG9mOiBhZGQgLW0gb3B0aW9uCisKK1doZW4gdXNlZCB3aXRoIC1vLCB3aWxsIGFsc28gb21pdCBhbnkgcHJvY2Vzc2VzIHRoYXQgaGF2ZSB0aGUgc2FtZQorYXJndlswXSBhbmQgYXJndlsxXSBhcyBhbnkgZXhwbGljaXRseSBvbWl0dGVkIHByb2Nlc3MgaWRzLiBUaGlzIGNhbiBiZQordXNlZCB0byBhdm9pZCBtdWx0aXBsZSBzaGVsbCBzY3JpcHRzIGNvbmN1cnJlbnRseSBjYWxsaW5nIHBpZG9mIHJldHVybmluZworZWFjaCBvdGhlcidzIHBpZHMuCisKK2h0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9ODgzODU2CisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKK0ltcG9ydGVkIHBhdGNoIGZyb206IGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9hdHRhY2htZW50LmNnaT9pZD02NTgxNjYKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgbWFuL3BpZG9mLjggICAgfCAgNiArKysrKysKKyBzcmMva2lsbGFsbDUuYyB8IDYyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDY1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tYW4vcGlkb2YuOCBiL21hbi9waWRvZi44CistLS0gYS9tYW4vcGlkb2YuOAorKysrIGIvbWFuL3BpZG9mLjgKK0BAIC0yNCw2ICsyNCw3IEBAIHBpZG9mIC0tIGZpbmQgdGhlIHByb2Nlc3MgSUQgb2YgYSBydW5uaW5nIHByb2dyYW0uCisgLlJCIFsgXC1jIF0KKyAuUkIgWyBcLW4gXQorIC5SQiBbIFwteCBdCisrLlJCIFsgXC1tIF0KKyAuUkIgWyBcLW8KKyAuSVIgb21pdHBpZFssb21pdHBpZC4uXSBdCisgLlJCIFsgXC1vCitAQCAtNjMsNiArNjQsMTEgQEAgc2hlbGxzIHJ1bm5pbmcgdGhlIG5hbWVkIHNjcmlwdHMuCisgVGVsbHMgXGZJcGlkb2ZcZlAgdG8gb21pdCBwcm9jZXNzZXMgd2l0aCB0aGF0IHByb2Nlc3MgaWQuIFRoZSBzcGVjaWFsCisgcGlkIFxmQiVQUElEXGZQIGNhbiBiZSB1c2VkIHRvIG5hbWUgdGhlIHBhcmVudCBwcm9jZXNzIG9mIHRoZSBcZklwaWRvZlxmUAorIHByb2dyYW0sIGluIG90aGVyIHdvcmRzIHRoZSBjYWxsaW5nIHNoZWxsIG9yIHNoZWxsIHNjcmlwdC4KKysuSVAgLW0KKytXaGVuIHVzZWQgd2l0aCAtbywgd2lsbCBhbHNvIG9taXQgYW55IHByb2Nlc3NlcyB0aGF0IGhhdmUgdGhlIHNhbWUKKythcmd2WzBdIGFuZCBhcmd2WzFdIGFzIGFueSBleHBsaWNpdGx5IG9taXR0ZWQgcHJvY2VzcyBpZHMuIFRoaXMgY2FuIGJlCisrdXNlZCB0byBhdm9pZCBtdWx0aXBsZSBzaGVsbCBzY3JpcHRzIGNvbmN1cnJlbnRseSBjYWxsaW5nIHBpZG9mIHJldHVybmluZworK2VhY2ggb3RoZXIncyBwaWRzLgorIC5TSCAiRVhJVCBTVEFUVVMiCisgLlRQCisgLkIgMAorZGlmZiAtLWdpdCBhL3NyYy9raWxsYWxsNS5jIGIvc3JjL2tpbGxhbGw1LmMKK2luZGV4IDU5MzdkOTguLmU3Mzg4NWUgMTAwNjQ0CistLS0gYS9zcmMva2lsbGFsbDUuYworKysrIGIvc3JjL2tpbGxhbGw1LmMKK0BAIC0xMTgsNiArMTE4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX3NfbmZzCisgCisgLyogTGlzdCBvZiBwcm9jZXNzZXMuICovCisgUFJPQyAqcGxpc3Q7CisrUFJPQyAqb2xpc3Q7CisgCisgLyogTGlzdCBvZiBwcm9jZXNzZXMgdG8gb21pdC4gKi8KKyBPTUlUICpvbWl0OworQEAgLTM0NSw2ICszNDYsMjAgQEAgc3RhdGljIHZvaWQgY2xlYXJfbW50KHZvaWQpCisgCX0KKyB9CisgCisrc3RhdGljIHZvaWQgY2xlYXJfb21pdCh2b2lkKQorK3sKKysJT01JVCAqbzsKKysJUFJPQyAqcDsKKysJZm9yIChvID0gb21pdDsgbzsgbyA9IG9taXQpIHsKKysJCW9taXQgPSBvbWl0LT5uZXh0OworKwkJZnJlZShvKTsKKysJfQorKwlmb3IgKHAgPSBvbGlzdDsgcDsgcCA9IG9saXN0KSB7CisrCQlvbGlzdCA9IG9saXN0LT5uZXh0OworKwkJZnJlZShwKTsKKysJfQorK30KKysKKyAvKgorICAqICAgICBDaGVjayBpZiBwYXRoIGlzIGlhIHNoYWRvdyBvZmYgYSBORlMgcGFydGl0aW9uLgorICAqLworQEAgLTQ1Miw2ICs0NjcsNyBAQCBpbnQgcmVhZHByb2MoaW50IGRvX3N0YXQpCisgCURJUgkJKmRpcjsKKyAJRklMRQkJKmZwOworIAlQUk9DCQkqcCwgKm47CisrCU9NSVQJCSpvLCAqbTsKKyAJc3RydWN0IGRpcmVudAkqZDsKKyAJc3RydWN0IHN0YXQJc3Q7CisgCWNoYXIJCXBhdGhbUEFUSF9NQVgrMV07CitAQCAtNjI0LDYgKzY0MCwxNyBAQCBpbnQgcmVhZHByb2MoaW50IGRvX3N0YXQpCisgCQlwLT5uZXh0ID0gcGxpc3Q7CisgCQlwbGlzdCA9IHA7CisgCQlwLT5waWQgPSBwaWQ7CisrCQkvKiBDb3VsZCBiZSBzbWFydGVyLCBidXQgaXQncyBhIHNtYWxsIGxpc3QuICovCisrCQltID0gb21pdDsKKysJCWZvciAobyA9IG9taXQ7IG07IG8gPSBtKSB7CisrCQkJbSA9IG8tPm5leHQ7CisrCQkJaWYgKG8tPnBpZCA9PSBwLT5waWQpIHsKKysJCQkJbiA9IChQUk9DKil4bWFsbG9jKHNpemVvZihQUk9DKSk7CisrCQkJCSpuID0gKnA7CisrCQkJCW4tPm5leHQgPSBvbGlzdDsKKysJCQkJb2xpc3QgPSBuOworKwkJCX0KKysJCX0KKyAJfQorIAljbG9zZWRpcihkaXIpOworIAorQEAgLTgxMyw2ICs4NDAsMjYgQEAgUElEUV9IRUFEICpwaWRvZihjaGFyICpwcm9nKQorIAlyZXR1cm4gcTsKKyB9CisgCisraW50IG1hdGNoZXMoUFJPQyAqbywgUFJPQyAqcCkKKyt7CisrCWludCByZXQgPSAwOworKwljaGFyICpvYXJndjEsICpwYXJndjE7CisrCWlmICgoby0+YXJndjAgJiYgcC0+YXJndjAgJiYgIXN0cmNtcChvLT5hcmd2MCxwLT5hcmd2MCkpKSB7CisrCQlpZiAoby0+YXJndjEgJiYgcC0+YXJndjEpIHsKKysJCQlpZiAoKG9hcmd2MSA9IGNhbm9uaWNhbGl6ZV9maWxlX25hbWUoby0+YXJndjEpKSA9PSBOVUxMKQorKwkJCQlvYXJndjEgPSBzdHJkdXAoby0+YXJndjEpOworKwkJCWlmICgocGFyZ3YxID0gY2Fub25pY2FsaXplX2ZpbGVfbmFtZShwLT5hcmd2MSkpID09IE5VTEwpCisrCQkJCXBhcmd2MSA9IHN0cmR1cChwLT5hcmd2MSk7CisrCQkJaWYgKCEgc3RyY21wKG9hcmd2MSwgcGFyZ3YxKSkgeworKwkJCQlyZXQgPSAxOworKwkJCX0KKysJCQlmcmVlKG9hcmd2MSk7CisrCQkJZnJlZShwYXJndjEpOworKwkJfQorKwl9CisrCXJldHVybiByZXQ7CisrfQorKworIC8qIEdpdmUgdXNhZ2UgbWVzc2FnZSBhbmQgZXhpdC4gKi8KKyB2b2lkIHVzYWdlKHZvaWQpCisgeworQEAgLTg0NSw2ICs4OTIsNyBAQCB2b2lkIG5zeXNsb2coaW50IHByaSwgY2hhciAqZm10LCAuLi4pCisgI2RlZmluZSBQSURPRl9TSU5HTEUJMHgwMQorICNkZWZpbmUgUElET0ZfT01JVAkweDAyCisgI2RlZmluZSBQSURPRl9ORVRGUwkweDA0CisrI2RlZmluZSBQSURPRl9PTUlUX09NSVRfTUFUQ0hFUwkweDA4CisgCisgLyoKKyAgKglQaWRvZiBmdW5jdGlvbmFsaXR5LgorQEAgLTg2MSw2ICs5MDksNyBAQCBpbnQgbWFpbl9waWRvZihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCXN0cnVjdCBzdGF0CXN0OworIAljaGFyCQl0bXBbNTEyXTsKKyAKKysJb2xpc3QgPSAoUFJPQyopMDsKKyAJb21pdCA9IChPTUlUKikwOworIAlubGlzdCA9IChORlMqKTA7CisgCW9wdGVyciA9IDA7CitAQCAtODY4LDcgKzkxNyw3IEBAIGludCBtYWluX3BpZG9mKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJaWYgKCh0b2tlbiA9IGdldGVudigiUElET0ZfTkVURlMiKSkgJiYgKHN0cmNtcCh0b2tlbiwibm8iKSAhPSAwKSkKKyAJCWZsYWdzIHw9IFBJRE9GX05FVEZTOworIAorLQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLGFyZ3YsImhjbzpzeG4iKSkgIT0gRU9GKSBzd2l0Y2ggKG9wdCkgeworKwl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLGFyZ3YsImhjbW86c3huIikpICE9IEVPRikgc3dpdGNoIChvcHQpIHsKKyAJCWNhc2UgJz8nOgorIAkJCW5zeXNsb2coTE9HX0VSUiwiaW52YWxpZCBvcHRpb25zIG9uIGNvbW1hbmQgbGluZSFcbiIpOworIAkJCWNsb3NlbG9nKCk7CitAQCAtOTA3LDYgKzk1Niw5IEBAIGludCBtYWluX3BpZG9mKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCWNhc2UgJ3gnOgorIAkJCXNjcmlwdHNfdG9vKys7CisgCQkJYnJlYWs7CisrCQljYXNlICdtJzoKKysJCQlmbGFncyB8PSBQSURPRl9PTUlUX09NSVRfTUFUQ0hFUzsKKysJCQlicmVhazsKKyAJCWNhc2UgJ24nOgorIAkJCWZsYWdzIHw9IFBJRE9GX05FVEZTOworIAkJCWJyZWFrOworQEAgLTkzOCwxMCArOTkwLDEzIEBAIGludCBtYWluX3BpZG9mKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQlwaWRfdCBzcGlkID0gMDsKKyAJCQl3aGlsZSAoKHAgPSBnZXRfbmV4dF9mcm9tX3BpZF9xKHEpKSkgeworIAkJCQlpZiAoKGZsYWdzICYgUElET0ZfT01JVCkgJiYgb21pdCkgeworLQkJCQkJT01JVCAqIG9wdHI7CistCQkJCQlmb3IgKG9wdHIgPSBvbWl0OyBvcHRyOyBvcHRyID0gb3B0ci0+bmV4dCkgeworKwkJCQkJUFJPQyAqIG9wdHI7CisrCQkJCQlmb3IgKG9wdHIgPSBvbGlzdDsgb3B0cjsgb3B0ciA9IG9wdHItPm5leHQpIHsKKyAJCQkJCQlpZiAob3B0ci0+cGlkID09IHAtPnBpZCkKKyAJCQkJCQkJYnJlYWs7CisrCQkJCQkJaWYgKGZsYWdzICYgUElET0ZfT01JVF9PTUlUX01BVENIRVMpCisrCQkJCQkJCWlmIChtYXRjaGVzKG9wdHIsIHApKQorKwkJCQkJCQkJYnJlYWs7CisgCQkJCQl9CisgCisgCQkJCQkvKgorQEAgLTk3Nyw2ICsxMDMyLDcgQEAgaW50IG1haW5fcGlkb2YoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlpZiAoIWZpcnN0KQorIAkJcHJpbnRmKCJcbiIpOworIAorKwljbGVhcl9vbWl0KCk7CisgCWNsZWFyX21udCgpOworIAorIAljbG9zZWxvZygpOworLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtaW5pdHRhYi9pbml0dGFiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC1pbml0dGFiL2luaXR0YWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFiYmRmNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtaW5pdHRhYi9pbml0dGFiCkBAIC0wLDAgKzEsMzAgQEAKKyMgL2V0Yy9pbml0dGFiOiBpbml0KDgpIGNvbmZpZ3VyYXRpb24uCisjICRJZDogaW5pdHRhYix2IDEuOTEgMjAwMi8wMS8yNSAxMzozNToyMSBtaXF1ZWxzIEV4cCAkCisKKyMgVGhlIGRlZmF1bHQgcnVubGV2ZWwuCitpZDo1OmluaXRkZWZhdWx0OgorCisjIEJvb3QtdGltZSBzeXN0ZW0gY29uZmlndXJhdGlvbi9pbml0aWFsaXphdGlvbiBzY3JpcHQuCisjIFRoaXMgaXMgcnVuIGZpcnN0IGV4Y2VwdCB3aGVuIGJvb3RpbmcgaW4gZW1lcmdlbmN5ICgtYikgbW9kZS4KK3NpOjpzeXNpbml0Oi9ldGMvaW5pdC5kL3JjUworCisjIFdoYXQgdG8gZG8gaW4gc2luZ2xlLXVzZXIgbW9kZS4KK35+OlM6d2FpdDovc2Jpbi9zdWxvZ2luCisKKyMgL2V0Yy9pbml0LmQgZXhlY3V0ZXMgdGhlIFMgYW5kIEsgc2NyaXB0cyB1cG9uIGNoYW5nZQorIyBvZiBydW5sZXZlbC4KKyMKKyMgUnVubGV2ZWwgMCBpcyBoYWx0LgorIyBSdW5sZXZlbCAxIGlzIHNpbmdsZS11c2VyLgorIyBSdW5sZXZlbHMgMi01IGFyZSBtdWx0aS11c2VyLgorIyBSdW5sZXZlbCA2IGlzIHJlYm9vdC4KKworbDA6MDp3YWl0Oi9ldGMvaW5pdC5kL3JjIDAKK2wxOjE6d2FpdDovZXRjL2luaXQuZC9yYyAxCitsMjoyOndhaXQ6L2V0Yy9pbml0LmQvcmMgMgorbDM6Mzp3YWl0Oi9ldGMvaW5pdC5kL3JjIDMKK2w0OjQ6d2FpdDovZXRjL2luaXQuZC9yYyA0CitsNTo1OndhaXQ6L2V0Yy9pbml0LmQvcmMgNQorbDY6Njp3YWl0Oi9ldGMvaW5pdC5kL3JjIDYKKyMgTm9ybWFsbHkgbm90IHJlYWNoZWQsIGJ1dCBmYWxsdGhyb3VnaCBpbiBjYXNlIG9mIGVtZXJnZW5jeS4KK3o2OjY6cmVzcGF3bjovc2Jpbi9zdWxvZ2luCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWJfMi44OGRzZi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtaW5pdHRhYl8yLjg4ZHNmLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YjEzMjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWJfMi44OGRzZi5iYgpAQCAtMCwwICsxLDgzIEBACitTVU1NQVJZID0gIkluaXR0YWIgY29uZmlndXJhdGlvbiBmb3IgU3lzVmluaXQiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMDttZDU9ODAxZjgwOTgwZDE3MWRkNjQyNTYxMDgzM2EyMmRiZTYiCisKK1BSID0gInIxMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vaW5pdHRhYiIKKworUyA9ICIke1dPUktESVJ9IgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitkb19jb21waWxlKCkgeworCToKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaW5pdHRhYiAke0R9JHtzeXNjb25mZGlyfS9pbml0dGFiCisKKyAgICBzZXQgLXgKKyAgICB0bXA9IiR7U0VSSUFMX0NPTlNPTEVTfSIKKyAgICBmb3IgaSBpbiAkdG1wCisgICAgZG8KKwlqPWBlY2hvICR7aX0gfCBzZWQgcy9cOy9cIC9nYAorCWxhYmVsPWBlY2hvICR7aX0gfCBzZWQgLWUgJ3MvdHR5Ly8nIC1lICdzL14uKjsvLycgLWUgJ3MvOy4qLy8nYAorCWVjaG8gIiRsYWJlbDoxMjM0NTpyZXNwYXduOiR7YmFzZV9zYmluZGlyfS9nZXR0eSAtTCAke2p9IiA+PiAke0R9JHtzeXNjb25mZGlyfS9pbml0dGFiCisgICAgZG9uZQorCisgICAgaWYgWyAiJHtVU0VfVlR9IiA9ICIxIiBdOyB0aGVuCisgICAgICAgIGNhdCA8PEVPRiA+PiR7RH0ke3N5c2NvbmZkaXJ9L2luaXR0YWIKKyMgJHtiYXNlX3NiaW5kaXJ9L2dldHR5IGludm9jYXRpb25zIGZvciB0aGUgcnVubGV2ZWxzLgorIworIyBUaGUgImlkIiBmaWVsZCBNVVNUIGJlIHRoZSBzYW1lIGFzIHRoZSBsYXN0CisjIGNoYXJhY3RlcnMgb2YgdGhlIGRldmljZSAoYWZ0ZXIgInR0eSIpLgorIworIyBGb3JtYXQ6CisjICA8aWQ+OjxydW5sZXZlbHM+OjxhY3Rpb24+Ojxwcm9jZXNzPgorIworCitFT0YKKworICAgICAgICBmb3IgbiBpbiAke1NZU1ZJTklUX0VOQUJMRURfR0VUVFlTfQorICAgICAgICBkbworICAgICAgICAgICAgZWNobyAiJG46MTIzNDU6cmVzcGF3bjoke2Jhc2Vfc2JpbmRpcn0vZ2V0dHkgMzg0MDAgdHR5JG4iID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXR0YWIKKyAgICAgICAgZG9uZQorICAgICAgICBlY2hvICIiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXR0YWIKKyAgICBmaQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworIyBydW4gdGhpcyBvbiB0aGUgdGFyZ2V0CitpZiBbICJ4JEQiID0gIngiIF0gJiYgWyAtZSAvcHJvYy9jb25zb2xlcyBdOyB0aGVuCisJdG1wPSIke1NFUklBTF9DT05TT0xFU19DSEVDS30iCisJZm9yIGkgaW4gJHRtcAorCWRvCisJCWo9YGVjaG8gJHtpfSB8IHNlZCBzL14uKlw7Ly9nYAorCQlpZiBbIC16ICJgZ3JlcCAke2p9IC9wcm9jL2NvbnNvbGVzYCIgXTsgdGhlbgorCQkJc2VkIC1pIC9eLioke2p9JC9kIC9ldGMvaW5pdHRhYgorCQlmaQorCWRvbmUKKwlraWxsIC1IVVAgMQorZWxzZQorCWlmIFsgIiR7U0VSSUFMX0NPTlNPTEVTX0NIRUNLfSIgPSAiIiBdOyB0aGVuCisJCWV4aXQgMAorCWVsc2UKKwkJZXhpdCAxCisJZmkKK2ZpCit9CisKKyMgVVNFX1ZUIGFuZCBTRVJJQUxfQ09OU09MRVMgYXJlIGdlbmVyYWxseSBkZWZpbmVkIGJ5IHRoZSBNQUNISU5FIC5jb25mLgorIyBTZXQgUEFDS0FHRV9BUkNIIGFwcHJvcHJpYXRlbHkuCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2luaXR0YWIiCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9pbml0dGFiIgorCitVU0VfVlQgPz0gIjEiCitTWVNWSU5JVF9FTkFCTEVEX0dFVFRZUyA/PSAiMSIKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvMDAwMS1UaGlzLWZpeGVzLWFuLWlzc3VlLXRoYXQtY2xhbmctcmVwb3J0cy1hYm91dC1tdXRsaXBsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC8wMDAxLVRoaXMtZml4ZXMtYW4taXNzdWUtdGhhdC1jbGFuZy1yZXBvcnRzLWFib3V0LW11dGxpcGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM1YzE1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvMDAwMS1UaGlzLWZpeGVzLWFuLWlzc3VlLXRoYXQtY2xhbmctcmVwb3J0cy1hYm91dC1tdXRsaXBsLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb20gMzZhYzk3YmZlNTE3OTc0NTg0NDJhNjAzNTIxOWE1MDRhNDJlNzAzYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIxIEF1ZyAyMDE1IDEwOjU2OjQwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFRoaXMgZml4ZXMgYW4gaXNzdWUgdGhhdCBjbGFuZyByZXBvcnRzIGFib3V0IG11dGxpcGxlIG91dHB1dAorIGZpbGVzCisKK0lzc3VlIGlzIHRoYXQgd2UgYXJlIHBhc3NpbmcgLmggZmlsZSB0byBsaW5rIHN0ZXAgYXMgc2VlbiBiZWxvdy4KKworfCBhcm0tb2UtbGludXgtZ251ZWFiaS1jbGFuZyAgLW1hcmNoPWFybXY3LWEgLW10aHVtYiAgLW1mbG9hdC1hYmk9aGFyZAorLW1mcHU9bmVvbi12ZnB2NCAtbXR1bmU9Y29ydGV4LWE3IC1EX19leHRlcm5fYWx3YXlzX2lubGluZT1pbmxpbmUKKy1uby1pbnRlZ3JhdGVkLWFzCistLXN5c3Jvb3Q9L21udC9ob21lL2tyYWovd29yay9hbmdzdHJvbS9zb3VyY2VzL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9yYXNwYmVycnlwaTIKKy1XbCwtTzEgLVdsLC0taGFzaC1zdHlsZT1nbnUgLVdsLC0tYXMtbmVlZGVkICBoYWx0Lm8gaWZkb3duLm8gaGRkb3duLm8KK3V0bXAubyByZWJvb3QuaCAgIC1vIGhhbHQKK3wgY2xhbmctMy43OiBlcnJvcjogY2Fubm90IHNwZWNpZnkgLW8gd2hlbiBnZW5lcmF0aW5nIG11bHRpcGxlIG91dHB1dAorZmlsZXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvTWFrZWZpbGUgfCA2ICsrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUgYi9zcmMvTWFrZWZpbGUKK2luZGV4IGU3N2VkNWYuLmE2ZjlmNDAgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUKKysrKyBiL3NyYy9NYWtlZmlsZQorQEAgLTEwMyw5ICsxMDMsOSBAQCBhbGw6CQkkKEJJTikgJChTQklOKSAkKFVTUkJJTikKKyBpbml0OgkJTERMSUJTICs9ICQoSU5JVExJQlMpICQoU1RBVElDKQorIGluaXQ6CQlpbml0Lm8gaW5pdF91dG1wLm8KKyAKKy1oYWx0OgkJaGFsdC5vIGlmZG93bi5vIGhkZG93bi5vIHV0bXAubyByZWJvb3QuaAorK2hhbHQ6CQloYWx0Lm8gaWZkb3duLm8gaGRkb3duLm8gdXRtcC5vCisgCistbGFzdDoJCWxhc3QubyBvbGR1dG1wLmgKKytsYXN0OgkJbGFzdC5vCisgCisgbWVzZzoJCW1lc2cubworIAorQEAgLTEyMCw3ICsxMjAsNyBAQCBzdWxvZ2luOglzdWxvZ2luLm8KKyAKKyB3YWxsOgkJZG93YWxsLm8gd2FsbC5vCisgCistc2h1dGRvd246CWRvd2FsbC5vIHNodXRkb3duLm8gdXRtcC5vIHJlYm9vdC5oCisrc2h1dGRvd246CWRvd2FsbC5vIHNodXRkb3duLm8gdXRtcC5vCisgCisgYm9vdGxvZ2Q6CUxETElCUyArPSAtbHV0aWwKKyBib290bG9nZDoJYm9vdGxvZ2QubworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LzAxX2Jvb3Rsb2dkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC8wMV9ib290bG9nZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjg5ZDkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC8wMV9ib290bG9nZApAQCAtMCwwICsxIEBACitmIHJvb3Qgcm9vdCAwNjQ0IC92YXIvbG9nL2Jvb3Qgbm9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9ib290bG9nZC5pbml0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9ib290bG9nZC5pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmNWFhNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L2Jvb3Rsb2dkLmluaXQKQEAgLTAsMCArMSw5OCBAQAorIyEgL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgYm9vdGxvZ2QKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDogICAgICAyIDMgNCA1CisjIFNob3J0LURlc2NyaXB0aW9uOiBPbmUgb2YgdGhlIGZpcnN0IHNjcmlwdHMgdG8gYmUgZXhlY3V0ZWQuIFN0YXJ0cyBvciBzdG9wcworIyAgICAgICAgICAgICAgIHRoZSBib290bG9nZCBsb2cgcHJvZ3JhbS4gSWYgdGhpcyBzY3JpcHQgaXMgY2FsbGVkIGFzCisjICAgICAgICAgICAgICAgInN0b3AtYm9vdGxvZ2QiLCBpdCB3aWxsIHN0b3AgdGhlIGRhZW1vbiBpbnN0ZWFkIG9mCisjICAgICAgICAgICAgICAgc3RhcnRpbmcgaXQgZXZlbiB3aGVuIGNhbGxlZCB3aXRoIHRoZSAic3RhcnQiIGFyZ3VtZW50LgorIworIyMjIEVORCBJTklUIElORk8KKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorREFFTU9OPS9zYmluL2Jvb3Rsb2dkCitOQU1FPWJvb3Rsb2dkCitERVNDPSJCb290bG9nIGRhZW1vbiIKKworIyBzb3VyY2UgZnVuY3Rpb24gbGlicmFyeQorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKwordGVzdCAtZiAkREFFTU9OIHx8IGV4aXQgMAorCitbIC1yIC9ldGMvZGVmYXVsdC9ib290bG9nZCBdICYmIC4gL2V0Yy9kZWZhdWx0L2Jvb3Rsb2dkCisKKyMjIHNldCAtZSAjIG5vdCBuZWVkZWQKKworY2FzZSAiJEJPT1RMT0dEX0VOQUJMRSIgaW4KKwlbTm5dKikKKwkJZXhpdCAwCisJCTs7Citlc2FjCisKK1NUT1BQRVI9CitBQ1RJT049IiQxIgorY2FzZSAiJDAiIGluCisJKnN0b3AtYm9vdGxvZyopCisJCVNUT1BQRVI9WQorCQlpZiBbICIkQUNUSU9OIiA9IHN0YXJ0IF0KKwkJdGhlbgorCQkJQUNUSU9OPXN0b3AKKwkJZmkKKwkJOzsKK2VzYWMKKworY2FzZSAiJEFDVElPTiIgaW4KKwlzdGFydCkKKwkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gLW4gIlN0YXJ0aW5nICRERVNDOiAiCisJCWlmIFsgLWQgL3Byb2MvMS8uIF0KKwkJdGhlbgorCQkJdW1hc2sgMDI3CisJCQlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgXAorCQkJCS0tZXhlYyAkREFFTU9OIC0tIC1yIC1jCisJCWVsc2UKKwkJCSREQUVNT04gLXIgLWMKKwkJZmkKKwkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIiROQU1FLiIKKwkJOzsKKwlzdG9wKQorCQkjIHN0b3AgbWF5IGdldCBjYWxsZWQgZHVyaW5nIGJvb3R1cCwgc28gbGV0IGl0IGhvbm9yCisJCSMgcmNTIFZFUkJPU0Ugc2V0dGluZworCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAtbiAiU3RvcHBpbmcgJERFU0M6ICIKKwkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1leGVjICREQUVNT04KKworCQlpZiBbICIkU1RPUFBFUiIgXSAmJiBbICIkKHdoaWNoIHNhdmVsb2cgMj4vZGV2L251bGwpIiBdICYmIFwKKwkJICAgWyAtZiAvdmFyL2xvZy9ib290IF0gJiYgWyAtZiAvdmFyL2xvZy9ib290fiBdCisJCXRoZW4KKwkJCWNkIC92YXIvbG9nCisJCQljaGdycCBhZG0gYm9vdAorCQkJc2F2ZWxvZyAtcCAtYyA1IGJvb3QgPiAvZGV2L251bGwgMj4mMQorCQkJbXYgYm9vdC4wIGJvb3QKKwkJCW12IGJvb3R+IGJvb3QuMAorCQlmaQorCisJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICIkTkFNRS4iCisJCTs7CisJIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCQllY2hvIC1uICJSZXN0YXJ0aW5nICRERVNDOiAiCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAkREFFTU9OCisJCXNsZWVwIDEKKwkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tZXhlYyAkREFFTU9OCisJCWVjaG8gIiROQU1FLiIKKwkJOzsKKwlzdGF0dXMpCisJCXN0YXR1cyAkREFFTU9OCisJCWV4aXQgJD8KKwkJOzsKKwkqKQorCQlOPSR7MCMjKi99CisJCU49JHtOI1tTS10/P30KKwkJZWNobyAiVXNhZ2U6ICROIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iID4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworZXhpdCAwCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvcmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L3JjCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdjYTQxYWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L3JjCkBAIC0wLDAgKzEsMTgyIEBACisjIS9iaW4vc2gKKyMKKyMgcmMJCVRoaXMgZmlsZSBpcyByZXNwb25zaWJsZSBmb3Igc3RhcnRpbmcvc3RvcHBpbmcKKyMJCXNlcnZpY2VzIHdoZW4gdGhlIHJ1bmxldmVsIGNoYW5nZXMuCisjCisjCQlPcHRpbWl6YXRpb24gZmVhdHVyZToKKyMJCUEgc3RhcnR1cCBzY3JpcHQgaXMgX25vdF8gcnVuIHdoZW4gdGhlIHNlcnZpY2Ugd2FzCisjCQlydW5uaW5nIGluIHRoZSBwcmV2aW91cyBydW5sZXZlbCBhbmQgaXQgd2Fzbid0IHN0b3BwZWQKKyMJCWluIHRoZSBydW5sZXZlbCB0cmFuc2l0aW9uIChtb3N0IERlYmlhbiBzZXJ2aWNlcyBkb24ndAorIwkJaGF2ZSBLPz8gbGlua3MgaW4gcmN7MSwyLDMsNCw1fSApCisjCisjIEF1dGhvcjoJTWlxdWVsIHZhbiBTbW9vcmVuYnVyZyA8bWlxdWVsc0BjaXN0cm9uLm5sPgorIwkJQnJ1Y2UgUGVyZW5zIDxCcnVjZUBQaXhhci5jb20+CisjCisjIFZlcnNpb246CUAoIylyYyAgMi43OCAgMDctTm92LTE5OTkgIG1pcXVlbHNAY2lzdHJvbi5ubAorIworCisuIC9ldGMvZGVmYXVsdC9yY1MKK2V4cG9ydCBWRVJCT1NFCisKK3N0YXJ0dXBfcHJvZ3Jlc3MoKSB7CisgICAgc3RlcD0kKCgkc3RlcCArICRzdGVwX2NoYW5nZSkpCisgICAgaWYgWyAiJG51bV9zdGVwcyIgIT0gIjAiIF07IHRoZW4KKyAgICAgICAgcHJvZ3Jlc3M9JCgoKCRzdGVwICogJHByb2dyZXNzX3NpemUgLyAkbnVtX3N0ZXBzKSArICRmaXJzdF9zdGVwKSkKKyAgICBlbHNlCisgICAgICAgIHByb2dyZXNzPSRwcm9ncmVzc19zaXplCisgICAgZmkKKyAgICAjZWNobyAiUFJPR1JFU1MgaXMgJHByb2dyZXNzICRydW5sZXZlbCAkZmlyc3Rfc3RlcCArICgkc3RlcCBvZiAkbnVtX3N0ZXBzKSAkc3RlcF9jaGFuZ2UgJHByb2dyZXNzX3NpemUiCisgICAgI2lmIHR5cGUgcHNwbGFzaC13cml0ZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAjICAgIFRNUERJUj0vbW50Ly5wc3BsYXNoIHBzcGxhc2gtd3JpdGUgIlBST0dSRVNTICRwcm9ncmVzcyIgfHwgdHJ1ZQorICAgICNmaQorICAgIGlmIFsgLWUgL21udC8ucHNwbGFzaC9wc3BsYXNoX2ZpZm8gXTsgdGhlbgorICAgICAgICBlY2hvICJQUk9HUkVTUyAkcHJvZ3Jlc3MiID4gL21udC8ucHNwbGFzaC9wc3BsYXNoX2ZpZm8KKyAgICBmaQorfQorCisKKyMKKyMgU3RhcnQgc2NyaXB0IG9yIHByb2dyYW0uCisjCitzdGFydHVwKCkgeworICAjIEhhbmRsZSB2ZXJib3NpdHkKKyAgWyAiJFZFUkJPU0UiID0gdmVyeSBdICYmIGVjaG8gIklOSVQ6IFJ1bm5pbmcgJEAuLi4iCisKKyAgY2FzZSAiJDEiIGluCisJKi5zaCkKKwkJIyBTb3VyY2Ugc2hlbGwgc2NyaXB0IGZvciBzcGVlZC4KKwkJKAorCQkJdHJhcCAtIElOVCBRVUlUIFRTVFAKKwkJCXNjcmlwdG5hbWU9JDEKKwkJCXNoaWZ0CisJCQkuICRzY3JpcHRuYW1lCisJCSkKKwkJOzsKKwkqKQorCQkiJEAiCisJCTs7CisgIGVzYWMKKyAgc3RhcnR1cF9wcm9ncmVzcworfQorCisgICMgSWdub3JlIENUUkwtQyBvbmx5IGluIHRoaXMgc2hlbGwsIHNvIHdlIGNhbiBpbnRlcnJ1cHQgc3VicHJvY2Vzc2VzLgorICB0cmFwICI6IiBJTlQgUVVJVCBUU1RQCisKKyAgIyBTZXQgb25sY3IgdG8gYXZvaWQgc3RhaXJjYXNlIGVmZmVjdC4KKyAgc3R0eSBvbmxjciAwPiYxCisKKyAgIyBMaW1pdCBzdGFjayBzaXplIGZvciBzdGFydHVwIHNjcmlwdHMKKyAgWyAiJFNUQUNLX1NJWkUiID09ICIiIF0gfHwgdWxpbWl0IC1TIC1zICRTVEFDS19TSVpFCisKKyAgIyBOb3cgZmluZCBvdXQgd2hhdCB0aGUgY3VycmVudCBhbmQgd2hhdCB0aGUgcHJldmlvdXMgcnVubGV2ZWwgYXJlLgorCisgIHJ1bmxldmVsPSRSVU5MRVZFTAorICAjIEdldCBmaXJzdCBhcmd1bWVudC4gU2V0IG5ldyBydW5sZXZlbCB0byB0aGlzIGFyZ3VtZW50LgorICBbICIkMSIgIT0gIiIgXSAmJiBydW5sZXZlbD0kMQorICBpZiBbICIkcnVubGV2ZWwiID0gIiIgXQorICB0aGVuCisJZWNobyAiVXNhZ2U6ICQwIDxydW5sZXZlbD4iID4mMgorCWV4aXQgMQorICBmaQorICBwcmV2aW91cz0kUFJFVkxFVkVMCisgIFsgIiRwcmV2aW91cyIgPSAiIiBdICYmIHByZXZpb3VzPU4KKworICBleHBvcnQgcnVubGV2ZWwgcHJldmlvdXMKKworICAjIElzIHRoZXJlIGFuIHJjIGRpcmVjdG9yeSBmb3IgdGhpcyBuZXcgcnVubGV2ZWw/CisgIGlmIFsgLWQgL2V0Yy9yYyRydW5sZXZlbC5kIF0KKyAgdGhlbgorCSMgRmluZCBvdXQgd2hlcmUgaW4gdGhlIHByb2dyZXNzIGJhciB0aGUgaW5pdHJhbWZzIGdvdCB0by4KKwlQUk9HUkVTU19TVEFURT0wCisJI2lmIFsgLWYgL2Rldi8uaW5pdHJhbWZzL3Byb2dyZXNzX3N0YXRlIF07IHRoZW4KKwkjICAgIC4gL2Rldi8uaW5pdHJhbWZzL3Byb2dyZXNzX3N0YXRlCisJI2ZpCisKKwkjIFNwbGl0IHRoZSByZW1haW5pbmcgcG9ydGlvbiBvZiB0aGUgcHJvZ3Jlc3MgYmFyIGludG8gdGhpcmRzCisJcHJvZ3Jlc3Nfc2l6ZT0kKCgoMTAwIC0gJFBST0dSRVNTX1NUQVRFKSAvIDMpKQorCisJY2FzZSAiJHJ1bmxldmVsIiBpbgorCQkwfDYpCisJCQkjIENvdW50IGRvd24gZnJvbSAtMTAwIHRvIDAgYW5kIHVzZSB0aGUgZW50aXJlIGJhcgorCQkJZmlyc3Rfc3RlcD0tMTAwCisJCQlwcm9ncmVzc19zaXplPTEwMAorCQkJc3RlcF9jaGFuZ2U9MQorCQkJOzsKKwkgICAgICAgIFMpCisJCQkjIEJlZ2luIHdoZXJlIHRoZSBpbml0cmFtZnMgbGVmdCBvZmYgYW5kIHVzZSAyLzMKKwkJCSMgb2YgdGhlIHJlbWFpbmluZyBzcGFjZQorCQkJZmlyc3Rfc3RlcD0kUFJPR1JFU1NfU1RBVEUKKwkJCXByb2dyZXNzX3NpemU9JCgoJHByb2dyZXNzX3NpemUgKiAyKSkKKwkJCXN0ZXBfY2hhbmdlPTEKKwkJCTs7CisJCSopCisJCQkjIEJlZ2luIHdoZXJlIHJjUyBsZWZ0IG9mZiBhbmQgdXNlIHRoZSBmaW5hbCAxLzMgb2YKKwkJCSMgdGhlIHNwYWNlIChieSBsZWF2aW5nIHByb2dyZXNzX3NpemUgdW5jaGFuZ2VkKQorCQkJZmlyc3Rfc3RlcD0kKCgkcHJvZ3Jlc3Nfc2l6ZSAqIDIgKyAkUFJPR1JFU1NfU1RBVEUpKQorCQkJc3RlcF9jaGFuZ2U9MQorCQkJOzsKKwllc2FjCisKKwludW1fc3RlcHM9MAorCWZvciBzIGluIC9ldGMvcmMkcnVubGV2ZWwuZC9bU0tdKjsgZG8KKyAgICAgICAgICAgIGNhc2UgIiR7cyMjL2V0Yy9yYyRydW5sZXZlbC5kL1M/P30iIGluCisgICAgICAgICAgICAgICAgZ2RtfHhkbXxrZG18cmVib290fGhhbHQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBudW1fc3RlcHM9JCgoJG51bV9zdGVwcyArIDEpKQorICAgICAgICBkb25lCisgICAgICAgIHN0ZXA9MAorCisJIyBGaXJzdCwgcnVuIHRoZSBLSUxMIHNjcmlwdHMuCisJaWYgWyAkcHJldmlvdXMgIT0gTiBdCisJdGhlbgorCQlmb3IgaSBpbiAvZXRjL3JjJHJ1bmxldmVsLmQvS1swLTldWzAtOV0qCisJCWRvCisJCQkjIENoZWNrIGlmIHRoZSBzY3JpcHQgaXMgdGhlcmUuCisJCQlbICEgLWYgJGkgXSAmJiBjb250aW51ZQorCisJCQkjIFN0b3AgdGhlIHNlcnZpY2UuCisJCQlzdGFydHVwICRpIHN0b3AKKwkJZG9uZQorCWZpCisKKwkjIE5vdyBydW4gdGhlIFNUQVJUIHNjcmlwdHMgZm9yIHRoaXMgcnVubGV2ZWwuCisJZm9yIGkgaW4gL2V0Yy9yYyRydW5sZXZlbC5kL1MqCisJZG8KKwkJWyAhIC1mICRpIF0gJiYgY29udGludWUKKworCQlpZiBbICRwcmV2aW91cyAhPSBOIF0gJiYgWyAkcHJldmlvdXMgIT0gUyBdCisJCXRoZW4KKwkJCSMKKwkJCSMgRmluZCBzdGFydCBzY3JpcHQgaW4gcHJldmlvdXMgcnVubGV2ZWwgYW5kCisJCQkjIHN0b3Agc2NyaXB0IGluIHRoaXMgcnVubGV2ZWwuCisJCQkjCisJCQlzdWZmaXg9JHtpIy9ldGMvcmMkcnVubGV2ZWwuZC9TWzAtOV1bMC05XX0KKwkJCXN0b3A9L2V0Yy9yYyRydW5sZXZlbC5kL0tbMC05XVswLTldJHN1ZmZpeAorCQkJcHJldmlvdXNfc3RhcnQ9L2V0Yy9yYyRwcmV2aW91cy5kL1NbMC05XVswLTldJHN1ZmZpeAorCQkJIworCQkJIyBJZiB0aGVyZSBpcyBhIHN0YXJ0IHNjcmlwdCBpbiB0aGUgcHJldmlvdXMgbGV2ZWwKKwkJCSMgYW5kIF9ub18gc3RvcCBzY3JpcHQgaW4gdGhpcyBsZXZlbCwgd2UgZG9uJ3QKKwkJCSMgaGF2ZSB0byByZS1zdGFydCB0aGUgc2VydmljZS4KKwkJCSMKKwkJCVsgLWYgJHByZXZpb3VzX3N0YXJ0IF0gJiYgWyAhIC1mICRzdG9wIF0gJiYgY29udGludWUKKwkJZmkKKwkJY2FzZSAiJHJ1bmxldmVsIiBpbgorCQkJMHw2KQorCQkJCXN0YXJ0dXAgJGkgc3RvcAorCQkJCTs7CisJCQkqKQorCQkJCXN0YXJ0dXAgJGkgc3RhcnQKKwkJCQk7OworCQllc2FjCisJZG9uZQorICBmaQorCisjVW5jb21tZW50IHRvIGNhdXNlIHBzcGxhc2ggdG8gZXhpdCBtYW51YWxseSwgb3RoZXJ3aXNlIGl0IGV4aXRzIHdoZW4gaXQgc2VlcyBhIFZDIHN3aXRjaAoraWYgWyAieCRydW5sZXZlbCIgIT0gInhTIiBdICYmIFsgISAteCAvZXRjL3JjJHtydW5sZXZlbH0uZC9TPz94c2VydmVyLW5vZG0gXTsgdGhlbgorICAgIGlmIHR5cGUgcHNwbGFzaC13cml0ZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgVE1QRElSPS9tbnQvLnBzcGxhc2ggcHNwbGFzaC13cml0ZSAiUVVJVCIgfHwgdHJ1ZQorICAgIAl1bW91bnQgLWwgL21udC8ucHNwbGFzaAorICAgIGZpCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9yY1MgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L3JjUwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wODBiMDRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9yY1MKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisjCisjIHJjUwkJQ2FsbCBhbGwgUz8/KiBzY3JpcHRzIGluIC9ldGMvcmNTLmQgaW4KKyMJCW51bWVyaWNhbC9hbHBoYWJldGljYWwgb3JkZXIuCisjCisjIFZlcnNpb246CUAoIykvZXRjL2luaXQuZC9yY1MgIDIuNzYgIDE5LUFwci0xOTk5ICBtaXF1ZWxzQGNpc3Ryb24ubmwKKyMKKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorcnVubGV2ZWw9UworcHJldmxldmVsPU4KK3VtYXNrIDAyMgorZXhwb3J0IFBBVEggcnVubGV2ZWwgcHJldmxldmVsCisKKyMJTWFrZSBzdXJlIHByb2MgaXMgbW91bnRlZAorIworWyAtZCAiL3Byb2MvMSIgXSB8fCBtb3VudCAvcHJvYworCisjCisjCVNvdXJjZSBkZWZhdWx0cy4KKyMKKy4gL2V0Yy9kZWZhdWx0L3JjUworCisjCisjCVRyYXAgQ1RSTC1DICZjIG9ubHkgaW4gdGhpcyBzaGVsbCBzbyB3ZSBjYW4gaW50ZXJydXB0IHN1YnByb2Nlc3Nlcy4KKyMKK3RyYXAgIjoiIElOVCBRVUlUIFRTVFAKKworIworIwlDYWxsIGFsbCBwYXJ0cyBpbiBvcmRlci4KKyMKK2V4ZWMgL2V0Yy9pbml0LmQvcmMgUworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvcmNTLWRlZmF1bHQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L3JjUy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOWNkZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L3JjUy1kZWZhdWx0CkBAIC0wLDAgKzEsMjkgQEAKKyMKKyMJRGVmYXVsdHMgZm9yIHRoZSBib290IHNjcmlwdHMgaW4gL2V0Yy9yY1MuZAorIworCisjIFRpbWUgZmlsZXMgaW4gL3RtcCBhcmUga2VwdCBpbiBkYXlzLgorVE1QVElNRT0wCisjIFNldCB0byB5ZXMgaWYgeW91IHdhbnQgc3Vsb2dpbiB0byBiZSBzcGF3bmVkIG9uIGJvb3R1cAorU1VMT0dJTj1ubworIyBTZXQgdG8gbm8gaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBsb2dpbiBvdmVyIHRlbG5ldC9ybG9naW4KKyMgYmVmb3JlIHN5c3RlbSBzdGFydHVwIGlzIGNvbXBsZXRlIChhcyBzb29uIGFzIGluZXRkIGlzIHN0YXJ0ZWQpCitERUxBWUxPR0lOPW5vCisjIEFzc3VtZSB0aGF0IHRoZSBCSU9TIGNsb2NrIGlzIHNldCB0byBVVEMgdGltZSAocmVjb21tZW5kZWQpCitVVEM9eWVzCisjIFNldCBWRVJCT1NFIHRvICJubyIgaWYgeW91IHdvdWxkIGxpa2UgYSBtb3JlIHF1aWV0IGJvb3R1cC4KK1ZFUkJPU0U9bm8KKyMgU2V0IEVESVRNT1REIHRvICJubyIgaWYgeW91IGRvbid0IHdhbnQgL2V0Yy9tb3RkIHRvIGJlIGVkaXRlZCBhdXRvbWF0aWNhbGx5CitFRElUTU9URD1ubworIyBXaGV0aGVyIHRvIGZzY2sgcm9vdCBvbiBib290CitFTkFCTEVfUk9PVEZTX0ZTQ0s9bm8KKyMgU2V0IEZTQ0tGSVggdG8gInllcyIgaWYgeW91IHdhbnQgdG8gYWRkICIteSIgdG8gdGhlIGZzY2sgYXQgc3RhcnR1cC4KK0ZTQ0tGSVg9eWVzCisjIFNldCBUSUNLQURKIHRvIHRoZSBjb3JyZWN0IHRpY2sgdmFsdWUgZm9yIHRoaXMgc3BlY2lmaWMgbWFjaGluZQorI1RJQ0tBREo9MTAwMDAKKyMgRW5hYmxlIGNhY2hpbmcgaW4gcG9wdWxhdGUtdm9sYXRpbGUuc2gKK1ZPTEFUSUxFX0VOQUJMRV9DQUNIRT15ZXMKKyMgSW5kaWNhdGUgd2hldGhlciB0aGUgcm9vdGZzIGlzIGludGVuZGVkIHRvIGJlIHJlYWQtb25seSBvciBub3QuCisjIFNldHRpbmcgUk9PVEZTX1JFQURfT05MWSB0byB5ZXMgYW5kIHJlYm9vdGluZyB3aWxsIGdpdmUgeW91IGEgcmVhZC1vbmx5IHJvb3Rmcy4KKyMgTm9ybWFsbHkgeW91IHNob3VsZCBub3QgY2hhbmdlIHRoaXMgdmFsdWUuCitST09URlNfUkVBRF9PTkxZPW5vCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0XzIuODhkc2YuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0XzIuODhkc2YuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRmZTM5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXRfMi44OGRzZi5iYgpAQCAtMCwwICsxLDEwOCBAQAorU1VNTUFSWSA9ICJTeXN0ZW0tViBsaWtlIGluaXQiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgaXMgcmVxdWlyZWQgdG8gYm9vdCBpbiBtb3N0IGNvbmZpZ3VyYXRpb25zLiAgSXQgcHJvdmlkZXMgdGhlIC9zYmluL2luaXQgcHJvZ3JhbS4gIFRoaXMgaXMgdGhlIGZpcnN0IHByb2Nlc3Mgc3RhcnRlZCBvbiBib290LCBhbmQgdGhlIGxhc3QgcHJvY2VzcyB0ZXJtaW5hdGVkIGJlZm9yZSB0aGUgc3lzdGVtIGhhbHRzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL3N5c3Zpbml0LyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWVJJR0hUO2VuZGxpbmU9MTU7bWQ1PTM0OWM4NzJlMDA2NjE1NWUxODE4Yjc4NjkzODg3NmE0IgorUFIgPSAicjE0IgorCitSREVQRU5EU18ke1BOfSA9ICIke1BOfS1pbml0dGFiIgorCitTUkNfVVJJID0gIiR7U0FWQU5OQUhfR05VX01JUlJPUn0vc3lzdmluaXQvc3lzdmluaXQtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9pbnN0YWxsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NyeXB0LWxpYi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9waWRvZi1hZGQtbS1vcHRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1UaGlzLWZpeGVzLWFuLWlzc3VlLXRoYXQtY2xhbmctcmVwb3J0cy1hYm91dC1tdXRsaXBsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JjUy1kZWZhdWx0IFwKKyAgICAgICAgICAgZmlsZTovL3JjIFwKKyAgICAgICAgICAgZmlsZTovL3JjUyBcCisgICAgICAgICAgIGZpbGU6Ly9ib290bG9nZC5pbml0IFwKKyAgICAgICAgICAgZmlsZTovLzAxX2Jvb3Rsb2dkIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjZlZGE4YTk3Yjg2ZTBhNmY1OWRhYmJmMjUyMDJhYTZmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYwYmJjOGMxZTE3OTIwNTZlMjM3NjFkMjI5NjBiMzBiYjEzZWNjYzJjYWJmZjhjNzMxMGEwMWY0ZDVkZjE1MTkiCisKK1MgPSAiJHtXT1JLRElSfS9zeXN2aW5pdC0ke1BWfSIKK0IgPSAiJHtTfS9zcmMiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworREVQRU5EU19hcHBlbmQgPSAiIHVwZGF0ZS1yYy5kLW5hdGl2ZSBiYXNlLXBhc3N3ZCIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiaW5pdCBtb3VudHBvaW50IGhhbHQgcmVib290IHJ1bmxldmVsIHNodXRkb3duIHBvd2Vyb2ZmIGxhc3QgbGFzdGIgbWVzZyB1dG1wZHVtcCB3YWxsIgorCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIyMDAiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtpbml0XSA9ICIke2Jhc2Vfc2JpbmRpcn0vaW5pdCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2luaXRdID0gIjUwIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbW91bnRwb2ludF0gPSAiJHtiYXNlX2JpbmRpcn0vbW91bnRwb2ludCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtoYWx0XSA9ICIke2Jhc2Vfc2JpbmRpcn0vaGFsdCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtyZWJvb3RdID0gIiR7YmFzZV9zYmluZGlyfS9yZWJvb3QiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcnVubGV2ZWxdID0gIiR7YmFzZV9zYmluZGlyfS9ydW5sZXZlbCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzaHV0ZG93bl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3NodXRkb3duIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Bvd2Vyb2ZmXSA9ICIke2Jhc2Vfc2JpbmRpcn0vcG93ZXJvZmYiCisKK0FMVEVSTkFUSVZFXyR7UE59LXBpZG9mID0gInBpZG9mIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3BpZG9mXSA9ICIke2Jhc2VfYmluZGlyfS9waWRvZiIKKworQUxURVJOQVRJVkVfJHtQTn0tc3Vsb2dpbiA9ICJzdWxvZ2luIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N1bG9naW5dID0gIiR7YmFzZV9zYmluZGlyfS9zdWxvZ2luIgorCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAibW91bnRwb2ludC4xIGxhc3QuMSBtZXNnLjEgd2FsbC4xIHN1bG9naW4uOCB1dG1wZHVtcC4xIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbGFzdC4xXSA9ICIke21hbmRpcn0vbWFuMS9sYXN0LjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWVzZy4xXSA9ICIke21hbmRpcn0vbWFuMS9tZXNnLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbW91bnRwb2ludC4xXSA9ICIke21hbmRpcn0vbWFuMS9tb3VudHBvaW50LjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3Vsb2dpbi44XSA9ICIke21hbmRpcn0vbWFuOC9zdWxvZ2luLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdXRtcGR1bXAuMV0gPSAiJHttYW5kaXJ9L21hbjEvdXRtcGR1bXAuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt3YWxsLjFdID0gIiR7bWFuZGlyfS9tYW4xL3dhbGwuMSIKKworUEFDS0FHRVMgPSsgInN5c3Zpbml0LXBpZG9mIHN5c3Zpbml0LXN1bG9naW4iCitGSUxFU18ke1BOfSArPSAiJHtiYXNlX3NiaW5kaXJ9LyogJHtiYXNlX2JpbmRpcn0vKiIKK0ZJTEVTX3N5c3Zpbml0LXBpZG9mID0gIiR7YmFzZV9iaW5kaXJ9L3BpZG9mLnN5c3Zpbml0ICR7YmFzZV9zYmluZGlyfS9raWxsYWxsNSIKK0ZJTEVTX3N5c3Zpbml0LXN1bG9naW4gPSAiJHtiYXNlX3NiaW5kaXJ9L3N1bG9naW4uc3lzdmluaXQiCisKK1JERVBFTkRTXyR7UE59ICs9ICJzeXN2aW5pdC1waWRvZiBpbml0c2NyaXB0cy1mdW5jdGlvbnMiCisKK0NGTEFHU19wcmVwZW5kID0gIi1EX0dOVV9TT1VSQ0UgIgorZXhwb3J0IExDUllQVCA9ICItbGNyeXB0IgorRVhUUkFfT0VNQUtFICs9ICInYmFzZV9iaW5kaXI9JHtiYXNlX2JpbmRpcn0nIFwKKwkJICdiYXNlX3NiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9JyBcCisJCSAnYmluZGlyPSR7YmluZGlyfScgXAorCQkgJ3NiaW5kaXI9JHtzYmluZGlyfScgXAorCQkgJ3N5c2NvbmZkaXI9JHtzeXNjb25mZGlyfScgXAorCQkgJ2luY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfScgXAorCQkgJ21hbmRpcj0ke21hbmRpcn0nIgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICdST09UPSR7RH0nIGluc3RhbGwKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0gXAorCQkgICAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0IFwKKwkJICAgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJZm9yIGxldmVsIGluIFMgMCAxIDIgMyA0IDUgNjsgZG8KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yYyRsZXZlbC5kCisJZG9uZQorCisJaW5zdGFsbCAtbSAwNjQ0ICAgICR7V09SS0RJUn0vcmNTLWRlZmF1bHQJJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9yY1MKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9yYwkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vcmNTCQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9ib290bG9nZC5pbml0ICAgICAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvYm9vdGxvZ2QKKwlsbiAtc2YgYm9vdGxvZ2QgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3N0b3AtYm9vdGxvZ2QKKworCXVwZGF0ZS1yYy5kIC1yICR7RH0gYm9vdGxvZ2Qgc3RhcnQgMDcgUyAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBzdG9wLWJvb3Rsb2dkIHN0YXJ0IDk5IDIgMyA0IDUgLgorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9LzAxX2Jvb3Rsb2dkICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisKKwljaG93biByb290LnNodXRkb3duICR7RH0ke2Jhc2Vfc2JpbmRpcn0vaGFsdCAke0R9JHtiYXNlX3NiaW5kaXJ9L3NodXRkb3duCisJY2htb2Qgby14LHUrcyAke0R9JHtiYXNlX3NiaW5kaXJ9L2hhbHQgJHtEfSR7YmFzZV9zYmluZGlyfS9zaHV0ZG93bgorfQorCitweXRob24gKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiJ3N5c3Zpbml0JyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTIikKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL2Z1bmNzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvc2l0ZV9jb25maWcvZnVuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NjODUzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL2Z1bmNzCkBAIC0wLDAgKzEsNDc0IEBACithNjRsCithYnMKK2FjY2VzcworX19hZGp0aW1leAorYWxhcm0KK2FscGhhc29ydAorYXJnel9hcHBlbmQKK19fYXJnel9jb3VudAorYXJnel9jcmVhdGVfc2VwCithcmd6X2luc2VydAorX19hcmd6X25leHQKK2FyZ3pfbmV4dAorX19hcmd6X3N0cmluZ2lmeQorYXJnel9zdHJpbmdpZnkKK2FzcHJpbnRmCithdGV4aXQKK2F0b2YKK2F0b2kKK2JjbXAKK2Jjb3B5CitiaW5kcmVzdnBvcnQKK2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0CitidG93YworYnplcm8KK2NhbGxvYworY2Fub25pY2FsaXplX2ZpbGVfbmFtZQorY2F0Z2V0cworY2ZnZXRvc3BlZWQKK2Nmc2V0aXNwZWVkCitjZnNldHNwZWVkCitjaG1vZAorY2hvd24KK2Nocm9vdAorY2xvY2sKK2Nsb3NlCitjbG9zZWRpcgorY2xvc2Vsb2cKK2NvbmZzdHIKK2Nvbm5lY3QKK2RhZW1vbgorZGNnZXR0ZXh0CitkaWZmdGltZQorZGlyZmQKK2Rpcm5hbWUKK2RuZ2V0dGV4dAorZHVwMgorZWN2dAorZW5kZ3JlbnQKK2VuZG1udGVudAorZW5kcHdlbnQKK2VuZHV0ZW50CitlbmR1dHhlbnQKK2Vwb2xsX2N0bAorZXJyCitldGhlcl9ob3N0dG9uCitldGhlcl9udG9ob3N0CitldWlkYWNjZXNzCitleGVjdgorZmNoZGlyCitmY2htb2QKK2ZjaG1vZGF0CitmY2hvd24KK2ZjaG93bmF0CitmY250bAorZmN2dAorZmRhdGFzeW5jCitmZG9wZW5kaXIKK2Zlb2ZfdW5sb2NrZWQKK2ZnZXRzX3VubG9ja2VkCitmZ2V0eGF0dHIKK2Zpbml0ZQorZmxpc3R4YXR0cgorZmxvY2sKK2Zsb2NrZmlsZQorZm5tYXRjaAorZm9yaworZnBhdGhjb25mCitfX2ZwZW5kaW5nCitmcHJpbnRmCitmcmVlCitmcmVlYWRkcmluZm8KK2ZyZWVpZmFkZHJzCitmc2Vla28KK19fZnNldGxvY2tpbmcKK2ZzZXR4YXR0cgorZnN0YXQ2NAorZnN0YXQKK2ZzdGF0ZnMKK2ZzeW5jCitmdGVsbG8KK2Z0aW1lCitmdHJ1bmNhdGUKK2Z1bmxvY2tmaWxlCitmdXRpbWVzCitmdXRpbWVzYXQKK2dhaV9zdHJlcnJvcgorZ2N2dAorZ2V0YWRkcmluZm8KK2dldGNfdW5sb2NrZWQKK2dldGN3ZAorZ2V0ZGVsaW0KK2dldGRvbWFpbm5hbWUKK2dldGR0YWJsZXNpemUKK2dldGVnaWQKK2dldGVudgorZ2V0ZXVpZAorZ2V0Z2lkCitnZXRncmVudAorZ2V0Z3JlbnRfcgorZ2V0Z3JnaWRfcgorZ2V0Z3JuYW0KK2dldGdybmFtX3IKK2dldGdyb3VwbGlzdAorZ2V0Z3JvdXBzCitnZXRob3N0YnlhZGRyX3IKK2dldGhvc3RieW5hbWUyCitnZXRob3N0YnluYW1lCitnZXRob3N0YnluYW1lX3IKK2dldGhvc3RlbnQKK2dldGhvc3RpZAorZ2V0aG9zdG5hbWUKK2dldGlmYWRkcnMKK2dldGxpbmUKK2dldGxvYWRhdmcKK2dldG1udGVudAorZ2V0bXNnCitnZXRuYW1laW5mbworZ2V0bmV0YnlhZGRyX3IKK2dldG5ldGdyZW50X3IKK2dldG9wdAorZ2V0b3B0X2xvbmcKK2dldG9wdF9sb25nX29ubHkKK2dldHBhZ2VzaXplCitnZXRwYXNzCitnZXRwZWVybmFtZQorZ2V0cGdycAorZ2V0cGlkCitnZXRwcGlkCitnZXRwcm90b2VudF9yCitnZXRwd2VudAorZ2V0cHdlbnRfcgorZ2V0cHduYW0KK2dldHB3bmFtX3IKK2dldHB3dWlkCitnZXRwd3VpZF9yCitnZXRyZXN1aWQKK2dldHJsaW1pdAorZ2V0cnVzYWdlCitnZXRzZXJ2YnluYW1lCitnZXRzZXJ2YnluYW1lX3IKK2dldHNlcnZieXBvcnRfcgorZ2V0c2VydmVudAorZ2V0c2VydmVudF9yCitnZXRzcG5hbQorZ2V0c3BuYW1fcgorZ2V0dGltZW9mZGF5CitnZXR0dHllbnQKK2dldHR0eW5hbQorZ2V0dWlkCitnZXR1c2Vyc2hlbGwKK2dldHV0ZW50CitnZXR1dGlkCitnZXR1dGxpbmUKK2dldHV0bXAKK2dldHV0bXB4CitnZXR1dHhlbnQKK2dldHV0eGlkCitnZXR1dHhsaW5lCitnZXR3ZAorZ2V0eGF0dHIKK2dsb2IKK2dtdGltZQorZ210aW1lX3IKK2dyYW50cHQKK2dyb3VwX21lbWJlcgoraGVycm9yCitoc3RyZXJyb3IKK2ljb252CitpY29udl9vcGVuCitpZl9mcmVlbmFtZWluZGV4CitpZl9pbmRleHRvbmFtZQoraWZfbmFtZWluZGV4CitpZl9uYW1ldG9pbmRleAoraW5kZXgKK2luZXRfYWRkcgoraW5ldF9hdG9uCitpbmV0X250b2EKK2luZXRfbnRvcAoraW5ldF9wdG9uCitpbml0Z3JvdXBzCitpbm5ldGdyCitpcnVzZXJvaworaXNhc2NpaQoraXNhdHR5Citpc2JsYW5rCitpc2dyYXBoCitpc2luZgoraXNuYW4KK2lzcHJpbnQKK2lzc3BhY2UKK2lzd2FsbnVtCitpc3djbnRybAoraXN3Y3R5cGUKK2lzd3ByaW50Citpc3dzcGFjZQoraXN3dXBwZXIKK2lzeGRpZ2l0CitraWxsCitraWxscGcKK2xjaG93bgorbGNrcHdkZgorbGdldHhhdHRyCitsaW5rCitsaXN0eGF0dHIKK2xsaXN0eGF0dHIKK2xvY2FsdGltZQorbG9jYWx0aW1lX3IKK2xvY2tmCitscmFuZDQ4Citsc2VhcmNoCitsc2VlazY0Citsc2V0eGF0dHIKK2xzdGF0CittYWxsaW5mbworbWFsbG9jCittYmxlbgorbWJybGVuCittYnJ0b3djCittYnNpbml0CittYnNydG93Y3MKK21idG93YworbWVtYWxpZ24KK21lbWNocgorbWVtY21wCittZW1jcHkKK21lbW1vdmUKK21lbXBjcHkKK21lbXJjaHIKK21lbXNldAorbWtkaXIKK21rZGlyYXQKK21rZHRlbXAKK21rZmlmbworbWtub2QKK21rc3RlbXA2NAorbWtzdGVtcAorbWt0aW1lCittbG9jaworbW1hcAorbXRyYWNlCittdW5sb2NrCittdW5tYXAKK25hbm9zbGVlcAorbmljZQorbmxfbGFuZ2luZm8KK250cF9hZGp0aW1lCitudHBfZ2V0dGltZQorX29ic3RhY2tfZnJlZQorb25fZXhpdAorb3BlbjY0CitvcGVuCitvcGVuYXQKK29wZW5kaXIKK29wZW5sb2cKK3BhdGhjb25mCitwaXBlCitwb2xsCitwb3BlbgorcG9zaXhfbWVtYWxpZ24KK3ByY3RsCitwcmVhZAorcHJpbnRmCitfX3Byb2duYW1lCitwc2VsZWN0CitwdGhyZWFkX211dGV4X2xvY2sKK3B0c25hbWUKK3B1dGVudgorcHV0Z3JlbnQKK3B1dHB3ZW50CitwdXRzcGVudAorcHV0dXRsaW5lCitwdXR1dHhsaW5lCitwdXR3YworcHdyaXRlCitxc29ydAorcmFpc2UKK3JhbmQKK3JhbmRvbQorcmFuZF9yCityZWFkCityZWFkZGlyCityZWFkZGlyX3IKK3JlYWRsaW5rCityZWFsbG9jCityZWFscGF0aAorcmVfY29tcAorcmVjdm1zZworcmVfZXhlYworcmVnY29tcAorcmVnZXhlYworcmVtb3ZlCityZW5hbWUKK3JlX3NlYXJjaAorcm1kaXIKK3JwbWF0Y2gKK3JyZXN2cG9ydF9hZgorcnVzZXJvaworcnVzZXJva19hZgorc2Jyaworc2NhbmRpcgorc2NoZWRfc2V0c2NoZWR1bGVyCitzY2hlZF95aWVsZAorX19zZWN1cmVfZ2V0ZW52CitzZWxlY3QKK3NlbWN0bAorc2VtZ2V0CitzZW5kbXNnCitzZXRidWYKK3NldGJ1ZmZlcgorc2V0ZWdpZAorc2V0ZW52CitzZXRldWlkCitzZXRnaWQKK3NldGdyb3Vwcworc2V0aG9zdG5hbWUKK3NldGl0aW1lcgorX3NldGptcAorc2V0am1wCitzZXRsaW5lYnVmCitzZXRsb2NhbGUKK3NldG1udGVudAorc2V0cGdpZAorc2V0cGdycAorc2V0cHJpb3JpdHkKK3NldHJlZ2lkCitzZXRyZXNnaWQKK3NldHJlc3VpZAorc2V0cmV1aWQKK3NldHJsaW1pdAorc2V0c2lkCitzZXRzb2Nrb3B0CitzZXR0aW1lb2ZkYXkKK3NldHVpZAorc2V0dXRlbnQKK3NldHV0eGVudAorc2V0dmJ1Zgorc2V0eGF0dHIKK3NnZXRzcGVudAorc2htYXQKK3NobWN0bAorc2htZHQKK3NobWdldAorc2h1dGRvd24KK3NpZ2FjdGlvbgorc2lnYWRkc2V0CitzaWdhbHRzdGFjaworc2lnYmxvY2sKK3NpZ2VtcHR5c2V0CitzaWdob2xkCitzaWdpbnRlcnJ1cHQKK3NpZ25hbAorc2lncHJvY21hc2sKK3NpZ3NldAorc2lnc2V0bWFzaworc2lnc3RhY2sKK3NpZ3N1c3BlbmQKK3NpZ3ZlYworc25wcmludGYKK3NvY2tldAorc29ja2V0cGFpcgorc3ByaW50Zgorc3JhbmQ0OAorc3JhbmQKK3NyYW5kb20KK3NzY2FuZgorc3RhdAorc3RhdGZzCitzdGF0dmZzCitzdGltZQorc3RwY3B5CitzdHJjYXNlY21wCitzdHJjYXNlc3RyCitzdHJjaHIKK3N0cmNocm51bAorc3RyY21wCitzdHJjc3BuCitzdHJkdXAKK3N0cmVycm9yCitzdHJlcnJvcl9yCitzdHJmdGltZQorc3RybGVuCitzdHJuY2FzZWNtcAorc3RybmNtcAorc3RybmR1cAorc3Rybmxlbgorc3RycGJyaworc3RycHRpbWUKK3N0cnJjaHIKK3N0cnNlcAorc3Ryc2lnbmFsCitzdHJzcG4KK3N0cnN0cgorc3RydG9kCitzdHJ0b2ltYXgKK3N0cnRva19yCitzdHJ0b2wKK3N0cnRvbGwKK3N0cnRvdWwKK3N0cnRvdWxsCitzdHJ0b3VtYXgKK3N0cnZlcnNjbXAKK3N0cnhmcm0KK3N5bWxpbmsKK3N5bmMKK3N5c2NvbmYKK3N5c2N0bAorc3lzaW5mbworc3lzbG9nCitfc3lzX3NpZ2xpc3QKK3N5c19zaWdsaXN0CitzeXN0ZW0KK3RjZ2V0YXR0cgordGNnZXRwZ3JwCit0Y3NldGF0dHIKK3Rjc2V0cGdycAordGltZQordGltZWdtCit0aW1lcwordGltZXpvbmUKK3RtcG5hbQordG93bG93ZXIKK3Rvd3VwcGVyCit0cnVuY2F0ZQordHNlYXJjaAordHR5bmFtZQordHpzZXQKK3VsaW1pdAordW1hc2sKK3VuYW1lCit1bmxpbmsKK3Vuc2V0ZW52Cit1bnNoYXJlCit1cGR3dG1wCit1cGR3dG1weAordXNsZWVwCit1c3RhdAordXRpbWUKK3V0aW1lcwordXRtcG5hbWUKK3V0bXB4bmFtZQordmFsbG9jCit2YXNwcmludGYKK3ZlcnJ4Cit2Zm9yawordmZwcmludGYKK3Zmc2NhbmYKK3ZoYW5ndXAKK3ZwcmludGYKK3ZzbnByaW50ZgordnNwcmludGYKK3dhaXQzCit3YWl0NAord2FpdHBpZAord2NydG9tYgord2NzY29sbAord2NzZHVwCit3Y3NsZW4KK3djdG9iCit3Y3RvbWIKK3djdHlwZQord2N3aWR0aAord21lbWNocgord21lbWNweQord21lbXBjcHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL2hlYWRlcnMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy9oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOWFiNTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy9oZWFkZXJzCkBAIC0wLDAgKzEsMTU2IEBACithaW8uaAorYWxsb2NhLmgKK2FyZ3ouaAorYXJwYS9pbmV0LmgKK2FycGEvbmFtZXNlci5oCithc20vYnl0ZW9yZGVyLmgKK2FzbS9pb2N0bHMuaAorYXNtL3BhZ2UuaAorYXNtL3R5cGVzLmgKK2Fzc2VydC5oCitieXRlc3dhcC5oCitjcnlwdC5oCitjdHlwZS5oCitkaXJlbnQuaAorZGxmY24uaAorZWxmLmgKK2VuZGlhbi5oCitlcnIuaAorZXJybm8uaAorZXhlY2luZm8uaAorZmNudGwuaAorZmVhdHVyZXMuaAorZmxvYXQuaAorZnN0YWIuaAorZnR3LmgKK2dldG9wdC5oCitnbG9iLmgKK2dycC5oCitpY29udi5oCitpZmFkZHJzLmgKK2ludHR5cGVzLmgKK2xhbmdpbmZvLmgKK2xhc3Rsb2cuaAorbGliZ2VuLmgKK2xpYmludGwuaAorbGltaXRzLmgKK2xpbnV4L2NhcGFiaWxpdHkuaAorbGludXgvZmQuaAorbGludXgvZnMuaAorbGludXgvaGF5ZXNlc3AuaAorbGludXgvaGRyZWcuaAorbGludXgvaWNtcC5oCitsaW51eC9pbjYuaAorbGludXgvam95c3RpY2suaAorbGludXgvcHRyYWNlLmgKK2xpbnV4L3NlcmlhbC5oCitsaW51eC9zb255cGkuaAorbGludXgvdW5pc3RkLmgKK2xpbnV4L3V0c25hbWUuaAorbGludXgvdmVyc2lvbi5oCitsb2NhbGUuaAorbWFsbG9jLmgKK21hdGguaAorbWNoZWNrLmgKK21lbW9yeS5oCittbnRlbnQuaAorbXF1ZXVlLmgKK25ldGRiLmgKK25ldC9pZi5oCituZXRpbmV0L2V0aGVyLmgKK25ldGluZXQvaW4uaAorbmV0aW5ldC9pcDYuaAorbmV0aW5ldC9pcC5oCituZXRpbmV0L3RjcC5oCituZXRpbmV0L3VkcC5oCituZXRpcHgvaXB4LmgKK25ldC9yb3V0ZS5oCitwYXRocy5oCitwb2xsLmgKK3B0aHJlYWQuaAorcHR5LmgKK3B3ZC5oCityZWdleC5oCityZXNvbHYuaAorcnBjL3JwYy5oCitycGMvdHlwZXMuaAorc2NoZWQuaAorc2NzaS9zY3NpLmgKK3NlYXJjaC5oCitzZW1hcGhvcmUuaAorc2V0am1wLmgKK3NndHR5LmgKK3NoYWRvdy5oCitzaWduYWwuaAorc3RkYXJnLmgKK3N0ZGJvb2wuaAorc3RkYworc3RkZGVmLmgKK3N0ZGludC5oCitzdGRpby5oCitzdGRsaWIuaAorc3RyaW5nLmgKK3N0cmluZ3MuaAorc3Ryb3B0cy5oCitzeXMvYml0eXBlcy5oCitzeXMvY2RlZnMuaAorc3lzL2Rpci5oCitzeXMvZXBvbGwuaAorc3lzZXhpdHMuaAorc3lzL2ZjbnRsLmgKK3N5cy9maWxlLmgKK3N5cy9mc3VpZC5oCitzeXMvaW9jdGwuaAorc3lzL2lwYy5oCitzeXNsb2cuaAorc3lzL21tYW4uaAorc3lzL21vdW50LmgKK3N5cy9tdGlvLmgKK3N5cy9wYXJhbS5oCitzeXMvcG9sbC5oCitzeXMvcHJjdGwuaAorc3lzL3B0cmFjZS5oCitzeXMvcXVldWUuaAorc3lzL3JlZy5oCitzeXMvcmVzb3VyY2UuaAorc3lzL3NlbGVjdC5oCitzeXMvc2VtLmgKK3N5cy9zaG0uaAorc3lzL3NpZ25hbC5oCitzeXMvc29ja2V0LmgKK3N5cy9zb2NrZXR2YXIuaAorc3lzL3NvdW5kY2FyZC5oCitzeXMvc3RhdGZzLmgKK3N5cy9zdGF0LmgKK3N5cy9zdGF0dmZzLmgKK3N5cy9zdHJvcHRzLmgKK3N5cy9zd2FwLmgKK3N5cy9zeXNjdGwuaAorc3lzL3N5c2luZm8uaAorc3lzL3N5c21hY3Jvcy5oCitzeXMvdGVybWlvcy5oCitzeXMvdGltZWIuaAorc3lzL3RpbWUuaAorc3lzL3RpbWVzLmgKK3N5cy90aW1leC5oCitzeXMvdHlwZXMuaAorc3lzL3Vpby5oCitzeXMvdW4uaAorc3lzL3VuaXN0ZC5oCitzeXMvdXNlci5oCitzeXMvdXRzbmFtZS5oCitzeXMvdmZzLmgKK3N5cy93YWl0LmgKK3Rlcm1pby5oCit0ZXJtaW9zLmgKK3RpbWUuaAordHR5ZW50LmgKK3VsaW1pdC5oCit1bmlzdGQuaAordXN0YXQuaAordXRpbWUuaAordXRtcC5oCit1dG1weC5oCit2YWx1ZXMuaAord2NoYXIuaAord2N0eXBlLmgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL3R5cGVzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvc2l0ZV9jb25maWcvdHlwZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4YmQ4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL3R5cGVzCkBAIC0wLDAgKzEsMjEgQEAKK2NoYXIKK2NoYXIgKgorZG91YmxlCitmbG9hdAoraW50Citsb25nCitsb25nIGRvdWJsZQorbG9uZyBpbnQKK2xvbmcgbG9uZworbG9uZyBsb25nIGludAorc2hvcnQKK3Nob3J0IGludAorc2lnbmVkIGNoYXIKK3Vuc2lnbmVkIGNoYXIKK3Vuc2lnbmVkIGludAordW5zaWduZWQgbG9uZwordW5zaWduZWQgbG9uZyBpbnQKK3Vuc2lnbmVkIGxvbmcgbG9uZyBpbnQKK3Vuc2lnbmVkIHNob3J0Cit1bnNpZ25lZCBzaG9ydCBpbnQKK3ZvaWQgKgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWNvbmZpZy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtY29uZmlnLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjllNDFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWNvbmZpZy5pbmMKQEAgLTAsMCArMSwxNDIgQEAKK0RFUEVORFMgKz0gImtlcm4tdG9vbHMtbmF0aXZlIgoraW5oZXJpdCBjbWwxCisjCisjIFNldCB0aGUgQVJDSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgdUNsaWJjIGNvbXBpbGF0aW9uLgorIyBSZXR1cm4gdmFsdWUgbXVzdCBtYXRjaCBvbmUgb2YgdGhlIGFyY2hpdGVjdHVyZXMga25vd24gdG8gdUNsaWJjOgorIyBsaWJjL3N5c2RlcHMvKi8qCisjCisKK3ZhbGlkX2FyY2hzID0gIlwKK2FscGhhIFwKK2FybSBcCithdnIzMiBcCitiZmluIFwKK2M2eCBcCitjcmlzIFwKK2UxIFwKK2ZydiBcCitoODMwMCBcCitocHBhIFwKK2kzODYgXAoraTk2MCBcCitpYTY0IFwKK202OGsgXAorbWljcm9ibGF6ZSBcCittaXBzIFwKK25pb3MgXAorbmlvczIgXAorcG93ZXJwYyBcCitzaCBcCitzaDY0IFwKK3NwYXJjIFwKK3Y4NTAgXAordmF4IFwKK3g4Nl82NCBcCit4dGVuc2EgXAorIgorZGVmIG1hcF91Y2xpYmNfYXJjaChhLCBkKToKKyAgICAiIiJSZXR1cm4gdGhlIHVDbGliYyBhcmNoaXRlY3R1cmUgZm9yIHRoZSBnaXZlbiBUQVJHRVRfQVJDSC4iIiIKKyAgICBpbXBvcnQgcmUKKworICAgIHZhbGlkX2FyY2hzID0gZC5nZXRWYXIoJ3ZhbGlkX2FyY2hzJywgVHJ1ZSkuc3BsaXQoKQorCisgICAgaWYgcmUubWF0Y2goJ14oYXJtfHNhMTEwKS4qJywgYSk6CisgICAgICAgIHJldHVybiAnYXJtJworICAgIGVsaWYgcmUubWF0Y2goJ14oaS44NnxhdGhsb24pJCcsIGEpOgorICAgICAgICByZXR1cm4gJ2kzODYnCisgICAgZWxpZiByZS5tYXRjaCgnXm1pcHMuKicsIGEpOgorICAgICAgICByZXR1cm4gJ21pcHMnCisgICAgZWxpZiByZS5tYXRjaCgnXnBhcmlzYy4qJywgYSk6CisgICAgICAgIHJldHVybiAnaHBwYScKKyAgICBlbGlmIHJlLm1hdGNoKCdecHBjLionLCBhKToKKyAgICAgICAgcmV0dXJuICdwb3dlcnBjJworICAgIGVsaWYgcmUubWF0Y2goJ15zMzkwLionLCBhKToKKyAgICAgICAgcmV0dXJuICdzMzkwJworICAgIGVsaWYgcmUubWF0Y2goJ15zaC4qJywgYSk6CisgICAgICAgIHJldHVybiAnc2gnCisgICAgZWxpZiByZS5tYXRjaCgnXihzdW58c3BhcmMpLionLCBhKToKKyAgICAgICAgcmV0dXJuICdzcGFyYycKKyAgICBlbGlmIHJlLm1hdGNoKCdeeHRlbnNhLionLCBhKToKKyAgICAgICAgcmV0dXJuICd4dGVuc2EnCisgICAgZWxpZiBhIGluIHZhbGlkX2FyY2hzOgorICAgICAgICByZXR1cm4gYQorICAgIGVsc2U6CisgICAgICAgIGJiLmVycm9yKCJjYW5ub3QgbWFwICclcycgdG8gYSB1Q2xpYmMgYXJjaGl0ZWN0dXJlIiAlIGEpCisKK2V4cG9ydCBVQ0xJQkNfQVJDSCA9ICIke0BtYXBfdWNsaWJjX2FyY2goZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSksIGQpfSIKKworZGVmIG1hcF91Y2xpYmNfYWJpKG8sIGQpOgorICAgICIiIlJldHVybiB0aGUgdUNsaWJjIEFCSSBmb3IgdGhlIGdpdmVuIFRBUkdFVF9PUy4iIiIKKyAgICBpbXBvcnQgcmUKKworICAgIGFyY2ggPSBkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKQorICAgIGlmIG1hcF91Y2xpYmNfYXJjaChkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKSwgZCkgPT0gImFybSI6CisgICAgICAgIGlmIHJlLm1hdGNoKCcuKmVhYmkkJywgbyk6CisgICAgICAgICAgICByZXR1cm4gJ0FSTV9FQUJJJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICdBUk1fT0FCSScKKyAgICAjIEZJWE1FOiBUaGlzIGlzIGluYWNjdXJhdGUhIEhhbmRsZSBvMzIsIG4zMiwgbjY0CisgICAgZWxpZiByZS5tYXRjaCgnXm1pcHMuKjY0JCcsIGFyY2gpOgorICAgICAgICByZXR1cm4gJ01JUFNfTjY0X0FCSScKKyAgICBlbGlmIHJlLm1hdGNoKCdebWlwcy4qJywgYXJjaCk6CisgICAgICAgIHJldHVybiAnTUlQU19PMzJfQUJJJworICAgIHJldHVybiAiIgorCitleHBvcnQgVUNMSUJDX0FCSSA9ICIke0BtYXBfdWNsaWJjX2FiaShkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSksIGQpfSIKKworZGVmIG1hcF91Y2xpYmNfZW5kaWFuKGEsIGQpOgorICAgICIiIlJldHVybiB0aGUgdUNsaWJjIGVuZGlhbmVzcyBmb3IgdGhlIGdpdmVuIFRBUkdFVF9BUkNILiIiIgorICAgIGltcG9ydCByZQorCisgICAgIyBBbHdheXMgQkUKKyAgICBpZiByZS5tYXRjaCgnXihhdnIzMnxlMXxmcnZ8KHBhcmlzY3xocHBhKXxtNjhrfG1pY3JvYmxhemV8cG93ZXJwYy4qfChzcGFyY3xzdW4pLiopJCcsIGEpOgorICAgICAgICByZXR1cm4gJ0JJRycKKyAgICAjIFBvc3NpYmx5IEJFCisgICAgZWxpZiByZS5tYXRjaCgnXigoKGFybXxzYTExMCkuKmViKXxoODMwMC4qZWJ8KHBhcmlzY3xocHBhKS4qZWJ8bWlwc3xtaXBzNjR8c2guKmVifHh0ZW5zYS4qZWIpJCcsIGEpOgorICAgICAgICByZXR1cm4gJ0JJRycKKyAgICByZXR1cm4gJ0xJVFRMRScKKworZXhwb3J0IFVDTElCQ19FTkRJQU4gPSAiJHtAbWFwX3VjbGliY19lbmRpYW4oZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSksIGQpfSIKKworIyBpbnRlcm5hbCBoZWxwZXIKK2RlZiB1Y2xpYmNfY2ZnKGZlYXR1cmUsIGZlYXR1cmVzLCB0b2tlbnMsIGNuZiwgcmVtKToKKyAgICBpZiB0eXBlKHRva2VucykgPT0gdHlwZSgiIik6CisgICAgICAgIHRva2VucyA9IFt0b2tlbnNdCisgICAgcmVtLmV4dGVuZChbJy9eWyMgXSonICsgdG9rZW4gKyAnWyA9XS9kJyBmb3IgdG9rZW4gaW4gdG9rZW5zXSkKKyAgICBpZiB0eXBlKGZlYXR1cmVzKSA9PSB0eXBlKFtdKSBhbmQgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgY25mLmV4dGVuZChbdG9rZW4gKyAnPXknIGZvciB0b2tlbiBpbiB0b2tlbnNdKQorICAgIGVsc2U6CisgICAgICAgIGNuZi5leHRlbmQoWycjICcgKyB0b2tlbiArICcgaXMgbm90IHNldCcgZm9yIHRva2VuIGluIHRva2Vuc10pCisKKyMgTWFwIGRpc3RybyBmZWF0dXJlcyB0byBjb25maWcgc2V0dGluZ3MKK2RlZiBmZWF0dXJlc190b191Y2xpYmNfc2V0dGluZ3MoZCk6CisgICAgY25mLCByZW0gPSAoW10sIFtdKQorICAgIGRpc3Ryb19mZWF0dXJlcyA9IGQuZ2V0VmFyKCdESVNUUk9fRkVBVFVSRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgdWNsaWJjX2NmZygnaXB2NCcsICAgICAgZGlzdHJvX2ZlYXR1cmVzLCAnVUNMSUJDX0hBU19JUFY0JywgY25mLCByZW0pCisgICAgdWNsaWJjX2NmZygnaXB2NicsICAgICAgZGlzdHJvX2ZlYXR1cmVzLCAnVUNMSUJDX0hBU19JUFY2JywgY25mLCByZW0pCisgICAgdWNsaWJjX2NmZygnbGFyZ2VmaWxlJywgZGlzdHJvX2ZlYXR1cmVzLCAnVUNMSUJDX0hBU19MRlMnLCBjbmYsIHJlbSkKKyAgICB1Y2xpYmNfY2ZnKCdubHMnLCAgICAgICBkaXN0cm9fZmVhdHVyZXMsICdVQ0xJQkNfSEFTX0xPQ0FMRScsIGNuZiwgcmVtKQorICAgIHVjbGliY19jZmcoJ3RodW1iLWludGVyd29yaycsIGRpc3Ryb19mZWF0dXJlcywnVVNFX0JYJywgY25mLCByZW0pCisgICAgdWNsaWJjX2NmZygneGF0dHInLCAgICAgZGlzdHJvX2ZlYXR1cmVzLCAnVUNMSUJDX0hBU19YQVRUUicsIGNuZiwgcmVtKQorICAgIHVjbGliY19jZmcoJ3NzcCcsICAgICAgIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfU1NQJywgY25mLCByZW0pCisgICAgdWNsaWJjX2NmZygnYXJncCcsICAgICAgIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfQVJHUCcsIGNuZiwgcmVtKQorICAgIHVjbGliY19jZmcoJ2xpYmMtcG9zaXgtY2xhbmctd2NoYXInLCAgZGlzdHJvX2ZlYXR1cmVzLCdVQ0xJQkNfSEFTX1dDSEFSJywgY25mLCByZW0pCisgICAgcmV0dXJuICJcbiIuam9pbihjbmYpLCAiXG4iLmpvaW4ocmVtKQorIyBYLCBZID0gJHtAZmVhdHVyZXNfdG9fdWNsaWJjX3NldHRpbmdzKGQpfQorIyB1bmZvcnR1bmF0ZWx5IGRvZXNuJ3Qgc2VlbSB0byB3b3JrIHdpdGggYml0YmFrZSwgd29ya2Fyb3VuZDoKK2RlZiBmZWF0dXJlc190b191Y2xpYmNfY29uZihkKToKKyAgICBjbmYsIHJlbSA9IGZlYXR1cmVzX3RvX3VjbGliY19zZXR0aW5ncyhkKQorICAgIHJldHVybiBjbmYKK2RlZiBmZWF0dXJlc190b191Y2xpYmNfZGVsKGQpOgorICAgIGNuZiwgcmVtID0gZmVhdHVyZXNfdG9fdWNsaWJjX3NldHRpbmdzKGQpCisgICAgcmV0dXJuIHJlbQorCisjIHJldHVybnMgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBzcmMgdXJpIHRoYXQgYXJlIC5jZmcgZmlsZXMKK2RlZiBmaW5kX2NmZ3MoZCk6CisgICAgc291cmNlcz1zcmNfcGF0Y2hlcyhkLCBUcnVlKQorICAgIHNvdXJjZXNfbGlzdD1bXQorICAgIGZvciBzIGluIHNvdXJjZXM6CisgICAgICAgIGlmIHMuZW5kc3dpdGgoJy5jZmcnKToKKyAgICAgICAgICAgIHNvdXJjZXNfbGlzdC5hcHBlbmQocykKKworICAgIHJldHVybiBzb3VyY2VzX2xpc3QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhNTc3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQuaW5jCkBAIC0wLDAgKzEsMjAgQEAKK1NSQ1JFViA9ICJjYTFjNzRkNjdkZDExNWQwNTlhODc1MTUwZTEwYjg1NjBhOWMzNWE4IgorCitQViA9ICIwLjkuMzMrZ2l0JHtTUkNQVn0iCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L3VjbGliYy1naXQ6IgorCitTUkNfVVJJID0gImdpdDovL3VjbGliYy5vcmcvdUNsaWJjLmdpdDticmFuY2g9bWFzdGVyIFwKKyAgICAgICAgZmlsZTovL3VDbGliYy5tYWNoaW5lIFwKKyAgICAgICAgZmlsZTovL3VDbGliYy5kaXN0cm8gXAorICAgICAgICBmaWxlOi8vb2JzdGFjay5jZmcgXAorICAgICAgICBmaWxlOi8vbG9jYWxlLmNmZyBcCisgICAgICAgIGZpbGU6Ly8wMDAxLURpc2FibGUtbHJvdW50X3Rlcy1mdW5jdGlvbi5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAyLUFkZC1pbXBsZW1lbnRhdGlvbi1mb3ItY29weXNpZ25sLWZvci1wcGMucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMy1BZGQtYXJncC1pbXBsZW1lbnRhdGlvbi5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDA0LURvbnQtc3VwcG9ydC1sb2NhbGlzZWQtb3B0aW1pemF0aW9ucy10aGlzLWhlbHBzLXRvLWgucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwNS1BbHdheXMtdXNlLU8yLWZvci1jb21waWxpbmctZm9yay5jLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDYtbGRzby1saW1pdGVkLXN1cHBvcnQtZm9yLU9SSUdJTi1pbi1ycGF0aC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDA3LW5wdGwtYXRmb3JrLUhpZGUtcHRocmVhZF9hdGZvcmstaW4tc2hhcmVkLXZlcnNpb25zLnBhdGNoIFwKKyIKK1MgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDEtRGlzYWJsZS1scm91bnRfdGVzLWZ1bmN0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAxLURpc2FibGUtbHJvdW50X3Rlcy1mdW5jdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDZmMTQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAxLURpc2FibGUtbHJvdW50X3Rlcy1mdW5jdGlvbi5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIDE0Yjg2NWIzNDM4ZDBkZjI5YjQ5NjkxNDg2NzhkOGZhODk0M2UxZWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCAxNiBBdWcgMjAxNSAyMDo0OTozMyAtMDcwMAorU3ViamVjdDogW1BBVENIIDEvN10gRGlzYWJsZSBscm91bnRfdGVzKCkgZnVuY3Rpb24KKworSXRzIG5vdCB1c2VkIGFueXdheSwgYXZvaWRzIHNvbWUgc3RyaWN0IGNvbXBpbGVyIHdhcm5pbmdzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgdGVzdC9tYXRoL2xpYm0tdGVzdC5pbmMgfCAyIC0tCisgMSBmaWxlIGNoYW5nZWQsIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0L21hdGgvbGlibS10ZXN0LmluYyBiL3Rlc3QvbWF0aC9saWJtLXRlc3QuaW5jCitpbmRleCBmNTBiNDhiLi42ZDcwYTk1IDEwMDY0NAorLS0tIGEvdGVzdC9tYXRoL2xpYm0tdGVzdC5pbmMKKysrKyBiL3Rlc3QvbWF0aC9saWJtLXRlc3QuaW5jCitAQCAtMzQ3MCw3ICszNDcwLDYgQEAgbG9nYl90ZXN0ICh2b2lkKQorIH0KKyAKKyAKKy0jaWYgMAorIHN0YXRpYyB2b2lkCisgbHJvdW5kX3Rlc3QgKHZvaWQpCisgeworQEAgLTM2MDUsNyArMzYwNCw2IEBAIGxscm91bmRfdGVzdCAodm9pZCkKKyAKKyAgIEVORCAobGxyb3VuZCk7CisgfQorLSNlbmRpZgorIAorIHN0YXRpYyB2b2lkCisgbW9kZl90ZXN0ICh2b2lkKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDItQWRkLWltcGxlbWVudGF0aW9uLWZvci1jb3B5c2lnbmwtZm9yLXBwYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwMi1BZGQtaW1wbGVtZW50YXRpb24tZm9yLWNvcHlzaWdubC1mb3ItcHBjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0Mjc1YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDItQWRkLWltcGxlbWVudGF0aW9uLWZvci1jb3B5c2lnbmwtZm9yLXBwYy5wYXRjaApAQCAtMCwwICsxLDEyNSBAQAorRnJvbSA1ZDM2MjA3NGU1OTc1YjE1MGEzNWJjZmE3N2VhYjFiZmE0ZTMwZGU3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTYgQXVnIDIwMTUgMjA6NTA6NTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzddIEFkZCBpbXBsZW1lbnRhdGlvbiBmb3IgY29weXNpZ25sIGZvciBwcGMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBsaWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9NYWtlZmlsZS5hcmNoIHwgIDIgKy0KKyBsaWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9jb3B5c2lnbmwuYyAgIHwgODkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDkwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvY29weXNpZ25sLmMKKworZGlmZiAtLWdpdCBhL2xpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL01ha2VmaWxlLmFyY2ggYi9saWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9NYWtlZmlsZS5hcmNoCitpbmRleCA0ZmJjYjExLi43YzA5Yzg3IDEwMDY0NAorLS0tIGEvbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvTWFrZWZpbGUuYXJjaAorKysrIGIvbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvTWFrZWZpbGUuYXJjaAorQEAgLTUsNyArNSw3IEBACisgIyBMaWNlbnNlZCB1bmRlciB0aGUgTEdQTCB2Mi4xLCBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIgaW4gdGhpcyB0YXJiYWxsLgorICMKKyAKKy1DU1JDLXkgOj0gX19zeXNjYWxsX2Vycm9yLmMgaW9jdGwuYworK0NTUkMteSA6PSBfX3N5c2NhbGxfZXJyb3IuYyBpb2N0bC5jIGNvcHlzaWdubC5jCisgCisgU1NSQy15IDo9IFwKKyAJX19sb25nam1wLlMgc2V0am1wLlMgYnNkLXNldGptcC5TIGJzZC1fc2V0am1wLlMgYnJrLlMgXAorZGlmZiAtLWdpdCBhL2xpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL2NvcHlzaWdubC5jIGIvbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvY29weXNpZ25sLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMDBmNjUzCistLS0gL2Rldi9udWxsCisrKysgYi9saWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9jb3B5c2lnbmwuYworQEAgLTAsMCArMSw4OSBAQAorKy8qIHNfY29weXNpZ25sLmMgLS0gbG9uZyBkb3VibGUgdmVyc2lvbiBvZiBzX2NvcHlzaWduLmMuCisrICogQ29udmVyc2lvbiB0byBsb25nIGRvdWJsZSBieSBVbHJpY2ggRHJlcHBlciwKKysgKiBDeWdudXMgU3VwcG9ydCwgZHJlcHBlckBjeWdudXMuY29tLgorKyAqLworKworKy8qCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisrICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisrICogaXMgcHJlc2VydmVkLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysvKgorKyAqIGNvcHlzaWdubChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KQorKyAqIGNvcHlzaWdubCh4LHkpIHJldHVybnMgYSB2YWx1ZSB3aXRoIHRoZSBtYWduaXR1ZGUgb2YgeCBhbmQKKysgKiB3aXRoIHRoZSBzaWduIGJpdCBvZiB5LgorKyAqLworKworKyNpbmNsdWRlIDxlbmRpYW4uaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrCisrI2lmIF9fRkxPQVRfV09SRF9PUkRFUiA9PSBCSUdfRU5ESUFOCisrCisrdHlwZWRlZiB1bmlvbgorK3sKKysgIGxvbmcgZG91YmxlIHZhbHVlOworKyAgc3RydWN0CisrICB7CisrICAgIGludCBzaWduX2V4cG9uZW50OjE2OworKyAgICB1bnNpZ25lZCBpbnQgZW1wdHk6MTY7CisrICAgIHVpbnQzMl90IG1zdzsKKysgICAgdWludDMyX3QgbHN3OworKyAgfSBwYXJ0czsKKyt9IGllZWVfbG9uZ19kb3VibGVfc2hhcGVfdHlwZTsKKysKKysjZW5kaWYKKysKKysjaWYgX19GTE9BVF9XT1JEX09SREVSID09IExJVFRMRV9FTkRJQU4KKysKKyt0eXBlZGVmIHVuaW9uCisreworKyAgbG9uZyBkb3VibGUgdmFsdWU7CisrICBzdHJ1Y3QKKysgIHsKKysgICAgdWludDMyX3QgbHN3OworKyAgICB1aW50MzJfdCBtc3c7CisrICAgIGludCBzaWduX2V4cG9uZW50OjE2OworKyAgICB1bnNpZ25lZCBpbnQgZW1wdHk6MTY7CisrICB9IHBhcnRzOworK30gaWVlZV9sb25nX2RvdWJsZV9zaGFwZV90eXBlOworKworKyNlbmRpZgorKworKy8qIEdldCBpbnQgZnJvbSB0aGUgZXhwb25lbnQgb2YgYSBsb25nIGRvdWJsZS4gICovCisrCisrI2RlZmluZSBHRVRfTERPVUJMRV9FWFAoZXhwLGQpCQkJCQlcCisrZG8gewkJCQkJCQkJXAorKyAgaWVlZV9sb25nX2RvdWJsZV9zaGFwZV90eXBlIGdlX3U7CQkJCVwKKysgIGdlX3UudmFsdWUgPSAoZCk7CQkJCQkJXAorKyAgKGV4cCkgPSBnZV91LnBhcnRzLnNpZ25fZXhwb25lbnQ7CQkJCVwKKyt9IHdoaWxlICgwKQorKworKy8qIFNldCBleHBvbmVudCBvZiBhIGxvbmcgZG91YmxlIGZyb20gYW4gaW50LiAgKi8KKysKKysjZGVmaW5lIFNFVF9MRE9VQkxFX0VYUChkLGV4cCkJCQkJCVwKKytkbyB7CQkJCQkJCQlcCisrICBpZWVlX2xvbmdfZG91YmxlX3NoYXBlX3R5cGUgc2VfdTsJCQkJXAorKyAgc2VfdS52YWx1ZSA9IChkKTsJCQkJCQlcCisrICBzZV91LnBhcnRzLnNpZ25fZXhwb25lbnQgPSAoZXhwKTsJCQkJXAorKyAgKGQpID0gc2VfdS52YWx1ZTsJCQkJCQlcCisrfSB3aGlsZSAoMCkKKysKKytsb25nIGRvdWJsZSBjb3B5c2lnbmwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSk7CisrbGliY19oaWRkZW5fcHJvdG8oY29weXNpZ25sKTsKKysKKytsb25nIGRvdWJsZSBjb3B5c2lnbmwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkKKyt7CisrCXVpbnQzMl90IGVzMSxlczI7CisrCUdFVF9MRE9VQkxFX0VYUChlczEseCk7CisrCUdFVF9MRE9VQkxFX0VYUChlczIseSk7CisrCVNFVF9MRE9VQkxFX0VYUCh4LChlczEmMHg3ZmZmKXwoZXMyJjB4ODAwMCkpOworKyAgICAgICAgcmV0dXJuIHg7CisrfQorKworK2xpYmNfaGlkZGVuX2RlZihjb3B5c2lnbmwpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDMtQWRkLWFyZ3AtaW1wbGVtZW50YXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDMtQWRkLWFyZ3AtaW1wbGVtZW50YXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU5NDQ4MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwMy1BZGQtYXJncC1pbXBsZW1lbnRhdGlvbi5wYXRjaApAQCAtMCwwICsxLDU4MTEgQEAKK0Zyb20gZWFhZTgxNmZiMjI5Mjk0NjlhYTRjYzM0MDJiOTFiNTEyZmM2OTU0OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFNhbHZhdG9yZSBDcm8gPHNhbHZhdG9yZS5jcm9Ac3QuY29tPgorRGF0ZTogU3VuLCAxNiBBdWcgMjAxNSAyMDo1MzozNyAtMDcwMAorU3ViamVjdDogW1BBVENIIDMvN10gQWRkIGFyZ3AgaW1wbGVtZW50YXRpb24KKworQXJncCBpcyBhbiBhZHZhbmNlZCBzdXBwb3J0IGZvciBwYXJzaW5nIHVuaXgtc3R5bGUgYXJndW1lbnQgdmVjdG9ycy4KK0luIGFkZGl0aW9uIHRvIHRoZSBjb21tb24gZ2V0b3B0IGludGVyZmFjZSwgaXQgcHJvdmlkZXMgYXV0b21hdGljCityZXNwb25zZQordG8gYC0taGVscCcgYW5kIGAtLXZlcnNpb24nIG9wdGlvbnMgYW5kIHVzZSBvZiBjdXN0b20gcGFyc2VyIGluCitjb25qdW5jdGlvbgord2l0aCBhcmdwIG5hdGl2ZSBvcHRpb24gcGFyc2VyLCBhbW9uZyBvdGhlcnMuCitBcmdwIHN1cHBvcnQgaXMgcmVxdWlyZWQgYnkgZWxmdXRpbHMgcGFja2FnZSBhbmQgcHJlbGluay4KKworSW4gdUNsaWJjIGFyZ3AgZnVuY3Rpb25hbGl0aWVzIGhhcyBiZWVuIG1vdmVkIGZyb20gQyBsaWJyYXJ5IHRvCitsaWJ1YXJncC5zbworRnVydGhlciB0aGUgbGliYy5zbyBsaW5rZXIgc2NyaXB0IGNvbnRhaW5zIGFuIEFTX05FRURFRCBlbnRyeSBzbyB0aGF0CitpdCBkb2Vzbid0IG5lZWQgdG8gbGluayBsaWJ1YXJncC5zbyBleHBsaWNpdGVseS4KKworU2lnbmVkLW9mZi1ieTogU2FsdmF0b3JlIENybyA8c2FsdmF0b3JlLmNyb0BzdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBGaWxpcHBvIEFyY2lkaWFjb25vIDxmaWxpcHBvLmFyY2lkaWFjb25vQHN0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IENhcm1lbG8gQW1vcm9zbyA8Y2FybWVsby5hbW9yb3NvQHN0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgTWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKworIE1ha2VydWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICstCisgUnVsZXMubWFrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTMgKworIGV4dHJhL0NvbmZpZ3MvQ29uZmlnLmluICAgICAgICAgICAgICAgICAgICAgfCAgIDE3ICsKKyBpbmNsdWRlL2FyZ3AuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDU2NiArKysrKysrKworIGxpYmMvc3lzZGVwcy9saW51eC9jb21tb24vYml0cy9nZXRvcHRfaW50LmggfCAgMTM2ICsrCisgbGliYy91bmlzdGQvZ2V0b3B0LmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTkgKy0KKyBsaWJ1YXJncC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNCArCisgbGlidWFyZ3AvTWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzMgKysKKyBsaWJ1YXJncC9hcmdwLWJhLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNiArCisgbGlidWFyZ3AvYXJncC1lZXhzdC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzIgKworIGxpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmMgICAgICAgICAgICAgICAgICAgfCAgNDM5ICsrKysrKysKKyBsaWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5oICAgICAgICAgICAgICAgICAgIHwgIDMxNCArKysrKworIGxpYnVhcmdwL2FyZ3AtZnMteGlubC5jICAgICAgICAgICAgICAgICAgICAgfCAgIDQ0ICsKKyBsaWJ1YXJncC9hcmdwLWhlbHAuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgMTg4MiArKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBsaWJ1YXJncC9hcmdwLXBhcnNlLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDk0OSArKysrKysrKysrKysrKworIGxpYnVhcmdwL2FyZ3AtcHYuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI1ICsKKyBsaWJ1YXJncC9hcmdwLXB2aC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMiArCisgbGlidWFyZ3AvYXJncC14aW5sLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzUgKworIHRlc3QvYXJncC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICsKKyB0ZXN0L2FyZ3AvTWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArCisgdGVzdC9hcmdwL2FyZ3AtZXgxLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTUgKworIHRlc3QvYXJncC9hcmdwLWV4Mi5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ1ICsKKyB0ZXN0L2FyZ3AvYXJncC1leDMuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE1MyArKysKKyB0ZXN0L2FyZ3AvYXJncC1leDQuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2NyArKysKKyB0ZXN0L2FyZ3AvYXJncC10ZXN0LmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDIwOSArKysKKyB0ZXN0L2FyZ3AvYnVnLWFyZ3AxLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNiArCisgdGVzdC9hcmdwL3RzdC1hcmdwMS5jICAgICAgICAgICAgICAgICAgICAgICB8ICAxMTggKysKKyB0ZXN0L2FyZ3AvdHN0LWFyZ3AyLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDEwMSArKworIDI5IGZpbGVzIGNoYW5nZWQsIDU0ODEgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9hcmdwLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9iaXRzL2dldG9wdF9pbnQuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9NYWtlZmlsZQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9NYWtlZmlsZS5pbgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLWJhLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1lZXhzdC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLWZzLXhpbmwuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLWhlbHAuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLXBhcnNlLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1wdi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL2FyZ3AtcHZoLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC14aW5sLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL01ha2VmaWxlCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvYXJncC9NYWtlZmlsZS5pbgorIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvYXJncC1leDEuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvYXJncC1leDIuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvYXJncC1leDMuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvYXJncC1leDQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvYXJncC10ZXN0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL2J1Zy1hcmdwMS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvYXJncC90c3QtYXJncDEuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvdHN0LWFyZ3AyLmMKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDA0NjcxYTQuLmE0NTBhZjkgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0zOSw2ICszOSw3IEBAIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKWxpYnJlc29sdi9NYWtlZmlsZS5pbgorIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKWxpYnV0aWwvTWFrZWZpbGUuaW4KKyBpbmNsdWRlICQodG9wX3NyY2RpcilsaWJwdGhyZWFkL01ha2VmaWxlLmluCisgaW5jbHVkZSAkKHRvcF9zcmNkaXIpbGlicnQvTWFrZWZpbGUuaW4KKytpbmNsdWRlICQodG9wX3NyY2RpcilsaWJ1YXJncC9NYWtlZmlsZS5pbgorIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKWxpYnViYWNrdHJhY2UvTWFrZWZpbGUuaW4KKyAKKyAjIGxhc3QgaW5jbHVkZWQgdG8gY2F0Y2ggYWxsIHRoZSBvYmplY3RzIGFkZGVkIGJ5IG90aGVycyAobG9jYWxlcy90aHJlYWRzKQorQEAgLTI2Miw2ICsyNjMsNyBAQCBIRUFERVJTX1JNLSArPSBzZ3R0eS5oCisgZW5kaWYKKyBIRUFERVJTX1JNLSQoSEFWRV9TSEFSRUQpICAgICAgICAgICAgICAgICAgICArPSBkbGZjbi5oIGJpdHMvZGxmY24uaAorIEhFQURFUlNfUk0tJChQVEhSRUFEU19ERUJVR19TVVBQT1JUKSAgICAgICAgICs9IHRocmVhZF9kYi5oCisrSEVBREVSU19STS0kKFVDTElCQ19IQVNfQVJHUCkgICAgICAgICAgICAgICAgKz0gYXJncC5oCisgSEVBREVSU19STS0kKFVDTElCQ19IQVNfQlNEX0VSUikgICAgICAgICAgICAgKz0gZXJyLmgKKyBIRUFERVJTX1JNLSQoVUNMSUJDX0hBU19DUllQVCkgICAgICAgICAgICAgICArPSBjcnlwdC5oCisgSEVBREVSU19STS0kKFVDTElCQ19IQVNfRVBPTEwpICAgICAgICAgICAgICAgKz0gc3lzL2Vwb2xsLmgKK0BAIC0zODYsNiArMzg4LDEzIEBAIGVsc2UKKyAJLSQoSU5TVEFMTCkgLW0gNzU1ICQodG9wX2J1aWxkZGlyKWxpYi9saWJjLnNvICQoUFJFRklYKSQoREVWRUxfUFJFRklYKSQoTVVMVElMSUJfRElSKS8KKyBlbmRpZgorIAllY2hvICIkKFVCQUNLVFJBQ0VfQVNORUVERUQpIiA+PiAkKFBSRUZJWCkkKERFVkVMX1BSRUZJWCkkKE1VTFRJTElCX0RJUikvbGliYy5zbworK2lmZXEgKCQoVUNMSUJDX0hBU19BUkdQKSx5KQorKyMgQWRkIHRoZSBBU19ORUVERUQgZW50cnkgZm9yIGxpYnVhcmdwLnNvCisrCWlmIFsgLWYgJCh0b3BfYnVpbGRkaXIpbGliL2xpYmMuc28gLWEgLWYgJChQUkVGSVgpJChSVU5USU1FX1BSRUZJWCkkKE1VTFRJTElCX0RJUikvJChTSEFSRURfTUFKT1JOQU1FKSBdIDsgdGhlbiBcCisrCQllY2hvICJHUk9VUCAoICQoVUFSR1BfQVNORUVERUQpICkiID4+ICQoUFJFRklYKSQoREVWRUxfUFJFRklYKSQoTVVMVElMSUJfRElSKS9saWJjLnNvOyBcCisrCWZpCisrZW5kaWYKKysKKyBpZmVxICgkKFVDTElCQ19IQVNfVEhSRUFEUykseSkKKyBpZm5lcSAoJChMSU5VWFRIUkVBRFNfT0xEKSx5KQorIGlmZXEgKCQoSEFSRFdJUkVEX0FCU1BBVEgpLHkpCitkaWZmIC0tZ2l0IGEvTWFrZXJ1bGVzIGIvTWFrZXJ1bGVzCitpbmRleCBkNmY3ZTI0Li5lNzAwNTBkIDEwMDY0NAorLS0tIGEvTWFrZXJ1bGVzCisrKysgYi9NYWtlcnVsZXMKK0BAIC00OCw2ICs0OCw3IEBAICQoZXZhbCAkKGNhbGwgYWRkX0lTX0lOX2xpYixsaWJyZXNvbHYsJChsaWJyZXNvbHYtYS15KSAkKGxpYnJlc29sdi1zby15KSkpCisgJChldmFsICQoY2FsbCBhZGRfSVNfSU5fbGliLGxpYnJ0LCQobGlicnQtYS15KSAkKGxpYnJ0LXNvLXkpKSkKKyAkKGV2YWwgJChjYWxsIGFkZF9JU19JTl9saWIsbGlidXRpbCwkKGxpYnV0aWwtYS15KSAkKGxpYnV0aWwtc28teSkpKQorICQoZXZhbCAkKGNhbGwgYWRkX0lTX0lOX2xpYixsaWJ1YmFja3RyYWNlLCQobGlidWJhY2t0cmFjZS1hLXkpICQobGlidWJhY2t0cmFjZS1zby15KSkpCisrJChldmFsICQoY2FsbCBhZGRfSVNfSU5fbGliLGxpYnVhcmdwLCQobGlidWFyZ3AtYS15KSAkKGxpYnVhcmdwLXNvLXkpKSkKKyAKKyBzaGFyZWRfb2JqcyA9ICQobGliYy15Oi5vPS5vcykgJChsaWJjLXNoYXJlZC15KSAkKGxpYmMtbm9uc2hhcmVkLXkpIFwKKyAJJChsaWJjcnlwdC1zby15KSAkKGxpYmRsLXNvLXkpIFwKK0BAIC01NSwxMiArNTYsMTIgQEAgc2hhcmVkX29ianMgPSAkKGxpYmMteToubz0ub3MpICQobGliYy1zaGFyZWQteSkgJChsaWJjLW5vbnNoYXJlZC15KSBcCisgCSQobGlicHRocmVhZC1zby15KSAkKGxpYnB0aHJlYWQtbm9uc2hhcmVkLXkpICQobGlidGhyZWFkX2RiLXNvLXkpIFwKKyAJJChsaWJyZXNvbHYtc28teSkgJChsaWJydC1zby15KSBcCisgCSQobGRzby15KSBcCistCSQobGlidXRpbC1zby15KSAkKGxpYnViYWNrdHJhY2Utc28teSkKKysJJChsaWJ1dGlsLXNvLXkpICQobGlidWJhY2t0cmFjZS1zby15KSAkKGxpYnVhcmdwLXNvLXkpCisgCisgYXJfb2JqcyA9ICAkKGxpYmMteSkgJChsaWJjLXN0YXRpYy15KSAkKGxpYmNyeXB0LWEteSkgXAorIAkkKGxpYmRsLWEteSkgJChsaWJpbnRsLWEteSkgJChsaWJtLWEteSkgJChsaWJuc2wtYS15KSBcCisgCSQobGlicHRocmVhZC1hLXkpICQobGlidGhyZWFkX2RiLWEteSkgXAorLQkkKGxpYnJlc29sdi1hLXkpICQobGlicnQtYS15KSAkKGxpYnV0aWwtYS15KSAkKGxpYnViYWNrdHJhY2UtYS15KQorKwkkKGxpYnJlc29sdi1hLXkpICQobGlicnQtYS15KSAkKGxpYnV0aWwtYS15KSAkKGxpYnViYWNrdHJhY2UtYS15KSAkKGxpYnVhcmdwLWEteSkKKyBpZmVxICgkKERPUElDKSx5KQorIGFyX29ianMgOj0gJChhcl9vYmpzOi5vPS5vcykKKyBlbmRpZgorQEAgLTQ5OCw3ICs0OTksNyBAQCBmaWxlcy5kZXAgOj0gJChsaWJjLWEteSkgJChsaWJjLXNvLXkpICQobGliYy1ub25zaGFyZWQteSkgXAorIAkkKGxpYnJ0LWEteSkgJChsaWJydC1zby15KSAgJChsaWJyZXNvbHYtYS15KSAkKGxpYnJlc29sdi1zby15KSBcCisgCSQobGliY3J5cHQtYS15KSAkKGxpYmNyeXB0LXNvLXkpICQobGlidXRpbC1hLXkpICQobGlidXRpbC1zby15KSBcCisgCSQobGlibnNsLWEteSkgJChsaWJuc2wtc28teSkgJChsZHNvLXkpICQobGliZGwtYS15KSAkKGxpYmRsLXNvLXkpIFwKKy0JJChsaWJ1YmFja3RyYWNlLWEteSkgJChsaWJ1YmFja3RyYWNlLXNvLXkpCisrCSQobGlidWJhY2t0cmFjZS1hLXkpICQobGlidWJhY2t0cmFjZS1zby15KSAkKGxpYnVhcmdwLXNvLXkpICQobGlidWFyZ3AtYS15KQorIC5kZXBlbmRzLmRlcCA6PSBcCisgCSQocGF0c3Vic3QgJS5zLCUucy5kZXAsJChmaWx0ZXIgJS5zLCQoZmlsZXMuZGVwKSkpIFwKKyAJJChwYXRzdWJzdCAlLm8sJS5vLmRlcCwkKGZpbHRlciAlLm8sJChmaWxlcy5kZXApKSkgXAorZGlmZiAtLWdpdCBhL1J1bGVzLm1hayBiL1J1bGVzLm1haworaW5kZXggZGU5ZmZiMy4uYTJiYWY1OCAxMDA2NDQKKy0tLSBhL1J1bGVzLm1haworKysrIGIvUnVsZXMubWFrCitAQCAtNjAyLDYgKzYwMiwxOSBAQCBleHBvcnQgVUJBQ0tUUkFDRV9BU05FRURFRDo9JChzaGVsbCAkKENDKSAtV2wsLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAtcSAtLSAtLQorIGVsc2UKKyBleHBvcnQgVUJBQ0tUUkFDRV9BU05FRURFRDo9IiIKKyBlbmRpZgorK2lmZXEgKCQoVUNMSUJDX0hBU19BUkdQKSx5KQorK2lmZXEgKCQoSEFSRFdJUkVEX0FCU1BBVEgpLHkpCisrIyBPbmx5IHVzZWQgaW4gaW5zdGFsbGVkIGxpYmMuc28gbGlua2VyIHNjcmlwdAorK1VBUkdQX0ZVTExfTkFNRSA6PSAkKHN1YnN0IC8vLC8sJChSVU5USU1FX1BSRUZJWCkkKE1VTFRJTElCX0RJUikvbGlidWFyZ3Auc28uJChNQUpPUl9WRVJTSU9OKSkKKytlbHNlCisrVUFSR1BfRlVMTF9OQU1FIDo9IGxpYnVhcmdwLnNvLiQoTUFKT1JfVkVSU0lPTikKKytlbmRpZgorK2V4cG9ydCBVQVJHUF9BU05FRURFRDo9JChzaGVsbCAkKENDKSAtV2wsLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAtcSAtLSAtLWFzLW5lZWRlZCAmJiBcCisrCWVjaG8gIkdST1VQICggQVNfTkVFREVEICggJChVQVJHUF9GVUxMX05BTUUpICkgKSIgfHwgXAorKwllY2hvICJHUk9VUCAoICQoVUFSR1BfRlVMTF9OQU1FKSApIikKKytlbHNlCisrZXhwb3J0IFVBUkdQX0FTTkVFREVEOj0iIgorK2VuZGlmCisgZW5kaWYKKyAKKyAjIEFkZCBhIGJ1bmNoIG9mIGV4dHJhIHBlZGFudGljIGFubm95aW5nbHkgc3RyaWN0IGNoZWNrcworZGlmZiAtLWdpdCBhL2V4dHJhL0NvbmZpZ3MvQ29uZmlnLmluIGIvZXh0cmEvQ29uZmlncy9Db25maWcuaW4KK2luZGV4IDI0MmU0NWEuLmIzNmQ0YzkgMTAwNjQ0CistLS0gYS9leHRyYS9Db25maWdzL0NvbmZpZy5pbgorKysrIGIvZXh0cmEvQ29uZmlncy9Db25maWcuaW4KK0BAIC0xOTQzLDYgKzE5NDMsMjMgQEAgY29uZmlnIFVDTElCQ19IQVNfR05VX0dFVFNVQk9QVAorIAkgIEFuc3dlciBZIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgZ2V0c3Vib3B0KCkuCisgCisgCSAgTW9zdCBwZW9wbGUgd2lsbCBhbnN3ZXIgWS4KKysKKytjb25maWcgVUNMSUJDX0hBU19BUkdQCisrICAgICAgIGJvb2wgIlN1cHBvcnQgYXJncCAoYXMgc3RhbmRhbG9uZSBzaGFyZWQgb2JqZWN0KSIKKysgICAgICAgZGVmYXVsdCBuCisrICAgICAgIGhlbHAKKysgICAgICAgICBBcmdwIGlzIGFuIGludGVyZmFjZSBmb3IgcGFyc2luZyB1bml4LXN0eWxlIGFyZ3VtZW50IHZlY3RvcnMuIFVubGlrZQorKyAgICAgICAgIHRoZSBjb21tb24gZ2V0b3B0IGludGVyZmFjZSwgaXQgcHJvdmlkZXMgbWFueSBhZHZhbmNlZCBmZWF0dXJlcyBpbgorKyAgICAgICAgIGFkZGl0aW9uIHRvIHBhcnNpbmcgb3B0aW9ucywgc3VjaCBhcyBhdXRvbWF0aWMgb3V0cHV0IGluIHJlc3BvbnNlIHRvCisrICAgICAgICAgYC0taGVscCcgYW5kIGAtLXZlcnNpb24nIG9wdGlvbnMuCisrICAgICAgICAgQSBsaWJyYXJ5IGNhbiBleHBvcnQgYW4gYXJncCBvcHRpb24gcGFyc2VyLCB3aGljaCBwcm9ncmFtcyBjYW4gZWFzaWx5CisrICAgICAgICAgdXNlIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlaXIgb3duIG9wdGlvbiBwYXJzZXIuCisrICAgICAgICAgQSBuZXcgc2hhcmVkIG9iamVjdCAibGlidWFyZ3AiIGlzIGNyZWF0ZWQuIFRoZSAibGliYy5zbyIgbGlua2VyIHNjcmlwdAorKyAgICAgICAgIGNvbnRhaW5zIHRoZSBBU19ORUVERUQgZW50cnkgZm9yIGdldHRpbmcgdGhlIGxpYnVhcmdwIGxpbmtlZCBhdXRvbWF0aWNhbGx5LgorKyAgICAgICAgIEFyZ3Agc3VwcG9ydCBpcyBuZWVkZWQgYnkgZWxmdXRpbHMgbGliZHcuCisrCisrICAgICAgICAgTW9zdCBwZW9wbGUgY2FuIHNhZmVseSBhbnN3ZXIgTi4KKysKKyBlbmRtZW51CisgCisgCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hcmdwLmggYi9pbmNsdWRlL2FyZ3AuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjlkNTM3MjgKKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvYXJncC5oCitAQCAtMCwwICsxLDU2NiBAQAorKy8qIEhpZXJhcmNoaWFsIGFyZ3VtZW50IHBhcnNpbmcsIGxheWVyZWQgb3ZlciBnZXRvcHQuCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuCisrCisrICAgTW9kaWZpZWQgZm9yIHVDbGliYyBieTogU2FsdmF0b3JlIENybyA8c2FsdmF0b3JlLmNybyBhdCBzdC5jb20+CisrKi8KKysKKysjaWZuZGVmIF9BUkdQX0gKKysjZGVmaW5lIF9BUkdQX0gKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrCisrI2RlZmluZSBfX25lZWRfZXJyb3JfdAorKyNpbmNsdWRlIDxlcnJuby5oPgorKworKyNpZm5kZWYgX19jb25zdAorKyMgZGVmaW5lIF9fY29uc3QgY29uc3QKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fVEhST1cKKysjIGRlZmluZSBfX1RIUk9XCisrI2VuZGlmCisrI2lmbmRlZiBfX05USAorKyMgZGVmaW5lIF9fTlRIKGZjdCkgZmN0IF9fVEhST1cKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fYXR0cmlidXRlX18KKysvKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KKysjIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpIHx8IGRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQorKyMgIGRlZmluZSBfX2F0dHJpYnV0ZV9fKFNwZWMpIC8qIGVtcHR5ICovCisrIyBlbmRpZgorKy8qIFRoZSBfXy1wcm90ZWN0ZWQgdmFyaWFudHMgb2YgYGZvcm1hdCcgYW5kIGBwcmludGYnIGF0dHJpYnV0ZXMKKysgICBhcmUgYWNjZXB0ZWQgYnkgZ2NjIHZlcnNpb25zIDIuNi40IChlZmZlY3RpdmVseSAyLjcpIGFuZCBsYXRlci4gICovCisrIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA3KSB8fCBkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKysjICBkZWZpbmUgX19mb3JtYXRfXyBmb3JtYXQKKysjICBkZWZpbmUgX19wcmludGZfXyBwcmludGYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyogR0NDIDIuOTUgYW5kIGxhdGVyIGhhdmUgIl9fcmVzdHJpY3QiOyBDOTkgY29tcGlsZXJzIGhhdmUKKysgICAicmVzdHJpY3QiLCBhbmQgImNvbmZpZ3VyZSIgbWF5IGhhdmUgZGVmaW5lZCAicmVzdHJpY3QiLiAgKi8KKysjaWZuZGVmIF9fcmVzdHJpY3QKKysjIGlmICEgKDIgPCBfX0dOVUNfXyB8fCAoMiA9PSBfX0dOVUNfXyAmJiA5NSA8PSBfX0dOVUNfTUlOT1JfXykpCisrIyAgaWYgZGVmaW5lZCByZXN0cmljdCB8fCAxOTk5MDFMIDw9IF9fU1REQ19WRVJTSU9OX18KKysjICAgZGVmaW5lIF9fcmVzdHJpY3QgcmVzdHJpY3QKKysjICBlbHNlCisrIyAgIGRlZmluZSBfX3Jlc3RyaWN0CisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2lmbmRlZiBfX2Vycm9yX3RfZGVmaW5lZAorK3R5cGVkZWYgaW50IGVycm9yX3Q7CisrIyBkZWZpbmUgX19lcnJvcl90X2RlZmluZWQKKysjZW5kaWYKKysMCisrI2lmZGVmICBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworKy8qIEEgZGVzY3JpcHRpb24gb2YgYSBwYXJ0aWN1bGFyIG9wdGlvbi4gIEEgcG9pbnRlciB0byBhbiBhcnJheSBvZgorKyAgIHRoZXNlIGlzIHBhc3NlZCBpbiB0aGUgT1BUSU9OUyBmaWVsZCBvZiBhbiBhcmdwIHN0cnVjdHVyZS4gIEVhY2ggb3B0aW9uCisrICAgZW50cnkgY2FuIGNvcnJlc3BvbmQgdG8gb25lIGxvbmcgb3B0aW9uIGFuZC9vciBvbmUgc2hvcnQgb3B0aW9uOyBtb3JlCisrICAgbmFtZXMgZm9yIHRoZSBzYW1lIG9wdGlvbiBjYW4gYmUgYWRkZWQgYnkgZm9sbG93aW5nIGFuIGVudHJ5IGluIGFuIG9wdGlvbgorKyAgIGFycmF5IHdpdGggb3B0aW9ucyBoYXZpbmcgdGhlIE9QVElPTl9BTElBUyBmbGFnIHNldC4gICovCisrc3RydWN0IGFyZ3Bfb3B0aW9uCisreworKyAgLyogVGhlIGxvbmcgb3B0aW9uIG5hbWUuICBGb3IgbW9yZSB0aGFuIG9uZSBuYW1lIGZvciB0aGUgc2FtZSBvcHRpb24sIHlvdQorKyAgICAgY2FuIHVzZSBmb2xsb3dpbmcgb3B0aW9ucyB3aXRoIHRoZSBPUFRJT05fQUxJQVMgZmxhZyBzZXQuICAqLworKyAgX19jb25zdCBjaGFyICpuYW1lOworKworKyAgLyogV2hhdCBrZXkgaXMgcmV0dXJuZWQgZm9yIHRoaXMgb3B0aW9uLiAgSWYgPiAwIGFuZCBwcmludGFibGUsIHRoZW4gaXQncworKyAgICAgYWxzbyBhY2NlcHRlZCBhcyBhIHNob3J0IG9wdGlvbi4gICovCisrICBpbnQga2V5OworKworKyAgLyogSWYgbm9uLU5VTEwsIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGFyZ3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisrICAgICBvcHRpb24sIHdoaWNoIGlzIHJlcXVpcmVkIHVubGVzcyB0aGUgT1BUSU9OX0FSR19PUFRJT05BTCBmbGFnIGlzIHNldC4gKi8KKysgIF9fY29uc3QgY2hhciAqYXJnOworKworKyAgLyogT1BUSU9OXyBmbGFncy4gICovCisrICBpbnQgZmxhZ3M7CisrCisrICAvKiBUaGUgZG9jIHN0cmluZyBmb3IgdGhpcyBvcHRpb24uICBJZiBib3RoIE5BTUUgYW5kIEtFWSBhcmUgMCwgVGhpcyBzdHJpbmcKKysgICAgIHdpbGwgYmUgcHJpbnRlZCBvdXRkZW50ZWQgZnJvbSB0aGUgbm9ybWFsIG9wdGlvbiBjb2x1bW4sIG1ha2luZyBpdAorKyAgICAgdXNlZnVsIGFzIGEgZ3JvdXAgaGVhZGVyIChpdCB3aWxsIGJlIHRoZSBmaXJzdCB0aGluZyBwcmludGVkIGluIGl0cworKyAgICAgZ3JvdXApOyBpbiB0aGlzIHVzYWdlLCBpdCdzIGNvbnZlbnRpb25hbCB0byBlbmQgdGhlIHN0cmluZyB3aXRoIGEgYDonLiAgKi8KKysgIF9fY29uc3QgY2hhciAqZG9jOworKworKyAgLyogVGhlIGdyb3VwIHRoaXMgb3B0aW9uIGlzIGluLiAgSW4gYSBsb25nIGhlbHAgbWVzc2FnZSwgb3B0aW9ucyBhcmUgc29ydGVkCisrICAgICBhbHBoYWJldGljYWxseSB3aXRoaW4gZWFjaCBncm91cCwgYW5kIHRoZSBncm91cHMgcHJlc2VudGVkIGluIHRoZSBvcmRlcgorKyAgICAgMCwgMSwgMiwgLi4uLCBuLCAtbSwgLi4uLCAtMiwgLTEuICBFdmVyeSBlbnRyeSBpbiBhbiBvcHRpb25zIGFycmF5IHdpdGgKKysgICAgIGlmIHRoaXMgZmllbGQgMCB3aWxsIGluaGVyaXQgdGhlIGdyb3VwIG51bWJlciBvZiB0aGUgcHJldmlvdXMgZW50cnksIG9yCisrICAgICB6ZXJvIGlmIGl0J3MgdGhlIGZpcnN0IG9uZSwgdW5sZXNzIGl0cyBhIGdyb3VwIGhlYWRlciAoTkFNRSBhbmQgS0VZIGJvdGgKKysgICAgIDApLCBpbiB3aGljaCBjYXNlLCB0aGUgcHJldmlvdXMgZW50cnkgKyAxIGlzIHRoZSBkZWZhdWx0LiAgQXV0b21hZ2ljCisrICAgICBvcHRpb25zIHN1Y2ggYXMgLS1oZWxwIGFyZSBwdXQgaW50byBncm91cCAtMS4gICovCisrICBpbnQgZ3JvdXA7CisrfTsKKysKKysvKiBUaGUgYXJndW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb3B0aW9uIGlzIG9wdGlvbmFsLiAgKi8KKysjZGVmaW5lIE9QVElPTl9BUkdfT1BUSU9OQUwJMHgxCisrCisrLyogVGhpcyBvcHRpb24gaXNuJ3QgZGlzcGxheWVkIGluIGFueSBoZWxwIG1lc3NhZ2VzLiAgKi8KKysjZGVmaW5lIE9QVElPTl9ISURERU4JICAgICAgIAkweDIKKysKKysvKiBUaGlzIG9wdGlvbiBpcyBhbiBhbGlhcyBmb3IgdGhlIGNsb3Nlc3QgcHJldmlvdXMgbm9uLWFsaWFzIG9wdGlvbi4gIFRoaXMKKysgICBtZWFucyB0aGF0IGl0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBzYW1lIGhlbHAgZW50cnksIGFuZCB3aWxsIGluaGVyaXQKKysgICBmaWVsZHMgb3RoZXIgdGhhbiBOQU1FIGFuZCBLRVkgZnJvbSB0aGUgYWxpYXNlZCBvcHRpb24uICAqLworKyNkZWZpbmUgT1BUSU9OX0FMSUFTCQkweDQKKysKKysvKiBUaGlzIG9wdGlvbiBpc24ndCBhY3R1YWxseSBhbiBvcHRpb24gKGFuZCBzbyBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUKKysgICBhY3R1YWwgb3B0aW9uIHBhcnNlciksIGJ1dCByYXRoZXIgYW4gYXJiaXRyYXJ5IHBpZWNlIG9mIGRvY3VtZW50YXRpb24gdGhhdAorKyAgIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gbXVjaCB0aGUgc2FtZSBtYW5uZXIgYXMgdGhlIG9wdGlvbnMuICBJZiB0aGlzIGZsYWcKKysgICBpcyBzZXQsIHRoZW4gdGhlIG9wdGlvbiBOQU1FIGZpZWxkIGlzIGRpc3BsYXllZCB1bm1vZGlmaWVkIChlLmcuLCBubyBgLS0nCisrICAgcHJlZml4IGlzIGFkZGVkKSBhdCB0aGUgbGVmdC1tYXJnaW4gKHdoZXJlIGEgKnNob3J0KiBvcHRpb24gd291bGQgbm9ybWFsbHkKKysgICBiZSBkaXNwbGF5ZWQpLCBhbmQgdGhlIGRvY3VtZW50YXRpb24gc3RyaW5nIGluIHRoZSBub3JtYWwgcGxhY2UuICBGb3IKKysgICBwdXJwb3NlcyBvZiBzb3J0aW5nLCBhbnkgbGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBwdW5jdHVhdGlvbiBpcyBpZ25vcmVkLAorKyAgIGV4Y2VwdCB0aGF0IGlmIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgbm90IGAtJywgdGhpcyBlbnRyeQorKyAgIGlzIGRpc3BsYXllZCBhZnRlciBhbGwgb3B0aW9ucyAoYW5kIE9QVElPTl9ET0MgZW50cmllcyB3aXRoIGEgbGVhZGluZyBgLScpCisrICAgaW4gdGhlIHNhbWUgZ3JvdXAuICAqLworKyNkZWZpbmUgT1BUSU9OX0RPQwkJMHg4CisrCisrLyogVGhpcyBvcHRpb24gc2hvdWxkbid0IGJlIGluY2x1ZGVkIGluIGBsb25nJyB1c2FnZSBtZXNzYWdlcyAoYnV0IGlzIHN0aWxsCisrICAgaW5jbHVkZWQgaW4gaGVscCBtZXNzYWdlcykuICBUaGlzIGlzIG1haW5seSBpbnRlbmRlZCBmb3Igb3B0aW9ucyB0aGF0IGFyZQorKyAgIGNvbXBsZXRlbHkgZG9jdW1lbnRlZCBpbiBhbiBhcmdwJ3MgQVJHU19ET0MgZmllbGQsIGluIHdoaWNoIGNhc2UgaW5jbHVkaW5nCisrICAgdGhlIG9wdGlvbiBpbiB0aGUgZ2VuZXJpYyB1c2FnZSBsaXN0IHdvdWxkIGJlIHJlZHVuZGFudC4gIEZvciBpbnN0YW5jZSwKKysgICBpZiBBUkdTX0RPQyBpcyAiRk9PIEJBUlxuLXggQkxBSCIsIGFuZCB0aGUgYC14JyBvcHRpb24ncyBwdXJwb3NlIGlzIHRvCisrICAgZGlzdGluZ3Vpc2ggdGhlc2UgdHdvIGNhc2VzLCAteCBzaG91bGQgcHJvYmFibHkgYmUgbWFya2VkCisrICAgT1BUSU9OX05PX1VTQUdFLiAgKi8KKysjZGVmaW5lIE9QVElPTl9OT19VU0FHRQkJMHgxMAorKwwKKytzdHJ1Y3QgYXJncDsJCQkvKiBmd2QgZGVjbGFyZSB0aGlzIHR5cGUgKi8KKytzdHJ1Y3QgYXJncF9zdGF0ZTsJCS8qICIgKi8KKytzdHJ1Y3QgYXJncF9jaGlsZDsJCS8qICIgKi8KKysKKysvKiBUaGUgdHlwZSBvZiBhIHBvaW50ZXIgdG8gYW4gYXJncCBwYXJzaW5nIGZ1bmN0aW9uLiAgKi8KKyt0eXBlZGVmIGVycm9yX3QgKCphcmdwX3BhcnNlcl90KSAoaW50IF9fa2V5LCBjaGFyICpfX2FyZywKKysJCQkJICBzdHJ1Y3QgYXJncF9zdGF0ZSAqX19zdGF0ZSk7CisrCisrLyogV2hhdCB0byByZXR1cm4gZm9yIHVucmVjb2duaXplZCBrZXlzLiAgRm9yIHNwZWNpYWwgQVJHUF9LRVlfIGtleXMsIHN1Y2gKKysgICByZXR1cm5zIHdpbGwgc2ltcGx5IGJlIGlnbm9yZWQuICBGb3IgdXNlciBrZXlzLCB0aGlzIGVycm9yIHdpbGwgYmUgdHVybmVkCisrICAgaW50byBFSU5WQUwgKGlmIHRoZSBjYWxsIHRvIGFyZ3BfcGFyc2UgaXMgc3VjaCB0aGF0IGVycm9ycyBhcmUgcHJvcGFnYXRlZAorKyAgIGJhY2sgdG8gdGhlIHVzZXIgaW5zdGVhZCBvZiBleGl0aW5nKTsgcmV0dXJuaW5nIEVJTlZBTCBpdHNlbGYgd291bGQgcmVzdWx0CisrICAgaW4gYW4gaW1tZWRpYXRlIHN0b3AgdG8gcGFyc2luZyBpbiAqYWxsKiBjYXNlcy4gICovCisrI2RlZmluZSBBUkdQX0VSUl9VTktOT1dOCUUyQklHIC8qIEh1cmQgc2hvdWxkIG5ldmVyIG5lZWQgRTJCSUcuICBYWFggKi8KKysKKysvKiBTcGVjaWFsIHZhbHVlcyBmb3IgdGhlIEtFWSBhcmd1bWVudCB0byBhbiBhcmd1bWVudCBwYXJzaW5nIGZ1bmN0aW9uLgorKyAgIEFSR1BfRVJSX1VOS05PV04gc2hvdWxkIGJlIHJldHVybmVkIGlmIHRoZXkgYXJlbid0IHVuZGVyc3Rvb2QuCisrCisrICAgVGhlIHNlcXVlbmNlIG9mIGtleXMgdG8gYSBwYXJzaW5nIGZ1bmN0aW9uIGlzIGVpdGhlciAod2hlcmUgZWFjaAorKyAgIHVwcGVyY2FzZWQgd29yZCBzaG91bGQgYmUgcHJlZml4ZWQgYnkgYEFSR1BfS0VZXycgYW5kIG9wdCBpcyBhIHVzZXIga2V5KToKKysKKysgICAgICAgSU5JVCBvcHQuLi4gTk9fQVJHUyBFTkQgU1VDQ0VTUyAgLS0gTm8gbm9uLW9wdGlvbiBhcmd1bWVudHMgYXQgYWxsCisrICAgb3IgIElOSVQgKG9wdCB8IEFSRykuLi4gRU5EIFNVQ0NFU1MgIC0tIEFsbCBub24tb3B0aW9uIGFyZ3MgcGFyc2VkCisrICAgb3IgIElOSVQgKG9wdCB8IEFSRykuLi4gU1VDQ0VTUyAgICAgIC0tIFNvbWUgbm9uLW9wdGlvbiBhcmcgdW5yZWNvZ25pemVkCisrCisrICAgVGhlIHRoaXJkIGNhc2UgaXMgd2hlcmUgZXZlcnkgcGFyc2VyIHJldHVybmVkIEFSR1BfS0VZX1VOS05PV04gZm9yIGFuCisrICAgYXJndW1lbnQsIGluIHdoaWNoIGNhc2UgcGFyc2luZyBzdG9wcyBhdCB0aGF0IGFyZ3VtZW50IChyZXR1cm5pbmcgdGhlCisrICAgdW5wYXJzZWQgYXJndW1lbnRzIHRvIHRoZSBjYWxsZXIgb2YgYXJncF9wYXJzZSBpZiByZXF1ZXN0ZWQsIG9yIHN0b3BwaW5nCisrICAgd2l0aCBhbiBlcnJvciBtZXNzYWdlIGlmIG5vdCkuCisrCisrICAgSWYgYW4gZXJyb3Igb2NjdXJzIChlaXRoZXIgZGV0ZWN0ZWQgYnkgYXJncCwgb3IgYmVjYXVzZSB0aGUgcGFyc2luZworKyAgIGZ1bmN0aW9uIHJldHVybmVkIGFuIGVycm9yIHZhbHVlKSwgdGhlbiB0aGUgcGFyc2VyIGlzIGNhbGxlZCB3aXRoCisrICAgQVJHUF9LRVlfRVJST1IsIGFuZCBubyBmdXJ0aGVyIGNhbGxzIGFyZSBtYWRlLiAgKi8KKysKKysvKiBUaGlzIGlzIG5vdCBhbiBvcHRpb24gYXQgYWxsLCBidXQgcmF0aGVyIGEgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiAgSWYgYQorKyAgIHBhcnNlciByZWNlaXZpbmcgdGhpcyBrZXkgcmV0dXJucyBzdWNjZXNzLCB0aGUgZmFjdCBpcyByZWNvcmRlZCwgYW5kIHRoZQorKyAgIEFSR1BfS0VZX05PX0FSR1MgY2FzZSB3b24ndCBiZSB1c2VkLiAgSE9XRVZFUiwgaWYgd2hpbGUgcHJvY2Vzc2luZyB0aGUKKysgICBhcmd1bWVudCwgYSBwYXJzZXIgZnVuY3Rpb24gZGVjcmVtZW50cyB0aGUgTkVYVCBmaWVsZCBvZiB0aGUgc3RhdGUgaXQncworKyAgIHBhc3NlZCwgdGhlIG9wdGlvbiB3b24ndCBiZSBjb25zaWRlcmVkIHByb2Nlc3NlZDsgdGhpcyBpcyB0byBhbGxvdyB5b3UgdG8KKysgICBhY3R1YWxseSBtb2RpZnkgdGhlIGFyZ3VtZW50IChwZXJoYXBzIGludG8gYW4gb3B0aW9uKSwgYW5kIGhhdmUgaXQKKysgICBwcm9jZXNzZWQgYWdhaW4uICAqLworKyNkZWZpbmUgQVJHUF9LRVlfQVJHCQkwCisrLyogVGhlcmUgYXJlIHJlbWFpbmluZyBhcmd1bWVudHMgbm90IHBhcnNlZCBieSBhbnkgcGFyc2VyLCB3aGljaCBtYXkgYmUgZm91bmQKKysgICBzdGFydGluZyBhdCAoU1RBVEUtPmFyZ3YgKyBTVEFURS0+bmV4dCkuICBJZiBzdWNjZXNzIGlzIHJldHVybmVkLCBidXQKKysgICBTVEFURS0+bmV4dCBsZWZ0IHVudG91Y2hlZCwgaXQncyBhc3N1bWVkIHRoYXQgYWxsIGFyZ3VtZW50cyB3ZXJlIGNvbnN1bWUsCisrICAgb3RoZXJ3aXNlLCB0aGUgcGFyc2VyIHNob3VsZCBhZGp1c3QgU1RBVEUtPm5leHQgdG8gcmVmbGVjdCBhbnkgYXJndW1lbnRzCisrICAgY29uc3VtZWQuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfQVJHUwkJMHgxMDAwMDA2CisrLyogVGhlcmUgYXJlIG5vIG1vcmUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhdCBhbGwuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfRU5ECQkweDEwMDAwMDEKKysvKiBCZWNhdXNlIGl0J3MgY29tbW9uIHRvIHdhbnQgdG8gZG8gc29tZSBzcGVjaWFsIHByb2Nlc3NpbmcgaWYgdGhlcmUgYXJlbid0CisrICAgYW55IG5vbi1vcHRpb24gYXJncywgdXNlciBwYXJzZXJzIGFyZSBjYWxsZWQgd2l0aCB0aGlzIGtleSBpZiB0aGV5IGRpZG4ndAorKyAgIHN1Y2Nlc3NmdWxseSBwcm9jZXNzIGFueSBub24tb3B0aW9uIGFyZ3VtZW50cy4gIENhbGxlZCBqdXN0IGJlZm9yZQorKyAgIEFSR1BfS0VZX0VORCAod2hlcmUgbW9yZSBnZW5lcmFsIHZhbGlkaXR5IGNoZWNrcyBvbiBwcmV2aW91c2x5IHBhcnNlZAorKyAgIGFyZ3VtZW50cyBjYW4gdGFrZSBwbGFjZSkuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfTk9fQVJHUwkweDEwMDAwMDIKKysvKiBQYXNzZWQgaW4gYmVmb3JlIGFueSBwYXJzaW5nIGlzIGRvbmUuICBBZnRlcndhcmRzLCB0aGUgdmFsdWVzIG9mIGVhY2gKKysgICBlbGVtZW50IG9mIHRoZSBDSElMRF9JTlBVVCBmaWVsZCwgaWYgYW55LCBpbiB0aGUgc3RhdGUgc3RydWN0dXJlIGlzCisrICAgY29waWVkIHRvIGVhY2ggY2hpbGQncyBzdGF0ZSB0byBiZSB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgSU5QVVQgZmllbGQuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfSU5JVAkJMHgxMDAwMDAzCisrLyogVXNlIGFmdGVyIGFsbCBvdGhlciBrZXlzLCBpbmNsdWRpbmcgU1VDQ0VTUyAmIEVORC4gICovCisrI2RlZmluZSBBUkdQX0tFWV9GSU5JCQkweDEwMDAwMDcKKysvKiBQYXNzZWQgaW4gd2hlbiBwYXJzaW5nIGhhcyBzdWNjZXNzZnVsbHkgYmVlbiBjb21wbGV0ZWQgKGV2ZW4gaWYgdGhlcmUgYXJlCisrICAgc3RpbGwgYXJndW1lbnRzIHJlbWFpbmluZykuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfU1VDQ0VTUwkweDEwMDAwMDQKKysvKiBQYXNzZWQgaW4gaWYgYW4gZXJyb3Igb2NjdXJzLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX0VSUk9SCQkweDEwMDAwMDUKKysKKysvKiBBbiBhcmdwIHN0cnVjdHVyZSBjb250YWlucyBhIHNldCBvZiBvcHRpb25zIGRlY2xhcmF0aW9ucywgYSBmdW5jdGlvbiB0bworKyAgIGRlYWwgd2l0aCBwYXJzaW5nIG9uZSwgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIGEgcG9zc2libGUgdmVjdG9yIG9mIGNoaWxkCisrICAgYXJncCdzLCBhbmQgcGVyaGFwcyBhIGZ1bmN0aW9uIHRvIGZpbHRlciBoZWxwIG91dHB1dC4gIFdoZW4gYWN0dWFsbHkKKysgICBwYXJzaW5nIG9wdGlvbnMsIGdldG9wdCBpcyBjYWxsZWQgd2l0aCB0aGUgdW5pb24gb2YgYWxsIHRoZSBhcmdwCisrICAgc3RydWN0dXJlcyBjaGFpbmVkIHRvZ2V0aGVyIHRocm91Z2ggdGhlaXIgQ0hJTEQgcG9pbnRlcnMsIHdpdGggY29uZmxpY3RzCisrICAgYmVpbmcgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgdGhlIGZpcnN0IG9jY3VycmVuY2UgaW4gdGhlIGNoYWluLiAgKi8KKytzdHJ1Y3QgYXJncAorK3sKKysgIC8qIEFuIGFycmF5IG9mIGFyZ3Bfb3B0aW9uIHN0cnVjdHVyZXMsIHRlcm1pbmF0ZWQgYnkgYW4gZW50cnkgd2l0aCBib3RoCisrICAgICBOQU1FIGFuZCBLRVkgaGF2aW5nIGEgdmFsdWUgb2YgMC4gICovCisrICBfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0aW9uczsKKysKKysgIC8qIFdoYXQgdG8gZG8gd2l0aCBhbiBvcHRpb24gZnJvbSB0aGlzIHN0cnVjdHVyZS4gIEtFWSBpcyB0aGUga2V5CisrICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIG9wdGlvbiwgYW5kIEFSRyBpcyBhbnkgYXNzb2NpYXRlZCBhcmd1bWVudCAoTlVMTCBpZgorKyAgICAgbm9uZSB3YXMgc3VwcGxpZWQpLiAgSWYgS0VZIGlzbid0IHVuZGVyc3Rvb2QsIEFSR1BfRVJSX1VOS05PV04gc2hvdWxkIGJlCisrICAgICByZXR1cm5lZC4gIElmIGEgbm9uLXplcm8sIG5vbi1BUkdQX0VSUl9VTktOT1dOIHZhbHVlIGlzIHJldHVybmVkLCB0aGVuCisrICAgICBwYXJzaW5nIGlzIHN0b3BwZWQgaW1tZWRpYXRlbHksIGFuZCB0aGF0IHZhbHVlIGlzIHJldHVybmVkIGZyb20KKysgICAgIGFyZ3BfcGFyc2UoKS4gIEZvciBzcGVjaWFsIChub24tdXNlci1zdXBwbGllZCkgdmFsdWVzIG9mIEtFWSwgc2VlIHRoZQorKyAgICAgQVJHUF9LRVlfIGRlZmluaXRpb25zIGJlbG93LiAgKi8KKysgIGFyZ3BfcGFyc2VyX3QgcGFyc2VyOworKworKyAgLyogQSBzdHJpbmcgZGVzY3JpYmluZyB3aGF0IG90aGVyIGFyZ3VtZW50cyBhcmUgd2FudGVkIGJ5IHRoaXMgcHJvZ3JhbS4gIEl0CisrICAgICBpcyBvbmx5IHVzZWQgYnkgYXJncF91c2FnZSB0byBwcmludCB0aGUgYFVzYWdlOicgbWVzc2FnZS4gIElmIGl0CisrICAgICBjb250YWlucyBuZXdsaW5lcywgdGhlIHN0cmluZ3Mgc2VwYXJhdGVkIGJ5IHRoZW0gYXJlIGNvbnNpZGVyZWQKKysgICAgIGFsdGVybmF0aXZlIHVzYWdlIHBhdHRlcm5zLCBhbmQgcHJpbnRlZCBvbiBzZXBhcmF0ZSBsaW5lcyAobGluZXMgYWZ0ZXIKKysgICAgIHRoZSBmaXJzdCBhcmUgcHJlZml4IGJ5IGAgIG9yOiAnIGluc3RlYWQgb2YgYFVzYWdlOicpLiAgKi8KKysgIF9fY29uc3QgY2hhciAqYXJnc19kb2M7CisrCisrICAvKiBJZiBub24tTlVMTCwgYSBzdHJpbmcgY29udGFpbmluZyBleHRyYSB0ZXh0IHRvIGJlIHByaW50ZWQgYmVmb3JlIGFuZAorKyAgICAgYWZ0ZXIgdGhlIG9wdGlvbnMgaW4gYSBsb25nIGhlbHAgbWVzc2FnZSAoc2VwYXJhdGVkIGJ5IGEgdmVydGljYWwgdGFiCisrICAgICBgXHYnIGNoYXJhY3RlcikuICAqLworKyAgX19jb25zdCBjaGFyICpkb2M7CisrCisrICAvKiBBIHZlY3RvciBvZiBhcmdwX2NoaWxkcmVuIHN0cnVjdHVyZXMsIHRlcm1pbmF0ZWQgYnkgYSBtZW1iZXIgd2l0aCBhIDAKKysgICAgIGFyZ3AgZmllbGQsIHBvaW50aW5nIHRvIGNoaWxkIGFyZ3BzIHNob3VsZCBiZSBwYXJzZWQgd2l0aCB0aGlzIG9uZS4gIEFueQorKyAgICAgY29uZmxpY3RzIGFyZSByZXNvbHZlZCBpbiBmYXZvciBvZiB0aGlzIGFyZ3AsIG9yIGVhcmx5IGFyZ3BzIGluIHRoZQorKyAgICAgQ0hJTERSRU4gbGlzdC4gIFRoaXMgZmllbGQgaXMgdXNlZnVsIGlmIHlvdSB1c2UgbGlicmFyaWVzIHRoYXQgc3VwcGx5CisrICAgICB0aGVpciBvd24gYXJncCBzdHJ1Y3R1cmUsIHdoaWNoIHlvdSB3YW50IHRvIHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIHlvdXIKKysgICAgIG93bi4gICovCisrICBfX2NvbnN0IHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZHJlbjsKKysKKysgIC8qIElmIG5vbi16ZXJvLCB0aGlzIHNob3VsZCBiZSBhIGZ1bmN0aW9uIHRvIGZpbHRlciB0aGUgb3V0cHV0IG9mIGhlbHAKKysgICAgIG1lc3NhZ2VzLiAgS0VZIGlzIGVpdGhlciBhIGtleSBmcm9tIGFuIG9wdGlvbiwgaW4gd2hpY2ggY2FzZSBURVhUIGlzCisrICAgICB0aGF0IG9wdGlvbidzIGhlbHAgdGV4dCwgb3IgYSBzcGVjaWFsIGtleSBmcm9tIHRoZSBBUkdQX0tFWV9IRUxQXworKyAgICAgZGVmaW5lcywgYmVsb3csIGRlc2NyaWJpbmcgd2hpY2ggb3RoZXIgaGVscCB0ZXh0IFRFWFQgaXMuICBUaGUgZnVuY3Rpb24KKysgICAgIHNob3VsZCByZXR1cm4gZWl0aGVyIFRFWFQsIGlmIGl0IHNob3VsZCBiZSB1c2VkIGFzLWlzLCBhIHJlcGxhY2VtZW50CisrICAgICBzdHJpbmcsIHdoaWNoIHNob3VsZCBiZSBtYWxsb2NlZCwgYW5kIHdpbGwgYmUgZnJlZWQgYnkgYXJncCwgb3IgTlVMTCwKKysgICAgIG1lYW5pbmcgYHByaW50IG5vdGhpbmcnLiAgVGhlIHZhbHVlIGZvciBURVhUIGlzICphZnRlciogYW55IHRyYW5zbGF0aW9uCisrICAgICBoYXMgYmVlbiBkb25lLCBzbyBpZiBhbnkgb2YgdGhlIHJlcGxhY2VtZW50IHRleHQgYWxzbyBuZWVkcyB0cmFuc2xhdGlvbiwKKysgICAgIHRoYXQgc2hvdWxkIGJlIGRvbmUgYnkgdGhlIGZpbHRlciBmdW5jdGlvbi4gIElOUFVUIGlzIGVpdGhlciB0aGUgaW5wdXQKKysgICAgIHN1cHBsaWVkIHRvIGFyZ3BfcGFyc2UsIG9yIE5VTEwsIGlmIGFyZ3BfaGVscCB3YXMgY2FsbGVkIGRpcmVjdGx5LiAgKi8KKysgIGNoYXIgKigqaGVscF9maWx0ZXIpIChpbnQgX19rZXksIF9fY29uc3QgY2hhciAqX190ZXh0LCB2b2lkICpfX2lucHV0KTsKKysKKysgIC8qIElmIG5vbi16ZXJvIHRoZSBzdHJpbmdzIHVzZWQgaW4gdGhlIGFyZ3AgbGlicmFyeSBhcmUgdHJhbnNsYXRlZCB1c2luZworKyAgICAgdGhlIGRvbWFpbiBkZXNjcmliZWQgYnkgdGhpcyBzdHJpbmcuICBPdGhlcndpc2UgdGhlIGN1cnJlbnRseSBpbnN0YWxsZWQKKysgICAgIGRlZmF1bHQgZG9tYWluIGlzIHVzZWQuICAqLworKyAgY29uc3QgY2hhciAqYXJncF9kb21haW47CisrfTsKKysKKysvKiBQb3NzaWJsZSBLRVkgYXJndW1lbnRzIHRvIGEgaGVscCBmaWx0ZXIgZnVuY3Rpb24uICAqLworKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9QUkVfRE9DCTB4MjAwMDAwMSAvKiBIZWxwIHRleHQgcHJlY2VlZGluZyBvcHRpb25zLiAqLworKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9QT1NUX0RPQwkweDIwMDAwMDIgLyogSGVscCB0ZXh0IGZvbGxvd2luZyBvcHRpb25zLiAqLworKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9IRUFERVIJMHgyMDAwMDAzIC8qIE9wdGlvbiBoZWFkZXIgc3RyaW5nLiAqLworKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9FWFRSQQkweDIwMDAwMDQgLyogQWZ0ZXIgYWxsIG90aGVyIGRvY3VtZW50YXRpb247CisrCQkJCQkgICAgIFRFWFQgaXMgTlVMTCBmb3IgdGhpcyBrZXkuICAqLworKy8qIEV4cGxhbmF0b3J5IG5vdGUgZW1pdHRlZCB3aGVuIGR1cGxpY2F0ZSBvcHRpb24gYXJndW1lbnRzIGhhdmUgYmVlbgorKyAgIHN1cHByZXNzZWQuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9EVVBfQVJHU19OT1RFIDB4MjAwMDAwNQorKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9BUkdTX0RPQwkweDIwMDAwMDYgLyogQXJndW1lbnQgZG9jIHN0cmluZy4gICovCisrDAorKy8qIFdoZW4gYW4gYXJncCBoYXMgYSBub24temVybyBDSElMRFJFTiBmaWVsZCwgaXQgc2hvdWxkIHBvaW50IHRvIGEgdmVjdG9yIG9mCisrICAgYXJncF9jaGlsZCBzdHJ1Y3R1cmVzLCBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhIHN1YnNpZGlhcnkgYXJncC4gICovCisrc3RydWN0IGFyZ3BfY2hpbGQKKyt7CisrICAvKiBUaGUgY2hpbGQgcGFyc2VyLiAgKi8KKysgIF9fY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3A7CisrCisrICAvKiBGbGFncyBmb3IgdGhpcyBjaGlsZC4gICovCisrICBpbnQgZmxhZ3M7CisrCisrICAvKiBJZiBub24temVybywgYW4gb3B0aW9uYWwgaGVhZGVyIHRvIGJlIHByaW50ZWQgaW4gaGVscCBvdXRwdXQgYmVmb3JlIHRoZQorKyAgICAgY2hpbGQgb3B0aW9ucy4gIEFzIGEgc2lkZS1lZmZlY3QsIGEgbm9uLXplcm8gdmFsdWUgZm9yY2VzIHRoZSBjaGlsZAorKyAgICAgb3B0aW9ucyB0byBiZSBncm91cGVkIHRvZ2V0aGVyOyB0byBhY2hpZXZlIHRoaXMgZWZmZWN0IHdpdGhvdXQgYWN0dWFsbHkKKysgICAgIHByaW50aW5nIGEgaGVhZGVyIHN0cmluZywgdXNlIGEgdmFsdWUgb2YgIiIuICAqLworKyAgX19jb25zdCBjaGFyICpoZWFkZXI7CisrCisrICAvKiBXaGVyZSB0byBncm91cCB0aGUgY2hpbGQgb3B0aW9ucyByZWxhdGl2ZSB0byB0aGUgb3RoZXIgKGBjb25zb2xpZGF0ZWQnKQorKyAgICAgb3B0aW9ucyBpbiB0aGUgcGFyZW50IGFyZ3A7IHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFzIHRoZSBHUk9VUCBmaWVsZAorKyAgICAgaW4gYXJncF9vcHRpb24gc3RydWN0cywgYnV0IGFsbCBjaGlsZC1ncm91cGluZ3MgZm9sbG93IHBhcmVudCBvcHRpb25zIGF0CisrICAgICBhIHBhcnRpY3VsYXIgZ3JvdXAgbGV2ZWwuICBJZiBib3RoIHRoaXMgZmllbGQgYW5kIEhFQURFUiBhcmUgemVybywgdGhlbgorKyAgICAgdGhleSBhcmVuJ3QgZ3JvdXBlZCBhdCBhbGwsIGJ1dCByYXRoZXIgbWVyZ2VkIHdpdGggdGhlIHBhcmVudCBvcHRpb25zCisrICAgICAobWVyZ2luZyB0aGUgY2hpbGQncyBncm91cGluZyBsZXZlbHMgd2l0aCB0aGUgcGFyZW50cykuICAqLworKyAgaW50IGdyb3VwOworK307CisrDAorKy8qIFBhcnNpbmcgc3RhdGUuICBUaGlzIGlzIHByb3ZpZGVkIHRvIHBhcnNpbmcgZnVuY3Rpb25zIGNhbGxlZCBieSBhcmdwLAorKyAgIHdoaWNoIG1heSBleGFtaW5lIGFuZCwgYXMgbm90ZWQsIG1vZGlmeSBmaWVsZHMuICAqLworK3N0cnVjdCBhcmdwX3N0YXRlCisreworKyAgLyogVGhlIHRvcCBsZXZlbCBBUkdQIGJlaW5nIHBhcnNlZC4gICovCisrICBfX2NvbnN0IHN0cnVjdCBhcmdwICpyb290X2FyZ3A7CisrCisrICAvKiBUaGUgYXJndW1lbnQgdmVjdG9yIGJlaW5nIHBhcnNlZC4gIE1heSBiZSBtb2RpZmllZC4gICovCisrICBpbnQgYXJnYzsKKysgIGNoYXIgKiphcmd2OworKworKyAgLyogVGhlIGluZGV4IGluIEFSR1Ygb2YgdGhlIG5leHQgYXJnIHRoYXQgdG8gYmUgcGFyc2VkLiAgTWF5IGJlIG1vZGlmaWVkLiAqLworKyAgaW50IG5leHQ7CisrCisrICAvKiBUaGUgZmxhZ3Mgc3VwcGxpZWQgdG8gYXJncF9wYXJzZS4gIE1heSBiZSBtb2RpZmllZC4gICovCisrICB1bnNpZ25lZCBmbGFnczsKKysKKysgIC8qIFdoaWxlIGNhbGxpbmcgYSBwYXJzaW5nIGZ1bmN0aW9uIHdpdGggYSBrZXkgb2YgQVJHUF9LRVlfQVJHLCB0aGlzIGlzIHRoZQorKyAgICAgbnVtYmVyIG9mIHRoZSBjdXJyZW50IGFyZywgc3RhcnRpbmcgYXQgemVybywgYW5kIGluY3JlbWVudGVkIGFmdGVyIGVhY2gKKysgICAgIHN1Y2ggY2FsbCByZXR1cm5zLiAgQXQgYWxsIG90aGVyIHRpbWVzLCB0aGlzIGlzIHRoZSBudW1iZXIgb2Ygc3VjaAorKyAgICAgYXJndW1lbnRzIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZC4gICovCisrICB1bnNpZ25lZCBhcmdfbnVtOworKworKyAgLyogSWYgbm9uLXplcm8sIHRoZSBpbmRleCBpbiBBUkdWIG9mIHRoZSBmaXJzdCBhcmd1bWVudCBmb2xsb3dpbmcgYSBzcGVjaWFsCisrICAgICBgLS0nIGFyZ3VtZW50ICh3aGljaCBwcmV2ZW50cyBhbnl0aGluZyBmb2xsb3dpbmcgYmVpbmcgaW50ZXJwcmV0ZWQgYXMgYW4KKysgICAgIG9wdGlvbikuICBPbmx5IHNldCBvbmNlIGFyZ3VtZW50IHBhcnNpbmcgaGFzIHByb2NlZWRlZCBwYXN0IHRoaXMgcG9pbnQuICovCisrICBpbnQgcXVvdGVkOworKworKyAgLyogQW4gYXJiaXRyYXJ5IHBvaW50ZXIgcGFzc2VkIGluIGZyb20gdGhlIHVzZXIuICAqLworKyAgdm9pZCAqaW5wdXQ7CisrICAvKiBWYWx1ZXMgdG8gcGFzcyB0byBjaGlsZCBwYXJzZXJzLiAgVGhpcyB2ZWN0b3Igd2lsbCBiZSB0aGUgc2FtZSBsZW5ndGggYXMKKysgICAgIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZm9yIHRoZSBjdXJyZW50IHBhcnNlci4gICovCisrICB2b2lkICoqY2hpbGRfaW5wdXRzOworKworKyAgLyogRm9yIHRoZSBwYXJzZXIncyB1c2UuICBJbml0aWFsaXplZCB0byAwLiAgKi8KKysgIHZvaWQgKmhvb2s7CisrCisrICAvKiBUaGUgbmFtZSB1c2VkIHdoZW4gcHJpbnRpbmcgbWVzc2FnZXMuICBUaGlzIGlzIGluaXRpYWxpemVkIHRvIEFSR1ZbMF0sCisrICAgICBvciBQUk9HUkFNX0lOVk9DQVRJT05fTkFNRSBpZiB0aGF0IGlzIHVuYXZhaWxhYmxlLiAgKi8KKysgIGNoYXIgKm5hbWU7CisrCisrICAvKiBTdHJlYW1zIHVzZWQgd2hlbiBhcmdwIHByaW50cyBzb21ldGhpbmcuICAqLworKyAgRklMRSAqZXJyX3N0cmVhbTsJCS8qIEZvciBlcnJvcnM7IGluaXRpYWxpemVkIHRvIHN0ZGVyci4gKi8KKysgIEZJTEUgKm91dF9zdHJlYW07CQkvKiBGb3IgaW5mb3JtYXRpb247IGluaXRpYWxpemVkIHRvIHN0ZG91dC4gKi8KKysKKysgIHZvaWQgKnBzdGF0ZTsJCQkvKiBQcml2YXRlLCBmb3IgdXNlIGJ5IGFyZ3AuICAqLworK307CisrDAorKy8qIEZsYWdzIGZvciBhcmdwX3BhcnNlIChub3RlIHRoYXQgdGhlIGRlZmF1bHRzIGFyZSB0aG9zZSB0aGF0IGFyZQorKyAgIGNvbnZlbmllbnQgZm9yIHByb2dyYW0gY29tbWFuZCBsaW5lIHBhcnNpbmcpOiAqLworKworKy8qIERvbid0IGlnbm9yZSB0aGUgZmlyc3QgZWxlbWVudCBvZiBBUkdWLiAgTm9ybWFsbHkgKGFuZCBhbHdheXMgdW5sZXNzCisrICAgQVJHUF9OT19FUlJTIGlzIHNldCkgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGFyZ3VtZW50IHZlY3RvciBpcworKyAgIHNraXBwZWQgZm9yIG9wdGlvbiBwYXJzaW5nIHB1cnBvc2VzLCBhcyBpdCBjb3JyZXNwb25kcyB0byB0aGUgcHJvZ3JhbSBuYW1lCisrICAgaW4gYSBjb21tYW5kIGxpbmUuICAqLworKyNkZWZpbmUgQVJHUF9QQVJTRV9BUkdWMCAgMHgwMQorKworKy8qIERvbid0IHByaW50IGVycm9yIG1lc3NhZ2VzIGZvciB1bmtub3duIG9wdGlvbnMgdG8gc3RkZXJyOyB1bmxlc3MgdGhpcyBmbGFnCisrICAgaXMgc2V0LCBBUkdQX1BBUlNFX0FSR1YwIGlzIGlnbm9yZWQsIGFzIEFSR1ZbMF0gaXMgdXNlZCBhcyB0aGUgcHJvZ3JhbQorKyAgIG5hbWUgaW4gdGhlIGVycm9yIG1lc3NhZ2VzLiAgVGhpcyBmbGFnIGltcGxpZXMgQVJHUF9OT19FWElUIChvbiB0aGUKKysgICBhc3N1bXB0aW9uIHRoYXQgc2lsZW50IGV4aXRpbmcgdXBvbiBlcnJvcnMgaXMgYmFkIGJlaGF2aW91cikuICAqLworKyNkZWZpbmUgQVJHUF9OT19FUlJTCTB4MDIKKysKKysvKiBEb24ndCBwYXJzZSBhbnkgbm9uLW9wdGlvbiBhcmdzLiAgTm9ybWFsbHkgbm9uLW9wdGlvbiBhcmdzIGFyZSBwYXJzZWQgYnkKKysgICBjYWxsaW5nIHRoZSBwYXJzZSBmdW5jdGlvbnMgd2l0aCBhIGtleSBvZiBBUkdQX0tFWV9BUkcsIGFuZCB0aGUgYWN0dWFsIGFyZworKyAgIGFzIHRoZSB2YWx1ZS4gIFNpbmNlIGl0J3MgaW1wb3NzaWJsZSB0byBrbm93IHdoaWNoIHBhcnNlIGZ1bmN0aW9uIHdhbnRzIHRvCisrICAgaGFuZGxlIGl0LCBlYWNoIG9uZSBpcyBjYWxsZWQgaW4gdHVybiwgdW50aWwgb25lIHJldHVybnMgMCBvciBhbiBlcnJvcgorKyAgIG90aGVyIHRoYW4gQVJHUF9FUlJfVU5LTk9XTjsgaWYgYW4gYXJndW1lbnQgaXMgaGFuZGxlZCBieSBubyBvbmUsIHRoZQorKyAgIGFyZ3BfcGFyc2UgcmV0dXJucyBwcmVtYXR1cmVseSAoYnV0IHdpdGggYSByZXR1cm4gdmFsdWUgb2YgMCkuICBJZiBhbGwKKysgICBhcmdzIGhhdmUgYmVlbiBwYXJzZWQgd2l0aG91dCBlcnJvciwgYWxsIHBhcnNpbmcgZnVuY3Rpb25zIGFyZSBjYWxsZWQgb25lCisrICAgbGFzdCB0aW1lIHdpdGggYSBrZXkgb2YgQVJHUF9LRVlfRU5ELiAgVGhpcyBmbGFnIG5lZWRuJ3Qgbm9ybWFsbHkgYmUgc2V0LAorKyAgIGFzIHRoZSBub3JtYWwgYmVoYXZpb3IgaXMgdG8gc3RvcCBwYXJzaW5nIGFzIHNvb24gYXMgc29tZSBhcmd1bWVudCBjYW4ndAorKyAgIGJlIGhhbmRsZWQuICAqLworKyNkZWZpbmUgQVJHUF9OT19BUkdTCTB4MDQKKysKKysvKiBQYXJzZSBvcHRpb25zIGFuZCBhcmd1bWVudHMgaW4gdGhlIHNhbWUgb3JkZXIgdGhleSBvY2N1ciBvbiB0aGUgY29tbWFuZAorKyAgIGxpbmUgLS0gbm9ybWFsbHkgdGhleSdyZSByZWFycmFuZ2VkIHNvIHRoYXQgYWxsIG9wdGlvbnMgY29tZSBmaXJzdC4gKi8KKysjZGVmaW5lIEFSR1BfSU5fT1JERVIJMHgwOAorKworKy8qIERvbid0IHByb3ZpZGUgdGhlIHN0YW5kYXJkIGxvbmcgb3B0aW9uIC0taGVscCwgd2hpY2ggY2F1c2VzIHVzYWdlIGFuZAorKyAgICAgIG9wdGlvbiBoZWxwIGluZm9ybWF0aW9uIHRvIGJlIG91dHB1dCB0byBzdGRvdXQsIGFuZCBleGl0ICgwKSBjYWxsZWQuICovCisrI2RlZmluZSBBUkdQX05PX0hFTFAJMHgxMAorKworKy8qIERvbid0IGV4aXQgb24gZXJyb3JzICh0aGV5IG1heSBzdGlsbCByZXN1bHQgaW4gZXJyb3IgbWVzc2FnZXMpLiAgKi8KKysjZGVmaW5lIEFSR1BfTk9fRVhJVAkweDIwCisrCisrLyogVXNlIHRoZSBnbnUgZ2V0b3B0IGBsb25nLW9ubHknIHJ1bGVzIGZvciBwYXJzaW5nIGFyZ3VtZW50cy4gICovCisrI2RlZmluZSBBUkdQX0xPTkdfT05MWQkweDQwCisrCisrLyogVHVybnMgb2ZmIGFueSBtZXNzYWdlLXByaW50aW5nL2V4aXRpbmcgb3B0aW9ucy4gICovCisrI2RlZmluZSBBUkdQX1NJTEVOVCAgICAoQVJHUF9OT19FWElUIHwgQVJHUF9OT19FUlJTIHwgQVJHUF9OT19IRUxQKQorKworKy8qIFBhcnNlIHRoZSBvcHRpb25zIHN0cmluZ3MgaW4gQVJHQyAmIEFSR1YgYWNjb3JkaW5nIHRvIHRoZSBvcHRpb25zIGluIEFSR1AuCisrICAgRkxBR1MgaXMgb25lIG9mIHRoZSBBUkdQXyBmbGFncyBhYm92ZS4gIElmIEFSR19JTkRFWCBpcyBub24tTlVMTCwgdGhlCisrICAgaW5kZXggaW4gQVJHViBvZiB0aGUgZmlyc3QgdW5wYXJzZWQgb3B0aW9uIGlzIHJldHVybmVkIGluIGl0LiAgSWYgYW4KKysgICB1bmtub3duIG9wdGlvbiBpcyBwcmVzZW50LCBBUkdQX0VSUl9VTktOT1dOIGlzIHJldHVybmVkOyBpZiBzb21lIHBhcnNlcgorKyAgIHJvdXRpbmUgcmV0dXJuZWQgYSBub24temVybyB2YWx1ZSwgaXQgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSAwIGlzCisrICAgcmV0dXJuZWQuICBUaGlzIGZ1bmN0aW9uIG1heSBhbHNvIGNhbGwgZXhpdCB1bmxlc3MgdGhlIEFSR1BfTk9fSEVMUCBmbGFnCisrICAgaXMgc2V0LiAgSU5QVVQgaXMgYSBwb2ludGVyIHRvIGEgdmFsdWUgdG8gYmUgcGFzc2VkIGluIHRvIHRoZSBwYXJzZXIuICAqLworK2V4dGVybiBlcnJvcl90IGFyZ3BfcGFyc2UgKF9fY29uc3Qgc3RydWN0IGFyZ3AgKl9fcmVzdHJpY3QgX19hcmdwLAorKwkJCSAgIGludCBfX2FyZ2MsIGNoYXIgKipfX3Jlc3RyaWN0IF9fYXJndiwKKysJCQkgICB1bnNpZ25lZCBfX2ZsYWdzLCBpbnQgKl9fcmVzdHJpY3QgX19hcmdfaW5kZXgsCisrCQkJICAgdm9pZCAqX19yZXN0cmljdCBfX2lucHV0KTsKKysMCisrLyogR2xvYmFsIHZhcmlhYmxlcy4gICovCisrCisrLyogSWYgZGVmaW5lZCBvciBzZXQgYnkgdGhlIHVzZXIgcHJvZ3JhbSB0byBhIG5vbi16ZXJvIHZhbHVlLCB0aGVuIGEgZGVmYXVsdAorKyAgIG9wdGlvbiAtLXZlcnNpb24gaXMgYWRkZWQgKHVubGVzcyB0aGUgQVJHUF9OT19IRUxQIGZsYWcgaXMgdXNlZCksIHdoaWNoCisrICAgd2lsbCBwcmludCB0aGlzIHN0cmluZyBmb2xsb3dlZCBieSBhIG5ld2xpbmUgYW5kIGV4aXQgKHVubGVzcyB0aGUKKysgICBBUkdQX05PX0VYSVQgZmxhZyBpcyB1c2VkKS4gIE92ZXJyaWRkZW4gYnkgQVJHUF9QUk9HUkFNX1ZFUlNJT05fSE9PSy4gICovCisrZXh0ZXJuIF9fY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX3ZlcnNpb247CisrCisrLyogSWYgZGVmaW5lZCBvciBzZXQgYnkgdGhlIHVzZXIgcHJvZ3JhbSB0byBhIG5vbi16ZXJvIHZhbHVlLCB0aGVuIGEgZGVmYXVsdAorKyAgIG9wdGlvbiAtLXZlcnNpb24gaXMgYWRkZWQgKHVubGVzcyB0aGUgQVJHUF9OT19IRUxQIGZsYWcgaXMgdXNlZCksIHdoaWNoCisrICAgY2FsbHMgdGhpcyBmdW5jdGlvbiB3aXRoIGEgc3RyZWFtIHRvIHByaW50IHRoZSB2ZXJzaW9uIHRvIGFuZCBhIHBvaW50ZXIgdG8KKysgICB0aGUgY3VycmVudCBwYXJzaW5nIHN0YXRlLCBhbmQgdGhlbiBleGl0cyAodW5sZXNzIHRoZSBBUkdQX05PX0VYSVQgZmxhZyBpcworKyAgIHVzZWQpLiAgVGhpcyB2YXJpYWJsZSB0YWtlcyBwcmVjZWRlbnQgb3ZlciBBUkdQX1BST0dSQU1fVkVSU0lPTi4gICovCisrZXh0ZXJuIHZvaWQgKCphcmdwX3Byb2dyYW1fdmVyc2lvbl9ob29rKSAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKKysJCQkJCSAgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fcmVzdHJpY3QKKysJCQkJCSAgX19zdGF0ZSk7CisrCisrLyogSWYgZGVmaW5lZCBvciBzZXQgYnkgdGhlIHVzZXIgcHJvZ3JhbSwgaXQgc2hvdWxkIHBvaW50IHRvIHN0cmluZyB0aGF0IGlzCisrICAgdGhlIGJ1Zy1yZXBvcnRpbmcgYWRkcmVzcyBmb3IgdGhlIHByb2dyYW0uICBJdCB3aWxsIGJlIHByaW50ZWQgYnkKKysgICBhcmdwX2hlbHAgaWYgdGhlIEFSR1BfSEVMUF9CVUdfQUREUiBmbGFnIGlzIHNldCAoYXMgaXQgaXMgYnkgdmFyaW91cworKyAgIHN0YW5kYXJkIGhlbHAgbWVzc2FnZXMpLCBlbWJlZGRlZCBpbiBhIHNlbnRlbmNlIHRoYXQgc2F5cyBzb21ldGhpbmcgbGlrZQorKyAgIGBSZXBvcnQgYnVncyB0byBBRERSLicuICAqLworK2V4dGVybiBfX2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV9idWdfYWRkcmVzczsKKysKKysvKiBUaGUgZXhpdCBzdGF0dXMgdGhhdCBhcmdwIHdpbGwgdXNlIHdoZW4gZXhpdGluZyBkdWUgdG8gYSBwYXJzaW5nIGVycm9yLgorKyAgIElmIG5vdCBkZWZpbmVkIG9yIHNldCBieSB0aGUgdXNlciBwcm9ncmFtLCB0aGlzIGRlZmF1bHRzIHRvIEVYX1VTQUdFIGZyb20KKysgICA8c3lzZXhpdHMuaD4uICAqLworK2V4dGVybiBlcnJvcl90IGFyZ3BfZXJyX2V4aXRfc3RhdHVzOworKwwKKysvKiBGbGFncyBmb3IgYXJncF9oZWxwLiAgKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9VU0FHRQkJMHgwMSAvKiBhIFVzYWdlOiBtZXNzYWdlLiAqLworKyNkZWZpbmUgQVJHUF9IRUxQX1NIT1JUX1VTQUdFCTB4MDIgLyogICIgYnV0IGRvbid0IGFjdHVhbGx5IHByaW50IG9wdGlvbnMuICovCisrI2RlZmluZSBBUkdQX0hFTFBfU0VFCQkweDA0IC8qIGEgYFRyeSAuLi4gZm9yIG1vcmUgaGVscCcgbWVzc2FnZS4gKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9MT05HCQkweDA4IC8qIGEgbG9uZyBoZWxwIG1lc3NhZ2UuICovCisrI2RlZmluZSBBUkdQX0hFTFBfUFJFX0RPQwkweDEwIC8qIGRvYyBzdHJpbmcgcHJlY2VkaW5nIGxvbmcgaGVscC4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfUE9TVF9ET0MJMHgyMCAvKiBkb2Mgc3RyaW5nIGZvbGxvd2luZyBsb25nIGhlbHAuICAqLworKyNkZWZpbmUgQVJHUF9IRUxQX0RPQwkJKEFSR1BfSEVMUF9QUkVfRE9DIHwgQVJHUF9IRUxQX1BPU1RfRE9DKQorKyNkZWZpbmUgQVJHUF9IRUxQX0JVR19BRERSCTB4NDAgLyogYnVnIHJlcG9ydCBhZGRyZXNzICovCisrI2RlZmluZSBBUkdQX0hFTFBfTE9OR19PTkxZCTB4ODAgLyogbW9kaWZ5IG91dHB1dCBhcHByb3ByaWF0ZWx5IHRvCisrCQkJCQlyZWZsZWN0IEFSR1BfTE9OR19PTkxZIG1vZGUuICAqLworKworKy8qIFRoZXNlIEFSR1BfSEVMUCBmbGFncyBhcmUgb25seSB1bmRlcnN0b29kIGJ5IGFyZ3Bfc3RhdGVfaGVscC4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfRVhJVF9FUlIJMHgxMDAgLyogQ2FsbCBleGl0KDEpIGluc3RlYWQgb2YgcmV0dXJuaW5nLiAgKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9FWElUX09LCTB4MjAwIC8qIENhbGwgZXhpdCgwKSBpbnN0ZWFkIG9mIHJldHVybmluZy4gICovCisrCisrLyogVGhlIHN0YW5kYXJkIHRoaW5nIHRvIGRvIGFmdGVyIGEgcHJvZ3JhbSBjb21tYW5kIGxpbmUgcGFyc2luZyBlcnJvciwgaWYgYW4KKysgICBlcnJvciBtZXNzYWdlIGhhcyBhbHJlYWR5IGJlZW4gcHJpbnRlZC4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfU1REX0VSUiBcCisrICAoQVJHUF9IRUxQX1NFRSB8IEFSR1BfSEVMUF9FWElUX0VSUikKKysvKiBUaGUgc3RhbmRhcmQgdGhpbmcgdG8gZG8gYWZ0ZXIgYSBwcm9ncmFtIGNvbW1hbmQgbGluZSBwYXJzaW5nIGVycm9yLCBpZiBubworKyAgIG1vcmUgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZSBoYXMgYmVlbiBwcmludGVkLiAgKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9TVERfVVNBR0UgXAorKyAgKEFSR1BfSEVMUF9TSE9SVF9VU0FHRSB8IEFSR1BfSEVMUF9TRUUgfCBBUkdQX0hFTFBfRVhJVF9FUlIpCisrLyogVGhlIHN0YW5kYXJkIHRoaW5nIHRvIGRvIGluIHJlc3BvbnNlIHRvIGEgLS1oZWxwIG9wdGlvbi4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfU1REX0hFTFAgXAorKyAgKEFSR1BfSEVMUF9TSE9SVF9VU0FHRSB8IEFSR1BfSEVMUF9MT05HIHwgQVJHUF9IRUxQX0VYSVRfT0sgXAorKyAgIHwgQVJHUF9IRUxQX0RPQyB8IEFSR1BfSEVMUF9CVUdfQUREUikKKysKKysvKiBPdXRwdXQgYSB1c2FnZSBtZXNzYWdlIGZvciBBUkdQIHRvIFNUUkVBTS4gIEZMQUdTIGFyZSBmcm9tIHRoZSBzZXQKKysgICBBUkdQX0hFTFBfKi4gICovCisrZXh0ZXJuIHZvaWQgYXJncF9oZWxwIChfX2NvbnN0IHN0cnVjdCBhcmdwICpfX3Jlc3RyaWN0IF9fYXJncCwKKysJCSAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAorKwkJICAgICAgIHVuc2lnbmVkIF9fZmxhZ3MsIGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lKTsKKysMCisrLyogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gd2l0aGluIGFuIGFyZ3AKKysgICBwYXJzaW5nIHJvdXRpbmUgKHRodXMgdGFraW5nIGFuIGFyZ3Bfc3RhdGUgc3RydWN0dXJlIGFzIHRoZSBmaXJzdAorKyAgIGFyZ3VtZW50KS4gIFRoZXkgbWF5IG9yIG1heSBub3QgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBhbmQgZXhpdCwgZGVwZW5kaW5nCisrICAgb24gdGhlIGZsYWdzIGluIFNUQVRFIC0tIGluIGFueSBjYXNlLCB0aGUgY2FsbGVyIHNob3VsZCBiZSBwcmVwYXJlZCBmb3IKKysgICB0aGVtICpub3QqIHRvIGV4aXQsIGFuZCBzaG91bGQgcmV0dXJuIGFuIGFwcHJvcGlhdGUgZXJyb3IgYWZ0ZXIgY2FsbGluZworKyAgIHRoZW0uICBbYXJncF91c2FnZSAmIGFyZ3BfZXJyb3Igc2hvdWxkIHByb2JhYmx5IGJlIGNhbGxlZCBhcmdwX3N0YXRlXy4uLiwKKysgICBidXQgdGhleSdyZSB1c2VkIG9mdGVuIGVub3VnaCB0aGF0IHRoZXkgc2hvdWxkIGJlIHNob3J0XSAgKi8KKysKKysvKiBPdXRwdXQsIGlmIGFwcHJvcHJpYXRlLCBhIHVzYWdlIG1lc3NhZ2UgZm9yIFNUQVRFIHRvIFNUUkVBTS4gIEZMQUdTIGFyZQorKyAgIGZyb20gdGhlIHNldCBBUkdQX0hFTFBfKi4gICovCisrZXh0ZXJuIHZvaWQgYXJncF9zdGF0ZV9oZWxwIChfX2NvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpfX3Jlc3RyaWN0IF9fc3RhdGUsCisrCQkJICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAorKwkJCSAgICAgdW5zaWduZWQgaW50IF9fZmxhZ3MpOworKy8qIFBvc3NpYmx5IG91dHB1dCB0aGUgc3RhbmRhcmQgdXNhZ2UgbWVzc2FnZSBmb3IgQVJHUCB0byBzdGRlcnIgYW5kIGV4aXQuICAqLworK2V4dGVybiB2b2lkIGFyZ3BfdXNhZ2UgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fc3RhdGUpOworKworKy8qIElmIGFwcHJvcHJpYXRlLCBwcmludCB0aGUgcHJpbnRmIHN0cmluZyBGTVQgYW5kIGZvbGxvd2luZyBhcmdzLCBwcmVjZWRlZAorKyAgIGJ5IHRoZSBwcm9ncmFtIG5hbWUgYW5kIGA6JywgdG8gc3RkZXJyLCBhbmQgZm9sbG93ZWQgYnkgYSBgVHJ5IC4uLiAtLWhlbHAnCisrICAgbWVzc2FnZSwgdGhlbiBleGl0ICgxKS4gICovCisrZXh0ZXJuIHZvaWQgYXJncF9lcnJvciAoX19jb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqX19yZXN0cmljdCBfX3N0YXRlLAorKwkJCV9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQorKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CisrLyogU2ltaWxhciB0byB0aGUgc3RhbmRhcmQgZ251IGVycm9yLXJlcG9ydGluZyBmdW5jdGlvbiBlcnJvcigpLCBidXQgd2lsbAorKyAgIHJlc3BlY3QgdGhlIEFSR1BfTk9fRVhJVCBhbmQgQVJHUF9OT19FUlJTIGZsYWdzIGluIFNUQVRFLCBhbmQgd2lsbCBwcmludAorKyAgIHRvIFNUQVRFLT5lcnJfc3RyZWFtLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGFyZ3VtZW50IHBhcnNpbmcgY29kZSB0aGF0IGlzCisrICAgc2hhcmVkIGJldHdlZW4gcHJvZ3JhbSBzdGFydHVwICh3aGVuIGV4aXRpbmcgaXMgZGVzaXJlZCkgYW5kIHJ1bnRpbWUKKysgICBvcHRpb24gcGFyc2luZyAod2hlbiB0eXBpY2FsbHkgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZCBpbnN0ZWFkKS4gIFRoZQorKyAgIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGZ1bmN0aW9uIGFuZCBhcmdwX2Vycm9yIGlzIHRoYXQgdGhlIGxhdHRlciBpcyBmb3IKKysgICAqcGFyc2luZyBlcnJvcnMqLCBhbmQgdGhlIGZvcm1lciBpcyBmb3Igb3RoZXIgcHJvYmxlbXMgdGhhdCBvY2N1ciBkdXJpbmcKKysgICBwYXJzaW5nIGJ1dCBkb24ndCByZWZsZWN0IGEgKHN5bnRhY3RpYykgcHJvYmxlbSB3aXRoIHRoZSBpbnB1dC4gICovCisrZXh0ZXJuIHZvaWQgYXJncF9mYWlsdXJlIChfX2NvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpfX3Jlc3RyaWN0IF9fc3RhdGUsCisrCQkJICBpbnQgX19zdGF0dXMsIGludCBfX2Vycm51bSwKKysJCQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQorKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDQsIDUpKSk7CisrLyogUmV0dXJucyB0cnVlIGlmIHRoZSBvcHRpb24gT1BUIGlzIGEgdmFsaWQgc2hvcnQgb3B0aW9uLiAgKi8KKytleHRlcm4gaW50IF9vcHRpb25faXNfc2hvcnQgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpfX29wdCkgX19USFJPVzsKKytleHRlcm4gaW50IF9fb3B0aW9uX2lzX3Nob3J0IChfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqX19vcHQpIF9fVEhST1c7CisrCisrLyogUmV0dXJucyB0cnVlIGlmIHRoZSBvcHRpb24gT1BUIGlzIGluIGZhY3QgdGhlIGxhc3QgKHVudXNlZCkgZW50cnkgaW4gYW4KKysgICBvcHRpb25zIGFycmF5LiAgKi8KKytleHRlcm4gaW50IF9vcHRpb25faXNfZW5kIChfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqX19vcHQpIF9fVEhST1c7CisrZXh0ZXJuIGludCBfX29wdGlvbl9pc19lbmQgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpfX29wdCkgX19USFJPVzsKKysKKysvKiBSZXR1cm4gdGhlIGlucHV0IGZpZWxkIGZvciBBUkdQIGluIHRoZSBwYXJzZXIgY29ycmVzcG9uZGluZyB0byBTVEFURTsgdXNlZAorKyAgIGJ5IHRoZSBoZWxwIHJvdXRpbmVzLiAgKi8KKysvKiBXZSB0aGluayB0aGlzIHNob3VsZCBub3QgYmUgZXhwb3J0ZWQgKi8KKytleHRlcm4gdm9pZCAqX19hcmdwX2lucHV0IChfX2NvbnN0IHN0cnVjdCBhcmdwICpfX3Jlc3RyaWN0IF9fYXJncCwKKysJCQkgICBfX2NvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpfX3Jlc3RyaWN0IF9fc3RhdGUpCisrICAgICBfX1RIUk9XOworKwwKKysjaWZkZWYgX19VU0VfRVhURVJOX0lOTElORVMKKysKKysjIGlmbmRlZiBBUkdQX0VJCisrIyAgZGVmaW5lIEFSR1BfRUkgX19leHRlcm5faW5saW5lCisrIyBlbmRpZgorKworK0FSR1BfRUkgdm9pZAorK2FyZ3BfdXNhZ2UgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fc3RhdGUpCisreworKyAgYXJncF9zdGF0ZV9oZWxwIChfX3N0YXRlLCBzdGRlcnIsIEFSR1BfSEVMUF9TVERfVVNBR0UpOworK30KKysKKytBUkdQX0VJIGludAorK19fTlRIIChfX29wdGlvbl9pc19zaG9ydCAoX19jb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKl9fb3B0KSkKKyt7CisrICBpZiAoX19vcHQtPmZsYWdzICYgT1BUSU9OX0RPQykKKysgICAgcmV0dXJuIDA7CisrICBlbHNlCisrICAgIHsKKysgICAgICBpbnQgX19rZXkgPSBfX29wdC0+a2V5OworKyAgICAgIHJldHVybiBfX2tleSA+IDAgJiYgX19rZXkgPD0gVUNIQVJfTUFYICYmIGlzcHJpbnQgKF9fa2V5KTsKKysgICAgfQorK30KKysKKytBUkdQX0VJIGludAorK19fTlRIIChfX29wdGlvbl9pc19lbmQgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpfX29wdCkpCisreworKyAgcmV0dXJuICFfX29wdC0+a2V5ICYmICFfX29wdC0+bmFtZSAmJiAhX19vcHQtPmRvYyAmJiAhX19vcHQtPmdyb3VwOworK30KKysjZW5kaWYgLyogVXNlIGV4dGVybiBpbmxpbmVzLiAgKi8KKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBhcmdwLmggKi8KK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL2JpdHMvZ2V0b3B0X2ludC5oIGIvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9iaXRzL2dldG9wdF9pbnQuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI5MWVkZmUKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24vYml0cy9nZXRvcHRfaW50LmgKK0BAIC0wLDAgKzEsMTM2IEBACisrLyogSW50ZXJuYWwgZGVjbGFyYXRpb25zIGZvciBnZXRvcHQuCisrICAgQ29weXJpZ2h0IChDKSAxOTg5LTE5OTQsMTk5Ni0xOTk5LDIwMDEsMjAwMywyMDA0CisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpZm5kZWYgX0dFVE9QVF9JTlRfSAorKyNkZWZpbmUgX0dFVE9QVF9JTlRfSCAgMQorKworK2V4dGVybiBpbnQgX2dldG9wdF9pbnRlcm5hbCAoaW50IF9fX2FyZ2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqX19sb25nb3B0cywgaW50ICpfX2xvbmdpbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2xvbmdfb25seSkgYXR0cmlidXRlX2hpZGRlbjsKKysKKysKKysvKiBSZWVudHJhbnQgdmVyc2lvbnMgd2hpY2ggY2FuIGhhbmRsZSBwYXJzaW5nIG11bHRpcGxlIGFyZ3VtZW50CisrICAgdmVjdG9ycyBhdCB0aGUgc2FtZSB0aW1lLiAgKi8KKysKKysvKiBGb3IgX19vcmRlcmluZyBtZW1iZXIgKi8KKytlbnVtIHsKKysgICAgICAgUkVRVUlSRV9PUkRFUiwgUEVSTVVURSwgUkVUVVJOX0lOX09SREVSCisrfTsKKysKKysvKiBEYXRhIHR5cGUgZm9yIHJlZW50cmFudCBmdW5jdGlvbnMuICAqLworKworK3N0cnVjdCBfZ2V0b3B0X2RhdGEKKyt7CisrICAvKiBUaGVzZSBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgbWVhbmluZyBhcyB0aGUgY29ycmVzcG9uZGluZyBnbG9iYWwKKysgICAgIHZhcmlhYmxlcywgZXhjZXB0IHRoYXQgdGhleSBhcmUgdXNlZCBmb3IgdGhlIHJlZW50cmFudAorKyAgICAgdmVyc2lvbnMgb2YgZ2V0b3B0LiAgKi8KKysgIGludCBvcHRpbmQ7CisrICBpbnQgb3B0ZXJyOworKyAgY2hhciAqb3B0YXJnOworKyAgc21hbGx1aW50IG9wdG9wdDsgLyogd2Ugc3RvcmUgY2hhcmFjdGVycyBoZXJlLCBhIGJ5dGUgaXMgZW5vdWdoICovCisrCisrICAvKiBJbnRlcm5hbCBtZW1iZXJzLiAgKi8KKysKKysgIC8qIFRydWUgaWYgdGhlIGludGVybmFsIG1lbWJlcnMgaGF2ZSBiZWVuIGluaXRpYWxpemVkLiAgKi8KKysgIHNtYWxsaW50IF9faW5pdGlhbGl6ZWQ7CisrCisrICAvKiBEZXNjcmliZSBob3cgdG8gZGVhbCB3aXRoIG9wdGlvbnMgdGhhdCBmb2xsb3cgbm9uLW9wdGlvbiBBUkdWLWVsZW1lbnRzLgorKworKyAgICAgSWYgdGhlIGNhbGxlciBkaWQgbm90IHNwZWNpZnkgYW55dGhpbmcsCisrICAgICB0aGUgZGVmYXVsdCBpcyBSRVFVSVJFX09SREVSIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorKyAgICAgUE9TSVhMWV9DT1JSRUNUIGlzIGRlZmluZWQsIFBFUk1VVEUgb3RoZXJ3aXNlLgorKworKyAgICAgUkVRVUlSRV9PUkRFUiBtZWFucyBkb24ndCByZWNvZ25pemUgdGhlbSBhcyBvcHRpb25zOworKyAgICAgc3RvcCBvcHRpb24gcHJvY2Vzc2luZyB3aGVuIHRoZSBmaXJzdCBub24tb3B0aW9uIGlzIHNlZW4uCisrICAgICBUaGlzIGlzIHdoYXQgVW5peCBkb2VzLgorKyAgICAgVGhpcyBtb2RlIG9mIG9wZXJhdGlvbiBpcyBzZWxlY3RlZCBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQKKysgICAgIHZhcmlhYmxlIFBPU0lYTFlfQ09SUkVDVCwgb3IgdXNpbmcgYCsnIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIKKysgICAgIG9mIHRoZSBsaXN0IG9mIG9wdGlvbiBjaGFyYWN0ZXJzLgorKworKyAgICAgUEVSTVVURSBpcyB0aGUgZGVmYXVsdC4gIFdlIHBlcm11dGUgdGhlIGNvbnRlbnRzIG9mIEFSR1YgYXMgd2UKKysgICAgIHNjYW4sIHNvIHRoYXQgZXZlbnR1YWxseSBhbGwgdGhlIG5vbi1vcHRpb25zIGFyZSBhdCB0aGUgZW5kLgorKyAgICAgVGhpcyBhbGxvd3Mgb3B0aW9ucyB0byBiZSBnaXZlbiBpbiBhbnkgb3JkZXIsIGV2ZW4gd2l0aCBwcm9ncmFtcworKyAgICAgdGhhdCB3ZXJlIG5vdCB3cml0dGVuIHRvIGV4cGVjdCB0aGlzLgorKworKyAgICAgUkVUVVJOX0lOX09SREVSIGlzIGFuIG9wdGlvbiBhdmFpbGFibGUgdG8gcHJvZ3JhbXMgdGhhdCB3ZXJlCisrICAgICB3cml0dGVuIHRvIGV4cGVjdCBvcHRpb25zIGFuZCBvdGhlciBBUkdWLWVsZW1lbnRzIGluIGFueSBvcmRlcgorKyAgICAgYW5kIHRoYXQgY2FyZSBhYm91dCB0aGUgb3JkZXJpbmcgb2YgdGhlIHR3by4gIFdlIGRlc2NyaWJlIGVhY2gKKysgICAgIG5vbi1vcHRpb24gQVJHVi1lbGVtZW50IGFzIGlmIGl0IHdlcmUgdGhlIGFyZ3VtZW50IG9mIGFuIG9wdGlvbgorKyAgICAgd2l0aCBjaGFyYWN0ZXIgY29kZSAxLiAgVXNpbmcgYC0nIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlCisrICAgICBsaXN0IG9mIG9wdGlvbiBjaGFyYWN0ZXJzIHNlbGVjdHMgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbi4KKysKKysgICAgIFRoZSBzcGVjaWFsIGFyZ3VtZW50IGAtLScgZm9yY2VzIGFuIGVuZCBvZiBvcHRpb24tc2Nhbm5pbmcgcmVnYXJkbGVzcworKyAgICAgb2YgdGhlIHZhbHVlIG9mIGBvcmRlcmluZycuICBJbiB0aGUgY2FzZSBvZiBSRVRVUk5fSU5fT1JERVIsIG9ubHkKKysgICAgIGAtLScgY2FuIGNhdXNlIGBnZXRvcHQnIHRvIHJldHVybiAtMSB3aXRoIGBvcHRpbmQnICE9IEFSR0MuICAqLworKyAgc21hbGxpbnQgX19vcmRlcmluZzsKKysKKysgIC8qIElmIHRoZSBQT1NJWExZX0NPUlJFQ1QgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LiAgKi8KKysgIHNtYWxsaW50IF9fcG9zaXhseV9jb3JyZWN0OworKworKyAgLyogVGhlIG5leHQgY2hhciB0byBiZSBzY2FubmVkIGluIHRoZSBvcHRpb24tZWxlbWVudAorKyAgICAgaW4gd2hpY2ggdGhlIGxhc3Qgb3B0aW9uIGNoYXJhY3RlciB3ZSByZXR1cm5lZCB3YXMgZm91bmQuCisrICAgICBUaGlzIGFsbG93cyB1cyB0byBwaWNrIHVwIHRoZSBzY2FuIHdoZXJlIHdlIGxlZnQgb2ZmLgorKworKyAgICAgSWYgdGhpcyBpcyB6ZXJvLCBvciBhIG51bGwgc3RyaW5nLCBpdCBtZWFucyByZXN1bWUgdGhlIHNjYW4KKysgICAgIGJ5IGFkdmFuY2luZyB0byB0aGUgbmV4dCBBUkdWLWVsZW1lbnQuICAqLworKyAgY2hhciAqX19uZXh0Y2hhcjsKKysKKysKKysgIC8qIEhhbmRsZSBwZXJtdXRhdGlvbiBvZiBhcmd1bWVudHMuICAqLworKworKyAgLyogRGVzY3JpYmUgdGhlIHBhcnQgb2YgQVJHViB0aGF0IGNvbnRhaW5zIG5vbi1vcHRpb25zIHRoYXQgaGF2ZQorKyAgICAgYmVlbiBza2lwcGVkLiAgYGZpcnN0X25vbm9wdCcgaXMgdGhlIGluZGV4IGluIEFSR1Ygb2YgdGhlIGZpcnN0CisrICAgICBvZiB0aGVtOyBgbGFzdF9ub25vcHQnIGlzIHRoZSBpbmRleCBhZnRlciB0aGUgbGFzdCBvZiB0aGVtLiAgKi8KKysKKysgIGludCBfX2ZpcnN0X25vbm9wdDsKKysgIGludCBfX2xhc3Rfbm9ub3B0OworKworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX05PTk9QVElPTl9GTEFHUworKyAgaW50IF9fbm9ub3B0aW9uX2ZsYWdzX21heF9sZW47CisrICBpbnQgX19ub25vcHRpb25fZmxhZ3NfbGVuOworKyMgZW5kaWYKKyt9OworKworKy8qIFRoZSBpbml0aWFsaXplciBpcyBuZWNlc3NhcnkgdG8gc2V0IE9QVElORCBhbmQgT1BURVJSIHRvIHRoZWlyCisrICAgZGVmYXVsdCB2YWx1ZXMgYW5kIHRvIGNsZWFyIHRoZSBpbml0aWFsaXphdGlvbiBmbGFnLiAgKi8KKysjZGVmaW5lIF9HRVRPUFRfREFUQV9JTklUSUFMSVpFUiAgICAgICB7IDEsIDEgfQorKworKyNpZiAwIC8qIGZpcnN0IGlzIHN0YXRpYyBvbiB1Q2xpYmMsIHRoZSBvdGhlcnMgbm90IHVzZWQgKi8KKytleHRlcm4gaW50IF9nZXRvcHRfaW50ZXJuYWxfciAoaW50IF9fX2FyZ2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKl9fbG9uZ29wdHMsIGludCAqX19sb25naW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2xvbmdfb25seSwgc3RydWN0IF9nZXRvcHRfZGF0YSAqX19kYXRhKTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfR05VX0dFVE9QVF9fIHx8IGRlZmluZWQgX19VQ0xJQkNfSEFTX0dFVE9QVF9MT05HX18KKysjaWZuZGVmIF9fbmVlZF9nZXRvcHQKKytleHRlcm4gaW50IF9nZXRvcHRfbG9uZ19yIChpbnQgX19fYXJnYywgY2hhciAqY29uc3QgKl9fX2FyZ3YsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKl9fbG9uZ29wdHMsIGludCAqX19sb25naW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9nZXRvcHRfZGF0YSAqX19kYXRhKTsKKysKKytleHRlcm4gaW50IF9nZXRvcHRfbG9uZ19vbmx5X3IgKGludCBfX19hcmdjLCBjaGFyICpjb25zdCAqX19fYXJndiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX19zaG9ydG9wdHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKl9fbG9uZ29wdHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19sb25naW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX2dldG9wdF9kYXRhICpfX2RhdGEpOworKyNlbmRpZgorKyNlbmRpZgorKyNlbmRpZiAvKiBnZXRvcHRfaW50LmggKi8KK2RpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9nZXRvcHQuYyBiL2xpYmMvdW5pc3RkL2dldG9wdC5jCitpbmRleCBmNjM0ODJiLi5kYjVlMTJjIDEwMDY0NAorLS0tIGEvbGliYy91bmlzdGQvZ2V0b3B0LmMKKysrKyBiL2xpYmMvdW5pc3RkL2dldG9wdC5jCitAQCAtMTA1LDcgKzEwNSw3IEBACisgICAgdGhleSBjYW4gZGlzdGluZ3Vpc2ggdGhlIHJlbGF0aXZlIG9yZGVyIG9mIG9wdGlvbnMgYW5kIG90aGVyIGFyZ3VtZW50cy4gICovCisgCisgI2luY2x1ZGUgPGdldG9wdC5oPgorLSNpbmNsdWRlICJnZXRvcHRfaW50LmgiCisrI2luY2x1ZGUgPGJpdHMvZ2V0b3B0X2ludC5oPgorIAorIAorIC8qIEZvciBjb21tdW5pY2F0aW9uIGZyb20gYGdldG9wdCcgdG8gdGhlIGNhbGxlci4KK0BAIC0xMTcwLDYgKzExNzAsMTUgQEAgZ2V0b3B0X2xvbmcgKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwgY29uc3QgY2hhciAqb3B0aW9ucywKKyAgIHJldHVybiBfZ2V0b3B0X2ludGVybmFsIChhcmdjLCBhcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsIG9wdF9pbmRleCwgMCk7CisgfQorIAorK2ludAorK19nZXRvcHRfbG9uZ19yIChpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMsCisrICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBpbnQgKm9wdF9pbmRleCwKKysgICAgICAgICAgICAgICBzdHJ1Y3QgX2dldG9wdF9kYXRhICpkKQorK3sKKysgIHJldHVybiBfZ2V0b3B0X2ludGVybmFsX3IgKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGxvbmdfb3B0aW9ucywgb3B0X2luZGV4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBkKTsKKyt9CisrCisgLyogTGlrZSBnZXRvcHRfbG9uZywgYnV0ICctJyBhcyB3ZWxsIGFzICctLScgY2FuIGluZGljYXRlIGEgbG9uZyBvcHRpb24uCisgICAgSWYgYW4gb3B0aW9uIHRoYXQgc3RhcnRzIHdpdGggJy0nIChub3QgJy0tJykgZG9lc24ndCBtYXRjaCBhIGxvbmcgb3B0aW9uLAorICAgIGJ1dCBkb2VzIG1hdGNoIGEgc2hvcnQgb3B0aW9uLCBpdCBpcyBwYXJzZWQgYXMgYSBzaG9ydCBvcHRpb24KK0BAIC0xMTgzLDQgKzExOTIsMTIgQEAgZ2V0b3B0X2xvbmdfb25seSAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LCBjb25zdCBjaGFyICpvcHRpb25zLAorIH0KKyAjZW5kaWYgLyogX19VQ0xJQkNfSEFTX0dFVE9QVF9MT05HX18gKi8KKyAKKytpbnQKKytfZ2V0b3B0X2xvbmdfb25seV9yIChpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMsCisrICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpsb25nX29wdGlvbnMsIGludCAqb3B0X2luZGV4LAorKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9nZXRvcHRfZGF0YSAqZCkKKyt7CisrICByZXR1cm4gX2dldG9wdF9pbnRlcm5hbF9yIChhcmdjLCBhcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsIG9wdF9pbmRleCwgMSwgZCk7CisrfQorKworICNlbmRpZgkvKiBOb3QgRUxJREVfQ09ERS4gICovCitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvTWFrZWZpbGUgYi9saWJ1YXJncC9NYWtlZmlsZQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjQ1YWNkZDkKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL01ha2VmaWxlCitAQCAtMCwwICsxLDE0IEBACisrIyBNYWtlZmlsZSBmb3IgdUNsaWJjIChsaWJ1YXJncCkKKysjCisrIyBDb3B5cmlnaHQgKEMpIDIwMTAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorKyMgQXV0aG9yKHMpOiBGaWxpcHBvIEFyY2lkaWFjb25vIDxmaWxpcHBvLmFyY2lkaWFjb25vIGF0IHN0LmNvbT4KKysjCisrIyBMaWNlbnNlZCB1bmRlciB0aGUgTEdQTCB2Mi4xLCBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIgaW4gdGhpcyB0YXJiYWxsLgorKyMKKysKKyt0b3Bfc3JjZGlyPS4uLworK3RvcF9idWlsZGRpcj0uLi8KKytpbmNsdWRlICQodG9wX2J1aWxkZGlyKVJ1bGVzLm1haworK2FsbDogbGlicworK2luY2x1ZGUgTWFrZWZpbGUuaW4KKytpbmNsdWRlICQodG9wX3NyY2RpcilNYWtlcnVsZXMKK2RpZmYgLS1naXQgYS9saWJ1YXJncC9NYWtlZmlsZS5pbiBiL2xpYnVhcmdwL01ha2VmaWxlLmluCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTQ5OGFiYgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvTWFrZWZpbGUuaW4KK0BAIC0wLDAgKzEsNzMgQEAKKysjIE1ha2VmaWxlIGZvciB1Q2xpYmMgKGxpYnVhcmdwKQorKyMKKysjIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZC4KKysjIEF1dGhvcihzKTogU2FsdmF0b3JlIENybyA8c2FsdmF0b3JlLmNybyBhdCBzdC5jb20+CisrIyAgICAgICAgICAgIC0gRmlyc3QgaW1wbGVtZW50YXRpb24sIGVtYmVkZGVkIGludG8gbGliYworKyMgICAgICAgICAgICBGaWxpcHBvIEFyY2lkaWFjb25vIDxmaWxpcHBvLmFyY2lkaWFjb25vIGF0IHN0LmNvbT4KKysjICAgICAgICAgICAgLSBSZXdvcmtlZCBmb3Igc3RhbmQtYWxvbmUgbGlidWFyZ3AgaW1wbGVtZW50YXRpb24KKysKKysjIExpY2Vuc2VkIHVuZGVyIHRoZSBMR1BMIHYyLjEsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQiBpbiB0aGlzIHRhcmJhbGwuCisrIworKworK0NGTEFHUy1saWJ1YXJncCA6PSAtRE5PVF9JTl9saWJjIC1ESVNfSU5fbGlidWFyZ3AgJChTU1BfQUxMX0NGTEFHUykKKysKKytMREZMQUdTLWxpYnVhcmdwLnNvIDo9ICQoTERGTEFHUykKKysKKytMSUJTLWxpYnVhcmdwLnNvIDo9ICQoTElCUykKKysKKytsaWJ1YXJncF9GVUxMX05BTUUgOj0gbGlidWFyZ3AtJChWRVJTSU9OKS5zbworKworK2xpYnVhcmdwX0RJUiA6PSAkKHRvcF9zcmNkaXIpbGlidWFyZ3AKKytsaWJ1YXJncF9PVVQgOj0gJCh0b3BfYnVpbGRkaXIpbGlidWFyZ3AKKysKKytsaWJ1YXJncF9TUkMteSA6PQorK2xpYnVhcmdwX1NSQy0kKFVDTElCQ19IQVNfQVJHUCkgOj0gJChhZGRzdWZmaXggLmMsJChhZGRwcmVmaXggYXJncC0sIGJhIFwKKysJCQllZXhzdCBmbXRzdHJlYW0gZnMteGlubCBoZWxwIHBhcnNlIHB2IHB2aCB4aW5sKSkKKysKKytDRkxBR1MtYXJncC14aW5sLmMgPSAtZmdudTg5LWlubGluZQorKworK2xpYnVhcmdwX1NSQyA6PSAkKGFkZHByZWZpeCAkKGxpYnVhcmdwX0RJUikvLCQobGlidWFyZ3BfU1JDLXkpKQorK2xpYnVhcmdwX09CSiA6PSAkKHBhdHN1YnN0ICQobGlidWFyZ3BfRElSKS8lLmMsJChsaWJ1YXJncF9PVVQpLyUubywkKGxpYnVhcmdwX1NSQykpCisrCisrbGlidWFyZ3BfU1JDUyA6PSAkKGxpYnVhcmdwX1NSQykKKytsaWJ1YXJncF9PQkpTIDo9ICQobGlidWFyZ3BfT0JKKQorKworK2lmZXEgKCQoRE9QSUMpLHkpCisrbGlidWFyZ3AtYS15IDo9ICQobGlidWFyZ3BfT0JKUzoubz0ub3MpCisrZWxzZQorK2xpYnVhcmdwLWEteSA6PSAkKGxpYnVhcmdwX09CSlMpCisrZW5kaWYKKytsaWJ1YXJncC1zby15IDo9ICQobGlidWFyZ3BfT0JKUzoubz0ub3MpCisrCisrbGliLWEtJChVQ0xJQkNfSEFTX0FSR1ApICs9ICQodG9wX2J1aWxkZGlyKWxpYi9saWJ1YXJncC5hCisrbGliLXNvLSQoVUNMSUJDX0hBU19BUkdQKSArPSAkKHRvcF9idWlsZGRpcilsaWIvbGlidWFyZ3Auc28KKysKKytvYmpjbGVhbi15ICs9IENMRUFOX2xpYnVhcmdwCisrCisraWZlcSAoJChET01VTFRJKSxuKQorK2lmZXEgKCQoRE9QSUMpLHkpCisrJCh0b3BfYnVpbGRkaXIpbGliL2xpYnVhcmdwLnNvOiAkKHRvcF9idWlsZGRpcilsaWIvbGlidWFyZ3AuYSAkKGxpYmMuZGVwZW5kKQorK2Vsc2UKKyskKHRvcF9idWlsZGRpcilsaWIvbGlidWFyZ3Auc286ICQobGlidWFyZ3BfT1VUKS9saWJ1YXJncF9zby5hICQobGliYy5kZXBlbmQpCisrZW5kaWYKKysJJChjYWxsIGxpbmsuc28sJChsaWJ1YXJncF9GVUxMX05BTUUpLCQoTUFKT1JfVkVSU0lPTikpCisrZWxzZQorKyQodG9wX2J1aWxkZGlyKWxpYi9saWJ1YXJncC5zbzogJChsaWJ1YXJncF9PVVQpL2xpYnVhcmdwLm9TICQobGliYy5kZXBlbmQpCisrCSQoY2FsbCBsaW5rbS5zbywkKGxpYnVhcmdwX0ZVTExfTkFNRSksJChNQUpPUl9WRVJTSU9OKSkKKytlbmRpZgorKworKyQobGlidWFyZ3BfT1VUKS9saWJ1YXJncF9zby5hOiAkKGxpYnVhcmdwLXNvLXkpCisrCSQoUSkkKFJNKSAkQAorKwkkKGRvX2FyKQorKworKyQobGlidWFyZ3BfT1VUKS9saWJ1YXJncC5vUzogJChsaWJ1YXJncF9TUkNTKQorKwkkKFEpJChSTSkgJEAKKysJJChjb21waWxlLW0pCisrCisrJCh0b3BfYnVpbGRkaXIpbGliL2xpYnVhcmdwLmE6ICQobGlidWFyZ3AtYS15KQorKwkkKFEpJChJTlNUQUxMKSAtZCAkKGRpciAkQCkKKysJJChRKSQoUk0pICRACisrCSQoZG9fYXIpCisrCisrQ0xFQU5fbGlidWFyZ3A6CisrCSQoZG9fcm0pICQoYWRkcHJlZml4ICQobGlidWFyZ3BfT1VUKS8qLiwgbyBvcyBvUyBhKQorZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtYmEuYyBiL2xpYnVhcmdwL2FyZ3AtYmEuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1MjJiMDIKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtYmEuYworQEAgLTAsMCArMSwyNiBAQAorKy8qIERlZmF1bHQgZGVmaW5pdGlvbiBmb3IgQVJHUF9QUk9HUkFNX0JVR19BRERSRVNTLgorKyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKy8qIElmIHNldCBieSB0aGUgdXNlciBwcm9ncmFtLCBpdCBzaG91bGQgcG9pbnQgdG8gc3RyaW5nIHRoYXQgaXMgdGhlCisrICAgYnVnLXJlcG9ydGluZyBhZGRyZXNzIGZvciB0aGUgcHJvZ3JhbS4gIEl0IHdpbGwgYmUgcHJpbnRlZCBieSBhcmdwX2hlbHAgaWYKKysgICB0aGUgQVJHUF9IRUxQX0JVR19BRERSIGZsYWcgaXMgc2V0IChhcyBpdCBpcyBieSB2YXJpb3VzIHN0YW5kYXJkIGhlbHAKKysgICBtZXNzYWdlcyksIGVtYmVkZGVkIGluIGEgc2VudGVuY2UgdGhhdCBzYXlzIHNvbWV0aGluZyBsaWtlIGBSZXBvcnQgYnVncyB0bworKyAgIEFERFIuJy4gICovCisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzOworZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtZWV4c3QuYyBiL2xpYnVhcmdwL2FyZ3AtZWV4c3QuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjQ0NWI2OGQKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtZWV4c3QuYworQEAgLTAsMCArMSwzMiBAQAorKy8qIERlZmF1bHQgZGVmaW5pdGlvbiBmb3IgQVJHUF9FUlJfRVhJVF9TVEFUVVMKKysgICBDb3B5cmlnaHQgKEMpIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN5c2V4aXRzLmg+CisrCisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKysvKiBUaGUgZXhpdCBzdGF0dXMgdGhhdCBhcmdwIHdpbGwgdXNlIHdoZW4gZXhpdGluZyBkdWUgdG8gYSBwYXJzaW5nIGVycm9yLgorKyAgIElmIG5vdCBkZWZpbmVkIG9yIHNldCBieSB0aGUgdXNlciBwcm9ncmFtLCB0aGlzIGRlZmF1bHRzIHRvIEVYX1VTQUdFIGZyb20KKysgICA8c3lzZXhpdHMuaD4uICAqLworK2Vycm9yX3QgYXJncF9lcnJfZXhpdF9zdGF0dXMgPSBFWF9VU0FHRTsKK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5jIGIvbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjc1MjI3ZjkKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmMKK0BAIC0wLDAgKzEsNDM5IEBACisrLyogV29yZC13cmFwcGluZyBhbmQgbGluZS10cnVuY2F0aW5nIHN0cmVhbXMKKysgICBDb3B5cmlnaHQgKEMpIDE5OTctMTk5OSwyMDAxLDIwMDIsMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4KKysKKysgICBNb2RpZmllZCBmb3IgdUNsaWJjIGJ5OiBTYWx2YXRvcmUgQ3JvIDxzYWx2YXRvcmUuY3JvIGF0IHN0LmNvbT4KKysqLworKworKy8qIFRoaXMgcGFja2FnZSBlbXVsYXRlcyBnbGliYyBgbGluZV93cmFwX3N0cmVhbScgc2VtYW50aWNzIGZvciBzeXN0ZW1zIHRoYXQKKysgICBkb24ndCBoYXZlIHRoYXQuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysKKysjaW5jbHVkZSAiYXJncC1mbXRzdHJlYW0uaCIKKysKKysjaWZuZGVmIEFSR1BfRk1UU1RSRUFNX1VTRV9MSU5FV1JBUAorKworKyNpZm5kZWYgaXNibGFuaworKyNkZWZpbmUgaXNibGFuayhjaCkgKChjaCk9PScgJyB8fCAoY2gpPT0nXHQnKQorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyMgaW5jbHVkZSA8bGliaW8vbGliaW9QLmg+CisrIyBkZWZpbmUgX192c25wcmludGYocywgbCwgZiwgYSkgX0lPX3ZzbnByaW50ZiAocywgbCwgZiwgYSkKKysjZWxzZQorKyMgZGVmaW5lIF9fdnNucHJpbnRmKHMsIGwsIGYsIGEpIHZzbnByaW50ZiAocywgbCwgZiwgYSkKKysjZW5kaWYKKysKKysjZGVmaW5lIElOSVRfQlVGX1NJWkUgMjAwCisrI2RlZmluZSBQUklOVEZfU0laRV9HVUVTUyAxNTAKKysKKysvKiBSZXR1cm4gYW4gYXJncF9mbXRzdHJlYW0gdGhhdCBvdXRwdXRzIHRvIFNUUkVBTSwgYW5kIHdoaWNoIHByZWZpeGVzIGxpbmVzCisrICAgd3JpdHRlbiBvbiBpdCB3aXRoIExNQVJHSU4gc3BhY2VzIGFuZCBsaW1pdHMgdGhlbSB0byBSTUFSR0lOIGNvbHVtbnMKKysgICB0b3RhbC4gIElmIFdNQVJHSU4gPj0gMCwgd29yZHMgdGhhdCBleHRlbmQgcGFzdCBSTUFSR0lOIGFyZSB3cmFwcGVkIGJ5CisrICAgcmVwbGFjaW5nIHRoZSB3aGl0ZXNwYWNlIGJlZm9yZSB0aGVtIHdpdGggYSBuZXdsaW5lIGFuZCBXTUFSR0lOIHNwYWNlcy4KKysgICBPdGhlcndpc2UsIGNoYXJzIGJleW9uZCBSTUFSR0lOIGFyZSBzaW1wbHkgZHJvcHBlZCB1bnRpbCBhIG5ld2xpbmUuCisrICAgUmV0dXJucyBOVUxMIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4gICovCisrYXJncF9mbXRzdHJlYW1fdAorK19fYXJncF9tYWtlX2ZtdHN0cmVhbSAoRklMRSAqc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbG1hcmdpbiwgc2l6ZV90IHJtYXJnaW4sIHNzaXplX3Qgd21hcmdpbikKKyt7CisrICBhcmdwX2ZtdHN0cmVhbV90IGZzOworKworKyAgZnMgPSAoc3RydWN0IGFyZ3BfZm10c3RyZWFtICopIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgYXJncF9mbXRzdHJlYW0pKTsKKysgIGlmIChmcyAhPSBOVUxMKQorKyAgICB7CisrICAgICAgZnMtPnN0cmVhbSA9IHN0cmVhbTsKKysKKysgICAgICBmcy0+bG1hcmdpbiA9IGxtYXJnaW47CisrICAgICAgZnMtPnJtYXJnaW4gPSBybWFyZ2luOworKyAgICAgIGZzLT53bWFyZ2luID0gd21hcmdpbjsKKysgICAgICBmcy0+cG9pbnRfY29sID0gMDsKKysgICAgICBmcy0+cG9pbnRfb2ZmcyA9IDA7CisrCisrICAgICAgZnMtPmJ1ZiA9IChjaGFyICopIG1hbGxvYyAoSU5JVF9CVUZfU0laRSk7CisrICAgICAgaWYgKCEgZnMtPmJ1ZikKKysgICAgICAgeworKyAgICAgICAgIGZyZWUgKGZzKTsKKysgICAgICAgICBmcyA9IDA7CisrICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgIHsKKysgICAgICAgICBmcy0+cCA9IGZzLT5idWY7CisrICAgICAgICAgZnMtPmVuZCA9IGZzLT5idWYgKyBJTklUX0JVRl9TSVpFOworKyAgICAgICB9CisrICAgIH0KKysKKysgIHJldHVybiBmczsKKyt9CisrI2lmIDAKKysvKiBOb3QgZXhwb3J0ZWQuICAqLworKyNpZmRlZiB3ZWFrX2FsaWFzCisrd2Vha19hbGlhcyAoX19hcmdwX21ha2VfZm10c3RyZWFtLCBhcmdwX21ha2VfZm10c3RyZWFtKQorKyNlbmRpZgorKyNlbmRpZgorKworKy8qIEZsdXNoIEZTIHRvIGl0cyBzdHJlYW0sIGFuZCBmcmVlIGl0IChidXQgZG9uJ3QgY2xvc2UgdGhlIHN0cmVhbSkuICAqLworK3ZvaWQKKytfX2FyZ3BfZm10c3RyZWFtX2ZyZWUgKGFyZ3BfZm10c3RyZWFtX3QgZnMpCisreworKyAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKGZzKTsKKysgIGlmIChmcy0+cCA+IGZzLT5idWYpCisrICAgIHsKKysjaWZkZWYgVVNFX0lOX0xJQklPCisrICAgICAgX19meHByaW50ZiAoZnMtPnN0cmVhbSwgIiUuKnMiLCAoaW50KSAoZnMtPnAgLSBmcy0+YnVmKSwgZnMtPmJ1Zik7CisrI2Vsc2UKKysgICAgICBmd3JpdGVfdW5sb2NrZWQgKGZzLT5idWYsIDEsIGZzLT5wIC0gZnMtPmJ1ZiwgZnMtPnN0cmVhbSk7CisrI2VuZGlmCisrICAgIH0KKysgIGZyZWUgKGZzLT5idWYpOworKyAgZnJlZSAoZnMpOworK30KKysjaWYgMAorKy8qIE5vdCBleHBvcnRlZC4gICovCisrI2lmZGVmIHdlYWtfYWxpYXMKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX2ZyZWUsIGFyZ3BfZm10c3RyZWFtX2ZyZWUpCisrI2VuZGlmCisrI2VuZGlmCisrCisrLyogUHJvY2VzcyBGUydzIGJ1ZmZlciBzbyB0aGF0IGxpbmUgd3JhcHBpbmcgaXMgZG9uZSBmcm9tIFBPSU5UX09GRlMgdG8gdGhlCisrICAgZW5kIG9mIGl0cyBidWZmZXIuICBUaGlzIGNvZGUgaXMgbW9zdGx5IGZyb20gZ2xpYmMgc3RkaW8vbGluZXdyYXAuYy4gICovCisrdm9pZAorK19fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChhcmdwX2ZtdHN0cmVhbV90IGZzKQorK3sKKysgIGNoYXIgKmJ1ZiwgKm5sOworKyAgc2l6ZV90IGxlbjsKKysKKysgIC8qIFNjYW4gdGhlIGJ1ZmZlciBmb3IgbmV3bGluZXMuICAqLworKyAgYnVmID0gZnMtPmJ1ZiArIGZzLT5wb2ludF9vZmZzOworKyAgd2hpbGUgKGJ1ZiA8IGZzLT5wKQorKyAgICB7CisrICAgICAgc2l6ZV90IHI7CisrCisrICAgICAgaWYgKGZzLT5wb2ludF9jb2wgPT0gMCAmJiBmcy0+bG1hcmdpbiAhPSAwKQorKyAgICAgICB7CisrICAgICAgICAgLyogV2UgYXJlIHN0YXJ0aW5nIGEgbmV3IGxpbmUuICBQcmludCBzcGFjZXMgdG8gdGhlIGxlZnQgbWFyZ2luLiAgKi8KKysgICAgICAgICBjb25zdCBzaXplX3QgcGFkID0gZnMtPmxtYXJnaW47CisrICAgICAgICAgaWYgKGZzLT5wICsgcGFkIDwgZnMtPmVuZCkKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgLyogV2UgY2FuIGZpdCBpbiB0aGVtIGluIHRoZSBidWZmZXIgYnkgbW92aW5nIHRoZQorKyAgICAgICAgICAgICAgICBidWZmZXIgdGV4dCB1cCBhbmQgZmlsbGluZyBpbiB0aGUgYmVnaW5uaW5nLiAgKi8KKysgICAgICAgICAgICAgbWVtbW92ZSAoYnVmICsgcGFkLCBidWYsIGZzLT5wIC0gYnVmKTsKKysgICAgICAgICAgICAgZnMtPnAgKz0gcGFkOyAvKiBDb21wZW5zYXRlIGZvciBiaWdnZXIgYnVmZmVyLiAqLworKyAgICAgICAgICAgICBtZW1zZXQgKGJ1ZiwgJyAnLCBwYWQpOyAvKiBGaWxsIGluIHRoZSBzcGFjZXMuICAqLworKyAgICAgICAgICAgICBidWYgKz0gcGFkOyAvKiBEb24ndCBib3RoZXIgc2VhcmNoaW5nIHRoZW0uICAqLworKyAgICAgICAgICAgfQorKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgLyogTm8gYnVmZmVyIHNwYWNlIGZvciBzcGFjZXMuICBNdXN0IGZsdXNoLiAgKi8KKysgICAgICAgICAgICAgc2l6ZV90IGk7CisrICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYWQ7IGkrKykKKysgICAgICAgICAgICAgICB7CisrI2lmZGVmIFVTRV9JTl9MSUJJTworKyAgICAgICAgICAgICAgICAgaWYgKF9JT19md2lkZSAoZnMtPnN0cmVhbSwgMCkgPiAwKQorKyAgICAgICAgICAgICAgICAgICBwdXR3Y191bmxvY2tlZCAoTCcgJywgZnMtPnN0cmVhbSk7CisrICAgICAgICAgICAgICAgICBlbHNlCisrI2VuZGlmCisrICAgICAgICAgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCcgJywgZnMtPnN0cmVhbSk7CisrICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgfQorKyAgICAgICAgIGZzLT5wb2ludF9jb2wgPSBwYWQ7CisrICAgICAgIH0KKysKKysgICAgICBsZW4gPSBmcy0+cCAtIGJ1ZjsKKysgICAgICBubCA9IG1lbWNociAoYnVmLCAnXG4nLCBsZW4pOworKworKyAgICAgIGlmIChmcy0+cG9pbnRfY29sIDwgMCkKKysgICAgICAgZnMtPnBvaW50X2NvbCA9IDA7CisrCisrICAgICAgaWYgKCFubCkKKysgICAgICAgeworKyAgICAgICAgIC8qIFRoZSBidWZmZXIgZW5kcyBpbiBhIHBhcnRpYWwgbGluZS4gICovCisrCisrICAgICAgICAgaWYgKGZzLT5wb2ludF9jb2wgKyBsZW4gPCBmcy0+cm1hcmdpbikKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgLyogVGhlIHJlbWFpbmluZyBidWZmZXIgdGV4dCBpcyBhIHBhcnRpYWwgbGluZSBhbmQgZml0cworKyAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIG1heGltdW0gbGluZSB3aWR0aC4gIEFkdmFuY2UgcG9pbnQgZm9yIHRoZQorKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIHRvIGJlIHdyaXR0ZW4gYW5kIHN0b3Agc2Nhbm5pbmcuICAqLworKyAgICAgICAgICAgICBmcy0+cG9pbnRfY29sICs9IGxlbjsKKysgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICB9CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgLyogU2V0IHRoZSBlbmQtb2YtbGluZSBwb2ludGVyIGZvciB0aGUgY29kZSBiZWxvdyB0bworKyAgICAgICAgICAgICAgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiAgKi8KKysgICAgICAgICAgIG5sID0gZnMtPnA7CisrICAgICAgIH0KKysgICAgICBlbHNlIGlmIChmcy0+cG9pbnRfY29sICsgKG5sIC0gYnVmKSA8IChzc2l6ZV90KSBmcy0+cm1hcmdpbikKKysgICAgICAgeworKyAgICAgICAgIC8qIFRoZSBidWZmZXIgY29udGFpbnMgYSBmdWxsIGxpbmUgdGhhdCBmaXRzIHdpdGhpbiB0aGUgbWF4aW11bQorKyAgICAgICAgICAgIGxpbmUgd2lkdGguICBSZXNldCBwb2ludCBhbmQgc2NhbiB0aGUgbmV4dCBsaW5lLiAgKi8KKysgICAgICAgICBmcy0+cG9pbnRfY29sID0gMDsKKysgICAgICAgICBidWYgPSBubCArIDE7CisrICAgICAgICAgY29udGludWU7CisrICAgICAgIH0KKysKKysgICAgICAvKiBUaGlzIGxpbmUgaXMgdG9vIGxvbmcuICAqLworKyAgICAgIHIgPSBmcy0+cm1hcmdpbiAtIDE7CisrCisrICAgICAgaWYgKGZzLT53bWFyZ2luIDwgMCkKKysgICAgICAgeworKyAgICAgICAgIC8qIFRydW5jYXRlIHRoZSBsaW5lIGJ5IG92ZXJ3cml0aW5nIHRoZSBleGNlc3Mgd2l0aCB0aGUKKysgICAgICAgICAgICBuZXdsaW5lIGFuZCBhbnl0aGluZyBhZnRlciBpdCBpbiB0aGUgYnVmZmVyLiAgKi8KKysgICAgICAgICBpZiAobmwgPCBmcy0+cCkKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgbWVtbW92ZSAoYnVmICsgKHIgLSBmcy0+cG9pbnRfY29sKSwgbmwsIGZzLT5wIC0gbmwpOworKyAgICAgICAgICAgICBmcy0+cCAtPSBidWYgKyAociAtIGZzLT5wb2ludF9jb2wpIC0gbmw7CisrICAgICAgICAgICAgIC8qIFJlc2V0IHBvaW50IGZvciB0aGUgbmV4dCBsaW5lIGFuZCBzdGFydCBzY2FubmluZyBpdC4gICovCisrICAgICAgICAgICAgIGZzLT5wb2ludF9jb2wgPSAwOworKyAgICAgICAgICAgICBidWYgKz0gciArIDE7IC8qIFNraXAgZnVsbCBsaW5lIHBsdXMgXG4uICovCisrICAgICAgICAgICB9CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICAvKiBUaGUgYnVmZmVyIGVuZHMgd2l0aCBhIHBhcnRpYWwgbGluZSB0aGF0IGlzIGJleW9uZCB0aGUKKysgICAgICAgICAgICAgICAgbWF4aW11bSBsaW5lIHdpZHRoLiAgQWR2YW5jZSBwb2ludCBmb3IgdGhlIGNoYXJhY3RlcnMKKysgICAgICAgICAgICAgICAgd3JpdHRlbiwgYW5kIGRpc2NhcmQgdGhvc2UgcGFzdCB0aGUgbWF4IGZyb20gdGhlIGJ1ZmZlci4gICovCisrICAgICAgICAgICAgIGZzLT5wb2ludF9jb2wgKz0gbGVuOworKyAgICAgICAgICAgICBmcy0+cCAtPSBmcy0+cG9pbnRfY29sIC0gcjsKKysgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICB9CisrICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgIHsKKysgICAgICAgICAvKiBEbyB3b3JkIHdyYXAuICBHbyB0byB0aGUgY29sdW1uIGp1c3QgcGFzdCB0aGUgbWF4aW11bSBsaW5lCisrICAgICAgICAgICAgd2lkdGggYW5kIHNjYW4gYmFjayBmb3IgdGhlIGJlZ2lubmluZyBvZiB0aGUgd29yZCB0aGVyZS4KKysgICAgICAgICAgICBUaGVuIGluc2VydCBhIGxpbmUgYnJlYWsuICAqLworKworKyAgICAgICAgIGNoYXIgKnAsICpuZXh0bGluZTsKKysgICAgICAgICBpbnQgaTsKKysKKysgICAgICAgICBwID0gYnVmICsgKHIgKyAxIC0gZnMtPnBvaW50X2NvbCk7CisrICAgICAgICAgd2hpbGUgKHAgPj0gYnVmICYmICFpc2JsYW5rICgqcCkpCisrICAgICAgICAgICAtLXA7CisrICAgICAgICAgbmV4dGxpbmUgPSBwICsgMTsgICAgIC8qIFRoaXMgd2lsbCBiZWdpbiB0aGUgbmV4dCBsaW5lLiAgKi8KKysKKysgICAgICAgICBpZiAobmV4dGxpbmUgPiBidWYpCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIC8qIFN3YWxsb3cgc2VwYXJhdGluZyBibGFua3MuICAqLworKyAgICAgICAgICAgICBpZiAocCA+PSBidWYpCisrICAgICAgICAgICAgICAgZG8KKysgICAgICAgICAgICAgICAgIC0tcDsKKysgICAgICAgICAgICAgICB3aGlsZSAocCA+PSBidWYgJiYgaXNibGFuayAoKnApKTsKKysgICAgICAgICAgICAgbmwgPSBwICsgMTsgICAgICAgLyogVGhlIG5ld2xpbmUgd2lsbCByZXBsYWNlIHRoZSBmaXJzdCBibGFuay4gKi8KKysgICAgICAgICAgIH0KKysgICAgICAgICBlbHNlCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIC8qIEEgc2luZ2xlIHdvcmQgdGhhdCBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gbGluZSB3aWR0aC4KKysgICAgICAgICAgICAgICAgT2ggd2VsbC4gIFB1dCBpdCBvbiBhbiBvdmVybG9uZyBsaW5lIGJ5IGl0c2VsZi4gICovCisrICAgICAgICAgICAgIHAgPSBidWYgKyAociArIDEgLSBmcy0+cG9pbnRfY29sKTsKKysgICAgICAgICAgICAgLyogRmluZCB0aGUgZW5kIG9mIHRoZSBsb25nIHdvcmQuICAqLworKyAgICAgICAgICAgICBkbworKyAgICAgICAgICAgICAgICsrcDsKKysgICAgICAgICAgICAgd2hpbGUgKHAgPCBubCAmJiAhaXNibGFuayAoKnApKTsKKysgICAgICAgICAgICAgaWYgKHAgPT0gbmwpCisrICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgLyogSXQgYWxyZWFkeSBlbmRzIGEgbGluZS4gIE5vIGZ1c3NpbmcgcmVxdWlyZWQuICAqLworKyAgICAgICAgICAgICAgICAgZnMtPnBvaW50X2NvbCA9IDA7CisrICAgICAgICAgICAgICAgICBidWYgPSBubCArIDE7CisrICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgIC8qIFdlIHdpbGwgbW92ZSB0aGUgbmV3bGluZSB0byByZXBsYWNlIHRoZSBmaXJzdCBibGFuay4gICovCisrICAgICAgICAgICAgIG5sID0gcDsKKysgICAgICAgICAgICAgLyogU3dhbGxvdyBzZXBhcmF0aW5nIGJsYW5rcy4gICovCisrICAgICAgICAgICAgIGRvCisrICAgICAgICAgICAgICAgKytwOworKyAgICAgICAgICAgICB3aGlsZSAoaXNibGFuayAoKnApKTsKKysgICAgICAgICAgICAgLyogVGhlIG5leHQgbGluZSB3aWxsIHN0YXJ0IGhlcmUuICAqLworKyAgICAgICAgICAgICBuZXh0bGluZSA9IHA7CisrICAgICAgICAgICB9CisrCisrICAgICAgICAgLyogTm90ZTogVGhlcmUgYXJlIGEgYnVuY2ggb2YgdGVzdHMgYmVsb3cgZm9yCisrICAgICAgICAgICAgTkVYVExJTkUgPT0gQlVGICsgTEVOICsgMTsgdGhpcyBjYXNlIGlzIHdoZXJlIE5MIGhhcHBlbnMgdG8gZmFsbAorKyAgICAgICAgICAgIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgYW5kIE5FWFRMSU5FIGlzIGluIGZhY3QgZW1wdHkgKGFuZCBzbworKyAgICAgICAgICAgIHdlIG5lZWQgbm90IGJlIGNhcmVmdWwgdG8gbWFpbnRhaW4gaXRzIGNvbnRlbnRzKS4gICovCisrCisrICAgICAgICAgaWYgKChuZXh0bGluZSA9PSBidWYgKyBsZW4gKyAxCisrICAgICAgICAgICAgICA/IGZzLT5lbmQgLSBubCA8IGZzLT53bWFyZ2luICsgMQorKyAgICAgICAgICAgICAgOiBuZXh0bGluZSAtIChubCArIDEpIDwgZnMtPndtYXJnaW4pCisrICAgICAgICAgICAgICYmIGZzLT5wID4gbmV4dGxpbmUpCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIC8qIFRoZSBtYXJnaW4gbmVlZHMgbW9yZSBibGFua3MgdGhhbiB3ZSByZW1vdmVkLiAgKi8KKysgICAgICAgICAgICAgaWYgKGZzLT5lbmQgLSBmcy0+cCA+IGZzLT53bWFyZ2luICsgMSkKKysgICAgICAgICAgICAgICAvKiBNYWtlIHNvbWUgc3BhY2UgZm9yIHRoZW0uICAqLworKyAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgIHNpemVfdCBtdiA9IGZzLT5wIC0gbmV4dGxpbmU7CisrICAgICAgICAgICAgICAgICBtZW1tb3ZlIChubCArIDEgKyBmcy0+d21hcmdpbiwgbmV4dGxpbmUsIG12KTsKKysgICAgICAgICAgICAgICAgIG5leHRsaW5lID0gbmwgKyAxICsgZnMtPndtYXJnaW47CisrICAgICAgICAgICAgICAgICBsZW4gPSBuZXh0bGluZSArIG12IC0gYnVmOworKyAgICAgICAgICAgICAgICAgKm5sKysgPSAnXG4nOworKyAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgIC8qIE91dHB1dCB0aGUgZmlyc3QgbGluZSBzbyB3ZSBjYW4gdXNlIHRoZSBzcGFjZS4gICovCisrICAgICAgICAgICAgICAgeworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrICAgICAgICAgICAgICAgICBfX2Z4cHJpbnRmIChmcy0+c3RyZWFtLCAiJS4qc1xuIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIChubCAtIGZzLT5idWYpLCBmcy0+YnVmKTsKKysjZWxzZQorKyAgICAgICAgICAgICAgICAgaWYgKG5sID4gZnMtPmJ1ZikKKysgICAgICAgICAgICAgICAgICAgZndyaXRlX3VubG9ja2VkIChmcy0+YnVmLCAxLCBubCAtIGZzLT5idWYsIGZzLT5zdHJlYW0pOworKyAgICAgICAgICAgICAgICAgcHV0Y191bmxvY2tlZCAoJ1xuJywgZnMtPnN0cmVhbSk7CisrI2VuZGlmCisrCisrICAgICAgICAgICAgICAgICBsZW4gKz0gYnVmIC0gZnMtPmJ1ZjsKKysgICAgICAgICAgICAgICAgIG5sID0gYnVmID0gZnMtPmJ1ZjsKKysgICAgICAgICAgICAgICB9CisrICAgICAgICAgICB9CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgLyogV2UgY2FuIGZpdCB0aGUgbmV3bGluZSBhbmQgYmxhbmtzIGluIGJlZm9yZQorKyAgICAgICAgICAgICAgdGhlIG5leHQgd29yZC4gICovCisrICAgICAgICAgICAqbmwrKyA9ICdcbic7CisrCisrICAgICAgICAgaWYgKG5leHRsaW5lIC0gbmwgPj0gZnMtPndtYXJnaW4KKysgICAgICAgICAgICAgfHwgKG5leHRsaW5lID09IGJ1ZiArIGxlbiArIDEgJiYgZnMtPmVuZCAtIG5leHRsaW5lID49IGZzLT53bWFyZ2luKSkKKysgICAgICAgICAgIC8qIEFkZCBibGFua3MgdXAgdG8gdGhlIHdyYXAgbWFyZ2luIGNvbHVtbi4gICovCisrICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZnMtPndtYXJnaW47ICsraSkKKysgICAgICAgICAgICAgKm5sKysgPSAnICc7CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZzLT53bWFyZ2luOyArK2kpCisrI2lmZGVmIFVTRV9JTl9MSUJJTworKyAgICAgICAgICAgICBpZiAoX0lPX2Z3aWRlIChmcy0+c3RyZWFtLCAwKSA+IDApCisrICAgICAgICAgICAgICAgcHV0d2NfdW5sb2NrZWQgKEwnICcsIGZzLT5zdHJlYW0pOworKyAgICAgICAgICAgICBlbHNlCisrI2VuZGlmCisrICAgICAgICAgICAgICAgcHV0Y191bmxvY2tlZCAoJyAnLCBmcy0+c3RyZWFtKTsKKysKKysgICAgICAgICAvKiBDb3B5IHRoZSB0YWlsIG9mIHRoZSBvcmlnaW5hbCBidWZmZXIgaW50byB0aGUgY3VycmVudCBidWZmZXIKKysgICAgICAgICAgICBwb3NpdGlvbi4gICovCisrICAgICAgICAgaWYgKG5sIDwgbmV4dGxpbmUpCisrICAgICAgICAgICBtZW1tb3ZlIChubCwgbmV4dGxpbmUsIGJ1ZiArIGxlbiAtIG5leHRsaW5lKTsKKysgICAgICAgICBsZW4gLT0gbmV4dGxpbmUgLSBidWY7CisrCisrICAgICAgICAgLyogQ29udGludWUgdGhlIHNjYW4gb24gdGhlIHJlbWFpbmluZyBsaW5lcyBpbiB0aGUgYnVmZmVyLiAgKi8KKysgICAgICAgICBidWYgPSBubDsKKysKKysgICAgICAgICAvKiBSZXN0b3JlIGJ1ZnAgdG8gaW5jbHVkZSBhbGwgdGhlIHJlbWFpbmluZyB0ZXh0LiAgKi8KKysgICAgICAgICBmcy0+cCA9IG5sICsgbGVuOworKworKyAgICAgICAgIC8qIFJlc2V0IHRoZSBjb3VudGVyIG9mIHdoYXQgaGFzIGJlZW4gb3V0cHV0IHRoaXMgbGluZS4gIElmIHdtYXJnaW4KKysgICAgICAgICAgICBpcyAwLCB3ZSB3YW50IHRvIGF2b2lkIHRoZSBsbWFyZ2luIGdldHRpbmcgYWRkZWQsIHNvIHdlIHNldAorKyAgICAgICAgICAgIHBvaW50X2NvbCB0byBhIG1hZ2ljIHZhbHVlIG9mIC0xIGluIHRoYXQgY2FzZS4gICovCisrICAgICAgICAgZnMtPnBvaW50X2NvbCA9IGZzLT53bWFyZ2luID8gZnMtPndtYXJnaW4gOiAtMTsKKysgICAgICAgfQorKyAgICB9CisrCisrICAvKiBSZW1lbWJlciB0aGF0IHdlJ3ZlIHNjYW5uZWQgYXMgZmFyIGFzIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gICovCisrICBmcy0+cG9pbnRfb2ZmcyA9IGZzLT5wIC0gZnMtPmJ1ZjsKKyt9CisrCisrLyogRW5zdXJlIHRoYXQgRlMgaGFzIHNwYWNlIGZvciBBTU9VTlQgbW9yZSBieXRlcyBpbiBpdHMgYnVmZmVyLCBlaXRoZXIgYnkKKysgICBncm93aW5nIHRoZSBidWZmZXIsIG9yIGJ5IGZsdXNoaW5nIGl0LiAgVHJ1ZSBpcyByZXR1cm5lZCBpZmYgd2Ugc3VjY2VlZC4gKi8KKytpbnQKKytfX2FyZ3BfZm10c3RyZWFtX2Vuc3VyZSAoc3RydWN0IGFyZ3BfZm10c3RyZWFtICpmcywgc2l6ZV90IGFtb3VudCkKKyt7CisrICBpZiAoKHNpemVfdCkgKGZzLT5lbmQgLSBmcy0+cCkgPCBhbW91bnQpCisrICAgIHsKKysgICAgICBzc2l6ZV90IHdyb3RlOworKworKyAgICAgIC8qIEZsdXNoIEZTJ3MgYnVmZmVyLiAgKi8KKysgICAgICBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoZnMpOworKworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrICAgICAgX19meHByaW50ZiAoZnMtPnN0cmVhbSwgIiUuKnMiLCAoaW50KSAoZnMtPnAgLSBmcy0+YnVmKSwgZnMtPmJ1Zik7CisrICAgICAgd3JvdGUgPSBmcy0+cCAtIGZzLT5idWY7CisrI2Vsc2UKKysgICAgICB3cm90ZSA9IGZ3cml0ZV91bmxvY2tlZCAoZnMtPmJ1ZiwgMSwgZnMtPnAgLSBmcy0+YnVmLCBmcy0+c3RyZWFtKTsKKysjZW5kaWYKKysgICAgICBpZiAod3JvdGUgPT0gZnMtPnAgLSBmcy0+YnVmKQorKyAgICAgICB7CisrICAgICAgICAgZnMtPnAgPSBmcy0+YnVmOworKyAgICAgICAgIGZzLT5wb2ludF9vZmZzID0gMDsKKysgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgeworKyAgICAgICAgIGZzLT5wIC09IHdyb3RlOworKyAgICAgICAgIGZzLT5wb2ludF9vZmZzIC09IHdyb3RlOworKyAgICAgICAgIG1lbW1vdmUgKGZzLT5idWYsIGZzLT5idWYgKyB3cm90ZSwgZnMtPnAgLSBmcy0+YnVmKTsKKysgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgfQorKworKyAgICAgIGlmICgoc2l6ZV90KSAoZnMtPmVuZCAtIGZzLT5idWYpIDwgYW1vdW50KQorKyAgICAgICAvKiBHb3R0YSBncm93IHRoZSBidWZmZXIuICAqLworKyAgICAgICB7CisrICAgICAgICAgc2l6ZV90IG9sZF9zaXplID0gZnMtPmVuZCAtIGZzLT5idWY7CisrICAgICAgICAgc2l6ZV90IG5ld19zaXplID0gb2xkX3NpemUgKyBhbW91bnQ7CisrICAgICAgICAgY2hhciAqbmV3X2J1ZjsKKysKKysgICAgICAgICBpZiAobmV3X3NpemUgPCBvbGRfc2l6ZSB8fCAhIChuZXdfYnVmID0gcmVhbGxvYyAoZnMtPmJ1ZiwgbmV3X3NpemUpKSkKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgX19zZXRfZXJybm8gKEVOT01FTSk7CisrICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgICAgfQorKworKyAgICAgICAgIGZzLT5idWYgPSBuZXdfYnVmOworKyAgICAgICAgIGZzLT5lbmQgPSBuZXdfYnVmICsgbmV3X3NpemU7CisrICAgICAgICAgZnMtPnAgPSBmcy0+YnVmOworKyAgICAgICB9CisrICAgIH0KKysKKysgIHJldHVybiAxOworK30KKysKKytzc2l6ZV90CisrX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cnVjdCBhcmdwX2ZtdHN0cmVhbSAqZnMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorK3sKKysgIGludCBvdXQ7CisrICBzaXplX3QgYXZhaWw7CisrICBzaXplX3Qgc2l6ZV9ndWVzcyA9IFBSSU5URl9TSVpFX0dVRVNTOyAvKiBIb3cgbXVjaCBzcGFjZSB0byByZXNlcnZlLiAqLworKworKyAgZG8KKysgICAgeworKyAgICAgIHZhX2xpc3QgYXJnczsKKysKKysgICAgICBpZiAoISBfX2FyZ3BfZm10c3RyZWFtX2Vuc3VyZSAoZnMsIHNpemVfZ3Vlc3MpKQorKyAgICAgICByZXR1cm4gLTE7CisrCisrICAgICAgdmFfc3RhcnQgKGFyZ3MsIGZtdCk7CisrICAgICAgYXZhaWwgPSBmcy0+ZW5kIC0gZnMtPnA7CisrICAgICAgb3V0ID0gX192c25wcmludGYgKGZzLT5wLCBhdmFpbCwgZm10LCBhcmdzKTsKKysgICAgICB2YV9lbmQgKGFyZ3MpOworKyAgICAgIGlmICgoc2l6ZV90KSBvdXQgPj0gYXZhaWwpCisrICAgICAgIHNpemVfZ3Vlc3MgPSBvdXQgKyAxOworKyAgICB9CisrICB3aGlsZSAoKHNpemVfdCkgb3V0ID49IGF2YWlsKTsKKysKKysgIGZzLT5wICs9IG91dDsKKysKKysgIHJldHVybiBvdXQ7CisrfQorKyNpZiAwCisrLyogTm90IGV4cG9ydGVkLiAgKi8KKysjaWZkZWYgd2Vha19hbGlhcworK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmLCBhcmdwX2ZtdHN0cmVhbV9wcmludGYpCisrI2VuZGlmCisrI2VuZGlmCisrCisrI2VuZGlmIC8qICFBUkdQX0ZNVFNUUkVBTV9VU0VfTElORVdSQVAgKi8KK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5oIGIvbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmNhN2M4MzQKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmgKK0BAIC0wLDAgKzEsMzE0IEBACisrLyogV29yZC13cmFwcGluZyBhbmQgbGluZS10cnVuY2F0aW5nIHN0cmVhbXMuCisrICAgQ29weXJpZ2h0IChDKSAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4KKysKKysgICBNb2RpZmllZCBmb3IgdUNsaWJjIGJ5OiBTYWx2YXRvcmUgQ3JvIDxzYWx2YXRvcmUuY3JvIGF0IHN0LmNvbT4KKysqLworKworKy8qIFRoaXMgcGFja2FnZSBlbXVsYXRlcyBnbGliYyBgbGluZV93cmFwX3N0cmVhbScgc2VtYW50aWNzIGZvciBzeXN0ZW1zIHRoYXQKKysgICBkb24ndCBoYXZlIHRoYXQuICBJZiB0aGUgc3lzdGVtIGRvZXMgaGF2ZSBpdCwgaXQgaXMganVzdCBhIHdyYXBwZXIgZm9yCisrICAgdGhhdC4gIFRoaXMgaGVhZGVyIGZpbGUgaXMgb25seSB1c2VkIGludGVybmFsbHkgd2hpbGUgY29tcGlsaW5nIGFyZ3AsIGFuZAorKyAgIHNob3VsZG4ndCBiZSBpbnN0YWxsZWQuICAqLworKworKyNpZm5kZWYgX0FSR1BfRk1UU1RSRUFNX0gKKysjZGVmaW5lIF9BUkdQX0ZNVFNUUkVBTV9ICisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDx1bmlzdGQuaD4KKysKKysjaWZuZGVmIF9fYXR0cmlidXRlX18KKysvKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KKysjIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpIHx8IGRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQorKyMgIGRlZmluZSBfX2F0dHJpYnV0ZV9fKFNwZWMpIC8qIGVtcHR5ICovCisrIyBlbmRpZgorKy8qIFRoZSBfXy1wcm90ZWN0ZWQgdmFyaWFudHMgb2YgYGZvcm1hdCcgYW5kIGBwcmludGYnIGF0dHJpYnV0ZXMKKysgICBhcmUgYWNjZXB0ZWQgYnkgZ2NjIHZlcnNpb25zIDIuNi40IChlZmZlY3RpdmVseSAyLjcpIGFuZCBsYXRlci4gICovCisrIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA3KSB8fCBkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKysjICBkZWZpbmUgX19mb3JtYXRfXyBmb3JtYXQKKysjICBkZWZpbmUgX19wcmludGZfXyBwcmludGYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2lmIDAgLyogdUNsaWJjOiBkaXNhYmxlZCAqLworKyNpZiAgICAoX0xJQkMgLSAwICYmICFkZWZpbmVkIChVU0VfSU5fTElCSU8pKSBcCisrICAgIHx8IChkZWZpbmVkIChfX0dOVV9MSUJSQVJZX18pICYmIGRlZmluZWQgKEhBVkVfTElORVdSQVBfSCkpCisrLyogbGluZV93cmFwX3N0cmVhbSBpcyBhdmFpbGFibGUsIHNvIHVzZSB0aGF0LiAgKi8KKysjZGVmaW5lIEFSR1BfRk1UU1RSRUFNX1VTRV9MSU5FV1JBUAorKyNlbmRpZgorKyNlbHNlCisrLyogbGluZV93cmFwIHN0cmVhbSBOT1QgYXZhaWxhYmxlICovCisrIyB1bmRlZiBBUkdQX0ZNVFNUUkVBTV9VU0VfTElORVdSQVAKKysjZW5kaWYKKysKKysjaWZkZWYgQVJHUF9GTVRTVFJFQU1fVVNFX0xJTkVXUkFQCisrLyogSnVzdCBiZSBhIHNpbXBsZSB3cmFwcGVyIGZvciBsaW5lX3dyYXBfc3RyZWFtOyB0aGUgc2VtYW50aWNzIGFyZQorKyAgICpzbGlnaHRseSogZGlmZmVyZW50LCBhcyBsaW5lX3dyYXBfc3RyZWFtIGRvZXNuJ3QgYWN0dWFsbHkgbWFrZSBhIG5ldworKyAgIG9iamVjdCwgaXQganVzdCBtb2RpZmllcyB0aGUgZ2l2ZW4gc3RyZWFtIChyZXZlcnNpYmx5KSB0byBkbworKyAgIGxpbmUtd3JhcHBpbmcuICBTaW5jZSB3ZSBjb250cm9sIHdobyB1c2VzIHRoaXMgY29kZSwgaXQgZG9lc24ndCBtYXR0ZXIuICAqLworKworKyNpbmNsdWRlIDxsaW5ld3JhcC5oPgorKworK3R5cGVkZWYgRklMRSAqYXJncF9mbXRzdHJlYW1fdDsKKysKKysjZGVmaW5lIGFyZ3BfbWFrZV9mbXRzdHJlYW0gbGluZV93cmFwX3N0cmVhbQorKyNkZWZpbmUgX19hcmdwX21ha2VfZm10c3RyZWFtIGxpbmVfd3JhcF9zdHJlYW0KKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX2ZyZWUgbGluZV91bndyYXBfc3RyZWFtCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX2ZyZWUgbGluZV91bndyYXBfc3RyZWFtCisrCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3B1dGMoZnMsY2gpIHB1dGMoY2gsZnMpCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9wdXRjKGZzLGNoKSBwdXRjKGNoLGZzKQorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9wdXRzKGZzLHN0cikgZnB1dHMoc3RyLGZzKQorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fcHV0cyhmcyxzdHIpIGZwdXRzKHN0cixmcykKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fd3JpdGUoZnMsc3RyLGxlbikgZndyaXRlKHN0ciwxLGxlbixmcykKKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3dyaXRlKGZzLHN0cixsZW4pIGZ3cml0ZShzdHIsMSxsZW4sZnMpCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiBmcHJpbnRmCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9wcmludGYgZnByaW50ZgorKworKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9sbWFyZ2luIGxpbmVfd3JhcF9sbWFyZ2luCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9sbWFyZ2luIGxpbmVfd3JhcF9sbWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIGxpbmVfd3JhcF9zZXRfbG1hcmdpbgorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gbGluZV93cmFwX3NldF9sbWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3JtYXJnaW4gbGluZV93cmFwX3JtYXJnaW4KKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3JtYXJnaW4gbGluZV93cmFwX3JtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4gbGluZV93cmFwX3NldF9ybWFyZ2luCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9zZXRfcm1hcmdpbiBsaW5lX3dyYXBfc2V0X3JtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fd21hcmdpbiBsaW5lX3dyYXBfd21hcmdpbgorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fd21hcmdpbiBsaW5lX3dyYXBfd21hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiBsaW5lX3dyYXBfc2V0X3dtYXJnaW4KKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIGxpbmVfd3JhcF9zZXRfd21hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9wb2ludCBsaW5lX3dyYXBfcG9pbnQKKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3BvaW50IGxpbmVfd3JhcF9wb2ludAorKworKyNlbHNlIC8qICFBUkdQX0ZNVFNUUkVBTV9VU0VfTElORVdSQVAgKi8KKysvKiBHdWVzcyB3ZSBoYXZlIHRvIGRlZmluZSBvdXIgb3duIHZlcnNpb24uICAqLworKworKyNpZm5kZWYgX19jb25zdAorKyNkZWZpbmUgX19jb25zdCBjb25zdAorKyNlbmRpZgorKworK3N0cnVjdCBhcmdwX2ZtdHN0cmVhbQorK3sKKysgIEZJTEUgKnN0cmVhbTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgc3RyZWFtIHdlJ3JlIG91dHB1dHRpbmcgdG8uICAqLworKworKyAgc2l6ZV90IGxtYXJnaW4sIHJtYXJnaW47ICAgICAvKiBMZWZ0IGFuZCByaWdodCBtYXJnaW5zLiAgKi8KKysgIHNzaXplX3Qgd21hcmdpbjsgICAgICAgICAgICAgLyogTWFyZ2luIHRvIHdyYXAgdG8sIG9yIC0xIHRvIHRydW5jYXRlLiAgKi8KKysKKysgIC8qIFBvaW50IGluIGJ1ZmZlciB0byB3aGljaCB3ZSd2ZSBwcm9jZXNzZWQgZm9yIHdyYXBwaW5nLCBidXQgbm90IG91dHB1dC4gICovCisrICBzaXplX3QgcG9pbnRfb2ZmczsKKysgIC8qIE91dHB1dCBjb2x1bW4gYXQgUE9JTlRfT0ZGUywgb3IgLTEgbWVhbmluZyAwIGJ1dCBkb24ndCBhZGQgbG1hcmdpbi4gICovCisrICBzc2l6ZV90IHBvaW50X2NvbDsKKysKKysgIGNoYXIgKmJ1ZjsgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IGJ1ZmZlci4gICovCisrICBjaGFyICpwOyAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgZW5kIG9mIHRleHQgaW4gQlVGLiAqLworKyAgY2hhciAqZW5kOyAgICAgICAgICAgICAgICAgICAvKiBBYnNvbHV0ZSBlbmQgb2YgQlVGLiAgKi8KKyt9OworKworK3R5cGVkZWYgc3RydWN0IGFyZ3BfZm10c3RyZWFtICphcmdwX2ZtdHN0cmVhbV90OworKworKy8qIFJldHVybiBhbiBhcmdwX2ZtdHN0cmVhbSB0aGF0IG91dHB1dHMgdG8gU1RSRUFNLCBhbmQgd2hpY2ggcHJlZml4ZXMgbGluZXMKKysgICB3cml0dGVuIG9uIGl0IHdpdGggTE1BUkdJTiBzcGFjZXMgYW5kIGxpbWl0cyB0aGVtIHRvIFJNQVJHSU4gY29sdW1ucworKyAgIHRvdGFsLiAgSWYgV01BUkdJTiA+PSAwLCB3b3JkcyB0aGF0IGV4dGVuZCBwYXN0IFJNQVJHSU4gYXJlIHdyYXBwZWQgYnkKKysgICByZXBsYWNpbmcgdGhlIHdoaXRlc3BhY2UgYmVmb3JlIHRoZW0gd2l0aCBhIG5ld2xpbmUgYW5kIFdNQVJHSU4gc3BhY2VzLgorKyAgIE90aGVyd2lzZSwgY2hhcnMgYmV5b25kIFJNQVJHSU4gYXJlIHNpbXBseSBkcm9wcGVkIHVudGlsIGEgbmV3bGluZS4KKysgICBSZXR1cm5zIE5VTEwgaWYgdGhlcmUgd2FzIGFuIGVycm9yLiAgKi8KKytleHRlcm4gYXJncF9mbXRzdHJlYW1fdCBfX2FyZ3BfbWFrZV9mbXRzdHJlYW0gKEZJTEUgKl9fc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sbWFyZ2luLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ybWFyZ2luLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IF9fd21hcmdpbik7CisrZXh0ZXJuIGFyZ3BfZm10c3RyZWFtX3QgYXJncF9tYWtlX2ZtdHN0cmVhbSAoRklMRSAqX19zdHJlYW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sbWFyZ2luLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fcm1hcmdpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgX193bWFyZ2luKTsKKysKKysvKiBGbHVzaCBfX0ZTIHRvIGl0cyBzdHJlYW0sIGFuZCBmcmVlIGl0IChidXQgZG9uJ3QgY2xvc2UgdGhlIHN0cmVhbSkuICAqLworK2V4dGVybiB2b2lkIF9fYXJncF9mbXRzdHJlYW1fZnJlZSAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzKTsKKytleHRlcm4gdm9pZCBhcmdwX2ZtdHN0cmVhbV9mcmVlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMpOworKworK2V4dGVybiBzc2l6ZV90IF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZm10LCAuLi4pCisrICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAocHJpbnRmLCAyLCAzKSkpOworK2V4dGVybiBzc2l6ZV90IGFyZ3BfZm10c3RyZWFtX3ByaW50ZiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZm10LCAuLi4pCisrICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAocHJpbnRmLCAyLCAzKSkpOworKworK2V4dGVybiBpbnQgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIGludCBfX2NoKTsKKytleHRlcm4gaW50IGFyZ3BfZm10c3RyZWFtX3B1dGMgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgaW50IF9fY2gpOworKworK2V4dGVybiBpbnQgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIF9fY29uc3QgY2hhciAqX19zdHIpOworK2V4dGVybiBpbnQgYXJncF9mbXRzdHJlYW1fcHV0cyAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBfX2NvbnN0IGNoYXIgKl9fc3RyKTsKKysKKytleHRlcm4gc2l6ZV90IF9fYXJncF9mbXRzdHJlYW1fd3JpdGUgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3N0ciwgc2l6ZV90IF9fbGVuKTsKKytleHRlcm4gc2l6ZV90IGFyZ3BfZm10c3RyZWFtX3dyaXRlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fc3RyLCBzaXplX3QgX19sZW4pOworKworKy8qIEFjY2VzcyBtYWNyb3MgZm9yIHZhcmlvdXMgYml0cyBvZiBzdGF0ZS4gICovCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9sbWFyZ2luKF9fZnMpICgoX19mcyktPmxtYXJnaW4pCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9ybWFyZ2luKF9fZnMpICgoX19mcyktPnJtYXJnaW4pCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV93bWFyZ2luKF9fZnMpICgoX19mcyktPndtYXJnaW4pCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX2xtYXJnaW4gYXJncF9mbXRzdHJlYW1fbG1hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9ybWFyZ2luIGFyZ3BfZm10c3RyZWFtX3JtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fd21hcmdpbiBhcmdwX2ZtdHN0cmVhbV93bWFyZ2luCisrCisrLyogU2V0IF9fRlMncyBsZWZ0IG1hcmdpbiB0byBMTUFSR0lOIGFuZCByZXR1cm4gdGhlIG9sZCB2YWx1ZS4gICovCisrZXh0ZXJuIHNpemVfdCBhcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbG1hcmdpbik7CisrZXh0ZXJuIHNpemVfdCBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xtYXJnaW4pOworKworKy8qIFNldCBfX0ZTJ3MgcmlnaHQgbWFyZ2luIHRvIF9fUk1BUkdJTiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuICAqLworK2V4dGVybiBzaXplX3QgYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3JtYXJnaW4pOworK2V4dGVybiBzaXplX3QgX19hcmdwX2ZtdHN0cmVhbV9zZXRfcm1hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ybWFyZ2luKTsKKysKKysvKiBTZXQgX19GUydzIHdyYXAgbWFyZ2luIHRvIF9fV01BUkdJTiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuICAqLworK2V4dGVybiBzaXplX3QgYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3dtYXJnaW4pOworK2V4dGVybiBzaXplX3QgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX193bWFyZ2luKTsKKysKKysvKiBSZXR1cm4gdGhlIGNvbHVtbiBudW1iZXIgb2YgdGhlIGN1cnJlbnQgb3V0cHV0IHBvaW50IGluIF9fRlMuICAqLworK2V4dGVybiBzaXplX3QgYXJncF9mbXRzdHJlYW1fcG9pbnQgKGFyZ3BfZm10c3RyZWFtX3QgX19mcyk7CisrZXh0ZXJuIHNpemVfdCBfX2FyZ3BfZm10c3RyZWFtX3BvaW50IChhcmdwX2ZtdHN0cmVhbV90IF9fZnMpOworKworKy8qIEludGVybmFsIHJvdXRpbmVzLiAgKi8KKytleHRlcm4gdm9pZCBfYXJncF9mbXRzdHJlYW1fdXBkYXRlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMpOworK2V4dGVybiB2b2lkIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMpOworK2V4dGVybiBpbnQgX2FyZ3BfZm10c3RyZWFtX2Vuc3VyZSAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBzaXplX3QgX19hbW91bnQpOworK2V4dGVybiBpbnQgX19hcmdwX2ZtdHN0cmVhbV9lbnN1cmUgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgc2l6ZV90IF9fYW1vdW50KTsKKysKKysjaWZkZWYgX19PUFRJTUlaRV9fCisrLyogSW5saW5lIHZlcnNpb25zIG9mIGFib3ZlIHJvdXRpbmVzLiAgKi8KKysKKysjaWYgIV9MSUJDCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgYXJncF9mbXRzdHJlYW1fcHV0YworKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIGFyZ3BfZm10c3RyZWFtX3B1dHMKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fd3JpdGUgYXJncF9mbXRzdHJlYW1fd3JpdGUKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4gYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fcG9pbnQgYXJncF9mbXRzdHJlYW1fcG9pbnQKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIF9hcmdwX2ZtdHN0cmVhbV91cGRhdGUKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fZW5zdXJlIF9hcmdwX2ZtdHN0cmVhbV9lbnN1cmUKKysjZW5kaWYKKysKKysjaWZuZGVmIEFSR1BfRlNfRUkKKysjZGVmaW5lIEFSR1BfRlNfRUkgX19leHRlcm5faW5saW5lCisrI2VuZGlmCisrCisrQVJHUF9GU19FSSBzaXplX3QKKytfX2FyZ3BfZm10c3RyZWFtX3dyaXRlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fc3RyLCBzaXplX3QgX19sZW4pCisreworKyAgaWYgKF9fZnMtPnAgKyBfX2xlbiA8PSBfX2ZzLT5lbmQgfHwgX19hcmdwX2ZtdHN0cmVhbV9lbnN1cmUgKF9fZnMsIF9fbGVuKSkKKysgICAgeworKyAgICAgIG1lbWNweSAoX19mcy0+cCwgX19zdHIsIF9fbGVuKTsKKysgICAgICBfX2ZzLT5wICs9IF9fbGVuOworKyAgICAgIHJldHVybiBfX2xlbjsKKysgICAgfQorKyAgZWxzZQorKyAgICByZXR1cm4gMDsKKyt9CisrCisrQVJHUF9GU19FSSBpbnQKKytfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgX19jb25zdCBjaGFyICpfX3N0cikKKyt7CisrICBzaXplX3QgX19sZW4gPSBzdHJsZW4gKF9fc3RyKTsKKysgIGlmIChfX2xlbikKKysgICAgeworKyAgICAgIHNpemVfdCBfX3dyb3RlID0gX19hcmdwX2ZtdHN0cmVhbV93cml0ZSAoX19mcywgX19zdHIsIF9fbGVuKTsKKysgICAgICByZXR1cm4gX193cm90ZSA9PSBfX2xlbiA/IDAgOiAtMTsKKysgICAgfQorKyAgZWxzZQorKyAgICByZXR1cm4gMDsKKyt9CisrCisrQVJHUF9GU19FSSBpbnQKKytfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgaW50IF9fY2gpCisreworKyAgaWYgKF9fZnMtPnAgPCBfX2ZzLT5lbmQgfHwgX19hcmdwX2ZtdHN0cmVhbV9lbnN1cmUgKF9fZnMsIDEpKQorKyAgICByZXR1cm4gKl9fZnMtPnArKyA9IF9fY2g7CisrICBlbHNlCisrICAgIHJldHVybiBFT0Y7CisrfQorKworKy8qIFNldCBfX0ZTJ3MgbGVmdCBtYXJnaW4gdG8gX19MTUFSR0lOIGFuZCByZXR1cm4gdGhlIG9sZCB2YWx1ZS4gICovCisrQVJHUF9GU19FSSBzaXplX3QKKytfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIHNpemVfdCBfX2xtYXJnaW4pCisreworKyAgc2l6ZV90IF9fb2xkOworKyAgaWYgKChzaXplX3QpIChfX2ZzLT5wIC0gX19mcy0+YnVmKSA+IF9fZnMtPnBvaW50X29mZnMpCisrICAgIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChfX2ZzKTsKKysgIF9fb2xkID0gX19mcy0+bG1hcmdpbjsKKysgIF9fZnMtPmxtYXJnaW4gPSBfX2xtYXJnaW47CisrICByZXR1cm4gX19vbGQ7CisrfQorKworKy8qIFNldCBfX0ZTJ3MgcmlnaHQgbWFyZ2luIHRvIF9fUk1BUkdJTiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuICAqLworK0FSR1BfRlNfRUkgc2l6ZV90CisrX19hcmdwX2ZtdHN0cmVhbV9zZXRfcm1hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBzaXplX3QgX19ybWFyZ2luKQorK3sKKysgIHNpemVfdCBfX29sZDsKKysgIGlmICgoc2l6ZV90KSAoX19mcy0+cCAtIF9fZnMtPmJ1ZikgPiBfX2ZzLT5wb2ludF9vZmZzKQorKyAgICBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoX19mcyk7CisrICBfX29sZCA9IF9fZnMtPnJtYXJnaW47CisrICBfX2ZzLT5ybWFyZ2luID0gX19ybWFyZ2luOworKyAgcmV0dXJuIF9fb2xkOworK30KKysKKysvKiBTZXQgRlMncyB3cmFwIG1hcmdpbiB0byBfX1dNQVJHSU4gYW5kIHJldHVybiB0aGUgb2xkIHZhbHVlLiAgKi8KKytBUkdQX0ZTX0VJIHNpemVfdAorK19fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgc2l6ZV90IF9fd21hcmdpbikKKyt7CisrICBzaXplX3QgX19vbGQ7CisrICBpZiAoKHNpemVfdCkgKF9fZnMtPnAgLSBfX2ZzLT5idWYpID4gX19mcy0+cG9pbnRfb2ZmcykKKysgICAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKF9fZnMpOworKyAgX19vbGQgPSBfX2ZzLT53bWFyZ2luOworKyAgX19mcy0+d21hcmdpbiA9IF9fd21hcmdpbjsKKysgIHJldHVybiBfX29sZDsKKyt9CisrCisrLyogUmV0dXJuIHRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoZSBjdXJyZW50IG91dHB1dCBwb2ludCBpbiBfX0ZTLiAgKi8KKytBUkdQX0ZTX0VJIHNpemVfdAorK19fYXJncF9mbXRzdHJlYW1fcG9pbnQgKGFyZ3BfZm10c3RyZWFtX3QgX19mcykKKyt7CisrICBpZiAoKHNpemVfdCkgKF9fZnMtPnAgLSBfX2ZzLT5idWYpID4gX19mcy0+cG9pbnRfb2ZmcykKKysgICAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKF9fZnMpOworKyAgcmV0dXJuIF9fZnMtPnBvaW50X2NvbCA+PSAwID8gX19mcy0+cG9pbnRfY29sIDogMDsKKyt9CisrCisrI2lmICFfTElCQworKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX3B1dGMKKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV9wdXRzCisrI3VuZGVmIF9fYXJncF9mbXRzdHJlYW1fd3JpdGUKKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbgorKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luCisrI3VuZGVmIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4KKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV9wb2ludAorKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZQorKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX2Vuc3VyZQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBfX09QVElNSVpFX18gKi8KKysKKysjZW5kaWYgLyogQVJHUF9GTVRTVFJFQU1fVVNFX0xJTkVXUkFQICovCisrCisrI2VuZGlmIC8qIGFyZ3AtZm10c3RyZWFtLmggKi8KK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLWZzLXhpbmwuYyBiL2xpYnVhcmdwL2FyZ3AtZnMteGlubC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNDczY2JiZAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvYXJncC1mcy14aW5sLmMKK0BAIC0wLDAgKzEsNDQgQEAKKysvKiBSZWFsIGRlZmluaXRpb25zIGZvciBleHRlcm4gaW5saW5lIGZ1bmN0aW9ucyBpbiBhcmdwLWZtdHN0cmVhbS5oCisrICAgQ29weXJpZ2h0IChDKSAxOTk3LCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNkZWZpbmUgQVJHUF9GU19FSQorKyN1bmRlZiBfX09QVElNSVpFX18KKysjZGVmaW5lIF9fT1BUSU1JWkVfXyAxCisrI2luY2x1ZGUgImFyZ3AtZm10c3RyZWFtLmgiCisrCisrI2lmIDAKKysvKiBOb3QgZXhwb3J0ZWQuICAqLworKy8qIEFkZCB3ZWFrIGFsaWFzZXMuICAqLworKyNpZiBfTElCQyAtIDAgJiYgIWRlZmluZWQgKEFSR1BfRk1UU1RSRUFNX1VTRV9MSU5FV1JBUCkgJiYgZGVmaW5lZCAod2Vha19hbGlhcykKKysKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX3B1dGMsIGFyZ3BfZm10c3RyZWFtX3B1dGMpCisrd2Vha19hbGlhcyAoX19hcmdwX2ZtdHN0cmVhbV9wdXRzLCBhcmdwX2ZtdHN0cmVhbV9wdXRzKQorK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fd3JpdGUsIGFyZ3BfZm10c3RyZWFtX3dyaXRlKQorK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4sIGFyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luKQorK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4sIGFyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luKQorK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4sIGFyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luKQorK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fcG9pbnQsIGFyZ3BfZm10c3RyZWFtX3BvaW50KQorKworKyNlbmRpZgorKyNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtaGVscC5jIGIvbGlidWFyZ3AvYXJncC1oZWxwLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41OGE1ZTZlCistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLWhlbHAuYworQEAgLTAsMCArMSwxODgyIEBACisrLyogSGllcmFyY2hpYWwgYXJndW1lbnQgcGFyc2luZyBoZWxwIG91dHB1dAorKyAgIENvcHlyaWdodCAoQykgMTk5NS0yMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3CisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLgorKworKyAgIE1vZGlmaWVkIGZvciB1Q2xpYmMgYnk6IFNhbHZhdG9yZSBDcm8gPHNhbHZhdG9yZS5jcm8gYXQgc3QuY29tPgorKyovCisrCisrI2lmbmRlZiBfR05VX1NPVVJDRQorKyMgZGVmaW5lIF9HTlVfU09VUkNFICAgMQorKyNlbmRpZgorKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKy8qIEFJWCByZXF1aXJlcyB0aGlzIHRvIGJlIHRoZSBmaXJzdCB0aGluZyBpbiB0aGUgZmlsZS4gICovCisrI2lmbmRlZiBfX0dOVUNfXworKyMgaWYgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCisrIyAgaW5jbHVkZSA8YWxsb2NhLmg+CisrIyBlbHNlCisrIyAgaWZkZWYgX0FJWAorKyNwcmFnbWEgYWxsb2NhCisrIyAgZWxzZQorKyMgICBpZm5kZWYgYWxsb2NhIC8qIHByZWRlZmluZWQgYnkgSFAgY2MgK09saWJjYWxscyAqLworK2NoYXIgKmFsbG9jYSAoKTsKKysjICAgZW5kaWYKKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmbmRlZiBfCisrLyogVGhpcyBpcyBmb3Igb3RoZXIgR05VIGRpc3RyaWJ1dGlvbnMgd2l0aCBpbnRlcm5hdGlvbmFsaXplZCBtZXNzYWdlcy4gICovCisrIyBpZiAoZGVmaW5lZCBIQVZFX0xJQklOVExfSCB8fCBkZWZpbmVkIF9MSUJDKSAmJiBkZWZpbmVkIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrIyAgaW5jbHVkZSA8bGliaW50bC5oPgorKyMgIGlmZGVmIF9MSUJDCisrIyAgIHVuZGVmIGRnZXR0ZXh0CisrIyAgIGRlZmluZSBkZ2V0dGV4dChkb21haW4sIG1zZ2lkKSBcCisrICBJTlRVU0UoX19kY2dldHRleHQpIChkb21haW4sIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjICBlbmRpZgorKyMgZWxzZQorKyMgIGRlZmluZSBkZ2V0dGV4dChkb21haW4sIG1zZ2lkKSAobXNnaWQpCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpZm5kZWYgX0xJQkMKKysjIGlmIEhBVkVfU1RSRVJST1JfUgorKyMgIGlmICFIQVZFX0RFQ0xfU1RSRVJST1JfUgorK2NoYXIgKnN0cmVycm9yX3IgKGludCBlcnJudW0sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CisrIyAgZW5kaWYKKysjIGVsc2UKKysjICBpZiAhSEFWRV9ERUNMX1NUUkVSUk9SCisrY2hhciAqc3RyZXJyb3IgKGludCBlcnJudW0pOworKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxhcmdwLmg+CisrI2luY2x1ZGUgImFyZ3AtZm10c3RyZWFtLmgiCisrI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrCisrI2lmbmRlZiBTSVpFX01BWAorKyMgZGVmaW5lIFNJWkVfTUFYICgoc2l6ZV90KSAtMSkKKysjZW5kaWYKKysKKysvKiBVc2VyLXNlbGVjdGFibGUgKHVzaW5nIGFuIGVudmlyb25tZW50IHZhcmlhYmxlKSBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisrCisrICAgVGhlc2UgbWF5IGJlIHNwZWNpZmllZCBpbiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYWxsZWQgYEFSR1BfSEVMUF9GTVQnLAorKyAgIHdpdGggYSBjb250ZW50cyBsaWtlOiAgVkFSMT1WQUwxLFZBUjI9VkFMMixCT09MVkFSMixuby1CT09MVkFSMgorKyAgIFdoZXJlIFZBTG4gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuICBUaGUgbGlzdCBvZiB2YXJpYWJsZXMgaXMgaW4gdGhlCisrICAgVVBBUkFNX05BTUVTIHZlY3RvciwgYmVsb3cuICAqLworKworKy8qIERlZmF1bHQgcGFyYW1ldGVycy4gICovCisrI2RlZmluZSBEVVBfQVJHUyAgICAgIDAgICAgICAgICAgICAgICAgLyogVHJ1ZSBpZiBvcHRpb24gYXJndW1lbnQgY2FuIGJlIGR1cGxpY2F0ZWQuICovCisrI2RlZmluZSBEVVBfQVJHU19OT1RFIDEgICAgICAgICAgICAgICAgLyogVHJ1ZSB0byBwcmludCBhIG5vdGUgYWJvdXQgZHVwbGljYXRlIGFyZ3MuICovCisrI2RlZmluZSBTSE9SVF9PUFRfQ09MIDIgICAgICAgICAgICAgICAgLyogY29sdW1uIGluIHdoaWNoIHNob3J0IG9wdGlvbnMgc3RhcnQgKi8KKysjZGVmaW5lIExPTkdfT1BUX0NPTCAgNiAgICAgICAgICAgICAgICAvKiBjb2x1bW4gaW4gd2hpY2ggbG9uZyBvcHRpb25zIHN0YXJ0ICovCisrI2RlZmluZSBET0NfT1BUX0NPTCAgIDIgICAgICAgICAgICAgICAgLyogY29sdW1uIGluIHdoaWNoIGRvYyBvcHRpb25zIHN0YXJ0ICovCisrI2RlZmluZSBPUFRfRE9DX0NPTCAgMjkgICAgICAgICAgICAgICAgLyogY29sdW1uIGluIHdoaWNoIG9wdGlvbiB0ZXh0IHN0YXJ0cyAqLworKyNkZWZpbmUgSEVBREVSX0NPTCAgICAxICAgICAgICAgICAgICAgIC8qIGNvbHVtbiBpbiB3aGljaCBncm91cCBoZWFkZXJzIGFyZSBwcmludGVkICovCisrI2RlZmluZSBVU0FHRV9JTkRFTlQgMTIgICAgICAgICAgICAgICAgLyogaW5kZW50YXRpb24gb2Ygd3JhcHBlZCB1c2FnZSBsaW5lcyAqLworKyNkZWZpbmUgUk1BUkdJTiAgICAgIDc5ICAgICAgICAgICAgICAgIC8qIHJpZ2h0IG1hcmdpbiB1c2VkIGZvciB3cmFwcGluZyAqLworKworKy8qIFVzZXItc2VsZWN0YWJsZSAodXNpbmcgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUpIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KKysgICBUaGV5IG11c3QgYWxsIGJlIG9mIHR5cGUgYGludCcgZm9yIHRoZSBwYXJzaW5nIGNvZGUgdG8gd29yay4gICovCisrc3RydWN0IHVwYXJhbXMKKyt7CisrICAvKiBJZiB0cnVlLCBhcmd1bWVudHMgZm9yIGFuIG9wdGlvbiBhcmUgc2hvd24gd2l0aCBib3RoIHNob3J0IGFuZCBsb25nCisrICAgICBvcHRpb25zLCBldmVuIHdoZW4gYSBnaXZlbiBvcHRpb24gaGFzIGJvdGgsIGUuZy4gYC14IEFSRywgLS1sb25neD1BUkcnLgorKyAgICAgSWYgZmFsc2UsIHRoZW4gaWYgYW4gb3B0aW9uIGhhcyBib3RoLCB0aGUgYXJndW1lbnQgaXMgb25seSBzaG93biB3aXRoCisrICAgICB0aGUgbG9uZyBvbmUsIGUuZy4sIGAteCwgLS1sb25neD1BUkcnLCBhbmQgYSBtZXNzYWdlIGluZGljYXRpbmcgdGhhdAorKyAgICAgdGhpcyByZWFsbHkgbWVhbnMgYm90aCBpcyBwcmludGVkIGJlbG93IHRoZSBvcHRpb25zLiAgKi8KKysgIGludCBkdXBfYXJnczsKKysKKysgIC8qIFRoaXMgaXMgdHJ1ZSBpZiB3aGVuIERVUF9BUkdTIGlzIGZhbHNlLCBhbmQgc29tZSBkdXBsaWNhdGUgYXJndW1lbnRzIGhhdmUKKysgICAgIGJlZW4gc3VwcHJlc3NlZCwgYW4gZXhwbGFuYXRvcnkgbWVzc2FnZSBzaG91bGQgYmUgcHJpbnRlZC4gICovCisrICBpbnQgZHVwX2FyZ3Nfbm90ZTsKKysKKysgIC8qIFZhcmlvdXMgb3V0cHV0IGNvbHVtbnMuICAqLworKyAgaW50IHNob3J0X29wdF9jb2w7CisrICBpbnQgbG9uZ19vcHRfY29sOworKyAgaW50IGRvY19vcHRfY29sOworKyAgaW50IG9wdF9kb2NfY29sOworKyAgaW50IGhlYWRlcl9jb2w7CisrICBpbnQgdXNhZ2VfaW5kZW50OworKyAgaW50IHJtYXJnaW47CisrfTsKKysKKysvKiBUaGlzIGlzIGEgZ2xvYmFsIHZhcmlhYmxlLCBhcyB1c2VyIG9wdGlvbnMgYXJlIG9ubHkgZXZlciByZWFkIG9uY2UuICAqLworK3N0YXRpYyBzdHJ1Y3QgdXBhcmFtcyB1cGFyYW1zID0geworKyAgRFVQX0FSR1MsIERVUF9BUkdTX05PVEUsCisrICBTSE9SVF9PUFRfQ09MLCBMT05HX09QVF9DT0wsIERPQ19PUFRfQ09MLCBPUFRfRE9DX0NPTCwgSEVBREVSX0NPTCwKKysgIFVTQUdFX0lOREVOVCwgUk1BUkdJTgorK307CisrCisrLyogQSBwYXJ0aWN1bGFyIHVwYXJhbSwgYW5kIHdoYXQgdGhlIHVzZXIgbmFtZSBpcy4gICovCisrc3RydWN0IHVwYXJhbV9uYW1lCisreworKyAgY29uc3QgY2hhciBuYW1lWzE0XTsgICAgICAgICAvKiBVc2VyIG5hbWUuICAqLworKyAgYm9vbCBpc19ib29sOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdoZXRoZXIgaXQncyBgYm9vbGVhbicuICAqLworKyAgdWludDhfdCB1cGFyYW1zX29mZnM7ICAgICAgICAgICAgICAgIC8qIExvY2F0aW9uIG9mIHRoZSAoaW50KSBmaWVsZCBpbiBVUEFSQU1TLiAgKi8KKyt9OworKworKy8qIFRoZSBuYW1lLWZpZWxkIG1hcHBpbmdzIHdlIGtub3cgYWJvdXQuICAqLworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXBhcmFtX25hbWUgdXBhcmFtX25hbWVzW10gPQorK3sKKysgIHsgImR1cC1hcmdzIiwgICAgICAgdHJ1ZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBkdXBfYXJncykgfSwKKysgIHsgImR1cC1hcmdzLW5vdGUiLCAgdHJ1ZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBkdXBfYXJnc19ub3RlKSB9LAorKyAgeyAic2hvcnQtb3B0LWNvbCIsICBmYWxzZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBzaG9ydF9vcHRfY29sKSB9LAorKyAgeyAibG9uZy1vcHQtY29sIiwgICBmYWxzZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBsb25nX29wdF9jb2wpIH0sCisrICB7ICJkb2Mtb3B0LWNvbCIsICAgIGZhbHNlLCBvZmZzZXRvZiAoc3RydWN0IHVwYXJhbXMsIGRvY19vcHRfY29sKSB9LAorKyAgeyAib3B0LWRvYy1jb2wiLCAgICBmYWxzZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBvcHRfZG9jX2NvbCkgfSwKKysgIHsgImhlYWRlci1jb2wiLCAgICAgZmFsc2UsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgaGVhZGVyX2NvbCkgfSwKKysgIHsgInVzYWdlLWluZGVudCIsICAgZmFsc2UsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgdXNhZ2VfaW5kZW50KSB9LAorKyAgeyAicm1hcmdpbiIsICAgICAgICBmYWxzZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBybWFyZ2luKSB9CisrfTsKKysjZGVmaW5lIG51cGFyYW1fbmFtZXMgKHNpemVvZiAodXBhcmFtX25hbWVzKSAvIHNpemVvZiAodXBhcmFtX25hbWVzWzBdKSkKKysKKysvKiBSZWFkIHVzZXIgb3B0aW9ucyBmcm9tIHRoZSBlbnZpcm9ubWVudCwgYW5kIGZpbGwgaW4gVVBBUkFNUyBhcHByb3BpYXRlbHkuICAqLworK3N0YXRpYyB2b2lkCisrZmlsbF9pbl91cGFyYW1zIChjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgY29uc3QgY2hhciAqdmFyID0gZ2V0ZW52ICgiQVJHUF9IRUxQX0ZNVCIpOworKworKyNkZWZpbmUgU0tJUFdTKHApIGRvIHsgd2hpbGUgKGlzc3BhY2UgKCpwKSkgcCsrOyB9IHdoaWxlICgwKTsKKysKKysgIGlmICh2YXIpCisrICAgIC8qIFBhcnNlIHZhci4gKi8KKysgICAgd2hpbGUgKCp2YXIpCisrICAgICAgeworKyAgICAgICBTS0lQV1MgKHZhcik7CisrCisrICAgICAgIGlmIChpc2FscGhhICgqdmFyKSkKKysgICAgICAgICB7CisrICAgICAgICAgICBzaXplX3QgdmFyX2xlbjsKKysgICAgICAgICAgIGNvbnN0IHN0cnVjdCB1cGFyYW1fbmFtZSAqdW47CisrICAgICAgICAgICBpbnQgdW5zcGVjID0gMCwgdmFsID0gMDsKKysgICAgICAgICAgIGNvbnN0IGNoYXIgKmFyZyA9IHZhcjsKKysKKysgICAgICAgICAgIHdoaWxlIChpc2FsbnVtICgqYXJnKSB8fCAqYXJnID09ICctJyB8fCAqYXJnID09ICdfJykKKysgICAgICAgICAgICAgYXJnKys7CisrICAgICAgICAgICB2YXJfbGVuID0gYXJnIC0gdmFyOworKworKyAgICAgICAgICAgU0tJUFdTIChhcmcpOworKworKyAgICAgICAgICAgaWYgKCphcmcgPT0gJ1wwJyB8fCAqYXJnID09ICcsJykKKysgICAgICAgICAgICAgdW5zcGVjID0gMTsKKysgICAgICAgICAgIGVsc2UgaWYgKCphcmcgPT0gJz0nKQorKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgYXJnKys7CisrICAgICAgICAgICAgICAgU0tJUFdTIChhcmcpOworKyAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICBpZiAodW5zcGVjKQorKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgaWYgKHZhclswXSA9PSAnbicgJiYgdmFyWzFdID09ICdvJyAmJiB2YXJbMl0gPT0gJy0nKQorKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICB2YWwgPSAwOworKyAgICAgICAgICAgICAgICAgICB2YXIgKz0gMzsKKysgICAgICAgICAgICAgICAgICAgdmFyX2xlbiAtPSAzOworKyAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgIHZhbCA9IDE7CisrICAgICAgICAgICAgIH0KKysgICAgICAgICAgIGVsc2UgaWYgKGlzZGlnaXQgKCphcmcpKQorKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgdmFsID0gYXRvaSAoYXJnKTsKKysgICAgICAgICAgICAgICB3aGlsZSAoaXNkaWdpdCAoKmFyZykpCisrICAgICAgICAgICAgICAgICBhcmcrKzsKKysgICAgICAgICAgICAgICBTS0lQV1MgKGFyZyk7CisrICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgIHVuID0gdXBhcmFtX25hbWVzOworKyAgICAgICAgICAgc2l6ZV90IHU7CisrICAgICAgICAgICBmb3IgKHUgPSAwOyB1IDwgbnVwYXJhbV9uYW1lczsgKyt1biwgKyt1KQorKyAgICAgICAgICAgICBpZiAoc3RybGVuICh1bi0+bmFtZSkgPT0gdmFyX2xlbgorKyAgICAgICAgICAgICAgICAgJiYgc3RybmNtcCAodmFyLCB1bi0+bmFtZSwgdmFyX2xlbikgPT0gMCkKKysgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICBpZiAodW5zcGVjICYmICF1bi0+aXNfYm9vbCkKKysgICAgICAgICAgICAgICAgICAgYXJncF9mYWlsdXJlIChzdGF0ZSwgMCwgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChzdGF0ZSA9PSBOVUxMID8gTlVMTAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGUtPnJvb3RfYXJncC0+YXJncF9kb21haW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwKKyslLipzOiBBUkdQX0hFTFBfRk1UIHBhcmFtZXRlciByZXF1aXJlcyBhIHZhbHVlIiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSB2YXJfbGVuLCB2YXIpOworKyAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAqKGludCAqKSgoY2hhciAqKSZ1cGFyYW1zICsgdW4tPnVwYXJhbXNfb2ZmcykgPSB2YWw7CisrICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICB9CisrICAgICAgICAgICBpZiAodSA9PSBudXBhcmFtX25hbWVzKQorKyAgICAgICAgICAgICBhcmdwX2ZhaWx1cmUgKHN0YXRlLCAwLCAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdldHRleHQgKHN0YXRlID09IE5VTEwgPyBOVUxMCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGF0ZS0+cm9vdF9hcmdwLT5hcmdwX2RvbWFpbiwgIlwKKyslLipzOiBVbmtub3duIEFSR1BfSEVMUF9GTVQgcGFyYW1ldGVyIiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSB2YXJfbGVuLCB2YXIpOworKworKyAgICAgICAgICAgdmFyID0gYXJnOworKyAgICAgICAgICAgaWYgKCp2YXIgPT0gJywnKQorKyAgICAgICAgICAgICB2YXIrKzsKKysgICAgICAgICB9CisrICAgICAgIGVsc2UgaWYgKCp2YXIpCisrICAgICAgICAgeworKyAgICAgICAgICAgYXJncF9mYWlsdXJlIChzdGF0ZSwgMCwgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAoc3RhdGUgPT0gTlVMTCA/IE5VTEwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGF0ZS0+cm9vdF9hcmdwLT5hcmdwX2RvbWFpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdhcmJhZ2UgaW4gQVJHUF9IRUxQX0ZNVDogJXMiKSwgdmFyKTsKKysgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgIH0KKysgICAgICB9CisrfQorKworKy8qIFJldHVybnMgdHJ1ZSBpZiBPUFQgaGFzbid0IGJlZW4gbWFya2VkIGludmlzaWJsZS4gIFZpc2liaWxpdHkgb25seSBhZmZlY3RzCisrICAgd2hldGhlciBPUFQgaXMgZGlzcGxheWVkIG9yIHVzZWQgaW4gc29ydGluZywgbm90IG9wdGlvbiBzaGFkb3dpbmcuICAqLworKyNkZWZpbmUgb3Zpc2libGUob3B0KSAoISAoKG9wdCktPmZsYWdzICYgT1BUSU9OX0hJRERFTikpCisrCisrLyogUmV0dXJucyB0cnVlIGlmIE9QVCBpcyBhbiBhbGlhcyBmb3IgYW4gZWFybGllciBvcHRpb24uICAqLworKyNkZWZpbmUgb2FsaWFzKG9wdCkgKChvcHQpLT5mbGFncyAmIE9QVElPTl9BTElBUykKKysKKysvKiBSZXR1cm5zIHRydWUgaWYgT1BUIGlzIGFuIGRvY3VtZW50YXRpb24tb25seSBlbnRyeS4gICovCisrI2RlZmluZSBvZG9jKG9wdCkgKChvcHQpLT5mbGFncyAmIE9QVElPTl9ET0MpCisrCisrLyogUmV0dXJucyB0cnVlIGlmIE9QVCBpcyB0aGUgZW5kLW9mLWxpc3QgbWFya2VyIGZvciBhIGxpc3Qgb2Ygb3B0aW9ucy4gICovCisrI2RlZmluZSBvZW5kKG9wdCkgX19vcHRpb25faXNfZW5kIChvcHQpCisrCisrLyogUmV0dXJucyB0cnVlIGlmIE9QVCBoYXMgYSBzaG9ydCBvcHRpb24uICAqLworKyNkZWZpbmUgb3Nob3J0KG9wdCkgX19vcHRpb25faXNfc2hvcnQgKG9wdCkKKysKKysvKgorKyAgIFRoZSBoZWxwIGZvcm1hdCBmb3IgYSBwYXJ0aWN1bGFyIG9wdGlvbiBpcyBsaWtlOgorKworKyAgICAgLXhBUkcsIC15QVJHLCAtLWxvbmcxPUFSRywgLS1sb25nMj1BUkcgICAgICAgIERvY3VtZW50YXRpb24uLi4KKysKKysgICBXaGVyZSBBUkcgd2lsbCBiZSBvbWl0dGVkIGlmIHRoZXJlJ3Mgbm8gYXJndW1lbnQsIGZvciB0aGlzIG9wdGlvbiwgb3IKKysgICB3aWxsIGJlIHN1cnJvdW5kZWQgYnkgIlsiIGFuZCAiXSIgYXBwcm9waWF0ZWx5IGlmIHRoZSBhcmd1bWVudCBpcworKyAgIG9wdGlvbmFsLiAgVGhlIGRvY3VtZW50YXRpb24gc3RyaW5nIGlzIHdvcmQtd3JhcHBlZCBhcHByb3BpYXRlbHksIGFuZCBpZgorKyAgIHRoZSBsaXN0IG9mIG9wdGlvbnMgaXMgbG9uZyBlbm91Z2gsIGl0IHdpbGwgYmUgc3RhcnRlZCBvbiBhIHNlcGFyYXRlIGxpbmUuCisrICAgSWYgdGhlcmUgYXJlIG5vIHNob3J0IG9wdGlvbnMgZm9yIGEgZ2l2ZW4gb3B0aW9uLCB0aGUgZmlyc3QgbG9uZyBvcHRpb24gaXMKKysgICBpbmRlbnRlZCBzbGlnaGx5IGluIGEgd2F5IHRoYXQncyBzdXBwb3NlZCB0byBtYWtlIG1vc3QgbG9uZyBvcHRpb25zIGFwcGVhcgorKyAgIHRvIGJlIGluIGEgc2VwYXJhdGUgY29sdW1uLgorKworKyAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIG91dHB1dCAoZnJvbSBwcyk6CisrCisrICAgICAtcCBQSUQsIC0tcGlkPVBJRCAgICAgICAgICBMaXN0IHRoZSBwcm9jZXNzIFBJRAorKyAgICAgICAgLS1wZ3JwPVBHUlAgICAgICAgICAgICBMaXN0IHByb2Nlc3NlcyBpbiB0aGUgcHJvY2VzcyBncm91cCBQR1JQCisrICAgICAtUCwgLXgsIC0tbm8tcGFyZW50ICAgICAgICBJbmNsdWRlIHByb2Nlc3NlcyB3aXRob3V0IHBhcmVudHMKKysgICAgIC1RLCAtLWFsbC1maWVsZHMgICAgICAgICAgIERvbid0IGVsaWRlIHVudXNhYmxlIGZpZWxkcyAobm9ybWFsbHkgaWYgdGhlcmUncworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb21lIHJlYXNvbiBwcyBjYW4ndCBwcmludCBhIGZpZWxkIGZvciBhbnkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcywgaXQncyByZW1vdmVkIGZyb20gdGhlIG91dHB1dCBlbnRpcmVseSkKKysgICAgIC1yLCAtLXJldmVyc2UsIC0tZ3JhdHVpdG91c2x5LWxvbmctcmV2ZXJzZS1vcHRpb24KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV2ZXJzZSB0aGUgb3JkZXIgb2YgYW55IHNvcnQKKysgICAgICAgIC0tc2Vzc2lvbls9U0lEXSAgICAgICAgQWRkIHRoZSBwcm9jZXNzZXMgZnJvbSB0aGUgc2Vzc2lvbiBTSUQgKHdoaWNoCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIHRoZSBzaWQgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcykKKysKKysgICAgSGVyZSBhcmUgc29tZSBtb3JlIG9wdGlvbnM6CisrICAgICAtZiBaT1QsIC0tZm9vbmx5PVpPVCAgICAgICBHbG9yayBhIGZvb25seQorKyAgICAgLXosIC0temF6YSAgICAgICAgICAgICAgICAgU25pdCBhIHphcgorKworKyAgICAgLT8sIC0taGVscCAgICAgICAgICAgICAgICAgR2l2ZSB0aGlzIGhlbHAgbGlzdAorKyAgICAgICAgLS11c2FnZSAgICAgICAgICAgICAgICBHaXZlIGEgc2hvcnQgdXNhZ2UgbWVzc2FnZQorKyAgICAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgUHJpbnQgcHJvZ3JhbSB2ZXJzaW9uCisrCisrICAgVGhlIHN0cnVjdCBhcmdwX29wdGlvbiBhcnJheSBmb3IgdGhlIGFib3ZlIGNvdWxkIGxvb2sgbGlrZToKKysKKysgICB7CisrICAgICB7InBpZCIsICAgICAgICdwJywgICAgICAiUElEIiwgIDAsICJMaXN0IHRoZSBwcm9jZXNzIFBJRCJ9LAorKyAgICAgeyJwZ3JwIiwgICAgICBPUFRfUEdSUCwgIlBHUlAiLCAwLCAiTGlzdCBwcm9jZXNzZXMgaW4gdGhlIHByb2Nlc3MgZ3JvdXAgUEdSUCJ9LAorKyAgICAgeyJuby1wYXJlbnQiLCAnUCcsICAgICAgICAgICAgICAwLCAgICAgMCwgIkluY2x1ZGUgcHJvY2Vzc2VzIHdpdGhvdXQgcGFyZW50cyJ9LAorKyAgICAgezAsICAgICAgICAgICAneCcsICAgICAgIDAsICAgICBPUFRJT05fQUxJQVN9LAorKyAgICAgeyJhbGwtZmllbGRzIiwnUScsICAgICAgIDAsICAgICAwLCAiRG9uJ3QgZWxpZGUgdW51c2FibGUgZmllbGRzIChub3JtYWxseSIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpZiB0aGVyZSdzIHNvbWUgcmVhc29uIHBzIGNhbid0IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcHJpbnQgYSBmaWVsZCBmb3IgYW55IHByb2Nlc3MsIGl0J3MiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcmVtb3ZlZCBmcm9tIHRoZSBvdXRwdXQgZW50aXJlbHkpIiB9LAorKyAgICAgeyJyZXZlcnNlIiwgICAncicsICAgICAgIDAsICAgICAwLCAiUmV2ZXJzZSB0aGUgb3JkZXIgb2YgYW55IHNvcnQifSwKKysgICAgIHsiZ3JhdHVpdG91c2x5LWxvbmctcmV2ZXJzZS1vcHRpb24iLCAwLCAwLCBPUFRJT05fQUxJQVN9LAorKyAgICAgeyJzZXNzaW9uIiwgICBPUFRfU0VTUywgICJTSUQiLCBPUFRJT05fQVJHX09QVElPTkFMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWRkIHRoZSBwcm9jZXNzZXMgZnJvbSB0aGUgc2Vzc2lvbiIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFNJRCAod2hpY2ggZGVmYXVsdHMgdG8gdGhlIHNpZCBvZiIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRoZSBjdXJyZW50IHByb2Nlc3MpIiB9LAorKworKyAgICAgezAsMCwwLDAsICJIZXJlIGFyZSBzb21lIG1vcmUgb3B0aW9uczoifSwKKysgICAgIHsiZm9vbmx5IiwgJ2YnLCAiWk9UIiwgMCwgIkdsb3JrIGEgZm9vbmx5In0sCisrICAgICB7InphemEiLCAneicsIDAsIDAsICJTbml0IGEgemFyIn0sCisrCisrICAgICB7MH0KKysgICB9CisrCisrICAgTm90ZSB0aGF0IHRoZSBsYXN0IHRocmVlIG9wdGlvbnMgYXJlIGF1dG9tYXRpY2FsbHkgc3VwcGxpZWQgYnkgYXJncF9wYXJzZSwKKysgICB1bmxlc3MgeW91IHRlbGwgaXQgbm90IHRvIHdpdGggQVJHUF9OT19IRUxQLgorKworKyovCisrCisrLyogUmV0dXJucyB0cnVlIGlmIENIIG9jY3VycyBiZXR3ZWVuIEJFRyBhbmQgRU5ELiAgKi8KKytzdGF0aWMgaW50CisrZmluZF9jaGFyIChjaGFyIGNoLCBjaGFyICpiZWcsIGNoYXIgKmVuZCkKKyt7CisrICB3aGlsZSAoYmVnIDwgZW5kKQorKyAgICBpZiAoKmJlZyA9PSBjaCkKKysgICAgICByZXR1cm4gMTsKKysgICAgZWxzZQorKyAgICAgIGJlZysrOworKyAgcmV0dXJuIDA7CisrfQorKworK3N0cnVjdCBob2xfY2x1c3RlcjsgICAgICAgICAgICAvKiBmd2QgZGVjbCAqLworKworK3N0cnVjdCBob2xfZW50cnkKKyt7CisrICAvKiBGaXJzdCBvcHRpb24uICAqLworKyAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQ7CisrICAvKiBOdW1iZXIgb2Ygb3B0aW9ucyAoaW5jbHVkaW5nIGFsaWFzZXMpLiAgKi8KKysgIHVuc2lnbmVkIG51bTsKKysKKysgIC8qIEEgcG9pbnRlcnMgaW50byB0aGUgSE9MJ3Mgc2hvcnRfb3B0aW9ucyBmaWVsZCwgdG8gdGhlIGZpcnN0IHNob3J0IG9wdGlvbgorKyAgICAgbGV0dGVyIGZvciB0aGlzIGVudHJ5LiAgVGhlIG9yZGVyIG9mIHRoZSBjaGFyYWN0ZXJzIGZvbGxvd2luZyB0aGlzIHBvaW50CisrICAgICBjb3JyZXNwb25kcyB0byB0aGUgb3JkZXIgb2Ygb3B0aW9ucyBwb2ludGVkIHRvIGJ5IE9QVCwgYW5kIHRoZXJlIGFyZSBhdAorKyAgICAgbW9zdCBOVU0uICBBIHNob3J0IG9wdGlvbiByZWNvcmRlZCBpbiBhIG9wdGlvbiBmb2xsb3dpbmcgT1BUIGlzIG9ubHkKKysgICAgIHZhbGlkIGlmIGl0IG9jY3VycyBpbiB0aGUgcmlnaHQgcGxhY2UgaW4gU0hPUlRfT1BUSU9OUyAob3RoZXJ3aXNlIGl0J3MKKysgICAgIHByb2JhYmx5IGJlZW4gc2hhZG93ZWQgYnkgc29tZSBvdGhlciBlbnRyeSkuICAqLworKyAgY2hhciAqc2hvcnRfb3B0aW9uczsKKysKKysgIC8qIEVudHJpZXMgYXJlIHNvcnRlZCBieSB0aGVpciBncm91cCBmaXJzdCwgaW4gdGhlIG9yZGVyOgorKyAgICAgICAxLCAyLCAuLi4sIG4sIDAsIC1tLCAuLi4sIC0yLCAtMQorKyAgICAgYW5kIHRoZW4gYWxwaGFiZXRpY2FsbHkgd2l0aGluIGVhY2ggZ3JvdXAuICBUaGUgZGVmYXVsdCBpcyAwLiAgKi8KKysgIGludCBncm91cDsKKysKKysgIC8qIFRoZSBjbHVzdGVyIG9mIG9wdGlvbnMgdGhpcyBlbnRyeSBiZWxvbmdzIHRvLCBvciAwIGlmIG5vbmUuICAqLworKyAgc3RydWN0IGhvbF9jbHVzdGVyICpjbHVzdGVyOworKworKyAgLyogVGhlIGFyZ3AgZnJvbSB3aGljaCB0aGlzIG9wdGlvbiBjYW1lLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwOworK307CisrCisrLyogQSBjbHVzdGVyIG9mIGVudHJpZXMgdG8gcmVmbGVjdCB0aGUgYXJncCB0cmVlIHN0cnVjdHVyZS4gICovCisrc3RydWN0IGhvbF9jbHVzdGVyCisreworKyAgLyogQSBkZXNjcmlwdGl2ZSBoZWFkZXIgcHJpbnRlZCBiZWZvcmUgb3B0aW9ucyBpbiB0aGlzIGNsdXN0ZXIuICAqLworKyAgY29uc3QgY2hhciAqaGVhZGVyOworKworKyAgLyogVXNlZCB0byBvcmRlciBjbHVzdGVycyB3aXRoaW4gdGhlIHNhbWUgZ3JvdXAgd2l0aCB0aGUgc2FtZSBwYXJlbnQsCisrICAgICBhY2NvcmRpbmcgdG8gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgb2NjdXJyZWQgaW4gdGhlIHBhcmVudCBhcmdwJ3MgY2hpbGQKKysgICAgIGxpc3QuICAqLworKyAgaW50IGluZGV4OworKworKyAgLyogSG93IHRvIHNvcnQgdGhpcyBjbHVzdGVyIHdpdGggcmVzcGVjdCB0byBvcHRpb25zIGFuZCBvdGhlciBjbHVzdGVycyBhdCB0aGUKKysgICAgIHNhbWUgZGVwdGggKGNsdXN0ZXJzIGFsd2F5cyBmb2xsb3cgb3B0aW9ucyBpbiB0aGUgc2FtZSBncm91cCkuICAqLworKyAgaW50IGdyb3VwOworKworKyAgLyogVGhlIGNsdXN0ZXIgdG8gd2hpY2ggdGhpcyBjbHVzdGVyIGJlbG9uZ3MsIG9yIDAgaWYgaXQncyBhdCB0aGUgYmFzZQorKyAgICAgbGV2ZWwuICAqLworKyAgc3RydWN0IGhvbF9jbHVzdGVyICpwYXJlbnQ7CisrCisrICAvKiBUaGUgYXJncCBmcm9tIHdoaWNoIHRoaXMgY2x1c3RlciBpcyAoZXZlbnR1YWxseSkgZGVyaXZlZC4gICovCisrICBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncDsKKysKKysgIC8qIFRoZSBkaXN0YW5jZSB0aGlzIGNsdXN0ZXIgaXMgZnJvbSB0aGUgcm9vdC4gICovCisrICBpbnQgZGVwdGg7CisrCisrICAvKiBDbHVzdGVycyBpbiBhIGdpdmVuIGhvbCBhcmUga2VwdCBpbiBhIGxpbmtlZCBsaXN0LCB0byBtYWtlIGZyZWVpbmcgdGhlbQorKyAgICAgcG9zc2libGUuICAqLworKyAgc3RydWN0IGhvbF9jbHVzdGVyICpuZXh0OworK307CisrCisrLyogQSBsaXN0IG9mIG9wdGlvbnMgZm9yIGhlbHAuICAqLworK3N0cnVjdCBob2wKKyt7CisrICAvKiBBbiBhcnJheSBvZiBob2xfZW50cnkncy4gICovCisrICBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyaWVzOworKyAgLyogVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoaXMgaG9sLiAgSWYgdGhpcyBmaWVsZCBpcyB6ZXJvLCB0aGUgb3RoZXJzCisrICAgICBhcmUgdW5kZWZpbmVkLiAgKi8KKysgIHVuc2lnbmVkIG51bV9lbnRyaWVzOworKworKyAgLyogQSBzdHJpbmcgY29udGFpbmluZyBhbGwgc2hvcnQgb3B0aW9ucyBpbiB0aGlzIEhPTC4gIEVhY2ggZW50cnkgY29udGFpbnMKKysgICAgIHBvaW50ZXJzIGludG8gdGhpcyBzdHJpbmcsIHNvIHRoZSBvcmRlciBjYW4ndCBiZSBtZXNzZWQgd2l0aCBibGluZGx5LiAgKi8KKysgIGNoYXIgKnNob3J0X29wdGlvbnM7CisrCisrICAvKiBDbHVzdGVycyBvZiBlbnRyaWVzIGluIHRoaXMgaG9sLiAgKi8KKysgIHN0cnVjdCBob2xfY2x1c3RlciAqY2x1c3RlcnM7CisrfTsKKysKKysvKiBDcmVhdGUgYSBzdHJ1Y3QgaG9sIGZyb20gdGhlIG9wdGlvbnMgaW4gQVJHUC4gIENMVVNURVIgaXMgdGhlCisrICAgaG9sX2NsdXN0ZXIgaW4gd2hpY2ggdGhlc2UgZW50cmllcyBvY2N1ciwgb3IgMCwgaWYgYXQgdGhlIHJvb3QuICAqLworK3N0YXRpYyBzdHJ1Y3QgaG9sICoKKyttYWtlX2hvbCAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsIHN0cnVjdCBob2xfY2x1c3RlciAqY2x1c3RlcikKKyt7CisrICBjaGFyICpzbzsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqbzsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0cyA9IGFyZ3AtPm9wdGlvbnM7CisrICBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeTsKKysgIHVuc2lnbmVkIG51bV9zaG9ydF9vcHRpb25zID0gMDsKKysgIHN0cnVjdCBob2wgKmhvbCA9IG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgaG9sKSk7CisrCisrICBhc3NlcnQgKGhvbCk7CisrCisrICBob2wtPm51bV9lbnRyaWVzID0gMDsKKysgIGhvbC0+Y2x1c3RlcnMgPSAwOworKworKyAgaWYgKG9wdHMpCisrICAgIHsKKysgICAgICBpbnQgY3VyX2dyb3VwID0gMDsKKysKKysgICAgICAvKiBUaGUgZmlyc3Qgb3B0aW9uIG11c3Qgbm90IGJlIGFuIGFsaWFzLiAgKi8KKysgICAgICBhc3NlcnQgKCEgb2FsaWFzIChvcHRzKSk7CisrCisrICAgICAgLyogQ2FsY3VsYXRlIHRoZSBzcGFjZSBuZWVkZWQuICAqLworKyAgICAgIGZvciAobyA9IG9wdHM7ICEgb2VuZCAobyk7IG8rKykKKysgICAgICAgeworKyAgICAgICAgIGlmICghIG9hbGlhcyAobykpCisrICAgICAgICAgICBob2wtPm51bV9lbnRyaWVzKys7CisrICAgICAgICAgaWYgKG9zaG9ydCAobykpCisrICAgICAgICAgICBudW1fc2hvcnRfb3B0aW9ucysrOyAgICAgICAgLyogVGhpcyBpcyBhbiB1cHBlciBib3VuZC4gICovCisrICAgICAgIH0KKysKKysgICAgICBob2wtPmVudHJpZXMgPSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGhvbF9lbnRyeSkgKiBob2wtPm51bV9lbnRyaWVzKTsKKysgICAgICBob2wtPnNob3J0X29wdGlvbnMgPSBtYWxsb2MgKG51bV9zaG9ydF9vcHRpb25zICsgMSk7CisrCisrICAgICAgYXNzZXJ0IChob2wtPmVudHJpZXMgJiYgaG9sLT5zaG9ydF9vcHRpb25zKTsKKysjaWYgU0laRV9NQVggPD0gVUlOVF9NQVgKKysgICAgICBhc3NlcnQgKGhvbC0+bnVtX2VudHJpZXMgPD0gU0laRV9NQVggLyBzaXplb2YgKHN0cnVjdCBob2xfZW50cnkpKTsKKysjZW5kaWYKKysKKysgICAgICAvKiBGaWxsIGluIHRoZSBlbnRyaWVzLiAgKi8KKysgICAgICBzbyA9IGhvbC0+c2hvcnRfb3B0aW9uczsKKysgICAgICBmb3IgKG8gPSBvcHRzLCBlbnRyeSA9IGhvbC0+ZW50cmllczsgISBvZW5kIChvKTsgZW50cnkrKykKKysgICAgICAgeworKyAgICAgICAgIGVudHJ5LT5vcHQgPSBvOworKyAgICAgICAgIGVudHJ5LT5udW0gPSAwOworKyAgICAgICAgIGVudHJ5LT5zaG9ydF9vcHRpb25zID0gc287CisrICAgICAgICAgZW50cnktPmdyb3VwID0gY3VyX2dyb3VwID0KKysgICAgICAgICAgIG8tPmdyb3VwCisrICAgICAgICAgICA/IG8tPmdyb3VwCisrICAgICAgICAgICA6ICgoIW8tPm5hbWUgJiYgIW8tPmtleSkKKysgICAgICAgICAgICAgID8gY3VyX2dyb3VwICsgMQorKyAgICAgICAgICAgICAgOiBjdXJfZ3JvdXApOworKyAgICAgICAgIGVudHJ5LT5jbHVzdGVyID0gY2x1c3RlcjsKKysgICAgICAgICBlbnRyeS0+YXJncCA9IGFyZ3A7CisrCisrICAgICAgICAgZG8KKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgZW50cnktPm51bSsrOworKyAgICAgICAgICAgICBpZiAob3Nob3J0IChvKSAmJiAhIGZpbmRfY2hhciAoby0+a2V5LCBob2wtPnNob3J0X29wdGlvbnMsIHNvKSkKKysgICAgICAgICAgICAgICAvKiBPIGhhcyBhIHZhbGlkIHNob3J0IG9wdGlvbiB3aGljaCBoYXNuJ3QgYWxyZWFkeSBiZWVuIHVzZWQuKi8KKysgICAgICAgICAgICAgICAqc28rKyA9IG8tPmtleTsKKysgICAgICAgICAgICAgbysrOworKyAgICAgICAgICAgfQorKyAgICAgICAgIHdoaWxlICghIG9lbmQgKG8pICYmIG9hbGlhcyAobykpOworKyAgICAgICB9CisrICAgICAgKnNvID0gJ1wwJzsgICAgICAgICAgICAgIC8qIG51bGwgdGVybWluYXRlZCBzbyB3ZSBjYW4gZmluZCB0aGUgbGVuZ3RoICovCisrICAgIH0KKysKKysgIHJldHVybiBob2w7CisrfQorKworKy8qIEFkZCBhIG5ldyBjbHVzdGVyIHRvIEhPTCwgd2l0aCB0aGUgZ2l2ZW4gR1JPVVAgYW5kIEhFQURFUiAodGFrZW4gZnJvbSB0aGUKKysgICBhc3NvY2lhdGVkIGFyZ3AgY2hpbGQgbGlzdCBlbnRyeSksIElOREVYLCBhbmQgUEFSRU5ULCBhbmQgcmV0dXJuIGEgcG9pbnRlcgorKyAgIHRvIGl0LiAgQVJHUCBpcyB0aGUgYXJncCB0aGF0IHRoaXMgY2x1c3RlciByZXN1bHRzIGZyb20uICAqLworK3N0YXRpYyBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKgorK2hvbF9hZGRfY2x1c3RlciAoc3RydWN0IGhvbCAqaG9sLCBpbnQgZ3JvdXAsIGNvbnN0IGNoYXIgKmhlYWRlciwgaW50IGluZGV4LAorKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKnBhcmVudCwgY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3ApCisreworKyAgc3RydWN0IGhvbF9jbHVzdGVyICpjbCA9IG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgaG9sX2NsdXN0ZXIpKTsKKysgIGlmIChjbCkKKysgICAgeworKyAgICAgIGNsLT5ncm91cCA9IGdyb3VwOworKyAgICAgIGNsLT5oZWFkZXIgPSBoZWFkZXI7CisrCisrICAgICAgY2wtPmluZGV4ID0gaW5kZXg7CisrICAgICAgY2wtPnBhcmVudCA9IHBhcmVudDsKKysgICAgICBjbC0+YXJncCA9IGFyZ3A7CisrICAgICAgY2wtPmRlcHRoID0gcGFyZW50ID8gcGFyZW50LT5kZXB0aCArIDEgOiAwOworKworKyAgICAgIGNsLT5uZXh0ID0gaG9sLT5jbHVzdGVyczsKKysgICAgICBob2wtPmNsdXN0ZXJzID0gY2w7CisrICAgIH0KKysgIHJldHVybiBjbDsKKyt9CisrCisrLyogRnJlZSBIT0wgYW5kIGFueSByZXNvdXJjZXMgaXQgdXNlcy4gICovCisrc3RhdGljIHZvaWQKKytob2xfZnJlZSAoc3RydWN0IGhvbCAqaG9sKQorK3sKKysgIHN0cnVjdCBob2xfY2x1c3RlciAqY2wgPSBob2wtPmNsdXN0ZXJzOworKworKyAgd2hpbGUgKGNsKQorKyAgICB7CisrICAgICAgc3RydWN0IGhvbF9jbHVzdGVyICpuZXh0ID0gY2wtPm5leHQ7CisrICAgICAgZnJlZSAoY2wpOworKyAgICAgIGNsID0gbmV4dDsKKysgICAgfQorKworKyAgaWYgKGhvbC0+bnVtX2VudHJpZXMgPiAwKQorKyAgICB7CisrICAgICAgZnJlZSAoaG9sLT5lbnRyaWVzKTsKKysgICAgICBmcmVlIChob2wtPnNob3J0X29wdGlvbnMpOworKyAgICB9CisrCisrICBmcmVlIChob2wpOworK30KKysKKytzdGF0aWMgaW50CisraG9sX2VudHJ5X3Nob3J0X2l0ZXJhdGUgKGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKmVudHJ5LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZ1bmMpKGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkb21haW4sIHZvaWQgKmNvb2tpZSksCisrICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCB2b2lkICpjb29raWUpCisreworKyAgdW5zaWduZWQgbm9wdHM7CisrICBpbnQgdmFsID0gMDsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0LCAqcmVhbCA9IGVudHJ5LT5vcHQ7CisrICBjaGFyICpzbyA9IGVudHJ5LT5zaG9ydF9vcHRpb25zOworKworKyAgZm9yIChvcHQgPSByZWFsLCBub3B0cyA9IGVudHJ5LT5udW07IG5vcHRzID4gMCAmJiAhdmFsOyBvcHQrKywgbm9wdHMtLSkKKysgICAgaWYgKG9zaG9ydCAob3B0KSAmJiAqc28gPT0gb3B0LT5rZXkpCisrICAgICAgeworKyAgICAgICBpZiAoIW9hbGlhcyAob3B0KSkKKysgICAgICAgICByZWFsID0gb3B0OworKyAgICAgICBpZiAob3Zpc2libGUgKG9wdCkpCisrICAgICAgICAgdmFsID0gKCpmdW5jKShvcHQsIHJlYWwsIGRvbWFpbiwgY29va2llKTsKKysgICAgICAgc28rKzsKKysgICAgICB9CisrCisrICByZXR1cm4gdmFsOworK30KKysKKytzdGF0aWMgX19pbmxpbmVfXyBpbnQKKytfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpCisraG9sX2VudHJ5X2xvbmdfaXRlcmF0ZSAoY29uc3Qgc3RydWN0IGhvbF9lbnRyeSAqZW50cnksCisrICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmdW5jKShjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgdm9pZCAqY29va2llKSwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgdm9pZCAqY29va2llKQorK3sKKysgIHVuc2lnbmVkIG5vcHRzOworKyAgaW50IHZhbCA9IDA7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCwgKnJlYWwgPSBlbnRyeS0+b3B0OworKworKyAgZm9yIChvcHQgPSByZWFsLCBub3B0cyA9IGVudHJ5LT5udW07IG5vcHRzID4gMCAmJiAhdmFsOyBvcHQrKywgbm9wdHMtLSkKKysgICAgaWYgKG9wdC0+bmFtZSkKKysgICAgICB7CisrICAgICAgIGlmICghb2FsaWFzIChvcHQpKQorKyAgICAgICAgIHJlYWwgPSBvcHQ7CisrICAgICAgIGlmIChvdmlzaWJsZSAob3B0KSkKKysgICAgICAgICB2YWwgPSAoKmZ1bmMpKG9wdCwgcmVhbCwgZG9tYWluLCBjb29raWUpOworKyAgICAgIH0KKysKKysgIHJldHVybiB2YWw7CisrfQorKworKy8qIEl0ZXJhdG9yIHRoYXQgcmV0dXJucyB0cnVlIGZvciB0aGUgZmlyc3Qgc2hvcnQgb3B0aW9uLiAgKi8KKytzdGF0aWMgX19pbmxpbmVfXyBpbnQKKyt1bnRpbF9zaG9ydCAoY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQsIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCwKKysgICAgICAgICAgICBjb25zdCBjaGFyICpkb21haW4sIHZvaWQgKmNvb2tpZSkKKyt7CisrICByZXR1cm4gb3Nob3J0IChvcHQpID8gb3B0LT5rZXkgOiAwOworK30KKysKKysvKiBSZXR1cm5zIHRoZSBmaXJzdCB2YWxpZCBzaG9ydCBvcHRpb24gaW4gRU5UUlksIG9yIDAgaWYgdGhlcmUgaXMgbm9uZS4gICovCisrc3RhdGljIGNoYXIKKytob2xfZW50cnlfZmlyc3Rfc2hvcnQgKGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKmVudHJ5KQorK3sKKysgIHJldHVybiBob2xfZW50cnlfc2hvcnRfaXRlcmF0ZSAoZW50cnksIHVudGlsX3Nob3J0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hcmdwLT5hcmdwX2RvbWFpbiwgMCk7CisrfQorKworKy8qIFJldHVybnMgdGhlIGZpcnN0IHZhbGlkIGxvbmcgb3B0aW9uIGluIEVOVFJZLCBvciAwIGlmIHRoZXJlIGlzIG5vbmUuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytob2xfZW50cnlfZmlyc3RfbG9uZyAoY29uc3Qgc3RydWN0IGhvbF9lbnRyeSAqZW50cnkpCisreworKyAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQ7CisrICB1bnNpZ25lZCBudW07CisrICBmb3IgKG9wdCA9IGVudHJ5LT5vcHQsIG51bSA9IGVudHJ5LT5udW07IG51bSA+IDA7IG9wdCsrLCBudW0tLSkKKysgICAgaWYgKG9wdC0+bmFtZSAmJiBvdmlzaWJsZSAob3B0KSkKKysgICAgICByZXR1cm4gb3B0LT5uYW1lOworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIFJldHVybnMgdGhlIGVudHJ5IGluIEhPTCB3aXRoIHRoZSBsb25nIG9wdGlvbiBuYW1lIE5BTUUsIG9yIDAgaWYgdGhlcmUgaXMKKysgICBub25lLiAgKi8KKytzdGF0aWMgc3RydWN0IGhvbF9lbnRyeSAqCisraG9sX2ZpbmRfZW50cnkgKHN0cnVjdCBob2wgKmhvbCwgY29uc3QgY2hhciAqbmFtZSkKKyt7CisrICBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeSA9IGhvbC0+ZW50cmllczsKKysgIHVuc2lnbmVkIG51bV9lbnRyaWVzID0gaG9sLT5udW1fZW50cmllczsKKysKKysgIHdoaWxlIChudW1fZW50cmllcy0tID4gMCkKKysgICAgeworKyAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0ID0gZW50cnktPm9wdDsKKysgICAgICB1bnNpZ25lZCBudW1fb3B0cyA9IGVudHJ5LT5udW07CisrCisrICAgICAgd2hpbGUgKG51bV9vcHRzLS0gPiAwKQorKyAgICAgICBpZiAob3B0LT5uYW1lICYmIG92aXNpYmxlIChvcHQpICYmIHN0cmNtcCAob3B0LT5uYW1lLCBuYW1lKSA9PSAwKQorKyAgICAgICAgIHJldHVybiBlbnRyeTsKKysgICAgICAgZWxzZQorKyAgICAgICAgIG9wdCsrOworKworKyAgICAgIGVudHJ5Kys7CisrICAgIH0KKysKKysgIHJldHVybiAwOworK30KKysKKysvKiBJZiBhbiBlbnRyeSB3aXRoIHRoZSBsb25nIG9wdGlvbiBOQU1FIG9jY3VycyBpbiBIT0wsIHNldCBpdCdzIHNwZWNpYWwKKysgICBzb3J0IHBvc2l0aW9uIHRvIEdST1VQLiAgKi8KKytzdGF0aWMgdm9pZAorK2hvbF9zZXRfZ3JvdXAgKHN0cnVjdCBob2wgKmhvbCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGdyb3VwKQorK3sKKysgIHN0cnVjdCBob2xfZW50cnkgKmVudHJ5ID0gaG9sX2ZpbmRfZW50cnkgKGhvbCwgbmFtZSk7CisrICBpZiAoZW50cnkpCisrICAgIGVudHJ5LT5ncm91cCA9IGdyb3VwOworK30KKysKKysvKiBPcmRlciBieSBncm91cDogIDAsIDEsIDIsIC4uLiwgbiwgLW0sIC4uLiwgLTIsIC0xLgorKyAgIEVRIGlzIHdoYXQgdG8gcmV0dXJuIGlmIEdST1VQMSBhbmQgR1JPVVAyIGFyZSB0aGUgc2FtZS4gICovCisrc3RhdGljIGludAorK2dyb3VwX2NtcCAoaW50IGdyb3VwMSwgaW50IGdyb3VwMiwgaW50IGVxKQorK3sKKysgIGlmIChncm91cDEgPT0gZ3JvdXAyKQorKyAgICByZXR1cm4gZXE7CisrICBlbHNlIGlmICgoZ3JvdXAxIDwgMCAmJiBncm91cDIgPCAwKSB8fCAoZ3JvdXAxID49IDAgJiYgZ3JvdXAyID49IDApKQorKyAgICByZXR1cm4gZ3JvdXAxIC0gZ3JvdXAyOworKyAgZWxzZQorKyAgICByZXR1cm4gZ3JvdXAyIC0gZ3JvdXAxOworK30KKysKKysvKiBDb21wYXJlIGNsdXN0ZXJzIENMMSAmIENMMiBieSB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBhcHBlYXIgaW4KKysgICBvdXRwdXQuICAqLworK3N0YXRpYyBpbnQKKytob2xfY2x1c3Rlcl9jbXAgKGNvbnN0IHN0cnVjdCBob2xfY2x1c3RlciAqY2wxLCBjb25zdCBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsMikKKyt7CisrICAvKiBJZiBvbmUgY2x1c3RlciBpcyBkZWVwZXIgdGhhbiB0aGUgb3RoZXIsIHVzZSBpdHMgYW5jZXN0b3IgYXQgdGhlIHNhbWUKKysgICAgIGxldmVsLCBzbyB0aGF0IGZpbmRpbmcgdGhlIGNvbW1vbiBhbmNlc3RvciBpcyBzdHJhaWdodGZvcndhcmQuICAqLworKyAgd2hpbGUgKGNsMS0+ZGVwdGggPiBjbDItPmRlcHRoKQorKyAgICBjbDEgPSBjbDEtPnBhcmVudDsKKysgIHdoaWxlIChjbDItPmRlcHRoID4gY2wxLT5kZXB0aCkKKysgICAgY2wyID0gY2wyLT5wYXJlbnQ7CisrCisrICAvKiBOb3cgcmVkdWNlIGJvdGggY2x1c3RlcnMgdG8gdGhlaXIgYW5jZXN0b3JzIGF0IHRoZSBwb2ludCB3aGVyZSBib3RoIGhhdmUKKysgICAgIGEgY29tbW9uIHBhcmVudDsgdGhlc2UgY2FuIGJlIGRpcmVjdGx5IGNvbXBhcmVkLiAgKi8KKysgIHdoaWxlIChjbDEtPnBhcmVudCAhPSBjbDItPnBhcmVudCkKKysgICAgY2wxID0gY2wxLT5wYXJlbnQsIGNsMiA9IGNsMi0+cGFyZW50OworKworKyAgcmV0dXJuIGdyb3VwX2NtcCAoY2wxLT5ncm91cCwgY2wyLT5ncm91cCwgY2wyLT5pbmRleCAtIGNsMS0+aW5kZXgpOworK30KKysKKysvKiBSZXR1cm4gdGhlIGFuY2VzdG9yIG9mIENMIHRoYXQncyBqdXN0IGJlbG93IHRoZSByb290IChpLmUuLCBoYXMgYSBwYXJlbnQKKysgICBvZiAwKS4gICovCisrc3RhdGljIHN0cnVjdCBob2xfY2x1c3RlciAqCisraG9sX2NsdXN0ZXJfYmFzZSAoc3RydWN0IGhvbF9jbHVzdGVyICpjbCkKKyt7CisrICB3aGlsZSAoY2wtPnBhcmVudCkKKysgICAgY2wgPSBjbC0+cGFyZW50OworKyAgcmV0dXJuIGNsOworK30KKysKKysvKiBSZXR1cm4gdHJ1ZSBpZiBDTDEgaXMgYSBjaGlsZCBvZiBDTDIuICAqLworK3N0YXRpYyBpbnQKKytob2xfY2x1c3Rlcl9pc19jaGlsZCAoY29uc3Qgc3RydWN0IGhvbF9jbHVzdGVyICpjbDEsCisrICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGhvbF9jbHVzdGVyICpjbDIpCisreworKyAgd2hpbGUgKGNsMSAmJiBjbDEgIT0gY2wyKQorKyAgICBjbDEgPSBjbDEtPnBhcmVudDsKKysgIHJldHVybiBjbDEgPT0gY2wyOworK30KKysKKysvKiBHaXZlbiB0aGUgbmFtZSBvZiBhIE9QVElPTl9ET0Mgb3B0aW9uLCBtb2RpZmllcyBOQU1FIHRvIHN0YXJ0IGF0IHRoZSB0YWlsCisrICAgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgY29tcGFyaXNvbnMsIGFuZCByZXR1cm5zIHRydWUgaWZmIGl0IHNob3VsZCBiZQorKyAgIHRyZWF0ZWQgYXMgYSBub24tb3B0aW9uLiAgKi8KKytzdGF0aWMgaW50CisrY2Fub25fZG9jX29wdGlvbiAoY29uc3QgY2hhciAqKm5hbWUpCisreworKyAgaW50IG5vbl9vcHQ7CisrICAvKiBTa2lwIGluaXRpYWwgd2hpdGVzcGFjZS4gICovCisrICB3aGlsZSAoaXNzcGFjZSAoKipuYW1lKSkKKysgICAgKCpuYW1lKSsrOworKyAgLyogRGVjaWRlIHdoZXRoZXIgdGhpcyBsb29rcyBsaWtlIGFuIG9wdGlvbiAobGVhZGluZyBgLScpIG9yIG5vdC4gICovCisrICBub25fb3B0ID0gKCoqbmFtZSAhPSAnLScpOworKyAgLyogU2tpcCB1bnRpbCBwYXJ0IG9mIG5hbWUgdXNlZCBmb3Igc29ydGluZy4gICovCisrICB3aGlsZSAoKipuYW1lICYmICFpc2FsbnVtICgqKm5hbWUpKQorKyAgICAoKm5hbWUpKys7CisrICByZXR1cm4gbm9uX29wdDsKKyt9CisrCisrLyogT3JkZXIgRU5UUlkxICYgRU5UUlkyIGJ5IHRoZSBvcmRlciB3aGljaCB0aGV5IHNob3VsZCBhcHBlYXIgaW4gYSBoZWxwCisrICAgbGlzdGluZy4gICovCisrc3RhdGljIGludAorK2hvbF9lbnRyeV9jbXAgKGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKmVudHJ5MSwKKysgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKmVudHJ5MikKKyt7CisrICAvKiBUaGUgZ3JvdXAgbnVtYmVycyBieSB3aGljaCB0aGUgZW50cmllcyBzaG91bGQgYmUgb3JkZXJlZDsgaWYgZWl0aGVyIGlzCisrICAgICBpbiBhIGNsdXN0ZXIsIHRoZW4gdGhpcyBpcyBqdXN0IHRoZSBncm91cCB3aXRoaW4gdGhlIGNsdXN0ZXIuICAqLworKyAgaW50IGdyb3VwMSA9IGVudHJ5MS0+Z3JvdXAsIGdyb3VwMiA9IGVudHJ5Mi0+Z3JvdXA7CisrCisrICBpZiAoZW50cnkxLT5jbHVzdGVyICE9IGVudHJ5Mi0+Y2x1c3RlcikKKysgICAgeworKyAgICAgIC8qIFRoZSBlbnRyaWVzIGFyZSBub3Qgd2l0aGluIHRoZSBzYW1lIGNsdXN0ZXIsIHNvIHdlIGNhbid0IGNvbXBhcmUgdGhlbQorKyAgICAgICAgZGlyZWN0bHksIHdlIGhhdmUgdG8gdXNlIHRoZSBhcHByb3BpYXRlIGNsdXN0ZXJpbmcgbGV2ZWwgdG9vLiAgKi8KKysgICAgICBpZiAoISBlbnRyeTEtPmNsdXN0ZXIpCisrICAgICAgIC8qIEVOVFJZMSBpcyBhdCB0aGUgYGJhc2UgbGV2ZWwnLCBub3QgaW4gYSBjbHVzdGVyLCBzbyB3ZSBoYXZlIHRvCisrICAgICAgICAgIGNvbXBhcmUgaXQncyBncm91cCBudW1iZXIgd2l0aCB0aGF0IG9mIHRoZSBiYXNlIGNsdXN0ZXIgaW4gd2hpY2gKKysgICAgICAgICAgRU5UUlkyIHJlc2lkZXMuICBOb3RlIHRoYXQgaWYgdGhleSdyZSBpbiB0aGUgc2FtZSBncm91cCwgdGhlCisrICAgICAgICAgIGNsdXN0ZXJlZCBvcHRpb24gYWx3YXlzIGNvbWVzIGxhc3Rlci4gICovCisrICAgICAgIHJldHVybiBncm91cF9jbXAgKGdyb3VwMSwgaG9sX2NsdXN0ZXJfYmFzZSAoZW50cnkyLT5jbHVzdGVyKS0+Z3JvdXAsIC0xKTsKKysgICAgICBlbHNlIGlmICghIGVudHJ5Mi0+Y2x1c3RlcikKKysgICAgICAgLyogTGlrZXdpc2UsIGJ1dCBFTlRSWTIncyBub3QgaW4gYSBjbHVzdGVyLiAgKi8KKysgICAgICAgcmV0dXJuIGdyb3VwX2NtcCAoaG9sX2NsdXN0ZXJfYmFzZSAoZW50cnkxLT5jbHVzdGVyKS0+Z3JvdXAsIGdyb3VwMiwgMSk7CisrICAgICAgZWxzZQorKyAgICAgICAvKiBCb3RoIGVudHJpZXMgYXJlIGluIGNsdXN0ZXJzLCB3ZSBjYW4ganVzdCBjb21wYXJlIHRoZSBjbHVzdGVycy4gICovCisrICAgICAgIHJldHVybiBob2xfY2x1c3Rlcl9jbXAgKGVudHJ5MS0+Y2x1c3RlciwgZW50cnkyLT5jbHVzdGVyKTsKKysgICAgfQorKyAgZWxzZSBpZiAoZ3JvdXAxID09IGdyb3VwMikKKysgICAgLyogVGhlIGVudHJpZXMgYXJlIGJvdGggaW4gdGhlIHNhbWUgY2x1c3RlciBhbmQgZ3JvdXAsIHNvIGNvbXBhcmUgdGhlbQorKyAgICAgICBhbHBoYWJldGljYWxseS4gICovCisrICAgIHsKKysgICAgICBpbnQgc2hvcnQxID0gaG9sX2VudHJ5X2ZpcnN0X3Nob3J0IChlbnRyeTEpOworKyAgICAgIGludCBzaG9ydDIgPSBob2xfZW50cnlfZmlyc3Rfc2hvcnQgKGVudHJ5Mik7CisrICAgICAgaW50IGRvYzEgPSBvZG9jIChlbnRyeTEtPm9wdCk7CisrICAgICAgaW50IGRvYzIgPSBvZG9jIChlbnRyeTItPm9wdCk7CisrICAgICAgY29uc3QgY2hhciAqbG9uZzEgPSBob2xfZW50cnlfZmlyc3RfbG9uZyAoZW50cnkxKTsKKysgICAgICBjb25zdCBjaGFyICpsb25nMiA9IGhvbF9lbnRyeV9maXJzdF9sb25nIChlbnRyeTIpOworKworKyAgICAgIGlmIChkb2MxKQorKyAgICAgICBkb2MxID0gbG9uZzEgIT0gTlVMTCAmJiBjYW5vbl9kb2Nfb3B0aW9uICgmbG9uZzEpOworKyAgICAgIGlmIChkb2MyKQorKyAgICAgICBkb2MyID0gbG9uZzIgIT0gTlVMTCAmJiBjYW5vbl9kb2Nfb3B0aW9uICgmbG9uZzIpOworKworKyAgICAgIGlmIChkb2MxICE9IGRvYzIpCisrICAgICAgIC8qIGBkb2N1bWVudGF0aW9uJyBvcHRpb25zIGFsd2F5cyBmb2xsb3cgbm9ybWFsIG9wdGlvbnMgKG9yCisrICAgICAgICAgIGRvY3VtZW50YXRpb24gb3B0aW9ucyB0aGF0ICpsb29rKiBsaWtlIG5vcm1hbCBvcHRpb25zKS4gICovCisrICAgICAgIHJldHVybiBkb2MxIC0gZG9jMjsKKysgICAgICBlbHNlIGlmICghc2hvcnQxICYmICFzaG9ydDIgJiYgbG9uZzEgJiYgbG9uZzIpCisrICAgICAgIC8qIE9ubHkgbG9uZyBvcHRpb25zLiAgKi8KKysgICAgICAgcmV0dXJuIHN0cmNhc2VjbXAgKGxvbmcxLCBsb25nMik7CisrICAgICAgZWxzZQorKyAgICAgICAvKiBDb21wYXJlIHNob3J0L3Nob3J0LCBsb25nL3Nob3J0LCBzaG9ydC9sb25nLCB1c2luZyB0aGUgZmlyc3QKKysgICAgICAgICAgY2hhcmFjdGVyIG9mIGxvbmcgb3B0aW9ucy4gIEVudHJpZXMgd2l0aG91dCAqYW55KiB2YWxpZAorKyAgICAgICAgICBvcHRpb25zIChzdWNoIGFzIG9wdGlvbnMgd2l0aCBPUFRJT05fSElEREVOIHNldCkgd2lsbCBiZSBwdXQKKysgICAgICAgICAgZmlyc3QsIGJ1dCBhcyB0aGV5J3JlIG5vdCBkaXNwbGF5ZWQsIGl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJlCisrICAgICAgICAgIHRoZXkgYXJlLiAgKi8KKysgICAgICAgeworKyAgICAgICAgIGNoYXIgZmlyc3QxID0gc2hvcnQxID8gc2hvcnQxIDogbG9uZzEgPyAqbG9uZzEgOiAwOworKyAgICAgICAgIGNoYXIgZmlyc3QyID0gc2hvcnQyID8gc2hvcnQyIDogbG9uZzIgPyAqbG9uZzIgOiAwOworKyNpZmRlZiBfdG9sb3dlcgorKyAgICAgICAgIGludCBsb3dlcl9jbXAgPSBfdG9sb3dlciAoZmlyc3QxKSAtIF90b2xvd2VyIChmaXJzdDIpOworKyNlbHNlCisrICAgICAgICAgaW50IGxvd2VyX2NtcCA9IHRvbG93ZXIgKGZpcnN0MSkgLSB0b2xvd2VyIChmaXJzdDIpOworKyNlbmRpZgorKyAgICAgICAgIC8qIENvbXBhcmUgaWdub3JpbmcgY2FzZSwgZXhjZXB0IHdoZW4gdGhlIG9wdGlvbnMgYXJlIGJvdGggdGhlCisrICAgICAgICAgICAgc2FtZSBsZXR0ZXIsIGluIHdoaWNoIGNhc2UgbG93ZXItY2FzZSBhbHdheXMgY29tZXMgZmlyc3QuICAqLworKyAgICAgICAgIHJldHVybiBsb3dlcl9jbXAgPyBsb3dlcl9jbXAgOiBmaXJzdDIgLSBmaXJzdDE7CisrICAgICAgIH0KKysgICAgfQorKyAgZWxzZQorKyAgICAvKiBXaXRoaW4gdGhlIHNhbWUgY2x1c3RlciwgYnV0IG5vdCB0aGUgc2FtZSBncm91cCwgc28ganVzdCBjb21wYXJlCisrICAgICAgIGdyb3Vwcy4gICovCisrICAgIHJldHVybiBncm91cF9jbXAgKGdyb3VwMSwgZ3JvdXAyLCAwKTsKKyt9CisrCisrLyogVmVyc2lvbiBvZiBob2xfZW50cnlfY21wIHdpdGggY29ycmVjdCBzaWduYXR1cmUgZm9yIHFzb3J0LiAgKi8KKytzdGF0aWMgaW50CisraG9sX2VudHJ5X3FjbXAgKGNvbnN0IHZvaWQgKmVudHJ5MV92LCBjb25zdCB2b2lkICplbnRyeTJfdikKKyt7CisrICByZXR1cm4gaG9sX2VudHJ5X2NtcCAoZW50cnkxX3YsIGVudHJ5Ml92KTsKKyt9CisrCisrLyogU29ydCBIT0wgYnkgZ3JvdXAgYW5kIGFscGhhYmV0aWNhbGx5IGJ5IG9wdGlvbiBuYW1lICh3aXRoIHNob3J0IG9wdGlvbnMKKysgICB0YWtpbmcgcHJlY2VkZW5jZSBvdmVyIGxvbmcpLiAgU2luY2UgdGhlIHNvcnRpbmcgaXMgZm9yIGRpc3BsYXkgcHVycG9zZXMKKysgICBvbmx5LCB0aGUgc2hhZG93aW5nIG9mIG9wdGlvbnMgaXNuJ3QgZWZmZWN0ZWQuICAqLworK3N0YXRpYyB2b2lkCisraG9sX3NvcnQgKHN0cnVjdCBob2wgKmhvbCkKKyt7CisrICBpZiAoaG9sLT5udW1fZW50cmllcyA+IDApCisrICAgIHFzb3J0IChob2wtPmVudHJpZXMsIGhvbC0+bnVtX2VudHJpZXMsIHNpemVvZiAoc3RydWN0IGhvbF9lbnRyeSksCisrICAgICAgICAgIGhvbF9lbnRyeV9xY21wKTsKKyt9CisrCisrLyogQXBwZW5kIE1PUkUgdG8gSE9MLCBkZXN0cm95aW5nIE1PUkUgaW4gdGhlIHByb2Nlc3MuICBPcHRpb25zIGluIEhPTCBzaGFkb3cKKysgICBhbnkgaW4gTU9SRSB3aXRoIHRoZSBzYW1lIG5hbWUuICAqLworK3N0YXRpYyB2b2lkCisraG9sX2FwcGVuZCAoc3RydWN0IGhvbCAqaG9sLCBzdHJ1Y3QgaG9sICptb3JlKQorK3sKKysgIHN0cnVjdCBob2xfY2x1c3RlciAqKmNsX2VuZCA9ICZob2wtPmNsdXN0ZXJzOworKworKyAgLyogU3RlYWwgTU9SRSdzIGNsdXN0ZXIgbGlzdCwgYW5kIGFkZCBpdCB0byB0aGUgZW5kIG9mIEhPTCdzLiAgKi8KKysgIHdoaWxlICgqY2xfZW5kKQorKyAgICBjbF9lbmQgPSAmKCpjbF9lbmQpLT5uZXh0OworKyAgKmNsX2VuZCA9IG1vcmUtPmNsdXN0ZXJzOworKyAgbW9yZS0+Y2x1c3RlcnMgPSAwOworKworKyAgLyogTWVyZ2UgZW50cmllcy4gICovCisrICBpZiAobW9yZS0+bnVtX2VudHJpZXMgPiAwKQorKyAgICB7CisrICAgICAgaWYgKGhvbC0+bnVtX2VudHJpZXMgPT0gMCkKKysgICAgICAgeworKyAgICAgICAgIGhvbC0+bnVtX2VudHJpZXMgPSBtb3JlLT5udW1fZW50cmllczsKKysgICAgICAgICBob2wtPmVudHJpZXMgPSBtb3JlLT5lbnRyaWVzOworKyAgICAgICAgIGhvbC0+c2hvcnRfb3B0aW9ucyA9IG1vcmUtPnNob3J0X29wdGlvbnM7CisrICAgICAgICAgbW9yZS0+bnVtX2VudHJpZXMgPSAwOyAgICAgICAgLyogTWFyayBNT1JFJ3MgZmllbGRzIGFzIGludmFsaWQuICAqLworKyAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAvKiBBcHBlbmQgdGhlIGVudHJpZXMgaW4gTU9SRSB0byB0aG9zZSBpbiBIT0wsIHRha2luZyBjYXJlIHRvIG9ubHkgYWRkCisrICAgICAgICAgIG5vbi1zaGFkb3dlZCBTSE9SVF9PUFRJT05TIHZhbHVlcy4gICovCisrICAgICAgIHsKKysgICAgICAgICB1bnNpZ25lZCBsZWZ0OworKyAgICAgICAgIGNoYXIgKnNvLCAqbW9yZV9zbzsKKysgICAgICAgICBzdHJ1Y3QgaG9sX2VudHJ5ICplOworKyAgICAgICAgIHVuc2lnbmVkIG51bV9lbnRyaWVzID0gaG9sLT5udW1fZW50cmllcyArIG1vcmUtPm51bV9lbnRyaWVzOworKyAgICAgICAgIHN0cnVjdCBob2xfZW50cnkgKmVudHJpZXMgPQorKyAgICAgICAgICAgbWFsbG9jIChudW1fZW50cmllcyAqIHNpemVvZiAoc3RydWN0IGhvbF9lbnRyeSkpOworKyAgICAgICAgIHVuc2lnbmVkIGhvbF9zb19sZW4gPSBzdHJsZW4gKGhvbC0+c2hvcnRfb3B0aW9ucyk7CisrICAgICAgICAgY2hhciAqc2hvcnRfb3B0aW9ucyA9CisrICAgICAgICAgICBtYWxsb2MgKGhvbF9zb19sZW4gKyBzdHJsZW4gKG1vcmUtPnNob3J0X29wdGlvbnMpICsgMSk7CisrCisrICAgICAgICAgYXNzZXJ0IChlbnRyaWVzICYmIHNob3J0X29wdGlvbnMpOworKyNpZiBTSVpFX01BWCA8PSBVSU5UX01BWAorKyAgICAgICAgIGFzc2VydCAobnVtX2VudHJpZXMgPD0gU0laRV9NQVggLyBzaXplb2YgKHN0cnVjdCBob2xfZW50cnkpKTsKKysjZW5kaWYKKysKKysgICAgICAgICBtZW1wY3B5IChtZW1wY3B5IChlbnRyaWVzLCBob2wtPmVudHJpZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvbC0+bnVtX2VudHJpZXMgKiBzaXplb2YgKHN0cnVjdCBob2xfZW50cnkpKSwKKysgICAgICAgICAgICAgICAgICAgIG1vcmUtPmVudHJpZXMsCisrICAgICAgICAgICAgICAgICAgICBtb3JlLT5udW1fZW50cmllcyAqIHNpemVvZiAoc3RydWN0IGhvbF9lbnRyeSkpOworKworKyAgICAgICAgIG1lbXBjcHkgKHNob3J0X29wdGlvbnMsIGhvbC0+c2hvcnRfb3B0aW9ucywgaG9sX3NvX2xlbik7CisrCisrICAgICAgICAgLyogRml4IHVwIHRoZSBzaG9ydCBvcHRpb25zIHBvaW50ZXJzIGZyb20gSE9MLiAgKi8KKysgICAgICAgICBmb3IgKGUgPSBlbnRyaWVzLCBsZWZ0ID0gaG9sLT5udW1fZW50cmllczsgbGVmdCA+IDA7IGUrKywgbGVmdC0tKQorKyAgICAgICAgICAgZS0+c2hvcnRfb3B0aW9ucyArPSAoc2hvcnRfb3B0aW9ucyAtIGhvbC0+c2hvcnRfb3B0aW9ucyk7CisrCisrICAgICAgICAgLyogTm93IGFkZCB0aGUgc2hvcnQgb3B0aW9ucyBmcm9tIE1PUkUsIGZpeGluZyB1cCBpdHMgZW50cmllcworKyAgICAgICAgICAgIHRvby4gICovCisrICAgICAgICAgc28gPSBzaG9ydF9vcHRpb25zICsgaG9sX3NvX2xlbjsKKysgICAgICAgICBtb3JlX3NvID0gbW9yZS0+c2hvcnRfb3B0aW9uczsKKysgICAgICAgICBmb3IgKGxlZnQgPSBtb3JlLT5udW1fZW50cmllczsgbGVmdCA+IDA7IGUrKywgbGVmdC0tKQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICBpbnQgb3B0c19sZWZ0OworKyAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdDsKKysKKysgICAgICAgICAgICAgZS0+c2hvcnRfb3B0aW9ucyA9IHNvOworKworKyAgICAgICAgICAgICBmb3IgKG9wdHNfbGVmdCA9IGUtPm51bSwgb3B0ID0gZS0+b3B0OyBvcHRzX2xlZnQ7IG9wdCsrLCBvcHRzX2xlZnQtLSkKKysgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICBpbnQgY2ggPSAqbW9yZV9zbzsKKysgICAgICAgICAgICAgICAgIGlmIChvc2hvcnQgKG9wdCkgJiYgY2ggPT0gb3B0LT5rZXkpCisrICAgICAgICAgICAgICAgICAgIC8qIFRoZSBuZXh0IHNob3J0IG9wdGlvbiBpbiBNT1JFX1NPLCBDSCwgaXMgZnJvbSBPUFQuICAqLworKyAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgaWYgKCEgZmluZF9jaGFyIChjaCwgc2hvcnRfb3B0aW9ucywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X29wdGlvbnMgKyBob2xfc29fbGVuKSkKKysgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBzaG9ydCBvcHRpb24gQ0ggaXNuJ3Qgc2hhZG93ZWQgYnkgSE9MJ3Mgb3B0aW9ucywKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHNvIGFkZCBpdCB0byB0aGUgc3VtLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICpzbysrID0gY2g7CisrICAgICAgICAgICAgICAgICAgICAgbW9yZV9zbysrOworKyAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgfQorKworKyAgICAgICAgICpzbyA9ICdcMCc7CisrCisrICAgICAgICAgZnJlZSAoaG9sLT5lbnRyaWVzKTsKKysgICAgICAgICBmcmVlIChob2wtPnNob3J0X29wdGlvbnMpOworKworKyAgICAgICAgIGhvbC0+ZW50cmllcyA9IGVudHJpZXM7CisrICAgICAgICAgaG9sLT5udW1fZW50cmllcyA9IG51bV9lbnRyaWVzOworKyAgICAgICAgIGhvbC0+c2hvcnRfb3B0aW9ucyA9IHNob3J0X29wdGlvbnM7CisrICAgICAgIH0KKysgICAgfQorKworKyAgaG9sX2ZyZWUgKG1vcmUpOworK30KKysKKysvKiBJbnNlcnRzIGVub3VnaCBzcGFjZXMgdG8gbWFrZSBzdXJlIFNUUkVBTSBpcyBhdCBjb2x1bW4gQ09MLiAgKi8KKytzdGF0aWMgdm9pZAorK2luZGVudF90byAoYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0sIHVuc2lnbmVkIGNvbCkKKyt7CisrICBpbnQgbmVlZGVkID0gY29sIC0gX19hcmdwX2ZtdHN0cmVhbV9wb2ludCAoc3RyZWFtKTsKKysgIHdoaWxlIChuZWVkZWQtLSA+IDApCisrICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnICcpOworK30KKysKKysvKiBPdXRwdXQgdG8gU1RSRUFNIGVpdGhlciBhIHNwYWNlLCBvciBhIG5ld2xpbmUgaWYgdGhlcmUgaXNuJ3Qgcm9vbSBmb3IgYXQKKysgICBsZWFzdCBFTlNVUkUgY2hhcmFjdGVycyBiZWZvcmUgdGhlIHJpZ2h0IG1hcmdpbi4gICovCisrc3RhdGljIHZvaWQKKytzcGFjZSAoYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0sIHNpemVfdCBlbnN1cmUpCisreworKyAgaWYgKF9fYXJncF9mbXRzdHJlYW1fcG9pbnQgKHN0cmVhbSkgKyBlbnN1cmUKKysgICAgICA+PSBfX2FyZ3BfZm10c3RyZWFtX3JtYXJnaW4gKHN0cmVhbSkpCisrICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysgIGVsc2UKKysgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICcgJyk7CisrfQorKworKy8qIElmIHRoZSBvcHRpb24gUkVBTCBoYXMgYW4gYXJndW1lbnQsIHdlIHByaW50IGl0IGluIHVzaW5nIHRoZSBwcmludGYKKysgICBmb3JtYXQgUkVRX0ZNVCBvciBPUFRfRk1UIGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0J3MgYSByZXF1aXJlZCBvcgorKyAgIG9wdGlvbmFsIGFyZ3VtZW50LiAgKi8KKytzdGF0aWMgdm9pZAorK2FyZyAoY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpyZWFsLCBjb25zdCBjaGFyICpyZXFfZm10LCBjb25zdCBjaGFyICpvcHRfZm10LAorKyAgICAgY29uc3QgY2hhciAqZG9tYWluLCBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSkKKyt7CisrICBpZiAocmVhbC0+YXJnKQorKyAgICB7CisrICAgICAgaWYgKHJlYWwtPmZsYWdzICYgT1BUSU9OX0FSR19PUFRJT05BTCkKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgb3B0X2ZtdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChkb21haW4sIHJlYWwtPmFyZykpOworKyAgICAgIGVsc2UKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgcmVxX2ZtdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChkb21haW4sIHJlYWwtPmFyZykpOworKyAgICB9CisrfQorKworKy8qIEhlbHBlciBmdW5jdGlvbnMgZm9yIGhvbF9lbnRyeV9oZWxwLiAgKi8KKysKKysvKiBTdGF0ZSB1c2VkIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIGhvbF9oZWxwLiAgKi8KKytzdHJ1Y3QgaG9sX2hlbHBfc3RhdGUKKyt7CisrICAvKiBQUkVWX0VOVFJZIHNob3VsZCBjb250YWluIHRoZSBwcmV2aW91cyBlbnRyeSBwcmludGVkLCBvciAwLiAgKi8KKysgIHN0cnVjdCBob2xfZW50cnkgKnByZXZfZW50cnk7CisrCisrICAvKiBJZiBhbiBlbnRyeSBpcyBpbiBhIGRpZmZlcmVudCBncm91cCBmcm9tIHRoZSBwcmV2aW91cyBvbmUsIGFuZCBTRVBfR1JPVVBTCisrICAgICBpcyB0cnVlLCB0aGVuIGEgYmxhbmsgbGluZSB3aWxsIGJlIHByaW50ZWQgYmVmb3JlIGFueSBvdXRwdXQuICovCisrICBpbnQgc2VwX2dyb3VwczsKKysKKysgIC8qIFRydWUgaWYgYSBkdXBsaWNhdGUgb3B0aW9uIGFyZ3VtZW50IHdhcyBzdXBwcmVzc2VkIChvbmx5IGV2ZXIgc2V0IGlmCisrICAgICBVUEFSQU1TLmR1cF9hcmdzIGlzIGZhbHNlKS4gICovCisrICBpbnQgc3VwcHJlc3NlZF9kdXBfYXJnOworK307CisrCisrLyogU29tZSBzdGF0ZSB1c2VkIHdoaWxlIHByaW50aW5nIGEgaGVscCBlbnRyeSAodXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoCisrICAgaGVscGVyIGZ1bmN0aW9ucykuICBTZWUgdGhlIGRvYyBmb3IgaG9sX2VudHJ5X2hlbHAgZm9yIG1vcmUgaW5mbywgYXMgbW9zdAorKyAgIG9mIHRoZSBmaWVsZHMgYXJlIGNvcGllZCBmcm9tIGl0cyBhcmd1bWVudHMuICAqLworK3N0cnVjdCBwZW50cnlfc3RhdGUKKyt7CisrICBjb25zdCBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeTsKKysgIGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtOworKyAgc3RydWN0IGhvbF9oZWxwX3N0YXRlICpoaHN0YXRlOworKworKyAgLyogVHJ1ZSBpZiBub3RoaW5nJ3MgYmVlbiBwcmludGVkIHNvIGZhci4gICovCisrICBpbnQgZmlyc3Q7CisrCisrICAvKiBJZiBub24temVybywgdGhlIHN0YXRlIHRoYXQgd2FzIHVzZWQgdG8gcHJpbnQgdGhpcyBoZWxwLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZTsKKyt9OworKworKy8qIElmIGEgdXNlciBkb2MgZmlsdGVyIHNob3VsZCBiZSBhcHBsaWVkIHRvIERPQywgZG8gc28uICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytmaWx0ZXJfZG9jIChjb25zdCBjaGFyICpkb2MsIGludCBrZXksIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLAorKyAgICAgICAgICAgY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIGlmIChhcmdwICYmIGFyZ3AtPmhlbHBfZmlsdGVyKQorKyAgICAvKiBXZSBtdXN0IGFwcGx5IGEgdXNlciBmaWx0ZXIgdG8gdGhpcyBvdXRwdXQuICAqLworKyAgICB7CisrICAgICAgdm9pZCAqaW5wdXQgPSBfX2FyZ3BfaW5wdXQgKGFyZ3AsIHN0YXRlKTsKKysgICAgICByZXR1cm4gKCphcmdwLT5oZWxwX2ZpbHRlcikgKGtleSwgZG9jLCBpbnB1dCk7CisrICAgIH0KKysgIGVsc2UKKysgICAgLyogTm8gZmlsdGVyLiAgKi8KKysgICAgcmV0dXJuIGRvYzsKKyt9CisrCisrLyogUHJpbnRzIFNUUiBhcyBhIGhlYWRlciBsaW5lLCB3aXRoIHRoZSBtYXJnaW4gbGluZXMgc2V0IGFwcHJvcGlhdGVseSwgYW5kCisrICAgbm90ZXMgdGhlIGZhY3QgdGhhdCBncm91cHMgc2hvdWxkIGJlIHNlcGFyYXRlZCB3aXRoIGEgYmxhbmsgbGluZS4gIEFSR1AgaXMKKysgICB0aGUgYXJncCB0aGF0IHNob3VsZCBkaWN0YXRlIGFueSB1c2VyIGRvYyBmaWx0ZXJpbmcgdG8gdGFrZSBwbGFjZS4gIE5vdGUKKysgICB0aGF0IHRoZSBwcmV2aW91cyB3cmFwIG1hcmdpbiBpc24ndCByZXN0b3JlZCwgYnV0IHRoZSBsZWZ0IG1hcmdpbiBpcyByZXNldAorKyAgIHRvIDAuICAqLworK3N0YXRpYyB2b2lkCisrcHJpbnRfaGVhZGVyIChjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLAorKyAgICAgICAgICAgICBzdHJ1Y3QgcGVudHJ5X3N0YXRlICpwZXN0KQorK3sKKysgIGNvbnN0IGNoYXIgKnRzdHIgPSBkZ2V0dGV4dCAoYXJncC0+YXJncF9kb21haW4sIHN0cik7CisrICBjb25zdCBjaGFyICpmc3RyID0gZmlsdGVyX2RvYyAodHN0ciwgQVJHUF9LRVlfSEVMUF9IRUFERVIsIGFyZ3AsIHBlc3QtPnN0YXRlKTsKKysKKysgIGlmIChmc3RyKQorKyAgICB7CisrICAgICAgaWYgKCpmc3RyKQorKyAgICAgICB7CisrICAgICAgICAgaWYgKHBlc3QtPmhoc3RhdGUtPnByZXZfZW50cnkpCisrICAgICAgICAgICAvKiBQcmVjZWRlIHdpdGggYSBibGFuayBsaW5lLiAgKi8KKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAocGVzdC0+c3RyZWFtLCAnXG4nKTsKKysgICAgICAgICBpbmRlbnRfdG8gKHBlc3QtPnN0cmVhbSwgdXBhcmFtcy5oZWFkZXJfY29sKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChwZXN0LT5zdHJlYW0sIHVwYXJhbXMuaGVhZGVyX2NvbCk7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAocGVzdC0+c3RyZWFtLCB1cGFyYW1zLmhlYWRlcl9jb2wpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0cyAocGVzdC0+c3RyZWFtLCBmc3RyKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChwZXN0LT5zdHJlYW0sIDApOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAocGVzdC0+c3RyZWFtLCAnXG4nKTsKKysgICAgICAgfQorKworKyAgICAgIHBlc3QtPmhoc3RhdGUtPnNlcF9ncm91cHMgPSAxOyAvKiBTZXBhcmF0ZSBzdWJzZXF1ZW50IGdyb3Vwcy4gKi8KKysgICAgfQorKworKyAgaWYgKGZzdHIgIT0gdHN0cikKKysgICAgZnJlZSAoKGNoYXIgKikgZnN0cik7CisrfQorKworKy8qIEluc2VydHMgYSBjb21tYSBpZiB0aGlzIGlzbid0IHRoZSBmaXJzdCBpdGVtIG9uIHRoZSBsaW5lLCBhbmQgdGhlbiBtYWtlcworKyAgIHN1cmUgd2UncmUgYXQgbGVhc3QgdG8gY29sdW1uIENPTC4gIElmIHRoaXMgKmlzKiB0aGUgZmlyc3QgaXRlbSBvbiBhIGxpbmUsCisrICAgcHJpbnRzIGFueSBwZW5kaW5nIHdoaXRlc3BhY2UvaGVhZGVycyB0aGF0IHNob3VsZCBwcmVjZWRlIHRoaXMgbGluZS4gQWxzbworKyAgIGNsZWFycyBGSVJTVC4gICovCisrc3RhdGljIHZvaWQKKytjb21tYSAodW5zaWduZWQgY29sLCBzdHJ1Y3QgcGVudHJ5X3N0YXRlICpwZXN0KQorK3sKKysgIGlmIChwZXN0LT5maXJzdCkKKysgICAgeworKyAgICAgIGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKnBlID0gcGVzdC0+aGhzdGF0ZS0+cHJldl9lbnRyeTsKKysgICAgICBjb25zdCBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsID0gcGVzdC0+ZW50cnktPmNsdXN0ZXI7CisrCisrICAgICAgaWYgKHBlc3QtPmhoc3RhdGUtPnNlcF9ncm91cHMgJiYgcGUgJiYgcGVzdC0+ZW50cnktPmdyb3VwICE9IHBlLT5ncm91cCkKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChwZXN0LT5zdHJlYW0sICdcbicpOworKworKyAgICAgIGlmIChjbCAmJiBjbC0+aGVhZGVyICYmICpjbC0+aGVhZGVyCisrICAgICAgICAgJiYgKCFwZQorKyAgICAgICAgICAgICB8fCAocGUtPmNsdXN0ZXIgIT0gY2wKKysgICAgICAgICAgICAgICAgICYmICFob2xfY2x1c3Rlcl9pc19jaGlsZCAocGUtPmNsdXN0ZXIsIGNsKSkpKQorKyAgICAgICAvKiBJZiB3ZSdyZSBjaGFuZ2luZyBjbHVzdGVycywgdGhlbiB0aGlzIG11c3QgYmUgdGhlIHN0YXJ0IG9mIHRoZQorKyAgICAgICAgICBFTlRSWSdzIGNsdXN0ZXIgdW5sZXNzIHRoYXQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIHByZXZpb3VzIG9uZQorKyAgICAgICAgICAoaW4gd2hpY2ggY2FzZSB3ZSBoYWQganVzdCBwb3BwZWQgaW50byBhIHN1Yi1jbHVzdGVyIGZvciBhIGJpdCkuCisrICAgICAgICAgIElmIHNvLCB0aGVuIHByaW50IHRoZSBjbHVzdGVyJ3MgaGVhZGVyIGxpbmUuICAqLworKyAgICAgICB7CisrICAgICAgICAgaW50IG9sZF93bSA9IF9fYXJncF9mbXRzdHJlYW1fd21hcmdpbiAocGVzdC0+c3RyZWFtKTsKKysgICAgICAgICBwcmludF9oZWFkZXIgKGNsLT5oZWFkZXIsIGNsLT5hcmdwLCBwZXN0KTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChwZXN0LT5zdHJlYW0sIG9sZF93bSk7CisrICAgICAgIH0KKysKKysgICAgICBwZXN0LT5maXJzdCA9IDA7CisrICAgIH0KKysgIGVsc2UKKysgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChwZXN0LT5zdHJlYW0sICIsICIpOworKworKyAgaW5kZW50X3RvIChwZXN0LT5zdHJlYW0sIGNvbCk7CisrfQorKworKy8qIFByaW50IGhlbHAgZm9yIEVOVFJZIHRvIFNUUkVBTS4gICovCisrc3RhdGljIHZvaWQKKytob2xfZW50cnlfaGVscCAoc3RydWN0IGhvbF9lbnRyeSAqZW50cnksIGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwKKysgICAgICAgICAgICAgICBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSwgc3RydWN0IGhvbF9oZWxwX3N0YXRlICpoaHN0YXRlKQorK3sKKysgIHVuc2lnbmVkIG51bTsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCA9IGVudHJ5LT5vcHQsICpvcHQ7CisrICBjaGFyICpzbyA9IGVudHJ5LT5zaG9ydF9vcHRpb25zOworKyAgaW50IGhhdmVfbG9uZ19vcHQgPSAwOyAgICAgICAvKiBXZSBoYXZlIGFueSBsb25nIG9wdGlvbnMuICAqLworKyAgLyogU2F2ZWQgbWFyZ2lucy4gICovCisrICBpbnQgb2xkX2xtID0gX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoc3RyZWFtLCAwKTsKKysgIGludCBvbGRfd20gPSBfX2FyZ3BfZm10c3RyZWFtX3dtYXJnaW4gKHN0cmVhbSk7CisrICAvKiBQRVNUIGlzIGEgc3RhdGUgYmxvY2sgaG9sZGluZyBzb21lIG9mIG91ciB2YXJpYWJsZXMgdGhhdCB3ZSdkIGxpa2UgdG8KKysgICAgIHNoYXJlIHdpdGggaGVscGVyIGZ1bmN0aW9ucy4gICovCisrICBzdHJ1Y3QgcGVudHJ5X3N0YXRlIHBlc3QgPSB7IGVudHJ5LCBzdHJlYW0sIGhoc3RhdGUsIDEsIHN0YXRlIH07CisrCisrICBpZiAoISBvZG9jIChyZWFsKSkKKysgICAgZm9yIChvcHQgPSByZWFsLCBudW0gPSBlbnRyeS0+bnVtOyBudW0gPiAwOyBvcHQrKywgbnVtLS0pCisrICAgICAgaWYgKG9wdC0+bmFtZSAmJiBvdmlzaWJsZSAob3B0KSkKKysgICAgICAgeworKyAgICAgICAgIGhhdmVfbG9uZ19vcHQgPSAxOworKyAgICAgICAgIGJyZWFrOworKyAgICAgICB9CisrCisrICAvKiBGaXJzdCBlbWl0IHNob3J0IG9wdGlvbnMuICAqLworKyAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAoc3RyZWFtLCB1cGFyYW1zLnNob3J0X29wdF9jb2wpOyAvKiBGb3IgdHJ1bHkgYml6YXJyZSBjYXNlcy4gKi8KKysgIGZvciAob3B0ID0gcmVhbCwgbnVtID0gZW50cnktPm51bTsgbnVtID4gMDsgb3B0KyssIG51bS0tKQorKyAgICBpZiAob3Nob3J0IChvcHQpICYmIG9wdC0+a2V5ID09ICpzbykKKysgICAgICAvKiBPUFQgaGFzIGEgdmFsaWQgKG5vbiBzaGFkb3dlZCkgc2hvcnQgb3B0aW9uLiAgKi8KKysgICAgICB7CisrICAgICAgIGlmIChvdmlzaWJsZSAob3B0KSkKKysgICAgICAgICB7CisrICAgICAgICAgICBjb21tYSAodXBhcmFtcy5zaG9ydF9vcHRfY29sLCAmcGVzdCk7CisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJy0nKTsKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAqc28pOworKyAgICAgICAgICAgaWYgKCFoYXZlX2xvbmdfb3B0IHx8IHVwYXJhbXMuZHVwX2FyZ3MpCisrICAgICAgICAgICAgIGFyZyAocmVhbCwgIiAlcyIsICJbJXNdIiwKKysgICAgICAgICAgICAgICAgICBzdGF0ZSA9PSBOVUxMID8gTlVMTCA6IHN0YXRlLT5yb290X2FyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgIHN0cmVhbSk7CisrICAgICAgICAgICBlbHNlIGlmIChyZWFsLT5hcmcpCisrICAgICAgICAgICAgIGhoc3RhdGUtPnN1cHByZXNzZWRfZHVwX2FyZyA9IDE7CisrICAgICAgICAgfQorKyAgICAgICBzbysrOworKyAgICAgIH0KKysKKysgIC8qIE5vdywgbG9uZyBvcHRpb25zLiAgKi8KKysgIGlmIChvZG9jIChyZWFsKSkKKysgICAgLyogQSBgZG9jdW1lbnRhdGlvbicgb3B0aW9uLiAgKi8KKysgICAgeworKyAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKHN0cmVhbSwgdXBhcmFtcy5kb2Nfb3B0X2NvbCk7CisrICAgICAgZm9yIChvcHQgPSByZWFsLCBudW0gPSBlbnRyeS0+bnVtOyBudW0gPiAwOyBvcHQrKywgbnVtLS0pCisrICAgICAgIGlmIChvcHQtPm5hbWUgJiYgb3Zpc2libGUgKG9wdCkpCisrICAgICAgICAgeworKyAgICAgICAgICAgY29tbWEgKHVwYXJhbXMuZG9jX29wdF9jb2wsICZwZXN0KTsKKysgICAgICAgICAgIC8qIENhbGxpbmcgZ2V0dGV4dCBoZXJlIGlzbid0IHF1aXRlIHJpZ2h0LCBzaW5jZSBzb3J0aW5nIHdpbGwKKysgICAgICAgICAgICAgIGhhdmUgYmVlbiBkb25lIG9uIHRoZSBvcmlnaW5hbDsgYnV0IGRvY3VtZW50YXRpb24gb3B0aW9ucworKyAgICAgICAgICAgICAgc2hvdWxkIGJlIHByZXR0eSByYXJlIGFueXdheS4uLiAgKi8KKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0cyAoc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAoc3RhdGUgPT0gTlVMTCA/IE5VTEwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGUtPnJvb3RfYXJncC0+YXJncF9kb21haW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQtPm5hbWUpKTsKKysgICAgICAgICB9CisrICAgIH0KKysgIGVsc2UKKysgICAgLyogQSByZWFsIGxvbmcgb3B0aW9uLiAgKi8KKysgICAgeworKyAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKHN0cmVhbSwgdXBhcmFtcy5sb25nX29wdF9jb2wpOworKyAgICAgIGZvciAob3B0ID0gcmVhbCwgbnVtID0gZW50cnktPm51bTsgbnVtID4gMDsgb3B0KyssIG51bS0tKQorKyAgICAgICBpZiAob3B0LT5uYW1lICYmIG92aXNpYmxlIChvcHQpKQorKyAgICAgICAgIHsKKysgICAgICAgICAgIGNvbW1hICh1cGFyYW1zLmxvbmdfb3B0X2NvbCwgJnBlc3QpOworKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgIi0tJXMiLCBvcHQtPm5hbWUpOworKyAgICAgICAgICAgYXJnIChyZWFsLCAiPSVzIiwgIls9JXNdIiwKKysgICAgICAgICAgICAgICAgc3RhdGUgPT0gTlVMTCA/IE5VTEwgOiBzdGF0ZS0+cm9vdF9hcmdwLT5hcmdwX2RvbWFpbiwgc3RyZWFtKTsKKysgICAgICAgICB9CisrICAgIH0KKysKKysgIC8qIE5leHQsIGRvY3VtZW50YXRpb24gc3RyaW5ncy4gICovCisrICBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChzdHJlYW0sIDApOworKworKyAgaWYgKHBlc3QuZmlyc3QpCisrICAgIHsKKysgICAgICAvKiBEaWRuJ3QgcHJpbnQgYW55IHN3aXRjaGVzLCB3aGF0J3MgdXA/ICAqLworKyAgICAgIGlmICghb3Nob3J0IChyZWFsKSAmJiAhcmVhbC0+bmFtZSkKKysgICAgICAgLyogVGhpcyBpcyBhIGdyb3VwIGhlYWRlciwgcHJpbnQgaXQgbmljZWx5LiAgKi8KKysgICAgICAgcHJpbnRfaGVhZGVyIChyZWFsLT5kb2MsIGVudHJ5LT5hcmdwLCAmcGVzdCk7CisrICAgICAgZWxzZQorKyAgICAgICAvKiBKdXN0IGEgdG90YWxseSBzaGFkb3dlZCBvcHRpb24gb3IgbnVsbCBoZWFkZXI7IHByaW50IG5vdGhpbmcuICAqLworKyAgICAgICBnb3RvIGNsZWFudXA7ICAgICAgICAgICAvKiBKdXN0IHJldHVybiwgYWZ0ZXIgY2xlYW5pbmcgdXAuICAqLworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBjb25zdCBjaGFyICp0c3RyID0gcmVhbC0+ZG9jID8gZGdldHRleHQgKHN0YXRlID09IE5VTEwgPyBOVUxMCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGUtPnJvb3RfYXJncC0+YXJncF9kb21haW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWwtPmRvYykgOiAwOworKyAgICAgIGNvbnN0IGNoYXIgKmZzdHIgPSBmaWx0ZXJfZG9jICh0c3RyLCByZWFsLT5rZXksIGVudHJ5LT5hcmdwLCBzdGF0ZSk7CisrICAgICAgaWYgKGZzdHIgJiYgKmZzdHIpCisrICAgICAgIHsKKysgICAgICAgICB1bnNpZ25lZCBpbnQgY29sID0gX19hcmdwX2ZtdHN0cmVhbV9wb2ludCAoc3RyZWFtKTsKKysKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChzdHJlYW0sIHVwYXJhbXMub3B0X2RvY19jb2wpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKHN0cmVhbSwgdXBhcmFtcy5vcHRfZG9jX2NvbCk7CisrCisrICAgICAgICAgaWYgKGNvbCA+ICh1bnNpZ25lZCBpbnQpICh1cGFyYW1zLm9wdF9kb2NfY29sICsgMykpCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrICAgICAgICAgZWxzZSBpZiAoY29sID49ICh1bnNpZ25lZCBpbnQpIHVwYXJhbXMub3B0X2RvY19jb2wpCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKHN0cmVhbSwgIiAgICIpOworKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIGluZGVudF90byAoc3RyZWFtLCB1cGFyYW1zLm9wdF9kb2NfY29sKTsKKysKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKHN0cmVhbSwgZnN0cik7CisrICAgICAgIH0KKysgICAgICBpZiAoZnN0ciAmJiBmc3RyICE9IHRzdHIpCisrICAgICAgIGZyZWUgKChjaGFyICopIGZzdHIpOworKworKyAgICAgIC8qIFJlc2V0IHRoZSBsZWZ0IG1hcmdpbi4gICovCisrICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoc3RyZWFtLCAwKTsKKysgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrICAgIH0KKysKKysgIGhoc3RhdGUtPnByZXZfZW50cnkgPSBlbnRyeTsKKysKKytjbGVhbnVwOgorKyAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoc3RyZWFtLCBvbGRfbG0pOworKyAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAoc3RyZWFtLCBvbGRfd20pOworK30KKysKKysvKiBPdXRwdXQgYSBsb25nIGhlbHAgbWVzc2FnZSBhYm91dCB0aGUgb3B0aW9ucyBpbiBIT0wgdG8gU1RSRUFNLiAgKi8KKytzdGF0aWMgdm9pZAorK2hvbF9oZWxwIChzdHJ1Y3QgaG9sICpob2wsIGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwKKysgICAgICAgICBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSkKKyt7CisrICB1bnNpZ25lZCBudW07CisrICBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeTsKKysgIHN0cnVjdCBob2xfaGVscF9zdGF0ZSBoaHN0YXRlID0geyAwLCAwLCAwIH07CisrCisrICBmb3IgKGVudHJ5ID0gaG9sLT5lbnRyaWVzLCBudW0gPSBob2wtPm51bV9lbnRyaWVzOyBudW0gPiAwOyBlbnRyeSsrLCBudW0tLSkKKysgICAgaG9sX2VudHJ5X2hlbHAgKGVudHJ5LCBzdGF0ZSwgc3RyZWFtLCAmaGhzdGF0ZSk7CisrCisrICBpZiAoaGhzdGF0ZS5zdXBwcmVzc2VkX2R1cF9hcmcgJiYgdXBhcmFtcy5kdXBfYXJnc19ub3RlKQorKyAgICB7CisrICAgICAgY29uc3QgY2hhciAqdHN0ciA9IGRnZXR0ZXh0IChzdGF0ZSA9PSBOVUxMID8gTlVMTAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0YXRlLT5yb290X2FyZ3AtPmFyZ3BfZG9tYWluLCAiXAorK01hbmRhdG9yeSBvciBvcHRpb25hbCBhcmd1bWVudHMgdG8gbG9uZyBvcHRpb25zIGFyZSBhbHNvIG1hbmRhdG9yeSBvciBcCisrb3B0aW9uYWwgZm9yIGFueSBjb3JyZXNwb25kaW5nIHNob3J0IG9wdGlvbnMuIik7CisrICAgICAgY29uc3QgY2hhciAqZnN0ciA9IGZpbHRlcl9kb2MgKHRzdHIsIEFSR1BfS0VZX0hFTFBfRFVQX0FSR1NfTk9URSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA/IHN0YXRlLT5yb290X2FyZ3AgOiAwLCBzdGF0ZSk7CisrICAgICAgaWYgKGZzdHIgJiYgKmZzdHIpCisrICAgICAgIHsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChzdHJlYW0sIGZzdHIpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysgICAgICAgfQorKyAgICAgIGlmIChmc3RyICYmIGZzdHIgIT0gdHN0cikKKysgICAgICAgZnJlZSAoKGNoYXIgKikgZnN0cik7CisrICAgIH0KKyt9CisrCisrLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgaG9sX3VzYWdlLiAgKi8KKysKKysvKiBJZiBPUFQgaXMgYSBzaG9ydCBvcHRpb24gd2l0aG91dCBhbiBhcmcsIGFwcGVuZCBpdHMga2V5IHRvIHRoZSBzdHJpbmcKKysgICBwb2ludGVyIHBvaW50ZXIgdG8gYnkgQ09PS0lFLCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlci4gICovCisrc3RhdGljIGludAorK2FkZF9hcmdsZXNzX3Nob3J0X29wdCAoY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQsCisrICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCwKKysgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCB2b2lkICpjb29raWUpCisreworKyAgY2hhciAqKnNuYW9fZW5kID0gY29va2llOworKyAgaWYgKCEob3B0LT5hcmcgfHwgcmVhbC0+YXJnKQorKyAgICAgICYmICEoKG9wdC0+ZmxhZ3MgfCByZWFsLT5mbGFncykgJiBPUFRJT05fTk9fVVNBR0UpKQorKyAgICAqKCpzbmFvX2VuZCkrKyA9IG9wdC0+a2V5OworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIElmIE9QVCBpcyBhIHNob3J0IG9wdGlvbiB3aXRoIGFuIGFyZywgb3V0cHV0IGEgdXNhZ2UgZW50cnkgZm9yIGl0IHRvIHRoZQorKyAgIHN0cmVhbSBwb2ludGVkIGF0IGJ5IENPT0tJRS4gICovCisrc3RhdGljIGludAorK3VzYWdlX2FyZ2Z1bF9zaG9ydF9vcHQgKGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpyZWFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCB2b2lkICpjb29raWUpCisreworKyAgYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0gPSBjb29raWU7CisrICBjb25zdCBjaGFyICphcmcgPSBvcHQtPmFyZzsKKysgIGludCBmbGFncyA9IG9wdC0+ZmxhZ3MgfCByZWFsLT5mbGFnczsKKysKKysgIGlmICghIGFyZykKKysgICAgYXJnID0gcmVhbC0+YXJnOworKworKyAgaWYgKGFyZyAmJiAhKGZsYWdzICYgT1BUSU9OX05PX1VTQUdFKSkKKysgICAgeworKyAgICAgIGFyZyA9IGRnZXR0ZXh0IChkb21haW4sIGFyZyk7CisrCisrICAgICAgaWYgKGZsYWdzICYgT1BUSU9OX0FSR19PUFRJT05BTCkKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgIiBbLSVjWyVzXV0iLCBvcHQtPmtleSwgYXJnKTsKKysgICAgICBlbHNlCisrICAgICAgIHsKKysgICAgICAgICAvKiBNYW51YWxseSBkbyBsaW5lIHdyYXBwaW5nIHNvIHRoYXQgaXQgKHByb2JhYmx5KSB3b24ndAorKyAgICAgICAgICAgIGdldCB3cmFwcGVkIGF0IHRoZSBlbWJlZGRlZCBzcGFjZS4gICovCisrICAgICAgICAgc3BhY2UgKHN0cmVhbSwgNiArIHN0cmxlbiAoYXJnKSk7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgIlstJWMgJXNdIiwgb3B0LT5rZXksIGFyZyk7CisrICAgICAgIH0KKysgICAgfQorKworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIE91dHB1dCBhIHVzYWdlIGVudHJ5IGZvciB0aGUgbG9uZyBvcHRpb24gb3B0IHRvIHRoZSBzdHJlYW0gcG9pbnRlZCBhdCBieQorKyAgIENPT0tJRS4gICovCisrc3RhdGljIGludAorK3VzYWdlX2xvbmdfb3B0IChjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCwKKysgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKnJlYWwsCisrICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCB2b2lkICpjb29raWUpCisreworKyAgYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0gPSBjb29raWU7CisrICBjb25zdCBjaGFyICphcmcgPSBvcHQtPmFyZzsKKysgIGludCBmbGFncyA9IG9wdC0+ZmxhZ3MgfCByZWFsLT5mbGFnczsKKysKKysgIGlmICghIGFyZykKKysgICAgYXJnID0gcmVhbC0+YXJnOworKworKyAgaWYgKCEgKGZsYWdzICYgT1BUSU9OX05PX1VTQUdFKSkKKysgICAgeworKyAgICAgIGlmIChhcmcpCisrICAgICAgIHsKKysgICAgICAgICBhcmcgPSBkZ2V0dGV4dCAoZG9tYWluLCBhcmcpOworKyAgICAgICAgIGlmIChmbGFncyAmIE9QVElPTl9BUkdfT1BUSU9OQUwpCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoc3RyZWFtLCAiIFstLSVzWz0lc11dIiwgb3B0LT5uYW1lLCBhcmcpOworKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJlYW0sICIgWy0tJXM9JXNdIiwgb3B0LT5uYW1lLCBhcmcpOworKyAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoc3RyZWFtLCAiIFstLSVzXSIsIG9wdC0+bmFtZSk7CisrICAgIH0KKysKKysgIHJldHVybiAwOworK30KKysKKysvKiBQcmludCBhIHNob3J0IHVzYWdlIGRlc2NyaXB0aW9uIGZvciB0aGUgYXJndW1lbnRzIGluIEhPTCB0byBTVFJFQU0uICAqLworK3N0YXRpYyB2b2lkCisraG9sX3VzYWdlIChzdHJ1Y3QgaG9sICpob2wsIGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtKQorK3sKKysgIGlmIChob2wtPm51bV9lbnRyaWVzID4gMCkKKysgICAgeworKyAgICAgIHVuc2lnbmVkIG5lbnRyaWVzOworKyAgICAgIHN0cnVjdCBob2xfZW50cnkgKmVudHJ5OworKyAgICAgIGNoYXIgKnNob3J0X25vX2FyZ19vcHRzID0gYWxsb2NhIChzdHJsZW4gKGhvbC0+c2hvcnRfb3B0aW9ucykgKyAxKTsKKysgICAgICBjaGFyICpzbmFvX2VuZCA9IHNob3J0X25vX2FyZ19vcHRzOworKworKyAgICAgIC8qIEZpcnN0IHdlIHB1dCBhIGxpc3Qgb2Ygc2hvcnQgb3B0aW9ucyB3aXRob3V0IGFyZ3VtZW50cy4gICovCisrICAgICAgZm9yIChlbnRyeSA9IGhvbC0+ZW50cmllcywgbmVudHJpZXMgPSBob2wtPm51bV9lbnRyaWVzCisrICAgICAgICAgIDsgbmVudHJpZXMgPiAwCisrICAgICAgICAgIDsgZW50cnkrKywgbmVudHJpZXMtLSkKKysgICAgICAgaG9sX2VudHJ5X3Nob3J0X2l0ZXJhdGUgKGVudHJ5LCBhZGRfYXJnbGVzc19zaG9ydF9vcHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YXJncC0+YXJncF9kb21haW4sICZzbmFvX2VuZCk7CisrICAgICAgaWYgKHNuYW9fZW5kID4gc2hvcnRfbm9fYXJnX29wdHMpCisrICAgICAgIHsKKysgICAgICAgICAqc25hb19lbmQrKyA9IDA7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgIiBbLSVzXSIsIHNob3J0X25vX2FyZ19vcHRzKTsKKysgICAgICAgfQorKworKyAgICAgIC8qIE5vdyBhIGxpc3Qgb2Ygc2hvcnQgb3B0aW9ucyAqd2l0aCogYXJndW1lbnRzLiAgKi8KKysgICAgICBmb3IgKGVudHJ5ID0gaG9sLT5lbnRyaWVzLCBuZW50cmllcyA9IGhvbC0+bnVtX2VudHJpZXMKKysgICAgICAgICAgOyBuZW50cmllcyA+IDAKKysgICAgICAgICAgOyBlbnRyeSsrLCBuZW50cmllcy0tKQorKyAgICAgICBob2xfZW50cnlfc2hvcnRfaXRlcmF0ZSAoZW50cnksIHVzYWdlX2FyZ2Z1bF9zaG9ydF9vcHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YXJncC0+YXJncF9kb21haW4sIHN0cmVhbSk7CisrCisrICAgICAgLyogRmluYWxseSwgYSBsaXN0IG9mIGxvbmcgb3B0aW9ucyAod2hldyEpLiAgKi8KKysgICAgICBmb3IgKGVudHJ5ID0gaG9sLT5lbnRyaWVzLCBuZW50cmllcyA9IGhvbC0+bnVtX2VudHJpZXMKKysgICAgICAgICAgOyBuZW50cmllcyA+IDAKKysgICAgICAgICAgOyBlbnRyeSsrLCBuZW50cmllcy0tKQorKyAgICAgICBob2xfZW50cnlfbG9uZ19pdGVyYXRlIChlbnRyeSwgdXNhZ2VfbG9uZ19vcHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hcmdwLT5hcmdwX2RvbWFpbiwgc3RyZWFtKTsKKysgICAgfQorK30KKysKKysvKiBNYWtlIGEgSE9MIGNvbnRhaW5pbmcgYWxsIGxldmVscyBvZiBvcHRpb25zIGluIEFSR1AuICBDTFVTVEVSIGlzIHRoZQorKyAgIGNsdXN0ZXIgaW4gd2hpY2ggQVJHUCdzIGVudHJpZXMgc2hvdWxkIGJlIGNsdXN0ZXJlZCwgb3IgMC4gICovCisrc3RhdGljIHN0cnVjdCBob2wgKgorK2FyZ3BfaG9sIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgc3RydWN0IGhvbF9jbHVzdGVyICpjbHVzdGVyKQorK3sKKysgIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZCA9IGFyZ3AtPmNoaWxkcmVuOworKyAgc3RydWN0IGhvbCAqaG9sID0gbWFrZV9ob2wgKGFyZ3AsIGNsdXN0ZXIpOworKyAgaWYgKGNoaWxkKQorKyAgICB3aGlsZSAoY2hpbGQtPmFyZ3ApCisrICAgICAgeworKyAgICAgICBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNoaWxkX2NsdXN0ZXIgPQorKyAgICAgICAgICgoY2hpbGQtPmdyb3VwIHx8IGNoaWxkLT5oZWFkZXIpCisrICAgICAgICAgIC8qIFB1dCBDSElMRC0+YXJncCB3aXRoaW4gaXRzIG93biBjbHVzdGVyLiAgKi8KKysgICAgICAgICAgPyBob2xfYWRkX2NsdXN0ZXIgKGhvbCwgY2hpbGQtPmdyb3VwLCBjaGlsZC0+aGVhZGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQgLSBhcmdwLT5jaGlsZHJlbiwgY2x1c3RlciwgYXJncCkKKysgICAgICAgICAgLyogSnVzdCBtZXJnZSBpdCBpbnRvIHRoZSBwYXJlbnQncyBjbHVzdGVyLiAgKi8KKysgICAgICAgICAgOiBjbHVzdGVyKTsKKysgICAgICAgaG9sX2FwcGVuZCAoaG9sLCBhcmdwX2hvbCAoY2hpbGQtPmFyZ3AsIGNoaWxkX2NsdXN0ZXIpKSA7CisrICAgICAgIGNoaWxkKys7CisrICAgICAgfQorKyAgcmV0dXJuIGhvbDsKKyt9CisrCisrLyogQ2FsY3VsYXRlIGhvdyBtYW55IGRpZmZlcmVudCBsZXZlbHMgd2l0aCBhbHRlcm5hdGl2ZSBhcmdzIHN0cmluZ3MgZXhpc3QgaW4KKysgICBBUkdQLiAgKi8KKytzdGF0aWMgc2l6ZV90CisrYXJncF9hcmdzX2xldmVscyAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3ApCisreworKyAgc2l6ZV90IGxldmVscyA9IDA7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCAqY2hpbGQgPSBhcmdwLT5jaGlsZHJlbjsKKysKKysgIGlmIChhcmdwLT5hcmdzX2RvYyAmJiBzdHJjaHIgKGFyZ3AtPmFyZ3NfZG9jLCAnXG4nKSkKKysgICAgbGV2ZWxzKys7CisrCisrICBpZiAoY2hpbGQpCisrICAgIHdoaWxlIChjaGlsZC0+YXJncCkKKysgICAgICBsZXZlbHMgKz0gYXJncF9hcmdzX2xldmVscyAoKGNoaWxkKyspLT5hcmdwKTsKKysKKysgIHJldHVybiBsZXZlbHM7CisrfQorKworKy8qIFByaW50IGFsbCB0aGUgbm9uLW9wdGlvbiBhcmdzIGRvY3VtZW50ZWQgaW4gQVJHUCB0byBTVFJFQU0uICBBbnkgb3V0cHV0IGlzCisrICAgcHJlY2VkZWQgYnkgYSBzcGFjZS4gIExFVkVMUyBpcyBhIHBvaW50ZXIgdG8gYSBieXRlIHZlY3RvciB0aGUgbGVuZ3RoCisrICAgcmV0dXJuZWQgYnkgYXJncF9hcmdzX2xldmVsczsgaXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIHRvIHplcm8sIGFuZAorKyAgIHVwZGF0ZWQgYnkgdGhpcyByb3V0aW5lIGZvciB0aGUgbmV4dCBjYWxsIGlmIEFEVkFOQ0UgaXMgdHJ1ZS4gIFRydWUgaXMKKysgICByZXR1cm5lZCBhcyBsb25nIGFzIHRoZXJlIGFyZSBtb3JlIHBhdHRlcm5zIHRvIG91dHB1dC4gICovCisrc3RhdGljIGludAorK2FyZ3BfYXJnc191c2FnZSAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsIGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwKKysgICAgICAgICAgICAgICAgY2hhciAqKmxldmVscywgaW50IGFkdmFuY2UsIGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtKQorK3sKKysgIGNoYXIgKm91cl9sZXZlbCA9ICpsZXZlbHM7CisrICBpbnQgbXVsdGlwbGUgPSAwOworKyAgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgKmNoaWxkID0gYXJncC0+Y2hpbGRyZW47CisrICBjb25zdCBjaGFyICp0ZG9jID0gZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLCBhcmdwLT5hcmdzX2RvYyksICpubCA9IDA7CisrICBjb25zdCBjaGFyICpmZG9jID0gZmlsdGVyX2RvYyAodGRvYywgQVJHUF9LRVlfSEVMUF9BUkdTX0RPQywgYXJncCwgc3RhdGUpOworKworKyAgaWYgKGZkb2MpCisrICAgIHsKKysgICAgICBjb25zdCBjaGFyICpjcCA9IGZkb2M7CisrICAgICAgbmwgPSBzdHJjaHJudWwgKGNwLCAnXG4nKTsKKysgICAgICBpZiAoKm5sICE9ICdcMCcpCisrICAgICAgIC8qIFRoaXMgaXMgYSBgbXVsdGktbGV2ZWwnIGFyZ3MgZG9jOyBhZHZhbmNlIHRvIHRoZSBjb3JyZWN0IHBvc2l0aW9uCisrICAgICAgICAgIGFzIGRldGVybWluZWQgYnkgb3VyIHN0YXRlIGluIExFVkVMUywgYW5kIHVwZGF0ZSBMRVZFTFMuICAqLworKyAgICAgICB7CisrICAgICAgICAgaW50IGk7CisrICAgICAgICAgbXVsdGlwbGUgPSAxOworKyAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAqb3VyX2xldmVsOyBpKyspCisrICAgICAgICAgICBjcCA9IG5sICsgMSwgbmwgPSBzdHJjaHJudWwgKGNwLCAnXG4nKTsKKysgICAgICAgICAoKmxldmVscykrKzsKKysgICAgICAgfQorKworKyAgICAgIC8qIE1hbnVhbGx5IGRvIGxpbmUgd3JhcHBpbmcgc28gdGhhdCBpdCAocHJvYmFibHkpIHdvbid0IGdldCB3cmFwcGVkIGF0CisrICAgICAgICBhbnkgZW1iZWRkZWQgc3BhY2VzLiAgKi8KKysgICAgICBzcGFjZSAoc3RyZWFtLCAxICsgbmwgLSBjcCk7CisrCisrICAgICAgX19hcmdwX2ZtdHN0cmVhbV93cml0ZSAoc3RyZWFtLCBjcCwgbmwgLSBjcCk7CisrICAgIH0KKysgIGlmIChmZG9jICYmIGZkb2MgIT0gdGRvYykKKysgICAgZnJlZSAoKGNoYXIgKilmZG9jKTsgICAgICAgLyogRnJlZSB1c2VyJ3MgbW9kaWZpZWQgZG9jIHN0cmluZy4gICovCisrCisrICBpZiAoY2hpbGQpCisrICAgIHdoaWxlIChjaGlsZC0+YXJncCkKKysgICAgICBhZHZhbmNlID0gIWFyZ3BfYXJnc191c2FnZSAoKGNoaWxkKyspLT5hcmdwLCBzdGF0ZSwgbGV2ZWxzLCBhZHZhbmNlLCBzdHJlYW0pOworKworKyAgaWYgKGFkdmFuY2UgJiYgbXVsdGlwbGUpCisrICAgIHsKKysgICAgICAvKiBOZWVkIHRvIGluY3JlbWVudCBvdXIgbGV2ZWwuICAqLworKyAgICAgIGlmICgqbmwpCisrICAgICAgIC8qIFRoZXJlJ3MgbW9yZSB3ZSBjYW4gZG8gaGVyZS4gICovCisrICAgICAgIHsKKysgICAgICAgICAoKm91cl9sZXZlbCkrKzsKKysgICAgICAgICBhZHZhbmNlID0gMDsgICAgICAgICAgLyogT3VyIHBhcmVudCBzaG91bGRuJ3QgYWR2YW5jZSBhbHNvLiAqLworKyAgICAgICB9CisrICAgICAgZWxzZSBpZiAoKm91cl9sZXZlbCA+IDApCisrICAgICAgIC8qIFdlIGhhZCBtdWx0aXBsZSBsZXZlbHMsIGJ1dCB1c2VkIHRoZW0gdXA7IHJlc2V0IHRvIHplcm8uICAqLworKyAgICAgICAqb3VyX2xldmVsID0gMDsKKysgICAgfQorKworKyAgcmV0dXJuICFhZHZhbmNlOworK30KKysKKysvKiBQcmludCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgQVJHUCB0byBTVFJFQU07IGlmIFBPU1QgaXMgZmFsc2UsIHRoZW4KKysgICBldmVyeXRoaW5nIHByZWNlZWRpbmcgYSBgXHYnIGNoYXJhY3RlciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBzdHJpbmdzIChvcgorKyAgIHRoZSB3aG9sZSBzdHJpbmcsIGZvciB0aG9zZSB3aXRoIG5vbmUpIGlzIHByaW50ZWQsIG90aGVyd2lzZSwgZXZlcnl0aGluZworKyAgIGZvbGxvd2luZyB0aGUgYFx2JyBjaGFyYWN0ZXIgKG5vdGhpbmcgZm9yIHN0cmluZ3Mgd2l0aG91dCkuICBFYWNoIHNlcGFyYXRlCisrICAgYml0IG9mIGRvY3VtZW50YXRpb24gaXMgc2VwYXJhdGVkIGEgYmxhbmsgbGluZSwgYW5kIGlmIFBSRV9CTEFOSyBpcyB0cnVlLAorKyAgIHRoZW4gdGhlIGZpcnN0IGlzIGFzIHdlbGwuICBJZiBGSVJTVF9PTkxZIGlzIHRydWUsIG9ubHkgdGhlIGZpcnN0CisrICAgb2NjdXJyZW5jZSBpcyBvdXRwdXQuICBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2FzIG91dHB1dC4gICovCisrc3RhdGljIGludAorK2FyZ3BfZG9jIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlLAorKyAgICAgICAgIGludCBwb3N0LCBpbnQgcHJlX2JsYW5rLCBpbnQgZmlyc3Rfb25seSwKKysgICAgICAgICBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSkKKyt7CisrICBjb25zdCBjaGFyICp0ZXh0OworKyAgY29uc3QgY2hhciAqaW5wX3RleHQ7CisrICB2b2lkICppbnB1dCA9IDA7CisrICBpbnQgYW55dGhpbmcgPSAwOworKyAgc2l6ZV90IGlucF90ZXh0X2xpbWl0ID0gMDsKKysgIGNvbnN0IGNoYXIgKmRvYyA9IGRnZXR0ZXh0IChhcmdwLT5hcmdwX2RvbWFpbiwgYXJncC0+ZG9jKTsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZCA9IGFyZ3AtPmNoaWxkcmVuOworKworKyAgaWYgKGRvYykKKysgICAgeworKyAgICAgIGNoYXIgKnZ0ID0gc3RyY2hyIChkb2MsICdcdicpOworKyAgICAgIGlucF90ZXh0ID0gcG9zdCA/ICh2dCA/IHZ0ICsgMSA6IDApIDogZG9jOworKyAgICAgIGlucF90ZXh0X2xpbWl0ID0gKCFwb3N0ICYmIHZ0KSA/ICh2dCAtIGRvYykgOiAwOworKyAgICB9CisrICBlbHNlCisrICAgIGlucF90ZXh0ID0gMDsKKysKKysgIGlmIChhcmdwLT5oZWxwX2ZpbHRlcikKKysgICAgLyogV2UgaGF2ZSB0byBmaWx0ZXIgdGhlIGRvYyBzdHJpbmdzLiAgKi8KKysgICAgeworKyAgICAgIGlmIChpbnBfdGV4dF9saW1pdCkKKysgICAgICAgLyogQ29weSBJTlBfVEVYVCBzbyB0aGF0IGl0J3MgbnVsLXRlcm1pbmF0ZWQuICAqLworKyAgICAgICBpbnBfdGV4dCA9IHN0cm5kdXAgKGlucF90ZXh0LCBpbnBfdGV4dF9saW1pdCk7CisrICAgICAgaW5wdXQgPSBfX2FyZ3BfaW5wdXQgKGFyZ3AsIHN0YXRlKTsKKysgICAgICB0ZXh0ID0KKysgICAgICAgKCphcmdwLT5oZWxwX2ZpbHRlcikgKHBvc3QKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQVJHUF9LRVlfSEVMUF9QT1NUX0RPQworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBBUkdQX0tFWV9IRUxQX1BSRV9ET0MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnBfdGV4dCwgaW5wdXQpOworKyAgICB9CisrICBlbHNlCisrICAgIHRleHQgPSAoY29uc3QgY2hhciAqKSBpbnBfdGV4dDsKKysKKysgIGlmICh0ZXh0KQorKyAgICB7CisrICAgICAgaWYgKHByZV9ibGFuaykKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICdcbicpOworKworKyAgICAgIGlmICh0ZXh0ID09IGlucF90ZXh0ICYmIGlucF90ZXh0X2xpbWl0KQorKyAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3dyaXRlIChzdHJlYW0sIGlucF90ZXh0LCBpbnBfdGV4dF9saW1pdCk7CisrICAgICAgZWxzZQorKyAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKHN0cmVhbSwgdGV4dCk7CisrCisrICAgICAgaWYgKF9fYXJncF9mbXRzdHJlYW1fcG9pbnQgKHN0cmVhbSkgPiBfX2FyZ3BfZm10c3RyZWFtX2xtYXJnaW4gKHN0cmVhbSkpCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysKKysgICAgICBhbnl0aGluZyA9IDE7CisrICAgIH0KKysKKysgIGlmICh0ZXh0ICYmIHRleHQgIT0gaW5wX3RleHQpCisrICAgIGZyZWUgKChjaGFyICopIHRleHQpOyAgICAgIC8qIEZyZWUgVEVYVCByZXR1cm5lZCBmcm9tIHRoZSBoZWxwIGZpbHRlci4gICovCisrICBpZiAoaW5wX3RleHQgJiYgaW5wX3RleHRfbGltaXQgJiYgYXJncC0+aGVscF9maWx0ZXIpCisrICAgIGZyZWUgKChjaGFyICopIGlucF90ZXh0KTsgIC8qIFdlIGNvcGllZCBJTlBfVEVYVCwgc28gZnJlZSBpdCBub3cuICAqLworKworKyAgaWYgKHBvc3QgJiYgYXJncC0+aGVscF9maWx0ZXIpCisrICAgIC8qIE5vdyBzZWUgaWYgd2UgaGF2ZSB0byBvdXRwdXQgYSBBUkdQX0tFWV9IRUxQX0VYVFJBIHRleHQuICAqLworKyAgICB7CisrICAgICAgdGV4dCA9ICgqYXJncC0+aGVscF9maWx0ZXIpIChBUkdQX0tFWV9IRUxQX0VYVFJBLCAwLCBpbnB1dCk7CisrICAgICAgaWYgKHRleHQpCisrICAgICAgIHsKKysgICAgICAgICBpZiAoYW55dGhpbmcgfHwgcHJlX2JsYW5rKQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICdcbicpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0cyAoc3RyZWFtLCB0ZXh0KTsKKysgICAgICAgICBmcmVlICgoY2hhciAqKSB0ZXh0KTsKKysgICAgICAgICBpZiAoX19hcmdwX2ZtdHN0cmVhbV9wb2ludCAoc3RyZWFtKQorKyAgICAgICAgICAgICA+IF9fYXJncF9mbXRzdHJlYW1fbG1hcmdpbiAoc3RyZWFtKSkKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysgICAgICAgICBhbnl0aGluZyA9IDE7CisrICAgICAgIH0KKysgICAgfQorKworKyAgaWYgKGNoaWxkKQorKyAgICB3aGlsZSAoY2hpbGQtPmFyZ3AgJiYgIShmaXJzdF9vbmx5ICYmIGFueXRoaW5nKSkKKysgICAgICBhbnl0aGluZyB8PQorKyAgICAgICBhcmdwX2RvYyAoKGNoaWxkKyspLT5hcmdwLCBzdGF0ZSwKKysgICAgICAgICAgICAgICAgIHBvc3QsIGFueXRoaW5nIHx8IHByZV9ibGFuaywgZmlyc3Rfb25seSwKKysgICAgICAgICAgICAgICAgIHN0cmVhbSk7CisrCisrICByZXR1cm4gYW55dGhpbmc7CisrfQorKworKy8qIE91dHB1dCBhIHVzYWdlIG1lc3NhZ2UgZm9yIEFSR1AgdG8gU1RSRUFNLiAgSWYgY2FsbGVkIGZyb20KKysgICBhcmdwX3N0YXRlX2hlbHAsIFNUQVRFIGlzIHRoZSByZWxldmVudCBwYXJzaW5nIHN0YXRlLiAgRkxBR1MgYXJlIGZyb20gdGhlCisrICAgc2V0IEFSR1BfSEVMUF8qLiAgTkFNRSBpcyB3aGF0IHRvIHVzZSB3aGVyZXZlciBhIGBwcm9ncmFtIG5hbWUnIGlzCisrICAgbmVlZGVkLiAqLworK3N0YXRpYyB2b2lkCisrX2hlbHAgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCBjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsIEZJTEUgKnN0cmVhbSwKKysgICAgICAgdW5zaWduZWQgZmxhZ3MsIGNoYXIgKm5hbWUpCisreworKyAgaW50IGFueXRoaW5nID0gMDsgICAgICAgICAgICAvKiBXaGV0aGVyIHdlJ3ZlIG91dHB1dCBhbnl0aGluZy4gICovCisrICBzdHJ1Y3QgaG9sICpob2wgPSAwOworKyAgYXJncF9mbXRzdHJlYW1fdCBmczsKKysKKysgIGlmICghIHN0cmVhbSkKKysgICAgcmV0dXJuOworKworKyNpZiBfTElCQyB8fCAoSEFWRV9GTE9DS0ZJTEUgJiYgSEFWRV9GVU5MT0NLRklMRSkKKysgIGZsb2NrZmlsZSAoc3RyZWFtKTsKKysjZW5kaWYKKysKKysgIGZpbGxfaW5fdXBhcmFtcyAoc3RhdGUpOworKworKyAgZnMgPSBfX2FyZ3BfbWFrZV9mbXRzdHJlYW0gKHN0cmVhbSwgMCwgdXBhcmFtcy5ybWFyZ2luLCAwKTsKKysgIGlmICghIGZzKQorKyAgICB7CisrI2lmIF9MSUJDIHx8IChIQVZFX0ZMT0NLRklMRSAmJiBIQVZFX0ZVTkxPQ0tGSUxFKQorKyAgICAgIGZ1bmxvY2tmaWxlIChzdHJlYW0pOworKyNlbmRpZgorKyAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgaWYgKGZsYWdzICYgKEFSR1BfSEVMUF9VU0FHRSB8IEFSR1BfSEVMUF9TSE9SVF9VU0FHRSB8IEFSR1BfSEVMUF9MT05HKSkKKysgICAgeworKyAgICAgIGhvbCA9IGFyZ3BfaG9sIChhcmdwLCAwKTsKKysKKysgICAgICAvKiBJZiBwcmVzZW50LCB0aGVzZSBvcHRpb25zIGFsd2F5cyBjb21lIGxhc3QuICAqLworKyAgICAgIGhvbF9zZXRfZ3JvdXAgKGhvbCwgImhlbHAiLCAtMSk7CisrICAgICAgaG9sX3NldF9ncm91cCAoaG9sLCAidmVyc2lvbiIsIC0xKTsKKysKKysgICAgICBob2xfc29ydCAoaG9sKTsKKysgICAgfQorKworKyAgaWYgKGZsYWdzICYgKEFSR1BfSEVMUF9VU0FHRSB8IEFSR1BfSEVMUF9TSE9SVF9VU0FHRSkpCisrICAgIC8qIFByaW50IGEgc2hvcnQgYFVzYWdlOicgbWVzc2FnZS4gICovCisrICAgIHsKKysgICAgICBpbnQgZmlyc3RfcGF0dGVybiA9IDEsIG1vcmVfcGF0dGVybnM7CisrICAgICAgc2l6ZV90IG51bV9wYXR0ZXJuX2xldmVscyA9IGFyZ3BfYXJnc19sZXZlbHMgKGFyZ3ApOworKyAgICAgIGNoYXIgKnBhdHRlcm5fbGV2ZWxzID0gYWxsb2NhIChudW1fcGF0dGVybl9sZXZlbHMpOworKworKyAgICAgIG1lbXNldCAocGF0dGVybl9sZXZlbHMsIDAsIG51bV9wYXR0ZXJuX2xldmVscyk7CisrCisrICAgICAgZG8KKysgICAgICAgeworKyAgICAgICAgIGludCBvbGRfbG07CisrICAgICAgICAgaW50IG9sZF93bSA9IF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKGZzLCB1cGFyYW1zLnVzYWdlX2luZGVudCk7CisrICAgICAgICAgY2hhciAqbGV2ZWxzID0gcGF0dGVybl9sZXZlbHM7CisrCisrICAgICAgICAgaWYgKGZpcnN0X3BhdHRlcm4pCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoZnMsICIlcyAlcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLCAiVXNhZ2U6IiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKGZzLCAiJXMgJXMiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChhcmdwLT5hcmdwX2RvbWFpbiwgIiAgb3I6ICIpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOworKworKyAgICAgICAgIC8qIFdlIHNldCB0aGUgbG1hcmdpbiBhcyB3ZWxsIGFzIHRoZSB3bWFyZ2luLCBiZWNhdXNlIGhvbF91c2FnZQorKyAgICAgICAgICAgIG1hbnVhbGx5IHdyYXBzIG9wdGlvbnMgd2l0aCBuZXdsaW5lIHRvIGF2b2lkIGFubm95aW5nIGJyZWFrcy4gICovCisrICAgICAgICAgb2xkX2xtID0gX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoZnMsIHVwYXJhbXMudXNhZ2VfaW5kZW50KTsKKysKKysgICAgICAgICBpZiAoZmxhZ3MgJiBBUkdQX0hFTFBfU0hPUlRfVVNBR0UpCisrICAgICAgICAgICAvKiBKdXN0IHNob3cgd2hlcmUgdGhlIG9wdGlvbnMgZ28uICAqLworKyAgICAgICAgICAgeworKyAgICAgICAgICAgICBpZiAoaG9sLT5udW1fZW50cmllcyA+IDApCisrICAgICAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChmcywgZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFtPUFRJT04uLi5dIikpOworKyAgICAgICAgICAgfQorKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIC8qIEFjdHVhbGx5IHByaW50IHRoZSBvcHRpb25zLiAgKi8KKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgaG9sX3VzYWdlIChob2wsIGZzKTsKKysgICAgICAgICAgICAgZmxhZ3MgfD0gQVJHUF9IRUxQX1NIT1JUX1VTQUdFOyAvKiBCdXQgb25seSBkbyBzbyBvbmNlLiAgKi8KKysgICAgICAgICAgIH0KKysKKysgICAgICAgICBtb3JlX3BhdHRlcm5zID0gYXJncF9hcmdzX3VzYWdlIChhcmdwLCBzdGF0ZSwgJmxldmVscywgMSwgZnMpOworKworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKGZzLCBvbGRfd20pOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKGZzLCBvbGRfbG0pOworKworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoZnMsICdcbicpOworKyAgICAgICAgIGFueXRoaW5nID0gMTsKKysKKysgICAgICAgICBmaXJzdF9wYXR0ZXJuID0gMDsKKysgICAgICAgfQorKyAgICAgIHdoaWxlIChtb3JlX3BhdHRlcm5zKTsKKysgICAgfQorKworKyAgaWYgKGZsYWdzICYgQVJHUF9IRUxQX1BSRV9ET0MpCisrICAgIGFueXRoaW5nIHw9IGFyZ3BfZG9jIChhcmdwLCBzdGF0ZSwgMCwgMCwgMSwgZnMpOworKworKyAgaWYgKGZsYWdzICYgQVJHUF9IRUxQX1NFRSkKKysgICAgeworKyAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChmcywgZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLCAiXAorK1RyeSBgJXMgLS1oZWxwJyBvciBgJXMgLS11c2FnZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBuYW1lKTsKKysgICAgICBhbnl0aGluZyA9IDE7CisrICAgIH0KKysKKysgIGlmIChmbGFncyAmIEFSR1BfSEVMUF9MT05HKQorKyAgICAvKiBQcmludCBhIGxvbmcsIGRldGFpbGVkIGhlbHAgbWVzc2FnZS4gICovCisrICAgIHsKKysgICAgICAvKiBQcmludCBpbmZvIGFib3V0IGFsbCB0aGUgb3B0aW9ucy4gICovCisrICAgICAgaWYgKGhvbC0+bnVtX2VudHJpZXMgPiAwKQorKyAgICAgICB7CisrICAgICAgICAgaWYgKGFueXRoaW5nKQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChmcywgJ1xuJyk7CisrICAgICAgICAgaG9sX2hlbHAgKGhvbCwgc3RhdGUsIGZzKTsKKysgICAgICAgICBhbnl0aGluZyA9IDE7CisrICAgICAgIH0KKysgICAgfQorKworKyAgaWYgKGZsYWdzICYgQVJHUF9IRUxQX1BPU1RfRE9DKQorKyAgICAvKiBQcmludCBhbnkgZG9jdW1lbnRhdGlvbiBzdHJpbmdzIGF0IHRoZSBlbmQuICAqLworKyAgICBhbnl0aGluZyB8PSBhcmdwX2RvYyAoYXJncCwgc3RhdGUsIDEsIGFueXRoaW5nLCAwLCBmcyk7CisrCisrICBpZiAoKGZsYWdzICYgQVJHUF9IRUxQX0JVR19BRERSKSAmJiBhcmdwX3Byb2dyYW1fYnVnX2FkZHJlc3MpCisrICAgIHsKKysgICAgICBpZiAoYW55dGhpbmcpCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoZnMsICdcbicpOworKyAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChmcywgZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlcG9ydCBidWdzIHRvICVzLlxuIiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzKTsKKysgICAgICBhbnl0aGluZyA9IDE7CisrICAgIH0KKysKKysjaWYgX0xJQkMgfHwgKEhBVkVfRkxPQ0tGSUxFICYmIEhBVkVfRlVOTE9DS0ZJTEUpCisrICBmdW5sb2NrZmlsZSAoc3RyZWFtKTsKKysjZW5kaWYKKysKKysgIGlmIChob2wpCisrICAgIGhvbF9mcmVlIChob2wpOworKworKyAgX19hcmdwX2ZtdHN0cmVhbV9mcmVlIChmcyk7CisrfQorKworKy8qIE91dHB1dCBhIHVzYWdlIG1lc3NhZ2UgZm9yIEFSR1AgdG8gU1RSRUFNLiAgRkxBR1MgYXJlIGZyb20gdGhlIHNldAorKyAgIEFSR1BfSEVMUF8qLiAgTkFNRSBpcyB3aGF0IHRvIHVzZSB3aGVyZXZlciBhIGBwcm9ncmFtIG5hbWUnIGlzIG5lZWRlZC4gKi8KKyt2b2lkIGFyZ3BfaGVscCAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsIEZJTEUgKnN0cmVhbSwKKysgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZsYWdzLCBjaGFyICpuYW1lKQorK3sKKysgIF9oZWxwIChhcmdwLCAwLCBzdHJlYW0sIGZsYWdzLCBuYW1lKTsKKyt9CisrCisrY2hhciAqCisrX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAodm9pZCkKKyt7CisrIyBpZmRlZiBfX1VDTElCQ19IQVNfUFJPR1JBTV9JTlZPQ0FUSU9OX05BTUVfXworKy8qCisrICogdUNsaWJjIHByb3ZpZGVzIGJvdGggcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUgYW5kCisrICogcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWUKKysgKi8KKysgcmV0dXJuIChjaGFyICopIHByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lOworKyMgZWxzZQorKyAgLyogRklYTUU6IFdoYXQgbm93PyBNaWxlcyBzdWdnZXN0cyB0aGF0IGl0IGlzIGJldHRlciB0byB1c2UgTlVMTCwKKysgICAgIGJ1dCBjdXJyZW50bHkgdGhlIHZhbHVlIGlzIHBhc3NlZCBvbiBkaXJlY3RseSB0byBmcHV0c191bmxvY2tlZCwKKysgICAgIHNvIHRoYXQgcmVxdWlyZXMgbW9yZSBjaGFuZ2VzLiAqLworKyMgaWYgX19HTlVDX18KKysjICB3YXJuaW5nIE5vIHJlYXNvbmFibGUgdmFsdWUgdG8gcmV0dXJuCisrIyBlbmRpZiAvKiBfX0dOVUNfXyAqLworKyAgcmV0dXJuICIiOworKyMgZW5kaWYKKyt9CisrCisrLyogT3V0cHV0LCBpZiBhcHByb3ByaWF0ZSwgYSB1c2FnZSBtZXNzYWdlIGZvciBTVEFURSB0byBTVFJFQU0uICBGTEFHUyBhcmUKKysgICBmcm9tIHRoZSBzZXQgQVJHUF9IRUxQXyouICAqLworK3ZvaWQKKythcmdwX3N0YXRlX2hlbHAgKGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwgRklMRSAqc3RyZWFtLCB1bnNpZ25lZCBmbGFncykKKyt7CisrICBpZiAoKCFzdGF0ZSB8fCAhIChzdGF0ZS0+ZmxhZ3MgJiBBUkdQX05PX0VSUlMpKSAmJiBzdHJlYW0pCisrICAgIHsKKysgICAgICBpZiAoc3RhdGUgJiYgKHN0YXRlLT5mbGFncyAmIEFSR1BfTE9OR19PTkxZKSkKKysgICAgICAgZmxhZ3MgfD0gQVJHUF9IRUxQX0xPTkdfT05MWTsKKysKKysgICAgICBfaGVscCAoc3RhdGUgPyBzdGF0ZS0+cm9vdF9hcmdwIDogMCwgc3RhdGUsIHN0cmVhbSwgZmxhZ3MsCisrICAgICAgICAgICAgc3RhdGUgPyBzdGF0ZS0+bmFtZSA6IF9fYXJncF9zaG9ydF9wcm9ncmFtX25hbWUgKCkpOworKworKyAgICAgIGlmICghc3RhdGUgfHwgISAoc3RhdGUtPmZsYWdzICYgQVJHUF9OT19FWElUKSkKKysgICAgICAgeworKyAgICAgICAgIGlmIChmbGFncyAmIEFSR1BfSEVMUF9FWElUX0VSUikKKysgICAgICAgICAgIGV4aXQgKGFyZ3BfZXJyX2V4aXRfc3RhdHVzKTsKKysgICAgICAgICBpZiAoZmxhZ3MgJiBBUkdQX0hFTFBfRVhJVF9PSykKKysgICAgICAgICAgIGV4aXQgKDApOworKyAgICAgICB9CisrICB9CisrfQorKworKy8qIElmIGFwcHJvcHJpYXRlLCBwcmludCB0aGUgcHJpbnRmIHN0cmluZyBGTVQgYW5kIGZvbGxvd2luZyBhcmdzLCBwcmVjZWRlZAorKyAgIGJ5IHRoZSBwcm9ncmFtIG5hbWUgYW5kIGA6JywgdG8gc3RkZXJyLCBhbmQgZm9sbG93ZWQgYnkgYSBgVHJ5IC4uLiAtLWhlbHAnCisrICAgbWVzc2FnZSwgdGhlbiBleGl0ICgxKS4gICovCisrdm9pZAorK2FyZ3BfZXJyb3IgKGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCisreworKyAgaWYgKCFzdGF0ZSB8fCAhKHN0YXRlLT5mbGFncyAmIEFSR1BfTk9fRVJSUykpCisrICAgIHsKKysgICAgICBGSUxFICpzdHJlYW0gPSBzdGF0ZSA/IHN0YXRlLT5lcnJfc3RyZWFtIDogc3RkZXJyOworKworKyAgICAgIGlmIChzdHJlYW0pCisrICAgICAgIHsKKysgICAgICAgICB2YV9saXN0IGFwOworKworKyNpZiBfTElCQyB8fCAoSEFWRV9GTE9DS0ZJTEUgJiYgSEFWRV9GVU5MT0NLRklMRSkKKysgICAgICAgICBmbG9ja2ZpbGUgKHN0cmVhbSk7CisrI2VuZGlmCisrCisrICAgICAgICAgdmFfc3RhcnQgKGFwLCBmbXQpOworKworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrICAgICAgICAgY2hhciAqYnVmOworKworKyAgICAgICAgIGlmIChfSU9fdmFzcHJpbnRmICgmYnVmLCBmbXQsIGFwKSA8IDApCisrICAgICAgICAgICBidWYgPSBOVUxMOworKworKyAgICAgICAgIF9fZnhwcmludGYgKHN0cmVhbSwgIiVzOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA/IHN0YXRlLT5uYW1lIDogX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAoKSwgYnVmKTsKKysKKysgICAgICAgICBmcmVlIChidWYpOworKyNlbHNlCisrICAgICAgICAgZnB1dHNfdW5sb2NrZWQgKHN0YXRlID8gc3RhdGUtPm5hbWUgOiBfX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lICgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0pOworKyAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCc6Jywgc3RyZWFtKTsKKysgICAgICAgICBwdXRjX3VubG9ja2VkICgnICcsIHN0cmVhbSk7CisrCisrICAgICAgICAgdmZwcmludGYgKHN0cmVhbSwgZm10LCBhcCk7CisrCisrICAgICAgICAgcHV0Y191bmxvY2tlZCAoJ1xuJywgc3RyZWFtKTsKKysjZW5kaWYKKysKKysgICAgICAgICBhcmdwX3N0YXRlX2hlbHAgKHN0YXRlLCBzdHJlYW0sIEFSR1BfSEVMUF9TVERfRVJSKTsKKysKKysgICAgICAgICB2YV9lbmQgKGFwKTsKKysKKysjaWYgX0xJQkMgfHwgKEhBVkVfRkxPQ0tGSUxFICYmIEhBVkVfRlVOTE9DS0ZJTEUpCisrICAgICAgICAgZnVubG9ja2ZpbGUgKHN0cmVhbSk7CisrI2VuZGlmCisrICAgICAgIH0KKysgICAgfQorK30KKysKKysvKiBTaW1pbGFyIHRvIHRoZSBzdGFuZGFyZCBnbnUgZXJyb3ItcmVwb3J0aW5nIGZ1bmN0aW9uIGVycm9yKCksIGJ1dCB3aWxsCisrICAgcmVzcGVjdCB0aGUgQVJHUF9OT19FWElUIGFuZCBBUkdQX05PX0VSUlMgZmxhZ3MgaW4gU1RBVEUsIGFuZCB3aWxsIHByaW50CisrICAgdG8gU1RBVEUtPmVycl9zdHJlYW0uICBUaGlzIGlzIHVzZWZ1bCBmb3IgYXJndW1lbnQgcGFyc2luZyBjb2RlIHRoYXQgaXMKKysgICBzaGFyZWQgYmV0d2VlbiBwcm9ncmFtIHN0YXJ0dXAgKHdoZW4gZXhpdGluZyBpcyBkZXNpcmVkKSBhbmQgcnVudGltZQorKyAgIG9wdGlvbiBwYXJzaW5nICh3aGVuIHR5cGljYWxseSBhbiBlcnJvciBjb2RlIGlzIHJldHVybmVkIGluc3RlYWQpLiAgVGhlCisrICAgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIGFyZ3BfZXJyb3IgaXMgdGhhdCB0aGUgbGF0dGVyIGlzIGZvcgorKyAgICpwYXJzaW5nIGVycm9ycyosIGFuZCB0aGUgZm9ybWVyIGlzIGZvciBvdGhlciBwcm9ibGVtcyB0aGF0IG9jY3VyIGR1cmluZworKyAgIHBhcnNpbmcgYnV0IGRvbid0IHJlZmxlY3QgYSAoc3ludGFjdGljKSBwcm9ibGVtIHdpdGggdGhlIGlucHV0LiAgKi8KKyt2b2lkCisrYXJncF9mYWlsdXJlIChjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsIGludCBzdGF0dXMsIGludCBlcnJudW0sCisrICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCisreworKyAgaWYgKCFzdGF0ZSB8fCAhKHN0YXRlLT5mbGFncyAmIEFSR1BfTk9fRVJSUykpCisrICAgIHsKKysgICAgICBGSUxFICpzdHJlYW0gPSBzdGF0ZSA/IHN0YXRlLT5lcnJfc3RyZWFtIDogc3RkZXJyOworKworKyAgICAgIGlmIChzdHJlYW0pCisrICAgICAgIHsKKysjaWYgX0xJQkMgfHwgKEhBVkVfRkxPQ0tGSUxFICYmIEhBVkVfRlVOTE9DS0ZJTEUpCisrICAgICAgICAgZmxvY2tmaWxlIChzdHJlYW0pOworKyNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrICAgICAgICAgX19meHByaW50ZiAoc3RyZWFtLCAiJXMiLAorKyAgICAgICAgICAgICAgICAgICAgIHN0YXRlID8gc3RhdGUtPm5hbWUgOiBfX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lICgpKTsKKysjZWxzZQorKyAgICAgICAgIGZwdXRzX3VubG9ja2VkIChzdGF0ZSA/IHN0YXRlLT5uYW1lIDogX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtKTsKKysjZW5kaWYKKysKKysgICAgICAgICBpZiAoZm10KQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICB2YV9saXN0IGFwOworKworKyAgICAgICAgICAgICB2YV9zdGFydCAoYXAsIGZtdCk7CisrI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKysgICAgICAgICAgICAgY2hhciAqYnVmOworKworKyAgICAgICAgICAgICBpZiAoX0lPX3Zhc3ByaW50ZiAoJmJ1ZiwgZm10LCBhcCkgPCAwKQorKyAgICAgICAgICAgICAgIGJ1ZiA9IE5VTEw7CisrCisrICAgICAgICAgICAgIF9fZnhwcmludGYgKHN0cmVhbSwgIjogJXMiLCBidWYpOworKworKyAgICAgICAgICAgICBmcmVlIChidWYpOworKyNlbHNlCisrICAgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCc6Jywgc3RyZWFtKTsKKysgICAgICAgICAgICAgcHV0Y191bmxvY2tlZCAoJyAnLCBzdHJlYW0pOworKworKyAgICAgICAgICAgICB2ZnByaW50ZiAoc3RyZWFtLCBmbXQsIGFwKTsKKysjZW5kaWYKKysKKysgICAgICAgICAgICAgdmFfZW5kIChhcCk7CisrICAgICAgICAgICB9CisrCisrICAgICAgICAgaWYgKGVycm51bSkKKysgICAgICAgICAgIHsKKysjaWYgKGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8pIHx8IGRlZmluZWQgSEFWRV9TVFJFUlJPUl9SCisrICAgICAgICAgICAgIGNoYXIgYnVmWzIwMF07CisrI2VuZGlmCisrI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKysgICAgICAgICAgICAgX19meHByaW50ZiAoc3RyZWFtLCAiOiAlcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yX3IgKGVycm51bSwgYnVmLCBzaXplb2YgKGJ1ZikpKTsKKysjZWxzZQorKyAgICAgICAgICAgICBwdXRjX3VubG9ja2VkICgnOicsIHN0cmVhbSk7CisrICAgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCcgJywgc3RyZWFtKTsKKysjIGlmZGVmIEhBVkVfU1RSRVJST1JfUgorKyAgICAgICAgICAgICBmcHV0cyAoc3RyZXJyb3JfciAoZXJybnVtLCBidWYsIHNpemVvZiAoYnVmKSksIHN0cmVhbSk7CisrIyBlbHNlCisrICAgICAgICAgICAgIGZwdXRzIChzdHJlcnJvciAoZXJybnVtKSwgc3RyZWFtKTsKKysjIGVuZGlmCisrI2VuZGlmCisrICAgICAgICAgICB9CisrCisrI2lmZGVmIFVTRV9JTl9MSUJJTworKyAgICAgICAgIGlmIChfSU9fZndpZGUgKHN0cmVhbSwgMCkgPiAwKQorKyAgICAgICAgICAgcHV0d2NfdW5sb2NrZWQgKEwnXG4nLCBzdHJlYW0pOworKyAgICAgICAgIGVsc2UKKysjZW5kaWYKKysgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCdcbicsIHN0cmVhbSk7CisrCisrI2lmIF9MSUJDIHx8IChIQVZFX0ZMT0NLRklMRSAmJiBIQVZFX0ZVTkxPQ0tGSUxFKQorKyAgICAgICAgIGZ1bmxvY2tmaWxlIChzdHJlYW0pOworKyNlbmRpZgorKworKyAgICAgICAgIGlmIChzdGF0dXMgJiYgKCFzdGF0ZSB8fCAhKHN0YXRlLT5mbGFncyAmIEFSR1BfTk9fRVhJVCkpKQorKyAgICAgICAgICAgZXhpdCAoc3RhdHVzKTsKKysgICAgICAgfQorKyAgICB9CisrfQorZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtcGFyc2UuYyBiL2xpYnVhcmdwL2FyZ3AtcGFyc2UuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg2YjJiMjQKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtcGFyc2UuYworQEAgLTAsMCArMSw5NDkgQEAKKysvKiBIaWVyYXJjaGlhbCBhcmd1bWVudCBwYXJzaW5nLCBsYXllcmVkIG92ZXIgZ2V0b3B0CisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDAsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLgorKworKyAgIE1vZGlmaWVkIGZvciB1Q2xpYmMgYnk6IFNhbHZhdG9yZSBDcm8gPHNhbHZhdG9yZS5jcm8gYXQgc3QuY29tPgorKyovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrLyogQUlYIHJlcXVpcmVzIHRoaXMgdG8gYmUgdGhlIGZpcnN0IHRoaW5nIGluIHRoZSBmaWxlLiAgKi8KKysjaWZuZGVmIF9fR05VQ19fCisrIyBpZiBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKysjICBpbmNsdWRlIDxhbGxvY2EuaD4KKysjIGVsc2UKKysjICBpZmRlZiBfQUlYCisrI3ByYWdtYSBhbGxvY2EKKysjICBlbHNlCisrIyAgIGlmbmRlZiBhbGxvY2EgLyogcHJlZGVmaW5lZCBieSBIUCBjYyArT2xpYmNhbGxzICovCisrY2hhciAqYWxsb2NhICgpOworKyMgICBlbmRpZgorKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaW5jbHVkZSA8Z2V0b3B0Lmg+CisrI2luY2x1ZGUgPGJpdHMvZ2V0b3B0X2ludC5oPgorKworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZm5kZWYgXworKy8qIFRoaXMgaXMgZm9yIG90aGVyIEdOVSBkaXN0cmlidXRpb25zIHdpdGggaW50ZXJuYXRpb25hbGl6ZWQgbWVzc2FnZXMuCisrICAgV2hlbiBjb21waWxpbmcgbGliYywgdGhlIF8gbWFjcm8gaXMgcHJlZGVmaW5lZC4gICovCisrIyBpZiAoZGVmaW5lZCBIQVZFX0xJQklOVExfSCB8fCBkZWZpbmVkIF9MSUJDKSAmJiBkZWZpbmVkIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrIyAgaW5jbHVkZSA8bGliaW50bC5oPgorKyMgIGlmZGVmIF9MSUJDCisrIyAgIHVuZGVmIGRnZXR0ZXh0CisrIyAgIGRlZmluZSBkZ2V0dGV4dChkb21haW4sIG1zZ2lkKSBcCisrICBJTlRVU0UoX19kY2dldHRleHQpIChkb21haW4sIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjICBlbmRpZgorKyMgZWxzZQorKyMgIGRlZmluZSBkZ2V0dGV4dChkb21haW4sIG1zZ2lkKSAobXNnaWQpCisrIyAgZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKysjIGVuZGlmCisrI2VuZGlmCisrI2lmbmRlZiBOXworKyMgZGVmaW5lIE5fKG1zZ2lkKSAobXNnaWQpCisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKysvKiBHZXRvcHQgcmV0dXJuIHZhbHVlcy4gICovCisrI2RlZmluZSBLRVlfRU5EICgtMSkgICAgICAgICAgIC8qIFRoZSBlbmQgb2YgdGhlIG9wdGlvbnMuICAqLworKyNkZWZpbmUgS0VZX0FSRyAxICAgICAgICAgICAgICAvKiBBIG5vbi1vcHRpb24gYXJndW1lbnQuICAqLworKyNkZWZpbmUgS0VZX0VSUiAnPycgICAgICAgICAgICAvKiBBbiBlcnJvciBwYXJzaW5nIHRoZSBvcHRpb25zLiAgKi8KKysKKysvKiBUaGUgbWV0YS1hcmd1bWVudCB1c2VkIHRvIHByZXZlbnQgYW55IGZ1cnRoZXIgYXJndW1lbnRzIGJlaW5nIGludGVycHJldGVkCisrICAgYXMgb3B0aW9ucy4gICovCisrI2RlZmluZSBRVU9URSAiLS0iCisrCisrLyogVGhlIG51bWJlciBvZiBiaXRzIHdlIHN0ZWFsIGluIGEgbG9uZy1vcHRpb24gdmFsdWUgZm9yIG91ciBvd24gdXNlLiAgKi8KKysjZGVmaW5lIEdST1VQX0JJVFMgQ0hBUl9CSVQKKysKKysvKiBUaGUgbnVtYmVyIG9mIGJpdHMgYXZhaWxhYmxlIGZvciB0aGUgdXNlciB2YWx1ZS4gICovCisrI2RlZmluZSBVU0VSX0JJVFMgKChzaXplb2YgKChzdHJ1Y3Qgb3B0aW9uICopMCktPnZhbCAqIENIQVJfQklUKSAtIEdST1VQX0JJVFMpCisrI2RlZmluZSBVU0VSX01BU0sgKCgxIDw8IFVTRVJfQklUUykgLSAxKQorKworKy8qIEVaIGFsaWFzIGZvciBBUkdQX0VSUl9VTktOT1dOLiAgKi8KKysjZGVmaW5lIEVCQURLRVkgQVJHUF9FUlJfVU5LTk9XTgorKworKy8qIERlZmF1bHQgb3B0aW9ucy4gICovCisrCisrLyogV2hlbiBhcmdwIGlzIGdpdmVuIHRoZSAtLUhBTkcgc3dpdGNoLCBfQVJHUF9IQU5HIGlzIHNldCBhbmQgYXJncCB3aWxsIHNsZWVwCisrICAgZm9yIG9uZSBzZWNvbmQgaW50ZXJ2YWxzLCBkZWNyZW1lbnRpbmcgX0FSR1BfSEFORyB1bnRpbCBpdCdzIHplcm8uICBUaHVzCisrICAgeW91IGNhbiBmb3JjZSB0aGUgcHJvZ3JhbSB0byBjb250aW51ZSBieSBhdHRhY2hpbmcgYSBkZWJ1Z2dlciBhbmQgc2V0dGluZworKyAgIGl0IHRvIDAgeW91cnNlbGYuICAqLworK3N0YXRpYyB2b2xhdGlsZSBpbnQgX2FyZ3BfaGFuZzsKKysKKysjZGVmaW5lIE9QVF9QUk9HTkFNRSAgIC0yCisrI2RlZmluZSBPUFRfVVNBR0UgICAgICAtMworKyNkZWZpbmUgT1BUX0hBTkcgICAgICAgLTQKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIGFyZ3BfZGVmYXVsdF9vcHRpb25zW10gPQorK3sKKysgIHsiaGVscCIsICAgICAgICc/JywgICAgICAgICAgMCwgMCwgIE5fKCJHaXZlIHRoaXMgaGVscCBsaXN0IiksIC0xfSwKKysgIHsidXNhZ2UiLCAgICAgIE9QVF9VU0FHRSwgICAgMCwgMCwgIE5fKCJHaXZlIGEgc2hvcnQgdXNhZ2UgbWVzc2FnZSIpfSwKKysgIHsicHJvZ3JhbS1uYW1lIixPUFRfUFJPR05BTUUsIk5BTUUiLCBPUFRJT05fSElEREVOLCBOXygiU2V0IHRoZSBwcm9ncmFtIG5hbWUiKX0sCisrICB7IkhBTkciLCAgICAgICBPUFRfSEFORywgICAgIlNFQ1MiLCBPUFRJT05fQVJHX09QVElPTkFMIHwgT1BUSU9OX0hJRERFTiwKKysgICAgIE5fKCJIYW5nIGZvciBTRUNTIHNlY29uZHMgKGRlZmF1bHQgMzYwMCkiKX0sCisrICB7MCwgMH0KKyt9OworKworK3N0YXRpYyBlcnJvcl90CisrYXJncF9kZWZhdWx0X3BhcnNlciAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgc3dpdGNoIChrZXkpCisrICAgIHsKKysgICAgY2FzZSAnPyc6CisrICAgICAgYXJncF9zdGF0ZV9oZWxwIChzdGF0ZSwgc3RhdGUtPm91dF9zdHJlYW0sIEFSR1BfSEVMUF9TVERfSEVMUCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgT1BUX1VTQUdFOgorKyAgICAgIGFyZ3Bfc3RhdGVfaGVscCAoc3RhdGUsIHN0YXRlLT5vdXRfc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAgICBBUkdQX0hFTFBfVVNBR0UgfCBBUkdQX0hFTFBfRVhJVF9PSyk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgT1BUX1BST0dOQU1FOiAgICAgICAgIC8qIFNldCB0aGUgcHJvZ3JhbSBuYW1lLiAgKi8KKysjaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX0RFQ0xfUFJPR1JBTV9JTlZPQ0FUSU9OX05BTUUKKysgICAgICBwcm9ncmFtX2ludm9jYXRpb25fbmFtZSA9IGFyZzsKKysjZW5kaWYKKysgICAgICAvKiBbTm90ZSB0aGF0IHNvbWUgc3lzdGVtcyBvbmx5IGhhdmUgUFJPR1JBTV9JTlZPQ0FUSU9OX1NIT1JUX05BTUUgKGFrYQorKyAgICAgICAgX19QUk9HTkFNRSksIGluIHdoaWNoIGNhc2UsIFBST0dSQU1fSU5WT0NBVElPTl9OQU1FIGlzIGp1c3QgZGVmaW5lZAorKyAgICAgICAgdG8gYmUgdGhhdCwgc28gd2UgaGF2ZSB0byBiZSBhIGJpdCBjYXJlZnVsIGhlcmUuXSAgKi8KKysKKysgICAgICAvKiBVcGRhdGUgd2hhdCB3ZSB1c2UgZm9yIG1lc3NhZ2VzLiAgKi8KKysgICAgICBzdGF0ZS0+bmFtZSA9IHN0cnJjaHIgKGFyZywgJy8nKTsKKysgICAgICBpZiAoc3RhdGUtPm5hbWUpCisrICAgICAgIHN0YXRlLT5uYW1lKys7CisrICAgICAgZWxzZQorKyAgICAgICBzdGF0ZS0+bmFtZSA9IGFyZzsKKysKKysjaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX0RFQ0xfUFJPR1JBTV9JTlZPQ0FUSU9OX1NIT1JUX05BTUUKKysgICAgICBwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZSA9IHN0YXRlLT5uYW1lOworKyNlbmRpZgorKworKyAgICAgIGlmICgoc3RhdGUtPmZsYWdzICYgKEFSR1BfUEFSU0VfQVJHVjAgfCBBUkdQX05PX0VSUlMpKQorKyAgICAgICAgID09IEFSR1BfUEFSU0VfQVJHVjApCisrICAgICAgIC8qIFVwZGF0ZSB3aGF0IGdldG9wdCB1c2VzIHRvby4gICovCisrICAgICAgIHN0YXRlLT5hcmd2WzBdID0gYXJnOworKworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIE9QVF9IQU5HOgorKyAgICAgIF9hcmdwX2hhbmcgPSBhdG9pIChhcmcgPyBhcmcgOiAiMzYwMCIpOworKyAgICAgIHdoaWxlIChfYXJncF9oYW5nLS0gPiAwKQorKyAgICAgICBzbGVlcCAoMSk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEVCQURLRVk7CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3AgYXJncF9kZWZhdWx0X2FyZ3AgPQorKyAge2FyZ3BfZGVmYXVsdF9vcHRpb25zLCAmYXJncF9kZWZhdWx0X3BhcnNlciwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgImxpYmMifTsKKysKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIGFyZ3BfdmVyc2lvbl9vcHRpb25zW10gPQorK3sKKysgIHsidmVyc2lvbiIsICAgICdWJywgICAgICAgICAgMCwgMCwgIE5fKCJQcmludCBwcm9ncmFtIHZlcnNpb24iKSwgLTF9LAorKyAgezAsIDB9CisrfTsKKysKKytzdGF0aWMgZXJyb3JfdAorK2FyZ3BfdmVyc2lvbl9wYXJzZXIgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIHN3aXRjaCAoa2V5KQorKyAgICB7CisrICAgIGNhc2UgJ1YnOgorKyAgICAgIGlmIChhcmdwX3Byb2dyYW1fdmVyc2lvbl9ob29rKQorKyAgICAgICAoKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uX2hvb2spIChzdGF0ZS0+b3V0X3N0cmVhbSwgc3RhdGUpOworKyAgICAgIGVsc2UgaWYgKGFyZ3BfcHJvZ3JhbV92ZXJzaW9uKQorKyAgICAgICBmcHJpbnRmIChzdGF0ZS0+b3V0X3N0cmVhbSwgIiVzXG4iLCBhcmdwX3Byb2dyYW1fdmVyc2lvbik7CisrICAgICAgZWxzZQorKyAgICAgICBhcmdwX2Vycm9yIChzdGF0ZSwgZGdldHRleHQgKHN0YXRlLT5yb290X2FyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihQUk9HUkFNIEVSUk9SKSBObyB2ZXJzaW9uIGtub3duIT8iKSk7CisrICAgICAgaWYgKCEgKHN0YXRlLT5mbGFncyAmIEFSR1BfTk9fRVhJVCkpCisrICAgICAgIGV4aXQgKDApOworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBFQkFES0VZOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwIGFyZ3BfdmVyc2lvbl9hcmdwID0KKysgIHthcmdwX3ZlcnNpb25fb3B0aW9ucywgJmFyZ3BfdmVyc2lvbl9wYXJzZXIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICJsaWJjIn07CisrCisrLyogUmV0dXJucyB0aGUgb2Zmc2V0IGludG8gdGhlIGdldG9wdCBsb25nIG9wdGlvbnMgYXJyYXkgTE9OR19PUFRJT05TIG9mIGEKKysgICBsb25nIG9wdGlvbiB3aXRoIGNhbGxlZCBOQU1FLCBvciAtMSBpZiBub25lIGlzIGZvdW5kLiAgUGFzc2luZyBOVUxMIGFzCisrICAgTkFNRSB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIG9wdGlvbnMuICAqLworK3N0YXRpYyBpbnQKKytmaW5kX2xvbmdfb3B0aW9uIChzdHJ1Y3Qgb3B0aW9uICpsb25nX29wdGlvbnMsIGNvbnN0IGNoYXIgKm5hbWUpCisreworKyAgc3RydWN0IG9wdGlvbiAqbCA9IGxvbmdfb3B0aW9uczsKKysgIHdoaWxlIChsLT5uYW1lICE9IE5VTEwpCisrICAgIGlmIChuYW1lICE9IE5VTEwgJiYgc3RyY21wIChsLT5uYW1lLCBuYW1lKSA9PSAwKQorKyAgICAgIHJldHVybiBsIC0gbG9uZ19vcHRpb25zOworKyAgICBlbHNlCisrICAgICAgbCsrOworKyAgaWYgKG5hbWUgPT0gTlVMTCkKKysgICAgcmV0dXJuIGwgLSBsb25nX29wdGlvbnM7CisrICBlbHNlCisrICAgIHJldHVybiAtMTsKKyt9CisrCisrCisrLyogVGhlIHN0YXRlIG9mIGEgYGdyb3VwJyBkdXJpbmcgcGFyc2luZy4gIEVhY2ggZ3JvdXAgY29ycmVzcG9uZHMgdG8gYQorKyAgIHBhcnRpY3VsYXIgYXJncCBzdHJ1Y3R1cmUgZnJvbSB0aGUgdHJlZSBvZiBzdWNoIGRlc2NlbmRpbmcgZnJvbSB0aGUgdG9wCisrICAgbGV2ZWwgYXJncCBwYXNzZWQgdG8gYXJncF9wYXJzZS4gICovCisrc3RydWN0IGdyb3VwCisreworKyAgLyogVGhpcyBncm91cCdzIHBhcnNpbmcgZnVuY3Rpb24uICAqLworKyAgYXJncF9wYXJzZXJfdCBwYXJzZXI7CisrCisrICAvKiBXaGljaCBhcmdwIHRoaXMgZ3JvdXAgaXMgZnJvbS4gICovCisrICBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncDsKKysKKysgIC8qIFBvaW50cyB0byB0aGUgcG9pbnQgaW4gU0hPUlRfT1BUUyBjb3JyZXNwb25kaW5nIHRvIHRoZSBlbmQgb2YgdGhlIHNob3J0CisrICAgICBvcHRpb25zIGZvciB0aGlzIGdyb3VwLiAgV2UgdXNlIGl0IHRvIGRldGVybWluZSBmcm9tIHdoaWNoIGdyb3VwIGEKKysgICAgIHBhcnRpY3VsYXIgc2hvcnQgb3B0aW9ucyBpcyBmcm9tLiAgKi8KKysgIGNoYXIgKnNob3J0X2VuZDsKKysKKysgIC8qIFRoZSBudW1iZXIgb2Ygbm9uLW9wdGlvbiBhcmdzIHN1Y2Vzc2Z1bGx5IGhhbmRsZWQgYnkgdGhpcyBwYXJzZXIuICAqLworKyAgdW5zaWduZWQgYXJnc19wcm9jZXNzZWQ7CisrCisrICAvKiBUaGlzIGdyb3VwJ3MgcGFyc2VyJ3MgcGFyZW50J3MgZ3JvdXAuICAqLworKyAgc3RydWN0IGdyb3VwICpwYXJlbnQ7CisrICB1bnNpZ25lZCBwYXJlbnRfaW5kZXg7ICAgICAgIC8qIEFuZCB0aGUgb3VyIHBvc2l0aW9uIGluIHRoZSBwYXJlbnQuICAgKi8KKysKKysgIC8qIFRoZXNlIGZpZWxkcyBhcmUgc3dhcHBlZCBpbnRvIGFuZCBvdXQgb2YgdGhlIHN0YXRlIHN0cnVjdHVyZSB3aGVuCisrICAgICBjYWxsaW5nIHRoaXMgZ3JvdXAncyBwYXJzZXIuICAqLworKyAgdm9pZCAqaW5wdXQsICoqY2hpbGRfaW5wdXRzOworKyAgdm9pZCAqaG9vazsKKyt9OworKworKy8qIENhbGwgR1JPVVAncyBwYXJzZXIgd2l0aCBLRVkgYW5kIEFSRywgc3dhcHBpbmcgYW55IGdyb3VwLXNwZWNpZmljIGluZm8KKysgICBmcm9tIFNUQVRFIGJlZm9yZSBjYWxsaW5nLCBhbmQgYmFjayBpbnRvIHN0YXRlIGFmdGVyd2FyZHMuICBJZiBHUk9VUCBoYXMKKysgICBubyBwYXJzZXIsIEVCQURLRVkgaXMgcmV0dXJuZWQuICAqLworK3N0YXRpYyBlcnJvcl90CisrZ3JvdXBfcGFyc2UgKHN0cnVjdCBncm91cCAqZ3JvdXAsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwgaW50IGtleSwgY2hhciAqYXJnKQorK3sKKysgIGlmIChncm91cC0+cGFyc2VyKQorKyAgICB7CisrICAgICAgZXJyb3JfdCBlcnI7CisrICAgICAgc3RhdGUtPmhvb2sgPSBncm91cC0+aG9vazsKKysgICAgICBzdGF0ZS0+aW5wdXQgPSBncm91cC0+aW5wdXQ7CisrICAgICAgc3RhdGUtPmNoaWxkX2lucHV0cyA9IGdyb3VwLT5jaGlsZF9pbnB1dHM7CisrICAgICAgc3RhdGUtPmFyZ19udW0gPSBncm91cC0+YXJnc19wcm9jZXNzZWQ7CisrICAgICAgZXJyID0gKCpncm91cC0+cGFyc2VyKShrZXksIGFyZywgc3RhdGUpOworKyAgICAgIGdyb3VwLT5ob29rID0gc3RhdGUtPmhvb2s7CisrICAgICAgcmV0dXJuIGVycjsKKysgICAgfQorKyAgZWxzZQorKyAgICByZXR1cm4gRUJBREtFWTsKKyt9CisrCisrc3RydWN0IHBhcnNlcgorK3sKKysgIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwOworKworKyAgLyogU0hPUlRfT1BUUyBpcyB0aGUgZ2V0b3B0IHNob3J0IG9wdGlvbnMgc3RyaW5nIGZvciB0aGUgdW5pb24gb2YgYWxsIHRoZQorKyAgICAgZ3JvdXBzIG9mIG9wdGlvbnMuICAqLworKyAgY2hhciAqc2hvcnRfb3B0czsKKysgIC8qIExPTkdfT1BUUyBpcyB0aGUgYXJyYXkgb2YgZ2V0b3AgbG9uZyBvcHRpb24gc3RydWN0dXJlcyBmb3IgdGhlIHVuaW9uIG9mCisrICAgICBhbGwgdGhlIGdyb3VwcyBvZiBvcHRpb25zLiAgKi8KKysgIHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0czsKKysgIC8qIE9QVF9EQVRBIGlzIHRoZSBnZXRvcHQgZGF0YSB1c2VkIGZvciB0aGUgcmUtZW50cmFudCBnZXRvcHQuICAqLworKyAgc3RydWN0IF9nZXRvcHRfZGF0YSBvcHRfZGF0YTsKKysKKysgIC8qIFN0YXRlcyBvZiB0aGUgdmFyaW91cyBwYXJzaW5nIGdyb3Vwcy4gICovCisrICBzdHJ1Y3QgZ3JvdXAgKmdyb3VwczsKKysgIC8qIFRoZSBlbmQgb2YgdGhlIEdST1VQUyBhcnJheS4gICovCisrICBzdHJ1Y3QgZ3JvdXAgKmVncm91cDsKKysgIC8qIEFuIHZlY3RvciBjb250YWluaW5nIHN0b3JhZ2UgZm9yIHRoZSBDSElMRF9JTlBVVFMgZmllbGQgaW4gYWxsIGdyb3Vwcy4gICovCisrICB2b2lkICoqY2hpbGRfaW5wdXRzOworKworKyAgLyogVHJ1ZSBpZiB3ZSB0aGluayB1c2luZyBnZXRvcHQgaXMgc3RpbGwgdXNlZnVsOyBpZiBmYWxzZSwgdGhlbgorKyAgICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUganVzdCBwYXNzZWQgdmVyYmF0aW0gd2l0aCBBUkdQX0tFWV9BUkcuICBUaGlzIGlzCisrICAgICBjbGVhcmVkIHdoZW5ldmVyIGdldG9wdCByZXR1cm5zIEtFWV9FTkQsIGJ1dCBtYXkgYmUgc2V0IGFnYWluIGlmIHRoZSB1c2VyCisrICAgICBtb3ZlcyB0aGUgbmV4dCBhcmd1bWVudCBwb2ludGVyIGJhY2t3YXJkcy4gICovCisrICBpbnQgdHJ5X2dldG9wdDsKKysKKysgIC8qIFN0YXRlIGJsb2NrIHN1cHBsaWVkIHRvIHBhcnNpbmcgcm91dGluZXMuICAqLworKyAgc3RydWN0IGFyZ3Bfc3RhdGUgc3RhdGU7CisrCisrICAvKiBNZW1vcnkgdXNlZCBieSB0aGlzIHBhcnNlci4gICovCisrICB2b2lkICpzdG9yYWdlOworK307CisrCisrLyogVGhlIG5leHQgdXNhYmxlIGVudHJpZXMgaW4gdGhlIHZhcmlvdXMgcGFyc2VyIHRhYmxlcyBiZWluZyBmaWxsZWQgaW4gYnkKKysgICBjb252ZXJ0X29wdGlvbnMuICAqLworK3N0cnVjdCBwYXJzZXJfY29udmVydF9zdGF0ZQorK3sKKysgIHN0cnVjdCBwYXJzZXIgKnBhcnNlcjsKKysgIGNoYXIgKnNob3J0X2VuZDsKKysgIHN0cnVjdCBvcHRpb24gKmxvbmdfZW5kOworKyAgdm9pZCAqKmNoaWxkX2lucHV0c19lbmQ7CisrfTsKKysKKysvKiBDb252ZXJ0cyBhbGwgb3B0aW9ucyBpbiBBUkdQICh3aGljaCBpcyBwdXQgaW4gR1JPVVApIGFuZCBhbmNlc3RvcnMKKysgICBpbnRvIGdldG9wdCBvcHRpb25zIHN0b3JlZCBpbiBTSE9SVF9PUFRTIGFuZCBMT05HX09QVFM7IFNIT1JUX0VORCBhbmQKKysgICBDVlQtPkxPTkdfRU5EIGFyZSB0aGUgcG9pbnRzIGF0IHdoaWNoIG5ldyBvcHRpb25zIGFyZSBhZGRlZC4gIFJldHVybnMgdGhlCisrICAgbmV4dCB1bnVzZWQgZ3JvdXAgZW50cnkuICBDVlQgaG9sZHMgc3RhdGUgdXNlZCBkdXJpbmcgdGhlIGNvbnZlcnNpb24uICAqLworK3N0YXRpYyBzdHJ1Y3QgZ3JvdXAgKgorK2NvbnZlcnRfb3B0aW9ucyAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsCisrICAgICAgICAgICAgICAgIHN0cnVjdCBncm91cCAqcGFyZW50LCB1bnNpZ25lZCBwYXJlbnRfaW5kZXgsCisrICAgICAgICAgICAgICAgIHN0cnVjdCBncm91cCAqZ3JvdXAsIHN0cnVjdCBwYXJzZXJfY29udmVydF9zdGF0ZSAqY3Z0KQorK3sKKysgIC8qIFJFQUwgaXMgdGhlIG1vc3QgcmVjZW50IG5vbi1hbGlhcyB2YWx1ZSBvZiBPUFQuICAqLworKyAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpyZWFsID0gYXJncC0+b3B0aW9uczsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZHJlbiA9IGFyZ3AtPmNoaWxkcmVuOworKworKyAgaWYgKHJlYWwgfHwgYXJncC0+cGFyc2VyKQorKyAgICB7CisrICAgICAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQ7CisrCisrICAgICAgaWYgKHJlYWwpCisrICAgICAgIGZvciAob3B0ID0gcmVhbDsgIV9fb3B0aW9uX2lzX2VuZCAob3B0KTsgb3B0KyspCisrICAgICAgICAgeworKyAgICAgICAgICAgaWYgKCEgKG9wdC0+ZmxhZ3MgJiBPUFRJT05fQUxJQVMpKQorKyAgICAgICAgICAgICAvKiBPUFQgaXNuJ3QgYW4gYWxpYXMsIHNvIHdlIGNhbiB1c2UgdmFsdWVzIGZyb20gaXQuICAqLworKyAgICAgICAgICAgICByZWFsID0gb3B0OworKworKyAgICAgICAgICAgaWYgKCEgKHJlYWwtPmZsYWdzICYgT1BUSU9OX0RPQykpCisrICAgICAgICAgICAgIC8qIEEgcmVhbCBvcHRpb24gKG5vdCBqdXN0IGRvY3VtZW50YXRpb24pLiAgKi8KKysgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgIGlmIChfX29wdGlvbl9pc19zaG9ydCAob3B0KSkKKysgICAgICAgICAgICAgICAgIC8qIE9QVCBjYW4gYmUgdXNlZCBhcyBhIHNob3J0IG9wdGlvbi4gICovCisrICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICpjdnQtPnNob3J0X2VuZCsrID0gb3B0LT5rZXk7CisrICAgICAgICAgICAgICAgICAgIGlmIChyZWFsLT5hcmcpCisrICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgKmN2dC0+c2hvcnRfZW5kKysgPSAnOic7CisrICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhbC0+ZmxhZ3MgJiBPUFRJT05fQVJHX09QVElPTkFMKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAqY3Z0LT5zaG9ydF9lbmQrKyA9ICc6JzsKKysgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICpjdnQtPnNob3J0X2VuZCA9ICdcMCc7IC8qIGtlZXAgMCB0ZXJtaW5hdGVkICovCisrICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgaWYgKG9wdC0+bmFtZQorKyAgICAgICAgICAgICAgICAgICAmJiBmaW5kX2xvbmdfb3B0aW9uIChjdnQtPnBhcnNlci0+bG9uZ19vcHRzLCBvcHQtPm5hbWUpIDwgMCkKKysgICAgICAgICAgICAgICAgIC8qIE9QVCBjYW4gYmUgdXNlZCBhcyBhIGxvbmcgb3B0aW9uLiAgKi8KKysgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgY3Z0LT5sb25nX2VuZC0+bmFtZSA9IG9wdC0+bmFtZTsKKysgICAgICAgICAgICAgICAgICAgY3Z0LT5sb25nX2VuZC0+aGFzX2FyZyA9CisrICAgICAgICAgICAgICAgICAgICAgKHJlYWwtPmFyZworKyAgICAgICAgICAgICAgICAgICAgICA/IChyZWFsLT5mbGFncyAmIE9QVElPTl9BUkdfT1BUSU9OQUwKKysgICAgICAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25hbF9hcmd1bWVudAorKyAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlcXVpcmVkX2FyZ3VtZW50KQorKyAgICAgICAgICAgICAgICAgICAgICA6IG5vX2FyZ3VtZW50KTsKKysgICAgICAgICAgICAgICAgICAgY3Z0LT5sb25nX2VuZC0+ZmxhZyA9IDA7CisrICAgICAgICAgICAgICAgICAgIC8qIHdlIGFkZCBhIGRpc2FtYmlndWF0aW5nIGNvZGUgdG8gYWxsIHRoZSB1c2VyJ3MKKysgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzICh3aGljaCBpcyByZW1vdmVkIGJlZm9yZSB3ZSBhY3R1YWxseSBjYWxsCisrICAgICAgICAgICAgICAgICAgICAgIHRoZSBmdW5jdGlvbiB0byBwYXJzZSB0aGUgdmFsdWUpOyB0aGlzIG1lYW5zIHRoYXQKKysgICAgICAgICAgICAgICAgICAgICAgdGhlIHVzZXIgbG9zZXMgdXNlIG9mIHRoZSBoaWdoIDggYml0cyBpbiBhbGwgaGlzCisrICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyAodGhlIHNpZ24gb2YgdGhlIGxvd2VyIGJpdHMgaXMgcHJlc2VydmVkCisrICAgICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIpLi4uICAqLworKyAgICAgICAgICAgICAgICAgICBjdnQtPmxvbmdfZW5kLT52YWwgPQorKyAgICAgICAgICAgICAgICAgICAgICgob3B0LT5rZXkgfCByZWFsLT5rZXkpICYgVVNFUl9NQVNLKQorKyAgICAgICAgICAgICAgICAgICAgICsgKCgoZ3JvdXAgLSBjdnQtPnBhcnNlci0+Z3JvdXBzKSArIDEpIDw8IFVTRVJfQklUUyk7CisrCisrICAgICAgICAgICAgICAgICAgIC8qIEtlZXAgdGhlIExPTkdfT1BUUyBsaXN0IHRlcm1pbmF0ZWQuICAqLworKyAgICAgICAgICAgICAgICAgICAoKytjdnQtPmxvbmdfZW5kKS0+bmFtZSA9IE5VTEw7CisrICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgIH0KKysgICAgICAgICAgIH0KKysKKysgICAgICBncm91cC0+cGFyc2VyID0gYXJncC0+cGFyc2VyOworKyAgICAgIGdyb3VwLT5hcmdwID0gYXJncDsKKysgICAgICBncm91cC0+c2hvcnRfZW5kID0gY3Z0LT5zaG9ydF9lbmQ7CisrICAgICAgZ3JvdXAtPmFyZ3NfcHJvY2Vzc2VkID0gMDsKKysgICAgICBncm91cC0+cGFyZW50ID0gcGFyZW50OworKyAgICAgIGdyb3VwLT5wYXJlbnRfaW5kZXggPSBwYXJlbnRfaW5kZXg7CisrICAgICAgZ3JvdXAtPmlucHV0ID0gMDsKKysgICAgICBncm91cC0+aG9vayA9IDA7CisrICAgICAgZ3JvdXAtPmNoaWxkX2lucHV0cyA9IDA7CisrCisrICAgICAgaWYgKGNoaWxkcmVuKQorKyAgICAgICAvKiBBc3NpZ24gR1JPVVAncyBDSElMRF9JTlBVVFMgZmllbGQgc29tZSBzcGFjZSBmcm9tCisrICAgICAgICAgICBDVlQtPmNoaWxkX2lucHV0c19lbmQuKi8KKysgICAgICAgeworKyAgICAgICAgIHVuc2lnbmVkIG51bV9jaGlsZHJlbiA9IDA7CisrICAgICAgICAgd2hpbGUgKGNoaWxkcmVuW251bV9jaGlsZHJlbl0uYXJncCkKKysgICAgICAgICAgIG51bV9jaGlsZHJlbisrOworKyAgICAgICAgIGdyb3VwLT5jaGlsZF9pbnB1dHMgPSBjdnQtPmNoaWxkX2lucHV0c19lbmQ7CisrICAgICAgICAgY3Z0LT5jaGlsZF9pbnB1dHNfZW5kICs9IG51bV9jaGlsZHJlbjsKKysgICAgICAgfQorKworKyAgICAgIHBhcmVudCA9IGdyb3VwKys7CisrICAgIH0KKysgIGVsc2UKKysgICAgcGFyZW50ID0gMDsKKysKKysgIGlmIChjaGlsZHJlbikKKysgICAgeworKyAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKysgICAgICB3aGlsZSAoY2hpbGRyZW4tPmFyZ3ApCisrICAgICAgIGdyb3VwID0KKysgICAgICAgICBjb252ZXJ0X29wdGlvbnMgKGNoaWxkcmVuKystPmFyZ3AsIHBhcmVudCwgaW5kZXgrKywgZ3JvdXAsIGN2dCk7CisrICAgIH0KKysKKysgIHJldHVybiBncm91cDsKKyt9CisrCisrLyogRmluZCB0aGUgbWVyZ2VkIHNldCBvZiBnZXRvcHQgb3B0aW9ucywgd2l0aCBrZXlzIGFwcHJvcGlhdGVseSBwcmVmaXhlZC4gKi8KKytzdGF0aWMgdm9pZAorK3BhcnNlcl9jb252ZXJ0IChzdHJ1Y3QgcGFyc2VyICpwYXJzZXIsIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCBpbnQgZmxhZ3MpCisreworKyAgc3RydWN0IHBhcnNlcl9jb252ZXJ0X3N0YXRlIGN2dDsKKysKKysgIGN2dC5wYXJzZXIgPSBwYXJzZXI7CisrICBjdnQuc2hvcnRfZW5kID0gcGFyc2VyLT5zaG9ydF9vcHRzOworKyAgY3Z0LmxvbmdfZW5kID0gcGFyc2VyLT5sb25nX29wdHM7CisrICBjdnQuY2hpbGRfaW5wdXRzX2VuZCA9IHBhcnNlci0+Y2hpbGRfaW5wdXRzOworKworKyAgaWYgKGZsYWdzICYgQVJHUF9JTl9PUkRFUikKKysgICAgKmN2dC5zaG9ydF9lbmQrKyA9ICctJzsKKysgIGVsc2UgaWYgKGZsYWdzICYgQVJHUF9OT19BUkdTKQorKyAgICAqY3Z0LnNob3J0X2VuZCsrID0gJysnOworKyAgKmN2dC5zaG9ydF9lbmQgPSAnXDAnOworKworKyAgY3Z0LmxvbmdfZW5kLT5uYW1lID0gTlVMTDsKKysKKysgIHBhcnNlci0+YXJncCA9IGFyZ3A7CisrCisrICBpZiAoYXJncCkKKysgICAgcGFyc2VyLT5lZ3JvdXAgPSBjb252ZXJ0X29wdGlvbnMgKGFyZ3AsIDAsIDAsIHBhcnNlci0+Z3JvdXBzLCAmY3Z0KTsKKysgIGVsc2UKKysgICAgcGFyc2VyLT5lZ3JvdXAgPSBwYXJzZXItPmdyb3VwczsgLyogTm8gcGFyc2VycyBhdCBhbGwhICovCisrfQorKworKy8qIExlbmd0aHMgb2YgdmFyaW91cyBwYXJzZXIgZmllbGRzIHdoaWNoIHdlIHdpbGwgYWxsb2NhdGVkLiAgKi8KKytzdHJ1Y3QgcGFyc2VyX3NpemVzCisreworKyAgc2l6ZV90IHNob3J0X2xlbjsgICAgICAgICAgICAvKiBHZXRvcHQgc2hvcnQgb3B0aW9ucyBzdHJpbmcuICAqLworKyAgc2l6ZV90IGxvbmdfbGVuOyAgICAgICAgICAgICAvKiBHZXRvcHQgbG9uZyBvcHRpb25zIHZlY3Rvci4gICovCisrICBzaXplX3QgbnVtX2dyb3VwczsgICAgICAgICAgIC8qIEdyb3VwIHN0cnVjdHVyZXMgd2UgYWxsb2NhdGUuICAqLworKyAgc2l6ZV90IG51bV9jaGlsZF9pbnB1dHM7ICAgICAvKiBDaGlsZCBpbnB1dCBzbG90cy4gICovCisrfTsKKysKKysvKiBGb3IgQVJHUCwgaW5jcmVtZW50cyB0aGUgTlVNX0dST1VQUyBmaWVsZCBpbiBTWlMgYnkgdGhlIHRvdGFsIG51bWJlciBvZgorKyBhcmdwIHN0cnVjdHVyZXMgZGVzY2VuZGVkIGZyb20gaXQsIGFuZCB0aGUgU0hPUlRfTEVOICYgTE9OR19MRU4gZmllbGRzIGJ5CisrIHRoZSBtYXhpbXVtIGxlbmd0aHMgb2YgdGhlIHJlc3VsdGluZyBtZXJnZWQgZ2V0b3B0IHNob3J0IG9wdGlvbnMgc3RyaW5nIGFuZAorKyBsb25nLW9wdGlvbnMgYXJyYXksIHJlc3BlY3RpdmVseS4gICovCisrc3RhdGljIHZvaWQKKytjYWxjX3NpemVzIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgIHN0cnVjdCBwYXJzZXJfc2l6ZXMgKnN6cykKKyt7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCAqY2hpbGQgPSBhcmdwLT5jaGlsZHJlbjsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0ID0gYXJncC0+b3B0aW9uczsKKysKKysgIGlmIChvcHQgfHwgYXJncC0+cGFyc2VyKQorKyAgICB7CisrICAgICAgc3pzLT5udW1fZ3JvdXBzKys7CisrICAgICAgaWYgKG9wdCkKKysgICAgICAgeworKyAgICAgICAgIGludCBudW1fb3B0cyA9IDA7CisrICAgICAgICAgd2hpbGUgKCFfX29wdGlvbl9pc19lbmQgKG9wdCsrKSkKKysgICAgICAgICAgIG51bV9vcHRzKys7CisrICAgICAgICAgc3pzLT5zaG9ydF9sZW4gKz0gbnVtX29wdHMgKiAzOyAvKiBvcHQgKyB1cCB0byAyIGA6J3MgKi8KKysgICAgICAgICBzenMtPmxvbmdfbGVuICs9IG51bV9vcHRzOworKyAgICAgICB9CisrICAgIH0KKysKKysgIGlmIChjaGlsZCkKKysgICAgd2hpbGUgKGNoaWxkLT5hcmdwKQorKyAgICAgIHsKKysgICAgICAgY2FsY19zaXplcyAoKGNoaWxkKyspLT5hcmdwLCBzenMpOworKyAgICAgICBzenMtPm51bV9jaGlsZF9pbnB1dHMrKzsKKysgICAgICB9CisrfQorKworKworK2V4dGVybiBjaGFyICogX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAodm9pZCk7CisrLyogSW5pdGlhbGl6ZXMgUEFSU0VSIHRvIHBhcnNlIEFSR1AgaW4gYSBtYW5uZXIgZGVzY3JpYmVkIGJ5IEZMQUdTLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlcl9pbml0IChzdHJ1Y3QgcGFyc2VyICpwYXJzZXIsIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLAorKyAgICAgICAgICAgIGludCBhcmdjLCBjaGFyICoqYXJndiwgaW50IGZsYWdzLCB2b2lkICppbnB1dCkKKyt7CisrICBlcnJvcl90IGVyciA9IDA7CisrICBzdHJ1Y3QgZ3JvdXAgKmdyb3VwOworKyAgc3RydWN0IHBhcnNlcl9zaXplcyBzenM7CisrICBzdHJ1Y3QgX2dldG9wdF9kYXRhIG9wdF9kYXRhID0gX0dFVE9QVF9EQVRBX0lOSVRJQUxJWkVSOworKworKyAgc3pzLnNob3J0X2xlbiA9IChmbGFncyAmIEFSR1BfTk9fQVJHUykgPyAwIDogMTsKKysgIHN6cy5sb25nX2xlbiA9IDA7CisrICBzenMubnVtX2dyb3VwcyA9IDA7CisrICBzenMubnVtX2NoaWxkX2lucHV0cyA9IDA7CisrCisrICBpZiAoYXJncCkKKysgICAgY2FsY19zaXplcyAoYXJncCwgJnN6cyk7CisrCisrICAvKiBMZW5ndGhzIG9mIHRoZSB2YXJpb3VzIGJpdHMgb2Ygc3RvcmFnZSB1c2VkIGJ5IFBBUlNFUi4gICovCisrI2RlZmluZSBHTEVOIChzenMubnVtX2dyb3VwcyArIDEpICogc2l6ZW9mIChzdHJ1Y3QgZ3JvdXApCisrI2RlZmluZSBDTEVOIChzenMubnVtX2NoaWxkX2lucHV0cyAqIHNpemVvZiAodm9pZCAqKSkKKysjZGVmaW5lIExMRU4gKChzenMubG9uZ19sZW4gKyAxKSAqIHNpemVvZiAoc3RydWN0IG9wdGlvbikpCisrI2RlZmluZSBTTEVOIChzenMuc2hvcnRfbGVuICsgMSkKKysKKysgIHBhcnNlci0+c3RvcmFnZSA9IG1hbGxvYyAoR0xFTiArIENMRU4gKyBMTEVOICsgU0xFTik7CisrICBpZiAoISBwYXJzZXItPnN0b3JhZ2UpCisrICAgIHJldHVybiBFTk9NRU07CisrCisrICBwYXJzZXItPmdyb3VwcyA9IHBhcnNlci0+c3RvcmFnZTsKKysgIHBhcnNlci0+Y2hpbGRfaW5wdXRzID0gcGFyc2VyLT5zdG9yYWdlICsgR0xFTjsKKysgIHBhcnNlci0+bG9uZ19vcHRzID0gcGFyc2VyLT5zdG9yYWdlICsgR0xFTiArIENMRU47CisrICBwYXJzZXItPnNob3J0X29wdHMgPSBwYXJzZXItPnN0b3JhZ2UgKyBHTEVOICsgQ0xFTiArIExMRU47CisrICBwYXJzZXItPm9wdF9kYXRhID0gb3B0X2RhdGE7CisrCisrICBtZW1zZXQgKHBhcnNlci0+Y2hpbGRfaW5wdXRzLCAwLCBzenMubnVtX2NoaWxkX2lucHV0cyAqIHNpemVvZiAodm9pZCAqKSk7CisrICBwYXJzZXJfY29udmVydCAocGFyc2VyLCBhcmdwLCBmbGFncyk7CisrCisrICBtZW1zZXQgKCZwYXJzZXItPnN0YXRlLCAwLCBzaXplb2YgKHN0cnVjdCBhcmdwX3N0YXRlKSk7CisrICBwYXJzZXItPnN0YXRlLnJvb3RfYXJncCA9IHBhcnNlci0+YXJncDsKKysgIHBhcnNlci0+c3RhdGUuYXJnYyA9IGFyZ2M7CisrICBwYXJzZXItPnN0YXRlLmFyZ3YgPSBhcmd2OworKyAgcGFyc2VyLT5zdGF0ZS5mbGFncyA9IGZsYWdzOworKyAgcGFyc2VyLT5zdGF0ZS5lcnJfc3RyZWFtID0gc3RkZXJyOworKyAgcGFyc2VyLT5zdGF0ZS5vdXRfc3RyZWFtID0gc3Rkb3V0OworKyAgcGFyc2VyLT5zdGF0ZS5uZXh0ID0gMDsgICAgICAvKiBUZWxsIGdldG9wdCB0byBpbml0aWFsaXplLiAgKi8KKysgIHBhcnNlci0+c3RhdGUucHN0YXRlID0gcGFyc2VyOworKworKyAgcGFyc2VyLT50cnlfZ2V0b3B0ID0gMTsKKysKKysgIC8qIENhbGwgZWFjaCBwYXJzZXIgZm9yIHRoZSBmaXJzdCB0aW1lLCBnaXZpbmcgaXQgYSBjaGFuY2UgdG8gcHJvcGFnYXRlCisrICAgICB2YWx1ZXMgdG8gY2hpbGQgcGFyc2Vycy4gICovCisrICBpZiAocGFyc2VyLT5ncm91cHMgPCBwYXJzZXItPmVncm91cCkKKysgICAgcGFyc2VyLT5ncm91cHMtPmlucHV0ID0gaW5wdXQ7CisrICBmb3IgKGdyb3VwID0gcGFyc2VyLT5ncm91cHM7CisrICAgICAgIGdyb3VwIDwgcGFyc2VyLT5lZ3JvdXAgJiYgKCFlcnIgfHwgZXJyID09IEVCQURLRVkpOworKyAgICAgICBncm91cCsrKQorKyAgICB7CisrICAgICAgaWYgKGdyb3VwLT5wYXJlbnQpCisrICAgICAgIC8qIElmIGEgY2hpbGQgcGFyc2VyLCBnZXQgdGhlIGluaXRpYWwgaW5wdXQgdmFsdWUgZnJvbSB0aGUgcGFyZW50LiAqLworKyAgICAgICBncm91cC0+aW5wdXQgPSBncm91cC0+cGFyZW50LT5jaGlsZF9pbnB1dHNbZ3JvdXAtPnBhcmVudF9pbmRleF07CisrCisrICAgICAgaWYgKCFncm91cC0+cGFyc2VyCisrICAgICAgICAgJiYgZ3JvdXAtPmFyZ3AtPmNoaWxkcmVuICYmIGdyb3VwLT5hcmdwLT5jaGlsZHJlbi0+YXJncCkKKysgICAgICAgLyogRm9yIHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgbm8gcGFyc2luZyBmdW5jdGlvbiBpcyBzdXBwbGllZCBmb3IgYW4KKysgICAgICAgICAgYXJncCwgcHJvcGFnYXRlIGl0cyBpbnB1dCB0byBpdHMgZmlyc3QgY2hpbGQsIGlmIGFueSAodGhpcyBqdXN0CisrICAgICAgICAgIG1ha2VzIHZlcnkgc2ltcGxlIHdyYXBwZXIgYXJncHMgbW9yZSBjb252ZW5pZW50KS4gICovCisrICAgICAgIGdyb3VwLT5jaGlsZF9pbnB1dHNbMF0gPSBncm91cC0+aW5wdXQ7CisrCisrICAgICAgZXJyID0gZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwgQVJHUF9LRVlfSU5JVCwgMCk7CisrICAgIH0KKysgIGlmIChlcnIgPT0gRUJBREtFWSkKKysgICAgZXJyID0gMDsgICAgICAgICAgICAgICAgICAgLyogU29tZSBwYXJzZXIgZGlkbid0IHVuZGVyc3RhbmQuICAqLworKworKyAgaWYgKGVycikKKysgICAgcmV0dXJuIGVycjsKKysKKysgIGlmIChwYXJzZXItPnN0YXRlLmZsYWdzICYgQVJHUF9OT19FUlJTKQorKyAgICB7CisrICAgICAgcGFyc2VyLT5vcHRfZGF0YS5vcHRlcnIgPSAwOworKyAgICAgIGlmIChwYXJzZXItPnN0YXRlLmZsYWdzICYgQVJHUF9QQVJTRV9BUkdWMCkKKysgICAgICAgLyogZ2V0b3B0IGFsd2F5cyBza2lwcyBBUkdWWzBdLCBzbyB3ZSBoYXZlIHRvIGZha2UgaXQgb3V0LiAgQXMgbG9uZworKyAgICAgICAgICBhcyBPUFRFUlIgaXMgMCwgdGhlbiBpdCBzaG91bGRuJ3QgYWN0dWFsbHkgdHJ5IHRvIGFjY2VzcyBpdC4gICovCisrICAgICAgIHBhcnNlci0+c3RhdGUuYXJndi0tLCBwYXJzZXItPnN0YXRlLmFyZ2MrKzsKKysgICAgfQorKyAgZWxzZQorKyAgICBwYXJzZXItPm9wdF9kYXRhLm9wdGVyciA9IDE7ICAgICAgIC8qIFByaW50IGVycm9yIG1lc3NhZ2VzLiAgKi8KKysKKysgIGlmIChwYXJzZXItPnN0YXRlLmFyZ3YgPT0gYXJndiAmJiBhcmd2WzBdKQorKyAgICAvKiBUaGVyZSdzIGFuIGFyZ3ZbMF07IHVzZSBpdCBmb3IgbWVzc2FnZXMuICAqLworKyAgICB7CisrICAgICAgY2hhciAqc2hvcnRfbmFtZSA9IHN0cnJjaHIgKGFyZ3ZbMF0sICcvJyk7CisrICAgICAgcGFyc2VyLT5zdGF0ZS5uYW1lID0gc2hvcnRfbmFtZSA/IHNob3J0X25hbWUgKyAxIDogYXJndlswXTsKKysgICAgfQorKyAgZWxzZQorKyAgICBwYXJzZXItPnN0YXRlLm5hbWUgPSBfX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lICgpOworKworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIEZyZWUgYW55IHN0b3JhZ2UgY29uc3VtZWQgYnkgUEFSU0VSIChidXQgbm90IFBBUlNFUiBpdHNlbGYpLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlcl9maW5hbGl6ZSAoc3RydWN0IHBhcnNlciAqcGFyc2VyLAorKyAgICAgICAgICAgICAgICBlcnJvcl90IGVyciwgaW50IGFyZ19lYmFka2V5LCBpbnQgKmVuZF9pbmRleCkKKyt7CisrICBzdHJ1Y3QgZ3JvdXAgKmdyb3VwOworKworKyAgaWYgKGVyciA9PSBFQkFES0VZICYmIGFyZ19lYmFka2V5KQorKyAgICAvKiBTdXBwcmVzcyBlcnJvcnMgZ2VuZXJhdGVkIGJ5IHVucGFyc2VkIGFyZ3VtZW50cy4gICovCisrICAgIGVyciA9IDA7CisrCisrICBpZiAoISBlcnIpCisrICAgIHsKKysgICAgICBpZiAocGFyc2VyLT5zdGF0ZS5uZXh0ID09IHBhcnNlci0+c3RhdGUuYXJnYykKKysgICAgICAgLyogV2Ugc3VjY2Vzc2Z1bGx5IHBhcnNlZCBhbGwgYXJndW1lbnRzISAgQ2FsbCBhbGwgdGhlIHBhcnNlcnMgYWdhaW4sCisrICAgICAgICAgIGp1c3QgYSBmZXcgbW9yZSB0aW1lcy4uLiAqLworKyAgICAgICB7CisrICAgICAgICAgZm9yIChncm91cCA9IHBhcnNlci0+Z3JvdXBzOworKyAgICAgICAgICAgICAgZ3JvdXAgPCBwYXJzZXItPmVncm91cCAmJiAoIWVyciB8fCBlcnI9PUVCQURLRVkpOworKyAgICAgICAgICAgICAgZ3JvdXArKykKKysgICAgICAgICAgIGlmIChncm91cC0+YXJnc19wcm9jZXNzZWQgPT0gMCkKKysgICAgICAgICAgICAgZXJyID0gZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwgQVJHUF9LRVlfTk9fQVJHUywgMCk7CisrICAgICAgICAgZm9yIChncm91cCA9IHBhcnNlci0+ZWdyb3VwIC0gMTsKKysgICAgICAgICAgICAgIGdyb3VwID49IHBhcnNlci0+Z3JvdXBzICYmICghZXJyIHx8IGVycj09RUJBREtFWSk7CisrICAgICAgICAgICAgICBncm91cC0tKQorKyAgICAgICAgICAgZXJyID0gZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwgQVJHUF9LRVlfRU5ELCAwKTsKKysKKysgICAgICAgICBpZiAoZXJyID09IEVCQURLRVkpCisrICAgICAgICAgICBlcnIgPSAwOyAgICAgICAgICAgIC8qIFNvbWUgcGFyc2VyIGRpZG4ndCB1bmRlcnN0YW5kLiAgKi8KKysKKysgICAgICAgICAvKiBUZWxsIHRoZSB1c2VyIHRoYXQgYWxsIGFyZ3VtZW50cyBhcmUgcGFyc2VkLiAgKi8KKysgICAgICAgICBpZiAoZW5kX2luZGV4KQorKyAgICAgICAgICAgKmVuZF9pbmRleCA9IHBhcnNlci0+c3RhdGUubmV4dDsKKysgICAgICAgfQorKyAgICAgIGVsc2UgaWYgKGVuZF9pbmRleCkKKysgICAgICAgLyogUmV0dXJuIGFueSByZW1haW5pbmcgYXJndW1lbnRzIHRvIHRoZSB1c2VyLiAgKi8KKysgICAgICAgKmVuZF9pbmRleCA9IHBhcnNlci0+c3RhdGUubmV4dDsKKysgICAgICBlbHNlCisrICAgICAgIC8qIE5vIHdheSB0byByZXR1cm4gdGhlIHJlbWFpbmluZyBhcmd1bWVudHMsIHRoZXkgbXVzdCBiZSBib2d1cy4gKi8KKysgICAgICAgeworKyAgICAgICAgIGlmICghKHBhcnNlci0+c3RhdGUuZmxhZ3MgJiBBUkdQX05PX0VSUlMpCisrICAgICAgICAgICAgICYmIHBhcnNlci0+c3RhdGUuZXJyX3N0cmVhbSkKKysgICAgICAgICAgIGZwcmludGYgKHBhcnNlci0+c3RhdGUuZXJyX3N0cmVhbSwKKysgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChwYXJzZXItPmFyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlczogVG9vIG1hbnkgYXJndW1lbnRzXG4iKSwKKysgICAgICAgICAgICAgICAgICAgIHBhcnNlci0+c3RhdGUubmFtZSk7CisrICAgICAgICAgZXJyID0gRUJBREtFWTsKKysgICAgICAgfQorKyAgICB9CisrCisrICAvKiBPa2F5LCB3ZSdyZSBhbGwgZG9uZSwgd2l0aCBlaXRoZXIgYW4gZXJyb3Igb3Igc3VjY2VzczsgY2FsbCB0aGUgcGFyc2VycworKyAgICAgdG8gaW5kaWNhdGUgd2hpY2ggb25lLiAgKi8KKysKKysgIGlmIChlcnIpCisrICAgIHsKKysgICAgICAvKiBNYXliZSBwcmludCBhbiBlcnJvciBtZXNzYWdlLiAgKi8KKysgICAgICBpZiAoZXJyID09IEVCQURLRVkpCisrICAgICAgIC8qIEFuIGFwcHJvcHJpYXRlIG1lc3NhZ2UgZGVzY3JpYmluZyB3aGF0IHRoZSBlcnJvciB3YXMgc2hvdWxkIGhhdmUKKysgICAgICAgICAgYmVlbiBwcmludGVkIGVhcmxpZXIuICAqLworKyAgICAgICBhcmdwX3N0YXRlX2hlbHAgKCZwYXJzZXItPnN0YXRlLCBwYXJzZXItPnN0YXRlLmVycl9zdHJlYW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICBBUkdQX0hFTFBfU1REX0VSUik7CisrCisrICAgICAgLyogU2luY2Ugd2UgZGlkbid0IGV4aXQsIGdpdmUgZWFjaCBwYXJzZXIgYW4gZXJyb3IgaW5kaWNhdGlvbi4gICovCisrICAgICAgZm9yIChncm91cCA9IHBhcnNlci0+Z3JvdXBzOyBncm91cCA8IHBhcnNlci0+ZWdyb3VwOyBncm91cCsrKQorKyAgICAgICBncm91cF9wYXJzZSAoZ3JvdXAsICZwYXJzZXItPnN0YXRlLCBBUkdQX0tFWV9FUlJPUiwgMCk7CisrICAgIH0KKysgIGVsc2UKKysgICAgLyogTm90aWZ5IHBhcnNlcnMgb2Ygc3VjY2VzcywgYW5kIHByb3BhZ2F0ZSBiYWNrIHZhbHVlcyBmcm9tIHBhcnNlcnMuICAqLworKyAgICB7CisrICAgICAgLyogV2UgcGFzcyBvdmVyIHRoZSBncm91cHMgaW4gcmV2ZXJzZSBvcmRlciBzbyB0aGF0IGNoaWxkIGdyb3VwcyBhcmUKKysgICAgICAgIGdpdmVuIGEgY2hhbmNlIHRvIGRvIHRoZXJlIHByb2Nlc3NpbmcgYmVmb3JlIHBhc3NpbmcgYmFjayBhIHZhbHVlIHRvCisrICAgICAgICB0aGUgcGFyZW50LiAgKi8KKysgICAgICBmb3IgKGdyb3VwID0gcGFyc2VyLT5lZ3JvdXAgLSAxCisrICAgICAgICAgIDsgZ3JvdXAgPj0gcGFyc2VyLT5ncm91cHMgJiYgKCFlcnIgfHwgZXJyID09IEVCQURLRVkpCisrICAgICAgICAgIDsgZ3JvdXAtLSkKKysgICAgICAgZXJyID0gZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwgQVJHUF9LRVlfU1VDQ0VTUywgMCk7CisrICAgICAgaWYgKGVyciA9PSBFQkFES0VZKQorKyAgICAgICBlcnIgPSAwOyAgICAgICAgICAgICAgICAvKiBTb21lIHBhcnNlciBkaWRuJ3QgdW5kZXJzdGFuZC4gICovCisrICAgIH0KKysKKysgIC8qIENhbGwgcGFyc2VycyBvbmNlIG1vcmUsIHRvIGRvIGFueSBmaW5hbCBjbGVhbnVwLiAgRXJyb3JzIGFyZSBpZ25vcmVkLiAgKi8KKysgIGZvciAoZ3JvdXAgPSBwYXJzZXItPmVncm91cCAtIDE7IGdyb3VwID49IHBhcnNlci0+Z3JvdXBzOyBncm91cC0tKQorKyAgICBncm91cF9wYXJzZSAoZ3JvdXAsICZwYXJzZXItPnN0YXRlLCBBUkdQX0tFWV9GSU5JLCAwKTsKKysKKysgIGlmIChlcnIgPT0gRUJBREtFWSkKKysgICAgZXJyID0gRUlOVkFMOworKworKyAgZnJlZSAocGFyc2VyLT5zdG9yYWdlKTsKKysKKysgIHJldHVybiBlcnI7CisrfQorKworKy8qIENhbGwgdGhlIHVzZXIgcGFyc2VycyB0byBwYXJzZSB0aGUgbm9uLW9wdGlvbiBhcmd1bWVudCBWQUwsIGF0IHRoZSBjdXJyZW50CisrICAgcG9zaXRpb24sIHJldHVybmluZyBhbnkgZXJyb3IuICBUaGUgc3RhdGUgTkVYVCBwb2ludGVyIGlzIGFzc3VtZWQgdG8gaGF2ZQorKyAgIGJlZW4gYWRqdXN0ZWQgKGJ5IGdldG9wdCkgdG8gcG9pbnQgYWZ0ZXIgdGhpcyBhcmd1bWVudDsgdGhpcyBmdW5jdGlvbiB3aWxsCisrICAgYWRqdXN0IGl0IGNvcnJlY3RseSB0byByZWZsZWN0IGhvd2V2ZXIgbWFueSBhcmdzIGFjdHVhbGx5IGVuZCB1cCBiZWluZworKyAgIGNvbnN1bWVkLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlcl9wYXJzZV9hcmcgKHN0cnVjdCBwYXJzZXIgKnBhcnNlciwgY2hhciAqdmFsKQorK3sKKysgIC8qIFNhdmUgdGhlIHN0YXJ0aW5nIHZhbHVlIG9mIE5FWFQsIGZpcnN0IGFkanVzdGluZyBpdCBzbyB0aGF0IHRoZSBhcmcKKysgICAgIHdlJ3JlIHBhcnNpbmcgaXMgYWdhaW4gdGhlIGZyb250IG9mIHRoZSBhcmcgdmVjdG9yLiAgKi8KKysgIGludCBpbmRleCA9IC0tcGFyc2VyLT5zdGF0ZS5uZXh0OworKyAgZXJyb3JfdCBlcnIgPSBFQkFES0VZOworKyAgc3RydWN0IGdyb3VwICpncm91cDsKKysgIGludCBrZXkgPSAwOyAgICAgICAgICAgICAgICAgLyogV2hpY2ggb2YgQVJHUF9LRVlfQVJHW1NdIHdlIHVzZWQuICAqLworKworKyAgLyogVHJ5IHRvIHBhcnNlIHRoZSBhcmd1bWVudCBpbiBlYWNoIHBhcnNlci4gICovCisrICBmb3IgKGdyb3VwID0gcGFyc2VyLT5ncm91cHMKKysgICAgICAgOyBncm91cCA8IHBhcnNlci0+ZWdyb3VwICYmIGVyciA9PSBFQkFES0VZCisrICAgICAgIDsgZ3JvdXArKykKKysgICAgeworKyAgICAgIHBhcnNlci0+c3RhdGUubmV4dCsrOyAgICAvKiBGb3IgQVJHUF9LRVlfQVJHLCBjb25zdW1lIHRoZSBhcmcuICAqLworKyAgICAgIGtleSA9IEFSR1BfS0VZX0FSRzsKKysgICAgICBlcnIgPSBncm91cF9wYXJzZSAoZ3JvdXAsICZwYXJzZXItPnN0YXRlLCBrZXksIHZhbCk7CisrCisrICAgICAgaWYgKGVyciA9PSBFQkFES0VZKQorKyAgICAgICAvKiBUaGlzIHBhcnNlciBkb2Vzbid0IGxpa2UgQVJHUF9LRVlfQVJHOyB0cnkgQVJHUF9LRVlfQVJHUyBpbnN0ZWFkLiAqLworKyAgICAgICB7CisrICAgICAgICAgcGFyc2VyLT5zdGF0ZS5uZXh0LS07IC8qIEZvciBBUkdQX0tFWV9BUkdTLCBwdXQgYmFjayB0aGUgYXJnLiAgKi8KKysgICAgICAgICBrZXkgPSBBUkdQX0tFWV9BUkdTOworKyAgICAgICAgIGVyciA9IGdyb3VwX3BhcnNlIChncm91cCwgJnBhcnNlci0+c3RhdGUsIGtleSwgMCk7CisrICAgICAgIH0KKysgICAgfQorKworKyAgaWYgKCEgZXJyKQorKyAgICB7CisrICAgICAgaWYgKGtleSA9PSBBUkdQX0tFWV9BUkdTKQorKyAgICAgICAvKiBUaGUgZGVmYXVsdCBmb3IgQVJHUF9LRVlfQVJHUyBpcyB0byBhc3N1bWUgdGhhdCBpZiBORVhUIGlzbid0CisrICAgICAgICAgIGNoYW5nZWQgYnkgdGhlIHVzZXIsICphbGwqIGFyZ3VtZW50cyBzaG91bGQgYmUgY29uc2lkZXJlZAorKyAgICAgICAgICBjb25zdW1lZC4gICovCisrICAgICAgIHBhcnNlci0+c3RhdGUubmV4dCA9IHBhcnNlci0+c3RhdGUuYXJnYzsKKysKKysgICAgICBpZiAocGFyc2VyLT5zdGF0ZS5uZXh0ID4gaW5kZXgpCisrICAgICAgIC8qIFJlbWVtYmVyIHRoYXQgd2Ugc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBhIG5vbi1vcHRpb24KKysgICAgICAgICAgYXJndW1lbnQgLS0gYnV0IG9ubHkgaWYgdGhlIHVzZXIgaGFzbid0IGdvdHRlbiB0cmlja3kgYW5kIHNldAorKyAgICAgICAgICB0aGUgY2xvY2sgYmFjay4gICovCisrICAgICAgICgtLWdyb3VwKS0+YXJnc19wcm9jZXNzZWQgKz0gKHBhcnNlci0+c3RhdGUubmV4dCAtIGluZGV4KTsKKysgICAgICBlbHNlCisrICAgICAgIC8qIFRoZSB1c2VyIHdhbnRzIHRvIHJlcGFyc2Ugc29tZSBhcmdzLCBnaXZlIGdldG9wdCBhbm90aGVyIHRyeS4gICovCisrICAgICAgIHBhcnNlci0+dHJ5X2dldG9wdCA9IDE7CisrICAgIH0KKysKKysgIHJldHVybiBlcnI7CisrfQorKworKy8qIENhbGwgdGhlIHVzZXIgcGFyc2VycyB0byBwYXJzZSB0aGUgb3B0aW9uIE9QVCwgd2l0aCBhcmd1bWVudCBWQUwsIGF0IHRoZQorKyAgIGN1cnJlbnQgcG9zaXRpb24sIHJldHVybmluZyBhbnkgZXJyb3IuICAqLworK3N0YXRpYyBlcnJvcl90CisrcGFyc2VyX3BhcnNlX29wdCAoc3RydWN0IHBhcnNlciAqcGFyc2VyLCBpbnQgb3B0LCBjaGFyICp2YWwpCisreworKyAgLyogVGhlIGdyb3VwIGtleSBlbmNvZGVkIGluIHRoZSBoaWdoIGJpdHM7IDAgZm9yIHNob3J0IG9wdHMgb3IKKysgICAgIGdyb3VwX251bWJlciArIDEgZm9yIGxvbmcgb3B0cy4gICovCisrICBpbnQgZ3JvdXBfa2V5ID0gb3B0ID4+IFVTRVJfQklUUzsKKysgIGVycm9yX3QgZXJyID0gRUJBREtFWTsKKysKKysgIGlmIChncm91cF9rZXkgPT0gMCkKKysgICAgLyogQSBzaG9ydCBvcHRpb24uICBCeSBjb21wYXJpbmcgT1BUJ3MgcG9zaXRpb24gaW4gU0hPUlRfT1BUUyB0byB0aGUKKysgICAgICAgdmFyaW91cyBzdGFydGluZyBwb3NpdGlvbnMgaW4gZWFjaCBncm91cCdzIFNIT1JUX0VORCBmaWVsZCwgd2UgY2FuCisrICAgICAgIGRldGVybWluZSB3aGljaCBncm91cCBPUFQgY2FtZSBmcm9tLiAgKi8KKysgICAgeworKyAgICAgIHN0cnVjdCBncm91cCAqZ3JvdXA7CisrICAgICAgY2hhciAqc2hvcnRfaW5kZXggPSBzdHJjaHIgKHBhcnNlci0+c2hvcnRfb3B0cywgb3B0KTsKKysKKysgICAgICBpZiAoc2hvcnRfaW5kZXgpCisrICAgICAgIGZvciAoZ3JvdXAgPSBwYXJzZXItPmdyb3VwczsgZ3JvdXAgPCBwYXJzZXItPmVncm91cDsgZ3JvdXArKykKKysgICAgICAgICBpZiAoZ3JvdXAtPnNob3J0X2VuZCA+IHNob3J0X2luZGV4KQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICBlcnIgPSBncm91cF9wYXJzZSAoZ3JvdXAsICZwYXJzZXItPnN0YXRlLCBvcHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXItPm9wdF9kYXRhLm9wdGFyZyk7CisrICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgfQorKyAgICB9CisrICBlbHNlCisrICAgIC8qIEEgbG9uZyBvcHRpb24uICBXZSB1c2Ugc2hpZnRzIGluc3RlYWQgb2YgbWFza2luZyBmb3IgZXh0cmFjdGluZworKyAgICAgICB0aGUgdXNlciB2YWx1ZSBpbiBvcmRlciB0byBwcmVzZXJ2ZSB0aGUgc2lnbi4gICovCisrICAgIGVyciA9CisrICAgICAgZ3JvdXBfcGFyc2UgKCZwYXJzZXItPmdyb3Vwc1tncm91cF9rZXkgLSAxXSwgJnBhcnNlci0+c3RhdGUsCisrICAgICAgICAgICAgICAgICAgKG9wdCA8PCBHUk9VUF9CSVRTKSA+PiBHUk9VUF9CSVRTLAorKyAgICAgICAgICAgICAgICAgIHBhcnNlci0+b3B0X2RhdGEub3B0YXJnKTsKKysKKysgIGlmIChlcnIgPT0gRUJBREtFWSkKKysgICAgLyogQXQgbGVhc3QgY3VycmVudGx5LCBhbiBvcHRpb24gbm90IHJlY29nbml6ZWQgaXMgYW4gZXJyb3IgaW4gdGhlCisrICAgICAgIHBhcnNlciwgYmVjYXVzZSB3ZSBwcmUtY29tcHV0ZSB3aGljaCBwYXJzZXIgaXMgc3VwcG9zZWQgdG8gZGVhbAorKyAgICAgICB3aXRoIGVhY2ggb3B0aW9uLiAgKi8KKysgICAgeworKyAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGJhZF9rZXlfZXJyW10gPQorKyAgICAgICBOXygiKFBST0dSQU0gRVJST1IpIE9wdGlvbiBzaG91bGQgaGF2ZSBiZWVuIHJlY29nbml6ZWQhPyIpOworKyAgICAgIGlmIChncm91cF9rZXkgPT0gMCkKKysgICAgICAgYXJncF9lcnJvciAoJnBhcnNlci0+c3RhdGUsICItJWM6ICVzIiwgb3B0LAorKyAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChwYXJzZXItPmFyZ3AtPmFyZ3BfZG9tYWluLCBiYWRfa2V5X2VycikpOworKyAgICAgIGVsc2UKKysgICAgICAgeworKyAgICAgICAgIHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0ID0gcGFyc2VyLT5sb25nX29wdHM7CisrICAgICAgICAgd2hpbGUgKGxvbmdfb3B0LT52YWwgIT0gb3B0ICYmIGxvbmdfb3B0LT5uYW1lKQorKyAgICAgICAgICAgbG9uZ19vcHQrKzsKKysgICAgICAgICBhcmdwX2Vycm9yICgmcGFyc2VyLT5zdGF0ZSwgIi0tJXM6ICVzIiwKKysgICAgICAgICAgICAgICAgICAgICAgIGxvbmdfb3B0LT5uYW1lID8gbG9uZ19vcHQtPm5hbWUgOiAiPz8/IiwKKysgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChwYXJzZXItPmFyZ3AtPmFyZ3BfZG9tYWluLCBiYWRfa2V5X2VycikpOworKyAgICAgICB9CisrICAgIH0KKysKKysgIHJldHVybiBlcnI7CisrfQorKworKy8qIFBhcnNlIHRoZSBuZXh0IGFyZ3VtZW50IGluIFBBUlNFUiAoYXMgaW5kaWNhdGVkIGJ5IFBBUlNFUi0+c3RhdGUubmV4dCkuCisrICAgQW55IGVycm9yIGZyb20gdGhlIHBhcnNlcnMgaXMgcmV0dXJuZWQsIGFuZCAqQVJHUF9FQkFES0VZIGluZGljYXRlcworKyAgIHdoZXRoZXIgYSB2YWx1ZSBvZiBFQkFES0VZIGlzIGR1ZSB0byBhbiB1bnJlY29nbml6ZWQgYXJndW1lbnQgKHdoaWNoIGlzCisrICAgZ2VuZXJhbGx5IG5vdCBmYXRhbCkuICAqLworK3N0YXRpYyBlcnJvcl90CisrcGFyc2VyX3BhcnNlX25leHQgKHN0cnVjdCBwYXJzZXIgKnBhcnNlciwgaW50ICphcmdfZWJhZGtleSkKKyt7CisrICBpbnQgb3B0OworKyAgZXJyb3JfdCBlcnIgPSAwOworKworKyAgaWYgKHBhcnNlci0+c3RhdGUucXVvdGVkICYmIHBhcnNlci0+c3RhdGUubmV4dCA8IHBhcnNlci0+c3RhdGUucXVvdGVkKQorKyAgICAvKiBUaGUgbmV4dCBhcmd1bWVudCBwb2ludGVyIGhhcyBiZWVuIG1vdmVkIHRvIGJlZm9yZSB0aGUgcXVvdGVkCisrICAgICAgIHJlZ2lvbiwgc28gcHJldGVuZCB3ZSBuZXZlciBzYXcgdGhlIHF1b3RpbmcgYC0tJywgYW5kIGdpdmUgZ2V0b3B0CisrICAgICAgIGFub3RoZXIgY2hhbmNlLiAgSWYgdGhlIHVzZXIgaGFzbid0IHJlbW92ZWQgaXQsIGdldG9wdCB3aWxsIGp1c3QKKysgICAgICAgcHJvY2VzcyBpdCBhZ2Fpbi4gICovCisrICAgIHBhcnNlci0+c3RhdGUucXVvdGVkID0gMDsKKysKKysgIGlmIChwYXJzZXItPnRyeV9nZXRvcHQgJiYgIXBhcnNlci0+c3RhdGUucXVvdGVkKQorKyAgICAvKiBHaXZlIGdldG9wdCBhIGNoYW5jZSB0byBwYXJzZSB0aGlzLiAgKi8KKysgICAgeworKyAgICAgIC8qIFB1dCBpdCBiYWNrIGluIE9QVElORCBmb3IgZ2V0b3B0LiAgKi8KKysgICAgICBwYXJzZXItPm9wdF9kYXRhLm9wdGluZCA9IHBhcnNlci0+c3RhdGUubmV4dDsKKysgICAgICAvKiBEaXN0aW5ndWlzaCBLRVlfRVJSIGZyb20gYSByZWFsIG9wdGlvbi4gICovCisrICAgICAgcGFyc2VyLT5vcHRfZGF0YS5vcHRvcHQgPSBLRVlfRU5EOworKyAgICAgIGlmIChwYXJzZXItPnN0YXRlLmZsYWdzICYgQVJHUF9MT05HX09OTFkpCisrICAgICAgIG9wdCA9IF9nZXRvcHRfbG9uZ19vbmx5X3IgKHBhcnNlci0+c3RhdGUuYXJnYywgcGFyc2VyLT5zdGF0ZS5hcmd2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXItPnNob3J0X29wdHMsIHBhcnNlci0+bG9uZ19vcHRzLCAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFyc2VyLT5vcHRfZGF0YSk7CisrICAgICAgZWxzZQorKyAgICAgICBvcHQgPSBfZ2V0b3B0X2xvbmdfciAocGFyc2VyLT5zdGF0ZS5hcmdjLCBwYXJzZXItPnN0YXRlLmFyZ3YsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXItPnNob3J0X29wdHMsIHBhcnNlci0+bG9uZ19vcHRzLCAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcnNlci0+b3B0X2RhdGEpOworKyAgICAgIC8qIEFuZCBzZWUgd2hhdCBnZXRvcHQgZGlkLiAgKi8KKysgICAgICBwYXJzZXItPnN0YXRlLm5leHQgPSBwYXJzZXItPm9wdF9kYXRhLm9wdGluZDsKKysKKysgICAgICBpZiAob3B0ID09IEtFWV9FTkQpCisrICAgICAgIC8qIEdldG9wdCBzYXlzIHRoZXJlIGFyZSBubyBtb3JlIG9wdGlvbnMsIHNvIHN0b3AgdXNpbmcKKysgICAgICAgICAgZ2V0b3B0OyB3ZSdsbCBjb250aW51ZSBpZiBuZWNlc3Nhcnkgb24gb3VyIG93bi4gICovCisrICAgICAgIHsKKysgICAgICAgICBwYXJzZXItPnRyeV9nZXRvcHQgPSAwOworKyAgICAgICAgIGlmIChwYXJzZXItPnN0YXRlLm5leHQgPiAxCisrICAgICAgICAgICAgICYmIHN0cmNtcCAocGFyc2VyLT5zdGF0ZS5hcmd2W3BhcnNlci0+c3RhdGUubmV4dCAtIDFdLCBRVU9URSkKKysgICAgICAgICAgICAgICAgICA9PSAwKQorKyAgICAgICAgICAgLyogTm90IG9ubHkgaXMgdGhpcyB0aGUgZW5kIG9mIHRoZSBvcHRpb25zLCBidXQgaXQncyBhCisrICAgICAgICAgICAgICBgcXVvdGVkJyByZWdpb24sIHdoaWNoIG1heSBoYXZlIGFyZ3MgdGhhdCAqbG9vayogbGlrZQorKyAgICAgICAgICAgICAgb3B0aW9ucywgc28gd2UgZGVmaW5pdGVseSBzaG91bGRuJ3QgdHJ5IHRvIHVzZSBnZXRvcHQgcGFzdAorKyAgICAgICAgICAgICAgaGVyZSwgd2hhdGV2ZXIgaGFwcGVucy4gICovCisrICAgICAgICAgICBwYXJzZXItPnN0YXRlLnF1b3RlZCA9IHBhcnNlci0+c3RhdGUubmV4dDsKKysgICAgICAgfQorKyAgICAgIGVsc2UgaWYgKG9wdCA9PSBLRVlfRVJSICYmIHBhcnNlci0+b3B0X2RhdGEub3B0b3B0ICE9IEtFWV9FTkQpCisrICAgICAgIC8qIEtFWV9FUlIgY2FuIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgYSB2YWxpZCB1c2VyIHNob3J0CisrICAgICAgICAgIG9wdGlvbiwgYnV0IGluIHRoZSBjYXNlIG9mIGEgcmVhbCBlcnJvciwgZ2V0b3B0IHNldHMgT1BUT1BUCisrICAgICAgICAgIHRvIHRoZSBvZmZlbmRpbmcgY2hhcmFjdGVyLCB3aGljaCBjYW4gbmV2ZXIgYmUgS0VZX0VORC4gICovCisrICAgICAgIHsKKysgICAgICAgICAqYXJnX2ViYWRrZXkgPSAwOworKyAgICAgICAgIHJldHVybiBFQkFES0VZOworKyAgICAgICB9CisrICAgIH0KKysgIGVsc2UKKysgICAgb3B0ID0gS0VZX0VORDsKKysKKysgIGlmIChvcHQgPT0gS0VZX0VORCkKKysgICAgeworKyAgICAgIC8qIFdlJ3JlIHBhc3Qgd2hhdCBnZXRvcHQgY29uc2lkZXJzIHRoZSBvcHRpb25zLiAgKi8KKysgICAgICBpZiAocGFyc2VyLT5zdGF0ZS5uZXh0ID49IHBhcnNlci0+c3RhdGUuYXJnYworKyAgICAgICAgIHx8IChwYXJzZXItPnN0YXRlLmZsYWdzICYgQVJHUF9OT19BUkdTKSkKKysgICAgICAgLyogSW5kaWNhdGUgdGhhdCB3ZSdyZSBkb25lLiAgKi8KKysgICAgICAgeworKyAgICAgICAgICphcmdfZWJhZGtleSA9IDE7CisrICAgICAgICAgcmV0dXJuIEVCQURLRVk7CisrICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgIC8qIEEgbm9uLW9wdGlvbiBhcmc7IHNpbXVsYXRlIHdoYXQgZ2V0b3B0IG1pZ2h0IGhhdmUgZG9uZS4gICovCisrICAgICAgIHsKKysgICAgICAgICBvcHQgPSBLRVlfQVJHOworKyAgICAgICAgIHBhcnNlci0+b3B0X2RhdGEub3B0YXJnID0gcGFyc2VyLT5zdGF0ZS5hcmd2W3BhcnNlci0+c3RhdGUubmV4dCsrXTsKKysgICAgICAgfQorKyAgICB9CisrCisrICBpZiAob3B0ID09IEtFWV9BUkcpCisrICAgIC8qIEEgbm9uLW9wdGlvbiBhcmd1bWVudDsgdHJ5IGVhY2ggcGFyc2VyIGluIHR1cm4uICAqLworKyAgICBlcnIgPSBwYXJzZXJfcGFyc2VfYXJnIChwYXJzZXIsIHBhcnNlci0+b3B0X2RhdGEub3B0YXJnKTsKKysgIGVsc2UKKysgICAgZXJyID0gcGFyc2VyX3BhcnNlX29wdCAocGFyc2VyLCBvcHQsIHBhcnNlci0+b3B0X2RhdGEub3B0YXJnKTsKKysKKysgIGlmIChlcnIgPT0gRUJBREtFWSkKKysgICAgKmFyZ19lYmFka2V5ID0gKG9wdCA9PSBLRVlfRU5EIHx8IG9wdCA9PSBLRVlfQVJHKTsKKysKKysgIHJldHVybiBlcnI7CisrfQorKworKy8qIFBhcnNlIHRoZSBvcHRpb25zIHN0cmluZ3MgaW4gQVJHQyAmIEFSR1YgYWNjb3JkaW5nIHRvIHRoZSBhcmdwIGluIEFSR1AuCisrICAgRkxBR1MgaXMgb25lIG9mIHRoZSBBUkdQXyBmbGFncyBhYm92ZS4gIElmIEVORF9JTkRFWCBpcyBub24tTlVMTCwgdGhlCisrICAgaW5kZXggaW4gQVJHViBvZiB0aGUgZmlyc3QgdW5wYXJzZWQgb3B0aW9uIGlzIHJldHVybmVkIGluIGl0LiAgSWYgYW4KKysgICB1bmtub3duIG9wdGlvbiBpcyBwcmVzZW50LCBFSU5WQUwgaXMgcmV0dXJuZWQ7IGlmIHNvbWUgcGFyc2VyIHJvdXRpbmUKKysgICByZXR1cm5lZCBhIG5vbi16ZXJvIHZhbHVlLCBpdCBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlIDAgaXMgcmV0dXJuZWQuICAqLworK2Vycm9yX3QKKythcmdwX3BhcnNlIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCB1bnNpZ25lZCBmbGFncywKKysgICAgICAgICAgICAgaW50ICplbmRfaW5kZXgsIHZvaWQgKmlucHV0KQorK3sKKysgIGVycm9yX3QgZXJyOworKyAgc3RydWN0IHBhcnNlciBwYXJzZXI7CisrCisrICAvKiBJZiB0cnVlLCB0aGVuIGVyciA9PSBFQkFES0VZIGlzIGEgcmVzdWx0IG9mIGEgbm9uLW9wdGlvbiBhcmd1bWVudCBmYWlsaW5nCisrICAgICB0byBiZSBwYXJzZWQgKHdoaWNoIGluIHNvbWUgY2FzZXMgaXNuJ3QgYWN0dWFsbHkgYW4gZXJyb3IpLiAgKi8KKysgIGludCBhcmdfZWJhZGtleSA9IDA7CisrCisrICBpZiAoISAoZmxhZ3MgJiBBUkdQX05PX0hFTFApKQorKyAgICAvKiBBZGQgb3VyIG93biBvcHRpb25zLiAgKi8KKysgICAgeworKyAgICAgIHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZCA9IGFsbG9jYSAoNCAqIHNpemVvZiAoc3RydWN0IGFyZ3BfY2hpbGQpKTsKKysgICAgICBzdHJ1Y3QgYXJncCAqdG9wX2FyZ3AgPSBhbGxvY2EgKHNpemVvZiAoc3RydWN0IGFyZ3ApKTsKKysKKysgICAgICAvKiBUT1BfQVJHUCBoYXMgbm8gb3B0aW9ucywgaXQganVzdCBzZXJ2ZXMgdG8gZ3JvdXAgdGhlIHVzZXIgJiBkZWZhdWx0CisrICAgICAgICBhcmdwcy4gICovCisrICAgICAgbWVtc2V0ICh0b3BfYXJncCwgMCwgc2l6ZW9mICgqdG9wX2FyZ3ApKTsKKysgICAgICB0b3BfYXJncC0+Y2hpbGRyZW4gPSBjaGlsZDsKKysKKysgICAgICBtZW1zZXQgKGNoaWxkLCAwLCA0ICogc2l6ZW9mIChzdHJ1Y3QgYXJncF9jaGlsZCkpOworKworKyAgICAgIGlmIChhcmdwKQorKyAgICAgICAoY2hpbGQrKyktPmFyZ3AgPSBhcmdwOworKyAgICAgIChjaGlsZCsrKS0+YXJncCA9ICZhcmdwX2RlZmF1bHRfYXJncDsKKysgICAgICBpZiAoYXJncF9wcm9ncmFtX3ZlcnNpb24gfHwgYXJncF9wcm9ncmFtX3ZlcnNpb25faG9vaykKKysgICAgICAgKGNoaWxkKyspLT5hcmdwID0gJmFyZ3BfdmVyc2lvbl9hcmdwOworKyAgICAgIGNoaWxkLT5hcmdwID0gMDsKKysKKysgICAgICBhcmdwID0gdG9wX2FyZ3A7CisrICAgIH0KKysKKysgIC8qIENvbnN0cnVjdCBhIHBhcnNlciBmb3IgdGhlc2UgYXJndW1lbnRzLiAgKi8KKysgIGVyciA9IHBhcnNlcl9pbml0ICgmcGFyc2VyLCBhcmdwLCBhcmdjLCBhcmd2LCBmbGFncywgaW5wdXQpOworKworKyAgaWYgKCEgZXJyKQorKyAgICAvKiBQYXJzZSEgKi8KKysgICAgeworKyAgICAgIHdoaWxlICghIGVycikKKysgICAgICAgZXJyID0gcGFyc2VyX3BhcnNlX25leHQgKCZwYXJzZXIsICZhcmdfZWJhZGtleSk7CisrICAgICAgZXJyID0gcGFyc2VyX2ZpbmFsaXplICgmcGFyc2VyLCBlcnIsIGFyZ19lYmFka2V5LCBlbmRfaW5kZXgpOworKyAgICB9CisrCisrICByZXR1cm4gZXJyOworK30KKysKKysvKiBSZXR1cm4gdGhlIGlucHV0IGZpZWxkIGZvciBBUkdQIGluIHRoZSBwYXJzZXIgY29ycmVzcG9uZGluZyB0byBTVEFURTsgdXNlZAorKyAgIGJ5IHRoZSBoZWxwIHJvdXRpbmVzLiAgKi8KKyt2b2lkICoKKytfX2FyZ3BfaW5wdXQgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCBjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgaWYgKHN0YXRlKQorKyAgICB7CisrICAgICAgc3RydWN0IGdyb3VwICpncm91cDsKKysgICAgICBzdHJ1Y3QgcGFyc2VyICpwYXJzZXIgPSBzdGF0ZS0+cHN0YXRlOworKworKyAgICAgIGZvciAoZ3JvdXAgPSBwYXJzZXItPmdyb3VwczsgZ3JvdXAgPCBwYXJzZXItPmVncm91cDsgZ3JvdXArKykKKysgICAgICAgaWYgKGdyb3VwLT5hcmdwID09IGFyZ3ApCisrICAgICAgICAgcmV0dXJuIGdyb3VwLT5pbnB1dDsKKysgICAgfQorKworKyAgcmV0dXJuIDA7CisrfQorZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtcHYuYyBiL2xpYnVhcmdwL2FyZ3AtcHYuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmYxMjI3YjUKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtcHYuYworQEAgLTAsMCArMSwyNSBAQAorKy8qIERlZmF1bHQgZGVmaW5pdGlvbiBmb3IgQVJHUF9QUk9HUkFNX1ZFUlNJT04uCisrICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrLyogSWYgc2V0IGJ5IHRoZSB1c2VyIHByb2dyYW0gdG8gYSBub24temVybyB2YWx1ZSwgdGhlbiBhIGRlZmF1bHQgb3B0aW9uCisrICAgLS12ZXJzaW9uIGlzIGFkZGVkICh1bmxlc3MgdGhlIEFSR1BfTk9fSEVMUCBmbGFnIGlzIHVzZWQpLCB3aGljaCB3aWxsCisrICAgcHJpbnQgdGhpcyB0aGlzIHN0cmluZyBmb2xsb3dlZCBieSBhIG5ld2xpbmUgYW5kIGV4aXQgKHVubGVzcyB0aGUKKysgICBBUkdQX05PX0VYSVQgZmxhZyBpcyB1c2VkKS4gIE92ZXJyaWRkZW4gYnkgQVJHUF9QUk9HUkFNX1ZFUlNJT05fSE9PSy4gICovCisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX3ZlcnNpb247CitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvYXJncC1wdmguYyBiL2xpYnVhcmdwL2FyZ3AtcHZoLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xZjFkOTYyCistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLXB2aC5jCitAQCAtMCwwICsxLDMyIEBACisrLyogRGVmYXVsdCBkZWZpbml0aW9uIGZvciBBUkdQX1BST0dSQU1fVkVSU0lPTl9IT09LLgorKyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrLyogSWYgc2V0IGJ5IHRoZSB1c2VyIHByb2dyYW0gdG8gYSBub24temVybyB2YWx1ZSwgdGhlbiBhIGRlZmF1bHQgb3B0aW9uCisrICAgLS12ZXJzaW9uIGlzIGFkZGVkICh1bmxlc3MgdGhlIEFSR1BfTk9fSEVMUCBmbGFnIGlzIHVzZWQpLCB3aGljaCBjYWxscworKyAgIHRoaXMgZnVuY3Rpb24gd2l0aCBhIHN0cmVhbSB0byBwcmludCB0aGUgdmVyc2lvbiB0byBhbmQgYSBwb2ludGVyIHRvIHRoZQorKyAgIGN1cnJlbnQgcGFyc2luZyBzdGF0ZSwgYW5kIHRoZW4gZXhpdHMgKHVubGVzcyB0aGUgQVJHUF9OT19FWElUIGZsYWcgaXMKKysgICB1c2VkKS4gIFRoaXMgdmFyaWFibGUgdGFrZXMgcHJlY2VkZW50IG92ZXIgQVJHUF9QUk9HUkFNX1ZFUlNJT04uICAqLworK3ZvaWQgKCphcmdwX3Byb2dyYW1fdmVyc2lvbl9ob29rKSAoRklMRSAqc3RyZWFtLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpOworZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AteGlubC5jIGIvbGlidWFyZ3AvYXJncC14aW5sLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mMWQzMDAwCistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLXhpbmwuYworQEAgLTAsMCArMSwzNSBAQAorKy8qIFJlYWwgZGVmaW5pdGlvbnMgZm9yIGV4dGVybiBpbmxpbmUgZnVuY3Rpb25zIGluIGFyZ3AuaAorKyAgIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfRkVBVFVSRVNfSAorKyMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjZW5kaWYKKysKKysjaWZuZGVmIF9fVVNFX0VYVEVSTl9JTkxJTkVTCisrIyBkZWZpbmUgX19VU0VfRVhURVJOX0lOTElORVMgIDEKKysjZW5kaWYKKysjZGVmaW5lIEFSR1BfRUkKKysjdW5kZWYgX19PUFRJTUlaRV9fCisrI2RlZmluZSBfX09QVElNSVpFX18gMQorKyNpbmNsdWRlIDxhcmdwLmg+CitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL01ha2VmaWxlIGIvdGVzdC9hcmdwL01ha2VmaWxlCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNjE2ZmU3MQorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL01ha2VmaWxlCitAQCAtMCwwICsxLDcgQEAKKysjIHVDbGliYyBhcmdwIHRlc3RzCisrIyBMaWNlbnNlZCB1bmRlciB0aGUgTEdQTCB2Mi4xLCBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIgaW4gdGhpcyB0YXJiYWxsLgorKworK3RvcF9idWlsZGRpcj0uLi8uLi8KKytpbmNsdWRlIC4uL1J1bGVzLm1haworKy1pbmNsdWRlIE1ha2VmaWxlLmluCisraW5jbHVkZSAuLi9UZXN0Lm1haworZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC9NYWtlZmlsZS5pbiBiL3Rlc3QvYXJncC9NYWtlZmlsZS5pbgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ4MWIzNTkKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC9NYWtlZmlsZS5pbgorQEAgLTAsMCArMSwxMiBAQAorKyMgdUNsaWJjIGFyZ3AgdGVzdHMKKysjIExpY2Vuc2VkIHVuZGVyIHRoZSBMR1BMIHYyLjEsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQiBpbiB0aGlzIHRhcmJhbGwuCisrCisrVEVTVFMgOj0gJChhZGRwcmVmaXggYXJncC0sIGV4MSBleDIgZXgzIGV4NCB0ZXN0KSBcCisrICAgICAgICAgYnVnLWFyZ3AxIHRzdC1hcmdwMSB0c3QtYXJncDIKKysKKytFWFRSQV9MREZMQUdTID0gLWx1YXJncAorKworK09QVFNfYXJncC1leDMgPSBBUkcxIEFSRzIKKytPUFRTX2FyZ3AtZXg0ID0gQVJHMSBzdHJpbmcxIHN0cmluZzIgc3RyaW5nMworK09QVFNfYnVnLWFyZ3AxID0gLS0gLS1oZWxwCisrCitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL2FyZ3AtZXgxLmMgYi90ZXN0L2FyZ3AvYXJncC1leDEuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjdiYjVmMjIKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC9hcmdwLWV4MS5jCitAQCAtMCwwICsxLDE1IEBACisrLyogQXJncCBleGFtcGxlICMxIC0tIGEgbWluaW1hbCBwcm9ncmFtIHVzaW5nIGFyZ3AgKi8KKysKKysvKiBUaGlzIGlzIChwcm9iYWJseSkgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHByb2dyYW0gdGhhdAorKyAgIHVzZXMgYXJncC4gIEl0IHdvbid0IGRvIG11Y2ggZXhjZXB0IGdpdmUgYW4gZXJyb3IKKysgICBtZXNzYWdlcyBhbmQgZXhpdCB3aGVuIHRoZXJlIGFyZSBhbnkgYXJndW1lbnRzLCBhbmQgcHJpbnQKKysgICBhIChyYXRoZXIgcG9pbnRsZXNzKSBtZXNzYWdlcyBmb3IgLS1oZWxwLiAgKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKytpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgIGFyZ3BfcGFyc2UgKDAsIGFyZ2MsIGFyZ3YsIDAsIDAsIDApOworKyAgZXhpdCAoMCk7CisrfQorZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC9hcmdwLWV4Mi5jIGIvdGVzdC9hcmdwL2FyZ3AtZXgyLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jNDlmYmFjCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0L2FyZ3AvYXJncC1leDIuYworQEAgLTAsMCArMSw0NSBAQAorKy8qIEFyZ3AgZXhhbXBsZSAjMiAtLSBhIHByZXR0eSBtaW5pbWFsIHByb2dyYW0gdXNpbmcgYXJncCAqLworKworKy8qIFRoaXMgcHJvZ3JhbSBkb2Vzbid0IHVzZSBhbnkgb3B0aW9ucyBvciBhcmd1bWVudHMsIGJ1dCB1c2VzCisrICAgYXJncCB0byBiZSBjb21wbGlhbnQgd2l0aCB0aGUgR05VIHN0YW5kYXJkIGNvbW1hbmQgbGluZQorKyAgIGZvcm1hdC4KKysKKysgICBJbiBhZGRpdGlvbiB0byBtYWtpbmcgc3VyZSBubyBhcmd1bWVudHMgYXJlIGdpdmVuLCBhbmQKKysgICBpbXBsZW1lbnRpbmcgYSAtLWhlbHAgb3B0aW9uLCB0aGlzIGV4YW1wbGUgd2lsbCBoYXZlIGEKKysgICAtLXZlcnNpb24gb3B0aW9uLCBhbmQgd2lsbCBwdXQgdGhlIGdpdmVuIGRvY3VtZW50YXRpb24gc3RyaW5nCisrICAgYW5kIGJ1ZyBhZGRyZXNzIGluIHRoZSAtLWhlbHAgb3V0cHV0LCBhcyBwZXIgR05VIHN0YW5kYXJkcy4KKysKKysgICBUaGUgdmFyaWFibGUgQVJHUCBjb250YWlucyB0aGUgYXJndW1lbnQgcGFyc2VyIHNwZWNpZmljYXRpb247CisrICAgYWRkaW5nIGZpZWxkcyB0byB0aGlzIHN0cnVjdHVyZSBpcyB0aGUgd2F5IG1vc3QgcGFyYW1ldGVycyBhcmUKKysgICBwYXNzZWQgdG8gYXJncF9wYXJzZSAodGhlIGZpcnN0IHRocmVlIGZpZWxkcyBhcmUgdXN1YWxseSB1c2VkLAorKyAgIGJ1dCBub3QgaW4gdGhpcyBzbWFsbCBwcm9ncmFtKS4gIFRoZXJlIGFyZSBhbHNvIHR3byBnbG9iYWwKKysgICB2YXJpYWJsZXMgdGhhdCBhcmdwIGtub3dzIGFib3V0IGRlZmluZWQgaGVyZSwKKysgICBBUkdQX1BST0dSQU1fVkVSU0lPTiBhbmQgQVJHUF9QUk9HUkFNX0JVR19BRERSRVNTICh0aGV5IGFyZQorKyAgIGdsb2JhbCB2YXJpYWJsZXMgYmVjYXVzZSB0aGV5IHdpbGwgYWxtb3N0IGFsd2F5cyBiZSBjb25zdGFudAorKyAgIGZvciBhIGdpdmVuIHByb2dyYW0sIGV2ZW4gaWYgaXQgdXNlcyBkaWZmZXJlbnQgYXJndW1lbnQKKysgICBwYXJzZXJzIGZvciB2YXJpb3VzIHRhc2tzKS4gICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX3ZlcnNpb24gPQorKyAgImFyZ3AtZXgyIDEuMCI7CisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzID0KKysgICI8YnVnLWdudS11dGlsc0BAZ251Lm9yZz4iOworKworKy8qIFByb2dyYW0gZG9jdW1lbnRhdGlvbi4gICovCisrc3RhdGljIGNoYXIgZG9jW10gPQorKyAgIkFyZ3AgZXhhbXBsZSAjMiAtLSBhIHByZXR0eSBtaW5pbWFsIHByb2dyYW0gdXNpbmcgYXJncCI7CisrCisrLyogT3VyIGFyZ3VtZW50IHBhcnNlci4gIFRoZSBAY29kZXtvcHRpb25zfSwgQGNvZGV7cGFyc2VyfSwgYW5kCisrICAgQGNvZGV7YXJnc19kb2N9IGZpZWxkcyBhcmUgemVybyBiZWNhdXNlIHdlIGhhdmUgbmVpdGhlciBvcHRpb25zIG9yCisrICAgYXJndW1lbnRzOyBAY29kZXtkb2N9IGFuZCBAY29kZXthcmdwX3Byb2dyYW1fYnVnX2FkZHJlc3N9IHdpbGwgYmUKKysgICB1c2VkIGluIHRoZSBvdXRwdXQgZm9yIEBzYW1wey0taGVscH0sIGFuZCB0aGUgQHNhbXB7LS12ZXJzaW9ufQorKyAgIG9wdGlvbiB3aWxsIHByaW50IG91dCBAY29kZXthcmdwX3Byb2dyYW1fdmVyc2lvbn0uICAqLworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwID0geyAwLCAwLCAwLCBkb2MgfTsKKysKKytpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgIGFyZ3BfcGFyc2UgKCZhcmdwLCBhcmdjLCBhcmd2LCAwLCAwLCAwKTsKKysgIGV4aXQgKDApOworK30KK2RpZmYgLS1naXQgYS90ZXN0L2FyZ3AvYXJncC1leDMuYyBiL3Rlc3QvYXJncC9hcmdwLWV4My5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjRkNWM1MAorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL2FyZ3AtZXgzLmMKK0BAIC0wLDAgKzEsMTUzIEBACisrLyogQXJncCBleGFtcGxlICMzIC0tIGEgcHJvZ3JhbSB3aXRoIG9wdGlvbnMgYW5kIGFyZ3VtZW50cyB1c2luZyBhcmdwICovCisrCisrLyogVGhpcyBwcm9ncmFtIHVzZXMgdGhlIHNhbWUgZmVhdHVyZXMgYXMgZXhhbXBsZSAyLCBhbmQgdXNlcyBvcHRpb25zIGFuZAorKyAgIGFyZ3VtZW50cy4KKysKKysgICBXZSBub3cgdXNlIHRoZSBmaXJzdCBmb3VyIGZpZWxkcyBpbiBBUkdQLCBzbyBoZXJlJ3MgYSBkZXNjcmlwdGlvbiBvZiB0aGVtOgorKyAgICAgT1BUSU9OUyAgLS0gQSBwb2ludGVyIHRvIGEgdmVjdG9yIG9mIHN0cnVjdCBhcmdwX29wdGlvbiAoc2VlIGJlbG93KQorKyAgICAgUEFSU0VSICAgLS0gQSBmdW5jdGlvbiB0byBwYXJzZSBhIHNpbmdsZSBvcHRpb24sIGNhbGxlZCBieSBhcmdwCisrICAgICBBUkdTX0RPQyAtLSBBIHN0cmluZyBkZXNjcmliaW5nIGhvdyB0aGUgbm9uLW9wdGlvbiBhcmd1bWVudHMgc2hvdWxkIGxvb2sKKysgICAgIERPQyAgICAgIC0tIEEgZGVzY3JpcHRpdmUgc3RyaW5nIGFib3V0IHRoaXMgcHJvZ3JhbTsgaWYgaXQgY29udGFpbnMgYQorKyAgICAgICAgICAgICAgICAgdmVydGljYWwgdGFiIGNoYXJhY3RlciAoXHYpLCB0aGUgcGFydCBhZnRlciBpdCB3aWxsIGJlCisrICAgICAgICAgICAgICAgICBwcmludGVkICpmb2xsb3dpbmcqIHRoZSBvcHRpb25zCisrCisrICAgVGhlIGZ1bmN0aW9uIFBBUlNFUiB0YWtlcyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKKysgICAgIEtFWSAgLS0gQW4gaW50ZWdlciBzcGVjaWZ5aW5nIHdoaWNoIG9wdGlvbiB0aGlzIGlzICh0YWtlbgorKyAgICAgICAgICAgICBmcm9tIHRoZSBLRVkgZmllbGQgaW4gZWFjaCBzdHJ1Y3QgYXJncF9vcHRpb24pLCBvcgorKyAgICAgICAgICAgICBhIHNwZWNpYWwga2V5IHNwZWNpZnlpbmcgc29tZXRoaW5nIGVsc2U7IHRoZSBvbmx5CisrICAgICAgICAgICAgIHNwZWNpYWwga2V5cyB3ZSB1c2UgaGVyZSBhcmUgQVJHUF9LRVlfQVJHLCBtZWFuaW5nCisrICAgICAgICAgICAgIGEgbm9uLW9wdGlvbiBhcmd1bWVudCwgYW5kIEFSR1BfS0VZX0VORCwgbWVhbmluZworKyAgICAgICAgICAgICB0aGF0IGFsbCBhcmd1bWVudHMgaGF2ZSBiZWVuIHBhcnNlZAorKyAgICAgQVJHICAtLSBGb3IgYW4gb3B0aW9uIEtFWSwgdGhlIHN0cmluZyB2YWx1ZSBvZiBpdHMKKysgICAgICAgICAgICAgYXJndW1lbnQsIG9yIE5VTEwgaWYgaXQgaGFzIG5vbmUKKysgICAgIFNUQVRFLS0gQSBwb2ludGVyIHRvIGEgc3RydWN0IGFyZ3Bfc3RhdGUsIGNvbnRhaW5pbmcKKysgICAgICAgICAgICAgdmFyaW91cyB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhcnNpbmcgc3RhdGU7IHVzZWQgaGVyZQorKyAgICAgICAgICAgICBhcmUgdGhlIElOUFVUIGZpZWxkLCB3aGljaCByZWZsZWN0cyB0aGUgSU5QVVQgYXJndW1lbnQgdG8KKysgICAgICAgICAgICAgYXJncF9wYXJzZSwgYW5kIHRoZSBBUkdfTlVNIGZpZWxkLCB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIHRoZQorKyAgICAgICAgICAgICBjdXJyZW50IG5vbi1vcHRpb24gYXJndW1lbnQgYmVpbmcgcGFyc2VkCisrICAgSXQgc2hvdWxkIHJldHVybiBlaXRoZXIgMCwgbWVhbmluZyBzdWNjZXNzLCBBUkdQX0VSUl9VTktOT1dOLCBtZWFuaW5nIHRoZQorKyAgIGdpdmVuIEtFWSB3YXNuJ3QgcmVjb2duaXplZCwgb3IgYW4gZXJybm8gdmFsdWUgaW5kaWNhdGluZyBzb21lIG90aGVyCisrICAgZXJyb3IuCisrCisrICAgTm90ZSB0aGF0IGluIHRoaXMgZXhhbXBsZSwgbWFpbiB1c2VzIGEgc3RydWN0dXJlIHRvIGNvbW11bmljYXRlIHdpdGggdGhlCisrICAgcGFyc2Vfb3B0IGZ1bmN0aW9uLCBhIHBvaW50ZXIgdG8gd2hpY2ggaXQgcGFzc2VzIGluIHRoZSBJTlBVVCBhcmd1bWVudCB0bworKyAgIGFyZ3BfcGFyc2UuICBPZiBjb3Vyc2UsIGl0J3MgYWxzbyBwb3NzaWJsZSB0byB1c2UgZ2xvYmFsIHZhcmlhYmxlcworKyAgIGluc3RlYWQsIGJ1dCB0aGlzIGlzIHNvbWV3aGF0IG1vcmUgZmxleGlibGUuCisrCisrICAgVGhlIE9QVElPTlMgZmllbGQgY29udGFpbnMgYSBwb2ludGVyIHRvIGEgdmVjdG9yIG9mIHN0cnVjdCBhcmdwX29wdGlvbidzOworKyAgIHRoYXQgc3RydWN0dXJlIGhhcyB0aGUgZm9sbG93aW5nIGZpZWxkcyAoaWYgeW91IGFzc2lnbiB5b3VyIG9wdGlvbgorKyAgIHN0cnVjdHVyZXMgdXNpbmcgYXJyYXkgaW5pdGlhbGl6YXRpb24gbGlrZSB0aGlzIGV4YW1wbGUsIHVuc3BlY2lmaWVkCisrICAgZmllbGRzIHdpbGwgYmUgZGVmYXVsdGVkIHRvIDAsIGFuZCBuZWVkIG5vdCBiZSBzcGVjaWZpZWQpOgorKyAgICAgTkFNRSAgIC0tIFRoZSBuYW1lIG9mIHRoaXMgb3B0aW9uJ3MgbG9uZyBvcHRpb24gKG1heSBiZSB6ZXJvKQorKyAgICAgS0VZICAgIC0tIFRoZSBLRVkgdG8gcGFzcyB0byB0aGUgUEFSU0VSIGZ1bmN0aW9uIHdoZW4gcGFyc2luZyB0aGlzIG9wdGlvbiwKKysgICAgICAgICAgICAgICAqYW5kKiB0aGUgbmFtZSBvZiB0aGlzIG9wdGlvbidzIHNob3J0IG9wdGlvbiwgaWYgaXQgaXMgYQorKyAgICAgICAgICAgICAgIHByaW50YWJsZSBhc2NpaSBjaGFyYWN0ZXIKKysgICAgIEFSRyAgICAtLSBUaGUgbmFtZSBvZiB0aGlzIG9wdGlvbidzIGFyZ3VtZW50LCBpZiBhbnkKKysgICAgIEZMQUdTICAtLSBGbGFncyBkZXNjcmliaW5nIHRoaXMgb3B0aW9uOyBzb21lIG9mIHRoZW0gYXJlOgorKyAgICAgICAgICAgICAgICAgT1BUSU9OX0FSR19PUFRJT05BTCAtLSBUaGUgYXJndW1lbnQgdG8gdGhpcyBvcHRpb24gaXMgb3B0aW9uYWwKKysgICAgICAgICAgICAgICAgIE9QVElPTl9BTElBUyAgICAgICAgLS0gVGhpcyBvcHRpb24gaXMgYW4gYWxpYXMgZm9yIHRoZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyBvcHRpb24KKysgICAgICAgICAgICAgICAgIE9QVElPTl9ISURERU4gICAgICAgLS0gRG9uJ3Qgc2hvdyB0aGlzIG9wdGlvbiBpbiAtLWhlbHAgb3V0cHV0CisrICAgICBET0MgICAgLS0gQSBkb2N1bWVudGF0aW9uIHN0cmluZyBmb3IgdGhpcyBvcHRpb24sIHNob3duIGluIC0taGVscCBvdXRwdXQKKysKKysgICBBbiBvcHRpb25zIHZlY3RvciBzaG91bGQgYmUgdGVybWluYXRlZCBieSBhbiBvcHRpb24gd2l0aCBhbGwgZmllbGRzIHplcm8uICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX3ZlcnNpb24gPQorKyAgImFyZ3AtZXgzIDEuMCI7CisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzID0KKysgICI8YnVnLWdudS11dGlsc0BAZ251Lm9yZz4iOworKworKy8qIFByb2dyYW0gZG9jdW1lbnRhdGlvbi4gICovCisrc3RhdGljIGNoYXIgZG9jW10gPQorKyAgIkFyZ3AgZXhhbXBsZSAjMyAtLSBhIHByb2dyYW0gd2l0aCBvcHRpb25zIGFuZCBhcmd1bWVudHMgdXNpbmcgYXJncCI7CisrCisrLyogQSBkZXNjcmlwdGlvbiBvZiB0aGUgYXJndW1lbnRzIHdlIGFjY2VwdC4gICovCisrc3RhdGljIGNoYXIgYXJnc19kb2NbXSA9ICJBUkcxIEFSRzIiOworKworKy8qIFRoZSBvcHRpb25zIHdlIHVuZGVyc3RhbmQuICAqLworK3N0YXRpYyBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1tdID0geworKyAgeyJ2ZXJib3NlIiwgICd2JywgMCwgICAgICAwLCAgIlByb2R1Y2UgdmVyYm9zZSBvdXRwdXQiIH0sCisrICB7InF1aWV0IiwgICAgJ3EnLCAwLCAgICAgIDAsICAiRG9uJ3QgcHJvZHVjZSBhbnkgb3V0cHV0IiB9LAorKyAgeyJzaWxlbnQiLCAgICdzJywgMCwgICAgICBPUFRJT05fQUxJQVMgfSwKKysgIHsib3V0cHV0IiwgICAnbycsICJGSUxFIiwgMCwKKysgICAiT3V0cHV0IHRvIEZJTEUgaW5zdGVhZCBvZiBzdGFuZGFyZCBvdXRwdXQiIH0sCisrICB7IDAgfQorK307CisrCisrLyogVXNlZCBieSBAY29kZXttYWlufSB0byBjb21tdW5pY2F0ZSB3aXRoIEBjb2Rle3BhcnNlX29wdH0uICAqLworK3N0cnVjdCBhcmd1bWVudHMKKyt7CisrICBjaGFyICphcmdzWzJdOyAgICAgICAgICAgICAgIC8qIEB2YXJ7YXJnMX0gJiBAdmFye2FyZzJ9ICovCisrICBpbnQgc2lsZW50LCB2ZXJib3NlOworKyAgY2hhciAqb3V0cHV0X2ZpbGU7CisrfTsKKysKKysvKiBQYXJzZSBhIHNpbmdsZSBvcHRpb24uICAqLworK3N0YXRpYyBlcnJvcl90CisrcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICAvKiBHZXQgdGhlIEB2YXJ7aW5wdXR9IGFyZ3VtZW50IGZyb20gQGNvZGV7YXJncF9wYXJzZX0sIHdoaWNoIHdlCisrICAgICBrbm93IGlzIGEgcG9pbnRlciB0byBvdXIgYXJndW1lbnRzIHN0cnVjdHVyZS4gICovCisrICBzdHJ1Y3QgYXJndW1lbnRzICphcmd1bWVudHMgPSBzdGF0ZS0+aW5wdXQ7CisrCisrICBzd2l0Y2ggKGtleSkKKysgICAgeworKyAgICBjYXNlICdxJzogY2FzZSAncyc6CisrICAgICAgYXJndW1lbnRzLT5zaWxlbnQgPSAxOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlICd2JzoKKysgICAgICBhcmd1bWVudHMtPnZlcmJvc2UgPSAxOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlICdvJzoKKysgICAgICBhcmd1bWVudHMtPm91dHB1dF9maWxlID0gYXJnOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIEFSR1BfS0VZX0FSRzoKKysgICAgICBpZiAoc3RhdGUtPmFyZ19udW0gPj0gMikKKysgICAgICAgLyogVG9vIG1hbnkgYXJndW1lbnRzLiAgKi8KKysgICAgICAgYXJncF91c2FnZSAoc3RhdGUpOworKworKyAgICAgIGFyZ3VtZW50cy0+YXJnc1tzdGF0ZS0+YXJnX251bV0gPSBhcmc7CisrCisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgQVJHUF9LRVlfRU5EOgorKyAgICAgIGlmIChzdGF0ZS0+YXJnX251bSA8IDIpCisrICAgICAgIC8qIE5vdCBlbm91Z2ggYXJndW1lbnRzLiAgKi8KKysgICAgICAgYXJncF91c2FnZSAoc3RhdGUpOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBBUkdQX0VSUl9VTktOT1dOOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrCisrLyogT3VyIGFyZ3AgcGFyc2VyLiAgKi8KKytzdGF0aWMgc3RydWN0IGFyZ3AgYXJncCA9IHsgb3B0aW9ucywgcGFyc2Vfb3B0LCBhcmdzX2RvYywgZG9jIH07CisrCisraW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICBzdHJ1Y3QgYXJndW1lbnRzIGFyZ3VtZW50czsKKysKKysgIC8qIERlZmF1bHQgdmFsdWVzLiAgKi8KKysgIGFyZ3VtZW50cy5zaWxlbnQgPSAwOworKyAgYXJndW1lbnRzLnZlcmJvc2UgPSAwOworKyAgYXJndW1lbnRzLm91dHB1dF9maWxlID0gIi0iOworKworKyAgLyogUGFyc2Ugb3VyIGFyZ3VtZW50czsgZXZlcnkgb3B0aW9uIHNlZW4gYnkgQGNvZGV7cGFyc2Vfb3B0fSB3aWxsCisrICAgICBiZSByZWZsZWN0ZWQgaW4gQGNvZGV7YXJndW1lbnRzfS4gICovCisrICBhcmdwX3BhcnNlICgmYXJncCwgYXJnYywgYXJndiwgMCwgMCwgJmFyZ3VtZW50cyk7CisrCisrICBwcmludGYgKCJBUkcxID0gJXNcbkFSRzIgPSAlc1xuT1VUUFVUX0ZJTEUgPSAlc1xuIgorKyAgICAgICAgICJWRVJCT1NFID0gJXNcblNJTEVOVCA9ICVzXG4iLAorKyAgICAgICAgIGFyZ3VtZW50cy5hcmdzWzBdLCBhcmd1bWVudHMuYXJnc1sxXSwKKysgICAgICAgICBhcmd1bWVudHMub3V0cHV0X2ZpbGUsCisrICAgICAgICAgYXJndW1lbnRzLnZlcmJvc2UgPyAieWVzIiA6ICJubyIsCisrICAgICAgICAgYXJndW1lbnRzLnNpbGVudCA/ICJ5ZXMiIDogIm5vIik7CisrCisrICBleGl0ICgwKTsKKyt9CitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL2FyZ3AtZXg0LmMgYi90ZXN0L2FyZ3AvYXJncC1leDQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmM3N2M3ZWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC9hcmdwLWV4NC5jCitAQCAtMCwwICsxLDE2NyBAQAorKy8qIEFyZ3AgZXhhbXBsZSAjNCAtLSBhIHByb2dyYW0gd2l0aCBzb21ld2hhdCBtb3JlIGNvbXBsaWNhdGVkIG9wdGlvbnMgKi8KKysKKysvKiBUaGlzIHByb2dyYW0gdXNlcyB0aGUgc2FtZSBmZWF0dXJlcyBhcyBleGFtcGxlIDMsIGJ1dCBoYXMgbW9yZQorKyAgIG9wdGlvbnMsIGFuZCBzb21ld2hhdCBtb3JlIHN0cnVjdHVyZSBpbiB0aGUgLWhlbHAgb3V0cHV0LiAgSXQKKysgICBhbHNvIHNob3dzIGhvdyB5b3UgY2FuIGBzdGVhbCcgdGhlIHJlbWFpbmRlciBvZiB0aGUgaW5wdXQKKysgICBhcmd1bWVudHMgcGFzdCBhIGNlcnRhaW4gcG9pbnQsIGZvciBwcm9ncmFtcyB0aGF0IGFjY2VwdCBhCisrICAgbGlzdCBvZiBpdGVtcy4gIEl0IGFsc28gc2hvd3MgdGhlIHNwZWNpYWwgYXJncCBLRVkgdmFsdWUKKysgICBBUkdQX0tFWV9OT19BUkdTLCB3aGljaCBpcyBvbmx5IGdpdmVuIGlmIG5vIG5vbi1vcHRpb24KKysgICBhcmd1bWVudHMgd2VyZSBzdXBwbGllZCB0byB0aGUgcHJvZ3JhbS4KKysKKysgICBGb3Igc3RydWN0dXJpbmcgdGhlIGhlbHAgb3V0cHV0LCB0d28gZmVhdHVyZXMgYXJlIHVzZWQsCisrICAgKmhlYWRlcnMqIHdoaWNoIGFyZSBlbnRyaWVzIGluIHRoZSBvcHRpb25zIHZlY3RvciB3aXRoIHRoZQorKyAgIGZpcnN0IGZvdXIgZmllbGRzIGJlaW5nIHplcm8sIGFuZCBhIHR3byBwYXJ0IGRvY3VtZW50YXRpb24KKysgICBzdHJpbmcgKGluIHRoZSB2YXJpYWJsZSBET0MpLCB3aGljaCBhbGxvd3MgZG9jdW1lbnRhdGlvbiBib3RoCisrICAgYmVmb3JlIGFuZCBhZnRlciB0aGUgb3B0aW9uczsgdGhlIHR3byBwYXJ0cyBvZiBET0MgYXJlCisrICAgc2VwYXJhdGVkIGJ5IGEgdmVydGljYWwtdGFiIGNoYXJhY3RlciAoJ1x2Jywgb3IgJ1wwMTMnKS4gIEJ5CisrICAgY29udmVudGlvbiwgdGhlIGRvY3VtZW50YXRpb24gYmVmb3JlIHRoZSBvcHRpb25zIGlzIGp1c3QgYQorKyAgIHNob3J0IHN0cmluZyBzYXlpbmcgd2hhdCB0aGUgcHJvZ3JhbSBkb2VzLCBhbmQgdGhhdCBhZnRlcndhcmRzCisrICAgaXMgbG9uZ2VyLCBkZXNjcmliaW5nIHRoZSBiZWhhdmlvciBpbiBtb3JlIGRldGFpbC4gIEFsbAorKyAgIGRvY3VtZW50YXRpb24gc3RyaW5ncyBhcmUgYXV0b21hdGljYWxseSBmaWxsZWQgZm9yIG91dHB1dCwKKysgICBhbHRob3VnaCBuZXdsaW5lcyBtYXkgYmUgaW5jbHVkZWQgdG8gZm9yY2UgYSBsaW5lIGJyZWFrIGF0IGEKKysgICBwYXJ0aWN1bGFyIHBvaW50LiAgQWxsIGRvY3VtZW50YXRpb24gc3RyaW5ncyBhcmUgYWxzbyBwYXNzZWQgdG8KKysgICB0aGUgYGdldHRleHQnIGZ1bmN0aW9uLCBmb3IgcG9zc2libGUgdHJhbnNsYXRpb24gaW50byB0aGUKKysgICBjdXJyZW50IGxvY2FsZS4gICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX3ZlcnNpb24gPQorKyAgImFyZ3AtZXg0IDEuMCI7CisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzID0KKysgICI8YnVnLWdudS11dGlsc0BAcHJlcC5haS5taXQuZWR1PiI7CisrCisrLyogUHJvZ3JhbSBkb2N1bWVudGF0aW9uLiAgKi8KKytzdGF0aWMgY2hhciBkb2NbXSA9CisrICAiQXJncCBleGFtcGxlICM0IC0tIGEgcHJvZ3JhbSB3aXRoIHNvbWV3aGF0IG1vcmUgY29tcGxpY2F0ZWRcCisrb3B0aW9uc1wKKytcdlRoaXMgcGFydCBvZiB0aGUgZG9jdW1lbnRhdGlvbiBjb21lcyAqYWZ0ZXIqIHRoZSBvcHRpb25zO1wKKysgbm90ZSB0aGF0IHRoZSB0ZXh0IGlzIGF1dG9tYXRpY2FsbHkgZmlsbGVkLCBidXQgaXQncyBwb3NzaWJsZVwKKysgdG8gZm9yY2UgYSBsaW5lLWJyZWFrLCBlLmcuXG48LS0gaGVyZS4iOworKworKy8qIEEgZGVzY3JpcHRpb24gb2YgdGhlIGFyZ3VtZW50cyB3ZSBhY2NlcHQuICAqLworK3N0YXRpYyBjaGFyIGFyZ3NfZG9jW10gPSAiQVJHMSBbU1RSSU5HLi4uXSI7CisrCisrLyogS2V5cyBmb3Igb3B0aW9ucyB3aXRob3V0IHNob3J0LW9wdGlvbnMuICAqLworKyNkZWZpbmUgT1BUX0FCT1JUICAxICAgICAgICAgICAvKiAtLWFib3J0ICovCisrCisrLyogVGhlIG9wdGlvbnMgd2UgdW5kZXJzdGFuZC4gICovCisrc3RhdGljIHN0cnVjdCBhcmdwX29wdGlvbiBvcHRpb25zW10gPSB7CisrICB7InZlcmJvc2UiLCAgJ3YnLCAwLCAgICAgICAwLCAiUHJvZHVjZSB2ZXJib3NlIG91dHB1dCIgfSwKKysgIHsicXVpZXQiLCAgICAncScsIDAsICAgICAgIDAsICJEb24ndCBwcm9kdWNlIGFueSBvdXRwdXQiIH0sCisrICB7InNpbGVudCIsICAgJ3MnLCAwLCAgICAgICBPUFRJT05fQUxJQVMgfSwKKysgIHsib3V0cHV0IiwgICAnbycsICJGSUxFIiwgIDAsCisrICAgIk91dHB1dCB0byBGSUxFIGluc3RlYWQgb2Ygc3RhbmRhcmQgb3V0cHV0IiB9LAorKworKyAgezAsMCwwLDAsICJUaGUgZm9sbG93aW5nIG9wdGlvbnMgc2hvdWxkIGJlIGdyb3VwZWQgdG9nZXRoZXI6IiB9LAorKyAgeyJyZXBlYXQiLCAgICdyJywgIkNPVU5UIiwgT1BUSU9OX0FSR19PUFRJT05BTCwKKysgICAiUmVwZWF0IHRoZSBvdXRwdXQgQ09VTlQgKGRlZmF1bHQgMTApIHRpbWVzIn0sCisrICB7ImFib3J0IiwgICAgT1BUX0FCT1JULCAwLCAwLCAiQWJvcnQgYmVmb3JlIHNob3dpbmcgYW55IG91dHB1dCJ9LAorKworKyAgeyAwIH0KKyt9OworKworKy8qIFVzZWQgYnkgQGNvZGV7bWFpbn0gdG8gY29tbXVuaWNhdGUgd2l0aCBAY29kZXtwYXJzZV9vcHR9LiAgKi8KKytzdHJ1Y3QgYXJndW1lbnRzCisreworKyAgY2hhciAqYXJnMTsgICAgICAgICAgICAgICAgICAvKiBAdmFye2FyZzF9ICovCisrICBjaGFyICoqc3RyaW5nczsgICAgICAgICAgICAgIC8qIFtAdmFye3N0cmluZ31AZG90c3t9XSAqLworKyAgaW50IHNpbGVudCwgdmVyYm9zZSwgYWJvcnQ7ICAvKiBAc2FtcHstc30sIEBzYW1wey12fSwgQHNhbXB7LS1hYm9ydH0gKi8KKysgIGNoYXIgKm91dHB1dF9maWxlOyAgICAgICAgICAgLyogQHZhcntmaWxlfSBhcmcgdG8gQHNhbXB7LS1vdXRwdXR9ICovCisrICBpbnQgcmVwZWF0X2NvdW50OyAgICAgICAgICAgIC8qIEB2YXJ7Y291bnR9IGFyZyB0byBAc2FtcHstLXJlcGVhdH0gKi8KKyt9OworKworKy8qIFBhcnNlIGEgc2luZ2xlIG9wdGlvbi4gICovCisrc3RhdGljIGVycm9yX3QKKytwYXJzZV9vcHQgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIC8qIEdldCB0aGUgQGNvZGV7aW5wdXR9IGFyZ3VtZW50IGZyb20gQGNvZGV7YXJncF9wYXJzZX0sIHdoaWNoIHdlCisrICAgICBrbm93IGlzIGEgcG9pbnRlciB0byBvdXIgYXJndW1lbnRzIHN0cnVjdHVyZS4gICovCisrICBzdHJ1Y3QgYXJndW1lbnRzICphcmd1bWVudHMgPSBzdGF0ZS0+aW5wdXQ7CisrCisrICBzd2l0Y2ggKGtleSkKKysgICAgeworKyAgICBjYXNlICdxJzogY2FzZSAncyc6CisrICAgICAgYXJndW1lbnRzLT5zaWxlbnQgPSAxOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlICd2JzoKKysgICAgICBhcmd1bWVudHMtPnZlcmJvc2UgPSAxOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlICdvJzoKKysgICAgICBhcmd1bWVudHMtPm91dHB1dF9maWxlID0gYXJnOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlICdyJzoKKysgICAgICBhcmd1bWVudHMtPnJlcGVhdF9jb3VudCA9IGFyZyA/IGF0b2kgKGFyZykgOiAxMDsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBPUFRfQUJPUlQ6CisrICAgICAgYXJndW1lbnRzLT5hYm9ydCA9IDE7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgQVJHUF9LRVlfTk9fQVJHUzoKKysgICAgICBhcmdwX3VzYWdlIChzdGF0ZSk7CisrCisrICAgIGNhc2UgQVJHUF9LRVlfQVJHOgorKyAgICAgIC8qIEhlcmUgd2Uga25vdyB0aGF0IEBjb2Rle3N0YXRlLT5hcmdfbnVtID09IDB9LCBzaW5jZSB3ZQorKyAgICAgICAgZm9yY2UgYXJndW1lbnQgcGFyc2luZyB0byBlbmQgYmVmb3JlIGFueSBtb3JlIGFyZ3VtZW50cyBjYW4KKysgICAgICAgIGdldCBoZXJlLiAgKi8KKysgICAgICBhcmd1bWVudHMtPmFyZzEgPSBhcmc7CisrCisrICAgICAgLyogTm93IHdlIGNvbnN1bWUgYWxsIHRoZSByZXN0IG9mIHRoZSBhcmd1bWVudHMuCisrICAgICAgICBAY29kZXtzdGF0ZS0+bmV4dH0gaXMgdGhlIGluZGV4IGluIEBjb2Rle3N0YXRlLT5hcmd2fSBvZiB0aGUKKysgICAgICAgIG5leHQgYXJndW1lbnQgdG8gYmUgcGFyc2VkLCB3aGljaCBpcyB0aGUgZmlyc3QgQHZhcntzdHJpbmd9CisrICAgICAgICB3ZSdyZSBpbnRlcmVzdGVkIGluLCBzbyB3ZSBjYW4ganVzdCB1c2UKKysgICAgICAgIEBjb2RleyZzdGF0ZS0+YXJndltzdGF0ZS0+bmV4dF19IGFzIHRoZSB2YWx1ZSBmb3IKKysgICAgICAgIGFyZ3VtZW50cy0+c3RyaW5ncy4KKysKKysgICAgICAgIEBlbXBoe0luIGFkZGl0aW9ufSwgYnkgc2V0dGluZyBAY29kZXtzdGF0ZS0+bmV4dH0gdG8gdGhlIGVuZAorKyAgICAgICAgb2YgdGhlIGFyZ3VtZW50cywgd2UgY2FuIGZvcmNlIGFyZ3AgdG8gc3RvcCBwYXJzaW5nIGhlcmUgYW5kCisrICAgICAgICByZXR1cm4uICAqLworKyAgICAgIGFyZ3VtZW50cy0+c3RyaW5ncyA9ICZzdGF0ZS0+YXJndltzdGF0ZS0+bmV4dF07CisrICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+YXJnYzsKKysKKysgICAgICBicmVhazsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorKworKy8qIE91ciBhcmdwIHBhcnNlci4gICovCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AgPSB7IG9wdGlvbnMsIHBhcnNlX29wdCwgYXJnc19kb2MsIGRvYyB9OworKworK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgaW50IGksIGo7CisrICBzdHJ1Y3QgYXJndW1lbnRzIGFyZ3VtZW50czsKKysKKysgIC8qIERlZmF1bHQgdmFsdWVzLiAgKi8KKysgIGFyZ3VtZW50cy5zaWxlbnQgPSAwOworKyAgYXJndW1lbnRzLnZlcmJvc2UgPSAwOworKyAgYXJndW1lbnRzLm91dHB1dF9maWxlID0gIi0iOworKyAgYXJndW1lbnRzLnJlcGVhdF9jb3VudCA9IDE7CisrICBhcmd1bWVudHMuYWJvcnQgPSAwOworKworKyAgLyogUGFyc2Ugb3VyIGFyZ3VtZW50czsgZXZlcnkgb3B0aW9uIHNlZW4gYnkgQGNvZGV7cGFyc2Vfb3B0fSB3aWxsIGJlCisrICAgICByZWZsZWN0ZWQgaW4gQGNvZGV7YXJndW1lbnRzfS4gICovCisrICBhcmdwX3BhcnNlICgmYXJncCwgYXJnYywgYXJndiwgMCwgMCwgJmFyZ3VtZW50cyk7CisrCisrICBpZiAoYXJndW1lbnRzLmFib3J0KQorKyAgICBlcnJvciAoMTAsIDAsICJBQk9SVEVEIik7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgYXJndW1lbnRzLnJlcGVhdF9jb3VudDsgaSsrKQorKyAgICB7CisrICAgICAgcHJpbnRmICgiQVJHMSA9ICVzXG4iLCBhcmd1bWVudHMuYXJnMSk7CisrICAgICAgcHJpbnRmICgiU1RSSU5HUyA9ICIpOworKyAgICAgIGZvciAoaiA9IDA7IGFyZ3VtZW50cy5zdHJpbmdzW2pdOyBqKyspCisrICAgICAgIHByaW50ZiAoaiA9PSAwID8gIiVzIiA6ICIsICVzIiwgYXJndW1lbnRzLnN0cmluZ3Nbal0pOworKyAgICAgIHByaW50ZiAoIlxuIik7CisrICAgICAgcHJpbnRmICgiT1VUUFVUX0ZJTEUgPSAlc1xuVkVSQk9TRSA9ICVzXG5TSUxFTlQgPSAlc1xuIiwKKysgICAgICAgICAgICAgYXJndW1lbnRzLm91dHB1dF9maWxlLAorKyAgICAgICAgICAgICBhcmd1bWVudHMudmVyYm9zZSA/ICJ5ZXMiIDogIm5vIiwKKysgICAgICAgICAgICAgYXJndW1lbnRzLnNpbGVudCA/ICJ5ZXMiIDogIm5vIik7CisrICAgIH0KKysKKysgIGV4aXQgKDApOworK30KK2RpZmYgLS1naXQgYS90ZXN0L2FyZ3AvYXJncC10ZXN0LmMgYi90ZXN0L2FyZ3AvYXJncC10ZXN0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iM2Q1NzNiCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0L2FyZ3AvYXJncC10ZXN0LmMKK0BAIC0wLDAgKzEsMjA5IEBACisrLyogVGVzdCBwcm9ncmFtIGZvciBhcmdwIGFyZ3VtZW50IHBhcnNlcgorKyAgIENvcHlyaWdodCAoQykgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8dGltZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8YXJncC5oPgorKworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uID0gImFyZ3AtdGVzdCAxLjAiOworKworK3N0cnVjdCBhcmdwX29wdGlvbiBzdWJfb3B0aW9uc1tdID0KKyt7CisrICB7InN1Ym9wdDEiLCAgICAgICAncycsICAgICAwLCAgMCwgIk5lc3RlZCBvcHRpb24gMSJ9LAorKyAgeyJzdWJvcHQyIiwgICAgICAgJ1MnLCAgICAgMCwgIDAsICJOZXN0ZWQgb3B0aW9uIDIifSwKKysKKysgIHsgMCwgMCwgMCwgMCwgIlNvbWUgbW9yZSBuZXN0ZWQgb3B0aW9uczoiLCAxMH0sCisrICB7InN1Ym9wdDMiLCAgICAgICAncCcsICAgICAwLCAgMCwgIk5lc3RlZCBvcHRpb24gMyJ9LAorKworKyAgeyJzdWJvcHQ0IiwgICAgICAgJ3EnLCAgICAgMCwgIDAsICJOZXN0ZWQgb3B0aW9uIDQiLCAxfSwKKysKKysgIHswfQorK307CisrCisrc3RhdGljIGNvbnN0IGNoYXIgc3ViX2FyZ3NfZG9jW10gPSAiU1RSSU5HLi4uXG4tIjsKKytzdGF0aWMgY29uc3QgY2hhciBzdWJfZG9jW10gPSAiXHZUaGlzIGlzIHRoZSBkb2Mgc3RyaW5nIGZyb20gdGhlIHN1Yi1hcmctcGFyc2VyLiI7CisrCisrc3RhdGljIGVycm9yX3QKKytzdWJfcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICBzd2l0Y2ggKGtleSkKKysgICAgeworKyAgICBjYXNlIEFSR1BfS0VZX05PX0FSR1M6CisrICAgICAgcHJpbnRmICgiTk8gU1VCIEFSR1NcbiIpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEFSR1BfS0VZX0FSRzoKKysgICAgICBwcmludGYgKCJTVUIgQVJHOiAlc1xuIiwgYXJnKTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAncycgOiBjYXNlICdTJzogY2FzZSAncCc6IGNhc2UgJ3EnOgorKyAgICAgIHByaW50ZiAoIlNVQiBLRVkgJWNcbiIsIGtleSk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEFSR1BfRVJSX1VOS05PV047CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgY2hhciAqCisrc3ViX2hlbHBfZmlsdGVyIChpbnQga2V5LCBjb25zdCBjaGFyICp0ZXh0LCB2b2lkICppbnB1dCkKKyt7CisrICBpZiAoa2V5ID09IEFSR1BfS0VZX0hFTFBfRVhUUkEpCisrICAgIHJldHVybiBzdHJkdXAgKCJUaGlzIGlzIHNvbWUgZXh0cmEgdGV4dCBmcm9tIHRoZSBzdWIgcGFyc2VyIChub3RlIHRoYXQgaXQgXAorK2lzIHByZWNlZGVkIGJ5IGEgYmxhbmsgbGluZSkuIik7CisrICBlbHNlCisrICAgIHJldHVybiAoY2hhciAqKXRleHQ7CisrfQorKworK3N0YXRpYyBzdHJ1Y3QgYXJncCBzdWJfYXJncCA9IHsKKysgIHN1Yl9vcHRpb25zLCBzdWJfcGFyc2Vfb3B0LCBzdWJfYXJnc19kb2MsIHN1Yl9kb2MsIDAsIHN1Yl9oZWxwX2ZpbHRlcgorK307CisrCisrLyogU3RydWN0dXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgcGFyc2luZyBmdW5jdGlvbnMuICAqLworK3N0cnVjdCBwYXJhbXMKKyt7CisrICB1bnNpZ25lZCBmb29ubHk7ICAgICAgICAgICAgIC8qIFZhbHVlIHBhcnNlZCBmb3IgZm9vbmx5LiAgKi8KKysgIHVuc2lnbmVkIGZvb25seV9kZWZhdWx0OyAgICAgLyogRGVmYXVsdCB2YWx1ZSBmb3IgaXQuICAqLworK307CisrCisrI2RlZmluZSBPUFRfUEdSUCAxCisrI2RlZmluZSBPUFRfU0VTUyAyCisrCisrc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdGlvbnNbXSA9CisreworKyAgeyJwaWQiLCAgICAgICAncCcsICAgICAiUElEIiwgMCwgIkxpc3QgdGhlIHByb2Nlc3MgUElEIn0sCisrICB7InBncnAiLCAgICAgIE9QVF9QR1JQLCJQR1JQIiwwLCAiTGlzdCBwcm9jZXNzZXMgaW4gdGhlIHByb2Nlc3MgZ3JvdXAgUEdSUCJ9LAorKyAgeyJuby1wYXJlbnQiLCAnUCcsICAgIDAsICAgICAwLCAiSW5jbHVkZSBwcm9jZXNzZXMgd2l0aG91dCBwYXJlbnRzIn0sCisrICB7MCwgICAgICAgICAgICd4JywgICAgIDAsICAgICBPUFRJT05fQUxJQVN9LAorKyAgeyJhbGwtZmllbGRzIiwnUScsICAgICAwLCAgICAgMCwgIkRvbid0IGVsaWRlIHVudXNhYmxlIGZpZWxkcyAobm9ybWFsbHkiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaWYgdGhlcmUncyBzb21lIHJlYXNvbiBwcyBjYW4ndCIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBwcmludCBhIGZpZWxkIGZvciBhbnkgcHJvY2VzcywgaXQncyIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiByZW1vdmVkIGZyb20gdGhlIG91dHB1dCBlbnRpcmVseSkiIH0sCisrICB7InJldmVyc2UiLCAgICdyJywgICAgMCwgICAgICAwLCAiUmV2ZXJzZSB0aGUgb3JkZXIgb2YgYW55IHNvcnQifSwKKysgIHsiZ3JhdHVpdG91c2x5LWxvbmctcmV2ZXJzZS1vcHRpb24iLCAwLCAwLCBPUFRJT05fQUxJQVN9LAorKyAgeyJzZXNzaW9uIiwgIE9QVF9TRVNTLCJTSUQiLCAgT1BUSU9OX0FSR19PUFRJT05BTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFkZCB0aGUgcHJvY2Vzc2VzIGZyb20gdGhlIHNlc3Npb24iCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgU0lEICh3aGljaCBkZWZhdWx0cyB0byB0aGUgc2lkIG9mIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRoZSBjdXJyZW50IHByb2Nlc3MpIiB9LAorKworKyAgezAsMCwwLDAsICJIZXJlIGFyZSBzb21lIG1vcmUgb3B0aW9uczoifSwKKysgIHsiZm9vbmx5IiwgJ2YnLCAiWk9UIiwgT1BUSU9OX0FSR19PUFRJT05BTCwgIkdsb3JrIGEgZm9vbmx5In0sCisrICB7InphemEiLCAneicsIDAsIDAsICJTbml0IGEgemFyIn0sCisrCisrICB7MH0KKyt9OworKworK3N0YXRpYyBjb25zdCBjaGFyIGFyZ3NfZG9jW10gPSAiU1RSSU5HIjsKKytzdGF0aWMgY29uc3QgY2hhciBkb2NbXSA9ICJUZXN0IHByb2dyYW0gZm9yIGFyZ3AuIgorKyAiXHZUaGlzIGRvYyBzdHJpbmcgY29tZXMgYWZ0ZXIgdGhlIG9wdGlvbnMuIgorKyAiXG5IZXkhICBTb21lIG1hbnVhbCBmb3JtYXR0aW5nISIKKysgIlxuVGhlIGN1cnJlbnQgdGltZSBpczogJXMiOworKworK3N0YXRpYyB2b2lkCisrcG9wdCAoaW50IGtleSwgY2hhciAqYXJnKQorK3sKKysgIGNoYXIgYnVmWzEwXTsKKysgIGlmIChpc3ByaW50IChrZXkpKQorKyAgICBzcHJpbnRmIChidWYsICIlYyIsIGtleSk7CisrICBlbHNlCisrICAgIHNwcmludGYgKGJ1ZiwgIiVkIiwga2V5KTsKKysgIGlmIChhcmcpCisrICAgIHByaW50ZiAoIktFWSAlczogJXNcbiIsIGJ1ZiwgYXJnKTsKKysgIGVsc2UKKysgICAgcHJpbnRmICgiS0VZICVzXG4iLCBidWYpOworK30KKysKKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlX29wdCAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgc3RydWN0IHBhcmFtcyAqcGFyYW1zID0gc3RhdGUtPmlucHV0OworKworKyAgc3dpdGNoIChrZXkpCisrICAgIHsKKysgICAgY2FzZSBBUkdQX0tFWV9OT19BUkdTOgorKyAgICAgIHByaW50ZiAoIk5PIEFSR1NcbiIpOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIEFSR1BfS0VZX0FSRzoKKysgICAgICBpZiAoc3RhdGUtPmFyZ19udW0gPiAwKQorKyAgICAgICByZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjsgLyogTGVhdmUgaXQgZm9yIHRoZSBzdWItYXJnIHBhcnNlci4gICovCisrICAgICAgcHJpbnRmICgiQVJHOiAlc1xuIiwgYXJnKTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnZic6CisrICAgICAgaWYgKGFyZykKKysgICAgICAgcGFyYW1zLT5mb29ubHkgPSBhdG9pIChhcmcpOworKyAgICAgIGVsc2UKKysgICAgICAgcGFyYW1zLT5mb29ubHkgPSBwYXJhbXMtPmZvb25seV9kZWZhdWx0OworKyAgICAgIHBvcHQgKGtleSwgYXJnKTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAncCc6IGNhc2UgJ1AnOiBjYXNlIE9QVF9QR1JQOiBjYXNlICd4JzogY2FzZSAnUSc6CisrICAgIGNhc2UgJ3InOiBjYXNlIE9QVF9TRVNTOiBjYXNlICd6JzoKKysgICAgICBwb3B0IChrZXksIGFyZyk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEFSR1BfRVJSX1VOS05PV047CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgY2hhciAqCisraGVscF9maWx0ZXIgKGludCBrZXksIGNvbnN0IGNoYXIgKnRleHQsIHZvaWQgKmlucHV0KQorK3sKKysgIGNoYXIgKm5ld190ZXh0OworKyAgc3RydWN0IHBhcmFtcyAqcGFyYW1zID0gaW5wdXQ7CisrCisrICBpZiAoa2V5ID09IEFSR1BfS0VZX0hFTFBfUE9TVF9ET0MgJiYgdGV4dCkKKysgICAgeworKyAgICAgIHRpbWVfdCBub3cgPSB0aW1lICgwKTsKKysgICAgICBhc3ByaW50ZiAoJm5ld190ZXh0LCB0ZXh0LCBjdGltZSAoJm5vdykpOworKyAgICB9CisrICBlbHNlIGlmIChrZXkgPT0gJ2YnKQorKyAgICAvKiBTaG93IHRoZSBkZWZhdWx0IGZvciB0aGUgLS1mb29ubHkgb3B0aW9uLiAgKi8KKysgICAgYXNwcmludGYgKCZuZXdfdGV4dCwgIiVzIChaT1QgZGVmYXVsdHMgdG8gJXgpIiwKKysgICAgICAgICAgICAgdGV4dCwgcGFyYW1zLT5mb29ubHlfZGVmYXVsdCk7CisrICBlbHNlCisrICAgIG5ld190ZXh0ID0gKGNoYXIgKil0ZXh0OworKworKyAgcmV0dXJuIG5ld190ZXh0OworK30KKysKKytzdGF0aWMgc3RydWN0IGFyZ3BfY2hpbGQgYXJncF9jaGlsZHJlbltdID0geyB7ICZzdWJfYXJncCB9LCB7IDAgfSB9OworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwID0geworKyAgb3B0aW9ucywgcGFyc2Vfb3B0LCBhcmdzX2RvYywgZG9jLCBhcmdwX2NoaWxkcmVuLCBoZWxwX2ZpbHRlcgorK307CisrCisraW50CisrbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgIHN0cnVjdCBwYXJhbXMgcGFyYW1zOworKyAgcGFyYW1zLmZvb25seSA9IDA7CisrICBwYXJhbXMuZm9vbmx5X2RlZmF1bHQgPSByYW5kb20gKCk7CisrICBhcmdwX3BhcnNlICgmYXJncCwgYXJnYywgYXJndiwgMCwgMCwgJnBhcmFtcyk7CisrICBwcmludGYgKCJBZnRlciBwYXJzaW5nOiBmb29ubHkgPSAleFxuIiwgcGFyYW1zLmZvb25seSk7CisrICByZXR1cm4gMDsKKyt9CitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL2J1Zy1hcmdwMS5jIGIvdGVzdC9hcmdwL2J1Zy1hcmdwMS5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYTI4Y2Y0YgorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL2J1Zy1hcmdwMS5jCitAQCAtMCwwICsxLDI2IEBACisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIHRlc3Rfb3B0aW9uc1tdID0KKyt7CisrICB7IE5VTEwsICdhJywgTlVMTCwgT1BUSU9OX0RPQywgTlVMTCB9LAorKyAgeyBOVUxMLCAnYicsIE5VTEwsIE9QVElPTl9ET0MsIE5VTEwgfSwKKysgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9CisrfTsKKysKKytzdGF0aWMgc3RydWN0IGFyZ3AgdGVzdF9hcmdwID0KKyt7CisrICB0ZXN0X29wdGlvbnMKKyt9OworKworKworK3N0YXRpYyBpbnQKKytkb190ZXN0IChpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgIGludCBpOworKyAgYXJncF9wYXJzZSAoJnRlc3RfYXJncCwgYXJnYywgYXJndiwgMCwgJmksIE5VTEwpOworKyAgcmV0dXJuIDA7CisrfQorKworKyNkZWZpbmUgVEVTVF9GVU5DVElPTiBkb190ZXN0IChhcmdjLCBhcmd2KQorKyNpbmNsdWRlICIuLi90ZXN0LXNrZWxldG9uLmMiCitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL3RzdC1hcmdwMS5jIGIvdGVzdC9hcmdwL3RzdC1hcmdwMS5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODI3ZGFjYQorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL3RzdC1hcmdwMS5jCitAQCAtMCwwICsxLDExOCBAQAorKy8qIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBDb250cmlidXRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlciBhdCByZWRoYXQuY29tPiwgMjAwMi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKysKKysKKysKKysjZGVmaW5lIE9QVF9UT19USFJFQUQgICAgICAgICAgMzAwCisrI2RlZmluZSBPUFRfVE9fUFJPQ0VTUyAgICAgICAgIDMwMQorKyNkZWZpbmUgT1BUX1NZTkNfU0lHTkFMICAgICAgICAgICAgICAgIDMwMgorKyNkZWZpbmUgT1BUX1NZTkNfSk9JTiAgICAgICAgICAzMDMKKysjZGVmaW5lIE9QVF9UT1BMRVZFTCAgICAgICAgICAgMzA0CisrCisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiB0ZXN0X29wdGlvbnNbXSA9CisrICB7CisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgIlwKKytUaGlzIGlzIGEgdGVzdCBmb3IgdGhyZWFkcyBzbyB3ZSBhbGxvdyB0aGVyIHVzZXIgdG8gc2VsZWN0aW9uIHRoZSBudW1iZXIgb2YgXAorK3RocmVhZHMgd2hpY2ggYXJlIHVzZWQgYXQgYW55IG9uZSB0aW1lLiAgSW5kZXBlbmRlbnRseSB0aGUgdG90YWwgbnVtYmVyIG9mIFwKKytyb3VuZHMgY2FuIGJlIHNlbGVjdGVkLiAgVGhpcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIHRocmVhZHMgd2hpY2ggd2lsbCBoYXZlIFwKKytydW4gd2hlbiB0aGUgcHJvY2VzcyB0ZXJtaW5hdGVzOiIgfSwKKysgICAgeyAidGhyZWFkcyIsICd0JywgIk5VTUJFUiIsIDAsICJOdW1iZXIgb2YgdGhyZWFkcyB1c2VkIGF0IG9uY2UiIH0sCisrICAgIHsgInN0YXJ0cyIsICdzJywgIk5VTUJFUiIsIDAsICJUb3RhbCBudW1iZXIgb2Ygd29ya2luZyB0aHJlYWRzIiB9LAorKyAgICB7ICJ0b3BsZXZlbCIsIE9QVF9UT1BMRVZFTCwgIk5VTUJFUiIsIDAsCisrICAgICAgIk51bWJlciBvZiB0b3BsZXZlbCB0aHJlYWRzIHdoaWNoIHN0YXJ0IHRoZSBvdGhlciB0aHJlYWRzOyB0aGlzIFwKKytpbXBsaWVzIC0tc3luYy1qb2luIiB9LAorKworKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsICJcCisrRWFjaCB0aHJlYWQgY2FuIGRvIG9uZSBvZiB0d28gdGhpbmdzOiBzbGVlcCBvciBkbyB3b3JrLiAgVGhlIGxhdHRlciBpcyAxMDAlIFwKKytDUFUgYm91bmQuICBUaGUgd29yayBsb2FkIGlzIHRoZSBwcm9iYWJpbGl0eSBhIHRocmVhZCBkb2VzIHdvcmsuICBBbGwgdmFsdWVzIFwKKytmcm9tIHplcm8gdG8gMTAwIChpbmNsdXNpdmUpIGFyZSB2YWxpZC4gIEhvdyBvZnRlbiBlYWNoIHRocmVhZCByZXBlYXRzIHRoaXMgXAorK2NhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBudW1iZXIgb2Ygcm91bmRzLiAgVGhlIHdvcmsgY29zdCBkZXRlcm1pbmVzIGhvdyBsb25nIFwKKytlYWNoIHdvcmsgc2Vzc2lvbiAobm90IHNsZWVwaW5nKSB0YWtlcy4gIElmIGl0IGlzIHplcm8gYSB0aHJlYWQgd291bGQgXAorK2VmZmVjdGl2ZWx5IG5vdGhpbmcuICBCeSBzZXR0aW5nIHRoZSBudW1iZXIgb2Ygcm91bmRzIHRvIHplcm8gdGhlIHRocmVhZCBcCisrZG9lcyBubyB3b3JrIGF0IGFsbCBhbmQgcHVyZSB0aHJlYWQgY3JlYXRpb24gdGltZXMgY2FuIGJlIG1lYXN1cmVkLiIgfSwKKysgICAgeyAid29ya2xvYWQiLCAndycsICJQRVJDRU5UIiwgMCwgIlBlcmNlbnRhZ2Ugb2YgdGltZSBzcGVudCB3b3JraW5nIiB9LAorKyAgICB7ICJ3b3JrY29zdCIsICdjJywgIk5VTUJFUiIsIDAsCisrICAgICAgIkZhY3RvciBpbiB0aGUgY29zdCBvZiBlYWNoIHJvdW5kIG9mIHdvcmtpbmciIH0sCisrICAgIHsgInJvdW5kcyIsICdyJywgIk5VTUJFUiIsIDAsICJOdW1iZXIgb2Ygcm91bmRzIGVhY2ggdGhyZWFkIHJ1bnMiIH0sCisrCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgIlwKKytUaGVyZSBhcmUgYSBudW1iZXIgb2YgZGlmZmVyZW50IG1ldGhvZHMgaG93IHRocmVhZCBjcmVhdGlvbiBjYW4gYmUgXAorK3N5bmNocm9uaXplZC4gIFN5bmNocm9uaXphdGlvbiBpcyBuZWNlc3Nhcnkgc2luY2UgdGhlIG51bWJlciBvZiBjb25jdXJyZW50bHkgXAorK3J1bm5pbmcgdGhyZWFkcyBpcyBsaW1pdGVkLiIgfSwKKysgICAgeyAic3luYy1zaWduYWwiLCBPUFRfU1lOQ19TSUdOQUwsIE5VTEwsIDAsCisrICAgICAgIlN5bmNocm9uaXplIHVzaW5nIGEgc2lnbmFsIChkZWZhdWx0KSIgfSwKKysgICAgeyAic3luYy1qb2luIiwgT1BUX1NZTkNfSk9JTiwgTlVMTCwgMCwgIlN5bmNocm9uaXplIHVzaW5nIHB0aHJlYWRfam9pbiIgfSwKKysKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCAiXAorK09uZSBwYXJhbWV0ZXIgZm9yIGVhY2ggdGhyZWFkcyBleGVjdXRpb24gaXMgdGhlIHNpemUgb2YgdGhlIHN0YWNrLiAgSWYgdGhpcyBcCisrcGFyYW1ldGVyIGlzIG5vdCB1c2VkIHRoZSBzeXN0ZW0ncyBkZWZhdWx0IHN0YWNrIHNpemUgaXMgdXNlZC4gIElmIG1hbnkgXAorK3RocmVhZHMgYXJlIHVzZWQgdGhlIHN0YWNrIHNpemUgc2hvdWxkIGJlIGNob3NlbiBxdWl0ZSBzbWFsbC4iIH0sCisrICAgIHsgInN0YWNrc2l6ZSIsICdTJywgIkJZVEVTIiwgMCwgIlNpemUgb2YgdGhyZWFkcyBzdGFjayIgfSwKKysgICAgeyAiZ3VhcmRzaXplIiwgJ2cnLCAiQllURVMiLCAwLAorKyAgICAgICJTaXplIG9mIHN0YWNrIGd1YXJkIGFyZWE7IG11c3QgZml0IGludG8gdGhlIHN0YWNrIiB9LAorKworKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsICJTaWduYWwgb3B0aW9uczoiIH0sCisrICAgIHsgInRvLXRocmVhZCIsIE9QVF9UT19USFJFQUQsIE5VTEwsIDAsICJTZW5kIHNpZ25hbCB0byBtYWluIHRocmVhZCIgfSwKKysgICAgeyAidG8tcHJvY2VzcyIsIE9QVF9UT19QUk9DRVNTLCBOVUxMLCAwLAorKyAgICAgICJTZW5kIHNpZ25hbCB0byBwcm9jZXNzIChkZWZhdWx0KSIgfSwKKysKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCAiQWRtaW5pc3RyYXRpdmUgb3B0aW9uczoiIH0sCisrICAgIHsgInByb2dyZXNzIiwgJ3AnLCBOVUxMLCAwLCAiU2hvdyBzaWducyBvZiBwcm9ncmVzcyIgfSwKKysgICAgeyAidGltaW5nIiwgJ1QnLCBOVUxMLCAwLAorKyAgICAgICJNZWFzdXJlIHRpbWUgZnJvbSBzdGFydHVwIHRvIHRoZSBsYXN0IHRocmVhZCBmaW5pc2hpbmciIH0sCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9CisrICB9OworKworKy8qIFByb3RvdHlwZSBmb3Igb3B0aW9uIGhhbmRsZXIuICAqLworK3N0YXRpYyBlcnJvcl90IHBhcnNlX29wdCAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpOworKworKy8qIERhdGEgc3RydWN0dXJlIHRvIGNvbW11bmljYXRlIHdpdGggYXJncCBmdW5jdGlvbnMuICAqLworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwID0KKyt7CisrICB0ZXN0X29wdGlvbnMsIHBhcnNlX29wdAorK307CisrCisrCisrc3RhdGljIGludAorK2RvX3Rlc3QgKHZvaWQpCisreworKyAgaW50IGFyZ2MgPSAyOworKyAgY2hhciAqYXJndlszXSA9IHsgKGNoYXIgKikgInRzdC1hcmdwMSIsIChjaGFyICopICItLWhlbHAiLCBOVUxMIH07CisrICBpbnQgcmVtYWluaW5nOworKworKyAgLyogUGFyc2UgYW5kIHByb2Nlc3MgYXJndW1lbnRzLiAgKi8KKysgIGFyZ3BfcGFyc2UgKCZhcmdwLCBhcmdjLCBhcmd2LCAwLCAmcmVtYWluaW5nLCBOVUxMKTsKKysKKysgIHJldHVybiAwOworK30KKysKKysKKysvKiBIYW5kbGUgcHJvZ3JhbSBhcmd1bWVudHMuICAqLworK3N0YXRpYyBlcnJvcl90CisrcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICByZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjsKKyt9CisrCisrI2RlZmluZSBURVNUX0ZVTkNUSU9OIGRvX3Rlc3QgKCkKKysjaW5jbHVkZSAiLi4vdGVzdC1za2VsZXRvbi5jIgorZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC90c3QtYXJncDIuYyBiL3Rlc3QvYXJncC90c3QtYXJncDIuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcwNWNkY2EKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC90c3QtYXJncDIuYworQEAgLTAsMCArMSwxMDEgQEAKKysvKiBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgQ29udHJpYnV0ZWQgYnkgSmFrdWIgSmVsaW5layA8amFrdWIgYXQgcmVkaGF0LmNvbT4sIDIwMDcuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHQxW10gPQorKyAgeworKyAgICB7ICJvcHQxIiwgJzEnLCAiTlVNQkVSIiwgMCwgIk9wdGlvbiAxIiB9LAorKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQorKyAgfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdDJbXSA9CisrICB7CisrICAgIHsgIm9wdDIiLCAnMicsICJOVU1CRVIiLCAwLCAiT3B0aW9uIDIiIH0sCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9CisrICB9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0M1tdID0KKysgIHsKKysgICAgeyAib3B0MyIsICczJywgIk5VTUJFUiIsIDAsICJPcHRpb24gMyIgfSwKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMIH0KKysgIH07CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHQ0W10gPQorKyAgeworKyAgICB7ICJvcHQ0IiwgJzQnLCAiTlVNQkVSIiwgMCwgIk9wdGlvbiA0IiB9LAorKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQorKyAgfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdDVbXSA9CisrICB7CisrICAgIHsgIm9wdDUiLCAnNScsICJOVU1CRVIiLCAwLCAiT3B0aW9uIDUiIH0sCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9CisrICB9OworKworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwNSA9CisrICB7CisrICAgIG9wdDUsIE5VTEwsICJhcmdzIGRvYzUiLCAiZG9jNSIsIE5VTEwsIE5VTEwsIE5VTEwKKysgIH07CisrCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3A0ID0KKysgIHsKKysgICAgb3B0NCwgTlVMTCwgImFyZ3MgZG9jNCIsICJkb2M0IiwgTlVMTCwgTlVMTCwgTlVMTAorKyAgfTsKKysKKytzdGF0aWMgc3RydWN0IGFyZ3AgYXJncDMgPQorKyAgeworKyAgICBvcHQzLCBOVUxMLCAiYXJncyBkb2MzIiwgImRvYzMiLCBOVUxMLCBOVUxMLCBOVUxMCisrICB9OworKworK3N0YXRpYyBzdHJ1Y3QgYXJncF9jaGlsZCBjaGlsZHJlbjJbXSA9CisrICB7CisrICAgIHsgJmFyZ3A0LCAwLCAiY2hpbGQzIiwgMyB9LAorKyAgICB7ICZhcmdwNSwgMCwgImNoaWxkNCIsIDQgfSwKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwIH0KKysgIH07CisrCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AyID0KKysgIHsKKysgICAgb3B0MiwgTlVMTCwgImFyZ3MgZG9jMiIsICJkb2MyIiwgY2hpbGRyZW4yLCBOVUxMLCBOVUxMCisrICB9OworKworK3N0YXRpYyBzdHJ1Y3QgYXJncF9jaGlsZCBjaGlsZHJlbjFbXSA9CisrICB7CisrICAgIHsgJmFyZ3AyLCAwLCAiY2hpbGQxIiwgMSB9LAorKyAgICB7ICZhcmdwMywgMCwgImNoaWxkMiIsIDIgfSwKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwIH0KKysgIH07CisrCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AxID0KKysgIHsKKysgICAgb3B0MSwgTlVMTCwgImFyZ3MgZG9jMSIsICJkb2MxIiwgY2hpbGRyZW4xLCBOVUxMLCBOVUxMCisrICB9OworKworKworK3N0YXRpYyBpbnQKKytkb190ZXN0ICh2b2lkKQorK3sKKysgIGFyZ3BfaGVscCAoJmFyZ3AxLCBzdGRvdXQsIEFSR1BfSEVMUF9MT05HLCAoY2hhciAqKSAidHN0LWFyZ3AyIik7CisrICByZXR1cm4gMDsKKyt9CisrCisrCisrI2RlZmluZSBURVNUX0ZVTkNUSU9OIGRvX3Rlc3QgKCkKKysjaW5jbHVkZSAiLi4vdGVzdC1za2VsZXRvbi5jIgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDQtRG9udC1zdXBwb3J0LWxvY2FsaXNlZC1vcHRpbWl6YXRpb25zLXRoaXMtaGVscHMtdG8taC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNC1Eb250LXN1cHBvcnQtbG9jYWxpc2VkLW9wdGltaXphdGlvbnMtdGhpcy1oZWxwcy10by1oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOWUxM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDQtRG9udC1zdXBwb3J0LWxvY2FsaXNlZC1vcHRpbWl6YXRpb25zLXRoaXMtaGVscHMtdG8taC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDMxNzg1YzU0NGFiZThiMjE1ZGJiMjI2NGZiMTFlZTcwNTE1MTU3OTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCAxNiBBdWcgMjAxNSAyMDo1ODo1OSAtMDcwMAorU3ViamVjdDogW1BBVENIIDQvN10gRG9udCBzdXBwb3J0IGxvY2FsaXNlZCBvcHRpbWl6YXRpb25zIHRoaXMgaGVscHMgdG8gaGF2ZSBhCisgZ2xvYmFsIC1PIGxldmVsCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgbGlicHRocmVhZC9ucHRsL3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrLmMgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlicHRocmVhZC9ucHRsL3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrLmMgYi9saWJwdGhyZWFkL25wdGwvcHRocmVhZF9tdXRleF90aW1lZGxvY2suYworaW5kZXggMDQxODdmNi4uZjU2ZjZjNSAxMDA2NDQKKy0tLSBhL2xpYnB0aHJlYWQvbnB0bC9wdGhyZWFkX211dGV4X3RpbWVkbG9jay5jCisrKysgYi9saWJwdGhyZWFkL25wdGwvcHRocmVhZF9tdXRleF90aW1lZGxvY2suYworQEAgLTI4LDcgKzI4LDkgQEAKKyAgKiBlcnJvcjogY2FuJ3QgZmluZCBhIHJlZ2lzdGVyIGluIGNsYXNzIOKAmEdFTkVSQUxfUkVHU+KAmSB3aGlsZSByZWxvYWRpbmcg4oCYYXNt4oCZCisgICovCisgaW50CisrI2lmbmRlZiAgX19PUFRJTUlaRV9fCisgYXR0cmlidXRlX29wdGltaXplKCJPcyIpCisrI2VuZGlmCisgcHRocmVhZF9tdXRleF90aW1lZGxvY2sgKAorICAgICAgcHRocmVhZF9tdXRleF90ICptdXRleCwKKyAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYWJzdGltZSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA1LUFsd2F5cy11c2UtTzItZm9yLWNvbXBpbGluZy1mb3JrLmMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDUtQWx3YXlzLXVzZS1PMi1mb3ItY29tcGlsaW5nLWZvcmsuYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDliMjQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA1LUFsd2F5cy11c2UtTzItZm9yLWNvbXBpbGluZy1mb3JrLmMucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA4ODNkZWJjMjJlMzBhOTQ3ZmU1ODU4Y2MwN2VlNWFlYmQzZDA3YTJlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTYgQXVnIDIwMTUgMjA6NTk6NTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCA1LzddIEFsd2F5cyB1c2UgLU8yIGZvciBjb21waWxpbmcgZm9yay5jCisKK1doZW4gY29tcGlsaW5nIGluIHRodW1iIG1vZGUgZm9yIGFybSB3aXRoIC1PcyBnY2MgZ2l2ZXMgdXAgc2luY2UgaXQgY2FuCitub3QgZmluZCByZWdpc3RlcnMgdG8gc3BpbGwuIFNvIHdlIHVzZSAtTzIgb3B0aW9uIGZvciBjb21waWxpbmcgZm9yay5jCitJdCBtYXkgYmUgYWRkcmVzc2FibGUgaW4gZ2NjLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGxpYnB0aHJlYWQvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vTWFrZWZpbGUuYXJjaCB8IDYgKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlicHRocmVhZC9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9NYWtlZmlsZS5hcmNoIGIvbGlicHRocmVhZC9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9NYWtlZmlsZS5hcmNoCitpbmRleCAwZWEwYjI5Li4wNzY3ZTljIDEwMDY0NAorLS0tIGEvbGlicHRocmVhZC9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9NYWtlZmlsZS5hcmNoCisrKysgYi9saWJwdGhyZWFkL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL01ha2VmaWxlLmFyY2gKK0BAIC0yMSwzICsyMSw5IEBAIEFTRkxBR1MtcHQtdmZvcmsuUyA9IC1tYXJtCisgQ0ZMQUdTLU9NSVQtcHQtdmZvcmsuUyA9IC1tdGh1bWIKKyBBU0ZMQUdTLXZmb3JrLlMgPSAtbWFybQorIENGTEFHUy1PTUlULXZmb3JrLlMgPSAtbXRodW1iCisrCisrIyBGb3IgYXJtIGZvcmsuYyBkb2VzIG5vdCBjb21waWxlIHdpdGggLU9zIHdoZW4gY29tcGlsaW5nCisrIyBpbiB0aHVtYjEgbW9kZQorK2lmZXEgKCQoQ09NUElMRV9JTl9USFVNQl9NT0RFKSx5KQorK0NGTEFHUy1mb3JrLmMgPSAtTzIKKytlbmRpZgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDYtbGRzby1saW1pdGVkLXN1cHBvcnQtZm9yLU9SSUdJTi1pbi1ycGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNi1sZHNvLWxpbWl0ZWQtc3VwcG9ydC1mb3ItT1JJR0lOLWluLXJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZDg3MzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDYtbGRzby1saW1pdGVkLXN1cHBvcnQtZm9yLU9SSUdJTi1pbi1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDIzMyBAQAorRnJvbSBiNDBjMTI5ZWQyZDUzYjY5NDYzODgzYTU0MjJkZDRhMDEyYTM5OGY5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitEYXRlOiBGcmksIDMgQXByIDIwMTUgMDU6MDI6MjcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCA2LzddIGxkc286IGxpbWl0ZWQgc3VwcG9ydCBmb3IgJE9SSUdJTiBpbiBycGF0aAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitEZXJpdmVkIGZyb206CitodHRwOi8vbGlzdHMuYnVzeWJveC5uZXQvcGlwZXJtYWlsL3VjbGliYy8yMDExLU1hcmNoLzA0NTAwMy5odG1sCisKK0hvd2V2ZXIsIHRoZSBhYm92ZSBwYXRjaCBpbnRyb2R1Y2VkICdfZGxfc3RyY2hyJyBpbiBsZHNvL2xkc28vZGwtZWxmLmMsCithbmQgY2F1c2VkIHRoZSBmb2xsb3dpbmcgdW5kZWZpbmVkIHJlZmVyZW5jaW5nIGNvbXBpbGluZyBlcnJvcjoKKworICB8IC4uLi9saWJkbC5hKGxpYmRsLm9zKTogSW4gZnVuY3Rpb24gYHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeSc6CisgIHwgLi4uL2RsLWVsZi5jOjE1NjogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX2RsX3N0cmNocicKKyAgfCBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworVGhpcyBwcm9ibGVtIHdvdWxkIGJlIHJlcHJvZHVjZWQgdGhyb3VnaCBjb21waWxpbmcgZ2RiIGluIHN0YXRpYyBtb2RlCit1c2luZyB1Y2xpYmMuCisKK1NvLCBhZGQgdGhlIGRlZmluaXRpb24gb2YgJ19kbF9zdHJjaHInIHRvIGZpeCBpdC4gVGhlICdfZGxfc3Ryc3RyJyBpcworYWRkZWQgYXMgd2VsbC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogVGltbyBUZXLDpHMgPHRpbW8udGVyYXMgYXQgaWtpLmZpPgorU2lnbmVkLW9mZi1ieTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGxkc28vaW5jbHVkZS9kbC1zdHJpbmcuaCB8ICAyICsrCisgbGRzby9sZHNvL2RsLWVsZi5jICAgICAgIHwgNzkgKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgbGRzby9sZHNvL2xkc28uYyAgICAgICAgIHwgMTggKysrKysrKysrLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDU5IGluc2VydGlvbnMoKyksIDQwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGRzby9pbmNsdWRlL2RsLXN0cmluZy5oIGIvbGRzby9pbmNsdWRlL2RsLXN0cmluZy5oCitpbmRleCBhYWNhZDEwLi4xNGFlNjE3IDEwMDY0NAorLS0tIGEvbGRzby9pbmNsdWRlL2RsLXN0cmluZy5oCisrKysgYi9sZHNvL2luY2x1ZGUvZGwtc3RyaW5nLmgKK0BAIC0yMDQsNyArMjA0LDkgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBjaGFyICogX2RsX2dldF9sYXN0X3BhdGhfY29tcG9uZW50KGNoYXIgKnBhdGgpCisgIyBkZWZpbmUgX2RsX3N0cmNhdCBzdHJjYXQKKyAjIGRlZmluZSBfZGxfc3RyY3B5IHN0cmNweQorICMgZGVmaW5lIF9kbF9zdHJjbXAgc3RyY21wCisrIyBkZWZpbmUgX2RsX3N0cmNociBzdHJjaHIKKyAjIGRlZmluZSBfZGxfc3RycmNociBzdHJyY2hyCisrIyBkZWZpbmUgX2RsX3N0cnN0ciBzdHJzdHIKKyAjIGRlZmluZSBfZGxfbWVtY3B5IG1lbWNweQorICMgZGVmaW5lIF9kbF9tZW1jbXAgbWVtY21wCisgIyBkZWZpbmUgX2RsX21lbXNldCBtZW1zZXQKK2RpZmYgLS1naXQgYS9sZHNvL2xkc28vZGwtZWxmLmMgYi9sZHNvL2xkc28vZGwtZWxmLmMKK2luZGV4IDU2MzE5MDUuLjZhYjdhZmUgMTAwNjQ0CistLS0gYS9sZHNvL2xkc28vZGwtZWxmLmMKKysrKyBiL2xkc28vbGRzby9kbC1lbGYuYworQEAgLTEzMyw1NiArMTMzLDYwIEBAIF9kbF9wcm90ZWN0X3JlbHJvIChzdHJ1Y3QgZWxmX3Jlc29sdmUgKmwpCisgICogaW4gdUNsaWJjL2xkc28vdXRpbC9sZGQuYyAqLworIHN0YXRpYyBzdHJ1Y3QgZWxmX3Jlc29sdmUgKgorIHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCByZmxhZ3MsIGNvbnN0IGNoYXIgKnBhdGhfbGlzdCwKKy0Jc3RydWN0IGR5bl9lbGYgKipycG50KQorKwlzdHJ1Y3QgZHluX2VsZiAqKnJwbnQsIGNvbnN0IGNoYXIqIG9yaWdpbikKKyB7CistCWNoYXIgKnBhdGgsICpwYXRoX24sICpteWxpYm5hbWU7CisrCWNoYXIgKm15bGlibmFtZTsKKysJY29uc3QgY2hhciAqcCwgKnBuOworIAlzdHJ1Y3QgZWxmX3Jlc29sdmUgKnRwbnQ7CistCWludCBkb25lOworKwlpbnQgcGxlbjsKKyAKKyAJaWYgKHBhdGhfbGlzdD09TlVMTCkKKyAJCXJldHVybiBOVUxMOworIAorLQkvKiBXZSBuZWVkIGEgd3JpdGFibGUgY29weSBvZiB0aGlzIHN0cmluZywgYnV0IHdlIGRvbid0CistCSAqIG5lZWQgdGhpcyBhbGxvY2F0ZWQgcGVybWFuZW50bHkgc2luY2Ugd2UgZG9uJ3Qgd2FudAorLQkgKiB0byBsZWFrIG1lbW9yeSwgc28gdXNlIGFsbG9jYSB0byBwdXQgcGF0aCBvbiB0aGUgc3RhY2sgKi8KKy0JZG9uZSA9IF9kbF9zdHJsZW4ocGF0aF9saXN0KTsKKy0JcGF0aCA9IGFsbG9jYShkb25lICsgMSk7CistCisgCS8qIGFub3RoZXIgYml0IG9mIGxvY2FsIHN0b3JhZ2UgKi8KKyAJbXlsaWJuYW1lID0gYWxsb2NhKDIwNTApOworIAorLQlfZGxfbWVtY3B5KHBhdGgsIHBhdGhfbGlzdCwgZG9uZSsxKTsKKy0KKyAJLyogVW5saWtlIGxkZC5jLCBkb24ndCBib3RoZXIgdG8gZWxpbWluYXRlIGRvdWJsZSAvL3MgKi8KKyAKKyAJLyogUmVwbGFjZSBjb2xvbnMgd2l0aCB6ZXJvcyBpbiBwYXRoX2xpc3QgKi8KKyAJLyogOiBhdCB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiBwYXRoIG1hcHMgdG8gQ1dEICovCisgCS8qIDo6IGFueXdoZXJlIG1hcHMgQ1dEICovCisgCS8qICIiIG1hcHMgdG8gQ1dEICovCistCWRvbmUgPSAwOworLQlwYXRoX24gPSBwYXRoOworLQlkbyB7CistCQlpZiAoKnBhdGggPT0gMCkgeworLQkJCSpwYXRoID0gJzonOworLQkJCWRvbmUgPSAxOworKwlmb3IgKHAgPSBwYXRoX2xpc3Q7IHAgIT0gTlVMTDsgcCA9IHBuKSB7CisrCQlwbiA9IF9kbF9zdHJjaHIocCArIDEsICc6Jyk7CisrCQlpZiAocG4gIT0gTlVMTCkgeworKwkJCXBsZW4gPSBwbiAtIHA7CisrCQkJcG4rKzsKKysJCX0gZWxzZQorKwkJCXBsZW4gPSBfZGxfc3RybGVuKHApOworKworKwkJaWYgKHBsZW4gPj0gNyAmJiBfZGxfbWVtY21wKHAsICIkT1JJR0lOIiwgNykgPT0gMCkgeworKwkJCWludCBvbGVuOworKwkJCWlmIChyZmxhZ3MgJiYgcGxlbiAhPSA3KQorKwkJCQljb250aW51ZTsKKysJCQlpZiAob3JpZ2luID09IE5VTEwpCisrCQkJCWNvbnRpbnVlOworKwkJCWZvciAob2xlbiA9IF9kbF9zdHJsZW4ob3JpZ2luKSAtIDE7IG9sZW4gPj0gMCAmJiBvcmlnaW5bb2xlbl0gIT0gJy8nOyBvbGVuLS0pCisrCQkJCTsKKysJCQlpZiAob2xlbiA8PSAwKQorKwkJCQljb250aW51ZTsKKysJCQlfZGxfbWVtY3B5KCZteWxpYm5hbWVbMF0sIG9yaWdpbiwgb2xlbik7CisrCQkJX2RsX21lbWNweSgmbXlsaWJuYW1lW29sZW5dLCBwICsgNywgcGxlbiAtIDcpOworKwkJCW15bGlibmFtZVtvbGVuICsgcGxlbiAtIDddID0gMDsKKysJCX0gZWxzZSBpZiAocGxlbiAhPSAwKSB7CisrCQkJX2RsX21lbWNweShteWxpYm5hbWUsIHAsIHBsZW4pOworKwkJCW15bGlibmFtZVtwbGVuXSA9IDA7CisrCQl9IGVsc2UgeworKwkJCV9kbF9zdHJjcHkobXlsaWJuYW1lLCAiLiIpOworIAkJfQorLQkJaWYgKCpwYXRoID09ICc6JykgeworLQkJCSpwYXRoID0gMDsKKy0JCQlpZiAoKnBhdGhfbikKKy0JCQkJX2RsX3N0cmNweShteWxpYm5hbWUsIHBhdGhfbik7CistCQkJZWxzZQorLQkJCQlfZGxfc3RyY3B5KG15bGlibmFtZSwgIi4iKTsgLyogQXNzdW1lIGN1cnJlbnQgZGlyIGlmIGVtcHR5IHBhdGggKi8KKy0JCQlfZGxfc3RyY2F0KG15bGlibmFtZSwgIi8iKTsKKy0JCQlfZGxfc3RyY2F0KG15bGlibmFtZSwgbmFtZSk7CisrCQlfZGxfc3RyY2F0KG15bGlibmFtZSwgIi8iKTsKKysJCV9kbF9zdHJjYXQobXlsaWJuYW1lLCBuYW1lKTsKKyAjaWZkZWYgX19MRFNPX1NBRkVfUlVOUEFUSF9fCistCQkJaWYgKCpteWxpYm5hbWUgPT0gJy8nKQorKwkJaWYgKCpteWxpYm5hbWUgPT0gJy8nKQorICNlbmRpZgorLQkJCQlpZiAoKHRwbnQgPSBfZGxfbG9hZF9lbGZfc2hhcmVkX2xpYnJhcnkocmZsYWdzLCBycG50LCBteWxpYm5hbWUpKSAhPSBOVUxMKQorLQkJCQkJcmV0dXJuIHRwbnQ7CistCQkJcGF0aF9uID0gcGF0aCsxOworLQkJfQorLQkJcGF0aCsrOworLQl9IHdoaWxlICghZG9uZSk7CisrCQlpZiAoKHRwbnQgPSBfZGxfbG9hZF9lbGZfc2hhcmVkX2xpYnJhcnkocmZsYWdzLCBycG50LCBteWxpYm5hbWUpKSAhPSBOVUxMKQorKwkJCXJldHVybiB0cG50OworKwl9CisgCXJldHVybiBOVUxMOworIH0KKyAKK0BAIC0yMzQsNyArMjM4LDggQEAgc3RydWN0IGVsZl9yZXNvbHZlICpfZGxfbG9hZF9zaGFyZWRfbGlicmFyeSh1bnNpZ25lZCByZmxhZ3MsIHN0cnVjdCBkeW5fZWxmICoqcnAKKyAJaWYgKHBudCkgeworIAkJcG50ICs9ICh1bnNpZ25lZCBsb25nKSB0cG50LT5keW5hbWljX2luZm9bRFRfU1RSVEFCXTsKKyAJCV9kbF9pZl9kZWJ1Z19kcHJpbnQoIlx0c2VhcmNoaW5nIFJQQVRIPSclcydcbiIsIHBudCk7CistCQlpZiAoKHRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgcG50LCBycG50KSkgIT0gTlVMTCkKKysJCWlmICgodHBudDEgPSBzZWFyY2hfZm9yX25hbWVkX2xpYnJhcnkobGlibmFtZSwgcmZsYWdzLCBwbnQsIHJwbnQsCisrCQkJCQkJICAgICAgdHBudC0+bGlibmFtZSkpICE9IE5VTEwpCisgCQkJcmV0dXJuIHRwbnQxOworIAl9CisgI2VuZGlmCitAQCAtMjQzLDcgKzI0OCw3IEBAIHN0cnVjdCBlbGZfcmVzb2x2ZSAqX2RsX2xvYWRfc2hhcmVkX2xpYnJhcnkodW5zaWduZWQgcmZsYWdzLCBzdHJ1Y3QgZHluX2VsZiAqKnJwCisgCS8qIENoZWNrIGluIExEX3tFTEZffUxJQlJBUllfUEFUSCwgaWYgc3BlY2lmaWVkIGFuZCBhbGxvd2VkICovCisgCWlmIChfZGxfbGlicmFyeV9wYXRoKSB7CisgCQlfZGxfaWZfZGVidWdfZHByaW50KCJcdHNlYXJjaGluZyBMRF9MSUJSQVJZX1BBVEg9JyVzJ1xuIiwgX2RsX2xpYnJhcnlfcGF0aCk7CistCQlpZiAoKHRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgX2RsX2xpYnJhcnlfcGF0aCwgcnBudCkpICE9IE5VTEwpCisrCQlpZiAoKHRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgX2RsX2xpYnJhcnlfcGF0aCwgcnBudCwgTlVMTCkpICE9IE5VTEwpCisgCQl7CisgCQkJcmV0dXJuIHRwbnQxOworIAkJfQorQEAgLTI1Nyw3ICsyNjIsNyBAQCBzdHJ1Y3QgZWxmX3Jlc29sdmUgKl9kbF9sb2FkX3NoYXJlZF9saWJyYXJ5KHVuc2lnbmVkIHJmbGFncywgc3RydWN0IGR5bl9lbGYgKipycAorIAlpZiAocG50KSB7CisgCQlwbnQgKz0gKHVuc2lnbmVkIGxvbmcpIHRwbnQtPmR5bmFtaWNfaW5mb1tEVF9TVFJUQUJdOworIAkJX2RsX2lmX2RlYnVnX2RwcmludCgiXHRzZWFyY2hpbmcgUlVOUEFUSD0nJXMnXG4iLCBwbnQpOworLQkJaWYgKCh0cG50MSA9IHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShsaWJuYW1lLCByZmxhZ3MsIHBudCwgcnBudCkpICE9IE5VTEwpCisrCQlpZiAoKHRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgcG50LCBycG50LCBOVUxMKSkgIT0gTlVMTCkKKyAJCQlyZXR1cm4gdHBudDE7CisgCX0KKyAjZW5kaWYKK0BAIC0yOTEsNyArMjk2LDcgQEAgc3RydWN0IGVsZl9yZXNvbHZlICpfZGxfbG9hZF9zaGFyZWRfbGlicmFyeSh1bnNpZ25lZCByZmxhZ3MsIHN0cnVjdCBkeW5fZWxmICoqcnAKKyAJLyogTG9vayBmb3IgbGlicmFyaWVzIHdoZXJldmVyIHRoZSBzaGFyZWQgbGlicmFyeSBsb2FkZXIKKyAJICogd2FzIGluc3RhbGxlZCAqLworIAlfZGxfaWZfZGVidWdfZHByaW50KCJcdHNlYXJjaGluZyBsZHNvIGRpcj0nJXMnXG4iLCBfZGxfbGRzb3BhdGgpOworLQl0cG50MSA9IHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShsaWJuYW1lLCByZmxhZ3MsIF9kbF9sZHNvcGF0aCwgcnBudCk7CisrCXRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgX2RsX2xkc29wYXRoLCBycG50LCBOVUxMKTsKKyAJaWYgKHRwbnQxICE9IE5VTEwpCisgCQlyZXR1cm4gdHBudDE7CisgI2VuZGlmCitAQCAtMzA0LDcgKzMwOSw3IEBAIHN0cnVjdCBlbGZfcmVzb2x2ZSAqX2RsX2xvYWRfc2hhcmVkX2xpYnJhcnkodW5zaWduZWQgcmZsYWdzLCBzdHJ1Y3QgZHluX2VsZiAqKnJwCisgI2lmbmRlZiBfX0xEU09fQ0FDSEVfU1VQUE9SVF9fCisgCQkJCQkiOiIgVUNMSUJDX1JVTlRJTUVfUFJFRklYICJ1c3IvWDExUjYvbGliIgorICNlbmRpZgorLQkJCQkJLCBycG50KTsKKysJCQkJCSwgcnBudCwgTlVMTCk7CisgCWlmICh0cG50MSAhPSBOVUxMKQorIAkJcmV0dXJuIHRwbnQxOworIAorZGlmZiAtLWdpdCBhL2xkc28vbGRzby9sZHNvLmMgYi9sZHNvL2xkc28vbGRzby5jCitpbmRleCBmMzhmOWUzLi4zODEyOTA4IDEwMDY0NAorLS0tIGEvbGRzby9sZHNvL2xkc28uYworKysrIGIvbGRzby9sZHNvL2xkc28uYworQEAgLTQwMiw2ICs0MDIsMjAgQEAgc3RhdGljIHB0cmRpZmZfdCBfZGxfYnVpbGRfbG9jYWxfc2NvcGUgKHN0cnVjdCBlbGZfcmVzb2x2ZSAqKmxpc3QsCisgCQkJCXAgKz0gX2RsX2J1aWxkX2xvY2FsX3Njb3BlIChwLCBxLT50cG50KTsKKyAJcmV0dXJuIHAgLSBsaXN0OworIH0KKysgCisrc3RhdGljIHZvaWQgX2RsX3NldHVwX3Byb2duYW1lKGNvbnN0IGNoYXIgKmFyZ3YwKQorK3sKKysJY2hhciBpbWFnZVtQQVRIX01BWF07CisrCXNzaXplX3QgczsKKysKKysJcyA9IF9kbF9yZWFkbGluaygiL3Byb2Mvc2VsZi9leGUiLCBpbWFnZSwgc2l6ZW9mKGltYWdlKSk7CisrCWlmIChzID4gMCAmJiBpbWFnZVswXSA9PSAnLycpIHsKKysJCWltYWdlW3NdID0gMDsKKysJCV9kbF9wcm9nbmFtZSA9IF9kbF9zdHJkdXAoaW1hZ2UpOworKwl9IGVsc2UgaWYgKGFyZ3YwKSB7CisrCQlfZGxfcHJvZ25hbWUgPSBhcmd2MDsKKysJfQorK30KKyAKKyB2b2lkICpfZGxfZ2V0X3JlYWR5X3RvX3J1bihzdHJ1Y3QgZWxmX3Jlc29sdmUgKnRwbnQsIERMX0xPQURBRERSX1RZUEUgbG9hZF9hZGRyLAorIAkJCSAgRWxmVyhhdXh2X3QpIGF1eHZ0W0FUX0VHSUQgKyAxXSwgY2hhciAqKmVudnAsIGNoYXIgKiphcmd2CitAQCAtNDU0LDkgKzQ2OCw3IEBAIHZvaWQgKl9kbF9nZXRfcmVhZHlfdG9fcnVuKHN0cnVjdCBlbGZfcmVzb2x2ZSAqdHBudCwgRExfTE9BREFERFJfVFlQRSBsb2FkX2FkZHIsCisgCSAqIGJlZW4gZml4ZWQgdXAgYnkgbm93LiAgU3RpbGwgbm8gZnVuY3Rpb24gY2FsbHMgb3V0c2lkZSBvZiB0aGlzCisgCSAqIGxpYnJhcnksIHNpbmNlIHRoZSBkeW5hbWljIHJlc29sdmVyIGlzIG5vdCB5ZXQgcmVhZHkuCisgCSAqLworLQlpZiAoYXJndlswXSkgeworLQkJX2RsX3Byb2duYW1lID0gYXJndlswXTsKKy0JfQorKwlfZGxfc2V0dXBfcHJvZ25hbWUoYXJndlswXSk7CisgCisgI2lmZGVmIF9fRFNCVF9fCisgCV9kbF9sZHNvX2RzYnQgPSAodm9pZCAqKXRwbnQtPmR5bmFtaWNfaW5mb1tEVF9EU0JUX0JBU0VfSURYXTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA3LW5wdGwtYXRmb3JrLUhpZGUtcHRocmVhZF9hdGZvcmstaW4tc2hhcmVkLXZlcnNpb25zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA3LW5wdGwtYXRmb3JrLUhpZGUtcHRocmVhZF9hdGZvcmstaW4tc2hhcmVkLXZlcnNpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOTMyYzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDctbnB0bC1hdGZvcmstSGlkZS1wdGhyZWFkX2F0Zm9yay1pbi1zaGFyZWQtdmVyc2lvbnMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA5MDUxNmFmOWY3NzZmOWMyODM1YjQ3ZmM1Mjc3NWRjYjMwN2E4NWFjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMjMgSnVuIDIwMTIgMTU6NTk6MDEgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCA3LzddIG5wdGwvYXRmb3JrOiBIaWRlIHB0aHJlYWRfYXRmb3JrIGluIHNoYXJlZCB2ZXJzaW9ucworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJwdGhyZWFkL25wdGwvTWFrZWZpbGUuaW4gfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYnB0aHJlYWQvbnB0bC9NYWtlZmlsZS5pbiBiL2xpYnB0aHJlYWQvbnB0bC9NYWtlZmlsZS5pbgoraW5kZXggNTVlZWJhMi4uOGNiOGZhOSAxMDA2NDQKKy0tLSBhL2xpYnB0aHJlYWQvbnB0bC9NYWtlZmlsZS5pbgorKysrIGIvbGlicHRocmVhZC9ucHRsL01ha2VmaWxlLmluCitAQCAtMTYsNiArMTYsNyBAQCBsaWJjLXNoYXJlZC1yb3V0aW5lcy15ID0gZm9yd2FyZC5jIGxpYmMtY2FuY2VsbGF0aW9uLmMKKyBsaWJjLXN0YXRpYy1yb3V0aW5lcy15ID0gYWxsb2NhX2N1dG9mZi5jIGxpYmMtY2FuY2VsbGF0aW9uLmMKKyBsaWJwdGhyZWFkLXNoYXJlZC1vbmx5LXJvdXRpbmVzLXkgPSB2ZXJzaW9uLmMKKyBsaWJwdGhyZWFkLXN0YXRpYy1vbmx5LXJvdXRpbmVzLXkgPSBwdGhyZWFkX2F0Zm9yay5jCisrCisgbGlicHRocmVhZC1yb3V0aW5lcy0gKz0gJChub3RkaXIgJCh3aWxkY2FyZCAkKGxpYnB0aHJlYWRfRElSKS9nZW5fKi5jKSkgIyBkdW1teSBnZW5lcmF0ZWQgZmlsZXMKKyBsaWJwdGhyZWFkLXJvdXRpbmVzLSArPSBhbGxvY2F0ZXN0YWNrLmMgIyBkdW1teSBpbmNsdWRlZCBieSBwdGhyZWFkX2NyZWF0ZS5jCisgbGlicHRocmVhZC1yb3V0aW5lcy0gKz0gcHRocmVhZF9tdXRleF9nZXRwcmlvY2VpbGluZy5jIHB0aHJlYWRfbXV0ZXhfc2V0cHJpb2NlaWxpbmcuYyAjIFhYWDogZGVsZXRlIHRob3NlIG9yIHVzZSB0aGVtIQorQEAgLTIwMSw3ICsyMDIsNyBAQCBDRkxBR1MtbXNnc25kLmMgPSAtZmV4Y2VwdGlvbnMgLWZhc3luY2hyb25vdXMtdW53aW5kLXRhYmxlcworIENGTEFHUy10Y2RyYWluLmMgPSAtZmV4Y2VwdGlvbnMgLWZhc3luY2hyb25vdXMtdW53aW5kLXRhYmxlcworIAorIENGTEFHUy1wdC1zeXN0ZW0uYyA9IC1mZXhjZXB0aW9ucyAtSSQodG9wX3NyY2RpcilsaWJjL3N0ZGxpYgorLQorK0NGTEFHUy1wdGhyZWFkX2F0Zm9yay5jID0gLUROT1RfSU5fbGliYworICMKKyAjIFRoZSByZXN0IG9mIHRoaXMgZmlsZSBpcyB1Q2xpYmMgc3BlY2lmaWMuCisgIworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L2xvY2FsZS5jZmcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L2xvY2FsZS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2NjQzNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvbG9jYWxlLmNmZwpAQCAtMCwwICsxLDMgQEAKK1VDTElCQ19IQVNfTE9DQUxFPXkKK1VDTElCQ19IQVNfWExPQ0FMRT15CitVQ0xJQkNfQlVJTERfTUlOSU1BTF9MT0NBTEU9eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC9vYnN0YWNrLmNmZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvb2JzdGFjay5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZiZjlkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvb2JzdGFjay5jZmcKQEAgLTAsMCArMSBAQAorVUNMSUJDX0hBU19PQlNUQUNLPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvdUNsaWJjLmRpc3RybyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvdUNsaWJjLmRpc3RybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTc1NDgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC91Q2xpYmMuZGlzdHJvCkBAIC0wLDAgKzEsMTkzIEBACisjCisjIEdlbmVyYWwgTGlicmFyeSBTZXR0aW5ncworIworIyBIQVZFX05PX1BJQyBpcyBub3Qgc2V0CisjIERPUElDIGlzIG5vdCBzZXQKKyMgSEFWRV9OT19TSEFSRUQgaXMgbm90IHNldAorIyBBUkNIX0hBU19OT19MRFNPIGlzIG5vdCBzZXQKK0hBVkVfU0hBUkVEPXkKKyMgRk9SQ0VfU0hBUkVBQkxFX1RFWFRfU0VHTUVOVFMgaXMgbm90IHNldAorTERTT19MRERfU1VQUE9SVD15CitMRFNPX0NBQ0hFX1NVUFBPUlQ9eQorIyBMRFNPX1BSRUxPQURfRklMRV9TVVBQT1JUIGlzIG5vdCBzZXQKK0xEU09fQkFTRV9GSUxFTkFNRT0ibGQuc28iCisjIFVDTElCQ19TVEFUSUNfTERDT05GSUcgaXMgbm90IHNldAorTERTT19SVU5QQVRIPXkKK1VDTElCQ19DVE9SX0RUT1I9eQorTERTT19HTlVfSEFTSF9TVVBQT1JUPXkKKyMgSEFTX05PX1RIUkVBRFMgaXMgbm90IHNldAorVUNMSUJDX0hBU19USFJFQURTPXkKK1VDTElCQ19IQVNfVEhSRUFEU19OQVRJVkU9eQorUFRIUkVBRFNfREVCVUdfU1VQUE9SVD15CisjIExJTlVYVEhSRUFEU19PTEQgaXMgbm90IHNldAorVUNMSUJDX0hBU19MRlM9eQorIyBNQUxMT0MgaXMgbm90IHNldAorIyBNQUxMT0NfU0lNUExFIGlzIG5vdCBzZXQKK01BTExPQ19TVEFOREFSRD15CitNQUxMT0NfR0xJQkNfQ09NUEFUPXkKK1VDTElCQ19EWU5BTUlDX0FURVhJVD15CitDT01QQVRfQVRFWElUPXkKK1VDTElCQ19TVVNWM19MRUdBQ1k9eQorVUNMSUJDX1NVU1YzX0xFR0FDWV9NQUNST1M9eQorVUNMSUJDX1NVU1Y0X0xFR0FDWT15CitVQ0xJQkNfSEFTX1NIQURPVz15CitVQ0xJQkNfSEFTX1BST0dSQU1fSU5WT0NBVElPTl9OQU1FPXkKK1VDTElCQ19IQVNfX19QUk9HTkFNRT15CitVTklYOThQVFlfT05MWT15CitBU1NVTUVfREVWUFRTPXkKK1VDTElCQ19IQVNfTElCVVRJTD15CitVQ0xJQkNfSEFTX1RNX0VYVEVOU0lPTlM9eQorVUNMSUJDX0hBU19UWl9DQUNISU5HPXkKK1VDTElCQ19IQVNfVFpfRklMRT15CitVQ0xJQkNfSEFTX1RaX0ZJTEVfUkVBRF9NQU5ZPXkKK1VDTElCQ19UWl9GSUxFX1BBVEg9Ii9ldGMvVFoiCisKKyMKKyMgQWR2YW5jZWQgTGlicmFyeSBTZXR0aW5ncworIworVUNMSUJDX1BXRF9CVUZGRVJfU0laRT0yNTYKK1VDTElCQ19HUlBfQlVGRkVSX1NJWkU9MjU2CisKKyMKKyMgTmV0d29ya2luZyBTdXBwb3J0CisjCitVQ0xJQkNfSEFTX0lQVjY9eQorVUNMSUJDX0hBU19SUEM9eQorVUNMSUJDX0hBU19GVUxMX1JQQz15CitVQ0xJQkNfSEFTX1JFRU5UUkFOVF9SUEM9eQorVUNMSUJDX1VTRV9ORVRMSU5LPXkKK1VDTElCQ19TVVBQT1JUX0FJX0FERFJDT05GSUc9eQorCitVQ0xJQkNfSEFTX0JTRF9SRVNfQ0xPU0U9eQorVUNMSUJDX0hBU19MSUJSRVNPTFZfU1RVQj15CitVQ0xJQkNfSEFTX0xJQk5TTF9TVFVCPXkKKworIworIyBTdHJpbmcgYW5kIFN0ZGlvIFN1cHBvcnQKKyMKK1VDTElCQ19IQVNfU1RSSU5HX0dFTkVSSUNfT1BUPXkKK1VDTElCQ19IQVNfU1RSSU5HX0FSQ0hfT1BUPXkKK1VDTElCQ19IQVNfQ1RZUEVfVEFCTEVTPXkKK1VDTElCQ19IQVNfQ1RZUEVfU0lHTkVEPXkKKyMgVUNMSUJDX0hBU19DVFlQRV9VTlNBRkUgaXMgbm90IHNldAorVUNMSUJDX0hBU19DVFlQRV9DSEVDS0VEPXkKKyMgVUNMSUJDX0hBU19DVFlQRV9FTkZPUkNFRCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1dDSEFSPXkKKyMgVUNMSUJDX0hBU19MT0NBTEUgaXMgbm90IHNldAorVUNMSUJDX0hBU19IRVhBREVDSU1BTF9GTE9BVFM9eQorVUNMSUJDX0hBU19HTElCQ19DVVNUT01fUFJJTlRGPXkKK1VDTElCQ19QUklOVEZfU0NBTkZfUE9TSVRJT05BTF9BUkdTPTkKK1VDTElCQ19IQVNfU0NBTkZfR0xJQkNfQV9GTEFHPXkKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfTk9ORSBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl8yNTY9eQorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl81MTIgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl8xMDI0IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMjA0OCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzQwOTYgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl84MTkyIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU1RESU9fQlVJTFRJTl9CVUZGRVJfTk9ORT15CisjIFVDTElCQ19IQVNfU1RESU9fQlVJTFRJTl9CVUZGRVJfNCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVJTFRJTl9CVUZGRVJfOCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fU0hVVERPV05fT05fQUJPUlQgaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19HRVRDX01BQ1JPPXkKK1VDTElCQ19IQVNfU1RESU9fUFVUQ19NQUNSTz15CitVQ0xJQkNfSEFTX1NURElPX0FVVE9fUldfVFJBTlNJVElPTj15CisjIFVDTElCQ19IQVNfRk9QRU5fTEFSR0VGSUxFX01PREUgaXMgbm90IHNldAorVUNMSUJDX0hBU19GT1BFTl9FWENMVVNJVkVfTU9ERT15CitVQ0xJQkNfSEFTX0dMSUJDX0NVU1RPTV9TVFJFQU1TPXkKK1VDTElCQ19IQVNfUFJJTlRGX01fU1BFQz15CitVQ0xJQkNfSEFTX0VSUk5PX01FU1NBR0VTPXkKKyMgVUNMSUJDX0hBU19TWVNfRVJSTElTVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NJR05VTV9NRVNTQUdFUz15CisjIFVDTElCQ19IQVNfU1lTX1NJR0xJU1QgaXMgbm90IHNldAorVUNMSUJDX0hBU19HTlVfR0VUT1BUPXkKK1VDTElCQ19IQVNfR05VX0dFVFNVQk9QVD15CisKKyMKKyMgQmlnIGFuZCBUYWxsCisjCitVQ0xJQkNfSEFTX1JFR0VYPXkKKyMgVUNMSUJDX0hBU19SRUdFWF9PTEQgaXMgbm90IHNldAorVUNMSUJDX0hBU19GTk1BVENIPXkKKyMgVUNMSUJDX0hBU19GTk1BVENIX09MRCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1dPUkRFWFA9eQorVUNMSUJDX0hBU19ORlRXPXkKK1VDTElCQ19IQVNfRlRXPXkKK1VDTElCQ19IQVNfRlRTPXkKK1VDTElCQ19IQVNfR0xPQj15CitVQ0xJQkNfSEFTX0dOVV9HTE9CPXkKKworIworIyBMaWJyYXJ5IEluc3RhbGxhdGlvbiBPcHRpb25zCisjCitTSEFSRURfTElCX0xPQURFUl9QUkVGSVg9Ii9saWIiCitSVU5USU1FX1BSRUZJWD0iLyIKK0RFVkVMX1BSRUZJWD0iLy91c3IiCitNVUxUSUxJQl9ESVI9ImxpYiIKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIFVDTElCQ19CVUlMRF9QSUUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0FSQzRSQU5ET00gaXMgbm90IHNldAorIyBIQVZFX05PX1NTUCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1NQIGlzIG5vdCBzZXQKK1VDTElCQ19CVUlMRF9SRUxSTz15CitVQ0xJQkNfQlVJTERfTk9XPXkKK1VDTElCQ19CVUlMRF9OT0VYRUNTVEFDSz15CisKKyMKKyMgdUNsaWJjIGRldmVsb3BtZW50L2RlYnVnZ2luZyBvcHRpb25zCisjCitDUk9TU19DT01QSUxFUl9QUkVGSVg9IiIKK1VDTElCQ19FWFRSQV9DRkxBR1M9IiIKKyMgRE9ERUJVRyBpcyBub3Qgc2V0CisjIERPREVCVUdfUFQgaXMgbm90IHNldAorIyBET1NUUklQIGlzIG5vdCBzZXQKKyMgRE9BU1NFUlRTIGlzIG5vdCBzZXQKKyMgU1VQUE9SVF9MRF9ERUJVRyBpcyBub3Qgc2V0CisjIFNVUFBPUlRfTERfREVCVUdfRUFSTFkgaXMgbm90IHNldAorIyBVQ0xJQkNfTUFMTE9DX0RFQlVHR0lORyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0JBQ0tUUkFDRT15CitXQVJOSU5HUz0iLVdhbGwiCisjIEVYVFJBX1dBUk5JTkdTIGlzIG5vdCBzZXQKKyMgRE9NVUxUSSBpcyBub3Qgc2V0CisjIFVDTElCQ19NSk4zX09OTFkgaXMgbm90IHNldAorCisjIG1hdGggc3R1ZmYgZm9yIHBlcmwKK0RPX0M5OV9NQVRIPXkKK1VDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSD15CitVQ0xJQkNfSEFTX0ZFTlY9eQorVUNMSUJDX0xJTlVYX01PRFVMRV8yNj15CisjIFVDTElCQ19MSU5VWF9NT0RVTEVfMjQgaXMgbm90IHNldAorVUNMSUJDX0xJTlVYX1NQRUNJRklDPXkKK1VDTElCQ19IQVNfUkVBTFRJTUU9eQorVUNMSUJDX0hBU19BRFZBTkNFRF9SRUFMVElNRT15CitVQ0xJQkNfSEFTX05FVFdPUktfU1VQUE9SVD15CitVQ0xJQkNfSEFTX1NPQ0tFVD15CitVQ0xJQkNfSEFTX0JTRF9FUlI9eQorVUNMSUJDX0hBU19TWVNMT0c9eQorVUNMSUJDX0hBU19DUllQVD15CitVQ0xJQkNfSEFTX0NSWVBUX0lNUEw9eQorVUNMSUJDX0hBU19HTlVfRVJST1I9eQorVUNMSUJDX0hBU19QVFk9eQorVUNMSUJDX0JTRF9TUEVDSUZJQz15CitVQ0xJQkNfSEFTX0VQT0xMPXkKK1VDTElCQ19IQVNfRkxPQVRTPXkKKworIyBUaGUgYmVsb3cgb3B0aW9uIGlzIG5lZWRlZCBmb3IgQVJNIHNpbmNlIGRlcGVuZGluZworIyB1cG9uZyB3aGF0IGludHJ1Y3Rpb24gc2V0IGlzIGNob3NlbiB0aGlzIHdpbGwgYmUKKyMgZW5hYmxlZC4gQXMgc3VjaCBpdCBpcyBoYXJtbGVzcyBhbmQgd2lsbCBiZSBwdW50ZWQKKyMgYnkgbWVudWNvbmZpZyBmb3Igb3RoZXIgYXJjaGVzLgorCisjIENPTVBJTEVfSU5fVEhVTUJfTU9ERSBpcyBub3Qgc2V0CisKKyMgbmVlZGVkIGJ5IHN5c3RlbWQKK1VDTElCQ19IQVNfVVRNUFg9eQorVUNMSUJDX0xJTlVYX01PRFVMRV8yNj15CitVQ0xJQkNfSEFTX1JFU09MVkVSX1NVUFBPUlQ9eQorIyBuZWVkZWQgZm9yIExUUAorVUNMSUJDX1NVU1Y0X0xFR0FDWT15CitVQ0xJQkNfSEFTX09CU09MRVRFX0JTRF9TSUdOQUw9eQorRE9fWFNJX01BVEg9eQorVUNMSUJDX1NWNF9ERVBSRUNBVEVEPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvdUNsaWJjLm1hY2hpbmUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L3VDbGliYy5tYWNoaW5lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NWY0NDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L3VDbGliYy5tYWNoaW5lCkBAIC0wLDAgKzEsMTQgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgVmVyc2lvbjogMC45LjMyLWdpdAorIyBNb24gSnVsIDE5IDAxOjM0OjI5IDIwMTAKKyMKKyMKKyMgVXNpbmcgRUxGIGZpbGUgZm9ybWF0CisjCitGT1JDRV9PUFRJT05TX0ZPUl9BUkNIPXkKK0FSQ0hfSEFTX01NVT15CitBUkNIX1VTRV9NTVU9eQorS0VSTkVMX0hFQURFUlM9Ii91c3IvaW5jbHVkZSIKK0hBVkVfRE9UX0NPTkZJRz15CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1pbml0aWFsX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1pbml0aWFsX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTM3Y2NiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWluaXRpYWxfZ2l0LmJiCkBAIC0wLDAgKzEsMzYgQEAKK1NFQ1RJT04gPSAiYmFzZSIKK3JlcXVpcmUgdWNsaWJjLmluYworcmVxdWlyZSB1Y2xpYmMtZ2l0LmluYworCitERVBFTkRTID0gImxpbnV4LWxpYmMtaGVhZGVycyBuY3Vyc2VzLW5hdGl2ZSB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtaW5pdGlhbCBsaWJnY2MtaW5pdGlhbCBrZXJuLXRvb2xzLW5hdGl2ZSIKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtaW5pdGlhbCIKKworUEFDS0FHRVMgPSAiIgorUEFDS0FHRVNfRFlOQU1JQyA9ICIiCisKK1NUQUdJTkdDQyA9ICJnY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1NUQUdJTkdDQ19jbGFzcy1uYXRpdmVzZGsgPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCisKK2RvX2luc3RhbGwoKSB7CisJIyBJbnN0YWxsIGluaXRpYWwgaGVhZGVycyBpbnRvIHRoZSBjcm9zcyBkaXIKKwltYWtlIFBSRUZJWD0ke0R9IERFVkVMX1BSRUZJWD0ke3ByZWZpeH0vIFJVTlRJTUVfUFJFRklYPS8gXAorCQlpbnN0YWxsX2hlYWRlcnMgaW5zdGFsbF9zdGFydGZpbGVzCisKKyAgICAgICAgIyBhZGQgbGlua3MgdG8gbGludXgtbGliYy1oZWFkZXJzOiBmaW5hbCB1Y2xpYmMgYnVpbGQgbmVlZCB0aGlzLgorICAgICAgICBmb3IgdCBpbiBsaW51eCBhc20gYXNtLWdlbmVyaWM7IGRvCisgICAgICAgICAgICAgICAgaWYgWyAtZCAke0R9JHtpbmNsdWRlZGlyfS8kdCBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHJtIC1yZiAke0R9JHtpbmNsdWRlZGlyfS8kdAorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgbG4gLXNmICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7aW5jbHVkZWRpcn0vJHQgJHtEfSR7aW5jbHVkZWRpcn0vCisgICAgICAgIGRvbmUKKworfQorZG9fY29tcGlsZSgpIHsKKwk6Cit9CisKK2RvX3NpdGVjb25maWcgKCkgeworICAgICAgICA6Cit9CisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9LyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1wYWNrYWdlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1wYWNrYWdlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTgxNWY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLXBhY2thZ2UuaW5jCkBAIC0wLDAgKzEsMzcgQEAKKyMgRW5zdXJlIHRoZSB1Y2xpYmMtZGV2IHBhY2thZ2UgaXMgcHJvY2Vzc2VkIGJlZm9yZSB1Y2xpYmMtc3RhdGljZGV2IHRvIGFsbG93CisjICpfbm9uc2hhcmVkLmEgbGlicmFyaWVzIHRvIGJlIHBhY2thZ2VkIGluIHRoZSB1Y2xpYmMtZGV2IHBhY2thZ2UuCitQQUNLQUdFUyA9ICJsZGQgdWNsaWJjLXV0aWxzLWRiZyB1Y2xpYmMtdXRpbHMgdWNsaWJjLWdjb252IHVjbGliYy10aHJlYWQtZGIgdWNsaWJjLWFyZ3AgdWNsaWJjLWJhY2t0cmFjZSB1Y2xpYmMtbGliY3J5cHQgdWNsaWJjLWxpYmludGwgdWNsaWJjLWxpYm5zbCB1Y2xpYmMtbGlicmVzb2x2IHVjbGliYy1saWJtIHVjbGliYy1saWJkbCB1Y2xpYmMtbGlidXRpbCB1Y2xpYmMtbGlicHRocmVhZCB1Y2xpYmMtbGlicnQgJHtQTn0tZGJnICR7UE59LWRldiAke1BOfS1zdGF0aWNkZXYgJHtQTn0tZG9jICR7UE59IgorCitGSUxFU191Y2xpYmMtbGliY3J5cHQgPSAiJHtiYXNlX2xpYmRpcn0vbGliY3J5cHQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGliY3J5cHQtKi5zbyIKK0ZJTEVTX3VjbGliYy1saWJpbnRsID0gIiR7YmFzZV9saWJkaXJ9L2xpYmludGwqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGliaW50bC0qLnNvIgorRklMRVNfdWNsaWJjLWxpYm5zbCA9ICIke2Jhc2VfbGliZGlyfS9saWJuc2wqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlibnNsLSouc28iCitGSUxFU191Y2xpYmMtbGlicmVzb2x2ID0gIiR7YmFzZV9saWJkaXJ9L2xpYnJlc29sdiouc28uKiAke2Jhc2VfbGliZGlyfS9saWJyZXNvbHYtKi5zbyIKK0ZJTEVTX3VjbGliYy1saWJtID0gIiR7YmFzZV9saWJkaXJ9L2xpYm0qLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlibS0qLnNvIgorRklMRVNfdWNsaWJjLWxpYmRsID0gIiR7YmFzZV9saWJkaXJ9L2xpYmRsKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYmRsLSouc28iCitGSUxFU191Y2xpYmMtbGlidXRpbCA9ICIke2Jhc2VfbGliZGlyfS9saWJ1dGlsKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnV0aWwtKi5zbyIKK0ZJTEVTX3VjbGliYy1saWJwdGhyZWFkID0gIiR7YmFzZV9saWJkaXJ9L2xpYnB0aHJlYWQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlicHRocmVhZC0qLnNvIgorRklMRVNfdWNsaWJjLWxpYnJ0ID0gIiR7YmFzZV9saWJkaXJ9L2xpYnJ0Ki5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnJ0LSouc28iCisKK0ZJTEVTX2xkZCA9ICIke2JpbmRpcn0vbGRkIgorRklMRVNfdWNsaWJjLXV0aWxzID0gIiR7YmluZGlyfSAke3NiaW5kaXJ9IgorRklMRVNfdWNsaWJjLXV0aWxzLWRiZyArPSAiJHtiaW5kaXJ9Ly5kZWJ1ZyAke3NiaW5kaXJ9Ly5kZWJ1ZyIKK0ZJTEVTX3VjbGliYy1nY29udiA9ICIke2xpYmRpcn0vZ2NvbnYiCitGSUxFU191Y2xpYmMtdGhyZWFkLWRiID0gIiR7YmFzZV9saWJkaXJ9L2xpYnRocmVhZF9kYioiCitGSUxFU191Y2xpYmMtYXJncCA9ICIke2Jhc2VfbGliZGlyfS9saWJ1YXJncC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYnVhcmdwKi5zby4qIgorRklMRVNfdWNsaWJjLWJhY2t0cmFjZSA9ICIke2Jhc2VfbGliZGlyfS9saWJ1YmFja3RyYWNlLSouc28gJHtiYXNlX2xpYmRpcn0vbGlidWJhY2t0cmFjZSouc28uKiIKKworIyBUaGUgbGFzdCBsaW5lIChnZGIgYW5kIGxpYjEpIGlzIGZvciB1Y2xpbnV4LXVjbGliYyBidWlsZHMKK3VjbGliY19iYXNlbGlicyA9ICIke2Jhc2VfbGliZGlyfS9sZCouc28uKiAke2Jhc2VfbGliZGlyfS9sZCouc28gXAorICAgICAgICAgICAgICAgICAgICR7YmFzZV9saWJkaXJ9L2xpYmMqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlidUNsaWJjLSouc28gXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJjLmdkYiAke2xpYmRpcn0vbGliYyAke2Jhc2VfbGliZGlyfS9saWIxLnNvIFwKKyAgICAgICAgICAgICAgICAgICIKK0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSIKK0ZJTEVTXyR7UE59LWRldiArPSAiXAorICAgICAgICAke2xpYmRpcn0vbGliKi5zbyBcCisgICAgICAgICR7bGliZGlyfS8qX25vbnNoYXJlZC5hIFwKKyAgICAgICAgJHtsaWJkaXJ9L1tTXSpjcnRbMWluXS5vIFwKKyAgICAgICAgJHtsaWJkaXJ9L2NydHJlbG9jKi5vIFwKKyAgICAgICAgJHtpbmNsdWRlZGlyfS8qLmggJHtpbmNsdWRlZGlyfS8qLyouaCBcCisgICAgICAgIgorRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfSAke3VjbGliY19iYXNlbGlic30gL3NiaW4vbGRjb25maWcgXAorICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfSAke2RhdGFkaXJ9L3pvbmVpbmZvICR7bGliZGlyfS9sb2NhbGUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzNhYTNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLmluYwpAQCAtMCwwICsxLDE2OCBAQAorU1VNTUFSWSA9ICJDIGxpYnJhcnkgZm9yIGVtYmVkZGVkIHN5c3RlbXMiCitERVNDUklQVElPTiA9ICJUaGUgbmFtZSB1Q2xpYmMgaXMgYW4gYWJicmV2aWF0aW9uIGZvciAndGhlIFwKK21pY3JvY29udHJvbGxlciBDIGxpYnJhcnknLiBGb3Igc2ltcGxpY2l0eSwgdUNsaWJjIGlzIHByb25vdW5jZWQgXAorJ3lldy1zZWUtbGliLXNlZScuICBUaGUgZ29hbCBvZiB1Q2xpYmMgaXMgdG8gcHJvdmlkZSBhcyBtdWNoIFwKK2Z1bmN0aW9uYWxpdHkgYXMgcG9zc2libGUgaW4gYSBzbWFsbCBhbW91bnQgb2Ygc3BhY2UsIGFuZCBpdCBpcyBpbnRlbmRlZCBcCitwcmltYXJpbHkgZm9yIGVtYmVkZGVkIHVzZS4gSXQgaXMgYWxzbyBoaWdobHkgY29uZmlndXJhYmxlIGluIHN1cHBvcnRlZCBcCitmZWF0dXJlcywgYXQgdGhlIGNvc3Qgb2YgQUJJIGRpZmZlcmVuY2VzIGZvciBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuIFwKK3VDbGliYyBoYXMgYmVlbiBkZXNpZ25lZCBmcm9tIHRoZSBncm91bmQgdXAgdG8gYmUgYSBDIGxpYnJhcnkgZm9yIFwKK2VtYmVkZGVkIExpbnV4LiAgSXQgaXMgTk9UIGNvbXBhdGlibGUgd2l0aCBiaW5hcmllcyBsaW5rZWQgYWdhaW5zdCBnbGliYy4iCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorU0VDVElPTiA9ICJsaWJzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HLkxJQi5ib2lsZXJwbGF0ZTttZDU9YWFkZGVhZGNkZGViOTE4Mjk3ZTBlNGFmYzUyY2U0NmYgXAorZmlsZTovLyR7U30vdGVzdC9yZWdleC90ZXN0cmVnZXguYztiZWdpbmxpbmU9MTtlbmRsaW5lPTMxO21kNT0yMzRlZmIyMjdkMGE0MDY3N2Y4OTVlNGExZTI2ZTk2MCIKK1BSID0gInI5IgorCityZXF1aXJlIHVjbGliYy1jb25maWcuaW5jCisKK1BBVEhfcHJlcGVuZCA9ICIke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0uJHtTVEFHSU5HQ0N9OiIKK1RPT0xDSEFJTl9PUFRJT05TID0gIiAtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0iCisKKyMgc2l0ZWNvbmZpZy5iYmNsYXNzIHJ1bnMgY29uZmlndXJlIHdoaWNoIG5lZWRzIGEgd29ya2luZyBjb21waWxlcgorIyBGb3IgdGhlIGNvbXBpbGVyIHRvIHdvcmsgd2UgbmVlZCBhIHdvcmtpbmcgbGliYyB5ZXQgbGliYyBpc24ndAorIyBpbiB0aGUgc3lzcm9vdHMgZGlyZWN0b3J5IGF0IHRoaXMgcG9pbnQuIFRoaXMgbWVhbnMgdGhlIGxpYmMuc28KKyMgbGlua2VyIHNjcmlwdCB3b24ndCB3b3JrIGFzIHRoZSAtLXN5c3Jvb3Qgc2V0dGluZyBpc24ndCBjb3JyZWN0LgorIyBIZXJlIHdlIGNyZWF0ZSBhIGhhY2tlZCB1cCBsaWJjIGxpbmtlciBzY3JpcHQgYW5kIHBhc3MgaW4gdGhlIHJpZ2h0CisjIGZsYWdzIHRvIGxldCBjb25maWd1cmUgd29yay4gVWdseS4KK0VYVFJBU0lURUNPTkZJRyA9ICJDRkxBR1M9JyR7Q0ZMQUdTfSAtV2wsLUwke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmMgLUwke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmMgLUwke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0gLUwke1NZU1JPT1RfREVTVERJUn0ke2Jhc2VfbGliZGlyfSAtV2wsLUwke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0gLVdsLC1MJHtTWVNST09UX0RFU1RESVJ9JHtiYXNlX2xpYmRpcn0nIgorc2l0ZWNvbmZpZ19kb19zaXRlY29uZmlnX2dlbmNhY2hlX3ByZXBlbmQgPSAiIFwKK21rZGlyIC1wICR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYzsgXAorY3AgJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9L2xpYmMuc28gJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjOyBcCitzZWQgLWkgLWUgJ3MjICR7YmFzZV9saWJkaXJ9IyAke1NZU1JPT1RfREVTVERJUn0ke2Jhc2VfbGliZGlyfSNnJyAtZSAncyMgJHtsaWJkaXJ9IyAke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0jZycgJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjL2xpYmMuc287IFwKKyIKKworIyBGb3Igbm93LCB3ZSB3aWxsIHNraXAgYnVpbGRpbmcgb2YgYSBnY2MgcGFja2FnZSBpZiBpdCBpcyBhIHVjbGliYyBvbmUKKyMgYW5kIG91ciBidWlsZCBpcyBub3QgYSB1Y2xpYmMgb25lLCBhbmQgd2Ugc2tpcCBhIGdsaWJjIG9uZSBpZiBvdXIgYnVpbGQKKyMgaXMgYSB1Y2xpYmMgYnVpbGQuCitDT01QQVRJQkxFX0hPU1QgPSAiLiotdWNsaWJjLioiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKKyMgZG9fc3RhZ2UgYmFyZnMgb24gYSBDQyB3aXRoIHdoaXRlc3BhY2UsIHRoZXJlZm9yZSBwdXQgdGhlICdIT1NUX0NDX0FSQ0gnIGluCisjIHRoZSBDRkxBR1MgKHdoZW4gYnVpbGRpbmcgdGhlIHV0aWxzKS4KK09FTUFLRV9OT19DQyA9ICInU1RSSVBUT09MPXRydWUnICdMRD0ke0xEfSciCitFWFRSQV9PRU1BS0UgPSAiJHtPRU1BS0VfTk9fQ0N9IFwKKyAgICAgICAgICAgICAgICAnSE9TVENDPSR7QlVJTERfQ0N9JyBcCisgICAgICAgICAgICAgICAgJ0hPU1RfQ0ZMQUdTPSR7QlVJTERfQ0ZMQUdTfScgXAorICAgICAgICAgICAgICAgICdDQz0ke0NDfScgXAorICAgICAgICAgICAgICAgIEFSQ0g9JHtVQ0xJQkNfQVJDSH0iCisKK0VYVFJBX09FTUFLRV90YXNrX2RvX3BhY2thZ2UgPSAiJHtPRU1BS0VfTk9fQ0N9IgorCisjIGVuYWJsZSB2ZXJib3NlIG91dHB1dDoKK2V4cG9ydCBWPSIyIgorCisjIC1PPG4+IC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIGVuZHMgdXAgd2l0aCBHQ0MgSUNFIG9uIHRodW1iIGFzIHJlcG9ydGVkCisjIGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDQ4NjAKKyMKK0NGTEFHU19hcm0gOj0gIiR7QG9lX2ZpbHRlcl9vdXQoJy1mbm8tb21pdC1mcmFtZS1wb2ludGVyJywgJyR7Q0ZMQUdTfScsIGQpfSIKK1VDTElCQ19FWFRSQV9DRkxBR1MgIDo9ICIke0BvZV9maWx0ZXJfb3V0KCcoLUlcUyt8LWlcUyspJywgJyR7Q0ZMQUdTfScsIGQpfSIKKworZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKyAgdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MKKyAgb2VfcnVubWFrZSBwcmVnZW4KK30KKworY29uZmlnbWFuZ2xlID0gJy9eS0VSTkVMX0hFQURFUlMvZDsgXAorICAgICAgICAgICAgICAgIC9eUlVOVElNRV9QUkVGSVgvZDsgXAorICAgICAgICAgICAgICAgIC9eREVWRUxfUFJFRklYL2Q7IFwKKyAgICAgICAgICAgICAgICAvXlNIQVJFRF9MSUJfTE9BREVSX1BSRUZJWC9kOyBcCisgICAgICAgICAgICAgICAgL15VQ0xJQkNfRVhUUkFfQ0ZMQUdTL2Q7IFwKKyAgICAgICAgICAgICAgICBzLC4qVUNMSUJDX0hBU19XQ0hBUi4qLFVDTElCQ19IQVNfV0NIQVI9eSxnOyBcCisgICAgICAgICAgICAgICAgJHtAWyIiLCJzLC4qQ09NUElMRV9JTl9USFVNQl9NT0RFLiosQ09NUElMRV9JTl9USFVNQl9NT0RFPXksOyJdW2QuZ2V0VmFyKCJBUk1fSU5TVFJVQ1RJT05fU0VUIiwgVHJ1ZSkgIT0gImFybSJdfSBcCisgICAgICAgICAgICAgICAgJHtAWyIiLCJzLC4qVUNMSUJDX0hBU19MT0NBTEUuKixVQ0xJQkNfSEFTX0xPQ0FMRT15LDsiXVtkLmdldFZhcigiVVNFX05MUyIsIFRydWUpID09ICJ5ZXMiXX0gXAorICAgICAgICAgICAgICAgICR7QFsiIiwicywuKkxEU09fR05VX0hBU0hfU1VQUE9SVC4qLCMgTERTT19HTlVfSEFTSF9TVVBQT1JUIGlzIG5vdCBzZXQsOyJdW2QuZ2V0VmFyKCJUQVJHRVRfQVJDSCIsIFRydWUpIGluIFsnbWlwcycsICdtaXBzZWwnLCAnbWlwczY0JywgJ21pcHM2NGVsJywgJ2F2cjMyJ11dfSBcCisgICAgICAgICAgICAgICAgL15DUk9TUy9kOyBcCisgICAgICAgICAgICAgICAgL15UQVJHRVRfQVJDSD0vZDsgXAorICAgICAgICAgICAgICAgIC9eVEFSR0VUXy9zLF5cKFtePV0qXCkuKiwjIFwxIGlzIG5vdCBzZXQsZzsgXAorICAgICAgICAgICAgICAgIHMsXkRPU1RSSVAuKiwjIERPU1RSSVAgaXMgbm90IHNldCxnOyBcCisgICAgICAgICAgICAgICAgL19bRU9dKkFCSS9kOyBcCisgICAgICAgICAgICAgICAgL0hBU19GUFUvZDsgXAorICAgICAgICAgICAgICAgICR7QFsiIiwicywuKk1VTFRJTElCX0RJUi4qLE1VTFRJTElCX0RJUj1cIiR7YmFzZWxpYn1cIiw7Il1bZC5nZXRWYXIoImJhc2VsaWIiLCBUcnVlKSAhPSAibGliIl19IFwKKyAgICAgICAgICAgICAgICcKK09FX0ZFQVRVUkVTIDo9ICIke0BmZWF0dXJlc190b191Y2xpYmNfY29uZihkKX0iCitPRV9ERUwgICAgICA6PSAiJHtAZmVhdHVyZXNfdG9fdWNsaWJjX2RlbChkKX0iCitweXRob24gKCkgeworICAgIGlmICIke09FX0RFTH0iOgorICAgICAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsICIke09FX0RFTH0iICsgIlxuIikKKworICAgICMgYnkgZGVmYXVsdCB1Y2xpYmMgdXNlcyBtaXBzMSBJU0EgZm9yIG8zMiBBQkkKKyAgICAjIGlmIHdlIHVzZSBUQVJHRVRfQ0NfQVJDSD0iLW1hcmNoPW1pcHMzMiIgd2UgZW5kIHVwIAorICAgICMgd2l0aCBjb25mbGljdGluZyBtYXJjaCBvcHRpb25zIHRvIGdjYy4gSGVyZSB3ZQorICAgICMgYXNrIGZvciBNSVBTMzIgSVNBIHRvIG1hdGNoIHRoZSBjaG9zZW4gYXJjaAorICAgIHR1bmUgPSBkLmdldFZhcigiREVGQVVMVFRVTkUiLCBUcnVlKQorICAgIGlmIHR1bmUuc3RhcnRzd2l0aCgnbWlwczMyJyk6CisgICAgICAgIGltcG9ydCByZQorICAgICAgICB0dW5lID0gcmUuc3ViKCcoZWwpKigtbmYpKicsICcnLCB0dW5lKQorICAgICAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICIvXiMjIyBNSVBTMzJfQ0hFQ0skL2FcXFxuQ09ORklHX01JUFNfSVNBXyVzPXlcblxuIiAlICh0dW5lLnVwcGVyKCkpKQorICAgIGlmICIke09FX0ZFQVRVUkVTfSI6CisgICAgICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgICAiL14jIyMgRElTVFJPIEZFQVRVUkVTJC9hXFxcbiVzXG5cbiIgJQorICAgICAgICAgICAgICAgICAgICgiXFxuIi5qb2luKChkLmV4cGFuZCgiJHtPRV9GRUFUVVJFU30iKS5zcGxpdCgiXG4iKSkpKSkKKyAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICIvXiMjIyBDUk9TUyQvYVxcXG4lc1xuIiAlCisgICAgICAgICAgICAgICAgICAoIlxcbiIuam9pbihbIkNST1NTX0NPTVBJTEVSX1BSRUZJWD1cIiR7VEFSR0VUX1BSRUZJWH1cIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiVUNMSUJDX0VYVFJBX0NGTEFHUz1cIiR7VUNMSUJDX0VYVFJBX0NGTEFHU31cIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIktFUk5FTF9IRUFERVJTPVwiJHtTVEFHSU5HX0lOQ0RJUn1cIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlJVTlRJTUVfUFJFRklYPVwiL1wiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiREVWRUxfUFJFRklYPVwiLyR7cHJlZml4fVwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU0hBUkVEX0xJQl9MT0FERVJfUFJFRklYPVwiL2xpYlwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgICAgICApKQorICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgIi9eIyMjIFRHVCQvYVxcXG5UQVJHRVRfQVJDSD1cIiVzXCJcXG5UQVJHRVRfJXM9eVxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAoIiR7VUNMSUJDX0FSQ0h9IiwgIiR7VUNMSUJDX0FSQ0h9IikpCisgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLAorICAgICIvXiMjIyBGUFUkL2FcXFxuJXNcblxuIiAlIChbIlVDTElCQ19IQVNfRlBVPXkiLCIjIFVDTElCQ19IQVNfRlBVIGlzIG5vdCBzZXQiXVtkLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpIGluIFsgJ3NvZnQnIF1dKSkKKyAgICBpZiAiJHtVQ0xJQkNfRU5ESUFOfSI6CisgICAgICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgICAiL14jIyMgQUJJJC9hXFxcbkFSQ0hfV0FOVFNfJXNfRU5ESUFOPXlcblxuIiAlICgiJHtVQ0xJQkNfRU5ESUFOfSIpKQorICAgIGlmICIke1VDTElCQ19BQkl9IjoKKyAgICAgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLAorICAgICAgICAgICAgICAgICAgICIvXiMjIyBBQkkkL2FcXFxuQ09ORklHXyVzPXlcblxuIiAlICgiJHtVQ0xJQkNfQUJJfSIpKQorfQorCitweXRob24gZG9fcGF0Y2hfYXBwZW5kKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgc3VicHJvY2Vzcy5jYWxsKCJsbiAtc2YgJHtTVEFHSU5HX0lOQ0RJUn0vbGludXggJHtTfS9pbmNsdWRlL2xpbnV4Iiwgc2hlbGw9VHJ1ZSkKKyAgICBzdWJwcm9jZXNzLmNhbGwoImxuIC1zZiAke1NUQUdJTkdfSU5DRElSfS9hc20gJHtTfS9pbmNsdWRlL2FzbSIsIHNoZWxsPVRydWUpCit9CisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAgICAgcm0gLWYgJHtTfS8uY29uZmlnCisKKyAgICAgICAgIyBPcGVuRW1iZWRkZWQgc3BsaXRzIHRoZSB1Q2xpYmMuY29uZmlnIGluIHR3byBwYXJ0czoKKyAgICAgICAgIyB1Q2xpYmMubWFjaGluZSwgdUNsaWJjLmRpc3RybworICAgICAgICBlY2hvICIjIyMgdUNsaWJjLm1hY2hpbmUgIyMjIiA+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGNhdCAke1dPUktESVJ9L3VDbGliYy5tYWNoaW5lID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyB1Q2xpYmMuZGlzdHJvICMjIyIgPj4ke1N9L21lcmdlZC5jb25maWcKKyAgICAgICAgY2F0ICR7V09SS0RJUn0vdUNsaWJjLmRpc3RybyA+PiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBlY2hvICIjIyMgQ1JPU1MiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBUR1QiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBNTVUiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBGUFUiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBBQkkiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBESVNUUk8gRkVBVFVSRVMiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBNSVBTMzJfQ0hFQ0siID4+JHtTfS9tZXJnZWQuY29uZmlnCisKKyAgICAgICAgIyBNYW5nbGUgdGhlIHJlc3VsdGluZyAuY29uZmlnIGRlcGVuZGluZyBvbiBPRSB2YXJpYWJsZXMKKyAgICAgICAgc2VkIC1pIC1lICcke2NvbmZpZ21hbmdsZX0nICR7U30vbWVyZ2VkLmNvbmZpZworCWNwICR7U30vbWVyZ2VkLmNvbmZpZyAuY29uZmlnCisgICAgICAgIG1lcmdlX2NvbmZpZy5zaCAtciAtbiAtbSAuY29uZmlnICR7QCIgIi5qb2luKGZpbmRfY2ZncyhkKSl9CisJY21sMV9kb19jb25maWd1cmUKKworfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgUFJFRklYPSR7RH0gaW5zdGFsbAorCXJtIC1yZiAke0R9JHtpbmNsdWRlZGlyfS9pY29udi5oCit9CisKKyMgYnVpbGQgbGRkLCBsZGNvbmZpZyBhbmQgZnJpZW5kcyBidXQgb25seSBmb3IgZnVsbCB1Y2xpYmMKK2RvX2luc3RhbGxfYXBwZW5kX3BuLXVjbGliYyAoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgUFJFRklYPSR7RH0gIlNTUF9BTExfQ0ZMQUdTPSR7VEFSR0VUX0xJTktfSEFTSF9TVFlMRX0iIC1DIHV0aWxzIHV0aWxzX2luc3RhbGwKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliY19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQwMmIzZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliY19naXQuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSB1Y2xpYmMuaW5jCityZXF1aXJlIHVjbGliYy1wYWNrYWdlLmluYworcmVxdWlyZSB1Y2xpYmMtZ2l0LmluYworCitTVEFHSU5HQ0MgPSAiZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitTVEFHSU5HQ0NfY2xhc3MtbmF0aXZlc2RrID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorCitQUk9WSURFUyArPSAidmlydHVhbC9saWJjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtZm9yLWdjYyIKKworREVQRU5EUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscyBcCisgICAgICAgICAgIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsIFwKKyAgICAgICAgICAgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1pbml0aWFsIFwKKyAgICAgICAgICAgbGludXgtbGliYy1oZWFkZXJzIG5jdXJzZXMtbmF0aXZlIFwKKyAgICAgICAgICAgbGliZ2NjLWluaXRpYWwga2Vybi10b29scy1uYXRpdmUiCisKK1JERVBFTkRTXyR7UE59LWRldiA9ICJsaW51eC1saWJjLWhlYWRlcnMtZGV2IgorUlBST1ZJREVTXyR7UE59LWRldiArPSAibGliYy1kZXYgdmlydHVhbC1saWJjLWRldiIKKyMgdWNsaWJjIGRvZXMgbm90IHJlYWxseSBoYXZlIGxpYnNlZ2ZhdWx0IGJ1dCB0aGVuIHVzaW5nIHRoZSBvbmUgZnJvbSBnbGliYyBpcyBhbHNvIG5vdAorIyBnb2luZyB0byB3b3JrLiBTbyB3ZSBwcmV0ZW5kIHRoYXQgd2UgaGF2ZSBpdCB0byBtYWtlIGJpdGJha2Ugbm90IHB1bGwgb3RoZXIgcmVjaXBlcworIyB0byBzYXRpc2Z5IHRoaXMgZGVwZW5kZW5jeSBmb3IgdGhlIGltYWdlcy90YXNrcworCitSUFJPVklERVNfJHtQTn0gKz0gImxpYnNlZ2ZhdWx0IHJ0bGQoR05VX0hBU0gpIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL2F1dG9tb3VudC5ydWxlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9hdXRvbW91bnQucnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI1NzhlYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9hdXRvbW91bnQucnVsZXMKQEAgLTAsMCArMSwxOSBAQAorIyBUaGVyZSBhcmUgYSBudW1iZXIgb2YgbW9kaWZpZXJzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgdXNlZCBpbiBzb21lCisjIG9mIHRoZSBkaWZmZXJlbnQgZmllbGRzLiBUaGV5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBzdWJzaXR1dGlvbnM6CisjCisjICVuIHRoZSAia2VybmVsIG51bWJlciIgb2YgdGhlIGRldmljZS4KKyMgICAgRm9yIGV4YW1wbGUsICdzZGEzJyBoYXMgYSAia2VybmVsIG51bWJlciIgb2YgJzMnCisjICVlIHRoZSBzbWFsbGVzdCBudW1iZXIgZm9yIHRoYXQgbmFtZSB3aGljaCBkb2VzIG5vdCBtYXRjaGVzIGFuIGV4aXN0aW5nIG5vZGUKKyMgJWsgdGhlIGtlcm5lbCBuYW1lIGZvciB0aGUgZGV2aWNlCisjICVNIHRoZSBrZXJuZWwgbWFqb3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICVtIHRoZSBrZXJuZWwgbWlub3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICViIHRoZSBidXMgaWQgZm9yIHRoZSBkZXZpY2UKKyMgJWMgdGhlIHN0cmluZyByZXR1cm5lZCBieSB0aGUgUFJPR1JBTQorIyAlc3tmaWxlbmFtZX0gdGhlIGNvbnRlbnQgb2YgYSBzeXNmcyBhdHRyaWJ1dGUKKyMgJSUgdGhlICclJyBjaGFyIGl0c2VsZgorIworCisjIE1lZGlhIGF1dG9tb3VudGluZworU1VCU1lTVEVNPT0iYmxvY2siLCBBQ1RJT049PSJhZGQiICAgIFJVTis9Ii9ldGMvdWRldi9zY3JpcHRzL21vdW50LnNoIgorU1VCU1lTVEVNPT0iYmxvY2siLCBBQ1RJT049PSJyZW1vdmUiIFJVTis9Ii9ldGMvdWRldi9zY3JpcHRzL21vdW50LnNoIgorU1VCU1lTVEVNPT0iYmxvY2siLCBBQ1RJT049PSJjaGFuZ2UiLCBFTlZ7RElTS19NRURJQV9DSEFOR0V9PT0iMSIgUlVOKz0iL2V0Yy91ZGV2L3NjcmlwdHMvbW91bnQuc2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvYXV0b25ldC5ydWxlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9hdXRvbmV0LnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Njc2YWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvYXV0b25ldC5ydWxlcwpAQCAtMCwwICsxLDE5IEBACisjIFRoZXJlIGFyZSBhIG51bWJlciBvZiBtb2RpZmllcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSB1c2VkIGluIHNvbWUKKyMgb2YgdGhlIGRpZmZlcmVudCBmaWVsZHMuIFRoZXkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIHN1YnNpdHV0aW9uczoKKyMKKyMgJW4gdGhlICJrZXJuZWwgbnVtYmVyIiBvZiB0aGUgZGV2aWNlLgorIyAgICBGb3IgZXhhbXBsZSwgJ3NkYTMnIGhhcyBhICJrZXJuZWwgbnVtYmVyIiBvZiAnMycKKyMgJWUgdGhlIHNtYWxsZXN0IG51bWJlciBmb3IgdGhhdCBuYW1lIHdoaWNoIGRvZXMgbm90IG1hdGNoZXMgYW4gZXhpc3Rpbmcgbm9kZQorIyAlayB0aGUga2VybmVsIG5hbWUgZm9yIHRoZSBkZXZpY2UKKyMgJU0gdGhlIGtlcm5lbCBtYWpvciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJW0gdGhlIGtlcm5lbCBtaW5vciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJWIgdGhlIGJ1cyBpZCBmb3IgdGhlIGRldmljZQorIyAlYyB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoZSBQUk9HUkFNCisjICVze2ZpbGVuYW1lfSB0aGUgY29udGVudCBvZiBhIHN5c2ZzIGF0dHJpYnV0ZQorIyAlJSB0aGUgJyUnIGNoYXIgaXRzZWxmCisjCisKKyMgSGFuZGxlIG5ldHdvcmsgaW50ZXJmYWNlIHNldHVwCitTVUJTWVNURU09PSJuZXQiLCBBQ1RJT049PSJhZGQiIFJVTis9Ii9ldGMvdWRldi9zY3JpcHRzL25ldHdvcmsuc2giCitTVUJTWVNURU09PSJuZXQiLCBBQ1RJT049PSJyZW1vdmUiIFJVTis9Ii9ldGMvdWRldi9zY3JpcHRzL25ldHdvcmsuc2giCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9sb2NhbGV4dHJhLnJ1bGVzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL2xvY2FsZXh0cmEucnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q1MWQzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9sb2NhbGV4dHJhLnJ1bGVzCkBAIC0wLDAgKzEsMjMgQEAKKyMgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG1vZGlmaWVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHVzZWQgaW4gc29tZQorIyBvZiB0aGUgZGlmZmVyZW50IGZpZWxkcy4gVGhleSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgc3Vic2l0dXRpb25zOgorIworIyAlbiB0aGUgImtlcm5lbCBudW1iZXIiIG9mIHRoZSBkZXZpY2UuCisjICAgIEZvciBleGFtcGxlLCAnc2RhMycgaGFzIGEgImtlcm5lbCBudW1iZXIiIG9mICczJworIyAlZSB0aGUgc21hbGxlc3QgbnVtYmVyIGZvciB0aGF0IG5hbWUgd2hpY2ggZG9lcyBub3QgbWF0Y2hlcyBhbiBleGlzdGluZyBub2RlCisjICVrIHRoZSBrZXJuZWwgbmFtZSBmb3IgdGhlIGRldmljZQorIyAlTSB0aGUga2VybmVsIG1ham9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlbSB0aGUga2VybmVsIG1pbm9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlYiB0aGUgYnVzIGlkIGZvciB0aGUgZGV2aWNlCisjICVjIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdGhlIFBST0dSQU0KKyMgJXN7ZmlsZW5hbWV9IHRoZSBjb250ZW50IG9mIGEgc3lzZnMgYXR0cmlidXRlCisjICUlIHRoZSAnJScgY2hhciBpdHNlbGYKKyMKKworIyBUaGUgZmlyc3QgcnRjIGRldmljZSBpcyBzeW1saW5rZWQgdG8gL2Rldi9ydGMKK0tFUk5FTD09InJ0YzAiLCBTWU1MSU5LKz0icnRjIgorCisjVGhlIGZpcnN0IGZyYW1lYnVmZmVyIGlzIHN5bWxpbmtlZCB0byAvZGV2L2ZiCitLRVJORUw9PSJmYjAiLCAgU1lNTElOSys9ImZiIgorCisjIE1ha2UgYWxsIGlucHV0IGRldmljZXMgcmVhZC13cml0ZSB0byB0aGUgaW5wdXQgZ3JvdXAKK1NVQlNZU1RFTT09ImlucHV0IiwgR1JPVVA9ImlucHV0IiwgTU9ERT0iNjYwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL21vdW50LmJsYWNrbGlzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9tb3VudC5ibGFja2xpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ5MzQ5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9tb3VudC5ibGFja2xpc3QKQEAgLTAsMCArMSw1IEBACisvZGV2L2xvb3AKKy9kZXYvcmFtCisvZGV2L210ZGJsb2NrCisvZGV2L21kCisvZGV2L2RtLSoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9tb3VudC5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9tb3VudC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWVhOTEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL21vdW50LnNoCkBAIC0wLDAgKzEsOTAgQEAKKyMhL2Jpbi9zaAorIworIyBDYWxsZWQgZnJvbSB1ZGV2CisjCisjIEF0dGVtcHQgdG8gbW91bnQgYW55IGFkZGVkIGJsb2NrIGRldmljZXMgYW5kIHVtb3VudCBhbnkgcmVtb3ZlZCBkZXZpY2VzCisKKworTU9VTlQ9Ii9iaW4vbW91bnQiCitQTU9VTlQ9Ii91c3IvYmluL3Btb3VudCIKK1VNT1VOVD0iL2Jpbi91bW91bnQiCitmb3IgbGluZSBpbiBgZ3JlcCAtdiBeIyAvZXRjL3VkZXYvbW91bnQuYmxhY2tsaXN0YAorZG8KKwlpZiBbIGAgZXhwciBtYXRjaCAiJERFVk5BTUUiICIkbGluZSIgYCAtZ3QgMCBdOworCXRoZW4KKwkJbG9nZ2VyICJ1ZGV2L21vdW50LnNoIiAiWyRERVZOQU1FXSBpcyBibGFja2xpc3RlZCwgaWdub3JpbmciCisJCWV4aXQgMAorCWZpCitkb25lCisKK2F1dG9tb3VudCgpIHsJCisJbmFtZT0iYGJhc2VuYW1lICIkREVWTkFNRSJgIgorCisJISB0ZXN0IC1kICIvcnVuL21lZGlhLyRuYW1lIiAmJiBta2RpciAtcCAiL3J1bi9tZWRpYS8kbmFtZSIKKwkjIFNpbGVudCB1dGlsLWxpbnV4J3MgdmVyc2lvbiBvZiBtb3VudGluZyBhdXRvCisJaWYgWyAieGByZWFkbGluayAkTU9VTlRgIiA9ICJ4L2Jpbi9tb3VudC51dGlsLWxpbnV4IiBdIDsKKwl0aGVuCisJCU1PVU5UPSIkTU9VTlQgLW8gc2lsZW50IgorCWZpCisJCisJIyBJZiBmaWxlc3lzdGVtIHR5cGUgaXMgdmZhdCwgY2hhbmdlIHRoZSBvd25lcnNoaXAgZ3JvdXAgdG8gJ2Rpc2snLCBhbmQKKwkjIGdyYW50IGl0IHdpdGggIHcvci94IHBlcm1pc3Npb25zLgorCWNhc2UgJElEX0ZTX1RZUEUgaW4KKwl2ZmF0fGZhdCkKKwkJTU9VTlQ9IiRNT1VOVCAtbyB1bWFzaz0wMDcsZ2lkPWBhd2sgLUYnOicgJy9eZGlzay97cHJpbnQgJDN9JyAvZXRjL2dyb3VwYCIKKwkJOzsKKwkjIFRPRE8KKwkqKQorCQk7OworCWVzYWMKKworCWlmICEgJE1PVU5UIC10IGF1dG8gJERFVk5BTUUgIi9ydW4vbWVkaWEvJG5hbWUiCisJdGhlbgorCQkjbG9nZ2VyICJtb3VudC5zaC9hdXRvbW91bnQiICIkTU9VTlQgLXQgYXV0byAkREVWTkFNRSBcIi9ydW4vbWVkaWEvJG5hbWVcIiBmYWlsZWQhIgorCQlybV9kaXIgIi9ydW4vbWVkaWEvJG5hbWUiCisJZWxzZQorCQlsb2dnZXIgIm1vdW50LnNoL2F1dG9tb3VudCIgIkF1dG8tbW91bnQgb2YgWy9ydW4vbWVkaWEvJG5hbWVdIHN1Y2Nlc3NmdWwiCisJCXRvdWNoICIvdG1wLy5hdXRvbW91bnQtJG5hbWUiCisJZmkKK30KKwkKK3JtX2RpcigpIHsKKwkjIFdlIGRvIG5vdCB3YW50IHRvIHJtIC1yIHBvcHVsYXRlZCBkaXJlY3RvcmllcworCWlmIHRlc3QgImBmaW5kICIkMSIgfCB3YyAtbCB8IHRyIC1kICIgImAiIC1sdCAyIC1hIC1kICIkMSIKKwl0aGVuCisJCSEgdGVzdCAteiAiJDEiICYmIHJtIC1yICIkMSIKKwllbHNlCisJCWxvZ2dlciAibW91bnQuc2gvYXV0b21vdW50IiAiTm90IHJlbW92aW5nIG5vbi1lbXB0eSBkaXJlY3RvcnkgWyQxXSIKKwlmaQorfQorCisjIE5vIElEX0ZTX1RZUEUgZm9yIGNkcm9tIGRldmljZSwgeWV0IGl0IHNob3VsZCBiZSBtb3VudGVkCituYW1lPSJgYmFzZW5hbWUgIiRERVZOQU1FImAiCitbIC1lIC9zeXMvYmxvY2svJG5hbWUvZGV2aWNlL21lZGlhIF0gJiYgbWVkaWFfdHlwZT1gY2F0IC9zeXMvYmxvY2svJG5hbWUvZGV2aWNlL21lZGlhYAorCitpZiBbICIkQUNUSU9OIiA9ICJhZGQiIF0gJiYgWyAtbiAiJERFVk5BTUUiIF0gJiYgWyAtbiAiJElEX0ZTX1RZUEUiIC1vICIkbWVkaWFfdHlwZSIgPSAiY2Ryb20iIF07IHRoZW4KKwlpZiBbIC14ICIkUE1PVU5UIiBdOyB0aGVuCisJCSRQTU9VTlQgJERFVk5BTUUgMj4gL2Rldi9udWxsCisJZWxpZiBbIC14ICRNT1VOVCBdOyB0aGVuCisgICAgCQkkTU9VTlQgJERFVk5BTUUgMj4gL2Rldi9udWxsCisJZmkKKwkKKwkjIElmIHRoZSBkZXZpY2UgaXNuJ3QgbW91bnRlZCBhdCB0aGlzIHBvaW50LCBpdCBpc24ndAorCSMgY29uZmlndXJlZCBpbiBmc3RhYiAobm90ZSB0aGUgcm9vdCBmaWxlc3lzdGVtIGNhbiBzaG93IHVwIGFzCisJIyAvZGV2L3Jvb3QgaW4gL3Byb2MvbW91bnRzLCBzbyBjaGVjayB0aGUgZGV2aWNlIG51bWJlciB0b28pCisJaWYgZXhwciAkTUFKT1IgIioiIDI1NiArICRNSU5PUiAhPSBgc3RhdCAtYyAlZCAvYDsgdGhlbgorCQlncmVwIC1xICJeJERFVk5BTUUgIiAvcHJvYy9tb3VudHMgfHwgYXV0b21vdW50CisJZmkKK2ZpCisKKworaWYgWyAiJEFDVElPTiIgPSAicmVtb3ZlIiBdIHx8IFsgIiRBQ1RJT04iID0gImNoYW5nZSIgXSAmJiBbIC14ICIkVU1PVU5UIiBdICYmIFsgLW4gIiRERVZOQU1FIiBdOyB0aGVuCisJZm9yIG1udCBpbiBgY2F0IC9wcm9jL21vdW50cyB8IGdyZXAgIiRERVZOQU1FIiB8IGN1dCAtZiAyIC1kICIgIiBgCisJZG8KKwkJJFVNT1VOVCAkbW50CisJZG9uZQorCQorCSMgUmVtb3ZlIGVtcHR5IGRpcmVjdG9yaWVzIGZyb20gYXV0by1tb3VudGVyCisJbmFtZT0iYGJhc2VuYW1lICIkREVWTkFNRSJgIgorCXRlc3QgLWUgIi90bXAvLmF1dG9tb3VudC0kbmFtZSIgJiYgcm1fZGlyICIvcnVuL21lZGlhLyRuYW1lIgorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9uZXR3b3JrLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL25ldHdvcmsuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VlOTI3MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9uZXR3b3JrLnNoCkBAIC0wLDAgKzEsNTQgQEAKKyMhL2Jpbi9zaAorCisjIFdlIGdldCB0d28gImFkZCIgZXZlbnRzIGZvciBob3N0YXAgY2FyZHMgZHVlIHRvIHdpZmkwCitlY2hvICIkSU5URVJGQUNFIiB8IGdyZXAgLXEgd2lmaSAmJiBleGl0IDAKKworIyB1ZGV2ZCBkb2VzIGNsZWFyZW52KCkuIEV4cG9ydCBzaGVsbCBQQVRIIHRvIGNoaWxkcmVuLgorZXhwb3J0IFBBVEgKKworIyBDaGVjayBpZiAvZXRjL2luaXQuZC9uZXR3b3JrIGhhcyBiZWVuIHJ1biB5ZXQgdG8gc2VlIGlmIHdlIGFyZSAKKyMgY2FsbGVkIGJ5IHN0YXJ0aW5nIC9ldGMvcmNTLmQvUzAzdWRldiBhbmQgbm90IGJ5IGhvdHBsdWdnaW5nIGEgZGV2aWNlCisjCisjIEF0IHRoaXMgc3RhZ2UsIG5ldHdvcmsgaW50ZXJmYWNlcyBzaG91bGQgbm90IGJlIGJyb3VnaHQgdXAKKyMgYXV0b21hdGljYWxseSBiZWNhdXNlOgorIyBhKQkvZXRjL2luaXQuZC9uZXR3b3JrIGhhcyBub3QgYmVlbiBydW4geWV0IChzZWN1cml0eSBpc3N1ZSkKKyMgYikgCS92YXIgaGFzIG5vdCBiZWVuIHBvcHVsYXRlZCB5ZXQgc28gL2V0Yy9yZXNvbHYsY29uZiBwb2ludHMgdG8gCisjCW9ibGl2aW9uLCBtYWtpbmcgdGhlIG5ldHdvcmsgdW51c2FibGUKKyMKKworc3Bvb2ZwPSJgZ3JlcCBec3Bvb2Zwcm90ZWN0IC9ldGMvbmV0d29yay9vcHRpb25zYCIKK2lmIHRlc3QgLXogIiRzcG9vZnAiCit0aGVuCisJIyBUaGlzIGlzIHRoZSBkZWZhdWx0IGZyb20gL2V0Yy9pbml0LmQvbmV0d29yaworCXNwb29mcF92YWw9eWVzCitlbHNlCisJc3Bvb2ZwX3ZhbD0ke3Nwb29mcCNzcG9vZnByb3RlY3Q9fQorZmkKKwordGVzdCAiJHNwb29mcF92YWwiID0geWVzICYmIHNwb29mcF92YWw9MSB8fCBzcG9vZnBfdmFsPTAKKworIyBJIHRoaW5rIGl0IGlzIHNhZmUgdG8gYXNzdW1lIHRoYXQgImxvIiB3aWxsIGFsd2F5cyBiZSB0aGVyZSA7KQoraWYgdGVzdCAiYGNhdCAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9sby9ycF9maWx0ZXJgIiAhPSAiJHNwb29mcF92YWwiIC1hIC1uICIkc3Bvb2ZwX3ZhbCIKK3RoZW4KKwllY2hvICIkSU5URVJGQUNFIiA+PiAvZGV2L3VkZXZfbmV0d29ya19xdWV1ZQkKKwlleGl0IDAKK2ZpCisKKyMKKyMgQ29kZSB0YWtlbiBmcm9tIHBjbWNpYS1jczovZXRjL3BjbWNpYS9uZXR3b3JrCisjCisKKyMgaWYgdGhpcyBpbnRlcmZhY2UgaGFzIGFuIGVudHJ5IGluIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzLCBsZXQgaWZ1cGRvd24KKyMgaGFuZGxlIGl0CitpZiBncmVwIC1xICJpZmFjZSBcKyRJTlRFUkZBQ0UiIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzOyB0aGVuCisgIGNhc2UgJEFDVElPTiBpbgorICAgIGFkZCkKKyAgICAJaWZjb25maWcgfCBncmVwIC1xICJeJElOVEVSRkFDRSIgfHwgaWZ1cCAkSU5URVJGQUNFCisgICAgCTs7CisgICAgcmVtb3ZlKQorICAgIAlpZmRvd24gJElOVEVSRkFDRQorICAgIAk7OworICBlc2FjCisgIAorICBleGl0IDAKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmZfMS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mXzEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmJkOTI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mXzEuMS5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIkV4dHJhIG1hY2hpbmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcyIKK0RFU0NSSVBUSU9OID0gIkV4dHJhIG1hY2hpbmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdWRldiwgc3BlY2lmaWNhbGx5IGJsYWNrbGlzdCBpbmZvcm1hdGlvbi4iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTUkNfVVJJID0gIiBcCisgICAgICAgZmlsZTovL2F1dG9tb3VudC5ydWxlcyBcCisgICAgICAgZmlsZTovL21vdW50LnNoIFwKKyAgICAgICBmaWxlOi8vbW91bnQuYmxhY2tsaXN0IFwKKyAgICAgICBmaWxlOi8vYXV0b25ldC5ydWxlcyBcCisgICAgICAgZmlsZTovL25ldHdvcmsuc2ggXAorICAgICAgIGZpbGU6Ly9sb2NhbGV4dHJhLnJ1bGVzIFwKKyIKKworUyA9ICIke1dPUktESVJ9IgorCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3J1bGVzLmQKKworICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2F1dG9tb3VudC5ydWxlcyAgICAgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kL2F1dG9tb3VudC5ydWxlcworICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2F1dG9uZXQucnVsZXMgICAgICAgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kL2F1dG9uZXQucnVsZXMKKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9sb2NhbGV4dHJhLnJ1bGVzICAgICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC9sb2NhbGV4dHJhLnJ1bGVzCisKKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9tb3VudC5ibGFja2xpc3QgICAgICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvc2NyaXB0cy8KKworICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L21vdW50LnNoICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvc2NyaXB0cy9tb3VudC5zaAorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L25ldHdvcmsuc2ggJHtEfSR7c3lzY29uZmRpcn0vdWRldi9zY3JpcHRzCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vdWRldiIKK1JERVBFTkRTXyR7UE59ID0gInVkZXYiCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS91ZGV2L21vdW50LmJsYWNrbGlzdCIKKworIyB0byByZXBsYWNlIHVkZXYtZXh0cmEtcnVsZXMgZnJvbSBtZXRhLW9lCitSUFJPVklERVNfJHtQTn0gPSAidWRldi1leHRyYS1ydWxlcyIKK1JSRVBMQUNFU18ke1BOfSA9ICJ1ZGV2LWV4dHJhLXJ1bGVzIgorUkNPTkZMSUNUU18ke1BOfSA9ICJ1ZGV2LWV4dHJhLXJ1bGVzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMGRhZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi5pbmMKQEAgLTAsMCArMSwxMTEgQEAKK1NVTU1BUlkgPSAiL2Rldi8gYW5kIGhvdHBsdWcgbWFuYWdlbWVudCBkYWVtb24iCitERVNDUklQVElPTiA9ICJ1ZGV2IGlzIGEgZGFlbW9uIHdoaWNoIGR5bmFtaWNhbGx5IGNyZWF0ZXMgYW5kIHJlbW92ZXMgZGV2aWNlIG5vZGVzIGZyb20gXAorL2Rldi8sIGhhbmRsZXMgaG90cGx1ZyBldmVudHMgYW5kIGxvYWRzIGRyaXZlcnMgYXQgYm9vdCB0aW1lLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL2hvdHBsdWcvdWRldi91ZGV2Lmh0bWwiCitMSUNFTlNFID0gIkdQTHYyLjArICYgTEdQTHYyLjErIgorTElDRU5TRV8ke1BOfSA9ICJHUEx2Mi4wKyIKK0xJQ0VOU0VfbGlidWRldiA9ICJMR1BMdjIuMSsiCitMSUNFTlNFX2xpYmd1ZGV2ID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9DT1BZSU5HO21kNT0xN2M0ZTVmYjQ5NWU2NzA3YWM5MmEzODY0OTI2Zjk3OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZ3VkZXYvQ09QWUlORzttZDU9ZmI0OTQ0ODVhN2QwNTA1MzA4Y2I2OGU0OTk3Y2MyNjYiCisKK0xERkxBR1MgKz0gIi1scnQiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgbGlidXNiIHVzYnV0aWxzIHBjaXV0aWxzIGdsaWItMi4wLW5hdGl2ZSBncGVyZi1uYXRpdmUgbGlieHNsdC1uYXRpdmUgdXRpbC1saW51eCIKK1JQUk9WSURFU18ke1BOfSA9ICJob3RwbHVnIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMva2VybmVsL2hvdHBsdWcvdWRldi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXhpbmcta2V5Ym9hcmRfZm9yY2VfcmVsZWFzZS5zaC1zaGVsbC1zY3JpcHQtcGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hdm9pZC1tb3VzZS1hdXRvc3VzcGVuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4ucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vdWRldi5ydWxlcyBcCisgICAgICAgICAgIGZpbGU6Ly9kZXZmcy11ZGV2LnJ1bGVzIFwKKyAgICAgICAgICAgZmlsZTovL2xpbmtzLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vcGVybWlzc2lvbnMucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vbG9jYWwucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vdWRldi1jYWNoZSBcCisgICAgICAgICAgIGZpbGU6Ly91ZGV2LWNhY2hlLmRlZmF1bHQgXAorICAgICAgICAgICBmaWxlOi8vYWRkLWluc3RhbGwtcHRlc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X3J1bGUtc3ludGF4LXJlZ2V4LXB0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgcHRlc3QKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIHBlcmwgcHl0aG9uIgorCitsaWJleGVjZGlyID0gIiR7YmFzZV9saWJkaXJ9IgorRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtcm9vdGxpYmRpcj0ke2Jhc2VfbGliZGlyfSBcCisgICAgICAgICAgICAgICAgLS13aXRoLXBjaS1pZHMtcGF0aD0ke2RhdGFkaXJ9L3BjaS5pZHMgXAorICAgICAgICAgICAgICAgIGFjX2N2X2ZpbGVfX3Vzcl9zaGFyZV9wY2lfaWRzPW5vIFwKKyAgICAgICAgICAgICAgICBhY19jdl9maWxlX191c3Jfc2hhcmVfaHdkYXRhX3BjaV9pZHM9bm8gXAorICAgICAgICAgICAgICAgIGFjX2N2X2ZpbGVfX3Vzcl9zaGFyZV9taXNjX3BjaV9pZHM9eWVzIFwKKyAgICAgICAgICAgICAgICAtLXNiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9IFwKKyAgICAgICAgICAgICAgICAtLWxpYmV4ZWNkaXI9JHtub25hcmNoX2Jhc2VfbGliZGlyfSBcCisgICAgICAgICAgICAgICAgLS13aXRoLXJvb3RsaWJkaXI9JHtiYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgIC0td2l0aC1yb290cHJlZml4PSBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyIFwKKyAgICAgICAgICAgICAgICIKKworUEFDS0FHRVMgPSsgInVkZXYtY2FjaGUiCitQQUNLQUdFUyA9KyAibGlidWRldiIKK1BBQ0tBR0VTID0rICJsaWJndWRldiIKKworSU5JVFNDUklQVF9QQUNLQUdFUyA9ICJ1ZGV2IHVkZXYtY2FjaGUiCitJTklUU0NSSVBUX05BTUVfdWRldiA9ICJ1ZGV2IgorSU5JVFNDUklQVF9QQVJBTVNfdWRldiA9ICJzdGFydCAwNCBTIC4iCitJTklUU0NSSVBUX05BTUVfdWRldi1jYWNoZSA9ICJ1ZGV2LWNhY2hlIgorSU5JVFNDUklQVF9QQVJBTVNfdWRldi1jYWNoZSA9ICJzdGFydCAzNiBTIC4iCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmV4ZWNkaXJ9ICR7bGliZGlyfS9Db25zb2xlS2l0ICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldiAke2JpbmRpcn0vdWRldmFkbSIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICJ1ZGV2LWNhY2hlIgorCisjIHVkZXYtdXRpbHMgaGFzIGJlZW4gcmVtb3ZlZCBhcyBhIHBhY2thZ2UuICBOb3RlIHRoYXQgdWRldiBjb25mbGljdHMgd2l0aCB1ZGV2LXV0aWxzIHNvIHRoYXQKKyMgdWRldi11dGlscyBpcyByZW1vdmVkIGZyb20gc3lzdGVtcyBvbiB1cGdyYWRlLgorUkNPTkZMSUNUU18ke1BOfSArPSAidWRldi11dGlscyIKK1JSRVBMQUNFU18ke1BOfSArPSAidWRldi11dGlscyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiYXNlX2xpYmRpcn0vdWRldi8uZGVidWcvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2Jhc2VfbGliZGlyfS91ZGV2Ly5kZWJ1Zy8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvLmRlYnVnLyoiCitGSUxFU18ke1BOfS1kZXYgPSAiJHtkYXRhZGlyfS9wa2djb25maWcvdWRldi5wYyBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9saWJ1ZGV2LmggJHtsaWJkaXJ9L2xpYnVkZXYuc28gJHtsaWJkaXJ9L2xpYnVkZXYubGEgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJ1ZGV2LmEgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJ1ZGV2LnBjIFwKKyAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L2d1ZGV2KiAke2xpYmRpcn0vbGliZ3VkZXYqLnNvICR7bGliZGlyfS9saWJndWRldioubGEgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJndWRldiouYSAke2xpYmRpcn0vcGtnY29uZmlnL2d1ZGV2Ki5wYyIKK0ZJTEVTX2xpYnVkZXYgPSAiJHtiYXNlX2xpYmRpcn0vbGlidWRldi5zby4qIgorRklMRVNfbGliZ3VkZXYgPSAiJHtiYXNlX2xpYmRpcn0vbGliZ3VkZXYqLnNvLiogJHtsaWJkaXJ9L2xpYmd1ZGV2Ki5zby4qIgorRklMRVNfdWRldi1jYWNoZSA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC91ZGV2LWNhY2hlICR7c3lzY29uZmRpcn0vZGVmYXVsdC91ZGV2LWNhY2hlIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC91ZGV2CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdWRldi1jYWNoZSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdWRldi1jYWNoZQorCXNlZCAtaSBzJUBVREVWREAlJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3VkZXZkJSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdWRldgorCXNlZCAtaSBzJUBVREVWREAlJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3VkZXZkJSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdWRldi1jYWNoZQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdWRldi1jYWNoZS5kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdWRldi1jYWNoZQorCisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vdWRldi9jYWNoZS5kYXRhCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC8KKworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xvY2FsLnJ1bGVzICAgICAgICAgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kL2xvY2FsLnJ1bGVzCisKKwkjIGhpZDJoY2kgaGFzIG1vdmVkIHRvIGJsdWV6NC4gcmVtb3ZlZCBpbiB1ZGV2IGFzIG9mIHZlcnNpb24gMTY5CisJcm0gLWYgJHtEfSR7YmFzZV9saWJkaXJ9L3VkZXYvaGlkMmhjaQorCisJZWNobyAndWRldl9ydW49Ii92YXIvcnVuL3VkZXYiJyA+PiAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3VkZXYuY29uZgorfQorCisjIEFzIHN5c3RlbWQgYWxzbyBidWlsZHMgdWRldiwgc2tpcCB0aGlzIHBhY2thZ2UgaWYgd2UncmUgZG9pbmcgYSBzeXN0ZW1kIGJ1aWxkLgorcHl0aG9uICgpIHsKKyAgICBpZiBiYi51dGlscy5jb250YWlucyAoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiJ3N5c3RlbWQnIGluIERJU1RST19GRUFUVVJFUyIpCit9Citkb19jb21waWxlX3B0ZXN0KCkgeworICAgIG9lX3J1bm1ha2UgdGVzdC11ZGV2Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi8wMDAxLUZpeGluZy1rZXlib2FyZF9mb3JjZV9yZWxlYXNlLnNoLXNoZWxsLXNjcmlwdC1wYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvMDAwMS1GaXhpbmcta2V5Ym9hcmRfZm9yY2VfcmVsZWFzZS5zaC1zaGVsbC1zY3JpcHQtcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWRlYWZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvMDAwMS1GaXhpbmcta2V5Ym9hcmRfZm9yY2VfcmVsZWFzZS5zaC1zaGVsbC1zY3JpcHQtcGF0aC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDBmODI5MGM5NDNkYTI5OGFiZDI2OWNhNjBmZDgzNzVkZmIyMTk5NzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kcnUgREFNSUFOIDxhbGV4YW5kcnUuZGFtaWFuQGludGVsLmNvbT4KK0RhdGU6IFRodSwgMTIgSnVsIDIwMTIgMTI6NTQ6NDggKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4aW5nIGtleWJvYXJkX2ZvcmNlX3JlbGVhc2Uuc2ggc2hlbGwgc2NyaXB0IHBhdGgKKworV2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIHJvb3RwcmVmaXgsIHRoZSBrZXlib2FyZC1mb3JjZS1yZWxlYXNlLnNoLmluCit3YXMgbW9kaWZpZWQgdG8gYmUgZXhlY3V0ZWQgd2l0aCBAcm9vdHByZWZpeEAvYmluL3NoLCB3aGljaCBpcyB3cm9uZworYmVjYXVzZSBAcm9vdHByZWZpeEAgZGVmYXVsdHMgdG8gL3VzciAod2hpY2ggaXMgY29ycmVjdCksIGJ1dCB0aGUKK3NoZWxsIGlzIGFsd2F5cyBhdCAvYmluL3NoIChJRUVFIFN0ZCAxMDAzLjItMTk5MikuCisKK1RoZXJlZm9yZSB0aGUgaW50ZXJwcmV0ZXIgZm9yIHNoZWxsIHNjcmlwdHMgbmVlZHMgdG8gYmUgL2Jpbi9zaCBhdCBhbGwgdGltZXMuCisKK1RoZSB1cHN0cmVhbSBtb3ZlZCB0byBjb25maWd1cmFibGUgcm9vdCBwcmVmaXgsIHRoaXMgcGF0Y2ggdGFjbGtlcyBhIAordHJhbnNpdGlvbiBidWcsIGFuZCB3aWxsIG5vdCBiZSBhcHBsaWVkIHVwc3RyZWFtLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcnUgREFNSUFOIDxhbGV4YW5kcnUuZGFtaWFuQGludGVsLmNvbT4KKy0tLQorIHNyYy9rZXltYXAva2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5zaC5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9rZXltYXAva2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5zaC5pbiBiL3NyYy9rZXltYXAva2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5zaC5pbgoraW5kZXggZGQwNDBjZS4uNTk3YTNhNiAxMDA3NTUKKy0tLSBhL3NyYy9rZXltYXAva2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5zaC5pbgorKysrIGIvc3JjL2tleW1hcC9rZXlib2FyZC1mb3JjZS1yZWxlYXNlLnNoLmluCitAQCAtMSw0ICsxLDQgQEAKKy0jIUByb290cHJlZml4QC9iaW4vc2ggLWUKKysjIS9iaW4vc2ggLWUKKyAjIHJlYWQgbGlzdCBvZiBzY2FuY29kZXMsIGNvbnZlcnQgaGV4IHRvIGRlY2ltYWwgYW5kCisgIyBhcHBlbmQgdG8gdGhlIGF0a2JkIGZvcmNlX3JlbGVhc2Ugc3lzZnMgYXR0cmlidXRlCisgIyAkMSBzeXNmcyBkZXZwYXRoIGZvciBzZXJpb1gKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9hZGQtaW5zdGFsbC1wdGVzdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2FkZC1pbnN0YWxsLXB0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYzJlOTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9hZGQtaW5zdGFsbC1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDg2IEBACitBZGp1c3RlbWVudHMgZm9yIHB0ZXN0OgorCistIEFkZCAnaW5zdGFsbC1wdGVzdCcgcnVsZS4KKy0gUHJpbnQgYSBzdGFuZGFyZCByZXN1bHQgbGluZSBmb3IgZWFjaCB0ZXN0LgorLSBSZXBsYWNlIHRoZSB1c2Ugb2YgInRyZWUiIHdpdGggImZpbmQiLgorCitTaWduZWQtb2ZmLWJ5OiBCasO2cm4gU3RlbmJlcmcgPGJqc3RAZW5lYS5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcmEgU2FmdGEgPGFsc3RAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQWRkIG1pc3NpbmcgZmlsZXMgZm9yIHJ1bGUtc3ludGF4LWNoZWNrCistIEFkZCBydWxlLXN5bnRheC1jaGVjay5weQorLSBBZGQgdGhlIGRlcGxveWVkIHVkZXYgcnVsZXMgdG8gdGhlIHRlc3RkYXRhCisKK1NpZ25lZC1vZmYtYnk6IE1heCBLcnVtbWVuYWNoZXIgPG1heC5vc3MuMDlAZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0gYS9NYWtlZmlsZS5hbQkyMDEyLTAzLTE4IDE2OjI4OjE0LjAwMDAwMDAwMCArMDEwMAorKysrIGIvTWFrZWZpbGUuYW0JMjAxMy0wMi0xOCAxMDowMzozNi41MzExMDEyNDQgKzAxMDAKK0BAIC03MDgsMyArNzA4LDE4IEBACisgCWZvciBpIGluIHNyYy9kb2NzL2h0bWwvKi57aHRtbCxjc3MscG5nfTsgZG8gZWNobyAkJGk7IGt1cCBwdXQgJCRpICQkaS5zaWduIC9wdWIvbGludXgvdXRpbHMva2VybmVsL2hvdHBsdWcvbGlidWRldi87IGRvbmUKKyAJZm9yIGkgaW4gc3JjL2d1ZGV2L2RvY3MvaHRtbC8qLntodG1sLGNzcyxwbmd9OyBkbyBybSAtZiAkJGkuc2lnbjsgZ3BnIC0tYXJtb3IgLS1kZXRhY2gtc2lnbiAtLW91dHB1dD0kJGkuc2lnbiAkJGk7IGRvbmUKKyAJZm9yIGkgaW4gc3JjL2d1ZGV2L2RvY3MvaHRtbC8qLntodG1sLGNzcyxwbmd9OyBkbyBlY2hvICQkaTsga3VwIHB1dCAkJGkgJCRpLnNpZ24gL3B1Yi9saW51eC91dGlscy9rZXJuZWwvaG90cGx1Zy9ndWRldi87IGRvbmUKKysKKytSVUxFUyA9IHJ1bGVzLyogc3JjL2FjY2VsZXJvbWV0ZXIvNjEtYWNjZWxlcm9tZXRlci5ydWxlcyBcCisrCSBzcmMvY2Ryb21faWQvNjAtY2Ryb21faWQucnVsZXMgXAorKwkgc3JjL2tleW1hcC85NS1rZXlib2FyZC1mb3JjZS1yZWxlYXNlLnJ1bGVzIHNyYy9rZXltYXAvOTUta2V5bWFwLnJ1bGVzIFwKKysJIHNyYy9tdGRfcHJvYmUvNzUtcHJvYmVfbXRkLnJ1bGVzIHNyYy92NGxfaWQvNjAtcGVyc2lzdGVudC12NGwucnVsZXMKKysKKytpbnN0YWxsLXB0ZXN0OgorKwlpbnN0YWxsIHRlc3QtdWRldiAkKERFU1RESVIpCisrCWNwIE1ha2VmaWxlICQoREVTVERJUikKKysJc2VkIC1pIC1lICdzfF5NYWtlZmlsZTp8X01ha2VmaWxlOnwnICQoREVTVERJUikvTWFrZWZpbGUKKysJaW5zdGFsbCAtZCAkKERFU1RESVIpL3Rlc3QgJChERVNURElSKS9ydWxlcworKwkoY2QgJCh0b3Bfc3JjZGlyKSAmJiBpbnN0YWxsICQoVEVTVFMpICQoREVTVERJUikvdGVzdCkKKysJKGNkICQodG9wX3NyY2RpcikgJiYgaW5zdGFsbCB0ZXN0L3J1bGUtc3ludGF4LWNoZWNrLnB5ICQoREVTVERJUikvdGVzdCkKKysJKGNkICQodG9wX3NyY2RpcikgJiYgaW5zdGFsbCAkKFJVTEVTKSAkKERFU1RESVIpL3J1bGVzKQorKwljcCAkKHRvcF9zcmNkaXIpL3Rlc3Qvc3lzLnRhci54eiAkKERFU1RESVIpL3Rlc3QvCistLS0gYS90ZXN0L3VkZXYtdGVzdC5wbAkyMDEyLTAzLTE4IDE2OjQzOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIGIvdGVzdC91ZGV2LXRlc3QucGwJMjAxMy0wMi0xOCAxMDozMToyOS43MDYzNTczMjEgKzAxMDAKK0BAIC0xNDU5LDExICsxNDU5LDEzIEBACisgICAgICAgICAgICAgICAgIHByaW50ICJhZGQ6ICAgICAgICAgZXJyb3IiOworICAgICAgICAgICAgICAgICBpZiAoJHJ1bGVzLT57ZXhwX2FkZF9lcnJvcn0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiIGFzIGV4cGVjdGVkXG4iOworKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJYRkFJTDogVEVTVCAkbnVtYmVyOiAkcnVsZXMtPntkZXNjfTogYWRkXG4iOworICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbiI7CistICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtKCJ0cmVlICR1ZGV2X3Jvb3QiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0oImZpbmQgJHVkZXZfcm9vdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9yKys7CisrICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkZBSUw6IFRFU1QgJG51bWJlcjogJHJ1bGVzLT57ZGVzY306IGFkZFxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCgxKTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgfQorQEAgLTE0NzksMTUgKzE0ODEsMTggQEAKKyAgICAgICAgICAgICAgICAgcHJpbnQgInJlbW92ZTogICAgICBlcnJvciI7CisgICAgICAgICAgICAgICAgIGlmICgkcnVsZXMtPntleHBfcmVtX2Vycm9yfSkgeworICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIgYXMgZXhwZWN0ZWRcbiI7CisrICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlhGQUlMOiBURVNUICRudW1iZXI6ICRydWxlcy0+e2Rlc2N9OiByZW1vdmVcbiI7CisgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIjsKKy0gICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0oInRyZWUgJHVkZXZfcm9vdCIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSgiZmluZCAkdWRldl9yb290Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3IrKzsKKysgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiRkFJTDogVEVTVCAkbnVtYmVyOiAkcnVsZXMtPntkZXNjfTogcmVtb3ZlXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwKDEpOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICBwcmludCAicmVtb3ZlOiAgICAgIG9rXG4iOworKyAgICAgICAgICAgICAgICBwcmludCAiUEFTUzogVEVTVCAkbnVtYmVyOiAkcnVsZXMtPntkZXNjfTogcmVtb3ZlXG4iOworICAgICAgICAgfQorIAorICAgICAgICAgcHJpbnQgIlxuIjsKKy0tLSBhL2NvbmZpZ3VyZS5hYyAgICAgIDIwMTMtMTEtMjggMDk6MTQ6MDIuODE0MjQ4ODI2ICswMTAwCisrKysgYi9jb25maWd1cmUuYWMgICAgICAyMDEzLTExLTI4IDA5OjE0OjM0LjI2MDg3NDI5NiArMDEwMAorQEAgLTYsNyArNiw3IEBACisgICAgICAgIFtodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9ob3RwbHVnL3VkZXYuaHRtbF0pCisgQUNfQ09ORklHX1NSQ0RJUihbc3JjL3VkZXZkLmNdKQorIEFDX0NPTkZJR19BVVhfRElSKFtidWlsZC1hdXhdKQorLUFNX0lOSVRfQVVUT01BS0UoW2NoZWNrLW5ld3MgZm9yZWlnbiAxLjExIC1XYWxsIC1Xbm8tcG9ydGFiaWxpdHkgc2lsZW50LXJ1bGVzIHRhci1wYXggbm8tZGlzdC1nemlwIGRpc3QteHogc3ViZGlyLW9iamVjdHNdKQorK0FNX0lOSVRfQVVUT01BS0UoW2NoZWNrLW5ld3MgZm9yZWlnbiAxLjExIC1XYWxsIC1Xbm8tcG9ydGFiaWxpdHkgc2lsZW50LXJ1bGVzIHRhci1wYXggbm8tZGlzdC1nemlwIGRpc3QteHogc3ViZGlyLW9iamVjdHMgc2VyaWFsLXRlc3RzXSkKKyBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyBBQ19TWVNfTEFSR0VGSUxFCisgQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9hdm9pZC1tb3VzZS1hdXRvc3VzcGVuZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2F2b2lkLW1vdXNlLWF1dG9zdXNwZW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMzFiMzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9hdm9pZC1tb3VzZS1hdXRvc3VzcGVuZC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitTb3VyY2U6IGh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9zeXN0ZW1kL3N5c3RlbWQvY29tbWl0L3J1bGVzLzQyLXVzYi1oaWQtcG0ucnVsZXM/aWQ9ZTAzODZjZjI4MDkyMTliYmRkMzA4OTVmNDZmMWY1NjdiNTY5MDJiNgorCitTb21lIFVTQiBwb3J0cyBvbiBleHRlcm5hbCBodWJzIG1heSBiZSByZXBvcnRlZCBhcyAiZml4ZWQiLiBXZSBvbmx5IHdhbnQKK3RvIGF1dG8tZW5hYmxlIHRoaXMgb24gcG9ydHMgdGhhdCBhcmUgaW50ZXJuYWwgdG8gdGhlIG1hY2hpbmUsIHNvIGNoZWNrCit0aGUgcGFyZW50IHN0YXRlIGFzIHdlbGwuCisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTMvMDkvMTMKKworSW5kZXg6IHVkZXYtMTgyL3J1bGVzLzQyLXVzYi1oaWQtcG0ucnVsZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1ZGV2LTE4Mi5vcmlnL3J1bGVzLzQyLXVzYi1oaWQtcG0ucnVsZXMKKysrKyB1ZGV2LTE4Mi9ydWxlcy80Mi11c2ItaGlkLXBtLnJ1bGVzCitAQCAtNDYsNCArNDYsOSBAQCBBQ1RJT049PSJhZGQiLCBTVUJTWVNURU09PSJ1c2IiLCBBVFRSU3tpCisgQUNUSU9OPT0iYWRkIiwgU1VCU1lTVEVNPT0idXNiIiwgQVRUUntpZFZlbmRvcn09PSIxNGRkIiwgQVRUUntpZFByb2R1Y3R9PSIwMDAyIiwgVEVTVD09InBvd2VyL2NvbnRyb2wiLCBBVFRSe3Bvd2VyL2NvbnRyb2x9PSJhdXRvIgorCisgIyBVU0IgSElEIGRldmljZXMgdGhhdCBhcmUgaW50ZXJuYWwgdG8gdGhlIG1hY2hpbmUgc2hvdWxkIGFsc28gYmUgc2FmZSB0byBhdXRvc3VzcGVuZAorKyMgQW5kIHNraXAgaXQgZm9yIGRldmljZXMgd2hpY2ggYXJlIGV4dGVybmFsIGJ1dCBzYXkgImZpeGVkIgorK0FDVElPTj09ImFkZCIsIFNVQlNZU1RFTT09InVzYiIsIFNVQlNZU1RFTVM9PSJ1c2IiLCBBVFRSU3tyZW1vdmFibGV9PT0icmVtb3ZhYmxlIiwgR09UTz0idXNiX2hpZF9wbV9lbmQiCisrQUNUSU9OPT0iYWRkIiwgU1VCU1lTVEVNPT0idXNiIiwgU1VCU1lTVEVNUz09InVzYiIsIEFUVFJTe3JlbW92YWJsZX09PSJ1bmtub3duIiwgR09UTz0idXNiX2hpZF9wbV9lbmQiCisgQUNUSU9OPT0iYWRkIiwgU1VCU1lTVEVNPT0idXNiIiwgQVRUUntiSW50ZXJmYWNlQ2xhc3N9PT0iMDMiLCBBVFRSU3tyZW1vdmFibGV9PT0iZml4ZWQiLCBURVNUPT0iLi4vcG93ZXIvY29udHJvbCIsIEFUVFJ7Li4vcG93ZXIvY29udHJvbH09ImF1dG8iCisrTEFCRUw9InVzYl9oaWRfcG1fZW5kIgorKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvZGV2ZnMtdWRldi5ydWxlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2RldmZzLXVkZXYucnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJhMWFkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2RldmZzLXVkZXYucnVsZXMKQEAgLTAsMCArMSwxMDggQEAKKyMgVGhlIHVzZSBvZiB0aGVzZSBydWxlcyBpcyBub3QgcmVjb21tZW5kZWQgb3Igc3VwcG9ydGVkLgorIyBJbiBhIHdvcmxkIHdoZXJlIGRldmljZXMgY2FuIGNvbWUgYW5kIGdvIGF0IGFueSB0aW1lLCB0aGUgZGV2ZnMgc2NoZW1lCisjIG9mIHNpbXBsZSBkZXZpY2UgZW51bWVyYXRpb24gZG9lcyBub3QgaGVscCBfYW55dGhpbmdfLiBKdXN0IGZvcmdldCBhYm91dAorIyBpdC4gVXNlIGN1c3RvbSBydWxlcyB0byBuYW1lIHlvdXIgZGV2aWNlIG9yIGxvb2sgYXQgdGhlIHBlcnNpc3RlbnQgZGV2aWNlCisjIG5hbWluZyBzY2hlbWUsIHdoaWNoIGlzIGltcGxlbWVudGVkIGZvciBkaXNrcyBhbmQgYWRkIHlvdXIgc3Vic3lzdGVtLgorCisjIGlkZSBibG9jayBkZXZpY2VzCitCVVM9ImlkZSIsIEtFUk5FTD0iaGQqIiwgUFJPR1JBTT0iL2V0Yy91ZGV2L2lkZS1kZXZmcy5zaCAlayAlYiAlbiIsIE5BTUU9IiVrIiwgU1lNTElOSz0iJWN7MX0gJWN7Mn0iCisKKyMgbWQgYmxvY2sgZGV2aWNlcworS0VSTkVMPSJtZFswLTldKiIsIE5BTUU9Im1kLyVuIgorCisjIGZsb3BweSBkZXZpY2VzCitLRVJORUw9ImZkWzAtOV0qIiwgTkFNRT0iZmxvcHB5LyVuIgorCisjIHR0eSBkZXZpY2VzCitLRVJORUw9InR0eVswLTldKiIsICAgIE5BTUU9InZjLyVuIiwgU1lNTElOSz0iJWsiCitLRVJORUw9InR0eVNbMC05XSoiLCAgIE5BTUU9InR0cy8lbiIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJ0dHlVU0JbMC05XSoiLCBOQU1FPSJ0dHMvVVNCJW4iCisKKyMgdmMgZGV2aWNlcworS0VSTkVMPSJ2Y3MiLCAgICAgICAgTkFNRT0idmNjLzAiCitLRVJORUw9InZjc1swLTldKiIsICBOQU1FPSJ2Y2MvJW4iCitLRVJORUw9InZjc2EiLCAgICAgICBOQU1FPSJ2Y2MvYTAiCitLRVJORUw9InZjc2FbMC05XSoiLCBOQU1FPSJ2Y2MvYSVuIgorCisjIHY0bCBkZXZpY2VzCitLRVJORUw9InZpZGVvWzAtOV0qIiwgTkFNRT0idjRsL3ZpZGVvJW4iCitLRVJORUw9InJhZGlvWzAtOV0qIiwgTkFNRT0idjRsL3JhZGlvJW4iCitLRVJORUw9InZiaVswLTldKiIsICAgTkFNRT0idjRsL3ZiaSVuIgorS0VSTkVMPSJ2dHhbMC05XSoiLCAgIE5BTUU9InY0bC92dHglbiIKKworIyBkbSBkZXZpY2VzIChpZ25vcmUgdGhlbSkKK0tFUk5FTD0iZG0tWzAtOV0qIiwgTkFNRT0iIgorCisjIGkyYyBkZXZpY2VzCitLRVJORUw9ImkyYy1bMC05XSoiLCBOQU1FPSJpMmMvJW4iLCBTWU1MSU5LPSIlayIKKworIyBsb29wIGRldmljZXMKK0tFUk5FTD0ibG9vcFswLTldKiIsIE5BTUU9Imxvb3AvJW4iLCBTWU1MSU5LPSIlayIKKworIyByYW1kaXNrcworS0VSTkVMPSJyYW1bMC05XSoiLCBOQU1FPSJyZC8lbiIsIFNZTUxJTks9IiVrIgorCisjIGZyYW1lYnVmZmVyIGRldmljZXMKK0tFUk5FTD0iZmJbMC05XSoiLCBOQU1FPSJmYi8lbiIsIFNZTUxJTks9IiVrIgorCisjIG1pc2MKK0tFUk5FTD0icnRjIiwgICAgIE5BTUU9Im1pc2MvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0icHNhdXgiLCAgIE5BTUU9Im1pc2MvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0iYWdwZ2FydCIsIE5BTUU9Im1pc2MvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0icnRjIiwgICAgIE5BTUU9Im1pc2MvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0icHNhdXgiLCAgIE5BTUU9Im1pc2MvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0idWlucHV0IiwgIE5BTUU9Im1pc2MvJWsiLCBTWU1MSU5LPSIlayIKKworIyBhbHNhIGRldmljZXMKK0tFUk5FTD0iY29udHJvbENbMC05XSoiLCBOQU1FPSJzbmQvJWsiCitLRVJORUw9Imh3W0NEMC05XSoiLCAgICAgTkFNRT0ic25kLyVrIgorS0VSTkVMPSJwY21bQ0QwLTljcF0qIiwgIE5BTUU9InNuZC8layIKK0tFUk5FTD0ibWlkaVtDRDAtOV0qIiwgICBOQU1FPSJzbmQvJWsiCitLRVJORUw9InRpbWVyIiwgICAgICAgICAgTkFNRT0ic25kLyVrIgorS0VSTkVMPSJzZXEiLCAgICAgICAgICAgIE5BTUU9InNuZC8layIKKworIyBvc3MgZGV2aWNlcworS0VSTkVMPSJhdWRpbyoiLCAgICAgTkFNRT0ic291bmQvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0iZG1taWRpIiwgICAgIE5BTUU9InNvdW5kLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9ImRzcCoiLCAgICAgICBOQU1FPSJzb3VuZC8layIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJtaWRpKiIsICAgICAgTkFNRT0ic291bmQvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0ibWl4ZXIqIiwgICAgIE5BTUU9InNvdW5kLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9InNlcXVlbmNlcioiLCBOQU1FPSJzb3VuZC8layIsIFNZTUxJTks9IiVrIgorCisjIGlucHV0IGRldmljZXMKK0tFUk5FTD0ibWljZSIsICAgTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9Im1vdXNlKiIsIE5BTUU9ImlucHV0LyVrIgorS0VSTkVMPSJldmVudCoiLCBOQU1FPSJpbnB1dC8layIKK0tFUk5FTD0ianMqIiwgICAgTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9InRzKiIsCSBOQU1FPSJpbnB1dC8layIKKworIyBVU0IgZGV2aWNlcworS0VSTkVMPSJoaWRkZXYqIiwJTkFNRT0idXNiLyVrIgorS0VSTkVMPSJhdWVyKiIsCQlOQU1FPSJ1c2IvJWsiCitLRVJORUw9ImxlZ291c2J0b3dlcioiLAlOQU1FPSJ1c2IvJWsiCitLRVJORUw9ImRhYnVzYioiLAlOQU1FPSJ1c2IvJWsiCitCVVM9InVzYiIsIEtFUk5FTD0ibHBbMC05XSoiLAlOQU1FPSJ1c2IvJWsiCisKKyMgbmV0bGluayBkZXZpY2VzCitLRVJORUw9InJvdXRlIiwJCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9InNraXAiLAkJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0idXNlcnNvY2siLAlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJmd21vbml0b3IiLAlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJ0Y3BkaWFnIiwJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0ibmZsb2ciLAkJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0ieGZybSIsCQlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJhcnBkIiwJCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9InJvdXRlNiIsCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9ImlwNl9mdyIsCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9ImRucnRtc2ciLAlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJ0YXAqIiwJCU5BTUU9Im5ldGxpbmsvJWsiCisKKyMgQ0FQSSBkZXZpY2VzCitLRVJORUw9ImNhcGkiLAkJTkFNRT0iY2FwaTIwIiwgU1lNTElOSz0iaXNkbi9jYXBpMjAiCitLRVJORUw9ImNhcGkqIiwJCU5BTUU9ImNhcGkvJW4iCisKKyMgTmV0d29yayBkZXZpY2VzCitLRVJORUw9InR1biIsCQlOQU1FPSJuZXQvJWsiCisKKyMgcmF3IGRldmljZXMKK0tFUk5FTD0icmF3WzAtOV0qIiwgICAgIE5BTUU9InJhdy8layIgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9maXhfcnVsZS1zeW50YXgtcmVnZXgtcHRlc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9maXhfcnVsZS1zeW50YXgtcmVnZXgtcHRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzYzQ2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2ZpeF9ydWxlLXN5bnRheC1yZWdleC1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDU4IEBACitUaGUgcnVsZS1zeW50YXgtY2hlY2sgc2NyaXB0IGZhaWxzIHdpdGggZXJyb3JzIGxpa2UgdGhpczoKKworSW52YWxpZCBsaW5lIC9saWIvdWRldi9ydWxlcy5kLzk1LWtleW1hcC5ydWxlczo0OTogRU5We0RNSV9WRU5ET1J9PT0iQVNVUyoiLCBLRVJORUxTPT0iaW5wdXQqIiwgQVRUUlN7bmFtZX09PSJBc3VzIEV4dHJhIEJ1dHRvbnMiLCBBVFRSe1tkbWkvaWRdcHJvZHVjdF9uYW1lfT09IlczSiIsIFJVTis9ImtleW1hcCAkbmFtZSBtb2R1bGUtYXN1cy13M2oiCisoJyAgY2xhdXNlOicsICdBVFRSe1tkbWkvaWRdcHJvZHVjdF9uYW1lfT09IlczSiInKQorKCkKKworCitNb3ZlIGxpbmUgY29tbWVudCBmcm9tIGVuZCBvZiBydWxlcyBmaWxlIHRvIGl0cyBvd24gbGluZSwgdGhlIHJlZ2V4IHVzZWQgdG8KK3Rlc3QgY29ycmVjdCBzeW50YXggY2hva2Ugb24gaXQuCisKK1RoZSBydWxlLXN5bnRheC1jaGVjay5weSB1c2VzIHJlZ2V4IHdoaWNoIGVycm91cm5lc3NseSBjb21wbGFpbnMgb24gQVRUUiBydWxlcworb2YgdGhlIGZvcm0gQVRUUntbZG1pL2lkXWJvYXJkX25hbWV9PT0iMzBCNyIKK1VzZSB0aGUgcmVnZXggZnJvbSBzeXN0ZW1kJ3Mgc2NyaXB0IHdoaWNoIGFsbG93IFtdIGNoYXJhY3RlcnMgYW5kIGFkZGl0aW9uYWwKK2NvbXBhcmUgb3BlcmF0b3JzCisKK1RoZSBNYWtlZmlsZSBwYXNzZXMgcnVsZXMtdGVzdC5zaCBzY3JpcHQgYSBidWlsZCBob3N0IHBhdGggdG8gdGhlIHRlc3RkYXRhLgorSWdub3JlIHRoZSBhcmd1bWVudCBhbmQgdXNlIGEgcmVsYXRpdmUgcGF0aCBpbnN0ZWFkLgorCisKK1NpZ25lZC1vZmYtYnk6IE1heCBLcnVtbWVuYWNoZXIgPG1heC5vc3MuMDlAZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIChjcm9zcyBlbnZpcm9ubWVudCBwYXRoKQorCitkaWZmIC1OYXVyIHVkZXYtMTgyLm9yaWcvc3JjL2tleW1hcC85NS1rZXltYXAucnVsZXMgdWRldi0xODIvc3JjL2tleW1hcC85NS1rZXltYXAucnVsZXMKKy0tLSB1ZGV2LTE4Mi5vcmlnL3NyYy9rZXltYXAvOTUta2V5bWFwLnJ1bGVzCTIwMTItMDItMDcgMDA6MDE6NTUuMTU0NjQwNzkyICswMTAwCisrKysgdWRldi0xODIvc3JjL2tleW1hcC85NS1rZXltYXAucnVsZXMJMjAxNS0wMS0yNCAyMDo1ODo0MC4xNTY5MzA1MjAgKzAxMDAKK0BAIC05NCw3ICs5NCw4IEBACisgRU5We0RNSV9WRU5ET1J9PT0iSGV3bGV0dC1QYWNrYXJkIiwgQVRUUntbZG1pL2lkXXByb2R1Y3RfbmFtZX09PSJIUCBHNjIgTm90ZWJvb2sgUEMiLCBSVU4rPSJrZXltYXAgJG5hbWUgMHhCMiB3d3ciCisgRU5We0RNSV9WRU5ET1J9PT0iSGV3bGV0dC1QYWNrYXJkIiwgQVRUUntbZG1pL2lkXXByb2R1Y3RfbmFtZX09PSJIUCBQcm9Cb29rKiIsIFJVTis9ImtleW1hcCAkbmFtZSAweEY4IHJma2lsbCIKKyAjIEhQIFBhdmlsbGlvbiBkdjYzMTVlYSBoYXMgZW1wdHkgRE1JX1ZFTkRPUgorLUFUVFJ7W2RtaS9pZF1ib2FyZF92ZW5kb3J9PT0iUXVhbnRhIiwgQVRUUntbZG1pL2lkXWJvYXJkX25hbWV9PT0iMzBCNyIsIEFUVFJ7W2RtaS9pZF1ib2FyZF92ZXJzaW9ufT09IjY1LjJCIiwgUlVOKz0ia2V5bWFwICRuYW1lIDB4ODggbWVkaWEiICMgInF1aWNrIHBsYXkKKysjICJxdWljayBwbGF5IgorK0FUVFJ7W2RtaS9pZF1ib2FyZF92ZW5kb3J9PT0iUXVhbnRhIiwgQVRUUntbZG1pL2lkXWJvYXJkX25hbWV9PT0iMzBCNyIsIEFUVFJ7W2RtaS9pZF1ib2FyZF92ZXJzaW9ufT09IjY1LjJCIiwgUlVOKz0ia2V5bWFwICRuYW1lIDB4ODggbWVkaWEiCisgCisgIyBHYXRld2F5IGNsb25lIG9mIEFjZXIgQXNwaXJlIE9uZSBBT0ExMTAvQU9BMTUwCisgRU5We0RNSV9WRU5ET1J9PT0iR2F0ZXdheSoiLCBBVFRSe1tkbWkvaWRdcHJvZHVjdF9uYW1lfT09IipBT0ExKiIsIFJVTis9ImtleW1hcCAkbmFtZSBhY2VyIgorZGlmZiAtTmF1ciB1ZGV2LTE4Mi5vcmlnL3Rlc3QvcnVsZS1zeW50YXgtY2hlY2sucHkgdWRldi0xODIvdGVzdC9ydWxlLXN5bnRheC1jaGVjay5weQorLS0tIHVkZXYtMTgyLm9yaWcvdGVzdC9ydWxlLXN5bnRheC1jaGVjay5weQkyMDEyLTAyLTE1IDIwOjEwOjEyLjg3MjMzMzM0MiArMDEwMAorKysrIHVkZXYtMTgyL3Rlc3QvcnVsZS1zeW50YXgtY2hlY2sucHkJMjAxNS0wMS0yNCAyMTowODowMC40OTYwNDk2MDAgKzAxMDAKK0BAIC0yOCw3ICsyOCw3IEBACisgbm9fYXJnc190ZXN0cyA9IHJlLmNvbXBpbGUoJyhBQ1RJT058REVWUEFUSHxLRVJORUxTP3xOQU1FfFNZTUxJTkt8U1VCU1lTVEVNUz98RFJJVkVSUz98VEFHfFJFU1VMVHxURVNUKVxzKig/Oj18ISk9XHMqIihbXiJdKikiJCcpCisgYXJnc190ZXN0cyA9IHJlLmNvbXBpbGUoJyhBVFRSUz98RU5WfFRFU1QpeyhbYS16QS1aMC05L18uKiUtXSspfVxzKig/Oj18ISk9XHMqIihbXiJdKikiJCcpCisgbm9fYXJnc19hc3NpZ24gPSByZS5jb21waWxlKCcoTkFNRXxTWU1MSU5LfE9XTkVSfEdST1VQfE1PREV8VEFHfFBST0dSQU18UlVOfExBQkVMfEdPVE98V0FJVF9GT1J8T1BUSU9OU3xJTVBPUlQpXHMqKD86XCs9fDo9fD0pXHMqIihbXiJdKikiJCcpCistYXJnc19hc3NpZ24gPSByZS5jb21waWxlKCcoQVRUUnxFTlZ8SU1QT1JUKXsoW2EtekEtWjAtOS9fLiolLV0rKX1ccyo9XHMqIihbXiJdKikiJCcpCisrYXJnc19hc3NpZ24gPSByZS5jb21waWxlKCcoQVRUUnxFTlZ8SU1QT1JUfFJVTil7KFtdW2EtekEtWjAtOS9fLiolLV0rKX1ccyooPXw9PXxcKz0pXHMqIihbXiJdKikiJCcpCisgCisgcmVzdWx0ID0gMAorIGJ1ZmZlciA9ICcnCistLS0gdWRldi0xODIub3JpZy90ZXN0L3J1bGVzLXRlc3Quc2gJMjAxMi0wMS0yOSAwMToxNTo0Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyB1ZGV2LTE4Mi90ZXN0L3J1bGVzLXRlc3Quc2gJMjAxNS0wMS0yNCAxNzo1Mzo1MS4yMDE4NTg2NTggKzAxMDAKK0BAIC00LDcgKzQsNyBAQAorICMgKEMpIDIwMTAgQ2Fub25pY2FsIEx0ZC4KKyAjIEF1dGhvcjogTWFydGluIFBpdHQgPG1hcnRpbi5waXR0QHVidW50dS5jb20+CisgCistWyAtbiAiJHNyY2RpciIgXSB8fCBzcmNkaXI9YGRpcm5hbWUgJDBgLy4uCisrc3JjZGlyPWBkaXJuYW1lICQwYC8uLgorIAorICMgc2tpcCBpZiB3ZSBkb24ndCBoYXZlIHB5dGhvbgorIHR5cGUgcHl0aG9uID4vZGV2L251bGwgMj4mMSB8fCB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9pbml0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWIwMjhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvaW5pdApAQCAtMCwwICsxLDE0MiBAQAorIyEvYmluL3NoCisKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHVkZXYKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgIG1vdW50dmlydGZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogU3RhcnQgdWRldmQsIHBvcHVsYXRlIC9kZXYgYW5kIGxvYWQgZHJpdmVycy4KKyMjIyBFTkQgSU5JVCBJTkZPCisKK2V4cG9ydCBUWj0vZXRjL2xvY2FsdGltZQorCitbIC1kIC9zeXMvY2xhc3MgXSB8fCBleGl0IDEKK1sgLXIgL3Byb2MvbW91bnRzIF0gfHwgZXhpdCAxCitbIC14IEBVREVWREAgXSB8fCBleGl0IDEKK1NZU0NPTkZfQ0FDSEVEPSIvZXRjL3VkZXYvY2FjaGUuZGF0YSIKK1NZU0NPTkZfVE1QPSIvZGV2L3NobS91ZGV2LmNhY2hlIgorREVWQ0FDSEVfUkVHRU49Ii9kZXYvc2htL3VkZXYtcmVnZW4iICMgY3JlYXRlIHRvIHJlcXVlc3QgY2FjaGUgcmVnZW4KKworIyBBIGxpc3Qgb2YgZmlsZXMgd2hpY2ggYXJlIHVzZWQgYXMgYSBjcml0ZXJpYSB0byBqdWRnZSB3aGV0aGVyIHRoZSB1ZGV2IGNhY2hlIGNvdWxkIGJlIHJldXNlZC4KK0NNUF9GSUxFX0xJU1Q9Ii9wcm9jL3ZlcnNpb24gL3Byb2MvY21kbGluZSAvcHJvYy9kZXZpY2VzIgorWyAtZiAvcHJvYy9hdGFncyBdICYmIENNUF9GSUxFX0xJU1Q9IiRDTVBfRklMRV9MSVNUIC9wcm9jL2F0YWdzIgorCisjIExpc3Qgb2YgZmlsZXMgd2hvc2UgbWV0YWRhdGEgKHNpemUvbXRpbWUvbmFtZSkgd2lsbCBiZSBpbmNsdWRlZCBpbiBjYWNoZWQKKyMgc3lzdGVtIHN0YXRlLgorTUVUQV9GSUxFX0xJU1Q9ImxpYi91ZGV2L3J1bGVzLmQvKiBldGMvdWRldi9ydWxlcy5kLyoiCisKKyMgQ29tbWFuZCB0byBjb21wdXRlIHN5c3RlbSBjb25maWd1cmF0aW9uLgorc3lzY29uZl9jbWQgKCkgeworCWNhdCAtLSAkQ01QX0ZJTEVfTElTVAorCXN0YXQgLWMgJyVzICVZICVuJyAtLSAkTUVUQV9GSUxFX0xJU1QgfCBhd2sgLUYvICd7cHJpbnQgJDEgIiAiICRORjt9JworfQorCitbIC1mIC9ldGMvZGVmYXVsdC91ZGV2LWNhY2hlIF0gJiYgLiAvZXRjL2RlZmF1bHQvdWRldi1jYWNoZQorWyAtZiAvZXRjL3VkZXYvdWRldi5jb25mIF0gJiYgLiAvZXRjL3VkZXYvdWRldi5jb25mCitbIC1mIC9ldGMvZGVmYXVsdC9yY1MgXSAmJiAuIC9ldGMvZGVmYXVsdC9yY1MKKwora2lsbF91ZGV2ZCAoKSB7CisgICAgcGlkPWBwaWRvZiAteCB1ZGV2ZGAKKyAgICBbIC1uICIkcGlkIiBdICYmIGtpbGwgJHBpZAorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgZXhwb3J0IEFDVElPTj1hZGQKKyAgICAjIHByb3BhZ2F0ZSAvZGV2IGZyb20gL3N5cworICAgIGVjaG8gIlN0YXJ0aW5nIHVkZXYiCisKKyAgICAjIENoZWNrIGZvciByZXF1aXJlZWQgZGV2dG1wZnMgYmVmb3JlIHRyeWluZyB0byBzdGFydCB1ZGV2IGFuZAorICAgICMgbW91bnQgYSBuby1leGlzdGFudCBmcy4KKyAgICBpZiAhIGdyZXAgLXEgZGV2dG1wZnMgL3Byb2MvZmlsZXN5c3RlbXMKKyAgICB0aGVuCisgICAgICAgIGVjaG8gIk1pc3NpbmcgZGV2dG1wZnMsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciB1ZGV2IHRvIHJ1biI7CisgICAgICAgIGVjaG8gIkhhbHRpbmcuLi4iCisgICAgICAgIGhhbHQKKyAgICBmaQorICAgICMgbW91bnQgdGhlIGRldnRtcGZzIG9uIC9kZXYsIGlmIG5vdCBhbHJlYWR5IGRvbmUKKyAgICBMQU5HPUMgYXdrICckMiA9PSAiL2RldiIgJiYgKCQzID09ICJkZXZ0bXBmcyIpIHsgZXhpdCAxIH0nIC9wcm9jL21vdW50cyAmJiB7CisgICAgICAgICAgICBtb3VudCAtbiAtbyBtb2RlPTA3NTUgLXQgZGV2dG1wZnMgbm9uZSAiL2RldiIKKyAgICB9CisgICAgWyAtZSAvZGV2L3B0cyBdIHx8IG1rZGlyIC1tIDA3NTUgL2Rldi9wdHMKKyAgICBbIC1lIC9kZXYvc2htIF0gfHwgbWtkaXIgLW0gMTc3NyAvZGV2L3NobQorICAgICMgdGhlIGF1dG9tb3VudCBydWxlIGZvciB1ZGV2IG5lZWRzIC90bXAgZGlyZWN0b3J5IGF2YWlsYWJsZSwgYXMgL3RtcCBpcyBhIHN5bWxpbmsKKyAgICAjIHRvIC92YXIvdG1wIHdoaWNoIGluIHR1cm4gaXMgYSBzeW1saW5rIHRvIC92YXIvdm9sYXRpbGUvdG1wLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZQorICAgICMgL3Zhci92b2xhdGlsZS90bXAgZGlyZWN0b3J5IHRvIGJlIGF2YWlsYWJsZS4KKyAgICBta2RpciAtbSAxNzc3IC1wIC92YXIvdm9sYXRpbGUvdG1wCisKKyAgICAjIENhY2hlIGhhbmRsaW5nLgorICAgIGlmIFsgIiRERVZDQUNIRSIgIT0gIiIgXTsgdGhlbgorICAgICAgICAgICAgaWYgWyAtZSAkREVWQ0FDSEUgXTsgdGhlbgorCQkgICAgc3lzY29uZl9jbWQgPiAiJFNZU0NPTkZfVE1QIgorCQkgICAgaWYgY21wICRTWVNDT05GX0NBQ0hFRCAkU1lTQ09ORl9UTVAgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhciB4bWYgJERFVkNBQ0hFIC1DIC8gLW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RfZmlyc3RfYm9vdD0xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAiJFZFUkJPU0UiICE9ICJubyIgXSAmJiBlY2hvICJ1ZGV2OiB1c2luZyBjYWNoZSBmaWxlICRERVZDQUNIRSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIC1lICRTWVNDT05GX1RNUCBdICYmIHJtIC1mICIkU1lTQ09ORl9UTVAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAtZSAiJERFVkNBQ0hFX1JFR0VOIiBdICYmIHJtIC1mICIkREVWQ0FDSEVfUkVHRU4iCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKwkJCSAgICAjIE91dHB1dCBkZXRhaWxlZCByZWFzb24gd2h5IHRoZSBjYWNoZWQgL2RldiBpcyBub3QgdXNlZAorCQkJICAgIGNhdCA8PEVPRgordWRldjogTm90IHVzaW5nIHVkZXYgY2FjaGUgYmVjYXVzZSBvZiBjaGFuZ2VzIGRldGVjdGVkIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6Cit1ZGV2OiAgICAgJENNUF9GSUxFX0xJU1QKK3VkZXY6ICAgICAkTUVUQV9GSUxFX0xJU1QKK3VkZXY6IFRoZSB1ZGV2IGNhY2hlIHdpbGwgYmUgcmVnZW5lcmF0ZWQuIFRvIGlkZW50aWZ5IHRoZSBkZXRlY3RlZCBjaGFuZ2VzLAordWRldjogY29tcGFyZSB0aGUgY2FjaGVkIHN5c2NvbmYgYXQgICAkU1lTQ09ORl9DQUNIRUQKK3VkZXY6IGFnYWluc3QgdGhlIGN1cnJlbnQgc3lzY29uZiBhdCAgJFNZU0NPTkZfVE1QCitFT0YKKwkJCSAgICB0b3VjaCAiJERFVkNBQ0hFX1JFR0VOIgorICAgICAgICAgICAgICAgICAgICBmaQorCSAgICBlbHNlCisJCSAgICBpZiBbICIkUk9PVEZTX1JFQURfT05MWSIgIT0gInllcyIgXTsgdGhlbgorCQkJICAgICMgSWYgcm9vdGZzIGlzIG5vdCByZWFkLW9ubHksIGl0J3MgcG9zc2libGUgdGhhdCBhIG5ldyB1ZGV2IGNhY2hlIHdvdWxkIGJlIGdlbmVyYXRlZDsKKwkJCSAgICAjIG90aGVyd2lzZSwgd2UgZG8gbm90IGJvdGhlciB0byByZWFkIGZpbGVzLgorCQkJICAgIHRvdWNoICIkREVWQ0FDSEVfUkVHRU4iCisJCSAgICBmaQorICAgICAgICAgICAgZmkKKyAgICBmaQorCisgICAgIyBtYWtlX2V4dHJhX25vZGVzCisgICAga2lsbF91ZGV2ZCA+ICIvZGV2L251bGwiIDI+JjEKKworICAgICMgdHJpZ2dlciB0aGUgc29ydGVkIGV2ZW50cworICAgIFsgLWUgL3Byb2Mvc3lzL2tlcm5lbC9ob3RwbHVnIF0gJiYgZWNobyAtZSAnXDAwMCcgPi9wcm9jL3N5cy9rZXJuZWwvaG90cGx1ZworICAgIEBVREVWREAgLWQKKworICAgIHVkZXZhZG0gY29udHJvbCAtLWVudj1TVEFSVFVQPTEKKyAgICBpZiBbICIkbm90X2ZpcnN0X2Jvb3QiICE9ICIiIF07dGhlbgorICAgICAgICAgICAgaWYgWyAiJFBST0JFX1BMQVRGT1JNX0JVUyIgIT0gInllcyIgXTsgdGhlbgorICAgICAgICAgICAgICAgIFBMQVRGT1JNX0JVU19OT01BVENIPSItLXN1YnN5c3RlbS1ub21hdGNoPXBsYXRmb3JtIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFBMQVRGT1JNX0JVU19OT01BVENIPSIiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgdWRldmFkbSB0cmlnZ2VyIC0tYWN0aW9uPWFkZCAtLXN1YnN5c3RlbS1ub21hdGNoPXR0eSAtLXN1YnN5c3RlbS1ub21hdGNoPW1lbSAtLXN1YnN5c3RlbS1ub21hdGNoPXZjIC0tc3Vic3lzdGVtLW5vbWF0Y2g9dnRjb25zb2xlIC0tc3Vic3lzdGVtLW5vbWF0Y2g9bWlzYyAtLXN1YnN5c3RlbS1ub21hdGNoPWRjb24gLS1zdWJzeXN0ZW0tbm9tYXRjaD1wY2lfYnVzIC0tc3Vic3lzdGVtLW5vbWF0Y2g9Z3JhcGhpY3MgLS1zdWJzeXN0ZW0tbm9tYXRjaD1iYWNrbGlnaHQgLS1zdWJzeXN0ZW0tbm9tYXRjaD12aWRlbzRsaW51eCAkUExBVEZPUk1fQlVTX05PTUFUQ0gKKyAgICAgICAgICAgICh1ZGV2YWRtIHNldHRsZSAtLXRpbWVvdXQ9MzsgdWRldmFkbSBjb250cm9sIC0tZW52PVNUQVJUVVA9KSYKKyAgICBlbHNlCisgICAgICAgICAgICB1ZGV2YWRtIHRyaWdnZXIgLS1hY3Rpb249YWRkCisgICAgICAgICAgICB1ZGV2YWRtIHNldHRsZQorICAgIGZpCisgICAgOzsKKyAgc3RvcCkKKyAgICBlY2hvICJTdG9wcGluZyB1ZGV2ZCIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1uYW1lIHVkZXZkIC0tcXVpZXQKKyAgICA7OworICByZXN0YXJ0KQorICAgICQwIHN0b3AKKyAgICBzbGVlcCAxCisgICAgJDAgc3RhcnQKKyAgICA7OworICBzdGF0dXMpCisgICAgcGlkPWBwaWRvZiAteCB1ZGV2ZGAKKyAgICBpZiBbIC1uICIkcGlkIiBdOyB0aGVuCisJZWNobyAidWRldmQgKHBpZCAkcGlkKSBpcyBydW5uaW5nIC4uLiIKKyAgICBlbHNlCisJZWNobyAidWRldmQgaXMgc3RvcHBlZCIKKyAgICBmaQorICAgIDs7CisgICopCisgICAgZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fSIKKyAgICBleGl0IDEKK2VzYWMKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvbGlua3MuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2xpbmtzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZmZjkyMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2xpbmtzLmNvbmYKQEAgLTAsMCArMSwyMSBAQAorIyBUaGlzIGZpbGUgZG9lcyBub3QgZXhpc3QuIFBsZWFzZSBkbyBub3QgYXNrIHRoZSBkZWJpYW4gbWFpbnRhaW5lciBhYm91dCBpdC4KKyMgWW91IG1heSB1c2UgaXQgdG8gZG8gc3RyYW5nZSBhbmQgd29uZGVyZnVsIHRoaW5ncywgYXQgeW91ciByaXNrLgorCitMIGZkCQkvcHJvYy9zZWxmL2ZkCitMIHN0ZGluCQkvcHJvYy9zZWxmL2ZkLzAKK0wgc3Rkb3V0CS9wcm9jL3NlbGYvZmQvMQorTCBzdGRlcnIJL3Byb2Mvc2VsZi9mZC8yCitMIGNvcmUJCS9wcm9jL2tjb3JlCitMIHNuZHN0YXQJL3Byb2MvYXNvdW5kL29zcy9zbmRzdGF0CitMIE1BS0VERVYJL3NiaW4vTUFLRURFVgorCitEIHB0cworRCBzaG0KKworIyBIaWMgc3VudCBsZW9uZXMuCitNIHBwcAkJYyAxMDggMAorRCBsb29wCitNIGxvb3AvMAliIDcgMAorRCBuZXQKK00gbmV0L3R1bgljIDEwIDIwMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9sb2NhbC5ydWxlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2xvY2FsLnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MDJjZGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9sb2NhbC5ydWxlcwpAQCAtMCwwICsxLDE5IEBACisjIFRoZXJlIGFyZSBhIG51bWJlciBvZiBtb2RpZmllcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSB1c2VkIGluIHNvbWUKKyMgb2YgdGhlIGRpZmZlcmVudCBmaWVsZHMuIFRoZXkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIHN1YnNpdHV0aW9uczoKKyMKKyMgJW4gdGhlICJrZXJuZWwgbnVtYmVyIiBvZiB0aGUgZGV2aWNlLgorIyAgICBGb3IgZXhhbXBsZSwgJ3NkYTMnIGhhcyBhICJrZXJuZWwgbnVtYmVyIiBvZiAnMycKKyMgJWUgdGhlIHNtYWxsZXN0IG51bWJlciBmb3IgdGhhdCBuYW1lIHdoaWNoIGRvZXMgbm90IG1hdGNoZXMgYW4gZXhpc3Rpbmcgbm9kZQorIyAlayB0aGUga2VybmVsIG5hbWUgZm9yIHRoZSBkZXZpY2UKKyMgJU0gdGhlIGtlcm5lbCBtYWpvciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJW0gdGhlIGtlcm5lbCBtaW5vciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJWIgdGhlIGJ1cyBpZCBmb3IgdGhlIGRldmljZQorIyAlYyB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoZSBQUk9HUkFNCisjICVze2ZpbGVuYW1lfSB0aGUgY29udGVudCBvZiBhIHN5c2ZzIGF0dHJpYnV0ZQorIyAlJSB0aGUgJyUnIGNoYXIgaXRzZWxmCisjCisKKyMgQ3JlYXRlIGEgc3ltbGluayB0byBhbnkgdG91Y2hzY3JlZW4gaW5wdXQgZGV2aWNlCisjIFRyaWdnZXIgYmFzZWQgb24gaW5wdXQgdHlwZSwgdGhhdCB0aGUgZXZiaXQgKC1lKSBoYXMgRVZfU1lOIGFuZCBFVl9BQlMsCisjIGhhcyBhbiBFVl9BQlMgdmFsdWUgKC1hKSB3aGljaCBpcyB1c2VkIGZvciB0b3VjaHNjcmVlbiB0eXBlIGRldmljZXMuCitTVUJTWVNURU09PSJpbnB1dCIsIEtFUk5FTD09ImV2ZW50WzAtOV0qIiwgRU5We0lEX0lOUFVUX1RPVUNIU0NSRUVOfT09IjEiLCBTWU1MSU5LKz0iaW5wdXQvdG91Y2hzY3JlZW4wIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvcGVybWlzc2lvbnMucnVsZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9wZXJtaXNzaW9ucy5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDViNzMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvcGVybWlzc2lvbnMucnVsZXMKQEAgLTAsMCArMSwxMzEgQEAKK0FDVElPTiE9ImFkZCIsIEdPVE89InBlcm1pc3Npb25zX2VuZCIKKworIyB3b3JrYXJvdW5kcyBuZWVkZWQgdG8gc3luY2hyb25pemUgd2l0aCBzeXNmcworIyBvbmx5IG5lZWRlZCBmb3Iga2VybmVscyA8IHYyLjYuMTgtcmMxCitFTlZ7UEhZU0RFVlBBVEh9IT0iPyoiLCBFTlZ7UEhZU0RFVkJVU309PSI/KiIsCVdBSVRfRk9SX1NZU0ZTPSJidXMiCitTVUJTWVNURU09PSJzY3NpIiwgS0VSTkVMPT0iWzAtOV0qOlswLTldKiIsCVdBSVRfRk9SX1NZU0ZTPSJpb2Vycl9jbnQiCisjIG9ubHkgbmVlZGVkIGZvciBrZXJuZWxzIDwgMi42LjE2CitTVUJTWVNURU09PSJuZXQiLAkJCQlXQUlUX0ZPUl9TWVNGUz0iYWRkcmVzcyIKKyMgb25seSBuZWVkZWQgZm9yIGtlcm5lbHMgPCAyLjYuMTcKK1NVQlNZU1RFTT09Im5ldCIsIEVOVntEUklWRVJ9PT0iPyoiLAkJV0FJVF9GT1JfU1lTRlM9ImRldmljZS9kcml2ZXIiCisKKyMgZGV2aWNlcyBuZWVkZWQgdG8gbG9hZCB0aGUgZHJpdmVycyBwcm92aWRpbmcgdGhlbQorS0VSTkVMPT0idHVuIiwJCQkJCU9QVElPTlMrPSJpZ25vcmVfcmVtb3ZlIgorS0VSTkVMPT0icHBwIiwJCQkJCU9QVElPTlMrPSJpZ25vcmVfcmVtb3ZlIgorS0VSTkVMPT0ibG9vcFswLTldKiIsCQkJCU9QVElPTlMrPSJpZ25vcmVfcmVtb3ZlIgorCisjIGRlZmF1bHQgcGVybWlzc2lvbnMgZm9yIGJsb2NrIGRldmljZXMKK1NVQlNZU1RFTT09ImJsb2NrIiwJCQkJR1JPVVA9ImRpc2siCisjIHRoZSBhYWNyYWlkIGRyaXZlciBpcyBicm9rZW4gYW5kIHJlcG9ydHMgdGhhdCBkaXNrcyByZW1vdmFibGUgKHNlZSAjNDA0OTI3KQorU1VCU1lTVEVNPT0iYmxvY2siLCBBVFRSU3tyZW1vdmFibGV9PT0iMSIsIFwKKwlEUklWRVJTIT0iYWFjcmFpZCIsCQkJR1JPVVA9ImZsb3BweSIKKyMgYWxsIGJsb2NrIGRldmljZXMgb24gdGhlc2UgYnVzZXMgYXJlICJyZW1vdmFibGUiCitTVUJTWVNURU09PSJibG9jayIsIFNVQlNZU1RFTVM9PSJ1c2J8aWVlZTEzOTR8bW1jfHBjbWNpYSIsIEdST1VQPSJmbG9wcHkiCisKKyMgSURFIGRldmljZXMKK0tFUk5FTD09ImhkW2Etel18cGNkWzAtOV0qIiwgCQkJRFJJVkVSUz09ImlkZS1jZHJvbXxwY2QiLCBcCisJSU1QT1JUe3Byb2dyYW19PSJjZHJvbV9pZCAtLWV4cG9ydCAkdGVtcG5vZGUiCitFTlZ7SURfQ0RST019PT0iPyoiLAkJCQlHUk9VUD0iY2Ryb20iCitLRVJORUw9PSJodFswLTldKiIsIAkJCQlHUk9VUD0idGFwZSIKK0tFUk5FTD09Im5odFswLTldKiIsIAkJCQlHUk9VUD0idGFwZSIKKworIyBTQ1NJIGRldmljZXMKK0tFUk5FTD09InNyWzAtOV0qIiwgSU1QT1JUe3Byb2dyYW19PSJjZHJvbV9pZCAtLWV4cG9ydCAkdGVtcG5vZGUiCitTVUJTWVNURU1TPT0ic2NzaSIsIEFUVFJTe3R5cGV9PT0iMSIsCQkJCUdST1VQPSJ0YXBlIgorU1VCU1lTVEVNUz09InNjc2kiLCBBVFRSU3t0eXBlfT09IjMiLCBBVFRSU3t2ZW5kb3J9PT0iSFAiLAlHUk9VUD0ic2Nhbm5lciIKK1NVQlNZU1RFTVM9PSJzY3NpIiwgQVRUUlN7dHlwZX09PSIzIiwgQVRUUlN7dmVuZG9yfT09IkVwc29uIiwJR1JPVVA9InNjYW5uZXIiCitTVUJTWVNURU1TPT0ic2NzaSIsIEFUVFJTe3R5cGV9PT0iMyIsIEFUVFJTe3ZlbmRvcn09PSJFUFNPTiIsCUdST1VQPSJzY2FubmVyIgorU1VCU1lTVEVNUz09InNjc2kiLCBBVFRSU3t0eXBlfT09IjQiLAkJCQlHUk9VUD0iY2Ryb20iCitTVUJTWVNURU1TPT0ic2NzaSIsIEFUVFJTe3R5cGV9PT0iNSIsCQkJCUdST1VQPSJjZHJvbSIKK1NVQlNZU1RFTVM9PSJzY3NpIiwgQVRUUlN7dHlwZX09PSI2IiwJCQkJR1JPVVA9InNjYW5uZXIiCitTVUJTWVNURU1TPT0ic2NzaSIsIEFUVFJTe3R5cGV9PT0iOCIsCQkJCUdST1VQPSJ0YXBlIgorCisjIFVTQiBkZXZpY2VzCitLRVJORUw9PSJsZWdvdXNidG93ZXIqIiwJTU9ERT0iMDY2NiIKK0tFUk5FTD09ImxwWzAtOV0qIiwgU1VCU1lTVEVNUz09InVzYiIsCQlHUk9VUD0ibHAiCisKKyMgdXNiZnMtbGlrZSBkZXZpY2VzCitTVUJTWVNURU09PSJ1c2IiLCBFTlZ7REVWVFlQRX09PSJ1c2JfZGV2aWNlIiwgXAorCQkJCU1PREU9IjA2NjQiCisKKyMgaVJpdmVyIG11c2ljIHBsYXllcnMKK1NVQlNZU1RFTT09InVzYiIsIEVOVntERVZUWVBFfT09InVzYl9kZXZpY2UiLAlHUk9VUD0icGx1Z2RldiIsIFwKKwlBVFRSU3tpZFZlbmRvcn09PSI0MTAyIiwgQVRUUlN7aWRQcm9kdWN0fT09IjEwWzAxXVsxMzU3ODldIgorCisjIHNlcmlhbCBkZXZpY2VzCitTVUJTWVNURU09PSJ0dHkiLAkJCQlHUk9VUD0iZGlhbG91dCIKK1NVQlNZU1RFTT09ImNhcGkiLAkJCQlHUk9VUD0iZGlhbG91dCIKK1NVQlNZU1RFTT09InNsYW1yIiwJCQkJR1JPVVA9ImRpYWxvdXQiCitTVUJTWVNURU09PSJ6YXB0ZWwiLAkJCQlHUk9VUD0iZGlhbG91dCIKKworIyB2YyBkZXZpY2VzIChhbGwgbWVtYmVycyBvZiB0aGUgdHR5IHN1YnN5c3RlbSkKK0tFUk5FTD09InB0bXgiLAkJCU1PREU9IjA2NjYiLAlHUk9VUD0icm9vdCIKK0tFUk5FTD09ImNvbnNvbGUiLAkJTU9ERT0iMDYwMCIsCUdST1VQPSJyb290IgorS0VSTkVMPT0idHR5IiwJCQlNT0RFPSIwNjY2IiwJR1JPVVA9InJvb3QiCitLRVJORUw9PSJ0dHlbMC05XSoiLAkJCQlHUk9VUD0icm9vdCIKK0tFUk5FTD09InB0eSoiLAkJCU1PREU9IjA2NjYiLAlHUk9VUD0idHR5IgorCisjIHZpZGVvIGRldmljZXMKK1NVQlNZU1RFTT09InZpZGVvNGxpbnV4IiwJCQlHUk9VUD0idmlkZW8iCitTVUJTWVNURU09PSJkcm0iLAkJCQlHUk9VUD0idmlkZW8iCitTVUJTWVNURU09PSJkdmIiLAkJCQlHUk9VUD0idmlkZW8iCitTVUJTWVNURU09PSJlbTgzMDAiLAkJCQlHUk9VUD0idmlkZW8iCitTVUJTWVNURU09PSJncmFwaGljcyIsCQkJCUdST1VQPSJ2aWRlbyIKK1NVQlNZU1RFTT09Im52aWRpYSIsCQkJCUdST1VQPSJ2aWRlbyIKKworIyBtaXNjIGRldmljZXMKK0tFUk5FTD09InJhbmRvbSIsCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0idXJhbmRvbSIsCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0ibWVtIiwJCQlNT0RFPSIwNjQwIiwJR1JPVVA9ImttZW0iCitLRVJORUw9PSJrbWVtIiwJCQlNT0RFPSIwNjQwIiwJR1JPVVA9ImttZW0iCitLRVJORUw9PSJwb3J0IiwJCQlNT0RFPSIwNjQwIiwJR1JPVVA9ImttZW0iCitLRVJORUw9PSJmdWxsIiwJCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0ibnVsbCIsCQkJTU9ERT0iMDY2NiIKK0tFUk5FTD09Inplcm8iLAkJCU1PREU9IjA2NjYiCitLRVJORUw9PSJpbm90aWZ5IiwJCU1PREU9IjA2NjYiCitLRVJORUw9PSJzZ2lfZmV0Y2hvcCIsCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0ic29ueXBpIiwJCU1PREU9IjA2NjYiCitLRVJORUw9PSJhZ3BnYXJ0IiwJCQkJR1JPVVA9InZpZGVvIgorS0VSTkVMPT0ibnZyYW0iLAkJCQlHUk9VUD0ibnZyYW0iCitLRVJORUw9PSJydGN8cnRjWzAtOV0qIiwJCQlHUk9VUD0iYXVkaW8iCitLRVJORUw9PSJ0cG0qIiwJCQlNT0RFPSIwNjAwIiwJT1dORVI9InRzcyIsIEdST1VQPSJ0c3MiCitLRVJORUw9PSJmdXNlIiwJCQkJCUdST1VQPSJmdXNlIgorS0VSTkVMPT0ia3FlbXUiLAkJTU9ERT0iMDY2NiIKK0tFUk5FTD09Imt2bSIsCQkJCQlHUk9VUD0ia3ZtIgorS0VSTkVMPT0idHVuIiwJCQlNT0RFPSIwNjY2IiwKKworS0VSTkVMPT0iY2RlbXVbMC05XSoiLAkJCQlHUk9VUD0iY2Ryb20iCitLRVJORUw9PSJwa3RjZHZkWzAtOV0qIiwJCQlHUk9VUD0iY2Ryb20iCitLRVJORUw9PSJwa3RjZHZkIiwJCU1PREU9IjA2NDQiCisKK0tFUk5FTD09InV2ZXJicyoiLAkJCQlHUk9VUD0icmRtYSIKK0tFUk5FTD09InVjbSoiLAkJCQkJR1JPVVA9InJkbWEiCitLRVJORUw9PSJyZG1hX3VjbSIsCQkJCUdST1VQPSJyZG1hIgorCisjIHByaW50ZXJzIGFuZCBwYXJhbGxlbCBkZXZpY2VzCitTVUJTWVNURU09PSJwcmludGVyIiwJCQkJR1JPVVA9ImxwIgorU1VCU1lTVEVNPT0icHBkZXYiLAkJCQlHUk9VUD0ibHAiCitLRVJORUw9PSJpcmxwdCoiLAkJCQlHUk9VUD0ibHAiCitLRVJORUw9PSJwdFswLTldKiIsCQkJCUdST1VQPSJ0YXBlIgorS0VSTkVMPT0icGh0WzAtOV0qIiwJCQkJR1JPVVA9InRhcGUiCisKKyMgc291bmQgZGV2aWNlcworU1VCU1lTVEVNPT0ic291bmQiLAkJCQlHUk9VUD0iYXVkaW8iCisKKyMgaWVlZTEzOTQgZGV2aWNlcyAgICAgICAKK0tFUk5FTD09InJhdzEzOTQiLAkJCQlHUk9VUD0iZGlzayIKK0tFUk5FTD09ImR2MTM5NCoiLAkJCQlHUk9VUD0idmlkZW8iCitLRVJORUw9PSJ2aWRlbzEzOTQqIiwJCQkJR1JPVVA9InZpZGVvIgorCisjIGlucHV0IGRldmljZXMKK0tFUk5FTD09ImV2ZW50WzAtOV0qIiwgQVRUUlN7bmFtZX09PSIqZHZiKnwqRFZCKnwqIElSICoiIFwKKwkJCQlNT0RFPSIwNjY0IiwJR1JPVVA9InZpZGVvIgorS0VSTkVMPT0ianNbMC05XSoiLAkJTU9ERT0iMDY2NCIKK0tFUk5FTD09ImxpcmNbMC05XSoiLAkJCQlHUk9VUD0idmlkZW8iCisKKyMgQU9FIGNoYXJhY3RlciBkZXZpY2VzCitTVUJTWVNURU09PSJhb2UiLAkJTU9ERT0iMDIyMCIsCUdST1VQPSJkaXNrIgorU1VCU1lTVEVNPT0iYW9lIiwgS0VSTkVMPT0iZXJyIiwgTU9ERT0iMDQ0MCIKKworTEFCRUw9InBlcm1pc3Npb25zX2VuZCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMzk4MDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9ydW4tcHRlc3QKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKwordGFyIC1DIHRlc3QvIC14SmYgdGVzdC9zeXMudGFyLnh6CittYWtlIC1rIGNoZWNrLVRFU1RTCittYWtlIHRlc3Qtc3lzLWRpc3RjbGVhbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvcnVuLnJ1bGVzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvcnVuLnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDcxMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9ydW4ucnVsZXMKQEAgLTAsMCArMSwxNCBAQAorIyBkZWJ1Z2dpbmcgbW9uaXRvcgorUlVOKz0ic29ja2V0Oi9vcmcva2VybmVsL3VkZXYvbW9uaXRvciIKKworIyBydW4gYSBjb21tYW5kIG9uIHJlbW92ZSBldmVudHMKK0FDVElPTj09InJlbW92ZSIsIEVOVntSRU1PVkVfQ01EfSE9IiIsIFJVTis9IiRlbnZ7UkVNT1ZFX0NNRH0iCisKKyMgaWdub3JlIHRoZSBldmVudHMgZ2VuZXJhdGVkIGJ5IHZpcnR1YWwgY29uc29sZXMKK0tFUk5FTD09InB0bXgiLAkJT1BUSU9OUys9Imxhc3RfcnVsZSIKK0tFUk5FTD09ImNvbnNvbGUiLAlPUFRJT05TKz0ibGFzdF9ydWxlIgorS0VSTkVMPT0idHR5IgksCU9QVElPTlMrPSJsYXN0X3J1bGUiCitLRVJORUw9PSJ0dHlbMC05XSoiLAlPUFRJT05TKz0ibGFzdF9ydWxlIgorS0VSTkVMPT0icHR5KiIsCQlPUFRJT05TKz0ibGFzdF9ydWxlIgorU1VCU1lTVEVNPT0idmMiLAlPUFRJT05TKz0ibGFzdF9ydWxlIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi91ZGV2LWNhY2hlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvdWRldi1jYWNoZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2ZmZjFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvdWRldi1jYWNoZQpAQCAtMCwwICsxLDc1IEBACisjIS9iaW4vc2ggLWUKKworIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdWRldi1jYWNoZQorIyBSZXF1aXJlZC1TdGFydDogICAgbW91bnRhbGwKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogY2FjaGUgL2RldiB0byBzcGVlZHVwIHRoZSB1ZGV2IG5leHQgYm9vdAorIyMjIEVORCBJTklUIElORk8KKworZXhwb3J0IFRaPS9ldGMvbG9jYWx0aW1lCisKK1sgLXIgL3Byb2MvbW91bnRzIF0gfHwgZXhpdCAxCitbIC14IEBVREVWREAgXSB8fCBleGl0IDEKK1sgLWQgL3N5cy9jbGFzcyBdIHx8IGV4aXQgMQorCitbIC1mIC9ldGMvZGVmYXVsdC9yY1MgXSAmJiAuIC9ldGMvZGVmYXVsdC9yY1MKK0RFVkNBQ0hFX1RNUD0iL2Rldi9zaG0vdWRldi1jYWNoZS10bXAudGFyIgorU1lTQ09ORl9DQUNIRUQ9Ii9ldGMvdWRldi9jYWNoZS5kYXRhIgorU1lTQ09ORl9UTVA9Ii9kZXYvc2htL3VkZXYuY2FjaGUiCitERVZDQUNIRV9SRUdFTj0iL2Rldi9zaG0vdWRldi1yZWdlbiIgIyBjcmVhdGUgdG8gcmVxdWVzdCBjYWNoZSByZWdlbgorCisjIEEgbGlzdCBvZiBmaWxlcyB3aGljaCBhcmUgdXNlZCBhcyBhIGNyaXRlcmlhIHRvIGp1ZGdlIHdoZXRoZXIgdGhlIHVkZXYgY2FjaGUgY291bGQgYmUgcmV1c2VkLgorQ01QX0ZJTEVfTElTVD0iL3Byb2MvdmVyc2lvbiAvcHJvYy9jbWRsaW5lIC9wcm9jL2RldmljZXMiCitbIC1mIC9wcm9jL2F0YWdzIF0gJiYgQ01QX0ZJTEVfTElTVD0iJENNUF9GSUxFX0xJU1QgL3Byb2MvYXRhZ3MiCisKKyMgTGlzdCBvZiBmaWxlcyB3aG9zZSBtZXRhZGF0YSAoc2l6ZS9tdGltZS9uYW1lKSB3aWxsIGJlIGluY2x1ZGVkIGluIGNhY2hlZAorIyBzeXN0ZW0gc3RhdGUuCitNRVRBX0ZJTEVfTElTVD0ibGliL3VkZXYvcnVsZXMuZC8qIGV0Yy91ZGV2L3J1bGVzLmQvKiIKKworIyBDb21tYW5kIHRvIGNvbXB1dGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uCitzeXNjb25mX2NtZCAoKSB7CisJY2F0IC0tICRDTVBfRklMRV9MSVNUCisJc3RhdCAtYyAnJXMgJVkgJW4nIC0tICRNRVRBX0ZJTEVfTElTVCB8IGF3ayAtRi8gJ3twcmludCAkMSAiICIgJE5GO30nCit9CisKK1sgLWYgL2V0Yy9kZWZhdWx0L3VkZXYtY2FjaGUgXSAmJiAuIC9ldGMvZGVmYXVsdC91ZGV2LWNhY2hlCisKK2lmIFsgIiRST09URlNfUkVBRF9PTkxZIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICBbICIkVkVSQk9TRSIgIT0gIm5vIiBdICYmIGVjaG8gInVkZXYtY2FjaGU6IHJlYWQtb25seSByb290ZnMsIHNraXAgZ2VuZXJhdGluZyB1ZGV2LWNhY2hlIgorICAgIGV4aXQgMAorZmkKKworWyAiJERFVkNBQ0hFIiAhPSAiIiBdIHx8IGV4aXQgMAorWyAiJHtWRVJCT1NFfSIgPT0gIm5vIiBdIHx8IGVjaG8gLW4gInVkZXYtY2FjaGU6IGNoZWNraW5nIGZvciAke0RFVkNBQ0hFX1JFR0VOfS4uLiAiCitpZiAhIFsgLWUgIiRERVZDQUNIRV9SRUdFTiIgXTsgdGhlbgorCVsgIiR7VkVSQk9TRX0iID09ICJubyIgXSB8fCBlY2hvICJub3QgZm91bmQuIgorCWV4aXQgMAorZmkKK1sgIiR7VkVSQk9TRX0iID09ICJubyIgXSB8fCBlY2hvICJmb3VuZC4iCitlY2hvICJQb3B1bGF0aW5nIGRldiBjYWNoZSIKKworZXJyX2NsZWFudXAgKCkgeworICAgICAgICBlY2hvICJ1ZGV2LWNhY2hlOiB1cGRhdGUgZmFpbGVkISIKKyAgICAgICAgdWRldmFkbSBjb250cm9sIC0tc3RhcnQtZXhlYy1xdWV1ZQorCXJtIC1mIC0tICIkU1lTQ09ORl9UTVAiICIkREVWQ0FDSEVfVE1QIiAiJERFVkNBQ0hFIiAiJFNZU0NPTkZfQ0FDSEVEIgorfQorCisoCisJc2V0IC1lCisJdHJhcCAnZXJyX2NsZWFudXAnIEVYSVQKKwl1ZGV2YWRtIGNvbnRyb2wgLS1zdG9wLWV4ZWMtcXVldWUKKwlzeXNjb25mX2NtZCA+ICIkU1lTQ09ORl9UTVAiCisJZmluZCAvZGV2IC14ZGV2IFwoIC10eXBlIGIgLW8gLXR5cGUgYyAtbyAtdHlwZSBsIFwpIHwgY3V0IC1jIDItIFwKKwkJfCB4YXJncyB0YXIgY2YgIiR7REVWQ0FDSEVfVE1QfSIKKwlnemlwIDwgIiR7REVWQ0FDSEVfVE1QfSIgPiAiJERFVkNBQ0hFIgorCXJtIC1mICIke0RFVkNBQ0hFX1RNUH0iCisJbXYgIiRTWVNDT05GX1RNUCIgIiRTWVNDT05GX0NBQ0hFRCIKKwl1ZGV2YWRtIGNvbnRyb2wgLS1zdGFydC1leGVjLXF1ZXVlCisJcm0gLWYgIiRERVZDQUNIRV9SRUdFTiIKKwl0cmFwIC0gRVhJVAorKSAmCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvdWRldi1jYWNoZS5kZWZhdWx0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvdWRldi1jYWNoZS5kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYjczMjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi91ZGV2LWNhY2hlLmRlZmF1bHQKQEAgLTAsMCArMSw1IEBACisjIERlZmF1bHQgZm9yIC9ldGMvaW5pdC5kL3VkZXYKKworIyBDb21tZW50IHRoaXMgb3V0IHRvIGRpc2FibGUgZGV2aWNlIGNhY2hlCitERVZDQUNIRT0iL2V0Yy91ZGV2LWNhY2hlLnRhci5neiIKK1BST0JFX1BMQVRGT1JNX0JVUz0ieWVzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvdWRldi5ydWxlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYucnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE5ZDRhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYucnVsZXMKQEAgLTAsMCArMSwxMTYgQEAKKyMgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG1vZGlmaWVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHVzZWQgaW4gc29tZQorIyBvZiB0aGUgZGlmZmVyZW50IGZpZWxkcy4gVGhleSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgc3Vic2l0dXRpb25zOgorIworIyAlbiB0aGUgImtlcm5lbCBudW1iZXIiIG9mIHRoZSBkZXZpY2UuCisjICAgIEZvciBleGFtcGxlLCAnc2RhMycgaGFzIGEgImtlcm5lbCBudW1iZXIiIG9mICczJworIyAlZSB0aGUgc21hbGxlc3QgbnVtYmVyIGZvciB0aGF0IG5hbWUgd2hpY2ggZG9lcyBub3QgbWF0Y2hlcyBhbiBleGlzdGluZyBub2RlCisjICVrIHRoZSBrZXJuZWwgbmFtZSBmb3IgdGhlIGRldmljZQorIyAlTSB0aGUga2VybmVsIG1ham9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlbSB0aGUga2VybmVsIG1pbm9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlYiB0aGUgYnVzIGlkIGZvciB0aGUgZGV2aWNlCisjICVjIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdGhlIFBST0dSQU0KKyMgJXN7ZmlsZW5hbWV9IHRoZSBjb250ZW50IG9mIGEgc3lzZnMgYXR0cmlidXRlCisjICUlIHRoZSAnJScgY2hhciBpdHNlbGYKKyMKKworIyB3b3JrYXJvdW5kIGZvciBkZXZpY2VzIHdoaWNoIGRvIG5vdCByZXBvcnQgbWVkaWEgY2hhbmdlcworU1VCU1lTVEVNUz09ImlkZSIsIEtFUk5FTD09ImhkW2Etel0iLCBBVFRSe3JlbW92YWJsZX09PSIxIiwgXAorCUVOVntJRF9NT0RFTH09PSJJT01FR0FfWklQKiIsCU5BTUU9IiVrIiwgT1BUSU9OUys9ImFsbF9wYXJ0aXRpb25zIgorU1VCU1lTVEVNUz09ImlkZSIsIEtFUk5FTD09ImhkW2Etel0iLCBBVFRSU3ttZWRpYX09PSJmbG9wcHkiLCBcCisJT1BUSU9OUys9ImFsbF9wYXJ0aXRpb25zIgorCisjIFNDU0kgZGV2aWNlcworU1VCU1lTVEVNUz09InNjc2kiLCBLRVJORUw9PSJzclswLTldKiIsCU5BTUU9InNjZCVuIiwgU1lNTElOSys9InNyJW4iCisKKyMgVVNCIGRldmljZXMKK1NVQlNZU1RFTVM9PSJ1c2IiLCBLRVJORUw9PSJhdWVyWzAtOV0qIiwJTkFNRT0idXNiLyVrIgorU1VCU1lTVEVNUz09InVzYiIsIEtFUk5FTD09ImNwYWRbMC05XSoiLAlOQU1FPSJ1c2IvJWsiCitTVUJTWVNURU1TPT0idXNiIiwgS0VSTkVMPT0iZGFidXNiKiIsCQlOQU1FPSJ1c2IvJWsiCitTVUJTWVNURU1TPT0idXNiIiwgS0VSTkVMPT0iaGlkZGV2KiIsCQlOQU1FPSJ1c2IvJWsiCitTVUJTWVNURU1TPT0idXNiIiwgS0VSTkVMPT0ibGVnb3VzYnRvd2VyKiIsCU5BTUU9InVzYi8layIKK1NVQlNZU1RFTVM9PSJ1c2IiLCBLRVJORUw9PSJscFswLTldKiIsCQlOQU1FPSJ1c2IvJWsiCitTVUJTWVNURU1TPT0idXNiIiwgS0VSTkVMPT0idHR5VVNCKiIsIFwKKwlBVFRSU3twcm9kdWN0fT09IlBhbG0gSGFuZGhlbGQqfEhhbmRzcHJpbmcgVmlzb3J8cGFsbU9uZSBIYW5kaGVsZCIsIFwKKwkJCQkJU1lNTElOSys9InBpbG90IgorCisjIHVzYmZzLWxpa2UgZGV2aWNlcworU1VCU1lTVEVNPT0idXNiX2RldmljZSIsCVBST0dSQU09Ii9iaW4vc2ggLWMgJ0s9JWs7IEs9JCR7SyN1c2JkZXZ9OyBwcmludGYgYnVzL3VzYi8lJTAzaS8lJTAzaSAkJHtLJSUlJS4qfSAkJHtLIyoufSciLCBBQ1RJT049PSJhZGQiLCBcCisJCQkJTkFNRT0iJWMiCitTVUJTWVNURU09PSJ1c2IiLCBFTlZ7REVWVFlQRX09PSJ1c2JfZGV2aWNlIiwJTkFNRT0iYnVzL3VzYi8kZW52e0JVU05VTX0vJGVudntERVZOVU19IgorCisjIHNlcmlhbCBkZXZpY2VzCitLRVJORUw9PSJjYXBpIiwJCQlOQU1FPSJjYXBpMjAiLCBTWU1MSU5LKz0iaXNkbi9jYXBpMjAiCitLRVJORUw9PSJjYXBpWzAtOV0qIiwJCU5BTUU9ImNhcGkvJW4iCisKKyMgdmlkZW8gZGV2aWNlcworS0VSTkVMPT0iZHZiKiIsCQkJUFJPR1JBTT0iL2Jpbi9zaCAtYyAnSz0lazsgSz0kJHtLI2R2Yn07IHByaW50ZiBkdmIvYWRhcHRlciUlaS8lJXMgJCR7SyUlJSUuKn0gJCR7SyMqLn0iLCBBQ1RJT049PSJhZGQiLCBcCisJCQkJTkFNRT0iJWMiCitLRVJORUw9PSJjYXJkWzAtOV0qIiwJCU5BTUU9ImRyaS8layIKKworIyBtaXNjIGRldmljZXMKK0tFUk5FTD09Imh3X3JhbmRvbSIsCQlOQU1FPSJod3JuZyIKK0tFUk5FTD09InR1biIsCQkJTkFNRT0ibmV0LyVrIgorS0VSTkVMPT0iZXZ0Y2huIiwJCU5BTUU9Inhlbi8layIKKworS0VSTkVMPT0iY2RlbXVbMC05XSoiLAkJTkFNRT0iY2RlbXUvJW4iCitLRVJORUw9PSJwa3RjZHZkWzAtOV0qIiwJTkFNRT0icGt0Y2R2ZC8lbiIKK0tFUk5FTD09InBrdGNkdmQiLAkJTkFNRT0icGt0Y2R2ZC9jb250cm9sIgorCitLRVJORUw9PSJjcHVbMC05XSoiLAkJTkFNRT0iY3B1LyVuL2NwdWlkIgorS0VSTkVMPT0ibXNyWzAtOV0qIiwJCU5BTUU9ImNwdS8lbi9tc3IiCitLRVJORUw9PSJtaWNyb2NvZGUiLAkJTkFNRT0iY3B1L21pY3JvY29kZSIKKworS0VSTkVMPT0idW1hZCoiLAkJTkFNRT0iaW5maW5pYmFuZC8layIKK0tFUk5FTD09Imlzc20qIiwJCU5BTUU9ImluZmluaWJhbmQvJWsiCitLRVJORUw9PSJ1dmVyYnMqIiwJCU5BTUU9ImluZmluaWJhbmQvJWsiCitLRVJORUw9PSJ1Y20qIiwJCQlOQU1FPSJpbmZpbmliYW5kLyVrIgorS0VSTkVMPT0icmRtYV91Y20iLAkJTkFNRT0iaW5maW5pYmFuZC8layIKKworIyBBTFNBIGRldmljZXMKK0tFUk5FTD09ImNvbnRyb2xDWzAtOV0qIiwJTkFNRT0ic25kLyVrIgorS0VSTkVMPT0iaHdDW0QwLTldKiIsCQlOQU1FPSJzbmQvJWsiCitLRVJORUw9PSJwY21DW0QwLTljcF0qIiwJTkFNRT0ic25kLyVrIgorS0VSTkVMPT0ibWlkaUNbRDAtOV0qIiwJCU5BTUU9InNuZC8layIKK0tFUk5FTD09InRpbWVyIiwJCU5BTUU9InNuZC8layIKK0tFUk5FTD09InNlcSIsCQkJTkFNRT0ic25kLyVrIgorCisjIGllZWUxMzk0IGRldmljZXMgICAgICAgCitLRVJORUw9PSJkdjEzOTQqIiwJCU5BTUU9ImR2MTM5NC8lbiIKK0tFUk5FTD09InZpZGVvMTM5NCoiLAkJTkFNRT0idmlkZW8xMzk0LyVuIgorCisjIGlucHV0IGRldmljZXMKK0tFUk5FTD09Im1pY2UiLAkJCU5BTUU9ImlucHV0LyVrIgorS0VSTkVMPT0ibW91c2VbMC05XSoiLAkJTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9PSJldmVudFswLTldKiIsCQlOQU1FPSJpbnB1dC8layIKK0tFUk5FTD09ImpzWzAtOV0qIiwJCU5BTUU9ImlucHV0LyVrIgorS0VSTkVMPT0idHNbMC05XSoiLAkJTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9PSJ1aW5wdXQiLAkJTkFNRT0iaW5wdXQvJWsiCisKKyMgWmFwdGVsCitLRVJORUw9PSJ6YXBjdGwiLAkJTkFNRT0iemFwL2N0bCIKK0tFUk5FTD09InphcHRpbWVyIiwJCU5BTUU9InphcC90aW1lciIKK0tFUk5FTD09InphcGNoYW5uZWwiLAkJTkFNRT0iemFwL2NoYW5uZWwiCitLRVJORUw9PSJ6YXBwc2V1ZG8iLAkJTkFNRT0iemFwL3BzZXVkbyIKK0tFUk5FTD09InphcFswLTldKiIsCQlOQU1FPSJ6YXAvJW4iCisKKyMgQU9FIGNoYXJhY3RlciBkZXZpY2VzCitTVUJTWVNURU09PSJhb2UiLCBLRVJORUw9PSJkaXNjb3ZlciIsCU5BTUU9ImV0aGVyZC8layIKK1NVQlNZU1RFTT09ImFvZSIsIEtFUk5FTD09ImVyciIsCU5BTUU9ImV0aGVyZC8layIKK1NVQlNZU1RFTT09ImFvZSIsIEtFUk5FTD09ImludGVyZmFjZXMiLAlOQU1FPSJldGhlcmQvJWsiCitTVUJTWVNURU09PSJhb2UiLCBLRVJORUw9PSJyZXZhbGlkYXRlIiwJTkFNRT0iZXRoZXJkLyVrIgorCisjIGRldmljZSBtYXBwZXIgY3JlYXRlcyBpdHMgb3duIGRldmljZSBub2Rlcywgc28gaWdub3JlIHRoZXNlCitLRVJORUw9PSJkbS1bMC05XSoiLAkJT1BUSU9OUys9Imlnbm9yZV9kZXZpY2UiCitLRVJORUw9PSJkZXZpY2UtbWFwcGVyIiwJTkFNRT0ibWFwcGVyL2NvbnRyb2wiCisKK0tFUk5FTD09InJmY29tbVswLTldKiIsIE5BTUU9IiVrIiwgR1JPVVA9InVzZXJzIiwgTU9ERT0iMDY2MCIKKworIyBGaXJtd2FyZSBIZWxwZXIKK0FDVElPTj09ImFkZCIsIFNVQlNZU1RFTT09ImZpcm13YXJlIiwgUlVOKz0iL2xpYi91ZGV2L2Zpcm13YXJlLnNoIgorCisjIFNhbXN1bmcgVUFSVFMKK0tFUk5FTD09InMzYzI0MTBfc2VyaWFsWzAtOV0iLCAgIE5BTUU9InR0eVNBQyVuIgorCisjIE1YQyBVQVJUcworS0VSTkVMPT0idHR5bXhjWzAtNF0iLCAgIE5BTUU9InR0eW14YyVuIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldl8xODIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldl8xODIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIxNjM1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2XzE4Mi5iYgpAQCAtMCwwICsxLDkgQEAKK2luY2x1ZGUgdWRldi5pbmMKKworUFIgPSAicjkiCisKKyMgbW9kdWxlLWluaXQtdG9vbHMgZnJvbSBrbW9kX2dpdCB3aWxsIHByb3ZpZGUgbGlia21vZCBydW50aW1lCitERVBFTkRTICs9ICJtb2R1bGUtaW5pdC10b29scyIKKworU1JDX1VSSVttZDVzdW1dID0gIjFiOTY0NDU2MTc3ZmJmNDgwMjNkZmVlN2RiM2E3MDhkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc4NTdlZDE5ZmFmZDhmM2NhOGRlNDEwMTk0ZThjNzMzNmU5ZWI4YTIwNjI2ZWE4YTRiYTY0NDliMDE3ZmFiYTQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kL2FkZC12ZXJib3NlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZC9hZGQtdmVyYm9zZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjQ0M2ZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZC9hZGQtdmVyYm9zZS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHVwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kLm9yZwkyMDA1LTAxLTAzIDAwOjMwOjQ3LjAwMDAwMDAwMCArMDIwMAorKysrIHVwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kCTIwMDctMTItMDEgMTk6NDE6MDguMDAwMDAwMDAwICswMjAwCitAQCAtMTksNiArMTksNyBAQAorIG5vdHJlYWxseT0wCisgZm9yY2U9MAorIGRvc3RhcnQ9MAorK3ZlcmJvc2U9MAorIAorIHVzYWdlKCkKKyB7CitAQCAtMjgsNiArMjksNyBAQAorICAgICAgICB1cGRhdGUtcmMuZCBbLW5dIFstciA8cm9vdD5dIFstc10gPGJhc2VuYW1lPiBzdGFydHxzdG9wIE5OIHJ1bmx2bCBbcnVubHZsXSBbLi4uXSAuCisgCQktbjogbm90IHJlYWxseQorIAkJLWY6IGZvcmNlCisrCQktdjogdmVyYm9zZQorIAkJLXI6IGFsdGVybmF0ZSByb290IHBhdGggKGRlZmF1bHQgaXMgLykKKyAJCS1zOiBpbnZva2Ugc3RhcnQgbWV0aG9kcyBpZiBhcHByb3ByaWF0ZSB0byBjdXJyZW50IHJ1bmxldmVsCisgRU9GCitAQCAtNjksNyArNzEsNyBAQAorIAlsZXY9YGVjaG8gJDIgfCBjdXQgLWQvIC1mMWAKKyAJbm49YGVjaG8gJDIgfCBjdXQgLWQvIC1mMmAKKyAJZm49IiR7ZXRjZH0ke2xldn0uZC8ke3N0YXJ0c3RvcH0ke25ufSR7Ym59IgorLQllY2hvICIgICRmbiAtPiAuLi9pbml0LmQvJGJuIgorKwlbICR2ZXJib3NlIC1lcSAxIF0gJiYgZWNobyAiICAkZm4gLT4gLi4vaW5pdC5kLyRibiIKKyAJaWYgWyAkbm90cmVhbGx5IC1lcSAwIF07IHRoZW4KKyAJCW1rZGlyIC1wIGBkaXJuYW1lICRmbmAKKyAgCQlsbiAtcyAuLi9pbml0LmQvJGJuICRmbgorQEAgLTg5LDcgKzkxLDcgQEAKKyAJCWV4aXQgMAorIAlmaQorIAorLQllY2hvICIgQWRkaW5nIHN5c3RlbSBzdGFydHVwIGZvciAkaW5pdGQvJGJuIC4uLiIKKysJZWNobyAiIEFkZGluZyBzeXN0ZW0gc3RhcnR1cCBmb3IgJGluaXRkLyRibi4iCisgCisgCWZvciBpIGluICRzdGFydGxpbmtzOyBkbworIAkJZG9saW5rIFMgJGkKK0BAIC0xMDUsNiArMTA3LDEwIEBACisgCQkJc2hpZnQKKyAJCQljb250aW51ZQorIAkJCTs7CisrCQktdikJdmVyYm9zZT0xCisrCQkJc2hpZnQKKysJCQljb250aW51ZQorKwkJCTs7CisgCQktZikJZm9yY2U9MQorIAkJCXNoaWZ0CisgCQkJY29udGludWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQvY2hlY2staWYtc3ltbGlua3MtYXJlLXZhbGlkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZC9jaGVjay1pZi1zeW1saW5rcy1hcmUtdmFsaWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc1MTcxYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQvY2hlY2staWYtc3ltbGlua3MtYXJlLXZhbGlkLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0NoZWNrIGlmIHN5bWxpbmtzIGFyZSB2YWxpZAorCitXaGVuIHVzaW5nIHJvb3Qgb3B0aW9uIGFuZCAkaW5pdGQvJGJuIGlzIGEgc3ltbGluaywgdGhlIHNjcmlwdCB3b3VsZCBmYWlsIGJlY2F1c2UKK3RoZSBzeW1saW5rIHBvaW50cyB0byBhIHBhdGggb24gdGFyZ2V0LiBGb3IgZXhhbXBsZToKKworL3BhdGgvdG8vdGFyZ2V0L3Jvb3Rmcy9ldGMvaW5pdC5kL3N5c2xvZyAtPiAvZXRjL2luaXQuZC9zeXNsb2cuYnVzeWJveAorCitIZW5jZSwgWyAtZiAvcGF0aC90by90YXJnZXQvcm9vdGZzL2V0Yy9pbml0LmQvc3lzbG9nIF0gY29uZGl0aW9uIHdvdWxkIHJldHVybgorZmFsc2UuCisKK1RoaXMgcGF0Y2ggYWRkcyB0aGUgcG9zaWJpbGl0eSB0byBjaGVjayB3aGV0aGVyIHRoZSBmaWxlIHRoZSBzeW1saW5rIHBvaW50cyB0bworYWN0dWFsbHkgZXhpc3RzIGluIHJvb3RmcyBwYXRoIGFuZCB0aGVuIGNvbnRpbnVlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPiAKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CisKK0luZGV4OiBnaXQvdXBkYXRlLXJjLmQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy91cGRhdGUtcmMuZAorKysrIGdpdC91cGRhdGUtcmMuZAorQEAgLTE0NywxMyArMTQ3LDM0IEBAIGZpCisgYm49JDEKKyBzaGlmdAorIAorK3NuPSRpbml0ZC8kYm4KKytpZiBbIC1MICIkc24iIC1hIC1uICIkcm9vdCIgXTsgdGhlbgorKwlpZiB3aGljaCByZWFkbGluayA+L2Rldi9udWxsOyB0aGVuCisrCQl3aGlsZSB0cnVlOyBkbworKwkJCWxpbmtzbj0iJChyZWFkbGluayAiJHNuIikiCisrCQkJaWYgWyAteiAiJGxpbmtzbiIgXTsgdGhlbgorKwkJCQlicmVhaworKwkJCWZpCisrCisrCQkJc249IiRsaW5rc24iCisrCQkJY2FzZSAiJHNuIiBpbgorKwkJCQkvKikgc249IiRyb290JHNuIiA7OworKwkJCQkqKSAgc249IiRpbml0ZC8kc24iIDs7CisrCQkJZXNhYworKwkJZG9uZQorKwllbHNlCisrCQllY2hvICJ1cGRhdGUtcmMuZDogcmVhZGxpbmsgdG9vbCBub3QgcHJlc2VudCwgY2Fubm90IGNoZWNrIHdoZXRoZXIgXAorKwkJCQkkc24gc3ltbGluayBwb2ludHMgdG8gYSB2YWxpZCBmaWxlLiIgPiYyCisrCWZpCisrZmkKKysKKyBpZiBbICQxICE9ICJyZW1vdmUiIF07IHRoZW4KKy0JaWYgWyAhIC1mICIkaW5pdGQvJGJuIiBdOyB0aGVuCisrCWlmIFsgISAtZiAiJHNuIiBdOyB0aGVuCisgCQllY2hvICJ1cGRhdGUtcmMuZDogJGluaXRkLyRibjogZmlsZSBkb2VzIG5vdCBleGlzdCIgPiYyCisgCQlleGl0IDEKKyAJZmkKKyBlbHNlCistCWlmIFsgLWYgIiRpbml0ZC8kYm4iIF07IHRoZW4KKysJaWYgWyAtZiAiJHNuIiBdOyB0aGVuCisgCQlpZiBbICRmb3JjZSAtZXEgMSBdOyB0aGVuCisgCQkJZWNobyAidXBkYXRlLXJjLmQ6ICRpbml0ZC8kYm4gZXhpc3RzIGR1cmluZyByYy5kIHB1cmdlIChjb250aW51aW5nKSIgPiYyCisgCQllbHNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kL2ZpeC10by1oYW5kbGUtcHJpb3JpdHktbnVtYmVycy1jb3JyZWN0bHkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kL2ZpeC10by1oYW5kbGUtcHJpb3JpdHktbnVtYmVycy1jb3JyZWN0bHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODViYzIzNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQvZml4LXRvLWhhbmRsZS1wcmlvcml0eS1udW1iZXJzLWNvcnJlY3RseS5wYXRjaApAQCAtMCwwICsxLDI4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRml4IHRvIGhhbmRsZSBwcmlvcml0eSBudW1iZXJzIGNvcnJlY3RseS4KK1ByZXZpb3VzbHksIGlmIHRoZSBwcmlvcml0eSBudW1iZXIgaXMgJzA4JyBvciAnMDknLCBmb3IgZXhhbXBsZSwKK3RoZSBzY3JpcHQgY2Fubm90IGhhbmRsZSB0aGVtIGNvcnJlY3RseSBhcyB0aGVzZSBudW1iZXJzIGFyZSB0cmVhdGVkCithcyBvY3RhbCBudW1iZXJzLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyB1cGRhdGUtcmMuZCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3VwZGF0ZS1yYy5kIGIvdXBkYXRlLXJjLmQKK2luZGV4IGVjNTBkMTUuLmM3MGI4NTkgMTAwNjQ0CistLS0gYS91cGRhdGUtcmMuZAorKysrIGIvdXBkYXRlLXJjLmQKK0BAIC0yMDUsNyArMjA1LDcgQEAgY2FzZSAkMSBpbgorIAkJCQlleGl0IDEKKyAJCQlmaQorIAkJCXNoaWZ0CistCQkJTk49YHByaW50ZiAlMDJkICQxYAorKwkJCU5OPWBwcmludGYgJTAyZCAkKGV4cHIgJDEgKyAwKWAKKyAJCQlzaGlmdAorIAkJCXdoaWxlIFsgIngkMSIgIT0gInguIiBdOyBkbworIAkJCQlpZiBbICQjIC1lcSAwIF07IHRoZW4KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kXzAuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmRfMC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNWNiNzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kXzAuNy5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIm1hbmFnZSBzeW1saW5rcyBpbiAvZXRjL3JjTi5kIgorREVTQ1JJUFRJT04gPSAidXBkYXRlLXJjLmQgaXMgYSB1dGlsaXRpZXMgdGhhdCBhbGxvd3MgdGhlIG1hbmFnZW1lbnQgb2Ygc3ltbGlua3MgdG8gdGhlIGluaXRzY3JpcHRzIGluIHRoZSAvZXRjL3JjTi5kIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIgorU0VDVElPTiA9ICJiYXNlIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3VwZGF0ZS1yYy5kO2JlZ2lubGluZT01O2VuZGxpbmU9MTU7bWQ1PTE0OGE0ODMyMWIxMGViMzdjMWZhM2VlMDJiOTQwYTc1IgorCitQUiA9ICJyNSIKKworIyBSZXZpc2lvbiBjb3JyZXNwb25kaW5nIHRvIHRhZyB1cGRhdGUtcmMuZF8wLjcKK1NSQ1JFViA9ICJlY2E2ODBkZGYyOGQwMjQ5NTQ4OTVmNTlhMjQxYTYyMmRkNTc1YzExIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vcGhpbGIvdXBkYXRlLXJjLmQuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2FkZC12ZXJib3NlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NoZWNrLWlmLXN5bWxpbmtzLWFyZS12YWxpZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtdG8taGFuZGxlLXByaW9yaXR5LW51bWJlcnMtY29ycmVjdGx5LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYWxsYXJjaAorCitkb19jb21waWxlKCkgeworfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS91cGRhdGUtcmMuZCAke0R9JHtzYmluZGlyfS91cGRhdGUtcmMuZAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDA3MmJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXguaW5jCkBAIC0wLDAgKzEsMjY4IEBACitTVU1NQVJZID0gIkEgc3VpdGUgb2YgYmFzaWMgc3lzdGVtIGFkbWluaXN0cmF0aW9uIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlV0aWwtbGludXggaW5jbHVkZXMgYSBzdWl0ZSBvZiBiYXNpYyBzeXN0ZW0gYWRtaW5pc3RyYXRpb24gdXRpbGl0aWVzIFwKK2NvbW1vbmx5IGZvdW5kIG9uIG1vc3QgTGludXggc3lzdGVtcy4gIFNvbWUgb2YgdGhlIG1vcmUgaW1wb3J0YW50IHV0aWxpdGllcyBpbmNsdWRlIFwKK2Rpc2sgcGFydGl0aW9uaW5nLCBrZXJuZWwgbWVzc2FnZSBtYW5hZ2VtZW50LCBmaWxlc3lzdGVtIGNyZWF0aW9uLCBhbmQgc3lzdGVtIGxvZ2luLiIKKworU0VDVElPTiA9ICJiYXNlIgorCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyAmIEJTRCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FLmxpY2Vuc2luZzttZDU9MTcxNWY1ZWUzZTAxMjAzY2ExZTFlMGI5ZWU2NTkxOGMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vRG9jdW1lbnRhdGlvbi9saWNlbnNlcy9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Eb2N1bWVudGF0aW9uL2xpY2Vuc2VzL0NPUFlJTkcuTEdQTHYyLjE7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0RvY3VtZW50YXRpb24vbGljZW5zZXMvQ09QWUlORy5CU0QtMzttZDU9NThkY2Q4NDUyNjUxZmM4YjA3ZDFmNjVjZTA3Y2E4YWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vRG9jdW1lbnRhdGlvbi9saWNlbnNlcy9DT1BZSU5HLlVDQjttZDU9MjYzODYwZjg5NjhkOGJhZmE1MzkyY2FiNzQyODUyNjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlidXVpZC9DT1BZSU5HO21kNT1iNDQyZmZiNzYyY2Y4ZDNlOWRmMWI5OWUwYmI0YWY3MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJtb3VudC9DT1BZSU5HO21kNT1mYjkzZjAxZDQzNjEwNjljNTYxNjMyNzcwNTM3M2IxNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJibGtpZC9DT1BZSU5HO21kNT1mYjkzZjAxZDQzNjEwNjljNTYxNjMyNzcwNTM3M2IxNiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgc3lzdGVtZCB1cGRhdGUtYWx0ZXJuYXRpdmVzIHB5dGhvbi1kaXIKK0RFUEVORFMgPSAiemxpYiBuY3Vyc2VzIgorREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBsem8tbmF0aXZlIgorREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiBsem8tbmF0aXZlIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMvdXRpbC1saW51eC92JHtNQUpPUl9WRVJTSU9OfS91dGlsLWxpbnV4LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgICIKKworUEFDS0FHRVMgPSsgInV0aWwtbGludXgtYWdldHR5IHV0aWwtbGludXgtZmRpc2sgdXRpbC1saW51eC1jZmRpc2sgdXRpbC1saW51eC1zZmRpc2sgXAorICAgICAgICAgICAgIHV0aWwtbGludXgtc3dhcG9ub2ZmIHV0aWwtbGludXgtbG9zZXR1cCB1dGlsLWxpbnV4LXVtb3VudCBcCisgICAgICAgICAgICAgdXRpbC1saW51eC1tb3VudCB1dGlsLWxpbnV4LXJlYWRwcm9maWxlIHV0aWwtbGludXgtdXVpZGQgXAorICAgICAgICAgICAgIHV0aWwtbGludXgtdXVpZGdlbiB1dGlsLWxpbnV4LWxzY3B1IHV0aWwtbGludXgtZnNjayB1dGlsLWxpbnV4LWJsa2lkIFwKKyAgICAgICAgICAgICB1dGlsLWxpbnV4LW1rZnMgdXRpbC1saW51eC1tY29va2llIHV0aWwtbGludXgtcmVzZXQgXAorICAgICAgICAgICAgIHV0aWwtbGludXgtbWtmcy5jcmFtZnMgdXRpbC1saW51eC1mc2NrLmNyYW1mcyB1dGlsLWxpbnV4LWZzdHJpbSBcCisgICAgICAgICAgICAgdXRpbC1saW51eC1wYXJ0eCAke1BOfS1iYXNoLWNvbXBsZXRpb24gdXRpbC1saW51eC1od2Nsb2NrIFwKKyAgICAgICAgICAgICB1dGlsLWxpbnV4LWZpbmRmcyB1dGlsLWxpbnV4LWdldG9wdCB1dGlsLWxpbnV4LXN1bG9naW4iCitQQUNLQUdFUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHlsaWJtb3VudCcsICd1dGlsLWxpbnV4LXB5bGlibW91bnQnLCAnJywgZCl9IgorCitQQUNLQUdFU19EWU5BTUlDID0gIl51dGlsLWxpbnV4LWxpYi4qIgorCitTSEFSRURfRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS11c2UtdHR5LWdyb3VwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW1ha2VpbnN0YWxsLWNob3duIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUta2lsbCAtLWVuYWJsZS1sYXN0IC0tZW5hYmxlLW1lc2cgLS1lbmFibGUtcGFydHggXAorICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1yYXcgLS1lbmFibGUtcmVzZXQgLS1kaXNhYmxlLWxvZ2luIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZpcHcgLS1kaXNhYmxlLW5ld2dycCAtLWRpc2FibGUtY2hmbi1jaHNoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtd3JpdGUgLS1lbmFibGUtbW91bnQgXAorICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1saWJ1dWlkIC0tZW5hYmxlLWxpYmJsa2lkIC0tZW5hYmxlLWZzY2sgLS13aXRob3V0LXVkZXYgXAorICAgICAgICAgICAgICAgICAgICAgICB1c3JzYmluX2V4ZWNkaXI9JyR7c2JpbmRpcn0nIFwKKyIKKworRVhUUkFfT0VDT05GID0gIiR7U0hBUkVEX0VYVFJBX09FQ09ORn0gLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0iCisKK1BBQ0tBR0VDT05GSUdfY2xhc3MtdGFyZ2V0ID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1twYW1dID0gIi0tZW5hYmxlLXN1IC0tZW5hYmxlLXJ1bnVzZXIsLS1kaXNhYmxlLXN1IC0tZGlzYWJsZS1ydW51c2VyLCBsaWJwYW0sIgorCisjIFJlc3BlY3QgdGhlIHN5c3RlbWQgZmVhdHVyZSBmb3IgdXVpZGQKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS13aXRoLXN5c3RlbWQgLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vLCAtLXdpdGhvdXQtc3lzdGVtZCAtLXdpdGhvdXQtc3lzdGVtZHN5c3RlbXVuaXRkaXIsc3lzdGVtZCIKKworIyBCdWlsZCBzZXRwcml2IHJlcXVpcmVzIGxpYmNhcC1uZworUEFDS0FHRUNPTkZJR1tsaWJjYXAtbmddID0gIi0tZW5hYmxlLXNldHByaXYsLS1kaXNhYmxlLXNldHByaXYsbGliY2FwLW5nLCIKKworIyBCdWlsZCBweXRob24gYmluZGluZ3MgZm9yIGxpYm1vdW50CitQQUNLQUdFQ09ORklHW3B5bGlibW91bnRdID0gIi0td2l0aC1weXRob24gLS1lbmFibGUtcHlsaWJtb3VudCwtLXdpdGhvdXQtcHl0aG9uIC0tZGlzYWJsZS1weWxpYm1vdW50LHB5dGhvbiIKKworRklMRVNfJHtQTn0tYmFzaC1jb21wbGV0aW9uICs9ICIke2RhdGFkaXJ9L2Jhc2gtY29tcGxldGlvbiIKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkYXRhZGlyfS9nZXRvcHQvZ2V0b3B0LSouKiIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtQWVRIT05fRElSfS9kaXN0LXBhY2thZ2VzL2xpYm1vdW50L3B5bGlibW91bnQubGEiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L2Rpc3QtcGFja2FnZXMvbGlibW91bnQvLmRlYnVnLyIKKworRklMRVNfdXRpbC1saW51eC1hZ2V0dHkgPSAiJHtiYXNlX3NiaW5kaXJ9L2FnZXR0eSIKK0ZJTEVTX3V0aWwtbGludXgtZmRpc2sgPSAiJHtiYXNlX3NiaW5kaXJ9L2ZkaXNrLiR7QlBOfSIKK0ZJTEVTX3V0aWwtbGludXgtZnN0cmltID0gIiR7YmFzZV9zYmluZGlyfS9mc3RyaW0iCitGSUxFU191dGlsLWxpbnV4LWNmZGlzayA9ICIke2Jhc2Vfc2JpbmRpcn0vY2ZkaXNrIgorRklMRVNfdXRpbC1saW51eC1zZmRpc2sgPSAiJHtzYmluZGlyfS9zZmRpc2siCitGSUxFU191dGlsLWxpbnV4LXN3YXBvbm9mZiA9ICIke2Jhc2Vfc2JpbmRpcn0vc3dhcG9uLiR7QlBOfSAke2Jhc2Vfc2JpbmRpcn0vc3dhcG9mZi4ke0JQTn0iCitGSUxFU191dGlsLWxpbnV4LWxvc2V0dXAgPSAiJHtiYXNlX3NiaW5kaXJ9L2xvc2V0dXAuJHtCUE59IgorRklMRVNfdXRpbC1saW51eC1tb3VudCA9ICIke2Jhc2VfYmluZGlyfS9tb3VudC4ke0JQTn0iCitGSUxFU191dGlsLWxpbnV4LW1jb29raWUgPSAiJHtiaW5kaXJ9L21jb29raWUiCitGSUxFU191dGlsLWxpbnV4LXVtb3VudCA9ICIke2Jhc2VfYmluZGlyfS91bW91bnQuJHtCUE59IgorRklMRVNfdXRpbC1saW51eC1yZWFkcHJvZmlsZSA9ICIke3NiaW5kaXJ9L3JlYWRwcm9maWxlLiR7QlBOfSIKK0ZJTEVTX3V0aWwtbGludXgtdXVpZGdlbiA9ICIke2JpbmRpcn0vdXVpZGdlbiIKK0ZJTEVTX3V0aWwtbGludXgtdXVpZGQgPSAiJHtzYmluZGlyfS91dWlkZCIKK0ZJTEVTX3V0aWwtbGludXgtcmVzZXQgPSAiJHtiYXNlX2JpbmRpcn0vcmVzZXQiCitGSUxFU191dGlsLWxpbnV4LXBhcnR4ID0gIiR7c2JpbmRpcn0vcGFydHgiCitGSUxFU191dGlsLWxpbnV4LWh3Y2xvY2sgPSAiJHtiYXNlX3NiaW5kaXJ9L2h3Y2xvY2suJHtCUE59IgorRklMRVNfdXRpbC1saW51eC1maW5kZnMgPSAiJHtzYmluZGlyfS9maW5kZnMiCitGSUxFU191dGlsLWxpbnV4LWdldG9wdCA9ICIke2Jhc2VfYmluZGlyfS9nZXRvcHQuJHtCUE59IgorCitGSUxFU191dGlsLWxpbnV4LXB5bGlibW91bnQgPSAiJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vZGlzdC1wYWNrYWdlcy9saWJtb3VudC9weWxpYm1vdW50LnNvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vJHtQWVRIT05fRElSfS9kaXN0LXBhY2thZ2VzL2xpYm1vdW50L19faW5pdF9fLioiCitGSUxFU191dGlsLWxpbnV4LWxzY3B1ID0gIiR7YmluZGlyfS9sc2NwdSIKKworRklMRVNfdXRpbC1saW51eC1mc2NrID0gIiR7YmFzZV9zYmluZGlyfS9mc2NrKiIKK0ZJTEVTX3V0aWwtbGludXgtbWtmcyA9ICIke3NiaW5kaXJ9L21rZnMiCisKK0ZJTEVTX3V0aWwtbGludXgtZnNjay5jcmFtZnMgPSAiJHtzYmluZGlyfS9mc2NrLmNyYW1mcyIKK0ZJTEVTX3V0aWwtbGludXgtbWtmcy5jcmFtZnMgPSAiJHtzYmluZGlyfS9ta2ZzLmNyYW1mcyIKKworRklMRVNfdXRpbC1saW51eC1zdWxvZ2luID0gIiR7YmFzZV9zYmluZGlyfS9zdWxvZ2luKiIKKworIyBVdGlsLWxpbnV4JyBibGtpZCByZXBsYWNlcyB0aGUgZTJmc3Byb2dzIG9uZQorRklMRVNfdXRpbC1saW51eC1ibGtpZCA9ICIke2Jhc2Vfc2JpbmRpcn0vYmxraWQqIgorUkNPTkZMSUNUU191dGlsLWxpbnV4LWJsa2lkID0gImUyZnNwcm9ncy1ibGtpZCIKK1JSRVBMQUNFU191dGlsLWxpbnV4LWJsa2lkID0gImUyZnNwcm9ncy1ibGtpZCIKKworIyByZXNldCBjYWxscyAndHB1dCcKK1JERVBFTkRTX3V0aWwtbGludXgtcmVzZXQgKz0gIm5jdXJzZXMiCisKK1JERVBFTkRTXyR7UE59ID0gInV0aWwtbGludXgtdW1vdW50IHV0aWwtbGludXgtc3dhcG9ub2ZmIHV0aWwtbGludXgtbG9zZXR1cCB1dGlsLWxpbnV4LXN1bG9naW4iCitSUkVDT01NRU5EU18ke1BOfSA9ICJ1dGlsLWxpbnV4LWZkaXNrIHV0aWwtbGludXgtY2ZkaXNrIHV0aWwtbGludXgtc2ZkaXNrIHV0aWwtbGludXgtbW91bnQgdXRpbC1saW51eC1yZWFkcHJvZmlsZSB1dGlsLWxpbnV4LW1rZnMgIgorCitSUkVDT01NRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorUlJFQ09NTUVORFNfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitSUFJPVklERVNfJHtQTn0tZGV2ID0gInV0aWwtbGludXgtbGliYmxraWQtZGV2IHV0aWwtbGludXgtbGlibW91bnQtZGV2IHV0aWwtbGludXgtbGlidXVpZC1kZXYiCisKKyNTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LXV1aWRkICR7UE59LWZzdHJpbSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS11dWlkZCA9ICJ1dWlkZC5zb2NrZXQgdXVpZGQuc2VydmljZSIKK1NZU1RFTURfQVVUT19FTkFCTEVfJHtQTn0tdXVpZGQgPSAiZGlzYWJsZSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1mc3RyaW0gPSAiZnN0cmltLnRpbWVyIGZzdHJpbS5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRV8ke1BOfS1mc3RyaW0gPSAiZGlzYWJsZSIKKworZG9fY29tcGlsZSAoKSB7CisJc2V0IC1lCisJb2VfcnVubWFrZSBBUkNIPSR7VEFSR0VUX0FSQ0h9IENQVT0gQ1BVT1BUPSAnT1BUPSR7Q0ZMQUdTfScgCit9CisKK2RvX2luc3RhbGwgKCkgeworCSMgd2l0aCBjY2FjaGUgdGhlIHRpbWVzdGFtcHMgb24gY29tcGlsZWQgZmlsZXMgbWF5CisJIyBlbmQgdXAgZWFybGllciB0aGFuIG9uIHRoZWlyIGlucHV0cywgdGhpcyBhbGxvd3MKKwkjIGZvciB0aGUgcmVzdWx0YW50IGNvbXBpbGF0aW9uIGluIHRoZSBpbnN0YWxsIHN0ZXAuCisJb2VfcnVubWFrZSBBUkNIPSR7VEFSR0VUX0FSQ0h9IENQVT0gQ1BVT1BUPSBcCisJCSdPUFQ9JHtDRkxBR1N9JyAnQ0M9JHtDQ30nICdMRD0ke0xEfScgXAorCQknTERGTEFHUz0ke0xERkxBR1N9JyAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisKKwlta2RpciAtcCAke0R9JHtiYXNlX2JpbmRpcn0KKworICAgICAgICBzYmlucHJvZ3M9ImFnZXR0eSBjdHJsYWx0ZGVsIGNmZGlzayB2aXB3IHZpZ3IiCisgICAgICAgIHNiaW5wcm9nc19hPSJwaXZvdF9yb290IGh3Y2xvY2sgbWtzd2FwIG1rZnMubWluaXggZnNjay5taW5peCBsb3NldHVwIHN3YXBvbiBzd2Fwb2ZmIGZkaXNrIGZzY2sgYmxraWQgYmxvY2tkZXYgZnN0cmltIHN1bG9naW4gc3dpdGNoX3Jvb3QiCisgICAgICAgIGJpbnByb2dzX2E9ImRtZXNnIGdldG9wdCBraWxsIG1vcmUgdW1vdW50IG1vdW50IGxvZ2luIHJlc2V0IHN1IgorCisgICAgICAgIGlmIFsgIiR7YmFzZV9zYmluZGlyfSIgIT0gIiR7c2JpbmRpcn0iIF07IHRoZW4KKyAgICAgICAgCW1rZGlyIC1wICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKyAgICAgICAgICAgICAgICBmb3IgcCBpbiAkc2JpbnByb2dzICRzYmlucHJvZ3NfYTsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgLWYgIiR7RH0ke3NiaW5kaXJ9LyRwIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG12ICIke0R9JHtzYmluZGlyfS8kcCIgIiR7RH0ke2Jhc2Vfc2JpbmRpcn0vJHAiCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKworICAgICAgICBpZiBbICIke2Jhc2VfYmluZGlyfSIgIT0gIiR7YmluZGlyfSIgXTsgdGhlbgorICAgICAgICAJbWtkaXIgLXAgJHtEfSR7YmFzZV9iaW5kaXJ9CisgICAgICAgICAgICAgICAgZm9yIHAgaW4gJGJpbnByb2dzX2E7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBbIC1mICIke0R9JHtiaW5kaXJ9LyRwIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG12ICIke0R9JHtiaW5kaXJ9LyRwIiAiJHtEfSR7YmFzZV9iaW5kaXJ9LyRwIgorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvCisJZWNobyAnTU9VTlRBTEw9Ii10IG5vbmZzLG5vc21iZnMsbm9uY3BmcyInID4gJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9tb3VudGFsbAorCisJcm0gLWYgJHtEfSR7YmluZGlyfS9jaGtkdXBleGUKK30KKworIyByZXNldCBhbmQgbm9sb2dpbiBjYXVzZXMgYSBjb25mbGljdCB3aXRoIG5jdXJzZXMtbmF0aXZlIGFuZCBzaGFkb3ctbmF0aXZlCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworCXJtIC1mICR7RH0ke2Jhc2VfYmluZGlyfS9yZXNldAorCXJtIC1mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vbm9sb2dpbgorfQorCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ICA9ICJkbWVzZyBraWxsIG1vcmUgbWtzd2FwIGJsb2NrZGV2IHBpdm90X3Jvb3Qgc3dpdGNoX3Jvb3QiCitBTFRFUk5BVElWRV8ke1BOfSArPSAibWtmcy5taW5peCBoZXhkdW1wIGxhc3QgbGFzdGIgbG9nZ2VyIG1lc2cgcmVuaWNlIHdhbGwiCitBTFRFUk5BVElWRV8ke1BOfSArPSAic2V0c2lkIGNocnQgZmxvY2sgdXRtcGR1bXAgZWplY3QiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtkbWVzZ10gPSAiJHtiYXNlX2JpbmRpcn0vZG1lc2ciCitBTFRFUk5BVElWRV9MSU5LX05BTUVba2lsbF0gPSAiJHtiYXNlX2JpbmRpcn0va2lsbCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttb3JlXSA9ICIke2Jhc2VfYmluZGlyfS9tb3JlIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21rc3dhcF0gPSAiJHtiYXNlX3NiaW5kaXJ9L21rc3dhcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtibG9ja2Rldl0gPSAiJHtiYXNlX3NiaW5kaXJ9L2Jsb2NrZGV2IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Bpdm90X3Jvb3RdID0gIiR7YmFzZV9zYmluZGlyfS9waXZvdF9yb290IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N3aXRjaF9yb290XSA9ICIke2Jhc2Vfc2JpbmRpcn0vc3dpdGNoX3Jvb3QiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWtmcy5taW5peF0gPSAiJHtiYXNlX3NiaW5kaXJ9L21rZnMubWluaXgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZWplY3RdID0gIiR7YmluZGlyfS9lamVjdCIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gIm1vdW50cG9pbnQuMSBsYXN0LjEgbGFzdGIuMSBtZXNnLjEgd2FsbC4xIG5vbG9naW4uOCBzdWxvZ2luLjggdXRtcGR1bXAuMSByZXNldC4xIGtpbGwuMSBsaWJibGtpZC4zIGJsa2lkLjggZmluZGZzLjggZnNjay44IHV1aWQuMyIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2xhc3QuMV0gPSAiJHttYW5kaXJ9L21hbjEvbGFzdC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2xhc3RiLjFdID0gIiR7bWFuZGlyfS9tYW4xL2xhc3RiLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWVzZy4xXSA9ICIke21hbmRpcn0vbWFuMS9tZXNnLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbW91bnRwb2ludC4xXSA9ICIke21hbmRpcn0vbWFuMS9tb3VudHBvaW50LjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbm9sb2dpbi44XSA9ICIke21hbmRpcn0vbWFuOC9ub2xvZ2luLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcmVzZXQuMV0gPSAiJHttYW5kaXJ9L21hbjEvcmVzZXQuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzdWxvZ2luLjhdID0gIiR7bWFuZGlyfS9tYW44L3N1bG9naW4uOCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt1dG1wZHVtcC4xXSA9ICIke21hbmRpcn0vbWFuMS91dG1wZHVtcC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3dhbGwuMV0gPSAiJHttYW5kaXJ9L21hbjEvd2FsbC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2tpbGwuMV0gPSAiJHttYW5kaXJ9L21hbjEva2lsbC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2xpYmJsa2lkLjNdID0gIiR7bWFuZGlyfS9tYW4zL2xpYmJsa2lkLjMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbYmxraWQuOF0gPSAiJHttYW5kaXJ9L21hbjgvYmxraWQuOCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmaW5kZnMuOF0gPSAiJHttYW5kaXJ9L21hbjgvZmluZGZzLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZnNjay44XSA9ICIke21hbmRpcn0vbWFuOC9mc2NrLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdXVpZC4zXSA9ICIke21hbmRpcn0vbWFuMy91dWlkLjMiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtaHdjbG9jayA9ICJod2Nsb2NrIgorIyBUaGVyZSBzZWVtcyB0byBiZSBwcm9ibGVtLCBhdGxlYXN0IG9uIG5zbHUyLCB3aXRoIHRoZXNlLCB1bnRpbGwgdGhleSBhcmUKKyMgZml4ZWQgdGhlIGJ1c3lib3ggb25lcyBoYXZlIGhpZ2hlciBwcmlvcml0eQorQUxURVJOQVRJVkVfUFJJT1JJVFlbaHdjbG9ja10gPSAiMTAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaHdjbG9ja10gPSAiJHtiYXNlX3NiaW5kaXJ9L2h3Y2xvY2siCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtZmRpc2sgPSAiZmRpc2siCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZmRpc2tdID0gIiR7YmFzZV9zYmluZGlyfS9mZGlzayIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1hZ2V0dHkgPSAiZ2V0dHkiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ2V0dHldID0gIiR7YmFzZV9zYmluZGlyfS9nZXR0eSIKK0FMVEVSTkFUSVZFX1RBUkdFVFtnZXR0eV0gPSAiJHtiYXNlX3NiaW5kaXJ9L2FnZXR0eSIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1tb3VudCA9ICJtb3VudCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttb3VudF0gPSAiJHtiYXNlX2JpbmRpcn0vbW91bnQiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtdW1vdW50ID0gInVtb3VudCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt1bW91bnRdID0gIiR7YmFzZV9iaW5kaXJ9L3Vtb3VudCIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1yZWFkcHJvZmlsZSA9ICJyZWFkcHJvZmlsZSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtyZWFkcHJvZmlsZV0gPSAiJHtzYmluZGlyfS9yZWFkcHJvZmlsZSIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1sb3NldHVwID0gImxvc2V0dXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbG9zZXR1cF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2xvc2V0dXAiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtc3dhcG9ub2ZmID0gInN3YXBvZmYgc3dhcG9uIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N3YXBvZmZdID0gIiR7YmFzZV9zYmluZGlyfS9zd2Fwb2ZmIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N3YXBvbl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3N3YXBvbiIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1mc2NrID0gImZzY2subWluaXggZnNjayIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmc2NrLm1pbml4XSA9ICIke2Jhc2Vfc2JpbmRpcn0vZnNjay5taW5peCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmc2NrXSA9ICIke2Jhc2Vfc2JpbmRpcn0vZnNjayIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1ibGtpZCA9ICJibGtpZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtibGtpZF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2Jsa2lkIgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LXJlc2V0ID0gInJlc2V0IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Jlc2V0XSA9ICIke2JpbmRpcn0vcmVzZXQiCitBTFRFUk5BVElWRV9UQVJHRVRbcmVzZXRdID0gIiR7YmFzZV9iaW5kaXJ9L3Jlc2V0IgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LWdldG9wdCA9ICJnZXRvcHQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ2V0b3B0XSA9ICIke2Jhc2VfYmluZGlyfS9nZXRvcHQiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtc3Vsb2dpbiA9ICJzdWxvZ2luIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N1bG9naW5dID0gIiR7YmFzZV9zYmluZGlyfS9zdWxvZ2luIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK3B5dGhvbiBkb19wYWNrYWdlX3ByZXBlbmQgKCkgeworICAgIGlmICctLWVuYWJsZS1zdScgaW4gZC5nZXRWYXIoJ0VYVFJBX09FQ09ORicsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGFsdF9uYW1lID0gInN1IgorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIGFsdF9uYW1lLCAnJXMvJXMnICUgKGQuZ2V0VmFyKCdiYXNlX2JpbmRpcicsIFRydWUpLCBhbHRfbmFtZSkpCisgICAgICAgIGQuYXBwZW5kVmFyKCdBTFRFUk5BVElWRV8lcycgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSkpLCAnICcgKyBhbHRfbmFtZSkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgJyR7YmFzZV9saWJkaXJ9JywgJ15saWIoLiopXC5zb1wuLiokJywKKyAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0ndXRpbC1saW51eC1saWIlcycsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J3V0aWwtbGludXggbGliJXMnLAorICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RlcGVuZHM9JycsIHByZXBlbmQ9VHJ1ZSwgYWxsb3dfbGlua3M9VHJ1ZSkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L2NvbmZpZ3VyZS1zYmluZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvY29uZmlndXJlLXNiaW5kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTViMWZmMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L2NvbmZpZ3VyZS1zYmluZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK3V0aWwtbGludXg6IHRha2UgJHtzYmluZGlyfSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpZiBpdCBpcyBzZXQgdGhlcmUKK2ZpeCB0aGUgdGVzdCwgdGhlIFsgXSBzeW50YXggd2FzIGdldHRpbmcgZWF0ZW4gYnkgYXV0b2NvbmYKKworU2lnbmVkLW9mZi1ieTogUGhpbCBCbHVuZGVsbCA8cGJAcGJjbC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IHV0aWwtbGludXgtMi4yMi4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHV0aWwtbGludXgtMi4yMi4xLm9yaWcvY29uZmlndXJlLmFjCisrKysgdXRpbC1saW51eC0yLjIyLjEvY29uZmlndXJlLmFjCitAQCAtNzMsNyArNzMsMTAgQEAgQUNfU1VCU1QoW2xvY2Fsc3RhdGVkaXJdKQorIHVzcmJpbl9leGVjZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCisgQUNfU1VCU1QoW3VzcmJpbl9leGVjZGlyXSkKKyAKKy11c3JzYmluX2V4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCisraWYgdGVzdCAteiAiJHVzcnNiaW5fZXhlY2RpciIgOworK3RoZW4KKysgICB1c3JzYmluX2V4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCisrZmkKKyBBQ19TVUJTVChbdXNyc2Jpbl9leGVjZGlyXSkKKyAKKyBjYXNlICRsaWJkaXIgaW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGIyNzFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gNzc0ZjU1ZjlkZDIyYzAxZTQwNDFhMTgzZDhkZmYxNDgxMWYyOTExNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCA0IEFwciAyMDE0IDE3OjMzOjA0ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHN5cy11dGlscy9NYWtlbW9kdWxlLmFtOiBmaXggcGFyYWxsZWwgYnVpbGQgaXNzdWUKKworVGhlIHJ1bGUgU0VUQVJDSF9NQU5fTElOS1MgaXMgdXNlZCBmb3IgdGhlIGZpbGVzIHVuZGVyIHRoZSBzeXMtdXRpbHMKK2RpciwgZm9yIGV4YW1wbGU6CisKK2VjaG8gIi5zbyBtYW44L3NldGFyY2guOCIgPiBzeXMtdXRpbHMvbGludXgzMi44CisKK2J1dCBpdCBkZXBlbmRzIG9uIG5vdGhpbmcgc28gdGhhdCB0aGUgc3lzLXV0aWxzIGRpciBtYXkgbm90IGV4aXN0LCB3ZQorY2FuIGNyZWF0ZSB0aGUgc3lzLXV0aWxzIGRpciB0byBmaXggcHJvYmxlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3lzLXV0aWxzL01ha2Vtb2R1bGUuYW0gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3N5cy11dGlscy9NYWtlbW9kdWxlLmFtIGIvc3lzLXV0aWxzL01ha2Vtb2R1bGUuYW0KK2luZGV4IDYyNjUyODIuLjYyZWFkMzcgMTAwNjQ0CistLS0gYS9zeXMtdXRpbHMvTWFrZW1vZHVsZS5hbQorKysrIGIvc3lzLXV0aWxzL01ha2Vtb2R1bGUuYW0KK0BAIC0xMjQsNiArMTI0LDcgQEAgbWFuX01BTlMgKz0gJChTRVRBUkNIX01BTl9MSU5LUykKKyBDTEVBTkZJTEVTICs9ICQoU0VUQVJDSF9NQU5fTElOS1MpCisgCisgJChTRVRBUkNIX01BTl9MSU5LUyk6CisrCSQoTUtESVJfUCkgc3lzLXV0aWxzCisgCSQoQU1fVl9HRU4pZWNobyAiLnNvIG1hbjgvc2V0YXJjaC44IiA+ICRACisgCisgaW5zdGFsbC1leGVjLWhvb2stc2V0YXJjaDoKKy0tIAorMS44LjIuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91Y2xpYmMtX19wcm9nbmFtZS1jb25mbGljdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3VjbGliYy1fX3Byb2duYW1lLWNvbmZsaWN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMzFhNzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91Y2xpYmMtX19wcm9nbmFtZS1jb25mbGljdC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitjb25maWd1cmUgc2hvdWxkIGluY2x1ZGUgZXJybm8uaCBpbnN0ZWFkIG9mIGFyZ3AuaCB3aGVuCitjaGVja2luZyBmb3IgcHJlc2VuY2Ugb2YgcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWUKK3VjbGliYyBkZWZpbmVzIHRoaXMgdG8gYmUgY29uc3QgY2hhciogdW5saWtlIHV0aWwtbGludXgtbmcKK3doaWNoIGRlZmluZXMgdGhpcyB0byBiZSBjaGFyKiBzbyB0aGlzIGVycm9yIGdvZXMgdW5ub3RpY2VkCitvbiBnbGliYy9lZ2xpYmMgc3lzdGVtcy4KKworaGVyZSBpcyB0aGUgZXJyb3IgaXQgZml4ZXMKKworaW4gZmlsZSBpbmNsdWRlZCBmcm9tIG1vdW50UC5oOjE0OjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICBmcm9tIGNhY2hlLmM6Mjk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorL2hvbWUva3Jhai93b3JrL3NsdWdvcy9idWlsZC90bXAtc2x1Z29zLXVjbGliYy9zeXNyb290cy9uc2x1MmxlL3Vzci9pbmNsdWRlL2Vycm5vLmg6NTU6NDY6IGVycm9yOiBjb25mbGljdGluZyB0eXBlcyBmb3IgJ19fcHJvZ25hbWUnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy4uLy4uLy4uL2luY2x1ZGUvYy5oOjExODoxNDogbm90ZTogcHJldmlvdXMgZGVjbGFyYXRpb24gb2YgJ19fcHJvZ25hbWUnIHdhcyBoZXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK21ha2VbM106ICoqKiBbY2FjaGUubG9dIEVycm9yIDEgICAgICAgICAgCisKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitJbmRleDogdXRpbC1saW51eC0yLjIyLjEvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdXRpbC1saW51eC0yLjIyLjEub3JpZy9jb25maWd1cmUuYWMKKysrKyB1dGlsLWxpbnV4LTIuMjIuMS9jb25maWd1cmUuYWMKK0BAIC0zNzIsNyArMzcyLDcgQEAgZXNhYworIAorIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZSBpcyBkZWZpbmVkXSkKKyBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCistCSNpbmNsdWRlIDxhcmdwLmg+CisrCSNpbmNsdWRlIDxlcnJuby5oPgorIF1dLCBbWworIAlwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZSA9ICJ0ZXN0IjsKKyBdXSldLCBbCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5hdGl2ZS1xc29ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmF0aXZlLXFzb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YmYyMmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5hdGl2ZS1xc29ydC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGYyMjBkODA5YmUxYmFhNjU0NTAzYmY2ZmY1MmYzNjMwYjBkNzAxNWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMjYgTWFyIDIwMTQgMDE6MzA6MjkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gc3VuLmM6IHVzZSBxc29ydCgpIHRvIGluc3RlYWQgb2YgcXNvcnRfcigpCisKK3Fzb3J0X3IoKSB3YXMgYWRkZWQgdG8gZ2xpYmMgaW4gdmVyc2lvbiAyLjgsIHNvIHRoZXJlIGlzIG5vIHFzb3J0X3IoKSBvbgordGhlIGhvc3QgbGlrZSBDZW50T1MgNS54LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW090aGVyXQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmZkaXNrL3NyYy9zdW4uYyB8IDUgKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitJbmRleDogdXRpbC1saW51eC0yLjI0LjIvbGliZmRpc2svc3JjL3N1bi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdXRpbC1saW51eC0yLjI0LjIub3JpZy9saWJmZGlzay9zcmMvc3VuLmMKKysrKyB1dGlsLWxpbnV4LTIuMjQuMi9saWJmZGlzay9zcmMvc3VuLmMKK0BAIC00MzEsMTAgKzQzMSw5IEBAIHN0YXRpYyBpbnQgc3VuX3ZlcmlmeV9kaXNrbGFiZWwoc3RydWN0IGYKKyAgICAgfQorICAgICB2ZXJpZnlfc3VuX3N0YXJ0cyA9IHN0YXJ0czsKKyAKKy0gICAgcXNvcnRfcihhcnJheSxBUlJBWV9TSVpFKGFycmF5KSxzaXplb2YoYXJyYXlbMF0pLAorLQkgIChpbnQgKCopKGNvbnN0IHZvaWQgKixjb25zdCB2b2lkICosdm9pZCAqKSkgdmVyaWZ5X3N1bl9jbXAsCistCSAgdmVyaWZ5X3N1bl9zdGFydHMpOworLQorKyAgICBxc29ydChhcnJheSxBUlJBWV9TSVpFKGFycmF5KSxzaXplb2YoYXJyYXlbMF0pLAorKyAgICAgICAgIChpbnQgKCopKGNvbnN0IHZvaWQgKixjb25zdCB2b2lkICopKSB2ZXJpZnlfc3VuX2NtcCk7CisrIAorICAgICBpZiAoYXJyYXlbMF0gPT0gLTEpIHsKKyAJZmRpc2tfaW5mbyhjeHQsIF8oIk5vIHBhcnRpdGlvbnMgZGVmaW5lZC4iKSk7CisgCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uYXRpdmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5hdGl2ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjQ5NmRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uYXRpdmUucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorU3VwcG9ydCBvbGRlciBob3N0cyB3aXRoIGxhdGVzdCB1dGlsLWxpbnV4LW5hdGl2ZQorCitta29zdGVtcCBpcyBub3QgZGVmaW5lZCBvbiBvbGRlciBtYWNoaW5lcy4gIFNvIHdlIGRldGVjdCB0aGlzIGFuZAorcHJvdmlkZSBhIGRlZmluZSB0aGF0IHVzZXMgbWtzdGVtcCBpbnN0ZWFkLgorCitPX0NMT0VYRUMgaXMgbm90IGRlZmluZWQgb24gb2xkZXIgbWFjaGluZXMuICBJdCBpcyBob3dldmVyIGRlZmluZWQKK2luIHRoZSAnYy5oJyBoZWFkZXIuICBGaXggdXAgdGhlIHVzZXJzIHRvIGluY2x1ZGUgJ2MuaCcuCisKK2ZkaXNrcy9mZGlza3N1bmxhYmVsLmMgd2FzIG1vZGlmaWVkIHRvIHVzZSBxc29ydF9yLCBob3dldmVyCit0aGlzIGlzIG5vdCBkZWZpbmVkIG9uIG9sZGVyIGhvc3RzLiAgUmV2ZXJ0OgorICBjb21taXQgYzY5YmJjYTljMWY2NjQ1MDk3YmQyMGZlM2EyMWY1YTk5YTJhMDY5OAorICBmZGlzazogKHN1bik6IHVzZSBhc2sgQVBJLCByZW1vdmUgZ2xvYmFsIHZhcmlhYmxlCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCitQYXRjaGVzIHJldmVydCB1cHN0cmVhbSBjaGFuZ2VzIGluIG9yZGVyIHRvIHN1cHBvcnQgb2xkZXIKK21hY2hpbmVzLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAxICsKKyBpbmNsdWRlL2MuaCAgfCA3ICsrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBlYjM2ODBiLi45M2UwMTVmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zMTgsNiArMzE4LDcgQEAgQUNfQ0hFQ0tfRlVOQ1MoWyBcCisgCWxsc2VlayBcCisgCWxzZWVrNjQgXAorIAltZW1wY3B5IFwKKysJbWtvc3RlbXAgXAorIAluYW5vc2xlZXAgXAorIAlvcGVuX21lbXN0cmVhbSBcCisgCXBlcnNvbmFsaXR5IFwKK2RpZmYgLS1naXQgYS9pbmNsdWRlL2MuaCBiL2luY2x1ZGUvYy5oCitpbmRleCBlNDIzZThiLi5jZjMzYjk0IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9jLmgKKysrKyBiL2luY2x1ZGUvYy5oCitAQCAtMjMzLDYgKzIzMywxMyBAQCBzdGF0aWMgaW5saW5lIGludCBkaXJmZChESVIgKmQpCisgI2VuZGlmCisgCisgLyoKKysgKiBta29zdGVtcCByZXBsYWNlbWVudAorKyAqLworKyNpZm5kZWYgSEFWRV9NS09TVEVNUAorKyNkZWZpbmUgbWtvc3RlbXAodGVtcGxhdGUsIGZsYWdzKSBta3N0ZW1wKHRlbXBsYXRlKQorKyNlbmRpZgorKworKy8qCisgICogTUFYSE9TVE5BTUVMRU4gcmVwbGFjZW1lbnQKKyAgKi8KKyBzdGF0aWMgaW5saW5lIHNpemVfdCBnZXRfaG9zdG5hbWVfbWF4KHZvaWQpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmctMi4xNi1tb3VudF9sb2NrX3BhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5nLTIuMTYtbW91bnRfbG9ja19wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NzNkN2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5nLTIuMTYtbW91bnRfbG9ja19wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1RoZSBGSFMgaW5kaWNhdGVzIHRoYXQgL2V0YyBtdXN0IGJlIGNhcGFibGUgb2YgYmVpbmcgbW91bnRlZCBSL08uCisKK1RoZSBGSFMgYWxzbyBpbmRpY2F0ZXMgdGhhdCBsb2NrIGZpbGVzIGJlbG9uZyBpbiAvdmFyL2xvY2ssIGFuZCAvdmFyIG11c3QKK2JlIFIvVyBhcyBzb29uIGFzIHBvc3NpYmxlIGR1cmluZyBib290LgorCitUaGlzIHBhdGNoIG1vdmVzIHRoZSBtdGFiIGxvY2sgZmlsZSBmcm9tIHRoZSBwb3RlbnRpYWxseSBSL08gL2V0YywgdG8gdGhlCitSL1cgL3Zhci9sb2NrIGFyZWEuICBUaGlzIGxvY2sgZmlsZSBpcyB1c2VkIHdoZW4gbW91bnRpbmcgZGlza3MgYW5kIG1ha2luZworb3RoZXIgbW91bnQgYWRqdXN0bWVudHMuICBUaGUgX1BBVEhfTU9VTlRFRF9UTVAgaXMgbm90IGFkanVzdGVkLCBhcyBmYWlsaW5nCit0byB3cml0ZSB0byB0aGlzIGZpbGUgZG9lcyBub3QgY2F1c2UgYW55IGZ1bmN0aW9uYWwgbGltaXRhdGlvbnMuCisKKyhOb3RlLCBpZiAvZXRjIGlzIFIvTywgdGhlbiAvZXRjL210YWIgc2hvdWxkIGJlIGEgc3ltbGluayB0byAvcHJvYy9tb3VudHMpCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tIHV0aWwtbGludXgtbmctMi4xNi9pbmNsdWRlL3BhdGhuYW1lcy5oLm9yaWcKKysrKyB1dGlsLWxpbnV4LW5nLTIuMTYvaW5jbHVkZS9wYXRobmFtZXMuaAorQEAgLTkwLDcgKzkwLDcgQEAKKyAjIGVuZGlmCisgI2VuZGlmCisgCistI2RlZmluZSBfUEFUSF9NT1VOVEVEX0xPQ0sJX1BBVEhfTU9VTlRFRCAifiIKKysjZGVmaW5lIF9QQVRIX01PVU5URURfTE9DSwkiL3Zhci9sb2NrL210YWJ+IgorICNkZWZpbmUgX1BBVEhfTU9VTlRFRF9UTVAJX1BBVEhfTU9VTlRFRCAiLnRtcCIKKyAKKyAjaWZuZGVmIF9QQVRIX0RFVgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uZy1yZXBsYWNlLXNpZ2ludGVycnVwdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmctcmVwbGFjZS1zaWdpbnRlcnJ1cHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxN2E3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmctcmVwbGFjZS1zaWdpbnRlcnJ1cHQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGxvZ2luLXV0aWxzL2xvZ2luLmMgfCA1ICsrKystCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbG9naW4tdXRpbHMvbG9naW4uYyBiL2xvZ2luLXV0aWxzL2xvZ2luLmMKK2luZGV4IGViYjc2ZjUuLjM4Yzg4MWIgMTAwNjQ0CistLS0gYS9sb2dpbi11dGlscy9sb2dpbi5jCisrKysgYi9sb2dpbi11dGlscy9sb2dpbi5jCitAQCAtMTExMCw2ICsxMTEwLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAljaGFyICpidWZmOworIAlpbnQgY2hpbGRBcmdjID0gMDsKKyAJaW50IHJldGNvZGU7CisrCXN0cnVjdCBzaWdhY3Rpb24gYWN0OworIAorIAljaGFyICpwd2RidWYgPSBOVUxMOworIAlzdHJ1Y3QgcGFzc3dkICpwd2QgPSBOVUxMLCBfcHdkOworQEAgLTExMjMsNyArMTEyNCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJdGltZW91dCA9ICh1bnNpZ25lZCBpbnQpZ2V0bG9naW5kZWZzX251bSgiTE9HSU5fVElNRU9VVCIsIExPR0lOX1RJTUVPVVQpOworIAorIAlzaWduYWwoU0lHQUxSTSwgdGltZWRvdXQpOworLQlzaWdpbnRlcnJ1cHQoU0lHQUxSTSwgMSk7CS8qIHdlIGhhdmUgdG8gaW50ZXJydXB0IHN5c2NhbGxzIGxpa2UgaW9jdGwoKSAqLworKwkodm9pZCkgc2lnYWN0aW9uKFNJR0FMUk0sIE5VTEwsICZhY3QpOworKwlhY3Quc2FfZmxhZ3MgJj0gflNBX1JFU1RBUlQ7CisrCXNpZ2FjdGlvbihTSUdBTFJNLCAmYWN0LCBOVUxMKTsKKyAJYWxhcm0odGltZW91dCk7CisgCXNpZ25hbChTSUdRVUlULCBTSUdfSUdOKTsKKyAJc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4XzIuMjYuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4XzIuMjYuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzdkYzZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXhfMi4yNi4yLmJiCkBAIC0wLDAgKzEsMzAgQEAKK01BSk9SX1ZFUlNJT04gPSAiMi4yNiIKK3JlcXVpcmUgdXRpbC1saW51eC5pbmMKKworIyBUbyBzdXBwb3J0IG9sZGVyIGhvc3RzLCB3ZSBuZWVkIHRvIHBhdGNoIGFuZC9vciByZXZlcnQKKyMgc29tZSB1cHN0cmVhbSBjaGFuZ2VzLiAgT25seSBkbyB0aGlzIGZvciBuYXRpdmUgcGFja2FnZXMuCitPTERIT1NUID0gIiIKK09MREhPU1RfY2xhc3MtbmF0aXZlID0gImZpbGU6Ly91dGlsLWxpbnV4LW5hdGl2ZS5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdXRpbC1saW51eC1uYXRpdmUtcXNvcnQucGF0Y2ggXAorCQkJIgorCitTUkNfVVJJICs9ICJmaWxlOi8vdXRpbC1saW51eC1uZy1yZXBsYWNlLXNpZ2ludGVycnVwdC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdXRpbC1saW51eC1uZy0yLjE2LW1vdW50X2xvY2tfcGF0aC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdWNsaWJjLV9fcHJvZ25hbWUtY29uZmxpY3QucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1zYmluZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2ggXAorICAgICAgICAgICAgJHtPTERIT1NUfSBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiOWJkZjM2OGMzOTVmMWI3MDMyNWQwZWIyMmM3ZjQ4ZmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGUyOWJkYTE0MjUyOGE0OGEwYTk1M2MzOWZmNjMwOTM2NTFhNDgwOTA0MmUxNzkwZmJkNmFhODY2M2ZkOTY2NiIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gInNjYW5mX2N2X2FsbG9jX21vZGlmaWVyPW1zIgorCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIiR7U0hBUkVEX0VYVFJBX09FQ09ORn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZmFsbG9jYXRlIFwKKwkJCSAgICAgLS1kaXNhYmxlLXVzZS10dHktZ3JvdXAgXAorIgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZXNkayA9ICIke1NIQVJFRF9FWFRSQV9PRUNPTkZ9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWZhbGxvY2F0ZSBcCisJCQkJLS1kaXNhYmxlLXVzZS10dHktZ3JvdXAgXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy9maWxlcy9DT1BZSU5HLk1JVCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvZmlsZXMvQ09QWUlORy5NSVQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U3ZDU3NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvZmlsZXMvQ09QWUlORy5NSVQKQEAgLTAsMCArMSwxNyBAQAorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCitjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAorU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCitEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKK09USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUgorVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL2ZpbGVzL21vdW50LWNvcHliaW5kIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy9maWxlcy9tb3VudC1jb3B5YmluZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYWVhZjg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy9maWxlcy9tb3VudC1jb3B5YmluZApAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKyMKKyMgUGVyZm9ybSBhIGJpbmQgbW91bnQsIGNvcHlpbmcgZXhpc3RpbmcgZmlsZXMgYXMgd2UgZG8gc28gdG8gZW5zdXJlIHRoZQorIyBvdmVybGFpZCBwYXRoIGhhcyB0aGUgbmVjZXNzYXJ5IGNvbnRlbnQuCisKK2lmIFsgJCMgLWx0IDIgXTsgdGhlbgorICAgIGVjaG8gPiYyICJVc2FnZTogJDAgc3BlYyBtb3VudHBvaW50IFtPUFRJT05TXSIKKyAgICBleGl0IDEKK2ZpCisKK3NwZWM9JDEKK21vdW50cG9pbnQ9JDIKKworaWYgWyAkIyAtZ3QgMiBdOyB0aGVuCisgICAgb3B0aW9ucz0kMworZWxzZQorICAgIG9wdGlvbnM9CitmaQorCitbIC1uICIkb3B0aW9ucyIgXSAmJiBvcHRpb25zPSIsJG9wdGlvbnMiCisKK21rZGlyIC1wICIke3NwZWMlLyp9IgoraWYgWyAtZCAiJG1vdW50cG9pbnQiIF07IHRoZW4KKyAgICBpZiBbICEgLWQgIiRzcGVjIiBdOyB0aGVuCisgICAgICAgIG1rZGlyICIkc3BlYyIKKyAgICAgICAgY3AgLXBQUiAiJG1vdW50cG9pbnQiLy4gIiRzcGVjLyIKKyAgICBmaQorZWxpZiBbIC1mICIkbW91bnRwb2ludCIgXTsgdGhlbgorICAgIGlmIFsgISAtZiAiJHNwZWMiIF07IHRoZW4KKyAgICAgICAgY3AgLXBQICIkbW91bnRwb2ludCIgIiRzcGVjIgorICAgIGZpCitmaQorCittb3VudCAtbyAiYmluZCRvcHRpb25zIiAiJHNwZWMiICIkbW91bnRwb2ludCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvZmlsZXMvdm9sYXRpbGUtYmluZHMuc2VydmljZS5pbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvZmlsZXMvdm9sYXRpbGUtYmluZHMuc2VydmljZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjMzNTVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy9maWxlcy92b2xhdGlsZS1iaW5kcy5zZXJ2aWNlLmluCkBAIC0wLDAgKzEsMTkgQEAKK1tVbml0XQorRGVzY3JpcHRpb249QmluZCBtb3VudCB2b2xhdGlsZSBAd2hlcmVACitEZWZhdWx0RGVwZW5kZW5jaWVzPWZhbHNlCitCZWZvcmU9bG9jYWwtZnMudGFyZ2V0CitSZXF1aXJlc01vdW50c0Zvcj1Ad2hhdHBhcmVudEAgQHdoZXJlcGFyZW50QAorQ29uZGl0aW9uUGF0aElzUmVhZFdyaXRlPUB3aGF0cGFyZW50QAorQ29uZGl0aW9uUGF0aEV4aXN0cz1Ad2hlcmVACitDb25kaXRpb25QYXRoSXNSZWFkV3JpdGU9IUB3aGVyZUAKKworW1NlcnZpY2VdCitUeXBlPW9uZXNob3QKK1JlbWFpbkFmdGVyRXhpdD1ZZXMKK1N0YW5kYXJkT3V0cHV0PXN5c2xvZworVGltZW91dFNlYz0wCitFeGVjU3RhcnQ9L3NiaW4vbW91bnQtY29weWJpbmQgQHdoYXRAIEB3aGVyZUAKK0V4ZWNTdG9wPS9iaW4vdW1vdW50IEB3aGVyZUAKKworW0luc3RhbGxdCitXYW50ZWRCeT1sb2NhbC1mcy50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvdm9sYXRpbGUtYmluZHMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL3ZvbGF0aWxlLWJpbmRzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZTcyNzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL3ZvbGF0aWxlLWJpbmRzLmJiCkBAIC0wLDAgKzEsNzEgQEAKK1NVTU1BUlkgPSAiVm9sYXRpbGUgYmluZCBtb3VudCBzZXR1cCBhbmQgY29uZmlndXJhdGlvbiBmb3IgcmVhZC1vbmx5LXJvb3RmcyIKK0RFU0NSSVBUSU9OID0gIiR7U1VNTUFSWX0iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTUlUO21kNT01NzUwZjNhYTRlYTJiMDBjMmJmMjFiMmIyYTdiNzE0ZCIKKworU1JDX1VSSSA9ICJcCisgICAgZmlsZTovL21vdW50LWNvcHliaW5kIFwKKyAgICBmaWxlOi8vQ09QWUlORy5NSVQgXAorICAgIGZpbGU6Ly92b2xhdGlsZS1iaW5kcy5zZXJ2aWNlLmluIFwKKyIKKworUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IGFsbGFyY2ggc3lzdGVtZCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gInN5c3RlbWQiCisKK1ZPTEFUSUxFX0JJTkRTID89ICJcCisgICAgL3Zhci92b2xhdGlsZS9saWIgL3Zhci9saWJcblwKKyIKK1ZPTEFUSUxFX0JJTkRTW3R5cGVdID0gImxpc3QiCitWT0xBVElMRV9CSU5EU1tzZXBhcmF0b3JdID0gIlxuIgorCitkZWYgdm9sYXRpbGVfc3lzdGVtZF9zZXJ2aWNlcyhkKToKKyAgICBzZXJ2aWNlcyA9IFtdCisgICAgZm9yIGxpbmUgaW4gb2UuZGF0YS50eXBlZF92YWx1ZSgiVk9MQVRJTEVfQklORFMiLCBkKToKKyAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB3aGF0LCB3aGVyZSA9IGxpbmUuc3BsaXQoTm9uZSwgMSkKKyAgICAgICAgc2VydmljZXMuYXBwZW5kKCIlcy5zZXJ2aWNlIiAlIHdoYXRbMTpdLnJlcGxhY2UoIi8iLCAiLSIpKQorICAgIHJldHVybiAiICIuam9pbihzZXJ2aWNlcykKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIiR7QHZvbGF0aWxlX3N5c3RlbWRfc2VydmljZXMoZCl9IgorCitGSUxFU18ke1BOfSArPSAiJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qLnNlcnZpY2UiCisKK2RvX2NvbXBpbGUgKCkgeworICAgIHdoaWxlIHJlYWQgc3BlYyBtb3VudHBvaW50OyBkbworICAgICAgICBpZiBbIC16ICIkc3BlYyIgXTsgdGhlbgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZmkKKworICAgICAgICBzZXJ2aWNlZmlsZT0iJHtzcGVjIy99IgorICAgICAgICBzZXJ2aWNlZmlsZT0iJChlY2hvICIkc2VydmljZWZpbGUiIHwgdHIgLyAtKS5zZXJ2aWNlIgorICAgICAgICBzZWQgLWUgInMjQHdoYXRAIyRzcGVjI2c7IHMjQHdoZXJlQCMkbW91bnRwb2ludCNnIiBcCisgICAgICAgICAgICAtZSAicyNAd2hhdHBhcmVudEAjJHtzcGVjJS8qfSNnOyBzI0B3aGVyZXBhcmVudEAjJHttb3VudHBvaW50JS8qfSNnIiBcCisgICAgICAgICAgICB2b2xhdGlsZS1iaW5kcy5zZXJ2aWNlLmluID4kc2VydmljZWZpbGUKKyAgICBkb25lIDw8RU5ECiske0BkLmdldFZhcignVk9MQVRJTEVfQklORFMnLCBUcnVlKS5yZXBsYWNlKCJcXG4iLCAiXG4iKX0KK0VORAorCisgICAgaWYgWyAtZSB2YXItdm9sYXRpbGUtbGliLnNlcnZpY2UgXTsgdGhlbgorICAgICAgICAjIEFzIHRoZSBzZWVkIGlzIHN0b3JlZCB1bmRlciAvdmFyL2xpYiwgZW5zdXJlIHRoYXQgdGhpcyBzZXJ2aWNlIHJ1bnMKKyAgICAgICAgIyBhZnRlciB0aGUgdm9sYXRpbGUgL3Zhci9saWIgaXMgbW91bnRlZC4KKyAgICAgICAgc2VkIC1pIC1lICIvXkJlZm9yZT0vcy9cJC8gc3lzdGVtZC1yYW5kb20tc2VlZC5zZXJ2aWNlLyIgXAorICAgICAgICAgICAgICAgLWUgIi9eV2FudGVkQnk9L3MvXCQvIHN5c3RlbWQtcmFuZG9tLXNlZWQuc2VydmljZS8iIFwKKyAgICAgICAgICAgICAgIHZhci12b2xhdGlsZS1saWIuc2VydmljZQorICAgIGZpCit9Citkb19jb21waWxlW2RpcnNdID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9zYmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBtb3VudC1jb3B5YmluZCAke0R9JHtiYXNlX3NiaW5kaXJ9LworCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgIGZvciBzZXJ2aWNlIGluICR7U1lTVEVNRF9TRVJWSUNFX3ZvbGF0aWxlLWJpbmRzfTsgZG8KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICRzZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworICAgIGRvbmUKK30KK2RvX2luc3RhbGxbZGlyc10gPSAiJHtXT1JLRElSfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi9zaXRlX2NvbmZpZy9oZWFkZXJzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3NpdGVfY29uZmlnL2hlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAyNjg5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi9zaXRlX2NvbmZpZy9oZWFkZXJzCkBAIC0wLDAgKzEgQEAKK3psaWIuaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvTWFrZWZpbGUtcnVudGVzdHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9NYWtlZmlsZS1ydW50ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWVlYTgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvTWFrZWZpbGUtcnVudGVzdHMucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorQWRkICdwdGVzdCcgdGFyZ2V0IHRvIE1ha2VmaWxlLCB0byBydW4gdGVzdHMgd2l0aG91dCBjaGVja2luZyBkZXBlbmRlbmNpZXMuCisKK1NpZ25lZC1vZmYtYnk6IEFuZGVycyBSb3hlbGwgPGFuZGVycy5yb3hlbGxAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorZGlmZiAtdU5yIGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgorLS0tIGEvTWFrZWZpbGUuaW4JMjAxMy0wNi0xMCAxMzo0ODoxNC4zMjE5NTkxNjIgKzAyMDAKKysrKyBiL01ha2VmaWxlLmluCTIwMTMtMDYtMTAgMTM6NDk6MzYuNjg2NDc2NDQ4ICswMjAwCitAQCAtODMsNiArODMsOSBAQAorIHRlc3Q6IGFsbCB0ZXN0c3RhdGljIHRlc3RzaGFyZWQKKyAKKyB0ZXN0c3RhdGljOiBzdGF0aWMKKysJQG1ha2UgcnVudGVzdHN0YXRpYworKworK3J1bnRlc3RzdGF0aWM6CisgCUBUTVBTVD10bXBzdF8kJDsgXAorIAlpZiBlY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcCB8IC4vbWluaWd6aXAgLWQgJiYgLi9leGFtcGxlICQkVE1QU1QgOyB0aGVuIFwKKyAJICBlY2hvICcJCSoqKiB6bGliIHRlc3QgT0sgKioqJzsgXAorQEAgLTkyLDYgKzk1LDkgQEAKKyAJcm0gLWYgJCRUTVBTVAorIAorIHRlc3RzaGFyZWQ6IHNoYXJlZAorKwlAbWFrZSBydW50ZXN0c2hhcmVkCisrCisrcnVudGVzdHNoYXJlZDoKKyAJQExEX0xJQlJBUllfUEFUSD1gcHdkYDokKExEX0xJQlJBUllfUEFUSCkgOyBleHBvcnQgTERfTElCUkFSWV9QQVRIOyBcCisgCUxEX0xJQlJBUllOMzJfUEFUSD1gcHdkYDokKExEX0xJQlJBUllOMzJfUEFUSCkgOyBleHBvcnQgTERfTElCUkFSWU4zMl9QQVRIOyBcCisgCURZTERfTElCUkFSWV9QQVRIPWBwd2RgOiQoRFlMRF9MSUJSQVJZX1BBVEgpIDsgZXhwb3J0IERZTERfTElCUkFSWV9QQVRIOyBcCitAQCAtMTA1LDYgKzExMSw5IEBACisgCXJtIC1mICQkVE1QU0gKKyAKKyB0ZXN0NjQ6IGFsbDY0CisrCUBtYWtlIHJ1bnRlc3RhbGw2NAorKworK3J1bnRlc3RhbGw2NDoKKyAJQFRNUDY0PXRtcDY0XyQkOyBcCisgCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwNjQgfCAuL21pbmlnemlwNjQgLWQgJiYgLi9leGFtcGxlNjQgJCRUTVA2NDsgdGhlbiBcCisgCSAgZWNobyAnCQkqKiogemxpYiA2NC1iaXQgdGVzdCBPSyAqKionOyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9sZGZsYWdzLXRlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvbGRmbGFncy10ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWM0MGI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvbGRmbGFncy10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitPYmV5IExERkxBR1MgZm9yIHRlc3RzCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHpsaWItMS4yLjgub3JpZy9NYWtlZmlsZS5pbgorKysrIHpsaWItMS4yLjgvTWFrZWZpbGUuaW4KK0BAIC0yNiw3ICsyNiw3IEBAIENGTEFHUz0tTworCisgU0ZMQUdTPS1PCisgTERGTEFHUz0KKy1URVNUX0xERkxBR1M9LUwuIGxpYnouYQorK1RFU1RfTERGTEFHUz0tTC4gJChMREZMQUdTKQorIExEU0hBUkVEPSQoQ0MpCisgQ1BQPSQoQ0MpIC1FCisKK0BAIC0xNzYsMjIgKzE3NiwyMiBAQCBwbGFjZWJvICQoU0hBUkVETElCVik6ICQoUElDX09CSlMpIGxpYnouCisJLUBybWRpciBvYmpzCisKKyBleGFtcGxlJChFWEUpOiBleGFtcGxlLm8gJChTVEFUSUNMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlLm8gJChURVNUX0xERkxBR1MpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlLm8gJChURVNUX0xERkxBR1MpICQoU1RBVElDTElCKQorCisgbWluaWd6aXAkKEVYRSk6IG1pbmlnemlwLm8gJChTVEFUSUNMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcC5vICQoVEVTVF9MREZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgbWluaWd6aXAubyAkKFRFU1RfTERGTEFHUykgJChTVEFUSUNMSUIpCisKKyBleGFtcGxlc2gkKEVYRSk6IGV4YW1wbGUubyAkKFNIQVJFRExJQlYpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlLm8gLUwuICQoU0hBUkVETElCVikKKysJJChDQykgJChDRkxBR1MpIC1vICRAIGV4YW1wbGUubyAkKFRFU1RfTERGTEFHUykgJChTSEFSRURMSUJWKQorCisgbWluaWd6aXBzaCQoRVhFKTogbWluaWd6aXAubyAkKFNIQVJFRExJQlYpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcC5vIC1MLiAkKFNIQVJFRExJQlYpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcC5vICQoVEVTVF9MREZMQUdTKSAkKFNIQVJFRExJQlYpCisKKyBleGFtcGxlNjQkKEVYRSk6IGV4YW1wbGU2NC5vICQoU1RBVElDTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgZXhhbXBsZTY0Lm8gJChURVNUX0xERkxBR1MpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlNjQubyAkKFRFU1RfTERGTEFHUykgJChTVEFUSUNMSUIpCisKKyBtaW5pZ3ppcDY0JChFWEUpOiBtaW5pZ3ppcDY0Lm8gJChTVEFUSUNMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcDY0Lm8gJChURVNUX0xERkxBR1MpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcDY0Lm8gJChURVNUX0xERkxBR1MpICQoU1RBVElDTElCKQorCisgaW5zdGFsbC1saWJzOiAkKExJQlMpCisJLUBpZiBbICEgLWQgJChERVNURElSKSQoZXhlY19wcmVmaXgpICBdOyB0aGVuIG1rZGlyIC1wICQoREVTVERJUikkKGV4ZWNfcHJlZml4KTsgZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAzYjQ4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKKworV2hlbiAvZXRjL2xkLnNvLmNhY2hlIGlzIHdyaXRlYWJsZSBieSB1c2VyIHJ1bm5pbmcgYml0YmFrZSB0aGVuIGl0IGNyZWF0ZXMgaW52YWxpZCBjYWNoZSAKKyhpbiBteSBjYXNlIGxpYnN0ZGMrKy5zbyBjYW5ub3QgYmUgZm91bmQgYWZ0ZXIgYnVpbGRpbmcgemxpYigtbmF0aXZlKSBhbmQgSSBoYXZlIHRvIGNhbGwgCit0b3VjaCAqL2xpYnN0ZGMrKy5zbyAmJiAvc2Jpbi9sZGNvbmZpZyB0byBmaXggaXQuCisKK1NvIHJlbW92ZSBsZGNvbmZpZyBjYWxsIGZyb20gbWFrZSBpbnN0YWxsLWxpYnMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK2RpZmYgLXVOciB6bGliLTEuMi42Lm9yaWcvTWFrZWZpbGUuaW4gemxpYi0xLjIuNi9NYWtlZmlsZS5pbgorLS0tIHpsaWItMS4yLjYub3JpZy9NYWtlZmlsZS5pbgkyMDEyLTAxLTI4IDIzOjQ4OjUwLjAwMDAwMDAwMCArMDEwMAorKysrIHpsaWItMS4yLjYvTWFrZWZpbGUuaW4JMjAxMi0wMi0xMyAxNTozODoyMC41Nzc3MDA3MjMgKzAxMDAKK0BAIC0xOTksNyArMTk5LDYgQEAKKyAJICBybSAtZiAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCTSk7IFwKKyAJICBsbiAtcyAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUIpOyBcCisgCSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCTSk7IFwKKy0JICAoJChMRENPTkZJRykgfHwgdHJ1ZSkgID4vZGV2L251bGwgMj4mMTsgXAorIAlmaQorIAljcCB6bGliLjMgJChERVNURElSKSQobWFuM2RpcikKKyAJY2htb2QgNjQ0ICQoREVTVERJUikkKG1hbjNkaXIpL3psaWIuMwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NGQ5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9ydW4tcHRlc3QKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK21ha2UgLWsgcnVudGVzdHN0YXRpYyBydW50ZXN0c2hhcmVkIHwgc2VkIC1yIC1lICdzL14oXHMrXCorICguKz8pIHRlc3QgT0sgXCorKS9cMVxuUEFTUzogXDIvJyAtZSAncy9eKFxzK1wqKyAoLis/KSB0ZXN0IEZBSUxFRCBcKispL1wxXG5GQUlMOiBcMi8nCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYl8xLjIuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliXzEuMi44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NzBhZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYl8xLjIuOC5iYgpAQCAtMCwwICsxLDU5IEBACitTVU1NQVJZID0gIlpsaWIgQ29tcHJlc3Npb24gTGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlpsaWIgaXMgYSBnZW5lcmFsLXB1cnBvc2UsIHBhdGVudC1mcmVlLCBsb3NzbGVzcyBkYXRhIGNvbXByZXNzaW9uIFwKK2xpYnJhcnkgd2hpY2ggaXMgdXNlZCBieSBtYW55IGRpZmZlcmVudCBwcm9ncmFtcy4iCitIT01FUEFHRSA9ICJodHRwOi8vemxpYi5uZXQvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJabGliIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vemxpYi5oO2JlZ2lubGluZT00O2VuZGxpbmU9MjM7bWQ1PWZkZTYxMmRmMWU1OTMzYzQyOGI3Mzg0NGEwYzQ5NGZkIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuemxpYi5uZXQvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS1ydW50ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sZGZsYWdzLXRlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjI4ZjEyMDVkOGRkMjAwMWYyNmZlYzFlOGMyY2ViZTM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgzMWRmMDQzMjM2ZGY4ZTlhNzY2N2I5ZTNiYjM3ZTFmY2IxMjIwYTBmMTYzYjZkZTI2MjY3NzRiOTU5MGQwNTciCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIgorCitpbmhlcml0IHB0ZXN0CisKK2RvX2NvbmZpZ3VyZSAoKXsKKwkuL2NvbmZpZ3VyZSAtLXByZWZpeD0ke3ByZWZpeH0gLS1zaGFyZWQgLS1saWJkaXI9JHtsaWJkaXJ9Cit9CisKK2RvX2NvbXBpbGUgKCl7CisJb2VfcnVubWFrZQorfQorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2Ugc3RhdGljIHNoYXJlZAorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgREVTVERJUj0ke0R9IGluc3RhbGwKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlpbnN0YWxsICR7Qn0vTWFrZWZpbGUgICAke0R9JHtQVEVTVF9QQVRIfQorCWluc3RhbGwgJHtCfS9leGFtcGxlICAgICR7RH0ke1BURVNUX1BBVEh9CisJaW5zdGFsbCAke0J9L21pbmlnemlwICAgJHtEfSR7UFRFU1RfUEFUSH0KKwlpbnN0YWxsICR7Qn0vZXhhbXBsZXNoICAke0R9JHtQVEVTVF9QQVRIfQorCWluc3RhbGwgJHtCfS9taW5pZ3ppcHNoICR7RH0ke1BURVNUX1BBVEh9Cit9CisKKyMgTW92ZSB6bGliIHNoYXJlZCBsaWJyYXJpZXMgZm9yIHRhcmdldCBidWlsZHMgdG8gJGJhc2VfbGliZGlyIHNvIHRoZSBsaWJyYXJ5CisjIGNhbiBiZSB1c2VkIGluIGVhcmx5IGJvb3QgYmVmb3JlICRwcmVmaXggaXMgbW91bnRlZC4KK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKKwlpZiBbICR7YmFzZV9saWJkaXJ9ICE9ICR7bGliZGlyfSBdCisJdGhlbgorCQlta2RpciAtcCAke0R9LyR7YmFzZV9saWJkaXJ9CisJCW12ICR7RH0vJHtsaWJkaXJ9L2xpYnouc28uKiAke0R9LyR7YmFzZV9saWJkaXJ9CisJCWxpYm5hbWU9YHJlYWRsaW5rICR7RH0vJHtsaWJkaXJ9L2xpYnouc29gCisJCWxuIC1zZiAke0BvZS5wYXRoLnJlbGF0aXZlKCIke2xpYmRpcn0iLCAiJHtiYXNlX2xpYmRpcn0iKX0vJGxpYm5hbWUgJHtEfSR7bGliZGlyfS9saWJ6LnNvCisJZmkKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmUuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3Y2M5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LW5hdGl2ZS5pbmMKQEAgLTAsMCArMSw3MCBAQAorcmVxdWlyZSBhcHQuaW5jCitpbmhlcml0IG5hdGl2ZQorCitERVBFTkRTICs9ICJkcGtnLW5hdGl2ZSBnZXR0ZXh0LW5hdGl2ZSBkYi1uYXRpdmUgY3VybC1uYXRpdmUgeHotbmF0aXZlIgorUEFDS0FHRVMgPSAiIgorVVNFX05MUyA9ICJ5ZXMiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kYl9saW5raW5nX2hhY2sucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtUmV2ZXJ0LWFsd2F5cy1ydW4tZHBrZy1jb25maWd1cmUtYS1hdC10aGUtZW5kLW9mLW91ci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1yZW1vdmUtV3N1Z2dlc3QtYXR0cmlidXRlLWZyb20tQ0ZMQUdTLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC10aGUtZ2NjLXZlcnNpb24tY2hlY2sucGF0Y2ggXAorIgorCitweXRob24gZG9faW5zdGFsbCAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19pbnN0YWxsX2Jhc2UnLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9faW5zdGFsbF9jb25maWcnLCBkKQorfQorCitweXRob24gZG9faW5zdGFsbF9jb25maWcgKCkgeworICAgIGluZGlyID0gb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFyKCdGSUxFJywxKSkKKyAgICBpbmZpbGUgPSBmaWxlKG9lLnBhdGguam9pbihpbmRpciwgJ2ZpbGVzJywgJ2FwdC5jb25mJyksICdyJykKKyAgICBkYXRhID0gaW5maWxlLnJlYWQoKQorICAgIGluZmlsZS5jbG9zZSgpCisKKyAgICBkYXRhID0gZC5leHBhbmQoZGF0YSkKKworICAgIG91dGRpciA9IG9lLnBhdGguam9pbihkLmdldFZhcignRCcsIFRydWUpLCBkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCAnYXB0JykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3V0ZGlyKToKKyAgICAgICAgb3MubWFrZWRpcnMob3V0ZGlyKQorCisgICAgb3V0cGF0aCA9IG9lLnBhdGguam9pbihvdXRkaXIsICdhcHQuY29uZi5zYW1wbGUnKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvdXRwYXRoKToKKyAgICAgICAgb3V0ZmlsZSA9IGZpbGUob3V0cGF0aCwgJ3cnKQorICAgICAgICBvdXRmaWxlLndyaXRlKGRhdGEpCisgICAgICAgIG91dGZpbGUuY2xvc2UoKQorfQorCitkb19pbnN0YWxsX2Jhc2UgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWNkcm9tICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtZ2V0ICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtY29uZmlnICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtY2FjaGUgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1zb3J0cGtncyAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWV4dHJhY3R0ZW1wbGF0ZXMgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1mdHBhcmNoaXZlICR7RH0ke2JpbmRpcn0vCisKKwlvZV9saWJpbnN0YWxsIC1zbyAtQyBiaW4gbGliYXB0LXByaXZhdGUgJHtEfSR7bGliZGlyfS8KKworCW9lX2xpYmluc3RhbGwgLXNvIC1DIGJpbiBsaWJhcHQtcGtnJEdMSUJDX1ZFUiRMSUJTVERDUFBfVkVSICR7RH0ke2xpYmRpcn0vCisJb2VfbGliaW5zdGFsbCAtc28gLUMgYmluIGxpYmFwdC1pbnN0JEdMSUJDX1ZFUiRMSUJTVERDUFBfVkVSICR7RH0ke2xpYmRpcn0vCisKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vYXB0L21ldGhvZHMKKwlpbnN0YWxsIC1tIDA3NTUgYmluL21ldGhvZHMvKiAke0R9JHtsaWJkaXJ9L2FwdC9tZXRob2RzLworCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9kc2VsZWN0L2Rlc2MuYXB0ICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdC8gCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZHNlbGVjdC9uYW1lcyAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCWluc3RhbGwgLW0gMDc1NSAke1N9L2RzZWxlY3QvaW5zdGFsbCAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCWluc3RhbGwgLW0gMDc1NSAke1N9L2RzZWxlY3Qvc2V0dXAgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9kc2VsZWN0L3VwZGF0ZSAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcHQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwdC9hcHQuY29uZi5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcHQvcHJlZmVyZW5jZXMuZAorCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2FwdC9saXN0cy9wYXJ0aWFsCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9jYWNoZS9hcHQvYXJjaGl2ZXMvcGFydGlhbAorCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9sb2cvYXB0LworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmVfMS4wLjEwLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LW5hdGl2ZV8xLjAuMTAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTY2MGRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmVfMS4wLjEwLjEuYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIGFwdC1uYXRpdmUuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ub2NvbmZpZ3VyZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbm8tY3VybC5wYXRjaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtcGFja2FnZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LXBhY2thZ2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NTNhYTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LXBhY2thZ2UuaW5jCkBAIC0wLDAgKzEsNzggQEAKK2FwdC1tYW5wYWdlcz0iZG9jL2FwdC1jYWNoZS44IFwKKwkgICAgICBkb2MvYXB0LWNkcm9tLjggXAorCSAgICAgIGRvYy9hcHQtY29uZmlnLjggXAorCSAgICAgIGRvYy9hcHQtZ2V0LjggXAorCSAgICAgIGRvYy9hcHQuOCBcCisJICAgICAgZG9jL2FwdC5jb25mLjUgXAorCSAgICAgIGRvYy9hcHRfcHJlZmVyZW5jZXMuNSBcCisJICAgICAgZG9jL3NvdXJjZXMubGlzdC41IgorYXB0LXV0aWxzLW1hbnBhZ2VzPSJkb2MvYXB0LWV4dHJhY3R0ZW1wbGF0ZXMuMSBcCisJCSAgICBkb2MvYXB0LXNvcnRwa2dzLjEiCisKK2RlZiBnZXRfZmlsZXNfYXB0X2RvYyhkLCBiYiwgbWFucGFnZXMpOgorICAgIGltcG9ydCByZQorICAgIG1hbnBhZ2VzID0gcmUuc3ViKHInXGJkb2MvKFxTKykvKFxTKylcLlwxXC4oLilcYicsIHInJHttYW5kaXJ9L1wxL21hblwzL1wyLlwzJywgbWFucGFnZXMpCisgICAgbWFucGFnZXMgPSByZS5zdWIocidcYmRvYy8oXFMrKVwuKC4pXGInLCByJyR7bWFuZGlyfS9tYW5cMi9cMS5cMicsIG1hbnBhZ2VzKQorICAgIHJldHVybiBtYW5wYWdlcworCitkZWYgZ2V0X2NvbW1hbmRzX2FwdF9kb2MoZCwgYmIsIG1hbnBhZ2VzKToKKyAgICBzID0gbGlzdCgpCisgICAgX19kaXJfY2FjaGVfXyA9IGxpc3QoKQorICAgIGZvciBtIGluIG1hbnBhZ2VzLnNwbGl0KCk6CisgICAgICAgIGRlc3QgPSBnZXRfZmlsZXNfYXB0X2RvYyhkLCBiYiwgbSkKKyAgICAgICAgZGlyID0gb3MucGF0aC5kaXJuYW1lKGRlc3QpCisgICAgICAgIGlmIG5vdCBkaXIgaW4gX19kaXJfY2FjaGVfXzoKKyAgICAgICAgICAgIHMuYXBwZW5kKCJpbnN0YWxsIC1kICR7RH0vJXMiICUgZGlyKQorICAgICAgICAgICAgX19kaXJfY2FjaGVfXy5hcHBlbmQoZGlyKQorICAgICAgICBzLmFwcGVuZCgiaW5zdGFsbCAtbSAwNjQ0ICVzICR7RH0vJXMiICUgKG0sIGRlc3QpKQorICAgIHJldHVybiAiXG4iLmpvaW4ocykKKworUEFDS0FHRVMgKz0gIiR7UE59LXV0aWxzICR7UE59LXV0aWxzLWRvYyIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9hcHQtY2Ryb20gJHtiaW5kaXJ9L2FwdC1nZXQgXAorCSAgICAgICAke2JpbmRpcn0vYXB0LWNvbmZpZyAke2JpbmRpcn0vYXB0LWNhY2hlIFwKKwkgICAgICAgJHtsaWJkaXJ9L2FwdCAke2xpYmRpcn0vbGliYXB0Ki5zby4qIFwKKwkgICAgICAgJHtsb2NhbHN0YXRlZGlyfSAke3N5c2NvbmZkaXJ9IFwKKwkgICAgICAgJHtsaWJkaXJ9L2Rwa2ciCitGSUxFU18ke1BOfS11dGlscyA9ICIke2JpbmRpcn0vYXB0LXNvcnRwa2dzICR7YmluZGlyfS9hcHQtZXh0cmFjdHRlbXBsYXRlcyIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke0BnZXRfZmlsZXNfYXB0X2RvYyhkLCBiYiwgZC5nZXRWYXIoJ2FwdC1tYW5wYWdlcycsIFRydWUpKX0gXAorCQkgICAke2RvY2Rpcn0vYXB0IgorRklMRVNfJHtQTn0tdXRpbHMtZG9jID0gIiR7QGdldF9maWxlc19hcHRfZG9jKGQsIGJiLCBkLmdldFZhcignYXB0LXV0aWxzLW1hbnBhZ2VzJywgVHJ1ZSkpfSIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2xpYmRpcn0vbGliYXB0Ki5zbyAke2luY2x1ZGVkaXJ9IgorCitkb19pbnN0YWxsICgpIHsKKwlzZXQgLXgKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1rZXkgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1jZHJvbSAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWdldCAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWNvbmZpZyAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWNhY2hlICR7RH0ke2JpbmRpcn0vCisKKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1zb3J0cGtncyAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWV4dHJhY3R0ZW1wbGF0ZXMgJHtEfSR7YmluZGlyfS8KKworCW9lX2xpYmluc3RhbGwgLXNvIC1DIGJpbiBsaWJhcHQtcGtnICR7RH0ke2xpYmRpcn0KKwlvZV9saWJpbnN0YWxsIC1zbyAtQyBiaW4gbGliYXB0LWluc3QgJHtEfSR7bGliZGlyfQorCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2FwdC9tZXRob2RzCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9tZXRob2RzLyogJHtEfSR7bGliZGlyfS9hcHQvbWV0aG9kcy8KKworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0CisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZHNlbGVjdC9kZXNjLmFwdCAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCWluc3RhbGwgLW0gMDY0NCAke1N9L2RzZWxlY3QvbmFtZXMgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9kc2VsZWN0L2luc3RhbGwgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9kc2VsZWN0L3NldHVwICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdC8gCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vZHNlbGVjdC91cGRhdGUgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXB0CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcHQvYXB0LmNvbmYuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXB0L3NvdXJjZXMubGlzdC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcHQvcHJlZmVyZW5jZXMuZAorCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2FwdC9saXN0cy9wYXJ0aWFsCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9jYWNoZS9hcHQvYXJjaGl2ZXMvcGFydGlhbAorCWluc3RhbGwgLWQgJHtEfSR7ZG9jZGlyfS9hcHQvZXhhbXBsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9kb2MvZXhhbXBsZXMvKiAke0R9JHtkb2NkaXJ9L2FwdC9leGFtcGxlcy8KKworCWluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0vYXB0LXBrZy8KKwlpbnN0YWxsIC1tIDA2NDQgaW5jbHVkZS9hcHQtcGtnLyouaCAke0R9JHtpbmNsdWRlZGlyfS9hcHQtcGtnLworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjQ4YjlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC5pbmMKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJBZHZhbmNlZCBmcm9udC1lbmQgZm9yIGRwa2ciCitMSUNFTlNFID0gIkdQTHYyLjArIgorU0VDVElPTiA9ICJiYXNlIgorCitTUkNfVVJJID0gImh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLzIwMTUwODA1VDA5NDkyOFovcG9vbC9tYWluL2EvJHtCUE59LyR7QlBOfV8ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vdXNlLWhvc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFrZXJhY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm8tbmxzLWRwa2cucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWdjYy00LjYtbnVsbC1ub3QtZGVmaW5lZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90cnVuY2F0ZS1maWxlbmFtZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub2RvYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLWNvbmZpZ3VyZS1pbi1tYWtlZmlsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLXRlc3QucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNjUwNWM0Mjk3YjMzOGFkYjIwODdjZTg3YmJjNGEyNzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2ZiMWRlOTU5ODM2M2M0MTY1OTFkNDllM2MyODU0NThlMDk1YjAzNWU2YzA2ZDViOTQ0YTU0ZTE1ZmM5YjU0MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuR1BMO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitFWFRSQV9BVVRPUkVDT05GID0gIi0tZXhjbHVkZT1hdXRvcG9pbnQsYXV0b2hlYWRlciIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgcm0gLXJmICR7U30vYnVpbGRsaWIvY29uZmlnLnN1YgorICAgIHJtIC1yZiAke1N9L2J1aWxkbGliL2NvbmZpZy5ndWVzcworfQorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9hcHQvbWV0aG9kcy8uZGVidWcvIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLVJldmVydC1hbHdheXMtcnVuLWRwa2ctY29uZmlndXJlLWEtYXQtdGhlLWVuZC1vZi1vdXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LzAwMDEtUmV2ZXJ0LWFsd2F5cy1ydW4tZHBrZy1jb25maWd1cmUtYS1hdC10aGUtZW5kLW9mLW91ci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzMwNjliCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLVJldmVydC1hbHdheXMtcnVuLWRwa2ctY29uZmlndXJlLWEtYXQtdGhlLWVuZC1vZi1vdXIucGF0Y2gKQEAgLTAsMCArMSwzNzggQEAKK0Zyb20gMTA2Nzk3ZjFjNjZmYTU3OGRhZDIxZmQ5MzgwYmY5ZDU3NjU3M2RmZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMjIgTWF5IDIwMTUgMDg6MDU6MTUgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICJhbHdheXMgcnVuICdkcGtnIC0tY29uZmlndXJlIC1hJyBhdCB0aGUgZW5kIG9mIG91cgorIGRwa2cgY2FsbGluZ3MiCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1RoaXMgcmV2ZXJ0cyBjb21taXQgYTJhNzVmZjQ1MTZmNzYwOWY0YzU1YjQyMjcwYWJiOGQwODk0M2M2MCwgd2hpY2gKK2Fsd2F5cyBydW4gJ2Rwa2cgLS1jb25maWd1cmUgLWEnIGF0IHRoZSBlbmQgb2Ygb3VyIGRwa2cgY2FsbGluZ3MsCitidXQgaXQgZG9lcyBub3Qgd29yayBmb3IgY3Jvc3MtY29tcGlsZSwgc2luY2UgdGhlIHJvb3RmcyBkaXIgY2FuIG5vdAorYmUgcGFzc2VkIGludG8gZHBrZywgYW5kIGxlYWQgdG8gdGhlIGJlbG93IHNpbWlsYXIgZXJyb3I6CisgICAtLS0tLS0tCisgICB8bWtkaXI6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICcvdXNyL2xpYi9vcGtnJzogUGVybWlzc2lvbiBkZW5pZWQKKyAgIC0tLS0tLS0KKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgYXB0LXBrZy9kZWIvZHBrZ3BtLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOSArLS0KKyB0ZXN0L2ludGVncmF0aW9uL2ZyYW1ld29yayAgICAgICAgICAgICAgICAgICAgICAgICB8IDI1ICsrKystLS0tCisgdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZCAgICAgICAgICAgICAgfCA2NyArKysrKysrKystLS0tLS0tLS0tCisgdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1kZWI4MjIgICAgICAgfCAxOCArKy0tLS0KKyB0ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWVycm9yICAgICAgICB8ICAyICstCisgLi4uZXN0LWJ1Zy03Njk2MDktdHJpZ2dlcnMtc3RpbGwtcGVuZGluZy1hZnRlci1ydW4gfCA3NSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgLi4uL3Rlc3Qtbm8tZmRzLWxlYWtlZC10by1tYWludGFpbmVyLXNjcmlwdHMgICAgICAgfCAgNiArLQorIDcgZmlsZXMgY2hhbmdlZCwgNTYgaW5zZXJ0aW9ucygrKSwgMTQ2IGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDc1NSB0ZXN0L2ludGVncmF0aW9uL3Rlc3QtYnVnLTc2OTYwOS10cmlnZ2Vycy1zdGlsbC1wZW5kaW5nLWFmdGVyLXJ1bgorCitkaWZmIC0tZ2l0IGEvYXB0LXBrZy9kZWIvZHBrZ3BtLmNjIGIvYXB0LXBrZy9kZWIvZHBrZ3BtLmNjCitpbmRleCBiMTg3ZWZiLi5mMjY5NzY0IDEwMDY0NAorLS0tIGEvYXB0LXBrZy9kZWIvZHBrZ3BtLmNjCisrKysgYi9hcHQtcGtnL2RlYi9kcGtncG0uY2MKK0BAIC0xMDQ5LDEyICsxMDQ5LDYgQEAgdm9pZCBwa2dEUGtnUE06OkJ1aWxkUGFja2FnZXNQcm9ncmVzc01hcCgpCisgCSBQYWNrYWdlc1RvdGFsKys7CisgICAgICAgfQorICAgIH0KKy0gICAvKiBvbmUgZXh0cmE6IFdlIGRvbid0IHdhbnQgdGhlIHByb2dyZXNzIGJhciB0byByZWFjaCAxMDAlLCBlc3BlY2lhbGx5IG5vdAorLSAgICAgIGlmIHdlIGNhbGwgZHBrZyAtLWNvbmZpZ3VyZSAtLXBlbmRpbmcgYW5kIHByb2Nlc3MgYSBidW5jaCBvZiB0cmlnZ2VycworLSAgICAgIHdoaWxlIHNob3dpbmcgMTAwJS4gQWxzbywgc3BpbmRvd24gdGFrZXMgYSB3aGlsZSwgc28gbmV2ZXIgcmVhY2hpbmcgMTAwJQorLSAgICAgIGlzIHdheSBtb3JlIGNvcnJlY3QgdGhhbiByZWFjaGluZyAxMDAlIHdoaWxlIHN0aWxsIGRvaW5nIHN0dWZmIGV2ZW4gaWYKKy0gICAgICBkb2luZyBpdCB0aGlzIHdheSBpcyBzbGlnaHRseSBiZW5kaW5nIHRoZSBydWxlcyAqLworLSAgICsrUGFja2FnZXNUb3RhbDsKKyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp9fX0qLworICNpZiAoQVBUX1BLR19NQUpPUiA+PSA0ICYmIEFQVF9QS0dfTUlOT1IgPCAxMykKK0BAIC0xMjk0LDggKzEyODgsOSBAQCBib29sIHBrZ0RQa2dQTTo6R29Ob0FCSUJyZWFrKEFQVDo6UHJvZ3Jlc3M6OlBhY2thZ2VNYW5hZ2VyICpwcm9ncmVzcykKKyAKKyAgICAvLyBzdXBwb3J0IHN1YnByZXNzaW5nIG9mIHRyaWdnZXJzIHByb2Nlc3NpbmcgZm9yIHNwZWNpYWwKKyAgICAvLyBjYXNlcyBsaWtlIGQtaSB0aGF0IHJ1bnMgdGhlIHRyaWdnZXJzIGhhbmRsaW5nIG1hbnVhbGx5CisrICAgYm9vbCBjb25zdCBTbWFydENvbmYgPSAoX2NvbmZpZy0+RmluZCgiUGFja2FnZU1hbmFnZXI6OkNvbmZpZ3VyZSIsICJhbGwiKSAhPSAiYWxsIik7CisgICAgYm9vbCBjb25zdCBUcmlnZ2Vyc1BlbmRpbmcgPSBfY29uZmlnLT5GaW5kQigiRFBrZzo6VHJpZ2dlcnNQZW5kaW5nIiwgZmFsc2UpOworLSAgIGlmIChfY29uZmlnLT5GaW5kQigiRFBrZzo6Q29uZmlndXJlUGVuZGluZyIsIHRydWUpID09IHRydWUpCisrICAgaWYgKF9jb25maWctPkZpbmRCKCJEUGtnOjpDb25maWd1cmVQZW5kaW5nIiwgU21hcnRDb25mKSA9PSB0cnVlKQorICAgICAgIExpc3QucHVzaF9iYWNrKEl0ZW0oSXRlbTo6Q29uZmlndXJlUGVuZGluZywgUGtnSXRlcmF0b3IoKSkpOworIAorICAgIC8vIGZvciB0aGUgcHJvZ3Jlc3MKK2RpZmYgLS1naXQgYS90ZXN0L2ludGVncmF0aW9uL2ZyYW1ld29yayBiL3Rlc3QvaW50ZWdyYXRpb24vZnJhbWV3b3JrCitpbmRleCA3MGFkMzgxLi4wMDY3MmFkIDEwMDY0NAorLS0tIGEvdGVzdC9pbnRlZ3JhdGlvbi9mcmFtZXdvcmsKKysrKyBiL3Rlc3QvaW50ZWdyYXRpb24vZnJhbWV3b3JrCitAQCAtMTE3OCwxMyArMTE3OCwxMCBAQCB0ZXN0bm9wYWNrYWdlKCkgeworIAlmaQorIH0KKyAKKy10ZXN0ZHBrZ3N0YXR1cygpIHsKKy0JbG9jYWwgU1RBVEU9IiQxIgorLQlsb2NhbCBOUj0iJDIiCistCXNoaWZ0IDIKKy0JbXNndGVzdCAiVGVzdCB0aGF0ICROUiBwYWNrYWdlKHMpIGFyZSBpbiBzdGF0ZSAkU1RBVEUgd2l0aCIgImRwa2cgLWwgJCoiCistCWxvY2FsIFBLR1M9IiQoZHBrZyAtbCAiJEAiIDI+L2Rldi9udWxsIHwgZ3JlcCAiXiR7U1RBVEV9IiB8IHdjIC1sKSIKKy0JaWYgWyAiJFBLR1MiICE9ICROUiBdOyB0aGVuCisrdGVzdGRwa2dpbnN0YWxsZWQoKSB7CisrCW1zZ3Rlc3QgIlRlc3QgZm9yIGNvcnJlY3RseSBpbnN0YWxsZWQgcGFja2FnZShzKSB3aXRoIiAiZHBrZyAtbCAkKiIKKysJbG9jYWwgUEtHUz0iJChkcGtnIC1sICIkQCIgMj4vZGV2L251bGwgfCBncmVwICdeaScgfCB3YyAtbCkiCisrCWlmIFsgIiRQS0dTIiAhPSAkIyBdOyB0aGVuCisgCQllY2hvID4mMiAkUEtHUworIAkJZHBrZyAtbCAiJEAiIHwgZ3JlcCAnXlthLXpdJyA+JjIKKyAJCW1zZ2ZhaWwKK0BAIC0xMTkzLDEyICsxMTkwLDE2IEBAIHRlc3RkcGtnc3RhdHVzKCkgeworIAlmaQorIH0KKyAKKy10ZXN0ZHBrZ2luc3RhbGxlZCgpIHsKKy0JdGVzdGRwa2dzdGF0dXMgJ2lpJyAiJCMiICIkQCIKKy19CistCisgdGVzdGRwa2dub3RpbnN0YWxsZWQoKSB7CistCXRlc3RkcGtnc3RhdHVzICdpaScgJzAnICIkQCIKKysJbXNndGVzdCAiVGVzdCBmb3IgY29ycmVjdGx5IG5vdC1pbnN0YWxsZWQgcGFja2FnZShzKSB3aXRoIiAiZHBrZyAtbCAkKiIKKysJbG9jYWwgUEtHUz0iJChkcGtnIC1sICIkQCIgMj4gL2Rldi9udWxsIHwgZ3JlcCAnXmknIHwgd2MgLWwpIgorKwlpZiBbICIkUEtHUyIgIT0gMCBdOyB0aGVuCisrCQllY2hvCisrCQlkcGtnIC1sICIkQCIgfCBncmVwICdeW2Etel0nID4mMgorKwkJbXNnZmFpbAorKwllbHNlCisrCQltc2dwYXNzCisrCWZpCisgfQorIAorIHRlc3RtYXJrZWRhdXRvKCkgeworZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkCitpbmRleCA2OGNjMDQzLi5kNzJlN2U3IDEwMDc1NQorLS0tIGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZAorKysrIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZAorQEAgLTE5LDE0ICsxOSwxMyBAQCB0ZXN0ZXF1YWwgImRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCisgZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKKyBwbXN0YXR1czpkcGtnLWV4ZWM6MDpSdW5uaW5nIGRwa2cKKyBwbXN0YXR1czp0ZXN0aW5nOjA6SW5zdGFsbGluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjE2LjY2Njc6UHJlcGFyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6MzMuMzMzMzpVbnBhY2tpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo1MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo1MDpSdW5uaW5nIGRwa2cKKy1wbXN0YXR1czp0ZXN0aW5nOjUwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6NjYuNjY2NzpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjgzLjMzMzM6SW5zdGFsbGVkIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo4My4zMzMzOlJ1bm5pbmcgZHBrZyIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKytwbXN0YXR1czp0ZXN0aW5nOjIwOlByZXBhcmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjQwOlVucGFja2luZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjYwOlByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6ZHBrZy1leGVjOjYwOlJ1bm5pbmcgZHBrZworK3Btc3RhdHVzOnRlc3Rpbmc6NjA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo4MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjEwMDpJbnN0YWxsZWQgdGVzdGluZyAoYW1kNjQpIiBjYXQgYXB0LXByb2dyZXNzLmxvZworIAorICMgdXBncmFkZQorIGV4ZWMgMz4gYXB0LXByb2dyZXNzLmxvZworQEAgLTM1LDE0ICszNCwxMyBAQCB0ZXN0ZXF1YWwgImRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCisgZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKKyBwbXN0YXR1czpkcGtnLWV4ZWM6MDpSdW5uaW5nIGRwa2cKKyBwbXN0YXR1czp0ZXN0aW5nOjA6SW5zdGFsbGluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjE2LjY2Njc6UHJlcGFyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6MzMuMzMzMzpVbnBhY2tpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo1MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo1MDpSdW5uaW5nIGRwa2cKKy1wbXN0YXR1czp0ZXN0aW5nOjUwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6NjYuNjY2NzpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjgzLjMzMzM6SW5zdGFsbGVkIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo4My4zMzMzOlJ1bm5pbmcgZHBrZyIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKytwbXN0YXR1czp0ZXN0aW5nOjIwOlByZXBhcmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjQwOlVucGFja2luZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjYwOlByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6ZHBrZy1leGVjOjYwOlJ1bm5pbmcgZHBrZworK3Btc3RhdHVzOnRlc3Rpbmc6NjA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo4MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjEwMDpJbnN0YWxsZWQgdGVzdGluZyAoYW1kNjQpIiBjYXQgYXB0LXByb2dyZXNzLmxvZworIAorICMgcmVpbnN0YWxsCisgZXhlYyAzPiBhcHQtcHJvZ3Jlc3MubG9nCitAQCAtNTEsMjQgKzQ5LDIyIEBAIHRlc3RlcXVhbCAiZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKKyBkbHN0YXR1czoxOjA6UmV0cmlldmluZyBmaWxlIDEgb2YgMQorIHBtc3RhdHVzOmRwa2ctZXhlYzowOlJ1bm5pbmcgZHBrZworIHBtc3RhdHVzOnRlc3Rpbmc6MDpJbnN0YWxsaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6MTYuNjY2NzpQcmVwYXJpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzozMy4zMzMzOlVucGFja2luZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjUwOlByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6ZHBrZy1leGVjOjUwOlJ1bm5pbmcgZHBrZworLXBtc3RhdHVzOnRlc3Rpbmc6NTA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo2Ni42NjY3OkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6ODMuMzMzMzpJbnN0YWxsZWQgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6ZHBrZy1leGVjOjgzLjMzMzM6UnVubmluZyBkcGtnIiBjYXQgYXB0LXByb2dyZXNzLmxvZworK3Btc3RhdHVzOnRlc3Rpbmc6MjA6UHJlcGFyaW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6NDA6VW5wYWNraW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6NjA6UHJlcGFyaW5nIHRvIGNvbmZpZ3VyZSB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czpkcGtnLWV4ZWM6NjA6UnVubmluZyBkcGtnCisrcG1zdGF0dXM6dGVzdGluZzo2MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjgwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6MTAwOkluc3RhbGxlZCB0ZXN0aW5nIChhbWQ2NCkiIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCisgCisgIyBhbmQgcmVtb3ZlCisgZXhlYyAzPiBhcHQtcHJvZ3Jlc3MubG9nCisgdGVzdHN1Y2Nlc3MgYXB0Z2V0IHJlbW92ZSB0ZXN0aW5nIC15IC1vIEFQVDo6U3RhdHVzLUZkPTMKKyB0ZXN0ZXF1YWwgInBtc3RhdHVzOmRwa2ctZXhlYzowOlJ1bm5pbmcgZHBrZworIHBtc3RhdHVzOnRlc3Rpbmc6MDpSZW1vdmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjI1OlByZXBhcmluZyBmb3IgcmVtb3ZhbCBvZiB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjUwOlJlbW92aW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6NzU6UmVtb3ZlZCB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czpkcGtnLWV4ZWM6NzU6UnVubmluZyBkcGtnIiBjYXQgYXB0LXByb2dyZXNzLmxvZworK3Btc3RhdHVzOnRlc3Rpbmc6MzMuMzMzMzpQcmVwYXJpbmcgZm9yIHJlbW92YWwgb2YgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo2Ni42NjY3OlJlbW92aW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6MTAwOlJlbW92ZWQgdGVzdGluZyAoYW1kNjQpIiBjYXQgYXB0LXByb2dyZXNzLmxvZworIAorICMgaW5zdGFsbCBub24tbmF0aXZlIGFuZCBlbnN1cmUgd2UgZ2V0IHByb3BlciBwcm9ncmVzcyBpbmZvCisgZXhlYyAzPiBhcHQtcHJvZ3Jlc3MubG9nCitAQCAtNzksMTMgKzc1LDEyIEBAIHRlc3RlcXVhbCAiZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKKyBkbHN0YXR1czoxOjA6UmV0cmlldmluZyBmaWxlIDEgb2YgMQorIHBtc3RhdHVzOmRwa2ctZXhlYzowOlJ1bm5pbmcgZHBrZworIHBtc3RhdHVzOnRlc3RpbmcyOjA6SW5zdGFsbGluZyB0ZXN0aW5nMiAoaTM4NikKKy1wbXN0YXR1czp0ZXN0aW5nMjoxNi42NjY3OlByZXBhcmluZyB0ZXN0aW5nMiAoaTM4NikKKy1wbXN0YXR1czp0ZXN0aW5nMjozMy4zMzMzOlVucGFja2luZyB0ZXN0aW5nMiAoaTM4NikKKy1wbXN0YXR1czp0ZXN0aW5nMjo1MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcyIChpMzg2KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo1MDpSdW5uaW5nIGRwa2cKKy1wbXN0YXR1czp0ZXN0aW5nMjo1MDpDb25maWd1cmluZyB0ZXN0aW5nMiAoaTM4NikKKy1wbXN0YXR1czp0ZXN0aW5nMjo2Ni42NjY3OkNvbmZpZ3VyaW5nIHRlc3RpbmcyIChpMzg2KQorLXBtc3RhdHVzOnRlc3RpbmcyOjgzLjMzMzM6SW5zdGFsbGVkIHRlc3RpbmcyIChpMzg2KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo4My4zMzMzOlJ1bm5pbmcgZHBrZyIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKytwbXN0YXR1czp0ZXN0aW5nMjoyMDpQcmVwYXJpbmcgdGVzdGluZzIgKGkzODYpCisrcG1zdGF0dXM6dGVzdGluZzI6NDA6VW5wYWNraW5nIHRlc3RpbmcyIChpMzg2KQorK3Btc3RhdHVzOnRlc3RpbmcyOjYwOlByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZzIgKGkzODYpCisrcG1zdGF0dXM6ZHBrZy1leGVjOjYwOlJ1bm5pbmcgZHBrZworK3Btc3RhdHVzOnRlc3RpbmcyOjYwOkNvbmZpZ3VyaW5nIHRlc3RpbmcyIChpMzg2KQorK3Btc3RhdHVzOnRlc3RpbmcyOjgwOkNvbmZpZ3VyaW5nIHRlc3RpbmcyIChpMzg2KQorK3Btc3RhdHVzOnRlc3RpbmcyOjEwMDpJbnN0YWxsZWQgdGVzdGluZzIgKGkzODYpIiBjYXQgYXB0LXByb2dyZXNzLmxvZworIAorIHJtIC1mIGFwdC1wcm9ncmVzcyoubG9nCitkaWZmIC0tZ2l0IGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1kZWI4MjIgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWRlYjgyMgoraW5kZXggYmFkYzk4NS4uOWQyMjc5NCAxMDA3NTUKKy0tLSBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZGViODIyCisrKysgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWRlYjgyMgorQEAgLTI3LDQxICsyNywzNyBAQCBNZXNzYWdlOiBJbnN0YWxsaW5nIHRlc3RpbmcgKGFtZDY0KQorIAorIFN0YXR1czogcHJvZ3Jlc3MKKyBQYWNrYWdlOiB0ZXN0aW5nOmFtZDY0CistUGVyY2VudDogMTYuNjY2NworK1BlcmNlbnQ6IDIwCisgTWVzc2FnZTogUHJlcGFyaW5nIHRlc3RpbmcgKGFtZDY0KQorIAorIFN0YXR1czogcHJvZ3Jlc3MKKyBQYWNrYWdlOiB0ZXN0aW5nOmFtZDY0CistUGVyY2VudDogMzMuMzMzMworK1BlcmNlbnQ6IDQwCisgTWVzc2FnZTogVW5wYWNraW5nIHRlc3RpbmcgKGFtZDY0KQorIAorIFN0YXR1czogcHJvZ3Jlc3MKKyBQYWNrYWdlOiB0ZXN0aW5nOmFtZDY0CistUGVyY2VudDogNTAKKytQZXJjZW50OiA2MAorIE1lc3NhZ2U6IFByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZyAoYW1kNjQpCisgCisgU3RhdHVzOiBwcm9ncmVzcworLVBlcmNlbnQ6IDUwCisrUGVyY2VudDogNjAKKyBNZXNzYWdlOiBSdW5uaW5nIGRwa2cKKyAKKyBTdGF0dXM6IHByb2dyZXNzCisgUGFja2FnZTogdGVzdGluZzphbWQ2NAorLVBlcmNlbnQ6IDUwCisrUGVyY2VudDogNjAKKyBNZXNzYWdlOiBDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKyAKKyBTdGF0dXM6IHByb2dyZXNzCisgUGFja2FnZTogdGVzdGluZzphbWQ2NAorLVBlcmNlbnQ6IDY2LjY2NjcKKytQZXJjZW50OiA4MAorIE1lc3NhZ2U6IENvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorIAorIFN0YXR1czogcHJvZ3Jlc3MKKyBQYWNrYWdlOiB0ZXN0aW5nOmFtZDY0CistUGVyY2VudDogODMuMzMzMworK1BlcmNlbnQ6IDEwMAorIE1lc3NhZ2U6IEluc3RhbGxlZCB0ZXN0aW5nIChhbWQ2NCkKKy0KKy1TdGF0dXM6IHByb2dyZXNzCistUGVyY2VudDogODMuMzMzMworLU1lc3NhZ2U6IFJ1bm5pbmcgZHBrZworICIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKyAKKyAKK2RpZmYgLS1naXQgYS90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWVycm9yIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1lcnJvcgoraW5kZXggNjMyMzAwNy4uYTQ3MDk1YiAxMDA3NTUKKy0tLSBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZXJyb3IKKysrKyBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZXJyb3IKK0BAIC0xOCw3ICsxOCw3IEBAIHNldHVwYXB0YXJjaGl2ZQorIGV4ZWMgMz4gYXB0LXByb2dyZXNzLmxvZworIHRlc3RmYWlsdXJlIGFwdGdldCBpbnN0YWxsIGZvbzEgZm9vMiAteSAtbyBBUFQ6OlN0YXR1cy1GZD0zCisgbXNndGVzdCAiRW5zdXJlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZSIKKy1pZiBncmVwIC1xICJhcHRhcmNoaXZlL3Bvb2wvZm9vMl8wLjguMTVfYW1kNjQuZGViOjM2LjM2MzY6dHJ5aW5nIHRvIG92ZXJ3cml0ZSAnL3Vzci9iaW4vZmlsZS1jb25mbGljdCcsIHdoaWNoIGlzIGFsc28gaW4gcGFja2FnZSBmb28xIDAuOC4xNSIgYXB0LXByb2dyZXNzLmxvZzsgdGhlbgorK2lmIGdyZXAgLXEgImFwdGFyY2hpdmUvcG9vbC9mb28yXzAuOC4xNV9hbWQ2NC5kZWI6NDA6dHJ5aW5nIHRvIG92ZXJ3cml0ZSAnL3Vzci9iaW4vZmlsZS1jb25mbGljdCcsIHdoaWNoIGlzIGFsc28gaW4gcGFja2FnZSBmb28xIDAuOC4xNSIgYXB0LXByb2dyZXNzLmxvZzsgdGhlbgorIAltc2dwYXNzCisgZWxzZQorIAljYXQgYXB0LXByb2dyZXNzLmxvZworZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1idWctNzY5NjA5LXRyaWdnZXJzLXN0aWxsLXBlbmRpbmctYWZ0ZXItcnVuIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWJ1Zy03Njk2MDktdHJpZ2dlcnMtc3RpbGwtcGVuZGluZy1hZnRlci1ydW4KK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQoraW5kZXggMTQ2ZmE3Ni4uMDAwMDAwMAorLS0tIGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWJ1Zy03Njk2MDktdHJpZ2dlcnMtc3RpbGwtcGVuZGluZy1hZnRlci1ydW4KKysrKyAvZGV2L251bGwKK0BAIC0xLDc1ICswLDAgQEAKKy0jIS9iaW4vc2gKKy1zZXQgLWUKKy0KKy1URVNURElSPSQocmVhZGxpbmsgLWYgJChkaXJuYW1lICQwKSkKKy0uICRURVNURElSL2ZyYW1ld29yaworLQorLXNldHVwZW52aXJvbm1lbnQKKy1jb25maWdhcmNoaXRlY3R1cmUgJ2FtZDY0JworLQorLW1zZ3Rlc3QgJ0NoZWNrIGlmIGluc3RhbGxlZCBkcGtnIHN1cHBvcnRzJyAnbm9hd2FpdCB0cmlnZ2VyJworLWlmIGRwa2ctY2hlY2tidWlsZGRlcHMgLWQgJ2Rwa2cgKD49IDEuMTYuMSknIC9kZXYvbnVsbDsgdGhlbgorLQltc2dwYXNzCistZWxzZQorLQltc2dza2lwICdkcGtnIHZlcnNpb24gdG9vIG9sZCcKKy0JZXhpdCAwCistZmkKKy1jb25maWdkcGtnbm9vcGNocm9vdAorLQorLWJ1aWxkdHJpZ2dlcnBhY2thZ2VzKCkgeworLQlsb2NhbCBUWVBFPSIkMSIKKy0Jc2V0dXBzaW1wbGVuYXRpdmVwYWNrYWdlICJ0cmlnZ2VyYWJsZS0kVFlQRSIgJ2FsbCcgJzEuMCcgJ3Vuc3RhYmxlJyAiRGVwZW5kczogdHJpZ2RlcGVuZHMtJFRZUEUiCistCUJVSUxERElSPSJpbmNvbWluZy90cmlnZ2VyYWJsZS0ke1RZUEV9LTEuMCIKKy0JY2F0ID4ke0JVSUxERElSfS9kZWJpYW4vcG9zdGluc3QgPDxFT0YKKy0jIS9iaW4vc2gKKy1pZiBbICJcJDEiID0gJ3RyaWdnZXJlZCcgXTsgdGhlbgorLQlscyAtbCAvcHJvYy9zZWxmL2ZkLworLWZpCistRU9GCistCWVjaG8gIiRUWVBFIC91c3Ivc2hhcmUvZG9jIiA+ICR7QlVJTERESVJ9L2RlYmlhbi90cmlnZ2VycworLQlidWlsZHBhY2thZ2UgIiRCVUlMRERJUiIgJ3Vuc3RhYmxlJyAnbWFpbicgJ25hdGl2ZScKKy0Jcm0gLXJmICIkQlVJTERESVIiCistCWJ1aWxkc2ltcGxlbmF0aXZlcGFja2FnZSAidHJpZ2RlcGVuZHMtJFRZUEUiICdhbGwnICcxLjAnICd1bnN0YWJsZScKKy19CistCistI2J1aWxkdHJpZ2dlcnBhY2thZ2VzICdpbnRlcmVzdCcKKy1idWlsZHRyaWdnZXJwYWNrYWdlcyAnaW50ZXJlc3Qtbm9hd2FpdCcKKy1idWlsZHNpbXBsZW5hdGl2ZXBhY2thZ2UgInRyaWdzdHVmZiIgJ2FsbCcgJzEuMCcgJ3Vuc3RhYmxlJworLQorLXNldHVwYXB0YXJjaGl2ZQorLQorLXJ1bnRlc3RzKCkgeworLQlsb2NhbCBUWVBFPSIkMSIKKy0JbXNnbXNnICdXb3JraW5nIHdpdGggdHJpZ2dlciB0eXBlJyAiJFRZUEUiCistCXRlc3RzdWNjZXNzIGFwdGdldCBpbnN0YWxsIHRyaWdnZXJhYmxlLSRUWVBFIC15CistCWNwIHJvb3RkaXIvdG1wL3Rlc3RzdWNjZXNzLm91dHB1dCB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdHN1Y2Nlc3MgZ3JlcCAnXlJFV1JJVEUgJyB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdGRwa2dpbnN0YWxsZWQgdHJpZ2dlcmFibGUtJFRZUEUgdHJpZ2RlcGVuZHMtJFRZUEUKKy0KKy0JdGVzdHN1Y2Nlc3MgYXB0Z2V0IGluc3RhbGwgdHJpZ2RlcGVuZHMtJFRZUEUgLXkgLS1yZWluc3RhbGwKKy0JY3Agcm9vdGRpci90bXAvdGVzdHN1Y2Nlc3Mub3V0cHV0IHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0c3VjY2VzcyBncmVwICdeUkVXUklURSAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0c3VjY2VzcyBncmVwICcgcm9vdCByb290ICcgdGVybWluYWwub3V0cHV0CistCXRlc3RkcGtnaW5zdGFsbGVkIHRyaWdnZXJhYmxlLSRUWVBFIHRyaWdkZXBlbmRzLSRUWVBFCistCistCXRlc3RzdWNjZXNzIGFwdGdldCBpbnN0YWxsIHRyaWdzdHVmZiAteQorLQljcCByb290ZGlyL3RtcC90ZXN0c3VjY2Vzcy5vdXRwdXQgdGVybWluYWwub3V0cHV0CistCXRlc3RzdWNjZXNzIGdyZXAgJ15SRVdSSVRFICcgdGVybWluYWwub3V0cHV0CistCXRlc3RzdWNjZXNzIGdyZXAgJyByb290IHJvb3QgJyB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdGRwa2dpbnN0YWxsZWQgdHJpZ2dlcmFibGUtJFRZUEUgdHJpZ2RlcGVuZHMtJFRZUEUgdHJpZ3N0dWZmCistCistCXRlc3RzdWNjZXNzIGFwdGdldCBwdXJnZSB0cmlnc3R1ZmYgLXkKKy0JY3Agcm9vdGRpci90bXAvdGVzdHN1Y2Nlc3Mub3V0cHV0IHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0c3VjY2VzcyBncmVwICdeUkVXUklURSAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0c3VjY2VzcyBncmVwICcgcm9vdCByb290ICcgdGVybWluYWwub3V0cHV0CistCXRlc3RkcGtnaW5zdGFsbGVkIHRyaWdnZXJhYmxlLSRUWVBFIHRyaWdkZXBlbmRzLSRUWVBFCistCXRlc3RkcGtnbm90aW5zdGFsbGVkIHRyaWdzdHVmZgorLQorLQl0ZXN0c3VjY2VzcyBhcHRnZXQgcHVyZ2UgdHJpZ2RlcGVuZHMtJFRZUEUgLXkKKy0JY3Agcm9vdGRpci90bXAvdGVzdHN1Y2Nlc3Mub3V0cHV0IHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0ZmFpbHVyZSBncmVwICdeUkVXUklURSAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0ZmFpbHVyZSBncmVwICcgcm9vdCByb290ICcgdGVybWluYWwub3V0cHV0CistCXRlc3RkcGtnbm90aW5zdGFsbGVkIHRyaWdnZXJhYmxlLSRUWVBFIHRyaWdkZXBlbmRzLSRUWVBFCistfQorLSNydW50ZXN0cyAnaW50ZXJlc3QnCistcnVudGVzdHMgJ2ludGVyZXN0LW5vYXdhaXQnCitkaWZmIC0tZ2l0IGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LW5vLWZkcy1sZWFrZWQtdG8tbWFpbnRhaW5lci1zY3JpcHRzIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LW5vLWZkcy1sZWFrZWQtdG8tbWFpbnRhaW5lci1zY3JpcHRzCitpbmRleCA0MWMwNTcwLi5kMzk2MGQ3IDEwMDc1NQorLS0tIGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LW5vLWZkcy1sZWFrZWQtdG8tbWFpbnRhaW5lci1zY3JpcHRzCisrKysgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3Qtbm8tZmRzLWxlYWtlZC10by1tYWludGFpbmVyLXNjcmlwdHMKK0BAIC01OSw4ICs1OSw3IEBAIHN0YXJ0dXAgcGFja2FnZXMgY29uZmlndXJlCisgY29uZmlndXJlICRQS0dOQU1FIDEuMCA8bm9uZT4KKyBzdGF0dXMgdW5wYWNrZWQgJFBLR05BTUUgMS4wCisgc3RhdHVzIGhhbGYtY29uZmlndXJlZCAkUEtHTkFNRSAxLjAKKy1zdGF0dXMgaW5zdGFsbGVkICRQS0dOQU1FIDEuMAorLXN0YXJ0dXAgcGFja2FnZXMgY29uZmlndXJlIiBjdXQgLWYgMy0gLWQnICcgcm9vdGRpci92YXIvbG9nL2Rwa2cubG9nCisrc3RhdHVzIGluc3RhbGxlZCAkUEtHTkFNRSAxLjAiIGN1dCAtZiAzLSAtZCcgJyByb290ZGlyL3Zhci9sb2cvZHBrZy5sb2cKKyB9CisgY2hlY2tpbnN0YWxsCisgCitAQCAtODUsOCArODQsNyBAQCBzdGF0dXMgY29uZmlnLWZpbGVzICRQS0dOQU1FIDEuMAorIHN0YXR1cyBjb25maWctZmlsZXMgJFBLR05BTUUgMS4wCisgc3RhdHVzIGNvbmZpZy1maWxlcyAkUEtHTkFNRSAxLjAKKyBzdGF0dXMgY29uZmlnLWZpbGVzICRQS0dOQU1FIDEuMAorLXN0YXR1cyBub3QtaW5zdGFsbGVkICRQS0dOQU1FIDxub25lPgorLXN0YXJ0dXAgcGFja2FnZXMgY29uZmlndXJlIiBjdXQgLWYgMy0gLWQnICcgcm9vdGRpci92YXIvbG9nL2Rwa2cubG9nCisrc3RhdHVzIG5vdC1pbnN0YWxsZWQgJFBLR05BTUUgPG5vbmU+IiBjdXQgLWYgMy0gLWQnICcgcm9vdGRpci92YXIvbG9nL2Rwa2cubG9nCisgfQorIGNoZWNrcHVyZ2UKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLWZpeC10aGUtZ2NjLXZlcnNpb24tY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LzAwMDEtZml4LXRoZS1nY2MtdmVyc2lvbi1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWVhNTZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLWZpeC10aGUtZ2NjLXZlcnNpb24tY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwxNjAgQEAKK0Zyb20gMTVjNmVmNmE4MjdkMzY4MWFkMDZlODYyZDI3YWIzZGZiODRjYjY4NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMjcgTWF5IDIwMTUgMTQ6MzA6MjggKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZml4IHRoZSBnY2MgdmVyc2lvbiBjaGVjaworCitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKKworIkdDQyBkaWFnbm9zdGljIHB1c2giIGlzIGdjYyA0LjYgZmVhdHVyZSwgZ2NjIDQuNC43IG9uIGNlbnRvcyBkaWQgbm90IGtub3cgaXQKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgYXB0LXBrZy9jYWNoZXNldC5oICAgICAgICAgICB8ICA0ICsrLS0KKyBhcHQtcGtnL2RlYi9kZWJzcmNyZWNvcmRzLmNjIHwgMTIgKysrKysrLS0tLS0tCisgYXB0LXBrZy9zcmNyZWNvcmRzLmNjICAgICAgICB8ICA0ICsrLS0KKyBhcHQtcGtnL3NyY3JlY29yZHMuaCAgICAgICAgIHwgIDQgKystLQorIGFwdC1wa2cvdmVuZG9ybGlzdC5jYyAgICAgICAgfCAgNCArKy0tCisgNSBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2FwdC1wa2cvY2FjaGVzZXQuaCBiL2FwdC1wa2cvY2FjaGVzZXQuaAoraW5kZXggYjcyMjliYy4uOGNjMjkxNyAxMDA2NDQKKy0tLSBhL2FwdC1wa2cvY2FjaGVzZXQuaAorKysrIGIvYXB0LXBrZy9jYWNoZXNldC5oCitAQCAtMTE5LDEyICsxMTksMTIgQEAgcHVibGljOgorIAkJaW5saW5lIHN0ZDo6c3RyaW5nIEZ1bGxOYW1lKGJvb2wgY29uc3QgUHJldHR5KSBjb25zdCB7IHJldHVybiBnZXRQa2coKS5GdWxsTmFtZShQcmV0dHkpOyB9CisgCQlpbmxpbmUgc3RkOjpzdHJpbmcgRnVsbE5hbWUoKSBjb25zdCB7IHJldHVybiBnZXRQa2coKS5GdWxsTmFtZSgpOyB9CisgCQlBUFRfREVQUkVDQVRFRCBpbmxpbmUgY29uc3QgY2hhciAqU2VjdGlvbigpIGNvbnN0IHsKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgI2VuZGlmCisgCSAgIHJldHVybiBnZXRQa2coKS5TZWN0aW9uKCk7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorICNlbmRpZgorIAkJfQorZGlmZiAtLWdpdCBhL2FwdC1wa2cvZGViL2RlYnNyY3JlY29yZHMuY2MgYi9hcHQtcGtnL2RlYi9kZWJzcmNyZWNvcmRzLmNjCitpbmRleCA0OWEzNDhkLi40YmM5ZGNmIDEwMDY0NAorLS0tIGEvYXB0LXBrZy9kZWIvZGVic3JjcmVjb3Jkcy5jYworKysrIGIvYXB0LXBrZy9kZWIvZGVic3JjcmVjb3Jkcy5jYworQEAgLTEyNiwxMyArMTI2LDEzIEBAIGJvb2wgZGViU3JjUmVjb3JkUGFyc2VyOjpGaWxlcyhzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlPiAmRikKKyAgICBmb3IgKHN0ZDo6dmVjdG9yPHBrZ1NyY1JlY29yZHM6OkZpbGUyPjo6Y29uc3RfaXRlcmF0b3IgZjIgPSBGMi5iZWdpbigpOyBmMiAhPSBGMi5lbmQoKTsgKytmMikKKyAgICB7CisgICAgICAgcGtnU3JjUmVjb3Jkczo6RmlsZTIgZjsKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgI2VuZGlmCisgICAgICAgZi5NRDVIYXNoID0gZjItPk1ENUhhc2g7CisgICAgICAgZi5TaXplID0gZjItPlNpemU7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorICNlbmRpZgorICAgICAgIGYuUGF0aCA9IGYyLT5QYXRoOworQEAgLTE5MCwxNCArMTkwLDE0IEBAIGJvb2wgZGViU3JjUmVjb3JkUGFyc2VyOjpGaWxlczIoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZTI+ICZMaXN0KQorIAkgLy8gd2UgaGF2ZSBpdCBhbHJlYWR5LCBzdG9yZSB0aGUgbmV3IGhhc2ggYW5kIGJlIGRvbmUKKyAJIGlmIChmaWxlICE9IExpc3QuZW5kKCkpCisgCSB7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkvLyBzZXQgZm9yIGNvbXBhdGliaWxpdHkgb25seSwgc28gd2FybiB1c2VycyBub3QgdXMKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAjZW5kaWYKKyAJICAgIGlmIChjaGVja3N1bUZpZWxkID09ICJGaWxlcyIpCisgCSAgICAgICBmaWxlLT5NRDVIYXNoID0gaGFzaDsKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisgI2VuZGlmCisgCSAgICAvLyBhbiBlcnJvciBoZXJlIGluZGljYXRlcyB0aGF0IHdlIGhhdmUgdHdvIGRpZmZlcmVudCBoYXNoZXMgZm9yIHRoZSBzYW1lIGZpbGUKK0BAIC0yMTIsNyArMjEyLDcgQEAgYm9vbCBkZWJTcmNSZWNvcmRQYXJzZXI6OkZpbGVzMihzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlMj4gJkxpc3QpCisgCSBGLkZpbGVTaXplID0gc3RydG91bGwoc2l6ZS5jX3N0cigpLCBOVUxMLCAxMCk7CisgCSBGLkhhc2hlcy5wdXNoX2JhY2soaGFzaFN0cmluZyk7CisgCistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkvLyBzZXQgZm9yIGNvbXBhdGliaWxpdHkgb25seSwgc28gd2FybiB1c2VycyBub3QgdXMKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKK0BAIC0yMjAsNyArMjIwLDcgQEAgYm9vbCBkZWJTcmNSZWNvcmRQYXJzZXI6OkZpbGVzMihzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlMj4gJkxpc3QpCisgCSBGLlNpemUgPSBGLkZpbGVTaXplOworIAkgaWYgKGNoZWNrc3VtRmllbGQgPT0gIkZpbGVzIikKKyAJICAgIEYuTUQ1SGFzaCA9IGhhc2g7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorICNlbmRpZgorIAorZGlmZiAtLWdpdCBhL2FwdC1wa2cvc3JjcmVjb3Jkcy5jYyBiL2FwdC1wa2cvc3JjcmVjb3Jkcy5jYworaW5kZXggMzE3NWVlNy4uMzQwZTc5NiAxMDA2NDQKKy0tLSBhL2FwdC1wa2cvc3JjcmVjb3Jkcy5jYworKysrIGIvYXB0LXBrZy9zcmNyZWNvcmRzLmNjCitAQCAtMTYwLDcgKzE2MCw3IEBAIGJvb2wgcGtnU3JjUmVjb3Jkczo6UGFyc2VyOjpGaWxlczIoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZTI+ICZGMikvKnt7eyovCisgICAgZm9yIChzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlPjo6Y29uc3RfaXRlcmF0b3IgZiA9IEYuYmVnaW4oKTsgZiAhPSBGLmVuZCgpOyArK2YpCisgICAgeworICAgICAgIHBrZ1NyY1JlY29yZHM6OkZpbGUyIGYyOworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAjZW5kaWYKK0BAIC0xNjgsNyArMTY4LDcgQEAgYm9vbCBwa2dTcmNSZWNvcmRzOjpQYXJzZXI6OkZpbGVzMihzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlMj4gJkYyKS8qe3t7Ki8KKyAgICAgICBmMi5TaXplID0gZi0+U2l6ZTsKKyAgICAgICBmMi5IYXNoZXMucHVzaF9iYWNrKEhhc2hTdHJpbmcoIk1ENVN1bSIsIGYtPk1ENUhhc2gpKTsKKyAgICAgICBmMi5GaWxlU2l6ZSA9IGYtPlNpemU7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorICNlbmRpZgorICAgICAgIGYyLlBhdGggPSBmLT5QYXRoOworZGlmZiAtLWdpdCBhL2FwdC1wa2cvc3JjcmVjb3Jkcy5oIGIvYXB0LXBrZy9zcmNyZWNvcmRzLmgKK2luZGV4IGRkZTIyYmQuLjkxZjgwNjEgMTAwNjQ0CistLS0gYS9hcHQtcGtnL3NyY3JlY29yZHMuaAorKysrIGIvYXB0LXBrZy9zcmNyZWNvcmRzLmgKK0BAIC0zMCw3ICszMCw3IEBAIGNsYXNzIHBrZ1NyY1JlY29yZHMKKyB7CisgICAgcHVibGljOgorIAorLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJLy8gZW5zdXJlIHRoYXQgY29uLSAmIGRlLXN0cnVjdG9yIGRvbid0IHRyaWdnZXIgdGhpcyB3YXJuaW5nCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCitAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBwa2dTcmNSZWNvcmRzCisgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIEZpbGVTaXplOworICAgICAgIEhhc2hTdHJpbmdMaXN0IEhhc2hlczsKKyAgICB9OworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAjZW5kaWYKKyAKK2RpZmYgLS1naXQgYS9hcHQtcGtnL3ZlbmRvcmxpc3QuY2MgYi9hcHQtcGtnL3ZlbmRvcmxpc3QuY2MKK2luZGV4IGZiMzNmZjEuLmJhMWQzYzMgMTAwNjQ0CistLS0gYS9hcHQtcGtnL3ZlbmRvcmxpc3QuY2MKKysrKyBiL2FwdC1wa2cvdmVuZG9ybGlzdC5jYworQEAgLTExLDcgKzExLDcgQEAKKyAKKyAjaW5jbHVkZSA8YXB0aTE4bi5oPgorIAorLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAjZW5kaWYKK0BAIC0xNjMsNiArMTYzLDYgQEAgY29uc3QgVmVuZG9yKiBwa2dWZW5kb3JMaXN0OjpGaW5kVmVuZG9yKGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4gR1BHVk91dHB1dCkJLyoKKyB9CisgCQkJCQkJCQkJLyp9fX0qLworIAorLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAjZW5kaWYKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLXJlbW92ZS1Xc3VnZ2VzdC1hdHRyaWJ1dGUtZnJvbS1DRkxBR1MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LzAwMDEtcmVtb3ZlLVdzdWdnZXN0LWF0dHJpYnV0ZS1mcm9tLUNGTEFHUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzQyZmYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLXJlbW92ZS1Xc3VnZ2VzdC1hdHRyaWJ1dGUtZnJvbS1DRkxBR1MucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSAyYmZmN2VlMDZhNGY5NmU3ZDMyNjk5MWQ2MWZiODZmOGFhNjUxZDQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAyNyBNYXkgMjAxNSAwOTo0ODo0NSArMDgwMAorU3ViamVjdDogW1BBVENIXSByZW1vdmUgV3N1Z2dlc3QtYXR0cmlidXRlIGZyb20gQ1hYRkxBR1MKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1dzdWdnZXN0LWF0dHJpYnV0ZSBpcyBHQ0MgNC42IGZlYXR1cmUsIGNlbnRvczYgaXMgdXNpbmcgR0NDCis0LjQuNyB3aGljaCB1bmtub3duIHRoaXMgZmxhZywgc28gcmVtb3ZlIGl0IGZyb20gQ1hYRkxBR1MKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluIHwgMSAtCisgdGVzdC9saWJhcHQvbWFrZWZpbGUgICAgICAgIHwgMSAtCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluIGIvYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluCitpbmRleCBiMGE4ZDlkLi45MWVkMDExIDEwMDY0NAorLS0tIGEvYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluCisrKysgYi9idWlsZGxpYi9lbnZpcm9ubWVudC5tYWsuaW4KK0BAIC0xMSw3ICsxMSw2IEBAIENQUEZMQUdTKz0gQENQUEZMQUdTQCBAREVGU0AgLURfUkVFTlRSQU5UIC1EX0ZPUlRJRllfU09VUkNFPTIKKyBDWFggPSBAQ1hYQAorIENYWEZMQUdTKz0gQENYWEZMQUdTQCAtV2FsbCAtV2V4dHJhCisgQ1hYRkxBR1MrPSAtV2Nhc3QtYWxpZ24gLVdsb2dpY2FsLW9wIC1XcmVkdW5kYW50LWRlY2xzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVd1bnNhZmUtbG9vcC1vcHRpbWl6YXRpb25zCistQ1hYRkxBR1MrPSAtV3N1Z2dlc3QtYXR0cmlidXRlPXB1cmUgLVdzdWdnZXN0LWF0dHJpYnV0ZT1jb25zdCAtV3N1Z2dlc3QtYXR0cmlidXRlPW5vcmV0dXJuCisgIyBhIGJpdCB0b28gcGVkYW50aWMgdG8gYmUgcnVuIGJ5IGRlZmF1bHQKKyAjQ1hYRkxBR1MrPSAtV3BlZGFudGljIC1Xbm8tbG9uZy1sb25nIC1Xbm8tdmxhIC1Xbm8tdmFyaWFkaWMtbWFjcm9zCisgTlVNX1BST0NTID0gQE5VTV9QUk9DU0AKK2RpZmYgLS1naXQgYS90ZXN0L2xpYmFwdC9tYWtlZmlsZSBiL3Rlc3QvbGliYXB0L21ha2VmaWxlCitpbmRleCA3ZjIzYWNlLi5lODA1ZjEzIDEwMDY0NAorLS0tIGEvdGVzdC9saWJhcHQvbWFrZWZpbGUKKysrKyBiL3Rlc3QvbGliYXB0L21ha2VmaWxlCitAQCAtMzksNyArMzksNiBAQCBDWFhGTEFHUyArPSAtcHRocmVhZAorICMgZGlzYWJsZSBzb21lIGZsYWdzIGZvciBndGVzdCBhZ2FpbgorIENYWEZMQUdTKz0gLVduby1taXNzaW5nLWRlY2xhcmF0aW9ucworIENYWEZMQUdTKz0gLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycworLUNYWEZMQUdTKz0gLVduby1zdWdnZXN0LWF0dHJpYnV0ZT1wdXJlIC1Xbm8tc3VnZ2VzdC1hdHRyaWJ1dGU9Y29uc3QgLVduby1zdWdnZXN0LWF0dHJpYnV0ZT1ub3JldHVybgorIAorICMgQWxsIEdvb2dsZSBUZXN0IGhlYWRlcnMuICBVc3VhbGx5IHlvdSBzaG91bGRuJ3QgY2hhbmdlIHRoaXMgZGVmaW5pdGlvbi4KKyBHVEVTVF9IRUFERVJTID0gL3Vzci9pbmNsdWRlL2d0ZXN0LyouaCBcCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvZGlzYWJsZS1jb25maWd1cmUtaW4tbWFrZWZpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2Rpc2FibGUtY29uZmlndXJlLWluLW1ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMmY2NGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2Rpc2FibGUtY29uZmlndXJlLWluLW1ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK0Rpc2FibGUgY29uZmlndXJlIGF0IGNvbXBpbGF0aW9uIHN0YWdlCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworSW5kZXg6IGFwdC0wLjkuNy43L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXB0LTAuOS43Ljcub3JpZy9NYWtlZmlsZQorKysrIGFwdC0wLjkuNy43L01ha2VmaWxlCitAQCAtMzMsNyArMzMsNyBAQCB2ZXJ5Y2xlYW46IGNsZWFuCisgIyBUaGUgc3RhcnR1cCB0YXJnZXQgYnVpbGRzIHRoZSBuZWNlc3NhcnkgY29uZmlndXJlIHNjcmlwdHMuIEl0IHNob3VsZAorICMgYmUgdXNlZCBhZnRlciBhIENWUyBjaGVja291dC4KKyBDT05WRVJURUQ9ZW52aXJvbm1lbnQubWFrIGluY2x1ZGUvY29uZmlnLmggaW5jbHVkZS9hcHRpMThuLmggYnVpbGQvZG9jL0RveHlmaWxlIG1ha2VmaWxlCistaW5jbHVkZSBidWlsZGxpYi9jb25maWd1cmUubWFrCisrI2luY2x1ZGUgYnVpbGRsaWIvY29uZmlndXJlLm1haworICQoQlVJTERESVIpL2luY2x1ZGUvY29uZmlnLmg6IGJ1aWxkbGliL2NvbmZpZy5oLmluCisgJChCVUlMRERJUikvaW5jbHVkZS9hcHRpMThuLmg6IGJ1aWxkbGliL2FwdGkxOG4uaC5pbgorICQoQlVJTERESVIpL2Vudmlyb25tZW50Lm1hazogYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2Rpc2FibGUtdGVzdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvZGlzYWJsZS10ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3Njc5NWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2Rpc2FibGUtdGVzdC5wYXRjaApAQCAtMCwwICsxLDU4IEBACitbUEFUQ0hdIGRpc2FibGUgdGVzdAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK3Rlc3QgbmVlZHMgZ3Rlc3QgcGFja2FnZSwgc28gbm90IGJ1aWxkIHRoZSB0ZXN0IGRpcgorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZSAgICAgfCA3ICsrKy0tLS0KKyBjb25maWd1cmUuYWMgfCA2IC0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDVmNWZiMjcuLjUwNzBlOTYgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC05LDggKzksOCBAQCBlbmRpZgorIC5QSE9OWTogZGVmYXVsdAorIGRlZmF1bHQ6IHN0YXJ0dXAgYWxsCisgCistLlBIT05ZOiBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGFsbCBiaW5hcnkgcHJvZ3JhbSBkb2MgdGVzdCB1cGRhdGUtcG8KKy1hbGwgaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBiaW5hcnkgcHJvZ3JhbSBkb2MgbWFucGFnZXMgZG9jYm9vayB0ZXN0IHVwZGF0ZS1wbyBzdGFydHVwIGRpcnM6CisrLlBIT05ZOiBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGFsbCBiaW5hcnkgcHJvZ3JhbSBkb2MgdXBkYXRlLXBvCisrYWxsIGhlYWRlcnMgbGlicmFyeSBjbGVhbiB2ZXJ5Y2xlYW4gYmluYXJ5IHByb2dyYW0gZG9jIG1hbnBhZ2VzIGRvY2Jvb2sgdXBkYXRlLXBvIHN0YXJ0dXAgZGlyczoKKyAJJChNQUtFKSAtQyB2ZW5kb3IgJEAKKyAJJChNQUtFKSAtQyBhcHQtcGtnICRACisgCSQoTUFLRSkgLUMgYXB0LWluc3QgJEAKK0BAIC0yMSw5ICsyMSw4IEBAIGFsbCBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGJpbmFyeSBwcm9ncmFtIGRvYyBtYW5wYWdlcyBkb2Nib29rIHRlc3QgdXBkCisgCSQoTUFLRSkgLUMgZHNlbGVjdCAkQAorICMJJChNQUtFKSAtQyBkb2MgJEAKKyAJJChNQUtFKSAtQyBwbyAkQAorLQkkKE1BS0UpIC1DIHRlc3QgJEAKKyAKKy1hbGwgaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBiaW5hcnkgcHJvZ3JhbSBkb2MgbWFucGFnZXMgZG9jYm9vayB0ZXN0IHVwZGF0ZS1wbzogc3RhcnR1cCBkaXJzCisrYWxsIGhlYWRlcnMgbGlicmFyeSBjbGVhbiB2ZXJ5Y2xlYW4gYmluYXJ5IHByb2dyYW0gZG9jIG1hbnBhZ2VzIGRvY2Jvb2sgdXBkYXRlLXBvOiBzdGFydHVwIGRpcnMKKyAKKyBkaXJzOiBzdGFydHVwCisgCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA1NjYzYWFmLi5iMGY5NTY0IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC04OSwxMiArODksNiBAQCBBQ19DSEVDS19MSUIoY3VybCwgY3VybF9lYXN5X2luaXQsCisgICAgICBBQ19NU0dfRVJST1IoW2ZhaWxlZDogSSBuZWVkIENVUkwgZHVlIGh0dHBzIHN1cHBvcnRdKSwKKyApCisgCistQUNfTEFOR19QVVNIKFtDKytdKQorLUFDX0NIRUNLX0hFQURFUihndGVzdC9ndGVzdC5oLCwKKy0gICAgIEFDX01TR19FUlJPUihbZmFpbGVkOiBJIG5lZWQgZ3Rlc3QgdG8gYnVpbGQgdGVzdHNdKSwKKy0pCistQUNfTEFOR19QT1AoW0MrK10pCistCisgCisgQUNfU1VCU1QoQkRCTElCKQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2ZpeC1nY2MtNC42LW51bGwtbm90LWRlZmluZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2ZpeC1nY2MtNC42LW51bGwtbm90LWRlZmluZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxYWU2ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvZml4LWdjYy00LjYtbnVsbC1ub3QtZGVmaW5lZC5wYXRjaApAQCAtMCwwICsxLDEyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGEvYXB0LXBrZy9jb250cmliL3dlYWtwdHIuaAorKysrIGIvYXB0LXBrZy9jb250cmliL3dlYWtwdHIuaAorQEAgLTIxLDYgKzIxLDcgQEAKKyAjaWZuZGVmIFdFQUtfUE9JTlRFUl9ICisgI2RlZmluZSBXRUFLX1BPSU5URVJfSAorIAorKyNpbmNsdWRlIDxjc3RkbGliPgorICNpbmNsdWRlIDxzZXQ+CisgLyoqCisgICogQ2xhc3MgZm9yIG9iamVjdHMgcHJvdmlkaW5nIHN1cHBvcnQgZm9yIHdlYWsgcG9pbnRlcnMuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L21ha2VyYWNlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9tYWtlcmFjZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmUzMTYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9tYWtlcmFjZS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitJIHdhcyBzZWVpbmcgdmFyaW91cyBpc3N1ZXMgd2l0aCBwYXJhbGxlbCBtYWtlLCBtYWlubHkgZHVlIHRvIHRvIHdoYXQgd2FzIGxpa2VseSAKK3BhcnRpYWxseSBpbnN0YWxsZWQgaGVhZGVycy4gSWYgeW91IGNoYW5nZSBpbnRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGFuZAorIk5PSVNZPTEgbWFrZSAgLi4vb2JqL2FwdC1wa2cvc291cmNlbGlzdC5vcGljIiBpbiBhcHQtcGtnLCB5b3UnbGwgc2VlIGl0IAorZG9lc24ndCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgb24gdGhlIGhlYWRlcnMgYmVpbmcgaW5zdGFsbGVkLiBUaGlzIHBhdGNoCitmaXhlcyB0aGF0IHNvIHRoaW5ncyBidWlsZCBjb3JyZWN0bHkuCisKK1JQIDIwMTIvMy8xOQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGFwdC0wLjkuOS40L2J1aWxkbGliL2xpYnJhcnkubWFrCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXB0LTAuOS45LjQub3JpZy9idWlsZGxpYi9saWJyYXJ5Lm1hawkyMDEzLTA3LTMxIDE1OjQ1OjA3LjMyMDQ0MDU3NSArMDMwMAorKysrIGFwdC0wLjkuOS40L2J1aWxkbGliL2xpYnJhcnkubWFrCTIwMTMtMDctMzEgMTU6NDY6NDkuNDQwNDQwNTYxICswMzAwCitAQCAtNjEsNyArNjEsNyBAQAorIAorICMgQ29tcGlsYXRpb24gcnVsZXMKKyB2cGF0aCAlLmNjICQoU1VCRElSUykKKy0kKE9CSikvJS5vcGljOiAlLmNjICQoTElCUkFSWURFUEVORFMpCisrJChPQkopLyUub3BpYzogJS5jYyAkKExJQlJBUllERVBFTkRTKSAkKCQoTE9DQUwpLUhFQURFUlMpCisgCWVjaG8gQ29tcGlsaW5nICQ8IHRvICRACisgCSQoQ1hYKSAtYyAkKElOTElORURFUEZMQUcpICQoQ1BQRkxBR1MpICQoQ1hYRkxBR1MpICQoUElDRkxBR1MpIC1vICRAICQ8CisgCSQoRG9EZXApCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L25vLW5scy1kcGtnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9uby1ubHMtZHBrZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDk5NmQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9uby1ubHMtZHBrZy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGEvYXB0LXBrZy9kZWIvZHBrZ3BtLmNjCisrKysgYi9hcHQtcGtnL2RlYi9kcGtncG0uY2MKK0BAIC00Miw2ICs0MiwxMiBAQAorICNpbmNsdWRlIDxhcHRpMThuLmg+CisgCQkJCQkJCQkJLyp9fX0qLworIAorKyNpZmRlZiBVU0VfTkxTCisrI2RlZmluZSBfZHBrZyh4KSBkZ2V0dGV4dCgiZHBrZyIsIHgpCisrI2Vsc2UKKysjZGVmaW5lIF9kcGtnKHgpIHgKKysjZW5kaWYKKysKKyB1c2luZyBuYW1lc3BhY2Ugc3RkOworIAorIG5hbWVzcGFjZQorQEAgLTEyNzksNyArMTI4NSw3IEBAIHZvaWQgcGtnRFBrZ1BNOjpXcml0ZUFwcG9ydFJlcG9ydChjb25zdAorICAgIH0KKyAKKyAgICAvLyBjaGVjayBpZiBpdHMgbm90IGEgZm9sbG93IHVwIGVycm9yIAorLSAgIGNvbnN0IGNoYXIgKm5lZWRsZSA9IGRnZXR0ZXh0KCJkcGtnIiwgImRlcGVuZGVuY3kgcHJvYmxlbXMgLSBsZWF2aW5nIHVuY29uZmlndXJlZCIpOworKyAgIGNvbnN0IGNoYXIgKm5lZWRsZSA9IF9kcGtnKCJkZXBlbmRlbmN5IHByb2JsZW1zIC0gbGVhdmluZyB1bmNvbmZpZ3VyZWQiKTsKKyAgICBpZihzdHJzdHIoZXJyb3Jtc2csIG5lZWRsZSkgIT0gTlVMTCkgeworICAgICAgIHN0ZDo6Y2xvZyA8PCBfKCJObyBhcHBvcnQgcmVwb3J0IHdyaXR0ZW4gYmVjYXVzZSB0aGUgZXJyb3IgbWVzc2FnZSBpbmRpY2F0ZXMgaXRzIGEgZm9sbG93dXAgZXJyb3IgZnJvbSBhIHByZXZpb3VzIGZhaWx1cmUuIikgPDwgc3RkOjplbmRsOworICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbm9jb25maWd1cmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L25vY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYzY3MjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L25vY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworCitkaWZmIC0tZ2l0IGEvYXB0LXBrZy9wYWNrYWdlbWFuYWdlci5jYyBiL2FwdC1wa2cvcGFja2FnZW1hbmFnZXIuY2MKK2luZGV4IDI0OTU0MmMuLjBhMTkxMWYgMTAwNjQ0CistLS0gYS9hcHQtcGtnL3BhY2thZ2VtYW5hZ2VyLmNjCisrKysgYi9hcHQtcGtnL3BhY2thZ2VtYW5hZ2VyLmNjCitAQCAtOTUyLDEwICs5NTIsMTIgQEAgYm9vbCBwa2dQYWNrYWdlTWFuYWdlcjo6U21hcnRVblBhY2soUGtnSXRlcmF0b3IgUGtnLCBib29sIGNvbnN0IEltbWVkaWF0ZSwgaW50IGMKKyAgICAgICByZXR1cm4gZmFsc2U7CisgCisgICAgaWYgKEltbWVkaWF0ZSA9PSB0cnVlKSB7CisrI2lmIDAKKyAgICAgICAvLyBQZXJmb3JtIGltbWVkYXRlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHBhY2thZ2UuIAorICAgICAgICAgIGlmIChTbWFydENvbmZpZ3VyZShQa2csIERlcHRoICsgMSkgPT0gZmFsc2UpCisgICAgICAgICAgICAgX2Vycm9yLT5FcnJvcihfKCJDb3VsZCBub3QgcGVyZm9ybSBpbW1lZGlhdGUgY29uZmlndXJhdGlvbiBvbiAnJXMnLiAiCisgICAgICAgICAgICAgICAgIlBsZWFzZSBzZWUgbWFuIDUgYXB0LmNvbmYgdW5kZXIgQVBUOjpJbW1lZGlhdGUtQ29uZmlndXJlIGZvciBkZXRhaWxzLiAoJWQpIiksUGtnLkZ1bGxOYW1lKCkuY19zdHIoKSwyKTsKKysjZW5kaWYKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7CitAQCAtMTAzOCw2ICsxMDQwLDcgQEAgcGtnUGFja2FnZU1hbmFnZXI6Ok9yZGVyUmVzdWx0IHBrZ1BhY2thZ2VNYW5hZ2VyOjpPcmRlckluc3RhbGwoKQorICAgICAgIH0KKyAgICB9CisgCisrI2lmIDAKKyAgICAvLyBGaW5hbCBydW4gdGhyb3VnaCB0aGUgY29uZmlndXJlIHBoYXNlCisgICAgaWYgKENvbmZpZ3VyZUFsbCgpID09IGZhbHNlKQorICAgICAgIHJldHVybiBGYWlsZWQ7CitAQCAtMTA1Miw2ICsxMDU1LDcgQEAgcGtnUGFja2FnZU1hbmFnZXI6Ok9yZGVyUmVzdWx0IHBrZ1BhY2thZ2VNYW5hZ2VyOjpPcmRlckluc3RhbGwoKQorIAkgcmV0dXJuIEZhaWxlZDsKKyAgICAgICB9CisgICAgfQorKyNlbmRpZgorIAkgCisgICAgcmV0dXJuIENvbXBsZXRlZDsKKyB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L25vZG9jLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9ub2RvYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDllNDJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9ub2RvYy5wYXRjaApAQCAtMCwwICsxLDE4IEBACitEaXNhYmxlIGRvY3VtZW50YXRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogYXB0LTAuOS43LjcvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHQtMC45LjcuNy5vcmlnL01ha2VmaWxlCisrKysgYXB0LTAuOS43LjcvTWFrZWZpbGUKK0BAIC0xNyw3ICsxNyw3IEBAIGFsbCBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGJpbmEKKyAJJChNQUtFKSAtQyBjbWRsaW5lICRACisgCSQoTUFLRSkgLUMgZnRwYXJjaGl2ZSAkQAorIAkkKE1BS0UpIC1DIGRzZWxlY3QgJEAKKy0JJChNQUtFKSAtQyBkb2MgJEAKKysjCSQoTUFLRSkgLUMgZG9jICRACisgCSQoTUFLRSkgLUMgcG8gJEAKKyAJJChNQUtFKSAtQyB0ZXN0ICRACisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L3RydW5jYXRlLWZpbGVuYW1lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC90cnVuY2F0ZS1maWxlbmFtZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjFjNDJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC90cnVuY2F0ZS1maWxlbmFtZS5wYXRjaApAQCAtMCwwICsxLDM1IEBACitzdHJ1dGwuY2M6IHRoZSBmaWxlbmFtZSBjYW4ndCBiZSBsb25nZXIgdGhhbiAyNTUKKworVGhlIFVSSXRvRmlsZU5hbWUgdHJhbnNsYXRlcyB0aGUgcGF0aCBpbnRvIHRoZSBmaWxlbmFtZSwgYnV0IHRoZQorZmlsZW5hbWUgY2FuJ3QgYmUgbG9uZ2VyIHRoYW4gMjU1IGFjY29yZGluZyB0bworL3Vzci9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oLgorCitUcnVuY2F0ZSBpdCB3aGVuIGl0IGlzIGxvbmdlciB0aGFuIDI0MCAobGVhdmUgc29tZSBzcGFjZXMgZm9yCisiLlBhY2thZ2VzIiBhbmQgIi5fUmVsZWFzZSIgc3VmZml4KQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgYXB0LXBrZy9jb250cmliL3N0cnV0bC5jYyB8ICAgIDcgKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2FwdC1wa2cvY29udHJpYi9zdHJ1dGwuY2MgYi9hcHQtcGtnL2NvbnRyaWIvc3RydXRsLmNjCistLS0gYS9hcHQtcGtnL2NvbnRyaWIvc3RydXRsLmNjCisrKysgYi9hcHQtcGtnL2NvbnRyaWIvc3RydXRsLmNjCitAQCAtMzk5LDcgKzM5OSwxMiBAQCBzdHJpbmcgVVJJdG9GaWxlTmFtZShjb25zdCBzdHJpbmcgJlVSSSkKKyAgICAvLyAiXHgwMC1ceDIwe318XFxcXF5cXFtcXF08PlwiXHg3Ri1ceEZGIjsKKyAgICBzdHJpbmcgTmV3VVJJID0gUXVvdGVTdHJpbmcoVSwiXFx8e31bXTw+XCJefl89IUAjJCVeJioiKTsKKyAgICByZXBsYWNlKE5ld1VSSS5iZWdpbigpLE5ld1VSSS5lbmQoKSwnLycsJ18nKTsKKy0gICByZXR1cm4gTmV3VVJJOworKworKyAgIC8vIFRydW5jYXRlIGZyb20gdGhlIGhlYWQgd2hlbiBpdCBpcyBsb25nZXIgdGhhbiAyNDAKKysgICBpZihOZXdVUkkubGVuZ3RoKCkgPiAyNDApCisrICAgICAgIHJldHVybiBOZXdVUkkuc3Vic3RyKE5ld1VSSS5sZW5ndGgoKSAtIDI0MCwgTmV3VVJJLmxlbmd0aCgpIC0gMSk7CisrICAgZWxzZQorKyAgICAgICByZXR1cm4gTmV3VVJJOworIH0KKyAJCQkJCQkJCQkvKn19fSovCisgLy8gQmFzZTY0RW5jb2RlIC0gQmFzZTY0IEVuY29kaW5nIHJvdXRpbmUgZm9yIHNob3J0IHN0cmluZ3MJCS8qe3t7Ki8KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC91c2UtaG9zdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvdXNlLWhvc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMwZmNmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvdXNlLWhvc3QucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBhcHQtMC45LjcuNy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHQtMC45LjcuNy5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGFwdC0wLjkuNy43L2NvbmZpZ3VyZS5hYworQEAgLTExMiw3ICsxMTIsNyBAQCBkbmwgVGhpcyBpcyBvZnRlbiB0aGUgZHBrZyBhcmNoaXRlY3R1cmUKKyBkbmwgRmlyc3QgY2hlY2sgYWdhaW5zdCB0aGUgZnVsbCBjYW5vbmljYWwgY2Fub25jaWFsLXN5c3RlbS10eXBlIGluICR0YXJnZXQKKyBkbmwgYW5kIGlmIHRoYXQgZmFpbHMsIGp1c3QgbG9vayBmb3IgdGhlIGNwdQorIEFDX01TR19DSEVDS0lORyhkZWJpYW4gYXJjaGl0ZWN0dXJlKQorLWFyY2hzZXQ9ImBkcGtnLWFyY2hpdGVjdHVyZSAtcURFQl9IT1NUX0FSQ0hgIgorK2FyY2hzZXQ9ImBlY2hvICRob3N0X2FsaWFzfGN1dCAtZCctJyAtZjFgIgorIGlmIHRlc3QgIngkYXJjaHNldCIgPSAieCI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW2ZhaWxlZDogdXNlIC0taG9zdD0gb3Igb3V0cHV0IGZyb20gZHBrZy1hcmNoaXRlY3R1cmVdKQorIGZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0XzEuMC4xMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdF8xLjAuMTAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjc3ZTJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdF8xLjAuMTAuMS5iYgpAQCAtMCwwICsxLDE4IEBACitERVBFTkRTID0gImN1cmwgZGIiCitSREVQRU5EU18ke1BOfSA9ICJkcGtnIGJhc2ggZGViaWFudXRpbHMiCityZXF1aXJlIGFwdC5pbmMKKworcmVxdWlyZSBhcHQtcGFja2FnZS5pbmMKKworUEFDS0FHRUNPTkZJRyA/Pz0gImx6bWEiCitQQUNLQUdFQ09ORklHW2x6bWFdID0gImFjX2N2X2xpYl9sem1hX2x6bWFfZWFzeV9lbmNvZGVyPXllcyxhY19jdl9saWJfbHptYV9sem1hX2Vhc3lfZW5jb2Rlcj1ubyx4eiIKKworRklMRVNfJHtQTn0gKz0gIiR7YmluZGlyfS9hcHQta2V5IgorYXB0LW1hbnBhZ2VzICs9ICJkb2MvYXB0LWtleS44IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICAjV3JpdGUgdGhlIGNvcnJlY3QgYXB0LWFyY2hpdGVjdHVyZSB0byBhcHQuY29uZgorICAgIEFQVF9DT05GPSR7RH0vZXRjL2FwdC9hcHQuY29uZgorICAgIGVjaG8gJ0FQVDo6QXJjaGl0ZWN0dXJlICIke0RQS0dfQVJDSH0iOycgPiAke0FQVF9DT05GfQorICAgIG9lX2xpYmluc3RhbGwgLXNvIC1DIGJpbiBsaWJhcHQtcHJpdmF0ZSAke0R9JHtsaWJkaXJ9LworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL2FwdC5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL2FwdC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMzUxMzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvYXB0LmNvbmYKQEAgLTAsMCArMSw0MiBAQAorRGlyICIke1NUQUdJTkdfRElSX05BVElWRX0vIgoreworICAgU3RhdGUgInZhci9saWIvYXB0LyIKKyAgIHsKKyAgICAgIExpc3RzICIjQVBUQ09ORiMvbGlzdHMvIjsKKyAgICAgIHN0YXR1cyAiI1JPT1RGUyMvdmFyL2xpYi9kcGtnL3N0YXR1cyI7CisgICB9OworICAgQ2FjaGUgInZhci9jYWNoZS9hcHQvIgorICAgeworICAgICAgQXJjaGl2ZXMgImFyY2hpdmVzLyI7CisgICAgICBwa2djYWNoZSAiIjsKKyAgICAgIHNyY3BrZ2NhY2hlICIiOworICAgfTsKKyAgIEJpbiAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyIKKyAgIHsKKyAgICAgIG1ldGhvZHMgIiR7U1RBR0lOR19MSUJESVJ9L2FwdC9tZXRob2RzLyI7CisgICAgICBnemlwICIvYmluL2d6aXAiOworICAgICAgZHBrZyAiZHBrZyI7CisgICAgICBkcGtnLXNvdXJjZSAiZHBrZy1zb3VyY2UiOworICAgICAgZHBrZy1idWlsZHBhY2thZ2UgImRwa2ctYnVpbGRwYWNrYWdlIjsKKyAgICAgIGFwdC1nZXQgImFwdC1nZXQiOworICAgICAgYXB0LWNhY2hlICJhcHQtY2FjaGUiOworICAgfTsKKyAgIEV0YyAiI0FQVENPTkYjIgorICAgeworICAgICAgUHJlZmVyZW5jZXMgInByZWZlcmVuY2VzIjsKKyAgIH07Cit9OworCitBUFQKK3sKKyAgSW5zdGFsbC1SZWNvbW1lbmRzICJ0cnVlIjsKKyAgSW1tZWRpYXRlLUNvbmZpZ3VyZSAiZmFsc2UiOworICBBcmNoaXRlY3R1cmUgImk1ODYiOworICBHZXQKKyAgeworICAgICBBc3N1bWUtWWVzICJ0cnVlIjsKKyAgICAgRm9yY2UtWWVzICJ0cnVlIgorICB9OworfTsKKworRFBrZzo6T3B0aW9ucyB7Ii0tcm9vdD0jUk9PVEZTIyI7Ii0tYWRtaW5kaXI9I1JPT1RGUyMvdmFyL2xpYi9kcGtnIjsiLS1mb3JjZS1hbGwiOyItLW5vLWRlYnNpZyJ9OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL2RiX2xpbmtpbmdfaGFjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9kYl9saW5raW5nX2hhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYxZDRiMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9kYl9saW5raW5nX2hhY2sucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogYXB0LTAuNy4zL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwdC0wLjcuMy5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA3LTA3LTAxIDEwOjM4OjQ1LjAwMDAwMDAwMCArMDAwMAorKysrIGFwdC0wLjcuMy9jb25maWd1cmUuYWMJMjAwNy0wOC0yMSAxMzozOToyNi4wMDAwMDAwMDAgKzAwMDAKK0BAIC02Nyw4ICs2NywyMCBAQAorICAgICAgIFtBQ19ERUZJTkUoSEFWRV9CREIpCisgICAgICAgIEJEQkxJQj0iLWxkYiIKKyAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKy0gICAgICBbQkRCTElCPSIiCistICAgICAgIEFDX01TR19SRVNVTFQobm8pXQorKworKyAgICAgICBMSUJTPSIkTElCUyAtbHB0aHJlYWQiCisrICAgICAgIFtBQ19NU0dfQ0hFQ0tJTkcoaWYgd2UgY2FuIGxpbmsgYWdhaW5zdCBCZXJrZWxleURCIHdpdGggcHRocmVhZCkKKysgICAgICAgIEFDX0xJTktfSUZFTFNFKAorKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKysgICAgICAgICBbI2luY2x1ZGUgPGRiLmg+XSwKKysgICAgICAgICBbaW50IHIsIHMsIHQ7IGRiX3ZlcnNpb24oJnIsICZzLCAmdCk7XQorKyAgICAgICAgKV0sCisrICAgICAgICBbQUNfREVGSU5FKEhBVkVfQkRCKQorKyAgICAgICAgIEJEQkxJQj0iLWxkYiAtbHB0aHJlYWQiCisrICAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKysgICAgICAgIFtCREJMSUI9IiIKKysgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKV0KKysgICAgICApXSAgICAgICAKKyAgICAgKV0KKyApCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvZW52aXJvbm1lbnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvZW52aXJvbm1lbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEwMzAzOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9lbnZpcm9ubWVudC5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBhcHQtMC42LjQ2LjIvYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXB0LTAuNi40Ni4yLm9yaWcvYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluCTIwMDctMDMtMjkgMTE6Mzg6NTguMDAwMDAwMDAwICswMTAwCisrKysgYXB0LTAuNi40Ni4yL2J1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbgkyMDA3LTAzLTI5IDExOjM5OjEyLjAwMDAwMDAwMCArMDEwMAorQEAgLTYyLDcgKzYyLDcgQEAKKyAKKyAjIFNoYXJlZCBsaWJyYXJ5IHRoaW5ncworIEhPU1RfT1MgPSBAaG9zdF9vc0AKKy1pZm5lcSAoJCh3b3JkcyAkKGZpbHRlciBsaW51eC1nbnUgZ251JSAlZ251LCQoSE9TVF9PUykpKSwwKQorK2lmbmVxICgkKHdvcmRzICQoZmlsdGVyIGxpbnV4LWdudSBsaW51eC1nbnVlYWJpIGdudSUgJWdudSwkKEhPU1RfT1MpKSksMCkKKyAgICBTT05BTUVfTUFHSUM9LVdsLC1zb25hbWUgLVdsLAorICAgIExGTEFHU19TTz0KKyBlbHNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvbm8tY3VybC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9uby1jdXJsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMjM4ZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvbm8tY3VybC5wYXRjaApAQCAtMCwwICsxLDM4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLQorIGNvbmZpZ3VyZS5pbiAgICAgfCAgICA2IC0tLS0tLQorIG1ldGhvZHMvbWFrZWZpbGUgfCAgICA3IC0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEzIGRlbGV0aW9ucygtKQorCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTg2LDEyICs4Niw2IEBAIEFDX0NIRUNLX0hFQURFUihkYi5oLAorIAorIExJQlM9IiRzYXZlTElCUyIKKyAKKy1BQ19DSEVDS19MSUIoY3VybCwgY3VybF9lYXN5X2luaXQsCistICAgICBbQUNfQ0hFQ0tfSEVBREVSKGN1cmwvY3VybC5oLAorLSAgICAgICAgY3VybF9vaz15ZXMsCistICAgICAgICBjdXJsX29rPW5vKV0sCistICAgICBBQ19NU0dfRVJST1IoW2ZhaWxlZDogSSBuZWVkIENVUkwgZHVlIGh0dHBzIHN1cHBvcnRdKSwKKy0pCisgCisgQUNfU1VCU1QoQkRCTElCKQorIAorLS0tIGEvbWV0aG9kcy9tYWtlZmlsZQorKysrIGIvbWV0aG9kcy9tYWtlZmlsZQorQEAgLTUxLDEzICs1MSw2IEBAIExJQl9NQUtFUyA9IGFwdC1wa2cvbWFrZWZpbGUKKyBTT1VSQ0UgPSBodHRwLmNjIGh0dHBfbWFpbi5jYyByZmMyNTUzZW11LmNjIGNvbm5lY3QuY2Mgc2VydmVyLmNjCisgaW5jbHVkZSAkKFBST0dSQU1fSCkKKyAKKy0jIFRoZSBodHRwcyBtZXRob2QKKy1QUk9HUkFNPWh0dHBzCistU0xJQlMgPSAtbGFwdC1wa2cgLWxjdXJsICQoSU5UTExJQlMpCistTElCX01BS0VTID0gYXB0LXBrZy9tYWtlZmlsZQorLVNPVVJDRSA9IGh0dHBzLmNjIHNlcnZlci5jYworLWluY2x1ZGUgJChQUk9HUkFNX0gpCistCisgIyBUaGUgZnRwIG1ldGhvZAorIFBST0dSQU09ZnRwCisgU0xJQlMgPSAtbGFwdC1wa2cgJChTT0NLRVRMSUJTKSAkKElOVExMSUJTKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Yjc3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi5pbmMKQEAgLTAsMCArMSw0MyBAQAorU1VNTUFSWSA9ICJBIEdOVSB0b29sIHRoYXQgcHJvY3VkZSBzaGVsbCBzY3JpcHRzIHRvIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlIHNvZnR3YXJlIgorREVTQ1JJUFRJT04gPSAiQXV0b2NvbmYgaXMgYW4gZXh0ZW5zaWJsZSBwYWNrYWdlIG9mIE00IG1hY3JvcyB0aGF0IHByb2R1Y2Ugc2hlbGwgc2NyaXB0cyB0byBhdXRvbWF0aWNhbGx5IFwgCitjb25maWd1cmUgc29mdHdhcmUgc291cmNlIGNvZGUgcGFja2FnZXMuIEF1dG9jb25mIGNyZWF0ZXMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBmb3IgYSBwYWNrYWdlIGZyb20gYSB0ZW1wbGF0ZSBcCitmaWxlIHRoYXQgbGlzdHMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZmVhdHVyZXMgdGhhdCB0aGUgcGFja2FnZSBjYW4gdXNlLCBpbiB0aGUgZm9ybSBvZiBNNCBtYWNybyBjYWxscy4iCitMSUNFTlNFID0gIkdQTHYzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitERVBFTkRTICs9ICJtNC1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJtNC1uYXRpdmUgZ251LWNvbmZpZy1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICJuYXRpdmVzZGstbTQgbmF0aXZlc2RrLWdudS1jb25maWciCitSREVQRU5EU18ke1BOfSA9ICJtNCBnbnUtY29uZmlnIFwKKwkJICBwZXJsIFwKKwkJICBwZXJsLW1vZHVsZS1jYXJwIFwKKwkJICBwZXJsLW1vZHVsZS1jb25zdGFudCBcCisJCSAgcGVybC1tb2R1bGUtZXJybm8gXAorCQkgIHBlcmwtbW9kdWxlLWV4cG9ydGVyIFwKKwkJICBwZXJsLW1vZHVsZS1maWxlLWJhc2VuYW1lIFwKKwkJICBwZXJsLW1vZHVsZS1maWxlLWNvbXBhcmUgXAorCQkgIHBlcmwtbW9kdWxlLWZpbGUtY29weSBcCisJCSAgcGVybC1tb2R1bGUtZmlsZS1nbG9iIFwKKwkJICBwZXJsLW1vZHVsZS1maWxlLXBhdGggXAorCQkgIHBlcmwtbW9kdWxlLWZpbGUtc3RhdCBcCisJCSAgcGVybC1tb2R1bGUtZ2V0b3B0LWxvbmcgXAorCQkgIHBlcmwtbW9kdWxlLWlvLWZpbGUgXAorCQkgIHBlcmwtbW9kdWxlLXBvc2l4IFwKKwkJICBwZXJsLW1vZHVsZS1kYXRhLWR1bXBlciBcCisJCSAiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAibTQtbmF0aXZlIGdudS1jb25maWctbmF0aXZlIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYXV0b2NvbmYvYXV0b2NvbmYtJHtQVn0udGFyLmd6IFwKKwkgICBmaWxlOi8vcHJvZ3JhbV9wcmVmaXgucGF0Y2giCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfUEVSTD0ke1VTUkJJTlBBVEh9L3BlcmwiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwlvZV9ydW5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIHJtIC1yZiAke0R9JHtkYXRhZGlyfS9lbWFjcworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3JlY29uZi1leGNsdWRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3JlY29uZi1leGNsdWRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYmQzYTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWV4Y2x1ZGUucGF0Y2gKQEAgLTAsMCArMSwxMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogYXV0b2NvbmYtMi42My9iaW4vYXV0b3JlY29uZi5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF1dG9jb25mLTIuNjMub3JpZy9iaW4vYXV0b3JlY29uZi5pbgkyMDA4LTEyLTMxIDE3OjM5OjAxLjAwMDAwMDAwMCArMDAwMAorKysrIGF1dG9jb25mLTIuNjMvYmluL2F1dG9yZWNvbmYuaW4JMjAwOC0xMi0zMSAxNzo0MzozOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC03Niw2ICs3Niw3IEBACisgICAtaSwgLS1pbnN0YWxsICAgICAgICAgICAgY29weSBtaXNzaW5nIGF1eGlsaWFyeSBmaWxlcworICAgICAgIC0tbm8tcmVjdXJzaXZlICAgICAgIGRvbid0IHJlYnVpbGQgc3ViLXBhY2thZ2VzCisgICAtcywgLS1zeW1saW5rICAgICAgICAgICAgd2l0aCAtaSwgaW5zdGFsbCBzeW1ib2xpYyBsaW5rcyBpbnN0ZWFkIG9mIGNvcGllcworKyAgLXgsIC0tZXhjbHVkZT1TVEVQUyAgICAgIHN0ZXBzIHdlIHNob3VsZCBub3QgcnVuCisgICAtbSwgLS1tYWtlICAgICAgICAgICAgICAgd2hlbiBhcHBsaWNhYmxlLCByZS1ydW4gLi9jb25maWd1cmUgJiYgbWFrZQorICAgLVcsIC0td2FybmluZ3M9Q0FURUdPUlkgIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWSBbc3ludGF4XQorIAorQEAgLTEzNiw2ICsxMzcsMTMgQEAKKyAjIFJlY3Vyc2UgaW50byBzdWJwYWNrYWdlcworIG15ICRyZWN1cnNpdmUgPSAxOworIAorKyMgU3RlcHMgdG8gZXhjbHVkZQorK215IEBleGNsdWRlOworK215IEBleDsKKysKKytteSAkdXNlc19nZXR0ZXh0OworK215ICRjb25maWd1cmVfYWM7CisrCisgIyMgLS0tLS0tLS0tLSAjIworICMjIFJvdXRpbmVzLiAgIyMKKyAjIyAtLS0tLS0tLS0tICMjCitAQCAtMTUzLDYgKzE2MSw3IEBACisgCSAgJ0J8cHJlcGVuZC1pbmNsdWRlPXMnCSA9PiBcQHByZXBlbmRfaW5jbHVkZSwKKyAJICAnaXxpbnN0YWxsJyAgICAgICAgICAgID0+IFwkaW5zdGFsbCwKKyAJICAnc3xzeW1saW5rJyAgICAgICAgICAgID0+IFwkc3ltbGluaywKKysgIAkgICd4fGV4Y2x1ZGU9cycgICAgICAgICAgPT4gXEBleGNsdWRlLAorIAkgICdtfG1ha2UnICAgICAgICAgICAgICAgPT4gXCRydW5fbWFrZSwKKyAJICAncmVjdXJzaXZlIScgICAgICAgICAgID0+IFwkcmVjdXJzaXZlKTsKKyAKK0BAIC0xNjIsNiArMTcxLDggQEAKKyAgIHBhcnNlX1dBUk5JTkdTOworICAgcGFyc2Vfd2FybmluZ3MgJy0td2FybmluZ3MnLCBAd2FybmluZzsKKyAKKysgIEBleGNsdWRlID0gbWFwIHsgc3BsaXQgLywvIH0gQGV4Y2x1ZGU7CisrCisgICAjIEV2ZW4gaWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgY29uZmlndXJlLmFjLCB0cmltIHRvIGdldCB0aGUKKyAgICMgZGlyZWN0b3J5LCBhbmQgbG9vayBmb3IgY29uZmlndXJlLmFjIGFnYWluLiAgQmVjYXVzZSAoaSkgdGhlIGNvZGUKKyAgICMgaXMgc2ltcGxlciwgYW5kIChpaSkgd2UgYXJlIHN0aWxsIGFibGUgdG8gZGlhZ25vc2Ugc2ltdWx0YW5lb3VzCitAQCAtMjU1LDYgKzI2NiwxMSBAQAorIHsKKyAgIG15ICgkYWNsb2NhbCwgJGZsYWdzKSA9IEBfOworIAorKyAgQGV4ID0gZ3JlcCAoL15hY2xvY2FsJC8sIEBleGNsdWRlKTsKKysgIGlmICgkI2V4ICE9IC0xKSB7CisrICAgIHJldHVybjsKKysgIH0KKysKKyAgICMgYWNsb2NhbCAxLjgrIGRvZXMgYWxsIHRoaXMgZm9yIGZyZWUuICBJdCBjYW4gYmUgcmVjb2duaXplZCBieSBpdHMKKyAgICMgLS1mb3JjZSBzdXBwb3J0LgorICAgaWYgKCRhY2xvY2FsX3N1cHBvcnRzX2ZvcmNlKQorQEAgLTM2OCw3ICszODQsMTAgQEAKKyAgICAgfQorICAgZWxzZQorICAgICB7CistICAgICAgeHN5c3RlbV9oaW50ICgiYXV0b3BvaW50IGlzIG5lZWRlZCBiZWNhdXNlIHRoaXMgcGFja2FnZSB1c2VzIEdldHRleHQiLCAiJGF1dG9wb2ludCIpOworKyAgICAgIEBleCA9IGdyZXAgKC9eYXV0b3BvaW50JC8sIEBleGNsdWRlKTsKKysgICAgICBpZiAoJCNleCA9PSAtMSkgeworKyAgICAgICAgeHN5c3RlbV9oaW50ICgiYXV0b3BvaW50IGlzIG5lZWRlZCBiZWNhdXNlIHRoaXMgcGFja2FnZSB1c2VzIEdldHRleHQiLCAiJGF1dG9wb2ludCIpOworKyAgICAgIH0KKyAgICAgfQorIAorIAorQEAgLTUzMiwxNiArNTUxLDE3IEBACisgCXsKKyAJICAkbGlidG9vbGl6ZSAuPSAiIC0tbHRkbCI7CisgCX0KKy0gICAgICB4c3lzdGVtX2hpbnQgKCJsaWJ0b29saXplIGlzIG5lZWRlZCBiZWNhdXNlIHRoaXMgcGFja2FnZSB1c2VzIExpYnRvb2wiLCAkbGlidG9vbGl6ZSk7CistICAgICAgJHJlcnVuX2FjbG9jYWwgPSAxOworKyAgICAgIEBleCA9IGdyZXAgKC9ebGlidG9vbGl6ZSQvLCBAZXhjbHVkZSk7CisrICAgICAgaWYgKCQjZXggPT0gLTEpIHsKKysgICAgICAgIHhzeXN0ZW1faGludCAoImxpYnRvb2xpemUgaXMgbmVlZGVkIGJlY2F1c2UgdGhpcyBwYWNrYWdlIHVzZXMgTGlidG9vbCIsICRsaWJ0b29saXplKTsKKysgICAgICAgICRyZXJ1bl9hY2xvY2FsID0gMTsKKysgICAgICB9CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworICAgICAgIHZlcmIgIiRjb25maWd1cmVfYWM6IG5vdCBydW5uaW5nIGxpYnRvb2xpemU6IC0taW5zdGFsbCBub3QgZ2l2ZW4iOworICAgICB9CisgCistCistCisgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIworICAgIyBSZXJ1bm5pbmcgYWNsb2NhbC4gICMKKyAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjCitAQCAtNTcyLDcgKzU5MiwxMCBAQAorICAgIyBsYXR0ZXIgcnVucyB0aGUgZm9ybWVyLCBhbmQgKGlpKSBhdXRvY29uZiBpcyBzdHJpY3RlciB0aGFuCisgICAjIGF1dG9oZWFkZXIuICBTbyBhbGwgaW4gYWxsLCBhdXRvY29uZiBzaG91bGQgZ2l2ZSBiZXR0ZXIgZXJyb3IKKyAgICMgbWVzc2FnZXMuCistICB4c3lzdGVtICgkYXV0b2NvbmYpOworKyAgQGV4ID0gZ3JlcCAoL15hdXRvY29uZiQvLCBAZXhjbHVkZSk7CisrICBpZiAoJCNleCA9PSAtMSkgeworKyAgICB4c3lzdGVtICgiJGF1dG9jb25mIik7CisrICB9CisgCisgCisgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMKK0BAIC01OTMsNyArNjE2LDEwIEBACisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSAgICAgIHhzeXN0ZW0gKCRhdXRvaGVhZGVyKTsKKysgICAgICBAZXggPSBncmVwICgvXmF1dG9oZWFkZXIkLywgQGV4Y2x1ZGUpOworKyAgICAgIGlmICgkI2V4ID09IC0xKSB7CisrICAgICAgICB4c3lzdGVtICgiJGF1dG9oZWFkZXIiKTsKKysgICAgICB9CisgICAgIH0KKyAKKyAKK0BAIC02MTAsNyArNjM2LDEwIEBACisgICAgICAgIyBXZSBzaG91bGQgYWx3YXlzIHJ1biBhdXRvbWFrZSwgYW5kIGxldCBpdCBkZWNpZGUgd2hldGhlciBpdCBzaGFsbAorICAgICAgICMgdXBkYXRlIHRoZSBmaWxlIG9yIG5vdC4gIEluIGZhY3QsIHRoZSBlZmZlY3Qgb2YgYCRmb3JjZScgaXMgYWxyZWFkeQorICAgICAgICMgaW5jbHVkZWQgaW4gYCRhdXRvbWFrZScgdmlhIGAtLW5vLWZvcmNlJy4KKy0gICAgICB4c3lzdGVtICgkYXV0b21ha2UpOworKyAgICAgIEBleCA9IGdyZXAgKC9eYXV0b21ha2UkLywgQGV4Y2x1ZGUpOworKyAgICAgIGlmICgkI2V4ID09IC0xKSB7CisrICAgICAgICB4c3lzdGVtICgiJGF1dG9tYWtlIik7CisrICAgICAgfQorICAgICB9CisgCisgCitAQCAtNjM0LDcgKzY2MywxMCBAQAorIAkgICAgfQorIAkgIGVsc2UKKyAJICAgIHsKKy0JICAgICAgeHN5c3RlbSAoIiRtYWtlIik7CisrICAgICAgICAgICAgICBAZXggPSBncmVwICgvXm1ha2UkLywgQGV4Y2x1ZGUpOworKyAgICAgICAgICAgICAgaWYgKCQjZXggPT0gLTEpIHsKKysJICAgICAgICB4c3lzdGVtICgiJG1ha2UiKTsKKysgICAgICAgICAgICAgIH0KKyAJICAgIH0KKyAJfQorICAgICB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWdudWNvbmZpZ2l6ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtZ251Y29uZmlnaXplLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZjE4YzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWdudWNvbmZpZ2l6ZS5wYXRjaApAQCAtMCwwICsxLDM4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKworSW5kZXg6IGF1dG9jb25mLTIuNjMvYmluL2F1dG9yZWNvbmYuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdXRvY29uZi0yLjYzLm9yaWcvYmluL2F1dG9yZWNvbmYuaW4JMjAwOC0xMi0zMSAxNzo0Mzo1NS4wMDAwMDAwMDAgKzAwMDAKKysrKyBhdXRvY29uZi0yLjYzL2Jpbi9hdXRvcmVjb25mLmluCTIwMDgtMTItMzEgMTc6NDY6MTYuMDAwMDAwMDAwICswMDAwCitAQCAtNTgsNyArNTgsNyBAQAorICRoZWxwID0gIlVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbRElSRUNUT1JZXS4uLgorIAorIFJ1biBgYXV0b2NvbmYnIChhbmQgYGF1dG9oZWFkZXInLCBgYWNsb2NhbCcsIGBhdXRvbWFrZScsIGBhdXRvcG9pbnQnCistKGZvcm1lcmx5IGBnZXR0ZXh0aXplJyksIGFuZCBgbGlidG9vbGl6ZScgd2hlcmUgYXBwcm9wcmlhdGUpCisrKGZvcm1lcmx5IGBnZXR0ZXh0aXplJyksIGBsaWJ0b29saXplJywgYW5kIGBnbnUtY29uZmlnaXplJyB3aGVyZSBhcHByb3ByaWF0ZSkKKyByZXBlYXRlZGx5IHRvIHJlbWFrZSB0aGUgR05VIEJ1aWxkIFN5c3RlbSBmaWxlcyBpbiBzcGVjaWZpZWQKKyBESVJFQ1RPUklFUyBhbmQgdGhlaXIgc3ViZGlyZWN0b3JpZXMgKGRlZmF1bHRpbmcgdG8gYC4nKS4KKyAKK0BAIC0xMTUsNiArMTE1LDcgQEAKKyBteSAkbGlidG9vbGl6ZSA9ICRFTlZ7J0xJQlRPT0xJWkUnfSB8fCAnbGlidG9vbGl6ZSc7CisgbXkgJGF1dG9wb2ludCAgPSAkRU5WeydBVVRPUE9JTlQnfSAgfHwgJ2F1dG9wb2ludCc7CisgbXkgJG1ha2UgICAgICAgPSAkRU5WeydNQUtFJ30gICAgICAgfHwgJ21ha2UnOworK215ICRnbnVjb25maWdpemUgPSAkRU5WeydHTlVDT05GSUdJWkUnfSAgICAgICB8fCAnZ251LWNvbmZpZ2l6ZSc7CisgCisgIyAtLWluc3RhbGwgLS0gYXMgLS1hZGQtbWlzc2luZyBpbiBvdGhlciB0b29scy4KKyBteSAkaW5zdGFsbCA9IDA7CitAQCAtNjQ0LDYgKzY0NSwxMCBAQAorICAgICAgIH0KKyAgICAgfQorIAorKyAgQGV4ID0gZ3JlcCAoL15nbnUtY29uZmlnaXplJC8sIEBleGNsdWRlKTsKKysgIGlmICgkI2V4ID09IC0xKSB7CisrICAgIHhzeXN0ZW0gKCIkZ251Y29uZmlnaXplIik7CisrICB9CisgCisgICAjIC0tLS0tLS0tLS0tLS0tICMKKyAgICMgUnVubmluZyBtYWtlLiAgIwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3JlY29uZi1pbmNsdWRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3JlY29uZi1pbmNsdWRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMzI2ZjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWluY2x1ZGUucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBhdXRvY29uZi0yLjYzL2Jpbi9hdXRvcmVjb25mLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXV0b2NvbmYtMi42My5vcmlnL2Jpbi9hdXRvcmVjb25mLmluCTIwMDgtMDgtMjggMDM6MDg6MTAuMDAwMDAwMDAwICswMTAwCisrKysgYXV0b2NvbmYtMi42My9iaW4vYXV0b3JlY29uZi5pbgkyMDA4LTEyLTMxIDE3OjM4OjQwLjAwMDAwMDAwMCArMDAwMAorQEAgLTE5MCw2ICsxOTAsNyBAQAorICAgJGF1dG9jb25mICAgLj0gam9pbiAoJyAtLXByZXBlbmQtaW5jbHVkZT0nLCAnJywgbWFwIHsgc2hlbGxfcXVvdGUgKCRfKSB9IEBwcmVwZW5kX2luY2x1ZGUpOworICAgJGF1dG9oZWFkZXIgLj0gam9pbiAoJyAtLWluY2x1ZGU9JywgJycsIG1hcCB7IHNoZWxsX3F1b3RlICgkXykgfSBAaW5jbHVkZSk7CisgICAkYXV0b2hlYWRlciAuPSBqb2luICgnIC0tcHJlcGVuZC1pbmNsdWRlPScsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQHByZXBlbmRfaW5jbHVkZSk7CisrICAkYWNsb2NhbCAgICAuPSBqb2luICgnIC1JICcsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQGluY2x1ZGUpOworIAorICAgIyAtLWluc3RhbGwgYW5kIC0tc3ltbGluazsKKyAgIGlmICgkaW5zdGFsbCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG90ZXN0LWF1dG9tYWtlLXJlc3VsdC1mb3JtYXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvdGVzdC1hdXRvbWFrZS1yZXN1bHQtZm9ybWF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZTgxNzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvdGVzdC1hdXRvbWFrZS1yZXN1bHQtZm9ybWF0LnBhdGNoCkBAIC0wLDAgKzEsMTM2IEBACitGcm9tIGE3ZTcyMmY5NzRlMjUyOWQzZTU2NGQ4ZDk0Yzg2Y2M4YmRiYzQwZTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSYWR1IFBhdHJpdSA8cmFkdS5wYXRyaXVAZW5lYS5jb20+CitEYXRlOiBNb24sIDI0IE1hciAyMDE0IDE2OjMzOjE5ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGF1dG90ZXN0OiBuZXcgdGVzdHN1aXRlIG9wdGlvbiB0byBlbmFibGUgYXV0b21ha2UgdGVzdAorIHJlc3VsdCBmb3JtYXQKKworKiBsaWIvYXV0b3Rlc3QvZ2VuZXJhbC5tNDogYWRkZWQgIi0tYW0tZm10IHwgLUEiIGNvbW1hbmQgbGluZQorcGFyYW1ldGVyIGZvciB0ZXN0c3VpdGUgc2NyaXB0IHRvIGVuYWJsZSAiUkVTVUxUOiB0ZXN0bmFtZSIgb3V0cHV0Oword2lsbCBiZSB1c2VkIGJ5IHlvY3RvIHB0ZXN0IHBhY2thZ2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUmFkdSBQYXRyaXUgPHJhZHUucGF0cml1QGVuZWEuY29tPgorLS0tCisgbGliL2F1dG90ZXN0L2dlbmVyYWwubTQgfCAgIDM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9hdXRvdGVzdC9nZW5lcmFsLm00IGIvbGliL2F1dG90ZXN0L2dlbmVyYWwubTQKK2luZGV4IDYwYzAzNTIuLmMxZjVhOWIgMTAwNjQ0CistLS0gYS9saWIvYXV0b3Rlc3QvZ2VuZXJhbC5tNAorKysrIGIvbGliL2F1dG90ZXN0L2dlbmVyYWwubTQKK0BAIC00MTIsNiArNDEyLDkgQEAgYXRfcmVjaGVjaz0KKyAjIFdoZXRoZXIgYSB3cml0ZSBmYWlsdXJlIG9jY3VycmVkCisgYXRfd3JpdGVfZmFpbD0wCisgCisrIyBBdXRvbWFrZSByZXN1bHQgZm9ybWF0ICJyZXN1bHQ6IHRlc3RuYW1lIgorK2F0X2FtX2ZtdD1mYWxzZQorKworICMgVGhlIGRpcmVjdG9yeSB3ZSBydW4gdGhlIHN1aXRlIGluLiAgRGVmYXVsdCB0byAuIGlmIG5vIC1DIG9wdGlvbi4KKyBhdF9kaXI9YHB3ZGAKKyAjIEFuIGFic29sdXRlIHJlZmVyZW5jZSB0byB0aGlzIHRlc3RzdWl0ZSBzY3JpcHQuCitAQCAtNTMwLDYgKzUzMywxMCBAQCBkbworIAlhdF9jaGVja19maWx0ZXJfdHJhY2U9YXRfZm5fZmlsdGVyX3RyYWNlCisgCTs7CisgCisrICAgIC0tYW0tZm10IHwgLUEgKQorKwlhdF9hbV9mbXQ9OgorKwk7OworKworICAgICBbWzAtOV0gfCBbMC05XVswLTldIHwgWzAtOV1bMC05XVswLTldIHwgWzAtOV1bMC05XVswLTldWzAtOV1dKQorIAlhdF9mbl92YWxpZGF0ZV9yYW5nZXMgYXRfb3B0aW9uCisgCUFTX1ZBUl9BUFBFTkQoW2F0X2dyb3Vwc10sIFsiJGF0X29wdGlvbiRhc19ubCJdKQorQEAgLTcxOCwxMCArNzI1LDEwIEBAIG00X2RpdmVydF9wdXNoKFtIRUxQX01PREVTXSlkbmwKKyBjYXQgPDxfQVRFT0YgfHwgYXRfd3JpdGVfZmFpbD0xCisgCisgT3BlcmF0aW9uIG1vZGVzOgorLSAgLWgsIC0taGVscCAgICAgcHJpbnQgdGhlIGhlbHAgbWVzc2FnZSwgdGhlbiBleGl0CistICAtViwgLS12ZXJzaW9uICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CistICAtYywgLS1jbGVhbiAgICByZW1vdmUgYWxsIHRoZSBmaWxlcyB0aGlzIHRlc3Qgc3VpdGUgbWlnaHQgY3JlYXRlIGFuZCBleGl0CistICAtbCwgLS1saXN0ICAgICBkZXNjcmliZXMgYWxsIHRoZSB0ZXN0cywgb3IgdGhlIHNlbGVjdGVkIFRFU1RTCisrICAtaCwgLS1oZWxwICAgICAgcHJpbnQgdGhlIGhlbHAgbWVzc2FnZSwgdGhlbiBleGl0CisrICAtViwgLS12ZXJzaW9uICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorKyAgLWMsIC0tY2xlYW4gICAgIHJlbW92ZSBhbGwgdGhlIGZpbGVzIHRoaXMgdGVzdCBzdWl0ZSBtaWdodCBjcmVhdGUgYW5kIGV4aXQKKysgIC1sLCAtLWxpc3QgICAgICBkZXNjcmliZXMgYWxsIHRoZSB0ZXN0cywgb3IgdGhlIHNlbGVjdGVkIFRFU1RTCisgX0FURU9GCisgbTRfZGl2ZXJ0X3BvcChbSEVMUF9NT0RFU10pZG5sCisgbTRfd3JhcChbbTRfZGl2ZXJ0X3B1c2goW0hFTFBfVFVOSU5HX0JFR0lOXSlkbmwKK0BAIC03NDcsNiArNzU0LDcgQEAgRXhlY3V0aW9uIHR1bmluZzoKKyAgIC1kLCAtLWRlYnVnICAgIGluaGliaXQgY2xlYW4gdXAgYW5kIHRvcC1sZXZlbCBsb2dnaW5nCisgWyAgICAgICAgICAgICAgICAgZGVmYXVsdCBmb3IgZGVidWdnaW5nIHNjcmlwdHNdCisgICAteCwgLS10cmFjZSAgICBlbmFibGUgdGVzdHMgc2hlbGwgdHJhY2luZworKyAgLUEsIC0tYW0tZm10ICAgYXV0b21ha2UgcmVzdWx0IGZvcm1hdCAicmVzdWx0OiB0ZXN0bmFtZSIKKyBfQVRFT0YKKyBtNF9kaXZlcnRfcG9wKFtIRUxQX1RVTklOR19CRUdJTl0pXSlkbmwKKyBtNF9kaXZlcnRfcHVzaChbSEVMUF9FTkRdKWRubAorQEAgLTExNjIsNyArMTE3MCw5IEBAIGF0X2ZuX2dyb3VwX2Jhbm5lciAoKQorICAgICBbKl0pICAgICAgICAgIGF0X2Rlc2NfbGluZT0iJFsxXTogIiAgOzsKKyAgIGVzYWMKKyAgIEFTX1ZBUl9BUFBFTkQoW2F0X2Rlc2NfbGluZV0sIFsiJFszXSRbNF0iXSkKKy0gICRhdF9xdWlldCBBU19FQ0hPX04oWyIkYXRfZGVzY19saW5lIl0pCisrICBpZiAhICRhdF9hbV9mbXQ7IHRoZW4KKysgICAgJGF0X3F1aWV0IEFTX0VDSE9fTihbIiRhdF9kZXNjX2xpbmUiXSkKKysgIGZpCisgICBlY2hvICIjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gY29tcGlsYXRpb24gLSotIiA+PiAiJGF0X2dyb3VwX2xvZyIKKyB9CisgCitAQCAtMTE4OCw0MiArMTE5OCw1MSBAQCBfQVRFT0YKKyAgIGNhc2UgJGF0X3hmYWlsOiRhdF9zdGF0dXMgaW4KKyAgICAgeWVzOjApCisgCWF0X21zZz0iVU5FWFBFQ1RFRCBQQVNTIgorKwlhdF9hbV9tc2c9IlhQQVNTIgorIAlhdF9yZXM9eHBhc3MKKyAJYXRfZXJyZXhpdD0kYXRfZXJyZXhpdF9wCisgCWF0X2NvbG9yPSRhdF9yZWQKKyAJOzsKKyAgICAgbm86MCkKKyAJYXRfbXNnPSJvayIKKysJYXRfYW1fbXNnPSJQQVNTIgorIAlhdF9yZXM9cGFzcworIAlhdF9lcnJleGl0PWZhbHNlCisgCWF0X2NvbG9yPSRhdF9ncm4KKyAJOzsKKyAgICAgKjo3NykKKyAJYXRfbXNnPSdza2lwcGVkICgnYGNhdCAiJGF0X2NoZWNrX2xpbmVfZmlsZSJgJyknCisrCWF0X2FtX21zZz0iU0tJUCIKKyAJYXRfcmVzPXNraXAKKyAJYXRfZXJyZXhpdD1mYWxzZQorIAlhdF9jb2xvcj0kYXRfYmx1CisgCTs7CisgICAgIG5vOiogfCAqOjk5KQorIAlhdF9tc2c9J0ZBSUxFRCAoJ2BjYXQgIiRhdF9jaGVja19saW5lX2ZpbGUiYCcpJworKwlhdF9hbV9tc2c9IkZBSUwiCisgCWF0X3Jlcz1mYWlsCisgCWF0X2VycmV4aXQ9JGF0X2VycmV4aXRfcAorIAlhdF9jb2xvcj0kYXRfcmVkCisgCTs7CisgICAgIHllczoqKQorIAlhdF9tc2c9J2V4cGVjdGVkIGZhaWx1cmUgKCdgY2F0ICIkYXRfY2hlY2tfbGluZV9maWxlImAnKScKKysJYXRfYW1fbXNnPSJYRkFJTCIKKyAJYXRfcmVzPXhmYWlsCisgCWF0X2VycmV4aXQ9ZmFsc2UKKyAJYXRfY29sb3I9JGF0X2xnbgorIAk7OworICAgZXNhYworICAgZWNobyAiJGF0X3JlcyIgPiAiJGF0X2pvYl9kaXIvJGF0X3JlcyIKKy0gICMgSW4gcGFyYWxsZWwgbW9kZSwgb3V0cHV0IHRoZSBzdW1tYXJ5IGxpbmUgb25seSBhZnRlcndhcmRzLgorLSAgaWYgdGVzdCAkYXRfam9icyAtbmUgMSAmJiB0ZXN0IC1uICIkYXRfdmVyYm9zZSI7IHRoZW4KKy0gICAgQVNfRUNITyhbIiRhdF9kZXNjX2xpbmUgJGF0X2NvbG9yJGF0X21zZyRhdF9zdGQiXSkKKysgIGlmICRhdF9hbV9mbXQ7IHRoZW4KKysgICAgICBBU19FQ0hPKFsiJGF0X2FtX21zZzogJGF0X2Rlc2MiXSkKKyAgIGVsc2UKKy0gICAgIyBNYWtlIHN1cmUgdGhlcmUgaXMgYSBzZXBhcmF0b3IgZXZlbiB3aXRoIGxvbmcgdGl0bGVzLgorLSAgICBBU19FQ0hPKFsiICRhdF9jb2xvciRhdF9tc2ckYXRfc3RkIl0pCisrICAgICMgSW4gcGFyYWxsZWwgbW9kZSwgb3V0cHV0IHRoZSBzdW1tYXJ5IGxpbmUgb25seSBhZnRlcndhcmRzLgorKyAgICBpZiB0ZXN0ICRhdF9qb2JzIC1uZSAxICYmIHRlc3QgLW4gIiRhdF92ZXJib3NlIjsgdGhlbgorKyAgICAgIEFTX0VDSE8oWyIkYXRfZGVzY19saW5lICRhdF9jb2xvciRhdF9tc2ckYXRfc3RkIl0pCisrICAgIGVsc2UKKysgICAgICAjIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIHNlcGFyYXRvciBldmVuIHdpdGggbG9uZyB0aXRsZXMuCisrICAgICAgQVNfRUNITyhbIiAkYXRfY29sb3IkYXRfbXNnJGF0X3N0ZCJdKQorKyAgICBmaQorICAgZmkKKyAgIGF0X2xvZ19tc2c9IiRhdF9ncm91cC4gJGF0X2Rlc2MgKCRhdF9zZXR1cF9saW5lKTogJGF0X21zZyIKKyAgIGNhc2UgJGF0X3N0YXR1cyBpbgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2NoZWNrLWF1dG9tYWtlLWNyb3NzLXdhcm5pbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9jaGVjay1hdXRvbWFrZS1jcm9zcy13YXJuaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMzk0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9jaGVjay1hdXRvbWFrZS1jcm9zcy13YXJuaW5nLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK1VzZSAtLXdhcm5pbmc9Y3Jvc3Mgb25seSBpZiBzdXBwb3J0ZWQgYnkgYXV0b21ha2UKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKKy0tLSBhL2Jpbi9hdXRvcmVjb25mLmluCisrKysgYi9iaW4vYXV0b3JlY29uZi5pbgorQEAgLTEyNyw2ICsxMjcsOCBAQCBteSAkYWNsb2NhbF9zdXBwb3J0c193YXJuaW5ncyA9IDA7CisgbXkgJGF1dG9tYWtlX3N1cHBvcnRzX2ZvcmNlX21pc3NpbmcgPSAwOworICMgRG9lcyBhdXRvbWFrZSBzdXBwb3J0IC1XZm9vPworIG15ICRhdXRvbWFrZV9zdXBwb3J0c193YXJuaW5ncyA9IDA7CisrIyBEb2VzIGF1dG9tYWtlIHN1cHBvcnQgLS13YXJuaW5nPWNyb3NzCisrbXkgJGF1dG9tYWtlX3N1cHBvcnRzX2Nyb3NzX3dhcm5pbmcgPSAwOworIAorIG15IEBwcmVwZW5kX2luY2x1ZGU7CisgbXkgQGluY2x1ZGU7CitAQCAtMTkxLDYgKzE5Myw3IEBAIHN1YiBwYXJzZV9hcmdzICgpCisgICAkYWNsb2NhbF9zdXBwb3J0c193YXJuaW5ncyA9ICRhY2xvY2FsX2hlbHAgPX4gLy0td2FybmluZ3MvOworICAgJGF1dG9tYWtlX3N1cHBvcnRzX2ZvcmNlX21pc3NpbmcgPSAkYXV0b21ha2VfaGVscCA9fiAvLS1mb3JjZS1taXNzaW5nLzsKKyAgICRhdXRvbWFrZV9zdXBwb3J0c193YXJuaW5ncyA9ICRhdXRvbWFrZV9oZWxwID1+IC8tLXdhcm5pbmdzLzsKKysgICRhdXRvbWFrZV9zdXBwb3J0c19jcm9zc193YXJuaW5nID0gJGF1dG9tYWtlX2hlbHAgPX4gL2Nyb3NzLzsKKyAKKyAgICMgRGlzcGF0Y2ggYXV0b3JlY29uZidzIG9wdGlvbiB0byB0aGUgdG9vbHMuCisgICAjIC0taW5jbHVkZTsKK0BAIC0yNDQsNiArMjQ3LDggQEAgc3ViIHBhcnNlX2FyZ3MgKCkKKyAgICAgICAkbGlidG9vbGl6ZSAuPSAnIC0tZGVidWcnOworICAgICB9CisgICAjIC0td2FybmluZ3M7CisrICBAd2FybmluZyA9IGdyZXAgeyAkXyBuZSAiY3Jvc3MiIH0gQHdhcm5pbmcKKysgICAgaWYgISAkYXV0b21ha2Vfc3VwcG9ydHNfY3Jvc3Nfd2FybmluZzsKKyAgIGlmIChAd2FybmluZykKKyAgICAgeworICAgICAgIG15ICR3YXJuID0gJyAtLXdhcm5pbmdzPScgLiBqb2luICgnLCcsIEB3YXJuaW5nKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2NvbmZpZ19zaXRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvY29uZmlnX3NpdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYwNDQ0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2NvbmZpZ19zaXRlLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitQb2t5IHByb3ZpZGVzIGEgbGlzdCBvZiBzaXRlIGZpbGVzIGluIENPTkZJR19TSVRFIHdoZXJlYXMgYXV0b2NvbmYgCitvbmx5IGV4cGVjdHMgb25lIGZpbGUuIFRoaXMgcGF0Y2ggY2hhbmdlcyBhdXRvY29uZiB0byBhY2NlcHQgYSBsaXN0IG9mIAordGhlbS4KKworUlAgMS8yLzEwCisKK1VwZGF0ZWQgZm9yIDIuNjggdmVyc2lvbjogdGhlIENPTkZJR19TSVRFIHZhciB3YXMgbm90IGdldHRpbmcgdXNlZCBhdCBhbGwKK2ZpeGVkIHRoZSAyLjY4IGNvZGUgCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzA1LzI3CisKK0luZGV4OiBhdXRvY29uZi0yLjY4L2xpYi9hdXRvY29uZi9nZW5lcmFsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXV0b2NvbmYtMi42OC5vcmlnL2xpYi9hdXRvY29uZi9nZW5lcmFsLm00CisrKysgYXV0b2NvbmYtMi42OC9saWIvYXV0b2NvbmYvZ2VuZXJhbC5tNAorQEAgLTE4NzgsNyArMTg3OCw2IEBAIEFVX0RFRlVOKFtBQ19WQUxJREFURV9DQUNIRURfU1lTVEVNX1RVUEwKKyBtNF9kZWZpbmUoW0FDX1NJVEVfTE9BRF0sCisgWyMgUHJlZmVyIGFuIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCisgYWNfc2l0ZV9maWxlMT1OT05FCistYWNfc2l0ZV9maWxlMj1OT05FCisgaWYgdGVzdCAtbiAiJENPTkZJR19TSVRFIjsgdGhlbgorICAgIyBXZSBkbyBub3Qgd2FudCBhIFBBVEggc2VhcmNoIGZvciBjb25maWcuc2l0ZS4KKyAgIGNhc2UgJENPTkZJR19TSVRFIGluIEAlOkAoKAorQEAgLTE4ODYsMTQgKzE4ODUsOCBAQCBpZiB0ZXN0IC1uICIkQ09ORklHX1NJVEUiOyB0aGVuCisgICAgICovKikgYWNfc2l0ZV9maWxlMT0kQ09ORklHX1NJVEU7OworICAgICAqKSAgIGFjX3NpdGVfZmlsZTE9Li8kQ09ORklHX1NJVEU7OworICAgZXNhYworLWVsaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCistICBhY19zaXRlX2ZpbGUxPSRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKy0gIGFjX3NpdGVfZmlsZTI9JHByZWZpeC9ldGMvY29uZmlnLnNpdGUKKy1lbHNlCistICBhY19zaXRlX2ZpbGUxPSRhY19kZWZhdWx0X3ByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQorLSAgYWNfc2l0ZV9maWxlMj0kYWNfZGVmYXVsdF9wcmVmaXgvZXRjL2NvbmZpZy5zaXRlCisgZmkKKy1mb3IgYWNfc2l0ZV9maWxlIGluICIkYWNfc2l0ZV9maWxlMSIgIiRhY19zaXRlX2ZpbGUyIgorK2ZvciBhY19zaXRlX2ZpbGUgaW4gJGFjX3NpdGVfZmlsZTEKKyBkbworICAgdGVzdCAieCRhY19zaXRlX2ZpbGUiID0geE5PTkUgJiYgY29udGludWUKKyAgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkYWNfc2l0ZV9maWxlIiAmJiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvZml4X3BhdGhfeHRyYS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2ZpeF9wYXRoX3h0cmEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVkZjg4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2ZpeF9wYXRoX3h0cmEucGF0Y2gKQEAgLTAsMCArMSwxMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXZSBkb24ndCBidWlsZCB4bWttZiBzbyBhbnkgdmFsdWVzIHJldHVybmVkIGZyb20gaXQgYXJlIGdvaW5nIHRvIGJlIHdyb25nLgorVXNpbmcgYW55IHBhdGhzIGluIC91c3IvIGZvciB4IGhlYWRlcnMvbGlicyBpcyBhIGJhZCBpZGVhIHdoZW4gY3Jvc3MgY29tcGlsaW5nLgorVGhpcyBwYXRjaCByZW1vdmVzIHRoZW0gdG8gc3RvcCBhbnkgY29uZnVzaW9uLgorCitSUCAtIDIwMDcxMTE1CisKK0luZGV4OiBhdXRvY29uZi0yLjY4L2xpYi9hdXRvY29uZi9saWJzLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXV0b2NvbmYtMi42OC5vcmlnL2xpYi9hdXRvY29uZi9saWJzLm00CisrKysgYXV0b2NvbmYtMi42OC9saWIvYXV0b2NvbmYvbGlicy5tNAorQEAgLTE1OSw1MyArMTU5LDYgQEAgbTRfcG9wZGVmKFtBQ19MaWJfTmFtZV0pZG5sCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworIAorIAorLSMgX0FDX1BBVEhfWF9YTUtNRgorLSMgLS0tLS0tLS0tLS0tLS0tLQorLSMgSW50ZXJuYWwgc3Vicm91dGluZSBvZiBfQUNfUEFUSF9YLgorLSMgU2V0IGFjX3hfaW5jbHVkZXMgYW5kL29yIGFjX3hfbGlicmFyaWVzLgorLW00X2RlZmluZShbX0FDX1BBVEhfWF9YTUtNRl0sCistW0FDX0FSR19WQVIoWE1LTUYsIFtQYXRoIHRvIHhta21mLCBNYWtlZmlsZSBnZW5lcmF0b3IgZm9yIFggV2luZG93IFN5c3RlbV0pZG5sCistcm0gLWYgLXIgY29uZnRlc3QuZGlyCistaWYgbWtkaXIgY29uZnRlc3QuZGlyOyB0aGVuCistICBjZCBjb25mdGVzdC5kaXIKKy0gIGNhdCA+SW1ha2VmaWxlIDw8J19BQ0VPRicKKy1pbmNyb290OgorLQlAZWNobyBpbmNyb290PScke0lOQ1JPT1R9JworLXVzcmxpYmRpcjoKKy0JQGVjaG8gdXNybGliZGlyPScke1VTUkxJQkRJUn0nCistbGliZGlyOgorLQlAZWNobyBsaWJkaXI9JyR7TElCRElSfScKKy1fQUNFT0YKKy0gIGlmIChleHBvcnQgQ0M7ICR7WE1LTUYteG1rbWZ9KSA+L2Rldi9udWxsIDI+L2Rldi9udWxsICYmIHRlc3QgLWYgTWFrZWZpbGU7IHRoZW4KKy0gICAgIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZyAuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorLSAgICBmb3IgYWNfdmFyIGluIGluY3Jvb3QgdXNybGliZGlyIGxpYmRpcjsgZG8KKy0gICAgICBldmFsICJhY19pbV8kYWNfdmFyPVxgXCR7TUFLRS1tYWtlfSAkYWNfdmFyIDI+L2Rldi9udWxsIHwgc2VkIC1uICdzL14kYWNfdmFyPS8vcCdcYCIKKy0gICAgZG9uZQorLSAgICAjIE9wZW4gV2luZG93cyB4bWttZiByZXBvcnRlZGx5IHNldHMgTElCRElSIGluc3RlYWQgb2YgVVNSTElCRElSLgorLSAgICBmb3IgYWNfZXh0ZW5zaW9uIGluIGEgc28gc2wgZHlsaWIgbGEgZGxsOyBkbworLSAgICAgIGlmIHRlc3QgISAtZiAiJGFjX2ltX3VzcmxpYmRpci9saWJYMTEuJGFjX2V4dGVuc2lvbiIgJiYKKy0JIHRlc3QgLWYgIiRhY19pbV9saWJkaXIvbGliWDExLiRhY19leHRlbnNpb24iOyB0aGVuCistCWFjX2ltX3VzcmxpYmRpcj0kYWNfaW1fbGliZGlyOyBicmVhaworLSAgICAgIGZpCistICAgIGRvbmUKKy0gICAgIyBTY3JlZW4gb3V0IGJvZ3VzIHZhbHVlcyBmcm9tIHRoZSBpbWFrZSBjb25maWd1cmF0aW9uLiAgVGhleSBhcmUKKy0gICAgIyBib2d1cyBib3RoIGJlY2F1c2UgdGhleSBhcmUgdGhlIGRlZmF1bHQgYW55d2F5LCBhbmQgYmVjYXVzZQorLSAgICAjIHVzaW5nIHRoZW0gd291bGQgYnJlYWsgZ2NjIG9uIHN5c3RlbXMgd2hlcmUgaXQgbmVlZHMgZml4ZWQgaW5jbHVkZXMuCistICAgIGNhc2UgJGFjX2ltX2luY3Jvb3QgaW4KKy0JL3Vzci9pbmNsdWRlKSBhY194X2luY2x1ZGVzPSA7OworLQkqKSB0ZXN0IC1mICIkYWNfaW1faW5jcm9vdC9YMTEvWG9zLmgiICYmIGFjX3hfaW5jbHVkZXM9JGFjX2ltX2luY3Jvb3Q7OworLSAgICBlc2FjCistICAgIGNhc2UgJGFjX2ltX3VzcmxpYmRpciBpbgorLQkvdXNyL2xpYiB8IC91c3IvbGliNjQgfCAvbGliIHwgL2xpYjY0KSA7OworLQkqKSB0ZXN0IC1kICIkYWNfaW1fdXNybGliZGlyIiAmJiBhY194X2xpYnJhcmllcz0kYWNfaW1fdXNybGliZGlyIDs7CistICAgIGVzYWMKKy0gIGZpCistICBjZCAuLgorLSAgcm0gLWYgLXIgY29uZnRlc3QuZGlyCistZmkKKy1dKSMgX0FDX1BBVEhfWF9YTUtNRgorLQorLQorICMgX0FDX1BBVEhfWF9ESVJFQ1QKKyAjIC0tLS0tLS0tLS0tLS0tLS0tCisgIyBJbnRlcm5hbCBzdWJyb3V0aW5lIG9mIF9BQ19QQVRIX1guCitAQCAtMjEzLDQ0ICsxNjYsNyBAQCBmaQorIG00X2RlZmluZShbX0FDX1BBVEhfWF9ESVJFQ1RdLAorIFsjIFN0YW5kYXJkIHNldCBvZiBjb21tb24gZGlyZWN0b3JpZXMgZm9yIFggaGVhZGVycy4KKyAjIENoZWNrIFgxMSBiZWZvcmUgWDExUm4gYmVjYXVzZSBpdCBpcyBvZnRlbiBhIHN5bWxpbmsgdG8gdGhlIGN1cnJlbnQgcmVsZWFzZS4KKy1hY194X2hlYWRlcl9kaXJzPScKKy0vdXNyL1gxMS9pbmNsdWRlCistL3Vzci9YMTFSNy9pbmNsdWRlCistL3Vzci9YMTFSNi9pbmNsdWRlCistL3Vzci9YMTFSNS9pbmNsdWRlCistL3Vzci9YMTFSNC9pbmNsdWRlCistCistL3Vzci9pbmNsdWRlL1gxMQorLS91c3IvaW5jbHVkZS9YMTFSNworLS91c3IvaW5jbHVkZS9YMTFSNgorLS91c3IvaW5jbHVkZS9YMTFSNQorLS91c3IvaW5jbHVkZS9YMTFSNAorLQorLS91c3IvbG9jYWwvWDExL2luY2x1ZGUKKy0vdXNyL2xvY2FsL1gxMVI3L2luY2x1ZGUKKy0vdXNyL2xvY2FsL1gxMVI2L2luY2x1ZGUKKy0vdXNyL2xvY2FsL1gxMVI1L2luY2x1ZGUKKy0vdXNyL2xvY2FsL1gxMVI0L2luY2x1ZGUKKy0KKy0vdXNyL2xvY2FsL2luY2x1ZGUvWDExCistL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI3CistL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI2CistL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI1CistL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI0CistCistL3Vzci9YMzg2L2luY2x1ZGUKKy0vdXNyL3gzODYvaW5jbHVkZQorLS91c3IvWEZyZWU4Ni9pbmNsdWRlL1gxMQorLQorLS91c3IvaW5jbHVkZQorLS91c3IvbG9jYWwvaW5jbHVkZQorLS91c3IvdW5zdXBwb3J0ZWQvaW5jbHVkZQorLS91c3IvYXRoZW5hL2luY2x1ZGUKKy0vdXNyL2xvY2FsL3gxMXI1L2luY2x1ZGUKKy0vdXNyL2xwcC9YYW1wbGVzL2luY2x1ZGUKKy0KKy0vdXNyL29wZW53aW4vaW5jbHVkZQorLS91c3Ivb3Blbndpbi9zaGFyZS9pbmNsdWRlJworK2FjX3hfaGVhZGVyX2RpcnM9JycKKyAKKyBpZiB0ZXN0ICIkYWNfeF9pbmNsdWRlcyIgPSBubzsgdGhlbgorICAgIyBHdWVzcyB3aGVyZSB0byBmaW5kIGluY2x1ZGUgZmlsZXMsIGJ5IGxvb2tpbmcgZm9yIFhsaWIuaC4KK0BAIC0yOTksNyArMjE1LDYgQEAgQUNfREVGVU4oW19BQ19QQVRIX1hdLAorIFtBQ19DQUNIRV9WQUwoYWNfY3ZfaGF2ZV94LAorIFsjIE9uZSBvciBib3RoIG9mIHRoZSB2YXJzIGFyZSBub3Qgc2V0LCBhbmQgdGhlcmUgaXMgbm8gY2FjaGVkIHZhbHVlLgorIGFjX3hfaW5jbHVkZXM9bm8gYWNfeF9saWJyYXJpZXM9bm8KKy1fQUNfUEFUSF9YX1hNS01GCisgX0FDX1BBVEhfWF9ESVJFQ1QKKyBjYXNlICRhY194X2luY2x1ZGVzLCRhY194X2xpYnJhcmllcyBpbiAjKAorICAgbm8sKiB8ICosbm8gfCAqXCcqKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvcHJlZmVyYmFzaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3ByZWZlcmJhc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3NmVlOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3ByZWZlcmJhc2gucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGRldGVybWluZSBDT05GSUdfU0hFTEwgYW5kIFNIRUxMIHdoaWNoIG1heSBnZXQgZXhwb3J0ZWQgaW50bworc2NyaXB0cyBzaGFyZWQgdmlhIHNzdGF0ZSBvbnRvIG90aGVyIHN5c3RlbXMuCisKK1NvbWUgc3lzdGVtcyBoYXZlIC9iaW4vc2ggLT4gZGFzaCBhbmQgb3RoZXJzIC9iaW4vc2ggLT4gYmFzaC4gQmFzaCBpcyBwcmVmZXJyZWQgCitidXQgc29tZXRpbWVzIHdlIGNhbiBzb21ldGltZXMgZW5kIHVwIGV4cG9ydGluZyAvYmluL3NoIHlldCB1c2UgYmFzaGlzbXMuCisKK1RoaXMgcGF0Y2ggcHV0cyBiYXNoIGZpcnN0IGluIHRoZSBzZWFyY2ggcmVzdWx0cyB3aGljaCBhdm9pZHMgdGhlIGJhc2gvZGFzaCBjb25mdXNpb24uCisKK1JQIDIwMTIvOS8yMworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBhdXRvY29uZi0yLjY5L2xpYi9tNHN1Z2FyL200c2gubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdXRvY29uZi0yLjY5Lm9yaWcvbGliL200c3VnYXIvbTRzaC5tNAkyMDEyLTAzLTA3IDE3OjM1OjI2LjAwMDAwMDAwMCArMDAwMAorKysrIGF1dG9jb25mLTIuNjkvbGliL200c3VnYXIvbTRzaC5tNAkyMDEzLTA5LTIzIDE2OjEyOjM4Ljg1MzU5NzUxNSArMDAwMAorQEAgLTIyOSw3ICsyMjksNyBAQAorICAgICBbX0FTX1BBVEhfV0FMSyhbL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEhdLAorICAgICAgIFtjYXNlICRhc19kaXIgaW4gQCU6QCgKKyAJIC8qKQorLQkgICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCisrCSAgIGZvciBhc19iYXNlIGluIGJhc2ggc2gga3NoIHNoNTsgZG8KKyAJICAgICAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCisgCSAgICAgYXNfc2hlbGw9JGFzX2Rpci8kYXNfYmFzZQorIAkgICAgIEFTX0lGKFt7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3Byb2dyYW1fcHJlZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvcHJvZ3JhbV9wcmVmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4YTQwMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3Byb2dyYW1fcHJlZml4LnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5tbi1sb2dpc3Rpay5kZS91bnN1cHBvcnRlZC9weGEyNTAvcGF0Y2hlcgorIworCistLS0gYXV0b2NvbmYtMi41Ny9saWIvYXV0b2NvbmYvZ2VuZXJhbC5tNH5wcm9ncmFtX3ByZWZpeAorKysrIGF1dG9jb25mLTIuNTcvbGliL2F1dG9jb25mL2dlbmVyYWwubTQKK0BAIC0xNjc2LDggKzE2NzYsOSBAQAorICMgVGhlIGFsaWFzZXMgc2F2ZSB0aGUgbmFtZXMgdGhlIHVzZXIgc3VwcGxpZWQsIHdoaWxlICRob3N0IGV0Yy4KKyAjIHdpbGwgZ2V0IGNhbm9uaWNhbGl6ZWQuCisgdGVzdCAtbiAiJHRhcmdldF9hbGlhcyIgJiYKKy0gIHRlc3QgIiRwcm9ncmFtX3ByZWZpeCRwcm9ncmFtX3N1ZmZpeCRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiA9IFwKKy0gICAgTk9ORU5PTkVzLHgseCwgJiYKKysgIHRlc3QgIiR0YXJnZXRfYWxpYXMiICE9ICIkaG9zdF9hbGlhcyIgJiYKKysgICAgdGVzdCAiJHByb2dyYW1fcHJlZml4JHByb2dyYW1fc3VmZml4JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiID0gXAorKyAgICAgIE5PTkVOT05Fcyx4LHgsICYmCisgICBwcm9ncmFtX3ByZWZpeD0ke3RhcmdldF9hbGlhc30tW11kbmwKKyBdKSMgQUNfQ0FOT05JQ0FMX1RBUkdFVAorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3JlbW92ZS11c3ItbG9jYWwtbGliLWZyb20tbTQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVkMmUyZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3JlbW92ZS11c3ItbG9jYWwtbGliLWZyb20tbTQucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorV2UgaGF2ZSBwcm9ibGVtIHVzaW5nIGhhcmRjb2RlZCBkaXJlY3RvcmllcyBsaWtlIC91c3IvbG9jYWwgaGVyZQord2hpY2ggd2lsbCBiZSBjaGVja2VkIGZvciBjcm9zcyBidWlsZHMuIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Ugd2hpY2gKK2lzIHZhbGlkIGZvciBBSVggb25seS4gV2UgZG8gbm90IGhhdmUgQUlYIGFzIG9uZSBvZiBvdXIgc3VwcG9ydGVkCitidWlsZCBob3N0IG9yIHRhcmdldC4gVGhlcmVmb3JlIHdlIGdldCByaWQgb2YgdGhlIGhhcmRjb2RlZCBwYXRocworYW5kIG1ha2UgbGlmZSBlYXNpZXIgZm9yIGNyb3NzIGNvbXBpbGF0aW9uIHByb2Nlc3MuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbVXBzdHJlYW0gZG9lcyBjYXJlIGZvciBBSVggd2hpbGUgd2UgbWF5IG5vdF0KK0luZGV4OiBhdXRvY29uZi0yLjY4L2xpYi9hdXRvY29uZi9mdW5jdGlvbnMubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdXRvY29uZi0yLjY4Lm9yaWcvbGliL2F1dG9jb25mL2Z1bmN0aW9ucy5tNAkyMDEwLTA5LTIyIDE0OjUyOjE5LjAwMDAwMDAwMCAtMDcwMAorKysrIGF1dG9jb25mLTIuNjgvbGliL2F1dG9jb25mL2Z1bmN0aW9ucy5tNAkyMDExLTA4LTAzIDExOjU3OjA1LjgyMjE5OTUxMyAtMDcwMAorQEAgLTc0OSwxNSArNzQ5LDYgQEAgaWYgdGVzdCAkYWNfaGF2ZV9mdW5jID0gbm87IHRoZW4KKyAgICAgW0xJQlM9Ii1sdXRpbCAkTElCUyIgYWNfaGF2ZV9mdW5jPXllcyBhY19jdl9mdW5jX2dldGxvYWRhdmdfc2V0Z2lkPXllc10pCisgZmkKKyAKKy1pZiB0ZXN0ICRhY19oYXZlX2Z1bmMgPSBubzsgdGhlbgorLSAgIyBUaGVyZSBpcyBhIGNvbW1vbmx5IGF2YWlsYWJsZSBsaWJyYXJ5IGZvciBSUy82MDAwIEFJWC4KKy0gICMgU2luY2UgaXQgaXMgbm90IGEgc3RhbmRhcmQgcGFydCBvZiBBSVgsIGl0IG1pZ2h0IGJlIGluc3RhbGxlZCBsb2NhbGx5LgorLSAgYWNfZ2V0bG9hZGF2Z19MSUJTPSRMSUJTCistICBMSUJTPSItTC91c3IvbG9jYWwvbGliICRMSUJTIgorLSAgQUNfQ0hFQ0tfTElCKGdldGxvYWRhdmcsIGdldGxvYWRhdmcsCistCSAgICAgICBbTElCUz0iLWxnZXRsb2FkYXZnICRMSUJTIl0sIFtMSUJTPSRhY19nZXRsb2FkYXZnX0xJQlNdKQorLWZpCistCisgIyBNYWtlIHN1cmUgaXQgaXMgcmVhbGx5IGluIHRoZSBsaWJyYXJ5LCBpZiB3ZSB0aGluayB3ZSBmb3VuZCBpdCwKKyAjIG90aGVyd2lzZSBzZXQgdXAgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uLgorIEFDX0NIRUNLX0ZVTkNTKGdldGxvYWRhdmcsIFtdLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmZfMi42OS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mXzIuNjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA5MDA3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mXzIuNjkuYmIKQEAgLTAsMCArMSwyNSBAQAorcmVxdWlyZSBhdXRvY29uZi5pbmMKKworUFIgPSAicjExIgorCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisJCSAgICBmaWxlOi8vQ09QWUlOR3YzO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKK1NSQ19VUkkgKz0gImZpbGU6Ly9hdXRvcmVjb25mLWluY2x1ZGUucGF0Y2ggXAorCSAgICBmaWxlOi8vY2hlY2stYXV0b21ha2UtY3Jvc3Mtd2FybmluZy5wYXRjaCBcCisJICAgIGZpbGU6Ly9hdXRvcmVjb25mLWV4Y2x1ZGUucGF0Y2ggXAorCSAgICBmaWxlOi8vYXV0b3JlY29uZi1nbnVjb25maWdpemUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2NvbmZpZ19zaXRlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtdXNyLWxvY2FsLWxpYi1mcm9tLW00LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wcmVmZXJiYXNoLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hdXRvdGVzdC1hdXRvbWFrZS1yZXN1bHQtZm9ybWF0LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODJkMDVlMDNiOTNlNDVmNWEzOWI4MjhkYzljNmMyOWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTU0YmQ2OWIzOTFlZGMxMmQ2YTRhNTFhMmRkMTQ3NjU0M2RhNWM2YmJmMDVhOTViNTlkYzBkZDZmZDRjMjk2OSIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlOi8vZml4X3BhdGhfeHRyYS5wYXRjaCIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9wYXRoX000PW00IGFjX2N2X3Byb2dfVEVTVF9FTUFDUz1ubyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuLW5hdGl2ZV81LjE4LjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4tbmF0aXZlXzUuMTguNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTI4NTEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuLW5hdGl2ZV81LjE4LjUuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJBdXRvbWF0ZWQgdGV4dCBhbmQgcHJvZ3JhbSBnZW5lcmF0aW9uIHRvb2wiCitERVNDUklQVElPTiA9ICJBdXRvR2VuIGlzIGEgdG9vbCBkZXNpZ25lZCB0byBzaW1wbGlmeSB0aGUgY3JlYXRpb24gYW5kXAorIG1haW50ZW5hbmNlIG9mIHByb2dyYW1zIHRoYXQgY29udGFpbiBsYXJnZSBhbW91bnRzIG9mIHJlcGV0aXRpb3VzIHRleHQuXAorIEl0IGlzIGVzcGVjaWFsbHkgdmFsdWFibGUgaW4gcHJvZ3JhbXMgdGhhdCBoYXZlIHNldmVyYWwgYmxvY2tzIG9mIHRleHRcCisgdGhhdCBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvZ2VuLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9hdXRvZ2VuL3JlbCR7UFZ9L2F1dG9nZW4tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2luY3JlYXNlLXRpbWVvdXQtbGltaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWstdHBsLWNvbmZpZy5zaC1mb3JjZS1leGl0LXZhbHVlLXRvLWJlLTAtaW4tc3VicHJvYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZWRpcmVjdC1vdXRwdXQtZGlyLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjM4NWQ3YzdkZmJlNjBiYWJiZWUyNjFjMDU0OTIzYTUzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdiYmRiNzNiNTUxOGJhZjY0YzZkMzczOWZiMmVjYzY2ZDJjY2NkYTg4OGNlNWFkNTczYWJlMjM1YWI1ZDk2YmEiCisKK0RFUEVORFMgPSAiZ3VpbGUtbmF0aXZlIGxpYnRvb2wtbmF0aXZlIGxpYnhtbDItbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIG5hdGl2ZSBwa2djb25maWcKKworIyBhdXRvZ2VuLW5hdGl2ZSBsaW5rcyBhZ2FpbnN0IGxpYmd1aWxlIHdoaWNoIG1heSBoYXZlIGJlZW4gcmVsb2NhdGVkIHdpdGggc3N0YXRlCisjIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBlbnN1cmUgdGhlcmUgaXNuJ3QgYSByZWxvY2F0aW9uIGlzc3VlCitleHBvcnQgR1VJTEVfTE9BRF9QQVRIID0gIiR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ3VpbGUvMi4wIgorZXhwb3J0IEdVSUxFX0xPQURfQ09NUElMRURfUEFUSCA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ3VpbGUvMi4wL2NjYWNoZSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2F1dG9nZW4gXAorCQlHVUlMRV9MT0FEX1BBVEg9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9ndWlsZS8yLjAgXAorCQlHVUlMRV9MT0FEX0NPTVBJTEVEX1BBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2d1aWxlLzIuMC9jY2FjaGUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9pbmNyZWFzZS10aW1lb3V0LWxpbWl0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuL2luY3JlYXNlLXRpbWVvdXQtbGltaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q0YzFkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9pbmNyZWFzZS10aW1lb3V0LWxpbWl0LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1N1YmplY3Q6IFtQQVRDSF0gYXV0b2dlbjogaW5jcmVhc2UgdGltZW91dCBsaW1pdCBmb3Igc2hlbGwgY29tbWFuZHMKKworT24gc29tZSBvdmVybG9hZGVkIGhvc3RzLCBzaGVsbCBjb21tYW5kcyBvZiBhdXRvZ2VuIG1heSBjYW4gbm90CitmaW5pc2ggaW4gNSBzZWNzLiBUaGlzIGhhcyBjYXVzZWQgbWFueSBidWlsZCBmYWlsdXJlcywgc28gaW5jcmVhc2UKK3RoZSB0aW1lb3V0IGxpbWl0IHRvIGZpeCB0aGlzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFhpbiBPdXlhbmcgPFhpbi5PdXlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDYgKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMGFmN2MxOC4uNTU0NGY1OSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTc1LDkgKzE3NSw5IEBAIGNvbmZpZ19lbmRfdGltZT1gZGF0ZSArJXMgMj4vZGV2L251bGxgCisgdGltZV9kZWx0YT1gZXhwciAke2NvbmZpZ19lbmRfdGltZX0gLSAke2NvbmZpZ19zdGFydF90aW1lfSAyPi9kZXYvbnVsbGAKKyAKKyBpZiB0ZXN0IC16ICIke3RpbWVfZGVsdGF9IgorLXRoZW4gdGltZV9kZWx0YT0xMAorLWVsaWYgdGVzdCAke3RpbWVfZGVsdGF9IC1sdCA1CistdGhlbiB0aW1lX2RlbHRhPTUgOyBmaQorK3RoZW4gdGltZV9kZWx0YT02MAorK2VsaWYgdGVzdCAke3RpbWVfZGVsdGF9IC1sdCAzMAorK3RoZW4gdGltZV9kZWx0YT0zMCA7IGZpCisgCisgQUdfVElNRU9VVD0ke3RpbWVfZGVsdGF9CisgXQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9tay10cGwtY29uZmlnLnNoLWZvcmNlLWV4aXQtdmFsdWUtdG8tYmUtMC1pbi1zdWJwcm9jLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuL21rLXRwbC1jb25maWcuc2gtZm9yY2UtZXhpdC12YWx1ZS10by1iZS0wLWluLXN1YnByb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU2ZGE3YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9tay10cGwtY29uZmlnLnNoLWZvcmNlLWV4aXQtdmFsdWUtdG8tYmUtMC1pbi1zdWJwcm9jLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCittay10cGwtY29uZmlnLnNoOiBmb3JjZSBleGl0IHZhbHVlIHRvIGJlIDAgaW4gc3VicHJvY2VzcworCitUaGUgcmV0dXJuIHZhbHVlIG9mIHN0YXRlbWVudCBsaXN0PWA8c3ViY29tbWFuZHM+YCBpcyB0aGUgZXhpdCB2YWx1ZSBvZiB0aGUKK3N1YmNvbW1hbmRzLiBTbyBpZiB0aGUgc3ViY29tbWFuZHMgZmFpbHMsIHRoZSBjb21waWxhdGlvbiBmYWlscy4gVGhpcyBpcyBvYnZpb3VzbHkKK25vdCBpbnRlbmRlZC4gSW4gdGhlIG5vcm1hbCBjYXNlLCB3ZSBleHBlY3QgdGhlIGdyZXAgY29tbWFuZCB0byBmYWlsIGFzIHRoZXJlIHNob3VsZAorYmUgbm8gJ25vcmV0dXJuJyB3b3JkIGluIHRoZSBsaWJndWlsZSBmaWxlcy4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgYXV0b29wdHMvbWstdHBsLWNvbmZpZy5zaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2F1dG9vcHRzL21rLXRwbC1jb25maWcuc2ggYi9hdXRvb3B0cy9tay10cGwtY29uZmlnLnNoCitpbmRleCA5MjZmNWFiLi42YjRhMGZiIDEwMDc1NQorLS0tIGEvYXV0b29wdHMvbWstdHBsLWNvbmZpZy5zaAorKysrIGIvYXV0b29wdHMvbWstdHBsLWNvbmZpZy5zaAorQEAgLTIwMiw3ICsyMDIsNyBAQCBmaXhfZ3VpbGUoKSB7CisgCisgICAgIGxpc3Q9YHNldCArZSA7IGV4ZWMgMj4vZGV2L251bGwKKyAgICAgICAgIGZpbmQgJHtsaWJndWlsZWRpcn0vbGliZ3VpbGUqIC10eXBlIGYgfCBcCistICAgICAgICAgICAgeGFyZ3MgZ3JlcCAtbCAtRSAnXDxub3JldHVyblw+J2AKKysgICAgICAgICAgICB4YXJncyBncmVwIC1sIC1FICdcPG5vcmV0dXJuXD4nIDsgZXhpdCAwYAorIAorICAgICB0ZXN0IC16ICIkbGlzdCIgJiYgZXhpdCAwCisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuL3JlZGlyZWN0LW91dHB1dC1kaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vcmVkaXJlY3Qtb3V0cHV0LWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTEyNmVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuL3JlZGlyZWN0LW91dHB1dC1kaXIucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorW1BBVENIXSByZWRpcmVjdCB0aGUgZGlyIG9mIG1rbGlic3JjLWxvZy50eAorCitVcHN0cmVhbS1TdGF0dWU6IFBlbmRpbmcKKworcmVkaXJlY3QgbWtsaWJzcmMtbG9nLnR4IHRvIGJ1aWxkZGlyLCBub3QgL3RtcDsgb3RoZXJ3aXNlIG1rbGlic3JjLWxvZy50eAorbWF5YmUgdW5hYmxlIHRvIGJlIHdyaXR0ZW4gaWYgb3RoZXIgdXNlcnMgaXMgYnVpbGRpbmcgYXV0b2dlbiBhdCB0aGUgc2FtZSB0aW1lLgorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBwa2cvbGlib3B0cy9ta2xpYnNyYy5zaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3BrZy9saWJvcHRzL21rbGlic3JjLnNoIGIvcGtnL2xpYm9wdHMvbWtsaWJzcmMuc2gKK2luZGV4IDQxNmI0MDIuLmQ2MTJmYmMgMTAwNjQ0CistLS0gYS9wa2cvbGlib3B0cy9ta2xpYnNyYy5zaAorKysrIGIvcGtnL2xpYm9wdHMvbWtsaWJzcmMuc2gKK0BAIC0xOSw3ICsxOSw3IEBACisgIyMgIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorIHNldCAtZXgKKy1leGVjIDI+IC90bXAvbWtsaWJzcmMtbG9nLnR4CisrZXhlYyAyPiAkdG9wX2J1aWxkZGlyL21rbGlic3JjLWxvZy50eAorIAorIHRvcF9idWlsZGRpcj1gY2QgJHRvcF9idWlsZGRpciA7IHB3ZGAKKyB0b3Bfc3JjZGlyPWBjZCAkdG9wX3NyY2RpciA7IHB3ZGAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZGViZDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS5pbmMKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJBIEdOVSB0b29sIGZvciBhdXRvbWF0aWNhbGx5IGdlbmVyYXRpbmcgTWFrZWZpbGVzIgorREVTQ1JJUFRJT04gPSAiQXV0b21ha2UgaXMgYSB0b29sIGZvciBhdXRvbWF0aWNhbGx5IGdlbmVyYXRpbmcgYE1ha2VmaWxlLmluJyBmaWxlcyBjb21wbGlhbnQgd2l0aCB0aGUgR05VIENvZGluZyBcCitTdGFuZGFyZHMuIEF1dG9tYWtlIHJlcXVpcmVzIHRoZSB1c2Ugb2YgQXV0b2NvbmYuIgorTElDRU5TRSA9ICJHUEx2MiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvbWFrZS8iCitTRUNUSU9OID0gImRldmVsIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYXV0b21ha2UvYXV0b21ha2UtJHtQVn0udGFyLmd6IgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwlvZV9ydW5jb25mCit9CisKK2V4cG9ydCBBVVRPTUFLRSA9ICIke0BiYi51dGlscy53aGljaCgnYXV0b21ha2UnLCBkLmdldFZhcignUEFUSCcsIFRydWUpKX0iCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2F1dG9tYWtlKiAke2RhdGFkaXJ9L2FjbG9jYWwqIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UvYnVpbGR0ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UvYnVpbGR0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZDUzMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9idWlsZHRlc3QucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorU3BsaXQgImNoZWNrLVRFU1RTIiBpbnRvIGEgYnVpbGR0ZXN0IGFuZCBydW50ZXN0IHRhcmdldCwgc28gdGhhdCB0aGV5IGNhbgorYmUgcnVuIHNlcGFyYXRlbHkuCisKK1NpZ25lZC1vZmYtYnk6IEJqw7ZybiBTdGVuYmVyZyA8YmpzdEBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gYS9saWIvYW0vY2hlY2suYW0JMjAxMi0xMS0xNCAxMzo0NjoxNi4zMzU0NzU5OTUgKzAxMDAKKysrKyBiL2xpYi9hbS9jaGVjay5hbQkyMDEyLTA4LTEzIDE4OjQwOjEyLjAwMDAwMDAwMCArMDIwMAorQEAgLTQ0LDcgKzQ0LDcgQEAKKyBhbV9fdHR5X2NvbG9ycyA9ICQoYW1fX3R0eV9jb2xvcnNfZHVtbXkpCisgZW5kaWYgISU/Q09MT1IlCisKKy0uUEhPTlk6IGNoZWNrLVRFU1RTCisrLlBIT05ZOiBjaGVjay1URVNUUyBidWlsZHRlc3QtVEVTVFMgcnVudGVzdC1URVNUUworCisgaWYgJT9QQVJBTExFTF9URVNUUyUKKworQEAgLTQ2NSw3ICs0NjUsMTQgQEAKKworIGVsc2UgISU/UEFSQUxMRUxfVEVTVFMlCisKKy1jaGVjay1URVNUUzogJChURVNUUykKKytBTV9SRUNVUlNJVkVfVEFSR0VUUyArPSBidWlsZHRlc3QgcnVudGVzdAorKworK2J1aWxkdGVzdC1URVNUUzogJChURVNUUykKKysKKytjaGVjay1URVNUUzogYnVpbGR0ZXN0LVRFU1RTCisrCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHJ1bnRlc3QtVEVTVFMKKysKKytydW50ZXN0LVRFU1RTOgorCUBmYWlsZWQ9MDsgYWxsPTA7IHhmYWlsPTA7IHhwYXNzPTA7IHNraXA9MDsgXAorCXNyY2Rpcj0kKHNyY2Rpcik7IGV4cG9ydCBzcmNkaXI7IFwKKyAjIyBNYWtlIHN1cmUgU29sYXJpcyBWUEFUSC1leHBhbmRzIGFsbCBtZW1iZXJzIG9mIHRoaXMgbGlzdCwgZXZlbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UvcHktY29tcGlsZS1jb21waWxlLW9ubHktb3B0aW1pemVkLWJ5dGUtY29kZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL3B5LWNvbXBpbGUtY29tcGlsZS1vbmx5LW9wdGltaXplZC1ieXRlLWNvZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzMzRhNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL3B5LWNvbXBpbGUtY29tcGlsZS1vbmx5LW9wdGltaXplZC1ieXRlLWNvZGUucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworKiBPRS1Db3JlJ3MgcHl0aG9uIGNyZWF0ZXMgdGhlIHNhbWUgYmluYXJ5IG91dHB1dAorICBmb3IgYm90aCBweWMgYW5kIHB5bywgc28gZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YKKyAgcHljIGZpbGVzIGJ5IGF1dG9tYWtlLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE9iZXJyaXR0ZXIgPG9iaUBvcGVuZHJlYW1ib3gub3JnPgorCitVcGRhdGVkIGZvciBhdXRvbWFrZS0xLjEyLjYKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKworZGlmZiAtTnVyZCBhdXRvbWFrZS0xLjEyLjYvbGliL3B5LWNvbXBpbGUgYXV0b21ha2UtMS4xMi42L2xpYi9weS1jb21waWxlCistLS0gYXV0b21ha2UtMS4xMi42L2xpYi9weS1jb21waWxlCTIwMTItMTItMTMgMjE6NTc6MzEuMDAwMDAwMDAwICswMjAwCisrKysgYXV0b21ha2UtMS4xMi42L2xpYi9weS1jb21waWxlCTIwMTItMTItMjcgMTk6MzQ6MDEuNDI2MDE1MTQwICswMjAwCitAQCAtMTE1LDI2ICsxMTUsNiBAQAorICAgICBmaWxldHJhbnM9ImZpbGVwYXRoID0gb3MucGF0aC5ub3JtcGF0aCgnJGRlc3RkaXInICsgb3Muc2VwICsgcGF0aCkiCisgZmkKKyAKKy0kUFlUSE9OIC1jICIKKy1pbXBvcnQgc3lzLCBvcywgcHlfY29tcGlsZSwgaW1wCistCistZmlsZXMgPSAnJyckZmlsZXMnJycKKy0KKy1zeXMuc3Rkb3V0LndyaXRlKCdCeXRlLWNvbXBpbGluZyBweXRob24gbW9kdWxlcy4uLlxuJykKKy1mb3IgZmlsZSBpbiBmaWxlcy5zcGxpdCgpOgorLSAgICAkcGF0aHRyYW5zCistICAgICRmaWxldHJhbnMKKy0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVwYXRoKSBvciBub3QgKGxlbihmaWxlcGF0aCkgPj0gMworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGZpbGVwYXRoWy0zOl0gPT0gJy5weScpOgorLQkgICAgY29udGludWUKKy0gICAgc3lzLnN0ZG91dC53cml0ZShmaWxlKQorLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKy0gICAgaWYgaGFzYXR0cihpbXAsICdnZXRfdGFnJyk6CistICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoZmlsZXBhdGgsIGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlcGF0aCksIHBhdGgpCistICAgIGVsc2U6CistICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoZmlsZXBhdGgsIGZpbGVwYXRoICsgJ2MnLCBwYXRoKQorLXN5cy5zdGRvdXQud3JpdGUoJ1xuJykiIHx8IGV4aXQgJD8KKy0KKyAjIHRoaXMgd2lsbCBmYWlsIGZvciBweXRob24gPCAxLjUsIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyIC4uLgorICRQWVRIT04gLU8gLWMgIgorIGltcG9ydCBzeXMsIG9zLCBweV9jb21waWxlLCBpbXAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL3B5dGhvbi1saWJkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9weXRob24tbGliZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NTQxYmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9weXRob24tbGliZGlyLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisKK1VwZGF0ZWQgZm9yIGF1dG9tYWtlLTEuMTIuNgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorCitkaWZmIC1OdXJkIGF1dG9tYWtlLTEuMTIuNi9tNC9weXRob24ubTQgYXV0b21ha2UtMS4xMi42L200L3B5dGhvbi5tNAorLS0tIGF1dG9tYWtlLTEuMTIuNi9tNC9weXRob24ubTQJMjAxMi0xMi0xMyAyMjowMjoyNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBhdXRvbWFrZS0xLjEyLjYvbTQvcHl0aG9uLm00CTIwMTItMTItMjcgMTc6NDA6MjYuNTU4MTY0NjYwICswMjAwCitAQCAtOTEsMTIgKzkxLDEzIEBACisgICAgIFthbV9jdl9weXRob25fdmVyc2lvbj1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMudmVyc2lvbltbOjNdXSkiYF0pCisgICBBQ19TVUJTVChbUFlUSE9OX1ZFUlNJT05dLCBbJGFtX2N2X3B5dGhvbl92ZXJzaW9uXSkKKyAKKy0gIGRubCBVc2UgdGhlIHZhbHVlcyBvZiAkcHJlZml4IGFuZCAkZXhlY19wcmVmaXggZm9yIHRoZSBjb3JyZXNwb25kaW5nCistICBkbmwgdmFsdWVzIG9mIFBZVEhPTl9QUkVGSVggYW5kIFBZVEhPTl9FWEVDX1BSRUZJWC4gIFRoZXNlIGFyZSBtYWRlCisrICBkbmwgVXNlIHRoZSB2YWx1ZXMgb2YgJHByZWZpeCwgJGxpYmRpciBhbmQgJGV4ZWNfcHJlZml4IGZvciB0aGUgY29ycmVzcG9uZGluZworKyAgZG5sIHZhbHVlcyBvZiBQWVRIT05fUFJFRklYIFBZVEhPTl9MSUJfUFJFRklYLCBhbmQgUFlUSE9OX0VYRUNfUFJFRklYLiAgVGhlc2UgYXJlIG1hZGUKKyAgIGRubCBkaXN0aW5jdCB2YXJpYWJsZXMgc28gdGhleSBjYW4gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkIGJlLiAgSG93ZXZlciwKKyAgIGRubCBnZW5lcmFsIGNvbnNlbnN1cyBpcyB0aGF0IHlvdSBzaG91bGRuJ3QgbmVlZCB0aGlzIGFiaWxpdHkuCisgCisgICBBQ19TVUJTVChbUFlUSE9OX1BSRUZJWF0sIFsnJHtwcmVmaXh9J10pCisrICBBQ19TVUJTVChbUFlUSE9OX0xJQl9QUkVGSVhdLCBbJyR7bGliZGlyfSddKQorICAgQUNfU1VCU1QoW1BZVEhPTl9FWEVDX1BSRUZJWF0sIFsnJHtleGVjX3ByZWZpeH0nXSkKKyAKKyAgIGRubCBBdCB0aW1lcyAobGlrZSB3aGVuIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMpIHlvdSBtYXkgd2FudAorQEAgLTE0OCw3ICsxNDksOCBAQAorIGVsc2U6CisgICAgIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKKyAgICAgc2l0ZWRpciA9IHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYigwLCAwLCBwcmVmaXg9JyRhbV9weV9wcmVmaXgnKQorLXN5cy5zdGRvdXQud3JpdGUoc2l0ZWRpcikiYAorK3N5cy5zdGRvdXQud3JpdGUoc2l0ZWRpcikiIHx8CisrICAgICBlY2hvICIkUFlUSE9OX0xJQl9QUkVGSVgvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMiYAorICAgICAgY2FzZSAkYW1fY3ZfcHl0aG9uX3B5dGhvbmRpciBpbgorICAgICAgJGFtX3B5X3ByZWZpeCopCisgICAgICAgIGFtX19zdHJpcF9wcmVmaXg9YGVjaG8gIiRhbV9weV9wcmVmaXgiIHwgc2VkICdzfC58LnxnJ2AKK0BAIC0xNTgsNyArMTYwLDcgQEAKKyAgICAgICAgY2FzZSAkYW1fcHlfcHJlZml4IGluCisgICAgICAgICAgL3VzcnwvU3lzdGVtKikgOzsKKyAgICAgICAgICAqKQorLQkgIGFtX2N2X3B5dGhvbl9weXRob25kaXI9JFBZVEhPTl9QUkVGSVgvbGliL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCisrCSAgYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcj0kUFlUSE9OX0xJQl9QUkVGSVgvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKKyAJICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CitAQCAtMTkwLDcgKzE5Miw4IEBACisgZWxzZToKKyAgICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZworICAgICBzaXRlZGlyID0gc3lzY29uZmlnLmdldF9weXRob25fbGliKDEsIDAsIHByZWZpeD0nJGFtX3B5X3ByZWZpeCcpCistc3lzLnN0ZG91dC53cml0ZShzaXRlZGlyKSJgCisrc3lzLnN0ZG91dC53cml0ZShzaXRlZGlyKSIgfHwKKysgICAgIGVjaG8gIiRQWVRIT05fTElCX1BSRUZJWC9weXRob24kUFlUSE9OX1ZFUlNJT04vc2l0ZS1wYWNrYWdlcyJgCisgICAgICBjYXNlICRhbV9jdl9weXRob25fcHlleGVjZGlyIGluCisgICAgICAkYW1fcHlfZXhlY19wcmVmaXgqKQorICAgICAgICBhbV9fc3RyaXBfcHJlZml4PWBlY2hvICIkYW1fcHlfZXhlY19wcmVmaXgiIHwgc2VkICdzfC58LnxnJ2AKK0BAIC0yMDAsNyArMjAzLDcgQEAKKyAgICAgICAgY2FzZSAkYW1fcHlfZXhlY19wcmVmaXggaW4KKyAgICAgICAgICAvdXNyfC9TeXN0ZW0qKSA7OworICAgICAgICAgICopCistCSAgIGFtX2N2X3B5dGhvbl9weWV4ZWNkaXI9JFBZVEhPTl9FWEVDX1BSRUZJWC9saWIvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKKysJICAgYW1fY3ZfcHl0aG9uX3B5ZXhlY2Rpcj0kUFlUSE9OX0xJQl9QUkVGSVgvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKKyAJICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2VfMS4xNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlXzEuMTUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMzZGMyMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlXzEuMTUuYmIKQEAgLTAsMCArMSwzNCBAQAorcmVxdWlyZSBhdXRvbWFrZS5pbmMKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImF1dG9jb25mLW5hdGl2ZSIKKworTkFNRVZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitSREVQRU5EU18ke1BOfSArPSAiXAorICAgIGF1dG9jb25mIFwKKyAgICBwZXJsIFwKKyAgICBwZXJsLW1vZHVsZS1ieXRlcyBcCisgICAgcGVybC1tb2R1bGUtZGF0YS1kdW1wZXIgXAorICAgIHBlcmwtbW9kdWxlLXN0cmljdCBcCisgICAgcGVybC1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIFwKKyAgICBwZXJsLW1vZHVsZS10aHJlYWQtcXVldWUgXAorICAgIHBlcmwtbW9kdWxlLXRocmVhZHMgXAorICAgIHBlcmwtbW9kdWxlLXZhcnMgIgorCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiYXV0b2NvbmYtbmF0aXZlIHBlcmwtbmF0aXZlLXJ1bnRpbWUiCisKK1NSQ19VUkkgKz0gIiBmaWxlOi8vcHl0aG9uLWxpYmRpci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcHktY29tcGlsZS1jb21waWxlLW9ubHktb3B0aW1pemVkLWJ5dGUtY29kZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYnVpbGR0ZXN0LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzE2OTQ2YTEwNWNhMjI4YWI1NDVmYzM3YTcwZGYzYTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzk0NmU5NDVhOTZlMjgxNTJiYTVhNmJlYjA2MjVjYTcxNWM2ZTMyYWM1NWYyZTM1M2VmNTRkZWYwYzhlZDkyNCIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfUEVSTD0ke1VTUkJJTlBBVEh9L3BlcmwiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLTIuMjUuMS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy0yLjI1LjEuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzODE3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy0yLjI1LjEuaW5jCkBAIC0wLDAgKzEsNDMgQEAKK0xJQ19GSUxFU19DSEtTVU09IlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTJcCisgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NFwKKyAgICBmaWxlOi8vQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAorICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2XAorICAgIGZpbGU6Ly9nYXMvQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCisgICAgZmlsZTovL2luY2x1ZGUvQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTJcCisgICAgZmlsZTovL2luY2x1ZGUvQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAorICAgIGZpbGU6Ly9saWJpYmVydHkvQ09QWUlORy5MSUI7bWQ1PWE5MTY0NjdiOTEwNzZlNjMxZGQ4ZWRiNzQyNDc2OWM3XAorICAgIGZpbGU6Ly9iZmQvQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCisgICAgIgorCitkZWYgYmludXRpbHNfYnJhbmNoX3ZlcnNpb24oZCk6CisgICAgcHZzcGxpdCA9IGQuZ2V0VmFyKCdQVicsIFRydWUpLnNwbGl0KCcuJykKKyAgICByZXR1cm4gcHZzcGxpdFswXSArICJfIiArIHB2c3BsaXRbMV0KKworQklOVVBWID0gIiR7QGJpbnV0aWxzX2JyYW5jaF92ZXJzaW9uKGQpfSIKKworU1JDUkVWID0gIjJiZDI1OTMwMjIxZGVhNGJmMzNjMTNhODljMTExNTE0NDkxNDQwZTIiCitTUkNfVVJJID0gIlwKKyAgICAgZ2l0Oi8vc291cmNld2FyZS5vcmcvZ2l0L2JpbnV0aWxzLWdkYi5naXQ7YnJhbmNoPWJpbnV0aWxzLSR7QklOVVBWfS1icmFuY2g7cHJvdG9jb2w9Z2l0IFwKKyAgICAgZmlsZTovLzAwMDItY29uZmlndXJlLXdpZGVuLXRoZS1yZWdleHAtZm9yLVNILWFyY2hpdGVjdHVyZXMucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwMy1Qb2ludC1zY3JpcHRzLWxvY2F0aW9uLXRvLWxpYmRpci5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA0LU9ubHktZ2VuZXJhdGUtYW4tUlBBVEgtZW50cnktaWYtTERfUlVOX1BBVEgtaXMtbm90LWUucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwNS1FeHBsaWNpdGx5LWxpbmstd2l0aC1saWJtLW9uLXVjbGliYy5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA2LVVzZS1saWJ0b29sLTIuNC5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA3LUFkZC10aGUtYXJtdjVlLWFyY2hpdGVjdHVyZS10by1iaW51dGlscy5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA4LWRvbi10LWxldC10aGUtZGlzdHJvLWNvbXBpbGVyLXBvaW50LXRvLXRoZS13cm9uZy1pbnMucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwOS1VcHN0cmVhbS1TdGF0dXMtSW5hcHByb3ByaWF0ZS1kaXN0cmlidXRpb24tY29kZXNvdXJjLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMTAtRml4LXJwYXRoLWluLWxpYnRvb2wtd2hlbi1zeXNyb290LWlzLWVuYWJsZWQucGF0Y2ggXAorICAgICBmaWxlOi8vMDAxMS1DaGFuZ2UtZGVmYXVsdC1lbXVsYXRpb24tZm9yLW1pcHM2NC1saW51eC5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDEyLUFkZC1YTFAtaW5zdHJ1Y3Rpb25zLXN1cHBvcnQucGF0Y2ggXAorICAgICBmaWxlOi8vMDAxMy1GaXgtYW4taW50ZXJuYWwtZXJyb3ItaW4tZG9fcHJpbnRfdG9fbWFwZmlsZS1zZWVuLXdpLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMTQtZ29sZC1hcm0tU2tpcC1waWMtY2hlY2stZm9yLVJfQVJNX1JFTDMyLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMTUtRml4LWR5bmFtaWMtbGlzdC1zby10aGF0LXN5bWJvbHMtbm90LWluLXRoZS1saXN0LWFyZS5wYXRjaCBcCisgICAgIGZpbGU6Ly9iaW51dGlscy1vY3Rlb24zLnBhdGNoIFwKKyAgICAgZmlsZTovL2FkZC10aHVuZGVyeC1zdXBwb3J0LWZvci1nYXMucGF0Y2ggXAorICAgICAiCitTICA9ICIke1dPUktESVJ9L2dpdCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworICAgICAgICBybSAtcmYgJHtTfS9nZGIgJHtTfS9saWJkZWNudW1iZXIgJHtTfS9yZWFkbGluZSAke1N9L3NpbQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MtY2FuYWRpYW4uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MtY2FuYWRpYW4uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMTQ2NDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy1jYW5hZGlhbi5pbmMKQEAgLTAsMCArMSwyOSBAQAoraW5oZXJpdCBjcm9zcy1jYW5hZGlhbgorCitTVU1NQVJZID0gIkdOVSBiaW5hcnkgdXRpbGl0aWVzIChjcm9zcy1jYW5hZGlhbiBmb3IgJHtUQVJHRVRfQVJDSH0gdGFyZ2V0KSIKK1BOID0gImJpbnV0aWxzLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0iCitCUE4gPSAiYmludXRpbHMiCisKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIHZpcnR1YWwvJHtIT1NUX1BSRUZJWH1nY2MtY3Jvc3NzZGsgdmlydHVhbC9uYXRpdmVzZGstbGliYyBuYXRpdmVzZGstemxpYiBuYXRpdmVzZGstZ2V0dGV4dCBuYXRpdmVzZGstZmxleCIKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLXN5c3Jvb3Q9JHtTREtQQVRIfS9zeXNyb290cy8ke1RVTkVfUEtHQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSBcCisgICAgICAgICAgICAgICAgIgorCisjIFdlIGhhdmUgdG8gcG9pbnQgYmludXRpbHMgYXQgYSBzeXNyb290IGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHJlYnVpbGQgaWYgdGhpcyBjaGFuZ2VzCisjIGUuZy4gd2Ugc3dpdGNoIGJldHdlZW4gZGlmZmVyZW50IG1hY2hpbmVzIHdpdGggZGlmZmVyZW50IHR1bmVzLgorRVhUUkFfT0VDT05GW3ZhcmRlcHNleGNsdWRlXSA9ICJUVU5FX1BLR0FSQ0giCisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBsaWJzIG9yIGhlYWRlcnMsIHRoZXNlIHdvdWxkIGNvbWUgZnJvbSB0aGUgCisJIyBuYXRpdmVzZGsgb3IgdGFyZ2V0IHZlcnNpb24gb2YgdGhlIGJpbnV0aWxzIHJlY2lwZQorCXJtIC1yZiAke0R9JHtwcmVmaXh9LyR7VEFSR0VUX1NZU30KKwlybSAtZiAke0R9JHtsaWJkaXJ9L2xpYmJmZCoKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2xpYmliZXJ0eSoKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2xpYm9wY29kZXMqCisJcm0gLWYgJHtEfSR7aW5jbHVkZWRpcn0vKi5oCisJCisJY3Jvc3NfY2FuYWRpYW5fYmluZGlybGlua3MKK30KKworQkJDTEFTU0VYVEVORCA9ICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy1jYW5hZGlhbl8yLjI1LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy1jYW5hZGlhbl8yLjI1LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRiYWEwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuXzIuMjUuMS5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgYmludXRpbHMuaW5jCityZXF1aXJlIGJpbnV0aWxzLSR7UFZ9LmluYworcmVxdWlyZSBiaW51dGlscy1jcm9zcy1jYW5hZGlhbi5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDNkODAxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MuaW5jCkBAIC0wLDAgKzEsMzAgQEAKK2luaGVyaXQgY3Jvc3MKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzIgorCitQTiA9ICJiaW51dGlscy1jcm9zcy0ke1RBUkdFVF9BUkNIfSIKK0JQTiA9ICJiaW51dGlscyIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0lOSElCSVRfQVVUT1RPT0xTX0RFUFMgPSAiMSIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1pbnN0YWxsLWxpYmJmZCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyBcCisgICAgICAgICAgICAgICAgIgorZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisKKwkjIFdlIGRvbid0IHJlYWxseSBuZWVkIHRoZXNlLCBzbyB3ZSdsbCByZW1vdmUgdGhlbS4uLgorCXJtIC1yZiAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtsaWJkaXJfbmF0aXZlfS9saWJpYmVydHkuYQorCXJtIC1yZiAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8ke1RBUkdFVF9TWVN9CisJcm0gLXJmICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L2xpYi9sZHNjcmlwdHMKKwlybSAtcmYgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vc2hhcmUvaW5mbworCXJtIC1yZiAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS9zaGFyZS9sb2NhbGUKKwlybSAtcmYgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vc2hhcmUvbWFuCisJcm1kaXIgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vc2hhcmUgfHwgOgorCXJtZGlyICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9LyR7bGliZGlyfS9nY2MtbGliIHx8IDoKKwlybWRpciAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8ke2xpYmRpcn02NC9nY2MtbGliIHx8IDoKKwlybWRpciAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8ke2xpYmRpcn0gfHwgOgorCXJtZGlyICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9LyR7bGliZGlyfTY0IHx8IDoKKwlybWRpciAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8ke3ByZWZpeH0gfHwgOgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3NfMi4yNS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3NfMi4yNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZDFmN2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zc18yLjI1LjEuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIGJpbnV0aWxzLmluYworcmVxdWlyZSBiaW51dGlscy0ke1BWfS5pbmMKK3JlcXVpcmUgYmludXRpbHMtY3Jvc3MuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zc3Nka18yLjI1LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zc3Nka18yLjI1LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg4MTA2ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3Nzc2RrXzIuMjUuMS5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIGJpbnV0aWxzLWNyb3NzXyR7UFZ9LmJiCisKK2luaGVyaXQgY3Jvc3NzZGsKKworUE4gPSAiYmludXRpbHMtY3Jvc3NzZGstJHtUQVJHRVRfQVJDSH0iCisKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzLWNyb3Nzc2RrIgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1HZW5lcmF0ZS1yZWxvY2F0YWJsZS1TREtzLnBhdGNoIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJc2VkIC1pICdzIy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWIjJHtTREtQQVRITkFUSVZFfS9saWIgJHtTREtQQVRITkFUSVZFfS91c3IvbGliIC91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWIjJyAke1N9L2xkL2NvbmZpZ3VyZS50Z3QKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzA0ODY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMuaW5jCkBAIC0wLDAgKzEsMTUzIEBACitTVU1NQVJZID0gIkdOVSBiaW5hcnkgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSBCaW51dGlscyBhcmUgYSBjb2xsZWN0aW9uIG9mIGJpbmFyeSB0b29scy4gXAorVGhlIG1haW4gb25lcyBhcmUgbGQgKEdOVSBMaW5rZXIpLCBhbmQgYXMgKEdOVSBBc3NlbWJsZXIpLiBUaGlzIFwKK3BhY2thZ2UgYWxzbyBpbmNsdWRlcyBhZGRpdGlvbiB0b29scyBzdWNoIGFzIGFkZHIybGluZSAoQ29udmVydHMgXAorYWRkcmVzc2VzIGludG8gZmlsZW5hbWVzIGFuZCBsaW5lIG51bWJlcnMpLCBhciAodXRpbGl0eSBmb3IgY3JlYXRpbmcsIFwKK21vZGlmeWluZyBhbmQgZXh0cmFjdGluZyBhcmNoaXZlcyksIG5tIChsaXN0IHN5bWJvbHMgaW4gb2JqZWN0IFwKK2ZpbGVzKSwgb2JqY29weSAoY29weSBhbmQgdHJhbnNsYXRlIG9iamVjdCBmaWxlcyksIG9iamR1bXAgKERpc3BsYXkgXAorb2JqZWN0IGluZm9ybWF0aW9uKSwgYW5kIG90aGVyIHRvb2xzIGFuZCByZWxhdGVkIGxpYnJhcmllcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmludXRpbHMvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjMiCisKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIHpsaWItbmF0aXZlIGdudS1jb25maWctbmF0aXZlIGF1dG9jb25mLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBtdWx0aWxpYl9oZWFkZXIgdGV4aW5mbworCitGSUxFU18ke1BOfSA9ICIgXAorCSR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9KiBcCisJJHtsaWJkaXJ9L2xpYiotKi5zbyBcCisJJHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vYmluLyogXAorICAgICAgICAke2JpbmRpcn0vZW1iZWRzcHUiCisKK1JQUk9WSURFU18ke1BOfSArPSAiJHtQTn0tc3ltbGlua3MiCisKK0ZJTEVTXyR7UE59LWRldiA9ICIgXAorCSR7aW5jbHVkZWRpcn0gXAorCSR7bGliZGlyfS8qLmxhIFwKKwkke2xpYmRpcn0vbGliYmZkLnNvIFwKKwkke2xpYmRpcn0vbGlib3Bjb2Rlcy5zbyIKKworIyBSYXRoZXIgdGhhbiBkdXBsaWNhdGluZyBtdWx0aXBsZSBlbnRyaWVzIGZvciB0aGVzZSwgbWFrZSBvbmUKKyMgbGlzdCBhbmQgcmV1c2UgaXQuCisKK1VTRV9BTFRFUk5BVElWRVNfRk9SID0gIiBcCisJYWRkcjJsaW5lIFwKKwlhciBcCisJYXMgXAorCWMrK2ZpbHQgXAorCWVsZmVkaXQgXAorCWdwcm9mIFwKKwlsZCBcCisJbGQuYmZkIFwKKwlsZC5nb2xkIGR3cCBcCisJbm0gXAorCW9iamNvcHkgXAorCW9iamR1bXAgXAorCXJhbmxpYiBcCisJcmVhZGVsZiBcCisJc2l6ZSBcCisJc3RyaW5ncyBcCisJc3RyaXAgXAorIgorCitweXRob24gZG9fcGFja2FnZV9wcmVwZW5kKCkgeworICAgIG1ha2VfYWx0cyA9IGQuZ2V0VmFyKCJVU0VfQUxURVJOQVRJVkVTX0ZPUiIsIFRydWUpIG9yICIiCisgICAgcHJlZml4ID0gZC5nZXRWYXIoIlRBUkdFVF9QUkVGSVgiLCBUcnVlKQorICAgIGJpbmRpciA9IGQuZ2V0VmFyKCJiaW5kaXIiLCBUcnVlKQorICAgIGZvciBhbHQgaW4gbWFrZV9hbHRzLnNwbGl0KCk6CisgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUJywgYWx0LCBiaW5kaXIgKyAiLyIgKyBwcmVmaXggKyBhbHQpCisgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgYWx0LCBiaW5kaXIgKyAiLyIgKyBhbHQpCit9CisKKyMgRklMRVNfJHtQTn0tZGJnID0gIiR7cHJlZml4fS8ke1RBUkdFVF9TWVN9L2Jpbi8uZGVidWcgJHtwcmVmaXh9LyR7bGliZGlyfS8uZGVidWciCisKK0IgPSAiJHtTfS9idWlsZC4ke0hPU1RfU1lTfS4ke1RBUkdFVF9TWVN9IgorCitFWFRSQV9PRUNPTkYgPSAiLS1wcm9ncmFtLXByZWZpeD0ke1RBUkdFVF9QUkVGSVh9IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtd2Vycm9yIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1wbHVnaW5zIFwKKyAgICAgICAgICAgICAgICAke0xER09MRH0gXAorICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbXVsdGlhcmNoJywgJy0tZW5hYmxlLTY0LWJpdC1iZmQnLCAnJywgZCl9IgorCitMREdPTERfY2xhc3MtbmF0aXZlID0gIiIKK0xER09MRF9jbGFzcy1jcm9zc3NkayA9ICIiCitMREdPTEQgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGQtaXMtZ29sZCcsICctLWVuYWJsZS1nb2xkPWRlZmF1bHQgLS1lbmFibGUtdGhyZWFkcycsICctLWVuYWJsZS1nb2xkIC0tZW5hYmxlLWxkPWRlZmF1bHQnLCBkKX0iCisKKyMgVGhpcyBpcyBuZWNlc3NhcnkgZHVlIHRvIGEgYnVnIGluIHRoZSBiaW51dGlscyBNYWtlZmlsZXMKKyMgRVhUUkFfT0VNQUtFID0gImNvbmZpZ3VyZS1idWlsZC1saWJpYmVydHkgYWxsIgorCitleHBvcnQgQVIgPSAiJHtIT1NUX1BSRUZJWH1hciIKK2V4cG9ydCBBUyA9ICIke0hPU1RfUFJFRklYfWFzIgorZXhwb3J0IExEID0gIiR7SE9TVF9QUkVGSVh9bGQiCitleHBvcnQgTk0gPSAiJHtIT1NUX1BSRUZJWH1ubSIKK2V4cG9ydCBSQU5MSUIgPSAiJHtIT1NUX1BSRUZJWH1yYW5saWIiCitleHBvcnQgT0JKQ09QWSA9ICIke0hPU1RfUFJFRklYfW9iamNvcHkiCitleHBvcnQgT0JKRFVNUCA9ICIke0hPU1RfUFJFRklYfW9iamR1bXAiCisKK2V4cG9ydCBBUl9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1hciIKK2V4cG9ydCBBU19GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1hcyIKK2V4cG9ydCBMRF9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1sZCIKK2V4cG9ydCBOTV9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1ubSIKK2V4cG9ydCBSQU5MSUJfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9cmFubGliIgorCitleHBvcnQgQ0NfRk9SX0hPU1QgPSAiJHtDQ0FDSEV9JHtIT1NUX1BSRUZJWH1nY2MgJHtIT1NUX0NDX0FSQ0h9IgorZXhwb3J0IENYWF9GT1JfSE9TVCA9ICIke0NDQUNIRX0ke0hPU1RfUFJFRklYfWdjYyAke0hPU1RfQ0NfQVJDSH0iCisKKyMgYXV0b3Rvb2xzLmJiY2xhc3Mgc2V0cyB0aGUgX0ZPUl9CVUlMRCB2YXJpYWJsZXMsIGJ1dCBmb3Igc29tZSByZWFzb24gd2UgbmVlZAorIyB0byB1bnNldCBMRF9MSUJSQVJZX1BBVEguCitleHBvcnQgQ0NfRk9SX0JVSUxEID0gIkxEX0xJQlJBUllfUEFUSD0gJHtCVUlMRF9DQ30iCisKK01VTFRJQVJDSCA6PSAiJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJtdWx0aWFyY2giLCAieWVzIiwgIm5vIiwgZCl9IgorZG9fY29uZmlndXJlW3ZhcmRlcHNdICs9ICJNVUxUSUFSQ0giCitkb19jb25maWd1cmUgKCkgeworCShjZCAke1N9OyBnbnUtY29uZmlnaXplKSB8fCBkaWUgIkZhaWxlZCB0byBydW4gZ251LWNvbmZpZ2l6ZSIKKwlvZV9ydW5jb25mCisjCisjIG11c3QgcHJpbWUgY29uZmlnLmNhY2hlIHRvIGVuc3VyZSB0aGUgYnVpbGQgb2YgbGliaWJlcnR5CisjCisJbWtkaXIgLXAgJHtCfS9idWlsZC0ke0JVSUxEX1NZU30KKwlmb3IgaSBpbiAke0NPTkZJR19TSVRFfTsgZG8KKwkJY2F0ICRpID4+ICR7Qn0vYnVpbGQtJHtCVUlMRF9TWVN9L2NvbmZpZy5jYWNoZSB8fCB0cnVlCisJZG9uZQorfQorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGVzZSwgc28gd2UnbGwgcmVtb3ZlIHRoZW0uLi4KKwlybSAtcmYgJHtEfSR7bGliZGlyfS9sZHNjcmlwdHMKKworCSMgRml4IHRoZSAvdXNyLyR7VEFSR0VUX1NZU30vYmluLyogbGlua3MKKwlmb3IgbCBpbiAke0R9JHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vYmluLyo7IGRvCisJCXJtIC1mICRsCisJCWxuIC1zZiBgZWNobyAke3ByZWZpeH0vJHtUQVJHRVRfU1lTfS9iaW4gXAorCQkJfCB0ciAtcyAvIFwKKwkJCXwgc2VkIC1lICdzLF4vLCwnIC1lICdzLFteL10qLC4uLGcnYCR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9YGJhc2VuYW1lICRsYCAkbAorCWRvbmUKKworCSMgSW5zdGFsbCB0aGUgbGliaWJlcnR5IGhlYWRlcgorCWluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2luY2x1ZGUvYW5zaWRlY2wuaCAke0R9JHtpbmNsdWRlZGlyfQorCWluc3RhbGwgLW0gNjQ0ICR7U30vaW5jbHVkZS9saWJpYmVydHkuaCAke0R9JHtpbmNsdWRlZGlyfQorCisJY2QgJHtEfSR7YmluZGlyfQorCisJIyBTeW1saW5rcyBmb3IgZWFzZSBvZiBydW5uaW5nIHRoZXNlIG9uIHRoZSBuYXRpdmUgdGFyZ2V0CisJZm9yIHAgaW4gJHtUQVJHRVRfUFJFRklYfSogOyBkbworCQlsbiAtc2YgJHAgYGVjaG8gJHAgfCBzZWQgLWUgcywke1RBUkdFVF9QUkVGSVh9LCxgCisJZG9uZQorCisJZm9yIGFsdCBpbiAke1VTRV9BTFRFUk5BVElWRVNfRk9SfTsgZG8KKwkJcm0gLWYgJHtEfSR7YmluZGlyfS8kYWx0CisJZG9uZQorCisJb2VfbXVsdGlsaWJfaGVhZGVyIGJmZC5oCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59X2NsYXNzLXRhcmdldCA9ICIke1VTRV9BTFRFUk5BVElWRVNfRk9SfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDEtR2VuZXJhdGUtcmVsb2NhdGFibGUtU0RLcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDEtR2VuZXJhdGUtcmVsb2NhdGFibGUtU0RLcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTgwYzFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMS1HZW5lcmF0ZS1yZWxvY2F0YWJsZS1TREtzLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb20gZjcxZWNmMjUxZjg0YjRiYmM5YjdhODMyZDVjZDRhOGJhZTk1ZDgzYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6NTg6NTQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwMS8xM10gR2VuZXJhdGUgcmVsb2NhdGFibGUgU0RLcworCitUaGlzIHBhdGNoIHdpbGwgbW9kaWZ5IHRoZSBFTEYgbGlua2VyIHNjcmlwdHMgc28gdGhhdCB0aGUgY3Jvc3NzZGsKK2xpbmtlciB3aWxsIGdlbmVyYXRlIGJpbmFyaWVzIHdpdGggYSA0MDk2IGJ5dGVzIFBUX0lOVEVSUCBzZWN0aW9uLiBXaGVuIHRoZSBiaW5hcmllcword2lsbCBiZSByZWxvY2F0ZWQsIGF0IFNESyBpbnN0YWxsIHRpbWUsIHRoZSBpbnRlcnByZXRlciBwYXRoIGNhbiBiZSBlYXNpbHkKK2NoYW5nZWQgYnkgdGhlIHJlbG9jYXRpbmcgc2NyaXB0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1NESyBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxkL2dlbnNjcmlwdHMuc2ggICAgICB8IDMgKysrCisgbGQvc2NyaXB0dGVtcGwvZWxmLnNjIHwgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9sZC9nZW5zY3JpcHRzLnNoIGIvbGQvZ2Vuc2NyaXB0cy5zaAoraW5kZXggNDk5NjA3YS4uMDc1ZGQwNCAxMDA3NTUKKy0tLSBhL2xkL2dlbnNjcmlwdHMuc2gKKysrKyBiL2xkL2dlbnNjcmlwdHMuc2gKK0BAIC0yNzcsNiArMjc3LDcgQEAgREFUQV9BTElHTk1FTlRfdT0iJHtEQVRBX0FMSUdOTUVOVF91LSR7REFUQV9BTElHTk1FTlRfcn19IgorIExEX0ZMQUc9cgorIERBVEFfQUxJR05NRU5UPSR7REFUQV9BTElHTk1FTlRfcn0KKyBERUZBVUxUX0RBVEFfQUxJR05NRU5UPSJBTElHTigke1NFR01FTlRfU0laRX0pIgorK1BBUlRJQUxfTElOS0lORz0iICIKKyAoIGVjaG8gIi8qIFNjcmlwdCBmb3IgbGQgLXI6IGxpbmsgd2l0aG91dCByZWxvY2F0aW9uICovIgorICAgLiAke0NVU1RPTUlaRVJfU0NSSVBUfQorICAgLiAke3NyY2Rpcn0vc2NyaXB0dGVtcGwvJHtTQ1JJUFRfTkFNRX0uc2MKK0BAIC0yODUsMTAgKzI4NiwxMiBAQCBERUZBVUxUX0RBVEFfQUxJR05NRU5UPSJBTElHTigke1NFR01FTlRfU0laRX0pIgorIExEX0ZMQUc9dQorIERBVEFfQUxJR05NRU5UPSR7REFUQV9BTElHTk1FTlRfdX0KKyBDT05TVFJVQ1RJTkc9IiAiCisrUEFSVElBTF9MSU5LSU5HPSIgIgorICggZWNobyAiLyogU2NyaXB0IGZvciBsZCAtVXI6IGxpbmsgdy9vdXQgcmVsb2NhdGlvbiwgZG8gY3JlYXRlIGNvbnN0cnVjdG9ycyAqLyIKKyAgIC4gJHtDVVNUT01JWkVSX1NDUklQVH0KKyAgIC4gJHtzcmNkaXJ9L3NjcmlwdHRlbXBsLyR7U0NSSVBUX05BTUV9LnNjCisgKSB8IHNlZCAtZSAnL14gKiQvZDtzL1sgCV0qJC8vJyA+IGxkc2NyaXB0cy8ke0VNVUxBVElPTl9OQU1FfS54dQorK3Vuc2V0IFBBUlRJQUxfTElOS0lORworIAorIExEX0ZMQUc9CisgREFUQV9BTElHTk1FTlQ9JHtEQVRBX0FMSUdOTUVOVF99CitkaWZmIC0tZ2l0IGEvbGQvc2NyaXB0dGVtcGwvZWxmLnNjIGIvbGQvc2NyaXB0dGVtcGwvZWxmLnNjCitpbmRleCA0MzY4ZmQ5Li45ZjAxZThjIDEwMDY0NAorLS0tIGEvbGQvc2NyaXB0dGVtcGwvZWxmLnNjCisrKysgYi9sZC9zY3JpcHR0ZW1wbC9lbGYuc2MKK0BAIC0xMzEsOCArMTMxLDggQEAgaWYgdGVzdCAtbiAiJHtDT01NT05QQUdFU0laRX0iOyB0aGVuCisgICBEQVRBX1NFR01FTlRfRU5EPSIuID0gREFUQV9TRUdNRU5UX0VORCAoLik7IgorICAgREFUQV9TRUdNRU5UX1JFTFJPX0VORD0iLiA9IERBVEFfU0VHTUVOVF9SRUxST19FTkQgKCR7U0VQQVJBVEVfR09UUExULTB9LCAuKTsiCisgZmkKKy1pZiB0ZXN0IC16ICIke0lOSVRJQUxfUkVBRE9OTFlfU0VDVElPTlN9JHtDUkVBVEVfU0hMSUJ9IjsgdGhlbgorLSAgSU5JVElBTF9SRUFET05MWV9TRUNUSU9OUz0iLmludGVycCAgICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLmludGVycCkgfSIKKytpZiB0ZXN0IC16ICIke0lOSVRJQUxfUkVBRE9OTFlfU0VDVElPTlN9JHtDUkVBVEVfU0hMSUJ9JHtQQVJUSUFMX0xJTktJTkd9IjsgdGhlbgorKyAgSU5JVElBTF9SRUFET05MWV9TRUNUSU9OUz0iLmludGVycCAgICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLmludGVycCk7IC4gPSAweDEwMDA7IH0iCisgZmkKKyBpZiB0ZXN0IC16ICIkUExUIjsgdGhlbgorICAgSVBMVD0iLmlwbHQgICAgICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLmlwbHQpIH0iCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDItY29uZmlndXJlLXdpZGVuLXRoZS1yZWdleHAtZm9yLVNILWFyY2hpdGVjdHVyZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAyLWNvbmZpZ3VyZS13aWRlbi10aGUtcmVnZXhwLWZvci1TSC1hcmNoaXRlY3R1cmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZTIxZDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAyLWNvbmZpZ3VyZS13aWRlbi10aGUtcmVnZXhwLWZvci1TSC1hcmNoaXRlY3R1cmVzLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK0Zyb20gZGZiY2ZiMGQ3MTc2NWIzMzdlNjM1NjIyOTlhOTQzMDQzOTI4ZDJkMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6MDc6MzMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwMi8xM10gY29uZmlndXJlOiB3aWRlbiB0aGUgcmVnZXhwIGZvciBTSCBhcmNoaXRlY3R1cmVzCisKK2dwcm9mIG5lZWRzIHRvIGtub3cgYWJvdXQgdWNsaWJjCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlICAgICAgIHwgNCArKy0tCisgZ3Byb2YvY29uZmlndXJlIHwgNSArKysrKworIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA4NzY3N2JjLi5lOWYyZjEzIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0zMzQxLDcgKzMzNDEsNyBAQCBjYXNlICIke3RhcmdldH0iIGluCisgICAgIDs7CisgICBzMzkwLSotKiB8IHMzOTB4LSotKikKKyAgICAgOzsKKy0gIHNoLSotKiB8IHNoWzM0XSotKi0qKQorKyAgc2gqLSotKiB8IHNoWzM0XSotKi0qKQorICAgICA7OworICAgc2g2NC0qLSogfCBzaDUqLSotKikKKyAgICAgOzsKK0BAIC0zODEyLDcgKzM4MTIsNyBAQCBjYXNlICIke3RhcmdldH0iIGluCisgICBvcjFrKi0qLSopCisgICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyBnZGIiCisgICAgIDs7CistICBzaC0qLSogfCBzaDY0LSotKikKKysgIHNoKi0qLSogfCBzaDY0LSotKikKKyAgICAgY2FzZSAiJHt0YXJnZXR9IiBpbgorICAgICAgIHNoKi0qLWVsZikKKyAgICAgICAgICA7OworZGlmZiAtLWdpdCBhL2dwcm9mL2NvbmZpZ3VyZSBiL2dwcm9mL2NvbmZpZ3VyZQoraW5kZXggYjA5YzhmYi4uNzk5NjFjNSAxMDA3NTUKKy0tLSBhL2dwcm9mL2NvbmZpZ3VyZQorKysrIGIvZ3Byb2YvY29uZmlndXJlCitAQCAtNTg2OSw2ICs1ODY5LDExIEBAIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorK2xpbnV4LXVjbGliYyopCisrICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL2xpYi9saWJ1Q2xpYmMtKi5zb2AKKysgIDs7CisrCisgbmV0YnNkKikKKyAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAzLVBvaW50LXNjcmlwdHMtbG9jYXRpb24tdG8tbGliZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMy1Qb2ludC1zY3JpcHRzLWxvY2F0aW9uLXRvLWxpYmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWNlNzY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMy1Qb2ludC1zY3JpcHRzLWxvY2F0aW9uLXRvLWxpYmRpci5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIGRmYjE0MTJkYTY3YmJmZTNlOTkzZDEwN2QwYjVlMzkyZjQ0MTQxYWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjA5OjU4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMTNdIFBvaW50IHNjcmlwdHMgbG9jYXRpb24gdG8gbGliZGlyCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuIHBhdGNoXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGQvTWFrZWZpbGUuYW0gfCAyICstCisgbGQvTWFrZWZpbGUuaW4gfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9sZC9NYWtlZmlsZS5hbSBiL2xkL01ha2VmaWxlLmFtCitpbmRleCA5NTc1ZjFmLi44NGRmMGJmIDEwMDY0NAorLS0tIGEvbGQvTWFrZWZpbGUuYW0KKysrKyBiL2xkL01ha2VmaWxlLmFtCitAQCAtNTQsNyArNTQsNyBAQCBlbmRpZgorICMgV2UgcHV0IHRoZSBzY3JpcHRzIGluIHRoZSBkaXJlY3RvcnkgJChzY3JpcHRkaXIpL2xkc2NyaXB0cy4KKyAjIFdlIGNhbid0IHB1dCB0aGUgc2NyaXB0cyBpbiAkKGRhdGFkaXIpIGJlY2F1c2UgdGhlIFNFQVJDSF9ESVIKKyAjIGRpcmVjdGl2ZXMgbmVlZCB0byBiZSBkaWZmZXJlbnQgZm9yIG5hdGl2ZSBhbmQgY3Jvc3MgbGlua2Vycy4KKy1zY3JpcHRkaXIgPSAkKHRvb2xkaXIpL2xpYgorK3NjcmlwdGRpciA9ICQobGliZGlyKQorIAorIEVNVUwgPSBARU1VTEAKKyBFTVVMQVRJT05fT0ZJTEVTID0gQEVNVUxBVElPTl9PRklMRVNACitkaWZmIC0tZ2l0IGEvbGQvTWFrZWZpbGUuaW4gYi9sZC9NYWtlZmlsZS5pbgoraW5kZXggOWY1NmNhMS4uMjcyODYwZiAxMDA2NDQKKy0tLSBhL2xkL01ha2VmaWxlLmluCisrKysgYi9sZC9NYWtlZmlsZS5pbgorQEAgLTM4OCw3ICszODgsNyBAQCBBTV9DRkxBR1MgPSAkKFdBUk5fQ0ZMQUdTKQorICMgV2UgcHV0IHRoZSBzY3JpcHRzIGluIHRoZSBkaXJlY3RvcnkgJChzY3JpcHRkaXIpL2xkc2NyaXB0cy4KKyAjIFdlIGNhbid0IHB1dCB0aGUgc2NyaXB0cyBpbiAkKGRhdGFkaXIpIGJlY2F1c2UgdGhlIFNFQVJDSF9ESVIKKyAjIGRpcmVjdGl2ZXMgbmVlZCB0byBiZSBkaWZmZXJlbnQgZm9yIG5hdGl2ZSBhbmQgY3Jvc3MgbGlua2Vycy4KKy1zY3JpcHRkaXIgPSAkKHRvb2xkaXIpL2xpYgorK3NjcmlwdGRpciA9ICQobGliZGlyKQorIEJBU0VESVIgPSAkKHNyY2RpcikvLi4KKyBCRkRESVIgPSAkKEJBU0VESVIpL2JmZAorIElOQ0RJUiA9ICQoQkFTRURJUikvaW5jbHVkZQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA0LU9ubHktZ2VuZXJhdGUtYW4tUlBBVEgtZW50cnktaWYtTERfUlVOX1BBVEgtaXMtbm90LWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA0LU9ubHktZ2VuZXJhdGUtYW4tUlBBVEgtZW50cnktaWYtTERfUlVOX1BBVEgtaXMtbm90LWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNjZDJhNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDQtT25seS1nZW5lcmF0ZS1hbi1SUEFUSC1lbnRyeS1pZi1MRF9SVU5fUEFUSC1pcy1ub3QtZS5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tIDMxMjY2MDhiOGM5NWE3OTJhZGU1NmNmNjJhNTMxZDkzNWQzOTFjNTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjI3OjE3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMTNdIE9ubHkgZ2VuZXJhdGUgYW4gUlBBVEggZW50cnkgaWYgTERfUlVOX1BBVEggaXMgbm90CisgZW1wdHkKKworZm9yIGNhc2VzIHdoZXJlIC1ycGF0aCBpc24ndCBzcGVjaWZpZWQuIGRlYmlhbiAoIzE1MTAyNCkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENocmlzIENoaW1lbGlzIDxjaHJpc0BkZWJpYW4ub3JnPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxkL2VtdWx0ZW1wbC9lbGYzMi5lbSB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbSBiL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbQoraW5kZXggMzZkZWU4ZS4uMDdiZWE1MiAxMDA2NDQKKy0tLSBhL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbQorKysrIGIvbGQvZW11bHRlbXBsL2VsZjMyLmVtCitAQCAtMTE5OCw2ICsxMTk4LDggQEAgZnJhZ21lbnQgPDxFT0YKKyAJICAgICAgJiYgY29tbWFuZF9saW5lLnJwYXRoID09IE5VTEwpCisgCSAgICB7CisgCSAgICAgIGxpYl9wYXRoID0gKGNvbnN0IGNoYXIgKikgZ2V0ZW52ICgiTERfUlVOX1BBVEgiKTsKKysJICAgICAgaWYgKChsaWJfcGF0aCkgJiYgKHN0cmxlbiAobGliX3BhdGgpID09IDApKQorKwkJICBsaWJfcGF0aCA9IE5VTEw7CisgCSAgICAgIGlmIChnbGQke0VNVUxBVElPTl9OQU1FfV9zZWFyY2hfbmVlZGVkIChsaWJfcGF0aCwgJm4sCisgCQkJCQkJICAgICAgZm9yY2UpKQorIAkJYnJlYWs7CitAQCAtMTQ2MSw2ICsxNDYzLDggQEAgZ2xkJHtFTVVMQVRJT05fTkFNRX1fYmVmb3JlX2FsbG9jYXRpb24gKHZvaWQpCisgICBycGF0aCA9IGNvbW1hbmRfbGluZS5ycGF0aDsKKyAgIGlmIChycGF0aCA9PSBOVUxMKQorICAgICBycGF0aCA9IChjb25zdCBjaGFyICopIGdldGVudiAoIkxEX1JVTl9QQVRIIik7CisrICBpZiAoKHJwYXRoKSAmJiAoc3RybGVuIChycGF0aCkgPT0gMCkpCisrICAgIHJwYXRoID0gTlVMTDsKKyAKKyAgIGZvciAoYWJmZCA9IGxpbmtfaW5mby5pbnB1dF9iZmRzOyBhYmZkOyBhYmZkID0gYWJmZC0+bGluay5uZXh0KQorICAgICBpZiAoYmZkX2dldF9mbGF2b3VyIChhYmZkKSA9PSBiZmRfdGFyZ2V0X2VsZl9mbGF2b3VyKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA1LUV4cGxpY2l0bHktbGluay13aXRoLWxpYm0tb24tdWNsaWJjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNS1FeHBsaWNpdGx5LWxpbmstd2l0aC1saWJtLW9uLXVjbGliYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJkOTNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNS1FeHBsaWNpdGx5LWxpbmstd2l0aC1saWJtLW9uLXVjbGliYy5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGcm9tIGYxNzAzYmNjN2E1YzUwN2U0NzFlMjYzMGI1YTJkZTEyOTEwMDMxNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjMyOjQ5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDUvMTNdIEV4cGxpY2l0bHkgbGluayB3aXRoIGxpYm0gb24gdWNsaWJjCisKK0Rlc2NyaXB0aW9uOgorCitXZSBkbyBub3QgbmVlZCB0byBoYXZlIHRoZSBsaWJ0b29sIHBhdGNoIGFueW1vcmUgZm9yIGJpbnV0aWxzIGFmdGVyCitsaWJ0b29sIGhhcyBiZWVuIHVwZGF0ZWQgdXBzdHJlYW0gaXQgaW5jbHVkZSBzdXBwb3J0IGZvciBpdC4gSG93ZXZlcgorZm9yIGJ1aWxkaW5nIGdhcyBuYXRpdmVseSBvbiB1Y2xpYmMgc3lzdGVtcyB3ZSBoYXZlIHRvIGxpbmsgaXQgd2l0aAorLWxtIHNvIHRoYXQgaXQgcGlja3MgdXAgbWlzc2luZyBzeW1ib2xzLgorCisvbG9jYWwvYnVpbGRfYXJlYS9CVUlMRC9hcm1fdjV0X2xlX3VjbGliYy9iaW51dGlscy0yLjE3LjUwL29iamRpci9saWJpYmVydHkvcGljL2xpYmliZXJ0eS5hKGZsb2F0Zm9ybWF0Lm8pOgorSW4gZnVuY3Rpb24gYGZsb2F0Zm9ybWF0X2Zyb21fZG91YmxlJzoKK2Zsb2F0Zm9ybWF0LmM6KC50ZXh0KzB4MWVjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgZnJleHAnCitmbG9hdGZvcm1hdC5jOigudGV4dCsweDJmOCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGxkZXhwJworL2xvY2FsL2J1aWxkX2FyZWEvQlVJTEQvYXJtX3Y1dF9sZV91Y2xpYmMvYmludXRpbHMtMi4xNy41MC9vYmpkaXIvbGliaWJlcnR5L3BpYy9saWJpYmVydHkuYShmbG9hdGZvcm1hdC5vKToKK0luIGZ1bmN0aW9uIGBmbG9hdGZvcm1hdF90b19kb3VibGUnOgorZmxvYXRmb3JtYXQuYzooLnRleHQrMHgzOGEpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBsZGV4cCcKK2Zsb2F0Zm9ybWF0LmM6KC50ZXh0KzB4M2QyKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbGRleHAnCitmbG9hdGZvcm1hdC5jOigudGV4dCsweDQzZSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGxkZXhwJworZmxvYXRmb3JtYXQuYzooLnRleHQrMHg0ZTIpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBsZGV4cCcKK2NvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCittYWtlWzRdOiAqKiogW2FzLW5ld10gRXJyb3IgMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdhcy9jb25maWd1cmUudGd0IHwgNiArKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nYXMvY29uZmlndXJlLnRndCBiL2dhcy9jb25maWd1cmUudGd0CitpbmRleCA5YWJjNzY4Li4xZDkyZjU1IDEwMDY0NAorLS0tIGEvZ2FzL2NvbmZpZ3VyZS50Z3QKKysrKyBiL2dhcy9jb25maWd1cmUudGd0CitAQCAtNDc3LDYgKzQ3NywxMiBAQCBjYXNlICR7Z2VuZXJpY190YXJnZXR9IGluCisgICAqLSotbmV0d2FyZSkJCQkJZm10PWVsZiBlbT1uZXR3YXJlIDs7CisgZXNhYworIAorK2Nhc2UgJHtnZW5lcmljX3RhcmdldH0gaW4KKysgIGFybS0qLSp1Y2xpYmMqKQorKyAgICBuZWVkX2xpYm09eWVzCisrICAgIDs7CisrZXNhYworKworIGNhc2UgJHtjcHVfdHlwZX0gaW4KKyAgIGFhcmNoNjQgfCBhbHBoYSB8IGFybSB8IGkzODYgfCBpYTY0IHwgbWljcm9ibGF6ZSB8IG1pcHMgfCBuczMyayB8IG9yMWsgfCBvcjFrbmQgfCBwZHAxMSB8IHBwYyB8IHNwYXJjIHwgejgwIHwgejhrKQorICAgICBiZmRfZ2FzPXllcworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA2LVVzZS1saWJ0b29sLTIuNC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDYtVXNlLWxpYnRvb2wtMi40LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOTY3ZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA2LVVzZS1saWJ0b29sLTIuNC5wYXRjaApAQCAtMCwwICsxLDE5MzYxIEBACitGcm9tIDAzZWI5YjRmZTU4M2U4OGEyMmZkOGMyNWI0M2ZiZDliYWZlMjFhZjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjM0OjQxICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMTNdIFVzZSBsaWJ0b29sIDIuNAorCitTbyB3ZSBjYW4gZ2V0IGxpYnRvb2wgc3lzcm9vdCBzdXBwb3J0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgYmZkL2NvbmZpZ3VyZSAgICAgICAgfCAxMzIwICsrKysrKysrKysrKysrKysrLS0tLS0tCisgYmZkL2NvbmZpZ3VyZS5hYyAgICAgfCAgICAyICstCisgYmludXRpbHMvY29uZmlndXJlICAgfCAxMzE4ICsrKysrKysrKysrKysrKysrLS0tLS0tCisgY29uZmlndXJlICAgICAgICAgICAgfCAgICAyICstCisgZ2FzL2NvbmZpZ3VyZSAgICAgICAgfCAxMzE4ICsrKysrKysrKysrKysrKysrLS0tLS0tCisgZ3Byb2YvY29uZmlndXJlICAgICAgfCAxMzIzICsrKysrKysrKysrKysrKysrLS0tLS0tCisgbGQvY29uZmlndXJlICAgICAgICAgfCAxNzAxICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCisgbGlidG9vbC5tNCAgICAgICAgICAgfCAxMDg2ICsrKysrKysrKysrKystLS0tLS0KKyBsdG1haW4uc2ggICAgICAgICAgICB8IDI5MjUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KKyBsdG9wdGlvbnMubTQgICAgICAgICB8ICAgIDIgKy0KKyBsdHZlcnNpb24ubTQgICAgICAgICB8ICAgMTIgKy0KKyBsdH5vYnNvbGV0ZS5tNCAgICAgICB8ICAgIDIgKy0KKyBvcGNvZGVzL2NvbmZpZ3VyZSAgICB8IDEzMjAgKysrKysrKysrKysrKysrKystLS0tLS0KKyBvcGNvZGVzL2NvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KKyAxNCBmaWxlcyBjaGFuZ2VkLCA4OTUyIGluc2VydGlvbnMoKyksIDMzODEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9iZmQvY29uZmlndXJlIGIvYmZkL2NvbmZpZ3VyZQoraW5kZXggODVlNmI4Mi4uM2QzZGQ4OCAxMDA3NTUKKy0tLSBhL2JmZC9jb25maWd1cmUKKysrKyBiL2JmZC9jb25maWd1cmUKK0BAIC02NjgsNiArNjY4LDkgQEAgT1RPT0wKKyBMSVBPCisgTk1FRElUCisgRFNZTVVUSUwKKytNQU5JRkVTVF9UT09MCisrYWNfY3RfQVIKKytETExUT09MCisgT0JKRFVNUAorIExOX1MKKyBOTQorQEAgLTc4MCw2ICs3ODMsNyBAQCBlbmFibGVfc3RhdGljCisgd2l0aF9waWMKKyBlbmFibGVfZmFzdF9pbnN0YWxsCisgd2l0aF9nbnVfbGQKKyt3aXRoX2xpYnRvb2xfc3lzcm9vdAorIGVuYWJsZV9saWJ0b29sX2xvY2sKKyBlbmFibGVfcGx1Z2lucworIGVuYWJsZV9sYXJnZWZpbGUKK0BAIC0xNDU2LDYgKzE0NjAsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKysgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgICAtLXdpdGgtbW1hcCAgICAgICAgICAgICB0cnkgdXNpbmcgbW1hcCBmb3IgQkZEIGlucHV0IGZpbGVzIGlmIGF2YWlsYWJsZQorICAgLS13aXRoLXNlcGFyYXRlLWRlYnVnLWRpcj1ESVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExvb2sgZm9yIGdsb2JhbCBzZXBhcmF0ZSBkZWJ1ZyBpbmZvIGluIERJUgorQEAgLTUzODYsOCArNTM5Miw4IEBAIGVzYWMKKyAKKyAKKyAKKy1tYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKyttYWNyb192ZXJzaW9uPScyLjQnCisrbWFjcm9fcmV2aXNpb249JzEuMzI5MycKKyAKKyAKKyAKK0BAIC01NDI3LDcgKzU0MzMsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCistaWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKytpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICAgRUNITz0ncHJpbnQgLXIgLS0nCisgZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KK0BAIC02MTEzLDggKzYxMTksOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OworICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNjE2Myw2ICs2MTY5LDgwIEBAIGVzYWMKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqLSotY3lnd2luKiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02MTc5LDYgKzYyNTksMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyBlc2FjCisgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKysgICAgZmkKKysgICAgOzsKKyAgIGRhcndpbiopCisgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworQEAgLTYzNDcsNyArNjQzMiw4IEBAIG1pbmd3KiB8IHB3MzIqKQorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisrICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgICBmaQorICAgOzsKK0BAIC02NTAxLDYgKzY1ODcsMjEgQEAgZXNhYworIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CisgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisrCisrZmlsZV9tYWdpY19nbG9iPQorK3dhbnRfbm9jYXNlZ2xvYj1ubworK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICBtaW5ndyogfCBwdzMyKikKKysgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKysgICAgZWxzZQorKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC02NTE2LDkgKzY2MTcsMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIAorIAorIAorKworKworKworKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisrICBhY19jdF9ETExUT09MPSRETExUT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorKyAgICBETExUT09MPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGZpCisrZWxzZQorKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrCisrCisrCisrCisrCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTY1MzQsNyArNjc4OCw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTY1NTQsMTEgKzY4MDgsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKytpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICBhY19jdF9BUj0kQVIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKytkbworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjU3NCw3ICs2ODMyLDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTY1OTMsNiArNjg1MSwxMCBAQCBlbHNlCisgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorKworKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworK2RvbmUKKysKKyAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgICBBUj0iZmFsc2UiCisgICBlbHNlCitAQCAtNjYwNCwxNiArNjg2Niw3MiBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIEFSPSRhY19jdF9BUgorICAgZmkKKy1lbHNlCistICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKKyAKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfYXJfYXRfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisgCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisrICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKyAKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorIAorK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorIAorIAorIAorQEAgLTY5NTUsOCArNzI3Myw4IEBAIGVzYWMKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorIAorICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKyAKKyAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KKyBvcHRfY3I9CitAQCAtNjk5Miw2ICs3MzEwLDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworICAgZWxzZQorICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICAgZmkKKysgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKyAKKyAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICAgcGlwZV93b3Jrcz1ubworQEAgLTcwMzMsNiArNzM1MiwxOCBAQCBfTFRfRU9GCisgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC03MDQ0LDcgKzczNzUsNyBAQCBfTFRfRU9GCisgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgCisgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworLWNvbnN0IHN0cnVjdCB7CisrTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICAgICAgICphZGRyZXNzOworIH0KK0BAIC03MDcwLDggKzc0MDEsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIF9MVF9FT0YKKyAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCistCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKyAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKK0BAIC03MDgxLDggKzc0MTIsOCBAQCBfTFRfRU9GCisgICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKyAJZmkKK0BAIC03MTE5LDYgKzc0NTAsMTYgQEAgZWxzZQorICRhc19lY2hvICJvayIgPiY2OyB9CisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZmkKKysKKysKKysKKysKKyAKKyAKKyAKK0BAIC03MTQwLDYgKzc0ODEsNDUgQEAgZmkKKyAKKyAKKyAKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidG9vbC1zeXNyb290IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfbGlidG9vbF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfbGlidG9vbF9zeXNyb290OworK2Vsc2UKKysgIHdpdGhfbGlidG9vbF9zeXNyb290PW5vCisrZmkKKysKKysKKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNQorKyRhc19lY2hvICIke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY2OyB9CisrICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisrICAgOzsKKytlc2FjCisrCisrIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CisrJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKysKKysKKysKKysKKysKKyAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOworQEAgLTczNDYsNiArNzcyNiwxMjMgQEAgZXNhYworIAorIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorIAorK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytNQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRNQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdF9NQU5JRkVTVF9UT09MPSRNQU5JRkVTVF9UT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0iJGFjX2N0X01BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSJtdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgorKyAgICBNQU5JRkVTVF9UT09MPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAorKyAgZmkKKytlbHNlCisrICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgorK2ZpCisrCisrdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKKysgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKysgIGZpCisrICBybSAtZiBjb25mdGVzdCoKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9CisraWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KKysgIE1BTklGRVNUX1RPT0w9OgorK2ZpCisrCisrCisrCisrCisrCisgCisgICBjYXNlICRob3N0X29zIGluCisgICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCitAQCAtNzkwOSw2ICs4NDA2LDggQEAgX0xUX0VPRgorICAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQorICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKKyAgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CisrICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKKysgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQorICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgorIGludCBtYWluKCkgeyByZXR1cm4gMDt9CisgX0xUX0VPRgorQEAgLTgwNzMsNyArODU3Miw4IEBAIGZpCisgTElCVE9PTF9ERVBTPSIkbHRtYWluIgorIAorICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCistTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisrTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpJworK0xJQlRPT0w9IiRMSUJUT09MLyR7aG9zdF9hbGlhc30tbGlidG9vbCIKKyAKKyAKKyAKK0BAIC04MTYyLDcgKzg2NjIsNyBAQCBhaXgzKikKKyBlc2FjCisgCisgIyBHbG9iYWwgdmFyaWFibGVzOgorLW9maWxlPWxpYnRvb2wKKytvZmlsZT0ke2hvc3RfYWxpYXN9LWxpYnRvb2wKKyBjYW5fYnVpbGRfc2hhcmVkPXllcworIAorICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorQEAgLTg0NjAsOCArODk2MCw2IEBAIGZpCisgbHRfcHJvZ19jb21waWxlcl9waWM9CisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisgCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CistJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCitAQCAtODYyNyw2ICs5MTI1LDEyIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKKyAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworIAk7OworKyAgICAgIG5hZ2ZvciopCisrCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKysJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJworKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKysJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworKwk7OworICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisgCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCitAQCAtODY4OSw3ICs5MTkzLDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7CisgICAgICAgKikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OworQEAgLTg3NDYsMTMgKzkyNTAsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgorICAgICA7OworIGVzYWMKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKy0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKy0KKy0KKy0KKy0KKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfcHJvZ19jb21waWxlcl9waWMKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYworIAorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCitAQCAtODgxMyw2ICs5MzIxLDExIEBAIGZpCisgCisgCisgCisrCisrCisrCisrCisrCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtOTE2Myw3ICs5Njc2LDggQEAgX0xUX0VPRgorICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKy0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJworIAorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCitAQCAtOTIxMSw3ICs5NzI1LDcgQEAgX0xUX0VPRgorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKyAJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgIHRoZW4KKy0JdG1wX2FkZGZsYWc9CisrCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworIAl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKyAJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCitAQCAtOTI2MiwxMiArOTc3NiwxMiBAQCBfTFRfRU9GCisgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKKy0JICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKysJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisgCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisrCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAJICBmaQorIAkgIDs7CisgCWVzYWMKK0BAIC05MjgxLDggKzk3OTUsOCBAQCBfTFRfRU9GCisgCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKyAJd2xhcmM9CisgICAgICAgZWxzZQorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBmaQorICAgICAgIDs7CisgCitAQCAtOTMwMCw4ICs5ODE0LDggQEAgX0xUX0VPRgorIAorIF9MVF9FT0YKKyAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTkzNDcsOCArOTg2MSw4IEBAIF9MVF9FT0YKKyAKKyAgICAgKikKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05NDc4LDcgKzk5OTIsMTMgQEAgX0xUX0VPRgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJworICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTQ5MSwyMiArMTAwMTEsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorQEAgLTk1MTgsNyArMTAwNDUsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCWVsc2UKKyAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTk1MzEsMjIgKzEwMDY0LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCitAQCAtOTU5MSwyMCArMTAxMzEsNjMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICBjbCopCisrCSMgTmF0aXZlIE1TVkMKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZWxzZQorKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBmaX4KKysJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgbGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKwkjIERvbid0IHVzZSByYW5saWIKKysJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisrCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisrCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC05NjY1LDcgKzEwMjQ4LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtOTY3Myw3ICsxMDI1Niw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4OSopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBmaQorQEAgLTk2ODksNyArMTAyNzIsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDEwKikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCitAQCAtOTcxMywxMCArMTAyOTYsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJZXNhYworICAgICAgIGVsc2UKK0BAIC05Nzk1LDIzICsxMDM3OCwzNiBAQCBmaQorIAorICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisgCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCistICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorLSAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLWludCBmb28odm9pZCkge30KKytpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorLSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworLQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCisrZWxzZQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKysgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KKysJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCitAQCAtOTg5Niw3ICsxMDQ5Miw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworQEAgLTk5MTUsOSArMTA1MTEsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJd2xhcmM9JyR7d2x9JworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgZWxzZQorIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKyAJKiJDb21waWxlcnMgNS4wIiopCitAQCAtMTA0OTMsOCArMTEwODksOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTA1MjcsMTMgKzExMTI0LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xMDYyNSw3ICsxMTI4MCw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0xMTQ2NSwxMCArMTIxMjAsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMTU3MSwxMCArMTIyMjYsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xNTE2Myw3ICsxNTgxOCw3IEBAIFNIQVJFRF9MREZMQUdTPQorIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCisgICB4PWBzZWQgLW4gLWUgJ3MvXlsgCV0qUElDRkxBR1sgCV0qPVsgCV0qLy9wJyA8IC4uL2xpYmliZXJ0eS9NYWtlZmlsZSB8IHNlZCAtbiAnJHAnYAorICAgaWYgdGVzdCAtbiAiJHgiOyB0aGVuCistICAgIFNIQVJFRF9MSUJBREQ9Ii1MYHB3ZGAvLi4vbGliaWJlcnR5L3BpYyAtbGliZXJ0eSIKKysgICAgU0hBUkVEX0xJQkFERD0iYHB3ZGAvLi4vbGliaWJlcnR5L3BpYy9saWJpYmVydHkuYSIKKyAgIGZpCisgCisgIyBNb3JlIGhhY2tzIHRvIGJ1aWxkIERMTHMgb24gV2luZG93cy4KK0BAIC0xNjc4MCwxMyArMTc0MzUsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKythcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNjgwMSwxNCArMTc0NjMsMTcgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGUKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTY4NDEsMTIgKzE3NTA2LDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCisgaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiJGZpeF9zcmNmaWxlX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE2OTAxLDggKzE3NTY2LDEzIEBAIHJlbG9hZF9mbGFnIFwKKyBPQkpEVU1QIFwKKyBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCisgZmlsZV9tYWdpY19jbWQgXAorK2ZpbGVfbWFnaWNfZ2xvYiBcCisrd2FudF9ub2Nhc2VnbG9iIFwKKytETExUT09MIFwKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCisgQVIgXAorIEFSX0ZMQUdTIFwKKythcmNoaXZlcl9saXN0X3NwZWMgXAorIFNUUklQIFwKKyBSQU5MSUIgXAorIENDIFwKK0BAIC0xNjkxMiwxMiArMTc1ODIsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKKytubV9maWxlX2xpc3Rfc3BlYyBcCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorLWx0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKKytsdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorIG5lZWRfbG9ja3MgXAorK01BTklGRVNUX1RPT0wgXAorIERTWU1VVElMIFwKKyBOTUVESVQgXAorIExJUE8gXAorQEAgLTE2OTMzLDcgKzE3NjA1LDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAorIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorLWZpeF9zcmNmaWxlX3BhdGggXAorIGV4Y2x1ZGVfZXhwc3ltcyBcCisgaW5jbHVkZV9leHBzeW1zIFwKKyBmaWxlX2xpc3Rfc3BlYyBcCitAQCAtMTY5NjksNiArMTc2NDAsNyBAQCBtb2R1bGVfY21kcyBcCisgbW9kdWxlX2V4cHN5bV9jbWRzIFwKKyBleHBvcnRfc3ltYm9sc19jbWRzIFwKKyBwcmVsaW5rX2NtZHMgXAorK3Bvc3RsaW5rX2NtZHMgXAorIHBvc3RpbnN0YWxsX2NtZHMgXAorIHBvc3R1bmluc3RhbGxfY21kcyBcCisgZmluaXNoX2NtZHMgXAorQEAgLTE3NzQ4LDcgKzE4NDIwLDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAorICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorICMKKyAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrIyAgICAgICAgICAgICAgICAgSW5jLgorICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisgIworICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KK0BAIC0xNzg1MSwxOSArMTg1MjQsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCisgIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorIE5MMlNQPSRsdF9sdF9OTDJTUAorIAorKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisrCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrCisgIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KKyBPQkpEVU1QPSRsdF9PQkpEVU1QCisgCisgIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKyAKKy0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgorKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyBmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKyAKKysjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCisrCisrIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKKysKKysjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorK0RMTFRPT0w9JGx0X0RMTFRPT0wKKysKKysjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrCisgIyBUaGUgYXJjaGl2ZXIuCisgQVI9JGx0X0FSCisrCisrIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KKyBBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKyAKKysjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KKythcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYworKworICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCisgU1RSSVA9JGx0X1NUUklQCisgCitAQCAtMTc4OTMsNiArMTg1ODksMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKyAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAorIAorKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgorK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworKworKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCisrbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAorKworICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorIG9iamRpcj0kb2JqZGlyCisgCitAQCAtMTc5MDIsNiArMTg2MDQsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAorICMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CisgbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworIAorKyMgTWFuaWZlc3QgdG9vbC4KKytNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisrCisgIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorIERTWU1VVElMPSRsdF9EU1lNVVRJTAorIAorQEAgLTE4MDE2LDEyICsxODcyMSwxMiBAQCB3aXRoX2djYz0kR0NDCisgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKyAKKy0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCistd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKyAKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKysKKyAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCisgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKyAKK0BAIC0xODEwOCw5ICsxODgxMyw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKyAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KKyBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisgCistIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworIAorQEAgLTE4MTI2LDYgKzE4ODI4LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKyAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKysKKyAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KKyBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKyAKK0BAIC0xODE1OCwyMTAgKzE4ODYzLDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKyAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIGNhc2UgJHhzaV9zaGVsbCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCistIyBjYWxsOgorLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCistIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CistIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCistIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCistICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CistfQorLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CistICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCistfQorLQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKy0KKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtePV0qXCk9LiovXDEvO3EnCistbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJworLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCistICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKy0KKy1fTFRfRU9GCistZXNhYworLQorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMSs9XCQyIgorLX0KKy1fTFRfRU9GCistICAgIDs7CistICAqKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMT1cJCQxXCQyIgorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICBlc2FjCistCistCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorKworKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKKytmdW5jX2Rpcm5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKKytmdW5jX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCisrZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKKytmdW5jX3N0cmlwbmFtZSAoKVwKKyt7XAorK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKKytcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCisrZnVuY19zcGxpdF9sb25nX29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCisrZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCisrZnVuY19sbzJvICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAorK1wgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKKytmdW5jX3hmb3JtICgpXAorK3tcCisrICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKKytmdW5jX2FyaXRoICgpXAorK3tcCisrICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCisrZnVuY19sZW4gKClcCisre1wKKysgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworK2ZpCisrCisraWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCisrZnVuY19hcHBlbmQgKClcCisre1wKKysgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCisrZnVuY19hcHBlbmRfcXVvdGVkICgpXAorK3tcCisrXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKKytcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytlbHNlCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZmkKKysKKytpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQorK2ZpCisrCisrCisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyAKK2RpZmYgLS1naXQgYS9iZmQvY29uZmlndXJlLmFjIGIvYmZkL2NvbmZpZ3VyZS5hYworaW5kZXggYmE5OGUzOS4uODgwNjNjZiAxMDA2NDQKKy0tLSBhL2JmZC9jb25maWd1cmUuYWMKKysrKyBiL2JmZC9jb25maWd1cmUuYWMKK0BAIC01NjQsNyArNTY0LDcgQEAgY2hhbmdlcXVvdGUoLClkbmwKKyAgIHg9YHNlZCAtbiAtZSAncy9eWyAJXSpQSUNGTEFHWyAJXSo9WyAJXSovL3AnIDwgLi4vbGliaWJlcnR5L01ha2VmaWxlIHwgc2VkIC1uICckcCdgCisgY2hhbmdlcXVvdGUoWyxdKWRubAorICAgaWYgdGVzdCAtbiAiJHgiOyB0aGVuCistICAgIFNIQVJFRF9MSUJBREQ9Ii1MYHB3ZGAvLi4vbGliaWJlcnR5L3BpYyAtbGliZXJ0eSIKKysgICAgU0hBUkVEX0xJQkFERD0iYHB3ZGAvLi4vbGliaWJlcnR5L3BpYy9saWJpYmVydHkuYSIKKyAgIGZpCisgCisgIyBNb3JlIGhhY2tzIHRvIGJ1aWxkIERMTHMgb24gV2luZG93cy4KK2RpZmYgLS1naXQgYS9iaW51dGlscy9jb25maWd1cmUgYi9iaW51dGlscy9jb25maWd1cmUKK2luZGV4IGJlNGI4MWMuLjY2MDZhNWYgMTAwNzU1CistLS0gYS9iaW51dGlscy9jb25maWd1cmUKKysrKyBiL2JpbnV0aWxzL2NvbmZpZ3VyZQorQEAgLTY1NSw4ICs2NTUsMTEgQEAgT1RPT0wKKyBMSVBPCisgTk1FRElUCisgRFNZTVVUSUwKKytNQU5JRkVTVF9UT09MCisgUkFOTElCCisrYWNfY3RfQVIKKyBBUgorK0RMTFRPT0wKKyBPQkpEVU1QCisgTE5fUworIE5NCitAQCAtNzY3LDYgKzc3MCw3IEBAIGVuYWJsZV9zdGF0aWMKKyB3aXRoX3BpYworIGVuYWJsZV9mYXN0X2luc3RhbGwKKyB3aXRoX2dudV9sZAorK3dpdGhfbGlidG9vbF9zeXNyb290CisgZW5hYmxlX2xpYnRvb2xfbG9jaworIGVuYWJsZV9wbHVnaW5zCisgZW5hYmxlX2xhcmdlZmlsZQorQEAgLTE0MzksNiArMTQ0Myw4IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgorICAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQorICAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorKyAgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKysgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KKyAgIC0td2l0aC16bGliICAgICAgICAgICAgIGluY2x1ZGUgemxpYiBzdXBwb3J0IChhdXRvL3llcy9ubykgZGVmYXVsdD1hdXRvCisgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgZGVmYXVsdD1ubworICAgLS13aXRoLWxpYmljb252LXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWJpY29udiBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorQEAgLTUxNTMsOCArNTE1OSw4IEBAIGVzYWMKKyAKKyAKKyAKKy1tYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKyttYWNyb192ZXJzaW9uPScyLjQnCisrbWFjcm9fcmV2aXNpb249JzEuMzI5MycKKyAKKyAKKyAKK0BAIC01MTk0LDcgKzUyMDAsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCistaWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKytpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICAgRUNITz0ncHJpbnQgLXIgLS0nCisgZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KK0BAIC01ODgwLDggKzU4ODYsOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OworICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNTkzMCw2ICs1OTM2LDgwIEBAIGVzYWMKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqLSotY3lnd2luKiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC01OTQ2LDYgKzYwMjYsMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyBlc2FjCisgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKysgICAgZmkKKysgICAgOzsKKyAgIGRhcndpbiopCisgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworQEAgLTYxMTQsNyArNjE5OSw4IEBAIG1pbmd3KiB8IHB3MzIqKQorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisrICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgICBmaQorICAgOzsKK0BAIC02MjY4LDYgKzYzNTQsMjEgQEAgZXNhYworIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CisgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisrCisrZmlsZV9tYWdpY19nbG9iPQorK3dhbnRfbm9jYXNlZ2xvYj1ubworK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICBtaW5ndyogfCBwdzMyKikKKysgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKysgICAgZWxzZQorKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC02MjgzLDkgKzYzODQsMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIAorIAorIAorKworKworKworKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisrICBhY19jdF9ETExUT09MPSRETExUT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorKyAgICBETExUT09MPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGZpCisrZWxzZQorKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrCisrCisrCisrCisrCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTYzMDEsNyArNjU1NSw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYzMjEsMTEgKzY1NzUsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKytpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICBhY19jdF9BUj0kQVIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKytkbworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjM0MSw3ICs2NTk5LDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYzNjAsNiArNjYxOCwxMCBAQCBlbHNlCisgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorKworKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworK2RvbmUKKysKKyAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgICBBUj0iZmFsc2UiCisgICBlbHNlCitAQCAtNjM3MSwxNiArNjYzMyw3MiBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIEFSPSRhY19jdF9BUgorICAgZmkKKy1lbHNlCistICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKKyAKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfYXJfYXRfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisgCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisrICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKyAKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorIAorK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorIAorIAorIAorQEAgLTY3MjIsOCArNzA0MCw4IEBAIGVzYWMKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorIAorICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKyAKKyAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KKyBvcHRfY3I9CitAQCAtNjc1OSw2ICs3MDc3LDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworICAgZWxzZQorICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICAgZmkKKysgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKyAKKyAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICAgcGlwZV93b3Jrcz1ubworQEAgLTY4MDAsNiArNzExOSwxOCBAQCBfTFRfRU9GCisgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC02ODExLDcgKzcxNDIsNyBAQCBfTFRfRU9GCisgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgCisgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworLWNvbnN0IHN0cnVjdCB7CisrTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICAgICAgICphZGRyZXNzOworIH0KK0BAIC02ODM3LDggKzcxNjgsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIF9MVF9FT0YKKyAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCistCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKyAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKK0BAIC02ODQ4LDggKzcxNzksOCBAQCBfTFRfRU9GCisgICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKyAJZmkKK0BAIC02ODg2LDYgKzcyMTcsMjAgQEAgZWxzZQorICRhc19lY2hvICJvayIgPiY2OyB9CisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZmkKKysKKysKKysKKysKKysKKysKKysKKysKKyAKKyAKKyAKK0BAIC02OTA1LDYgKzcyNTAsNDEgQEAgZmkKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidG9vbC1zeXNyb290IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfbGlidG9vbF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfbGlidG9vbF9zeXNyb290OworK2Vsc2UKKysgIHdpdGhfbGlidG9vbF9zeXNyb290PW5vCisrZmkKKysKKysKKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNQorKyRhc19lY2hvICIke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY2OyB9CisrICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisrICAgOzsKKytlc2FjCisrCisrIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CisrJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKysKKysKKysKKyAKKyAKKyAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KK0BAIC03MTEzLDYgKzc0OTMsMTIzIEBAIGVzYWMKKyAKKyBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyAKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKysgICAgTUFOSUZFU1RfVE9PTD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKysgIGZpCisrZWxzZQorKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1CisrICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisrICBmaQorKyAgcm0gLWYgY29uZnRlc3QqCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorKworKworKworKworKworIAorICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICByaGFwc29keSogfCBkYXJ3aW4qKQorQEAgLTc2NzYsNiArODE3Myw4IEBAIF9MVF9FT0YKKyAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKKyAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQorKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1CisrICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC03ODcxLDcgKzgzNzAsOCBAQCBmaQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgCisgCisgCitAQCAtNzk2MCw3ICs4NDYwLDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC04MjU4LDggKzg3NTgsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTg0MjUsNiArODkyMywxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKysJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisrCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTg0ODcsNyArODk5MSw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKK0BAIC04NTQ0LDEzICs5MDQ4LDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CistCistCistCistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTg2MTEsNiArOTExOSwxMSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTg5NjEsNyArOTQ3NCw4IEBAIF9MVF9FT0YKKyAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCistICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTkwMDksNyArOTUyMyw3IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisgCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgICB0aGVuCistCXRtcF9hZGRmbGFnPQorKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKyAJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisgCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorICAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorQEAgLTkwNjAsMTIgKzk1NzQsMTIgQEAgX0xUX0VPRgorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCistCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisrCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgCSAgZmkKKyAJICA7OworIAllc2FjCitAQCAtOTA3OSw4ICs5NTkzLDggQEAgX0xUX0VPRgorIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTkwOTgsOCArOTYxMiw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05MTQ1LDggKzk2NTksOCBAQCBfTFRfRU9GCisgCisgICAgICopCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTI3Niw3ICs5NzkwLDEzIEBAIF9MVF9FT0YKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTkyODksMjIgKzk4MDksMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorQEAgLTkzMTYsNyArOTg0MywxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJZWxzZQorIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTMyOSwyMiArOTg2MiwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTkzODksMjAgKzk5MjksNjMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICBjbCopCisrCSMgTmF0aXZlIE1TVkMKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZWxzZQorKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBmaX4KKysJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgbGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKwkjIERvbid0IHVzZSByYW5saWIKKysJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisrCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisrCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC05NDYzLDcgKzEwMDQ2LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtOTQ3MSw3ICsxMDA1NCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4OSopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBmaQorQEAgLTk0ODcsNyArMTAwNzAsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDEwKikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCitAQCAtOTUxMSwxMCArMTAwOTQsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJZXNhYworICAgICAgIGVsc2UKK0BAIC05NTkzLDIzICsxMDE3NiwzNiBAQCBmaQorIAorICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisgCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCistICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorLSAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLWludCBmb28odm9pZCkge30KKytpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorLSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworLQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCisrZWxzZQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKysgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KKysJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCitAQCAtOTY5NCw3ICsxMDI5MCw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworQEAgLTk3MTMsOSArMTAzMDksOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJd2xhcmM9JyR7d2x9JworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgZWxzZQorIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKyAJKiJDb21waWxlcnMgNS4wIiopCitAQCAtMTAyOTEsOCArMTA4ODcsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTAzMjUsMTMgKzEwOTIyLDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xMDQyMyw3ICsxMTA3OCw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0xMTI2MywxMCArMTE5MTgsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMTM2OSwxMCArMTIwMjQsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xNTM3MywxMyArMTYwMjgsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKythcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNTM5NCwxNCArMTYwNTYsMTcgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGUKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTU0MzQsMTIgKzE2MDk5LDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCisgaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiJGZpeF9zcmNmaWxlX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE1NDk0LDggKzE2MTU5LDEzIEBAIHJlbG9hZF9mbGFnIFwKKyBPQkpEVU1QIFwKKyBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCisgZmlsZV9tYWdpY19jbWQgXAorK2ZpbGVfbWFnaWNfZ2xvYiBcCisrd2FudF9ub2Nhc2VnbG9iIFwKKytETExUT09MIFwKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCisgQVIgXAorIEFSX0ZMQUdTIFwKKythcmNoaXZlcl9saXN0X3NwZWMgXAorIFNUUklQIFwKKyBSQU5MSUIgXAorIENDIFwKK0BAIC0xNTUwNSwxMiArMTYxNzUsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKKytubV9maWxlX2xpc3Rfc3BlYyBcCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorLWx0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKKytsdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorIG5lZWRfbG9ja3MgXAorK01BTklGRVNUX1RPT0wgXAorIERTWU1VVElMIFwKKyBOTUVESVQgXAorIExJUE8gXAorQEAgLTE1NTI2LDcgKzE2MTk4LDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAorIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorLWZpeF9zcmNmaWxlX3BhdGggXAorIGV4Y2x1ZGVfZXhwc3ltcyBcCisgaW5jbHVkZV9leHBzeW1zIFwKKyBmaWxlX2xpc3Rfc3BlYyBcCitAQCAtMTU1NjIsNiArMTYyMzMsNyBAQCBtb2R1bGVfY21kcyBcCisgbW9kdWxlX2V4cHN5bV9jbWRzIFwKKyBleHBvcnRfc3ltYm9sc19jbWRzIFwKKyBwcmVsaW5rX2NtZHMgXAorK3Bvc3RsaW5rX2NtZHMgXAorIHBvc3RpbnN0YWxsX2NtZHMgXAorIHBvc3R1bmluc3RhbGxfY21kcyBcCisgZmluaXNoX2NtZHMgXAorQEAgLTE2MzE5LDcgKzE2OTkxLDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAorICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorICMKKyAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrIyAgICAgICAgICAgICAgICAgSW5jLgorICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisgIworICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KK0BAIC0xNjQyMiwxOSArMTcwOTUsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCisgIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorIE5MMlNQPSRsdF9sdF9OTDJTUAorIAorKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisrCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrCisgIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KKyBPQkpEVU1QPSRsdF9PQkpEVU1QCisgCisgIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKyAKKy0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgorKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyBmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKyAKKysjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCisrCisrIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKKysKKysjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorK0RMTFRPT0w9JGx0X0RMTFRPT0wKKysKKysjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrCisgIyBUaGUgYXJjaGl2ZXIuCisgQVI9JGx0X0FSCisrCisrIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KKyBBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKyAKKysjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KKythcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYworKworICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCisgU1RSSVA9JGx0X1NUUklQCisgCitAQCAtMTY0NjQsNiArMTcxNjAsMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKyAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAorIAorKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgorK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworKworKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCisrbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAorKworICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorIG9iamRpcj0kb2JqZGlyCisgCitAQCAtMTY0NzMsNiArMTcxNzUsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAorICMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CisgbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworIAorKyMgTWFuaWZlc3QgdG9vbC4KKytNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisrCisgIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorIERTWU1VVElMPSRsdF9EU1lNVVRJTAorIAorQEAgLTE2NTg3LDEyICsxNzI5MiwxMiBAQCB3aXRoX2djYz0kR0NDCisgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKyAKKy0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCistd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKyAKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKysKKyAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCisgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKyAKK0BAIC0xNjY3OSw5ICsxNzM4NCw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKyAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KKyBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisgCistIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworIAorQEAgLTE2Njk3LDYgKzE3Mzk5LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKyAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKysKKyAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KKyBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKyAKK0BAIC0xNjcyOSwyMTAgKzE3NDM0LDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKyAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIGNhc2UgJHhzaV9zaGVsbCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCistIyBjYWxsOgorLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCistIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CistIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCistIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCistICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CistfQorLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CistICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCistfQorLQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKy0KKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtePV0qXCk9LiovXDEvO3EnCistbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJworLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCistICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKy0KKy1fTFRfRU9GCistZXNhYworLQorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMSs9XCQyIgorLX0KKy1fTFRfRU9GCistICAgIDs7CistICAqKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMT1cJCQxXCQyIgorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICBlc2FjCistCistCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorKworKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKKytmdW5jX2Rpcm5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKKytmdW5jX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCisrZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKKytmdW5jX3N0cmlwbmFtZSAoKVwKKyt7XAorK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKKytcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCisrZnVuY19zcGxpdF9sb25nX29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCisrZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCisrZnVuY19sbzJvICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAorK1wgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKKytmdW5jX3hmb3JtICgpXAorK3tcCisrICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKKytmdW5jX2FyaXRoICgpXAorK3tcCisrICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCisrZnVuY19sZW4gKClcCisre1wKKysgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworK2ZpCisrCisraWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCisrZnVuY19hcHBlbmQgKClcCisre1wKKysgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCisrZnVuY19hcHBlbmRfcXVvdGVkICgpXAorK3tcCisrXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKKytcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytlbHNlCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZmkKKysKKytpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQorK2ZpCisrCisrCisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGU5ZjJmMTMuLmNiY2NiMTggMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTgwNDEsNyArODA0MSw3IEBAIGNhc2UgIiAkYnVpbGRfY29uZmlnZGlycyAiIGluCisgICAgICMgRm9yIGFuIGluc3RhbGxlZCBtYWtlaW5mbywgd2UgcmVxdWlyZSBpdCB0byBiZSBmcm9tIHRleGluZm8gNC43IG9yCisgICAgICMgaGlnaGVyLCBlbHNlIHdlIHVzZSB0aGUgIm1pc3NpbmciIGR1bW15LgorICAgICBpZiAke01BS0VJTkZPfSAtLXZlcnNpb24gXAorLSAgICAgICB8IGVncmVwICd0ZXhpbmZvW14wLTldKig0XC4oWzctOV18WzEtOV1bMC05XSl8WzUtOV18WzEtOV1bMC05XSknID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgICB8IGVncmVwICd0ZXhpbmZvW14wLTldKihbMS0zXVswLTldfDQuWzQtOV18NC5bMS05XVswLTldK3xbNS05XSknID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgIDoKKyAgICAgZWxzZQorICAgICAgIE1BS0VJTkZPPSIkTUlTU0lORyBtYWtlaW5mbyIKK2RpZmYgLS1naXQgYS9nYXMvY29uZmlndXJlIGIvZ2FzL2NvbmZpZ3VyZQoraW5kZXggZTliYTU1MC4uMDc0ODg2ZiAxMDA3NTUKKy0tLSBhL2dhcy9jb25maWd1cmUKKysrKyBiL2dhcy9jb25maWd1cmUKK0BAIC02NDUsOCArNjQ1LDExIEBAIE9UT09MCisgTElQTworIE5NRURJVAorIERTWU1VVElMCisrTUFOSUZFU1RfVE9PTAorIFJBTkxJQgorK2FjX2N0X0FSCisgQVIKKytETExUT09MCisgT0JKRFVNUAorIExOX1MKKyBOTQorQEAgLTc1Nyw2ICs3NjAsNyBAQCBlbmFibGVfc3RhdGljCisgd2l0aF9waWMKKyBlbmFibGVfZmFzdF9pbnN0YWxsCisgd2l0aF9nbnVfbGQKKyt3aXRoX2xpYnRvb2xfc3lzcm9vdAorIGVuYWJsZV9saWJ0b29sX2xvY2sKKyBlbmFibGVfcGx1Z2lucworIGVuYWJsZV9sYXJnZWZpbGUKK0BAIC0xNDIyLDYgKzE0MjYsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKysgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgICAtLXdpdGgtemxpYiAgICAgICAgICAgICBpbmNsdWRlIHpsaWIgc3VwcG9ydCAoYXV0by95ZXMvbm8pIGRlZmF1bHQ9YXV0bworIAorIFNvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorQEAgLTQ5MDEsOCArNDkwNyw4IEBAIGVzYWMKKyAKKyAKKyAKKy1tYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKyttYWNyb192ZXJzaW9uPScyLjQnCisrbWFjcm9fcmV2aXNpb249JzEuMzI5MycKKyAKKyAKKyAKK0BAIC00OTQyLDcgKzQ5NDgsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCistaWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKytpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICAgRUNITz0ncHJpbnQgLXIgLS0nCisgZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KK0BAIC01NjI4LDggKzU2MzQsOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OworICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNTY3OCw2ICs1Njg0LDgwIEBAIGVzYWMKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqLSotY3lnd2luKiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC01Njk0LDYgKzU3NzQsMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyBlc2FjCisgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKysgICAgZmkKKysgICAgOzsKKyAgIGRhcndpbiopCisgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworQEAgLTU4NjIsNyArNTk0Nyw4IEBAIG1pbmd3KiB8IHB3MzIqKQorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisrICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgICBmaQorICAgOzsKK0BAIC02MDE2LDYgKzYxMDIsMjEgQEAgZXNhYworIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CisgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisrCisrZmlsZV9tYWdpY19nbG9iPQorK3dhbnRfbm9jYXNlZ2xvYj1ubworK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICBtaW5ndyogfCBwdzMyKikKKysgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKysgICAgZWxzZQorKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC02MDMxLDkgKzYxMzIsMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIAorIAorIAorKworKworKworKworKworKworKworKworKworKworK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisrICBhY19jdF9ETExUT09MPSRETExUT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorKyAgICBETExUT09MPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGZpCisrZWxzZQorKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrCisrCisrCisrCisrCisrCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTYwNDksNyArNjMwMyw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYwNjksMTEgKzYzMjMsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKytpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICBhY19jdF9BUj0kQVIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKytkbworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjA4OSw3ICs2MzQ3LDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYxMDgsNiArNjM2NiwxMCBAQCBlbHNlCisgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorKworKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworK2RvbmUKKysKKyAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgICBBUj0iZmFsc2UiCisgICBlbHNlCitAQCAtNjExOSwxMiArNjM4MSwxMCBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIEFSPSRhY19jdF9BUgorICAgZmkKKy1lbHNlCistICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKKyAKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKyAKKyAKKyAKK0BAIC02MTM2LDYgKzYzOTYsNjQgQEAgdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfYXJfYXRfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisrCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisrICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKysKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorKworK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKK0BAIC02NDcwLDggKzY3ODgsOCBAQCBlc2FjCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKyAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisgCisgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisgb3B0X2NyPQorQEAgLTY1MDcsNiArNjgyNSw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAgIGVsc2UKKyAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisgCisgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgIHBpcGVfd29ya3M9bm8KK0BAIC02NTQ4LDYgKzY4NjcsMTggQEAgX0xUX0VPRgorICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisrLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtNjU1OSw3ICs2ODkwLDcgQEAgX0xUX0VPRgorIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworK0xUX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgICBjb25zdCBjaGFyICpuYW1lOworICAgdm9pZCAgICAgICAqYWRkcmVzczsKKyB9CitAQCAtNjU4NSw4ICs2OTE2LDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyBfTFRfRU9GCisgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKyAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKy0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKyAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisgCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CitAQCAtNjU5Niw4ICs2OTI3LDggQEAgX0xUX0VPRgorICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgCSAgICBwaXBlX3dvcmtzPXllcworIAkgIGZpCistCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKy0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKysJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworIAllbHNlCisgCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisgCWZpCitAQCAtNjYzNCw2ICs2OTY1LDIxIEBAIGVsc2UKKyAkYXNfZWNobyAib2siID4mNjsgfQorIGZpCisgCisrIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCisraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tAXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2ZpCisrCisrCisrCisrCisrCisrCisrCisrCisrCisgCisgCisgCitAQCAtNjY1Miw2ICs2OTk4LDQwIEBAIGZpCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnRvb2wtc3lzcm9vdCB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX2xpYnRvb2xfc3lzcm9vdDsKKytlbHNlCisrICB3aXRoX2xpYnRvb2xfc3lzcm9vdD1ubworK2ZpCisrCisrCisrbHRfc3lzcm9vdD0KKytjYXNlICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IGluICMoCisrIHllcykKKysgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKysgICBmaQorKyAgIDs7ICMoCisrIC8qKQorKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIDs7ICMoCisrIG5vfCcnKQorKyAgIDs7ICMoCisrICopCisrICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjUKKyskYXNfZWNobyAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNjsgfQorKyAgIGFzX2ZuX2Vycm9yICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQorKyAgIDs7CisrZXNhYworKworKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQorKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisrCisrCisgCisgCisgCitAQCAtNjg2MSw2ICs3MjQxLDEyMyBAQCBlc2FjCisgCisgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisgCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCisrICAgIE1BTklGRVNUX1RPT0w9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCisrICBmaQorK2Vsc2UKKysgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0KgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorKyAgTUFOSUZFU1RfVE9PTD06CisrZmkKKysKKysKKysKKysKKysKKyAKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKK0BAIC03NDI0LDYgKzc5MjEsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisgaW50IG1haW4oKSB7IHJldHVybiAwO30KKyBfTFRfRU9GCitAQCAtNzYxOSw3ICs4MTE4LDggQEAgZmkKKyBMSUJUT09MX0RFUFM9IiRsdG1haW4iCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIAorIAorIAorQEAgLTc3MDgsNyArODIwOCw3IEBAIGFpeDMqKQorIGVzYWMKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAorIGNhbl9idWlsZF9zaGFyZWQ9eWVzCisgCisgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCitAQCAtODAwNiw4ICs4NTA2LDYgQEAgZmkKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKyAKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKy0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAorICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKK0BAIC04MTczLDYgKzg2NzEsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisgCTs7CisrICAgICAgbmFnZm9yKikKKysJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisrCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisrCTs7CisgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKyAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKK0BAIC04MjM1LDcgKzg3MzksNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCisrICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICAqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CitAQCAtODI5MiwxMyArODc5NiwxNyBAQCBjYXNlICRob3N0X29zIGluCisgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorLSRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorLQorLQorLQorLQorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CisrbHRfcHJvZ19jb21waWxlcl9waWM9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC04MzU5LDYgKzg4NjcsMTEgQEAgZmkKKyAKKyAKKyAKKysKKysKKysKKysKKysKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKK0BAIC04NzA5LDcgKzkyMjIsOCBAQCBfTFRfRU9GCisgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisgCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC04NzU3LDcgKzkyNzEsNyBAQCBfTFRfRU9GCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorIAkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICAgdGhlbgorLQl0bXBfYWRkZmxhZz0KKysJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisgCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKK0BAIC04ODA4LDEyICs5MzIyLDEyIEBAIF9MVF9FT0YKKyAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworLQkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKyAJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworIAkgIGZpCisgCSAgOzsKKyAJZXNhYworQEAgLTg4MjcsOCArOTM0MSw4IEBAIF9MVF9FT0YKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworIAl3bGFyYz0KKyAgICAgICBlbHNlCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGZpCisgICAgICAgOzsKKyAKK0BAIC04ODQ2LDggKzkzNjAsOCBAQCBfTFRfRU9GCisgCisgX0xUX0VPRgorICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtODg5Myw4ICs5NDA3LDggQEAgX0xUX0VPRgorIAorICAgICAqKQorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTkwMjQsNyArOTUzOCwxMyBAQCBfTFRfRU9GCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05MDM3LDIyICs5NTU3LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC05MDY0LDcgKzk1OTEsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCWVsc2UKKyAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTkwNzcsMjIgKzk2MTAsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKK0BAIC05MTM3LDIwICs5Njc3LDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKy0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJZmlsZV9saXN0X3NwZWM9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtOTIxMSw3ICs5Nzk0LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtOTIxOSw3ICs5ODAyLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtOTIzNSw3ICs5ODE4LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXgxMCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgICBmaQorQEAgLTkyNTksMTAgKzk4NDIsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJZXNhYworICAgICAgIGVsc2UKK0BAIC05MzQxLDIzICs5OTI0LDM2IEBAIGZpCisgCisgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisgCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKyAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKy0gICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCistICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisrCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisrCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistaW50IGZvbyh2b2lkKSB7fQorK2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CistICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXMKKytlbHNlCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ubworIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQorKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisrICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWZpCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKK0BAIC05NDQyLDcgKzEwMDM4LDcgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgIGVsc2UKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCitAQCAtOTQ2MSw5ICsxMDA1Nyw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC0xMDAzOSw4ICsxMDYzNSw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbmVlZF9saWJfcHJlZml4PW5vCisgCistICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKy0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCisrICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisrICB5ZXMsKikKKysgICAgIyBnY2MKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KK0BAIC0xMDA3MywxMyArMTA2NzAsNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgICA7OworICAgICBlc2FjCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisrICAgIDs7CisrCisrICAqLGNsKikKKysgICAgIyBOYXRpdmUgTVNWQworKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworKworKyAgICBjYXNlICRidWlsZF9vcyBpbgorKyAgICBtaW5ndyopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKysgICAgICBJRlM9JzsnCisrICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorKyAgICAgIGRvCisrICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisrICAgICAgZG9uZQorKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKysgICAgICA7OworKyAgICBjeWd3aW4qKQorKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKysgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKysgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisrICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisrICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKysgICAgICBlbHNlCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgZmkKKysgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKysgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisrICAgICAgOzsKKysgICAgZXNhYworKworKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisrICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKysgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorKyAgICAgICAkUk0gXCRkbHBhdGgnCisrICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgICA7OworIAorICAgKikKKysgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgICA7OworICAgZXNhYworLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICAgc2hsaWJwYXRoX3Zhcj1QQVRICisgICA7OworQEAgLTEwMTcxLDcgKzEwODI2LDcgQEAgaGFpa3UqKQorICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICA7OworIAorQEAgLTExMDExLDEwICsxMTY2NiwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTExMTE3LDEwICsxMTc3MiwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTE1Mjc0LDEzICsxNTkyOSwyMCBAQCBleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9faG9zdF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfY21kcz0nYCRFQ0hPICIkcmVsb2FkX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE9CSkRVTVA9J2AkRUNITyAiJE9CSkRVTVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytmaWxlX21hZ2ljX2dsb2I9J2AkRUNITyAiJGZpbGVfbWFnaWNfZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrd2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUl9GTEFHUz0nYCRFQ0hPICIkQVJfRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2FyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFJBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE1Mjk1LDE0ICsxNTk1NywxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBNQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1sdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE5NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNTMzNSwxMiArMTYwMDAsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKKyBoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZml4X3NyY2ZpbGVfcGF0aD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTUzOTUsOCArMTYwNjAsMTMgQEAgcmVsb2FkX2ZsYWcgXAorIE9CSkRVTVAgXAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKKyBmaWxlX21hZ2ljX2NtZCBcCisrZmlsZV9tYWdpY19nbG9iIFwKKyt3YW50X25vY2FzZWdsb2IgXAorK0RMTFRPT0wgXAorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKKyBBUiBcCisgQVJfRkxBR1MgXAorK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCisgU1RSSVAgXAorIFJBTkxJQiBcCisgQ0MgXAorQEAgLTE1NDA2LDEyICsxNjA3NiwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAorK25tX2ZpbGVfbGlzdF9zcGVjIFwKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCistbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9waWMgXAorK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCisgbmVlZF9sb2NrcyBcCisrTUFOSUZFU1RfVE9PTCBcCisgRFNZTVVUSUwgXAorIE5NRURJVCBcCisgTElQTyBcCitAQCAtMTU0MjcsNyArMTYwOTksNiBAQCBub191bmRlZmluZWRfZmxhZyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCisgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCistZml4X3NyY2ZpbGVfcGF0aCBcCisgZXhjbHVkZV9leHBzeW1zIFwKKyBpbmNsdWRlX2V4cHN5bXMgXAorIGZpbGVfbGlzdF9zcGVjIFwKK0BAIC0xNTQ2Myw2ICsxNjEzNCw3IEBAIG1vZHVsZV9jbWRzIFwKKyBtb2R1bGVfZXhwc3ltX2NtZHMgXAorIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAorIHByZWxpbmtfY21kcyBcCisrcG9zdGxpbmtfY21kcyBcCisgcG9zdGluc3RhbGxfY21kcyBcCisgcG9zdHVuaW5zdGFsbF9jbWRzIFwKKyBmaW5pc2hfY21kcyBcCitAQCAtMTYyMjcsNyArMTY4OTksOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8CisgIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisgIworICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysjICAgICAgICAgICAgICAgICBJbmMuCisgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyAjCisgIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorQEAgLTE2MzMwLDE5ICsxNzAwMyw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKKyAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCisgTkwyU1A9JGx0X2x0X05MMlNQCisgCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgorK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKysKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgorK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKysKKyAjIEFuIG9iamVjdCBzeW1ib2wgZHVtcGVyLgorIE9CSkRVTVA9JGx0X09CSkRVTVAKKyAKKyAjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorIAorLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyIuCisrIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorIGZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorIAorKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKKysKKysjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyt3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgorKworKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCisrRExMVE9PTD0kbHRfRExMVE9PTAorKworKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysKKyAjIFRoZSBhcmNoaXZlci4KKyBBUj0kbHRfQVIKKysKKysjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgorIEFSX0ZMQUdTPSRsdF9BUl9GTEFHUworIAorKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgorK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCisrCisgIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KKyBTVFJJUD0kbHRfU1RSSVAKKyAKK0BAIC0xNjM3Miw2ICsxNzA2OCwxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCisgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisgCisrIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCisrbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCisrCisrIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KKytsdF9zeXNyb290PSRsdF9zeXNyb290CisrCisgIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCisgb2JqZGlyPSRvYmpkaXIKKyAKK0BAIC0xNjM4MSw2ICsxNzA4Myw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECisgIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KKyBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisgCisrIyBNYW5pZmVzdCB0b29sLgorK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKysKKyAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCisgRFNZTVVUSUw9JGx0X0RTWU1VVElMCisgCitAQCAtMTY0OTUsMTIgKzE3MjAwLDEyIEBAIHdpdGhfZ2NjPSRHQ0MKKyAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCisgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworIAorLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKy13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorLQorICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworIAorKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorKworICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KKyBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYworIAorQEAgLTE2NTg3LDkgKzE3MjkyLDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKyAKKy0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCistZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAorLQorICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCisgCitAQCAtMTY2MDUsNiArMTczMDcsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCisgcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKKyAKKysjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCisrcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcworKworICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworIAorQEAgLTE2NjM3LDIxMCArMTczNDIsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CistICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgY2FzZSAkeHNpX3NoZWxsIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKy0jIGNhbGw6CistIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKy0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKy0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKy0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKy0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCistIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCistZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKy0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KKy19CistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CistICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKy0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CistICBlc2FjCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCistICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCistICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorLSAgZWxzZQorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCistICBmaQorLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKy19CistCistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsyfSBpbgorLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CistICBlc2FjCistfQorLQorLSMgc2VkIHNjcmlwdHM6CistbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKKy1teV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCistfQorLQorLV9MVF9FT0YKKy1lc2FjCistCistY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxKz1cJDIiCistfQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxPVwkJDFcJDIiCistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gIGVzYWMKKy0KKy0KKy0gIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKysgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKysgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisrCisrICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAorK2Z1bmNfZGlybmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAorK2Z1bmNfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKKytmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAorK2Z1bmNfc3RyaXBuYW1lICgpXAorK3tcCisrXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAorK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKKytmdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKKytmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKKytmdW5jX2xvMm8gKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCisrXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAorK2Z1bmNfeGZvcm0gKClcCisre1wKKysgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAorK2Z1bmNfYXJpdGggKClcCisre1wKKysgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKKytmdW5jX2xlbiAoKVwKKyt7XAorKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrZmkKKysKKytpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKKytmdW5jX2FwcGVuZCAoKVwKKyt7XAorKyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKKytmdW5jX2FwcGVuZF9xdW90ZWQgKClcCisre1wKKytcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAorK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2Vsc2UKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytmaQorKworK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9CisrZmkKKysKKysKKysgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgICBjaG1vZCAreCAiJG9maWxlIgorIAorZGlmZiAtLWdpdCBhL2dwcm9mL2NvbmZpZ3VyZSBiL2dwcm9mL2NvbmZpZ3VyZQoraW5kZXggNzk5NjFjNS4uYzRmNmFjOSAxMDA3NTUKKy0tLSBhL2dwcm9mL2NvbmZpZ3VyZQorKysrIGIvZ3Byb2YvY29uZmlndXJlCitAQCAtNjI5LDggKzYyOSwxMSBAQCBPVE9PTAorIExJUE8KKyBOTUVESVQKKyBEU1lNVVRJTAorK01BTklGRVNUX1RPT0wKKyBSQU5MSUIKKythY19jdF9BUgorIEFSCisrRExMVE9PTAorIE9CSkRVTVAKKyBMTl9TCisgTk0KK0BAIC03NDEsNiArNzQ0LDcgQEAgZW5hYmxlX3N0YXRpYworIHdpdGhfcGljCisgZW5hYmxlX2Zhc3RfaW5zdGFsbAorIHdpdGhfZ251X2xkCisrd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBlbmFibGVfbGlidG9vbF9sb2NrCisgZW5hYmxlX3BsdWdpbnMKKyBlbmFibGVfbGFyZ2VmaWxlCitAQCAtMTM5OSw2ICsxNDAzLDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CisgICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCisgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCisrICAtLXdpdGgtbGlidG9vbC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgorIAorIFNvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorICAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCitAQCAtNDgzMSw4ICs0ODM3LDggQEAgZXNhYworIAorIAorIAorLW1hY3JvX3ZlcnNpb249JzIuMi43YScKKy1tYWNyb19yZXZpc2lvbj0nMS4zMTM0JworK21hY3JvX3ZlcnNpb249JzIuNCcKKyttYWNyb19yZXZpc2lvbj0nMS4zMjkzJworIAorIAorIAorQEAgLTQ4NzIsNyArNDg3OCw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KKyAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KKy1pZiB0ZXN0ICJYYHByaW50IC1yIC0tIC1uIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgICBFQ0hPPSdwcmludCAtciAtLScKKyBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorQEAgLTU1NTgsOCArNTU2NCw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7CisgIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKKyB4c2lfc2hlbGw9bm8KKyAoIF9sdF9kdW1teT0iYS9iL2MiCistICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorLSAgICAgID0gYyxhL2IsLCBcCisrICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICYmIHhzaV9zaGVsbD15ZXMKK0BAIC01NjA4LDYgKzU2MTQsODAgQEAgZXNhYworIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICotKi1jeWd3aW4qICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisrICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b190b29sX2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorK2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTU2MjQsNiArNTcwNCwxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgorIGVzYWMKKyByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgY2FzZSAkaG9zdF9vcyBpbgorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKysgICAgICByZWxvYWRfY21kcz1mYWxzZQorKyAgICBmaQorKyAgICA7OworICAgZGFyd2luKikKKyAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitAQCAtNTc5Miw3ICs1ODc3LDggQEAgbWluZ3cqIHwgcHczMiopCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKysgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgIGZpCisgICA7OworQEAgLTU4NjksMTEgKzU5NTUsNiBAQCBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKy1saW51eC11Y2xpYmMqKQorLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKy0gIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC9saWIvbGlidUNsaWJjLSouc29gCistICA7OworLQorIG5ldGJzZCopCisgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKK0BAIC01OTUxLDYgKzYwMzIsMjEgQEAgZXNhYworIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CisgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisrCisrZmlsZV9tYWdpY19nbG9iPQorK3dhbnRfbm9jYXNlZ2xvYj1ubworK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICBtaW5ndyogfCBwdzMyKikKKysgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKysgICAgZWxzZQorKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC01OTY2LDkgKzYwNjIsMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIAorIAorIAorKworKworKworKworKworKworKworKworKworKworK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisrICBhY19jdF9ETExUT09MPSRETExUT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorKyAgICBETExUT09MPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGZpCisrZWxzZQorKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrCisrCisrCisrCisrCisrCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTU5ODQsNyArNjIzMyw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYwMDQsMTEgKzYyNTMsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKytpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICBhY19jdF9BUj0kQVIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKytkbworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjAyNCw3ICs2Mjc3LDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYwNDMsNiArNjI5NiwxMCBAQCBlbHNlCisgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorKworKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworK2RvbmUKKysKKyAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgICBBUj0iZmFsc2UiCisgICBlbHNlCitAQCAtNjA1NCwxMiArNjMxMSwxMCBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIEFSPSRhY19jdF9BUgorICAgZmkKKy1lbHNlCistICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKKyAKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKyAKKyAKKyAKK0BAIC02MDcxLDYgKzYzMjYsNjQgQEAgdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfYXJfYXRfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisrCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisrICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKysKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorKworK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKK0BAIC02NDA1LDggKzY3MTgsOCBAQCBlc2FjCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKyAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisgCisgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisgb3B0X2NyPQorQEAgLTY0NDIsNiArNjc1NSw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAgIGVsc2UKKyAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisgCisgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgIHBpcGVfd29ya3M9bm8KK0BAIC02NDgzLDYgKzY3OTcsMTggQEAgX0xUX0VPRgorICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisrLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtNjQ5NCw3ICs2ODIwLDcgQEAgX0xUX0VPRgorIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworK0xUX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgICBjb25zdCBjaGFyICpuYW1lOworICAgdm9pZCAgICAgICAqYWRkcmVzczsKKyB9CitAQCAtNjUyMCw4ICs2ODQ2LDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyBfTFRfRU9GCisgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKyAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKy0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKyAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisgCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CitAQCAtNjUzMSw4ICs2ODU3LDggQEAgX0xUX0VPRgorICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgCSAgICBwaXBlX3dvcmtzPXllcworIAkgIGZpCistCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKy0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKysJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworIAllbHNlCisgCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisgCWZpCitAQCAtNjU2OSw2ICs2ODk1LDE4IEBAIGVsc2UKKyAkYXNfZWNobyAib2siID4mNjsgfQorIGZpCisgCisrIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCisraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tAXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2ZpCisrCisrCisrCisrCisrCisrCisgCisgCisgCitAQCAtNjU5MCw2ICs2OTI4LDQzIEBAIGZpCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnRvb2wtc3lzcm9vdCB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX2xpYnRvb2xfc3lzcm9vdDsKKytlbHNlCisrICB3aXRoX2xpYnRvb2xfc3lzcm9vdD1ubworK2ZpCisrCisrCisrbHRfc3lzcm9vdD0KKytjYXNlICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IGluICMoCisrIHllcykKKysgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKysgICBmaQorKyAgIDs7ICMoCisrIC8qKQorKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIDs7ICMoCisrIG5vfCcnKQorKyAgIDs7ICMoCisrICopCisrICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjUKKyskYXNfZWNobyAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNjsgfQorKyAgIGFzX2ZuX2Vycm9yICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQorKyAgIDs7CisrZXNhYworKworKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQorKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisrCisrCisrCisrCisrCisgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYnRvb2xfbG9jazsKK0BAIC02Nzk2LDYgKzcxNzEsMTIzIEBAIGVzYWMKKyAKKyBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyAKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKysgICAgTUFOSUZFU1RfVE9PTD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKysgIGZpCisrZWxzZQorKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1CisrICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisrICBmaQorKyAgcm0gLWYgY29uZnRlc3QqCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorKworKworKworKworKworIAorICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICByaGFwc29keSogfCBkYXJ3aW4qKQorQEAgLTczNTksNiArNzg1MSw4IEBAIF9MVF9FT0YKKyAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKKyAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQorKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1CisrICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC03NTU0LDcgKzgwNDgsOCBAQCBmaQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgCisgCisgCitAQCAtNzY0Myw3ICs4MTM4LDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC03OTQxLDggKzg0MzYsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTgxMDgsNiArODYwMSwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKysJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisrCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTgxNzAsNyArODY2OSw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKK0BAIC04MjI3LDEzICs4NzI2LDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CistCistCistCistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTgyOTQsNiArODc5NywxMSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTg2NDQsNyArOTE1Miw4IEBAIF9MVF9FT0YKKyAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCistICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTg2OTIsNyArOTIwMSw3IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisgCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgICB0aGVuCistCXRtcF9hZGRmbGFnPQorKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKyAJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisgCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorICAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorQEAgLTg3NDMsMTIgKzkyNTIsMTIgQEAgX0xUX0VPRgorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCistCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisrCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgCSAgZmkKKyAJICA7OworIAllc2FjCitAQCAtODc2Miw4ICs5MjcxLDggQEAgX0xUX0VPRgorIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTg3ODEsOCArOTI5MCw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC04ODI4LDggKzkzMzcsOCBAQCBfTFRfRU9GCisgCisgICAgICopCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtODk1OSw3ICs5NDY4LDEzIEBAIF9MVF9FT0YKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTg5NzIsMjIgKzk0ODcsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorQEAgLTg5OTksNyArOTUyMSwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJZWxzZQorIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTAxMiwyMiArOTU0MCwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTkwNzIsMjAgKzk2MDcsNjMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICBjbCopCisrCSMgTmF0aXZlIE1TVkMKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZWxzZQorKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBmaX4KKysJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgbGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKwkjIERvbid0IHVzZSByYW5saWIKKysJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisrCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisrCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC05MTQ2LDcgKzk3MjQsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KK0BAIC05MTU0LDcgKzk3MzIsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDkqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZmkKK0BAIC05MTcwLDcgKzk3NDgsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDEwKikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCitAQCAtOTE5NCwxMCArOTc3MiwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWlhNjQqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJKikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAllc2FjCisgICAgICAgZWxzZQorQEAgLTkyNzYsMjMgKzk4NTQsMzYgQEAgZmkKKyAKKyAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy1pbnQgZm9vKHZvaWQpIHt9CisraW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0KKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworK2Vsc2UKKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTkzNzcsNyArOTk2OCw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworQEAgLTkzOTYsOSArOTk4Nyw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC05OTc0LDggKzEwNTY1LDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTEwMDA4LDEzICsxMDYwMCw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMTAxMDYsNyArMTA3NTYsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMTA5NDYsMTAgKzExNTk2LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTEwNTIsMTAgKzExNzAyLDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTI5MjQsMTMgKzEzNTc0LDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTI5NDUsMTQgKzEzNjAyLDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTEyOTg1LDEyICsxMzY0NSwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xMzA0NSw4ICsxMzcwNSwxMyBAQCByZWxvYWRfZmxhZyBcCisgT0JKRFVNUCBcCisgZGVwbGlic19jaGVja19tZXRob2QgXAorIGZpbGVfbWFnaWNfY21kIFwKKytmaWxlX21hZ2ljX2dsb2IgXAorK3dhbnRfbm9jYXNlZ2xvYiBcCisrRExMVE9PTCBcCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorIEFSIFwKKyBBUl9GTEFHUyBcCisrYXJjaGl2ZXJfbGlzdF9zcGVjIFwKKyBTVFJJUCBcCisgUkFOTElCIFwKKyBDQyBcCitAQCAtMTMwNTYsMTIgKzEzNzIxLDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCisrbm1fZmlsZV9saXN0X3NwZWMgXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKKy1sdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCisrbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKKyBuZWVkX2xvY2tzIFwKKytNQU5JRkVTVF9UT09MIFwKKyBEU1lNVVRJTCBcCisgTk1FRElUIFwKKyBMSVBPIFwKK0BAIC0xMzA3Nyw3ICsxMzc0NCw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKKy1maXhfc3JjZmlsZV9wYXRoIFwKKyBleGNsdWRlX2V4cHN5bXMgXAorIGluY2x1ZGVfZXhwc3ltcyBcCisgZmlsZV9saXN0X3NwZWMgXAorQEAgLTEzMTEzLDYgKzEzNzc5LDcgQEAgbW9kdWxlX2NtZHMgXAorIG1vZHVsZV9leHBzeW1fY21kcyBcCisgZXhwb3J0X3N5bWJvbHNfY21kcyBcCisgcHJlbGlua19jbWRzIFwKKytwb3N0bGlua19jbWRzIFwKKyBwb3N0aW5zdGFsbF9jbWRzIFwKKyBwb3N0dW5pbnN0YWxsX2NtZHMgXAorIGZpbmlzaF9jbWRzIFwKK0BAIC0xMzg2OSw3ICsxNDUzNiw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKKyAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMTM5NzIsMTkgKzE0NjQwLDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAorICMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KKyBOTDJTUD0kbHRfbHRfTkwyU1AKKyAKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorKworKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorKworICMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCisgT0JKRFVNUD0kbHRfT0JKRFVNUAorIAorICMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgCistIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KKysjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisgZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisgCisrIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKytmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorKworKyMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisrCisrIyBETEwgY3JlYXRpb24gcHJvZ3JhbS4KKytETExUT09MPSRsdF9ETExUT09MCisrCisrIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKworICMgVGhlIGFyY2hpdmVyLgorIEFSPSRsdF9BUgorKworKyMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCisgQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisgCisrIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKysKKyAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorIFNUUklQPSRsdF9TVFJJUAorIAorQEAgLTE0MDE0LDYgKzE0NzA1LDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisgIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KKyBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKyAKKysjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KKytubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKysKKysjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKysKKyAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KKyBvYmpkaXI9JG9iamRpcgorIAorQEAgLTE0MDIzLDYgKzE0NzIwLDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKyAKKysjIE1hbmlmZXN0IHRvb2wuCisrTUFOSUZFU1RfVE9PTD0kbHRfTUFOSUZFU1RfVE9PTAorKworICMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KKyBEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKyAKK0BAIC0xNDEzNywxMiArMTQ4MzcsMTIgQEAgd2l0aF9nY2M9JEdDQworICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisgCistIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCistCisgIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCisgcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisrCisgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisgCitAQCAtMTQyMjksOSArMTQ5MjksNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworIAorLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KKy1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKyAKK0BAIC0xNDI0Nyw2ICsxNDk0NCw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KKyBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisgCitAQCAtMTQyNzksMjEwICsxNDk3OSwxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBjYXNlICR4c2lfc2hlbGwgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorLSMgY2FsbDoKKy0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKy0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KKy1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorLSAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorLX0KKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19CistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworLSAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorLX0KKy0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgY2FzZSAkezJ9IGluCistICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CistICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKy0gIGVzYWMKKy19CistCistIyBzZWQgc2NyaXB0czoKKy1teV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJworLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bXj1dKj0vLycKKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKy19CistCistX0xUX0VPRgorLWVzYWMKKy0KKy1jYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDErPVwkMiIKKy19CistX0xUX0VPRgorLSAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDE9XCQkMVwkMiIKKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgZXNhYworLQorLQorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKysKKysgIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCisrZnVuY19kaXJuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCisrZnVuY19iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAorK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCisrZnVuY19zdHJpcG5hbWUgKClcCisre1wKKytcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCisrXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorK2Z1bmNfbG8ybyAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKKytcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCisrZnVuY194Zm9ybSAoKVwKKyt7XAorKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCisrZnVuY19hcml0aCAoKVwKKyt7XAorKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorK2Z1bmNfbGVuICgpXAorK3tcCisrICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKytmaQorKworK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorK2Z1bmNfYXBwZW5kICgpXAorK3tcCisrICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKKyt7XAorK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCisrXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZWxzZQorKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisrCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KKytmaQorKworKworKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgCitkaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlIGIvbGQvY29uZmlndXJlCitpbmRleCA0NDA4YjBkLi4yZmJhZWJmIDEwMDc1NQorLS0tIGEvbGQvY29uZmlndXJlCisrKysgYi9sZC9jb25maWd1cmUKK0BAIC02NTQsOCArNjU0LDExIEBAIE9UT09MCisgTElQTworIE5NRURJVAorIERTWU1VVElMCisrTUFOSUZFU1RfVE9PTAorIFJBTkxJQgorK2FjX2N0X0FSCisgQVIKKytETExUT09MCisgT0JKRFVNUAorIExOX1MKKyBOTQorQEAgLTc3Niw2ICs3NzksNyBAQCBlbmFibGVfc3RhdGljCisgd2l0aF9waWMKKyBlbmFibGVfZmFzdF9pbnN0YWxsCisgd2l0aF9nbnVfbGQKKyt3aXRoX2xpYnRvb2xfc3lzcm9vdAorIGVuYWJsZV9saWJ0b29sX2xvY2sKKyBlbmFibGVfcGx1Z2lucworIGVuYWJsZV9sYXJnZWZpbGUKK0BAIC0xNDUzLDYgKzE0NTcsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKysgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgICAtLXdpdGgtbGliLXBhdGg9ZGlyMTpkaXIyLi4uICBzZXQgZGVmYXVsdCBMSUJfUEFUSAorICAgLS13aXRoLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgdXNyL2xpYiBldCBhbCB3aXRoaW4gRElSLgorICAgLS13aXRoLXpsaWIgICAgICAgICAgICAgaW5jbHVkZSB6bGliIHN1cHBvcnQgKGF1dG8veWVzL25vKSBkZWZhdWx0PWF1dG8KK0BAIC01NjQ1LDggKzU2NTEsOCBAQCBlc2FjCisgCisgCisgCistbWFjcm9fdmVyc2lvbj0nMi4yLjdhJworLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCisrbWFjcm9fdmVyc2lvbj0nMi40JworK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCisgCisgCisgCitAQCAtNTY4Niw3ICs1NjkyLDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQorICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgorLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgIEVDSE89J3ByaW50IC1yIC0tJworIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCitAQCAtNjM3Miw4ICs2Mzc4LDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKKyAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworIHhzaV9zaGVsbD1ubworICggX2x0X2R1bW15PSJhL2IvYyIKKy0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCistICAgICAgPSBjLGEvYiwsIFwKKysgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisrICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAgJiYgeHNpX3NoZWxsPXllcworQEAgLTY0MjIsNiArNjQyOCw4MCBAQCBlc2FjCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKi0qLWN5Z3dpbiogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKysgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjQzOCw2ICs2NTE4LDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCisgZXNhYworIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyBjYXNlICRob3N0X29zIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisrICAgIGZpCisrICAgIDs7CisgICBkYXJ3aW4qKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK0BAIC02NjA2LDcgKzY2OTEsOCBAQCBtaW5ndyogfCBwdzMyKikKKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICAgZmkKKyAgIDs7CitAQCAtNjc2MCw2ICs2ODQ2LDIxIEBAIGVzYWMKKyBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorKworK2ZpbGVfbWFnaWNfZ2xvYj0KKyt3YW50X25vY2FzZWdsb2I9bm8KKytpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgbWluZ3cqIHwgcHczMiopCisrICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisrICAgIGVsc2UKKysgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAorKyAgICBmaQorKyAgICA7OworKyAgZXNhYworK2ZpCisrCisgZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtNjc3NSw5ICs2ODc2LDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyAKKyAKKyAKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCisraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKysgICAgRExMVE9PTD0iZmFsc2UiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisrICBmaQorK2Vsc2UKKysgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworKworK2Nhc2UgJGhvc3Rfb3MgaW4KKytjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisrICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisrICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKysgICotLWlkZW50aWZ5LXN0cmljdCopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorKyAgICA7OworKyAgKikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisrICAgIDs7CisrICBlc2FjCisrICA7OworKyopCisrICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKysgIDs7CisrZXNhYworKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9Cisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrICBkbworKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02NzkzLDcgKzcwNDcsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisrICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02ODEzLDExICs3MDY3LDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKyAKKysgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhaworKyAgZG9uZQorIGZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICAgYWNfY3RfQVI9JEFSCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrZG8KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTY4MzMsNyArNzA5MSw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02ODUyLDYgKzcxMTAsMTAgQEAgZWxzZQorICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKysKKysgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKKytkb25lCisrCisgICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICAgQVI9ImZhbHNlIgorICAgZWxzZQorQEAgLTY4NjMsMTIgKzcxMjUsMTIgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworICAgICBBUj0kYWNfY3RfQVIKKyAgIGZpCistZWxzZQorLSAgQVI9IiRhY19jdl9wcm9nX0FSIgorIGZpCisgCistdGVzdCAteiAiJEFSIiAmJiBBUj1hcgorLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisrOiAke0FSPWFyfQorKzogJHtBUl9GTEFHUz1jcnV9CisrCisrCisgCisgCisgCitAQCAtNjg3OCw2ICs3MTQwLDYyIEBAIHRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2FyX2F0X2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9hcl9hdF9maWxlPW5vCisrICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisrCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisrCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKysgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisrCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KKysKKytpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisrICBhcmNoaXZlcl9saXN0X3NwZWM9CisrZWxzZQorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCisrZmkKKysKKysKKysKKysKKysKKyAKKyAKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCitAQCAtNzIxNCw4ICs3NTMyLDggQEAgZXNhYworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgCisgIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorIAorICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorIG9wdF9jcj0KK0BAIC03MjUxLDYgKzc1NjksNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisgICBlbHNlCisgICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgICBmaQorKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorIAorICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgICBwaXBlX3dvcmtzPW5vCitAQCAtNzI5Miw2ICs3NjExLDE4IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2Vsc2UKKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorKworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworICNlbmRpZgorQEAgLTczMDMsNyArNzYzNCw3IEBAIF9MVF9FT0YKKyAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCistY29uc3Qgc3RydWN0IHsKKytMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHZvaWQgICAgICAgKmFkZHJlc3M7CisgfQorQEAgLTczMjksOCArNzY2MCw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgX0xUX0VPRgorIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisgCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CistCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKy0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisgCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorQEAgLTczNDAsOCArNzY3MSw4IEBAIF9MVF9FT0YKKyAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorIAkgICAgcGlwZV93b3Jrcz15ZXMKKyAJICBmaQorLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCistCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisrCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKysJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKyAJZWxzZQorIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQorIAlmaQorQEAgLTczNzgsNiArNzcwOSwxOSBAQCBlbHNlCisgJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyBmaQorIAorKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgorK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytmaQorKworKworKworKworKworKworKworIAorIAorIAorQEAgLTczOTgsNiArNzc0Miw0MiBAQCBmaQorIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Qgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF9saWJ0b29sX3N5c3Jvb3Q7CisrZWxzZQorKyAgd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm8KKytmaQorKworKworK2x0X3N5c3Jvb3Q9CisrY2FzZSAke3dpdGhfbGlidG9vbF9zeXNyb290fSBpbiAjKAorKyB5ZXMpCisrICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisrICAgZmkKKysgICA7OyAjKAorKyAvKikKKysgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICA7OyAjKAorKyBub3wnJykKKysgICA7OyAjKAorKyAqKQorKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY1CisrJGFzX2VjaG8gIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjY7IH0KKysgICBhc19mbl9lcnJvciAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKKysgICA7OworK2VzYWMKKysKKysgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKKyskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQorKworKworKworKworIAorICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNzYwNSw2ICs3OTg1LDEyMyBAQCBlc2FjCisgCisgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisgCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCisrICAgIE1BTklGRVNUX1RPT0w9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCisrICBmaQorK2Vsc2UKKysgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0KgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorKyAgTUFOSUZFU1RfVE9PTD06CisrZmkKKysKKysKKysKKysKKysKKyAKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKK0BAIC04MTY4LDYgKzg2NjUsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisgaW50IG1haW4oKSB7IHJldHVybiAwO30KKyBfTFRfRU9GCitAQCAtODIzNiw2ICs4NzM1LDE2IEBAIGRvbmUKKyAKKyAKKyAKKytmdW5jX3N0cmlwbmFtZV9jbmYgKCkKKyt7CisrICBjYXNlICR7Mn0gaW4KKysgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CisrICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisrICBlc2FjCisrfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgorKworKworKworIAorIAorICMgU2V0IG9wdGlvbnMKK0BAIC04MzY0LDcgKzg4NzMsOCBAQCBmaQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgCisgCisgCitAQCAtODQ1Myw3ICs4OTYzLDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC04NzUxLDggKzkyNjEsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTg5MTgsNiArOTQyNiwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKysJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisrCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTg5ODAsNyArOTQ5NCw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKK0BAIC05MDM3LDEzICs5NTUxLDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CistCistCistCistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTkxMDQsNiArOTYyMiwxMSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTk0NTQsNyArOTk3Nyw4IEBAIF9MVF9FT0YKKyAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCistICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTk1MDIsNyArMTAwMjYsNyBAQCBfTFRfRU9GCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorIAkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICAgdGhlbgorLQl0bXBfYWRkZmxhZz0KKysJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisgCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKK0BAIC05NTUzLDEyICsxMDA3NywxMiBAQCBfTFRfRU9GCisgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKKy0JICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKysJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisgCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisrCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAJICBmaQorIAkgIDs7CisgCWVzYWMKK0BAIC05NTcyLDggKzEwMDk2LDggQEAgX0xUX0VPRgorIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTk1OTEsOCArMTAxMTUsOCBAQCBfTFRfRU9GCisgCisgX0xUX0VPRgorICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTYzOCw4ICsxMDE2Miw4IEBAIF9MVF9FT0YKKyAKKyAgICAgKikKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05NzY5LDcgKzEwMjkzLDEzIEBAIF9MVF9FT0YKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTk3ODIsMjIgKzEwMzEyLDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC05ODA5LDcgKzEwMzQ2LDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAllbHNlCisgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05ODIyLDIyICsxMDM2NSwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTk4ODEsMjEgKzEwNDMxLDY0IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCistICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKysgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgIGNsKikKKysJIyBOYXRpdmUgTVNWQworKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwlhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisrCWZpbGVfbGlzdF9zcGVjPSdAJworKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBlbHNlCisrCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGZpfgorKwkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICBsaW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisrCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCApPSd0cnVlJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwlleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrCSMgRG9uJ3QgdXNlIHJhbmxpYgorKwlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCisrCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKysJICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKysJICAgICouZXhlfCouRVhFKSA7OworKwkgICAgKikKKysJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorKwkgICAgICA7OworKwkgIGVzYWN+CisrCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKysJICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisrCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICBmaScKKysJOzsKKysgICAgICAqKQorKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKysJb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKysJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKysJb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwk7OworKyAgICAgIGVzYWMKKyAgICAgICA7OworIAorICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorQEAgLTk5NTYsNyArMTA1NDksNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KK0BAIC05OTY0LDcgKzEwNTU3LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtOTk4MCw3ICsxMDU3Myw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4MTAqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgZmkKK0BAIC0xMDAwNCwxMCArMTA1OTcsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJZXNhYworICAgICAgIGVsc2UKK0BAIC0xMDA4NiwyMyArMTA2NzksMzYgQEAgZmkKKyAKKyAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy1pbnQgZm9vKHZvaWQpIHt9CisraW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0KKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworK2Vsc2UKKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTEwMTg3LDcgKzEwNzkzLDcgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgIGVsc2UKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCitAQCAtMTAyMDYsOSArMTA4MTIsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJd2xhcmM9JyR7d2x9JworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgZWxzZQorIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKyAJKiJDb21waWxlcnMgNS4wIiopCitAQCAtMTA3ODQsOCArMTEzOTAsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTA4MTgsMTMgKzExNDI1LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xMDkxNiw3ICsxMTU4MSw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0xMTcxMiw3ICsxMjM3Nyw3IEBAIGVsc2UKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLSNsaW5lIDExNzE1ICJjb25maWd1cmUiCisrI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0xMTc1NiwxMCArMTI0MjEsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMTgxOCw3ICsxMjQ4Myw3IEBAIGVsc2UKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLSNsaW5lIDExODIxICJjb25maWd1cmUiCisrI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0xMTg2MiwxMCArMTI1MjcsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMjI1Nyw2ICsxMjkyMiw3IEBAICRSTSAtciBjb25mdGVzdCoKKyAKKyAgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgICBsdF9zYXZlX0NDPSRDQworKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICAgbHRfc2F2ZV9MRD0kTEQKKyAgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgIEdDQz0kR1hYCitAQCAtMTIyNzQsNiArMTI5NDAsNyBAQCAkUk0gLXIgY29uZnRlc3QqCisgICBmaQorICAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKKyAgIENDPSR7Q1hYLSJjKysifQorKyAgQ0ZMQUdTPSRDWFhGTEFHUworICAgY29tcGlsZXI9JENDCisgICBjb21waWxlcl9DWFg9JENDCisgICBmb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KK0BAIC0xMjQxMyw4ICsxMzA4MCw4IEBAIHdpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorICAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQorICAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgorICAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKy0gICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0gICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKyAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworQEAgLTEyNTU2LDcgKzEzMjIzLDEzIEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllCisgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nLWJlcm9rJworICAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKKyAgICAgICAgICAgIyBleGVjdXRhYmxlLgorLSAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrICAgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtMTI1NjksMjIgKzEzMjQyLDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF9fQ1hYCisrZmkKKyAKKyAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCitAQCAtMTI1OTcsNyArMTMyNzcsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgICAgIGVsc2UKKyAJICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF9fQ1hYK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC0xMjYxMCwyMiArMTMyOTYsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoX19DWFgKKytmaQorIAorIAkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTEyNjY4LDI5ICsxMzM2MSw3NSBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAgIDs7CisgCisgICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorLSAgICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIENYWCkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCistICAgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKy0gICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCistICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKy0gICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KKy0gICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcworLQorLSAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorLSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCistICAgICAgICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKy0gICAgICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKy0gICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCistCSAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CistICAgICAgICAgIGVsc2UKKy0JICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworLQkgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKy0gICAgICAgICAgZml+CistICAgICAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworLSAgICAgICAgZmkKKy0gICAgICAgIDs7CisrCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KKysJLGNsKiB8IG5vLGNsKikKKysJICAjIE5hdGl2ZSBNU1ZDCisrCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworKwkgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyAnCisrCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCisrCSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD15ZXMKKysJICBmaWxlX2xpc3Rfc3BlY19DWFg9J0AnCisrCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJICBsaWJleHQ9bGliCisrCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCSAgc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgICAkU0VEIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICAgIGVsc2UKKysJICAgICAgJFNFRCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgICBmaX4KKysJICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICAgIGxpbmtuYW1lcz0nCisrCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkgICMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCBDWFgpPSd0cnVlJworKwkgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcworKwkgICMgRG9uJ3QgdXNlIHJhbmxpYgorKwkgIG9sZF9wb3N0aW5zdGFsbF9jbWRzX0NYWD0nY2htb2QgNjQ0ICRvbGRsaWInCisrCSAgcG9zdGxpbmtfY21kc19DWFg9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKysJICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAgICouZXhlfCouRVhFKSA7OworKwkgICAgICAqKQorKwkJbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorKwkJbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJCTs7CisrCSAgICBlc2FjfgorKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRsdF9vdXRwdXRmaWxlIn4KKysJICAgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisrCSAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgICAgZmknCisrCSAgOzsKKysJKikKKysJICAjIGcrKworKwkgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBDWFgpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorKwkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKysJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAorKwkgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KKysJICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKKysKKysJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisrCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisrCSAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisrCSAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKysJICAgIGVsc2UKKysJICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICBmaX4KKysJICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKysJICBlbHNlCisrCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisrCSAgZmkKKysJICA7OworKwllc2FjCisrCTs7CisgICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAKKyAKK0BAIC0xMjc5Niw3ICsxMzUzNSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICAgICAgIDs7CisgICAgICAgICAgICopCisgICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKyAgICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworQEAgLTEyODY3LDEwICsxMzYwNiwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworIAkgICAgICAgICAgICA7OworIAkgICAgICAgICAgaWE2NCopCistCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKysJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKyAJICAgICAgICAgICAgOzsKKyAJICAgICAgICAgICopCistCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworKwkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgICAgICAgICAgIDs7CisgCSAgICAgICAgZXNhYworIAkgICAgICBmaQorQEAgLTEyOTExLDkgKzEzNjUwLDkgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgICAgICopCisgCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorIAkgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJICAgICAgZWxzZQorLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgLW8gJGxpYicKKysJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJworIAkgICAgICBmaQorIAkgICAgZmkKKyAJICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworQEAgLTEyOTgzLDIwICsxMzcyMiwyMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICAgICAgcHJlbGlua19jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgorLQkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAiJworKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKyAJICAgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CistCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgfgorKwkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGB+CisgCQkkUkFOTElCICRvbGRsaWInCisgCSAgICAgIGFyY2hpdmVfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorLQkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKysJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworIAkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CistCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworIAkgICAgICA7OworIAkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKKyAJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCitAQCAtMTMxOTEsNyArMTM5MzAsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJCSAgOzsKKyAJICAgICAgICAqKQorLQkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCQkgIDs7CisgCSAgICAgIGVzYWMKKyAKK0BAIC0xMzIzNyw3ICsxMzk3Niw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICAgIHNvbGFyaXMqKQorICAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICAgICAgQ0MqKQorKyAgICAgICAgICBDQyogfCBzdW5DQyopCisgCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcworIAkgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLXpkZWZzJworQEAgLTEzMjc4LDkgKzE0MDE3LDkgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAJICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0teiAke3dsfWRlZnMnCisgCSAgICAgIGlmICRDQyAtLXZlcnNpb24gfCAkR1JFUCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCistCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKysJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKyAJICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkJICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCQkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgCisgCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworIAkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorQEAgLTEzNDE1LDYgKzE0MTU0LDEzIEBAIHByaXZhdGU6CisgfTsKKyBfTFRfRU9GCisgCisrCisrX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUworK2Nhc2UgIiRDQyAkQ0ZMQUdTICIgaW4gIygKKysqXCAtZmx0bypcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLWx0byIgOzsKKysqXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7CisrZXNhYworKworIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEzNDI4LDcgKzE0MTc0LDcgQEAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCisgCisgICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCistICAgIGNhc2UgJHAgaW4KKysgICAgY2FzZSAke3ByZXZ9JHtwfSBpbgorIAorICAgICAtTCogfCAtUiogfCAtbCopCisgICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCitAQCAtMTM0MzcsMTMgKzE0MTgzLDIyIEBAIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAgICAgICAgICB0ZXN0ICRwID0gIi1SIjsgdGhlbgorIAkgcHJldj0kcAorIAkgY29udGludWUKKy0gICAgICAgZWxzZQorLQkgcHJldj0KKyAgICAgICAgZmkKKyAKKysgICAgICAgIyBFeHBhbmQgdGhlIHN5c3Jvb3QgdG8gZWFzZSBleHRyYWN0aW5nIHRoZSBkaXJlY3RvcmllcyBsYXRlci4KKysgICAgICAgaWYgdGVzdCAteiAiJHByZXYiOyB0aGVuCisrICAgICAgICAgY2FzZSAkcCBpbgorKyAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWVfY25mICctTCcgJycgIiRwIjsgcHJldj0tTDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1SJyAnJyAiJHAiOyBwcmV2PS1SOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgICAtbCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLWwnICcnICIkcCI7IHByZXY9LWw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICAgIGVzYWMKKysgICAgICAgZmkKKysgICAgICAgY2FzZSAkcCBpbgorKyAgICAgICA9KikgZnVuY19zdHJpcG5hbWVfY25mICc9JyAnJyAiJHAiOyBwPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICBlc2FjCisgICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCistCSBjYXNlICRwIGluCistCSAtTCogfCAtUiopCisrCSBjYXNlICR7cHJldn0gaW4KKysJIC1MIHwgLVIpCisgCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQorIAkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKKyAJICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCitAQCAtMTM0NjMsOCArMTQyMTgsMTAgQEAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgCSAgIHBvc3RkZXBzX0NYWD0iJHtwb3N0ZGVwc19DWFh9ICR7cHJldn0ke3B9IgorIAkgZmkKKyAgICAgICAgZmkKKysgICAgICAgcHJldj0KKyAgICAgICAgOzsKKyAKKysgICAgKi5sdG8uJG9iamV4dCkgOzsgIyBJZ25vcmUgR0NDIExUTyBvYmplY3RzCisgICAgICouJG9iamV4dCkKKyAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCisgICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorQEAgLTEzNTAwLDYgKzE0MjU3LDcgQEAgZWxzZQorIGZpCisgCisgJFJNIC1mIGNvbmZlc3QuJG9iamV4dAorK0NGTEFHUz0kX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1MKKyAKKyAjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgorIGNhc2UgJGhvc3Rfb3MgaW4KK0BAIC0xMzUzNSw3ICsxNDI5Myw3IEBAIGxpbnV4KikKKyAKKyBzb2xhcmlzKikKKyAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICBDQyopCisrICBDQyogfCBzdW5DQyopCisgICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworQEAgLTEzNjAwLDggKzE0MzU4LDYgQEAgZmkKKyBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorQEAgLTEzNzA2LDYgKzE0NDYyLDExIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCSAgOzsKKyAJZXNhYworIAk7OworKyAgICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisrCSMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKysJIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKysJbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctRERMTF9FWFBPUlQnCisrCTs7CisgICAgICAgZGd1eCopCisgCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisgCSAgZWMrKyopCitAQCAtMTM4NTgsNyArMTQ2MTksNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAk7OworICAgICAgIHNvbGFyaXMqKQorIAljYXNlICRjY19iYXNlbmFtZSBpbgorLQkgIENDKikKKysJICBDQyogfCBzdW5DQyopCisgCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworIAkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKK0BAIC0xMzkyMywxMCArMTQ2ODQsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjUKKy0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY2OyB9CistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWD0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNjsgfQorK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC0xMzk4NCw2ICsxNDc1Miw4IEBAIGZpCisgCisgCisgCisrCisrCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtMTQxNjEsNiArMTQ5MzEsNyBAQCBmaQorICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorIAorICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgIGFpeFs0LTldKikKKyAgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCitAQCAtMTQxNzUsMTUgKzE0OTQ2LDIwIEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllCisgICAgIDs7CisgICBwdzMyKikKKyAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9IiRsdGRsbF9jbWRzIgorLSAgOzsKKysgICAgOzsKKyAgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCistICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLzsvXi4qWyBdX19ubV9fL3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKy0gIDs7CisrICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgIGNsKikgOzsKKysgICAgKikKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKysgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisgICAqKQorICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworLSAgOzsKKysgICAgOzsKKyAgIGVzYWMKKy0gIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKKyAKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlic19DWFgiID4mNQorICRhc19lY2hvICIkbGRfc2hsaWJzX0NYWCIgPiY2OyB9CitAQCAtMTQ0NDYsOCArMTUyMjIsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTQ0NzksMTMgKzE1MjU2LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xNDU3Niw3ICsxNTQxMSw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0xNTAzNSw2ICsxNTg3MCw3IEBAIGZpCisgICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKyAKKyAgIENDPSRsdF9zYXZlX0NDCisrICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisgICBMRENYWD0kTEQKKyAgIExEPSRsdF9zYXZlX0xECisgICBHQ0M9JGx0X3NhdmVfR0NDCitAQCAtMTc4MDcsMTMgKzE4NjQzLDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTc4MjgsMTQgKzE4NjcxLDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE3ODY4LDEyICsxODcxNCwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNzkxMiw4ICsxODc1OCw4IEBAIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlCisgY29tcGlsZXJfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEdDQ19DWFg9J2AkRUNITyAiJEdDQ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE3OTQwLDEyICsxODc4NiwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFgiIHwgJFNFRCAiJGRlbGF5XworIGhhcmRjb2RlX2F1dG9tYXRpY19DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluaGVyaXRfcnBhdGhfQ1hYPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbGlua19hbGxfZGVwbGlic19DWFg9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoX0NYWD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zX0NYWD0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5jbHVkZV9leHBzeW1zX0NYWD0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcHJlbGlua19jbWRzX0NYWD0nYCRFQ0hPICIkcHJlbGlua19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kc19DWFg9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX2xpc3Rfc3BlY19DWFg9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaGFyZGNvZGVfYWN0aW9uX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTc5ODMsOCArMTg4MjksMTMgQEAgcmVsb2FkX2ZsYWcgXAorIE9CSkRVTVAgXAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKKyBmaWxlX21hZ2ljX2NtZCBcCisrZmlsZV9tYWdpY19nbG9iIFwKKyt3YW50X25vY2FzZWdsb2IgXAorK0RMTFRPT0wgXAorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKKyBBUiBcCisgQVJfRkxBR1MgXAorK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCisgU1RSSVAgXAorIFJBTkxJQiBcCisgQ0MgXAorQEAgLTE3OTk0LDEyICsxODg0NSwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAorK25tX2ZpbGVfbGlzdF9zcGVjIFwKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCistbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9waWMgXAorK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCisgbmVlZF9sb2NrcyBcCisrTUFOSUZFU1RfVE9PTCBcCisgRFNZTVVUSUwgXAorIE5NRURJVCBcCisgTElQTyBcCitAQCAtMTgwMTUsNyArMTg4NjgsNiBAQCBub191bmRlZmluZWRfZmxhZyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCisgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCistZml4X3NyY2ZpbGVfcGF0aCBcCisgZXhjbHVkZV9leHBzeW1zIFwKKyBpbmNsdWRlX2V4cHN5bXMgXAorIGZpbGVfbGlzdF9zcGVjIFwKK0BAIC0xODAzNyw4ICsxODg4OSw4IEBAIExEX0NYWCBcCisgcmVsb2FkX2ZsYWdfQ1hYIFwKKyBjb21waWxlcl9DWFggXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWCBcCistbHRfcHJvZ19jb21waWxlcl93bF9DWFggXAorIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCBcCisrbHRfcHJvZ19jb21waWxlcl93bF9DWFggXAorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWCBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIFwKKyBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYIFwKK0BAIC0xODA1MCw3ICsxODkwMiw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnX0NYWCBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFggXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWCBcCistZml4X3NyY2ZpbGVfcGF0aF9DWFggXAorIGV4Y2x1ZGVfZXhwc3ltc19DWFggXAorIGluY2x1ZGVfZXhwc3ltc19DWFggXAorIGZpbGVfbGlzdF9zcGVjX0NYWCBcCitAQCAtMTgwODQsNiArMTg5MzUsNyBAQCBtb2R1bGVfY21kcyBcCisgbW9kdWxlX2V4cHN5bV9jbWRzIFwKKyBleHBvcnRfc3ltYm9sc19jbWRzIFwKKyBwcmVsaW5rX2NtZHMgXAorK3Bvc3RsaW5rX2NtZHMgXAorIHBvc3RpbnN0YWxsX2NtZHMgXAorIHBvc3R1bmluc3RhbGxfY21kcyBcCisgZmluaXNoX2NtZHMgXAorQEAgLTE4MDk4LDcgKzE4OTUwLDggQEAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFggXAorIG1vZHVsZV9jbWRzX0NYWCBcCisgbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCBcCisgZXhwb3J0X3N5bWJvbHNfY21kc19DWFggXAorLXByZWxpbmtfY21kc19DWFg7IGRvCisrcHJlbGlua19jbWRzX0NYWCBcCisrcG9zdGxpbmtfY21kc19DWFg7IGRvCisgICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICAqW1xcXFxcXFxgXFwiXFxcJF0qKQorICAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCitAQCAtMTg4OTEsNyArMTk3NDQsOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8CisgIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisgIworICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysjICAgICAgICAgICAgICAgICBJbmMuCisgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyAjCisgIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorQEAgLTE4OTk0LDE5ICsxOTg0OCw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKKyAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCisgTkwyU1A9JGx0X2x0X05MMlNQCisgCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgorK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKysKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgorK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKysKKyAjIEFuIG9iamVjdCBzeW1ib2wgZHVtcGVyLgorIE9CSkRVTVA9JGx0X09CSkRVTVAKKyAKKyAjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorIAorLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyIuCisrIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorIGZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorIAorKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKKysKKysjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyt3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgorKworKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCisrRExMVE9PTD0kbHRfRExMVE9PTAorKworKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysKKyAjIFRoZSBhcmNoaXZlci4KKyBBUj0kbHRfQVIKKysKKysjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgorIEFSX0ZMQUdTPSRsdF9BUl9GTEFHUworIAorKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgorK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCisrCisgIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KKyBTVFJJUD0kbHRfU1RSSVAKKyAKK0BAIC0xOTAzNiw2ICsxOTkxMywxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCisgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisgCisrIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCisrbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCisrCisrIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KKytsdF9zeXNyb290PSRsdF9zeXNyb290CisrCisgIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCisgb2JqZGlyPSRvYmpkaXIKKyAKK0BAIC0xOTA0NSw2ICsxOTkyOCw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECisgIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KKyBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisgCisrIyBNYW5pZmVzdCB0b29sLgorK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKysKKyAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCisgRFNZTVVUSUw9JGx0X0RTWU1VVElMCisgCitAQCAtMTkxNTksMTIgKzIwMDQ1LDEyIEBAIHdpdGhfZ2NjPSRHQ0MKKyAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCisgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworIAorLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKy13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorLQorICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworIAorKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorKworICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KKyBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYworIAorQEAgLTE5MjUxLDkgKzIwMTM3LDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKyAKKy0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCistZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAorLQorICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCisgCitAQCAtMTkyNjksNiArMjAxNTIsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCisgcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKKyAKKysjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCisrcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcworKworICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworIAorQEAgLTE5MzE1LDIxMCArMjAyMDEsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CistICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgY2FzZSAkeHNpX3NoZWxsIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKy0jIGNhbGw6CistIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKy0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKy0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKy0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKy0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCistIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCistZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKy0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KKy19CistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CistICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKy0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CistICBlc2FjCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCistICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCistICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorLSAgZWxzZQorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCistICBmaQorLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKy19CistCistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsyfSBpbgorLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CistICBlc2FjCistfQorLQorLSMgc2VkIHNjcmlwdHM6CistbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKKy1teV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCistfQorLQorLV9MVF9FT0YKKy1lc2FjCistCistY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxKz1cJDIiCistfQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxPVwkJDFcJDIiCistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gIGVzYWMKKy0KKy0KKy0gIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKysgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKysgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisrCisrICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAorK2Z1bmNfZGlybmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAorK2Z1bmNfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKKytmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAorK2Z1bmNfc3RyaXBuYW1lICgpXAorK3tcCisrXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAorK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKKytmdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKKytmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKKytmdW5jX2xvMm8gKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCisrXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAorK2Z1bmNfeGZvcm0gKClcCisre1wKKysgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAorK2Z1bmNfYXJpdGggKClcCisre1wKKysgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKKytmdW5jX2xlbiAoKVwKKyt7XAorKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrZmkKKysKKytpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKKytmdW5jX2FwcGVuZCAoKVwKKyt7XAorKyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKKytmdW5jX2FwcGVuZF9xdW90ZWQgKClcCisre1wKKytcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAorK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2Vsc2UKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytmaQorKworK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9CisrZmkKKysKKysKKysgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgICBjaG1vZCAreCAiJG9maWxlIgorIAorQEAgLTE5NTQ2LDEyICsyMDM5MSwxMiBAQCB3aXRoX2djYz0kR0NDX0NYWAorICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWAorIAorLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKy13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9DWFgKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAorKworICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KKyBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFgKKyAKK0BAIC0xOTYzOCw5ICsyMDQ4Myw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGhfQ1hYCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlic19DWFgKKyAKKy0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCistZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aF9DWFgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgKKyAKK0BAIC0xOTY1Niw2ICsyMDQ5OCw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX0NYWAorICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCisgcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHNfQ1hYCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHNfQ1hYCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjX0NYWAorIAorZGlmZiAtLWdpdCBhL2xpYnRvb2wubTQgYi9saWJ0b29sLm00CitpbmRleCA3OTc0NjhmLi4wMmIxNWIzIDEwMDY0NAorLS0tIGEvbGlidG9vbC5tNAorKysrIGIvbGlidG9vbC5tNAorQEAgLTEsNyArMSw4IEBACisgIyBsaWJ0b29sLm00IC0gQ29uZmlndXJlIGxpYnRvb2wgZm9yIHRoZSBob3N0IHN5c3RlbS4gLSotQXV0b2NvbmYtKi0KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCitAQCAtMTAsNyArMTEsOCBAQAorIAorIG00X2RlZmluZShbX0xUX0NPUFlJTkddLCBbZG5sCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMzcsNyArMzksNyBAQCBtNF9kZWZpbmUoW19MVF9DT1BZSU5HXSwgW2RubAorICMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgXSkKKyAKKy0jIHNlcmlhbCA1NiBMVF9JTklUCisrIyBzZXJpYWwgNTcgTFRfSU5JVAorIAorIAorICMgTFRfUFJFUkVRKFZFUlNJT04pCitAQCAtOTIsNyArOTQsOCBAQCBfTFRfU0VUX09QVElPTlMoWyQwXSwgWyQxXSkKKyBMSUJUT09MX0RFUFM9IiRsdG1haW4iCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIEFDX1NVQlNUKExJQlRPT0wpZG5sCisgCisgX0xUX1NFVFVQCitAQCAtMTY2LDEwICsxNjksMTMgQEAgX0xUX0RFQ0woW10sIFtleGVleHRdLCBbMF0sIFtFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIildKWRubAorIGRubAorIG00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorIG00X3JlcXVpcmUoW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10pZG5sCisrbTRfcmVxdWlyZShbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdKWRubAorIG00X3JlcXVpcmUoW19MVF9DTURfUkVMT0FEXSlkbmwKKyBtNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQl0pZG5sCisgbTRfcmVxdWlyZShbX0xUX0NNRF9PTERfQVJDSElWRV0pZG5sCisgbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCisrbTRfcmVxdWlyZShbX0xUX1dJVEhfU1lTUk9PVF0pZG5sCisgCisgX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWworICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKK0BAIC0xOTksNyArMjA1LDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC02MzIsNyArNjM4LDcgQEAgbTRfaWZzZXQoW0FDX1BBQ0tBR0VfTkFNRV0sIFtBQ19QQUNLQUdFX05BTUUgXSljb25maWcubHRbXWRubAorIG00X2lmc2V0KFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbIEFDX1BBQ0tBR0VfVkVSU0lPTl0pCisgY29uZmlndXJlZCBieSAkWzBdLCBnZW5lcmF0ZWQgYnkgbTRfUEFDS0FHRV9TVFJJTkcuCisgCistQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK0NvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBUaGlzIGNvbmZpZy5sdCBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGdpdmVzIHVubGltaXRlZCBwZXJtaXNpb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKyAKK0BAIC03NDYsMTUgKzc1MiwxMiBAQCBfTFRfRU9GCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorIAorLSAgX0xUX1BST0dfWFNJX1NIRUxMRk5TCisrICBfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TCisgCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyBdLAorQEAgLTk4MCw2ICs5ODMsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC0xMDY5LDMwICsxMDc0LDQxIEBAIG00X2RlZnVuKFtfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFU10sCisgICBmaQorIF0pCisgCistIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFtUQUdOQU1FXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKKyAjIGZvciB0aGUgc3lzdGVtIGRlZmF1bHQgaGFyZGNvZGVkIGxpYnJhcnkgcGF0aC4gSW4gbW9zdCBjYXNlcywKKyAjIHRoaXMgaXMgL3Vzci9saWI6L2xpYiwgYnV0IHdoZW4gdGhlIE1QSSBjb21waWxlcnMgYXJlIHVzZWQKKyAjIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KKyAjIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIHVzZSB0aGUgZGVmYXVsdCBsaWJyYXJ5IHBhdGggYWNjb3JkaW5nCisgIyB0byB0aGUgYWl4IGxkIG1hbnVhbC4KKysjIFN0b3JlIHRoZSByZXN1bHRzIGZyb20gdGhlIGRpZmZlcmVudCBjb21waWxlcnMgZm9yIGVhY2ggVEFHTkFNRS4KKysjIEFsbG93IHRvIG92ZXJyaWRlIHRoZW0gZm9yIGFsbCB0YWdzIHRocm91Z2ggbHRfY3ZfYWl4X2xpYnBhdGguCisgbTRfZGVmdW4oW19MVF9TWVNfTU9EVUxFX1BBVEhfQUlYXSwKKyBbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKKy1BQ19MSU5LX0lGRUxTRShBQ19MQU5HX1BST0dSQU0sWworLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maV0sW10pCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisraWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgQUNfQ0FDSEVfVkFMKFtfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKV0sCisrICBbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sWworKyAgbHRfYWl4X2xpYnBhdGhfc2VkPSdbCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH1dJworKyAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkiOyB0aGVuCisrICAgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmldLFtdKQorKyAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pIjsgdGhlbgorKyAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrICBdKQorKyAgYWl4X2xpYnBhdGg9JF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pCisrZmkKKyBdKSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKyAKKyAKK0BAIC0xMTE3LDcgKzExMzMsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIAorIEFDX01TR19DSEVDS0lORyhbaG93IHRvIHByaW50IHN0cmluZ3NdKQorICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgorLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgIEVDSE89J3ByaW50IC1yIC0tJworIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCitAQCAtMTE2MSw2ICsxMTc3LDM5IEBAIF9MVF9ERUNMKFtdLCBbRUNIT10sIFsxXSwgW0FuIGVjaG8gcHJvZ3JhbSB0aGF0IHByb3RlY3RzIGJhY2tzbGFzaGVzXSkKKyBdKSMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKyAKKyAKKysjIF9MVF9XSVRIX1NZU1JPT1QKKysjIC0tLS0tLS0tLS0tLS0tLS0KKytBQ19ERUZVTihbX0xUX1dJVEhfU1lTUk9PVF0sCisrW0FDX01TR19DSEVDS0lORyhbZm9yIHN5c3Jvb3RdKQorK0FDX0FSR19XSVRIKFtsaWJ0b29sLXN5c3Jvb3RdLAorK1sgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3RbPURJUl0gU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKysgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS5dLAorK1tdLCBbd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm9dKQorKworK2RubCBsdF9zeXNyb290IHdpbGwgYWx3YXlzIGJlIHBhc3NlZCB1bnF1b3RlZC4gIFdlIHF1b3RlIGl0IGhlcmUKKytkbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICBBQ19NU0dfUkVTVUxUKFske3dpdGhfbGlidG9vbF9zeXNyb290fV0pCisrICAgQUNfTVNHX0VSUk9SKFtUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXSkKKysgICA7OworK2VzYWMKKysKKysgQUNfTVNHX1JFU1VMVChbJHtsdF9zeXNyb290Oi1ub31dKQorK19MVF9ERUNMKFtdLCBbbHRfc3lzcm9vdF0sIFswXSwgW1RoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgXWRubAorK1tkZXBlbmRlbnQgbGlicmFyaWVzLCBhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLl0pXSkKKysKKyAjIF9MVF9FTkFCTEVfTE9DSworICMgLS0tLS0tLS0tLS0tLS0tCisgbTRfZGVmdW4oW19MVF9FTkFCTEVfTE9DS10sCitAQCAtMTMyMCwxNCArMTM2OSw0NyBAQCBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyBdKSMgX0xUX0VOQUJMRV9MT0NLCisgCisgCisrIyBfTFRfUFJPR19BUgorKyMgLS0tLS0tLS0tLS0KKyttNF9kZWZ1bihbX0xUX1BST0dfQVJdLAorK1tBQ19DSEVDS19UT09MUyhBUiwgW2FyXSwgZmFsc2UpCisrOiAke0FSPWFyfQorKzogJHtBUl9GTEFHUz1jcnV9CisrX0xUX0RFQ0woW10sIFtBUl0sIFsxXSwgW1RoZSBhcmNoaXZlcl0pCisrX0xUX0RFQ0woW10sIFtBUl9GTEFHU10sIFsxXSwgW0ZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlXSkKKysKKytBQ19DQUNIRV9DSEVDSyhbZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnRdLCBbbHRfY3ZfYXJfYXRfZmlsZV0sCisrICBbbHRfY3ZfYXJfYXRfZmlsZT1ubworKyAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU1dLAorKyAgICAgW2VjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiZBU19NRVNTQUdFX0xPR19GRCcKKysgICAgICBBQ19UUllfRVZBTChbbHRfYXJfdHJ5XSkKKysgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKysJQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCisrCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisrICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorKyAgICAgXSkKKysgIF0pCisrCisraWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorK2Vsc2UKKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorK2ZpCisrX0xUX0RFQ0woW10sIFthcmNoaXZlcl9saXN0X3NwZWNdLCBbMV0sCisrICBbSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyXSkKKytdKSMgX0xUX1BST0dfQVIKKysKKysKKyAjIF9MVF9DTURfT0xEX0FSQ0hJVkUKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyBtNF9kZWZ1bihbX0xUX0NNRF9PTERfQVJDSElWRV0sCistW0FDX0NIRUNLX1RPT0woQVIsIGFyLCBmYWxzZSkKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKy1fTFRfREVDTChbXSwgW0FSXSwgWzFdLCBbVGhlIGFyY2hpdmVyXSkKKy1fTFRfREVDTChbXSwgW0FSX0ZMQUdTXSwgWzFdKQorK1tfTFRfUFJPR19BUgorIAorIEFDX0NIRUNLX1RPT0woU1RSSVAsIHN0cmlwLCA6KQorIHRlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorQEAgLTE2MjMsNyArMTcwNSw3IEBAIGVsc2UKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLVsjbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSIKKytbI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0xNjY3LDEwICsxNzQ5LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMjIxMCw4ICsyMjkyLDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTIyNDQsMTMgKzIzMjcsNzEgQEAgbTRfaWYoWyQxXSwgW10sWworICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbW2EtekEtWl1dXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKysgICAgICA7OworKyAgICBjeWd3aW4qKQorKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKysgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKysgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisrICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgWyRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbF07IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0yMzQyLDcgKzI0ODMsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMjk1MCw2ICszMDkxLDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCisgZXNhYworIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyBjYXNlICRob3N0X29zIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisrICAgIGZpCisrICAgIDs7CisgICBkYXJ3aW4qKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK0BAIC0zMDE2LDcgKzMxNjIsOCBAQCBtaW5ndyogfCBwdzMyKikKKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICAgZmkKKyAgIDs7CitAQCAtMzE2Nyw2ICszMzE0LDIxIEBAIHRwZiopCisgICA7OworIGVzYWMKKyBdKQorKworK2ZpbGVfbWFnaWNfZ2xvYj0KKyt3YW50X25vY2FzZWdsb2I9bm8KKytpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgbWluZ3cqIHwgcHczMiopCisrICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisrICAgIGVsc2UKKysgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tbXDFdXVwvW1tcMV1dXC9nOy9nImAKKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKytmaQorKworIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTMxNzQsNyArMzMzNiwxMSBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyBfTFRfREVDTChbXSwgW2RlcGxpYnNfY2hlY2tfbWV0aG9kXSwgWzFdLAorICAgICBbTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHNdKQorIF9MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19jbWRdLCBbMV0sCistICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIl0pCisrICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKKytfTFRfREVDTChbXSwgW2ZpbGVfbWFnaWNfZ2xvYl0sIFsxXSwKKysgICAgW0hvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKKytfTFRfREVDTChbXSwgW3dhbnRfbm9jYXNlZ2xvYl0sIFsxXSwKKysgICAgW0ZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCisgXSkjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKyAKKyAKK0BAIC0zMjc3LDYgKzM0NDMsNjcgQEAgZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorIGRubCBBQ19ERUZVTihbQU1fUFJPR19OTV0sIFtdKQorIGRubCBBQ19ERUZVTihbQUNfUFJPR19OTV0sIFtdKQorIAorKyMgX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUIKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBob3cgdG8gZGV0ZXJtaW5lIHRoZSBuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeQorKyMgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgbGluayBsaWJyYXJ5LgorKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKKyttNF9kZWZ1bihbX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUJdLAorK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCisrbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pCisrbTRfcmVxdWlyZShbX0xUX0RFQ0xfRExMVE9PTF0pCisrQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXNdLAorK2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kLAorK1tsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKysKKytjYXNlICRob3N0X29zIGluCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisrICAqLS1pZGVudGlmeS1zdHJpY3QqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworKyAgICA7OworKyAgZXNhYworKyAgOzsKKysqKQorKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisrICA7OworK2VzYWMKKytdKQorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKysKKytfTFRfREVDTChbXSwgW3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kXSwgWzFdLAorKyAgICBbQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllc10pCisrXSkjIF9MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCCisrCisrCisrIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBsb2NhdGUgdGhlIG1hbmlmZXN0IHRvb2wKKyttNF9kZWZ1bihbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0sCisrW0FDX0NIRUNLX1RPT0woTUFOSUZFU1RfVE9PTCwgbXQsIDopCisrdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKKytBQ19DQUNIRV9DSEVDSyhbaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sXSwgW2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbF0sCisrICBbbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiZBU19NRVNTQUdFX0xPR19GRAorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisrICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKysgIGZpCisrICBybSAtZiBjb25mdGVzdCpdKQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorK19MVF9ERUNMKFtdLCBbTUFOSUZFU1RfVE9PTF0sIFsxXSwgW01hbmlmZXN0IHRvb2xdKWRubAorK10pIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisrCisgCisgIyBMVF9MSUJfTQorICMgLS0tLS0tLS0KK0BAIC0zNDAzLDggKzM2MzAsOCBAQCBlc2FjCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKyAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwobGliW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKGxpYltbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisgCisgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisgb3B0X2NyPQorQEAgLTM0NDAsNiArMzY2Nyw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAgIGVsc2UKKyAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbCSBdXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbCSBdXVtbCSBdXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisgCisgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgIHBpcGVfd29ya3M9bm8KK0BAIC0zNDczLDYgKzM3MDEsMTggQEAgX0xUX0VPRgorICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtMzQ4NCw3ICszNzI0LDcgQEAgX0xUX0VPRgorIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworK0xUQCZ0QF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHZvaWQgICAgICAgKmFkZHJlc3M7CisgfQorQEAgLTM1MTAsMTUgKzM3NTAsMTUgQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyBfTFRfRU9GCisgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKyAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKy0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKyAJICBDRkxBR1M9IiRDRkxBR1MkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIgorIAkgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisgCWZpCitAQCAtMzU1MSw2ICszNzkxLDEzIEBAIGVsc2UKKyAgIEFDX01TR19SRVNVTFQob2spCisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW1tAXV1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytmaQorKworIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3BpcGVdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sIFsxXSwKKyAgICAgW1Rha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXNdKQorIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgWzFdLAorQEAgLTM1NjEsNiArMzgwOCw4IEBAIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwKKyBfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwKKyAgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLCBbMV0sCisgICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZF0pCisrX0xUX0RFQ0woW10sIFtubV9maWxlX2xpc3Rfc3BlY10sIFsxXSwKKysgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgJE5NXSkKKyBdKSAjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKyAKKyAKK0BAIC0zNTcyLDcgKzM4MjEsNiBAQCBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0KKyBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorIAorLUFDX01TR19DSEVDS0lORyhbZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUNdKQorIG00X2lmKFskMV0sIFtDWFhdLCBbCisgICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorQEAgLTM2NzgsNiArMzkyNiwxMiBAQCBtNF9pZihbJDFdLCBbQ1hYXSwgWworIAkgIDs7CisgCWVzYWMKKyAJOzsKKysgICAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorKwkjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisrCSMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisrCW00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKysJICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKysJOzsKKyAgICAgICBkZ3V4KikKKyAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAJICBlYysrKikKK0BAIC0zODMwLDcgKzQwODQsNyBAQCBtNF9pZihbJDFdLCBbQ1hYXSwgWworIAk7OworICAgICAgIHNvbGFyaXMqKQorIAljYXNlICRjY19iYXNlbmFtZSBpbgorLQkgIENDKikKKysJICBDQyogfCBzdW5DQyopCisgCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworIAkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKK0BAIC00MDUzLDYgKzQzMDcsMTIgQEAgbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctLXNoYXJlZCcKKyAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsLVdsLCwnCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKysJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTQxMTUsNyArNDM3NSw3IEBAIG00X2lmKFskMV0sIFtDWFhdLCBbCisgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJzs7CitAQCAtNDE3Miw5ICs0NDMyLDExIEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSkiCisgICAgIDs7CisgZXNhYworLUFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSldKQorLV9MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAorLQlbSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlcl0pCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSwKKysgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSldLAorKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKT0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSkKKytfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKQorIAorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCitAQCAtNDE5Myw2ICs0NDU1LDggQEAgZmkKKyBfTFRfVEFHREVDTChbcGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9waWNdLCBbMV0sCisgCVtBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHNdKQorIAorK19MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAorKwlbSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlcl0pCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtNDIxMyw2ICs0NDc3LDcgQEAgX0xUX1RBR0RFQ0woW2xpbmtfc3RhdGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9zdGF0aWNdLCBbMV0sCisgbTRfZGVmdW4oW19MVF9MSU5LRVJfU0hMSUJTXSwKKyBbQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCisgQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCisrbTRfcmVxdWlyZShbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0pZG5sCisgbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisgbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorIG00X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitAQCAtNDIyMSw2ICs0NDg2LDcgQEAgbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorIG00X2lmKFskMV0sIFtDWFhdLCBbCisgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCisgICBjYXNlICRob3N0X29zIGluCisgICBhaXhbWzQtOV1dKikKKyAgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCitAQCAtNDIzNSwxNSArNDUwMSwyMCBAQCBtNF9pZihbJDFdLCBbQ1hYXSwgWworICAgICA7OworICAgcHczMiopCisgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSIkbHRkbGxfY21kcyIKKy0gIDs7CisrICAgIDs7CisgICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorLSAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLzsvXi4qW1sgXV1fX25tX18vcy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCistICA7OworKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICBjbCopIDs7CisrICAgICopCisrICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87cy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCisrICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworICAgKikKKyAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKy0gIDs7CisrICAgIDs7CisgICBlc2FjCistICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KKyBdLCBbCisgICBydW5wYXRoX3Zhcj0KKyAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK0BAIC00NDExLDcgKzQ2ODIsOCBAQCBfTFRfRU9GCisgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLztzL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJ10KKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC00NDU5LDcgKzQ3MzEsNyBAQCBfTFRfRU9GCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorIAkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICAgdGhlbgorLQl0bXBfYWRkZmxhZz0KKysJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisgCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKK0BAIC00NTEwLDEyICs0NzgyLDEyIEBAIF9MVF9FT0YKKyAJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisgCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworIAkgIGZpCisgCSAgOzsKKyAJZXNhYworQEAgLTQ1MjksOCArNDgwMSw4IEBAIF9MVF9FT0YKKyAJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKyAJd2xhcmM9CisgICAgICAgZWxzZQorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTQ1NDgsOCArNDgyMCw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICBmaQorQEAgLTQ1OTUsOCArNDg2Nyw4IEBAIF9MVF9FT0YKKyAKKyAgICAgKikKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICBmaQorQEAgLTQ3MjYsNyArNDk5OCw3IEBAIF9MVF9FT0YKKyAJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCisgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0gICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisrICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgICBlbHNlCitAQCAtNDczNyw3ICs1MDA5LDcgQEAgX0xUX0VPRgorIAllbHNlCisgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisrCSBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorIAkgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKyAJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCitAQCAtNDc4MSwyMCArNTA1Myw2MyBAQCBfTFRfRU9GCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKy0gICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorLSAgICAgIGxpYmV4dD1saWIKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKy0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKKy0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCistICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCistICAgICAgX0xUX1RBR1ZBUihmaXhfc3JjZmlsZV9wYXRoLCAkMSk9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKysJX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKysJX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSdAJworKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKysJX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisrCV9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCV9MVF9UQUdWQVIob2xkX3Bvc3RpbnN0YWxsX2NtZHMsICQxKT0nY2htb2QgNjQ0ICRvbGRsaWInCisrCV9MVF9UQUdWQVIocG9zdGxpbmtfY21kcywgJDEpPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworKwlfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC00ODI4LDcgKzUxNDMsNyBAQCBfTFRfRU9GCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KK0BAIC00ODM2LDcgKzUxNTEsNyBAQCBfTFRfRU9GCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtNDg1Miw3ICs1MTY3LDcgQEAgX0xUX0VPRgorIAorICAgICBocHV4MTAqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgZmkKK0BAIC00ODc2LDEwICs1MTkxLDEwIEBAIF9MVF9FT0YKKyAJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJKikKKy0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWVzYWMKKyAgICAgICBlbHNlCitAQCAtNDkyNiwxNiArNTI0MSwzMSBAQCBfTFRfRU9GCisgCisgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIEFDX0xJTktfSUZFTFNFKGludCBmb28odm9pZCkge30sCistICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistICAgICAgICApCistICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorKwlBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbF0sCisrCSAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sXSwKKysJICBbc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorKwkgICBBQ19MSU5LX0lGRUxTRSgKKysJICAgICBbQUNfTEFOR19TT1VSQ0UoCisrCSAgICAgICAgW0FDX0xBTkdfQ0FTRShbQ10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAorKwkJCSAgICAgIFtDKytdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKysJCQkgICAgICBbRm9ydHJhbiA3N10sIFtbCisrICAgICAgc3Vicm91dGluZSBmb28KKysgICAgICBlbmRdXSwKKysJCQkgICAgICBbRm9ydHJhbl0sIFtbCisrICAgICAgc3Vicm91dGluZSBmb28KKysgICAgICBlbmRdXSldKV0sCisrCSAgICAgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXNdLAorKwkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm9dKQorKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyJdKQorKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisrICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorICAgICAgIGVsc2UKKyAJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKK0BAIC01MDIwLDcgKzUzNTAsNyBAQCBfTFRfRU9GCisgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKK0BAIC01MDM5LDkgKzUzNjksOSBAQCBfTFRfRU9GCisgICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC01MzEzLDggKzU2NDMsNiBAQCBfTFRfVEFHREVDTChbXSwgW2luaGVyaXRfcnBhdGhdLCBbMF0sCisgICAgIHRvIHJ1bnRpbWUgcGF0aCBsaXN0XSkKKyBfTFRfVEFHREVDTChbXSwgW2xpbmtfYWxsX2RlcGxpYnNdLCBbMF0sCisgICAgIFtXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXNdKQorLV9MVF9UQUdERUNMKFtdLCBbZml4X3NyY2ZpbGVfcGF0aF0sIFsxXSwKKy0gICAgW0ZpeCB0aGUgc2hlbGwgdmFyaWFibGUgJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlcl0pCisgX0xUX1RBR0RFQ0woW10sIFthbHdheXNfZXhwb3J0X3N5bWJvbHNdLCBbMF0sCisgICAgIFtTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWRdKQorIF9MVF9UQUdERUNMKFtdLCBbZXhwb3J0X3N5bWJvbHNfY21kc10sIFsyXSwKK0BAIC01MzI1LDYgKzU2NTMsOCBAQCBfTFRfVEFHREVDTChbXSwgW2luY2x1ZGVfZXhwc3ltc10sIFsxXSwKKyAgICAgW1N5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZF0pCisgX0xUX1RBR0RFQ0woW10sIFtwcmVsaW5rX2NtZHNdLCBbMl0sCisgICAgIFtDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlc10pCisrX0xUX1RBR0RFQ0woW10sIFtwb3N0bGlua19jbWRzXSwgWzJdLAorKyAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtc10pCisgX0xUX1RBR0RFQ0woW10sIFtmaWxlX2xpc3Rfc3BlY10sIFsxXSwKKyAgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlc10pCisgZG5sIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCitAQCAtNTQyNiw2ICs1NzU2LDcgQEAgQ0M9IiRsdF9zYXZlX0NDIgorIG00X2RlZnVuKFtfTFRfTEFOR19DWFhfQ09ORklHXSwKKyBbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisgbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorK200X3JlcXVpcmUoW19MVF9QQVRIX01BTklGRVNUX1RPT0xdKWRubAorIGlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCisgICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KK0BAIC01NDg3LDYgKzU4MTgsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAorICAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgIGx0X3NhdmVfQ0M9JENDCisrICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgICBsdF9zYXZlX0xEPSRMRAorICAgbHRfc2F2ZV9HQ0M9JEdDQworICAgR0NDPSRHWFgKK0BAIC01NTA0LDYgKzU4MzYsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAgZmkKKyAgIHRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCisgICBDQz0ke0NYWC0iYysrIn0KKysgIENGTEFHUz0kQ1hYRkxBR1MKKyAgIGNvbXBpbGVyPSRDQworICAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorQEAgLTU1MjUsOCArNTg1OCw4IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICAgICAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCisgICAgICAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCisgICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAKKyAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCitAQCAtNTY2Nyw3ICs2MDAwLDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCisgICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQorICAgICAgICAgICAjIGV4ZWN1dGFibGUuCistICAgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisrICAgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCisgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAorICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC01Njc5LDcgKzYwMTIsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAgICAgICAgICBlbHNlCisgCSAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisrCSAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorIAkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorIAkgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorQEAgLTU3MjEsMjkgKzYwNTQsNzUgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgIDs7CisgCisgICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorLSAgICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKy0gICAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworLSAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKy0gICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorLSAgICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworLSAgICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCistCistICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCistICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKy0gICAgICAgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorLSAgICAgICAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorLSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKy0JICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKy0gICAgICAgICAgZWxzZQorLQkgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CistCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworLSAgICAgICAgICBmaX4KKy0gICAgICAgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworLSAgICAgICAgZWxzZQorLSAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistICAgICAgICBmaQorLSAgICAgICAgOzsKKysJY2FzZSAkR1hYLCRjY19iYXNlbmFtZSBpbgorKwksY2wqIHwgbm8sY2wqKQorKwkgICMgTmF0aXZlIE1TVkMKKysJICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisrCSAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKysJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKysJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKysJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworKwkgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nQCcKKysJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwkgIGxpYmV4dD1saWIKKysJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJICBzaHJleHRfY21kcz0iLmRsbCIKKysJICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICAgICRTRUQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgICAgZWxzZQorKwkgICAgICAkU0VEIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICAgIGZpfgorKwkgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgICAgbGlua25hbWVzPScKKysJICAjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisrCSAgIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKysJICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKysJICAjIERvbid0IHVzZSByYW5saWIKKysJICBfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJworKwkgIF9MVF9UQUdWQVIocG9zdGxpbmtfY21kcywgJDEpPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICAgKikKKysJCWx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJCWx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCQk7OworKwkgICAgZXNhY34KKysJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkbHRfb3V0cHV0ZmlsZSJ+CisrCSAgICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICAgIGZpJworKwkgIDs7CisrCSopCisrCSAgIyBnKysKKysJICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorKwkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKysJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorKwkgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKysJICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKysKKysJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisrCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisrCSAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisrCSAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKysJICAgIGVsc2UKKysJICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICBmaX4KKysJICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKysJICBlbHNlCisrCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrCSAgZmkKKysJICA7OworKwllc2FjCisrCTs7CisgICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorIAk7OworQEAgLTU4MTgsNyArNjE5Nyw3IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgKikKKyAgICAgICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorLSAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrICAgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCitAQCAtNTg4OSwxMCArNjI2OCwxMCBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgICAgICAgICAgIDs7CisgCSAgICAgICAgICBpYTY0KikKKy0JICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworIAkgICAgICAgICAgICA7OworIAkgICAgICAgICAgKikKKy0JICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKyAJICAgICAgICAgICAgOzsKKyAJICAgICAgICBlc2FjCisgCSAgICAgIGZpCitAQCAtNTkzMyw5ICs2MzEyLDkgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgKikKKyAJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgCSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkgICAgICBlbHNlCistCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJworKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgIC1vICRsaWInCisgCSAgICAgIGZpCisgCSAgICBmaQorIAkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCitAQCAtNjAwNSwyMCArNjM4NCwyMCBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAkgICAgICBfTFRfVEFHVkFSKHByZWxpbmtfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorIAkJcm0gLXJmICR0cGxkaXJ+CisgCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvYmpzICRsaWJvYmpzICRjb21waWxlX2RlcGxpYnN+CistCQljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCInCisrCQljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAiJworIAkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2xkb2JqcyRvbGRfZGVwbGlic34KKy0JCSRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGB+CisrCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYH4KKyAJCSRSQU5MSUIgJG9sZGxpYicKKyAJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CistCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisgCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorIAkJcm0gLXJmICR0cGxkaXJ+CisgCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKy0JCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgCSAgICAgIDs7CisgCSAgICAqKSAjIFZlcnNpb24gNiBhbmQgYWJvdmUgdXNlIHdlYWsgc3ltYm9scworIAkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKK0BAIC02MjEzLDcgKzY1OTIsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkJICA7OworIAkgICAgICAgICopCistCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJCSAgOzsKKyAJICAgICAgZXNhYworIAorQEAgLTYyNTksNyArNjYzOCw3IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgCisgICAgICAgc29sYXJpcyopCisgICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgICAgICBDQyopCisrICAgICAgICAgIENDKiB8IHN1bkNDKikKKyAJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKyAgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCQxKT15ZXMKKyAJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKK0BAIC02MzAwLDkgKzY2NzksOSBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LXogJHt3bH1kZWZzJworIAkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgorLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisrCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisgCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JCSAgJENDIC1zaGFyZWQgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworIAorIAkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KK0BAIC02NDMxLDYgKzY4MTAsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisgCisgICBDQz0kbHRfc2F2ZV9DQworKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworICAgTERDWFg9JExECisgICBMRD0kbHRfc2F2ZV9MRAorICAgR0NDPSRsdF9zYXZlX0dDQworQEAgLTY0NDUsNiArNjgyNSwyOSBAQCBBQ19MQU5HX1BPUAorIF0pIyBfTFRfTEFOR19DWFhfQ09ORklHCisgCisgCisrIyBfTFRfRlVOQ19TVFJJUE5BTUVfQ05GCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBmdW5jX3N0cmlwbmFtZV9jbmYgcHJlZml4IHN1ZmZpeCBuYW1lCisrIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKysjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKysjCisrIyBUaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byB0aGUgKG5vbi1YU0kpIHZlcnNpb24gb2YgZnVuY19zdHJpcG5hbWUsCisrIyBleGNlcHQgdGhpcyBvbmUgY2FuIGJlIHVzZWQgYnkgbTQgY29kZSB0aGF0IG1heSBiZSBleGVjdXRlZCBieSBjb25maWd1cmUsCisrIyByYXRoZXIgdGhhbiB0aGUgbGlidG9vbCBzY3JpcHQuCisrbTRfZGVmdW4oW19MVF9GVU5DX1NUUklQTkFNRV9DTkZdLFtkbmwKKytBQ19SRVFVSVJFKFtfTFRfREVDTF9TRURdKQorK0FDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSkKKytmdW5jX3N0cmlwbmFtZV9jbmYgKCkKKyt7CisrICBjYXNlICR7Mn0gaW4KKysgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CisrICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisrICBlc2FjCisrfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgorK10pIyBfTFRfRlVOQ19TVFJJUE5BTUVfQ05GCisrCisgIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTKFtUQUdOQU1FXSkKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRmlndXJlIG91dCAiaGlkZGVuIiBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmcm9tIHZlcmJvc2UKK0BAIC02NDUzLDYgKzY4NTYsNyBAQCBBQ19MQU5HX1BPUAorICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorIG00X2RlZnVuKFtfTFRfU1lTX0hJRERFTl9MSUJERVBTXSwKKyBbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisrQUNfUkVRVUlSRShbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0pZG5sCisgIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0IGJlaW5nIGxpbmtlZDoKKyBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9CisgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0KK0BAIC02NTAzLDYgKzY5MDcsMTMgQEAgcHVibGljIGNsYXNzIGZvbyB7CisgfTsKKyBfTFRfRU9GCisgXSkKKysKKytfbHRfbGliZGVwc19zYXZlX0NGTEFHUz0kQ0ZMQUdTCisrY2FzZSAiJENDICRDRkxBR1MgIiBpbiAjKAorKypcIC1mbHRvKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tbHRvIiA7OworKypcIC1md2hvcHIqXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby13aG9wciIgOzsKKytlc2FjCisrCisgZG5sIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorIGRubCBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCisgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KK0BAIC02NTE0LDcgKzY5MjUsNyBAQCBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubworIAorICAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbworLSAgICBjYXNlICRwIGluCisrICAgIGNhc2UgJHtwcmV2fSR7cH0gaW4KKyAKKyAgICAgLUwqIHwgLVIqIHwgLWwqKQorICAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgorQEAgLTY1MjMsMTMgKzY5MzQsMjIgQEAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICAgICAgICAgdGVzdCAkcCA9ICItUiI7IHRoZW4KKyAJIHByZXY9JHAKKyAJIGNvbnRpbnVlCistICAgICAgIGVsc2UKKy0JIHByZXY9CisgICAgICAgIGZpCisgCisrICAgICAgICMgRXhwYW5kIHRoZSBzeXNyb290IHRvIGVhc2UgZXh0cmFjdGluZyB0aGUgZGlyZWN0b3JpZXMgbGF0ZXIuCisrICAgICAgIGlmIHRlc3QgLXogIiRwcmV2IjsgdGhlbgorKyAgICAgICAgIGNhc2UgJHAgaW4KKysgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLUwnICcnICIkcCI7IHByZXY9LUw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICAgIC1SKikgZnVuY19zdHJpcG5hbWVfY25mICctUicgJycgIiRwIjsgcHJldj0tUjsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgICAgLWwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1sJyAnJyAiJHAiOyBwcmV2PS1sOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgICBlc2FjCisrICAgICAgIGZpCisrICAgICAgIGNhc2UgJHAgaW4KKysgICAgICAgPSopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnPScgJycgIiRwIjsgcD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgZXNhYworICAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorLQkgY2FzZSAkcCBpbgorLQkgLUwqIHwgLVIqKQorKwkgY2FzZSAke3ByZXZ9IGluCisrCSAtTCB8IC1SKQorIAkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKKyAJICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCisgCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgorQEAgLTY1NDksOCArNjk2OSwxMCBAQCBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorIAkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7X0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpfSAke3ByZXZ9JHtwfSIKKyAJIGZpCisgICAgICAgIGZpCisrICAgICAgIHByZXY9CisgICAgICAgIDs7CisgCisrICAgICoubHRvLiRvYmpleHQpIDs7ICMgSWdub3JlIEdDQyBMVE8gb2JqZWN0cworICAgICAqLiRvYmpleHQpCisgICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorICAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KK0BAIC02NTg2LDYgKzcwMDgsNyBAQCBlbHNlCisgZmkKKyAKKyAkUk0gLWYgY29uZmVzdC4kb2JqZXh0CisrQ0ZMQUdTPSRfbHRfbGliZGVwc19zYXZlX0NGTEFHUworIAorICMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCisgbTRfaWYoWyQxXSwgW0NYWF0sCitAQCAtNjYyMiw3ICs3MDQ1LDcgQEAgbGludXgqKQorIAorIHNvbGFyaXMqKQorICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gIENDKikKKysgIENDKiB8IHN1bkNDKikKKyAgICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCisgICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCitAQCAtNjczNSw3ICs3MTU4LDkgQEAgaWYgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzOyB0aGVuCisgICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICAgbHRfc2F2ZV9DQz0iJENDIgorICAgbHRfc2F2ZV9HQ0M9JEdDQworKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICAgQ0M9JHtGNzctImY3NyJ9CisrICBDRkxBR1M9JEZGTEFHUworICAgY29tcGlsZXI9JENDCisgICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCitAQCAtNjc4OSw2ICs3MjE0LDcgQEAgaWYgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzOyB0aGVuCisgCisgICBHQ0M9JGx0X3NhdmVfR0NDCisgICBDQz0iJGx0X3NhdmVfQ0MiCisrICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKyBmaSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllcworIAorIEFDX0xBTkdfUE9QCitAQCAtNjg2NSw3ICs3MjkxLDkgQEAgaWYgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXM7IHRoZW4KKyAgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgICBsdF9zYXZlX0NDPSIkQ0MiCisgICBsdF9zYXZlX0dDQz0kR0NDCisrICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgICBDQz0ke0ZDLSJmOTUifQorKyAgQ0ZMQUdTPSRGQ0ZMQUdTCisgICBjb21waWxlcj0kQ0MKKyAgIEdDQz0kYWNfY3ZfZmNfY29tcGlsZXJfZ251CisgCitAQCAtNjkyMSw3ICs3MzQ5LDggQEAgaWYgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXM7IHRoZW4KKyAgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorIAorICAgR0NDPSRsdF9zYXZlX0dDQworLSAgQ0M9IiRsdF9zYXZlX0NDIgorKyAgQ0M9JGx0X3NhdmVfQ0MKKysgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKyBmaSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzCisgCisgQUNfTEFOR19QT1AKK0BAIC02OTU4LDEwICs3Mzg3LDEyIEBAIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKyAKKyAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorLWx0X3NhdmVfQ0M9IiRDQyIKKytsdF9zYXZlX0NDPSRDQworK2x0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyBsdF9zYXZlX0dDQz0kR0NDCisgR0NDPXllcworIENDPSR7R0NKLSJnY2oifQorK0NGTEFHUz0kR0NKRkxBR1MKKyBjb21waWxlcj0kQ0MKKyBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCitAQCAtNjk5Miw3ICs3NDIzLDggQEAgZmkKKyBBQ19MQU5HX1JFU1RPUkUKKyAKKyBHQ0M9JGx0X3NhdmVfR0NDCistQ0M9IiRsdF9zYXZlX0NDIgorK0NDPSRsdF9zYXZlX0NDCisrQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworIF0pIyBfTFRfTEFOR19HQ0pfQ09ORklHCisgCisgCitAQCAtNzAyNyw5ICs3NDU5LDExIEBAIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKyAKKyAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorIGx0X3NhdmVfQ0M9IiRDQyIKKytsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgbHRfc2F2ZV9HQ0M9JEdDQworIEdDQz0KKyBDQz0ke1JDLSJ3aW5kcmVzIn0KKytDRkxBR1M9CisgY29tcGlsZXI9JENDCisgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKK0BAIC03MDQyLDcgKzc0NzYsOCBAQCBmaQorIAorIEdDQz0kbHRfc2F2ZV9HQ0MKKyBBQ19MQU5HX1JFU1RPUkUKKy1DQz0iJGx0X3NhdmVfQ0MiCisrQ0M9JGx0X3NhdmVfQ0MKKytDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisgXSkjIF9MVF9MQU5HX1JDX0NPTkZJRworIAorIAorQEAgLTcxMDEsNiArNzUzNiwxNSBAQCBfTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMV0sIFtBbiBvYmplY3Qgc3ltYm9sIGR1bXBlcl0pCisgQUNfU1VCU1QoW09CSkRVTVBdKQorIF0pCisgCisrIyBfTFRfREVDTF9ETExUT09MCisrIyAtLS0tLS0tLS0tLS0tLS0tCisrIyBFbnN1cmUgRExMVE9PTCB2YXJpYWJsZSBpcyBzZXQuCisrbTRfZGVmdW4oW19MVF9ERUNMX0RMTFRPT0xdLAorK1tBQ19DSEVDS19UT09MKERMTFRPT0wsIGRsbHRvb2wsIGZhbHNlKQorK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKytfTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMV0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pCisrQUNfU1VCU1QoW0RMTFRPT0xdKQorK10pCisgCisgIyBfTFRfREVDTF9TRUQKKyAjIC0tLS0tLS0tLS0tLQorQEAgLTcxOTQsOCArNzYzOCw4IEBAIG00X2RlZnVuKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdLAorICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNzIzNCwyMDYgKzc2NzgsMTYyIEBAIF9MVF9ERUNMKFtOTDJTUF0sIFtsdF9OTDJTUF0sIFsxXSwgW3R1cm4gbmV3bGluZXMgaW50byBzcGFjZXNdKWRubAorIF0pIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKyAKKyAKKy0jIF9MVF9QUk9HX1hTSV9TSEVMTEZOUworLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBCb3VybmUgYW5kIFhTSSBjb21wYXRpYmxlIHZhcmlhbnRzIG9mIHNvbWUgdXNlZnVsIHNoZWxsIGZ1bmN0aW9ucy4KKy1tNF9kZWZ1bihbX0xUX1BST0dfWFNJX1NIRUxMRk5TXSwKKy1bY2FzZSAkeHNpX3NoZWxsIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKy0jIGNhbGw6CistIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKy0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKy0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKy0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKy0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCistIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCistZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKy0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KKy19CistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CistICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKy0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CistICBlc2FjCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJFsqXSApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKysjIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UgKEZVTkNOQU1FLCBSRVBMQUNFTUVOVC1CT0RZKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBJbiBgJGNmZ2ZpbGUnLCBsb29rIGZvciBmdW5jdGlvbiBGVU5DTkFNRSBkZWxpbWl0ZWQgYnkgYF5GVU5DTkFNRSAoKSQnIGFuZAorKyMgJ159IEZVTkNOQU1FICcsIGFuZCByZXBsYWNlIGl0cyBib2R5IHdpdGggUkVQTEFDRU1FTlQtQk9EWS4KKyttNF9kZWZ1bihbX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRV0sCisrW2RubCB7Cisrc2VkIC1lICcvXiQxICgpJC8sL159ICMgJDEgL2NcCisrJDEgKClcCisre1wKKyttNF9icGF0c3Vic3RzKFskMl0sIFskXSwgW1xcXSwgW15cKFsJIF1cKV0sIFtcXFwxXSkKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgJDEgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytdKQorIAorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIAorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CisrIyBfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBSZXBsYWNlIGV4aXN0aW5nIHBvcnRhYmxlIGltcGxlbWVudGF0aW9ucyBvZiBzZXZlcmFsIHNoZWxsIGZ1bmN0aW9ucyB3aXRoCisrIyBlcXVpdmFsZW50IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aG9zZSBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLi4KKyttNF9kZWZ1bihbX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOU10sCisrW2lmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfZGlybmFtZV0sIFtkbmwKKysgICAgY2FzZSAkezF9IGluCisrICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKysgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CisrICAgIGVzYWNdKQorKworKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19iYXNlbmFtZV0sIFtkbmwKKysgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99Il0pCisrCisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lXSwgW2RubAorKyAgICBjYXNlICR7MX0gaW4KKysgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworKyAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKysgICAgZXNhYworKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXSkKKyAKKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKy19CisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3N0cmlwbmFtZV0sIFtkbmwKKysgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorKyAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCisrICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CisrICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CisrICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XSkKKyAKKy1kbmwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZQorLWRubCBBIHBvcnRhYmxlIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiBpcyBhbHJlYWR5IGRlZmluZWQgaW4gZ2VuZXJhbC5tNHNoCistZG5sIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGl0IGhlcmUuCisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3NwbGl0X2xvbmdfb3B0XSwgW2RubAorKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn0KKysgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fV0pCisgCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsyfSBpbgorLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CistICBlc2FjCistfQorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zcGxpdF9zaG9ydF9vcHRdLCBbZG5sCisrICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99CisrICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1dKQorIAorLSMgc2VkIHNjcmlwdHM6CistbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW1tePV1dKlwpPS4qL1wxLztxJworLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bW149XV0qPS8vJworKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19sbzJvXSwgW2RubAorKyAgICBjYXNlICR7MX0gaW4KKysgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworKyAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworKyAgICBlc2FjXSkKKyAKKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKy19CisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3hmb3JtXSwgWyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXSkKKyAKKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCistfQorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcml0aF0sIFsgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICRbKl0gKSldKQorIAorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW1teLl1dKiQvLmxvLydgCistfQorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19sZW5dLCBbICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfV0pCisrZmkKKyAKKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkW0BdImAKKy19CisraWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcHBlbmRdLCBbICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJdKQorIAorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkWzFdIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCistfQorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcHBlbmRfcXVvdGVkXSwgW2RubAorKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IgorK2RubCBtNCBleHBhbnNpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgdGhlbiB0aGUgc2hlbGwgZXZhbCB0dXJucyB0aGF0IGludG8gXAorKyAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Il0pCisgCistX0xUX0VPRgorLWVzYWMKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFtbYS16QS1aX11dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2Vsc2UKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbW2EtekEtWl9dXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisgCistY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIEFDX01TR19XQVJOKFtVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlXSkKKytmaQorK10pCisgCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiRbMV0rPVwkWzJdIgorLX0KKy1fTFRfRU9GCisrIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUworKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIERldGVybWluZSB3aGljaCBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgYnkKKysjIGZ1bmNfdG9faG9zdF9maWxlIChhbmQsIGltcGxpY2l0bHksIGJ5IGZ1bmNfdG9faG9zdF9wYXRoKS4gIFRoZXNlIGFyZSBuZWVkZWQKKysjIGZvciBjZXJ0YWluIGNyb3NzLWNvbXBpbGUgY29uZmlndXJhdGlvbnMgYW5kIG5hdGl2ZSBtaW5ndy4KKyttNF9kZWZ1bihbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdLAorK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisrQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKKytBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdF0pCisrQUNfQ0FDSEVfVkFMKGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQsCisrW2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworICAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJFsxXT1cJCRbMV1cJFsyXSIKKy19CistCistX0xUX0VPRgorKyAgKi0qLWN5Z3dpbiogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgZXNhYworICAgICA7OworLSAgZXNhYworKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKysgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgIDs7CisrZXNhYworK10pCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorK0FDX01TR19SRVNVTFQoWyRsdF9jdl90b19ob3N0X2ZpbGVfY21kXSkKKytfTFRfREVDTChbdG9faG9zdF9maWxlX2NtZF0sIFtsdF9jdl90b19ob3N0X2ZpbGVfY21kXSwKKysgICAgICAgICBbMF0sIFtjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdF0pZG5sCisrCisrQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0XSkKKytBQ19DQUNIRV9WQUwobHRfY3ZfdG9fdG9vbF9maWxlX2NtZCwKKytbI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorK2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKytlc2FjCisgXSkKKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrQUNfTVNHX1JFU1VMVChbJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWRdKQorK19MVF9ERUNMKFt0b190b29sX2ZpbGVfY21kXSwgW2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWRdLAorKyAgICAgICAgIFswXSwgW2NvbnZlcnQgJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXRdKWRubAorK10pIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUworZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAoraW5kZXggOTUwM2VjOC4uNzBlODU2ZSAxMDA2NDQKKy0tLSBhL2x0bWFpbi5zaAorKysrIGIvbHRtYWluLnNoCitAQCAtMSwxMCArMSw5IEBACistIyBHZW5lcmF0ZWQgZnJvbSBsdG1haW4ubTRzaC4KKyAKKy0jIGxpYnRvb2wgKEdOVSBsaWJ0b29sIDEuMzEzNCAyMDA5LTExLTI5KSAyLjIuN2EKKysjIGxpYnRvb2wgKEdOVSBsaWJ0b29sKSAyLjQKKyAjIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisgCisgIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsCistIyAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCisgIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAKK0BAIC0zOCw3ICszNyw2IEBACisgIyAgIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworICMgICAgICAgLS1mZWF0dXJlcyAgICAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgIyAgICAgICAtLW1vZGU9TU9ERSAgICAgICAgICB1c2Ugb3BlcmF0aW9uIG1vZGUgTU9ERQorLSMgICAgICAgLS1uby1maW5pc2ggICAgICAgICAgbGV0IGluc3RhbGwgbW9kZSBhdm9pZCBmaW5pc2ggY29tbWFuZHMKKyAjICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMgIGRvbid0IHJlbW92ZSBkdXBsaWNhdGUgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKyAjICAgICAgIC0tcXVpZXQsIC0tc2lsZW50ICAgIGRvbid0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKKyAjICAgICAgIC0tbm8tcXVpZXQsIC0tbm8tc2lsZW50CitAQCAtNzEsMTcgKzY5LDE5IEBACisgIyAgICAgICAgIGNvbXBpbGVyOgkJJExUQ0MKKyAjICAgICAgICAgY29tcGlsZXIgZmxhZ3M6CQkkTFRDRkxBR1MKKyAjICAgICAgICAgbGlua2VyOgkJJExEIChnbnU/ICR3aXRoX2dudV9sZCkKKy0jICAgICAgICAgJHByb2duYW1lOgkoR05VIGxpYnRvb2wgMS4zMTM0IDIwMDktMTEtMjkpIDIuMi43YQorKyMgICAgICAgICAkcHJvZ25hbWU6CShHTlUgbGlidG9vbCkgMi40CisgIyAgICAgICAgIGF1dG9tYWtlOgkkYXV0b21ha2VfdmVyc2lvbgorICMgICAgICAgICBhdXRvY29uZjoJJGF1dG9jb25mX3ZlcnNpb24KKyAjCisgIyBSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uCisrIyBHTlUgbGlidG9vbCBob21lIHBhZ2U6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGlidG9vbC8+LgorKyMgR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uCisgCisgUFJPR1JBTT1saWJ0b29sCisgUEFDS0FHRT1saWJ0b29sCistVkVSU0lPTj0yLjIuN2EKKy1USU1FU1RBTVA9IiAxLjMxMzQgMjAwOS0xMS0yOSIKKy1wYWNrYWdlX3JldmlzaW9uPTEuMzEzNAorK1ZFUlNJT049Mi40CisrVElNRVNUQU1QPSIiCisrcGFja2FnZV9yZXZpc2lvbj0xLjMyOTMKKyAKKyAjIEJlIEJvdXJuZSBjb21wYXRpYmxlCisgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCitAQCAtMTA2LDkgKzEwNiw2IEBAIF9MVEVDSE9fRU9GJworIH0KKyAKKyAjIE5MUyBudWlzYW5jZXM6IFdlIHNhdmUgdGhlIG9sZCB2YWx1ZXMgdG8gcmVzdG9yZSBkdXJpbmcgZXhlY3V0ZSBtb2RlLgorLSMgT25seSBzZXQgTEFORyBhbmQgTENfQUxMIHRvIEMgaWYgYWxyZWFkeSBzZXQuCistIyBUaGVzZSBtdXN0IG5vdCBiZSBzZXQgdW5jb25kaXRpb25hbGx5IGJlY2F1c2Ugbm90IGFsbCBzeXN0ZW1zIHVuZGVyc3RhbmQKKy0jIGUuZy4gTEFORz1DIChub3RhYmx5IFNDTykuCisgbHRfdXNlcl9sb2NhbGU9CisgbHRfc2FmZV9sb2NhbGU9CisgZm9yIGx0X3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCitAQCAtMTIxLDE1ICsxMTgsMTMgQEAgZG8KKyAJICBsdF9zYWZlX2xvY2FsZT1cIiRsdF92YXI9QzsgXCRsdF9zYWZlX2xvY2FsZVwiCisgCWZpIgorIGRvbmUKKytMQ19BTEw9QworK0xBTkdVQUdFPUMKKytleHBvcnQgTEFOR1VBR0UgTENfQUxMCisgCisgJGx0X3Vuc2V0IENEUEFUSAorIAorIAorLQorLQorLQorLQorLQorICMgV29yayBhcm91bmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJWCA2LjQrLCBzaAorICMgaXMga3NoIGJ1dCB3aGVuIHRoZSBzaGVsbCBpcyBpbnZva2VkIGFzICJzaCIgYW5kIHRoZSBjdXJyZW50IHZhbHVlIG9mCisgIyB0aGUgX1hQRyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3QgZXF1YWwgdG8gMSAob25lKSwgdGhlIHNwZWNpYWwKK0BAIC0xNDAsNyArMTM1LDcgQEAgcHJvZ3BhdGg9IiQwIgorIAorIAorIDogJHtDUD0iY3AgLWYifQorLTogJHtFQ0hPPSRhc19lY2hvfQorK3Rlc3QgIiR7RUNITytzZXR9IiA9IHNldCB8fCBFQ0hPPSR7YXNfZWNoby0ncHJpbnRmICVzXG4nfQorIDogJHtFR1JFUD0iL2Jpbi9ncmVwIC1FIn0KKyA6ICR7RkdSRVA9Ii9iaW4vZ3JlcCAtRiJ9CisgOiAke0dSRVA9Ii9iaW4vZ3JlcCJ9CitAQCAtMTQ5LDcgKzE0NCw3IEBAIHByb2dwYXRoPSIkMCIKKyA6ICR7TUtESVI9Im1rZGlyIn0KKyA6ICR7TVY9Im12IC1mIn0KKyA6ICR7Uk09InJtIC1mIn0KKy06ICR7U0VEPSIvbW91bnQvZW5kb3Ivd2lsZGVuaHUvbG9jYWwteDg2XzY0L2Jpbi9zZWQifQorKzogJHtTRUQ9Ii9iaW4vc2VkIn0KKyA6ICR7U0hFTEw9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9In0KKyA6ICR7WHNlZD0iJFNFRCAtZSAxcy9eWC8vIn0KKyAKK0BAIC0xNjksNiArMTY0LDI3IEBAIElGUz0iIAkkbHRfbmwiCisgZGlybmFtZT0icywvW14vXSokLCwiCisgYmFzZW5hbWU9InMsXi4qLywsIgorIAorKyMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKysjIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKytmdW5jX2Rpcm5hbWUgKCkKKyt7CisrICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKysgICAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKysgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorKyAgICBlbHNlCisrICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorKyAgICBmaQorK30gIyBmdW5jX2Rpcm5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKytmdW5jX2Jhc2VuYW1lICgpCisreworKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKyt9ICMgZnVuY19iYXNlbmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKyAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisgIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorICMgY2FsbDoKK0BAIC0xODMsMTcgKzE5OSwzMSBAQCBiYXNlbmFtZT0icyxeLiovLCwiCisgIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCisgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorIHsKKy0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCistICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkZGlybmFtZSJgCistICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorLSAgZWxzZQorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCistICBmaQorLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgLWUgIiRiYXNlbmFtZSJgCistfQorKyAgICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkZGlybmFtZSJgCisrICAgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCisrICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKysgICAgZWxzZQorKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKysgICAgZmkKKysgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgLWUgIiRiYXNlbmFtZSJgCisrfSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKysjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisrIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisrIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorKyMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKytmdW5jX3N0cmlwbmFtZSAoKQorK3sKKysgICAgY2FzZSAkezJ9IGluCisrICAgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKysgICAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisrICAgIGVzYWMKKyt9ICMgZnVuY19zdHJpcG5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisgCistIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUuCisgCisgIyBUaGVzZSBTRUQgc2NyaXB0cyBwcmVzdXBwb3NlIGFuIGFic29sdXRlIHBhdGggd2l0aCBhIHRyYWlsaW5nIHNsYXNoLgorIHBhdGhjYXI9J3MsXi9cKFteL10qXCkuKiQsXDEsJworQEAgLTM3Niw2ICs0MDYsMTUgQEAgc2VkX3F1b3RlX3N1YnN0PSdzL1woW2AiJFxcXVwpL1xcXDEvZycKKyAjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KKyBkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCisgCisrIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgdHVybnMgYSBzdHJpbmcgaW50byBhIHJlZ2V4IG1hdGNoaW5nIGZvciB0aGUKKysjIHN0cmluZyBsaXRlcmFsbHkuCisrc2VkX21ha2VfbGl0ZXJhbF9yZWdleD0ncyxbXS5bXiRcXCpcL10sXFwmLGcnCisrCisrIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgY29udmVydHMgYSB3MzIgZmlsZSBuYW1lIG9yIHBhdGgKKysjIHdoaWNoIGNvbnRhaW5zIGZvcndhcmQgc2xhc2hlcywgaW50byBvbmUgdGhhdCBjb250YWlucworKyMgKGVzY2FwZWQpIGJhY2tzbGFzaGVzLiAgQSB2ZXJ5IG5haXZlIGltcGxlbWVudGF0aW9uLgorK2x0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9J3N8XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxcfFxcXFx8ZycKKysKKyAjIFJlLWBcJyBwYXJhbWV0ZXIgZXhwYW5zaW9ucyBpbiBvdXRwdXQgb2YgZG91YmxlX3F1b3RlX3N1YnN0IHRoYXQgd2VyZQorICMgYFwnLWVkIGluIGlucHV0IHRvIHRoZSBzYW1lLiAgSWYgYW4gb2RkIG51bWJlciBvZiBgXCcgcHJlY2VkZWQgYSAnJCcKKyAjIGluIGlucHV0IHRvIGRvdWJsZV9xdW90ZV9zdWJzdCwgdGhhdCAnJCcgd2FzIHByb3RlY3RlZCBmcm9tIGV4cGFuc2lvbi4KK0BAIC00MDQsNyArNDQzLDcgQEAgb3B0X3dhcm5pbmc9OgorICMgbmFtZSBpZiBpdCBoYXMgYmVlbiBzZXQgeWV0LgorIGZ1bmNfZWNobyAoKQorIHsKKy0gICAgJEVDSE8gIiRwcm9nbmFtZSR7bW9kZSs6IH0kbW9kZTogJCoiCisrICAgICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9JCoiCisgfQorIAorICMgZnVuY192ZXJib3NlIGFyZy4uLgorQEAgLTQzMCwxNCArNDY5LDE0IEBAIGZ1bmNfZWNob19hbGwgKCkKKyAjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCisgZnVuY19lcnJvciAoKQorIHsKKy0gICAgJEVDSE8gIiRwcm9nbmFtZSR7bW9kZSs6IH0kbW9kZTogIiR7MSsiJEAifSAxPiYyCisrICAgICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9IiR7MSsiJEAifSAxPiYyCisgfQorIAorICMgZnVuY193YXJuaW5nIGFyZy4uLgorICMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorIGZ1bmNfd2FybmluZyAoKQorIHsKKy0gICAgJG9wdF93YXJuaW5nICYmICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6IHdhcm5pbmc6ICIkezErIiRAIn0gMT4mMgorKyAgICAkb3B0X3dhcm5pbmcgJiYgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH13YXJuaW5nOiAiJHsxKyIkQCJ9IDE+JjIKKyAKKyAgICAgIyBiYXNoIGJ1ZyBhZ2FpbjoKKyAgICAgOgorQEAgLTY1NiwxOSArNjk1LDM1IEBAIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAoKQorICAgICBmaQorIH0KKyAKKy0KKy0KKysjIGZ1bmNfdHJfc2gKKysjIFR1cm4gJDEgaW50byBhIHN0cmluZyBzdWl0YWJsZSBmb3IgYSBzaGVsbCB2YXJpYWJsZSBuYW1lLgorKyMgUmVzdWx0IGlzIHN0b3JlZCBpbiAkZnVuY190cl9zaF9yZXN1bHQuICBBbGwgY2hhcmFjdGVycworKyMgbm90IGluIHRoZSBzZXQgYS16QS1aMC05XyBhcmUgcmVwbGFjZWQgd2l0aCAnXycuIEZ1cnRoZXIsCisrIyBpZiAkMSBiZWdpbnMgd2l0aCBhIGRpZ2l0LCBhICdfJyBpcyBwcmVwZW5kZWQgYXMgd2VsbC4KKytmdW5jX3RyX3NoICgpCisreworKyAgY2FzZSAkMSBpbgorKyAgWzAtOV0qIHwgKlshYS16QS1aMC05X10qKQorKyAgICBmdW5jX3RyX3NoX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgJ3MvXlwoWzAtOV1cKS9fXDEvOyBzL1teYS16QS1aMC05X10vXy9nJ2AKKysgICAgOzsKKysgICogKQorKyAgICBmdW5jX3RyX3NoX3Jlc3VsdD0kMQorKyAgICA7OworKyAgZXNhYworK30KKyAKKyAKKyAjIGZ1bmNfdmVyc2lvbgorICMgRWNobyB2ZXJzaW9uIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorIGZ1bmNfdmVyc2lvbiAoKQorIHsKKysgICAgJG9wdF9kZWJ1ZworKworICAgICAkU0VEIC1uICcvKEMpLyFiIGdvCisgCTptb3JlCisgCS9cLi8heworIAkgIE4KKy0JICBzL1xuIyAvLworKwkgIHMvXG4jIC8gLworIAkgIGIgbW9yZQorIAl9CisgCTpnbworQEAgLTY4NSw3ICs3NDAsOSBAQCBmdW5jX3ZlcnNpb24gKCkKKyAjIEVjaG8gc2hvcnQgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KKyBmdW5jX3VzYWdlICgpCisgeworLSAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvXiMgICotaC8geworKyAgICAkb3B0X2RlYnVnCisrCisrICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC9eIyAgKi4qLS1oZWxwLyB7CisgICAgICAgICBzL14jIC8vCisgCXMvXiMgKiQvLworIAlzL1wkcHJvZ25hbWUvJyRwcm9nbmFtZScvCitAQCAtNzAxLDcgKzc1OCwxMCBAQCBmdW5jX3VzYWdlICgpCisgIyB1bmxlc3MgJ25vZXhpdCcgaXMgcGFzc2VkIGFzIGFyZ3VtZW50LgorIGZ1bmNfaGVscCAoKQorIHsKKysgICAgJG9wdF9kZWJ1ZworKworICAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvIyBSZXBvcnQgYnVncyB0by8geworKwk6cHJpbnQKKyAgICAgICAgIHMvXiMgLy8KKyAJcy9eIyAqJC8vCisgCXMqXCRwcm9nbmFtZSonJHByb2duYW1lJyoKK0BAIC03MTQsNyArNzc0LDExIEBAIGZ1bmNfaGVscCAoKQorIAlzL1wkYXV0b21ha2VfdmVyc2lvbi8nImAoYXV0b21ha2UgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KKyAJcy9cJGF1dG9jb25mX3ZlcnNpb24vJyJgKGF1dG9jb25mIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCisgCXAKKy0gICAgIH0nIDwgIiRwcm9ncGF0aCIKKysJZAorKyAgICAgfQorKyAgICAgL14jIC4qIGhvbWUgcGFnZTovYiBwcmludAorKyAgICAgL14jIEdlbmVyYWwgaGVscCB1c2luZy9iIHByaW50CisrICAgICAnIDwgIiRwcm9ncGF0aCIKKyAgICAgcmV0PSQ/CisgICAgIGlmIHRlc3QgLXogIiQxIjsgdGhlbgorICAgICAgIGV4aXQgJHJldAorQEAgLTcyNiwxMiArNzkwLDM5IEBAIGZ1bmNfaGVscCAoKQorICMgZXhpdF9jbWQuCisgZnVuY19taXNzaW5nX2FyZyAoKQorIHsKKy0gICAgZnVuY19lcnJvciAibWlzc2luZyBhcmd1bWVudCBmb3IgJDEiCisrICAgICRvcHRfZGVidWcKKysKKysgICAgZnVuY19lcnJvciAibWlzc2luZyBhcmd1bWVudCBmb3IgJDEuIgorICAgICBleGl0X2NtZD1leGl0CisgfQorIAorLWV4aXRfY21kPToKKyAKKysjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IHNob3J0b3B0CisrIyBTZXQgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSBhbmQgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIHNoZWxsCisrIyB2YXJpYWJsZXMgYWZ0ZXIgc3BsaXR0aW5nIFNIT1JUT1BUIGFmdGVyIHRoZSAybmQgY2hhcmFjdGVyLgorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpCisreworKyAgICBteV9zZWRfc2hvcnRfb3B0PScxcy9eXCguLlwpLiokL1wxLztxJworKyAgICBteV9zZWRfc2hvcnRfcmVzdD0nMXMvXi4uXCguKlwpJC9cMS87cScKKysKKysgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfc2hvcnRfb3B0ImAKKysgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9zaG9ydF9yZXN0ImAKKyt9ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX3NwbGl0X2xvbmdfb3B0IGxvbmdvcHQKKysjIFNldCBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnIHNoZWxsCisrIyB2YXJpYWJsZXMgYWZ0ZXIgc3BsaXR0aW5nIExPTkdPUFQgYXQgdGhlIGA9JyBzaWduLgorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKCkKKyt7CisrICAgIG15X3NlZF9sb25nX29wdD0nMXMvXlwoLS1bXj1dKlwpPS4qL1wxLztxJworKyAgICBteV9zZWRfbG9uZ19hcmc9JzFzL14tLVtePV0qPS8vJworKworKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKysgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKyt9ICMgZnVuY19zcGxpdF9sb25nX29wdCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKytleGl0X2NtZD06CisgCisgCisgCitAQCAtNzQxLDI2ICs4MzIsNjQgQEAgbWFnaWM9IiUlJU1BR0lDIHZhcmlhYmxlJSUlIgorIG1hZ2ljX2V4ZT0iJSUlTUFHSUMgRVhFIHZhcmlhYmxlJSUlIgorIAorICMgR2xvYmFsIHZhcmlhYmxlcy4KKy0jICRtb2RlIGlzIHVuc2V0Cisgbm9ub3B0PQorLWV4ZWN1dGVfZGxmaWxlcz0KKyBwcmVzZXJ2ZV9hcmdzPQorIGxvMm89InMvXFwubG9cJC8uJHtvYmpleHR9LyIKKyBvMmxvPSJzL1xcLiR7b2JqZXh0fVwkLy5sby8iCisgZXh0cmFjdGVkX2FyY2hpdmVzPQorIGV4dHJhY3RlZF9zZXJpYWw9MAorIAorLW9wdF9kcnlfcnVuPWZhbHNlCistb3B0X2ZpbmlzaD06Cistb3B0X2R1cGxpY2F0ZV9kZXBzPWZhbHNlCistb3B0X3NpbGVudD1mYWxzZQorLW9wdF9kZWJ1Zz06CistCisgIyBJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBhbnkgb2YgdGhlIGFjdGlvbnMsIHRoZSBjb21tYW5kIGluIGl0CisgIyB3aWxsIGJlIGV4ZWNlZCBhdCB0aGUgZW5kLiAgVGhpcyBwcmV2ZW50cyBoZXJlLWRvY3VtZW50cyBmcm9tIGJlaW5nCisgIyBsZWZ0IG92ZXIgYnkgc2hlbGxzLgorIGV4ZWNfY21kPQorIAorKyMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCisrIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCisrZnVuY19hcHBlbmQgKCkKKyt7CisrICAgIGV2YWwgIiR7MX09XCQkezF9XCR7Mn0iCisrfSAjIGZ1bmNfYXBwZW5kIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKyMgZnVuY19hcHBlbmRfcXVvdGVkIHZhciB2YWx1ZQorKyMgUXVvdGUgVkFMVUUgYW5kIGFwcGVuZCB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUiwgc2VwYXJhdGVkCisrIyBieSBhIHNwYWNlLgorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKQorK3sKKysgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSIKKysgICAgZXZhbCAiJHsxfT1cJCR7MX1cXCBcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorK30gIyBmdW5jX2FwcGVuZF9xdW90ZWQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorK2Z1bmNfYXJpdGggKCkKKyt7CisrICAgIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIke0B9ImAKKyt9ICMgZnVuY19hcml0aCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKysjIGZ1bmNfbGVuIHN0cmluZworKyMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKytmdW5jX2xlbiAoKQorK3sKKysgICAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkezF9IiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCisrfSAjIGZ1bmNfbGVuIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworKyMgZnVuY19sbzJvIG9iamVjdAorK2Z1bmNfbG8ybyAoKQorK3sKKysgICAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorK30gIyBmdW5jX2xvMm8gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKytmdW5jX3hmb3JtICgpCisreworKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKKyt9ICMgZnVuY194Zm9ybSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKyAjIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiBhcmcuLi4KKyAjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CisgIyBhIGNvbmZpZ3VyYXRpb24gZmFpbHVyZSBoaW50LCBhbmQgZXhpdC4KK0BAIC04NTAsMTMwICs5NzksMjA0IEBAIGZ1bmNfZW5hYmxlX3RhZyAoKQorICAgZXNhYworIH0KKyAKKy0jIFBhcnNlIG9wdGlvbnMgb25jZSwgdGhvcm91Z2hseS4gIFRoaXMgY29tZXMgYXMgc29vbiBhcyBwb3NzaWJsZSBpbgorLSMgdGhlIHNjcmlwdCB0byBtYWtlIHRoaW5ncyBsaWtlIGBsaWJ0b29sIC0tdmVyc2lvbicgaGFwcGVuIHF1aWNrbHkuCisrIyBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKysjIEVuc3VyZSB0aGF0IHdlIGFyZSB1c2luZyBtNCBtYWNyb3MsIGFuZCBsaWJ0b29sIHNjcmlwdCBmcm9tIHRoZSBzYW1lCisrIyByZWxlYXNlIG9mIGxpYnRvb2wuCisrZnVuY19jaGVja192ZXJzaW9uX21hdGNoICgpCisgeworKyAgaWYgdGVzdCAiJHBhY2thZ2VfcmV2aXNpb24iICE9ICIkbWFjcm9fcmV2aXNpb24iOyB0aGVuCisrICAgIGlmIHRlc3QgIiRWRVJTSU9OIiAhPSAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisrICAgICAgaWYgdGVzdCAteiAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisrICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gYW4gb2xkZXIgcmVsZWFzZS4KKyskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCisrJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorK19MVF9FT0YKKysgICAgICBlbHNlCisrICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gJFBBQ0tBR0UgJG1hY3JvX3ZlcnNpb24uCisrJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgorKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KKytfTFRfRU9GCisrICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCisrJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24sCisrJHByb2duYW1lOiBidXQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gcmV2aXNpb24gJG1hY3JvX3JldmlzaW9uLgorKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24KKyskcHJvZ25hbWU6IG9mICRQQUNLQUdFICRWRVJTSU9OIGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCisrX0xUX0VPRgorKyAgICBmaQorIAorLSAgIyBTaG9ydGhhbmQgZm9yIC0tbW9kZT1mb28sIG9ubHkgdmFsaWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CistICBjYXNlICQxIGluCistICBjbGVhbnxjbGVhfGNsZXxjbCkKKy0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY2xlYW4gJHsxKyIkQCJ9OyBzaGlmdAorLSAgICA7OworLSAgY29tcGlsZXxjb21waWx8Y29tcGl8Y29tcHxjb218Y298YykKKy0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY29tcGlsZSAkezErIiRAIn07IHNoaWZ0CistICAgIDs7CistICBleGVjdXRlfGV4ZWN1dHxleGVjdXxleGVjfGV4ZXxleHxlKQorLSAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBleGVjdXRlICR7MSsiJEAifTsgc2hpZnQKKy0gICAgOzsKKy0gIGZpbmlzaHxmaW5pc3xmaW5pfGZpbnxmaXxmKQorLSAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorLSAgICA7OworLSAgaW5zdGFsbHxpbnN0YWx8aW5zdGF8aW5zdHxpbnN8aW58aSkKKy0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CistICAgIDs7CistICBsaW5rfGxpbnxsaXxsKQorLSAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBsaW5rICR7MSsiJEAifTsgc2hpZnQKKy0gICAgOzsKKy0gIHVuaW5zdGFsbHx1bmluc3RhbHx1bmluc3RhfHVuaW5zdHx1bmluc3x1bmlufHVuaXx1bnx1KQorLSAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorLSAgICA7OworLSAgZXNhYworKyAgICBleGl0ICRFWElUX01JU01BVENICisrICBmaQorK30KKysKKysKKysjIFNob3J0aGFuZCBmb3IgLS1tb2RlPWZvbywgb25seSB2YWxpZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKKytjYXNlICQxIGluCisrY2xlYW58Y2xlYXxjbGV8Y2wpCisrICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjbGVhbiAkezErIiRAIn07IHNoaWZ0CisrICA7OworK2NvbXBpbGV8Y29tcGlsfGNvbXBpfGNvbXB8Y29tfGNvfGMpCisrICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjb21waWxlICR7MSsiJEAifTsgc2hpZnQKKysgIDs7CisrZXhlY3V0ZXxleGVjdXR8ZXhlY3V8ZXhlY3xleGV8ZXh8ZSkKKysgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGV4ZWN1dGUgJHsxKyIkQCJ9OyBzaGlmdAorKyAgOzsKKytmaW5pc2h8ZmluaXN8ZmluaXxmaW58Zml8ZikKKysgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0CisrICA7OworK2luc3RhbGx8aW5zdGFsfGluc3RhfGluc3R8aW5zfGlufGkpCisrICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBpbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKysgIDs7CisrbGlua3xsaW58bGl8bCkKKysgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGxpbmsgJHsxKyIkQCJ9OyBzaGlmdAorKyAgOzsKKyt1bmluc3RhbGx8dW5pbnN0YWx8dW5pbnN0YXx1bmluc3R8dW5pbnN8dW5pbnx1bml8dW58dSkKKysgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIHVuaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisrICA7OworK2VzYWMKKyAKKy0gICMgUGFyc2Ugbm9uLW1vZGUgc3BlY2lmaWMgYXJndW1lbnRzOgorLSAgd2hpbGUgdGVzdCAiJCMiIC1ndCAwOyBkbworKworKworKyMgT3B0aW9uIGRlZmF1bHRzOgorK29wdF9kZWJ1Zz06Cisrb3B0X2RyeV9ydW49ZmFsc2UKKytvcHRfY29uZmlnPWZhbHNlCisrb3B0X3ByZXNlcnZlX2R1cF9kZXBzPWZhbHNlCisrb3B0X2ZlYXR1cmVzPWZhbHNlCisrb3B0X2ZpbmlzaD1mYWxzZQorK29wdF9oZWxwPWZhbHNlCisrb3B0X2hlbHBfYWxsPWZhbHNlCisrb3B0X3NpbGVudD06Cisrb3B0X3ZlcmJvc2U9OgorK29wdF9zaWxlbnQ9ZmFsc2UKKytvcHRfdmVyYm9zZT1mYWxzZQorKworKworKyMgUGFyc2Ugb3B0aW9ucyBvbmNlLCB0aG9yb3VnaGx5LiAgVGhpcyBjb21lcyBhcyBzb29uIGFzIHBvc3NpYmxlIGluIHRoZQorKyMgc2NyaXB0IHRvIG1ha2UgdGhpbmdzIGxpa2UgYC0tdmVyc2lvbicgaGFwcGVuIGFzIHF1aWNrbHkgYXMgd2UgY2FuLgorK3sKKysgICMgdGhpcyBqdXN0IGVhc2VzIGV4aXQgaGFuZGxpbmcKKysgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisgICAgIG9wdD0iJDEiCisgICAgIHNoaWZ0CistCisgICAgIGNhc2UgJG9wdCBpbgorLSAgICAgIC0tY29uZmlnKQkJZnVuY19jb25maWcJCQkJCTs7CistCistICAgICAgLS1kZWJ1ZykJCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCisrICAgICAgLS1kZWJ1Z3wteCkJb3B0X2RlYnVnPSdzZXQgLXgnCisgCQkJZnVuY19lY2hvICJlbmFibGluZyBzaGVsbCB0cmFjZSBtb2RlIgorLQkJCW9wdF9kZWJ1Zz0nc2V0IC14JworIAkJCSRvcHRfZGVidWcKKyAJCQk7OworLQorLSAgICAgIC1kbG9wZW4pCQl0ZXN0ICIkIyIgLWVxIDAgJiYgZnVuY19taXNzaW5nX2FyZyAiJG9wdCIgJiYgYnJlYWsKKy0JCQlleGVjdXRlX2RsZmlsZXM9IiRleGVjdXRlX2RsZmlsZXMgJDEiCistCQkJc2hpZnQKKysgICAgICAtLWRyeS1ydW58LS1kcnlydW58LW4pCisrCQkJb3B0X2RyeV9ydW49OgorIAkJCTs7CistCistICAgICAgLS1kcnktcnVuIHwgLW4pCW9wdF9kcnlfcnVuPToJCQkJCTs7CistICAgICAgLS1mZWF0dXJlcykgICAgICAgZnVuY19mZWF0dXJlcwkJCQkJOzsKKy0gICAgICAtLWZpbmlzaCkJCW1vZGU9ImZpbmlzaCIJCQkJCTs7CistICAgICAgLS1uby1maW5pc2gpCW9wdF9maW5pc2g9ZmFsc2UJCQkJOzsKKy0KKy0gICAgICAtLW1vZGUpCQl0ZXN0ICIkIyIgLWVxIDAgJiYgZnVuY19taXNzaW5nX2FyZyAiJG9wdCIgJiYgYnJlYWsKKy0JCQljYXNlICQxIGluCistCQkJICAjIFZhbGlkIG1vZGUgYXJndW1lbnRzOgorLQkJCSAgY2xlYW4pCTs7CistCQkJICBjb21waWxlKQk7OworLQkJCSAgZXhlY3V0ZSkJOzsKKy0JCQkgIGZpbmlzaCkJOzsKKy0JCQkgIGluc3RhbGwpCTs7CistCQkJICBsaW5rKQkJOzsKKy0JCQkgIHJlbGluaykJOzsKKy0JCQkgIHVuaW5zdGFsbCkJOzsKKy0KKy0JCQkgICMgQ2F0Y2ggYW55dGhpbmcgZWxzZSBhcyBhbiBlcnJvcgorLQkJCSAgKikgZnVuY19lcnJvciAiaW52YWxpZCBhcmd1bWVudCBmb3IgJG9wdCIKKy0JCQkgICAgIGV4aXRfY21kPWV4aXQKKy0JCQkgICAgIGJyZWFrCistCQkJICAgICA7OworLQkJICAgICAgICBlc2FjCistCistCQkJbW9kZT0iJDEiCisrICAgICAgLS1jb25maWcpCisrCQkJb3B0X2NvbmZpZz06CisrZnVuY19jb25maWcKKysJCQk7OworKyAgICAgIC0tZGxvcGVufC1kbG9wZW4pCisrCQkJb3B0YXJnPSIkMSIKKysJCQlvcHRfZGxvcGVuPSIke29wdF9kbG9wZW4rJG9wdF9kbG9wZW4KKyt9JG9wdGFyZyIKKyAJCQlzaGlmdAorIAkJCTs7CistCisgICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcykKKy0JCQlvcHRfZHVwbGljYXRlX2RlcHM9OgkJCQk7OworLQorLSAgICAgIC0tcXVpZXR8LS1zaWxlbnQpCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCistCQkJb3B0X3NpbGVudD06CistCQkJb3B0X3ZlcmJvc2U9ZmFsc2UKKysJCQlvcHRfcHJlc2VydmVfZHVwX2RlcHM9OgorIAkJCTs7CistCistICAgICAgLS1uby1xdWlldHwtLW5vLXNpbGVudCkKKy0JCQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorLQkJCW9wdF9zaWxlbnQ9ZmFsc2UKKysgICAgICAtLWZlYXR1cmVzKQorKwkJCW9wdF9mZWF0dXJlcz06CisrZnVuY19mZWF0dXJlcworIAkJCTs7CistCistICAgICAgLS12ZXJib3NlfCAtdikJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKysgICAgICAtLWZpbmlzaCkKKysJCQlvcHRfZmluaXNoPToKKytzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0CisrCQkJOzsKKysgICAgICAtLWhlbHApCisrCQkJb3B0X2hlbHA9OgorKwkJCTs7CisrICAgICAgLS1oZWxwLWFsbCkKKysJCQlvcHRfaGVscF9hbGw9OgorK29wdF9oZWxwPSc6IGhlbHAtYWxsJworKwkJCTs7CisrICAgICAgLS1tb2RlKQorKwkJCXRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJG9wdCAmJiBicmVhaworKwkJCW9wdGFyZz0iJDEiCisrCQkJb3B0X21vZGU9IiRvcHRhcmciCisrY2FzZSAkb3B0YXJnIGluCisrICAjIFZhbGlkIG1vZGUgYXJndW1lbnRzOgorKyAgY2xlYW58Y29tcGlsZXxleGVjdXRlfGZpbmlzaHxpbnN0YWxsfGxpbmt8cmVsaW5rfHVuaW5zdGFsbCkgOzsKKysKKysgICMgQ2F0Y2ggYW55dGhpbmcgZWxzZSBhcyBhbiBlcnJvcgorKyAgKikgZnVuY19lcnJvciAiaW52YWxpZCBhcmd1bWVudCBmb3IgJG9wdCIKKysgICAgIGV4aXRfY21kPWV4aXQKKysgICAgIGJyZWFrCisrICAgICA7OworK2VzYWMKKysJCQlzaGlmdAorKwkJCTs7CisrICAgICAgLS1uby1zaWxlbnR8LS1uby1xdWlldCkKKyAJCQlvcHRfc2lsZW50PWZhbHNlCistCQkJb3B0X3ZlcmJvc2U9OgorK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorIAkJCTs7CistCistICAgICAgLS1uby12ZXJib3NlKQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorKyAgICAgIC0tbm8tdmVyYm9zZSkKKyAJCQlvcHRfdmVyYm9zZT1mYWxzZQorK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorIAkJCTs7CistCistICAgICAgLS10YWcpCQl0ZXN0ICIkIyIgLWVxIDAgJiYgZnVuY19taXNzaW5nX2FyZyAiJG9wdCIgJiYgYnJlYWsKKy0JCQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0ICQxIgorLQkJCWZ1bmNfZW5hYmxlX3RhZyAiJDEiCSMgdGFnbmFtZSBpcyBzZXQgaGVyZQorKyAgICAgIC0tc2lsZW50fC0tcXVpZXQpCisrCQkJb3B0X3NpbGVudD06CisrZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisrICAgICAgICBvcHRfdmVyYm9zZT1mYWxzZQorKwkJCTs7CisrICAgICAgLS12ZXJib3NlfC12KQorKwkJCW9wdF92ZXJib3NlPToKKytmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKKytvcHRfc2lsZW50PWZhbHNlCisrCQkJOzsKKysgICAgICAtLXRhZykKKysJCQl0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRvcHQgJiYgYnJlYWsKKysJCQlvcHRhcmc9IiQxIgorKwkJCW9wdF90YWc9IiRvcHRhcmciCisrZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQgJG9wdGFyZyIKKytmdW5jX2VuYWJsZV90YWcgIiRvcHRhcmciCisgCQkJc2hpZnQKKyAJCQk7OworIAorKyAgICAgIC1cP3wtaCkJCWZ1bmNfdXNhZ2UJCQkJOzsKKysgICAgICAtLWhlbHApCQlmdW5jX2hlbHAJCQkJOzsKKysgICAgICAtLXZlcnNpb24pCWZ1bmNfdmVyc2lvbgkJCQk7OworKworICAgICAgICMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnM6CistICAgICAgLWRsb3Blbj0qfC0tbW9kZT0qfC0tdGFnPSopCistCQkJZnVuY19vcHRfc3BsaXQgIiRvcHQiCistCQkJc2V0IGR1bW15ICIkZnVuY19vcHRfc3BsaXRfb3B0IiAiJGZ1bmNfb3B0X3NwbGl0X2FyZyIgJHsxKyIkQCJ9CisrICAgICAgLS0qPSopCisrCQkJZnVuY19zcGxpdF9sb25nX29wdCAiJG9wdCIKKysJCQlzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWUiICIkZnVuY19zcGxpdF9sb25nX29wdF9hcmciICR7MSsiJEAifQorIAkJCXNoaWZ0CisgCQkJOzsKKyAKKy0gICAgICAtXD98LWgpCQlmdW5jX3VzYWdlCQkJCQk7OworLSAgICAgIC0taGVscCkJCW9wdF9oZWxwPToJCQkJCTs7CistICAgICAgLS1oZWxwLWFsbCkJb3B0X2hlbHA9JzogaGVscC1hbGwnCQkJCTs7CistICAgICAgLS12ZXJzaW9uKQlmdW5jX3ZlcnNpb24JCQkJCTs7CistCistICAgICAgLSopCQlmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXplZCBvcHRpb24gXGAkb3B0JyIJOzsKKy0KKy0gICAgICAqKQkJbm9ub3B0PSIkb3B0IgorLQkJCWJyZWFrCisrICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9uczoKKysgICAgICAtXD8qfC1oKnwtbip8LXYqKQorKwkJCWZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkb3B0IgorKwkJCXNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9CisrCQkJc2hpZnQKKyAJCQk7OworKworKyAgICAgIC0tKQkJYnJlYWsJCQkJCTs7CisrICAgICAgLSopCQlmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXplZCBvcHRpb24gXGAkb3B0JyIgOzsKKysgICAgICAqKQkJc2V0IGR1bW15ICIkb3B0IiAkezErIiRAIn07CXNoaWZ0OyBicmVhayAgOzsKKyAgICAgZXNhYworICAgZG9uZQorIAorKyAgIyBWYWxpZGF0ZSBvcHRpb25zOgorKworKyAgIyBzYXZlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQKKysgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorKyAgICBub25vcHQ9IiRvcHQiCisrICAgIHNoaWZ0CisrICBmaQorKworKyAgIyBwcmVzZXJ2ZSAtLWRlYnVnCisrICB0ZXN0ICIkb3B0X2RlYnVnIiA9IDogfHwgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiIC0tZGVidWciCisgCisgICBjYXNlICRob3N0IGluCisgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpwdzMyKiB8ICpjZWdjYyogfCAqc29sYXJpczIqICkKK0BAIC05ODEsODIgKzExODQsNDQgQEAgZnVuY19lbmFibGVfdGFnICgpCisgICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz06CisgICAgICAgOzsKKyAgICAgKikKKy0gICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPSRvcHRfZHVwbGljYXRlX2RlcHMKKysgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPSRvcHRfcHJlc2VydmVfZHVwX2RlcHMKKyAgICAgICA7OworICAgZXNhYworIAorLSAgIyBIYXZpbmcgd2FybmVkIGFib3V0IGFsbCBtaXMtc3BlY2lmaWVkIG9wdGlvbnMsIGJhaWwgb3V0IGlmCistICAjIGFueXRoaW5nIHdhcyB3cm9uZy4KKy0gICRleGl0X2NtZCAkRVhJVF9GQUlMVVJFCistfQorKyAgJG9wdF9oZWxwIHx8IHsKKysgICAgIyBTYW5pdHkgY2hlY2tzIGZpcnN0OgorKyAgICBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKyAKKy0jIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorLSMgRW5zdXJlIHRoYXQgd2UgYXJlIHVzaW5nIG00IG1hY3JvcywgYW5kIGxpYnRvb2wgc2NyaXB0IGZyb20gdGhlIHNhbWUKKy0jIHJlbGVhc2Ugb2YgbGlidG9vbC4KKy1mdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2ggKCkKKy17CistICBpZiB0ZXN0ICIkcGFja2FnZV9yZXZpc2lvbiIgIT0gIiRtYWNyb19yZXZpc2lvbiI7IHRoZW4KKy0gICAgaWYgdGVzdCAiJFZFUlNJT04iICE9ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKy0gICAgICBpZiB0ZXN0IC16ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKy0gICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCistJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQorLSRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSBhbiBvbGRlciByZWxlYXNlLgorLSRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKy0kcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCistX0xUX0VPRgorLSAgICAgIGVsc2UKKy0gICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCistJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQorLSRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSAkUEFDS0FHRSAkbWFjcm9fdmVyc2lvbi4KKy0kcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCistJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorLV9MVF9FT0YKKy0gICAgICBmaQorLSAgICBlbHNlCistICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKy0kcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbiwKKy0kcHJvZ25hbWU6IGJ1dCB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSByZXZpc2lvbiAkbWFjcm9fcmV2aXNpb24uCistJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbgorLSRwcm9nbmFtZTogb2YgJFBBQ0tBR0UgJFZFUlNJT04gYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KKy1fTFRfRU9GCisrICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgorKyAgICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKKyAgICAgZmkKKyAKKy0gICAgZXhpdCAkRVhJVF9NSVNNQVRDSAorLSAgZmkKKy19CistCisrICAgICMgRGFyd2luIHN1Y2tzCisrICAgIGV2YWwgc3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiCisgCistIyMgLS0tLS0tLS0tLS0gIyMKKy0jIyAgICBNYWluLiAgICAjIworLSMjIC0tLS0tLS0tLS0tICMjCistCistJG9wdF9oZWxwIHx8IHsKKy0gICMgU2FuaXR5IGNoZWNrcyBmaXJzdDoKKy0gIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorLQorLSAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgIT0geWVzOyB0aGVuCistICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKKy0gIGZpCisrICAgICMgT25seSBleGVjdXRlIG1vZGUgaXMgYWxsb3dlZCB0byBoYXZlIC1kbG9wZW4gZmxhZ3MuCisrICAgIGlmIHRlc3QgLW4gIiRvcHRfZGxvcGVuIiAmJiB0ZXN0ICIkb3B0X21vZGUiICE9IGV4ZWN1dGU7IHRoZW4KKysgICAgICBmdW5jX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgLWRsb3BlbiciCisrICAgICAgJEVDSE8gIiRoZWxwIiAxPiYyCisrICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisrICAgIGZpCisgCistICB0ZXN0IC16ICIkbW9kZSIgJiYgZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IHlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFLiIKKysgICAgIyBDaGFuZ2UgdGhlIGhlbHAgbWVzc2FnZSB0byBhIG1vZGUtc3BlY2lmaWMgb25lLgorKyAgICBnZW5lcmljX2hlbHA9IiRoZWxwIgorKyAgICBoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT0kb3B0X21vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKysgIH0KKyAKKyAKKy0gICMgRGFyd2luIHN1Y2tzCistICBldmFsICJzdGRfc2hyZXh0PVwiJHNocmV4dF9jbWRzXCIiCisrICAjIEJhaWwgaWYgdGhlIG9wdGlvbnMgd2VyZSBzY3Jld2VkCisrICAkZXhpdF9jbWQgJEVYSVRfRkFJTFVSRQorK30KKyAKKyAKKy0gICMgT25seSBleGVjdXRlIG1vZGUgaXMgYWxsb3dlZCB0byBoYXZlIC1kbG9wZW4gZmxhZ3MuCistICBpZiB0ZXN0IC1uICIkZXhlY3V0ZV9kbGZpbGVzIiAmJiB0ZXN0ICIkbW9kZSIgIT0gZXhlY3V0ZTsgdGhlbgorLSAgICBmdW5jX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgLWRsb3BlbiciCistICAgICRFQ0hPICIkaGVscCIgMT4mMgorLSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKy0gIGZpCisgCistICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCistICBnZW5lcmljX2hlbHA9IiRoZWxwIgorLSAgaGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCAtLW1vZGU9JG1vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKy19CisgCisrIyMgLS0tLS0tLS0tLS0gIyMKKysjIyAgICBNYWluLiAgICAjIworKyMjIC0tLS0tLS0tLS0tICMjCisgCisgIyBmdW5jX2xhbGliX3AgZmlsZQorICMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgYC5sYScgbGlicmFyeSBvciBgLmxvJyBvYmplY3QgZmlsZS4KK0BAIC0xMTIxLDEyICsxMjg2LDkgQEAgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICgpCisgIyB0ZW1wb3JhcnkgbHR3cmFwcGVyX3NjcmlwdC4KKyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICgpCisgeworLSAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0iIgorLSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiQxIjsgdGhlbgorLQlmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkMSIgIiIgIi4iCistCWZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLQlmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQvJG9iamRpci8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH1fbHRzaHdyYXBwZXIiCistICAgIGZpCisrICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiQxIiAiIiAiLiIKKysgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisrICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdC8kb2JqZGlyLyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fV9sdHNod3JhcHBlciIKKyB9CisgCisgIyBmdW5jX2x0d3JhcHBlcl9wIGZpbGUKK0BAIC0xMTQ5LDcgKzEzMTEsNyBAQCBmdW5jX2V4ZWN1dGVfY21kcyAoKQorICAgICBzYXZlX2lmcz0kSUZTOyBJRlM9J34nCisgICAgIGZvciBjbWQgaW4gJDE7IGRvCisgICAgICAgSUZTPSRzYXZlX2lmcworLSAgICAgIGV2YWwgImNtZD1cIiRjbWRcIiIKKysgICAgICBldmFsIGNtZD1cIiRjbWRcIgorICAgICAgIGZ1bmNfc2hvd19ldmFsICIkY21kIiAiJHsyLTp9IgorICAgICBkb25lCisgICAgIElGUz0kc2F2ZV9pZnMKK0BAIC0xMTcyLDYgKzEzMzQsMzcgQEAgZnVuY19zb3VyY2UgKCkKKyB9CisgCisgCisrIyBmdW5jX3Jlc29sdmVfc3lzcm9vdCBQQVRICisrIyBSZXBsYWNlIGEgbGVhZGluZyA9IGluIFBBVEggd2l0aCBhIHN5c3Jvb3QuICBTdG9yZSB0aGUgcmVzdWx0IGludG8KKysjIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorK2Z1bmNfcmVzb2x2ZV9zeXNyb290ICgpCisreworKyAgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0PSQxCisrICBjYXNlICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgaW4KKysgID0qKQorKyAgICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisrICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysgICAgOzsKKysgIGVzYWMKKyt9CisrCisrIyBmdW5jX3JlcGxhY2Vfc3lzcm9vdCBQQVRICisrIyBJZiBQQVRIIGJlZ2lucyB3aXRoIHRoZSBzeXNyb290LCByZXBsYWNlIGl0IHdpdGggPSBhbmQKKysjIHN0b3JlIHRoZSByZXN1bHQgaW50byBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQuCisrZnVuY19yZXBsYWNlX3N5c3Jvb3QgKCkKKyt7CisrICBjYXNlICIkbHRfc3lzcm9vdDokMSIgaW4KKysgID8qOiIkbHRfc3lzcm9vdCIqKQorKyAgICBmdW5jX3N0cmlwbmFtZSAiJGx0X3N5c3Jvb3QiICcnICIkMSIKKysgICAgZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0PSI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysgICAgOzsKKysgICopCisrICAgICMgSW5jbHVkaW5nIG5vIHN5c3Jvb3QuCisrICAgIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdD0kMQorKyAgICA7OworKyAgZXNhYworK30KKysKKyAjIGZ1bmNfaW5mZXJfdGFnIGFyZworICMgSW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIGlmIGFueSBhcmUgYXZhaWxhYmxlIGFuZAorICMgaWYgb25lIHdhc24ndCBjaG9zZW4gdmlhIHRoZSAiLS10YWciIGNvbW1hbmQgbGluZSBvcHRpb24uCitAQCAtMTE4NCw4ICsxMzc3LDcgQEAgZnVuY19pbmZlcl90YWcgKCkKKyAgICAgaWYgdGVzdCAtbiAiJGF2YWlsYWJsZV90YWdzIiAmJiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKyAgICAgICBDQ19xdW90ZWQ9CisgICAgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCistICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorLQlDQ19xdW90ZWQ9IiRDQ19xdW90ZWQgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwlmdW5jX2FwcGVuZF9xdW90ZWQgQ0NfcXVvdGVkICIkYXJnIgorICAgICAgIGRvbmUKKyAgICAgICBDQ19leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NgCisgICAgICAgQ0NfcXVvdGVkX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ19xdW90ZWRgCitAQCAtMTIwNCw4ICsxMzk2LDcgQEAgZnVuY19pbmZlcl90YWcgKCkKKyAJICAgIENDX3F1b3RlZD0KKyAJICAgIGZvciBhcmcgaW4gJENDOyBkbworIAkgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgb3RoZXIgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCistCSAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCistCSAgICAgIENDX3F1b3RlZD0iJENDX3F1b3RlZCAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBDQ19xdW90ZWQgIiRhcmciCisgCSAgICBkb25lCisgCSAgICBDQ19leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NgCisgCSAgICBDQ19xdW90ZWRfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDX3F1b3RlZGAKK0BAIC0xMjc0LDYgKzE0NjUsNDg2IEBAIEVPRgorICAgICB9CisgfQorIAorKworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyBGSUxFIE5BTUUgQU5EIFBBVEggQ09OVkVSU0lPTiBIRUxQRVIgRlVOQ1RJT05TICMKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKworKyMgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiBBUkcKKysjIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aGVuICRidWlsZCBpcyAqbml4LAorKyMgYW5kICRob3N0IGlzIG1pbmd3LCBjeWd3aW4sIG9yIHNvbWUgb3RoZXIgdzMyIGVudmlyb25tZW50LiBSZWxpZXMgb24gYQorKyMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgd2luZSBlbnZpcm9ubWVudCBhdmFpbGFibGUsIHdpdGggdGhlIHdpbmVwYXRoIHByb2dyYW0KKysjIGluICRidWlsZCdzICRQQVRILgorKyMKKysjIEFSRyBpcyB0aGUgJGJ1aWxkIGZpbGUgbmFtZSB0byBiZSBjb252ZXJ0ZWQgdG8gdzMyIGZvcm1hdC4KKysjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0LCBhbmQgd2lsbAorKyMgYmUgZW1wdHkgb24gZXJyb3IgKG9yIHdoZW4gQVJHIGlzIGVtcHR5KQorK2Z1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBVbmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2VzIG5vdCBleGl0IHdpdGggYSBub24temVybyBlcnJvciBjb2RlLCBzbyB3ZQorKyAgICAjIGFyZSBmb3JjZWQgdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG9mIHN0ZG91dC4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZQorKyAgICAjIGNvbW1hbmQgaXMgbm90IGZvdW5kLCB0aGUgc2hlbGwgd2lsbCBzZXQgYW4gZXhpdCBjb2RlIG9mIDEyNyBhbmQgcHJpbnQKKysgICAgIyAqYW4gZXJyb3IgbWVzc2FnZSogdG8gc3Rkb3V0LiBTbyB3ZSBtdXN0IGNoZWNrIGZvciBib3RoIGVycm9yIGNvZGUgb2YKKysgICAgIyB6ZXJvIEFORCBub24tZW1wdHkgc3Rkb3V0LCB3aGljaCBleHBsYWlucyB0aGUgb2RkIGNvbnN0cnVjdGlvbjoKKysgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXA9YHdpbmVwYXRoIC13ICIkMSIgMj4vZGV2L251bGxgCisrICAgIGlmIHRlc3QgIiQ/IiAtZXEgMCAmJiB0ZXN0IC1uICIke2Z1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wfSI7IHRoZW4KKysgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD1gJEVDSE8gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcCIgfAorKyAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorKyAgICBlbHNlCisrICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9CisrICAgIGZpCisrICBmaQorK30KKysjIGVuZDogZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMgorKworKworKyMgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiBBUkcKKysjIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHBhdGggY29udmVyc2lvbiBmdW5jdGlvbnMgd2hlbiAkYnVpbGQgaXMgKm5peCwgYW5kCisrIyAkaG9zdCBpcyBtaW5ndywgY3lnd2luLCBvciBzb21lIG90aGVyIHczMiBlbnZpcm9ubWVudC4gUmVsaWVzIG9uIGEgY29ycmVjdGx5CisrIyBjb25maWd1cmVkIHdpbmUgZW52aXJvbm1lbnQgYXZhaWxhYmxlLCB3aXRoIHRoZSB3aW5lcGF0aCBwcm9ncmFtIGluICRidWlsZCdzCisrIyAkUEFUSC4gQXNzdW1lcyBBUkcgaGFzIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycy4KKysjCisrIyBBUkcgaXMgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvIHdpbjMyLgorKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiAkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQuCisrIyBVbmNvbnZlcnRpYmxlIGZpbGUgKGRpcmVjdG9yeSkgbmFtZXMgaW4gQVJHIGFyZSBza2lwcGVkOyBpZiBubyBkaXJlY3RvcnkgbmFtZXMKKysjIGFyZSBjb252ZXJ0aWJsZSwgdGhlbiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eS4KKytmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgIyB1bmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2Vzbid0IGNvbnZlcnQgcGF0aHMsIG9ubHkgZmlsZSBuYW1lcworKyAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9IiIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICBvbGRJRlM9JElGUworKyAgICBJRlM9OgorKyAgICBmb3IgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9mIGluICQxOyBkbworKyAgICAgIElGUz0kb2xkSUZTCisrICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfZiIKKysgICAgICBpZiB0ZXN0IC1uICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiIDsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IjsgdGhlbgorKyAgICAgICAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorKyAgICAgICAgZWxzZQorKyAgICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCAiOyRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZG9uZQorKyAgICBJRlM9JG9sZElGUworKyAgZmkKKyt9CisrIyBlbmQ6IGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIKKysKKysKKysjIGZ1bmNfY3lncGF0aCBBUkdTLi4uCisrIyBXcmFwcGVyIGFyb3VuZCBjYWxsaW5nIHRoZSBjeWdwYXRoIHByb2dyYW0gdmlhIExUX0NZR1BBVEguIFRoaXMgaXMgdXNlZCB3aGVuCisrIyB3aGVuICgxKSAkYnVpbGQgaXMgKm5peCBhbmQgQ3lnd2luIGlzIGhvc3RlZCB2aWEgYSB3aW5lIGVudmlyb25tZW50OyBvciAoMikKKysjICRidWlsZCBpcyBNU1lTIGFuZCAkaG9zdCBpcyBDeWd3aW4sIG9yICgzKSAkYnVpbGQgaXMgQ3lnd2luLiBJbiBjYXNlICgxKSBvcgorKyMgKDIpLCByZXR1cm5zIHRoZSBDeWd3aW4gZmlsZSBuYW1lIG9yIHBhdGggaW4gZnVuY19jeWdwYXRoX3Jlc3VsdCAoaW5wdXQKKysjIGZpbGUgbmFtZSBvciBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgaW4gdzMyIGZvcm1hdCwgYXMgcHJldmlvdXNseSBjb252ZXJ0ZWQKKysjIGZyb20gJGJ1aWxkJ3MgKm5peCBvciBNU1lTIGZvcm1hdCkuIEluIGNhc2UgKDMpLCByZXR1cm5zIHRoZSB3MzIgZmlsZSBuYW1lCisrIyBvciBwYXRoIGluIGZ1bmNfY3lncGF0aF9yZXN1bHQgKGlucHV0IGZpbGUgbmFtZSBvciBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgaW4KKysjIEN5Z3dpbiBmb3JtYXQpLiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBvbiBlcnJvci4KKysjCisrIyBBUkdTIGFyZSBwYXNzZWQgdG8gY3lncGF0aCwgd2l0aCB0aGUgbGFzdCBvbmUgYmVpbmcgdGhlIGZpbGUgbmFtZSBvciBwYXRoIHRvCisrIyBiZSBjb252ZXJ0ZWQuCisrIworKyMgU3BlY2lmeSB0aGUgYWJzb2x1dGUgKm5peCAob3IgdzMyKSBuYW1lIHRvIGN5Z3BhdGggaW4gdGhlIExUX0NZR1BBVEgKKysjIGVudmlyb25tZW50IHZhcmlhYmxlOyBkbyBub3QgcHV0IGl0IGluICRQQVRILgorK2Z1bmNfY3lncGF0aCAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGlmIHRlc3QgLW4gIiRMVF9DWUdQQVRIIiAmJiB0ZXN0IC1mICIkTFRfQ1lHUEFUSCI7IHRoZW4KKysgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD1gJExUX0NZR1BBVEggIiRAIiAyPi9kZXYvbnVsbGAKKysgICAgaWYgdGVzdCAiJD8iIC1uZSAwOyB0aGVuCisrICAgICAgIyBvbiBmYWlsdXJlLCBlbnN1cmUgcmVzdWx0IGlzIGVtcHR5CisrICAgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KKysgICAgZmkKKysgIGVsc2UKKysgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KKysgICAgZnVuY19lcnJvciAiTFRfQ1lHUEFUSCBpcyBlbXB0eSBvciBzcGVjaWZpZXMgbm9uLWV4aXN0ZW50IGZpbGU6IFxgJExUX0NZR1BBVEgnIgorKyAgZmkKKyt9CisrI2VuZDogZnVuY19jeWdwYXRoCisrCisrCisrIyBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiBBUkcKKysjIENvbnZlcnQgZmlsZSBuYW1lIG9yIHBhdGggQVJHIGZyb20gTVNZUyBmb3JtYXQgdG8gdzMyIGZvcm1hdC4gIFJldHVybgorKyMgcmVzdWx0IGluIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgICMgYXdrd2FyZDogY21kIGFwcGVuZHMgc3BhY2VzIHRvIHJlc3VsdAorKyAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0PWAoIGNtZCAvL2MgZWNobyAiJDEiICkgMj4vZGV2L251bGwgfAorKyAgICAkU0VEIC1lICdzL1sgXSokLy8nIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisrfQorKyNlbmQ6IGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayBBUkcxIEFSRzIKKysjIFZlcmlmeSB0aGF0IEFSRzEgKGEgZmlsZSBuYW1lIGluICRidWlsZCBmb3JtYXQpIHdhcyBjb252ZXJ0ZWQgdG8gJGhvc3QKKysjIGZvcm1hdCBpbiBBUkcyLiBPdGhlcndpc2UsIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGNvbnRpbnVlIChyZXNldHRpbmcKKysjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCB0byBBUkcxKS4KKytmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGlmIHRlc3QgLXogIiQyIiAmJiB0ZXN0IC1uICIkMSIgOyB0aGVuCisrICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgaG9zdCBmaWxlIG5hbWUgY29ycmVzcG9uZGluZyB0byIKKysgICAgZnVuY19lcnJvciAiICBcYCQxJyIKKysgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisrICAgICMgRmFsbGJhY2s6CisrICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisrICBmaQorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjaworKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgRlJPTV9QQVRIU0VQIFRPX1BBVEhTRVAgRlJPTV9QQVRIIFRPX1BBVEgKKysjIFZlcmlmeSB0aGF0IEZST01fUEFUSCAoYSBwYXRoIGluICRidWlsZCBmb3JtYXQpIHdhcyBjb252ZXJ0ZWQgdG8gJGhvc3QKKysjIGZvcm1hdCBpbiBUT19QQVRILiBPdGhlcndpc2UsIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGNvbnRpbnVlLCByZXNldHRpbmcKKysjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCB0byBhIHNpbXBsaXN0aWMgZmFsbGJhY2sgdmFsdWUgKHNlZSBiZWxvdykuCisrZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBpZiB0ZXN0IC16ICIkNCIgJiYgdGVzdCAtbiAiJDMiOyB0aGVuCisrICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGhvc3QgcGF0aCBjb3JyZXNwb25kaW5nIHRvIgorKyAgICBmdW5jX2Vycm9yICIgIFxgJDMnIgorKyAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKysgICAgIyBGYWxsYmFjay4gIFRoaXMgaXMgYSBkZWxpYmVyYXRlbHkgc2ltcGxpc3RpYyAiY29udmVyc2lvbiIgYW5kCisrICAgICMgc2hvdWxkIG5vdCBiZSAiaW1wcm92ZWQiLiAgU2VlIGxpYnRvb2wuaW5mby4KKysgICAgaWYgdGVzdCAieCQxIiAhPSAieCQyIjsgdGhlbgorKyAgICAgIGx0X3JlcGxhY2VfcGF0aHNlcF9jaGFycz0ic3wkMXwkMnxnIgorKyAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gZWNobyAiJDMiIHwKKysgICAgICAgICRTRUQgLWUgIiRsdF9yZXBsYWNlX3BhdGhzZXBfY2hhcnMiYAorKyAgICBlbHNlCisrICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMyIKKysgICAgZmkKKysgIGZpCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrCisrCisrCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgRlJPTlRQQVQgQkFDS1BBVCBSRVBMIE9SSUcKKysjIE1vZGlmaWVzIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCBieSBwcmVwZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEZST05UUEFUCisrIyBhbmQgYXBwZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEJBQ0tQQVQuCisrZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgY2FzZSAkNCBpbgorKyAgJDEgKSBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQzJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKysgICAgOzsKKysgIGVzYWMKKysgIGNhc2UgJDQgaW4KKysgICQyICkgZnVuY19hcHBlbmQgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0ICIkMyIKKysgICAgOzsKKysgIGVzYWMKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwCisrCisrCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjICRidWlsZCB0byAkaG9zdCBGSUxFIE5BTUUgQ09OVkVSU0lPTiBGVU5DVElPTlMgIworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyBpbnZva2VkIHZpYSBgJHRvX2hvc3RfZmlsZV9jbWQgQVJHJworKyMKKysjIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRoZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCisrIyBSZXN1bHQgd2lsbCBiZSBhdmFpbGFibGUgaW4gJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKysKKysKKysjIGZ1bmNfdG9faG9zdF9maWxlIEFSRworKyMgQ29udmVydHMgdGhlIGZpbGUgbmFtZSBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gUmV0dXJuIHJlc3VsdAorKyMgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfdG9faG9zdF9maWxlICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgJHRvX2hvc3RfZmlsZV9jbWQgIiQxIgorK30KKysjIGVuZCBmdW5jX3RvX2hvc3RfZmlsZQorKworKworKyMgZnVuY190b190b29sX2ZpbGUgQVJHIExBWlkKKysjIGNvbnZlcnRzIHRoZSBmaWxlIG5hbWUgQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byB0b29sY2hhaW4gZm9ybWF0LiBSZXR1cm4KKysjIHJlc3VsdCBpbiBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQuICBJZiB0aGUgY29udmVyc2lvbiBpbiB1c2UgaXMgbGlzdGVkCisrIyBpbiAodGhlIGNvbW1hIHNlcGFyYXRlZCkgTEFaWSwgbm8gY29udmVyc2lvbiB0YWtlcyBwbGFjZS4KKytmdW5jX3RvX3Rvb2xfZmlsZSAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGNhc2UgLCQyLCBpbgorKyAgICAqLCIkdG9fdG9vbF9maWxlX2NtZCIsKikKKysgICAgICBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQ9JDEKKysgICAgICA7OworKyAgICAqKQorKyAgICAgICR0b190b29sX2ZpbGVfY21kICIkMSIKKysgICAgICBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQ9JGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdAorKyAgICAgIDs7CisrICBlc2FjCisrfQorKyMgZW5kIGZ1bmNfdG9fdG9vbF9maWxlCisrCisrCisrIyBmdW5jX2NvbnZlcnRfZmlsZV9ub29wIEFSRworKyMgQ29weSBBUkcgdG8gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9maWxlX25vb3AgKCkKKyt7CisrICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrCisrCisrIyBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiBBUkcKKysjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIChtaW5ndykgTVNZUyB0byAobWluZ3cpIHczMiBmb3JtYXQ7IGF1dG9tYXRpYworKyMgY29udmVyc2lvbiB0byB3MzIgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIGN3cmFwcGVyLiAgUmV0dXJucyByZXN1bHQgaW4KKysjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgorKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisrICBmaQorKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysKKysKKysjIGZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIgQVJHCisrIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSBDeWd3aW4gdG8gdzMyIGZvcm1hdC4gIFJldHVybnMgcmVzdWx0IGluCisrIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBiZWNhdXNlICRidWlsZCBpcyBjeWd3aW4sIHdlIGNhbGwgInRoZSIgY3lncGF0aCBpbiAkUEFUSDsgbm8gbmVlZCB0byB1c2UKKysgICAgIyBMVF9DWUdQQVRIIGluIHRoaXMgY2FzZS4KKysgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PWBjeWdwYXRoIC1tICIkMSJgCisrICBmaQorKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKworKworKyMgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMiBBUkcKKysjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tICpuaXggdG8gdzMyIGZvcm1hdC4gIFJlcXVpcmVzIGEgd2luZSBlbnZpcm9ubWVudAorKyMgYW5kIGEgd29ya2luZyB3aW5lcGF0aC4gUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9maWxlX25peF90b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgorKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKysgIGZpCisrICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbiBBUkcKKysjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIE1TWVMgdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIExUX0NZR1BBVEggc2V0LgorKyMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJDEiCisrICAgIGZ1bmNfY3lncGF0aCAtdSAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKysgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKysgIGZpCisrICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKworKworKyMgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbiBBUkcKKysjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tICpuaXggdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIEN5Z3dpbiBpbnN0YWxsZWQKKysjIGluIGEgd2luZSBlbnZpcm9ubWVudCwgd29ya2luZyB3aW5lcGF0aCwgYW5kIExUX0NZR1BBVEggc2V0LiAgUmV0dXJucyByZXN1bHQKKysjIGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIGNvbnZlcnQgZnJvbSAqbml4IHRvIHczMiwgdGhlbiB1c2UgY3lncGF0aCB0byBjb252ZXJ0IGZyb20gdzMyIHRvIGN5Z3dpbi4KKysgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJDEiCisrICAgIGZ1bmNfY3lncGF0aCAtdSAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorKyAgZmkKKysgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysKKysKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjICRidWlsZCB0byAkaG9zdCBQQVRIIENPTlZFUlNJT04gRlVOQ1RJT05TICMKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjIGludm9rZWQgdmlhIGAkdG9faG9zdF9wYXRoX2NtZCBBUkcnCisrIworKyMgSW4gZWFjaCBjYXNlLCBBUkcgaXMgdGhlIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1hdC4KKysjIFRoZSByZXN1bHQgd2lsbCBiZSBhdmFpbGFibGUgaW4gJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KKysjCisrIyBQYXRoIHNlcGFyYXRvcnMgYXJlIGFsc28gY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuICBJZgorKyMgQVJHIGJlZ2lucyBvciBlbmRzIHdpdGggYSBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXIsIGl0IGlzIHByZXNlcnZlZCAoYnV0CisrIyBjb252ZXJ0ZWQgdG8gJGhvc3QgZm9ybWF0KSBvbiBvdXRwdXQuCisrIworKyMgQWxsIHBhdGggY29udmVyc2lvbiBmdW5jdGlvbnMgYXJlIG5hbWVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29udmVudGlvbjoKKysjICAgZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb24gICAgOiBmdW5jX2NvbnZlcnRfZmlsZV9YX3RvX1kgKCkKKysjICAgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9uICAgICAgICAgOiBmdW5jX2NvbnZlcnRfcGF0aF9YX3RvX1kgKCkKKysjIHdoZXJlLCBmb3IgYW55IGdpdmVuICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbiB0aGUgJ1hfdG9fWScgdmFsdWUgaXMgdGhlCisrIyBzYW1lLiAgSWYgY29udmVyc2lvbiBmdW5jdGlvbnMgYXJlIGFkZGVkIGZvciBuZXcgJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9ucywKKysjIHRoZSB0d28gbmV3IGZ1bmN0aW9ucyBtdXN0IGZvbGxvdyB0aGlzIHBhdHRlcm4sIG9yIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisrIyB3aWxsIGJyZWFrLgorKworKworKyMgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKKysjIEVuc3VyZXMgdGhhdCBmdW5jdGlvbiAicG9pbnRlciIgdmFyaWFibGUgJHRvX2hvc3RfcGF0aF9jbWQgaXMgc2V0IHRvIHRoZQorKyMgYXBwcm9wcmlhdGUgdmFsdWUsIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiAkdG9faG9zdF9maWxlX2NtZC4KKyt0b19ob3N0X3BhdGhfY21kPQorK2Z1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgaWYgdGVzdCAteiAiJHRvX2hvc3RfcGF0aF9jbWQiOyB0aGVuCisrICAgIGZ1bmNfc3RyaXBuYW1lICdmdW5jX2NvbnZlcnRfZmlsZV8nICcnICIkdG9faG9zdF9maWxlX2NtZCIKKysgICAgdG9faG9zdF9wYXRoX2NtZD0iZnVuY19jb252ZXJ0X3BhdGhfJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9IgorKyAgZmkKKyt9CisrCisrCisrIyBmdW5jX3RvX2hvc3RfcGF0aCBBUkcKKysjIENvbnZlcnRzIHRoZSBwYXRoIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiBSZXR1cm4gcmVzdWx0CisrIyBpbiBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCisrZnVuY190b19ob3N0X3BhdGggKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorKyAgJHRvX2hvc3RfcGF0aF9jbWQgIiQxIgorK30KKysjIGVuZCBmdW5jX3RvX2hvc3RfcGF0aAorKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfbm9vcCBBUkcKKysjIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfcGF0aF9ub29wICgpCisreworKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbm9vcAorKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIgQVJHCisrIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKG1pbmd3KSBNU1lTIHRvIChtaW5ndykgdzMyIGZvcm1hdDsgYXV0b21hdGljCisrIyBjb252ZXJzaW9uIHRvIHczMiBpcyBub3QgYXZhaWxhYmxlIGluc2lkZSB0aGUgY3dyYXBwZXIuICBSZXR1cm5zIHJlc3VsdCBpbgorKyMgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorK2Z1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20gQVJHLiAgTVNZUworKyAgICAjIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlOyBjeWdwYXRoIHR1cm5zIHRoZW0gaW50byAnLjsnIGFuZCAnOy4nOworKyAgICAjIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KKysgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCisrICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgorKyAgZmkKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIKKysKKysKKysjIGZ1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIgQVJHCisrIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gQ3lnd2luIHRvIHczMiBmb3JtYXQuICBSZXR1cm5zIHJlc3VsdCBpbgorKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgorKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBjeWdwYXRoIC1tIC1wICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSJgCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKKysgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisrICBmaQorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyIEFSRworKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tICpuaXggdG8gdzMyIGZvcm1hdC4gIFJlcXVpcmVzIGEgd2luZSBlbnZpcm9ubWVudCBhbmQKKysjIGEgd29ya2luZyB3aW5lcGF0aC4gIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKKysgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKKysgIGZpCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25peF90b193MzIKKysKKysKKysjIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luIEFSRworKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIE1TWVMgdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIExUX0NZR1BBVEggc2V0LgorKyMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKKysgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKysgICAgZnVuY19jeWdwYXRoIC11IC1wICIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAorKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCisrICBmaQorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbgorKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbiBBUkcKKysjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAqbml4IHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBDeWd3aW4gaW5zdGFsbGVkIGluIGEKKysjIGEgd2luZSBlbnZpcm9ubWVudCwgd29ya2luZyB3aW5lcGF0aCwgYW5kIExUX0NZR1BBVEggc2V0LiAgUmV0dXJucyByZXN1bHQgaW4KKysjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20KKysgICAgIyBBUkcuIG1zeXMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmUsIGN5Z3BhdGggdHVybnMgdGhlbQorKyAgICAjIGludG8gJy47JyBhbmQgJzsuJywgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgorKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisrICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAorKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCisrICBmaQorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luCisrCisrCisgIyBmdW5jX21vZGVfY29tcGlsZSBhcmcuLi4KKyBmdW5jX21vZGVfY29tcGlsZSAoKQorIHsKK0BAIC0xMzE0LDEyICsxOTg1LDEyIEBAIGZ1bmNfbW9kZV9jb21waWxlICgpCisgCSAgOzsKKyAKKyAJLXBpZSB8IC1mcGllIHwgLWZQSUUpCistICAgICAgICAgIHBpZV9mbGFnPSIkcGllX2ZsYWcgJGFyZyIKKysgICAgICAgICAgZnVuY19hcHBlbmQgcGllX2ZsYWcgIiAkYXJnIgorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAKKyAJLXNoYXJlZCB8IC1zdGF0aWMgfCAtcHJlZmVyLXBpYyB8IC1wcmVmZXItbm9uLXBpYykKKy0JICBsYXRlcj0iJGxhdGVyICRhcmciCisrCSAgZnVuY19hcHBlbmQgbGF0ZXIgIiAkYXJnIgorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAKK0BAIC0xMzQwLDE1ICsyMDExLDE0IEBAIGZ1bmNfbW9kZV9jb21waWxlICgpCisgCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisgCSAgZm9yIGFyZyBpbiAkYXJnczsgZG8KKyAJICAgIElGUz0iJHNhdmVfaWZzIgorLQkgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKy0JICAgIGxhc3Rhcmc9IiRsYXN0YXJnICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBsYXN0YXJnICIkYXJnIgorIAkgIGRvbmUKKyAJICBJRlM9IiRzYXZlX2lmcyIKKyAJICBmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRsYXN0YXJnIgorIAkgIGxhc3Rhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorIAorIAkgICMgQWRkIHRoZSBhcmd1bWVudHMgdG8gYmFzZV9jb21waWxlLgorLQkgIGJhc2VfY29tcGlsZT0iJGJhc2VfY29tcGlsZSAkbGFzdGFyZyIKKysJICBmdW5jX2FwcGVuZCBiYXNlX2NvbXBpbGUgIiAkbGFzdGFyZyIKKyAJICBjb250aW51ZQorIAkgIDs7CisgCitAQCAtMTM2NCw4ICsyMDM0LDcgQEAgZnVuY19tb2RlX2NvbXBpbGUgKCkKKyAgICAgICBlc2FjICAgICMgIGNhc2UgJGFyZ19tb2RlCisgCisgICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBwcmV2aW91cyBhcmd1bWVudC4KKy0gICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbGFzdGFyZyIKKy0gICAgICBiYXNlX2NvbXBpbGU9IiRiYXNlX2NvbXBpbGUgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKyAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBiYXNlX2NvbXBpbGUgIiRsYXN0YXJnIgorICAgICBkb25lICMgZm9yIGFyZworIAorICAgICBjYXNlICRhcmdfbW9kZSBpbgorQEAgLTE0OTYsMTcgKzIxNjUsMTYgQEAgY29tcGlsZXIuIgorIAkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisgCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgIGZpCistICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJG91dHB1dF9vYmoiCisrICAgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRvdXRwdXRfb2JqIgorICAgICAgICRFQ0hPICIkc3JjZmlsZSIgPiAiJGxvY2tmaWxlIgorICAgICBmaQorIAorICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CistICAgIHJlbW92ZWxpc3Q9IiRyZW1vdmVsaXN0ICRsb2NrZmlsZSIKKysgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRsb2NrZmlsZSIKKyAgICAgdHJhcCAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJyAxIDIgMTUKKyAKKy0gICAgaWYgdGVzdCAtbiAiJGZpeF9zcmNmaWxlX3BhdGgiOyB0aGVuCistICAgICAgZXZhbCAic3JjZmlsZT1cIiRmaXhfc3JjZmlsZV9wYXRoXCIiCistICAgIGZpCisrICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkc3JjZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgc3JjZmlsZT0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRzcmNmaWxlIgorICAgICBxc3JjZmlsZT0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKyAKK0BAIC0xNTI2LDcgKzIxOTQsNyBAQCBjb21waWxlci4iCisgCisgICAgICAgaWYgdGVzdCAteiAiJG91dHB1dF9vYmoiOyB0aGVuCisgCSMgUGxhY2UgUElDIG9iamVjdHMgaW4gJG9iamRpcgorLQljb21tYW5kPSIkY29tbWFuZCAtbyAkbG9iaiIKKysJZnVuY19hcHBlbmQgY29tbWFuZCAiIC1vICRsb2JqIgorICAgICAgIGZpCisgCisgICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIJXAorQEAgLTE1NzMsMTEgKzIyNDEsMTEgQEAgY29tcGlsZXIuIgorIAljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCisgICAgICAgZmkKKyAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfY19vIiA9IHllczsgdGhlbgorLQljb21tYW5kPSIkY29tbWFuZCAtbyAkb2JqIgorKwlmdW5jX2FwcGVuZCBjb21tYW5kICIgLW8gJG9iaiIKKyAgICAgICBmaQorIAorICAgICAgICMgU3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGlmIHdlIGFscmVhZHkgZGlkIGEgUElDIGNvbXBpbGF0aW9uLgorLSAgICAgIGNvbW1hbmQ9IiRjb21tYW5kJHN1cHByZXNzX291dHB1dCIKKysgICAgICBmdW5jX2FwcGVuZCBjb21tYW5kICIkc3VwcHJlc3Nfb3V0cHV0IgorICAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiIFwKKyAgICAgICAgICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCisgCitAQCAtMTYyMiwxMyArMjI5MCwxMyBAQCBjb21waWxlci4iCisgfQorIAorICRvcHRfaGVscCB8fCB7CistICB0ZXN0ICIkbW9kZSIgPSBjb21waWxlICYmIGZ1bmNfbW9kZV9jb21waWxlICR7MSsiJEAifQorKyAgdGVzdCAiJG9wdF9tb2RlIiA9IGNvbXBpbGUgJiYgZnVuY19tb2RlX2NvbXBpbGUgJHsxKyIkQCJ9CisgfQorIAorIGZ1bmNfbW9kZV9oZWxwICgpCisgeworICAgICAjIFdlIG5lZWQgdG8gZGlzcGxheSBoZWxwIGZvciBlYWNoIG9mIHRoZSBtb2Rlcy4KKy0gICAgY2FzZSAkbW9kZSBpbgorKyAgICBjYXNlICRvcHRfbW9kZSBpbgorICAgICAgICIiKQorICAgICAgICAgIyBHZW5lcmljIGhlbHAgaXMgZXh0cmFjdGVkIGZyb20gdGhlIHVzYWdlIGNvbW1lbnRzCisgICAgICAgICAjIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZpbGUuCitAQCAtMTY1OSw4ICsyMzI3LDggQEAgVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisgCisgICAtbyBPVVRQVVQtRklMRSAgICBzZXQgdGhlIG91dHB1dCBmaWxlIG5hbWUgdG8gT1VUUFVULUZJTEUKKyAgIC1uby1zdXBwcmVzcyAgICAgIGRvIG5vdCBzdXBwcmVzcyBjb21waWxlciBvdXRwdXQgZm9yIG11bHRpcGxlIHBhc3NlcworLSAgLXByZWZlci1waWMgICAgICAgdHJ5IHRvIGJ1aWxkaW5nIFBJQyBvYmplY3RzIG9ubHkKKy0gIC1wcmVmZXItbm9uLXBpYyAgIHRyeSB0byBidWlsZGluZyBub24tUElDIG9iamVjdHMgb25seQorKyAgLXByZWZlci1waWMgICAgICAgdHJ5IHRvIGJ1aWxkIFBJQyBvYmplY3RzIG9ubHkKKysgIC1wcmVmZXItbm9uLXBpYyAgIHRyeSB0byBidWlsZCBub24tUElDIG9iamVjdHMgb25seQorICAgLXNoYXJlZCAgICAgICAgICAgZG8gbm90IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgIC1zdGF0aWMgICAgICAgICAgIG9ubHkgYnVpbGQgYSBcYC5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZworICAgLVdjLEZMQUcgICAgICAgICAgcGFzcyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBjb21waWxlcgorQEAgLTE4MDQsNyArMjQ3Miw3IEBAIE90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgICAgICAgIDs7CisgCisgICAgICAgKikKKy0gICAgICAgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRtb2RlJyIKKysgICAgICAgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRvcHRfbW9kZSciCisgICAgICAgICA7OworICAgICBlc2FjCisgCitAQCAtMTgxOSwxMyArMjQ4NywxMyBAQCBpZiAkb3B0X2hlbHA7IHRoZW4KKyAgIGVsc2UKKyAgICAgeworICAgICAgIGZ1bmNfaGVscCBub2V4aXQKKy0gICAgICBmb3IgbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCisrICAgICAgZm9yIG9wdF9tb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KKyAJZnVuY19tb2RlX2hlbHAKKyAgICAgICBkb25lCisgICAgIH0gfCBzZWQgLW4gJzFwOyAyLCRzL15Vc2FnZTovICBvcjogL3AnCisgICAgIHsKKyAgICAgICBmdW5jX2hlbHAgbm9leGl0CistICAgICAgZm9yIG1vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbworKyAgICAgIGZvciBvcHRfbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCisgCWVjaG8KKyAJZnVuY19tb2RlX2hlbHAKKyAgICAgICBkb25lCitAQCAtMTg1NCwxMyArMjUyMiwxNiBAQCBmdW5jX21vZGVfZXhlY3V0ZSAoKQorICAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIENPTU1BTkQiCisgCisgICAgICMgSGFuZGxlIC1kbG9wZW4gZmxhZ3MgaW1tZWRpYXRlbHkuCistICAgIGZvciBmaWxlIGluICRleGVjdXRlX2RsZmlsZXM7IGRvCisrICAgIGZvciBmaWxlIGluICRvcHRfZGxvcGVuOyBkbworICAgICAgIHRlc3QgLWYgIiRmaWxlIiBcCisgCXx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgZmlsZSIKKyAKKyAgICAgICBkaXI9CisgICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgICoubGEpCisrCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZmlsZSIKKysJZmlsZT0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisrCisgCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisgCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCisgCSAgfHwgZnVuY19mYXRhbF9oZWxwICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKK0BAIC0xODgyLDcgKzI1NTMsNyBAQCBmdW5jX21vZGVfZXhlY3V0ZSAoKQorIAlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorIAorIAlpZiB0ZXN0IC1mICIkZGlyLyRvYmpkaXIvJGRsbmFtZSI7IHRoZW4KKy0JICBkaXI9IiRkaXIvJG9iamRpciIKKysJICBmdW5jX2FwcGVuZCBkaXIgIi8kb2JqZGlyIgorIAllbHNlCisgCSAgaWYgdGVzdCAhIC1mICIkZGlyLyRkbG5hbWUiOyB0aGVuCisgCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBcYCRkbG5hbWUnIGluIFxgJGRpcicgb3IgXGAkZGlyLyRvYmpkaXInIgorQEAgLTE5MDcsMTAgKzI1NzgsMTAgQEAgZnVuY19tb2RlX2V4ZWN1dGUgKCkKKyAgICAgICB0ZXN0IC1uICIkYWJzZGlyIiAmJiBkaXI9IiRhYnNkaXIiCisgCisgICAgICAgIyBOb3cgYWRkIHRoZSBkaXJlY3RvcnkgdG8gc2hsaWJwYXRoX3Zhci4KKy0gICAgICBpZiBldmFsIHRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCI7IHRoZW4KKy0JZXZhbCAkc2hsaWJwYXRoX3Zhcj1cJGRpcgorKyAgICAgIGlmIGV2YWwgInRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCIiOyB0aGVuCisrCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXJcIiIKKyAgICAgICBlbHNlCistCWV2YWwgJHNobGlicGF0aF92YXI9XCRkaXI6XCQkc2hsaWJwYXRoX3ZhcgorKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyOlwkJHNobGlicGF0aF92YXJcIiIKKyAgICAgICBmaQorICAgICBkb25lCisgCitAQCAtMTkzOSw4ICsyNjEwLDcgQEAgZnVuY19tb2RlX2V4ZWN1dGUgKCkKKyAJOzsKKyAgICAgICBlc2FjCisgICAgICAgIyBRdW90ZSBhcmd1bWVudHMgKHRvIHByZXNlcnZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzKS4KKy0gICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmlsZSIKKy0gICAgICBhcmdzPSIkYXJncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIGFyZ3MgIiRmaWxlIgorICAgICBkb25lCisgCisgICAgIGlmIHRlc3QgIlgkb3B0X2RyeV9ydW4iID0gWGZhbHNlOyB0aGVuCitAQCAtMTk3MiwyMiArMjY0Miw1OSBAQCBmdW5jX21vZGVfZXhlY3V0ZSAoKQorICAgICBmaQorIH0KKyAKKy10ZXN0ICIkbW9kZSIgPSBleGVjdXRlICYmIGZ1bmNfbW9kZV9leGVjdXRlICR7MSsiJEAifQorK3Rlc3QgIiRvcHRfbW9kZSIgPSBleGVjdXRlICYmIGZ1bmNfbW9kZV9leGVjdXRlICR7MSsiJEAifQorIAorIAorICMgZnVuY19tb2RlX2ZpbmlzaCBhcmcuLi4KKyBmdW5jX21vZGVfZmluaXNoICgpCisgeworICAgICAkb3B0X2RlYnVnCistICAgIGxpYmRpcnM9IiRub25vcHQiCisrICAgIGxpYnM9CisrICAgIGxpYmRpcnM9CisgICAgIGFkbWluY21kcz0KKyAKKy0gICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKy0gICAgICBmb3IgZGlyCistICAgICAgZG8KKy0JbGliZGlycz0iJGxpYmRpcnMgJGRpciIKKy0gICAgICBkb25lCisrICAgIGZvciBvcHQgaW4gIiRub25vcHQiICR7MSsiJEAifQorKyAgICBkbworKyAgICAgIGlmIHRlc3QgLWQgIiRvcHQiOyB0aGVuCisrCWZ1bmNfYXBwZW5kIGxpYmRpcnMgIiAkb3B0IgorIAorKyAgICAgIGVsaWYgdGVzdCAtZiAiJG9wdCI7IHRoZW4KKysJaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJG9wdCI7IHRoZW4KKysJICBmdW5jX2FwcGVuZCBsaWJzICIgJG9wdCIKKysJZWxzZQorKwkgIGZ1bmNfd2FybmluZyAiXGAkb3B0JyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisrCWZpCisrCisrICAgICAgZWxzZQorKwlmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50IFxgJG9wdCciCisrICAgICAgZmkKKysgICAgZG9uZQorKworKyAgICBpZiB0ZXN0IC1uICIkbGlicyI7IHRoZW4KKysgICAgICBpZiB0ZXN0IC1uICIkbHRfc3lzcm9vdCI7IHRoZW4KKysgICAgICAgIHN5c3Jvb3RfcmVnZXg9YCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCisrICAgICAgICBzeXNyb290X2NtZD0icy9cKFsgJ11cKSRzeXNyb290X3JlZ2V4L1wxL2c7IgorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c3Jvb3RfY21kPQorKyAgICAgIGZpCisrCisrICAgICAgIyBSZW1vdmUgc3lzcm9vdCByZWZlcmVuY2VzCisrICAgICAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCisrICAgICAgICBmb3IgbGliIGluICRsaWJzOyBkbworKyAgICAgICAgICBlY2hvICJyZW1vdmluZyByZWZlcmVuY2VzIHRvICRsdF9zeXNyb290IGFuZCBcYD0nIHByZWZpeGVzIGZyb20gJGxpYiIKKysgICAgICAgIGRvbmUKKysgICAgICBlbHNlCisrICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAorKyAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KKysJICBzZWQgLWUgIiR7c3lzcm9vdF9jbWR9IHMvXChbICddLVtMUl1cKT0vXDEvZzsgcy9cKFsgJ11cKT0vXDEvZyIgJGxpYiBcCisrCSAgICA+ICR0bXBkaXIvdG1wLWxhCisrCSAgbXYgLWYgJHRtcGRpci90bXAtbGEgJGxpYgorKwlkb25lCisrICAgICAgICAke1JNfXIgIiR0bXBkaXIiCisrICAgICAgZmkKKysgICAgZmkKKysKKysgICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKyAgICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbworIAlpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMiOyB0aGVuCisgCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGZpbmlzaCBjb21tYW5kcy4KK0BAIC0xOTk3LDcgKzI3MDQsNyBAQCBmdW5jX21vZGVfZmluaXNoICgpCisgCWlmIHRlc3QgLW4gIiRmaW5pc2hfZXZhbCI7IHRoZW4KKyAJICAjIERvIHRoZSBzaW5nbGUgZmluaXNoX2V2YWwuCisgCSAgZXZhbCBjbWRzPVwiJGZpbmlzaF9ldmFsXCIKKy0JICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZHMiIHx8IGFkbWluY21kcz0iJGFkbWluY21kcworKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kcyIgfHwgZnVuY19hcHBlbmQgYWRtaW5jbWRzICIKKyAgICAgICAgJGNtZHMiCisgCWZpCisgICAgICAgZG9uZQorQEAgLTIwMDYsNTMgKzI3MTMsNTUgQEAgZnVuY19tb2RlX2ZpbmlzaCAoKQorICAgICAjIEV4aXQgaGVyZSBpZiB0aGV5IHdhbnRlZCBzaWxlbnQgbW9kZS4KKyAgICAgJG9wdF9zaWxlbnQgJiYgZXhpdCAkRVhJVF9TVUNDRVNTCisgCistICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCistICAgIGVjaG8gIkxpYnJhcmllcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGluOiIKKy0gICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKy0gICAgICAkRUNITyAiICAgJGxpYmRpciIKKy0gICAgZG9uZQorLSAgICBlY2hvCistICAgIGVjaG8gIklmIHlvdSBldmVyIGhhcHBlbiB0byB3YW50IHRvIGxpbmsgYWdhaW5zdCBpbnN0YWxsZWQgbGlicmFyaWVzIgorLSAgICBlY2hvICJpbiBhIGdpdmVuIGRpcmVjdG9yeSwgTElCRElSLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGxpYnRvb2wsIGFuZCIKKy0gICAgZWNobyAic3BlY2lmeSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgbGlicmFyeSwgb3IgdXNlIHRoZSBcYC1MTElCRElSJyIKKy0gICAgZWNobyAiZmxhZyBkdXJpbmcgbGlua2luZyBhbmQgZG8gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmc6IgorLSAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKy0gICAgICBlY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorLSAgICAgIGVjaG8gIiAgICAgZHVyaW5nIGV4ZWN1dGlvbiIKKy0gICAgZmkKKy0gICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorLSAgICAgIGVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkcnVucGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorLSAgICAgIGVjaG8gIiAgICAgZHVyaW5nIGxpbmtpbmciCistICAgIGZpCistICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorLSAgICAgIGxpYmRpcj1MSUJESVIKKy0gICAgICBldmFsICJmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKysgICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKysgICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorKyAgICAgIGVjaG8gIkxpYnJhcmllcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGluOiIKKysgICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbworKwkkRUNITyAiICAgJGxpYmRpciIKKysgICAgICBkb25lCisrICAgICAgZWNobworKyAgICAgIGVjaG8gIklmIHlvdSBldmVyIGhhcHBlbiB0byB3YW50IHRvIGxpbmsgYWdhaW5zdCBpbnN0YWxsZWQgbGlicmFyaWVzIgorKyAgICAgIGVjaG8gImluIGEgZ2l2ZW4gZGlyZWN0b3J5LCBMSUJESVIsIHlvdSBtdXN0IGVpdGhlciB1c2UgbGlidG9vbCwgYW5kIgorKyAgICAgIGVjaG8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgXGAtTExJQkRJUiciCisrICAgICAgZWNobyAiZmxhZyBkdXJpbmcgbGlua2luZyBhbmQgZG8gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmc6IgorKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorKwllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorKwllY2hvICIgICAgIGR1cmluZyBleGVjdXRpb24iCisrICAgICAgZmkKKysgICAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisrCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkcnVucGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorKwllY2hvICIgICAgIGR1cmluZyBsaW5raW5nIgorKyAgICAgIGZpCisrICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisrCWxpYmRpcj1MSUJESVIKKysJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorIAorLSAgICAgICRFQ0hPICIgICAtIHVzZSB0aGUgXGAkZmxhZycgbGlua2VyIGZsYWciCistICAgIGZpCistICAgIGlmIHRlc3QgLW4gIiRhZG1pbmNtZHMiOyB0aGVuCistICAgICAgJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgorLSAgICBmaQorLSAgICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorLSAgICAgIGVjaG8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGFkZCBMSUJESVIgdG8gXGAvZXRjL2xkLnNvLmNvbmYnIgorLSAgICBmaQorLSAgICBlY2hvCisrCSRFQ0hPICIgICAtIHVzZSB0aGUgXGAkZmxhZycgbGlua2VyIGZsYWciCisrICAgICAgZmkKKysgICAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgorKwkkRUNITyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgcnVuIHRoZXNlIGNvbW1hbmRzOiRhZG1pbmNtZHMiCisrICAgICAgZmkKKysgICAgICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorKwllY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvIFxgL2V0Yy9sZC5zby5jb25mJyIKKysgICAgICBmaQorKyAgICAgIGVjaG8KKyAKKy0gICAgZWNobyAiU2VlIGFueSBvcGVyYXRpbmcgc3lzdGVtIGRvY3VtZW50YXRpb24gYWJvdXQgc2hhcmVkIGxpYnJhcmllcyBmb3IiCistICAgIGNhc2UgJGhvc3QgaW4KKy0gICAgICBzb2xhcmlzMi5bNjc4OV18c29sYXJpczIuMVswLTldKQorLSAgICAgICAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSksIGNybGUoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCIKKy0JZWNobyAicGFnZXMuIgorLQk7OworLSAgICAgICopCistICAgICAgICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSBhbmQgbGQuc28oOCkgbWFudWFsIHBhZ2VzLiIKKy0gICAgICAgIDs7CistICAgIGVzYWMKKy0gICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKysgICAgICBlY2hvICJTZWUgYW55IG9wZXJhdGluZyBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBhYm91dCBzaGFyZWQgbGlicmFyaWVzIGZvciIKKysgICAgICBjYXNlICRob3N0IGluCisrCXNvbGFyaXMyLls2Nzg5XXxzb2xhcmlzMi4xWzAtOV0pCisrCSAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSksIGNybGUoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCIKKysJICBlY2hvICJwYWdlcy4iCisrCSAgOzsKKysJKikKKysJICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSBhbmQgbGQuc28oOCkgbWFudWFsIHBhZ2VzLiIKKysJICA7OworKyAgICAgIGVzYWMKKysgICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorKyAgICBmaQorICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyB9CisgCistdGVzdCAiJG1vZGUiID0gZmluaXNoICYmIGZ1bmNfbW9kZV9maW5pc2ggJHsxKyIkQCJ9CisrdGVzdCAiJG9wdF9tb2RlIiA9IGZpbmlzaCAmJiBmdW5jX21vZGVfZmluaXNoICR7MSsiJEAifQorIAorIAorICMgZnVuY19tb2RlX2luc3RhbGwgYXJnLi4uCitAQCAtMjA3Nyw3ICsyNzg2LDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAgICAgIyBUaGUgcmVhbCBmaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGluc3RhbGxhdGlvbiBwcm9ncmFtLgorICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCisgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCistICAgIGluc3RhbGxfcHJvZz0iJGluc3RhbGxfcHJvZyRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9wcm9nICIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgIGluc3RhbGxfc2hhcmVkX3Byb2c9JGluc3RhbGxfcHJvZworICAgICBjYXNlICIgJGluc3RhbGxfcHJvZyAiIGluCisgICAgICAgKltcXFwgL11jcFwgKikgaW5zdGFsbF9jcD06IDs7CitAQCAtMjA5Nyw3ICsyODA2LDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAgICAgZG8KKyAgICAgICBhcmcyPQorICAgICAgIGlmIHRlc3QgLW4gIiRkZXN0IjsgdGhlbgorLQlmaWxlcz0iJGZpbGVzICRkZXN0IgorKwlmdW5jX2FwcGVuZCBmaWxlcyAiICRkZXN0IgorIAlkZXN0PSRhcmcKKyAJY29udGludWUKKyAgICAgICBmaQorQEAgLTIxMzUsMTEgKzI4NDQsMTEgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAKKyAgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIGFyZ3VtZW50LgorICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCistICAgICAgaW5zdGFsbF9wcm9nPSIkaW5zdGFsbF9wcm9nICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysgICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3Byb2cgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICAgaWYgdGVzdCAtbiAiJGFyZzIiOyB0aGVuCisgCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmcyIgorICAgICAgIGZpCistICAgICAgaW5zdGFsbF9zaGFyZWRfcHJvZz0iJGluc3RhbGxfc2hhcmVkX3Byb2cgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKyAgICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfc2hhcmVkX3Byb2cgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgIGRvbmUKKyAKKyAgICAgdGVzdCAteiAiJGluc3RhbGxfcHJvZyIgJiYgXAorQEAgLTIxNTEsNyArMjg2MCw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgIGlmIHRlc3QgLW4gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiICYmICRub19tb2RlOyB0aGVuCisgICAgICAgaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQorIAlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIgorLQlpbnN0YWxsX3NoYXJlZF9wcm9nPSIkaW5zdGFsbF9zaGFyZWRfcHJvZyAtbSAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCWZ1bmNfYXBwZW5kIGluc3RhbGxfc2hhcmVkX3Byb2cgIiAtbSAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICAgZmkKKyAgICAgZmkKKyAKK0BAIC0yMjA5LDEwICsyOTE4LDEzIEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgICouJGxpYmV4dCkKKyAJIyBEbyB0aGUgc3RhdGljIGxpYnJhcmllcyBsYXRlci4KKy0Jc3RhdGljbGlicz0iJHN0YXRpY2xpYnMgJGZpbGUiCisrCWZ1bmNfYXBwZW5kIHN0YXRpY2xpYnMgIiAkZmlsZSIKKyAJOzsKKyAKKyAgICAgICAqLmxhKQorKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZpbGUiCisrCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorKworIAkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorIAlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorIAkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorQEAgLTIyMjYsMjMgKzI5MzgsMzAgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAJaWYgdGVzdCAiWCRkZXN0ZGlyIiA9ICJYJGxpYmRpciI7IHRoZW4KKyAJICBjYXNlICIkY3VycmVudF9saWJkaXJzICIgaW4KKyAJICAqIiAkbGliZGlyICIqKSA7OworLQkgICopIGN1cnJlbnRfbGliZGlycz0iJGN1cnJlbnRfbGliZGlycyAkbGliZGlyIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIGN1cnJlbnRfbGliZGlycyAiICRsaWJkaXIiIDs7CisgCSAgZXNhYworIAllbHNlCisgCSAgIyBOb3RlIHRoZSBsaWJkaXIgYXMgYSBmdXR1cmUgbGliZGlyLgorIAkgIGNhc2UgIiRmdXR1cmVfbGliZGlycyAiIGluCisgCSAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAqKSBmdXR1cmVfbGliZGlycz0iJGZ1dHVyZV9saWJkaXJzICRsaWJkaXIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgZnV0dXJlX2xpYmRpcnMgIiAkbGliZGlyIiA7OworIAkgIGVzYWMKKyAJZmkKKyAKKyAJZnVuY19kaXJuYW1lICIkZmlsZSIgIi8iICIiCisgCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistCWRpcj0iJGRpciRvYmpkaXIiCisrCWZ1bmNfYXBwZW5kIGRpciAiJG9iamRpciIKKyAKKyAJaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorKyAgICAgICMgU3RyaXAgYW55IHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGRlc3RpbmF0aW9uLgorKyAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGxpYmRpciIKKysgICAgICBkZXN0bGliZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysKKysgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRkZXN0ZGlyIgorKyAgICAgIHNfZGVzdGRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCisgCSAgIyBEZXRlcm1pbmUgdGhlIHByZWZpeCB0aGUgdXNlciBoYXMgYXBwbGllZCB0byBvdXIgZnV0dXJlIGRpci4KKy0JICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICIkZGVzdGRpciIgfCAkU0VEIC1lICJzJSRsaWJkaXJcJCUlImAKKysJICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICJYJHNfZGVzdGRpciIgfCAkWHNlZCAtZSAicyUkZGVzdGxpYmRpclwkJSUiYAorIAorIAkgICMgRG9uJ3QgYWxsb3cgdGhlIHVzZXIgdG8gcGxhY2UgdXMgb3V0c2lkZSBvZiBvdXIgZXhwZWN0ZWQKKyAJICAjIGxvY2F0aW9uIGIvYyB0aGlzIHByZXZlbnRzIGZpbmRpbmcgZGVwZW5kZW50IGxpYnJhcmllcyB0aGF0CitAQCAtMjMxNSw3ICszMDM0LDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAJZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGluc3RuYW1lICRkZXN0ZGlyLyRuYW1lIiAnZXhpdCAkPycKKyAKKyAJIyBNYXliZSBpbnN0YWxsIHRoZSBzdGF0aWMgbGlicmFyeSwgdG9vLgorLQl0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIHN0YXRpY2xpYnM9IiRzdGF0aWNsaWJzICRkaXIvJG9sZF9saWJyYXJ5IgorKwl0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGZ1bmNfYXBwZW5kIHN0YXRpY2xpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKyAJOzsKKyAKKyAgICAgICAqLmxvKQorQEAgLTI1MDMsNyArMzIyMiw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgIHRlc3QgLW4gIiRmdXR1cmVfbGliZGlycyIgJiYgXAorICAgICAgIGZ1bmNfd2FybmluZyAicmVtZW1iZXIgdG8gcnVuIFxgJHByb2duYW1lIC0tZmluaXNoJGZ1dHVyZV9saWJkaXJzJyIKKyAKKy0gICAgaWYgdGVzdCAtbiAiJGN1cnJlbnRfbGliZGlycyIgJiYgJG9wdF9maW5pc2g7IHRoZW4KKysgICAgaWYgdGVzdCAtbiAiJGN1cnJlbnRfbGliZGlycyI7IHRoZW4KKyAgICAgICAjIE1heWJlIGp1c3QgZG8gYSBkcnkgcnVuLgorICAgICAgICRvcHRfZHJ5X3J1biAmJiBjdXJyZW50X2xpYmRpcnM9IiAtbiRjdXJyZW50X2xpYmRpcnMiCisgICAgICAgZXhlY19jbWQ9JyRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1maW5pc2gkY3VycmVudF9saWJkaXJzJworQEAgLTI1MTIsNyArMzIzMSw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgIGZpCisgfQorIAorLXRlc3QgIiRtb2RlIiA9IGluc3RhbGwgJiYgZnVuY19tb2RlX2luc3RhbGwgJHsxKyIkQCJ9CisrdGVzdCAiJG9wdF9tb2RlIiA9IGluc3RhbGwgJiYgZnVuY19tb2RlX2luc3RhbGwgJHsxKyIkQCJ9CisgCisgCisgIyBmdW5jX2dlbmVyYXRlX2Rsc3ltcyBvdXRwdXRuYW1lIG9yaWdpbmF0b3IgcGljX3AKK0BAIC0yNTU5LDYgKzMyNzgsMTggQEAgZXh0ZXJuIFwiQ1wiIHsKKyAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3N0cmljdC1wcm90b3R5cGVzXCIKKyAjZW5kaWYKKyAKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAvKiBFeHRlcm5hbCBzeW1ib2wgZGVjbGFyYXRpb25zIGZvciB0aGUgY29tcGlsZXIuICovXAorICIKKyAKK0BAIC0yNTcwLDIxICszMzAxLDIyIEBAIGV4dGVybiBcIkNcIiB7CisgCSAgIyBBZGQgb3VyIG93biBwcm9ncmFtIG9iamVjdHMgdG8gdGhlIHN5bWJvbCBsaXN0LgorIAkgIHByb2dmaWxlcz1gJEVDSE8gIiRvYmpzJG9sZF9kZXBsaWJzIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKKyAJICBmb3IgcHJvZ2ZpbGUgaW4gJHByb2dmaWxlczsgZG8KKy0JICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkcHJvZ2ZpbGUnIgorLQkgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiROTSAkcHJvZ2ZpbGUgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRwcm9nZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysJICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkZnVuY190b190b29sX2ZpbGVfcmVzdWx0JyIKKysJICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkTk0gJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisgCSAgZG9uZQorIAorIAkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisgCSAgICAkb3B0X2RyeV9ydW4gfHwgeworLQkgICAgICAkRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVAorLQkgICAgICAkTVYgIiRubGlzdCJUICIkbmxpc3QiCisrCSAgICAgIGV2YWwgJyRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUJworKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworIAkgICAgfQorIAkgIGZpCisgCisgCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorIAkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKy0JICAgICAgJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkbmxpc3QiID4gIiRubGlzdCJUCistCSAgICAgICRNViAiJG5saXN0IlQgIiRubGlzdCIKKysJICAgICAgZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkbmxpc3QiID4gIiRubGlzdCJUJworKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworIAkgICAgfQorIAkgIGZpCisgCitAQCAtMjU5MywyMyArMzMyNSwyMyBAQCBleHRlcm4gXCJDXCIgeworIAkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIKKyAJICAgICRvcHRfZHJ5X3J1biB8fCB7CisgCSAgICAgICRSTSAkZXhwb3J0X3N5bWJvbHMKKy0JICAgICAgJHtTRUR9IC1uIC1lICcvXjogQFBST0dSQU1AICQvZCcgLWUgJ3MvXi4qIFwoLipcKSQvXDEvcCcgPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiCisrCSAgICAgIGV2YWwgIiR7U0VEfSAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnICInPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiJworIAkgICAgICBjYXNlICRob3N0IGluCisgCSAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorLSAgICAgICAgICAgICAgICBlY2hvIEVYUE9SVFMgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIgorLSAgICAgICAgICAgICAgICBjYXQgIiRleHBvcnRfc3ltYm9scyIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiIKKysgICAgICAgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKysgICAgICAgICAgICAgICAgZXZhbCAnY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworIAkgICAgICAgIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIH0KKyAJICBlbHNlCisgCSAgICAkb3B0X2RyeV9ydW4gfHwgeworLQkgICAgICAke1NFRH0gLWUgJ3MvXChbXS5bKl4kXVwpL1xcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLycgPCAiJGV4cG9ydF9zeW1ib2xzIiA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiCistCSAgICAgICRHUkVQIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQKKy0JICAgICAgJE1WICIkbmxpc3QiVCAiJG5saXN0IgorKwkgICAgICBldmFsICIke1NFRH0gLWUgJ3MvXChbXS5bKl4kXVwpL1xcXFxcMS9nJyAtZSAncy9eLyAvJyAtZSAncy8kLyQvJyInIDwgIiRleHBvcnRfc3ltYm9scyIgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIicKKysJICAgICAgZXZhbCAnJEdSRVAgLWYgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIgPCAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKysJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKyAJICAgICAgY2FzZSAkaG9zdCBpbgorIAkgICAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorLQkgICAgICAgICAgZWNobyBFWFBPUlRTID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiIKKy0JICAgICAgICAgIGNhdCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIgorKwkgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKysJICAgICAgICAgIGV2YWwgJ2NhdCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKyAJICAgICAgICAgIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIH0KK0BAIC0yNjIwLDEwICszMzUyLDUyIEBAIGV4dGVybiBcIkNcIiB7CisgCSAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRkbHByZWZpbGUnIgorIAkgIGZ1bmNfYmFzZW5hbWUgIiRkbHByZWZpbGUiCisgCSAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLQkgICRvcHRfZHJ5X3J1biB8fCB7CistCSAgICAkRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiCistCSAgICBldmFsICIkTk0gJGRscHJlZmlsZSAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCistCSAgfQorKyAgICAgICAgICBjYXNlICRob3N0IGluCisrCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKysJICAgICAgIyBpZiBhbiBpbXBvcnQgbGlicmFyeSwgd2UgbmVlZCB0byBvYnRhaW4gZGxuYW1lCisrCSAgICAgIGlmIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wICIkZGxwcmVmaWxlIjsgdGhlbgorKwkgICAgICAgIGZ1bmNfdHJfc2ggIiRkbHByZWZpbGUiCisrCSAgICAgICAgZXZhbCAiY3Vycl9sYWZpbGU9XCRsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdCIKKysJICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0iIgorKwkgICAgICAgIGlmIHRlc3QgLW4gIiRjdXJyX2xhZmlsZSIgJiYgZnVuY19sYWxpYl9wICIkY3Vycl9sYWZpbGUiOyB0aGVuCisrCSAgICAgICAgICAjIFVzZSBzdWJzaGVsbCwgdG8gYXZvaWQgY2xvYmJlcmluZyBjdXJyZW50IHZhcmlhYmxlIHZhbHVlcworKwkgICAgICAgICAgZGxwcmVmaWxlX2RsbmFtZT1gc291cmNlICIkY3Vycl9sYWZpbGUiICYmIGVjaG8gIiRkbG5hbWUiYAorKwkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbG5hbWUiIDsgdGhlbgorKwkgICAgICAgICAgICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlX2RsbmFtZSIKKysJICAgICAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKysJICAgICAgICAgIGVsc2UKKysJICAgICAgICAgICAgIyBubyBsYWZpbGUuIHVzZXIgZXhwbGljaXRseSByZXF1ZXN0ZWQgLWRscHJlb3BlbiA8aW1wb3J0IGxpYnJhcnk+LgorKwkgICAgICAgICAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgIiRkbHByZWZpbGUiCisrCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAorKwkgICAgICAgICAgZmkKKysJICAgICAgICBmaQorKwkgICAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisrCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsYmFzZW5hbWUiIDsgdGhlbgorKwkgICAgICAgICAgICBldmFsICckRUNITyAiOiAkZGxwcmVmaWxlX2RsYmFzZW5hbWUiID4+ICIkbmxpc3QiJworKwkgICAgICAgICAgZWxzZQorKwkgICAgICAgICAgICBmdW5jX3dhcm5pbmcgIkNvdWxkIG5vdCBjb21wdXRlIERMTCBuYW1lIGZyb20gJG5hbWUiCisrCSAgICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisrCSAgICAgICAgICBmaQorKwkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrCSAgICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwKKysJICAgICAgICAgICAgJFNFRCAtZSAnL0kgX19pbXAvZCcgLWUgJ3MvSSBfX25tXy9EIC87cy9fbm1fXy8vJyA+PiAnJG5saXN0JyIKKysJICAgICAgICB9CisrCSAgICAgIGVsc2UgIyBub3QgYW4gaW1wb3J0IGxpYgorKwkgICAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisrCSAgICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworKwkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrCSAgICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorKwkgICAgICAgIH0KKysJICAgICAgZmkKKysJICAgIDs7CisrCSAgICAqKQorKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgeworKwkgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisrCSAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrCSAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKysJICAgICAgfQorKwkgICAgOzsKKysgICAgICAgICAgZXNhYworIAlkb25lCisgCisgCSRvcHRfZHJ5X3J1biB8fCB7CitAQCAtMjY2MSwyNiArMzQzNSw5IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICphZGRyZXNzOworIH0gbHRfZGxzeW1saXN0OworLSIKKy0JICBjYXNlICRob3N0IGluCistCSAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCistCSAgICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorLS8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UKKy0gICBydW50aW1lIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbgorLSAgIG9uIHBzZXVkby1yZWxvY3MuICAqLyIKKy0JICAgIGx0X2Rsc3ltX2NvbnN0PSA7OworLQkgICpvc2Y1KikKKy0JICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCistLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YSAqLyIKKy0JICAgIGx0X2Rsc3ltX2NvbnN0PSA7OworLQkgICopCistCSAgICBsdF9kbHN5bV9jb25zdD1jb25zdCA7OworLQkgIGVzYWMKKy0KKy0JICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorLWV4dGVybiAkbHRfZGxzeW1fY29uc3QgbHRfZGxzeW1saXN0CisrZXh0ZXJuIExUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdAorIGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXTsKKy0kbHRfZGxzeW1fY29uc3QgbHRfZGxzeW1saXN0CisrTFRfRExTWU1fQ09OU1QgbHRfZGxzeW1saXN0CisgbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KKyB7XAorICAgeyBcIiRteV9vcmlnaW5hdG9yXCIsICh2b2lkICopIDAgfSwiCitAQCAtMjczNiw3ICszNDkzLDcgQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAJZm9yIGFyZyBpbiAkTFRDRkxBR1M7IGRvCisgCSAgY2FzZSAkYXJnIGluCisgCSAgLXBpZSB8IC1mcGllIHwgLWZQSUUpIDs7CistCSAgKikgc3ltdGFiX2NmbGFncz0iJHN5bXRhYl9jZmxhZ3MgJGFyZyIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBzeW10YWJfY2ZsYWdzICIgJGFyZyIgOzsKKyAJICBlc2FjCisgCWRvbmUKKyAKK0BAIC0yNzk2LDkgKzM1NTMsMTEgQEAgZnVuY193aW4zMl9saWJpZCAoKQorICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiCisgICAgIDs7CisgICAqYXJcIGFyY2hpdmUqKSAjIGNvdWxkIGJlIGFuIGltcG9ydCwgb3Igc3RhdGljCistICAgIGlmICRPQkpEVU1QIC1mICIkMSIgfCAkU0VEIC1lICcxMHEnIDI+L2Rldi9udWxsIHwKKy0gICAgICAgJEVHUkVQICdmaWxlIGZvcm1hdCAocGUtaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJyA+L2Rldi9udWxsOyB0aGVuCistICAgICAgd2luMzJfbm1yZXM9YCROTSAtZiBwb3NpeCAtQSAiJDEiIHwKKysgICAgIyBLZWVwIHRoZSBlZ3JlcCBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QuCisrICAgIGlmIGV2YWwgJE9CSkRVTVAgLWYgJDEgfCAkU0VEIC1lICcxMHEnIDI+L2Rldi9udWxsIHwKKysgICAgICAgJEVHUkVQICdmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknID4vZGV2L251bGw7IHRoZW4KKysgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgd2luMzJfbm1yZXM9YGV2YWwgJE5NIC1mIHBvc2l4IC1BIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIHwKKyAJJFNFRCAtbiAtZSAnCisgCSAgICAxLDEwMHsKKyAJCS8gSSAveworQEAgLTI4MjcsNiArMzU4NiwxMzEgQEAgZnVuY193aW4zMl9saWJpZCAoKQorICAgJEVDSE8gIiR3aW4zMl9saWJpZF90eXBlIgorIH0KKyAKKysjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYiBBUkcKKysjCisrIyBQbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZQorKyMgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisrIyBpbXBvcnQgbGlicmFyeSBBUkcuCisrIyBJbnZva2VkIGJ5IGV2YWwnaW5nIHRoZSBsaWJ0b29sIHZhcmlhYmxlCisrIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlCisrIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKKytmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gJERMTFRPT0wgLS1pZGVudGlmeS1zdHJpY3QgLS1pZGVudGlmeSAiJDEiYAorK30KKysKKysjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlIFNFQ1RJT05fTkFNRSBMSUJOQU1FcworKyMKKysjIFRoZSBpcyB0aGUgY29yZSBvZiBhIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIG9mIGEKKysjIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIG5hbWUgb2YgdGhlCisrIyBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgaW1wb3J0IGxpYnJhcnkgTElCTkFNRS4KKysjCisrIyBTRUNUSU9OX05BTUUgaXMgZWl0aGVyIC5pZGF0YSQ2IG9yIC5pZGF0YSQ3LCBkZXBlbmRpbmcKKysjIG9uIHRoZSBwbGF0Zm9ybSBhbmQgY29tcGlsZXIgdGhhdCBjcmVhdGVkIHRoZSBpbXBsaWIuCisrIworKyMgRWNob3MgdGhlIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlCisrIyBzcGVjaWZpZWQgaW1wb3J0IGxpYnJhcnkuCisrZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBtYXRjaF9saXRlcmFsPWAkRUNITyAiJDEiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAorKyAgJE9CSkRVTVAgLXMgLS1zZWN0aW9uICIkMSIgIiQyIiAyPi9kZXYvbnVsbCB8CisrICAgICRTRUQgJy9eQ29udGVudHMgb2Ygc2VjdGlvbiAnIiRtYXRjaF9saXRlcmFsIic6L3sKKysgICAgICAjIFBsYWNlIG1hcmtlciBhdCBiZWdpbm5pbmcgb2YgYXJjaGl2ZSBtZW1iZXIgZGxsbmFtZSBzZWN0aW9uCisrICAgICAgcy8uKi89PT09TUFSSz09PT0vCisrICAgICAgcAorKyAgICAgIGQKKysgICAgfQorKyAgICAjIFRoZXNlIGxpbmVzIGNhbiBzb21ldGltZXMgYmUgbG9uZ2VyIHRoYW4gNDMgY2hhcmFjdGVycywgYnV0CisrICAgICMgYXJlIGFsd2F5cyB1bmludGVyZXN0aW5nCisrICAgIC86WwkgXSpmaWxlIGZvcm1hdCBwZVtpXVx7LDFcfS0vZAorKyAgICAvXkluIGFyY2hpdmUgW146XSo6L2QKKysgICAgIyBFbnN1cmUgbWFya2VyIGlzIHByaW50ZWQKKysgICAgL149PT09TUFSSz09PT0vcAorKyAgICAjIFJlbW92ZSBhbGwgbGluZXMgd2l0aCBsZXNzIHRoYW4gNDMgY2hhcmFjdGVycworKyAgICAvXi5cezQzXH0vIWQKKysgICAgIyBGcm9tIHJlbWFpbmluZyBsaW5lcywgcmVtb3ZlIGZpcnN0IDQzIGNoYXJhY3RlcnMKKysgICAgcy9eLlx7NDNcfS8vJyB8CisrICAgICRTRUQgLW4gJworKyAgICAgICMgSm9pbiBtYXJrZXIgYW5kIGFsbCBsaW5lcyB1bnRpbCBuZXh0IG1hcmtlciBpbnRvIGEgc2luZ2xlIGxpbmUKKysgICAgICAvXj09PT1NQVJLPT09PS8gYiBwYXJhCisrICAgICAgSAorKyAgICAgICQgYiBwYXJhCisrICAgICAgYgorKyAgICAgIDpwYXJhCisrICAgICAgeAorKyAgICAgIHMvXG4vL2cKKysgICAgICAjIFJlbW92ZSB0aGUgbWFya2VyCisrICAgICAgcy9ePT09PU1BUks9PT09Ly8KKysgICAgICAjIFJlbW92ZSB0cmFpbGluZyBkb3RzIGFuZCB3aGl0ZXNwYWNlCisrICAgICAgcy9bXC4gXHRdKiQvLworKyAgICAgICMgUHJpbnQKKysgICAgICAvLi9wJyB8CisrICAgICMgd2Ugbm93IGhhdmUgYSBsaXN0LCBvbmUgZW50cnkgcGVyIGxpbmUsIG9mIHRoZSBzdHJpbmdpZmllZAorKyAgICAjIGNvbnRlbnRzIG9mIHRoZSBhcHByb3ByaWF0ZSBzZWN0aW9uIG9mIGFsbCBtZW1iZXJzIG9mIHRoZQorKyAgICAjIGFyY2hpdmUgd2hpY2ggcG9zc2VzcyB0aGF0IHNlY3Rpb24uIEhldXJpc3RpYzogZWxpbWluYXRlCisrICAgICMgYWxsIHRob3NlIHdoaWNoIGhhdmUgYSBmaXJzdCBvciBzZWNvbmQgY2hhcmFjdGVyIHRoYXQgaXMKKysgICAgIyBhICcuJyAodGhhdCBpcywgb2JqZHVtcCdzIHJlcHJlc2VudGF0aW9uIG9mIGFuIHVucHJpbnRhYmxlCisrICAgICMgY2hhcmFjdGVyLikgVGhpcyBzaG91bGQgd29yayBmb3IgYWxsIGFyY2hpdmVzIHdpdGggbGVzcyB0aGFuCisrICAgICMgMHgzMDJmIGV4cG9ydHMgLS0gYnV0IHdpbGwgZmFpbCBmb3IgRExMcyB3aG9zZSBuYW1lIGFjdHVhbGx5CisrICAgICMgYmVnaW5zIHdpdGggYSBsaXRlcmFsICcuJyBvciBhIHNpbmdsZSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkKKysgICAgIyBhICcuJy4KKysgICAgIworKyAgICAjIE9mIHRob3NlIHRoYXQgcmVtYWluLCBwcmludCB0aGUgZmlyc3Qgb25lLgorKyAgICAkU0VEIC1lICcvXlwuL2Q7L14uXC4vZDtxJworK30KKysKKysjIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgQVJHCisrIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCisrIyBBUkcgaXMgYSBHTlUvYmludXRpbHMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKKysjIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCisrZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcD1gJE5NICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiB8IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwgJEVHUkVQICcgKF9oZWFkX1tBLVphLXowLTlfXStfW2FkXWwqfFtBLVphLXowLTlfXStfW2FkXWwqX2luYW1lKSQnYAorKyAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcCIKKyt9CisrCisrIyBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgQVJHCisrIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCisrIyBBUkcgaXMgYW4gTVMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKKysjIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCisrZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRHUkVQICdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUidgCisrICB0ZXN0IC1uICIkZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXAiCisrfQorKworKyMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrIEFSRworKyMgUGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUKKysjIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAorKyMgaW1wb3J0IGxpYnJhcnkgQVJHLgorKyMKKysjIFRoaXMgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gaXMgZm9yIHVzZSB3aGVuICRETExUT09MCisrIyBkb2VzIG5vdCBzdXBwb3J0IHRoZSAtLWlkZW50aWZ5LXN0cmljdCBvcHRpb24uCisrIyBJbnZva2VkIGJ5IGV2YWwnaW5nIHRoZSBsaWJ0b29sIHZhcmlhYmxlCisrIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlCisrIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKKytmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBpZiBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICIkMSIgOyB0aGVuCisrICAgICMgYmludXRpbHMgaW1wb3J0IGxpYnJhcnkKKysgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICcuaWRhdGEkNycgIiQxImAKKysgIGVsaWYgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICIkMSIgOyB0aGVuCisrICAgICMgbXMtZ2VuZXJhdGVkIGltcG9ydCBsaWJyYXJ5CisrICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAnLmlkYXRhJDYnICIkMSJgCisrICBlbHNlCisrICAgICMgdW5rbm93bgorKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD0iIgorKyAgZmkKKyt9CisgCisgCisgIyBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSBkaXIgb2xkbGliCitAQCAtMjkxNyw3ICszODAxLDcgQEAgZnVuY19leHRyYWN0X2FyY2hpdmVzICgpCisgCSAgICBkYXJ3aW5fZmlsZT0KKyAJICAgIGRhcndpbl9maWxlcz0KKyAJICAgIGZvciBkYXJ3aW5fZmlsZSBpbiAkZGFyd2luX2ZpbGVsaXN0OyBkbworLQkgICAgICBkYXJ3aW5fZmlsZXM9YGZpbmQgdW5mYXQtJCQgLW5hbWUgJGRhcndpbl9maWxlIC1wcmludCB8ICROTDJTUGAKKysJICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAorIAkgICAgICAkTElQTyAtY3JlYXRlIC1vdXRwdXQgIiRkYXJ3aW5fZmlsZSIgJGRhcndpbl9maWxlcworIAkgICAgZG9uZSAjICRkYXJ3aW5fZmlsZWxpc3QKKyAJICAgICRSTSAtcmYgdW5mYXQtJCQKK0BAIC0yOTMyLDcgKzM4MTYsNyBAQCBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgKCkKKyAgICAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgorIAk7OworICAgICAgIGVzYWMKKy0gICAgICBteV9vbGRvYmpzPSIkbXlfb2xkb2JqcyAiYGZpbmQgJG15X3hkaXIgLW5hbWUgXCouJG9iamV4dCAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgJE5MMlNQYAorKyAgICAgIG15X29sZG9ianM9IiRteV9vbGRvYmpzICJgZmluZCAkbXlfeGRpciAtbmFtZSBcKi4kb2JqZXh0IC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAorICAgICBkb25lCisgCisgICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQ9IiRteV9vbGRvYmpzIgorQEAgLTMwMTQsNyArMzg5OCwxMTAgQEAgZnVuY19mYWxsYmFja19lY2hvICgpCisgX0xURUNIT19FT0YnCisgfQorICAgICBFQ0hPPVwiJHFFQ0hPXCIKKy0gIGZpXAorKyAgZmkKKysKKysjIFZlcnkgYmFzaWMgb3B0aW9uIHBhcnNpbmcuIFRoZXNlIG9wdGlvbnMgYXJlIChhKSBzcGVjaWZpYyB0bworKyMgdGhlIGxpYnRvb2wgd3JhcHBlciwgKGIpIGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUgd3JhcHBlcgorKyMgL3NjcmlwdC8gYW5kIHRoZSB3cmFwcGVyIC9leGVjdXRhYmxlLyB3aGljaCBpcyB1c2VkIG9ubHkgb24KKysjIHdpbmRvd3MgcGxhdGZvcm1zLCBhbmQgKGMpIGFsbCBiZWdpbiB3aXRoIHRoZSBzdHJpbmcgIi0tbHQtIgorKyMgKGFwcGxpY2F0aW9uIHByb2dyYW1zIGFyZSB1bmxpa2VseSB0byBoYXZlIG9wdGlvbnMgd2hpY2ggbWF0Y2gKKysjIHRoaXMgcGF0dGVybikuCisrIworKyMgVGhlcmUgYXJlIG9ubHkgdHdvIHN1cHBvcnRlZCBvcHRpb25zOiAtLWx0LWRlYnVnIGFuZAorKyMgLS1sdC1kdW1wLXNjcmlwdC4gVGhlcmUgaXMsIGRlbGliZXJhdGVseSwgbm8gLS1sdC1oZWxwLgorKyMKKysjIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGlzIHBhcnNpbmcgZnVuY3Rpb24gc2hvdWxkIGJlIHRoZQorKyMgc2NyaXB0J3MgJDAgdmFsdWUsIGZvbGxvd2VkIGJ5ICIkQCIuCisrbHRfb3B0aW9uX2RlYnVnPQorK2Z1bmNfcGFyc2VfbHRfb3B0aW9ucyAoKQorK3sKKysgIGx0X3NjcmlwdF9hcmcwPVwkMAorKyAgc2hpZnQKKysgIGZvciBsdF9vcHQKKysgIGRvCisrICAgIGNhc2UgXCJcJGx0X29wdFwiIGluCisrICAgIC0tbHQtZGVidWcpIGx0X29wdGlvbl9kZWJ1Zz0xIDs7CisrICAgIC0tbHQtZHVtcC1zY3JpcHQpCisrICAgICAgICBsdF9kdW1wX0Q9XGBcJEVDSE8gXCJYXCRsdF9zY3JpcHRfYXJnMFwiIHwgJFNFRCAtZSAncy9eWC8vJyAtZSAncyUvW14vXSokJSUnXGAKKysgICAgICAgIHRlc3QgXCJYXCRsdF9kdW1wX0RcIiA9IFwiWFwkbHRfc2NyaXB0X2FyZzBcIiAmJiBsdF9kdW1wX0Q9LgorKyAgICAgICAgbHRfZHVtcF9GPVxgXCRFQ0hPIFwiWFwkbHRfc2NyaXB0X2FyZzBcIiB8ICRTRUQgLWUgJ3MvXlgvLycgLWUgJ3MlXi4qLyUlJ1xgCisrICAgICAgICBjYXQgXCJcJGx0X2R1bXBfRC9cJGx0X2R1bXBfRlwiCisrICAgICAgICBleGl0IDAKKysgICAgICA7OworKyAgICAtLWx0LSopCisrICAgICAgICBcJEVDSE8gXCJVbnJlY29nbml6ZWQgLS1sdC0gb3B0aW9uOiAnXCRsdF9vcHQnXCIgMT4mMgorKyAgICAgICAgZXhpdCAxCisrICAgICAgOzsKKysgICAgZXNhYworKyAgZG9uZQorKworKyAgIyBQcmludCB0aGUgZGVidWcgYmFubmVyIGltbWVkaWF0ZWx5OgorKyAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKysgICAgZWNobyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IGxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT05cIiAxPiYyCisrICBmaQorK30KKysKKysjIFVzZWQgd2hlbiAtLWx0LWRlYnVnLiBQcmludHMgaXRzIGFyZ3VtZW50cyB0byBzdGRvdXQKKysjIChyZWRpcmVjdGlvbiBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlcikKKytmdW5jX2x0X2R1bXBfYXJncyAoKQorK3sKKysgIGx0X2R1bXBfYXJnc19OPTE7CisrICBmb3IgbHRfYXJnCisrICBkbworKyAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2W1wkbHRfZHVtcF9hcmdzX05dOiBcJGx0X2FyZ1wiCisrICAgIGx0X2R1bXBfYXJnc19OPVxgZXhwciBcJGx0X2R1bXBfYXJnc19OICsgMVxgCisrICBkb25lCisrfQorKworKyMgQ29yZSBmdW5jdGlvbiBmb3IgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KKytmdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlICgpCisreworKyIKKysgIGNhc2UgJGhvc3QgaW4KKysgICMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cworKyAgKi0qLW1pbmd3IHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKysgICAgJEVDSE8gIlwKKysgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorKyAgICAgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndlswXTogXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIDE+JjIKKysgICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgorKyAgICAgIGZpCisrICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisrIgorKyAgICA7OworKworKyAgKikKKysgICAgJEVDSE8gIlwKKysgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorKyAgICAgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndlswXTogXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDE+JjIKKysgICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgorKyAgICAgIGZpCisrICAgICAgZXhlYyBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisrIgorKyAgICA7OworKyAgZXNhYworKyAgJEVDSE8gIlwKKysgICAgICBcJEVDSE8gXCJcJDA6IGNhbm5vdCBleGVjIFwkcHJvZ3JhbSBcJCpcIiAxPiYyCisrICAgICAgZXhpdCAxCisrfQorKworKyMgQSBmdW5jdGlvbiB0byBlbmNhcHN1bGF0ZSBsYXVuY2hpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbgorKyMgU3RyaXBzIG9wdGlvbnMgaW4gdGhlIC0tbHQtKiBuYW1lc3BhY2UgZnJvbSBcJEAgYW5kCisrIyBsYXVuY2hlcyB0YXJnZXQgYXBwbGljYXRpb24gd2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KKytmdW5jX2V4ZWNfcHJvZ3JhbSAoKQorK3sKKysgIGZvciBsdF93cl9hcmcKKysgIGRvCisrICAgIGNhc2UgXCRsdF93cl9hcmcgaW4KKysgICAgLS1sdC0qKSA7OworKyAgICAqKSBzZXQgeCBcIlwkQFwiIFwiXCRsdF93cl9hcmdcIjsgc2hpZnQ7OworKyAgICBlc2FjCisrICAgIHNoaWZ0CisrICBkb25lCisrICBmdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlIFwkezErXCJcJEBcIn0KKyt9CisrCisrICAjIFBhcnNlIG9wdGlvbnMKKysgIGZ1bmNfcGFyc2VfbHRfb3B0aW9ucyBcIlwkMFwiIFwkezErXCJcJEBcIn0KKyAKKyAgICMgRmluZCB0aGUgZGlyZWN0b3J5IHRoYXQgdGhpcyBzY3JpcHQgbGl2ZXMgaW4uCisgICB0aGlzZGlyPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJS9bXi9dKiQlJSdcYAorQEAgLTMwNzgsNyArNDA2NSw3IEBAIF9MVEVDSE9fRU9GJworIAorICAgICAjIHJlbGluayBleGVjdXRhYmxlIGlmIG5lY2Vzc2FyeQorICAgICBpZiB0ZXN0IC1uIFwiXCRyZWxpbmtfY29tbWFuZFwiOyB0aGVuCistICAgICAgaWYgcmVsaW5rX2NvbW1hbmRfb3V0cHV0PVxgZXZhbCBcIlwkcmVsaW5rX2NvbW1hbmRcIiAyPiYxXGA7IHRoZW4gOgorKyAgICAgIGlmIHJlbGlua19jb21tYW5kX291dHB1dD1cYGV2YWwgXCRyZWxpbmtfY29tbWFuZCAyPiYxXGA7IHRoZW4gOgorICAgICAgIGVsc2UKKyAJJEVDSE8gXCJcJHJlbGlua19jb21tYW5kX291dHB1dFwiID4mMgorIAkkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKK0BAIC0zMTAyLDYgKzQwODksMTggQEAgX0xURUNIT19FT0YnCisgCisgICBpZiB0ZXN0IC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB0aGVuIgorIAorKwkjIGZpeHVwIHRoZSBkbGwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLgorKwkjCisrCSMgRml4IHRoZSBETEwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLiAgRG8gdGhpcyBiZWZvcmUgcHJlcGVuZGluZworKwkjIHRvIHNobGlicGF0aCwgYmVjYXVzZSBvbiBXaW5kb3dzLCBib3RoIGFyZSBQQVRIIGFuZCB1bmluc3RhbGxlZAorKwkjIGxpYnJhcmllcyBtdXN0IGNvbWUgZmlyc3QuCisrCWlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorKwkgICRFQ0hPICJcCisrICAgICMgQWRkIHRoZSBkbGwgc2VhcmNoIHBhdGggY29tcG9uZW50cyB0byB0aGUgZXhlY3V0YWJsZSBQQVRICisrICAgIFBBVEg9JGRsbHNlYXJjaHBhdGg6XCRQQVRICisrIgorKwlmaQorKworIAkjIEV4cG9ydCBvdXIgc2hsaWJwYXRoX3ZhciBpZiB3ZSBoYXZlIG9uZS4KKyAJaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorIAkgICRFQ0hPICJcCitAQCAtMzExNiwzNSArNDExNSwxMCBAQCBfTFRFQ0hPX0VPRicKKyAiCisgCWZpCisgCistCSMgZml4dXAgdGhlIGRsbCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uCistCWlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorLQkgICRFQ0hPICJcCistICAgICMgQWRkIHRoZSBkbGwgc2VhcmNoIHBhdGggY29tcG9uZW50cyB0byB0aGUgZXhlY3V0YWJsZSBQQVRICistICAgIFBBVEg9JGRsbHNlYXJjaHBhdGg6XCRQQVRICistIgorLQlmaQorLQorIAkkRUNITyAiXAorICAgICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisgICAgICAgIyBSdW4gdGhlIGFjdHVhbCBwcm9ncmFtIHdpdGggb3VyIGFyZ3VtZW50cy4KKy0iCistCWNhc2UgJGhvc3QgaW4KKy0JIyBCYWNrc2xhc2hlcyBzZXBhcmF0ZSBkaXJlY3RvcmllcyBvbiBwbGFpbiB3aW5kb3dzCistCSotKi1taW5ndyB8ICotKi1vczIqIHwgKi1jZWdjYyopCistCSAgJEVDSE8gIlwKKy0gICAgICBleGVjIFwiXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKy0iCistCSAgOzsKKy0KKy0JKikKKy0JICAkRUNITyAiXAorLSAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorLSIKKy0JICA7OworLQllc2FjCistCSRFQ0hPICJcCistICAgICAgXCRFQ0hPIFwiXCQwOiBjYW5ub3QgZXhlYyBcJHByb2dyYW0gXCQqXCIgMT4mMgorLSAgICAgIGV4aXQgMQorKyAgICAgIGZ1bmNfZXhlY19wcm9ncmFtIFwkezErXCJcJEBcIn0KKyAgICAgZmkKKyAgIGVsc2UKKyAgICAgIyBUaGUgcHJvZ3JhbSBkb2Vzbid0IGV4aXN0LgorQEAgLTMxNTgsMTY2ICs0MTMyLDYgQEAgZmlcCisgfQorIAorIAorLSMgZnVuY190b19ob3N0X3BhdGggYXJnCistIworLSMgQ29udmVydCBwYXRocyB0byBob3N0IGZvcm1hdCB3aGVuIHVzZWQgd2l0aCBidWlsZCB0b29scy4KKy0jIEludGVuZGVkIGZvciB1c2Ugd2l0aCAibmF0aXZlIiBtaW5ndyAod2hlcmUgbGlidG9vbCBpdHNlbGYKKy0jIGlzIHJ1bm5pbmcgdW5kZXIgdGhlIG1zeXMgc2hlbGwpLCBvciBpbiB0aGUgZm9sbG93aW5nIGNyb3NzLQorLSMgYnVpbGQgZW52aXJvbm1lbnRzOgorLSMgICAgJGJ1aWxkICAgICAgICAgICRob3N0CistIyAgICBtaW5ndyAobXN5cykgICAgbWluZ3cgIFtlLmcuIG5hdGl2ZV0KKy0jICAgIGN5Z3dpbiAgICAgICAgICBtaW5ndworLSMgICAgKm5peCArIHdpbmUgICAgIG1pbmd3CistIyB3aGVyZSB3aW5lIGlzIGVxdWlwcGVkIHdpdGggdGhlIGB3aW5lcGF0aCcgZXhlY3V0YWJsZS4KKy0jIEluIHRoZSBuYXRpdmUgbWluZ3cgY2FzZSwgdGhlIChtc3lzKSBzaGVsbCBhdXRvbWF0aWNhbGx5CistIyBjb252ZXJ0cyBwYXRocyBmb3IgYW55IG5vbi1tc3lzIGFwcGxpY2F0aW9ucyBpdCBsYXVuY2hlcywKKy0jIGJ1dCB0aGF0IGZhY2lsaXR5IGlzbid0IGF2YWlsYWJsZSBmcm9tIGluc2lkZSB0aGUgY3dyYXBwZXIuCistIyBTaW1pbGFyIGFjY29tbW9kYXRpb25zIGFyZSBuZWNlc3NhcnkgZm9yICRob3N0IG1pbmd3IGFuZAorLSMgJGJ1aWxkIGN5Z3dpbi4gIENhbGxpbmcgdGhpcyBmdW5jdGlvbiBkb2VzIG5vIGhhcm0gZm9yIG90aGVyCistIyAkaG9zdC8kYnVpbGQgY29tYmluYXRpb25zIG5vdCBsaXN0ZWQgYWJvdmUuCistIworLSMgQVJHIGlzIHRoZSBwYXRoIChvbiAkYnVpbGQpIHRoYXQgc2hvdWxkIGJlIGNvbnZlcnRlZCB0bworLSMgdGhlIHByb3BlciByZXByZXNlbnRhdGlvbiBmb3IgJGhvc3QuIFRoZSByZXN1bHQgaXMgc3RvcmVkCistIyBpbiAkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorLWZ1bmNfdG9faG9zdF9wYXRoICgpCisteworLSAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKy0gIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorLSAgICBjYXNlICRob3N0IGluCistICAgICAgKm1pbmd3KiApCistICAgICAgICBsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCistICAgICAgICBjYXNlICRidWlsZCBpbgorLSAgICAgICAgICAqbWluZ3cqICkgIyBhY3R1YWxseSwgbXN5cworLSAgICAgICAgICAgICMgYXdrd2FyZDogY21kIGFwcGVuZHMgc3BhY2VzIHRvIHJlc3VsdAorLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gKCBjbWQgLy9jIGVjaG8gIiQxIiApIDI+L2Rldi9udWxsIHwKKy0gICAgICAgICAgICAgICRTRUQgLWUgJ3MvWyBdKiQvLycgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKy0gICAgICAgICAgICA7OworLSAgICAgICAgICAqY3lnd2luKiApCistICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBjeWdwYXRoIC13ICIkMSIgfAorLQkgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCistICAgICAgICAgICAgOzsKKy0gICAgICAgICAgKiApCistICAgICAgICAgICAgIyBVbmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2VzIG5vdCBleGl0IHdpdGggYSBub24temVybworLSAgICAgICAgICAgICMgZXJyb3IgY29kZSwgc28gd2UgYXJlIGZvcmNlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2YKKy0gICAgICAgICAgICAjIHN0ZG91dC4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSBjb21tYW5kIGlzIG5vdAorLSAgICAgICAgICAgICMgZm91bmQsIHRoZSBzaGVsbCB3aWxsIHNldCBhbiBleGl0IGNvZGUgb2YgMTI3IGFuZCBwcmludAorLSAgICAgICAgICAgICMgKmFuIGVycm9yIG1lc3NhZ2UqIHRvIHN0ZG91dC4gU28gd2UgbXVzdCBjaGVjayBmb3IgYm90aAorLSAgICAgICAgICAgICMgZXJyb3IgY29kZSBvZiB6ZXJvIEFORCBub24tZW1wdHkgc3Rkb3V0LCB3aGljaCBleHBsYWlucworLSAgICAgICAgICAgICMgdGhlIG9kZCBjb25zdHJ1Y3Rpb246CistICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT1gd2luZXBhdGggLXcgIiQxIiAyPi9kZXYvbnVsbGAKKy0gICAgICAgICAgICBpZiB0ZXN0ICIkPyIgLWVxIDAgJiYgdGVzdCAtbiAiJHtmdW5jX3RvX2hvc3RfcGF0aF90bXAxfSI7IHRoZW4KKy0gICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gJEVDSE8gIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiB8CistICAgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAjIEFsbG93IHdhcm5pbmcgYmVsb3cuCistICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9CistICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICA7OworLSAgICAgICAgZXNhYworLSAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIgOyB0aGVuCistICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgaG9zdCBwYXRoIGNvcnJlc3BvbmRpbmcgdG8iCistICAgICAgICAgIGZ1bmNfZXJyb3IgIiAgXGAkMSciCistICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorLSAgICAgICAgICAjIEZhbGxiYWNrOgorLSAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorLSAgICAgICAgZmkKKy0gICAgICAgIDs7CistICAgIGVzYWMKKy0gIGZpCistfQorLSMgZW5kOiBmdW5jX3RvX2hvc3RfcGF0aAorLQorLSMgZnVuY190b19ob3N0X3BhdGhsaXN0IGFyZworLSMKKy0jIENvbnZlcnQgcGF0aGxpc3RzIHRvIGhvc3QgZm9ybWF0IHdoZW4gdXNlZCB3aXRoIGJ1aWxkIHRvb2xzLgorLSMgU2VlIGZ1bmNfdG9faG9zdF9wYXRoKCksIGFib3ZlLiBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIHRoZQorLSMgZm9sbG93aW5nICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbnMgKGJ1dCBkb2VzIG5vIGhhcm0gZm9yCistIyBjb21iaW5hdGlvbnMgbm90IGxpc3RlZCBoZXJlKToKKy0jICAgICRidWlsZCAgICAgICAgICAkaG9zdAorLSMgICAgbWluZ3cgKG1zeXMpICAgIG1pbmd3ICBbZS5nLiBuYXRpdmVdCistIyAgICBjeWd3aW4gICAgICAgICAgbWluZ3cKKy0jICAgICpuaXggKyB3aW5lICAgICBtaW5ndworLSMKKy0jIFBhdGggc2VwYXJhdG9ycyBhcmUgYWxzbyBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvCistIyAkaG9zdCBmb3JtYXQuIElmIEFSRyBiZWdpbnMgb3IgZW5kcyB3aXRoIGEgcGF0aCBzZXBhcmF0b3IKKy0jIGNoYXJhY3RlciwgaXQgaXMgcHJlc2VydmVkIChidXQgY29udmVydGVkIHRvICRob3N0IGZvcm1hdCkKKy0jIG9uIG91dHB1dC4KKy0jCistIyBBUkcgaXMgYSBwYXRobGlzdCAob24gJGJ1aWxkKSB0aGF0IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8KKy0jIHRoZSBwcm9wZXIgcmVwcmVzZW50YXRpb24gb24gJGhvc3QuIFRoZSByZXN1bHQgaXMgc3RvcmVkCistIyBpbiAkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdC4KKy1mdW5jX3RvX2hvc3RfcGF0aGxpc3QgKCkKKy17CistICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIkMSIKKy0gIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorLSAgICBjYXNlICRob3N0IGluCistICAgICAgKm1pbmd3KiApCistICAgICAgICBsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCistICAgICAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20KKy0gICAgICAgICMgQVJHLiBtc3lzIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlLCBjeWdwYXRoIHR1cm5zIHRoZW0KKy0gICAgICAgICMgaW50byAnLjsnIGFuZCAnOy4nLCBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCistCWZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCistICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CistICAgICAgICBjYXNlICRidWlsZCBpbgorLSAgICAgICAgICAqbWluZ3cqICkgIyBBY3R1YWxseSwgbXN5cy4KKy0gICAgICAgICAgICAjIEF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQuCistICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD1gCistCSAgICAgICggY21kIC8vYyBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiICkgMj4vZGV2L251bGwgfAorLQkgICAgICAkU0VEIC1lICdzL1sgXSokLy8nIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCistICAgICAgICAgICAgOzsKKy0gICAgICAgICAgKmN5Z3dpbiogKQorLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9YGN5Z3BhdGggLXcgLXAgIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMSIgfAorLSAgICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorLSAgICAgICAgICAgIDs7CistICAgICAgICAgICogKQorLSAgICAgICAgICAgICMgdW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lc24ndCBjb252ZXJ0IHBhdGhsaXN0cworLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IiIKKy0gICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3Rfb2xkSUZTPSRJRlMKKy0gICAgICAgICAgICBJRlM9OgorLSAgICAgICAgICAgIGZvciBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfZiBpbiAkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEgOyBkbworLSAgICAgICAgICAgICAgSUZTPSRmdW5jX3RvX2hvc3RfcGF0aGxpc3Rfb2xkSUZTCistICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZnVuY190b19ob3N0X3BhdGhsaXN0X2YiIDsgdGhlbgorLSAgICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9mIgorLSAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IiA7IHRoZW4KKy0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCIgOyB0aGVuCistICAgICAgICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorLSAgICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQgIjskZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorLSAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGRvbmUKKy0gICAgICAgICAgICBJRlM9JGZ1bmNfdG9faG9zdF9wYXRobGlzdF9vbGRJRlMKKy0gICAgICAgICAgICA7OworLSAgICAgICAgZXNhYworLSAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiOyB0aGVuCistICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGhvc3QgcGF0aChzKSBjb3JyZXNwb25kaW5nIHRvIgorLSAgICAgICAgICBmdW5jX2Vycm9yICIgIFxgJDEnIgorLSAgICAgICAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKy0gICAgICAgICAgIyBGYWxsYmFjay4gVGhpcyBtYXkgYnJlYWsgaWYgJDEgY29udGFpbnMgRE9TLXN0eWxlIGRyaXZlCistICAgICAgICAgICMgc3BlY2lmaWNhdGlvbnMuIFRoZSBmaXggaXMgbm90IHRvIGNvbXBsaWNhdGUgdGhlIGV4cHJlc3Npb24KKy0gICAgICAgICAgIyBiZWxvdywgYnV0IGZvciB0aGUgdXNlciB0byBwcm92aWRlIGEgd29ya2luZyB3aW5lIGluc3RhbGxhdGlvbgorLSAgICAgICAgICAjIHdpdGggd2luZXBhdGggc28gdGhhdCBwYXRoIHRyYW5zbGF0aW9uIGluIHRoZSBjcm9zcy10by1taW5ndworLSAgICAgICAgICAjIGNhc2Ugd29ya3MgcHJvcGVybHkuCistICAgICAgICAgIGx0X3JlcGxhY2VfcGF0aHNlcF9uaXhfdG9fZG9zPSJzfDp8O3xnIgorLSAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiIHxcCistICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3JlcGxhY2VfcGF0aHNlcF9uaXhfdG9fZG9zImAKKy0gICAgICAgIGZpCistICAgICAgICAjIE5vdywgYWRkIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvcnMgYmFjaworLSAgICAgICAgY2FzZSAiJDEiIGluCistICAgICAgICAgIDoqICkgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iOyRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IgorLSAgICAgICAgICAgIDs7CistICAgICAgICBlc2FjCistICAgICAgICBjYXNlICIkMSIgaW4KKy0gICAgICAgICAgKjogKSBmdW5jX2FwcGVuZCBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0ICI7IgorLSAgICAgICAgICAgIDs7CistICAgICAgICBlc2FjCistICAgICAgICA7OworLSAgICBlc2FjCistICBmaQorLX0KKy0jIGVuZDogZnVuY190b19ob3N0X3BhdGhsaXN0CistCisgIyBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisgIyBlbWl0IHRoZSBzb3VyY2UgY29kZSBmb3IgYSB3cmFwcGVyIGV4ZWN1dGFibGUgb24gc3Rkb3V0CisgIyBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UKK0BAIC0zMzM0LDEwICs0MTQ4LDYgQEAgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYyAoKQorIAorICAgIFRoaXMgd3JhcHBlciBleGVjdXRhYmxlIHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyAgICBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCistCistICAgQ3VycmVudGx5LCBpdCBzaW1wbHkgZXhlY3MgdGhlIHdyYXBwZXIgKnNjcmlwdCogIiRTSEVMTCAkb3V0cHV0IiwKKy0gICBidXQgY291bGQgZXZlbnR1YWxseSBhYnNvcmIgYWxsIG9mIHRoZSBzY3JpcHRzIGZ1bmN0aW9uYWxpdHkgYW5kCistICAgZXhlYyAkb2JqZGlyLyRvdXRwdXRuYW1lIGRpcmVjdGx5LgorICovCisgRU9GCisgCSAgICBjYXQgPDwiRU9GIgorQEAgLTM0NjIsMjIgKzQyNzIsMTMgQEAgaW50IHNldGVudiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisgICBpZiAoc3RhbGUpIHsgZnJlZSAoKHZvaWQgKikgc3RhbGUpOyBzdGFsZSA9IDA7IH0gXAorIH0gd2hpbGUgKDApCisgCistI3VuZGVmIExUV1JBUFBFUl9ERUJVR1BSSU5URgorLSNpZiBkZWZpbmVkIExUX0RFQlVHV1JBUFBFUgorLSMgZGVmaW5lIExUV1JBUFBFUl9ERUJVR1BSSU5URihhcmdzKSBsdHdyYXBwZXJfZGVidWdwcmludGYgYXJncworLXN0YXRpYyB2b2lkCistbHR3cmFwcGVyX2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmbXQsIC4uLikKKy17CistICAgIHZhX2xpc3QgYXJnczsKKy0gICAgdmFfc3RhcnQgKGFyZ3MsIGZtdCk7CistICAgICh2b2lkKSB2ZnByaW50ZiAoc3RkZXJyLCBmbXQsIGFyZ3MpOworLSAgICB2YV9lbmQgKGFyZ3MpOworLX0KKysjaWYgZGVmaW5lZChMVF9ERUJVR1dSQVBQRVIpCisrc3RhdGljIGludCBsdF9kZWJ1ZyA9IDE7CisgI2Vsc2UKKy0jIGRlZmluZSBMVFdSQVBQRVJfREVCVUdQUklOVEYoYXJncykKKytzdGF0aWMgaW50IGx0X2RlYnVnID0gMDsKKyAjZW5kaWYKKyAKKy1jb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSBOVUxMOworK2NvbnN0IGNoYXIgKnByb2dyYW1fbmFtZSA9ICJsaWJ0b29sLXdyYXBwZXIiOyAvKiBpbiBjYXNlIHhzdHJkdXAgZmFpbHMgKi8KKyAKKyB2b2lkICp4bWFsbG9jIChzaXplX3QgbnVtKTsKKyBjaGFyICp4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpOworQEAgLTM0ODcsNyArNDI4OCwxMCBAQCBjaGFyICpjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpOworIGludCBtYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOworIGludCBjaGVja19leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKKyBjaGFyICpzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KTsKKy12b2lkIGx0X2ZhdGFsIChjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pOworK3ZvaWQgbHRfZGVidWdwcmludGYgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Cisrdm9pZCBsdF9mYXRhbCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLik7Cisrc3RhdGljIGNvbnN0IGNoYXIgKm5vbm51bGwgKGNvbnN0IGNoYXIgKnMpOworK3N0YXRpYyBjb25zdCBjaGFyICpub25lbXB0eSAoY29uc3QgY2hhciAqcyk7Cisgdm9pZCBsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKKyBjaGFyICpsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpOworIHZvaWQgbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CitAQCAtMzQ5NywxNCArNDMwMSwxNCBAQCB2b2lkIGx0X2R1bXBfc2NyaXB0IChGSUxFICpmKTsKKyBFT0YKKyAKKyAJICAgIGNhdCA8PEVPRgorLWNvbnN0IGNoYXIgKiBNQUdJQ19FWEUgPSAiJG1hZ2ljX2V4ZSI7Cisrdm9sYXRpbGUgY29uc3QgY2hhciAqIE1BR0lDX0VYRSA9ICIkbWFnaWNfZXhlIjsKKyBjb25zdCBjaGFyICogTElCX1BBVEhfVkFSTkFNRSA9ICIkc2hsaWJwYXRoX3ZhciI7CisgRU9GCisgCisgCSAgICBpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCistICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3QgIiR0ZW1wX3JwYXRoIgorKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiR0ZW1wX3JwYXRoIgorIAkgICAgICBjYXQgPDxFT0YKKy1jb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCI7CisrY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCI7CisgRU9GCisgCSAgICBlbHNlCisgCSAgICAgIGNhdCA8PCJFT0YiCitAQCAtMzUxMywxMCArNDMxNywxMCBAQCBFT0YKKyAJICAgIGZpCisgCisgCSAgICBpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKy0gICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdCAiJGRsbHNlYXJjaHBhdGg6IgorKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiRkbGxzZWFyY2hwYXRoOiIKKyAJICAgICAgY2F0IDw8RU9GCisgY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiUEFUSCI7CistY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiOworK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiOworIEVPRgorIAkgICAgZWxzZQorIAkgICAgICBjYXQgPDwiRU9GIgorQEAgLTM1MzksMTIgKzQzNDMsMTAgQEAgRU9GCisgCSAgICBjYXQgPDwiRU9GIgorIAorICNkZWZpbmUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggICAgICAgICAiLS1sdC0iCistI2RlZmluZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWF9MRU5HVEggIDUKKyAKKy1zdGF0aWMgY29uc3Qgc2l6ZV90IG9wdF9wcmVmaXhfbGVuICAgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWF9MRU5HVEg7Cisgc3RhdGljIGNvbnN0IGNoYXIgKmx0d3JhcHBlcl9vcHRpb25fcHJlZml4ID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVg7CistCisgc3RhdGljIGNvbnN0IGNoYXIgKmR1bXBzY3JpcHRfb3B0ICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImR1bXAtc2NyaXB0IjsKKytzdGF0aWMgY29uc3QgY2hhciAqZGVidWdfb3B0ICAgICAgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZGVidWciOworIAorIGludAorIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCitAQCAtMzU2MSwxMCArNDM2MywxMyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgaW50IGk7CisgCisgICBwcm9ncmFtX25hbWUgPSAoY2hhciAqKSB4c3RyZHVwIChiYXNlX25hbWUgKGFyZ3ZbMF0pKTsKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgYXJndlswXSAgICAgIDogJXNcbiIsIGFyZ3ZbMF0pKTsKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgcHJvZ3JhbV9uYW1lIDogJXNcbiIsIHByb2dyYW1fbmFtZSkpOworKyAgbmV3YXJneiA9IFhNQUxMT0MgKGNoYXIgKiwgYXJnYyArIDEpOworIAorLSAgLyogdmVyeSBzaW1wbGUgYXJnIHBhcnNpbmc7IGRvbid0IHdhbnQgdG8gcmVseSBvbiBnZXRvcHQgKi8KKysgIC8qIHZlcnkgc2ltcGxlIGFyZyBwYXJzaW5nOyBkb24ndCB3YW50IHRvIHJlbHkgb24gZ2V0b3B0CisrICAgKiBhbHNvLCBjb3B5IGFsbCBub24gY3dyYXBwZXIgb3B0aW9ucyB0byBuZXdhcmd6LCBleGNlcHQKKysgICAqIGFyZ3pbMF0sIHdoaWNoIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkKKysgICAqLworKyAgbmV3YXJnYz0wOworICAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICAgeworICAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGR1bXBzY3JpcHRfb3B0KSA9PSAwKQorQEAgLTM1ODEsMjEgKzQzODYsNTQgQEAgRU9GCisgCSAgbHRfZHVtcF9zY3JpcHQgKHN0ZG91dCk7CisgCSAgcmV0dXJuIDA7CisgCX0KKysgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkZWJ1Z19vcHQpID09IDApCisrCXsKKysgICAgICAgICAgbHRfZGVidWcgPSAxOworKyAgICAgICAgICBjb250aW51ZTsKKysJfQorKyAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4KSA9PSAwKQorKyAgICAgICAgeworKyAgICAgICAgICAvKiBob3dldmVyLCBpZiB0aGVyZSBpcyBhbiBvcHRpb24gaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisrICAgICAgICAgICAgIG5hbWVzcGFjZSwgYnV0IGl0IGlzIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2Uga25vdyBhYm91dCBhbmQKKysgICAgICAgICAgICAgaGF2ZSBhbHJlYWR5IGRlYWx0IHdpdGgsIGFib3ZlIChpbmx1ZGluZyBkdW1wLXNjcmlwdCksIHRoZW4KKysgICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yLiBPdGhlcndpc2UsIHRhcmdldHMgbWlnaHQgYmVnaW4gdG8gYmVsaWV2ZQorKyAgICAgICAgICAgICB0aGV5IGFyZSBhbGxvd2VkIHRvIHVzZSBvcHRpb25zIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAorKyAgICAgICAgICAgICBuYW1lc3BhY2UuIFRoZSBmaXJzdCB0aW1lIGFueSB1c2VyIGNvbXBsYWlucyBhYm91dCB0aGlzLCB3ZSdsbAorKyAgICAgICAgICAgICBuZWVkIHRvIG1ha2UgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggYSBjb25maWd1cmUtdGltZSBvcHRpb24KKysgICAgICAgICAgICAgb3IgYSBjb25maWd1cmUuYWMtc2V0dGFibGUgdmFsdWUuCisrICAgICAgICAgICAqLworKyAgICAgICAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorKwkJICAgICJ1bnJlY29nbml6ZWQgJXMgb3B0aW9uOiAnJXMnIiwKKysgICAgICAgICAgICAgICAgICAgIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4LCBhcmd2W2ldKTsKKysgICAgICAgIH0KKysgICAgICAvKiBvdGhlcndpc2UgLi4uICovCisrICAgICAgbmV3YXJnelsrK25ld2FyZ2NdID0geHN0cmR1cCAoYXJndltpXSk7CisgICAgIH0KKysgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IE5VTEw7CisrCisrRU9GCisrCSAgICBjYXQgPDxFT0YKKysgIC8qIFRoZSBHTlUgYmFubmVyIG11c3QgYmUgdGhlIGZpcnN0IG5vbi1lcnJvciBkZWJ1ZyBtZXNzYWdlICovCisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAibGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTlxuIik7CisrRU9GCisrCSAgICBjYXQgPDwiRU9GIgorKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBhcmd2WzBdOiAlc1xuIiwgYXJndlswXSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIHByb2dyYW1fbmFtZTogJXNcbiIsIHByb2dyYW1fbmFtZSk7CisgCistICBuZXdhcmd6ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7CisgICB0bXBfcGF0aHNwZWMgPSBmaW5kX2V4ZWN1dGFibGUgKGFyZ3ZbMF0pOworICAgaWYgKHRtcF9wYXRoc3BlYyA9PSBOVUxMKQorLSAgICBsdF9mYXRhbCAoIkNvdWxkbid0IGZpbmQgJXMiLCBhcmd2WzBdKTsKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgZm91bmQgZXhlIChiZWZvcmUgc3ltbGluayBjaGFzZSkgYXQgOiAlc1xuIiwKKy0JCQkgIHRtcF9wYXRoc3BlYykpOworKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiY291bGRuJ3QgZmluZCAlcyIsIGFyZ3ZbMF0pOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysgICAgICAgICAgICAgICAgICAiKG1haW4pIGZvdW5kIGV4ZSAoYmVmb3JlIHN5bWxpbmsgY2hhc2UpIGF0OiAlc1xuIiwKKysJCSAgdG1wX3BhdGhzcGVjKTsKKyAKKyAgIGFjdHVhbF9jd3JhcHBlcl9wYXRoID0gY2hhc2Vfc3ltbGlua3MgKHRtcF9wYXRoc3BlYyk7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGZvdW5kIGV4ZSAoYWZ0ZXIgc3ltbGluayBjaGFzZSkgYXQgOiAlc1xuIiwKKy0JCQkgIGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorKyAgICAgICAgICAgICAgICAgICIobWFpbikgZm91bmQgZXhlIChhZnRlciBzeW1saW5rIGNoYXNlKSBhdDogJXNcbiIsCisrCQkgIGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworIAorLSAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB4c3RyZHVwKCBiYXNlX25hbWUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7CisrICBhY3R1YWxfY3dyYXBwZXJfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpKTsKKyAgIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX3BhdGgsIGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKyAKKyAgIC8qIHdyYXBwZXIgbmFtZSB0cmFuc2Zvcm1zICovCitAQCAtMzYxMyw4ICs0NDUxLDkgQEAgRU9GCisgICB0YXJnZXRfbmFtZSA9IHRtcF9wYXRoc3BlYzsKKyAgIHRtcF9wYXRoc3BlYyA9IDA7CisgCistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGxpYnRvb2wgdGFyZ2V0IG5hbWU6ICVzXG4iLAorLQkJCSAgdGFyZ2V0X25hbWUpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICIobWFpbikgbGlidG9vbCB0YXJnZXQgbmFtZTogJXNcbiIsCisrCQkgIHRhcmdldF9uYW1lKTsKKyBFT0YKKyAKKyAJICAgIGNhdCA8PEVPRgorQEAgLTM2NjQsMzUgKzQ1MDMsMTkgQEAgRU9GCisgCisgICBsdF9zZXRlbnYgKCJCSU5fU0giLCAieHBnNCIpOyAvKiBmb3IgVHJ1NjQgKi8KKyAgIGx0X3NldGVudiAoIkRVQUxDQVNFIiwgIjEiKTsgIC8qIGZvciBNU0sgc2ggKi8KKy0gIGx0X3VwZGF0ZV9saWJfcGF0aCAoTElCX1BBVEhfVkFSTkFNRSwgTElCX1BBVEhfVkFMVUUpOworKyAgLyogVXBkYXRlIHRoZSBETEwgc2VhcmNocGF0aC4gIEVYRV9QQVRIX1ZBTFVFICgkZGxsc2VhcmNocGF0aCkgbXVzdAorKyAgICAgYmUgcHJlcGVuZGVkIGJlZm9yZSAodGhhdCBpcywgYXBwZWFyIGFmdGVyKSBMSUJfUEFUSF9WQUxVRSAoJHRlbXBfcnBhdGgpCisrICAgICBiZWNhdXNlIG9uIFdpbmRvd3MsIGJvdGggKl9WQVJOQU1FcyBhcmUgUEFUSCBidXQgdW5pbnN0YWxsZWQKKysgICAgIGxpYnJhcmllcyBtdXN0IGNvbWUgZmlyc3QuICovCisgICBsdF91cGRhdGVfZXhlX3BhdGggKEVYRV9QQVRIX1ZBUk5BTUUsIEVYRV9QQVRIX1ZBTFVFKTsKKysgIGx0X3VwZGF0ZV9saWJfcGF0aCAoTElCX1BBVEhfVkFSTkFNRSwgTElCX1BBVEhfVkFMVUUpOworIAorLSAgbmV3YXJnYz0wOworLSAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKy0gICAgeworLSAgICAgIGlmIChzdHJuY21wIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwgb3B0X3ByZWZpeF9sZW4pID09IDApCistICAgICAgICB7CistICAgICAgICAgIC8qIGhvd2V2ZXIsIGlmIHRoZXJlIGlzIGFuIG9wdGlvbiBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKKy0gICAgICAgICAgICAgbmFtZXNwYWNlLCBidXQgaXQgaXMgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBrbm93IGFib3V0IGFuZAorLSAgICAgICAgICAgICBoYXZlIGFscmVhZHkgZGVhbHQgd2l0aCwgYWJvdmUgKGlubHVkaW5nIGR1bXAtc2NyaXB0KSwgdGhlbgorLSAgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IuIE90aGVyd2lzZSwgdGFyZ2V0cyBtaWdodCBiZWdpbiB0byBiZWxpZXZlCistICAgICAgICAgICAgIHRoZXkgYXJlIGFsbG93ZWQgdG8gdXNlIG9wdGlvbnMgaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCistICAgICAgICAgICAgIG5hbWVzcGFjZS4gVGhlIGZpcnN0IHRpbWUgYW55IHVzZXIgY29tcGxhaW5zIGFib3V0IHRoaXMsIHdlJ2xsCistICAgICAgICAgICAgIG5lZWQgdG8gbWFrZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCBhIGNvbmZpZ3VyZS10aW1lIG9wdGlvbgorLSAgICAgICAgICAgICBvciBhIGNvbmZpZ3VyZS5hYy1zZXR0YWJsZSB2YWx1ZS4KKy0gICAgICAgICAgICovCistICAgICAgICAgIGx0X2ZhdGFsICgiVW5yZWNvZ25pemVkIG9wdGlvbiBpbiAlcyBuYW1lc3BhY2U6ICclcyciLAorLSAgICAgICAgICAgICAgICAgICAgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgsIGFyZ3ZbaV0pOworLSAgICAgICAgfQorLSAgICAgIC8qIG90aGVyd2lzZSAuLi4gKi8KKy0gICAgICBuZXdhcmd6WysrbmV3YXJnY10gPSB4c3RyZHVwIChhcmd2W2ldKTsKKy0gICAgfQorLSAgbmV3YXJnelsrK25ld2FyZ2NdID0gTlVMTDsKKy0KKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAgICAgKCgiKG1haW4pIGx0X2FyZ3ZfemVybyA6ICVzXG4iLCAobHRfYXJndl96ZXJvID8gbHRfYXJndl96ZXJvIDogIjxOVUxMPiIpKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIGx0X2FyZ3ZfemVybzogJXNcbiIsCisrCQkgIG5vbm51bGwgKGx0X2FyZ3ZfemVybykpOworICAgZm9yIChpID0gMDsgaSA8IG5ld2FyZ2M7IGkrKykKKyAgICAgeworLSAgICAgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgbmV3YXJnelslZF0gICA6ICVzXG4iLCBpLCAobmV3YXJneltpXSA/IG5ld2FyZ3pbaV0gOiAiPE5VTEw+IikpKTsKKysgICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIG5ld2FyZ3pbJWRdOiAlc1xuIiwKKysJCSAgICAgIGksIG5vbm51bGwgKG5ld2FyZ3pbaV0pKTsKKyAgICAgfQorIAorIEVPRgorQEAgLTM3MDYsNyArNDUyOSw5IEBAIEVPRgorICAgaWYgKHJ2YWwgPT0gLTEpCisgICAgIHsKKyAgICAgICAvKiBmYWlsZWQgdG8gc3RhcnQgcHJvY2VzcyAqLworLSAgICAgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgZmFpbGVkIHRvIGxhdW5jaCB0YXJnZXQgXCIlc1wiOiBlcnJubyA9ICVkXG4iLCBsdF9hcmd2X3plcm8sIGVycm5vKSk7CisrICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgICAgICIobWFpbikgZmFpbGVkIHRvIGxhdW5jaCB0YXJnZXQgXCIlc1wiOiAlc1xuIiwKKysJCSAgICAgIGx0X2FyZ3ZfemVybywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworICAgICAgIHJldHVybiAxMjc7CisgICAgIH0KKyAgIHJldHVybiBydmFsOworQEAgLTM3MjgsNyArNDU1Myw3IEBAIHhtYWxsb2MgKHNpemVfdCBudW0pCisgeworICAgdm9pZCAqcCA9ICh2b2lkICopIG1hbGxvYyAobnVtKTsKKyAgIGlmICghcCkKKy0gICAgbHRfZmF0YWwgKCJNZW1vcnkgZXhoYXVzdGVkIik7CisrICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJtZW1vcnkgZXhoYXVzdGVkIik7CisgCisgICByZXR1cm4gcDsKKyB9CitAQCAtMzc2Miw4ICs0NTg3LDggQEAgY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKKyB7CisgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIoY2hlY2tfZXhlY3V0YWJsZSkgIDogJXNcbiIsCistCQkJICBwYXRoID8gKCpwYXRoID8gcGF0aCA6ICJFTVBUWSEiKSA6ICJOVUxMISIpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoY2hlY2tfZXhlY3V0YWJsZSk6ICVzXG4iLAorKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CisgICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICAgcmV0dXJuIDA7CisgCitAQCAtMzc4MCw4ICs0NjA1LDggQEAgbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKQorICAgaW50IHJ2YWwgPSAwOworICAgc3RydWN0IHN0YXQgc3Q7CisgCistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1ha2VfZXhlY3V0YWJsZSkgICA6ICVzXG4iLAorLQkJCSAgcGF0aCA/ICgqcGF0aCA/IHBhdGggOiAiRU1QVFkhIikgOiAiTlVMTCEiKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1ha2VfZXhlY3V0YWJsZSk6ICVzXG4iLAorKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CisgICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICAgcmV0dXJuIDA7CisgCitAQCAtMzgwNyw4ICs0NjMyLDggQEAgZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKQorICAgaW50IHRtcF9sZW47CisgICBjaGFyICpjb25jYXRfbmFtZTsKKyAKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIoZmluZF9leGVjdXRhYmxlKSAgIDogJXNcbiIsCistCQkJICB3cmFwcGVyID8gKCp3cmFwcGVyID8gd3JhcHBlciA6ICJFTVBUWSEiKSA6ICJOVUxMISIpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoZmluZF9leGVjdXRhYmxlKTogJXNcbiIsCisrICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHdyYXBwZXIpKTsKKyAKKyAgIGlmICgod3JhcHBlciA9PSBOVUxMKSB8fCAoKndyYXBwZXIgPT0gJ1wwJykpCisgICAgIHJldHVybiBOVUxMOworQEAgLTM4NjEsNyArNDY4Niw4IEBAIGZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcikKKyAJCXsKKyAJCSAgLyogZW1wdHkgcGF0aDogY3VycmVudCBkaXJlY3RvcnkgKi8KKyAJCSAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQorLQkJICAgIGx0X2ZhdGFsICgiZ2V0Y3dkIGZhaWxlZCIpOworKwkJICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJnZXRjd2QgZmFpbGVkOiAlcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworIAkJICB0bXBfbGVuID0gc3RybGVuICh0bXApOworIAkJICBjb25jYXRfbmFtZSA9CisgCQkgICAgWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CitAQCAtMzg4Niw3ICs0NzEyLDggQEAgZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKQorICAgICB9CisgICAvKiBSZWxhdGl2ZSBwYXRoIHwgbm90IGZvdW5kIGluIHBhdGg6IHByZXBlbmQgY3dkICovCisgICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCistICAgIGx0X2ZhdGFsICgiZ2V0Y3dkIGZhaWxlZCIpOworKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAorKyAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworICAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKKyAgIGNvbmNhdF9uYW1lID0gWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisgICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOworQEAgLTM5MTIsOCArNDczOSw5IEBAIGNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKKyAgIGludCBoYXNfc3ltbGlua3MgPSAwOworICAgd2hpbGUgKHN0cmxlbiAodG1wX3BhdGhzcGVjKSAmJiAhaGFzX3N5bWxpbmtzKQorICAgICB7CistICAgICAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoImNoZWNraW5nIHBhdGggY29tcG9uZW50IGZvciBzeW1saW5rczogJXNcbiIsCistCQkJICAgICAgdG1wX3BhdGhzcGVjKSk7CisrICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgICAgICJjaGVja2luZyBwYXRoIGNvbXBvbmVudCBmb3Igc3ltbGlua3M6ICVzXG4iLAorKwkJICAgICAgdG1wX3BhdGhzcGVjKTsKKyAgICAgICBpZiAobHN0YXQgKHRtcF9wYXRoc3BlYywgJnMpID09IDApCisgCXsKKyAJICBpZiAoU19JU0xOSyAocy5zdF9tb2RlKSAhPSAwKQorQEAgLTM5MzUsOCArNDc2Myw5IEBAIGNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKKyAJfQorICAgICAgIGVsc2UKKyAJeworLQkgIGNoYXIgKmVycnN0ciA9IHN0cmVycm9yIChlcnJubyk7CistCSAgbHRfZmF0YWwgKCJFcnJvciBhY2Nlc3NpbmcgZmlsZSAlcyAoJXMpIiwgdG1wX3BhdGhzcGVjLCBlcnJzdHIpOworKwkgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICAgImVycm9yIGFjY2Vzc2luZyBmaWxlIFwiJXNcIjogJXMiLAorKwkJICAgIHRtcF9wYXRoc3BlYywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworIAl9CisgICAgIH0KKyAgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworQEAgLTM5NDksNyArNDc3OCw4IEBAIGNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKKyAgIHRtcF9wYXRoc3BlYyA9IHJlYWxwYXRoIChwYXRoc3BlYywgYnVmKTsKKyAgIGlmICh0bXBfcGF0aHNwZWMgPT0gMCkKKyAgICAgeworLSAgICAgIGx0X2ZhdGFsICgiQ291bGQgbm90IGZvbGxvdyBzeW1saW5rcyBmb3IgJXMiLCBwYXRoc3BlYyk7CisrICAgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSJjb3VsZCBub3QgZm9sbG93IHN5bWxpbmtzIGZvciAlcyIsIHBhdGhzcGVjKTsKKyAgICAgfQorICAgcmV0dXJuIHhzdHJkdXAgKHRtcF9wYXRoc3BlYyk7CisgI2VuZGlmCitAQCAtMzk3NSwxMSArNDgwNSwyNSBAQCBzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQorICAgcmV0dXJuIHN0cjsKKyB9CisgCisrdm9pZAorK2x0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaWYgKGx0X2RlYnVnKQorKyAgICB7CisrICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAiLCBwcm9ncmFtX25hbWUsIGZpbGUsIGxpbmUpOworKyAgICAgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOworKyAgICAgICh2b2lkKSB2ZnByaW50ZiAoc3RkZXJyLCBmbXQsIGFyZ3MpOworKyAgICAgIHZhX2VuZCAoYXJncyk7CisrICAgIH0KKyt9CisrCisgc3RhdGljIHZvaWQKKy1sdF9lcnJvcl9jb3JlIChpbnQgZXhpdF9zdGF0dXMsIGNvbnN0IGNoYXIgKm1vZGUsCisrbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICpmaWxlLAorKwkgICAgICAgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1vZGUsCisgCSAgICAgICBjb25zdCBjaGFyICptZXNzYWdlLCB2YV9saXN0IGFwKQorIHsKKy0gIGZwcmludGYgKHN0ZGVyciwgIiVzOiAlczogIiwgcHJvZ3JhbV9uYW1lLCBtb2RlKTsKKysgIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAlczogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lLCBtb2RlKTsKKyAgIHZmcHJpbnRmIChzdGRlcnIsIG1lc3NhZ2UsIGFwKTsKKyAgIGZwcmludGYgKHN0ZGVyciwgIi5cbiIpOworIAorQEAgLTM5ODgsMjAgKzQ4MzIsMzIgQEAgbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICptb2RlLAorIH0KKyAKKyB2b2lkCistbHRfZmF0YWwgKGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKKytsdF9mYXRhbCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKKyB7CisgICB2YV9saXN0IGFwOworICAgdmFfc3RhcnQgKGFwLCBtZXNzYWdlKTsKKy0gIGx0X2Vycm9yX2NvcmUgKEVYSVRfRkFJTFVSRSwgIkZBVEFMIiwgbWVzc2FnZSwgYXApOworKyAgbHRfZXJyb3JfY29yZSAoRVhJVF9GQUlMVVJFLCBmaWxlLCBsaW5lLCAiRkFUQUwiLCBtZXNzYWdlLCBhcCk7CisgICB2YV9lbmQgKGFwKTsKKyB9CisgCisrc3RhdGljIGNvbnN0IGNoYXIgKgorK25vbm51bGwgKGNvbnN0IGNoYXIgKnMpCisreworKyAgcmV0dXJuIHMgPyBzIDogIihudWxsKSI7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyICoKKytub25lbXB0eSAoY29uc3QgY2hhciAqcykKKyt7CisrICByZXR1cm4gKHMgJiYgISpzKSA/ICIoZW1wdHkpIiA6IG5vbm51bGwgKHMpOworK30KKysKKyB2b2lkCisgbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKKyB7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGx0X3NldGVudikgc2V0dGluZyAnJXMnIHRvICclcydcbiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSA/IG5hbWUgOiAiPE5VTEw+IiksCistICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgPyB2YWx1ZSA6ICI8TlVMTD4iKSkpOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgIihsdF9zZXRlbnYpIHNldHRpbmcgJyVzJyB0byAnJXMnXG4iLAorKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworICAgeworICNpZmRlZiBIQVZFX1NFVEVOVgorICAgICAvKiBhbHdheXMgbWFrZSBhIGNvcHksIGZvciBjb25zaXN0ZW5jeSB3aXRoICFIQVZFX1NFVEVOViAqLworQEAgLTQwNDksOSArNDkwNSw5IEBAIGx0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCkKKyB2b2lkCisgbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKKyB7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGx0X3VwZGF0ZV9leGVfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgPyBuYW1lIDogIjxOVUxMPiIpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlID8gdmFsdWUgOiAiPE5VTEw+IikpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICIobHRfdXBkYXRlX2V4ZV9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCisrICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CisgCisgICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCisgICAgIHsKK0BAIC00MDcwLDkgKzQ5MjYsOSBAQCBsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorIHZvaWQKKyBsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorIHsKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobHRfdXBkYXRlX2xpYl9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSA/IG5hbWUgOiAiPE5VTEw+IiksCistICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgPyB2YWx1ZSA6ICI8TlVMTD4iKSkpOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgIihsdF91cGRhdGVfbGliX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKysgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKyAKKyAgIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKKyAgICAgeworQEAgLTQyMjIsNyArNTA3OCw3IEBAIEVPRgorIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wICgpCisgeworICAgICAkb3B0X2RlYnVnCistICAgIGNhc2UgYGV2YWwgIiRmaWxlX21hZ2ljX2NtZCBcIlwkMVwiIDI+L2Rldi9udWxsIiB8ICRTRUQgLWUgMTBxYCBpbgorKyAgICBjYXNlIGBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkMVwiIDI+L2Rldi9udWxsIHwgJFNFRCAtZSAxMHFgIGluCisgICAgICppbXBvcnQqKSA6IDs7CisgICAgICopIGZhbHNlIDs7CisgICAgIGVzYWMKK0BAIC00NDAxLDkgKzUyNTcsOSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgOzsKKyAJICAqKQorIAkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorLQkgICAgICBkbGZpbGVzPSIkZGxmaWxlcyAkYXJnIgorKwkgICAgICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGFyZyIKKyAJICAgIGVsc2UKKy0JICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKysJICAgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRhcmciCisgCSAgICBmaQorIAkgICAgcHJldj0KKyAJICAgIGNvbnRpbnVlCitAQCAtNDQyNyw3ICs1MjgzLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICotKi1kYXJ3aW4qKQorIAkgICAgICBjYXNlICIkZGVwbGlicyAiIGluCisgCQkqIiAkcWFyZy5sdGZyYW1ld29yayAiKikgOzsKKy0JCSopIGRlcGxpYnM9IiRkZXBsaWJzICRxYXJnLmx0ZnJhbWV3b3JrIiAjIHRoaXMgaXMgZml4ZWQgbGF0ZXIKKysJCSopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkcWFyZy5sdGZyYW1ld29yayIgIyB0aGlzIGlzIGZpeGVkIGxhdGVyCisgCQkgICA7OworIAkgICAgICBlc2FjCisgCSAgICAgIDs7CitAQCAtNDQ0Niw3ICs1MzAyLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIG1vcmVhcmdzPQorIAkgICAgZm9yIGZpbCBpbiBgY2F0ICIkc2F2ZV9hcmciYAorIAkgICAgZG8KKy0jCSAgICAgIG1vcmVhcmdzPSIkbW9yZWFyZ3MgJGZpbCIKKysjCSAgICAgIGZ1bmNfYXBwZW5kIG1vcmVhcmdzICIgJGZpbCIKKyAJICAgICAgYXJnPSRmaWwKKyAJICAgICAgIyBBIGxpYnRvb2wtY29udHJvbGxlZCBvYmplY3QuCisgCitAQCAtNDQ3NSw3ICs1MzMxLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAJCSAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorIAkJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKy0JCSAgICAgIGRsZmlsZXM9IiRkbGZpbGVzICRwaWNfb2JqZWN0IgorKwkJICAgICAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRwaWNfb2JqZWN0IgorIAkJICAgICAgcHJldj0KKyAJCSAgICAgIGNvbnRpbnVlCisgCQkgICAgZWxzZQorQEAgLTQ0ODcsNyArNTM0Myw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQkgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCisgCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKyAJCSAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCistCQkgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJHBpY19vYmplY3QiCisrCQkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRwaWNfb2JqZWN0IgorIAkJICAgIHByZXY9CisgCQkgIGZpCisgCitAQCAtNDU1NywxMiArNTQxMywxMiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGlmIHRlc3QgIiRwcmV2IiA9IHJwYXRoOyB0aGVuCisgCSAgICBjYXNlICIkcnBhdGggIiBpbgorIAkgICAgKiIgJGFyZyAiKikgOzsKKy0JICAgICopIHJwYXRoPSIkcnBhdGggJGFyZyIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGFyZyIgOzsKKyAJICAgIGVzYWMKKyAJICBlbHNlCisgCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKyAJICAgICoiICRhcmcgIiopIDs7CistCSAgICAqKSB4cnBhdGg9IiR4cnBhdGggJGFyZyIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRhcmciIDs7CisgCSAgICBlc2FjCisgCSAgZmkKKyAJICBwcmV2PQorQEAgLTQ1NzQsMjggKzU0MzAsMjggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBjb250aW51ZQorIAkgIDs7CisgCXdlYWspCistCSAgd2Vha19saWJzPSIkd2Vha19saWJzICRhcmciCisrCSAgZnVuY19hcHBlbmQgd2Vha19saWJzICIgJGFyZyIKKyAJICBwcmV2PQorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAJeGNjbGlua2VyKQorLQkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkcWFyZyIKKy0JICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRxYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRxYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHFhcmciCisgCSAgcHJldj0KKyAJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKKyAJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCisgCSAgY29udGludWUKKyAJICA7OworIAl4Y29tcGlsZXIpCistCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkcWFyZyIKKysJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRxYXJnIgorIAkgIHByZXY9CisgCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisgCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAJeGxpbmtlcikKKy0JICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJHFhcmciCistCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkcWFyZyIKKysJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkcWFyZyIKKysJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bCRxYXJnIgorIAkgIHByZXY9CisgCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHdsJHFhcmciCisgCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR3bCRxYXJnIgorQEAgLTQ2ODYsMTUgKzU1NDIsMTYgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJOzsKKyAKKyAgICAgICAtTCopCistCWZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRhcmciCistCWRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CistCWlmIHRlc3QgLXogIiRkaXIiOyB0aGVuCisrCWZ1bmNfc3RyaXBuYW1lICItTCIgJycgIiRhcmciCisrCWlmIHRlc3QgLXogIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiOyB0aGVuCisgCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisgCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJyZXF1aXJlIG5vIHNwYWNlIGJldHdlZW4gXGAtTCcgYW5kIFxgJDEnIgorIAkgIGVsc2UKKyAJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm5lZWQgcGF0aCBmb3IgXGAtTCcgb3B0aW9uIgorIAkgIGZpCisgCWZpCisrCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwlkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorIAkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKyAJY2FzZSAkZGlyIGluCisgCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKK0BAIC00NzA2LDEwICs1NTYzLDE2IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgOzsKKyAJZXNhYworIAljYXNlICIkZGVwbGlicyAiIGluCistCSoiIC1MJGRpciAiKikgOzsKKysJKiIgLUwkZGlyICIqIHwgKiIgJGFyZyAiKikKKysJICAjIFdpbGwgb25seSBoYXBwZW4gZm9yIGFic29sdXRlIG9yIHN5c3Jvb3QgYXJndW1lbnRzCisrCSAgOzsKKyAJKikKKy0JICBkZXBsaWJzPSIkZGVwbGlicyAtTCRkaXIiCistCSAgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiCisrCSAgIyBQcmVzZXJ2ZSBzeXNyb290LCBidXQgbmV2ZXIgaW5jbHVkZSByZWxhdGl2ZSBkaXJlY3RvcmllcworKwkgIGNhc2UgJGRpciBpbgorKwkgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qIHwgPSopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIiA7OworKwkgICAgKikgZnVuY19hcHBlbmQgZGVwbGlicyAiIC1MJGRpciIgOzsKKysJICBlc2FjCisrCSAgZnVuY19hcHBlbmQgbGliX3NlYXJjaF9wYXRoICIgJGRpciIKKyAJICA7OworIAllc2FjCisgCWNhc2UgJGhvc3QgaW4KK0BAIC00NzE4LDEyICs1NTgxLDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisgCSAgKiI6JGRpcjoiKikgOzsKKyAJICA6OikgZGxsc2VhcmNocGF0aD0kZGlyOzsKKy0JICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokZGlyIjs7CisrCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiRkaXIiOzsKKyAJICBlc2FjCisgCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisgCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7CisgCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworLQkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiR0ZXN0YmluZGlyIjs7CisrCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiR0ZXN0YmluZGlyIjs7CisgCSAgZXNhYworIAkgIDs7CisgCWVzYWMKK0BAIC00NzQ3LDcgKzU2MTAsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgOzsKKyAJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisgCSAgICAjIFJoYXBzb2R5IEMgYW5kIG1hdGggbGlicmFyaWVzIGFyZSBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworLQkgICAgZGVwbGlicz0iJGRlcGxpYnMgU3lzdGVtLmx0ZnJhbWV3b3JrIgorKwkgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIFN5c3RlbS5sdGZyYW1ld29yayIKKyAJICAgIGNvbnRpbnVlCisgCSAgICA7OworIAkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKK0BAIC00NzU4LDkgKzU2MjEsNiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yaworIAkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisgCSAgICA7OworLQkgICotKi1saW51eCopCistCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKy0JICAgIDs7CisgCSAgZXNhYworIAllbGlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjX3IiOyB0aGVuCisgCSBjYXNlICRob3N0IGluCitAQCAtNDc3MCw3ICs1NjMwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgOzsKKyAJIGVzYWMKKyAJZmkKKy0JZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKysJZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciCisgCWNvbnRpbnVlCisgCTs7CisgCitAQCAtNDc4Miw4ICs1NjQyLDggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgICAjIFRydTY0IFVOSVggdXNlcyAtbW9kZWwgW2FyZ10gdG8gZGV0ZXJtaW5lIHRoZSBsYXlvdXQgb2YgQysrCisgICAgICAgIyBjbGFzc2VzLCBuYW1lIG1hbmdsaW5nLCBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLgorICAgICAgICMgRGFyd2luIHVzZXMgdGhlIC1hcmNoIGZsYWcgdG8gZGV0ZXJtaW5lIG91dHB1dCBhcmNoaXRlY3R1cmUuCistICAgICAgLW1vZGVsfC1hcmNofC1pc3lzcm9vdCkKKy0JY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorKyAgICAgIC1tb2RlbHwtYXJjaHwtaXN5c3Jvb3R8LS1zeXNyb290KQorKwlmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisgCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisgCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorIAlwcmV2PXhjb21waWxlcgorQEAgLTQ3OTEsMTIgKzU2NTEsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJOzsKKyAKKyAgICAgICAtbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlfC10aHJlYWRzKQorLQljb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisrCWZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKKyAJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisgCSAgICAqIiAkYXJnICIqKSA7OworLQkgICAgKiApIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGFyZyIgOzsKKysJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRhcmciIDs7CisgCWVzYWMKKyAJY29udGludWUKKyAJOzsKK0BAIC00ODYzLDEzICs1NzIzLDE3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorIAljYXNlICRkaXIgaW4KKyAJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworKwk9KikKKysJICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRkaXIiCisrCSAgZGlyPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKwkgIDs7CisgCSopCisgCSAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCisgCSAgOzsKKyAJZXNhYworIAljYXNlICIkeHJwYXRoICIgaW4KKyAJKiIgJGRpciAiKikgOzsKKy0JKikgeHJwYXRoPSIkeHJwYXRoICRkaXIiIDs7CisrCSopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRkaXIiIDs7CisgCWVzYWMKKyAJY29udGludWUKKyAJOzsKK0BAIC00OTIyLDggKzU3ODYsOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAlmb3IgZmxhZyBpbiAkYXJnczsgZG8KKyAJICBJRlM9IiRzYXZlX2lmcyIKKyAgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCistCSAgYXJnPSIkYXJnICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKy0JICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJICBmdW5jX2FwcGVuZCBhcmcgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgCWRvbmUKKyAJSUZTPSIkc2F2ZV9pZnMiCisgCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKK0BAIC00OTM4LDkgKzU4MDIsOSBAQCBmdW5jX21vZGVfbGluayAoKQorIAlmb3IgZmxhZyBpbiAkYXJnczsgZG8KKyAJICBJRlM9IiRzYXZlX2lmcyIKKyAgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCistCSAgYXJnPSIkYXJnICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKy0JICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKy0JICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwkgIGZ1bmNfYXBwZW5kIGFyZyAiICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgCWRvbmUKKyAJSUZTPSIkc2F2ZV9pZnMiCisgCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKK0BAIC00OTY4LDI0ICs1ODMyLDI3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorIAk7OworIAorLSAgICAgICMgLTY0LCAtbWlwc1swLTldIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgU0dJIGNvbXBpbGVyCistICAgICAgIyAtclswLTldWzAtOV0qIHNwZWNpZmllcyB0aGUgcHJvY2Vzc29yIG9uIHRoZSBTR0kgY29tcGlsZXIKKy0gICAgICAjIC14YXJjaD0qLCAteHRhcmdldD0qIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgU3VuIGNvbXBpbGVyCistICAgICAgIyArREEqLCArREQqIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgSFAgY29tcGlsZXIKKy0gICAgICAjIC1xKiBwYXNzIHRocm91Z2ggY29tcGlsZXIgYXJncyBmb3IgdGhlIElCTSBjb21waWxlcgorLSAgICAgICMgLW0qLCAtdFs0NV0qLCAtdHhzY2FsZSogcGFzcyB0aHJvdWdoIGFyY2hpdGVjdHVyZS1zcGVjaWZpYworLSAgICAgICMgY29tcGlsZXIgYXJncyBmb3IgR0NDCistICAgICAgIyAtRi9wYXRoIGdpdmVzIHBhdGggdG8gdW5pbnN0YWxsZWQgZnJhbWV3b3JrcywgZ2NjIG9uIGRhcndpbgorLSAgICAgICMgLXAsIC1wZywgLS1jb3ZlcmFnZSwgLWZwcm9maWxlLSogcGFzcyB0aHJvdWdoIHByb2ZpbGluZyBmbGFnIGZvciBHQ0MKKy0gICAgICAjIEBmaWxlIEdDQyByZXNwb25zZSBmaWxlcworLSAgICAgICMgLXRwPSogUG9ydGxhbmQgcGdjYyB0YXJnZXQgcHJvY2Vzc29yIHNlbGVjdGlvbgorKyAgICAgICMgRmxhZ3MgdG8gYmUgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLCB3aXRoIHJhdGlvbmFsZToKKysgICAgICAjIC02NCwgLW1pcHNbMC05XSAgICAgIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIFNHSSBjb21waWxlcgorKyAgICAgICMgLXJbMC05XVswLTldKiAgICAgICAgc3BlY2lmeSBwcm9jZXNzb3IgZm9yIHRoZSBTR0kgY29tcGlsZXIKKysgICAgICAjIC14YXJjaD0qLCAteHRhcmdldD0qIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIFN1biBjb21waWxlcgorKyAgICAgICMgK0RBKiwgK0REKiAgICAgICAgICAgZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgSFAgY29tcGlsZXIKKysgICAgICAjIC1xKiAgICAgICAgICAgICAgICAgIGNvbXBpbGVyIGFyZ3MgZm9yIHRoZSBJQk0gY29tcGlsZXIKKysgICAgICAjIC1tKiwgLXRbNDVdKiwgLXR4c2NhbGUqIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFncyBmb3IgR0NDCisrICAgICAgIyAtRi9wYXRoICAgICAgICAgICAgICBwYXRoIHRvIHVuaW5zdGFsbGVkIGZyYW1ld29ya3MsIGdjYyBvbiBkYXJ3aW4KKysgICAgICAjIC1wLCAtcGcsIC0tY292ZXJhZ2UsIC1mcHJvZmlsZS0qICBwcm9maWxpbmcgZmxhZ3MgZm9yIEdDQworKyAgICAgICMgQGZpbGUgICAgICAgICAgICAgICAgR0NDIHJlc3BvbnNlIGZpbGVzCisrICAgICAgIyAtdHA9KiAgICAgICAgICAgICAgICBQb3J0bGFuZCBwZ2NjIHRhcmdldCBwcm9jZXNzb3Igc2VsZWN0aW9uCisrICAgICAgIyAtLXN5c3Jvb3Q9KiAgICAgICAgICBmb3Igc3lzcm9vdCBzdXBwb3J0CisrICAgICAgIyAtTyosIC1mbHRvKiwgLWZ3aG9wciosIC1mdXNlLWxpbmtlci1wbHVnaW4gR0NDIGxpbmstdGltZSBvcHRpbWl6YXRpb24KKyAgICAgICAtNjR8LW1pcHNbMC05XXwtclswLTldWzAtOV0qfC14YXJjaD0qfC14dGFyZ2V0PSp8K0RBKnwrREQqfC1xKnwtbSp8IFwKKy0gICAgICAtdFs0NV0qfC10eHNjYWxlKnwtcHwtcGd8LS1jb3ZlcmFnZXwtZnByb2ZpbGUtKnwtRip8QCp8LXRwPSopCisrICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqfC10cD0qfC0tc3lzcm9vdD0qfCBcCisrICAgICAgLU8qfC1mbHRvKnwtZndob3ByKnwtZnVzZS1saW5rZXItcGx1Z2luKQorICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorICAgICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCistICAgICAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisrICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisgICAgICAgICBjb250aW51ZQorICAgICAgICAgOzsKKyAKK0BAIC00OTk3LDcgKzU4NjQsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAorICAgICAgICouJG9iamV4dCkKKyAJIyBBIHN0YW5kYXJkIG9iamVjdC4KKy0Jb2Jqcz0iJG9ianMgJGFyZyIKKysJZnVuY19hcHBlbmQgb2JqcyAiICRhcmciCisgCTs7CisgCisgICAgICAgKi5sbykKK0BAIC01MDI4LDcgKzU4OTUsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAorIAkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorIAkgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCistCQlkbGZpbGVzPSIkZGxmaWxlcyAkcGljX29iamVjdCIKKysJCWZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkcGljX29iamVjdCIKKyAJCXByZXY9CisgCQljb250aW51ZQorIAkgICAgICBlbHNlCitAQCAtNTA0MCw3ICs1OTA3LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCisgCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisgCSAgICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKy0JICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJHBpY19vYmplY3QiCisrCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkcGljX29iamVjdCIKKyAJICAgICAgcHJldj0KKyAJICAgIGZpCisgCitAQCAtNTA4NSwyNCArNTk1MiwyNSBAQCBmdW5jX21vZGVfbGluayAoKQorIAorICAgICAgICouJGxpYmV4dCkKKyAJIyBBbiBhcmNoaXZlLgorLQlkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgorLQlvbGRfZGVwbGlicz0iJG9sZF9kZXBsaWJzICRhcmciCisrCWZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIgorKwlmdW5jX2FwcGVuZCBvbGRfZGVwbGlicyAiICRhcmciCisgCWNvbnRpbnVlCisgCTs7CisgCisgICAgICAgKi5sYSkKKyAJIyBBIGxpYnRvb2wtY29udHJvbGxlZCBsaWJyYXJ5LgorIAorKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGFyZyIKKyAJaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorIAkgICMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorLQkgIGRsZmlsZXM9IiRkbGZpbGVzICRhcmciCisrCSAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisgCSAgcHJldj0KKyAJZWxpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisgCSAgIyBUaGUgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KKy0JICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAkgIHByZXY9CisgCWVsc2UKKy0JICBkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAlmaQorIAljb250aW51ZQorIAk7OworQEAgLTUxMjcsNyArNTk5NSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldmFyZycgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorIAorICAgICBpZiB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzICYmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiOyB0aGVuCistICAgICAgZXZhbCAiYXJnPVwiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiIgorKyAgICAgIGV2YWwgYXJnPVwiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCisgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAgICAgZmkKK0BAIC01MTQ0LDExICs2MDEyLDEzIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgIGVsc2UKKyAgICAgICBzaGxpYl9zZWFyY2hfcGF0aD0KKyAgICAgZmkKKy0gICAgZXZhbCAic3lzX2xpYl9zZWFyY2hfcGF0aD1cIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNcIiIKKy0gICAgZXZhbCAic3lzX2xpYl9kbHNlYXJjaF9wYXRoPVwiJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXCIiCisrICAgIGV2YWwgc3lzX2xpYl9zZWFyY2hfcGF0aD1cIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNcIgorKyAgICBldmFsIHN5c19saWJfZGxzZWFyY2hfcGF0aD1cIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1wiCisgCisgICAgIGZ1bmNfZGlybmFtZSAiJG91dHB1dCIgIi8iICIiCisgICAgIG91dHB1dF9vYmpkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JG9iamRpciIKKysgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyIKKysgICAgdG9vbF9vdXRwdXRfb2JqZGlyPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKyAgICAgIyBDcmVhdGUgdGhlIG9iamVjdCBkaXJlY3RvcnkuCisgICAgIGZ1bmNfbWtkaXJfcCAiJG91dHB1dF9vYmpkaXIiCisgCitAQCAtNTE2OSwxMiArNjAzOSwxMiBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAjIEZpbmQgYWxsIGludGVyZGVwZW5kZW50IGRlcGxpYnMgYnkgc2VhcmNoaW5nIGZvciBsaWJyYXJpZXMKKyAgICAgIyB0aGF0IGFyZSBsaW5rZWQgbW9yZSB0aGFuIG9uY2UgKGUuZy4gLWxhIC1sYiAtbGEpCisgICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCistICAgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKysgICAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorIAljYXNlICIkbGlicyAiIGluCistCSoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworIAllc2FjCisgICAgICAgZmkKKy0gICAgICBsaWJzPSIkbGlicyAkZGVwbGliIgorKyAgICAgIGZ1bmNfYXBwZW5kIGxpYnMgIiAkZGVwbGliIgorICAgICBkb25lCisgCisgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KK0BAIC01MTg3LDkgKzYwNTcsOSBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgIGlmICRvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzOyB0aGVuCisgCWZvciBwcmVfcG9zdF9kZXAgaW4gJHByZWRlcHMgJHBvc3RkZXBzOyBkbworIAkgIGNhc2UgIiRwcmVfcG9zdF9kZXBzICIgaW4KKy0JICAqIiAkcHJlX3Bvc3RfZGVwICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRwcmVfcG9zdF9kZXBzIiA7OworKwkgICoiICRwcmVfcG9zdF9kZXAgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJHByZV9wb3N0X2RlcHMiIDs7CisgCSAgZXNhYworLQkgIHByZV9wb3N0X2RlcHM9IiRwcmVfcG9zdF9kZXBzICRwcmVfcG9zdF9kZXAiCisrCSAgZnVuY19hcHBlbmQgcHJlX3Bvc3RfZGVwcyAiICRwcmVfcG9zdF9kZXAiCisgCWRvbmUKKyAgICAgICBmaQorICAgICAgIHByZV9wb3N0X2RlcHM9CitAQCAtNTI1Niw4ICs2MTI2LDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKyAJICAjIElnbm9yZSBub24tbGlidG9vbC1saWJzCisgCSAgZGVwZW5kZW5jeV9saWJzPQorKwkgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkbGliIgorIAkgIGNhc2UgJGxpYiBpbgorLQkgICoubGEpCWZ1bmNfc291cmNlICIkbGliIiA7OworKwkgICoubGEpCWZ1bmNfc291cmNlICIkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IiA7OworIAkgIGVzYWMKKyAKKyAJICAjIENvbGxlY3QgcHJlb3BlbmVkIGxpYnRvb2wgZGVwbGlicywgZXhjZXB0IGFueSB0aGlzIGxpYnJhcnkKK0BAIC01MjY3LDcgKzYxMzgsNyBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgICAgICAgIGRlcGxpYl9iYXNlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorIAkgICAgY2FzZSAiICR3ZWFrX2xpYnMgIiBpbgorIAkgICAgKiIgJGRlcGxpYl9iYXNlICIqKSA7OworLQkgICAgKikgZGVwbGlicz0iJGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkZGVwbGliIiA7OworIAkgICAgZXNhYworIAkgIGRvbmUKKyAJZG9uZQorQEAgLTUyODgsMTEgKzYxNTksMTEgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorIAkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKyAJICBlbHNlCistCSAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWIiCisrCSAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRkZXBsaWIiCisgCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliIDsgdGhlbgorIAkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKyAJCSAgICAqIiAkZGVwbGliICIqKSA7OworLQkJICAgICogKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRkZXBsaWIiIDs7CisrCQkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGRlcGxpYiIgOzsKKyAJCWVzYWMKKyAJICAgIGZpCisgCSAgZmkKK0BAIC01Mzc3LDcgKzYyNDgsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KKyAJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisgCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKKy0JCSAgICAqICkgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZGVwbGliIiA7OworKwkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7CisgCQllc2FjCisgCSAgICBmaQorIAkgIGZpCitAQCAtNTM5MCw3ICs2MjYxLDggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIHRlc3QgIiRwYXNzIiA9IGNvbnYgJiYgY29udGludWUKKyAJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorIAkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKy0JICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCSAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAkgICAgOzsKKyAJICBwcm9nKQorIAkgICAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorQEAgLTU0MDQsNyArNjI3Niw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisgCSAgICBmaQorIAkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKy0JICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCSAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAkgICAgOzsKKyAJICAqKQorIAkgICAgZnVuY193YXJuaW5nICJcYC1MJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorQEAgLTU0MTUsMTcgKzYyODgsMjEgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJLVIqKQorIAkgIGlmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKyAJICAgIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRkZXBsaWIiCistCSAgICBkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCSAgICBkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorIAkgICAgIyBNYWtlIHN1cmUgdGhlIHhycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KKyAJICAgIGNhc2UgIiR4cnBhdGggIiBpbgorIAkgICAgKiIgJGRpciAiKikgOzsKKy0JICAgICopIHhycGF0aD0iJHhycGF0aCAkZGlyIiA7OworKwkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGRpciIgOzsKKyAJICAgIGVzYWMKKyAJICBmaQorIAkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisgCSAgY29udGludWUKKyAJICA7OworLQkqLmxhKSBsaWI9IiRkZXBsaWIiIDs7CisrCSoubGEpCisrCSAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisrCSAgbGliPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKysJICA7OworIAkqLiRsaWJleHQpCisgCSAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorIAkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKK0BAIC01NDg4LDExICs2MzY1LDExIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW4gfHwgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorIAkgICAgICAjIElmIHRoZXJlIGlzIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcgc3RhdGljYWxseSwKKyAJICAgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCistCSAgICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkZXBsaWIiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGVwbGliIgorIAkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKyAJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKyAJICAgIGVsc2UKKy0JICAgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGRlcGxpYiIKKysJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRkZXBsaWIiCisgCSAgICBmaQorIAkgIGZpCisgCSAgY29udGludWUKK0BAIC01NTM4LDcgKzY0MTUsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGZvciB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIGluICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnczsgZG8KKyAJICAgIGNhc2UgIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorIAkgICAgICAqIiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyAiKikgOzsKKy0JICAgICAgKikgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyI7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIjs7CisgCSAgICBlc2FjCisgCSAgZG9uZQorIAlmaQorQEAgLTU1NDYsOCArNjQyMyw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8CisgCSAgIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIiB8fAorIAkgICB7IHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZyAmJiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYjsgfTsgdGhlbgorLQkgIHRlc3QgLW4gIiRkbG9wZW4iICYmIGRsZmlsZXM9IiRkbGZpbGVzICRkbG9wZW4iCistCSAgdGVzdCAtbiAiJGRscHJlb3BlbiIgJiYgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGRscHJlb3BlbiIKKysJICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGRsb3BlbiIKKysJICB0ZXN0IC1uICIkZGxwcmVvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGRscHJlb3BlbiIKKyAJZmkKKyAKKyAJaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorQEAgLTU1NTgsMjAgKzY0MzUsMjAgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCisgCSAgICBmaQorIAkgICAgIyBJdCBpcyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeSwgc28gYWRkIGluIGl0cyBvYmplY3RzLgorLQkgICAgY29udmVuaWVuY2U9IiRjb252ZW5pZW5jZSAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCistCSAgICBvbGRfY29udmVuaWVuY2U9IiRvbGRfY29udmVuaWVuY2UgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorKwkgICAgZnVuY19hcHBlbmQgY29udmVuaWVuY2UgIiAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisrCSAgICBmdW5jX2FwcGVuZCBvbGRfY29udmVuaWVuY2UgIiAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisgCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IHRoZW4KKyAJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIKKyAJICBmaQorIAkgIHRtcF9saWJzPQorIAkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKyAJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCistCSAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKyAJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKy0JICAgICAgKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworKwkgICAgICAqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGZpCistCSAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisrCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiCisgCSAgZG9uZQorIAkgIGNvbnRpbnVlCisgCWZpICMgJHBhc3MgPSBjb252CitAQCAtNTU3OSw5ICs2NDU2LDE1IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCisgCSMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHdlIGxpbmsgYWdhaW5zdC4KKyAJbGlua2xpYj0KKy0JZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworLQkgIGxpbmtsaWI9IiRsIgorLQlkb25lCisrCWlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYKKysJICAgeyB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzIiA9IHllcyB8fAorKwkgICAgIHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCIgPSAiYnVpbHQsbm8iOyB9OyB0aGVuCisrCSAgbGlua2xpYj0kb2xkX2xpYnJhcnkKKysJZWxzZQorKwkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKysJICAgIGxpbmtsaWI9IiRsIgorKwkgIGRvbmUKKysJZmkKKyAJaWYgdGVzdCAteiAiJGxpbmtsaWIiOyB0aGVuCisgCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCisgCWZpCitAQCAtNTU5OCw5ICs2NDgxLDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICMgc3RhdGljYWxseSwgd2UgbmVlZCB0byBwcmVsb2FkLiAgV2UgYWxzbyBuZWVkIHRvIHByZWxvYWQgYW55CisgCSAgICAjIGRlcGVuZGVudCBsaWJyYXJpZXMgc28gbGlibHRkbCdzIGRlcGxpYiBwcmVsb2FkZXIgZG9lc24ndAorIAkgICAgIyBib21iIG91dCBpbiB0aGUgbG9hZCBkZXBsaWJzIHBoYXNlLgorLQkgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGxpYiAkZGVwZW5kZW5jeV9saWJzIgorKwkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRsaWIgJGRlcGVuZGVuY3lfbGlicyIKKyAJICBlbHNlCistCSAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliIgorKwkgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRsaWIiCisgCSAgZmkKKyAJICBjb250aW51ZQorIAlmaSAjICRwYXNzID0gZGxvcGVuCitAQCAtNTYyMiwxNCArNjUwNSwxNCBAQCBmdW5jX21vZGVfbGluayAoKQorIAorIAkjIEZpbmQgdGhlIHJlbGV2YW50IG9iamVjdCBkaXJlY3RvcnkgYW5kIGxpYnJhcnkgbmFtZS4KKyAJaWYgdGVzdCAiWCRpbnN0YWxsZWQiID0gWHllczsgdGhlbgorLQkgIGlmIHRlc3QgISAtZiAiJGxpYmRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKysJICBpZiB0ZXN0ICEgLWYgIiRsdF9zeXNyb290JGxpYmRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKyAJICAgIGZ1bmNfd2FybmluZyAibGlicmFyeSBcYCRsaWInIHdhcyBtb3ZlZC4iCisgCSAgICBkaXI9IiRsYWRpciIKKyAJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKyAJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKyAJICBlbHNlCistCSAgICBkaXI9IiRsaWJkaXIiCistCSAgICBhYnNkaXI9IiRsaWJkaXIiCisrCSAgICBkaXI9IiRsdF9zeXNyb290JGxpYmRpciIKKysJICAgIGFic2Rpcj0iJGx0X3N5c3Jvb3QkbGliZGlyIgorIAkgIGZpCisgCSAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWMiID0gWHllcyAmJiBhdm9pZHRlbXBycGF0aD15ZXMKKyAJZWxzZQorQEAgLTU2MzcsMTIgKzY1MjAsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGRpcj0iJGxhZGlyIgorIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorLQkgICAgbm90aW5zdF9wYXRoPSIkbm90aW5zdF9wYXRoICRhYnNfbGFkaXIiCisrCSAgICBmdW5jX2FwcGVuZCBub3RpbnN0X3BhdGggIiAkYWJzX2xhZGlyIgorIAkgIGVsc2UKKyAJICAgIGRpcj0iJGxhZGlyLyRvYmpkaXIiCisgCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIvJG9iamRpciIKKyAJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKy0JICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkYWJzX2xhZGlyIgorKwkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKKyAJICBmaQorIAlmaSAjICRpbnN0YWxsZWQgPSB5ZXMKKyAJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRsYW5hbWUiCitAQCAtNTY1MywyMCArNjUzNiw0NiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGlmIHRlc3QgLXogIiRsaWJkaXIiICYmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisgCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGxpYnJhcmllcyBtYXkgLWRscHJlb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciCisgCSAgZmkKKy0JICAjIFByZWZlciB1c2luZyBhIHN0YXRpYyBsaWJyYXJ5IChzbyB0aGF0IG5vIHNpbGx5IF9EWU5BTUlDIHN5bWJvbHMKKy0JICAjIGFyZSByZXF1aXJlZCB0byBsaW5rKS4KKy0JICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCistCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRvbGRfbGlicmFyeSIKKy0JICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworLQkgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCistCSAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCistCQlkbHByZWNvbnZlbmllbmNlbGlicz0iJGRscHJlY29udmVuaWVuY2VsaWJzICRkaXIvJG9sZF9saWJyYXJ5IgorLQkgICMgT3RoZXJ3aXNlLCB1c2UgdGhlIGRsbmFtZSwgc28gdGhhdCBsdF9kbG9wZW4gZmluZHMgaXQuCistCSAgZWxpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorLQkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kZGxuYW1lIgorLQkgIGVsc2UKKy0JICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJGxpbmtsaWIiCistCSAgZmkKKysJICBjYXNlICIkaG9zdCIgaW4KKysJICAgICMgc3BlY2lhbCBoYW5kbGluZyBmb3IgcGxhdGZvcm1zIHdpdGggUEUtRExMcy4KKysJICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorKwkgICAgICAjIExpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgbGluayBhZ2FpbnN0IHNoYXJlZCBsaWJyYXJ5IGlmIGJvdGgKKysJICAgICAgIyBzdGF0aWMgYW5kIHNoYXJlZCBhcmUgcHJlc2VudC4gIFRoZXJlZm9yZSwgZW5zdXJlIHdlIGV4dHJhY3QKKysJICAgICAgIyBzeW1ib2xzIGZyb20gdGhlIGltcG9ydCBsaWJyYXJ5IGlmIGEgc2hhcmVkIGxpYnJhcnkgaXMgcHJlc2VudAorKwkgICAgICAjIChvdGhlcndpc2UsIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgd2lsbCBiZSBpbmNvcnJlY3QpLiAgV2UgZG8KKysJICAgICAgIyB0aGlzIGJ5IHB1dHRpbmcgdGhlIGltcG9ydCBsaWJyYXJ5IG5hbWUgaW50byAkbmV3ZGxwcmVmaWxlcy4KKysJICAgICAgIyBXZSByZWNvdmVyIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgYnkgJ3NhdmluZycgdGhlIGxhIGZpbGUKKysJICAgICAgIyBuYW1lIGluIGEgc3BlY2lhbCBwdXJwb3NlIHZhcmlhYmxlLCBhbmQgKGxhdGVyKSBleHRyYWN0aW5nIHRoZQorKwkgICAgICAjIGRsbmFtZSBmcm9tIHRoZSBsYSBmaWxlLgorKwkgICAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorKwkgICAgICAgIGZ1bmNfdHJfc2ggIiRkaXIvJGxpbmtsaWIiCisrCSAgICAgICAgZXZhbCAibGliZmlsZV8kZnVuY190cl9zaF9yZXN1bHQ9XCRhYnNfbGFkaXIvXCRsYW5hbWUiCisrCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCisrCSAgICAgIGVsc2UKKysJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kb2xkX2xpYnJhcnkiCisrCSAgICAgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCisrCSAgICAgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCisrCSAgICAgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorKwkgICAgICAgICAgZnVuY19hcHBlbmQgZGxwcmVjb252ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKysJICAgICAgZmkKKysJICAgIDs7CisrCSAgICAqICkKKysJICAgICAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCisrCSAgICAgICMgYXJlIHJlcXVpcmVkIHRvIGxpbmspLgorKwkgICAgICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisrCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJG9sZF9saWJyYXJ5IgorKwkgICAgICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworKwkgICAgICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorKwkgICAgICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKysJICAgICAgICAgIGZ1bmNfYXBwZW5kIGRscHJlY29udmVuaWVuY2VsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisrCSAgICAgICMgT3RoZXJ3aXNlLCB1c2UgdGhlIGRsbmFtZSwgc28gdGhhdCBsdF9kbG9wZW4gZmluZHMgaXQuCisrCSAgICAgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKysJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kZGxuYW1lIgorKwkgICAgICBlbHNlCisrCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCisrCSAgICAgIGZpCisrCSAgICA7OworKwkgIGVzYWMKKyAJZmkgIyAkcGFzcyA9IGRscHJlb3BlbgorIAorIAlpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorQEAgLTU2ODQsNyArNjU5Myw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCisgCisgCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nICYmIHRlc3QgIiRwYXNzIiAhPSBsaW5rOyB0aGVuCistCSAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsYWRpciIKKysJICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkbGFkaXIiCisgCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKyAKKyAJICBsaW5rYWxsZGVwbGlicz1ubworQEAgLTU2OTcsNyArNjYwNiw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworIAkgICAgY2FzZSAkZGVwbGliIGluCisgCSAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCistCSAgICAgICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJICAgICAgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJCSA7OworIAkgICAgZXNhYworIAkgICAgIyBOZWVkIHRvIGxpbmsgYWdhaW5zdCBhbGwgZGVwZW5kZW5jeV9saWJzPworQEAgLTU3MDgsMTIgKzY2MTgsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgIyBvci9hbmQgbGluayBhZ2FpbnN0IHN0YXRpYyBsaWJyYXJpZXMKKyAJICAgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisgCSAgICBmaQorLQkgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKysJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisgCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCistCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworIAkgICAgICBlc2FjCisgCSAgICBmaQorLQkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgorIAkgIGRvbmUgIyBmb3IgZGVwbGliCisgCSAgY29udGludWUKKyAJZmkgIyAkbGlua21vZGUgPSBwcm9nLi4uCitAQCAtNTcyOCw3ICs2NjM4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgIyBNYWtlIHN1cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorIAkgICAgICBjYXNlICIkdGVtcF9ycGF0aDoiIGluCisgCSAgICAgICoiJGFic2RpcjoiKikgOzsKKy0JICAgICAgKikgdGVtcF9ycGF0aD0iJHRlbXBfcnBhdGgkYWJzZGlyOiIgOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgdGVtcF9ycGF0aCAiJGFic2RpcjoiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGZpCisgCitAQCAtNTc0MCw3ICs2NjUwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICopCisgCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKyAJICAgICAgKiIgJGFic2RpciAiKikgOzsKKy0JICAgICAgKikgY29tcGlsZV9ycGF0aD0iJGNvbXBpbGVfcnBhdGggJGFic2RpciIKKysJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgICAgOzsKKyAJICAgIGVzYWMKK0BAIC01NzQ5LDcgKzY2NTksNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgKikKKyAJICAgICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKyAJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgICAgOzsKKyAJICAgIGVzYWMKK0BAIC01Nzc0LDEyICs2Njg0LDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgY2FzZSAkaG9zdCBpbgorIAkgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyopCisgCSAgICAgICMgTm8gcG9pbnQgaW4gcmVsaW5raW5nIERMTHMgYmVjYXVzZSBwYXRocyBhcmUgbm90IGVuY29kZWQKKy0JICAgICAgbm90aW5zdF9kZXBsaWJzPSIkbm90aW5zdF9kZXBsaWJzICRsaWIiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfZGVwbGlicyAiICRsaWIiCisgCSAgICAgIG5lZWRfcmVsaW5rPW5vCisgCSAgICA7OworIAkgICopCisgCSAgICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vOyB0aGVuCistCSAgICAgIG5vdGluc3RfZGVwbGlicz0iJG5vdGluc3RfZGVwbGlicyAkbGliIgorKwkgICAgICBmdW5jX2FwcGVuZCBub3RpbnN0X2RlcGxpYnMgIiAkbGliIgorIAkgICAgICBuZWVkX3JlbGluaz15ZXMKKyAJICAgIGZpCisgCSAgICA7OworQEAgLTU4MTQsNyArNjcyNCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAqKQorIAkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisgCSAgICAgICoiICRhYnNkaXIgIiopIDs7CistCSAgICAgICopIGNvbXBpbGVfcnBhdGg9IiRjb21waWxlX3JwYXRoICRhYnNkaXIiCisrCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworIAkgICAgICBlc2FjCisgCSAgICAgIDs7CisgCSAgICBlc2FjCitAQCAtNTgyMyw3ICs2NzMzLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICopCisgCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisgCSAgICAgICoiICRsaWJkaXIgIiopIDs7CistCSAgICAgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIKKysJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworIAkgICAgICBlc2FjCisgCSAgICAgIDs7CisgCSAgICBlc2FjCitAQCAtNTgzNSw3ICs2NzQ1LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIHNoaWZ0CisgCSAgICByZWFsbmFtZT0iJDEiCisgCSAgICBzaGlmdAorLQkgICAgZXZhbCAibGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIiIKKysJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorIAkgICAgIyB1c2UgZGxuYW1lIGlmIHdlIGdvdCBpdC4gaXQncyBwZXJmZWN0bHkgZ29vZCwgbm8/CisgCSAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorIAkgICAgICBzb25hbWU9IiRkbG5hbWUiCitAQCAtNTg0OCw3ICs2NzU4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJCXZlcnN1ZmZpeD0iLSRtYWpvciIKKyAJCTs7CisgCSAgICAgIGVzYWMKKy0JICAgICAgZXZhbCAic29uYW1lPVwiJHNvbmFtZV9zcGVjXCIiCisrCSAgICAgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKyAJICAgIGVsc2UKKyAJICAgICAgc29uYW1lPSIkcmVhbG5hbWUiCisgCSAgICBmaQorQEAgLTU4NzcsNyArNjc4Nyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBsaW5rbGliPSRuZXdsaWIKKyAJICBmaSAjIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIKKyAKKy0JICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisrCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbms7IHRoZW4KKyAJICAgIGFkZF9zaGxpYnBhdGg9CisgCSAgICBhZGRfZGlyPQorIAkgICAgYWRkPQorQEAgLTU5MzMsNyArNjg0Myw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQlpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorIAkJICBjYXNlICRsaWJkaXIgaW4KKyAJCSAgICBbXFwvXSopCistCQkgICAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorKwkJICAgICAgZnVuY19hcHBlbmQgYWRkX2RpciAiIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisgCQkgICAgICA7OworIAkJICBlc2FjCisgCQlmaQorQEAgLTU5NTUsNyArNjg2NSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBpZiB0ZXN0IC1uICIkYWRkX3NobGlicGF0aCI7IHRoZW4KKyAJICAgICAgY2FzZSA6JGNvbXBpbGVfc2hsaWJwYXRoOiBpbgorIAkgICAgICAqIjokYWRkX3NobGlicGF0aDoiKikgOzsKKy0JICAgICAgKikgY29tcGlsZV9zaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRhZGRfc2hsaWJwYXRoOiIgOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9zaGxpYnBhdGggIiRhZGRfc2hsaWJwYXRoOiIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCitAQCAtNTk2OSwxMyArNjg3OSwxMyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkJIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorIAkJY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KKyAJCSoiOiRsaWJkaXI6IiopIDs7CistCQkqKSBmaW5hbGl6ZV9zaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgkbGliZGlyOiIgOzsKKysJCSopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3NobGlicGF0aCAiJGxpYmRpcjoiIDs7CisgCQllc2FjCisgCSAgICAgIGZpCisgCSAgICBmaQorIAkgIGZpCisgCistCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisrCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorIAkgICAgYWRkX3NobGlicGF0aD0KKyAJICAgIGFkZF9kaXI9CisgCSAgICBhZGQ9CitAQCAtNTk4OSw3ICs2ODk5LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisgCSAgICAgIGNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisgCSAgICAgICoiOiRsaWJkaXI6IiopIDs7CistCSAgICAgICopIGZpbmFsaXplX3NobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCRsaWJkaXI6IiA7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OworIAkgICAgICBlc2FjCisgCSAgICAgIGFkZD0iLWwkbmFtZSIKKyAJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXM7IHRoZW4KK0BAIC02MDAxLDEyICs2OTExLDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgIGZpCisgCSAgICBlbHNlCisgCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCistCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKysJICAgICAgYWRkX2Rpcj0iLUwkbHRfc3lzcm9vdCRsaWJkaXIiCisgCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKyAJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKyAJCWNhc2UgJGxpYmRpciBpbgorIAkJICBbXFwvXSopCistCQkgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKysJCSAgICBmdW5jX2FwcGVuZCBhZGRfZGlyICIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKyAJCSAgICA7OworIAkJZXNhYworIAkgICAgICBmaQorQEAgLTYwODMsMjcgKzY5OTMsMzMgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgICAgICB0ZW1wX3hycGF0aD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCQkgICBjYXNlICIgJHhycGF0aCAiIGluCisgCQkgICAqIiAkdGVtcF94cnBhdGggIiopIDs7CistCQkgICAqKSB4cnBhdGg9IiR4cnBhdGggJHRlbXBfeHJwYXRoIjs7CisrCQkgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkdGVtcF94cnBhdGgiOzsKKyAJCSAgIGVzYWM7OworLQkgICAgICAqKSB0ZW1wX2RlcGxpYnM9IiR0ZW1wX2RlcGxpYnMgJGxpYmRpciI7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCB0ZW1wX2RlcGxpYnMgIiAkbGliZGlyIjs7CisgCSAgICAgIGVzYWMKKyAJICAgIGRvbmUKKyAJICAgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfZGVwbGlicyIKKyAJICBmaQorIAorLQkgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkYWJzZGlyIgorKwkgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRhYnNkaXIiCisgCSAgIyBMaW5rIGFnYWluc3QgdGhpcyBsaWJyYXJ5CisgCSAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IG5vICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGFic19sYWRpci8kbGFuYW1lICRuZXdkZXBlbmRlbmN5X2xpYnMiCisgCSAgIyAuLi4gYW5kIGl0cyBkZXBlbmRlbmN5X2xpYnMKKyAJICB0bXBfbGlicz0KKyAJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisgCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKy0JICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisrCSAgICBjYXNlICRkZXBsaWIgaW4KKysgICAgICAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKysgICAgICAgICAgICAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiOzsKKysgICAgICAgICAgICAgICopIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIiA7OworKyAgICAgICAgICAgIGVzYWMKKysJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisgCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCistCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgKiIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCAiKikKKysgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IiA7OworIAkgICAgICBlc2FjCisgCSAgICBmaQorLQkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAkgIGRvbmUKKyAKKyAJICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm87IHRoZW4KK0BAIC02MTEzLDggKzcwMjksMTAgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgY2FzZSAkZGVwbGliIGluCisgCSAgICAgIC1MKikgcGF0aD0iJGRlcGxpYiIgOzsKKyAJICAgICAgKi5sYSkKKysJICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKKysJICAgICAgICBkZXBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorIAkgICAgICAgIGZ1bmNfZGlybmFtZSAiJGRlcGxpYiIgIiIgIi4iCistCQlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorKwkJZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgCQkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKyAJCWNhc2UgJGRpciBpbgorIAkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNkaXI9IiRkaXIiIDs7CitAQCAtNjEzMCw3ICs3MDQ4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJCWNhc2UgJGhvc3QgaW4KKyAJCSotKi1kYXJ3aW4qKQorIAkJICBkZXBkZXBsPQorLQkJICBkZXBsaWJyYXJ5X25hbWVzPWAke1NFRH0gLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorKwkJICBldmFsIGRlcGxpYnJhcnlfbmFtZXM9YCR7U0VEfSAtbiAtZSAncy9ebGlicmFyeV9uYW1lcz1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisgCQkgIGlmIHRlc3QgLW4gIiRkZXBsaWJyYXJ5X25hbWVzIiA7IHRoZW4KKyAJCSAgICBmb3IgdG1wIGluICRkZXBsaWJyYXJ5X25hbWVzIDsgZG8KKyAJCSAgICAgIGRlcGRlcGw9JHRtcAorQEAgLTYxNDEsOCArNzA1OSw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRkYXJ3aW5faW5zdGFsbF9uYW1lIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJHtPVE9PTDY0fSAtTCAkZGVwZGVwbCAgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCisgICAgICAgICAgICAgICAgICAgICAgIGZpCistCQkgICAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWR5bGliX2ZpbGUgJHt3bH0ke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCistCQkgICAgICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgLWR5bGliX2ZpbGUgJHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorKwkJICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAke3dsfS1keWxpYl9maWxlICR7d2x9JHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorKwkJICAgICAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgLWR5bGliX2ZpbGUgJHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorIAkJICAgICAgcGF0aD0KKyAJCSAgICBmaQorIAkJICBmaQorQEAgLTYxNTIsNyArNzA3MCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQkgIDs7CisgCQllc2FjCisgCQllbHNlCistCQkgIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorKwkJICBldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorIAkJICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisgCQkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisgCQkgIHRlc3QgIiRhYnNkaXIiICE9ICIkbGliZGlyIiAmJiBcCitAQCAtNjE5Miw3ICs3MTEwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBmb3IgZGlyIGluICRuZXdsaWJfc2VhcmNoX3BhdGg7IGRvCisgCSAgICBjYXNlICIkbGliX3NlYXJjaF9wYXRoICIgaW4KKyAJICAgICoiICRkaXIgIiopIDs7CistCSAgICAqKSBsaWJfc2VhcmNoX3BhdGg9IiRsaWJfc2VhcmNoX3BhdGggJGRpciIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIGxpYl9zZWFyY2hfcGF0aCAiICRkaXIiIDs7CisgCSAgICBlc2FjCisgCSAgZG9uZQorIAkgIG5ld2xpYl9zZWFyY2hfcGF0aD0KK0BAIC02MjA1LDcgKzcxMjMsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAlmaQorIAlmb3IgdmFyIGluICR2YXJzIGRlcGVuZGVuY3lfbGliczsgZG8KKyAJICAjIEFkZCBsaWJyYXJpZXMgdG8gJHZhciBpbiByZXZlcnNlIG9yZGVyCistCSAgZXZhbCB0bXBfbGlicz1cJCR2YXIKKysJICBldmFsIHRtcF9saWJzPVwiXCQkdmFyXCIKKyAJICBuZXdfbGlicz0KKyAJICBmb3IgZGVwbGliIGluICR0bXBfbGliczsgZG8KKyAJICAgICMgRklYTUU6IFBlZGFudGljYWxseSwgdGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIHNvCitAQCAtNjI1MCwxMyArNzE2OCwxMyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgLUwqKQorIAkgICAgICBjYXNlICIgJHRtcF9saWJzICIgaW4KKyAJICAgICAgKiIgJGRlcGxpYiAiKikgOzsKKy0JICAgICAgKikgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIiA7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgICAgOzsKKy0JICAgICopIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIgOzsKKyAJICAgIGVzYWMKKyAJICBkb25lCistCSAgZXZhbCAkdmFyPVwkdG1wX2xpYnMKKysJICBldmFsICR2YXI9XCIkdG1wX2xpYnNcIgorIAlkb25lICMgZm9yIHZhcgorICAgICAgIGZpCisgICAgICAgIyBMYXN0IHN0ZXA6IHJlbW92ZSBydW50aW1lIGxpYnMgZnJvbSBkZXBlbmRlbmN5X2xpYnMKK0BAIC02MjY5LDcgKzcxODcsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIDs7CisgCWVzYWMKKyAJaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorLQkgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGkiCisrCSAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkaSIKKyAJZmkKKyAgICAgICBkb25lCisgICAgICAgZGVwZW5kZW5jeV9saWJzPSR0bXBfbGlicworQEAgLTYzMTAsNyArNzIyOCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCisgICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICAgb2xkbGlicz0iJG91dHB1dCIKKy0gICAgICBvYmpzPSIkb2JqcyRvbGRfZGVwbGlicyIKKysgICAgICBmdW5jX2FwcGVuZCBvYmpzICIkb2xkX2RlcGxpYnMiCisgICAgICAgOzsKKyAKKyAgICAgbGliKQorQEAgLTYzMTksOCArNzIzNyw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgbGliKikKKyAJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRvdXRwdXRuYW1lIgorIAluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKy0JZXZhbCAic2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiIgorLQlldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgorKwlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorKwlldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKyAJOzsKKyAgICAgICAqKQorIAl0ZXN0ICIkbW9kdWxlIiA9IG5vICYmIFwKK0BAIC02MzMwLDggKzcyNDgsOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICMgQWRkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXMgaWYgcmVxdWlyZWQKKyAJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisgCSAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CistCSAgZXZhbCAic2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiIgorLQkgIGV2YWwgImxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIiCisrCSAgZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKysJICBldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKyAJZWxzZQorIAkgIGZ1bmNfc3RyaXBuYW1lICcnICcubGEnICIkb3V0cHV0bmFtZSIKKyAJICBsaWJuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKK0BAIC02MzQ2LDcgKzcyNjQsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGVjaG8KKyAJICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbm9uLWxpYnRvb2wiCisgCSAgJEVDSE8gIioqKiBvYmplY3RzICRvYmpzIGlzIG5vdCBwb3J0YWJsZSEiCistCSAgbGlib2Jqcz0iJGxpYm9ianMgJG9ianMiCisrCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRvYmpzIgorIAlmaQorICAgICAgIGZpCisgCitAQCAtNjU0NCw3ICs3NDYyLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBkb25lCisgCisgCSAgIyBNYWtlIGV4ZWN1dGFibGVzIGRlcGVuZCBvbiBvdXIgY3VycmVudCB2ZXJzaW9uLgorLQkgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2N1cnJlbnR9LjAiCisrCSAgZnVuY19hcHBlbmQgdmVyc3RyaW5nICI6JHtjdXJyZW50fS4wIgorIAkgIDs7CisgCisgCXFueCkKK0BAIC02NjEyLDEwICs3NTMwLDEwIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgZmkKKyAKKyAgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJGxpYm5hbWUiICIkbGlibmFtZSIgInllcyIKKy0gICAgICBsaWJvYmpzPSIkbGlib2JqcyAkc3ltZmlsZW9iaiIKKysgICAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHN5bWZpbGVvYmoiCisgICAgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKyAKKy0gICAgICBpZiB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisrICAgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbms7IHRoZW4KKyAJIyBSZW1vdmUgb3VyIG91dHB1dHMsIGJ1dCBkb24ndCByZW1vdmUgb2JqZWN0IGZpbGVzIHNpbmNlIHRoZXkKKyAJIyBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgd2hlbiBjb21waWxpbmcgUElDIG9iamVjdHMuCisgCXJlbW92ZWxpc3Q9CitAQCAtNjYzMSw3ICs3NTQ5LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJCSAgIGNvbnRpbnVlCisgCQkgZmkKKyAJICAgICAgIGZpCistCSAgICAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkcCIKKysJICAgICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkcCIKKyAJICAgICAgIDs7CisgCSAgICAqKSA7OworIAkgIGVzYWMKK0BAIC02NjQyLDcgKzc1NjAsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAorICAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0gY29udmVuaWVuY2UgOyB0aGVuCistCW9sZGxpYnM9IiRvbGRsaWJzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisrCWZ1bmNfYXBwZW5kIG9sZGxpYnMgIiAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorIAorIAkjIFRyYW5zZm9ybSAubG8gZmlsZXMgdG8gLm8gZmlsZXMuCisgCW9sZG9ianM9IiRvYmpzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiR7bGliZXh0fSQvZDsgJGxvMm8iIHwgJE5MMlNQYAorQEAgLTY2NTksMTAgKzc1NzcsMTEgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorIAl0ZW1wX3hycGF0aD0KKyAJZm9yIGxpYmRpciBpbiAkeHJwYXRoOyBkbworLQkgIHRlbXBfeHJwYXRoPSIkdGVtcF94cnBhdGggLVIkbGliZGlyIgorKwkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkgIGZ1bmNfYXBwZW5kIHRlbXBfeHJwYXRoICIgLVIkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgorIAkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisgCSAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworIAkgIGVzYWMKKyAJZG9uZQorIAlpZiB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorQEAgLTY2NzYsNyArNzU5NSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgZm9yIGxpYiBpbiAkb2xkX2RsZmlsZXM7IGRvCisgCWNhc2UgIiAkZGxwcmVmaWxlcyAkZGxmaWxlcyAiIGluCisgCSoiICRsaWIgIiopIDs7CistCSopIGRsZmlsZXM9IiRkbGZpbGVzICRsaWIiIDs7CisrCSopIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkbGliIiA7OworIAllc2FjCisgICAgICAgZG9uZQorIAorQEAgLTY2ODYsNyArNzYwNSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgZm9yIGxpYiBpbiAkb2xkX2RscHJlZmlsZXM7IGRvCisgCWNhc2UgIiRkbHByZWZpbGVzICIgaW4KKyAJKiIgJGxpYiAiKikgOzsKKy0JKikgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGxpYiIgOzsKKysJKikgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRsaWIiIDs7CisgCWVzYWMKKyAgICAgICBkb25lCisgCitAQCAtNjY5OCw3ICs3NjE3LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIDs7CisgCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorIAkgICAgIyBSaGFwc29keSBDIGxpYnJhcnkgaXMgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKKy0JICAgIGRlcGxpYnM9IiRkZXBsaWJzIFN5c3RlbS5sdGZyYW1ld29yayIKKysJICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiBTeXN0ZW0ubHRmcmFtZXdvcmsiCisgCSAgICA7OworIAkgICotKi1uZXRic2QqKQorIAkgICAgIyBEb24ndCBsaW5rIHdpdGggbGliYyB1bnRpbCB0aGUgYS5vdXQgbGQuc28gaXMgZml4ZWQuCitAQCAtNjcxNSw3ICs3NjM0LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAqKQorIAkgICAgIyBBZGQgbGliYyB0byBkZXBsaWJzIG9uIGFsbCBvdGhlciBzeXN0ZW1zIGlmIG5lY2Vzc2FyeS4KKyAJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX25lZWRfbGMiID0gInllcyI7IHRoZW4KKy0JICAgICAgZGVwbGlicz0iJGRlcGxpYnMgLWxjIgorKwkgICAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgLWxjIgorIAkgICAgZmkKKyAJICAgIDs7CisgCSAgZXNhYworQEAgLTY3NjQsMTggKzc2ODMsMTggQEAgRU9GCisgCQlpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisgCQkgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorIAkJICAqIiAkaSAiKikKKy0JCSAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKysJCSAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQkgICAgaT0iIgorIAkJICAgIDs7CisgCQkgIGVzYWMKKyAJCWZpCisgCQlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCistCQkgIGV2YWwgImxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIiCistCQkgIGV2YWwgImRlcGxpYl9tYXRjaGVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiIgorKwkJICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKysJCSAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorIAkJICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAorIAkJICBkZXBsaWJfbWF0Y2g9JDEKKyAJCSAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorLQkJICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorKwkJICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKyAJCSAgZWxzZQorIAkJICAgIGRyb3BwZWRkZXBzPXllcworIAkJICAgIGVjaG8KK0BAIC02Nzg5LDcgKzc3MDgsNyBAQCBFT0YKKyAJCWZpCisgCQk7OworIAkgICAgICAqKQorLQkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisrCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQk7OworIAkgICAgICBlc2FjCisgCSAgICBkb25lCitAQCAtNjgwNywxOCArNzcyNiwxOCBAQCBFT0YKKyAJCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorIAkJICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorIAkJICAgICoiICRpICIqKQorLQkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisrCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQkgICAgICBpPSIiCisgCQkgICAgICA7OworIAkJICAgIGVzYWMKKyAJCSAgZmkKKyAJCSAgaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorLQkJICAgIGV2YWwgImxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIiCistCQkgICAgZXZhbCAiZGVwbGliX21hdGNoZXM9XCIkbGlicmFyeV9uYW1lc19zcGVjXCIiCisrCQkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisrCQkgICAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorIAkJICAgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisgCQkgICAgZGVwbGliX21hdGNoPSQxCisgCQkgICAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorLQkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisrCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQkgICAgZWxzZQorIAkJICAgICAgZHJvcHBlZGRlcHM9eWVzCisgCQkgICAgICBlY2hvCitAQCAtNjg0MCw3ICs3NzU5LDcgQEAgRU9GCisgCQlmaQorIAkJOzsKKyAJICAgICAgKikKKy0JCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorKwkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorIAkJOzsKKyAJICAgICAgZXNhYworIAkgICAgZG9uZQorQEAgLTY4NTcsMTUgKzc3NzYsMjcgQEAgRU9GCisgCSAgICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKyAJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorIAkJKiIgJGFfZGVwbGliICIqKQorLQkJICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisrCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisgCQkgIGFfZGVwbGliPSIiCisgCQkgIDs7CisgCQllc2FjCisgCSAgICAgIGZpCisgCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCistCQlldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgorKwkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisrCQlpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY19nbG9iIjsgdGhlbgorKwkJICBsaWJuYW1lZ2xvYj1gZnVuY19lY2hvX2FsbCAiJGxpYm5hbWUiIHwgJFNFRCAtZSAkZmlsZV9tYWdpY19nbG9iYAorKwkJZWxzZQorKwkJICBsaWJuYW1lZ2xvYj0kbGlibmFtZQorKwkJZmkKKysJCXRlc3QgIiR3YW50X25vY2FzZWdsb2IiID0geWVzICYmIG5vY2FzZWdsb2I9YHNob3B0IC1wIG5vY2FzZWdsb2JgCisgCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKy0JCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisrCQkgIGlmIHRlc3QgIiR3YW50X25vY2FzZWdsb2IiID0geWVzOyB0aGVuCisrCQkgICAgc2hvcHQgLXMgbm9jYXNlZ2xvYgorKwkJICAgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZWdsb2JbLi1dKiAyPi9kZXYvbnVsbGAKKysJCSAgICAkbm9jYXNlZ2xvYgorKwkJICBlbHNlCisrCQkgICAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lZ2xvYlsuLV0qIDI+L2Rldi9udWxsYAorKwkJICBmaQorIAkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisgCQkgICAgICAjIEZvbGxvdyBzb2Z0IGxpbmtzLgorIAkJICAgICAgaWYgbHMgLWxMZCAiJHBvdGVudF9saWIiIDI+L2Rldi9udWxsIHwKK0BAIC02ODg1LDEwICs3ODE2LDEwIEBAIEVPRgorIAkJCSopIHBvdGxpYj1gJEVDSE8gIiRwb3RsaWIiIHwgJFNFRCAncyxbXi9dKiQsLCdgIiRwb3RsaWJsaW5rIjs7CisgCQkJZXNhYworIAkJICAgICAgZG9uZQorLQkJICAgICAgaWYgZXZhbCAiJGZpbGVfbWFnaWNfY21kIFwiXCRwb3RsaWJcIiIgMj4vZGV2L251bGwgfAorKwkJICAgICAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJHBvdGxpYlwiIDI+L2Rldi9udWxsIHwKKyAJCQkgJFNFRCAtZSAxMHEgfAorIAkJCSAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorLQkJCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKysJCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorIAkJCWFfZGVwbGliPSIiCisgCQkJYnJlYWsgMgorIAkJICAgICAgZmkKK0BAIC02OTEzLDcgKzc4NDQsNyBAQCBFT0YKKyAJICAgICAgOzsKKyAJICAgICopCisgCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCistCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKysJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKyAJICAgICAgOzsKKyAJICAgIGVzYWMKKyAJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgorQEAgLTY5MjksMjAgKzc4NjAsMjAgQEAgRU9GCisgCSAgICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKyAJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorIAkJKiIgJGFfZGVwbGliICIqKQorLQkJICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisrCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisgCQkgIGFfZGVwbGliPSIiCisgCQkgIDs7CisgCQllc2FjCisgCSAgICAgIGZpCisgCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCistCQlldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgorKwkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisgCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKyAJCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisgCQkgIGZvciBwb3RlbnRfbGliIGluICRwb3RlbnRpYWxfbGliczsgZG8KKyAJCSAgICBwb3RsaWI9IiRwb3RlbnRfbGliIiAjIHNlZSBzeW1saW5rLWNoZWNrIGFib3ZlIGluIGZpbGVfbWFnaWMgdGVzdAorIAkJICAgIGlmIGV2YWwgIlwkRUNITyBcIiRwb3RlbnRfbGliXCIiIDI+L2Rldi9udWxsIHwgJFNFRCAxMHEgfCBcCisgCQkgICAgICAgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKy0JCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKysJCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisgCQkgICAgICBhX2RlcGxpYj0iIgorIAkJICAgICAgYnJlYWsgMgorIAkJICAgIGZpCitAQCAtNjk2Nyw3ICs3ODk4LDcgQEAgRU9GCisgCSAgICAgIDs7CisgCSAgICAqKQorIAkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgorLQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisgCSAgICAgIDs7CisgCSAgICBlc2FjCisgCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KK0BAIC03MDcxLDcgKzgwMDIsNyBAQCBFT0YKKyAJKikKKyAJICBjYXNlICIgJGRlcGxpYnMgIiBpbgorIAkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKKy0JICAgIG5ld19saWJzPSIkbmV3X2xpYnMgLUwkcGF0aC8kb2JqZGlyIiA7OworKwkgICAgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAtTCRwYXRoLyRvYmpkaXIiIDs7CisgCSAgZXNhYworIAkgIDs7CisgCWVzYWMKK0BAIC03MDgxLDEwICs4MDEyLDEwIEBAIEVPRgorIAktTCopCisgCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCisgCSAgKiIgJGRlcGxpYiAiKikgOzsKKy0JICAqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworIAkgIGVzYWMKKyAJICA7OworLQkqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisrCSopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKyAJZXNhYworICAgICAgIGRvbmUKKyAgICAgICBkZXBsaWJzPSIkbmV3X2xpYnMiCitAQCAtNzEwMSwxMCArODAzMiwxMiBAQCBFT0YKKyAJICBoYXJkY29kZV9saWJkaXJzPQorIAkgIGRlcF9ycGF0aD0KKyAJICBycGF0aD0iJGZpbmFsaXplX3JwYXRoIgorLQkgIHRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgcnBhdGg9IiRjb21waWxlX3JwYXRoJHJwYXRoIgorKwkgIHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKKyAJICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KKyAJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorIAkgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKysJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkJbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKKyAJCWlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorIAkJICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorIAkJZWxzZQorQEAgLTcxMTMsMTggKzgwNDYsMTggQEAgRU9GCisgCQkgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKyAJCSAgICA7OworIAkJICAqKQorLQkJICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorKwkJICAgIGZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKyAJCSAgICA7OworIAkJICBlc2FjCisgCQlmaQorIAkgICAgICBlbHNlCistCQlldmFsICJmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKy0JCWRlcF9ycGF0aD0iJGRlcF9ycGF0aCAkZmxhZyIKKysJCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysJCWZ1bmNfYXBwZW5kIGRlcF9ycGF0aCAiICRmbGFnIgorIAkgICAgICBmaQorIAkgICAgZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisgCSAgICAgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKyAJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAgICAgKikgcGVybV9ycGF0aD0iJHBlcm1fcnBhdGggJGxpYmRpciIgOzsKKysJICAgICAgKikgZnVuY19hcHBlZCBwZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAJICBkb25lCitAQCAtNzEzMyw0MCArODA2NiwzOCBAQCBFT0YKKyAJICAgICB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJICAgIGxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisgCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCI7IHRoZW4KKy0JICAgICAgZXZhbCAiZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRcIiIKKysJICAgICAgZXZhbCBkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZFwiCisgCSAgICBlbHNlCistCSAgICAgIGV2YWwgImRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisrCSAgICAgIGV2YWwgZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorIAkgICAgZmkKKyAJICBmaQorIAkgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCisgCSAgICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorIAkgICAgcnBhdGg9CisgCSAgICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworLQkgICAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisrCSAgICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKKyAJICAgIGRvbmUKKy0JICAgIGV2YWwgJHJ1bnBhdGhfdmFyPVwkcnBhdGhcJCRydW5wYXRoX3ZhcgorLQkgICAgZXhwb3J0ICRydW5wYXRoX3ZhcgorKwkgICAgZXZhbCAiJHJ1bnBhdGhfdmFyPSckcnBhdGhcJCRydW5wYXRoX3Zhcic7IGV4cG9ydCAkcnVucGF0aF92YXIiCisgCSAgZmkKKyAJICB0ZXN0IC1uICIkZGVwX3JwYXRoIiAmJiBkZXBsaWJzPSIkZGVwX3JwYXRoICRkZXBsaWJzIgorIAlmaQorIAorIAlzaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgiCistCXRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoIgorKwl0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluayAmJiBzaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRzaGxpYnBhdGgiCisgCWlmIHRlc3QgLW4gIiRzaGxpYnBhdGgiOyB0aGVuCistCSAgZXZhbCAkc2hsaWJwYXRoX3Zhcj1cJHNobGlicGF0aFwkJHNobGlicGF0aF92YXIKKy0JICBleHBvcnQgJHNobGlicGF0aF92YXIKKysJICBldmFsICIkc2hsaWJwYXRoX3Zhcj0nJHNobGlicGF0aFwkJHNobGlicGF0aF92YXInOyBleHBvcnQgJHNobGlicGF0aF92YXIiCisgCWZpCisgCisgCSMgR2V0IHRoZSByZWFsIGFuZCBsaW5rIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LgorLQlldmFsICJzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIiCistCWV2YWwgImxpYnJhcnlfbmFtZXM9XCIkbGlicmFyeV9uYW1lc19zcGVjXCIiCisrCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisrCWV2YWwgbGlicmFyeV9uYW1lcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIgorIAlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKKyAJc2hpZnQKKyAJcmVhbG5hbWU9IiQxIgorIAlzaGlmdAorIAorIAlpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCistCSAgZXZhbCAic29uYW1lPVwiJHNvbmFtZV9zcGVjXCIiCisrCSAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgorIAllbHNlCisgCSAgc29uYW1lPSIkcmVhbG5hbWUiCisgCWZpCitAQCAtNzE3OCw3ICs4MTA5LDcgQEAgRU9GCisgCWxpbmtuYW1lcz0KKyAJZm9yIGxpbmsKKyAJZG8KKy0JICBsaW5rbmFtZXM9IiRsaW5rbmFtZXMgJGxpbmsiCisrCSAgZnVuY19hcHBlbmQgbGlua25hbWVzICIgJGxpbmsiCisgCWRvbmUKKyAKKyAJIyBVc2Ugc3RhbmRhcmQgb2JqZWN0cyBpZiB0aGV5IGFyZSBwaWMKK0BAIC03MTg5LDcgKzgxMjAsNyBAQCBFT0YKKyAJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorIAkgICRvcHRfZHJ5X3J1biB8fCBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKyAJICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKy0JICBkZWxmaWxlcz0iJGRlbGZpbGVzICRleHBvcnRfc3ltYm9scyIKKysJICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyIKKyAJZmkKKyAKKyAJb3JpZ19leHBvcnRfc3ltYm9scz0KK0BAIC03MjIwLDEzICs4MTUxLDQ1IEBAIEVPRgorIAkgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKKyAJICAgIGNtZHM9JGV4cG9ydF9zeW1ib2xzX2NtZHMKKyAJICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworLQkgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KKysJICAgIGZvciBjbWQxIGluICRjbWRzOyBkbworIAkgICAgICBJRlM9IiRzYXZlX2lmcyIKKy0JICAgICAgZXZhbCAiY21kPVwiJGNtZFwiIgorLQkgICAgICBmdW5jX2xlbiAiICRjbWQiCistCSAgICAgIGxlbj0kZnVuY19sZW5fcmVzdWx0CistCSAgICAgIGlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorKwkgICAgICAjIFRha2UgdGhlIG5vcm1hbCBicmFuY2ggaWYgdGhlIG5tX2ZpbGVfbGlzdF9zcGVjIGJyYW5jaAorKwkgICAgICAjIGRvZXNuJ3Qgd29yayBvciBpZiB0b29sIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZC4KKysJICAgICAgY2FzZSAkbm1fZmlsZV9saXN0X3NwZWN+JHRvX3Rvb2xfZmlsZV9jbWQgaW4KKysJCSp+ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCB8ICp+ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgfCB+KikKKysJCSAgdHJ5X25vcm1hbF9icmFuY2g9eWVzCisrCQkgIGV2YWwgY21kPVwiJGNtZDFcIgorKwkJICBmdW5jX2xlbiAiICRjbWQiCisrCQkgIGxlbj0kZnVuY19sZW5fcmVzdWx0CisrCQkgIDs7CisrCQkqKQorKwkJICB0cnlfbm9ybWFsX2JyYW5jaD1ubworKwkJICA7OworKwkgICAgICBlc2FjCisrCSAgICAgIGlmIHRlc3QgIiR0cnlfbm9ybWFsX2JyYW5jaCIgPSB5ZXMgXAorKwkJICYmIHsgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIFwKKysJCSAgICAgIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB9CisrCSAgICAgIHRoZW4KKysJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKysJCXNraXBwZWRfZXhwb3J0PWZhbHNlCisrCSAgICAgIGVsaWYgdGVzdCAtbiAiJG5tX2ZpbGVfbGlzdF9zcGVjIjsgdGhlbgorKwkJZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKKysJCW91dHB1dF9sYT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKysJCXNhdmVfbGlib2Jqcz0kbGlib2JqcworKwkJc2F2ZV9vdXRwdXQ9JG91dHB1dAorKwkJb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9Lm5tCisrCQlmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKysJCWxpYm9ianM9JG5tX2ZpbGVfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorKwkJZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorKwkJZnVuY192ZXJib3NlICJjcmVhdGluZyAkTk0gaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorKwkJZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzOyBkbworKwkJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKysJCSAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCisrCQlkb25lID4gIiRvdXRwdXQiCisrCQlldmFsIGNtZD1cIiRjbWQxXCIKKyAJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKysJCW91dHB1dD0kc2F2ZV9vdXRwdXQKKysJCWxpYm9ianM9JHNhdmVfbGlib2JqcworIAkJc2tpcHBlZF9leHBvcnQ9ZmFsc2UKKyAJICAgICAgZWxzZQorIAkJIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGV4ZWN1dGUgaW4gb25lIHN0ZXAuCitAQCAtNzI0OCw3ICs4MjExLDcgQEAgRU9GCisgCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKyAJICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKyAJICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKy0JICAkb3B0X2RyeV9ydW4gfHwgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIgorKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworIAlmaQorIAorIAlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorQEAgLTcyNjAsNyArODIyMyw3IEBAIEVPRgorIAkgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5CisgCSAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KKyAJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKKy0JICBkZWxmaWxlcz0iJGRlbGZpbGVzICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisrCSAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorIAkgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorIAkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCisgCWZpCitAQCAtNzI3MCw3ICs4MjMzLDcgQEAgRU9GCisgCSAgY2FzZSAiICRjb252ZW5pZW5jZSAiIGluCisgCSAgKiIgJHRlc3RfZGVwbGliICIqKSA7OworIAkgICopCistCSAgICB0bXBfZGVwbGlicz0iJHRtcF9kZXBsaWJzICR0ZXN0X2RlcGxpYiIKKysJICAgIGZ1bmNfYXBwZW5kIHRtcF9kZXBsaWJzICIgJHRlc3RfZGVwbGliIgorIAkgICAgOzsKKyAJICBlc2FjCisgCWRvbmUKK0BAIC03Mjg2LDQzICs4MjQ5LDQzIEBAIEVPRgorIAkgIGZpCisgCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorIAkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCistCSAgICBldmFsICJsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiIgorKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisgCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorIAkgIGVsc2UKKyAJICAgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCistCSAgICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKysJICAgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisgCisgCSAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKy0JICAgIGxpYm9ianM9IiRsaWJvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorIAkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKyAJICBmaQorIAlmaQorIAorIAlpZiB0ZXN0ICIkdGhyZWFkX3NhZmUiID0geWVzICYmIHRlc3QgLW4gIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWMiOyB0aGVuCistCSAgZXZhbCAiZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIiIKKy0JICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJGZsYWciCisrCSAgZXZhbCBmbGFnPVwiJHRocmVhZF9zYWZlX2ZsYWdfc3BlY1wiCisrCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJGZsYWciCisgCWZpCisgCisgCSMgTWFrZSBhIGJhY2t1cCBvZiB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSB3aGVuIHJlbGlua2luZworLQlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKy0JICAkb3B0X2RyeV9ydW4gfHwgKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVUgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVUpIHx8IGV4aXQgJD8KKysJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VSAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VSknIHx8IGV4aXQgJD8KKyAJZmkKKyAKKyAJIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorIAlpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiIDsgdGhlbgorIAkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KKy0JICAgIGV2YWwgInRlc3RfY21kcz1cIiRtb2R1bGVfZXhwc3ltX2NtZHNcIiIKKysJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9leHBzeW1fY21kc1wiCisgCSAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKKyAJICBlbHNlCistCSAgICBldmFsICJ0ZXN0X2NtZHM9XCIkbW9kdWxlX2NtZHNcIiIKKysJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9jbWRzXCIKKyAJICAgIGNtZHM9JG1vZHVsZV9jbWRzCisgCSAgZmkKKyAJZWxzZQorIAkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCistCSAgICBldmFsICJ0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9leHBzeW1fY21kc1wiIgorKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9leHBzeW1fY21kc1wiCisgCSAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCisgCSAgZWxzZQorLQkgICAgZXZhbCAidGVzdF9jbWRzPVwiJGFyY2hpdmVfY21kc1wiIgorKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9jbWRzXCIKKyAJICAgIGNtZHM9JGFyY2hpdmVfY21kcworIAkgIGZpCisgCWZpCitAQCAtNzM2NiwxMCArODMyOSwxMyBAQCBFT0YKKyAJICAgIGVjaG8gJ0lOUFVUICgnID4gJG91dHB1dAorIAkgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCisgCSAgICBkbworLQkgICAgICAkRUNITyAiJG9iaiIgPj4gJG91dHB1dAorKwkgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKysJICAgICAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiID4+ICRvdXRwdXQKKyAJICAgIGRvbmUKKyAJICAgIGVjaG8gJyknID4+ICRvdXRwdXQKKy0JICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKysJICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKysJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorKwkgICAgb3V0cHV0PSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKyAJICBlbGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiWCRmaWxlX2xpc3Rfc3BlYyIgIT0gWDsgdGhlbgorIAkgICAgb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9LmxuaworIAkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBsaW5rZXIgaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorQEAgLTczODMsMTUgKzgzNDksMTcgQEAgRU9GCisgCSAgICBmaQorIAkgICAgZm9yIG9iagorIAkgICAgZG8KKy0JICAgICAgJEVDSE8gIiRvYmoiID4+ICRvdXRwdXQKKysJICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisrCSAgICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0CisgCSAgICBkb25lCistCSAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCistCSAgICBvdXRwdXQ9JGZpcnN0b2JqXCIkZmlsZV9saXN0X3NwZWMkb3V0cHV0XCIKKysJICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKysJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorKwkgICAgb3V0cHV0PSRmaXJzdG9ialwiJGZpbGVfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiCisgCSAgZWxzZQorIAkgICAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyI7IHRoZW4KKyAJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4uLiIKKyAJICAgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CistCSAgICAgIGV2YWwgInRlc3RfY21kcz1cIiRyZWxvYWRfY21kc1wiIgorKwkgICAgICBldmFsIHRlc3RfY21kcz1cIiRyZWxvYWRfY21kc1wiCisgCSAgICAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKKyAJICAgICAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisgCSAgICAgIGxlbj0kbGVuMAorQEAgLTc0MTEsMTIgKzgzNzksMTIgQEAgRU9GCisgCQkgIGlmIHRlc3QgIiRrIiAtZXEgMSA7IHRoZW4KKyAJCSAgICAjIFRoZSBmaXJzdCBmaWxlIGRvZXNuJ3QgaGF2ZSBhIHByZXZpb3VzIGNvbW1hbmQgdG8gYWRkLgorIAkJICAgIHJlbG9hZF9vYmpzPSRvYmpsaXN0CistCQkgICAgZXZhbCAiY29uY2F0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIiIKKysJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKKyAJCSAgZWxzZQorIAkJICAgICMgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMgd2lsbCBsaW5rIGluCisgCQkgICAgIyB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKyAJCSAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKKy0JCSAgICBldmFsICJjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+JHJlbG9hZF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiIgorKwkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzfiRyZWxvYWRfY21kc35cJFJNICRsYXN0X3JvYmpcIgorIAkJICBmaQorIAkJICBsYXN0X3JvYmo9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKyAJCSAgZnVuY19hcml0aCAkayArIDEKK0BAIC03NDMzLDExICs4NDAxLDExIEBAIEVPRgorIAkgICAgICAjIGZpbGVzIHdpbGwgbGluayBpbiB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKyAJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisgCSAgICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgorLQkgICAgICBldmFsICJjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRyZWxvYWRfY21kc1wiIgorKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JHJlbG9hZF9jbWRzXCIKKyAJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKy0JICAgICAgICBldmFsICJjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfX5cJFJNICRsYXN0X3JvYmpcIiIKKysJICAgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9flwkUk0gJGxhc3Rfcm9ialwiCisgCSAgICAgIGZpCistCSAgICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKysJICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorIAorIAkgICAgZWxzZQorIAkgICAgICBvdXRwdXQ9CitAQCAtNzQ1MCw5ICs4NDE4LDkgQEAgRU9GCisgCSAgICAgIGxpYm9ianM9JG91dHB1dAorIAkgICAgICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byBjcmVhdGUgdGhlIGV4cG9ydCBmaWxlLgorIAkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKy0JICAgICAgZXZhbCAiY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJGV4cG9ydF9zeW1ib2xzX2NtZHNcIiIKKysJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHMkZXhwb3J0X3N5bWJvbHNfY21kc1wiCisgCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCistCQlldmFsICJjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIiCisrCQlldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc35cJFJNICRsYXN0X3JvYmpcIgorIAkgICAgICBmaQorIAkgICAgZmkKKyAKK0BAIC03NDcxLDcgKzg0MzksNyBAQCBFT0YKKyAJCWx0X2V4aXQ9JD8KKyAKKyAJCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorLQkJaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisrCQlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisgCQkgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisgCQkgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKKyAJCSAgICAkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorQEAgLTc0OTIsNyArODQ2MCw3IEBAIEVPRgorIAkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorIAkgICAgICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKyAJICAgICAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCistCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiCisrCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworIAkgICAgZmkKKyAKKyAJICAgIGlmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorQEAgLTc1MDQsNyArODQ3Miw3IEBAIEVPRgorIAkgICAgICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQorIAkgICAgICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorIAkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKKy0JICAgICAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorKwkgICAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisgCSAgICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorIAkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworIAkgICAgZmkKK0BAIC03NTE1LDcgKzg0ODMsNyBAQCBFT0YKKyAJICBvdXRwdXQ9JHNhdmVfb3V0cHV0CisgCisgCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIiAmJiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCistCSAgICBldmFsICJsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiIgorKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisgCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorIAkgIGZpCisgCSAgIyBFeHBhbmQgdGhlIGxpYnJhcnkgbGlua2luZyBjb21tYW5kcyBhZ2FpbiB0byByZXNldCB0aGUKK0BAIC03NTM5LDIzICs4NTA3LDIzIEBAIEVPRgorIAorIAlpZiB0ZXN0IC1uICIkZGVsZmlsZXMiOyB0aGVuCisgCSAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcyB0byAkY21kcy4KKy0JICBldmFsICJjbWRzPVwiXCRjbWRzflwkUk0gJGRlbGZpbGVzXCIiCisrCSAgZXZhbCBjbWRzPVwiXCRjbWRzflwkUk0gJGRlbGZpbGVzXCIKKyAJZmkKKyAKKyAJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisgCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorIAkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCistCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisrCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKyAKKyAJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcworLQkgIGxpYm9ianM9IiRsaWJvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorKwkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAJICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorIAlmaQorIAorIAlzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKyAJZm9yIGNtZCBpbiAkY21kczsgZG8KKyAJICBJRlM9IiRzYXZlX2lmcyIKKy0JICBldmFsICJjbWQ9XCIkY21kXCIiCisrCSAgZXZhbCBjbWQ9XCIkY21kXCIKKyAJICAkb3B0X3NpbGVudCB8fCB7CisgCSAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCisgCSAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCitAQCAtNzU2NCw3ICs4NTMyLDcgQEAgRU9GCisgCSAgICBsdF9leGl0PSQ/CisgCisgCSAgICAjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKy0JICAgIGlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorKwkgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorIAkgICAgICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAorIAkgICAgICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCisgCQkkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorQEAgLTc1NzYsOCArODU0NCw4IEBAIEVPRgorIAlJRlM9IiRzYXZlX2lmcyIKKyAKKyAJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CistCWlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorLQkgICRvcHRfZHJ5X3J1biB8fCAoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VCAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VCAmJiAkTVYgJHtyZWFsbmFtZX1VICRyZWFsbmFtZSkgfHwgZXhpdCAkPworKwlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisrCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1UICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1UICYmICRNViAke3JlYWxuYW1lfVUgJHJlYWxuYW1lKScgfHwgZXhpdCAkPworIAorIAkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKyAJICAgIGlmIHRlc3QgLXogIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KK0BAIC03NjU2LDE3ICs4NjI0LDIwIEBAIEVPRgorIAorICAgICAgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKyAJaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorLQkgIGV2YWwgInRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzPVwiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIiCisrCSAgZXZhbCB0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1cIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisgCSAgcmVsb2FkX2NvbnZfb2Jqcz0kcmVsb2FkX29ianNcIGAkRUNITyAiJHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzIiB8ICRTRUQgJ3N8LHwgfGcnYAorIAllbHNlCisgCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke29ian14IgorLQkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisgCisgCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCisgCSAgcmVsb2FkX2NvbnZfb2Jqcz0iJHJlbG9hZF9vYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorIAlmaQorICAgICAgIGZpCisgCisrICAgICAgIyBJZiB3ZSdyZSBub3QgYnVpbGRpbmcgc2hhcmVkLCB3ZSBuZWVkIHRvIHVzZSBub25fcGljX29ianMKKysgICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgbGlib2Jqcz0iJG5vbl9waWNfb2JqZWN0cyIKKysKKyAgICAgICAjIENyZWF0ZSB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKyAgICAgICByZWxvYWRfb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMgImAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiL1wuJHtsaWJleHR9JC9kOyAvXC5saWIkL2Q7ICRsbzJvIiB8ICROTDJTUGAiICRyZWxvYWRfY29udl9vYmpzIiAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKyAKK0BAIC03NjkwLDcgKzg2NjEsNyBAQCBFT0YKKyAJIyBDcmVhdGUgYW4gaW52YWxpZCBsaWJ0b29sIG9iamVjdCBpZiBubyBQSUMsIHNvIHRoYXQgd2UgZG9uJ3QKKyAJIyBhY2NpZGVudGFsbHkgbGluayBpdCBpbnRvIGEgcHJvZ3JhbS4KKyAJIyAkc2hvdyAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIgorLQkjICRvcHRfZHJ5X3J1biB8fCBlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmogfHwgZXhpdCAkPworKwkjICRvcHRfZHJ5X3J1biB8fCBldmFsICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8KKyAJZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICAgZmkKKyAKK0BAIC03NzQwLDggKzg3MTEsOCBAQCBFT0YKKyAJaWYgdGVzdCAiJHRhZ25hbWUiID0gQ1hYIDsgdGhlbgorIAkgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0gaW4KKyAJICAgIDEwLlswMTIzXSkKKy0JICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKKy0JICAgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJHt3bH0tYmluZF9hdF9sb2FkIgorKwkgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAke3dsfS1iaW5kX2F0X2xvYWQiCisrCSAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAke3dsfS1iaW5kX2F0X2xvYWQiCisgCSAgICA7OworIAkgIGVzYWMKKyAJZmkKK0BAIC03NzYxLDcgKzg3MzIsNyBAQCBFT0YKKyAJKikKKyAJICBjYXNlICIgJGNvbXBpbGVfZGVwbGlicyAiIGluCisgCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQorLQkgICAgbmV3X2xpYnM9IiRuZXdfbGlicyAtTCRwYXRoLyRvYmpkaXIiIDs7CisrCSAgICBmdW5jX2FwcGVuZCBuZXdfbGlicyAiIC1MJHBhdGgvJG9iamRpciIgOzsKKyAJICBlc2FjCisgCSAgOzsKKyAJZXNhYworQEAgLTc3NzEsMTcgKzg3NDIsMTcgQEAgRU9GCisgCS1MKikKKyAJICBjYXNlICIgJG5ld19saWJzICIgaW4KKyAJICAqIiAkZGVwbGliICIqKSA7OworLQkgICopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CisgCSAgZXNhYworIAkgIDs7CistCSopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKysJKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworIAllc2FjCisgICAgICAgZG9uZQorICAgICAgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19saWJzIgorIAorIAorLSAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkY29tcGlsZV9kZXBsaWJzIgorLSAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRmaW5hbGl6ZV9kZXBsaWJzIgorKyAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRjb21waWxlX2RlcGxpYnMiCisrICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRmaW5hbGl6ZV9kZXBsaWJzIgorIAorICAgICAgIGlmIHRlc3QgLW4gIiRycGF0aCR4cnBhdGgiOyB0aGVuCisgCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KK0BAIC03Nzg5LDcgKzg3NjAsNyBAQCBFT0YKKyAJICAjIFRoaXMgaXMgdGhlIG1hZ2ljIHRvIHVzZSAtcnBhdGguCisgCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKyAJICAqIiAkbGliZGlyICIqKSA7OworLQkgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CisgCSAgZXNhYworIAlkb25lCisgICAgICAgZmkKK0BAIC03ODA4LDE4ICs4Nzc5LDE4IEBAIEVPRgorIAkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisgCQk7OworIAkgICAgICAqKQorLQkJaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisrCQlmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisgCQk7OworIAkgICAgICBlc2FjCisgCSAgICBmaQorIAkgIGVsc2UKKy0JICAgIGV2YWwgImZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorLQkgICAgcnBhdGg9IiRycGF0aCAkZmxhZyIKKysJICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCisgCSAgZmkKKyAJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisgCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorIAkgICoiICRsaWJkaXIgIiopIDs7CistCSAgKikgcGVybV9ycGF0aD0iJHBlcm1fcnBhdGggJGxpYmRpciIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBwZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKKyAJICBlc2FjCisgCWZpCisgCWNhc2UgJGhvc3QgaW4KK0BAIC03ODI4LDEyICs4Nzk5LDEyIEBAIEVPRgorIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorIAkgICoiOiRsaWJkaXI6IiopIDs7CisgCSAgOjopIGRsbHNlYXJjaHBhdGg9JGxpYmRpcjs7CistCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JGxpYmRpciI7OworKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokbGliZGlyIjs7CisgCSAgZXNhYworIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorIAkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworIAkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKKy0JICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokdGVzdGJpbmRpciI7OworKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJpbmRpciI7OworIAkgIGVzYWMKKyAJICA7OworIAllc2FjCitAQCAtNzg0Miw3ICs4ODEzLDcgQEAgRU9GCisgICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisgCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKy0JZXZhbCAicnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKysJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgZmkKKyAgICAgICBjb21waWxlX3JwYXRoPSIkcnBhdGgiCisgCitAQCAtNzg1OSwxOCArODgzMCwxOCBAQCBFT0YKKyAJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorIAkJOzsKKyAJICAgICAgKikKKy0JCWhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorKwkJZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorIAkJOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAJICBlbHNlCistCSAgICBldmFsICJmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKy0JICAgIHJwYXRoPSIkcnBhdGggJGZsYWciCisrCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorIAkgIGZpCisgCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorIAkgIGNhc2UgIiRmaW5hbGl6ZV9wZXJtX3JwYXRoICIgaW4KKyAJICAqIiAkbGliZGlyICIqKSA7OworLQkgICopIGZpbmFsaXplX3Blcm1fcnBhdGg9IiRmaW5hbGl6ZV9wZXJtX3JwYXRoICRsaWJkaXIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7CisgCSAgZXNhYworIAlmaQorICAgICAgIGRvbmUKK0BAIC03ODc4LDcgKzg4NDksNyBAQCBFT0YKKyAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKyAJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorIAlsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorLQlldmFsICJycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICBmaQorICAgICAgIGZpbmFsaXplX3JwYXRoPSIkcnBhdGgiCisgCitAQCAtNzkyMSw2ICs4ODkyLDEyIEBAIEVPRgorIAlleGl0X3N0YXR1cz0wCisgCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdF9zdGF0dXM9JD8nCisgCisrCWlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgorKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorKwkgIHBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKysJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JworKwlmaQorKworIAkjIERlbGV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorIAlpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iOyB0aGVuCisgCSAgZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IicKK0BAIC03OTQzLDcgKzg5MjAsNyBAQCBFT0YKKyAJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorIAkgIHJwYXRoPQorIAkgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCistCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisrCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCisgCSAgZG9uZQorIAkgIGNvbXBpbGVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKyAJZmkKK0BAIC03OTUxLDcgKzg5MjgsNyBAQCBFT0YKKyAJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorIAkgIHJwYXRoPQorIAkgIGZvciBkaXIgaW4gJGZpbmFsaXplX3Blcm1fcnBhdGg7IGRvCistCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisrCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCisgCSAgZG9uZQorIAkgIGZpbmFsaXplX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisgCWZpCitAQCAtNzk2Niw2ICs4OTQzLDEzIEBAIEVPRgorIAkkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQKKyAJIyBMaW5rIHRoZSBleGVjdXRhYmxlIGFuZCBleGl0CisgCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKysKKysJaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisrCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisrCSAgcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAorKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCisrCWZpCisrCisgCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgIGZpCisgCitAQCAtNzk5OSw2ICs4OTgzLDEyIEBAIEVPRgorIAorICAgICAgIGZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKyAKKysgICAgICBpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKysJZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIgorKwlwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAorKwlmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JworKyAgICAgIGZpCisrCisgICAgICAgIyBOb3cgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdC4KKyAgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCisgCitAQCAtODA5Niw3ICs5MDg2LDcgQEAgRU9GCisgCWVsc2UKKyAJICBvbGRvYmpzPSIkb2xkX2RlcGxpYnMgJG5vbl9waWNfb2JqZWN0cyIKKyAJICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSB5ZXMgJiYgdGVzdCAtZiAiJHN5bWZpbGVvYmoiOyB0aGVuCistCSAgICBvbGRvYmpzPSIkb2xkb2JqcyAkc3ltZmlsZW9iaiIKKysJICAgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkc3ltZmlsZW9iaiIKKyAJICBmaQorIAlmaQorIAlhZGRsaWJzPSIkb2xkX2NvbnZlbmllbmNlIgorQEAgLTgxMDQsMTAgKzkwOTQsMTAgQEAgRU9GCisgCisgICAgICAgaWYgdGVzdCAtbiAiJGFkZGxpYnMiOyB0aGVuCisgCWdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCistCWdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorKwlmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorIAorIAlmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkYWRkbGlicworLQlvbGRvYmpzPSIkb2xkb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKysJZnVuY19hcHBlbmQgb2xkb2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorICAgICAgIGZpCisgCisgICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGFyY2hpdmUgY29tbWFuZHMuCitAQCAtODExOCwxMCArOTEwOCwxMCBAQCBFT0YKKyAJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisgCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorIAkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCistCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisrCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKyAKKyAJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcworLQkgIG9sZG9ianM9IiRvbGRvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorKwkgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAJZmkKKyAKKyAJIyBQT1NJWCBkZW1hbmRzIG5vIHBhdGhzIHRvIGJlIGVuY29kZWQgaW4gYXJjaGl2ZXMuICBXZSBoYXZlCitAQCAtODEzOSw3ICs5MTI5LDcgQEAgRU9GCisgCWVsc2UKKyAJICBlY2hvICJjb3B5aW5nIHNlbGVjdGVkIG9iamVjdCBmaWxlcyB0byBhdm9pZCBiYXNlbmFtZSBjb25mbGljdHMuLi4iCisgCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKy0JICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKysJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorIAkgIGZ1bmNfbWtkaXJfcCAiJGdlbnRvcCIKKyAJICBzYXZlX29sZG9ianM9JG9sZG9ianMKKyAJICBvbGRvYmpzPQorQEAgLTgxNjMsMTggKzkxNTMsMjggQEAgRU9GCisgCQllc2FjCisgCSAgICAgIGRvbmUKKyAJICAgICAgZnVuY19zaG93X2V2YWwgImxuICRvYmogJGdlbnRvcC8kbmV3b2JqIHx8IGNwICRvYmogJGdlbnRvcC8kbmV3b2JqIgorLQkgICAgICBvbGRvYmpzPSIkb2xkb2JqcyAkZ2VudG9wLyRuZXdvYmoiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZ2VudG9wLyRuZXdvYmoiCisgCSAgICAgIDs7CistCSAgICAqKSBvbGRvYmpzPSIkb2xkb2JqcyAkb2JqIiA7OworKwkgICAgKikgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRvYmoiIDs7CisgCSAgICBlc2FjCisgCSAgZG9uZQorIAlmaQorLQlldmFsICJjbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIiIKKysJZXZhbCBjbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorIAorIAlmdW5jX2xlbiAiICRjbWRzIgorIAlsZW49JGZ1bmNfbGVuX3Jlc3VsdAorIAlpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKyAJICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCisrCWVsaWYgdGVzdCAtbiAiJGFyY2hpdmVyX2xpc3Rfc3BlYyI7IHRoZW4KKysJICBmdW5jX3ZlcmJvc2UgInVzaW5nIGNvbW1hbmQgZmlsZSBhcmNoaXZlIGxpbmtpbmcuLi4iCisrCSAgZm9yIG9iaiBpbiAkb2xkb2JqcworKwkgIGRvCisrCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKysJICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgorKwkgIGRvbmUgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5saWJjbWQKKysJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUubGliY21kIgorKwkgIG9sZG9ianM9IiAkYXJjaGl2ZXJfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKKysJICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCisgCWVsc2UKKyAJICAjIHRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBpbiBwYXJ0cworIAkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgcGllY2V3aXNlIGFyY2hpdmUgbGlua2luZy4uLiIKK0BAIC04MTg5LDcgKzkxODksNyBAQCBFT0YKKyAJICBkbworIAkgICAgbGFzdF9vbGRvYmo9JG9iagorIAkgIGRvbmUKKy0JICBldmFsICJ0ZXN0X2NtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiIgorKwkgIGV2YWwgdGVzdF9jbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorIAkgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKKyAJICBsZW4wPSRmdW5jX2xlbl9yZXN1bHQKKyAJICBsZW49JGxlbjAKK0BAIC04MjA4LDcgKzkyMDgsNyBAQCBFT0YKKyAJCVJBTkxJQj0kc2F2ZV9SQU5MSUIKKyAJICAgICAgZmkKKyAJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CistCSAgICAgIGV2YWwgImNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JG9sZF9hcmNoaXZlX2NtZHNcIiIKKysJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRvbGRfYXJjaGl2ZV9jbWRzXCIKKyAJICAgICAgb2JqbGlzdD0KKyAJICAgICAgbGVuPSRsZW4wCisgCSAgICBmaQorQEAgLTgyMTYsOSArOTIxNiw5IEBAIEVPRgorIAkgIFJBTkxJQj0kc2F2ZV9SQU5MSUIKKyAJICBvbGRvYmpzPSRvYmpsaXN0CisgCSAgaWYgdGVzdCAiWCRvbGRvYmpzIiA9ICJYIiA7IHRoZW4KKy0JICAgIGV2YWwgImNtZHM9XCJcJGNvbmNhdF9jbWRzXCIiCisrCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzXCIKKyAJICBlbHNlCistCSAgICBldmFsICJjbWRzPVwiXCRjb25jYXRfY21kc35cJG9sZF9hcmNoaXZlX2NtZHNcIiIKKysJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHN+XCRvbGRfYXJjaGl2ZV9jbWRzXCIKKyAJICBmaQorIAlmaQorICAgICAgIGZpCitAQCAtODI2OCwxMiArOTI2OCwyMyBAQCBFT0YKKyAJICAgICAgKi5sYSkKKyAJCWZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCisgCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistCQlsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKysJCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgorKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdGAKKyAJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKyAJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCistCQluZXdkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMgJGxpYmRpci8kbmFtZSIKKysJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgorKwkJOzsKKysJICAgICAgLUwqKQorKwkJZnVuY19zdHJpcG5hbWUgLUwgJycgIiRkZXBsaWIiCisrCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiIC1MJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKyAJCTs7CistCSAgICAgICopIG5ld2RlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyAkZGVwbGliIiA7OworKwkgICAgICAtUiopCisrCQlmdW5jX3N0cmlwbmFtZSAtUiAnJyAiJGRlcGxpYiIKKysJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgLVIkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgorKwkJOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgJGRlcGxpYiIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZG9uZQorIAkgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorQEAgLTgyODQsMTIgKzkyOTUsMTQgQEAgRU9GCisgCSAgICAgICoubGEpCisgCSAgICAgICAgZnVuY19iYXNlbmFtZSAiJGxpYiIKKyAJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0JCWxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorKwkJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRsaWIiCisrCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0YAorKworIAkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorIAkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKy0JCW5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWJkaXIvJG5hbWUiCisrCQlmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisgCQk7OworLQkgICAgICAqKSBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliIiA7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGxpYiIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZG9uZQorIAkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCitAQCAtODMwMywxMCArOTMxNiwxMSBAQCBFT0YKKyAJCSMgdGhlIGxpYnJhcnk6CisgCQlmdW5jX2Jhc2VuYW1lICIkbGliIgorIAkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLQkJbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisrCQlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGxpYiIKKysJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHRgCisgCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisgCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorLQkJbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGxpYmRpci8kbmFtZSIKKysJCWZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKKyAJCTs7CisgCSAgICAgIGVzYWMKKyAJICAgIGRvbmUKK0BAIC04MzE4LDcgKzkzMzIsNyBAQCBFT0YKKyAJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworIAkJKikgYWJzPWBwd2RgIi8kbGliIiA7OworIAkgICAgICBlc2FjCistCSAgICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRhYnMiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkYWJzIgorIAkgICAgZG9uZQorIAkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisgCSAgICBuZXdkbHByZWZpbGVzPQorQEAgLTgzMjcsNyArOTM0MSw3IEBAIEVPRgorIAkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CisgCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisgCSAgICAgIGVzYWMKKy0JICAgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGFicyIKKysJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRhYnMiCisgCSAgICBkb25lCisgCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKyAJICBmaQorQEAgLTg0MTIsNyArOTQyNiw3IEBAIHJlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIiCisgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworIH0KKyAKKy17IHRlc3QgIiRtb2RlIiA9IGxpbmsgfHwgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB9ICYmCisreyB0ZXN0ICIkb3B0X21vZGUiID0gbGluayB8fCB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB9ICYmCisgICAgIGZ1bmNfbW9kZV9saW5rICR7MSsiJEAifQorIAorIAorQEAgLTg0MzIsOSArOTQ0Niw5IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAgICAgZm9yIGFyZworICAgICBkbworICAgICAgIGNhc2UgJGFyZyBpbgorLSAgICAgIC1mKSBSTT0iJFJNICRhcmciOyBybWZvcmNlPXllcyA7OworLSAgICAgIC0qKSBSTT0iJFJNICRhcmciIDs7CistICAgICAgKikgZmlsZXM9IiRmaWxlcyAkYXJnIiA7OworKyAgICAgIC1mKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciOyBybWZvcmNlPXllcyA7OworKyAgICAgIC0qKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciIDs7CisrICAgICAgKikgZnVuY19hcHBlbmQgZmlsZXMgIiAkYXJnIiA7OworICAgICAgIGVzYWMKKyAgICAgZG9uZQorIAorQEAgLTg0NDMsMjQgKzk0NTcsMjMgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAorICAgICBybWRpcnM9CisgCistICAgIG9yaWdvYmpkaXI9IiRvYmpkaXIiCisgICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKyAgICAgICBmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKyAgICAgICBkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgICAgIGlmIHRlc3QgIlgkZGlyIiA9IFguOyB0aGVuCistCW9iamRpcj0iJG9yaWdvYmpkaXIiCisrCW9kaXI9IiRvYmpkaXIiCisgICAgICAgZWxzZQorLQlvYmpkaXI9IiRkaXIvJG9yaWdvYmpkaXIiCisrCW9kaXI9IiRkaXIvJG9iamRpciIKKyAgICAgICBmaQorICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0gICAgICB0ZXN0ICIkbW9kZSIgPSB1bmluc3RhbGwgJiYgb2JqZGlyPSIkZGlyIgorKyAgICAgIHRlc3QgIiRvcHRfbW9kZSIgPSB1bmluc3RhbGwgJiYgb2Rpcj0iJGRpciIKKyAKKy0gICAgICAjIFJlbWVtYmVyIG9iamRpciBmb3IgcmVtb3ZhbCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9pZCBkdXBsaWNhdGVzCistICAgICAgaWYgdGVzdCAiJG1vZGUiID0gY2xlYW47IHRoZW4KKysgICAgICAjIFJlbWVtYmVyIG9kaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcworKyAgICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbjsgdGhlbgorIAljYXNlICIgJHJtZGlycyAiIGluCistCSAgKiIgJG9iamRpciAiKikgOzsKKy0JICAqKSBybWRpcnM9IiRybWRpcnMgJG9iamRpciIgOzsKKysJICAqIiAkb2RpciAiKikgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBybWRpcnMgIiAkb2RpciIgOzsKKyAJZXNhYworICAgICAgIGZpCisgCitAQCAtODQ4NiwxOCArOTQ5OSwxNyBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgCisgCSAgIyBEZWxldGUgdGhlIGxpYnRvb2wgbGlicmFyaWVzIGFuZCBzeW1saW5rcy4KKyAJICBmb3IgbiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKy0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG4iCisrCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG4iCisgCSAgZG9uZQorLQkgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kb2xkX2xpYnJhcnkiCisrCSAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG9sZF9saWJyYXJ5IgorIAorLQkgIGNhc2UgIiRtb2RlIiBpbgorKwkgIGNhc2UgIiRvcHRfbW9kZSIgaW4KKyAJICBjbGVhbikKKy0JICAgIGNhc2UgIiAgJGxpYnJhcnlfbmFtZXMgIiBpbgorLQkgICAgIyAiICAiIGluIHRoZSBiZWdpbm5pbmcgY2F0Y2hlcyBlbXB0eSAkZGxuYW1lCisrCSAgICBjYXNlICIgJGxpYnJhcnlfbmFtZXMgIiBpbgorIAkgICAgKiIgJGRsbmFtZSAiKikgOzsKKy0JICAgICopIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJGRsbmFtZSIgOzsKKysJICAgICopIHRlc3QgLW4gIiRkbG5hbWUiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZGxuYW1lIiA7OworIAkgICAgZXNhYworLQkgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1pIgorKwkgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1pIgorIAkgICAgOzsKKyAJICB1bmluc3RhbGwpCisgCSAgICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IHRoZW4KK0BAIC04NTI1LDE5ICs5NTM3LDE5IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAJICAjIEFkZCBQSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKyAJICBpZiB0ZXN0IC1uICIkcGljX29iamVjdCIgJiYKKyAJICAgICB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGRpci8kcGljX29iamVjdCIKKysJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRwaWNfb2JqZWN0IgorIAkgIGZpCisgCisgCSAgIyBBZGQgbm9uLVBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgorIAkgIGlmIHRlc3QgLW4gIiRub25fcGljX29iamVjdCIgJiYKKyAJICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKy0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJG5vbl9waWNfb2JqZWN0IgorKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRkaXIvJG5vbl9waWNfb2JqZWN0IgorIAkgIGZpCisgCWZpCisgCTs7CisgCisgICAgICAgKikKKy0JaWYgdGVzdCAiJG1vZGUiID0gY2xlYW4gOyB0aGVuCisrCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbiA7IHRoZW4KKyAJICBub2V4ZW5hbWU9JG5hbWUKKyAJICBjYXNlICRmaWxlIGluCisgCSAgKi5leGUpCitAQCAtODU0Nyw3ICs5NTU5LDcgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAkgICAgbm9leGVuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAJICAgICMgJGZpbGUgd2l0aCAuZXhlIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gcm1maWxlcywKKyAJICAgICMgYWRkICRmaWxlIHdpdGhvdXQgLmV4ZQorLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGZpbGUiCisrCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGZpbGUiCisgCSAgICA7OworIAkgIGVzYWMKKyAJICAjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyBhIGxpYnRvb2wgcHJvZ3JhbS4KK0BAIC04NTU2LDcgKzk1NjgsNyBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorIAkgICAgICByZWxpbmtfY29tbWFuZD0KKyAJICAgICAgZnVuY19zb3VyY2UgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CistCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKysJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKyAJICAgIGVsc2UKKyAJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisgCSAgICAgIGZ1bmNfc291cmNlICRkaXIvJG5vZXhlbmFtZQorQEAgLTg1NjQsMTIgKzk1NzYsMTIgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAorIAkgICAgIyBub3RlICRuYW1lIHN0aWxsIGNvbnRhaW5zIC5leGUgaWYgaXQgd2FzIGluICRmaWxlIG9yaWdpbmFsbHkKKyAJICAgICMgYXMgZG9lcyB0aGUgdmVyc2lvbiBvZiAkZmlsZSB0aGF0IHdhcyBhZGRlZCBpbnRvICRybWZpbGVzCistCSAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuYW1lICRvYmpkaXIvJHtuYW1lfVMuJHtvYmpleHR9IgorKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKKyAJICAgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKy0JICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci9sdC0kbmFtZSIKKysJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSRuYW1lIgorIAkgICAgZmkKKyAJICAgIGlmIHRlc3QgIlgkbm9leGVuYW1lIiAhPSAiWCRuYW1lIiA7IHRoZW4KKy0JICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci9sdC0ke25vZXhlbmFtZX0uYyIKKysJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSR7bm9leGVuYW1lfS5jIgorIAkgICAgZmkKKyAJICBmaQorIAlmaQorQEAgLTg1NzcsNyArOTU4OSw2IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAgICAgICBlc2FjCisgICAgICAgZnVuY19zaG93X2V2YWwgIiRSTSAkcm1maWxlcyIgJ2V4aXRfc3RhdHVzPTEnCisgICAgIGRvbmUKKy0gICAgb2JqZGlyPSIkb3JpZ29iamRpciIKKyAKKyAgICAgIyBUcnkgdG8gcmVtb3ZlIHRoZSAke29iamRpcn1zIGluIHRoZSBkaXJlY3RvcmllcyB3aGVyZSB3ZSBkZWxldGVkIGZpbGVzCisgICAgIGZvciBkaXIgaW4gJHJtZGlyczsgZG8KK0BAIC04NTg5LDE2ICs5NjAwLDE2IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAgICAgZXhpdCAkZXhpdF9zdGF0dXMKKyB9CisgCisteyB0ZXN0ICIkbW9kZSIgPSB1bmluc3RhbGwgfHwgdGVzdCAiJG1vZGUiID0gY2xlYW47IH0gJiYKKyt7IHRlc3QgIiRvcHRfbW9kZSIgPSB1bmluc3RhbGwgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IGNsZWFuOyB9ICYmCisgICAgIGZ1bmNfbW9kZV91bmluc3RhbGwgJHsxKyIkQCJ9CisgCistdGVzdCAteiAiJG1vZGUiICYmIHsKKyt0ZXN0IC16ICIkb3B0X21vZGUiICYmIHsKKyAgIGhlbHA9IiRnZW5lcmljX2hlbHAiCisgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFIgorIH0KKyAKKyB0ZXN0IC16ICIkZXhlY19jbWQiICYmIFwKKy0gIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRtb2RlJyIKKysgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRvcHRfbW9kZSciCisgCisgaWYgdGVzdCAtbiAiJGV4ZWNfY21kIjsgdGhlbgorICAgZXZhbCBleGVjICIkZXhlY19jbWQiCitkaWZmIC0tZ2l0IGEvbHRvcHRpb25zLm00IGIvbHRvcHRpb25zLm00CitpbmRleCA1ZWYxMmNlLi4xN2NmZDUxIDEwMDY0NAorLS0tIGEvbHRvcHRpb25zLm00CisrKysgYi9sdG9wdGlvbnMubTQKK0BAIC04LDcgKzgsNyBAQAorICMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisgIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKy0jIHNlcmlhbCA2IGx0b3B0aW9ucy5tNAorKyMgc2VyaWFsIDcgbHRvcHRpb25zLm00CisgCisgIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KKyBBQ19ERUZVTihbTFRPUFRJT05TX1ZFUlNJT05dLCBbbTRfaWYoWzFdKV0pCitkaWZmIC0tZ2l0IGEvbHR2ZXJzaW9uLm00IGIvbHR2ZXJzaW9uLm00CitpbmRleCBiZjg3Zjc3Li45YzdiNWQ0IDEwMDY0NAorLS0tIGEvbHR2ZXJzaW9uLm00CisrKysgYi9sdHZlcnNpb24ubTQKK0BAIC03LDE3ICs3LDE3IEBACisgIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyAjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorIAorLSMgR2VuZXJhdGVkIGZyb20gbHR2ZXJzaW9uLmluLgorKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKyAKKy0jIHNlcmlhbCAzMTM0IGx0dmVyc2lvbi5tNAorKyMgc2VyaWFsIDMyOTMgbHR2ZXJzaW9uLm00CisgIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbAorIAorLW00X2RlZmluZShbTFRfUEFDS0FHRV9WRVJTSU9OXSwgWzIuMi43YV0pCistbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1JFVklTSU9OXSwgWzEuMzEzNF0pCisrbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi40XSkKKyttNF9kZWZpbmUoW0xUX1BBQ0tBR0VfUkVWSVNJT05dLCBbMS4zMjkzXSkKKyAKKyBBQ19ERUZVTihbTFRWRVJTSU9OX1ZFUlNJT05dLAorLVttYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKytbbWFjcm9fdmVyc2lvbj0nMi40JworK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCisgX0xUX0RFQ0woLCBtYWNyb192ZXJzaW9uLCAwLCBbV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkP10pCisgX0xUX0RFQ0woLCBtYWNyb19yZXZpc2lvbiwgMCkKKyBdKQorZGlmZiAtLWdpdCBhL2x0fm9ic29sZXRlLm00IGIvbHR+b2Jzb2xldGUubTQKK2luZGV4IGJmOTJiNWUuLmM1NzNkYTkgMTAwNjQ0CistLS0gYS9sdH5vYnNvbGV0ZS5tNAorKysrIGIvbHR+b2Jzb2xldGUubTQKK0BAIC03LDcgKzcsNyBAQAorICMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisgIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKy0jIHNlcmlhbCA0IGx0fm9ic29sZXRlLm00CisrIyBzZXJpYWwgNSBsdH5vYnNvbGV0ZS5tNAorIAorICMgVGhlc2UgZXhpc3QgZW50aXJlbHkgdG8gZm9vbCBhY2xvY2FsIHdoZW4gYm9vdHN0cmFwcGluZyBsaWJ0b29sLgorICMKK2RpZmYgLS1naXQgYS9vcGNvZGVzL2NvbmZpZ3VyZSBiL29wY29kZXMvY29uZmlndXJlCitpbmRleCBjOWMwNGNlLi4zMTE0MWQ5IDEwMDc1NQorLS0tIGEvb3Bjb2Rlcy9jb25maWd1cmUKKysrKyBiL29wY29kZXMvY29uZmlndXJlCitAQCAtNjQ4LDYgKzY0OCw5IEBAIE9UT09MCisgTElQTworIE5NRURJVAorIERTWU1VVElMCisrTUFOSUZFU1RfVE9PTAorK2FjX2N0X0FSCisrRExMVE9PTAorIE9CSkRVTVAKKyBMTl9TCisgTk0KK0BAIC03NjAsNiArNzYzLDcgQEAgZW5hYmxlX3N0YXRpYworIHdpdGhfcGljCisgZW5hYmxlX2Zhc3RfaW5zdGFsbAorIHdpdGhfZ251X2xkCisrd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBlbmFibGVfbGlidG9vbF9sb2NrCisgZW5hYmxlX3RhcmdldHMKKyBlbmFibGVfd2Vycm9yCitAQCAtMTQyMCw2ICsxNDI0LDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CisgICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCisgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCisrICAtLXdpdGgtbGlidG9vbC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgorIAorIFNvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorICAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCitAQCAtNTExMCw4ICs1MTE2LDggQEAgZXNhYworIAorIAorIAorLW1hY3JvX3ZlcnNpb249JzIuMi43YScKKy1tYWNyb19yZXZpc2lvbj0nMS4zMTM0JworK21hY3JvX3ZlcnNpb249JzIuNCcKKyttYWNyb19yZXZpc2lvbj0nMS4zMjkzJworIAorIAorIAorQEAgLTUxNTEsNyArNTE1Nyw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KKyAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KKy1pZiB0ZXN0ICJYYHByaW50IC1yIC0tIC1uIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgICBFQ0hPPSdwcmludCAtciAtLScKKyBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorQEAgLTU4MzcsOCArNTg0Myw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7CisgIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKKyB4c2lfc2hlbGw9bm8KKyAoIF9sdF9kdW1teT0iYS9iL2MiCistICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorLSAgICAgID0gYyxhL2IsLCBcCisrICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICYmIHhzaV9zaGVsbD15ZXMKK0BAIC01ODg3LDYgKzU4OTMsODAgQEAgZXNhYworIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICotKi1jeWd3aW4qICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisrICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b190b29sX2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorK2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTU5MDMsNiArNTk4MywxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgorIGVzYWMKKyByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgY2FzZSAkaG9zdF9vcyBpbgorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKysgICAgICByZWxvYWRfY21kcz1mYWxzZQorKyAgICBmaQorKyAgICA7OworICAgZGFyd2luKikKKyAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitAQCAtNjA3MSw3ICs2MTU2LDggQEAgbWluZ3cqIHwgcHczMiopCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKysgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgIGZpCisgICA7OworQEAgLTYyMjUsNiArNjMxMSwyMSBAQCBlc2FjCisgZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyAkYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KKysKKytmaWxlX21hZ2ljX2dsb2I9Cisrd2FudF9ub2Nhc2VnbG9iPW5vCisraWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIG1pbmd3KiB8IHB3MzIqKQorKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworKyAgICBlbHNlCisrICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKytmaQorKworIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTYyNDAsOSArNjM0MSwxNjIgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisgCisgCisgCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisrICAgIERMTFRPT0w9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorKyAgZmkKKytlbHNlCisrICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorK2ZpCisrCisrdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKysKKytjYXNlICRob3N0X29zIGluCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisrICAqLS1pZGVudGlmeS1zdHJpY3QqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworKyAgICA7OworKyAgZXNhYworKyAgOzsKKysqKQorKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisrICA7OworK2VzYWMKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKysKKysKKysKKysKKysKKysKKysKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICBmb3IgYWNfcHJvZyBpbiBhcgorKyAgZG8KKysgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjI1OCw3ICs2NTEyLDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorKyAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjI3OCwxMSArNjUzMiwxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCisrICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKKysgIGRvbmUKKyBmaQorLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgorK2lmIHRlc3QgLXogIiRBUiI7IHRoZW4KKyAgIGFjX2N0X0FSPSRBUgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorK2RvCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02Mjk4LDcgKzY1NTYsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjMxNyw2ICs2NTc1LDEwIEBAIGVsc2UKKyAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisrCisrICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCisrZG9uZQorKworICAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgIEFSPSJmYWxzZSIKKyAgIGVsc2UKK0BAIC02MzI4LDE2ICs2NTkwLDcyIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OworIGVzYWMKKyAgICAgQVI9JGFjX2N0X0FSCisgICBmaQorLWVsc2UKKy0gIEFSPSIkYWNfY3ZfcHJvZ19BUiIKKyBmaQorIAorLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKKy10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorKzogJHtBUj1hcn0KKys6ICR7QVJfRkxBR1M9Y3J1fQorKworKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9hcl9hdF9maWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKyAKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKysgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKKysgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKysJeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisrICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorIAorK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9CisgCisraWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorK2Vsc2UKKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorK2ZpCisgCisgCisgCitAQCAtNjY3OSw4ICs2OTk3LDggQEAgZXNhYworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgCisgIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorIAorICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorIG9wdF9jcj0KK0BAIC02NzE2LDYgKzcwMzQsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisgICBlbHNlCisgICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgICBmaQorKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorIAorICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgICBwaXBlX3dvcmtzPW5vCitAQCAtNjc1Nyw2ICs3MDc2LDE4IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2Vsc2UKKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorKworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworICNlbmRpZgorQEAgLTY3NjgsNyArNzA5OSw3IEBAIF9MVF9FT0YKKyAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCistY29uc3Qgc3RydWN0IHsKKytMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHZvaWQgICAgICAgKmFkZHJlc3M7CisgfQorQEAgLTY3OTQsOCArNzEyNSw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgX0xUX0VPRgorIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisgCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CistCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKy0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisgCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorQEAgLTY4MDUsOCArNzEzNiw4IEBAIF9MVF9FT0YKKyAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorIAkgICAgcGlwZV93b3Jrcz15ZXMKKyAJICBmaQorLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCistCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisrCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKysJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKyAJZWxzZQorIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQorIAlmaQorQEAgLTY4NDMsNiArNzE3NCwxNiBAQCBlbHNlCisgJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyBmaQorIAorKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgorK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytmaQorKworKworKworKworIAorIAorIAorQEAgLTY4NjQsNiArNzIwNSw0NSBAQCBmaQorIAorIAorIAorKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Qgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF9saWJ0b29sX3N5c3Jvb3Q7CisrZWxzZQorKyAgd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm8KKytmaQorKworKworK2x0X3N5c3Jvb3Q9CisrY2FzZSAke3dpdGhfbGlidG9vbF9zeXNyb290fSBpbiAjKAorKyB5ZXMpCisrICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisrICAgZmkKKysgICA7OyAjKAorKyAvKikKKysgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICA7OyAjKAorKyBub3wnJykKKysgICA7OyAjKAorKyAqKQorKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY1CisrJGFzX2VjaG8gIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjY7IH0KKysgICBhc19mbl9lcnJvciAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKKysgICA7OworK2VzYWMKKysKKysgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKKyskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQorKworKworKworKworKworICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6CisgICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7CitAQCAtNzA3MCw2ICs3NDUwLDEyMyBAQCBlc2FjCisgCisgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisgCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCisrICAgIE1BTklGRVNUX1RPT0w9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCisrICBmaQorK2Vsc2UKKysgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0KgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorKyAgTUFOSUZFU1RfVE9PTD06CisrZmkKKysKKysKKysKKysKKysKKyAKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKK0BAIC03NjMzLDYgKzgxMzAsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisgaW50IG1haW4oKSB7IHJldHVybiAwO30KKyBfTFRfRU9GCitAQCAtNzc5OCw3ICs4Mjk3LDggQEAgZmkKKyBMSUJUT09MX0RFUFM9IiRsdG1haW4iCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIAorIAorIAorQEAgLTc4ODcsNyArODM4Nyw3IEBAIGFpeDMqKQorIGVzYWMKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAorIGNhbl9idWlsZF9zaGFyZWQ9eWVzCisgCisgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCitAQCAtODE4NSw4ICs4Njg1LDYgQEAgZmkKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKyAKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKy0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAorICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKK0BAIC04MzUyLDYgKzg4NTAsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisgCTs7CisrICAgICAgbmFnZm9yKikKKysJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisrCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisrCTs7CisgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKyAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKK0BAIC04NDE0LDcgKzg5MTgsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCisrICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICAqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CitAQCAtODQ3MSwxMyArODk3NSwxNyBAQCBjYXNlICRob3N0X29zIGluCisgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorLSRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorLQorLQorLQorLQorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CisrbHRfcHJvZ19jb21waWxlcl9waWM9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC04NTM4LDYgKzkwNDYsMTEgQEAgZmkKKyAKKyAKKyAKKysKKysKKysKKysKKysKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKK0BAIC04ODg4LDcgKzk0MDEsOCBAQCBfTFRfRU9GCisgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisgCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC04OTM2LDcgKzk0NTAsNyBAQCBfTFRfRU9GCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorIAkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICAgdGhlbgorLQl0bXBfYWRkZmxhZz0KKysJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisgCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKK0BAIC04OTg3LDEyICs5NTAxLDEyIEBAIF9MVF9FT0YKKyAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworLQkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKyAJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworIAkgIGZpCisgCSAgOzsKKyAJZXNhYworQEAgLTkwMDYsOCArOTUyMCw4IEBAIF9MVF9FT0YKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworIAl3bGFyYz0KKyAgICAgICBlbHNlCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGZpCisgICAgICAgOzsKKyAKK0BAIC05MDI1LDggKzk1MzksOCBAQCBfTFRfRU9GCisgCisgX0xUX0VPRgorICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTA3Miw4ICs5NTg2LDggQEAgX0xUX0VPRgorIAorICAgICAqKQorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTkyMDMsNyArOTcxNywxMyBAQCBfTFRfRU9GCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05MjE2LDIyICs5NzM2LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC05MjQzLDcgKzk3NzAsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCWVsc2UKKyAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTkyNTYsMjIgKzk3ODksMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKK0BAIC05MzE2LDIwICs5ODU2LDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKy0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJZmlsZV9saXN0X3NwZWM9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtOTM5MCw3ICs5OTczLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtOTM5OCw3ICs5OTgxLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtOTQxNCw3ICs5OTk3LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXgxMCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgICBmaQorQEAgLTk0MzgsMTAgKzEwMDIxLDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJaWE2NCopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAkqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWVzYWMKKyAgICAgICBlbHNlCitAQCAtOTUyMCwyMyArMTAxMDMsMzYgQEAgZmkKKyAKKyAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy1pbnQgZm9vKHZvaWQpIHt9CisraW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0KKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworK2Vsc2UKKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTk2MjEsNyArMTAyMTcsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgZWxzZQorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKK0BAIC05NjQwLDkgKzEwMjM2LDkgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCXdsYXJjPScke3dsfScKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgIGVsc2UKKyAJY2FzZSBgJENDIC1WIDI+JjFgIGluCisgCSoiQ29tcGlsZXJzIDUuMCIqKQorQEAgLTEwMjE4LDggKzEwODE0LDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTEwMjUyLDEzICsxMDg0OSw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMTAzNTAsNyArMTEwMDUsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMTExOTAsMTAgKzExODQ1LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTEyOTYsMTAgKzExOTUxLDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTI0NTAsNyArMTMxMDUsNyBAQCBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSAieWVzIjsgdGhlbgorICMgc2luY2UgbGliYmZkIG1heSBub3QgcHVsbCBpbiB0aGUgZW50aXJldHkgb2YgbGliaWJlcnR5LgorICAgeD1gc2VkIC1uIC1lICdzL15bIAldKlBJQ0ZMQUdbIAldKj1bIAldKi8vcCcgPCAuLi9saWJpYmVydHkvTWFrZWZpbGUgfCBzZWQgLW4gJyRwJ2AKKyAgIGlmIHRlc3QgLW4gIiR4IjsgdGhlbgorLSAgICBTSEFSRURfTElCQUREPSItTGBwd2RgLy4uL2xpYmliZXJ0eS9waWMgLWxpYmVydHkiCisrICAgIFNIQVJFRF9MSUJBREQ9ImBwd2RgLy4uL2xpYmliZXJ0eS9waWMvbGliaWJlcnR5LmEiCisgICBmaQorIAorICAgY2FzZSAiJHtob3N0fSIgaW4KK0BAIC0xMzQyMiwxMyArMTQwNzcsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKythcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xMzQ0MywxNCArMTQxMDUsMTcgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGUKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTM0ODMsMTIgKzE0MTQ4LDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCisgaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiJGZpeF9zcmNmaWxlX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTEzNTQzLDggKzE0MjA4LDEzIEBAIHJlbG9hZF9mbGFnIFwKKyBPQkpEVU1QIFwKKyBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCisgZmlsZV9tYWdpY19jbWQgXAorK2ZpbGVfbWFnaWNfZ2xvYiBcCisrd2FudF9ub2Nhc2VnbG9iIFwKKytETExUT09MIFwKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCisgQVIgXAorIEFSX0ZMQUdTIFwKKythcmNoaXZlcl9saXN0X3NwZWMgXAorIFNUUklQIFwKKyBSQU5MSUIgXAorIENDIFwKK0BAIC0xMzU1NCwxMiArMTQyMjQsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKKytubV9maWxlX2xpc3Rfc3BlYyBcCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorLWx0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKKytsdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorIG5lZWRfbG9ja3MgXAorK01BTklGRVNUX1RPT0wgXAorIERTWU1VVElMIFwKKyBOTUVESVQgXAorIExJUE8gXAorQEAgLTEzNTc1LDcgKzE0MjQ3LDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAorIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorLWZpeF9zcmNmaWxlX3BhdGggXAorIGV4Y2x1ZGVfZXhwc3ltcyBcCisgaW5jbHVkZV9leHBzeW1zIFwKKyBmaWxlX2xpc3Rfc3BlYyBcCitAQCAtMTM2MTEsNiArMTQyODIsNyBAQCBtb2R1bGVfY21kcyBcCisgbW9kdWxlX2V4cHN5bV9jbWRzIFwKKyBleHBvcnRfc3ltYm9sc19jbWRzIFwKKyBwcmVsaW5rX2NtZHMgXAorK3Bvc3RsaW5rX2NtZHMgXAorIHBvc3RpbnN0YWxsX2NtZHMgXAorIHBvc3R1bmluc3RhbGxfY21kcyBcCisgZmluaXNoX2NtZHMgXAorQEAgLTE0MzY3LDcgKzE1MDM5LDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAorICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorICMKKyAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrIyAgICAgICAgICAgICAgICAgSW5jLgorICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisgIworICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KK0BAIC0xNDQ3MCwxOSArMTUxNDMsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCisgIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorIE5MMlNQPSRsdF9sdF9OTDJTUAorIAorKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisrCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrCisgIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KKyBPQkpEVU1QPSRsdF9PQkpEVU1QCisgCisgIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKyAKKy0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgorKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyBmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKyAKKysjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCisrCisrIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKKysKKysjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorK0RMTFRPT0w9JGx0X0RMTFRPT0wKKysKKysjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrCisgIyBUaGUgYXJjaGl2ZXIuCisgQVI9JGx0X0FSCisrCisrIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KKyBBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKyAKKysjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KKythcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYworKworICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCisgU1RSSVA9JGx0X1NUUklQCisgCitAQCAtMTQ1MTIsNiArMTUyMDgsMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKyAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAorIAorKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgorK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworKworKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCisrbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAorKworICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorIG9iamRpcj0kb2JqZGlyCisgCitAQCAtMTQ1MjEsNiArMTUyMjMsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAorICMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CisgbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworIAorKyMgTWFuaWZlc3QgdG9vbC4KKytNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisrCisgIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorIERTWU1VVElMPSRsdF9EU1lNVVRJTAorIAorQEAgLTE0NjM1LDEyICsxNTM0MCwxMiBAQCB3aXRoX2djYz0kR0NDCisgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKyAKKy0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCistd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKyAKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKysKKyAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCisgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKyAKK0BAIC0xNDcyNyw5ICsxNTQzMiw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKyAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KKyBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisgCistIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworIAorQEAgLTE0NzQ1LDYgKzE1NDQ3LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKyAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKysKKyAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KKyBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKyAKK0BAIC0xNDc3NywyMTAgKzE1NDgyLDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKyAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIGNhc2UgJHhzaV9zaGVsbCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCistIyBjYWxsOgorLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCistIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CistIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCistIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCistICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CistfQorLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CistICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCistfQorLQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKy0KKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtePV0qXCk9LiovXDEvO3EnCistbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJworLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCistICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKy0KKy1fTFRfRU9GCistZXNhYworLQorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMSs9XCQyIgorLX0KKy1fTFRfRU9GCistICAgIDs7CistICAqKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMT1cJCQxXCQyIgorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICBlc2FjCistCistCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorKworKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKKytmdW5jX2Rpcm5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKKytmdW5jX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCisrZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKKytmdW5jX3N0cmlwbmFtZSAoKVwKKyt7XAorK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKKytcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCisrZnVuY19zcGxpdF9sb25nX29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCisrZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCisrZnVuY19sbzJvICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAorK1wgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKKytmdW5jX3hmb3JtICgpXAorK3tcCisrICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKKytmdW5jX2FyaXRoICgpXAorK3tcCisrICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCisrZnVuY19sZW4gKClcCisre1wKKysgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworK2ZpCisrCisraWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCisrZnVuY19hcHBlbmQgKClcCisre1wKKysgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCisrZnVuY19hcHBlbmRfcXVvdGVkICgpXAorK3tcCisrXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKKytcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytlbHNlCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZmkKKysKKytpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQorK2ZpCisrCisrCisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyAKK2RpZmYgLS1naXQgYS9vcGNvZGVzL2NvbmZpZ3VyZS5hYyBiL29wY29kZXMvY29uZmlndXJlLmFjCitpbmRleCBiOTNlODU1Li40M2JhOTc2IDEwMDY0NAorLS0tIGEvb3Bjb2Rlcy9jb25maWd1cmUuYWMKKysrKyBiL29wY29kZXMvY29uZmlndXJlLmFjCitAQCAtMTY3LDcgKzE2Nyw3IEBAIGNoYW5nZXF1b3RlKCwpZG5sCisgICB4PWBzZWQgLW4gLWUgJ3MvXlsgCV0qUElDRkxBR1sgCV0qPVsgCV0qLy9wJyA8IC4uL2xpYmliZXJ0eS9NYWtlZmlsZSB8IHNlZCAtbiAnJHAnYAorIGNoYW5nZXF1b3RlKFssXSlkbmwKKyAgIGlmIHRlc3QgLW4gIiR4IjsgdGhlbgorLSAgICBTSEFSRURfTElCQUREPSItTGBwd2RgLy4uL2xpYmliZXJ0eS9waWMgLWxpYmVydHkiCisrICAgIFNIQVJFRF9MSUJBREQ9ImBwd2RgLy4uL2xpYmliZXJ0eS9waWMvbGliaWJlcnR5LmEiCisgICBmaQorIAorICAgY2FzZSAiJHtob3N0fSIgaW4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNy1BZGQtdGhlLWFybXY1ZS1hcmNoaXRlY3R1cmUtdG8tYmludXRpbHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA3LUFkZC10aGUtYXJtdjVlLWFyY2hpdGVjdHVyZS10by1iaW51dGlscy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDM3NjM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNy1BZGQtdGhlLWFybXY1ZS1hcmNoaXRlY3R1cmUtdG8tYmludXRpbHMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA3NDNmNDJhYWVjYjFhYjg5ZWJhMGVhZjVlODhlZDY3YmJmM2JhMzA0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTozNzoxMCArMDAwMAorU3ViamVjdDogW1BBVENIIDA3LzEzXSBBZGQgdGhlIGFybXY1ZSBhcmNoaXRlY3R1cmUgdG8gYmludXRpbHMKKworQmludXRpbHMgaGFzIGEgY29tbWVudCB0aGF0IGluZGljYXRlcyBpdCBpcyBzdXBwb3NlZCB0byBtYXRjaCBnY2MgZm9yCithbGwgb2YgdGhlIHN1cHBvcnQgIi1tYXJjaD0iIHNldHRpbmdzLCBidXQgaXQgd2FzIGxhY2tpbmcgdGhlIGFybXY1ZSBzZXR0aW5nLgorVGhpcyB3YXMgYSBzaW1wbGUgd2F5IHRvIGFkZCBpdCwgYXMgdGh1bWIgaW5zdHJ1Y3Rpb25zIHNob3VsZG4ndCBiZSBnZW5lcmF0ZWQKK2J5IHRoZSBjb21waWxlciBhbnl3YXkuCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkCitVcHN0cmVhbSBtYWludGFpbmVyIGluZGljYXRlZCB0aGF0IHdlIHNob3VsZCBub3QgYmUgdXNpbmcgYXJtdjVlLCBldmVuCit0aG91Z2ggaXQgaXMgYSBsZWdhbCBhcmNoaWN0dXJlIGRlZmluZWQgYnkgb3VyIGdjYy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdhcy9jb25maWcvdGMtYXJtLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2dhcy9jb25maWcvdGMtYXJtLmMgYi9nYXMvY29uZmlnL3RjLWFybS5jCitpbmRleCAyZGI2YzJkLi5hYjQ4MTY4IDEwMDY0NAorLS0tIGEvZ2FzL2NvbmZpZy90Yy1hcm0uYworKysrIGIvZ2FzL2NvbmZpZy90Yy1hcm0uYworQEAgLTI0NDYzLDYgKzI0NDYzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm1fYXJjaF9vcHRpb25fdGFibGUgYXJtX2FyY2hzW10gPQorICAgQVJNX0FSQ0hfT1BUICgiYXJtdjR0IiwJQVJNX0FSQ0hfVjRULAkgRlBVX0FSQ0hfRlBBKSwKKyAgIEFSTV9BUkNIX09QVCAoImFybXY0dHhtIiwJQVJNX0FSQ0hfVjRUeE0sCSBGUFVfQVJDSF9GUEEpLAorICAgQVJNX0FSQ0hfT1BUICgiYXJtdjUiLAlBUk1fQVJDSF9WNSwJIEZQVV9BUkNIX1ZGUCksCisrICBBUk1fQVJDSF9PUFQgKCJhcm12NWUiLAlBUk1fQVJDSF9WNVRFLAkgRlBVX0FSQ0hfVkZQKSwKKyAgIEFSTV9BUkNIX09QVCAoImFybXY1dCIsCUFSTV9BUkNIX1Y1VCwJIEZQVV9BUkNIX1ZGUCksCisgICBBUk1fQVJDSF9PUFQgKCJhcm12NXR4bSIsCUFSTV9BUkNIX1Y1VHhNLAkgRlBVX0FSQ0hfVkZQKSwKKyAgIEFSTV9BUkNIX09QVCAoImFybXY1dGUiLAlBUk1fQVJDSF9WNVRFLAkgRlBVX0FSQ0hfVkZQKSwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwOC1kb24tdC1sZXQtdGhlLWRpc3Ryby1jb21waWxlci1wb2ludC10by10aGUtd3JvbmctaW5zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwOC1kb24tdC1sZXQtdGhlLWRpc3Ryby1jb21waWxlci1wb2ludC10by10aGUtd3JvbmctaW5zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZTY4ZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA4LWRvbi10LWxldC10aGUtZGlzdHJvLWNvbXBpbGVyLXBvaW50LXRvLXRoZS13cm9uZy1pbnMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA0ZDNhOWY2ZGI2MDQwNTUzNDgzMzJiNTY4ODlkNDY2YzA1OGZhNWYzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTozOTowMSArMDAwMAorU3ViamVjdDogW1BBVENIIDA4LzEzXSBkb24ndCBsZXQgdGhlIGRpc3RybyBjb21waWxlciBwb2ludCB0byB0aGUgd3JvbmcKKyBpbnN0YWxsYXRpb24gbG9jYXRpb24KKworVGhhbmtzIHRvIFJQIGZvciBoZWxwaW5nIGZpbmQgdGhlIHNvdXJjZSBjb2RlIGNhdXNpbmcgdGhlIGlzc3VlLgorCisyMDEwLzA4LzEzCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliaWJlcnR5L01ha2VmaWxlLmluIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJpYmVydHkvTWFrZWZpbGUuaW4gYi9saWJpYmVydHkvTWFrZWZpbGUuaW4KK2luZGV4IDliODc3MjAuLmZmNDNmNTMgMTAwNjQ0CistLS0gYS9saWJpYmVydHkvTWFrZWZpbGUuaW4KKysrKyBiL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgorQEAgLTM2MSw3ICszNjEsOCBAQCBpbnN0YWxsLXN0cmlwOiBpbnN0YWxsCisgIyBtdWx0aWxpYi1zcGVjaWZpYyBmbGFncywgaXQncyBvdmVycmlkZGVuIGJ5IEZMQUdTX1RPX1BBU1MgZnJvbSB0aGUKKyAjIGRlZmF1bHQgbXVsdGlsaWIsIHNvIHdlIGhhdmUgdG8gdGFrZSBDRkxBR1MgaW50byBhY2NvdW50IGFzIHdlbGwsCisgIyBzaW5jZSBpdCB3aWxsIGJlIHBhc3NlZCB0aGUgbXVsdGlsaWIgZmxhZ3MuCistTVVMVElPU0RJUiA9IGAkKENDKSAkKENGTEFHUykgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeWAKKysjTVVMVElPU0RJUiA9IGAkKENDKSAkKENGTEFHUykgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeWAKKytNVUxUSU9TRElSID0gIiIKKyBpbnN0YWxsX3RvX2xpYmRpcjogYWxsCisgCWlmIHRlc3QgLW4gIiR7dGFyZ2V0X2hlYWRlcl9kaXJ9IjsgdGhlbiBcCisgCQkke21raW5zdGFsbGRpcnN9ICQoREVTVERJUikkKGxpYmRpcikvJChNVUxUSU9TRElSKTsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA5LVVwc3RyZWFtLVN0YXR1cy1JbmFwcHJvcHJpYXRlLWRpc3RyaWJ1dGlvbi1jb2Rlc291cmMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA5LVVwc3RyZWFtLVN0YXR1cy1JbmFwcHJvcHJpYXRlLWRpc3RyaWJ1dGlvbi1jb2Rlc291cmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgwMDc5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDktVXBzdHJlYW0tU3RhdHVzLUluYXBwcm9wcmlhdGUtZGlzdHJpYnV0aW9uLWNvZGVzb3VyYy5wYXRjaApAQCAtMCwwICsxLDI3OCBAQAorRnJvbSBlMDJlMTE5YjI3OGMzZjQwNGU5NzY2OWU3MTgwY2FjOTQ0MTM0YzkxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTo0MTowNCArMDAwMAorU3ViamVjdDogW1BBVENIIDA5LzEzXSBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbjoKKyBjb2Rlc291cmNlcnldCisKK1BhdGNoIG9yaWdpbmFsbHkgY3JlYXRlZCBieSBNYXJrIEhhdGxlLCBmb3J3YXJkLXBvcnRlZCB0bworYmludXRpbHMgMi4yMSBieSBTY290dCBHYXJtYW4uCisKK3B1cnBvc2U6ICB3YXJuIGZvciB1c2VzIG9mIHN5c3RlbSBkaXJlY3RvcmllcyB3aGVuIGNyb3NzIGxpbmtpbmcKKworQ29kZSBNZXJnZWQgZnJvbSBTb3VyY2VyeSBHKysgYmludXRpbHMgMi4xOSAtIDQuNC0yNzcKKworMjAwOC0wNy0wMiAgSm9zZXBoIE15ZXJzICA8am9zZXBoQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICBsZC8KKyAgICAqIGxkLmggKGFyZ3NfdHlwZSk6IEFkZCBlcnJvcl9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLgorICAgICogbGQudGV4aW5mbyAoLS1lcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzKTogRG9jdW1lbnQuCisgICAgKiBsZGZpbGUuYyAobGRmaWxlX2FkZF9saWJyYXJ5X3BhdGgpOiBDaGVjaworICAgIGNvbW1hbmRfbGluZS5lcnJvcl9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLgorICAgICogbGRtYWluLmMgKG1haW4pOiBJbml0aWFsaXplCisgICAgY29tbWFuZF9saW5lLmVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMuCisgICAgKiBsZXhzdXAuYyAoZW51bSBvcHRpb25fdmFsdWVzKTogQWRkCisgICAgT1BUSU9OX0VSUk9SX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMuCisgICAgKGxkX29wdGlvbnMpOiBBZGQgLS1lcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLgorICAgIChwYXJzZV9hcmdzKTogSGFuZGxlIG5ldyBvcHRpb24uCisKKzIwMDctMDYtMTMgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPgorCisgICAgbGQvCisgICAgKiBjb25maWcuaW46IFJlZ2VuZXJhdGUuCisgICAgKiBsZC5oIChhcmdzX3R5cGUpOiBBZGQgcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcy4KKyAgICAqIGxkLnRleGluZm8gKC0tbm8tcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcyk6IERvY3VtZW50LgorICAgICogbGRmaWxlLmMgKGxkZmlsZV9hZGRfbGlicmFyeV9wYXRoKTogQ2hlY2sKKyAgICBjb21tYW5kX2xpbmUucG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcy4KKyAgICAqIGxkbWFpbi5jIChtYWluKTogSW5pdGlhbGl6ZQorICAgIGNvbW1hbmRfbGluZS5wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLgorICAgICogbGV4c3VwLmMgKGVudW0gb3B0aW9uX3ZhbHVlcyk6IEFkZAorICAgIE9QVElPTl9OT19QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTLgorICAgIChsZF9vcHRpb25zKTogQWRkIC0tbm8tcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy4KKyAgICAocGFyc2VfYXJncyk6IEhhbmRsZSBuZXcgb3B0aW9uLgorCisyMDA3LTA0LTIwICBKb3NlcGggTXllcnMgIDxqb3NlcGhAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgIE1lcmdlIGZyb20gU291cmNlcnkgRysrIGJpbnV0aWxzIDIuMTc6CisKKyAgICAyMDA3LTAzLTIwICBKb3NlcGggTXllcnMgIDxqb3NlcGhAY29kZXNvdXJjZXJ5LmNvbT4KKyAgICBCYXNlZCBvbiBwYXRjaCBieSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+LgorICAgIGxkLworICAgICogY29uZmlndXJlLmluICgtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzKTogTmV3IG9wdGlvbi4KKyAgICAqIGNvbmZpZ3VyZSwgY29uZmlnLmluOiBSZWdlbmVyYXRlLgorICAgICogbGRmaWxlLmMgKGxkZmlsZV9hZGRfbGlicmFyeV9wYXRoKTogSWYKKyAgICBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUyBkZWZpbmVkLCB3YXJuIGZvciB1c2Ugb2YgL2xpYiwKKyAgICAvdXNyL2xpYiwgL3Vzci9sb2NhbC9saWIgb3IgL3Vzci9YMTFSNi9saWIuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxkL2NvbmZpZy5pbiAgICB8ICAzICsrKworIGxkL2NvbmZpZ3VyZSAgICB8IDE0ICsrKysrKysrKysrKysrCisgbGQvY29uZmlndXJlLmFjIHwgMTAgKysrKysrKysrKworIGxkL2xkLmggICAgICAgICB8ICA4ICsrKysrKysrCisgbGQvbGQudGV4aW5mbyAgIHwgMTIgKysrKysrKysrKysrCisgbGQvbGRmaWxlLmMgICAgIHwgMTcgKysrKysrKysrKysrKysrKysKKyBsZC9sZGxleC5oICAgICAgfCAgMiArKworIGxkL2xkbWFpbi5jICAgICB8ICAyICsrCisgbGQvbGV4c3VwLmMgICAgIHwgMTYgKysrKysrKysrKysrKysrKworIDkgZmlsZXMgY2hhbmdlZCwgODQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGQvY29uZmlnLmluIGIvbGQvY29uZmlnLmluCitpbmRleCAyYWI0ODQ0Li43NjZkMjNjIDEwMDY0NAorLS0tIGEvbGQvY29uZmlnLmluCisrKysgYi9sZC9jb25maWcuaW4KK0BAIC0xMSw2ICsxMSw5IEBACisgICAgbGFuZ3VhZ2UgaXMgcmVxdWVzdGVkLiAqLworICN1bmRlZiBFTkFCTEVfTkxTCisgCisrLyogRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGxpYnJhcnkgZGlyZWN0b3JpZXMgKi8KKysjdW5kZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysKKyAvKiBBZGRpdGlvbmFsIGV4dGVuc2lvbiBhIHNoYXJlZCBvYmplY3QgbWlnaHQgaGF2ZS4gKi8KKyAjdW5kZWYgRVhUUkFfU0hMSUJfRVhURU5TSU9OCisgCitkaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlIGIvbGQvY29uZmlndXJlCitpbmRleCAyZmJhZWJmLi41NzI2YTA4IDEwMDc1NQorLS0tIGEvbGQvY29uZmlndXJlCisrKysgYi9sZC9jb25maWd1cmUKK0BAIC03ODcsNiArNzg3LDcgQEAgd2l0aF9saWJfcGF0aAorIGVuYWJsZV90YXJnZXRzCisgZW5hYmxlXzY0X2JpdF9iZmQKKyB3aXRoX3N5c3Jvb3QKKytlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcworIGVuYWJsZV9nb2xkCisgZW5hYmxlX2dvdAorIGVuYWJsZV93ZXJyb3IKK0BAIC0xNDQzLDYgKzE0NDQsOCBAQCBPcHRpb25hbCBGZWF0dXJlczoKKyAgIC0tZGlzYWJsZS1sYXJnZWZpbGUgICAgIG9taXQgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZXMKKyAgIC0tZW5hYmxlLXRhcmdldHMgICAgICAgIGFsdGVybmF0aXZlIHRhcmdldCBjb25maWd1cmF0aW9ucworICAgLS1lbmFibGUtNjQtYml0LWJmZCAgICAgNjQtYml0IHN1cHBvcnQgKG9uIGhvc3RzIHdpdGggbmFycm93ZXIgd29yZCBzaXplcykKKysgIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGxpYnJhcnkgZGlyZWN0b3JpZXMKKyAgIC0tZW5hYmxlLWdvbGRbPUFSR10gICAgIGJ1aWxkIGdvbGQgW0FSRz17ZGVmYXVsdCx5ZXMsbm99XQorICAgLS1lbmFibGUtZ290PTx0eXBlPiAgICAgR09UIGhhbmRsaW5nIHNjaGVtZSAodGFyZ2V0LCBzaW5nbGUsIG5lZ2F0aXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlnb3QpCitAQCAtMTYzMjMsNyArMTYzMjYsMTggQEAgZWxzZQorIGZpCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgZW5hYmxldmFsPSRlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllczsKKytlbHNlCisrICBlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ubworK2ZpCisrCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorIAorKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTIDEiID4+Y29uZmRlZnMuaAorKworK2ZpCisgCisgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWdvdCB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfZ290K3NldH0iID0gc2V0OyB0aGVuIDoKK2RpZmYgLS1naXQgYS9sZC9jb25maWd1cmUuYWMgYi9sZC9jb25maWd1cmUuYWMKK2luZGV4IDFiZGRmYzkuLmU5ZWRiN2YgMTAwNjQ0CistLS0gYS9sZC9jb25maWd1cmUuYWMKKysrKyBiL2xkL2NvbmZpZ3VyZS5hYworQEAgLTk0LDYgKzk0LDE2IEBAIEFDX1NVQlNUKHVzZV9zeXNyb290KQorIEFDX1NVQlNUKFRBUkdFVF9TWVNURU1fUk9PVCkKKyBBQ19TVUJTVChUQVJHRVRfU1lTVEVNX1JPT1RfREVGSU5FKQorIAorK0FDX0FSR19FTkFCTEUoW3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAorKyAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICAgICAgICAgW3dhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGxpYnJhcnkgZGlyZWN0b3JpZXNdKSwsCisrICAgICAgICAgW2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vXSkKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrICBBQ19ERUZJTkUoW0VOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTXSwKKysgICAgICAgWzFdLAorKyAgICAgICBbRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGxpYnJhcnkgZGlyZWN0b3JpZXNdKQorK2ZpCisrCisgZG5sIFVzZSAtLWVuYWJsZS1nb2xkIHRvIGRlY2lkZSBpZiB0aGlzIGxpbmtlciBzaG91bGQgYmUgdGhlIGRlZmF1bHQuCisgZG5sICJpbnN0YWxsX2FzX2RlZmF1bHQiIGlzIHNldCB0byBmYWxzZSBpZiBnb2xkIGlzIHRoZSBkZWZhdWx0IGxpbmtlci4KKyBkbmwgImluc3RhbGxlZF9saW5rZXIiIGlzIHRoZSBpbnN0YWxsZWQgQkZEIGxpbmtlciBuYW1lLgorZGlmZiAtLWdpdCBhL2xkL2xkLmggYi9sZC9sZC5oCitpbmRleCBmNzczY2U3Li5hZGJhMGY2IDEwMDY0NAorLS0tIGEvbGQvbGQuaAorKysrIGIvbGQvbGQuaAorQEAgLTE2MSw2ICsxNjEsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgeworICAgLyogSWYgVFJVRSB3ZSdsbCBqdXN0IHByaW50IHRoZSBkZWZhdWx0IG91dHB1dCBvbiBzdGRvdXQuICAqLworICAgYmZkX2Jvb2xlYW4gcHJpbnRfb3V0cHV0X2Zvcm1hdDsKKyAKKysgIC8qIElmIFRSVUUgKHRoZSBkZWZhdWx0KSB3YXJuIGZvciB1c2VzIG9mIHN5c3RlbSBkaXJlY3RvcmllcyB3aGVuCisrICAgICBjcm9zcyBsaW5raW5nLiAgKi8KKysgIGJmZF9ib29sZWFuIHBvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM7CisrCisrICAvKiBJZiBUUlVFIChkZWZhdWx0IEZBTFNFKSBnaXZlIGFuIGVycm9yIGZvciB1c2VzIG9mIHN5c3RlbQorKyAgICAgZGlyZWN0b3JpZXMgd2hlbiBjcm9zcyBsaW5raW5nIGluc3RlYWQgb2YgYSB3YXJuaW5nLiAgKi8KKysgIGJmZF9ib29sZWFuIGVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM7CisrCisgICAvKiBCaWcgb3IgbGl0dGxlIGVuZGlhbiBhcyBzZXQgb24gY29tbWFuZCBsaW5lLiAgKi8KKyAgIGVudW0gZW5kaWFuX2VudW0gZW5kaWFuOworIAorZGlmZiAtLWdpdCBhL2xkL2xkLnRleGluZm8gYi9sZC9sZC50ZXhpbmZvCitpbmRleCA1MDI1ODJjLi5kYWUxNjhhIDEwMDY0NAorLS0tIGEvbGQvbGQudGV4aW5mbworKysrIGIvbGQvbGQudGV4aW5mbworQEAgLTIyMTIsNiArMjIxMiwxOCBAQCBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIG9yaWdpbmFsIGxpbmtlZCBmaWxlIGRvZXMgbm90IGNoYW5nZS4KKyAKKyBQYXNzaW5nIEBjb2Rle25vbmV9IGZvciBAdmFye3N0eWxlfSBkaXNhYmxlcyB0aGUgc2V0dGluZyBmcm9tIGFueQorIEBjb2Rley0tYnVpbGQtaWR9IG9wdGlvbnMgZWFybGllciBvbiB0aGUgY29tbWFuZCBsaW5lLgorKworK0BraW5kZXggLS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQGl0ZW0gLS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrRG8gbm90IHdhcm4gZm9yIEBvcHRpb257LUx9IG9wdGlvbnMgdXNpbmcgc3lzdGVtIGRpcmVjdG9yaWVzIHN1Y2ggYXMKKytAZmlsZXsvdXNyL2xpYn0gd2hlbiBjcm9zcyBsaW5raW5nLiAgVGhpcyBvcHRpb24gaXMgaW50ZW5kZWQgZm9yIHVzZQorK2luIGNocm9vdCBlbnZpcm9ubWVudHMgd2hlbiBzdWNoIGRpcmVjdG9yaWVzIGNvbnRhaW4gdGhlIGNvcnJlY3QKKytsaWJyYXJpZXMgZm9yIHRoZSB0YXJnZXQgc3lzdGVtIHJhdGhlciB0aGFuIHRoZSBob3N0LgorKworK0BraW5kZXggLS1lcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQGl0ZW0gLS1lcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrR2l2ZSBhbiBlcnJvciBpbnN0ZWFkIG9mIGEgd2FybmluZyBmb3IgQG9wdGlvbnstTH0gb3B0aW9ucyB1c2luZworK3N5c3RlbSBkaXJlY3RvcmllcyB3aGVuIGNyb3NzIGxpbmtpbmcuCisgQGVuZCB0YWJsZQorIAorIEBjIG1hbiBlbmQKK2RpZmYgLS1naXQgYS9sZC9sZGZpbGUuYyBiL2xkL2xkZmlsZS5jCitpbmRleCA3ODJlZDdmLi4xOWE5YWI0IDEwMDY0NAorLS0tIGEvbGQvbGRmaWxlLmMKKysrKyBiL2xkL2xkZmlsZS5jCitAQCAtMTE0LDYgKzExNCwyMyBAQCBsZGZpbGVfYWRkX2xpYnJhcnlfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgYmZkX2Jvb2xlYW4gY21kbGluZSkKKyAgICAgbmV3X2RpcnMtPm5hbWUgPSBjb25jYXQgKGxkX3N5c3Jvb3QsIG5hbWUgKyAxLCAoY29uc3QgY2hhciAqKSBOVUxMKTsKKyAgIGVsc2UKKyAgICAgbmV3X2RpcnMtPm5hbWUgPSB4c3RyZHVwIChuYW1lKTsKKysKKysjaWZkZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysgIGlmIChjb21tYW5kX2xpbmUucG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcworKyAgJiYgKCghc3RybmNtcCAobmFtZSwgIi9saWIiLCA0KSkKKysgICAgICB8fCAoIXN0cm5jbXAgKG5hbWUsICIvdXNyL2xpYiIsIDgpKQorKyAgICAgIHx8ICghc3RybmNtcCAobmFtZSwgIi91c3IvbG9jYWwvbGliIiwgMTQpKQorKyAgICAgIHx8ICghc3RybmNtcCAobmFtZSwgIi91c3IvWDExUjYvbGliIiwgMTQpKSkpCisrICAgeworKyAgICAgaWYgKGNvbW1hbmRfbGluZS5lcnJvcl9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKQorKyAgICAgICBlaW5mbyAoXygiJVglUDogZXJyb3I6IGxpYnJhcnkgc2VhcmNoIHBhdGggXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorKyAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvblxuIiksIG5hbWUpOworKyAgICAgZWxzZQorKyAgICAgICBlaW5mbyAoXygiJVA6IHdhcm5pbmc6IGxpYnJhcnkgc2VhcmNoIHBhdGggXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorKyAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvblxuIiksIG5hbWUpOworKyAgIH0KKysjZW5kaWYKKysKKyB9CisgCisgLyogVHJ5IHRvIG9wZW4gYSBCRkQgZm9yIGEgbGFuZ19pbnB1dF9zdGF0ZW1lbnQuICAqLworZGlmZiAtLWdpdCBhL2xkL2xkbGV4LmggYi9sZC9sZGxleC5oCitpbmRleCBlM2U5YjI0Li4yOTQ4N2EzIDEwMDY0NAorLS0tIGEvbGQvbGRsZXguaAorKysrIGIvbGQvbGRsZXguaAorQEAgLTE0MCw2ICsxNDAsOCBAQCBlbnVtIG9wdGlvbl92YWx1ZXMKKyAgIE9QVElPTl9JR05PUkVfVU5SRVNPTFZFRF9TWU1CT0wsCisgICBPUFRJT05fUFVTSF9TVEFURSwKKyAgIE9QVElPTl9QT1BfU1RBVEUsCisrICBPUFRJT05fTk9fUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUywKKysgIE9QVElPTl9FUlJPUl9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTLAorIH07CisgCisgLyogVGhlIGluaXRpYWwgcGFyc2VyIHN0YXRlcy4gICovCitkaWZmIC0tZ2l0IGEvbGQvbGRtYWluLmMgYi9sZC9sZG1haW4uYworaW5kZXggODE4ZDEwOC4uNTRjNDlmMiAxMDA2NDQKKy0tLSBhL2xkL2xkbWFpbi5jCisrKysgYi9sZC9sZG1haW4uYworQEAgLTI2Niw2ICsyNjYsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICBjb21tYW5kX2xpbmUud2Fybl9taXNtYXRjaCA9IFRSVUU7CisgICBjb21tYW5kX2xpbmUud2Fybl9zZWFyY2hfbWlzbWF0Y2ggPSBUUlVFOworICAgY29tbWFuZF9saW5lLmNoZWNrX3NlY3Rpb25fYWRkcmVzc2VzID0gLTE7CisrICBjb21tYW5kX2xpbmUucG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcyA9IFRSVUU7CisrICBjb21tYW5kX2xpbmUuZXJyb3JfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcyA9IEZBTFNFOworIAorICAgLyogV2UgaW5pdGlhbGl6ZSBERU1BTkdMSU5HIGJhc2VkIG9uIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgICAgQ09MTEVDVF9OT19ERU1BTkdMRS4gIFRoZSBnY2MgY29sbGVjdDIgcHJvZ3JhbSB3aWxsIGRlbWFuZ2xlIHRoZQorZGlmZiAtLWdpdCBhL2xkL2xleHN1cC5jIGIvbGQvbGV4c3VwLmMKK2luZGV4IDQ4MTJjOTcuLjIxYjQ5ZGYgMTAwNjQ0CistLS0gYS9sZC9sZXhzdXAuYworKysrIGIvbGQvbGV4c3VwLmMKK0BAIC01MTMsNiArNTEzLDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbGRfb3B0aW9uIGxkX29wdGlvbnNbXSA9CisgICB7IHsicG9wLXN0YXRlIiwgbm9fYXJndW1lbnQsIE5VTEwsIE9QVElPTl9QT1BfU1RBVEV9LAorICAgICAnXDAnLCBOVUxMLCBOXygiUG9wIHN0YXRlIG9mIGZsYWdzIGdvdmVybmluZyBpbnB1dCBmaWxlIGhhbmRsaW5nIiksCisgICAgIFRXT19EQVNIRVMgfSwKKysgIHsgeyJuby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIiwgbm9fYXJndW1lbnQsIE5VTEwsCisrICAgICBPUFRJT05fTk9fUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFU30sCisrICAgICdcMCcsIE5VTEwsIE5fKCJEbyBub3Qgd2FybiBmb3IgLUwgb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMiKSwKKysgICAgVFdPX0RBU0hFUyB9LAorKyAgeyB7ImVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiLCBub19hcmd1bWVudCwgTlVMTCwKKysgICAgKyAgICAgT1BUSU9OX0VSUk9SX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVN9LAorKyAgICAnXDAnLCBOVUxMLCBOXygiR2l2ZSBhbiBlcnJvciBmb3IgLUwgb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMiKSwKKysgICAgVFdPX0RBU0hFUyB9LAorIH07CisgCisgI2RlZmluZSBPUFRJT05fQ09VTlQgQVJSQVlfU0laRSAobGRfb3B0aW9ucykKK0BAIC0xNDc0LDYgKzE0ODIsMTQgQEAgcGFyc2VfYXJncyAodW5zaWduZWQgYXJnYywgY2hhciAqKmFyZ3YpCisgCSAgICAgIGZyZWUgKG9sZHApOworIAkgICAgfQorIAkgIGJyZWFrOworKworKwljYXNlIE9QVElPTl9OT19QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTOgorKwkgIGNvbW1hbmRfbGluZS5wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzID0gRkFMU0U7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgT1BUSU9OX0VSUk9SX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVM6CisrCSAgY29tbWFuZF9saW5lLmVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMgPSBUUlVFOworKwkgIGJyZWFrOworIAl9CisgICAgIH0KKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMC1GaXgtcnBhdGgtaW4tbGlidG9vbC13aGVuLXN5c3Jvb3QtaXMtZW5hYmxlZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTAtRml4LXJwYXRoLWluLWxpYnRvb2wtd2hlbi1zeXNyb290LWlzLWVuYWJsZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1MWU3NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTAtRml4LXJwYXRoLWluLWxpYnRvb2wtd2hlbi1zeXNyb290LWlzLWVuYWJsZWQucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbSBlZGJlZTlhNjhlMWMyZTExYzA1OTY2OGFhMWQxMzAwMWQ5ZjNkZTA2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTo0MjozOCArMDAwMAorU3ViamVjdDogW1BBVENIIDEwLzEzXSBGaXggcnBhdGggaW4gbGlidG9vbCB3aGVuIHN5c3Jvb3QgaXMgZW5hYmxlZAorCitFbmFibGluZyBzeXNyb290IHN1cHBvcnQgaW4gbGlidG9vbCBleHBvc2VkIGEgYnVnIHdoZXJlIHRoZSBmaW5hbAorbGlicmFyeSBoYWQgYW4gUlBBVEggZW5jb2RlZCBpbnRvIGl0IHdoaWNoIHN0aWxsIHBvaW50ZWQgdG8gdGhlCitzeXNyb290LiBUaGlzIHdvcmtzIGFyb3VuZCB0aGUgaXNzdWUgdW50aWwgaXQgZ2V0cyBzb3J0ZWQgb3V0Cit1cHN0cmVhbS4KKworRml4IHN1Z2dlc3RlZCBieSBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbHRtYWluLnNoIHwgMTAgKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDcwZTg1NmUuLjExZWU2ODQgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTgwMzUsOSArODAzNSwxMSBAQCBFT0YKKyAJICB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluayAmJiBycGF0aD0iJGNvbXBpbGVfcnBhdGgkcnBhdGgiCisgCSAgZm9yIGxpYmRpciBpbiAkcnBhdGg7IGRvCisgCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKysJCSAgZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisrCQkgIGxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisrCQkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGxpYmRpciIKKysJCSAgbGliZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCistCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKy0JCWxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisgCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJCSAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKyAJCWVsc2UKK0BAIC04NzcwLDYgKzg3NzIsMTAgQEAgRU9GCisgICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgICBmb3IgbGliZGlyIGluICRjb21waWxlX3JwYXRoICRmaW5hbGl6ZV9ycGF0aDsgZG8KKyAJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisrCSAgZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisrCSAgbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKKysJICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRsaWJkaXIiCisrCSAgbGliZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKyAJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorIAkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDExLUNoYW5nZS1kZWZhdWx0LWVtdWxhdGlvbi1mb3ItbWlwczY0LWxpbnV4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMS1DaGFuZ2UtZGVmYXVsdC1lbXVsYXRpb24tZm9yLW1pcHM2NC1saW51eC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWQ1N2VlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMS1DaGFuZ2UtZGVmYXVsdC1lbXVsYXRpb24tZm9yLW1pcHM2NC1saW51eC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitGcm9tIDJhNWU4ODEzZDNjNWRiM2UyYjdkOWRmYTJhYjI3Y2NjZDUxMTFlNTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjQ0OjE0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMTNdIENoYW5nZSBkZWZhdWx0IGVtdWxhdGlvbiBmb3IgbWlwczY0Ki0qLWxpbnV4CisKK3dlIGNoYW5nZSB0aGUgZGVmYXVsdCBlbXVsYXRpb25zIHRvIGJlIE42NCBpbnN0ZWFkIG9mIE4zMgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgWyBPRSBjb25maWd1cmF0aW9uIFNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgYmZkL2NvbmZpZy5iZmQgICB8IDggKysrKy0tLS0KKyBsZC9jb25maWd1cmUudGd0IHwgOCArKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmZkL2NvbmZpZy5iZmQgYi9iZmQvY29uZmlnLmJmZAoraW5kZXggN2JjYjkyYS4uMDNkMmM2ZiAxMDA2NDQKKy0tLSBhL2JmZC9jb25maWcuYmZkCisrKysgYi9iZmQvY29uZmlnLmJmZAorQEAgLTEwNjIsMTIgKzEwNjIsMTIgQEAgY2FzZSAiJHt0YXJnfSIgaW4KKyAgICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX2xlX3ZlYyBtaXBzX2VsZjY0X2JlX3ZlYyBtaXBzX2VsZjY0X2xlX3ZlYyBtaXBzX2Vjb2ZmX2JlX3ZlYyBtaXBzX2Vjb2ZmX2xlX3ZlYyIKKyAgICAgOzsKKyAgIG1pcHM2NCplbC0qLWxpbnV4KikKKy0gICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGYzMl9udHJhZF9sZV92ZWMKKy0gICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX250cmFkX2JlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfbGVfdmVjIG1pcHNfZWxmMzJfdHJhZF9iZV92ZWMgbWlwc19lbGY2NF90cmFkX2xlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfYmVfdmVjIgorKyAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjY0X3RyYWRfbGVfdmVjCisrICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9udHJhZF9iZV92ZWMgbWlwc19lbGYzMl9udHJhZF9sZV92ZWMgbWlwc19lbGYzMl90cmFkX2xlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfYmVfdmVjIG1pcHNfZWxmNjRfdHJhZF9iZV92ZWMiCisgICAgIDs7CisgICBtaXBzNjQqLSotbGludXgqKQorLSAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjMyX250cmFkX2JlX3ZlYworLSAgICB0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfbnRyYWRfbGVfdmVjIG1pcHNfZWxmMzJfdHJhZF9iZV92ZWMgbWlwc19lbGYzMl90cmFkX2xlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfYmVfdmVjIG1pcHNfZWxmNjRfdHJhZF9sZV92ZWMiCisrICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmNjRfdHJhZF9iZV92ZWMKKysgICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX250cmFkX2JlX3ZlYyBtaXBzX2VsZjMyX250cmFkX2JlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfYmVfdmVjIG1pcHNfZWxmMzJfdHJhZF9sZV92ZWMgbWlwc19lbGY2NF90cmFkX2xlX3ZlYyIKKyAgICAgOzsKKyAgIG1pcHMqZWwtKi1saW51eCopCisgICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmMzJfdHJhZF9sZV92ZWMKK2RpZmYgLS1naXQgYS9sZC9jb25maWd1cmUudGd0IGIvbGQvY29uZmlndXJlLnRndAoraW5kZXggMjRlMzZkMS4uNzQwYjJlYSAxMDA2NDQKKy0tLSBhL2xkL2NvbmZpZ3VyZS50Z3QKKysrKyBiL2xkL2NvbmZpZ3VyZS50Z3QKK0BAIC00NzYsMTEgKzQ3NiwxMSBAQCBtaXBzKmVsLSotdnh3b3JrcyopCXRhcmdfZW11bD1lbGYzMmVsbWlwdnh3b3JrcworIG1pcHMqLSotdnh3b3JrcyopCXRhcmdfZW11bD1lbGYzMmVibWlwdnh3b3JrcworIAkJICAgICAgICB0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmVsbWlwdnh3b3JrcyIgOzsKKyBtaXBzKi0qLXdpbmRpc3MpCXRhcmdfZW11bD1lbGYzMm1pcHN3aW5kaXNzIDs7CistbWlwczY0KmVsLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjMybHRzbWlwbjMyCistCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJidHNtaXBuMzIgZWxmMzJsdHNtaXAgZWxmMzJidHNtaXAgZWxmNjRsdHNtaXAgZWxmNjRidHNtaXAiCisrbWlwczY0KmVsLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjY0bHRzbWlwCisrCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJidHNtaXBuMzIgZWxmMzJsdHNtaXBuMzIgZWxmMzJsdHNtaXAgZWxmMzJidHNtaXAgZWxmNjRidHNtaXAiCisgCQkJdGFyZ19leHRyYV9saWJwYXRoPSR0YXJnX2V4dHJhX2VtdWxzIDs7CistbWlwczY0Ki0qLWxpbnV4LSopCXRhcmdfZW11bD1lbGYzMmJ0c21pcG4zMgorLQkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMybHRzbWlwbjMyIGVsZjMyYnRzbWlwIGVsZjMybHRzbWlwIGVsZjY0YnRzbWlwIGVsZjY0bHRzbWlwIgorK21pcHM2NCotKi1saW51eC0qKQl0YXJnX2VtdWw9ZWxmNjRidHNtaXAKKysJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmJ0c21pcG4zMiBlbGYzMmx0c21pcG4zMiBlbGYzMmJ0c21pcCBlbGYzMmx0c21pcCBlbGY2NGx0c21pcCIKKyAJCQl0YXJnX2V4dHJhX2xpYnBhdGg9JHRhcmdfZXh0cmFfZW11bHMgOzsKKyBtaXBzKmVsLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjMybHRzbWlwCisgCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJidHNtaXAgZWxmMzJsdHNtaXBuMzIgZWxmNjRsdHNtaXAgZWxmMzJidHNtaXBuMzIgZWxmNjRidHNtaXAiCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTItQWRkLVhMUC1pbnN0cnVjdGlvbnMtc3VwcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTItQWRkLVhMUC1pbnN0cnVjdGlvbnMtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTZmZjkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMi1BZGQtWExQLWluc3RydWN0aW9ucy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNDI4IEBACitGcm9tIDQ0ODMyOWVhMDk3NDQ3YWVlNzNkMDUwMDQ1Mjk1YzVhMGFlODUxOWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjUxOjA1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTIvMTNdIEFkZCBYTFAgaW5zdHJ1Y3Rpb25zIHN1cHBvcnQKKworRnJvbSAyNmFkYjA2Y2U1MTVhYWRmZWMwOGNlMTMxMDliNGI5ODI4N2Y2NzdiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmVidSBQaGlsaXBzIDxucGhpbGlwc0BuZXRsb2dpY21pY3JvLmNvbT4KK0RhdGU6IEZyaSwgMzAgSnVsIDIwMTAgMTU6MTA6MDMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHN1cHBvcnQgZm9yIE5ldGxvZ2ljIFhMUAorCitVc2luZyB0aGUgbWlwc2lzYTY0cjJubG0gdGFyZ2V0LCBhZGQgc3VwcG9ydCBmb3IgWExQIGZyb20KK05ldGxvZ2ljLiBBbHNvLCB1cGRhdGUgdmVuZG9yIG5hbWUgdG8gTkxNIHdoZXJldmVyIGFwcGxpY2FibGUuCistLS0KKyBiZmQvYW91dHguaCAgICAgICAgICAgfCAgICAxICsKKyBiZmQvYXJjaHVyZXMuYyAgICAgICAgfCAgICAxICsKKyBiZmQvYmZkLWluMi5oICAgICAgICAgfCAgICAxICsKKyBiZmQvY29uZmlnLmJmZCAgICAgICAgfCAgICA1ICsrKysrCisgYmZkL2NwdS1taXBzLmMgICAgICAgIHwgICAgNiArKysrLS0KKyBiZmQvZWxmeHgtbWlwcy5jICAgICAgfCAgICA4ICsrKysrKysrCisgYmludXRpbHMvcmVhZGVsZi5jICAgIHwgICAgMSArCisgZ2FzL2NvbmZpZy90Yy1taXBzLmMgIHwgICAgNCArKystCisgZ2FzL2NvbmZpZ3VyZSAgICAgICAgIHwgICAgMyArKysKKyBnYXMvY29uZmlndXJlLnRndCAgICAgfCAgICAyICstCisgaW5jbHVkZS9lbGYvbWlwcy5oICAgIHwgICAgMSArCisgaW5jbHVkZS9vcGNvZGUvbWlwcy5oIHwgICAxMCArKysrKysrKy0tCisgbGQvY29uZmlndXJlLnRndCAgICAgIHwgICAgMiArKworIG9wY29kZXMvbWlwcy1kaXMuYyAgICB8ICAgMTIgKysrKystLS0tLS0tCisgb3Bjb2Rlcy9taXBzLW9wYy5jICAgIHwgICAzMyArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAxNSBmaWxlcyBjaGFuZ2VkLCA2NSBpbnNlcnRpb25zKCspLCAyNSBkZWxldGlvbnMoLSkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBiZmQvYW91dHguaCAgICAgICAgICAgfCAgMSArCisgYmZkL2FyY2h1cmVzLmMgICAgICAgIHwgIDEgKworIGJmZC9iZmQtaW4yLmggICAgICAgICB8ICAxICsKKyBiZmQvY29uZmlnLmJmZCAgICAgICAgfCAgNSArKysrKworIGJmZC9jcHUtbWlwcy5jICAgICAgICB8ICA2ICsrKystLQorIGJmZC9lbGZ4eC1taXBzLmMgICAgICB8ICA4ICsrKysrKysrCisgYmludXRpbHMvcmVhZGVsZi5jICAgIHwgIDEgKworIGdhcy9jb25maWcvdGMtbWlwcy5jICB8ICA0ICsrKy0KKyBnYXMvY29uZmlndXJlICAgICAgICAgfCAgMyArKysKKyBnYXMvY29uZmlndXJlLnRndCAgICAgfCAgMiArLQorIGluY2x1ZGUvZWxmL21pcHMuaCAgICB8ICAxICsKKyBpbmNsdWRlL29wY29kZS9taXBzLmggfCAxMCArKysrKysrKy0tCisgbGQvY29uZmlndXJlLnRndCAgICAgIHwgIDIgKysKKyBvcGNvZGVzL21pcHMtZGlzLmMgICAgfCAxMiArKysrKy0tLS0tLS0KKyBvcGNvZGVzL21pcHMtb3BjLmMgICAgfCAzMyArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAxNSBmaWxlcyBjaGFuZ2VkLCA2NSBpbnNlcnRpb25zKCspLCAyNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2JmZC9hb3V0eC5oIGIvYmZkL2FvdXR4LmgKK2luZGV4IDkzODVhOTguLmE4OGRmOTkgMTAwNjQ0CistLS0gYS9iZmQvYW91dHguaAorKysrIGIvYmZkL2FvdXR4LmgKK0BAIC04MDIsNiArODAyLDcgQEAgTkFNRSAoYW91dCwgbWFjaGluZV90eXBlKSAoZW51bSBiZmRfYXJjaGl0ZWN0dXJlIGFyY2gsCisgCWNhc2UgYmZkX21hY2hfbWlwc2lzYTY0cjY6CisgCWNhc2UgYmZkX21hY2hfbWlwc19zYjE6CisgCWNhc2UgYmZkX21hY2hfbWlwc194bHI6CisrCWNhc2UgYmZkX21hY2hfbWlwc194bHA6CisgCSAgLyogRklYTUU6IFRoZXNlIHNob3VsZCBiZSBNSVBTMywgTUlQUzQsIE1JUFMxNiwgTUlQUzMyLCBldGMuICAqLworIAkgIGFyY2hfZmxhZ3MgPSBNX01JUFMyOworIAkgIGJyZWFrOworZGlmZiAtLWdpdCBhL2JmZC9hcmNodXJlcy5jIGIvYmZkL2FyY2h1cmVzLmMKK2luZGV4IGM5ZmQ2YzguLjU0N2JkMDkgMTAwNjQ0CistLS0gYS9iZmQvYXJjaHVyZXMuYworKysrIGIvYmZkL2FyY2h1cmVzLmMKK0BAIC0xODAsNiArMTgwLDcgQEAgREVTQ1JJUFRJT04KKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbnAJCTY2MDEKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjIJCTY1MDIKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX3hsciAgICAgICAgICAgICAgODg3NjgyICAgeyogZGVjaW1hbCAnWExSJyAgKn0KKysuI2RlZmluZSBiZmRfbWFjaF9taXBzX3hscCAgICAgICAgICAgICAgODg3NjgwICAgeyogZGVjaW1hbCAnWExQJyAgKn0KKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzIgICAgICAgICAgICAgMzIKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzJyMiAgICAgICAgICAgMzMKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzJyMyAgICAgICAgICAgMzQKK2RpZmYgLS1naXQgYS9iZmQvYmZkLWluMi5oIGIvYmZkL2JmZC1pbjIuaAoraW5kZXggYzdhMmJiNS4uNDEzYjc3MyAxMDA2NDQKKy0tLSBhL2JmZC9iZmQtaW4yLmgKKysrKyBiL2JmZC9iZmQtaW4yLmgKK0BAIC0xOTY3LDYgKzE5NjcsNyBAQCBlbnVtIGJmZF9hcmNoaXRlY3R1cmUKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9ucCAgICAgICAgICA2NjAxCisgI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjIgICAgICAgICAgNjUwMgorICNkZWZpbmUgYmZkX21hY2hfbWlwc194bHIgICAgICAgICAgICAgIDg4NzY4MiAgIC8qIGRlY2ltYWwgJ1hMUicgICovCisrI2RlZmluZSBiZmRfbWFjaF9taXBzX3hscCAgICAgICAgICAgICAgODg3NjgwICAgLyogZGVjaW1hbCAnWExQJyAgKi8KKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNpc2EzMiAgICAgICAgICAgICAzMgorICNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMycjIgICAgICAgICAgIDMzCisgI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzJyMyAgICAgICAgICAgMzQKK2RpZmYgLS1naXQgYS9iZmQvY29uZmlnLmJmZCBiL2JmZC9jb25maWcuYmZkCitpbmRleCAwM2QyYzZmLi4yNzA4NmRiIDEwMDY0NAorLS0tIGEvYmZkL2NvbmZpZy5iZmQKKysrKyBiL2JmZC9jb25maWcuYmZkCitAQCAtMTA0MSw2ICsxMDQxLDExIEBAIGNhc2UgIiR7dGFyZ30iIGluCisgICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmMzJfbGVfdmVjCisgICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9iZV92ZWMgbWlwc19lbGY2NF9iZV92ZWMgbWlwc19lbGY2NF9sZV92ZWMiCisgICAgIDs7CisrICBtaXBzaXNhNjQqLSotZWxmKikKKysJdGFyZ19kZWZ2ZWM9bWlwc19lbGYzMl90cmFkX2JlX3ZlYworKwl0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfdHJhZF9sZV92ZWMgbWlwc19lbGY2NF90cmFkX2JlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfbGVfdmVjIgorKwl3YW50NjQ9dHJ1ZQorKwk7OworICAgbWlwcyotKi1lbGYqIHwgbWlwcyotKi1ydGVtcyogfCBtaXBzKi0qLXZ4d29ya3MgfCBtaXBzKi0qLXdpbmRpc3MpCisgICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmMzJfYmVfdmVjCisgICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9sZV92ZWMgbWlwc19lbGY2NF9iZV92ZWMgbWlwc19lbGY2NF9sZV92ZWMiCitkaWZmIC0tZ2l0IGEvYmZkL2NwdS1taXBzLmMgYi9iZmQvY3B1LW1pcHMuYworaW5kZXggYjYxN2FhYS4uMTlhOTlkMSAxMDA2NDQKKy0tLSBhL2JmZC9jcHUtbWlwcy5jCisrKysgYi9iZmQvY3B1LW1pcHMuYworQEAgLTEwMyw3ICsxMDMsOCBAQCBlbnVtCisgICBJX21pcHNvY3Rlb25wLAorICAgSV9taXBzb2N0ZW9uMiwKKyAgIElfeGxyLAorLSAgSV9taWNyb21pcHMKKysgIElfbWljcm9taXBzLAorKyAgSV94bHAKKyB9OworIAorICNkZWZpbmUgTk4oaW5kZXgpICgmYXJjaF9pbmZvX3N0cnVjdFsoaW5kZXgpICsgMV0pCitAQCAtMTUzLDcgKzE1NCw4IEBAIHN0YXRpYyBjb25zdCBiZmRfYXJjaF9pbmZvX3R5cGUgYXJjaF9pbmZvX3N0cnVjdFtdID0KKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19vY3Rlb25wLCJtaXBzOm9jdGVvbisiLCAgRkFMU0UsIE5OKElfbWlwc29jdGVvbnApKSwKKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19vY3Rlb24yLCJtaXBzOm9jdGVvbjIiLCAgRkFMU0UsIE5OKElfbWlwc29jdGVvbjIpKSwKKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc194bHIsICJtaXBzOnhsciIsICAgICAgIEZBTFNFLCBOTihJX3hscikpLAorLSAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX21pY3JvbWlwcywibWlwczptaWNyb21pcHMiLEZBTFNFLDApCisrICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfbWljcm9taXBzLCJtaXBzOm1pY3JvbWlwcyIsRkFMU0UsTk4oSV9taWNyb21pcHMpKSwKKysgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc194bHAsICJtaXBzOnhscCIsICAgICAgRkFMU0UsIDApCisgfTsKKyAKKyAvKiBUaGUgZGVmYXVsdCBhcmNoaXRlY3R1cmUgaXMgbWlwczozMDAwLCBidXQgd2l0aCBhIG1hY2hpbmUgbnVtYmVyIG9mCitkaWZmIC0tZ2l0IGEvYmZkL2VsZnh4LW1pcHMuYyBiL2JmZC9lbGZ4eC1taXBzLmMKK2luZGV4IDBkZjdhYmYuLmQyNjhlODYgMTAwNjQ0CistLS0gYS9iZmQvZWxmeHgtbWlwcy5jCisrKysgYi9iZmQvZWxmeHgtbWlwcy5jCitAQCAtNjYwOCw2ICs2NjA4LDkgQEAgX2JmZF9lbGZfbWlwc19tYWNoIChmbGFnd29yZCBmbGFncykKKyAgICAgY2FzZSBFX01JUFNfTUFDSF9YTFI6CisgICAgICAgcmV0dXJuIGJmZF9tYWNoX21pcHNfeGxyOworIAorKwljYXNlIEVfTUlQU19NQUNIX1hMUDoKKysgICAgICByZXR1cm4gYmZkX21hY2hfbWlwc194bHA7CisrCisgICAgIGRlZmF1bHQ6CisgICAgICAgc3dpdGNoIChmbGFncyAmIEVGX01JUFNfQVJDSCkKKyAJeworQEAgLTExODc4LDYgKzExODgxLDEwIEBAIG1pcHNfc2V0X2lzYV9mbGFncyAoYmZkICphYmZkKQorICAgICAgIHZhbCA9IEVfTUlQU19BUkNIXzY0UjIgfCBFX01JUFNfTUFDSF9PQ1RFT04yOworICAgICAgIGJyZWFrOworIAorKwljYXNlIGJmZF9tYWNoX21pcHNfeGxwOgorKwkgIHZhbCA9IEVfTUlQU19BUkNIXzY0UjIgfCBFX01JUFNfTUFDSF9YTFA7CisrCSAgYnJlYWs7CisrCisgICAgIGNhc2UgYmZkX21hY2hfbWlwc2lzYTMyOgorICAgICAgIHZhbCA9IEVfTUlQU19BUkNIXzMyOworICAgICAgIGJyZWFrOworQEAgLTE0NzY1LDYgKzE0NzcyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBzX21hY2hfZXh0ZW5zaW9uIG1pcHNfbWFjaF9leHRlbnNpb25zW10gPQorICAgeyBiZmRfbWFjaF9taXBzX29jdGVvbnAsIGJmZF9tYWNoX21pcHNfb2N0ZW9uIH0sCisgICB7IGJmZF9tYWNoX21pcHNfb2N0ZW9uLCBiZmRfbWFjaF9taXBzaXNhNjRyMiB9LAorICAgeyBiZmRfbWFjaF9taXBzX2xvb25nc29uXzNhLCBiZmRfbWFjaF9taXBzaXNhNjRyMiB9LAorKyAgeyBiZmRfbWFjaF9taXBzX3hscCwgYmZkX21hY2hfbWlwc2lzYTY0cjIgfSwKKyAKKyAgIC8qIE1JUFM2NCBleHRlbnNpb25zLiAgKi8KKyAgIHsgYmZkX21hY2hfbWlwc2lzYTY0cjIsIGJmZF9tYWNoX21pcHNpc2E2NCB9LAorZGlmZiAtLWdpdCBhL2JpbnV0aWxzL3JlYWRlbGYuYyBiL2JpbnV0aWxzL3JlYWRlbGYuYworaW5kZXggMGMwMGIyZi4uNmU5ZDVlNCAxMDA2NDQKKy0tLSBhL2JpbnV0aWxzL3JlYWRlbGYuYworKysrIGIvYmludXRpbHMvcmVhZGVsZi5jCitAQCAtMjg5OCw2ICsyODk4LDcgQEAgZ2V0X21hY2hpbmVfZmxhZ3MgKHVuc2lnbmVkIGVfZmxhZ3MsIHVuc2lnbmVkIGVfbWFjaGluZSkKKyAJICAgIGNhc2UgRV9NSVBTX01BQ0hfT0NURU9OMjogc3RyY2F0IChidWYsICIsIG9jdGVvbjIiKTsgYnJlYWs7CisgCSAgICBjYXNlIEVfTUlQU19NQUNIX09DVEVPTjM6IHN0cmNhdCAoYnVmLCAiLCBvY3Rlb24zIik7IGJyZWFrOworIAkgICAgY2FzZSBFX01JUFNfTUFDSF9YTFI6ICBzdHJjYXQgKGJ1ZiwgIiwgeGxyIik7IGJyZWFrOworKwkJY2FzZSBFX01JUFNfTUFDSF9YTFA6ICBzdHJjYXQgKGJ1ZiwgIiwgeGxwIik7IGJyZWFrOworIAkgICAgY2FzZSAwOgorIAkgICAgLyogV2Ugc2ltcGx5IGlnbm9yZSB0aGUgZmllbGQgaW4gdGhpcyBjYXNlIHRvIGF2b2lkIGNvbmZ1c2lvbjoKKyAJICAgICAgIE1JUFMgRUxGIGRvZXMgbm90IHNwZWNpZnkgRUZfTUlQU19NQUNILCBpdCBpcyBhIEdOVQorZGlmZiAtLWdpdCBhL2dhcy9jb25maWcvdGMtbWlwcy5jIGIvZ2FzL2NvbmZpZy90Yy1taXBzLmMKK2luZGV4IGMzZTNlMmEuLjhkNjQzNDQgMTAwNjQ0CistLS0gYS9nYXMvY29uZmlnL3RjLW1pcHMuYworKysrIGIvZ2FzL2NvbmZpZy90Yy1taXBzLmMKK0BAIC01NTEsNiArNTUxLDcgQEAgc3RhdGljIGludCBtaXBzXzMyYml0bW9kZSA9IDA7CisgICAgfHwgbWlwc19vcHRzLmFyY2ggPT0gQ1BVX1JNNzAwMCAgICAgICAgICAgICAgICAgICAgXAorICAgIHx8IG1pcHNfb3B0cy5hcmNoID09IENQVV9WUjU1MDAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB8fCBtaXBzX29wdHMubWljcm9taXBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgfHwgbWlwc19vcHRzLmFyY2ggPT0gQ1BVX1hMUCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICkKKyAKKyAvKiBXaGV0aGVyIHRoZSBwcm9jZXNzb3IgdXNlcyBoYXJkd2FyZSBpbnRlcmxvY2tzIHRvIHByb3RlY3QgcmVhZHMKK0BAIC01ODAsNiArNTgxLDcgQEAgc3RhdGljIGludCBtaXBzXzMyYml0bW9kZSA9IDA7CisgICAgICYmIG1pcHNfb3B0cy5pc2EgIT0gSVNBX01JUFMzKSAgICAgICAgICAgICAgICAgICAgXAorICAgIHx8IG1pcHNfb3B0cy5hcmNoID09IENQVV9SNDMwMCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB8fCBtaXBzX29wdHMubWljcm9taXBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgfHwgbWlwc19vcHRzLmFyY2ggPT0gQ1BVX1hMUCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICkKKyAKKyAvKiBXaGV0aGVyIHRoZSBwcm9jZXNzb3IgdXNlcyBoYXJkd2FyZSBpbnRlcmxvY2tzIHRvIHByb3RlY3QgcmVhZHMKK0BAIC0xODY4Miw3ICsxODY4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwc19jcHVfaW5mbyBtaXBzX2NwdV9pbmZvX3RhYmxlW10gPQorICAgLyogQnJvYWRjb20gWExQLgorICAgICAgWExQIGlzIG1vc3RseSBsaWtlIFhMUiwgd2l0aCB0aGUgcHJvbWluZW50IGV4Y2VwdGlvbiB0aGF0IGl0IGlzCisgICAgICBNSVBTNjRSMiByYXRoZXIgdGhhbiBNSVBTNjQuICAqLworLSAgeyAieGxwIiwJICAgICAgMCwgMCwJCQlJU0FfTUlQUzY0UjIsIENQVV9YTFIgfSwKKysgIHsgInhscCIsCSAgICAgIDAsIDAsCQkJSVNBX01JUFM2NFIyLCBDUFVfWExQIH0sCisgCisgICAvKiBFbmQgbWFya2VyICovCisgICB7IE5VTEwsIDAsIDAsIDAsIDAgfQorZGlmZiAtLWdpdCBhL2dhcy9jb25maWd1cmUgYi9nYXMvY29uZmlndXJlCitpbmRleCAwNzQ4ODZmLi44MDkxZjJmIDEwMDc1NQorLS0tIGEvZ2FzL2NvbmZpZ3VyZQorKysrIGIvZ2FzL2NvbmZpZ3VyZQorQEAgLTEyODA4LDYgKzEyODA4LDkgQEAgX0FDRU9GCisgCSAgbWlwc2lzYTY0cjYgfCBtaXBzaXNhNjRyNmVsKQorIAkgICAgbWlwc19jcHU9bWlwczY0cjYKKyAJICAgIDs7CisrCSAgbWlwc2lzYTY0cjJubG0gfCBtaXBzaXNhNjRyMm5sbWVsKQorKwkJbWlwc19jcHU9eGxwCisrCQk7OworIAkgIG1pcHN0eDM5IHwgbWlwc3R4MzllbCkKKyAJICAgIG1pcHNfY3B1PXIzOTAwCisgCSAgICA7OworZGlmZiAtLWdpdCBhL2dhcy9jb25maWd1cmUudGd0IGIvZ2FzL2NvbmZpZ3VyZS50Z3QKK2luZGV4IDFkOTJmNTUuLjA2ZThiNGYgMTAwNjQ0CistLS0gYS9nYXMvY29uZmlndXJlLnRndAorKysrIGIvZ2FzL2NvbmZpZ3VyZS50Z3QKK0BAIC0zMzIsNyArMzMyLDcgQEAgY2FzZSAke2dlbmVyaWNfdGFyZ2V0fSBpbgorICAgbWlwcy0qLXN5c3Y0Kk1QKiB8IG1pcHMtKi1nbnUqKQlmbXQ9ZWxmIGVtPXRtaXBzIDs7CisgICBtaXBzKi1zZGUtZWxmKiB8IG1pcHMqLW10aS1lbGYqIHwgbWlwcyotaW1nLWVsZiopCisgCQkJCQlmbXQ9ZWxmIGVtPXRtaXBzIDs7CistICBtaXBzLSotZWxmKiB8IG1pcHMtKi1ydGVtcyopCQlmbXQ9ZWxmIDs7CisrICBtaXBzLSotZWxmKiB8IG1pcHMtKi1ydGVtcyopCQlmbXQ9ZWxmIGVtPXRtaXBzIDs7CisgICBtaXBzLSotbmV0YnNkKikJCQlmbXQ9ZWxmIGVtPXRtaXBzIDs7CisgICBtaXBzLSotb3BlbmJzZCopCQkJZm10PWVsZiBlbT10bWlwcyA7OworIAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWxmL21pcHMuaCBiL2luY2x1ZGUvZWxmL21pcHMuaAoraW5kZXggMmVkNmFjZC4uZTU0MWY1MCAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvZWxmL21pcHMuaAorKysrIGIvaW5jbHVkZS9lbGYvbWlwcy5oCitAQCAtMjg1LDYgKzI4NSw3IEBAIEVORF9SRUxPQ19OVU1CRVJTIChSX01JUFNfbWF4ZXh0KQorICNkZWZpbmUgRV9NSVBTX01BQ0hfU0IxICAgICAgICAgMHgwMDhhMDAwMAorICNkZWZpbmUgRV9NSVBTX01BQ0hfT0NURU9OCTB4MDA4YjAwMDAKKyAjZGVmaW5lIEVfTUlQU19NQUNIX1hMUiAgICAgCTB4MDA4YzAwMDAKKysjZGVmaW5lIEVfTUlQU19NQUNIX1hMUCAgICAgICAgIDB4MDA4ZjAwMDAKKyAjZGVmaW5lIEVfTUlQU19NQUNIX09DVEVPTjIJMHgwMDhkMDAwMAorICNkZWZpbmUgRV9NSVBTX01BQ0hfT0NURU9OMwkweDAwOGUwMDAwCisgI2RlZmluZSBFX01JUFNfTUFDSF81NDAwCTB4MDA5MTAwMDAKK2RpZmYgLS1naXQgYS9pbmNsdWRlL29wY29kZS9taXBzLmggYi9pbmNsdWRlL29wY29kZS9taXBzLmgKK2luZGV4IGVmMjYxNjcuLmVmNTNlYzYgMTAwNjQ0CistLS0gYS9pbmNsdWRlL29wY29kZS9taXBzLmgKKysrKyBiL2luY2x1ZGUvb3Bjb2RlL21pcHMuaAorQEAgLTEyMjcsOCArMTIyNywxMCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1pcHNfaXNhX3RhYmxlW10gPSB7CisgI2RlZmluZSBJTlNOX0xPT05HU09OXzJGICAgICAgICAgIDB4ODAwMDAwMDAKKyAvKiBMb29uZ3NvbiAzQS4gICovCisgI2RlZmluZSBJTlNOX0xPT05HU09OXzNBICAgICAgICAgIDB4MDAwMDA0MDAKKy0vKiBSTUkgWGxyIGluc3RydWN0aW9uICovCistI2RlZmluZSBJTlNOX1hMUiAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorKy8qIE5ldGxvZ2ljIFhsciBpbnN0cnVjdGlvbiAqLworKyNkZWZpbmUgSU5TTl9YTFIJCTB4MDAwMDAwMjAKKysvKiBOZXRsb2dpYyBYbFAgaW5zdHJ1Y3Rpb24gKi8KKysjZGVmaW5lIElOU05fWExQCQkweDAwMDAwMDQwCisgCisgLyogRFNQIEFTRSAqLworICNkZWZpbmUgQVNFX0RTUAkJCTB4MDAwMDAwMDEKK0BAIC0xMzI0LDYgKzEzMjYsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1pcHNfaXNhX3RhYmxlW10gPSB7CisgI2RlZmluZSBDUFVfT0NURU9OUAk2NjAxCisgI2RlZmluZSBDUFVfT0NURU9OMgk2NTAyCisgI2RlZmluZSBDUFVfWExSICAgICAJODg3NjgyICAgCS8qIGRlY2ltYWwgJ1hMUicgICAqLworKyNkZWZpbmUgQ1BVX1hMUCAgICAgICAgIDg4NzY4MCAgICAgIC8qIGRlY2ltYWwgJ1hMUCcgICAqLworIAorIC8qIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBDUFUgaXMgaW5jbHVkZWQgaW4gSU5TTl8qIG1hc2sgTUFTSy4gICovCisgCitAQCAtMTM5OCw2ICsxNDAxLDkgQEAgY3B1X2lzX21lbWJlciAoaW50IGNwdSwgdW5zaWduZWQgaW50IG1hc2spCisgICAgICAgcmV0dXJuICgobWFzayAmIElOU05fSVNBX01BU0spID09IElOU05fSVNBMzJSNikKKyAJICAgICB8fCAoKG1hc2sgJiBJTlNOX0lTQV9NQVNLKSA9PSBJTlNOX0lTQTY0UjYpOworIAorKyAgICBjYXNlIENQVV9YTFA6CisrICAgICAgcmV0dXJuIChtYXNrICYgSU5TTl9YTFApICE9IDA7CisrCisgICAgIGRlZmF1bHQ6CisgICAgICAgcmV0dXJuIEZBTFNFOworICAgICB9CitkaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlLnRndCBiL2xkL2NvbmZpZ3VyZS50Z3QKK2luZGV4IDc0MGIyZWEuLjRkZjEzYTcgMTAwNjQ0CistLS0gYS9sZC9jb25maWd1cmUudGd0CisrKysgYi9sZC9jb25maWd1cmUudGd0CitAQCAtNDYyLDYgKzQ2Miw4IEBAIG1pcHMqZWwtc2RlLWVsZiopCXRhcmdfZW11bD1lbGYzMmx0c21pcAorIG1pcHMqLXNkZS1lbGYqIHwgbWlwcyotbXRpLWVsZiogfCBtaXBzKi1pbWctZWxmKikKKyAJCQl0YXJnX2VtdWw9ZWxmMzJidHNtaXAKKyAJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmx0c21pcCBlbGYzMmJ0c21pcG4zMiBlbGY2NGJ0c21pcCBlbGYzMmx0c21pcG4zMiBlbGY2NGx0c21pcCIgOzsKKyttaXBzaXNhNjQqLSotZWxmKikJdGFyZ19lbXVsPWVsZjMyYnRzbWlwCisrCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJsdHNtaXAgZWxmNjRidHNtaXAgZWxmNjRsdHNtaXAiIDs7CisgbWlwczY0KmVsLXBzMi1lbGYqKQl0YXJnX2VtdWw9ZWxmMzJscjU5MDBuMzIKKyAJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmxyNTkwMCIKKyAJCQl0YXJnX2V4dHJhX2xpYnBhdGg9JHRhcmdfZXh0cmFfZW11bHMgOzsKK2RpZmYgLS1naXQgYS9vcGNvZGVzL21pcHMtZGlzLmMgYi9vcGNvZGVzL21pcHMtZGlzLmMKK2luZGV4IDFlYjFkNDUuLmQ2ODgxYWYgMTAwNjQ0CistLS0gYS9vcGNvZGVzL21pcHMtZGlzLmMKKysrKyBiL29wY29kZXMvbWlwcy1kaXMuYworQEAgLTY1NSwxMyArNjU1LDExIEBAIGNvbnN0IHN0cnVjdCBtaXBzX2FyY2hfY2hvaWNlIG1pcHNfYXJjaF9jaG9pY2VzW10gPQorICAgICBtaXBzX2NwMHNlbF9uYW1lc194bHIsIEFSUkFZX1NJWkUgKG1pcHNfY3Awc2VsX25hbWVzX3hsciksCisgICAgIG1pcHNfY3AxX25hbWVzX21pcHMzMjY0LCBtaXBzX2h3cl9uYW1lc19udW1lcmljIH0sCisgCistICAvKiBYTFAgaXMgbW9zdGx5IGxpa2UgWExSLCB3aXRoIHRoZSBwcm9taW5lbnQgZXhjZXB0aW9uIGl0IGlzIGJlaW5nCistICAgICBNSVBTNjRSMi4gICovCistICB7ICJ4bHAiLCAxLCBiZmRfbWFjaF9taXBzX3hsciwgQ1BVX1hMUiwKKy0gICAgSVNBX01JUFM2NFIyIHwgSU5TTl9YTFIsIDAsCistICAgIG1pcHNfY3AwX25hbWVzX3hsciwKKy0gICAgbWlwc19jcDBzZWxfbmFtZXNfeGxyLCBBUlJBWV9TSVpFIChtaXBzX2NwMHNlbF9uYW1lc194bHIpLAorLSAgICBtaXBzX2NwMV9uYW1lc19taXBzMzI2NCwgbWlwc19od3JfbmFtZXNfbnVtZXJpYyB9LAorKyAgeyAieGxwIiwgMSwgYmZkX21hY2hfbWlwc194bHAsIENQVV9YTFAsCisrICAgIElTQV9NSVBTNjRSMiB8IElOU05fWExQLCAwLAorKyAgICBtaXBzX2NwMF9uYW1lc19taXBzMzI2NHIyLAorKyAgICBtaXBzX2NwMHNlbF9uYW1lc19taXBzMzI2NHIyLCBBUlJBWV9TSVpFIChtaXBzX2NwMHNlbF9uYW1lc19taXBzMzI2NHIyKSwKKysgICAgbWlwc19od3JfbmFtZXNfbWlwczMyNjRyMiB9LAorIAorICAgLyogVGhpcyBlbnRyeSwgbWlwczE2LCBpcyBoZXJlIG9ubHkgZm9yIElTQS9wcm9jZXNzb3Igc2VsZWN0aW9uOyBkbworICAgICAgbm90IHByaW50IGl0cyBuYW1lLiAgKi8KK2RpZmYgLS1naXQgYS9vcGNvZGVzL21pcHMtb3BjLmMgYi9vcGNvZGVzL21pcHMtb3BjLmMKK2luZGV4IDJjM2JiYWQuLjk3ODVhN2UgMTAwNjQ0CistLS0gYS9vcGNvZGVzL21pcHMtb3BjLmMKKysrKyBiL29wY29kZXMvbWlwcy1vcGMuYworQEAgLTMxOSw3ICszMTksOCBAQCBkZWNvZGVfbWlwc19vcGVyYW5kIChjb25zdCBjaGFyICpwKQorICNkZWZpbmUgSU9DVAkoSU5TTl9PQ1RFT04gfCBJTlNOX09DVEVPTlAgfCBJTlNOX09DVEVPTjIpCisgI2RlZmluZSBJT0NUUAkoSU5TTl9PQ1RFT05QIHwgSU5TTl9PQ1RFT04yKQorICNkZWZpbmUgSU9DVDIJSU5TTl9PQ1RFT04yCistI2RlZmluZSBYTFIgICAgIElOU05fWExSCisrI2RlZmluZSBYTFIJSU5TTl9YTFIKKysjZGVmaW5lIFhMUAlJTlNOX1hMUAorICNkZWZpbmUgSVZJUlQJQVNFX1ZJUlQKKyAjZGVmaW5lIElWSVJUNjQJQVNFX1ZJUlQ2NAorIAorQEAgLTk1Niw2ICs5NTcsNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJjbG8iLAkJCSJVLHMiLAkJMHg3MDAwMDAyMSwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yLAkJMCwJCUkzMnxONTUsCTAsCUkzNyB9LAorIHsiY2x6IiwJCQkiZCxzIiwJCTB4MDAwMDAwNTAsIDB4ZmMxZjA3ZmYsIFdSXzF8UkRfMiwJCTAsCQlJMzcsCQkwLAkwIH0sCisgeyJjbHoiLAkJCSJVLHMiLAkJMHg3MDAwMDAyMCwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yLAkJMCwJCUkzMnxONTUsCTAsCUkzNyB9LAorK3siY3JjIiwJCQkiZCxzLHQiLAkweDcwMDAwMDFjLCAweGZjMDAwN2ZmLAlXUl8xfFJEXzJ8UkRfMywJMCwJCVhMUCwgCQkwLAkwIH0sCisgLyogY3RjMCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSB0YWJsZS4gICovCisgeyJjdGMxIiwJCSJ0LEciLAkJMHg0NGMwMDAwMCwgMHhmZmUwMDdmZiwJUkRfMXxXUl9DQ3xDTSwJCTAsCQlJMSwJCTAsCTAgfSwKKyB7ImN0YzEiLAkJInQsUyIsCQkweDQ0YzAwMDAwLCAweGZmZTAwN2ZmLAlSRF8xfFdSX0NDfENNLAkJMCwJCUkxLAkJMCwJMCB9LAorQEAgLTk4OCwxMiArOTkwLDEzIEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KKyB7ImRhZGRpdSIsCQkidCxyLGoiLAkweDY0MDAwMDAwLCAweGZjMDAwMDAwLCBXUl8xfFJEXzIsCQkwLAkJSTMsCQkwLAkwIH0sCisgeyJkYWRkdSIsCQkiZCx2LHQiLAkweDAwMDAwMDJkLCAweGZjMDAwN2ZmLCBXUl8xfFJEXzJ8UkRfMywJCTAsCQlJMywJCTAsCTAgfSwKKyB7ImRhZGR1IiwJCSJ0LHIsSSIsCTAsICAgIChpbnQpIE1fREFERFVfSSwJSU5TTl9NQUNSTywJCTAsCQlJMywJCTAsCTAgfSwKKy17ImRhZGR3YyIsCQkiZCxzLHQiLCAJMHg3MDAwMDAzOCwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzN8V1JfQzB8UkRfQzAsIDAsCQlYTFIsCQkwLAkwIH0sCisreyJkYWRkd2MiLAkJImQscyx0IiwgCTB4NzAwMDAwMzgsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zfFdSX0MwfFJEX0MwLCAwLAkJWExSfFhMUCwJMCwJMCB9LAorIHsiZGJyZWFrIiwJCSIiLAkJMHg3MDAwMDAzZiwgMHhmZmZmZmZmZiwJMCwJCQkwLAkJTjUsCQkwLAkwIH0sCisgeyJkY2xvIiwJCSJkLHMiLAkJMHgwMDAwMDA1MywgMHhmYzFmMDdmZiwgV1JfMXxSRF8yLAkJMCwJCUk2OSwJCTAsCTAgfSwKKyB7ImRjbG8iLAkJIlUscyIsCSAJMHg3MDAwMDAyNSwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yLCAJMCwJCUk2NHxONTUsCTAsCUk2OSB9LAorIHsiZGNseiIsCQkiZCxzIiwJCTB4MDAwMDAwNTIsIDB4ZmMxZjA3ZmYsIFdSXzF8UkRfMiwJCTAsCQlJNjksCQkwLAkwIH0sCisgeyJkY2x6IiwJCSJVLHMiLAkgCTB4NzAwMDAwMjQsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMiwgCTAsCQlJNjR8TjU1LAkwLAlJNjkgfSwKKyt7ImRjcmMiLAkJImQscyx0IiwJMHg3MDAwMDAxZCwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzMsCTAsCQlYTFAsIAkJMCwJMCB9LAorIC8qIGRjdHIgYW5kIGRjdHcgYXJlIHVzZWQgb24gdGhlIHI1MDAwLiAgKi8KKyB7ImRjdHIiLAkJIm8oYikiLAkgCTB4YmMwNTAwMDAsIDB4ZmMxZjAwMDAsIFJEXzIsCQkJMCwJCUkzLAkJMCwJMCB9LAorIHsiZGN0dyIsCQkibyhiKSIsCQkweGJjMDkwMDAwLCAweGZjMWYwMDAwLCBSRF8yLAkJCTAsCQlJMywJCTAsCTAgfSwKK0BAIC0xMDY1LDYgKzEwNjgsNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJkbWZjMCIsCQkidCxHLEgiLAkweDQwMjAwMDAwLCAweGZmZTAwN2Y4LAlXUl8xfFJEX0MwfExDLAkJMCwJCUk2NCwJCTAsCTAgfSwKKyB7ImRtZmdjMCIsCQkidCxHIiwJCTB4NDA2MDAxMDAsIDB4ZmZlMDA3ZmYsIFdSXzF8UkRfQzB8TEMsCQkwLAkJMCwJCUlWSVJUNjQsIDAgfSwKKyB7ImRtZmdjMCIsCQkidCxHLEgiLAkweDQwNjAwMTAwLCAweGZmZTAwN2Y4LCBXUl8xfFJEX0MwfExDLAkJMCwJCTAsCQlJVklSVDY0LCAwIH0sCisreyJkbWZ1ciIsCQkidCxkIiwJCTB4NzAwMDAwMWUsIDB4ZmZlMDA3ZmYsIFdSXzEsCQkJMCwJCVhMUCwJCTAsCTAgfSwKKyB7ImRtdCIsCQkJIiIsCQkweDQxNjAwYmMxLCAweGZmZmZmZmZmLCBUUkFQLAkJCTAsCQkwLAkJTVQzMiwJMCB9LAorIHsiZG10IiwJCQkidCIsCQkweDQxNjAwYmMxLCAweGZmZTBmZmZmLCBXUl8xfFRSQVAsCQkwLAkJMCwJCU1UMzIsCTAgfSwKKyB7ImRtdGMwIiwJCSJ0LEciLAkJMHg0MGEwMDAwMCwgMHhmZmUwMDdmZiwJUkRfMXxXUl9DMHxXUl9DQ3xDTSwJMCwJCUkzLAkJMCwJRUUgfSwKK0BAIC0xMDgwLDYgKzEwODQsOCBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgLyogZG1mYzMgaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdGFibGUuICAqLworIC8qIGRtdGMzIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHRhYmxlLiAgKi8KKyB7ImRtdWgiLAkJImQscyx0IiwJMHgwMDAwMDBkYywgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzMsCQkwLAkJSTY5LAkJMCwJMCB9LAorK3siZG10dXIiLAkJInQsZCIsCQkweDcwMDAwMDFmLCAweGZmZTAwN2ZmLAlSRF8xLAkJCTAsCQlYTFAsCQkwLAkwIH0sCisreyJkbXVsIiwJCSJkLHMsdCIsCTB4NzAwMDAwMDYsIDB4ZmMwMDA3ZmYsCVdSXzF8UkRfMnxSRF8zLAkJMCwJCVhMUCwJCTAsCTAgfSwKKyB7ImRtdWwiLAkJImQscyx0IiwJMHgwMDAwMDA5YywgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzMsCQkwLAkJSTY5LAkJMCwJMCB9LAorIHsiZG11bCIsCQkiZCx2LHQiLAkweDcwMDAwMDAzLCAweGZjMDAwN2ZmLCBXUl8xfFJEXzJ8UkRfM3xXUl9ISUxPLAkwLAkJSU9DVCwJCTAsCTAgfSwKKyB7ImRtdWwiLAkJImQsdix0IiwJMCwgICAgKGludCkgTV9ETVVMLAlJTlNOX01BQ1JPLAkJMCwJCUkzLAkJMCwJTTMyfEk2OSB9LAorQEAgLTEyMjksOSArMTIzNSw5IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KKyB7ImxkIiwJCQkicywtYigrUikiLAkweGVjMTgwMDAwLCAweGZjMWMwMDAwLCBXUl8xLAkJCVJEX3BjLAkJSTY5LAkJMCwJMCB9LAorIHsibGQiLAkJCSJ0LEEoYikiLAkwLCAgICAoaW50KSBNX0xEX0FCLAlJTlNOX01BQ1JPLAkJMCwJCUkxLAkJMCwJMCB9LAorIHsibGQiLAkJCSJ0LG8oYikiLAkweGRjMDAwMDAwLCAweGZjMDAwMDAwLCBXUl8xfFJEXzN8TE0sCQkwLAkJSTMsCQkwLAkwIH0sCisteyJsZGFkZHciLAkJInQsYiIsCQkweDcwMDAwMDEwLCAweGZjMDBmZmZmLAlNT0RfMXxSRF8yfExNfFNNLAkwLAkJWExSLAkJMCwJMCB9LAorLXsibGRhZGR3dSIsCQkidCxiIiwJCTB4NzAwMDAwMTEsIDB4ZmMwMGZmZmYsCU1PRF8xfFJEXzJ8TE18U00sCTAsCQlYTFIsCQkwLAkwIH0sCisteyJsZGFkZGQiLAkJInQsYiIsCQkweDcwMDAwMDEyLCAweGZjMDBmZmZmLAlNT0RfMXxSRF8yfExNfFNNLAkwLAkJWExSLAkJMCwJMCB9LAorK3sibGRhZGR3IiwJCSJ0LGIiLAkJMHg3MDAwMDAxMCwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisreyJsZGFkZHd1IiwJCSJ0LGIiLAkJMHg3MDAwMDAxMSwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisreyJsZGFkZGQiLAkJInQsYiIsCQkweDcwMDAwMDEyLCAweGZjMDBmZmZmLAlNT0RfMXxSRF8yfFNNLAkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyB7ImxkYzEiLAkJIlQsbyhiKSIsCTB4ZDQwMDAwMDAsIDB4ZmMwMDAwMDAsIFdSXzF8UkRfM3xDTER8RlBfRCwJMCwJCUkyLAkJMCwJU0YgfSwKKyB7ImxkYzEiLAkJIkUsbyhiKSIsCTB4ZDQwMDAwMDAsIDB4ZmMwMDAwMDAsIFdSXzF8UkRfM3xDTER8RlBfRCwJMCwJCUkyLAkJMCwJU0YgfSwKKyB7ImxkYzEiLAkJIlQsQShiKSIsCTAsICAgIChpbnQpIE1fTERDMV9BQiwJSU5TTl9NQUNSTywJCUlOU04yX01fRlBfRCwJSTIsCQkwLAlTRiB9LAorQEAgLTEzOTYsNyArMTQwMiw3IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KKyB7Im1mbG8iLAkJImQsOSIsCQkweDAwMDAwMDEyLCAweGZmOWYwN2ZmLCBXUl8xfFJEX0xPLAkJMCwJCTAsCQlEMzIsCTAgfSwKKyB7Im1mbG8xIiwJCSJkIiwJCTB4NzAwMDAwMTIsIDB4ZmZmZjA3ZmYsCVdSXzF8UkRfTE8sCQkwLAkJRUUsCQkwLAkwIH0sCisgeyJtZmxoeHUiLAkJImQiLAkJMHgwMDAwMDA1MiwgMHhmZmZmMDdmZiwJV1JfMXxNT0RfSElMTywJCTAsCQkwLAkJU01ULAkwIH0sCisteyJtZmNyIiwJCSJ0LHMiLAkJMHg3MDAwMDAxOCwgMHhmYzAwZmZmZiwgV1JfMXxSRF8yLAkJMCwJCVhMUiwJCTAsCTAgfSwKKyt7Im1mY3IiLAkJInQscyIsCQkweDcwMDAwMDE4LCAweGZjMDBmZmZmLCBXUl8xLAkJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisgeyJtZnNhIiwJCSJkIiwJCTB4MDAwMDAwMjgsIDB4ZmZmZjA3ZmYsCVdSXzEsCQkJMCwJCUVFLAkJMCwJMCB9LAorIHsibWluLm9iIiwJCSJYLFksUSIsCTB4NzgwMDAwMDYsIDB4ZmMyMDAwM2YsCVdSXzF8UkRfMnxSRF8zfEZQX0QsCTAsCQlTQjEsCQlNWCwJMCB9LAorIHsibWluLm9iIiwJCSJELFMsUSIsCTB4NDgwMDAwMDYsIDB4ZmMyMDAwM2YsCVdSXzF8UkRfMnxSRF8zfEZQX0QsCTAsCQlONTQsCQkwLAkwIH0sCitAQCAtMTQ0MSwxMCArMTQ0NywxMyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgLyogbW92ZSBpcyBhdCB0aGUgdG9wIG9mIHRoZSB0YWJsZS4gICovCisgeyJtc2duLnFoIiwJCSJYLFksUSIsCTB4NzgyMDAwMDAsIDB4ZmMyMDAwM2YsCVdSXzF8UkRfMnxSRF8zfEZQX0QsCTAsCQkwLAkJTVgsCTAgfSwKKyB7Im1zZ3NuZCIsCQkidCIsCQkwLCAgICAoaW50KSBNX01TR1NORCwJSU5TTl9NQUNSTywJCTAsCQlYTFIsCQkwLAkwIH0sCisreyJtc2dzbmRzIiwJCSJkLHQiLAkJMHg0YTAwMDAwMSwgMHhmZmUwMDdmZiwJV1JfMXxSRF8yfFJEX0MwfFdSX0MwLAkwLAkJWExQLAkJMCwJMCB9LAorIHsibXNnbGQiLAkJIiIsIAkJMCwgICAgKGludCkgTV9NU0dMRCwJSU5TTl9NQUNSTywJCTAsCQlYTFIsCQkwLAkwIH0sCisgeyJtc2dsZCIsCQkidCIsCQkwLCAgICAoaW50KSBNX01TR0xEX1QsCUlOU05fTUFDUk8sCQkwLAkJWExSLAkJMCwJMCB9LAorLXsibXNnd2FpdCIsCQkiIiwgCQkwLCAgICAoaW50KSBNX01TR1dBSVQsCUlOU05fTUFDUk8sCQkwLAkJWExSLAkJMCwJMCB9LAorLXsibXNnd2FpdCIsCQkidCIsCQkwLCAgICAoaW50KSBNX01TR1dBSVRfVCxJTlNOX01BQ1JPLAkJMCwJCVhMUiwJCTAsCTAgfSwKKyt7Im1zZ2xkcyIsCQkiZCx0IiwJCTB4NGEwMDAwMDIsIDB4ZmZlMDA3ZmYsCVdSXzF8UkRfMnxSRF9DMHxXUl9DMCwJMCwJCVhMUCwJCTAsCTAgfSwKKyt7Im1zZ3dhaXQiLAkJIiIsCQkwLCAgICAoaW50KSBNX01TR1dBSVQsICBJTlNOX01BQ1JPLAkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyt7Im1zZ3dhaXQiLAkJInQiLAkJMCwgICAgKGludCkgTV9NU0dXQUlUX1QsSU5TTl9NQUNSTywJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisreyJtc2dzeW5jIiwJCSIiLAkJMHg0YTAwMDAwNCwgMHhmZmZmZmZmZiwwLAkJCTAsCQlYTFAsCQkwLAkwIH0sCisgeyJtc3ViLmQiLAkJIkQsUixTLFQiLAkweDRjMDAwMDI5LCAweGZjMDAwMDNmLCBXUl8xfFJEXzJ8UkRfM3xSRF80fEZQX0QsIDAsCQlJNF8zMywJCTAsCUkzNyB9LAorIHsibXN1Yi5kIiwJCSJELFMsVCIsCTB4NDYyMDAwMTksIDB4ZmZlMDAwM2YsCVdSXzF8UkRfMnxSRF8zfEZQX0QsCTAsCQlJTDJFLAkJMCwJMCB9LAorIHsibXN1Yi5kIiwJCSJELFMsVCIsCTB4NzIyMDAwMTksIDB4ZmZlMDAwM2YsCVdSXzF8UkRfMnxSRF8zfEZQX0QsCTAsCQlJTDJGLAkJMCwJMCB9LAorQEAgLTE0OTQsNyArMTUwMyw3IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KKyB7Im10bG8iLAkJInMsNyIsCQkweDAwMDAwMDEzLCAweGZjMWZlN2ZmLCBSRF8xfFdSX0xPLAkJMCwJCTAsCQlEMzIsCTAgfSwKKyB7Im10bG8xIiwJCSJzIiwJCTB4NzAwMDAwMTMsIDB4ZmMxZmZmZmYsCVJEXzF8V1JfTE8sCQkwLAkJRUUsCQkwLAkwIH0sCisgeyJtdGxoeCIsCQkicyIsCQkweDAwMDAwMDUzLCAweGZjMWZmZmZmLAlSRF8xfE1PRF9ISUxPLAkJMCwJCTAsCQlTTVQsCTAgfSwKKy17Im10Y3IiLAkJInQscyIsCQkweDcwMDAwMDE5LCAweGZjMDBmZmZmLCBSRF8xfFJEXzIsCQkwLAkJWExSLAkJMCwJMCB9LAorK3sibXRjciIsCQkidCxzIiwJCTB4NzAwMDAwMTksIDB4ZmMwMGZmZmYsIFJEXzEsCQkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyB7Im10bTAiLAkJInMiLAkJMHg3MDAwMDAwOCwgMHhmYzFmZmZmZiwgUkRfMSwJCQkwLAkJSU9DVCwJCTAsCTAgfSwKKyB7Im10bTEiLAkJInMiLAkJMHg3MDAwMDAwYywgMHhmYzFmZmZmZiwgUkRfMSwJCQkwLAkJSU9DVCwJCTAsCTAgfSwKKyB7Im10bTIiLAkJInMiLAkJMHg3MDAwMDAwZCwgMHhmYzFmZmZmZiwgUkRfMSwJCQkwLAkJSU9DVCwJCTAsCTAgfSwKK0BAIC0xOTI0LDkgKzE5MzMsOSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJzdXhjMSIsCQkiUyx0KGIpIiwJMHg0YzAwMDAwZCwgMHhmYzAwMDdmZiwgUkRfMXxSRF8yfFJEXzN8U018RlBfRCwJMCwJCUk1XzMzfE41NSwJMCwJSTM3fSwKKyB7InN3IiwJCQkidCxvKGIpIiwJMHhhYzAwMDAwMCwgMHhmYzAwMDAwMCwJUkRfMXxSRF8zfFNNLAkJMCwJCUkxLAkJMCwJMCB9LAorIHsic3ciLAkJCSJ0LEEoYikiLAkwLCAgICAoaW50KSBNX1NXX0FCLAlJTlNOX01BQ1JPLAkJMCwJCUkxLAkJMCwJMCB9LAorLXsic3dhcHciLAkJInQsYiIsCQkweDcwMDAwMDE0LCAweGZjMDBmZmZmLCBNT0RfMXxSRF8yfExNfFNNLAkwLAkJWExSLAkJMCwJMCB9LAorLXsic3dhcHd1IiwJCSJ0LGIiLAkJMHg3MDAwMDAxNSwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKKy17InN3YXBkIiwJCSJ0LGIiLAkJMHg3MDAwMDAxNiwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKKyt7InN3YXB3IiwJCSJ0LGIiLAkJMHg3MDAwMDAxNCwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisreyJzd2Fwd3UiLAkJInQsYiIsCQkweDcwMDAwMDE1LCAweGZjMDBmZmZmLCBNT0RfMXxSRF8yfFNNLAkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyt7InN3YXBkIiwJCSJ0LGIiLAkJMHg3MDAwMDAxNiwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisgeyJzd2MwIiwJCSJFLG8oYikiLAkweGUwMDAwMDAwLCAweGZjMDAwMDAwLAlSRF8zfFJEX0MwfFNNLAkJMCwJCUkxLAkJMCwJSU9DVHxJT0NUUHxJT0NUMnxJMzcgfSwKKyB7InN3YzAiLAkJIkUsQShiKSIsCTAsICAgIChpbnQpIE1fU1dDMF9BQiwJSU5TTl9NQUNSTywJCTAsCQlJMSwJCTAsCUlPQ1R8SU9DVFB8SU9DVDJ8STM3IH0sCisgeyJzd2MxIiwJCSJULG8oYikiLAkweGU0MDAwMDAwLCAweGZjMDAwMDAwLAlSRF8xfFJEXzN8U018RlBfUywJMCwJCUkxLAkJMCwJMCB9LAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEzLUZpeC1hbi1pbnRlcm5hbC1lcnJvci1pbi1kb19wcmludF90b19tYXBmaWxlLXNlZW4td2kucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEzLUZpeC1hbi1pbnRlcm5hbC1lcnJvci1pbi1kb19wcmludF90b19tYXBmaWxlLXNlZW4td2kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlMDFjMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTMtRml4LWFuLWludGVybmFsLWVycm9yLWluLWRvX3ByaW50X3RvX21hcGZpbGUtc2Vlbi13aS5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDhlOGY3N2VjMmI2MjYyZTdkMTBhZjU0NzAwYzM0MDE3M2Q5NTcyNjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyNyBGZWIgMjAxNSAwOTowNTo0OSArMDAwMAorU3ViamVjdDogW1BBVENIIDEzLzEzXSBGaXggYW4gaW50ZXJuYWwgZXJyb3IgaW4gZG9fcHJpbnRfdG9fbWFwZmlsZSBzZWVuIHdpdGgKKyBnb2xkIG9uIGFybQorCitUaGlzIGlzIGR1ZSB0byBtaXNzaW5nIGltcGxlbWVudGF0aW9uIG9mIGRvX3ByaW50X3RvX21hcGZpbGUgZm9yCithdHJyaWJ1dGVhIHNlY3Rpb24gKEFSTS5hdHRyaWJ1dGVzKSwgaXQgc3RhcnRlZCB0byBzaG93IHVwIGFmdGVyIGZpeAorZm9yIFBSIGdvbGQvMTY5ODAgd2FzIGluc3RhbGxlZAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorLS0tCisgZ29sZC9hdHRyaWJ1dGVzLmggfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nb2xkL2F0dHJpYnV0ZXMuaCBiL2dvbGQvYXR0cmlidXRlcy5oCitpbmRleCAyYWE3YTc4Li4zZDEyNmU2IDEwMDY0NAorLS0tIGEvZ29sZC9hdHRyaWJ1dGVzLmgKKysrKyBiL2dvbGQvYXR0cmlidXRlcy5oCitAQCAtMzg3LDYgKzM4NywxMCBAQCBjbGFzcyBPdXRwdXRfYXR0cmlidXRlc19zZWN0aW9uX2RhdGEgOiBwdWJsaWMgT3V0cHV0X3NlY3Rpb25fZGF0YQorICAgeyB9CisgCisgIHByb3RlY3RlZDoKKysgIC8vIFdyaXRlIHRvIGEgbWFwIGZpbGUuCisrICB2b2lkCisrICBkb19wcmludF90b19tYXBmaWxlKE1hcGZpbGUqIG1hcGZpbGUpIGNvbnN0CisrICB7IG1hcGZpbGUtPnByaW50X291dHB1dF9kYXRhKHRoaXMsIF8oIioqIGF0dHJpYnV0ZXMiKSk7IH0KKyAgIC8vIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBvdXRwdXQgZmlsZS4KKyAgIHZvaWQKKyAgIGRvX3dyaXRlKE91dHB1dF9maWxlKik7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTQtZ29sZC1hcm0tU2tpcC1waWMtY2hlY2stZm9yLVJfQVJNX1JFTDMyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNC1nb2xkLWFybS1Ta2lwLXBpYy1jaGVjay1mb3ItUl9BUk1fUkVMMzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAyNDMwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTQtZ29sZC1hcm0tU2tpcC1waWMtY2hlY2stZm9yLVJfQVJNX1JFTDMyLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0Zyb20gZWJlMjZkODU1NDUyZDA3ZTAxNTJiZDc4ZDQ5NjY0NzVkMmRlMWRlOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDUgTWFyIDIwMTUgMDc6MzA6MzEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gZ29sZC9hcm06IFNraXAgcGljIGNoZWNrIGZvciBSX0FSTV9SRUwzMgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ29sZC9hcm0uY2MgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2dvbGQvYXJtLmNjIGIvZ29sZC9hcm0uY2MKK2luZGV4IDZjNDcyYmIuLmZiODA0MzUgMTAwNjQ0CistLS0gYS9nb2xkL2FybS5jYworKysrIGIvZ29sZC9hcm0uY2MKK0BAIC03ODI5LDYgKzc4MjksNyBAQCBUYXJnZXRfYXJtPGJpZ19lbmRpYW4+OjpTY2FuOjpjaGVja19ub25fcGljKFJlbG9iaiogb2JqZWN0LAorICAgICBjYXNlIGVsZmNwcDo6Ul9BUk1fVExTX0RUUE1PRDMyOgorICAgICBjYXNlIGVsZmNwcDo6Ul9BUk1fVExTX0RUUE9GRjMyOgorICAgICBjYXNlIGVsZmNwcDo6Ul9BUk1fVExTX1RQT0ZGMzI6CisrICAgIGNhc2UgZWxmY3BwOjpSX0FSTV9SRUwzMjoKKyAgICAgICByZXR1cm47CisgCisgICAgIGRlZmF1bHQ6CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTUtRml4LWR5bmFtaWMtbGlzdC1zby10aGF0LXN5bWJvbHMtbm90LWluLXRoZS1saXN0LWFyZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTUtRml4LWR5bmFtaWMtbGlzdC1zby10aGF0LXN5bWJvbHMtbm90LWluLXRoZS1saXN0LWFyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTQ5YzM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNS1GaXgtZHluYW1pYy1saXN0LXNvLXRoYXQtc3ltYm9scy1ub3QtaW4tdGhlLWxpc3QtYXJlLnBhdGNoCkBAIC0wLDAgKzEsMTMxIEBACitGcm9tIGU5YzFiZGFkMjY5YzBjMzM1MmVlYmNjOTQ4MWVkNjUxNDQwMDFiMGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDYXJ5IENvdXRhbnQgPGNjb3V0YW50QGdvb2dsZS5jb20+CitEYXRlOiBNb24sIDE2IEZlYiAyMDE1IDIyOjE1OjEyIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCAtLWR5bmFtaWMtbGlzdCBzbyB0aGF0IHN5bWJvbHMgbm90IGluIHRoZSBsaXN0IGFyZSBzdGlsbAorIGV4cG9ydGVkLgorCitJbiBQUiAxMzU3NywgdGhlIGNvbXBsYWludCB3YXMgdGhhdCAtQnN5bWJvbGljIHdhcyBvdmVycmlkaW5nIHRoZSBiaW5kaW5nCitiZWhhdmlvciBmb3Igc3ltYm9scyBsaXN0ZWQgaW4gdGhlIC0tZHluYW1pYy1saXN0IGJ5IHNldHRpbmcgdGhlIERUX1NZTUJPTElDCit0YWcgaW4gdGhlIGR5bmFtaWMgdGFibGUuIEluIHJlYWRpbmcgdGhlIEdudSBsZCBtYW51YWwsIEkgZGVjaWRlZCB0aGF0CistLWR5bmFtaWMtbGlzdCBzaG91bGQgYmUgbXV0dWFsbHkgZXhjbHVzaXZlIG9mIC1Cc3ltYm9saWMsIGFuZCBtb2RpZmllZAorZ29sZCBzbyB0aGF0IC0tZHluYW1pYy1saXN0IHdvdWxkIHRyZWF0IHN5bWJvbHMgbGlzdGVkIGFzIHByZWVtcHRpYmxlLAorYW5kIGFsbCBvdGhlciBzeW1ib2xzIGFzIGludGVybmFsbHkgYm91bmQuIEkgd2FzIHdyb25nLgorCitQUiAxNjk5MiBzaG93cyB0aGF0IHdpdGggLS1keW5hbWljLWxpc3QgKGFuZCBub3QgLUJzeW1ib2xpYyksIGEgc3ltYm9sCitub3QgbGlzdGVkIGluIHRoZSBkeW5hbWljIGxpc3QgaXMgYmVpbmcgaW50ZXJuYWxseSBib3VuZCB3aXRoaW4gdGhlCitzaGFyZWQgbGlicmFyeSwgYnV0IGJlY2F1c2UgaXQncyBzdGlsbCBpbiB0aGUgZHluYW1pYyBzeW1ib2wgdGFibGUsIHdlCitleHBvc2UgaXQgdG8gYSBDT1BZIHJlbG9jYXRpb24sIGFuZCB0aGluZ3MgZ28gcmVhbGx5IGJhZCBmcm9tIHRoZXJlLgorCisoSSBjYW4gcmVwcm9kdWNlIHRoZSBzYW1lIGZhaWx1cmUsIHNpbXBseSBieSB0dXJuaW5nIG9uIC1Cc3ltYm9saWMtZnVuY3Rpb25zCit3aXRoIHRoZSBHbnUgbGlua2VyLiBFdmVuIHRob3VnaCB0aGUgc3ltYm9sIGlzIGJvdW5kIGludGVybmFsbHksIGl0J3MKK3N0aWxsIGV4cG9ydGVkIHRvIHRoZSBkeW5hbWljIHN5bWJvbCB0YWJsZSwgYW5kIGlzIGV4cG9zZWQgdG8gYSBDT1BZCityZWxvY2F0aW9uLikKKworSSd2ZSBiYWNrZWQgb3V0IHBhcnQgb2YgdGhlIGZpeCBmb3IgUFIgMTM1NzcsIGFuZCAtQnN5bWJvbGljIChvcgorLUJzeW1ib2xpYy1mdW5jdGlvbnMpIGNhbiBub3cgYmUgdXNlZCB3aXRoIC0tZHluYW1pYy1saXN0LCBidXQgaWYgdGhlCit0d28gYXJlIHVzZWQgdG9nZXRoZXIsIHdlIGRvIG5vdCBzZXQgRFRfU1lNQk9MSUMgb3IgREZfU1lNQk9MSUMKKyh0aGlzIG1hdGNoZXMgR251IGxkIGJlaGF2aW9yKS4gV2Ugbm93IHRyZWF0IHN5bWJvbHMgbGlzdGVkIGluIHRoZQorZHluYW1pYyBsaXN0IGFzIHByZW1wdGlibGUsIGJ1dCB3ZSBkbyBub3QgYXV0b21hdGljYWxseSB0cmVhdCBzeW1ib2xzCitub3QgbGlzdGVkIHRoZXJlIGFzIG5vbi1wcmVtcHRpYmxlLgorCitnb2xkLworCVBSIGdvbGQvMTM1NzcKKwlQUiBnb2xkLzE2OTkyCisJKiBsYXlvdXQuY2MgKExheW91dDo6ZmluaXNoX2R5bmFtaWNfc2VjdGlvbik6IERvbid0IHNldCBEVF9TWU1CT0xJQyBvcgorCURGX1NZTUJPTElDIGlmIC0tZHluYW1pYy1saXN0IG9wdGlvbiBpcyB1c2VkLgorCSogb3B0aW9ucy5jYyAoR2VuZXJhbF9vcHRpb25zOjpmaW5hbGl6ZSk6IC0tZHluYW1pYy1saXN0IGlzIG5vdAorCW11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIC1Cc3ltYm9saWMuCisJKiBzeW10YWIuaCAoU3ltYm9sOjppc19wcmVlbXB0aWJsZSk6IERvbid0IGV4Y2x1ZGUgZHluYW1pYyBzeW1ib2xzIG5vdAorCWxpc3RlZCBpbiAtLWR5bmFtaWMtbGlzdC4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbSAoZHluYW1pY19saXN0X2xpYjIuc28pOiBBZGQKKwktQnN5bWJvbGljLWZ1bmN0aW9ucy4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgZ29sZC9DaGFuZ2VMb2cgICAgICAgICAgICAgfCAxNCArKysrKysrKysrKysrKworIGdvbGQvbGF5b3V0LmNjICAgICAgICAgICAgIHwgIDMgKystCisgZ29sZC9vcHRpb25zLmNjICAgICAgICAgICAgfCAgNyAtLS0tLS0tCisgZ29sZC9zeW10YWIuaCAgICAgICAgICAgICAgfCAgNiArKy0tLS0KKyBnb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbSB8ICAyICstCisgZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuaW4gfCAgMiArLQorIDYgZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nb2xkL2xheW91dC5jYyBiL2dvbGQvbGF5b3V0LmNjCitpbmRleCBiY2RhYWM4Li43ODM2NjQwIDEwMDY0NAorLS0tIGEvZ29sZC9sYXlvdXQuY2MKKysrKyBiL2dvbGQvbGF5b3V0LmNjCitAQCAtNDg3Myw3ICs0ODczLDggQEAgTGF5b3V0OjpmaW5pc2hfZHluYW1pY19zZWN0aW9uKGNvbnN0IElucHV0X29iamVjdHMqIGlucHV0X29iamVjdHMsCisgICAgIGZsYWdzIHw9IGVsZmNwcDo6REZfU1RBVElDX1RMUzsKKyAgIGlmIChwYXJhbWV0ZXJzLT5vcHRpb25zKCkub3JpZ2luKCkpCisgICAgIGZsYWdzIHw9IGVsZmNwcDo6REZfT1JJR0lOOworLSAgaWYgKHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5Cc3ltYm9saWMoKSkKKysgIGlmIChwYXJhbWV0ZXJzLT5vcHRpb25zKCkuQnN5bWJvbGljKCkKKysgICAgICAmJiAhcGFyYW1ldGVycy0+b3B0aW9ucygpLmhhdmVfZHluYW1pY19saXN0KCkpCisgICAgIHsKKyAgICAgICBmbGFncyB8PSBlbGZjcHA6OkRGX1NZTUJPTElDOworICAgICAgIC8vIEFkZCBEVF9TWU1CT0xJQyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGxvYWRlcnMuCitkaWZmIC0tZ2l0IGEvZ29sZC9vcHRpb25zLmNjIGIvZ29sZC9vcHRpb25zLmNjCitpbmRleCA3ZWI4ZjI3Li43ZjFmNjllIDEwMDY0NAorLS0tIGEvZ29sZC9vcHRpb25zLmNjCisrKysgYi9nb2xkL29wdGlvbnMuY2MKK0BAIC0xMjAwLDEzICsxMjAwLDYgQEAgR2VuZXJhbF9vcHRpb25zOjpmaW5hbGl6ZSgpCisgICAvLyBpbiB0aGUgcGF0aCwgYXMgYXBwcm9wcmlhdGUuCisgICB0aGlzLT5hZGRfc3lzcm9vdCgpOworIAorLSAgLy8gLS1keW5hbWljLWxpc3Qgb3ZlcnJpZGVzIC1Cc3ltYm9saWMgYW5kIC1Cc3ltYm9saWMtZnVuY3Rpb25zLgorLSAgaWYgKHRoaXMtPmhhdmVfZHluYW1pY19saXN0KCkpCistICAgIHsKKy0gICAgICB0aGlzLT5zZXRfQnN5bWJvbGljKGZhbHNlKTsKKy0gICAgICB0aGlzLT5zZXRfQnN5bWJvbGljX2Z1bmN0aW9ucyhmYWxzZSk7CistICAgIH0KKy0KKyAgIC8vIE5vdyB0aGF0IHdlJ3ZlIG5vcm1hbGl6ZWQgdGhlIG9wdGlvbnMsIGNoZWNrIGZvciBjb250cmFkaWN0b3J5IG9uZXMuCisgICBpZiAodGhpcy0+c2hhcmVkKCkgJiYgdGhpcy0+aXNfc3RhdGljKCkpCisgICAgIGdvbGRfZmF0YWwoXygiLXNoYXJlZCBhbmQgLXN0YXRpYyBhcmUgaW5jb21wYXRpYmxlIikpOworZGlmZiAtLWdpdCBhL2dvbGQvc3ltdGFiLmggYi9nb2xkL3N5bXRhYi5oCitpbmRleCBhYTBjYjY4Li45NDEzMzYwIDEwMDY0NAorLS0tIGEvZ29sZC9zeW10YWIuaAorKysrIGIvZ29sZC9zeW10YWIuaAorQEAgLTYwNCwxMCArNjA0LDggQEAgY2xhc3MgU3ltYm9sCisgICAgIGlmIChwYXJhbWV0ZXJzLT5vcHRpb25zKCkuaW5fZHluYW1pY19saXN0KHRoaXMtPm5hbWUoKSkpCisgICAgICAgcmV0dXJuIHRydWU7CisgCistICAgIC8vIElmIHRoZSB1c2VyIHVzZWQgLUJzeW1ib2xpYyBvciBwcm92aWRlZCBhIC0tZHluYW1pYy1saXN0IHNjcmlwdCwKKy0gICAgLy8gdGhlbiBub3RoaW5nIChlbHNlKSBpcyBwcmVlbXB0aWJsZS4KKy0gICAgaWYgKHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5Cc3ltYm9saWMoKQorLSAgICAgICAgfHwgcGFyYW1ldGVycy0+b3B0aW9ucygpLmhhdmVfZHluYW1pY19saXN0KCkpCisrICAgIC8vIElmIHRoZSB1c2VyIHVzZWQgLUJzeW1ib2xpYywgdGhlbiBub3RoaW5nIChlbHNlKSBpcyBwcmVlbXB0aWJsZS4KKysgICAgaWYgKHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5Cc3ltYm9saWMoKSkKKyAgICAgICByZXR1cm4gZmFsc2U7CisgCisgICAgIC8vIElmIHRoZSB1c2VyIHVzZWQgLUJzeW1ib2xpYy1mdW5jdGlvbnMsIHRoZW4gZnVuY3Rpb25zIGFyZSBub3QKK2RpZmYgLS1naXQgYS9nb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbSBiL2dvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtCitpbmRleCBmNzY3YzIxLi43YjczZjlkIDEwMDY0NAorLS0tIGEvZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KKysrKyBiL2dvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtCitAQCAtMTUxOCw3ICsxNTE4LDcgQEAgZHluYW1pY19saXN0X2xpYjEubzogZHluYW1pY19saXN0X2xpYjEuY2MKKyAJJChDWFhDT01QSUxFKSAtYyAtZnBpYyAtbyAkQCAkPAorIAorIGR5bmFtaWNfbGlzdF9saWIyLnNvOiBnY2N0ZXN0ZGlyL2xkIGR5bmFtaWNfbGlzdF9saWIyLm8gJChzcmNkaXIpL2R5bmFtaWNfbGlzdF8yLnQKKy0JJChDWFhMSU5LKSAtQmdjY3Rlc3RkaXIvIC1zaGFyZWQgLVdsLC0tZHluYW1pYy1saXN0LCQoc3JjZGlyKS9keW5hbWljX2xpc3RfMi50IGR5bmFtaWNfbGlzdF9saWIyLm8KKysJJChDWFhMSU5LKSAtQmdjY3Rlc3RkaXIvIC1zaGFyZWQgLVdsLC1Cc3ltYm9saWMtZnVuY3Rpb25zIC1XbCwtLWR5bmFtaWMtbGlzdCwkKHNyY2RpcikvZHluYW1pY19saXN0XzIudCBkeW5hbWljX2xpc3RfbGliMi5vCisgZHluYW1pY19saXN0X2xpYjIubzogZHluYW1pY19saXN0X2xpYjIuY2MKKyAJJChDWFhDT01QSUxFKSAtYyAtZnBpYyAtbyAkQCAkPAorIAorZGlmZiAtLWdpdCBhL2dvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmluIGIvZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KK2luZGV4IDIxN2U0NzIuLmI0YWUzZmQgMTAwNjQ0CistLS0gYS9nb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgorKysrIGIvZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KK0BAIC01MzE5LDcgKzUzMTksNyBAQCB1bmluc3RhbGwtYW06CisgQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVACSQoQ1hYQ09NUElMRSkgLWMgLWZwaWMgLW8gJEAgJDwKKyAKKyBAR0NDX1RSVUVAQE5BVElWRV9MSU5LRVJfVFJVRUBkeW5hbWljX2xpc3RfbGliMi5zbzogZ2NjdGVzdGRpci9sZCBkeW5hbWljX2xpc3RfbGliMi5vICQoc3JjZGlyKS9keW5hbWljX2xpc3RfMi50CistQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVACSQoQ1hYTElOSykgLUJnY2N0ZXN0ZGlyLyAtc2hhcmVkIC1XbCwtLWR5bmFtaWMtbGlzdCwkKHNyY2RpcikvZHluYW1pY19saXN0XzIudCBkeW5hbWljX2xpc3RfbGliMi5vCisrQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVACSQoQ1hYTElOSykgLUJnY2N0ZXN0ZGlyLyAtc2hhcmVkIC1XbCwtQnN5bWJvbGljLWZ1bmN0aW9ucyAtV2wsLS1keW5hbWljLWxpc3QsJChzcmNkaXIpL2R5bmFtaWNfbGlzdF8yLnQgZHluYW1pY19saXN0X2xpYjIubworIEBHQ0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVFQGR5bmFtaWNfbGlzdF9saWIyLm86IGR5bmFtaWNfbGlzdF9saWIyLmNjCisgQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVACSQoQ1hYQ09NUElMRSkgLWMgLWZwaWMgLW8gJEAgJDwKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvYWRkLXRodW5kZXJ4LXN1cHBvcnQtZm9yLWdhcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL2FkZC10aHVuZGVyeC1zdXBwb3J0LWZvci1nYXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY2ODc1ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL2FkZC10aHVuZGVyeC1zdXBwb3J0LWZvci1nYXMucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorQWRkIHRodW5kZXJ4IHN1cHBvcnQgdG8gZ2FzCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL3NvdXJjZXdhcmUub3JnL21sL2JpbnV0aWxzLzIwMTQtMTAvbXNnMDAxNzAuaHRtbF0KKworU2lnbmVkLW9mZi1ieTogSmFnYWRlZXNoIEtyaXNobmFuamFuYXBwYSA8amtyaXNobmFuamFuYXBwYUBtdmlzdGEuY29tPgorCitBdXRob3I6IEFuZHJldyBQaW5za2kgPGFwaW5za2lAY2F2aXVtLmNvbT4KK0RhdGU6IE1vbiwgMjAgT2N0IDIwMTQgMTE6NDI6NTggLTA3MDAKKworICAgIFRoaXMgcGF0Y2ggYWRkcyAtbWNwdT10aHVuZGVyeCBzdXBwb3J0IHRvIGdhcy4KKworZGlmZiAtTmF1cnAgZ2l0X29yZy9nYXMvY29uZmlnL3RjLWFhcmNoNjQuYyBnaXQvZ2FzL2NvbmZpZy90Yy1hYXJjaDY0LmMKKy0tLSBnaXRfb3JnL2dhcy9jb25maWcvdGMtYWFyY2g2NC5jCTIwMTUtMDktMDcgMDI6MTM6NTEuOTg4OTczNTIzIC0wNzAwCisrKysgZ2l0L2dhcy9jb25maWcvdGMtYWFyY2g2NC5jCTIwMTUtMDktMDcgMDI6MTU6MjEuNzA1OTgxNTQwIC0wNzAwCitAQCAtNzIwNiw2ICs3MjA2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhYXJjaDY0X2NwdV9vcHRpb25fdAorIAkJCQkgQUFSQ0g2NF9GRUFUVVJFX0NSQyksICJDb3J0ZXgtQTU3In0sCisgICB7ImNvcnRleC1hNzIiLCBBQVJDSDY0X0ZFQVRVUkUgKEFBUkNINjRfQVJDSF9WOCwKKyAJCQkJICBBQVJDSDY0X0ZFQVRVUkVfQ1JDKSwgIkNvcnRleC1BNzIifSwKKysgIHsidGh1bmRlcngiLAkJQUFSQ0g2NF9BUkNIX1Y4LCAiQ2F2aXVtIFRodW5kZXJYIn0sCQkJCSAgCisgICB7ImV4eW5vcy1tMSIsIEFBUkNINjRfRkVBVFVSRSAoQUFSQ0g2NF9BUkNIX1Y4LAorIAkJCQkgQUFSQ0g2NF9GRUFUVVJFX0NSQyB8IEFBUkNINjRfRkVBVFVSRV9DUllQVE8pLAorIAkJCQkgIlNhbXN1bmcgRXh5bm9zIE0xIn0sCitkaWZmIC1OYXVycCBnaXRfb3JnL2dhcy9kb2MvYy1hYXJjaDY0LnRleGkgZ2l0L2dhcy9kb2MvYy1hYXJjaDY0LnRleGkKKy0tLSBnaXRfb3JnL2dhcy9kb2MvYy1hYXJjaDY0LnRleGkJMjAxNS0wOS0wNyAwMjoxMzo1MS45Njk5NzM1MjIgLTA3MDAKKysrKyBnaXQvZ2FzL2RvYy9jLWFhcmNoNjQudGV4aQkyMDE1LTA5LTA3IDAyOjE2OjAzLjM2NDk4NTI2MiAtMDcwMAorQEAgLTU4LDYgKzU4LDcgQEAgb24gdGhlIHRhcmdldCBwcm9jZXNzb3IuICBUaGUgZm9sbG93aW5nCisgQGNvZGV7Y29ydGV4LWE1M30sCisgQGNvZGV7Y29ydGV4LWE1N30sCisgQGNvZGV7Y29ydGV4LWE3Mn0sCisrQGNvZGV7dGh1bmRlcnh9LAorIEBjb2Rle2V4eW5vcy1tMX0sCisgQGNvZGV7eGdlbmUxfSwKKyBhbmQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL2JpbnV0aWxzLW9jdGVvbjMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9iaW51dGlscy1vY3Rlb24zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMDhjMGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9iaW51dGlscy1vY3Rlb24zLnBhdGNoCkBAIC0wLDAgKzEsMjcyIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2h0dHBzOi8vc291cmNld2FyZS5vcmcvZ2l0L2dpdHdlYi5jZ2k/cD1iaW51dGlscy1nZGIuZ2l0O2E9Y29tbWl0O2g9MmM2Mjk4NTY1OWRhMjFhM2ZlMTYwNjJkMjExYTcxNThmNzlhZDJlOQorCitTaWduZWQtb2ZmLUJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KKworSW5kZXg6IGdpdC9iZmQvYXJjaHVyZXMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2JmZC9hcmNodXJlcy5jCisrKysgZ2l0L2JmZC9hcmNodXJlcy5jCitAQCAtMTc5LDYgKzE3OSw3IEBAIERFU0NSSVBUSU9OCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24JCTY1MDEKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbnAJCTY2MDEKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjIJCTY1MDIKKysuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjMJCTY1MDMKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX3hsciAgICAgICAgICAgICAgODg3NjgyICAgeyogZGVjaW1hbCAnWExSJyAgKn0KKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX3hscCAgICAgICAgICAgICAgODg3NjgwICAgeyogZGVjaW1hbCAnWExQJyAgKn0KKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzIgICAgICAgICAgICAgMzIKK0luZGV4OiBnaXQvYmZkL2JmZC1pbjIuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2JmZC9iZmQtaW4yLmgKKysrKyBnaXQvYmZkL2JmZC1pbjIuaAorQEAgLTE5NjksNiArMTk2OSw3IEBAIGVudW0gYmZkX2FyY2hpdGVjdHVyZQorICNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24gICAgICAgICAgIDY1MDEKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9ucCAgICAgICAgICA2NjAxCisgI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjIgICAgICAgICAgNjUwMgorKyNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24zICAgICAgICAgIDY1MDMKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNfeGxyICAgICAgICAgICAgICA4ODc2ODIgICAvKiBkZWNpbWFsICdYTFInICAqLworICNkZWZpbmUgYmZkX21hY2hfbWlwc194bHAgICAgICAgICAgICAgIDg4NzY4MCAgIC8qIGRlY2ltYWwgJ1hMUCcgICovCisgI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzIgICAgICAgICAgICAgMzIKK0luZGV4OiBnaXQvYmZkL2NwdS1taXBzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9iZmQvY3B1LW1pcHMuYworKysrIGdpdC9iZmQvY3B1LW1pcHMuYworQEAgLTEwMiw2ICsxMDIsNyBAQCBlbnVtCisgICBJX21pcHNvY3Rlb24sCisgICBJX21pcHNvY3Rlb25wLAorICAgSV9taXBzb2N0ZW9uMiwKKysgIElfbWlwc29jdGVvbjMsCisgICBJX3hsciwKKyAgIElfbWljcm9taXBzLAorICAgSV94bHAKK0BAIC0xNTMsNiArMTU0LDcgQEAgc3RhdGljIGNvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSBhcmNoX2luZgorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX29jdGVvbiwibWlwczpvY3Rlb24iLCAgRkFMU0UsIE5OKElfbWlwc29jdGVvbikpLAorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX29jdGVvbnAsIm1pcHM6b2N0ZW9uKyIsICBGQUxTRSwgTk4oSV9taXBzb2N0ZW9ucCkpLAorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX29jdGVvbjIsIm1pcHM6b2N0ZW9uMiIsICBGQUxTRSwgTk4oSV9taXBzb2N0ZW9uMikpLAorKyAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX29jdGVvbjMsIm1pcHM6b2N0ZW9uMyIsICBGQUxTRSwgTk4oSV9taXBzb2N0ZW9uMykpLAorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX3hsciwgIm1pcHM6eGxyIiwgICAgICAgRkFMU0UsIE5OKElfeGxyKSksCisgICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfbWljcm9taXBzLCJtaXBzOm1pY3JvbWlwcyIsRkFMU0UsTk4oSV9taWNyb21pcHMpKSwKKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc194bHAsICJtaXBzOnhscCIsICAgICAgRkFMU0UsIDApCitJbmRleDogZ2l0L2JmZC9lbGZ4eC1taXBzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9iZmQvZWxmeHgtbWlwcy5jCisrKysgZ2l0L2JmZC9lbGZ4eC1taXBzLmMKK0BAIC02NjA0LDYgKzY2MDQsOSBAQCBfYmZkX2VsZl9taXBzX21hY2ggKGZsYWd3b3JkIGZsYWdzKQorICAgICBjYXNlIEVfTUlQU19NQUNIX0xTM0E6CisgICAgICAgcmV0dXJuIGJmZF9tYWNoX21pcHNfbG9vbmdzb25fM2E7CisgCisrICAgIGNhc2UgRV9NSVBTX01BQ0hfT0NURU9OMzoKKysgICAgICByZXR1cm4gYmZkX21hY2hfbWlwc19vY3Rlb24zOworKworICAgICBjYXNlIEVfTUlQU19NQUNIX09DVEVPTjI6CisgICAgICAgcmV0dXJuIGJmZF9tYWNoX21pcHNfb2N0ZW9uMjsKKyAKK0BAIC0xMTg3OCw2ICsxMTg4MSwxMCBAQCBtaXBzX3NldF9pc2FfZmxhZ3MgKGJmZCAqYWJmZCkKKyAgICAgICB2YWwgPSBFX01JUFNfQVJDSF82NFIyIHwgRV9NSVBTX01BQ0hfT0NURU9OOworICAgICAgIGJyZWFrOworIAorKyAgICBjYXNlIGJmZF9tYWNoX21pcHNfb2N0ZW9uMzoKKysgICAgICB2YWwgPSBFX01JUFNfQVJDSF82NFIyIHwgRV9NSVBTX01BQ0hfT0NURU9OMzsKKysgICAgICBicmVhazsKKysKKyAgICAgY2FzZSBiZmRfbWFjaF9taXBzX3hscjoKKyAgICAgICB2YWwgPSBFX01JUFNfQVJDSF82NCB8IEVfTUlQU19NQUNIX1hMUjsKKyAgICAgICBicmVhazsKK0BAIC0xNDc3Myw2ICsxNDc4MCw3IEBAIHN0cnVjdCBtaXBzX21hY2hfZXh0ZW5zaW9uCisgc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBzX21hY2hfZXh0ZW5zaW9uIG1pcHNfbWFjaF9leHRlbnNpb25zW10gPQorIHsKKyAgIC8qIE1JUFM2NHIyIGV4dGVuc2lvbnMuICAqLworKyAgeyBiZmRfbWFjaF9taXBzX29jdGVvbjMsIGJmZF9tYWNoX21pcHNfb2N0ZW9uMiB9LAorICAgeyBiZmRfbWFjaF9taXBzX29jdGVvbjIsIGJmZF9tYWNoX21pcHNfb2N0ZW9ucCB9LAorICAgeyBiZmRfbWFjaF9taXBzX29jdGVvbnAsIGJmZF9tYWNoX21pcHNfb2N0ZW9uIH0sCisgICB7IGJmZF9tYWNoX21pcHNfb2N0ZW9uLCBiZmRfbWFjaF9taXBzaXNhNjRyMiB9LAorSW5kZXg6IGdpdC9nYXMvY29uZmlnL3RjLW1pcHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2dhcy9jb25maWcvdGMtbWlwcy5jCisrKysgZ2l0L2dhcy9jb25maWcvdGMtbWlwcy5jCitAQCAtMzA2LDcgKzMwNiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmlsZV9hc2VfZXhwbGljaXQ7CisgdW5zaWduZWQgbG9uZyBtaXBzX2dwcm1hc2s7CisgdW5zaWduZWQgbG9uZyBtaXBzX2Nwcm1hc2tbNF07CisgCistLyogVHJ1ZSBpZiBhbnkgTUlQUzE2IGNvZGUgd2FzIHByb2R1Y2VkLiAgKi8KKysvKiAyVHJ1ZSBpZiBhbnkgTUlQUzE2IGNvZGUgd2FzIHByb2R1Y2VkLiAgKi8KKyBzdGF0aWMgaW50IGZpbGVfYXNlX21pcHMxNjsKKyAKKyAjZGVmaW5lIElTQV9TVVBQT1JUU19NSVBTMTZFIChtaXBzX29wdHMuaXNhID09IElTQV9NSVBTMzIJCVwKK0BAIC01MTAsNyArNTEwLDggQEAgc3RhdGljIGludCBtaXBzXzMyYml0bW9kZSA9IDA7CisgI2RlZmluZSBDUFVfSEFTX1JPUihDUFUpCUNQVV9IQVNfRFJPUiAoQ1BVKQorIAorIC8qIFRydWUgaWYgQ1BVIGlzIGluIHRoZSBPY3Rlb24gZmFtaWx5ICovCistI2RlZmluZSBDUFVfSVNfT0NURU9OKENQVSkgKChDUFUpID09IENQVV9PQ1RFT04gfHwgKENQVSkgPT0gQ1BVX09DVEVPTlAgfHwgKENQVSkgPT0gQ1BVX09DVEVPTjIpCisrI2RlZmluZSBDUFVfSVNfT0NURU9OKENQVSkgKChDUFUpID09IENQVV9PQ1RFT04gfHwgKENQVSkgPT0gQ1BVX09DVEVPTlAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChDUFUpID09IENQVV9PQ1RFT04yIHx8IChDUFUpID09IENQVV9PQ1RFT04zKQorIAorIC8qIFRydWUgaWYgQ1BVIGhhcyBzZXEvc25lIGFuZCBzZXFpL3NuZWkgaW5zdHJ1Y3Rpb25zLiAgKi8KKyAjZGVmaW5lIENQVV9IQVNfU0VRKENQVSkJKENQVV9JU19PQ1RFT04gKENQVSkpCitAQCAtMTg2NzcsNiArMTg2NzgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1pcHNfY3B1X2luZm8gbWlwc19jCisgICB7ICJvY3Rlb24iLAkgICAgICAwLCAwLAkJCUlTQV9NSVBTNjRSMiwgQ1BVX09DVEVPTiB9LAorICAgeyAib2N0ZW9uKyIsCSAgICAgIDAsIDAsCQkJSVNBX01JUFM2NFIyLCBDUFVfT0NURU9OUCB9LAorICAgeyAib2N0ZW9uMiIsCSAgICAgIDAsIDAsCQkJSVNBX01JUFM2NFIyLCBDUFVfT0NURU9OMiB9LAorKyAgeyAib2N0ZW9uMyIsICAgICAgICAwLCBBU0VfVklSVCB8IEFTRV9WSVJUNjQsIElTQV9NSVBTNjRSMiwgQ1BVX09DVEVPTjMgfSwKKyAKKyAgIC8qIFJNSSBYbHIgKi8KKyAgIHsgInhsciIsCSAgICAgIDAsIDAsCQkJSVNBX01JUFM2NCwgICBDUFVfWExSIH0sCitJbmRleDogZ2l0L2dhcy9kb2MvYy1taXBzLnRleGkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9nYXMvZG9jL2MtbWlwcy50ZXhpCisrKysgZ2l0L2dhcy9kb2MvYy1taXBzLnRleGkKK0BAIC0zODIsNiArMzgyLDcgQEAgbG9vbmdzb24zYSwKKyBvY3Rlb24sCisgb2N0ZW9uKywKKyBvY3Rlb24yLAorK29jdGVvbjMsCisgeGxyLAorIHhscAorIEBlbmQgcXVvdGF0aW9uCitJbmRleDogZ2l0L2dhcy90ZXN0c3VpdGUvZ2FzL21pcHMvbWlwcy5leHAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9nYXMvdGVzdHN1aXRlL2dhcy9taXBzL21pcHMuZXhwCisrKysgZ2l0L2dhcy90ZXN0c3VpdGUvZ2FzL21pcHMvbWlwcy5leHAKK0BAIC0xMTAyLDYgKzExMDIsNyBAQCBpZiB7IFtpc3RhcmdldCBtaXBzKi0qLXZ4d29ya3MqXSB9IHsKKyAgICAgcnVuX2xpc3RfdGVzdF9hcmNoZXMgIm9jdGVvbi1pbGwiCVttaXBzX2FyY2hfbGlzdF9tYXRjaGluZyBvY3Rlb25dCisgICAgIHJ1bl9kdW1wX3Rlc3RfYXJjaGVzICJvY3Rlb24tcHJlZiIJW21pcHNfYXJjaF9saXN0X21hdGNoaW5nIG9jdGVvbl0KKyAgICAgcnVuX2R1bXBfdGVzdF9hcmNoZXMgIm9jdGVvbjIiCVttaXBzX2FyY2hfbGlzdF9tYXRjaGluZyBvY3Rlb24yXQorKyAgICBydW5fZHVtcF90ZXN0X2FyY2hlcyAib2N0ZW9uMyIJW21pcHNfYXJjaF9saXN0X21hdGNoaW5nIG9jdGVvbjNdCisgCisgICAgIHJ1bl9kdW1wX3Rlc3QgInNtYXJ0bWlwcyIKKyAgICAgcnVuX2R1bXBfdGVzdF9hcmNoZXMgIm1pcHMzMi1kc3AiCVttaXBzX2FyY2hfbGlzdF9tYXRjaGluZyBtaXBzMzJyMiBcCitJbmRleDogZ2l0L2dhcy90ZXN0c3VpdGUvZ2FzL21pcHMvb2N0ZW9uMy5kCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgZ2l0L2dhcy90ZXN0c3VpdGUvZ2FzL21pcHMvb2N0ZW9uMy5kCitAQCAtMCwwICsxLDIwIEBACisrI29iamR1bXA6IC1kIC1yIC0tc2hvdy1yYXctaW5zbgorKyNuYW1lOiBNSVBTIG9jdGVvbjMgaW5zdHJ1Y3Rpb25zCisrCisrLio6ICtmaWxlIGZvcm1hdCAuKm1pcHMuKgorKworK0Rpc2Fzc2VtYmx5IG9mIHNlY3Rpb24gLnRleHQ6CisrCisrWzAtOWEtZl0rIDxmb28+OgorKy4qOiAgICA3MWVjMDAwOCAgICAgICAgbXRtMCAgICB0Myx0MAorKy4qOiAgICA3MWE0MDAwOCAgICAgICAgbXRtMCAgICB0MSxhMAorKy4qOiAgICA3MDgzMDAwYyAgICAgICAgbXRtMSAgICBhMCx2MQorKy4qOiAgICA3MGUxMDAwYyAgICAgICAgbXRtMSAgICBhMyxhdAorKy4qOiAgICA3MDIyMDAwZCAgICAgICAgbXRtMiAgICBhdCx2MAorKy4qOiAgICA3MDgzMDAwYyAgICAgICAgbXRtMSAgICBhMCx2MQorKy4qOiAgICA3MGEyMDAwOSAgICAgICAgbXRwMCAgICBhMSx2MAorKy4qOiAgICA3MGM0MDAwOSAgICAgICAgbXRwMCAgICBhMixhMAorKy4qOiAgICA3MDgzMDAwYSAgICAgICAgbXRwMSAgICBhMCx2MQorKy4qOiAgICA3MGUxMDAwYSAgICAgICAgbXRwMSAgICBhMyxhdAorKy4qOiAgICA3MDIyMDAwYiAgICAgICAgbXRwMiAgICBhdCx2MAorKy4qOiAgICA3MDgzMDAwYSAgICAgICAgbXRwMSAgICBhMCx2MQorSW5kZXg6IGdpdC9nYXMvdGVzdHN1aXRlL2dhcy9taXBzL29jdGVvbjMucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGdpdC9nYXMvdGVzdHN1aXRlL2dhcy9taXBzL29jdGVvbjMucworQEAgLTAsMCArMSwyMiBAQAorKysgICAgICAgLnRleHQKKysgICAgICAgLnNldCBub3Jlb3JkZXIKKysgICAgICAgLnNldCBub2F0CisrCisrZm9vOgorKyAgICAgICAgbXRtMCAkMTUsJDEyCisrICAgICAgICBtdG0wICQxMywkNAorKworKyAgICAgICAgbXRtMSAkNCwkMworKyAgICAgICAgbXRtMSAkNywkMQorKworKyAgICAgICAgbXRtMiAkMSwkMgorKyAgICAgICAgbXRtMSAkNCwkMworKworKyAgICAgICAgbXRwMCAkNSwkMgorKyAgICAgICAgbXRwMCAkNiwkNAorKworKyAgICAgICAgbXRwMSAkNCwkMworKyAgICAgICAgbXRwMSAkNywkMQorKworKyAgICAgICAgbXRwMiAkMSwkMgorKyAgICAgICAgbXRwMSAkNCwkMworSW5kZXg6IGdpdC9pbmNsdWRlL29wY29kZS9taXBzLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9pbmNsdWRlL29wY29kZS9taXBzLmgKKysrKyBnaXQvaW5jbHVkZS9vcGNvZGUvbWlwcy5oCitAQCAtMTE5Niw2ICsxMTk2LDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtaXBzX2lzYV90YWJsZQorICNkZWZpbmUgSU5TTl9PQ1RFT04JCSAgMHgwMDAwMDgwMAorICNkZWZpbmUgSU5TTl9PQ1RFT05QCQkgIDB4MDAwMDAyMDAKKyAjZGVmaW5lIElOU05fT0NURU9OMgkJICAweDAwMDAwMTAwCisrI2RlZmluZSBJTlNOX09DVEVPTjMJCSAgMHgwMDAwMDA0MAorIAorIC8qIE1JUFMgUjU5MDAgaW5zdHJ1Y3Rpb24gKi8KKyAjZGVmaW5lIElOU05fNTkwMCAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorQEAgLTEzMjUsNiArMTMyNiw3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWlwc19pc2FfdGFibGUKKyAjZGVmaW5lIENQVV9PQ1RFT04JNjUwMQorICNkZWZpbmUgQ1BVX09DVEVPTlAJNjYwMQorICNkZWZpbmUgQ1BVX09DVEVPTjIJNjUwMgorKyNkZWZpbmUgQ1BVX09DVEVPTjMJNjUwMworICNkZWZpbmUgQ1BVX1hMUiAgICAgCTg4NzY4MiAgIAkvKiBkZWNpbWFsICdYTFInICAgKi8KKyAjZGVmaW5lIENQVV9YTFAgICAgICAgICA4ODc2ODAgICAgICAvKiBkZWNpbWFsICdYTFAnICAgKi8KKyAKK0BAIC0xMzkxLDYgKzEzOTMsOSBAQCBjcHVfaXNfbWVtYmVyIChpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbWFzCisgICAgIGNhc2UgQ1BVX09DVEVPTjI6CisgICAgICAgcmV0dXJuIChtYXNrICYgSU5TTl9PQ1RFT04yKSAhPSAwOworIAorKyAgICBjYXNlIENQVV9PQ1RFT04zOgorKyAgICAgIHJldHVybiAobWFzayAmIElOU05fT0NURU9OMykgIT0gMDsKKysKKyAgICAgY2FzZSBDUFVfWExSOgorICAgICAgIHJldHVybiAobWFzayAmIElOU05fWExSKSAhPSAwOworIAorSW5kZXg6IGdpdC9vcGNvZGVzL21pcHMtZGlzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9vcGNvZGVzL21pcHMtZGlzLmMKKysrKyBnaXQvb3Bjb2Rlcy9taXBzLWRpcy5jCitAQCAtNjQ5LDYgKzY0OSwxMSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19hcmNoX2Nob2ljZSBtaXBzX2FyY2hfCisgICAgIElTQV9NSVBTNjRSMiB8IElOU05fT0NURU9OMiwgMCwgbWlwc19jcDBfbmFtZXNfbnVtZXJpYywKKyAgICAgTlVMTCwgMCwgbWlwc19jcDFfbmFtZXNfbWlwczMyNjQsIG1pcHNfaHdyX25hbWVzX251bWVyaWMgfSwKKyAKKysgIHsgIm9jdGVvbjMiLCAgIDEsIGJmZF9tYWNoX21pcHNfb2N0ZW9uMywgQ1BVX09DVEVPTjMsCisrICAgIElTQV9NSVBTNjRSMiB8IElOU05fT0NURU9OMywgQVNFX1ZJUlQgfCBBU0VfVklSVDY0LAorKyAgICBtaXBzX2NwMF9uYW1lc19udW1lcmljLAorKyAgICBOVUxMLCAwLCBtaXBzX2h3cl9uYW1lc19udW1lcmljIH0sCisrCisgICB7ICJ4bHIiLCAxLCBiZmRfbWFjaF9taXBzX3hsciwgQ1BVX1hMUiwKKyAgICAgSVNBX01JUFM2NCB8IElOU05fWExSLCAwLAorICAgICBtaXBzX2NwMF9uYW1lc194bHIsCitJbmRleDogZ2l0L29wY29kZXMvbWlwcy1vcGMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL29wY29kZXMvbWlwcy1vcGMuYworKysrIGdpdC9vcGNvZGVzL21pcHMtb3BjLmMKK0BAIC0zMTYsOSArMzE2LDEwIEBAIGRlY29kZV9taXBzX29wZXJhbmQgKGNvbnN0IGNoYXIgKnApCisgI2RlZmluZSBONQkoSU5TTl81NDAwIHwgSU5TTl81NTAwKQorICNkZWZpbmUgTjU0CUlOU05fNTQwMAorICNkZWZpbmUgTjU1CUlOU05fNTUwMAorLSNkZWZpbmUgSU9DVAkoSU5TTl9PQ1RFT04gfCBJTlNOX09DVEVPTlAgfCBJTlNOX09DVEVPTjIpCistI2RlZmluZSBJT0NUUAkoSU5TTl9PQ1RFT05QIHwgSU5TTl9PQ1RFT04yKQorLSNkZWZpbmUgSU9DVDIJSU5TTl9PQ1RFT04yCisrI2RlZmluZSBJT0NUCShJTlNOX09DVEVPTiB8IElOU05fT0NURU9OUCB8IElOU05fT0NURU9OMiB8IElOU05fT0NURU9OMykKKysjZGVmaW5lIElPQ1RQCShJTlNOX09DVEVPTlAgfCBJTlNOX09DVEVPTjIgfCBJTlNOX09DVEVPTjMpCisrI2RlZmluZSBJT0NUMgkoSU5TTl9PQ1RFT04yIHwgSU5TTl9PQ1RFT04zKQorKyNkZWZpbmUgSU9DVDMgIElOU05fT0NURU9OMworICNkZWZpbmUgWExSCUlOU05fWExSCisgI2RlZmluZSBYTFAJSU5TTl9YTFAKKyAjZGVmaW5lIElWSVJUCUFTRV9WSVJUCitAQCAtMTUwNSwxMSArMTUwNiwxNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wCisgeyJtdGxoeCIsCQkicyIsCQkweDAwMDAwMDUzLCAweGZjMWZmZmZmLAlSRF8xfE1PRF9ISUxPLAkJMCwJCTAsCQlTTVQsCTAgfSwKKyB7Im10Y3IiLAkJInQscyIsCQkweDcwMDAwMDE5LCAweGZjMDBmZmZmLCBSRF8xLAkJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisgeyJtdG0wIiwJCSJzIiwJCTB4NzAwMDAwMDgsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisreyJtdG0wIiwgICAgICAgICAgICAgICAgInMsdCIsICAgICAgICAgIDB4NzAwMDAwMDgsIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBJT0NUMywgICAgICAgICAgMCwgICAgICAwIH0sCisgeyJtdG0xIiwJCSJzIiwJCTB4NzAwMDAwMGMsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisreyJtdG0xIiwgICAgICAgICAgICAgICAgInMsdCIsICAgICAgICAgIDB4NzAwMDAwMGMsIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBJT0NUMywgICAgICAgICAgMCwgICAgICAwIH0sCisgeyJtdG0yIiwJCSJzIiwJCTB4NzAwMDAwMGQsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisreyJtdG0yIiwgICAgICAgICAgICAgICAgInMsdCIsICAgICAgICAgIDB4NzAwMDAwMGQsIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBJT0NUMywgICAgICAgICAgMCwgICAgICAwIH0sCisgeyJtdHAwIiwJCSJzIiwJCTB4NzAwMDAwMDksIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisreyJtdHAwIiwgICAgICAgICAgICAgICAgInMsdCIsICAgICAgICAgIDB4NzAwMDAwMDksIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBJT0NUMywgICAgICAgICAgMCwgICAgICAwIH0sCisgeyJtdHAxIiwJCSJzIiwJCTB4NzAwMDAwMGEsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisreyJtdHAxIiwgICAgICAgICAgICAgICAgInMsdCIsICAgICAgICAgIDB4NzAwMDAwMGEsIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBJT0NUMywgICAgICAgICAgMCwgICAgICAwIH0sCisgeyJtdHAyIiwJCSJzIiwJCTB4NzAwMDAwMGIsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisreyJtdHAyIiwgICAgICAgICAgICAgICAgInMsdCIsICAgICAgICAgIDB4NzAwMDAwMGIsIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBJT0NUMywgICAgICAgICAgMCwgICAgICAwIH0sCisgeyJtdHNhIiwJCSJzIiwJCTB4MDAwMDAwMjksIDB4ZmMxZmZmZmYsCVJEXzEsCQkJMCwJCUVFLAkJMCwJMCB9LAorIHsibXRzYWIiLAkJInMsaiIsCQkweDA0MTgwMDAwLCAweGZjMWYwMDAwLAlSRF8xLAkJCTAsCQlFRSwJCTAsCTAgfSwKKyB7Im10c2FoIiwJCSJzLGoiLAkJMHgwNDE5MDAwMCwgMHhmYzFmMDAwMCwJUkRfMSwJCQkwLAkJRUUsCQkwLAkwIH0sCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlsc18yLjI1LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlsc18yLjI1LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0MjY3MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzXzIuMjUuMS5iYgpAQCAtMCwwICsxLDM5IEBACityZXF1aXJlIGJpbnV0aWxzLmluYworcmVxdWlyZSBiaW51dGlscy0ke1BWfS5pbmMKKworREVQRU5EUyArPSAiZmxleCBiaXNvbiB6bGliIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1zeXNyb290PS8gXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGwtbGliYmZkIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1pbnN0YWxsLWxpYmliZXJ0eSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAgICAgICAgICAgICAiCisKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS1lbmFibGUtdGFyZ2V0cz1hbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS02NC1iaXQtYmZkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC1saWJpYmVydHkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1pbnN0YWxsLWxpYmJmZCIKKworZG9faW5zdGFsbF9jbGFzcy1uYXRpdmUgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIEluc3RhbGwgdGhlIGxpYmliZXJ0eSBoZWFkZXIKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9CisJaW5zdGFsbCAtbSA2NDQgJHtTfS9pbmNsdWRlL2Fuc2lkZWNsLmggJHtEfSR7aW5jbHVkZWRpcn0KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2luY2x1ZGUvbGliaWJlcnR5LmggJHtEfSR7aW5jbHVkZWRpcn0KKworCSMgV2Ugb25seSB3YW50IGxpYmliZXJ0eSwgbGliYmZkIGFuZCBsaWJvcGNvZGVzCisJcm0gLXJmICR7RH0ke2JpbmRpcn0KKwlybSAtcmYgJHtEfSR7cHJlZml4fS8ke1RBUkdFVF9TWVN9CisJcm0gLXJmICR7RH0ke3ByZWZpeH0vbGliL2xkc2NyaXB0cworCXJtIC1yZiAke0R9JHtwcmVmaXh9L3NoYXJlL2luZm8KKwlybSAtcmYgJHtEfSR7cHJlZml4fS9zaGFyZS9sb2NhbGUKKwlybSAtcmYgJHtEfSR7cHJlZml4fS9zaGFyZS9tYW4KKwlybWRpciAke0R9JHtwcmVmaXh9L3NoYXJlIHx8IDoKKwlybWRpciAke0R9LyR7bGliZGlyfS9nY2MtbGliIHx8IDoKKwlybWRpciAke0R9LyR7bGliZGlyfTY0L2djYy1saWIgfHwgOgorCXJtZGlyICR7RH0vJHtsaWJkaXJ9IHx8IDoKKwlybWRpciAke0R9LyR7bGliZGlyfTY0IHx8IDoKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExYTRiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2dudWxpYi5tayBiL2xpYi9nbnVsaWIubWsKK2luZGV4IGUxZDc0ZGIuLmMwZTkyZGQgMTAwNjQ0CistLS0gYS9saWIvZ251bGliLm1rCisrKysgYi9saWIvZ251bGliLm1rCitAQCAtMTg4Miw3ICsxODgyLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vMDAwMS1zcmMtbG9jYWwubWstZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vMDAwMS1zcmMtbG9jYWwubWstZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NDNhNTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi8wMDAxLXNyYy1sb2NhbC5tay1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSAzYTE1ZjdjOWFjZTZjMDI5NGVkYzMxM2ExODQ4Y2FmY2MzMWIyYTkyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDI0IEFwciAyMDE1IDAwOjM4OjMyIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHNyYy9sb2NhbC5tazogZml4IHBhcmFsbGVsIGlzc3VlCisKK0ZpeGVkOgorcm0gLWYgc3JjL3lhY2Mgc3JjL3lhY2MudG1wCitlY2hvICcjISAvYmluL3NoJyA+c3JjL3lhY2MudG1wCisvYmluL2Jhc2g6IHNyYy95YWNjLnRtcDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorTWFrZWZpbGU6NjY3MDogcmVjaXBlIGZvciB0YXJnZXQgJ3NyYy95YWNjJyBmYWlsZWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2xvY2FsLm1rIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zcmMvbG9jYWwubWsgYi9zcmMvbG9jYWwubWsKK2luZGV4IDU3M2FkMDAuLjI4YmZhZTQgMTAwNjQ0CistLS0gYS9zcmMvbG9jYWwubWsKKysrKyBiL3NyYy9sb2NhbC5taworQEAgLTExOSw2ICsxMTksNyBAQCBNT1NUTFlDTEVBTkZJTEVTICs9IHNyYy95YWNjCisgCisgc3JjL3lhY2M6CisgCSQoQU1fVl9HRU4pcm0gLWYgJEAgJEAudG1wCisrCSQoQU1fVl9hdCkkKE1LRElSX1ApIHNyYworIAkkKEFNX1ZfYXQpZWNobyAnIyEgL2Jpbi9zaCcgPiRALnRtcAorIAkkKEFNX1ZfYXQpZWNobyAiZXhlYyAnJChiaW5kaXIpL2Jpc29uJyAteSAiJyIkJEAiJyA+PiRALnRtcAorIAkkKEFNX1ZfYXQpY2htb2QgYSt4ICRALnRtcAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uL2Jpc29uLTIuM19tNC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uL2Jpc29uLTIuM19tNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDhjZTFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vYmlzb24tMi4zX200LnBhdGNoCkBAIC0wLDAgKzEsNTkxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKworLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2ludHR5cGVzLXByaS5tNAorQEAgLTAsMCArMSwzMiBAQAorKyMgaW50dHlwZXMtcHJpLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTEuNCkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrIyBEZWZpbmUgUFJJX01BQ1JPU19CUk9LRU4gaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZGVmaW5lcyB0aGUgUFJJKgorKyMgbWFjcm9zIHRvIG5vbi1zdHJpbmcgdmFsdWVzLiAgVGhpcyBpcyB0aGUgY2FzZSBvbiBBSVggNC4zLjMuCisrCisrQUNfREVGVU4oW2d0X0lOVFRZUEVTX1BSSV0sCisrWworKyAgQUNfUkVRVUlSRShbZ3RfSEVBREVSX0lOVFRZUEVTX0hdKQorKyAgaWYgdGVzdCAkZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKysgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGludHR5cGVzLmggUFJJeE5OIG1hY3JvcyBhcmUgYnJva2VuXSwKKysgICAgICBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuLAorKyAgICAgIFsKKysgICAgICAgIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysjaWZkZWYgUFJJZDMyCisrY2hhciAqcCA9IFBSSWQzMjsKKysjZW5kaWYKKytdLCBbXSwgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbj1ubywgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbj15ZXMpCisrICAgICAgXSkKKysgIGZpCisrICBpZiB0ZXN0ICIkZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbiIgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKFBSSV9NQUNST1NfQlJPS0VOLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZGVmaW5lcyB1bnVzYWJsZSBQUkkqIG1hY3Jvcy5dKQorKyAgZmkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2xjbWVzc2FnZS5tNAorQEAgLTAsMCArMSwzMiBAQAorKyMgbGNtZXNzYWdlLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTEuMykKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKytkbmwKKytkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKytkbmwgZnVuY3Rpb25hbGl0eS4KKytkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKytkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorKworK2RubCBBdXRob3JzOgorK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LgorKworKyMgQ2hlY2sgd2hldGhlciBMQ19NRVNTQUdFUyBpcyBhdmFpbGFibGUgaW4gPGxvY2FsZS5oPi4KKysKKytBQ19ERUZVTihbQU1fTENfTUVTU0FHRVNdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgTENfTUVTU0FHRVNdLCBhbV9jdl92YWxfTENfTUVTU0FHRVMsCisrICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxvY2FsZS5oPl0sIFtyZXR1cm4gTENfTUVTU0FHRVNdLAorKyAgICAgICBhbV9jdl92YWxfTENfTUVTU0FHRVM9eWVzLCBhbV9jdl92YWxfTENfTUVTU0FHRVM9bm8pXSkKKysgIGlmIHRlc3QgJGFtX2N2X3ZhbF9MQ19NRVNTQUdFUyA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9MQ19NRVNTQUdFUywgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdXIgPGxvY2FsZS5oPiBmaWxlIGRlZmluZXMgTENfTUVTU0FHRVMuXSkKKysgIGZpCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC91aW50bWF4X3QubTQKK0BAIC0wLDAgKzEsMjkgQEAKKysjIHVpbnRtYXhfdC5tNCBzZXJpYWwgNiAoZ2V0dGV4dC0wLjExKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworK0FDX1BSRVJFUSgyLjEzKQorKworKyMgRGVmaW5lIHVpbnRtYXhfdCB0byBgdW5zaWduZWQgbG9uZycgb3IgYHVuc2lnbmVkIGxvbmcgbG9uZycKKysjIGlmIDxpbnR0eXBlcy5oPiBkb2VzIG5vdCBleGlzdC4KKysKKytBQ19ERUZVTihbam1fQUNfVFlQRV9VSU5UTUFYX1RdLAorK1sKKysgIEFDX1JFUVVJUkUoW2ptX0FDX0hFQURFUl9JTlRUWVBFU19IXSkKKysgIEFDX1JFUVVJUkUoW2ptX0FDX0hFQURFUl9TVERJTlRfSF0pCisrICBpZiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IG5vICYmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IG5vOyB0aGVuCisrICAgIEFDX1JFUVVJUkUoW2ptX0FDX1RZUEVfVU5TSUdORURfTE9OR19MT05HXSkKKysgICAgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmcgPSB5ZXMgXAorKyAgICAgICYmIGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcgbG9uZycgXAorKyAgICAgIHx8IGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcnCisrICAgIEFDX0RFRklORV9VTlFVT1RFRCh1aW50bWF4X3QsICRhY190eXBlLAorKyAgW0RlZmluZSB0byB1bnNpZ25lZCBsb25nIG9yIHVuc2lnbmVkIGxvbmcgbG9uZworKyAgIGlmIDxpbnR0eXBlcy5oPiBhbmQgPHN0ZGludC5oPiBkb24ndCBkZWZpbmUuXSkKKysgIGZpCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9nbGliYzIxLm00CitAQCAtMCwwICsxLDMyIEBACisrIyBnbGliYzIxLm00IHNlcmlhbCAyIChmaWxldXRpbHMtNC4xLjMsIGdldHRleHQtMC4xMC40MCkKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKysjIFRlc3QgZm9yIHRoZSBHTlUgQyBMaWJyYXJ5LCB2ZXJzaW9uIDIuMSBvciBuZXdlci4KKysjIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtqbV9HTElCQzIxXSwKKysgIFsKKysgICAgQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIExpYnJhcnkgMi4xIG9yIG5ld2VyLAorKyAgICAgIGFjX2N2X2dudV9saWJyYXJ5XzJfMSwKKysgICAgICBbQUNfRUdSRVBfQ1BQKFtMdWNreSBHTlUgdXNlcl0sCisrCVsKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19HTlVfTElCUkFSWV9fCisrICNpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEpIHx8IChfX0dMSUJDX18gPiAyKQorKyAgTHVja3kgR05VIHVzZXIKKysgI2VuZGlmCisrI2VuZGlmCisrCV0sCisrCWFjX2N2X2dudV9saWJyYXJ5XzJfMT15ZXMsCisrCWFjX2N2X2dudV9saWJyYXJ5XzJfMT1ubykKKysgICAgICBdCisrICAgICkKKysgICAgQUNfU1VCU1QoR0xJQkMyMSkKKysgICAgR0xJQkMyMT0iJGFjX2N2X2dudV9saWJyYXJ5XzJfMSIKKysgIF0KKyspCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvc3RkaW50X2gubTQKK0BAIC0wLDAgKzEsMjggQEAKKysjIHN0ZGludF9oLm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTEuNCkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKysjIERlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCBpZiA8c3RkaW50Lmg+IGV4aXN0cywKKysjIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQgZGVjbGFyZXMgdWludG1heF90LgorKworK0FDX0RFRlVOKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkaW50LmhdLCBqbV9hY19jdl9oZWFkZXJfc3RkaW50X2gsCisrICBbQUNfVFJZX0NPTVBJTEUoCisrICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPl0sCisrICAgIFt1aW50bWF4X3QgaSA9ICh1aW50bWF4X3QpIC0xO10sCisrICAgIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaD15ZXMsCisrICAgIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaD1ubyldKQorKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCwgMSwKKytbRGVmaW5lIGlmIDxzdGRpbnQuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwKKysgICBhbmQgZGVjbGFyZXMgdWludG1heF90LiBdKQorKyAgZmkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2ludHR5cGVzX2gubTQKK0BAIC0wLDAgKzEsMjggQEAKKysjIGludHR5cGVzX2gubTQgc2VyaWFsIDQgKGdldHRleHQtMC4xMS40KQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworKyMgRGVmaW5lIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVggaWYgPGludHR5cGVzLmg+IGV4aXN0cywKKysjIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQgZGVjbGFyZXMgdWludG1heF90LgorKworK0FDX0RFRlVOKFtqbV9BQ19IRUFERVJfSU5UVFlQRVNfSF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBpbnR0eXBlcy5oXSwgam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2gsCisrICBbQUNfVFJZX0NPTVBJTEUoCisrICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+XSwKKysgICAgW3VpbnRtYXhfdCBpID0gKHVpbnRtYXhfdCkgLTE7XSwKKysgICAgam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2g9eWVzLAorKyAgICBqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaD1ubyldKQorKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVgsIDEsCisrW0RlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwKKysgICBhbmQgZGVjbGFyZXMgdWludG1heF90LiBdKQorKyAgZmkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L3Vsb25nbG9uZy5tNAorQEAgLTAsMCArMSwyMyBAQAorKyMgdWxvbmdsb25nLm00IHNlcmlhbCAyIChmaWxldXRpbHMtNC4wLjMyLCBnZXR0ZXh0LTAuMTAuNDApCisrZG5sIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrQUNfREVGVU4oW2ptX0FDX1RZUEVfVU5TSUdORURfTE9OR19MT05HXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHVuc2lnbmVkIGxvbmcgbG9uZ10sIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nLAorKyAgW0FDX1RSWV9MSU5LKFt1bnNpZ25lZCBsb25nIGxvbmcgdWxsID0gMTsgaW50IGkgPSA2MztdLAorKyAgICBbdW5zaWduZWQgbG9uZyBsb25nIHVsbG1heCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIC0xOworKyAgICAgcmV0dXJuIHVsbCA8PCBpIHwgdWxsID4+IGkgfCB1bGxtYXggLyB1bGwgfCB1bGxtYXggJSB1bGw7XSwKKysgICAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9eWVzLAorKyAgICBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZz1ubyldKQorKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmcgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfVU5TSUdORURfTE9OR19MT05HLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHVuc2lnbmVkIGxvbmcgbG9uZyB0eXBlLl0pCisrICBmaQorK10pCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvY29kZXNldC5tNAorQEAgLTAsMCArMSwyMyBAQAorKyMgY29kZXNldC5tNCBzZXJpYWwgQU0xIChnZXR0ZXh0LTAuMTAuNDApCisrZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtBTV9MQU5HSU5GT19DT0RFU0VUXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIG5sX2xhbmdpbmZvIGFuZCBDT0RFU0VUXSwgYW1fY3ZfbGFuZ2luZm9fY29kZXNldCwKKysgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bGFuZ2luZm8uaD5dLAorKyAgICAgIFtjaGFyKiBjcyA9IG5sX2xhbmdpbmZvKENPREVTRVQpO10sCisrICAgICAgYW1fY3ZfbGFuZ2luZm9fY29kZXNldD15ZXMsCisrICAgICAgYW1fY3ZfbGFuZ2luZm9fY29kZXNldD1ubykKKysgICAgXSkKKysgIGlmIHRlc3QgJGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTEFOR0lORk9fQ09ERVNFVCwgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIDxsYW5naW5mby5oPiBhbmQgbmxfbGFuZ2luZm8oQ09ERVNFVCkuXSkKKysgIGZpCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9pbnRkaXYwLm00CitAQCAtMCwwICsxLDcyIEBACisrIyBpbnRkaXYwLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTEuMykKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtndF9JTlRESVYwXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKysKKysgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgU0lHRlBFXSwKKysgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGUsCisrICAgIFsKKysgICAgICBBQ19UUllfUlVOKFsKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHNpZ25hbC5oPgorKworK3N0YXRpYyB2b2lkCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrc2lnZnBlX2hhbmRsZXIgKGludCBzaWcpCisrI2Vsc2UKKytzaWdmcGVfaGFuZGxlciAoc2lnKSBpbnQgc2lnOworKyNlbmRpZgorK3sKKysgIC8qIEV4aXQgd2l0aCBjb2RlIDAgaWYgU0lHRlBFLCB3aXRoIGNvZGUgMSBpZiBhbnkgb3RoZXIgc2lnbmFsLiAgKi8KKysgIGV4aXQgKHNpZyAhPSBTSUdGUEUpOworK30KKysKKytpbnQgeCA9IDE7CisraW50IHkgPSAwOworK2ludCB6OworK2ludCBuYW47CisrCisraW50IG1haW4gKCkKKyt7CisrICBzaWduYWwgKFNJR0ZQRSwgc2lnZnBlX2hhbmRsZXIpOworKy8qIElSSVggYW5kIEFJWCAod2hlbiAieGxjIC1xY2hlY2siIGlzIHVzZWQpIHlpZWxkIHNpZ25hbCBTSUdUUkFQLiAgKi8KKysjaWYgKGRlZmluZWQgKF9fc2dpKSB8fCBkZWZpbmVkIChfQUlYKSkgJiYgZGVmaW5lZCAoU0lHVFJBUCkKKysgIHNpZ25hbCAoU0lHVFJBUCwgc2lnZnBlX2hhbmRsZXIpOworKyNlbmRpZgorKy8qIExpbnV4L1NQQVJDIHlpZWxkcyBzaWduYWwgU0lHSUxMLiAgKi8KKysjaWYgZGVmaW5lZCAoX19zcGFyY19fKSAmJiBkZWZpbmVkIChfX2xpbnV4X18pCisrICBzaWduYWwgKFNJR0lMTCwgc2lnZnBlX2hhbmRsZXIpOworKyNlbmRpZgorKworKyAgeiA9IHggLyB5OworKyAgbmFuID0geSAvIHk7CisrICBleGl0ICgxKTsKKyt9CisrXSwgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9eWVzLCBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT1ubywKKysgICAgICAgIFsKKysgICAgICAgICAgIyBHdWVzcyBiYXNlZCBvbiB0aGUgQ1BVLgorKyAgICAgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisrICAgICAgICAgICAgYWxwaGEqIHwgaVszNDU2N104NiB8IG02OGsgfCBzMzkwKikKKysgICAgICAgICAgICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPSJndWVzc2luZyB5ZXMiOzsKKysgICAgICAgICAgICAqKQorKyAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIG5vIjs7CisrICAgICAgICAgIGVzYWMKKysgICAgICAgIF0pCisrICAgIF0pCisrICBjYXNlICIkZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGUiIGluCisrICAgICp5ZXMpIHZhbHVlPTE7OworKyAgICAqKSB2YWx1ZT0wOzsKKysgIGVzYWMKKysgIEFDX0RFRklORV9VTlFVT1RFRChJTlRESVYwX1JBSVNFU19TSUdGUEUsICR2YWx1ZSwKKysgICAgW0RlZmluZSBpZiBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIHNpZ25hbCBTSUdGUEUuXSkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2dsaWIubTQKK0BAIC0wLDAgKzEsMTk2IEBACisrIyBDb25maWd1cmUgcGF0aHMgZm9yIEdMSUIKKysjIE93ZW4gVGF5bG9yICAgICA5Ny0xMS0zCisrCisrZG5sIEFNX1BBVEhfR0xJQihbTUlOSU1VTS1WRVJTSU9OLCBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkQgWywgTU9EVUxFU11dXV0pCisrZG5sIFRlc3QgZm9yIEdMSUIsIGFuZCBkZWZpbmUgR0xJQl9DRkxBR1MgYW5kIEdMSUJfTElCUywgaWYgImdtb2R1bGUiIG9yIAorK2RubCBndGhyZWFkIGlzIHNwZWNpZmllZCBpbiBNT0RVTEVTLCBwYXNzIHRvIGdsaWItY29uZmlnCisrZG5sCisrQUNfREVGVU4oQU1fUEFUSF9HTElCLAorK1tkbmwgCisrZG5sIEdldCB0aGUgY2ZsYWdzIGFuZCBsaWJyYXJpZXMgZnJvbSB0aGUgZ2xpYi1jb25maWcgc2NyaXB0CisrZG5sCisrQUNfQVJHX1dJVEgoZ2xpYi1wcmVmaXgsWyAgLS13aXRoLWdsaWItcHJlZml4PVBGWCAgIFByZWZpeCB3aGVyZSBHTElCIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKKysgICAgICAgICAgICBnbGliX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwgZ2xpYl9jb25maWdfcHJlZml4PSIiKQorK0FDX0FSR19XSVRIKGdsaWItZXhlYy1wcmVmaXgsWyAgLS13aXRoLWdsaWItZXhlYy1wcmVmaXg9UEZYIEV4ZWMgcHJlZml4IHdoZXJlIEdMSUIgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorKyAgICAgICAgICAgIGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4PSIkd2l0aHZhbCIsIGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4PSIiKQorK0FDX0FSR19FTkFCTEUoZ2xpYnRlc3QsIFsgIC0tZGlzYWJsZS1nbGlidGVzdCAgICAgICBEbyBub3QgdHJ5IHRvIGNvbXBpbGUgYW5kIHJ1biBhIHRlc3QgR0xJQiBwcm9ncmFtXSwKKysJCSAgICAsIGVuYWJsZV9nbGlidGVzdD15ZXMpCisrCisrICBpZiB0ZXN0IHgkZ2xpYl9jb25maWdfZXhlY19wcmVmaXggIT0geCA7IHRoZW4KKysgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIC0tZXhlYy1wcmVmaXg9JGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4IgorKyAgICAgaWYgdGVzdCB4JHtHTElCX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCisrICAgICAgICBHTElCX0NPTkZJRz0kZ2xpYl9jb25maWdfZXhlY19wcmVmaXgvYmluL2dsaWItY29uZmlnCisrICAgICBmaQorKyAgZmkKKysgIGlmIHRlc3QgeCRnbGliX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKysgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIC0tcHJlZml4PSRnbGliX2NvbmZpZ19wcmVmaXgiCisrICAgICBpZiB0ZXN0IHgke0dMSUJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKysgICAgICAgIEdMSUJfQ09ORklHPSRnbGliX2NvbmZpZ19wcmVmaXgvYmluL2dsaWItY29uZmlnCisrICAgICBmaQorKyAgZmkKKysKKysgIGZvciBtb2R1bGUgaW4gLiAkNAorKyAgZG8KKysgICAgICBjYXNlICIkbW9kdWxlIiBpbgorKyAgICAgICAgIGdtb2R1bGUpIAorKyAgICAgICAgICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyBnbW9kdWxlIgorKyAgICAgICAgIDs7CisrICAgICAgICAgZ3RocmVhZCkgCisrICAgICAgICAgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIGd0aHJlYWQiCisrICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICBkb25lCisrCisrICBBQ19QQVRIX1BST0coR0xJQl9DT05GSUcsIGdsaWItY29uZmlnLCBubykKKysgIG1pbl9nbGliX3ZlcnNpb249aWZlbHNlKFskMV0sICwwLjk5LjcsJDEpCisrICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdMSUIgLSB2ZXJzaW9uID49ICRtaW5fZ2xpYl92ZXJzaW9uKQorKyAgbm9fZ2xpYj0iIgorKyAgaWYgdGVzdCAiJEdMSUJfQ09ORklHIiA9ICJubyIgOyB0aGVuCisrICAgIG5vX2dsaWI9eWVzCisrICBlbHNlCisrICAgIEdMSUJfQ0ZMQUdTPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCisrICAgIEdMSUJfTElCUz1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tbGlic2AKKysgICAgZ2xpYl9jb25maWdfbWFqb3JfdmVyc2lvbj1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKysgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMS8nYAorKyAgICBnbGliX2NvbmZpZ19taW5vcl92ZXJzaW9uPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorKyAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wyLydgCisrICAgIGdsaWJfY29uZmlnX21pY3JvX3ZlcnNpb249YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCisrICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDMvJ2AKKysgICAgaWYgdGVzdCAieCRlbmFibGVfZ2xpYnRlc3QiID0gInh5ZXMiIDsgdGhlbgorKyAgICAgIGFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKyAgICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCisrICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRHTElCX0NGTEFHUyIKKysgICAgICBMSUJTPSIkR0xJQl9MSUJTICRMSUJTIgorK2RubAorK2RubCBOb3cgY2hlY2sgaWYgdGhlIGluc3RhbGxlZCBHTElCIGlzIHN1ZmZpY2llbnRseSBuZXcuIChBbHNvIHNhbml0eQorK2RubCBjaGVja3MgdGhlIHJlc3VsdHMgb2YgZ2xpYi1jb25maWcgdG8gc29tZSBleHRlbnQKKytkbmwKKysgICAgICBybSAtZiBjb25mLmdsaWJ0ZXN0CisrICAgICAgQUNfVFJZX1JVTihbCisrI2luY2x1ZGUgPGdsaWIuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrCisraW50IAorK21haW4gKCkKKyt7CisrICBpbnQgbWFqb3IsIG1pbm9yLCBtaWNybzsKKysgIGNoYXIgKnRtcF92ZXJzaW9uOworKworKyAgc3lzdGVtICgidG91Y2ggY29uZi5nbGlidGVzdCIpOworKworKyAgLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCisrICB0bXBfdmVyc2lvbiA9IGdfc3RyZHVwKCIkbWluX2dsaWJfdmVyc2lvbiIpOworKyAgaWYgKHNzY2FuZih0bXBfdmVyc2lvbiwgIiVkLiVkLiVkIiwgJm1ham9yLCAmbWlub3IsICZtaWNybykgIT0gMykgeworKyAgICAgcHJpbnRmKCIlcywgYmFkIHZlcnNpb24gc3RyaW5nXG4iLCAiJG1pbl9nbGliX3ZlcnNpb24iKTsKKysgICAgIGV4aXQoMSk7CisrICAgfQorKworKyAgaWYgKChnbGliX21ham9yX3ZlcnNpb24gIT0gJGdsaWJfY29uZmlnX21ham9yX3ZlcnNpb24pIHx8CisrICAgICAgKGdsaWJfbWlub3JfdmVyc2lvbiAhPSAkZ2xpYl9jb25maWdfbWlub3JfdmVyc2lvbikgfHwKKysgICAgICAoZ2xpYl9taWNyb192ZXJzaW9uICE9ICRnbGliX2NvbmZpZ19taWNyb192ZXJzaW9uKSkKKysgICAgeworKyAgICAgIHByaW50ZigiXG4qKiogJ2dsaWItY29uZmlnIC0tdmVyc2lvbicgcmV0dXJuZWQgJWQuJWQuJWQsIGJ1dCBHTElCICglZC4lZC4lZClcbiIsIAorKyAgICAgICAgICAgICAkZ2xpYl9jb25maWdfbWFqb3JfdmVyc2lvbiwgJGdsaWJfY29uZmlnX21pbm9yX3ZlcnNpb24sICRnbGliX2NvbmZpZ19taWNyb192ZXJzaW9uLAorKyAgICAgICAgICAgICBnbGliX21ham9yX3ZlcnNpb24sIGdsaWJfbWlub3JfdmVyc2lvbiwgZ2xpYl9taWNyb192ZXJzaW9uKTsKKysgICAgICBwcmludGYgKCIqKiogd2FzIGZvdW5kISBJZiBnbGliLWNvbmZpZyB3YXMgY29ycmVjdCwgdGhlbiBpdCBpcyBiZXN0XG4iKTsKKysgICAgICBwcmludGYgKCIqKiogdG8gcmVtb3ZlIHRoZSBvbGQgdmVyc2lvbiBvZiBHTElCLiBZb3UgbWF5IGFsc28gYmUgYWJsZSB0byBmaXggdGhlIGVycm9yXG4iKTsKKysgICAgICBwcmludGYoIioqKiBieSBtb2RpZnlpbmcgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgYnkgZWRpdGluZ1xuIik7CisrICAgICAgcHJpbnRmKCIqKiogL2V0Yy9sZC5zby5jb25mLiBNYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQgaXNcbiIpOworKyAgICAgIHByaW50ZigiKioqIHJlcXVpcmVkIG9uIHlvdXIgc3lzdGVtLlxuIik7CisrICAgICAgcHJpbnRmKCIqKiogSWYgZ2xpYi1jb25maWcgd2FzIHdyb25nLCBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEdMSUJfQ09ORklHXG4iKTsKKysgICAgICBwcmludGYoIioqKiB0byBwb2ludCB0byB0aGUgY29ycmVjdCBjb3B5IG9mIGdsaWItY29uZmlnLCBhbmQgcmVtb3ZlIHRoZSBmaWxlIGNvbmZpZy5jYWNoZVxuIik7CisrICAgICAgcHJpbnRmKCIqKiogYmVmb3JlIHJlLXJ1bm5pbmcgY29uZmlndXJlXG4iKTsKKysgICAgfSAKKysgIGVsc2UgaWYgKChnbGliX21ham9yX3ZlcnNpb24gIT0gR0xJQl9NQUpPUl9WRVJTSU9OKSB8fAorKwkgICAoZ2xpYl9taW5vcl92ZXJzaW9uICE9IEdMSUJfTUlOT1JfVkVSU0lPTikgfHwKKysgICAgICAgICAgIChnbGliX21pY3JvX3ZlcnNpb24gIT0gR0xJQl9NSUNST19WRVJTSU9OKSkKKysgICAgeworKyAgICAgIHByaW50ZigiKioqIEdMSUIgaGVhZGVyIGZpbGVzICh2ZXJzaW9uICVkLiVkLiVkKSBkbyBub3QgbWF0Y2hcbiIsCisrCSAgICAgR0xJQl9NQUpPUl9WRVJTSU9OLCBHTElCX01JTk9SX1ZFUlNJT04sIEdMSUJfTUlDUk9fVkVSU0lPTik7CisrICAgICAgcHJpbnRmKCIqKiogbGlicmFyeSAodmVyc2lvbiAlZC4lZC4lZClcbiIsCisrCSAgICAgZ2xpYl9tYWpvcl92ZXJzaW9uLCBnbGliX21pbm9yX3ZlcnNpb24sIGdsaWJfbWljcm9fdmVyc2lvbik7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGlmICgoZ2xpYl9tYWpvcl92ZXJzaW9uID4gbWFqb3IpIHx8CisrICAgICAgICAoKGdsaWJfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKGdsaWJfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKKysgICAgICAgICgoZ2xpYl9tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoZ2xpYl9taW5vcl92ZXJzaW9uID09IG1pbm9yKSAmJiAoZ2xpYl9taWNyb192ZXJzaW9uID49IG1pY3JvKSkpCisrICAgICAgeworKyAgICAgICAgcmV0dXJuIDA7CisrICAgICAgIH0KKysgICAgIGVsc2UKKysgICAgICB7CisrICAgICAgICBwcmludGYoIlxuKioqIEFuIG9sZCB2ZXJzaW9uIG9mIEdMSUIgKCVkLiVkLiVkKSB3YXMgZm91bmQuXG4iLAorKyAgICAgICAgICAgICAgIGdsaWJfbWFqb3JfdmVyc2lvbiwgZ2xpYl9taW5vcl92ZXJzaW9uLCBnbGliX21pY3JvX3ZlcnNpb24pOworKyAgICAgICAgcHJpbnRmKCIqKiogWW91IG5lZWQgYSB2ZXJzaW9uIG9mIEdMSUIgbmV3ZXIgdGhhbiAlZC4lZC4lZC4gVGhlIGxhdGVzdCB2ZXJzaW9uIG9mXG4iLAorKwkgICAgICAgbWFqb3IsIG1pbm9yLCBtaWNybyk7CisrICAgICAgICBwcmludGYoIioqKiBHTElCIGlzIGFsd2F5cyBhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAuZ3RrLm9yZy5cbiIpOworKyAgICAgICAgcHJpbnRmKCIqKipcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogSWYgeW91IGhhdmUgYWxyZWFkeSBpbnN0YWxsZWQgYSBzdWZmaWNpZW50bHkgbmV3IHZlcnNpb24sIHRoaXMgZXJyb3JcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgd3JvbmcgY29weSBvZiB0aGUgZ2xpYi1jb25maWcgc2hlbGwgc2NyaXB0IGlzXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIGJlaW5nIGZvdW5kLiBUaGUgZWFzaWVzdCB3YXkgdG8gZml4IHRoaXMgaXMgdG8gcmVtb3ZlIHRoZSBvbGQgdmVyc2lvblxuIik7CisrICAgICAgICBwcmludGYoIioqKiBvZiBHTElCLCBidXQgeW91IGNhbiBhbHNvIHNldCB0aGUgR0xJQl9DT05GSUcgZW52aXJvbm1lbnQgdG8gcG9pbnQgdG8gdGhlXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIGNvcnJlY3QgY29weSBvZiBnbGliLWNvbmZpZy4gKEluIHRoaXMgY2FzZSwgeW91IHdpbGwgaGF2ZSB0b1xuIik7CisrICAgICAgICBwcmludGYoIioqKiBtb2RpZnkgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmZcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogc28gdGhhdCB0aGUgY29ycmVjdCBsaWJyYXJpZXMgYXJlIGZvdW5kIGF0IHJ1bi10aW1lKSlcbiIpOworKyAgICAgIH0KKysgICAgfQorKyAgcmV0dXJuIDE7CisrfQorK10sLCBub19nbGliPXllcyxbZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIl0pCisrICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorKyAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorKyAgICAgZmkKKysgIGZpCisrICBpZiB0ZXN0ICJ4JG5vX2dsaWIiID0geCA7IHRoZW4KKysgICAgIEFDX01TR19SRVNVTFQoeWVzKQorKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkgICAgIAorKyAgZWxzZQorKyAgICAgQUNfTVNHX1JFU1VMVChubykKKysgICAgIGlmIHRlc3QgIiRHTElCX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorKyAgICAgICBlY2hvICIqKiogVGhlIGdsaWItY29uZmlnIHNjcmlwdCBpbnN0YWxsZWQgYnkgR0xJQiBjb3VsZCBub3QgYmUgZm91bmQiCisrICAgICAgIGVjaG8gIioqKiBJZiBHTElCIHdhcyBpbnN0YWxsZWQgaW4gUFJFRklYLCBtYWtlIHN1cmUgUFJFRklYL2JpbiBpcyBpbiIKKysgICAgICAgZWNobyAiKioqIHlvdXIgcGF0aCwgb3Igc2V0IHRoZSBHTElCX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUiCisrICAgICAgIGVjaG8gIioqKiBmdWxsIHBhdGggdG8gZ2xpYi1jb25maWcuIgorKyAgICAgZWxzZQorKyAgICAgICBpZiB0ZXN0IC1mIGNvbmYuZ2xpYnRlc3QgOyB0aGVuCisrICAgICAgICA6CisrICAgICAgIGVsc2UKKysgICAgICAgICAgZWNobyAiKioqIENvdWxkIG5vdCBydW4gR0xJQiB0ZXN0IHByb2dyYW0sIGNoZWNraW5nIHdoeS4uLiIKKysgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRHTElCX0NGTEFHUyIKKysgICAgICAgICAgTElCUz0iJExJQlMgJEdMSUJfTElCUyIKKysgICAgICAgICAgQUNfVFJZX0xJTksoWworKyNpbmNsdWRlIDxnbGliLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrXSwgICAgICBbIHJldHVybiAoKGdsaWJfbWFqb3JfdmVyc2lvbikgfHwgKGdsaWJfbWlub3JfdmVyc2lvbikgfHwgKGdsaWJfbWljcm9fdmVyc2lvbikpOyBdLAorKyAgICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBjb21waWxlZCwgYnV0IGRpZCBub3QgcnVuLiBUaGlzIHVzdWFsbHkgbWVhbnMiCisrICAgICAgICAgIGVjaG8gIioqKiB0aGF0IHRoZSBydW4tdGltZSBsaW5rZXIgaXMgbm90IGZpbmRpbmcgR0xJQiBvciBmaW5kaW5nIHRoZSB3cm9uZyIKKysgICAgICAgICAgZWNobyAiKioqIHZlcnNpb24gb2YgR0xJQi4gSWYgaXQgaXMgbm90IGZpbmRpbmcgR0xJQiwgeW91J2xsIG5lZWQgdG8gc2V0IHlvdXIiCisrICAgICAgICAgIGVjaG8gIioqKiBMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mIHRvIHBvaW50IgorKyAgICAgICAgICBlY2hvICIqKiogdG8gdGhlIGluc3RhbGxlZCBsb2NhdGlvbiAgQWxzbywgbWFrZSBzdXJlIHlvdSBoYXZlIHJ1biBsZGNvbmZpZyBpZiB0aGF0IgorKyAgICAgICAgICBlY2hvICIqKiogaXMgcmVxdWlyZWQgb24geW91ciBzeXN0ZW0iCisrCSAgZWNobyAiKioqIgorKyAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gaW5zdGFsbGVkLCBpdCBpcyBiZXN0IHRvIHJlbW92ZSBpdCwgYWx0aG91Z2giCisrICAgICAgICAgIGVjaG8gIioqKiB5b3UgbWF5IGFsc28gYmUgYWJsZSB0byBnZXQgdGhpbmdzIHRvIHdvcmsgYnkgbW9kaWZ5aW5nIExEX0xJQlJBUllfUEFUSCIKKysgICAgICAgICAgZWNobyAiKioqIgorKyAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYSBSZWRIYXQgNS4wIHN5c3RlbSwgeW91IHNob3VsZCByZW1vdmUgdGhlIEdUSyBwYWNrYWdlIHRoYXQiCisrICAgICAgICAgIGVjaG8gIioqKiBjYW1lIHdpdGggdGhlIHN5c3RlbSB3aXRoIHRoZSBjb21tYW5kIgorKyAgICAgICAgICBlY2hvICIqKioiCisrICAgICAgICAgIGVjaG8gIioqKiAgICBycG0gLS1lcmFzZSAtLW5vZGVwcyBndGsgZ3RrLWRldmVsIiBdLAorKyAgICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBmYWlsZWQgdG8gY29tcGlsZSBvciBsaW5rLiBTZWUgdGhlIGZpbGUgY29uZmlnLmxvZyBmb3IgdGhlIgorKyAgICAgICAgICBlY2hvICIqKiogZXhhY3QgZXJyb3IgdGhhdCBvY2N1cmVkLiBUaGlzIHVzdWFsbHkgbWVhbnMgR0xJQiB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgorKyAgICAgICAgICBlY2hvICIqKiogb3IgdGhhdCB5b3UgaGF2ZSBtb3ZlZCBHTElCIHNpbmNlIGl0IHdhcyBpbnN0YWxsZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgeW91IgorKyAgICAgICAgICBlY2hvICIqKiogbWF5IHdhbnQgdG8gZWRpdCB0aGUgZ2xpYi1jb25maWcgc2NyaXB0OiAkR0xJQl9DT05GSUciIF0pCisrICAgICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorKyAgICAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorKyAgICAgICBmaQorKyAgICAgZmkKKysgICAgIEdMSUJfQ0ZMQUdTPSIiCisrICAgICBHTElCX0xJQlM9IiIKKysgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisrICBmaQorKyAgQUNfU1VCU1QoR0xJQl9DRkxBR1MpCisrICBBQ19TVUJTVChHTElCX0xJQlMpCisrICBybSAtZiBjb25mLmdsaWJ0ZXN0CisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9pbnR0eXBlcy5tNAorQEAgLTAsMCArMSwyNyBAQAorKyMgaW50dHlwZXMubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMS40KQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworKyMgRGVmaW5lIEhBVkVfSU5UVFlQRVNfSCBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkb2Vzbid0IGNsYXNoIHdpdGgKKysjIDxzeXMvdHlwZXMuaD4uCisrCisrQUNfREVGVU4oW2d0X0hFQURFUl9JTlRUWVBFU19IXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGludHR5cGVzLmhdLCBndF9jdl9oZWFkZXJfaW50dHlwZXNfaCwKKysgIFsKKysgICAgQUNfVFJZX0NPTVBJTEUoCisrICAgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD5dLAorKyAgICAgIFtdLCBndF9jdl9oZWFkZXJfaW50dHlwZXNfaD15ZXMsIGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oPW5vKQorKyAgXSkKKysgIGlmIHRlc3QgJGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0lOVFRZUEVTX0gsIDEsCisrICAgICAgW0RlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPi5dKQorKyAgZmkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2lzYy1wb3NpeC5tNAorQEAgLTAsMCArMSwyNiBAQAorKyMgaXNjLXBvc2l4Lm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTEuMikKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKysjIFRoaXMgZmlsZSBpcyBub3QgbmVlZGVkIHdpdGggYXV0b2NvbmYtMi41MyBhbmQgbmV3ZXIuICBSZW1vdmUgaXQgaW4gMjAwNS4KKysKKysjIFRoaXMgdGVzdCByZXBsYWNlcyB0aGUgb25lIGluIGF1dG9jb25mLgorKyMgQ3VycmVudGx5IHRoaXMgbWFjcm8gc2hvdWxkIGhhdmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgYXV0b2NvbmYgbWFjcm8KKysjIGJlY2F1c2UgZ2V0dGV4dCdzIGdldHRleHQubTQgKGRpc3RyaWJ1dGVkIGluIHRoZSBhdXRvbWFrZSBwYWNrYWdlKQorKyMgc3RpbGwgdXNlcyBpdC4gIE90aGVyd2lzZSwgdGhlIHVzZSBpbiBnZXR0ZXh0Lm00IG1ha2VzIGF1dG9oZWFkZXIKKysjIGdpdmUgdGhlc2UgZGlhZ25vc3RpY3M6CisrIyAgIGNvbmZpZ3VyZS5pbjo1NTY6IEFDX1RSWV9DT01QSUxFIHdhcyBjYWxsZWQgYmVmb3JlIEFDX0lTQ19QT1NJWAorKyMgICBjb25maWd1cmUuaW46NTU2OiBBQ19UUllfUlVOIHdhcyBjYWxsZWQgYmVmb3JlIEFDX0lTQ19QT1NJWAorKworK3VuZGVmaW5lKFtBQ19JU0NfUE9TSVhdKQorKworK0FDX0RFRlVOKFtBQ19JU0NfUE9TSVhdLAorKyAgWworKyAgICBkbmwgVGhpcyB0ZXN0IHJlcGxhY2VzIHRoZSBvYnNvbGVzY2VudCBBQ19JU0NfUE9TSVgga2x1ZGdlLgorKyAgICBBQ19DSEVDS19MSUIoY3Bvc2l4LCBzdHJlcnJvciwgW0xJQlM9IiRMSUJTIC1sY3Bvc2l4Il0pCisrICBdCisrKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMTZjNTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaC5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDRjMGQ3NzMzZjMwOTAzZjhkN2M3Y2Q3NDMzZjVjOGE3NTA1ZTM1ZjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorRGF0ZTogVHVlLCAyMSBBcHIgMjAxNSAwMDo0ODo0NSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBkb2MvbG9jYWwubWs6IGRvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorCitVcGRhdGVkIGZvciBiaXNvbiAzLjAuNAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRvYy9sb2NhbC5tayB8ICAgIDkgKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZG9jL2xvY2FsLm1rIGIvZG9jL2xvY2FsLm1rCitpbmRleCBjMzQwNDUyLi42NDJmMzg1IDEwMDY0NAorLS0tIGEvZG9jL2xvY2FsLm1rCisrKysgYi9kb2MvbG9jYWwubWsKK0BAIC05OCwxMCArOTgsNyBAQCBlbmRpZiAhIENST1NTX0NPTVBJTElORworICMjIE1hbiBQYWdlcy4gICMjCisgIyMgLS0tLS0tLS0tLS0gIyMKKyAKKy1kaXN0X21hbl9NQU5TID0gJCh0b3Bfc3JjZGlyKS9kb2MvYmlzb24uMQorLQorLUVYVFJBX0RJU1QgKz0gJChkaXN0X21hbl9NQU5TOi4xPS54KQorLU1BSU5UQUlORVJDTEVBTkZJTEVTICs9ICQoZGlzdF9tYW5fTUFOUykKKytFWFRSQV9ESVNUICs9IGJpc29uLngKKyAKKyAjIERpZmZlcmVuY2VzIHRvIGlnbm9yZSB3aGVuIGNvbXBhcmluZyB0aGUgbWFuIHBhZ2UgKHRoZSBkYXRlKS4KKyByZW1vdmVfdGltZV9zdGFtcCA9IFwKK0BAIC0xMjQsMTAgKzEyMSw2IEBAICQodG9wX3NyY2RpcikvZG9jL2Jpc29uLjE6ICQoTUFOX0RFUFMpCisgCWZpCisgCSQoQU1fVl9hdClybSAtZiAkQCoudAorIAorLWlmIEVOQUJMRV9ZQUNDCistbm9kaXN0X21hbl9NQU5TID0gZG9jL3lhY2MuMQorLWVuZGlmCistCisgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyAjIyBHcmFwaHZpeiBleGFtcGxlcyBnZW5lcmF0aW9uLiAjIworICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vbTQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi9tNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTM5ZGE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vbTQucGF0Y2gKQEAgLTAsMCArMSw0MTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5tbi1sb2dpc3Rpay5kZS91bnN1cHBvcnRlZC9weGEyNTAvcGF0Y2hlcgorIworCitJbmRleDogYmlzb24tMi40LjIvbTQvbGNtZXNzYWdlLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMi40LjIvbTQvbGNtZXNzYWdlLm00CitAQCAtMCwwICsxLDMyIEBACisrIyBsY21lc3NhZ2UubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMS4zKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorK2RubAorK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCisrZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKytkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorK2RubCBmdW5jdGlvbmFsaXR5LgorK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCisrZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKytkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisrCisrZG5sIEF1dGhvcnM6CisrZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUuCisrCisrIyBDaGVjayB3aGV0aGVyIExDX01FU1NBR0VTIGlzIGF2YWlsYWJsZSBpbiA8bG9jYWxlLmg+LgorKworK0FDX0RFRlVOKFtBTV9MQ19NRVNTQUdFU10sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBMQ19NRVNTQUdFU10sIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUywKKysgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bG9jYWxlLmg+XSwgW3JldHVybiBMQ19NRVNTQUdFU10sCisrICAgICAgIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz15ZXMsIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz1ubyldKQorKyAgaWYgdGVzdCAkYW1fY3ZfdmFsX0xDX01FU1NBR0VTID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX0xDX01FU1NBR0VTLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91ciA8bG9jYWxlLmg+IGZpbGUgZGVmaW5lcyBMQ19NRVNTQUdFUy5dKQorKyAgZmkKKytdKQorSW5kZXg6IGJpc29uLTIuNC4yL200L3VpbnRtYXhfdC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTIuNC4yL200L3VpbnRtYXhfdC5tNAorQEAgLTAsMCArMSwyOSBAQAorKyMgdWludG1heF90Lm00IHNlcmlhbCA2IChnZXR0ZXh0LTAuMTEpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrQUNfUFJFUkVRKDIuMTMpCisrCisrIyBEZWZpbmUgdWludG1heF90IHRvIGB1bnNpZ25lZCBsb25nJyBvciBgdW5zaWduZWQgbG9uZyBsb25nJworKyMgaWYgPGludHR5cGVzLmg+IGRvZXMgbm90IGV4aXN0LgorKworK0FDX0RFRlVOKFtqbV9BQ19UWVBFX1VJTlRNQVhfVF0sCisrWworKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX0lOVFRZUEVTX0hdKQorKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX1NURElOVF9IXSkKKysgIGlmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0gbm8gJiYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0gbm87IHRoZW4KKysgICAgQUNfUkVRVUlSRShbam1fQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkddKQorKyAgICB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZyA9IHllcyBcCisrICAgICAgJiYgYWNfdHlwZT0ndW5zaWduZWQgbG9uZyBsb25nJyBcCisrICAgICAgfHwgYWNfdHlwZT0ndW5zaWduZWQgbG9uZycKKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKHVpbnRtYXhfdCwgJGFjX3R5cGUsCisrICBbRGVmaW5lIHRvIHVuc2lnbmVkIGxvbmcgb3IgdW5zaWduZWQgbG9uZyBsb25nCisrICAgaWYgPGludHR5cGVzLmg+IGFuZCA8c3RkaW50Lmg+IGRvbid0IGRlZmluZS5dKQorKyAgZmkKKytdKQorSW5kZXg6IGJpc29uLTIuNC4yL200L3Vsb25nbG9uZy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTIuNC4yL200L3Vsb25nbG9uZy5tNAorQEAgLTAsMCArMSwyMyBAQAorKyMgdWxvbmdsb25nLm00IHNlcmlhbCAyIChmaWxldXRpbHMtNC4wLjMyLCBnZXR0ZXh0LTAuMTAuNDApCisrZG5sIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrQUNfREVGVU4oW2ptX0FDX1RZUEVfVU5TSUdORURfTE9OR19MT05HXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHVuc2lnbmVkIGxvbmcgbG9uZ10sIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nLAorKyAgW0FDX1RSWV9MSU5LKFt1bnNpZ25lZCBsb25nIGxvbmcgdWxsID0gMTsgaW50IGkgPSA2MztdLAorKyAgICBbdW5zaWduZWQgbG9uZyBsb25nIHVsbG1heCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIC0xOworKyAgICAgcmV0dXJuIHVsbCA8PCBpIHwgdWxsID4+IGkgfCB1bGxtYXggLyB1bGwgfCB1bGxtYXggJSB1bGw7XSwKKysgICAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9eWVzLAorKyAgICBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZz1ubyldKQorKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmcgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfVU5TSUdORURfTE9OR19MT05HLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHVuc2lnbmVkIGxvbmcgbG9uZyB0eXBlLl0pCisrICBmaQorK10pCitJbmRleDogYmlzb24tMi40LjIvbTQvaW50ZGl2MC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTIuNC4yL200L2ludGRpdjAubTQKK0BAIC0wLDAgKzEsNzIgQEAKKysjIGludGRpdjAubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMS4zKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW2d0X0lOVERJVjBdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorKworKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyBTSUdGUEVdLAorKyAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSwKKysgICAgWworKyAgICAgIEFDX1RSWV9SVU4oWworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c2lnbmFsLmg+CisrCisrc3RhdGljIHZvaWQKKysjaWZkZWYgX19jcGx1c3BsdXMKKytzaWdmcGVfaGFuZGxlciAoaW50IHNpZykKKysjZWxzZQorK3NpZ2ZwZV9oYW5kbGVyIChzaWcpIGludCBzaWc7CisrI2VuZGlmCisreworKyAgLyogRXhpdCB3aXRoIGNvZGUgMCBpZiBTSUdGUEUsIHdpdGggY29kZSAxIGlmIGFueSBvdGhlciBzaWduYWwuICAqLworKyAgZXhpdCAoc2lnICE9IFNJR0ZQRSk7CisrfQorKworK2ludCB4ID0gMTsKKytpbnQgeSA9IDA7CisraW50IHo7CisraW50IG5hbjsKKysKKytpbnQgbWFpbiAoKQorK3sKKysgIHNpZ25hbCAoU0lHRlBFLCBzaWdmcGVfaGFuZGxlcik7CisrLyogSVJJWCBhbmQgQUlYICh3aGVuICJ4bGMgLXFjaGVjayIgaXMgdXNlZCkgeWllbGQgc2lnbmFsIFNJR1RSQVAuICAqLworKyNpZiAoZGVmaW5lZCAoX19zZ2kpIHx8IGRlZmluZWQgKF9BSVgpKSAmJiBkZWZpbmVkIChTSUdUUkFQKQorKyAgc2lnbmFsIChTSUdUUkFQLCBzaWdmcGVfaGFuZGxlcik7CisrI2VuZGlmCisrLyogTGludXgvU1BBUkMgeWllbGRzIHNpZ25hbCBTSUdJTEwuICAqLworKyNpZiBkZWZpbmVkIChfX3NwYXJjX18pICYmIGRlZmluZWQgKF9fbGludXhfXykKKysgIHNpZ25hbCAoU0lHSUxMLCBzaWdmcGVfaGFuZGxlcik7CisrI2VuZGlmCisrCisrICB6ID0geCAvIHk7CisrICBuYW4gPSB5IC8geTsKKysgIGV4aXQgKDEpOworK30KKytdLCBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT15ZXMsIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPW5vLAorKyAgICAgICAgWworKyAgICAgICAgICAjIEd1ZXNzIGJhc2VkIG9uIHRoZSBDUFUuCisrICAgICAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKysgICAgICAgICAgICBhbHBoYSogfCBpWzM0NTY3XTg2IHwgbTY4ayB8IHMzOTAqKQorKyAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIHllcyI7OworKyAgICAgICAgICAgICopCisrICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3Npbmcgbm8iOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgXSkKKysgICAgXSkKKysgIGNhc2UgIiRndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSIgaW4KKysgICAgKnllcykgdmFsdWU9MTs7CisrICAgICopIHZhbHVlPTA7OworKyAgZXNhYworKyAgQUNfREVGSU5FX1VOUVVPVEVEKElOVERJVjBfUkFJU0VTX1NJR0ZQRSwgJHZhbHVlLAorKyAgICBbRGVmaW5lIGlmIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgc2lnbmFsIFNJR0ZQRS5dKQorK10pCitJbmRleDogYmlzb24tMi40LjIvbTQvZ2xpYi5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTIuNC4yL200L2dsaWIubTQKK0BAIC0wLDAgKzEsMTk2IEBACisrIyBDb25maWd1cmUgcGF0aHMgZm9yIEdMSUIKKysjIE93ZW4gVGF5bG9yICAgICA5Ny0xMS0zCisrCisrZG5sIEFNX1BBVEhfR0xJQihbTUlOSU1VTS1WRVJTSU9OLCBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkQgWywgTU9EVUxFU11dXV0pCisrZG5sIFRlc3QgZm9yIEdMSUIsIGFuZCBkZWZpbmUgR0xJQl9DRkxBR1MgYW5kIEdMSUJfTElCUywgaWYgImdtb2R1bGUiIG9yIAorK2RubCBndGhyZWFkIGlzIHNwZWNpZmllZCBpbiBNT0RVTEVTLCBwYXNzIHRvIGdsaWItY29uZmlnCisrZG5sCisrQUNfREVGVU4oQU1fUEFUSF9HTElCLAorK1tkbmwgCisrZG5sIEdldCB0aGUgY2ZsYWdzIGFuZCBsaWJyYXJpZXMgZnJvbSB0aGUgZ2xpYi1jb25maWcgc2NyaXB0CisrZG5sCisrQUNfQVJHX1dJVEgoZ2xpYi1wcmVmaXgsWyAgLS13aXRoLWdsaWItcHJlZml4PVBGWCAgIFByZWZpeCB3aGVyZSBHTElCIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKKysgICAgICAgICAgICBnbGliX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwgZ2xpYl9jb25maWdfcHJlZml4PSIiKQorK0FDX0FSR19XSVRIKGdsaWItZXhlYy1wcmVmaXgsWyAgLS13aXRoLWdsaWItZXhlYy1wcmVmaXg9UEZYIEV4ZWMgcHJlZml4IHdoZXJlIEdMSUIgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorKyAgICAgICAgICAgIGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4PSIkd2l0aHZhbCIsIGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4PSIiKQorK0FDX0FSR19FTkFCTEUoZ2xpYnRlc3QsIFsgIC0tZGlzYWJsZS1nbGlidGVzdCAgICAgICBEbyBub3QgdHJ5IHRvIGNvbXBpbGUgYW5kIHJ1biBhIHRlc3QgR0xJQiBwcm9ncmFtXSwKKysJCSAgICAsIGVuYWJsZV9nbGlidGVzdD15ZXMpCisrCisrICBpZiB0ZXN0IHgkZ2xpYl9jb25maWdfZXhlY19wcmVmaXggIT0geCA7IHRoZW4KKysgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIC0tZXhlYy1wcmVmaXg9JGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4IgorKyAgICAgaWYgdGVzdCB4JHtHTElCX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCisrICAgICAgICBHTElCX0NPTkZJRz0kZ2xpYl9jb25maWdfZXhlY19wcmVmaXgvYmluL2dsaWItY29uZmlnCisrICAgICBmaQorKyAgZmkKKysgIGlmIHRlc3QgeCRnbGliX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKysgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIC0tcHJlZml4PSRnbGliX2NvbmZpZ19wcmVmaXgiCisrICAgICBpZiB0ZXN0IHgke0dMSUJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKysgICAgICAgIEdMSUJfQ09ORklHPSRnbGliX2NvbmZpZ19wcmVmaXgvYmluL2dsaWItY29uZmlnCisrICAgICBmaQorKyAgZmkKKysKKysgIGZvciBtb2R1bGUgaW4gLiAkNAorKyAgZG8KKysgICAgICBjYXNlICIkbW9kdWxlIiBpbgorKyAgICAgICAgIGdtb2R1bGUpIAorKyAgICAgICAgICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyBnbW9kdWxlIgorKyAgICAgICAgIDs7CisrICAgICAgICAgZ3RocmVhZCkgCisrICAgICAgICAgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIGd0aHJlYWQiCisrICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICBkb25lCisrCisrICBBQ19QQVRIX1BST0coR0xJQl9DT05GSUcsIGdsaWItY29uZmlnLCBubykKKysgIG1pbl9nbGliX3ZlcnNpb249aWZlbHNlKFskMV0sICwwLjk5LjcsJDEpCisrICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdMSUIgLSB2ZXJzaW9uID49ICRtaW5fZ2xpYl92ZXJzaW9uKQorKyAgbm9fZ2xpYj0iIgorKyAgaWYgdGVzdCAiJEdMSUJfQ09ORklHIiA9ICJubyIgOyB0aGVuCisrICAgIG5vX2dsaWI9eWVzCisrICBlbHNlCisrICAgIEdMSUJfQ0ZMQUdTPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCisrICAgIEdMSUJfTElCUz1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tbGlic2AKKysgICAgZ2xpYl9jb25maWdfbWFqb3JfdmVyc2lvbj1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKysgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMS8nYAorKyAgICBnbGliX2NvbmZpZ19taW5vcl92ZXJzaW9uPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorKyAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wyLydgCisrICAgIGdsaWJfY29uZmlnX21pY3JvX3ZlcnNpb249YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCisrICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDMvJ2AKKysgICAgaWYgdGVzdCAieCRlbmFibGVfZ2xpYnRlc3QiID0gInh5ZXMiIDsgdGhlbgorKyAgICAgIGFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKyAgICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCisrICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRHTElCX0NGTEFHUyIKKysgICAgICBMSUJTPSIkR0xJQl9MSUJTICRMSUJTIgorK2RubAorK2RubCBOb3cgY2hlY2sgaWYgdGhlIGluc3RhbGxlZCBHTElCIGlzIHN1ZmZpY2llbnRseSBuZXcuIChBbHNvIHNhbml0eQorK2RubCBjaGVja3MgdGhlIHJlc3VsdHMgb2YgZ2xpYi1jb25maWcgdG8gc29tZSBleHRlbnQKKytkbmwKKysgICAgICBybSAtZiBjb25mLmdsaWJ0ZXN0CisrICAgICAgQUNfVFJZX1JVTihbCisrI2luY2x1ZGUgPGdsaWIuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrCisraW50IAorK21haW4gKCkKKyt7CisrICBpbnQgbWFqb3IsIG1pbm9yLCBtaWNybzsKKysgIGNoYXIgKnRtcF92ZXJzaW9uOworKworKyAgc3lzdGVtICgidG91Y2ggY29uZi5nbGlidGVzdCIpOworKworKyAgLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCisrICB0bXBfdmVyc2lvbiA9IGdfc3RyZHVwKCIkbWluX2dsaWJfdmVyc2lvbiIpOworKyAgaWYgKHNzY2FuZih0bXBfdmVyc2lvbiwgIiVkLiVkLiVkIiwgJm1ham9yLCAmbWlub3IsICZtaWNybykgIT0gMykgeworKyAgICAgcHJpbnRmKCIlcywgYmFkIHZlcnNpb24gc3RyaW5nXG4iLCAiJG1pbl9nbGliX3ZlcnNpb24iKTsKKysgICAgIGV4aXQoMSk7CisrICAgfQorKworKyAgaWYgKChnbGliX21ham9yX3ZlcnNpb24gIT0gJGdsaWJfY29uZmlnX21ham9yX3ZlcnNpb24pIHx8CisrICAgICAgKGdsaWJfbWlub3JfdmVyc2lvbiAhPSAkZ2xpYl9jb25maWdfbWlub3JfdmVyc2lvbikgfHwKKysgICAgICAoZ2xpYl9taWNyb192ZXJzaW9uICE9ICRnbGliX2NvbmZpZ19taWNyb192ZXJzaW9uKSkKKysgICAgeworKyAgICAgIHByaW50ZigiXG4qKiogJ2dsaWItY29uZmlnIC0tdmVyc2lvbicgcmV0dXJuZWQgJWQuJWQuJWQsIGJ1dCBHTElCICglZC4lZC4lZClcbiIsIAorKyAgICAgICAgICAgICAkZ2xpYl9jb25maWdfbWFqb3JfdmVyc2lvbiwgJGdsaWJfY29uZmlnX21pbm9yX3ZlcnNpb24sICRnbGliX2NvbmZpZ19taWNyb192ZXJzaW9uLAorKyAgICAgICAgICAgICBnbGliX21ham9yX3ZlcnNpb24sIGdsaWJfbWlub3JfdmVyc2lvbiwgZ2xpYl9taWNyb192ZXJzaW9uKTsKKysgICAgICBwcmludGYgKCIqKiogd2FzIGZvdW5kISBJZiBnbGliLWNvbmZpZyB3YXMgY29ycmVjdCwgdGhlbiBpdCBpcyBiZXN0XG4iKTsKKysgICAgICBwcmludGYgKCIqKiogdG8gcmVtb3ZlIHRoZSBvbGQgdmVyc2lvbiBvZiBHTElCLiBZb3UgbWF5IGFsc28gYmUgYWJsZSB0byBmaXggdGhlIGVycm9yXG4iKTsKKysgICAgICBwcmludGYoIioqKiBieSBtb2RpZnlpbmcgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgYnkgZWRpdGluZ1xuIik7CisrICAgICAgcHJpbnRmKCIqKiogL2V0Yy9sZC5zby5jb25mLiBNYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQgaXNcbiIpOworKyAgICAgIHByaW50ZigiKioqIHJlcXVpcmVkIG9uIHlvdXIgc3lzdGVtLlxuIik7CisrICAgICAgcHJpbnRmKCIqKiogSWYgZ2xpYi1jb25maWcgd2FzIHdyb25nLCBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEdMSUJfQ09ORklHXG4iKTsKKysgICAgICBwcmludGYoIioqKiB0byBwb2ludCB0byB0aGUgY29ycmVjdCBjb3B5IG9mIGdsaWItY29uZmlnLCBhbmQgcmVtb3ZlIHRoZSBmaWxlIGNvbmZpZy5jYWNoZVxuIik7CisrICAgICAgcHJpbnRmKCIqKiogYmVmb3JlIHJlLXJ1bm5pbmcgY29uZmlndXJlXG4iKTsKKysgICAgfSAKKysgIGVsc2UgaWYgKChnbGliX21ham9yX3ZlcnNpb24gIT0gR0xJQl9NQUpPUl9WRVJTSU9OKSB8fAorKwkgICAoZ2xpYl9taW5vcl92ZXJzaW9uICE9IEdMSUJfTUlOT1JfVkVSU0lPTikgfHwKKysgICAgICAgICAgIChnbGliX21pY3JvX3ZlcnNpb24gIT0gR0xJQl9NSUNST19WRVJTSU9OKSkKKysgICAgeworKyAgICAgIHByaW50ZigiKioqIEdMSUIgaGVhZGVyIGZpbGVzICh2ZXJzaW9uICVkLiVkLiVkKSBkbyBub3QgbWF0Y2hcbiIsCisrCSAgICAgR0xJQl9NQUpPUl9WRVJTSU9OLCBHTElCX01JTk9SX1ZFUlNJT04sIEdMSUJfTUlDUk9fVkVSU0lPTik7CisrICAgICAgcHJpbnRmKCIqKiogbGlicmFyeSAodmVyc2lvbiAlZC4lZC4lZClcbiIsCisrCSAgICAgZ2xpYl9tYWpvcl92ZXJzaW9uLCBnbGliX21pbm9yX3ZlcnNpb24sIGdsaWJfbWljcm9fdmVyc2lvbik7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGlmICgoZ2xpYl9tYWpvcl92ZXJzaW9uID4gbWFqb3IpIHx8CisrICAgICAgICAoKGdsaWJfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKGdsaWJfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKKysgICAgICAgICgoZ2xpYl9tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoZ2xpYl9taW5vcl92ZXJzaW9uID09IG1pbm9yKSAmJiAoZ2xpYl9taWNyb192ZXJzaW9uID49IG1pY3JvKSkpCisrICAgICAgeworKyAgICAgICAgcmV0dXJuIDA7CisrICAgICAgIH0KKysgICAgIGVsc2UKKysgICAgICB7CisrICAgICAgICBwcmludGYoIlxuKioqIEFuIG9sZCB2ZXJzaW9uIG9mIEdMSUIgKCVkLiVkLiVkKSB3YXMgZm91bmQuXG4iLAorKyAgICAgICAgICAgICAgIGdsaWJfbWFqb3JfdmVyc2lvbiwgZ2xpYl9taW5vcl92ZXJzaW9uLCBnbGliX21pY3JvX3ZlcnNpb24pOworKyAgICAgICAgcHJpbnRmKCIqKiogWW91IG5lZWQgYSB2ZXJzaW9uIG9mIEdMSUIgbmV3ZXIgdGhhbiAlZC4lZC4lZC4gVGhlIGxhdGVzdCB2ZXJzaW9uIG9mXG4iLAorKwkgICAgICAgbWFqb3IsIG1pbm9yLCBtaWNybyk7CisrICAgICAgICBwcmludGYoIioqKiBHTElCIGlzIGFsd2F5cyBhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAuZ3RrLm9yZy5cbiIpOworKyAgICAgICAgcHJpbnRmKCIqKipcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogSWYgeW91IGhhdmUgYWxyZWFkeSBpbnN0YWxsZWQgYSBzdWZmaWNpZW50bHkgbmV3IHZlcnNpb24sIHRoaXMgZXJyb3JcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgd3JvbmcgY29weSBvZiB0aGUgZ2xpYi1jb25maWcgc2hlbGwgc2NyaXB0IGlzXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIGJlaW5nIGZvdW5kLiBUaGUgZWFzaWVzdCB3YXkgdG8gZml4IHRoaXMgaXMgdG8gcmVtb3ZlIHRoZSBvbGQgdmVyc2lvblxuIik7CisrICAgICAgICBwcmludGYoIioqKiBvZiBHTElCLCBidXQgeW91IGNhbiBhbHNvIHNldCB0aGUgR0xJQl9DT05GSUcgZW52aXJvbm1lbnQgdG8gcG9pbnQgdG8gdGhlXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIGNvcnJlY3QgY29weSBvZiBnbGliLWNvbmZpZy4gKEluIHRoaXMgY2FzZSwgeW91IHdpbGwgaGF2ZSB0b1xuIik7CisrICAgICAgICBwcmludGYoIioqKiBtb2RpZnkgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmZcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogc28gdGhhdCB0aGUgY29ycmVjdCBsaWJyYXJpZXMgYXJlIGZvdW5kIGF0IHJ1bi10aW1lKSlcbiIpOworKyAgICAgIH0KKysgICAgfQorKyAgcmV0dXJuIDE7CisrfQorK10sLCBub19nbGliPXllcyxbZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIl0pCisrICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorKyAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorKyAgICAgZmkKKysgIGZpCisrICBpZiB0ZXN0ICJ4JG5vX2dsaWIiID0geCA7IHRoZW4KKysgICAgIEFDX01TR19SRVNVTFQoeWVzKQorKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkgICAgIAorKyAgZWxzZQorKyAgICAgQUNfTVNHX1JFU1VMVChubykKKysgICAgIGlmIHRlc3QgIiRHTElCX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorKyAgICAgICBlY2hvICIqKiogVGhlIGdsaWItY29uZmlnIHNjcmlwdCBpbnN0YWxsZWQgYnkgR0xJQiBjb3VsZCBub3QgYmUgZm91bmQiCisrICAgICAgIGVjaG8gIioqKiBJZiBHTElCIHdhcyBpbnN0YWxsZWQgaW4gUFJFRklYLCBtYWtlIHN1cmUgUFJFRklYL2JpbiBpcyBpbiIKKysgICAgICAgZWNobyAiKioqIHlvdXIgcGF0aCwgb3Igc2V0IHRoZSBHTElCX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUiCisrICAgICAgIGVjaG8gIioqKiBmdWxsIHBhdGggdG8gZ2xpYi1jb25maWcuIgorKyAgICAgZWxzZQorKyAgICAgICBpZiB0ZXN0IC1mIGNvbmYuZ2xpYnRlc3QgOyB0aGVuCisrICAgICAgICA6CisrICAgICAgIGVsc2UKKysgICAgICAgICAgZWNobyAiKioqIENvdWxkIG5vdCBydW4gR0xJQiB0ZXN0IHByb2dyYW0sIGNoZWNraW5nIHdoeS4uLiIKKysgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRHTElCX0NGTEFHUyIKKysgICAgICAgICAgTElCUz0iJExJQlMgJEdMSUJfTElCUyIKKysgICAgICAgICAgQUNfVFJZX0xJTksoWworKyNpbmNsdWRlIDxnbGliLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrXSwgICAgICBbIHJldHVybiAoKGdsaWJfbWFqb3JfdmVyc2lvbikgfHwgKGdsaWJfbWlub3JfdmVyc2lvbikgfHwgKGdsaWJfbWljcm9fdmVyc2lvbikpOyBdLAorKyAgICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBjb21waWxlZCwgYnV0IGRpZCBub3QgcnVuLiBUaGlzIHVzdWFsbHkgbWVhbnMiCisrICAgICAgICAgIGVjaG8gIioqKiB0aGF0IHRoZSBydW4tdGltZSBsaW5rZXIgaXMgbm90IGZpbmRpbmcgR0xJQiBvciBmaW5kaW5nIHRoZSB3cm9uZyIKKysgICAgICAgICAgZWNobyAiKioqIHZlcnNpb24gb2YgR0xJQi4gSWYgaXQgaXMgbm90IGZpbmRpbmcgR0xJQiwgeW91J2xsIG5lZWQgdG8gc2V0IHlvdXIiCisrICAgICAgICAgIGVjaG8gIioqKiBMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mIHRvIHBvaW50IgorKyAgICAgICAgICBlY2hvICIqKiogdG8gdGhlIGluc3RhbGxlZCBsb2NhdGlvbiAgQWxzbywgbWFrZSBzdXJlIHlvdSBoYXZlIHJ1biBsZGNvbmZpZyBpZiB0aGF0IgorKyAgICAgICAgICBlY2hvICIqKiogaXMgcmVxdWlyZWQgb24geW91ciBzeXN0ZW0iCisrCSAgZWNobyAiKioqIgorKyAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gaW5zdGFsbGVkLCBpdCBpcyBiZXN0IHRvIHJlbW92ZSBpdCwgYWx0aG91Z2giCisrICAgICAgICAgIGVjaG8gIioqKiB5b3UgbWF5IGFsc28gYmUgYWJsZSB0byBnZXQgdGhpbmdzIHRvIHdvcmsgYnkgbW9kaWZ5aW5nIExEX0xJQlJBUllfUEFUSCIKKysgICAgICAgICAgZWNobyAiKioqIgorKyAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYSBSZWRIYXQgNS4wIHN5c3RlbSwgeW91IHNob3VsZCByZW1vdmUgdGhlIEdUSyBwYWNrYWdlIHRoYXQiCisrICAgICAgICAgIGVjaG8gIioqKiBjYW1lIHdpdGggdGhlIHN5c3RlbSB3aXRoIHRoZSBjb21tYW5kIgorKyAgICAgICAgICBlY2hvICIqKioiCisrICAgICAgICAgIGVjaG8gIioqKiAgICBycG0gLS1lcmFzZSAtLW5vZGVwcyBndGsgZ3RrLWRldmVsIiBdLAorKyAgICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBmYWlsZWQgdG8gY29tcGlsZSBvciBsaW5rLiBTZWUgdGhlIGZpbGUgY29uZmlnLmxvZyBmb3IgdGhlIgorKyAgICAgICAgICBlY2hvICIqKiogZXhhY3QgZXJyb3IgdGhhdCBvY2N1cmVkLiBUaGlzIHVzdWFsbHkgbWVhbnMgR0xJQiB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgorKyAgICAgICAgICBlY2hvICIqKiogb3IgdGhhdCB5b3UgaGF2ZSBtb3ZlZCBHTElCIHNpbmNlIGl0IHdhcyBpbnN0YWxsZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgeW91IgorKyAgICAgICAgICBlY2hvICIqKiogbWF5IHdhbnQgdG8gZWRpdCB0aGUgZ2xpYi1jb25maWcgc2NyaXB0OiAkR0xJQl9DT05GSUciIF0pCisrICAgICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorKyAgICAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorKyAgICAgICBmaQorKyAgICAgZmkKKysgICAgIEdMSUJfQ0ZMQUdTPSIiCisrICAgICBHTElCX0xJQlM9IiIKKysgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisrICBmaQorKyAgQUNfU1VCU1QoR0xJQl9DRkxBR1MpCisrICBBQ19TVUJTVChHTElCX0xJQlMpCisrICBybSAtZiBjb25mLmdsaWJ0ZXN0CisrXSkKK0luZGV4OiBiaXNvbi0yLjQuMi9tNC9pc2MtcG9zaXgubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0yLjQuMi9tNC9pc2MtcG9zaXgubTQKK0BAIC0wLDAgKzEsMjYgQEAKKysjIGlzYy1wb3NpeC5tNCBzZXJpYWwgMiAoZ2V0dGV4dC0wLjExLjIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrIyBUaGlzIGZpbGUgaXMgbm90IG5lZWRlZCB3aXRoIGF1dG9jb25mLTIuNTMgYW5kIG5ld2VyLiAgUmVtb3ZlIGl0IGluIDIwMDUuCisrCisrIyBUaGlzIHRlc3QgcmVwbGFjZXMgdGhlIG9uZSBpbiBhdXRvY29uZi4KKysjIEN1cnJlbnRseSB0aGlzIG1hY3JvIHNob3VsZCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGF1dG9jb25mIG1hY3JvCisrIyBiZWNhdXNlIGdldHRleHQncyBnZXR0ZXh0Lm00IChkaXN0cmlidXRlZCBpbiB0aGUgYXV0b21ha2UgcGFja2FnZSkKKysjIHN0aWxsIHVzZXMgaXQuICBPdGhlcndpc2UsIHRoZSB1c2UgaW4gZ2V0dGV4dC5tNCBtYWtlcyBhdXRvaGVhZGVyCisrIyBnaXZlIHRoZXNlIGRpYWdub3N0aWNzOgorKyMgICBjb25maWd1cmUuaW46NTU2OiBBQ19UUllfQ09NUElMRSB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysjICAgY29uZmlndXJlLmluOjU1NjogQUNfVFJZX1JVTiB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysKKyt1bmRlZmluZShbQUNfSVNDX1BPU0lYXSkKKysKKytBQ19ERUZVTihbQUNfSVNDX1BPU0lYXSwKKysgIFsKKysgICAgZG5sIFRoaXMgdGVzdCByZXBsYWNlcyB0aGUgb2Jzb2xlc2NlbnQgQUNfSVNDX1BPU0lYIGtsdWRnZS4KKysgICAgQUNfQ0hFQ0tfTElCKGNwb3NpeCwgc3RyZXJyb3IsIFtMSUJTPSIkTElCUyAtbGNwb3NpeCJdKQorKyAgXQorKykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uXzIuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uXzIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODJlODgwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb25fMi4zLmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiR05VIFByb2plY3QgcGFyc2VyIGdlbmVyYXRvciAoeWFjYyByZXBsYWNlbWVudCkiCitERVNDUklQVElPTiA9ICJCaXNvbiBpcyBhIGdlbmVyYWwtcHVycG9zZSBwYXJzZXIgZ2VuZXJhdG9yIHRoYXQgY29udmVydHMgYW4gYW5ub3RhdGVkIGNvbnRleHQtZnJlZSBncmFtbWFyIGludG8gXAorYW4gTEFMUigxKSBvciBHTFIgcGFyc2VyIGZvciB0aGF0IGdyYW1tYXIuICBCaXNvbiBpcyB1cHdhcmQgY29tcGF0aWJsZSB3aXRoIFlhY2M6IGFsbCBwcm9wZXJseS13cml0dGVuIFlhY2MgXAorZ3JhbW1hcnMgb3VnaHQgdG8gd29yayB3aXRoIEJpc29uIHdpdGggbm8gY2hhbmdlLiBBbnlvbmUgZmFtaWxpYXIgd2l0aCBZYWNjIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBCaXNvbiB3aXRoIFwKK2xpdHRsZSB0cm91YmxlLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iaXNvbi8iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEiCitTRUNUSU9OID0gImRldmVsIgorREVQRU5EUyA9ICJiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUiCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYmlzb24vYmlzb24tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgIGZpbGU6Ly9iaXNvbi0yLjNfbTQucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyMjMyN2VmZGQ1MDgwZTJiMWFjYjZlNTYwYTA0YjQzYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MmY3OGFhNDc2MWE3NGNlYjdmZGY3NzBmMzU1NGRkODQzMDhjM2I5M2M0MjU1ZTNhNWMxNzU1OGVjZGEyOTNlIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KK2FjcGF0aHMgPSAiLUkgJHtTfS9tNCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vbTQvKmdsLm00CisJY3AgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nZXR0ZXh0L3BvL01ha2VmaWxlLmluLmluICR7U30vcnVudGltZS1wby8KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uXzMuMC40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb25fMy4wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4ZTlhMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uXzMuMC40LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiR05VIFByb2plY3QgcGFyc2VyIGdlbmVyYXRvciAoeWFjYyByZXBsYWNlbWVudCkiCitERVNDUklQVElPTiA9ICJCaXNvbiBpcyBhIGdlbmVyYWwtcHVycG9zZSBwYXJzZXIgZ2VuZXJhdG9yIHRoYXQgY29udmVydHMgYW4gYW5ub3RhdGVkIGNvbnRleHQtZnJlZSBncmFtbWFyIGludG8gXAorYW4gTEFMUigxKSBvciBHTFIgcGFyc2VyIGZvciB0aGF0IGdyYW1tYXIuICBCaXNvbiBpcyB1cHdhcmQgY29tcGF0aWJsZSB3aXRoIFlhY2M6IGFsbCBwcm9wZXJseS13cml0dGVuIFlhY2MgXAorZ3JhbW1hcnMgb3VnaHQgdG8gd29yayB3aXRoIEJpc29uIHdpdGggbm8gY2hhbmdlLiBBbnlvbmUgZmFtaWxpYXIgd2l0aCBZYWNjIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBCaXNvbiB3aXRoIFwKK2xpdHRsZSB0cm91YmxlLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iaXNvbi8iCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCitTRUNUSU9OID0gImRldmVsIgorREVQRU5EUyA9ICJiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9iaXNvbi9iaXNvbi0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbTQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXNyYy1sb2NhbC5tay1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2ggXAorIgorCisjIE5vIHBvaW50IGluIGhhcmRjb2RpbmcgcGF0aCB0byBtNCwganVzdCB1c2UgUEFUSAorRVhUUkFfT0VDT05GICs9ICJNND1tNCIKKworU1JDX1VSSVttZDVzdW1dID0gImMzNDIyMDFkZTEwNGNjOWNlMGEyMWUwYWQxMGQ0MDIxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE3MjQyOGM3OTE3YmRmOWZhOTNjYjgxODFjOTcxYjZlMjI4MzQxMjU4NDhjZjFkMDNjZTEwYjFiYjA3MTZmZTEiCisKK0xERkxBR1NfcHJlcGVuZF9saWJjLXVjbGliYyA9ICIgLWxydCAiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJnZXR0ZXh0LW1pbmltYWwtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KK2FjcGF0aHMgPSAiLUkgJHtTfS9tNCIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCWZvciBpIGluIG1mY2FsYyBjYWxjKysgcnBjYWxjOyBkbyBta2RpciAtcCAke0J9L2V4YW1wbGVzLyRpOyBkb25lCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9iaXNvbiBcCisJCUJJU09OX1BLR0RBVEFESVI9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9iaXNvbgorfQorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYm9vdGNoYXJ0Mi9ib290Y2hhcnQyL2Jvb3RjaGFydGRfc3RvcC5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jvb3RjaGFydDIvYm9vdGNoYXJ0Mi9ib290Y2hhcnRkX3N0b3Auc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFhNzg4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jvb3RjaGFydDIvYm9vdGNoYXJ0Mi9ib290Y2hhcnRkX3N0b3Auc2gKQEAgLTAsMCArMSwxOCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBib290Y2hhcnRkX3N0b3AKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRyZW1vdGVfZnMgJGFsbAorIyBSZXF1aXJlZC1TdG9wOiAKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogU3RvcCBib290Y2hhcnRkIGNvbGxlY3Rpb24KKyMgRGVzY3JpcHRpb246ICAgICAgIFRoaXMgc2NyaXB0IGFjY29tcGFuaWVzIGJvb3RjaGFydGQgZnJvbSBib290Y2hhcnQyLiAKKyMgICAgICAgICAgICAgICAgICAgIGJvb3RjaGFydGQgc2hvdWxkIHN0b3AgZGV0ZWN0IHRoZSBlbmQgb2YgdGhlIGJvb3QgcHJvY2VzcworIyAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBpZiBhIHdpbmRvdyBtYW5hZ2VyIGlzIGxhdW5jaGVkLCBidXQgZm9yCisjICAgICAgICAgICAgICAgICAgICBjb21tYW5kLWxpbmUgb25seSBvcGVyYXRpbmcgc3lzdGVtcywgdGhpcyBzY3JpcHQgc2hvdWxkIGJlCisjICAgICAgICAgICAgICAgICAgICB1c2VkIGluc3RlYWQuCisjIyMgRU5EIElOSVQgSU5GTworCisvc2Jpbi9ib290Y2hhcnRkIHN0b3AKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jvb3RjaGFydDIvYm9vdGNoYXJ0Ml8wLjE0LjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDJfMC4xNC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMGE5ODAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDJfMC4xNC43LmJiCkBAIC0wLDAgKzEsMTU0IEBACisjIENvcHlyaWdodCAoYykgMjAxMyBMRyBFbGVjdHJvbmljcywgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycC4KKworIyBUaGlzIHJlY2lwZSBjcmVhdGVzIHBhY2thZ2VzIGZvciB0aGUgYm9vdGNoYXJ0MiBzeXN0ZW0td2lkZSBwcm9maWxlciBkYWVtb24gCisjIGFuZCByZWxhdGVkIHV0aWxpdGllcy4gRGVwZW5kaW5nIG9uIHRoZSBpbWFnZXMgeW91J3JlIGJ1aWxkaW5nLCBhZGRpdGlvbmFsCisjIGNvbmZpZ3VyYXRpb24gbWF5IGJlIG5lZWRlZCBpbiBvcmRlciB0byB1c2UgaXQuCisjCisjIFBhY2thZ2VzOgorIyAgICogICBib290Y2hhcnQyIC0gVGhlIGRhZW1vbiBpdHNlbGYuCisjICAgKiAgIHB5Ym9vdGNoYXJ0Z3VpIC0gUHl0aG9uIHByb2dyYW0gdG8gdmlzdWFsaXplIGFuZCBkaXNwbGF5IHRoZSBkYXRhCisjICAgICAgIGNvbGxlY3RlZCBieSBib290Y2hhcnQyIG9yIGNvbXBhdGlibGUgZGFlbW9ucyBzdWNoIGFzIHRoZSBvcmlnaW5hbCAKKyMgICAgICAgYm9vdGNoYXJ0LgorIyAgICogICBib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdCAtIEEgU3lzViBpbml0IHNjcmlwdCB0byBzdG9wIGRhdGEgY29sbGVjdGlvbgorIyAgICAgICB3aGVuIGJvb3RpbmcgY29tcGxldGVzIChzZWUgYmVsb3cgZm9yIGRldGFpbHMuKQorIworIyBXaGlsZSBib290Y2hhcnQyIGlzIGRlc2lnbmVkIHRvIHN0b3AgY29sbGVjdGluZyBkYXRhIHJvdWdobHkgd2hlbiB0aGUgYm9vdCAKKyMgcHJvY2VzcyBjb21wbGV0ZXMsIGl0IGlzIG5vdCBleGFjdGx5IGEgc3RvcHdhdGNoLiBJdCBoYXMgYSBsaXN0IG9mIHByb2dyYW1zIAorIyB3aGljaCBhcmUgc3VwcG9zZWQgc2lnbmlmeSB0aGF0IHRoZSBib290IHByb2Nlc3MgaGFzIGNvbXBsZXRlZCAoZm9yIGV4YW1wbGUsCisjIG9wZW5ib3ggb3IgZ25vbWUtc2hlbGwsKSBidXQgaXQgd2FpdHMgYSBmdWxsIDIwIHNlY29uZHMgYWZ0ZXIgc3VjaCBhIHByb2dyYW0KKyMgaXMgbGF1bmNoZWQgYmVmb3JlIHN0b3BwaW5nIGl0c2VsZiwgdG8gY29sbGVjdCBhZGRpdGlvbmFsIGRhdGEuCisjCisjIElmIHlvdSBhcmUgdXNpbmcgYSB3aW5kb3cgbWFuYWdlciBvciBHVUkgd2hpY2ggaXNuJ3QgaW5jbHVkZWQgaW4gYm9vdGNoYXJ0MidzCisjIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlLCB5b3Ugc2hvdWxkIHdyaXRlIGJiYXBwZW5kIGZpbGUgdG8gYW1lbmQKKyMgYm9vdGNoYXJ0ZC5jb25mIGFuZCBhZGQgaXQgdG8gRVhJVF9QUk9DLiBBbiBleGFtcGxlIG9mIHRoaXMgaXMgc2hvd24gaW4gdGhpcworIyByZWNpcGUsIHdoZXJlIHRoZSBNYXRjaGJveCB3aW5kb3cgbWFuYWdlciAodXNlZCBieSBTYXRvKSBpcyBhZGRlZC4KKyMKKyMgSWYgeW91IHdhbnQgZGF0YSBjb2xsZWN0aW9uIHRvIGVuZCBhdCBhIGNlcnRhaW4gcG9pbnQgZXhhY3RseSwgeW91IHNob3VsZAorIyBhcnJhbmdlIGZvciB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gYmUgcnVuOgorIyAgIGJvb3RjaGFydGQgc3RvcAorIyBZb3UgbWlnaHQgc2V0IHRoaXMgY29tbWFuZCB0byBiZSBsYXVuY2hlZCBieSB0aGUgZGVza3RvcCBlbnZpcm9ubWVudCBzaGlwcGVkCisjIG9uIHRoZSBpbWFnZSB5b3UncmUgYnVpbGRpbmcgYWZ0ZXIgdGhlIG90aGVyIHN0YXJ0dXAgcHJvZ3JhbXMgYXJlIGNvbXBsZXRlLgorIyBUaGlzIHdpbGwgbm90IGluY3VyIHRoZSAyMCBzZWNvbmQgd2FpdCBwZXJpb2QgYW5kIHdpbGwgY2F1c2UgYm9vdGNoYXJ0MiB0bworIyBiZWhhdmUgYSBiaXQgbW9yZSBsaWtlIGEgc3RvcHdhdGNoLiBBbiBleGFtcGxlIG9mIHRoaXMgaXMgc2hvd24gaW4gdGhpcyAKKyMgcmVjaXBlLCBzcGVjaWZpY2FsbHkgdGhlIGJvb3RjaGFydGQtc3RvcC1pbml0c2NyaXB0IHBhY2thZ2UsIHdoaWNoIHN0b3BzIGRhdGEKKyMgY29sbGVjdGlvbiBhcyB0aGUgbGFzdCBhY3Rpb24gd2hlbiBzd2l0Y2hpbmcgdG8gcnVubGV2ZWxzIDIgdGhyb3VnaCA1LiBZb3UgY2FuCisjIGFkZCBib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdCB0byBJTUFHRV9JTlNUQUxMIGlmIHlvdSBuZWVkIHRvIHVzZSBpdC4KKyMKKyMgVW5sZXNzIHlvdSdyZSBkb2luZyBzb21ldGhpbmcgc3BlY2lhbCwgaWYgeW91ciBpbWFnZSBkb2VzIG5vdCBsYXVuY2ggYW4gWCAKKyMgd2luZG93IG1hbmFnZXIsIHlvdSB3aWxsIG5lZWQgdG8gYWRkIGJvb3RjaGFydGQtc3RvcC1pbml0c2NyaXB0IHRvIHlvdXIgaW1hZ2UuCisjCisjIEJvb3RjaGFydDIgY2FuIGJlIHN0YXJ0ZWQgaW4gdHdvIHdheXMuIERhdGEgY29sbGVjdGlvbiBjYW4gYmUgaW5pdGlhdGVkIGJ5CisjIHJ1bm5pbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorIyAgIGJvb3RjaGFydGQgc3RhcnQKKyMgSG93ZXZlciwgZm9yIHRoZSBtb3N0IGNvbXBsZXRlIGRhdGEsIHRoZSBib290Y2hhcnQyIGRldmVsb3BlcnMgcmVjb21tZW5kCisjIHJ1bm5pbmcgaXQgYXMgUElEIDEuIFRoaXMgY2FuIGJlIGRvbmUgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8gdGhlIGtlcm5lbCAKKyMgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgaW4gdGhlIGJvb3Rsb2FkZXIgc2V0dXA6CisjICAgaW5pdD0vc2Jpbi9ib290Y2hhcnRkCisjIFdoZW4gaW52b2tlZCB0aGlzIHdheSwgYm9vdGNoYXJ0MiB3aWxsIHNldCBpdHNlbGYgdXAgYW5kIHRoZW4gYXV0b21hdGljYWxseSAKKyMgcnVuIC9zYmluL2luaXQuIEZvciBleGFtcGxlLCB3aGVuIGJvb3RpbmcgdGhlIGRlZmF1bHQgcWVtdXg4NiBpbWFnZSwgb25lIG1pZ2h0CisjIHVzZSBhIGNvbW1hbmQgbGlrZSB0aGlzOgorIyAgIHJ1bnFlbXUgcWVtdXg4NiBib290cGFyYW1zPSJpbml0Y2FsbF9kZWJ1ZyBwcmludGsudGltZT15IHF1aWV0IFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdD0vc2Jpbi9ib290Y2hhcnRkIgorIworIyBOZWl0aGVyIG1ldGhvZCBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCBoZXJlLCBjaG9vc2Ugd2hhdCB3b3JrcyBmb3IgeW91LgorIworIyBJZiB5b3UgYXJlIGJ1aWxkaW5nIHlvdXIgaW1hZ2Ugd2l0aCBzeXN0ZW1kIGluc3RlYWQgb2YgU3lzViBpbml0LCBib290Y2hhcnQyCisjIGluY2x1ZGVzIHN5c3RlbWQgc2VydmljZSBmaWxlcyB0byBiZWdpbiBjb2xsZWN0aW9uIGF1dG9tYXRpY2FsbHkgYXQgYm9vdCBhbmQgCisjIGVuZCBjb2xsZWN0aW9uIGF1dG9tYXRpY2FsbHkgMjAgc2Vjb25kcyBhZnRlciB0aGUgYm9vdCBwcm9jZXNzIGhhcyBjb21wbGV0ZWQuCisjIEhvd2V2ZXIsIGJlIGF3YXJlIHRoYXQgc3lzdGVtZCB0ZW5kcyB0byBzdGFydCBib290Y2hhcnQyIHJlbGF0aXZlbHkgbGF0ZSBpbnRvCisjIHRoZSBib290IHByb2Nlc3MsIHNvIGl0J3MgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHVzZSBib290Y2hhcnQyIGFzIFBJRCAxLiBJZiAKKyMgeW91J3JlIHVzaW5nIHN5c3RlbWQgYW5kIHlvdSB3aXNoIHRvIHVzZSBhbm90aGVyIG1ldGhvZCB0byBzdG9wIGRhdGEKKyMgY29sbGVjdGlvbiBhdCBhIHRpbWUgb2YgeW91ciBjaG9vc2luZywgeW91IG1heSBkbyBzbyBhcyBsb25nIGFzIHlvdSBnZXQgdG8gaXQKKyMgYmVmb3JlIHRoZSAyMCBzZWNvbmQgdGltZW91dCBvZiB0aGUgc3lzdGVtZCBzZXJ2aWNlIGZpbGVzLiBBbHNvLCB5b3UgbWF5IHdyaXRlCisjIGEgYmJhcHBlbmQgdG8gcGF0Y2ggYm9vdGNoYXJ0Mi1kb25lLnRpbWVyLmluIHRvIGluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZQorIyB0aW1lb3V0LiBEZWNyZWFzaW5nIGl0IHRvIDAgd2lsbCBtYWtlIGl0IGJlaGF2ZSBsaWtlCisjIGJvb3RjaGFydGQtc3RvcC1pbml0c2NyaXB0LgorIworIyBCeSBkZWZhdWx0LCB3aGVuIGRhdGEgY29sbGVjdGlvbiBpcyBzdG9wcGVkLCBhIGZpbGUgbmFtZWQgYm9vdGNoYXJ0LnRneiB3aWxsCisjIGJlIGNyZWF0ZWQgaW4gL3Zhci9sb2cuIElmIHB5Ym9vdGNoYXJ0Z3VpIGlzIGluY2x1ZGVkIGluIHlvdXIgaW1hZ2UsCisjIGJvb3RjaGFydC5wbmcgd2lsbCBhbHNvIGJlIGNyZWF0ZWQgYXQgdGhlIHNhbWUgdGltZS4gSG93ZXZlciwgdGhpcyByZXN1bHRzIGluCisjIGEgbm90aWNlYWJsZSBoaXRjaCBvciBwYXVzZSBhdCBib290IHRpbWUsIHdoaWNoIG1heSBub3QgYmUgd2hhdCB5b3Ugd2FudCBvbiBhbgorIyBlbWJlZGRlZCBkZXZpY2UuIFNvIHlvdSBtYXkgcHJlZmVyIHRvIG9taXQgcHlib290Y2hhcnRndWkgZnJvbSB5b3VyIGltYWdlLiBJbgorIyB0aGF0IGNhc2UsIGNvcHkgYm9vdGNoYXJ0LnRneiBvdmVyIHRvIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtIGFuZCBnZW5lcmF0ZQorIyBib290Y2hhcnQucG5nIHRoZXJlLiBUbyBnZXQgcHlib290Y2hhcnRndWkgb24geW91ciBkZXZlbG9wbWVudCBzeXN0ZW0sIHlvdSBjYW4KKyMgZWl0aGVyIGluc3RhbGwgaXQgZGlyZWN0bHkgZnJvbSBzb21lIG90aGVyIHNvdXJjZSwgb3IgYnVpbGQgYm9vdGNoYXJ0Mi1uYXRpdmUKKyMgYW5kIGZpbmQgcHlib290Y2hhcnRndWkgaW4gdGhlIG5hdGl2ZSBzeXNyb290OgorIyAgICBiaXRiYWtlIGJvb3RjaGFydDItbmF0aXZlCisjICAgLi90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vcHlib290Y2hhcnRndWkgL3BhdGgvdG8vYm9vdGNoYXJ0LnRnegorIyBOb3RlIHRoYXQsIHdoZXRoZXIgaW5zdGFsbGVkIG9uIHlvdXIgYnVpbGQgc3lzdGVtIG9yIG9uIHlvdXIgaW1hZ2UsIHRoZSAKKyMgcHlib290Y2hhcnRndWkgcHJvdmlkZWQgYnkgdGhpcyByZWNpcGUgZG9lcyBub3Qgc3VwcG9ydCB0aGUgLWkgb3B0aW9uLiBZb3UgCisjIHdpbGwgbmVlZCB0byBpbnN0YWxsIHB5Ym9vdGNoYXJ0Z3VpIGJ5IG90aGVyIG1lYW5zIGluIG9yZGVyIHRvIHJ1biBpdCBpbgorIyBpbnRlcmFjdGl2ZSBtb2RlLgorCitTVU1NQVJZID0gIkJvb3Rpbmcgc2VxdWVuY2UgYW5kIENQVSxJL08gdXNhZ2UgbW9uaXRvciIKK0RFU0NSSVBUSU9OID0gIk1vbml0b3JzIHdoZXJlIHRoZSBzeXN0ZW0gc3BlbmRzIGl0cyB0aW1lIGF0IHN0YXJ0LCBjcmVhdGluZyBhIGdyYXBoIG9mIGFsbCBwcm9jZXNzZXMsIGRpc2sgdXRpbGl6YXRpb24sIGFuZCB3YWl0IHRpbWUuIgorQVVUSE9SID0gIldvbmhvbmcgS3dvbiA8d29uaG9uZy5rd29uQGxnZS5jb20+IgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL21tZWVrcy9ib290Y2hhcnQiCitMSUNFTlNFID0gIkdQTC0zLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00NGFjNDY3ODMxMTI1NGRiNjJlZGY4ZmQzOWNiODEyNCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL21tZWVrcy9ib290Y2hhcnQuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2Jvb3RjaGFydGRfc3RvcC5zaCBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorU1JDUkVWID0gIjZmMDUwYjY1YWU5ZjI2NjY0NWYwNGYwYWVjYWI5ZWZiODgzNzVmMWMiCisKK2luaGVyaXQgc3lzdGVtZAoraW5oZXJpdCB1cGRhdGUtcmMuZAoraW5oZXJpdCBweXRob25uYXRpdmUKKworIyBUaGUgb25seSByZWFzb24gdG8gYnVpbGQgYm9vdGNoYXJ0Mi1uYXRpdmUgaXMgZm9yIGEgbmF0aXZlIHB5Ym9vdGNoYXJ0Z3VpLgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJib290Y2hhcnQyLnNlcnZpY2UgYm9vdGNoYXJ0Mi1kb25lLnNlcnZpY2UgYm9vdGNoYXJ0Mi1kb25lLnRpbWVyIgorCitVUERBVEVSQ1BOID0gImJvb3RjaGFydGQtc3RvcC1pbml0c2NyaXB0IgorSU5JVFNDUklQVF9OQU1FID0gImJvb3RjaGFydGRfc3RvcC5zaCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDk5IDIgMyA0IDUgLiIKKworIyBXZSB3YW50IG5hdGl2ZSBweWJvb3RjaGFydGd1aSB0byBleGVjdXRlIHdpdGggdGhlIGNvcnJlY3QgUHl0aG9uIGludGVycGV0ZXIuCitkb19jb21waWxlX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworICAgIGVjaG8gIiMhICR7UFlUSE9OfSIgfCBjYXQgLSAke1N9L3B5Ym9vdGNoYXJ0Z3VpLnB5ID4gJHtXT1JLRElSfS90ZW1wX3B5Ym9vdGNoYXJ0Z3VpCisgICAgbXYgJHtXT1JLRElSfS90ZW1wX3B5Ym9vdGNoYXJ0Z3VpICR7U30vcHlib290Y2hhcnRndWkucHkKKyAgICBjaG1vZCAreCAke1N9L3B5Ym9vdGNoYXJ0Z3VpCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisgICAgZXhwb3J0IFBZX0xJQkRJUj0iJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0iCisgICAgZXhwb3J0IEJJTkRJUj0iJHtiaW5kaXJ9IgorICAgIGV4cG9ydCBMSUJESVI9IiR7YmFzZV9saWJkaXJ9IgorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9ICMgbmVlZGVkIGZvciAtbmF0aXZlCisgICAgZXhwb3J0IFBZX0xJQkRJUj0iJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0iCisgICAgZXhwb3J0IEJJTkRJUj0iJHtiaW5kaXJ9IgorICAgIGV4cG9ydCBERVNURElSPSIke0R9IgorICAgIGV4cG9ydCBMSUJESVI9IiR7YmFzZV9saWJkaXJ9IgorCisgICAgb2VfcnVubWFrZSBpbnN0YWxsCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9ib290Y2hhcnRkX3N0b3Auc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisKKyAgICBlY2hvICdFWElUX1BST0M9IiRFWElUX1BST0MgbWF0Y2hib3gtd2luZG93LW1hbmFnZXIiJyA+PiAke0R9JHtzeXNjb25mZGlyfS9ib290Y2hhcnRkLmNvbmYKK30KKworUEFDS0FHRVMgPSsgInB5Ym9vdGNoYXJ0Z3VpIgorRklMRVNfcHlib290Y2hhcnRndWkgKz0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcHlib290Y2hhcnRndWkgJHtiaW5kaXJ9L3B5Ym9vdGNoYXJ0Z3VpIgorUkRFUEVORFNfcHlib290Y2hhcnRndWkgPSAicHl0aG9uLXB5Y2Fpcm8gcHl0aG9uLWNvbXByZXNzaW9uIHB5dGhvbi1pbWFnZSBweXRob24tdGV4dHV0aWxzIHB5dGhvbi1zaGVsbCBweXRob24tY29tcHJlc3Npb24gcHl0aG9uLWNvZGVjcyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLXRhcmdldCArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsICdzeXN2aW5pdC1waWRvZicsICdwcm9jcHMnLCBkKX0iCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgKz0gImxzYiIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgcHl0aG9uLXB5Y2Fpcm8tbmF0aXZlIgorCitQQUNLQUdFUyA9KyAiYm9vdGNoYXJ0ZC1zdG9wLWluaXRzY3JpcHQiCitGSUxFU19ib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdCArPSAiJHtzeXNjb25mZGlyfS9pbml0LmQgJHtzeXNjb25mZGlyfS9yYyouZCIKKworRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9L2Jvb3RjaGFydC9ib290Y2hhcnQtY29sbGVjdG9yIgorRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9L2Jvb3RjaGFydC90bXBmcyIKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7YmFzZV9saWJkaXJ9L2Jvb3RjaGFydC8uZGVidWciCitGSUxFU18ke1BOfS1kb2MgKz0gIiR7ZGF0YWRpcn0vZG9jcyIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJib290Y2hhcnQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idHJmcy10b29scy9idHJmcy10b29scy9maXgtcGFyYWxsZWwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idHJmcy10b29scy9idHJmcy10b29scy9maXgtcGFyYWxsZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjNTNjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzL2ZpeC1wYXJhbGxlbC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDM3M2ViNTEzMjhiNWUxMDUyOTc2M2NhZDQ0MTIxMGU2YjBlZmIyNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTEgRmViIDIwMTUgMjI6MDg6NDEgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGU6IGZpeCBmb3IgcGFyYWxsZWwgYnVpbGQKKworRml4ZWQ6Citta2ZzLmM6MzAwOjQ2OiBlcnJvcjogJ0JUUkZTX0JVSUxEX1ZFUlNJT04nIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorICBmcHJpbnRmKHN0ZGVyciwgIm1rZnMuYnRyZnMsIHBhcnQgb2YgJXNcbiIsIEJUUkZTX0JVSUxEX1ZFUlNJT04pOworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDg2MGEzOTAuLjhhNmZiZDcgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0xNDIsNyArMTQyLDcgQEAgZWxzZQorIAljaGVja19lY2hvID0gdHJ1ZQorIGVuZGlmCisgCistJS5vLmQ6ICUuYworKyUuby5kOiAlLmMgdmVyc2lvbi5oCisgCSQoUSkkKENDKSAtTU0gLU1HIC1NRiAkQCAtTVQgJChAOi5vLmQ9Lm8pIC1NVCAkKEA6Lm8uZD0uc3RhdGljLm8pIC1NVCAkQCAkKENGTEFHUykgJDwKKyAKKyAuYy5vOgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzXzQuMS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnRyZnMtdG9vbHMvYnRyZnMtdG9vbHNfNC4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjNjIyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzXzQuMS4yLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiQ2hlY2tzdW1taW5nIENvcHkgb24gV3JpdGUgRmlsZXN5c3RlbSB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJCdHJmcyBpcyBhIG5ldyBjb3B5IG9uIHdyaXRlIGZpbGVzeXN0ZW0gZm9yIExpbnV4IGFpbWVkIGF0IFwKK2ltcGxlbWVudGluZyBhZHZhbmNlZCBmZWF0dXJlcyB3aGlsZSBmb2N1c2luZyBvbiBmYXVsdCB0b2xlcmFuY2UsIHJlcGFpciBhbmQgXAorZWFzeSBhZG1pbmlzdHJhdGlvbi4gXAorVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHV0aWxpdGllcyAobWtmcywgZnNjaywgYnRyZnNjdGwpIHVzZWQgdG8gd29yayB3aXRoIFwKK2J0cmZzIGFuZCBhbiB1dGlsaXR5IChidHJmcy1jb252ZXJ0KSB0byBtYWtlIGEgYnRyZnMgZmlsZXN5c3RlbSBmcm9tIGFuIGV4dDMuIgorCitIT01FUEFHRSA9ICJodHRwczovL2J0cmZzLndpa2kua2VybmVsLm9yZyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZjYjAyZGM1NTJhMDQxZGVlMjdlNGI4NWM3Mzk2MDY3IgorU0VDVElPTiA9ICJiYXNlIgorREVQRU5EUyA9ICJ1dGlsLWxpbnV4IGF0dHIgZTJmc3Byb2dzIGx6byBhY2wiCisKK1NSQ1JFViA9ICI3ZjEzMjhjY2I1ZDE1OWVmZTg1MGQ0ZWFlYTliNDliYmU4YzQxODFlIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQva2RhdmUvYnRyZnMtcHJvZ3MuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1wYXJhbGxlbC5wYXRjaCBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwa2djb25maWcKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtZG9jdW1lbnRhdGlvbiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgICBzaCBhdXRvZ2VuLnNoCit9CisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9idWlsZC1jb21wYXJlX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvYnVpbGQtY29tcGFyZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjMzc4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvYnVpbGQtY29tcGFyZV9naXQuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJCdWlsZCBSZXN1bHQgQ29tcGFyZSBTY3JpcHQiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgc2NyaXB0cyB0byBmaW5kIG91dCBpZiB0aGUgYnVpbGQgcmVzdWx0XAorZGlmZmVycyB0byBhIGZvcm1lciBidWlsZC4iCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vb3BlblNVU0UvYnVpbGQtY29tcGFyZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL29wZW5TVVNFL2J1aWxkLWNvbXBhcmUuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL1JlbmFtZS1ycG0tY2hlY2suc2gtdG8tcGtnLWRpZmYuc2gucGF0Y2g7c3RyaXBsZXZlbD0xIFwKKyAgICAgICAgICAgZmlsZTovL0lnbm9yZS1EV0FSRi1zZWN0aW9ucy5wYXRjaDtzdHJpcGxldmVsPTEgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1BZGQtc3VwcG9ydC1mb3ItZGViLWFuZC1pcGstcGFja2FnaW5nLnBhdGNoIFwKKyAgICAgICAgICAgIgorUEFUQ0hUT09MID0gImdpdCIKKworU1JDUkVWID0gImM1MzUyYzA1NGM2ZWYxNTczNWRhMzFiNzZkNmQ4ODYyMGY0YWZmMGEiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0JCQ0xBU1NFWFRFTkQgKz0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9LyR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gNzU1IGZ1bmN0aW9ucy5zaCAke0R9LyR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gNzU1IHBrZy1kaWZmLnNoICR7RH0vJHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSA3NTUgc2FtZS1idWlsZC1yZXN1bHQuc2ggJHtEfS8ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDc1NSBzcnBtLWNoZWNrLnNoICR7RH0vJHtiaW5kaXJ9Cit9CisKK1JERVBFTkRTXyR7UE59ICs9ICJiYXNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy8wMDAxLUFkZC1zdXBwb3J0LWZvci1kZWItYW5kLWlway1wYWNrYWdpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzLzAwMDEtQWRkLXN1cHBvcnQtZm9yLWRlYi1hbmQtaXBrLXBhY2thZ2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzE1MjE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy8wMDAxLUFkZC1zdXBwb3J0LWZvci1kZWItYW5kLWlway1wYWNrYWdpbmcucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSAwMmRiYzdlMzQ3OGU0MDlkNmY1ZTNlMWM1M2RhZGRmODgzOGJlOTk5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUdWUsIDEgU2VwIDIwMTUgMTI6MDQ6MzMgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHN1cHBvcnQgZm9yIGRlYiBhbmQgaXBrIHBhY2thZ2luZworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBmdW5jdGlvbnMuc2ggfCAxNSArKysrKysrKysrKysrKysKKyBwa2ctZGlmZi5zaCAgfCAgNiArKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Z1bmN0aW9ucy5zaCBiL2Z1bmN0aW9ucy5zaAoraW5kZXggMDYwNzlkZi4uODVjOTAwMyAxMDA2NDQKKy0tLSBhL2Z1bmN0aW9ucy5zaAorKysrIGIvZnVuY3Rpb25zLnNoCitAQCAtODUsNiArODUsMTMgQEAgZnVuY3Rpb24gdW5wYWNrYWdlKCkKKyAgICAgICAgICAgICBDUElPX09QVFM9Ii0tZXh0cmFjdCAtLXVuY29uZGl0aW9uYWwgLS1wcmVzZXJ2ZS1tb2RpZmljYXRpb24tdGltZSAtLW1ha2UtZGlyZWN0b3JpZXMgLS1xdWlldCIKKyAgICAgICAgICAgICBycG0yY3BpbyAkZmlsZSB8IGNwaW8gJHtDUElPX09QVFN9CisgICAgICAgICAgICAgOzsKKysgICAgICAgICouaXBrfCouZGViKQorKyAgICAgICAgICAgIGFyIHggJGZpbGUKKysgICAgICAgICAgICB0YXIgeGYgY29udHJvbC50YXIuZ3oKKysgICAgICAgICAgICBybSBjb250cm9sLnRhci5negorKyAgICAgICAgICAgIHRhciB4ZiBkYXRhLnRhci5negorKyAgICAgICAgICAgIHJtIGRhdGEudGFyLmd6CisrICAgICAgICAgICAgOzsKKyAgICAgZXNhYworICAgICBwb3BkIDE+L2Rldi9udWxsCisgfQorQEAgLTI1NSw0ICsyNjIsMTIgQEAgZnVuY3Rpb24gY21wX3NwZWMgKCkKKyAgICAgcm0gJGZpbGUxICRmaWxlMgorICAgICByZXR1cm4gJFJFUworIH0KKysKKytmdW5jdGlvbiBhZGp1c3RfY29udHJvbGZpbGUgKCkgeworKyAgICBjYXQgJDEvY29udHJvbCB8IHNlZCAnL15WZXJzaW9uOiAvZCcgPiAkMS9jb250cm9sLmZpeGVkCisrICAgIG12ICQxL2NvbnRyb2wuZml4ZWQgJDEvY29udHJvbAorKyAgICBjYXQgJDIvY29udHJvbCB8IHNlZCAnL15WZXJzaW9uOiAvZCcgPiAkMi9jb250cm9sLmZpeGVkCisrICAgIG12ICQyL2NvbnRyb2wuZml4ZWQgJDIvY29udHJvbAorK30KKysKKyAjIHZpbTogdHc9NjY2IHRzPTIgZXQKK2RpZmYgLS1naXQgYS9wa2ctZGlmZi5zaCBiL3BrZy1kaWZmLnNoCitpbmRleCAwZjFmYTc2Li4zY2YxMGFhIDEwMDY0NAorLS0tIGEvcGtnLWRpZmYuc2gKKysrKyBiL3BrZy1kaWZmLnNoCitAQCAtMTM4LDYgKzEzOCwxMiBAQCBlY2hvICJFeHRyYWN0aW5nIHBhY2thZ2VzIgorIHVucGFja2FnZSAkb2xkcGtnICRkaXIvb2xkCisgdW5wYWNrYWdlICRuZXdwa2cgJGRpci9uZXcKKyAKKytjYXNlICRvbGRwa2cgaW4KKysgICouZGVifCouaXBrKQorKyAgICAgYWRqdXN0X2NvbnRyb2xmaWxlICRkaXIvb2xkICRkaXIvbmV3CisrICA7OworK2VzYWMKKysKKyAjIGZpbGVzIGlzIHNldCBpbiBjbXBfc3BlYyBmb3IgcnBtcywgc28gaWYgUkVTIGlzIGVtcHR5IHdlIHNob3VsZCBhc3N1bWUKKyAjIGl0IHdhc24ndCBhbiBycG0gYW5kIHBpY2sgYWxsIGZpbGVzIGZvciBjb21wYXJpc29uLgorIGlmIFsgLXogJFJFUyBdOyB0aGVuCistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvSWdub3JlLURXQVJGLXNlY3Rpb25zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9JZ25vcmUtRFdBUkYtc2VjdGlvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RkYTFhYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvSWdub3JlLURXQVJGLXNlY3Rpb25zLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gMDE1NzE1Njk0ZWFkZDcxNGI5MDNmMzBhZGU4NzZlMDczOGQ0NDk3NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBNb24sIDUgSmFuIDIwMTUgMTU6MDk6MjAgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gSWdub3JlIERXQVJGIHNlY3Rpb25zLgorCitBc3N1bWUgZm9yIG5vdyB0aGF0IHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIERXQVJGIHNlY3Rpb25zIGR1ZSB0byBwYXRoCitkaWZmZXJlbmNlcy4gSG93ZXZlciwgaW4gdGhlIGNhc2UgdGhlIHRvb2wgaXMgcmFuIG9uIGEgImRlYnVnIiBwYWNrYWdlCitpdCB3aWxsIG1vc3QgbGlrZWx5IGZhbHNlbHkgc2F5IHRoZSBwYWNrYWdlcyBoYXZlIG5vIGRpZmZlcmVuY2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorCitUaGUgcGFja2FnZSBkaWZmZXJlbmNlIHRvb2wgaXMgY29ycmVjdGx5IGxhYmVsbGluZyB0aGUgcGFja2FnZXMgYXMgZGlmZmVyZW50Cit3aGVuIHRoZSBEV0FSRiBzZWN0aW9ucyBkb24ndCBtYXRjaCBkdWUgdG8gcGF0aHMuIFRoZSBwYXRocyBpbiB0aGUgZGVidWcgaW5mbworc2hvdWxkIGFjdHVhbGx5IGJlIG1hZGUgdG8gYmUgdGhlIHNhbWUgdXNpbmcgY29tcGlsZSBmbGFncyBvciBzb21lIG90aGVyCittZWNoYW5pc20uCisKK0hvd2V2ZXIsIHRvIG1ha2UgdGhlIHRvb2wgbW9yZSB1c2VmdWwgdG8gWW9jdG8gdW50aWwgdGhlIHdvcmsgY2FuIGJlIGRvbmUKK3RvIGVuc3VyZSBpZGVudGljYWwgcGF0aHMgaW4gZGVidWcgc2VjdGlvbnMsIHRoaXMgcGF0Y2ggaXMgYmVpbmcgYXBwbGllZC4KKworU2lnbmVkLW9mZi1ieTogUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIHBrZy1kaWZmLnNoIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvcGtnLWRpZmYuc2ggYi9wa2ctZGlmZi5zaAoraW5kZXggNTYwMzVjMS4uMGYxZmE3NiAxMDA3NTUKKy0tLSBhL3BrZy1kaWZmLnNoCisrKysgYi9wa2ctZGlmZi5zaAorQEAgLTY1OCw3ICs2NTgsNyBAQCBjaGVja19zaW5nbGVfZmlsZSgpCisgICAgICAgIGVjaG8gIiIgPiRmaWxlMQorICAgICAgICBlY2hvICIiID4kZmlsZTIKKyAgICAgICAgIyBEb24ndCBjb21wYXJlIC5idWlsZC1pZCBhbmQgLmdudV9kZWJ1Z2xpbmsgc2VjdGlvbnMKKy0gICAgICAgc2VjdGlvbnM9IiQob2JqZHVtcCAtcyBuZXcvJGZpbGUgfCBncmVwICJDb250ZW50cyBvZiBzZWN0aW9uIC4qOiIgfCBzZWQgLXIgInMsLiogKC4qKTosXDEsZyIgfCBncmVwIC12IC1lICJcLmJ1aWxkLWlkIiAtZSAiXC5nbnVfZGVidWdsaW5rIiB8IHRyICJcbiIgIiAiKSIKKysgICAgICAgc2VjdGlvbnM9IiQob2JqZHVtcCAtcyBuZXcvJGZpbGUgfCBncmVwICJDb250ZW50cyBvZiBzZWN0aW9uIC4qOiIgfCBzZWQgLXIgInMsLiogKC4qKTosXDEsZyIgfCBncmVwIC12IC1lICJcLmJ1aWxkLWlkIiAtZSAiXC5nbnVfZGVidWdsaW5rIiAtZSAiXC5kZWJ1Z19hYmJyZXYiIC1lICJcLmRlYnVnX2FyYW5nZXMiIC1lICJcLmRlYnVnX2ZyYW1lIiAtZSAiXC5kZWJ1Z19pbmZvIiAtZSAiXC5kZWJ1Z19saW5lIiAtZSAiXC5kZWJ1Z19sb2MiIC1lICJcLmRlYnVnX21hY2luZm8iIC1lICJcLmRlYnVnX3B1Ym5hbWVzIiAtZSAiXC5kZWJ1Z19wdWJ0eXBlcyIgLWUgIlwuZGVidWdfcmFuZ2VzIiAgLWUgIlwuZGVidWdfc3RyIiB8IHRyICJcbiIgIiAiKSIKKyAgICAgICAgZm9yIHNlY3Rpb24gaW4gJHNlY3Rpb25zOyBkbworICAgICAgICAgICBvYmpkdW1wIC1zIC1qICRzZWN0aW9uIG9sZC8kZmlsZSB8IHNlZCAicyxeb2xkLywsIiA+ICRmaWxlMQorICAgICAgICAgICBvYmpkdW1wIC1zIC1qICRzZWN0aW9uIG5ldy8kZmlsZSB8IHNlZCAicyxebmV3LywsIiA+ICRmaWxlMgorLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL1JlbmFtZS1ycG0tY2hlY2suc2gtdG8tcGtnLWRpZmYuc2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL1JlbmFtZS1ycG0tY2hlY2suc2gtdG8tcGtnLWRpZmYuc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZmM2E5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvUmVuYW1lLXJwbS1jaGVjay5zaC10by1wa2ctZGlmZi5zaC5wYXRjaApAQCAtMCwwICsxLDE1OTkgQEAKK0Zyb20gNGRlM2RmNWExYjM2MWNkMDlhMDgxZjBlMGJkYjk0Y2JmNjg0ZWQ0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxOSBGZWIgMjAxNSAwMDozNDo0NyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBSZW5hbWUgcnBtLWNoZWNrLnNoIHRvIHBrZy1kaWZmLnNoLgorCitUaGUgdG9vbCBub3cgYWNjZXB0cyBwYWNrYWdlIGlucHV0IG90aGVyIHRoYW4gcnBtLCBzbyBjaGFuZ2UgdGhlIG5hbWUKK3doaWNoIGNvdWxkIGJlIG1pc2xlYWRpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vb3BlblNVU0UvYnVpbGQtY29tcGFyZS9wdWxsc10KKworU2lnbmVkLW9mZi1ieTogUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4KKworVXBkYXRlZCBmb3IgcnBtLWNoZWNrLnNoLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJ1aWxkLWNvbXBhcmUuc3BlYyAgIHwgICAgMiArLQorIHBrZy1kaWZmLnNoICAgICAgICAgIHwgIDc2NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIHJwbS1jaGVjay5zaCAgICAgICAgIHwgIDc2NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgc2FtZS1idWlsZC1yZXN1bHQuc2ggfCAgICA0ICstCisgNCBmaWxlcyBjaGFuZ2VkLCA3NjggaW5zZXJ0aW9ucygrKSwgNzY3IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBwa2ctZGlmZi5zaAorIGRlbGV0ZSBtb2RlIDEwMDc1NSBycG0tY2hlY2suc2gKKworZGlmZiAtLWdpdCBhL2J1aWxkLWNvbXBhcmUuc3BlYyBiL2J1aWxkLWNvbXBhcmUuc3BlYworaW5kZXggMTRhOTdlOS4uNWY0N2NhMSAxMDA2NDQKKy0tLSBhL2J1aWxkLWNvbXBhcmUuc3BlYworKysrIGIvYnVpbGQtY29tcGFyZS5zcGVjCitAQCAtMjUsNyArMjUsNyBAQCBWZXJzaW9uOiAgICAgICAgMjAxNS4wMi4xMAorIFJlbGVhc2U6ICAgICAgICAwCisgU291cmNlMTogICAgICAgIENPUFlJTkcKKyBTb3VyY2UyOiAgICAgICAgc2FtZS1idWlsZC1yZXN1bHQuc2gKKy1Tb3VyY2UzOiAgICAgICAgcnBtLWNoZWNrLnNoCisrU291cmNlMzogICAgICAgIHBrZy1kaWZmLnNoCisgU291cmNlNDogICAgICAgIGZ1bmN0aW9ucy5zaAorIFNvdXJjZTU6ICAgICAgICBzcnBtLWNoZWNrLnNoCisgQnVpbGRSb290OiAgICAgICV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS1idWlsZAorZGlmZiAtLWdpdCBhL3BrZy1kaWZmLnNoIGIvcGtnLWRpZmYuc2gKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41NjAzNWMxCistLS0gL2Rldi9udWxsCisrKysgYi9wa2ctZGlmZi5zaAorQEAgLTAsMCArMSw3NjUgQEAKKysjISAvYmluL2Jhc2gKKysjCisrIyBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgU1VTRSBMaW51eCBQcm9kdWN0IEdtYkgsIEdlcm1hbnkuCisrIyBMaWNlbnNlZCB1bmRlciBHUEwgdjIsIHNlZSBDT1BZSU5HIGZpbGUgZm9yIGRldGFpbHMuCisrIworKyMgV3JpdHRlbiBieSBNaWNoYWVsIE1hdHogYW5kIFN0ZXBoYW4gQ29vbG8KKysjIEVuaGFuY2VkIGJ5IEFuZHJlYXMgSmFlZ2VyCisrCisrRlVOQ1RJT05TPSR7MCUvKn0vZnVuY3Rpb25zLnNoCisrCisrY2hlY2tfYWxsPQorK2Nhc2UgJDEgaW4KKysgIC1hIHwgLS1jaGVjay1hbGwpCisrICAgIGNoZWNrX2FsbD0xCisrICAgIHNoaWZ0CisrZXNhYworKworK2lmIHRlc3QgIiQjIiAhPSAyOyB0aGVuCisrICAgZWNobyAidXNhZ2U6ICQwIFstYXwtLWNoZWNrLWFsbF0gb2xkLnJwbSBuZXcucnBtIgorKyAgIGV4aXQgMQorK2ZpCisrCisrc2VsZl9zY3JpcHQ9JChjZCAkKGRpcm5hbWUgJDApOyBlY2hvICQocHdkKS8kKGJhc2VuYW1lICQwKSkKKysKKytzb3VyY2UgJEZVTkNUSU9OUworKworK29sZHBrZz1gcmVhZGxpbmsgLWYgJDFgCisrbmV3cGtnPWByZWFkbGluayAtZiAkMmAKKytyZW5hbWVfc2NyaXB0PWBta3RlbXBgCisrCisraWYgdGVzdCAhIC1mICIkb2xkcGtnIjsgdGhlbgorKyAgICBlY2hvICJjYW4ndCBvcGVuICQxIgorKyAgICBleGl0IDEKKytmaQorKworK2lmIHRlc3QgISAtZiAiJG5ld3BrZyI7IHRoZW4KKysgICAgZWNobyAiY2FuJ3Qgb3BlbiAkMiIKKysgICAgZXhpdCAxCisrZmkKKysKKysjdXNhZ2UgdW5qYXIgPGZpbGU+CisrZnVuY3Rpb24gdW5qYXIoKQorK3sKKysgICAgbG9jYWwgZmlsZQorKyAgICBmaWxlPSQxCisrCisrICAgIGlmIFtbICQodHlwZSAtcCBmYXN0amFyKSBdXTsgdGhlbgorKyAgICAgICAgVU5KQVI9ZmFzdGphcgorKyAgICBlbGlmIFtbICQodHlwZSAtcCBqYXIpIF1dOyB0aGVuCisrICAgICAgICBVTkpBUj1qYXIKKysgICAgZWxpZiBbWyAkKHR5cGUgLXAgdW56aXApIF1dOyB0aGVuCisrICAgICAgICBVTkpBUj11bnppcAorKyAgICBlbHNlCisrICAgICAgICBlY2hvICJFUlJPUjogamFyLCBmYXN0amFyLCBvciB1bnppcCBpcyBub3QgaW5zdGFsbGVkICh0cnlpbmcgZmlsZSAkZmlsZSkiCisrICAgICAgICBleGl0IDEKKysgICAgZmkKKysKKysgICAgY2FzZSAkVU5KQVIgaW4KKysgICAgICAgIGphcnxmYXN0amFyKQorKyAgICAgICAgIyBlY2hvIGphciAteGYgJGZpbGUKKysgICAgICAgICR7VU5KQVJ9IC14ZiAkZmlsZQorKyAgICAgICAgOzsKKysgICAgICAgIHVuemlwKQorKyAgICAgICAgdW56aXAgLW9xcSAkZmlsZQorKyAgICAgICAgOzsKKysgICAgZXNhYworK30KKysKKysjIGxpc3QgZmlsZXMgaW4gZGlyZWN0b3J5CisrI3VzYWdlIHVuamFyX2wgPGZpbGU+CisrZnVuY3Rpb24gdW5qYXJfbCgpCisreworKyAgICBsb2NhbCBmaWxlCisrICAgIGZpbGU9JDEKKysKKysgICAgaWYgW1sgJCh0eXBlIC1wIGZhc3RqYXIpIF1dOyB0aGVuCisrICAgICAgICBVTkpBUj1mYXN0amFyCisrICAgIGVsaWYgW1sgJCh0eXBlIC1wIGphcikgXV07IHRoZW4KKysgICAgICAgIFVOSkFSPWphcgorKyAgICBlbGlmIFtbICQodHlwZSAtcCB1bnppcCkgXV07IHRoZW4KKysgICAgICAgIFVOSkFSPXVuemlwCisrICAgIGVsc2UKKysgICAgICAgIGVjaG8gIkVSUk9SOiBqYXIsIGZhc3RqYXIsIG9yIHVuemlwIGlzIG5vdCBpbnN0YWxsZWQgKHRyeWluZyBmaWxlICRmaWxlKSIKKysgICAgICAgIGV4aXQgMQorKyAgICBmaQorKworKyAgICBjYXNlICRVTkpBUiBpbgorKyAgICAgICAgamFyfGZhc3RqYXIpCisrICAgICAgICAke1VOSkFSfSAtdGYgJGZpbGUKKysgICAgICAgIDs7CisrICAgICAgICB1bnppcCkKKysgICAgICAgIHVuemlwIC1sICRmaWxlCisrICAgICAgICA7OworKyAgICBlc2FjCisrfQorKworK2ZpbHRlcl9kaXNhc20oKQorK3sKKysgICBzZWQgLWUgJ3MvXiAqWzAtOWEtZl1cKzovLycgLWUgJ3MvXCQweFswLTlhLWZdXCsvJHNvbWV0aGluZy8nIC1lICdzL2NhbGxxICpbMC05YS1mXVwrL2NhbGxxIC8nIC1lICdzLyMgKlswLTlhLWZdXCsvIyAgLycgLWUgJ3MvXCgweFwpXD9bMC05YS1mXVwrKC9vZmZzZXQoLycgLWUgJ3MvWzAtOWEtZl1cKyA8LzwvJyAtZSAncy9ePFwoLipcKT46L1wxOi8nIC1lICdzLzxcKC4qXCkrMHhbMC05YS1mXVwrPi88XDEgKyBvZnM+LycgCisrfQorKworK2VjaG8gIkNvbXBhcmluZyBgYmFzZW5hbWUgJG9sZHBrZ2AgdG8gYGJhc2VuYW1lICRuZXdwa2dgIgorKworK2Nhc2UgJG9sZHBrZyBpbgorKyAgKi5ycG0pCisrICAgICBjbXBfc3BlYyAkcmVuYW1lX3NjcmlwdCAkb2xkcGtnICRuZXdwa2cKKysgICAgIFJFUz0kPworKyAgICAgY2FzZSAkUkVTIGluCisrICAgICAgIDApCisrICAgICAgICAgIGVjaG8gIlJQTSBtZXRhIGluZm9ybWF0aW9uIGlzIGlkZW50aWNhbCIKKysgICAgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKysgICAgICAgICAgICAgZXhpdCAwCisrICAgICAgICAgIGZpCisrICAgICAgICAgIDs7CisrICAgICAgIDEpCisrICAgICAgICAgIGVjaG8gIlJQTSBtZXRhIGluZm9ybWF0aW9uIGlzIGRpZmZlcmVudCIKKysgICAgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKysgICAgICAgICAgICAgZXhpdCAxCisrICAgICAgICAgIGZpCisrICAgICAgICAgIDs7CisrICAgICAgIDIpCisrICAgICAgICAgIGVjaG8gIlJQTSBmaWxlIGNoZWNrc3VtIGRpZmZlcnMuIgorKyAgICAgICAgICBSRVM9MAorKyAgICAgICAgICA7OworKyAgICAgICAqKQorKyAgICAgICAgICBlY2hvICJXcm9uZyBleGl0IGNvZGUhIgorKyAgICAgICAgICBleGl0IDEKKysgICAgICAgICAgOzsKKysgICAgIGVzYWMKKysgICAgIDs7CisrZXNhYworKworK2ZpbGUxPWBta3RlbXBgCisrZmlsZTI9YG1rdGVtcGAKKysKKytkaXI9YG1rdGVtcCAtZGAKKytlY2hvICJFeHRyYWN0aW5nIHBhY2thZ2VzIgorK3VucGFja2FnZSAkb2xkcGtnICRkaXIvb2xkCisrdW5wYWNrYWdlICRuZXdwa2cgJGRpci9uZXcKKysKKysjIGZpbGVzIGlzIHNldCBpbiBjbXBfc3BlYyBmb3IgcnBtcywgc28gaWYgUkVTIGlzIGVtcHR5IHdlIHNob3VsZCBhc3N1bWUKKysjIGl0IHdhc24ndCBhbiBycG0gYW5kIHBpY2sgYWxsIGZpbGVzIGZvciBjb21wYXJpc29uLgorK2lmIFsgLXogJFJFUyBdOyB0aGVuCisrICAgIG9sZGZpbGVzPWBjZCAkZGlyL29sZDsgZmluZCAuIC10eXBlIGZgCisrICAgIG5ld2ZpbGVzPWBjZCAkZGlyL25ldzsgZmluZCAuIC10eXBlIGZgCisrCisrICAgIGZpbGVzPWBlY2hvIC1lICIkb2xkZmlsZXNcbiRuZXdmaWxlcyIgfCBzb3J0IC11YAorK2ZpCisrCisrY2QgJGRpcgorK2Jhc2ggJHJlbmFtZV9zY3JpcHQKKysKKytkZmlsZT1gbWt0ZW1wYAorKworK2RpZmZfdHdvX2ZpbGVzKCkKKyt7CisrICBpZiAhIGNtcCAtcyBvbGQvJGZpbGUgbmV3LyRmaWxlOyB0aGVuCisrICAgICBlY2hvICIkZmlsZSBkaWZmZXJzICgkZnR5cGUpIgorKyAgICAgaGV4ZHVtcCAtQyBvbGQvJGZpbGUgPiAkZmlsZTEKKysgICAgIGhleGR1bXAgLUMgbmV3LyRmaWxlID4gJGZpbGUyCisrICAgICBkaWZmIC11ICRmaWxlMSAkZmlsZTIgfCBoZWFkIC1uIDIwMAorKyAgICAgcmV0dXJuIDEKKysgIGZpCisrICByZXR1cm4gMAorK30KKysKKyt0cmltX21hbl9maXJzdF9saW5lKCkKKyt7CisrICAgICMgSGFuZGxlcyB0aGUgZmlyc3QgbGluZSBpZiBpdCBpcyBsaWtlOgorKyAgICAjLlwiIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IFBvZDo6TWFuIDIuMjggKFBvZDo6U2ltcGxlIDMuMjgpCisrICAgICMuXCIgRE8gTk9UIE1PRElGWSBUSElTIEZJTEUhICBJdCB3YXMgZ2VuZXJhdGVkIGJ5IGhlbHAybWFuIDEuNDMuMy4KKysgICAgbG9jYWwgZj0kMQorKyAgICBzZWQgLWkgLWUgJzF7CisrICAgIHN8XlwuXFwiW1s6Ymxhbms6XV1cK0F1dG9tYXRpY2FsbHlbWzpibGFuazpdXWdlbmVyYXRlZFtbOmJsYW5rOl1dYnlbWzpibGFuazpdXVBvZDo6TWFuW1s6Ymxhbms6XV0uKnwuXFwiIE92ZXJseSB2ZXJib3NlIFBvZDo6TWFufAorKyAgICBzfF5cLlxcIltbOmJsYW5rOl1dXCtET1tbOmJsYW5rOl1dTk9UW1s6Ymxhbms6XV1NT0RJRllbWzpibGFuazpdXVRISVNbWzpibGFuazpdXUZJTEUhW1s6Ymxhbms6XV1cK0l0W1s6Ymxhbms6XV13YXNbWzpibGFuazpdXWdlbmVyYXRlZFtbOmJsYW5rOl1dYnlbWzpibGFuazpdXWhlbHAybWFuW1s6Ymxhbms6XV0uKnwuXFwiIE92ZXJseSB2ZXJib3NlIGhlbHAybWFufAorKyAgICB9JyAkZgorK30KKysKKyt0cmltX21hbl9USCgpCisreworKyAgICAjIEhhbmRsZXMgbGluZXMgbGlrZToKKysgICAgIyAuVEggZGViaGVscGVyIDcgIjIwMTAtMDItMjciICI3LjQuMTUiICJEZWJoZWxwZXIiCisrICAgICMgLlRIIERJUk1OR1ItQ0xJRU5UIDEgMjAxMC0wMi0yNyAiRGlybW5nciAxLjAuMyIgIkdOVSBQcml2YWN5IEd1YXJkIgorKyAgICAjIC5USCBjY21ha2UgMSAiTWFyY2ggMDYsIDIwMTAiICJjY21ha2UgMi44LjEtcmMzIgorKyAgICAjIC5USCBRRU1VLUlNRyAxICIyMDEwLTAzLTE0IiAiICIgIiAiCisrICAgICMgLlRIIGtkZWNtYWtlIDEgIk1heSAwNywgMjAxMCIgImNtYWtlIDIuOC4xIgorKyAgICAjIC5USCAiYXBwZW5kZXIuaCIgMyAiMTIgTWF5IDIwMTAiICJWZXJzaW9uIDEuMi4xIiAibG9nNGMiIFwiIC0qLSBucm9mZiAtKi0KKysgICAgIyAuVEjigIIiYXBwZW5kZXIuaCLigIIz4oCCIlR1ZeKAgkF1Z+KAgjMx4oCCMjAxMCLigIIiVmVyc2lvbuKAgjEuMi4xIuKAgiJsb2c0YyLigIJcIuKAgi0qLeKAgm5yb2Zm4oCCLSotCisrICAgICMgLlRIICJPRkZMSU5FSU1BUCIgIjEiICIxMSBNYXkgMjAxMCIgIkpvaG4gR29lcnplbiIgIk9mZmxpbmVJTUFQIE1hbnVhbCIKKysgICAgIyAuVEggZ3YgM2d1aWxlICIxMyBNYXkgMjAxMCIKKysgICAgIy5USCAiR0lUXC1BUkNISU1QT1JUIiAiMSIgIjA5LzEzLzIwMTAiICJHaXQgMVwmLjdcJi4xIiAiR2l0IE1hbnVhbCIKKysgICAgIyAuVEggTERJUkVDVE9SRCA4ICIyMDEwLTEwLTIwIiAicGVybCB2NS4xMi4yIiAiVXNlciBDb250cmlidXRlZCBQZXJsIERvY3VtZW50YXRpb24iCisrICAgICMgLlRIIGNjbWFrZSAxICJGZWJydWFyeSAwNSwgMjAxMiIgImNjbWFrZSAyLjguNyIKKysgICAgIyAuVEjigIIiYXBwZW5kZXIuaCLigIIz4oCCIlR1ZeKAgkF1Z+KAgjMx4oCCMjAxMCLigIIiVmVyc2lvbuKAgjEuMi4xIuKAgiJsb2c0YyLigIJcIuKAgi0qLeKAgm5yb2Zm4oCCLSotCisrICAgICMgLlRIIEFSQ0ggIjEiICJTZXB0ZW1iZXIgMjAxMCIgIkdOVSBjb3JldXRpbHMgOC41IiAiVXNlciBDb21tYW5kcyIKKysgICAgIyAuVEggIkdDTS1DQUxJQlJBVEUiICIxIiAiMDMgRmVicnVhcnkgMjAxMiIgIiIgIiIKKysgICAgIy5USCBMb2NhbGU6OlBvNGE6OlhtbC5wbSAzcG0gIjIwMTUtMDEtMzAiICJQbzRhIFRvb2xzIiAiUG80YSBUb29scyIKKysgICAgbG9jYWwgZj0kMQorKyAgICAjICguVEggICBxdW90ZWQgc2VjdGlvbikgKHF1b3RlZF9kYXRlKSgqKQorKyAgICBzZWQgLWkgLWUgJ3N8XlwoW1s6Ymxhbms6XV0qXC5USFtbOmJsYW5rOl1dXCsiW14iXVwrIltbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woIlteIl1cKyJcKVwoW1s6Ymxhbms6XV1cKy4qXClcP3xcMSAicXEyMDAwLTAxLTAxIlwzfCcgJGYKKysgICAgIyAoLlRIIHVucXVvdGVkIHNlY3Rpb24pIChxdW90ZWRfZGF0ZSkoKikKKysgICAgc2VkIC1pIC1lICdzfF5cKFtbOmJsYW5rOl1dKlwuVEhbWzpibGFuazpdXVwrW14iXVteWzpibGFuazpdXVwrW1s6Ymxhbms6XV1cK1teWzpibGFuazpdXVwrXClbWzpibGFuazpdXVwrXCgiW14iXVwrIlwpXChbWzpibGFuazpdXVwrLipcKVw/fFwxICJ1cTIwMDAtMDItMDIiXDN8JyAkZgorKyAgICAjICguVEggICBxdW90ZWQgc2VjdGlvbikgKHVucXVvdGVkX2RhdGUpKCopCisrICAgIHNlZCAtaSAtZSAnc3xeXChbWzpibGFuazpdXSpcLlRIW1s6Ymxhbms6XV1cKyJbXiJdXCsiW1s6Ymxhbms6XV1cK1teWzpibGFuazpdXVwrXClbWzpibGFuazpdXVwrXChbXiJdW15bOmJsYW5rOl1dXCtcKVwoW1s6Ymxhbms6XV1cKy4qXClcP3xcMSBxdTIwMDAtMDMtMDNcM3wnICRmCisrICAgICMgKC5USCB1bnF1b3RlZCBzZWN0aW9uKSAodW5xdW90ZWRfZGF0ZSkoKikKKysgICAgc2VkIC1pIC1lICdzfF5cKFtbOmJsYW5rOl1dKlwuVEhbWzpibGFuazpdXVwrW14iXVteWzpibGFuazpdXVwrW1s6Ymxhbms6XV1cK1teWzpibGFuazpdXVwrXClbWzpibGFuazpdXVwrXChbXiJdW15bOmJsYW5rOl1dXCtcKVwoW1s6Ymxhbms6XV1cKy4qXClcP3xcMSB1dTIwMDAtMDQtMDRcM3wnICRmCisrfQorKworK3N0cmlwX251bWJlcmVkX2FuY2hvcnMoKQorK3sKKysgICMgUmVtb3ZlIG51bWJlcmVkIGFuY2hvcnMgb24gRG9jYm9vayAvIEhUTUwgZmlsZXMuCisrICAjIFRoaXMgc2hvdWxkIGJlIHNhdmUgc2luY2Ugd2UgcmVtb3ZlIHRoZW0gZnJvbSBvbGQgYW5kIG5ldyBmaWxlcy4KKysgICMgQSB0cmFpbGluZyA8L2E+IG9yIDwvZGl2PiB0YWcgd2lsbCBzdGF5IGFsc28gb24gYm90aCBmaWxlcy4KKysgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICBzZWQgLWkgLWUgJ3MlPFsgXSphWyBdXCtuYW1lW148XSpbMC05XVwrW148XSolJWcnIFwKKysgICAgIC1lICdzJTxbIF0qYVsgXVwraHJlZltePF0qI1tePF0qWzAtOV1cK1tePF0qJSVnJyBcCisrICAgICAtZSAncyU8W148XSppZD0iZnRuXC5bXjxdKlswLTldXCtbXjxdKiUlZycgJGYKKysgIGRvbmUKKyt9CisrCisrCisrY2hlY2tfY29tcHJlc3NlZF9maWxlKCkKKyt7CisrICBsb2NhbCBmaWxlPSQxCisrICBsb2NhbCBleHQ9JDIKKysgIGxvY2FsIHRtcGRpcj1gbWt0ZW1wIC1kYAorKyAgbG9jYWwgZnR5cGUKKysgIGxvY2FsIHJldD0wCisrICBlY2hvICIkZXh0IGZpbGUgd2l0aCBvZGQgZmlsZW5hbWU6ICRmaWxlIgorKyAgaWYgdGVzdCAtbiAiJHRtcGRpciI7IHRoZW4KKysgICAgbWtkaXIgJHRtcGRpci97b2xkLG5ld30KKysgICAgY3AgLS1wYXJlbnRzIC0tZGVyZWZlcmVuY2Ugb2xkLyRmaWxlICR0bXBkaXIvCisrICAgIGNwIC0tcGFyZW50cyAtLWRlcmVmZXJlbmNlIG5ldy8kZmlsZSAkdG1wZGlyLworKyAgICBpZiBwdXNoZCAkdG1wZGlyID4gL2Rldi9udWxsIDsgdGhlbgorKyAgICAgIGNhc2UgIiRleHQiIGluCisrICAgICAgICBiejIpCisrICAgICAgICAgIG12IG9sZC8kZmlsZXssLmJ6Mn0KKysgICAgICAgICAgbXYgbmV3LyRmaWxleywuYnoyfQorKyAgICAgICAgICBiemlwMiAtZCBvbGQvJGZpbGUuYnoyCisrICAgICAgICAgIGJ6aXAyIC1kIG5ldy8kZmlsZS5iejIKKysgICAgICAgICAgOzsKKysgICAgICAgIGd6aXApCisrICAgICAgICAgIG12IG9sZC8kZmlsZXssLmd6fQorKyAgICAgICAgICBtdiBuZXcvJGZpbGV7LC5nen0KKysgICAgICAgICAgZ3ppcCAtZCBvbGQvJGZpbGUuZ3oKKysgICAgICAgICAgZ3ppcCAtZCBuZXcvJGZpbGUuZ3oKKysgICAgICAgICAgOzsKKysgICAgICAgIHh6KQorKyAgICAgICAgICBtdiBvbGQvJGZpbGV7LC54en0KKysgICAgICAgICAgbXYgbmV3LyRmaWxleywueHp9CisrICAgICAgICAgIHh6IC1kIG9sZC8kZmlsZS54egorKyAgICAgICAgICB4eiAtZCBuZXcvJGZpbGUueHoKKysgICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgICAgZnR5cGU9YC91c3IvYmluL2ZpbGUgb2xkLyRmaWxlIHwgc2VkICdzQF5bXjpdXCs6W1s6Ymxhbms6XV0qQEAnYAorKyAgICAgIGNhc2UgJGZ0eXBlIGluCisrICAgICAgICBQT1NJWFwgdGFyXCBhcmNoaXZlKQorKyAgICAgICAgICBlY2hvICIkZXh0IGNvbnRlbnQgaXM6ICRmdHlwZSIKKysgICAgICAgICAgbXYgb2xkLyRmaWxleywudGFyfQorKyAgICAgICAgICBtdiBuZXcvJGZpbGV7LC50YXJ9CisrICAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlfS50YXI7IHRoZW4KKysgICAgICAgICAgICByZXQ9MQorKyAgICAgICAgICBmaQorKyAgICAgICAgICA7OworKyAgICAgICAgQVNDSUlcIGNwaW9cIGFyY2hpdmVcICopCisrICAgICAgICAgIGVjaG8gIiRleHQgY29udGVudCBpczogJGZ0eXBlIgorKyAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5jcGlvfQorKyAgICAgICAgICBtdiBuZXcvJGZpbGV7LC5jcGlvfQorKyAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZX0uY3BpbzsgdGhlbgorKyAgICAgICAgICAgIHJldD0xCisrICAgICAgICAgIGZpCisrICAgICAgICAgIDs7CisrICAgICAgICAqKQorKyAgICAgICAgICBlY2hvICJ1bmhhbmRsZWQgJGV4dCBjb250ZW50OiAkZnR5cGUiCisrICAgICAgICAgIGlmICEgZGlmZl90d29fZmlsZXM7IHRoZW4KKysgICAgICAgICAgICByZXQ9MQorKyAgICAgICAgICBmaQorKyAgICAgICAgICA7OworKyAgICAgIGVzYWMKKysgICAgICBwb3BkID4gL2Rldi9udWxsCisrICAgIGZpCisrICAgIHJtIC1yZiAiJHRtcGRpciIKKysgIGZpCisrICByZXR1cm4gJHJldAorK30KKysKKytjaGVja19zaW5nbGVfZmlsZSgpCisreworKyAgbG9jYWwgZmlsZT0iJDEiCisrICBjYXNlICRmaWxlIGluCisrICAgICouc3BlYykKKysgICAgICAgc2VkIC1pIC1lICJzLFJlbGVhc2U6LiokcmVsZWFzZTEsUmVsZWFzZTogQFJFTEVBU0VALCIgb2xkLyRmaWxlCisrICAgICAgIHNlZCAtaSAtZSAicyxSZWxlYXNlOi4qJHJlbGVhc2UyLFJlbGVhc2U6IEBSRUxFQVNFQCwiIG5ldy8kZmlsZQorKyAgICAgICA7OworKyAgICAqLmV4ZS5tZGJ8Ki5kbGwubWRiKQorKyAgICAgICAjIEp1c3QgZGVidWcgaW5mb3JtYXRpb24sIHdlIGNhbiBza2lwIHRoZW0KKysgICAgICAgZWNobyAiJGZpbGUgc2tpcHBlZCBhcyBkZWJ1ZyBmaWxlLiIKKysgICAgICAgcmV0dXJuIDAKKysgICAgICAgOzsKKysgICAgKi5hKQorKyAgICAgICBmbGlzdD1gYXIgdCBuZXcvJGZpbGVgCisrICAgICAgIHB3ZD0kUFdECisrICAgICAgIGZkaXI9YGRpcm5hbWUgJGZpbGVgCisrICAgICAgIGNkIG9sZC8kZmRpcgorKyAgICAgICBhciB4IGBiYXNlbmFtZSAkZmlsZWAKKysgICAgICAgY2QgJHB3ZC9uZXcvJGZkaXIKKysgICAgICAgYXIgeCBgYmFzZW5hbWUgJGZpbGVgCisrICAgICAgIGNkICRwd2QKKysgICAgICAgZm9yIGYgaW4gJGZsaXN0OyBkbworKyAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICRmZGlyLyRmOyB0aGVuCisrICAgICAgICAgICAgIHJldHVybiAxCisrICAgICAgICAgIGZpCisrICAgICAgIGRvbmUKKysgICAgICAgcmV0dXJuIDAKKysgICAgICAgOzsKKysgICAgKi5jcGlvKQorKyAgICAgICBmbGlzdD1gY3BpbyAtLXF1aWV0IC0tbGlzdCAtLWZvcmNlLWxvY2FsIDwgIm5ldy8kZmlsZSJgCisrICAgICAgIHB3ZD0kUFdECisrICAgICAgIGZkaXI9JGZpbGUuZXh0cmFjdC4kUFBJRC4kJAorKyAgICAgICBta2RpciBvbGQvJGZkaXIgbmV3LyRmZGlyCisrICAgICAgIGNkIG9sZC8kZmRpcgorKyAgICAgICBjcGlvIC0tcXVpZXQgLS1leHRyYWN0IC0tZm9yY2UtbG9jYWwgPCAiLi4vJHtmaWxlIyMqL30iCisrICAgICAgIGNkICRwd2QvbmV3LyRmZGlyCisrICAgICAgIGNwaW8gLS1xdWlldCAtLWV4dHJhY3QgLS1mb3JjZS1sb2NhbCA8ICIuLi8ke2ZpbGUjIyovfSIKKysgICAgICAgY2QgJHB3ZAorKyAgICAgICBsb2NhbCByZXQ9MAorKyAgICAgICBmb3IgZiBpbiAkZmxpc3Q7IGRvCisrICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAkZmRpci8kZjsgdGhlbgorKyAgICAgICAgICAgcmV0PTEKKysgICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCisrICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICBmaQorKyAgICAgICAgIGZpCisrICAgICAgIGRvbmUKKysgICAgICAgcm0gLXJmIG9sZC8kZmRpciBuZXcvJGZkaXIKKysgICAgICAgcmV0dXJuICRyZXQKKysgICAgICAgOzsKKysgICAgKi50YXJ8Ki50YXIuYnoyfCoudGFyLmd6fCoudGd6fCoudGJ6MikKKysgICAgICAgZmxpc3Q9YHRhciB0ZiBuZXcvJGZpbGVgCisrICAgICAgIHB3ZD0kUFdECisrICAgICAgIGZkaXI9YGRpcm5hbWUgJGZpbGVgCisrICAgICAgIGNkIG9sZC8kZmRpcgorKyAgICAgICB0YXIgeGYgYGJhc2VuYW1lICRmaWxlYAorKyAgICAgICBjZCAkcHdkL25ldy8kZmRpcgorKyAgICAgICB0YXIgeGYgYGJhc2VuYW1lICRmaWxlYAorKyAgICAgICBjZCAkcHdkCisrICAgICAgIGxvY2FsIHJldD0wCisrICAgICAgIGZvciBmIGluICRmbGlzdDsgZG8KKysgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICRmZGlyLyRmOyB0aGVuCisrICAgICAgICAgICByZXQ9MQorKyAgICAgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKysgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgIGZpCisrICAgICAgICAgZmkKKysgICAgICAgZG9uZQorKyAgICAgICByZXR1cm4gJHJldAorKyAgICAgICA7OworKyAgICAqLnppcHwqLmphcnwqLndhcikKKysgICAgICAgY2Qgb2xkCisrICAgICAgIHVuamFyX2wgLi8kZmlsZSB8c29ydCA+IGZsaXN0CisrICAgICAgICMgIDEwLTA1LTIwMTAgMTQ6MzkKKysgICAgICAgc2VkIC1pIC1lICJzLCBbMC05XVswLTldLVswLTldWzAtOV0tWzAtOV1cKyBbMC05XVswLTldOlswLTldWzAtOV0gLCBkYXRlICwiIGZsaXN0CisrICAgICAgICMgMjAxMi0wMi0wMyAwNzo1OQorKyAgICAgICBzZWQgLWkgLWUgInMsIDIwWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldWzAtOV0gWzAtOV1bMC05XTpbMC05XVswLTldICwgZGF0ZSAsIiBmbGlzdAorKyAgICAgICBjZCAuLi9uZXcKKysgICAgICAgdW5qYXJfbCAuLyRmaWxlIHxzb3J0PiBmbGlzdAorKyAgICAgICBzZWQgLWkgLWUgInMsIFswLTldWzAtOV0tWzAtOV1bMC05XS1bMC05XVwrIFswLTldWzAtOV06WzAtOV1bMC05XSAsIGRhdGUgLDsgIiBmbGlzdAorKyAgICAgICBzZWQgLWkgLWUgInMsIDIwWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldWzAtOV0gWzAtOV1bMC05XTpbMC05XVswLTldICwgZGF0ZSAsIiBmbGlzdAorKyAgICAgICBjZCAuLgorKyAgICAgICBpZiAhIGNtcCAtcyBvbGQvZmxpc3QgbmV3L2ZsaXN0OyB0aGVuCisrICAgICAgICAgIGVjaG8gIiRmaWxlIGhhcyBkaWZmZXJlbnQgZmlsZSBsaXN0IgorKyAgICAgICAgICBkaWZmIC11IG9sZC9mbGlzdCBuZXcvZmxpc3QKKysgICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgZmkKKysgICAgICAgZmxpc3Q9YGdyZXAgZGF0ZSBuZXcvZmxpc3QgfCBzZWQgLWUgJ3MsLiogZGF0ZSAsLCdgCisrICAgICAgIHB3ZD0kUFdECisrICAgICAgIGZkaXI9YGRpcm5hbWUgJGZpbGVgCisrICAgICAgIGNkIG9sZC8kZmRpcgorKyAgICAgICB1bmphciBgYmFzZW5hbWUgJGZpbGVgCisrICAgICAgIGNkICRwd2QvbmV3LyRmZGlyCisrICAgICAgIHVuamFyIGBiYXNlbmFtZSAkZmlsZWAKKysgICAgICAgY2QgJHB3ZAorKyAgICAgICBsb2NhbCByZXQ9MAorKyAgICAgICBmb3IgZiBpbiAkZmxpc3Q7IGRvCisrICAgICAgICAgaWYgdGVzdCAtZiBuZXcvJGZkaXIvJGYgJiYgISBjaGVja19zaW5nbGVfZmlsZSAkZmRpci8kZjsgdGhlbgorKyAgICAgICAgICAgcmV0PTEKKysgICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCisrICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICBmaQorKyAgICAgICAgIGZpCisrICAgICAgIGRvbmUKKysgICAgICAgcmV0dXJuICRyZXQ7OworKyAgICAgKi5weWN8Ki5weW8pCisrICAgICAgICBwZXJsIC1lICJvcGVuIGZoLCAnKzwnLCAnb2xkLyRmaWxlJzsgc2VlayBmaCwgNCwgU0VFS19TRVQ7IHByaW50IGZoICcwMDAwJzsiCisrICAgICAgICBwZXJsIC1lICJvcGVuIGZoLCAnKzwnLCAnbmV3LyRmaWxlJzsgc2VlayBmaCwgNCwgU0VFS19TRVQ7IHByaW50IGZoICcwMDAwJzsiCisrICAgICAgICA7OworKyAgICAgKi5iejIpCisrICAgICAgICBidW56aXAyIC1jIG9sZC8kZmlsZSA+IG9sZC8ke2ZpbGUvLmJ6Mi99CisrICAgICAgICBidW56aXAyIC1jIG5ldy8kZmlsZSA+IG5ldy8ke2ZpbGUvLmJ6Mi99CisrICAgICAgICBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGUvLmJ6Mi99CisrICAgICAgICByZXR1cm4gJD8KKysgICAgICAgIDs7CisrICAgICAqLmd6KQorKyAgICAgICAgZ3VuemlwIC1jIG9sZC8kZmlsZSA+IG9sZC8ke2ZpbGUvLmd6L30KKysgICAgICAgIGd1bnppcCAtYyBuZXcvJGZpbGUgPiBuZXcvJHtmaWxlLy5nei99CisrICAgICAgICBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGUvLmd6L30KKysgICAgICAgIHJldHVybiAkPworKyAgICAgICAgOzsKKysgICAgICoucnBtKQorKwkkc2VsZl9zY3JpcHQgLWEgb2xkLyRmaWxlIG5ldy8kZmlsZQorKyAgICAgICAgcmV0dXJuICQ/CisrICAgICAgICA7OworKyAgICAgKnBuZykKKysJIyBUcnkgdG8gcmVtb3ZlIHRpbWVzdGFtcHMsIG9ubHkgaWYgY29udmVydCBmcm9tIEltYWdlTWFnaWNrIGlzIGluc3RhbGxlZAorKyAgICAgICAgaWYgW1sgJCh0eXBlIC1wIGNvbnZlcnQpIF1dOyB0aGVuCisrCSAgY29udmVydCBvbGQvJGZpbGUgK3NldCBkYXRlOmNyZWF0ZSArc2V0IGRhdGU6bW9kaWZ5IG9sZC8ke2ZpbGUvLnBuZy9fbi5wbmd9CisrCSAgY29udmVydCBvbGQvJGZpbGUgK3NldCBkYXRlOmNyZWF0ZSArc2V0IGRhdGU6bW9kaWZ5IG5ldy8ke2ZpbGUvLnBuZy9fbi5wbmd9CisrCSAgaWYgISBjbXAgLXMgb2xkLyR7ZmlsZS8ucG5nL19uLnBuZ30gbmV3LyR7ZmlsZS8ucG5nL19uLnBuZ307IHRoZW4KKysJICAgICAgZWNobyAiJGZpbGUgZGlmZmVycyAoJGZ0eXBlKSIKKysJICAgICAgaGV4ZHVtcCAtQyBvbGQvJHtmaWxlLy5wbmcvX24ucG5nfSA+ICRmaWxlMQorKwkgICAgICBoZXhkdW1wIC1DIG5ldy8ke2ZpbGUvLnBuZy9fbi5wbmd9ID4gJGZpbGUyCisrCSAgICAgIGRpZmYgLXUgJGZpbGUxICRmaWxlMiB8IGhlYWQgLW4gMjAKKysJICAgICAgcmV0dXJuIDEKKysJICBmaQorKwkgIHJldHVybiAwCisrCWZpCisrICAgICAgICA7OworKyAgICAgL3Vzci9zaGFyZS9sb2NhbGUvKi9MQ19NRVNTQUdFUy8qLm1vfC91c3Ivc2hhcmUvbG9jYWxlLWJ1bmRsZS8qL0xDX01FU1NBR0VTLyoubW8pCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgc2VkIC1pIC1lICJzLFBPVC1DcmVhdGlvbi1EYXRlOiAuLi4uLS4uLS4uIC4uOi4uKy4uLi4sUE9ULUNyZWF0aW9uLURhdGU6IDE5NzAtMDEtMDEgMDA6MDArMDAwMCwiICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC91c3Ivc2hhcmUvZG9jL3BhY2thZ2VzLyovKi5odG1sfFwKKysgICAgIC91c3Ivc2hhcmUvZG9jL2tkZS9IVE1MLyovKi8qLmh0bWx8L3Vzci9zaGFyZS9kb2MvKi9odG1sLyouaHRtbCkKKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysgICAgICAgICAjIHRleGkyaHRtbCBvdXRwdXQsIGUuZy4gaW4ga3ZtLCBpbmRlbnQsIHFlbXUKKysJIHNlZCAtaSAtZSAic3xePCEtLSBDcmVhdGVkIG9uIC4qLCAyMC4uIGJ5IHRleGkyaHRtbCAuXC4uLnw8IS0tIENyZWF0ZWQgb24gQXVndXN0IDcsIDIwMDkgYnkgdGV4aTJodG1sIDEuODJ8IiAkZgorKwkgc2VkIC1pIC1lICdzfF4gKlRoaXMgZG9jdW1lbnQgd2FzIGdlbmVyYXRlZCBieSA8ZW0+QXV0b2J1aWxkPC9lbT4gb24gPGVtPi4qLCAyMC4uPC9lbT4gdXNpbmcgPGEgaHJlZj0iaHR0cDovL3d3dy5ub25nbnUub3JnL3RleGkyaHRtbC8iPjxlbT50ZXhpMmh0bWwgLlwuLi48L2VtPjwvYT4uJHwgIFRoaXMgZG9jdW1lbnQgd2FzIGdlbmVyYXRlZCBieSA8ZW0+QXV0b2J1aWxkPC9lbT4gb24gPGVtPkF1Z3VzdCA3LCAyMDA5PC9lbT4gdXNpbmcgPGEgaHJlZj0iaHR0cDovL3d3dy5ub25nbnUub3JnL3RleGkyaHRtbC8iPjxlbT50ZXhpMmh0bWwgMS44MjwvZW0+PC9hPi58JyAkZgorKwkgIyBkb3h5Z2VuIGRvY3UsIGUuZy4gaW4gbGlic3NoIGFuZCBsb2c0YworKwkgc2VkIC1pIC1lICdzfEdlbmVyYXRlZCBvbiAuLi4gLi4uIFswLTldKiBbMC05XSo6WzAtOV1bMC05XTpbMC05XVswLTldIDIwWzAtOV1bMC05XSBmb3IgfEdlbmVyYXRlZCBvbiBNb24gTWF5IDEwIDIwOjQ1OjAwIDIwMTAgZm9yIHwnICRmCisrCSAjIEdlbmVyYXRlZCBvbiBTYXQgQXVnIDE0IDIwMTAgMTY6NDk6NDggZm9yIGxpYnNzaAorKwkgc2VkIC1pIC1lICdzfEdlbmVyYXRlZCBvbiAuLi4gLi4uIFswLTldKiAyMFswLTldWzAtOV0gWzAtOV0qOlswLTldWzAtOV06WzAtOV1bMC05XSBmb3IgfEdlbmVyYXRlZCBvbiBNb24gTWF5IDEwIDIwOjQ1OjAwIDIwMTAgZm9yIHwnICRmCisrICAgICAgIGRvbmUKKysgICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworKyAgICAgICA7OworKyAgICAgL3Vzci9zaGFyZS9qYXZhZG9jLyouaHRtbCB8XAorKyAgICAgL3Vzci9zaGFyZS9qYXZhZG9jLyovKi5odG1sfC91c3Ivc2hhcmUvamF2YWRvYy8qLyovKi5odG1sKQorKyAgICAgICBzdHJpcF9udW1iZXJlZF9hbmNob3JzCisrICAgICAgICMgVGhlcmUgYXJlIG1vcmUgdGltZXN0YW1wcyBpbiBodG1sLCBzbyBmYXIgd2UgaGFuZGxlIG9ubHkgc29tZSBwcmltaXRpdmUgdmVyc2lvbnMuCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgIyBKYXZhZG9jOgorKyAgICAgICAgICAjIDxoZWFkPgorKyAgICAgICAgICAjIDwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKHZlcnNpb24gMS43LjBfNzUpIG9uIFR1ZSBGZWIgMDMgMDI6MjA6MTIgR01UIDIwMTUgLS0+CisrICAgICAgICAgICMgPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUdWUgRmViIDAzIDAwOjAyOjQ4IEdNVCAyMDE1IC0tPgorKyAgICAgICAgICAjIDxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMTUtMDItMDMiPgorKyAgICAgICAgICAjIDwvaGVhZD4KKysgICAgICAgICAgc2VkIC1pIC1lICcKKysgICAgICAgICAgICAvXjxoZWFkPi97CisrICAgICAgICAgICAgICA6IG5leHQKKysgICAgICAgICAgICAgIG4KKysgICAgICAgICAgICAgIC9ePFwvaGVhZD4veworKyAgICAgICAgICAgICAgICBiIGVuZF9oZWFkCisrICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICBzL15cKDwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2NcKSBcKChcKGJ1aWxkXHx2ZXJzaW9uXCkgWzAtOS5fXVwrKSBvbiAuLi4gLi4uIC4uIC4uOi4uOi4uIFwoR01UXHxVVENcKSAuLi4uXCkgXCgtLT5cKS9cMSBzb21lLWRhdGUtcmVtb3ZlZC1ieS1idWlsZC1jb21wYXJlIFw1LworKyAgICAgICAgICAgICAgdCBuZXh0CisrICAgICAgICAgICAgICBzL15cKDwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2NcKSBcKG9uIC4uLiAuLi4gLi4gLi46Li46Li4gXChHTVRcfFVUQ1wpIC4uLi5cKSBcKC0tPlwpL1wxIHNvbWUtZGF0ZS1yZW1vdmVkLWJ5LWJ1aWxkLWNvbXBhcmUgXDMvCisrICAgICAgICAgICAgICB0IG5leHQKKysgICAgICAgICAgICAgIHMvXjxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IlswLTldXHs0XH0tWzAtOV1cezJcfS1bMC05XVx7Mlx9Ij4vPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0ic29tZS1kYXRlLXJlbW92ZWQtYnktYnVpbGQtY29tcGFyZSI+LworKyAgICAgICAgICAgICAgYiBuZXh0CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIDogZW5kX2hlYWQKKysgICAgICAgICAgJyAkZgorKyAgICAgICAgICMgR2pkb2MgSHRtbERvY2xldDoKKysJIHNlZCAtaSAtZSAncyVHZW5lcmF0ZWQgYnkgR2pkb2MgSHRtbERvY2xldCBbMC05LC5dKiwgcGFydCBvZiA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY2xhc3NwYXRoL2NwLXRvb2xzLyIgdGl0bGU9IiIgdGFyZ2V0PSJfdG9wIj5HTlUgQ2xhc3NwYXRoIFRvb2xzPC9hPiwgb24gLiosIDIwLi4gWzAtOV0qOi4uOi4uIFwoYVx8cFwpXC5tXC4gR01ULiVHZW5lcmF0ZWQgYnkgR2pkb2MuJScgJGYKKysJIHNlZCAtaSAtZSAncyU8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL2dudS5vcmcvLy9EVEQgWEhUTUwgMS4xIHBsdXMgVGFyZ2V0IDEuMC8vRU4iXCguKlwpR05VIENsYXNzcGF0aCBUb29sczwvYT4sIG9uIFtBLVpdW2Etel0qIFswLTldKiwgMjA/PyBbMC05XSo6Pz86Pz8gXChhfHBcKVwubVwuIEdNVC48L3A+JTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vZ251Lm9yZy8vL0RURCBYSFRNTCAxLjEgcGx1cyBUYXJnZXQgMS4wLy9FTiJcMUdOVSBDbGFzc3BhdGggVG9vbHM8L2E+LCBvbiBKYW51YXJ5IDEsIDIwMDkgMDowMDowMCBhLm0uIEdNVC48L3A+JScgJGYKKysJIHNlZCAtaSAtZSAncyU8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL2dudS5vcmcvLy9EVERcKC4qR05VIENsYXNzcGF0aCBUb29sczwvYT5cKSwgb24gW2EtekEtWl0qIFswLTldWzAtOV0sIDIwLi4gWzAtOV0qOi4uOi4uIFwoYVx8cFwpXC5tXC4gR01ULjwvcD4lPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9nbnUub3JnLy8vRFREXDEsb24gTWF5IDEsIDIwMTAgMToxMTo0MiBwLm0uIEdNVC48L3A+JScgJGYKKysJICMgZGVwcmVjYXRlZC1saXN0IGlzIHJhbmRvbWx5IG9yZGVyZWQsIHNvcnQgaXQgZm9yIGNvbXBhcmlzb24KKysJIGNhc2UgJGYgaW4KKysJICAgKi9kZXByZWNhdGVkLWxpc3QuaHRtbCkKKysJICAgICBzb3J0IC1vICRmICRmCisrCSAgICAgOzsKKysJIGVzYWMKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgL3Vzci9zaGFyZS9qYXZhZG9jL2dqZG9jLnByb3BlcnRpZXMgfFwKKysgICAgIC91c3Ivc2hhcmUvamF2YWRvYy8qL2dqZG9jLnByb3BlcnRpZXMpCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrCSBzZWQgLWkgLWUgJ3N8XiNbQS1aXVthLXpdXHsyXH0gW0EtWl1bYS16XVx7Mlx9IFswLTldXHsyXH0gLi46Li46Li4gR01UIDIwLi4kfCNGcmkgSmFuIDAxIDExOjI3OjM2IEdNVCAyMDA5fCcgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgKi9mb250cy5zY2FsZXwqL2ZvbnRzLmRpcnwqL2VuY29kaW5ncy5kaXIpCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgIyBzb3J0IGZpbGVzIGJlZm9yZSBjb21wYXJpbmcKKysgICAgICAgICBzb3J0IC1vICRmICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC92YXIvYWRtL3BlcmwtbW9kdWxlcy8qKQorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgICAgIHNlZCAtaSAtZSAnc3xePWhlYWQyIC4uLiAuLi4gLi4gLi46Li46Li4gLi4uLjogQzxNb2R1bGU+fD1oZWFkMiBXZWQgSnVsICAxIDAwOjAwOjAwIDIwMDk6IEM8TW9kdWxlPnwnICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC91c3Ivc2hhcmUvbWFuL21hbjMvKjNwbSkKKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysgICAgICAgICBzZWQgLWkgLWUgJ3N8IDMgIjIwLi4tLi4tLi4iICJwZXJsIHY1Li4uLi4iICJVc2VyIENvbnRyaWJ1dGVkIFBlcmwgRG9jdW1lbnRhdGlvbiIkfCAzICIyMDA5LTAxLTAxIiAicGVybCB2NS4xMC4wIiAiVXNlciBDb250cmlidXRlZCBQZXJsIERvY3VtZW50YXRpb24ifCcgJGYKKysgICAgICAgICB0cmltX21hbl9USCAkZgorKyAgICAgICAgIHRyaW1fbWFuX2ZpcnN0X2xpbmUgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgL3Vzci9zaGFyZS9tYW4vKi9tYW4qfC91c3Ivc2hhcmUvbWFuL21hbip8L3Vzci9saWIvdGV4bWYvZG9jL21hbi8qLyopCisrCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgdHJpbV9tYW5fVEggJGYKKysgICAgICAgICB0cmltX21hbl9maXJzdF9saW5lICRmCisrICAgICAgICAgIyBnZW5lcmF0ZWQgYnkgZG9jYm9vayB4bWw6CisrICAgICAgICAgIy5cIiAgICAgIERhdGU6IDA5LzEzLzIwMTAKKysgICAgICAgICBzZWQgLWkgLWUgJ3N8RGF0ZTogWzAtMV1bMC05XS9bMC05XVswLTldLzIwMVswLTldfERhdGU6IDA5LzEzLzIwMTB8JyAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgICAqLmVsYykKKysgICAgICAgIyBlbWFjcyBsaXNwIGZpbGVzCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgc2VkIC1pIC1lICdzfENvbXBpbGVkIGJ5IGFidWlsZEAuKiBvbiAuLi4gLi4uIC4uIC4uOi4uOi4uIDIwLi4kfGNvbXBpbGVkIGJ5IGFidWlsZEBidWlsZGhvc3Qgb24gV2VkIEp1bCAwMSAwMDowMDowMCAyMDA5fCcgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgL3Zhci9saWIvdGV4bWYvd2ViMmMvKi8qZm10IHxcCisrICAgICAvdmFyL2xpYi90ZXhtZi93ZWIyYy9tZXRhZm9udC8qLmJhc2V8XAorKyAgICAgL3Zhci9saWIvdGV4bWYvd2ViMmMvbWV0YXBvc3QvKi5tZW0pCisrICAgICAgICMgYmluYXJ5IGR1bXAgb2YgVGVYIGFuZCBNZXRhZm9udCBmb3JtYXRzLCB3ZSBjYW4gaWdub3JlIHRoZW0gZm9yIGdvb2QKKysgICAgICAgZWNobyAiZGlmZmVyZW5jZSBpbiAkZmlsZSBpZ25vcmVkLiIKKysgICAgICAgcmV0dXJuIDAKKysgICAgICAgOzsKKysgICAgICovbGlidG9vbCkKKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysJICBzZWQgLWkgLWUgJ3N8XiMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IFtBLVphLXowLTldKjokfCMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IHg0Mjp8JyAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgICAvZXRjL21haWwvKmNmfC9ldGMvc2VuZG1haWwuY2YpCisrICAgICAgICMgZnJvbSBzZW5kbWFpbCBwYWNrYWdlCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrCSAgIyAtICMjIyMjIGJ1aWx0IGJ5IGFidWlsZEBidWlsZDMzIG9uIFRodSBNYXkgNiAxMToyMToxNyBVVEMgMjAxMAorKwkgIHNlZCAtaSAtZSAnc3xidWlsdCBieSBhYnVpbGRAW2EtejAtOV0qIG9uIC4uLiAuLi4gWzAtOV0qIFswLTldKjpbMC05XVswLTldOlswLTldWzAtOV0gLiogMjBbMC05XVswLTldfGJ1aWx0IGJ5IGFidWlsZEBidWlsZDQyIG9uIFRodSBNYXkgNiAxMToyMToxNyBVVEMgMjAxMHwnICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC91c3Ivc2hhcmUvZG9jL2tkZS9IVE1MLyovKi9pbmRleC5jYWNoZXwvdXNyL3NoYXJlL2RvYy9rZGUvSFRNTC8qLyovKi9pbmRleC5jYWNoZXxcCisrICAgICAvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC8qLyouaHRtbHwvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC8qLyouZGV2aGVscDIpCisrICAgICAgICMgdmFyaW91cyBrZGUgYW5kIGd0ayBwYWNrYWdlcworKyAgICAgICBzdHJpcF9udW1iZXJlZF9hbmNob3JzCisrICAgICAgIDs7CisrICAgICovY3JlYXRlZC5yaWQpCisrICAgICAgICMgcnVieSBkb2N1bWVudGF0aW9uCisrICAgICAgICMgZmlsZSBqdXN0IGNvbnRhaW5zIGEgdGltZXN0YW1wIGFuZCBub3RoaW5nIGVsc2UsIHNvIGlnbm9yZSBpdAorKyAgICAgICBlY2hvICJJZ25vcmUgJGZpbGUiCisrICAgICAgIHJldHVybiAwCisrICAgICAgIDs7CisrICAgICovcmRvYy9maWxlcy8qLmh0bWwpCisrICAgICAgICMgcnVieSBkb2N1bWVudGF0aW9uCisrICAgICAgICMgPHRkPk1vbuKAglNlcOKAgjIw4oCCMTk6MDI6NDPigIIrMDAwMOKAgjIwMTA8L3RkPgorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgICAgICBzZWQgLWkgLWUgJ3MlPHRkPltBLVpdW2Etel1bYS16XSBbQS1aXVthLXpdW2Etel0gWzAtOV1cKyBbMC05XVwrOlswLTldXCs6WzAtOV1cKyArMDAwMCAyMDFbMC05XTwvdGQ+JTx0ZD5Nb27igIJTZXDigIIyMOKAgjE5OjAyOjQz4oCCKzAwMDDigIIyMDEwPC90ZD4lZycgJGYKKysgICAgICAgZG9uZQorKyAgICAgICBzdHJpcF9udW1iZXJlZF9hbmNob3JzCisrICAgICAgIDs7CisrICAgICovTGludXgqRW52LlNldC5zaCkKKysgICAgICAgIyBMaWJyZU9mZmljZSBmaWxlcywgY29udGFpbnM6CisrICAgICAgICMgR2VuZXJhdGVkIG9uOiBNb24gQXByIDE4IDEzOjE5OjIyIFVUQyAyMDExCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrCSBzZWQgLWkgLWUgJ3MlXiMgR2VuZXJhdGVkIG9uOi4qVVRDIDIwMVswLTldICokJSMgR2VuZXJhdGVkIG9uOiBTb21ldGltZSVnJyAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgIC91c3IvbGliL2xpYnJlb2ZmaWNlL3NvbHZlci9pbmMvKi9kZWxpdmVyLmxvZykKKysgICAgICAgIyBMaWJyZU9mZmljZSBsb2cgZmlsZQorKyAgICAgIGVjaG8gIklnbm9yZSAkZmlsZSIKKysgICAgICByZXR1cm4gMAorKyAgICAgIDs7CisrICAgIC92YXIvYWRtL3VwZGF0ZS1tZXNzYWdlcy8qfC92YXIvYWRtL3VwZGF0ZS1zY3JpcHRzLyopCisrICAgICAgIyBlbmNvZGUgdmVyc2lvbi1yZWxlYXNlIGluc2lkZQorKyAgICAgIG9sZGZuPWBlY2hvICIkZmlsZSJ8c2VkIC1lIHMvLSRyZWxlYXNlMi8tJHJlbGVhc2UxLztgCisrCisrICAgICAgIyBmZXRjaG1zdHRmb250cyBlbWJlZHMgdGhlIHJlbGVhc2UgbnVtYmVyIGluIHRoZSB1cGRhdGUgc2hlbGwgc2NyaXB0LgorKyAgICAgIGVjaG8gc2VkIC1pIC1lICJzLy0kcmVsZWFzZTEvLSRyZWxlYXNlMi9nOyIgIm9sZC8kb2xkZm4iCisrICAgICAgc2VkIC1pIC1lICJzLy0kcmVsZWFzZTEvLSRyZWxlYXNlMi9nOyIgIm9sZC8kb2xkZm4iCisrCisrICAgICAgaWYgISBkaWZmIC11IG9sZC8kb2xkZm4gbmV3LyRmaWxlOyB0aGVuCisrICAgICAgICAgICBlY2hvICIkb2xkZm4gaXMgbm90IHNhbWUgYXMgJGZpbGUiCisrICAgICAgICAgICByZXR1cm4gMQorKyAgICAgIGZpCisrICAgICAgZWNobyAiJGZpbGUgYW5kICRvbGRmbiBhcmUgc2FtZSIKKysgICAgICByZXR1cm4gMAorKyAgICAgIDs7CisrICAgICoucHMpCisrICAgICAgZm9yIGYgaW4gIm9sZC8kZmlsZSIgIm5ldy8kZmlsZSI7IGRvCisrICAgICAgICBzZWQgLWkgLWUgJworKyAgICAgICAgICAvXiUlQ3JlYXRpb25EYXRlOltbOmJsYW5rOl1dL2QKKysgICAgICAgICAgL14lJUNyZWF0b3I6W1s6Ymxhbms6XV1ncm9mZltbOmJsYW5rOl1ddmVyc2lvbltbOmJsYW5rOl1dL2QKKysgICAgICAgICAgL14lRFZJUFNTb3VyY2U6W1s6Ymxhbms6XV0vZAorKyAgICAgICAgJyAiJGYiCisrICAgICAgZG9uZQorKyAgICA7OworKyAgICAqcGRmKQorKyAgICAgICMgUERGIGZpbGVzIGNvbnRhaW4gYSB1bmlxdWUgSUQsIHJlbW92ZSBpdAorKyAgICAgICMgRm9ybWF0IG9mIHRoZSBJRCBpczoKKysgICAgICAjIC9JRCBbPDlBQ0UyNDdBNzBDRjlCRUFGRUUxNUUxMTYyNTlCRDZEPiA8OUFDRTI0N0E3MENGOUJFQUZFRTE1RTExNjI1OUJENkQ+XQorKyAgICAgICMgd2l0aCBvcHRpb25hbCBzcGFjZXMuIHBkZnRleCBjcmVhdGVzIGFsc286CisrICAgICAgIyAvQ3JlYXRpb25EYXRlIChEOjIwMTIwMTAzMDgzMjA2WikKKysgICAgICAjIC9Nb2REYXRlIChEOjIwMTIwMTAzMDgzMjA2WikKKysgICAgICAjIGFuZCBwb3NzaWJseSBYTUwgbWV0YWRhdGEgYXMgd2VsbAorKyAgICAgIGZvciBmIGluICJvbGQvJGZpbGUiICJuZXcvJGZpbGUiOyBkbworKyAgICAgICAgc2VkIC1pIFwKKysgICAgICAgICAgICAnL29iai8sL2VuZG9iai97CisrICAgICAgICAgICAgICAgcyUvSUQgXD9cWyBcPzxbXj5dXCs+IFw/PFtePl1cKz4gXD9cXSUvSURyYW5kb20lZzsKKysgICAgICAgICAgICAgICBzJS9DcmVhdGlvbkRhdGUgXD8oRDpbXildKiklL0NyZWF0aW9uRGF0ZSAoRDogWFhYKSVnOworKyAgICAgICAgICAgICAgIHMlL01vZERhdGUgXD8oRDpbXildKiklL01vZERhdGUgKEQ6IFhYWCklZzsKKysgICAgICAgICAgICAgICBzJTxwZGY6Q3JlYXRpb25EYXRlPltePF0qPC9wZGY6Q3JlYXRpb25EYXRlPiU8cGRmOkNyZWF0aW9uRGF0ZT5YWFg8L3BkZjpDcmVhdGlvbkRhdGU+JWc7CisrICAgICAgICAgICAgICAgcyU8cGRmOk1vZERhdGU+W148XSo8L3BkZjpNb2REYXRlPiU8cGRmOk1vZERhdGU+WFhYPC9wZGY6TW9kRGF0ZT4lZzsKKysgICAgICAgICAgICAgICBzJTx4YXA6Q3JlYXRlRGF0ZT5bXjxdKjwveGFwOkNyZWF0ZURhdGU+JTx4YXA6Q3JlYXRlRGF0ZT5YWFg8L3hhcDpDcmVhdGVEYXRlPiVnOworKyAgICAgICAgICAgICAgIHMlPHhhcDpNb2RpZnlEYXRlPltePF0qPC94YXA6TW9kaWZ5RGF0ZT4lPHhhcDpNb2RpZnlEYXRlPlhYWDwveGFwOk1vZGlmeURhdGU+JWc7CisrICAgICAgICAgICAgICAgcyU8eGFwOk1ldGFkYXRhRGF0ZT5bXjxdKjwveGFwOk1ldGFkYXRhRGF0ZT4lPHhhcDpNZXRhZGF0YURhdGU+WFhYPC94YXA6TWV0YWRhdGFEYXRlPiVnOworKyAgICAgICAgICAgIH0nICIkZiIKKysgICAgICBkb25lCisrICAgICAgOzsKKysgIGVzYWMKKysKKysgIGZ0eXBlPWAvdXNyL2Jpbi9maWxlIG9sZC8kZmlsZSB8IHNlZCAnc0BeW146XVwrOltbOmJsYW5rOl1dKkBAJ2AKKysgIGNhc2UgJGZ0eXBlIGluCisrICAgICBQRTMyXCBleGVjdXRhYmxlKk1vbm9cL1wuTmV0XCBhc3NlbWJseSopCisrICAgICAgIGVjaG8gIlBFMzIgTW9uby8uTmV0IGFzc2VtYmx5OiAkZmlsZSIKKysgICAgICAgaWYgWyAteCAvdXNyL2Jpbi9tb25vZGlzIF0gOyB0aGVuCisrICAgICAgICAgbW9ub2RpcyBvbGQvJGZpbGUgMj4vZGV2L251bGx8c2VkIC1lICdzL0dVSUQgPSB7Lip9L0dVSUQgPSB7IDQyIH0vOyc+ICR7ZmlsZTF9CisrICAgICAgICAgbW9ub2RpcyBuZXcvJGZpbGUgMj4vZGV2L251bGx8c2VkIC1lICdzL0dVSUQgPSB7Lip9L0dVSUQgPSB7IDQyIH0vOyc+ICR7ZmlsZTJ9CisrICAgICAgICAgaWYgISBjbXAgLXMgJHtmaWxlMX0gJHtmaWxlMn07IHRoZW4KKysgICAgICAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgKCRmdHlwZSkiCisrICAgICAgICAgICBkaWZmIC11ICR7ZmlsZTF9ICR7ZmlsZTJ9CisrICAgICAgICAgICByZXR1cm4gMQorKyAgICAgICAgIGZpCisrICAgICAgIGVsc2UKKysgICAgICAgICBlY2hvICJDYW5ub3QgY29tcGFyZSwgbm8gbW9ub2RpcyBpbnN0YWxsZWQiCisrICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgRUxGKmV4ZWN1dGFibGUqfEVMRipbTE1dU0JcIHNoYXJlZFwgb2JqZWN0KikKKysgICAgICAgb2JqZHVtcCAtZCAtLW5vLXNob3ctcmF3LWluc24gb2xkLyRmaWxlIHwgZmlsdGVyX2Rpc2FzbSA+ICRmaWxlMQorKyAgICAgICBpZiAhIHRlc3QgLXMgJGZpbGUxOyB0aGVuCisrICAgICAgICAgIyBvYmpkdW1wIGhhcyBubyBpZGVhIGhvdyB0byBoYW5kbGUgaXQKKysgICAgICAgICBpZiAhIGRpZmZfdHdvX2ZpbGVzOyB0aGVuCisrICAgICAgICAgICByZXQ9MQorKyAgICAgICAgICAgYnJlYWsKKysgICAgICAgICBmaQorKyAgICAgICBmaSAgICAgICAKKysgICAgICAgZWxmZGlmZj0KKysgICAgICAgc2VkIC1pIC1lICJzLG9sZC8sLCIgJGZpbGUxCisrICAgICAgIG9iamR1bXAgLWQgLS1uby1zaG93LXJhdy1pbnNuIG5ldy8kZmlsZSB8IGZpbHRlcl9kaXNhc20gPiAkZmlsZTIKKysgICAgICAgc2VkIC1pIC1lICJzLG5ldy8sLCIgJGZpbGUyCisrICAgICAgIGlmICEgZGlmZiAtdSAkZmlsZTEgJGZpbGUyID4gJGRmaWxlOyB0aGVuCisrICAgICAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgaW4gYXNzZW1ibGVyIG91dHB1dCIKKysgICAgICAgICAgaGVhZCAtbiAyMDAgJGRmaWxlCisrICAgICAgICAgIGVsZmRpZmY9IjEiCisrICAgICAgIGZpCisrICAgICAgIGVjaG8gIiIgPiRmaWxlMQorKyAgICAgICBlY2hvICIiID4kZmlsZTIKKysgICAgICAgIyBEb24ndCBjb21wYXJlIC5idWlsZC1pZCBhbmQgLmdudV9kZWJ1Z2xpbmsgc2VjdGlvbnMKKysgICAgICAgc2VjdGlvbnM9IiQob2JqZHVtcCAtcyBuZXcvJGZpbGUgfCBncmVwICJDb250ZW50cyBvZiBzZWN0aW9uIC4qOiIgfCBzZWQgLXIgInMsLiogKC4qKTosXDEsZyIgfCBncmVwIC12IC1lICJcLmJ1aWxkLWlkIiAtZSAiXC5nbnVfZGVidWdsaW5rIiB8IHRyICJcbiIgIiAiKSIKKysgICAgICAgZm9yIHNlY3Rpb24gaW4gJHNlY3Rpb25zOyBkbworKyAgICAgICAgICBvYmpkdW1wIC1zIC1qICRzZWN0aW9uIG9sZC8kZmlsZSB8IHNlZCAicyxeb2xkLywsIiA+ICRmaWxlMQorKyAgICAgICAgICBvYmpkdW1wIC1zIC1qICRzZWN0aW9uIG5ldy8kZmlsZSB8IHNlZCAicyxebmV3LywsIiA+ICRmaWxlMgorKyAgICAgICAgICBpZiAhIGRpZmYgLXUgJGZpbGUxICRmaWxlMiA+ICRkZmlsZTsgdGhlbgorKyAgICAgICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzIGluIEVMRiBzZWN0aW9uICRzZWN0aW9uIgorKyAgICAgICAgICAgICBoZWFkIC1uIDIwMCAkZGZpbGUKKysgICAgICAgICAgICAgZWxmZGlmZj0iMSIKKysgICAgICAgICAgZmkKKysgICAgICAgZG9uZQorKyAgICAgICBpZiB0ZXN0IC16ICIkZWxmZGlmZiI7IHRoZW4KKysgICAgICAgICAgZWNobyAiJGZpbGU6IG9ubHkgZGlmZmVyZW5jZSB3YXMgaW4gYnVpbGQtaWQgb3IgZ251X2RlYnVnbGluaywgR09PRC4iCisrICAgICAgICAgIHJldHVybiAwCisrICAgICAgIGZpCisrICAgICAgIHJldHVybiAxCisrICAgICAgIDs7CisrICAgICAqQVNDSUkqfCp0ZXh0KikKKysgICAgICAgaWYgISBjbXAgLXMgb2xkLyRmaWxlIG5ldy8kZmlsZTsgdGhlbgorKyAgICAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgKCRmdHlwZSkiCisrICAgICAgICAgZGlmZiAtdSBvbGQvJGZpbGUgbmV3LyRmaWxlIHwgaGVhZCAtbiAyMDAKKysgICAgICAgICByZXR1cm4gMQorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAgZGlyZWN0b3J5fHNldHVpZCxcIGRpcmVjdG9yeXxzdGlja3ksXCBkaXJlY3RvcnkpCisrICAgICAgICMgdGFyIG1pZ2h0IHBhY2thZ2UgZGlyZWN0b3JpZXMgLSBpZ25vcmUgdGhlbSBoZXJlCisrICAgICAgIHJldHVybiAwCisrICAgICAgIDs7CisrICAgICBiemlwMlwgY29tcHJlc3NlZFwgZGF0YSopCisrICAgICAgIGlmICEgY2hlY2tfY29tcHJlc3NlZF9maWxlICIkZmlsZSIgImJ6MiI7IHRoZW4KKysgICAgICAgICAgIHJldHVybiAxCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICBnemlwXCBjb21wcmVzc2VkXCBkYXRhKikKKysgICAgICAgaWYgISBjaGVja19jb21wcmVzc2VkX2ZpbGUgIiRmaWxlIiAiZ3ppcCI7IHRoZW4KKysgICAgICAgICAgIHJldHVybiAxCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICBYWlwgY29tcHJlc3NlZFwgZGF0YSopCisrICAgICAgIGlmICEgY2hlY2tfY29tcHJlc3NlZF9maWxlICIkZmlsZSIgInh6IjsgdGhlbgorKyAgICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgIFBPU0lYXCB0YXJcIGFyY2hpdmUpCisrICAgICAgICAgIG12IG9sZC8kZmlsZXssLnRhcn0KKysgICAgICAgICAgbXYgbmV3LyRmaWxleywudGFyfQorKyAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZX0udGFyOyB0aGVuCisrICAgICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgIGNwaW9cIGFyY2hpdmUpCisrICAgICAgICAgIG12IG9sZC8kZmlsZXssLmNwaW99CisrICAgICAgICAgIG12IG5ldy8kZmlsZXssLmNwaW99CisrICAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlfS5jcGlvOyB0aGVuCisrICAgICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgICAgZmkKKysgICAgIDs7CisrICAgICBzeW1ib2xpY1wgbGlua1wgdG9cICopCisrICAgICAgIHJlYWRsaW5rICJvbGQvJGZpbGUiID4gJGZpbGUxCisrICAgICAgIHJlYWRsaW5rICJuZXcvJGZpbGUiID4gJGZpbGUyCisrICAgICAgIGlmICEgZGlmZiAtdSAkZmlsZTEgJGZpbGUyOyB0aGVuCisrICAgICAgICAgZWNobyAic3ltbGluayB0YXJnZXQgZm9yICRmaWxlIGRpZmZlcnMiCisrICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgICopCisrICAgICAgIGlmICEgZGlmZl90d29fZmlsZXM7IHRoZW4KKysgICAgICAgICAgIHJldHVybiAxCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisrICByZXR1cm4gMAorK30KKysKKysjIFdlIG5lZWQgL3Byb2MgbW91bnRlZCBmb3Igc29tZSB0ZXN0cywgc28gY2hlY2sgdGhhdCBpdCdzIG1vdW50ZWQgYW5kCisrIyBjb21wbGFpbiBpZiBub3QuCisrUFJPQ19NT1VOVEVEPTAKKytpZiBbICEgLWQgL3Byb2Mvc2VsZi8gXTsgdGhlbgorKyAgZWNobyAiL3Byb2MgaXMgbm90IG1vdW50ZWQiCisrICBtb3VudCAtb3J3IC1uIC10cHJvYyBub25lIC9wcm9jCisrICBQUk9DX01PVU5URUQ9MQorK2ZpCisrCisrIyBwcmVzZXJ2ZSBjbXBfc3BlYyByZXN1bHQgZm9yIGNoZWNrX2FsbCBydW5zCisrcmV0PSRSRVMKKytmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisrICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAkZmlsZTsgdGhlbgorKyAgICAgICByZXQ9MQorKyAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorKyAgICAgICAgICAgYnJlYWsKKysgICAgICAgZmkKKysgICBmaQorK2RvbmUKKysKKytpZiBbICIkUFJPQ19NT1VOVEVEIiAtZXEgIjEiIF07IHRoZW4KKysgIGVjaG8gIlVubW91bnRpbmcgcHJvYyIKKysgIHVtb3VudCAvcHJvYworK2ZpCisrCisrcm0gJGZpbGUxICRmaWxlMiAkZGZpbGUgJHJlbmFtZV9zY3JpcHQKKytybSAtcmYgJGRpcgorK2lmIHRlc3QgIiRyZXQiID0gMDsgdGhlbgorKyAgICAgZWNobyAiUGFja2FnZSBjb250ZW50IGlzIGlkZW50aWNhbCIKKytmaQorK2V4aXQgJHJldAorKyMgdmltOiB0dz02NjYgdHM9MiBldAorZGlmZiAtLWdpdCBhL3JwbS1jaGVjay5zaCBiL3JwbS1jaGVjay5zaAorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CitpbmRleCBkZDQ3NjQyLi4wMDAwMDAwCistLS0gYS9ycG0tY2hlY2suc2gKKysrKyAvZGV2L251bGwKK0BAIC0xLDc2NCArMCwwIEBACistIyEgL2Jpbi9iYXNoCistIworLSMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIFNVU0UgTGludXggUHJvZHVjdCBHbWJILCBHZXJtYW55LgorLSMgTGljZW5zZWQgdW5kZXIgR1BMIHYyLCBzZWUgQ09QWUlORyBmaWxlIGZvciBkZXRhaWxzLgorLSMKKy0jIFdyaXR0ZW4gYnkgTWljaGFlbCBNYXR6IGFuZCBTdGVwaGFuIENvb2xvCistIyBFbmhhbmNlZCBieSBBbmRyZWFzIEphZWdlcgorLQorLUZVTkNUSU9OUz0kezAlLyp9L2Z1bmN0aW9ucy5zaAorLQorLWNoZWNrX2FsbD0KKy1jYXNlICQxIGluCistICAtYSB8IC0tY2hlY2stYWxsKQorLSAgICBjaGVja19hbGw9MQorLSAgICBzaGlmdAorLWVzYWMKKy0KKy1pZiB0ZXN0ICIkIyIgIT0gMjsgdGhlbgorLSAgIGVjaG8gInVzYWdlOiAkMCBbLWF8LS1jaGVjay1hbGxdIG9sZC5ycG0gbmV3LnJwbSIKKy0gICBleGl0IDEKKy1maQorLQorLXNlbGZfc2NyaXB0PSQoY2QgJChkaXJuYW1lICQwKTsgZWNobyAkKHB3ZCkvJChiYXNlbmFtZSAkMCkpCistCistc291cmNlICRGVU5DVElPTlMKKy0KKy1vbGRwa2c9YHJlYWRsaW5rIC1mICQxYAorLW5ld3BrZz1gcmVhZGxpbmsgLWYgJDJgCistcmVuYW1lX3NjcmlwdD1gbWt0ZW1wYAorLQorLWlmIHRlc3QgISAtZiAiJG9sZHBrZyI7IHRoZW4KKy0gICAgZWNobyAiY2FuJ3Qgb3BlbiAkMSIKKy0gICAgZXhpdCAxCistZmkKKy0KKy1pZiB0ZXN0ICEgLWYgIiRuZXdwa2ciOyB0aGVuCistICAgIGVjaG8gImNhbid0IG9wZW4gJDIiCistICAgIGV4aXQgMQorLWZpCistCistI3VzYWdlIHVuamFyIDxmaWxlPgorLWZ1bmN0aW9uIHVuamFyKCkKKy17CistICAgIGxvY2FsIGZpbGUKKy0gICAgZmlsZT0kMQorLQorLSAgICBpZiBbWyAkKHR5cGUgLXAgZmFzdGphcikgXV07IHRoZW4KKy0gICAgICAgIFVOSkFSPWZhc3RqYXIKKy0gICAgZWxpZiBbWyAkKHR5cGUgLXAgamFyKSBdXTsgdGhlbgorLSAgICAgICAgVU5KQVI9amFyCistICAgIGVsaWYgW1sgJCh0eXBlIC1wIHVuemlwKSBdXTsgdGhlbgorLSAgICAgICAgVU5KQVI9dW56aXAKKy0gICAgZWxzZQorLSAgICAgICAgZWNobyAiRVJST1I6IGphciwgZmFzdGphciwgb3IgdW56aXAgaXMgbm90IGluc3RhbGxlZCAodHJ5aW5nIGZpbGUgJGZpbGUpIgorLSAgICAgICAgZXhpdCAxCistICAgIGZpCistCistICAgIGNhc2UgJFVOSkFSIGluCistICAgICAgICBqYXJ8ZmFzdGphcikKKy0gICAgICAgICMgZWNobyBqYXIgLXhmICRmaWxlCistICAgICAgICAke1VOSkFSfSAteGYgJGZpbGUKKy0gICAgICAgIDs7CistICAgICAgICB1bnppcCkKKy0gICAgICAgIHVuemlwIC1vcXEgJGZpbGUKKy0gICAgICAgIDs7CistICAgIGVzYWMKKy19CistCistIyBsaXN0IGZpbGVzIGluIGRpcmVjdG9yeQorLSN1c2FnZSB1bmphcl9sIDxmaWxlPgorLWZ1bmN0aW9uIHVuamFyX2woKQorLXsKKy0gICAgbG9jYWwgZmlsZQorLSAgICBmaWxlPSQxCistCistICAgIGlmIFtbICQodHlwZSAtcCBmYXN0amFyKSBdXTsgdGhlbgorLSAgICAgICAgVU5KQVI9ZmFzdGphcgorLSAgICBlbGlmIFtbICQodHlwZSAtcCBqYXIpIF1dOyB0aGVuCistICAgICAgICBVTkpBUj1qYXIKKy0gICAgZWxpZiBbWyAkKHR5cGUgLXAgdW56aXApIF1dOyB0aGVuCistICAgICAgICBVTkpBUj11bnppcAorLSAgICBlbHNlCistICAgICAgICBlY2hvICJFUlJPUjogamFyLCBmYXN0amFyLCBvciB1bnppcCBpcyBub3QgaW5zdGFsbGVkICh0cnlpbmcgZmlsZSAkZmlsZSkiCistICAgICAgICBleGl0IDEKKy0gICAgZmkKKy0KKy0gICAgY2FzZSAkVU5KQVIgaW4KKy0gICAgICAgIGphcnxmYXN0amFyKQorLSAgICAgICAgJHtVTkpBUn0gLXRmICRmaWxlCistICAgICAgICA7OworLSAgICAgICAgdW56aXApCistICAgICAgICB1bnppcCAtbCAkZmlsZQorLSAgICAgICAgOzsKKy0gICAgZXNhYworLX0KKy0KKy1maWx0ZXJfZGlzYXNtKCkKKy17CistICAgc2VkIC1lICdzL14gKlswLTlhLWZdXCs6Ly8nIC1lICdzL1wkMHhbMC05YS1mXVwrLyRzb21ldGhpbmcvJyAtZSAncy9jYWxscSAqWzAtOWEtZl1cKy9jYWxscSAvJyAtZSAncy8jICpbMC05YS1mXVwrLyMgIC8nIC1lICdzL1woMHhcKVw/WzAtOWEtZl1cKygvb2Zmc2V0KC8nIC1lICdzL1swLTlhLWZdXCsgPC88LycgLWUgJ3MvXjxcKC4qXCk+Oi9cMTovJyAtZSAncy88XCguKlwpKzB4WzAtOWEtZl1cKz4vPFwxICsgb2ZzPi8nIAorLX0KKy0KKy1lY2hvICJDb21wYXJpbmcgYGJhc2VuYW1lICRvbGRwa2dgIHRvIGBiYXNlbmFtZSAkbmV3cGtnYCIKKy0KKy1jYXNlICRvbGRwa2cgaW4KKy0gICoucnBtKQorLSAgICAgY21wX3NwZWMgJHJlbmFtZV9zY3JpcHQgJG9sZHBrZyAkbmV3cGtnCistICAgICBSRVM9JD8KKy0gICAgIGNhc2UgJFJFUyBpbgorLSAgICAgICAwKQorLSAgICAgICAgICBlY2hvICJSUE0gbWV0YSBpbmZvcm1hdGlvbiBpcyBpZGVudGljYWwiCistICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCistICAgICAgICAgICAgIGV4aXQgMAorLSAgICAgICAgICBmaQorLSAgICAgICAgICA7OworLSAgICAgICAxKQorLSAgICAgICAgICBlY2hvICJSUE0gbWV0YSBpbmZvcm1hdGlvbiBpcyBkaWZmZXJlbnQiCistICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCistICAgICAgICAgICAgIGV4aXQgMQorLSAgICAgICAgICBmaQorLSAgICAgICAgICA7OworLSAgICAgICAyKQorLSAgICAgICAgICBlY2hvICJSUE0gZmlsZSBjaGVja3N1bSBkaWZmZXJzLiIKKy0gICAgICAgICAgUkVTPTAKKy0gICAgICAgICAgOzsKKy0gICAgICAgKikKKy0gICAgICAgICAgZWNobyAiV3JvbmcgZXhpdCBjb2RlISIKKy0gICAgICAgICAgZXhpdCAxCistICAgICAgICAgIDs7CistICAgICBlc2FjCistICAgICA7OworLWVzYWMKKy0KKy1maWxlMT1gbWt0ZW1wYAorLWZpbGUyPWBta3RlbXBgCistCistZGlyPWBta3RlbXAgLWRgCistZWNobyAiRXh0cmFjdGluZyBwYWNrYWdlcyIKKy11bnBhY2thZ2UgJG9sZHBrZyAkZGlyL29sZAorLXVucGFja2FnZSAkbmV3cGtnICRkaXIvbmV3CistCistIyBmaWxlcyBpcyBzZXQgaW4gY21wX3NwZWMgZm9yIHJwbXMsIHNvIGlmIFJFUyBpcyBlbXB0eSB3ZSBzaG91bGQgYXNzdW1lCistIyBpdCB3YXNuJ3QgYW4gcnBtIGFuZCBwaWNrIGFsbCBmaWxlcyBmb3IgY29tcGFyaXNvbi4KKy1pZiBbIC16ICRSRVMgXTsgdGhlbgorLSAgICBvbGRmaWxlcz1gY2QgJGRpci9vbGQ7IGZpbmQgLiAtdHlwZSBmYAorLSAgICBuZXdmaWxlcz1gY2QgJGRpci9uZXc7IGZpbmQgLiAtdHlwZSBmYAorLQorLSAgICBmaWxlcz1gZWNobyAtZSAiJG9sZGZpbGVzXG4kbmV3ZmlsZXMiIHwgc29ydCAtdWAKKy1maQorLQorLWNkICRkaXIKKy1iYXNoICRyZW5hbWVfc2NyaXB0CistCistZGZpbGU9YG1rdGVtcGAKKy0KKy1kaWZmX3R3b19maWxlcygpCisteworLSAgaWYgISBjbXAgLXMgb2xkLyRmaWxlIG5ldy8kZmlsZTsgdGhlbgorLSAgICAgZWNobyAiJGZpbGUgZGlmZmVycyAoJGZ0eXBlKSIKKy0gICAgIGhleGR1bXAgLUMgb2xkLyRmaWxlID4gJGZpbGUxCistICAgICBoZXhkdW1wIC1DIG5ldy8kZmlsZSA+ICRmaWxlMgorLSAgICAgZGlmZiAtdSAkZmlsZTEgJGZpbGUyIHwgaGVhZCAtbiAyMDAKKy0gICAgIHJldHVybiAxCistICBmaQorLSAgcmV0dXJuIDAKKy19CistCistdHJpbV9tYW5fZmlyc3RfbGluZSgpCisteworLSAgICAjIEhhbmRsZXMgdGhlIGZpcnN0IGxpbmUgaWYgaXQgaXMgbGlrZToKKy0gICAgIy5cIiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBQb2Q6Ok1hbiAyLjI4IChQb2Q6OlNpbXBsZSAzLjI4KQorLSAgICAjLlwiIERPIE5PVCBNT0RJRlkgVEhJUyBGSUxFISAgSXQgd2FzIGdlbmVyYXRlZCBieSBoZWxwMm1hbiAxLjQzLjMuCistICAgIGxvY2FsIGY9JDEKKy0gICAgc2VkIC1pIC1lICcxeworLSAgICBzfF5cLlxcIltbOmJsYW5rOl1dXCtBdXRvbWF0aWNhbGx5W1s6Ymxhbms6XV1nZW5lcmF0ZWRbWzpibGFuazpdXWJ5W1s6Ymxhbms6XV1Qb2Q6Ok1hbltbOmJsYW5rOl1dLip8LlxcIiBPdmVybHkgdmVyYm9zZSBQb2Q6Ok1hbnwKKy0gICAgc3xeXC5cXCJbWzpibGFuazpdXVwrRE9bWzpibGFuazpdXU5PVFtbOmJsYW5rOl1dTU9ESUZZW1s6Ymxhbms6XV1USElTW1s6Ymxhbms6XV1GSUxFIVtbOmJsYW5rOl1dXCtJdFtbOmJsYW5rOl1dd2FzW1s6Ymxhbms6XV1nZW5lcmF0ZWRbWzpibGFuazpdXWJ5W1s6Ymxhbms6XV1oZWxwMm1hbltbOmJsYW5rOl1dLip8LlxcIiBPdmVybHkgdmVyYm9zZSBoZWxwMm1hbnwKKy0gICAgfScgJGYKKy19CistCistdHJpbV9tYW5fVEgoKQorLXsKKy0gICAgIyBIYW5kbGVzIGxpbmVzIGxpa2U6CistICAgICMgLlRIIGRlYmhlbHBlciA3ICIyMDEwLTAyLTI3IiAiNy40LjE1IiAiRGViaGVscGVyIgorLSAgICAjIC5USCBESVJNTkdSLUNMSUVOVCAxIDIwMTAtMDItMjcgIkRpcm1uZ3IgMS4wLjMiICJHTlUgUHJpdmFjeSBHdWFyZCIKKy0gICAgIyAuVEggY2NtYWtlIDEgIk1hcmNoIDA2LCAyMDEwIiAiY2NtYWtlIDIuOC4xLXJjMyIKKy0gICAgIyAuVEggUUVNVS1JTUcgMSAiMjAxMC0wMy0xNCIgIiAiICIgIgorLSAgICAjIC5USCBrZGVjbWFrZSAxICJNYXkgMDcsIDIwMTAiICJjbWFrZSAyLjguMSIKKy0gICAgIyAuVEggImFwcGVuZGVyLmgiIDMgIjEyIE1heSAyMDEwIiAiVmVyc2lvbiAxLjIuMSIgImxvZzRjIiBcIiAtKi0gbnJvZmYgLSotCistICAgICMgLlRI4oCCImFwcGVuZGVyLmgi4oCCM+KAgiJUdWXigIJBdWfigIIzMeKAgjIwMTAi4oCCIlZlcnNpb27igIIxLjIuMSLigIIibG9nNGMi4oCCXCLigIItKi3igIJucm9mZuKAgi0qLQorLSAgICAjIC5USCAiT0ZGTElORUlNQVAiICIxIiAiMTEgTWF5IDIwMTAiICJKb2huIEdvZXJ6ZW4iICJPZmZsaW5lSU1BUCBNYW51YWwiCistICAgICMgLlRIIGd2IDNndWlsZSAiMTMgTWF5IDIwMTAiCistICAgICMuVEggIkdJVFwtQVJDSElNUE9SVCIgIjEiICIwOS8xMy8yMDEwIiAiR2l0IDFcJi43XCYuMSIgIkdpdCBNYW51YWwiCistICAgICMgLlRIIExESVJFQ1RPUkQgOCAiMjAxMC0xMC0yMCIgInBlcmwgdjUuMTIuMiIgIlVzZXIgQ29udHJpYnV0ZWQgUGVybCBEb2N1bWVudGF0aW9uIgorLSAgICAjIC5USCBjY21ha2UgMSAiRmVicnVhcnkgMDUsIDIwMTIiICJjY21ha2UgMi44LjciCistICAgICMgLlRI4oCCImFwcGVuZGVyLmgi4oCCM+KAgiJUdWXigIJBdWfigIIzMeKAgjIwMTAi4oCCIlZlcnNpb27igIIxLjIuMSLigIIibG9nNGMi4oCCXCLigIItKi3igIJucm9mZuKAgi0qLQorLSAgICAjIC5USCBBUkNIICIxIiAiU2VwdGVtYmVyIDIwMTAiICJHTlUgY29yZXV0aWxzIDguNSIgIlVzZXIgQ29tbWFuZHMiCistICAgICMgLlRIICJHQ00tQ0FMSUJSQVRFIiAiMSIgIjAzIEZlYnJ1YXJ5IDIwMTIiICIiICIiCistICAgICMuVEggTG9jYWxlOjpQbzRhOjpYbWwucG0gM3BtICIyMDE1LTAxLTMwIiAiUG80YSBUb29scyIgIlBvNGEgVG9vbHMiCistICAgIGxvY2FsIGY9JDEKKy0gICAgIyAoLlRIICAgcXVvdGVkIHNlY3Rpb24pIChxdW90ZWRfZGF0ZSkoKikKKy0gICAgc2VkIC1pIC1lICdzfF5cKFtbOmJsYW5rOl1dKlwuVEhbWzpibGFuazpdXVwrIlteIl1cKyJbWzpibGFuazpdXVwrW15bOmJsYW5rOl1dXCtcKVtbOmJsYW5rOl1dXCtcKCJbXiJdXCsiXClcKFtbOmJsYW5rOl1dXCsuKlwpXD98XDEgInFxMjAwMC0wMS0wMSJcM3wnICRmCistICAgICMgKC5USCB1bnF1b3RlZCBzZWN0aW9uKSAocXVvdGVkX2RhdGUpKCopCistICAgIHNlZCAtaSAtZSAnc3xeXChbWzpibGFuazpdXSpcLlRIW1s6Ymxhbms6XV1cK1teIl1bXls6Ymxhbms6XV1cK1tbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woIlteIl1cKyJcKVwoW1s6Ymxhbms6XV1cKy4qXClcP3xcMSAidXEyMDAwLTAyLTAyIlwzfCcgJGYKKy0gICAgIyAoLlRIICAgcXVvdGVkIHNlY3Rpb24pICh1bnF1b3RlZF9kYXRlKSgqKQorLSAgICBzZWQgLWkgLWUgJ3N8XlwoW1s6Ymxhbms6XV0qXC5USFtbOmJsYW5rOl1dXCsiW14iXVwrIltbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woW14iXVteWzpibGFuazpdXVwrXClcKFtbOmJsYW5rOl1dXCsuKlwpXD98XDEgcXUyMDAwLTAzLTAzXDN8JyAkZgorLSAgICAjICguVEggdW5xdW90ZWQgc2VjdGlvbikgKHVucXVvdGVkX2RhdGUpKCopCistICAgIHNlZCAtaSAtZSAnc3xeXChbWzpibGFuazpdXSpcLlRIW1s6Ymxhbms6XV1cK1teIl1bXls6Ymxhbms6XV1cK1tbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woW14iXVteWzpibGFuazpdXVwrXClcKFtbOmJsYW5rOl1dXCsuKlwpXD98XDEgdXUyMDAwLTA0LTA0XDN8JyAkZgorLX0KKy0KKy1zdHJpcF9udW1iZXJlZF9hbmNob3JzKCkKKy17CistICAjIFJlbW92ZSBudW1iZXJlZCBhbmNob3JzIG9uIERvY2Jvb2sgLyBIVE1MIGZpbGVzLgorLSAgIyBUaGlzIHNob3VsZCBiZSBzYXZlIHNpbmNlIHdlIHJlbW92ZSB0aGVtIGZyb20gb2xkIGFuZCBuZXcgZmlsZXMuCistICAjIEEgdHJhaWxpbmcgPC9hPiBvciA8L2Rpdj4gdGFnIHdpbGwgc3RheSBhbHNvIG9uIGJvdGggZmlsZXMuCistICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgc2VkIC1pIC1lICdzJTxbIF0qYVsgXVwrbmFtZVtePF0qWzAtOV1cK1tePF0qJSVnJyBcCistICAgICAtZSAncyU8WyBdKmFbIF1cK2hyZWZbXjxdKiNbXjxdKlswLTldXCtbXjxdKiUlZycgXAorLSAgICAgLWUgJ3MlPFtePF0qaWQ9ImZ0blwuW148XSpbMC05XVwrW148XSolJWcnICRmCistICBkb25lCistfQorLQorLQorLWNoZWNrX2NvbXByZXNzZWRfZmlsZSgpCisteworLSAgbG9jYWwgZmlsZT0kMQorLSAgbG9jYWwgZXh0PSQyCistICBsb2NhbCB0bXBkaXI9YG1rdGVtcCAtZGAKKy0gIGxvY2FsIGZ0eXBlCistICBsb2NhbCByZXQ9MAorLSAgZWNobyAiJGV4dCBmaWxlIHdpdGggb2RkIGZpbGVuYW1lOiAkZmlsZSIKKy0gIGlmIHRlc3QgLW4gIiR0bXBkaXIiOyB0aGVuCistICAgIG1rZGlyICR0bXBkaXIve29sZCxuZXd9CistICAgIGNwIC0tcGFyZW50cyAtLWRlcmVmZXJlbmNlIG9sZC8kZmlsZSAkdG1wZGlyLworLSAgICBjcCAtLXBhcmVudHMgLS1kZXJlZmVyZW5jZSBuZXcvJGZpbGUgJHRtcGRpci8KKy0gICAgaWYgcHVzaGQgJHRtcGRpciA+IC9kZXYvbnVsbCA7IHRoZW4KKy0gICAgICBjYXNlICIkZXh0IiBpbgorLSAgICAgICAgYnoyKQorLSAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5iejJ9CistICAgICAgICAgIG12IG5ldy8kZmlsZXssLmJ6Mn0KKy0gICAgICAgICAgYnppcDIgLWQgb2xkLyRmaWxlLmJ6MgorLSAgICAgICAgICBiemlwMiAtZCBuZXcvJGZpbGUuYnoyCistICAgICAgICAgIDs7CistICAgICAgICBnemlwKQorLSAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5nen0KKy0gICAgICAgICAgbXYgbmV3LyRmaWxleywuZ3p9CistICAgICAgICAgIGd6aXAgLWQgb2xkLyRmaWxlLmd6CistICAgICAgICAgIGd6aXAgLWQgbmV3LyRmaWxlLmd6CistICAgICAgICAgIDs7CistICAgICAgICB4eikKKy0gICAgICAgICAgbXYgb2xkLyRmaWxleywueHp9CistICAgICAgICAgIG12IG5ldy8kZmlsZXssLnh6fQorLSAgICAgICAgICB4eiAtZCBvbGQvJGZpbGUueHoKKy0gICAgICAgICAgeHogLWQgbmV3LyRmaWxlLnh6CistICAgICAgICAgIDs7CistICAgICAgZXNhYworLSAgICAgIGZ0eXBlPWAvdXNyL2Jpbi9maWxlIG9sZC8kZmlsZSB8IHNlZCAnc0BeW146XVwrOltbOmJsYW5rOl1dKkBAJ2AKKy0gICAgICBjYXNlICRmdHlwZSBpbgorLSAgICAgICAgUE9TSVhcIHRhclwgYXJjaGl2ZSkKKy0gICAgICAgICAgZWNobyAiJGV4dCBjb250ZW50IGlzOiAkZnR5cGUiCistICAgICAgICAgIG12IG9sZC8kZmlsZXssLnRhcn0KKy0gICAgICAgICAgbXYgbmV3LyRmaWxleywudGFyfQorLSAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZX0udGFyOyB0aGVuCistICAgICAgICAgICAgcmV0PTEKKy0gICAgICAgICAgZmkKKy0gICAgICAgICAgOzsKKy0gICAgICAgIEFTQ0lJXCBjcGlvXCBhcmNoaXZlXCAqKQorLSAgICAgICAgICBlY2hvICIkZXh0IGNvbnRlbnQgaXM6ICRmdHlwZSIKKy0gICAgICAgICAgbXYgb2xkLyRmaWxleywuY3Bpb30KKy0gICAgICAgICAgbXYgbmV3LyRmaWxleywuY3Bpb30KKy0gICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGV9LmNwaW87IHRoZW4KKy0gICAgICAgICAgICByZXQ9MQorLSAgICAgICAgICBmaQorLSAgICAgICAgICA7OworLSAgICAgICAgKikKKy0gICAgICAgICAgZWNobyAidW5oYW5kbGVkICRleHQgY29udGVudDogJGZ0eXBlIgorLSAgICAgICAgICBpZiAhIGRpZmZfdHdvX2ZpbGVzOyB0aGVuCistICAgICAgICAgICAgcmV0PTEKKy0gICAgICAgICAgZmkKKy0gICAgICAgICAgOzsKKy0gICAgICBlc2FjCistICAgICAgcG9wZCA+IC9kZXYvbnVsbAorLSAgICBmaQorLSAgICBybSAtcmYgIiR0bXBkaXIiCistICBmaQorLSAgcmV0dXJuICRyZXQKKy19CistCistY2hlY2tfc2luZ2xlX2ZpbGUoKQorLXsKKy0gIGxvY2FsIGZpbGU9IiQxIgorLSAgY2FzZSAkZmlsZSBpbgorLSAgICAqLnNwZWMpCistICAgICAgIHNlZCAtaSAtZSAicyxSZWxlYXNlOi4qJHJlbGVhc2UxLFJlbGVhc2U6IEBSRUxFQVNFQCwiIG9sZC8kZmlsZQorLSAgICAgICBzZWQgLWkgLWUgInMsUmVsZWFzZTouKiRyZWxlYXNlMixSZWxlYXNlOiBAUkVMRUFTRUAsIiBuZXcvJGZpbGUKKy0gICAgICAgOzsKKy0gICAgKi5leGUubWRifCouZGxsLm1kYikKKy0gICAgICAgIyBKdXN0IGRlYnVnIGluZm9ybWF0aW9uLCB3ZSBjYW4gc2tpcCB0aGVtCistICAgICAgIGVjaG8gIiRmaWxlIHNraXBwZWQgYXMgZGVidWcgZmlsZS4iCistICAgICAgIHJldHVybiAwCistICAgICAgIDs7CistICAgICouYSkKKy0gICAgICAgZmxpc3Q9YGFyIHQgbmV3LyRmaWxlYAorLSAgICAgICBwd2Q9JFBXRAorLSAgICAgICBmZGlyPWBkaXJuYW1lICRmaWxlYAorLSAgICAgICBjZCBvbGQvJGZkaXIKKy0gICAgICAgYXIgeCBgYmFzZW5hbWUgJGZpbGVgCistICAgICAgIGNkICRwd2QvbmV3LyRmZGlyCistICAgICAgIGFyIHggYGJhc2VuYW1lICRmaWxlYAorLSAgICAgICBjZCAkcHdkCistICAgICAgIGZvciBmIGluICRmbGlzdDsgZG8KKy0gICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAkZmRpci8kZjsgdGhlbgorLSAgICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICAgICBmaQorLSAgICAgICBkb25lCistICAgICAgIHJldHVybiAwCistICAgICAgIDs7CistICAgICouY3BpbykKKy0gICAgICAgZmxpc3Q9YGNwaW8gLS1xdWlldCAtLWxpc3QgLS1mb3JjZS1sb2NhbCA8ICJuZXcvJGZpbGUiYAorLSAgICAgICBwd2Q9JFBXRAorLSAgICAgICBmZGlyPSRmaWxlLmV4dHJhY3QuJFBQSUQuJCQKKy0gICAgICAgbWtkaXIgb2xkLyRmZGlyIG5ldy8kZmRpcgorLSAgICAgICBjZCBvbGQvJGZkaXIKKy0gICAgICAgY3BpbyAtLXF1aWV0IC0tZXh0cmFjdCAtLWZvcmNlLWxvY2FsIDwgIi4uLyR7ZmlsZSMjKi99IgorLSAgICAgICBjZCAkcHdkL25ldy8kZmRpcgorLSAgICAgICBjcGlvIC0tcXVpZXQgLS1leHRyYWN0IC0tZm9yY2UtbG9jYWwgPCAiLi4vJHtmaWxlIyMqL30iCistICAgICAgIGNkICRwd2QKKy0gICAgICAgbG9jYWwgcmV0PTAKKy0gICAgICAgZm9yIGYgaW4gJGZsaXN0OyBkbworLSAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZkaXIvJGY7IHRoZW4KKy0gICAgICAgICAgIHJldD0xCistICAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorLSAgICAgICAgICAgICBicmVhaworLSAgICAgICAgICAgZmkKKy0gICAgICAgICBmaQorLSAgICAgICBkb25lCistICAgICAgIHJtIC1yZiBvbGQvJGZkaXIgbmV3LyRmZGlyCistICAgICAgIHJldHVybiAkcmV0CistICAgICAgIDs7CistICAgICoudGFyfCoudGFyLmJ6MnwqLnRhci5nenwqLnRnenwqLnRiejIpCistICAgICAgIGZsaXN0PWB0YXIgdGYgbmV3LyRmaWxlYAorLSAgICAgICBwd2Q9JFBXRAorLSAgICAgICBmZGlyPWBkaXJuYW1lICRmaWxlYAorLSAgICAgICBjZCBvbGQvJGZkaXIKKy0gICAgICAgdGFyIHhmIGBiYXNlbmFtZSAkZmlsZWAKKy0gICAgICAgY2QgJHB3ZC9uZXcvJGZkaXIKKy0gICAgICAgdGFyIHhmIGBiYXNlbmFtZSAkZmlsZWAKKy0gICAgICAgY2QgJHB3ZAorLSAgICAgICBsb2NhbCByZXQ9MAorLSAgICAgICBmb3IgZiBpbiAkZmxpc3Q7IGRvCistICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAkZmRpci8kZjsgdGhlbgorLSAgICAgICAgICAgcmV0PTEKKy0gICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCistICAgICAgICAgICAgIGJyZWFrCistICAgICAgICAgICBmaQorLSAgICAgICAgIGZpCistICAgICAgIGRvbmUKKy0gICAgICAgcmV0dXJuICRyZXQKKy0gICAgICAgOzsKKy0gICAgKi56aXB8Ki5qYXJ8Ki53YXIpCistICAgICAgIGNkIG9sZAorLSAgICAgICB1bmphcl9sIC4vJGZpbGUgfHNvcnQgPiBmbGlzdAorLSAgICAgICAjICAxMC0wNS0yMDEwIDE0OjM5CistICAgICAgIHNlZCAtaSAtZSAicywgWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldXCsgWzAtOV1bMC05XTpbMC05XVswLTldICwgZGF0ZSAsIiBmbGlzdAorLSAgICAgICAjIDIwMTItMDItMDMgMDc6NTkKKy0gICAgICAgc2VkIC1pIC1lICJzLCAyMFswLTldWzAtOV0tWzAtOV1bMC05XS1bMC05XVswLTldIFswLTldWzAtOV06WzAtOV1bMC05XSAsIGRhdGUgLCIgZmxpc3QKKy0gICAgICAgY2QgLi4vbmV3CistICAgICAgIHVuamFyX2wgLi8kZmlsZSB8c29ydD4gZmxpc3QKKy0gICAgICAgc2VkIC1pIC1lICJzLCBbMC05XVswLTldLVswLTldWzAtOV0tWzAtOV1cKyBbMC05XVswLTldOlswLTldWzAtOV0gLCBkYXRlICw7ICIgZmxpc3QKKy0gICAgICAgc2VkIC1pIC1lICJzLCAyMFswLTldWzAtOV0tWzAtOV1bMC05XS1bMC05XVswLTldIFswLTldWzAtOV06WzAtOV1bMC05XSAsIGRhdGUgLCIgZmxpc3QKKy0gICAgICAgY2QgLi4KKy0gICAgICAgaWYgISBjbXAgLXMgb2xkL2ZsaXN0IG5ldy9mbGlzdDsgdGhlbgorLSAgICAgICAgICBlY2hvICIkZmlsZSBoYXMgZGlmZmVyZW50IGZpbGUgbGlzdCIKKy0gICAgICAgICAgZGlmZiAtdSBvbGQvZmxpc3QgbmV3L2ZsaXN0CistICAgICAgICAgIHJldHVybiAxCistICAgICAgIGZpCistICAgICAgIGZsaXN0PWBncmVwIGRhdGUgbmV3L2ZsaXN0IHwgc2VkIC1lICdzLC4qIGRhdGUgLCwnYAorLSAgICAgICBwd2Q9JFBXRAorLSAgICAgICBmZGlyPWBkaXJuYW1lICRmaWxlYAorLSAgICAgICBjZCBvbGQvJGZkaXIKKy0gICAgICAgdW5qYXIgYGJhc2VuYW1lICRmaWxlYAorLSAgICAgICBjZCAkcHdkL25ldy8kZmRpcgorLSAgICAgICB1bmphciBgYmFzZW5hbWUgJGZpbGVgCistICAgICAgIGNkICRwd2QKKy0gICAgICAgbG9jYWwgcmV0PTAKKy0gICAgICAgZm9yIGYgaW4gJGZsaXN0OyBkbworLSAgICAgICAgIGlmIHRlc3QgLWYgbmV3LyRmZGlyLyRmICYmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZkaXIvJGY7IHRoZW4KKy0gICAgICAgICAgIHJldD0xCistICAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorLSAgICAgICAgICAgICBicmVhaworLSAgICAgICAgICAgZmkKKy0gICAgICAgICBmaQorLSAgICAgICBkb25lCistICAgICAgIHJldHVybiAkcmV0OzsKKy0gICAgICoucHljfCoucHlvKQorLSAgICAgICAgcGVybCAtZSAib3BlbiBmaCwgJys8JywgJ29sZC8kZmlsZSc7IHNlZWsgZmgsIDQsIFNFRUtfU0VUOyBwcmludCBmaCAnMDAwMCc7IgorLSAgICAgICAgcGVybCAtZSAib3BlbiBmaCwgJys8JywgJ25ldy8kZmlsZSc7IHNlZWsgZmgsIDQsIFNFRUtfU0VUOyBwcmludCBmaCAnMDAwMCc7IgorLSAgICAgICAgOzsKKy0gICAgICouYnoyKQorLSAgICAgICAgYnVuemlwMiAtYyBvbGQvJGZpbGUgPiBvbGQvJHtmaWxlLy5iejIvfQorLSAgICAgICAgYnVuemlwMiAtYyBuZXcvJGZpbGUgPiBuZXcvJHtmaWxlLy5iejIvfQorLSAgICAgICAgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlLy5iejIvfQorLSAgICAgICAgcmV0dXJuICQ/CistICAgICAgICA7OworLSAgICAgKi5neikKKy0gICAgICAgIGd1bnppcCAtYyBvbGQvJGZpbGUgPiBvbGQvJHtmaWxlLy5nei99CistICAgICAgICBndW56aXAgLWMgbmV3LyRmaWxlID4gbmV3LyR7ZmlsZS8uZ3ovfQorLSAgICAgICAgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlLy5nei99CistICAgICAgICByZXR1cm4gJD8KKy0gICAgICAgIDs7CistICAgICAqLnJwbSkKKy0JJHNlbGZfc2NyaXB0IC1hIG9sZC8kZmlsZSBuZXcvJGZpbGUKKy0gICAgICAgIHJldHVybiAkPworLSAgICAgICAgOzsKKy0gICAgICpwbmcpCistCSMgVHJ5IHRvIHJlbW92ZSB0aW1lc3RhbXBzLCBvbmx5IGlmIGNvbnZlcnQgZnJvbSBJbWFnZU1hZ2ljayBpcyBpbnN0YWxsZWQKKy0gICAgICAgIGlmIFtbICQodHlwZSAtcCBjb252ZXJ0KSBdXTsgdGhlbgorLQkgIGNvbnZlcnQgb2xkLyRmaWxlICtzZXQgZGF0ZTpjcmVhdGUgK3NldCBkYXRlOm1vZGlmeSBvbGQvJHtmaWxlLy5wbmcvX24ucG5nfQorLQkgIGNvbnZlcnQgb2xkLyRmaWxlICtzZXQgZGF0ZTpjcmVhdGUgK3NldCBkYXRlOm1vZGlmeSBuZXcvJHtmaWxlLy5wbmcvX24ucG5nfQorLQkgIGlmICEgY21wIC1zIG9sZC8ke2ZpbGUvLnBuZy9fbi5wbmd9IG5ldy8ke2ZpbGUvLnBuZy9fbi5wbmd9OyB0aGVuCistCSAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgKCRmdHlwZSkiCistCSAgICAgIGhleGR1bXAgLUMgb2xkLyR7ZmlsZS8ucG5nL19uLnBuZ30gPiAkZmlsZTEKKy0JICAgICAgaGV4ZHVtcCAtQyBuZXcvJHtmaWxlLy5wbmcvX24ucG5nfSA+ICRmaWxlMgorLQkgICAgICBkaWZmIC11ICRmaWxlMSAkZmlsZTIgfCBoZWFkIC1uIDIwCistCSAgICAgIHJldHVybiAxCistCSAgZmkKKy0JICByZXR1cm4gMAorLQlmaQorLSAgICAgICAgOzsKKy0gICAgIC91c3Ivc2hhcmUvbG9jYWxlLyovTENfTUVTU0FHRVMvKi5tb3wvdXNyL3NoYXJlL2xvY2FsZS1idW5kbGUvKi9MQ19NRVNTQUdFUy8qLm1vKQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgIHNlZCAtaSAtZSAicyxQT1QtQ3JlYXRpb24tRGF0ZTogLi4uLi0uLi0uLiAuLjouLisuLi4uLFBPVC1DcmVhdGlvbi1EYXRlOiAxOTcwLTAxLTAxIDAwOjAwKzAwMDAsIiAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvdXNyL3NoYXJlL2RvYy9wYWNrYWdlcy8qLyouaHRtbHxcCistICAgICAvdXNyL3NoYXJlL2RvYy9rZGUvSFRNTC8qLyovKi5odG1sfC91c3Ivc2hhcmUvZG9jLyovaHRtbC8qLmh0bWwpCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistICAgICAgICAgIyB0ZXhpMmh0bWwgb3V0cHV0LCBlLmcuIGluIGt2bSwgaW5kZW50LCBxZW11CistCSBzZWQgLWkgLWUgInN8XjwhLS0gQ3JlYXRlZCBvbiAuKiwgMjAuLiBieSB0ZXhpMmh0bWwgLlwuLi58PCEtLSBDcmVhdGVkIG9uIEF1Z3VzdCA3LCAyMDA5IGJ5IHRleGkyaHRtbCAxLjgyfCIgJGYKKy0JIHNlZCAtaSAtZSAnc3xeICpUaGlzIGRvY3VtZW50IHdhcyBnZW5lcmF0ZWQgYnkgPGVtPkF1dG9idWlsZDwvZW0+IG9uIDxlbT4uKiwgMjAuLjwvZW0+IHVzaW5nIDxhIGhyZWY9Imh0dHA6Ly93d3cubm9uZ251Lm9yZy90ZXhpMmh0bWwvIj48ZW0+dGV4aTJodG1sIC5cLi4uPC9lbT48L2E+LiR8ICBUaGlzIGRvY3VtZW50IHdhcyBnZW5lcmF0ZWQgYnkgPGVtPkF1dG9idWlsZDwvZW0+IG9uIDxlbT5BdWd1c3QgNywgMjAwOTwvZW0+IHVzaW5nIDxhIGhyZWY9Imh0dHA6Ly93d3cubm9uZ251Lm9yZy90ZXhpMmh0bWwvIj48ZW0+dGV4aTJodG1sIDEuODI8L2VtPjwvYT4ufCcgJGYKKy0JICMgZG94eWdlbiBkb2N1LCBlLmcuIGluIGxpYnNzaCBhbmQgbG9nNGMKKy0JIHNlZCAtaSAtZSAnc3xHZW5lcmF0ZWQgb24gLi4uIC4uLiBbMC05XSogWzAtOV0qOlswLTldWzAtOV06WzAtOV1bMC05XSAyMFswLTldWzAtOV0gZm9yIHxHZW5lcmF0ZWQgb24gTW9uIE1heSAxMCAyMDo0NTowMCAyMDEwIGZvciB8JyAkZgorLQkgIyBHZW5lcmF0ZWQgb24gU2F0IEF1ZyAxNCAyMDEwIDE2OjQ5OjQ4IGZvciBsaWJzc2gKKy0JIHNlZCAtaSAtZSAnc3xHZW5lcmF0ZWQgb24gLi4uIC4uLiBbMC05XSogMjBbMC05XVswLTldIFswLTldKjpbMC05XVswLTldOlswLTldWzAtOV0gZm9yIHxHZW5lcmF0ZWQgb24gTW9uIE1heSAxMCAyMDo0NTowMCAyMDEwIGZvciB8JyAkZgorLSAgICAgICBkb25lCistICAgICAgIHN0cmlwX251bWJlcmVkX2FuY2hvcnMKKy0gICAgICAgOzsKKy0gICAgIC91c3Ivc2hhcmUvamF2YWRvYy8qLmh0bWwgfFwKKy0gICAgIC91c3Ivc2hhcmUvamF2YWRvYy8qLyouaHRtbHwvdXNyL3NoYXJlL2phdmFkb2MvKi8qLyouaHRtbCkKKy0gICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworLSAgICAgICAjIFRoZXJlIGFyZSBtb3JlIHRpbWVzdGFtcHMgaW4gaHRtbCwgc28gZmFyIHdlIGhhbmRsZSBvbmx5IHNvbWUgcHJpbWl0aXZlIHZlcnNpb25zLgorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgICMgSmF2YWRvYzoKKy0gICAgICAgICAgIyA8aGVhZD4KKy0gICAgICAgICAgIyA8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jICh2ZXJzaW9uIDEuNy4wXzc1KSBvbiBUdWUgRmViIDAzIDAyOjIwOjEyIEdNVCAyMDE1IC0tPgorLSAgICAgICAgICAjIDwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVHVlIEZlYiAwMyAwMDowMjo0OCBHTVQgMjAxNSAtLT4KKy0gICAgICAgICAgIyA8bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDE1LTAyLTAzIj4KKy0gICAgICAgICAgIyA8L2hlYWQ+CistICAgICAgICAgIHNlZCAtaSAtZSAnCistICAgICAgICAgICAgL148aGVhZD4veworLSAgICAgICAgICAgICAgOiBuZXh0CistICAgICAgICAgICAgICBuCistICAgICAgICAgICAgICAvXjxcL2hlYWQ+L3sKKy0gICAgICAgICAgICAgICAgYiBlbmRfaGVhZAorLSAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgcy9eXCg8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jXCkgXCgoXChidWlsZFx8dmVyc2lvblwpIFswLTkuX11cKykgb24gLi4uIC4uLiAuLiAuLjouLjouLiBcKEdNVFx8VVRDXCkgLi4uLlwpIFwoLS0+XCkvXDEgc29tZS1kYXRlLXJlbW92ZWQtYnktYnVpbGQtY29tcGFyZSBcNS8KKy0gICAgICAgICAgICAgIHQgbmV4dAorLSAgICAgICAgICAgICAgcy9eXCg8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jXCkgXChvbiAuLi4gLi4uIC4uIC4uOi4uOi4uIFwoR01UXHxVVENcKSAuLi4uXCkgXCgtLT5cKS9cMSBzb21lLWRhdGUtcmVtb3ZlZC1ieS1idWlsZC1jb21wYXJlIFwzLworLSAgICAgICAgICAgICAgdCBuZXh0CistICAgICAgICAgICAgICBzL148bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSJbMC05XVx7NFx9LVswLTldXHsyXH0tWzAtOV1cezJcfSI+LzxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9InNvbWUtZGF0ZS1yZW1vdmVkLWJ5LWJ1aWxkLWNvbXBhcmUiPi8KKy0gICAgICAgICAgICAgIGIgbmV4dAorLSAgICAgICAgICAgIH0KKy0gICAgICAgICAgICA6IGVuZF9oZWFkCistICAgICAgICAgICcgJGYKKy0gICAgICAgICAjIEdqZG9jIEh0bWxEb2NsZXQ6CistCSBzZWQgLWkgLWUgJ3MlR2VuZXJhdGVkIGJ5IEdqZG9jIEh0bWxEb2NsZXQgWzAtOSwuXSosIHBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NsYXNzcGF0aC9jcC10b29scy8iIHRpdGxlPSIiIHRhcmdldD0iX3RvcCI+R05VIENsYXNzcGF0aCBUb29sczwvYT4sIG9uIC4qLCAyMC4uIFswLTldKjouLjouLiBcKGFcfHBcKVwubVwuIEdNVC4lR2VuZXJhdGVkIGJ5IEdqZG9jLiUnICRmCistCSBzZWQgLWkgLWUgJ3MlPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9nbnUub3JnLy8vRFREIFhIVE1MIDEuMSBwbHVzIFRhcmdldCAxLjAvL0VOIlwoLipcKUdOVSBDbGFzc3BhdGggVG9vbHM8L2E+LCBvbiBbQS1aXVthLXpdKiBbMC05XSosIDIwPz8gWzAtOV0qOj8/Oj8/IFwoYXxwXClcLm1cLiBHTVQuPC9wPiU8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL2dudS5vcmcvLy9EVEQgWEhUTUwgMS4xIHBsdXMgVGFyZ2V0IDEuMC8vRU4iXDFHTlUgQ2xhc3NwYXRoIFRvb2xzPC9hPiwgb24gSmFudWFyeSAxLCAyMDA5IDA6MDA6MDAgYS5tLiBHTVQuPC9wPiUnICRmCistCSBzZWQgLWkgLWUgJ3MlPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9nbnUub3JnLy8vRFREXCguKkdOVSBDbGFzc3BhdGggVG9vbHM8L2E+XCksIG9uIFthLXpBLVpdKiBbMC05XVswLTldLCAyMC4uIFswLTldKjouLjouLiBcKGFcfHBcKVwubVwuIEdNVC48L3A+JTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vZ251Lm9yZy8vL0RURFwxLG9uIE1heSAxLCAyMDEwIDE6MTE6NDIgcC5tLiBHTVQuPC9wPiUnICRmCistCSAjIGRlcHJlY2F0ZWQtbGlzdCBpcyByYW5kb21seSBvcmRlcmVkLCBzb3J0IGl0IGZvciBjb21wYXJpc29uCistCSBjYXNlICRmIGluCistCSAgICovZGVwcmVjYXRlZC1saXN0Lmh0bWwpCistCSAgICAgc29ydCAtbyAkZiAkZgorLQkgICAgIDs7CistCSBlc2FjCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgIC91c3Ivc2hhcmUvamF2YWRvYy9namRvYy5wcm9wZXJ0aWVzIHxcCistICAgICAvdXNyL3NoYXJlL2phdmFkb2MvKi9namRvYy5wcm9wZXJ0aWVzKQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLQkgc2VkIC1pIC1lICdzfF4jW0EtWl1bYS16XVx7Mlx9IFtBLVpdW2Etel1cezJcfSBbMC05XVx7Mlx9IC4uOi4uOi4uIEdNVCAyMC4uJHwjRnJpIEphbiAwMSAxMToyNzozNiBHTVQgMjAwOXwnICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgICovZm9udHMuc2NhbGV8Ki9mb250cy5kaXJ8Ki9lbmNvZGluZ3MuZGlyKQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgICMgc29ydCBmaWxlcyBiZWZvcmUgY29tcGFyaW5nCistICAgICAgICAgc29ydCAtbyAkZiAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvdmFyL2FkbS9wZXJsLW1vZHVsZXMvKikKKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgICAgICBzZWQgLWkgLWUgJ3N8Xj1oZWFkMiAuLi4gLi4uIC4uIC4uOi4uOi4uIC4uLi46IEM8TW9kdWxlPnw9aGVhZDIgV2VkIEp1bCAgMSAwMDowMDowMCAyMDA5OiBDPE1vZHVsZT58JyAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvdXNyL3NoYXJlL21hbi9tYW4zLyozcG0pCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistICAgICAgICAgc2VkIC1pIC1lICdzfCAzICIyMC4uLS4uLS4uIiAicGVybCB2NS4uLi4uIiAiVXNlciBDb250cmlidXRlZCBQZXJsIERvY3VtZW50YXRpb24iJHwgMyAiMjAwOS0wMS0wMSIgInBlcmwgdjUuMTAuMCIgIlVzZXIgQ29udHJpYnV0ZWQgUGVybCBEb2N1bWVudGF0aW9uInwnICRmCistICAgICAgICAgdHJpbV9tYW5fVEggJGYKKy0gICAgICAgICB0cmltX21hbl9maXJzdF9saW5lICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgIC91c3Ivc2hhcmUvbWFuLyovbWFuKnwvdXNyL3NoYXJlL21hbi9tYW4qfC91c3IvbGliL3RleG1mL2RvYy9tYW4vKi8qKQorLQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgIHRyaW1fbWFuX1RIICRmCistICAgICAgICAgdHJpbV9tYW5fZmlyc3RfbGluZSAkZgorLSAgICAgICAgICMgZ2VuZXJhdGVkIGJ5IGRvY2Jvb2sgeG1sOgorLSAgICAgICAgICMuXCIgICAgICBEYXRlOiAwOS8xMy8yMDEwCistICAgICAgICAgc2VkIC1pIC1lICdzfERhdGU6IFswLTFdWzAtOV0vWzAtOV1bMC05XS8yMDFbMC05XXxEYXRlOiAwOS8xMy8yMDEwfCcgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAgKi5lbGMpCistICAgICAgICMgZW1hY3MgbGlzcCBmaWxlcworLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgIHNlZCAtaSAtZSAnc3xDb21waWxlZCBieSBhYnVpbGRALiogb24gLi4uIC4uLiAuLiAuLjouLjouLiAyMC4uJHxjb21waWxlZCBieSBhYnVpbGRAYnVpbGRob3N0IG9uIFdlZCBKdWwgMDEgMDA6MDA6MDAgMjAwOXwnICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgIC92YXIvbGliL3RleG1mL3dlYjJjLyovKmZtdCB8XAorLSAgICAgL3Zhci9saWIvdGV4bWYvd2ViMmMvbWV0YWZvbnQvKi5iYXNlfFwKKy0gICAgIC92YXIvbGliL3RleG1mL3dlYjJjL21ldGFwb3N0LyoubWVtKQorLSAgICAgICAjIGJpbmFyeSBkdW1wIG9mIFRlWCBhbmQgTWV0YWZvbnQgZm9ybWF0cywgd2UgY2FuIGlnbm9yZSB0aGVtIGZvciBnb29kCistICAgICAgIGVjaG8gImRpZmZlcmVuY2UgaW4gJGZpbGUgaWdub3JlZC4iCistICAgICAgIHJldHVybiAwCistICAgICAgIDs7CistICAgICAqL2xpYnRvb2wpCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistCSAgc2VkIC1pIC1lICdzfF4jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBbQS1aYS16MC05XSo6JHwjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCB4NDI6fCcgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAgL2V0Yy9tYWlsLypjZnwvZXRjL3NlbmRtYWlsLmNmKQorLSAgICAgICAjIGZyb20gc2VuZG1haWwgcGFja2FnZQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLQkgICMgLSAjIyMjIyBidWlsdCBieSBhYnVpbGRAYnVpbGQzMyBvbiBUaHUgTWF5IDYgMTE6MjE6MTcgVVRDIDIwMTAKKy0JICBzZWQgLWkgLWUgJ3N8YnVpbHQgYnkgYWJ1aWxkQFthLXowLTldKiBvbiAuLi4gLi4uIFswLTldKiBbMC05XSo6WzAtOV1bMC05XTpbMC05XVswLTldIC4qIDIwWzAtOV1bMC05XXxidWlsdCBieSBhYnVpbGRAYnVpbGQ0MiBvbiBUaHUgTWF5IDYgMTE6MjE6MTcgVVRDIDIwMTB8JyAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvdXNyL3NoYXJlL2RvYy9rZGUvSFRNTC8qLyovaW5kZXguY2FjaGV8L3Vzci9zaGFyZS9kb2Mva2RlL0hUTUwvKi8qLyovaW5kZXguY2FjaGV8XAorLSAgICAgL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvKi8qLmh0bWx8L3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvKi8qLmRldmhlbHAyKQorLSAgICAgICAjIHZhcmlvdXMga2RlIGFuZCBndGsgcGFja2FnZXMKKy0gICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworLSAgICAgICA7OworLSAgICAqL2NyZWF0ZWQucmlkKQorLSAgICAgICAjIHJ1YnkgZG9jdW1lbnRhdGlvbgorLSAgICAgICAjIGZpbGUganVzdCBjb250YWlucyBhIHRpbWVzdGFtcCBhbmQgbm90aGluZyBlbHNlLCBzbyBpZ25vcmUgaXQKKy0gICAgICAgZWNobyAiSWdub3JlICRmaWxlIgorLSAgICAgICByZXR1cm4gMAorLSAgICAgICA7OworLSAgICAqL3Jkb2MvZmlsZXMvKi5odG1sKQorLSAgICAgICAjIHJ1YnkgZG9jdW1lbnRhdGlvbgorLSAgICAgICAjIDx0ZD5Nb27igIJTZXDigIIyMOKAgjE5OjAyOjQz4oCCKzAwMDDigIIyMDEwPC90ZD4KKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgICAgICAgc2VkIC1pIC1lICdzJTx0ZD5bQS1aXVthLXpdW2Etel0gW0EtWl1bYS16XVthLXpdIFswLTldXCsgWzAtOV1cKzpbMC05XVwrOlswLTldXCsgKzAwMDAgMjAxWzAtOV08L3RkPiU8dGQ+TW9u4oCCU2Vw4oCCMjDigIIxOTowMjo0M+KAgiswMDAw4oCCMjAxMDwvdGQ+JWcnICRmCistICAgICAgIGRvbmUKKy0gICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworLSAgICAgICA7OworLSAgICAqL0xpbnV4KkVudi5TZXQuc2gpCistICAgICAgICMgTGlicmVPZmZpY2UgZmlsZXMsIGNvbnRhaW5zOgorLSAgICAgICAjIEdlbmVyYXRlZCBvbjogTW9uIEFwciAxOCAxMzoxOToyMiBVVEMgMjAxMQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLQkgc2VkIC1pIC1lICdzJV4jIEdlbmVyYXRlZCBvbjouKlVUQyAyMDFbMC05XSAqJCUjIEdlbmVyYXRlZCBvbjogU29tZXRpbWUlZycgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAvdXNyL2xpYi9saWJyZW9mZmljZS9zb2x2ZXIvaW5jLyovZGVsaXZlci5sb2cpCistICAgICAgICMgTGlicmVPZmZpY2UgbG9nIGZpbGUKKy0gICAgICBlY2hvICJJZ25vcmUgJGZpbGUiCistICAgICAgcmV0dXJuIDAKKy0gICAgICA7OworLSAgICAvdmFyL2FkbS91cGRhdGUtbWVzc2FnZXMvKnwvdmFyL2FkbS91cGRhdGUtc2NyaXB0cy8qKQorLSAgICAgICMgZW5jb2RlIHZlcnNpb24tcmVsZWFzZSBpbnNpZGUKKy0gICAgICBvbGRmbj1gZWNobyAiJGZpbGUifHNlZCAtZSBzLy0kcmVsZWFzZTIvLSRyZWxlYXNlMS87YAorLQorLSAgICAgICMgZmV0Y2htc3R0Zm9udHMgZW1iZWRzIHRoZSByZWxlYXNlIG51bWJlciBpbiB0aGUgdXBkYXRlIHNoZWxsIHNjcmlwdC4KKy0gICAgICBlY2hvIHNlZCAtaSAtZSAicy8tJHJlbGVhc2UxLy0kcmVsZWFzZTIvZzsiICJvbGQvJG9sZGZuIgorLSAgICAgIHNlZCAtaSAtZSAicy8tJHJlbGVhc2UxLy0kcmVsZWFzZTIvZzsiICJvbGQvJG9sZGZuIgorLQorLSAgICAgIGlmICEgZGlmZiAtdSBvbGQvJG9sZGZuIG5ldy8kZmlsZTsgdGhlbgorLSAgICAgICAgICAgZWNobyAiJG9sZGZuIGlzIG5vdCBzYW1lIGFzICRmaWxlIgorLSAgICAgICAgICAgcmV0dXJuIDEKKy0gICAgICBmaQorLSAgICAgIGVjaG8gIiRmaWxlIGFuZCAkb2xkZm4gYXJlIHNhbWUiCistICAgICAgcmV0dXJuIDAKKy0gICAgICA7OworLSAgICAqLnBzKQorLSAgICAgIGZvciBmIGluICJvbGQvJGZpbGUiICJuZXcvJGZpbGUiOyBkbworLSAgICAgICAgc2VkIC1pIC1lICcKKy0JL14lJUNyZWF0aW9uRGF0ZTpbWzpibGFuazpdXS9kCistCS9eJSVDcmVhdG9yOltbOmJsYW5rOl1dZ3JvZmZbWzpibGFuazpdXXZlcnNpb25bWzpibGFuazpdXS9kCistCScgIiRmIgorLSAgICAgIGRvbmUKKy0gICAgOzsKKy0gICAgKnBkZikKKy0gICAgICAjIFBERiBmaWxlcyBjb250YWluIGEgdW5pcXVlIElELCByZW1vdmUgaXQKKy0gICAgICAjIEZvcm1hdCBvZiB0aGUgSUQgaXM6CistICAgICAgIyAvSUQgWzw5QUNFMjQ3QTcwQ0Y5QkVBRkVFMTVFMTE2MjU5QkQ2RD4gPDlBQ0UyNDdBNzBDRjlCRUFGRUUxNUUxMTYyNTlCRDZEPl0KKy0gICAgICAjIHdpdGggb3B0aW9uYWwgc3BhY2VzLiBwZGZ0ZXggY3JlYXRlcyBhbHNvOgorLSAgICAgICMgL0NyZWF0aW9uRGF0ZSAoRDoyMDEyMDEwMzA4MzIwNlopCistICAgICAgIyAvTW9kRGF0ZSAoRDoyMDEyMDEwMzA4MzIwNlopCistICAgICAgIyBhbmQgcG9zc2libHkgWE1MIG1ldGFkYXRhIGFzIHdlbGwKKy0gICAgICBmb3IgZiBpbiAib2xkLyRmaWxlIiAibmV3LyRmaWxlIjsgZG8KKy0gICAgICAgIHNlZCAtaSBcCistICAgICAgICAgICAgJy9vYmovLC9lbmRvYmoveworLSAgICAgICAgICAgICAgIHMlL0lEIFw/XFsgXD88W14+XVwrPiBcPzxbXj5dXCs+IFw/XF0lL0lEcmFuZG9tJWc7CistICAgICAgICAgICAgICAgcyUvQ3JlYXRpb25EYXRlIFw/KEQ6W14pXSopJS9DcmVhdGlvbkRhdGUgKEQ6IFhYWCklZzsKKy0gICAgICAgICAgICAgICBzJS9Nb2REYXRlIFw/KEQ6W14pXSopJS9Nb2REYXRlIChEOiBYWFgpJWc7CistICAgICAgICAgICAgICAgcyU8cGRmOkNyZWF0aW9uRGF0ZT5bXjxdKjwvcGRmOkNyZWF0aW9uRGF0ZT4lPHBkZjpDcmVhdGlvbkRhdGU+WFhYPC9wZGY6Q3JlYXRpb25EYXRlPiVnOworLSAgICAgICAgICAgICAgIHMlPHBkZjpNb2REYXRlPltePF0qPC9wZGY6TW9kRGF0ZT4lPHBkZjpNb2REYXRlPlhYWDwvcGRmOk1vZERhdGU+JWc7CistICAgICAgICAgICAgICAgcyU8eGFwOkNyZWF0ZURhdGU+W148XSo8L3hhcDpDcmVhdGVEYXRlPiU8eGFwOkNyZWF0ZURhdGU+WFhYPC94YXA6Q3JlYXRlRGF0ZT4lZzsKKy0gICAgICAgICAgICAgICBzJTx4YXA6TW9kaWZ5RGF0ZT5bXjxdKjwveGFwOk1vZGlmeURhdGU+JTx4YXA6TW9kaWZ5RGF0ZT5YWFg8L3hhcDpNb2RpZnlEYXRlPiVnOworLSAgICAgICAgICAgICAgIHMlPHhhcDpNZXRhZGF0YURhdGU+W148XSo8L3hhcDpNZXRhZGF0YURhdGU+JTx4YXA6TWV0YWRhdGFEYXRlPlhYWDwveGFwOk1ldGFkYXRhRGF0ZT4lZzsKKy0gICAgICAgICAgICB9JyAiJGYiCistICAgICAgZG9uZQorLSAgICAgIDs7CistICBlc2FjCistCistICBmdHlwZT1gL3Vzci9iaW4vZmlsZSBvbGQvJGZpbGUgfCBzZWQgJ3NAXlteOl1cKzpbWzpibGFuazpdXSpAQCdgCistICBjYXNlICRmdHlwZSBpbgorLSAgICAgUEUzMlwgZXhlY3V0YWJsZSpNb25vXC9cLk5ldFwgYXNzZW1ibHkqKQorLSAgICAgICBlY2hvICJQRTMyIE1vbm8vLk5ldCBhc3NlbWJseTogJGZpbGUiCistICAgICAgIGlmIFsgLXggL3Vzci9iaW4vbW9ub2RpcyBdIDsgdGhlbgorLSAgICAgICAgIG1vbm9kaXMgb2xkLyRmaWxlIDI+L2Rldi9udWxsfHNlZCAtZSAncy9HVUlEID0gey4qfS9HVUlEID0geyA0MiB9LzsnPiAke2ZpbGUxfQorLSAgICAgICAgIG1vbm9kaXMgbmV3LyRmaWxlIDI+L2Rldi9udWxsfHNlZCAtZSAncy9HVUlEID0gey4qfS9HVUlEID0geyA0MiB9LzsnPiAke2ZpbGUyfQorLSAgICAgICAgIGlmICEgY21wIC1zICR7ZmlsZTF9ICR7ZmlsZTJ9OyB0aGVuCistICAgICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzICgkZnR5cGUpIgorLSAgICAgICAgICAgZGlmZiAtdSAke2ZpbGUxfSAke2ZpbGUyfQorLSAgICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgICBmaQorLSAgICAgICBlbHNlCistICAgICAgICAgZWNobyAiQ2Fubm90IGNvbXBhcmUsIG5vIG1vbm9kaXMgaW5zdGFsbGVkIgorLSAgICAgICAgIHJldHVybiAxCistICAgICAgIGZpCistICAgICAgIDs7CistICAgIEVMRipleGVjdXRhYmxlKnxFTEYqW0xNXVNCXCBzaGFyZWRcIG9iamVjdCopCistICAgICAgIG9iamR1bXAgLWQgLS1uby1zaG93LXJhdy1pbnNuIG9sZC8kZmlsZSB8IGZpbHRlcl9kaXNhc20gPiAkZmlsZTEKKy0gICAgICAgaWYgISB0ZXN0IC1zICRmaWxlMTsgdGhlbgorLSAgICAgICAgICMgb2JqZHVtcCBoYXMgbm8gaWRlYSBob3cgdG8gaGFuZGxlIGl0CistICAgICAgICAgaWYgISBkaWZmX3R3b19maWxlczsgdGhlbgorLSAgICAgICAgICAgcmV0PTEKKy0gICAgICAgICAgIGJyZWFrCistICAgICAgICAgZmkKKy0gICAgICAgZmkgICAgICAgCistICAgICAgIGVsZmRpZmY9CistICAgICAgIHNlZCAtaSAtZSAicyxvbGQvLCwiICRmaWxlMQorLSAgICAgICBvYmpkdW1wIC1kIC0tbm8tc2hvdy1yYXctaW5zbiBuZXcvJGZpbGUgfCBmaWx0ZXJfZGlzYXNtID4gJGZpbGUyCistICAgICAgIHNlZCAtaSAtZSAicyxuZXcvLCwiICRmaWxlMgorLSAgICAgICBpZiAhIGRpZmYgLXUgJGZpbGUxICRmaWxlMiA+ICRkZmlsZTsgdGhlbgorLSAgICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzIGluIGFzc2VtYmxlciBvdXRwdXQiCistICAgICAgICAgIGhlYWQgLW4gMjAwICRkZmlsZQorLSAgICAgICAgICBlbGZkaWZmPSIxIgorLSAgICAgICBmaQorLSAgICAgICBlY2hvICIiID4kZmlsZTEKKy0gICAgICAgZWNobyAiIiA+JGZpbGUyCistICAgICAgICMgRG9uJ3QgY29tcGFyZSAuYnVpbGQtaWQgYW5kIC5nbnVfZGVidWdsaW5rIHNlY3Rpb25zCistICAgICAgIHNlY3Rpb25zPSIkKG9iamR1bXAgLXMgbmV3LyRmaWxlIHwgZ3JlcCAiQ29udGVudHMgb2Ygc2VjdGlvbiAuKjoiIHwgc2VkIC1yICJzLC4qICguKik6LFwxLGciIHwgZ3JlcCAtdiAtZSAiXC5idWlsZC1pZCIgLWUgIlwuZ251X2RlYnVnbGluayIgfCB0ciAiXG4iICIgIikiCistICAgICAgIGZvciBzZWN0aW9uIGluICRzZWN0aW9uczsgZG8KKy0gICAgICAgICAgb2JqZHVtcCAtcyAtaiAkc2VjdGlvbiBvbGQvJGZpbGUgfCBzZWQgInMsXm9sZC8sLCIgPiAkZmlsZTEKKy0gICAgICAgICAgb2JqZHVtcCAtcyAtaiAkc2VjdGlvbiBuZXcvJGZpbGUgfCBzZWQgInMsXm5ldy8sLCIgPiAkZmlsZTIKKy0gICAgICAgICAgaWYgISBkaWZmIC11ICRmaWxlMSAkZmlsZTIgPiAkZGZpbGU7IHRoZW4KKy0gICAgICAgICAgICAgZWNobyAiJGZpbGUgZGlmZmVycyBpbiBFTEYgc2VjdGlvbiAkc2VjdGlvbiIKKy0gICAgICAgICAgICAgaGVhZCAtbiAyMDAgJGRmaWxlCistICAgICAgICAgICAgIGVsZmRpZmY9IjEiCistICAgICAgICAgIGZpCistICAgICAgIGRvbmUKKy0gICAgICAgaWYgdGVzdCAteiAiJGVsZmRpZmYiOyB0aGVuCistICAgICAgICAgIGVjaG8gIiRmaWxlOiBvbmx5IGRpZmZlcmVuY2Ugd2FzIGluIGJ1aWxkLWlkIG9yIGdudV9kZWJ1Z2xpbmssIEdPT0QuIgorLSAgICAgICAgICByZXR1cm4gMAorLSAgICAgICBmaQorLSAgICAgICByZXR1cm4gMQorLSAgICAgICA7OworLSAgICAgKkFTQ0lJKnwqdGV4dCopCistICAgICAgIGlmICEgY21wIC1zIG9sZC8kZmlsZSBuZXcvJGZpbGU7IHRoZW4KKy0gICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzICgkZnR5cGUpIgorLSAgICAgICAgIGRpZmYgLXUgb2xkLyRmaWxlIG5ldy8kZmlsZSB8IGhlYWQgLW4gMjAwCistICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgZmkKKy0gICAgICAgOzsKKy0gICAgIGRpcmVjdG9yeXxzZXR1aWQsXCBkaXJlY3Rvcnl8c3RpY2t5LFwgZGlyZWN0b3J5KQorLSAgICAgICAjIHRhciBtaWdodCBwYWNrYWdlIGRpcmVjdG9yaWVzIC0gaWdub3JlIHRoZW0gaGVyZQorLSAgICAgICByZXR1cm4gMAorLSAgICAgICA7OworLSAgICAgYnppcDJcIGNvbXByZXNzZWRcIGRhdGEqKQorLSAgICAgICBpZiAhIGNoZWNrX2NvbXByZXNzZWRfZmlsZSAiJGZpbGUiICJiejIiOyB0aGVuCistICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICBmaQorLSAgICAgICA7OworLSAgICAgZ3ppcFwgY29tcHJlc3NlZFwgZGF0YSopCistICAgICAgIGlmICEgY2hlY2tfY29tcHJlc3NlZF9maWxlICIkZmlsZSIgImd6aXAiOyB0aGVuCistICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICBmaQorLSAgICAgICA7OworLSAgICAgWFpcIGNvbXByZXNzZWRcIGRhdGEqKQorLSAgICAgICBpZiAhIGNoZWNrX2NvbXByZXNzZWRfZmlsZSAiJGZpbGUiICJ4eiI7IHRoZW4KKy0gICAgICAgICAgIHJldHVybiAxCistICAgICAgIGZpCistICAgICAgIDs7CistICAgICBQT1NJWFwgdGFyXCBhcmNoaXZlKQorLSAgICAgICAgICBtdiBvbGQvJGZpbGV7LC50YXJ9CistICAgICAgICAgIG12IG5ldy8kZmlsZXssLnRhcn0KKy0gICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGV9LnRhcjsgdGhlbgorLSAgICAgICAgICAgIHJldHVybiAxCistICAgICAgICAgIGZpCistICAgICAgIDs7CistICAgICBjcGlvXCBhcmNoaXZlKQorLSAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5jcGlvfQorLSAgICAgICAgICBtdiBuZXcvJGZpbGV7LC5jcGlvfQorLSAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZX0uY3BpbzsgdGhlbgorLSAgICAgICAgICAgIHJldHVybiAxCistICAgICAgICAgIGZpCistICAgICA7OworLSAgICAgc3ltYm9saWNcIGxpbmtcIHRvXCAqKQorLSAgICAgICByZWFkbGluayAib2xkLyRmaWxlIiA+ICRmaWxlMQorLSAgICAgICByZWFkbGluayAibmV3LyRmaWxlIiA+ICRmaWxlMgorLSAgICAgICBpZiAhIGRpZmYgLXUgJGZpbGUxICRmaWxlMjsgdGhlbgorLSAgICAgICAgIGVjaG8gInN5bWxpbmsgdGFyZ2V0IGZvciAkZmlsZSBkaWZmZXJzIgorLSAgICAgICAgIHJldHVybiAxCistICAgICAgIGZpCistICAgICAgIDs7CistICAgICAqKQorLSAgICAgICBpZiAhIGRpZmZfdHdvX2ZpbGVzOyB0aGVuCistICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICBmaQorLSAgICAgICA7OworLSAgZXNhYworLSAgcmV0dXJuIDAKKy19CistCistIyBXZSBuZWVkIC9wcm9jIG1vdW50ZWQgZm9yIHNvbWUgdGVzdHMsIHNvIGNoZWNrIHRoYXQgaXQncyBtb3VudGVkIGFuZAorLSMgY29tcGxhaW4gaWYgbm90LgorLVBST0NfTU9VTlRFRD0wCistaWYgWyAhIC1kIC9wcm9jL3NlbGYvIF07IHRoZW4KKy0gIGVjaG8gIi9wcm9jIGlzIG5vdCBtb3VudGVkIgorLSAgbW91bnQgLW9ydyAtbiAtdHByb2Mgbm9uZSAvcHJvYworLSAgUFJPQ19NT1VOVEVEPTEKKy1maQorLQorLSMgcHJlc2VydmUgY21wX3NwZWMgcmVzdWx0IGZvciBjaGVja19hbGwgcnVucworLXJldD0kUkVTCistZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworLSAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZpbGU7IHRoZW4KKy0gICAgICAgcmV0PTEKKy0gICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKy0gICAgICAgICAgIGJyZWFrCistICAgICAgIGZpCistICAgZmkKKy1kb25lCistCistaWYgWyAiJFBST0NfTU9VTlRFRCIgLWVxICIxIiBdOyB0aGVuCistICBlY2hvICJVbm1vdW50aW5nIHByb2MiCistICB1bW91bnQgL3Byb2MKKy1maQorLQorLXJtICRmaWxlMSAkZmlsZTIgJGRmaWxlICRyZW5hbWVfc2NyaXB0Cistcm0gLXJmICRkaXIKKy1pZiB0ZXN0ICIkcmV0IiA9IDA7IHRoZW4KKy0gICAgIGVjaG8gIlBhY2thZ2UgY29udGVudCBpcyBpZGVudGljYWwiCistZmkKKy1leGl0ICRyZXQKKy0jIHZpbTogdHc9NjY2IHRzPTIgZXQKK2RpZmYgLS1naXQgYS9zYW1lLWJ1aWxkLXJlc3VsdC5zaCBiL3NhbWUtYnVpbGQtcmVzdWx0LnNoCitpbmRleCBjODkwN2UyLi43ZTliZDRmIDEwMDY0NAorLS0tIGEvc2FtZS1idWlsZC1yZXN1bHQuc2gKKysrKyBiL3NhbWUtYnVpbGQtcmVzdWx0LnNoCitAQCAtNywxMSArNywxMSBAQAorICMgRW5oYW5jZWQgYnkgQW5kcmVhcyBKYWVnZXIgPGFqQHN1c2UuZGU+CisgIworICMgVGhlIHNjcmlwdCBkZWNpZGVzIGlmIHRoZSBuZXcgYnVpbGQgZGlmZmVyZXMgZnJvbSB0aGUgZm9ybWVyIG9uZSwKKy0jIHVzaW5nIHJwbS1jaGVjay5zaC4KKysjIHVzaW5nIHBrZy1kaWZmLnNoLgorICMgVGhlIHNjcmlwdCBpcyBjYWxsZWQgYXMgcGFydCBvZiB0aGUgYnVpbGQgcHJvY2VzcyBhczoKKyAjIC91c3IvbGliL2J1aWxkL3NhbWUtYnVpbGQtcmVzdWx0LnNoIC8uYnVpbGQub2xkcGFja2FnZXMgL3Vzci9zcmMvcGFja2FnZXMvUlBNUyAvdXNyL3NyYy9wYWNrYWdlcy9TUlBNUworIAorLUNNUFNDUklQVD0kezAlLyp9L3JwbS1jaGVjay5zaAorK0NNUFNDUklQVD0kezAlLyp9L3BrZy1kaWZmLnNoCisgU0NNUFNDUklQVD0kezAlLyp9L3NycG0tY2hlY2suc2gKKyAKKyBjaGVja19hbGw9MQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9jY2FjaGUuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2NjYWNoZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhYTY0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9jY2FjaGUuaW5jCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiYSBmYXN0IEMvQysrIGNvbXBpbGVyIGNhY2hlIgorREVTQ1JJUFRJT04gPSAiY2NhY2hlIGlzIGEgY29tcGlsZXIgY2FjaGUuIEl0IHNwZWVkcyB1cCByZWNvbXBpbGF0aW9uIFwKK2J5IGNhY2hpbmcgdGhlIHJlc3VsdCBvZiBwcmV2aW91cyBjb21waWxhdGlvbnMgYW5kIGRldGVjdGluZyB3aGVuIHRoZSBcCitzYW1lIGNvbXBpbGF0aW9uIGlzIGJlaW5nIGRvbmUgYWdhaW4uIFN1cHBvcnRlZCBsYW5ndWFnZXMgYXJlIEMsIENcK1wrLCBcCitPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKy4iCitIT01FUEFHRSA9ICJodHRwOi8vY2NhY2hlLnNhbWJhLm9yZyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYzKyIKKworREVQRU5EUyA9ICJ6bGliIgorCitTUkNfVVJJID0gImdpdDovL2dpdC5zYW1iYS5vcmcvY2NhY2hlLmdpdCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvY2NhY2hlXzMuMi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2NjYWNoZV8zLjIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTdkZjc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2NjYWNoZV8zLjIuMy5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgY2NhY2hlLmluYworCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT1iM2MzMzdlNzY2NDU1OWE3ODlkOWY3YTkzZTUyODNjMSIKKworU1JDUkVWID0gIjRjYWQ0NmU4ZWUwMDUzMTQ0YmIwMDkxOWYwZGFkZDIwYzFmODcwMTMiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLUZpeC1yZWdyZXNzaW9uLWluLXJlY2VudC1jaGFuZ2UtcmVsYXRlZC10by16bGliLWluLW4ucGF0Y2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvZmlsZXMvMDAwMS1GaXgtcmVncmVzc2lvbi1pbi1yZWNlbnQtY2hhbmdlLXJlbGF0ZWQtdG8temxpYi1pbi1uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2ZpbGVzLzAwMDEtRml4LXJlZ3Jlc3Npb24taW4tcmVjZW50LWNoYW5nZS1yZWxhdGVkLXRvLXpsaWItaW4tbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWJkOWFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2ZpbGVzLzAwMDEtRml4LXJlZ3Jlc3Npb24taW4tcmVjZW50LWNoYW5nZS1yZWxhdGVkLXRvLXpsaWItaW4tbi5wYXRjaApAQCAtMCwwICsxLDczIEBACitGcm9tIGY3NGM3NjEwNzkzMzA0NjMwOTg2MTY4MGI3NDFhZGM2N2FjMmEzNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb2VsIFJvc2RhaGwgPGpvZWxAcm9zZGFobC5uZXQ+CitEYXRlOiBNb24sIDE3IEF1ZyAyMDE1IDE5OjA1OjE0ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCByZWdyZXNzaW9uIGluIHJlY2VudCBjaGFuZ2UgcmVsYXRlZCB0byB6bGliIGluCisgbm9uc3RhbmRhcmQgbG9jYXRpb24KKworVG8gYWxsb3cgZm9yIHNwZWNpZnlpbmcgYSAtTCBmbGFnIGluIExERkxBR1MgYW5kIGhhdmUgaXQgdGFrZSBlZmZlY3QgZm9yCistbHosIDAyMjBkZTljOGViZmIxOGNhYWUyYWMxYWExNjNkMDYwZTk4Y2VhZGUgcHV0IC1seiBpbiBleHRyYV9saWJzCitpbnN0ZWFkIG9mIGV4dHJhX2xkZmxhZ3MuIEhvd2V2ZXIsIGV4dHJhX2xpYnMgaXMgc3VwcG9zZWQgdG8gY29udGFpbgorcGF0aHMgdG8gbGlicmFyaWVzIHdoaWNoIGFyZSBwcmVyZXF1aXNpdGVzIG9mIHRoZSBjY2FjaGUgbGluayBydWxlLCBhbmQKK3NvbWUgb2xkZXIgdmVyc2lvbnMgb2YgbWFrZSBnb3QgY29uZnVzZWQgYnkgc2VlaW5nIC1seiBhcyBhCitwcmVyZXF1aXNpdGUuCisKK1RoaXMgZml4IGlzIHRvIHJldmVydCAwMjIwZGU5YzhlYmZiMThjYWFlMmFjMWFhMTYzZDA2MGU5OGNlYWRlIGFuZAoraW5zdGVhZCBtYWtlIHN1cmUgdGhhdCBMREZMQUdTIGNvbWVzIGJlZm9yZSBleHRyYV9sZGZsYWdzLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CistLS0KKyBNYWtlZmlsZS5pbiAgfCAgMiArLQorIE5FV1MudHh0ICAgICB8IDEwICsrKysrKysrKysKKyBjb25maWd1cmUuYWMgfCAgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGU3NTE1YjEuLmQzNjIxY2QgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0yMCw3ICsyMCw3IEBAIFJBTkxJQiA9IEBSQU5MSUJACisgCisgYWxsX2NmbGFncyA9ICQoQ0ZMQUdTKQorIGFsbF9jcHBmbGFncyA9IEBERUZTQCBAZXh0cmFfY3BwZmxhZ3NAIC1EU1lTQ09ORkRJUj0kKHN5c2NvbmZkaXIpIC1JLiAtSSQoc3JjZGlyKSAkKENQUEZMQUdTKQorLWFsbF9sZGZsYWdzID0gQGV4dHJhX2xkZmxhZ3NAICQoTERGTEFHUykKKythbGxfbGRmbGFncyA9ICQoTERGTEFHUykgQGV4dHJhX2xkZmxhZ3NACisgZXh0cmFfbGlicyA9IEBleHRyYV9saWJzQAorIAorIGJhc2Vfc291cmNlcyA9IFwKK2RpZmYgLS1naXQgYS9ORVdTLnR4dCBiL05FV1MudHh0CitpbmRleCBmMTNmZWViLi5lYWVhZGY2IDEwMDY0NAorLS0tIGEvTkVXUy50eHQKKysrKyBiL05FV1MudHh0CitAQCAtMiw2ICsyLDE2IEBAIGNjYWNoZSBuZXdzCisgPT09PT09PT09PT0KKyAKKyAKKytVbnJlbGVhc2VkIDMuMi40CisrLS0tLS0tLS0tLS0tLS0tLQorKworK0J1ZyBmaXhlcworK35+fn5+fn5+fgorKworKy0gRml4ZWQgYnVpbGQgZXJyb3IgcmVsYXRlZCB0byB6bGliIG9uIHN5c3RlbXMgd2l0aCBvbGRlciBtYWtlIHZlcnNpb25zCisrICAocmVncmVzc2lvbiBpbiBjY2FjaGUgMy4yLjMpLgorKworKworIGNjYWNoZSAzLjIuMworIC0tLS0tLS0tLS0tLQorIFJlbGVhc2UgZGF0ZTogMjAxNS0wOC0xNgorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOGQ4Y2U5Mi4uOWU2NTU4OCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTIwLDcgKzEyMCw3IEBAIGlmIHRlc3QgeCR7dXNlX2J1bmRsZWRfemxpYn0gPSB4eWVzOyB0aGVuCisgICAgIGV4dHJhX2xpYnM9InpsaWIvbGliei5hIgorICAgICBta2RpciAtcCB6bGliCisgZWxzZQorLSAgICBleHRyYV9saWJzPSItbHoiCisrICAgIGV4dHJhX2xkZmxhZ3M9Ii1seiIKKyBmaQorIAorIGRubCBMaW5raW5nIG9uIFdpbmRvd3MgbmVlZHMgd3MyXzMyCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NkcnRvb2xzL2NkcnRvb2xzLW5hdGl2ZV8zLjAxYTMxLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2RydG9vbHMvY2RydG9vbHMtbmF0aXZlXzMuMDFhMzEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBmMzZlMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NkcnRvb2xzL2NkcnRvb2xzLW5hdGl2ZV8zLjAxYTMxLmJiCkBAIC0wLDAgKzEsMjEgQEAKKyMgY2RydG9vbHMtbmF0aXZlIE9FIGJ1aWxkIGZpbGUKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKK1NVTU1BUlkgPSAiQSBzZXQgb2YgdG9vbHMgZm9yIENEIHJlY29yZGluZywgaW5jbHVkaW5nIGNkcmVjb3JkIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9jZHJ0b29scy8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyICYgQ0RETC0xLjAgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zMmY2ODE3MGJlNDI0YzJjZDY0ODA0MzM3NzI2YjMxMiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9jZHJ0b29scy9hbHBoYS9jZHJ0b29scy0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzgxNzI1NTc4OTRmNDY5YjQ1ODRkMDA4ZTkzZWM0NjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTgzYjVjMTI3Nzc3NzllNzhkOGI2OTQ2MWFhZTUyNDAxZjg2Mzc2OGU3ZTczOTFkNjA3MzAwMDZmOGNhZGM1YSIKKworUyA9ICIke1dPUktESVJ9L2NkcnRvb2xzLTMuMDEiCisKK2luaGVyaXQgbmF0aXZlCisKK2RvX2luc3RhbGwoKSB7CisJbWFrZSBpbnN0YWxsIEdNQUtFX05PV0FSTj10cnVlIElOU19CQVNFPSR7cHJlZml4fSBERVNURElSPSR7RH0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NocnBhdGgvY2hycGF0aC9zdGFuZGFyZGRvYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NocnBhdGgvY2hycGF0aC9zdGFuZGFyZGRvYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTZmMTA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2hycGF0aC9jaHJwYXRoL3N0YW5kYXJkZG9jLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvY29uZi9hdXRvbWFrZSBzZXQgZG9jZGlyIGF1dG9tYXRpY2FsbHksIHVzZSB0aGVpciB2YWx1ZSBlbnN1cmluZyAKK2RvYyBmaWxlcyBhcmUgcGxhY2VkIGludG8gJGRhdGFkaXIvZG9jLCBub3QgJHByZWZpeC9kb2MuCisKK1JQIDUvNy8yMDExCisKK0luZGV4OiBjaHJwYXRoLTAuMTMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjaHJwYXRoLTAuMTMub3JpZy9NYWtlZmlsZS5hbQkyMDExLTA3LTA1IDIzOjQwOjE0Ljc2OTkyMDI1NCArMDEwMAorKysrIGNocnBhdGgtMC4xMy9NYWtlZmlsZS5hbQkyMDExLTA3LTA1IDIzOjQwOjE5LjgxOTkyMDYzNSArMDEwMAorQEAgLTEsNyArMSw1IEBACisgU1VCRElSUyA9IHRlc3RzdWl0ZSBkZWIKKyAKKy1kb2NkaXIgPSAkKHByZWZpeCkvZG9jLyQoUEFDS0FHRSktJChWRVJTSU9OKQorLQorIGRvY19EQVRBID0gQVVUSE9SUyBDT1BZSU5HIENoYW5nZUxvZyBJTlNUQUxMIE5FV1MgUkVBRE1FCisgCisgYmluX1BST0dSQU1TID0gY2hycGF0aApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2hycGF0aC9jaHJwYXRoXzAuMTYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jaHJwYXRoL2NocnBhdGhfMC4xNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTNiMDZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2hycGF0aC9jaHJwYXRoXzAuMTYuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJUb29sIHRvIGVkaXQgcnBhdGggaW4gRUxGIGJpbmFyaWVzIgorREVTQ1JJUFRJT04gPSAiY2hycGF0aCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgcnBhdGggKHdoZXJlIHRoZSBcCithcHBsaWNhdGlvbiBsb29rcyBmb3IgbGlicmFyaWVzKSBpbiBhbiBhcHBsaWNhdGlvbi4gSXQgZG9lcyBub3QgXAorKHlldCkgYWxsb3cgeW91IHRvIGFkZCBhbiBycGF0aCBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeS4iCitIT01FUEFHRSA9ICJodHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvcHJvamVjdHMvY2hycGF0aC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9hbGlvdGguZGViaWFuLm9yZy90cmFja2VyLz9hdGlkPTQxMjgwNyZncm91cF9pZD0zMTA1MiIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiIKKworU1JDX1VSSSA9ICJodHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvZnJzL2Rvd25sb2FkLnBocC9maWxlLzM5NzkvY2hycGF0aC0wLjE2LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9zdGFuZGFyZGRvYy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjJiZjhkMWQxZWUzNDVmYzhhNzkxNTU3NmY1NjQ5OTgyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJiMGQ0YzU0YmFjMjk5MGUxYmRmODEzMmYyYzk0NzdhZTc1Mjg1OWQ1MjNlMTQxZTcyYjNiMTFhMTJjMjZlN2IiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgV2UgZG9uJ3QgaGF2ZSBhIHN0YWdlZCBjaHJwYXRoLW5hdGl2ZSBmb3IgZW5zdXJpbmcgb3VyIGJpbmFyeSBpcworIyByZWxvY2F0YWJsZSwgc28gdXNlIHRoZSBvbmUgd2UndmUganVzdCBidWlsdAorQ0hSUEFUSF9CSU5fY2xhc3MtbmF0aXZlID0gIiR7Qn0vY2hycGF0aCIKKworUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgY2hycGF0aC1yZXBsYWNlbWVudC1uYXRpdmUiCitOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWCA9ICIvJHtQTn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLW5hdGl2ZV8zLjMuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLW5hdGl2ZV8zLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjRlNzQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UtbmF0aXZlXzMuMy4xLmJiCkBAIC0wLDAgKzEsMTYgQEAKK3JlcXVpcmUgY21ha2UuaW5jCitpbmhlcml0IG5hdGl2ZQorCisjIFVzaW5nIGNtYWtlJ3MgaW50ZXJuYWwgbGliYXJjaGl2ZSwgc28gc29tZSBkZXBlbmRlbmNpZXMgYXJlIG5lZWRlZAorREVQRU5EUyArPSAiYnppcDItbmF0aXZlIHpsaWItbmF0aXZlIgorCitTUkNfVVJJICs9ICJcCisgICAgZmlsZTovL2NtbGliYXJjaGl2ZS1kaXNhYmxlLWV4dDJmcy5wYXRjaCBcCisiCisKKyMgRGlzYWJsZSBjY21ha2Ugc2luY2Ugd2UgZG9uJ3QgZGVwZW5kIG9uIG5jdXJzZXMKK0NNQUtFX0VYVFJBQ09ORiA9ICJcCisgICAgLURCVUlMRF9DdXJzZXNEaWFsb2c9MCBcCisgICAgLURFTkFCTEVfQUNMPTAgLURIQVZFX0FDTF9MSUJBQ0xfSD0wIFwKKyAgICAtREhBVkVfU1lTX0FDTF9IPTAgXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZTkzYWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS5pbmMKQEAgLTAsMCArMSw1MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDUsIEtvbmlua2xpamtlIFBoaWxpcHMgRWxlY3Ryb25pY3MgTlYuICBBbGwgUmlnaHRzIFJlc2VydmVkCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCisKK1NVTU1BUlkgPSAiQ3Jvc3MtcGxhdGZvcm0sIG9wZW4tc291cmNlIG1ha2Ugc3lzdGVtIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5jbWFrZS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vcHVibGljLmtpdHdhcmUuY29tL0J1Zy9teV92aWV3X3BhZ2UucGhwIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9Db3B5cmlnaHQudHh0O21kNT0zYmE1YTZjMzQ0ODE2NTJjZTU3M2U1YzRlMWQ3MDdlNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Tb3VyY2UvY21ha2UuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTEwO21kNT0zNDE3MzZkYWU4M2M5ZTM0NGI1M2VlYjFiYzdkN2JjMiIKKworQ01BS0VfTUFKT1JfVkVSU0lPTiA9ICIke0AnLicuam9pbihkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMDoyXSl9IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuY21ha2Uub3JnL2ZpbGVzL3Yke0NNQUtFX01BSk9SX1ZFUlNJT059L2NtYWtlLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9zdXBwb3J0LW9lLXF0NC10b29scy1uYW1lcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9xdDQtZmFpbC1zaWxlbnQucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MjYzODU3NmY0ZTFlNjIxZmVkNmMzNDEwZDNhMWIxMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZDY1MDIyYzZhMDcwN2YxYzcxMTJmOTllOWM5ODE2NzdmZGQ1NTE4ZjdkZGZhMGY3NzhkNGNlZTcxMTNlM2Q2IgorCitpbmhlcml0IGF1dG90b29scworCisjIFVnbHkgaGFjayB0byB3b3JrIGFyb3VuZCB1bmRlZmluZWQgT0VfUU1BS0VfUEFUSF9FWFRFUk5BTF9IT1NUX0JJTlMgdmFyaWFibGUKKyMgYW5kIHBvc3NpYmx5IG1pc3NpbmcgcW1ha2UgYmluYXJ5IChxdGJhc2UtbmF0aXZlIGNhbiBiZSByZW1vdmVkIGZyb20gc3lzcm9vdAorIyBlLmcuIGluIG9yZGVyIHRvIHVwZ3JhZGUgaXQsIGV2ZW4gd2hlbiB0aGVyZSBpcyB0YXJnZXQgcXRiYXNlKQorCisjIEZpeGVzIGVycm9ycyBsaWtlIHRoaXMgaW4gY21ha2UoLW5hdGl2ZSkuZG9fY29uZmlndXJlOgorI3wgLS0gUGVyZm9ybWluZyBUZXN0IHJ1bl9waWNfdGVzdCAtIFN1Y2Nlc3MKKyN8IENNYWtlIEVycm9yIGF0IHRtcC1lZ2xpYmMvc3lzcm9vdHMvcWVtdWFybS91c3IvbGliL2NtYWtlL1F0NUNvcmUvUXQ1Q29yZUNvbmZpZy5jbWFrZToyNyAobWVzc2FnZSk6CisjfCAgIFRoZSBpbXBvcnRlZCB0YXJnZXQgIlF0NTo6Q29yZSIgcmVmZXJlbmNlcyB0aGUgZmlsZQorI3wKKyN8ICAgICAgIi9xbWFrZSIKKyN8CisjfCAgIGJ1dCB0aGlzIGZpbGUgZG9lcyBub3QgZXhpc3QuICBQb3NzaWJsZSByZWFzb25zIGluY2x1ZGU6CisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCXNlZCAtaSAncy9eZmluZF9wYWNrYWdlKFF0NUNvcmUgUVVJRVQpJC8jZmluZF9wYWNrYWdlKFF0NUNvcmUgUVVJRVQpL2cnICR7U30vVGVzdHMvUnVuQ01ha2UvQ01ha2VMaXN0cy50eHQKKwlzZWQgLWkgJ3MvXiAgZmluZF9wYWNrYWdlKFF0NUNvcmUgUkVRVUlSRUQpLyMgIGZpbmRfcGFja2FnZShRdDVDb3JlIFJFUVVJUkVEKS9nJyAke1N9L1Rlc3RzL1F0NEFuZDVBdXRvbW9jL0NNYWtlTGlzdHMudHh0CisJc2VkIC1pICdzL14gIGZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFFVSUVUIE5PX01PRFVMRSkvIyAgZmluZF9wYWNrYWdlKFF0NVdpZGdldHMgUVVJRVQgTk9fTU9EVUxFKS9nJyAke1N9L1Rlc3RzL0NNYWtlTGlzdHMudHh0CisJc2VkIC1pICdzL15maW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBRVUlFVCkvI2ZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFFVSUVUKS9nJyAke1N9L1NvdXJjZS9RdERpYWxvZy9DTWFrZUxpc3RzLnR4dAorCXNlZCAtaSAncy9eICBmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBSRVFVSVJFRCkvIyAgZmluZF9wYWNrYWdlKFF0NVdpZGdldHMgUkVRVUlSRUQpL2cnICR7U30vVGVzdHMvUXRBdXRvVWljSW50ZXJmYWNlL0NNYWtlTGlzdHMudHh0CisJc2VkIC1pICdzL14gIGZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFJFUVVJUkVEKS8jICBmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBSRVFVSVJFRCkvZycgJHtTfS9UZXN0cy9RdEF1dG9nZW4vQ01ha2VMaXN0cy50eHQKKwlzZWQgLWkgJ3MvXiAgZmluZF9wYWNrYWdlKFF0NUNvcmUgUkVRVUlSRUQpLyMgIGZpbmRfcGFja2FnZShRdDVDb3JlIFJFUVVJUkVEKS9nJyAke1N9L1Rlc3RzL1F0QXV0b2dlbi9hdXRvcmNjX2RlcGVuZHMvQ01ha2VMaXN0cy50eHQKK30KKworIyBFeHRyYSBmbGFncyB0byBwYXNzIHRvIGNtYWtlIGludm9rZWQgYnkgYm9vdHN0cmFwCitDTUFLRV9FWFRSQUNPTkYgPSAiIgorCitkb19jb25maWd1cmUgKCkgeworCSR7U30vY29uZmlndXJlIC0tcHJlZml4PSR7cHJlZml4fSAtLSAke0NNQUtFX0VYVFJBQ09ORn0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvT0VUb29sY2hhaW5Db25maWcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAwMTRiYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlCkBAIC0wLDAgKzEsMTggQEAKK3NldCggQ01BS0VfU1lTVEVNX05BTUUgTGludXggKQorc2V0KCBDTUFLRV9DX0ZMQUdTICRFTlZ7Q0ZMQUdTfSBDQUNIRSBTVFJJTkcgIiIgRk9SQ0UgKQorc2V0KCBDTUFLRV9DWFhfRkxBR1MgJEVOVntDWFhGTEFHU30gIENBQ0hFIFNUUklORyAiIiBGT1JDRSApCitzZXQoIENNQUtFIEFTTV9GTEFHUyAke0NNQUtFX0NfRkxBR1N9IENBQ0hFIFNUUklORyAiIiBGT1JDRSApCitzZXQoIENNQUtFX0xERkxBR1NfRkxBR1MgJHtDTUFLRV9DWFhfRkxBR1N9IENBQ0hFIFNUUklORyAiIiBGT1JDRSApCitzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIICRFTlZ7T0VDT1JFX1RBUkdFVF9TWVNST09UfSAkRU5We09FQ09SRV9OQVRJVkVfU1lTUk9PVH0gKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU0gTkVWRVIgKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX0xJQlJBUlkgT05MWSApCitzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfSU5DTFVERSBPTkxZICkKKworc3RyaW5nKFJFR0VYIE1BVENIICJzeXNyb290cy8oW2EtekEtWjAtOV0rKSIgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiAkRU5We1NES1RBUkdFVFNZU1JPT1R9KQorc3RyaW5nKFJFR0VYIFJFUExBQ0UgInN5c3Jvb3RzLyIgIiIgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiAke0NNQUtFX1NZU1RFTV9QUk9DRVNTT1J9KQorCisjIEluY2x1ZGUgdGhlIHRvb2xjaGFpbiBjb25maWd1cmF0aW9uIHN1YnNjcmlwdHMKK2ZpbGUoIEdMT0IgdG9vbGNoYWluX2NvbmZpZ19maWxlcyAiJHtDTUFLRV9UT09MQ0hBSU5fRklMRX0uZC8qLmNtYWtlIiApCitmb3JlYWNoKGNvbmZpZyAke3Rvb2xjaGFpbl9jb25maWdfZmlsZXN9KQorICAgIGluY2x1ZGUoJHtjb25maWd9KQorZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9jbWxpYmFyY2hpdmUtZGlzYWJsZS1leHQyZnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9jbWxpYmFyY2hpdmUtZGlzYWJsZS1leHQyZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYzNjcxMjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9jbWxpYmFyY2hpdmUtZGlzYWJsZS1leHQyZnMucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorRGlzYWJsZSB1c2Ugb2YgZXh0MmZzL2V4dDJfZnMuaCBieSBjbWFrZSdzIGludGVybmFsIGxpYmFyY2hpdmUgY29weQorCitXZSBkb24ndCB3YW50IHRvIGFkZCBhIGRlcGVuZGVuY3kgb24gZTJmc3Byb2dzLW5hdGl2ZSBmb3IgY21ha2UtbmF0aXZlLAorYW5kIHdlIGRvbid0IHVzZSBDUGFjayBzbyBqdXN0IGRpc2FibGUgdGhpcyBmdW5jdGlvbmFsaXR5LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ10KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKKy0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvQ01ha2VMaXN0cy50eHQKKysrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvQ01ha2VMaXN0cy50eHQKK0BAIC0yMzcsMTIgKzIzNyw4IEBAIExBX0NIRUNLX0lOQ0xVREVfRklMRSgiY29weWZpbGUuaCIgSEFWRV9DT1BZRklMRV9IKQorIExBX0NIRUNLX0lOQ0xVREVfRklMRSgiZGlyZWN0LmgiIEhBVkVfRElSRUNUX0gpCisgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJkbGZjbi5oIiBIQVZFX0RMRkNOX0gpCisgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJlcnJuby5oIiBIQVZFX0VSUk5PX0gpCistTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJleHQyZnMvZXh0Ml9mcy5oIiBIQVZFX0VYVDJGU19FWFQyX0ZTX0gpCistCistQ0hFQ0tfQ19TT1VSQ0VfQ09NUElMRVMoIiNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKy0jaW5jbHVkZSA8ZXh0MmZzL2V4dDJfZnMuaD4KKy1pbnQgbWFpbih2b2lkKSB7IHJldHVybiBFWFQyX0lPQ19HRVRGTEFHUzsgfSIgSEFWRV9XT1JLSU5HX0VYVDJfSU9DX0dFVEZMQUdTKQorLQorK1NFVChIQVZFX0VYVDJGU19FWFQyX0ZTX0ggMCkKKytTRVQoSEFWRV9XT1JLSU5HX0VYVDJfSU9DX0dFVEZMQUdTIDApCisgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJmY250bC5oIiBIQVZFX0ZDTlRMX0gpCisgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJncnAuaCIgSEFWRV9HUlBfSCkKKyBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImludHR5cGVzLmgiIEhBVkVfSU5UVFlQRVNfSCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2RvbnQtcnVuLWNyb3NzLWJpbmFyaWVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvZG9udC1ydW4tY3Jvc3MtYmluYXJpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMwNTlmMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2RvbnQtcnVuLWNyb3NzLWJpbmFyaWVzLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK2NtYWtlOiBkb24ndCBydW4gY3Jvc3MtYmluYXJpZXMgb24gaG9zdCBtYWNoaW5lCisKK1doZW4gZG9pbmcgdGhlIGNyb3NzIGJ1aWxkIHdlIG9idmlvdXNseSBjYW5ub3QgcnVuIHRob3NlIGJpbmFyaWVzIG9uCitob3N0IHNpbmNlIHRoZXkgY2FuIGJlIGJpbmFyeSBpbmNvbXBhdGlibGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CisKK0luZGV4OiBjbWFrZS0yLjguMTAuMS9DTWFrZUxpc3RzLnR4dAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNtYWtlLTIuOC4xMC4xLm9yaWcvQ01ha2VMaXN0cy50eHQKKysrKyBjbWFrZS0yLjguMTAuMS9DTWFrZUxpc3RzLnR4dAorQEAgLTU4OCw3ICs1ODgsOCBAQCBtYXJrX2FzX2FkdmFuY2VkKENNQUtFX1NUUklDVCkKKyAKKyAjIGJ1aWxkIHRoZSByZW1haW5pbmcgc3ViZGlyZWN0b3JpZXMKKyBhZGRfc3ViZGlyZWN0b3J5KFNvdXJjZSkKKy1hZGRfc3ViZGlyZWN0b3J5KFV0aWxpdGllcykKKysjIENvbWUgb24hIFJ1bm5pbmcgdGhlIGNyb3NzLWJpbmFyaWVzIG9uIGhvc3QgaXMgbm90IGEgZ29vZCBpZGVhLgorKyNhZGRfc3ViZGlyZWN0b3J5KFV0aWxpdGllcykKKyBhZGRfc3ViZGlyZWN0b3J5KFRlc3RzKQorIAorIGlmKEJVSUxEX1RFU1RJTkcpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9lbnZpcm9ubWVudC5kLWNtYWtlLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvZW52aXJvbm1lbnQuZC1jbWFrZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWI1NmI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvZW52aXJvbm1lbnQuZC1jbWFrZS5zaApAQCAtMCwwICsxIEBACithbGlhcyBjbWFrZT0iY21ha2UgLURDTUFLRV9UT09MQ0hBSU5fRklMRT0kT0VDT1JFX05BVElWRV9TWVNST09UL3Vzci9zaGFyZS9jbWFrZS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL3F0NC1mYWlsLXNpbGVudC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL3F0NC1mYWlsLXNpbGVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGZjMjc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvcXQ0LWZhaWwtc2lsZW50LnBhdGNoCkBAIC0wLDAgKzEsNzcgQEAKK0ZhaWwgc2lsZW50bHkgaWYgc3lzdGVtIFF0IGluc3RhbGxhdGlvbiBpcyBicm9rZW4KKworRml4ZXMgYSByZWdyZXNzaW9uIGluIGJlaGF2aW91ciBmcm9tIDIuOC4xMCB0byAyLjguMTEgcmVzdWx0aW5nIGluIHRoZQorZm9sbG93aW5nIGVycm9yIGlmIHRoZSBzeXN0ZW0gUXQgaW5zdGFsbGF0aW9uIGlzIGJyb2tlbjoKKworQ01ha2UgRXJyb3IgYXQgTW9kdWxlcy9GaW5kUXQ0LmNtYWtlOjEwMjggKHNldF9wcm9wZXJ0eSk6CisgIHNldF9wcm9wZXJ0eSBjb3VsZCBub3QgZmluZCBUQVJHRVQgUXQ0OjpRdENvcmUuICBQZXJoYXBzIGl0IGhhcyBub3QgeWV0CisgIGJlZW4gY3JlYXRlZC4KK0NhbGwgU3RhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOgorICBUZXN0cy9SdW5DTWFrZS9DTWFrZUxpc3RzLnR4dDo3OSAoZmluZF9wYWNrYWdlKQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK1RoZSBwYXRjaCB3YXMgc2xpZ2h0bHkgYWRhcHRlZCBpbiBvcmRlciB0byBtYXRjaCBjbWFrZSAzLjIuMjoKK0Fub3RoZXIgc2V0X3Byb3BlcnR5IHdhcyBpbnRyb2R1Y2VkIHdoaWNoIGhhZCB0byBiZSBpbmNsdWRlZAord2l0aGluIHRoZSBpZihRVF9RVENPUkVfRk9VTkQpIHN0YXRlbWVudC4KKworU2lnbmVkLW9mZi1ieTogTW9yaXR6IEJsdW1lIDxtb3JpdHouYmx1bWVAYm13LWNhcml0LmRlPgorLS0tCisgTW9kdWxlcy9GaW5kUXQ0LmNtYWtlIHwgMzkgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kUXQ0LmNtYWtlIGIvTW9kdWxlcy9GaW5kUXQ0LmNtYWtlCitpbmRleCA2NzA0NzY5Li45MDQ4ZTM1IDEwMDY0NAorLS0tIGEvTW9kdWxlcy9GaW5kUXQ0LmNtYWtlCisrKysgYi9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UKK0BAIC0xMDAwLDI1ICsxMDAwLDI2IEBAIGlmIChRVF9RTUFLRV9FWEVDVVRBQkxFIEFORAorICAgICBlbmRpZigpCisgICBlbmRtYWNybygpCisgCistCistICAjIFNldCBRVF94eXpfTElCUkFSWSB2YXJpYWJsZSBhbmQgYWRkCistICAjIGxpYnJhcnkgaW5jbHVkZSBwYXRoIHRvIFFUX0lOQ0xVREVTCistICBfUVQ0X0FESlVTVF9MSUJfVkFSUyhRdENvcmUpCistICBzZXRfcHJvcGVydHkoVEFSR0VUIFF0NDo6UXRDb3JlIEFQUEVORCBQUk9QRVJUWQorLSAgICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUworLSAgICAgICIke1FUX01LU1BFQ1NfRElSfS9kZWZhdWx0IgorLSAgICAgICR7UVRfSU5DTFVERV9ESVJ9CistICApCistICBzZXRfcHJvcGVydHkoVEFSR0VUIFF0NDo6UXRDb3JlIEFQUEVORCBQUk9QRVJUWQorLSAgICBJTlRFUkZBQ0VfQ09NUElMRV9ERUZJTklUSU9OUworLSAgICAgICQ8JDxOT1Q6JDxDT05GSUc6RGVidWc+PjpRVF9OT19ERUJVRz4KKy0gICkKKy0gIHNldF9wcm9wZXJ0eShUQVJHRVQgUXQ0OjpRdENvcmUgUFJPUEVSVFkKKy0gICAgSU5URVJGQUNFX1FUX01BSk9SX1ZFUlNJT04gNAorLSAgKQorLSAgc2V0X3Byb3BlcnR5KFRBUkdFVCBRdDQ6OlF0Q29yZSBBUFBFTkQgUFJPUEVSVFkKKy0gICAgQ09NUEFUSUJMRV9JTlRFUkZBQ0VfU1RSSU5HIFFUX01BSk9SX1ZFUlNJT04KKy0gICkKKysgIGlmKFFUX1FUQ09SRV9GT1VORCkKKysgICAgIyBTZXQgUVRfeHl6X0xJQlJBUlkgdmFyaWFibGUgYW5kIGFkZAorKyAgICAjIGxpYnJhcnkgaW5jbHVkZSBwYXRoIHRvIFFUX0lOQ0xVREVTCisrICAgIF9RVDRfQURKVVNUX0xJQl9WQVJTKFF0Q29yZSkKKysgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBRdDQ6OlF0Q29yZSBBUFBFTkQgUFJPUEVSVFkKKysgICAgICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUworKyAgICAgICAgIiR7UVRfTUtTUEVDU19ESVJ9L2RlZmF1bHQiCisrICAgICAgICAke1FUX0lOQ0xVREVfRElSfQorKyAgICApCisrICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgUXQ0OjpRdENvcmUgQVBQRU5EIFBST1BFUlRZCisrICAgICAgSU5URVJGQUNFX0NPTVBJTEVfREVGSU5JVElPTlMKKysgICAgICAgICQ8JDxOT1Q6JDxDT05GSUc6RGVidWc+PjpRVF9OT19ERUJVRz4KKysgICAgKQorKyAgICBzZXRfcHJvcGVydHkoVEFSR0VUIFF0NDo6UXRDb3JlIFBST1BFUlRZCisrICAgICAgSU5URVJGQUNFX1FUX01BSk9SX1ZFUlNJT04gNAorKyAgICApCisrICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgUXQ0OjpRdENvcmUgQVBQRU5EIFBST1BFUlRZCisrICAgICAgQ09NUEFUSUJMRV9JTlRFUkZBQ0VfU1RSSU5HIFFUX01BSk9SX1ZFUlNJT04KKysgICAgKQorKyAgZW5kaWYoKQorIAorICAgZm9yZWFjaChRVF9NT0RVTEUgJHtRVF9NT0RVTEVTfSkKKyAgICAgX1FUNF9BREpVU1RfTElCX1ZBUlMoJHtRVF9NT0RVTEV9KQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9zdXBwb3J0LW9lLXF0NC10b29scy1uYW1lcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL3N1cHBvcnQtb2UtcXQ0LXRvb2xzLW5hbWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1Y2JjYTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9zdXBwb3J0LW9lLXF0NC10b29scy1uYW1lcy5wYXRjaApAQCAtMCwwICsxLDU0IEBACitjbWFrZTogc3VwcG9ydCBPcGVuRW1iZWRkZWQgUXQ0IHRvb2wgYmluYXJ5IG5hbWVzCisKK1RoZSBGaW5kUXQ0IG1vZHVsZSBsb29rcyBmb3IgUXQ0IGJpbmFyaWVzIHRvIGJlIGFibGUgdG8gZ2F0aGVyIHRoZQorcGF0aHMgdXNlZCBmb3IgY29tcGlsYXRpb24gYW5kIGFsc28gdG8gYmUgdXNpbmcgZHVyaW5nIG90aGVyIHByb2Nlc3NlcworKHRyYW5zbGF0aW9uIHVwZGF0ZSwgdHJhbnNsYXRpb24gYmluYXJ5IGdlbmVyYXRpbmcgYW5kIGxpa2UpIGhvd2V2ZXIKK09wZW5FbWJlZGRlZCBoYXMgcmVuYW1lZCB0aG9zZSB0byBhbGxvdyBvbGQgUU1ha2UgdG8gYmUgdXNlZCBpbgorcGFyYWxsZWwgd2l0aCB0aGUgY3VycmVudCBvbmUuIFRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUKK09wZW5FbWJlZGRlZCBzcGVjaWZpYyBiaW5hcnkgbmFtZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CisKK1RoZSBwYXRjaCB3YXMgc2xpZ2h0bHkgYWRhcHRlZCBpbiBvcmRlciB0byBtYXRjaCBjbWFrZSAzLjIuMjoKK0luc3RlYWQgb2YgZmluZF9wcm9ncmFtLCBfZmluZF9xdDRfcHJvZ3JhbSBpcyBub3cgdXNlZC4KKworU2lnbmVkLW9mZi1ieTogTW9yaXR6IEJsdW1lIDxtb3JpdHouYmx1bWVAYm13LWNhcml0LmRlPgorLS0tCisgTW9kdWxlcy9GaW5kUXQ0LmNtYWtlIHwgMTAgKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UgYi9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UKK2luZGV4IDExMDkxYjUuLjY3MDQ3NjkgMTAwNjQ0CistLS0gYS9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UKKysrKyBiL01vZHVsZXMvRmluZFF0NC5jbWFrZQorQEAgLTUyMiw3ICs1MjIsNyBAQCBlbmRmdW5jdGlvbigpCisgCisgc2V0KFFUNF9JTlNUQUxMRURfVkVSU0lPTl9UT09fT0xEIEZBTFNFKQorIAorLXNldChfUVQ0X1FNQUtFX05BTUVTIHFtYWtlIHFtYWtlNCBxbWFrZS1xdDQgcW1ha2UtbWFjKQorK3NldChfUVQ0X1FNQUtFX05BTUVTIHFtYWtlIHFtYWtlMiBxbWFrZTQgcW1ha2UtcXQ0IHFtYWtlLW1hYykKKyBfcXQ0X2ZpbmRfcW1ha2UoIiR7X1FUNF9RTUFLRV9OQU1FU30iIFFUX1FNQUtFX0VYRUNVVEFCTEUgUVRWRVJTSU9OKQorIAorIGlmIChRVF9RTUFLRV9FWEVDVVRBQkxFIEFORAorQEAgLTExNDgsMTIgKzExNDgsMTIgQEAgaWYgKFFUX1FNQUtFX0VYRUNVVEFCTEUgQU5ECisgICBfZmluZF9xdDRfcHJvZ3JhbShRVF9NT0NfRVhFQ1VUQUJMRSBRdDQ6Om1vYyBtb2MtcXQ0IG1vYzQgbW9jKQorICAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfVUlDX0VYRUNVVEFCTEUgUXQ0Ojp1aWMgdWljLXF0NCB1aWM0IHVpYykKKyAgIF9maW5kX3F0NF9wcm9ncmFtKFFUX1VJQzNfRVhFQ1VUQUJMRSBRdDQ6OnVpYzMgdWljMykKKy0gIF9maW5kX3F0NF9wcm9ncmFtKFFUX1JDQ19FWEVDVVRBQkxFIFF0NDo6cmNjIHJjYykKKy0gIF9maW5kX3F0NF9wcm9ncmFtKFFUX0RCVVNDUFAyWE1MX0VYRUNVVEFCTEUgUXQ0OjpxZGJ1c2NwcDJ4bWwgcWRidXNjcHAyeG1sKQorLSAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfREJVU1hNTDJDUFBfRVhFQ1VUQUJMRSBRdDQ6OnFkYnVzeG1sMmNwcCBxZGJ1c3htbDJjcHApCisrICBfZmluZF9xdDRfcHJvZ3JhbShRVF9SQ0NfRVhFQ1VUQUJMRSBRdDQ6OnJjYyByY2M0IHJjYykKKysgIF9maW5kX3F0NF9wcm9ncmFtKFFUX0RCVVNDUFAyWE1MX0VYRUNVVEFCTEUgUXQ0OjpxZGJ1c2NwcDJ4bWwgcWRidXNjcHAyeG1sNCBxZGJ1c2NwcDJ4bWwpCisrICBfZmluZF9xdDRfcHJvZ3JhbShRVF9EQlVTWE1MMkNQUF9FWEVDVVRBQkxFIFF0NDo6cWRidXN4bWwyY3BwIHFkYnVzeG1sMmNwcDQgcWRidXN4bWwyY3BwKQorICAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfTFVQREFURV9FWEVDVVRBQkxFIFF0NDo6bHVwZGF0ZSBsdXBkYXRlLXF0NCBsdXBkYXRlNCBsdXBkYXRlKQorICAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfTFJFTEVBU0VfRVhFQ1VUQUJMRSBRdDQ6OmxyZWxlYXNlIGxyZWxlYXNlLXF0NCBscmVsZWFzZTQgbHJlbGVhc2UpCistICBfZmluZF9xdDRfcHJvZ3JhbShRVF9RQ09MTEVDVElPTkdFTkVSQVRPUl9FWEVDVVRBQkxFIFF0NDo6cWNvbGxlY3Rpb25nZW5lcmF0b3IgcWNvbGxlY3Rpb25nZW5lcmF0b3ItcXQ0IHFjb2xsZWN0aW9uZ2VuZXJhdG9yKQorKyAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfUUNPTExFQ1RJT05HRU5FUkFUT1JfRVhFQ1VUQUJMRSBRdDQ6OnFjb2xsZWN0aW9uZ2VuZXJhdG9yIHFjb2xsZWN0aW9uZ2VuZXJhdG9yLXF0NCBxY29sbGVjdGlvbmdlbmVyYXRvciBxY29sbGVjdGlvbmdlbmVyYXRvcjQpCisgICBfZmluZF9xdDRfcHJvZ3JhbShRVF9ERVNJR05FUl9FWEVDVVRBQkxFIFF0NDo6ZGVzaWduZXIgZGVzaWduZXItcXQ0IGRlc2lnbmVyNCBkZXNpZ25lcikKKyAgIF9maW5kX3F0NF9wcm9ncmFtKFFUX0xJTkdVSVNUX0VYRUNVVEFCTEUgUXQ0OjpsaW5ndWlzdCBsaW5ndWlzdC1xdDQgbGluZ3Vpc3Q0IGxpbmd1aXN0KQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZV8zLjMuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlXzMuMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMTg4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZV8zLjMuMS5iYgpAQCAtMCwwICsxLDUzIEBACityZXF1aXJlIGNtYWtlLmluYworCitpbmhlcml0IGNtYWtlCisKK0RFUEVORFMgKz0gImN1cmwgZXhwYXQgemxpYiBsaWJhcmNoaXZlIHh6IG5jdXJzZXMgYnppcDIiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgXAorICAgIGZpbGU6Ly9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZSBcCisgICAgZmlsZTovL2Vudmlyb25tZW50LmQtY21ha2Uuc2giCisKKyMgU3RyaXAgJHtwcmVmaXh9IGZyb20gJHtkb2NkaXJ9LCBzZXQgcmVzdWx0IGludG8gZG9jZGlyX3N0cmlwcGVkCitweXRob24gKCkgeworICAgIHByZWZpeD1kLmdldFZhcigicHJlZml4IiwgVHJ1ZSkKKyAgICBkb2NkaXI9ZC5nZXRWYXIoImRvY2RpciIsIFRydWUpCisKKyAgICBpZiBub3QgZG9jZGlyLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnZG9jZGlyIG11c3QgY29udGFpbiBwcmVmaXggYXMgaXRzIHByZWZpeCcpCisKKyAgICBkb2NkaXJfc3RyaXBwZWQgPSBkb2NkaXJbbGVuKHByZWZpeCk6XQorICAgIGlmIGxlbihkb2NkaXJfc3RyaXBwZWQpID4gMCBhbmQgZG9jZGlyX3N0cmlwcGVkWzBdID09ICcvJzoKKyAgICAgICAgZG9jZGlyX3N0cmlwcGVkID0gZG9jZGlyX3N0cmlwcGVkWzE6XQorCisgICAgZC5zZXRWYXIoImRvY2Rpcl9zdHJpcHBlZCIsIGRvY2Rpcl9zdHJpcHBlZCkKK30KKworRVhUUkFfT0VDTUFLRT0iIFwKKyAgICAtRENNQUtFX0RPQ19ESVI9JHtkb2NkaXJfc3RyaXBwZWR9L2NtYWtlLSR7Q01BS0VfTUFKT1JfVkVSU0lPTn0gXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0JaSVAyPTEgXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0NVUkw9MSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfRVhQQVQ9MSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfRk9STT0xIFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9MSUJBUkNISVZFPTEgXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0xJQkxaTUE9MSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfWkxJQj0xIFwKKyAgICAtREtXU1lTX0NIQVJfSVNfU0lHTkVEPTEgXAorICAgIC1EQlVJTERfQ3Vyc2VzRGlhbG9nPTAgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgJy1ES1dTWVNfTEZTX1dPUktTPTEnLCAnLURLV1NZU19MRlNfRElTQUJMRT0xJywgZCl9IFwKKyIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworICAgIG1rZGlyIC1wICR7RH0ke2RhdGFkaXJ9L2NtYWtlCisgICAgaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZSAke0R9JHtkYXRhZGlyfS9jbWFrZS8KKworICAgIG1rZGlyIC1wICR7RH0ke1NES1BBVEhOQVRJVkV9L2Vudmlyb25tZW50LXNldHVwLmQKKyAgICBpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L2Vudmlyb25tZW50LmQtY21ha2Uuc2ggJHtEfSR7U0RLUEFUSE5BVElWRX0vZW52aXJvbm1lbnQtc2V0dXAuZC9jbWFrZS5zaAorfQorCitGSUxFU18ke1BOfV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiAke1NES1BBVEhOQVRJVkV9IgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9jbWFrZS0ke0NNQUtFX01BSk9SX1ZFUlNJT059IgorRklMRVNfJHtQTn0tZG9jICs9ICIke2RvY2Rpcn0vY21ha2UtJHtDTUFLRV9NQUpPUl9WRVJTSU9OfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXNrdG9wLWZpbGUtdXRpbHMvZGVza3RvcC1maWxlLXV0aWxzLW5hdGl2ZV8wLjIyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGVza3RvcC1maWxlLXV0aWxzL2Rlc2t0b3AtZmlsZS11dGlscy1uYXRpdmVfMC4yMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjczNTY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGVza3RvcC1maWxlLXV0aWxzL2Rlc2t0b3AtZmlsZS11dGlscy1uYXRpdmVfMC4yMi5iYgpAQCAtMCwwICsxLDE2IEBACitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitTVU1NQVJZID0gIkNvbW1hbmQgbGluZSB1dGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCAqLmRlc2t0b3AgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2Rlc2t0b3AtZmlsZS11dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorREVQRU5EUyA9ICJnbGliLTIuMC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9kZXNrdG9wLWZpbGUtdXRpbHMvcmVsZWFzZXMvZGVza3RvcC1maWxlLXV0aWxzLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImM2YjlmOWFhYzFlYTE0MzA5MTE3OGMyMzQzN2U2Y2QwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg0MzUzMjY3MjY5MmY5OGU5YjJkNmFlNmNjODY1OGRhNTYyZGZkZTE2MDZjN2YzM2Q5ZDIyN2EzNDRkZTU2YzUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIG5hdGl2ZQorCitTID0gIiR7V09SS0RJUn0vZGVza3RvcC1maWxlLXV0aWxzLSR7UFZ9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvZGlzdGNjLWNvbmZpZy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjc4MzBiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJTZXRzIHVwIGRpc3RjYyBmb3IgY29tcGlsYXRpb24gb24gdGhlIHRhcmdldCBkZXZpY2UiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiZmlsZTovL2Rpc3RjYy5zaCIKKworUyA9ICIke1dPUktESVJ9IgorCisjIERlZmF1bHQgdG8gdGhlIGhvc3QgbWFjaGluZSBmb3IgYSBydW5uaW5nIHFlbXUgc2Vzc2lvbgorRElTVENDX0hPU1RTID89ICIxOTIuMTY4LjcuMSIKKworZG9fY29uZmlndXJlKCkgeworCXNlZCAtaSAicyVARElTVENDX0hPU1RTQCUke0RJU1RDQ19IT1NUU30lIiBkaXN0Y2Muc2gKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZAorCWluc3RhbGwgLW0gMDc1NSBkaXN0Y2Muc2ggJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZS5kLworfQorCitSREVQRU5EU18ke1BOfSA9ICJkaXN0Y2MiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvZGlzdGNjLWNvbmZpZy9kaXN0Y2Muc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvZGlzdGNjLWNvbmZpZy9kaXN0Y2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQyMDU5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9kaXN0Y2MtY29uZmlnL2Rpc3RjYy5zaApAQCAtMCwwICsxLDQgQEAKK0RJU1RDQ19IT1NUUz0iQERJU1RDQ19IT1NUU0AiCisjRElTVENDX1ZFUkJPU0U9IjEiCisKK2V4cG9ydCBESVNUQ0NfSE9TVFMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9uZnMtZXhwb3J0LXJvb3QuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvbmZzLWV4cG9ydC1yb290LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OWQwMDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvbmZzLWV4cG9ydC1yb290LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiQ29uZmlndXJhdGlvbiBzY3JpcHQgdG8gZXhwb3J0IHRhcmdldCByb290ZnMgZmlsZXN5c3RlbSIKK0RFU0NSSVBUSU9OID0gIkVuYWJsZXMgTkZTIGFjY2VzcyBmcm9tIGFueSBob3N0IHRvIHRoZSBlbnRpcmUgZmlsZXN5c3RlbSAoZm9yIGRldmVsb3BtZW50IHB1cnBvc2VzKS4iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJmaWxlOi8vZXhwb3J0cyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgZXhwb3J0cyAke0R9JHtzeXNjb25mZGlyfS8KK30KKworUkRFUEVORFNfJHtQTn0gPSAicGFja2FnZWdyb3VwLWNvcmUtbmZzLXNlcnZlciIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9uZnMtZXhwb3J0LXJvb3QvZXhwb3J0cyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9uZnMtZXhwb3J0LXJvb3QvZXhwb3J0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzUzYzVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL25mcy1leHBvcnQtcm9vdC9leHBvcnRzCkBAIC0wLDAgKzEgQEAKKy8gKihydyxub19yb290X3NxdWFzaCxhc3luYyxub19zdWJ0cmVlX2NoZWNrKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlmZnN0YXQvZGlmZnN0YXQvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlmZnN0YXQvZGlmZnN0YXQvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MzZiM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaWZmc3RhdC9kaWZmc3RhdC9ydW4tcHRlc3QKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKworLi90ZXN0aW5nL3J1bl90ZXN0LnNoIC4vdGVzdGluZy9jYXNlKi5wYXQgfHNlZCBcCisgIC1lICdzfCoqIG9rfFBBU1N8JyBcCisgIC1lICdzfD8/IGZhaWx8RkFJTHwnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaWZmc3RhdC9kaWZmc3RhdF8xLjYwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlmZnN0YXQvZGlmZnN0YXRfMS42MC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWJhNGRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlmZnN0YXQvZGlmZnN0YXRfMS42MC5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIlRvb2wgdG8gcHJvZHVjZSBhIHN0YXRpc3RpY3MgYmFzZWQgb24gYSBkaWZmIgorREVTQ1JJUFRJT04gPSAiZGlmZnN0YXQgcmVhZHMgdGhlIG91dHB1dCBvZiBkaWZmIGFuZCBkaXNwbGF5cyBhIGhpc3RvZ3JhbSBvZiBcCit0aGUgaW5zZXJ0aW9ucywgZGVsZXRpb25zLCBhbmQgbW9kaWZpY2F0aW9ucyBwZXItZmlsZS4gSXQgaXMgdXNlZnVsIGZvciBcCityZXZpZXdpbmcgbGFyZ2UsIGNvbXBsZXggcGF0Y2ggZmlsZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2RpZmZzdGF0LyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2luc3RhbGwtc2g7ZW5kbGluZT00MjttZDU9YjM1NDk3MjZjMTAyMmJlZTA5YzE3NGM3MmEwY2E0YTUiCisKK1NSQ19VUkkgPSAiZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvZGlmZnN0YXQvZGlmZnN0YXQtJHtQVn0udGd6IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiYTg4OWRhNGMwNmI1NDdhYTJkNzhmYTk2ODAwYWU2ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyMDMyZTQxOGI0M2JhZTcwZDU0OGUzMmRhOTAxZWJjNGFjMTI5NzIzODFkZTEzMTRiZWJkZTBiMTI2ZmIwMTIzIgorCitTID0gIiR7V09SS0RJUn0vZGlmZnN0YXQtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcHRlc3QKKworTERGTEFHUyArPSAiJHtUT09MQ0hBSU5fT1BUSU9OU30iCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJaWYgWyAhIC1lICR7U30vYWNpbmNsdWRlLm00IF07IHRoZW4KKwkJbXYgJHtTfS9hY2xvY2FsLm00ICR7U30vYWNpbmNsdWRlLm00CisJZmkKKwlhdXRvdG9vbHNfZG9fY29uZmlndXJlCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJY3AgLXIgJHtTfS90ZXN0aW5nICR7RH0ke1BURVNUX1BBVEh9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZGlzdGNjXzMuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9kaXN0Y2NfMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODc5YzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZGlzdGNjXzMuMS5iYgpAQCAtMCwwICsxLDc0IEBACitTVU1NQVJZID0gIkEgcGFyYWxsZWwgYnVpbGQgc3lzdGVtIgorREVTQ1JJUFRJT04gPSAiZGlzdGNjIGlzIGEgcGFyYWxsZWwgYnVpbGQgc3lzdGVtIHRoYXQgZGlzdHJpYnV0ZXMgXAorY29tcGlsYXRpb24gb2YgQy9DKysvT2JqQyBjb2RlIGFjcm9zcyBtYWNoaW5lcyBvbiBhIG5ldHdvcmsuIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworREVQRU5EUyA9ICJhdmFoaSIKKworR1RLQ09ORklHID0gImd0ayIKK0dUS0NPTkZJR19saWJjLXVjbGliYyA9ICIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICcke0dUS0NPTkZJR30nLCAnJywgZCl9IHBvcHQiCitQQUNLQUdFQ09ORklHW2d0a10gPSAiLS13aXRoLWd0aywtLXdpdGhvdXQtZ3RrIC0td2l0aG91dC1nbm9tZSxndGsrIgorIyB1c2Ugc3lzdGVtIHBvcHQgYnkgZGVmYXVsdAorUEFDS0FHRUNPTkZJR1twb3B0XSA9ICItLXdpdGhvdXQtaW5jbHVkZWQtcG9wdCwtLXdpdGgtaW5jbHVkZWQtcG9wdCxwb3B0IgorCitSUkVDT01NRU5EU18ke1BOfSA9ICJhdmFoaS1kYWVtb24iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9kaXN0Y2MvZGlzdGNjLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9zZXBhcmF0ZWJ1aWxkZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtemVyb2NvbmYtSW5jbHVkZS1mY250bC5oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RlZmF1bHQgXAorICAgICAgICAgICBmaWxlOi8vZGlzdGNjbW9uLWdub21lLmRlc2t0b3AgXAorICAgICAgICAgICBmaWxlOi8vZGlzdGNjIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc3RjYy5zZXJ2aWNlIgorU1JDUkVWID0gIjlhMTcyZDNkMjAwNDI3NTRhMzBjMGNkOWE1ZDYzZmQxYTgxMjBjMzEiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgdXNlcmFkZCBzeXN0ZW1kCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLVdlcnJvciBQWVRIT049L2Rldi9udWxsIgorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSBcCisgICAgICAgICAgICAgICAgICAgICAgIC0taG9tZSAvZGV2L251bGwgXAorICAgICAgICAgICAgICAgICAgICAgICAtLW5vLWNyZWF0ZS1ob21lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1naWQgbm9ncm91cCBcCisgICAgICAgICAgICAgICAgICAgICAgIGRpc3RjYyIKKworSU5JVFNDUklQVF9OQU1FID0gImRpc3RjYyIKKworU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJkaXN0Y2Muc2VydmljZSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZGlzdGNjICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvZGlzdGNjCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kaXN0Y2Muc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgIHNlZCAtaSAtZSAncyxAQklORElSQCwke2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGlzdGNjLnNlcnZpY2UKKyAgICAke0RFU0tUT1BJTlNUQUxMfQorfQorREVTS1RPUElOU1RBTEwgPSAiIgorREVTS1RPUElOU1RBTExfbGliYy1nbGliYyAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9kaXN0Y2MvCisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGlzdGNjbW9uLWdub21lLmRlc2t0b3AgJHtEfSR7ZGF0YWRpcn0vZGlzdGNjLworfQorUEFDS0FHRVMgKz0gImRpc3RjYy1kaXN0bW9uLWdub21lIgorCitGSUxFU18ke1BOfSA9ICIgJHtzeXNjb25mZGlyfSBcCisJCSR7YmluZGlyfS9kaXN0Y2MgXAorICAgICR7YmluZGlyfS9sc2Rpc3RjYyBcCisJCSR7YmluZGlyfS9kaXN0Y2NkIFwKKwkJJHtiaW5kaXJ9L2Rpc3RjY21vbi10ZXh0IFwKKwkJJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaXN0Y2Muc2VydmljZSIKK0ZJTEVTX2Rpc3RjYy1kaXN0bW9uLWdub21lID0gIiAgJHtiaW5kaXJ9L2Rpc3RjY21vbi1nbm9tZSBcCisJCQkJJHtkYXRhZGlyfS9kaXN0Y2MiCisKK3BrZ19wb3N0cm1fJHtQTn0gKCkgeworCWRlbHVzZXIgZGlzdGNjIHx8IHRydWUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy8wMDAxLXplcm9jb25mLUluY2x1ZGUtZmNudGwuaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy8wMDAxLXplcm9jb25mLUluY2x1ZGUtZmNudGwuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTdlYzljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzLzAwMDEtemVyb2NvbmYtSW5jbHVkZS1mY250bC5oLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gODMzMWZjNDc1OWQ4MDk1MTJmNDA0ZTdhMjdmODE3YWQ2ZDYxNjQ1MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE4OjAwOjMzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHplcm9jb25mOiBJbmNsdWRlIGZjbnRsLmgKKworV2UgbmVlZCBpdCBmb3IgZ2V0dGluZyBkZWluaXRpb25zIGZvciBPXyogZS5nLiBPX0NSRUFUCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL3plcm9jb25mLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3NyYy96ZXJvY29uZi5jIGIvc3JjL3plcm9jb25mLmMKK2luZGV4IDQxNGRkYzQuLjMxYmQzM2YgMTAwNjQ0CistLS0gYS9zcmMvemVyb2NvbmYuYworKysrIGIvc3JjL3plcm9jb25mLmMKK0BAIC0zMyw2ICszMyw3IEBACisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8bGltaXRzLmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+CisgCisgI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kb21haW4uaD4KKyAjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kZWZhdWx0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2RlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNjNDE1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kZWZhdWx0CkBAIC0wLDAgKzEsMjQgQEAKKyMgRGVmYXVsdHMgZm9yIGRpc3RjYyBpbml0c2NyaXB0CisjIHNvdXJjZWQgYnkgL2V0Yy9pbml0LmQvZGlzdGNjCisKKyMKKyMgc2hvdWxkIGRpc3RjYyBiZSBzdGFydGVkIG9uIGJvb3Q/CisjCisjIFNUQVJURElTVENDPSJ0cnVlIgorCitTVEFSVERJU1RDQz0idHJ1ZSIKKworIworIyBXaGljaCBuZXR3b3Jrcy9ob3N0cyBzaG91bGQgYmUgYWxsb3dlZCB0byBjb25uZWN0IHRvIHRoZSBkYWVtb24/CisjIFlvdSBjYW4gbGlzdCBtdWx0aXBsZSBob3N0cy9uZXR3b3JrcyBzZXBhcmF0ZWQgYnkgc3BhY2VzLgorIyBOZXR3b3JrcyBoYXZlIHRvIGJlIGluIENJRFIgbm90YXRpb24sIGYuZS4gMTkyLjE2OC4xLjAvMjQKKyMgSG9zdHMgYXJlIHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIElQIEFkcmVzcworIworIyBBTExPV0VETkVUUz0iMTI3LjAuMC4xIgorCitBTExPV0VETkVUUz0iMTkyLjE2OC43LjAvMjQiCisKKyMKKyMgT1BUSU9OUyBpcyB1c2VkIGZvciB0aGUgc3lzdGVtZCBzZXJ2aWNlIGZpbGUKKyMKK09QVElPTlM9Ii0tYWxsb3cgMTkyLjE2OC43LjAvMjQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGlzdGNjIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMzZmMGZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjYwpAQCAtMCwwICsxLDExOSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBkaXN0Y2MKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRyZW1vdGVfZnMgJHN5c2xvZworIyBSZXF1aXJlZC1TdG9wOiAgICAgJHJlbW90ZV9mcyAkc3lzbG9nCisjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAxCisjIFNob3J0LURlc2NyaXB0aW9uOiBzaW1wbGUgZGlzdHJpYnV0ZWQgY29tcGlsZXIgY2xpZW50IGFuZCBzZXJ2ZXIKKyMjIyBFTkQgSU5JVCBJTkZPCisjCisjIGRpc3RjY2QgRGViaWFuIGluaXQuZCBzY3JpcHQgY29udHJpYnV0ZWQgYnkgSmFzb24gVGhvbWFzLiAgKERlYmlhbiAjMTYxMTM2KQorIworIyBza2VsZXRvbglleGFtcGxlIGZpbGUgdG8gYnVpbGQgL2V0Yy9pbml0LmQvIHNjcmlwdHMuCisjCQlUaGlzIGZpbGUgc2hvdWxkIGJlIHVzZWQgdG8gY29uc3RydWN0IHNjcmlwdHMgZm9yIC9ldGMvaW5pdC5kLgorIworIwkJV3JpdHRlbiBieSBNaXF1ZWwgdmFuIFNtb29yZW5idXJnIDxtaXF1ZWxzQGNpc3Ryb24ubmw+LgorIwkJTW9kaWZpZWQgZm9yIERlYmlhbiBHTlUvTGludXgKKyMJCWJ5IElhbiBNdXJkb2NrIDxpbXVyZG9ja0BnbnUuYWkubWl0LmVkdT4uCisjCisjIFZlcnNpb246CUAoIylza2VsZXRvbiAgMS45LjEgIDA4LUFwci0yMDAyICBtaXF1ZWxzQGNpc3Ryb24ubmwKKyMKKworUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KK0RBRU1PTj0vdXNyL2Jpbi9kaXN0Y2NkCitOQU1FPWRpc3RjYworREVTQz0iRGlzdHJpYnV0ZWQgQ29tcGlsZXIgRGFlbW9uIgorREFFTU9OX0FSR1M9Ii0tcGlkLWZpbGU9L3Zhci9ydW4vJE5BTUUucGlkIC0tZGFlbW9uIgorIyBwbGVhc2UgY2hhbmdlIHRob3NlIHZhcmlhYmxlcyBieSBvdmVycmlkaW5nIHRoZW0gaW4gL2V0Yy9kZWZhdWx0cy9kaXN0Y2MKK0FMTE9XRURORVRTPSIxMjcuMC4wLjEiCisKKyMgUmVhZHMgY29uZmlnIGZpbGUgKHdpbGwgb3ZlcnJpZGUgZGVmYXVsdHMgYWJvdmUpCitbIC1yIC9ldGMvZGVmYXVsdC9kaXN0Y2MgXSAmJiAuIC9ldGMvZGVmYXVsdC9kaXN0Y2MKKwordGVzdCAteCAkREFFTU9OIHx8IGV4aXQgMAorCitzZXQgLWUKKworIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKKyMgY29uc3RydWN0IGFjY2VzcyBsaXN0CitBTExPVz0iIgorZm9yIG5ldCBpbiAkQUxMT1dFRE5FVFMKK2RvCisJQUxMT1c9IiRBTExPVyAtLWFsbG93ICRuZXQiCitkb25lCisKK3Nob3VsZF9zdGFydCgpIHsKKwlpZiBbICIkU1RBUlRESVNUQ0MiICE9ICJ0cnVlIiBdICYmIFsgIiRTVEFSVERJU1RDQyIgIT0gIllFUyIgXTsgdGhlbgorCQllY2hvICJTVEFSVERJU1RDQyBpcyBzZXQgdG8gZmFsc2UgaW4gL2V0Yy9kZWZhdWx0L2Rpc3RjYyIKKwkJZWNobyAiJERBRU1PTiBub3Qgc3RhcnRpbmciCisJCWV4aXQgMAorCWZpCisJIyB3ZSBuZWVkIHBlcm1pc3Npb24gdG8gd3JpdGUgdG8gdGhlIHBpZCBmaWxlCisJdG91Y2ggL3Zhci9ydW4vJE5BTUUucGlkCisJY2hvd24gZGlzdGNjIC92YXIvcnVuLyROQU1FLnBpZAorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJc2hvdWxkX3N0YXJ0CisJZWNobyAtbiAiU3RhcnRpbmcgJERFU0M6ICROQU1FIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vJE5BTUUucGlkIFwKKwktLWV4ZWMgJERBRU1PTiAtLSAkREFFTU9OX0FSR1MgJEFMTE9XIHx8CisJeworCSAgICBjb2RlPSQ/CisJICAgIGVjaG8gIiQwOiBzdGFydCBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICRjb2RlIiA+JjIKKwkgICAgZXhpdCAkY29kZQorCX0KKwllY2hvICIuIgorCTs7CisgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgJERFU0M6ICROQU1FIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcGlkZmlsZSAvdmFyL3J1bi8kTkFNRS5waWQgXAorCQktLWV4ZWMgJERBRU1PTiB8fAorCXsKKwkgICAgY29kZT0kPworCSAgICBlY2hvICIkMDogc3RvcCBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICRjb2RlIiA+JjIKKwkgICAgZXhpdCAkY29kZQorCX0KKwlybSAtZiAvdmFyL3J1bi8kTkFNRS5waWQgPi9kZXYvbnVsbCAyPiYxCisJZWNobyAiLiIKKwk7OworICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKwkjCisJIwlJZiB0aGUgInJlbG9hZCIgb3B0aW9uIGlzIGltcGxlbWVudGVkLCBtb3ZlIHRoZSAiZm9yY2UtcmVsb2FkIgorCSMJb3B0aW9uIHRvIHRoZSAicmVsb2FkIiBlbnRyeSBhYm92ZS4gSWYgbm90LCAiZm9yY2UtcmVsb2FkIiBpcworCSMJanVzdCB0aGUgc2FtZSBhcyAicmVzdGFydCIuCisJIworCWVjaG8gLW4gIlJlc3RhcnRpbmcgJERFU0M6ICROQU1FIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcGlkZmlsZSAvdmFyL3J1bi8kTkFNRS5waWQgXAorCQktLWV4ZWMgJERBRU1PTgorCXNsZWVwIDEKKwlzaG91bGRfc3RhcnQKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuLyROQU1FLnBpZCBcCisJCS0tZXhlYyAkREFFTU9OIC0tICREQUVNT05fQVJHUyAkQUxMT1cgfHwKKwl7CisJICAgIGNvZGU9JD8KKwkgICAgcm0gLWYgL3Zhci9ydW4vJE5BTUUucGlkID4vZGV2L251bGwgMj4mMQorCSAgICBlY2hvICIkMDogcmVzdGFydCBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICRjb2RlIiA+JjIKKwkgICAgZXhpdCAkY29kZQorCX0KKwllY2hvICIuIgorCTs7CisKKyAgIHN0YXR1cykKKwlzdGF0dXMgJERBRU1PTgorCWV4aXQgJD8KKwk7OworICAqKQorCU49L2V0Yy9pbml0LmQvJE5BTUUKKwllY2hvICJVc2FnZTogJE4ge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR8c3RhdHVzfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjYy5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjYy5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNTNkZGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGlzdGNjLnNlcnZpY2UKQEAgLTAsMCArMSwxMSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1EaXN0Y2NkIEEgRGlzdHJpYnV0ZWQgQ29tcGlsYXRpb24gU2VydmVyCitBZnRlcj1uZXR3b3JrLnRhcmdldAorCitbU2VydmljZV0KK1VzZXI9ZGlzdGNjCitFbnZpcm9ubWVudEZpbGU9LS9ldGMvZGVmYXVsdC9kaXN0Y2MKK0V4ZWNTdGFydD1AQklORElSQC9kaXN0Y2NkIC0tdmVyYm9zZSAtLW5vLWRldGFjaCAtLWRhZW1vbiAkT1BUSU9OUworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGlzdGNjbW9uLWdub21lLmRlc2t0b3AgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGlzdGNjbW9uLWdub21lLmRlc2t0b3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I1ZDg1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kaXN0Y2Ntb24tZ25vbWUuZGVza3RvcApAQCAtMCwwICsxLDEyIEBACitbRGVza3RvcCBFbnRyeV0KK1ZlcnNpb249MC45LjQKK0V4ZWM9ZGlzdGNjbW9uLWdub21lCitOYW1lPWRpc3RjYyBtb25pdG9yCitHZW5lcmljTmFtZT1EaXN0cmlidXRlZCBDb21waWxlIE1vbml0b3IKK0NvbW1lbnQ9R3JhcGhpY2FsIHZpZXcgb2YgZGlzdHJpYnV0ZWQgY29tcGlsZSB0YXNrcworSWNvbj1kaXN0Y2Ntb24tZ25vbWUtaWNvbgorVHJ5RXhlYz1kaXN0Y2Ntb24tZ25vbWUKK1Rlcm1pbmFsPWZhbHNlCitUeXBlPUFwcGxpY2F0aW9uCitDYXRlZ29yaWVzPUdOT01FO0RldmVsb3BtZW50OworU3RhcnR1cE5vdGlmeT10cnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvc2VwYXJhdGVidWlsZGRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9zZXBhcmF0ZWJ1aWxkZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZTNlNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvc2VwYXJhdGVidWlsZGRpci5wYXRjaApAQCAtMCwwICsxLDIxIEBACitXaGVuIGJ1aWxkaW5nIHdpdGggYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnksIG1ha2UgaW5zdGFsbCBmYWlscywKK3VuYWJsZSB0byBmaW5kIHRoZSBnbm9tZV9kYXRhIGZpbGVzLiBUaGlzIHBhdGNoIGNvcnJlY3RzIHRoZQorcGF0Y2ggYW5kIGVuc3VyZXMgdGhlIGJ1aWxkIHdvcmtzIGluIHRoaXMgY2FzZS4KKworUlAgMjAxMy8zLzgKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBkaXN0Y2MtMy4xL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGlzdGNjLTMuMS5vcmlnL01ha2VmaWxlLmluCTIwMDgtMTItMDIgMjE6NTA6MzEuMDAwMDAwMDAwICswMDAwCisrKysgZGlzdGNjLTMuMS9NYWtlZmlsZS5pbgkyMDEzLTAzLTA4IDEwOjQ5OjI0LjIyNDQwMDkzNyArMDAwMAorQEAgLTEwODgsNyArMTA4OCw3IEBACisgaW5zdGFsbC1nbm9tZS1kYXRhOiAkKGdub21lX2RhdGEpCisgCSQobWtpbnN0YWxsZGlycykgIiQoREVTVERJUikkKHBrZ2RhdGFkaXIpIgorIAlmb3IgcCBpbiAkKGdub21lX2RhdGEpOyBkbwkJCQlcCistCSQoSU5TVEFMTF9EQVRBKSAiJCRwIiAiJChERVNURElSKSQocGtnZGF0YWRpcikiIHx8IGV4aXQgMTsgXAorKwkkKElOU1RBTExfREFUQSkgIiQoc3JjZGlyKS8kJHAiICIkKERFU1RESVIpJChwa2dkYXRhZGlyKSIgfHwgZXhpdCAxOyBcCisgCWRvbmUKKyAKKyBpbnN0YWxsLWNvbmY6ICQoY29uZl9maWxlcykgJChkZWZhdWx0X2ZpbGVzKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG1pZGVjb2RlL2RtaWRlY29kZV8yLjEyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG1pZGVjb2RlL2RtaWRlY29kZV8yLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMTY1NTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kbWlkZWNvZGUvZG1pZGVjb2RlXzIuMTIuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJETUkgKERlc2t0b3AgTWFuYWdlbWVudCBJbnRlcmZhY2UpIHRhYmxlIHJlbGF0ZWQgdXRpbGl0aWVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ub25nbnUub3JnL2RtaWRlY29kZS8iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MzkzYTVjYTQ0NWY2OTY1ODczZWNhMDI1OWExN2Y4MzMiCisKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9OT05HTlVfTUlSUk9SfS9kbWlkZWNvZGUvJHtCUH0udGFyLmJ6MiIKKworQ09NUEFUSUJMRV9IT1NUID0gIihpLjg2fHg4Nl82NHxhYXJjaDY0fGFybXxwb3dlcnBjfHBvd2VycGM2NCkuKi1saW51eCIKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIERFU1RESVI9IiR7RH0iIGluc3RhbGwKK30KKworZG9fdW5wYWNrX2V4dHJhKCkgeworCXNlZCAtaSAtZSAnL15wcmVmaXgvczovdXNyL2xvY2FsOiR7ZXhlY19wcmVmaXh9OicgJHtTfS9NYWtlZmlsZQorfQorYWRkdGFzayB1bnBhY2tfZXh0cmEgYWZ0ZXIgZG9fdW5wYWNrIGJlZm9yZSBkb19wYXRjaAorCitTUkNfVVJJW21kNXN1bV0gPSAiYTQwNmYzY2JiMjc3MzY0OTE2OTg2OTdiZWVkZGI3ODEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTEzZmYzMDU1ZDU2M2E2MmE0MjA3ODliOGVlMzNiMDM4ZGU5YWZhMThlYTYxMjU0NzYwZGRmOGFiODdhNTA4OCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMvZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cy1uYXRpdmVfMS43OS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMvZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cy1uYXRpdmVfMS43OS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjFiNDhmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cy9kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzLW5hdGl2ZV8xLjc5LmJiCkBAIC0wLDAgKzEsNjggQEAKK1NVTU1BUlkgPSAiRFNTU0wgc3R5bGVzaGVldHMgdXNlZCB0byB0cmFuc2Zvcm0gU0dNTCBhbmQgWE1MIERvY0Jvb2sgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQiCisjIFNpbXBsZSBwZXJzbWlzc2l2ZQorTElDRU5TRSA9ICJEU1NTTCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9NDE7ZW5kbGluZT03NDttZDU9ODc1Mzg1MTU5YjJlZTc2ZWNmNTYxMzZhZTdmNTQyZDYiCisKK0RFUEVORFMgPSAic2dtbC1jb21tb24tbmF0aXZlIgorCitQUiA9ICJyNCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZG9jYm9vay9kb2Nib29rLWRzc3NsLSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiYzE5MmQyMzI2NmI5YTY2NGNhMGFiYTRhNzc5NGM3YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyZjMyOWUxMjBiZWU5ZWY0MmZiZGQ3NGRkZDYwZTA1ZTQ5Nzg2YzVhNzk1M2EwZmY0YzY4MGFlNmJkZjBlMmJjIgorCitTID0gIiR7V09SS0RJUn0vZG9jYm9vay1kc3NzbC0ke1BWfSIKKworaW5oZXJpdCBuYXRpdmUKKworU1NUQVRFUE9TVElOU1RGVU5DUyArPSAiZG9jYm9va19kc3NzbF9zdHlsZXNoZWV0c19zc3RhdGVfcG9zdGluc3QiCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImRvY2Jvb2tfZHNzc2xfc3lzcm9vdF9wcmVwcm9jZXNzIgorQ0xFQU5GVU5DUyArPSAiZG9jYm9va19kc3NzbF9zdHlsZXNoZWV0c19zc3RhdGVfY2xlYW4iCisKKworZG9faW5zdGFsbCAoKSB7CisJIyBSZWZlciB0byBodHRwOi8vd3d3LmxpbnV4ZnJvbXNjcmF0Y2gub3JnL2JsZnMvdmlldy9zdGFibGUvcHN0L2RvY2Jvb2stZHNzc2wuaHRtbAorCSMgZm9yIGRldGFpbHMuCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1IGJpbi9jb2xsYXRlaW5kZXgucGwgJHtEfSR7YmluZGlyfQorCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svZHNzc2wtc3R5bGVzaGVldHMtJHtQVn0KKwlpbnN0YWxsIC1tIDA2NDQgY2F0YWxvZyAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svZHNzc2wtc3R5bGVzaGVldHMtJHtQVn0KKwljcCAtdiAtUiAqICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay9kc3NzbC1zdHlsZXNoZWV0cy0ke1BWfQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9zZ21sCisJZWNobyAiQ0FUQUxPRyAke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay9kc3NzbC1zdHlsZXNoZWV0cy0ke1BWfS9jYXRhbG9nIiA+IFwKKwkJICR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwvZHNzc2wtZG9jYm9vay1zdHlsZXNoZWV0cy5jYXQKKwllY2hvICJDQVRBTE9HICR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL2Rzc3NsLXN0eWxlc2hlZXRzLSR7UFZ9L2NvbW1vbi9jYXRhbG9nIiA+PiBcCisJCSR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwvZHNzc2wtZG9jYm9vay1zdHlsZXNoZWV0cy5jYXQKK30KKworZG9jYm9va19kc3NzbF9zdHlsZXNoZWV0c19zc3RhdGVfcG9zdGluc3QgKCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisJCSMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisJCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKwkJJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctZG9jYm9vay1kc3NzbCBcCisJCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmJhayBcCisJCQkke3N5c2NvbmZkaXJ9L3NnbWwvZHNzc2wtZG9jYm9vay1zdHlsZXNoZWV0cy5jYXQKKwkJJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctZG9jYm9vay1kc3NzbCBcCisJCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCBcCisJCQkke3N5c2NvbmZkaXJ9L3NnbWwvZHNzc2wtZG9jYm9vay1zdHlsZXNoZWV0cy5jYXQKKwlmaQorfQorCitkb2Nib29rX2Rzc3NsX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisgICAgaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworICAgIGluc3RhbGwgLW0gNzU1ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9pbnN0YWxsLWNhdGFsb2cgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctZG9jYm9vay1kc3NzbAorfQorCitkb2Nib29rX2Rzc3NsX3N0eWxlc2hlZXRzX3NzdGF0ZV9jbGVhbiAoKSB7CisJIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKwkjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyByZW1vdmVkIGZyb20gc3N0YXRlIGNhY2hlLgorCWZpbGVzPSIke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmJhayAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCIKKwlmb3IgZiBpbiAkZmlsZXM7IGRvCisJCVsgISAtZiAkZiBdIHx8IHNlZCAtaSAnL1wvc2dtbFwvZHNzc2wtZG9jYm9vay1zdHlsZXNoZWV0cy5jYXQvZCcgJGYKKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtMy4xLW5hdGl2ZV8zLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtMy4xLW5hdGl2ZV8zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdkZjRmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC0zLjEtbmF0aXZlXzMuMS5iYgpAQCAtMCwwICsxLDIzIEBACityZXF1aXJlIGRvY2Jvb2stc2dtbC1kdGQtbmF0aXZlLmluYworCitMSUNFTlNFID0gIk9BU0lTIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS1PQVNJUzttZDU9YzYwODk4NWRkNWY3ZjIxNWU2NjllNzYzOWEwYjFkMmUiCisKK0RURF9WRVJTSU9OID0gIjMuMSIKKworUFIgPSAiJHtJTkNfUFJ9LjAiCisKKyMgTm90ZTogdGhlIHVwc3RyZWFtIHNvdXJjZXMgYXJlIG5vdCBkaXN0cmlidXRlZCB3aXRoIGEgbGljZW5zZSBmaWxlLgorIyBMSUNFTlNFLU9BU0lTIGlzIGluY2x1ZGVkIGFzIGEgInBhdGNoIiB0byB3b3JrYXJvdW5kIHRoaXMuIFdoZW4KKyMgdXBncmFkaW5nIHRoaXMgcmVjaXBlLCBwbGVhc2UgdmVyaWZ5IHdoZXRoZXIgdGhpcyBpcyBzdGlsbCBuZWVkZWQuCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZG9jYm9vay5vcmcvc2dtbC8zLjEvZG9jYmszMS56aXAgXAorICAgICAgICAgICBmaWxlOi8vTElDRU5TRS1PQVNJUyIKKworU1JDX1VSSVttZDVzdW1dID0gIjQzMjc0OWMwYzgwNmRiYWU4MWM4YmNiNzBkYTNiNWQzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIwMjYxZDI3NzFiOWEwNTJhYmZhM2Q4ZmFiMWFhNjJiZTA1NzkxYTAxMDI4MWM1NjZmOTA3M2JmMGU2NDQ1MzgiCisKK2RvX2NvbXBpbGUoKSB7CisJIyBSZWZlciB0byBodHRwOi8vd3d3LmxpbnV4ZnJvbXNjcmF0Y2gub3JnL2JsZnMvdmlldy9zdGFibGUvcHN0L3NnbWwtZHRkLTMuaHRtbAorCSMgZm9yIGRldGFpbHMuCisJc2VkIC1pIC1lICcvSVNPIDg4NzkvZCcgLWUgJ3N8RFREREVDTCAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFYzLjEvL0VOInxTR01MREVDTHxnJyBkb2Nib29rLmNhdAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLTQuMS1uYXRpdmVfNC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLTQuMS1uYXRpdmVfNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YzkzOTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtNC4xLW5hdGl2ZV80LjEuYmIKQEAgLTAsMCArMSwyMyBAQAorcmVxdWlyZSBkb2Nib29rLXNnbWwtZHRkLW5hdGl2ZS5pbmMKKworTElDRU5TRSA9ICJPQVNJUyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UtT0FTSVM7bWQ1PWM2MDg5ODVkZDVmN2YyMTVlNjY5ZTc2MzlhMGIxZDJlIgorCitEVERfVkVSU0lPTiA9ICI0LjEiCisKK1BSID0gIiR7SU5DX1BSfS4wIgorCisjIE5vdGU6IHRoZSB1cHN0cmVhbSBzb3VyY2VzIGFyZSBub3QgZGlzdHJpYnV0ZWQgd2l0aCBhIGxpY2Vuc2UgZmlsZS4KKyMgTElDRU5TRS1PQVNJUyBpcyBpbmNsdWRlZCBhcyBhICJwYXRjaCIgdG8gd29ya2Fyb3VuZCB0aGlzLiBXaGVuCisjIHVwZ3JhZGluZyB0aGlzIHJlY2lwZSwgcGxlYXNlIHZlcmlmeSB3aGV0aGVyIHRoaXMgaXMgc3RpbGwgbmVlZGVkLgorU1JDX1VSSSA9ICJodHRwOi8vZG9jYm9vay5vcmcvc2dtbC80LjEvZG9jYms0MS56aXAgXAorICAgICAgICAgICBmaWxlOi8vTElDRU5TRS1PQVNJUyIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ4OWY2ZmYyYTIxNzNlYjFlMTQyMTZjMTA1MzNlZGUyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImRlYWFmY2YwYTM2Nzc2OTJlN2FkNDQxMmMwZTQxYzFkYjNlOWRhNmNkY2RiM2RkMzJiMmNjMWY5Yzk3ZDYzMTEiCisKK2RvX2NvbXBpbGUoKSB7CisJIyBSZWZlciB0byBodHRwOi8vd3d3LmxpbnV4ZnJvbXNjcmF0Y2gub3JnL2JsZnMvdmlldy9zdGFibGUvcHN0L3NnbWwtZHRkLmh0bWwKKwkjIGZvciBkZXRhaWxzLgorCXNlZCAtaSAtZSAnL0lTTyA4ODc5L2QnIC1lICcvZ21sL2QnIGRvY2Jvb2suY2F0Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtNC41LW5hdGl2ZS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC00LjUtbmF0aXZlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNzIzYzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtNC41LW5hdGl2ZS5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIGRvY2Jvb2stc2dtbC1kdGQtbmF0aXZlLmluYworCitMSUNFTlNFID0gIk9BU0lTIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS1PQVNJUzttZDU9YzYwODk4NWRkNWY3ZjIxNWU2NjllNzYzOWEwYjFkMmUiCisKK0RURF9WRVJTSU9OID0gIjQuNSIKKworUFIgPSAiJHtJTkNfUFJ9LjAiCitQViA9ICI0LjUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwN2M1ODFmNGJiY2JhNmQzYWFjODUzNjBhMTlmOTVmNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MDQzZTUxNGU4MGM2YzE5Y2IxNDZiNWQzNzkzN2QxMzA1YmYzYWJmOWIwMDk3YzM2ZGY3ZjcwZjYxMWNkZjQzIgorCitkb19jb21waWxlKCkgeworCSMgUmVmZXIgdG8gaHR0cDovL3d3dy5saW51eGZyb21zY3JhdGNoLm9yZy9ibGZzL3ZpZXcvc3RhYmxlL3BzdC9zZ21sLWR0ZC5odG1sCisJIyBmb3IgZGV0YWlscy4KKwlzZWQgLWkgLWUgJy9JU08gODg3OS9kJyAtZScvZ21sL2QnIGRvY2Jvb2suY2F0Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtbmF0aXZlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC1uYXRpdmUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNTA5ODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtbmF0aXZlLmluYwpAQCAtMCwwICsxLDcwIEBACisjIFRoZSBEVERzIG9mIHRoZSB2YXJpb3VzIHZlcnNpb25zIGhhdmUgdG8gYmUgaW5zdGFsbGVkIGluIHBhcmFsbGVsIGFuZAorIyBzaG91bGQgbm90IHJlcGxhY2UgZWFjaCBvdGhlci4gVGhlIGluc3RhbGxhdGlvbiBzdGVwIGlzIGNvbW1vbiBmb3IKKyMgYWxsIHZlcnNpb25zIGFuZCBqdXN0IGRpZmZlcnMgaW4gJHtEVERfVkVSU0lPTn0gd2hpY2ggaXMgc2V0IGluIGVhY2gKKyMgdmVyc2lvbiByZWNpcGUuCisjCisjIFRoZSBEVERzIGRvIGhhdmUgc29tZSBxdWlya3MgKHNlZSBMRlMgZG9jdW1lbnRhdGlvbikuCitTVU1NQVJZID0gIkRvY3VtZW50IHR5cGUgZGVmaW5pdGlvbnMgZm9yIHZlcmlmaWNhdGlvbiBvZiBTR01MIGRhdGEgZmlsZXMiCitERVNDUklQVElPTiA9ICJEb2N1bWVudCB0eXBlIGRlZmluaXRpb25zIGZvciB2ZXJpZmljYXRpb24gb2YgU0dNTCBkYXRhIFwKK2ZpbGVzIGFnYWluc3QgdGhlIERvY0Jvb2sgcnVsZSBzZXQiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmRvY2Jvb2sub3JnL3NnbWwvIgorCitERVBFTkRTID0gInNnbWwtY29tbW9uLW5hdGl2ZSIKKworIyBOb3RlOiB0aGUgdXBzdHJlYW0gc291cmNlcyBhcmUgbm90IGRpc3RyaWJ1dGVkIHdpdGggYSBsaWNlbnNlIGZpbGUuCisjIExJQ0VOU0UtT0FTSVMgaXMgaW5jbHVkZWQgYXMgYSAicGF0Y2giIHRvIHdvcmthcm91bmQgdGhpcy4gV2hlbgorIyB1cGdyYWRpbmcgdGhpcyByZWNpcGUsIHBsZWFzZSB2ZXJpZnkgd2hldGhlciB0aGlzIGlzIHN0aWxsIG5lZWRlZC4KK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5kb2Nib29rLm9yZy9zZ21sLyR7RFREX1ZFUlNJT059L2RvY2Jvb2stJHtEVERfVkVSU0lPTn0uemlwIFwKKyAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UtT0FTSVMiCisKKyMgVGhlIC56aXAgZmlsZSBleHRyYWN0cyB0byB0aGUgY3VycmVudCBkaXIKK1MgPSAiJHtXT1JLRElSfSIKKworSU5DX1BSID0gInIzIgorCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJkb2Nib29rX3NnbWxfZHRkX3NzdGF0ZV9wb3N0aW5zdCIKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiZG9jYm9va19zZ21sX2R0ZF9zeXNyb290X3ByZXByb2Nlc3MiCisKK2luaGVyaXQgbmF0aXZlCisKK2RvX2luc3RhbGwgKCkgeworCSMgUmVmZXIgdG8gaHR0cDovL3d3dy5saW51eGZyb21zY3JhdGNoLm9yZy9ibGZzL3ZpZXcvc3RhYmxlL3BzdC9zZ21sLWR0ZC5odG1sCisJIyBmb3IgZGV0YWlscy4KKwlpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svc2dtbC1kdGQtJHtEVERfVkVSU0lPTn0KKwlpbnN0YWxsIGRvY2Jvb2suY2F0ICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay9zZ21sLWR0ZC0ke0RURF9WRVJTSU9OfS9jYXRhbG9nCisJY3AgLVBwUnIgKi5kdGQgKi5tb2QgKi5kY2wgJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL3NnbWwtZHRkLSR7RFREX1ZFUlNJT059CisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwKKwllY2hvICJDQVRBTE9HICR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL3NnbWwtZHRkLSR7RFREX1ZFUlNJT059L2NhdGFsb2ciID4gXAorCQkke0R9JHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay1kdGQtJHtEVERfVkVSU0lPTn0uY2F0Cit9CisKK2RvY2Jvb2tfc2dtbF9kdGRfc3N0YXRlX3Bvc3RpbnN0ICgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorCQkjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorCQkjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisJCSR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vaW5zdGFsbC1jYXRhbG9nLWRvY2Jvb2stc2dtbC1kdGQtJHtEVERfVkVSU0lPTn0gXAorCQkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5iYWsgXAorCQkJJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay1kdGQtJHtEVERfVkVSU0lPTn0uY2F0CisJCSR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vaW5zdGFsbC1jYXRhbG9nLWRvY2Jvb2stc2dtbC1kdGQtJHtEVERfVkVSU0lPTn0gXAorCQkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgXAorCQkJJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay1kdGQtJHtEVERfVkVSU0lPTn0uY2F0CisJZmkKK30KKworZG9jYm9va19zZ21sX2R0ZF9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworICAgIGluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8KKyAgICBpbnN0YWxsIC1tIDc1NSAke1NUQUdJTkdfQklORElSX05BVElWRX0vaW5zdGFsbC1jYXRhbG9nICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vaW5zdGFsbC1jYXRhbG9nLWRvY2Jvb2stc2dtbC1kdGQtJHtEVERfVkVSU0lPTn0KK30KKworQ0xFQU5GVU5DUyArPSAiZG9jYm9va19zZ21sX2R0ZF9zc3RhdGVfY2xlYW4iCisKK2RvY2Jvb2tfc2dtbF9kdGRfc3N0YXRlX2NsZWFuICgpIHsKKwkjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIHJlbW92ZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisJZmlsZXM9IiR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IgorCWZvciBmIGluICRmaWxlczsgZG8KKwkJWyAhIC1mICRmIF0gfHwgc2VkIC1pICcvXC9zZ21sXC9zZ21sLWRvY2Jvb2stZHRkLSR7RFREX1ZFUlNJT059LmNhdC9kJyAkZgorCWRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZmlsZXMvTElDRU5TRS1PQVNJUyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZmlsZXMvTElDRU5TRS1PQVNJUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGE3ZjViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9maWxlcy9MSUNFTlNFLU9BU0lTCkBAIC0wLDAgKzEsMTYgQEAKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY0Jvb2sgWE1MIERURAorYW5kIGl0cyBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlCitpcyBoZXJlYnkgZ3JhbnRlZCBpbiBwZXJwZXR1aXR5LCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXBwZWFyIGluIGFsbCBjb3BpZXMuICBUaGUgY29weXJpZ2h0Citob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBEVEQgZm9yCithbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzZWQgb3IgaW1wbGllZAord2FycmFudHkuCisKK0lmIHlvdSBtb2RpZnkgdGhlIERvY0Jvb2sgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAorcmVmZXJlbmNpbmcgYWRkaXRpb25hbCBzZXRzIG9mIGdlbmVyYWwgZW50aXRpZXMgYW5kIGRlY2xhcmluZworYWRkaXRpb25hbCBub3RhdGlvbnMsIGxhYmVsIHlvdXIgRFREIGFzIGEgdmFyaWFudCBvZiBEb2NCb29rLiAgU2VlCit0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworUGxlYXNlIGRpcmVjdCBhbGwgcXVlc3Rpb25zLCBidWcgcmVwb3J0cywgb3Igc3VnZ2VzdGlvbnMgZm9yIAorY2hhbmdlcyB0byB0aGUgZG9jYm9va0BsaXN0cy5vYXNpcy1vcGVuLm9yZyBtYWlsaW5nIGxpc3QuIEZvciBtb3JlCitpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtMC42LjE0L3JlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay11dGlscy9kb2Nib29rLXV0aWxzLTAuNi4xNC9yZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjA3OWQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay11dGlscy9kb2Nib29rLXV0aWxzLTAuNi4xNC9yZS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRml4IHJ1bnRpbWUgZXJyb3Igb2NjdXJyZWQgZS5nLiB3aXRoIGRvY2Jvb2stdG8tbWFuIGNhbGxzOgorCisgIGdyZXA6IGNoYXJhY3RlciBjbGFzcyBzeW50YXggaXMgW1s6c3BhY2U6XV0sIG5vdCBbOnNwYWNlOl0KKyAgZ3JlcDogY2hhcmFjdGVyIGNsYXNzIHN5bnRheCBpcyBbWzpzcGFjZTpdXSwgbm90IFs6c3BhY2U6XQorICBqdzogVGhlcmUgaXMgbm8gZnJvbnRlbmQgY2FsbGVkICIvZG9jYm9vay91dGlscy0wLjYuMTQvZnJvbnRlbmRzL2RvY2Jvb2siLgorCitTZWUgYWxzbzoKKworICAgPGh0dHBzOi8vcWEubWFuZHJpdmEuY29tL3Nob3dfYnVnLmNnaT9pZD02MTEyNz4KKworU2lnbmVkLW9mZi1ieTogU3RlZmZlbiBTbGVkeiA8c2xlZHpAZHJlc2VhcmNoLWZlLmRlPgorCitkaWZmIC1OdXJkIGRvY2Jvb2stdXRpbHMtMC42LjE0LW9yaWcvYmluL2p3LmluIGRvY2Jvb2stdXRpbHMtMC42LjE0L2Jpbi9qdy5pbgorLS0tIGRvY2Jvb2stdXRpbHMtMC42LjE0LW9yaWcvYmluL2p3LmluCTIwMTItMDMtMjkgMDc6NTA6MDAuNzg5NTY0ODI2ICswMjAwCisrKysgZG9jYm9vay11dGlscy0wLjYuMTQvYmluL2p3LmluCTIwMTItMDMtMjkgMDc6NTI6MTAuMzcxMzAyOTY3ICswMjAwCitAQCAtODAsOSArODAsOSBAQAorIFNHTUxfQ0FUQUxPR1NfRElSPSIvZXRjL3NnbWwiCisgaWYgWyAtZiAiJFNHTUxfQ09ORiIgXQorIHRoZW4KKy0gIFJFPSdeWzpzcGFjZTpdKlNHTUxfQkFTRV9ESVJbOnNwYWNlOl0qPVs6c3BhY2U6XSonCisrICBSRT0nXltbOnNwYWNlOl1dKlNHTUxfQkFTRV9ESVJbWzpzcGFjZTpdXSo9W1s6c3BhY2U6XV0qJworICAgU0dNTF9CQVNFX0RJUj1gZ3JlcCAkUkUgJFNHTUxfQ09ORiB8IHNlZCAicy8kUkUvLyJgCistICBSRT0nXls6c3BhY2U6XSpTR01MX0NBVEFMT0dTX0RJUls6c3BhY2U6XSo9WzpzcGFjZTpdKicKKysgIFJFPSdeW1s6c3BhY2U6XV0qU0dNTF9DQVRBTE9HU19ESVJbWzpzcGFjZTpdXSo9W1s6c3BhY2U6XV0qJworICAgU0dNTF9DQVRBTE9HU19ESVI9YGdyZXAgJFJFICRTR01MX0NPTkYgfCBzZWQgInMvJFJFLy8iYAorIGZpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtbmF0aXZlXzAuNi4xNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stdXRpbHMvZG9jYm9vay11dGlscy1uYXRpdmVfMC42LjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYTVmM2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtbmF0aXZlXzAuNi4xNC5iYgpAQCAtMCwwICsxLDYzIEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBmb3IgZm9ybWF0dGluZyBhbmQgbWFuaXB1bGF0aW5nIERvY0Jvb2sgZG9jdW1lbnRzIgorREVTQ1JJUFRJT04gPSAiQSBjb2xsZWN0aW9uIG9mIGFsbCB0aGUgZnJlZSBzb2Z0d2FyZSB0b29scyB5b3UgbmVlZCB0byBcCit3b3JrIG9uIGFuZCBmb3JtYXQgRG9jQm9vayBkb2N1bWVudHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9kb2Nib29rLXRvb2xzLyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKK0RFUEVORFMgPSAib3BlbmphZGUtbmF0aXZlIHNnbWxzcGwtbmF0aXZlIGRvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMtbmF0aXZlIGRvY2Jvb2stc2dtbC1kdGQtMy4xLW5hdGl2ZSIKKworUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiXAorCWZ0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9wdWIvZG9jYm9vay10b29scy9uZXctdHJpYWxzL1NPVVJDRVMvZG9jYm9vay11dGlscy0ke1BWfS50YXIuZ3ogXAorCWZpbGU6Ly9yZS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YjQxYjE4YzM2NWMwMWYyMjViYzQxN2NmNjMyZDgxYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0OGZhYWI4ZWU4YTc2MDVjOTM0MmZiN2I5MDZlMDgxNWUzY2VlODRhNDg5MTgyYWYzOGU4ZjdjMGRmMmU5MmU5IgorCitpbmhlcml0IGF1dG90b29scyBuYXRpdmUKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyBGaXggaGFyZC1jb2RlZCByZWZlcmVuY2VzIHRvIC9ldGMvc2dtbAorCWlmIFsgISAtZSAke1N9Ly5zZWRfZG9uZSBdOyB0aGVuCisJCXNlZCAtaSAtZSAic3wvZXRjL3NnbWx8JHtzeXNjb25mZGlyfS9zZ21sfGciICR7U30vYmluL2p3LmluCisJCXNlZCAtaSAtZSAic3wvZXRjL3NnbWx8JHtzeXNjb25mZGlyfS9zZ21sfGciICR7U30vZG9jL21hbi9NYWtlZmlsZS5hbQorCQlzZWQgLWkgLWUgInN8L2V0Yy9zZ21sfCR7c3lzY29uZmRpcn0vc2dtbHxnIiAke1N9L2RvYy9IVE1ML01ha2VmaWxlLmFtCisKKwkJIyBQb2ludCBqdyB0byB0aGUgbmF0aXZlIHN5c3Jvb3QgY2F0YWxvZworCQlzZWQgLWkgLWUgJ3N8XlNHTUxfRVhUUkFfQ0FUQUxPR1M9IiJ8U0dNTF9FWFRSQV9DQVRBTE9HUz0iOiR7c3lzY29uZmRpcn0vc2dtbC9jYXRhbG9nInxnJyAke1N9L2Jpbi9qdy5pbgorCQl0b3VjaCAke1N9Ly5zZWRfZG9uZQorCWZpCit9Citkb191bnBhY2tbY2xlYW5kaXJzXSArPSAiJHtTfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwkjIEluc3RhbGwgdGhlIGJpbmFyaWVzIGFuZCBhIGJ1bmNoIG9mIG90aGVyIGNvbW1vbmx5IHVzZWQgbmFtZXMgZm9yIHRoZW0uCisJZm9yIGRvY3R5cGUgaW4gaHRtbCBwcyBkdmkgbWFuIHBkZiBydGYgdGV4IHRleGkgdHh0CisJZG8KKwkJaW5zdGFsbCAtbSAwNzU1ICR7U30vYmluL2RvY2Jvb2syJGRvY3R5cGUgJHtEfSR7YmluZGlyfS8KKwkJbG4gLXNmIGRvY2Jvb2syeC0kZG9jdHlwZSAke0R9JHtiaW5kaXJ9L2RiMiRkb2N0eXBlCisJCWxuIC1zZiBkb2Nib29rMiRkb2N0eXBlICR7RH0ke2JpbmRpcn0vZGIyJGRvY3R5cGUKKwkJbG4gLXNmIGRvY2Jvb2syJGRvY3R5cGUgJHtEfSR7YmluZGlyfS9kb2Nib29rLXRvLSRkb2N0eXBlCisJZG9uZQorCisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vYmluL2p3ICR7RH0ke2JpbmRpcn0vCisJZm9yIGkgaW4gYmFja2VuZHMvZHZpIGJhY2tlbmRzL2h0bWwgXAorCQliYWNrZW5kcy9wZGYgYmFja2VuZHMvcHMgYmFja2VuZHMvcnRmIGJhY2tlbmRzL3RleCBcCisJCWJhY2tlbmRzL3R4dCBcCisJCWhlbHBlcnMvZG9jYm9vazJtYW4tc3BlYy5wbCBoZWxwZXJzL2RvY2Jvb2sydGV4aS1zcGVjLnBsIFwKKwkJZG9jYm9vay11dGlscy5kc2wKKwlkbworCQlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay91dGlscy0ke1BWfS9gZGlybmFtZSAkaWAKKwkJaW5zdGFsbCAke1N9LyRpICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay91dGlscy0ke1BWfS8kaQorCWRvbmUKKwlmb3IgaSBpbiBiYWNrZW5kcy9tYW4gYmFja2VuZHMvdGV4aSBmcm9udGVuZHMvZG9jYm9vaworCWRvCisJCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL3V0aWxzLSR7UFZ9L2BkaXJuYW1lICRpYAorCQlpbnN0YWxsICR7Qn0vJGkgJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL3V0aWxzLSR7UFZ9LyRpCisJZG9uZQorCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0L0xJQ0VOU0UtT0FTSVMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0L0xJQ0VOU0UtT0FTSVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRhN2Y1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steG1sLWR0ZDQvTElDRU5TRS1PQVNJUwpAQCAtMCwwICsxLDE2IEBACitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2NCb29rIFhNTCBEVEQKK2FuZCBpdHMgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZQoraXMgaGVyZWJ5IGdyYW50ZWQgaW4gcGVycGV0dWl0eSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFwcGVhciBpbiBhbGwgY29waWVzLiAgVGhlIGNvcHlyaWdodAoraG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgRFREIGZvcgorYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzc2VkIG9yIGltcGxpZWQKK3dhcnJhbnR5LgorCitJZiB5b3UgbW9kaWZ5IHRoZSBEb2NCb29rIERURCBpbiBhbnkgd2F5LCBleGNlcHQgZm9yIGRlY2xhcmluZyBhbmQKK3JlZmVyZW5jaW5nIGFkZGl0aW9uYWwgc2V0cyBvZiBnZW5lcmFsIGVudGl0aWVzIGFuZCBkZWNsYXJpbmcKK2FkZGl0aW9uYWwgbm90YXRpb25zLCBsYWJlbCB5b3VyIERURCBhcyBhIHZhcmlhbnQgb2YgRG9jQm9vay4gIFNlZQordGhlIG1haW50ZW5hbmNlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1BsZWFzZSBkaXJlY3QgYWxsIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsIG9yIHN1Z2dlc3Rpb25zIGZvciAKK2NoYW5nZXMgdG8gdGhlIGRvY2Jvb2tAbGlzdHMub2FzaXMtb3Blbi5vcmcgbWFpbGluZyBsaXN0LiBGb3IgbW9yZQoraW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2svLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC11cGRhdGUtY2F0YWxvZy54bWwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0L2RvY2Jvb2steG1sLXVwZGF0ZS1jYXRhbG9nLnhtbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTcwMzYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC11cGRhdGUtY2F0YWxvZy54bWwucGF0Y2gKQEAgLTAsMCArMSw1MTUgQEAKK2RvY2Jvb2steG1sOiB1cGRhdGUgY2F0YWxvZy54bWwKKworUmVmZXIgVWJ1bnR1IDEzLjA0IHRvIHVwZGF0ZSBjYXRhbG9nLnhtbAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRvY2Jvb2stNC4wL2NhdGFsb2cueG1sICAgfCA3MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGRvY2Jvb2stNC4xLjIvY2F0YWxvZy54bWwgfCA2NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgZG9jYm9vay00LjIvY2F0YWxvZy54bWwgICB8IDY5ICsrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGRvY2Jvb2stNC4zL2NhdGFsb2cueG1sICAgfCA3MiArKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGRvY2Jvb2stNC40L2NhdGFsb2cueG1sICAgfCA2MyArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGRvY2Jvb2stNC41L2NhdGFsb2cueG1sICAgfCA2MyArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDYgZmlsZXMgY2hhbmdlZCwgMTY1IGluc2VydGlvbnMoKyksIDI0MCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jYm9vay00LjAvY2F0YWxvZy54bWwKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jYm9vay00LjEuMi9jYXRhbG9nLnhtbAorCitkaWZmIC0tZ2l0IGEvZG9jYm9vay00LjAvY2F0YWxvZy54bWwgYi9kb2Nib29rLTQuMC9jYXRhbG9nLnhtbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL2RvY2Jvb2stNC4wL2NhdGFsb2cueG1sCitAQCAtMCwwICsxLDcyIEBACisrPD94bWwgdmVyc2lvbj0nMS4wJz8+CisrPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIiAKKysgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgorKworKzxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKysKKys8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSBYTUwgQ2F0YWxvZyBkYXRhIGZvciBEb2NCb29rIFhNTCBWNC4wLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8IS0tIEZpbGUgY2F0YWxvZy54bWwgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrCisrPCEtLSBQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IKKysgICAgIGNoYW5nZXMgdG8gdGhlIGRvY2Jvb2tAbGlzdHMub2FzaXMtb3Blbi5vcmcgbWFpbGluZyBsaXN0LiBGb3IgbW9yZQorKyAgICAgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnLy4KKysgIC0tPgorKworKzwhLS0gVGhpcyBpcyB0aGUgY2F0YWxvZyBkYXRhIGZpbGUgZm9yIERvY0Jvb2sgVjQuMC4gSXQgaXMgcHJvdmlkZWQgYXMKKysgICAgIGEgY29udmVuaWVuY2UgaW4gYnVpbGRpbmcgeW91ciBvd24gY2F0YWxvZyBmaWxlcy4gWW91IG5lZWQgbm90IHVzZQorKyAgICAgdGhlIGZpbGVuYW1lcyBsaXN0ZWQgaGVyZSwgYW5kIG5lZWQgbm90IHVzZSB0aGUgZmlsZW5hbWUgbWV0aG9kIG9mCisrICAgICBpZGVudGlmeWluZyBzdG9yYWdlIG9iamVjdHMgYXQgYWxsLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvcgorKyAgICAgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgRG9jQm9vayBEVEQuCisrICAgICBTZWUgWE1MIENhdGFsb2dzIGF0IGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvIGZvcgorKyAgICAgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gc3VwcGx5aW5nIGFuZCB1c2luZyBjYXRhbG9nIGRhdGEuCisrICAtLT4KKysKKys8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSBEb2NCb29rIGRyaXZlciBmaWxlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL05vcm1hbiBXYWxzaC8vRFREIERvY0JrIFhNTCBWNC4wLy9FTiIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisrPCEtLSBPdGhlciB3YXlzIHRvIHJlZmVyIHRvIERvY0Jvb2sgWE1MIHY0LjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzxwdWJsaWMgcHVibGljSWQ9Ii0vL05vcm1hbiBXYWxzaC8vRFREIERvY0Jvb2sgWE1MIFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKys8c3lzdGVtIHN5c3RlbUlkPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMC9kb2Nib29reC5kdGQiCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8IS0tIERvY0Jvb2sgbW9kdWxlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9FTlRJVElFUyBEb2NCb29rIFhNTCBOb3RhdGlvbnMgVjQuMC8vRU4iCisrICAgICAgICB1cmk9ImRibm90bngubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9FTlRJVElFUyBEb2NCb29rIFhNTCBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMC8vRU4iCisrICAgICAgICB1cmk9ImRiY2VudHgubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBJbmZvcm1hdGlvbiBQb29sIFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJkYnBvb2x4Lm1vZCIvPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL05vcm1hbiBXYWxzaC8vRUxFTUVOVFMgRG9jQm9vayBYTUwgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJkYmhpZXJ4Lm1vZCIvPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL05vcm1hbiBXYWxzaC8vRU5USVRJRVMgRG9jQm9vayBYTUwgQWRkaXRpb25hbCBHZW5lcmFsIEVudGl0aWVzIFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJkYmdlbmVudC5tb2QiLz4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9Ob3JtYW4gV2Fsc2gvL0RURCBDQUxTIFRhYmxlIE1vZGVsIFhNTCBWNC4wLy9FTiIKKysgICAgICAgIHVyaT0iY2Fsc3RibHguZHRkIi8+CisrCisrPCEtLSBVTk9GRklDSUFMIGNvbnZlcnNpb24gb2YgdGhlIGV4Y2hhbmdlIHRhYmxlIG1vZGVsIHRvIFhNTCwgYmFzZWQgb24gdGhlIE9BU0lTIEV4Y2hhbmdlIC0tPgorKzwhLS0gICAgVGFibGUgTW9kZWwgUFVCTElDICItLy9TR01MIE9wZW4vL0RURCBFeGNoYW5nZSBUYWJsZSBNb2RlbCAxOTk2MDQzMC8vRU4iICAgICAgICAgICAtLT4KKys8cHVibGljIHB1YmxpY0lkPSItLy9Ob3JtYWwgV2Fsc2gvL0V4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTYwNDMwIFhNTCBWNC4wLy9FTiIKKysgICAgICAgIHVyaT0ic29leHRibHguZHRkIi8+CisrCisrPCEtLSB0aGUgZm9sbG93aW5nIEZQSSBpcyBkZWNsYXJlZCBmb3IgdGhlIERURCBpbnNpZGUgdGhlIERURCwgYnV0IHdlJ2xsIC0tPgorKzwhLS0gdXNlIHRoZSB2ZXJzaW9uIGZyb20gdGhlIGxhdGVzdCBEb2NCb29rCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBYTUwgRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5OTAzMTUvL0VOIgorKyAgICAgICAgdXJpPSJzb2V4dGJseC5kdGQiLz4gLS0+CisrCisrPCEtLSBFbmQgb2YgY2F0YWxvZyBkYXRhIGZvciBEb2NCb29rIFhNTCBWNC4wIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKysKKys8L2NhdGFsb2c+CitkaWZmIC0tZ2l0IGEvZG9jYm9vay00LjEuMi9jYXRhbG9nLnhtbCBiL2RvY2Jvb2stNC4xLjIvY2F0YWxvZy54bWwKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9kb2Nib29rLTQuMS4yL2NhdGFsb2cueG1sCitAQCAtMCwwICsxLDY2IEBACisrPD94bWwgdmVyc2lvbj0nMS4wJz8+CisrPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIiAKKysgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgorKworKzxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKysKKys8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSBYTUwgQ2F0YWxvZyBkYXRhIGZvciBEb2NCb29rIFhNTCBWNC4xLjIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gRmlsZSBjYXRhbG9nLnhtbCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKysKKys8IS0tIFBsZWFzZSBkaXJlY3QgYWxsIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsIG9yIHN1Z2dlc3Rpb25zIGZvcgorKyAgICAgY2hhbmdlcyB0byB0aGUgZG9jYm9va0BsaXN0cy5vYXNpcy1vcGVuLm9yZyBtYWlsaW5nIGxpc3QuIEZvciBtb3JlCisrICAgICBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvLgorKyAgLS0+CisrCisrPCEtLSBUaGlzIGlzIHRoZSBjYXRhbG9nIGRhdGEgZmlsZSBmb3IgRG9jQm9vayBWNC4xLjIuIEl0IGlzIHByb3ZpZGVkIGFzCisrICAgICBhIGNvbnZlbmllbmNlIGluIGJ1aWxkaW5nIHlvdXIgb3duIGNhdGFsb2cgZmlsZXMuIFlvdSBuZWVkIG5vdCB1c2UKKysgICAgIHRoZSBmaWxlbmFtZXMgbGlzdGVkIGhlcmUsIGFuZCBuZWVkIG5vdCB1c2UgdGhlIGZpbGVuYW1lIG1ldGhvZCBvZgorKyAgICAgaWRlbnRpZnlpbmcgc3RvcmFnZSBvYmplY3RzIGF0IGFsbC4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKKysgICAgIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIERvY0Jvb2sgRFRELgorKyAgICAgU2VlIFhNTCBDYXRhbG9ncyBhdCBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5LyBmb3IKKysgICAgIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHN1cHBseWluZyBhbmQgdXNpbmcgY2F0YWxvZyBkYXRhLgorKyAgLS0+CisrCisrPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gRG9jQm9vayBkcml2ZXIgZmlsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworKzxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKys8c3lzdGVtIHN5c3RlbUlkPSJodHRwOi8vZG9jYm9vay5vcmcveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisrPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gRG9jQm9vayBtb2R1bGVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC4xLjIvL0VOIgorKyAgICAgICAgdXJpPSJjYWxzdGJseC5kdGQiLz4KKysKKysgIDwhLS0gYWxyZWFkeSBpbmNsdWRlZCBpbiBkb2Nib29rIDQuMgorKzxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgWE1MIEV4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTkwMzE1Ly9FTiIKKysgICAgICAgIHVyaT0ic29leHRibHguZHRkIi8+IC0tPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBJbmZvcm1hdGlvbiBQb29sIFY0LjEuMi8vRU4iCisrICAgICAgICB1cmk9ImRicG9vbHgubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjEuMi8vRU4iCisrICAgICAgICB1cmk9ImRiaGllcngubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQWRkaXRpb25hbCBHZW5lcmFsIEVudGl0aWVzIFY0LjEuMi8vRU4iCisrICAgICAgICB1cmk9ImRiZ2VuZW50Lm1vZCIvPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIE5vdGF0aW9ucyBWNC4xLjIvL0VOIgorKyAgICAgICAgdXJpPSJkYm5vdG54Lm1vZCIvPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC4xLjIvL0VOIgorKyAgICAgICAgdXJpPSJkYmNlbnR4Lm1vZCIvPgorKworKworKzwhLS0gRW5kIG9mIGNhdGFsb2cgZGF0YSBmb3IgRG9jQm9vayBYTUwgVjQuMS4yIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKysKKys8L2NhdGFsb2c+CitkaWZmIC0tZ2l0IGEvZG9jYm9vay00LjIvY2F0YWxvZy54bWwgYi9kb2Nib29rLTQuMi9jYXRhbG9nLnhtbAorLS0tIGEvZG9jYm9vay00LjIvY2F0YWxvZy54bWwKKysrKyBiL2RvY2Jvb2stNC4yL2NhdGFsb2cueG1sCitAQCAtMSw0ICsxLDcgQEAKKyA8P3htbCB2ZXJzaW9uPScxLjAnPz4KKys8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCisrICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKysKKyA8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+CisgCisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorQEAgLTI1LDYgKzI4LDEyIEBACisgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyAgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisgCisrPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKys8c3lzdGVtIHN5c3RlbUlkPSJodHRwOi8vZG9jYm9vay5vcmcveG1sLzQuMi9kb2Nib29reC5kdGQiCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyA8IS0tIERvY0Jvb2sgbW9kdWxlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgCitAQCAtNDksNjYgKzU4LDYgQEAKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMi8vRU4iCisgICAgICAgICB1cmk9ImRiY2VudHgubW9kIi8+CisgCistPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorLTwhLS0gSVNPIGVudGl0eSBzZXRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBEaWFjcml0aWNhbCBNYXJrcy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1kaWEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTnVtZXJpYyBhbmQgU3BlY2lhbCBHcmFwaGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLW51bS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBQdWJsaXNoaW5nLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLXB1Yi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHZW5lcmFsIFRlY2huaWNhbC8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby10ZWNoLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDEvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tbGF0MS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAyLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWxhdDIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgTGV0dGVycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ncmsxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE1vbm90b25pa28gR3JlZWsvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tZ3JrMi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBTeW1ib2xzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWdyazMuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWx0ZXJuYXRpdmUgR3JlZWsgU3ltYm9scy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ncms0LmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogQXJyb3cgUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc2EuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBCaW5hcnkgT3BlcmF0b3JzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc2IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBEZWxpbWl0ZXJzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc2MuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBOZWdhdGVkIFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNuLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogT3JkaW5hcnkvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zby5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEJveCBhbmQgTGluZSBEcmF3aW5nLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWJveC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBSdXNzaWFuIEN5cmlsbGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWN5cjEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTm9uLVJ1c3NpYW4gQ3lyaWxsaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tY3lyMi5lbnQiLz4KKy0KKyA8IS0tIEVuZCBvZiBjYXRhbG9nIGRhdGEgZm9yIERvY0Jvb2sgWE1MIFY0LjIgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIAorZGlmZiAtLWdpdCBhL2RvY2Jvb2stNC4zL2NhdGFsb2cueG1sIGIvZG9jYm9vay00LjMvY2F0YWxvZy54bWwKKy0tLSBhL2RvY2Jvb2stNC4zL2NhdGFsb2cueG1sCisrKysgYi9kb2Nib29rLTQuMy9jYXRhbG9nLnhtbAorQEAgLTEsNCArMSw3IEBACisgPD94bWwgdmVyc2lvbj0nMS4wJz8+CisrPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgorKyAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+CisrCisgPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgorIAorIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KK0BAIC0yNSwxMiArMjgsMjEgQEAKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjMvL0VOIgorICAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKyAKKys8c3lzdGVtIHN5c3RlbUlkPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMy9kb2Nib29reC5kdGQiCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworKzxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC4zL2RvY2Jvb2t4LmR0ZCIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIDwhLS0gRG9jQm9vayBtb2R1bGVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyAKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC4zLy9FTiIKKyAgICAgICAgIHVyaT0iY2Fsc3RibHguZHRkIi8+CisgCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEhUTUwgVGFibGVzIFY0LjMvL0VOIgorKyAgICAgICAgdXJpPSJodG1sdGJseC5tb2QiLz4KKysKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIFhNTCBFeGNoYW5nZSBUYWJsZSBNb2RlbCAxOTk5MDMxNS8vRU4iCisgICAgICAgICB1cmk9InNvZXh0Ymx4LmR0ZCIvPgorIAorQEAgLTQ5LDY2ICs2MSw2IEBACisgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjMvL0VOIgorICAgICAgICAgdXJpPSJkYmNlbnR4Lm1vZCIvPgorIAorLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKy08IS0tIElTTyBlbnRpdHkgc2V0cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgRGlhY3JpdGljYWwgTWFya3MvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tZGlhLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE51bWVyaWMgYW5kIFNwZWNpYWwgR3JhcGhpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1udW0uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUHVibGlzaGluZy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1wdWIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR2VuZXJhbCBUZWNobmljYWwvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tdGVjaC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAxLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWxhdDEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMi8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1sYXQyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIExldHRlcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tZ3JrMS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBNb25vdG9uaWtvIEdyZWVrLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWdyazIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgU3ltYm9scy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ncmszLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFsdGVybmF0aXZlIEdyZWVrIFN5bWJvbHMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tZ3JrNC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEFycm93IFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNhLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogQmluYXJ5IE9wZXJhdG9ycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNiLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogRGVsaW1pdGVycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNjLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogTmVnYXRlZCBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zbi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE9yZGluYXJ5Ly9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc28uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zci5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBCb3ggYW5kIExpbmUgRHJhd2luZy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ib3guZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUnVzc2lhbiBDeXJpbGxpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1jeXIxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE5vbi1SdXNzaWFuIEN5cmlsbGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWN5cjIuZW50Ii8+CistCisgPCEtLSBFbmQgb2YgY2F0YWxvZyBkYXRhIGZvciBEb2NCb29rIFhNTCBWNC4zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyAKK2RpZmYgLS1naXQgYS9kb2Nib29rLTQuNC9jYXRhbG9nLnhtbCBiL2RvY2Jvb2stNC40L2NhdGFsb2cueG1sCistLS0gYS9kb2Nib29rLTQuNC9jYXRhbG9nLnhtbAorKysrIGIvZG9jYm9vay00LjQvY2F0YWxvZy54bWwKK0BAIC0xLDQgKzEsNyBAQAorIDw/eG1sIHZlcnNpb249JzEuMCc/PgorKzwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKKysgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgorKworIDxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIiBwcmVmZXI9InB1YmxpYyI+CisgCisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorQEAgLTU4LDY2ICs2MSw2IEBACisgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjQvL0VOIgorICAgICAgICAgdXJpPSJkYmNlbnR4Lm1vZCIvPgorIAorLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKy08IS0tIElTTyBlbnRpdHkgc2V0cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgRGlhY3JpdGljYWwgTWFya3MvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29kaWEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTnVtZXJpYyBhbmQgU3BlY2lhbCBHcmFwaGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvbnVtLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIFB1Ymxpc2hpbmcvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29wdWIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR2VuZXJhbCBUZWNobmljYWwvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc290ZWNoLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDEvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29sYXQxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDIvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29sYXQyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIExldHRlcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29ncmsxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE1vbm90b25pa28gR3JlZWsvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29ncmsyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIFN5bWJvbHMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29ncmszLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFsdGVybmF0aXZlIEdyZWVrIFN5bWJvbHMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29ncms0LmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogQXJyb3cgUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zYS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEJpbmFyeSBPcGVyYXRvcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNiLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogRGVsaW1pdGVycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc2MuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBOZWdhdGVkIFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc24uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBPcmRpbmFyeS8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc28uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEJveCBhbmQgTGluZSBEcmF3aW5nLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYm94LmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIFJ1c3NpYW4gQ3lyaWxsaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29jeXIxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE5vbi1SdXNzaWFuIEN5cmlsbGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvY3lyMi5lbnQiLz4KKy0KKyA8IS0tIEVuZCBvZiBjYXRhbG9nIGRhdGEgZm9yIERvY0Jvb2sgWE1MIFY0LjQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIAorZGlmZiAtLWdpdCBhL2RvY2Jvb2stNC41L2NhdGFsb2cueG1sIGIvZG9jYm9vay00LjUvY2F0YWxvZy54bWwKKy0tLSBhL2RvY2Jvb2stNC41L2NhdGFsb2cueG1sCisrKysgYi9kb2Nib29rLTQuNS9jYXRhbG9nLnhtbAorQEAgLTEsNCArMSw3IEBACisgPD94bWwgdmVyc2lvbj0nMS4wJz8+CisrPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgorKyAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+CisrCisgPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciIHByZWZlcj0icHVibGljIj4KKyAKKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CitAQCAtNTgsNjYgKzYxLDYgQEAKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuNS8vRU4iCisgICAgICAgICB1cmk9ImRiY2VudHgubW9kIi8+CisgCistPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorLTwhLS0gSVNPIGVudGl0eSBzZXRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBEaWFjcml0aWNhbCBNYXJrcy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2RpYS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOdW1lcmljIGFuZCBTcGVjaWFsIEdyYXBoaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29udW0uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUHVibGlzaGluZy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb3B1Yi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHZW5lcmFsIFRlY2huaWNhbC8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb3RlY2guZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMS8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2xhdDEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMi8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2xhdDIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgTGV0dGVycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTW9ub3RvbmlrbyBHcmVlay8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgU3ltYm9scy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazMuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWx0ZXJuYXRpdmUgR3JlZWsgU3ltYm9scy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazQuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBBcnJvdyBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNhLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogQmluYXJ5IE9wZXJhdG9ycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc2IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBEZWxpbWl0ZXJzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zYy5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE5lZ2F0ZWQgUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zbi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE9yZGluYXJ5Ly9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zby5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc3IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQm94IGFuZCBMaW5lIERyYXdpbmcvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29ib3guZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUnVzc2lhbiBDeXJpbGxpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2N5cjEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTm9uLVJ1c3NpYW4gQ3lyaWxsaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29jeXIyLmVudCIvPgorLQorIDwhLS0gRW5kIG9mIGNhdGFsb2cgZGF0YSBmb3IgRG9jQm9vayBYTUwgVjQuNSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC54bWwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0L2RvY2Jvb2steG1sLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzFmNTU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC54bWwKQEAgLTAsMCArMSw2OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKzxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIE5vdGF0aW9ucyBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIERvY3VtZW50IEhpZXJhcmNoeSBWNC4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBIVE1MIFRhYmxlcyBWNC4zLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSW5mb3JtYXRpb24gUG9vbCBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIEluZm9ybWF0aW9uIFBvb2wgVjQuNC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuNC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSFRNTCBUYWJsZXMgVjQuNC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC4zLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIEluZm9ybWF0aW9uIFBvb2wgVjQuMy8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4zL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9FTlRJVElFUyBEb2NCb29rIFhNTCBOb3RhdGlvbnMgVjQuMC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBJbmZvcm1hdGlvbiBQb29sIFY0LjUvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgTm90YXRpb25zIFY0LjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIENBTFMgVGFibGUgTW9kZWwgVjQuMS4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgQ0FMUyBUYWJsZSBNb2RlbCBYTUwgVjQuMC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0VOVElUSUVTIERvY0Jvb2sgWE1MIENoYXJhY3RlciBFbnRpdGllcyBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRUxFTUVOVFMgRG9jQm9vayBYTUwgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjAvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjQvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgTm90YXRpb25zIFY0LjMvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIENBTFMgVGFibGUgTW9kZWwgVjQuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYWwgV2Fsc2gvL0V4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTYwNDMwIFhNTCBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC40L2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC4xL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgTm90YXRpb25zIFY0LjUvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgRG9jQmsgWE1MIFY0LjAvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjMvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjUvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjUvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEluZm9ybWF0aW9uIFBvb2wgVjQuMS4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgRG9jQm9vayBYTUwgVjQuMC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuMy8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4zL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5vcmcveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEhUTUwgVGFibGVzIFY0LjUvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjQvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC80LjUvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgTm90YXRpb25zIFY0LjEuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4xLjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIERvY3VtZW50IEhpZXJhcmNoeSBWNC4zLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjUvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9FTlRJVElFUyBEb2NCb29rIFhNTCBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuMC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIENBTFMgVGFibGUgTW9kZWwgVjQuNC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMC9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5vcmcveG1sLzQuMi9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMy8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4zL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIFhNTCBFeGNoYW5nZSBUYWJsZSBNb2RlbCAxOTk5MDMxNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuNC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuNC9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuMS4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4zLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC4zL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIEluZm9ybWF0aW9uIFBvb2wgVjQuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC41Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjUvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBEb2N1bWVudCBIaWVyYXJjaHkgVjQuMS4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjEuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4xLjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC9jYXRhbG9nLnhtbCIvPgorPC9jYXRhbG9nPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNF80LjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0XzQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTFiYzM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNF80LjUuYmIKQEAgLTAsMCArMSw2NCBAQAorU1VNTUFSWSA9ICJEb2N1bWVudCB0eXBlIGRlZmluaXRpb25zIGZvciB2ZXJpZmljYXRpb24gb2YgWE1MIGRhdGEgZmlsZXMiCitERVNDUklQVElPTiA9ICJEb2N1bWVudCB0eXBlIGRlZmluaXRpb25zIGZvciB2ZXJpZmljYXRpb24gb2YgWE1MIGRhdGEgXAorZmlsZXMgYWdhaW5zdCB0aGUgRG9jQm9vayBydWxlIHNldCwgaXQgc2hpcHMgd2l0aCB0aGUgbGF0ZXN0IERvY0Jvb2sgNC41IFwKK1hNTCBEVEQsIGFzIHdlbGwgYXMgYSBzZWxlY3RlZCBzZXQgb2YgbGVnYWN5IERURHMgZm9yIHVzZSB3aXRoIG9sZGVyIFwKK2RvY3VtZW50cywgaW5jbHVkaW5nIDQuMCwgNC4xLjIsIDQuMiwgNC4zIGFuZCA0LjQiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmRvY2Jvb2sub3JnL3htbC8iCisKK0xJQ0VOU0UgPSAiT0FTSVMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L0xJQ0VOU0UtT0FTSVM7bWQ1PWM2MDg5ODVkZDVmN2YyMTVlNjY5ZTc2MzlhMGIxZDJlIgorCisjIE5vdGU6IHRoZSB1cHN0cmVhbSBzb3VyY2VzIGFyZSBub3QgZGlzdHJpYnV0ZWQgd2l0aCBhIGxpY2Vuc2UgZmlsZS4KKyMgTElDRU5TRS1PQVNJUyBpcyBpbmNsdWRlZCBhcyBhICJwYXRjaCIgdG8gd29ya2Fyb3VuZCB0aGlzLiBXaGVuCisjIHVwZ3JhZGluZyB0aGlzIHJlY2lwZSwgcGxlYXNlIHZlcmlmeSB3aGV0aGVyIHRoaXMgaXMgc3RpbGwgbmVlZGVkLgorU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vZC9kb2Nib29rLXhtbC9kb2Nib29rLXhtbF8ke1BWfS5vcmlnLnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLU9BU0lTIFwKKyAgICAgICAgICAgZmlsZTovL2RvY2Jvb2steG1sLXVwZGF0ZS1jYXRhbG9nLnhtbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kb2Nib29rLXhtbC54bWwgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDg3YjRkNDRlMTVjZmZiMWY0MDQ4YWYyM2Y5ODIwOGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjBmOGVkY2Y2OTdmNTMxOGU2M2RkOThjOWE5MzFmM2ZlZTE2N2FmMDgwNWJhNDQxZGIzNzJlMGYxN2IyYTQ0ZiIKKworUz0iJHtXT1JLRElSfS9kb2Nib29rLXhtbC00LjUuYzMxNDI0IgorCitpbmhlcml0IGFsbGFyY2gKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTU1RBVEVQT1NUSU5TVEZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGRvY2Jvb2tfeG1sX2R0ZF9zc3RhdGVfcG9zdGluc3QiCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1NfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZG9jYm9va194bWxfZHRkX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworZG9fY29uZmlncmUgKCl7CisgICAgOgorfQorCitkb19jb21waWxlICgpeworICAgIDoKK30KKworZG9faW5zdGFsbCAoKSB7CisgICAgIyBSZWZlciBkZWJpYW4gaHR0cHM6Ly9wYWNrYWdlcy5kZWJpYW4ub3JnL3NpZC9hbGwvZG9jYm9vay14bWwvZmlsZWxpc3QKKyAgICBmb3IgRFREVkVSU0lPTiBpbiA0LjAgNC4xLjIgNC4yIDQuMyA0LjQgNC41OyBkbworICAgICAgICBpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHtkYXRhZGlyfS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLyR7RFREVkVSU0lPTn0KKyAgICAgICAgY3AgLXYgLVIgZG9jYm9vay0ke0RURFZFUlNJT059LyogJHtEfSR7ZGF0YWRpcn0veG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC8ke0RURFZFUlNJT059CisgICAgZG9uZQorCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS94bWwvCisgICAgaW5zdGFsbCAtbSA3NTUgICR7V09SS0RJUn0vZG9jYm9vay14bWwueG1sICR7RH0ke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhtbC54bWwKK30KKworZG9jYm9va194bWxfZHRkX3NzdGF0ZV9wb3N0aW5zdCAoKSB7CisgICAgaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorICAgIHRoZW4KKyAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKyAgICAgICAgIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIGZyb20gc3N0YXRlIGNhY2hlLgorICAgICAgICBzZWQgLWkgLWUgInN8ZmlsZTovLy4qL3Vzci9zaGFyZS94bWx8ZmlsZTovLyR7ZGF0YWRpcn0veG1sfGciICR7U1lTUk9PVF9ERVNURElSfSR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steG1sLnhtbAorICAgIGZpCit9CisKK2RvY2Jvb2tfeG1sX2R0ZF9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworICAgICMgVXBkYXRlIHRoZSBoYXJkY29kZSBkaXIgaW4gZG9jYm9vay14bWwueG1sCisgICAgc2VkIC1pIC1lICJzfGZpbGU6Ly8vdXNyL3NoYXJlL3htbHxmaWxlOi8vJHtkYXRhZGlyfS94bWx8ZyIgJHtTWVNST09UX0RFU1RESVJ9JHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14bWwueG1sCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7ZGF0YWRpcn0vKiAke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhtbC54bWwiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uby1iYXNoaXNtLWluLWRvY2Jvb2steHNsLXVwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHMvZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbm8tYmFzaGlzbS1pbi1kb2Nib29rLXhzbC11cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTU5YTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHMvZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbm8tYmFzaGlzbS1pbi1kb2Nib29rLXhzbC11cC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitkb2Nib29rLXhzbC1zdHlsZXNoZWV0czogbm8gYmFzaGlzbSBpbiBkb2Nib29rLXhzbC11cGRhdGUKKworVGhlIGNoZWNrYmFzaGlzbXMgc2hvd3MgdGhlcmUgaXMgbm8gYmFzaGlzbSwgc28gdXNlIC9iaW4vc2guCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRvb2xzL2Jpbi9kb2Nib29rLXhzbC11cGRhdGUgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90b29scy9iaW4vZG9jYm9vay14c2wtdXBkYXRlIGIvdG9vbHMvYmluL2RvY2Jvb2steHNsLXVwZGF0ZQoraW5kZXggYWJhMDAxNi4uY2M3M2FhMiAxMDA3NTUKKy0tLSBhL3Rvb2xzL2Jpbi9kb2Nib29rLXhzbC11cGRhdGUKKysrKyBiL3Rvb2xzL2Jpbi9kb2Nib29rLXhzbC11cGRhdGUKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgIyB2aW06IG51bWJlcgorIAorICMgZG9jYm9vay14c2wtdXBkYXRlIC0gVXBkYXRlIGVudmlyb25tZW50IHRvIGxhdGVzdCBkb2Nib29rLXhzbCBzbmFwc2hvdAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC54bWwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhNTc2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzL2RvY2Jvb2steHNsLnhtbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIiAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Cis8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Cis8ZGVsZWdhdGVVUkkgdXJpU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy0xLjc4LjEvY2F0YWxvZy54bWwiLz4KKzxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtMS43OC4xL2NhdGFsb2cueG1sIi8+Cis8L2NhdGFsb2c+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0c18xLjc4LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0c18xLjc4LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExYmRjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzXzEuNzguMS5iYgpAQCAtMCwwICsxLDY5IEBACitTVU1NQVJZID0gIlhTTCBzdHlsZXNoZWV0cyBmb3IgcHJvY2Vzc2luZyBEb2NCb29rIFhNTCB0byB2YXJpb3VzIG91dHB1dCBmb3JtYXRzIgorSE9NRVBBR0UgPSAiaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0IgorTElDRU5TRSA9ICJYU0wiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmVlZWVkNDNkNDk4YzIyYTgzNTM4MjUzMzM1NjQ2MiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZG9jYm9vay9kb2Nib29rLXhzbC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2RvY2Jvb2steHNsLnhtbCBcCisgICAgICAgICAgIGZpbGU6Ly9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uby1iYXNoaXNtLWluLWRvY2Jvb2steHNsLXVwLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjZkZDBmODkxMzFjYzM1YmY0ZjJlZDEwNWExYzE3NzcxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM5OGY3Mjk2YWI1YzhjY2QyZTBiYzA3NjM0OTc2YTM3ZjUwODQ3ZGYyZDhhNTliZGIxZTE1NzY2NDcwMGI0NjciCisKK1MgPSAiJHtXT1JLRElSfS9kb2Nib29rLXhzbC0ke1BWfSIKKworaW5oZXJpdCBhbGxhcmNoCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1NUQVRFUE9TVElOU1RGVU5DU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBkb2Nib29rX3hzbF9zdHlsZXNoZWV0c19zc3RhdGVfcG9zdGluc3QiCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1NfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZG9jYm9va194c2xfc3R5bGVzaGVldHNfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitkb19jb25maWd1cmUgKCl7CisJOgorfQorCitkb19jb21waWxlICgpeworCToKK30KKworZG9faW5zdGFsbCAoKSB7CisJIyBSZWZlciB0byBodHRwOi8vd3d3LmxpbnV4ZnJvbXNjcmF0Y2gub3JnL2JsZnMvdmlldy9zdGFibGUvcHN0L2RvY2Jvb2steHNsLmh0bWwKKwkjIGZvciBkZXRhaWxzLgorCWluc3RhbGwgLXYgLW03NTUgLWQgJHtEfSR7ZGF0YWRpcn0veG1sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLTEuNzguMQorCisJY3AgLXYgLVIgVkVSU0lPTiBjb21tb24gZWNsaXBzZSBlcHViIGV4dGVuc2lvbnMgZm8gaGlnaGxpZ2h0aW5nIGh0bWwgXAorCQlodG1saGVscCBpbWFnZXMgamF2YWhlbHAgbGliIG1hbnBhZ2VzIHBhcmFtcyBwcm9maWxpbmcgXAorCQlyb3VuZHRyaXAgc2xpZGVzIHRlbXBsYXRlIHRlc3RzIHRvb2xzIHdlYmhlbHAgd2Vic2l0ZSBcCisJCXhodG1sIHhodG1sLTFfMSBjYXRhbG9nLnhtbCBcCisJJHtEfSR7ZGF0YWRpcn0veG1sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLTEuNzguMQorCisJbG4gLXMgVkVSU0lPTiAke0R9LyR7ZGF0YWRpcn0veG1sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLTEuNzguMS9WRVJTSU9OLnhzbAorCisJaW5zdGFsbCAtdiAtbTY0NCAtRCBSRUFETUUgXAorCQkke0R9JHtkYXRhZGlyfS9kb2MvZG9jYm9vay14c2wtMS43OC4xL1JFQURNRS50eHQKKwlpbnN0YWxsIC12IC1tNjQ0ICAgIFJFTEVBU0UtTk9URVMqIE5FV1MqIFwKKwkJJHtEfSR7ZGF0YWRpcn0vZG9jL2RvY2Jvb2steHNsLTEuNzguMQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS94bWwvCisJaW5zdGFsbCAtbSA3NTUgICR7V09SS0RJUn0vZG9jYm9vay14c2wueG1sICR7RH0ke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhzbC54bWwKKworfQorCitkb2Nib29rX3hzbF9zdHlsZXNoZWV0c19zc3RhdGVfcG9zdGluc3QgKCkgeworICAgIGlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKyAgICB0aGVuCisgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisgICAgICAgICMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKyAgICAgICAgc2VkIC1pIC1lICJzfGZpbGU6Ly8uKi91c3Ivc2hhcmUveG1sfGZpbGU6Ly8ke2RhdGFkaXJ9L3htbHxnIiAke1NZU1JPT1RfREVTVERJUn0ke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhzbC54bWwKKyAgICBmaQorfQorCitkb2Nib29rX3hzbF9zdHlsZXNoZWV0c19zeXNyb290X3ByZXByb2Nlc3MgKCkgeworICAgICMgVXBkYXRlIHRoZSBoYXJkY29kZSBkaXIgaW4gZG9jYm9vay14bWwueG1sCisgICAgc2VkIC1pIC1lICJzfGZpbGU6Ly8vdXNyL3NoYXJlL3htbHxmaWxlOi8vJHtkYXRhZGlyfS94bWx8ZyIgJHtTWVNST09UX0RFU1RESVJ9JHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14c2wueG1sCit9CisKK1JERVBFTkRTXyR7UE59ICs9ICJwZXJsIgorRklMRVNfJHtQTn0gPSAiJHtkYXRhZGlyfS94bWwvKiAke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhzbC54bWwiCitGSUxFU18ke1BOfS1kb2MgPSAiJHtkYXRhZGlyfS9kb2MvKiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy8wMDAxLUluY2x1ZGUtZmNudGwuaC1mb3ItZ2V0dGluZy1sb2ZmX3QtZGVmaW5pdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy8wMDAxLUluY2x1ZGUtZmNudGwuaC1mb3ItZ2V0dGluZy1sb2ZmX3QtZGVmaW5pdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmY1YjdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzLzAwMDEtSW5jbHVkZS1mY250bC5oLWZvci1nZXR0aW5nLWxvZmZfdC1kZWZpbml0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gYjdjNDJjNmE5ODI5YmVhOTExYjIyMjAxZWRkN2RmMmE5YmVjMWExNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjUyOjM0IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIEluY2x1ZGUgZmNudGwuaCBmb3IgZ2V0dGluZyBsb2ZmX3QgZGVmaW5pdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGRvc2ZzY2svZG9zZnNjay5oIHwgMiArKworIGRvc2ZzY2svbGZuLmMgICAgIHwgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rvc2ZzY2svZG9zZnNjay5oIGIvZG9zZnNjay9kb3Nmc2NrLmgKK2luZGV4IGQ5MzE0YjEuLjIwNzZkNWYgMTAwNjQ0CistLS0gYS9kb3Nmc2NrL2Rvc2ZzY2suaAorKysrIGIvZG9zZnNjay9kb3Nmc2NrLmgKK0BAIC01MCw2ICs1MCw4IEBACisgI2RlZmluZSBDVF9MRV9MKHYpICh2KQorICNlbmRpZiAvKiBfX0JJR19FTkRJQU4gKi8KKyAKKysjaW5jbHVkZSA8ZmNudGwuaD4KKysKKyAjZGVmaW5lIFZGQVRfTE5fQVRUUiAoQVRUUl9STyB8IEFUVFJfSElEREVOIHwgQVRUUl9TWVMgfCBBVFRSX1ZPTFVNRSkKKyAKKyAvKiArK3JvbWFuOiBVc2Ugb3duIGRlZmluaXRpb24gb2YgYm9vdCBzZWN0b3Igc3RydWN0dXJlIC0tIHRoZSBrZXJuZWwgaGVhZGVycycKK2RpZmYgLS1naXQgYS9kb3Nmc2NrL2xmbi5jIGIvZG9zZnNjay9sZm4uYworaW5kZXggOWIyY2ZjMy4uYmIwNGZkYSAxMDA2NDQKKy0tLSBhL2Rvc2ZzY2svbGZuLmMKKysrKyBiL2Rvc2ZzY2svbGZuLmMKK0BAIC03LDYgKzcsNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8bGltaXRzLmg+CisgI2luY2x1ZGUgPHRpbWUuaD4KKysjaW5jbHVkZSA8ZmNudGwuaD4KKyAKKyAjaW5jbHVkZSAiY29tbW9uLmgiCisgI2luY2x1ZGUgImlvLmgiCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9hbGlnbm1lbnRfaGFjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9hbGlnbm1lbnRfaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDZiMmRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2FsaWdubWVudF9oYWNrLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK1RoZSBwcm9ibGVtIGlzIHRoYXQgdW5zaWduZWQgY2hhclsyXSBpcworZ3VyYW50ZWVkIHRvIGJlIDhCaXQgYWxpZ25lZCBvbiBhcm0KK2J1dCB1bnNpZ25lZCBzaG9ydCBpcy9uZWVkcyB0byBiZSAxNmJpdCBhbGlnbmVkCit0aGUgdW5pb24geyB1bnNpZ25lZCBzaG9ydDsgdW5zaWduZWQgY2hhclsyXSB9IHRyaWNrIAorZGlkbid0IHdvcmsgc28gbm8gd2UgdXNlIHRoZSBhbHBoYSBoYWNrLgorCittZW1jcHkgaW50byBhbiAxNmJpdCBhbGlnbmVkCisKKyAgICAtemVja2UKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCitXZSdyZSB0cmFja2luZyBhbiBvbGQgcmVsZWFzZSBvZiBkb3Nmc3Rvb2xzIGR1ZSB0byBsaWNlbnNpbmcgaXNzdWVzLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIGRvc2ZzdG9vbHMvZG9zZnNjay9ib290LmMub3JpZwkyMDAzLTA1LTE1IDE5OjMyOjIzLjAwMDAwMDAwMCArMDIwMAorKysrIGRvc2ZzdG9vbHMvZG9zZnNjay9ib290LmMJMjAwMy0wNi0xMyAxNzo0NDoyNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNiwxNyArMzYsMTUgQEAKKyAgICAgeyAweGZmLCAiNS4yNVwiIDMyMGsgZmxvcHB5IDJzLzQwdHIvOHNlYyIgfSwKKyB9OworIAorLSNpZiBkZWZpbmVkIF9fYWxwaGEgfHwgZGVmaW5lZCBfX2lhNjRfXyB8fCBkZWZpbmVkIF9fczM5MHhfXyB8fCBkZWZpbmVkIF9feDg2XzY0X18gfHwgZGVmaW5lZCBfX3BwYzY0X18KKysKKyAvKiBVbmFsaWduZWQgZmllbGRzIG11c3QgZmlyc3QgYmUgY29waWVkIGJ5dGUtd2lzZSAqLworICNkZWZpbmUgR0VUX1VOQUxJR05FRF9XKGYpCQkJXAorICAgICAoewkJCQkJCVwKKyAJdW5zaWduZWQgc2hvcnQgX192OwkJCVwKKyAJbWVtY3B5KCAmX192LCAmZiwgc2l6ZW9mKF9fdikgKTsJXAorLQlDRl9MRV9XKCAqKHVuc2lnbmVkIHNob3J0ICopJmYgKTsJXAorKwlDRl9MRV9XKCAqKHVuc2lnbmVkIHNob3J0ICopJl9fdiApOwlcCisgICAgIH0pCistI2Vsc2UKKy0jZGVmaW5lIEdFVF9VTkFMSUdORURfVyhmKSBDRl9MRV9XKCAqKHVuc2lnbmVkIHNob3J0ICopJmYgKQorLSNlbmRpZgorKworIAorIAorIHN0YXRpYyBjaGFyICpnZXRfbWVkaWFfZGVzY3IoIHVuc2lnbmVkIGNoYXIgbWVkaWEgKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMtbXNkb3NfZnMtdHlwZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy1tc2Rvc19mcy10eXBlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWFiZDFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMtbXNkb3NfZnMtdHlwZXMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRW5zdXJlIHRoZSBfX3M4IHR5cGUgaXMgcHJvcGVybHkgZGVmaW5lZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCitXZSdyZSB0cmFja2luZyBhbiBvbGQgcmVsZWFzZSBvZiBkb3Nmc3Rvb2xzIGR1ZSB0byBsaWNlbnNpbmcgaXNzdWVzLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIGRvc2ZzdG9vbHMtMi4xMC9kb3Nmc2NrL2Rvc2ZzY2suaC5vcmcJMjAwNi0wMi0yMSAwODozNjoxNC4wMDAwMDAwMDAgLTA3MDAKKysrKyBkb3Nmc3Rvb2xzLTIuMTAvZG9zZnNjay9kb3Nmc2NrLmgJMjAwNi0wMi0yMSAwODo0MDoxMi4wMDAwMDAwMDAgLTA3MDAKK0BAIC0yMiw2ICsyMiwxNCBAQAorICAgICAgICAjdW5kZWYgX19LRVJORUxfXworICNlbmRpZgorIAorKyNpZm5kZWYgX19zOAorKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKysjZW5kaWYKKysKKysjaWZuZGVmIF9fQVNNX1NUVUJfQllURU9SREVSX0hfXworKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgPGxpbnV4L21zZG9zX2ZzLmg+CisgCisgLyogMi4xIGtlcm5lbHMgdXNlIGxlMTZfdG9fY3B1KCkgdHlwZSBmdW5jdGlvbnMgZm9yIENGX0xFX1cgJiBDby4sIGJ1dCBkb24ndAorLS0tIGRvc2ZzdG9vbHMtMi4xMC9kb3Nmc2NrL2ZpbGUuYy5vcmcJMjAwNi0wMi0yMSAwODozNzozNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBkb3Nmc3Rvb2xzLTIuMTAvZG9zZnNjay9maWxlLmMJMjAwNi0wMi0yMSAwODozNzo0Ny4wMDAwMDAwMDAgLTA3MDAKK0BAIC0yMyw2ICsyMywxMCBAQAorICAgICAgICAjdW5kZWYgX19LRVJORUxfXworICNlbmRpZgorIAorKyNpZm5kZWYgX19zOAorKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSA8bGludXgvbXNkb3NfZnMuaD4KKyAKKyAjaW5jbHVkZSAiY29tbW9uLmgiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvZml4X3BvcHVsYXRlZF9kb3Nmc19jcmVhdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9maXhfcG9wdWxhdGVkX2Rvc2ZzX2NyZWF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkN2Y3MzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvZml4X3BvcHVsYXRlZF9kb3Nmc19jcmVhdGlvbi5wYXRjaApAQCAtMCwwICsxLDQ4OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1RoaXMgcGF0Y2ggZml4ZXMgcG9wdWxhdGVkIGRvc2ZzIGltYWdlIGNyZWF0aW9uIHdpdGggZGlyZWN0b3J5IAorc3RydWN0dXJlcy4gRWFybGllciBpdCB3YXMgY2F1c2luZyBzZWdmYXVsdDsgYW5kIG9ubHkgaW1hZ2UgCitwb3B1bGF0aW9uIHdpdGggbm8gc3ViZGlyZWN0b3JpZXMgd2FzIHdvcmtpbmcuCisKK0lzc3VlcyBmaXhlZDoKKzEuIChkaXItPmNvdW50ID09IGRpci0+ZW50cmllcykgY2hlY2sgd2FzIG9ubHkgbmVlZGVkIGZvciByb290IAorICAgZGlyZWN0b3J5IGVudHJpZXMuIEFuZCB0aGlzIGNoZWNrIGlzIHdyb25nIGZvciBub24tcm9vdCAKKyAgIGRpcmVjdG9yaWVzLgorMi4gRm9yIGVhY2ggZGlyIGVudHJ5IDIgZGlyLT50YWJsZSBlbnRyaWVzIHdlcmUgbmVlZGVkLCBvbmUgZm9yIAorICAgdGhlIGZpbGUvZGlyIGFuZCAybmQgZm9yIGxvbmcgZmlsZSBuYW1lIHN1cHBvcnQuIEVhcmxpZXIgbG9uZworICAgbmFtZSBzdXBwb3J0IHdhcyBhZGRlZCBmb3IgZmlsZW5hbWVzIGJ1dCB0aGUgMm5kIGVudHJ5IAorICAgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24gJiBjb3VudGluZyB3YXMgbWlzc2VkLgorMy4gVGhlIG1lbW9yeSBjbGVhcmluZyB3YXMgbWlzc2VkIGF0IHRoZSBjb2RlIHBhdGggYWZ0ZXIgZGlyLT50YWJsZSAKKyAgIG1lbXJveSBhbGxvY2F0aW9uLgorNC4gQWRkIGVudHJpZXMgZm9yIC4gJiAuLiBkaXJlY3RvcmllcyBpbiBhbGwgbm9uLXJvb3QgZGlyZWN0b3JpZXMuCis1LiBUaGUgLiBkaXJlY3RvcnkgcG9pbnRzIHRvIHRoZSBjb3JyZWN0IGVudHJ5IGluIGZhdCBub3cuCis2LiBBbGwgZGlyZWN0b3JpeSBlbnRyaWVzJyBzaXplIHdhcyBub3QgemVybyBhcyByZXF1aXJlZCBmb3IgZG9zZnNjaywKKyAgIE5vdyBhbGwgZGlyZWN0b3J5IGVudHJpZXMnIHNpemUgaXMgemVyby4KKworRW5oYW5jZW1lbnRzOgorMS4gQWRkZWQgc3VwcG9ydCBmb3IgbG9uZyBuYW1lcyBmb3IgZGlyZWN0b3J5IG5hbWVzLiBUaGlzIGlzIHNhbWUKKyAgIGFzIHRoZSBleGlzdGluZyBsb25nIG5hbWUgc3VwcG9ydCBmb3IgZmlsZW5hbWVzLgorMi4gQWRkZWQgZXJyb3IgbWVzc2FnZXMgZm9yIHByZXZpb3VzbHkgc2lsZW50IG1lbW9yeSBhbGxvY2F0aW9uIGFuZCAKKyAgIG90aGVyIGVycm9ycy4KKzMuIC1kIG9wdGlvbnMgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgd2l0aCBmYXQzMiwgc28gbm93IHRocm93aW5nIAorICAgYW4gZXJyb3IgZm9yIHRoYXQuCis0LiBVc2UgcHJlZGVmaW5lZCBzdHJ1Y3R1cmVzIGZyb20ga2VybmVsJ3MgbXNkb3NfZnMuaCBmaWxlLCByYXRoZXIgCisgICB0aGFuIGRlZmluaW5nIGFnYWluIGhlcmUuIEFuZCBhY2NvcmRpbmdseSBjaGFuZ2UgdGhlIG5hbWVzICYgdXNlCisgICBvZiBzdHJ1Y3R1cmUgdmFyaWFibGVzLgorCitPdXRzdGFuZGluZyBJc3N1ZXM6CisxLiBUaGUgLi4gZGlyZWN0b3J5IGVudHJ5IGRvIG5vdCBwb2ludCB0byB0aGUgcGFyZW50IG9mIGN1cnJlbnQKKyAgIGRpcmVjdG9yeS4gVGhpcyBpc3N1ZSBjYW4gYmUgZml4ZWQgYnkgcnVubmluZyBkb3Nmc2NrIC1hIGFmdGVyCisgICBpbWFnZSBjcmVhdGlvbi4KKzIuIEZvciBmaWxlcyB0aGUgZmlsZXNpemUgaXMgY29ycmVjdCwgYnV0IHRoZSBjbHVzdGVycyBzaXplIGlzIG1vcmUgCisgICB0aGFuIGl0IG5lZWRzIHRvIGJlLCB0aGlzIGFsc28gY2FuIGJlIGZpeGVkIGJ5IHJ1bm5pbmcgZG9zZnNjayAtYQorICAgYWZ0ZXIgaW1hZ2UgY3JlYXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IAorMjAxMS8xMi8xMworCisKK0luZGV4OiBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9ta2Rvc2ZzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkb3Nmc3Rvb2xzLTIuMTEub3JpZy9ta2Rvc2ZzL21rZG9zZnMuYworKysrIGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYworQEAgLTIxLDcgKzIxLDE3IEBACisgICAgSnVuZSAyMDA0IC0gSm9yZGFuIENyb3VzZSAoaW5mby5saW51eEBhbWQuY29tKQorICAgIEFkZGVkIC1kIDxkaXJlY3Rvcnk+IHN1cHBvcnQgdG8gcG9wdWxhdGUgdGhlIGltYWdlCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBBbGwgUmlnaHRzIFJlc2VydmVkCistICAgCisrCisrICAgMjAxMS0xMi0xMzogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKysgICBFbmhhbmNlZCB0aGUgLWQgPGRpcmVjdG9yeT4gc3VwcG9ydCBmb3IgcG9wdWxhdGlvbiBvZiBpbWFnZSB3aGlsZQorKyAgIGNyZWF0aW9uLiBFYXJsaWVyIHN1YmRpcmVjdG9yZXMgc3VwcG9ydCB3YXMgYnJva2VuLCBvbmx5IGZpbGVzIGluCisrICAgdGhlIHJvb3RkaXIgd2VyZSBzdXBwb3J0ZWQuIE5vdyBkaXJlY3RvcnkgaGlyYXJjaHkgaXMgc3VwcG9ydGVkLgorKyAgIEFsc28gYWRkZWQgbG9uZyBmaWxlbmFtZSBzdXBwb3J0IHRvIGRpcmVjdG9yeSBuYW1lcy4KKysgICAgIFRoZSAtZCA8ZGlyZWN0b3J5PiBvcHRpb24gKGltYWdlIHBvcHVsYXRpb24gd2hpbGUgY3JlYXRpb24pCisrICAgaXMgYnJva2VuIHdpdGggZmF0MzIuCisrICAgQ29weXJpZ2h0IChDKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbiwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorKworKworICAgIEZpeGVzL2FkZGl0aW9ucyBNYXkgMTk5OCBieSBSb21hbiBIb2RlaworICAgIDxSb21hbi5Ib2Rla0BpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT46CisgICAgLSBBdGFyaSBmb3JtYXQgc3VwcG9ydAorQEAgLTg2LDIzICs5NiwyMyBAQAorICMgdW5kZWYgX19LRVJORUxfXworICNlbmRpZgorIAorLSNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCistCisrI2lmbmRlZiBfX0FTTV9TVFVCX0JZVEVPUkRFUl9IX18KKyAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorLSNpZmRlZiBfX2xlMTZfdG9fY3B1CistLyogKytyb21hbjogMi4xIGtlcm5lbCBoZWFkZXJzIGRlZmluZSB0aGVzZSBmdW5jdGlvbiwgdGhleSdyZSBwcm9iYWJseSBtb3JlCistICogZWZmaWNpZW50IHRoZW4gY29kaW5nIHRoZSBzd2FwcyBtYWNoaW5lLWluZGVwZW5kZW50bHkuICovCistI2RlZmluZSBDRl9MRV9XCV9fbGUxNl90b19jcHUKKy0jZGVmaW5lIENGX0xFX0wJX19sZTMyX3RvX2NwdQorLSNkZWZpbmUgQ1RfTEVfVwlfX2NwdV90b19sZTE2CistI2RlZmluZSBDVF9MRV9MCV9fY3B1X3RvX2xlMzIKKy0jZWxzZQorLSNkZWZpbmUgQ0ZfTEVfVyh2KSAoKCgodikgJiAweGZmKSA8PCA4KSB8ICgoKHYpID4+IDgpICYgMHhmZikpCistI2RlZmluZSBDRl9MRV9MKHYpICgoKHVuc2lnbmVkKSh2KT4+MjQpIHwgKCgodW5zaWduZWQpKHYpPj44KSYweGZmMDApIHwgXAorLSAgICAgICAgICAgICAgICgoKHVuc2lnbmVkKSh2KTw8OCkmMHhmZjAwMDApIHwgKCh1bnNpZ25lZCkodik8PDI0KSkKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8bGludXgvbXNkb3NfZnMuaD4KKysKKysjdW5kZWYgQ0ZfTEVfVworKyN1bmRlZiBDRl9MRV9MCisrI3VuZGVmIENUX0xFX1cKKysjdW5kZWYgQ1RfTEVfTAorKworKyNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisrI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CisrI2RlZmluZSBDRl9MRV9XKHYpIGJzd2FwXzE2KHYpCisrI2RlZmluZSBDRl9MRV9MKHYpIGJzd2FwXzMyKHYpCisgI2RlZmluZSBDVF9MRV9XKHYpIENGX0xFX1codikKKyAjZGVmaW5lIENUX0xFX0wodikgQ0ZfTEVfTCh2KQorLSNlbmRpZiAvKiBkZWZpbmVkKF9fbGUxNl90b19jcHUpICovCisgICAgIAorICNlbHNlCisgCitAQCAtMjUzLDMzICsyNjMsNiBAQCBzdHJ1Y3QgZmF0MzJfZnNpbmZvIHsKKyAgIF9fdTMyCQlyZXNlcnZlZDJbNF07CisgfTsKKyAKKy0vKiBUaGlzIHN0b3JlcyB1cCB0byAxMyBjaGFycyBvZiB0aGUgbmFtZSAqLworLQorLXN0cnVjdCBtc2Rvc19kaXJfc2xvdCB7CistICAgICAgICBfX3U4ICAgIGlkOyAgICAgICAgICAgICAvKiBzZXF1ZW5jZSBudW1iZXIgZm9yIHNsb3QgKi8KKy0gICAgICAgIF9fdTggICAgbmFtZTBfNFsxMF07ICAgIC8qIGZpcnN0IDUgY2hhcmFjdGVycyBpbiBuYW1lICovCistICAgICAgICBfX3U4ICAgIGF0dHI7ICAgICAgICAgICAvKiBhdHRyaWJ1dGUgYnl0ZSAqLworLSAgICAgICAgX191OCAgICByZXNlcnZlZDsgICAgICAgLyogYWx3YXlzIDAgKi8KKy0gICAgICAgIF9fdTggICAgYWxpYXNfY2hlY2tzdW07IC8qIGNoZWNrc3VtIGZvciA4LjMgYWxpYXMgKi8KKy0gICAgICAgIF9fdTggICAgbmFtZTVfMTBbMTJdOyAgIC8qIDYgbW9yZSBjaGFyYWN0ZXJzIGluIG5hbWUgKi8KKy0gICAgICAgIF9fdTE2ICAgc3RhcnQ7ICAgICAgICAgIC8qIHN0YXJ0aW5nIGNsdXN0ZXIgbnVtYmVyLCAwIGluIGxvbmcgc2xvdHMgKi8KKy0gICAgICAgIF9fdTggICAgbmFtZTExXzEyWzRdOyAgIC8qIGxhc3QgMiBjaGFyYWN0ZXJzIGluIG5hbWUgKi8KKy19OworLQorLXN0cnVjdCBtc2Rvc19kaXJfZW50cnkKKy0gIHsKKy0gICAgY2hhcgluYW1lWzhdLCBleHRbM107CS8qIG5hbWUgYW5kIGV4dGVuc2lvbiAqLworLSAgICBfX3U4ICAgICAgICBhdHRyOwkJCS8qIGF0dHJpYnV0ZSBiaXRzICovCistICAgIF9fdTgJbGNhc2U7CQkJLyogQ2FzZSBmb3IgYmFzZSBhbmQgZXh0ZW5zaW9uICovCistICAgIF9fdTgJY3RpbWVfbXM7CQkvKiBDcmVhdGlvbiB0aW1lLCBtaWxsaXNlY29uZHMgKi8KKy0gICAgX191MTYJY3RpbWU7CQkJLyogQ3JlYXRpb24gdGltZSAqLworLSAgICBfX3UxNgljZGF0ZTsJCQkvKiBDcmVhdGlvbiBkYXRlICovCistICAgIF9fdTE2CWFkYXRlOwkJCS8qIExhc3QgYWNjZXNzIGRhdGUgKi8KKy0gICAgX191MTYJc3RhcnRoaTsJCS8qIGhpZ2ggMTYgYml0cyBvZiBmaXJzdCBjbC4gKEZBVDMyKSAqLworLSAgICBfX3UxNgl0aW1lLCBkYXRlLCBzdGFydDsJLyogdGltZSwgZGF0ZSBhbmQgZmlyc3QgY2x1c3RlciAqLworLSAgICBfX3UzMglzaXplOwkJCS8qIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpICovCistICB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKy0KKyAvKiBUaGUgImJvb3QgY29kZSIgd2UgcHV0IGludG8gdGhlIGZpbGVzeXN0ZW0uLi4gaXQgd3JpdGVzIGEgbWVzc2FnZSBhbmQKKyAgICB0ZWxscyB0aGUgdXNlciB0byB0cnkgYWdhaW4gKi8KKyAKK0BAIC0zNTYsNyArMzM5LDYgQEAgc3RhdGljIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKnJvb3RfZGlyOworIHN0YXRpYyBpbnQgc2l6ZV9yb290X2RpcjsJLyogU2l6ZSBvZiB0aGUgcm9vdCBkaXJlY3RvcnkgaW4gYnl0ZXMgKi8KKyBzdGF0aWMgaW50IHNlY3RvcnNfcGVyX2NsdXN0ZXIgPSAwOwkvKiBOdW1iZXIgb2Ygc2VjdG9ycyBwZXIgZGlzayBjbHVzdGVyICovCisgc3RhdGljIGludCByb290X2Rpcl9lbnRyaWVzID0gMDsJLyogTnVtYmVyIG9mIHJvb3QgZGlyZWN0b3J5IGVudHJpZXMgKi8KKy1zdGF0aWMgaW50IHJvb3RfZGlyX251bV9lbnRyaWVzID0gMDsKKyBzdGF0aWMgaW50IGxhc3RfY2x1c3Rlcl93cml0dGVuID0gMDsKKyAKKyBzdGF0aWMgY2hhciAqYmxhbmtfc2VjdG9yOwkJLyogQmxhbmsgc2VjdG9yIC0gYWxsIHplcm9zICovCitAQCAtMTMxNSw3ICsxMjk3LDcgQEAgc2V0dXBfdGFibGVzICh2b2lkKQorICAgICAgIGRlLT5kYXRlID0gQ1RfTEVfVygodW5zaWduZWQgc2hvcnQpKGN0aW1lLT50bV9tZGF5ICsKKyAJCQkJCSAgKChjdGltZS0+dG1fbW9uKzEpIDw8IDUpICsKKyAJCQkJCSAgKChjdGltZS0+dG1feWVhci04MCkgPDwgOSkpKTsKKy0gICAgICBkZS0+Y3RpbWVfbXMgPSAwOworKyAgICAgIGRlLT5jdGltZV9jcyA9IDA7CisgICAgICAgZGUtPmN0aW1lID0gZGUtPnRpbWU7CisgICAgICAgZGUtPmNkYXRlID0gZGUtPmRhdGU7CisgICAgICAgZGUtPmFkYXRlID0gZGUtPmRhdGU7CitAQCAtMTQ1MSwxNiArMTQzMywyMyBAQCB3cml0ZV90YWJsZXMgKHZvaWQpCisgCisgLyogQWRkIGEgZmlsZSB0byB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBlbnRyeSwgYW5kIGFsc28gd3JpdGUgaXQgaW50byB0aGUgaW1hZ2UgKi8KKyAKKy1zdGF0aWMgdm9pZCBjb3B5X2ZpbGVuYW1lKGNoYXIgKmZpbGVuYW1lLCBjaGFyICpiYXNlLCBjaGFyICpleHQpIHsKKytzdGF0aWMgdm9pZCBjb3B5X2ZpbGVuYW1lKGNoYXIgKmZpbGVuYW1lLCBjaGFyICpkb3NfbmFtZSkgeworICAgCisgICBjaGFyICpjaCA9IGZpbGVuYW1lOworICAgaW50IGksIGxlbjsKKyAKKy0gIG1lbXNldChiYXNlLCAweDIwLCA4KTsKKy0gIG1lbXNldChleHQsIDB4MjAsIDMpOworKyAgaWYgKCFzdHJjbXAoZmlsZW5hbWUsICIuIikpIHsKKysgICAgc3RybmNweShkb3NfbmFtZSwgTVNET1NfRE9ULCBNU0RPU19OQU1FKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgaWYgKCFzdHJjbXAoZmlsZW5hbWUsICIuLiIpKSB7CisrICAgIHN0cm5jcHkoZG9zX25hbWUsIE1TRE9TX0RPVERPVCwgTVNET1NfTkFNRSk7CisrICAgIHJldHVybjsKKysgIH0KKysgIG1lbXNldChkb3NfbmFtZSwgMHgyMCwgTVNET1NfTkFNRSk7CisgICAKKyAgIGZvcihsZW4gPSAwIDsgKmNoICYmICpjaCAhPSAnLic7IGNoKyspIHsKKy0gICAgYmFzZVtsZW4rK10gPSB0b3VwcGVyKCpjaCk7CisrICAgIGRvc19uYW1lW2xlbisrXSA9IHRvdXBwZXIoKmNoKTsKKyAgICAgaWYgKGxlbiA9PSA4KSBicmVhazsKKyAgIH0KKyAgIAorQEAgLTE0NjgsNyArMTQ1Nyw3IEBAIHN0YXRpYyB2b2lkIGNvcHlfZmlsZW5hbWUoY2hhciAqZmlsZW5hbWUKKyAgIGlmICgqY2gpIGNoKys7CisgICAKKyAgIGZvcihsZW4gPSAwIDsgKmNoOyBjaCsrKSB7CistICAgIGV4dFtsZW4rK10gPSB0b3VwcGVyKCpjaCk7CisrICAgIGRvc19uYW1lWzggKyBsZW4rK10gPSB0b3VwcGVyKCpjaCk7CisgICAgIGlmIChsZW4gPT0gMykgYnJlYWs7CisgICB9CisgfQorQEAgLTE1NTEsNyArMTU0MCw3IEBAIHN0YXRpYyBpbnQgYWRkX2ZpbGUoY2hhciAqZmlsZW5hbWUsIHN0cnUKKyAgIGludCBzdGFydDsKKyAgIGludCB1c2Vkc2VjLCB0b3RhbHNlYzsKKyAKKy0gIGNoYXIgbmFtZTgzWzhdLCBleHQ4M1szXTsKKysgIGNoYXIgZG9zX25hbWVbTVNET1NfTkFNRSsxXTsKKyAKKyAgIHN0cnVjdCBtc2Rvc19kaXJfc2xvdCAqc2xvdDsKKyAgIGludCBpOworQEAgLTE1NjIsMjMgKzE1NTEsMjIgQEAgc3RhdGljIGludCBhZGRfZmlsZShjaGFyICpmaWxlbmFtZSwgc3RydQorICAgaWYgKGRpci0+cm9vdCkgeworICAgICBpZiAoZGlyLT5jb3VudCA9PSBkaXItPmVudHJpZXMpIHsKKyAgICAgICBwcmludGYoIkVycm9yIC0gdG9vIG1hbnkgZGlyZWN0b3J5IGVudHJpZXNcbiIpOworKyAgICAgIHJldHVybjsKKyAgICAgfQorICAgfQorICAgZWxzZSB7CistICAgIGlmIChkaXItPmNvdW50ID09IGRpci0+ZW50cmllcykgeworLSAgICAgIGlmICghZGlyLT50YWJsZSkgCistCWRpci0+dGFibGUgPSAKKy0JICAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKy0gICAgICBlbHNlIHsKKy0JZGlyLT50YWJsZSA9IAorLQkgIChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIHJlYWxsb2MoZGlyLT50YWJsZSwgKGRpci0+ZW50cmllcyArIDEpICogCistCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CistCistCW1lbXNldCgmZGlyLT50YWJsZVtkaXItPmVudHJpZXNdLCAwLCBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworLSAgICAgIH0KKy0KKy0gICAgICBkaXItPmVudHJpZXMrKzsKKy0gICAgfQorKyAgICAvKiAyIGVudHJpZXMsIG9uZSBleHRyYSBmb3IgbG9uZyBmaWxlbmFtZSAqLworKyAgICBpZiAoIWRpci0+dGFibGUpCisrICAgICAgZGlyLT50YWJsZSA9CisrICAgICAgICAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSBtYWxsb2MoMiAqIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrICAgIGVsc2UKKysgICAgICBkaXItPnRhYmxlID0KKysgICAgICAgIChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIHJlYWxsb2MoZGlyLT50YWJsZSwgMiAqIChkaXItPmVudHJpZXMgKyAxKSAqCisrICAgICAgCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgaWYgKCFkaXItPnRhYmxlKQorKyAgICAgIHByaW50ZigiRXJyb3IgLSByZWFsbG9jIGZhaWxlZFxuIik7CisrICAgIG1lbXNldCgmZGlyLT50YWJsZVtkaXItPmVudHJpZXNdLCAwLCAyICogc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgZGlyLT5lbnRyaWVzICs9IDI7CisgICB9CisgCisgICBpbmZpbGUgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSwgMCk7CitAQCAtMTYxMSwxMyArMTU5OSwxMyBAQCBzdGF0aWMgaW50IGFkZF9maWxlKGNoYXIgKmZpbGVuYW1lLCBzdHJ1CisgICAgIHJldHVybiAtMTsKKyAgIH0KKyAKKy0gIHByaW50ZigiQUREICVzXG4iLCBmaWxlbmFtZSk7CisrICBwcmludGYoIkFERCBGSUxFICVzXG4iLCBmaWxlbmFtZSk7CisgCisgICAvKiBHcmFiIHRoZSBiYXNlbmFtZSBvZiB0aGUgZmlsZSAqLworICAgYmFzZSA9IGJhc2VuYW1lKGZpbGVuYW1lKTsKKyAgIAorLSAgLyogRXh0cmFjdCBvdXQgdGhlIDguMyBuYW1lICovCistICBjb3B5X2ZpbGVuYW1lKGJhc2UsIG5hbWU4MywgZXh0ODMpOworKyAgLyogY29udmVydCBmb3IgZG9zIGZhdCBzdHJ1Y3R1cmUgICovCisrICBjb3B5X2ZpbGVuYW1lKGJhc2UsIGRvc19uYW1lKTsKKyAKKyAgIC8qIE1ha2UgYW4gZXh0ZW5kZWQgbmFtZSBzbG90ICovCisgCitAQCAtMTYyOSwxMiArMTYxNyw5IEBAIHN0YXRpYyBpbnQgYWRkX2ZpbGUoY2hhciAqZmlsZW5hbWUsIHN0cnUKKyAgIAorICAgc2xvdC0+YWxpYXNfY2hlY2tzdW0gPSAwOworICAgCistICBmb3IoaSA9IDA7IGkgPCA4OyBpKyspIAorLSAgICBzbG90LT5hbGlhc19jaGVja3N1bSA9ICgoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjEpPDw3KXwoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjB4ZmUpPj4xKSkgKyBuYW1lODNbaV07CisrICBmb3IoaSA9IDA7IGkgPCBNU0RPU19OQU1FOyBpKyspCisrICAgIHNsb3QtPmFsaWFzX2NoZWNrc3VtID0gKCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMSk8PDcpfCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMHhmZSk+PjEpKSArIGRvc19uYW1lW2ldOworICAgCistICBmb3IoaSA9IDA7IGkgPCAzOyBpKyspIAorLSAgICBzbG90LT5hbGlhc19jaGVja3N1bSA9ICgoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjEpPDw3KXwoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjB4ZmUpPj4xKSkgKyBleHQ4M1tpXTsKKy0KKyAgIHAgPSBiYXNlOworIAorICAgY29weV9uYW1lKHNsb3QtPm5hbWUwXzQsIDEwLCAmcCk7CitAQCAtMTY0NSw4ICsxNjMwLDcgQEAgc3RhdGljIGludCBhZGRfZmlsZShjaGFyICpmaWxlbmFtZSwgc3RydQorICAgLyogR2V0IHRoZSBlbnRyeSBmcm9tIHRoZSByb290IGZpbGVzeXRlbSAqLworICAgZW50cnkgPSAmZGlyLT50YWJsZVtkaXItPmNvdW50KytdOworIAorLSAgc3RybmNweShlbnRyeS0+bmFtZSwgbmFtZTgzLCA4KTsKKy0gIHN0cm5jcHkoZW50cnktPmV4dCwgZXh0ODMsIDMpOworKyAgc3RybmNweShlbnRyeS0+bmFtZSwgZG9zX25hbWUsIE1TRE9TX05BTUUpOworIAorIAorICAgLyogSWYgdGhlIHVzZXIgaGFzIGl0IHJlYWQgb25seSwgdGhlbiBhZGQgcmVhZCBvbmx5IHRvIHRoZSBpbmNvbWluZworQEAgLTE2NjUsNyArMTY0OSw3IEBAIHN0YXRpYyBpbnQgYWRkX2ZpbGUoY2hhciAqZmlsZW5hbWUsIHN0cnUKKyAJCQkJICAgICAgKChjdGltZS0+dG1fbW9uKzEpIDw8IDUpICsKKyAJCQkJICAgICAgKChjdGltZS0+dG1feWVhci04MCkgPDwgOSkpKTsKKyAKKy0gIGVudHJ5LT5jdGltZV9tcyA9IDA7CisrICBlbnRyeS0+Y3RpbWVfY3MgPSAwOworICAgZW50cnktPmN0aW1lID0gZW50cnktPnRpbWU7CisgICBlbnRyeS0+Y2RhdGUgPSBlbnRyeS0+ZGF0ZTsKKyAgIGVudHJ5LT5hZGF0ZSA9IGVudHJ5LT5kYXRlOworQEAgLTE3MTEsNiArMTY5NSw3IEBAIHN0YXRpYyBpbnQgYWRkX2ZpbGUoY2hhciAqZmlsZW5hbWUsIHN0cnUKKyAKKyAgZXhpdF9hZGQ6CisgICBpZiAoaW5maWxlKSBjbG9zZShpbmZpbGUpOworKyAgcmV0dXJuIDA7CisgfQorIAorIC8qIEFkZCBhIG5ldyBkaXJlY3RvcnkgdG8gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgZW50cnksIGFuZCBpbiB0dXJuIHBvcHVsYXRlIAorQEAgLTE3MjcsMTAgKzE3MTIsMTggQEAgc3RhdGljIHZvaWQgYWRkX2RpcmVjdG9yeShjaGFyICpmaWxlbmFtZQorICAgc3RydWN0IGRpcmVudCAqZGVudHJ5ID0gMDsKKyAgIGludCByZW1haW47CisgICBjaGFyICpkYXRhOworKyAgY2hhciAqYmFzZTsKKysgIGNoYXIgZG9zX25hbWVbTVNET1NfTkFNRSsxXTsKKysgIHN0cnVjdCBtc2Rvc19kaXJfc2xvdCAqc2xvdDsKKysgIGludCBpOworKyAgY2hhciAqcDsKKyAKKyAgIC8qIElmIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCAqLworLSAgaWYgKCFyZGRpcikgcmV0dXJuOworLSAgCisrICBpZiAoIXJkZGlyKSB7CisrICAgIHByaW50ZigiRXJyb3IgLSBkaXIgZG9lcyBub3QgZXhpc3Q6ICVzXG4iLCBmaWxlbmFtZSk7CisrICAgIHJldHVybjsKKysgIH0KKysKKyAgIGlmIChkaXItPnJvb3QpIHsKKyAgICAgaWYgKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSB7CisgICAgICAgcHJpbnRmKCJFcnJvciAtIHRvbyBtYW55IGRpcmVjdG9yeSBlbnRyaWVzXG4iKTsKK0BAIC0xNzM4LDI4ICsxNzMxLDU4IEBAIHN0YXRpYyB2b2lkIGFkZF9kaXJlY3RvcnkoY2hhciAqZmlsZW5hbWUKKyAgICAgfQorICAgfQorICAgZWxzZSB7CistICAgIGlmIChkaXItPmNvdW50ID09IGRpci0+ZW50cmllcykgeworLSAgICAgIGlmICghZGlyLT50YWJsZSkgCistCWRpci0+dGFibGUgPSAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKy0gICAgICBlbHNlIHsKKy0JZGlyLT50YWJsZSA9IChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIHJlYWxsb2MoZGlyLT50YWJsZSwgKGRpci0+ZW50cmllcyArIDEpICogCistCQkJCQkJCXNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CistCistCS8qIFplcm8gaXQgb3V0IHRvIGF2b2lkIGlzc3VlcyAqLworLQltZW1zZXQoJmRpci0+dGFibGVbZGlyLT5lbnRyaWVzXSwgMCwgc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKy0gICAgICB9CistCWRpci0+ZW50cmllcysrOworKyAgICAvKiAyIGVudHJpZXMsIG9uZSBleHRyYSBmb3IgbG9uZyBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgKi8KKysgICAgaWYgKCFkaXItPnRhYmxlKQorKyAgICAgIGRpci0+dGFibGUgPSAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSBtYWxsb2MoMiAqIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrICAgIGVsc2UKKysgICAgICBkaXItPnRhYmxlID0gKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgcmVhbGxvYyhkaXItPnRhYmxlLCAyICogKGRpci0+ZW50cmllcyArIDEpICoKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgaWYgKCFkaXItPnRhYmxlKSB7CisrICAgICAgcHJpbnRmKCJFcnJvciAtIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisrICAgICAgZ290byBleGl0X2FkZF9kaXI7CisgICAgIH0KKysgICAgLyogWmVybyBpdCBvdXQgdG8gYXZvaWQgaXNzdWVzICovCisrICAgIG1lbXNldCgmZGlyLT50YWJsZVtkaXItPmVudHJpZXNdLCAwLCAyICogc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgZGlyLT5lbnRyaWVzICs9IDI7CisgICB9CisgCisrICBwcmludGYoIkFERCBESVIgJXNcbiIsIGZpbGVuYW1lKTsKKyAgIC8qIE5vdywgY3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBlbnRyeSBmb3IgdGhlIG5ldyBkaXJlY3RvcnkgKi8KKyAgIG5ld2RpciA9IChzdHJ1Y3QgZGlyX2VudHJ5ICopIGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGRpcl9lbnRyeSkpOworLSAgaWYgKCFuZXdkaXIpIGdvdG8gZXhpdF9hZGRfZGlyOworKyAgaWYgKCFuZXdkaXIpIHsKKysgICAgcHJpbnRmKCJFcnJvciAtIGNhbGxvYyBmYWlsZWRcbiIpOworKyAgICBnb3RvIGV4aXRfYWRkX2RpcjsKKysgIH0KKysKKysgIC8qIEdyYWIgdGhlIGJhc2VuYW1lIG9mIHRoZSBmaWxlICovCisrICBiYXNlID0gYmFzZW5hbWUoZmlsZW5hbWUpOworKworKyAgLyogY29udmVydCBmb3IgZG9zIHN0cnVjdHVyZSAgKi8KKysgIGNvcHlfZmlsZW5hbWUoYmFzZSwgZG9zX25hbWUpOworKworKyAgLyogTWFrZSBhbiBleHRlbmRlZCBuYW1lIHNsb3QgKi8KKysgIHNsb3QgPSAoc3RydWN0IG1zZG9zX2Rpcl9zbG90ICopICZkaXItPnRhYmxlW2Rpci0+Y291bnQrK107CisrICBzbG90LT5pZCA9ICdBJzsKKysgIHNsb3QtPmF0dHIgPSAweDBGOworKyAgc2xvdC0+cmVzZXJ2ZWQgPSAwOworKyAgc2xvdC0+c3RhcnQgPSAwOworKworKyAgc2xvdC0+YWxpYXNfY2hlY2tzdW0gPSAwOworIAorKyAgZm9yIChpID0gMDsgaSA8IE1TRE9TX05BTUU7IGkrKykKKysgICAgc2xvdC0+YWxpYXNfY2hlY2tzdW0gPSAoKChzbG90LT5hbGlhc19jaGVja3N1bSYxKTw8Nyl8KChzbG90LT5hbGlhc19jaGVja3N1bSYweGZlKT4+MSkpICsgZG9zX25hbWVbaV07CisrCisrICBwID0gYmFzZTsKKysKKysgIGNvcHlfbmFtZShzbG90LT5uYW1lMF80LCAxMCwgJnApOworKyAgY29weV9uYW1lKHNsb3QtPm5hbWU1XzEwLCAxMiwgJnApOworKyAgY29weV9uYW1lKHNsb3QtPm5hbWUxMV8xMiwgNCwgJnApOworKworKyAgLyogR2V0IHRoZSBlbnRyeSBmcm9tIHRoZSByb290IGZpbGVzeXRlbSAqLworICAgZW50cnkgPSAmZGlyLT50YWJsZVtkaXItPmNvdW50KytdOworIAorLSAgc3RybmNweShlbnRyeS0+bmFtZSwgYmFzZW5hbWUoZmlsZW5hbWUpLCBzaXplb2YoZW50cnktPm5hbWUpKTsKKy0gIAorKyAgc3RybmNweShlbnRyeS0+bmFtZSwgZG9zX25hbWUsIE1TRE9TX05BTUUpOworKworICAgZW50cnktPmF0dHIgPSBBVFRSX0RJUjsKKyAgIGN0aW1lID0gbG9jYWx0aW1lKCZjcmVhdGVfdGltZSk7CisgCitAQCAtMTc3MCwyNSArMTc5MywzMiBAQCBzdGF0aWMgdm9pZCBhZGRfZGlyZWN0b3J5KGNoYXIgKmZpbGVuYW1lCisgCQkJCSAgICAgICgoY3RpbWUtPnRtX21vbisxKSA8PCA1KSArCisgCQkJCSAgICAgICgoY3RpbWUtPnRtX3llYXItODApIDw8IDkpKSk7CisgCistICBlbnRyeS0+Y3RpbWVfbXMgPSAwOworKyAgZW50cnktPmN0aW1lX2NzID0gMDsKKyAgIGVudHJ5LT5jdGltZSA9IGVudHJ5LT50aW1lOworICAgZW50cnktPmNkYXRlID0gZW50cnktPmRhdGU7CisgICBlbnRyeS0+YWRhdGUgPSBlbnRyeS0+ZGF0ZTsKKyAKKyAgIC8qIE5vdywgcmVhZCB0aGUgZGlyZWN0b3J5ICovCisgCistICB3aGlsZSgoZGVudHJ5ID0gcmVhZGRpcihyZGRpcikpKSB7CisrCisrICB3aGlsZSgoYmFzZVswXSAhPSAnLicpICYmIChkZW50cnkgPSByZWFkZGlyKHJkZGlyKSkpIHsKKyAgICAgc3RydWN0IHN0YXQgc3Q7CisgICAgIGNoYXIgKmJ1ZmZlcjsKKy0gICAgCistICAgIGlmICghc3RyY21wKGRlbnRyeS0+ZF9uYW1lLCAiLiIpIHx8ICFzdHJjbXAoZGVudHJ5LT5kX25hbWUsICIuLiIpKQorLSAgICAgIGNvbnRpbnVlOworIAorLSAgICAvKiBET1Mgd291bGRuJ3QgbGlrZSBhIHR5cGljYWwgdW5peCAuIChkb3QpIGZpbGUsIHNvIHdlIHNraXAgdGhvc2UgdG9vICovCistICAgIGlmIChkZW50cnktPmRfbmFtZVswXSA9PSAnLicpIGNvbnRpbnVlOworKyAgICBpZiAoZGVudHJ5LT5kX25hbWVbMF0gPT0gJy4nKSB7CisrICAgICAgICAvKiBkb3MgYWxzbyBoYXMgLiAmIC4uIGRpcmVjdG9yeSBlbnRyaWVzICovCisrICAgICAgaWYgKCEgKCghc3RyY21wKGRlbnRyeS0+ZF9uYW1lLCAiLiIpKSB8fCAoIXN0cmNtcChkZW50cnktPmRfbmFtZSwgIi4uIikpKSkgeworKyAgICAgICAgLyogaWdub3JlIG90aGVyIC4qIGZpbGVzICovCisrICAgICAgICBwcmludGYoIkVycm9yIC0gRmlsZS9EaXIgbmFtZSBpcyBub3QgZG9zIGNvbXBhdGlibGUsIGlnbm9yZWQ6ICVzXG4iLCBkZW50cnktPmRfbmFtZSk7CisrICAgICAgICBjb250aW51ZTsKKysgICAgICB9CisrICAgIH0KKyAKKyAgICAgYnVmZmVyID0gbWFsbG9jKHN0cmxlbihmaWxlbmFtZSkgKyBzdHJsZW4oZGVudHJ5LT5kX25hbWUpICsgMyk7CistICAgIGlmICghYnVmZmVyKSBjb250aW51ZTsKKysgICAgaWYgKCFidWZmZXIpIHsKKysgICAgICAgIHByaW50ZigiRXJyb3IgLSBtYWxsb2MgZmFpbGVkXG4iKTsKKysgICAgICAgIGdvdG8gZXhpdF9hZGRfZGlyOworKyAgICB9CisgICAgIAorICAgICBzcHJpbnRmKGJ1ZmZlciwgIiVzLyVzIiwgZmlsZW5hbWUsIGRlbnRyeS0+ZF9uYW1lKTsKKyAgICAgaWYgKCFzdGF0KGJ1ZmZlciwgJnN0KSkgeworQEAgLTE4MDYsMTEgKzE4MzYsMjMgQEAgc3RhdGljIHZvaWQgYWRkX2RpcmVjdG9yeShjaGFyICpmaWxlbmFtZQorICAgLyogTm93IHRoYXQgdGhlIGVudGlyZSBkaXJlY3RvcnkgaGFzIGJlZW4gd3JpdHRlbiwgZ28gYWhlYWQgYW5kIHdyaXRlIHRoZSBkaXJlY3RvcnkKKyAgICAgIGVudHJ5IGFzIHdlbGwgKi8KKyAKKysgIGVudHJ5LT5zaXplID0gMDsgLyogYSBkaXJlY3RvcnkgaGFzIHplcm8gc2l6ZSAqLworKworKyAgaWYgKGJhc2VbMF0gPT0gJy4nKSAgeyAvKiAuICYgLi4gcG9pbnQgdG8gcGFyZW50J3MgY2x1c3RlciAqLworKyAgICBnb3RvIGV4aXRfYWRkX2RpcjsKKysgIH0KKysKKyAgIGVudHJ5LT5zdGFydCA9IENUX0xFX1cobGFzdF9jbHVzdGVyX3dyaXR0ZW4pOworICAgZW50cnktPnN0YXJ0aGkgPSBDVF9MRV9XKChsYXN0X2NsdXN0ZXJfd3JpdHRlbiAmIDB4RkZGRjAwMDApID4+IDE2KTsgCistICBlbnRyeS0+c2l6ZSA9IG5ld2Rpci0+Y291bnQgKiBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSk7CisrCisrLyogLiBkaXIgc3RhcnQgcG9pbnRzIHRvIHBhcmVudCAqLworKyAgbmV3ZGlyLT50YWJsZVsxXS5zdGFydCA9IGVudHJ5LT5zdGFydDsKKysvKiAuLiBkaXIgcG9pbnRzIHRvIHBhcmVudCBvZiBwYXJlbnQqLworKy8qIC4uIGRpciBzdGFydCBpcyBub3Qgc2V0IHlldCwgd291bGQgbmVlZCBtb3JlIGNoYW5nZXMgdG8gdGhlIGNvZGUsCisrICogYnV0IGRvc2ZzY2sgY2FuIGZpeCB0aGVzZSAuLiBlbnRyeSBzdGFydCBwb2ludGVycyBjb3JyZWN0bHkgKi8KKysKKysgIHJlbWFpbiA9IG5ld2Rpci0+Y291bnQgKiBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSk7CisgICAKKy0gIHJlbWFpbiA9IGVudHJ5LT5zaXplOworICAgZGF0YSA9IChjaGFyICopIG5ld2Rpci0+dGFibGU7CisgCisgICB3aGlsZShyZW1haW4pIHsKK0BAIC0xODU4LDYgKzE5MDAsNyBAQCBzdGF0aWMgdm9pZCBhZGRfcm9vdF9kaXJlY3RvcnkoY2hhciAqZGlyCisgCisgICBpZiAoIW5ld2RpcikgeworICAgICBjbG9zZWRpcihkaXIpOworKyAgICBwcmludGYoIkVycm9yIC0gY2FsbG9jIGZhaWxlZCFcbiIpOworICAgICByZXR1cm47CisgICB9CisgCitAQCAtMTg3Nyw3ICsxOTIwLDEwIEBAIHN0YXRpYyB2b2lkIGFkZF9yb290X2RpcmVjdG9yeShjaGFyICpkaXIKKyAgICAgaWYgKGVudHJ5LT5kX25hbWVbMF0gPT0gJy4nKSBjb250aW51ZTsKKyAgCisgICAgIGJ1ZmZlciA9IG1hbGxvYyhzdHJsZW4oZGlybmFtZSkgKyBzdHJsZW4oZW50cnktPmRfbmFtZSkgKyAzKTsKKy0gICAgaWYgKCFidWZmZXIpIGNvbnRpbnVlOworKyAgICBpZiAoIWJ1ZmZlcikgeworKyAgICAgICAgcHJpbnRmKCJFcnJvciAtIG1hbGxvYyBmYWlsZWQhXG4iKTsKKysgICAgICAgIGNvbnRpbnVlOworKyAgICB9CisgCisgICAgIHNwcmludGYoYnVmZmVyLCAiJXMvJXMiLCBkaXJuYW1lLCBlbnRyeS0+ZF9uYW1lKTsKKyAgICAgaWYgKCFzdGF0KGJ1ZmZlciwgJnN0KSkgeworQEAgLTIyNDUsNiArMjI5MSw5IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgIGlmIChjaGVjayAmJiBsaXN0ZmlsZSkJLyogQXV0byBhbmQgc3BlY2lmaWVkIGJhZCBibG9jayBoYW5kbGluZyBhcmUgbXV0dWFsbHkgKi8KKyAgICAgZGllICgiLWMgYW5kIC1sIGFyZSBpbmNvbXBhdGlibGUiKTsJCS8qIGV4Y2x1c2l2ZSBvZiBlYWNoIG90aGVyISAqLworIAorKyAgaWYgKGRpcm5hbWUgJiYgKHNpemVfZmF0ID09IDMyKSkKKysgICAgZGllICgiLWQgaXMgaW5jb21wYXRpYmxlIHdpdGggRkFUMzIiKTsKKysKKyAgIGlmICghY3JlYXRlKSB7CisgICAgIGNoZWNrX21vdW50IChkZXZpY2VfbmFtZSk7CS8qIElzIHRoZSBkZXZpY2UgYWxyZWFkeSBtb3VudGVkPyAqLworICAgICBkZXYgPSBvcGVuIChkZXZpY2VfbmFtZSwgT19SRFdSKTsJLyogSXMgaXQgYSBzdWl0YWJsZSBkZXZpY2UgdG8gYnVpbGQgdGhlIEZTIG9uPyAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2luY2x1ZGUtbGludXgtdHlwZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvaW5jbHVkZS1saW51eC10eXBlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjVjOGNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2luY2x1ZGUtbGludXgtdHlwZXMucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorbWtkc29mcyBpcyB1c2luZyB0eXBlcyBvZiB0aGUgc3R5bGUgX191OCwgd2hpY2ggaXQgZ2V0cyB3aXRoIHNvbWUKK3ZlcnNpb25zIG9mIGxpYmMgaGVhZGVycyB2aWEgbGludXgvaGRyZWcuaCBpbmNsdWRpbmcgYXNtL3R5cGVzLmguCitOZXdlciB2ZXJzaW9uIG9mIGZlZG9yYSAoYXQgbGVhc3QpIGhhdmUgYSBoZHJlZy5oIHdoaWNoZG9lcyBub3QKK2luY2x1ZGUgYXNtL3R5cGVzLmguIFRvIHdvcmsgYXJvdW5kIHRoaXMgcGF0Y2ggbWtkb3Nmcy5jIHRvIGV4cGxpY2l0eQoraW5jbHVkZSBsaW51eC90eXBlcy5oIHdoaWNoIHdpbGwgaW4gdHVybiBwdWxsIGluIGFzbS90eXBlcy5oIHdoaWNoCitkZWZpbmVzIHRoZXNlIHZhcmlhYmxlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCitXZSdyZSB0cmFja2luZyBhbiBvbGQgcmVsZWFzZSBvZiBkb3Nmc3Rvb2xzIGR1ZSB0byBsaWNlbnNpbmcgaXNzdWVzLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIGRvc2ZzdG9vbHMtMi4xMC9ta2Rvc2ZzL21rZG9zZnMuY34JMjAwNi0wNy0xMiAxODo0NjoyMS4wMDAwMDAwMDAgKzEwMDAKKysrKyBkb3Nmc3Rvb2xzLTIuMTAvbWtkb3Nmcy9ta2Rvc2ZzLmMJMjAwNi0wNy0xMiAxODo0NjoyMS4wMDAwMDAwMDAgKzEwMDAKK0BAIC02MCw2ICs2MCw3IEBACisgI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKKyAKKyAjaW5jbHVkZSA8ZmNudGwuaD4KKysjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKyAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyAjaW5jbHVkZSA8bGludXgvZmQuaD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWJvb3Rjb2RlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL21rZG9zZnMtYm9vdGNvZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyMWJlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWJvb3Rjb2RlLnBhdGNoCkBAIC0wLDAgKzEsMjQxIEBACitBZGQgb3B0aW9uIHRvIHJlYWQgaW4gYm9vdGNvZGUgZnJvbSBhIGZpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorV2UncmUgdHJhY2tpbmcgYW4gb2xkIHJlbGVhc2Ugb2YgZG9zZnN0b29scyBkdWUgdG8gbGljZW5zaW5nIGlzc3Vlcy4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkb3Nmc3Rvb2xzLTIuMTEub3JpZy9ta2Rvc2ZzL0NoYW5nZUxvZwkxOTk3LTA2LTE4IDEwOjA5OjM4LjAwMDAwMDAwMCArMDAwMAorKysrIGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL0NoYW5nZUxvZwkyMDExLTEyLTA2IDEyOjE0OjIzLjYzNDAxMTU1OCArMDAwMAorQEAgLTEsMyArMSwxNCBAQAorKzE5dGggSnVuZSAyMDAzCQkJU2FtIEJpbmduZXIgKHNhbUBiaW5nbmVyLmNvbSkKKysKKysJQWRkZWQgb3B0aW9uIHRvIHJlYWQgaW4gYm9vdGNvZGUgZnJvbSBhIGZpbGUgc28gdGhhdCBpZiB5b3UgaGF2ZQorKwlmb3IgZXhhbXBsZSBXaW5kb3dzIDIwMDAgYm9vdCBjb2RlLCB5b3UgY2FuIGhhdmUgaXQgd3JpdGUgdGhhdAorKwlhcyB0aGUgYm9vdGNvZGUuICBUaGlzIGlzIGEgZHVtcCBvZiB0aGUgYmVoaW5uaW5nIG9mIGEgcGFydGl0aW9uCisrCWdlbmVyYWxseSA1MTIgYnl0ZXMsIGJ1dCBjYW4gYmUgdXAgdG8gcmVzZXJ2ZWQgc2VjdG9ycyo1MTIgYnl0ZXMuCisrICAgICAgICBBbHNvIHdyaXRlcyAweDgwIGFzIHRoZQlCSU9TIGRyaXZlIG51bWJlciBpZiB3ZSBhcmUgZm9ybWF0dGluZyBhCisrCWhhcmQgZHJpdmUsIGFuZCBzZXRzIHRoZSBudW1iZXIgb2YgaGlkZGVuIHNlY3RvcnMgdG8gYmUgdGhlCisrCW51bWJlciBvZiBzZWN0b3JzIGluIG9uZSB0cmFjay4gVGhlc2Ugd2VyZSByZXF1aXJlZCBzbyB0aGF0IERPUworKwljb3VsZCBib290IHVzaW5nIHRoZSBib290Y29kZS4KKysKKyAyOHRoIEphbnVhcnkgMTk5NQkJSC4gUGV0ZXIgQW52aW4gKGhwYUB5Z2dkcmFzaWwuY29tKQorIAorIAlCZXR0ZXIgYWxnb3JpdGhtIHRvIHNlbGVjdCBjbHVzdGVyIHNpemVzIG9uIGxhcmdlIGZpbGVzeXN0ZW1zLgorSW5kZXg6IGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuOAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRvc2ZzdG9vbHMtMi4xMS5vcmlnL21rZG9zZnMvbWtkb3Nmcy44CTIwMDQtMDItMjUgMTk6MzY6MDcuMDAwMDAwMDAwICswMDAwCisrKysgZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy44CTIwMTEtMTItMDYgMTI6MTk6NTQuNzc3ODg4NDM0ICswMDAwCitAQCAtNDQsNiArNDQsMTAgQEAKKyAuSSBtZXNzYWdlLWZpbGUKKyBdCisgWworKy5CIFwtQgorKy5JIGJvb3Rjb2RlLWZpbGUKKytdCisrWworIC5CIFwtbgorIC5JIHZvbHVtZS1uYW1lCisgXQorQEAgLTE2NSw2ICsxNjksMTggQEAKKyBjYXJyaWFnZSByZXR1cm4tbGluZSBmZWVkIGNvbWJpbmF0aW9ucywgYW5kIHRhYnMgaGF2ZSBiZWVuIGV4cGFuZGVkLgorIElmIHRoZSBmaWxlbmFtZSBpcyBhIGh5cGhlbiAoLSksIHRoZSB0ZXh0IGlzIHRha2VuIGZyb20gc3RhbmRhcmQgaW5wdXQuIAorIC5UUAorKy5CSSBcLUIgIiBib290Y29kZS1maWxlIgorK1VzZXMgYm9vdCBtYWNoaW5lIGNvZGUgZnJvbSBmaWxlICJmaWxlIi4gIE9uIGFueSB0aGluZyBvdGhlciB0aGFuIEZBVDMyLAorK3RoaXMgb25seSB3cml0ZXMgdGhlIGZpcnN0IDMgYnl0ZXMsIGFuZCA0ODAgYnl0ZXMgZnJvbSBvZmZzZXQgM0VoLiAgT24KKytGQVQzMiwgdGhpcyB3cml0ZXMgdGhlIGZpcnN0IDMgYnl0ZXMsIDQyMCBieXRlcyBmcm9tIG9mZnNldCA1QWggdG8gYm90aAorK3ByaW1hcnkgYW5kIGJhY2t1cCBib290IHNlY3RvcnMuICBBbHNvIHdyaXRlcyBhbGwgb3RoZXIgcmVzZXJ2ZWQgc2VjdG9ycworK2V4Y2x1ZGluZyB0aGUgc2VjdG9ycyBmb2xsb3dpbmcgYm9vdCBzZWN0b3JzICh1c3VhbGx5IHNlY3RvciAyIGFuZCA3KS4KKytEb2VzIG5vdCByZXF1aXJlIHRoYXQgdGhlIGlucHV0IGZpbGUgYmUgYXMgbGFyZ2UgYXMgcmVzZXJ2ZWRfc2VjdG9ycyo1MTIuCisrVG8gbWFrZSBhIEZBVDMyIHBhcnRpdGlvbiBib290YWJsZSwgeW91IHdpbGwgbmVlZCBhdCBsZWFzdCB0aGUgZmlyc3QKKysxMyBzZWN0b3JzICg2NjU2IGJ5dGVzKS4gIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgcGFydGl0aW9uIGFzIHRoZSBhcmd1bWVudAorK3RvIGNsb25lIHRoZSBib290IGNvZGUgZnJvbSB0aGF0IHBhcnRpdGlvbi4KKytpLmUgbWtkb3NmcyAtQiAvZGV2L3NkYTEgL2Rldi9zZGExCisrLlRQCisgLkJJIFwtbiAiIHZvbHVtZS1uYW1lIgorIFNldHMgdGhlIHZvbHVtZSBuYW1lIChsYWJlbCkgb2YgdGhlIGZpbGVzeXN0ZW0uICBUaGUgdm9sdW1lIG5hbWUgY2FuCisgYmUgdXAgdG8gMTEgY2hhcmFjdGVycyBsb25nLiAgVGhlIGRlZmF1bHQgaXMgbm8gbGFiZWwuCitAQCAtMTk4LDggKzIxNCw5IEBACisgc2ltcGx5IHdpbGwgbm90IHN1cHBvcnQgaXQgOykKKyAuU0ggQVVUSE9SCisgRGF2ZSBIdWRzb24gLSA8ZGF2ZUBodW1idWcuZGVtb24uY28udWs+OyBtb2RpZmllZCBieSBQZXRlciBBbnZpbgorLTxocGFAeWdnZHJhc2lsLmNvbT4uIEZpeGVzIGFuZCBhZGRpdGlvbnMgYnkgUm9tYW4gSG9kZWsKKy08cm9tYW5AaG9kZWsubmV0PiBmb3IgRGViaWFuL0dOVSBMaW51eC4KKys8aHBhQHlnZ2RyYXNpbC5jb20+IGFuZCBTYW0gQmluZ25lciA8c2FtQGJpbmduZXIuY29tPi4gRml4ZXMgYW5kCisrYWRkaXRpb25zIGJ5IFJvbWFuIEhvZGVrIDxSb21hbi5Ib2Rla0BpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KKytmb3IgRGViaWFuL0dOVSBMaW51eC4KKyAuU0ggQUNLTk9XTEVER0VNRU5UUworIC5CIG1rZG9zZnMKKyBpcyBiYXNlZCBvbiBjb2RlIGZyb20KK0luZGV4OiBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9ta2Rvc2ZzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkb3Nmc3Rvb2xzLTIuMTEub3JpZy9ta2Rvc2ZzL21rZG9zZnMuYwkyMDA1LTAzLTEyIDE2OjEyOjE2LjAwMDAwMDAwMCArMDAwMAorKysrIGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYwkyMDExLTEyLTA2IDEyOjI3OjU1LjEyMTg4NjA3NiArMDAwMAorQEAgLTI0LDYgKzI0LDEyIEBACisgICAgLSBOZXcgb3B0aW9ucyAtQSwgLVMsIC1DCisgICAgLSBTdXBwb3J0IGZvciBmaWxlc3lzdGVtcyA+IDJHQgorICAgIC0gRkFUMzIgc3VwcG9ydAorKworKyAgIEZpeGVzL2FkZGl0aW9ucyBKdW5lIDIwMDMgYnkgU2FtIEJpbmduZXIKKysgICA8c2FtQGJpbmduZXIuY29tPjoKKysgICAtIEFkZCAtQiBvcHRpb24gdG8gcmVhZCBpbiBib290Y29kZSBmcm9tIGEgZmlsZQorKyAgIC0gV3JpdGUgQklPUyBkcml2ZSBudW1iZXIgc28gdGhhdCBGUyBjYW4gcHJvcGVybHkgYm9vdAorKyAgIC0gU2V0IG51bWJlciBvZiBoaWRkZW4gc2VjdG9ycyBiZWZvcmUgYm9vdCBjb2RlIHRvIGJlIG9uZSB0cmFjaworICAgIAorICAgIENvcHlpbmc6ICAgICBDb3B5cmlnaHQgMTk5MywgMTk5NCBEYXZpZCBIdWRzb24gKGRhdmVAaHVtYnVnLmRlbW9uLmNvLnVrKQorIAorQEAgLTE1Myw2ICsxNTksOCBAQAorICNkZWZpbmUgRkFUX0JBRCAgICAgIDB4MGZmZmZmZjcKKyAKKyAjZGVmaW5lIE1TRE9TX0VYVF9TSUdOIDB4MjkJLyogZXh0ZW5kZWQgYm9vdCBzZWN0b3Igc2lnbmF0dXJlICovCisrI2RlZmluZSBIRF9EUklWRV9OVU1CRVIgMHg4MAkvKiBCb290IG9mZiBmaXJzdCBoYXJkIGRyaXZlICovCisrI2RlZmluZSBGRF9EUklWRV9OVU1CRVIgMHgwMAkvKiBCb290IG9mZiBmaXJzdCBmbG9wcHkgZHJpdmUgKi8KKyAjZGVmaW5lIE1TRE9TX0ZBVDEyX1NJR04gIkZBVDEyICAgIgkvKiBGQVQxMiBmaWxlc3lzdGVtIHNpZ25hdHVyZSAqLworICNkZWZpbmUgTVNET1NfRkFUMTZfU0lHTiAiRkFUMTYgICAiCS8qIEZBVDE2IGZpbGVzeXN0ZW0gc2lnbmF0dXJlICovCisgI2RlZmluZSBNU0RPU19GQVQzMl9TSUdOICJGQVQzMiAgICIJLyogRkFUMzIgZmlsZXN5c3RlbSBzaWduYXR1cmUgKi8KK0BAIC0xNzUsNiArMTgzLDggQEAKKyAjZGVmaW5lIEJPT1RDT0RFX1NJWkUJCTQ0OAorICNkZWZpbmUgQk9PVENPREVfRkFUMzJfU0laRQk0MjAKKyAKKysjZGVmaW5lIE1BWF9SRVNFUlZFRAkJMHhGRkZGCisrCisgLyogX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGlzIHVzZWQgb24gYWxsIHN0cnVjdHVyZXMgdG8gbWFrZSBnY2MgaWdub3JlIGFueQorICAqIGFsaWdubWVudHMgKi8KKyAKK0BAIC0yMDIsNyArMjEyLDcgQEAKKyAgIF9fdTE2ICAgICAgICAgZmF0X2xlbmd0aDsJLyogc2VjdG9ycy9GQVQgKi8KKyAgIF9fdTE2ICAgICAgICAgc2Vjc190cmFjazsJLyogc2VjdG9ycyBwZXIgdHJhY2sgKi8KKyAgIF9fdTE2ICAgICAgICAgaGVhZHM7CQkvKiBudW1iZXIgb2YgaGVhZHMgKi8KKy0gIF9fdTMyICAgICAgICAgaGlkZGVuOwkJLyogaGlkZGVuIHNlY3RvcnMgKHVudXNlZCkgKi8KKysgIF9fdTMyICAgICAgICAgaGlkZGVuOwkJLyogaGlkZGVuIHNlY3RvcnMgKG9uZSB0cmFjaykgKi8KKyAgIF9fdTMyICAgICAgICAgdG90YWxfc2VjdDsJLyogbnVtYmVyIG9mIHNlY3RvcnMgKGlmIHNlY3RvcnMgPT0gMCkgKi8KKyAgIHVuaW9uIHsKKyAgICAgc3RydWN0IHsKK0BAIC0yODUsNiArMjk1LDggQEAKKyAKKyAvKiBHbG9iYWwgdmFyaWFibGVzIC0gdGhlIHJvb3Qgb2YgYWxsIGV2aWwgOi0pIC0gc2VlIHRoZXNlIGFuZCB3ZWVwISAqLworIAorK3N0YXRpYyBjaGFyICp0ZW1wbGF0ZV9ib290X2NvZGU7CS8qIFZhcmlhYmxlIHRvIHN0b3JlIGEgZnVsbCB0ZW1wbGF0ZSBib290IHNlY3RvciBpbiAqLworK3N0YXRpYyBpbnQgdXNlX3RlbXBsYXRlID0gMDsKKyBzdGF0aWMgY2hhciAqcHJvZ3JhbV9uYW1lID0gIm1rZG9zZnMiOwkvKiBOYW1lIG9mIHRoZSBwcm9ncmFtICovCisgc3RhdGljIGNoYXIgKmRldmljZV9uYW1lID0gTlVMTDsJLyogTmFtZSBvZiB0aGUgZGV2aWNlIG9uIHdoaWNoIHRvIGNyZWF0ZSB0aGUgZmlsZXN5c3RlbSAqLworIHN0YXRpYyBpbnQgYXRhcmlfZm9ybWF0ID0gMDsJLyogVXNlIEF0YXJpIHZhcmlhdGlvbiBvZiBNUy1ET1MgRlMgZm9ybWF0ICovCitAQCAtODM3LDYgKzg0OSwxMiBAQAorICAgICB2aS0+dm9sdW1lX2lkWzJdID0gKHVuc2lnbmVkIGNoYXIpICgodm9sdW1lX2lkICYgMHgwMGZmMDAwMCkgPj4gMTYpOworICAgICB2aS0+dm9sdW1lX2lkWzNdID0gKHVuc2lnbmVkIGNoYXIpICh2b2x1bWVfaWQgPj4gMjQpOworICAgfQorKyAgaWYgKGJzLm1lZGlhID09IDB4ZjgpIHsKKysgICAgICB2aS0+ZHJpdmVfbnVtYmVyID0gSERfRFJJVkVfTlVNQkVSOyAgLyogU2V0IGJpb3MgZHJpdmUgbnVtYmVyIHRvIDgwaCAqLworKyAgfQorKyAgZWxzZSB7CisrICAgICAgdmktPmRyaXZlX251bWJlciA9IEZEX0RSSVZFX05VTUJFUjsgIC8qIFNldCBiaW9zIGRyaXZlIG51bWJlciB0byAwMGggKi8KKysgIH0KKyAKKyAgIGlmICghYXRhcmlfZm9ybWF0KSB7CisgICAgIG1lbWNweSh2aS0+dm9sdW1lX2xhYmVsLCB2b2x1bWVfbmFtZSwgMTEpOworQEAgLTEzNjIsNiArMTM4MCwzMiBAQAorICAgICogZGlyIGFyZWEgb24gRkFUMTIvMTYsIGFuZCB0aGUgZmlyc3QgY2x1c3RlciBvbiBGQVQzMi4gKi8KKyAgIHdyaXRlYnVmKCAoY2hhciAqKSByb290X2Rpciwgc2l6ZV9yb290X2RpciwgInJvb3QgZGlyZWN0b3J5IiApOworIAorKyAgaWYgKHVzZV90ZW1wbGF0ZSA9PSAxKSB7CisrICAgIC8qIGR1cGUgdGVtcGxhdGUgaW50byByZXNlcnZlZCBzZWN0b3JzICovCisrICAgIHNlZWt0byggMCwgIlN0YXJ0IG9mIHBhcnRpdGlvbiIgKTsKKysgICAgaWYgKHNpemVfZmF0ID09IDMyKSB7CisrICAgICAgd3JpdGVidWYoIHRlbXBsYXRlX2Jvb3RfY29kZSwgMywgImJhY2t1cCBqbXBCb290IiApOworKyAgICAgIHNlZWt0byggMHg1YSwgInNlY3RvciAxIGJvb3QgYXJlYSIgKTsKKysgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlKzB4NWEsIDQyMCwgInNlY3RvciAxIGJvb3QgYXJlYSIgKTsKKysgICAgICBzZWVrdG8oIDUxMioyLCAidGhpcmQgc2VjdG9yIiApOworKyAgICAgIGlmIChiYWNrdXBfYm9vdCAhPSAwKSB7CisrICAgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlKzUxMioyLCBiYWNrdXBfYm9vdCpzZWN0b3Jfc2l6ZSAtIDUxMioyLCAiZGF0YSB0byBiYWNrdXAgYm9vdCIgKTsKKysgICAgICAgIHNlZWt0byggYmFja3VwX2Jvb3Qqc2VjdG9yX3NpemUsICJiYWNrdXAgYm9vdCBzZWN0b3IiICk7CisrICAgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlLCAzLCAiYmFja3VwIGptcEJvb3QiICk7CisrICAgICAgICBzZWVrdG8oIGJhY2t1cF9ib290KnNlY3Rvcl9zaXplKzB4NWEsICJiYWNrdXAgYm9vdCBzZWN0b3IgYm9vdCBhcmVhIiApOworKyAgICAgICAgd3JpdGVidWYoIHRlbXBsYXRlX2Jvb3RfY29kZSsweDVhLCA0MjAsICJiYWNrdXAgYm9vdCBzZWN0b3IgYm9vdCBhcmVhIiApOworKyAgICAgICAgc2Vla3RvKCAoYmFja3VwX2Jvb3QrMikqc2VjdG9yX3NpemUsICJzZWN0b3IgZm9sbG93aW5nIGJhY2t1cCBjb2RlIiApOworKyAgICAgICAgd3JpdGVidWYoIHRlbXBsYXRlX2Jvb3RfY29kZSsoYmFja3VwX2Jvb3QrMikqc2VjdG9yX3NpemUsIChyZXNlcnZlZF9zZWN0b3JzLWJhY2t1cF9ib290LTIpKjUxMiwgInJlbWFpbmluZyBkYXRhIiApOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlKzUxMioyLCAocmVzZXJ2ZWRfc2VjdG9ycy0yKSo1MTIsICJyZW1haW5pbmcgZGF0YSIgKTsKKysgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgd3JpdGVidWYoIHRlbXBsYXRlX2Jvb3RfY29kZSwgMywgImptcEJvb3QiICk7CisrICAgICAgc2Vla3RvKCAweDNlLCAic2VjdG9yIDEgYm9vdCBhcmVhIiApOworKyAgICAgIHdyaXRlYnVmKCB0ZW1wbGF0ZV9ib290X2NvZGUrMHgzZSwgNDQ4LCAiYm9vdCBjb2RlIiApOworKyAgICB9CisrICB9CisrCisgICBpZiAoYmxhbmtfc2VjdG9yKSBmcmVlKCBibGFua19zZWN0b3IgKTsKKyAgIGlmIChpbmZvX3NlY3RvcikgZnJlZSggaW5mb19zZWN0b3IgKTsKKyAgIGZyZWUgKHJvb3RfZGlyKTsgICAvKiBGcmVlIHVwIHRoZSByb290IGRpcmVjdG9yeSBzcGFjZSBmcm9tIHNldHVwX3RhYmxlcyAqLworQEAgLTEzNzYsNyArMTQyMCw3IEBACisgeworICAgZmF0YWxfZXJyb3IoIlwKKyBVc2FnZTogbWtkb3NmcyBbLUFdIFstY10gWy1DXSBbLXZdIFstSV0gWy1sIGJhZC1ibG9jay1maWxlXSBbLWIgYmFja3VwLWJvb3Qtc2VjdG9yXVxuXAorLSAgICAgICBbLW0gYm9vdC1tc2ctZmlsZV0gWy1uIHZvbHVtZS1uYW1lXSBbLWkgdm9sdW1lLWlkXVxuXAorKyAgICAgICBbLW0gYm9vdC1tc2ctZmlsZV0gWy1uIHZvbHVtZS1uYW1lXSBbLWkgdm9sdW1lLWlkXSBbLUIgYm9vdGNvZGVdXG5cCisgICAgICAgIFstcyBzZWN0b3JzLXBlci1jbHVzdGVyXSBbLVMgbG9naWNhbC1zZWN0b3Itc2l6ZV0gWy1mIG51bWJlci1vZi1GQVRzXVxuXAorICAgICAgICBbLWggaGlkZGVuLXNlY3RvcnNdIFstRiBmYXQtc2l6ZV0gWy1yIHJvb3QtZGlyLWVudHJpZXNdIFstUiByZXNlcnZlZC1zZWN0b3JzXVxuXAorICAgICAgICAvZGV2L25hbWUgW2Jsb2Nrc11cbiIpOworQEAgLTE0MzksNyArMTQ4Myw3IEBACisgICBwcmludGYgKCIlcyAiIFZFUlNJT04gIiAoIiBWRVJTSU9OX0RBVEUgIilcbiIsCisgCSAgIHByb2dyYW1fbmFtZSk7CisgCistICB3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJBYmNDZjpGOklpOmw6bTpuOnI6UjpzOlM6aDp2IikpICE9IEVPRikKKysgIHdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIkFiY0NmOkY6SWk6bDptOm46cjpSOnM6Uzp2OkI6IikpICE9IEVPRikKKyAgICAgLyogU2NhbiB0aGUgY29tbWFuZCBsaW5lIGZvciBvcHRpb25zICovCisgICAgIHN3aXRjaCAoYykKKyAgICAgICB7CitAQCAtMTUwOSw2ICsxNTUzLDUxIEBACisgCWxpc3RmaWxlID0gb3B0YXJnOworIAlicmVhazsKKyAKKysgICAgICBjYXNlICdCJzogICAgICAgICAvKiBCIDogcmVhZCBpbiBib290Y29kZSAqLworKyAgICAgICAgaWYgKCBzdHJjbXAob3B0YXJnLCAiLSIpICkKKysJICB7CisrCSAgICBtc2dmaWxlID0gZm9wZW4ob3B0YXJnLCAiciIpOworKwkgICAgaWYgKCAhbXNnZmlsZSApCisrCSAgICAgIHBlcnJvcihvcHRhcmcpOworKwkgIH0KKysJZWxzZQorKwkgIG1zZ2ZpbGUgPSBzdGRpbjsKKysKKysJaWYgKCBtc2dmaWxlICkKKysJICB7CisrICAgICAgICAgICAgaWYgKCEodGVtcGxhdGVfYm9vdF9jb2RlID0gbWFsbG9jKCBNQVhfUkVTRVJWRUQgKSkpCisrICAgICAgICAgICAgICAgIGRpZSggIk91dCBvZiBtZW1vcnkiICk7CisrCSAgICAvKiBUaGUgdGVtcGxhdGUgYm9vdCBzZWN0b3IgaW5jbHVkaW5nIHJlc2VydmVkIG11c3Qgbm90IGJlID4gNjU1MzUgKi8KKysgICAgICAgICAgICB1c2VfdGVtcGxhdGUgPSAxOworKwkgICAgaSA9IDA7CisrCSAgICBkbworKwkgICAgICB7CisrCQljaCA9IGdldGMobXNnZmlsZSk7CisrCQlzd2l0Y2ggKGNoKQorKwkJICB7CisrCQkgIGNhc2UgRU9GOgorKwkJICAgIGJyZWFrOworKworKwkJICBkZWZhdWx0OgorKwkJICAgIHRlbXBsYXRlX2Jvb3RfY29kZVtpKytdID0gY2g7IC8qIFN0b3JlIGNoYXJhY3RlciAqLworKwkJICAgIGJyZWFrOworKwkJICB9CisrCSAgICAgIH0KKysJICAgIHdoaWxlICggY2ggIT0gRU9GICYmIGkgPCBNQVhfUkVTRVJWRUQgKTsKKysJICAgIGNoID0gZ2V0Yyhtc2dmaWxlKTsgLyogZmluZCBvdXQgaWYgd2UncmUgYXQgRU9GICovCisrCisrCSAgICAvKiBGaWxsIHVwIHdpdGggemVyb3MgKi8KKysJICAgIHdoaWxlKCBpIDwgTUFYX1JFU0VSVkVEICkKKysJCXRlbXBsYXRlX2Jvb3RfY29kZVtpKytdID0gJ1wwJzsKKysJICAgIAorKwkgICAgaWYgKCBjaCAhPSBFT0YgKQorKwkgICAgICBwcmludGYgKCJXYXJuaW5nOiB0ZW1wbGF0ZSB0b28gbG9uZzsgdHJ1bmNhdGVkIGFmdGVyICVkIGJ5dGVzXG4iLCBpKTsKKysJICAgIAorKwkgICAgaWYgKCBtc2dmaWxlICE9IHN0ZGluICkKKysJICAgICAgZmNsb3NlKG1zZ2ZpbGUpOworKwkgIH0KKysJYnJlYWs7CisrCisgICAgICAgY2FzZSAnbSc6CQkvKiBtIDogU2V0IGJvb3QgbWVzc2FnZSAqLworIAlpZiAoIHN0cmNtcChvcHRhcmcsICItIikgKQorIAkgIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmE0NzExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL21rZG9zZnMtZGlyLnBhdGNoCkBAIC0wLDAgKzEsNjM5IEBACitBZGQgLWQgPGRpcmVjdG9yeT4gc3VwcG9ydCB0byBwb3B1bGF0ZSB0aGUgaW1hZ2UuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorV2UncmUgdHJhY2tpbmcgYW4gb2xkIHJlbGVhc2Ugb2YgZG9zZnN0b29scyBkdWUgdG8gbGljZW5zaW5nIGlzc3Vlcy4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9ta2Rvc2ZzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkb3Nmc3Rvb2xzLTIuMTEub3JpZy9ta2Rvc2ZzL21rZG9zZnMuYwkyMDExLTEyLTA2IDEyOjI3OjU1LjAwMDAwMDAwMCArMDAwMAorKysrIGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYwkyMDExLTEyLTA2IDEyOjM3OjEzLjQ0NTk1MDcwMyArMDAwMAorQEAgLTE4LDYgKzE4LDEwIEBACisgICAgYXMgYSBydWxlKSwgYW5kIG5vdCB0aGUgYmxvY2suICBGb3IgZXhhbXBsZSB0aGUgYm9vdCBibG9jayBkb2VzIG5vdAorICAgIG9jY3VweSBhIGZ1bGwgY2x1c3Rlci4KKyAKKysgICBKdW5lIDIwMDQgLSBKb3JkYW4gQ3JvdXNlIChpbmZvLmxpbnV4QGFtZC5jb20pCisrICAgQWRkZWQgLWQgPGRpcmVjdG9yeT4gc3VwcG9ydCB0byBwb3B1bGF0ZSB0aGUgaW1hZ2UKKysgICBDb3B5cmlnaHQgKEMpIDIwMDQsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKysgICAKKyAgICBGaXhlcy9hZGRpdGlvbnMgTWF5IDE5OTggYnkgUm9tYW4gSG9kZWsKKyAgICA8Um9tYW4uSG9kZWtAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+OgorICAgIC0gQXRhcmkgZm9ybWF0IHN1cHBvcnQKK0BAIC03MSw2ICs3NSw4IEBACisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDx0aW1lLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPGxpYmdlbi5oPgorKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyAKKyAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorICNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMCkKK0BAIC0xMTAsNiArMTE2LDggQEAKKyAgKiBzdWZmaWNpZW50IChvciBldmVuIGJldHRlciA6KSBmb3IgNjQgYml0IG9mZnNldHMgaW4gdGhlIG1lYW50aW1lICovCisgI2RlZmluZSBsbHNlZWsgbHNlZWsKKyAKKysjZGVmaW5lIFJPVU5EX1VQKHZhbHVlLCBkaXZpc29yKSAodmFsdWUgKyAoZGl2aXNvciAtICh2YWx1ZSAlIGRpdmlzb3IpKSkgLyBkaXZpc29yCisrCisgLyogQ29uc3RhbnQgZGVmaW5pdGlvbnMgKi8KKyAKKyAjZGVmaW5lIFRSVUUgMQkJCS8qIEJvb2xlYW4gY29uc3RhbnRzICovCitAQCAtMTQ5LDcgKzE1Nyw2IEBACisgI2RlZmluZSBBVFRSX1ZPTFVNRSAgOAkJLyogdm9sdW1lIGxhYmVsICovCisgI2RlZmluZSBBVFRSX0RJUiAgICAgMTYJCS8qIGRpcmVjdG9yeSAqLworICNkZWZpbmUgQVRUUl9BUkNIICAgIDMyCQkvKiBhcmNoaXZlZCAqLworLQorICNkZWZpbmUgQVRUUl9OT05FICAgIDAJCS8qIG5vIGF0dHJpYnV0ZSBiaXRzICovCisgI2RlZmluZSBBVFRSX1VOVVNFRCAgKEFUVFJfVk9MVU1FIHwgQVRUUl9BUkNIIHwgQVRUUl9TWVMgfCBBVFRSX0hJRERFTikKKyAJLyogYXR0cmlidXRlIGJpdHMgdGhhdCBhcmUgY29waWVkICJhcyBpcyIgKi8KK0BAIC0yNDUsNiArMjUyLDE5IEBACisgICBfX3UzMgkJcmVzZXJ2ZWQyWzRdOworIH07CisgCisrLyogVGhpcyBzdG9yZXMgdXAgdG8gMTMgY2hhcnMgb2YgdGhlIG5hbWUgKi8KKysKKytzdHJ1Y3QgbXNkb3NfZGlyX3Nsb3QgeworKyAgICAgICAgX191OCAgICBpZDsgICAgICAgICAgICAgLyogc2VxdWVuY2UgbnVtYmVyIGZvciBzbG90ICovCisrICAgICAgICBfX3U4ICAgIG5hbWUwXzRbMTBdOyAgICAvKiBmaXJzdCA1IGNoYXJhY3RlcnMgaW4gbmFtZSAqLworKyAgICAgICAgX191OCAgICBhdHRyOyAgICAgICAgICAgLyogYXR0cmlidXRlIGJ5dGUgKi8KKysgICAgICAgIF9fdTggICAgcmVzZXJ2ZWQ7ICAgICAgIC8qIGFsd2F5cyAwICovCisrICAgICAgICBfX3U4ICAgIGFsaWFzX2NoZWNrc3VtOyAvKiBjaGVja3N1bSBmb3IgOC4zIGFsaWFzICovCisrICAgICAgICBfX3U4ICAgIG5hbWU1XzEwWzEyXTsgICAvKiA2IG1vcmUgY2hhcmFjdGVycyBpbiBuYW1lICovCisrICAgICAgICBfX3UxNiAgIHN0YXJ0OyAgICAgICAgICAvKiBzdGFydGluZyBjbHVzdGVyIG51bWJlciwgMCBpbiBsb25nIHNsb3RzICovCisrICAgICAgICBfX3U4ICAgIG5hbWUxMV8xMls0XTsgICAvKiBsYXN0IDIgY2hhcmFjdGVycyBpbiBuYW1lICovCisrfTsKKysKKyBzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5CisgICB7CisgICAgIGNoYXIJbmFtZVs4XSwgZXh0WzNdOwkvKiBuYW1lIGFuZCBleHRlbnNpb24gKi8KK0BAIC0yOTMsNiArMzEzLDE1IEBACisgCisgI2RlZmluZSBNRVNTQUdFX09GRlNFVCAyOQkvKiBPZmZzZXQgb2YgbWVzc2FnZSBpbiBhYm92ZSBjb2RlICovCisgCisrLyogU3BlY2lhbCBzdHJ1Y3R1cmUgdG8ga2VlcCB0cmFjayBvZiBkaXJlY3RvcmllcyBhcyB3ZSBhZGQgdGhlbSBmb3IgdGhlIC1kIG9wdGlvbiAqLworKworK3N0cnVjdCBkaXJfZW50cnkgeworKyAgaW50IHJvb3Q7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTcGVjaWZpZXMgaWYgdGhpcyBpcyB0aGUgcm9vdCBkaXIgb3Igbm90ICovCisrICBpbnQgY291bnQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBpdGVtcyBpbiB0aGUgdGFibGUgKi8KKysgIGludCBlbnRyaWVzOyAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhYmxlICovCisrICBzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICp0YWJsZTsgIC8qIFBvaW50ZXIgdG8gdGhlIGVudHJ5IHRhYmxlICovCisrfTsKKysKKyAvKiBHbG9iYWwgdmFyaWFibGVzIC0gdGhlIHJvb3Qgb2YgYWxsIGV2aWwgOi0pIC0gc2VlIHRoZXNlIGFuZCB3ZWVwISAqLworIAorIHN0YXRpYyBjaGFyICp0ZW1wbGF0ZV9ib290X2NvZGU7CS8qIFZhcmlhYmxlIHRvIHN0b3JlIGEgZnVsbCB0ZW1wbGF0ZSBib290IHNlY3RvciBpbiAqLworQEAgLTMyNiw2ICszNTUsOSBAQAorIHN0YXRpYyBpbnQgc2l6ZV9yb290X2RpcjsJLyogU2l6ZSBvZiB0aGUgcm9vdCBkaXJlY3RvcnkgaW4gYnl0ZXMgKi8KKyBzdGF0aWMgaW50IHNlY3RvcnNfcGVyX2NsdXN0ZXIgPSAwOwkvKiBOdW1iZXIgb2Ygc2VjdG9ycyBwZXIgZGlzayBjbHVzdGVyICovCisgc3RhdGljIGludCByb290X2Rpcl9lbnRyaWVzID0gMDsJLyogTnVtYmVyIG9mIHJvb3QgZGlyZWN0b3J5IGVudHJpZXMgKi8KKytzdGF0aWMgaW50IHJvb3RfZGlyX251bV9lbnRyaWVzID0gMDsKKytzdGF0aWMgaW50IGxhc3RfY2x1c3Rlcl93cml0dGVuID0gMDsKKysKKyBzdGF0aWMgY2hhciAqYmxhbmtfc2VjdG9yOwkJLyogQmxhbmsgc2VjdG9yIC0gYWxsIHplcm9zICovCisgc3RhdGljIGludCBoaWRkZW5fc2VjdG9ycyA9IDA7CQkvKiBOdW1iZXIgb2YgaGlkZGVuIHNlY3RvcnMgKi8KKyAKK0BAIC0zOTksNyArNDMxLDYgQEAKKyAgIH0KKyB9CisgCistCisgLyogTWFyayBhIHNwZWNpZmllZCBzZWN0b3IgYXMgaGF2aW5nIGEgcGFydGljdWxhciB2YWx1ZSBpbiBpdCdzIEZBVCBlbnRyeSAqLworIAorIHN0YXRpYyB2b2lkCitAQCAtMTI2Niw2ICsxMjk3LDkgQEAKKyAgICAgICBkaWUgKCJ1bmFibGUgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIHJvb3QgZGlyZWN0b3J5IGluIG1lbW9yeSIpOworICAgICB9CisgCisrCisrICBsYXN0X2NsdXN0ZXJfd3JpdHRlbiA9IDI7CisrICAKKyAgIG1lbXNldChyb290X2RpciwgMCwgc2l6ZV9yb290X2Rpcik7CisgICBpZiAoIG1lbWNtcCh2b2x1bWVfbmFtZSwgIiAgICAgICAgICAgIiwgMTEpICkKKyAgICAgeworQEAgLTEzMTQsMTEgKzEzNDgsMTEgQEAKKyAgIH0KKyAgIAorICAgaWYgKCEoYmxhbmtfc2VjdG9yID0gbWFsbG9jKCBzZWN0b3Jfc2l6ZSApKSkKKy0gICAgICBkaWUoICJPdXQgb2YgbWVtb3J5IiApOworKyAgICBkaWUoICJPdXQgb2YgbWVtb3J5IiApOworKyAgCisgICBtZW1zZXQoYmxhbmtfc2VjdG9yLCAwLCBzZWN0b3Jfc2l6ZSk7CisgfQorLQorLQorKyAgCisgLyogV3JpdGUgdGhlIG5ldyBmaWxlc3lzdGVtJ3MgZGF0YSB0YWJsZXMgdG8gd2hlcmV2ZXIgdGhleSdyZSBnb2luZyB0byBlbmQgdXAhICovCisgCisgI2RlZmluZSBlcnJvcihzdHIpCQkJCVwKK0BAIC0xMzQwLDcgKzEzNzQsNyBAQAorICAgZG8gewkJCQkJCQlcCisgICAgIGludCBfX3NpemUgPSAoc2l6ZSk7CQkJCVwKKyAgICAgaWYgKHdyaXRlIChkZXYsIGJ1ZiwgX19zaXplKSAhPSBfX3NpemUpCQlcCistCWVycm9yICgiZmFpbGVkIHdoaWxzdCB3cml0aW5nICIgZXJyc3RyKTsJXAorKyAgICAgICBlcnJvciAoImZhaWxlZCB3aGlsc3Qgd3JpdGluZyAiIGVycnN0cik7CVwKKyAgIH0gd2hpbGUoMCkKKyAKKyAKK0BAIC0xNDEyLDYgKzE0NDYsNDUyIEBACisgICBmcmVlIChmYXQpOyAgLyogRnJlZSB1cCB0aGUgZmF0IHRhYmxlIHNwYWNlIHJlc2VydmVkIGR1cmluZyBzZXR1cF90YWJsZXMgKi8KKyB9CisgCisrLyogQWRkIGEgZmlsZSB0byB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBlbnRyeSwgYW5kIGFsc28gd3JpdGUgaXQgaW50byB0aGUgaW1hZ2UgKi8KKysKKytzdGF0aWMgdm9pZCBjb3B5X2ZpbGVuYW1lKGNoYXIgKmZpbGVuYW1lLCBjaGFyICpiYXNlLCBjaGFyICpleHQpIHsKKysgIAorKyAgY2hhciAqY2ggPSBmaWxlbmFtZTsKKysgIGludCBpLCBsZW47CisrCisrICBtZW1zZXQoYmFzZSwgMHgyMCwgOCk7CisrICBtZW1zZXQoZXh0LCAweDIwLCAzKTsKKysgIAorKyAgZm9yKGxlbiA9IDAgOyAqY2ggJiYgKmNoICE9ICcuJzsgY2grKykgeworKyAgICBiYXNlW2xlbisrXSA9IHRvdXBwZXIoKmNoKTsKKysgICAgaWYgKGxlbiA9PSA4KSBicmVhazsKKysgIH0KKysgIAorKyAgZm9yICggOyAqY2ggJiYgKmNoICE9ICcuJzsgY2grKyk7CisrICBpZiAoKmNoKSBjaCsrOworKyAgCisrICBmb3IobGVuID0gMCA7ICpjaDsgY2grKykgeworKyAgICBleHRbbGVuKytdID0gdG91cHBlcigqY2gpOworKyAgICBpZiAobGVuID09IDMpIGJyZWFrOworKyAgfQorK30KKysKKysvKiBDaGVjayBmb3IgYW4gLmF0dHJpYi48ZmlsZW5hbWU+IGZpbGUsIGFuZCByZWFkIHRoZSBhdHRyaWJ1dGVzIHRoZXJlaW4gKi8KKysKKysvKiBXZSBhcmUgZ29pbmcgdG8gYmUgcHJldHR5IHBlZGFudGljIGFib3V0IHRoaXMuICBUaGUgZmlsZSBuZWVkcyAzCisrICAgYnl0ZXMgYXQgdGhlIGJlZ2lubmluZywgdGhlIGF0dHJpYnV0ZXMgYXJlIGxpc3RlZCBpbiB0aGlzIG9yZGVyOgorKyAgIAorKyAgIChIKWlkZGVufChTKXlzdGVtfChBKXJjaGl2ZWQKKysgICAKKysgICBBIGNhcGl0YWwgSFNBIG1lYW5zIHRvIGVuYWJsZSBpdCwgYW55dGhpbmcgZWxzZSB3aWxsIGRpc2FibGUgaXQKKysgICAoSSByZWNvbW1lbmQgYSAnLScpIFRoZSB1bml4IHVzZXIgYXR0cmlidXRlcyB3aWxsIHN0aWxsIGJlIHVzZWQgCisrICAgZm9yIHdyaXRlIGFjY2Vzcy4KKysKKysgICBGb3IgZXhhbXBsZSwgdG8gZW5hYmxlIHN5c3RlbSBmaWxlIGFjY2VzcyBmb3IgbGRsaW51eC5zeXMsIHdyaXRlIAorKyAgIHRoZSBmb2xsb3dpbmcgdG8gLmF0dHJpYi5sZGxpbnV4LnN5czogLVMtCisrKi8KKysKKyt1bnNpZ25lZCBjaGFyIGNoZWNrX2F0dHJpYl9maWxlKGNoYXIgKmRpciwgY2hhciAqZmlsZW5hbWUpIHsKKysKKysgIGNoYXIgYXR0cmliWzRdID0geyAnLScsICctJywgJy0nIH07CisrICB1bnNpZ25lZCBjaGFyICpidWZmZXIgPSAwOworKyAgaW50IHJldCA9IEFUVFJfTk9ORTsKKysgIGludCBmZCA9IC0xOworKworKyAgYnVmZmVyID0gKGNoYXIgKikgY2FsbG9jKDEsIHN0cmxlbihkaXIpICsgc3RybGVuKGZpbGVuYW1lKSArIDEwKTsKKysgIGlmICghYnVmZmVyKSByZXR1cm4gQVRUUl9OT05FOworKworKyAgc3ByaW50ZihidWZmZXIsICIlcy8uYXR0cmliLiVzIiwgZGlyLCBmaWxlbmFtZSk7CisrCisrICBpZiAoYWNjZXNzKGJ1ZmZlciwgUl9PSykpIAorKyAgICBnb3RvIGV4aXRfYXR0cmliOworKworKyAgaWYgKChmZCA9IG9wZW4oYnVmZmVyLCBPX1JET05MWSwgMCkpIDwgMCkKKysgICAgZ290byBleGl0X2F0dHJpYjsKKysKKysgIGlmIChyZWFkKGZkLCBhdHRyaWIsIDMpIDwgMCkKKysgICAgZ290byBleGl0X2F0dHJpYjsKKysgIAorKyAgaWYgKGF0dHJpYlswXSA9PSAnSCcpIHJldCB8PSBBVFRSX0hJRERFTjsKKysgIGlmIChhdHRyaWJbMV0gPT0gJ1MnKSByZXQgfD0gQVRUUl9TWVM7CisrICBpZiAoYXR0cmliWzJdID09ICdBJykgcmV0IHw9IEFUVFJfQVJDSDsKKysKKysgIHByaW50ZigiJXM6IFNldHRpbmcgYXRycmlidXRlICV4XG4iLCBmaWxlbmFtZSwgcmV0KTsKKysKKysgZXhpdF9hdHRyaWI6CisrICBpZiAoZmQgPj0gMCkgY2xvc2UoZmQpOworKyAgaWYgKGJ1ZmZlcikgZnJlZShidWZmZXIpOworKworKyAgcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIHZvaWQgY29weV9uYW1lKGNoYXIgKmJ1ZmZlciwgaW50IHNpemUsIGNoYXIgKipwb2ludGVyKSB7CisrICBpbnQgaTsKKysKKysgIGZvcihpID0gMDsgaSA8IHNpemU7IGkgKz0gMikgeworKyAgICBpZiAoKnBvaW50ZXIpIHsKKysgICAgICBidWZmZXJbaV0gPSAqKnBvaW50ZXI7CisrICAgICAgYnVmZmVyW2kgKyAxXSA9IDB4MDA7CisrICAgICAgKnBvaW50ZXIgPSAqKnBvaW50ZXIgPyAqcG9pbnRlciArIDEgOiAwOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgIGJ1ZmZlcltpXSA9IDB4RkY7CisrICAgICAgYnVmZmVyW2kgKyAxXSA9IDB4RkY7CisrICAgIH0KKysgIH0gIAorK30KKysKKytzdGF0aWMgaW50IGFkZF9maWxlKGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3QgZGlyX2VudHJ5ICpkaXIsIHVuc2lnbmVkIGNoYXIgYXR0cikgCisreworKyAgc3RydWN0IHN0YXQgc3RhdDsKKysgIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmVudHJ5OworKyAgaW50IGluZmlsZSA9IDA7CisrICBpbnQgc2VjdG9ycywgY2x1c3RlcnM7CisrICBzdHJ1Y3QgdG0gKmN0aW1lOworKyAgaW50IGMsIHM7CisrICBpbnQgcHRyOworKyAgY2hhciAqYnVmZmVyLCAqYmFzZTsKKysgIGludCBzdGFydDsKKysgIGludCB1c2Vkc2VjLCB0b3RhbHNlYzsKKysKKysgIGNoYXIgbmFtZTgzWzhdLCBleHQ4M1szXTsKKysKKysgIHN0cnVjdCBtc2Rvc19kaXJfc2xvdCAqc2xvdDsKKysgIGludCBpOworKyAgY2hhciAqcDsKKysKKysgIC8qIFRoZSByb290IGRpcmVjdG9yeSBpcyBzdGF0aWMsIGV2ZXJ5dGhpbmcgZWxzZSBncm93cyBhcyBuZWVkZWQgKi8KKysKKysgIGlmIChkaXItPnJvb3QpIHsKKysgICAgaWYgKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSB7CisrICAgICAgcHJpbnRmKCJFcnJvciAtIHRvbyBtYW55IGRpcmVjdG9yeSBlbnRyaWVzXG4iKTsKKysgICAgfQorKyAgfQorKyAgZWxzZSB7CisrICAgIGlmIChkaXItPmNvdW50ID09IGRpci0+ZW50cmllcykgeworKyAgICAgIGlmICghZGlyLT50YWJsZSkgCisrCWRpci0+dGFibGUgPSAKKysJICAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgICBlbHNlIHsKKysJZGlyLT50YWJsZSA9IAorKwkgIChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIHJlYWxsb2MoZGlyLT50YWJsZSwgKGRpci0+ZW50cmllcyArIDEpICogCisrCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrCisrCW1lbXNldCgmZGlyLT50YWJsZVtkaXItPmVudHJpZXNdLCAwLCBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICAgIH0KKysKKysgICAgICBkaXItPmVudHJpZXMrKzsKKysgICAgfQorKyAgfQorKworKyAgaW5maWxlID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFksIDApOworKyAgaWYgKCFpbmZpbGUpIHJldHVybjsKKysgIAorKyAgaWYgKGZzdGF0KGluZmlsZSwgJnN0YXQpKQorKyAgICBnb3RvIGV4aXRfYWRkOworKyAKKysgIGlmIChTX0lTQ0hSKHN0YXQuc3RfbW9kZSkgfHxTX0lTQkxLKHN0YXQuc3RfbW9kZSkgfHwKKysgICAgICBTX0lTRklGTyhzdGF0LnN0X21vZGUpIHx8IFNfSVNMTksoc3RhdC5zdF9tb2RlKSkgeworKyAgICBwcmludGYoIkVycm9yIC0gY2Fubm90IGNyZWF0ZSBhIHNwZWNpYWwgZmlsZSBpbiBhIEZBVEZTXG4iKTsKKysgICAgZ290byBleGl0X2FkZDsKKysgIH0KKysKKysgIC8qIEZJWE1FOiBUaGlzIGlzbid0IHZlcnkgcHJldHR5ICovCisrCisrICB1c2Vkc2VjID0gc3RhcnRfZGF0YV9zZWN0b3IgKyAoc2l6ZV9yb290X2RpciAvIHNlY3Rvcl9zaXplKSArCisrICAgIChsYXN0X2NsdXN0ZXJfd3JpdHRlbiAqIGJzLmNsdXN0ZXJfc2l6ZSk7CisrCisrICB0b3RhbHNlYyA9IGJsb2NrcyAqIEJMT0NLX1NJWkUgLyBzZWN0b3Jfc2l6ZTsKKysgIAorKyAgLyogRmlndXJlIG91dCBob3cgbWFueSBzZWN0b3JzIC8gY2x1c3RvcnMgdGhlIGZpbGUgcmVxdWlyZXMgKi8KKysKKysgIHNlY3RvcnMgPSBST1VORF9VUChzdGF0LnN0X3NpemUsIHNlY3Rvcl9zaXplKTsKKysgIGNsdXN0ZXJzID0gUk9VTkRfVVAoc2VjdG9ycywgKGludCkgYnMuY2x1c3Rlcl9zaXplKTsKKysKKysgIGlmICh1c2Vkc2VjICsgc2VjdG9ycyA+IHRvdGFsc2VjKSB7CisrICAgIHByaW50ZigiRXJyb3IgLSAlcyBpcyB0b28gYmlnICglZCB2cyAlZClcbiIsIGZpbGVuYW1lLCBzZWN0b3JzLCB0b3RhbHNlYyAtIHVzZWRzZWMpOworKyAgICBjbG9zZShpbmZpbGUpOworKyAgICByZXR1cm4gLTE7CisrICB9CisrCisrICBwcmludGYoIkFERCAlc1xuIiwgZmlsZW5hbWUpOworKworKyAgLyogR3JhYiB0aGUgYmFzZW5hbWUgb2YgdGhlIGZpbGUgKi8KKysgIGJhc2UgPSBiYXNlbmFtZShmaWxlbmFtZSk7CisrICAKKysgIC8qIEV4dHJhY3Qgb3V0IHRoZSA4LjMgbmFtZSAqLworKyAgY29weV9maWxlbmFtZShiYXNlLCBuYW1lODMsIGV4dDgzKTsKKysKKysgIC8qIE1ha2UgYW4gZXh0ZW5kZWQgbmFtZSBzbG90ICovCisrCisrICBzbG90ID0gKHN0cnVjdCBtc2Rvc19kaXJfc2xvdCAqKSAmZGlyLT50YWJsZVtkaXItPmNvdW50KytdOworKyAgc2xvdC0+aWQgPSAnQSc7ICAKKysgIHNsb3QtPmF0dHIgPSAweDBGOworKyAgc2xvdC0+cmVzZXJ2ZWQgPSAwOworKyAgc2xvdC0+c3RhcnQgPSAwOworKyAgCisrICBzbG90LT5hbGlhc19jaGVja3N1bSA9IDA7CisrICAKKysgIGZvcihpID0gMDsgaSA8IDg7IGkrKykgCisrICAgIHNsb3QtPmFsaWFzX2NoZWNrc3VtID0gKCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMSk8PDcpfCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMHhmZSk+PjEpKSArIG5hbWU4M1tpXTsKKysgIAorKyAgZm9yKGkgPSAwOyBpIDwgMzsgaSsrKSAKKysgICAgc2xvdC0+YWxpYXNfY2hlY2tzdW0gPSAoKChzbG90LT5hbGlhc19jaGVja3N1bSYxKTw8Nyl8KChzbG90LT5hbGlhc19jaGVja3N1bSYweGZlKT4+MSkpICsgZXh0ODNbaV07CisrCisrICBwID0gYmFzZTsKKysKKysgIGNvcHlfbmFtZShzbG90LT5uYW1lMF80LCAxMCwgJnApOworKyAgY29weV9uYW1lKHNsb3QtPm5hbWU1XzEwLCAxMiwgJnApOworKyAgY29weV9uYW1lKHNsb3QtPm5hbWUxMV8xMiwgNCwgJnApOworKworKworKyAgLyogR2V0IHRoZSBlbnRyeSBmcm9tIHRoZSByb290IGZpbGVzeXRlbSAqLworKyAgZW50cnkgPSAmZGlyLT50YWJsZVtkaXItPmNvdW50KytdOworKworKyAgc3RybmNweShlbnRyeS0+bmFtZSwgbmFtZTgzLCA4KTsKKysgIHN0cm5jcHkoZW50cnktPmV4dCwgZXh0ODMsIDMpOworKworKworKyAgLyogSWYgdGhlIHVzZXIgaGFzIGl0IHJlYWQgb25seSwgdGhlbiBhZGQgcmVhZCBvbmx5IHRvIHRoZSBpbmNvbWluZworKyAgICAgYXR0cmlidXRlIHNldHRpbmdzICovCisrCisrICBpZiAoIShzdGF0LnN0X21vZGUgJiBTX0lXVVNSKSkgYXR0ciB8PSBBVFRSX1JPOworKyAgZW50cnktPmF0dHIgPSBhdHRyOworKworKyAgLyogU2V0IHRoZSBhY2Nlc3MgdGltZSBvbiB0aGUgZmlsZSAqLworKyAgY3RpbWUgPSBsb2NhbHRpbWUoJmNyZWF0ZV90aW1lKTsKKysKKysgIGVudHJ5LT50aW1lID0gQ1RfTEVfVygodW5zaWduZWQgc2hvcnQpKChjdGltZS0+dG1fc2VjID4+IDEpICsKKysJCQkJCSAgKGN0aW1lLT50bV9taW4gPDwgNSkgKyAoY3RpbWUtPnRtX2hvdXIgPDwgMTEpKSk7CisrCisrICBlbnRyeS0+ZGF0ZSA9IENUX0xFX1coKHVuc2lnbmVkIHNob3J0KShjdGltZS0+dG1fbWRheSArCisrCQkJCSAgICAgICgoY3RpbWUtPnRtX21vbisxKSA8PCA1KSArCisrCQkJCSAgICAgICgoY3RpbWUtPnRtX3llYXItODApIDw8IDkpKSk7CisrCisrICBlbnRyeS0+Y3RpbWVfbXMgPSAwOworKyAgZW50cnktPmN0aW1lID0gZW50cnktPnRpbWU7CisrICBlbnRyeS0+Y2RhdGUgPSBlbnRyeS0+ZGF0ZTsKKysgIGVudHJ5LT5hZGF0ZSA9IGVudHJ5LT5kYXRlOworKyAgZW50cnktPnNpemUgPSBzdGF0LnN0X3NpemU7CisrCisrICBzdGFydCA9IGxhc3RfY2x1c3Rlcl93cml0dGVuOworKworKyAgZW50cnktPnN0YXJ0ID0gQ1RfTEVfVyhzdGFydCk7ICAvKiBzdGFydCBzZWN0b3IgKi8KKysgIGVudHJ5LT5zdGFydGhpID0gQ1RfTEVfVygoc3RhcnQgJiAweEZGRkYwMDAwKSA+PiAxNik7IC8qIEhpZ2ggc3RhcnQgc2VjdG9yIChmb3IgRkFUMzIpICovCisrCisrICAvKiBXZSBtYXJrIGFsbCBvZiB0aGUgY2x1c3RlcnMgd2UgdXNlIGluIHRoZSBGQVQgKi8KKysgIAorKyAgZm9yKGMgPSAwOyBjIDwgY2x1c3RlcnM7IGMrKyApIHsKKysgICAgaW50IGZyZWU7CisrICAgIGludCBuZXh0ID0gYyA9PSAoY2x1c3RlcnMgLSAxKSA/IEZBVF9FT0YgOiBzdGFydCArIGMgKyAxOworKyAgICBtYXJrX0ZBVF9jbHVzdGVyKHN0YXJ0ICsgYywgbmV4dCk7ICAKKysgICAgbGFzdF9jbHVzdGVyX3dyaXR0ZW4rKzsKKysgIH0KKysgIAorKyAgLyogVGhpcyBjb25mdXNlZCBtZSB0b28gLSBjbHVzdGVyIDIgc3RhcnRzIGFmdGVyIHRoZQorKyAgICAgcm9vdCBkaXJlY3RvcnkgZGF0YSAtIHNlYXJjaCBtZSBhcyB0byB3aHkgKi8KKysKKysgIHB0ciA9IChzdGFydF9kYXRhX3NlY3RvciAqIHNlY3Rvcl9zaXplKSArIHNpemVfcm9vdF9kaXI7CisrICBwdHIgKz0gKHN0YXJ0IC0gMikgKiBicy5jbHVzdGVyX3NpemUgKiBzZWN0b3Jfc2l6ZTsKKysgICAgCisrICBidWZmZXIgPSAoY2hhciAqKSBtYWxsb2Moc2VjdG9yX3NpemUpOworKworKyAgaWYgKCFidWZmZXIpIHsKKysgICAgcHJpbnRmKCJFcnJvciAtIGNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeVxuIik7CisrICAgIGdvdG8gZXhpdF9hZGQ7CisrICB9CisrCisrICAvKiBXcml0ZSB0aGUgZmlsZSBpbnRvIHRoZSBmaWxlIGJsb2NrICovCisrCisrICBzZWVrdG8ocHRyLCAiZGF0YWZpbGUiKTsKKysKKysgIHdoaWxlKDEpIHsKKysgICAgaW50IHNpemUgPSByZWFkKGluZmlsZSwgYnVmZmVyLCBzZWN0b3Jfc2l6ZSk7ICAgIAorKyAgICBpZiAoc2l6ZSA8PSAwKSBicmVhazsKKysgICAgCisrICAgIHdyaXRlYnVmKGJ1ZmZlciwgc2l6ZSwgImRhdGEiKTsgICAgCisrICB9CisrCisrIGV4aXRfYWRkOgorKyAgaWYgKGluZmlsZSkgY2xvc2UoaW5maWxlKTsKKyt9CisrCisrLyogQWRkIGEgbmV3IGRpcmVjdG9yeSB0byB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBlbnRyeSwgYW5kIGluIHR1cm4gcG9wdWxhdGUgCisrICAgaXQgd2l0aCBpdHMgb3duIGZpbGVzICovCisrCisrLyogRklYTUU6ICBUaGlzIHNob3VsZCBjaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNpemUgdG8gYWRkIGl0c2VsZiAqLworKworK3N0YXRpYyB2b2lkIGFkZF9kaXJlY3RvcnkoY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBkaXJfZW50cnkgKmRpcikgeworKworKyAgc3RydWN0IGRpcl9lbnRyeSAqbmV3ZGlyID0gMDsKKysgIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmVudHJ5OworKyAgc3RydWN0IHRtICpjdGltZTsKKysgIERJUiAqcmRkaXIgPSBvcGVuZGlyKGZpbGVuYW1lKTsKKysgIHN0cnVjdCBkaXJlbnQgKmRlbnRyeSA9IDA7CisrICBpbnQgcmVtYWluOworKyAgY2hhciAqZGF0YTsKKysKKysgIC8qIElmIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCAqLworKyAgaWYgKCFyZGRpcikgcmV0dXJuOworKyAgCisrICBpZiAoZGlyLT5yb290KSB7CisrICAgIGlmIChkaXItPmNvdW50ID09IGRpci0+ZW50cmllcykgeworKyAgICAgIHByaW50ZigiRXJyb3IgLSB0b28gbWFueSBkaXJlY3RvcnkgZW50cmllc1xuIik7CisrICAgICAgZ290byBleGl0X2FkZF9kaXI7CisrICAgIH0KKysgIH0KKysgIGVsc2UgeworKyAgICBpZiAoZGlyLT5jb3VudCA9PSBkaXItPmVudHJpZXMpIHsKKysgICAgICBpZiAoIWRpci0+dGFibGUpIAorKwlkaXItPnRhYmxlID0gKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrICAgICAgZWxzZSB7CisrCWRpci0+dGFibGUgPSAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSByZWFsbG9jKGRpci0+dGFibGUsIChkaXItPmVudHJpZXMgKyAxKSAqIAorKwkJCQkJCQlzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKworKwkvKiBaZXJvIGl0IG91dCB0byBhdm9pZCBpc3N1ZXMgKi8KKysJbWVtc2V0KCZkaXItPnRhYmxlW2Rpci0+ZW50cmllc10sIDAsIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrICAgICAgfQorKwlkaXItPmVudHJpZXMrKzsKKysgICAgfQorKyAgfQorKworKyAgLyogTm93LCBjcmVhdGUgYSBuZXcgZGlyZWN0b3J5IGVudHJ5IGZvciB0aGUgbmV3IGRpcmVjdG9yeSAqLworKyAgbmV3ZGlyID0gKHN0cnVjdCBkaXJfZW50cnkgKikgY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZGlyX2VudHJ5KSk7CisrICBpZiAoIW5ld2RpcikgZ290byBleGl0X2FkZF9kaXI7CisrCisrICBlbnRyeSA9ICZkaXItPnRhYmxlW2Rpci0+Y291bnQrK107CisrCisrICBzdHJuY3B5KGVudHJ5LT5uYW1lLCBiYXNlbmFtZShmaWxlbmFtZSksIHNpemVvZihlbnRyeS0+bmFtZSkpOworKyAgCisrICBlbnRyeS0+YXR0ciA9IEFUVFJfRElSOworKyAgY3RpbWUgPSBsb2NhbHRpbWUoJmNyZWF0ZV90aW1lKTsKKysKKysgIGVudHJ5LT50aW1lID0gQ1RfTEVfVygodW5zaWduZWQgc2hvcnQpKChjdGltZS0+dG1fc2VjID4+IDEpICsKKysJCQkJCSAgKGN0aW1lLT50bV9taW4gPDwgNSkgKyAoY3RpbWUtPnRtX2hvdXIgPDwgMTEpKSk7CisrCisrICBlbnRyeS0+ZGF0ZSA9IENUX0xFX1coKHVuc2lnbmVkIHNob3J0KShjdGltZS0+dG1fbWRheSArCisrCQkJCSAgICAgICgoY3RpbWUtPnRtX21vbisxKSA8PCA1KSArCisrCQkJCSAgICAgICgoY3RpbWUtPnRtX3llYXItODApIDw8IDkpKSk7CisrCisrICBlbnRyeS0+Y3RpbWVfbXMgPSAwOworKyAgZW50cnktPmN0aW1lID0gZW50cnktPnRpbWU7CisrICBlbnRyeS0+Y2RhdGUgPSBlbnRyeS0+ZGF0ZTsKKysgIGVudHJ5LT5hZGF0ZSA9IGVudHJ5LT5kYXRlOworKworKyAgLyogTm93LCByZWFkIHRoZSBkaXJlY3RvcnkgKi8KKysKKysgIHdoaWxlKChkZW50cnkgPSByZWFkZGlyKHJkZGlyKSkpIHsKKysgICAgc3RydWN0IHN0YXQgc3Q7CisrICAgIGNoYXIgKmJ1ZmZlcjsKKysgICAgCisrICAgIGlmICghc3RyY21wKGRlbnRyeS0+ZF9uYW1lLCAiLiIpIHx8ICFzdHJjbXAoZGVudHJ5LT5kX25hbWUsICIuLiIpKQorKyAgICAgIGNvbnRpbnVlOworKworKyAgICAvKiBET1Mgd291bGRuJ3QgbGlrZSBhIHR5cGljYWwgdW5peCAuIChkb3QpIGZpbGUsIHNvIHdlIHNraXAgdGhvc2UgdG9vICovCisrICAgIGlmIChkZW50cnktPmRfbmFtZVswXSA9PSAnLicpIGNvbnRpbnVlOworKworKyAgICBidWZmZXIgPSBtYWxsb2Moc3RybGVuKGZpbGVuYW1lKSArIHN0cmxlbihkZW50cnktPmRfbmFtZSkgKyAzKTsKKysgICAgaWYgKCFidWZmZXIpIGNvbnRpbnVlOworKyAgICAKKysgICAgc3ByaW50ZihidWZmZXIsICIlcy8lcyIsIGZpbGVuYW1lLCBkZW50cnktPmRfbmFtZSk7CisrICAgIGlmICghc3RhdChidWZmZXIsICZzdCkpIHsKKysgICAgICBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgCisrCWFkZF9kaXJlY3RvcnkoYnVmZmVyLCBuZXdkaXIpOworKyAgICAgIGVsc2UgaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkpIHsKKysJdW5zaWduZWQgY2hhciBhdHRyaWIgPSBjaGVja19hdHRyaWJfZmlsZShmaWxlbmFtZSwgZGVudHJ5LT5kX25hbWUpOworKwlhZGRfZmlsZShidWZmZXIsIG5ld2RpciwgYXR0cmliKTsKKysgICAgICB9CisrICAgIH0KKysgCisrICAgIGZyZWUoYnVmZmVyKTsKKysgIH0KKysgIAorKyAgLyogTm93IHRoYXQgdGhlIGVudGlyZSBkaXJlY3RvcnkgaGFzIGJlZW4gd3JpdHRlbiwgZ28gYWhlYWQgYW5kIHdyaXRlIHRoZSBkaXJlY3RvcnkKKysgICAgIGVudHJ5IGFzIHdlbGwgKi8KKysKKysgIGVudHJ5LT5zdGFydCA9IENUX0xFX1cobGFzdF9jbHVzdGVyX3dyaXR0ZW4pOworKyAgZW50cnktPnN0YXJ0aGkgPSBDVF9MRV9XKChsYXN0X2NsdXN0ZXJfd3JpdHRlbiAmIDB4RkZGRjAwMDApID4+IDE2KTsgCisrICBlbnRyeS0+c2l6ZSA9IG5ld2Rpci0+Y291bnQgKiBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSk7CisrICAKKysgIHJlbWFpbiA9IGVudHJ5LT5zaXplOworKyAgZGF0YSA9IChjaGFyICopIG5ld2Rpci0+dGFibGU7CisrCisrICB3aGlsZShyZW1haW4pIHsKKysgICAgaW50IHNpemUgPSAKKysgICAgICByZW1haW4gPiBicy5jbHVzdGVyX3NpemUgKiBzZWN0b3Jfc2l6ZSA/IGJzLmNsdXN0ZXJfc2l6ZSAqIHNlY3Rvcl9zaXplIDogcmVtYWluOworKworKyAgICBpbnQgcG9zID0gKHN0YXJ0X2RhdGFfc2VjdG9yICogc2VjdG9yX3NpemUpICsgc2l6ZV9yb290X2RpcjsKKysgICAgcG9zICs9IChsYXN0X2NsdXN0ZXJfd3JpdHRlbiAtIDIpICogYnMuY2x1c3Rlcl9zaXplICogc2VjdG9yX3NpemU7CisrICAgIAorKyAgICBzZWVrdG8ocG9zLCAiYWRkX2RpciIpOworKyAgICB3cml0ZWJ1ZihkYXRhLCBzaXplLCAiYWRkX2RpciIpOworKyAgICAKKysgICAgcmVtYWluIC09IHNpemU7CisrICAgIGRhdGEgKz0gc2l6ZTsKKysKKysgICAgbWFya19GQVRfY2x1c3RlcihsYXN0X2NsdXN0ZXJfd3JpdHRlbiwgcmVtYWluID8gbGFzdF9jbHVzdGVyX3dyaXR0ZW4gKyAxIDogRkFUX0VPRik7ICAgICAgCisrICAgIGxhc3RfY2x1c3Rlcl93cml0dGVuKys7CisrICB9CisrICAKKysgZXhpdF9hZGRfZGlyOgorKyAgaWYgKHJkZGlyKSBjbG9zZWRpcihyZGRpcik7CisrICBpZiAobmV3ZGlyLT50YWJsZSkgZnJlZShuZXdkaXItPnRhYmxlKTsKKysgIGlmIChuZXdkaXIpIGZyZWUobmV3ZGlyKTsKKyt9ICAKKysgIAorKy8qIEdpdmVuIGEgZGlyZWN0b3J5LCBhZGQgYWxsIHRoZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZQorKyAgIGltYWdlLiAgCisrKi8KKysKKytzdGF0aWMgdm9pZCBhZGRfcm9vdF9kaXJlY3RvcnkoY2hhciAqZGlybmFtZSkgCisreworKyAgRElSICpkaXIgPSBvcGVuZGlyKGRpcm5hbWUpOworKyAgc3RydWN0IGRpcmVudCAqZW50cnkgPSAwOworKyAgc3RydWN0IGRpcl9lbnRyeSAqbmV3ZGlyID0gMDsKKysKKysgIGlmICghZGlyKSB7CisrICAgIHByaW50ZigiRXJyb3IgLSBkaXJlY3RvcnkgJXMgZG9lcyBub3QgZXhpc3RcbiIsIGRpcm5hbWUpOworKyAgICByZXR1cm47CisrICB9CisrIAorKyAgLyogQ3JlYXRlIHRoZSByb290IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgLSB0aGlzIGlzIGEgYml0IGRpZmZlcmVudCB0aGVuCisrICAgICBhYm92ZSwgYmVjYXVzZSB0aGUgdGFibGUgYWxyZWFkeSBleGlzdHMsIHdlIGp1c3QgcmVmZXIgdG8gaXQuICovCisrCisrICBuZXdkaXIgPSAoc3RydWN0IGRpcl9lbnRyeSAqKSBjYWxsb2MoMSxzaXplb2Yoc3RydWN0IGRpcl9lbnRyeSkpOworKworKyAgaWYgKCFuZXdkaXIpIHsKKysgICAgY2xvc2VkaXIoZGlyKTsKKysgICAgcmV0dXJuOworKyAgfQorKworKyAgbmV3ZGlyLT5lbnRyaWVzID0gcm9vdF9kaXJfZW50cmllczsKKysgIG5ld2Rpci0+cm9vdCA9IDE7CisrICBuZXdkaXItPmNvdW50ID0gMDsKKysgIG5ld2Rpci0+dGFibGUgPSByb290X2RpcjsKKysKKysgIHdoaWxlKChlbnRyeSA9IHJlYWRkaXIoZGlyKSkpIHsKKysgICAgc3RydWN0IHN0YXQgc3Q7CisrICAgIGNoYXIgKmJ1ZmZlcjsKKysgICAgCisrICAgIGlmICghc3RyY21wKGVudHJ5LT5kX25hbWUsICIuIikgfHwgIXN0cmNtcChlbnRyeS0+ZF9uYW1lLCAiLi4iKSkKKysgICAgICBjb250aW51ZTsKKysgICAgCisrICAgIC8qIERPUyB3b3VsZG4ndCBsaWtlIGEgdHlwaWNhbCB1bml4IC4gKGRvdCkgZmlsZSwgc28gd2Ugc2tpcCB0aG9zZSB0b28gKi8KKysgICAgaWYgKGVudHJ5LT5kX25hbWVbMF0gPT0gJy4nKSBjb250aW51ZTsKKysgCisrICAgIGJ1ZmZlciA9IG1hbGxvYyhzdHJsZW4oZGlybmFtZSkgKyBzdHJsZW4oZW50cnktPmRfbmFtZSkgKyAzKTsKKysgICAgaWYgKCFidWZmZXIpIGNvbnRpbnVlOworKworKyAgICBzcHJpbnRmKGJ1ZmZlciwgIiVzLyVzIiwgZGlybmFtZSwgZW50cnktPmRfbmFtZSk7CisrICAgIGlmICghc3RhdChidWZmZXIsICZzdCkpIHsKKysgICAgICBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgCisrCWFkZF9kaXJlY3RvcnkoYnVmZmVyLCBuZXdkaXIpOworKyAgICAgIGVsc2UgaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkpIHsKKysJdW5zaWduZWQgY2hhciBhdHRyaWIgPSBjaGVja19hdHRyaWJfZmlsZShkaXJuYW1lLCBlbnRyeS0+ZF9uYW1lKTsKKysJYWRkX2ZpbGUoYnVmZmVyLCBuZXdkaXIsIGF0dHJpYik7CisrICAgICAgfQorKyAgICB9CisrCisrICAgIGZyZWUoYnVmZmVyKTsKKysgIH0KKysKKysgIGNsb3NlZGlyKGRpcik7CisrICBpZiAobmV3ZGlyKSBmcmVlKG5ld2Rpcik7CisrfQorIAorIC8qIFJlcG9ydCB0aGUgY29tbWFuZCB1c2FnZSBhbmQgcmV0dXJuIGEgZmFpbHVyZSBlcnJvciBjb2RlICovCisgCitAQCAtMTQyMyw3ICsxOTAzLDcgQEAKKyAgICAgICAgWy1tIGJvb3QtbXNnLWZpbGVdIFstbiB2b2x1bWUtbmFtZV0gWy1pIHZvbHVtZS1pZF0gWy1CIGJvb3Rjb2RlXVxuXAorICAgICAgICBbLXMgc2VjdG9ycy1wZXItY2x1c3Rlcl0gWy1TIGxvZ2ljYWwtc2VjdG9yLXNpemVdIFstZiBudW1iZXItb2YtRkFUc11cblwKKyAgICAgICAgWy1oIGhpZGRlbi1zZWN0b3JzXSBbLUYgZmF0LXNpemVdIFstciByb290LWRpci1lbnRyaWVzXSBbLVIgcmVzZXJ2ZWQtc2VjdG9yc11cblwKKy0gICAgICAgL2Rldi9uYW1lIFtibG9ja3NdXG4iKTsKKysgICAgICAgWy1kIGRpcmVjdG9yeV0gL2Rldi9uYW1lIFtibG9ja3NdXG4iKTsKKyB9CisgCisgLyoKK0BAIC0xNDYzLDYgKzE5NDMsOCBAQAorICAgaW50IGM7CisgICBjaGFyICp0bXA7CisgICBjaGFyICpsaXN0ZmlsZSA9IE5VTEw7CisrICBjaGFyICpkaXJuYW1lID0gTlVMTDsKKysKKyAgIEZJTEUgKm1zZ2ZpbGU7CisgICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworICAgaW50IGkgPSAwLCBwb3MsIGNoOworQEAgLTE0ODMsNyArMTk2NSw3IEBACisgICBwcmludGYgKCIlcyAiIFZFUlNJT04gIiAoIiBWRVJTSU9OX0RBVEUgIilcbiIsCisgCSAgIHByb2dyYW1fbmFtZSk7CisgCistICB3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJBYmNDZjpGOklpOmw6bTpuOnI6UjpzOlM6djpCOiIpKSAhPSBFT0YpCisrICB3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJBYmNDZDpmOkY6SWk6bDptOm46cjpSOnM6Uzp2OkI6IikpICE9IEVPRikKKyAgICAgLyogU2NhbiB0aGUgY29tbWFuZCBsaW5lIGZvciBvcHRpb25zICovCisgICAgIHN3aXRjaCAoYykKKyAgICAgICB7CitAQCAtMTUwOCw2ICsxOTkwLDEwIEBACisgCWNyZWF0ZSA9IFRSVUU7CisgCWJyZWFrOworIAorKyAgY2FzZSAnZCc6CisrCWRpcm5hbWUgPSBvcHRhcmc7CisrCWJyZWFrOworKworICAgICAgIGNhc2UgJ2YnOgkJLyogZiA6IENob29zZSBudW1iZXIgb2YgRkFUcyAqLworIAlucl9mYXRzID0gKGludCkgc3RydG9sIChvcHRhcmcsICZ0bXAsIDApOworIAlpZiAoKnRtcCB8fCBucl9mYXRzIDwgMSB8fCBucl9mYXRzID4gNCkKK0BAIC0xODExLDggKzIyOTcsMTAgQEAKKyAgIGVsc2UgaWYgKGxpc3RmaWxlKQorICAgICBnZXRfbGlzdF9ibG9ja3MgKGxpc3RmaWxlKTsKKyAKKy0gIHdyaXRlX3RhYmxlcyAoKTsJCS8qIFdyaXRlIHRoZSBmaWxlIHN5c3RlbSB0YWJsZXMgYXdheSEgKi8KKyAKKysgIGlmIChkaXJuYW1lKSBhZGRfcm9vdF9kaXJlY3RvcnkoZGlybmFtZSk7CisrCisrICB3cml0ZV90YWJsZXMgKCk7CQkvKiBXcml0ZSB0aGUgZmlsZSBzeXN0ZW0gdGFibGVzIGF3YXkhICovICAKKyAgIGV4aXQgKDApOwkJCS8qIFRlcm1pbmF0ZSB3aXRoIG5vIGVycm9ycyEgKi8KKyB9CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbXNkb3NfZmF0MTJfdW5kZWZpbmVkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL21zZG9zX2ZhdDEyX3VuZGVmaW5lZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWU4YTc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL21zZG9zX2ZhdDEyX3VuZGVmaW5lZC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitGaXggYSBjb21waWxhdGlvbiBlcnJvciBkdWUgdG8gdW5kZWZpbmVkIE1TRE9TX0ZBVDEyLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KK1dlJ3JlIHRyYWNraW5nIGFuIG9sZCByZWxlYXNlIG9mIGRvc2ZzdG9vbHMgZHVlIHRvIGxpY2Vuc2luZyBpc3N1ZXMuCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gZG9zZnN0b29scy0yLjEwL2Rvc2ZzY2svYm9vdC5jLm9yaWcJMjAwNC0xMC0xNSAwODo1MTo0Mi4zOTQ3MjUxNzYgLTA2MDAKKysrKyBkb3Nmc3Rvb2xzLTIuMTAvZG9zZnNjay9ib290LmMJMjAwNC0xMC0xNSAwODo0OToxNi43NzY4NjI0NTYgLTA2MDAKK0BAIC0xNCw2ICsxNCw5IEBACisgI2luY2x1ZGUgImlvLmgiCisgI2luY2x1ZGUgImJvb3QuaCIKKyAKKysjaWZuZGVmIE1TRE9TX0ZBVDEyCisrI2RlZmluZSBNU0RPU19GQVQxMiA0MDg0CisrI2VuZGlmCisgCisgI2RlZmluZSBST1VORF9UT19NVUxUSVBMRShuLG0pICgobikgJiYgKG0pID8gKG4pKyhtKS0xLSgobiktMSklKG0pIDogMCkKKyAgICAgLyogZG9uJ3QgZGl2aWRlIGJ5IHplcm8gKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ub2ZhdDMyX2F1dG9zZWxlY3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbm9mYXQzMl9hdXRvc2VsZWN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OGE3NmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbm9mYXQzMl9hdXRvc2VsZWN0LnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0ZBVDMyIGFwcGVhcnMgdG8gYmUgYnJva2VuIHdoZW4gdXNlZCB3aXRoIHRoZSAtZCBvcHRpb24gdG8gcG9wdWxhdGUgdGhlIG1zZG9zCitpbWFnZS4gVGhpcyBkaXNhYmxlcyB0aGUgRkFUMzIgYXV0b3NlbGVjdGlvbiBjb2RlIHdoaWNoIG1lYW5zIHdlIGRvbid0IGdldAorYnJva2VuIGltYWdlcyB3aXRoIHRoZSAtZCBvcHRpb24uIEl0IGNhbiBzdGlsbCBiZSBlbmFibGVkIG9uIHRoZSBjb21tYW5kbGluZQorYXQgdGhlIHVzZXJzIG93biByaXNrLiBUaGlzIGNoYW5nZXMgdXMgYmFjayB0byB0aGUgMi4xMCB2ZXJzaW9uJ3MgYmVoYXZpb3VyCit3aGljaCB3YXMga25vd24gdG8gd29yayB3ZWxsIGV2ZW4gd2l0aCBsYXJnZSBpbWFnZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGVwZW5kcyBvbiBvdGhlciBwYXRjaGVzIHdlIGFwcGx5XQorCitSUCAyMDExLzEyLzEzCisKK0luZGV4OiBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9ta2Rvc2ZzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkb3Nmc3Rvb2xzLTIuMTEub3JpZy9ta2Rvc2ZzL21rZG9zZnMuYwkyMDExLTEyLTEzIDEzOjU0OjM3LjUzODUwOTM5MSArMDAwMAorKysrIGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYwkyMDExLTEyLTEzIDEzOjU1OjEwLjI1ODUwODYzMSArMDAwMAorQEAgLTgwOCwxMCArODA4LDEyIEBACisgICAgICAgYnMubWVkaWEgPSAoY2hhcikgMHhmODsgLyogU2V0IHVwIHRoZSBtZWRpYSBkZXNjcmlwdG9yIGZvciBhIGhhcmQgZHJpdmUgKi8KKyAgICAgICBicy5kaXJfZW50cmllc1swXSA9IChjaGFyKSAwOwkvKiBEZWZhdWx0IHRvIDUxMiBlbnRyaWVzICovCisgICAgICAgYnMuZGlyX2VudHJpZXNbMV0gPSAoY2hhcikgMjsKKysvKgorICAgICAgIGlmICghc2l6ZV9mYXQgJiYgYmxvY2tzKlNFQ1RPUlNfUEVSX0JMT0NLID4gMTA2NDk2MCkgeworIAkgIGlmICh2ZXJib3NlKSBwcmludGYoIkF1dG8tc2VsZWN0aW5nIEZBVDMyIGZvciBsYXJnZSBmaWxlc3lzdGVtXG4iKTsKKyAJICBzaXplX2ZhdCA9IDMyOworICAgICAgIH0KKysqLworICAgICAgIGlmIChzaXplX2ZhdCA9PSAzMikgeworIAkgIC8qIEZvciBGQVQzMiwgdHJ5IHRvIGRvIHRoZSBzYW1lIGFzIE0kJ3MgZm9ybWF0IGNvbW1hbmQ6CisgCSAgICogZnMgc2l6ZSA8IDI1Nk06IDAuNWsgY2x1c3RlcnMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29sc18yLjExLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzXzIuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVlYzQ4OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29sc18yLjExLmJiCkBAIC0wLDAgKzEsMzggQEAKKyMgZG9zZnN0b29scyBPRSBidWlsZCBmaWxlCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA2LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCitTVU1NQVJZID0gIkRPUyBGQVQgRmlsZXN5c3RlbSBVdGlsaXRpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vZGFuaWVsLWJhdW1hbm4uY2gvc29mdHdhcmUvZG9zZnN0b29scy8iCisKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9ta2Rvc2ZzL0NPUFlJTkc7bWQ1PWNiZTY3ZjA4ZDY4ODNiZmY1ODdmNjE1ZjBjYzgxYWE4IgorUFIgPSAicjUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3BrZ3MuZmVkb3JhcHJvamVjdC5vcmcvcmVwby9wa2dzLyR7QlBOfS8ke0JQfS5zcmMudGFyLmd6LzQwN2Q0MDVhZGU0MTBmNzU5N2QzNjRhYjVkYzhjOWY2LyR7QlB9LnNyYy50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbWtkb3Nmcy1ib290Y29kZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ta2Rvc2ZzLWRpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbGlnbm1lbnRfaGFjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tc2Rvc19mYXQxMl91bmRlZmluZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZG9zZnN0b29scy1tc2Rvc19mcy10eXBlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlLWxpbnV4LXR5cGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vZmF0MzJfYXV0b3NlbGVjdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfcG9wdWxhdGVkX2Rvc2ZzX2NyZWF0aW9uLnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwMS1JbmNsdWRlLWZjbnRsLmgtZm9yLWdldHRpbmctbG9mZl90LWRlZmluaXRpb24ucGF0Y2ggXAorCSAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjQwN2Q0MDVhZGU0MTBmNzU5N2QzNjRhYjVkYzhjOWY2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBlYWM2ZDEyMzg4YjNkOWVkNzg2ODQ1MjljMWIwZDkzNDZmYTJhYmJlNDA2YzRkNGEzZWI1YTAyM2M5OGE0ODQiCisKKyMgTWFrZWZpbGUgc2V0cyB0aGlzLCBidXQgd2UgY2xvYmJlciBpdHMgQ0ZMQUdTLCBzbworIyBhZGQgdGhpcyBpbiBoZXJlIHRvIGZvciBzdXJlIGFsbG93IGZvciBiaWcgZmlsZXMuCisjCitDRkxBR1NfYXBwZW5kID0gIiAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IgorQ0ZMQUdTX2FwcGVuZF9saWJjLW11c2wgPSAiIC1EX0dOVV9TT1VSQ0UiCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgIlBSRUZJWD0ke0R9IiAiU0JJTkRJUj0ke0R9JHtiYXNlX3NiaW5kaXJ9IiBcCisJCSAgICJNQU5ESVI9JHtEfSR7bWFuZGlyfS9tYW44IiBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzXzMuMC4yOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29sc18zLjAuMjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxMzFjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29sc18zLjAuMjguYmIKQEAgLTAsMCArMSwyNCBAQAorIyBkb3Nmc3Rvb2xzIE9FIGJ1aWxkIGZpbGUKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgQ29weXJpZ2h0IChDKSAyMDE1LCBTw4PCtnJlbiBCcmlua21hbm4gPHNvZXJlbi5icmlua21hbm5AZ21haWw+ICBBbGwgUmlnaHRzIFJlc2VydmVkCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCitTVU1NQVJZID0gIkRPUyBGQVQgRmlsZXN5c3RlbSBVdGlsaXRpZXMiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vZG9zZnN0b29scy9kb3Nmc3Rvb2xzIgorCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9yZWxlYXNlcy9kb3dubG9hZC92My4wLjI4L2Rvc2ZzdG9vbHMtMy4wLjI4LnRhci54eiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YTA0N2E2YzY1MTg2YjllYmIxODUzNzA5YWRiMzZkYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlZTk1OTEzMDQ0ZWNmMjcxOWI2M2VhMTEyMTI5MTc2NDk3MDlhNmU1MzIwOWE3MmQ2MjIxMzVhYWE4NTE3ZWUyIgorCitGSUxFU18ke1BOfSA9ICIke2Jhc2Vfc2JpbmRpcn0iCitGSUxFU18ke1BOfS1kb2MgPSAiJHttYW5kaXJ9ICR7ZG9jZGlyfSIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAiUFJFRklYPSR7RH0ke3ByZWZpeH0iICJTQklORElSPSR7RH0ke2Jhc2Vfc2JpbmRpcn0iIFwKKwkJICAgIk1BTkRJUj0ke0R9JHttYW5kaXJ9IiAiRE9DRElSPSR7RH0ke2RvY2Rpcn0iIGluc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWVjMmNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLmluYwpAQCAtMCwwICsxLDc5IEBACitTVU1NQVJZID0gIlBhY2thZ2UgbWFpbnRlbmFuY2Ugc3lzdGVtIGZyb20gRGViaWFuIgorTElDRU5TRSA9ICJHUEx2Mi4wKyIKK1NFQ1RJT04gPSAiYmFzZSIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vZC9kcGtnL2Rwa2dfJHtQVn0udGFyLnh6IgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGU6Ly8wMDAxLVdoZW4tcnVubmluZy1kb19wYWNrYWdlX3dyaXRlX2RlYi13ZS1oYXZlLXRyZWVzLW9mLWgucGF0Y2giCisKK0RFUEVORFMgPSAiemxpYiBiemlwMiBwZXJsIG5jdXJzZXMiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJiemlwMi1yZXBsYWNlbWVudC1uYXRpdmUgemxpYi1uYXRpdmUgdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzLW5hdGl2ZSBnZXR0ZXh0LW5hdGl2ZSBwZXJsLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gIiR7VklSVFVBTC1SVU5USU1FX3VwZGF0ZS1hbHRlcm5hdGl2ZXN9IHh6IHJ1bi1wb3N0aW5zdHMgcGVybCIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJ4ei1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGVybG5hdGl2ZSBwa2djb25maWcgc3lzdGVtZAorCitweXRob24gKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdTWVNURU1EX1NFUlZJQ0VfJXMnICUgKHBuKSwgJ2Rwa2ctY29uZmlndXJlLnNlcnZpY2UnKQorfQorCitleHBvcnQgUEVSTCA9ICIke2JpbmRpcn0vcGVybCIKK1BFUkxfY2xhc3MtbmF0aXZlID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS9wZXJsIgorCitleHBvcnQgUEVSTF9MSUJESVIgPSAiJHtsaWJkaXJ9L3BlcmwiCitQRVJMX0xJQkRJUl9jbGFzcy1uYXRpdmUgPSAiJHtsaWJkaXJ9L3BlcmwtbmF0aXZlL3BlcmwiCisKK0VYVFJBX09FQ09ORiA9ICJcCisJCS0tZGlzYWJsZS1kc2VsZWN0IFwKKwkJLS1lbmFibGUtc3RhcnQtc3RvcC1kYWVtb24gXAorCQktLXdpdGgtemxpYiBcCisJCS0td2l0aC1iejIgXAorCQktLXdpdGhvdXQtbGlibHptYSBcCisJCS0td2l0aG91dC1zZWxpbnV4IFwKKwkJIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgVEFSPXRhciIKKworZG9fY29uZmlndXJlICgpIHsKKyAgICBlY2hvID4+ICR7U30vbTQvY29tcGlsZXIubTQKKyAgICBzZWQgLWkgLWUgJ3MjUEVSTF9MSUJESVI9LiokI1BFUkxfTElCRElSPSIke2xpYmRpcn0vcGVybCIjJyAke1N9L2NvbmZpZ3VyZQorICAgIGF1dG90b29sc19kb19jb25maWd1cmUKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWlmIFsgIiR7UE59IiA9ICJkcGtnLW5hdGl2ZSIgXTsgdGhlbgorCQkjIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgZG9lc24ndCBoYXZlIGFuIG9mZmxpbmUgbW9kZQorCQlybSAke0R9JHtiaW5kaXJ9L3VwZGF0ZS1hbHRlcm5hdGl2ZXMKKwkJc2VkIC1pIC1lICdzfF4jIS4qJHtiaW5kaXJ9L3BlcmwtbmF0aXZlLiovcGVybHwjIS91c3IvYmluL2VudiBuYXRpdmVwZXJsfCcgJHtEfSR7YmluZGlyfS9kcGtnLSoKKwllbHNlCisJCXNlZCAtaSAtZSAnc3xeIyEuKiR7YmluZGlyfS9wZXJsLW5hdGl2ZS4qL3Blcmx8IyEvdXNyL2Jpbi9lbnYgcGVybHwnICR7RH0ke2JpbmRpcn0vZHBrZy0qCisJZmkKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJ2ZhbHNlJywndHJ1ZScsZCl9O3RoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCQlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJCQktZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCisJCQktZSAncyxAQklORElSQCwke2JpbmRpcn0sZycgXAorCQkJLWUgJ3MsQFNZU1RFTURfVU5JVERJUkAsJHtzeXN0ZW1kX3VuaXRkaXJ9LGcnIFwKKwkJCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2Rwa2ctY29uZmlndXJlLnNlcnZpY2UKKwlmaQorfQorCitQUk9WID0gInZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcyIKK1BST1ZfY2xhc3MtbmF0aXZlID0gIiIKKworUFJPVklERVMgKz0gIiR7UFJPVn0iCisKK1BBQ0tBR0VTID0rICJ1cGRhdGUtYWx0ZXJuYXRpdmVzLWRwa2ciCitGSUxFU191cGRhdGUtYWx0ZXJuYXRpdmVzLWRwa2cgPSAiJHtiaW5kaXJ9L3VwZGF0ZS1hbHRlcm5hdGl2ZXMgJHtsb2NhbHN0YXRlZGlyfS9saWIvZHBrZy9hbHRlcm5hdGl2ZXMgJHtzeXNjb25mZGlyfS9hbHRlcm5hdGl2ZXMiCitSUFJPVklERVNfdXBkYXRlLWFsdGVybmF0aXZlcy1kcGtnICs9ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzIgorCitQQUNLQUdFUyArPSAiJHtQTn0tcGVybCIKK0ZJTEVTXyR7UE59LXBlcmwgPSAiJHtsaWJkaXJ9L3BlcmwiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAxLVdoZW4tcnVubmluZy1kb19wYWNrYWdlX3dyaXRlX2RlYi13ZS1oYXZlLXRyZWVzLW9mLWgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMS1XaGVuLXJ1bm5pbmctZG9fcGFja2FnZV93cml0ZV9kZWItd2UtaGF2ZS10cmVlcy1vZi1oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NjdlZjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMS1XaGVuLXJ1bm5pbmctZG9fcGFja2FnZV93cml0ZV9kZWItd2UtaGF2ZS10cmVlcy1vZi1oLnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK0Zyb20gZDE0ZmZkNzg2OTkzZGE2MGNhODRjNDgxMmRhOGE2NTk0YThjNzY0ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNiBBdWcgMjAxNSAxNTo0ODoxMyArMDMwMAorU3ViamVjdDogW1BBVENIIDEvNV0gV2hlbiBydW5uaW5nIGRvX3BhY2thZ2Vfd3JpdGVfZGViLCB3ZSBoYXZlIHRyZWVzIG9mCisgaGFyZGxpbmtlZCBmaWxlcyBzdWNoIGFzIHRoZSBkYmcgc291cmNlIGZpbGVzIGluICR7UE59LWRiZy4gSWYgc29tZXRoaW5nCisgbWFrZXMgYW5vdGhlciBjb3B5IG9mIG9uZSBvZiB0aG9zZSBmaWxlcyAob3IgZGVsZXRlcyBvbmUpLCB0aGUgbnVtYmVyIG9mCisgbGlua3MgYSBmaWxlIGhhcyBjaGFuZ2VzIGFuZCB0YXIgY2FuIG5vdGljZSB0aGlzLCBlLmcuOgorCit8IERFQlVHOiBFeGVjdXRpbmcgcHl0aG9uIGZ1bmN0aW9uIGRvX3BhY2thZ2VfZGViCit8IGRwa2ctZGViOiBidWlsZGluZyBwYWNrYWdlIGBzZWQtcHRlc3QnIGluIGAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3NlZC80LjIuMi1yMC9kZXBsb3ktZGVicy9pNTg2L3NlZC1wdGVzdF80LjIuMi1yMC4zX2kzODYuZGViJy4KK3wgdGFyOiAuL3Vzci9saWIvc2VkL3B0ZXN0L3Rlc3RzdWl0ZS90c3QtcmVnZXgyOiBmaWxlIGNoYW5nZWQgYXMgd2UgcmVhZCBpdAorfCBkcGtnLWRlYjogZXJyb3I6IHN1YnByb2Nlc3MgdGFyIC1jZiByZXR1cm5lZCBlcnJvciBleGl0IHN0YXR1cyAxCisKK1RhciByZXR1cm5zIGFuIGVycm9yIG9mIDEgd2hlbiBmaWxlcyAnY2hhbmdlJyBhbmQgb3RoZXIgZXJyb3JzIGNvZGVzCitpbiBvdGhlciBlcnJvciBjYXNlcy4gV2UgdHdlYWsgZHBrZy1kZWIgaGVyZSBzbyB0aGF0IGl0IGlnbm9yZXMgYW4gZXhpdAorY29kZSBvZiAxIGZyb20gdGFyLiBUaGUgZmlsZXMgZG9uJ3QgcmVhbGx5IGNoYW5nZSAoYW5kIHdlIGhhdmUgbG9ja2luZyBpbgorcGxhY2UgdG8gYXZvaWQgdGhhdCBraW5kIG9mIGlzc3VlKS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitSUCAyMDE1LzMvMjcKKy0tLQorIGRwa2ctZGViL2J1aWxkLmMgfCAxMSArKysrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kcGtnLWRlYi9idWlsZC5jIGIvZHBrZy1kZWIvYnVpbGQuYworaW5kZXggZWEzZDg2MS4uMTU4OTkyNyAxMDA2NDQKKy0tLSBhL2Rwa2ctZGViL2J1aWxkLmMKKysrKyBiL2Rwa2ctZGViL2J1aWxkLmMKK0BAIC00NTgsNyArNDU4LDcgQEAgZG9fYnVpbGQoY29uc3QgY2hhciAqY29uc3QgKmFyZ3YpCisgICBjaGFyICpkZWJhcjsKKyAgIGNoYXIgKnRmYnVmOworICAgaW50IGFyZmQ7CistICBpbnQgcDFbMl0sIHAyWzJdLCBnemZkOworKyAgaW50IHAxWzJdLCBwMlsyXSwgZ3pmZCwgcmM7CisgICBwaWRfdCBjMSwgYzI7CisgCisgICAvKiBEZWNvZGUgb3VyIGFyZ3VtZW50cy4gKi8KK0BAIC01MzgsNyArNTM4LDkgQEAgZG9fYnVpbGQoY29uc3QgY2hhciAqY29uc3QgKmFyZ3YpCisgICB9CisgICBjbG9zZShwMVswXSk7CisgICBzdWJwcm9jX3JlYXAoYzIsIF8oIjxjb21wcmVzcz4gZnJvbSB0YXIgLWNmIiksIDApOworLSAgc3VicHJvY19yZWFwKGMxLCAidGFyIC1jZiIsIDApOworKyAgcmMgPSBzdWJwcm9jX3JlYXAoYzEsICJ0YXIgLWNmIiwgU1VCUFJPQ19SRVRFUlJPUik7CisrICBpZiAocmMgJiYgcmMgIT0gMSkKKysgICAgb2hzaGl0ZShfKCJzdWJwcm9jZXNzICVzIHJldHVybmVkIGVycm9yIGV4aXQgc3RhdHVzICVkIiksICJ0YXIgLWNmIiwgcmMpOworIAorICAgaWYgKGxzZWVrKGd6ZmQsIDAsIFNFRUtfU0VUKSkKKyAgICAgb2hzaGl0ZShfKCJmYWlsZWQgdG8gcmV3aW5kIHRlbXBvcmFyeSBmaWxlICglcykiKSwgXygiY29udHJvbCBtZW1iZXIiKSk7CitAQCAtNjI2LDcgKzYyOCwxMCBAQCBkb19idWlsZChjb25zdCBjaGFyICpjb25zdCAqYXJndikKKyAgIC8qIEFsbCBkb25lLCBjbGVhbiB1cCB3YWl0IGZvciB0YXIgYW5kIDxjb21wcmVzcz4gdG8gZmluaXNoIHRoZWlyIGpvYi4gKi8KKyAgIGNsb3NlKHAxWzFdKTsKKyAgIHN1YnByb2NfcmVhcChjMiwgXygiPGNvbXByZXNzPiBmcm9tIHRhciAtY2YiKSwgMCk7CistICBzdWJwcm9jX3JlYXAoYzEsICJ0YXIgLWNmIiwgMCk7CisrICByYyA9IHN1YnByb2NfcmVhcChjMSwgInRhciAtY2YiLCBTVUJQUk9DX1JFVEVSUk9SKTsKKysgIGlmIChyYyAmJiByYyAhPSAxKQorKyAgICBvaHNoaXRlKF8oInN1YnByb2Nlc3MgJXMgcmV0dXJuZWQgZXJyb3IgZXhpdCBzdGF0dXMgJWQiKSwgInRhciAtY2YiLCByYyk7CisrCisgICAvKiBPa2F5LCB3ZSBoYXZlIGRhdGEudGFyIGFzIHdlbGwgbm93LCBhZGQgaXQgdG8gdGhlIGFyIHdyYXBwZXIuICovCisgICBpZiAoZGViX2Zvcm1hdC5tYWpvciA9PSAyKSB7CisgICAgIGNoYXIgZGF0YW1lbWJlclsxNiArIDFdOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMi1BZGFwdC10by1saW51eC13cnMta2VybmVsLXZlcnNpb24td2hpY2gtaGFzLWNoYXJhY3RlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDItQWRhcHQtdG8tbGludXgtd3JzLWtlcm5lbC12ZXJzaW9uLXdoaWNoLWhhcy1jaGFyYWN0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzFhNmEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDItQWRhcHQtdG8tbGludXgtd3JzLWtlcm5lbC12ZXJzaW9uLXdoaWNoLWhhcy1jaGFyYWN0ZS5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIGI0ZWE1NDE1OGMzOTk4NzRlMTIzOTRlYmM5MWFmZTk4OTU0Njk1ZTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjYgQXVnIDIwMTUgMTY6MTY6MTYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzVdIEFkYXB0IHRvIGxpbnV4LXdycyBrZXJuZWwgdmVyc2lvbiwgd2hpY2ggaGFzIGNoYXJhY3RlcgorICdfJyBpbnNpZGUuIFJlbW92ZSB0aGUgZmlyc3QtY2hhci1kaWdpdC1jaGVjayAoYXMgdGhlIDEuMTUuOC41IHZlcnNpb24gZG9lcykuCisKK1NpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBsaWIvZHBrZy9wYXJzZWhlbHAuYyB8IDYgKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9kcGtnL3BhcnNlaGVscC5jIGIvbGliL2Rwa2cvcGFyc2VoZWxwLmMKK2luZGV4IDc5YjI5MDguLjc3NThhYTUgMTAwNjQ0CistLS0gYS9saWIvZHBrZy9wYXJzZWhlbHAuYworKysrIGIvbGliL2Rwa2cvcGFyc2VoZWxwLmMKK0BAIC0yMzUsMTQgKzIzNSwxMiBAQCBwYXJzZXZlcnNpb24oc3RydWN0IGRwa2dfdmVyc2lvbiAqcnZlcnNpb24sIGNvbnN0IGNoYXIgKnN0cmluZywKKyAKKyAgIC8qIFhYWDogV291bGQgYmUgZmFzdGVyIHRvIHVzZSBzb21ldGhpbmcgbGlrZSBjaXN2ZXJzaW9uIGFuZCBjaXNyZXZpc2lvbi4gKi8KKyAgIHB0ciA9IHJ2ZXJzaW9uLT52ZXJzaW9uOworLSAgaWYgKCpwdHIgJiYgIWNfaXNkaWdpdCgqcHRyKyspKQorLSAgICByZXR1cm4gZHBrZ19wdXRfd2FybihlcnIsIF8oInZlcnNpb24gbnVtYmVyIGRvZXMgbm90IHN0YXJ0IHdpdGggZGlnaXQiKSk7CisgICBmb3IgKDsgKnB0cjsgcHRyKyspIHsKKy0gICAgaWYgKCFjX2lzZGlnaXQoKnB0cikgJiYgIWNfaXNhbHBoYSgqcHRyKSAmJiBzdHJjaHIoIi4tK346IiwgKnB0cikgPT0gTlVMTCkKKysgICAgaWYgKCFjX2lzZGlnaXQoKnB0cikgJiYgIWNfaXNhbHBoYSgqcHRyKSAmJiBzdHJjaHIoIi4tK346XyIsICpwdHIpID09IE5VTEwpCisgICAgICAgcmV0dXJuIGRwa2dfcHV0X3dhcm4oZXJyLCBfKCJpbnZhbGlkIGNoYXJhY3RlciBpbiB2ZXJzaW9uIG51bWJlciIpKTsKKyAgIH0KKyAgIGZvciAocHRyID0gcnZlcnNpb24tPnJldmlzaW9uOyAqcHRyOyBwdHIrKykgeworLSAgICBpZiAoIWNfaXNkaWdpdCgqcHRyKSAmJiAhY19pc2FscGhhKCpwdHIpICYmIHN0cmNocigiLit+IiwgKnB0cikgPT0gTlVMTCkKKysgICAgaWYgKCFjX2lzZGlnaXQoKnB0cikgJiYgIWNfaXNhbHBoYSgqcHRyKSAmJiBzdHJjaHIoIi4tK35fIiwgKnB0cikgPT0gTlVMTCkKKyAgICAgICByZXR1cm4gZHBrZ19wdXRfd2FybihlcnIsIF8oImludmFsaWQgY2hhcmFjdGVyIGluIHJldmlzaW9uIG51bWJlciIpKTsKKyAgIH0KKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDMtT3VyLXByZS1wb3N0aW5zdHMtZXhwZWN0LUQtdG8tYmUtc2V0LXdoZW4tcnVubmluZy1pbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAzLU91ci1wcmUtcG9zdGluc3RzLWV4cGVjdC1ELXRvLWJlLXNldC13aGVuLXJ1bm5pbmctaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY3N2M2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAzLU91ci1wcmUtcG9zdGluc3RzLWV4cGVjdC1ELXRvLWJlLXNldC13aGVuLXJ1bm5pbmctaW4ucGF0Y2gKQEAgLTAsMCArMSw2MCBAQAorRnJvbSAyNDIyOTk3MTQ5MjUxNWI2NGM4MWU4YzYzOTJlNWRmYmRjMjJiNDRjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI2IEF1ZyAyMDE1IDE2OjI1OjQ1ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMy81XSBPdXIgcHJlL3Bvc3RpbnN0cyBleHBlY3QgJEQgdG8gYmUgc2V0IHdoZW4gcnVubmluZyBpbiBhCisgc3lzcm9vdCBhbmQgZG9uJ3QgZXhwZWN0IGEgY2hyb290LiBUaGlzIG1hdGNoZXMgdXAgb3VyIHN5c3RlbSBleHBlY3RhdGlvbnMKKyB3aXRoIHdoYXQgZHBrZyBkb2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIFNwZWNpZmljXQorCitSUCAyMDExLzEyLzA3CistLS0KKyBzcmMvc2NyaXB0LmMgfCAzMSArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMjkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvc2NyaXB0LmMgYi9zcmMvc2NyaXB0LmMKK2luZGV4IGE5NTgxNDUuLjI0YzQ5ZjkgMTAwNjQ0CistLS0gYS9zcmMvc2NyaXB0LmMKKysrKyBiL3NyYy9zY3JpcHQuYworQEAgLTEwMCwzNiArMTAwLDkgQEAgbWFpbnRzY3JpcHRfcHJlX2V4ZWMoc3RydWN0IGNvbW1hbmQgKmNtZCkKKyAJc2l6ZV90IGluc3RkaXJsID0gc3RybGVuKGluc3RkaXIpOworIAorIAlpZiAoKmluc3RkaXIpIHsKKy0JCWlmIChzdHJuY21wKGFkbWluZGlyLCBpbnN0ZGlyLCBpbnN0ZGlybCkgIT0gMCkKKy0JCQlvaHNoaXQoXygiYWRtaW5kaXIgbXVzdCBiZSBpbnNpZGUgaW5zdGRpciBmb3IgZHBrZyB0byB3b3JrIHByb3Blcmx5IikpOworLQkJaWYgKHNldGVudigiRFBLR19BRE1JTkRJUiIsIGFkbWluZGlyICsgaW5zdGRpcmwsIDEpIDwgMCkKKy0JCQlvaHNoaXRlKF8oInVuYWJsZSB0byBzZXRlbnYgZm9yIHN1YnByb2Nlc3NlcyIpKTsKKy0KKy0JCWlmIChjaHJvb3QoaW5zdGRpcikpCistCQkJb2hzaGl0ZShfKCJmYWlsZWQgdG8gY2hyb290IHRvICclLjI1MHMnIiksIGluc3RkaXIpOworLQl9CistCS8qIFN3aXRjaCB0byBhIGtub3duIGdvb2QgZGlyZWN0b3J5IHRvIGdpdmUgdGhlIG1haW50YWluZXIgc2NyaXB0CistCSAqIGEgc2FuZXIgZW52aXJvbm1lbnQsIGFsc28gbmVlZGVkIGFmdGVyIHRoZSBjaHJvb3QoKS4gKi8KKy0JaWYgKGNoZGlyKCIvIikpCistCQlvaHNoaXRlKF8oImZhaWxlZCB0byBjaGRpciB0byAnJS4yNTVzJyIpLCAiLyIpOworLQlpZiAoZGVidWdfaGFzX2ZsYWcoZGJnX3NjcmlwdHMpKSB7CistCQlzdHJ1Y3QgdmFyYnVmIGFyZ3MgPSBWQVJCVUZfSU5JVDsKKy0JCWNvbnN0IGNoYXIgKiphcmd2ID0gY21kLT5hcmd2OworLQorLQkJd2hpbGUgKCorK2FyZ3YpIHsKKy0JCQl2YXJidWZfYWRkX2NoYXIoJmFyZ3MsICcgJyk7CistCQkJdmFyYnVmX2FkZF9zdHIoJmFyZ3MsICphcmd2KTsKKy0JCX0KKy0JCXZhcmJ1Zl9lbmRfc3RyKCZhcmdzKTsKKy0JCWRlYnVnKGRiZ19zY3JpcHRzLCAiZm9yay9leGVjICVzICglcyApIiwgY21kLT5maWxlbmFtZSwKKy0JCSAgICAgIGFyZ3MuYnVmKTsKKy0JCXZhcmJ1Zl9kZXN0cm95KCZhcmdzKTsKKysJCXNldGVudigiRCIsIGluc3RkaXIsIDEpOworIAl9CistCWlmICghaW5zdGRpcmwpCistCQlyZXR1cm4gY21kLT5maWxlbmFtZTsKKy0KKy0JYXNzZXJ0KHN0cmxlbihjbWQtPmZpbGVuYW1lKSA+PSBpbnN0ZGlybCk7CistCXJldHVybiBjbWQtPmZpbGVuYW1lICsgaW5zdGRpcmw7CisrCXJldHVybiBjbWQtPmZpbGVuYW1lOworIH0KKyAKKyAvKioKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDQtVGhlLWx1dGltZXMtZnVuY3Rpb24tZG9lc24tdC13b3JrLXByb3Blcmx5LWZvci1hbGwtcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDA0LVRoZS1sdXRpbWVzLWZ1bmN0aW9uLWRvZXNuLXQtd29yay1wcm9wZXJseS1mb3ItYWxsLXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZjODVjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDA0LVRoZS1sdXRpbWVzLWZ1bmN0aW9uLWRvZXNuLXQtd29yay1wcm9wZXJseS1mb3ItYWxsLXMucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBhZGI2YmZkMGZlZWNlYWYwMzBkZjBkZWJlMzM0M2Q3ZjczZTcwOGEwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI2IEF1ZyAyMDE1IDE2OjI3OjQ1ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggNC81XSBUaGUgbHV0aW1lcyBmdW5jdGlvbiBkb2Vzbid0IHdvcmsgcHJvcGVybHkgZm9yIGFsbAorIHN5c3RlbXMuCisKK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIHNyYy9hcmNoaXZlcy5jIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvYXJjaGl2ZXMuYyBiL3NyYy9hcmNoaXZlcy5jCitpbmRleCBiZmY1ZjE0Li5iNzExMDEzIDEwMDY0NAorLS0tIGEvc3JjL2FyY2hpdmVzLmMKKysrKyBiL3NyYy9hcmNoaXZlcy5jCitAQCAtNDQ5LDggKzQ0OSw5IEBAIHRhcm9iamVjdF9zZXRfbXRpbWUoc3RydWN0IHRhcl9lbnRyeSAqdGUsIGNvbnN0IGNoYXIgKnBhdGgpCisgCisgICBpZiAodGUtPnR5cGUgPT0gVEFSX0ZJTEVUWVBFX1NZTUxJTkspIHsKKyAjaWZkZWYgSEFWRV9MVVRJTUVTCistICAgIGlmIChsdXRpbWVzKHBhdGgsIHR2KSAmJiBlcnJubyAhPSBFTk9TWVMpCisrLyogICAgaWYgKGx1dGltZXMocGF0aCwgdHYpICYmIGVycm5vICE9IEVOT1NZUykKKyAgICAgICBvaHNoaXRlKF8oImVycm9yIHNldHRpbmcgdGltZXN0YW1wcyBvZiAnJS4yNTVzJyIpLCBwYXRoKTsKKysqLworICNlbmRpZgorICAgfSBlbHNlIHsKKyAgICAgaWYgKHV0aW1lcyhwYXRoLCB0dikpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDA1LWRwa2ctY29tcGlsZXIubTQtcmVtb3ZlLVd2bGEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwNS1kcGtnLWNvbXBpbGVyLm00LXJlbW92ZS1XdmxhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZTk2ZjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwNS1kcGtnLWNvbXBpbGVyLm00LXJlbW92ZS1XdmxhLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Zyb20gMGFkN2JiYTgwZDViOTAzNTA4OWZmMmIyZjc3YTc3NGI1YjIwMTkxNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNiBBdWcgMjAxNSAxNjoyODo1OSArMDMwMAorU3ViamVjdDogW1BBVENIIDUvNV0gZHBrZy1jb21waWxlci5tNDogcmVtb3ZlIC1XdmxhCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1JlbW92ZSB0aGUgLVd2bGEgZmxhZyBmcm9tIHRoZSBzZXQgb2YgY29tcGlsZXIgd2FybmluZyBmbGFncywgc2luY2UgZ2NjCitvbiBvbGQgaG9zdCBzeXN0ZW1zIHN1Y2ggYXMgQ2VudE9TIDUuOCBkb2Vzbid0IHN1cHBvcnQgaXQsIGFuZCBpdAorY2F1c2VzIGEgYnVpbGQgZXJyb3IgZm9yIGRwa2ctbmF0aXZlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRG9ubiBTZWVsZXkgPGRvbm4uc2VlbGV5QHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorLS0tCisgbTQvZHBrZy1jb21waWxlci5tNCB8IDEgLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9tNC9kcGtnLWNvbXBpbGVyLm00IGIvbTQvZHBrZy1jb21waWxlci5tNAoraW5kZXggNjgyODU3Yy4uMjNlZDdkMCAxMDA2NDQKKy0tLSBhL200L2Rwa2ctY29tcGlsZXIubTQKKysrKyBiL200L2Rwa2ctY29tcGlsZXIubTQKK0BAIC01Miw3ICs1Miw2IEBAIEFDX0RFRlVOKFtEUEtHX0NIRUNLX0NPTVBJTEVSX1dBUk5JTkdTXSwgWworICAgRFBLR19DSEVDS19DT01QSUxFUl9GTEFHKFstV2xvZ2ljYWwtb3BdKQorICAgRFBLR19DSEVDS19DT01QSUxFUl9GTEFHKFstV2xvZ2ljYWwtbm90LXBhcmVudGhlc2VzXSkKKyAgIERQS0dfQ0hFQ0tfQ09NUElMRVJfRkxBRyhbLVdzd2l0Y2gtYm9vbF0pCistICBEUEtHX0NIRUNLX0NPTVBJTEVSX0ZMQUcoWy1XdmxhXSkKKyAgIERQS0dfQ0hFQ0tfQ09NUElMRVJfRkxBRyhbLVdpbml0LXNlbGZdKQorICAgRFBLR19DSEVDS19DT01QSUxFUl9GTEFHKFstV3dyaXRlLXN0cmluZ3NdKQorICAgRFBLR19DSEVDS19DT01QSUxFUl9GTEFHKFstV2Nhc3QtYWxpZ25dKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYWRkX2FybWViX3RyaXBsZXRfZW50cnkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYWRkX2FybWViX3RyaXBsZXRfZW50cnkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYyNzVkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9hZGRfYXJtZWJfdHJpcGxldF9lbnRyeS5wYXRjaApAQCAtMCwwICsxLDM4IEBACitBdXRob3I6IEtyaXNobmFuamFuYXBwYSwgSmFnYWRlZXNoIDxqYWdhZGVlc2gua3Jpc2huYW5qYW5hcHBhQGNhdml1bW5ldHdvcmtzLmNvbT4KK0RhdGU6ICAgV2VkIEFwciA4IDE4OjA4OjE0IDIwMTUgKzA1MzAKKworW1BBVENIXSBhZGQgYXJtZWIgdHJpcGxldCBlbnRyeSBpbnRvIHRyaXBsZXR0YWJsZS4KKworQ3Jvc3MtY29tcGxpbmcgZHBrZyBhcHBsaWNhdGlvbiBmb3IgYXJtZWIgZmFpbHMgd2l0aCBiZWxvdyBlcnJvcgorZHVyaW5nIGNvbmZpZ3VyZSB0YXNrLAorCisoc25pcCkKKyBjb25maWd1cmU6MjMxNDE6IGNoZWNraW5nIGRwa2cgY3B1IHR5cGUKKyBjb25maWd1cmU6MjMxNDg6IHJlc3VsdDogYXJtZWIKKyBjb25maWd1cmU6MjMxNTA6IFdBUk5JTkc6IGFybWViIG5vdCBmb3VuZCBpbiBjcHV0YWJsZQorIGNvbmZpZ3VyZToyMzE2MjogY2hlY2tpbmcgZHBrZyBvcGVyYXRpbmcgc3lzdGVtIHR5cGUKKyBjb25maWd1cmU6MjMxNjk6IHJlc3VsdDogbGludXgtZ251ZWFiaQorIGNvbmZpZ3VyZToyMzE3MTogV0FSTklORzogbGludXgtZ251ZWFiaSBub3QgZm91bmQgaW4gb3N0YWJsZQorIGNvbmZpZ3VyZToyMzE4MzogY2hlY2tpbmcgZHBrZyBhcmNoaXRlY3R1cmUgbmFtZQorIGNvbmZpZ3VyZToyMzE4OTogZXJyb3I6IGNhbm5vdCBkZXRlcm1pbmUgaG9zdCBkcGtnIGFyY2hpdGVjdHVyZQorLS0gQ1VUIC0tCisKK3RoZSByZXF1aXJlZCBjb21iaW5hdGlvbiBvZiAiZ251ZWFiaS1saW51eC1hcm1lYiIgd2FzIG5vdCBmb3VuZCBpbgordGhlIHRyaXBsZXR0YWJsZSBmaWxlIHRoZXJlYnkgcmV0dXJuaW5nIGRwa2dfYXJjaCBhcworZW1wdHkgaW4gY29uZmlndXJlIHNjcmlwdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtyaXNobmFuamFuYXBwYSwgSmFnYWRlZXNoIDxqYWdhZGVlc2gua3Jpc2huYW5qYW5hcHBhQGNhdml1bW5ldHdvcmtzLmNvbT4KKworZGlmZiAtTmF1cnAgZHBrZy0xLjE3LjIxX29yZy90cmlwbGV0dGFibGUgZHBrZy0xLjE3LjIxL3RyaXBsZXR0YWJsZQorLS0tIGRwa2ctMS4xNy4yMV9vcmcvdHJpcGxldHRhYmxlCTIwMTUtMDQtMDggMTc6MDg6NTIuMzcwNzU5MTcxICswNTMwCisrKysgZHBrZy0xLjE3LjIxL3RyaXBsZXR0YWJsZQkyMDE1LTA0LTA4IDE3OjA5OjEyLjQwNjc1MjA4MSArMDUzMAorQEAgLTksNiArOSw3IEBAIG11c2xlYWJpaGYtbGludXgtYXJtCW11c2wtbGludXgtYXJtaGYKKyBtdXNsLWxpbnV4LTxjcHU+CW11c2wtbGludXgtPGNwdT4KKyBnbnVlYWJpaGYtbGludXgtYXJtCWFybWhmCisgZ251ZWFiaS1saW51eC1hcm0JYXJtZWwKKytnbnVlYWJpLWxpbnV4LWFybWViCWFybWViCisgZ251YWJpbjMyLWxpbnV4LW1pcHM2NGVsCW1pcHNuMzJlbAorIGdudWFiaW4zMi1saW51eC1taXBzNjQJbWlwc24zMgorIGdudWFiaTY0LWxpbnV4LW1pcHM2NGVsCW1pcHM2NGVsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYXJjaF9wbS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9hcmNoX3BtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZDRjMGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYXJjaF9wbS5wYXRjaApAQCAtMCwwICsxLDIyIEBACitjb25maWd1cmUgY2Fubm90IGRldGVybWluZSB0aGUgcHJvcGVyIGNwdSwgb3MsIG9yCithcmNoaXRlY3R1cmUgZm9yIG1pcHM2NCwgYW5kIHBvc3NpYmx5IG90aGVyIGFyY2gncworYmVjYXVzZSBvZiBmYXVsdHkgY29kZSBhZGRlZCB0byBBcmNoLnBtIGluIHRoZSBsYXRlc3QKK3JlbGVhc2UgZnJvbSB1cHN0cmVhbS4gIFdlIHJlbW92ZSB0aGF0IGNvZGUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKb2UgU2xhdGVyIDxqc2xhdGVyQHdpbmRyaXZlci5jb20+CisKKworLS0tIGEvc2NyaXB0cy9EcGtnL0FyY2gucG0KKysrKyBiL3NjcmlwdHMvRHBrZy9BcmNoLnBtCitAQCAtMjMzLDkgKzIzMyw2IEBAIHN1YiByZWFkX3RyaXBsZXR0YWJsZSgpCisgCQkgICAgKG15ICRkdCA9ICRkZWJ0cmlwbGV0KSA9fiBzLzxjcHU+LyRfY3B1LzsKKyAJCSAgICAobXkgJGRhID0gJGRlYmFyY2gpID1+IHMvPGNwdT4vJF9jcHUvOworIAorLQkJICAgIG5leHQgaWYgZXhpc3RzICRkZWJhcmNoX3RvX2RlYnRyaXBsZXR7JGRhfQorLQkJICAgICAgICAgb3IgZXhpc3RzICRkZWJ0cmlwbGV0X3RvX2RlYmFyY2h7JGR0fTsKKy0KKyAJCSAgICAkZGViYXJjaF90b19kZWJ0cmlwbGV0eyRkYX0gPSAkZHQ7CisgCQkgICAgJGRlYnRyaXBsZXRfdG9fZGViYXJjaHskZHR9ID0gJGRhOworIAkJfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2Rwa2ctY29uZmlndXJlLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvZHBrZy1jb25maWd1cmUuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGIwNzg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2Rwa2ctY29uZmlndXJlLnNlcnZpY2UKQEAgLTAsMCArMSwxNyBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1kcGtnIGZpcnN0IGJvb3QgY29uZmlndXJlCitEZWZhdWx0RGVwZW5kZW5jaWVzPW5vCitBZnRlcj1zeXN0ZW1kLXJlbW91bnQtZnMuc2VydmljZSBzeXN0ZW1kLXRtcGZpbGVzLXNldHVwLnNlcnZpY2UgdG1wLm1vdW50CitCZWZvcmU9c3lzaW5pdC50YXJnZXQKKworW1NlcnZpY2VdCitUeXBlPW9uZXNob3QKK0Vudmlyb25tZW50RmlsZT0tQFNZU0NPTkZESVJAL2RlZmF1bHQvcG9zdGluc3QKK0V4ZWNTdGFydD0tQEJBU0VfQklORElSQC9zaCAtYyAiIGlmIFsgJFBPU1RJTlNUX0xPR0dJTkcgPSAnMScgXTsgdGhlbiBAQklORElSQC9kcGtnIC0tY29uZmlndXJlIC1hID4gJExPR0ZJTEUgMj4mMTsgZWxzZSBAQklORElSQC9kcGtnIC0tY29uZmlndXJlIC1hOyBmaSIKK0V4ZWNTdGFydFBvc3Q9QEJBU0VfQklORElSQC9zeXN0ZW1jdGwgZGlzYWJsZSBkcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlCitTdGFuZGFyZE91dHB1dD1zeXNsb2cKK1JlbWFpbkFmdGVyRXhpdD1ObworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PWJhc2ljLnRhcmdldAorV2FudGVkQnk9c3lzaW5pdC50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9maXgtYWJzLXJlZGVmaW5lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2ZpeC1hYnMtcmVkZWZpbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTczMzExYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9maXgtYWJzLXJlZGVmaW5lLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitkcGtnIGRlZmluZXM6CisjZGVmaW5lIERQS0dfQkVHSU5fREVDTFMJZXh0ZXJuICJDIiB7CisKK1RoYXQgbWFrZXMgaGVhZGVyIGNzdGRsaWIgaW5jbHVkZWQgaW4gYSBleHRlcm4gIkMiIGJsb2NrIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQKK2J5IGdjYyA0LjguIEl0IGZhaWxzIG9uIEZlZG9yYSAxOToKKworL3Vzci9pbmNsdWRlL2MrKy80LjguMS9jc3RkbGliOiBJbiBmdW5jdGlvbiDigJhsb25nIGxvbmcgaW50IHN0ZDo6YWJzKGxvbmcgbG9uZyBpbnQp4oCZOgorL3Vzci9pbmNsdWRlL2MrKy80LjguMS9jc3RkbGliOjE3NDoyMDogZXJyb3I6IGRlY2xhcmF0aW9uIG9mIEMgZnVuY3Rpb24g4oCYbG9uZyBsb25nIGludCBzdGQ6OmFicyhsb25nIGxvbmcgaW50KeKAmSBjb25mbGljdHMgd2l0aAorICAgYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9sbGFicyAoX194KTsgfQorICAgICAgICAgICAgICAgICAgICBeCisvdXNyL2luY2x1ZGUvYysrLzQuOC4xL2NzdGRsaWI6MTY2OjM6IGVycm9yOiBwcmV2aW91cyBkZWNsYXJhdGlvbiDigJhsb25nIGludCBzdGQ6OmFicyhsb25nIGludCnigJkgaGVyZQorICAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBfX2J1aWx0aW5fbGFicyhfX2kpOyB9CisgICBeCisKK01vdmUgaW5jbHVkZSBnZXR0ZXh0Lmggb3V0IG9mIHRoZSBleHRlcm4gIkMiIGJsb2NrIHRvIGZpeCB0aGlzIGlzc3VlLgorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworLS0tIGRwa2ctMS4xNy4xL2xpYi9kcGtnL2kxOG4uaC5vcmlnCTIwMTMtMDgtMTMgMTc6MzE6MjguODcwOTM1NTczICswODAwCisrKysgZHBrZy0xLjE3LjEvbGliL2Rwa2cvaTE4bi5oCTIwMTMtMDgtMTMgMTc6MzE6MzcuODkzMDY1MjQ5ICswODAwCitAQCAtMjMsOCArMjMsNiBAQAorIAorICNpbmNsdWRlIDxkcGtnL21hY3Jvcy5oPgorIAorLURQS0dfQkVHSU5fREVDTFMKKy0KKyAvKioKKyAgKiBAZGVmZ3JvdXAgaTE4biBJbnRlcm5hdGlvbmFsaXphdGlvbiBzdXBwb3J0CisgICogQGluZ3JvdXAgZHBrZy1pbnRlcm5hbAorQEAgLTMzLDYgKzMxLDggQEAKKyAKKyAjaW5jbHVkZSA8Z2V0dGV4dC5oPgorIAorK0RQS0dfQkVHSU5fREVDTFMKKysKKyAvKiBXZSBuZWVkIHRvIGluY2x1ZGUgdGhpcyBiZWNhdXNlIHBnZXR0ZXh0KCkgdXNlcyBMQ19NRVNTQUdFUywgYnV0IGxpYmludGwuaAorICAqIHdoaWNoIGdldHMgcHVsbGVkIGJ5IGdldHRleHQuaCBvbmx5IGluY2x1ZGVzIGl0IGlmIGJ1aWxkaW5nIG9wdGltaXplZC4gKi8KKyAjaW5jbHVkZSA8bG9jYWxlLmg+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvZ2xpYmMyLjUtc3luY19maWxlX3JhbmdlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2dsaWJjMi41LXN5bmNfZmlsZV9yYW5nZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTZiOGE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2dsaWJjMi41LXN5bmNfZmlsZV9yYW5nZS5wYXRjaApAQCAtMCwwICsxLDg2IEBACitDZW50T1MgNS44IGtlcm5lbHMgYW5kIGhlYWRlcnMgc3VwcG9ydCB0aGUgc3luY19maWxlX3JhbmdlKCkgc3lzdGVtIGNhbGwsCitidXQgZ2xpYmMgMi41IGRvZXNuJ3QgcHJvdmlkZSB0aGUgc3lzY2FsbCBzdHViLiAgSXQgYXBwZWFycyB0aGF0IHRoaXMKK3Byb2JsZW0gaXMga25vd24gYnV0IHdpbGwgbmV2ZXIgYmUgZml4ZWQ6CisKKyAgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD01MTg1ODEKKworICBCdWcgNTE4NTgxIC0gW1JIRUw1XSBnbGliYyBtaXNzZXMgc3luY19maWxlX3JhbmdlIHN5c2NhbGwgaW50ZXJmYWNlIAorCisgIFN0YXR1czogICAgICAgQ0xPU0VEIENBTlRGSVggCisgIExhc3QgQ2xvc2VkOiAgMjAwOS0xMS0yMiAyMjoxOTo1NQorCisgIEtpcmJ5IFpob3UgMjAwOS0wOC0yMCAyMzozNzo1NSBFRFQKKworICBEZXNjcmlwdGlvbiBvZiBwcm9ibGVtOgorCisgIGdsaWJjIG1pc3NlcyBzeW5jX2ZpbGVfcmFuZ2Ugc3lzY2FsbCBpbnRlcmZhY2UuICBUaGUgaGVhZGVyIGZpbGUgYW5kCisgIG1hbiBwYWdlIGJvdGggc2F5ICdzeW5jX2ZpbGVfcmFuZ2UnIHNob3VsZCBleGlzdC4gIEZyb20gbWFuIHBhZ2UsCisgIHN5bmNfZmlsZV9yYW5nZSBzaG91bGQgZXhpc3Qgc2luYyBrZXJuZWwtMi42LjE3CisKKyAgQW5kcmVhcyBTY2h3YWIgMjAwOS0wOC0yMSAwMzoyNDoyNCBFRFQKKworICBJdCBoYXMgb25seSBiZWVuIGFkZGVkIHRvIGdsaWJjIDIuNiwgYW5kIGNhbm5vdCBiZSBiYWNrcG9ydGVkIGR1ZSB0bworICBBQkkgYnJlYWthZ2UuICBZb3UgY2FuIGFsd2F5cyBmYWxsIGJhY2sgdG8gc3lzY2FsbCgzKS4KKworICBVbHJpY2ggRHJlcHBlciAyMDA5LTExLTIyIDIyOjE5OjU1IEVTVAorCisgIEFzIGNvbW1lbnQgIzEgc2F5cywgbm8gY2hhbmNlIHRvIGJhY2twb3J0IHRoaXMuCisKKyAgU2VlIHRoZSBzeXNjYWxsIG1hbiBwYWdlIGZvciBpbnN0cnVjdGlvbnMuCisKKyAgSm9uIEUgMjAxMC0wMy0xOSAxMDozMjozNyBFRFQKKworICB0aGVuIHdoeSBkb2N1bWVudCBpdCBpZiBpdCdzIGJyb2tlbiBhbmQgeW91J3JlIG5vdCBnb2luZyB0byBmaXggaXQ/CisgIC4uIG1pZ2h0IHdhbnQgdG8gRlRGTSBvdmVyIGF0IHN5bmNfZmlsZV9yYW5nZSgyKSAtIGluIHRoZSBtZWFudGltZSAtCisgIGJvcnJvd2luZyBmcm9tIGdsaWJjIDIuNiAuLiBhbnkgdGhvdWdodHMgb24gdGhpcyBpbXBsZW1lbnRhdGlvbiBmb3IgYQorICBoYWNreSB3b3JrYXJvdW5kIGZvciB0aG9zZSBzdGlsbCBvbiB5b3VyICJhbmNpZW50IHJlbGVhc2VzIiAuLiAoZWc6CisgIFJIRUw1LjMpPzoKKworICAjaWZkZWYgVUxJX1dPTlRfRklYX1RISVNfSU5fR0xJQkMyLjUKKyAgI2RlZmluZSBOUl9zeW5jX2ZpbGVfcmFuZ2UgMjc3CisgIGludCBzeW5jX2ZpbGVfcmFuZ2UgKGludCBmZCwgX19vZmY2NF90IGZyb20sIF9fb2ZmNjRfdCB0bywgdW5zaWduZWQgaW50IGZsYWdzKQorICB7CisgICAgcmV0dXJuIHN5c2NhbGwgKE5SX3N5bmNfZmlsZV9yYW5nZSwgZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0xPTkdfTE9OR19QQUlSICgobG9uZykgKGZyb20gPj4gMzIpLCAobG9uZykgZnJvbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0xPTkdfTE9OR19QQUlSICgobG9uZykgKHRvID4+IDMyKSwgKGxvbmcpIHRvKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKKyAgfQorICAjZW5kaWYKKworICBhc3N1bWluZyBvZiBjb3Vyc2UgdGhhdCB5b3UncmUgb24gYW4geDg2XzY0IGFuZCBpbmNsdWRlL2FzbS0KKyAgeDg2XzY0L3VuaXN0ZC5oIGhhcyB0aGUgY29ycmVjdCBlbnRyeQorCisgIChmd2l3IC0gZmlvIGlzIHN0YXJ0aW5nIHRvIHVzZSB0aGlzIG5vdykKKworUmF0aGVyIHRoYW4gYXR0ZW1wdGluZyB0byBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIHVzaW5nIHN5c2NhbGwoKSwKK3dlIHRha2UgdGhlIG1vcmUgY29uc2VydmF0aXZlIHJvdXRlIGFuZCBpZ25vcmUgaGVhZGVyIHN1cHBvcnQgZm9yCitzeW5jX2ZpbGVfcmFuZ2UoKSBmbGFncyB3aGVuIHRoZSBnbGliYyB2ZXJzaW9uIGlzIDw9IDIuNS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtldmVyeW9uZSBlbHNlIGJ1aWxkcyBvbiBuZXdlciBob3N0cyA6LSldCisKK1NpZ25lZC1vZmYtYnk6IERvbm4gU2VlbGV5IDxkb25uLnNlZWxleUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogTGVpIExpdSA8bGVpLmxpdTJAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9hcmNoaXZlcy5jIHwgICAgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworLS0tIGEvc3JjL2FyY2hpdmVzLmMKKysrKyBiL3NyYy9hcmNoaXZlcy5jCitAQCAtNzUsNyArNzUsNyBAQAorICAgLyogSWdub3JlIHRoZSByZXR1cm4gY29kZSBhcyBpdCBzaG91bGQgYmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IHRvIGFuCisgICAgKiBhc3luY2hyb25vdXMgaGludCBmb3IgdGhlIGtlcm5lbCwgd2UgYXJlIGRvaW5nIGFuIGZzeW5jKCkgbGF0ZXIgb24KKyAgICAqIGFueXdheS4gKi8KKy0jaWYgZGVmaW5lZChTWU5DX0ZJTEVfUkFOR0VfV1JJVEUpCisrI2lmIGRlZmluZWQoU1lOQ19GSUxFX1JBTkdFX1dSSVRFKSAmJiBfX0dMSUJDX1BSRVJFUSgyLCA2KQorICAgc3luY19maWxlX3JhbmdlKGZkLCAwLCAwLCBTWU5DX0ZJTEVfUkFOR0VfV1JJVEUpOworICNlbGlmIGRlZmluZWQoSEFWRV9QT1NJWF9GQURWSVNFKQorICAgcG9zaXhfZmFkdmlzZShmZCwgMCwgMCwgUE9TSVhfRkFEVl9ET05UTkVFRCk7CitAQCAtMTE3OSw3ICsxMTc5LDcgQEAKKyAgIHJldHVybiAwOworIH0KKyAKKy0jaWYgZGVmaW5lZChTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUpCisrI2lmIGRlZmluZWQoU1lOQ19GSUxFX1JBTkdFX1dBSVRfQkVGT1JFKSAmJiBfX0dMSUJDX1BSRVJFUSgyLCA2KQorIHN0YXRpYyB2b2lkCisgdGFyX3dyaXRlYmFja19iYXJyaWVyKHN0cnVjdCBmaWxlaW5saXN0ICpmaWxlcywgc3RydWN0IHBrZ2luZm8gKnBrZykKKyB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvbm9tYW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvbm9tYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwYzE1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9ub21hbi5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworZGlmZiAtcnVOIGRwa2ctMS4xNS44LjUtb3JpZy9NYWtlZmlsZS5hbSBkcGtnLTEuMTUuOC41L01ha2VmaWxlLmFtCistLS0gZHBrZy0xLjE1LjguNS1vcmlnL01ha2VmaWxlLmFtCTIwMTAtMTAtMDggMTI6Mjc6MTUuMDQyMDgzNzAzICswODAwCisrKysgZHBrZy0xLjE1LjguNS9NYWtlZmlsZS5hbQkyMDEwLTEwLTA4IDEyOjI3OjI3Ljc1NTE0ODIyOCArMDgwMAorQEAgLTEyLDggKzEyLDcgQEAKKyAJdXRpbHMgXAorIAkkKE1BWUJFX0RTRUxFQ1QpIFwKKyAJc2NyaXB0cyBcCistCXBvIFwKKy0JbWFuCisrCXBvCisgCisgQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9yZW1vdmUtdGFyLW5vLXRpbWVzdGFtcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9yZW1vdmUtdGFyLW5vLXRpbWVzdGFtcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjQwOGZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL3JlbW92ZS10YXItbm8tdGltZXN0YW1wLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK2J1c3lib3gtMS4xOS40IHRhciB1dGlsaXR5IGRvZXNuJ3Qgc3VwcG9ydCAtLXdhcm5pbmc9bm8tdGltZXN0YW1wCisKK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorSW5kZXg6IGRwa2ctMS4xNy4xL2Rwa2ctZGViL2V4dHJhY3QuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRwa2ctMS4xNy4xLm9yaWcvZHBrZy1kZWIvZXh0cmFjdC5jCisrKysgZHBrZy0xLjE3LjEvZHBrZy1kZWIvZXh0cmFjdC5jCitAQCAtMzE4LDcgKzMxOCw2IEBAIGV4dHJhY3RoYWxmKGNvbnN0IGNoYXIgKmRlYmFyLCBjb25zdCBjaGEKKyAKKyAgICAgICBjb21tYW5kX2FkZF9hcmcoJmNtZCwgIi1mIik7CisgICAgICAgY29tbWFuZF9hZGRfYXJnKCZjbWQsICItIik7CistICAgICAgY29tbWFuZF9hZGRfYXJnKCZjbWQsICItLXdhcm5pbmc9bm8tdGltZXN0YW1wIik7CisgCisgICAgICAgbV9kdXAyKHAyWzBdLDApOworICAgICAgIGNsb3NlKHAyWzBdKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZ18xLjE4LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2dfMS4xOC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjM2ZhNGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2dfMS4xOC4yLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgZHBrZy5pbmMKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitTUkNfVVJJICs9ICJmaWxlOi8vbm9tYW4ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3JlbW92ZS10YXItbm8tdGltZXN0YW1wLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtYWJzLXJlZGVmaW5lLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hcmNoX3BtLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlIFwKKyAgICAgICAgICAgIGZpbGU6Ly9nbGliYzIuNS1zeW5jX2ZpbGVfcmFuZ2UucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoIFwKKwkgICAgZmlsZTovLzAwMDItQWRhcHQtdG8tbGludXgtd3JzLWtlcm5lbC12ZXJzaW9uLXdoaWNoLWhhcy1jaGFyYWN0ZS5wYXRjaCBcCisJICAgIGZpbGU6Ly8wMDAzLU91ci1wcmUtcG9zdGluc3RzLWV4cGVjdC1ELXRvLWJlLXNldC13aGVuLXJ1bm5pbmctaW4ucGF0Y2ggXAorCSAgICBmaWxlOi8vMDAwNC1UaGUtbHV0aW1lcy1mdW5jdGlvbi1kb2Vzbi10LXdvcmstcHJvcGVybHktZm9yLWFsbC1zLnBhdGNoIFwKKwkgICAgZmlsZTovLzAwMDUtZHBrZy1jb21waWxlci5tNC1yZW1vdmUtV3ZsYS5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjYzYjlkODY5MDgxZWM0OWFkZWVmNmM1ZmY2MmQ2NTc2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjExNDg0ZjJhNzNkMDI3ZDY5NmU3MjBhNjAzODBkYjcxOTc4YmI1YzA2Y2Q4OGZlMzBjMjkxZTA2OWFjNDU3YTQiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNkOWJhNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MuaW5jCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiRXh0MiBGaWxlc3lzdGVtIFV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBFeHQyIEZpbGVzeXN0ZW0gVXRpbGl0aWVzIChlMmZzcHJvZ3MpIGNvbnRhaW4gYWxsIG9mIHRoZSBzdGFuZGFyZCB1dGlsaXRpZXMgZm9yIGNyZWF0aW5nLCBcCitmaXhpbmcsIGNvbmZpZ3VyaW5nICwgYW5kIGRlYnVnZ2luZyBleHQyIGZpbGVzeXN0ZW1zLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LyIKKworTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2MiAmIEJTRCAmIE1JVCIKK0xJQ0VOU0VfZTJmc3Byb2dzLWUyZnNjayA9ICJHUEx2MiIKK0xJQ0VOU0VfZTJmc3Byb2dzLW1rZTJmcyA9ICJHUEx2MiIKK0xJQ0VOU0VfZTJmc3Byb2dzLWZzY2sgPSAiR1BMdjIiCitMSUNFTlNFX2UyZnNwcm9ncy10dW5lMmZzID0gIkdQTHYyIgorTElDRU5TRV9lMmZzcHJvZ3MtYmFkYmxvY2tzID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjQ4ZjIxZDc2NWI4NzViZDEwNDAwOTc1ZDEyYzFjYTIgXAorICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvZXh0MmZzL2V4dDJmcy5oO2JlZ2lubGluZT0xO2VuZGxpbmU9OTttZDU9NTk2YThkZWRjYjRlNzMxYzZiMjFjN2E0NmZiYTZiZWYgXAorICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvZTJwL2UycC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9NzttZDU9OGE3NGFkZThmOWQ2NTA5NWQ3MGVmMmQ0YmY0OGUzNmEgXAorICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXVpZC91dWlkLmguaW47YmVnaW5saW5lPTE7ZW5kbGluZT0zMjttZDU9ZGJiODA3OWUxMTRhNWY4NDE5MzRiOTllNTljODgyMGEgXAorICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXVpZC9DT1BZSU5HO21kNT01OGRjZDg0NTI2NTFmYzhiMDdkMWY2NWNlMDdjYThhZiBcCisgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9ldC9ldF9uYW1lLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMTttZDU9ZWFkMjM2NDQ3ZGFjN2I5ODBkYmM1YjQ4MDRkOGM4MzYgXAorICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvc3Mvc3MuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT02ZTg5YWQ0N2RhNmU3NWZlY2QyYjVlMGU4MWUxZDRhNiIKK1NFQ1RJT04gPSAiYmFzZSIKK0RFUEVORFMgPSAidXRpbC1saW51eCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZTJmc3Byb2dzL2UyZnNwcm9ncy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbWtkaXIucGF0Y2giCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyBwa2djb25maWcgbXVsdGlsaWJfaGVhZGVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtZTJmc3Byb2dzLWZpeC1jcm9zcy1jb21waWxhdGlvbi1wcm9ibGVtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAxLWUyZnNwcm9ncy1maXgtY3Jvc3MtY29tcGlsYXRpb24tcHJvYmxlbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzA0M2JlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAxLWUyZnNwcm9ncy1maXgtY3Jvc3MtY29tcGlsYXRpb24tcHJvYmxlbS5wYXRjaApAQCAtMCwwICsxLDU1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU3ViamVjdDogZTJmc3Byb2dzOiBmaXggY3Jvc3MgY29tcGlsYXRpb24gcHJvYmxlbQorCitUaGUgY2hlY2tpbmcgb2YgdHlwZXMgaW4gcGFyc2UtdHlwZXMuc2ggZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgaW4gYQorY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnQsIGJlY2F1c2UgdGhlIGdlbmVyYXRlZCBiaW5hcnkgaXMgZXhlY3V0ZWQKK29uIGJ1aWxkIG1hY2hpbmUuCisKK1NvIGV2ZW4gaWYgYXNtX3R5cGVzLmggaGFzIGdvdCBjb3JyZWN0IHN0YXRlbWVudHMgZm9yIHR5cGVzLCBpdCdzIHBvc3NpYmxlCit0aGF0IHRoZSBnZW5lcmF0ZWQgYmluYXJ5IHdpbGwgcmVwb3J0IGFuIGVycm9yLiBCZWNhdXNlIHRoZXNlIHR5cGVzIGFyZSBmb3IKK3RoZSB0YXJnZXQgbWFjaGluZS4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlnL3BhcnNlLXR5cGVzLnNoIHwgICAgNiArKysrLS0KKyBjb25maWd1cmUuaW4gICAgICAgICAgfCAgICA2ICsrKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlnL3BhcnNlLXR5cGVzLnNoIGIvY29uZmlnL3BhcnNlLXR5cGVzLnNoCitpbmRleCA1MDc2ZjZjLi4yNGQyYTk5IDEwMDc1NQorLS0tIGEvY29uZmlnL3BhcnNlLXR5cGVzLnNoCisrKysgYi9jb25maWcvcGFyc2UtdHlwZXMuc2gKK0BAIC0xMTgsOCArMTE4LDEwIEBAIGlmIC4vYXNtX3R5cGVzCisgdGhlbgorICAgICB0cnVlCisgZWxzZQorLSAgICBlY2hvICJQcm9ibGVtIGRldGVjdGVkIHdpdGggYXNtX3R5cGVzLmgiCistICAgIGVjaG8gIiIgPiBhc21fdHlwZXMuaAorKyAgICBpZiBbICIke0NST1NTX0NPTVBJTEV9IiAhPSAiMSIgXTsgdGhlbgorKwllY2hvICJQcm9ibGVtIGRldGVjdGVkIHdpdGggYXNtX3R5cGVzLmgiCisrCWVjaG8gIiIgPiBhc21fdHlwZXMuaAorKyAgICBmaQorIGZpCisgcm0gYXNtX3R5cGVzLmMgYXNtX3R5cGVzCisgCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCA2OGFkZjBkLi5lZDE2OTdiIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC05NTMsNyArOTUzLDExIEBAIEFDX1NVQlNUKFNJWkVPRl9MT05HKQorIEFDX1NVQlNUKFNJWkVPRl9MT05HX0xPTkcpCisgQUNfU1VCU1QoU0laRU9GX09GRl9UKQorIEFDX0NfQklHRU5ESUFOCistQlVJTERfQ0M9IiRCVUlMRF9DQyIgQ1BQPSIkQ1BQIiAvYmluL3NoICRhY19hdXhfZGlyL3BhcnNlLXR5cGVzLnNoCisraWYgdGVzdCAkY3Jvc3NfY29tcGlsaW5nID0gbm87IHRoZW4KKysgIEJVSUxEX0NDPSIkQlVJTERfQ0MiIENQUD0iJENQUCIgL2Jpbi9zaCAkYWNfYXV4X2Rpci9wYXJzZS10eXBlcy5zaAorK2Vsc2UKKysgIENST1NTX0NPTVBJTEU9IjEiIEJVSUxEX0NDPSIkQlVJTERfQ0MiIENQUD0iJENQUCIgL2Jpbi9zaCAkYWNfYXV4X2Rpci9wYXJzZS10eXBlcy5zaAorK2ZpCisgQVNNX1RZUEVTX0hFQURFUj0uL2FzbV90eXBlcy5oCisgQUNfU1VCU1RfRklMRShBU01fVFlQRVNfSEVBREVSKQorIGRubAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1saWJleHQyZnMtZml4LXBvdGVudGlhbC1idWZmZXItb3ZlcmZsb3ctaW4tY2xvc2Vmcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1saWJleHQyZnMtZml4LXBvdGVudGlhbC1idWZmZXItb3ZlcmZsb3ctaW4tY2xvc2Vmcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmY3N2NjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAxLWxpYmV4dDJmcy1maXgtcG90ZW50aWFsLWJ1ZmZlci1vdmVyZmxvdy1pbi1jbG9zZWZzLnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK0Zyb20gNDlkMGZlMmExNGYyYTIzZGEyZmUyOTk2NDMzNzliOGMxZDM3ZGY3MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CitEYXRlOiBGcmksIDYgRmViIDIwMTUgMTI6NDY6MzkgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gbGliZXh0MmZzOiBmaXggcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBpbiBjbG9zZWZzKCkKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitUaGUgYnVnIGZpeCBpbiBmNjZlNmNlNDQ0NjogImxpYmV4dDJmczogYXZvaWQgYnVmZmVyIG92ZXJmbG93IGlmCitzX2ZpcnN0X21ldGFfYmcgaXMgdG9vIGJpZyIgaGFkIGEgdHlwbyBpbiB0aGUgZml4IGZvcgorZXh0MmZzX2Nsb3NlZnMoKS4gIEluIHByYWN0aWNlIG1vc3Qgb2YgdGhlIHNlY3VyaXR5IGV4cG9zdXJlIHdhcyBmcm9tCit0aGUgb3BlbmZzIHBhdGgsIHNpbmNlIHRoaXMgbWVhbnQgaWYgdGhlcmUgd2FzIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQKK2ZpbGUgc3lzdGVtLCBidWZmZXIgb3ZlcnJ1biB3b3VsZCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZmlsZSBzeXN0ZW0gd2FzCitvcGVuZWQuCisKK0hvd2V2ZXIsIGlmIGNvcnJ1cHRlZCBmaWxlIHN5c3RlbSBkaWRuJ3QgdHJpcCBvdmVyIHNvbWUgY29ycnVwdGlvbgorY2hlY2ssIGFuZCB0aGVuIHRoZSBmaWxlIHN5c3RlbSB3YXMgbW9kaWZpZWQgdmlhIHR1bmUyZnMgb3IgZGVidWdmcywKK3N1Y2ggdGhhdCB0aGUgc3VwZXJibG9jayB3YXMgbWFya2VkIGRpcnR5IGFuZCB0aGVuIHdyaXR0ZW4gb3V0IHZpYSB0aGUKK2Nsb3NlZnMoKSBwYXRoLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGJ1ZmZlciBvdmVycnVuIGNvdWxkIGJlCit0cmlnZ2VyZWQgd2hlbiB0aGUgZmlsZSBzeXN0ZW0gaXMgY2xvc2VkLgorCitBbHNvIGNsZWFyIHVwIGEgc2lnbmVkIHZzIHVuc2lnbmVkIHdhcm5pbmcgd2hpbGUgd2UncmUgYXQgaXQuCisKK1RoYW5rcyB0byBOaWNrIEtyYWxldmljaCA8bm5rQGdvb2dsZS5jb20+IGZvciBhc2tpbmcgbWUgdG8gbG9vayBhdAorY29tcGlsZXIgd2FybmluZyBpbiB0aGUgY29kZSBpbiBxdWVzdGlvbiwgd2hpY2ggbGVkIG1lIHRvIG5vdGljZSB0aGUKK2J1ZyBpbiBmNjZlNmNlNDQ0Ni4KKworQWRkcmVzc2VzOiBDVkUtMjAxNS0xNTcyCisKK1NpZ25lZC1vZmYtYnk6IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CistLS0KKyBsaWIvZXh0MmZzL2Nsb3NlZnMuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZXh0MmZzL2Nsb3NlZnMuYyBiL2xpYi9leHQyZnMvY2xvc2Vmcy5jCitpbmRleCAxZjk5MTEzLi5hYjViMmZiIDEwMDY0NAorLS0tIGEvbGliL2V4dDJmcy9jbG9zZWZzLmMKKysrKyBiL2xpYi9leHQyZnMvY2xvc2Vmcy5jCitAQCAtMjg3LDcgKzI4Nyw3IEBAIGVycmNvZGVfdCBleHQyZnNfZmx1c2gyKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmxhZ3MpCisgCWRncnBfdAkJajsKKyAjZW5kaWYKKyAJY2hhcgkqZ3JvdXBfcHRyOworLQlpbnQJb2xkX2Rlc2NfYmxvY2tzOworKwlibGs2NF90CW9sZF9kZXNjX2Jsb2NrczsKKyAJc3RydWN0IGV4dDJmc19udW1lcmljX3Byb2dyZXNzX3N0cnVjdCBwcm9ncmVzczsKKyAKKyAJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKK0BAIC0zNDYsNyArMzQ2LDcgQEAgZXJyY29kZV90IGV4dDJmc19mbHVzaDIoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncykKKyAJZ3JvdXBfcHRyID0gKGNoYXIgKikgZ3JvdXBfc2hhZG93OworIAlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykgeworIAkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPnN1cGVyLT5zX2ZpcnN0X21ldGFfYmc7CistCQlpZiAob2xkX2Rlc2NfYmxvY2tzID4gZnMtPnN1cGVyLT5zX2ZpcnN0X21ldGFfYmcpCisrCQlpZiAob2xkX2Rlc2NfYmxvY2tzID4gZnMtPmRlc2NfYmxvY2tzKQorIAkJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5kZXNjX2Jsb2NrczsKKyAJfSBlbHNlCisgCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+ZGVzY19ibG9ja3M7CistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1ta2UyZnMtYWRkLXRoZS1hYmlsaXR5LXRvLWNvcHktZmlsZXMtZnJvbS1hLWdpdmVuLWRpLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAxLW1rZTJmcy1hZGQtdGhlLWFiaWxpdHktdG8tY29weS1maWxlcy1mcm9tLWEtZ2l2ZW4tZGkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVhNDEzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1ta2UyZnMtYWRkLXRoZS1hYmlsaXR5LXRvLWNvcHktZmlsZXMtZnJvbS1hLWdpdmVuLWRpLnBhdGNoCkBAIC0wLDAgKzEsOTggQEAKK0Zyb20gYzk4ZmVjMDA0ZjA3N2U1NjZiOWRmYTIwYjI1ZTNiODZjYjQ2MmEyZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAyNCBEZWMgMjAxMyAwMTo0MTowOCAtMDUwMAorU3ViamVjdDogW1BBVENIIDAxLzExXSBta2UyZnM6IGFkZCB0aGUgYWJpbGl0eSB0byBjb3B5IGZpbGVzIGZyb20gYSBnaXZlbgorIGRpcmVjdG9yeQorCitXZSB3aWxsIGFkZCBhIC1kIG9wdGlvbiB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIGFkZGluZyB0aGUgZmlsZXMgZnJvbSBhCitnaXZlbiBkaXJlY3RvcnkgdG8gdGhlIGZpbGVzeXN0ZW0sIGl0IGlzIHNpbWlsaWFyIHRvIGdlbmV4dDJmcywgYnV0CitnZW5leHQyZnMgZG9lc24ndCBmdWxseSBzdXBwb3J0IGV4dDQuCisKKyogV2UgYWxyZWFkeSBoYXZlIHRoZSBiYXNpYyBvcGVyYXRpb25zIGluIGRlYnVnZnM6CisgIC0gQ29weSByZWd1bGFyIGZpbGUKKyAgLSBDcmVhdGUgZGlyZWN0b3J5CisgIC0gQ3JlYXRlIHN5bWxpbmsKKyAgLSBDcmVhdGUgc3BlY2lhbCBmaWxlCisKKyAgV2Ugd2lsbCBtb3ZlIHRoZXNlIG9wZXJhdGlvbnMgaW50byBjcmVhdGVfaW5vZGUuaCBhbmQgY3JlYXRlX2lub2RlLmMsCisgIHRoZW4gbGV0IGJvdGggbWtlMmZzIGFuZCBkZWJ1Z2ZzIHVzZSB0aGVtLgorCisqIFdoYXQgd2UgbmVlZCB0byBkbyBhcmU6CisgIC0gQ29weSB0aGUgZ2l2ZW4gZGlyZWN0b3J5IHJlY3Vyc2l2ZWx5LCB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUKKyAgICBwb3B1bGF0ZV9mcygpCisgIC0gU2V0IHRoZSBvd25lciwgbW9kZSBhbmQgb3RoZXIgaW5mb3JtYXRpb25zCisgIC0gSGFuZGxlIHRoZSBoYXJkIGxpbmtzCisKK1RPRE86CisgIC0gVGhlIGxpYmV4dDJmcyBjYW4ndCBjcmVhdGUgdGhlIHNvY2tldCBmaWxlIChTX0lGU09DSyksIGRvIHdlIGhhdmUgYQorICAgIHBsYW4gdG8gc3VwcG9ydCBpdCA/CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaXNjL2NyZWF0ZV9pbm9kZS5jIHwgICAyNiArKysrKysrKysrKysrKysrKysrKysrKysrKworIG1pc2MvY3JlYXRlX2lub2RlLmggfCAgIDE3ICsrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA0MyBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG1pc2MvY3JlYXRlX2lub2RlLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbWlzYy9jcmVhdGVfaW5vZGUuaAorCitkaWZmIC0tZ2l0IGEvbWlzYy9jcmVhdGVfaW5vZGUuYyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi40NmFhYTYwCistLS0gL2Rldi9udWxsCisrKysgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitAQCAtMCwwICsxLDI2IEBACisrI2luY2x1ZGUgImNyZWF0ZV9pbm9kZS5oIgorKworKy8qIE1ha2UgYSBzcGVjaWFsIGZpbGUgd2hpY2ggaXMgYmxvY2ssIGNoYXJhY3RlciBhbmQgZmlmbyAqLworK2VycmNvZGVfdCBkb19ta25vZF9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorK3sKKyt9CisrCisrLyogTWFrZSBhIHN5bWxpbmsgbmFtZSAtPiB0YXJnZXQgKi8KKytlcnJjb2RlX3QgZG9fc3ltbGlua19pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgY2hhciAqdGFyZ2V0KQorK3sKKyt9CisrCisrLyogTWFrZSBhIGRpcmVjdG9yeSBpbiB0aGUgZnMgKi8KKytlcnJjb2RlX3QgZG9fbWtkaXJfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkKKyt7CisrfQorKworKy8qIENvcHkgdGhlIG5hdGl2ZSBmaWxlIHRvIHRoZSBmcyAqLworK2VycmNvZGVfdCBkb193cml0ZV9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkZXN0KQorK3sKKyt9CisrCisrLyogQ29weSBmaWxlcyBmcm9tIHNvdXJjZV9kaXIgdG8gZnMgKi8KKytlcnJjb2RlX3QgcG9wdWxhdGVfZnMoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBjb25zdCBjaGFyICpzb3VyY2VfZGlyKQorK3sKKyt9CitkaWZmIC0tZ2l0IGEvbWlzYy9jcmVhdGVfaW5vZGUuaCBiL21pc2MvY3JlYXRlX2lub2RlLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45ZmM5N2ZhCistLS0gL2Rldi9udWxsCisrKysgYi9taXNjL2NyZWF0ZV9pbm9kZS5oCitAQCAtMCwwICsxLDE3IEBACisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlICJldC9jb21fZXJyLmgiCisrI2luY2x1ZGUgImUycC9lMnAuaCIKKysjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorKyNpbmNsdWRlICJubHMtZW5hYmxlLmgiCisrCisrZXh0Ml9maWxzeXMgICAgY3VycmVudF9mczsKKytleHQyX2lub190ICAgICByb290OworKworKy8qIEZvciBwb3B1bGF0aW5nIHRoZSBmaWxlc3lzdGVtICovCisrZXh0ZXJuIGVycmNvZGVfdCBwb3B1bGF0ZV9mcyhleHQyX2lub190IHBhcmVudF9pbm8sIGNvbnN0IGNoYXIgKnNvdXJjZV9kaXIpOworK2V4dGVybiBlcnJjb2RlX3QgZG9fbWtub2RfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCk7CisrZXh0ZXJuIGVycmNvZGVfdCBkb19zeW1saW5rX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp0YXJnZXQpOworK2V4dGVybiBlcnJjb2RlX3QgZG9fbWtkaXJfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCk7CisrZXh0ZXJuIGVycmNvZGVfdCBkb193cml0ZV9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkZXN0KTsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAyLW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1maWxlcy1yZWN1cnNpdmVseS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMi1taXNjLWNyZWF0ZV9pbm9kZS5jLWNvcHktZmlsZXMtcmVjdXJzaXZlbHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJmZjY0NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMi1taXNjLWNyZWF0ZV9pbm9kZS5jLWNvcHktZmlsZXMtcmVjdXJzaXZlbHkucGF0Y2gKQEAgLTAsMCArMSwxMzUgQEAKK0Zyb20gMDhkZmJhZjRlM2Y3MDQyMzJmZjQ2ZDc4YzA3NThhNmNmZTM5NjFjOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMyBEZWMgMjAxMyAwMjo1OToxMCAtMDUwMAorU3ViamVjdDogW1BBVENIIDAyLzExXSBtaXNjL2NyZWF0ZV9pbm9kZS5jOiBjb3B5IGZpbGVzIHJlY3Vyc2l2ZWx5CisKK1VzZSBvcGVuZGlyKCkgYW5kIHJlYWRkaXIoKSB0byByZWFkIHRoZSBuYXRpdmUgZGlyZWN0b3J5LCB0aGVuIHVzZQorbHN0YXQoKSB0byBpZGVudGlmeSB0aGUgZmlsZSB0eXBlIGFuZCBjYWxsIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIHRvCithZGQgdGhlIGZpbGUgdG8gdGhlIGZpbGVzeXN0ZW0sIGNhbGwgdGhlIHBvcHVsYXRlX2ZzKCkgcmVjdXJzaXZlbHkgaWYgaXQKK2lzIGEgZGlyZWN0b3J5LgorCitOT1RFOiB0aGUgbGliZXh0MmZzIGNhbid0IGNyZWF0ZSB0aGUgc29ja2V0IGZpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaXNjL2NyZWF0ZV9pbm9kZS5jIHwgICA5NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgOTcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWlzYy9jcmVhdGVfaW5vZGUuYyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK2luZGV4IDQ2YWFhNjAuLmI2OGI5MTAgMTAwNjQ0CistLS0gYS9taXNjL2NyZWF0ZV9pbm9kZS5jCisrKysgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitAQCAtMSw1ICsxLDEzIEBACisgI2luY2x1ZGUgImNyZWF0ZV9pbm9kZS5oIgorIAorKyNpZiBfX1NURENfVkVSU0lPTl9fIDwgMTk5OTAxTAorKyMgaWYgX19HTlVDX18gPj0gMgorKyMgIGRlZmluZSBfX2Z1bmNfXyBfX0ZVTkNUSU9OX18KKysjIGVsc2UKKysjICBkZWZpbmUgX19mdW5jX18gIjx1bmtub3duPiIKKysjIGVuZGlmCisrI2VuZGlmCisrCisgLyogTWFrZSBhIHNwZWNpYWwgZmlsZSB3aGljaCBpcyBibG9jaywgY2hhcmFjdGVyIGFuZCBmaWZvICovCisgZXJyY29kZV90IGRvX21rbm9kX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisgeworQEAgLTIzLDQgKzMxLDkzIEBAIGVycmNvZGVfdCBkb193cml0ZV9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkZXN0KQorIC8qIENvcHkgZmlsZXMgZnJvbSBzb3VyY2VfZGlyIHRvIGZzICovCisgZXJyY29kZV90IHBvcHVsYXRlX2ZzKGV4dDJfaW5vX3QgcGFyZW50X2lubywgY29uc3QgY2hhciAqc291cmNlX2RpcikKKyB7CisrCWNvbnN0IGNoYXIJKm5hbWU7CisrCURJUgkJKmRoOworKwlzdHJ1Y3QgZGlyZW50CSpkZW50OworKwlzdHJ1Y3Qgc3RhdAlzdDsKKysJY2hhcgkJbG5fdGFyZ2V0W1BBVEhfTUFYXTsKKysJZXh0Ml9pbm9fdAlpbm87CisrCWVycmNvZGVfdAlyZXR2YWw7CisrCWludAkJcmVhZF9jbnQ7CisrCisrCXJvb3QgPSBFWFQyX1JPT1RfSU5POworKworKwlpZiAoY2hkaXIoc291cmNlX2RpcikgPCAwKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCBlcnJubywKKysJCQlfKCJ3aGlsZSBjaGFuZ2luZyB3b3JraW5nIGRpcmVjdG9yeSB0byBcIiVzXCIiKSwgc291cmNlX2Rpcik7CisrCQlyZXR1cm4gZXJybm87CisrCX0KKysKKysJaWYgKCEoZGggPSBvcGVuZGlyKCIuIikpKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCBlcnJubywKKysJCQlfKCJ3aGlsZSBvcGVubmluZyBkaXJlY3RvcnkgXCIlc1wiIiksIHNvdXJjZV9kaXIpOworKwkJcmV0dXJuIGVycm5vOworKwl9CisrCisrCXdoaWxlKChkZW50ID0gcmVhZGRpcihkaCkpKSB7CisrCQlpZigoIXN0cmNtcChkZW50LT5kX25hbWUsICIuIikpIHx8ICghc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4uIikpKQorKwkJCWNvbnRpbnVlOworKwkJbHN0YXQoZGVudC0+ZF9uYW1lLCAmc3QpOworKwkJbmFtZSA9IGRlbnQtPmRfbmFtZTsKKysKKysJCXN3aXRjaChzdC5zdF9tb2RlICYgU19JRk1UKSB7CisrCQkJY2FzZSBTX0lGQ0hSOgorKwkJCWNhc2UgU19JRkJMSzoKKysJCQljYXNlIFNfSUZJRk86CisrCQkJCWlmICgocmV0dmFsID0gZG9fbWtub2RfaW50ZXJuYWwocGFyZW50X2lubywgbmFtZSwgJnN0KSkpIHsKKysJCQkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwKKysJCQkJCQlfKCJ3aGlsZSBjcmVhdGluZyBzcGVjaWFsIGZpbGUgXCIlc1wiIiksIG5hbWUpOworKwkJCQkJcmV0dXJuIHJldHZhbDsKKysJCQkJfQorKwkJCQlicmVhazsKKysJCQljYXNlIFNfSUZTT0NLOgorKwkJCQkvKiBGSVhNRTogdGhlcmUgaXMgbm8gbWFrZSBzb2NrZXQgZnVuY3Rpb24gYXRtLiAqLworKwkJCQljb21fZXJyKF9fZnVuY19fLCAwLAorKwkJCQkJXygiaWdub3Jpbmcgc29ja2V0IGZpbGUgXCIlc1wiIiksIG5hbWUpOworKwkJCQljb250aW51ZTsKKysJCQljYXNlIFNfSUZMTks6CisrCQkJCWlmKChyZWFkX2NudCA9IHJlYWRsaW5rKG5hbWUsIGxuX3RhcmdldCwgc2l6ZW9mKGxuX3RhcmdldCkpKSA9PSAtMSkgeworKwkJCQkJY29tX2VycihfX2Z1bmNfXywgZXJybm8sCisrCQkJCQkJXygid2hpbGUgdHJ5aW5nIHRvIHJlYWRsaW5rIFwiJXNcIiIpLCBuYW1lKTsKKysJCQkJCXJldHVybiBlcnJubzsKKysJCQkJfQorKwkJCQlsbl90YXJnZXRbcmVhZF9jbnRdID0gJ1wwJzsKKysJCQkJaWYgKChyZXR2YWwgPSBkb19zeW1saW5rX2ludGVybmFsKHBhcmVudF9pbm8sIG5hbWUsIGxuX3RhcmdldCkpKSB7CisrCQkJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsCisrCQkJCQkJXygid2hpbGUgd3JpdGluZyBzeW1saW5rXCIlc1wiIiksIG5hbWUpOworKwkJCQkJcmV0dXJuIHJldHZhbDsKKysJCQkJfQorKwkJCQlicmVhazsKKysJCQljYXNlIFNfSUZSRUc6CisrCQkJCWlmICgocmV0dmFsID0gZG9fd3JpdGVfaW50ZXJuYWwocGFyZW50X2lubywgbmFtZSwgbmFtZSkpKSB7CisrCQkJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsCisrCQkJCQkJXygid2hpbGUgd3JpdGluZyBmaWxlIFwiJXNcIiIpLCBuYW1lKTsKKysJCQkJCXJldHVybiByZXR2YWw7CisrCQkJCX0KKysJCQkJYnJlYWs7CisrCQkJY2FzZSBTX0lGRElSOgorKwkJCQlpZiAoKHJldHZhbCA9IGRvX21rZGlyX2ludGVybmFsKHBhcmVudF9pbm8sIG5hbWUsICZzdCkpKSB7CisrCQkJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsCisrCQkJCQkJXygid2hpbGUgbWFraW5nIGRpciBcIiVzXCIiKSwgbmFtZSk7CisrCQkJCQlyZXR1cm4gcmV0dmFsOworKwkJCQl9CisrCQkJCWlmICgocmV0dmFsID0gZXh0MmZzX25hbWVpKGN1cnJlbnRfZnMsIHJvb3QsIHBhcmVudF9pbm8sIG5hbWUsICZpbm8pKSkgeworKwkJCQkJY29tX2VycihuYW1lLCByZXR2YWwsIDApOworKwkJCQkJCXJldHVybiByZXR2YWw7CisrCQkJCX0KKysJCQkJLyogUG9wdWxhdGUgdGhlIGRpciByZWN1cnNpdmVseSovCisrCQkJCXJldHZhbCA9IHBvcHVsYXRlX2ZzKGlubywgbmFtZSk7CisrCQkJCWlmIChyZXR2YWwpIHsKKysJCQkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgXygid2hpbGUgYWRkaW5nIGRpciBcIiVzXCIiKSwgbmFtZSk7CisrCQkJCQlyZXR1cm4gcmV0dmFsOworKwkJCQl9CisrCQkJCWNoZGlyKCIuLiIpOworKwkJCQlicmVhazsKKysJCQlkZWZhdWx0OgorKwkJCQljb21fZXJyKF9fZnVuY19fLCAwLAorKwkJCQkJXygiaWdub3JpbmcgZW50cnkgXCIlc1wiIiksIG5hbWUpOworKwkJfQorKwl9CisrCWNsb3NlZGlyKGRoKTsKKysJcmV0dXJuIHJldHZhbDsKKyB9CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMy1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1zcGVjaWFsLWZpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDMtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtc3BlY2lhbC1maWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NDdiNmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDMtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtc3BlY2lhbC1maWxlLnBhdGNoCkBAIC0wLDAgKzEsMTAzIEBACitGcm9tIGFlN2QzMzgyM2JmYzMzMGUwOGIyNWM1ZmU0ZDI1ODM4ZWY3Yzc3Y2UgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjMgRGVjIDIwMTMgMDM6MTM6MjggLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAwMy8xMV0gbWlzYy9jcmVhdGVfaW5vZGUuYzogY3JlYXRlIHNwZWNpYWwgZmlsZQorCitUaGUgZG9fbWtub2RfaW50ZXJuYWwoKSBpcyB1c2VkIGZvciBjcmVhdGluZyBzcGVjaWFsIGZpbGUgd2hpY2ggaXMKK2Jsb2NrLCBjaGFyYWN0ZXIgYW5kIGZpZm8sIG1vc3Qgb2YgdGhlIGNvZGUgYXJlIGZyb20gZGVidWdmcy9kZWJ1Z2ZzLmMsCit0aGUgZGVidWdmcy9kZWJ1Z2ZzLmMgd2lsbCBiZSBtb2RpZmllZCB0byB1c2UgdGhpcyBmdW5jdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgfCAgIDcyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA3MiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworaW5kZXggYjY4YjkxMC4uNGRhOGFmZiAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmMKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC0xMSw2ICsxMSw3OCBAQAorIC8qIE1ha2UgYSBzcGVjaWFsIGZpbGUgd2hpY2ggaXMgYmxvY2ssIGNoYXJhY3RlciBhbmQgZmlmbyAqLworIGVycmNvZGVfdCBkb19ta25vZF9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorIHsKKysJZXh0Ml9pbm9fdAkJaW5vOworKwllcnJjb2RlX3QgCQlyZXR2YWw7CisrCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworKwl1bnNpZ25lZCBsb25nCQltYWpvciwgbWlub3IsIG1vZGU7CisrCWludAkJCWZpbGV0eXBlOworKworKwlzd2l0Y2goc3QtPnN0X21vZGUgJiBTX0lGTVQpIHsKKysJCWNhc2UgU19JRkNIUjoKKysJCQltb2RlID0gTElOVVhfU19JRkNIUjsKKysJCQlmaWxldHlwZSA9IEVYVDJfRlRfQ0hSREVWOworKwkJCWJyZWFrOworKwkJY2FzZSBTX0lGQkxLOgorKwkJCW1vZGUgPSBMSU5VWF9TX0lGQkxLOworKwkJCWZpbGV0eXBlID0gIEVYVDJfRlRfQkxLREVWOworKwkJCWJyZWFrOworKwkJY2FzZSBTX0lGSUZPOgorKwkJCW1vZGUgPSBMSU5VWF9TX0lGSUZPOworKwkJCWZpbGV0eXBlID0gRVhUMl9GVF9GSUZPOworKwkJCWJyZWFrOworKwl9CisrCisrCWlmICghKGN1cnJlbnRfZnMtPmZsYWdzICYgRVhUMl9GTEFHX1JXKSkgeworKwkJY29tX2VycihfX2Z1bmNfXywgMCwgIkZpbGVzeXN0ZW0gb3BlbmVkIHJlYWQvb25seSIpOworKwkJcmV0dXJuIC0xOworKwl9CisrCXJldHZhbCA9IGV4dDJmc19uZXdfaW5vZGUoY3VycmVudF9mcywgY3dkLCAwMTA3NTUsIDAsICZpbm8pOworKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsIDApOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworKyNpZmRlZiBERUJVR0ZTCisrCXByaW50ZigiQWxsb2NhdGVkIGlub2RlOiAldVxuIiwgaW5vKTsKKysjZW5kaWYKKysJcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgY3dkLCBuYW1lLCBpbm8sIGZpbGV0eXBlKTsKKysJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworKwkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgY3dkKTsKKysJCWlmIChyZXR2YWwpIHsKKysJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSBleHBhbmRpbmcgZGlyZWN0b3J5Iik7CisrCQkJcmV0dXJuIHJldHZhbDsKKysJCX0KKysJCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgbmFtZSwgaW5vLCBmaWxldHlwZSk7CisrCX0KKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycihuYW1lLCByZXR2YWwsIDApOworKwkJcmV0dXJuIC0xOworKwl9CisrICAgICAgICBpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdXJyZW50X2ZzLT5pbm9kZV9tYXAsIGlubykpCisrCQljb21fZXJyKF9fZnVuY19fLCAwLCAiV2FybmluZzogaW5vZGUgYWxyZWFkeSBzZXQiKTsKKysJZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihjdXJyZW50X2ZzLCBpbm8sICsxLCAwKTsKKysJbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKGlub2RlKSk7CisrCWlub2RlLmlfbW9kZSA9IG1vZGU7CisrCWlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX2N0aW1lID0gaW5vZGUuaV9tdGltZSA9CisrCQljdXJyZW50X2ZzLT5ub3cgPyBjdXJyZW50X2ZzLT5ub3cgOiB0aW1lKDApOworKworKwltYWpvciA9IG1ham9yKHN0LT5zdF9yZGV2KTsKKysJbWlub3IgPSBtaW5vcihzdC0+c3RfcmRldik7CisrCisrCWlmICgobWFqb3IgPCAyNTYpICYmIChtaW5vciA8IDI1NikpIHsKKysJCWlub2RlLmlfYmxvY2tbMF0gPSBtYWpvciAqIDI1NiArIG1pbm9yOworKwkJaW5vZGUuaV9ibG9ja1sxXSA9IDA7CisrCX0gZWxzZSB7CisrCQlpbm9kZS5pX2Jsb2NrWzBdID0gMDsKKysJCWlub2RlLmlfYmxvY2tbMV0gPSAobWlub3IgJiAweGZmKSB8IChtYWpvciA8PCA4KSB8ICgobWlub3IgJiB+MHhmZikgPDwgMTIpOworKwl9CisrCWlub2RlLmlfbGlua3NfY291bnQgPSAxOworKworKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfbmV3X2lub2RlKGN1cnJlbnRfZnMsIGlubywgJmlub2RlKTsKKysJaWYgKHJldHZhbCkKKysJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIGNyZWF0aW5nIGlub2RlICV1IiwgaW5vKTsKKysKKysJcmV0dXJuIHJldHZhbDsKKyB9CisgCisgLyogTWFrZSBhIHN5bWxpbmsgbmFtZSAtPiB0YXJnZXQgKi8KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA0LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXN5bWxpbmsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDQtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtc3ltbGluay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2QxOThjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA0LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXN5bWxpbmsucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRnJvbSAwOWQzMDQ5Nzc2ODgyMTY3ZjcyNDllZTI2MjY1YjQxNjNkNzIyMmMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDAzOjE5OjU1IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMTFdIG1pc2MvY3JlYXRlX2lub2RlLmM6IGNyZWF0ZSBzeW1saW5rCisKK1RoZSBkb19zeW1saW5rX2ludGVybmFsKCkgaXMgdXNlZCBmb3IgY3JlYXRpbmcgc3ltbGlua3MsIG1vc3Qgb2YgdGhlCitjb2RlIGFyZSBmcm9tIGRlYnVnZnMvZGVidWdmcy5jLCB0aGUgZGVidWdmcy9kZWJ1Z2ZzLmMgd2lsbCBiZSBtb2RpZmllZAordG8gdXNlIHRoaXMgZnVuY3Rpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaXNjL2NyZWF0ZV9pbm9kZS5jIHwgICAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworaW5kZXggNGRhOGFmZi4uZjg0NTEwMyAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmMKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC04OCw2ICs4OCwzOCBAQCBlcnJjb2RlX3QgZG9fbWtub2RfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkKKyAvKiBNYWtlIGEgc3ltbGluayBuYW1lIC0+IHRhcmdldCAqLworIGVycmNvZGVfdCBkb19zeW1saW5rX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp0YXJnZXQpCisgeworKwljaGFyCQkJKmNwOworKwlleHQyX2lub190CQlwYXJlbnRfaW5vOworKwllcnJjb2RlX3QJCXJldHZhbDsKKysJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisrCXN0cnVjdCBzdGF0CQlzdDsKKysKKysJY3AgPSBzdHJyY2hyKG5hbWUsICcvJyk7CisrCWlmIChjcCkgeworKwkJKmNwID0gMDsKKysJCWlmICgocmV0dmFsID0gIGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBjd2QsIG5hbWUsICZwYXJlbnRfaW5vKSkpeworKwkJCWNvbV9lcnIobmFtZSwgcmV0dmFsLCAwKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKwkJbmFtZSA9IGNwKzE7CisrCX0gZWxzZQorKwkJcGFyZW50X2lubyA9IGN3ZDsKKysKKyt0cnlfYWdhaW46CisrCXJldHZhbCA9IGV4dDJmc19zeW1saW5rKGN1cnJlbnRfZnMsIHBhcmVudF9pbm8sIDAsIG5hbWUsIHRhcmdldCk7CisrCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9ESVJfTk9fU1BBQ0UpIHsKKysJCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIHBhcmVudF9pbm8pOworKwkJaWYgKHJldHZhbCkgeworKwkJCWNvbV9lcnIoImRvX3N5bWxpbmtfaW50ZXJuYWwiLCByZXR2YWwsICJ3aGlsZSBleHBhbmRpbmcgZGlyZWN0b3J5Iik7CisrCQkJcmV0dXJuIHJldHZhbDsKKysJCX0KKysJCWdvdG8gdHJ5X2FnYWluOworKwl9CisrCWlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoImV4dDJmc19zeW1saW5rIiwgcmV0dmFsLCAwKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysKKyB9CisgCisgLyogTWFrZSBhIGRpcmVjdG9yeSBpbiB0aGUgZnMgKi8KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA1LW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1yZWd1bGFyLWZpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDUtbWlzYy1jcmVhdGVfaW5vZGUuYy1jb3B5LXJlZ3VsYXItZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTM1Y2Q4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA1LW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1yZWd1bGFyLWZpbGUucGF0Y2gKQEAgLTAsMCArMSwyMjQgQEAKK0Zyb20gMjk3M2M3NGFmYWE1MzJmM2Y3MjYzOWI0NjMzMjJiMjUyMzUxOWMyMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMyBEZWMgMjAxMyAwMzoyODoxMiAtMDUwMAorU3ViamVjdDogW1BBVENIIDA1LzExXSBtaXNjL2NyZWF0ZV9pbm9kZS5jOiBjb3B5IHJlZ3VsYXIgZmlsZQorCitUaGUgZG9fd3JpdGVfaW50ZXJuYWwoKSBpcyB1c2VkIGZvciBjb3B5aW5nIGZpbGUgZnJvbSBuYXRpdmUgZnMgdG8KK3RhcmdldCwgbW9zdCBvZiB0aGUgY29kZSBhcmUgZnJvbSBkZWJ1Z2ZzL2RlYnVnZnMuYywgdGhlCitkZWJ1Z2ZzL2RlYnVnZnMuYyB3aWxsIGJlIG1vZGlmaWVkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9jcmVhdGVfaW5vZGUuYyB8ICAxODMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE4MyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworaW5kZXggZjg0NTEwMy4uOThmNGE5MyAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmMKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC04LDYgKzgsMTYgQEAKKyAjIGVuZGlmCisgI2VuZGlmCisgCisrLyogNjRLaUIgaXMgdGhlIG1pbmltaXVtIGJsa3NpemUgdG8gYmVzdCBtaW5pbWl6ZSBzeXN0ZW0gY2FsbCBvdmVyaGVhZC4gKi8KKysjaWZuZGVmIElPX0JVRlNJWkUKKysjZGVmaW5lIElPX0JVRlNJWkUgNjQqMTAyNAorKyNlbmRpZgorKworKy8qIEJsb2NrIHNpemUgZm9yIGBzdF9ibG9ja3MnICovCisrI2lmbmRlZiBTX0JMS1NJWkUKKysjZGVmaW5lIFNfQkxLU0laRSA1MTIKKysjZW5kaWYKKysKKyAvKiBNYWtlIGEgc3BlY2lhbCBmaWxlIHdoaWNoIGlzIGJsb2NrLCBjaGFyYWN0ZXIgYW5kIGZpZm8gKi8KKyBlcnJjb2RlX3QgZG9fbWtub2RfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkKKyB7CitAQCAtMTI3LDkgKzEzNywxODIgQEAgZXJyY29kZV90IGRvX21rZGlyX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisgeworIH0KKyAKKytzdGF0aWMgZXJyY29kZV90IGNvcHlfZmlsZShpbnQgZmQsIGV4dDJfaW5vX3QgbmV3ZmlsZSwgaW50IGJ1ZnNpemUsIGludCBtYWtlX2hvbGVzKQorK3sKKysJZXh0Ml9maWxlX3QJZTJfZmlsZTsKKysJZXJyY29kZV90CXJldHZhbDsKKysJaW50CQlnb3Q7CisrCXVuc2lnbmVkIGludAl3cml0dGVuOworKwljaGFyCQkqYnVmOworKwljaGFyCQkqcHRyOworKwljaGFyCQkqemVyb19idWY7CisrCWludAkJY21wOworKworKwlyZXR2YWwgPSBleHQyZnNfZmlsZV9vcGVuKGN1cnJlbnRfZnMsIG5ld2ZpbGUsCisrCQkJCSAgRVhUMl9GSUxFX1dSSVRFLCAmZTJfZmlsZSk7CisrCWlmIChyZXR2YWwpCisrCQlyZXR1cm4gcmV0dmFsOworKworKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShidWZzaXplLCAmYnVmKTsKKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycigiY29weV9maWxlIiwgcmV0dmFsLCAiY2FuJ3QgYWxsb2NhdGUgYnVmZmVyXG4iKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysKKysJLyogVGhpcyBpcyB1c2VkIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSB3aG9sZSBibG9jayBpcyB6ZXJvICovCisrCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtemVybyhidWZzaXplLCAmemVyb19idWYpOworKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKCJjb3B5X2ZpbGUiLCByZXR2YWwsICJjYW4ndCBhbGxvY2F0ZSBidWZmZXJcbiIpOworKwkJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworKwl3aGlsZSAoMSkgeworKwkJZ290ID0gcmVhZChmZCwgYnVmLCBidWZzaXplKTsKKysJCWlmIChnb3QgPT0gMCkKKysJCQlicmVhazsKKysJCWlmIChnb3QgPCAwKSB7CisrCQkJcmV0dmFsID0gZXJybm87CisrCQkJZ290byBmYWlsOworKwkJfQorKwkJcHRyID0gYnVmOworKworKwkJLyogU3BhcnNlIGNvcHkgKi8KKysJCWlmIChtYWtlX2hvbGVzKSB7CisrCQkJLyogQ2hlY2sgd2hldGhlciBhbGwgaXMgemVybyAqLworKwkJCWNtcCA9IG1lbWNtcChwdHIsIHplcm9fYnVmLCBnb3QpOworKwkJCWlmIChjbXAgPT0gMCkgeworKwkJCQkgLyogVGhlIHdob2xlIGJsb2NrIGlzIHplcm8sIG1ha2UgYSBob2xlICovCisrCQkJCXJldHZhbCA9IGV4dDJmc19maWxlX2xzZWVrKGUyX2ZpbGUsIGdvdCwgRVhUMl9TRUVLX0NVUiwgTlVMTCk7CisrCQkJCWlmIChyZXR2YWwpCisrCQkJCQlnb3RvIGZhaWw7CisrCQkJCWdvdCA9IDA7CisrCQkJfQorKwkJfQorKworKwkJLyogTm9ybWFsIGNvcHkgKi8KKysJCXdoaWxlIChnb3QgPiAwKSB7CisrCQkJcmV0dmFsID0gZXh0MmZzX2ZpbGVfd3JpdGUoZTJfZmlsZSwgcHRyLAorKwkJCQkJCSAgIGdvdCwgJndyaXR0ZW4pOworKwkJCWlmIChyZXR2YWwpCisrCQkJCWdvdG8gZmFpbDsKKysKKysJCQlnb3QgLT0gd3JpdHRlbjsKKysJCQlwdHIgKz0gd3JpdHRlbjsKKysJCX0KKysJfQorKwlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisrCWV4dDJmc19mcmVlX21lbSgmemVyb19idWYpOworKwlyZXR2YWwgPSBleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKysJcmV0dXJuIHJldHZhbDsKKysKKytmYWlsOgorKwlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisrCWV4dDJmc19mcmVlX21lbSgmemVyb19idWYpOworKwkodm9pZCkgZXh0MmZzX2ZpbGVfY2xvc2UoZTJfZmlsZSk7CisrCXJldHVybiByZXR2YWw7CisrfQorKworIC8qIENvcHkgdGhlIG5hdGl2ZSBmaWxlIHRvIHRoZSBmcyAqLworIGVycmNvZGVfdCBkb193cml0ZV9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkZXN0KQorIHsKKysJaW50CQlmZDsKKysJc3RydWN0IHN0YXQJc3RhdGJ1ZjsKKysJZXh0Ml9pbm9fdAluZXdmaWxlOworKwllcnJjb2RlX3QJcmV0dmFsOworKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKysJaW50CQlidWZzaXplID0gSU9fQlVGU0laRTsKKysJaW50CQltYWtlX2hvbGVzID0gMDsKKysKKysJZmQgPSBvcGVuKHNyYywgT19SRE9OTFkpOworKwlpZiAoZmQgPCAwKSB7CisrCQljb21fZXJyKHNyYywgZXJybm8sIDApOworKwkJcmV0dXJuIGVycm5vOworKwl9CisrCWlmIChmc3RhdChmZCwgJnN0YXRidWYpIDwgMCkgeworKwkJY29tX2VycihzcmMsIGVycm5vLCAwKTsKKysJCWNsb3NlKGZkKTsKKysJCXJldHVybiBlcnJubzsKKysJfQorKworKwlyZXR2YWwgPSBleHQyZnNfbmFtZWkoY3VycmVudF9mcywgcm9vdCwgY3dkLCBkZXN0LCAmbmV3ZmlsZSk7CisrCWlmIChyZXR2YWwgPT0gMCkgeworKwkJY29tX2VycihfX2Z1bmNfXywgMCwgIlRoZSBmaWxlICclcycgYWxyZWFkeSBleGlzdHNcbiIsIGRlc3QpOworKwkJY2xvc2UoZmQpOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworKwlyZXR2YWwgPSBleHQyZnNfbmV3X2lub2RlKGN1cnJlbnRfZnMsIGN3ZCwgMDEwNzU1LCAwLCAmbmV3ZmlsZSk7CisrCWlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgMCk7CisrCQljbG9zZShmZCk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrI2lmZGVmIERFQlVHRlMKKysJcHJpbnRmKCJBbGxvY2F0ZWQgaW5vZGU6ICV1XG4iLCBuZXdmaWxlKTsKKysjZW5kaWYKKysJcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgY3dkLCBkZXN0LCBuZXdmaWxlLAorKwkJCQlFWFQyX0ZUX1JFR19GSUxFKTsKKysJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworKwkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgY3dkKTsKKysJCWlmIChyZXR2YWwpIHsKKysJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSBleHBhbmRpbmcgZGlyZWN0b3J5Iik7CisrCQkJY2xvc2UoZmQpOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisrCQlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIGRlc3QsIG5ld2ZpbGUsCisrCQkJCQlFWFQyX0ZUX1JFR19GSUxFKTsKKysJfQorKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKGRlc3QsIHJldHZhbCwgMCk7CisrCQljbG9zZShmZCk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrICAgICAgICBpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdXJyZW50X2ZzLT5pbm9kZV9tYXAsIG5ld2ZpbGUpKQorKwkJY29tX2VycihfX2Z1bmNfXywgMCwgIldhcm5pbmc6IGlub2RlIGFscmVhZHkgc2V0Iik7CisrCWV4dDJmc19pbm9kZV9hbGxvY19zdGF0czIoY3VycmVudF9mcywgbmV3ZmlsZSwgKzEsIDApOworKwltZW1zZXQoJmlub2RlLCAwLCBzaXplb2YoaW5vZGUpKTsKKysJaW5vZGUuaV9tb2RlID0gKHN0YXRidWYuc3RfbW9kZSAmIH5MSU5VWF9TX0lGTVQpIHwgTElOVVhfU19JRlJFRzsKKysJaW5vZGUuaV9hdGltZSA9IGlub2RlLmlfY3RpbWUgPSBpbm9kZS5pX210aW1lID0KKysJCWN1cnJlbnRfZnMtPm5vdyA/IGN1cnJlbnRfZnMtPm5vdyA6IHRpbWUoMCk7CisrCWlub2RlLmlfbGlua3NfY291bnQgPSAxOworKwlpbm9kZS5pX3NpemUgPSBzdGF0YnVmLnN0X3NpemU7CisrCWlmIChjdXJyZW50X2ZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKysJICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKSB7CisrCQlpbnQgaTsKKysJCXN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKmVoOworKworKwkJZWggPSAoc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlciAqKSAmaW5vZGUuaV9ibG9ja1swXTsKKysJCWVoLT5laF9kZXB0aCA9IDA7CisrCQllaC0+ZWhfZW50cmllcyA9IDA7CisrCQllaC0+ZWhfbWFnaWMgPSBleHQyZnNfY3B1X3RvX2xlMTYoRVhUM19FWFRfTUFHSUMpOworKwkJaSA9IChzaXplb2YoaW5vZGUuaV9ibG9jaykgLSBzaXplb2YoKmVoKSkgLworKwkJCXNpemVvZihzdHJ1Y3QgZXh0M19leHRlbnQpOworKwkJZWgtPmVoX21heCA9IGV4dDJmc19jcHVfdG9fbGUxNihpKTsKKysJCWlub2RlLmlfZmxhZ3MgfD0gRVhUNF9FWFRFTlRTX0ZMOworKwl9CisrCisrCWlmICgocmV0dmFsID0gZXh0MmZzX3dyaXRlX25ld19pbm9kZShjdXJyZW50X2ZzLCBuZXdmaWxlLCAmaW5vZGUpKSkgeworKwkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgY3JlYXRpbmcgaW5vZGUgJXUiLCBuZXdmaWxlKTsKKysJCWNsb3NlKGZkKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysJaWYgKExJTlVYX1NfSVNSRUcoaW5vZGUuaV9tb2RlKSkgeworKwkJaWYgKHN0YXRidWYuc3RfYmxvY2tzIDwgc3RhdGJ1Zi5zdF9zaXplIC8gU19CTEtTSVpFKSB7CisrCQkJbWFrZV9ob2xlcyA9IDE7CisrCQkJLyoKKysJCQkgKiBVc2UgSS9PIGJsb2Nrc2l6ZSBhcyBidWZmZXIgc2l6ZSB3aGVuCisrCQkJICogY29weWluZyBzcGFyc2UgZmlsZXMuCisrCQkJICovCisrCQkJYnVmc2l6ZSA9IHN0YXRidWYuc3RfYmxrc2l6ZTsKKysJCX0KKysJCXJldHZhbCA9IGNvcHlfZmlsZShmZCwgbmV3ZmlsZSwgYnVmc2l6ZSwgbWFrZV9ob2xlcyk7CisrCQlpZiAocmV0dmFsKQorKwkJCWNvbV9lcnIoImNvcHlfZmlsZSIsIHJldHZhbCwgMCk7CisrCX0KKysJY2xvc2UoZmQpOworKworKwlyZXR1cm4gMDsKKyB9CisgCisgLyogQ29weSBmaWxlcyBmcm9tIHNvdXJjZV9kaXIgdG8gZnMgKi8KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA2LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLWRpcmVjdG9yeS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwNi1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1kaXJlY3RvcnkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM3Y2E5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwNi1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1kaXJlY3RvcnkucGF0Y2gKQEAgLTAsMCArMSw2MiBAQAorRnJvbSBjOGQxYzQzYmUyNDQ4OTAzNjEzN2Y4ZmRlYmNmY2NjMjA4ZjdjYzhiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDAzOjM0OjE0IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMTFdIG1pc2MvY3JlYXRlX2lub2RlLmM6IGNyZWF0ZSBkaXJlY3RvcnkKKworVGhlIGRvX21rZGlyX2ludGVybmFsKCkgaXMgdXNlZCBmb3IgbWFraW5nIGRpciBvbiB0aGUgdGFyZ2V0IGZzLCBtb3N0IG9mCit0aGUgY29kZSBhcmUgZnJvbSBkZWJ1Z2ZzL2RlYnVnZnMuYywgdGhlIGRlYnVnZnMvZGVidWdmcy5jIHdpbGwgYmUKK21vZGlmaWVkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9jcmVhdGVfaW5vZGUuYyB8ICAgMzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzMSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworaW5kZXggOThmNGE5My4uNmE4YzkyYSAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmMKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC0xMzUsNiArMTM1LDM3IEBAIHRyeV9hZ2FpbjoKKyAvKiBNYWtlIGEgZGlyZWN0b3J5IGluIHRoZSBmcyAqLworIGVycmNvZGVfdCBkb19ta2Rpcl9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorIHsKKysJY2hhcgkJCSpjcDsKKysJZXh0Ml9pbm9fdAkJcGFyZW50X2lubywgaW5vOworKwllcnJjb2RlX3QJCXJldHZhbDsKKysJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisrCisrCisrCWNwID0gc3RycmNocihuYW1lLCAnLycpOworKwlpZiAoY3ApIHsKKysJCSpjcCA9IDA7CisrCQlpZiAoKHJldHZhbCA9ICBleHQyZnNfbmFtZWkoY3VycmVudF9mcywgcm9vdCwgY3dkLCBuYW1lLCAmcGFyZW50X2lubykpKXsKKysJCQljb21fZXJyKG5hbWUsIHJldHZhbCwgMCk7CisrCQkJcmV0dXJuIHJldHZhbDsKKysJCX0KKysJCW5hbWUgPSBjcCsxOworKwl9IGVsc2UKKysJCXBhcmVudF9pbm8gPSBjd2Q7CisrCisrdHJ5X2FnYWluOgorKwlyZXR2YWwgPSBleHQyZnNfbWtkaXIoY3VycmVudF9mcywgcGFyZW50X2lubywgMCwgbmFtZSk7CisrCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9ESVJfTk9fU1BBQ0UpIHsKKysJCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIHBhcmVudF9pbm8pOworKwkJaWYgKHJldHZhbCkgeworKwkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKwkJZ290byB0cnlfYWdhaW47CisrCX0KKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycigiZXh0MmZzX21rZGlyIiwgcmV0dmFsLCAwKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKyB9CisgCisgc3RhdGljIGVycmNvZGVfdCBjb3B5X2ZpbGUoaW50IGZkLCBleHQyX2lub190IG5ld2ZpbGUsIGludCBidWZzaXplLCBpbnQgbWFrZV9ob2xlcykKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA3LW1pc2MtY3JlYXRlX2lub2RlLmMtc2V0LW93bmVyLW1vZGUtdGltZS1mb3ItdGhlLWlub2QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDctbWlzYy1jcmVhdGVfaW5vZGUuYy1zZXQtb3duZXItbW9kZS10aW1lLWZvci10aGUtaW5vZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjk2MzkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA3LW1pc2MtY3JlYXRlX2lub2RlLmMtc2V0LW93bmVyLW1vZGUtdGltZS1mb3ItdGhlLWlub2QucGF0Y2gKQEAgLTAsMCArMSw4MSBAQAorRnJvbSAyYjFmNmU2YjM4NjcwM2E1ZDdlNjBiN2Q4YjcyNzQ2ZjNkMzFhOGJjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDAzOjM5OjU2IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvMTFdIG1pc2MvY3JlYXRlX2lub2RlLmM6IHNldCBvd25lci9tb2RlL3RpbWUgZm9yIHRoZSBpbm9kZQorCitTZXQgdGhlIHVpZCwgZ2lkLCBtb2RlIGFuZCB0aW1lIGZvciBpbm9kZS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgfCAgIDQ1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworaW5kZXggNmE4YzkyYS4uYWFkNzM1NCAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmMKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC0xOCw2ICsxOCw0MCBAQAorICNkZWZpbmUgU19CTEtTSVpFIDUxMgorICNlbmRpZgorIAorKy8qIEZpbGwgdGhlIHVpZCwgZ2lkLCBtb2RlIGFuZCB0aW1lIGZvciB0aGUgaW5vZGUgKi8KKytzdGF0aWMgdm9pZCBmaWxsX2lub2RlKHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwgc3RydWN0IHN0YXQgKnN0KQorK3sKKysJaWYgKHN0ICE9IE5VTEwpIHsKKysJCWlub2RlLT5pX3VpZCA9IHN0LT5zdF91aWQ7CisrCQlpbm9kZS0+aV9naWQgPSBzdC0+c3RfZ2lkOworKwkJaW5vZGUtPmlfbW9kZSB8PSBzdC0+c3RfbW9kZTsKKysJCWlub2RlLT5pX2F0aW1lID0gc3QtPnN0X2F0aW1lOworKwkJaW5vZGUtPmlfbXRpbWUgPSBzdC0+c3RfbXRpbWU7CisrCQlpbm9kZS0+aV9jdGltZSA9IHN0LT5zdF9jdGltZTsKKysJfQorK30KKysKKysvKiBTZXQgdGhlIHVpZCwgZ2lkLCBtb2RlIGFuZCB0aW1lIGZvciB0aGUgaW5vZGUgKi8KKytlcnJjb2RlX3Qgc2V0X2lub2RlX2V4dHJhKGV4dDJfaW5vX3QgY3dkLCBleHQyX2lub190IGlubywgc3RydWN0IHN0YXQgKnN0KQorK3sKKysJZXJyY29kZV90CQlyZXR2YWw7CisrCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworKworKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShjdXJyZW50X2ZzLCBpbm8sICZpbm9kZSk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSByZWFkaW5nIGlub2RlICV1IiwgaW5vKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysKKysJZmlsbF9pbm9kZSgmaW5vZGUsIHN0KTsKKysKKysJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlKGN1cnJlbnRfZnMsIGlubywgJmlub2RlKTsKKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgd3JpdGluZyBpbm9kZSAldSIsIGlubyk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrfQorKworIC8qIE1ha2UgYSBzcGVjaWFsIGZpbGUgd2hpY2ggaXMgYmxvY2ssIGNoYXJhY3RlciBhbmQgZmlmbyAqLworIGVycmNvZGVfdCBkb19ta25vZF9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorIHsKK0BAIC00MzUsNiArNDY5LDE3IEBAIGVycmNvZGVfdCBwb3B1bGF0ZV9mcyhleHQyX2lub190IHBhcmVudF9pbm8sIGNvbnN0IGNoYXIgKnNvdXJjZV9kaXIpCisgCQkJCWNvbV9lcnIoX19mdW5jX18sIDAsCisgCQkJCQlfKCJpZ25vcmluZyBlbnRyeSBcIiVzXCIiKSwgbmFtZSk7CisgCQl9CisrCisrCQlpZiAoKHJldHZhbCA9ICBleHQyZnNfbmFtZWkoY3VycmVudF9mcywgcm9vdCwgcGFyZW50X2lubywgbmFtZSwgJmlubykpKXsKKysJCQljb21fZXJyKG5hbWUsIHJldHZhbCwgMCk7CisrCQkJcmV0dXJuIHJldHZhbDsKKysJCX0KKysKKysJCWlmICgocmV0dmFsID0gc2V0X2lub2RlX2V4dHJhKHBhcmVudF9pbm8sIGlubywgJnN0KSkpIHsKKysJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsCisrCQkJCV8oIndoaWxlIHNldHRpbmcgaW5vZGUgZm9yIFwiJXNcIiIpLCBuYW1lKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorIAl9CisgCWNsb3NlZGlyKGRoKTsKKyAJcmV0dXJuIHJldHZhbDsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA4LW1rZTJmcy5jLWFkZC1hbi1vcHRpb24tZC1yb290LWRpcmVjdG9yeS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwOC1ta2UyZnMuYy1hZGQtYW4tb3B0aW9uLWQtcm9vdC1kaXJlY3RvcnkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5ODY3MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwOC1ta2UyZnMuYy1hZGQtYW4tb3B0aW9uLWQtcm9vdC1kaXJlY3RvcnkucGF0Y2gKQEAgLTAsMCArMSwxNjggQEAKK0Zyb20gZGY4NTY5MjllNDJiZDRmM2JkYzhkNGY1OWVlODJhZThiMjg1MzJlNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAyNCBEZWMgMjAxMyAwMTo1MDo0NSAtMDUwMAorU3ViamVjdDogW1BBVENIIDA4LzExXSBta2UyZnMuYzogYWRkIGFuIG9wdGlvbjogLWQgcm9vdC1kaXJlY3RvcnkKKworVGhpcyBvcHRpb24gaXMgdXNlZCBmb3IgYWRkaW5nIHRoZSBmaWxlcyBmcm9tIGEgZ2l2ZW4gZGlyZWN0b3J5ICh0aGUKK3Jvb3QtZGlyZWN0b3J5KSB0byB0aGUgZmlsZXN5c3RlbSwgaXQgaXMgc2ltaWxpYXIgdG8gZ2VuZXh0MmZzLCBidXQKK2dlbmV4dDJmcyBkb2Vzbid0IGZ1bGx5IHN1cHBvcnQgZXh0NC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvTWFrZWZpbGUuaW4gfCAgIDE0ICsrKysrKysrKystLS0tCisgbWlzYy9ta2UyZnMuYyAgICB8ICAgMzIgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbWlzYy9NYWtlZmlsZS5pbiBiL21pc2MvTWFrZWZpbGUuaW4KK2luZGV4IDU1M2MzNjEuLjgyNTM3MjMgMTAwNjQ0CistLS0gYS9taXNjL01ha2VmaWxlLmluCisrKysgYi9taXNjL01ha2VmaWxlLmluCitAQCAtNDIsNyArNDIsOCBAQCBMUFJPR1M9CQlARTJJTklUUkRfUFJPR0AKKyAKKyBUVU5FMkZTX09CSlM9CXR1bmUyZnMubyB1dGlsLm8KKyBNS0xQRl9PQkpTPQlta2xvc3QrZm91bmQubworLU1LRTJGU19PQkpTPQlta2UyZnMubyB1dGlsLm8gcHJvZmlsZS5vIHByb2ZfZXJyLm8gZGVmYXVsdF9wcm9maWxlLm8KKytNS0UyRlNfT0JKUz0JbWtlMmZzLm8gdXRpbC5vIHByb2ZpbGUubyBwcm9mX2Vyci5vIGRlZmF1bHRfcHJvZmlsZS5vIFwKKysJCQljcmVhdGVfaW5vZGUubworIENIQVRUUl9PQkpTPQljaGF0dHIubworIExTQVRUUl9PQkpTPQlsc2F0dHIubworIFVVSURHRU5fT0JKUz0JdXVpZGdlbi5vCitAQCAtNjAsNyArNjEsOCBAQCBFMkZSRUVGUkFHX09CSlM9IGUyZnJlZWZyYWcubworIFBST0ZJTEVEX1RVTkUyRlNfT0JKUz0JcHJvZmlsZWQvdHVuZTJmcy5vIHByb2ZpbGVkL3V0aWwubworIFBST0ZJTEVEX01LTFBGX09CSlM9CXByb2ZpbGVkL21rbG9zdCtmb3VuZC5vCisgUFJPRklMRURfTUtFMkZTX09CSlM9CXByb2ZpbGVkL21rZTJmcy5vIHByb2ZpbGVkL3V0aWwubyBwcm9maWxlZC9wcm9maWxlLm8gXAorLQkJCXByb2ZpbGVkL3Byb2ZfZXJyLm8gcHJvZmlsZWQvZGVmYXVsdF9wcm9maWxlLm8KKysJCQlwcm9maWxlZC9wcm9mX2Vyci5vIHByb2ZpbGVkL2RlZmF1bHRfcHJvZmlsZS5vIFwKKysJCQlwcm9maWxlZC9jcmVhdGVfaW5vZGUubworIFBST0ZJTEVEX0NIQVRUUl9PQkpTPQlwcm9maWxlZC9jaGF0dHIubworIFBST0ZJTEVEX0xTQVRUUl9PQkpTPQlwcm9maWxlZC9sc2F0dHIubworIFBST0ZJTEVEX1VVSURHRU5fT0JKUz0JcHJvZmlsZWQvdXVpZGdlbi5vCitAQCAtODIsNyArODQsNyBAQCBTUkNTPQkkKHNyY2RpcikvdHVuZTJmcy5jICQoc3JjZGlyKS9ta2xvc3QrZm91bmQuYyAkKHNyY2RpcikvbWtlMmZzLmMgXAorIAkJJChzcmNkaXIpL3V1aWRnZW4uYyAkKHNyY2RpcikvYmxraWQuYyAkKHNyY2RpcikvbG9nc2F2ZS5jIFwKKyAJCSQoc3JjZGlyKS9maWxlZnJhZy5jICQoc3JjZGlyKS9iYXNlX2RldmljZS5jIFwKKyAJCSQoc3JjZGlyKS9pc21vdW50ZWQuYyAkKHNyY2RpcikvLi4vZTJmc2NrL3Byb2ZpbGUuYyBcCistCQkkKHNyY2RpcikvZTJ1bmRvLmMgJChzcmNkaXIpL2UyZnJlZWZyYWcuYworKwkJJChzcmNkaXIpL2UydW5kby5jICQoc3JjZGlyKS9lMmZyZWVmcmFnLmMgJChzcmNkaXIpL2NyZWF0ZV9pbm9kZS5jCisgCisgTElCUz0gJChMSUJFWFQyRlMpICQoTElCQ09NX0VSUikgCisgREVQTElCUz0gJChMSUJFWFQyRlMpICQoREVQTElCQ09NX0VSUikKK0BAIC02MzAsNyArNjMyLDcgQEAgbWtlMmZzLm86ICQoc3JjZGlyKS9ta2UyZnMuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oIFwKKyAgJChzcmNkaXIpL3V0aWwuaCBwcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL3ZlcnNpb24uaCBcCistICQoc3JjZGlyKS9ubHMtZW5hYmxlLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvbWtxdW90YS5oIFwKKysgJChzcmNkaXIpL25scy1lbmFibGUuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9ta3F1b3RhLmggJChzcmNkaXIpL2NyZWF0ZV9pbm9kZS5oXAorICAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCBcCisgICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmgKKyBjaGF0dHIubzogJChzcmNkaXIpL2NoYXR0ci5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorQEAgLTcxMCwzICs3MTIsNyBAQCBlMmZyZWVmcmFnLm86ICQoc3JjZGlyKS9lMmZyZWVmcmFnLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAgJChzcmNkaXIpL2UyZnJlZWZyYWcuaAorK2NyZWF0ZV9pbm9kZS5vOiAkKHNyY2RpcikvY3JlYXRlX2lub2RlLmggJChzcmNkaXIpL2NyZWF0ZV9pbm9kZS5jIFwKKysgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggXAorKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZTJwL2UycC5oIFwKKysgJChzcmNkaXIpL25scy1lbmFibGUuaAorZGlmZiAtLWdpdCBhL21pc2MvbWtlMmZzLmMgYi9taXNjL21rZTJmcy5jCitpbmRleCAyZThiYTYwLi41NzhiNjJkIDEwMDY0NAorLS0tIGEvbWlzYy9ta2UyZnMuYworKysrIGIvbWlzYy9ta2UyZnMuYworQEAgLTIyLDcgKzIyLDYgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN0cmluZ3MuaD4KKy0jaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8dGltZS5oPgorICNpZmRlZiBfX2xpbnV4X18KK0BAIC00NCwyNCArNDMsMTkgQEAgZXh0ZXJuIGludCBvcHRpbmQ7CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2VuZGlmCisgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8bGliZ2VuLmg+CisgI2luY2x1ZGUgPGxpbWl0cy5oPgorICNpbmNsdWRlIDxibGtpZC9ibGtpZC5oPgorIAorICNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorICNpbmNsdWRlICJleHQyZnMvZXh0MmZzUC5oIgorLSNpbmNsdWRlICJldC9jb21fZXJyLmgiCisgI2luY2x1ZGUgInV1aWQvdXVpZC5oIgorLSNpbmNsdWRlICJlMnAvZTJwLmgiCistI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKyAjaW5jbHVkZSAidXRpbC5oIgorICNpbmNsdWRlICJwcm9maWxlLmgiCisgI2luY2x1ZGUgInByb2ZfZXJyLmgiCisgI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKKy0jaW5jbHVkZSAibmxzLWVuYWJsZS5oIgorICNpbmNsdWRlICJxdW90YS9ta3F1b3RhLmgiCisrI2luY2x1ZGUgImNyZWF0ZV9pbm9kZS5oIgorIAorICNkZWZpbmUgU1RSSURFX0xFTkdUSCA4CisgCitAQCAtMTA1LDYgKzk5LDcgQEAgc3RhdGljIGNoYXIgKm1vdW50X2RpcjsKKyBjaGFyICpqb3VybmFsX2RldmljZTsKKyBzdGF0aWMgaW50IHN5bmNfa2x1ZGdlOwkvKiBTZXQgdXNpbmcgdGhlIE1LRTJGU19TWU5DIGVudi4gb3B0aW9uICovCisgc3RhdGljIGNoYXIgKipmc190eXBlczsKKytjb25zdCBjaGFyICpyb290X2RpcjsgIC8qIENvcHkgZmlsZXMgZnJvbSB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSAqLworIAorIHN0YXRpYyBwcm9maWxlX3QJcHJvZmlsZTsKKyAKK0BAIC0xMTYsNyArMTExLDggQEAgc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKKyAJZnByaW50ZihzdGRlcnIsIF8oIlVzYWdlOiAlcyBbLWN8LWwgZmlsZW5hbWVdIFstYiBibG9jay1zaXplXSAiCisgCSJbLUMgY2x1c3Rlci1zaXplXVxuXHRbLWkgYnl0ZXMtcGVyLWlub2RlXSBbLUkgaW5vZGUtc2l6ZV0gIgorIAkiWy1KIGpvdXJuYWwtb3B0aW9uc11cbiIKKy0JIlx0Wy1HIGZsZXgtZ3JvdXAtc2l6ZV0gWy1OIG51bWJlci1vZi1pbm9kZXNdXG4iCisrCSJcdFstRyBmbGV4LWdyb3VwLXNpemVdIFstTiBudW1iZXItb2YtaW5vZGVzXSAiCisrCSJbLWQgcm9vdC1kaXJlY3RvcnldXG4iCisgCSJcdFstbSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZV0gWy1vIGNyZWF0b3Itb3NdXG4iCisgCSJcdFstZyBibG9ja3MtcGVyLWdyb3VwXSBbLUwgdm9sdW1lLWxhYmVsXSAiCisgCSJbLU0gbGFzdC1tb3VudGVkLWRpcmVjdG9yeV1cblx0Wy1PIGZlYXR1cmVbLC4uLl1dICIKK0BAIC0xMzk0LDcgKzEzOTAsNyBAQCBwcm9maWxlX2Vycm9yOgorIAl9CisgCisgCXdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwKKy0JCSAgICAiYjpjZzppOmpsOm06bm86cXI6czp0OnZDOkRFOkZHOkk6SjpLTDpNOk46TzpSOlNUOlU6ViIpKSAhPSBFT0YpIHsKKysJCSAgICAiYjpjZzppOmpsOm06bm86cXI6czp0OmQ6dkM6REU6Rkc6STpKOktMOk06TjpPOlI6U1Q6VTpWIikpICE9IEVPRikgeworIAkJc3dpdGNoIChjKSB7CisgCQljYXNlICdiJzoKKyAJCQlibG9ja3NpemUgPSBwYXJzZV9udW1fYmxvY2tzMihvcHRhcmcsIC0xKTsKK0BAIC0xNTgyLDYgKzE1NzgsOSBAQCBwcm9maWxlX2Vycm9yOgorIAkJY2FzZSAnVSc6CisgCQkJZnNfdXVpZCA9IG9wdGFyZzsKKyAJCQlicmVhazsKKysJCWNhc2UgJ2QnOgorKwkJCXJvb3RfZGlyID0gb3B0YXJnOworKwkJCWJyZWFrOworIAkJY2FzZSAndic6CisgCQkJdmVyYm9zZSA9IDE7CisgCQkJYnJlYWs7CitAQCAtMjcyNiw2ICsyNzI1LDIxIEBAIG5vX2pvdXJuYWw6CisgCQkJCSAgICAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1FVT1RBKSkKKyAJCWNyZWF0ZV9xdW90YV9pbm9kZXMoZnMpOworIAorKwkvKiBDb3B5IGZpbGVzIGZyb20gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgKi8KKysJaWYgKHJvb3RfZGlyKSB7CisrCQlpZiAoIXF1aWV0KQorKwkJCXByaW50ZigiJXMiLCBfKCJDb3B5aW5nIGZpbGVzIGludG8gdGhlIGRldmljZTogIikpOworKworKwkJY3VycmVudF9mcyA9IGZzOworKwkJcm9vdCA9IEVYVDJfUk9PVF9JTk87CisrCQlyZXR2YWwgPSBwb3B1bGF0ZV9mcyhyb290LCByb290X2Rpcik7CisrCQlpZiAocmV0dmFsKQorKwkJCWZwcmludGYoc3RkZXJyLCAiJXMiLAorKwkJCQlfKCJcbkVycm9yIHdoaWxlIHBvcHVsYXRpbmcgZmlsZSBzeXN0ZW0iKSk7CisrCQllbHNlIGlmICghcXVpZXQpCisrCQkJcHJpbnRmKCIlcyIsIF8oImRvbmVcbiIpKTsKKysJfQorKworIAlpZiAoIXF1aWV0KQorIAkJcHJpbnRmKCIlcyIsIF8oIldyaXRpbmcgc3VwZXJibG9ja3MgYW5kICIKKyAJCSAgICAgICAiZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAiKSk7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwOS1taXNjLWNyZWF0ZV9pbm9kZS5jLWhhbmRsZS1oYXJkbGlua3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDktbWlzYy1jcmVhdGVfaW5vZGUuYy1oYW5kbGUtaGFyZGxpbmtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMzBlZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDktbWlzYy1jcmVhdGVfaW5vZGUuYy1oYW5kbGUtaGFyZGxpbmtzLnBhdGNoCkBAIC0wLDAgKzEsMjEwIEBACitGcm9tIGQ4M2RjOTUwYjNlYzFmYmRlMzNiMjNkNDJjNTE1NDA5MWE3NGY0ZDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjMgRGVjIDIwMTMgMDM6NDQ6MDMgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAwOS8xMV0gbWlzYy9jcmVhdGVfaW5vZGUuYzogaGFuZGxlIGhhcmRsaW5rcworCitDcmVhdGUgdGhlIGlub2RlIGFuZCBzYXZlIHRoZSBuYXRpdmUgaW5vZGUgbnVtYmVyIHdoZW4gd2UgbWVldCB0aGUgaGFyZAorbGluayAoc3RfbmxpbmsgPiAxKSBhdCB0aGUgZmlyc3QgdGltZSwgdXNlIGV4dDJmc19saW5rKCkgdG8gbGluayB0aGUKK25hbWUgdG8gdGhlIHRhcmdldCBpbm9kZSBudW1iZXIgd2hlbiB3ZSBtZWV0IHRoZSBzYW1lIG5hdGl2ZSBpbm9kZQorbnVtYmVyIGFnYWluLgorCitUaGlzIGFsZ29yaXRobSBpcyByZWZlcnJlZCBmcm9tIHRoZSBnZW5leHQyZnMuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaXNjL2NyZWF0ZV9pbm9kZS5jIHwgICA4OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBtaXNjL2NyZWF0ZV9pbm9kZS5oIHwgICAxOCArKysrKysrKysrKworIG1pc2MvbWtlMmZzLmMgICAgICAgfCAgIDEyICsrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDExOCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworaW5kZXggYWFkNzM1NC4uNzYzNTA0ZCAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmMKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC0xOCw2ICsxOCw0NCBAQAorICNkZWZpbmUgU19CTEtTSVpFIDUxMgorICNlbmRpZgorIAorKy8qIEZvciBzYXZpbmcgdGhlIGhhcmQgbGlua3MgKi8KKytpbnQgaGRsaW5rX2NudCA9IEhETElOS19DTlQ7CisrCisrLyogTGluayBhbiBpbm9kZSBudW1iZXIgdG8gYSBkaXJlY3RvcnkgKi8KKytzdGF0aWMgZXJyY29kZV90IGFkZF9saW5rKGV4dDJfaW5vX3QgcGFyZW50X2lubywgZXh0Ml9pbm9fdCBpbm8sIGNvbnN0IGNoYXIgKm5hbWUpCisreworKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKysJZXJyY29kZV90CQlyZXR2YWw7CisrCisrCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGN1cnJlbnRfZnMsIGlubywgJmlub2RlKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIHJlYWRpbmcgaW5vZGUgJXUiLCBpbm8pOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworKwlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBwYXJlbnRfaW5vLCBuYW1lLCBpbm8sIGlub2RlLmlfZmxhZ3MpOworKwlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CisrCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBwYXJlbnRfaW5vKTsKKysJCWlmIChyZXR2YWwpIHsKKysJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSBleHBhbmRpbmcgZGlyZWN0b3J5Iik7CisrCQkJcmV0dXJuIHJldHZhbDsKKysJCX0KKysJCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIHBhcmVudF9pbm8sIG5hbWUsIGlubywgaW5vZGUuaV9mbGFncyk7CisrCX0KKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgbGlua2luZyAlcyIsIG5hbWUpOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworKwlpbm9kZS5pX2xpbmtzX2NvdW50Kys7CisrCisrCXJldHZhbCA9IGV4dDJmc193cml0ZV9pbm9kZShjdXJyZW50X2ZzLCBpbm8sICZpbm9kZSk7CisrCWlmIChyZXR2YWwpCisrCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSB3cml0aW5nIGlub2RlICV1IiwgaW5vKTsKKysKKysJcmV0dXJuIHJldHZhbDsKKyt9CisrCisgLyogRmlsbCB0aGUgdWlkLCBnaWQsIG1vZGUgYW5kIHRpbWUgZm9yIHRoZSBpbm9kZSAqLworIHN0YXRpYyB2b2lkIGZpbGxfaW5vZGUoc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgc3RhdCAqc3QpCisgeworQEAgLTI3OCw2ICszMTYsMTcgQEAgZmFpbDoKKyAJcmV0dXJuIHJldHZhbDsKKyB9CisgCisraW50IGlzX2hhcmRsaW5rKGV4dDJfaW5vX3QgaW5vKQorK3sKKysJaW50IGk7CisrCisrCWZvcihpID0gMDsgaSA8IGhkbGlua3MuY291bnQ7IGkrKykgeworKwkJaWYoaGRsaW5rcy5oZGxbaV0uc3JjX2lubyA9PSBpbm8pCisrCQkJcmV0dXJuIGk7CisrCX0KKysJcmV0dXJuIC0xOworK30KKysKKyAvKiBDb3B5IHRoZSBuYXRpdmUgZmlsZSB0byB0aGUgZnMgKi8KKyBlcnJjb2RlX3QgZG9fd3JpdGVfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZGVzdCkKKyB7CitAQCAtMzg4LDkgKzQzNywxMSBAQCBlcnJjb2RlX3QgcG9wdWxhdGVfZnMoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBjb25zdCBjaGFyICpzb3VyY2VfZGlyKQorIAlzdHJ1Y3QgZGlyZW50CSpkZW50OworIAlzdHJ1Y3Qgc3RhdAlzdDsKKyAJY2hhcgkJbG5fdGFyZ2V0W1BBVEhfTUFYXTsKKysJdW5zaWduZWQgaW50CXNhdmVfaW5vZGU7CisgCWV4dDJfaW5vX3QJaW5vOworIAllcnJjb2RlX3QJcmV0dmFsOworIAlpbnQJCXJlYWRfY250OworKwlpbnQJCWhkbGluazsKKyAKKyAJcm9vdCA9IEVYVDJfUk9PVF9JTk87CisgCitAQCAtNDEyLDYgKzQ2MywyMiBAQCBlcnJjb2RlX3QgcG9wdWxhdGVfZnMoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBjb25zdCBjaGFyICpzb3VyY2VfZGlyKQorIAkJbHN0YXQoZGVudC0+ZF9uYW1lLCAmc3QpOworIAkJbmFtZSA9IGRlbnQtPmRfbmFtZTsKKyAKKysJCS8qIENoZWNrIGZvciBoYXJkbGlua3MgKi8KKysJCXNhdmVfaW5vZGUgPSAwOworKwkJaWYgKCFTX0lTRElSKHN0LnN0X21vZGUpICYmICFTX0lTTE5LKHN0LnN0X21vZGUpICYmIHN0LnN0X25saW5rID4gMSkgeworKwkJCWhkbGluayA9IGlzX2hhcmRsaW5rKHN0LnN0X2lubyk7CisrCQkJaWYgKGhkbGluayA+PSAwKSB7CisrCQkJCXJldHZhbCA9IGFkZF9saW5rKHBhcmVudF9pbm8sCisrCQkJCQkJaGRsaW5rcy5oZGxbaGRsaW5rXS5kc3RfaW5vLCBuYW1lKTsKKysJCQkJaWYgKHJldHZhbCkgeworKwkJCQkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgbGlua2luZyAlcyIsIG5hbWUpOworKwkJCQkJcmV0dXJuIHJldHZhbDsKKysJCQkJfQorKwkJCQljb250aW51ZTsKKysJCQl9IGVsc2UKKysJCQkJc2F2ZV9pbm9kZSA9IDE7CisrCQl9CisrCisgCQlzd2l0Y2goc3Quc3RfbW9kZSAmIFNfSUZNVCkgeworIAkJCWNhc2UgU19JRkNIUjoKKyAJCQljYXNlIFNfSUZCTEs6CitAQCAtNDgwLDYgKzU0NywyNyBAQCBlcnJjb2RlX3QgcG9wdWxhdGVfZnMoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBjb25zdCBjaGFyICpzb3VyY2VfZGlyKQorIAkJCQlfKCJ3aGlsZSBzZXR0aW5nIGlub2RlIGZvciBcIiVzXCIiKSwgbmFtZSk7CisgCQkJcmV0dXJuIHJldHZhbDsKKyAJCX0KKysKKysJCS8qIFNhdmUgdGhlIGhhcmRsaW5rIGlubyAqLworKwkJaWYgKHNhdmVfaW5vZGUpIHsKKysJCQkvKgorKwkJCSAqIENoZWNrIHdoZXRoZXIgbmVlZCBtb3JlIG1lbW9yeSwgYW5kIHdlIGRvbid0IG5lZWQKKysJCQkgKiBmcmVlKCkgc2luY2UgdGhlIGxpZmVzcGFuIHdpbGwgYmUgb3ZlciBhZnRlciB0aGUgZnMKKysJCQkgKiBwb3B1bGF0ZWQuCisrCQkJICovCisrCQkJaWYgKGhkbGlua3MuY291bnQgPT0gaGRsaW5rX2NudCkgeworKwkJCQlpZiAoKGhkbGlua3MuaGRsID0gcmVhbGxvYyAoaGRsaW5rcy5oZGwsCisrCQkJCQkJKGhkbGlua19jbnQgKyBIRExJTktfQ05UKSAqCisrCQkJCQkJc2l6ZW9mIChzdHJ1Y3QgaGRsaW5rX3MpKSkgPT0gTlVMTCkgeworKwkJCQkJY29tX2VycihuYW1lLCBlcnJubywgIk5vdCBlbm91Z2ggbWVtb3J5Iik7CisrCQkJCQlyZXR1cm4gZXJybm87CisrCQkJCX0KKysJCQkJaGRsaW5rX2NudCArPSBIRExJTktfQ05UOworKwkJCX0KKysJCQloZGxpbmtzLmhkbFtoZGxpbmtzLmNvdW50XS5zcmNfaW5vID0gc3Quc3RfaW5vOworKwkJCWhkbGlua3MuaGRsW2hkbGlua3MuY291bnRdLmRzdF9pbm8gPSBpbm87CisrCQkJaGRsaW5rcy5jb3VudCsrOworKwkJfQorIAl9CisgCWNsb3NlZGlyKGRoKTsKKyAJcmV0dXJuIHJldHZhbDsKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5oIGIvbWlzYy9jcmVhdGVfaW5vZGUuaAoraW5kZXggOWZjOTdmYS4uMmI2ZDQyOSAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmgKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmgKK0BAIC02LDkgKzYsMjcgQEAKKyAjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorICNpbmNsdWRlICJubHMtZW5hYmxlLmgiCisgCisrc3RydWN0IGhkbGlua19zCisreworKwlleHQyX2lub190IHNyY19pbm87CisrCWV4dDJfaW5vX3QgZHN0X2lubzsKKyt9OworKworK3N0cnVjdCBoZGxpbmtzX3MKKyt7CisrCWludCBjb3VudDsKKysJc3RydWN0IGhkbGlua19zICpoZGw7CisrfTsKKysKKytzdHJ1Y3QgaGRsaW5rc19zIGhkbGlua3M7CisrCisgZXh0Ml9maWxzeXMgICAgY3VycmVudF9mczsKKyBleHQyX2lub190ICAgICByb290OworIAorKy8qIEZvciBzYXZpbmcgdGhlIGhhcmQgbGlua3MgKi8KKysjZGVmaW5lIEhETElOS19DTlQgICAgIDQKKytleHRlcm4gaW50IGhkbGlua19jbnQ7CisrCisgLyogRm9yIHBvcHVsYXRpbmcgdGhlIGZpbGVzeXN0ZW0gKi8KKyBleHRlcm4gZXJyY29kZV90IHBvcHVsYXRlX2ZzKGV4dDJfaW5vX3QgcGFyZW50X2lubywgY29uc3QgY2hhciAqc291cmNlX2Rpcik7CisgZXh0ZXJuIGVycmNvZGVfdCBkb19ta25vZF9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KTsKK2RpZmYgLS1naXQgYS9taXNjL21rZTJmcy5jIGIvbWlzYy9ta2UyZnMuYworaW5kZXggNTc4YjYyZC4uYTYzZjBiNyAxMDA2NDQKKy0tLSBhL21pc2MvbWtlMmZzLmMKKysrKyBiL21pc2MvbWtlMmZzLmMKK0BAIC0yNzMwLDYgKzI3MzAsMTggQEAgbm9fam91cm5hbDoKKyAJCWlmICghcXVpZXQpCisgCQkJcHJpbnRmKCIlcyIsIF8oIkNvcHlpbmcgZmlsZXMgaW50byB0aGUgZGV2aWNlOiAiKSk7CisgCisrCQkvKgorKwkJICogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaGFyZGxpbmtzLCB3ZSBkb24ndCBuZWVkIGZyZWUoKQorKwkJICogc2luY2UgdGhlIGxpZmVzcGFuIHdpbGwgYmUgb3ZlciBhZnRlciB0aGUgZnMgcG9wdWxhdGVkLgorKwkJICovCisrCQlpZiAoKGhkbGlua3MuaGRsID0gKHN0cnVjdCBoZGxpbmtfcyAqKQorKwkJCQltYWxsb2MoaGRsaW5rX2NudCAqIHNpemVvZihzdHJ1Y3QgaGRsaW5rX3MpKSkgPT0gTlVMTCkgeworKwkJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBfKCJcbk5vdCBlbm91Z2ggbWVtb3J5XG4iKSk7CisrCQkJcmV0dmFsID0gZXh0MmZzX2Nsb3NlKGZzKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKworKwkJaGRsaW5rcy5jb3VudCA9IDA7CisgCQljdXJyZW50X2ZzID0gZnM7CisgCQlyb290ID0gRVhUMl9ST09UX0lOTzsKKyAJCXJldHZhbCA9IHBvcHVsYXRlX2ZzKHJvb3QsIHJvb3RfZGlyKTsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDEwLWRlYnVnZnMtdXNlLXRoZS1mdW5jdGlvbnMtaW4tbWlzYy1jcmVhdGVfaW5vZGUuYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAxMC1kZWJ1Z2ZzLXVzZS10aGUtZnVuY3Rpb25zLWluLW1pc2MtY3JlYXRlX2lub2RlLmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE2Y2E4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAxMC1kZWJ1Z2ZzLXVzZS10aGUtZnVuY3Rpb25zLWluLW1pc2MtY3JlYXRlX2lub2RlLmMucGF0Y2gKQEAgLTAsMCArMSw0OTYgQEAKK0Zyb20gZGI4OTk5MmZhYjIyMTVmNTJkY2U0YzU5NWEzOTI3MWI0ZmYzMDAwYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMyBEZWMgMjAxMyAwNDoyMjoyMiAtMDUwMAorU3ViamVjdDogW1BBVENIIDEwLzExXSBkZWJ1Z2ZzOiB1c2UgdGhlIGZ1bmN0aW9ucyBpbiBtaXNjL2NyZWF0ZV9pbm9kZS5jCisKKyogVXNlIHRoZSBmdW5jdGlvbnMgaW4gbWlzYy9jcmVhdGVfaW5vZGUuYywgYW5kIHJlbW92ZSB0aGUgZHVwbGljYXRlZAorICBjb2RlLgorCisqIFRoZSBDUkVBVEVfSU5PREVfREVQUyBpbiB0aGUgZGVidWdmcy9NYWtlZmlsZS5pbiBpcyB1c2VkIGZvciByZWNvcmRpbmcKKyAgY3JlYXRlX2lub2RlLm8ncyBkZXBlbmRzIHdoaWNoIGlzIGZyb20gbWlzYy9NYWtlZmlsZS5pbiwgd2UgaGF2ZSB0bworICByZWNvbXBpbGUgY3JlYXRlX2lub2RlLm8gYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIHByaW50IG1vcmUgbWVzc2FnZXMgd2hlbgorICBpdCBpcyB1c2VkIGJ5IGRlYnVnZnMsIGp1c3QgbGlrZSB3ZSByZWNvbXBpbGUgZTJmcmVlZnJhZy5vLCBidXQgaXQgc2VlbXMKKyAgdGhhdCB0aGUgZTJmcmVlZnJhZy5vJ3MgZGVwZW5kcyBpbiBkZWJ1Z2ZzL01ha2VmaWxlLmluIGlzIGluY29ycmVjdCwgaXQKKyAgd291bGQgbm90IHJlYnVpbGQgd2hlbiBpdHMgZGVwZW5kcyAoZS5nLjogbGliL2NvbmZpZy5oKSBpcyBjaGFuZ2VkLAorICB3aGljaCB3b3VsZCBjYXVzZSB1bmV4cGVjdGVkIGVycm9ycy4gTWFrZSBkdXBsaWNhdGVkIGNvZGUgaW4KKyAgZGVidWdmcy9NYWtlZmlsZS5pbiBhbmQgbWlzYy9NYWtlZmlsZS5pbiBpcyBub3QgYSBnb29kIGlkZWEsIG1heWJlIHdlJ2QKKyAgYmV0dGVyIGRlZmluZSBDUkVBVEVfSU5PREVfREVQUyBpbiB0aGUgdG9wIE1ha2VmaWxlLCBJJ2QgbGlrZSB0byBzZW5kCisgIGFub3RoZXIgcGF0Y2ggYW5kIGZpeCB0aGUgZTJmcmVlZnJhZyBpZiB5b3UgYXJlIGZpbmUgd2l0aCBpdC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGRlYnVnZnMvTWFrZWZpbGUuaW4gfCAgIDE3ICsrLQorIGRlYnVnZnMvZGVidWdmcy5jICAgfCAgMzA1ICsrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGRlYnVnZnMvZGVidWdmcy5oICAgfCAgICAxICsKKyAzIGZpbGVzIGNoYW5nZWQsIDMxIGluc2VydGlvbnMoKyksIDI5MiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RlYnVnZnMvTWFrZWZpbGUuaW4gYi9kZWJ1Z2ZzL01ha2VmaWxlLmluCitpbmRleCBiZjAzN2UwLi5mNTFiNzhlIDEwMDY0NAorLS0tIGEvZGVidWdmcy9NYWtlZmlsZS5pbgorKysrIGIvZGVidWdmcy9NYWtlZmlsZS5pbgorQEAgLTE4LDcgKzE4LDcgQEAgTUtfQ01EUz0JX1NTX0RJUl9PVkVSUklERT0uLi9saWIvc3MgLi4vbGliL3NzL21rX2NtZHMKKyAKKyBERUJVR19PQkpTPSBkZWJ1Z19jbWRzLm8gZGVidWdmcy5vIHV0aWwubyBuY2hlY2subyBpY2hlY2subyBscy5vIFwKKyAJbHNkZWwubyBkdW1wLm8gc2V0X2ZpZWxkcy5vIGxvZ2R1bXAubyBodHJlZS5vIHVudXNlZC5vIGUyZnJlZWZyYWcubyBcCistCWZpbGVmcmFnLm8gZXh0ZW50X2NtZHMubyBleHRlbnRfaW5vZGUubyB6YXAubworKwlmaWxlZnJhZy5vIGV4dGVudF9jbWRzLm8gZXh0ZW50X2lub2RlLm8gemFwLm8gY3JlYXRlX2lub2RlLm8KKyAKKyBST19ERUJVR19PQkpTPSByb19kZWJ1Z19jbWRzLm8gcm9fZGVidWdmcy5vIHV0aWwubyBuY2hlY2subyBpY2hlY2subyBscy5vIFwKKyAJbHNkZWwubyBsb2dkdW1wLm8gaHRyZWUubyBlMmZyZWVmcmFnLm8gZmlsZWZyYWcubyBleHRlbnRfY21kcy5vIFwKK0BAIC0yOCw3ICsyOCwxMyBAQCBTUkNTPSBkZWJ1Z19jbWRzLmMgJChzcmNkaXIpL2RlYnVnZnMuYyAkKHNyY2RpcikvdXRpbC5jICQoc3JjZGlyKS9scy5jIFwKKyAJJChzcmNkaXIpL25jaGVjay5jICQoc3JjZGlyKS9pY2hlY2suYyAkKHNyY2RpcikvbHNkZWwuYyBcCisgCSQoc3JjZGlyKS9kdW1wLmMgJChzcmNkaXIpL3NldF9maWVsZHMuYyAke3NyY2Rpcn0vbG9nZHVtcC5jIFwKKyAJJChzcmNkaXIpL2h0cmVlLmMgJChzcmNkaXIpL3VudXNlZC5jICR7c3JjZGlyfS8uLi9taXNjL2UyZnJlZWZyYWcuYyBcCistCSQoc3JjZGlyKS9maWxlZnJhZy5jICQoc3JjZGlyKS9leHRlbnRfaW5vZGUuYyAkKHNyY2RpcikvemFwLmMKKysJJChzcmNkaXIpL2ZpbGVmcmFnLmMgJChzcmNkaXIpL2V4dGVudF9pbm9kZS5jICQoc3JjZGlyKS96YXAuYyBcCisrCSQoc3JjZGlyKS8uLi9taXNjL2NyZWF0ZV9pbm9kZS5jCisrCisrQ1JFQVRFX0lOT0RFX0RFUFM9ICQoc3JjZGlyKS8uLi9taXNjL2NyZWF0ZV9pbm9kZS5oIFwKKysJJChzcmNkaXIpLy4uL21pc2MvY3JlYXRlX2lub2RlLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisrCSQoc3JjZGlyKS8uLi9saWIvZXh0MmZzL2V4dDJmcy5oICQoc3JjZGlyKS8uLi9saWIvZXQvY29tX2Vyci5oIFwKKysJJChzcmNkaXIpLy4uL2xpYi9lMnAvZTJwLmggJChzcmNkaXIpLy4uL21pc2MvbmxzLWVuYWJsZS5oCisgCisgTElCUz0gJChMSUJFWFQyRlMpICQoTElCRTJQKSAkKExJQlNTKSAkKExJQkNPTV9FUlIpICQoTElCQkxLSUQpIFwKKyAJJChMSUJVVUlEKQorQEAgLTgxLDYgKzg3LDExIEBAIGUyZnJlZWZyYWcubzogJChzcmNkaXIpLy4uL21pc2MvZTJmcmVlZnJhZy5jCisgCSQoRSkgIglDQyAkQCIKKyAJJChRKSAkKENDKSAtYyAkKEFMTF9DRkxBR1MpIC1JJChzcmNkaXIpICQ8IC1EREVCVUdGUyAtbyAkQAorIAorK2NyZWF0ZV9pbm9kZS5vOiAkKENSRUFURV9JTk9ERV9ERVBTKQorKwkkKEUpICIJQ0MgJEAiCisrCSQoUSkgJChDQykgLWMgJChBTExfQ0ZMQUdTKSAtSSQoc3JjZGlyKSBcCisrCQkgJChzcmNkaXIpLy4uL21pc2MvY3JlYXRlX2lub2RlLmMgLURERUJVR0ZTIC1vICRACisrCisgZGVidWdmcy44OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvZGVidWdmcy44LmluCisgCSQoRSkgIglTVUJTVCAkQCIKKyAJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvZGVidWdmcy44LmluIGRlYnVnZnMuOAorQEAgLTE0Miw3ICsxNTMsNyBAQCBkZWJ1Z2ZzLm86ICQoc3JjZGlyKS9kZWJ1Z2ZzLmMgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmggJCh0b3Bfc3JjZGlyKS92ZXJzaW9uLmggJChzcmNkaXIpL2pmc191c2VyLmggXAorICAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMva2VybmVsLWpiZC5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9qZnNfY29tcGF0LmggXAorLSAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMva2VybmVsLWxpc3QuaAorKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMva2VybmVsLWxpc3QuaCAkKHRvcF9zcmNkaXIpL21pc2MvdXRpbC5oCisgdXRpbC5vOiAkKHNyY2RpcikvdXRpbC5jICQoc3JjZGlyKS9kZWJ1Z2ZzLmggXAorICAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorZGlmZiAtLWdpdCBhL2RlYnVnZnMvZGVidWdmcy5jIGIvZGVidWdmcy9kZWJ1Z2ZzLmMKK2luZGV4IDljMjE1ZjcuLjYyZTlmNDQgMTAwNjQ0CistLS0gYS9kZWJ1Z2ZzL2RlYnVnZnMuYworKysrIGIvZGVidWdmcy9kZWJ1Z2ZzLmMKK0BAIC0yNSw4ICsyNSw2IEBAIGV4dGVybiBjaGFyICpvcHRhcmc7CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2VuZGlmCisgI2luY2x1ZGUgPGZjbnRsLmg+CistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgorIAorICNpbmNsdWRlICJkZWJ1Z2ZzLmgiCisgI2luY2x1ZGUgInV1aWQvdXVpZC5oIgorQEAgLTQxLDIyICszOSwxMSBAQCBleHRlcm4gY2hhciAqb3B0YXJnOworICNkZWZpbmUgQlVGU0laIDgxOTIKKyAjZW5kaWYKKyAKKy0vKiA2NEtpQiBpcyB0aGUgbWluaW1pdW0gYmxrc2l6ZSB0byBiZXN0IG1pbmltaXplIHN5c3RlbSBjYWxsIG92ZXJoZWFkLiAqLworLSNpZm5kZWYgSU9fQlVGU0laRQorLSNkZWZpbmUgSU9fQlVGU0laRSA2NCoxMDI0CistI2VuZGlmCistCistLyogQmxvY2sgc2l6ZSBmb3IgYHN0X2Jsb2NrcycgKi8KKy0jaWZuZGVmIFNfQkxLU0laRQorLSNkZWZpbmUgU19CTEtTSVpFIDUxMgorLSNlbmRpZgorLQorIHNzX3JlcXVlc3RfdGFibGUgKmV4dHJhX2NtZHM7CisgY29uc3QgY2hhciAqZGVidWdfcHJvZ19uYW1lOworIGludCBzY2lfaWR4OworIAorLWV4dDJfZmlsc3lzCWN1cnJlbnRfZnMgPSBOVUxMOworLWV4dDJfaW5vX3QJcm9vdCwgY3dkOworK2V4dDJfaW5vX3QJY3dkOworIAorIHN0YXRpYyB2b2lkIG9wZW5fZmlsZXN5c3RlbShjaGFyICpkZXZpY2UsIGludCBvcGVuX2ZsYWdzLCBibGs2NF90IHN1cGVyYmxvY2ssCisgCQkJICAgIGJsazY0X3QgYmxvY2tzaXplLCBpbnQgY2F0YXN0cm9waGljLAorQEAgLTE1NzYsMTg5ICsxNTYzLDI0IEBAIHZvaWQgZG9fZmluZF9mcmVlX2lub2RlKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgfQorIAorICNpZm5kZWYgUkVBRF9PTkxZCistc3RhdGljIGVycmNvZGVfdCBjb3B5X2ZpbGUoaW50IGZkLCBleHQyX2lub190IG5ld2ZpbGUsIGludCBidWZzaXplLCBpbnQgbWFrZV9ob2xlcykKKy17CistCWV4dDJfZmlsZV90CWUyX2ZpbGU7CistCWVycmNvZGVfdAlyZXR2YWw7CistCWludAkJZ290OworLQl1bnNpZ25lZCBpbnQJd3JpdHRlbjsKKy0JY2hhcgkJKmJ1ZjsKKy0JY2hhcgkJKnB0cjsKKy0JY2hhcgkJKnplcm9fYnVmOworLQlpbnQJCWNtcDsKKy0KKy0JcmV0dmFsID0gZXh0MmZzX2ZpbGVfb3BlbihjdXJyZW50X2ZzLCBuZXdmaWxlLAorLQkJCQkgIEVYVDJfRklMRV9XUklURSwgJmUyX2ZpbGUpOworLQlpZiAocmV0dmFsKQorLQkJcmV0dXJuIHJldHZhbDsKKy0KKy0JcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oYnVmc2l6ZSwgJmJ1Zik7CistCWlmIChyZXR2YWwpIHsKKy0JCWNvbV9lcnIoImNvcHlfZmlsZSIsIHJldHZhbCwgImNhbid0IGFsbG9jYXRlIGJ1ZmZlclxuIik7CistCQlyZXR1cm4gcmV0dmFsOworLQl9CistCistCS8qIFRoaXMgaXMgdXNlZCBmb3IgY2hlY2tpbmcgd2hldGhlciB0aGUgd2hvbGUgYmxvY2sgaXMgemVybyAqLworLQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbXplcm8oYnVmc2l6ZSwgJnplcm9fYnVmKTsKKy0JaWYgKHJldHZhbCkgeworLQkJY29tX2VycigiY29weV9maWxlIiwgcmV0dmFsLCAiY2FuJ3QgYWxsb2NhdGUgYnVmZmVyXG4iKTsKKy0JCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKy0JCXJldHVybiByZXR2YWw7CistCX0KKy0KKy0Jd2hpbGUgKDEpIHsKKy0JCWdvdCA9IHJlYWQoZmQsIGJ1ZiwgYnVmc2l6ZSk7CistCQlpZiAoZ290ID09IDApCistCQkJYnJlYWs7CistCQlpZiAoZ290IDwgMCkgeworLQkJCXJldHZhbCA9IGVycm5vOworLQkJCWdvdG8gZmFpbDsKKy0JCX0KKy0JCXB0ciA9IGJ1ZjsKKy0KKy0JCS8qIFNwYXJzZSBjb3B5ICovCistCQlpZiAobWFrZV9ob2xlcykgeworLQkJCS8qIENoZWNrIHdoZXRoZXIgYWxsIGlzIHplcm8gKi8KKy0JCQljbXAgPSBtZW1jbXAocHRyLCB6ZXJvX2J1ZiwgZ290KTsKKy0JCQlpZiAoY21wID09IDApIHsKKy0JCQkJIC8qIFRoZSB3aG9sZSBibG9jayBpcyB6ZXJvLCBtYWtlIGEgaG9sZSAqLworLQkJCQlyZXR2YWwgPSBleHQyZnNfZmlsZV9sc2VlayhlMl9maWxlLCBnb3QsIEVYVDJfU0VFS19DVVIsIE5VTEwpOworLQkJCQlpZiAocmV0dmFsKQorLQkJCQkJZ290byBmYWlsOworLQkJCQlnb3QgPSAwOworLQkJCX0KKy0JCX0KKy0KKy0JCS8qIE5vcm1hbCBjb3B5ICovCistCQl3aGlsZSAoZ290ID4gMCkgeworLQkJCXJldHZhbCA9IGV4dDJmc19maWxlX3dyaXRlKGUyX2ZpbGUsIHB0ciwKKy0JCQkJCQkgICBnb3QsICZ3cml0dGVuKTsKKy0JCQlpZiAocmV0dmFsKQorLQkJCQlnb3RvIGZhaWw7CistCistCQkJZ290IC09IHdyaXR0ZW47CistCQkJcHRyICs9IHdyaXR0ZW47CistCQl9CistCX0KKy0JZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworLQlleHQyZnNfZnJlZV9tZW0oJnplcm9fYnVmKTsKKy0JcmV0dmFsID0gZXh0MmZzX2ZpbGVfY2xvc2UoZTJfZmlsZSk7CistCXJldHVybiByZXR2YWw7CistCistZmFpbDoKKy0JZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworLQlleHQyZnNfZnJlZV9tZW0oJnplcm9fYnVmKTsKKy0JKHZvaWQpIGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworLQlyZXR1cm4gcmV0dmFsOworLX0KKy0KKy0KKyB2b2lkIGRvX3dyaXRlKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworLQlpbnQJCWZkOworLQlzdHJ1Y3Qgc3RhdAlzdGF0YnVmOworLQlleHQyX2lub190CW5ld2ZpbGU7CisgCWVycmNvZGVfdAlyZXR2YWw7CistCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworLQlpbnQJCWJ1ZnNpemUgPSBJT19CVUZTSVpFOworLQlpbnQJCW1ha2VfaG9sZXMgPSAwOworIAorIAlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAzLCAzLCAid3JpdGUiLAorIAkJCQkiPG5hdGl2ZSBmaWxlPiA8bmV3IGZpbGU+IiwgQ0hFQ0tfRlNfUlcpKQorIAkJcmV0dXJuOworIAorLQlmZCA9IG9wZW4oYXJndlsxXSwgT19SRE9OTFkpOworLQlpZiAoZmQgPCAwKSB7CistCQljb21fZXJyKGFyZ3ZbMV0sIGVycm5vLCAwKTsKKy0JCXJldHVybjsKKy0JfQorLQlpZiAoZnN0YXQoZmQsICZzdGF0YnVmKSA8IDApIHsKKy0JCWNvbV9lcnIoYXJndlsxXSwgZXJybm8sIDApOworLQkJY2xvc2UoZmQpOworLQkJcmV0dXJuOworLQl9CistCistCXJldHZhbCA9IGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBjd2QsIGFyZ3ZbMl0sICZuZXdmaWxlKTsKKy0JaWYgKHJldHZhbCA9PSAwKSB7CistCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJUaGUgZmlsZSAnJXMnIGFscmVhZHkgZXhpc3RzXG4iLCBhcmd2WzJdKTsKKy0JCWNsb3NlKGZkKTsKKy0JCXJldHVybjsKKy0JfQorLQorLQlyZXR2YWwgPSBleHQyZnNfbmV3X2lub2RlKGN1cnJlbnRfZnMsIGN3ZCwgMDEwNzU1LCAwLCAmbmV3ZmlsZSk7CistCWlmIChyZXR2YWwpIHsKKysJaWYgKChyZXR2YWwgPSBkb193cml0ZV9pbnRlcm5hbChjd2QsIGFyZ3ZbMV0sIGFyZ3ZbMl0pKSkKKyAJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAwKTsKKy0JCWNsb3NlKGZkKTsKKy0JCXJldHVybjsKKy0JfQorLQlwcmludGYoIkFsbG9jYXRlZCBpbm9kZTogJXVcbiIsIG5ld2ZpbGUpOworLQlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIGFyZ3ZbMl0sIG5ld2ZpbGUsCistCQkJICAgICBFWFQyX0ZUX1JFR19GSUxFKTsKKy0JaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworLQkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgY3dkKTsKKy0JCWlmIChyZXR2YWwpIHsKKy0JCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKy0JCQljbG9zZShmZCk7CistCQkJcmV0dXJuOworLQkJfQorLQkJcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgY3dkLCBhcmd2WzJdLCBuZXdmaWxlLAorLQkJCQkgICAgIEVYVDJfRlRfUkVHX0ZJTEUpOworLQl9CistCWlmIChyZXR2YWwpIHsKKy0JCWNvbV9lcnIoYXJndlsyXSwgcmV0dmFsLCAwKTsKKy0JCWNsb3NlKGZkKTsKKy0JCXJldHVybjsKKy0JfQorLSAgICAgICAgaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3VycmVudF9mcy0+aW5vZGVfbWFwLG5ld2ZpbGUpKQorLQkJY29tX2Vycihhcmd2WzBdLCAwLCAiV2FybmluZzogaW5vZGUgYWxyZWFkeSBzZXQiKTsKKy0JZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihjdXJyZW50X2ZzLCBuZXdmaWxlLCArMSwgMCk7CistCW1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihpbm9kZSkpOworLQlpbm9kZS5pX21vZGUgPSAoc3RhdGJ1Zi5zdF9tb2RlICYgfkxJTlVYX1NfSUZNVCkgfCBMSU5VWF9TX0lGUkVHOworLQlpbm9kZS5pX2F0aW1lID0gaW5vZGUuaV9jdGltZSA9IGlub2RlLmlfbXRpbWUgPQorLQkJY3VycmVudF9mcy0+bm93ID8gY3VycmVudF9mcy0+bm93IDogdGltZSgwKTsKKy0JaW5vZGUuaV9saW5rc19jb3VudCA9IDE7CistCWlub2RlLmlfc2l6ZSA9IHN0YXRidWYuc3Rfc2l6ZTsKKy0JaWYgKGN1cnJlbnRfZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorLQkgICAgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFMpIHsKKy0JCWludCBpOworLQkJc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlciAqZWg7CistCistCQllaCA9IChzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICopICZpbm9kZS5pX2Jsb2NrWzBdOworLQkJZWgtPmVoX2RlcHRoID0gMDsKKy0JCWVoLT5laF9lbnRyaWVzID0gMDsKKy0JCWVoLT5laF9tYWdpYyA9IGV4dDJmc19jcHVfdG9fbGUxNihFWFQzX0VYVF9NQUdJQyk7CistCQlpID0gKHNpemVvZihpbm9kZS5pX2Jsb2NrKSAtIHNpemVvZigqZWgpKSAvCistCQkJc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudCk7CistCQllaC0+ZWhfbWF4ID0gZXh0MmZzX2NwdV90b19sZTE2KGkpOworLQkJaW5vZGUuaV9mbGFncyB8PSBFWFQ0X0VYVEVOVFNfRkw7CistCX0KKy0JaWYgKGRlYnVnZnNfd3JpdGVfbmV3X2lub2RlKG5ld2ZpbGUsICZpbm9kZSwgYXJndlswXSkpIHsKKy0JCWNsb3NlKGZkKTsKKy0JCXJldHVybjsKKy0JfQorLQlpZiAoTElOVVhfU19JU1JFRyhpbm9kZS5pX21vZGUpKSB7CistCQlpZiAoc3RhdGJ1Zi5zdF9ibG9ja3MgPCBzdGF0YnVmLnN0X3NpemUgLyBTX0JMS1NJWkUpIHsKKy0JCQltYWtlX2hvbGVzID0gMTsKKy0JCQkvKgorLQkJCSAqIFVzZSBJL08gYmxvY2tzaXplIGFzIGJ1ZmZlciBzaXplIHdoZW4KKy0JCQkgKiBjb3B5aW5nIHNwYXJzZSBmaWxlcy4KKy0JCQkgKi8KKy0JCQlidWZzaXplID0gc3RhdGJ1Zi5zdF9ibGtzaXplOworLQkJfQorLQkJcmV0dmFsID0gY29weV9maWxlKGZkLCBuZXdmaWxlLCBidWZzaXplLCBtYWtlX2hvbGVzKTsKKy0JCWlmIChyZXR2YWwpCistCQkJY29tX2VycigiY29weV9maWxlIiwgcmV0dmFsLCAwKTsKKy0JfQorLQljbG9zZShmZCk7CisgfQorIAorIHZvaWQgZG9fbWtub2QoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CisgCXVuc2lnbmVkIGxvbmcJbW9kZSwgbWFqb3IsIG1pbm9yOworLQlleHQyX2lub190CW5ld2ZpbGU7CisgCWVycmNvZGVfdCAJcmV0dmFsOworLQlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKyAJaW50CQlmaWxldHlwZSwgbnI7CisrCXN0cnVjdCBzdGF0CXN0OworIAorIAlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKyAJCXJldHVybjsKK0BAIC0xNzY3LDExNSArMTU4OSw1MCBAQCB2b2lkIGRvX21rbm9kKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogbWtub2QgPG5hbWU+IFtwfCBbY3xiXSA8bWFqb3I+IDxtaW5vcj5dIik7CisgCQlyZXR1cm47CisgCX0KKysKKyAJbW9kZSA9IG1pbm9yID0gbWFqb3IgPSAwOworIAlzd2l0Y2ggKGFyZ3ZbMl1bMF0pIHsKKyAJCWNhc2UgJ3AnOgorLQkJCW1vZGUgPSBMSU5VWF9TX0lGSUZPOworLQkJCWZpbGV0eXBlID0gRVhUMl9GVF9GSUZPOworKwkJCXN0LnN0X21vZGUgPSBTX0lGSUZPOworIAkJCW5yID0gMzsKKyAJCQlicmVhazsKKyAJCWNhc2UgJ2MnOgorLQkJCW1vZGUgPSBMSU5VWF9TX0lGQ0hSOworLQkJCWZpbGV0eXBlID0gRVhUMl9GVF9DSFJERVY7CisrCQkJc3Quc3RfbW9kZSA9IFNfSUZDSFI7CisgCQkJbnIgPSA1OworIAkJCWJyZWFrOworIAkJY2FzZSAnYic6CistCQkJbW9kZSA9IExJTlVYX1NfSUZCTEs7CistCQkJZmlsZXR5cGUgPSBFWFQyX0ZUX0JMS0RFVjsKKysJCQlzdC5zdF9tb2RlID0gU19JRkJMSzsKKyAJCQluciA9IDU7CisgCQkJYnJlYWs7CisgCQlkZWZhdWx0OgorLQkJCWZpbGV0eXBlID0gMDsKKyAJCQluciA9IDA7CisgCX0KKysKKyAJaWYgKG5yID09IDUpIHsKKyAJCW1ham9yID0gc3RydG91bChhcmd2WzNdLCBhcmd2KzMsIDApOworIAkJbWlub3IgPSBzdHJ0b3VsKGFyZ3ZbNF0sIGFyZ3YrNCwgMCk7CisgCQlpZiAobWFqb3IgPiA2NTUzNSB8fCBtaW5vciA+IDY1NTM1IHx8IGFyZ3ZbM11bMF0gfHwgYXJndls0XVswXSkKKyAJCQluciA9IDA7CisgCX0KKysKKyAJaWYgKGFyZ2MgIT0gbnIpCisgCQlnb3RvIHVzYWdlOworLQlpZiAoY2hlY2tfZnNfcmVhZF93cml0ZShhcmd2WzBdKSkKKy0JCXJldHVybjsKKy0JcmV0dmFsID0gZXh0MmZzX25ld19pbm9kZShjdXJyZW50X2ZzLCBjd2QsIDAxMDc1NSwgMCwgJm5ld2ZpbGUpOworLQlpZiAocmV0dmFsKSB7CisrCisrCXN0LnN0X3JkZXYgPSBtYWtlZGV2KG1ham9yLCBtaW5vcik7CisrCWlmICgocmV0dmFsID0gZG9fbWtub2RfaW50ZXJuYWwoY3dkLCBhcmd2WzFdLCAmc3QpKSkKKyAJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAwKTsKKy0JCXJldHVybjsKKy0JfQorLQlwcmludGYoIkFsbG9jYXRlZCBpbm9kZTogJXVcbiIsIG5ld2ZpbGUpOworLQlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIGFyZ3ZbMV0sIG5ld2ZpbGUsIGZpbGV0eXBlKTsKKy0JaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworLQkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgY3dkKTsKKy0JCWlmIChyZXR2YWwpIHsKKy0JCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKy0JCQlyZXR1cm47CistCQl9CistCQlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIGFyZ3ZbMV0sIG5ld2ZpbGUsCistCQkJCSAgICAgZmlsZXR5cGUpOworLQl9CistCWlmIChyZXR2YWwpIHsKKy0JCWNvbV9lcnIoYXJndlsxXSwgcmV0dmFsLCAwKTsKKy0JCXJldHVybjsKKy0JfQorLSAgICAgICAgaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3VycmVudF9mcy0+aW5vZGVfbWFwLG5ld2ZpbGUpKQorLQkJY29tX2Vycihhcmd2WzBdLCAwLCAiV2FybmluZzogaW5vZGUgYWxyZWFkeSBzZXQiKTsKKy0JZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihjdXJyZW50X2ZzLCBuZXdmaWxlLCArMSwgMCk7CistCW1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihpbm9kZSkpOworLQlpbm9kZS5pX21vZGUgPSBtb2RlOworLQlpbm9kZS5pX2F0aW1lID0gaW5vZGUuaV9jdGltZSA9IGlub2RlLmlfbXRpbWUgPQorLQkJY3VycmVudF9mcy0+bm93ID8gY3VycmVudF9mcy0+bm93IDogdGltZSgwKTsKKy0JaWYgKChtYWpvciA8IDI1NikgJiYgKG1pbm9yIDwgMjU2KSkgeworLQkJaW5vZGUuaV9ibG9ja1swXSA9IG1ham9yKjI1NittaW5vcjsKKy0JCWlub2RlLmlfYmxvY2tbMV0gPSAwOworLQl9IGVsc2UgeworLQkJaW5vZGUuaV9ibG9ja1swXSA9IDA7CistCQlpbm9kZS5pX2Jsb2NrWzFdID0gKG1pbm9yICYgMHhmZikgfCAobWFqb3IgPDwgOCkgfCAoKG1pbm9yICYgfjB4ZmYpIDw8IDEyKTsKKy0JfQorLQlpbm9kZS5pX2xpbmtzX2NvdW50ID0gMTsKKy0JaWYgKGRlYnVnZnNfd3JpdGVfbmV3X2lub2RlKG5ld2ZpbGUsICZpbm9kZSwgYXJndlswXSkpCistCQlyZXR1cm47CisgfQorIAorIHZvaWQgZG9fbWtkaXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CistCWNoYXIJKmNwOworLQlleHQyX2lub190CXBhcmVudDsKKy0JY2hhcgkqbmFtZTsKKyAJZXJyY29kZV90IHJldHZhbDsKKyAKKyAJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMiwgMiwgIm1rZGlyIiwKKyAJCQkJIjxmaWxlbmFtZT4iLCBDSEVDS19GU19SVykpCisgCQlyZXR1cm47CisgCistCWNwID0gc3RycmNocihhcmd2WzFdLCAnLycpOworLQlpZiAoY3ApIHsKKy0JCSpjcCA9IDA7CistCQlwYXJlbnQgPSBzdHJpbmdfdG9faW5vZGUoYXJndlsxXSk7CistCQlpZiAoIXBhcmVudCkgeworLQkJCWNvbV9lcnIoYXJndlsxXSwgRU5PRU5ULCAwKTsKKy0JCQlyZXR1cm47CistCQl9CistCQluYW1lID0gY3ArMTsKKy0JfSBlbHNlIHsKKy0JCXBhcmVudCA9IGN3ZDsKKy0JCW5hbWUgPSBhcmd2WzFdOworLQl9CistCistdHJ5X2FnYWluOgorLQlyZXR2YWwgPSBleHQyZnNfbWtkaXIoY3VycmVudF9mcywgcGFyZW50LCAwLCBuYW1lKTsKKy0JaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworLQkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgcGFyZW50KTsKKy0JCWlmIChyZXR2YWwpIHsKKy0JCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKy0JCQlyZXR1cm47CistCQl9CistCQlnb3RvIHRyeV9hZ2FpbjsKKy0JfQorLQlpZiAocmV0dmFsKSB7CistCQljb21fZXJyKCJleHQyZnNfbWtkaXIiLCByZXR2YWwsIDApOworLQkJcmV0dXJuOworLQl9CisrCWlmICgocmV0dmFsID0gZG9fbWtkaXJfaW50ZXJuYWwoY3dkLCBhcmd2WzFdLCBOVUxMKSkpCisrCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgMCk7CisgCisgfQorIAorQEAgLTIyNzAsNDQgKzIwMjcsMTQgQEAgdm9pZCBkb19wdW5jaChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAorIHZvaWQgZG9fc3ltbGluayhpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKy0JY2hhcgkJKmNwOworLQlleHQyX2lub190CXBhcmVudDsKKy0JY2hhcgkJKm5hbWUsICp0YXJnZXQ7CisgCWVycmNvZGVfdAlyZXR2YWw7CisgCisgCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDMsIDMsICJzeW1saW5rIiwKKyAJCQkJIjxmaWxlbmFtZT4gPHRhcmdldD4iLCBDSEVDS19GU19SVykpCisgCQlyZXR1cm47CisgCistCWNwID0gc3RycmNocihhcmd2WzFdLCAnLycpOworLQlpZiAoY3ApIHsKKy0JCSpjcCA9IDA7CistCQlwYXJlbnQgPSBzdHJpbmdfdG9faW5vZGUoYXJndlsxXSk7CistCQlpZiAoIXBhcmVudCkgeworLQkJCWNvbV9lcnIoYXJndlsxXSwgRU5PRU5ULCAwKTsKKy0JCQlyZXR1cm47CistCQl9CistCQluYW1lID0gY3ArMTsKKy0JfSBlbHNlIHsKKy0JCXBhcmVudCA9IGN3ZDsKKy0JCW5hbWUgPSBhcmd2WzFdOworLQl9CistCXRhcmdldCA9IGFyZ3ZbMl07CistCistdHJ5X2FnYWluOgorLQlyZXR2YWwgPSBleHQyZnNfc3ltbGluayhjdXJyZW50X2ZzLCBwYXJlbnQsIDAsIG5hbWUsIHRhcmdldCk7CistCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9ESVJfTk9fU1BBQ0UpIHsKKy0JCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIHBhcmVudCk7CistCQlpZiAocmV0dmFsKSB7CistCQkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBleHBhbmRpbmcgZGlyZWN0b3J5Iik7CistCQkJcmV0dXJuOworLQkJfQorLQkJZ290byB0cnlfYWdhaW47CistCX0KKy0JaWYgKHJldHZhbCkgeworLQkJY29tX2VycigiZXh0MmZzX3N5bWxpbmsiLCByZXR2YWwsIDApOworLQkJcmV0dXJuOworLQl9CisrCWlmICgocmV0dmFsID0gZG9fc3ltbGlua19pbnRlcm5hbChjd2QsIGFyZ3ZbMV0sIGFyZ3ZbMl0pKSkKKysJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAwKTsKKyAKKyB9CisgCitkaWZmIC0tZ2l0IGEvZGVidWdmcy9kZWJ1Z2ZzLmggYi9kZWJ1Z2ZzL2RlYnVnZnMuaAoraW5kZXggNmI0ZjZlZi4uMmQ0NjRjMSAxMDA2NDQKKy0tLSBhL2RlYnVnZnMvZGVidWdmcy5oCisrKysgYi9kZWJ1Z2ZzL2RlYnVnZnMuaAorQEAgLTUsNiArNSw3IEBACisgI2luY2x1ZGUgInNzL3NzLmgiCisgI2luY2x1ZGUgImV4dDJmcy9leHQyX2ZzLmgiCisgI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKysjaW5jbHVkZSAiLi4vbWlzYy9jcmVhdGVfaW5vZGUuaCIKKyAKKyAjaWZkZWYgX19TVERDX18KKyAjZGVmaW5lIE5PQVJHUyB2b2lkCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAxMS1ta2UyZnMuOC5pbi11cGRhdGUtdGhlLW1hbnVhbC1mb3ItdGhlLWQtb3B0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDExLW1rZTJmcy44LmluLXVwZGF0ZS10aGUtbWFudWFsLWZvci10aGUtZC1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRkMmNiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAxMS1ta2UyZnMuOC5pbi11cGRhdGUtdGhlLW1hbnVhbC1mb3ItdGhlLWQtb3B0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gODlmY2E0MzlmMWI1ODU5NWYyZjQyNDU5OGEyNzg2OWY4YzdiZDgxNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMyBEZWMgMjAxMyAwNDo0MzoxOCAtMDUwMAorU3ViamVjdDogW1BBVENIIDExLzExXSBta2UyZnMuOC5pbjogdXBkYXRlIHRoZSBtYW51YWwgZm9yIHRoZSAtZCBvcHRpb24KKworVXBkYXRlIHRoZSBtYW51YWwgZm9yIHRoZSAtZCBvcHRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvbWtlMmZzLjguaW4gfCAgICA3ICsrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9taXNjL21rZTJmcy44LmluIGIvbWlzYy9ta2UyZnMuOC5pbgoraW5kZXggZmVhNTBkYS4uYjFjYTQ4NiAxMDA2NDQKKy0tLSBhL21pc2MvbWtlMmZzLjguaW4KKysrKyBiL21pc2MvbWtlMmZzLjguaW4KK0BAIC01Miw2ICs1MiwxMCBAQCBta2UyZnMgXC0gY3JlYXRlIGFuIGV4dDIvZXh0My9leHQ0IGZpbGVzeXN0ZW0KKyAuSSBudW1iZXItb2YtaW5vZGVzCisgXQorIFsKKysuQiBcLWQKKysuSSByb290LWRpcmVjdG9yeQorK10KKytbCisgLkIgXC1uCisgXQorIFsKK0BAIC01MDIsNiArNTA2LDkgQEAgdGhlCisgcmF0aW8pLiAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGUgbnVtYmVyCisgb2YgZGVzaXJlZCBpbm9kZXMgZGlyZWN0bHkuCisgLlRQCisrLkJJIFwtZCAiIHJvb3QtZGlyZWN0b3J5IgorK0FkZCB0aGUgZmlsZXMgZnJvbSB0aGUgcm9vdC1kaXJlY3RvcnkgdG8gdGhlIGZpbGVzeXN0ZW0uCisrLlRQCisgLkJJIFwtbyAiIGNyZWF0b3Itb3MiCisgT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAiY3JlYXRvciBvcGVyYXRpbmcgc3lzdGVtIiBmaWVsZCBvZiB0aGUKKyBmaWxlc3lzdGVtLiAgVGhlIGNyZWF0b3IgZmllbGQgaXMgc2V0IGJ5IGRlZmF1bHQgdG8gdGhlIG5hbWUgb2YgdGhlIE9TIHRoZQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMTItRml4LW11c2wtYnVpbGQtZmFpbHVyZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMTItRml4LW11c2wtYnVpbGQtZmFpbHVyZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4MDA4ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAxMi1GaXgtbXVzbC1idWlsZC1mYWlsdXJlcy5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGM2ZmY3ZmViOTAzOGQ2ZThhYWZmZTJlNjliMjA1YWQ1ZmEzM2RmMmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEJhcmtlciA8cGF1bEBwYXVsYmFya2VyLm1lLnVrPgorRGF0ZTogTW9uLCAxOCBBdWcgMjAxNCAyMTowMjo1NiArMDIwMAorU3ViamVjdDogW1BBVENIXSBGaXggbXVzbCBidWlsZCBmYWlsdXJlcworCitJbiBsaWIvZXh0MmZzL3VuaXhfaW8uYywgX191NjQgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBfX3VpbnQ2NF90LiBUaGlzIHR5cGUKK2lzIGd1YXJhbnRlZWQgYnkgdGhlIGUyZnNwcm9ncyBidWlsZCBzeXN0ZW0uCisoNzk1YzAyZGVmMzY4MWE5OWNjNzkyYTVlYmMxNjJkMDZmOGExZWViNykKKworSW4gbWlzYy9jcmVhdGVfaW5vZGUuYywgPGxpbWl0cy5oPiBpcyBuZWVkZWQgZm9yIHRoZSBkZWZpbml0aW9uIG9mIFBBVEhfTUFYLgorKGJiY2NjNmYzYzZhMTA2NzIxZmI2ZjFlZjRkZjZiYzMyYzc5ODYyMzUpCisKK0JvdGggb2YgdGhlc2UgZml4ZXMgaGF2ZSBiZWVuIG1hZGUgdXBzdHJlYW0gd2l0aCB0aGUgZ2l0IGNvbW1pdCBJRHMgZ2l2ZW4gYnV0Cit0aG9zZSBhcmUgbGFyZ2VyIGNvbW1pdHMgY29udGFpbmluZyBvdGhlciBjaGFuZ2VzIG5vdCBuZWVkZWQgaGVyZS4KKworU2lnbmVkLW9mZi1ieTogUGF1bCBCYXJrZXIgPHBhdWxAcGF1bGJhcmtlci5tZS51az4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorLS0tCisgbGliL2V4dDJmcy91bml4X2lvLmMgfCA2ICsrKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgIHwgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZXh0MmZzL3VuaXhfaW8uYyBiL2xpYi9leHQyZnMvdW5peF9pby5jCitpbmRleCAxOWJlNjMwLi4wY2MwZjUyIDEwMDY0NAorLS0tIGEvbGliL2V4dDJmcy91bml4X2lvLmMKKysrKyBiL2xpYi9leHQyZnMvdW5peF9pby5jCitAQCAtOTMxLDEwICs5MzEsMTAgQEAgc3RhdGljIGVycmNvZGVfdCB1bml4X2Rpc2NhcmQoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssCisgCisgCWlmIChjaGFubmVsLT5mbGFncyAmIENIQU5ORUxfRkxBR1NfQkxPQ0tfREVWSUNFKSB7CisgI2lmZGVmIEJMS0RJU0NBUkQKKy0JCV9fdWludDY0X3QgcmFuZ2VbMl07CisrCQlfX3U2NCByYW5nZVsyXTsKKyAKKy0JCXJhbmdlWzBdID0gKF9fdWludDY0X3QpKGJsb2NrKSAqIGNoYW5uZWwtPmJsb2NrX3NpemU7CistCQlyYW5nZVsxXSA9IChfX3VpbnQ2NF90KShjb3VudCkgKiBjaGFubmVsLT5ibG9ja19zaXplOworKwkJcmFuZ2VbMF0gPSAoX191NjQpKGJsb2NrKSAqIGNoYW5uZWwtPmJsb2NrX3NpemU7CisrCQlyYW5nZVsxXSA9IChfX3U2NCkoY291bnQpICogY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKyAKKyAJCXJldCA9IGlvY3RsKGRhdGEtPmRldiwgQkxLRElTQ0FSRCwgJnJhbmdlKTsKKyAjZWxzZQorZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCA2ZDhkZTA0Li5mY2VjNWFhIDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTEsNCArMSw1IEBACisgI2luY2x1ZGUgImNyZWF0ZV9pbm9kZS5oIgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyAKKyAjaWYgX19TVERDX1ZFUlNJT05fXyA8IDE5OTkwMUwKKyAjIGlmIF9fR05VQ19fID49IDIKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9DVkUtMjAxNS0wMjQ3LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9DVkUtMjAxNS0wMjQ3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZTY3YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL0NWRS0yMDE1LTAyNDcucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorRnJvbSBmNjZlNmNlNDQ0NjczOGMyYzdmNDNkNDE5ODhhM2ViNzMzNDdlMmY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KK0RhdGU6IFNhdCwgOSBBdWcgMjAxNCAxMjoyNDo1NCAtMDQwMAorU3ViamVjdDogbGliZXh0MmZzOiBhdm9pZCBidWZmZXIgb3ZlcmZsb3cgaWYgc19maXJzdF9tZXRhX2JnIGlzIHRvbyBiaWcKKworSWYgc19maXJzdF9tZXRhX2JnIGlzIGdyZWF0ZXIgdGhhbiB0aGUgb2YgbnVtYmVyIGJsb2NrIGdyb3VwCitkZXNjcmlwdG9yIGJsb2NrcywgdGhlbiByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzCit3aWxsIGVuZCB1cCBvdmVycnVuaW5nIHRoZSBtZW1vcnkgYnVmZmVyIGFsbG9jYXRlZCBmb3IgdGhlCitkZXNjcmlwdG9ycy4gIEZpeCB0aGlzIGJ5IGxpbWl0aW5nIGZpcnN0X21ldGFfYmcgdG8gbm8gbW9yZSB0aGFuCitmcy0+ZGVzY19ibG9ja3MuICBUaGlzIGRvZXNuJ3QgY29ycmVjdCB0aGUgYmFkIHNfZmlyc3RfbWV0YV9iZyB2YWx1ZSwKK2J1dCBpdCBhdm9pZHMgY2F1c2luZyB0aGUgZTJmc3Byb2dzIHVzZXJzcGFjZSBwcm9ncmFtcyBmcm9tCitwb3RlbnRpYWxseSBjcmFzaGluZy4KKworRml4ZXMgQ1ZFLTIwMTUtMDI0NworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorU2lnbmVkLW9mZi1ieTogU29uYSBTYXJtYWRpIDxzb25hLnNhcm1hZGlAZW5lYS5jb20+CisKK2RpZmYgLS1naXQgYS9saWIvZXh0MmZzL2Nsb3NlZnMuYyBiL2xpYi9leHQyZnMvY2xvc2Vmcy5jCitpbmRleCA0NTk5ZWVmLi4xZjk5MTEzIDEwMDY0NAorLS0tIGEvbGliL2V4dDJmcy9jbG9zZWZzLmMKKysrKyBiL2xpYi9leHQyZnMvY2xvc2Vmcy5jCitAQCAtMzQ0LDkgKzM0NCwxMSBAQCBlcnJjb2RlX3QgZXh0MmZzX2ZsdXNoMihleHQyX2ZpbHN5cyBmcywgaW50IGZsYWdzKQorIAkgKiBzdXBlcmJsb2NrcyBhbmQgZ3JvdXAgZGVzY3JpcHRvcnMuCisgCSAqLworIAlncm91cF9wdHIgPSAoY2hhciAqKSBncm91cF9zaGFkb3c7CistCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKQorKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykgeworIAkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPnN1cGVyLT5zX2ZpcnN0X21ldGFfYmc7CistCWVsc2UKKysJCWlmIChvbGRfZGVzY19ibG9ja3MgPiBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZykKKysJCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+ZGVzY19ibG9ja3M7CisrCX0gZWxzZQorIAkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPmRlc2NfYmxvY2tzOworIAorIAlleHQyZnNfbnVtZXJpY19wcm9ncmVzc19pbml0KGZzLCAmcHJvZ3Jlc3MsIE5VTEwsCitkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9vcGVuZnMuYyBiL2xpYi9leHQyZnMvb3BlbmZzLmMKK2luZGV4IGExYTM1MTcuLmJhNTAxZTYgMTAwNjQ0CistLS0gYS9saWIvZXh0MmZzL29wZW5mcy5jCisrKysgYi9saWIvZXh0MmZzL29wZW5mcy5jCitAQCAtMzc4LDkgKzM3OCwxMSBAQCBlcnJjb2RlX3QgZXh0MmZzX29wZW4yKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmlvX29wdGlvbnMsCisgI2lmZGVmIFdPUkRTX0JJR0VORElBTgorIAlncm91cHNfcGVyX2Jsb2NrID0gRVhUMl9ERVNDX1BFUl9CTE9DSyhmcy0+c3VwZXIpOworICNlbmRpZgorLQlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykKKysJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpIHsKKyAJCWZpcnN0X21ldGFfYmcgPSBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZzsKKy0JZWxzZQorKwkJaWYgKGZpcnN0X21ldGFfYmcgPiBmcy0+ZGVzY19ibG9ja3MpCisrCQkJZmlyc3RfbWV0YV9iZyA9IGZzLT5kZXNjX2Jsb2NrczsKKysJfSBlbHNlCisgCQlmaXJzdF9tZXRhX2JnID0gZnMtPmRlc2NfYmxvY2tzOworIAlpZiAoZmlyc3RfbWV0YV9iZykgeworIAkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2Jsayhmcy0+aW8sIGdyb3VwX2Jsb2NrICsKKy0tIAorY2dpdCB2MC4xMC4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvYWNpbmNsdWRlLm00IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9hY2luY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBiZDdkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsMTM1IEBACisjIEV4dHJhY3RlZCBmcm9tIHRoZSBwYWNrYWdlJ3Mgc2hpcHBlZCBhY2xvY2FsLm00LiBDdXN0b20gbWFjcm9zIHNob3VsZCBiZSBpbgorIyBhY2luY2x1ZGUubTQgc28gcnVubmluZyBhY2xvY2FsIGRvZXNuJ3QgYmxvdyB0aGVtIGF3YXkuCisjCisjIFNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKKyMgZnJvbSBodHRwOi8vYXV0b2NvbmYtYXJjaGl2ZS5jcnlwLnRvL2F4X3Rscy5odG1sCisjCisjIFRoaXMgd2FzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjoKKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHJlc3BlY3RpdmUgQXV0b2NvbmYgTWFjcm8ncyBjb3B5cmlnaHQKKyMgb3duZXIgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IHRoZQorIyBjb25maWd1cmUgc2NyaXB0cyB0aGF0IGFyZSB0aGUgb3V0cHV0IG9mIEF1dG9jb25mIHdoZW4gcHJvY2Vzc2luZworIyB0aGUgTWFjcm8uIFlvdSBuZWVkIG5vdCBmb2xsb3cgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSB3aGVuIHVzaW5nIG9yIGRpc3RyaWJ1dGluZyBzdWNoIHNjcmlwdHMsIGV2ZW4gdGhvdWdoCisjIHBvcnRpb25zIG9mIHRoZSB0ZXh0IG9mIHRoZSBNYWNybyBhcHBlYXIgaW4gdGhlbS4gVGhlIEdOVSBHZW5lcmFsCisjIFB1YmxpYyBMaWNlbnNlIChHUEwpIGRvZXMgZ292ZXJuIGFsbCBvdGhlciB1c2Ugb2YgdGhlIG1hdGVyaWFsIHRoYXQKKyMgY29uc3RpdHV0ZXMgdGhlIEF1dG9jb25mIE1hY3JvLgorIworIyBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgYXBwbGllcyB0byB2ZXJzaW9ucyBvZiB0aGUKKyMgQXV0b2NvbmYgTWFjcm8gcmVsZWFzZWQgYnkgdGhlIEF1dG9jb25mIE1hY3JvIEFyY2hpdmUuIFdoZW4geW91IG1ha2UKKyMgYW5kIGRpc3RyaWJ1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBBdXRvY29uZiBNYWNybywgeW91IG1heQorIyBleHRlbmQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMIHRvIGFwcGx5IHRvIHlvdXIgbW9kaWZpZWQKKyMgdmVyc2lvbiBhcyB3ZWxsLgorIworQUNfREVGVU4oW0FYX1RMU10sIFsKKyAgQUNfTVNHX0NIRUNLSU5HKGZvciB0aHJlYWQgbG9jYWwgc3RvcmFnZSAoVExTKSBjbGFzcykKKyAgQUNfQ0FDSEVfVkFMKGFjX2N2X3RscywgWworICAgIGF4X3Rsc19rZXl3b3Jkcz0iX190aHJlYWQgX19kZWNsc3BlYyh0aHJlYWQpIG5vbmUiCisgICAgZm9yIGF4X3Rsc19rZXl3b3JkIGluICRheF90bHNfa2V5d29yZHM7IGRvCisgICAgICAgY2FzZSAkYXhfdGxzX2tleXdvcmQgaW4KKyAgICAgICAgICBub25lKSBhY19jdl90bHM9bm9uZSA7IGJyZWFrIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgICBBQ19UUllfQ09NUElMRSgKKyAgICAgICAgICAgICAgICBbI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZAorICAgICAgICAgICAgICAgICBmb28odm9pZCkgeworICAgICAgICAgICAgICAgICBzdGF0aWMgXSAkYXhfdGxzX2tleXdvcmQgWyBpbnQgYmFyOworICAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgICAgICAgW10sCisgICAgICAgICAgICAgICAgIFthY19jdl90bHM9JGF4X3Rsc19rZXl3b3JkIDsgYnJlYWtdLAorICAgICAgICAgICAgICAgICBhY19jdl90bHM9bm9uZQorICAgICAgICAgICAgICkKKyAgICAgICAgICBlc2FjCisgICAgZG9uZQorXSkKKworICBpZiB0ZXN0ICIkYWNfY3ZfdGxzIiAhPSAibm9uZSI7IHRoZW4KKyAgICBkbmwgQUNfREVGSU5FKFtUTFNdLCBbXSwgW0lmIHRoZSBjb21waWxlciBzdXBwb3J0cyBhIFRMUyBzdG9yYWdlIGNsYXNzIGRlZmluZSBpdCB0byB0aGF0IGhlcmVdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChbVExTXSwgJGFjX2N2X3RscywgW0lmIHRoZSBjb21waWxlciBzdXBwb3J0cyBhIFRMUyBzdG9yYWdlIGNsYXNzIGRlZmluZSBpdCB0byB0aGF0IGhlcmVdKQorICBmaQorICBBQ19NU0dfUkVTVUxUKCRhY19jdl90bHMpCitdKQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAgICAgICAgIGh0dHA6Ly93d3cubm9uZ251Lm9yZy9hdXRvY29uZi1hcmNoaXZlL2NoZWNrX2dudV9tYWtlLmh0bWwKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFNZTk9QU0lTCisjCisjICAgQ0hFQ0tfR05VX01BS0UoKQorIworIyBERVNDUklQVElPTgorIworIyAgIFRoaXMgbWFjcm8gc2VhcmNoZXMgZm9yIGEgR05VIHZlcnNpb24gb2YgbWFrZS4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgdGhlCisjICAgbWFrZWZpbGUgdmFyaWFibGUgYGlmR05VbWFrZScgaXMgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcsIG90aGVyd2lzZSBpdAorIyAgIGlzIHNldCB0byAiIyIuIFRoaXMgaXMgdXNlZnVsIGZvciBpbmNsdWRpbmcgYSBzcGVjaWFsIGZlYXR1cmVzIGluIGEKKyMgICBNYWtlZmlsZSwgd2hpY2ggY2Fubm90IGJlIGhhbmRsZWQgYnkgb3RoZXIgdmVyc2lvbnMgb2YgbWFrZS4gVGhlCisjICAgdmFyaWFibGUgX2N2X2dudV9tYWtlX2NvbW1hbmQgaXMgc2V0IHRvIHRoZSBjb21tYW5kIHRvIGludm9rZSBHTlUgbWFrZQorIyAgIGlmIGl0IGV4aXN0cywgdGhlIGVtcHR5IHN0cmluZyBvdGhlcndpc2UuCisjCisjICAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIGl0cyB1c2U6CisjCisjICAgTWFrZWZpbGUuaW4gbWlnaHQgY29udGFpbjoKKyMKKyMgICAgICAgIyBBIGZhaWxzYWZlIHdheSBvZiBwdXR0aW5nIGEgZGVwZW5kZW5jeSBydWxlIGludG8gYSBtYWtlZmlsZQorIyAgICAgICAkKERFUEVORCk6CisjICAgICAgICAgICAgICAgJChDQykgLU1NICQoc3JjZGlyKS8qLmMgPiAkKERFUEVORCkKKyMKKyMgICAgICAgQGlmR05VbWFrZUAgaWZlcSAoJChERVBFTkQpLCQod2lsZGNhcmQgJChERVBFTkQpKSkKKyMgICAgICAgQGlmR05VbWFrZUAgaW5jbHVkZSAkKERFUEVORCkKKyMgICAgICAgQGlmR05VbWFrZUAgZW5kaWYKKyMKKyMgICBUaGVuIGNvbmZpZ3VyZS5pbiB3b3VsZCBub3JtYWxseSBjb250YWluOgorIworIyAgICAgICBDSEVDS19HTlVfTUFLRSgpCisjICAgICAgIEFDX09VVFBVVChNYWtlZmlsZSkKKyMKKyMgICBUaGVuIHBlcmhhcHMgdG8gY2F1c2UgZ251IG1ha2UgdG8gb3ZlcnJpZGUgYW55IG90aGVyIG1ha2UsIHdlIGNvdWxkIGRvCisjICAgc29tZXRoaW5nIGxpa2UgdGhpcyAobm90ZSB0aGF0IEdOVSBtYWtlIGFsd2F5cyBsb29rcyBmb3IgR05VbWFrZWZpbGUKKyMgICBmaXJzdCk6CisjCisjICAgICAgIGlmICAhIHRlc3QgeCRfY3ZfZ251X21ha2VfY29tbWFuZCA9IHggOyB0aGVuCisjICAgICAgICAgICAgICAgbXYgTWFrZWZpbGUgR05VbWFrZWZpbGUKKyMgICAgICAgICAgICAgICBlY2hvIC5ERUZBVUxUOiA+IE1ha2VmaWxlIDsKKyMgICAgICAgICAgICAgICBlY2hvIFwgICRfY3ZfZ251X21ha2VfY29tbWFuZCBcJEAgPj4gTWFrZWZpbGU7CisjICAgICAgIGZpCisjCisjICAgVGhlbiwgaWYgYW55ICh3ZWxsIGFsbW9zdCBhbnkpIG90aGVyIG1ha2UgaXMgY2FsbGVkLCBhbmQgR05VIG1ha2UgYWxzbworIyAgIGV4aXN0cywgdGhlbiB0aGUgb3RoZXIgbWFrZSB3cmFwcyB0aGUgR05VIG1ha2UuCisjCisjIExJQ0VOU0UKKyMKKyMgICBDb3B5cmlnaHQgKGMpIDIwMDggSm9obiBEYXJyaW5ndG9uIDxqLmRhcnJpbmd0b25AZWx2aXMubXVyZG9jaC5lZHUuYXU+CisjCisjICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisjICAgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQgbm90aWNlCisjICAgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuCisjCisjIE5vdGU6IE1vZGlmaWVkIGJ5IFRlZCBUcydvIHRvIGFkZCBAaWZOb3RHTlVNYWtlQAorCitBQ19ERUZVTigKKyAgICAgICAgW0NIRUNLX0dOVV9NQUtFXSwgWyBBQ19DQUNIRV9DSEVDSyggZm9yIEdOVSBtYWtlLF9jdl9nbnVfbWFrZV9jb21tYW5kLAorICAgICAgICAgICAgICAgIF9jdl9nbnVfbWFrZV9jb21tYW5kPScnIDsKK2RubCBTZWFyY2ggYWxsIHRoZSBjb21tb24gbmFtZXMgZm9yIEdOVSBtYWtlCisgICAgICAgICAgICAgICAgZm9yIGEgaW4gIiRNQUtFIiBtYWtlIGdtYWtlIGdudW1ha2UgOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGEiIDsgdGhlbiBjb250aW51ZSA7IGZpIDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIHNoIC1jICIkYSAtLXZlcnNpb24iIDI+IC9kZXYvbnVsbCB8IGdyZXAgR05VICAyPiYxID4gL2Rldi9udWxsICkgOyAgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3ZfZ251X21ha2VfY29tbWFuZD0kYSA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lIDsKKyAgICAgICAgKSA7CitkbmwgSWYgdGhlcmUgd2FzIGEgR05VIHZlcnNpb24sIHRoZW4gc2V0IEBpZkdOVW1ha2VAIHRvIHRoZSBlbXB0eSBzdHJpbmcsICcjJyBvdGhlcndpc2UKKyAgICAgICAgaWYgdGVzdCAgIngkX2N2X2dudV9tYWtlX2NvbW1hbmQiICE9ICJ4IiAgOyB0aGVuCisgICAgICAgICAgICAgICAgaWZHTlVtYWtlPScnIDsKKyAgICAgICAgICAgICAgICBpZk5vdEdOVW1ha2U9JyMnIDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmR05VbWFrZT0nIycgOworICAgICAgICAgICAgICAgIGlmTm90R05VbWFrZT0nJyA7CisgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVCgiTm90IGZvdW5kIik7CisgICAgICAgIGZpCisgICAgICAgIEFDX1NVQlNUKGlmR05VbWFrZSkKKyAgICAgICAgQUNfU1VCU1QoaWZOb3RHTlVtYWtlKQorXSApCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2NhY2hlX2lub2RlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9jYWNoZV9pbm9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWVmOGU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9jYWNoZV9pbm9kZS5wYXRjaApAQCAtMCwwICsxLDUyIEBACitUaGUgY29tbWVudCB0byB0aGlzIGZ1bmN0aW9uIHNheXM6CisKKyIiIgorICAqIFN0dXBpZCBhbGdvcml0aG0gLS0tIHdlIG5vdyBqdXN0IHNlYXJjaCBmb3J3YXJkIHN0YXJ0aW5nIGZyb20gdGhlCisgICogZ29hbC4gIFNob3VsZCBwdXQgaW4gYSBzbWFydGVyIG9uZSBzb21lZGF5Li4uLgorIiIiCisKK1RoaXMgYWRkcyBpbiBhIHJhdGhlciBoYWNreSBhbGdvcnRoaW0gd2hpY2ggc3RhcnRzIHdoZXJlIHdlIGZpbmlzaGVkCitzZWFyY2hpbmcgcHJldmlvdXNseSB1c2luZyBhIHN0YXRpYyB2YXJpYWJsZSByYXRoZXIgdGhhbiBzdGFydGluZyAKK2Zyb20gc2NyYXRjaCBpZiBhIGhpbnQgaXNuJ3QgcHJvdmlkZWQuCisKK1RoaXMgd2FzIGFmdGVyIG5vdGljaW5nIHRoYXQgbWtmcy5leHQ0IC1GIFggLWQgWSB3YXMgc3BlbmRpbmcgKmxvdHMqCitvZiB0aW1lIGluIGV4dDJmc19uZXdfYmxvY2syIGNhbGxlZCBmcm9tIGV4dDJmc19ibWFwIGZyb20gZXh0MmZzX2ZpbGVfd3JpdGUoKS4KKworTnVtYmVycyB3aXNlLCB0aGlzIHRvb2sgYSBjb3JlLWltYWdlLXNhdG8tc2RrIG1rZnMgdGltZSBmcm9tIG92ZXIgCis4IG1pbnV0ZXMgdG8gYXJvdW5kIDM1IHNlY29uZHMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSUCAyMDE1LzAyLzIwCisKK0luZGV4OiBlMmZzcHJvZ3MtMS40Mi45L2xpYi9leHQyZnMvYWxsb2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGUyZnNwcm9ncy0xLjQyLjkub3JpZy9saWIvZXh0MmZzL2FsbG9jLmMKKysrKyBlMmZzcHJvZ3MtMS40Mi45L2xpYi9leHQyZnMvYWxsb2MuYworQEAgLTE2MCw2ICsxNjAsOCBAQCBlcnJjb2RlX3QgZXh0MmZzX25ld19pbm9kZShleHQyX2ZpbHN5cyBmCisgCXJldHVybiAwOworIH0KKyAKKytzdGF0aWMgYmxrNjRfdCBsYXN0X2dvYWwgPSAwOworKworIC8qCisgICogU3R1cGlkIGFsZ29yaXRobSAtLS0gd2Ugbm93IGp1c3Qgc2VhcmNoIGZvcndhcmQgc3RhcnRpbmcgZnJvbSB0aGUKKyAgKiBnb2FsLiAgU2hvdWxkIHB1dCBpbiBhIHNtYXJ0ZXIgb25lIHNvbWVkYXkuLi4uCitAQCAtMTcwLDYgKzE3Miw5IEBAIGVycmNvZGVfdCBleHQyZnNfbmV3X2Jsb2NrMihleHQyX2ZpbHN5cworIAlibGs2NF90CWk7CisgCWludAljX3JhdGlvOworIAorKyAgICAgICAgaWYgKCFnb2FsKQorKyAgICAgICAgICAgIGdvYWwgPSBsYXN0X2dvYWw7CisrCisgCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CisgCisgCWlmICghbWFwKQorQEAgLTE5NCw2ICsxOTksNyBAQCBlcnJjb2RlX3QgZXh0MmZzX25ld19ibG9jazIoZXh0Ml9maWxzeXMKKyAKKyAJCWlmICghZXh0MmZzX2Zhc3RfdGVzdF9ibG9ja19iaXRtYXAyKG1hcCwgaSkpIHsKKyAJCQkqcmV0ID0gaTsKKysJCQlsYXN0X2dvYWwgPSBpOworIAkJCXJldHVybiAwOworIAkJfQorIAkJaSA9IChpICsgY19yYXRpbykgJiB+KGNfcmF0aW8gLSAxKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvZml4LWljYWNoZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvZml4LWljYWNoZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzhjYzRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9maXgtaWNhY2hlLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK2lub2RlLmM6IG9ubHkgdXBkYXRlIHRoZSBpY2FjaGUgZm9yIGV4dDJfaW5vZGUKKworV2Ugb25seSByZWFkIHRoZSBjYWNoZSB3aGVuOgorCitidWZzaXplID09IHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkKKwordGhlbiB3ZSBzaG91bGQgb25seSB1cGRhdGUgdGhlIGNhY2hlIGluIHRoZSBzYW1lIGNvbmRpdGlvbiwgb3RoZXJ3aXNlCit0aGVyZSB3b3VsZCBiZSBlcnJvcnMsIGZvciBleGFtcGxlOgorCitjYWNoZVswXTogY2FjaGVkIGlubyAxNCB3aGVuIGJ1ZnNpemUgPSAxMjggYnkgZXh0MmZzX3dyaXRlX2lub2RlX2Z1bGwoKQorY2FjaGVbMV06IGNhY2hlZCBpbm8gMTQgd2hlbiBidWZzaXplID0gMTU2IGJ5IGV4dDJmc19yZWFkX2lub2RlX2Z1bGwoKQorCitUaGVuIHVwZGF0ZSB0aGUgY2FjaGU6CitjYWNoZVswXTogY2FjaGVkIGlubyAxNSB3aGVuIGJ1ZnNpemUgPSAxNTYgYnkgZXh0MmZzX3JlYWRfaW5vZGVfZnVsbCgpCisKK1RoZW4gdGhlIGlubyAxNCB3b3VsZCBoaXQgdGhlIGNhY2hlWzFdIHdoZW4gYnVmc2l6ZSA9IDEyOCAoYnV0IGl0IHdhcworY2FjaGVkIGJ5IGJ1ZnNpemUgPSAxNTYpLCBzbyB0aGVyZSB3b3VsZCBiZSBlcnJvcnMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGliL2V4dDJmcy9pbm9kZS5jIHwgMjAgKysrKysrKysrKysrLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvaW5vZGUuYyBiL2xpYi9leHQyZnMvaW5vZGUuYworLS0tIGEvbGliL2V4dDJmcy9pbm9kZS5jCisrKysgYi9saWIvZXh0MmZzL2lub2RlLmMKK0BAIC02MTIsMTAgKzYxMiwxMiBAQCBlcnJjb2RlX3QgZXh0MmZzX3JlYWRfaW5vZGVfZnVsbChleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisgI2VuZGlmCisgCisgCS8qIFVwZGF0ZSB0aGUgaW5vZGUgY2FjaGUgKi8KKy0JZnMtPmljYWNoZS0+Y2FjaGVfbGFzdCA9IChmcy0+aWNhY2hlLT5jYWNoZV9sYXN0ICsgMSkgJQorLQkJZnMtPmljYWNoZS0+Y2FjaGVfc2l6ZTsKKy0JZnMtPmljYWNoZS0+Y2FjaGVbZnMtPmljYWNoZS0+Y2FjaGVfbGFzdF0uaW5vID0gaW5vOworLQlmcy0+aWNhY2hlLT5jYWNoZVtmcy0+aWNhY2hlLT5jYWNoZV9sYXN0XS5pbm9kZSA9ICppbm9kZTsKKysJaWYgKGJ1ZnNpemUgPT0gc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSkgeworKwkJZnMtPmljYWNoZS0+Y2FjaGVfbGFzdCA9IChmcy0+aWNhY2hlLT5jYWNoZV9sYXN0ICsgMSkgJQorKwkJCWZzLT5pY2FjaGUtPmNhY2hlX3NpemU7CisrCQlmcy0+aWNhY2hlLT5jYWNoZVtmcy0+aWNhY2hlLT5jYWNoZV9sYXN0XS5pbm8gPSBpbm87CisrCQlmcy0+aWNhY2hlLT5jYWNoZVtmcy0+aWNhY2hlLT5jYWNoZV9sYXN0XS5pbm9kZSA9ICppbm9kZTsKKysJfQorIAorIAlyZXR1cm4gMDsKKyB9CitAQCAtNjQ4LDEwICs2NTAsMTIgQEAgZXJyY29kZV90IGV4dDJmc193cml0ZV9pbm9kZV9mdWxsKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKyAKKyAJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBpbm9kZSBjYWNoZSBuZWVkcyB0byBiZSB1cGRhdGVkICovCisgCWlmIChmcy0+aWNhY2hlKSB7CistCQlmb3IgKGk9MDsgaSA8IGZzLT5pY2FjaGUtPmNhY2hlX3NpemU7IGkrKykgeworLQkJCWlmIChmcy0+aWNhY2hlLT5jYWNoZVtpXS5pbm8gPT0gaW5vKSB7CistCQkJCWZzLT5pY2FjaGUtPmNhY2hlW2ldLmlub2RlID0gKmlub2RlOworLQkJCQlicmVhazsKKysJCWlmIChidWZzaXplID09IHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkpIHsKKysJCQlmb3IgKGk9MDsgaSA8IGZzLT5pY2FjaGUtPmNhY2hlX3NpemU7IGkrKykgeworKwkJCQlpZiAoZnMtPmljYWNoZS0+Y2FjaGVbaV0uaW5vID09IGlubykgeworKwkJCQkJZnMtPmljYWNoZS0+Y2FjaGVbaV0uaW5vZGUgPSAqaW5vZGU7CisrCQkJCQlicmVhazsKKysJCQkJfQorIAkJCX0KKyAJCX0KKyAJfSBlbHNlIHsKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL21pc2MtbWtlMmZzLmMtcmV0dXJuLWVycm9yLXdoZW4tZmFpbGVkLXRvLXBvcHVsYXRlLWZzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9taXNjLW1rZTJmcy5jLXJldHVybi1lcnJvci13aGVuLWZhaWxlZC10by1wb3B1bGF0ZS1mcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmEwY2UwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9taXNjLW1rZTJmcy5jLXJldHVybi1lcnJvci13aGVuLWZhaWxlZC10by1wb3B1bGF0ZS1mcy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIGU0ZmZkNmZlOTc1ODg4ZDMwNmI1ZjcwMGJhNTRhZjE4YjU5ZjY3NTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMjAgTWFyIDIwMTQgMTE6MTA6MjEgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gbWlzYy9ta2UyZnMuYzogcmV0dXJuIGVycm9yIHdoZW4gZmFpbGVkIHRvIHBvcHVsYXRlIGZpbGVzeXN0ZW0KKworV2UgbmVlZCByZXR1cm4gcmV0dmFsIHdoZW4gIm1rZTJmcyAtZCIgZmFpbGVkLCBvdGhlcndpc2UgdGhlICIkPyIgd291bGQKK2JlIDAgd2hpY2ggaXMgbWlzbGVhZGluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBtaXNjL21rZTJmcy5jIHwgNyArKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL21pc2MvbWtlMmZzLmMgYi9taXNjL21rZTJmcy5jCitpbmRleCBhNjNmMGI3Li44NDYxOTBlIDEwMDY0NAorLS0tIGEvbWlzYy9ta2UyZnMuYworKysrIGIvbWlzYy9ta2UyZnMuYworQEAgLTI3NDUsMTAgKzI3NDUsMTEgQEAgbm9fam91cm5hbDoKKyAJCWN1cnJlbnRfZnMgPSBmczsKKyAJCXJvb3QgPSBFWFQyX1JPT1RfSU5POworIAkJcmV0dmFsID0gcG9wdWxhdGVfZnMocm9vdCwgcm9vdF9kaXIpOworLQkJaWYgKHJldHZhbCkKKysJCWlmIChyZXR2YWwpIHsKKyAJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwKKy0JCQkJXygiXG5FcnJvciB3aGlsZSBwb3B1bGF0aW5nIGZpbGUgc3lzdGVtIikpOworLQkJZWxzZSBpZiAoIXF1aWV0KQorKwkJCQlfKCJcbkVycm9yIHdoaWxlIHBvcHVsYXRpbmcgZmlsZSBzeXN0ZW1cbiIpKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfSBlbHNlIGlmICghcXVpZXQpCisgCQkJcHJpbnRmKCIlcyIsIF8oImRvbmVcbiIpKTsKKyAJfQorIAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvbWtkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL21rZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhN2EyOTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL21rZGlyLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWVpIExlaSA8bGVpLm1laUBpbnRlbC5jb20+CisKK0luZGV4OiBlMmZzcHJvZ3MtMS40MS41L3BvL01ha2VmaWxlLmluLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZTJmc3Byb2dzLTEuNDEuNS5vcmlnL3BvL01ha2VmaWxlLmluLmluCTIwMDktMDItMTQgMTM6NDk6MDguMDAwMDAwMDAwICswMDAwCisrKysgZTJmc3Byb2dzLTEuNDEuNS9wby9NYWtlZmlsZS5pbi5pbgkyMDA5LTA4LTE5IDE3OjUyOjMxLjAwMDAwMDAwMCArMDEwMAorQEAgLTMwLDcgKzMwLDcgQEAKKyBJTlNUQUxMID0gQElOU1RBTExACisgSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKKyBNS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACistbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQoTUtJTlNUQUxMRElSUykKKytta2luc3RhbGxkaXJzID0gJChNS0lOU1RBTExESVJTKQorIAorIEdNU0dGTVQgPSBAR01TR0ZNVEAKKyBNU0dGTVQgPSBATVNHRk1UQAorSW5kZXg6IGUyZnNwcm9ncy0xLjQxLjUvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZTJmc3Byb2dzLTEuNDEuNS5vcmlnL2NvbmZpZ3VyZS5pbgkyMDA5LTA4LTE5IDE3OjUzOjUwLjAwMDAwMDAwMCArMDEwMAorKysrIGUyZnNwcm9ncy0xLjQxLjUvY29uZmlndXJlLmluCTIwMDktMDgtMTkgMTc6NDg6MzguMDAwMDAwMDAwICswMTAwCitAQCAtOTcwLDYgKzk3MCw4IEBACisgZmkKKyBBQ19TVUJTVChCVUlMRF9DRkxBR1MpCisgQUNfU1VCU1QoQlVJTERfTERGTEFHUykKKytNS0lOU1RBTExESVJTPSJta2RpciAtcCIKKytBQ19TVUJTVChNS0lOU1RBTExESVJTKQorIGRubAorIGRubCBNYWtlIG91ciBvdXRwdXQgZmlsZXMsIGJlaW5nIHN1cmUgdGhhdCB3ZSBjcmVhdGUgdGhlIHNvbWUgbWlzY2VsbGFuZW91cyAKKyBkbmwgZGlyZWN0b3JpZXMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcHRlc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3B0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YTUzZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3B0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK0luZGV4OiBlMmZzcHJvZ3MtMS40Mi45L3Rlc3RzL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZTJmc3Byb2dzLTEuNDIuOS5vcmlnL3Rlc3RzL01ha2VmaWxlLmluCisrKysgZTJmc3Byb2dzLTEuNDIuOS90ZXN0cy9NYWtlZmlsZS5pbgorQEAgLTE4LDcgKzE4LDcgQEAgdGVzdF9vbmU6ICQoc3JjZGlyKS90ZXN0X29uZS5pbiBNYWtlZmlsZQorIAlAZWNobyAiIyEvYmluL3NoIiA+IHRlc3Rfb25lCisgQEhUUkVFX0NNVEAJQGVjaG8gIkhUUkVFPXkiID4+IHRlc3Rfb25lCisgQFFVT1RBX0NNVEAJQGVjaG8gIlFVT1RBPXkiID4+IHRlc3Rfb25lCistCUBlY2hvICJTUkNESVI9QHNyY2RpckAiID4+IHRlc3Rfb25lCisrCUBlY2hvICJTUkNESVI9L3Vzci9saWIvZTJmc3Byb2dzL3B0ZXN0L3Rlc3QiID4+IHRlc3Rfb25lCisgCUBlY2hvICJESUZGX09QVFM9QFVOSV9ESUZGX09QVFNAIiA+PiB0ZXN0X29uZQorIAlAY2F0ICQoc3JjZGlyKS90ZXN0X29uZS5pbiA+PiB0ZXN0X29uZQorIAlAY2htb2QgK3ggdGVzdF9vbmUKK0BAIC0yNiw3ICsyNiw3IEBAIHRlc3Rfb25lOiAkKHNyY2RpcikvdGVzdF9vbmUuaW4gTWFrZWZpbGUKKyB0ZXN0X3NjcmlwdDogdGVzdF9vbmUgdGVzdF9zY3JpcHQuaW4gTWFrZWZpbGUgbWtlMmZzLmNvbmYKKyAJQGVjaG8gIkNyZWF0aW5nIHRlc3Rfc2NyaXB0Li4uIgorIAlAZWNobyAiIyEvYmluL3NoIiA+IHRlc3Rfc2NyaXB0CistCUBlY2hvICJTUkNESVI9QHNyY2RpckAiID4+IHRlc3Rfc2NyaXB0CisrCUBlY2hvICJTUkNESVI9L3Vzci9saWIvZTJmc3Byb2dzL3B0ZXN0L3Rlc3QiID4+IHRlc3Rfc2NyaXB0CisgCUBjYXQgJChzcmNkaXIpL3Rlc3Rfc2NyaXB0LmluID4+IHRlc3Rfc2NyaXB0CisgCUBjaG1vZCAreCB0ZXN0X3NjcmlwdAorIAorSW5kZXg6IGUyZnNwcm9ncy0xLjQyLjkvdGVzdHMvdGVzdF9jb25maWcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlMmZzcHJvZ3MtMS40Mi45Lm9yaWcvdGVzdHMvdGVzdF9jb25maWcKKysrKyBlMmZzcHJvZ3MtMS40Mi45L3Rlc3RzL3Rlc3RfY29uZmlnCitAQCAtMywyMyArMywyMyBAQAorICMKKyAKKyB1bnNldCBMQU5HIExBTkdVQUdFIExDX0FERFJFU1MgTENfQUxMIExDX0NPTExBVEUgTENfQ1RZUEUgTENfSURFTlRJRklDQVRJT04gTENfTUVBU1VSRU1FTlQgTENfTUVTU0FHRVMgTENfTU9ORVRBUlkgTENfTkFNRSBMQ19OVU1FUklDIExDX1BBUEVSIExDX1RFTEVQSE9ORSBMQ19USU1FIFBBR0VSCistRlNDSz0iJFVTRV9WQUxHUklORCAuLi9lMmZzY2svZTJmc2NrIgorLU1LRTJGUz0iJFVTRV9WQUxHUklORCAuLi9taXNjL21rZTJmcyIKKy1EVU1QRTJGUz0iJFVTRV9WQUxHUklORCAuLi9taXNjL2R1bXBlMmZzIgorLVRVTkUyRlM9IiRVU0VfVkFMR1JJTkQgLi4vbWlzYy90dW5lMmZzIgorLUNIQVRUUj0iJFVTRV9WQUxHUklORC4uL21pc2MvY2hhdHRyIgorLUxTQVRUUj0iJFVTRV9WQUxHUklORCAuLi9taXNjL2xzYXR0ciIKKy1FMklNQUdFPSIkVVNFX1ZBTEdSSU5EIC4uL21pc2MvZTJpbWFnZSIKKy1FMklNQUdFX0VYRT0iLi4vbWlzYy9lMmltYWdlIgorLURFQlVHRlM9IiRVU0VfVkFMR1JJTkQgLi4vZGVidWdmcy9kZWJ1Z2ZzIgorLURFQlVHRlNfRVhFPSIuLi9kZWJ1Z2ZzL2RlYnVnZnMiCistVEVTVF9CSVRTPSIuLi9kZWJ1Z2ZzL2RlYnVnZnMiCistUkVTSVpFMkZTX0VYRT0iLi4vcmVzaXplL3Jlc2l6ZTJmcyIKKytGU0NLPSIkVVNFX1ZBTEdSSU5EIGUyZnNjayIKKytNS0UyRlM9IiRVU0VfVkFMR1JJTkQgbWtlMmZzIgorK0RVTVBFMkZTPSIkVVNFX1ZBTEdSSU5EIGR1bXBlMmZzIgorK1RVTkUyRlM9IiRVU0VfVkFMR1JJTkQgdHVuZTJmcyIKKytDSEFUVFI9IiRVU0VfVkFMR1JJTkQgY2hhdHRyIgorK0xTQVRUUj0iJFVTRV9WQUxHUklORCBsc2F0dHIiCisrRTJJTUFHRT0iJFVTRV9WQUxHUklORCBlMmltYWdlIgorK0UySU1BR0VfRVhFPSIvc2Jpbi9lMmltYWdlIgorK0RFQlVHRlM9IiRVU0VfVkFMR1JJTkQgZGVidWdmcyIKKytERUJVR0ZTX0VYRT0iL3NiaW4vZGVidWdmcyIKKytURVNUX0JJVFM9Ii9zYmluL2RlYnVnZnMiCisrUkVTSVpFMkZTX0VYRT0iL3NiaW4vcmVzaXplMmZzIgorIFJFU0laRTJGUz0iJFVTRV9WQUxHUklORCAkUkVTSVpFMkZTX0VYRSIKKy1FMlVORE9fRVhFPSIuLi9taXNjL2UydW5kbyIKKy1URVNUX1JFTD0uLi90ZXN0cy9wcm9ncy90ZXN0X3JlbAorLVRFU1RfSUNPVU5UPS4uL3Rlc3RzL3Byb2dzL3Rlc3RfaWNvdW50CistQ1JDU1VNPS4uL3Rlc3RzL3Byb2dzL2NyY3N1bQorK0UyVU5ET19FWEU9Ii9zYmluL2UydW5kbyIKKytURVNUX1JFTD0uL3Byb2dzL3Rlc3RfcmVsCisrVEVTVF9JQ09VTlQ9Li9wcm9ncy90ZXN0X2ljb3VudAorK0NSQ1NVTT0uL3Byb2dzL2NyY3N1bQorIExEX0xJQlJBUllfUEFUSD0uLi9saWI6Li4vbGliL2V4dDJmczouLi9saWIvZTJwOi4uL2xpYi9ldDouLi9saWIvc3MKKyBEWUxEX0xJQlJBUllfUEFUSD0uLi9saWI6Li4vbGliL2V4dDJmczouLi9saWIvZTJwOi4uL2xpYi9ldDouLi9saWIvc3MKKyBleHBvcnQgTERfTElCUkFSWV9QQVRICmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3F1aWV0LWRlYnVnZnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3F1aWV0LWRlYnVnZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwZTlkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcXVpZXQtZGVidWdmcy5wYXRjaApAQCAtMCwwICsxLDE5IEBACitXaGVuIGV4ZWN1dGluZyBhIHNjcmlwdCBkb24ndCBlY2hvIGV2ZXJ5IGNvbW1hbmQsIGFzIHdlIGRvIHRoaXMgZm9yIGVudGlyZQorZmlsZXN5c3RlbXMgYXQgcm9vdGZzIHRpbWUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2RlYnVnZnMvZGVidWdmcy5jIGIvZGVidWdmcy9kZWJ1Z2ZzLmMKK2luZGV4IDU1OTAyOTUuLmFjNTcyOTIgMTAwNjQ0CistLS0gYS9kZWJ1Z2ZzL2RlYnVnZnMuYworKysrIGIvZGVidWdmcy9kZWJ1Z2ZzLmMKK0BAIC0yMzc4LDcgKzIzNzgsNyBAQCBzdGF0aWMgaW50IHNvdXJjZV9maWxlKGNvbnN0IGNoYXIgKmNtZF9maWxlLCBpbnQgc3NfaWR4KQorIAkJY3AgPSBzdHJjaHIoYnVmLCAnXHInKTsKKyAJCWlmIChjcCkKKyAJCQkqY3AgPSAwOworLQkJcHJpbnRmKCJkZWJ1Z2ZzOiAlc1xuIiwgYnVmKTsKKysJCS8qcHJpbnRmKCJkZWJ1Z2ZzOiAlc1xuIiwgYnVmKTsqLworIAkJcmV0dmFsID0gc3NfZXhlY3V0ZV9saW5lKHNzX2lkeCwgYnVmKTsKKyAJCWlmIChyZXR2YWwpIHsKKyAJCQlzc19wZXJyb3Ioc3NfaWR4LCByZXR2YWwsIGJ1Zik7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2U2ZWI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIGIxMzllMDNhYzJmNzJlNjQ0ZTU0N2M3ZWU5YjE1MTQzODNhZjRkOTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDMwIEphbiAyMDEzIDE1OjIyOjA0ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIFdoZW4gL2V0Yy9sZC5zby5jYWNoZSBpcyB3cml0ZWFibGUgYnkgdXNlciBydW5uaW5nIGJpdGJha2UKKyB0aGVuIGl0IGNyZWF0ZXMgaW52YWxpZCBjYWNoZSAoaW4gbXkgY2FzZSBsaWJzdGRjKysuc28KKyBjYW5ub3QgYmUgZm91bmQgYWZ0ZXIgYnVpbGRpbmcgemxpYigtbmF0aXZlKSBhbmQgSSBoYXZlIHRvCisgY2FsbCB0b3VjaCAqL2xpYnN0ZGMrKy5zbyAmJiAvc2Jpbi9sZGNvbmZpZyB0byBmaXggaXQuCisKK1NvIHJlbW92ZSBsZGNvbmZpZyBjYWxsIGZyb20gbWFrZSBpbnN0YWxsLWxpYnMKKworUGF0Y2ggYXV0aG9yZWQgYnkgTWFydGluIEphbnNhLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CistLS0KKyBsaWIvTWFrZWZpbGUuZWxmLWxpYiB8ICAgIDMgLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuZWxmLWxpYiBiL2xpYi9NYWtlZmlsZS5lbGYtbGliCitpbmRleCA3ODQ3OWQzLi40YTRhNWFjIDEwMDY0NAorLS0tIGEvbGliL01ha2VmaWxlLmVsZi1saWIKKysrKyBiL2xpYi9NYWtlZmlsZS5lbGYtbGliCitAQCAtNTAsOCArNTAsNiBAQCBpbnN0YWxsLXNobGlicyBpbnN0YWxsOjogJChFTEZfTElCKSBpbnN0YWxsZGlycy1lbGYtbGliICQoREVQX0lOU1RBTExfU1lNTElOSykKKyAJJChFKSAiCVNZTUxJTksgJChsaWJkaXIpLyQoRUxGX0lNQUdFKS5zbyIKKyAJJChRKSAkKElOU1RBTExfU1lNTElOSykgJChFTEZfSU5TVEFMTF9ESVIpLyQoRUxGX1NPTkFNRSkgXAorIAkJJChsaWJkaXIpLyQoRUxGX0lNQUdFKS5zbyAkKERFU1RESVIpCistCSQoRSkgIglMRENPTkZJRyIKKy0JJChRKSAtJChMRENPTkZJRykKKyAKKyBpbnN0YWxsLXN0cmlwOiBpbnN0YWxsCisgCSQoRSkgIglTVFJJUC1MSUIgJChFTEZfSU5TVEFMTF9ESVIpLyQoRUxGX0xJQikiCitAQCAtNjcsNyArNjUsNiBAQCB1bmluc3RhbGwtc2hsaWJzIHVuaW5zdGFsbDo6CisgCSQoUk0pIC1mICQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfTElCKSBcCisgCQkkKERFU1RESVIpJChFTEZfSU5TVEFMTF9ESVIpLyQoRUxGX1NPTkFNRSkgXAorIAkJJChERVNURElSKSQobGliZGlyKS8kKEVMRl9JTUFHRSkuc28KKy0JLSQoTERDT05GSUcpCisgCisgY2xlYW46OgorIAkkKFJNKSAtcmYgZWxmc2hhcmVkCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWMyNTEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9ydW4tcHRlc3QKQEAgLTAsMCArMSwxMSBAQAorIyEvYmluL3NoCisKK2NkIC4vdGVzdAorLi90ZXN0X3NjcmlwdCAmPi4uL3Rlc3QubG9nCitpZiBbICQ/IC1lcSAwIF0KK3RoZW4KKwllY2hvICJQQVNTOiBlMmZzcHJvZ3MiCisJcm0gdGVzdC5sb2cKK2Vsc2UKKwllY2hvICJGQUlMOiBlMmZzcHJvZ3MiCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9nc18xLjQyLjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzXzEuNDIuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2UyOWM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9nc18xLjQyLjkuYmIKQEAgLTAsMCArMSwxMTYgQEAKK3JlcXVpcmUgZTJmc3Byb2dzLmluYworCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICJVcGRhdGluZyBiYWNrcG9ydGVkIHBhdGNoZXMgdG8gMS40Mi4xMyBpcyB0b28gbXVjaCBwYWluLiBMZXQncyB3YWl0IHVudGlsIDEuNDMgaXMgcmVsZWFzZWQuIgorCitTUkNfVVJJICs9ICJmaWxlOi8vYWNpbmNsdWRlLm00IFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWljYWNoZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcXVpZXQtZGVidWdmcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1ta2UyZnMtYWRkLXRoZS1hYmlsaXR5LXRvLWNvcHktZmlsZXMtZnJvbS1hLWdpdmVuLWRpLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAyLW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1maWxlcy1yZWN1cnNpdmVseS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMy1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1zcGVjaWFsLWZpbGUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDQtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtc3ltbGluay5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwNS1taXNjLWNyZWF0ZV9pbm9kZS5jLWNvcHktcmVndWxhci1maWxlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA2LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLWRpcmVjdG9yeS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwNy1taXNjLWNyZWF0ZV9pbm9kZS5jLXNldC1vd25lci1tb2RlLXRpbWUtZm9yLXRoZS1pbm9kLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA4LW1rZTJmcy5jLWFkZC1hbi1vcHRpb24tZC1yb290LWRpcmVjdG9yeS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwOS1taXNjLWNyZWF0ZV9pbm9kZS5jLWhhbmRsZS1oYXJkbGlua3MucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMTAtZGVidWdmcy11c2UtdGhlLWZ1bmN0aW9ucy1pbi1taXNjLWNyZWF0ZV9pbm9kZS5jLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDExLW1rZTJmcy44LmluLXVwZGF0ZS10aGUtbWFudWFsLWZvci10aGUtZC1vcHRpb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMTItRml4LW11c2wtYnVpbGQtZmFpbHVyZXMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtZTJmc3Byb2dzLWZpeC1jcm9zcy1jb21waWxhdGlvbi1wcm9ibGVtLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9taXNjLW1rZTJmcy5jLXJldHVybi1lcnJvci13aGVuLWZhaWxlZC10by1wb3B1bGF0ZS1mcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vY2FjaGVfaW5vZGUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL0NWRS0yMDE1LTAyNDcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtbGliZXh0MmZzLWZpeC1wb3RlbnRpYWwtYnVmZmVyLW92ZXJmbG93LWluLWNsb3NlZnMucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2Y4ZTQxZTYzYjQzMmJhMTE0YjMzZjU4Njc0NTYzZjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmY5MmFjMDZlOTJmYTAwZjJhZGEzZWU2N2RhZDAxMmQ3NGQ2ODU1Mzc1MjdhZDEyNDFkODJmMmQwNDFmMjgwMiIKKworRVhUUkFfT0VDT05GICs9ICItLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSAtLXNiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9IC0tZW5hYmxlLWVsZi1zaGxpYnMgLS1kaXNhYmxlLWxpYnV1aWQgLS1kaXNhYmxlLXV1aWRkIC0tZW5hYmxlLXZlcmJvc2UtbWFrZWNtZHMiCitFWFRSQV9PRUNPTkZfZGFyd2luID0gIi0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IC0tc2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0gLS1lbmFibGUtYnNkLXNobGlicyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWNwICR7V09SS0RJUn0vYWNpbmNsdWRlLm00ICR7U30vCit9CisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC1saWJzCisJIyBXZSB1c2UgYmxraWQgZnJvbSB1dGlsLWxpbnV4IG5vdyBzbyByZW1vdmUgZnJvbSBoZXJlCisJcm0gLWYgJHtEfSR7YmFzZV9saWJkaXJ9L2xpYmJsa2lkKgorCXJtIC1yZiAke0R9JHtpbmNsdWRlZGlyfS9ibGtpZAorCXJtIC1mICR7RH0ke2Jhc2VfbGliZGlyfS9wa2djb25maWcvYmxraWQucGMKKwlybSAtZiAke0R9JHtiYXNlX3NiaW5kaXJ9L2Jsa2lkCisJcm0gLWYgJHtEfSR7YmFzZV9zYmluZGlyfS9mc2NrCisJcm0gLWYgJHtEfSR7YmFzZV9zYmluZGlyfS9maW5kZnMKKworCSMgZTJpbml0cmRfaGVscGVyIGFuZCB0aGUgcGtnY29uZmlnIGZpbGVzIGJlbG9uZyBpbiBsaWJkaXIKKwlpZiBbICEgJHtEfSR7bGliZGlyfSAtZWYgJHtEfSR7YmFzZV9saWJkaXJ9IF07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9CisJCW12ICR7RH0ke2Jhc2VfbGliZGlyfS9lMmluaXRyZF9oZWxwZXIgJHtEfSR7bGliZGlyfQorCQltdiAke0R9JHtiYXNlX2xpYmRpcn0vcGtnY29uZmlnICR7RH0ke2xpYmRpcn0KKwlmaQorCisJb2VfbXVsdGlsaWJfaGVhZGVyIGV4dDJmcy9leHQyX3R5cGVzLmgKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCW12ICR7RH0ke2JpbmRpcn0vY2hhdHRyICR7RH0ke2Jhc2VfYmluZGlyfS9jaGF0dHIuZTJmc3Byb2dzCisKKwlpbnN0YWxsIC12IC1tIDc1NSAke1N9L2NvbnRyaWIvcG9wdWxhdGUtZXh0ZnMuc2ggJHtEfSR7YmFzZV9zYmluZGlyfS8KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworCSMgQ2xlYW4gaG9zdCBwYXRoIGluIGNvbXBpbGVfZXQsIG1rX2NtZHMKKwlzZWQgLWkgLWUgInMsRVRfRElSPVwiJHtTfS9saWIvZXRcIixFVF9ESVI9XCIke2RhdGFkaXJ9L2V0XCIsZyIgJHtEfSR7YmluZGlyfS9jb21waWxlX2V0CisJc2VkIC1pIC1lICJzLFNTX0RJUj1cIiR7U30vbGliL3NzXCIsU1NfRElSPVwiJHtkYXRhZGlyfS9zc1wiLGciICR7RH0ke2JpbmRpcn0vbWtfY21kcworfQorCitSREVQRU5EU19lMmZzcHJvZ3MgPSAiZTJmc3Byb2dzLWJhZGJsb2NrcyIKK1JSRUNPTU1FTkRTX2UyZnNwcm9ncyA9ICJlMmZzcHJvZ3MtbWtlMmZzIGUyZnNwcm9ncy1lMmZzY2siCisKK1BBQ0tBR0VTID0rICJlMmZzcHJvZ3MtZTJmc2NrIGUyZnNwcm9ncy1ta2UyZnMgZTJmc3Byb2dzLXR1bmUyZnMgZTJmc3Byb2dzLWJhZGJsb2NrcyBlMmZzcHJvZ3MtcmVzaXplMmZzIgorUEFDS0FHRVMgPSsgImxpYmNvbWVyciBsaWJzcyBsaWJlMnAgbGliZXh0MmZzIgorCitGSUxFU19lMmZzcHJvZ3MtcmVzaXplMmZzID0gIiR7YmFzZV9zYmluZGlyfS9yZXNpemUyZnMqIgorRklMRVNfZTJmc3Byb2dzLWUyZnNjayA9ICIke2Jhc2Vfc2JpbmRpcn0vZTJmc2NrICR7YmFzZV9zYmluZGlyfS9mc2NrLmV4dCoiCitGSUxFU19lMmZzcHJvZ3MtbWtlMmZzID0gIiR7YmFzZV9zYmluZGlyfS9ta2UyZnMgJHtiYXNlX3NiaW5kaXJ9L21rZnMuZXh0KiAke3N5c2NvbmZkaXJ9L21rZTJmcy5jb25mIgorRklMRVNfZTJmc3Byb2dzLXR1bmUyZnMgPSAiJHtiYXNlX3NiaW5kaXJ9L3R1bmUyZnMgJHtiYXNlX3NiaW5kaXJ9L2UybGFiZWwiCitGSUxFU19lMmZzcHJvZ3MtYmFkYmxvY2tzID0gIiR7YmFzZV9zYmluZGlyfS9iYWRibG9ja3MiCitGSUxFU19saWJjb21lcnIgPSAiJHtiYXNlX2xpYmRpcn0vbGliY29tX2Vyci5zby4qIgorRklMRVNfbGlic3MgPSAiJHtiYXNlX2xpYmRpcn0vbGlic3Muc28uKiIKK0ZJTEVTX2xpYmUycCA9ICIke2Jhc2VfbGliZGlyfS9saWJlMnAuc28uKiIKK0ZJTEVTX2xpYmV4dDJmcyA9ICIke2xpYmRpcn0vZTJpbml0cmRfaGVscGVyICR7YmFzZV9saWJkaXJ9L2xpYmV4dDJmcy5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9LyovKi5hd2sgJHtkYXRhZGlyfS8qLyouc2VkICR7YmFzZV9saWJkaXJ9Lyouc28iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImNoYXR0ciIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtjaGF0dHJdID0gIiR7YmFzZV9iaW5kaXJ9L2NoYXR0ciIKK0FMVEVSTkFUSVZFX1RBUkdFVFtjaGF0dHJdID0gIiR7YmFzZV9iaW5kaXJ9L2NoYXR0ci5lMmZzcHJvZ3MiCisKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJsaWJibGtpZC4zIGJsa2lkLjggZmluZGZzLjggZnNjay44IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2xpYmJsa2lkLjNdID0gIiR7bWFuZGlyfS9tYW4zL2xpYmJsa2lkLjMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbYmxraWQuOF0gPSAiJHttYW5kaXJ9L21hbjgvYmxraWQuOCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmaW5kZnMuOF0gPSAiJHttYW5kaXJ9L21hbjgvZmluZGZzLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZnNjay44XSA9ICIke21hbmRpcn0vbWFuOC9mc2NrLjgiCisKK2luaGVyaXQgcHRlc3QKK1NSQ19VUkkgKz0gImZpbGU6Ly9ydW4tcHRlc3QiCitTUkNfVVJJICs9ICJmaWxlOi8vcHRlc3QucGF0Y2giCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIke1BOfSAke1BOfS10dW5lMmZzIGNvcmV1dGlscyBwcm9jcHMiCisjUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImV4cGVjdCIKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIC1DICR7Qn0vdGVzdHMKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwljcCAtYSAke0J9L3Rlc3RzICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKwljcCAtYSAke1N9L3Rlc3RzLyogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCXNlZCAtZSAncyEuLi9lMmZzY2svZTJmc2NrIWUyZnNjayFnJyAtaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0LyovZXhwZWN0KgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvYXJtX2JhY2tlbmQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2FybV9iYWNrZW5kLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlNDY3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2FybV9iYWNrZW5kLmRpZmYKQEAgLTAsMCArMSw0NDkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2FybV9pbml0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0Ni5vcmlnL2JhY2tlbmRzL2FybV9pbml0LmMJMjAwOS0wNC0yMSAxNDo1MDowMS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9hcm1faW5pdC5jCTIwMTAtMDQtMjQgMTA6MTE6MTMuMDAwMDAwMDAwICswMDAwCitAQCAtMzIsMjEgKzMyLDMyIEBACisgI2RlZmluZSBSRUxPQ19QUkVGSVgJUl9BUk1fCisgI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKyAKKysjaW5jbHVkZSAibGliZWJsX2FybS5oIgorKworIC8qIFRoaXMgZGVmaW5lcyB0aGUgY29tbW9uIHJlbG9jIGhvb2tzIGJhc2VkIG9uIGFybV9yZWxvYy5kZWYuICAqLworICNpbmNsdWRlICJjb21tb24tcmVsb2MuYyIKKyAKKyAKKyBjb25zdCBjaGFyICoKKyBhcm1faW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCistICAgICBFbGYgKmVsZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBFbGYgKmVsZjsKKyAgICAgIEdFbGZfSGFsZiBtYWNoaW5lIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKyAgICAgIEVibCAqZWg7CisgICAgICBzaXplX3QgZWhsZW47CisgeworKyAgaW50IHNvZnRfZmxvYXQgPSAwOworKworICAgLyogQ2hlY2sgd2hldGhlciB0aGUgRWxmX0JIIG9iamVjdCBoYXMgYSBzdWZmaWNlbnQgc2l6ZS4gICovCisgICBpZiAoZWhsZW4gPCBzaXplb2YgKEVibCkpCisgICAgIHJldHVybiBOVUxMOworIAorKyAgaWYgKGVsZikgeworKyAgICBHRWxmX0VoZHIgZWhkcl9tZW07CisrICAgIEdFbGZfRWhkciAqZWhkciA9IGdlbGZfZ2V0ZWhkciAoZWxmLCAmZWhkcl9tZW0pOworKyAgICBpZiAoZWhkciAmJiAoZWhkci0+ZV9mbGFncyAmIEVGX0FSTV9TT0ZUX0ZMT0FUKSkKKysgICAgICBzb2Z0X2Zsb2F0ID0gMTsKKysgIH0KKysKKyAgIC8qIFdlIGhhbmRsZSBpdC4gICovCisgICBlaC0+bmFtZSA9ICJBUk0iOworICAgYXJtX2luaXRfcmVsb2MgKGVoKTsKK0BAIC01OCw3ICs2OSwxMCBAQAorICAgSE9PSyAoZWgsIGNvcmVfbm90ZSk7CisgICBIT09LIChlaCwgYXV4dl9pbmZvKTsKKyAgIEhPT0sgKGVoLCBjaGVja19vYmplY3RfYXR0cmlidXRlKTsKKy0gIEhPT0sgKGVoLCByZXR1cm5fdmFsdWVfbG9jYXRpb24pOworKyAgaWYgKHNvZnRfZmxvYXQpCisrICAgIGVoLT5yZXR1cm5fdmFsdWVfbG9jYXRpb24gPSBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX3NvZnQ7CisrICBlbHNlCisrICAgIGVoLT5yZXR1cm5fdmFsdWVfbG9jYXRpb24gPSBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX2hhcmQ7CisgCisgICByZXR1cm4gTU9EVkVSU0lPTjsKKyB9CitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvYXJtX3JlZ3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvYmFja2VuZHMvYXJtX3JlZ3MuYwkyMDA5LTA0LTIxIDE0OjUwOjAxLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2FybV9yZWdzLmMJMjAxMC0wNC0yNCAxMDoxMToxMy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yOCw2ICsyOCw3IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxkd2FyZi5oPgorIAorICNkZWZpbmUgQkFDS0VORCBhcm1fCitAQCAtNTgsNyArNTksMTUgQEAKKyAgICAgICBuYW1lbGVuID0gMjsKKyAgICAgICBicmVhazsKKyAKKy0gICAgY2FzZSAxMCAuLi4gMTI6CisrICAgIGNhc2UgMTAgLi4uIDExOgorKyAgICAgIG5hbWVbMF0gPSAncic7CisrICAgICAgbmFtZVsxXSA9ICcxJzsKKysgICAgICBuYW1lWzJdID0gcmVnbm8gJSAxMCArICcwJzsKKysgICAgICBuYW1lbGVuID0gMzsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAxMjoKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKyAgICAgICBuYW1lWzBdID0gJ3InOworICAgICAgIG5hbWVbMV0gPSAnMSc7CisgICAgICAgbmFtZVsyXSA9IHJlZ25vICUgMTAgKyAnMCc7CitAQCAtNzMsNiArODIsOSBAQAorICAgICAgIGJyZWFrOworIAorICAgICBjYXNlIDE2ICsgMCAuLi4gMTYgKyA3OgorKyAgICAgIC8qIEFBRFdBUkYgc2F5cyB0aGF0IHRoZXJlIGFyZSBubyByZWdpc3RlcnMgaW4gdGhhdCByYW5nZSwKKysgICAgICAgKiBidXQgZ2NjIG1hcHMgRlBBIHJlZ2lzdGVycyBoZXJlCisrICAgICAgICovCisgICAgICAgcmVnbm8gKz0gOTYgLSAxNjsKKyAgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworICAgICBjYXNlIDk2ICsgMCAuLi4gOTYgKyA3OgorQEAgLTg0LDExICs5NiwxMzkgQEAKKyAgICAgICBuYW1lbGVuID0gMjsKKyAgICAgICBicmVhazsKKyAKKysgICAgY2FzZSA2NCArIDAgLi4uIDY0ICsgOToKKysgICAgICAqc2V0bmFtZSA9ICJWRlAiOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfZmxvYXQ7CisrICAgICAgbmFtZVswXSA9ICdzJzsKKysgICAgICBuYW1lWzFdID0gcmVnbm8gLSA2NCArICcwJzsKKysgICAgICBuYW1lbGVuID0gMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSA2NCArIDEwIC4uLiA2NCArIDMxOgorKyAgICAgICpzZXRuYW1lID0gIlZGUCI7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKysgICAgICBuYW1lWzBdID0gJ3MnOworKyAgICAgIG5hbWVbMV0gPSAocmVnbm8gLSA2NCkgLyAxMCArICcwJzsKKysgICAgICBuYW1lWzJdID0gKHJlZ25vIC0gNjQpICUgMTAgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgMTA0ICsgMCAuLi4gMTA0ICsgNzoKKysgICAgICAvKiBYWFggVE9ETzoKKysgICAgICAgKiBUaGlzIGNhbiBiZSBlaXRoZXIgaW50ZWwgd2lyZWxlc3MgTU1YIGdlbmVyYWwgcHVycG9zZS9jb250cm9sCisrICAgICAgICogcmVnaXN0ZXJzIG9yIHhzY2FsZSBhY2N1bXVsYXRvciwgd2hpY2ggaGF2ZSBkaWZmZXJlbnQgdXNhZ2UuCisrICAgICAgICogV2Ugb25seSBoYXZlIHRoZSBpbnRlbCB3aXJlbGVzcyBNTVggaGVyZSBub3cuCisrICAgICAgICogVGhlIG5hbWUgbmVlZHMgdG8gYmUgY2hhbmdlZCBmb3IgdGhlIHhzY2FsZSBhY2N1bXVsYXRvciB0b28uICovCisrICAgICAgKnNldG5hbWUgPSAiTU1YIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIG1lbWNweShuYW1lLCAid2NnciIsIDQpOworKyAgICAgIG5hbWVbNF0gPSByZWdubyAtIDEwNCArICcwJzsKKysgICAgICBuYW1lbGVuID0gNTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAxMTIgKyAwIC4uLiAxMTIgKyA5OgorKyAgICAgICpzZXRuYW1lID0gIk1NWCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgKmJpdHMgPSA2NDsKKysgICAgICBuYW1lWzBdID0gJ3cnOworKyAgICAgIG5hbWVbMV0gPSAncic7CisrICAgICAgbmFtZVsyXSA9IHJlZ25vIC0gMTEyICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDExMiArIDEwIC4uLiAxMTIgKyAxNToKKysgICAgICAqc2V0bmFtZSA9ICJNTVgiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgICpiaXRzID0gNjQ7CisrICAgICAgbmFtZVswXSA9ICd3JzsKKysgICAgICBuYW1lWzFdID0gJ3InOworKyAgICAgIG5hbWVbMl0gPSAnMSc7CisrICAgICAgbmFtZVszXSA9IHJlZ25vIC0gMTEyIC0gMTAgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDQ7CisrICAgICAgYnJlYWs7CisrCisgICAgIGNhc2UgMTI4OgorKyAgICAgICpzZXRuYW1lID0gInNwZWNpYWwiOworICAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworICAgICAgIHJldHVybiBzdHBjcHkgKG5hbWUsICJzcHNyIikgKyAxIC0gbmFtZTsKKyAKKysgICAgY2FzZSAxMjk6CisrICAgICAgKnNldG5hbWUgPSAic3BlY2lhbCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl9maXEiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDEzMDoKKysgICAgICAqc2V0bmFtZSA9ICJzcGVjaWFsIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX2lycSIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMxOgorKyAgICAgICpzZXRuYW1lID0gInNwZWNpYWwiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIHJldHVybiBzdHBjcHkobmFtZSwgInNwc3JfYWJ0IikgKyAxIC0gbmFtZTsKKysKKysgICAgY2FzZSAxMzI6CisrICAgICAgKnNldG5hbWUgPSAic3BlY2lhbCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl91bmQiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDEzMzoKKysgICAgICAqc2V0bmFtZSA9ICJzcGVjaWFsIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX3N2YyIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTQ0IC4uLiAxNTA6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF91c3IiLCByZWdubyAtIDE0NCArIDgpICsgMTsKKysKKysgICAgY2FzZSAxNTEgLi4uIDE1NzoKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX2ZpcSIsIHJlZ25vIC0gMTUxICsgOCkgKyAxOworKworKyAgICBjYXNlIDE1OCAuLi4gMTU5OgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfaXJxIiwgcmVnbm8gLSAxNTggKyAxMykgKyAxOworKworKyAgICBjYXNlIDE2MCAuLi4gMTYxOgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfYWJ0IiwgcmVnbm8gLSAxNjAgKyAxMykgKyAxOworKworKyAgICBjYXNlIDE2MiAuLi4gMTYzOgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfdW5kIiwgcmVnbm8gLSAxNjIgKyAxMykgKyAxOworKworKyAgICBjYXNlIDE2NCAuLi4gMTY1OgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfc3ZjIiwgcmVnbm8gLSAxNjQgKyAxMykgKyAxOworKworKyAgICBjYXNlIDE5MiAuLi4gMTk5OgorKyAgICAgKnNldG5hbWUgPSAiTU1YIjsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIG5hbWVbMF0gPSAndyc7CisrICAgICAgbmFtZVsxXSA9ICdjJzsKKysgICAgICBuYW1lWzJdID0gcmVnbm8gLSAxOTIgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgYnJlYWs7CisrCisgICAgIGNhc2UgMjU2ICsgMCAuLi4gMjU2ICsgOToKKysgICAgICAvKiBYWFggVE9ETzogTmVvbiBhbHNvIHVzZXMgdGhvc2UgcmVnaXN0ZXJzIGFuZCBjYW4gY29udGFpbgorKyAgICAgICAqIGJvdGggZmxvYXQgYW5kIGludGVnZXJzICovCisgICAgICAgKnNldG5hbWUgPSAiVkZQIjsKKyAgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKyAgICAgICAqYml0cyA9IDY0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2FybV9yZXR2YWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvYmFja2VuZHMvYXJtX3JldHZhbC5jCTIwMTAtMDEtMTIgMTY6NTc6NTQuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvYXJtX3JldHZhbC5jCTIwMTAtMDQtMjQgMTA6MTE6MTMuMDAwMDAwMDAwICswMDAwCitAQCAtNDUsNiArNDUsMTMgQEAKKyAjZGVmaW5lIG5sb2NfaW50cmVnCTEKKyAjZGVmaW5lIG5sb2NfaW50cmVncyhuKQkoMiAqIChuKSkKKyAKKysvKiBmMSAgKi8gLyogWFhYIFRPRE86IGYwIGNhbiBhbHNvIGhhdmUgbnVtYmVyIDk2IGlmIHByb2dyYW0gd2FzIGNvbXBpbGVkIHdpdGggLW1hYmk9YWFwY3MgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMTYgfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ZwcmVnICAxCisrCisgLyogVGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdHVyZSBhbmQgaXMgYWN0dWFsbHkgc3RvcmVkIGluIHN0YWNrIHNwYWNlCisgICAgcGFzc2VkIGluIGEgaGlkZGVuIGFyZ3VtZW50IGJ5IHRoZSBjYWxsZXIuICBCdXQsIHRoZSBjb21waWxlcgorICAgIGhlbHBmdWxseSByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoYXQgc3BhY2UgaW4gcjAuICAqLworQEAgLTU1LDggKzYyLDkgQEAKKyAjZGVmaW5lIG5sb2NfYWdncmVnYXRlIDEKKyAKKyAKKy1pbnQKKy1hcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisrc3RhdGljIGludAorK2FybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3AsCisrCQkgICAgICAgICAgICBpbnQgc29mdF9mbG9hdCkKKyB7CisgICAvKiBTdGFydCB3aXRoIHRoZSBmdW5jdGlvbidzIHR5cGUsIGFuZCBnZXQgdGhlIERXX0FUX3R5cGUgYXR0cmlidXRlLAorICAgICAgd2hpY2ggaXMgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZS4gICovCitAQCAtMTA5LDE0ICsxMTcsMzEgQEAKKyAJICBlbHNlCisgCSAgICByZXR1cm4gLTE7CisgCX0KKysgICAgICBpZiAodGFnID09IERXX1RBR19iYXNlX3R5cGUpCisrCXsKKysJICBEd2FyZl9Xb3JkIGVuY29kaW5nOworKwkgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9lbmNvZGluZywKKysJICAgICAgICAgICAgICAgICAgICAgICAmYXR0cl9tZW0pLCAmZW5jb2RpbmcpICE9IDApCisrCSAgICByZXR1cm4gLTE7CisrCisrCSAgaWYgKChlbmNvZGluZyA9PSBEV19BVEVfZmxvYXQpICYmICFzb2Z0X2Zsb2F0KQorKwkgICAgeworKwkgICAgICAqbG9jcCA9IGxvY19mcHJlZzsKKysJICAgICAgaWYgKHNpemUgPD0gOCkKKysJCXJldHVybiBubG9jX2ZwcmVnOworKwkgICAgICBnb3RvIGFnZ3JlZ2F0ZTsKKysJICAgIH0KKysJfQorICAgICAgIGlmIChzaXplIDw9IDE2KQorIAl7CisgCWludHJlZzoKKyAJICAqbG9jcCA9IGxvY19pbnRyZWc7CisgCSAgcmV0dXJuIHNpemUgPD0gNCA/IG5sb2NfaW50cmVnIDogbmxvY19pbnRyZWdzICgoc2l6ZSArIDMpIC8gNCk7CisgCX0KKysgICAgICAvKiBmYWxsIHRocm91Z2guICovCisgCisgICAgIGFnZ3JlZ2F0ZToKKysgICAgICAvKiBYWFggVE9ETyBzb21ldGltZXMgYWdncmVnYXRlcyBhcmUgcmV0dXJuZWQgaW4gcjAgKC1tYWJpPWFhcGNzKSAqLworICAgICAgICpsb2NwID0gbG9jX2FnZ3JlZ2F0ZTsKKyAgICAgICByZXR1cm4gbmxvY19hZ2dyZWdhdGU7CisgCitAQCAtMTM1LDMgKzE2MCwxOCBAQAorICAgICAgRFdBUkYgYW5kIG1pZ2h0IGJlIHZhbGlkLiAgKi8KKyAgIHJldHVybiAtMjsKKyB9CisrCisrLyogcmV0dXJuIGxvY2F0aW9uIGZvciAtbWFiaT1hcGNzLWdudSAtbXNvZnQtZmxvYXQgKi8KKytpbnQKKythcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX3NvZnQgKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICAgcmV0dXJuIGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMSk7CisrfQorKworKy8qIHJldHVybiBsb2NhdGlvbiBmb3IgLW1hYmk9YXBjcy1nbnUgLW1oYXJkLWZsb2F0IChjdXJyZW50IGRlZmF1bHQpICovCisraW50CisrYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9oYXJkIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgIHJldHVybiBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoZnVuY3R5cGVkaWUsIGxvY3AsIDApOworK30KKysKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9saWJlbGYvZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0Ni5vcmlnL2xpYmVsZi9lbGYuaAkyMDEwLTA0LTI0IDEwOjExOjExLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAkyMDEwLTA0LTI0IDEwOjExOjEzLjAwMDAwMDAwMCArMDAwMAorQEAgLTIyOTAsNiArMjI5MCw5IEBACisgI2RlZmluZSBFRl9BUk1fRUFCSV9WRVI0CTB4MDQwMDAwMDAKKyAjZGVmaW5lIEVGX0FSTV9FQUJJX1ZFUjUJMHgwNTAwMDAwMAorIAorKy8qIEVJX09TQUJJIHZhbHVlcyAqLworKyNkZWZpbmUgRUxGT1NBQklfQVJNX0FFQUJJICAgIDY0ICAgICAgLyogQ29udGFpbnMgc3ltYm9sIHZlcnNpb25pbmcuICovCisrCisgLyogQWRkaXRpb25hbCBzeW1ib2wgdHlwZXMgZm9yIFRodW1iLiAgKi8KKyAjZGVmaW5lIFNUVF9BUk1fVEZVTkMJCVNUVF9MT1BST0MgLyogQSBUaHVtYiBmdW5jdGlvbi4gICovCisgI2RlZmluZSBTVFRfQVJNXzE2QklUCQlTVFRfSElQUk9DIC8qIEEgVGh1bWIgbGFiZWwuICAqLworQEAgLTIzMDcsMTIgKzIzMTAsMTkgQEAKKyAKKyAvKiBQcm9jZXNzb3Igc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgUGhkciBwX3R5cGUgZmllbGQuICAqLworICNkZWZpbmUgUFRfQVJNX0VYSURYCQkoUFRfTE9QUk9DICsgMSkJLyogQVJNIHVud2luZCBzZWdtZW50LiAgKi8KKysjZGVmaW5lIFBUX0FSTV9VTldJTkQJCVBUX0FSTV9FWElEWAorIAorIC8qIFByb2Nlc3NvciBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoZSBTaGRyIHNoX3R5cGUgZmllbGQuICAqLworICNkZWZpbmUgU0hUX0FSTV9FWElEWAkJKFNIVF9MT1BST0MgKyAxKSAvKiBBUk0gdW53aW5kIHNlY3Rpb24uICAqLworICNkZWZpbmUgU0hUX0FSTV9QUkVFTVBUTUFQCShTSFRfTE9QUk9DICsgMikgLyogUHJlZW1wdGlvbiBkZXRhaWxzLiAgKi8KKyAjZGVmaW5lIFNIVF9BUk1fQVRUUklCVVRFUwkoU0hUX0xPUFJPQyArIDMpIC8qIEFSTSBhdHRyaWJ1dGVzIHNlY3Rpb24uICAqLworIAorKy8qIFByb2Nlc3NvciBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoZSBEeW4gZF90YWcgZmllbGQuICAqLworKyNkZWZpbmUgRFRfQVJNX1JFU0VSVkVEMQkoRFRfTE9QUk9DICsgMCkKKysjZGVmaW5lIERUX0FSTV9TWU1UQUJTWgkJKERUX0xPUFJPQyArIDEpCisrI2RlZmluZSBEVF9BUk1fUFJFRU1UTUFCCShEVF9MT1BST0MgKyAyKQorKyNkZWZpbmUgRFRfQVJNX1JFU0VSVkVEMgkoRFRfTE9QUk9DICsgMykKKysjZGVmaW5lIERUX0FSTV9OVU0JCTQKKyAKKyAvKiBBUk0gcmVsb2NzLiAgKi8KKyAKK0BAIC0yMzQ0LDEyICsyMzU0LDc1IEBACisgI2RlZmluZSBSX0FSTV9HT1RQQwkJMjUJLyogMzIgYml0IFBDIHJlbGF0aXZlIG9mZnNldCB0byBHT1QgKi8KKyAjZGVmaW5lIFJfQVJNX0dPVDMyCQkyNgkvKiAzMiBiaXQgR09UIGVudHJ5ICovCisgI2RlZmluZSBSX0FSTV9QTFQzMgkJMjcJLyogMzIgYml0IFBMVCBhZGRyZXNzICovCisrI2RlZmluZSBSX0FSTV9DQUxMCQkyOAorKyNkZWZpbmUgUl9BUk1fSlVNUDI0CQkyOQorKyNkZWZpbmUgUl9BUk1fVEhNX0pVTVAyNAkzMAorKyNkZWZpbmUgUl9BUk1fQkFTRV9BQlMJCTMxCisgI2RlZmluZSBSX0FSTV9BTFVfUENSRUxfN18wCTMyCisgI2RlZmluZSBSX0FSTV9BTFVfUENSRUxfMTVfOAkzMworICNkZWZpbmUgUl9BUk1fQUxVX1BDUkVMXzIzXzE1CTM0CisgI2RlZmluZSBSX0FSTV9MRFJfU0JSRUxfMTFfMAkzNQorICNkZWZpbmUgUl9BUk1fQUxVX1NCUkVMXzE5XzEyCTM2CisgI2RlZmluZSBSX0FSTV9BTFVfU0JSRUxfMjdfMjAJMzcKKysjZGVmaW5lIFJfQVJNX1RBUkdFVDEJCTM4CisrI2RlZmluZSBSX0FSTV9TQlJFTDMxCQkzOQorKyNkZWZpbmUgUl9BUk1fVjRCWAkJNDAKKysjZGVmaW5lIFJfQVJNX1RBUkdFVDIJCTQxCisrI2RlZmluZSBSX0FSTV9QUkVMMzEJCTQyCisrI2RlZmluZSBSX0FSTV9NT1ZXX0FCU19OQwk0MworKyNkZWZpbmUgUl9BUk1fTU9WVF9BQlMJCTQ0CisrI2RlZmluZSBSX0FSTV9NT1ZXX1BSRUxfTkMJNDUKKysjZGVmaW5lIFJfQVJNX01PVlRfUFJFTAkJNDYKKysjZGVmaW5lIFJfQVJNX1RITV9NT1ZXX0FCU19OQwk0NworKyNkZWZpbmUgUl9BUk1fVEhNX01PVlRfQUJTCTQ4CisrI2RlZmluZSBSX0FSTV9USE1fTU9WV19QUkVMX05DCTQ5CisrI2RlZmluZSBSX0FSTV9USE1fTU9WVF9QUkVMCTUwCisrI2RlZmluZSBSX0FSTV9USE1fSlVNUDE5CTUxCisrI2RlZmluZSBSX0FSTV9USE1fSlVNUDYJCTUyCisrI2RlZmluZSBSX0FSTV9USE1fQUxVX1BSRUxfMTFfMAk1MworKyNkZWZpbmUgUl9BUk1fVEhNX1BDMTIJCTU0CisrI2RlZmluZSBSX0FSTV9BQlMzMl9OT0kJCTU1CisrI2RlZmluZSBSX0FSTV9SRUwzMl9OT0kJCTU2CisrI2RlZmluZSBSX0FSTV9BTFVfUENfRzBfTkMJNTcKKysjZGVmaW5lIFJfQVJNX0FMVV9QQ19HMAkJNTgKKysjZGVmaW5lIFJfQVJNX0FMVV9QQ19HMV9OQwk1OQorKyNkZWZpbmUgUl9BUk1fQUxVX1BDX0cxCQk2MAorKyNkZWZpbmUgUl9BUk1fQUxVX1BDX0cyCQk2MQorKyNkZWZpbmUgUl9BUk1fTERSX1BDX0cxCQk2MgorKyNkZWZpbmUgUl9BUk1fTERSX1BDX0cyCQk2MworKyNkZWZpbmUgUl9BUk1fTERSU19QQ19HMAk2NAorKyNkZWZpbmUgUl9BUk1fTERSU19QQ19HMQk2NQorKyNkZWZpbmUgUl9BUk1fTERSU19QQ19HMgk2NgorKyNkZWZpbmUgUl9BUk1fTERDX1BDX0cwCQk2NworKyNkZWZpbmUgUl9BUk1fTERDX1BDX0cxCQk2OAorKyNkZWZpbmUgUl9BUk1fTERDX1BDX0cyCQk2OQorKyNkZWZpbmUgUl9BUk1fQUxVX1NCX0cwX05DCTcwCisrI2RlZmluZSBSX0FSTV9BTFVfU0JfRzAJCTcxCisrI2RlZmluZSBSX0FSTV9BTFVfU0JfRzFfTkMJNzIKKysjZGVmaW5lIFJfQVJNX0FMVV9TQl9HMQkJNzMKKysjZGVmaW5lIFJfQVJNX0FMVV9TQl9HMgkJNzQKKysjZGVmaW5lIFJfQVJNX0xEUl9TQl9HMAkJNzUKKysjZGVmaW5lIFJfQVJNX0xEUl9TQl9HMQkJNzYKKysjZGVmaW5lIFJfQVJNX0xEUl9TQl9HMgkJNzcKKysjZGVmaW5lIFJfQVJNX0xEUlNfU0JfRzAJNzgKKysjZGVmaW5lIFJfQVJNX0xEUlNfU0JfRzEJNzkKKysjZGVmaW5lIFJfQVJNX0xEUlNfU0JfRzIJODAKKysjZGVmaW5lIFJfQVJNX0xEQ19HMAkJODEKKysjZGVmaW5lIFJfQVJNX0xEQ19HMQkJODIKKysjZGVmaW5lIFJfQVJNX0xEQ19HMgkJODMKKysjZGVmaW5lIFJfQVJNX01PVldfQlJFTF9OQwk4NAorKyNkZWZpbmUgUl9BUk1fTU9WVF9CUkVMCQk4NQorKyNkZWZpbmUgUl9BUk1fTU9WV19CUkVMCQk4NgorKyNkZWZpbmUgUl9BUk1fVEhNX01PVldfQlJFTF9OQwk4NworKyNkZWZpbmUgUl9BUk1fVEhNX01PVlRfQlJFTAk4OAorKyNkZWZpbmUgUl9BUk1fVEhNX01PVldfQlJFTAk4OQorKy8qIDkwLTkzIHVuYWxsb2NhdGVkICovCisrI2RlZmluZSBSX0FSTV9QTFQzMl9BQlMJCTk0CisrI2RlZmluZSBSX0FSTV9HT1RfQUJTCQk5NQorKyNkZWZpbmUgUl9BUk1fR09UX1BSRUwJCTk2CisrI2RlZmluZSBSX0FSTV9HT1RfQlJFTDEyCTk3CisrI2RlZmluZSBSX0FSTV9HT1RPRkYxMgkJOTgKKysjZGVmaW5lIFJfQVJNX0dPVFJFTEFYCQk5OQorICNkZWZpbmUgUl9BUk1fR05VX1ZURU5UUlkJMTAwCisgI2RlZmluZSBSX0FSTV9HTlVfVlRJTkhFUklUCTEwMQorICNkZWZpbmUgUl9BUk1fVEhNX1BDMTEJCTEwMgkvKiB0aHVtYiB1bmNvbmRpdGlvbmFsIGJyYW5jaCAqLworQEAgLTIzNjQsNiArMjQzNywxMiBAQAorIAkJCQkJICAgc3RhdGljIFRMUyBibG9jayBvZmZzZXQgKi8KKyAjZGVmaW5lIFJfQVJNX1RMU19MRTMyCQkxMDgJLyogMzIgYml0IG9mZnNldCByZWxhdGl2ZSB0byBzdGF0aWMKKyAJCQkJCSAgIFRMUyBibG9jayAqLworKyNkZWZpbmUgUl9BUk1fVExTX0xETzEyCQkxMDkKKysjZGVmaW5lIFJfQVJNX1RMU19MRTEyCQkxMTAKKysjZGVmaW5lIFJfQVJNX1RMU19JRTEyR1AJMTExCisrLyogMTEyIC0gMTI3IHByaXZhdGUgcmFuZ2UgKi8KKysjZGVmaW5lIFJfQVJNX01FX1RPTwkJMTI4CS8qIG9ic29sZXRlICovCisrCisgI2RlZmluZSBSX0FSTV9SWFBDMjUJCTI0OQorICNkZWZpbmUgUl9BUk1fUlNCUkVMMzIJCTI1MAorICNkZWZpbmUgUl9BUk1fVEhNX1JQQzIyCQkyNTEKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9saWJlYmxfYXJtLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9saWJlYmxfYXJtLmgJMjAxMC0wNC0yNCAxMDoxMToxMy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsOSBAQAorKyNpZm5kZWYgX0xJQkVCTF9BUk1fSAorKyNkZWZpbmUgX0xJQkVCTF9BUk1fSCAxCisrCisrI2luY2x1ZGUgPGxpYmR3Lmg+CisrCisrZXh0ZXJuIGludCBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX3NvZnQoRHdhcmZfRGllICosIGNvbnN0IER3YXJmX09wICoqbG9jcCk7CisrZXh0ZXJuIGludCBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX2hhcmQoRHdhcmZfRGllICosIGNvbnN0IER3YXJmX09wICoqbG9jcCk7CisrCisrI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZfYWRkaXRpb25zLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZfYWRkaXRpb25zLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJhYTcwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2VsZl9hZGRpdGlvbnMuZGlmZgpAQCAtMCwwICsxLDcxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9saWJlbGYvZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0Ni5vcmlnL2xpYmVsZi9lbGYuaAkyMDEwLTA0LTI0IDEwOjEzOjUwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAkyMDEwLTA0LTI0IDEwOjIyOjQzLjAwMDAwMDAwMCArMDAwMAorQEAgLTE0Myw2ICsxNDMsNyBAQAorICNkZWZpbmUgRUxGT1NBQklfSFBVWAkJMQkvKiBIUC1VWCAqLworICNkZWZpbmUgRUxGT1NBQklfTkVUQlNECQkyCS8qIE5ldEJTRC4gICovCisgI2RlZmluZSBFTEZPU0FCSV9MSU5VWAkJMwkvKiBMaW51eC4gICovCisrI2RlZmluZSBFTEZPU0FCSV9IVVJECQk0CS8qIEdOVS9IdXJkICovCisgI2RlZmluZSBFTEZPU0FCSV9TT0xBUklTCTYJLyogU3VuIFNvbGFyaXMuICAqLworICNkZWZpbmUgRUxGT1NBQklfQUlYCQk3CS8qIElCTSBBSVguICAqLworICNkZWZpbmUgRUxGT1NBQklfSVJJWAkJOAkvKiBTR0kgSXJpeC4gICovCitAQCAtMTUwLDggKzE1MSwxMyBAQAorICNkZWZpbmUgRUxGT1NBQklfVFJVNjQJCTEwCS8qIENvbXBhcSBUUlU2NCBVTklYLiAgKi8KKyAjZGVmaW5lIEVMRk9TQUJJX01PREVTVE8JMTEJLyogTm92ZWxsIE1vZGVzdG8uICAqLworICNkZWZpbmUgRUxGT1NBQklfT1BFTkJTRAkxMgkvKiBPcGVuQlNELiAgKi8KKysjZGVmaW5lIEVMRk9TQUJJX09QRU5WTVMJMTMJLyogT3BlblZNUyAqLworKyNkZWZpbmUgRUxGT1NBQklfTlNLCQkxNAkvKiBIZXdsZXR0LVBhY2thcmQgTm9uLVN0b3AgS2VybmVsICovCisrI2RlZmluZSBFTEZPU0FCSV9BUk9TCQkxNQkvKiBBbWlnYSBSZXNlYXJjaCBPUyAqLworKy8qIDY0LTI1NSBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgdmFsdWUgcmFuZ2UgKi8KKyAjZGVmaW5lIEVMRk9TQUJJX0FSTV9BRUFCSQk2NAkvKiBBUk0gRUFCSSAqLworICNkZWZpbmUgRUxGT1NBQklfQVJNCQk5NwkvKiBBUk0gKi8KKysvKiBUaGlzIGlzIGRlcHJlY2F0ZWQ/IEl0J3Mgbm90IGluIHRoZSBsYXRlc3QgdmVyc2lvbiBhbnltb3JlLiAqLworICNkZWZpbmUgRUxGT1NBQklfU1RBTkRBTE9ORQkyNTUJLyogU3RhbmRhbG9uZSAoZW1iZWRkZWQpIGFwcGxpY2F0aW9uICovCisgCisgI2RlZmluZSBFSV9BQklWRVJTSU9OCTgJCS8qIEFCSSB2ZXJzaW9uICovCitAQCAtMjA2LDcgKzIxMiw3IEBACisgI2RlZmluZSBFTV9IOF8zMDBICTQ3CQkvKiBIaXRhY2hpIEg4LzMwMEggKi8KKyAjZGVmaW5lIEVNX0g4UwkJNDgJCS8qIEhpdGFjaGkgSDhTICovCisgI2RlZmluZSBFTV9IOF81MDAJNDkJCS8qIEhpdGFjaGkgSDgvNTAwICovCistI2RlZmluZSBFTV9JQV82NAk1MAkJLyogSW50ZWwgTWVyY2VkICovCisrI2RlZmluZSBFTV9JQV82NAk1MAkJLyogSW50ZWwgSUE2NCAqLworICNkZWZpbmUgRU1fTUlQU19YCTUxCQkvKiBTdGFuZm9yZCBNSVBTLVggKi8KKyAjZGVmaW5lIEVNX0NPTERGSVJFCTUyCQkvKiBNb3Rvcm9sYSBDb2xkZmlyZSAqLworICNkZWZpbmUgRU1fNjhIQzEyCTUzCQkvKiBNb3Rvcm9sYSBNNjhIQzEyICovCitAQCAtMjIwLDcgKzIyNiw4IEBACisgI2RlZmluZSBFTV9USU5ZSgk2MQkJLyogQWR2YW5jZWQgTG9naWMgQ29ycC4gVGlueWogZW1iLmZhbSovCisgI2RlZmluZSBFTV9YODZfNjQJNjIJCS8qIEFNRCB4ODYtNjQgYXJjaGl0ZWN0dXJlICovCisgI2RlZmluZSBFTV9QRFNQCQk2MwkJLyogU29ueSBEU1AgUHJvY2Vzc29yICovCistCisrI2RlZmluZQlFTV9QRFAxMAk2NAkJLyogRGlnaXRhbCBFcXVpcG1lbnQgQ29ycC4gUERQLTEwICovCisrI2RlZmluZSBFTV9QRFAxMQk2NQkJLyogRGlnaXRhbCBFcXVpcG1lbnQgQ29ycC4gUERQLTExICovCisgI2RlZmluZSBFTV9GWDY2CQk2NgkJLyogU2llbWVucyBGWDY2IG1pY3JvY29udHJvbGxlciAqLworICNkZWZpbmUgRU1fU1Q5UExVUwk2NwkJLyogU1RNaWNyb2VsZWN0cm9uaWNzIFNUOSsgOC8xNiBtYyAqLworICNkZWZpbmUgRU1fU1Q3CQk2OAkJLyogU1RtaWNyb2VsZWN0cm9uaWNzIFNUNyA4IGJpdCBtYyAqLworQEAgLTI1MCw3ICsyNTcsMjIgQEAKKyAjZGVmaW5lIEVNX09QRU5SSVNDCTkyCQkvKiBPcGVuUklTQyAzMi1iaXQgZW1iZWRkZWQgcHJvY2Vzc29yICovCisgI2RlZmluZSBFTV9BUkNfQTUJOTMJCS8qIEFSQyBDb3JlcyBUYW5nZW50LUE1ICovCisgI2RlZmluZSBFTV9YVEVOU0EJOTQJCS8qIFRlbnNpbGljYSBYdGVuc2EgQXJjaGl0ZWN0dXJlICovCistI2RlZmluZSBFTV9OVU0JCTk1CisrI2RlZmluZQlFTV9WSURFT0NPUkUJOTUJCS8qIEFscGhhbW9zYWljIFZpZGVvQ29yZSBwcm9jZXNzb3IgKi8KKysjZGVmaW5lCUVNX1RNTV9HUFAJOTYJCS8qIFRob21wc29uIE11bHRpbWVkaWEgR2VuZXJhbCBQdXJwb3NlIFByb2Nlc3NvciAqLworKyNkZWZpbmUJRU1fTlMzMksJOTcJCS8qIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgMzIwMDAgc2VyaWVzICovCisrI2RlZmluZQlFTV9UUEMJCTk4CQkvKiBUZW5vciBOZXR3b3JrIFRQQyBwcm9jZXNzb3IgKi8KKysjZGVmaW5lCUVNX1NOUDFLCTk5CQkvKiBUcmViaWEgU05QIDEwMDAgcHJvY2Vzc29yICovCisrI2RlZmluZQlFTV9TVDIwMAkxMDAJCS8qIFNUTWljcm9lbGVjdHJvbmljcyAod3d3LnN0LmNvbSkgU1QyMDAgbWljcm9jb250cm9sbGVyICovCisrI2RlZmluZSBFTV9JUDJLICAgICAgICAgMTAxCQkvKiBVYmljb20gSVAyWFhYIG1pY3JvY29udHJvbGxlciBmYW1pbHkgKi8KKysjZGVmaW5lCUVNX01BWAkJMTAyCQkvKiBNQVggUHJvY2Vzc29yICovCisrI2RlZmluZSBFTV9DUiAgICAgICAgICAgMTAzCQkvKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIENvbXBhY3RSSVNDICovCisrI2RlZmluZQlFTV9GMk1DMTYJMTA0CQkvKiBGdWppdHN1IEYyTUMxNiAqLworKyNkZWZpbmUgRU1fTVNQNDMwICAgICAgIDEwNQkJLyogVEkgbXNwNDMwIG1pY3JvIGNvbnRyb2xsZXIgKi8KKysjZGVmaW5lIEVNX0JMQUNLRklOICAgICAxMDYJCS8qIEFuYWxvZyBEZXZpY2VzIEJsYWNrZmluIChEU1ApIHByb2Nlc3NvciAqLworKyNkZWZpbmUgRU1fU0VfQzMzCTEwNwkJLyogUzFDMzMgRmFtaWx5IG9mIFNlaWtvIEVwc29uIHByb2Nlc3NvcnMgKi8KKysjZGVmaW5lCUVNX1NFUAkJMTA4CQkvKiBTaGFycCBlbWJlZGRlZCBtaWNyb3Byb2Nlc3NvciAqLworKyNkZWZpbmUgRU1fQVJDQQkJMTA5CQkvKiBBcmNhIFJJU0MgTWljcm9wcm9jZXNzb3IgKi8KKysjZGVmaW5lIEVNX05VTQkJMTEwCisgCisgLyogSWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGFzc2lnbiBuZXcgdW5vZmZpY2lhbCBFTV8qIHZhbHVlcywgcGxlYXNlCisgICAgcGljayBsYXJnZSByYW5kb20gbnVtYmVycyAoMHg4NTIzLCAweGE3ZjIsIGV0Yy4pIHRvIG1pbmltaXplIHRoZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2JlZ2luLmMtQ1ZFLTIwMTQtOTQ0Ny1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZfYmVnaW4uYy1DVkUtMjAxNC05NDQ3LWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGU4ZGRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2JlZ2luLmMtQ1ZFLTIwMTQtOTQ0Ny1maXgucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRnJvbSAzMjNjYTA0YTBjOTE4OTU0NDA3NWMxOWI0OWRhNjdmNjQ0M2E4OTUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGkgeGluIDxsaXhpbi5mbnN0QGNuLmZ1aml0c3UuY29tPgorRGF0ZTogV2VkLCAyMSBKYW4gMjAxNSAwOTozMzozOCArMDkwMAorU3ViamVjdDogW1BBVENIXSBlbGZfYmVnaW4uYzogQ1ZFLTIwMTQtOTQ0NyBmaXgKKwordGhpcyBwYXRjaCBpcyBmcm9tOgorIGh0dHBzOi8vZ2l0LmZlZG9yYWhvc3RlZC5vcmcvY2dpdC9lbGZ1dGlscy5naXQvY29tbWl0Lz9pZD0xNDcwMThlNzI5ZTdjMjJlZWFiZjE1YjgyZDI2ZTRiZjY4YTBkMThlCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTGkgWGluIDxsaXhpbi5mbnN0QGNuLmZ1aml0c3UuY29tPgorLS0tCisgbGliZWxmL2VsZl9iZWdpbi5jIHwgNyArKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmVsZi9lbGZfYmVnaW4uYyBiL2xpYmVsZi9lbGZfYmVnaW4uYworaW5kZXggZTQ2YWRkMy4uZTgzYmEzNSAxMDA2NDQKKy0tLSBhL2xpYmVsZi9lbGZfYmVnaW4uYworKysrIGIvbGliZWxmL2VsZl9iZWdpbi5jCitAQCAtNzM2LDExICs3MzYsOCBAQCByZWFkX2xvbmdfbmFtZXMgKEVsZiAqZWxmKQorIAkgICAgYnJlYWs7CisgCisgCSAgLyogTlVMLXRlcm1pbmF0ZSB0aGUgc3RyaW5nLiAgKi8KKy0JICAqcnVucCA9ICdcMCc7CistCistCSAgLyogU2tpcCB0aGUgTlVMIGJ5dGUgYW5kIHRoZSBcMDEyLiAgKi8KKy0JICBydW5wICs9IDI7CistCisrCSAgKnJ1bnArKyA9ICdcMCc7CisrIAorIAkgIC8qIEEgc2FuaXR5IGNoZWNrLiAgU29tZWJvZHkgbWlnaHQgaGF2ZSBnZW5lcmF0ZWQgaW52YWxpZAorIAkgICAgIGFyY2hpdmUuICAqLworIAkgIGlmIChydW5wID49IG5ld3AgKyBsZW4pCistLSAKKzEuOC40LjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtYXItYy1maXgtbnVtLXBhc3NlZC10by1tZW1zZXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZ1dGlscy1hci1jLWZpeC1udW0tcGFzc2VkLXRvLW1lbXNldC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjE5NjE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtYXItYy1maXgtbnVtLXBhc3NlZC10by1tZW1zZXQucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCithci5jIChkb19vcGVyX2RlbGV0ZSk6IEZpeCBudW0gcGFzc2VkIHRvIG1lbXNldAorbmF0aXZlIGJ1aWxkIGZhaWxlZCBhcyBmb2xsb3dpbmcgb24gRmVkb3JhMTgrOiAKK2FyLmM6IEluIGZ1bmN0aW9uICdkb19vcGVyX2RlbGV0ZSc6Cithci5jOjkxODozMTogZXJyb3I6IGFyZ3VtZW50IHRvICdzaXplb2YnIGluICdtZW1zZXQnIGNhbGwgaXMgdGhlIHNhbWUgZXhwcmVzc2lvbiBhcyB0aGUgZGVzdGluYXRpb247IGRpZCB5b3UgbWVhbiB0byBkZXJlZmVyZW5jZSBpdD8gWy1XZXJyb3I9c2l6ZW9mLXBvaW50ZXItbWVtYWNjZXNzXQorICAgbWVtc2V0IChmb3VuZCwgJ1wwJywgc2l6ZW9mIChmb3VuZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitUaGUgb3JpZ2luYWwgY29tbWl0IGlzIGh0dHA6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9jZ2l0L2VsZnV0aWxzLmdpdC9jb21taXQvc3JjL2FyLmM/aWQ9MWE0ZDA2NjhkMThiZjEwOTBjNWMwOGNkYjVjYjNiYTJiOGViNTQxMAorCitTaWduZWQtb2ZmLWJ5OiBaaGVuaHVhIEx1byA8emhlbmh1YS5sdW9AZnJlZXNjYWxlLmNvbT4KKworLS0tIGVsZnV0aWxzLTAuMTQ4L3NyYy9hci5jLm9yZwkyMDEzLTAzLTEyIDIxOjEyOjE3LjkyODI4MTM3NSAtMDUwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9hci5jCTIwMTMtMDMtMTIgMjE6MTU6MzAuMDUzMjg1MjcxIC0wNTAwCitAQCAtOTE1LDcgKzkxNSw3IEBACisgCQlsb25nIGludCBpbnN0YW5jZSkKKyB7CisgICBib29sICpmb3VuZCA9IGFsbG9jYSAoc2l6ZW9mIChib29sKSAqIGFyZ2MpOworLSAgbWVtc2V0IChmb3VuZCwgJ1wwJywgc2l6ZW9mIChmb3VuZCkpOworKyAgbWVtc2V0IChmb3VuZCwgJ1wwJywgc2l6ZW9mIChib29sKSAqIGFyZ2MpOworIAorICAgLyogTGlzdCBvZiB0aGUgZmlsZXMgd2Uga2VlcC4gICovCisgICBzdHJ1Y3QgYXJtZW0gKnRvX2NvcHkgPSBOVUxMOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtZnNpemUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZ1dGlscy1mc2l6ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmYzNTNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtZnNpemUucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitUaGUgRUxGX1RfTElCIGFuZCBFTEZfVF9HTlVIQVNIIHNpemVzIHdlcmUgbWlzc2luZyBmcm9tIGZzaXplIHRhYmxlLgorCitUaGlzIGNvdWxkIGNhdXNlIGEgZmFpbHVyZSBpbiB0aGUgZWxmKl94bGF0ZXRvZiBmdW5jdGlvbi4KKworZGlmZiAtdXIgZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZXh0dHlwZXMuaCBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZXh0dHlwZXMuaAorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2V4dHR5cGVzLmgJMjAwOS0wMS0wOCAxMjo1NjozNy4wMDAwMDAwMDAgLTA4MDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZXh0dHlwZXMuaAkyMDEwLTA4LTE4IDE0OjAwOjMzLjAwMDAwMDAwMCAtMDcwMAorQEAgLTk0LDYgKzk0LDcgQEAKKyBWZXJuYXV4MzIgKEV4dF8pOworIFN5bWluZm8zMiAoRXh0Xyk7CisgTW92ZTMyIChFeHRfKTsKKytMaWIzMiAoRXh0Xyk7CisgYXV4dl90MzIgKEV4dF8pOworIAorIEVoZHI2NCAoRXh0Xyk7CitAQCAtMTEwLDYgKzExMSw3IEBACisgVmVybmF1eDY0IChFeHRfKTsKKyBTeW1pbmZvNjQgKEV4dF8pOworIE1vdmU2NCAoRXh0Xyk7CisrTGliNjQgKEV4dF8pOworIGF1eHZfdDY0IChFeHRfKTsKKyAKKyAjdW5kZWYgU1RBUlQKK2RpZmYgLXVyIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfZnNpemUuYyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9mc2l6ZS5jCistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9mc2l6ZS5jCTIwMDktMDEtMDggMTI6NTY6MzcuMDAwMDAwMDAwIC0wODAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZnNpemUuYwkyMDEwLTA4LTE4IDE0OjExOjU3LjAwMDAwMDAwMCAtMDcwMAorQEAgLTg3LDcgKzg3LDkgQEAKKyAgICAgICBbRUxGX1RfTkhEUl0JPSBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsIEV4dF9OaGRyKSksCQkgICAgICBcCisgICAgICAgW0VMRl9UX1NZTUlORk9dCT0gc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLCBFeHRfU3ltaW5mbykpLAkgICAgICBcCisgICAgICAgW0VMRl9UX01PVkVdCT0gc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLCBFeHRfTW92ZSkpLAkJICAgICAgXAorLSAgICAgIFtFTEZfVF9BVVhWXQk9IHNpemVvZiAoRWxmVzIoTElCRUxGQklUUywgRXh0X2F1eHZfdCkpCisrICAgICAgW0VMRl9UX0xJQl0JPSBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsIEV4dF9MaWIpKSwJCSAgICAgIFwKKysgICAgICBbRUxGX1RfQVVYVl0JPSBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsIEV4dF9hdXh2X3QpKSwJICAgICAgXAorKyAgICAgIFtFTEZfVF9HTlVIQVNIXQk9IEVMRlcyKExJQkVMRkJJVFMsIEZTWl9XT1JEKQorICAgICAgIFRZUEVfU0laRVMgKDMyKQorICAgICB9LAorICAgICBbRUxGQ0xBU1M2NCAtIDFdID0gewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4LWJ1aWxkLWdjYy00LjgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9maXgtYnVpbGQtZ2NjLTQuOC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTI4NjkwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4LWJ1aWxkLWdjYy00LjgucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorVGhpcyBwYXRjaCBmaXhlcyBhIHdhcm5pbmcgc2VlbiB3aXRoIGdjYyA0LjggKGVzcGVjaWFsbHkgb24gdWJ1bnR1IDEzLjEwKQorCit8IGFkZHIybGluZS5jOiBJbiBmdW5jdGlvbiAnaGFuZGxlX2FkZHJlc3MnOgorfCBhZGRyMmxpbmUuYzo0NTA6NzogZXJyb3I6IGZvcm1hdCAnJWEnIGV4cGVjdHMgYXJndW1lbnQgb2YgdHlwZSAnZmxvYXQgKicsIGJ1dCBhcmd1bWVudCAzIGhhcyB0eXBlICdjaGFyICoqJyBbLVdlcnJvcj1mb3JtYXQ9XQorfCAgICAgICAgaWYgKHNzY2FuZiAoc3RyaW5nLCAiKCVhW14pXSklIiBQUklpTUFYICIlbiIsICZuYW1lLCAmYWRkciwgJmkpID09IDIKK3wgICAgICAgIF4KK3wgYWRkcjJsaW5lLmM6NDUzOjc6IGVycm9yOiBmb3JtYXQgJyVhJyBleHBlY3RzIGFyZ3VtZW50IG9mIHR5cGUgJ2Zsb2F0IConLCBidXQgYXJndW1lbnQgMyBoYXMgdHlwZSAnY2hhciAqKicgWy1XZXJyb3I9Zm9ybWF0PV0KK3wgICAgICAgIHN3aXRjaCAoc3NjYW5mIChzdHJpbmcsICIlYVteLStdJW4lIiBQUklpTUFYICIlbiIsICZuYW1lLCAmaSwgJmFkZHIsICZqKSkKK3wgICAgICAgIF4KK3wgY2MxOiBhbGwgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKKworCislYSBpcyBvbGQgR05VIHN0eWxlIGFuZCBzaG91bGQgYmUgYWJhbmRvbmVkIGluIGZhdm9yIG9mICVtCisKK0Fsc28gc2VlCisKK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTQzNjEKKwordG8gc3VwcG9ydCB0aGlzIGFzc2VydGlvbgorCitUaGlzIHBhdGNoIGlzIGFkZGVkIHZpYSByZWRoYXQtY29tcGF0aWJpbGl0eSBwYXRjaCBzbyBsZXRzIHJldmVydCB0aGlzIHBhcnQKK2hlcmUuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbQ2F1c2VkIGJ5IGFuIGVhcmxpZXIgcGF0Y2hdCisKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvYWRkcjJsaW5lLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9hZGRyMmxpbmUuYwkyMDEzLTA5LTIzIDE3OjQ2OjQ1LjUxMzU4NjUzOCAtMDcwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9hZGRyMmxpbmUuYwkyMDEzLTA5LTIzIDE3OjQ2OjQ2LjMyOTU4NjU1OCAtMDcwMAorQEAgLTQ0NywxMCArNDQ3LDEwIEBACisgICAgICAgYm9vbCBwYXJzZWQgPSBmYWxzZTsKKyAgICAgICBpbnQgaSwgajsKKyAgICAgICBjaGFyICpuYW1lID0gTlVMTDsKKy0gICAgICBpZiAoc3NjYW5mIChzdHJpbmcsICIoJWFbXildKSUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZhZGRyLCAmaSkgPT0gMgorKyAgICAgIGlmIChzc2NhbmYgKHN0cmluZywgIiglbVteKV0pJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmFkZHIsICZpKSA9PSAyCisgCSAgJiYgc3RyaW5nW2ldID09ICdcMCcpCisgCXBhcnNlZCA9IGFkanVzdF90b19zZWN0aW9uIChuYW1lLCAmYWRkciwgZHdmbCk7CistICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVhW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorKyAgICAgIHN3aXRjaCAoc3NjYW5mIChzdHJpbmcsICIlbVteLStdJW4lIiBQUklpTUFYICIlbiIsICZuYW1lLCAmaSwgJmFkZHIsICZqKSkKKyAJeworIAlkZWZhdWx0OgorIAkgIGJyZWFrOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3Rlc3RzL2xpbmUyYWRkci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy90ZXN0cy9saW5lMmFkZHIuYwkyMDEzLTA5LTIzIDE3OjQ2OjQ1LjUyMTU4NjUzOCAtMDcwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3Rlc3RzL2xpbmUyYWRkci5jCTIwMTMtMDktMjMgMTc6NDY6NDYuMzI5NTg2NTU4IC0wNzAwCitAQCAtMTMyLDcgKzEzMiw3IEBACisgICAgIHsKKyAgICAgICBzdHJ1Y3QgYXJncyBhID0geyAuYXJnID0gYXJndltjbnRdIH07CisgCistICAgICAgc3dpdGNoIChzc2NhbmYgKGEuYXJnLCAiJWFbXjpdOiVkIiwgJmEuZmlsZSwgJmEubGluZSkpCisrICAgICAgc3dpdGNoIChzc2NhbmYgKGEuYXJnLCAiJW1bXjpdOiVkIiwgJmEuZmlsZSwgJmEubGluZSkpCisgCXsKKyAJZGVmYXVsdDoKKyAJY2FzZSAwOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4X2Zvcl9nY2MtNC43LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4X2Zvcl9nY2MtNC43LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNjM0YjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9maXhfZm9yX2djYy00LjcucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBwZW5kaW5nCitnY2MgNC43IGRvZXMgbm90IGxpa2UgcG9pbnRlciBjb252ZXJzaW9uLCBzbyBoYXZlIGEgdm9pZCAqIHRtcCB2YXIgdG8gd29yayAKK2Fyb3VuZCBmb2xsb3dpbmcgY29tcGlsYXRpb24gaXNzdWUuCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDExLzA3LzA3CisKK3wgbWQ1LmM6IEluIGZ1bmN0aW9uICdtZDVfZmluaXNoX2N0eCc6Cit8IG1kNS5jOjEwODozOiBlcnJvcjogZGVyZWZlcmVuY2luZyB0eXBlLXB1bm5lZCBwb2ludGVyIHdpbGwgYnJlYWsgc3RyaWN0LWFsaWFzaW5nIHJ1bGVzIFstV2Vycm9yPXN0cmljdC1hbGlhc2luZ10KK3wgbWQ1LmM6MTA5OjM6IGVycm9yOiBkZXJlZmVyZW5jaW5nIHR5cGUtcHVubmVkIHBvaW50ZXIgd2lsbCBicmVhayBzdHJpY3QtYWxpYXNpbmcgcnVsZXMgWy1XZXJyb3I9c3RyaWN0LWFsaWFzaW5nXQorfCBjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworfCAKK3wgbWFrZVsyXTogKioqIFttZDUub10gRXJyb3IgMQorfCBtYWtlWzJdOiAqKiogV2FpdGluZyBmb3IgdW5maW5pc2hlZCBqb2JzLi4uLgorfCBzaGExLmM6IEluIGZ1bmN0aW9uICdzaGExX2ZpbmlzaF9jdHgnOgorfCBzaGExLmM6MTA5OjM6IGVycm9yOiBkZXJlZmVyZW5jaW5nIHR5cGUtcHVubmVkIHBvaW50ZXIgd2lsbCBicmVhayBzdHJpY3QtYWxpYXNpbmcgcnVsZXMgWy1XZXJyb3I9c3RyaWN0LWFsaWFzaW5nXQorfCBzaGExLmM6MTExOjM6IGVycm9yOiBkZXJlZmVyZW5jaW5nIHR5cGUtcHVubmVkIHBvaW50ZXIgd2lsbCBicmVhayBzdHJpY3QtYWxpYXNpbmcgcnVsZXMgWy1XZXJyb3I9c3RyaWN0LWFsaWFzaW5nXQorfCBjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworfCAKK3wgbWFrZVsyXTogKioqIFtzaGExLm9dIEVycm9yIDEKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYi9tZDUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliL21kNS5jCisrKysgZWxmdXRpbHMtMC4xNDgvbGliL21kNS5jCitAQCAtOTUsNiArOTUsNyBAQCBtZDVfZmluaXNoX2N0eCAoY3R4LCByZXNidWYpCisgICAvKiBUYWtlIHlldCB1bnByb2Nlc3NlZCBieXRlcyBpbnRvIGFjY291bnQuICAqLworICAgbWQ1X3VpbnQzMiBieXRlcyA9IGN0eC0+YnVmbGVuOworICAgc2l6ZV90IHBhZDsKKysgIHZvaWQgKiB0bXA7CisgCisgICAvKiBOb3cgY291bnQgcmVtYWluaW5nIGJ5dGVzLiAgKi8KKyAgIGN0eC0+dG90YWxbMF0gKz0gYnl0ZXM7CitAQCAtMTA1LDkgKzEwNiwxMCBAQCBtZDVfZmluaXNoX2N0eCAoY3R4LCByZXNidWYpCisgICBtZW1jcHkgKCZjdHgtPmJ1ZmZlcltieXRlc10sIGZpbGxidWYsIHBhZCk7CisgCisgICAvKiBQdXQgdGhlIDY0LWJpdCBmaWxlIGxlbmd0aCBpbiAqYml0cyogYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiAgKi8KKy0gICoobWQ1X3VpbnQzMiAqKSAmY3R4LT5idWZmZXJbYnl0ZXMgKyBwYWRdID0gU1dBUCAoY3R4LT50b3RhbFswXSA8PCAzKTsKKy0gICoobWQ1X3VpbnQzMiAqKSAmY3R4LT5idWZmZXJbYnl0ZXMgKyBwYWQgKyA0XSA9IFNXQVAgKChjdHgtPnRvdGFsWzFdIDw8IDMpIHwKKy0JCQkJCQkJKGN0eC0+dG90YWxbMF0gPj4gMjkpKTsKKysgIHRtcCA9ICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZF07CisrICAqKG1kNV91aW50MzIgKikgdG1wID0gU1dBUCAoY3R4LT50b3RhbFswXSA8PCAzKTsKKysgIHRtcCA9ICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZCArIDRdOworKyAgKihtZDVfdWludDMyICopIHRtcCA9IFNXQVAgKChjdHgtPnRvdGFsWzFdIDw8IDMpIHwgKGN0eC0+dG90YWxbMF0gPj4gMjkpKTsKKyAKKyAgIC8qIFByb2Nlc3MgbGFzdCBieXRlcy4gICovCisgICBtZDVfcHJvY2Vzc19ibG9jayAoY3R4LT5idWZmZXIsIGJ5dGVzICsgcGFkICsgOCwgY3R4KTsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWIvc2hhMS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWIvc2hhMS5jCisrKysgZWxmdXRpbHMtMC4xNDgvbGliL3NoYTEuYworQEAgLTk2LDYgKzk2LDcgQEAgc2hhMV9maW5pc2hfY3R4IChjdHgsIHJlc2J1ZikKKyAgIC8qIFRha2UgeWV0IHVucHJvY2Vzc2VkIGJ5dGVzIGludG8gYWNjb3VudC4gICovCisgICBzaGExX3VpbnQzMiBieXRlcyA9IGN0eC0+YnVmbGVuOworICAgc2l6ZV90IHBhZDsKKysgIHZvaWQgKiB0bXA7CisgCisgICAvKiBOb3cgY291bnQgcmVtYWluaW5nIGJ5dGVzLiAgKi8KKyAgIGN0eC0+dG90YWxbMF0gKz0gYnl0ZXM7CitAQCAtMTA2LDkgKzEwNywxMCBAQCBzaGExX2ZpbmlzaF9jdHggKGN0eCwgcmVzYnVmKQorICAgbWVtY3B5ICgmY3R4LT5idWZmZXJbYnl0ZXNdLCBmaWxsYnVmLCBwYWQpOworIAorICAgLyogUHV0IHRoZSA2NC1iaXQgZmlsZSBsZW5ndGggaW4gKmJpdHMqIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gICovCistICAqKHNoYTFfdWludDMyICopICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZF0gPSBTV0FQICgoY3R4LT50b3RhbFsxXSA8PCAzKSB8CistCQkJCQkJICAgICAoY3R4LT50b3RhbFswXSA+PiAyOSkpOworLSAgKihzaGExX3VpbnQzMiAqKSAmY3R4LT5idWZmZXJbYnl0ZXMgKyBwYWQgKyA0XSA9IFNXQVAgKGN0eC0+dG90YWxbMF0gPDwgMyk7CisrICB0bXAgPSAmY3R4LT5idWZmZXJbYnl0ZXMgKyBwYWRdOworKyAgKihzaGExX3VpbnQzMiAqKSB0bXAgPSBTV0FQICgoY3R4LT50b3RhbFsxXSA8PCAzKSB8IChjdHgtPnRvdGFsWzBdID4+IDI5KSk7CisrICB0bXAgPSAmY3R4LT5idWZmZXJbYnl0ZXMgKyBwYWQgKyA0XTsKKysgICooc2hhMV91aW50MzIgKikgdG1wID0gU1dBUCAoY3R4LT50b3RhbFswXSA8PCAzKTsKKyAKKyAgIC8qIFByb2Nlc3MgbGFzdCBieXRlcy4gICovCisgICBzaGExX3Byb2Nlc3NfYmxvY2sgKGN0eC0+YnVmZmVyLCBieXRlcyArIHBhZCArIDgsIGN0eCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ocHBhX2JhY2tlbmQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2hwcGFfYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NmI5N2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ocHBhX2JhY2tlbmQuZGlmZgpAQCAtMCwwICsxLDgwMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX2luaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19pbml0LmMJMjAxMC0wNC0yNCAxMDoxMDo1MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNzQgQEAKKysvKiBJbml0aWFsaXphdGlvbiBvZiBQQS1SSVNDIHNwZWNpZmljIGJhY2tlbmQgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMi4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNkZWZpbmUgQkFDS0VORAkJcGFyaXNjXworKyNkZWZpbmUgUkVMT0NfUFJFRklYCVJfUEFSSVNDXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrI2luY2x1ZGUgImxpYmVibF9wYXJpc2MuaCIKKysKKysvKiBUaGlzIGRlZmluZXMgdGhlIGNvbW1vbiByZWxvYyBob29rcyBiYXNlZCBvbiBwYXJpc2NfcmVsb2MuZGVmLiAgKi8KKysjaW5jbHVkZSAiY29tbW9uLXJlbG9jLmMiCisrCisrCisrY29uc3QgY2hhciAqCisrcGFyaXNjX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorKyAgICAgRWxmICplbGYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgRWJsICplaDsKKysgICAgIHNpemVfdCBlaGxlbjsKKyt7CisrICBpbnQgcGE2NCA9IDA7CisrCisrICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKysgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBpZiAoZWxmKSB7CisrICAgIEdFbGZfRWhkciBlaGRyX21lbTsKKysgICAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlbGYsICZlaGRyX21lbSk7CisrICAgIGlmIChlaGRyICYmIChlaGRyLT5lX2ZsYWdzICYgRUZfUEFSSVNDX1dJREUpKQorKyAgICAgIHBhNjQgPSAxOworKyAgfQorKyAgLyogV2UgaGFuZGxlIGl0LiAgKi8KKysgIGVoLT5uYW1lID0gIlBBLVJJU0MiOworKyAgcGFyaXNjX2luaXRfcmVsb2MgKGVoKTsKKysgIEhPT0sgKGVoLCByZWxvY19zaW1wbGVfdHlwZSk7CisrICBIT09LIChlaCwgbWFjaGluZV9mbGFnX2NoZWNrKTsKKysgIEhPT0sgKGVoLCBzeW1ib2xfdHlwZV9uYW1lKTsKKysgIEhPT0sgKGVoLCBzZWdtZW50X3R5cGVfbmFtZSk7CisrICBIT09LIChlaCwgc2VjdGlvbl90eXBlX25hbWUpOworKyAgSE9PSyAoZWgsIHJlZ2lzdGVyX2luZm8pOworKyAgaWYgKHBhNjQpCisrICAgIGVoLT5yZXR1cm5fdmFsdWVfbG9jYXRpb24gPSBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzY0OworKyAgZWxzZQorKyAgICBlaC0+cmV0dXJuX3ZhbHVlX2xvY2F0aW9uID0gcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8zMjsKKysKKysgIHJldHVybiBNT0RWRVJTSU9OOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2NfcmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX3JlZ3MuYwkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwxNTkgQEAKKysvKiBSZWdpc3RlciBuYW1lcyBhbmQgbnVtYmVycyBmb3IgUEEtUklTQyBEV0FSRi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIHBhcmlzY18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworK3NzaXplX3QKKytwYXJpc2NfcmVnaXN0ZXJfaW5mbyAoRWJsICplYmwsIGludCByZWdubywgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCisrCQkgICAgIGNvbnN0IGNoYXIgKipwcmVmaXgsIGNvbnN0IGNoYXIgKipzZXRuYW1lLAorKwkJICAgICBpbnQgKmJpdHMsIGludCAqdHlwZSkKKyt7CisrICBpbnQgcGE2NCA9IDA7CisrCisrICBpZiAoZWJsLT5lbGYpIHsKKysgICAgR0VsZl9FaGRyIGVoZHJfbWVtOworKyAgICBHRWxmX0VoZHIgKmVoZHIgPSBnZWxmX2dldGVoZHIgKGVibC0+ZWxmLCAmZWhkcl9tZW0pOworKyAgICBpZiAoZWhkci0+ZV9mbGFncyAmIEVGX1BBUklTQ19XSURFKQorKyAgICAgIHBhNjQgPSAxOworKyAgfQorKworKyAgaW50IG5yZWdzID0gcGE2NCA/IDEyNyA6IDEyODsKKysKKysgIGlmIChuYW1lID09IE5VTEwpCisrICAgIHJldHVybiBucmVnczsKKysKKysgIGlmIChyZWdubyA8IDAgfHwgcmVnbm8gPj0gbnJlZ3MgfHwgbmFtZWxlbiA8IDYpCisrICAgIHJldHVybiAtMTsKKysKKysgICpwcmVmaXggPSAiJSI7CisrCisrICBpZiAocmVnbm8gPCAzMikKKysgIHsKKysgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgaWYgKHBhNjQpCisrICAgIHsKKysJKmJpdHMgPSA2NDsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgCSpiaXRzID0gMzI7CisrICAgIH0KKysgIH0KKysgIGVsc2UgaWYgKHJlZ25vID09IDMyKQorKyAgeworKyAgICAqc2V0bmFtZSA9ICJzcGVjaWFsIjsKKysgICAgaWYgKHBhNjQpCisrICAgIHsKKysJKmJpdHMgPSA2OworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAJKmJpdHMgPSA1OworKyAgICB9CisrICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgfQorKyAgZWxzZQorKyAgeworKyAgICAqc2V0bmFtZSA9ICJGUFUiOworKyAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKysgICAgaWYgKHBhNjQpCisrICAgIHsKKysJKmJpdHMgPSA2NDsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgCSpiaXRzID0gMzI7CisrICAgIH0KKysgIH0KKysKKysgIGlmIChyZWdubyA8IDMzKSB7CisrICAgIHN3aXRjaCAocmVnbm8pCisrICAgICAgeworKyAgICAgIGNhc2UgMCAuLi4gOToKKysgICAgICAgIG5hbWVbMF0gPSAncic7CisrICAgICAgICBuYW1lWzFdID0gcmVnbm8gKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gMjsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgMTAgLi4uIDMxOgorKyAgICAgICAgbmFtZVswXSA9ICdyJzsKKysgICAgICAgIG5hbWVbMV0gPSByZWdubyAvIDEwICsgJzAnOworKyAgICAgICAgbmFtZVsyXSA9IHJlZ25vICUgMTAgKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gMzsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgMzI6CisrCSpwcmVmaXggPSBOVUxMOworKwluYW1lWzBdID0gJ1MnOworKwluYW1lWzFdID0gJ0EnOworKwluYW1lWzJdID0gJ1InOworKwluYW1lbGVuID0gMzsKKysJYnJlYWs7CisrICAgICAgfQorKyAgfQorKyAgZWxzZSB7CisrICAgIGlmIChwYTY0ICYmICgocmVnbm8gLSA3MikgJSAyKSkgeworKyAgICAgICpzZXRuYW1lID0gTlVMTDsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgICBzd2l0Y2ggKHJlZ25vKQorKyAgICAgIHsKKysgICAgICBjYXNlIDcyICsgMCAuLi4gNzIgKyAxMToKKysgICAgICAgIG5hbWVbMF0gPSAnZic7CisrCW5hbWVbMV0gPSAncic7CisrICAgICAgICBuYW1lWzJdID0gKHJlZ25vICsgOCAtIDcyKSAvIDIgKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gMzsKKysgICAgICAgIGlmICgocmVnbm8gKyA4IC0gNzIpICUgMikgeworKwkgIG5hbWVbM10gPSAnUic7CisrCSAgbmFtZWxlbisrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSA3MiArIDEyIC4uLiA3MiArIDU1OgorKyAgICAgICAgbmFtZVswXSA9ICdmJzsKKysJbmFtZVsxXSA9ICdyJzsKKysgICAgICAgIG5hbWVbMl0gPSAocmVnbm8gKyA4IC0gNzIpIC8gMiAvIDEwICsgJzAnOworKyAgICAgICAgbmFtZVszXSA9IChyZWdubyArIDggLSA3MikgLyAyICUgMTAgKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gNDsKKysgICAgICAgIGlmICgocmVnbm8gKyA4IC0gNzIpICUgMikgeworKwkgIG5hbWVbNF0gPSAnUic7CisrCSAgbmFtZWxlbisrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysgICAgICAgICpzZXRuYW1lID0gTlVMTDsKKysgICAgICAgIHJldHVybiAwOworKyAgICAgIH0KKysgIH0KKysgIG5hbWVbbmFtZWxlbisrXSA9ICdcMCc7CisrICByZXR1cm4gbmFtZWxlbjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX3JlbG9jLmRlZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19yZWxvYy5kZWYJMjAxMC0wNC0yNCAxMDoxMDo1MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsMTI4IEBACisrLyogTGlzdCB0aGUgcmVsb2NhdGlvbiB0eXBlcyBmb3IgUEEtUklTQy4gIC0qLSBDIC0qLQorKyAgIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrLyoJICAgIE5BTUUsCQlSRUx8RVhFQ3xEWU4JKi8KKysKKytSRUxPQ19UWVBFIChOT05FLAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRElSMzIsCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRElSMjFMLAkJUkVMfEVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKERJUjE3UiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxN0YsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTRSLAkJUkVMfERZTikKKytSRUxPQ19UWVBFIChQQ1JFTDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMjFMLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMTdSLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMTdGLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMTRSLAkJUkVMfEVYRUMpCisrUkVMT0NfVFlQRSAoRFBSRUwyMUwsCQlSRUwpCisrUkVMT0NfVFlQRSAoRFBSRUwxNFdSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERQUkVMMTREUiwgICAgICAgICAgUkVMKQorK1JFTE9DX1RZUEUgKERQUkVMMTRSLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdQUkVMMjFMLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE0UiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYyMUwsCQlSRUwpCisrUkVMT0NfVFlQRSAoTFRPRkYxNFIsCQlSRUwpCisrUkVMT0NfVFlQRSAoRExUSU5EMTRGLAkJMCkKKytSRUxPQ19UWVBFIChTRVRCQVNFLAkJMCkKKytSRUxPQ19UWVBFIChTRUNSRUwzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMjFMLAkJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTdSLAkJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTRSLAkJMCkKKytSRUxPQ19UWVBFIChTRUdCQVNFLAkJMCkKKytSRUxPQ19UWVBFIChTRUdSRUwzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChQTFRPRkYyMUwsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE0UiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTRGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMzIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjIxTCwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTRSLAkwKQorK1JFTE9DX1RZUEUgKEZQVFI2NCwJCTApCisrUkVMT0NfVFlQRSAoUExBQkVMMzIsCQlSRUx8RFlOKQorK1JFTE9DX1RZUEUgKFBDUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMjJDLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDIyRiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTZGLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTZERiwJCTApCisrUkVMT0NfVFlQRSAoRElSNjQsCQlSRUx8RFlOKQorK1JFTE9DX1RZUEUgKERJUjE0V1IsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTREUiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNkYsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTZXRiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNkRGLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdQUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNERSLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE2RiwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNldGLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE2REYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGNjQsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNERSLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE2RiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNldGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE2REYsCQkwKQorK1JFTE9DX1RZUEUgKFNFQ1JFTDY0LAkJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTRXUiwJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTREUiwJMCkKKytSRUxPQ19UWVBFIChTRUdSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTREUiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTZGLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNldGLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNkRGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSNjQsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE0V1IsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE0RFIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE2RiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTZXRiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTZERiwJMCkKKytSRUxPQ19UWVBFIChDT1BZLAkJRVhFQykKKytSRUxPQ19UWVBFIChJUExULAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRVBMVCwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwzMiwJCURZTikKKytSRUxPQ19UWVBFIChUUFJFTDIxTCwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNFIsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMjFMLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTRSLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTRGLAkwKQorK1JFTE9DX1RZUEUgKFRQUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNERSLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE2RiwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNldGLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE2REYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQNjQsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTRXUiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE0RFIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNkYsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNldGLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTZERiwJMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9EMzIsCURZTikKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9ENjQsCURZTikKKysKKysjZGVmaW5lIE5PX1JFTEFUSVZFX1JFTE9DICAgICAgIDEKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2NfcmV0dmFsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2NfcmV0dmFsLmMJMjAxMC0wNC0yNCAxMDoxMDo1MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsMjEzIEBACisrLyogRnVuY3Rpb24gcmV0dXJuIHZhbHVlIGxvY2F0aW9uIGZvciBMaW51eC9QQS1SSVNDIEFCSS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIHBhcmlzY18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKyNpbmNsdWRlICJsaWJlYmxfcGFyaXNjLmgiCisrCisrLyogJXIyOCwgb3IgcGFpciAlcjI4LCAlcjI5LiAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZzMyW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMjggfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMjkgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysKKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzI4IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzI5IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ludHJlZwkxCisrI2RlZmluZSBubG9jX2ludHJlZ3BhaXIJNAorKworKy8qICVmcjRMLCBvciBwYWlyICVmcjRMLCAlZnI0UiBvbiBwYS0zMiAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWczMltdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSA3MiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gNzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWczMiAyCisrI2RlZmluZSBubG9jX2ZwcmVncGFpcjMyIDQKKysKKysvKiAkZnI0ICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSA3MiB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWcgIDEKKysKKysjaWYgMAorKy8qIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3R1cmUgYW5kIGlzIGFjdHVhbGx5IHN0b3JlZCBpbiBzdGFjayBzcGFjZQorKyAgIHBhc3NlZCBpbiBhIGhpZGRlbiBhcmd1bWVudCBieSB0aGUgY2FsbGVyLiBBZGRyZXNzIG9mIHRoZSBsb2NhdGlvbiBpcyBzdG9yZWQKKysgICBpbiAlcjI4IGJlZm9yZSBmdW5jdGlvbiBjYWxsLCBidXQgaXQgbWF5IGJlIGNoYW5nZWQgYnkgZnVuY3Rpb24uICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19hZ2dyZWdhdGVbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9icmVnMjggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2FnZ3JlZ2F0ZSAxCisrI2VuZGlmCisrCisrc3RhdGljIGludAorK3BhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3AsIGludCBwYTY0KQorK3sKKysgIER3YXJmX1dvcmQgcmVnc2l6ZSA9IHBhNjQgPyA4IDogNDsKKysKKysgIC8qIFN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uJ3MgdHlwZSwgYW5kIGdldCB0aGUgRFdfQVRfdHlwZSBhdHRyaWJ1dGUsCisrICAgICB3aGljaCBpcyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KKysKKysgIER3YXJmX0F0dHJpYnV0ZSBhdHRyX21lbTsKKysgIER3YXJmX0F0dHJpYnV0ZSAqYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlIChmdW5jdHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgIGlmIChhdHRyID09IE5VTEwpCisrICAgIC8qIFRoZSBmdW5jdGlvbiBoYXMgbm8gcmV0dXJuIHZhbHVlLCBsaWtlIGEgYHZvaWQnIGZ1bmN0aW9uIGluIEMuICAqLworKyAgICByZXR1cm4gMDsKKysKKysgIER3YXJmX0RpZSBkaWVfbWVtOworKyAgRHdhcmZfRGllICp0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgIGludCB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKworKyAgLyogRm9sbG93IHR5cGVkZWZzIGFuZCBxdWFsaWZpZXJzIHRvIGdldCB0byB0aGUgYWN0dWFsIHR5cGUuICAqLworKyAgd2hpbGUgKHRhZyA9PSBEV19UQUdfdHlwZWRlZgorKwkgfHwgdGFnID09IERXX1RBR19jb25zdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfdm9sYXRpbGVfdHlwZQorKwkgfHwgdGFnID09IERXX1RBR19yZXN0cmljdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfbXV0YWJsZV90eXBlKQorKyAgICB7CisrICAgICAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgICAgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgICAgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrICAgIH0KKysKKysgIHN3aXRjaCAodGFnKQorKyAgICB7CisrICAgIGNhc2UgLTE6CisrICAgICAgcmV0dXJuIC0xOworKworKyAgICBjYXNlIERXX1RBR19zdWJyYW5nZV90eXBlOgorKyAgICAgIGlmICghIGR3YXJmX2hhc2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUpKQorKwl7CisrCSAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKwkgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKwkgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCX0KKysgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworKworKyAgICBjYXNlIERXX1RBR19iYXNlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2VudW1lcmF0aW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3BvaW50ZXJfdHlwZToKKysgICAgY2FzZSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlOgorKyAgICAgIHsKKysgICAgICAgIER3YXJmX1dvcmQgc2l6ZTsKKysJaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSwKKysJCQkJCSAmYXR0cl9tZW0pLCAmc2l6ZSkgIT0gMCkKKysJICB7CisrCSAgICBpZiAodGFnID09IERXX1RBR19wb2ludGVyX3R5cGUgfHwgdGFnID09IERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGUpCisrCSAgICAgIHNpemUgPSA0OworKwkgICAgZWxzZQorKwkgICAgICByZXR1cm4gLTE7CisrCSAgfQorKwlpZiAodGFnID09IERXX1RBR19iYXNlX3R5cGUpCisrCSAgeworKwkgICAgRHdhcmZfV29yZCBlbmNvZGluZzsKKysJICAgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9lbmNvZGluZywKKysJCQkJCSAgICAgJmF0dHJfbWVtKSwgJmVuY29kaW5nKSAhPSAwKQorKwkgICAgICByZXR1cm4gLTE7CisrCisrCSAgICBpZiAoZW5jb2RpbmcgPT0gRFdfQVRFX2Zsb2F0KQorKwkgICAgICB7CisrCQlpZiAocGE2NCkgeworKwkJICAqbG9jcCA9IGxvY19mcHJlZzsKKysJCSAgaWYgKHNpemUgPD0gOCkKKysJCSAgICAgIHJldHVybiBubG9jX2ZwcmVnOworKwkJfQorKwkJZWxzZSB7CisrCQkgICpsb2NwID0gbG9jX2ZwcmVnMzI7CisrCQkgIGlmIChzaXplIDw9IDQpCisrCQkgICAgcmV0dXJuIG5sb2NfZnByZWczMjsKKysJCSAgZWxzZSBpZiAoc2l6ZSA8PSA4KQorKwkJICAgIHJldHVybiBubG9jX2ZwcmVncGFpcjMyOworKwkJfQorKwkJZ290byBhZ2dyZWdhdGU7CisrCSAgICAgIH0KKysJICB9CisrCWlmIChwYTY0KQorKwkgICpsb2NwID0gbG9jX2ludHJlZzsKKysJZWxzZQorKwkgICpsb2NwID0gbG9jX2ludHJlZzMyOworKwlpZiAoc2l6ZSA8PSByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZzsKKysJaWYgKHNpemUgPD0gMiAqIHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVncGFpcjsKKysKKysJLyogRWxzZSBmYWxsIHRocm91Z2guICAqLworKyAgICAgIH0KKysKKysgICAgY2FzZSBEV19UQUdfc3RydWN0dXJlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2NsYXNzX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3VuaW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2FycmF5X3R5cGU6CisrICAgIGFnZ3JlZ2F0ZTogeworKyAgICAgICAgRHdhcmZfV29yZCBzaXplOworKwlpZiAoZHdhcmZfYWdncmVnYXRlX3NpemUgKHR5cGVkaWUsICZzaXplKSAhPSAwKQorKwkgIHJldHVybiAtMTsKKysJaWYgKHBhNjQpCisrICAgICAgICAgICpsb2NwID0gbG9jX2ludHJlZzsKKysJZWxzZQorKwkgICpsb2NwID0gbG9jX2ludHJlZzMyOworKyAgICAgICAgaWYgKHNpemUgPD0gcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWc7CisrICAgICAgICBpZiAoc2l6ZSA8PSAyICogcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWdwYWlyOworKyNpZiAwCisrCS8qIHRoZXJlIHNob3VsZCBiZSBzb21lIHdheSB0byBrbm93IHRoaXMgbG9jYXRpb24uLi4gQnV0IEkgZG8gbm90IHNlZSBpdC4gKi8KKysgICAgICAgICpsb2NwID0gbG9jX2FnZ3JlZ2F0ZTsKKysgICAgICAgIHJldHVybiBubG9jX2FnZ3JlZ2F0ZTsKKysjZW5kaWYKKysJLyogZmFsbCB0aHJvdWdoLiAgKi8KKysgICAgICB9CisrICAgIH0KKysKKysgIC8qIFhYWCBXZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9ycyBmcm9tIGVibCBjYWxscy4KKysgICAgIFRoaXMgdmFsdWUgbWVhbnMgd2UgZG8gbm90IHVuZGVyc3RhbmQgdGhlIHR5cGUsIGJ1dCBpdCBpcyB3ZWxsLWZvcm1lZAorKyAgICAgRFdBUkYgYW5kIG1pZ2h0IGJlIHZhbGlkLiAgKi8KKysgIHJldHVybiAtMjsKKyt9CisrCisraW50CisrcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8zMiAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgIHJldHVybiBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoZnVuY3R5cGVkaWUsIGxvY3AsIDApOworK30KKysKKytpbnQKKytwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzY0IChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgcmV0dXJuIHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMSk7CisrfQorKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19zeW1ib2wuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19zeW1ib2wuYwkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwxMTIgQEAKKysvKiBQQS1SSVNDIHNwZWNpZmljIHN5bWJvbGljIG5hbWUgaGFuZGxpbmcuCisrICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDIuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8ZWxmLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKyNkZWZpbmUgQkFDS0VORAkJcGFyaXNjXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrY29uc3QgY2hhciAqCisrcGFyaXNjX3NlZ21lbnRfdHlwZV9uYW1lIChpbnQgc2VnbWVudCwgY2hhciAqYnVmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysJCQlzaXplX3QgbGVuIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKKyt7CisrICBzd2l0Y2ggKHNlZ21lbnQpCisrICAgIHsKKysgICAgY2FzZSBQVF9QQVJJU0NfQVJDSEVYVDoKKysgICAgICByZXR1cm4gIlBBUklTQ19BUkNIRVhUIjsKKysgICAgY2FzZSBQVF9QQVJJU0NfVU5XSU5EOgorKyAgICAgIHJldHVybiAiUEFSSVNDX1VOV0lORCI7CisrICAgIGRlZmF1bHQ6CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBSZXR1cm4gc3ltYm9saWMgcmVwcmVzZW50YXRpb24gb2Ygc3ltYm9sIHR5cGUuICAqLworK2NvbnN0IGNoYXIgKgorK3BhcmlzY19zeW1ib2xfdHlwZV9uYW1lKGludCBzeW1ib2wsIGNoYXIgKmJ1ZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrICAgIHNpemVfdCBsZW4gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQorK3sKKysJaWYgKHN5bWJvbCA9PSBTVFRfUEFSSVNDX01JTExJQ09ERSkKKysJICByZXR1cm4gIlBBUklTQ19NSUxMSSI7CisrCXJldHVybiBOVUxMOworK30KKysKKysvKiBSZXR1cm4gc3ltYm9saWMgcmVwcmVzZW50YXRpb24gb2Ygc2VjdGlvbiB0eXBlLiAgKi8KKytjb25zdCBjaGFyICoKKytwYXJpc2Nfc2VjdGlvbl90eXBlX25hbWUgKGludCB0eXBlLAorKwkJCWNoYXIgKmJ1ZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkJc2l6ZV90IGxlbiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCisreworKyAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgIGNhc2UgU0hUX1BBUklTQ19FWFQ6CisrICAgICAgcmV0dXJuICJQQVJJU0NfRVhUIjsKKysgICAgY2FzZSBTSFRfUEFSSVNDX1VOV0lORDoKKysgICAgICByZXR1cm4gIlBBUklTQ19VTldJTkQiOworKyAgICBjYXNlIFNIVF9QQVJJU0NfRE9DOgorKyAgICAgIHJldHVybiAiUEFSSVNDX0RPQyI7CisrICAgIH0KKysKKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBDaGVjayB3aGV0aGVyIG1hY2hpbmUgZmxhZ3MgYXJlIHZhbGlkLiAgKi8KKytib29sCisrcGFyaXNjX21hY2hpbmVfZmxhZ19jaGVjayAoR0VsZl9Xb3JkIGZsYWdzKQorK3sKKysgIGlmIChmbGFncyAmfiAoRUZfUEFSSVNDX1RSQVBOSUwgfCBFRl9QQVJJU0NfRVhUIHwgRUZfUEFSSVNDX0xTQiB8CisrCUVGX1BBUklTQ19XSURFIHwgRUZfUEFSSVNDX05PX0tBQlAgfAorKwlFRl9QQVJJU0NfTEFaWVNXQVAgfCBFRl9QQVJJU0NfQVJDSCkpCisrICAgIHJldHVybiAwOworKworKyAgR0VsZl9Xb3JkIGFyY2ggPSBmbGFncyAmIEVGX1BBUklTQ19BUkNIOworKworKyAgcmV0dXJuICgoYXJjaCA9PSBFRkFfUEFSSVNDXzFfMCkgfHwgKGFyY2ggPT0gRUZBX1BBUklTQ18xXzEpIHx8CisrICAgICAgKGFyY2ggPT0gRUZBX1BBUklTQ18yXzApKTsKKyt9CisrCisrLyogQ2hlY2sgZm9yIHRoZSBzaW1wbGUgcmVsb2MgdHlwZXMuICAqLworK0VsZl9UeXBlCisrcGFyaXNjX3JlbG9jX3NpbXBsZV90eXBlIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIGludCB0eXBlKQorK3sKKysgIHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICBjYXNlIFJfUEFSSVNDX0RJUjY0OgorKyAgICBjYXNlIFJfUEFSSVNDX1NFQ1JFTDY0OgorKyAgICAgIHJldHVybiBFTEZfVF9YV09SRDsKKysgICAgY2FzZSBSX1BBUklTQ19ESVIzMjoKKysgICAgY2FzZSBSX1BBUklTQ19TRUNSRUwzMjoKKysgICAgICByZXR1cm4gRUxGX1RfV09SRDsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRUxGX1RfTlVNOworKyAgICB9CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2xpYmVibF9wYXJpc2MuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2xpYmVibF9wYXJpc2MuaAkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw5IEBACisrI2lmbmRlZiBfTElCRUJMX0hQUEFfSAorKyNkZWZpbmUgX0xJQkVCTF9IUFBBX0ggMQorKworKyNpbmNsdWRlIDxsaWJkdy5oPgorKworK2V4dGVybiBpbnQgcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8zMihEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKytleHRlcm4gaW50IHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fNjQoRHdhcmZfRGllICosIGNvbnN0IER3YXJmX09wICoqbG9jcCk7CisrCisrI2VuZGlmCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0Ni5vcmlnL2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTAtMDQtMjQgMTA6MTA6NDEuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxMC0wNC0yNCAxMDoxMDo1MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yOSwxMSArMjksMTEgQEAKKyAJICAgLUkkKHRvcF9zcmNkaXIpL2xpYmVsZiAtSSQodG9wX3NyY2RpcikvbGliZHcKKyAKKyAKKy1tb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gc3BhcmMgcHBjIHBwYzY0IHMzOTAKKyttb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gc3BhcmMgcHBjIHBwYzY0IHMzOTAgcGFyaXNjCisgbGliZWJsX3BpYyA9IGxpYmVibF9pMzg2X3BpYy5hIGxpYmVibF9zaF9waWMuYSBsaWJlYmxfeDg2XzY0X3BpYy5hIFwKKyAJICAgICBsaWJlYmxfaWE2NF9waWMuYSBsaWJlYmxfYWxwaGFfcGljLmEgbGliZWJsX2FybV9waWMuYSBcCisgCSAgICAgbGliZWJsX3NwYXJjX3BpYy5hIGxpYmVibF9wcGNfcGljLmEgbGliZWJsX3BwYzY0X3BpYy5hIFwKKy0JICAgICBsaWJlYmxfczM5MF9waWMuYQorKwkgICAgIGxpYmVibF9zMzkwX3BpYy5hIGxpYmVibF9wYXJpc2NfcGljLmEKKyBub2luc3RfTElCUkFSSUVTID0gJChsaWJlYmxfcGljKQorIG5vaW5zdF9EQVRBID0gJChsaWJlYmxfcGljOl9waWMuYT0uc28pCisgCitAQCAtOTUsNiArOTUsOSBAQAorIGxpYmVibF9zMzkwX3BpY19hX1NPVVJDRVMgPSAkKHMzOTBfU1JDUykKKyBhbV9saWJlYmxfczM5MF9waWNfYV9PQkpFQ1RTID0gJChzMzkwX1NSQ1M6LmM9Lm9zKQorIAorK3BhcmlzY19TUkNTID0gcGFyaXNjX2luaXQuYyBwYXJpc2Nfc3ltYm9sLmMgcGFyaXNjX3JlZ3MuYyBwYXJpc2NfcmV0dmFsLmMKKytsaWJlYmxfcGFyaXNjX3BpY19hX1NPVVJDRVMgPSAkKHBhcmlzY19TUkNTKQorK2FtX2xpYmVibF9wYXJpc2NfcGljX2FfT0JKRUNUUyA9ICQocGFyaXNjX1NSQ1M6LmM9Lm9zKQorIAorIGxpYmVibF8lLnNvIGxpYmVibF8lLm1hcDogbGliZWJsXyVfcGljLmEgJChsaWJlbGYpICQobGliZHcpCisgCUBybSAtZiAkKEA6LnNvPS5tYXApCitJbmRleDogZWxmdXRpbHMtMC4xNDYvbGliZWxmL2VsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDYub3JpZy9saWJlbGYvZWxmLmgJMjAxMC0wNC0xMyAyMDowODowMi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9saWJlbGYvZWxmLmgJMjAxMC0wNC0yNCAxMDoxMDo1MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNzg5LDE2ICsxNzg5LDI0IEBACisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE3RgkxMgkvKiAxNyBiaXRzIG9mIHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE0UgkxNAkvKiBSaWdodCAxNCBiaXRzIG9mIHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19EUFJFTDIxTAkxOAkvKiBMZWZ0IDIxIGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMTRXUgkxOQorKyNkZWZpbmUgUl9QQVJJU0NfRFBSRUwxNERSCTIwCisgI2RlZmluZSBSX1BBUklTQ19EUFJFTDE0UgkyMgkvKiBSaWdodCAxNCBiaXRzIG9mIHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19HUFJFTDIxTAkyNgkvKiBHUC1yZWxhdGl2ZSwgbGVmdCAyMSBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0dQUkVMMTRSCTMwCS8qIEdQLXJlbGF0aXZlLCByaWdodCAxNCBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMjFMCTM0CS8qIExULXJlbGF0aXZlLCBsZWZ0IDIxIGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNFIJMzgJLyogTFQtcmVsYXRpdmUsIHJpZ2h0IDE0IGJpdHMuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfRExUSU5EMTRGCTM5CisrI2RlZmluZSBSX1BBUklTQ19TRVRCQVNFCTQwCisgI2RlZmluZSBSX1BBUklTQ19TRUNSRUwzMgk0MQkvKiAzMiBiaXRzIHNlY3Rpb24gcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwyMUwJNDIKKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwxN1IJNDMKKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwxNFIJNDYKKyAjZGVmaW5lIFJfUEFSSVNDX1NFR0JBU0UJNDgJLyogTm8gcmVsb2NhdGlvbiwgc2V0IHNlZ21lbnQgYmFzZS4gICovCisgI2RlZmluZSBSX1BBUklTQ19TRUdSRUwzMgk0OQkvKiAzMiBiaXRzIHNlZ21lbnQgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjIxTAk1MAkvKiBQTFQgcmVsLiBhZGRyZXNzLCBsZWZ0IDIxIGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTRSCTU0CS8qIFBMVCByZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTRGCTU1CisgI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMzIJNTcJLyogMzIgYml0cyBMVC1yZWwuIGZ1bmN0aW9uIHBvaW50ZXIuICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMjFMCTU4CS8qIExULXJlbC4gZmN0IHB0ciwgbGVmdCAyMSBiaXRzLiAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfRlBUUjE0Ugk2MgkvKiBMVC1yZWwuIGZjdCBwdHIsIHJpZ2h0IDE0IGJpdHMuICovCitAQCAtMTgwNyw2ICsxODE1LDcgQEAKKyAjZGVmaW5lIFJfUEFSSVNDX1BMQUJFTDIxTAk2NgkvKiBMZWZ0IDIxIGJpdHMgb2YgZmRlc2MgYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTEFCRUwxNFIJNzAJLyogUmlnaHQgMTQgYml0cyBvZiBmZGVzYyBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMNjQJNzIJLyogNjQgYml0cyBQQy1yZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfUENSRUwyMkMJNzMKKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMjJGCTc0CS8qIDIyIGJpdHMgUEMtcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTRXUgk3NQkvKiBQQy1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNERSCTc2CS8qIFBDIHJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCitAQCAtMTgzMiw2ICsxODQxLDggQEAKKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMTZXRgkxMDIJLyogMTYgYml0cyBMVC1yZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNkRGCTEwMwkvKiAxNiBiaXRzIExULXJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19TRUNSRUw2NAkxMDQJLyogNjQgYml0cyBzZWN0aW9uIHJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19CQVNFUkVMMTRXUgkxMDcKKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwxNERSCTEwOAorICNkZWZpbmUgUl9QQVJJU0NfU0VHUkVMNjQJMTEyCS8qIDY0IGJpdHMgc2VnbWVudCByZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTRXUgkxMTUJLyogUExULXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNERSCTExNgkvKiBQTFQtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2kzODZfZGlzLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9pMzg2X2Rpcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1Y2MwMWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9pMzg2X2Rpcy5oCkBAIC0wLDAgKzEsMTY1NyBAQAorI2RlZmluZSBNTkVNT05JQ19CSVRTIDEwCisjZGVmaW5lIFNVRkZJWF9CSVRTIDMKKyNkZWZpbmUgRkNUMV9CSVRTIDcKKyNkZWZpbmUgU1RSMV9CSVRTIDQKKyNkZWZpbmUgT0ZGMV8xX0JJVFMgNworI2RlZmluZSBPRkYxXzFfQklBUyAzCisjZGVmaW5lIE9GRjFfMl9CSVRTIDcKKyNkZWZpbmUgT0ZGMV8yX0JJQVMgNAorI2RlZmluZSBPRkYxXzNfQklUUyAxCisjZGVmaW5lIE9GRjFfM19CSUFTIDcKKyNkZWZpbmUgRkNUMl9CSVRTIDYKKyNkZWZpbmUgU1RSMl9CSVRTIDIKKyNkZWZpbmUgT0ZGMl8xX0JJVFMgNworI2RlZmluZSBPRkYyXzFfQklBUyA1CisjZGVmaW5lIE9GRjJfMl9CSVRTIDcKKyNkZWZpbmUgT0ZGMl8yX0JJQVMgNAorI2RlZmluZSBPRkYyXzNfQklUUyA0CisjZGVmaW5lIE9GRjJfM19CSUFTIDcKKyNkZWZpbmUgRkNUM19CSVRTIDQKKyNkZWZpbmUgU1RSM19CSVRTIDEKKyNkZWZpbmUgT0ZGM18xX0JJVFMgNgorI2RlZmluZSBPRkYzXzFfQklBUyAxMAorI2RlZmluZSBPRkYzXzJfQklUUyAxCisjZGVmaW5lIE9GRjNfMl9CSUFTIDIxCisKKyNpbmNsdWRlIDxpMzg2X2RhdGEuaD4KKworI2RlZmluZSBzdWZmaXhfbm9uZSAwCisjZGVmaW5lIHN1ZmZpeF93IDEKKyNkZWZpbmUgc3VmZml4X3cwIDIKKyNkZWZpbmUgc3VmZml4X1cgMworI2RlZmluZSBzdWZmaXhfdHR0biA0CisjZGVmaW5lIHN1ZmZpeF9EIDcKKyNkZWZpbmUgc3VmZml4X3cxIDUKKyNkZWZpbmUgc3VmZml4X1cxIDYKKworc3RhdGljIGNvbnN0IG9wZmN0X3Qgb3AxX2ZjdFtdID0KK3sKKyAgTlVMTCwKKyAgRkNUX01PRCRSX00sCisgIEZDVF9Nb2QkUl9tLAorICBGQ1RfYWJzLAorICBGQ1RfYXgsCisgIEZDVF9heCR3LAorICBGQ1RfY2NjLAorICBGQ1RfZGRkLAorICBGQ1RfZGlzcDgsCisgIEZDVF9kc19ieCwKKyAgRkNUX2RzX3NpLAorICBGQ1RfZHgsCisgIEZDVF9lc19kaSwKKyAgRkNUX2ZyZWcsCisgIEZDVF9pbW0kcywKKyAgRkNUX2ltbSR3LAorICBGQ1RfaW1tMTYsCisgIEZDVF9pbW04LAorICBGQ1RfaW1tczgsCisgIEZDVF9tbXhyZWcsCisgIEZDVF9tb2QkMTZyX20sCisgIEZDVF9tb2QkNjRyX20sCisgIEZDVF9tb2QkOHJfbSwKKyAgRkNUX21vZCRyX20sCisgIEZDVF9tb2Qkcl9tJHcsCisgIEZDVF9yZWcsCisgIEZDVF9yZWckdywKKyAgRkNUX3JlZzE2LAorICBGQ1RfcmVnNjQsCisgIEZDVF9yZWwsCisgIEZDVF9zZWwsCisgIEZDVF9zcmVnMiwKKyAgRkNUX3NyZWczLAorICBGQ1Rfc3RyaW5nLAorICBGQ1RfeG1tcmVnLAorfTsKK3N0YXRpYyBjb25zdCBjaGFyIG9wMV9zdHJbXSA9CisgICIlYXhcMCIKKyAgIiVjbFwwIgorICAiJWVheFwwIgorICAiJXN0XDAiCisgICIleG1tMFwwIgorICAiKiI7CitzdGF0aWMgY29uc3QgdWludDhfdCBvcDFfc3RyX2lkeFtdID0geworICAwLAorICA0LAorICA4LAorICAxMywKKyAgMTcsCisgIDIzLAorfTsKK3N0YXRpYyBjb25zdCBvcGZjdF90IG9wMl9mY3RbXSA9Cit7CisgIE5VTEwsCisgIEZDVF9NT0QkUl9NLAorICBGQ1RfTW9kJFJfbSwKKyAgRkNUX2FicywKKyAgRkNUX2Fic3ZhbCwKKyAgRkNUX2F4JHcsCisgIEZDVF9jY2MsCisgIEZDVF9kZGQsCisgIEZDVF9kc19zaSwKKyAgRkNUX2R4LAorICBGQ1RfZXNfZGksCisgIEZDVF9mcmVnLAorICBGQ1RfaW1tOCwKKyAgRkNUX21teHJlZywKKyAgRkNUX21vZCQ2NHJfbSwKKyAgRkNUX21vZCRyX20sCisgIEZDVF9tb2Qkcl9tJHcsCisgIEZDVF9tb2RhJHJfbSwKKyAgRkNUX3JlZywKKyAgRkNUX3JlZyR3LAorICBGQ1RfcmVnNjQsCisgIEZDVF9zcmVnMywKKyAgRkNUX3N0cmluZywKKyAgRkNUX3htbXJlZywKK307CitzdGF0aWMgY29uc3QgY2hhciBvcDJfc3RyW10gPQorICAiJWVjeFwwIgorICAiJXN0IjsKK3N0YXRpYyBjb25zdCB1aW50OF90IG9wMl9zdHJfaWR4W10gPSB7CisgIDAsCisgIDUsCit9Oworc3RhdGljIGNvbnN0IG9wZmN0X3Qgb3AzX2ZjdFtdID0KK3sKKyAgTlVMTCwKKyAgRkNUX21teHJlZywKKyAgRkNUX21vZCRyX20sCisgIEZDVF9yZWcsCisgIEZDVF9zdHJpbmcsCisgIEZDVF94bW1yZWcsCit9Oworc3RhdGljIGNvbnN0IGNoYXIgb3AzX3N0cltdID0KKyAgIiVlZHgiOworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgb3AzX3N0cl9pZHhbXSA9IHsKKyAgMCwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGluc3RyX2VuYyBpbnN0cnRhYltdID0KK3sKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWFhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FhbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWFzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHN1YnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkc3VicHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZG5wZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZG5wcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FycGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYm91bmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTcsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnNmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JzciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ic3dhcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0cywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAyOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2FsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gNiwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xjYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xjYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2xjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3lzY2FsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2x0cywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3lzcmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNlbnRlciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3lzZXhpdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21jLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wcywgLnJlcCA9IDAsIC5yZXBlID0gMSwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcHhjaGcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDExLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDgsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcHhjaGc4YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3B1aWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dGRxMnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGQyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnR0cGQyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kYWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RhcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGVjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGVjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZW1tcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZW50ZXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zub3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjaHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZhYnMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z0c3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z4YW0sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZDEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGwydCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkbDJlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRwaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkbGcyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRsbjIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZHosIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2YyeG0xLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meWwyeCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnB0YW4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZwYXRhbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnh0cmFjdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnByZW0xLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGVjc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maW5jc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcHJlbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnlsMnhwMSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNxcnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzaW5jb3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZybmRpbnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzY2FsZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNpbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGVudiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zdGVudiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zuc3RjdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z4Y2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFkZHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWFkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm11bHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmltdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3VicCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJycCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnN0c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDEsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbWlwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYnN0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjaHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbGV4LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maW5pdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZndhaXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZuY2xleCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92YmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92dSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZuYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZuZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZuYmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92bnUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb20sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbXBwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29taSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbWlwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mdWNvbWksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29taXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkZWNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpZGl2bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnJwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpZGl2cmwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWRpdnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2cnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmZyZWUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZiZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWNvbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92dSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlsZGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWxkbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maW5jc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbmluaXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3RwbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN0dHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN0dHBsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3RwdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mdWNvbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcnN0b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mdWNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zYXZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zdHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaGx0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ltdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMiwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAzLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDExLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbmMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbmMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnMsIC5yZXAgPSAxLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAwLCAuZmN0MSA9IDExLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW50LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW50MywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW50bywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW52ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3dhcGdzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnZscGcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2lyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA2LCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2osIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2osIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAwLCAuZmN0MSA9IDI5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2V0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9qbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMjksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gNiwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xqbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gNiwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xhaGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGVhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xlYXZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZXMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGZzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xncywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZ2R0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMiwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9saWR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMiwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sbGR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sbXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb2NrLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb2RzLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9vcGUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvb3BuZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHNsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sdHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMzUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA3LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnMsIC5yZXAgPSAxLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c2JsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnN3bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z6YmwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92endsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25lZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhdXNlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ub3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcGNudCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ub3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX291dCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vdXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX291dHMsIC5yZXAgPSAxLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3BmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMiwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMzIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2hhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3BhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmRtc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JkcG1jLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZHRzYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9scmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9scmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9sLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9sLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcnNtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYWhmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2FyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2NhcywgLnJlcCA9IDAsIC5yZXBlID0gMSwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NobCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMiwgLnN0cjMgPSAwLCAub2ZmM18xID0gNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NobGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMiwgLnN0cjMgPSAwLCAub2ZmM18xID0gNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NociwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NocmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDIsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDIsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bWNhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtbGF1bmNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXJlc3VtZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm14b2ZmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXJlYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm13cml0ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZ2R0bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW9uaXRvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gMywgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAxLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDQsIC5zdHIzID0gMSwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9td2FpdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gMywgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAxLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaWR0bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2xkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc21zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0aSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RvcywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Rlc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdGVzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV90ZXN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91ZDJhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92ZXJyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92ZXJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV93YmludmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNobnRhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaHQwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaHQxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaHQyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ub3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3dybXNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94YWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAxMSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSA4LCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94Y2hnLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hjaGcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94bGF0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZW1tcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYW5kbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbmRuLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYWRkd2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9weG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHhvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZG5wcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wZXFwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGx0cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBsZXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wdW5vcmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5lcXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmx0cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubGVwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG9yZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wZXFzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGx0c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBsZXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wdW5vcmRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5lcXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmx0c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubGVzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG9yZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhyc3RvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhzYXZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZG14Y3NyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdG14Y3NyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnVwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnVwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRkdXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzbGR1cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhscHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZscHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZobHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aGxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VucGNrbHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdW5wY2tscHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91bnBja2hwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VucGNraHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c2hkdXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZocGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZsaHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bGhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZocGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZhcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZhcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZhcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZhcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzaTJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzaTJzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwaTJwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBpMnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRzZDJzaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRzczJzaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRwZDJwaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRwczJwaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBkMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c2Qyc2ksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzczJzaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBzMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdWNvbWlzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Vjb21pc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jb21pc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jb21pc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9nZXRzZWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm1za3BkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bXNrcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zcXJ0cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zcXJ0c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zcXJ0c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zcXJ0cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yc3FydHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcnNxcnRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjcHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNwcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3JwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29ycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3JwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvcnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWxzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXVscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNkMnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c3Myc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwZDJwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBzMnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cHMyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnR0cHMyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRkcTJwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3Vic3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWJwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWluc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9taW5zcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21pbnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWlucHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXZzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGl2cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXZwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21heHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWF4c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21heHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3Nzd2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrc3N3YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2t1c3diLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3Vzd2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2toYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2toYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tod2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tod2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2toZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2toZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrc3NkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2tzc2R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbHFkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hxZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZHFhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZHF1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1Zmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmaHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAxLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA4LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaGFkZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaGFkZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaHN1YnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaHN1YnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcXUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BpbnNydywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGluc3J3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMSwgLnN0cjMgPSAwLCAub2ZmM18xID0gOCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BleHRydywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMywgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wZXh0cncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDMsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDgsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHVmcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2h1ZnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA4LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcTJxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cTJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI2LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Ztc2tiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdm1za2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidXNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnVzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ1c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHVzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR1c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHVzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXh1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXh1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhdmdiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bhdmd3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHV3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGh1dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3Vic2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3Vic2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3Vic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3Vic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkc2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkc2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZGRxdSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsdWRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bHVkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzYWRidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzYWRidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21hc2ttb3ZkcXUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXNrbW92cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3ViZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1ZmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1ZmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhhZGRzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYWRkdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYWRkdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3VidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3VidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3ViZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3ViZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3Vic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waHN1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ25iLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ25iLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ253LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ253LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ25kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ25kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGhyc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbGlnbnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFsaWduciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bWNsZWFyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXhvbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1wdHJsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1wdHJzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZmVuY2UsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21mZW5jZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2ZlbmNlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbGZsdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYmxlbmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ibGVuZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JsZW5kdnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSA1LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYmxlbmR2cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDUsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kcHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RwcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW5zZXJ0cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRkcWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tcHNhZGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2t1c2R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGJsZW5kdmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDUsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYmxlbmR3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcXEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXN0cmksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVzdHJtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBpc3RyaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21waXN0cm0sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BobWlucG9zdXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waW5zcmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BpbnNyZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHVkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHV3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnVkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnV3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3hiZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeGJxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4d2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3h3cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enhiZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eGJxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4d2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enh3cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHRlc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3VuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvdW5kcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm91bmRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3VuZHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCit9Oworc3RhdGljIGNvbnN0IHVpbnQ4X3QgbWF0Y2hfZGF0YVtdID0KK3sKKyAgMHgxMSwgMHgzNywKKyAgMHgyMiwgMHhkNSwgMHhhLAorICAweDIyLCAweGQ0LCAweGEsCisgIDB4MTEsIDB4M2YsCisgIDB4MSwgMHhmZSwgMHgxNCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHgxMCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDEyLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4NCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAwLAorICAweDEyLCAweDgzLCAweDM4LCAwLAorICAweDIsIDB4ZmUsIDAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDAsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhkMCwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDI0LAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweDIwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MjIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgxMiwgMHg2MywgMCwgMCwKKyAgMHgxMiwgMHg2MiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJjLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmQsIDAsIDAsCisgIDB4MTIsIDB4ZiwgMHhmOCwgMHhjOCwKKyAgMHgyMywgMHhmLCAweGEzLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmEsIDB4MzgsIDB4MjAsCisgIDB4MjMsIDB4ZiwgMHhiYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJhLCAweDM4LCAweDM4LAorICAweDIzLCAweGYsIDB4YjMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYSwgMHgzOCwgMHgzMCwKKyAgMHgyMywgMHhmLCAweGFiLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmEsIDB4MzgsIDB4MjgsCisgIDB4MTEsIDB4ZTgsCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MTAsCisgIDB4MTEsIDB4OWEsCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MTgsCisgIDB4MTEsIDB4OTgsCisgIDB4MTEsIDB4OTksCisgIDB4MTEsIDB4ZjgsCisgIDB4MTEsIDB4ZmMsCisgIDB4MTEsIDB4ZmEsCisgIDB4MjIsIDB4ZiwgMHg1LAorICAweDIyLCAweGYsIDB4NiwKKyAgMHgyMiwgMHhmLCAweDcsCisgIDB4MjIsIDB4ZiwgMHgzNCwKKyAgMHgyMiwgMHhmLCAweDM1LAorICAweDExLCAweGY1LAorICAweDEzLCAweGYsIDB4ZjAsIDB4NDAsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHgzYywKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDM4LAorICAweDEyLCAweDgzLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4MzgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgzYSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweGMyLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhjMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGMyLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4YTYsCisgIDB4MTMsIDB4ZiwgMHhmZSwgMHhiMCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGM3LCAweDM4LCAweDgsCisgIDB4MjIsIDB4ZiwgMHhhMiwKKyAgMHgzNCwgMHhmMywgMHhmLCAweGU2LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4ZTYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlNiwgMCwgMCwKKyAgMHgxMSwgMHgyNywKKyAgMHgxMSwgMHgyZiwKKyAgMHgyLCAweGZlLCAweGZlLCAweDM4LCAweDgsCisgIDB4MSwgMHhmOCwgMHg0OCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDMwLAorICAweDIyLCAweGYsIDB4NzcsCisgIDB4MTEsIDB4YzgsCisgIDB4MjIsIDB4ZDksIDB4ZDAsCisgIDB4MjIsIDB4ZDksIDB4ZTAsCisgIDB4MjIsIDB4ZDksIDB4ZTEsCisgIDB4MjIsIDB4ZDksIDB4ZTQsCisgIDB4MjIsIDB4ZDksIDB4ZTUsCisgIDB4MjIsIDB4ZDksIDB4ZTgsCisgIDB4MjIsIDB4ZDksIDB4ZTksCisgIDB4MjIsIDB4ZDksIDB4ZWEsCisgIDB4MjIsIDB4ZDksIDB4ZWIsCisgIDB4MjIsIDB4ZDksIDB4ZWMsCisgIDB4MjIsIDB4ZDksIDB4ZWQsCisgIDB4MjIsIDB4ZDksIDB4ZWUsCisgIDB4MjIsIDB4ZDksIDB4ZjAsCisgIDB4MjIsIDB4ZDksIDB4ZjEsCisgIDB4MjIsIDB4ZDksIDB4ZjIsCisgIDB4MjIsIDB4ZDksIDB4ZjMsCisgIDB4MjIsIDB4ZDksIDB4ZjQsCisgIDB4MjIsIDB4ZDksIDB4ZjUsCisgIDB4MjIsIDB4ZDksIDB4ZjYsCisgIDB4MjIsIDB4ZDksIDB4ZjcsCisgIDB4MjIsIDB4ZDksIDB4ZjgsCisgIDB4MjIsIDB4ZDksIDB4ZjksCisgIDB4MjIsIDB4ZDksIDB4ZmEsCisgIDB4MjIsIDB4ZDksIDB4ZmIsCisgIDB4MjIsIDB4ZDksIDB4ZmMsCisgIDB4MjIsIDB4ZDksIDB4ZmQsCisgIDB4MjIsIDB4ZDksIDB4ZmUsCisgIDB4MjIsIDB4ZDksIDB4ZmYsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4YzAsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhjOCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDgsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZTAsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4ZTAsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhlOCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhlOCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDI4LAorICAweDEyLCAweGRkLCAweGY4LCAweGQwLAorICAweDIsIDB4ZmIsIDB4ZDksIDB4MzgsIDB4MTAsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4ZDgsCisgIDB4MiwgMHhmYiwgMHhkOSwgMHgzOCwgMHgxOCwKKyAgMHgxMiwgMHhkOSwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkOSwgMHgzOCwgMHgyOCwKKyAgMHgxMiwgMHhkOSwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkOSwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHhkOSwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhjMCwKKyAgMHgyLCAweGZiLCAweGRhLCAweDM4LCAwLAorICAweDEyLCAweGRhLCAweGY4LCAweGM4LAorICAweDEyLCAweGRlLCAweGY4LCAweGM4LAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4OCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhlMCwKKyAgMHgyLCAweGZiLCAweGRhLCAweDM4LCAweDIwLAorICAweDEyLCAweGRlLCAweGY4LCAweGU4LAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MjgsCisgIDB4MjIsIDB4ZGYsIDB4ZTAsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDB4MjAsCisgIDB4MTIsIDB4ZGYsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDB4MzAsCisgIDB4MjIsIDB4ZDksIDB4ZTAsCisgIDB4MzMsIDB4OWIsIDB4ZGIsIDB4ZTIsCisgIDB4MzMsIDB4OWIsIDB4ZGIsIDB4ZTMsCisgIDB4MTEsIDB4OWIsCisgIDB4MjIsIDB4ZGIsIDB4ZTIsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4YzgsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4ZDAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4ZDgsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4YzgsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZDAsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZDgsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZDAsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgxMCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhkOCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDE4LAorICAweDIyLCAweGRlLCAweGQ5LAorICAweDEyLCAweGRiLCAweGY4LCAweGYwLAorICAweDEyLCAweGRmLCAweGY4LCAweGYwLAorICAweDEyLCAweGRiLCAweGY4LCAweGU4LAorICAweDEyLCAweGRmLCAweGY4LCAweGU4LAorICAweDIyLCAweGQ5LCAweGZmLAorICAweDIyLCAweGQ5LCAweGY2LAorICAweDEyLCAweGQ4LCAweGY4LCAweGYwLAorICAweDEyLCAweGRjLCAweGY4LCAweGYwLAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MzAsCisgIDB4MTIsIDB4ZGEsIDB4MzgsIDB4MzAsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGUsIDB4MzgsIDB4MzAsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4ZjgsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZjgsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4ZjgsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHhkYSwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHhkZSwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhkMCwKKyAgMHgyLCAweGZiLCAweGRhLCAweDM4LCAweDEwLAorICAweDEyLCAweGRhLCAweGY4LCAweGQ4LAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MTgsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZGIsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDB4MjgsCisgIDB4MjIsIDB4ZDksIDB4ZjcsCisgIDB4MjIsIDB4ZGIsIDB4ZTMsCisgIDB4MiwgMHhmYiwgMHhkYiwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZiLCAweGRiLCAweDM4LCAweDE4LAorICAweDEyLCAweGRmLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmIsIDB4ZGIsIDB4MzgsIDB4OCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHg4LAorICAweDEyLCAweGRiLCAweDM4LCAweDI4LAorICAweDEyLCAweGRiLCAweDM4LCAweDM4LAorICAweDEyLCAweGQ5LCAweGY4LCAweGMwLAorICAweDIsIDB4ZmIsIDB4ZDksIDB4MzgsIDAsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4ZTAsCisgIDB4MTIsIDB4ZGQsIDB4MzgsIDB4MjAsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4ZTgsCisgIDB4MTIsIDB4ZGQsIDB4MzgsIDB4MzAsCisgIDB4MTIsIDB4ZGQsIDB4MzgsIDB4MzgsCisgIDB4MTEsIDB4ZjQsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDI4LAorICAweDIzLCAweGYsIDB4YWYsIDAsIDAsCisgIDB4MiwgMHhmZCwgMHg2OSwgMCwgMCwKKyAgMHgxLCAweGZlLCAweGU0LAorICAweDEsIDB4ZmUsIDB4ZWMsCisgIDB4MiwgMHhmZSwgMHhmZSwgMHgzOCwgMCwKKyAgMHgxLCAweGY4LCAweDQwLAorICAweDEsIDB4ZmUsIDB4NmMsCisgIDB4MTEsIDB4Y2QsCisgIDB4MTEsIDB4Y2MsCisgIDB4MTEsIDB4Y2UsCisgIDB4MjIsIDB4ZiwgMHg4LAorICAweDMzLCAweGYsIDB4MSwgMHhmOCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MzgsCisgIDB4MTEsIDB4Y2YsCisgIDB4MSwgMHhmMCwgMHg3MCwKKyAgMHgxMiwgMHhmLCAweGYwLCAweDgwLAorICAweDEzLCAweGYsIDB4ZjAsIDB4OTAsIDB4MzgsIDAsCisgIDB4MTEsIDB4ZTMsCisgIDB4MTEsIDB4ZWIsCisgIDB4MTEsIDB4ZTksCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MjAsCisgIDB4MTEsIDB4ZWEsCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MjgsCisgIDB4MTEsIDB4OWYsCisgIDB4MjMsIDB4ZiwgMHgyLCAwLCAwLAorICAweDEyLCAweGM1LCAwLCAwLAorICAweDEyLCAweDhkLCAwLCAwLAorICAweDExLCAweGM5LAorICAweDEyLCAweGM0LCAwLCAwLAorICAweDIzLCAweGYsIDB4YjQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MTAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDE4LAorICAweDIzLCAweGYsIDAsIDB4MzgsIDB4MTAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDMwLAorICAweDExLCAweGYwLAorICAweDEsIDB4ZmUsIDB4YWMsCisgIDB4MTEsIDB4ZTIsCisgIDB4MTEsIDB4ZTEsCisgIDB4MTEsIDB4ZTAsCisgIDB4MjMsIDB4ZiwgMHgzLCAwLCAwLAorICAweDIzLCAweGYsIDB4YjIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHgxOCwKKyAgMHgyLCAweGZlLCAweDg4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4OGEsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhjNiwgMHgzOCwgMCwKKyAgMHgxLCAweGYwLCAweGIwLAorICAweDEsIDB4ZmUsIDB4YTAsCisgIDB4MSwgMHhmZSwgMHhhMiwKKyAgMHgyMywgMHhmLCAweDIwLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MjIsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgyMSwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDIzLCAweGMwLCAweGMwLAorICAweDEyLCAweDhjLCAwLCAwLAorICAweDEyLCAweDhlLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4YTQsCisgIDB4MjMsIDB4ZiwgMHhiZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJmLCAwLCAwLAorICAweDIzLCAweGYsIDB4YjYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiNywgMCwgMCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MTgsCisgIDB4MjIsIDB4ZjMsIDB4OTAsCisgIDB4MTEsIDB4OTAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhiOCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4OCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGEsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4OCwKKyAgMHgxLCAweGZlLCAweGMsCisgIDB4MSwgMHhmZSwgMHhlNiwKKyAgMHgxLCAweGZlLCAweGVlLAorICAweDEsIDB4ZmUsIDB4NmUsCisgIDB4MTIsIDB4OGYsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZiwgMHhjNywgMHg4MSwKKyAgMHgxMSwgMHg5ZCwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgzMCwKKyAgMHgxLCAweGY4LCAweDUwLAorICAweDEsIDB4ZjgsIDB4NTgsCisgIDB4MSwgMHhmZCwgMHg2OCwKKyAgMHgxLCAweGU3LCAweDYsCisgIDB4MTIsIDB4ZiwgMHhjNywgMHg4MCwKKyAgMHgxMSwgMHg2MCwKKyAgMHgxMSwgMHg2MSwKKyAgMHgxMSwgMHg5YywKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDE4LAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MTgsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgxOCwKKyAgMHgyMiwgMHhmLCAweDMyLAorICAweDIyLCAweGYsIDB4MzMsCisgIDB4MjIsIDB4ZiwgMHgzMSwKKyAgMHgxMSwgMHhjMywKKyAgMHgxMSwgMHhjMiwKKyAgMHgxMSwgMHhjYiwKKyAgMHgxMSwgMHhjYSwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAwLAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDgsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4OCwKKyAgMHgyMiwgMHhmLCAweGFhLAorICAweDExLCAweDllLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4MTgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgxYSwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDFjLAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MTgsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgxOCwKKyAgMHgxLCAweGZlLCAweGFlLAorICAweDEzLCAweGYsIDB4ZjAsIDB4OTAsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgyOCwKKyAgMHgyMywgMHhmLCAweGE0LCAwLCAwLAorICAweDIzLCAweGYsIDB4YTUsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgyOCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDI4LAorICAweDIzLCAweGYsIDB4YWMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhhZCwgMCwgMCwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzEsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGMyLAorICAweDMzLCAweGYsIDB4MSwgMHhjMywKKyAgMHgzMywgMHhmLCAweDEsIDB4YzQsCisgIDB4MjMsIDB4ZiwgMHg3OCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDc5LCAwLCAwLAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMCwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzgsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGM5LAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHg4LAorICAweDIzLCAweGYsIDAsIDB4MzgsIDAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDIwLAorICAweDExLCAweGY5LAorICAweDExLCAweGZkLAorICAweDExLCAweGZiLAorICAweDEsIDB4ZmUsIDB4YWEsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4MjgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgyYSwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDJjLAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MjgsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgyOCwKKyAgMHgyLCAweGZlLCAweDg0LCAwLCAwLAorICAweDEsIDB4ZmUsIDB4YTgsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMCwKKyAgMHgyMiwgMHhmLCAweGIsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHgyMCwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDI4LAorICAweDIyLCAweGYsIDB4OSwKKyAgMHgyMywgMHhmLCAweGQsIDB4MzgsIDAsCisgIDB4MjMsIDB4ZiwgMHhkLCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMHgxOCwgMHgzOCwgMCwKKyAgMHgyMywgMHhmLCAweDE4LCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMHgxOCwgMHgzOCwgMHgxMCwKKyAgMHgyMywgMHhmLCAweDE4LCAweDM4LCAweDE4LAorICAweDIzLCAweGYsIDB4MWYsIDAsIDAsCisgIDB4MjIsIDB4ZiwgMHgzMCwKKyAgMHgxMywgMHhmLCAweGZlLCAweGMwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ODYsIDAsIDAsCisgIDB4MSwgMHhmOCwgMHg5MCwKKyAgMHgxMSwgMHhkNywKKyAgMHgyLCAweGZlLCAweDMwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MzIsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHgzNCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDMwLAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4MzAsCisgIDB4MjIsIDB4ZiwgMHg3NywKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRiLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmNSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGViLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVmLCAwLCAwLAorICAweDIzLCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAwLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MSwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDIsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgzLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NCwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDUsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg2LAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NywKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAwLAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MSwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDIsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgzLAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NCwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDUsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg2LAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NywKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMCwKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAweDEwLAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDB4MTgsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgxMCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDEwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxMCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDExLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MTEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDExLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MTIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgxMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDEyLCAwLCAwLAorICAweDIzLCAweGYsIDB4MTIsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgxMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDEzLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MTMsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE1LCAwLCAwLAorICAweDIzLCAweGYsIDB4MTUsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgxNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE2LCAwLCAwLAorICAweDIzLCAweGYsIDB4MTYsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgxNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE3LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MTcsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxNywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDE3LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MjgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyOCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDI5LCAwLCAwLAorICAweDIzLCAweGYsIDB4MjksIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgyYSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDJhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJiLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmIsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgyYywgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDJjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJkLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MmQsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgyZCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJmLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmYsIDAsIDAsCisgIDB4MjIsIDB4ZiwgMHgzNywKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDUwLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4NTAsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1MSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDUxLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1MSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDUyLCAwLCAwLAorICAweDIzLCAweGYsIDB4NTIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1MywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDUzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTcsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NywgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDU4LCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1OCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU4LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NTksIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1OSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU5LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTksIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1YSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1YSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDViLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1YiwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVjLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1YywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVjLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWQsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1ZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVkLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWQsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1ZSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1ZSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVmLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1ZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2MCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDYxLCAwLCAwLAorICAweDIzLCAweGYsIDB4NjEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2MiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDYyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2MywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY0LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2NiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY3LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjcsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2OCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2OSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZhLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2YiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDZiLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2ZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZlLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2ZiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDZmLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDcwLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NzAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3MCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDc0LCAwLCAwLAorICAweDIzLCAweGYsIDB4NzQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDc1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3NiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDdjLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4N2MsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3ZCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDdkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4N2UsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg3ZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDdlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4N2YsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg3ZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDdmLCAwLCAwLAorICAweDIzLCAweGYsIDB4YzMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhjNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGM0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzUsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHhjNSwgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGM2LCAwLCAwLAorICAweDIzLCAweGYsIDB4YzYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQxLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQzLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQ0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkNSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ2LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4ZDYsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhkNiwgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ3LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4ZDcsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkOCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQ4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkOSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRhLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRlLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlMCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGUwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlMSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGUyLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGUzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU1LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlNywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU3LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlOCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU5LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTksIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlYSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVkLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVlLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4ZjAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGYxLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGYzLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY3LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4ZjcsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmOCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmOSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZhLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZiLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZkLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZlLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDAsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDEsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MiwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDQsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg0LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg2LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4NiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDcsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg3LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4OCwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDgsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg5LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4OSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweGEsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHhhLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4YiwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweGIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxYywgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDFjLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MWQsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgxZCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDFlLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MWUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhmLCAwLCAwLAorICAweDM0LCAweGYsIDB4M2EsIDB4ZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGM3LCAweDM4LCAweDMwLAorICAweDM0LCAweGYzLCAweGYsIDB4YzcsIDB4MzgsIDB4MzAsCisgIDB4MjMsIDB4ZiwgMHhjNywgMHgzOCwgMHgzMCwKKyAgMHgyMywgMHhmLCAweGM3LCAweDM4LCAweDM4LAorICAweDM0LCAweDY2LCAweGYsIDB4NzEsIDB4ZjgsIDB4ZDAsCisgIDB4MjMsIDB4ZiwgMHg3MSwgMHhmOCwgMHhkMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcxLCAweGY4LCAweGUwLAorICAweDIzLCAweGYsIDB4NzEsIDB4ZjgsIDB4ZTAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MSwgMHhmOCwgMHhmMCwKKyAgMHgyMywgMHhmLCAweDcxLCAweGY4LCAweGYwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzIsIDB4ZjgsIDB4ZDAsCisgIDB4MjMsIDB4ZiwgMHg3MiwgMHhmOCwgMHhkMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcyLCAweGY4LCAweGUwLAorICAweDIzLCAweGYsIDB4NzIsIDB4ZjgsIDB4ZTAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MiwgMHhmOCwgMHhmMCwKKyAgMHgyMywgMHhmLCAweDcyLCAweGY4LCAweGYwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzMsIDB4ZjgsIDB4ZDAsCisgIDB4MjMsIDB4ZiwgMHg3MywgMHhmOCwgMHhkMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDczLCAweGY4LCAweGQ4LAorICAweDM0LCAweDY2LCAweGYsIDB4NzMsIDB4ZjgsIDB4ZjAsCisgIDB4MjMsIDB4ZiwgMHg3MywgMHhmOCwgMHhmMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDczLCAweGY4LCAweGY4LAorICAweDMzLCAweGYsIDB4YWUsIDB4ZTgsCisgIDB4MzMsIDB4ZiwgMHhhZSwgMHhmMCwKKyAgMHgzMywgMHhmLCAweGFlLCAweGY4LAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDB4MzgsCisgIDB4MjMsIDB4ZiwgMHhmLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4YywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxNCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDE1LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NDAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg0MSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDIxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MmEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg0MiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDJiLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MTAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhlLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjksIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg2MSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDYwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NjMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg2MiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM3LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NDEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHgyMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDIyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2MsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzZCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNmLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2UsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzOCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM5LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2IsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzYSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyMiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIzLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyNSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzMiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMzLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzNSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDI4LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NDAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxNywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDgsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg5LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4YSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGIsIDAsIDAsCisgIDB4MSwgMHhlNywgMHg3LAorfTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L202OGtfYmFja2VuZC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvbTY4a19iYWNrZW5kLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI2MjFmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L202OGtfYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsMzA5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9tNjhrX2luaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL202OGtfaW5pdC5jCTIwMTAtMDQtMjQgMTA6MTE6MzguMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDQ5IEBACisrLyogSW5pdGlhbGl6YXRpb24gb2YgbTY4ayBzcGVjaWZpYyBiYWNrZW5kIGxpYnJhcnkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA3IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBUaGlzIHNvZnRhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNkZWZpbmUgQkFDS0VORAkJbTY4a18KKysjZGVmaW5lIFJFTE9DX1BSRUZJWAlSXzY4S18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIFRoaXMgZGVmaW5lcyB0aGUgY29tbW9uIHJlbG9jIGhvb2tzIGJhc2VkIG9uIG02OGtfcmVsb2MuZGVmLiAgKi8KKysjaW5jbHVkZSAiY29tbW9uLXJlbG9jLmMiCisrCisrCisrY29uc3QgY2hhciAqCisrbTY4a19pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKysgICAgIEVsZiAqZWxmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEdFbGZfSGFsZiBtYWNoaW5lIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEVibCAqZWg7CisrICAgICBzaXplX3QgZWhsZW47CisreworKyAgLyogQ2hlY2sgd2hldGhlciB0aGUgRWxmX0JIIG9iamVjdCBoYXMgYSBzdWZmaWNlbnQgc2l6ZS4gICovCisrICBpZiAoZWhsZW4gPCBzaXplb2YgKEVibCkpCisrICAgIHJldHVybiBOVUxMOworKworKyAgLyogV2UgaGFuZGxlIGl0LiAgKi8KKysgIGVoLT5uYW1lID0gIm02OGsiOworKyAgbTY4a19pbml0X3JlbG9jIChlaCk7CisrICBIT09LIChlaCwgcmVsb2Nfc2ltcGxlX3R5cGUpOworKyAgSE9PSyAoZWgsIHJlZ2lzdGVyX2luZm8pOworKworKyAgcmV0dXJuIE1PRFZFUlNJT047CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL202OGtfcmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbTY4a19yZWdzLmMJMjAxMC0wNC0yNCAxMDoxMTozOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsMTA2IEBACisrLyogUmVnaXN0ZXIgbmFtZXMgYW5kIG51bWJlcnMgZm9yIG02OGsgRFdBUkYuCisrICAgQ29weXJpZ2h0IChDKSAyMDA3IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIG02OGtfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKytzc2l6ZV90CisrbTY4a19yZWdpc3Rlcl9pbmZvIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkgICBpbnQgcmVnbm8sIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAorKwkJICAgY29uc3QgY2hhciAqKnByZWZpeCwgY29uc3QgY2hhciAqKnNldG5hbWUsCisrCQkgICBpbnQgKmJpdHMsIGludCAqdHlwZSkKKyt7CisrCWlmIChuYW1lID09IE5VTEwpCisrCQlyZXR1cm4gMjU7CisrCisrCWlmIChyZWdubyA8IDAgfHwgcmVnbm8gPiAyNCB8fCBuYW1lbGVuIDwgNSkKKysJCXJldHVybiAtMTsKKysKKysJKnByZWZpeCA9ICIlIjsKKysJKmJpdHMgPSAzMjsKKysJKnR5cGUgPSAocmVnbm8gPCA4ID8gRFdfQVRFX3NpZ25lZAorKwkJOiByZWdubyA8IDE2ID8gRFdfQVRFX2FkZHJlc3MgOiBEV19BVEVfZmxvYXQpOworKworKwlpZiAocmVnbm8gPCA4KQorKwl7CisrCQkqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysJfQorKwllbHNlIGlmIChyZWdubyA8IDE2KQorKwl7CisrCQkqc2V0bmFtZSA9ICJhZGRyZXNzIjsKKysJfQorKwllbHNlIGlmIChyZWdubyA8IDI0KQorKwl7CisrCQkqc2V0bmFtZSA9ICJGUFUiOworKwl9CisrCWVsc2UKKysJeworKwkJKnNldG5hbWUgPSAiYWRkcmVzcyI7CisrCQkqdHlwZSA9IERXX0FURV9hZGRyZXNzOworKwl9CisrCisrCXN3aXRjaCAocmVnbm8pCisrCXsKKysJY2FzZSAwIC4uLiA3OgorKwkJbmFtZVswXSA9ICdkJzsKKysJCW5hbWVbMV0gPSByZWdubyArICcwJzsKKysJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgOCAuLi4gMTM6CisrCQluYW1lWzBdID0gJ2EnOworKwkJbmFtZVsxXSA9IHJlZ25vIC0gOCArICcwJzsKKysJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgMTQ6CisrCQluYW1lWzBdID0gJ2YnOworKwkJbmFtZVsxXSA9ICdwJzsKKysgICAJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgMTU6CisrCQluYW1lWzBdID0gJ3MnOworKwkJbmFtZVsxXSA9ICdwJzsKKysgICAJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgMTYgLi4uIDIzOgorKwkJbmFtZVswXSA9ICdmJzsKKysJCW5hbWVbMV0gPSAncCc7CisrCQluYW1lWzJdID0gcmVnbm8gLSAxNiArICcwJzsKKysgICAJCW5hbWVsZW4gPSAzOworKwkJYnJlYWs7CisrCisrCWNhc2UgMjQ6CisrCQluYW1lWzBdID0gJ3AnOworKwkJbmFtZVsxXSA9ICdjJzsKKysJCW5hbWVsZW4gPSAyOworKwl9CisrCisrCW5hbWVbbmFtZWxlbisrXSA9ICdcMCc7CisrCXJldHVybiBuYW1lbGVuOworK30KKysKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9tNjhrX3JlbG9jLmRlZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL202OGtfcmVsb2MuZGVmCTIwMTAtMDQtMjQgMTA6MTE6MzguMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDQ1IEBACisrLyogTGlzdCB0aGUgcmVsb2NhdGlvbiB0eXBlcyBmb3IgbTY4ay4gIC0qLSBDIC0qLQorKyAgIENvcHlyaWdodCAoQykgMjAwNyBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrKi8KKysKKysvKiAJICAgIE5BTUUsCQlSRUx8RVhFQ3xEWU4JKi8KKysKKytSRUxPQ19UWVBFIChOT05FLAkJMCkKKytSRUxPQ19UWVBFICgzMiwJCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoMTYsCQkJUkVMKQorK1JFTE9DX1RZUEUgKDgsCQkJUkVMKQorK1JFTE9DX1RZUEUgKFBDMzIsCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoUEMxNiwJCVJFTCkKKytSRUxPQ19UWVBFIChQQzgsCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UMTYsCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UOCwJCVJFTCkKKytSRUxPQ19UWVBFIChHT1QzMk8sCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UMTZPLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDhPLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDE2LAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDgsCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUMzJPLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDE2TywJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQ4TywJCVJFTCkKKytSRUxPQ19UWVBFIChDT1BZLAkJRVhFQykKKytSRUxPQ19UWVBFIChHTE9CX0RBVCwJCUVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKEpNUF9TTE9ULAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoUkVMQVRJVkUsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChHTlVfVlRJTkhFUklULAlSRUwpCisrUkVMT0NfVFlQRSAoR05VX1ZURU5UUlksCVJFTCkKKysKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9saWJlbGYvZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0Ni5vcmlnL2xpYmVsZi9lbGYuaAkyMDEwLTA0LTI0IDEwOjExOjEzLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAkyMDEwLTA0LTI0IDEwOjEzOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTExMjUsNiArMTEyNSw5IEBACisgI2RlZmluZSBSXzY4S19HTE9CX0RBVAkyMAkJLyogQ3JlYXRlIEdPVCBlbnRyeSAqLworICNkZWZpbmUgUl82OEtfSk1QX1NMT1QJMjEJCS8qIENyZWF0ZSBQTFQgZW50cnkgKi8KKyAjZGVmaW5lIFJfNjhLX1JFTEFUSVZFCTIyCQkvKiBBZGp1c3QgYnkgcHJvZ3JhbSBiYXNlICovCisrLyogVGhlIG5leHQgMiBhcmUgR05VIGV4dGVuc2lvbnMgdG8gZW5hYmxlIEMrKyB2dGFibGUgZ2FyYmFnZSBjb2xsZWN0aW9uLiAgKi8KKysjZGVmaW5lIFJfNjhLX0dOVV9WVElOSEVSSVQgMjMKKysjZGVmaW5lIFJfNjhLX0dOVV9WVEVOVFJZICAgMjQKKyAjZGVmaW5lIFJfNjhLX1RMU19HRDMyICAgICAgMjUgICAgICAgICAgLyogMzIgYml0IEdPVCBvZmZzZXQgZm9yIEdEICovCisgI2RlZmluZSBSXzY4S19UTFNfR0QxNiAgICAgIDI2ICAgICAgICAgIC8qIDE2IGJpdCBHT1Qgb2Zmc2V0IGZvciBHRCAqLworICNkZWZpbmUgUl82OEtfVExTX0dEOCAgICAgICAyNyAgICAgICAgICAvKiA4IGJpdCBHT1Qgb2Zmc2V0IGZvciBHRCAqLworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDYub3JpZy9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDEwLTA0LTI0IDEwOjExOjIzLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTAtMDQtMjQgMTA6MTE6MzguMDAwMDAwMDAwICswMDAwCitAQCAtMjksMTEgKzI5LDEyIEBACisgCSAgIC1JJCh0b3Bfc3JjZGlyKS9saWJlbGYgLUkkKHRvcF9zcmNkaXIpL2xpYmR3CisgCisgCistbW9kdWxlcyA9IGkzODYgc2ggeDg2XzY0IGlhNjQgYWxwaGEgYXJtIHNwYXJjIHBwYyBwcGM2NCBzMzkwIHBhcmlzYyBtaXBzCisrbW9kdWxlcyA9IGkzODYgc2ggeDg2XzY0IGlhNjQgYWxwaGEgYXJtIHNwYXJjIHBwYyBwcGM2NCBzMzkwIHBhcmlzYyBtaXBzIG02OGsKKyBsaWJlYmxfcGljID0gbGliZWJsX2kzODZfcGljLmEgbGliZWJsX3NoX3BpYy5hIGxpYmVibF94ODZfNjRfcGljLmEgXAorIAkgICAgIGxpYmVibF9pYTY0X3BpYy5hIGxpYmVibF9hbHBoYV9waWMuYSBsaWJlYmxfYXJtX3BpYy5hIFwKKyAJICAgICBsaWJlYmxfc3BhcmNfcGljLmEgbGliZWJsX3BwY19waWMuYSBsaWJlYmxfcHBjNjRfcGljLmEgXAorLQkgICAgIGxpYmVibF9zMzkwX3BpYy5hIGxpYmVibF9wYXJpc2NfcGljLmEgbGliZWJsX21pcHNfcGljLmEKKysJICAgICBsaWJlYmxfczM5MF9waWMuYSBsaWJlYmxfcGFyaXNjX3BpYy5hIGxpYmVibF9taXBzX3BpYy5hIFwKKysJICAgICBsaWJlYmxfbTY4a19waWMuYQorIG5vaW5zdF9MSUJSQVJJRVMgPSAkKGxpYmVibF9waWMpCisgbm9pbnN0X0RBVEEgPSAkKGxpYmVibF9waWM6X3BpYy5hPS5zbykKKyAKK0BAIC0xMDMsNiArMTA0LDEwIEBACisgbGliZWJsX21pcHNfcGljX2FfU09VUkNFUyA9ICQobWlwc19TUkNTKQorIGFtX2xpYmVibF9taXBzX3BpY19hX09CSkVDVFMgPSAkKG1pcHNfU1JDUzouYz0ub3MpCisgCisrbTY4a19TUkNTID0gbTY4a19pbml0LmMgbTY4a19zeW1ib2wuYyBtNjhrX3JlZ3MuYworK2xpYmVibF9tNjhrX3BpY19hX1NPVVJDRVMgPSAkKG02OGtfU1JDUykKKythbV9saWJlYmxfbTY4a19waWNfYV9PQkpFQ1RTID0gJChtNjhrX1NSQ1M6LmM9Lm9zKQorKworIGxpYmVibF8lLnNvIGxpYmVibF8lLm1hcDogbGliZWJsXyVfcGljLmEgJChsaWJlbGYpICQobGliZHcpCisgCUBybSAtZiAkKEA6LnNvPS5tYXApCisgCWVjaG8gJ0VMRlVUSUxTXyQoUEFDS0FHRV9WRVJTSU9OKSB7IGdsb2JhbDogJCpfaW5pdDsgbG9jYWw6ICo7IH07JyBcCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbTY4a19zeW1ib2wuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL202OGtfc3ltYm9sLmMJMjAxMC0wNC0yNCAxMDoxMTozOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNDMgQEAKKysvKiBtNjhrIHNwZWNpZmljIHN5bWJvbGljIG5hbWUgaGFuZGxpbmcuCisrICAgQ29weXJpZ2h0IChDKSAyMDA3IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBUaGlzIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8ZWxmLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKyNkZWZpbmUgQkFDS0VORAkJbTY4a18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIENoZWNrIGZvciB0aGUgc2ltcGxlIHJlbG9jIHR5cGVzLiAgKi8KKytFbGZfVHlwZQorK202OGtfcmVsb2Nfc2ltcGxlX3R5cGUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50IHR5cGUpCisreworKyAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgIGNhc2UgUl82OEtfMzI6CisrICAgICAgcmV0dXJuIEVMRl9UX1NXT1JEOworKyAgICBjYXNlIFJfNjhLXzE2OgorKyAgICAgIHJldHVybiBFTEZfVF9IQUxGOworKyAgICBjYXNlIFJfNjhLXzg6CisrICAgICAgcmV0dXJuIEVMRl9UX0JZVEU7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEVMRl9UX05VTTsKKysgICAgfQorK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L21pcHNfYmFja2VuZC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvbWlwc19iYWNrZW5kLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y4MWE3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L21pcHNfYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsNzEzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX2luaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfaW5pdC5jCTIwMTAtMDItMjQgMTg6NTc6MzUuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDYwIEBACisrLyogSW5pdGlhbGl6YXRpb24gb2YgbWlwcyBzcGVjaWZpYyBiYWNrZW5kIGxpYnJhcnkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA2IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2RlZmluZSBCQUNLRU5ECQltaXBzXworKyNkZWZpbmUgUkVMT0NfUFJFRklYCVJfTUlQU18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIFRoaXMgZGVmaW5lcyB0aGUgY29tbW9uIHJlbG9jIGhvb2tzIGJhc2VkIG9uIG1pcHNfcmVsb2MuZGVmLiAgKi8KKysjaW5jbHVkZSAiY29tbW9uLXJlbG9jLmMiCisrCisrY29uc3QgY2hhciAqCisrbWlwc19pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKysgICAgIEVsZiAqZWxmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEdFbGZfSGFsZiBtYWNoaW5lIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEVibCAqZWg7CisrICAgICBzaXplX3QgZWhsZW47CisreworKyAgLyogQ2hlY2sgd2hldGhlciB0aGUgRWxmX0JIIG9iamVjdCBoYXMgYSBzdWZmaWNlbnQgc2l6ZS4gICovCisrICBpZiAoZWhsZW4gPCBzaXplb2YgKEVibCkpCisrICAgIHJldHVybiBOVUxMOworKworKyAgLyogV2UgaGFuZGxlIGl0LiAgKi8KKysgIGlmIChtYWNoaW5lID09IEVNX01JUFMpCisrICAgIGVoLT5uYW1lID0gIk1JUFMgUjMwMDAgYmlnLWVuZGlhbiI7CisrICBlbHNlIGlmIChtYWNoaW5lID09IEVNX01JUFNfUlMzX0xFKQorKyAgICBlaC0+bmFtZSA9ICJNSVBTIFIzMDAwIGxpdHRsZS1lbmRpYW4iOworKworKyAgbWlwc19pbml0X3JlbG9jIChlaCk7CisrICBIT09LIChlaCwgcmVsb2Nfc2ltcGxlX3R5cGUpOworKyAgSE9PSyAoZWgsIHJldHVybl92YWx1ZV9sb2NhdGlvbik7CisrICBIT09LIChlaCwgcmVnaXN0ZXJfaW5mbyk7CisrCisrICByZXR1cm4gTU9EVkVSU0lPTjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19yZWdzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX3JlZ3MuYwkyMDEwLTAyLTI0IDE4OjU3OjM1LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwxMDQgQEAKKysvKiBSZWdpc3RlciBuYW1lcyBhbmQgbnVtYmVycyBmb3IgTUlQUyBEV0FSRi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIG1pcHNfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKytzc2l6ZV90CisrbWlwc19yZWdpc3Rlcl9pbmZvIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSwKKysJCSAgICBpbnQgcmVnbm8sIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAorKwkJICAgIGNvbnN0IGNoYXIgKipwcmVmaXgsIGNvbnN0IGNoYXIgKipzZXRuYW1lLAorKwkJICAgIGludCAqYml0cywgaW50ICp0eXBlKQorK3sKKysgIGlmIChuYW1lID09IE5VTEwpCisrICAgIHJldHVybiA2NjsKKysKKysgIGlmIChyZWdubyA8IDAgfHwgcmVnbm8gPiA2NSB8fCBuYW1lbGVuIDwgNCkKKysgICAgcmV0dXJuIC0xOworKworKyAgKnByZWZpeCA9ICIkIjsKKysKKysgIGlmIChyZWdubyA8IDMyKQorKyAgICB7CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgaWYgKHJlZ25vIDwgMzIgKyAxMCkKKysgICAgICAgIHsKKysgICAgICAgICAgbmFtZVswXSA9IHJlZ25vICsgJzAnOworKyAgICAgICAgICBuYW1lbGVuID0gMTsKKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgIG5hbWVbMF0gPSAocmVnbm8gLyAxMCkgKyAnMCc7CisrICAgICAgICAgIG5hbWVbMV0gPSAocmVnbm8gJSAxMCkgKyAnMCc7CisrICAgICAgICAgIG5hbWVsZW4gPSAyOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChyZWdubyA8IDY0KQorKyAgICB7CisrICAgICAgKnNldG5hbWUgPSAiRlBVIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIG5hbWVbMF0gPSAnZic7CisrICAgICAgaWYgKHJlZ25vIDwgMzIgKyAxMCkKKysJeworKwkgIG5hbWVbMV0gPSAocmVnbm8gLSAzMikgKyAnMCc7CisrCSAgbmFtZWxlbiA9IDI7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBuYW1lWzFdID0gKHJlZ25vIC0gMzIpIC8gMTAgKyAnMCc7CisrCSAgbmFtZVsyXSA9IChyZWdubyAtIDMyKSAlIDEwICsgJzAnOworKwkgIG5hbWVsZW4gPSAzOworKwl9CisrICAgIH0KKysgIGVsc2UgaWYgKHJlZ25vID09IDY0KQorKyAgICB7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgbmFtZVswXSA9ICdoJzsKKysgICAgICBuYW1lWzFdID0gJ2knOworKyAgICAgIG5hbWVsZW4gPSAyOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBuYW1lWzBdID0gJ2wnOworKyAgICAgIG5hbWVbMV0gPSAnbyc7CisrICAgICAgbmFtZWxlbiA9IDI7CisrICAgIH0KKysKKysgIG5hbWVbbmFtZWxlbisrXSA9ICdcMCc7CisrICByZXR1cm4gbmFtZWxlbjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19yZWxvYy5kZWYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX3JlbG9jLmRlZgkyMDEwLTAyLTI0IDE4OjU3OjM1LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw3OSBAQAorKy8qIExpc3QgdGhlIHJlbG9jYXRpb24gdHlwZXMgZm9yIG1pcHMuICAtKi0gQyAtKi0KKysgICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKy8qIAkgICAgTkFNRSwJCVJFTHxFWEVDfERZTgkqLworKworK1JFTE9DX1RZUEUgKE5PTkUsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFICgxNiwgICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoMzIsICAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFJFTDMyLCAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFICgyNiwgICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSEkxNiwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKExPMTYsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHUFJFTDE2LCAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoTElURVJBTCwgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVDE2LCAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChQQzE2LCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoQ0FMTDE2LCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdQUkVMMzIsICAgICAgICAgICAgMCkKKysKKytSRUxPQ19UWVBFIChTSElGVDUsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoU0hJRlQ2LCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDY0LCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfRElTUCwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX1BBR0UsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9PRlNULCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfSEkxNiwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX0xPMTYsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFNVQiwgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChJTlNFUlRfQSwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSU5TRVJUX0IsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKERFTEVURSwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChISUdIRVIsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSElHSEVTVCwgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKENBTExfSEkxNiwgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChDQUxMX0xPMTYsICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoU0NOX0RJU1AsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFJFTDE2LCAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChBRERfSU1NRURJQVRFLCAgICAgIDApCisrUkVMT0NfVFlQRSAoUEpVTVAsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFJFTEdPVCwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChKQUxSLCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUE1PRDMyLCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBSRUwzMiwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9ENjQsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUFJFTDY0LCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19HRCwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfTERNLCAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUFJFTF9ISTE2LCAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBSRUxfTE8xNiwgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfR09UVFBSRUwsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX1RQUkVMMzIsICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19UUFJFTDY0LCAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUxfSEkxNiwgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX1RQUkVMX0xPMTYsICAgICAwKQorKworKyNkZWZpbmUgTk9fQ09QWV9SRUxPQyAxCisrI2RlZmluZSBOT19SRUxBVElWRV9SRUxPQyAxCitJbmRleDogZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19yZXR2YWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfcmV0dmFsLmMJMjAxMC0wMi0yNCAxODo1NzozNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsMzIxIEBACisrLyogRnVuY3Rpb24gcmV0dXJuIHZhbHVlIGxvY2F0aW9uIGZvciBMaW51eC9taXBzIEFCSS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKyNpbmNsdWRlIDxlbGYuaD4KKysKKysjaW5jbHVkZSAiLi4vbGliZWJsL2xpYmVibFAuaCIKKysjaW5jbHVkZSAiLi4vbGliZHcvbGliZHdQLmgiCisrCisrI2RlZmluZSBCQUNLRU5EIG1pcHNfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKysvKiBUaGUgQUJJIG9mIHRoZSBmaWxlLiAgQWxzbyBzZWUgRUZfTUlQU19BQkkyIGFib3ZlLiAqLworKyNkZWZpbmUgRUZfTUlQU19BQkkJCTB4MDAwMEYwMDAKKysKKysvKiBUaGUgb3JpZ2luYWwgbzMyIGFiaS4gKi8KKysjZGVmaW5lIEVfTUlQU19BQklfTzMyICAgICAgICAgIDB4MDAwMDEwMDAKKysKKysvKiBPMzIgZXh0ZW5kZWQgdG8gd29yayBvbiA2NCBiaXQgYXJjaGl0ZWN0dXJlcyAqLworKyNkZWZpbmUgRV9NSVBTX0FCSV9PNjQgICAgICAgICAgMHgwMDAwMjAwMAorKworKy8qIEVBQkkgaW4gMzIgYml0IG1vZGUgKi8KKysjZGVmaW5lIEVfTUlQU19BQklfRUFCSTMyICAgICAgIDB4MDAwMDMwMDAKKysKKysvKiBFQUJJIGluIDY0IGJpdCBtb2RlICovCisrI2RlZmluZSBFX01JUFNfQUJJX0VBQkk2NCAgICAgICAweDAwMDA0MDAwCisrCisrLyogQWxsIHRoZSBwb3NzaWJsZSBNSVBTIEFCSXMuICovCisrZW51bSBtaXBzX2FiaQorKyAgeworKyAgICBNSVBTX0FCSV9VTktOT1dOID0gMCwKKysgICAgTUlQU19BQklfTjMyLAorKyAgICBNSVBTX0FCSV9PMzIsCisrICAgIE1JUFNfQUJJX042NCwKKysgICAgTUlQU19BQklfTzY0LAorKyAgICBNSVBTX0FCSV9FQUJJMzIsCisrICAgIE1JUFNfQUJJX0VBQkk2NCwKKysgICAgTUlQU19BQklfTEFTVAorKyAgfTsKKysKKysvKiBGaW5kIHRoZSBtaXBzIEFCSSBvZiB0aGUgY3VycmVudCBmaWxlICovCisrZW51bSBtaXBzX2FiaSBmaW5kX21pcHNfYWJpKEVsZiAqZWxmKQorK3sKKysgIEdFbGZfRWhkciBlaGRyX21lbTsKKysgIEdFbGZfRWhkciAqZWhkciA9IGdlbGZfZ2V0ZWhkciAoZWxmLCAmZWhkcl9tZW0pOworKworKyAgaWYgKGVoZHIgPT0gTlVMTCkKKysgICAgcmV0dXJuIE1JUFNfQUJJX0xBU1Q7CisrCisrICBHRWxmX1dvcmQgZWxmX2ZsYWdzID0gZWhkci0+ZV9mbGFnczsKKysKKysgIC8qIENoZWNrIGVsZl9mbGFncyB0byBzZWUgaWYgaXQgc3BlY2lmaWVzIHRoZSBBQkkgYmVpbmcgdXNlZC4gICovCisrICBzd2l0Y2ggKChlbGZfZmxhZ3MgJiBFRl9NSVBTX0FCSSkpCisrICAgIHsKKysgICAgY2FzZSBFX01JUFNfQUJJX08zMjoKKysgICAgICByZXR1cm4gTUlQU19BQklfTzMyOworKyAgICBjYXNlIEVfTUlQU19BQklfTzY0OgorKyAgICAgIHJldHVybiBNSVBTX0FCSV9PNjQ7CisrICAgIGNhc2UgRV9NSVBTX0FCSV9FQUJJMzI6CisrICAgICAgcmV0dXJuIE1JUFNfQUJJX0VBQkkzMjsKKysgICAgY2FzZSBFX01JUFNfQUJJX0VBQkk2NDoKKysgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTY0OworKyAgICBkZWZhdWx0OgorKyAgICAgIGlmICgoZWxmX2ZsYWdzICYgRUZfTUlQU19BQkkyKSkKKysJcmV0dXJuIE1JUFNfQUJJX04zMjsKKysgICAgfQorKworKyAgLyogR0NDIGNyZWF0ZXMgYSBwc2V1ZG8tc2VjdGlvbiB3aG9zZSBuYW1lIGRlc2NyaWJlcyB0aGUgQUJJLiAgKi8KKysgIHNpemVfdCBzaHN0cm5keDsKKysgIGlmIChlbGZfZ2V0c2hkcnN0cm5keCAoZWxmLCAmc2hzdHJuZHgpIDwgMCkKKysgICAgcmV0dXJuIE1JUFNfQUJJX0xBU1Q7CisrCisrICBjb25zdCBjaGFyICpuYW1lOworKyAgRWxmX1NjbiAqc2NuID0gTlVMTDsKKysgIHdoaWxlICgoc2NuID0gZWxmX25leHRzY24gKGVsZiwgc2NuKSkgIT0gTlVMTCkKKysgICAgeworKyAgICAgIEdFbGZfU2hkciBzaGRyX21lbTsKKysgICAgICBHRWxmX1NoZHIgKnNoZHIgPSBnZWxmX2dldHNoZHIgKHNjbiwgJnNoZHJfbWVtKTsKKysgICAgICBpZiAoc2hkciA9PSBOVUxMKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX0xBU1Q7CisrCisrICAgICAgbmFtZSA9IGVsZl9zdHJwdHIgKGVsZiwgc2hzdHJuZHgsIHNoZHItPnNoX25hbWUpID86ICIiOworKyAgICAgIGlmIChzdHJuY21wIChuYW1lLCAiLm1kZWJ1Zy4iLCA4KSAhPSAwKQorKyAgICAgICAgY29udGludWU7CisrCisrICAgICAgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpMzIiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX08zMjsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmFiaU4zMiIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTjMyOworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpNjQiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX042NDsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmFiaU82NCIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTzY0OworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuZWFiaTMyIikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9FQUJJMzI7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5lYWJpNjQiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX0VBQkk2NDsKKysgICAgICBlbHNlCisrICAgICAgICByZXR1cm4gTUlQU19BQklfVU5LTk9XTjsKKysgICAgfQorKworKyAgcmV0dXJuIE1JUFNfQUJJX1VOS05PV047CisrfQorKworK3Vuc2lnbmVkIGludAorK21pcHNfYWJpX3JlZ3NpemUgKGVudW0gbWlwc19hYmkgYWJpKQorK3sKKysgIHN3aXRjaCAoYWJpKQorKyAgICB7CisrICAgIGNhc2UgTUlQU19BQklfRUFCSTMyOgorKyAgICBjYXNlIE1JUFNfQUJJX08zMjoKKysgICAgICByZXR1cm4gNDsKKysgICAgY2FzZSBNSVBTX0FCSV9OMzI6CisrICAgIGNhc2UgTUlQU19BQklfTjY0OgorKyAgICBjYXNlIE1JUFNfQUJJX082NDoKKysgICAgY2FzZSBNSVBTX0FCSV9FQUJJNjQ6CisrICAgICAgcmV0dXJuIDg7CisrICAgIGNhc2UgTUlQU19BQklfVU5LTk9XTjoKKysgICAgY2FzZSBNSVBTX0FCSV9MQVNUOgorKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiAwOworKyAgICB9CisrfQorKworKworKy8qICR2MCBvciBwYWlyICR2MCwgJHYxICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWdfbzMyW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWczIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgIH07CisrCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfaW50cmVnCTEKKysjZGVmaW5lIG5sb2NfaW50cmVncGFpcgk0CisrCisrLyogJGYwIChmbG9hdCksIG9yIHBhaXIgJGYwLCAkZjEgKGRvdWJsZSkuCisrICogZjIvZjMgYXJlIHVzZWQgZm9yIENPTVBMRVggKD0gMiBkb3VibGVzKSByZXR1cm5zIGluIEZvcnRyYW4gKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnX28zMltdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzMiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDM0IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzNSB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworKworKy8qICRmMCwgb3IgcGFpciAkZjAsICRmMi4gICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzMiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzQgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWcgIDEKKysjZGVmaW5lIG5sb2NfZnByZWdwYWlyIDQKKysjZGVmaW5lIG5sb2NfZnByZWdxdWFkIDgKKysKKysvKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0dXJlIGFuZCBpcyBhY3R1YWxseSBzdG9yZWQgaW4gc3RhY2sgc3BhY2UKKysgICBwYXNzZWQgaW4gYSBoaWRkZW4gYXJndW1lbnQgYnkgdGhlIGNhbGxlci4gIEJ1dCwgdGhlIGNvbXBpbGVyCisrICAgaGVscGZ1bGx5IHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhhdCBzcGFjZSBpbiAkdjAuICAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfYWdncmVnYXRlW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfYnJlZzIsIC5udW1iZXIgPSAwIH0KKysgIH07CisrI2RlZmluZSBubG9jX2FnZ3JlZ2F0ZSAxCisrCisraW50CisrbWlwc19yZXR1cm5fdmFsdWVfbG9jYXRpb24gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICAvKiBGaXJzdCBmaW5kIHRoZSBBQkkgdXNlZCBieSB0aGUgZWxmIG9iamVjdCAqLworKyAgZW51bSBtaXBzX2FiaSBhYmkgPSBmaW5kX21pcHNfYWJpKGZ1bmN0eXBlZGllLT5jdS0+ZGJnLT5lbGYpOworKworKyAgLyogU29tZXRoaW5nIHdlbnQgc2VyaW91c2x5IHdyb25nIHdoaWxlIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBBQkkgKi8KKysgIGlmIChhYmkgPT0gTUlQU19BQklfTEFTVCkKKysgICAgcmV0dXJuIC0xOworKworKyAgLyogV2UgY291bGRuJ3QgaWRlbnRpZnkgdGhlIEFCSSwgYnV0IHRoZSBmaWxlIHNlZW1zIHZhbGlkICovCisrICBpZiAoYWJpID09IE1JUFNfQUJJX1VOS05PV04pCisrICAgIHJldHVybiAtMjsKKysKKysgIC8qIENhbid0IGhhbmRsZSBFQUJJIHZhcmlhbnRzICovCisrICBpZiAoKGFiaSA9PSBNSVBTX0FCSV9FQUJJMzIpIHx8IChhYmkgPT0gTUlQU19BQklfRUFCSTY0KSkKKysgICAgcmV0dXJuIC0yOworKworKyAgdW5zaWduZWQgaW50IHJlZ3NpemUgPSBtaXBzX2FiaV9yZWdzaXplIChhYmkpOworKyAgaWYgKCFyZWdzaXplKQorKyAgICByZXR1cm4gLTI7CisrCisrICAvKiBTdGFydCB3aXRoIHRoZSBmdW5jdGlvbidzIHR5cGUsIGFuZCBnZXQgdGhlIERXX0FUX3R5cGUgYXR0cmlidXRlLAorKyAgICAgd2hpY2ggaXMgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZS4gICovCisrCisrICBEd2FyZl9BdHRyaWJ1dGUgYXR0cl9tZW07CisrICBEd2FyZl9BdHRyaWJ1dGUgKmF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAoZnVuY3R5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrICBpZiAoYXR0ciA9PSBOVUxMKQorKyAgICAvKiBUaGUgZnVuY3Rpb24gaGFzIG5vIHJldHVybiB2YWx1ZSwgbGlrZSBhIGB2b2lkJyBmdW5jdGlvbiBpbiBDLiAgKi8KKysgICAgcmV0dXJuIDA7CisrCisrICBEd2FyZl9EaWUgZGllX21lbTsKKysgIER3YXJmX0RpZSAqdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrICBpbnQgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysKKysgIC8qIEZvbGxvdyB0eXBlZGVmcyBhbmQgcXVhbGlmaWVycyB0byBnZXQgdG8gdGhlIGFjdHVhbCB0eXBlLiAgKi8KKysgIHdoaWxlICh0YWcgPT0gRFdfVEFHX3R5cGVkZWYKKysJIHx8IHRhZyA9PSBEV19UQUdfY29uc3RfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3ZvbGF0aWxlX3R5cGUKKysJIHx8IHRhZyA9PSBEV19UQUdfcmVzdHJpY3RfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX211dGFibGVfdHlwZSkKKysgICAgeworKyAgICAgIGF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgICAgICB0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgICAgICB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKyAgICB9CisrCisrICBzd2l0Y2ggKHRhZykKKysgICAgeworKyAgICBjYXNlIC0xOgorKyAgICAgIHJldHVybiAtMTsKKysKKysgICAgY2FzZSBEV19UQUdfc3VicmFuZ2VfdHlwZToKKysgICAgICBpZiAoISBkd2FyZl9oYXNhdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplKSkKKysJeworKwkgIGF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysJICB0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysJICB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKwl9CisrICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKysKKysgICAgY2FzZSBEV19UQUdfYmFzZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19lbnVtZXJhdGlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19wb2ludGVyX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZToKKysgICAgICB7CisrICAgICAgICBEd2FyZl9Xb3JkIHNpemU7CisrCWlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUsCisrCQkJCQkgJmF0dHJfbWVtKSwgJnNpemUpICE9IDApCisrCSAgeworKwkgICAgaWYgKHRhZyA9PSBEV19UQUdfcG9pbnRlcl90eXBlIHx8IHRhZyA9PSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlKQorKwkgICAgICBzaXplID0gcmVnc2l6ZTsKKysJICAgIGVsc2UKKysJICAgICAgcmV0dXJuIC0xOworKwkgIH0KKysJaWYgKHRhZyA9PSBEV19UQUdfYmFzZV90eXBlKQorKwkgIHsKKysJICAgIER3YXJmX1dvcmQgZW5jb2Rpbmc7CisrCSAgICBpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfZW5jb2RpbmcsCisrCQkJCQkgICAgICZhdHRyX21lbSksICZlbmNvZGluZykgIT0gMCkKKysJICAgICAgcmV0dXJuIC0xOworKworKyNkZWZpbmUgQUJJX0xPQyhsb2MsIHJlZ3NpemUpICgocmVnc2l6ZSkgPT0gNCA/IChsb2MgIyMgX28zMikgOiAobG9jKSkKKysKKysJICAgIGlmIChlbmNvZGluZyA9PSBEV19BVEVfZmxvYXQpCisrCSAgICAgIHsKKysJCSpsb2NwID0gQUJJX0xPQyhsb2NfZnByZWcsIHJlZ3NpemUpOworKwkJaWYgKHNpemUgPD0gcmVnc2l6ZSkKKysJCSAgICByZXR1cm4gbmxvY19mcHJlZzsKKysKKysJCWlmIChzaXplIDw9IDIqcmVnc2l6ZSkKKysgICAgICAgICAgICAgICAgICByZXR1cm4gbmxvY19mcHJlZ3BhaXI7CisrCisrCQlpZiAoc2l6ZSA8PSA0KnJlZ3NpemUgJiYgYWJpID09IE1JUFNfQUJJX08zMikKKysgICAgICAgICAgICAgICAgICByZXR1cm4gbmxvY19mcHJlZ3F1YWQ7CisrCisrCQlnb3RvIGFnZ3JlZ2F0ZTsKKysJICAgICAgfQorKwkgIH0KKysJKmxvY3AgPSBBQklfTE9DKGxvY19pbnRyZWcsIHJlZ3NpemUpOworKwlpZiAoc2l6ZSA8PSByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZzsKKysJaWYgKHNpemUgPD0gMipyZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZ3BhaXI7CisrCisrCS8qIEVsc2UgZmFsbCB0aHJvdWdoLiBTaG91bGRuJ3QgaGFwcGVuIHRob3VnaCAoYXQgbGVhc3Qgd2l0aCBnY2MpICovCisrICAgICAgfQorKworKyAgICBjYXNlIERXX1RBR19zdHJ1Y3R1cmVfdHlwZToKKysgICAgY2FzZSBEV19UQUdfY2xhc3NfdHlwZToKKysgICAgY2FzZSBEV19UQUdfdW5pb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfYXJyYXlfdHlwZToKKysgICAgYWdncmVnYXRlOgorKyAgICAgIC8qIFhYWCBUT0RPOiBDYW4ndCBoYW5kbGUgc3RydWN0dXJlIHJldHVybiB3aXRoIG90aGVyIEFCSSdzIHlldCA6LS8gKi8KKysgICAgICBpZiAoKGFiaSAhPSBNSVBTX0FCSV9PMzIpICYmIChhYmkgIT0gTUlQU19BQklfTzY0KSkKKysgICAgICAgIHJldHVybiAtMjsKKysKKysgICAgICAqbG9jcCA9IGxvY19hZ2dyZWdhdGU7CisrICAgICAgcmV0dXJuIG5sb2NfYWdncmVnYXRlOworKyAgICB9CisrCisrICAvKiBYWFggV2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIHJldHVybiBzcGVjaWZpYyBlcnJvcnMgZnJvbSBlYmwgY2FsbHMuCisrICAgICBUaGlzIHZhbHVlIG1lYW5zIHdlIGRvIG5vdCB1bmRlcnN0YW5kIHRoZSB0eXBlLCBidXQgaXQgaXMgd2VsbC1mb3JtZWQKKysgICAgIERXQVJGIGFuZCBtaWdodCBiZSB2YWxpZC4gICovCisrICByZXR1cm4gLTI7CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfc3ltYm9sLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX3N5bWJvbC5jCTIwMTAtMDItMjQgMTg6NTc6MzUuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDUyIEBACisrLyogTUlQUyBzcGVjaWZpYyBzeW1ib2xpYyBuYW1lIGhhbmRsaW5nLgorKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysgICBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+LCAyMDAyLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGVsZi5oPgorKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQJCW1pcHNfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKysvKiBDaGVjayBmb3IgdGhlIHNpbXBsZSByZWxvYyB0eXBlcy4gICovCisrRWxmX1R5cGUKKyttaXBzX3JlbG9jX3NpbXBsZV90eXBlIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIGludCB0eXBlKQorK3sKKysgIHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICBjYXNlIFJfTUlQU18xNjoKKysgICAgICByZXR1cm4gRUxGX1RfSEFMRjsKKysgICAgY2FzZSBSX01JUFNfMzI6CisrICAgICAgcmV0dXJuIEVMRl9UX1dPUkQ7CisrICAgIGNhc2UgUl9NSVBTXzY0OgorKyAgICAgIHJldHVybiBFTEZfVF9YV09SRDsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRUxGX1RfTlVNOworKyAgICB9CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ1L2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDUub3JpZy9saWJlYmwvZWJsb3BlbmJhY2tlbmQuYwkyMDEwLTAyLTI0IDE4OjU1OjUxLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ1L2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCTIwMTAtMDItMjQgMTg6NTc6MzUuMDAwMDAwMDAwICswMDAwCitAQCAtOTEsNiArOTEsOCBAQAorICAgeyAic3BhcmMiLCAiZWxmX3NwYXJjIiwgInNwYXJjIiwgNSwgRU1fU1BBUkMsIDAsIDAgfSwKKyAgIHsgInNwYXJjIiwgImVsZl9zcGFyY3Y4cGx1cyIsICJzcGFyYyIsIDUsIEVNX1NQQVJDMzJQTFVTLCAwLCAwIH0sCisgICB7ICJzMzkwIiwgImVibF9zMzkwIiwgInMzOTAiLCA0LCBFTV9TMzkwLCAwLCAwIH0sCisrICB7ICJtaXBzIiwgImVsZl9taXBzIiwgIm1pcHMiLCA0LCBFTV9NSVBTLCAwLCAwIH0sCisrICB7ICJtaXBzIiwgImVsZl9taXBzZWwiLCAibWlwc2VsIiwgNCwgRU1fTUlQU19SUzNfTEUsIDAsIDAgfSwKKyAKKyAgIHsgIm0zMiIsICJlbGZfbTMyIiwgIm0zMiIsIDMsIEVNX00zMiwgMCwgMCB9LAorICAgeyAibTY4ayIsICJlbGZfbTY4ayIsICJtNjhrIiwgNCwgRU1fNjhLLCAwLCAwIH0sCitJbmRleDogZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvY29tbW9uLXJlbG9jLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0NS5vcmlnL2JhY2tlbmRzL2NvbW1vbi1yZWxvYy5jCTIwMTAtMDItMjQgMTg6NTU6NTEuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvY29tbW9uLXJlbG9jLmMJMjAxMC0wMi0yNCAxODo1NzozNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMDksMTEgKzEwOSwxMyBAQAorIH0KKyAKKyAKKysjaWZuZGVmIE5PX0NPUFlfUkVMT0MKKyBib29sCisgRUJMSE9PSyhjb3B5X3JlbG9jX3ApIChpbnQgcmVsb2MpCisgeworICAgcmV0dXJuIHJlbG9jID09IFJfVFlQRSAoQ09QWSk7CisgfQorKyNlbmRpZgorIAorIGJvb2wKKyBFQkxIT09LKG5vbmVfcmVsb2NfcCkgKGludCByZWxvYykKK0BAIC0xMzUsNyArMTM3LDkgQEAKKyAgIGVibC0+cmVsb2NfdHlwZV9uYW1lID0gRUJMSE9PSyhyZWxvY190eXBlX25hbWUpOworICAgZWJsLT5yZWxvY190eXBlX2NoZWNrID0gRUJMSE9PSyhyZWxvY190eXBlX2NoZWNrKTsKKyAgIGVibC0+cmVsb2NfdmFsaWRfdXNlID0gRUJMSE9PSyhyZWxvY192YWxpZF91c2UpOworKyNpZm5kZWYgTk9fQ09QWV9SRUxPQworICAgZWJsLT5jb3B5X3JlbG9jX3AgPSBFQkxIT09LKGNvcHlfcmVsb2NfcCk7CisrI2VuZGlmCisgICBlYmwtPm5vbmVfcmVsb2NfcCA9IEVCTEhPT0sobm9uZV9yZWxvY19wKTsKKyAjaWZuZGVmIE5PX1JFTEFUSVZFX1JFTE9DCisgICBlYmwtPnJlbGF0aXZlX3JlbG9jX3AgPSBFQkxIT09LKHJlbGF0aXZlX3JlbG9jX3ApOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDUub3JpZy9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDEwLTAyLTI0IDE4OjU3OjI2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTAtMDItMjQgMTg6NTc6NTcuMDAwMDAwMDAwICswMDAwCitAQCAtMjksMTEgKzI5LDExIEBACisgCSAgIC1JJCh0b3Bfc3JjZGlyKS9saWJlbGYgLUkkKHRvcF9zcmNkaXIpL2xpYmR3CisgCisgCistbW9kdWxlcyA9IGkzODYgc2ggeDg2XzY0IGlhNjQgYWxwaGEgYXJtIHNwYXJjIHBwYyBwcGM2NCBzMzkwIHBhcmlzYworK21vZHVsZXMgPSBpMzg2IHNoIHg4Nl82NCBpYTY0IGFscGhhIGFybSBzcGFyYyBwcGMgcHBjNjQgczM5MCBwYXJpc2MgbWlwcworIGxpYmVibF9waWMgPSBsaWJlYmxfaTM4Nl9waWMuYSBsaWJlYmxfc2hfcGljLmEgbGliZWJsX3g4Nl82NF9waWMuYSBcCisgCSAgICAgbGliZWJsX2lhNjRfcGljLmEgbGliZWJsX2FscGhhX3BpYy5hIGxpYmVibF9hcm1fcGljLmEgXAorIAkgICAgIGxpYmVibF9zcGFyY19waWMuYSBsaWJlYmxfcHBjX3BpYy5hIGxpYmVibF9wcGM2NF9waWMuYSBcCistCSAgICAgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3BhcmlzY19waWMuYQorKwkgICAgIGxpYmVibF9zMzkwX3BpYy5hIGxpYmVibF9wYXJpc2NfcGljLmEgbGliZWJsX21pcHNfcGljLmEKKyBub2luc3RfTElCUkFSSUVTID0gJChsaWJlYmxfcGljKQorIG5vaW5zdF9EQVRBID0gJChsaWJlYmxfcGljOl9waWMuYT0uc28pCisgCitAQCAtOTksNiArOTksMTAgQEAKKyBsaWJlYmxfcGFyaXNjX3BpY19hX1NPVVJDRVMgPSAkKHBhcmlzY19TUkNTKQorIGFtX2xpYmVibF9wYXJpc2NfcGljX2FfT0JKRUNUUyA9ICQocGFyaXNjX1NSQ1M6LmM9Lm9zKQorIAorK21pcHNfU1JDUyA9IG1pcHNfaW5pdC5jIG1pcHNfc3ltYm9sLmMgbWlwc19yZWdzLmMgbWlwc19yZXR2YWwuYworK2xpYmVibF9taXBzX3BpY19hX1NPVVJDRVMgPSAkKG1pcHNfU1JDUykKKythbV9saWJlYmxfbWlwc19waWNfYV9PQkpFQ1RTID0gJChtaXBzX1NSQ1M6LmM9Lm9zKQorKworIGxpYmVibF8lLnNvIGxpYmVibF8lLm1hcDogbGliZWJsXyVfcGljLmEgJChsaWJlbGYpICQobGliZHcpCisgCUBybSAtZiAkKEA6LnNvPS5tYXApCisgCWVjaG8gJ0VMRlVUSUxTXyQoUEFDS0FHRV9WRVJTSU9OKSB7IGdsb2JhbDogJCpfaW5pdDsgbG9jYWw6ICo7IH07JyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ubS1GaXgtc2l6ZS1wYXNzZWQtdG8tc25wcmludGYtZm9yLWludmFsaWQtc2hfbmFtZS1jYXNlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvbm0tRml4LXNpemUtcGFzc2VkLXRvLXNucHJpbnRmLWZvci1pbnZhbGlkLXNoX25hbWUtY2FzZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjVkYWQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvbm0tRml4LXNpemUtcGFzc2VkLXRvLXNucHJpbnRmLWZvci1pbnZhbGlkLXNoX25hbWUtY2FzZS5wYXRjaApAQCAtMCwwICsxLDI3IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK25tOiBGaXggc2l6ZSBwYXNzZWQgdG8gc25wcmludGYgZm9yIGludmFsaWQgc2hfbmFtZSBjYXNlLgorbmF0aXZlIGJ1aWxkIGZhaWxlZCBhcyBmb2xsb3dpbmcgb24gRmVkb3JhMTg6CitubS5jOiBJbiBmdW5jdGlvbiAnc2hvd19zeW1ib2xzX3N5c3YnOgorbm0uYzo3NTY6Mjc6IGVycm9yOiBhcmd1bWVudCB0byAnc2l6ZW9mJyBpbiAnc25wcmludGYnIGNhbGwgaXMgdGhlIHNhbWUgZXhwcmVzc2lvbiBhcyB0aGUgZGVzdGluYXRpb247IGRpZCB5b3UgbWVhbiB0byBwcm92aWRlIGFuIGV4cGxpY2l0IGxlbmd0aD8gWy1XZXJyb3I9c2l6ZW9mLXBvaW50ZXItbWVtYWNjZXNzXQorICAgIHNucHJpbnRmIChuYW1lLCBzaXplb2YgbmFtZSwgIltpbnZhbGlkIHNoX25hbWUgJSMiIFBSSXgzMiAiXSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisKK1RoZSBvcmlnaW5hbCBjb21taXQgaXMgaHR0cDovL2dpdC5mZWRvcmFob3N0ZWQub3JnL2NnaXQvZWxmdXRpbHMuZ2l0L2NvbW1pdC9zcmMvbm0uYz9pZD01N2JkNjZjYWJmNmU2YjllY2Y2MjJjZGJmMzUwODA0ODk3YThkZjU4CisKK1NpZ25lZC1vZmYtYnk6IFpoZW5odWEgTHVvIDx6aGVuaHVhLmx1b0BmcmVlc2NhbGUuY29tPgorCistLS0gZWxmdXRpbHMtMC4xNDgvc3JjL25tLmMub3JnCTIwMTMtMDMtMTEgMjI6MzY6MTEuMDAwMDAwMDAwIC0wNTAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL25tLmMJMjAxMy0wMy0xMSAyMjo0NjowOS4wMDAwMDAwMDAgLTA1MDAKK0BAIC03NTIsOCArNzUyLDkgQEAKKyAJCQkgICAgICAgZ2VsZl9nZXRzaGRyIChzY24sICZzaGRyX21lbSktPnNoX25hbWUpOworICAgICAgIGlmICh1bmxpa2VseSAobmFtZSA9PSBOVUxMKSkKKyAJeworLQkgIG5hbWUgPSBhbGxvY2EgKHNpemVvZiAiW2ludmFsaWQgc2hfbmFtZSAweDEyMzQ1Njc4XSIpOworLQkgIHNucHJpbnRmIChuYW1lLCBzaXplb2YgbmFtZSwgIltpbnZhbGlkIHNoX25hbWUgJSMiIFBSSXgzMiAiXSIsCisrCSAgY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mICJbaW52YWxpZCBzaF9uYW1lIDB4MTIzNDU2NzhdIjsKKysJICBuYW1lID0gYWxsb2NhIChidWZzeik7CisrCSAgc25wcmludGYgKG5hbWUsIGJ1ZnN6LCAiW2ludmFsaWQgc2hfbmFtZSAlIyIgUFJJeDMyICJdIiwKKyAJCSAgICBnZWxmX2dldHNoZHIgKHNjbiwgJnNoZHJfbWVtKS0+c2hfbmFtZSk7CisgCX0KKyAgICAgICBzY25uYW1lc1tlbGZfbmR4c2NuIChzY24pXSA9IG5hbWU7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3JlZGhhdC1wb3J0YWJpbGl0eS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YTkxMmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZgpAQCAtMCwwICsxLDc1NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogZWxmdXRpbHMtMC4xNDgvYmFja2VuZHMvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9iYWNrZW5kcy9DaGFuZ2VMb2cJMjAxMC0wNC0xMyAyMDowODowMi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9iYWNrZW5kcy9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMDYsNiArMTA2LDEwIEBACisgCSogcHBjX2F0dHJzLmMgKHBwY19jaGVja19vYmplY3RfYXR0cmlidXRlKTogSGFuZGxlIHRhZworIAlHTlVfUG93ZXJfQUJJX1N0cnVjdF9SZXR1cm4uCisgCisrMjAwOS0wMS0yMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAobGliZWJsXyUuc28pOiBVc2UgJChMRF9BU19ORUVERUQpLgorKworIDIwMDgtMTAtMDQgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGkzODZfcmVsb2MuZGVmOiBGaXggZW50cmllcyBmb3IgVExTX0dPVERFU0MsIFRMU19ERVNDX0NBTEwsIGFuZAorQEAgLTQzMyw2ICs0MzcsMTEgQEAKKyAJKiBzcGFyY19pbml0LmM6IExpa2V3aXNlLgorIAkqIHg4Nl82NF9pbml0LmM6IExpa2V3aXNlLgorIAorKzIwMDUtMTEtMjIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKExEX0FTX05FRURFRCk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkobGliZWJsXyUuc28gcnVsZSk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2wsLS1hcy1uZWVkZWQuCisrCisgMjAwNS0xMS0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBwcGM2NF9yZWxvYy5kZWY6IFJFTDMwIC0+IEFERFIzMC4KK0BAIC00NTUsNiArNDY0LDkgQEAKKyAJKiBNYWtlZmlsZS5hbSAodW5pbnN0YWxsKTogRG9uJ3QgdHJ5IHRvIHJlbW92ZSAkKHBrZ2luY2x1ZGVkaXIpLgorIAkoQ0xFQU5GSUxFUyk6IEFkZCBsaWJlYmxfJChtKS5zby4KKyAKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAJKiBwcGNfcmVsb2MuZGVmOiBVcGRhdGUgYml0cyBwZXIgQWxhbiBNb2RyYSA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1Pi4KKyAJKiBwcGM2NF9yZWxvYy5kZWY6IExpa2V3aXNlLgorIAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2JhY2tlbmRzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDEwLTA0LTEzIDIwOjA4OjAyLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtMTAzLDcgKzEwMyw3IEBACisgCSQoTElOSykgLXNoYXJlZCAtbyAkKEA6Lm1hcD0uc28pIFwKKyAJCS1XbCwtLXdob2xlLWFyY2hpdmUgJDwgJChjcHVfJCopIC1XbCwtLW5vLXdob2xlLWFyY2hpdmUgXAorIAkJLVdsLC0tdmVyc2lvbi1zY3JpcHQsJChAOi5zbz0ubWFwKSBcCistCQktV2wsLXosZGVmcyAtV2wsLS1hcy1uZWVkZWQgJChsaWJlbGYpICQobGliZHcpICQobGlibXVkZmxhcCkKKysJCS1XbCwteixkZWZzICQoTERfQVNfTkVFREVEKSAkKGxpYmVsZikgJChsaWJkdykgJChsaWJtdWRmbGFwKQorIAkkKHRleHRyZWxfY2hlY2spCisgCisgbGliZWJsX2kzODYuc286ICQoY3B1X2kzODYpCitJbmRleDogZWxmdXRpbHMtMC4xNDgvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9DaGFuZ2VMb2cJMjAxMC0wNC0yMSAxNDoyNjo0MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yLDYgKzIsMTAgQEAKKyAKKyAJKiBjb25maWd1cmUuYWMgKExPQ0FMRURJUiwgREFUQURJUk5BTUUpOiBSZW1vdmVkLgorIAorKzIwMDktMTEtMjIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogY29uZmlndXJlLmFjOiBVc2Ugc2VkIGFuZCBleHByIGluc3RlYWQgb2YgbW9kZXJuIGJhc2ggZXh0ZW5zaW9ucy4KKysKKyAyMDA5LTA5LTIxICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBjb25maWd1cmUuYWM6IFVwZGF0ZSBmb3IgbW9yZSBtb2Rlcm4gYXV0b2NvbmYuCitAQCAtMTAsNiArMTQsMTAgQEAKKyAKKyAJKiBjb25maWd1cmUuYWMgKHppcF9MSUJTKTogQ2hlY2sgZm9yIGxpYmx6bWEgdG9vLgorIAorKzIwMDktMDgtMTcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgLWZnbnU4OS1pbmxpbmU7IGFkZCBpdCB0byBXRVhUUkEgaWYgaXQgd29ya3MuCisrCisgMjAwOS0wNC0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBjb25maWd1cmUuYWMgKGV1X3ZlcnNpb24pOiBSb3VuZCBkb3duIGhlcmUsIG5vdCBpbiB2ZXJzaW9uLmggbWFjcm9zLgorQEAgLTIxLDYgKzI5LDggQEAKKyAKKyAyMDA5LTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIF9fYnVpbHRpbl9wb3Bjb3VudC4KKysKKyAJKiBjb25maWd1cmUuYWMgKHpsaWIgY2hlY2spOiBDaGVjayBmb3IgZ3pkaXJlY3QsIG5lZWQgemxpYiA+PSAxLjIuMi4zLgorIAorIAkqIGNvbmZpZ3VyZS5hYyAoX190aHJlYWQgY2hlY2spOiBVc2UgQUNfTElOS19JRkVMU0UsIGluIGNhc2Ugb2YKK0BAIC0xMDEsNiArMTExLDEwIEBACisgCSogY29uZmlndXJlLmFjOiBBZGQgZHVtbXkgYXV0b21ha2UgY29uZGl0aW9uYWwgdG8gZ2V0IGRlcGVuZGVuY2llcworIAlmb3Igbm9uLWdlbmVyaWMgbGlua2VyIHJpZ2h0LiAgU2VlIHNyYy9NYWtlZmlsZS5hbS4KKyAKKysyMDA1LTExLTIyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIC0tYXMtbmVlZGVkIGxpbmtlciBvcHRpb24uCisrCisgMjAwNS0xMS0xOCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBNYWtlZmlsZS5hbSAoRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUyk6IE5ldyB2YXJpYWJsZS4KK0BAIC0xNDgsNiArMTYyLDE3IEBACisgCSogTWFrZWZpbGUuYW0gKGFsbF9TVUJESVJTKTogQWRkIGxpYmR3ZmwuCisgCSogY29uZmlndXJlLmFjOiBXcml0ZSBsaWJkd2ZsL01ha2VmaWxlLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogY29uZmlndXJlLmFjIChXRVhUUkEpOiBDaGVjayBmb3IgLVdleHRyYSBhbmQgc2V0IHRoaXMgc3Vic3RpdHV0aW9uLgorKworKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIHN0cnVjdCBzdGF0IHN0Xz90aW0gbWVtYmVycy4KKysJKiBzcmMvc3RyaXAuYyAocHJvY2Vzc19maWxlKTogVXNlIHN0Xz90aW1lIGlmIHN0Xz90aW0gYXJlIG5vdCB0aGVyZS4KKysKKysJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciBmdXRpbWVzIGZ1bmN0aW9uLgorKwkqIHNyYy9zdHJpcC5jIChoYW5kbGVfZWxmKSBbISBIQVZFX0ZVVElNRVNdOiBVc2UgdXRpbWVzIGluc3RlYWQuCisrCShoYW5kbGVfYXIpIFshIEhBVkVfRlVUSU1FU106IExpa2V3aXNlLgorKworIDIwMDUtMDUtMTkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogY29uZmlndXJlLmFjIFtBSF9CT1RUT01dIChJTlRERUNMLCBfSU5UREVDTCk6IE5ldyBtYWNyb3MuCitJbmRleDogZWxmdXRpbHMtMC4xNDgvY29uZmlnL2V1LmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9jb25maWcvZXUuYW0JMjAxMC0wNC0yMSAxNDoyNjo0MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9jb25maWcvZXUuYW0JMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yNSwxMSArMjUsMTQgQEAKKyAjIyA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LgorICMjCisgCisrV0VYVFJBID0gQFdFWFRSQUAKKytMRF9BU19ORUVERUQgPSBATERfQVNfTkVFREVEQAorKworIERFRlMgPSAtRF9HTlVfU09VUkNFIC1ESEFWRV9DT05GSUdfSCAtRExPQ0FMRURJUj0nIiR7bG9jYWxlZGlyfSInCisgSU5DTFVERVMgPSAtSS4gLUkkKHNyY2RpcikgLUkkKHRvcF9zcmNkaXIpL2xpYiAtSS4uCisgQU1fQ0ZMQUdTID0gLXN0ZD1nbnU5OSAtV2FsbCAtV3NoYWRvdyBcCisgCSAgICAkKGlmICQoJCgqRilfbm9fV2Vycm9yKSwsLVdlcnJvcikgXAorLQkgICAgJChpZiAkKCQoKkYpX25vX1d1bnVzZWQpLCwtV3VudXNlZCAtV2V4dHJhKSBcCisrCSAgICAkKGlmICQoJCgqRilfbm9fV3VudXNlZCksLC1XdW51c2VkICQoV0VYVFJBKSkgXAorIAkgICAgJChpZiAkKCQoKkYpX25vX1dmb3JtYXQpLC1Xbm8tZm9ybWF0LC1XZm9ybWF0PTIpIFwKKyAJICAgICQoJCgqRilfQ0ZMQUdTKQorIAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2NvbmZpZy5oLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9jb25maWcuaC5pbgkyMDEwLTA2LTI4IDE5OjA3OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2NvbmZpZy5oLmluCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDggQEAKKyAvKiBjb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KKyAKKysvKiBIYXZlIF9fYnVpbHRpbl9wb3Bjb3VudC4gKi8KKysjdW5kZWYgSEFWRV9CVUlMVElOX1BPUENPVU5UCisrCisgLyogJGxpYmRpciBzdWJkaXJlY3RvcnkgY29udGFpbmluZyBsaWJlYmwgbW9kdWxlcy4gKi8KKyAjdW5kZWYgTElCRUJMX1NVQkRJUgorIAorQEAgLTU1LDQgKzU4LDcgQEAKKyAvKiBEZWZpbmUgZm9yIGxhcmdlIGZpbGVzLCBvbiBBSVgtc3R5bGUgaG9zdHMuICovCisgI3VuZGVmIF9MQVJHRV9GSUxFUworIAorKy8qIFN0dWJiZWQgb3V0IGlmIG1pc3NpbmcgY29tcGlsZXIgc3VwcG9ydC4gKi8KKysjdW5kZWYgX190aHJlYWQKKysKKyAjaW5jbHVkZSA8ZXUtY29uZmlnLmg+CitJbmRleDogZWxmdXRpbHMtMC4xNDgvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9jb25maWd1cmUuYWMJMjAxMC0wNi0yOCAxOTowNzoyNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9jb25maWd1cmUuYWMJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC03Myw2ICs3Myw1NCBAQAorIEFTX0lGKFt0ZXN0ICJ4JGFjX2N2X2M5OSIgIT0geHllc10sCisgICAgICAgQUNfTVNHX0VSUk9SKFtnY2Mgd2l0aCBDOTkgc3VwcG9ydCByZXF1aXJlZF0pKQorIAorK0FDX0NBQ0hFX0NIRUNLKFtmb3IgLVdleHRyYSBvcHRpb24gdG8gJENDXSwgYWNfY3ZfY2Nfd2V4dHJhLCBbZG5sCisrb2xkX0NGTEFHUz0iJENGTEFHUyIKKytDRkxBR1M9IiRDRkxBR1MgLVdleHRyYSIKKytBQ19DT01QSUxFX0lGRUxTRShbdm9pZCBmb28gKHZvaWQpIHsgfV0sCisrCQkgIGFjX2N2X2NjX3dleHRyYT15ZXMsIGFjX2N2X2NjX3dleHRyYT1ubykKKytDRkxBR1M9IiRvbGRfQ0ZMQUdTIl0pCisrQUNfU1VCU1QoV0VYVFJBKQorK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X2NjX3dleHRyYSIgPSB4eWVzXSwgW1dFWFRSQT0tV2V4dHJhXSwgW1dFWFRSQT0tV10pCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZmdudTg5LWlubGluZSBvcHRpb24gdG8gJENDXSwgYWNfY3ZfY2NfZ251ODlfaW5saW5lLCBbZG5sCisrb2xkX0NGTEFHUz0iJENGTEFHUyIKKytDRkxBR1M9IiRDRkxBR1MgLWZnbnU4OS1pbmxpbmUgLVdlcnJvciIKKytBQ19DT01QSUxFX0lGRUxTRShbCisrdm9pZCBmb28gKHZvaWQpCisreworKyAgaW5saW5lIHZvaWQgYmFyICh2b2lkKSB7fQorKyAgYmFyICgpOworK30KKytleHRlcm4gaW5saW5lIHZvaWQgYmF6ICh2b2lkKSB7fQorK10sIGFjX2N2X2NjX2dudTg5X2lubGluZT15ZXMsIGFjX2N2X2NjX2dudTg5X2lubGluZT1ubykKKytDRkxBR1M9IiRvbGRfQ0ZMQUdTIl0pCisrQVNfSUYoW3Rlc3QgIngkYWNfY3ZfY2NfZ251ODlfaW5saW5lIiA9IHh5ZXNdLAorKyAgICAgIFtXRVhUUkE9IiR7V0VYVFJBOiskV0VYVFJBIH0tZmdudTg5LWlubGluZSJdKQorKworK0FDX0NBQ0hFX0NIRUNLKFtmb3IgLS1hcy1uZWVkZWQgbGlua2VyIG9wdGlvbl0sCisrCSAgICAgICBhY19jdl9hc19uZWVkZWQsIFtkbmwKKytjYXQgPiBjb25mdGVzdC5jIDw8RU9GCisraW50IG1haW4gKHZvaWQpIHsgcmV0dXJuIDA7IH0KKytFT0YKKytpZiBBQ19UUllfQ09NTUFORChbJHtDQy1jY30gJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MKKysJCQkgICAgLWZQSUMgLXNoYXJlZCAtbyBjb25mdGVzdC5zbyBjb25mdGVzdC5jCisrCQkJICAgIC1XbCwtLWFzLW5lZWRlZCAxPiZBU19NRVNTQUdFX0xPR19GRF0pCisrdGhlbgorKyAgYWNfY3ZfYXNfbmVlZGVkPXllcworK2Vsc2UKKysgIGFjX2N2X2FzX25lZWRlZD1ubworK2ZpCisrcm0gLWYgY29uZnRlc3QqXSkKKytBU19JRihbdGVzdCAieCRhY19jdl9hc19uZWVkZWQiID0geHllc10sCisrICAgICAgW0xEX0FTX05FRURFRD0tV2wsLS1hcy1uZWVkZWRdLCBbTERfQVNfTkVFREVEPV0pCisrQUNfU1VCU1QoTERfQVNfTkVFREVEKQorKworK0FDX0NBQ0hFX0NIRUNLKFtmb3IgX19idWlsdGluX3BvcGNvdW50XSwgYWNfY3ZfcG9wY291bnQsIFtkbmwKKytBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLCBbW2V4aXQgKF9fYnVpbHRpbl9wb3Bjb3VudCAoMTI3KSk7XV0pXSwKKysJICAgICAgIGFjX2N2X3BvcGNvdW50PXllcywgYWNfY3ZfcG9wY291bnQ9bm8pXSkKKytBU19JRihbdGVzdCAieCRhY19jdl9wb3Bjb3VudCIgPSB4eWVzXSwKKysgICAgICBbQUNfREVGSU5FKFtIQVZFX0JVSUxUSU5fUE9QQ09VTlRdLCBbMV0sIFtIYXZlIF9fYnVpbHRpbl9wb3Bjb3VudC5dKV0pCisrCisgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBfX3RocmVhZCBzdXBwb3J0XSwgYWNfY3ZfdGxzLCBbZG5sCisgIyBVc2UgdGhlIHNhbWUgZmxhZ3MgdGhhdCB3ZSB1c2UgZm9yIG91ciBEU09zLCBzbyB0aGUgdGVzdCBpcyByZXByZXNlbnRhdGl2ZS4KKyAjIFNvbWUgb2xkIGNvbXBpbGVyL2xpbmtlci9saWJjIGNvbWJpbmF0aW9ucyBmYWlsIHNvbWUgd2F5cyBhbmQgbm90IG90aGVycy4KK0BAIC04OCw3ICsxMzYsMTAgQEAKKyBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIl0pCisgQVNfSUYoW3Rlc3QgIngkYWNfY3ZfdGxzIiAhPSB4eWVzXSwKKy0gICAgICBBQ19NU0dfRVJST1IoW19fdGhyZWFkIHN1cHBvcnQgcmVxdWlyZWRdKSkKKysgICAgICBbQVNfSUYoW3Rlc3QgIiR1c2VfbG9ja3MiID0geWVzXSwKKysJICAgICBbQUNfTVNHX0VSUk9SKFstLWVuYWJsZS10aHJlYWQtc2FmZXR5IHJlcXVpcmVzIF9fdGhyZWFkIHN1cHBvcnRdKV0sCisrCSAgICAgW0FDX0RFRklORShbX190aHJlYWRdLCBbLyogZW1wdHk6IG5vIG11bHRpLXRocmVhZCBzdXBwb3J0ICovXSwKKysJCQlbU3R1YmJlZCBvdXQgaWYgbWlzc2luZyBjb21waWxlciBzdXBwb3J0Ll0pXSldKQorIAorIGRubCBUaGlzIHRlc3QgbXVzdCBjb21lIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGFmdGVyIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uCisgZG5sIHRlc3RzLCBiZWNhdXNlIHRoZSBjaG9pY2Ugb2YgdGhlIGZpbGUgbW9kZWwgY2FuIChpbiBwcmluY2lwbGUpIGFmZmVjdAorQEAgLTI1MSw3ICszMDIsNyBAQAorIAorICMgMS4yMzQ8d2hhdGV2ZXI+IC0+IDEyMzQ8d2hhdGV2ZXI+CisgY2FzZSAiJFBBQ0tBR0VfVkVSU0lPTiIgaW4KKy1bWzAtOV1dLiopIGV1X3ZlcnNpb249IiR7UEFDS0FHRV9WRVJTSU9OLy4vfSIgOzsKKytbWzAtOV1dLiopIGV1X3ZlcnNpb249YGVjaG8gIiRQQUNLQUdFX1ZFUlNJT04iIHwgc2VkICdzQFwuQEAnYCA7OworICopICAgICAJICAgQUNfTVNHX0VSUk9SKFtjb25mdXNlZCBieSB2ZXJzaW9uIG51bWJlciAnJFBBQ0tBR0VfVkVSU0lPTiddKSA7OworIGVzYWMKKyBjYXNlICIkZXVfdmVyc2lvbiIgaW4KK0BAIC0yODAsNiArMzMxLDYgQEAKKyBlc2FjCisgCisgIyBSb3VuZCB1cCB0byB0aGUgbmV4dCByZWxlYXNlIEFQSSAoeC55KSB2ZXJzaW9uLgorLVtldV92ZXJzaW9uPSRbKCRldV92ZXJzaW9uICsgOTk5KSAvIDEwMDBdXQorK2V1X3ZlcnNpb249YGV4cHIgXCggJGV1X3ZlcnNpb24gKyA5OTkgXCkgLyAxMDAwYAorIAorIEFDX09VVFBVVAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYi9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYi9DaGFuZ2VMb2cJMjAxMC0wNi0yOCAxOTowNTo1Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWIvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtMTQsNiArMTQsOSBAQAorIAorIDIwMDktMDEtMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogZXUtY29uZmlnLmggWyEgSEFWRV9CVUlMVElOX1BPUENPVU5UXQorKwkoX19idWlsdGluX3BvcGNvdW50KTogTmV3IGlubGluZSBmdW5jdGlvbi4KKysKKyAJKiBldS1jb25maWcuaDogQWRkIG11bHRpcGxlIGluY2x1c2lvbiBwcm90ZWN0aW9uLgorIAorIDIwMDktMDEtMTcgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorQEAgLTcwLDYgKzczLDExIEBACisgCSogTWFrZWZpbGUuYW0gKGxpYmV1X2FfU09VUkNFUyk6IEFkZCBpdC4KKyAJKiBzeXN0ZW0uaDogRGVjbGFyZSBjcmMzMl9maWxlLgorIAorKzIwMDUtMDItMDcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNC0zMCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogTWFrZWZpbGUuYW06IFVzZSAtZmZ1bmN0aW9uLXNlY3Rpb25zIGZvciB4bWFsbG9jLmMuCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliL2V1LWNvbmZpZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWIvZXUtY29uZmlnLmgJMjAwOS0wOC0xMiAxNDoyMzoyMi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWIvZXUtY29uZmlnLmgJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xODIsNiArMTgyLDE3IEBACisgLyogVGhpcyBtYWNybyBpcyB1c2VkIGJ5IHRoZSB0ZXN0cyBjb25kaXRpb25hbGl6ZSBmb3Igc3RhbmRhbG9uZSBidWlsZGluZy4gICovCisgI2RlZmluZSBFTEZVVElMU19IRUFERVIobmFtZSkgPGxpYiMjbmFtZS5oPgorIAorKyNpZm5kZWYgSEFWRV9CVUlMVElOX1BPUENPVU5UCisrIyBkZWZpbmUgX19idWlsdGluX3BvcGNvdW50IGhha21lbV9wb3Bjb3VudAorK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKQorK2hha21lbV9wb3Bjb3VudCAodW5zaWduZWQgaW50IHgpCisreworKyAgLyogSEFLTUVNIDE2OSAqLworKyAgdW5zaWduZWQgaW50IG4gPSB4IC0gKCh4ID4+IDEpICYgMDMzMzMzMzMzMzMzKSAtICgoeCA+PiAyKSAmIDAxMTExMTExMTExMSk7CisrICByZXR1cm4gKChuICsgKG4gPj4gMykpICYgMDMwNzA3MDcwNzA3KSAlIDYzOworK30KKysjZW5kaWYJLyogSEFWRV9CVUlMVElOX1BPUENPVU5UICovCisrCisgCisgI2lmZGVmIFNIQVJFRAorICMgZGVmaW5lIE9MRF9WRVJTSU9OKG5hbWUsIHZlcnNpb24pIFwKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJhc20vQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJhc20vQ2hhbmdlTG9nCTIwMTAtMDMtMDUgMDU6NDg6MjMuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliYXNtL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTY3LDYgKzY3LDExIEBACisgCSogYXNtX2Vycm9yLmM6IEFkZCBuZXcgZXJyb3IgQVNNX0VfSU9FUlJPUi4KKyAJKiBsaWJhc21QLmg6IEFkZCBBU01fRV9JT0VSUk9SIGRlZmluaXRpb24uCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTAyLTE1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBNYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTKTogQWRkIC1XdW51c2VkIC1XZXh0cmEgLVdmb3JtYXQ9Mi4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJjcHUvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJjcHUvQ2hhbmdlTG9nCTIwMTAtMDMtMDUgMDU6NDg6MjMuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliY3B1L0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTksNiArOSw5IEBACisgCisgMjAwOS0wMS0yMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBpMzg2X2Rpc2FzbS5jIChpMzg2X2Rpc2FzbSk6IEFkZCBhYm9ydCBhZnRlciBhc3NlcnQtY29uc3RhbnQgZm9yIG9sZAorKwljb21waWxlcnMgdGhhdCBkb24ndCByZWFsaXplIGl0J3Mgbm9yZXR1cm4uCisrCisgCSogTWFrZWZpbGUuYW0gKGkzODZfcGFyc2VfQ0ZMQUdTKTogVXNlIHF1b3RlcyBhcm91bmQgY29tbWFuZAorIAlzdWJzdGl0dXRpb24gdGhhdCBjYW4gcHJvZHVjZSBsZWFkaW5nIHdoaXRlc3BhY2UuCisgCitAQCAtMzM4LDYgKzM0MSwxMSBAQAorIAkqIGRlZnMvaTM4Ni5kb2M6IE5ldyBmaWxlLgorIAkqIGRlZnMveDg2XzY0OiBOZXcgZmlsZS4KKyAKKysyMDA1LTA0LTA0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbnN0ZWFkIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wMi0xNSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogTWFrZWZpbGUgKEFNX0NGTEFHUyk6IEFkZCAtV3VudXNlZCAtV2V4dHJhIC1XZm9ybWF0PTIuCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliY3B1L2kzODZfZGlzYXNtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmNwdS9pMzg2X2Rpc2FzbS5jCTIwMDktMDEtMDggMjA6NTY6MzYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliY3B1L2kzODZfZGlzYXNtLmMJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC03OTEsNiArNzkxLDcgQEAKKyAKKyAJCQlkZWZhdWx0OgorIAkJCSAgYXNzZXJ0ICghICJJTlZBTElEIG5vdCBoYW5kbGVkIik7CisrCQkJICBhYm9ydCAoKTsKKyAJCQl9CisgCQkgICAgfQorIAkJICBlbHNlCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZHcvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJkdy9DaGFuZ2VMb2cJMjAxMC0wNi0yOCAxOTowNTo1Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJkdy9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yNzYsNiArMjc2LDEwIEBACisgCisgCSogZHdhcmZfaGFzYXR0cl9pbnRlZ3JhdGUuYzogSW50ZWdyYXRlIERXX0FUX3NwZWNpZmljYXRpb24gdG9vLgorIAorKzIwMDktMDgtMTcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogbGliZHcuaDogRGlzYWJsZSBleHRlcm4gaW5saW5lcyBmb3IgR0NDIDQuMi4KKysKKyAyMDA5LTA4LTEwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIGR3YXJmX2dldHNjb3BldmFyLmM6IFVzZSBkd2FyZl9kaWVuYW1lLgorQEAgLTEwNDQsNiArMTA0OCwxMSBAQAorIAorIDIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKyAJKiBkd2FyZl9mb3JtcmVmX2RpZS5jIChkd2FyZl9mb3JtcmVmX2RpZSk6IEFkZCBDVSBoZWFkZXIgb2Zmc2V0IHRvCisgCWZvcm1yZWYgb2Zmc2V0LgorIAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmR3L2xpYmR3LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmR3L2xpYmR3LmgJMjAxMC0wNi0yOCAxOTowNTo1Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJkdy9saWJkdy5oCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtODQyLDcgKzg0Miw3IEBACisgCisgCisgLyogSW5saW5lIG9wdGltaXphdGlvbnMuICAqLworLSNpZmRlZiBfX09QVElNSVpFX18KKysjaWYgZGVmaW5lZCBfX09QVElNSVpFX18gJiYgIShfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID09IDIpCisgLyogUmV0dXJuIGF0dHJpYnV0ZSBjb2RlIG9mIGdpdmVuIGF0dHJpYnV0ZS4gICovCisgX19saWJkd19leHRlcm5faW5saW5lIHVuc2lnbmVkIGludAorIGR3YXJmX3doYXRhdHRyIChEd2FyZl9BdHRyaWJ1dGUgKmF0dHIpCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZHdmbC9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmR3ZmwvQ2hhbmdlTG9nCTIwMTAtMDYtMjggMTk6MDU6NTYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZHdmbC9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMjY1LDYgKzEyNjUsMTEgQEAKKyAKKyAyMDA1LTA3LTIxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworKzIwMDUtMDctMjEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisgCSogTWFrZWZpbGUuYW0gKG5vaW5zdF9IRUFERVJTKTogQWRkIGxvYzJjLmMuCisgCisgCSogdGVzdDIuYyAobWFpbik6IENoZWNrIHNzY2FuZiByZXN1bHQgdG8gcXVpZXQgd2FybmluZy4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlYmwvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlYmwvQ2hhbmdlTG9nCTIwMTAtMDMtMDUgMDU6NDg6MjMuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWJsL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTYyNCw2ICs2MjQsMTEgQEAKKyAJKiBNYWtlZmlsZS5hbSAobGliZWJsXypfc29fU09VUkNFUyk6IFNldCB0byAkKCpfU1JDUykgc28gZGVwZW5kZW5jeQorIAl0cmFja2luZyB3b3JrcyByaWdodC4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDUtMjEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGxpYmVibF94ODZfNjQubWFwOiBBZGQgeDg2XzY0X2NvcmVfbm90ZS4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvQ2hhbmdlTG9nCTIwMTAtMDYtMTQgMjE6MTc6MjAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTY1Nyw2ICs2NTcsMTEgQEAKKyAKKyAJKiBlbGYuaDogVXBkYXRlIGZyb20gZ2xpYmMuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA1LTA4ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIGVsZl9iZWdpbi5jIChyZWFkX2ZpbGUpIFtfTVVERkxBUF06IERvbid0IHVzZSBtbWFwIGZvciBub3cuCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2NvbW1vbi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvY29tbW9uLmgJMjAwOS0wMS0wOCAyMDo1NjozNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvY29tbW9uLmgJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNjAsNyArMTYwLDcgQEAKKyAgIChWYXIpID0gKHNpemVvZiAoVmFyKSA9PSAxCQkJCQkJICAgICAgXAorIAkgICA/ICh1bnNpZ25lZCBjaGFyKSAoVmFyKQkJCQkJICAgICAgXAorIAkgICA6IChzaXplb2YgKFZhcikgPT0gMgkJCQkJCSAgICAgIFwKKy0JICAgICAgPyBic3dhcF8xNiAoVmFyKQkJCQkJCSAgICAgIFwKKysJICAgICAgPyAodW5zaWduZWQgc2hvcnQgaW50KSBic3dhcF8xNiAoVmFyKQkJCSAgICAgIFwKKyAJICAgICAgOiAoc2l6ZW9mIChWYXIpID09IDQJCQkJCSAgICAgIFwKKyAJCSA/IGJzd2FwXzMyIChWYXIpCQkJCQkgICAgICBcCisgCQkgOiBic3dhcF82NCAoVmFyKSkpKQorQEAgLTE2OSw3ICsxNjksNyBAQAorICAgKERzdCkgPSAoc2l6ZW9mIChWYXIpID09IDEJCQkJCQkgICAgICBcCisgCSAgID8gKHVuc2lnbmVkIGNoYXIpIChWYXIpCQkJCQkgICAgICBcCisgCSAgIDogKHNpemVvZiAoVmFyKSA9PSAyCQkJCQkJICAgICAgXAorLQkgICAgICA/IGJzd2FwXzE2IChWYXIpCQkJCQkJICAgICAgXAorKwkgICAgICA/ICh1bnNpZ25lZCBzaG9ydCBpbnQpIGJzd2FwXzE2IChWYXIpCQkJICAgICAgXAorIAkgICAgICA6IChzaXplb2YgKFZhcikgPT0gNAkJCQkJICAgICAgXAorIAkJID8gYnN3YXBfMzIgKFZhcikJCQkJCSAgICAgIFwKKyAJCSA6IGJzd2FwXzY0IChWYXIpKSkpCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2FkZHIybGluZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvYWRkcjJsaW5lLmMJMjAxMC0wNS0yOCAxNDozODozMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvYWRkcjJsaW5lLmMJMjAxMC0wNy0wMyAxMzowNTo0MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC00NDcsMTAgKzQ0NywxMCBAQAorICAgICAgIGJvb2wgcGFyc2VkID0gZmFsc2U7CisgICAgICAgaW50IGksIGo7CisgICAgICAgY2hhciAqbmFtZSA9IE5VTEw7CistICAgICAgaWYgKHNzY2FuZiAoc3RyaW5nLCAiKCVtW14pXSklIiBQUklpTUFYICIlbiIsICZuYW1lLCAmYWRkciwgJmkpID09IDIKKysgICAgICBpZiAoc3NjYW5mIChzdHJpbmcsICIoJWFbXildKSUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZhZGRyLCAmaSkgPT0gMgorIAkgICYmIHN0cmluZ1tpXSA9PSAnXDAnKQorIAlwYXJzZWQgPSBhZGp1c3RfdG9fc2VjdGlvbiAobmFtZSwgJmFkZHIsIGR3ZmwpOworLSAgICAgIHN3aXRjaCAoc3NjYW5mIChzdHJpbmcsICIlbVteLStdJW4lIiBQUklpTUFYICIlbiIsICZuYW1lLCAmaSwgJmFkZHIsICZqKSkKKysgICAgICBzd2l0Y2ggKHNzY2FuZiAoc3RyaW5nLCAiJWFbXi0rXSVuJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmksICZhZGRyLCAmaikpCisgCXsKKyAJZGVmYXVsdDoKKyAJICBicmVhazsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvQ2hhbmdlTG9nCTIwMTAtMDYtMjggMTk6MDU6NTYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA4LjAwMDAwMDAwMCArMDAwMAorQEAgLTE2NSw4ICsxNjUsMTYgQEAKKyAJKiByZWFkZWxmLmMgKGF0dHJfY2FsbGJhY2spOiBVc2UgcHJpbnRfYmxvY2sgb25seSB3aGVuIHdlIGRvbid0IHVzZQorIAlwcmludF9vcHMuCisgCisrMjAwOS0wOC0xNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBsZC5oOiBEaXNhYmxlIGV4dGVybiBpbmxpbmVzIGZvciBHQ0MgNC4yLgorKworIDIwMDktMDgtMTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogc3RyaW5ncy5jIChyZWFkX2Jsb2NrKTogQ29uZGl0aW9uYWxpemUgcG9zaXhfZmFkdmlzZSB1c2UKKysJb24gW1BPU0lYX0ZBRFZfU0VRVUVOVElBTF0uCisrCUZyb20gUGV0ciBTYWxpbmdlciA8UGV0ci5TYWxpbmdlckBzZXpuYW0uY3o+LgorKworIAkqIGFyLmMgKGRvX29wZXJfZXh0cmFjdCk6IFVzZSBwYXRoY29uZiBpbnN0ZWFkIG9mIHN0YXRmcy4KKyAKKyAyMDA5LTA4LTAxICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KK0BAIC0zMzAsNiArMzM4LDggQEAKKyAJKiByZWFkZWxmLmMgKHByaW50X2RlYnVnX2ZyYW1lX3NlY3Rpb24pOiBVc2UgdCBpbnN0ZWFkIG9mIGogZm9ybWF0cworIAlmb3IgcHRyZGlmZl90IE9GRlNFVC4KKyAKKysJKiBhZGRyMmxpbmUuYyAoaGFuZGxlX2FkZHJlc3MpOiBVc2UgJWEgaW5zdGVhZCBvZiAlbSBmb3IgY29tcGF0aWJpbGl0eS4KKysKKyAyMDA5LTAxLTIxICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGZsaW50LmMgKGNoZWNrX3Byb2dyYW1faGVhZGVyKTogRml4IHR5cG8gaW4gLmVoX2ZyYW1lX2hkciBzZWN0aW9uCitAQCAtNTEzLDYgKzUyMywxMSBAQAorIAl0aGF0IG1hdGNoZXMgaXRzIFBUX0xPQUQncyBwX2ZsYWdzICZ+IFBGX1cuICBPbiBzcGFyYywgUEZfWCByZWFsbHkKKyAJaXMgdmFsaWQgaW4gUkVMUk8uCisgCisrMjAwOC0wMy0wMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiByZWFkZWxmLmMgKGR1bXBfYXJjaGl2ZV9pbmRleCk6IFR3ZWFrIHBvcnRhYmlsaXR5IGhhY2sKKysJdG8gbWF0Y2ggW19fR05VQ19fIDwgNF0gdG9vLgorKworIDIwMDgtMDItMjkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogcmVhZGVsZi5jIChwcmludF9hdHRyaWJ1dGVzKTogQWRkIGEgY2FzdC4KK0BAIC03NjQsNiArNzc5LDggQEAKKyAKKyAJKiByZWFkZWxmLmMgKGhleF9kdW1wKTogRml4IHJvdW5kaW5nIGVycm9yIGluIHdoaXRlc3BhY2UgY2FsY3VsYXRpb24uCisgCisrCSogTWFrZWZpbGUuYW0gKHJlYWRlbGZfbm9fV2Vycm9yKTogTmV3IHZhcmlhYmxlLgorKworIDIwMDctMTAtMTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogbWFrZS1kZWJ1Zy1hcmNoaXZlLmluOiBOZXcgZmlsZS4KK0BAIC0xMjAzLDYgKzEyMjAsMTAgQEAKKyAJKiBlbGZsaW50LmMgKHZhbGlkX2VfbWFjaGluZSk6IEFkZCBFTV9BTFBIQS4KKyAJUmVwb3J0ZWQgYnkgQ2hyaXN0aWFuIEFpY2hpbmdlciA8R3JlZWswQGdteC5uZXQ+LgorIAorKwkqIHN0cmluZ3MuYyAobWFwX2ZpbGUpOiBEZWZpbmUgUE9TSVhfTUFEVl9TRVFVRU5USUFMIHRvCisrCU1BRFZfU0VRVUVOVElBTCBpZiB1bmRlZmluZWQuICAJRG9uJ3QgY2FsbCBwb3NpeF9tYWR2aXNlCisrCWlmIG5laXRoZXIgaXMgZGVmaW5lZC4KKysKKyAyMDA2LTA4LTA4ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGZsaW50LmMgKGNoZWNrX2R5bmFtaWMpOiBEb24ndCByZXF1aXJlIERUX0hBU0ggZm9yIERUX1NZTVRBQi4KK0BAIC0xMjc5LDYgKzEzMDAsMTAgQEAKKyAJKiBNYWtlZmlsZS5hbTogQWRkIGhhY2tzIHRvIGNyZWF0ZSBkZXBlbmRlbmN5IGZpbGVzIGZvciBub24tZ2VuZXJpYworIAlsaW5rZXIuCisgCisrMjAwNi0wNC0wNSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBzdHJpbmdzLmMgKE1BUF9QT1BVTEFURSk6IERlZmluZSB0byAwIGlmIHVuZGVmaW5lZC4KKysKKyAyMDA2LTA2LTEyICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBsZGdlbmVyaWMuYyAobGRfZ2VuZXJpY19nZW5lcmF0ZV9zZWN0aW9ucyk6IERvbid0IGNyZWF0ZSAuaW50ZXJwCitAQCAtMTYyNyw2ICsxNjUyLDExIEBACisgCSogcmVhZGVsZi5jIChwcmludF9kZWJ1Z19sb2Nfc2VjdGlvbik6IEZpeCBpbmRlbnRhdGlvbiBmb3IgbGFyZ2VyCisgCWFkZHJlc3Mgc2l6ZS4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDUtMzAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogcmVhZGVsZi5jIChwcmludF9kZWJ1Z19saW5lX3NlY3Rpb24pOiBQcmludCBzZWN0aW9uIG9mZnNldCBvZiBlYWNoCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2ZpbmR0ZXh0cmVsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9maW5kdGV4dHJlbC5jCTIwMDktMDItMTEgMDE6MTI6NTkuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2ZpbmR0ZXh0cmVsLmMJMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC00OTAsNyArNDkwLDExIEBACisgCisgCisgc3RhdGljIHZvaWQKKy1jaGVja19yZWwgKHNpemVfdCBuc2VnbWVudHMsIHN0cnVjdCBzZWdtZW50cyBzZWdtZW50c1tuc2VnbWVudHNdLAorK2NoZWNrX3JlbCAoc2l6ZV90IG5zZWdtZW50cywgc3RydWN0IHNlZ21lbnRzIHNlZ21lbnRzWworKyNpZiBfX0dOVUNfXyA+PSA0CisrCQkJCQkJICAgICAgbnNlZ21lbnRzCisrI2VuZGlmCisrCSAgIF0sCisgCSAgIEdFbGZfQWRkciBhZGRyLCBFbGYgKmVsZiwgRWxmX1NjbiAqc3ltc2NuLCBEd2FyZiAqZHcsCisgCSAgIGNvbnN0IGNoYXIgKmZuYW1lLCBib29sIG1vcmVfdGhhbl9vbmUsIHZvaWQgKiprbm93bnNyY3MpCisgeworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9sZC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvbGQuaAkyMDA5LTA2LTEzIDIyOjM5OjUxLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9sZC5oCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtMTEyMiw2ICsxMTIyLDcgQEAKKyAKKyAvKiBDaGVja2VkIHdoZXRoZXIgdGhlIHN5bWJvbCBpcyB1bmRlZmluZWQgYW5kIHJlZmVyZW5jZWQgZnJvbSBhIERTTy4gICovCisgZXh0ZXJuIGJvb2wgbGlua2VkX2Zyb21fZHNvX3AgKHN0cnVjdCBzY25pbmZvICpzY25pbmZvLCBzaXplX3Qgc3ltaWR4KTsKKysjaWYgZGVmaW5lZCBfX09QVElNSVpFX18gJiYgIShfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID09IDIpCisgI2lmZGVmIF9fR05VQ19TVERDX0lOTElORV9fCisgX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fKSkKKyAjZW5kaWYKK0BAIC0xMTM5LDUgKzExNDAsNiBAQAorIAorICAgcmV0dXJuIHN5bS0+ZGVmaW5lZCAmJiBzeW0tPmluX2RzbzsKKyB9CisrI2VuZGlmCS8qIE9wdGltaXppbmcgYW5kIG5vdCBHQ0MgNC4yLiAgKi8KKyAKKyAjZW5kaWYJLyogbGQuaCAqLworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL01ha2VmaWxlLmFtCTIwMTAtMDMtMDUgMDU6NDg6MjMuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL01ha2VmaWxlLmFtCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtOTksNiArOTksOSBAQAorICMgWFhYIFdoaWxlIHRoZSBmaWxlIGlzIG5vdCBmaW5pc2hlZCwgZG9uJ3Qgd2FybiBhYm91dCB0aGlzCisgbGRnZW5lcmljX25vX1d1bnVzZWQgPSB5ZXMKKyAKKysjIEJ1Z2d5IG9sZCBjb21waWxlcnMuCisrcmVhZGVsZl9ub19XZXJyb3IgPSB5ZXMKKysKKyByZWFkZWxmX0xEQUREID0gJChsaWJkdykgJChsaWJlYmwpICQobGliZWxmKSAkKGxpYmV1KSAkKGxpYm11ZGZsYXApIC1sZGwKKyBubV9MREFERCA9ICQobGliZHcpICQobGliZWJsKSAkKGxpYmVsZikgJChsaWJldSkgJChsaWJtdWRmbGFwKSAtbGRsCisgc2l6ZV9MREFERCA9ICQobGliZWxmKSAkKGxpYmV1KSAkKGxpYm11ZGZsYXApCisKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvcmVhZGVsZi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvcmVhZGVsZi5jCTIwMTAtMDYtMjggMTk6MDU6NTYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL3JlYWRlbGYuYwkyMDEwLTA3LTAzIDEzOjA0OjA4LjAwMDAwMDAwMCArMDAwMAorQEAgLTc4NDUsNyArNzg0NSw3IEBACisgCSAgaWYgKHVubGlrZWx5IChlbGZfcmFuZCAoZWxmLCBhc19vZmYpID09IDApCisgCSAgICAgIHx8IHVubGlrZWx5ICgoc3ViZWxmID0gZWxmX2JlZ2luICgtMSwgRUxGX0NfUkVBRF9NTUFQLCBlbGYpKQorIAkJCSAgID09IE5VTEwpKQorLSNpZiBfX0dMSUJDX18gPCAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPCA3KQorKyNpZiBfX0dMSUJDX18gPCAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPCA3KSB8fCBfX0dOVUNfXyA8IDQKKyAJICAgIHdoaWxlICgxKQorICNlbmRpZgorIAkgICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9zdHJpbmdzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9zdHJpbmdzLmMJMjAwOS0wMi0xMSAwMToxMjo1OS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvc3RyaW5ncy5jCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtNTEsNiArNTEsMTAgQEAKKyAKKyAjaW5jbHVkZSA8c3lzdGVtLmg+CisgCisrI2lmbmRlZiBNQVBfUE9QVUxBVEUKKysjIGRlZmluZSBNQVBfUE9QVUxBVEUgMAorKyNlbmRpZgorKworIAorIC8qIFByb3RvdHlwZXMgb2YgbG9jYWwgZnVuY3Rpb25zLiAgKi8KKyBzdGF0aWMgaW50IHJlYWRfZmQgKGludCBmZCwgY29uc3QgY2hhciAqZm5hbWUsIG9mZjY0X3QgZmRsZW4pOworQEAgLTQ5MSw4ICs0OTUsMTMgQEAKKyAJCSAgICBmZCwgc3RhcnRfb2ZmKTsKKyAgICAgICBpZiAobWVtICE9IE1BUF9GQUlMRUQpCisgCXsKKysjaWYgIWRlZmluZWQgUE9TSVhfTUFEVl9TRVFVRU5USUFMICYmIGRlZmluZWQgTUFEVl9TRVFVRU5USUFMCisrIyBkZWZpbmUgUE9TSVhfTUFEVl9TRVFVRU5USUFMIE1BRFZfU0VRVUVOVElBTAorKyNlbmRpZgorKyNpZmRlZiBQT1NJWF9NQURWX1NFUVVFTlRJQUwKKyAJICAvKiBXZSB3aWxsIGdvIHRocm91Z2ggdGhlIG1hcHBpbmcgc2VxdWVudGlhbGx5LiAgKi8KKyAJICAodm9pZCkgcG9zaXhfbWFkdmlzZSAobWVtLCBtYXBfc2l6ZSwgUE9TSVhfTUFEVl9TRVFVRU5USUFMKTsKKysjZW5kaWYKKyAJICBicmVhazsKKyAJfQorICAgICAgIGlmIChlcnJubyAhPSBFSU5WQUwgJiYgZXJybm8gIT0gRU5PTUVNKQorQEAgLTU4Niw5ICs1OTUsMTEgQEAKKyAgICAgICBlbGZtYXBfb2ZmID0gZnJvbSAmIH4ocHMgLSAxKTsKKyAgICAgICBlbGZtYXBfYmFzZSA9IGVsZm1hcCA9IG1hcF9maWxlIChmZCwgZWxmbWFwX29mZiwgZmRsZW4sICZlbGZtYXBfc2l6ZSk7CisgCisrI2lmZGVmIFBPU0lYX0ZBRFZfU0VRVUVOVElBTAorICAgICAgIGlmICh1bmxpa2VseSAoZWxmbWFwID09IE1BUF9GQUlMRUQpKQorIAkvKiBMZXQgdGhlIGtlcm5lbCBrbm93IHdlIGFyZSBnb2luZyB0byByZWFkIGV2ZXJ5dGhpbmcgaW4gc2VxdWVuY2UuICAqLworIAkodm9pZCkgcG9zaXhfZmFkdmlzZSAoZmQsIDAsIDAsIFBPU0lYX0ZBRFZfU0VRVUVOVElBTCk7CisrI2VuZGlmCisgICAgIH0KKyAKKyAgIGlmICh1bmxpa2VseSAoZWxmbWFwID09IE1BUF9GQUlMRUQpKQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9zdHJpcC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvc3RyaXAuYwkyMDEwLTAxLTE1IDA5OjA1OjU1LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9zdHJpcC5jCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtNTMsNiArNTMsMTIgQEAKKyAjaW5jbHVkZSA8bGliZWJsLmg+CisgI2luY2x1ZGUgPHN5c3RlbS5oPgorIAorKyNpZmRlZiBIQVZFX0ZVVElNRVMKKysjIGRlZmluZSBGVVRJTUVTKGZkLCBmbmFtZSwgdHZwKSBmdXRpbWVzIChmZCwgdHZwKQorKyNlbHNlCisrIyBkZWZpbmUgRlVUSU1FUyhmZCwgZm5hbWUsIHR2cCkgdXRpbWVzIChmbmFtZSwgdHZwKQorKyNlbmRpZgorKworIAorIC8qIE5hbWUgYW5kIHZlcnNpb24gb2YgcHJvZ3JhbS4gICovCisgc3RhdGljIHZvaWQgcHJpbnRfdmVyc2lvbiAoRklMRSAqc3RyZWFtLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpOworQEAgLTMwMSw4ICszMDcsMTggQEAKKyAKKyAgICAgICAvKiBJZiB3ZSBoYXZlIHRvIHByZXNlcnZlIHRoZSB0aW1lc3RhbXAsIHdlIG5lZWQgaXQgaW4gdGhlCisgCSBmb3JtYXQgdXRpbWVzKCkgdW5kZXJzdGFuZHMuICAqLworKyNpZmRlZiBIQVZFX1NUUlVDVF9TVEFUX1NUX0FUSU0KKyAgICAgICBUSU1FU1BFQ19UT19USU1FVkFMICgmdHZbMF0sICZwcmVfc3Quc3RfYXRpbSk7CisrI2Vsc2UKKysgICAgICB0dlswXS50dl9zZWMgPSBwcmVfc3Quc3RfYXRpbWU7CisrICAgICAgdHZbMF0udHZfdXNlYyA9IDA7CisrI2VuZGlmCisrI2lmZGVmIEhBVkVfU1RSVUNUX1NUQVRfU1RfTVRJTQorICAgICAgIFRJTUVTUEVDX1RPX1RJTUVWQUwgKCZ0dlsxXSwgJnByZV9zdC5zdF9tdGltKTsKKysjZWxzZQorKyAgICAgIHR2WzFdLnR2X3NlYyA9IHByZV9zdC5zdF9hdGltZTsKKysgICAgICB0dlsxXS50dl91c2VjID0gMDsKKysjZW5kaWYKKyAgICAgfQorIAorICAgLyogT3BlbiB0aGUgZmlsZS4gICovCitAQCAtMTc0Nyw3ICsxNzYzLDcgQEAKKyAgIC8qIElmIHJlcXVlc3RlZCwgcHJlc2VydmUgdGhlIHRpbWVzdGFtcC4gICovCisgICBpZiAodHZwICE9IE5VTEwpCisgICAgIHsKKy0gICAgICBpZiAoZnV0aW1lcyAoZmQsIHR2cCkgIT0gMCkKKysgICAgICBpZiAoRlVUSU1FUyAoZmQsIG91dHB1dF9mbmFtZSwgdHZwKSAhPSAwKQorIAl7CisgCSAgZXJyb3IgKDAsIGVycm5vLCBnZXR0ZXh0ICgiXAorIGNhbm5vdCBzZXQgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gZGF0ZSBvZiAnJXMnIiksCitAQCAtMTgwNCw3ICsxODIwLDcgQEAKKyAKKyAgIGlmICh0dnAgIT0gTlVMTCkKKyAgICAgeworLSAgICAgIGlmICh1bmxpa2VseSAoZnV0aW1lcyAoZmQsIHR2cCkgIT0gMCkpCisrICAgICAgaWYgKHVubGlrZWx5IChGVVRJTUVTIChmZCwgZm5hbWUsIHR2cCkgIT0gMCkpCisgCXsKKyAJICBlcnJvciAoMCwgZXJybm8sIGdldHRleHQgKCJcCisgY2Fubm90IHNldCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiBkYXRlIG9mICclcyciKSwgZm5hbWUpOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3Rlc3RzL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvdGVzdHMvQ2hhbmdlTG9nCTIwMTAtMDYtMjggMTk6MDU6NTYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvdGVzdHMvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtMTU0LDYgKzE1NCw4IEBACisgCisgMjAwOC0wMS0yMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBsaW5lMmFkZHIuYyAobWFpbik6IFJldmVydCBsYXN0IGNoYW5nZS4KKysKKyAJKiB0ZXN0ZmlsZTQ1LlMuYnoyOiBBZGQgdGVzdHMgZm9yIGNsdHEsIGNxdG8uCisgCSogdGVzdGZpbGU0NS5leHBlY3QuYnoyOiBBZGp1c3QuCisgCitAQCAtODYyLDYgKzg2NCwxMSBAQAorIAkqIE1ha2VmaWxlLmFtIChURVNUUyk6IEFkZCBydW4tZWxmbGludC10ZXN0LnNoLgorIAkoRVhUUkFfRElTVCk6IEFkZCBydW4tZWxmbGludC10ZXN0LnNoIGFuZCB0ZXN0ZmlsZTE4LmJ6Mi4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDUtMjQgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGdldC1maWxlcy5jIChtYWluKTogVXNlIGNvcnJlY3QgZm9ybWF0IHNwZWNpZmllci4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC90ZXN0cy9saW5lMmFkZHIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvdGVzdHMvbGluZTJhZGRyLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC90ZXN0cy9saW5lMmFkZHIuYwkyMDEwLTA3LTAzIDEzOjA0OjA4LjAwMDAwMDAwMCArMDAwMAorQEAgLTEzMiw3ICsxMzIsNyBAQAorICAgICB7CisgICAgICAgc3RydWN0IGFyZ3MgYSA9IHsgLmFyZyA9IGFyZ3ZbY250XSB9OworIAorLSAgICAgIHN3aXRjaCAoc3NjYW5mIChhLmFyZywgIiVtW146XTolZCIsICZhLmZpbGUsICZhLmxpbmUpKQorKyAgICAgIHN3aXRjaCAoc3NjYW5mIChhLmFyZywgIiVhW146XTolZCIsICZhLmZpbGUsICZhLmxpbmUpKQorIAl7CisgCWRlZmF1bHQ6CisgCWNhc2UgMDoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3JlZGhhdC1yb2J1c3RpZnkuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3JlZGhhdC1yb2J1c3RpZnkuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDM5ODU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvcmVkaGF0LXJvYnVzdGlmeS5kaWZmCkBAIC0wLDAgKzEsMTcwOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA3OjEwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC02NDksMTAgKzY0OSw1MyBAQAorIAlJZiBzZWN0aW9uIGNvbnRlbnQgaGFzbid0IGJlZW4gcmVhZCB5ZXQsIGRvIGl0IGJlZm9yZSBsb29raW5nIGZvciB0aGUKKyAJYmxvY2sgc2l6ZS4gIElmIG5vIHNlY3Rpb24gZGF0YSBwcmVzZW50LCBpbmZlciBzaXplIG9mIHNlY3Rpb24gaGVhZGVyLgorIAorKzIwMDUtMDUtMTQgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorKworKwkqIGxpYmVsZlAuaCAoSU5WQUxJRF9ORFgpOiBEZWZpbmUuCisrCSogZ2VsZl9nZXRkeW4uYyAoZ2VsZl9nZXRkeW4pOiBVc2UgaXQuICBSZW1vdmUgbmR4IDwgMCB0ZXN0IGlmIGFueS4KKysJKiBnZWxmX2dldGxpYi5jIChnZWxmX2dldGxpYik6IExpa2V3aXNlLgorKwkqIGdlbGZfZ2V0bW92ZS5jIChnZWxmX2dldG1vdmUpOiBMaWtld2lzZS4KKysJKiBnZWxmX2dldHJlbC5jIChnZWxmX2dldHJlbCk6IExpa2V3aXNlLgorKwkqIGdlbGZfZ2V0cmVsYS5jIChnZWxmX2dldHJlbGEpOiBMaWtld2lzZS4KKysJKiBnZWxmX2dldHN5bS5jIChnZWxmX2dldHN5bSk6IExpa2V3aXNlLgorKwkqIGdlbGZfZ2V0c3ltaW5mby5jIChnZWxmX2dldHN5bWluZm8pOiBMaWtld2lzZS4KKysJKiBnZWxmX2dldHN5bXNobmR4LmMgKGdlbGZfZ2V0c3ltc2huZHgpOiBMaWtld2lzZS4KKysJKiBnZWxmX2dldHZlcnN5bS5jIChnZWxmX2dldHZlcnN5bSk6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX2R5bi5jIChnZWxmX3VwZGF0ZV9keW4pOiBMaWtld2lzZS4KKysJKiBnZWxmX3VwZGF0ZV9saWIuYyAoZ2VsZl91cGRhdGVfbGliKTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfbW92ZS5jIChnZWxmX3VwZGF0ZV9tb3ZlKTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfcmVsLmMgKGdlbGZfdXBkYXRlX3JlbCk6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX3JlbGEuYyAoZ2VsZl91cGRhdGVfcmVsYSk6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX3N5bS5jIChnZWxmX3VwZGF0ZV9zeW0pOiBMaWtld2lzZS4KKysJKiBnZWxmX3VwZGF0ZV9zeW1pbmZvLmMgKGdlbGZfdXBkYXRlX3N5bWluZm8pOiBMaWtld2lzZS4KKysJKiBnZWxmX3VwZGF0ZV9zeW1zaG5keC5jIChnZWxmX3VwZGF0ZV9zeW1zaG5keCk6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX3ZlcnN5bS5jIChnZWxmX3VwZGF0ZV92ZXJzeW0pOiBMaWtld2lzZS4KKysJKiBlbGZfbmV3c2NuLmMgKGVsZl9uZXdzY24pOiBDaGVjayBmb3Igb3ZlcmZsb3cuCisrCSogZWxmMzJfdXBkYXRlZmlsZS5jIChfX2VsZncyKExJQkVMRkJJVFMsdXBkYXRlbW1hcCkpOiBMaWtld2lzZS4KKysJKF9fZWxmdzIoTElCRUxGQklUUyx1cGRhdGVmaWxlKSk6IExpa2V3aXNlLgorKwkqIGVsZl9iZWdpbi5jIChmaWxlX3JlYWRfZWxmKTogTGlrZXdpc2UuCisrCSogZWxmMzJfbmV3cGhkci5jIChlbGZ3MihMSUJFTEZCSVRTLG5ld3BoZHIpKTogTGlrZXdpc2UuCisrCSogZWxmX2dldGFyc3ltLmMgKGVsZl9nZXRhcnN5bSk6IExpa2V3aXNlLgorKwkqIGVsZjMyX2dldHNoZHIuYyAoZWxmdzIoTElCRUxGQklUUyxnZXRzaGRyKSk6IExpa2V3aXNlLgorIDIwMDUtMDUtMTEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGVsZi5oOiBVcGRhdGUgYWdhaW4uCisgCisrMjAwNS0wNS0xNyAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisrCisrCSogZWxmMzJfZ2V0cGhkci5jIChlbGZ3MihMSUJFTEZCSVRTLGdldHBoZHIpKTogQ2hlY2sgaWYgcHJvZ3JhbSBoZWFkZXIKKysJdGFibGUgZml0cyBpbnRvIG9iamVjdCdzIGJvdW5kcy4KKysJKiBlbGZfZ2V0c2hzdHJuZHguYyAoZWxmX2dldHNoc3RybmR4KTogQWRkIGVsZi0+c3RhcnRfb2Zmc2V0IHRvCisrCWVsZi0+bWFwX2FkZHJlc3MuICBDaGVjayBpZiBmaXJzdCBzZWN0aW9uIGhlYWRlciBmaXRzIGludG8gb2JqZWN0J3MKKysJYm91bmRzLgorKwkqIGVsZjMyX2dldHNoZHIuYyAoZWxmdzIoTElCRUxGQklUUyxnZXRzaGRyKSk6CisrCUNoZWNrIGlmIHNlY3Rpb24gaGVhZGVyIHRhYmxlIGZpdHMgaW50byBvYmplY3QncyBib3VuZHMuCisrCSogZWxmX2JlZ2luLmMgKGdldF9zaG51bSk6IEVuc3VyZSBzZWN0aW9uIGhlYWRlcnMgZml0cyBpbnRvCisrCW9iamVjdCdzIGJvdW5kcy4KKysJKGZpbGVfcmVhZF9lbGYpOiBNYWtlIHN1cmUgc2NuY250IGlzIHNtYWxsIGVub3VnaCB0byBhbGxvY2F0ZSBib3RoCisrCUVsZlhYX1NoZHIgYW5kIEVsZl9TY24gYXJyYXkuICBNYWtlIHN1cmUgc2VjdGlvbiBhbmQgcHJvZ3JhbSBoZWFkZXIKKysJdGFibGVzIGZpdCBpbnRvIG9iamVjdCdzIGJvdW5kcy4gIEF2b2lkIG1lbW9yeSBsZWFrIG9uIGZhaWx1cmUuCisrCisgMjAwNS0wNS0wOSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZWxmLmg6IFVwZGF0ZSBmcm9tIGdsaWJjLgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGYzMl9nZXRwaGRyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9lbGYzMl9nZXRwaGRyLmMJMjAxMC0wNC0yMSAxNDoyNjo0MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmMzJfZ2V0cGhkci5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMTE0LDYgKzExNCwxNiBAQAorIAorICAgICAgIGlmIChlbGYtPm1hcF9hZGRyZXNzICE9IE5VTEwpCisgCXsKKysJICAvKiBGaXJzdCBzZWUgd2hldGhlciB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIEVMRiBoZWFkZXIgaXMKKysJICAgICB2YWxpZCBhbmQgaXQgZG9lcyBub3QgYXNrIGZvciB0b28gbXVjaC4gICovCisrCSAgaWYgKHVubGlrZWx5IChlaGRyLT5lX3Bob2ZmID49IGVsZi0+bWF4aW11bV9zaXplKQorKwkgICAgICB8fCB1bmxpa2VseSAoZWxmLT5tYXhpbXVtX3NpemUgLSBlaGRyLT5lX3Bob2ZmIDwgc2l6ZSkpCisrCSAgICB7CisrCSAgICAgIC8qIFNvbWV0aGluZyBpcyB3cm9uZy4gICovCisrCSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX1BIRFIpOworKwkgICAgICBnb3RvIG91dDsKKysJICAgIH0KKysKKyAJICAvKiBBbGwgdGhlIGRhdGEgaXMgYWxyZWFkeSBtYXBwZWQuICBVc2UgaXQuICAqLworIAkgIHZvaWQgKmZpbGVfcGhkciA9ICgoY2hhciAqKSBlbGYtPm1hcF9hZGRyZXNzCisgCQkJICAgICArIGVsZi0+c3RhcnRfb2Zmc2V0ICsgZWhkci0+ZV9waG9mZik7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZjMyX2dldHNoZHIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZjMyX2dldHNoZHIuYwkyMDA5LTA2LTEzIDIyOjQxOjQyLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGYzMl9nZXRzaGRyLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIFJldHVybiBzZWN0aW9uIGhlYWRlci4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDUsIDIwMDcsIDIwMDkgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMTk5OC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDE5OTguCisgCitAQCAtODEsNyArODEsOCBAQAorICAgICBnb3RvIG91dDsKKyAKKyAgIHNpemVfdCBzaG51bTsKKy0gIGlmIChfX2VsZl9nZXRzaGRybnVtX3JkbG9jayAoZWxmLCAmc2hudW0pICE9IDApCisrICBpZiAoX19lbGZfZ2V0c2hkcm51bV9yZGxvY2sgKGVsZiwgJnNobnVtKSAhPSAwCisrICAgICAgfHwgc2hudW0gPiBTSVpFX01BWCAvIHNpemVvZiAoRWxmVzIoTElCRUxGQklUUyxTaGRyKSkpCisgICAgIGdvdG8gb3V0OworICAgc2l6ZV90IHNpemUgPSBzaG51bSAqIHNpemVvZiAoRWxmVzIoTElCRUxGQklUUyxTaGRyKSk7CisgCitAQCAtOTgsNiArOTksMTYgQEAKKyAKKyAgIGlmIChlbGYtPm1hcF9hZGRyZXNzICE9IE5VTEwpCisgICAgIHsKKysgICAgICAvKiBGaXJzdCBzZWUgd2hldGhlciB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIEVMRiBoZWFkZXIgaXMKKysJIHZhbGlkIGFuZCBpdCBkb2VzIG5vdCBhc2sgZm9yIHRvbyBtdWNoLiAgKi8KKysgICAgICBpZiAodW5saWtlbHkgKGVoZHItPmVfc2hvZmYgPj0gZWxmLT5tYXhpbXVtX3NpemUpCisrCSAgfHwgdW5saWtlbHkgKGVsZi0+bWF4aW11bV9zaXplIC0gZWhkci0+ZV9zaG9mZiA8IHNpemUpKQorKwl7CisrCSAgLyogU29tZXRoaW5nIGlzIHdyb25nLiAgKi8KKysJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9TRUNUSU9OX0hFQURFUik7CisrCSAgZ290byBmcmVlX2FuZF9vdXQ7CisrCX0KKysKKyAgICAgICBFbGZXMihMSUJFTEZCSVRTLFNoZHIpICpub3RjdnQ7CisgCisgICAgICAgLyogQWxsIHRoZSBkYXRhIGlzIGFscmVhZHkgbWFwcGVkLiAgSWYgd2UgY291bGQgdXNlIGl0CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZjMyX25ld3BoZHIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZjMyX25ld3BoZHIuYwkyMDEwLTAxLTEyIDE2OjU3OjU0LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGYzMl9uZXdwaGRyLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMzUsNiArMTM1LDEyIEBACisgCSAgIHx8IGNvdW50ID09IFBOX1hOVU0KKyAJICAgfHwgZWxmLT5zdGF0ZS5FTEZXKGVsZixMSUJFTEZCSVRTKS5waGRyID09IE5VTEwpCisgICAgIHsKKysgICAgICBpZiAodW5saWtlbHkgKGNvdW50ID4gU0laRV9NQVggLyBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsUGhkcikpKSkKKysJeworKwkgIHJlc3VsdCA9IE5VTEw7CisrCSAgZ290byBvdXQ7CisrCX0KKysKKyAgICAgICAvKiBBbGxvY2F0ZSBhIG5ldyBwcm9ncmFtIGhlYWRlciB3aXRoIHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2YKKyAJIGVsZW1lbnRzLiAgKi8KKyAgICAgICByZXN1bHQgPSAoRWxmVzIoTElCRUxGQklUUyxQaGRyKSAqKQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGYzMl91cGRhdGVmaWxlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9lbGYzMl91cGRhdGVmaWxlLmMJMjAxMC0wMS0xMiAxNjo1Nzo1NC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmMzJfdXBkYXRlZmlsZS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMjIzLDYgKzIyMyw5IEBACisgICAvKiBXcml0ZSBhbGwgdGhlIHNlY3Rpb25zLiAgV2VsbCwgb25seSB0aG9zZSB3aGljaCBhcmUgbW9kaWZpZWQuICAqLworICAgaWYgKHNobnVtID4gMCkKKyAgICAgeworKyAgICAgIGlmICh1bmxpa2VseSAoc2hudW0gPiBTSVpFX01BWCAvIHNpemVvZiAoRWxmX1NjbiAqKSkpCisrIAlyZXR1cm4gMTsKKysKKyAgICAgICBFbGZfU2NuTGlzdCAqbGlzdCA9ICZlbGYtPnN0YXRlLkVMRlcoZWxmLExJQkVMRkJJVFMpLnNjbnM7CisgICAgICAgRWxmX1NjbiAqKnNjbnMgPSAoRWxmX1NjbiAqKikgYWxsb2NhIChzaG51bSAqIHNpemVvZiAoRWxmX1NjbiAqKSk7CisgICAgICAgY2hhciAqY29uc3Qgc2hkcl9zdGFydCA9ICgoY2hhciAqKSBlbGYtPm1hcF9hZGRyZXNzICsgZWxmLT5zdGFydF9vZmZzZXQKK0BAIC02NDUsNiArNjQ4LDEwIEBACisgICAvKiBXcml0ZSBhbGwgdGhlIHNlY3Rpb25zLiAgV2VsbCwgb25seSB0aG9zZSB3aGljaCBhcmUgbW9kaWZpZWQuICAqLworICAgaWYgKHNobnVtID4gMCkKKyAgICAgeworKyAgICAgIGlmICh1bmxpa2VseSAoc2hudW0gPiBTSVpFX01BWCAvIChzaXplb2YgKEVsZl9TY24gKikKKysJCQkJCSsgc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLFNoZHIpKSkpKQorKwlyZXR1cm4gMTsKKysKKyAgICAgICBvZmZfdCBzaGRyX29mZnNldCA9IGVsZi0+c3RhcnRfb2Zmc2V0ICsgZWhkci0+ZV9zaG9mZjsKKyAjaWYgRVZfTlVNICE9IDIKKyAgICAgICB4ZmN0X3Qgc2hkcl9mY3RwID0gX19lbGZfeGZjdHN0b21bX19saWJlbGZfdmVyc2lvbiAtIDFdW0VWX0NVUlJFTlQgLSAxXVtFTEZXKEVMRkNMQVNTLCBMSUJFTEZCSVRTKSAtIDFdW0VMRl9UX1NIRFJdOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfYmVnaW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZl9iZWdpbi5jCTIwMTAtMDQtMjEgMTQ6MjY6NDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9iZWdpbi5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMTY1LDcgKzE2NSw4IEBACisgCisgICAgICAgaWYgKHVubGlrZWx5IChyZXN1bHQgPT0gMCkgJiYgZWhkci5lMzItPmVfc2hvZmYgIT0gMCkKKyAJeworLQkgIGlmIChlaGRyLmUzMi0+ZV9zaG9mZiArIHNpemVvZiAoRWxmMzJfU2hkcikgPiBtYXhzaXplKQorKwkgIGlmICh1bmxpa2VseSAoZWhkci5lMzItPmVfc2hvZmYgPj0gbWF4c2l6ZSkKKysJICAgICAgfHwgdW5saWtlbHkgKG1heHNpemUgLSBlaGRyLmUzMi0+ZV9zaG9mZiA8IHNpemVvZiAoRWxmMzJfU2hkcikpKQorIAkgICAgLyogQ2Fubm90IHJlYWQgdGhlIGZpcnN0IHNlY3Rpb24gaGVhZGVyLiAgKi8KKyAJICAgIHJldHVybiAwOworIAorQEAgLTIxMyw3ICsyMTQsOCBAQAorIAorICAgICAgIGlmICh1bmxpa2VseSAocmVzdWx0ID09IDApICYmIGVoZHIuZTY0LT5lX3Nob2ZmICE9IDApCisgCXsKKy0JICBpZiAoZWhkci5lNjQtPmVfc2hvZmYgKyBzaXplb2YgKEVsZjY0X1NoZHIpID4gbWF4c2l6ZSkKKysJICBpZiAodW5saWtlbHkgKGVoZHIuZTY0LT5lX3Nob2ZmID49IG1heHNpemUpCisrCSAgICAgIHx8IHVubGlrZWx5IChlaGRyLmU2NC0+ZV9zaG9mZiArIHNpemVvZiAoRWxmNjRfU2hkcikgPiBtYXhzaXplKSkKKyAJICAgIC8qIENhbm5vdCByZWFkIHRoZSBmaXJzdCBzZWN0aW9uIGhlYWRlci4gICovCisgCSAgICByZXR1cm4gMDsKKyAKK0BAIC0yODUsNiArMjg3LDE1IEBACisgICAgIC8qIENvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBzZWN0aW9ucy4gICovCisgICAgIHJldHVybiBOVUxMOworIAorKyAgLyogQ2hlY2sgZm9yIHRvbyBtYW55IHNlY3Rpb25zLiAgKi8KKysgIGlmIChlX2lkZW50W0VJX0NMQVNTXSA9PSBFTEZDTEFTUzMyKQorKyAgICB7CisrICAgICAgaWYgKHNjbmNudCA+IFNJWkVfTUFYIC8gKHNpemVvZiAoRWxmX1NjbikgKyBzaXplb2YgKEVsZjMyX1NoZHIpKSkKKysJcmV0dXJuIE5VTEw7CisrICAgIH0KKysgIGVsc2UgaWYgKHNjbmNudCA+IFNJWkVfTUFYIC8gKHNpemVvZiAoRWxmX1NjbikgKyBzaXplb2YgKEVsZjY0X1NoZHIpKSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisgICAvKiBXZSBjYW4gbm93IGFsbG9jYXRlIHRoZSBtZW1vcnkuICBFdmVuIGlmIHRoZXJlIGFyZSBubyBzZWN0aW9uIGhlYWRlcnMsCisgICAgICB3ZSBhbGxvY2F0ZSBzcGFjZSBmb3IgYSB6ZXJvdGggc2VjdGlvbiBpbiBjYXNlIHdlIG5lZWQgaXQgbGF0ZXIuICAqLworICAgY29uc3Qgc2l6ZV90IHNjbm1heCA9IChzY25jbnQgPzogKGNtZCA9PSBFTEZfQ19SRFdSIHx8IGNtZCA9PSBFTEZfQ19SRFdSX01NQVApCitAQCAtMzI0LDYgKzMzNSwxNiBAQAorIAl7CisgCSAgLyogV2UgY2FuIHVzZSB0aGUgbW1hcHBlZCBtZW1vcnkuICAqLworIAkgIGVsZi0+c3RhdGUuZWxmMzIuZWhkciA9IGVoZHI7CisrCisrCSAgaWYgKHVubGlrZWx5IChlaGRyLT5lX3Nob2ZmID49IG1heHNpemUpCisrCSAgICAgIHx8IHVubGlrZWx5IChtYXhzaXplIC0gZWhkci0+ZV9zaG9mZgorKwkJCSAgIDwgc2NuY250ICogc2l6ZW9mIChFbGYzMl9TaGRyKSkpCisrCSAgICB7CisrCSAgICBmcmVlX2FuZF9vdXQ6CisrCSAgICAgIGZyZWUgKGVsZik7CisrCSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0ZJTEUpOworKwkgICAgICByZXR1cm4gTlVMTDsKKysJICAgIH0KKyAJICBlbGYtPnN0YXRlLmVsZjMyLnNoZHIKKyAJICAgID0gKEVsZjMyX1NoZHIgKikgKChjaGFyICopIGVoZHIgKyBlaGRyLT5lX3Nob2ZmKTsKKyAKK0BAIC00MTAsNiArNDMxLDExIEBACisgCXsKKyAJICAvKiBXZSBjYW4gdXNlIHRoZSBtbWFwcGVkIG1lbW9yeS4gICovCisgCSAgZWxmLT5zdGF0ZS5lbGY2NC5laGRyID0gZWhkcjsKKysKKysJICBpZiAodW5saWtlbHkgKGVoZHItPmVfc2hvZmYgPj0gbWF4c2l6ZSkKKysJICAgICAgfHwgdW5saWtlbHkgKGVoZHItPmVfc2hvZmYKKysJCQkgICArIHNjbmNudCAqIHNpemVvZiAoRWxmMzJfU2hkcikgPiBtYXhzaXplKSkKKysJICAgIGdvdG8gZnJlZV9hbmRfb3V0OworIAkgIGVsZi0+c3RhdGUuZWxmNjQuc2hkcgorIAkgICAgPSAoRWxmNjRfU2hkciAqKSAoKGNoYXIgKikgZWhkciArIGVoZHItPmVfc2hvZmYpOworIAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfZ2V0YXJzeW0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZl9nZXRhcnN5bS5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9nZXRhcnN5bS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMTc5LDYgKzE3OSw5IEBACisgICAgICAgc2l6ZV90IGluZGV4X3NpemUgPSBhdG9sICh0bXBidWYpOworIAorICAgICAgIGlmIChTQVJNQUcgKyBzaXplb2YgKHN0cnVjdCBhcl9oZHIpICsgaW5kZXhfc2l6ZSA+IGVsZi0+bWF4aW11bV9zaXplCisrI2lmIFNJWkVfTUFYIDw9IDQyOTQ5NjcyOTVVCisrCSAgfHwgbiA+PSBTSVpFX01BWCAvIHNpemVvZiAoRWxmX0Fyc3ltKQorKyNlbmRpZgorIAkgIHx8IG4gKiBzaXplb2YgKHVpbnQzMl90KSA+IGluZGV4X3NpemUpCisgCXsKKyAJICAvKiBUaGlzIGluZGV4IHRhYmxlIGNhbm5vdCBiZSByaWdodCBzaW5jZSBpdCBkb2VzIG5vdCBmaXQgaW50bworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfZ2V0c2hkcnN0cm5keC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmX2dldHNoZHJzdHJuZHguYwkyMDA5LTA2LTEzIDIyOjMxOjM1LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfZ2V0c2hkcnN0cm5keC5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMTI1LDEwICsxMjUsMjUgQEAKKyAJICAgICAgaWYgKGVsZi0+bWFwX2FkZHJlc3MgIT0gTlVMTAorIAkJICAmJiBlbGYtPnN0YXRlLmVsZjMyLmVoZHItPmVfaWRlbnRbRUlfREFUQV0gPT0gTVlfRUxGREFUQQorIAkJICAmJiAoQUxMT1dfVU5BTElHTkVECistCQkgICAgICB8fCAoKChzaXplX3QpICgoY2hhciAqKSBlbGYtPm1hcF9hZGRyZXNzICsgb2Zmc2V0KSkKKysJCSAgICAgIHx8ICgoKHNpemVfdCkgKChjaGFyICopIGVsZi0+bWFwX2FkZHJlc3MKKysJCQkgICArIGVsZi0+c3RhcnRfb2Zmc2V0ICsgb2Zmc2V0KSkKKyAJCQkgICYgKF9fYWxpZ25vZl9fIChFbGYzMl9TaGRyKSAtIDEpKSA9PSAwKSkKKy0JCS8qIFdlIGNhbiBkaXJlY3RseSBhY2Nlc3MgdGhlIG1lbW9yeS4gICovCistCQludW0gPSAoKEVsZjMyX1NoZHIgKikgKGVsZi0+bWFwX2FkZHJlc3MgKyBvZmZzZXQpKS0+c2hfbGluazsKKysJCXsKKysJCSAgLyogRmlyc3Qgc2VlIHdoZXRoZXIgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBFTEYgaGVhZGVyIGlzCisrCQkgICAgIHZhbGlkIGFuZCBpdCBkb2VzIG5vdCBhc2sgZm9yIHRvbyBtdWNoLiAgKi8KKysJCSAgaWYgKHVubGlrZWx5IChlbGYtPm1heGltdW1fc2l6ZSAtIG9mZnNldAorKwkJCQk8IHNpemVvZiAoRWxmMzJfU2hkcikpKQorKwkJICAgIHsKKysJCSAgICAgIC8qIFNvbWV0aGluZyBpcyB3cm9uZy4gICovCisrCQkgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9TRUNUSU9OX0hFQURFUik7CisrCQkgICAgICByZXN1bHQgPSAtMTsKKysJCSAgICAgIGdvdG8gb3V0OworKwkJICAgIH0KKysKKysJCSAgLyogV2UgY2FuIGRpcmVjdGx5IGFjY2VzcyB0aGUgbWVtb3J5LiAgKi8KKysJCSAgbnVtID0gKChFbGYzMl9TaGRyICopIChlbGYtPm1hcF9hZGRyZXNzICsgZWxmLT5zdGFydF9vZmZzZXQKKysJCQkJCSArIG9mZnNldCkpLT5zaF9saW5rOworKwkJfQorIAkgICAgICBlbHNlCisgCQl7CisgCQkgIC8qIFdlIGF2b2lkIHJlYWRpbmcgaW4gYWxsIHRoZSBzZWN0aW9uIGhlYWRlcnMuICBKdXN0IHJlYWQKK0BAIC0xNjMsMTAgKzE3OCwyNSBAQAorIAkgICAgICBpZiAoZWxmLT5tYXBfYWRkcmVzcyAhPSBOVUxMCisgCQkgICYmIGVsZi0+c3RhdGUuZWxmNjQuZWhkci0+ZV9pZGVudFtFSV9EQVRBXSA9PSBNWV9FTEZEQVRBCisgCQkgICYmIChBTExPV19VTkFMSUdORUQKKy0JCSAgICAgIHx8ICgoKHNpemVfdCkgKChjaGFyICopIGVsZi0+bWFwX2FkZHJlc3MgKyBvZmZzZXQpKQorKwkJICAgICAgfHwgKCgoc2l6ZV90KSAoKGNoYXIgKikgZWxmLT5tYXBfYWRkcmVzcworKwkJCSAgICsgZWxmLT5zdGFydF9vZmZzZXQgKyBvZmZzZXQpKQorIAkJCSAgJiAoX19hbGlnbm9mX18gKEVsZjY0X1NoZHIpIC0gMSkpID09IDApKQorLQkJLyogV2UgY2FuIGRpcmVjdGx5IGFjY2VzcyB0aGUgbWVtb3J5LiAgKi8KKy0JCW51bSA9ICgoRWxmNjRfU2hkciAqKSAoZWxmLT5tYXBfYWRkcmVzcyArIG9mZnNldCkpLT5zaF9saW5rOworKwkJeworKwkJICAvKiBGaXJzdCBzZWUgd2hldGhlciB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIEVMRiBoZWFkZXIgaXMKKysJCSAgICAgdmFsaWQgYW5kIGl0IGRvZXMgbm90IGFzayBmb3IgdG9vIG11Y2guICAqLworKwkJICBpZiAodW5saWtlbHkgKGVsZi0+bWF4aW11bV9zaXplIC0gb2Zmc2V0CisrCQkJCTwgc2l6ZW9mIChFbGY2NF9TaGRyKSkpCisrCQkgICAgeworKwkJICAgICAgLyogU29tZXRoaW5nIGlzIHdyb25nLiAgKi8KKysJCSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX1NFQ1RJT05fSEVBREVSKTsKKysJCSAgICAgIHJlc3VsdCA9IC0xOworKwkJICAgICAgZ290byBvdXQ7CisrCQkgICAgfQorKworKwkJICAvKiBXZSBjYW4gZGlyZWN0bHkgYWNjZXNzIHRoZSBtZW1vcnkuICAqLworKwkJICBudW0gPSAoKEVsZjY0X1NoZHIgKikgKGVsZi0+bWFwX2FkZHJlc3MgKyBlbGYtPnN0YXJ0X29mZnNldAorKwkJCQkJICsgb2Zmc2V0KSktPnNoX2xpbms7CisrCQl9CisgCSAgICAgIGVsc2UKKyAJCXsKKyAJCSAgLyogV2UgYXZvaWQgcmVhZGluZyBpbiBhbGwgdGhlIHNlY3Rpb24gaGVhZGVycy4gIEp1c3QgcmVhZAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfbmV3c2NuLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9lbGZfbmV3c2NuLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmX25ld3Njbi5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMTA0LDEwICsxMDQsMTggQEAKKyAgIGVsc2UKKyAgICAgeworICAgICAgIC8qIFdlIG11c3QgYWxsb2NhdGUgYSBuZXcgZWxlbWVudC4gICovCistICAgICAgRWxmX1Njbkxpc3QgKm5ld3A7CisrICAgICAgRWxmX1Njbkxpc3QgKm5ld3AgPSBOVUxMOworIAorICAgICAgIGFzc2VydCAoZWxmLT5zdGF0ZS5lbGYuc2NuaW5jciA+IDApOworIAorKyAgICAgIGlmICgKKysjaWYgU0laRV9NQVggPD0gNDI5NDk2NzI5NVUKKysJICBsaWtlbHkgKGVsZi0+c3RhdGUuZWxmLnNjbmluY3IKKysJCSAgPCBTSVpFX01BWCAvIDIgLyBzaXplb2YgKEVsZl9TY24pIC0gc2l6ZW9mIChFbGZfU2NuTGlzdCkpCisrI2Vsc2UKKysJICAxCisrI2VuZGlmCisrCSAgKQorICAgICAgIG5ld3AgPSAoRWxmX1Njbkxpc3QgKikgY2FsbG9jIChzaXplb2YgKEVsZl9TY25MaXN0KQorIAkJCQkgICAgICsgKChlbGYtPnN0YXRlLmVsZi5zY25pbmNyICo9IDIpCisgCQkJCQkqIHNpemVvZiAoRWxmX1NjbikpLCAxKTsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRkeW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfZ2V0ZHluLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRkeW4uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogR2V0IGluZm9ybWF0aW9uIGZyb20gZHluYW1pYyB0YWJsZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTkzLDcgKzkzLDcgQEAKKyAJIHRhYmxlIGVudHJpZXMgaGFzIHRvIGJlIGFkb3B0ZWQuICBUaGUgdXNlciBiZXR0ZXIgaGFzIHByb3ZpZGVkCisgCSBhIGJ1ZmZlciB3aGVyZSB3ZSBjYW4gc3RvcmUgdGhlIGluZm9ybWF0aW9uLiAgV2hpbGUgY29weWluZyB0aGUKKyAJIGRhdGEgd2UgYXJlIGNvbnZlcnRpbmcgdGhlIGZvcm1hdC4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjMyX0R5bikgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9EeW4sICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitAQCAtMTE0LDcgKzExNCw3IEBACisgCisgICAgICAgLyogVGhlIGRhdGEgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtLiAgSnVzdCBtYWtlIHN1cmUgdGhlCisgCSBpbmRleCBpcyBPSy4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfRHluKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfRHluLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldGxpYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRsaWIuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldGxpYi5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBHZXQgbGlicmFyeSBmcm9tIHRhYmxlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDQuCisgCitAQCAtODYsNyArODYsNyBAQAorICAgLyogVGhlIGRhdGEgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtLiAgSnVzdCBtYWtlIHN1cmUgdGhlCisgICAgICBpbmRleCBpcyBPSy4gICovCisgICBHRWxmX0xpYiAqcmVzdWx0ID0gTlVMTDsKKy0gIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChHRWxmX0xpYikgPiBkYXRhLT5kX3NpemUpKQorKyAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfTGliLCBkYXRhKSkKKyAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworICAgZWxzZQorICAgICB7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0bW92ZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRtb3ZlLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRtb3ZlLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIEdldCBtb3ZlIHN0cnVjdHVyZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTgzLDcgKzgzLDcgQEAKKyAKKyAgIC8qIFRoZSBkYXRhIGlzIGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgZm9ybS4gIEp1c3QgbWFrZSBzdXJlIHRoZQorICAgICAgaW5kZXggaXMgT0suICAqLworLSAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfTW92ZSkgPiBkYXRhLT5kX3NpemUpKQorKyAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfTW92ZSwgZGF0YSkpCisgICAgIHsKKyAgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgZ290byBvdXQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0cmVsYS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRyZWxhLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRyZWxhLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIEdldCBSRUxBIHJlbG9jYXRpb24gaW5mb3JtYXRpb24gYXQgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTcxLDEyICs3MSw2IEBACisgICBpZiAoZGF0YV9zY24gPT0gTlVMTCkKKyAgICAgcmV0dXJuIE5VTEw7CisgCistICBpZiAodW5saWtlbHkgKG5keCA8IDApKQorLSAgICB7CistICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworLSAgICAgIHJldHVybiBOVUxMOworLSAgICB9CistCisgICBpZiAodW5saWtlbHkgKGRhdGFfc2NuLT5kLmRfdHlwZSAhPSBFTEZfVF9SRUxBKSkKKyAgICAgeworICAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0hBTkRMRSk7CitAQCAtOTMsNyArODcsNyBAQAorICAgaWYgKHNjbi0+ZWxmLT5jbGFzcyA9PSBFTEZDTEFTUzMyKQorICAgICB7CisgICAgICAgLyogV2UgaGF2ZSB0byBjb252ZXJ0IHRoZSBkYXRhLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfUmVsYSkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9SZWxhLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIHJlc3VsdCA9IE5VTEw7CitAQCAtMTE0LDcgKzEwOCw3IEBACisgICAgIHsKKyAgICAgICAvKiBTaW1wbHkgY29weSB0aGUgZGF0YSBhZnRlciB3ZSBtYWRlIHN1cmUgd2UgYXJlIGFjdHVhbGx5IGdldHRpbmcKKyAJIGNvcnJlY3QgZGF0YS4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjY0X1JlbGEpID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfUmVsYSwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICByZXN1bHQgPSBOVUxMOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHJlbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRyZWwuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHJlbC5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBHZXQgUkVMIHJlbG9jYXRpb24gaW5mb3JtYXRpb24gYXQgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTcxLDEyICs3MSw2IEBACisgICBpZiAoZGF0YV9zY24gPT0gTlVMTCkKKyAgICAgcmV0dXJuIE5VTEw7CisgCistICBpZiAodW5saWtlbHkgKG5keCA8IDApKQorLSAgICB7CistICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworLSAgICAgIHJldHVybiBOVUxMOworLSAgICB9CistCisgICBpZiAodW5saWtlbHkgKGRhdGFfc2NuLT5kLmRfdHlwZSAhPSBFTEZfVF9SRUwpKQorICAgICB7CisgICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSEFORExFKTsKK0BAIC05Myw3ICs4Nyw3IEBACisgICBpZiAoc2NuLT5lbGYtPmNsYXNzID09IEVMRkNMQVNTMzIpCisgICAgIHsKKyAgICAgICAvKiBXZSBoYXZlIHRvIGNvbnZlcnQgdGhlIGRhdGEuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9SZWwpID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfUmVsLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIHJlc3VsdCA9IE5VTEw7CitAQCAtMTEzLDcgKzEwNyw3IEBACisgICAgIHsKKyAgICAgICAvKiBTaW1wbHkgY29weSB0aGUgZGF0YSBhZnRlciB3ZSBtYWRlIHN1cmUgd2UgYXJlIGFjdHVhbGx5IGdldHRpbmcKKyAJIGNvcnJlY3QgZGF0YS4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjY0X1JlbCkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGY2NF9SZWwsICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgcmVzdWx0ID0gTlVMTDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRzeW0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfZ2V0c3ltLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRzeW0uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogR2V0IHN5bWJvbCBpbmZvcm1hdGlvbiBmcm9tIHN5bWJvbCB0YWJsZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAxOTk5LgorIAorQEAgLTkwLDcgKzkwLDcgQEAKKyAJIHRhYmxlIGVudHJpZXMgaGFzIHRvIGJlIGFkb3B0ZWQuICBUaGUgdXNlciBiZXR0ZXIgaGFzIHByb3ZpZGVkCisgCSBhIGJ1ZmZlciB3aGVyZSB3ZSBjYW4gc3RvcmUgdGhlIGluZm9ybWF0aW9uLiAgV2hpbGUgY29weWluZyB0aGUKKyAJIGRhdGEgd2UgYXJlIGNvbnZlcnRpbmcgdGhlIGZvcm1hdC4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjMyX1N5bSkgPiBkYXRhLT5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9TeW0sIGRhdGEpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTExOSw3ICsxMTksNyBAQAorIAorICAgICAgIC8qIFRoZSBkYXRhIGlzIGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgZm9ybS4gIEp1c3QgbWFrZSBzdXJlIHRoZQorIAkgaW5kZXggaXMgT0suICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChHRWxmX1N5bSkgPiBkYXRhLT5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBHRWxmX1N5bSwgZGF0YSkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0c3ltaW5mby5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRzeW1pbmZvLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRzeW1pbmZvLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIEdldCBhZGRpdGlvbmFsIHN5bWJvbCBpbmZvcm1hdGlvbiBmcm9tIHN5bWJvbCB0YWJsZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTg0LDcgKzg0LDcgQEAKKyAKKyAgIC8qIFRoZSBkYXRhIGlzIGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgZm9ybS4gIEp1c3QgbWFrZSBzdXJlIHRoZQorICAgICAgaW5kZXggaXMgT0suICAqLworLSAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfU3ltaW5mbykgPiBkYXRhLT5kX3NpemUpKQorKyAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfU3ltaW5mbywgZGF0YSkpCisgICAgIHsKKyAgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgZ290byBvdXQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0c3ltc2huZHguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfZ2V0c3ltc2huZHguYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHN5bXNobmR4LmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDYgKzEsNiBAQAorIC8qIEdldCBzeW1ib2wgaW5mb3JtYXRpb24gYW5kIHNlcGFyYXRlIHNlY3Rpb24gaW5kZXggZnJvbSBzeW1ib2wgdGFibGUKKyAgICBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTkwLDcgKzkwLDcgQEAKKyAgICAgIHNlY3Rpb24gaW5kZXggdGFibGUuICAqLworICAgaWYgKGxpa2VseSAoc2huZHhkYXRhX3NjbiAhPSBOVUxMKSkKKyAgICAgeworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9Xb3JkKSA+IHNobmR4ZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfV29yZCwgJnNobmR4ZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTExMCw3ICsxMTAsNyBAQAorIAkgdGFibGUgZW50cmllcyBoYXMgdG8gYmUgYWRvcHRlZC4gIFRoZSB1c2VyIGJldHRlciBoYXMgcHJvdmlkZWQKKyAJIGEgYnVmZmVyIHdoZXJlIHdlIGNhbiBzdG9yZSB0aGUgaW5mb3JtYXRpb24uICBXaGlsZSBjb3B5aW5nIHRoZQorIAkgZGF0YSB3ZSBhcmUgY29udmVydGluZyB0aGUgZm9ybWF0LiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfU3ltKSA+IHN5bWRhdGEtPmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX1N5bSwgc3ltZGF0YSkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitAQCAtMTM5LDcgKzEzOSw3IEBACisgCisgICAgICAgLyogVGhlIGRhdGEgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtLiAgSnVzdCBtYWtlIHN1cmUgdGhlCisgCSBpbmRleCBpcyBPSy4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfU3ltKSA+IHN5bWRhdGEtPmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfU3ltLCBzeW1kYXRhKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXR2ZXJzeW0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfZ2V0dmVyc3ltLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXR2ZXJzeW0uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogR2V0IHN5bWJvbCB2ZXJzaW9uIGluZm9ybWF0aW9uIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMTk5OS0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDE5OTkuCisgCitAQCAtOTIsNyArOTIsNyBAQAorIAorICAgLyogVGhlIGRhdGEgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtLiAgSnVzdCBtYWtlIHN1cmUgdGhlCisgICAgICBpbmRleCBpcyBPSy4gICovCistICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9WZXJzeW0pID4gZGF0YS0+ZF9zaXplKSkKKysgIGlmIChJTlZBTElEX05EWCAobmR4LCBHRWxmX1ZlcnN5bSwgZGF0YSkpCisgICAgIHsKKyAgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgcmVzdWx0ID0gTlVMTDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfZHluLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX3VwZGF0ZV9keW4uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9keW4uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogVXBkYXRlIGluZm9ybWF0aW9uIGluIGR5bmFtaWMgdGFibGUgYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMC4KKyAKK0BAIC03MSwxMiArNzEsNiBAQAorICAgaWYgKGRhdGEgPT0gTlVMTCkKKyAgICAgcmV0dXJuIDA7CisgCistICBpZiAodW5saWtlbHkgKG5keCA8IDApKQorLSAgICB7CistICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworLSAgICAgIHJldHVybiAwOworLSAgICB9CistCisgICBpZiAodW5saWtlbHkgKGRhdGFfc2NuLT5kLmRfdHlwZSAhPSBFTEZfVF9EWU4pKQorICAgICB7CisgICAgICAgLyogVGhlIHR5cGUgb2YgdGhlIGRhdGEgYmV0dGVyIHNob3VsZCBtYXRjaC4gICovCitAQCAtMTAyLDcgKzk2LDcgQEAKKyAJfQorIAorICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfRHluKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX0R5biwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0BAIC0xMTYsNyArMTEwLDcgQEAKKyAgIGVsc2UKKyAgICAgeworICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfRHluKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjY0X0R5biwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfbGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX3VwZGF0ZV9saWIuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9saWIuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogVXBkYXRlIGxpYnJhcnkgaW4gdGFibGUgYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwNC4KKyAKK0BAIC02OCwxMiArNjgsNiBAQAorICAgaWYgKGRhdGEgPT0gTlVMTCkKKyAgICAgcmV0dXJuIDA7CisgCistICBpZiAodW5saWtlbHkgKG5keCA8IDApKQorLSAgICB7CistICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworLSAgICAgIHJldHVybiAwOworLSAgICB9CistCisgICBFbGZfRGF0YV9TY24gKmRhdGFfc2NuID0gKEVsZl9EYXRhX1NjbiAqKSBkYXRhOworICAgaWYgKHVubGlrZWx5IChkYXRhX3Njbi0+ZC5kX3R5cGUgIT0gRUxGX1RfTElCKSkKKyAgICAgeworQEAgLTg3LDcgKzgxLDcgQEAKKyAKKyAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKyAgIGludCByZXN1bHQgPSAwOworLSAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjY0X0xpYikgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjY0X0xpYiwgJmRhdGFfc2NuLT5kKSkKKyAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworICAgZWxzZQorICAgICB7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX21vdmUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX21vdmUuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9tb3ZlLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIFVwZGF0ZSBtb3ZlIHN0cnVjdHVyZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTc1LDggKzc1LDcgQEAKKyAgIGFzc2VydCAoc2l6ZW9mIChHRWxmX01vdmUpID09IHNpemVvZiAoRWxmNjRfTW92ZSkpOworIAorICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgaWYgKHVubGlrZWx5IChuZHggPCAwKQorLSAgICAgIHx8IHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfTW92ZSkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfTW92ZSwgJmRhdGFfc2NuLT5kKSkKKyAgICAgeworICAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAgICAgICByZXR1cm4gMDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfcmVsYS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl91cGRhdGVfcmVsYS5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3JlbGEuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogVXBkYXRlIFJFTEEgcmVsb2NhdGlvbiBpbmZvcm1hdGlvbiBhdCBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNjgsMTIgKzY4LDYgQEAKKyAgIGlmIChkc3QgPT0gTlVMTCkKKyAgICAgcmV0dXJuIDA7CisgCistICBpZiAodW5saWtlbHkgKG5keCA8IDApKQorLSAgICB7CistICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworLSAgICAgIHJldHVybiAwOworLSAgICB9CistCisgICBpZiAodW5saWtlbHkgKGRhdGFfc2NuLT5kLmRfdHlwZSAhPSBFTEZfVF9SRUxBKSkKKyAgICAgeworICAgICAgIC8qIFRoZSB0eXBlIG9mIHRoZSBkYXRhIGJldHRlciBzaG91bGQgbWF0Y2guICAqLworQEAgLTEwMSw3ICs5NSw3IEBACisgCX0KKyAKKyAgICAgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjMyX1JlbGEpID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfUmVsYSwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0BAIC0xMTcsNyArMTExLDcgQEAKKyAgIGVsc2UKKyAgICAgeworICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfUmVsYSkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGY2NF9SZWxhLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9yZWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX3JlbC5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3JlbC5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgUkVMIHJlbG9jYXRpb24gaW5mb3JtYXRpb24gYXQgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTY4LDEyICs2OCw2IEBACisgICBpZiAoZHN0ID09IE5VTEwpCisgICAgIHJldHVybiAwOworIAorLSAgaWYgKHVubGlrZWx5IChuZHggPCAwKSkKKy0gICAgeworLSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorLQorICAgaWYgKHVubGlrZWx5IChkYXRhX3Njbi0+ZC5kX3R5cGUgIT0gRUxGX1RfUkVMKSkKKyAgICAgeworICAgICAgIC8qIFRoZSB0eXBlIG9mIHRoZSBkYXRhIGJldHRlciBzaG91bGQgbWF0Y2guICAqLworQEAgLTk5LDcgKzkzLDcgQEAKKyAJfQorIAorICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfUmVsKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX1JlbCwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0BAIC0xMTQsNyArMTA4LDcgQEAKKyAgIGVsc2UKKyAgICAgeworICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfUmVsKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjY0X1JlbCwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfc3ltLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW0uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW0uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogVXBkYXRlIHN5bWJvbCBpbmZvcm1hdGlvbiBpbiBzeW1ib2wgdGFibGUgYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMC4KKyAKK0BAIC03MiwxMiArNzIsNiBAQAorICAgaWYgKGRhdGEgPT0gTlVMTCkKKyAgICAgcmV0dXJuIDA7CisgCistICBpZiAodW5saWtlbHkgKG5keCA8IDApKQorLSAgICB7CistICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworLSAgICAgIHJldHVybiAwOworLSAgICB9CistCisgICBpZiAodW5saWtlbHkgKGRhdGFfc2NuLT5kLmRfdHlwZSAhPSBFTEZfVF9TWU0pKQorICAgICB7CisgICAgICAgLyogVGhlIHR5cGUgb2YgdGhlIGRhdGEgYmV0dGVyIHNob3VsZCBtYXRjaC4gICovCitAQCAtMTAyLDcgKzk2LDcgQEAKKyAJfQorIAorICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfU3ltKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX1N5bSwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0BAIC0xMjUsNyArMTE5LDcgQEAKKyAgIGVsc2UKKyAgICAgeworICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfU3ltKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjY0X1N5bSwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfc3ltaW5mby5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl91cGRhdGVfc3ltaW5mby5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3N5bWluZm8uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogVXBkYXRlIGFkZGl0aW9uYWwgc3ltYm9sIGluZm9ybWF0aW9uIGluIHN5bWJvbCB0YWJsZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTcyLDEyICs3Miw2IEBACisgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX1NZTUlORk8pKQorICAgICB7CisgICAgICAgLyogVGhlIHR5cGUgb2YgdGhlIGRhdGEgYmV0dGVyIHNob3VsZCBtYXRjaC4gICovCitAQCAtOTMsNyArODcsNyBAQAorICAgcndsb2NrX3dybG9jayAoc2NuLT5lbGYtPmxvY2spOworIAorICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfU3ltaW5mbykgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfU3ltaW5mbywgJmRhdGFfc2NuLT5kKSkKKyAgICAgeworICAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAgICAgICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfc3ltc2huZHguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX3N5bXNobmR4LmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfc3ltc2huZHguYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNiArMSw2IEBACisgLyogVXBkYXRlIHN5bWJvbCBpbmZvcm1hdGlvbiBhbmQgc2VjdGlvbiBpbmRleCBpbiBzeW1ib2wgdGFibGUgYXQgdGhlCisgICAgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTc3LDEyICs3Nyw2IEBACisgICBpZiAoc3ltZGF0YSA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoc3ltZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX1NZTSkpCisgICAgIHsKKyAgICAgICAvKiBUaGUgdHlwZSBvZiB0aGUgZGF0YSBiZXR0ZXIgc2hvdWxkIG1hdGNoLiAgKi8KK0BAIC0xMjgsNyArMTIyLDcgQEAKKyAJfQorIAorICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfU3ltKSA+IHN5bWRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX1N5bSwgJnN5bWRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0BAIC0xNTEsNyArMTQ1LDcgQEAKKyAgIGVsc2UKKyAgICAgeworICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfU3ltKSA+IHN5bWRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjY0X1N5bSwgJnN5bWRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfdmVyc3ltLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX3VwZGF0ZV92ZXJzeW0uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV92ZXJzeW0uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogVXBkYXRlIHN5bWJvbCB2ZXJzaW9uIGluZm9ybWF0aW9uLgorLSAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMS4KKyAKK0BAIC03NSw4ICs3NSw3IEBACisgICBhc3NlcnQgKHNpemVvZiAoR0VsZl9WZXJzeW0pID09IHNpemVvZiAoRWxmNjRfVmVyc3ltKSk7CisgCisgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICBpZiAodW5saWtlbHkgKG5keCA8IDApCistICAgICAgfHwgdW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9WZXJzeW0pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgIGlmIChJTlZBTElEX05EWCAobmR4LCBHRWxmX1ZlcnN5bSwgJmRhdGFfc2NuLT5kKSkKKyAgICAgeworICAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAgICAgICByZXR1cm4gMDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvbGliZWxmUC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvbGliZWxmUC5oCTIwMTAtMDEtMTIgMTY6NTc6NTQuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2xpYmVsZlAuaAkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTYwOCw0ICs2MDgsOCBAQAorIC8qIEFsaWduIG9mZnNldCB0byA0IGJ5dGVzIGFzIG5lZWRlZCBmb3Igbm90ZSBuYW1lIGFuZCBkZXNjcmlwdG9yIGRhdGEuICAqLworICNkZWZpbmUgTk9URV9BTElHTihuKQkoKChuKSArIDMpICYgLTRVKQorIAorKy8qIENvbnZlbmllbmNlIG1hY3JvLiAgKi8KKysjZGVmaW5lIElOVkFMSURfTkRYKG5keCwgdHlwZSwgZGF0YSkgXAorKyAgdW5saWtlbHkgKChkYXRhKS0+ZF9zaXplIC8gc2l6ZW9mICh0eXBlKSA8PSAodW5zaWduZWQgaW50KSAobmR4KSkKKysKKyAjZW5kaWYgIC8qIGxpYmVsZlAuaCAqLworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNzoxMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMTY0MCw2ICsxNjQwLDE2IEBACisgCW9iamVjdCBzeW1ib2xzIG9yIHN5bWJvbHMgd2l0aCB1bmtub3duIHR5cGUuCisgCShjaGVja19yZWwpOiBMaWtld2lzZS4KKyAKKysyMDA1LTA2LTA5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIHJlYWRlbGYuYyAoaGFuZGxlX2R5bmFtaWMsIGhhbmRsZV9zeW10YWIpOiBDaGVjayBmb3IgYm9ndXMgc2hfbGluay4KKysJKGhhbmRsZV92ZXJuZWVkLCBoYW5kbGVfdmVyZGVmLCBoYW5kbGVfdmVyc3ltLCBoYW5kbGVfaGFzaCk6IExpa2V3aXNlLgorKwkoaGFuZGxlX3NjbmdycCk6IENoZWNrIGZvciBib2d1cyBzaF9pbmZvLgorKworKwkqIHN0cmlwLmMgKGhhbmRsZV9lbGYpOiBDaGVjayBmb3IgYm9ndXMgdmFsdWVzIGluIHNoX2xpbmssIHNoX2luZm8sCisrCXN0X3NobmR4LCBlX3Noc3RybmR4LCBhbmQgU0hUX0dST1VQIG9yIFNIVF9TWU1UQUJfU0hORFggZGF0YS4KKysJRG9uJ3QgdXNlIGFzc2VydCBvbiBpbnB1dCB2YWx1ZXMsIGluc3RlYWQgYmFpbCB3aXRoICJpbGxmb3JtZWQiIGVycm9yLgorKworIDIwMDUtMDYtMDggIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogcmVhZGVsZi5jIChwcmludF9vcHMpOiBBZGQgY29uc3RzLgorQEAgLTE2OTAsNiArMTcwMCwxOSBAQAorIAorIAkqIHJlYWRlbGYuYyAoZHdhcmZfdGFnX3N0cmluZyk6IEFkZCBuZXcgdGFncy4KKyAKKysyMDA1LTA1LTE3ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKysKKysJKiBlbGZsaW50LmMgKGNoZWNrX2hhc2gpOiBEb24ndCBjaGVjayBlbnRyaWVzIGJleW9uZCBlbmQgb2Ygc2VjdGlvbi4KKysJKGNoZWNrX25vdGUpOiBEb24ndCBjcmFzaCBpZiBnZWxmX3Jhd2NodW5rIGZhaWxzLgorKwkoc2VjdGlvbl9uYW1lKTogUmV0dXJuIDxpbnZhbGlkPiBpZiBnZWxmX2dldHNoZHIgcmV0dXJucyBOVUxMLgorKworKzIwMDUtMDUtMTQgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorKworKwkqIGVsZmxpbnQuYyAoc2VjdGlvbl9uYW1lKTogUmV0dXJuICI8aW52YWxpZD4iIGluc3RlYWQgb2YKKysJY3Jhc2hpbmcgb24gaW52YWxpZCBzZWN0aW9uIG5hbWUuCisrCShjaGVja19zeW10YWIsIGlzX3JlbF9keW4sIGNoZWNrX3JlbGEsIGNoZWNrX3JlbCwgY2hlY2tfZHluYW1pYywKKysJY2hlY2tfc3ltdGFiX3NobmR4LCBjaGVja19oYXNoLCBjaGVja192ZXJzeW0pOiBSb2J1c3RpZnkuCisrCisgMjAwNS0wNS0wOCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBzdHJpcC5jIChoYW5kbGVfZWxmKTogRG9uJ3QgdHJhbnNsYXRlIGhhc2ggYW5kIHZlcnN5bSBkYXRhIGZvcm1hdHMsCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2VsZmxpbnQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL2VsZmxpbnQuYwkyMDEwLTA0LTEzIDIwOjA4OjAyLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9lbGZsaW50LmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMzEsNiArMTMxLDEwIEBACisgLyogQXJyYXkgdG8gY291bnQgcmVmZXJlbmNlcyBpbiBzZWN0aW9uIGdyb3Vwcy4gICovCisgc3RhdGljIGludCAqc2NucmVmOworIAorKy8qIE51bWJlcnMgb2Ygc2VjdGlvbnMgYW5kIHByb2dyYW0gaGVhZGVycy4gICovCisrc3RhdGljIHVuc2lnbmVkIGludCBzaG51bTsKKytzdGF0aWMgdW5zaWduZWQgaW50IHBobnVtOworKworIAorIGludAorIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCitAQCAtMzE5LDEwICszMjMsMTkgQEAKKyB7CisgICBHRWxmX1NoZHIgc2hkcl9tZW07CisgICBHRWxmX1NoZHIgKnNoZHI7CisrICBjb25zdCBjaGFyICpyZXQ7CisrCisrICBpZiAoKHVuc2lnbmVkIGludCkgaWR4ID4gc2hudW0pCisrICAgIHJldHVybiAiPGludmFsaWQ+IjsKKyAKKyAgIHNoZHIgPSBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBpZHgpLCAmc2hkcl9tZW0pOworKyAgaWYgKHNoZHIgPT0gTlVMTCkKKysgICAgcmV0dXJuICI8aW52YWxpZD4iOworIAorLSAgcmV0dXJuIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgc2hkci0+c2hfbmFtZSk7CisrICByZXQgPSBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIHNoZHItPnNoX25hbWUpOworKyAgaWYgKHJldCA9PSBOVUxMKQorKyAgICByZXR1cm4gIjxpbnZhbGlkPiI7CisrICByZXR1cm4gcmV0OworIH0KKyAKKyAKK0BAIC0zNDQsMTEgKzM1Nyw2IEBACisgICAoc2l6ZW9mICh2YWxpZF9lX21hY2hpbmUpIC8gc2l6ZW9mICh2YWxpZF9lX21hY2hpbmVbMF0pKQorIAorIAorLS8qIE51bWJlcnMgb2Ygc2VjdGlvbnMgYW5kIHByb2dyYW0gaGVhZGVycy4gICovCistc3RhdGljIHVuc2lnbmVkIGludCBzaG51bTsKKy1zdGF0aWMgdW5zaWduZWQgaW50IHBobnVtOworLQorLQorIHN0YXRpYyB2b2lkCisgY2hlY2tfZWxmX2hlYWRlciAoRWJsICplYmwsIEdFbGZfRWhkciAqZWhkciwgc2l6ZV90IHNpemUpCisgeworQEAgLTYzMiw3ICs2NDAsOCBAQAorIAkgIH0KKyAgICAgICB9CisgCistICBpZiAoc2hkci0+c2hfZW50c2l6ZSAhPSBnZWxmX2ZzaXplIChlYmwtPmVsZiwgRUxGX1RfU1lNLCAxLCBFVl9DVVJSRU5UKSkKKysgIHNpemVfdCBzaF9lbnRzaXplID0gZ2VsZl9mc2l6ZSAoZWJsLT5lbGYsIEVMRl9UX1NZTSwgMSwgRVZfQ1VSUkVOVCk7CisrICBpZiAoc2hkci0+c2hfZW50c2l6ZSAhPSBzaF9lbnRzaXplKQorICAgICBFUlJPUiAoZ2V0dGV4dCAoIlwKKyBzZWN0aW9uIFslMnVdICclcyc6IGVudHJ5IHNpemUgaXMgZG9lcyBub3QgbWF0Y2ggRWxmWFhfU3ltXG4iKSwKKyAJICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSk7CitAQCAtNjcwLDcgKzY3OSw3IEBACisgCSAgICAgICB4bmR4c2NuaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgeG5keHNjbmlkeCkpOworICAgICB9CisgCistICBmb3IgKHNpemVfdCBjbnQgPSAxOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZTsgKytjbnQpCisrICBmb3IgKHNpemVfdCBjbnQgPSAxOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hfZW50c2l6ZTsgKytjbnQpCisgICAgIHsKKyAgICAgICBzeW0gPSBnZWxmX2dldHN5bXNobmR4IChkYXRhLCB4bmR4ZGF0YSwgY250LCAmc3ltX21lbSwgJnhuZHgpOworICAgICAgIGlmIChzeW0gPT0gTlVMTCkKK0BAIC02OTAsNyArNjk5LDggQEAKKyAgICAgICBlbHNlCisgCXsKKyAJICBuYW1lID0gZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmssIHN5bS0+c3RfbmFtZSk7CistCSAgYXNzZXJ0IChuYW1lICE9IE5VTEwpOworKwkgIGFzc2VydCAobmFtZSAhPSBOVUxMCisrCQkgIHx8IHN0cnNoZHItPnNoX3R5cGUgIT0gU0hUX1NUUlRBQik7CisgCX0KKyAKKyAgICAgICBpZiAoc3ltLT5zdF9zaG5keCA9PSBTSE5fWElOREVYKQorQEAgLTEwMzgsOSArMTA0OCwxMSBAQAorICAgICB7CisgICAgICAgR0VsZl9TaGRyIHJjc2hkcl9tZW07CisgICAgICAgY29uc3QgR0VsZl9TaGRyICpyY3NoZHIgPSBnZWxmX2dldHNoZHIgKHNjbiwgJnJjc2hkcl9tZW0pOworLSAgICAgIGFzc2VydCAocmNzaGRyICE9IE5VTEwpOworIAorLSAgICAgIGlmIChyY3NoZHItPnNoX3R5cGUgPT0gU0hUX0RZTkFNSUMpCisrICAgICAgaWYgKHJjc2hkciA9PSBOVUxMKQorKwlicmVhazsKKysKKysgICAgICBpZiAocmNzaGRyLT5zaF90eXBlID09IFNIVF9EWU5BTUlDICYmIHJjc2hkci0+c2hfZW50c2l6ZSkKKyAJeworIAkgIC8qIEZvdW5kIHRoZSBkeW5hbWljIHNlY3Rpb24uICBMb29rIHRocm91Z2ggaXQuICAqLworIAkgIEVsZl9EYXRhICpkID0gZWxmX2dldGRhdGEgKHNjbiwgTlVMTCk7CitAQCAtMTA1MCw3ICsxMDYyLDkgQEAKKyAJICAgIHsKKyAJICAgICAgR0VsZl9EeW4gZHluX21lbTsKKyAJICAgICAgR0VsZl9EeW4gKmR5biA9IGdlbGZfZ2V0ZHluIChkLCBjbnQsICZkeW5fbWVtKTsKKy0JICAgICAgYXNzZXJ0IChkeW4gIT0gTlVMTCk7CisrCisrCSAgICAgIGlmIChkeW4gPT0gTlVMTCkKKysJCWJyZWFrOworIAorIAkgICAgICBpZiAoZHluLT5kX3RhZyA9PSBEVF9SRUxDT1VOVCkKKyAJCXsKK0BAIC0xMDY0LDcgKzEwNzgsOSBAQAorIAkJICAgICAgLyogRG9lcyB0aGUgbnVtYmVyIHNwZWNpZmllZCBudW1iZXIgb2YgcmVsYXRpdmUKKyAJCQkgcmVsb2NhdGlvbnMgZXhjZWVkIHRoZSB0b3RhbCBudW1iZXIgb2YKKyAJCQkgcmVsb2NhdGlvbnM/ICAqLworLQkJICAgICAgaWYgKGR5bi0+ZF91bi5kX3ZhbCA+IHNoZHItPnNoX3NpemUgLyBzaGRyLT5zaF9lbnRzaXplKQorKwkJICAgICAgaWYgKHNoZHItPnNoX2VudHNpemUgIT0gMAorKwkJCSAgJiYgZHluLT5kX3VuLmRfdmFsID4gKHNoZHItPnNoX3NpemUKKysJCQkJCQkvIHNoZHItPnNoX2VudHNpemUpKQorIAkJCUVSUk9SIChnZXR0ZXh0ICgiXAorIHNlY3Rpb24gWyUyZF0gJyVzJzogRFRfUkVMQ09VTlQgdmFsdWUgJWQgdG9vIGhpZ2ggZm9yIHRoaXMgc2VjdGlvblxuIiksCisgCQkJICAgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksCitAQCAtMTIyNCw3ICsxMjQwLDggQEAKKyAJfQorICAgICB9CisgCistICBpZiAoc2hkci0+c2hfZW50c2l6ZSAhPSBnZWxmX2ZzaXplIChlYmwtPmVsZiwgcmVsdHlwZSwgMSwgRVZfQ1VSUkVOVCkpCisrICBzaXplX3Qgc2hfZW50c2l6ZSA9IGdlbGZfZnNpemUgKGVibC0+ZWxmLCByZWx0eXBlLCAxLCBFVl9DVVJSRU5UKTsKKysgIGlmIChzaGRyLT5zaF9lbnRzaXplICE9IHNoX2VudHNpemUpCisgICAgIEVSUk9SIChnZXR0ZXh0IChyZWx0eXBlID09IEVMRl9UX1JFTEEgPyAiXAorIHNlY3Rpb24gWyUyZF0gJyVzJzogc2VjdGlvbiBlbnRyeSBzaXplIGRvZXMgbm90IG1hdGNoIEVsZlhYX1JlbGFcbiIgOiAiXAorIHNlY3Rpb24gWyUyZF0gJyVzJzogc2VjdGlvbiBlbnRyeSBzaXplIGRvZXMgbm90IG1hdGNoIEVsZlhYX1JlbFxuIiksCitAQCAtMTQ0Nyw3ICsxNDY0LDggQEAKKyAgIEVsZl9EYXRhICpzeW1kYXRhID0gZWxmX2dldGRhdGEgKHN5bXNjbiwgTlVMTCk7CisgICBlbnVtIGxvYWRfc3RhdGUgc3RhdGUgPSBzdGF0ZV91bmRlY2lkZWQ7CisgCistICBmb3IgKHNpemVfdCBjbnQgPSAwOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZTsgKytjbnQpCisrICBzaXplX3Qgc2hfZW50c2l6ZSA9IGdlbGZfZnNpemUgKGVibC0+ZWxmLCBFTEZfVF9SRUxBLCAxLCBFVl9DVVJSRU5UKTsKKysgIGZvciAoc2l6ZV90IGNudCA9IDA7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaF9lbnRzaXplOyArK2NudCkKKyAgICAgeworICAgICAgIEdFbGZfUmVsYSByZWxhX21lbTsKKyAgICAgICBHRWxmX1JlbGEgKnJlbGEgPSBnZWxmX2dldHJlbGEgKGRhdGEsIGNudCwgJnJlbGFfbWVtKTsKK0BAIC0xNDk3LDcgKzE1MTUsOCBAQAorICAgRWxmX0RhdGEgKnN5bWRhdGEgPSBlbGZfZ2V0ZGF0YSAoc3ltc2NuLCBOVUxMKTsKKyAgIGVudW0gbG9hZF9zdGF0ZSBzdGF0ZSA9IHN0YXRlX3VuZGVjaWRlZDsKKyAKKy0gIGZvciAoc2l6ZV90IGNudCA9IDA7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaGRyLT5zaF9lbnRzaXplOyArK2NudCkKKysgIHNpemVfdCBzaF9lbnRzaXplID0gZ2VsZl9mc2l6ZSAoZWJsLT5lbGYsIEVMRl9UX1JFTCwgMSwgRVZfQ1VSUkVOVCk7CisrICBmb3IgKHNpemVfdCBjbnQgPSAwOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hfZW50c2l6ZTsgKytjbnQpCisgICAgIHsKKyAgICAgICBHRWxmX1JlbCByZWxfbWVtOworICAgICAgIEdFbGZfUmVsICpyZWwgPSBnZWxmX2dldHJlbCAoZGF0YSwgY250LCAmcmVsX21lbSk7CitAQCAtMTYwMCw3ICsxNjE5LDggQEAKKyAJICAgc2hkci0+c2hfbGluaywgc2VjdGlvbl9uYW1lIChlYmwsIHNoZHItPnNoX2xpbmspLAorIAkgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpKTsKKyAKKy0gIGlmIChzaGRyLT5zaF9lbnRzaXplICE9IGdlbGZfZnNpemUgKGVibC0+ZWxmLCBFTEZfVF9EWU4sIDEsIEVWX0NVUlJFTlQpKQorKyAgc2l6ZV90IHNoX2VudHNpemUgPSBnZWxmX2ZzaXplIChlYmwtPmVsZiwgRUxGX1RfRFlOLCAxLCBFVl9DVVJSRU5UKTsKKysgIGlmIChzaGRyLT5zaF9lbnRzaXplICE9IHNoX2VudHNpemUpCisgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorIHNlY3Rpb24gWyUyZF0gJyVzJzogc2VjdGlvbiBlbnRyeSBzaXplIGRvZXMgbm90IG1hdGNoIEVsZlhYX0R5blxuIiksCisgCSAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCkpOworQEAgLTE2MTAsNyArMTYzMCw3IEBACisgCSAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCkpOworIAorICAgYm9vbCBub25fbnVsbF93YXJuZWQgPSBmYWxzZTsKKy0gIGZvciAoY250ID0gMDsgY250IDwgc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemU7ICsrY250KQorKyAgZm9yIChjbnQgPSAwOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hfZW50c2l6ZTsgKytjbnQpCisgICAgIHsKKyAgICAgICBHRWxmX0R5biBkeW5fbWVtOworICAgICAgIEdFbGZfRHluICpkeW4gPSBnZWxmX2dldGR5biAoZGF0YSwgY250LCAmZHluX21lbSk7CitAQCAtMTg5MSw2ICsxOTExLDggQEAKKyAJICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSk7CisgCisgICBpZiAoc3ltc2hkciAhPSBOVUxMCisrICAgICAgJiYgc2hkci0+c2hfZW50c2l6ZQorKyAgICAgICYmIHN5bXNoZHItPnNoX2VudHNpemUKKyAgICAgICAmJiAoc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemUKKyAJICA8IHN5bXNoZHItPnNoX3NpemUgLyBzeW1zaGRyLT5zaF9lbnRzaXplKSkKKyAgICAgRVJST1IgKGdldHRleHQgKCJcCitAQCAtMTkxNyw2ICsxOTM5LDEyIEBACisgICAgIH0KKyAKKyAgIEVsZl9EYXRhICpkYXRhID0gZWxmX2dldGRhdGEgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBpZHgpLCBOVUxMKTsKKysgIGlmIChkYXRhID09IE5VTEwpCisrICAgIHsKKysgICAgICBFUlJPUiAoZ2V0dGV4dCAoInNlY3Rpb24gWyUyZF0gJyVzJzogY2Fubm90IGdldCBzZWN0aW9uIGRhdGFcbiIpLAorKyAJICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKyAKKyAgIGlmICgqKChFbGYzMl9Xb3JkICopIGRhdGEtPmRfYnVmKSAhPSAwKQorICAgICBFUlJPUiAoZ2V0dGV4dCAoInN5bWJvbCAwIHNob3VsZCBoYXZlIHplcm8gZXh0ZW5kZWQgc2VjdGlvbiBpbmRleFxuIikpOworQEAgLTE5NTksNyArMTk4Nyw3IEBACisgCisgICBzaXplX3QgbWF4aWR4ID0gbmNoYWluOworIAorLSAgaWYgKHN5bXNoZHIgIT0gTlVMTCkKKysgIGlmIChzeW1zaGRyICE9IE5VTEwgJiYgc3ltc2hkci0+c2hfZW50c2l6ZSAhPSAwKQorICAgICB7CisgICAgICAgc2l6ZV90IHN5bXNpemUgPSBzeW1zaGRyLT5zaF9zaXplIC8gc3ltc2hkci0+c2hfZW50c2l6ZTsKKyAKK0BAIC0xOTcwLDE4ICsxOTk4LDI4IEBACisgICAgICAgbWF4aWR4ID0gc3ltc2l6ZTsKKyAgICAgfQorIAorKyAgRWxmMzJfV29yZCAqYnVmID0gKEVsZjMyX1dvcmQgKikgZGF0YS0+ZF9idWY7CisrICBFbGYzMl9Xb3JkICplbmQgPSAoRWxmMzJfV29yZCAqKSAoKGNoYXIgKikgZGF0YS0+ZF9idWYgKyBzaGRyLT5zaF9zaXplKTsKKyAgIHNpemVfdCBjbnQ7CisgICBmb3IgKGNudCA9IDI7IGNudCA8IDIgKyBuYnVja2V0OyArK2NudCkKKy0gICAgaWYgKCgoRWxmMzJfV29yZCAqKSBkYXRhLT5kX2J1ZilbY250XSA+PSBtYXhpZHgpCisrICAgIHsKKysgICAgICBpZiAoYnVmICsgY250ID49IGVuZCkKKysJYnJlYWs7CisrICAgICAgZWxzZSBpZiAoYnVmW2NudF0gPj0gbWF4aWR4KQorICAgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorIHNlY3Rpb24gWyUyZF0gJyVzJzogaGFzaCBidWNrZXQgcmVmZXJlbmNlICV6dSBvdXQgb2YgYm91bmRzXG4iKSwKKyAJICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLCBjbnQgLSAyKTsKKysgICAgfQorIAorICAgZm9yICg7IGNudCA8IDIgKyBuYnVja2V0ICsgbmNoYWluOyArK2NudCkKKy0gICAgaWYgKCgoRWxmMzJfV29yZCAqKSBkYXRhLT5kX2J1ZilbY250XSA+PSBtYXhpZHgpCisrICAgIHsKKysgICAgICBpZiAoYnVmICsgY250ID49IGVuZCkKKysJYnJlYWs7CisrICAgICAgZWxzZSBpZiAoYnVmW2NudF0gPj0gbWF4aWR4KQorICAgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorIHNlY3Rpb24gWyUyZF0gJyVzJzogaGFzaCBjaGFpbiByZWZlcmVuY2UgJXp1IG91dCBvZiBib3VuZHNcbiIpLAorIAkgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksIGNudCAtIDIgLSBuYnVja2V0KTsKKysgICAgfQorIH0KKyAKKyAKK0BAIC0yMDExLDE4ICsyMDQ5LDI4IEBACisgICAgICAgbWF4aWR4ID0gc3ltc2l6ZTsKKyAgICAgfQorIAorKyAgRWxmNjRfWHdvcmQgKmJ1ZiA9IChFbGY2NF9Yd29yZCAqKSBkYXRhLT5kX2J1ZjsKKysgIEVsZjY0X1h3b3JkICplbmQgPSAoRWxmNjRfWHdvcmQgKikgKChjaGFyICopIGRhdGEtPmRfYnVmICsgc2hkci0+c2hfc2l6ZSk7CisgICBzaXplX3QgY250OworICAgZm9yIChjbnQgPSAyOyBjbnQgPCAyICsgbmJ1Y2tldDsgKytjbnQpCistICAgIGlmICgoKEVsZjY0X1h3b3JkICopIGRhdGEtPmRfYnVmKVtjbnRdID49IG1heGlkeCkKKysgICAgeworKyAgICAgIGlmIChidWYgKyBjbnQgPj0gZW5kKQorKwlicmVhazsKKysgICAgICBlbHNlIGlmIChidWZbY250XSA+PSBtYXhpZHgpCisgICAgICAgRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBoYXNoIGJ1Y2tldCByZWZlcmVuY2UgJXp1IG91dCBvZiBib3VuZHNcbiIpLAorIAkgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksIGNudCAtIDIpOworKyAgICB9CisgCisgICBmb3IgKDsgY250IDwgMiArIG5idWNrZXQgKyBuY2hhaW47ICsrY250KQorLSAgICBpZiAoKChFbGY2NF9Yd29yZCAqKSBkYXRhLT5kX2J1ZilbY250XSA+PSBtYXhpZHgpCisrICAgIHsKKysgICAgICBpZiAoYnVmICsgY250ID49IGVuZCkKKysJYnJlYWs7CisrICAgICAgZWxzZSBpZiAoYnVmW2NudF0gPj0gbWF4aWR4KQorICAgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorIHNlY3Rpb24gWyUyZF0gJyVzJzogaGFzaCBjaGFpbiByZWZlcmVuY2UgJSIgUFJJdTY0ICIgb3V0IG9mIGJvdW5kc1xuIiksCistCSAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgKHVpbnQ2NF90KSAoY250IC0gMiAtIG5idWNrZXQpKTsKKysJICAgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksICh1aW50NjRfdCkgY250IC0gMiAtIG5idWNrZXQpOworKyAgICB9CisgfQorIAorIAorQEAgLTIwNDcsNyArMjA5NSw3IEBACisgICBpZiAoc2hkci0+c2hfc2l6ZSA8ICg0ICsgYml0bWFza193b3JkcyArIG5idWNrZXRzKSAqIHNpemVvZiAoRWxmMzJfV29yZCkpCisgICAgIHsKKyAgICAgICBFUlJPUiAoZ2V0dGV4dCAoIlwKKy1zZWN0aW9uIFslMmRdICclcyc6IGhhc2ggdGFibGUgc2VjdGlvbiBpcyB0b28gc21hbGwgKGlzICVsZCwgZXhwZWN0ZWQgYXQgbGVhc3QlbGQpXG4iKSwKKytzZWN0aW9uIFslMmRdICclcyc6IGhhc2ggdGFibGUgc2VjdGlvbiBpcyB0b28gc21hbGwgKGlzICVsZCwgZXhwZWN0ZWQgYXQgbGVhc3QgJWxkKVxuIiksCisgCSAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgKGxvbmcgaW50KSBzaGRyLT5zaF9zaXplLAorIAkgICAgIChsb25nIGludCkgKCg0ICsgYml0bWFza193b3JkcyArIG5idWNrZXRzKSAqIHNpemVvZiAoRWxmMzJfV29yZCkpKTsKKyAgICAgICByZXR1cm47CitAQCAtMjcxOSw4ICsyNzY3LDkgQEAKKyAKKyAgIC8qIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHZlcnNpb24gc3ltYm9sIHRhYmxlIG11c3QgYmUgdGhlCisgICAgICBzYW1lIGFzIHRoZSBudW1iZXIgb2Ygc3ltYm9scy4gICovCistICBpZiAoc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemUKKy0gICAgICAhPSBzeW1zaGRyLT5zaF9zaXplIC8gc3ltc2hkci0+c2hfZW50c2l6ZSkKKysgIGlmIChzaGRyLT5zaF9lbnRzaXplICYmIHN5bXNoZHItPnNoX2VudHNpemUKKysgICAgICAmJiAoc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemUKKysJICAhPSBzeW1zaGRyLT5zaF9zaXplIC8gc3ltc2hkci0+c2hfZW50c2l6ZSkpCisgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorIHNlY3Rpb24gWyUyZF0gJyVzJyBoYXMgZGlmZmVyZW50IG51bWJlciBvZiBlbnRyaWVzIHRoYW4gc3ltYm9sIHRhYmxlIFslMmRdICclcydcbiIpLAorIAkgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9yZWFkZWxmLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9yZWFkZWxmLmMJMjAxMC0wNy0wMyAxMzowNzoxMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvcmVhZGVsZi5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMTE3Miw2ICsxMTcyLDggQEAKKyAgIEVsZjMyX1dvcmQgKmdycHJlZiA9IChFbGYzMl9Xb3JkICopIGRhdGEtPmRfYnVmOworIAorICAgR0VsZl9TeW0gc3ltX21lbTsKKysgIEdFbGZfU3ltICpzeW0gPSBnZWxmX2dldHN5bSAoc3ltZGF0YSwgc2hkci0+c2hfaW5mbywgJnN5bV9tZW0pOworKworICAgcHJpbnRmICgoZ3JwcmVmWzBdICYgR1JQX0NPTURBVCkKKyAJICA/IG5nZXR0ZXh0ICgiXAorIFxuQ09NREFUIHNlY3Rpb24gZ3JvdXAgWyUyenVdICclcycgd2l0aCBzaWduYXR1cmUgJyVzJyBjb250YWlucyAlenUgZW50cnk6XG4iLAorQEAgLTExODQsOCArMTE4Niw4IEBACisgCQkgICAgICBkYXRhLT5kX3NpemUgLyBzaXplb2YgKEVsZjMyX1dvcmQpIC0gMSksCisgCSAgZWxmX25keHNjbiAoc2NuKSwKKyAJICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIHNoZHItPnNoX25hbWUpLAorLQkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzeW1zaGRyLT5zaF9saW5rLAorLQkJICAgICAgZ2VsZl9nZXRzeW0gKHN5bWRhdGEsIHNoZHItPnNoX2luZm8sICZzeW1fbWVtKS0+c3RfbmFtZSkKKysJICAoc3ltID09IE5VTEwgPyBOVUxMCisrCSAgIDogZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHN5bXNoZHItPnNoX2xpbmssIHN5bS0+c3RfbmFtZSkpCisgCSAgPzogZ2V0dGV4dCAoIjxJTlZBTElEIFNZTUJPTD4iKSwKKyAJICBkYXRhLT5kX3NpemUgLyBzaXplb2YgKEVsZjMyX1dvcmQpIC0gMSk7CisgCitAQCAtMTMzNiw3ICsxMzM4LDggQEAKKyBoYW5kbGVfZHluYW1pYyAoRWJsICplYmwsIEVsZl9TY24gKnNjbiwgR0VsZl9TaGRyICpzaGRyKQorIHsKKyAgIGludCBjbGFzcyA9IGdlbGZfZ2V0Y2xhc3MgKGVibC0+ZWxmKTsKKy0gIEdFbGZfU2hkciBnbGluazsKKysgIEdFbGZfU2hkciBnbGlua19tZW07CisrICBHRWxmX1NoZHIgKmdsaW5rOworICAgRWxmX0RhdGEgKmRhdGE7CisgICBzaXplX3QgY250OworICAgc2l6ZV90IHNoc3RybmR4OworQEAgLTEzNTEsNiArMTM1NCwxMSBAQAorICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorIAkgICBnZXR0ZXh0ICgiY2Fubm90IGdldCBzZWN0aW9uIGhlYWRlciBzdHJpbmcgdGFibGUgaW5kZXgiKSk7CisgCisrICBnbGluayA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLCAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBnZXR0ZXh0ICgiaW52YWxpZCBzaF9saW5rIHZhbHVlIGluIHNlY3Rpb24gJVp1IiksCisrCSAgIGVsZl9uZHhzY24gKHNjbikpOworKworICAgcHJpbnRmIChuZ2V0dGV4dCAoIlwKKyBcbkR5bmFtaWMgc2VnbWVudCBjb250YWlucyAlbHUgZW50cnk6XG4gQWRkcjogJSMwKiIgUFJJeDY0ICIgIE9mZnNldDogJSMwOCIgUFJJeDY0ICIgIExpbmsgdG8gc2VjdGlvbjogWyUydV0gJyVzJ1xuIiwKKyAJCSAgICAiXAorQEAgLTEzNjAsOSArMTM2OCw3IEBACisgCSAgY2xhc3MgPT0gRUxGQ0xBU1MzMiA/IDEwIDogMTgsIHNoZHItPnNoX2FkZHIsCisgCSAgc2hkci0+c2hfb2Zmc2V0LAorIAkgIChpbnQpIHNoZHItPnNoX2xpbmssCistCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LAorLQkJICAgICAgZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCistCQkJCSAgICAmZ2xpbmspLT5zaF9uYW1lKSk7CisrCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBnbGluay0+c2hfbmFtZSkpOworICAgZnB1dHNfdW5sb2NrZWQgKGdldHRleHQgKCIgIFR5cGUgICAgICAgICAgICAgIFZhbHVlXG4iKSwgc3Rkb3V0KTsKKyAKKyAgIGZvciAoY250ID0gMDsgY250IDwgc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemU7ICsrY250KQorQEAgLTE5NDUsNiArMTk1MSwxMyBAQAorICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorIAkgICBnZXR0ZXh0ICgiY2Fubm90IGdldCBzZWN0aW9uIGhlYWRlciBzdHJpbmcgdGFibGUgaW5kZXgiKSk7CisgCisrICBHRWxmX1NoZHIgZ2xpbmtfbWVtOworKyAgR0VsZl9TaGRyICpnbGluayA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorKwkJCQkgICAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBnZXR0ZXh0ICgiaW52YWxpZCBzaF9saW5rIHZhbHVlIGluIHNlY3Rpb24gJVp1IiksCisrCSAgIGVsZl9uZHhzY24gKHNjbikpOworKworICAgLyogTm93IHdlIGNhbiBjb21wdXRlIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgc2VjdGlvbi4gICovCisgICB1bnNpZ25lZCBpbnQgbnN5bXMgPSBkYXRhLT5kX3NpemUgLyAoY2xhc3MgPT0gRUxGQ0xBU1MzMgorIAkJCQkgICAgICAgPyBzaXplb2YgKEVsZjMyX1N5bSkKK0BAIC0xOTU1LDE1ICsxOTY4LDEyIEBACisgCQkgICAgbnN5bXMpLAorIAkgICh1bnNpZ25lZCBpbnQpIGVsZl9uZHhzY24gKHNjbiksCisgCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBzaGRyLT5zaF9uYW1lKSwgbnN5bXMpOworLSAgR0VsZl9TaGRyIGdsaW5rOworICAgcHJpbnRmIChuZ2V0dGV4dCAoIiAlbHUgbG9jYWwgc3ltYm9sICBTdHJpbmcgdGFibGU6IFslMnVdICclcydcbiIsCisgCQkgICAgIiAlbHUgbG9jYWwgc3ltYm9scyAgU3RyaW5nIHRhYmxlOiBbJTJ1XSAnJXMnXG4iLAorIAkJICAgIHNoZHItPnNoX2luZm8pLAorIAkgICh1bnNpZ25lZCBsb25nIGludCkgc2hkci0+c2hfaW5mbywKKyAJICAodW5zaWduZWQgaW50KSBzaGRyLT5zaF9saW5rLAorLQkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwKKy0JCSAgICAgIGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorLQkJCQkgICAgJmdsaW5rKS0+c2hfbmFtZSkpOworKwkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgZ2xpbmstPnNoX25hbWUpKTsKKyAKKyAgIGZwdXRzX3VubG9ja2VkIChjbGFzcyA9PSBFTEZDTEFTUzMyCisgCQkgID8gZ2V0dGV4dCAoIlwKK0BAIC0yMTk5LDcgKzIyMDksMTMgQEAKKyAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKyAJICAgZ2V0dGV4dCAoImNhbm5vdCBnZXQgc2VjdGlvbiBoZWFkZXIgc3RyaW5nIHRhYmxlIGluZGV4IikpOworIAorLSAgR0VsZl9TaGRyIGdsaW5rOworKyAgR0VsZl9TaGRyIGdsaW5rX21lbTsKKysgIEdFbGZfU2hkciAqZ2xpbmsgPSBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwKKysJCQkJICAgJmdsaW5rX21lbSk7CisrICBpZiAoZ2xpbmsgPT0gTlVMTCkKKysgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgZ2V0dGV4dCAoImludmFsaWQgc2hfbGluayB2YWx1ZSBpbiBzZWN0aW9uICVadSIpLAorKwkgICBlbGZfbmR4c2NuIChzY24pKTsKKysKKyAgIHByaW50ZiAobmdldHRleHQgKCJcCisgXG5WZXJzaW9uIG5lZWRzIHNlY3Rpb24gWyUydV0gJyVzJyBjb250YWlucyAlZCBlbnRyeTpcbiBBZGRyOiAlIzAqIiBQUkl4NjQgIiAgT2Zmc2V0OiAlIzA4IiBQUkl4NjQgIiAgTGluayB0byBzZWN0aW9uOiBbJTJ1XSAnJXMnXG4iLAorIAkJICAgICJcCitAQCAtMjIxMCw5ICsyMjI2LDcgQEAKKyAJICBjbGFzcyA9PSBFTEZDTEFTUzMyID8gMTAgOiAxOCwgc2hkci0+c2hfYWRkciwKKyAJICBzaGRyLT5zaF9vZmZzZXQsCisgCSAgKHVuc2lnbmVkIGludCkgc2hkci0+c2hfbGluaywKKy0JICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsCistCQkgICAgICBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwKKy0JCQkJICAgICZnbGluayktPnNoX25hbWUpKTsKKysJICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIGdsaW5rLT5zaF9uYW1lKSk7CisgCisgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKKyAgIGZvciAoaW50IGNudCA9IHNoZHItPnNoX2luZm87IC0tY250ID49IDA7ICkKK0BAIC0yMjY1LDggKzIyNzksMTQgQEAKKyAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKyAJICAgZ2V0dGV4dCAoImNhbm5vdCBnZXQgc2VjdGlvbiBoZWFkZXIgc3RyaW5nIHRhYmxlIGluZGV4IikpOworIAorKyAgR0VsZl9TaGRyIGdsaW5rX21lbTsKKysgIEdFbGZfU2hkciAqZ2xpbmsgPSBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwKKysJCQkJICAgJmdsaW5rX21lbSk7CisrICBpZiAoZ2xpbmsgPT0gTlVMTCkKKysgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgZ2V0dGV4dCAoImludmFsaWQgc2hfbGluayB2YWx1ZSBpbiBzZWN0aW9uICVadSIpLAorKwkgICBlbGZfbmR4c2NuIChzY24pKTsKKysKKyAgIGludCBjbGFzcyA9IGdlbGZfZ2V0Y2xhc3MgKGVibC0+ZWxmKTsKKy0gIEdFbGZfU2hkciBnbGluazsKKyAgIHByaW50ZiAobmdldHRleHQgKCJcCisgXG5WZXJzaW9uIGRlZmluaXRpb24gc2VjdGlvbiBbJTJ1XSAnJXMnIGNvbnRhaW5zICVkIGVudHJ5OlxuIEFkZHI6ICUjMCoiIFBSSXg2NCAiICBPZmZzZXQ6ICUjMDgiIFBSSXg2NCAiICBMaW5rIHRvIHNlY3Rpb246IFslMnVdICclcydcbiIsCisgCQkgICAgIlwKK0BAIC0yMjc4LDkgKzIyOTgsNyBAQAorIAkgIGNsYXNzID09IEVMRkNMQVNTMzIgPyAxMCA6IDE4LCBzaGRyLT5zaF9hZGRyLAorIAkgIHNoZHItPnNoX29mZnNldCwKKyAJICAodW5zaWduZWQgaW50KSBzaGRyLT5zaF9saW5rLAorLQkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwKKy0JCSAgICAgIGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorLQkJCQkgICAgJmdsaW5rKS0+c2hfbmFtZSkpOworKwkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgZ2xpbmstPnNoX25hbWUpKTsKKyAKKyAgIHVuc2lnbmVkIGludCBvZmZzZXQgPSAwOworICAgZm9yIChpbnQgY250ID0gc2hkci0+c2hfaW5mbzsgLS1jbnQgPj0gMDsgKQorQEAgLTI1NDIsOCArMjU2MCwxNCBAQAorICAgICAgIGZpbGVuYW1lID0gTlVMTDsKKyAgICAgfQorIAorKyAgR0VsZl9TaGRyIGdsaW5rX21lbTsKKysgIEdFbGZfU2hkciAqZ2xpbmsgPSBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwKKysJCQkJICAgJmdsaW5rX21lbSk7CisrICBpZiAoZ2xpbmsgPT0gTlVMTCkKKysgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgZ2V0dGV4dCAoImludmFsaWQgc2hfbGluayB2YWx1ZSBpbiBzZWN0aW9uICVadSIpLAorKwkgICBlbGZfbmR4c2NuIChzY24pKTsKKysKKyAgIC8qIFByaW50IHRoZSBoZWFkZXIuICAqLworLSAgR0VsZl9TaGRyIGdsaW5rOworICAgcHJpbnRmIChuZ2V0dGV4dCAoIlwKKyBcblZlcnNpb24gc3ltYm9scyBzZWN0aW9uIFslMnVdICclcycgY29udGFpbnMgJWQgZW50cnk6XG4gQWRkcjogJSMwKiIgUFJJeDY0ICIgIE9mZnNldDogJSMwOCIgUFJJeDY0ICIgIExpbmsgdG8gc2VjdGlvbjogWyUydV0gJyVzJyIsCisgCQkgICAgIlwKK0BAIC0yNTU1LDkgKzI1NzksNyBAQAorIAkgIGNsYXNzID09IEVMRkNMQVNTMzIgPyAxMCA6IDE4LCBzaGRyLT5zaF9hZGRyLAorIAkgIHNoZHItPnNoX29mZnNldCwKKyAJICAodW5zaWduZWQgaW50KSBzaGRyLT5zaF9saW5rLAorLQkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwKKy0JCSAgICAgIGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorLQkJCQkgICAgJmdsaW5rKS0+c2hfbmFtZSkpOworKwkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgZ2xpbmstPnNoX25hbWUpKTsKKyAKKyAgIC8qIE5vdyB3ZSBjYW4gZmluYWxseSBsb29rIGF0IHRoZSBhY3R1YWwgY29udGVudHMgb2YgdGhpcyBzZWN0aW9uLiAgKi8KKyAgIGZvciAodW5zaWduZWQgaW50IGNudCA9IDA7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaGRyLT5zaF9lbnRzaXplOyArK2NudCkKK0BAIC0yNjA5LDcgKzI2MzEsMTcgQEAKKyAgIGZvciAoRWxmMzJfV29yZCBjbnQgPSAwOyBjbnQgPCBuYnVja2V0OyArK2NudCkKKyAgICAgKytjb3VudHNbbGVuZ3Roc1tjbnRdXTsKKyAKKy0gIEdFbGZfU2hkciBnbGluazsKKysgIEdFbGZfU2hkciBnbGlua19tZW07CisrICBHRWxmX1NoZHIgKmdsaW5rID0gZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwKKysJCQkJCSAgICAgICBzaGRyLT5zaF9saW5rKSwKKysJCQkJICAgJmdsaW5rX21lbSk7CisrICBpZiAoZ2xpbmsgPT0gTlVMTCkKKysgICAgeworKyAgICAgIGVycm9yICgwLCAwLCBnZXR0ZXh0ICgiaW52YWxpZCBzaF9saW5rIHZhbHVlIGluIHNlY3Rpb24gJVp1IiksCisrCSAgICAgZWxmX25keHNjbiAoc2NuKSk7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisgICBwcmludGYgKG5nZXR0ZXh0ICgiXAorIFxuSGlzdG9ncmFtIGZvciBidWNrZXQgbGlzdCBsZW5ndGggaW4gc2VjdGlvbiBbJTJ1XSAnJXMnICh0b3RhbCBvZiAlZCBidWNrZXQpOlxuIEFkZHI6ICUjMCoiIFBSSXg2NCAiICBPZmZzZXQ6ICUjMDgiIFBSSXg2NCAiICBMaW5rIHRvIHNlY3Rpb246IFslMnVdICclcydcbiIsCisgCQkgICAgIlwKK0BAIC0yNjIyLDkgKzI2NTQsNyBAQAorIAkgIHNoZHItPnNoX2FkZHIsCisgCSAgc2hkci0+c2hfb2Zmc2V0LAorIAkgICh1bnNpZ25lZCBpbnQpIHNoZHItPnNoX2xpbmssCistCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LAorLQkJICAgICAgZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCistCQkJCSAgICAmZ2xpbmspLT5zaF9uYW1lKSk7CisrCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBnbGluay0+c2hfbmFtZSkpOworIAorICAgaWYgKGV4dHJhc3RyICE9IE5VTEwpCisgICAgIGZwdXRzIChleHRyYXN0ciwgc3Rkb3V0KTsKK0BAIC00MzEyLDYgKzQzNDIsMTYgQEAKKyAgICAgICByZXR1cm47CisgICAgIH0KKyAKKysgIEdFbGZfU2hkciBnbGlua19tZW07CisrICBHRWxmX1NoZHIgKmdsaW5rOworKyAgZ2xpbmsgPSBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwgJmdsaW5rX21lbSk7CisrICBpZiAoZ2xpbmsgPT0gTlVMTCkKKysgICAgeworKyAgICAgIGVycm9yICgwLCAwLCBnZXR0ZXh0ICgiaW52YWxpZCBzaF9saW5rIHZhbHVlIGluIHNlY3Rpb24gJVp1IiksCisrCSAgICAgZWxmX25keHNjbiAoc2NuKSk7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisgICBwcmludGYgKG5nZXR0ZXh0ICgiXAorIFxuRFdBUkYgc2VjdGlvbiBbJTJ6dV0gJyVzJyBhdCBvZmZzZXQgJSMiIFBSSXg2NCAiIGNvbnRhaW5zICV6dSBlbnRyeTpcbiIsCisgCQkgICAgIlwKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvc3RyaXAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL3N0cmlwLmMJMjAxMC0wNy0wMyAxMzowNzoxMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvc3RyaXAuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTU2MSw2ICs1NjEsMTEgQEAKKyAgICAgICBnb3RvIGZhaWxfY2xvc2U7CisgICAgIH0KKyAKKysgIGlmIChzaHN0cm5keCA+PSBzaG51bSkKKysgICAgZ290byBpbGxmb3JtZWQ7CisrCisrI2RlZmluZSBlbGZfYXNzZXJ0KHRlc3QpIGRvIHsgaWYgKCEodGVzdCkpIGdvdG8gaWxsZm9ybWVkOyB9IHdoaWxlICgwKQorKworICAgLyogU3RvcmFnZSBmb3Igc2VjdGlvbiBpbmZvcm1hdGlvbi4gIFdlIGxlYXZlIHJvb20gZm9yIHR3byBtb3JlCisgICAgICBlbnRyaWVzIHNpbmNlIHdlIHVuY29uZGl0aW9uYWxseSBjcmVhdGUgYSBzZWN0aW9uIGhlYWRlciBzdHJpbmcKKyAgICAgIHRhYmxlLiAgTWF5YmUgc29tZSB3ZWlyZCB0b29sIGNyZWF0ZWQgYW4gRUxGIGZpbGUgd2l0aG91dCBvbmUuCitAQCAtNTgyLDcgKzU4Nyw3IEBACisgICAgIHsKKyAgICAgICAvKiBUaGlzIHNob3VsZCBhbHdheXMgYmUgdHJ1ZSAoaS5lLiwgdGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkKKyAJIGhvbGVzIGluIHRoZSBudW1iZXJpbmcpLiAgKi8KKy0gICAgICBhc3NlcnQgKGVsZl9uZHhzY24gKHNjbikgPT0gY250KTsKKysgICAgICBlbGZfYXNzZXJ0IChlbGZfbmR4c2NuIChzY24pID09IGNudCk7CisgCisgICAgICAgc2hkcl9pbmZvW2NudF0uc2NuID0gc2NuOworIAorQEAgLTU5NSw2ICs2MDAsNyBAQAorIAkJCQkJc2hkcl9pbmZvW2NudF0uc2hkci5zaF9uYW1lKTsKKyAgICAgICBpZiAoc2hkcl9pbmZvW2NudF0ubmFtZSA9PSBOVUxMKQorIAl7CisrCWlsbGZvcm1lZDoKKyAJICBlcnJvciAoMCwgMCwgZ2V0dGV4dCAoImlsbGZvcm1lZCBmaWxlICclcyciKSwgZm5hbWUpOworIAkgIGdvdG8gZmFpbF9jbG9zZTsKKyAJfQorQEAgLTYwNCw2ICs2MTAsOCBAQAorIAorICAgICAgIC8qIFJlbWVtYmVyIHRoZSBzaGRyLnNoX2xpbmsgdmFsdWUuICAqLworICAgICAgIHNoZHJfaW5mb1tjbnRdLm9sZF9zaF9saW5rID0gc2hkcl9pbmZvW2NudF0uc2hkci5zaF9saW5rOworKyAgICAgIGlmIChzaGRyX2luZm9bY250XS5vbGRfc2hfbGluayA+PSBzaG51bSkKKysJZ290byBpbGxmb3JtZWQ7CisgCisgICAgICAgLyogU2VjdGlvbnMgaW4gZmlsZXMgb3RoZXIgdGhhbiByZWxvY2F0YWJsZSBvYmplY3QgZmlsZXMgd2hpY2gKKyAJIGFyZSBub3QgbG9hZGVkIGNhbiBiZSBmcmVlbHkgbW92ZWQgYnkgdXMuICBJbiByZWxvY2F0YWJsZQorQEAgLTYxNiw3ICs2MjQsNyBAQAorIAkgYXBwcm9wcmlhdGUgcmVmZXJlbmNlLiAgKi8KKyAgICAgICBpZiAodW5saWtlbHkgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfU1lNVEFCX1NITkRYKSkKKyAJeworLQkgIGFzc2VydCAoc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfbGlua10uc3ltdGFiX2lkeCA9PSAwKTsKKysJICBlbGZfYXNzZXJ0IChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9saW5rXS5zeW10YWJfaWR4ID09IDApOworIAkgIHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2xpbmtdLnN5bXRhYl9pZHggPSBjbnQ7CisgCX0KKyAgICAgICBlbHNlIGlmICh1bmxpa2VseSAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9HUk9VUCkpCitAQCAtNjMzLDcgKzY0MSwxMiBAQAorIAkgIGZvciAoaW5uZXIgPSAxOworIAkgICAgICAgaW5uZXIgPCBzaGRyX2luZm9bY250XS5kYXRhLT5kX3NpemUgLyBzaXplb2YgKEVsZjMyX1dvcmQpOworIAkgICAgICAgKytpbm5lcikKKysJICAgIHsKKysJICAgICAgaWYgKGdycHJlZltpbm5lcl0gPCBzaG51bSkKKyAJICAgIHNoZHJfaW5mb1tncnByZWZbaW5uZXJdXS5ncm91cF9pZHggPSBjbnQ7CisrCSAgICAgIGVsc2UKKysJCWdvdG8gaWxsZm9ybWVkOworKwkgICAgfQorIAorIAkgIGlmIChpbm5lciA9PSAxIHx8IChpbm5lciA9PSAyICYmIChncnByZWZbMF0gJiBHUlBfQ09NREFUKSA9PSAwKSkKKyAJICAgIC8qIElmIHRoZSBzZWN0aW9uIGdyb3VwIGNvbnRhaW5zIG9ubHkgb25lIGVsZW1lbnQgYW5kIHRoaXMKK0BAIC02NDQsNyArNjU3LDcgQEAKKyAJfQorICAgICAgIGVsc2UgaWYgKHVubGlrZWx5IChzaGRyX2luZm9bY250XS5zaGRyLnNoX3R5cGUgPT0gU0hUX0dOVV92ZXJzeW0pKQorIAl7CistCSAgYXNzZXJ0IChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9saW5rXS52ZXJzaW9uX2lkeCA9PSAwKTsKKysJICBlbGZfYXNzZXJ0IChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9saW5rXS52ZXJzaW9uX2lkeCA9PSAwKTsKKyAJICBzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9saW5rXS52ZXJzaW9uX2lkeCA9IGNudDsKKyAJfQorIAorQEAgLTY1Miw3ICs2NjUsNyBAQAorIAkgZGlzY2FyZGVkIHJpZ2h0IGF3YXkuICAqLworICAgICAgIGlmICgoc2hkcl9pbmZvW2NudF0uc2hkci5zaF9mbGFncyAmIFNIRl9HUk9VUCkgIT0gMCkKKyAJeworLQkgIGFzc2VydCAoc2hkcl9pbmZvW2NudF0uZ3JvdXBfaWR4ICE9IDApOworKwkgIGVsZl9hc3NlcnQgKHNoZHJfaW5mb1tjbnRdLmdyb3VwX2lkeCAhPSAwKTsKKyAKKyAJICBpZiAoc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLmdyb3VwX2lkeF0uaWR4ID09IDApCisgCSAgICB7CitAQCAtNzI3LDExICs3NDAsMTUgQEAKKyAJICAgIHsKKyAJICAgICAgLyogSWYgYSByZWxvY2F0aW9uIHNlY3Rpb24gaXMgbWFya2VkIGFzIGJlaW5nIHJlbW92ZWQgbWFrZQorIAkJIHN1cmUgdGhlIHNlY3Rpb24gaXQgaXMgcmVsb2NhdGluZyBpcyByZW1vdmVkLCB0b28uICAqLworLQkgICAgICBpZiAoKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfUkVMCisrCSAgICAgIGlmIChzaGRyX2luZm9bY250XS5zaGRyLnNoX3R5cGUgPT0gU0hUX1JFTAorIAkJICAgfHwgc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9SRUxBKQorLQkJICAmJiBzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9pbmZvXS5pZHggIT0gMCkKKysJCXsKKysJCSAgaWYgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfaW5mbyA+PSBzaG51bSkKKysJCSAgICBnb3RvIGlsbGZvcm1lZDsKKysJCSAgZWxzZSBpZiAoc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfaW5mb10uaWR4ICE9IDApCisgCQlzaGRyX2luZm9bY250XS5pZHggPSAxOworIAkgICAgfQorKwkgICAgfQorIAorIAkgIGlmIChzaGRyX2luZm9bY250XS5pZHggPT0gMSkKKyAJICAgIHsKK0BAIC03NTgsNyArNzc1LDcgQEAKKyAJCSAgaWYgKHNoZHJfaW5mb1tjbnRdLnN5bXRhYl9pZHggIT0gMAorIAkJICAgICAgJiYgc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnN5bXRhYl9pZHhdLmRhdGEgPT0gTlVMTCkKKyAJCSAgICB7CistCQkgICAgICBhc3NlcnQgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfU1lNVEFCKTsKKysJCSAgICAgIGVsZl9hc3NlcnQgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfU1lNVEFCKTsKKyAKKyAJCSAgICAgIHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zeW10YWJfaWR4XS5kYXRhCisgCQkJPSBlbGZfZ2V0ZGF0YSAoc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnN5bXRhYl9pZHhdLnNjbiwKK0BAIC03OTgsNiArODE1LDkgQEAKKyAJCSAgICAgIGVsc2UgaWYgKHNjbmlkeCA9PSBTSE5fWElOREVYKQorIAkJCXNjbmlkeCA9IHhuZHg7CisgCisrCQkgICAgICBpZiAoc2NuaWR4ID49IHNobnVtKQorKwkJCWdvdG8gaWxsZm9ybWVkOworKworIAkJICAgICAgaWYgKHNoZHJfaW5mb1tzY25pZHhdLmlkeCA9PSAwKQorIAkJCS8qIFRoaXMgc3ltYm9sIHRhYmxlIGhhcyBhIHJlYWwgc3ltYm9sIGluCisgCQkJICAgYSBkaXNjYXJkZWQgc2VjdGlvbi4gIFNvIHByZXNlcnZlIHRoZQorQEAgLTgyOCwxMiArODQ4LDE2IEBACisgCQl9CisgCisgCSAgICAgIC8qIEhhbmRsZSByZWZlcmVuY2VzIHRocm91Z2ggc2hfaW5mby4gICovCistCSAgICAgIGlmIChTSF9JTkZPX0xJTktfUCAoJnNoZHJfaW5mb1tjbnRdLnNoZHIpCistCQkgICYmIHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2luZm9dLmlkeCA9PSAwKQorKwkgICAgICBpZiAoU0hfSU5GT19MSU5LX1AgKCZzaGRyX2luZm9bY250XS5zaGRyKSkKKysJCXsKKysJCSAgaWYgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfaW5mbyA+PSBzaG51bSkKKysJCSAgICBnb3RvIGlsbGZvcm1lZDsKKysJCSAgZWxzZSBpZiAoIHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2luZm9dLmlkeCA9PSAwKQorIAkJeworIAkJICBzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9pbmZvXS5pZHggPSAxOworIAkJICBjaGFuZ2VzIHw9IHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfaW5mbyA8IGNudDsKKyAJCX0KKysJCX0KKyAKKyAJICAgICAgLyogTWFyayB0aGUgc2VjdGlvbiBhcyBpbnZlc3RpZ2F0ZWQuICAqLworIAkgICAgICBzaGRyX2luZm9bY250XS5pZHggPSAyOworQEAgLTk3Miw3ICs5OTYsNyBAQAorIAkgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIGdldHRleHQgKCJ3aGlsZSBnZW5lcmF0aW5nIG91dHB1dCBmaWxlOiAlcyIpLAorIAkJIGVsZl9lcnJtc2cgKC0xKSk7CisgCistCWFzc2VydCAoZWxmX25keHNjbiAoc2hkcl9pbmZvW2NudF0ubmV3c2NuKSA9PSBzaGRyX2luZm9bY250XS5pZHgpOworKwllbGZfYXNzZXJ0IChlbGZfbmR4c2NuIChzaGRyX2luZm9bY250XS5uZXdzY24pID09IHNoZHJfaW5mb1tjbnRdLmlkeCk7CisgCisgCS8qIEFkZCB0aGlzIG5hbWUgdG8gdGhlIHNlY3Rpb24gaGVhZGVyIHN0cmluZyB0YWJsZS4gICovCisgCXNoZHJfaW5mb1tjbnRdLnNlID0gZWJsX3N0cnRhYmFkZCAoc2hzdCwgc2hkcl9pbmZvW2NudF0ubmFtZSwgMCk7CitAQCAtMTAwOSw3ICsxMDMzLDcgQEAKKyAJZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKyAJICAgICAgIGdldHRleHQgKCJ3aGlsZSBjcmVhdGUgc2VjdGlvbiBoZWFkZXIgc2VjdGlvbjogJXMiKSwKKyAJICAgICAgIGVsZl9lcnJtc2cgKC0xKSk7CistICAgICAgYXNzZXJ0IChlbGZfbmR4c2NuIChzaGRyX2luZm9bY250XS5uZXdzY24pID09IHNoZHJfaW5mb1tjbnRdLmlkeCk7CisrICAgICAgZWxmX2Fzc2VydCAoZWxmX25keHNjbiAoc2hkcl9pbmZvW2NudF0ubmV3c2NuKSA9PSBzaGRyX2luZm9bY250XS5pZHgpOworIAorICAgICAgIHNoZHJfaW5mb1tjbnRdLmRhdGEgPSBlbGZfbmV3ZGF0YSAoc2hkcl9pbmZvW2NudF0ubmV3c2NuKTsKKyAgICAgICBpZiAoc2hkcl9pbmZvW2NudF0uZGF0YSA9PSBOVUxMKQorQEAgLTEwNjUsNyArMTA4OSw3IEBACisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisgCSAgIGdldHRleHQgKCJ3aGlsZSBjcmVhdGUgc2VjdGlvbiBoZWFkZXIgc2VjdGlvbjogJXMiKSwKKyAJICAgZWxmX2Vycm1zZyAoLTEpKTsKKy0gIGFzc2VydCAoZWxmX25keHNjbiAoc2hkcl9pbmZvW2NudF0ubmV3c2NuKSA9PSBpZHgpOworKyAgZWxmX2Fzc2VydCAoZWxmX25keHNjbiAoc2hkcl9pbmZvW2NudF0ubmV3c2NuKSA9PSBpZHgpOworIAorICAgLyogRmluYWxpemUgdGhlIHN0cmluZyB0YWJsZSBhbmQgZmlsbCBpbiB0aGUgY29ycmVjdCBpbmRpY2VzIGluIHRoZQorICAgICAgc2VjdGlvbiBoZWFkZXJzLiAgKi8KK0BAIC0xMTU1LDIwICsxMTc5LDIwIEBACisgCQkgICAgc2huZHhkYXRhID0gZWxmX2dldGRhdGEgKHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zeW10YWJfaWR4XS5zY24sCisgCQkJCQkgICAgIE5VTEwpOworIAorLQkJICAgIGFzc2VydCAoKHZlcnNpb25kYXRhLT5kX3NpemUgLyBzaXplb2YgKEVsZjMyX1dvcmQpKQorKwkJICAgIGVsZl9hc3NlcnQgKCh2ZXJzaW9uZGF0YS0+ZF9zaXplIC8gc2l6ZW9mIChFbGYzMl9Xb3JkKSkKKyAJCQkgICAgPj0gc2hkcl9pbmZvW2NudF0uZGF0YS0+ZF9zaXplIC8gZWxzaXplKTsKKyAJCSAgfQorIAorIAkJaWYgKHNoZHJfaW5mb1tjbnRdLnZlcnNpb25faWR4ICE9IDApCisgCQkgIHsKKy0JCSAgICBhc3NlcnQgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfRFlOU1lNKTsKKysJCSAgICBlbGZfYXNzZXJ0IChzaGRyX2luZm9bY250XS5zaGRyLnNoX3R5cGUgPT0gU0hUX0RZTlNZTSk7CisgCQkgICAgLyogVGhpcyBzZWN0aW9uIGhhcyBhc3NvY2lhdGVkIHZlcnNpb24KKyAJCSAgICAgICBpbmZvcm1hdGlvbi4gIFdlIGhhdmUgdG8gbW9kaWZ5IHRoYXQKKyAJCSAgICAgICBpbmZvcm1hdGlvbiwgdG9vLiAgKi8KKyAJCSAgICB2ZXJzaW9uZGF0YSA9IGVsZl9nZXRkYXRhIChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0udmVyc2lvbl9pZHhdLnNjbiwKKyAJCQkJCSAgICAgICBOVUxMKTsKKyAKKy0JCSAgICBhc3NlcnQgKCh2ZXJzaW9uZGF0YS0+ZF9zaXplIC8gc2l6ZW9mIChHRWxmX1ZlcnN5bSkpCisrCQkgICAgZWxmX2Fzc2VydCAoKHZlcnNpb25kYXRhLT5kX3NpemUgLyBzaXplb2YgKEdFbGZfVmVyc3ltKSkKKyAJCQkgICAgPj0gc2hkcl9pbmZvW2NudF0uZGF0YS0+ZF9zaXplIC8gZWxzaXplKTsKKyAJCSAgfQorIAorQEAgLTEyMjMsNyArMTI0Nyw3IEBACisgCQkgICAgICBzZWMgPSBzaGRyX2luZm9bc3ltLT5zdF9zaG5keF0uaWR4OworIAkJICAgIGVsc2UKKyAJCSAgICAgIHsKKy0JCQlhc3NlcnQgKHNobmR4ZGF0YSAhPSBOVUxMKTsKKysJCQllbGZfYXNzZXJ0IChzaG5keGRhdGEgIT0gTlVMTCk7CisgCisgCQkJc2VjID0gc2hkcl9pbmZvW3hzaG5keF0uaWR4OworIAkJICAgICAgfQorQEAgLTEyNDQsNyArMTI2OCw3IEBACisgCQkJICAgIG54c2huZHggPSBzZWM7CisgCQkJICB9CisgCistCQkJYXNzZXJ0IChzZWMgPCBTSE5fTE9SRVNFUlZFIHx8IHNobmR4ZGF0YSAhPSBOVUxMKTsKKysJCQllbGZfYXNzZXJ0IChzZWMgPCBTSE5fTE9SRVNFUlZFIHx8IHNobmR4ZGF0YSAhPSBOVUxMKTsKKyAKKyAJCQlpZiAoKGlubmVyICE9IGRlc3RpZHggfHwgbnNobmR4ICE9IHN5bS0+c3Rfc2huZHgKKyAJCQkgICAgIHx8IChzaG5keGRhdGEgIT0gTlVMTCAmJiBueHNobmR4ICE9IHhzaG5keCkpCitAQCAtMTI2OCw3ICsxMjkyLDcgQEAKKyAJCQkgICAgIHx8IHNoZHJfaW5mb1tjbnRdLmRlYnVnX2RhdGEgPT0gTlVMTCkKKyAJCSAgICAgIC8qIFRoaXMgaXMgYSBzZWN0aW9uIHN5bWJvbCBmb3IgYSBzZWN0aW9uIHdoaWNoIGhhcworIAkJCSBiZWVuIHJlbW92ZWQuICAqLworLQkJICAgICAgYXNzZXJ0IChHRUxGX1NUX1RZUEUgKHN5bS0+c3RfaW5mbykgPT0gU1RUX1NFQ1RJT04pOworKwkJICAgICAgZWxmX2Fzc2VydCAoR0VMRl9TVF9UWVBFIChzeW0tPnN0X2luZm8pID09IFNUVF9TRUNUSU9OKTsKKyAJCSAgfQorIAorIAkJaWYgKGRlc3RpZHggIT0gaW5uZXIpCitAQCAtMTQ1NSwxMSArMTQ3OSwxMSBAQAorIAkJICB7CisgCQkgICAgR0VsZl9TeW0gc3ltX21lbTsKKyAJCSAgICBHRWxmX1N5bSAqc3ltID0gZ2VsZl9nZXRzeW0gKHN5bWQsIGlubmVyLCAmc3ltX21lbSk7CistCQkgICAgYXNzZXJ0IChzeW0gIT0gTlVMTCk7CisrCQkgICAgZWxmX2Fzc2VydCAoc3ltICE9IE5VTEwpOworIAorIAkJICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBlbGZfc3RycHRyIChlbGYsIHN0cnNobmR4LAorIAkJCQkJCSAgIHN5bS0+c3RfbmFtZSk7CistCQkgICAgYXNzZXJ0IChuYW1lICE9IE5VTEwpOworKwkJICAgIGVsZl9hc3NlcnQgKG5hbWUgIT0gTlVMTCk7CisgCQkgICAgc2l6ZV90IGhpZHggPSBlbGZfaGFzaCAobmFtZSkgJSBuYnVja2V0OworIAorIAkJICAgIGlmIChidWNrZXRbaGlkeF0gPT0gMCkKK0BAIC0xNDc4LDcgKzE1MDIsNyBAQAorIAkgICAgZWxzZQorIAkgICAgICB7CisgCQkvKiBBbHBoYSBhbmQgUzM5MCA2NC1iaXQgdXNlIDY0LWJpdCBTSFRfSEFTSCBlbnRyaWVzLiAgKi8KKy0JCWFzc2VydCAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF9lbnRzaXplCisrCQllbGZfYXNzZXJ0IChzaGRyX2luZm9bY250XS5zaGRyLnNoX2VudHNpemUKKyAJCQk9PSBzaXplb2YgKEVsZjY0X1h3b3JkKSk7CisgCisgCQlFbGY2NF9Yd29yZCAqYnVja2V0ID0gKEVsZjY0X1h3b3JkICopIGhhc2hkLT5kX2J1ZjsKK0BAIC0xNTA5LDExICsxNTMzLDExIEBACisgCQkgIHsKKyAJCSAgICBHRWxmX1N5bSBzeW1fbWVtOworIAkJICAgIEdFbGZfU3ltICpzeW0gPSBnZWxmX2dldHN5bSAoc3ltZCwgaW5uZXIsICZzeW1fbWVtKTsKKy0JCSAgICBhc3NlcnQgKHN5bSAhPSBOVUxMKTsKKysJCSAgICBlbGZfYXNzZXJ0IChzeW0gIT0gTlVMTCk7CisgCisgCQkgICAgY29uc3QgY2hhciAqbmFtZSA9IGVsZl9zdHJwdHIgKGVsZiwgc3Ryc2huZHgsCisgCQkJCQkJICAgc3ltLT5zdF9uYW1lKTsKKy0JCSAgICBhc3NlcnQgKG5hbWUgIT0gTlVMTCk7CisrCQkgICAgZWxmX2Fzc2VydCAobmFtZSAhPSBOVUxMKTsKKyAJCSAgICBzaXplX3QgaGlkeCA9IGVsZl9oYXNoIChuYW1lKSAlIG5idWNrZXQ7CisgCisgCQkgICAgaWYgKGJ1Y2tldFtoaWR4XSA9PSAwKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvcmVtb3ZlLXVudXNlZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3JlbW92ZS11bnVzZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmExOTc5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3JlbW92ZS11bnVzZWQucGF0Y2gKQEAgLTAsMCArMSwxNTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgZnJvbSB0aGUgY29kZSB0byBwcmV2ZW50IC1XZXJyb3IgY2F1c2luZyBhIGJ1aWxkCitmYWlsdXJlIG9uIGhvc3RzIHdpdGggR0NDIDQuNi4KKworVGhlc2UgY2hhbmdlcyBhcmUgYWxsIHVwc3RyZWFtIHNvIHNob3VsZCBub3QgYmUgcmVxdWlyZWQgb25jZSB3ZSd2ZSB1cGRhdGVkCit0byBlbGZ1dGlscyAwLjE1MiBvciBsYXRlci4gVGhlcmVmb3JlIHRoaXMgcGF0Y2ggY29uc29saWRhdGVzIHNldmVyYWwKK2NoYW5nZXMgZnJvbSBlbGZ1dGlscyB1cHN0cmVhbSBieSBSb2xhbmQgTWNHcmF0aCBpbnRvIGEgc2luZ2xlIGZpbGUgc28gdGhhdAoraXQncyBlYXNpZXIgdG8gcmVtb3ZlIGxhdGVyIG9uY2Ugd2UgdXBncmFkZS4KK0xpbmtzIHRvIHVwc3RyZWFtIGdpdHdlYiBvZiB0aGUgY29uc29saWRhdGVkIGNvbW1pdHMgZm9sbG93OgorLSBodHRwOi8vZ2l0LmZlZG9yYWhvc3RlZC5vcmcvZ2l0P3A9ZWxmdXRpbHMuZ2l0O2E9Y29tbWl0O2g9NzA5NGQwMGExNjlhZmIyN2UwMzIzZjg1ODBlODE3Nzk4YWU3YzI0MAorLSBodHRwOi8vZ2l0LmZlZG9yYWhvc3RlZC5vcmcvZ2l0P3A9ZWxmdXRpbHMuZ2l0O2E9Y29tbWl0O2g9ZmQ5OTI1NDMxODUxMjZlYjAyODBjMWVlMDg4M2UwNzMwMjA0OTliNAorLSBodHRwOi8vZ2l0LmZlZG9yYWhvc3RlZC5vcmcvZ2l0P3A9ZWxmdXRpbHMuZ2l0O2E9Y29tbWl0O2g9NGRiODlmMDRiYjU5MzI3YWJkN2EzYjYwZTg4ZjJlN2U3M2M2NWM3OQorLSBodHRwOi8vZ2l0LmZlZG9yYWhvc3RlZC5vcmcvZ2l0P3A9ZWxmdXRpbHMuZ2l0O2E9Y29tbWl0O2g9OGY2YzE3OTVhYjlkNDFmMDM4MDVlZWJkNTU3NjcwNzBhZGU1NWFhYworLSBodHRwOi8vZ2l0LmZlZG9yYWhvc3RlZC5vcmcvZ2l0P3A9ZWxmdXRpbHMuZ2l0O2E9Y29tbWl0O2g9MjQwNzg0YjQ4YWEyNzY4MjJjNWE2MWM5YWQ2YTQzNTUwNTFjZTI1OQorCitKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+IC0gMDYvMDQvMTEKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmFzbS9hc21fbmV3c2NuLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmFzbS9hc21fbmV3c2NuLmMKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJhc20vYXNtX25ld3Njbi5jCitAQCAtMTYyLDcgKzE2Miw2IEBAIGFzbV9uZXdzY24gKGN0eCwgc2NubmFtZSwgdHlwZSwgZmxhZ3MpCisgICAgICBHRWxmX1h3b3JkIGZsYWdzOworIHsKKyAgIHNpemVfdCBzY25uYW1lX2xlbiA9IHN0cmxlbiAoc2NubmFtZSkgKyAxOworLSAgdW5zaWduZWQgbG9uZyBpbnQgaHZhbDsKKyAgIEFzbVNjbl90ICpyZXN1bHQ7CisgCisgICAvKiBJZiBubyBjb250ZXh0IGlzIGdpdmVuIHRoZXJlIG1pZ2h0IGJlIGFuIGVhcmxpZXIgZXJyb3IuICAqLworQEAgLTE4MCw4ICsxNzksNiBAQCBhc21fbmV3c2NuIChjdHgsIHNjbm5hbWUsIHR5cGUsIGZsYWdzKQorICAgICAgIHJldHVybiBOVUxMOworICAgICB9CisgCistICBodmFsID0gZWxmX2hhc2ggKHNjbm5hbWUpOworLQorICAgcndsb2NrX3dybG9jayAoY3R4LT5sb2NrKTsKKyAKKyAgIC8qIFRoaXMgaXMgYSBuZXcgc2VjdGlvbi4gICovCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2VsZmxpbnQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL2VsZmxpbnQuYworKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9lbGZsaW50LmMKK0BAIC03MDcsOSArNzA3LDEwIEBAIHNlY3Rpb24gWyUyZF0gJyVzJzogc3ltYm9sICV6dTogaW52YWxpZCAKKyAJeworIAkgIGlmICh4bmR4ZGF0YSA9PSBOVUxMKQorIAkgICAgeworLQkgICAgICBFUlJPUiAoZ2V0dGV4dCAoIlwKKysJICAgICAgaWYgKCFub194bmR4X3dhcm5lZCkKKysJCUVSUk9SIChnZXR0ZXh0ICgiXAorIHNlY3Rpb24gWyUyZF0gJyVzJzogc3ltYm9sICV6dTogdG9vIGxhcmdlIHNlY3Rpb24gaW5kZXggYnV0IG5vIGV4dGVuZGVkIHNlY3Rpb24gaW5kZXggc2VjdGlvblxuIiksCistCQkgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksIGNudCk7CisrCQkgICAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgY250KTsKKyAJICAgICAgbm9feG5keF93YXJuZWQgPSB0cnVlOworIAkgICAgfQorIAkgIGVsc2UgaWYgKHhuZHggPCBTSE5fTE9SRVNFUlZFKQorQEAgLTE1OTIsMTAgKzE1OTMsNiBAQCBjaGVja19keW5hbWljIChFYmwgKmVibCwgR0VsZl9FaGRyICplaGRyCisgICAgICAgW0RUX1NUUlNaXSA9IHRydWUsCisgICAgICAgW0RUX1NZTUVOVF0gPSB0cnVlCisgICAgIH07CistICBHRWxmX0FkZHIgcmVsYWRkciA9IDA7CistICBHRWxmX1dvcmQgcmVsc3ogPSAwOworLSAgR0VsZl9BZGRyIHBsdHJlbGFkZHIgPSAwOworLSAgR0VsZl9Xb3JkIHBsdHJlbHN6ID0gMDsKKyAKKyAgIG1lbXNldCAoaGFzX2R0LCAnXDAnLCBzaXplb2YgKGhhc19kdCkpOworICAgbWVtc2V0IChoYXNfdmFsX2R0LCAnXDAnLCBzaXplb2YgKGhhc192YWxfZHQpKTsKK0BAIC0xNjk0LDE1ICsxNjkxLDYgQEAgc2VjdGlvbiBbJTJkXSAnJXMnOiBlbnRyeSAlenU6IGxldmVsIDIgdAorIHNlY3Rpb24gWyUyZF0gJyVzJzogZW50cnkgJXp1OiBEVF9QTFRSRUwgdmFsdWUgbXVzdCBiZSBEVF9SRUwgb3IgRFRfUkVMQVxuIiksCisgCSAgICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLCBjbnQpOworIAorLSAgICAgIGlmIChkeW4tPmRfdGFnID09IERUX1JFTCkKKy0JcmVsYWRkciA9IGR5bi0+ZF91bi5kX3B0cjsKKy0gICAgICBpZiAoZHluLT5kX3RhZyA9PSBEVF9SRUxTWikKKy0JcmVsc3ogPSBkeW4tPmRfdW4uZF92YWw7CistICAgICAgaWYgKGR5bi0+ZF90YWcgPT0gRFRfSk1QUkVMKQorLQlwbHRyZWxhZGRyID0gZHluLT5kX3VuLmRfcHRyOworLSAgICAgIGlmIChkeW4tPmRfdGFnID09IERUX1BMVFJFTFNaKQorLQlwbHRyZWxzeiA9IGR5bi0+ZF91bi5kX3ZhbDsKKy0KKyAgICAgICAvKiBDaGVjayB0aGF0IGFkZHJlc3NlcyBmb3IgZW50cmllcyBhcmUgaW4gbG9hZGVkIHNlZ21lbnRzLiAgKi8KKyAgICAgICBzd2l0Y2ggKGR5bi0+ZF90YWcpCisgCXsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvbGRnZW5lcmljLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9sZGdlbmVyaWMuYworKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9sZGdlbmVyaWMuYworQEAgLTI4NSwxMiArMjg1LDEwIEBAIHN0YXRpYyBpbnQKKyBjaGVja19mb3JfZHVwbGljYXRlMiAoc3RydWN0IHVzZWRmaWxlcyAqbmV3cCwgc3RydWN0IHVzZWRmaWxlcyAqbGlzdCkKKyB7CisgICBzdHJ1Y3QgdXNlZGZpbGVzICpmaXJzdDsKKy0gIHN0cnVjdCB1c2VkZmlsZXMgKnByZXZwOworIAorICAgaWYgKGxpc3QgPT0gTlVMTCkKKyAgICAgcmV0dXJuIDA7CisgCistICBwcmV2cCA9IGxpc3Q7CisgICBsaXN0ID0gZmlyc3QgPSBsaXN0LT5uZXh0OworICAgZG8KKyAgICAgeworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9sZHNjcmlwdC55Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvbGRzY3JpcHQueQorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9sZHNjcmlwdC55CitAQCAtODAyLDEyICs4MDIsOSBAQCBhZGRfdmVyc2lvbnMgKHN0cnVjdCB2ZXJzaW9uICp2ZXJzaW9ucykKKyAKKyAgIGRvCisgICAgIHsKKy0gICAgICBzdHJ1Y3QgdmVyc2lvbiAqb2xkcDsKKy0KKyAgICAgICBhZGRfaWRfbGlzdCAodmVyc2lvbnMtPnZlcnNpb25uYW1lLCB2ZXJzaW9ucy0+bG9jYWxfbmFtZXMsIHRydWUpOworICAgICAgIGFkZF9pZF9saXN0ICh2ZXJzaW9ucy0+dmVyc2lvbm5hbWUsIHZlcnNpb25zLT5nbG9iYWxfbmFtZXMsIGZhbHNlKTsKKyAKKy0gICAgICBvbGRwID0gdmVyc2lvbnM7CisgICAgICAgdmVyc2lvbnMgPSB2ZXJzaW9ucy0+bmV4dDsKKyAgICAgfQorICAgd2hpbGUgKHZlcnNpb25zICE9IE5VTEwpOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy91bnN0cmlwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy91bnN0cmlwLmMKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvdW5zdHJpcC5jCitAQCAtMTMwMSw3ICsxMzAxLDYgQEAgbW9yZSBzZWN0aW9ucyBpbiBzdHJpcHBlZCBmaWxlIHRoYW4gZGVidQorICAgLyogTWF0Y2ggZWFjaCBkZWJ1Z2luZm8gc2VjdGlvbiB3aXRoIGl0cyBjb3JyZXNwb25kaW5nIHN0cmlwcGVkIHNlY3Rpb24uICAqLworICAgYm9vbCBjaGVja19wcmVsaW5rID0gZmFsc2U7CisgICBFbGZfU2NuICp1bnN0cmlwcGVkX3N5bXRhYiA9IE5VTEw7CistICBzaXplX3QgdW5zdHJpcHBlZF9zdHJ0YWJfbmR4ID0gU0hOX1VOREVGOworICAgc2l6ZV90IGFsbG9jX2F2YWlsID0gMDsKKyAgIHNjbiA9IE5VTEw7CisgICB3aGlsZSAoKHNjbiA9IGVsZl9uZXh0c2NuICh1bnN0cmlwcGVkLCBzY24pKSAhPSBOVUxMKQorQEAgLTEzMTMsNyArMTMxMiw2IEBAIG1vcmUgc2VjdGlvbnMgaW4gc3RyaXBwZWQgZmlsZSB0aGFuIGRlYnUKKyAgICAgICBpZiAoc2hkci0+c2hfdHlwZSA9PSBTSFRfU1lNVEFCKQorIAl7CisgCSAgdW5zdHJpcHBlZF9zeW10YWIgPSBzY247CistCSAgdW5zdHJpcHBlZF9zdHJ0YWJfbmR4ID0gc2hkci0+c2hfbGluazsKKyAJICBjb250aW51ZTsKKyAJfQorIAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9sZHNjcmlwdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvbGRzY3JpcHQuYworKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9sZHNjcmlwdC5jCitAQCAtMjcyOCwxMiArMjcyOCw5IEBAIGFkZF92ZXJzaW9ucyAoc3RydWN0IHZlcnNpb24gKnZlcnNpb25zKQorIAorICAgZG8KKyAgICAgeworLSAgICAgIHN0cnVjdCB2ZXJzaW9uICpvbGRwOworLQorICAgICAgIGFkZF9pZF9saXN0ICh2ZXJzaW9ucy0+dmVyc2lvbm5hbWUsIHZlcnNpb25zLT5sb2NhbF9uYW1lcywgdHJ1ZSk7CisgICAgICAgYWRkX2lkX2xpc3QgKHZlcnNpb25zLT52ZXJzaW9ubmFtZSwgdmVyc2lvbnMtPmdsb2JhbF9uYW1lcywgZmFsc2UpOworIAorLSAgICAgIG9sZHAgPSB2ZXJzaW9uczsKKyAgICAgICB2ZXJzaW9ucyA9IHZlcnNpb25zLT5uZXh0OworICAgICB9CisgICB3aGlsZSAodmVyc2lvbnMgIT0gTlVMTCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OTJkNWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZgpAQCAtMCwwICsxLDIxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK09uIG1hbnkgYXJjaGl0ZWN0dXJlcyB0aGlzIHRlc3QgZmFpbHMgYmVjYXVzZSBiaW5hcmllcy9saWJzIHByb2R1Y2VkIGJ5CitiaW51dGlscyBkb24ndCBwYXNzIGVsZmxpbnQuIEhvd2V2ZXIgZWxmdXRpbHMgc2hvdWxkbid0IEZUQkZTIGJlY2F1c2Ugb2YgdGhpcy4KKworU28gd2UgcnVuIHRoZSB0ZXN0cyBvbiBhbGwgYXJjaHMgdG8gc2VlIHdoYXQgYnJlYWtzLCBidXQgaWYgaXQgYnJlYWtzIHdlIGlnbm9yZQordGhlIHJlc3VsdCAoZXhpdGNvZGUgNzcgbWVhbnM6IHRoaXMgdGVzdCB3YXMgc2tpcHBlZCkuCisKK0luZGV4OiBlbGZ1dGlscy0wLjEyOC90ZXN0cy9ydW4tZWxmbGludC1zZWxmLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xMjgub3JpZy90ZXN0cy9ydW4tZWxmbGludC1zZWxmLnNoCTIwMDctMDctMDggMjE6NDY6MTYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xMjgvdGVzdHMvcnVuLWVsZmxpbnQtc2VsZi5zaAkyMDA3LTA3LTA4IDIxOjQ2OjQ5LjAwMDAwMDAwMCArMDAwMAorQEAgLTMyLDcgKzMyLDcgQEAKKyAjICBlY2hvICQxCisgICBpZiBbIC1mICQxIF07IHRoZW4KKyAgICAgdGVzdHJ1biAuLi9zcmMvZWxmbGludCAtLXF1aWV0IC0tZ251LWxkICQxIHx8CistICAgIHsgZWNobyAiKioqIGZhaWx1cmUgaW4gJDEiOyBzdGF0dXM9MTsgfQorKyAgICB7IGVjaG8gIioqKiBmYWlsdXJlIGluICQxIjsgc3RhdHVzPTc3OyB9CisgICBmaQorIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE0OC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE0OC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2YxNmFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvdWNsaWJjLXN1cHBvcnQtZm9yLWVsZnV0aWxzLTAuMTQ4LnBhdGNoCkBAIC0wLDAgKzEsOTEgQEAKK29uIHVjbGliYyBzeXN0ZW1zIGxpYmludGwgYW5kIGxpYnVhcmdwIGFyZSBzZXBhcmF0ZSBmcm9tIGxpYmMuCitzbyB0aGV5IG5lZWQgdG8gYmUgc3BlY2lmaWVkIG9uIGNvbW1hbmRsaW5lIHdoZW4gd2UgdXNlIHByb3h5LWxpYmludGwKK3RoZW4gbGliaW50bCBpcyBhIHN0YXRpYyBhcmNoaXZlIHNvIGl0IHNob3VsZCBiZSBsaXN0ZWQgbGFzdCBzaW5jZQorZWxmdXRpbHMgZG9lcyBub3QgcmVzcGVjdCBkaXNhYmxlLW5scyB3ZSBuZWVkIHRvIGxpbmsgaW4gbGliaW50bAorCitXZSBhZGQgYSBuZXcgb3B0aW9uIC0tZW5hYmxlLXVjbGliYyB3aGljaCB3aWxsIGJlIHVzZWQgdG8gY29udHJvbAordGhlIHVjbGliYyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBkdXJpbmcgYnVpbGQuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1Y2xpYmMgc3BlY2lmaWNdCisKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGVsZnV0aWxzLTAuMTQ4L2NvbmZpZ3VyZS5hYworQEAgLTU1LDkgKzU1LDE2IEBAIEFTX0lGKFt0ZXN0ICIkdXNlX2xvY2tzIiA9IHllc10sIFtBQ19ERUYKKyAKKyBBSF9URU1QTEFURShbVVNFX0xPQ0tTXSwgW0RlZmluZWQgaWYgbGlicmFyaWVzIHNob3VsZCBiZSB0aHJlYWQtc2FmZS5dKQorIAorK0FDX0FSR19FTkFCTEUoW3VjbGliY10sCisrQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXVjbGliY10sIFtVc2UgdWNsaWJjIGZvciBzeXN0ZW0gbGlicmFyaWVzXSksCisrdXNlX3VjbGliYz15ZXMsIHVzZV91Y2xpYmM9bm8pCisrQU1fQ09ORElUSU9OQUwoVVNFX1VDTElCQywgdGVzdCAiJHVzZV91Y2xpYmMiID0geWVzKQorK0FTX0lGKFt0ZXN0ICIkdXNlX3VjbGliYyIgPSB5ZXNdLCBbQUNfREVGSU5FKFVTRV9VQ0xJQkMpXSkKKysKKytBSF9URU1QTEFURShbVVNFX1VDTElCQ10sIFtEZWZpbmVkIGlmIHVjbGliYyBsaWJyYXJpZXMgYXJlIHVzZWQuXSkKKysKKyBkbmwgQWRkIGFsbCB0aGUgbGFuZ3VhZ2VzIGZvciB3aGljaCB0cmFuc2xhdGlvbnMgYXJlIGF2YWlsYWJsZS4KKyBBTExfTElOR1VBUz0KKy0KKyBBQ19QUk9HX0NDCisgQUNfUFJPR19SQU5MSUIKKyBBQ19QUk9HX1lBQ0MKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9NYWtlZmlsZS5hbQorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9NYWtlZmlsZS5hbQorQEAgLTkzLDcgKzkzLDEyIEBAIGlmICFNVURGTEFQCisgbGliZWxmX3BpY19hX1NPVVJDRVMgPQorIGFtX2xpYmVsZl9waWNfYV9PQkpFQ1RTID0gJChsaWJlbGZfYV9TT1VSQ0VTOi5jPS5vcykKKyAKKysKKyBsaWJlbGZfc29fTERMSUJTID0KKytpZiBVU0VfVUNMSUJDCisrbGliZWxmX3NvX0xETElCUyArPSAtbGludGwgLWx1YXJncAorK2VuZGlmCisrCisgaWYgVVNFX0xPQ0tTCisgbGliZWxmX3NvX0xETElCUyArPSAtbHB0aHJlYWQKKyBlbmRpZgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmR3L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJkdy9NYWtlZmlsZS5hbQorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmR3L01ha2VmaWxlLmFtCitAQCAtOTgsNiArOTgsMTEgQEAgaWYgIU1VREZMQVAKKyBsaWJkd19waWNfYV9TT1VSQ0VTID0KKyBhbV9saWJkd19waWNfYV9PQkpFQ1RTID0gJChsaWJkd19hX1NPVVJDRVM6LmM9Lm9zKQorIAorK2xpYmR3X3NvX0xETElCUyA9CisraWYgVVNFX1VDTElCQworK2xpYmR3X3NvX0xETElCUyArPSAtbGludGwgLWx1YXJncAorK2VuZGlmCisrCisgbGliZHdfc29fU09VUkNFUyA9CisgbGliZHcuc286ICQoc3JjZGlyKS9saWJkdy5tYXAgbGliZHdfcGljLmEgXAorIAkgIC4uL2xpYmR3ZmwvbGliZHdmbF9waWMuYSAuLi9saWJlYmwvbGliZWJsLmEgXAorQEAgLTEwOCw3ICsxMTMsNyBAQCBsaWJkdy5zbzogJChzcmNkaXIpL2xpYmR3Lm1hcCBsaWJkd19waWMuCisgCQktV2wsLS1lbmFibGUtbmV3LWR0YWdzLC1ycGF0aCwkKHBrZ2xpYmRpcikgXAorIAkJLVdsLC0tdmVyc2lvbi1zY3JpcHQsJDwsLS1uby11bmRlZmluZWQgXAorIAkJLVdsLC0td2hvbGUtYXJjaGl2ZSAkKGZpbHRlci1vdXQgJDwsJF4pIC1XbCwtLW5vLXdob2xlLWFyY2hpdmVcCistCQktbGRsICQoemlwX0xJQlMpCisrCQktbGRsICQoemlwX0xJQlMpICQobGliZHdfc29fTERMSUJTKQorIAlpZiByZWFkZWxmIC1kICRAIHwgZmdyZXAgLXEgVEVYVFJFTDsgdGhlbiBleGl0IDE7IGZpCisgCWxuIC1mcyAkQCAkQC4kKFZFUlNJT04pCisgCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliY3B1L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJjcHUvTWFrZWZpbGUuYW0KKysrKyBlbGZ1dGlscy0wLjE0OC9saWJjcHUvTWFrZWZpbGUuYW0KK0BAIC02Myw2ICs2MywxMCBAQCBpMzg2X3BhcnNlX0NGTEFHUyA9IC1ETk1ORVM9ImB3YyAtbCA8IGkzCisgaTM4Nl9sZXgubzogaTM4Nl9wYXJzZS5oCisgaTM4Nl9nZW5kaXNfTERBREQgPSAkKGxpYmV1KSAtbG0gJChsaWJtdWRmbGFwKQorIAorK2lmIFVTRV9VQ0xJQkMKKytpMzg2X2dlbmRpc19MREFERCArPSAtbHVhcmdwIC1saW50bAorK2VuZGlmCisrCisgaTM4Nl9wYXJzZS5oOiBpMzg2X3BhcnNlLmMgOworIAorIG5vaW5zdF9IRUFERVJTID0gbWVtb3J5LWFjY2Vzcy5oIGkzODZfcGFyc2UuaCBpMzg2X2RhdGEuaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgveDg2XzY0X2Rpcy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgveDg2XzY0X2Rpcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMTk4YmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC94ODZfNjRfZGlzLmgKQEAgLTAsMCArMSwxNjMyIEBACisjZGVmaW5lIE1ORU1PTklDX0JJVFMgMTAKKyNkZWZpbmUgU1VGRklYX0JJVFMgMworI2RlZmluZSBGQ1QxX0JJVFMgNworI2RlZmluZSBTVFIxX0JJVFMgNAorI2RlZmluZSBPRkYxXzFfQklUUyA3CisjZGVmaW5lIE9GRjFfMV9CSUFTIDMKKyNkZWZpbmUgT0ZGMV8yX0JJVFMgNworI2RlZmluZSBPRkYxXzJfQklBUyA0CisjZGVmaW5lIE9GRjFfM19CSVRTIDEKKyNkZWZpbmUgT0ZGMV8zX0JJQVMgNworI2RlZmluZSBGQ1QyX0JJVFMgNgorI2RlZmluZSBTVFIyX0JJVFMgMgorI2RlZmluZSBPRkYyXzFfQklUUyA3CisjZGVmaW5lIE9GRjJfMV9CSUFTIDUKKyNkZWZpbmUgT0ZGMl8yX0JJVFMgNworI2RlZmluZSBPRkYyXzJfQklBUyA0CisjZGVmaW5lIE9GRjJfM19CSVRTIDQKKyNkZWZpbmUgT0ZGMl8zX0JJQVMgNworI2RlZmluZSBGQ1QzX0JJVFMgNAorI2RlZmluZSBTVFIzX0JJVFMgMQorI2RlZmluZSBPRkYzXzFfQklUUyA2CisjZGVmaW5lIE9GRjNfMV9CSUFTIDEwCisjZGVmaW5lIE9GRjNfMl9CSVRTIDEKKyNkZWZpbmUgT0ZGM18yX0JJQVMgMjEKKworI2luY2x1ZGUgPGkzODZfZGF0YS5oPgorCisjZGVmaW5lIHN1ZmZpeF9ub25lIDAKKyNkZWZpbmUgc3VmZml4X3cgMQorI2RlZmluZSBzdWZmaXhfdzAgMgorI2RlZmluZSBzdWZmaXhfVyAzCisjZGVmaW5lIHN1ZmZpeF90dHRuIDQKKyNkZWZpbmUgc3VmZml4X0QgNworI2RlZmluZSBzdWZmaXhfdzEgNQorI2RlZmluZSBzdWZmaXhfVzEgNgorCitzdGF0aWMgY29uc3Qgb3BmY3RfdCBvcDFfZmN0W10gPQoreworICBOVUxMLAorICBGQ1RfTU9EJFJfTSwKKyAgRkNUX01vZCRSX20sCisgIEZDVF9hYnMsCisgIEZDVF9heCwKKyAgRkNUX2F4JHcsCisgIEZDVF9jY2MsCisgIEZDVF9kZGQsCisgIEZDVF9kaXNwOCwKKyAgRkNUX2RzX2J4LAorICBGQ1RfZHNfc2ksCisgIEZDVF9keCwKKyAgRkNUX2VzX2RpLAorICBGQ1RfZnJlZywKKyAgRkNUX2ltbSRzLAorICBGQ1RfaW1tJHcsCisgIEZDVF9pbW0xNiwKKyAgRkNUX2ltbTY0JHcsCisgIEZDVF9pbW04LAorICBGQ1RfaW1tczgsCisgIEZDVF9tbXhyZWcsCisgIEZDVF9tb2QkMTZyX20sCisgIEZDVF9tb2QkNjRyX20sCisgIEZDVF9tb2QkOHJfbSwKKyAgRkNUX21vZCRyX20sCisgIEZDVF9tb2Qkcl9tJHcsCisgIEZDVF9yZWcsCisgIEZDVF9yZWckdywKKyAgRkNUX3JlZzY0LAorICBGQ1RfcmVsLAorICBGQ1Rfc2VsLAorICBGQ1Rfc3JlZzIsCisgIEZDVF9zcmVnMywKKyAgRkNUX3N0cmluZywKKyAgRkNUX3htbXJlZywKK307CitzdGF0aWMgY29uc3QgY2hhciBvcDFfc3RyW10gPQorICAiJWF4XDAiCisgICIlY2xcMCIKKyAgIiVyYXhcMCIKKyAgIiVzdFwwIgorICAiJXhtbTBcMCIKKyAgIioiOworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgb3AxX3N0cl9pZHhbXSA9IHsKKyAgMCwKKyAgNCwKKyAgOCwKKyAgMTMsCisgIDE3LAorICAyMywKK307CitzdGF0aWMgY29uc3Qgb3BmY3RfdCBvcDJfZmN0W10gPQoreworICBOVUxMLAorICBGQ1RfTU9EJFJfTSwKKyAgRkNUX01vZCRSX20sCisgIEZDVF9hYnMsCisgIEZDVF9hYnN2YWwsCisgIEZDVF9heCR3LAorICBGQ1RfY2NjLAorICBGQ1RfZGRkLAorICBGQ1RfZHNfc2ksCisgIEZDVF9keCwKKyAgRkNUX2VzX2RpLAorICBGQ1RfZnJlZywKKyAgRkNUX2ltbTgsCisgIEZDVF9tbXhyZWcsCisgIEZDVF9tb2QkNjRyX20sCisgIEZDVF9tb2Qkcl9tLAorICBGQ1RfbW9kJHJfbSR3LAorICBGQ1Rfb3JlZywKKyAgRkNUX29yZWckdywKKyAgRkNUX3JlZywKKyAgRkNUX3JlZyR3LAorICBGQ1RfcmVnNjQsCisgIEZDVF9zcmVnMywKKyAgRkNUX3N0cmluZywKKyAgRkNUX3htbXJlZywKK307CitzdGF0aWMgY29uc3QgY2hhciBvcDJfc3RyW10gPQorICAiJXJjeFwwIgorICAiJXN0IjsKK3N0YXRpYyBjb25zdCB1aW50OF90IG9wMl9zdHJfaWR4W10gPSB7CisgIDAsCisgIDUsCit9Oworc3RhdGljIGNvbnN0IG9wZmN0X3Qgb3AzX2ZjdFtdID0KK3sKKyAgTlVMTCwKKyAgRkNUX21teHJlZywKKyAgRkNUX21vZCRyX20sCisgIEZDVF9yZWcsCisgIEZDVF9zdHJpbmcsCisgIEZDVF94bW1yZWcsCit9Oworc3RhdGljIGNvbnN0IGNoYXIgb3AzX3N0cltdID0KKyAgIiVyZHgiOworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgb3AzX3N0cl9pZHhbXSA9IHsKKyAgMCwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGluc3RyX2VuYyBpbnN0cnRhYltdID0KK3sKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRzdWJwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHN1YnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnNmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JzciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ic3dhcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0cywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAyOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2FsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDEsIC5mY3QxID0gMjIsIC5zdHIxID0gNiwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xjYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2xjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3lzY2FsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2x0cywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3lzcmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNlbnRlciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3lzZXhpdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21jLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wcywgLnJlcCA9IDAsIC5yZXBlID0gMSwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcHhjaGcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDExLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDgsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NwdWlkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRkcTJwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBkMmRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHBkMmRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGVjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZW1tcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZW50ZXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zub3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjaHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZhYnMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z0c3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z4YW0sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZDEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGwydCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkbDJlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRwaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkbGcyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRsbjIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZHosIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2YyeG0xLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meWwyeCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnB0YW4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZwYXRhbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnh0cmFjdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnByZW0xLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGVjc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maW5jc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcHJlbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnlsMnhwMSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNxcnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzaW5jb3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZybmRpbnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzY2FsZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNpbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGVudiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zdGVudiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zuc3RjdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z4Y2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFkZHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWFkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm11bHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmltdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3VicCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJycCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnN0c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDEsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbWlwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYnN0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjaHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbGV4LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maW5pdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZndhaXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZuY2xleCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92YmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92dSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZuYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZuZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZuYmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92bnUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb20sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbXBwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29taSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbWlwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mdWNvbWksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29taXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkZWNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpZGl2bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnJwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpZGl2cmwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWRpdnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2cnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmZyZWUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZiZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWNvbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92dSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlsZGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWxkbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maW5jc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbmluaXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3RwbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN0dHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN0dHBsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3RwdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mdWNvbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcnN0b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mdWNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zYXZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zdHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaGx0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ltdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMiwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAzLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDExLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbmMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnMsIC5yZXAgPSAxLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAwLCAuZmN0MSA9IDExLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW50LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW50MywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW52ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3dhcGdzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnZscGcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2lyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA2LCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2osIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2osIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAwLCAuZmN0MSA9IDI5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2V0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9qbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMjksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDEsIC5mY3QxID0gMjIsIC5zdHIxID0gNiwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xqbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDEsIC5mY3QxID0gMjIsIC5zdHIxID0gNiwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xhaGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGVhdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xmcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZ3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGdkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGlkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGxkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG1zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9jaywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9kcywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvb3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvb3BlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb29wbmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xzbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHRyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDM1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNibCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Zzd2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92emJsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnp3bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9uZWcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXVzZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wY250LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25vdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3V0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX291dCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3V0cywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3BmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2hxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMiwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMzIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2hmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZG1zciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmRwbWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JkdHNjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMTYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9sLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yc20sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhaGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zY2FzLCAucmVwID0gMCwgLnJlcGUgPSAxLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2V0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAyLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAyLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NociwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMiwgLnN0cjMgPSAwLCAub2ZmM18xID0gNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NocmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMiwgLnN0cjMgPSAwLCAub2ZmM18xID0gNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtY2FsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1sYXVuY2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtcmVzdW1lLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXhvZmYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtcmVhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXdyaXRlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NnZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vbml0b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDMsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMSwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA0LCAuc3RyMyA9IDEsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXdhaXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDMsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMSwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2lkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2xkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc21zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0aSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RvcywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Rlc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdGVzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV90ZXN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91ZDJhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92ZXJyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92ZXJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV93YmludmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNobnRhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaHQwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaHQxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaHQyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ub3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3dybXNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94YWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAxMSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSA4LCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94Y2hnLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hjaGcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94bGF0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZW1tcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYW5kbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbmRuLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYWRkd2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9weG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHhvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZG5wcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wZXFwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGx0cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBsZXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wdW5vcmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5lcXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmx0cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubGVwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG9yZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wZXFzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGx0c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBsZXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wdW5vcmRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5lcXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmx0c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubGVzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG9yZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhyc3RvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhzYXZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZG14Y3NyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdG14Y3NyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnVwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnVwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRkdXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzbGR1cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhscHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZscHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZobHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aGxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VucGNrbHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdW5wY2tscHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91bnBja2hwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VucGNraHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c2hkdXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZocGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZsaHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bGhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZocGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZhcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZhcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZhcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZhcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzaTJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzaTJzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwaTJwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBpMnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRzZDJzaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRzczJzaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRwZDJwaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRwczJwaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBkMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c2Qyc2ksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzczJzaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBzMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdWNvbWlzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Vjb21pc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jb21pc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jb21pc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9nZXRzZWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm1za3BkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bXNrcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zcXJ0cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zcXJ0c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zcXJ0c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zcXJ0cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yc3FydHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcnNxcnRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjcHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNwcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3JwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29ycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3JwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvcnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWxzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXVscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNkMnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c3Myc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwZDJwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBzMnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cHMyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnR0cHMyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRkcTJwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3Vic3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWJwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWluc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9taW5zcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21pbnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWlucHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXZzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGl2cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXZwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21heHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWF4c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21heHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3Nzd2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrc3N3YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2t1c3diLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3Vzd2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2toYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2toYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tod2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tod2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2toZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2toZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrc3NkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2tzc2R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNrbHFkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hxZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZHFhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZHF1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1Zmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmaHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAxLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA4LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaGFkZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaGFkZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaHN1YnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaHN1YnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcXUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BpbnNydywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGluc3J3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMSwgLnN0cjMgPSAwLCAub2ZmM18xID0gOCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BleHRydywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMywgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wZXh0cncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDMsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDgsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHVmcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2h1ZnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA4LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcTJxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cTJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI2LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Ztc2tiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdm1za2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidXNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnVzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ1c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHVzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR1c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHVzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXh1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXh1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhdmdiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bhdmd3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHV3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGh1dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3Vic2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3Vic2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3Vic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3Vic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkc2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkc2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZGRxdSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsdWRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bHVkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzYWRidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzYWRidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21hc2ttb3ZkcXUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXNrbW92cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3ViZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1ZmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1ZmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhhZGRzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYWRkdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYWRkdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3VidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3VidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3ViZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3ViZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3Vic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waHN1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ25iLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ25iLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ253LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ253LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ25kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNpZ25kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGhyc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbGlnbnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFsaWduciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bWNsZWFyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXhvbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1wdHJsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1wdHJzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZmVuY2UsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21mZW5jZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2ZlbmNlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbGZsdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYmxlbmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ibGVuZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JsZW5kdnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSA1LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYmxlbmR2cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDUsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kcHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RwcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW5zZXJ0cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRkcWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tcHNhZGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2t1c2R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGJsZW5kdmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDUsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYmxlbmR3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcXEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXN0cmksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVzdHJtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBpc3RyaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21waXN0cm0sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BobWlucG9zdXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waW5zcmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BpbnNyZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHVkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHV3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnVkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnV3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3hiZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeGJxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4d2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3h3cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enhiZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eGJxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4d2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enh3cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHRlc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3VuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvdW5kcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm91bmRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3VuZHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCit9Oworc3RhdGljIGNvbnN0IHVpbnQ4X3QgbWF0Y2hfZGF0YVtdID0KK3sKKyAgMHgxLCAweGZlLCAweDE0LAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweDEwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MTIsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHg0LAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDAsCisgIDB4MTIsIDB4ODMsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkMCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweGQwLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4MjQsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4MjAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgyMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU0LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU1LCAwLCAwLAorICAweDEyLCAweDYzLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiZCwgMCwgMCwKKyAgMHgxMiwgMHhmLCAweGY4LCAweGM4LAorICAweDIzLCAweGYsIDB4YTMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYSwgMHgzOCwgMHgyMCwKKyAgMHgyMywgMHhmLCAweGJiLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmEsIDB4MzgsIDB4MzgsCisgIDB4MjMsIDB4ZiwgMHhiMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJhLCAweDM4LCAweDMwLAorICAweDIzLCAweGYsIDB4YWIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYSwgMHgzOCwgMHgyOCwKKyAgMHgxMSwgMHhlOCwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgxMCwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgxOCwKKyAgMHgxMSwgMHg5OCwKKyAgMHgxMSwgMHg5OSwKKyAgMHgxMSwgMHhmOCwKKyAgMHgxMSwgMHhmYywKKyAgMHgxMSwgMHhmYSwKKyAgMHgyMiwgMHhmLCAweDUsCisgIDB4MjIsIDB4ZiwgMHg2LAorICAweDIyLCAweGYsIDB4NywKKyAgMHgyMiwgMHhmLCAweDM0LAorICAweDIyLCAweGYsIDB4MzUsCisgIDB4MTEsIDB4ZjUsCisgIDB4MTMsIDB4ZiwgMHhmMCwgMHg0MCwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDNjLAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ODMsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHgzOCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDNhLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4YzIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGMyLCAwLCAwLAorICAweDIzLCAweGYsIDB4YzIsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHhhNiwKKyAgMHgxMywgMHhmLCAweGZlLCAweGIwLCAwLCAwLAorICAweDIzLCAweGYsIDB4YzcsIDB4MzgsIDB4OCwKKyAgMHgyMiwgMHhmLCAweGEyLAorICAweDM0LCAweGYzLCAweGYsIDB4ZTYsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhlNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU2LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ZmUsIDB4MzgsIDB4OCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDMwLAorICAweDIyLCAweGYsIDB4NzcsCisgIDB4MTEsIDB4YzgsCisgIDB4MjIsIDB4ZDksIDB4ZDAsCisgIDB4MjIsIDB4ZDksIDB4ZTAsCisgIDB4MjIsIDB4ZDksIDB4ZTEsCisgIDB4MjIsIDB4ZDksIDB4ZTQsCisgIDB4MjIsIDB4ZDksIDB4ZTUsCisgIDB4MjIsIDB4ZDksIDB4ZTgsCisgIDB4MjIsIDB4ZDksIDB4ZTksCisgIDB4MjIsIDB4ZDksIDB4ZWEsCisgIDB4MjIsIDB4ZDksIDB4ZWIsCisgIDB4MjIsIDB4ZDksIDB4ZWMsCisgIDB4MjIsIDB4ZDksIDB4ZWQsCisgIDB4MjIsIDB4ZDksIDB4ZWUsCisgIDB4MjIsIDB4ZDksIDB4ZjAsCisgIDB4MjIsIDB4ZDksIDB4ZjEsCisgIDB4MjIsIDB4ZDksIDB4ZjIsCisgIDB4MjIsIDB4ZDksIDB4ZjMsCisgIDB4MjIsIDB4ZDksIDB4ZjQsCisgIDB4MjIsIDB4ZDksIDB4ZjUsCisgIDB4MjIsIDB4ZDksIDB4ZjYsCisgIDB4MjIsIDB4ZDksIDB4ZjcsCisgIDB4MjIsIDB4ZDksIDB4ZjgsCisgIDB4MjIsIDB4ZDksIDB4ZjksCisgIDB4MjIsIDB4ZDksIDB4ZmEsCisgIDB4MjIsIDB4ZDksIDB4ZmIsCisgIDB4MjIsIDB4ZDksIDB4ZmMsCisgIDB4MjIsIDB4ZDksIDB4ZmQsCisgIDB4MjIsIDB4ZDksIDB4ZmUsCisgIDB4MjIsIDB4ZDksIDB4ZmYsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4YzAsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhjOCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDgsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZTAsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4ZTAsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhlOCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhlOCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDI4LAorICAweDEyLCAweGRkLCAweGY4LCAweGQwLAorICAweDIsIDB4ZmIsIDB4ZDksIDB4MzgsIDB4MTAsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4ZDgsCisgIDB4MiwgMHhmYiwgMHhkOSwgMHgzOCwgMHgxOCwKKyAgMHgxMiwgMHhkOSwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkOSwgMHgzOCwgMHgyOCwKKyAgMHgxMiwgMHhkOSwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkOSwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHhkOSwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhjMCwKKyAgMHgyLCAweGZiLCAweGRhLCAweDM4LCAwLAorICAweDEyLCAweGRhLCAweGY4LCAweGM4LAorICAweDEyLCAweGRlLCAweGY4LCAweGM4LAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4OCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhlMCwKKyAgMHgyLCAweGZiLCAweGRhLCAweDM4LCAweDIwLAorICAweDEyLCAweGRlLCAweGY4LCAweGU4LAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MjgsCisgIDB4MjIsIDB4ZGYsIDB4ZTAsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDB4MjAsCisgIDB4MTIsIDB4ZGYsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDB4MzAsCisgIDB4MjIsIDB4ZDksIDB4ZTAsCisgIDB4MzMsIDB4OWIsIDB4ZGIsIDB4ZTIsCisgIDB4MzMsIDB4OWIsIDB4ZGIsIDB4ZTMsCisgIDB4MTEsIDB4OWIsCisgIDB4MjIsIDB4ZGIsIDB4ZTIsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4YzgsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4ZDAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4ZDgsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4YzgsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZDAsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZDgsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZDAsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgxMCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhkOCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDE4LAorICAweDIyLCAweGRlLCAweGQ5LAorICAweDEyLCAweGRiLCAweGY4LCAweGYwLAorICAweDEyLCAweGRmLCAweGY4LCAweGYwLAorICAweDEyLCAweGRiLCAweGY4LCAweGU4LAorICAweDEyLCAweGRmLCAweGY4LCAweGU4LAorICAweDIyLCAweGQ5LCAweGZmLAorICAweDIyLCAweGQ5LCAweGY2LAorICAweDEyLCAweGQ4LCAweGY4LCAweGYwLAorICAweDEyLCAweGRjLCAweGY4LCAweGYwLAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MzAsCisgIDB4MTIsIDB4ZGEsIDB4MzgsIDB4MzAsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGUsIDB4MzgsIDB4MzAsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4ZjgsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZjgsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4ZjgsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHhkYSwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHhkZSwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhkMCwKKyAgMHgyLCAweGZiLCAweGRhLCAweDM4LCAweDEwLAorICAweDEyLCAweGRhLCAweGY4LCAweGQ4LAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MTgsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZGIsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDB4MjgsCisgIDB4MjIsIDB4ZDksIDB4ZjcsCisgIDB4MjIsIDB4ZGIsIDB4ZTMsCisgIDB4MiwgMHhmYiwgMHhkYiwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZiLCAweGRiLCAweDM4LCAweDE4LAorICAweDEyLCAweGRmLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmIsIDB4ZGIsIDB4MzgsIDB4OCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHg4LAorICAweDEyLCAweGRiLCAweDM4LCAweDI4LAorICAweDEyLCAweGRiLCAweDM4LCAweDM4LAorICAweDEyLCAweGQ5LCAweGY4LCAweGMwLAorICAweDIsIDB4ZmIsIDB4ZDksIDB4MzgsIDAsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4ZTAsCisgIDB4MTIsIDB4ZGQsIDB4MzgsIDB4MjAsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4ZTgsCisgIDB4MTIsIDB4ZGQsIDB4MzgsIDB4MzAsCisgIDB4MTIsIDB4ZGQsIDB4MzgsIDB4MzgsCisgIDB4MTEsIDB4ZjQsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDI4LAorICAweDIzLCAweGYsIDB4YWYsIDAsIDAsCisgIDB4MiwgMHhmZCwgMHg2OSwgMCwgMCwKKyAgMHgxLCAweGZlLCAweGU0LAorICAweDEsIDB4ZmUsIDB4ZWMsCisgIDB4MiwgMHhmZSwgMHhmZSwgMHgzOCwgMCwKKyAgMHgxLCAweGZlLCAweDZjLAorICAweDExLCAweGNkLAorICAweDExLCAweGNjLAorICAweDIyLCAweGYsIDB4OCwKKyAgMHgzMywgMHhmLCAweDEsIDB4ZjgsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDM4LAorICAweDExLCAweGNmLAorICAweDEsIDB4ZjAsIDB4NzAsCisgIDB4MTIsIDB4ZiwgMHhmMCwgMHg4MCwKKyAgMHgxMywgMHhmLCAweGYwLCAweDkwLCAweDM4LCAwLAorICAweDExLCAweGUzLAorICAweDExLCAweGViLAorICAweDExLCAweGU5LAorICAweDEyLCAweGZmLCAweDM4LCAweDIwLAorICAweDExLCAweGVhLAorICAweDEyLCAweGZmLCAweDM4LCAweDI4LAorICAweDExLCAweDlmLAorICAweDIzLCAweGYsIDB4MiwgMCwgMCwKKyAgMHgxMiwgMHg4ZCwgMCwgMCwKKyAgMHgxMSwgMHhjOSwKKyAgMHgyMywgMHhmLCAweGI0LCAwLCAwLAorICAweDIzLCAweGYsIDB4YjUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDEwLAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHgxOCwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDEwLAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHgzMCwKKyAgMHgxMSwgMHhmMCwKKyAgMHgxLCAweGZlLCAweGFjLAorICAweDExLCAweGUyLAorICAweDExLCAweGUxLAorICAweDExLCAweGUwLAorICAweDIzLCAweGYsIDB4MywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGIyLCAwLCAwLAorICAweDIzLCAweGYsIDAsIDB4MzgsIDB4MTgsCisgIDB4MiwgMHhmZSwgMHg4OCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDhhLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4YzYsIDB4MzgsIDAsCisgIDB4MSwgMHhmMCwgMHhiMCwKKyAgMHgxLCAweGZlLCAweGEwLAorICAweDEsIDB4ZmUsIDB4YTIsCisgIDB4MjMsIDB4ZiwgMHgyMCwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDIyLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MjEsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgyMywgMHhjMCwgMHhjMCwKKyAgMHgxMiwgMHg4YywgMCwgMCwKKyAgMHgxMiwgMHg4ZSwgMCwgMCwKKyAgMHgxLCAweGZlLCAweGE0LAorICAweDIzLCAweGYsIDB4YmUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGI2LCAwLCAwLAorICAweDIzLCAweGYsIDB4YjcsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDE4LAorICAweDIyLCAweGYzLCAweDkwLAorICAweDExLCAweDkwLAorICAweDM0LCAweGYzLCAweGYsIDB4YjgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweDgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhhLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4OCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDgsCisgIDB4MSwgMHhmZSwgMHhjLAorICAweDEsIDB4ZmUsIDB4ZTYsCisgIDB4MSwgMHhmZSwgMHhlZSwKKyAgMHgxLCAweGZlLCAweDZlLAorICAweDEyLCAweDhmLCAweGY4LCAweGMwLAorICAweDEyLCAweDhmLCAweDM4LCAwLAorICAweDEyLCAweGYsIDB4YzcsIDB4ODEsCisgIDB4MTEsIDB4OWQsCisgIDB4MTIsIDB4ZmYsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MzAsCisgIDB4MSwgMHhmOCwgMHg1MCwKKyAgMHgxLCAweGY4LCAweDU4LAorICAweDEsIDB4ZmQsIDB4NjgsCisgIDB4MSwgMHhlNywgMHg2LAorICAweDEyLCAweGYsIDB4YzcsIDB4ODAsCisgIDB4MTEsIDB4OWMsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgxOCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDE4LAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MTgsCisgIDB4MjIsIDB4ZiwgMHgzMiwKKyAgMHgyMiwgMHhmLCAweDMzLAorICAweDIyLCAweGYsIDB4MzEsCisgIDB4MTEsIDB4YzMsCisgIDB4MTEsIDB4YzIsCisgIDB4MTEsIDB4Y2IsCisgIDB4MTEsIDB4Y2EsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAwLAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4OCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDgsCisgIDB4MjIsIDB4ZiwgMHhhYSwKKyAgMHgxMSwgMHg5ZSwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweDE4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MWEsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHgxYywKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDE4LAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4MTgsCisgIDB4MSwgMHhmZSwgMHhhZSwKKyAgMHgxMywgMHhmLCAweGYwLCAweDkwLCAweDM4LCAwLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MjgsCisgIDB4MjMsIDB4ZiwgMHhhNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGE1LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MjgsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgyOCwKKyAgMHgyMywgMHhmLCAweGFjLCAwLCAwLAorICAweDIzLCAweGYsIDB4YWQsIDAsIDAsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGMxLAorICAweDMzLCAweGYsIDB4MSwgMHhjMiwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzMsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGM0LAorICAweDIzLCAweGYsIDB4NzgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3OSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDAsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGM4LAorICAweDMzLCAweGYsIDB4MSwgMHhjOSwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4OCwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAwLAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHgyMCwKKyAgMHgxMSwgMHhmOSwKKyAgMHgxMSwgMHhmZCwKKyAgMHgxMSwgMHhmYiwKKyAgMHgxLCAweGZlLCAweGFhLAorICAweDIzLCAweGYsIDAsIDB4MzgsIDB4OCwKKyAgMHgyLCAweGZlLCAweDI4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MmEsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHgyYywKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDI4LAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4MjgsCisgIDB4MiwgMHhmZSwgMHg4NCwgMCwgMCwKKyAgMHgxLCAweGZlLCAweGE4LAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDAsCisgIDB4MjIsIDB4ZiwgMHhiLAorICAweDIzLCAweGYsIDAsIDB4MzgsIDB4MjAsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHgyOCwKKyAgMHgyMiwgMHhmLCAweDksCisgIDB4MjMsIDB4ZiwgMHhkLCAweDM4LCAwLAorICAweDIzLCAweGYsIDB4ZCwgMHgzOCwgMHg4LAorICAweDIzLCAweGYsIDB4MTgsIDB4MzgsIDAsCisgIDB4MjMsIDB4ZiwgMHgxOCwgMHgzOCwgMHg4LAorICAweDIzLCAweGYsIDB4MTgsIDB4MzgsIDB4MTAsCisgIDB4MjMsIDB4ZiwgMHgxOCwgMHgzOCwgMHgxOCwKKyAgMHgyMywgMHhmLCAweDFmLCAwLCAwLAorICAweDIyLCAweGYsIDB4MzAsCisgIDB4MTMsIDB4ZiwgMHhmZSwgMHhjMCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDg2LCAwLCAwLAorICAweDEsIDB4ZjgsIDB4OTAsCisgIDB4MTEsIDB4ZDcsCisgIDB4MiwgMHhmZSwgMHgzMCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDMyLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4MzQsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgzMCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDMwLAorICAweDIyLCAweGYsIDB4NzcsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRiLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY1LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGViLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMCwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDEsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgyLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MywKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDQsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg1LAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NiwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDcsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMCwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDEsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgyLAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MywKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDQsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg1LAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NiwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDcsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMHg4LAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDAsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMHgxMCwKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAweDE4LAorICAweDM0LCAweGYyLCAweGYsIDB4MTAsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgxMCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDEwLCAwLCAwLAorICAweDIzLCAweGYsIDB4MTAsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgxMSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDExLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxMSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDEyLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MTIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEyLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MTIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMywgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDEzLCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxMywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE0LCAwLCAwLAorICAweDIzLCAweGYsIDB4MTQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDE1LCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MTYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxNiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDE2LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MTYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxNywgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDE3LCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTcsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxNywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDI4LCAwLCAwLAorICAweDIzLCAweGYsIDB4MjgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyOSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDI5LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MmEsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgyYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJhLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJiLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MmMsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgyYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJjLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyZCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDJkLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MmQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJlLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJmLCAwLCAwLAorICAweDIyLCAweGYsIDB4MzcsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1MCwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDUwLCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTEsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1MSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDUxLCAwLCAwLAorICAweDIzLCAweGYsIDB4NTEsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1MiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDUyLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1MywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU0LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU3LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTcsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1OCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDU4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1OCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDU5LCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTksIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1OSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU5LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWEsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1YSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVhLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1YiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDViLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWIsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1YywgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1YywgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVkLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1ZCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVkLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWUsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1ZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVlLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWUsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1ZiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1ZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDYwLCAwLCAwLAorICAweDIzLCAweGYsIDB4NjAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2MSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDYxLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2MiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDYzLCAwLCAwLAorICAweDIzLCAweGYsIDB4NjMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2NCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2NSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY2LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2NywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY3LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2OCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY5LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjksIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2YSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDZhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2YiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2ZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDZlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmYsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg2ZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDZmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzAsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg3MCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDcwLCAwLCAwLAorICAweDIzLCAweGYsIDB4NzAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3NCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDc0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3NSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDc2LCAwLCAwLAorICAweDIzLCAweGYsIDB4NzYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3YywgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDdjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4N2QsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg3ZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDdlLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4N2UsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3ZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDdmLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4N2YsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3ZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGMzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGM1LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4YzUsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhjNiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGM2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkMSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQyLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ1LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkNiwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweGQ2LCAweGMwLCAweGMwLAorICAweDM0LCAweGYzLCAweGYsIDB4ZDYsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkNywgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweGQ3LCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkOCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ5LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDksIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkYSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRkLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlMCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGUxLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGUyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlMywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU0LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTcsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlNywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU4LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlOSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVjLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlZCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlZSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweGYwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmMSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGYyLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGYzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY2LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmNywgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweGY3LCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmOCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY5LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjksIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmYSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmYiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZjLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmZCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmZSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAwLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MywgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg0LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4NCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDUsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg1LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NiwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDYsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg3LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4NywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDgsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg4LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4OSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDksIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHhhLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4YSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweGIsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHhiLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MWMsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgxYywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDFkLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MWQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxZSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDFlLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4ZiwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDNhLCAweGYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhjNywgMHgzOCwgMHgzMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweGM3LCAweDM4LCAweDMwLAorICAweDIzLCAweGYsIDB4YzcsIDB4MzgsIDB4MzAsCisgIDB4MjMsIDB4ZiwgMHhjNywgMHgzOCwgMHgzOCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcxLCAweGY4LCAweGQwLAorICAweDIzLCAweGYsIDB4NzEsIDB4ZjgsIDB4ZDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MSwgMHhmOCwgMHhlMCwKKyAgMHgyMywgMHhmLCAweDcxLCAweGY4LCAweGUwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzEsIDB4ZjgsIDB4ZjAsCisgIDB4MjMsIDB4ZiwgMHg3MSwgMHhmOCwgMHhmMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcyLCAweGY4LCAweGQwLAorICAweDIzLCAweGYsIDB4NzIsIDB4ZjgsIDB4ZDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MiwgMHhmOCwgMHhlMCwKKyAgMHgyMywgMHhmLCAweDcyLCAweGY4LCAweGUwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzIsIDB4ZjgsIDB4ZjAsCisgIDB4MjMsIDB4ZiwgMHg3MiwgMHhmOCwgMHhmMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDczLCAweGY4LCAweGQwLAorICAweDIzLCAweGYsIDB4NzMsIDB4ZjgsIDB4ZDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MywgMHhmOCwgMHhkOCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDczLCAweGY4LCAweGYwLAorICAweDIzLCAweGYsIDB4NzMsIDB4ZjgsIDB4ZjAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MywgMHhmOCwgMHhmOCwKKyAgMHgzMywgMHhmLCAweGFlLCAweGU4LAorICAweDMzLCAweGYsIDB4YWUsIDB4ZjAsCisgIDB4MzMsIDB4ZiwgMHhhZSwgMHhmOCwKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAweDM4LAorICAweDIzLCAweGYsIDB4ZiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhkLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MTQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxNSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDQwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NDEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHgyMSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDJhLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NDIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyYiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDEwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4ZSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDI5LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NjEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg2MCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDYzLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NjIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzNywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDQxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4MjAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHgyMiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNjLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2QsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzZiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNlLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzgsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzOSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNiLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2EsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyMywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDI0LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzMywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM0LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyOCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDQwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MTcsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg4LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4OSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhiLCAwLCAwLAorICAweDEsIDB4ZTcsIDB4NywKK307CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My8wMDAxLWVsZl9nZXRhcnN5bS1TaWxlbmNlLVdlcnJvci1tYXliZS11bmluaXRpYWxpemVkLWZhbHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My8wMDAxLWVsZl9nZXRhcnN5bS1TaWxlbmNlLVdlcnJvci1tYXliZS11bmluaXRpYWxpemVkLWZhbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc1NGMxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzLzAwMDEtZWxmX2dldGFyc3ltLVNpbGVuY2UtV2Vycm9yLW1heWJlLXVuaW5pdGlhbGl6ZWQtZmFscy5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDY2OGFjY2YzMjJmZDcxODVlMjczYmZkNTBiODQzMjBlNzFkOWRlNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDEwIEFwciAyMDE1IDAwOjI5OjE4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGVsZl9nZXRhcnN5bTogU2lsZW5jZSAtV2Vycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWQgZmFsc2UKKyBwb3NpdGl2ZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGxpYmVsZi9lbGZfZ2V0YXJzeW0uYyB8IDkgKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmVsZi9lbGZfZ2V0YXJzeW0uYyBiL2xpYmVsZi9lbGZfZ2V0YXJzeW0uYworaW5kZXggZDBiYjI4YS4uMDg5NTRkMiAxMDA2NDQKKy0tLSBhL2xpYmVsZi9lbGZfZ2V0YXJzeW0uYworKysrIGIvbGliZWxmL2VsZl9nZXRhcnN5bS5jCitAQCAtMTY1LDggKzE2NSwxMyBAQCBlbGZfZ2V0YXJzeW0gKGVsZiwgcHRyKQorICAgICAgIGludCB3ID0gaW5kZXg2NF9wID8gOCA6IDQ7CisgCisgICAgICAgLyogV2UgaGF2ZSBhbiBhcmNoaXZlLiAgVGhlIGZpcnN0IHdvcmQgaW4gdGhlcmUgaXMgdGhlIG51bWJlciBvZgorLQkgZW50cmllcyBpbiB0aGUgdGFibGUuICAqLworLSAgICAgIHVpbnQ2NF90IG47CisrCSBlbnRyaWVzIGluIHRoZSB0YWJsZS4KKysJIFNldCB0byBTSVpFX01BWCBqdXN0IHRvIHNpbGVuY2UgLVdlcnJvcj1tYXliZS11bmluaXRpYWxpemVkCisrCSBlbGZfZ2V0YXJzeW0uYzoyOTA6OTogZXJyb3I6ICduJyBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rpb24KKysJIFRoZSByZWFkX251bWJlcl9lbnRyaWVzIGZ1bmN0aW9uIGRvZXNuJ3QgaW5pdGlhbGl6ZSBuIG9ubHkgd2hlbiByZXR1cm5pbmcKKysJIC0xIHdoaWNoIGluIHR1cm4gZW5zdXJlcyB0byBqdW1wIG92ZXIgdXNhZ2Ugb2YgdGhpcyB1bmluaXRpYWxpemVkIHZhcmlhYmxlLgorKwkgKi8KKysgICAgICB1aW50NjRfdCBuID0gU0laRV9NQVg7CisgICAgICAgc2l6ZV90IG9mZiA9IGVsZi0+c3RhcnRfb2Zmc2V0ICsgU0FSTUFHICsgc2l6ZW9mIChzdHJ1Y3QgYXJfaGRyKTsKKyAgICAgICBpZiAocmVhZF9udW1iZXJfZW50cmllcyAoJm4sIGVsZiwgJm9mZiwgaW5kZXg2NF9wKSA8IDApCisgCXsKKy0tIAorMi4zLjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1maXgtYS1zdGFjay11c2FnZS13YXJuaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1maXgtYS1zdGFjay11c2FnZS13YXJuaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MjNiZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My8wMDAxLWZpeC1hLXN0YWNrLXVzYWdlLXdhcm5pbmcucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorW1BBVENIXSBmaXggYSBzdGFjay11c2FnZSB3YXJuaW5nCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitub3QgdXNlIGEgdmFyaWFibGUgdG8gYXMgYSBhcnJheSBzaXplLCBvdGhlcndpc2UgdGhlIHdhcm5pbmcgdG8gZXJyb3IgdGhhdAorc3RhY2sgdXNhZ2UgbWlnaHQgYmUgdW5ib3VuZGVkIFstV2Vycm9yPXN0YWNrLXVzYWdlPV0gd2lsbCBoYXBwZW4KKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgYmFja2VuZHMvcHBjX2luaXRyZWcuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2JhY2tlbmRzL3BwY19pbml0cmVnLmMgYi9iYWNrZW5kcy9wcGNfaW5pdHJlZy5jCitpbmRleCA2NGY1Mzc5Li41MmRkZTNlIDEwMDY0NAorLS0tIGEvYmFja2VuZHMvcHBjX2luaXRyZWcuYworKysrIGIvYmFja2VuZHMvcHBjX2luaXRyZWcuYworQEAgLTkzLDcgKzkzLDcgQEAgcHBjX3NldF9pbml0aWFsX3JlZ2lzdGVyc190aWQgKHBpZF90IHRpZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgCXJldHVybiBmYWxzZTsKKyAgICAgfQorICAgY29uc3Qgc2l6ZV90IGdwcnMgPSBzaXplb2YgKHVzZXJfcmVncy5yLmdwcikgLyBzaXplb2YgKCp1c2VyX3JlZ3Muci5ncHIpOworLSAgRHdhcmZfV29yZCBkd2FyZl9yZWdzW2dwcnNdOworKyAgRHdhcmZfV29yZCBkd2FyZl9yZWdzW3NpemVvZiAodXNlcl9yZWdzLnIuZ3ByKSAvIHNpemVvZiAoKnVzZXJfcmVncy5yLmdwcildOworICAgZm9yICh1bnNpZ25lZCBncHIgPSAwOyBncHIgPCBncHJzOyBncHIrKykKKyAgICAgZHdhcmZfcmVnc1tncHJdID0gdXNlcl9yZWdzLnIuZ3ByW2dwcl07CisgICBpZiAoISBzZXRmdW5jICgwLCBncHJzLCBkd2FyZl9yZWdzLCBhcmcpKQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My8wMDAxLXJlbW92ZS10aGUtdW5uZWVkLWNoZWNraW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1yZW1vdmUtdGhlLXVubmVlZC1jaGVja2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmU5MmQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1yZW1vdmUtdGhlLXVubmVlZC1jaGVja2luZy5wYXRjaApAQCAtMCwwICsxLDM4IEBACitEaXNhYmxlIHRoZSB0ZXN0IHRvIGNvbnZlcnQgZXVjLWpwCisKK1JlbW92ZSB0aGUgdGVzdCAiVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzoKK05vIGNvbnZlcnRlciBmcm9tIEVVQy1KUCB0byBVVEYtOCBpcyBwcm92aWRlZCIKK3NpbmNlIHdlIGRvbid0IHN1cHBvcnQgSFAtVVggYW5kIGlmIHRoZSBldWMtanAgaXMgbm90CitpbnN0YWxsZWQgb24gdGhlIGhvc3QsIHRoZSBkZXBlbmRlbmNlIHdpbGwgYmUgYnVpbHQgd2l0aG91dAoraWNvbnYgc3VwcG9ydCBhbmQgd2lsbCBjYXVzZSBndWlsZC1uYXRpdmUgYnVpbGRpbmcgZmFpbC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgbTQvaWNvbnYubTQgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbTQvaWNvbnYubTQgYi9tNC9pY29udi5tNAoraW5kZXggYTUwMzY0Ni4uMjk5ZjFlYiAxMDA2NDQKKy0tLSBhL200L2ljb252Lm00CisrKysgYi9tNC9pY29udi5tNAorQEAgLTE1OSw2ICsxNTksNyBAQCBpbnQgbWFpbiAoKQorICAgICAgIH0KKyAgIH0KKyAjZW5kaWYKKysjaWYgMAorICAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogTm8gY29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzCisgICAgICBwcm92aWRlZC4gICovCisgICBpZiAoLyogVHJ5IHN0YW5kYXJkaXplZCBuYW1lcy4gICovCitAQCAtMTcwLDYgKzE3MSw3IEBAIGludCBtYWluICgpCisgICAgICAgLyogVHJ5IEhQLVVYIG5hbWVzLiAgKi8KKyAgICAgICAmJiBpY29udl9vcGVuICgidXRmOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkpCisgICAgIHJlc3VsdCB8PSAxNjsKKysjZW5kaWYKKyAgIHJldHVybiByZXN1bHQ7CisgfV1dKV0sCisgICAgICAgICBbYW1fY3ZfZnVuY19pY29udl93b3Jrcz15ZXNdLAorLS0gCisyLjAuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9hcm1fYmFja2VuZC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvYXJtX2JhY2tlbmQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTdjNGU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvYXJtX2JhY2tlbmQuZGlmZgpAQCAtMCwwICsxLDYyNSBAQAorRnJvbSAwZGIxNjg3ZWVlMGI0ZDE2Y2NiYzQwZGI1YTA2YjU3NGZjYTY2MTRjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAxNCBOb3YgMjAxNCAxNToyNTo0MiArMDgwMAorU3ViamVjdDogW1BBVENIXSBSZWJhc2UgYXJtX2JhY2tlbmQuZGlmZiBmcm9tIDAuMTU5IHRvIDAuMTYwCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJhY2tlbmRzL2FybV9pbml0LmMgICAgICAgICAgICAgICAgIHwgIDE4ICsrKystCisgYmFja2VuZHMvYXJtX3JlZ3MuYyAgICAgICAgICAgICAgICAgfCAxMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgYmFja2VuZHMvYXJtX3JldHZhbC5jICAgICAgICAgICAgICAgfCAgNDQgKysrKysrKysrKystCisgYmFja2VuZHMvbGliZWJsX2FybS5oICAgICAgICAgICAgICAgfCAgIDkgKysrCisgbGliZWxmL2VsZi5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTEgKysrCisgdGVzdHMvcnVuLWFkZHJjZmkuc2ggICAgICAgICAgICAgICAgfCAgOTMgKysrKysrKysrKysrKysrKysrKysrKysrLQorIHRlc3RzL3J1bi1hbGxyZWdzLnNoICAgICAgICAgICAgICAgIHwgIDk1ICsrKysrKysrKysrKysrKysrKysrKysrKystCisgdGVzdHMvcnVuLXJlYWRlbGYtbWl4ZWQtY29yZW5vdGUuc2ggfCAgMTEgKystCisgOCBmaWxlcyBjaGFuZ2VkLCA0MDEgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGJhY2tlbmRzL2xpYmVibF9hcm0uaAorCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvYXJtX2luaXQuYyBiL2JhY2tlbmRzL2FybV9pbml0LmMKK2luZGV4IDMyODNjOTcuLjhiNTdkM2YgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9hcm1faW5pdC5jCisrKysgYi9iYWNrZW5kcy9hcm1faW5pdC5jCitAQCAtMzUsMjEgKzM1LDMyIEBACisgI2RlZmluZSBSRUxPQ19QUkVGSVgJUl9BUk1fCisgI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKyAKKysjaW5jbHVkZSAibGliZWJsX2FybS5oIgorKworIC8qIFRoaXMgZGVmaW5lcyB0aGUgY29tbW9uIHJlbG9jIGhvb2tzIGJhc2VkIG9uIGFybV9yZWxvYy5kZWYuICAqLworICNpbmNsdWRlICJjb21tb24tcmVsb2MuYyIKKyAKKyAKKyBjb25zdCBjaGFyICoKKyBhcm1faW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCistICAgICBFbGYgKmVsZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBFbGYgKmVsZjsKKyAgICAgIEdFbGZfSGFsZiBtYWNoaW5lIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKyAgICAgIEVibCAqZWg7CisgICAgICBzaXplX3QgZWhsZW47CisgeworKyAgaW50IHNvZnRfZmxvYXQgPSAwOworKworICAgLyogQ2hlY2sgd2hldGhlciB0aGUgRWxmX0JIIG9iamVjdCBoYXMgYSBzdWZmaWNlbnQgc2l6ZS4gICovCisgICBpZiAoZWhsZW4gPCBzaXplb2YgKEVibCkpCisgICAgIHJldHVybiBOVUxMOworIAorKyAgaWYgKGVsZikgeworKyAgICBHRWxmX0VoZHIgZWhkcl9tZW07CisrICAgIEdFbGZfRWhkciAqZWhkciA9IGdlbGZfZ2V0ZWhkciAoZWxmLCAmZWhkcl9tZW0pOworKyAgICBpZiAoZWhkciAmJiAoZWhkci0+ZV9mbGFncyAmIEVGX0FSTV9TT0ZUX0ZMT0FUKSkKKysgICAgICBzb2Z0X2Zsb2F0ID0gMTsKKysgIH0KKysKKyAgIC8qIFdlIGhhbmRsZSBpdC4gICovCisgICBlaC0+bmFtZSA9ICJBUk0iOworICAgYXJtX2luaXRfcmVsb2MgKGVoKTsKK0BAIC02MSw3ICs3MiwxMCBAQCBhcm1faW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCisgICBIT09LIChlaCwgY29yZV9ub3RlKTsKKyAgIEhPT0sgKGVoLCBhdXh2X2luZm8pOworICAgSE9PSyAoZWgsIGNoZWNrX29iamVjdF9hdHRyaWJ1dGUpOworLSAgSE9PSyAoZWgsIHJldHVybl92YWx1ZV9sb2NhdGlvbik7CisrICBpZiAoc29mdF9mbG9hdCkKKysgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fc29mdDsKKysgIGVsc2UKKysgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25faGFyZDsKKyAgIEhPT0sgKGVoLCBhYmlfY2ZpKTsKKyAgIEhPT0sgKGVoLCBjaGVja19yZWxvY190YXJnZXRfdHlwZSk7CisgCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvYXJtX3JlZ3MuYyBiL2JhY2tlbmRzL2FybV9yZWdzLmMKK2luZGV4IDIxYzVhZDMuLjRlZTEwMzkgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9hcm1fcmVncy5jCisrKysgYi9iYWNrZW5kcy9hcm1fcmVncy5jCitAQCAtMzEsNiArMzEsNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8ZHdhcmYuaD4KKyAKKyAjZGVmaW5lIEJBQ0tFTkQgYXJtXworQEAgLTc2LDYgKzc3LDkgQEAgYXJtX3JlZ2lzdGVyX2luZm8gKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAgICAgICBicmVhazsKKyAKKyAgICAgY2FzZSAxNiArIDAgLi4uIDE2ICsgNzoKKysgICAgICAvKiBBQURXQVJGIHNheXMgdGhhdCB0aGVyZSBhcmUgbm8gcmVnaXN0ZXJzIGluIHRoYXQgcmFuZ2UsCisrICAgICAgICogYnV0IGdjYyBtYXBzIEZQQSByZWdpc3RlcnMgaGVyZQorKyAgICAgICAqLworICAgICAgIHJlZ25vICs9IDk2IC0gMTY7CisgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyAgICAgY2FzZSA5NiArIDAgLi4uIDk2ICsgNzoKK0BAIC04NywxMSArOTEsMTM5IEBAIGFybV9yZWdpc3Rlcl9pbmZvIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgICAgICAgbmFtZWxlbiA9IDI7CisgICAgICAgYnJlYWs7CisgCisrICAgIGNhc2UgNjQgKyAwIC4uLiA2NCArIDk6CisrICAgICAgKnNldG5hbWUgPSAiVkZQIjsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworKyAgICAgIG5hbWVbMF0gPSAncyc7CisrICAgICAgbmFtZVsxXSA9IHJlZ25vIC0gNjQgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgNjQgKyAxMCAuLi4gNjQgKyAzMToKKysgICAgICAqc2V0bmFtZSA9ICJWRlAiOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfZmxvYXQ7CisrICAgICAgbmFtZVswXSA9ICdzJzsKKysgICAgICBuYW1lWzFdID0gKHJlZ25vIC0gNjQpIC8gMTAgKyAnMCc7CisrICAgICAgbmFtZVsyXSA9IChyZWdubyAtIDY0KSAlIDEwICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDEwNCArIDAgLi4uIDEwNCArIDc6CisrICAgICAgLyogWFhYIFRPRE86CisrICAgICAgICogVGhpcyBjYW4gYmUgZWl0aGVyIGludGVsIHdpcmVsZXNzIE1NWCBnZW5lcmFsIHB1cnBvc2UvY29udHJvbAorKyAgICAgICAqIHJlZ2lzdGVycyBvciB4c2NhbGUgYWNjdW11bGF0b3IsIHdoaWNoIGhhdmUgZGlmZmVyZW50IHVzYWdlLgorKyAgICAgICAqIFdlIG9ubHkgaGF2ZSB0aGUgaW50ZWwgd2lyZWxlc3MgTU1YIGhlcmUgbm93LgorKyAgICAgICAqIFRoZSBuYW1lIG5lZWRzIHRvIGJlIGNoYW5nZWQgZm9yIHRoZSB4c2NhbGUgYWNjdW11bGF0b3IgdG9vLiAqLworKyAgICAgICpzZXRuYW1lID0gIk1NWCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBtZW1jcHkobmFtZSwgIndjZ3IiLCA0KTsKKysgICAgICBuYW1lWzRdID0gcmVnbm8gLSAxMDQgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDU7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgMTEyICsgMCAuLi4gMTEyICsgOToKKysgICAgICAqc2V0bmFtZSA9ICJNTVgiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgICpiaXRzID0gNjQ7CisrICAgICAgbmFtZVswXSA9ICd3JzsKKysgICAgICBuYW1lWzFdID0gJ3InOworKyAgICAgIG5hbWVbMl0gPSByZWdubyAtIDExMiArICcwJzsKKysgICAgICBuYW1lbGVuID0gMzsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAxMTIgKyAxMCAuLi4gMTEyICsgMTU6CisrICAgICAgKnNldG5hbWUgPSAiTU1YIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICAqYml0cyA9IDY0OworKyAgICAgIG5hbWVbMF0gPSAndyc7CisrICAgICAgbmFtZVsxXSA9ICdyJzsKKysgICAgICBuYW1lWzJdID0gJzEnOworKyAgICAgIG5hbWVbM10gPSByZWdubyAtIDExMiAtIDEwICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSA0OworKyAgICAgIGJyZWFrOworKworICAgICBjYXNlIDEyODoKKysgICAgICAqc2V0bmFtZSA9ICJzdGF0ZSI7CisgICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisgICAgICAgcmV0dXJuIHN0cGNweSAobmFtZSwgInNwc3IiKSArIDEgLSBuYW1lOworIAorKyAgICBjYXNlIDEyOToKKysgICAgICAqc2V0bmFtZSA9ICJzdGF0ZSI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl9maXEiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDEzMDoKKysgICAgICAqc2V0bmFtZSA9ICJzdGF0ZSI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl9pcnEiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDEzMToKKysgICAgICAqc2V0bmFtZSA9ICJzdGF0ZSI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl9hYnQiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDEzMjoKKysgICAgICAqc2V0bmFtZSA9ICJzdGF0ZSI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl91bmQiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDEzMzoKKysgICAgICAqc2V0bmFtZSA9ICJzdGF0ZSI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl9zdmMiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDE0NCAuLi4gMTUwOgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfdXNyIiwgcmVnbm8gLSAxNDQgKyA4KSArIDE7CisrCisrICAgIGNhc2UgMTUxIC4uLiAxNTc6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF9maXEiLCByZWdubyAtIDE1MSArIDgpICsgMTsKKysKKysgICAgY2FzZSAxNTggLi4uIDE1OToKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX2lycSIsIHJlZ25vIC0gMTU4ICsgMTMpICsgMTsKKysKKysgICAgY2FzZSAxNjAgLi4uIDE2MToKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX2FidCIsIHJlZ25vIC0gMTYwICsgMTMpICsgMTsKKysKKysgICAgY2FzZSAxNjIgLi4uIDE2MzoKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX3VuZCIsIHJlZ25vIC0gMTYyICsgMTMpICsgMTsKKysKKysgICAgY2FzZSAxNjQgLi4uIDE2NToKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX3N2YyIsIHJlZ25vIC0gMTY0ICsgMTMpICsgMTsKKysKKysgICAgY2FzZSAxOTIgLi4uIDE5OToKKysgICAgICpzZXRuYW1lID0gIk1NWCI7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICBuYW1lWzBdID0gJ3cnOworKyAgICAgIG5hbWVbMV0gPSAnYyc7CisrICAgICAgbmFtZVsyXSA9IHJlZ25vIC0gMTkyICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgIGJyZWFrOworKworICAgICBjYXNlIDI1NiArIDAgLi4uIDI1NiArIDk6CisrICAgICAgLyogWFhYIFRPRE86IE5lb24gYWxzbyB1c2VzIHRob3NlIHJlZ2lzdGVycyBhbmQgY2FuIGNvbnRhaW4KKysgICAgICAgKiBib3RoIGZsb2F0IGFuZCBpbnRlZ2VycyAqLworICAgICAgICpzZXRuYW1lID0gIlZGUCI7CisgICAgICAgKnR5cGUgPSBEV19BVEVfZmxvYXQ7CisgICAgICAgKmJpdHMgPSA2NDsKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9hcm1fcmV0dmFsLmMgYi9iYWNrZW5kcy9hcm1fcmV0dmFsLmMKK2luZGV4IDdhY2VkNzQuLjA1MjEzMmUgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9hcm1fcmV0dmFsLmMKKysrKyBiL2JhY2tlbmRzL2FybV9yZXR2YWwuYworQEAgLTQ4LDYgKzQ4LDEzIEBAIHN0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnW10gPQorICNkZWZpbmUgbmxvY19pbnRyZWcJMQorICNkZWZpbmUgbmxvY19pbnRyZWdzKG4pCSgyICogKG4pKQorIAorKy8qIGYxICAqLyAvKiBYWFggVE9ETzogZjAgY2FuIGFsc28gaGF2ZSBudW1iZXIgOTYgaWYgcHJvZ3JhbSB3YXMgY29tcGlsZWQgd2l0aCAtbWFiaT1hYXBjcyAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcxNiB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWcgIDEKKysKKyAvKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0dXJlIGFuZCBpcyBhY3R1YWxseSBzdG9yZWQgaW4gc3RhY2sgc3BhY2UKKyAgICBwYXNzZWQgaW4gYSBoaWRkZW4gYXJndW1lbnQgYnkgdGhlIGNhbGxlci4gIEJ1dCwgdGhlIGNvbXBpbGVyCisgICAgaGVscGZ1bGx5IHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhhdCBzcGFjZSBpbiByMC4gICovCitAQCAtNTgsOCArNjUsOSBAQCBzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2FnZ3JlZ2F0ZVtdID0KKyAjZGVmaW5lIG5sb2NfYWdncmVnYXRlIDEKKyAKKyAKKy1pbnQKKy1hcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisrc3RhdGljIGludAorK2FybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3AsCisrCQkgICAgICAgICAgICBpbnQgc29mdF9mbG9hdCkKKyB7CisgICAvKiBTdGFydCB3aXRoIHRoZSBmdW5jdGlvbidzIHR5cGUsIGFuZCBnZXQgdGhlIERXX0FUX3R5cGUgYXR0cmlidXRlLAorICAgICAgd2hpY2ggaXMgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZS4gICovCitAQCAtOTgsMTQgKzEwNiwzMSBAQCBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisgCSAgICBlbHNlCisgCSAgICAgIHJldHVybiAtMTsKKyAJICB9CisrCWlmICh0YWcgPT0gRFdfVEFHX2Jhc2VfdHlwZSkKKysJeworKwkgIER3YXJmX1dvcmQgZW5jb2Rpbmc7CisrCSAgaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2VuY29kaW5nLAorKwkgICAgICAgICAgICAgICAgICAgICAgICZhdHRyX21lbSksICZlbmNvZGluZykgIT0gMCkKKysJICAgIHJldHVybiAtMTsKKysKKysJICBpZiAoKGVuY29kaW5nID09IERXX0FURV9mbG9hdCkgJiYgIXNvZnRfZmxvYXQpCisrCSAgICB7CisrCSAgICAgICpsb2NwID0gbG9jX2ZwcmVnOworKwkgICAgICBpZiAoc2l6ZSA8PSA4KQorKwkJcmV0dXJuIG5sb2NfZnByZWc7CisrCSAgICAgIGdvdG8gYWdncmVnYXRlOworKwkgICAgfQorKwl9CisgCWlmIChzaXplIDw9IDE2KQorIAkgIHsKKyAJICBpbnRyZWc6CisgCSAgICAqbG9jcCA9IGxvY19pbnRyZWc7CisgCSAgICByZXR1cm4gc2l6ZSA8PSA0ID8gbmxvY19pbnRyZWcgOiBubG9jX2ludHJlZ3MgKChzaXplICsgMykgLyA0KTsKKyAJICB9CisrCSAgLyogZmFsbCB0aHJvdWdoLiAqLworIAorICAgICAgIGFnZ3JlZ2F0ZToKKysJLyogWFhYIFRPRE8gc29tZXRpbWVzIGFnZ3JlZ2F0ZXMgYXJlIHJldHVybmVkIGluIHIwICgtbWFiaT1hYXBjcykgKi8KKyAJKmxvY3AgPSBsb2NfYWdncmVnYXRlOworIAlyZXR1cm4gbmxvY19hZ2dyZWdhdGU7CisgICAgICAgfQorQEAgLTEyNSwzICsxNTAsMTggQEAgYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbiAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorICAgICAgRFdBUkYgYW5kIG1pZ2h0IGJlIHZhbGlkLiAgKi8KKyAgIHJldHVybiAtMjsKKyB9CisrCisrLyogcmV0dXJuIGxvY2F0aW9uIGZvciAtbWFiaT1hcGNzLWdudSAtbXNvZnQtZmxvYXQgKi8KKytpbnQKKythcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX3NvZnQgKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICAgcmV0dXJuIGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMSk7CisrfQorKworKy8qIHJldHVybiBsb2NhdGlvbiBmb3IgLW1hYmk9YXBjcy1nbnUgLW1oYXJkLWZsb2F0IChjdXJyZW50IGRlZmF1bHQpICovCisraW50CisrYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9oYXJkIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgIHJldHVybiBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoZnVuY3R5cGVkaWUsIGxvY3AsIDApOworK30KKysKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9saWJlYmxfYXJtLmggYi9iYWNrZW5kcy9saWJlYmxfYXJtLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jMDA3NzBjCistLS0gL2Rldi9udWxsCisrKysgYi9iYWNrZW5kcy9saWJlYmxfYXJtLmgKK0BAIC0wLDAgKzEsOSBAQAorKyNpZm5kZWYgX0xJQkVCTF9BUk1fSAorKyNkZWZpbmUgX0xJQkVCTF9BUk1fSCAxCisrCisrI2luY2x1ZGUgPGxpYmR3Lmg+CisrCisrZXh0ZXJuIGludCBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX3NvZnQoRHdhcmZfRGllICosIGNvbnN0IER3YXJmX09wICoqbG9jcCk7CisrZXh0ZXJuIGludCBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX2hhcmQoRHdhcmZfRGllICosIGNvbnN0IER3YXJmX09wICoqbG9jcCk7CisrCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvbGliZWxmL2VsZi5oIGIvbGliZWxmL2VsZi5oCitpbmRleCBhM2NjZTNlLi4wODkxNjc0IDEwMDY0NAorLS0tIGEvbGliZWxmL2VsZi5oCisrKysgYi9saWJlbGYvZWxmLmgKK0BAIC0yMzQ2LDYgKzIzNDYsOSBAQCB0eXBlZGVmIEVsZjMyX0FkZHIgRWxmMzJfQ29uZmxpY3Q7CisgI2RlZmluZSBFRl9BUk1fRUFCSV9WRVI0CTB4MDQwMDAwMDAKKyAjZGVmaW5lIEVGX0FSTV9FQUJJX1ZFUjUJMHgwNTAwMDAwMAorIAorKy8qIEVJX09TQUJJIHZhbHVlcyAqLworKyNkZWZpbmUgRUxGT1NBQklfQVJNX0FFQUJJICAgIDY0ICAgICAgLyogQ29udGFpbnMgc3ltYm9sIHZlcnNpb25pbmcuICovCisrCisgLyogQWRkaXRpb25hbCBzeW1ib2wgdHlwZXMgZm9yIFRodW1iLiAgKi8KKyAjZGVmaW5lIFNUVF9BUk1fVEZVTkMJCVNUVF9MT1BST0MgLyogQSBUaHVtYiBmdW5jdGlvbi4gICovCisgI2RlZmluZSBTVFRfQVJNXzE2QklUCQlTVFRfSElQUk9DIC8qIEEgVGh1bWIgbGFiZWwuICAqLworQEAgLTIzNjMsMTIgKzIzNjYsMTkgQEAgdHlwZWRlZiBFbGYzMl9BZGRyIEVsZjMyX0NvbmZsaWN0OworIAorIC8qIFByb2Nlc3NvciBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoZSBQaGRyIHBfdHlwZSBmaWVsZC4gICovCisgI2RlZmluZSBQVF9BUk1fRVhJRFgJCShQVF9MT1BST0MgKyAxKQkvKiBBUk0gdW53aW5kIHNlZ21lbnQuICAqLworKyNkZWZpbmUgUFRfQVJNX1VOV0lORAkJUFRfQVJNX0VYSURYCisgCisgLyogUHJvY2Vzc29yIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIFNoZHIgc2hfdHlwZSBmaWVsZC4gICovCisgI2RlZmluZSBTSFRfQVJNX0VYSURYCQkoU0hUX0xPUFJPQyArIDEpIC8qIEFSTSB1bndpbmQgc2VjdGlvbi4gICovCisgI2RlZmluZSBTSFRfQVJNX1BSRUVNUFRNQVAJKFNIVF9MT1BST0MgKyAyKSAvKiBQcmVlbXB0aW9uIGRldGFpbHMuICAqLworICNkZWZpbmUgU0hUX0FSTV9BVFRSSUJVVEVTCShTSFRfTE9QUk9DICsgMykgLyogQVJNIGF0dHJpYnV0ZXMgc2VjdGlvbi4gICovCisgCisrLyogUHJvY2Vzc29yIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIER5biBkX3RhZyBmaWVsZC4gICovCisrI2RlZmluZSBEVF9BUk1fUkVTRVJWRUQxCShEVF9MT1BST0MgKyAwKQorKyNkZWZpbmUgRFRfQVJNX1NZTVRBQlNaCQkoRFRfTE9QUk9DICsgMSkKKysjZGVmaW5lIERUX0FSTV9QUkVFTVRNQUIJKERUX0xPUFJPQyArIDIpCisrI2RlZmluZSBEVF9BUk1fUkVTRVJWRUQyCShEVF9MT1BST0MgKyAzKQorKyNkZWZpbmUgRFRfQVJNX05VTQkJNAorIAorIC8qIEFBcmNoNjQgcmVsb2NzLiAgKi8KKyAKK0BAIC0yNjQ3LDYgKzI2NTcsNyBAQCB0eXBlZGVmIEVsZjMyX0FkZHIgRWxmMzJfQ29uZmxpY3Q7CisgCQkJCQkgICBUTFMgYmxvY2sgKExEUiwgU1RSKS4gICovCisgI2RlZmluZSBSX0FSTV9UTFNfSUUxMkdQCTExMQkvKiAxMiBiaXQgR09UIGVudHJ5IHJlbGF0aXZlCisgCQkJCQkgICB0byBHT1Qgb3JpZ2luIChMRFIpLiAgKi8KKysvKiAxMTIgLSAxMjcgcHJpdmF0ZSByYW5nZSAqLworICNkZWZpbmUgUl9BUk1fTUVfVE9PCQkxMjgJLyogT2Jzb2xldGUuICAqLworICNkZWZpbmUgUl9BUk1fVEhNX1RMU19ERVNDU0VRCTEyOQorICNkZWZpbmUgUl9BUk1fVEhNX1RMU19ERVNDU0VRMTYJMTI5CitkaWZmIC0tZ2l0IGEvdGVzdHMvcnVuLWFkZHJjZmkuc2ggYi90ZXN0cy9ydW4tYWRkcmNmaS5zaAoraW5kZXggNWQzMzI0Ni4uNzg0NjRhOCAxMDA3NTUKKy0tLSBhL3Rlc3RzL3J1bi1hZGRyY2ZpLnNoCisrKysgYi90ZXN0cy9ydW4tYWRkcmNmaS5zaAorQEAgLTI1MzAsNiArMjUzMCwzOCBAQCBkd2FyZl9jZmlfYWRkcmZyYW1lICguZWhfZnJhbWUpOiBubyBtYXRjaGluZyBhZGRyZXNzIHJhbmdlCisgCUZQQSByZWcyMSAoZjUpOiB1bmRlZmluZWQKKyAJRlBBIHJlZzIyIChmNik6IHVuZGVmaW5lZAorIAlGUEEgcmVnMjMgKGY3KTogdW5kZWZpbmVkCisrCVZGUCByZWc2NCAoczApOiB1bmRlZmluZWQKKysJVkZQIHJlZzY1IChzMSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNjYgKHMyKTogdW5kZWZpbmVkCisrCVZGUCByZWc2NyAoczMpOiB1bmRlZmluZWQKKysJVkZQIHJlZzY4IChzNCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNjkgKHM1KTogdW5kZWZpbmVkCisrCVZGUCByZWc3MCAoczYpOiB1bmRlZmluZWQKKysJVkZQIHJlZzcxIChzNyk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzIgKHM4KTogdW5kZWZpbmVkCisrCVZGUCByZWc3MyAoczkpOiB1bmRlZmluZWQKKysJVkZQIHJlZzc0IChzMTApOiB1bmRlZmluZWQKKysJVkZQIHJlZzc1IChzMTEpOiB1bmRlZmluZWQKKysJVkZQIHJlZzc2IChzMTIpOiB1bmRlZmluZWQKKysJVkZQIHJlZzc3IChzMTMpOiB1bmRlZmluZWQKKysJVkZQIHJlZzc4IChzMTQpOiB1bmRlZmluZWQKKysJVkZQIHJlZzc5IChzMTUpOiB1bmRlZmluZWQKKysJVkZQIHJlZzgwIChzMTYpOiB1bmRlZmluZWQKKysJVkZQIHJlZzgxIChzMTcpOiB1bmRlZmluZWQKKysJVkZQIHJlZzgyIChzMTgpOiB1bmRlZmluZWQKKysJVkZQIHJlZzgzIChzMTkpOiB1bmRlZmluZWQKKysJVkZQIHJlZzg0IChzMjApOiB1bmRlZmluZWQKKysJVkZQIHJlZzg1IChzMjEpOiB1bmRlZmluZWQKKysJVkZQIHJlZzg2IChzMjIpOiB1bmRlZmluZWQKKysJVkZQIHJlZzg3IChzMjMpOiB1bmRlZmluZWQKKysJVkZQIHJlZzg4IChzMjQpOiB1bmRlZmluZWQKKysJVkZQIHJlZzg5IChzMjUpOiB1bmRlZmluZWQKKysJVkZQIHJlZzkwIChzMjYpOiB1bmRlZmluZWQKKysJVkZQIHJlZzkxIChzMjcpOiB1bmRlZmluZWQKKysJVkZQIHJlZzkyIChzMjgpOiB1bmRlZmluZWQKKysJVkZQIHJlZzkzIChzMjkpOiB1bmRlZmluZWQKKysJVkZQIHJlZzk0IChzMzApOiB1bmRlZmluZWQKKysJVkZQIHJlZzk1IChzMzEpOiB1bmRlZmluZWQKKyAJRlBBIHJlZzk2IChmMCk6IHVuZGVmaW5lZAorIAlGUEEgcmVnOTcgKGYxKTogdW5kZWZpbmVkCisgCUZQQSByZWc5OCAoZjIpOiB1bmRlZmluZWQKK0BAIC0yNTM4LDcgKzI1NzAsNjYgQEAgZHdhcmZfY2ZpX2FkZHJmcmFtZSAoLmVoX2ZyYW1lKTogbm8gbWF0Y2hpbmcgYWRkcmVzcyByYW5nZQorIAlGUEEgcmVnMTAxIChmNSk6IHVuZGVmaW5lZAorIAlGUEEgcmVnMTAyIChmNik6IHVuZGVmaW5lZAorIAlGUEEgcmVnMTAzIChmNyk6IHVuZGVmaW5lZAorLQlpbnRlZ2VyIHJlZzEyOCAoc3Bzcik6IHVuZGVmaW5lZAorKwlNTVggcmVnMTA0ICh3Y2dyMCk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTA1ICh3Y2dyMSk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTA2ICh3Y2dyMik6IHVuZGVmaW5lZAorKwlNTVggcmVnMTA3ICh3Y2dyMyk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTA4ICh3Y2dyNCk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTA5ICh3Y2dyNSk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTEwICh3Y2dyNik6IHVuZGVmaW5lZAorKwlNTVggcmVnMTExICh3Y2dyNyk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTEyICh3cjApOiB1bmRlZmluZWQKKysJTU1YIHJlZzExMyAod3IxKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTQgKHdyMik6IHVuZGVmaW5lZAorKwlNTVggcmVnMTE1ICh3cjMpOiB1bmRlZmluZWQKKysJTU1YIHJlZzExNiAod3I0KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTcgKHdyNSk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTE4ICh3cjYpOiB1bmRlZmluZWQKKysJTU1YIHJlZzExOSAod3I3KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMjAgKHdyOCk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTIxICh3cjkpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEyMiAod3IxMCk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTIzICh3cjExKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMjQgKHdyMTIpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEyNSAod3IxMyk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTI2ICh3cjE0KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMjcgKHdyMTUpOiB1bmRlZmluZWQKKysJc3RhdGUgcmVnMTI4IChzcHNyKTogdW5kZWZpbmVkCisrCXN0YXRlIHJlZzEyOSAoc3Bzcl9maXEpOiB1bmRlZmluZWQKKysJc3RhdGUgcmVnMTMwIChzcHNyX2lycSk6IHVuZGVmaW5lZAorKwlzdGF0ZSByZWcxMzEgKHNwc3JfYWJ0KTogdW5kZWZpbmVkCisrCXN0YXRlIHJlZzEzMiAoc3Bzcl91bmQpOiB1bmRlZmluZWQKKysJc3RhdGUgcmVnMTMzIChzcHNyX3N2Yyk6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE0NCAocjhfdXNyKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTQ1IChyOV91c3IpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNDYgKHIxMF91c3IpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNDcgKHIxMV91c3IpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNDggKHIxMl91c3IpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNDkgKHIxM191c3IpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTAgKHIxNF91c3IpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTEgKHI4X2ZpcSk6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE1MiAocjlfZmlxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTUzIChyMTBfZmlxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTU0IChyMTFfZmlxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTU1IChyMTJfZmlxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTU2IChyMTNfZmlxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTU3IChyMTRfZmlxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTU4IChyMTNfaXJxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTU5IChyMTRfaXJxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTYwIChyMTNfYWJ0KTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTYxIChyMTRfYWJ0KTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTYyIChyMTNfdW5kKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTYzIChyMTRfdW5kKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTY0IChyMTNfc3ZjKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTY1IChyMTRfc3ZjKTogdW5kZWZpbmVkCisrCU1NWCByZWcxOTIgKHdjMCk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTkzICh3YzEpOiB1bmRlZmluZWQKKysJTU1YIHJlZzE5NCAod2MyKTogdW5kZWZpbmVkCisrCU1NWCByZWcxOTUgKHdjMyk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTk2ICh3YzQpOiB1bmRlZmluZWQKKysJTU1YIHJlZzE5NyAod2M1KTogdW5kZWZpbmVkCisrCU1NWCByZWcxOTggKHdjNik6IHVuZGVmaW5lZAorKwlNTVggcmVnMTk5ICh3YzcpOiB1bmRlZmluZWQKKyAJVkZQIHJlZzI1NiAoZDApOiB1bmRlZmluZWQKKyAJVkZQIHJlZzI1NyAoZDEpOiB1bmRlZmluZWQKKyAJVkZQIHJlZzI1OCAoZDIpOiB1bmRlZmluZWQKK2RpZmYgLS1naXQgYS90ZXN0cy9ydW4tYWxscmVncy5zaCBiL3Rlc3RzL3J1bi1hbGxyZWdzLnNoCitpbmRleCA2ZjM4NjJlLi4xMzU1N2Q1IDEwMDc1NQorLS0tIGEvdGVzdHMvcnVuLWFsbHJlZ3Muc2gKKysrKyBiL3Rlc3RzL3J1bi1hbGxyZWdzLnNoCitAQCAtMjY3MSw3ICsyNjcxLDI4IEBAIGludGVnZXIgcmVnaXN0ZXJzOgorIAkgMTM6IHNwIChzcCksIGFkZHJlc3MgMzIgYml0cworIAkgMTQ6IGxyIChsciksIGFkZHJlc3MgMzIgYml0cworIAkgMTU6IHBjIChwYyksIGFkZHJlc3MgMzIgYml0cworLQkxMjg6IHNwc3IgKHNwc3IpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTE0NDogcjhfdXNyIChyOF91c3IpLCBzaWduZWQgMzIgYml0cworKwkxNDU6IHI5X3VzciAocjlfdXNyKSwgc2lnbmVkIDMyIGJpdHMKKysJMTQ2OiByMTBfdXNyIChyMTBfdXNyKSwgc2lnbmVkIDMyIGJpdHMKKysJMTQ3OiByMTFfdXNyIChyMTFfdXNyKSwgc2lnbmVkIDMyIGJpdHMKKysJMTQ4OiByMTJfdXNyIChyMTJfdXNyKSwgc2lnbmVkIDMyIGJpdHMKKysJMTQ5OiByMTNfdXNyIChyMTNfdXNyKSwgc2lnbmVkIDMyIGJpdHMKKysJMTUwOiByMTRfdXNyIChyMTRfdXNyKSwgc2lnbmVkIDMyIGJpdHMKKysJMTUxOiByOF9maXEgKHI4X2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1MjogcjlfZmlxIChyOV9maXEpLCBzaWduZWQgMzIgYml0cworKwkxNTM6IHIxMF9maXEgKHIxMF9maXEpLCBzaWduZWQgMzIgYml0cworKwkxNTQ6IHIxMV9maXEgKHIxMV9maXEpLCBzaWduZWQgMzIgYml0cworKwkxNTU6IHIxMl9maXEgKHIxMl9maXEpLCBzaWduZWQgMzIgYml0cworKwkxNTY6IHIxM19maXEgKHIxM19maXEpLCBzaWduZWQgMzIgYml0cworKwkxNTc6IHIxNF9maXEgKHIxNF9maXEpLCBzaWduZWQgMzIgYml0cworKwkxNTg6IHIxM19pcnEgKHIxM19pcnEpLCBzaWduZWQgMzIgYml0cworKwkxNTk6IHIxNF9pcnEgKHIxNF9pcnEpLCBzaWduZWQgMzIgYml0cworKwkxNjA6IHIxM19hYnQgKHIxM19hYnQpLCBzaWduZWQgMzIgYml0cworKwkxNjE6IHIxNF9hYnQgKHIxNF9hYnQpLCBzaWduZWQgMzIgYml0cworKwkxNjI6IHIxM191bmQgKHIxM191bmQpLCBzaWduZWQgMzIgYml0cworKwkxNjM6IHIxNF91bmQgKHIxNF91bmQpLCBzaWduZWQgMzIgYml0cworKwkxNjQ6IHIxM19zdmMgKHIxM19zdmMpLCBzaWduZWQgMzIgYml0cworKwkxNjU6IHIxNF9zdmMgKHIxNF9zdmMpLCBzaWduZWQgMzIgYml0cworIEZQQSByZWdpc3RlcnM6CisgCSAxNjogZjAgKGYwKSwgZmxvYXQgOTYgYml0cworIAkgMTc6IGYxIChmMSksIGZsb2F0IDk2IGJpdHMKK0BAIC0yNjg5LDcgKzI3MTAsNzIgQEAgRlBBIHJlZ2lzdGVyczoKKyAJMTAxOiBmNSAoZjUpLCBmbG9hdCA5NiBiaXRzCisgCTEwMjogZjYgKGY2KSwgZmxvYXQgOTYgYml0cworIAkxMDM6IGY3IChmNyksIGZsb2F0IDk2IGJpdHMKKytNTVggcmVnaXN0ZXJzOgorKwkxMDQ6IHdjZ3IwICh3Y2dyMCksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTA1OiB3Y2dyMSAod2NncjEpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEwNjogd2NncjIgKHdjZ3IyKSwgdW5zaWduZWQgMzIgYml0cworKwkxMDc6IHdjZ3IzICh3Y2dyMyksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTA4OiB3Y2dyNCAod2NncjQpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEwOTogd2NncjUgKHdjZ3I1KSwgdW5zaWduZWQgMzIgYml0cworKwkxMTA6IHdjZ3I2ICh3Y2dyNiksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTExOiB3Y2dyNyAod2NncjcpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTExMjogd3IwICh3cjApLCB1bnNpZ25lZCA2NCBiaXRzCisrCTExMzogd3IxICh3cjEpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTExNDogd3IyICh3cjIpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTExNTogd3IzICh3cjMpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTExNjogd3I0ICh3cjQpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTExNzogd3I1ICh3cjUpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTExODogd3I2ICh3cjYpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTExOTogd3I3ICh3cjcpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTEyMDogd3I4ICh3cjgpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTEyMTogd3I5ICh3cjkpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTEyMjogd3IxMCAod3IxMCksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTIzOiB3cjExICh3cjExKSwgdW5zaWduZWQgNjQgYml0cworKwkxMjQ6IHdyMTIgKHdyMTIpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTEyNTogd3IxMyAod3IxMyksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTI2OiB3cjE0ICh3cjE0KSwgdW5zaWduZWQgNjQgYml0cworKwkxMjc6IHdyMTUgKHdyMTUpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTE5Mjogd2MwICh3YzApLCB1bnNpZ25lZCAzMiBiaXRzCisrCTE5Mzogd2MxICh3YzEpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTE5NDogd2MyICh3YzIpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTE5NTogd2MzICh3YzMpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTE5Njogd2M0ICh3YzQpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTE5Nzogd2M1ICh3YzUpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTE5ODogd2M2ICh3YzYpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTE5OTogd2M3ICh3YzcpLCB1bnNpZ25lZCAzMiBiaXRzCisgVkZQIHJlZ2lzdGVyczoKKysJIDY0OiBzMCAoczApLCBmbG9hdCAzMiBiaXRzCisrCSA2NTogczEgKHMxKSwgZmxvYXQgMzIgYml0cworKwkgNjY6IHMyIChzMiksIGZsb2F0IDMyIGJpdHMKKysJIDY3OiBzMyAoczMpLCBmbG9hdCAzMiBiaXRzCisrCSA2ODogczQgKHM0KSwgZmxvYXQgMzIgYml0cworKwkgNjk6IHM1IChzNSksIGZsb2F0IDMyIGJpdHMKKysJIDcwOiBzNiAoczYpLCBmbG9hdCAzMiBiaXRzCisrCSA3MTogczcgKHM3KSwgZmxvYXQgMzIgYml0cworKwkgNzI6IHM4IChzOCksIGZsb2F0IDMyIGJpdHMKKysJIDczOiBzOSAoczkpLCBmbG9hdCAzMiBiaXRzCisrCSA3NDogczEwIChzMTApLCBmbG9hdCAzMiBiaXRzCisrCSA3NTogczExIChzMTEpLCBmbG9hdCAzMiBiaXRzCisrCSA3NjogczEyIChzMTIpLCBmbG9hdCAzMiBiaXRzCisrCSA3NzogczEzIChzMTMpLCBmbG9hdCAzMiBiaXRzCisrCSA3ODogczE0IChzMTQpLCBmbG9hdCAzMiBiaXRzCisrCSA3OTogczE1IChzMTUpLCBmbG9hdCAzMiBiaXRzCisrCSA4MDogczE2IChzMTYpLCBmbG9hdCAzMiBiaXRzCisrCSA4MTogczE3IChzMTcpLCBmbG9hdCAzMiBiaXRzCisrCSA4MjogczE4IChzMTgpLCBmbG9hdCAzMiBiaXRzCisrCSA4MzogczE5IChzMTkpLCBmbG9hdCAzMiBiaXRzCisrCSA4NDogczIwIChzMjApLCBmbG9hdCAzMiBiaXRzCisrCSA4NTogczIxIChzMjEpLCBmbG9hdCAzMiBiaXRzCisrCSA4NjogczIyIChzMjIpLCBmbG9hdCAzMiBiaXRzCisrCSA4NzogczIzIChzMjMpLCBmbG9hdCAzMiBiaXRzCisrCSA4ODogczI0IChzMjQpLCBmbG9hdCAzMiBiaXRzCisrCSA4OTogczI1IChzMjUpLCBmbG9hdCAzMiBiaXRzCisrCSA5MDogczI2IChzMjYpLCBmbG9hdCAzMiBiaXRzCisrCSA5MTogczI3IChzMjcpLCBmbG9hdCAzMiBiaXRzCisrCSA5MjogczI4IChzMjgpLCBmbG9hdCAzMiBiaXRzCisrCSA5MzogczI5IChzMjkpLCBmbG9hdCAzMiBiaXRzCisrCSA5NDogczMwIChzMzApLCBmbG9hdCAzMiBiaXRzCisrCSA5NTogczMxIChzMzEpLCBmbG9hdCAzMiBiaXRzCisgCTI1NjogZDAgKGQwKSwgZmxvYXQgNjQgYml0cworIAkyNTc6IGQxIChkMSksIGZsb2F0IDY0IGJpdHMKKyAJMjU4OiBkMiAoZDIpLCBmbG9hdCA2NCBiaXRzCitAQCAtMjcyMiw2ICsyODA4LDEzIEBAIFZGUCByZWdpc3RlcnM6CisgCTI4NTogZDI5IChkMjkpLCBmbG9hdCA2NCBiaXRzCisgCTI4NjogZDMwIChkMzApLCBmbG9hdCA2NCBiaXRzCisgCTI4NzogZDMxIChkMzEpLCBmbG9hdCA2NCBiaXRzCisrc3RhdGUgcmVnaXN0ZXJzOgorKwkxMjg6IHNwc3IgKHNwc3IpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEyOTogc3Bzcl9maXEgKHNwc3JfZmlxKSwgdW5zaWduZWQgMzIgYml0cworKwkxMzA6IHNwc3JfaXJxIChzcHNyX2lycSksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTMxOiBzcHNyX2FidCAoc3Bzcl9hYnQpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEzMjogc3Bzcl91bmQgKHNwc3JfdW5kKSwgdW5zaWduZWQgMzIgYml0cworKwkxMzM6IHNwc3Jfc3ZjIChzcHNyX3N2YyksIHVuc2lnbmVkIDMyIGJpdHMKKyBFT0YKKyAKKyAjIFNlZSBydW4tcmVhZGVsZi1taXhlZC1jb3Jlbm90ZS5zaCBmb3IgaW5zdHJ1Y3Rpb25zIHRvIHJlZ2VuZXJhdGUKK2RpZmYgLS1naXQgYS90ZXN0cy9ydW4tcmVhZGVsZi1taXhlZC1jb3Jlbm90ZS5zaCBiL3Rlc3RzL3J1bi1yZWFkZWxmLW1peGVkLWNvcmVub3RlLnNoCitpbmRleCAwMWU0NTk0Li45YThhMzgwIDEwMDc1NQorLS0tIGEvdGVzdHMvcnVuLXJlYWRlbGYtbWl4ZWQtY29yZW5vdGUuc2gKKysrKyBiL3Rlc3RzL3J1bi1yZWFkZWxmLW1peGVkLWNvcmVub3RlLnNoCitAQCAtMzAsMTIgKzMwLDExIEBAIE5vdGUgc2VnbWVudCBvZiA4OTIgYnl0ZXMgYXQgb2Zmc2V0IDB4Mjc0OgorICAgICBwaWQ6IDExMDg3LCBwcGlkOiAxMTA2MywgcGdycDogMTEwODcsIHNpZDogMTEwNjMKKyAgICAgdXRpbWU6IDAuMDAwMDAwLCBzdGltZTogMC4wMTAwMDAsIGN1dGltZTogMC4wMDAwMDAsIGNzdGltZTogMC4wMDAwMDAKKyAgICAgb3JpZ19yMDogLTEsIGZwdmFsaWQ6IDEKKy0gICAgcjA6ICAgICAgICAgICAgIDEgIHIxOiAgIC0xMDkxNjcyNTA4ICByMjogICAtMTA5MTY3MjUwMAorLSAgICByMzogICAgICAgICAgICAgMCAgcjQ6ICAgICAgICAgICAgIDAgIHI1OiAgICAgICAgICAgICAwCistICAgIHI2OiAgICAgICAgIDMzNzI4ICByNzogICAgICAgICAgICAgMCAgcjg6ICAgICAgICAgICAgIDAKKy0gICAgcjk6ICAgICAgICAgICAgIDAgIHIxMDogIC0xMjI1NzAzNDk2ICByMTE6ICAtMTA5MTY3Mjg0NAorLSAgICByMTI6ICAgICAgICAgICAgMCAgc3A6ICAgIDB4YmVlZTY0ZjQgIGxyOiAgICAweGI2ZGMzZjQ4CistICAgIHBjOiAgICAweDAwMDA4NTAwICBzcHNyOiAgMHg2MDAwMDAxMAorKyAgICByMDogICAgICAgICAgICAxICByMTogIC0xMDkxNjcyNTA4ICByMjogIC0xMDkxNjcyNTAwICByMzogICAgICAgICAgICAwCisrICAgIHI0OiAgICAgICAgICAgIDAgIHI1OiAgICAgICAgICAgIDAgIHI2OiAgICAgICAgMzM3MjggIHI3OiAgICAgICAgICAgIDAKKysgICAgcjg6ICAgICAgICAgICAgMCAgcjk6ICAgICAgICAgICAgMCAgcjEwOiAtMTIyNTcwMzQ5NiAgcjExOiAtMTA5MTY3Mjg0NAorKyAgICByMTI6ICAgICAgICAgICAwICBzcDogICAweGJlZWU2NGY0ICBscjogICAweGI2ZGMzZjQ4ICBwYzogICAweDAwMDA4NTAwCisrICAgIHNwc3I6ICAweDYwMDAwMDEwCisgICBDT1JFICAgICAgICAgICAgICAgICAxMjQgIFBSUFNJTkZPCisgICAgIHN0YXRlOiAwLCBzbmFtZTogUiwgem9tYjogMCwgbmljZTogMCwgZmxhZzogMHgwMDQwMDUwMAorICAgICB1aWQ6IDAsIGdpZDogMCwgcGlkOiAxMTA4NywgcHBpZDogMTEwNjMsIHBncnA6IDExMDg3LCBzaWQ6IDExMDYzCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV9mdW5jX3ZhbHVlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvYXJtX2Z1bmNfdmFsdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlNGRmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV9mdW5jX3ZhbHVlLnBhdGNoCkBAIC0wLDAgKzEsMTY1IEBACitGcm9tOiBNYXJrIFdpZWxhYXJkIDxtandAcmVkaGF0LmNvbT4KK0RhdGU6IFN1biwgMTUgSnVuIDIwMTQgMTE6MzA6MzUgKzAyMDAKK1N1YmplY3Q6IGxpYmVibDogQWRkIHN5bV9mdW5jX3ZhbHVlIGhvb2suCisKK1RoZSBBUk0gRUFCSSBzYXlzIHRoYXQgdGhlIHplcm8gYml0IG9mIGZ1bmN0aW9uIHN5bWJvbCBzdF92YWx1ZSBpbmRpY2F0ZXMKK3doZXRoZXIgdGhlIHN5bWJvbCBwb2ludHMgdG8gYSBUSFVNQiBvciBBUk0gZnVuY3Rpb24uIEFkZCBhIG5ldyBlYmwgaG9vawordG8gYWRqdXN0IHRoZSBzdF92YWx1ZSBpbiBzdWNoIGEgY2FzZSBzbyB0aGF0IHdlIGdldCB0aGUgYWN0dWFsIHZhbHVlIHRoYXQKK3RoZSBzeW1ib2wgcG9pbnRzIHRvLiBJdCBpc24ndCBlYXNpbHkgcG9zc2libGUgdG8gcmV1c2UgdGhlIGV4aXN0aW5nCityZXNvbHZlX3N5bV92YWx1ZSBmb3IgdGhpcyBwdXJwb3NlLCBzbyB3ZSBlbmQgdXAgd2l0aCBhbm90aGVyIGhvb2sgdGhhdAorY2FuIGJlIHVzZWQgZnJvbSBkd2ZsX21vZHVsZV9nZXRzeW0gYW5kIGVsZmxpbnQuCisKK1JlYmFzZSBhcm1fZnVuY192YWx1ZS5wYXRjaCBmcm9tIDAuMTU5IHRvIDAuMTYwCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBiYWNrZW5kcy9hcm1faW5pdC5jICAgICAgICAgIHwgICAgMSArCisgYmFja2VuZHMvYXJtX3N5bWJvbC5jICAgICAgICB8ICAgIDggKysrKysrKysKKyBsaWJkd2ZsL2R3ZmxfbW9kdWxlX2dldHN5bS5jIHwgICAgMiArLQorIGxpYmVibC9NYWtlZmlsZS5hbSAgICAgICAgICAgfCAgICAzICsrLQorIGxpYmVibC9lYmwtaG9va3MuaCAgICAgICAgICAgfCAgICAzICsrKworIGxpYmVibC9lYmxzeW1mdW5jdmFsLmMgICAgICAgfCAgIDQzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGxpYmVibC9saWJlYmwuaCAgICAgICAgICAgICAgfCAgIDExICsrKysrKysrKysrCisgNyBmaWxlcyBjaGFuZ2VkLCA2OSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvYXJtX2luaXQuYyBiL2JhY2tlbmRzL2FybV9pbml0LmMKK2luZGV4IDcxNzExODYuLjlmMDM2MzAgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9hcm1faW5pdC5jCisrKysgYi9iYWNrZW5kcy9hcm1faW5pdC5jCitAQCAtNzgsNiArNzgsNyBAQCBhcm1faW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCisgICAgIGVoLT5yZXR1cm5fdmFsdWVfbG9jYXRpb24gPSBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX2hhcmQ7CisgICBIT09LIChlaCwgYWJpX2NmaSk7CisgICBIT09LIChlaCwgY2hlY2tfcmVsb2NfdGFyZ2V0X3R5cGUpOworKyAgSE9PSyAoZWgsIHN5bV9mdW5jX3ZhbHVlKTsKKyAgIEhPT0sgKGVoLCBzeW1ib2xfdHlwZV9uYW1lKTsKKyAKKyAgIC8qIFdlIG9ubHkgdW53aW5kIHRoZSBjb3JlIGludGVnZXIgcmVnaXN0ZXJzLiAgKi8KK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9hcm1fc3ltYm9sLmMgYi9iYWNrZW5kcy9hcm1fc3ltYm9sLmMKK2luZGV4IGRhNGE1MGEuLmNjZWEwM2IgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9hcm1fc3ltYm9sLmMKKysrKyBiL2JhY2tlbmRzL2FybV9zeW1ib2wuYworQEAgLTEzMCw2ICsxMzAsMTQgQEAgYXJtX2NoZWNrX3JlbG9jX3RhcmdldF90eXBlIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIEVsZjY0X1dvcmQgc2hfdHkKKyAgIHJldHVybiBzaF90eXBlID09IFNIVF9BUk1fRVhJRFg7CisgfQorIAorKy8qIEFSTSBFQUJJIHNheXMgdGhhdCB0aGUgbG93IGJpdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZnVuY3Rpb24KKysgICBzeW1ib2wgdmFsdWUgaXMgYSBUSFVNQiBmdW5jdGlvbiBvciBub3QuICBNYXNrIGl0IG9mZi4gICovCisrR0VsZl9BZGRyCisrYXJtX3N5bV9mdW5jX3ZhbHVlIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIEdFbGZfQWRkciB2YWwpCisreworKyAgcmV0dXJuIHZhbCAmIH4oR0VsZl9BZGRyKTE7CisrfQorKworIGNvbnN0IGNoYXIgKgorIGFybV9zeW1ib2xfdHlwZV9uYW1lIChpbnQgdHlwZSwKKyAJCSAgICAgIGNoYXIgKmJ1ZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCitkaWZmIC0tZ2l0IGEvbGliZHdmbC9kd2ZsX21vZHVsZV9nZXRzeW0uYyBiL2xpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0c3ltLmMKK2luZGV4IDQyZDJiNjcuLmZiMTkyZDcgMTAwNjQ0CistLS0gYS9saWJkd2ZsL2R3ZmxfbW9kdWxlX2dldHN5bS5jCisrKysgYi9saWJkd2ZsL2R3ZmxfbW9kdWxlX2dldHN5bS5jCitAQCAtMTE5LDcgKzExOSw3IEBAIF9fbGliZHdmbF9nZXRzeW0gKER3ZmxfTW9kdWxlICptb2QsIGludCBuZHgsIEdFbGZfU3ltICpzeW0sIEdFbGZfQWRkciAqYWRkciwKKyAgICAgIGRlc2NyaXB0b3JzKS4gICovCisgCisgICBjaGFyICppZGVudDsKKy0gIEdFbGZfQWRkciBzdF92YWx1ZSA9IHN5bS0+c3RfdmFsdWUgJiBlYmxfZnVuY19hZGRyX21hc2sgKG1vZC0+ZWJsKTsKKysgIEdFbGZfQWRkciBzdF92YWx1ZSA9IGVibF9zeW1fZnVuY192YWx1ZSAobW9kLT5lYmwsIHN5bS0+c3RfdmFsdWUpOworICAgKnJlc29sdmVkID0gZmFsc2U7CisgICBpZiAoISBhZGp1c3Rfc3RfdmFsdWUgJiYgbW9kLT5lX3R5cGUgIT0gRVRfUkVMICYmIGFsbG9jCisgICAgICAgJiYgKEdFTEZfU1RfVFlQRSAoc3ltLT5zdF9pbmZvKSA9PSBTVFRfRlVOQworZGlmZiAtLWdpdCBhL2xpYmVibC9NYWtlZmlsZS5hbSBiL2xpYmVibC9NYWtlZmlsZS5hbQoraW5kZXggZWM0NDc3Yi4uODg5YzIxYiAxMDA2NDQKKy0tLSBhL2xpYmVibC9NYWtlZmlsZS5hbQorKysrIGIvbGliZWJsL01ha2VmaWxlLmFtCitAQCAtNTUsNyArNTUsOCBAQCBnZW5fU09VUkNFUyA9IGVibG9wZW5iYWNrZW5kLmMgZWJsY2xvc2ViYWNrZW5kLmMgZWJsc3RydGFiLmMgXAorIAkgICAgICBlYmxzeXN2aGFzaGVudHJ5c2l6ZS5jIGVibGF1eHZpbmZvLmMgZWJsY2hlY2tvYmphdHRyLmMgXAorIAkgICAgICBlYmxfY2hlY2tfc3BlY2lhbF9zZWN0aW9uLmMgZWJsX3N5c2NhbGxfYWJpLmMgZWJsYWJpY2ZpLmMgXAorIAkgICAgICBlYmxzdG90aGVyLmMgZWJsaW5pdHJlZy5jIGVibGR3YXJmdG9yZWduby5jIGVibG5vcm1hbGl6ZXBjLmMgXAorLQkgICAgICBlYmx1bndpbmQuYyBlYmxyZXNvbHZlc3ltLmMgZWJsY2hlY2tyZWxvY3RhcmdldHR5cGUuYworKwkgICAgICBlYmx1bndpbmQuYyBlYmxyZXNvbHZlc3ltLmMgZWJsY2hlY2tyZWxvY3RhcmdldHR5cGUuYyBcCisrCSAgICAgIGVibHN5bWZ1bmN2YWwuYworIAorIGxpYmVibF9hX1NPVVJDRVMgPSAkKGdlbl9TT1VSQ0VTKQorIAorZGlmZiAtLWdpdCBhL2xpYmVibC9lYmwtaG9va3MuaCBiL2xpYmVibC9lYmwtaG9va3MuaAoraW5kZXggMmUzMTQ0Ni4uOWRmOTQ1ZCAxMDA2NDQKKy0tLSBhL2xpYmVibC9lYmwtaG9va3MuaAorKysrIGIvbGliZWJsL2VibC1ob29rcy5oCitAQCAtMTkxLDUgKzE5MSw4IEBAIGJvb2wgRUJMSE9PSyh1bndpbmQpIChFYmwgKmVibCwgRHdhcmZfQWRkciBwYywgZWJsX3RpZF9yZWdpc3RlcnNfdCAqc2V0ZnVuYywKKyAgICAoZS5nLiBmdW5jdGlvbiBkZXNjcmlwdG9yIHJlc29sdmluZykgICovCisgYm9vbCBFQkxIT09LKHJlc29sdmVfc3ltX3ZhbHVlKSAoRWJsICplYmwsIEdFbGZfQWRkciAqYWRkcik7CisgCisrLyogUmV0dXJucyB0aGUgcmVhbCB2YWx1ZSBvZiBhIHN5bWJvbCBmdW5jdGlvbiBhZGRyZXNzIG9yIG9mZnNldC4gICovCisrR0VsZl9BZGRyIEVCTEhPT0soc3ltX2Z1bmNfdmFsdWUpIChFYmwgKmVibCwgR0VsZl9BZGRyIHZhbCk7CisrCisgLyogRGVzdHJ1Y3RvciBmb3IgRUxGIGJhY2tlbmQgaGFuZGxlLiAgKi8KKyB2b2lkIEVCTEhPT0soZGVzdHIpIChzdHJ1Y3QgZWJsICopOworZGlmZiAtLWdpdCBhL2xpYmVibC9lYmxzeW1mdW5jdmFsLmMgYi9saWJlYmwvZWJsc3ltZnVuY3ZhbC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYzBiMzIyZgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliZWJsL2VibHN5bWZ1bmN2YWwuYworQEAgLTAsMCArMSw0MyBAQAorKy8qIFR1cm4gYSBzeW1ib2wgZnVuY3Rpb24gdmFsdWUgaW50byBhIHJlYWwgZnVuY3Rpb24gYWRkcmVzcyBvciBvZmZzZXQuCisrICAgQ29weXJpZ2h0IChDKSAyMDE0IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBlbGZ1dGlscy4KKysKKysgICBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIKKysKKysgICAgICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKysgICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisrICAgICAgIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbgorKworKyAgIG9yCisrCisrICAgICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKysgICAgICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisrICAgICAgIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbgorKworKyAgIG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisrCisrICAgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorKyAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZgorKyAgIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxsaWJlYmxQLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKworK0dFbGZfQWRkcgorK2VibF9zeW1fZnVuY192YWx1ZSAoRWJsICplYmwsIEdFbGZfQWRkciB2YWwpCisreworKyAgaWYgKGVibCA9PSBOVUxMIHx8IGVibC0+c3ltX2Z1bmNfdmFsdWUgPT0gTlVMTCkKKysgICAgcmV0dXJuIHZhbDsKKysKKysgIHJldHVybiBlYmwtPnN5bV9mdW5jX3ZhbHVlIChlYmwsIHZhbCk7CisrfQorZGlmZiAtLWdpdCBhL2xpYmVibC9saWJlYmwuaCBiL2xpYmVibC9saWJlYmwuaAoraW5kZXggN2RiZjQ2MC4uOTZjMDc2YiAxMDA2NDQKKy0tLSBhL2xpYmVibC9saWJlYmwuaAorKysrIGIvbGliZWJsL2xpYmVibC5oCitAQCAtNDcyLDYgKzQ3MiwxNyBAQCBleHRlcm4gYm9vbCBlYmxfdW53aW5kIChFYmwgKmVibCwgRHdhcmZfQWRkciBwYywgZWJsX3RpZF9yZWdpc3RlcnNfdCAqc2V0ZnVuYywKKyBleHRlcm4gYm9vbCBlYmxfcmVzb2x2ZV9zeW1fdmFsdWUgKEVibCAqZWJsLCBHRWxmX0FkZHIgKmFkZHIpCisgICAgX19ub25udWxsX2F0dHJpYnV0ZV9fICgyKTsKKyAKKysvKiBSZXR1cm5zIHRoZSByZWFsIHZhbHVlIG9mIGEgc3ltYm9sIGZ1bmN0aW9uIGFkZHJlc3Mgb3Igb2Zmc2V0CisrICAgKGUuZy4gd2hlbiB0aGUgc3RfdmFsdWUgY29udGFpbnMgc29tZSBmbGFnIGJpdHMgdGhhdCBuZWVkIHRvIGJlCisrICAgbWFza2VkIG9mZikuICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIGVibF9yZXNvbHZlX3N5bV92YWx1ZSB3aGljaAorKyAgIG9ubHkgd29ya3MgZm9yIGFjdHVhbCBzeW1ib2wgYWRkcmVzc2VzIChpbiBub24tRVRfUkVMIGZpbGVzKSB0aGF0CisrICAgbWlnaHQgcmVzb2x2ZSB0byBhbiBhZGRyZXNzIGluIGEgZGlmZmVyZW50IHNlY3Rpb24uCisrICAgZWJsX3N5bV9mdW5jX3ZhbHVlIGlzIGNhbGxlZCB0byB0dXJuIHRoZSBnaXZlbiB2YWx1ZSBpbnRvIHRoZSBhCisrICAgcmVhbCBhZGRyZXNzIG9yIG9mZnNldCAodGhlIG9yaWdpbmFsIHZhbHVlIG1pZ2h0IG5vdCBiZSBhIHJlYWwKKysgICBhZGRyZXNzKS4gIFRoaXMgd29ya3MgZm9yIGJvdGggRVRfUkVMIHdoZW4gdGhlIHZhbHVlIGlzIGEgc2VjdGlvbgorKyAgIG9mZnNldCBvciBFVF9FWEVDIG9yIEVUX0RZTiBzeW1ib2wgdmFsdWVzLCB3aGljaCBhcmUgYWRkcmVzc2VzLiAgKi8KKytleHRlcm4gR0VsZl9BZGRyIGVibF9zeW1fZnVuY192YWx1ZSAoRWJsICplYmwsIEdFbGZfQWRkciB2YWwpOworKworICNpZmRlZiBfX2NwbHVzcGx1cworIH0KKyAjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV91bndpbmRfcmV0X21hc2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9hcm1fdW53aW5kX3JldF9tYXNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYmIzNmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9hcm1fdW53aW5kX3JldF9tYXNrLnBhdGNoCkBAIC0wLDAgKzEsODMgQEAKK0Zyb206IE1hcmsgV2llbGFhcmQgPG1qd0ByZWRoYXQuY29tPgorRGF0ZTogU3VuLCAxNSBKdW4gMjAxNCAxMjozMDowMiArMDIwMAorU3ViamVjdDogbGliZWJsOiBBZGQgZWJsX3Vud2luZF9yZXRfbWFzay4KKworQW5vdGhlciBBUk0gb2RkaXR5LiBBIHJldHVybiB2YWx1ZSBhZGRyZXNzIGluIGFuIHVud2luZCB3aWxsIGNvbnRhaW4gYW4KK2V4dHJhIGJpdCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRvIHJldHVybiB0byBhIHJlZ3VsYXIgQVJNIG9yIFRIVU1CIGZ1bmN0aW9uLgorQWRkIGEgbmV3IGVibCBmdW5jdGlvbiB0byByZXR1cm4gYSBtYXNrIHRvIHVzZSB0byBnZXQgdGhlIGFjdHVhbCByZXR1cm4KK2FkZHJlc3MgZHVyaW5nIGFuIHVud2luZCBlYmxfdW53aW5kX3JldF9tYXNrLgorCitSZWJhc2UgYXJtX3Vud2luZF9yZXRfbWFzay5wYXRjaCBmcm9tIDAuMTU5IHRvIDAuMTYwCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJhY2tlbmRzL2FybV9pbml0LmMgfCAzICsrKworIGxpYmVibC9lYmxpbml0cmVnLmMgfCA4ICsrKysrKysrCisgbGliZWJsL2xpYmVibC5oICAgICB8IDQgKysrKworIGxpYmVibC9saWJlYmxQLmggICAgfCA2ICsrKysrKworIDQgZmlsZXMgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvYXJtX2luaXQuYyBiL2JhY2tlbmRzL2FybV9pbml0LmMKK2luZGV4IDIyNjY4MjkuLmY4ZGYwNDIgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9hcm1faW5pdC5jCisrKysgYi9iYWNrZW5kcy9hcm1faW5pdC5jCitAQCAtODcsNSArODcsOCBAQCBhcm1faW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCisgICAvKiBCaXQgemVybyBlbmNvZGVzIHdoZXRoZXIgYW4gZnVuY3Rpb24gYWRkcmVzcyBpcyBUSFVNQiBvciBBUk0uICovCisgICBlaC0+ZnVuY19hZGRyX21hc2sgPSB+KEdFbGZfQWRkcikxOworIAorKyAgLyogQml0IHplcm8gZW5jb2RlcyB3aGV0aGVyIHRvIHJldHVybiB0byBhIFRIVU1CIG9yIEFSTSBmdW5jdGlvbi4gKi8KKysgIGVoLT51bndpbmRfcmV0X21hc2sgPSB+KEdFbGZfQWRkcikxOworKworICAgcmV0dXJuIE1PRFZFUlNJT047CisgfQorZGlmZiAtLWdpdCBhL2xpYmVibC9lYmxpbml0cmVnLmMgYi9saWJlYmwvZWJsaW5pdHJlZy5jCitpbmRleCA1NzI5YjNjLi5jYTY4MWMwIDEwMDY0NAorLS0tIGEvbGliZWJsL2VibGluaXRyZWcuYworKysrIGIvbGliZWJsL2VibGluaXRyZWcuYworQEAgLTU2LDMgKzU2LDExIEBAIGVibF9mdW5jX2FkZHJfbWFzayAoRWJsICplYmwpCisgICByZXR1cm4gKChlYmwgPT0gTlVMTCB8fCBlYmwtPmZ1bmNfYWRkcl9tYXNrID09IDApCisgCSAgPyB+KEdFbGZfQWRkcikwIDogZWJsLT5mdW5jX2FkZHJfbWFzayk7CisgfQorKworK0dFbGZfQWRkcgorK2VibF91bndpbmRfcmV0X21hc2sgKEVibCAqZWJsKQorK3sKKysgIHJldHVybiAoKGVibCA9PSBOVUxMIHx8IGVibC0+dW53aW5kX3JldF9tYXNrID09IDApCisrCSAgPyB+KEdFbGZfQWRkcikwIDogZWJsLT51bndpbmRfcmV0X21hc2spOworK30KKysKK2RpZmYgLS1naXQgYS9saWJlYmwvbGliZWJsLmggYi9saWJlYmwvbGliZWJsLmgKK2luZGV4IDQwY2Y2MzUuLmJlNzAwMjcgMTAwNjQ0CistLS0gYS9saWJlYmwvbGliZWJsLmgKKysrKyBiL2xpYmVibC9saWJlYmwuaAorQEAgLTQyMCw2ICs0MjAsMTAgQEAgZXh0ZXJuIHNpemVfdCBlYmxfZnJhbWVfbnJlZ3MgKEVibCAqZWJsKQorICAgIHRhYmxlcykgaXMgbmVlZGVkLiAgKi8KKyBleHRlcm4gR0VsZl9BZGRyIGVibF9mdW5jX2FkZHJfbWFzayAoRWJsICplYmwpOworIAorKy8qIE1hc2sgdG8gdXNlIGZvciB1bndpbmQgcmV0dXJuIGFkZHJlc3MgaW4gY2FzZSB0aGUgYXJjaGl0ZWN0dXJlIGFkZHMKKysgICBzb21lIGV4dHJhIG5vbi1hZGRyZXNzIGJpdHMgdG8gaXQuICAqLworK2V4dGVybiBHRWxmX0FkZHIgZWJsX3Vud2luZF9yZXRfbWFzayAoRWJsICplYmwpOworKworIC8qIENvbnZlcnQgKlJFR05PIGFzIGlzIGluIERXQVJGIHRvIGEgbG93ZXIgcmFuZ2Ugc3VpdGFibGUgZm9yCisgICAgRHdhcmZfRnJhbWUtPlJFR1MgaW5kZXhpbmcuICAqLworIGV4dGVybiBib29sIGVibF9kd2FyZl90b19yZWdubyAoRWJsICplYmwsIHVuc2lnbmVkICpyZWdubykKK2RpZmYgLS1naXQgYS9saWJlYmwvbGliZWJsUC5oIGIvbGliZWJsL2xpYmVibFAuaAoraW5kZXggZGJkNjdmMy4uZTE4YWNlNiAxMDA2NDQKKy0tLSBhL2xpYmVibC9saWJlYmxQLmgKKysrKyBiL2xpYmVibC9saWJlYmxQLmgKK0BAIC03MCw2ICs3MCwxMiBAQCBzdHJ1Y3QgZWJsCisgICAgICBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHRoZSBhY3R1YWwgbWFzayB0byB1c2UuICAqLworICAgR0VsZl9BZGRyIGZ1bmNfYWRkcl9tYXNrOworIAorKyAgLyogTWFzayB0byB1c2UgdG8gZ2V0IHRoZSByZXR1cm4gYWRkcmVzcyBmcm9tIGFuIHVud2luZCBpbiBjYXNlIHRoZQorKyAgICAgYXJjaGl0ZWN0dXJlIGFkZHMgc29tZSBleHRyYSBub24tYWRkcmVzcyBiaXRzIHRvIGl0LiAgV2hlbiBub3QKKysgICAgIGluaXRpYWxpemVkICgwKSB0aGVuIGVibF91bndpbmRfcmV0X21hc2sgd2lsbCByZXR1cm4gfjAsIG90aGVyd2lzZQorKyAgICAgaXQgc2hvdWxkIGJlIHRoZSBhY3R1YWwgbWFzayB0byB1c2UuICAqLworKyAgR0VsZl9BZGRyIHVud2luZF9yZXRfbWFzazsKKysKKyAgIC8qIEZ1bmN0aW9uIGRlc2NyaXB0b3IgbG9hZCBhZGRyZXNzIGFuZCB0YWJsZSBhcyB1c2VkIGJ5CisgICAgICBlYmxfcmVzb2x2ZV9zeW1fdmFsdWUgaWYgYXZhaWxhYmxlIGZvciB0aGlzIGFyY2guICAqLworICAgR0VsZl9BZGRyIGZkX2FkZHI7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2ZpeGhlYWRlcmNoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvZml4aGVhZGVyY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRlM2IyNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2ZpeGhlYWRlcmNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK0ZvciBzb21lIGJpbmFyaWVzIHdlIGNhbiBnZXQgYSBpbnZhbGlkIHNlY3Rpb24gYWxpZ25tZW50LCBmb3IgZXhhbXBsZSBpZiAKK3NoX2FsaWduID0gMSBhbmQgc2hfYWRkcmFsaWduIGlzIDAuIEluIHRoZSBjYXNlIG9mIGEgemVybyBzaXplIHNlY3Rpb24gbGlrZSAKKyIubm90ZS5HTlUtc3RhY2siLCB0aGlzIGlzIGlycmVsYXZlbnQgYXMgZmFyIGFzIEkgY2FuIHRlbGwgYW5kIHdlIHNob3VsZG4ndAorZXJyb3IgaW4gdGhpcyBjYXNlLgorCitSUCAyMDE0LzYvMTEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLS1naXQgYS9saWJlbGYvZWxmMzJfdXBkYXRlbnVsbC5jIGIvbGliZWxmL2VsZjMyX3VwZGF0ZW51bGwuYworLS0tIGEvbGliZWxmL2VsZjMyX3VwZGF0ZW51bGwuYworKysrIGIvbGliZWxmL2VsZjMyX3VwZGF0ZW51bGwuYworQEAgLTMzOSw4ICszMzksOCBAQCBfX2VsZncyKExJQkVMRkJJVFMsdXBkYXRlbnVsbF93cmxvY2spIChFbGYgKmVsZiwgaW50ICpjaGFuZ2VfYm9wLCBzaXplX3Qgc2hudW0pCisgCQkgICAgIHdlIHRlc3QgZm9yIHRoZSBhbGlnbm1lbnQgb2YgdGhlIHNlY3Rpb24gYmVpbmcgbGFyZ2UKKyAJCSAgICAgZW5vdWdoIGZvciB0aGUgbGFyZ2VzdCBhbGlnbm1lbnQgcmVxdWlyZWQgYnkgYSBkYXRhCisgCQkgICAgIGJsb2NrLiAgKi8KKy0JCSAgaWYgKHVubGlrZWx5ICghIHBvd2Vyb2YyIChzaGRyLT5zaF9hZGRyYWxpZ24pKQorLQkJICAgICAgfHwgdW5saWtlbHkgKChzaGRyLT5zaF9hZGRyYWxpZ24gPzogMSkgPCBzaF9hbGlnbikpCisrCQkgIGlmIChzaGRyLT5zaF9zaXplICYmICh1bmxpa2VseSAoISBwb3dlcm9mMiAoc2hkci0+c2hfYWRkcmFsaWduKSkKKysJCSAgICAgIHx8IHVubGlrZWx5ICgoc2hkci0+c2hfYWRkcmFsaWduID86IDEpIDwgc2hfYWxpZ24pKSkKKyAJCSAgICB7CisgCQkgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9BTElHTik7CisgCQkgICAgICByZXR1cm4gLTE7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ocHBhX2JhY2tlbmQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2hwcGFfYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MWE3MjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ocHBhX2JhY2tlbmQuZGlmZgpAQCAtMCwwICsxLDgwMCBAQAorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19pbml0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2NfaW5pdC5jCTIwMTQtMDQtMjEgMTE6MTI6MTIuMjI4MTUwMjgwICswMDAwCitAQCAtMCwwICsxLDc0IEBACisrLyogSW5pdGlhbGl6YXRpb24gb2YgUEEtUklTQyBzcGVjaWZpYyBiYWNrZW5kIGxpYnJhcnkuCisrICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1LCAyMDA2IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDIuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjZGVmaW5lIEJBQ0tFTkQJCXBhcmlzY18KKysjZGVmaW5lIFJFTE9DX1BSRUZJWAlSX1BBUklTQ18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKyNpbmNsdWRlICJsaWJlYmxfcGFyaXNjLmgiCisrCisrLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gcGFyaXNjX3JlbG9jLmRlZi4gICovCisrI2luY2x1ZGUgImNvbW1vbi1yZWxvYy5jIgorKworKworK2NvbnN0IGNoYXIgKgorK3BhcmlzY19pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKysgICAgIEVsZiAqZWxmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEdFbGZfSGFsZiBtYWNoaW5lIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEVibCAqZWg7CisrICAgICBzaXplX3QgZWhsZW47CisreworKyAgaW50IHBhNjQgPSAwOworKworKyAgLyogQ2hlY2sgd2hldGhlciB0aGUgRWxmX0JIIG9iamVjdCBoYXMgYSBzdWZmaWNlbnQgc2l6ZS4gICovCisrICBpZiAoZWhsZW4gPCBzaXplb2YgKEVibCkpCisrICAgIHJldHVybiBOVUxMOworKworKyAgaWYgKGVsZikgeworKyAgICBHRWxmX0VoZHIgZWhkcl9tZW07CisrICAgIEdFbGZfRWhkciAqZWhkciA9IGdlbGZfZ2V0ZWhkciAoZWxmLCAmZWhkcl9tZW0pOworKyAgICBpZiAoZWhkciAmJiAoZWhkci0+ZV9mbGFncyAmIEVGX1BBUklTQ19XSURFKSkKKysgICAgICBwYTY0ID0gMTsKKysgIH0KKysgIC8qIFdlIGhhbmRsZSBpdC4gICovCisrICBlaC0+bmFtZSA9ICJQQS1SSVNDIjsKKysgIHBhcmlzY19pbml0X3JlbG9jIChlaCk7CisrICBIT09LIChlaCwgcmVsb2Nfc2ltcGxlX3R5cGUpOworKyAgSE9PSyAoZWgsIG1hY2hpbmVfZmxhZ19jaGVjayk7CisrICBIT09LIChlaCwgc3ltYm9sX3R5cGVfbmFtZSk7CisrICBIT09LIChlaCwgc2VnbWVudF90eXBlX25hbWUpOworKyAgSE9PSyAoZWgsIHNlY3Rpb25fdHlwZV9uYW1lKTsKKysgIEhPT0sgKGVoLCByZWdpc3Rlcl9pbmZvKTsKKysgIGlmIChwYTY0KQorKyAgICBlaC0+cmV0dXJuX3ZhbHVlX2xvY2F0aW9uID0gcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl82NDsKKysgIGVsc2UKKysgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fMzI7CisrCisrICByZXR1cm4gTU9EVkVSU0lPTjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX3JlZ3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19yZWdzLmMJMjAxNC0wNC0yMSAxMToxMjoxMi4yMjgxNTAyODAgKzAwMDAKK0BAIC0wLDAgKzEsMTU5IEBACisrLyogUmVnaXN0ZXIgbmFtZXMgYW5kIG51bWJlcnMgZm9yIFBBLVJJU0MgRFdBUkYuCisrICAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKworKyNkZWZpbmUgQkFDS0VORCBwYXJpc2NfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKytzc2l6ZV90CisrcGFyaXNjX3JlZ2lzdGVyX2luZm8gKEVibCAqZWJsLCBpbnQgcmVnbm8sIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAorKwkJICAgICBjb25zdCBjaGFyICoqcHJlZml4LCBjb25zdCBjaGFyICoqc2V0bmFtZSwKKysJCSAgICAgaW50ICpiaXRzLCBpbnQgKnR5cGUpCisreworKyAgaW50IHBhNjQgPSAwOworKworKyAgaWYgKGVibC0+ZWxmKSB7CisrICAgIEdFbGZfRWhkciBlaGRyX21lbTsKKysgICAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlYmwtPmVsZiwgJmVoZHJfbWVtKTsKKysgICAgaWYgKGVoZHItPmVfZmxhZ3MgJiBFRl9QQVJJU0NfV0lERSkKKysgICAgICBwYTY0ID0gMTsKKysgIH0KKysKKysgIGludCBucmVncyA9IHBhNjQgPyAxMjcgOiAxMjg7CisrCisrICBpZiAobmFtZSA9PSBOVUxMKQorKyAgICByZXR1cm4gbnJlZ3M7CisrCisrICBpZiAocmVnbm8gPCAwIHx8IHJlZ25vID49IG5yZWdzIHx8IG5hbWVsZW4gPCA2KQorKyAgICByZXR1cm4gLTE7CisrCisrICAqcHJlZml4ID0gIiUiOworKworKyAgaWYgKHJlZ25vIDwgMzIpCisrICB7CisrICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgIGlmIChwYTY0KQorKyAgICB7CisrCSpiaXRzID0gNjQ7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgIAkqYml0cyA9IDMyOworKyAgICB9CisrICB9CisrICBlbHNlIGlmIChyZWdubyA9PSAzMikKKysgIHsKKysgICAgKnNldG5hbWUgPSAic3BlY2lhbCI7CisrICAgIGlmIChwYTY0KQorKyAgICB7CisrCSpiaXRzID0gNjsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgCSpiaXRzID0gNTsKKysgICAgfQorKyAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgIH0KKysgIGVsc2UKKysgIHsKKysgICAgKnNldG5hbWUgPSAiRlBVIjsKKysgICAgKnR5cGUgPSBEV19BVEVfZmxvYXQ7CisrICAgIGlmIChwYTY0KQorKyAgICB7CisrCSpiaXRzID0gNjQ7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgIAkqYml0cyA9IDMyOworKyAgICB9CisrICB9CisrCisrICBpZiAocmVnbm8gPCAzMykgeworKyAgICBzd2l0Y2ggKHJlZ25vKQorKyAgICAgIHsKKysgICAgICBjYXNlIDAgLi4uIDk6CisrICAgICAgICBuYW1lWzBdID0gJ3InOworKyAgICAgICAgbmFtZVsxXSA9IHJlZ25vICsgJzAnOworKyAgICAgICAgbmFtZWxlbiA9IDI7CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIDEwIC4uLiAzMToKKysgICAgICAgIG5hbWVbMF0gPSAncic7CisrICAgICAgICBuYW1lWzFdID0gcmVnbm8gLyAxMCArICcwJzsKKysgICAgICAgIG5hbWVbMl0gPSByZWdubyAlIDEwICsgJzAnOworKyAgICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIDMyOgorKwkqcHJlZml4ID0gTlVMTDsKKysJbmFtZVswXSA9ICdTJzsKKysJbmFtZVsxXSA9ICdBJzsKKysJbmFtZVsyXSA9ICdSJzsKKysJbmFtZWxlbiA9IDM7CisrCWJyZWFrOworKyAgICAgIH0KKysgIH0KKysgIGVsc2UgeworKyAgICBpZiAocGE2NCAmJiAoKHJlZ25vIC0gNzIpICUgMikpIHsKKysgICAgICAqc2V0bmFtZSA9IE5VTEw7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgICAgc3dpdGNoIChyZWdubykKKysgICAgICB7CisrICAgICAgY2FzZSA3MiArIDAgLi4uIDcyICsgMTE6CisrICAgICAgICBuYW1lWzBdID0gJ2YnOworKwluYW1lWzFdID0gJ3InOworKyAgICAgICAgbmFtZVsyXSA9IChyZWdubyArIDggLSA3MikgLyAyICsgJzAnOworKyAgICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgICBpZiAoKHJlZ25vICsgOCAtIDcyKSAlIDIpIHsKKysJICBuYW1lWzNdID0gJ1InOworKwkgIG5hbWVsZW4rKzsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgNzIgKyAxMiAuLi4gNzIgKyA1NToKKysgICAgICAgIG5hbWVbMF0gPSAnZic7CisrCW5hbWVbMV0gPSAncic7CisrICAgICAgICBuYW1lWzJdID0gKHJlZ25vICsgOCAtIDcyKSAvIDIgLyAxMCArICcwJzsKKysgICAgICAgIG5hbWVbM10gPSAocmVnbm8gKyA4IC0gNzIpIC8gMiAlIDEwICsgJzAnOworKyAgICAgICAgbmFtZWxlbiA9IDQ7CisrICAgICAgICBpZiAoKHJlZ25vICsgOCAtIDcyKSAlIDIpIHsKKysJICBuYW1lWzRdID0gJ1InOworKwkgIG5hbWVsZW4rKzsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrICAgICAgICAqc2V0bmFtZSA9IE5VTEw7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgICB9CisrICB9CisrICBuYW1lW25hbWVsZW4rK10gPSAnXDAnOworKyAgcmV0dXJuIG5hbWVsZW47CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19yZWxvYy5kZWYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2NfcmVsb2MuZGVmCTIwMTQtMDQtMjEgMTE6MTI6MTIuMjI4MTUwMjgwICswMDAwCitAQCAtMCwwICsxLDEyOCBAQAorKy8qIExpc3QgdGhlIHJlbG9jYXRpb24gdHlwZXMgZm9yIFBBLVJJU0MuICAtKi0gQyAtKi0KKysgICBDb3B5cmlnaHQgKEMpIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKy8qCSAgICBOQU1FLAkJUkVMfEVYRUN8RFlOCSovCisrCisrUkVMT0NfVFlQRSAoTk9ORSwJCUVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKERJUjMyLAkJUkVMfEVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKERJUjIxTCwJCVJFTHxFWEVDfERZTikKKytSRUxPQ19UWVBFIChESVIxN1IsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTdGLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE0UiwJCVJFTHxEWU4pCisrUkVMT0NfVFlQRSAoUENSRUwzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChQQ1JFTDIxTCwJCVJFTCkKKytSRUxPQ19UWVBFIChQQ1JFTDE3UiwJCVJFTCkKKytSRUxPQ19UWVBFIChQQ1JFTDE3RiwJCVJFTCkKKytSRUxPQ19UWVBFIChQQ1JFTDE0UiwJCVJFTHxFWEVDKQorK1JFTE9DX1RZUEUgKERQUkVMMjFMLAkJUkVMKQorK1JFTE9DX1RZUEUgKERQUkVMMTRXUiwJCVJFTCkKKytSRUxPQ19UWVBFIChEUFJFTDE0RFIsICAgICAgICAgIFJFTCkKKytSRUxPQ19UWVBFIChEUFJFTDE0UiwJCVJFTCkKKytSRUxPQ19UWVBFIChHUFJFTDIxTCwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNFIsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMjFMLAkJUkVMKQorK1JFTE9DX1RZUEUgKExUT0ZGMTRSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERMVElORDE0RiwJCTApCisrUkVMT0NfVFlQRSAoU0VUQkFTRSwJCTApCisrUkVMT0NfVFlQRSAoU0VDUkVMMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoQkFTRVJFTDIxTCwJCTApCisrUkVMT0NfVFlQRSAoQkFTRVJFTDE3UiwJCTApCisrUkVMT0NfVFlQRSAoQkFTRVJFTDE0UiwJCTApCisrUkVMT0NfVFlQRSAoU0VHQkFTRSwJCTApCisrUkVMT0NfVFlQRSAoU0VHUkVMMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUT0ZGMjFMLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNFIsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE0RiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjMyLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIyMUwsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE0UiwJMCkKKytSRUxPQ19UWVBFIChGUFRSNjQsCQkwKQorK1JFTE9DX1RZUEUgKFBMQUJFTDMyLAkJUkVMfERZTikKKytSRUxPQ19UWVBFIChQQ1JFTDY0LAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDIyQywJCTApCisrUkVMT0NfVFlQRSAoUENSRUwyMkYsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNERSLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE2RiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNldGLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE2REYsCQkwKQorK1JFTE9DX1RZUEUgKERJUjY0LAkJUkVMfERZTikKKytSRUxPQ19UWVBFIChESVIxNFdSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE0RFIsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTZGLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE2V0YsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTZERiwJCVJFTCkKKytSRUxPQ19UWVBFIChHUFJFTDY0LAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE0V1IsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTREUiwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNkYsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTZXRiwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNkRGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjY0LAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE0V1IsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTREUiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNkYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTZXRiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNkRGLAkJMCkKKytSRUxPQ19UWVBFIChTRUNSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoQkFTRVJFTDE0V1IsCTApCisrUkVMT0NfVFlQRSAoQkFTRVJFTDE0RFIsCTApCisrUkVMT0NfVFlQRSAoU0VHUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE0V1IsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE2RiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTZXRiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTZERiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjY0LAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNFdSLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNERSLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNkYsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE2V0YsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE2REYsCTApCisrUkVMT0NfVFlQRSAoQ09QWSwJCUVYRUMpCisrUkVMT0NfVFlQRSAoSVBMVCwJCUVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKEVQTFQsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMzIsCQlEWU4pCisrUkVMT0NfVFlQRSAoVFBSRUwyMUwsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTRSLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDIxTCwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE0UiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE0RiwJMCkKKytSRUxPQ19UWVBFIChUUFJFTDY0LAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE0V1IsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTREUiwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNkYsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTZXRiwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNkRGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDY0LAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE0V1IsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNERSLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTZGLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTZXRiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE2REYsCTApCisrUkVMT0NfVFlQRSAoVExTX0RUUE1PRDMyLAlEWU4pCisrUkVMT0NfVFlQRSAoVExTX0RUUE1PRDY0LAlEWU4pCisrCisrI2RlZmluZSBOT19SRUxBVElWRV9SRUxPQyAgICAgICAxCitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX3JldHZhbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX3JldHZhbC5jCTIwMTQtMDQtMjEgMTE6MTI6MTIuMjI4MTUwMjgwICswMDAwCitAQCAtMCwwICsxLDIxMyBAQAorKy8qIEZ1bmN0aW9uIHJldHVybiB2YWx1ZSBsb2NhdGlvbiBmb3IgTGludXgvUEEtUklTQyBBQkkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKworKyNkZWZpbmUgQkFDS0VORCBwYXJpc2NfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysjaW5jbHVkZSAibGliZWJsX3BhcmlzYy5oIgorKworKy8qICVyMjgsIG9yIHBhaXIgJXIyOCwgJXIyOS4gICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWczMltdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzI4IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzI5IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgIH07CisrCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyOCB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyOSB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19pbnRyZWcJMQorKyNkZWZpbmUgbmxvY19pbnRyZWdwYWlyCTQKKysKKysvKiAlZnI0TCwgb3IgcGFpciAlZnI0TCwgJWZyNFIgb24gcGEtMzIgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnMzJbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gNzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDczIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ZwcmVnMzIgMgorKyNkZWZpbmUgbmxvY19mcHJlZ3BhaXIzMiA0CisrCisrLyogJGZyNCAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gNzIgfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ZwcmVnICAxCisrCisrI2lmIDAKKysvKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0dXJlIGFuZCBpcyBhY3R1YWxseSBzdG9yZWQgaW4gc3RhY2sgc3BhY2UKKysgICBwYXNzZWQgaW4gYSBoaWRkZW4gYXJndW1lbnQgYnkgdGhlIGNhbGxlci4gQWRkcmVzcyBvZiB0aGUgbG9jYXRpb24gaXMgc3RvcmVkCisrICAgaW4gJXIyOCBiZWZvcmUgZnVuY3Rpb24gY2FsbCwgYnV0IGl0IG1heSBiZSBjaGFuZ2VkIGJ5IGZ1bmN0aW9uLiAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfYWdncmVnYXRlW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfYnJlZzI4IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19hZ2dyZWdhdGUgMQorKyNlbmRpZgorKworK3N0YXRpYyBpbnQKKytwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwLCBpbnQgcGE2NCkKKyt7CisrICBEd2FyZl9Xb3JkIHJlZ3NpemUgPSBwYTY0ID8gOCA6IDQ7CisrCisrICAvKiBTdGFydCB3aXRoIHRoZSBmdW5jdGlvbidzIHR5cGUsIGFuZCBnZXQgdGhlIERXX0FUX3R5cGUgYXR0cmlidXRlLAorKyAgICAgd2hpY2ggaXMgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZS4gICovCisrCisrICBEd2FyZl9BdHRyaWJ1dGUgYXR0cl9tZW07CisrICBEd2FyZl9BdHRyaWJ1dGUgKmF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAoZnVuY3R5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrICBpZiAoYXR0ciA9PSBOVUxMKQorKyAgICAvKiBUaGUgZnVuY3Rpb24gaGFzIG5vIHJldHVybiB2YWx1ZSwgbGlrZSBhIGB2b2lkJyBmdW5jdGlvbiBpbiBDLiAgKi8KKysgICAgcmV0dXJuIDA7CisrCisrICBEd2FyZl9EaWUgZGllX21lbTsKKysgIER3YXJmX0RpZSAqdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrICBpbnQgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysKKysgIC8qIEZvbGxvdyB0eXBlZGVmcyBhbmQgcXVhbGlmaWVycyB0byBnZXQgdG8gdGhlIGFjdHVhbCB0eXBlLiAgKi8KKysgIHdoaWxlICh0YWcgPT0gRFdfVEFHX3R5cGVkZWYKKysJIHx8IHRhZyA9PSBEV19UQUdfY29uc3RfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3ZvbGF0aWxlX3R5cGUKKysJIHx8IHRhZyA9PSBEV19UQUdfcmVzdHJpY3RfdHlwZSkKKysgICAgeworKyAgICAgIGF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgICAgICB0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgICAgICB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKyAgICB9CisrCisrICBzd2l0Y2ggKHRhZykKKysgICAgeworKyAgICBjYXNlIC0xOgorKyAgICAgIHJldHVybiAtMTsKKysKKysgICAgY2FzZSBEV19UQUdfc3VicmFuZ2VfdHlwZToKKysgICAgICBpZiAoISBkd2FyZl9oYXNhdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplKSkKKysJeworKwkgIGF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysJICB0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysJICB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKwl9CisrICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKysKKysgICAgY2FzZSBEV19UQUdfYmFzZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19lbnVtZXJhdGlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19wb2ludGVyX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZToKKysgICAgICB7CisrICAgICAgICBEd2FyZl9Xb3JkIHNpemU7CisrCWlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUsCisrCQkJCQkgJmF0dHJfbWVtKSwgJnNpemUpICE9IDApCisrCSAgeworKwkgICAgaWYgKHRhZyA9PSBEV19UQUdfcG9pbnRlcl90eXBlIHx8IHRhZyA9PSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlKQorKwkgICAgICBzaXplID0gNDsKKysJICAgIGVsc2UKKysJICAgICAgcmV0dXJuIC0xOworKwkgIH0KKysJaWYgKHRhZyA9PSBEV19UQUdfYmFzZV90eXBlKQorKwkgIHsKKysJICAgIER3YXJmX1dvcmQgZW5jb2Rpbmc7CisrCSAgICBpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfZW5jb2RpbmcsCisrCQkJCQkgICAgICZhdHRyX21lbSksICZlbmNvZGluZykgIT0gMCkKKysJICAgICAgcmV0dXJuIC0xOworKworKwkgICAgaWYgKGVuY29kaW5nID09IERXX0FURV9mbG9hdCkKKysJICAgICAgeworKwkJaWYgKHBhNjQpIHsKKysJCSAgKmxvY3AgPSBsb2NfZnByZWc7CisrCQkgIGlmIChzaXplIDw9IDgpCisrCQkgICAgICByZXR1cm4gbmxvY19mcHJlZzsKKysJCX0KKysJCWVsc2UgeworKwkJICAqbG9jcCA9IGxvY19mcHJlZzMyOworKwkJICBpZiAoc2l6ZSA8PSA0KQorKwkJICAgIHJldHVybiBubG9jX2ZwcmVnMzI7CisrCQkgIGVsc2UgaWYgKHNpemUgPD0gOCkKKysJCSAgICByZXR1cm4gbmxvY19mcHJlZ3BhaXIzMjsKKysJCX0KKysJCWdvdG8gYWdncmVnYXRlOworKwkgICAgICB9CisrCSAgfQorKwlpZiAocGE2NCkKKysJICAqbG9jcCA9IGxvY19pbnRyZWc7CisrCWVsc2UKKysJICAqbG9jcCA9IGxvY19pbnRyZWczMjsKKysJaWYgKHNpemUgPD0gcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWc7CisrCWlmIChzaXplIDw9IDIgKiByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZ3BhaXI7CisrCisrCS8qIEVsc2UgZmFsbCB0aHJvdWdoLiAgKi8KKysgICAgICB9CisrCisrICAgIGNhc2UgRFdfVEFHX3N0cnVjdHVyZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19jbGFzc190eXBlOgorKyAgICBjYXNlIERXX1RBR191bmlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19hcnJheV90eXBlOgorKyAgICBhZ2dyZWdhdGU6IHsKKysgICAgICAgIER3YXJmX1dvcmQgc2l6ZTsKKysJaWYgKGR3YXJmX2FnZ3JlZ2F0ZV9zaXplICh0eXBlZGllLCAmc2l6ZSkgIT0gMCkKKysJICByZXR1cm4gLTE7CisrCWlmIChwYTY0KQorKyAgICAgICAgICAqbG9jcCA9IGxvY19pbnRyZWc7CisrCWVsc2UKKysJICAqbG9jcCA9IGxvY19pbnRyZWczMjsKKysgICAgICAgIGlmIChzaXplIDw9IHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVnOworKyAgICAgICAgaWYgKHNpemUgPD0gMiAqIHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVncGFpcjsKKysjaWYgMAorKwkvKiB0aGVyZSBzaG91bGQgYmUgc29tZSB3YXkgdG8ga25vdyB0aGlzIGxvY2F0aW9uLi4uIEJ1dCBJIGRvIG5vdCBzZWUgaXQuICovCisrICAgICAgICAqbG9jcCA9IGxvY19hZ2dyZWdhdGU7CisrICAgICAgICByZXR1cm4gbmxvY19hZ2dyZWdhdGU7CisrI2VuZGlmCisrCS8qIGZhbGwgdGhyb3VnaC4gICovCisrICAgICAgfQorKyAgICB9CisrCisrICAvKiBYWFggV2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIHJldHVybiBzcGVjaWZpYyBlcnJvcnMgZnJvbSBlYmwgY2FsbHMuCisrICAgICBUaGlzIHZhbHVlIG1lYW5zIHdlIGRvIG5vdCB1bmRlcnN0YW5kIHRoZSB0eXBlLCBidXQgaXQgaXMgd2VsbC1mb3JtZWQKKysgICAgIERXQVJGIGFuZCBtaWdodCBiZSB2YWxpZC4gICovCisrICByZXR1cm4gLTI7CisrfQorKworK2ludAorK3BhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fMzIgKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICByZXR1cm4gcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKGZ1bmN0eXBlZGllLCBsb2NwLCAwKTsKKyt9CisrCisraW50CisrcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl82NCAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgIHJldHVybiBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoZnVuY3R5cGVkaWUsIGxvY3AsIDEpOworK30KKysKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2Nfc3ltYm9sLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2Nfc3ltYm9sLmMJMjAxNC0wNC0yMSAxMToxMjoxMi4yMjgxNTAyODAgKzAwMDAKK0BAIC0wLDAgKzEsMTEyIEBACisrLyogUEEtUklTQyBzcGVjaWZpYyBzeW1ib2xpYyBuYW1lIGhhbmRsaW5nLgorKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAyLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGVsZi5oPgorKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQJCXBhcmlzY18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworK2NvbnN0IGNoYXIgKgorK3BhcmlzY19zZWdtZW50X3R5cGVfbmFtZSAoaW50IHNlZ21lbnQsIGNoYXIgKmJ1ZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkJc2l6ZV90IGxlbiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCisreworKyAgc3dpdGNoIChzZWdtZW50KQorKyAgICB7CisrICAgIGNhc2UgUFRfUEFSSVNDX0FSQ0hFWFQ6CisrICAgICAgcmV0dXJuICJQQVJJU0NfQVJDSEVYVCI7CisrICAgIGNhc2UgUFRfUEFSSVNDX1VOV0lORDoKKysgICAgICByZXR1cm4gIlBBUklTQ19VTldJTkQiOworKyAgICBkZWZhdWx0OgorKyAgICAgIGJyZWFrOworKyAgICB9CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrLyogUmV0dXJuIHN5bWJvbGljIHJlcHJlc2VudGF0aW9uIG9mIHN5bWJvbCB0eXBlLiAgKi8KKytjb25zdCBjaGFyICoKKytwYXJpc2Nfc3ltYm9sX3R5cGVfbmFtZShpbnQgc3ltYm9sLCBjaGFyICpidWYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKyAgICBzaXplX3QgbGVuIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKKyt7CisrCWlmIChzeW1ib2wgPT0gU1RUX1BBUklTQ19NSUxMSUNPREUpCisrCSAgcmV0dXJuICJQQVJJU0NfTUlMTEkiOworKwlyZXR1cm4gTlVMTDsKKyt9CisrCisrLyogUmV0dXJuIHN5bWJvbGljIHJlcHJlc2VudGF0aW9uIG9mIHNlY3Rpb24gdHlwZS4gICovCisrY29uc3QgY2hhciAqCisrcGFyaXNjX3NlY3Rpb25fdHlwZV9uYW1lIChpbnQgdHlwZSwKKysJCQljaGFyICpidWYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKwkJCXNpemVfdCBsZW4gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQorK3sKKysgIHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICBjYXNlIFNIVF9QQVJJU0NfRVhUOgorKyAgICAgIHJldHVybiAiUEFSSVNDX0VYVCI7CisrICAgIGNhc2UgU0hUX1BBUklTQ19VTldJTkQ6CisrICAgICAgcmV0dXJuICJQQVJJU0NfVU5XSU5EIjsKKysgICAgY2FzZSBTSFRfUEFSSVNDX0RPQzoKKysgICAgICByZXR1cm4gIlBBUklTQ19ET0MiOworKyAgICB9CisrCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrLyogQ2hlY2sgd2hldGhlciBtYWNoaW5lIGZsYWdzIGFyZSB2YWxpZC4gICovCisrYm9vbAorK3BhcmlzY19tYWNoaW5lX2ZsYWdfY2hlY2sgKEdFbGZfV29yZCBmbGFncykKKyt7CisrICBpZiAoZmxhZ3MgJn4gKEVGX1BBUklTQ19UUkFQTklMIHwgRUZfUEFSSVNDX0VYVCB8IEVGX1BBUklTQ19MU0IgfAorKwlFRl9QQVJJU0NfV0lERSB8IEVGX1BBUklTQ19OT19LQUJQIHwKKysJRUZfUEFSSVNDX0xBWllTV0FQIHwgRUZfUEFSSVNDX0FSQ0gpKQorKyAgICByZXR1cm4gMDsKKysKKysgIEdFbGZfV29yZCBhcmNoID0gZmxhZ3MgJiBFRl9QQVJJU0NfQVJDSDsKKysKKysgIHJldHVybiAoKGFyY2ggPT0gRUZBX1BBUklTQ18xXzApIHx8IChhcmNoID09IEVGQV9QQVJJU0NfMV8xKSB8fAorKyAgICAgIChhcmNoID09IEVGQV9QQVJJU0NfMl8wKSk7CisrfQorKworKy8qIENoZWNrIGZvciB0aGUgc2ltcGxlIHJlbG9jIHR5cGVzLiAgKi8KKytFbGZfVHlwZQorK3BhcmlzY19yZWxvY19zaW1wbGVfdHlwZSAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQgdHlwZSkKKyt7CisrICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBSX1BBUklTQ19ESVI2NDoKKysgICAgY2FzZSBSX1BBUklTQ19TRUNSRUw2NDoKKysgICAgICByZXR1cm4gRUxGX1RfWFdPUkQ7CisrICAgIGNhc2UgUl9QQVJJU0NfRElSMzI6CisrICAgIGNhc2UgUl9QQVJJU0NfU0VDUkVMMzI6CisrICAgICAgcmV0dXJuIEVMRl9UX1dPUkQ7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEVMRl9UX05VTTsKKysgICAgfQorK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9saWJlYmxfcGFyaXNjLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9saWJlYmxfcGFyaXNjLmgJMjAxNC0wNC0yMSAxMToxMjoxMi4yMjgxNTAyODAgKzAwMDAKK0BAIC0wLDAgKzEsOSBAQAorKyNpZm5kZWYgX0xJQkVCTF9IUFBBX0gKKysjZGVmaW5lIF9MSUJFQkxfSFBQQV9IIDEKKysKKysjaW5jbHVkZSA8bGliZHcuaD4KKysKKytleHRlcm4gaW50IHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fMzIoRHdhcmZfRGllICosIGNvbnN0IER3YXJmX09wICoqbG9jcCk7CisrZXh0ZXJuIGludCBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzY0KER3YXJmX0RpZSAqLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApOworKworKyNlbmRpZgorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTgub3JpZy9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDE0LTA0LTIxIDExOjEyOjEyLjI1MjE0OTczNyArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTQtMDQtMjEgMTE6MTM6MTEuOTEwODAxMTA1ICswMDAwCitAQCAtMzMsMTEgKzMzLDEyIEBACisgCisgCisgbW9kdWxlcyA9IGkzODYgc2ggeDg2XzY0IGlhNjQgYWxwaGEgYXJtIGFhcmNoNjQgc3BhcmMgcHBjIHBwYzY0IHMzOTAgXAorLQkgIHRpbGVneAorKwkgIHRpbGVneCBwYXJpc2MKKyBsaWJlYmxfcGljID0gbGliZWJsX2kzODZfcGljLmEgbGliZWJsX3NoX3BpYy5hIGxpYmVibF94ODZfNjRfcGljLmEgICAgXAorIAkgICAgIGxpYmVibF9pYTY0X3BpYy5hIGxpYmVibF9hbHBoYV9waWMuYSBsaWJlYmxfYXJtX3BpYy5hICAgIFwKKyAJICAgICBsaWJlYmxfYWFyY2g2NF9waWMuYSBsaWJlYmxfc3BhcmNfcGljLmEgbGliZWJsX3BwY19waWMuYSBcCistCSAgICAgbGliZWJsX3BwYzY0X3BpYy5hIGxpYmVibF9zMzkwX3BpYy5hIGxpYmVibF90aWxlZ3hfcGljLmEKKysJICAgICBsaWJlYmxfcHBjNjRfcGljLmEgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3RpbGVneF9waWMuYSBcCisrCSAgICAgbGliZWJsX3BhcmlzY19waWMuYQorIG5vaW5zdF9MSUJSQVJJRVMgPSAkKGxpYmVibF9waWMpCisgbm9pbnN0X0RBVEEgPSAkKGxpYmVibF9waWM6X3BpYy5hPS5zbykKKyAKK0BAIC0xMTYsNiArMTE3LDkgQEAKKyBsaWJlYmxfdGlsZWd4X3BpY19hX1NPVVJDRVMgPSAkKHRpbGVneF9TUkNTKQorIGFtX2xpYmVibF90aWxlZ3hfcGljX2FfT0JKRUNUUyA9ICQodGlsZWd4X1NSQ1M6LmM9Lm9zKQorIAorK3BhcmlzY19TUkNTID0gcGFyaXNjX2luaXQuYyBwYXJpc2Nfc3ltYm9sLmMgcGFyaXNjX3JlZ3MuYyBwYXJpc2NfcmV0dmFsLmMKKytsaWJlYmxfcGFyaXNjX3BpY19hX1NPVVJDRVMgPSAkKHBhcmlzY19TUkNTKQorK2FtX2xpYmVibF9wYXJpc2NfcGljX2FfT0JKRUNUUyA9ICQocGFyaXNjX1NSQ1M6LmM9Lm9zKQorIAorIGxpYmVibF8lLnNvIGxpYmVibF8lLm1hcDogbGliZWJsXyVfcGljLmEgJChsaWJlbGYpICQobGliZHcpCisgCUBybSAtZiAkKEA6LnNvPS5tYXApCitJbmRleDogZWxmdXRpbHMtMC4xNTgvbGliZWxmL2VsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTgub3JpZy9saWJlbGYvZWxmLmgJMjAxNC0wNC0yMSAxMToxMjoxMi4yNTIxNDk3MzcgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9saWJlbGYvZWxmLmgJMjAxNC0wNC0yMSAxMToxMjoxMi4yMjgxNTAyODAgKzAwMDAKK0BAIC0xODE0LDE2ICsxODE0LDI0IEBACisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE3RgkxMgkvKiAxNyBiaXRzIG9mIHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE0UgkxNAkvKiBSaWdodCAxNCBiaXRzIG9mIHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19EUFJFTDIxTAkxOAkvKiBMZWZ0IDIxIGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMTRXUgkxOQorKyNkZWZpbmUgUl9QQVJJU0NfRFBSRUwxNERSCTIwCisgI2RlZmluZSBSX1BBUklTQ19EUFJFTDE0UgkyMgkvKiBSaWdodCAxNCBiaXRzIG9mIHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19HUFJFTDIxTAkyNgkvKiBHUC1yZWxhdGl2ZSwgbGVmdCAyMSBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0dQUkVMMTRSCTMwCS8qIEdQLXJlbGF0aXZlLCByaWdodCAxNCBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMjFMCTM0CS8qIExULXJlbGF0aXZlLCBsZWZ0IDIxIGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNFIJMzgJLyogTFQtcmVsYXRpdmUsIHJpZ2h0IDE0IGJpdHMuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfRExUSU5EMTRGCTM5CisrI2RlZmluZSBSX1BBUklTQ19TRVRCQVNFCTQwCisgI2RlZmluZSBSX1BBUklTQ19TRUNSRUwzMgk0MQkvKiAzMiBiaXRzIHNlY3Rpb24gcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwyMUwJNDIKKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwxN1IJNDMKKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwxNFIJNDYKKyAjZGVmaW5lIFJfUEFSSVNDX1NFR0JBU0UJNDgJLyogTm8gcmVsb2NhdGlvbiwgc2V0IHNlZ21lbnQgYmFzZS4gICovCisgI2RlZmluZSBSX1BBUklTQ19TRUdSRUwzMgk0OQkvKiAzMiBiaXRzIHNlZ21lbnQgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjIxTAk1MAkvKiBQTFQgcmVsLiBhZGRyZXNzLCBsZWZ0IDIxIGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTRSCTU0CS8qIFBMVCByZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTRGCTU1CisgI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMzIJNTcJLyogMzIgYml0cyBMVC1yZWwuIGZ1bmN0aW9uIHBvaW50ZXIuICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMjFMCTU4CS8qIExULXJlbC4gZmN0IHB0ciwgbGVmdCAyMSBiaXRzLiAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfRlBUUjE0Ugk2MgkvKiBMVC1yZWwuIGZjdCBwdHIsIHJpZ2h0IDE0IGJpdHMuICovCitAQCAtMTgzMiw2ICsxODQwLDcgQEAKKyAjZGVmaW5lIFJfUEFSSVNDX1BMQUJFTDIxTAk2NgkvKiBMZWZ0IDIxIGJpdHMgb2YgZmRlc2MgYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTEFCRUwxNFIJNzAJLyogUmlnaHQgMTQgYml0cyBvZiBmZGVzYyBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMNjQJNzIJLyogNjQgYml0cyBQQy1yZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfUENSRUwyMkMJNzMKKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMjJGCTc0CS8qIDIyIGJpdHMgUEMtcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTRXUgk3NQkvKiBQQy1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNERSCTc2CS8qIFBDIHJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCitAQCAtMTg1Nyw2ICsxODY2LDggQEAKKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMTZXRgkxMDIJLyogMTYgYml0cyBMVC1yZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNkRGCTEwMwkvKiAxNiBiaXRzIExULXJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19TRUNSRUw2NAkxMDQJLyogNjQgYml0cyBzZWN0aW9uIHJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19CQVNFUkVMMTRXUgkxMDcKKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwxNERSCTEwOAorICNkZWZpbmUgUl9QQVJJU0NfU0VHUkVMNjQJMTEyCS8qIDY0IGJpdHMgc2VnbWVudCByZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTRXUgkxMTUJLyogUExULXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNERSCTExNgkvKiBQTFQtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL202OGtfYmFja2VuZC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvbTY4a19iYWNrZW5kLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViNTY2ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL202OGtfYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsNDkzIEBACitGcm9tOiBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CitGcm9tOiBUaG9yc3RlbiBHbGFzZXIgPHRnQG1pcmJzZC5kZT4KK1N1YmplY3Q6IG02OGsgc3VwcG9ydAorCitXcml0dGVuIGJ5IEt1cnQgUm9lY2t4LCBleGNlcHQgZm9yIHRoZSByZXR2YWwgc3VwcG9ydCB3aGljaCB3YXMgd3JpdHRlbgorYnkgVGhvcnN0ZW4gR2xhc2VyCisKKworSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfaW5pdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19pbml0LmMJMjAxNC0wNC0yMSAxMToxNDoyMy44MTMxNzU3MDQgKzAwMDAKK0BAIC0wLDAgKzEsNTAgQEAKKysvKiBJbml0aWFsaXphdGlvbiBvZiBtNjhrIHNwZWNpZmljIGJhY2tlbmQgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFRoaXMgc29mdGFyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2RlZmluZSBCQUNLRU5ECQltNjhrXworKyNkZWZpbmUgUkVMT0NfUFJFRklYCVJfNjhLXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gbTY4a19yZWxvYy5kZWYuICAqLworKyNpbmNsdWRlICJjb21tb24tcmVsb2MuYyIKKysKKysKKytjb25zdCBjaGFyICoKKyttNjhrX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorKyAgICAgRWxmICplbGYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgRWJsICplaDsKKysgICAgIHNpemVfdCBlaGxlbjsKKyt7CisrICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKysgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICAvKiBXZSBoYW5kbGUgaXQuICAqLworKyAgZWgtPm5hbWUgPSAibTY4ayI7CisrICBtNjhrX2luaXRfcmVsb2MgKGVoKTsKKysgIEhPT0sgKGVoLCByZWxvY19zaW1wbGVfdHlwZSk7CisrICBIT09LIChlaCwgcmV0dXJuX3ZhbHVlX2xvY2F0aW9uKTsKKysgIEhPT0sgKGVoLCByZWdpc3Rlcl9pbmZvKTsKKysKKysgIHJldHVybiBNT0RWRVJTSU9OOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX3JlZ3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfcmVncy5jCTIwMTQtMDQtMjEgMTE6MTQ6MjMuODEzMTc1NzA0ICswMDAwCitAQCAtMCwwICsxLDEwNiBAQAorKy8qIFJlZ2lzdGVyIG5hbWVzIGFuZCBudW1iZXJzIGZvciBtNjhrIERXQVJGLgorKyAgIENvcHlyaWdodCAoQykgMjAwNyBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKworKyNkZWZpbmUgQkFDS0VORCBtNjhrXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrc3NpemVfdAorK202OGtfcmVnaXN0ZXJfaW5mbyAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKwkJICAgaW50IHJlZ25vLCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKKysJCSAgIGNvbnN0IGNoYXIgKipwcmVmaXgsIGNvbnN0IGNoYXIgKipzZXRuYW1lLAorKwkJICAgaW50ICpiaXRzLCBpbnQgKnR5cGUpCisreworKwlpZiAobmFtZSA9PSBOVUxMKQorKwkJcmV0dXJuIDI1OworKworKwlpZiAocmVnbm8gPCAwIHx8IHJlZ25vID4gMjQgfHwgbmFtZWxlbiA8IDUpCisrCQlyZXR1cm4gLTE7CisrCisrCSpwcmVmaXggPSAiJSI7CisrCSpiaXRzID0gMzI7CisrCSp0eXBlID0gKHJlZ25vIDwgOCA/IERXX0FURV9zaWduZWQKKysJCTogcmVnbm8gPCAxNiA/IERXX0FURV9hZGRyZXNzIDogRFdfQVRFX2Zsb2F0KTsKKysKKysJaWYgKHJlZ25vIDwgOCkKKysJeworKwkJKnNldG5hbWUgPSAiaW50ZWdlciI7CisrCX0KKysJZWxzZSBpZiAocmVnbm8gPCAxNikKKysJeworKwkJKnNldG5hbWUgPSAiYWRkcmVzcyI7CisrCX0KKysJZWxzZSBpZiAocmVnbm8gPCAyNCkKKysJeworKwkJKnNldG5hbWUgPSAiRlBVIjsKKysJfQorKwllbHNlCisrCXsKKysJCSpzZXRuYW1lID0gImFkZHJlc3MiOworKwkJKnR5cGUgPSBEV19BVEVfYWRkcmVzczsKKysJfQorKworKwlzd2l0Y2ggKHJlZ25vKQorKwl7CisrCWNhc2UgMCAuLi4gNzoKKysJCW5hbWVbMF0gPSAnZCc7CisrCQluYW1lWzFdID0gcmVnbm8gKyAnMCc7CisrCQluYW1lbGVuID0gMjsKKysJCWJyZWFrOworKworKwljYXNlIDggLi4uIDEzOgorKwkJbmFtZVswXSA9ICdhJzsKKysJCW5hbWVbMV0gPSByZWdubyAtIDggKyAnMCc7CisrCQluYW1lbGVuID0gMjsKKysJCWJyZWFrOworKworKwljYXNlIDE0OgorKwkJbmFtZVswXSA9ICdmJzsKKysJCW5hbWVbMV0gPSAncCc7CisrICAgCQluYW1lbGVuID0gMjsKKysJCWJyZWFrOworKworKwljYXNlIDE1OgorKwkJbmFtZVswXSA9ICdzJzsKKysJCW5hbWVbMV0gPSAncCc7CisrICAgCQluYW1lbGVuID0gMjsKKysJCWJyZWFrOworKworKwljYXNlIDE2IC4uLiAyMzoKKysJCW5hbWVbMF0gPSAnZic7CisrCQluYW1lWzFdID0gJ3AnOworKwkJbmFtZVsyXSA9IHJlZ25vIC0gMTYgKyAnMCc7CisrICAgCQluYW1lbGVuID0gMzsKKysJCWJyZWFrOworKworKwljYXNlIDI0OgorKwkJbmFtZVswXSA9ICdwJzsKKysJCW5hbWVbMV0gPSAnYyc7CisrCQluYW1lbGVuID0gMjsKKysJfQorKworKwluYW1lW25hbWVsZW4rK10gPSAnXDAnOworKwlyZXR1cm4gbmFtZWxlbjsKKyt9CisrCitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19yZWxvYy5kZWYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX3JlbG9jLmRlZgkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorQEAgLTAsMCArMSw0NSBAQAorKy8qIExpc3QgdGhlIHJlbG9jYXRpb24gdHlwZXMgZm9yIG02OGsuICAtKi0gQyAtKi0KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKyovCisrCisrLyogCSAgICBOQU1FLAkJUkVMfEVYRUN8RFlOCSovCisrCisrUkVMT0NfVFlQRSAoTk9ORSwJCTApCisrUkVMT0NfVFlQRSAoMzIsCQkJUkVMfEVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKDE2LAkJCVJFTCkKKytSRUxPQ19UWVBFICg4LAkJCVJFTCkKKytSRUxPQ19UWVBFIChQQzMyLAkJUkVMfEVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKFBDMTYsCQlSRUwpCisrUkVMT0NfVFlQRSAoUEM4LAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDE2LAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDgsCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UMzJPLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDE2TywJCVJFTCkKKytSRUxPQ19UWVBFIChHT1Q4TywJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQxNiwJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQ4LAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDMyTywJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQxNk8sCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUOE8sCQlSRUwpCisrUkVMT0NfVFlQRSAoQ09QWSwJCUVYRUMpCisrUkVMT0NfVFlQRSAoR0xPQl9EQVQsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChKTVBfU0xPVCwJCUVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKFJFTEFUSVZFLAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoR05VX1ZUSU5IRVJJVCwJUkVMKQorK1JFTE9DX1RZUEUgKEdOVV9WVEVOVFJZLAlSRUwpCisrCitJbmRleDogZWxmdXRpbHMtMC4xNTgvbGliZWxmL2VsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTgub3JpZy9saWJlbGYvZWxmLmgJMjAxNC0wNC0yMSAxMToxNDoyMy44MTMxNzU3MDQgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9saWJlbGYvZWxmLmgJMjAxNC0wNC0yMSAxMToxNDoyMy44MTMxNzU3MDQgKzAwMDAKK0BAIC0xMTU3LDYgKzExNTcsOSBAQAorICNkZWZpbmUgUl82OEtfR0xPQl9EQVQJMjAJCS8qIENyZWF0ZSBHT1QgZW50cnkgKi8KKyAjZGVmaW5lIFJfNjhLX0pNUF9TTE9UCTIxCQkvKiBDcmVhdGUgUExUIGVudHJ5ICovCisgI2RlZmluZSBSXzY4S19SRUxBVElWRQkyMgkJLyogQWRqdXN0IGJ5IHByb2dyYW0gYmFzZSAqLworKy8qIFRoZSBuZXh0IDIgYXJlIEdOVSBleHRlbnNpb25zIHRvIGVuYWJsZSBDKysgdnRhYmxlIGdhcmJhZ2UgY29sbGVjdGlvbi4gICovCisrI2RlZmluZSBSXzY4S19HTlVfVlRJTkhFUklUIDIzCisrI2RlZmluZSBSXzY4S19HTlVfVlRFTlRSWSAgIDI0CisgI2RlZmluZSBSXzY4S19UTFNfR0QzMiAgICAgIDI1ICAgICAgICAgIC8qIDMyIGJpdCBHT1Qgb2Zmc2V0IGZvciBHRCAqLworICNkZWZpbmUgUl82OEtfVExTX0dEMTYgICAgICAyNiAgICAgICAgICAvKiAxNiBiaXQgR09UIG9mZnNldCBmb3IgR0QgKi8KKyAjZGVmaW5lIFJfNjhLX1RMU19HRDggICAgICAgMjcgICAgICAgICAgLyogOCBiaXQgR09UIG9mZnNldCBmb3IgR0QgKi8KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU4Lm9yaWcvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxNC0wNC0yMSAxMToxNDoyMy44MTMxNzU3MDQgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDE0LTA0LTIxIDExOjE0OjQ4LjM0NDYyMTE2NyArMDAwMAorQEAgLTMzLDEyICszMywxMiBAQAorIAorIAorIG1vZHVsZXMgPSBpMzg2IHNoIHg4Nl82NCBpYTY0IGFscGhhIGFybSBhYXJjaDY0IHNwYXJjIHBwYyBwcGM2NCBzMzkwIFwKKy0JICB0aWxlZ3ggcGFyaXNjIG1pcHMKKysJICB0aWxlZ3ggcGFyaXNjIG1pcHMgbTY4aworIGxpYmVibF9waWMgPSBsaWJlYmxfaTM4Nl9waWMuYSBsaWJlYmxfc2hfcGljLmEgbGliZWJsX3g4Nl82NF9waWMuYSAgICBcCisgCSAgICAgbGliZWJsX2lhNjRfcGljLmEgbGliZWJsX2FscGhhX3BpYy5hIGxpYmVibF9hcm1fcGljLmEgICAgXAorIAkgICAgIGxpYmVibF9hYXJjaDY0X3BpYy5hIGxpYmVibF9zcGFyY19waWMuYSBsaWJlYmxfcHBjX3BpYy5hIFwKKyAJICAgICBsaWJlYmxfcHBjNjRfcGljLmEgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3RpbGVneF9waWMuYSBcCistCSAgICAgbGliZWJsX3BhcmlzY19waWMuYSBsaWJlYmxfbWlwc19waWMuYQorKwkgICAgIGxpYmVibF9wYXJpc2NfcGljLmEgbGliZWJsX21pcHNfcGljLmEgbGliZWJsX202OGtfcGljLmEKKyBub2luc3RfTElCUkFSSUVTID0gJChsaWJlYmxfcGljKQorIG5vaW5zdF9EQVRBID0gJChsaWJlYmxfcGljOl9waWMuYT0uc28pCisgCitAQCAtMTI1LDYgKzEyNSwxMCBAQAorIGxpYmVibF9taXBzX3BpY19hX1NPVVJDRVMgPSAkKG1pcHNfU1JDUykKKyBhbV9saWJlYmxfbWlwc19waWNfYV9PQkpFQ1RTID0gJChtaXBzX1NSQ1M6LmM9Lm9zKQorIAorK202OGtfU1JDUyA9IG02OGtfaW5pdC5jIG02OGtfc3ltYm9sLmMgbTY4a19yZWdzLmMgbTY4a19yZXR2YWwuYworK2xpYmVibF9tNjhrX3BpY19hX1NPVVJDRVMgPSAkKG02OGtfU1JDUykKKythbV9saWJlYmxfbTY4a19waWNfYV9PQkpFQ1RTID0gJChtNjhrX1NSQ1M6LmM9Lm9zKQorKworIGxpYmVibF8lLnNvIGxpYmVibF8lLm1hcDogbGliZWJsXyVfcGljLmEgJChsaWJlbGYpICQobGliZHcpCisgCUBybSAtZiAkKEA6LnNvPS5tYXApCisgCWVjaG8gJ0VMRlVUSUxTXyQoUEFDS0FHRV9WRVJTSU9OKSB7IGdsb2JhbDogJCpfaW5pdDsgbG9jYWw6ICo7IH07JyBcCitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19zeW1ib2wuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfc3ltYm9sLmMJMjAxNC0wNC0yMSAxMToxNDoyMy44MTMxNzU3MDQgKzAwMDAKK0BAIC0wLDAgKzEsNDMgQEAKKysvKiBtNjhrIHNwZWNpZmljIHN5bWJvbGljIG5hbWUgaGFuZGxpbmcuCisrICAgQ29weXJpZ2h0IChDKSAyMDA3IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBUaGlzIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8ZWxmLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKyNkZWZpbmUgQkFDS0VORAkJbTY4a18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIENoZWNrIGZvciB0aGUgc2ltcGxlIHJlbG9jIHR5cGVzLiAgKi8KKytFbGZfVHlwZQorK202OGtfcmVsb2Nfc2ltcGxlX3R5cGUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50IHR5cGUpCisreworKyAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgIGNhc2UgUl82OEtfMzI6CisrICAgICAgcmV0dXJuIEVMRl9UX1NXT1JEOworKyAgICBjYXNlIFJfNjhLXzE2OgorKyAgICAgIHJldHVybiBFTEZfVF9IQUxGOworKyAgICBjYXNlIFJfNjhLXzg6CisrICAgICAgcmV0dXJuIEVMRl9UX0JZVEU7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEVMRl9UX05VTTsKKysgICAgfQorK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX3JldHZhbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19yZXR2YWwuYwkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorQEAgLTAsMCArMSwxNzIgQEAKKysvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgbG9jYXRpb24gZm9yIExpbnV4L202OGsgQUJJLgorKyAgIENvcHlyaWdodCAoQykgMjAwNS0yMDEwIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKGMpIDIwMTEgVGhvcnN0ZW4gR2xhc2VyLCBEZWJpYW4uCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgbTY4a18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKworKy8qICVkMCwgb3IgcGFpciAlZDAsICVkMSwgb3IgJWEwICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcwIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzEgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX3B0cnJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ludHJlZwkxCisrI2RlZmluZSBubG9jX2ludHJlZ3BhaXIJNAorKyNkZWZpbmUgbmxvY19wdHJyZWcJMQorKworKy8qICVmMCAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcxNiB9CisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZwkxCisrCisrLyogU3RydWN0dXJlcyBhcmUgYSBiaXQgbW9yZSBjb21wbGljYXRlZCAtIHNtYWxsIHN0cnVjdHVyZXMgYXJlIHJldHVybmVkCisrICAgaW4gJWQwIC8gJWQxICgtZnJlZy1zdHJ1Y3QtcmV0dXJuIHdoaWNoIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCksIGxhcmdlCisrICAgc3RydWN0dXJlcyB1c2UgJWExIChpbiBjb25zdHJhc3QgdG8gdGhlIFNZU1YgcHNBQkkgd2hpY2ggc2F5cyAlYTApIGFzCisrICAgcmVlbnRyYW50IHN0b3JhZ2Ugc3BhY2UgaW5kaWNhdG9yLiAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2FnZ3JlZ2F0ZVtdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX2JyZWc5LCAubnVtYmVyID0gMCB9CisrICB9OworKyNkZWZpbmUgbmxvY19hZ2dyZWdhdGUgMQorKworK2ludAorK202OGtfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgRHdhcmZfV29yZCBzaXplOworKworKyAgLyogU3RhcnQgd2l0aCB0aGUgZnVuY3Rpb24ncyB0eXBlLCBhbmQgZ2V0IHRoZSBEV19BVF90eXBlIGF0dHJpYnV0ZSwKKysgICAgIHdoaWNoIGlzIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUuICAqLworKworKyAgRHdhcmZfQXR0cmlidXRlIGF0dHJfbWVtOworKyAgRHdhcmZfQXR0cmlidXRlICphdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKGZ1bmN0eXBlZGllLCBEV19BVF90eXBlLAorKwkJCQkJCSZhdHRyX21lbSk7CisrICBpZiAoYXR0ciA9PSBOVUxMKQorKyAgICAvKiBUaGUgZnVuY3Rpb24gaGFzIG5vIHJldHVybiB2YWx1ZSwgbGlrZSBhIGB2b2lkJyBmdW5jdGlvbiBpbiBDLiAgKi8KKysgICAgcmV0dXJuIDA7CisrCisrICBEd2FyZl9EaWUgZGllX21lbTsKKysgIER3YXJmX0RpZSAqdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrICBpbnQgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysKKysgIC8qIEZvbGxvdyB0eXBlZGVmcyBhbmQgcXVhbGlmaWVycyB0byBnZXQgdG8gdGhlIGFjdHVhbCB0eXBlLiAgKi8KKysgIHdoaWxlICh0YWcgPT0gRFdfVEFHX3R5cGVkZWYKKysJIHx8IHRhZyA9PSBEV19UQUdfY29uc3RfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3ZvbGF0aWxlX3R5cGUKKysJIHx8IHRhZyA9PSBEV19UQUdfcmVzdHJpY3RfdHlwZSkKKysgICAgeworKyAgICAgIGF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgICAgICB0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgICAgICB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKyAgICB9CisrCisrICBzd2l0Y2ggKHRhZykKKysgICAgeworKyAgICBjYXNlIC0xOgorKyAgICAgIHJldHVybiAtMTsKKysKKysgICAgY2FzZSBEV19UQUdfc3VicmFuZ2VfdHlwZToKKysgICAgICBpZiAoISBkd2FyZl9oYXNhdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplKSkKKysJeworKwkgIGF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysJICB0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysJICB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKwl9CisrICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKysKKysgICAgY2FzZSBEV19UQUdfYmFzZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19lbnVtZXJhdGlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19wb2ludGVyX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZToKKysgICAgICBpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplLAorKwkJCQkJCSAmYXR0cl9tZW0pLCAmc2l6ZSkgIT0gMCkKKysJeworKwkgIGlmICh0YWcgPT0gRFdfVEFHX3BvaW50ZXJfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZSkKKysJICAgIHNpemUgPSA0OworKwkgIGVsc2UKKysJICAgIHJldHVybiAtMTsKKysJfQorKyAgICAgIGlmICh0YWcgPT0gRFdfVEFHX3BvaW50ZXJfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZSkKKysJeworKwkgICpsb2NwID0gbG9jX3B0cnJlZzsKKysgICAgICAgICAgcmV0dXJuIG5sb2NfcHRycmVnOworKwl9CisrICAgICAgaWYgKHRhZyA9PSBEV19UQUdfYmFzZV90eXBlKQorKwl7CisrCSAgRHdhcmZfV29yZCBlbmNvZGluZzsKKysJICBpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfZW5jb2RpbmcsCisrCQkJCQkJICAgICAmYXR0cl9tZW0pLAorKwkJCSAgICAgICAmZW5jb2RpbmcpICE9IDApCisrCSAgICByZXR1cm4gLTE7CisrCSAgaWYgKGVuY29kaW5nID09IERXX0FURV9mbG9hdCkKKysJICAgIHsKKysJICAgICAgLyogWFhYIHJlYWxseSAxMD8gKi8KKysgICAgICAgICAgICAgIGlmIChzaXplID4gMTApCisrICAgICAgICAgICAgICAgIHJldHVybiAtMjsKKysgICAgICAgICAgICAgICpsb2NwID0gbG9jX2ZwcmVnOworKyAgICAgICAgICAgICAgcmV0dXJuIG5sb2NfZnByZWc7CisrCSAgICB9CisrCX0KKysgICAgICBpZiAoc2l6ZSA8PSA4KQorKwl7CisrCWludHJlZzoKKysJICAvKiBYWFggY2hlY2sgZW5kaWFubmVzcyBvZiBkd29yZCBwYWlyLCBpbnQ2NCB2cyBhZ2dyZWdhdGUgKi8KKysJICAqbG9jcCA9IGxvY19pbnRyZWc7CisrCSAgcmV0dXJuIHNpemUgPD0gNCA/IG5sb2NfaW50cmVnIDogbmxvY19pbnRyZWdwYWlyOworKwl9CisrCisrICAgIGFnZ3JlZ2F0ZToKKysgICAgICAqbG9jcCA9IGxvY19hZ2dyZWdhdGU7CisrICAgICAgcmV0dXJuIG5sb2NfYWdncmVnYXRlOworKworKyAgICBjYXNlIERXX1RBR19zdHJ1Y3R1cmVfdHlwZToKKysgICAgY2FzZSBEV19UQUdfY2xhc3NfdHlwZToKKysgICAgY2FzZSBEV19UQUdfdW5pb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfYXJyYXlfdHlwZToKKysgICAgICBpZiAoZHdhcmZfYWdncmVnYXRlX3NpemUgKHR5cGVkaWUsICZzaXplKSA9PSAwCisrCSAgJiYgc2l6ZSA+IDAgJiYgc2l6ZSA8PSA4KQorKwkvKiBub3QgYWNjdXJhdGUgZm9yIGEgc3RydWN0IHdob3NlIG9ubHkgbWVtYmVyIGlzIGEgZmxvYXQgKi8KKysJZ290byBpbnRyZWc7CisrICAgICAgZ290byBhZ2dyZWdhdGU7CisrICAgIH0KKysKKysgIC8qIFhYWCBXZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9ycyBmcm9tIGVibCBjYWxscy4KKysgICAgIFRoaXMgdmFsdWUgbWVhbnMgd2UgZG8gbm90IHVuZGVyc3RhbmQgdGhlIHR5cGUsIGJ1dCBpdCBpcyB3ZWxsLWZvcm1lZAorKyAgICAgRFdBUkYgYW5kIG1pZ2h0IGJlIHZhbGlkLiAgKi8KKysgIHJldHVybiAtMjsKKyt9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9taXBzX2JhY2tlbmQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL21pcHNfYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3M2EzZjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9taXBzX2JhY2tlbmQuZGlmZgpAQCAtMCwwICsxLDcxMiBAQAorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfaW5pdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19pbml0LmMJMjAxNC0wNC0yMSAxMToxMzozNi45MTAyMzU5NjUgKzAwMDAKK0BAIC0wLDAgKzEsNjAgQEAKKysvKiBJbml0aWFsaXphdGlvbiBvZiBtaXBzIHNwZWNpZmljIGJhY2tlbmQgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjZGVmaW5lIEJBQ0tFTkQJCW1pcHNfCisrI2RlZmluZSBSRUxPQ19QUkVGSVgJUl9NSVBTXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gbWlwc19yZWxvYy5kZWYuICAqLworKyNpbmNsdWRlICJjb21tb24tcmVsb2MuYyIKKysKKytjb25zdCBjaGFyICoKKyttaXBzX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorKyAgICAgRWxmICplbGYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgRWJsICplaDsKKysgICAgIHNpemVfdCBlaGxlbjsKKyt7CisrICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKysgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICAvKiBXZSBoYW5kbGUgaXQuICAqLworKyAgaWYgKG1hY2hpbmUgPT0gRU1fTUlQUykKKysgICAgZWgtPm5hbWUgPSAiTUlQUyBSMzAwMCBiaWctZW5kaWFuIjsKKysgIGVsc2UgaWYgKG1hY2hpbmUgPT0gRU1fTUlQU19SUzNfTEUpCisrICAgIGVoLT5uYW1lID0gIk1JUFMgUjMwMDAgbGl0dGxlLWVuZGlhbiI7CisrCisrICBtaXBzX2luaXRfcmVsb2MgKGVoKTsKKysgIEhPT0sgKGVoLCByZWxvY19zaW1wbGVfdHlwZSk7CisrICBIT09LIChlaCwgcmV0dXJuX3ZhbHVlX2xvY2F0aW9uKTsKKysgIEhPT0sgKGVoLCByZWdpc3Rlcl9pbmZvKTsKKysKKysgIHJldHVybiBNT0RWRVJTSU9OOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX3JlZ3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfcmVncy5jCTIwMTQtMDQtMjEgMTE6MTM6MzYuOTEwMjM1OTY1ICswMDAwCitAQCAtMCwwICsxLDEwNCBAQAorKy8qIFJlZ2lzdGVyIG5hbWVzIGFuZCBudW1iZXJzIGZvciBNSVBTIERXQVJGLgorKyAgIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgbWlwc18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworK3NzaXplX3QKKyttaXBzX3JlZ2lzdGVyX2luZm8gKEVibCAqZWJsIF9fYXR0cmlidXRlX18oKHVudXNlZCkpLAorKwkJICAgIGludCByZWdubywgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCisrCQkgICAgY29uc3QgY2hhciAqKnByZWZpeCwgY29uc3QgY2hhciAqKnNldG5hbWUsCisrCQkgICAgaW50ICpiaXRzLCBpbnQgKnR5cGUpCisreworKyAgaWYgKG5hbWUgPT0gTlVMTCkKKysgICAgcmV0dXJuIDY2OworKworKyAgaWYgKHJlZ25vIDwgMCB8fCByZWdubyA+IDY1IHx8IG5hbWVsZW4gPCA0KQorKyAgICByZXR1cm4gLTE7CisrCisrICAqcHJlZml4ID0gIiQiOworKworKyAgaWYgKHJlZ25vIDwgMzIpCisrICAgIHsKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBpZiAocmVnbm8gPCAzMiArIDEwKQorKyAgICAgICAgeworKyAgICAgICAgICBuYW1lWzBdID0gcmVnbm8gKyAnMCc7CisrICAgICAgICAgIG5hbWVsZW4gPSAxOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgbmFtZVswXSA9IChyZWdubyAvIDEwKSArICcwJzsKKysgICAgICAgICAgbmFtZVsxXSA9IChyZWdubyAlIDEwKSArICcwJzsKKysgICAgICAgICAgbmFtZWxlbiA9IDI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKHJlZ25vIDwgNjQpCisrICAgIHsKKysgICAgICAqc2V0bmFtZSA9ICJGUFUiOworKyAgICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgbmFtZVswXSA9ICdmJzsKKysgICAgICBpZiAocmVnbm8gPCAzMiArIDEwKQorKwl7CisrCSAgbmFtZVsxXSA9IChyZWdubyAtIDMyKSArICcwJzsKKysJICBuYW1lbGVuID0gMjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIG5hbWVbMV0gPSAocmVnbm8gLSAzMikgLyAxMCArICcwJzsKKysJICBuYW1lWzJdID0gKHJlZ25vIC0gMzIpICUgMTAgKyAnMCc7CisrCSAgbmFtZWxlbiA9IDM7CisrCX0KKysgICAgfQorKyAgZWxzZSBpZiAocmVnbm8gPT0gNjQpCisrICAgIHsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBuYW1lWzBdID0gJ2gnOworKyAgICAgIG5hbWVbMV0gPSAnaSc7CisrICAgICAgbmFtZWxlbiA9IDI7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIG5hbWVbMF0gPSAnbCc7CisrICAgICAgbmFtZVsxXSA9ICdvJzsKKysgICAgICBuYW1lbGVuID0gMjsKKysgICAgfQorKworKyAgbmFtZVtuYW1lbGVuKytdID0gJ1wwJzsKKysgIHJldHVybiBuYW1lbGVuOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX3JlbG9jLmRlZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfcmVsb2MuZGVmCTIwMTQtMDQtMjEgMTE6MTM6MzYuOTEwMjM1OTY1ICswMDAwCitAQCAtMCwwICsxLDc5IEBACisrLyogTGlzdCB0aGUgcmVsb2NhdGlvbiB0eXBlcyBmb3IgbWlwcy4gIC0qLSBDIC0qLQorKyAgIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrLyogCSAgICBOQU1FLAkJUkVMfEVYRUN8RFlOCSovCisrCisrUkVMT0NfVFlQRSAoTk9ORSwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDE2LCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFICgzMiwgICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUkVMMzIsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDI2LCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChISTE2LCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoTE8xNiwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTYsICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChMSVRFUkFMLCAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UMTYsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFBDMTYsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChDQUxMMTYsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR1BSRUwzMiwgICAgICAgICAgICAwKQorKworK1JFTE9DX1RZUEUgKFNISUZUNSwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChTSElGVDYsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoNjQsICAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9ESVNQLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfUEFHRSwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX09GU1QsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9ISTE2LCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfTE8xNiwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoU1VCLCAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKElOU0VSVF9BLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChJTlNFUlRfQiwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoREVMRVRFLCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEhJR0hFUiwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChISUdIRVNULCAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoQ0FMTF9ISTE2LCAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKENBTExfTE8xNiwgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChTQ05fRElTUCwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUkVMMTYsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEFERF9JTU1FRElBVEUsICAgICAgMCkKKytSRUxPQ19UWVBFIChQSlVNUCwgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUkVMR09ULCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEpBTFIsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9EMzIsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUFJFTDMyLCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBNT0Q2NCwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMNjQsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0dELCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19MRE0sICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMX0hJMTYsICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUFJFTF9MTzE2LCAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19HT1RUUFJFTCwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUwzMiwgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX1RQUkVMNjQsICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19UUFJFTF9ISTE2LCAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUxfTE8xNiwgICAgIDApCisrCisrI2RlZmluZSBOT19DT1BZX1JFTE9DIDEKKysjZGVmaW5lIE5PX1JFTEFUSVZFX1JFTE9DIDEKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX3JldHZhbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19yZXR2YWwuYwkyMDE0LTA0LTIxIDExOjEzOjM2LjkxMDIzNTk2NSArMDAwMAorQEAgLTAsMCArMSwzMjEgQEAKKysvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgbG9jYXRpb24gZm9yIExpbnV4L21pcHMgQUJJLgorKyAgIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrI2luY2x1ZGUgPGVsZi5oPgorKworKyNpbmNsdWRlICIuLi9saWJlYmwvbGliZWJsUC5oIgorKyNpbmNsdWRlICIuLi9saWJkdy9saWJkd1AuaCIKKysKKysjZGVmaW5lIEJBQ0tFTkQgbWlwc18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIFRoZSBBQkkgb2YgdGhlIGZpbGUuICBBbHNvIHNlZSBFRl9NSVBTX0FCSTIgYWJvdmUuICovCisrI2RlZmluZSBFRl9NSVBTX0FCSQkJMHgwMDAwRjAwMAorKworKy8qIFRoZSBvcmlnaW5hbCBvMzIgYWJpLiAqLworKyNkZWZpbmUgRV9NSVBTX0FCSV9PMzIgICAgICAgICAgMHgwMDAwMTAwMAorKworKy8qIE8zMiBleHRlbmRlZCB0byB3b3JrIG9uIDY0IGJpdCBhcmNoaXRlY3R1cmVzICovCisrI2RlZmluZSBFX01JUFNfQUJJX082NCAgICAgICAgICAweDAwMDAyMDAwCisrCisrLyogRUFCSSBpbiAzMiBiaXQgbW9kZSAqLworKyNkZWZpbmUgRV9NSVBTX0FCSV9FQUJJMzIgICAgICAgMHgwMDAwMzAwMAorKworKy8qIEVBQkkgaW4gNjQgYml0IG1vZGUgKi8KKysjZGVmaW5lIEVfTUlQU19BQklfRUFCSTY0ICAgICAgIDB4MDAwMDQwMDAKKysKKysvKiBBbGwgdGhlIHBvc3NpYmxlIE1JUFMgQUJJcy4gKi8KKytlbnVtIG1pcHNfYWJpCisrICB7CisrICAgIE1JUFNfQUJJX1VOS05PV04gPSAwLAorKyAgICBNSVBTX0FCSV9OMzIsCisrICAgIE1JUFNfQUJJX08zMiwKKysgICAgTUlQU19BQklfTjY0LAorKyAgICBNSVBTX0FCSV9PNjQsCisrICAgIE1JUFNfQUJJX0VBQkkzMiwKKysgICAgTUlQU19BQklfRUFCSTY0LAorKyAgICBNSVBTX0FCSV9MQVNUCisrICB9OworKworKy8qIEZpbmQgdGhlIG1pcHMgQUJJIG9mIHRoZSBjdXJyZW50IGZpbGUgKi8KKytlbnVtIG1pcHNfYWJpIGZpbmRfbWlwc19hYmkoRWxmICplbGYpCisreworKyAgR0VsZl9FaGRyIGVoZHJfbWVtOworKyAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlbGYsICZlaGRyX21lbSk7CisrCisrICBpZiAoZWhkciA9PSBOVUxMKQorKyAgICByZXR1cm4gTUlQU19BQklfTEFTVDsKKysKKysgIEdFbGZfV29yZCBlbGZfZmxhZ3MgPSBlaGRyLT5lX2ZsYWdzOworKworKyAgLyogQ2hlY2sgZWxmX2ZsYWdzIHRvIHNlZSBpZiBpdCBzcGVjaWZpZXMgdGhlIEFCSSBiZWluZyB1c2VkLiAgKi8KKysgIHN3aXRjaCAoKGVsZl9mbGFncyAmIEVGX01JUFNfQUJJKSkKKysgICAgeworKyAgICBjYXNlIEVfTUlQU19BQklfTzMyOgorKyAgICAgIHJldHVybiBNSVBTX0FCSV9PMzI7CisrICAgIGNhc2UgRV9NSVBTX0FCSV9PNjQ6CisrICAgICAgcmV0dXJuIE1JUFNfQUJJX082NDsKKysgICAgY2FzZSBFX01JUFNfQUJJX0VBQkkzMjoKKysgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTMyOworKyAgICBjYXNlIEVfTUlQU19BQklfRUFCSTY0OgorKyAgICAgIHJldHVybiBNSVBTX0FCSV9FQUJJNjQ7CisrICAgIGRlZmF1bHQ6CisrICAgICAgaWYgKChlbGZfZmxhZ3MgJiBFRl9NSVBTX0FCSTIpKQorKwlyZXR1cm4gTUlQU19BQklfTjMyOworKyAgICB9CisrCisrICAvKiBHQ0MgY3JlYXRlcyBhIHBzZXVkby1zZWN0aW9uIHdob3NlIG5hbWUgZGVzY3JpYmVzIHRoZSBBQkkuICAqLworKyAgc2l6ZV90IHNoc3RybmR4OworKyAgaWYgKGVsZl9nZXRzaGRyc3RybmR4IChlbGYsICZzaHN0cm5keCkgPCAwKQorKyAgICByZXR1cm4gTUlQU19BQklfTEFTVDsKKysKKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrICBFbGZfU2NuICpzY24gPSBOVUxMOworKyAgd2hpbGUgKChzY24gPSBlbGZfbmV4dHNjbiAoZWxmLCBzY24pKSAhPSBOVUxMKQorKyAgICB7CisrICAgICAgR0VsZl9TaGRyIHNoZHJfbWVtOworKyAgICAgIEdFbGZfU2hkciAqc2hkciA9IGdlbGZfZ2V0c2hkciAoc2NuLCAmc2hkcl9tZW0pOworKyAgICAgIGlmIChzaGRyID09IE5VTEwpCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTEFTVDsKKysKKysgICAgICBuYW1lID0gZWxmX3N0cnB0ciAoZWxmLCBzaHN0cm5keCwgc2hkci0+c2hfbmFtZSkgPzogIiI7CisrICAgICAgaWYgKHN0cm5jbXAgKG5hbWUsICIubWRlYnVnLiIsIDgpICE9IDApCisrICAgICAgICBjb250aW51ZTsKKysKKysgICAgICBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmkzMiIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTzMyOworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpTjMyIikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9OMzI7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmk2NCIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTjY0OworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpTzY0IikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9PNjQ7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5lYWJpMzIiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX0VBQkkzMjsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmVhYmk2NCIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTY0OworKyAgICAgIGVsc2UKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9VTktOT1dOOworKyAgICB9CisrCisrICByZXR1cm4gTUlQU19BQklfVU5LTk9XTjsKKyt9CisrCisrdW5zaWduZWQgaW50CisrbWlwc19hYmlfcmVnc2l6ZSAoZW51bSBtaXBzX2FiaSBhYmkpCisreworKyAgc3dpdGNoIChhYmkpCisrICAgIHsKKysgICAgY2FzZSBNSVBTX0FCSV9FQUJJMzI6CisrICAgIGNhc2UgTUlQU19BQklfTzMyOgorKyAgICAgIHJldHVybiA0OworKyAgICBjYXNlIE1JUFNfQUJJX04zMjoKKysgICAgY2FzZSBNSVBTX0FCSV9ONjQ6CisrICAgIGNhc2UgTUlQU19BQklfTzY0OgorKyAgICBjYXNlIE1JUFNfQUJJX0VBQkk2NDoKKysgICAgICByZXR1cm4gODsKKysgICAgY2FzZSBNSVBTX0FCSV9VTktOT1dOOgorKyAgICBjYXNlIE1JUFNfQUJJX0xBU1Q6CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyt9CisrCisrCisrLyogJHYwIG9yIHBhaXIgJHYwLCAkdjEgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ19vMzJbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysKKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19pbnRyZWcJMQorKyNkZWZpbmUgbmxvY19pbnRyZWdwYWlyCTQKKysKKysvKiAkZjAgKGZsb2F0KSwgb3IgcGFpciAkZjAsICRmMSAoZG91YmxlKS4KKysgKiBmMi9mMyBhcmUgdXNlZCBmb3IgQ09NUExFWCAoPSAyIGRvdWJsZXMpIHJldHVybnMgaW4gRm9ydHJhbiAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdfbzMyW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDMyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzMyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzQgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDM1IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgIH07CisrCisrLyogJGYwLCBvciBwYWlyICRmMCwgJGYyLiAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDMyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzNCB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZyAgMQorKyNkZWZpbmUgbmxvY19mcHJlZ3BhaXIgNAorKyNkZWZpbmUgbmxvY19mcHJlZ3F1YWQgOAorKworKy8qIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3R1cmUgYW5kIGlzIGFjdHVhbGx5IHN0b3JlZCBpbiBzdGFjayBzcGFjZQorKyAgIHBhc3NlZCBpbiBhIGhpZGRlbiBhcmd1bWVudCBieSB0aGUgY2FsbGVyLiAgQnV0LCB0aGUgY29tcGlsZXIKKysgICBoZWxwZnVsbHkgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGF0IHNwYWNlIGluICR2MC4gICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19hZ2dyZWdhdGVbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9icmVnMiwgLm51bWJlciA9IDAgfQorKyAgfTsKKysjZGVmaW5lIG5sb2NfYWdncmVnYXRlIDEKKysKKytpbnQKKyttaXBzX3JldHVybl92YWx1ZV9sb2NhdGlvbiAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgIC8qIEZpcnN0IGZpbmQgdGhlIEFCSSB1c2VkIGJ5IHRoZSBlbGYgb2JqZWN0ICovCisrICBlbnVtIG1pcHNfYWJpIGFiaSA9IGZpbmRfbWlwc19hYmkoZnVuY3R5cGVkaWUtPmN1LT5kYmctPmVsZik7CisrCisrICAvKiBTb21ldGhpbmcgd2VudCBzZXJpb3VzbHkgd3Jvbmcgd2hpbGUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIEFCSSAqLworKyAgaWYgKGFiaSA9PSBNSVBTX0FCSV9MQVNUKQorKyAgICByZXR1cm4gLTE7CisrCisrICAvKiBXZSBjb3VsZG4ndCBpZGVudGlmeSB0aGUgQUJJLCBidXQgdGhlIGZpbGUgc2VlbXMgdmFsaWQgKi8KKysgIGlmIChhYmkgPT0gTUlQU19BQklfVU5LTk9XTikKKysgICAgcmV0dXJuIC0yOworKworKyAgLyogQ2FuJ3QgaGFuZGxlIEVBQkkgdmFyaWFudHMgKi8KKysgIGlmICgoYWJpID09IE1JUFNfQUJJX0VBQkkzMikgfHwgKGFiaSA9PSBNSVBTX0FCSV9FQUJJNjQpKQorKyAgICByZXR1cm4gLTI7CisrCisrICB1bnNpZ25lZCBpbnQgcmVnc2l6ZSA9IG1pcHNfYWJpX3JlZ3NpemUgKGFiaSk7CisrICBpZiAoIXJlZ3NpemUpCisrICAgIHJldHVybiAtMjsKKysKKysgIC8qIFN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uJ3MgdHlwZSwgYW5kIGdldCB0aGUgRFdfQVRfdHlwZSBhdHRyaWJ1dGUsCisrICAgICB3aGljaCBpcyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KKysKKysgIER3YXJmX0F0dHJpYnV0ZSBhdHRyX21lbTsKKysgIER3YXJmX0F0dHJpYnV0ZSAqYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlIChmdW5jdHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgIGlmIChhdHRyID09IE5VTEwpCisrICAgIC8qIFRoZSBmdW5jdGlvbiBoYXMgbm8gcmV0dXJuIHZhbHVlLCBsaWtlIGEgYHZvaWQnIGZ1bmN0aW9uIGluIEMuICAqLworKyAgICByZXR1cm4gMDsKKysKKysgIER3YXJmX0RpZSBkaWVfbWVtOworKyAgRHdhcmZfRGllICp0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgIGludCB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKworKyAgLyogRm9sbG93IHR5cGVkZWZzIGFuZCBxdWFsaWZpZXJzIHRvIGdldCB0byB0aGUgYWN0dWFsIHR5cGUuICAqLworKyAgd2hpbGUgKHRhZyA9PSBEV19UQUdfdHlwZWRlZgorKwkgfHwgdGFnID09IERXX1RBR19jb25zdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfdm9sYXRpbGVfdHlwZQorKwkgfHwgdGFnID09IERXX1RBR19yZXN0cmljdF90eXBlKQorKyAgICB7CisrICAgICAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgICAgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgICAgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrICAgIH0KKysKKysgIHN3aXRjaCAodGFnKQorKyAgICB7CisrICAgIGNhc2UgLTE6CisrICAgICAgcmV0dXJuIC0xOworKworKyAgICBjYXNlIERXX1RBR19zdWJyYW5nZV90eXBlOgorKyAgICAgIGlmICghIGR3YXJmX2hhc2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUpKQorKwl7CisrCSAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKwkgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKwkgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCX0KKysgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworKworKyAgICBjYXNlIERXX1RBR19iYXNlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2VudW1lcmF0aW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3BvaW50ZXJfdHlwZToKKysgICAgY2FzZSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlOgorKyAgICAgIHsKKysgICAgICAgIER3YXJmX1dvcmQgc2l6ZTsKKysJaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSwKKysJCQkJCSAmYXR0cl9tZW0pLCAmc2l6ZSkgIT0gMCkKKysJICB7CisrCSAgICBpZiAodGFnID09IERXX1RBR19wb2ludGVyX3R5cGUgfHwgdGFnID09IERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGUpCisrCSAgICAgIHNpemUgPSByZWdzaXplOworKwkgICAgZWxzZQorKwkgICAgICByZXR1cm4gLTE7CisrCSAgfQorKwlpZiAodGFnID09IERXX1RBR19iYXNlX3R5cGUpCisrCSAgeworKwkgICAgRHdhcmZfV29yZCBlbmNvZGluZzsKKysJICAgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9lbmNvZGluZywKKysJCQkJCSAgICAgJmF0dHJfbWVtKSwgJmVuY29kaW5nKSAhPSAwKQorKwkgICAgICByZXR1cm4gLTE7CisrCisrI2RlZmluZSBBQklfTE9DKGxvYywgcmVnc2l6ZSkgKChyZWdzaXplKSA9PSA0ID8gKGxvYyAjIyBfbzMyKSA6IChsb2MpKQorKworKwkgICAgaWYgKGVuY29kaW5nID09IERXX0FURV9mbG9hdCkKKysJICAgICAgeworKwkJKmxvY3AgPSBBQklfTE9DKGxvY19mcHJlZywgcmVnc2l6ZSk7CisrCQlpZiAoc2l6ZSA8PSByZWdzaXplKQorKwkJICAgIHJldHVybiBubG9jX2ZwcmVnOworKworKwkJaWYgKHNpemUgPD0gMipyZWdzaXplKQorKyAgICAgICAgICAgICAgICAgIHJldHVybiBubG9jX2ZwcmVncGFpcjsKKysKKysJCWlmIChzaXplIDw9IDQqcmVnc2l6ZSAmJiBhYmkgPT0gTUlQU19BQklfTzMyKQorKyAgICAgICAgICAgICAgICAgIHJldHVybiBubG9jX2ZwcmVncXVhZDsKKysKKysJCWdvdG8gYWdncmVnYXRlOworKwkgICAgICB9CisrCSAgfQorKwkqbG9jcCA9IEFCSV9MT0MobG9jX2ludHJlZywgcmVnc2l6ZSk7CisrCWlmIChzaXplIDw9IHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVnOworKwlpZiAoc2l6ZSA8PSAyKnJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVncGFpcjsKKysKKysJLyogRWxzZSBmYWxsIHRocm91Z2guIFNob3VsZG4ndCBoYXBwZW4gdGhvdWdoIChhdCBsZWFzdCB3aXRoIGdjYykgKi8KKysgICAgICB9CisrCisrICAgIGNhc2UgRFdfVEFHX3N0cnVjdHVyZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19jbGFzc190eXBlOgorKyAgICBjYXNlIERXX1RBR191bmlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19hcnJheV90eXBlOgorKyAgICBhZ2dyZWdhdGU6CisrICAgICAgLyogWFhYIFRPRE86IENhbid0IGhhbmRsZSBzdHJ1Y3R1cmUgcmV0dXJuIHdpdGggb3RoZXIgQUJJJ3MgeWV0IDotLyAqLworKyAgICAgIGlmICgoYWJpICE9IE1JUFNfQUJJX08zMikgJiYgKGFiaSAhPSBNSVBTX0FCSV9PNjQpKQorKyAgICAgICAgcmV0dXJuIC0yOworKworKyAgICAgICpsb2NwID0gbG9jX2FnZ3JlZ2F0ZTsKKysgICAgICByZXR1cm4gbmxvY19hZ2dyZWdhdGU7CisrICAgIH0KKysKKysgIC8qIFhYWCBXZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9ycyBmcm9tIGVibCBjYWxscy4KKysgICAgIFRoaXMgdmFsdWUgbWVhbnMgd2UgZG8gbm90IHVuZGVyc3RhbmQgdGhlIHR5cGUsIGJ1dCBpdCBpcyB3ZWxsLWZvcm1lZAorKyAgICAgRFdBUkYgYW5kIG1pZ2h0IGJlIHZhbGlkLiAgKi8KKysgIHJldHVybiAtMjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19zeW1ib2wuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfc3ltYm9sLmMJMjAxNC0wNC0yMSAxMToxMzozNi45MTAyMzU5NjUgKzAwMDAKK0BAIC0wLDAgKzEsNTIgQEAKKysvKiBNSVBTIHNwZWNpZmljIHN5bWJvbGljIG5hbWUgaGFuZGxpbmcuCisrICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKyAgIFdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4sIDIwMDIuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8ZWxmLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKyNkZWZpbmUgQkFDS0VORAkJbWlwc18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIENoZWNrIGZvciB0aGUgc2ltcGxlIHJlbG9jIHR5cGVzLiAgKi8KKytFbGZfVHlwZQorK21pcHNfcmVsb2Nfc2ltcGxlX3R5cGUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50IHR5cGUpCisreworKyAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgIGNhc2UgUl9NSVBTXzE2OgorKyAgICAgIHJldHVybiBFTEZfVF9IQUxGOworKyAgICBjYXNlIFJfTUlQU18zMjoKKysgICAgICByZXR1cm4gRUxGX1RfV09SRDsKKysgICAgY2FzZSBSX01JUFNfNjQ6CisrICAgICAgcmV0dXJuIEVMRl9UX1hXT1JEOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBFTEZfVF9OVU07CisrICAgIH0KKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNTgvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1OC5vcmlnL2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCTIwMTQtMDQtMjEgMTE6MTM6MzYuOTE0MjM1ODc1ICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMJMjAxNC0wNC0yMSAxMToxMzozNi45MTAyMzU5NjUgKzAwMDAKK0BAIC03MSw2ICs3MSw4IEBACisgICB7ICJzcGFyYyIsICJlbGZfc3BhcmMiLCAic3BhcmMiLCA1LCBFTV9TUEFSQywgMCwgMCB9LAorICAgeyAic3BhcmMiLCAiZWxmX3NwYXJjdjhwbHVzIiwgInNwYXJjIiwgNSwgRU1fU1BBUkMzMlBMVVMsIDAsIDAgfSwKKyAgIHsgInMzOTAiLCAiZWJsX3MzOTAiLCAiczM5MCIsIDQsIEVNX1MzOTAsIDAsIDAgfSwKKysgIHsgIm1pcHMiLCAiZWxmX21pcHMiLCAibWlwcyIsIDQsIEVNX01JUFMsIDAsIDAgfSwKKysgIHsgIm1pcHMiLCAiZWxmX21pcHNlbCIsICJtaXBzZWwiLCA0LCBFTV9NSVBTX1JTM19MRSwgMCwgMCB9LAorIAorICAgeyAibTMyIiwgImVsZl9tMzIiLCAibTMyIiwgMywgRU1fTTMyLCAwLCAwIH0sCisgICB7ICJtNjhrIiwgImVsZl9tNjhrIiwgIm02OGsiLCA0LCBFTV82OEssIDAsIDAgfSwKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9jb21tb24tcmVsb2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU4Lm9yaWcvYmFja2VuZHMvY29tbW9uLXJlbG9jLmMJMjAxNC0wNC0yMSAxMToxMzozNi45MTQyMzU4NzUgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9jb21tb24tcmVsb2MuYwkyMDE0LTA0LTIxIDExOjEzOjM2LjkxMDIzNTk2NSArMDAwMAorQEAgLTExMiwxMSArMTEyLDEzIEBACisgfQorIAorIAorKyNpZm5kZWYgTk9fQ09QWV9SRUxPQworIGJvb2wKKyBFQkxIT09LKGNvcHlfcmVsb2NfcCkgKGludCByZWxvYykKKyB7CisgICByZXR1cm4gcmVsb2MgPT0gUl9UWVBFIChDT1BZKTsKKyB9CisrI2VuZGlmCisgCisgYm9vbAorIEVCTEhPT0sobm9uZV9yZWxvY19wKSAoaW50IHJlbG9jKQorQEAgLTEzOCw3ICsxNDAsOSBAQAorICAgZWJsLT5yZWxvY190eXBlX25hbWUgPSBFQkxIT09LKHJlbG9jX3R5cGVfbmFtZSk7CisgICBlYmwtPnJlbG9jX3R5cGVfY2hlY2sgPSBFQkxIT09LKHJlbG9jX3R5cGVfY2hlY2spOworICAgZWJsLT5yZWxvY192YWxpZF91c2UgPSBFQkxIT09LKHJlbG9jX3ZhbGlkX3VzZSk7CisrI2lmbmRlZiBOT19DT1BZX1JFTE9DCisgICBlYmwtPmNvcHlfcmVsb2NfcCA9IEVCTEhPT0soY29weV9yZWxvY19wKTsKKysjZW5kaWYKKyAgIGVibC0+bm9uZV9yZWxvY19wID0gRUJMSE9PSyhub25lX3JlbG9jX3ApOworICNpZm5kZWYgTk9fUkVMQVRJVkVfUkVMT0MKKyAgIGVibC0+cmVsYXRpdmVfcmVsb2NfcCA9IEVCTEhPT0socmVsYXRpdmVfcmVsb2NfcCk7CitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1OC5vcmlnL2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTQtMDQtMjEgMTE6MTM6MzYuOTE0MjM1ODc1ICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxNC0wNC0yMSAxMToxNDoxMC44NDE0Njg5MzQgKzAwMDAKK0BAIC0zMywxMiArMzMsMTIgQEAKKyAKKyAKKyBtb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gYWFyY2g2NCBzcGFyYyBwcGMgcHBjNjQgczM5MCBcCistCSAgdGlsZWd4IHBhcmlzYworKwkgIHRpbGVneCBwYXJpc2MgbWlwcworIGxpYmVibF9waWMgPSBsaWJlYmxfaTM4Nl9waWMuYSBsaWJlYmxfc2hfcGljLmEgbGliZWJsX3g4Nl82NF9waWMuYSAgICBcCisgCSAgICAgbGliZWJsX2lhNjRfcGljLmEgbGliZWJsX2FscGhhX3BpYy5hIGxpYmVibF9hcm1fcGljLmEgICAgXAorIAkgICAgIGxpYmVibF9hYXJjaDY0X3BpYy5hIGxpYmVibF9zcGFyY19waWMuYSBsaWJlYmxfcHBjX3BpYy5hIFwKKyAJICAgICBsaWJlYmxfcHBjNjRfcGljLmEgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3RpbGVneF9waWMuYSBcCistCSAgICAgbGliZWJsX3BhcmlzY19waWMuYQorKwkgICAgIGxpYmVibF9wYXJpc2NfcGljLmEgbGliZWJsX21pcHNfcGljLmEKKyBub2luc3RfTElCUkFSSUVTID0gJChsaWJlYmxfcGljKQorIG5vaW5zdF9EQVRBID0gJChsaWJlYmxfcGljOl9waWMuYT0uc28pCisgCitAQCAtMTIxLDYgKzEyMSwxMCBAQAorIGxpYmVibF9wYXJpc2NfcGljX2FfU09VUkNFUyA9ICQocGFyaXNjX1NSQ1MpCisgYW1fbGliZWJsX3BhcmlzY19waWNfYV9PQkpFQ1RTID0gJChwYXJpc2NfU1JDUzouYz0ub3MpCisgCisrbWlwc19TUkNTID0gbWlwc19pbml0LmMgbWlwc19zeW1ib2wuYyBtaXBzX3JlZ3MuYyBtaXBzX3JldHZhbC5jCisrbGliZWJsX21pcHNfcGljX2FfU09VUkNFUyA9ICQobWlwc19TUkNTKQorK2FtX2xpYmVibF9taXBzX3BpY19hX09CSkVDVFMgPSAkKG1pcHNfU1JDUzouYz0ub3MpCisrCisgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJQHJtIC1mICQoQDouc289Lm1hcCkKKyAJZWNobyAnRUxGVVRJTFNfJChQQUNLQUdFX1ZFUlNJT04pIHsgZ2xvYmFsOiAkKl9pbml0OyBsb2NhbDogKjsgfTsnIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL21pcHNfcmVhZGVsZl93LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvbWlwc19yZWFkZWxmX3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU2NjllNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL21pcHNfcmVhZGVsZl93LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK0Zyb206IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KK1N1YmplY3Q6IE1ha2UgcmVhZGVsZiAtdyBvdXRwdXQgZGVidWcgaW5mb3JtYXRpb24gb24gbWlwcworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy82NjIwNDEKK0ZvcndhcmRlZDogbm90LW5lZWRlZAorCitVcHN0cmVhbXMgd2FudHMgYSBjaGFuZ2Ugd2hlcmUgdGhpcyBpcyBoYW5kbGVkIGJ5IGEgaG9vayB0aGF0IG5lZWRzCit0byBiZSBmaWxsZWQgaW4gYnkgdGhlIGJhY2tlbmQgZm9yIHRoZSBhcmNoLgorCitJbmRleDogZWxmdXRpbHMtMC4xNTMvc3JjL3JlYWRlbGYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTUzLm9yaWcvc3JjL3JlYWRlbGYuYwkyMDEyLTA4LTEwIDIyOjAxOjU1LjAwMDAwMDAwMCArMDIwMAorKysrIGVsZnV0aWxzLTAuMTUzL3NyYy9yZWFkZWxmLmMJMjAxMi0wOS0xOCAyMTo0NjoyNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC03MzY0LDcgKzczNjQsOCBAQAorICAgICAgIEdFbGZfU2hkciBzaGRyX21lbTsKKyAgICAgICBHRWxmX1NoZHIgKnNoZHIgPSBnZWxmX2dldHNoZHIgKHNjbiwgJnNoZHJfbWVtKTsKKyAKKy0gICAgICBpZiAoc2hkciAhPSBOVUxMICYmIHNoZHItPnNoX3R5cGUgPT0gU0hUX1BST0dCSVRTKQorKyAgICAgIGlmIChzaGRyICE9IE5VTEwgJiYgKAorKwkgKHNoZHItPnNoX3R5cGUgPT0gU0hUX1BST0dCSVRTKSB8fCAoc2hkci0+c2hfdHlwZSA9PSBTSFRfTUlQU19EV0FSRikpKQorIAl7CisgCSAgc3RhdGljIGNvbnN0IHN0cnVjdAorIAkgIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL25vbl9saW51eC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL25vbl9saW51eC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWIxYjM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvbm9uX2xpbnV4LnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0luZGV4OiBlbGZ1dGlscy0wLjE1OS9saWJkd2ZsL2xpbnV4LXBpZC1hdHRhY2guYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU5Lm9yaWcvbGliZHdmbC9saW51eC1waWQtYXR0YWNoLmMKKysrKyBlbGZ1dGlscy0wLjE1OS9saWJkd2ZsL2xpbnV4LXBpZC1hdHRhY2guYworQEAgLTM5Myw2ICszOTMsMTYgQEAgcGlkX2dldHRocmVhZCAoRHdmbCAqZHdmbCBfX2F0dHJpYnV0ZV9fCisgICByZXR1cm4gZmFsc2U7CisgfQorIAorK2Jvb2wKKytpbnRlcm5hbF9mdW5jdGlvbgorK19fbGliZHdmbF9wdHJhY2VfYXR0YWNoIChwaWRfdCB0aWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKwkJCSBib29sICp0aWRfd2FzX3N0b3BwZWRwIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKKyt7CisrICBlcnJubyA9IEVOT1NZUzsKKysgIF9fbGliZHdmbF9zZXRlcnJubyAoRFdGTF9FX0VSUk5PKTsKKysgIHJldHVybiBmYWxzZTsKKyt9CisrCisgc3RhdGljIGJvb2wKKyBwaWRfbWVtb3J5X3JlYWQgKER3ZmwgKmR3ZmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorICAgICAgICAgICAgICAgICAgRHdhcmZfQWRkciBhZGRyIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKK0BAIC00MTksNiArNDI5LDEzIEBAIHBpZF9kZXRhY2ggKER3ZmwgKmR3ZmwgX19hdHRyaWJ1dGVfXyAoKHUKKyB7CisgfQorIAorK3ZvaWQKKytpbnRlcm5hbF9mdW5jdGlvbgorK19fbGliZHdmbF9wdHJhY2VfZGV0YWNoIChwaWRfdCB0aWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKwkJCSBib29sIHRpZF93YXNfc3RvcHBlZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCisreworK30KKysKKyBzdGF0aWMgdm9pZAorIHBpZF90aHJlYWRfZGV0YWNoIChEd2ZsX1RocmVhZCAqdGhyZWFkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAJCSAgdm9pZCAqdGhyZWFkX2FyZyBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3JlZGhhdC1wb3J0YWJpbGl0eS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZmYwN2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZgpAQCAtMCwwICsxLDEwMjEgQEAKK1JlYmFzZSB0byAxLjE2MgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgfCAgIDMwICsrKysrKysrKysrKysrKysrKysrKworIGJhY2tlbmRzL0NoYW5nZUxvZyAgICAgICAgICB8ICAgMTIgKysrKysrKysrCisgYmFja2VuZHMvTWFrZWZpbGUuYW0gICAgICAgIHwgICAgMiArLQorIGNvbmZpZy9DaGFuZ2VMb2cgICAgICAgICAgICB8ICAgIDQgKysrCisgY29uZmlnL2V1LmFtICAgICAgICAgICAgICAgIHwgICAxNCArKysrKysrLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgIHwgICA2MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCisgbGliL0NoYW5nZUxvZyAgICAgICAgICAgICAgIHwgICAgOCArKysrKysKKyBsaWIvZXUtY29uZmlnLmggICAgICAgICAgICAgfCAgIDEwICsrKysrKysKKyBsaWJhc20vQ2hhbmdlTG9nICAgICAgICAgICAgfCAgICA1ICsrKysKKyBsaWJjcHUvQ2hhbmdlTG9nICAgICAgICAgICAgfCAgICA4ICsrKysrKworIGxpYmNwdS9pMzg2X2Rpc2FzbS5jICAgICAgICB8ICAgIDEgKworIGxpYmR3L0NoYW5nZUxvZyAgICAgICAgICAgICB8ICAgMTMgKysrKysrKysrCisgbGliZHcvZHdhcmZfYmVnaW5fZWxmLmMgICAgIHwgICAgOCArKysrKysKKyBsaWJkdy9saWJkdy5oICAgICAgICAgICAgICAgfCAgICAyICstCisgbGliZHdmbC9DaGFuZ2VMb2cgICAgICAgICAgIHwgICAyMCArKysrKysrKysrKysrKworIGxpYmR3ZmwvbGludXgtY29yZS1hdHRhY2guYyB8ICAgMjkgKysrKysrKysrKysrKysrKysrKysKKyBsaWJkd2ZsL2xpbnV4LXBpZC1hdHRhY2guYyAgfCAgIDE0ICsrKysrKysrKysKKyBsaWJlYmwvQ2hhbmdlTG9nICAgICAgICAgICAgfCAgICA1ICsrKysKKyBsaWJlbGYvQ2hhbmdlTG9nICAgICAgICAgICAgfCAgIDEwICsrKysrKysKKyBsaWJlbGYvY29tbW9uLmggICAgICAgICAgICAgfCAgICA0ICstLQorIGxpYmVsZi9nbnVoYXNoX3hsYXRlLmggICAgICB8ICAgIDYgKysrLS0KKyBzcmMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgfCAgIDMwICsrKysrKysrKysrKysrKysrKysrKworIHNyYy9NYWtlZmlsZS5hbSAgICAgICAgICAgICB8ICAgIDUgKysrKworIHNyYy9hZGRyMmxpbmUuYyAgICAgICAgICAgICB8ICAgIDQgKy0tCisgc3JjL2ZpbmR0ZXh0cmVsLmMgICAgICAgICAgIHwgICAgNiArKysrLQorIHNyYy9sZC5oICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKysKKyBzcmMvcmVhZGVsZi5jICAgICAgICAgICAgICAgfCAgIDE1ICsrKysrKystLS0tCisgc3JjL3N0cmluZ3MuYyAgICAgICAgICAgICAgIHwgICAxMSArKysrKysrKworIHNyYy9zdHJpcC5jICAgICAgICAgICAgICAgICB8ICAgIDYgKysrKysKKyB0ZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgfCAgIDE0ICsrKysrKysrKysKKyB0ZXN0cy9NYWtlZmlsZS5hbSAgICAgICAgICAgfCAgICAxICsKKyB0ZXN0cy9iYWNrdHJhY2UuYyAgICAgICAgICAgfCAgICAxICsKKyB0ZXN0cy9saW5lMmFkZHIuYyAgICAgICAgICAgfCAgICAyICstCisgMzMgZmlsZXMgY2hhbmdlZCwgMzQzIGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCitpbmRleCBkODI5NzgzLi44OWJmZDI0IDEwMDY0NAorLS0tIGEvQ2hhbmdlTG9nCisrKysgYi9DaGFuZ2VMb2cKK0BAIC0yNTMsNiArMjUzLDggQEAKKyAKKyAyMDEyLTAxLTI0ICBNYXJrIFdpZWxhYXJkICA8bWp3QHJlZGhhdC5jb20+CisgCisrCSogY29uZmlndXJlLmFjOiBXcmFwIEFDX0NPTVBJTEVfSUZFTFNFIHNvdXJjZXMgaW4gQUNfTEFOR19TT1VSQ0UuCisrCisgCSogQ09QWUlORzogRml4IGFkZHJlc3MuIFVwZGF0ZWQgdmVyc2lvbiBmcm9tIGdudWxpYi4KKyAKKyAyMDEyLTAxLTIzICBNYXJrIFdpZWxhYXJkICA8bWp3QHJlZGhhdC5jb20+CitAQCAtMjcxLDYgKzI3Myw5IEBACisgCisgMjAxMS0xMC0wOCAgTWlrZSBGcnlzaW5nZXIgIDx2YXBpZXJAZ2VudG9vLm9yZz4KKyAKKysJKiBjb25maWd1cmUuYWMgKC0tZGlzYWJsZS13ZXJyb3IpOiBIYW5kbGUgaXQsIGNvbnRyb2xsaW5nIEJVSUxEX1dFUlJPUgorKwlhdXRvbWFrZSBvcHRpb24uCisrCisgCSogY29uZmlndXJlLmFjOiBGaXggdXNlIG9mIEFDX0FSR19FTkFCTEUgdG8gaGFuZGxlICRlbmFibGV2YWwgY29ycmVjdGx5LgorIAorIDIwMTEtMTAtMDIgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBnbWFpbC5jb20+CitAQCAtMjkyLDYgKzI5NywxMCBAQAorIAorIAkqIGNvbmZpZ3VyZS5hYyAoTE9DQUxFRElSLCBEQVRBRElSTkFNRSk6IFJlbW92ZWQuCisgCisrMjAwOS0xMS0yMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBjb25maWd1cmUuYWM6IFVzZSBzZWQgYW5kIGV4cHIgaW5zdGVhZCBvZiBtb2Rlcm4gYmFzaCBleHRlbnNpb25zLgorKworIDIwMDktMDktMjEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGNvbmZpZ3VyZS5hYzogVXBkYXRlIGZvciBtb3JlIG1vZGVybiBhdXRvY29uZi4KK0BAIC0zMDAsNiArMzA5LDEwIEBACisgCisgCSogY29uZmlndXJlLmFjICh6aXBfTElCUyk6IENoZWNrIGZvciBsaWJsem1hIHRvby4KKyAKKysyMDA5LTA4LTE3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIC1mZ251ODktaW5saW5lOyBhZGQgaXQgdG8gV0VYVFJBIGlmIGl0IHdvcmtzLgorKworIDIwMDktMDQtMTkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogY29uZmlndXJlLmFjIChldV92ZXJzaW9uKTogUm91bmQgZG93biBoZXJlLCBub3QgaW4gdmVyc2lvbi5oIG1hY3Jvcy4KK0BAIC0zMTEsNiArMzI0LDggQEAKKyAKKyAyMDA5LTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIF9fYnVpbHRpbl9wb3Bjb3VudC4KKysKKyAJKiBjb25maWd1cmUuYWMgKHpsaWIgY2hlY2spOiBDaGVjayBmb3IgZ3pkaXJlY3QsIG5lZWQgemxpYiA+PSAxLjIuMi4zLgorIAorIAkqIGNvbmZpZ3VyZS5hYyAoX190aHJlYWQgY2hlY2spOiBVc2UgQUNfTElOS19JRkVMU0UsIGluIGNhc2Ugb2YKK0BAIC0zOTEsNiArNDA2LDEwIEBACisgCSogY29uZmlndXJlLmFjOiBBZGQgZHVtbXkgYXV0b21ha2UgY29uZGl0aW9uYWwgdG8gZ2V0IGRlcGVuZGVuY2llcworIAlmb3Igbm9uLWdlbmVyaWMgbGlua2VyIHJpZ2h0LiAgU2VlIHNyYy9NYWtlZmlsZS5hbS4KKyAKKysyMDA1LTExLTIyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIC0tYXMtbmVlZGVkIGxpbmtlciBvcHRpb24uCisrCisgMjAwNS0xMS0xOCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBNYWtlZmlsZS5hbSAoRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUyk6IE5ldyB2YXJpYWJsZS4KK0BAIC00MzgsNiArNDU3LDE3IEBACisgCSogTWFrZWZpbGUuYW0gKGFsbF9TVUJESVJTKTogQWRkIGxpYmR3ZmwuCisgCSogY29uZmlndXJlLmFjOiBXcml0ZSBsaWJkd2ZsL01ha2VmaWxlLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogY29uZmlndXJlLmFjIChXRVhUUkEpOiBDaGVjayBmb3IgLVdleHRyYSBhbmQgc2V0IHRoaXMgc3Vic3RpdHV0aW9uLgorKworKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIHN0cnVjdCBzdGF0IHN0Xz90aW0gbWVtYmVycy4KKysJKiBzcmMvc3RyaXAuYyAocHJvY2Vzc19maWxlKTogVXNlIHN0Xz90aW1lIGlmIHN0Xz90aW0gYXJlIG5vdCB0aGVyZS4KKysKKysJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciBmdXRpbWVzIGZ1bmN0aW9uLgorKwkqIHNyYy9zdHJpcC5jIChoYW5kbGVfZWxmKSBbISBIQVZFX0ZVVElNRVNdOiBVc2UgdXRpbWVzIGluc3RlYWQuCisrCShoYW5kbGVfYXIpIFshIEhBVkVfRlVUSU1FU106IExpa2V3aXNlLgorKworIDIwMDUtMDUtMTkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogY29uZmlndXJlLmFjIFtBSF9CT1RUT01dIChJTlRERUNMLCBfSU5UREVDTCk6IE5ldyBtYWNyb3MuCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvQ2hhbmdlTG9nIGIvYmFja2VuZHMvQ2hhbmdlTG9nCitpbmRleCBmZTYxZDljLi45NTk5NjIzIDEwMDY0NAorLS0tIGEvYmFja2VuZHMvQ2hhbmdlTG9nCisrKysgYi9iYWNrZW5kcy9DaGFuZ2VMb2cKK0BAIC00OTgsNiArNDk4LDEwIEBACisgCSogcHBjX2F0dHJzLmMgKHBwY19jaGVja19vYmplY3RfYXR0cmlidXRlKTogSGFuZGxlIHRhZworIAlHTlVfUG93ZXJfQUJJX1N0cnVjdF9SZXR1cm4uCisgCisrMjAwOS0wMS0yMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAobGliZWJsXyUuc28pOiBVc2UgJChMRF9BU19ORUVERUQpLgorKworIDIwMDgtMTAtMDQgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGkzODZfcmVsb2MuZGVmOiBGaXggZW50cmllcyBmb3IgVExTX0dPVERFU0MsIFRMU19ERVNDX0NBTEwsIGFuZAorQEAgLTgyNSw2ICs4MjksMTEgQEAKKyAJKiBzcGFyY19pbml0LmM6IExpa2V3aXNlLgorIAkqIHg4Nl82NF9pbml0LmM6IExpa2V3aXNlLgorIAorKzIwMDUtMTEtMjIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKExEX0FTX05FRURFRCk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkobGliZWJsXyUuc28gcnVsZSk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2wsLS1hcy1uZWVkZWQuCisrCisgMjAwNS0xMS0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBwcGM2NF9yZWxvYy5kZWY6IFJFTDMwIC0+IEFERFIzMC4KK0BAIC04NDcsNiArODU2LDkgQEAKKyAJKiBNYWtlZmlsZS5hbSAodW5pbnN0YWxsKTogRG9uJ3QgdHJ5IHRvIHJlbW92ZSAkKHBrZ2luY2x1ZGVkaXIpLgorIAkoQ0xFQU5GSUxFUyk6IEFkZCBsaWJlYmxfJChtKS5zby4KKyAKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAJKiBwcGNfcmVsb2MuZGVmOiBVcGRhdGUgYml0cyBwZXIgQWxhbiBNb2RyYSA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1Pi4KKyAJKiBwcGM2NF9yZWxvYy5kZWY6IExpa2V3aXNlLgorIAorZGlmZiAtLWdpdCBhL2JhY2tlbmRzL01ha2VmaWxlLmFtIGIvYmFja2VuZHMvTWFrZWZpbGUuYW0KK2luZGV4IDIxZDdiZDIuLmZlOTIwYzkgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9NYWtlZmlsZS5hbQorKysrIGIvYmFja2VuZHMvTWFrZWZpbGUuYW0KK0BAIC0xMTksNyArMTE5LDcgQEAgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJJChMSU5LKSAtc2hhcmVkIC1vICQoQDoubWFwPS5zbykgXAorIAkJLVdsLC0td2hvbGUtYXJjaGl2ZSAkPCAkKGNwdV8kKikgLVdsLC0tbm8td2hvbGUtYXJjaGl2ZSBcCisgCQktV2wsLS12ZXJzaW9uLXNjcmlwdCwkKEA6LnNvPS5tYXApIFwKKy0JCS1XbCwteixkZWZzIC1XbCwtLWFzLW5lZWRlZCAkKGxpYmVsZikgJChsaWJkdykKKysJCS1XbCwteixkZWZzICQoTERfQVNfTkVFREVEKSAkKGxpYmVsZikgJChsaWJkdykKKyAJQCQodGV4dHJlbF9jaGVjaykKKyAKKyBsaWJlYmxfaTM4Ni5zbzogJChjcHVfaTM4NikKK2RpZmYgLS1naXQgYS9jb25maWcvQ2hhbmdlTG9nIGIvY29uZmlnL0NoYW5nZUxvZworaW5kZXggNjRiNThlMS4uNjNiM2U5MCAxMDA2NDQKKy0tLSBhL2NvbmZpZy9DaGFuZ2VMb2cKKysrKyBiL2NvbmZpZy9DaGFuZ2VMb2cKK0BAIC0xMDYsNiArMTA2LDEwIEBACisgCisgCSoga25vd24tZHdhcmYuYXdrOiBVc2UgZ2F3ay4KKyAKKysyMDExLTEwLTA4ICBNaWtlIEZyeXNpbmdlciAgPHZhcGllckBnZW50b28ub3JnPgorKworKwkqIGV1LmFtIFtCVUlMRF9XRVJST1JdOiBDb25kaXRpb25hbGl6ZSAtV2Vycm9yIHVzZSBvbiB0aGlzLgorKworIDIwMTAtMDctMDIgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGVsZnV0aWxzLnNwZWMuaW46IEFkZCBtb3JlIEJ1aWxkUmVxdWlyZXMuCitkaWZmIC0tZ2l0IGEvY29uZmlnL2V1LmFtIGIvY29uZmlnL2V1LmFtCitpbmRleCA3MGQzMmRlLi42NWFmMDg1IDEwMDY0NAorLS0tIGEvY29uZmlnL2V1LmFtCisrKysgYi9jb25maWcvZXUuYW0KK0BAIC0xLDYgKzEsNiBAQAorICMjIENvbW1vbiBhdXRvbWFrZSBmcmFnbWVudHMgZm9yIGVsZnV0aWxzIHN1YmRpcmVjdG9yeSBtYWtlZmlsZXMuCisgIyMKKy0jIyBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQgUmVkIEhhdCwgSW5jLgorKyMjIENvcHlyaWdodCAoQykgMjAxMC0yMDExLCAyMDE0IFJlZCBIYXQsIEluYy4KKyAjIworICMjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVsZnV0aWxzLgorICMjCitAQCAtMjksNiArMjksOSBAQAorICMjIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAjIworIAorK1dFWFRSQSA9IEBXRVhUUkFACisrTERfQVNfTkVFREVEID0gQExEX0FTX05FRURFREAKKysKKyBERUZTID0gLURfR05VX1NPVVJDRSAtREhBVkVfQ09ORklHX0ggLURMT0NBTEVESVI9JyIke2xvY2FsZWRpcn0iJworIEFNX0NQUEZMQUdTID0gLUkuIC1JJChzcmNkaXIpIC1JJCh0b3Bfc3JjZGlyKS9saWIgLUkuLgorIAorQEAgLTM4LDEyICs0MSwxNyBAQCBTVEFDS19VU0FHRV9XQVJOSU5HPS1Xc3RhY2stdXNhZ2U9MjYyMTQ0CisgZWxzZQorIFNUQUNLX1VTQUdFX1dBUk5JTkc9CisgZW5kaWYKKy1BTV9DRkxBR1MgPSAtc3RkPWdudTk5IC1XYWxsIC1Xc2hhZG93IC1XZm9ybWF0PTIgXAorK0FNX0NGTEFHUyA9IC1zdGQ9Z251OTkgLVdhbGwgLVdzaGFkb3cgXAorIAkgICAgJChpZiAkKCQoKkYpX25vX1dlcnJvciksLC1XZXJyb3IpIFwKKy0JICAgICQoaWYgJCgkKCpGKV9ub19XdW51c2VkKSwsLVd1bnVzZWQgLVdleHRyYSkgXAorKwkgICAgJChpZiAkKCQoKkYpX25vX1d1bnVzZWQpLCwtV3VudXNlZCAkKFdFWFRSQSkpIFwKKysJICAgICQoaWYgJCgkKCpGKV9ub19XZm9ybWF0KSwtV25vLWZvcm1hdCwtV2Zvcm1hdD0yKSBcCisgCSAgICAkKGlmICQoJCgqRilfbm9fV3N0YWNrX3VzYWdlKSwsJChTVEFDS19VU0FHRV9XQVJOSU5HKSkgXAorIAkgICAgJCgkKCpGKV9DRkxBR1MpCisgCisraWYgQlVJTERfV0VSUk9SCisrQU1fQ0ZMQUdTICs9ICQoaWYgJCgkKCpGKV9ub19XZXJyb3IpLCwtV2Vycm9yKQorK2VuZGlmCisrCisgQ09NUElMRS5vcyA9ICQoZmlsdGVyLW91dCAtZnByb2ZpbGUtYXJjcyAtZnRlc3QtY292ZXJhZ2UsICQoQ09NUElMRSkpCisgCisgREVGUy5vcyA9IC1EUElDIC1EU0hBUkVECitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiYzlmZjU2Li4yN2ExZWYzIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMDYsNiArMTA2LDU1IEBAIENGTEFHUz0iJG9sZF9DRkxBR1MiXSkKKyBBU19JRihbdGVzdCAieCRhY19jdl9jOTkiICE9IHh5ZXNdLAorICAgICAgIEFDX01TR19FUlJPUihbZ2NjIHdpdGggR05VOTkgc3VwcG9ydCByZXF1aXJlZF0pKQorIAorK0FDX0NBQ0hFX0NIRUNLKFtmb3IgLVdleHRyYSBvcHRpb24gdG8gJENDXSwgYWNfY3ZfY2Nfd2V4dHJhLCBbZG5sCisrb2xkX0NGTEFHUz0iJENGTEFHUyIKKytDRkxBR1M9IiRDRkxBR1MgLVdleHRyYSIKKytBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW3ZvaWQgZm9vICh2b2lkKSB7IH1dKV0sCisrCQkgIGFjX2N2X2NjX3dleHRyYT15ZXMsIGFjX2N2X2NjX3dleHRyYT1ubykKKytDRkxBR1M9IiRvbGRfQ0ZMQUdTIl0pCisrQUNfU1VCU1QoV0VYVFJBKQorK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X2NjX3dleHRyYSIgPSB4eWVzXSwgW1dFWFRSQT0tV2V4dHJhXSwgW1dFWFRSQT0tV10pCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZmdudTg5LWlubGluZSBvcHRpb24gdG8gJENDXSwgYWNfY3ZfY2NfZ251ODlfaW5saW5lLCBbZG5sCisrb2xkX0NGTEFHUz0iJENGTEFHUyIKKytDRkxBR1M9IiRDRkxBR1MgLWZnbnU4OS1pbmxpbmUgLVdlcnJvciIKKytBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoWworK3ZvaWQgZm9vICh2b2lkKQorK3sKKysgIGlubGluZSB2b2lkIGJhciAodm9pZCkge30KKysgIGJhciAoKTsKKyt9CisrZXh0ZXJuIGlubGluZSB2b2lkIGJheiAodm9pZCkge30KKytdKV0sIGFjX2N2X2NjX2dudTg5X2lubGluZT15ZXMsIGFjX2N2X2NjX2dudTg5X2lubGluZT1ubykKKytDRkxBR1M9IiRvbGRfQ0ZMQUdTIl0pCisrQVNfSUYoW3Rlc3QgIngkYWNfY3ZfY2NfZ251ODlfaW5saW5lIiA9IHh5ZXNdLAorKyAgICAgIFtXRVhUUkE9IiR7V0VYVFJBOiskV0VYVFJBIH0tZmdudTg5LWlubGluZSJdKQorKworK0FDX0NBQ0hFX0NIRUNLKFtmb3IgLS1hcy1uZWVkZWQgbGlua2VyIG9wdGlvbl0sCisrCSAgICAgICBhY19jdl9hc19uZWVkZWQsIFtkbmwKKytjYXQgPiBjb25mdGVzdC5jIDw8RU9GCisraW50IG1haW4gKHZvaWQpIHsgcmV0dXJuIDA7IH0KKytFT0YKKytpZiBBQ19UUllfQ09NTUFORChbJHtDQy1jY30gJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MKKysJCQkgICAgLWZQSUMgLXNoYXJlZCAtbyBjb25mdGVzdC5zbyBjb25mdGVzdC5jCisrCQkJICAgIC1XbCwtLWFzLW5lZWRlZCAxPiZBU19NRVNTQUdFX0xPR19GRF0pCisrdGhlbgorKyAgYWNfY3ZfYXNfbmVlZGVkPXllcworK2Vsc2UKKysgIGFjX2N2X2FzX25lZWRlZD1ubworK2ZpCisrcm0gLWYgY29uZnRlc3QqXSkKKytBU19JRihbdGVzdCAieCRhY19jdl9hc19uZWVkZWQiID0geHllc10sCisrICAgICAgW0xEX0FTX05FRURFRD0tV2wsLS1hcy1uZWVkZWRdLCBbTERfQVNfTkVFREVEPV0pCisrQUNfU1VCU1QoTERfQVNfTkVFREVEKQorKworK0FDX0NBQ0hFX0NIRUNLKFtmb3IgX19idWlsdGluX3BvcGNvdW50XSwgYWNfY3ZfcG9wY291bnQsIFtkbmwKKytBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLCBbW2V4aXQgKF9fYnVpbHRpbl9wb3Bjb3VudCAoMTI3KSk7XV0pXSwKKysJICAgICAgIGFjX2N2X3BvcGNvdW50PXllcywgYWNfY3ZfcG9wY291bnQ9bm8pXSkKKytBU19JRihbdGVzdCAieCRhY19jdl9wb3Bjb3VudCIgPSB4eWVzXSwKKysgICAgICBbQUNfREVGSU5FKFtIQVZFX0JVSUxUSU5fUE9QQ09VTlRdLCBbMV0sIFtIYXZlIF9fYnVpbHRpbl9wb3Bjb3VudC5dKV0pCisrCisrCisgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBfX3RocmVhZCBzdXBwb3J0XSwgYWNfY3ZfdGxzLCBbZG5sCisgIyBVc2UgdGhlIHNhbWUgZmxhZ3MgdGhhdCB3ZSB1c2UgZm9yIG91ciBEU09zLCBzbyB0aGUgdGVzdCBpcyByZXByZXNlbnRhdGl2ZS4KKyAjIFNvbWUgb2xkIGNvbXBpbGVyL2xpbmtlci9saWJjIGNvbWJpbmF0aW9ucyBmYWlsIHNvbWUgd2F5cyBhbmQgbm90IG90aGVycy4KK0BAIC0xMjIsNyArMTcxLDEwIEBAIHN0YXRpYyBfX3RocmVhZCBpbnQgYTsgaW50IGZvbyAoaW50IGIpIHsgcmV0dXJuIGEgKyBiOyB9XV0sCisgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgTERGTEFHUz0iJHNhdmVfTERGTEFHUyJdKQorIEFTX0lGKFt0ZXN0ICJ4JGFjX2N2X3RscyIgIT0geHllc10sCistICAgICAgQUNfTVNHX0VSUk9SKFtfX3RocmVhZCBzdXBwb3J0IHJlcXVpcmVkXSkpCisrICAgICAgW0FTX0lGKFt0ZXN0ICIkdXNlX2xvY2tzIiA9IHllc10sCisrCSAgICAgW0FDX01TR19FUlJPUihbLS1lbmFibGUtdGhyZWFkLXNhZmV0eSByZXF1aXJlcyBfX3RocmVhZCBzdXBwb3J0XSldLAorKwkgICAgIFtBQ19ERUZJTkUoW19fdGhyZWFkXSwgWy8qIGVtcHR5OiBubyBtdWx0aS10aHJlYWQgc3VwcG9ydCAqL10sCisrCQkJW1N0dWJiZWQgb3V0IGlmIG1pc3NpbmcgY29tcGlsZXIgc3VwcG9ydC5dKV0pXSkKKyAKKyBkbmwgVGhpcyB0ZXN0IG11c3QgY29tZSBhcyBlYXJseSBhcyBwb3NzaWJsZSBhZnRlciB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbgorIGRubCB0ZXN0cywgYmVjYXVzZSB0aGUgY2hvaWNlIG9mIHRoZSBmaWxlIG1vZGVsIGNhbiAoaW4gcHJpbmNpcGxlKSBhZmZlY3QKK0BAIC0yMjQsNiArMjc2LDExIEBAIEFNX0NPTkRJVElPTkFMKFVTRV9WQUxHUklORCwgdGVzdCAiJHVzZV92YWxncmluZCIgPSB5ZXMpCisgQU1fQ09ORElUSU9OQUwoQlVJTERfU1RBVElDLCBbZG5sCisgdGVzdCAiJHVzZV9ncHJvZiIgPSB5ZXMgLW8gIiR1c2VfZ2NvdiIgPSB5ZXNdKQorIAorK0FDX0FSR19FTkFCTEUoW3dlcnJvcl0sCisrQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS13ZXJyb3JdLFtkbyBub3QgYnVpbGQgd2l0aCAtV2Vycm9yXSksCisrCSAgICAgICBbZW5hYmxlX3dlcnJvcj0kZW5hYmxldmFsXSwgW2VuYWJsZV93ZXJyb3I9eWVzXSkKKytBTV9DT05ESVRJT05BTChCVUlMRF9XRVJST1IsIHRlc3QgIiRlbmFibGVfd2Vycm9yIiA9IHllcykKKysKKyBBQ19BUkdfRU5BQkxFKFt0ZXN0cy1ycGF0aF0sCisgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXRlc3RzLXJwYXRoXSxbYnVpbGQgJE9SSUdJTi11c2luZyBycGF0aCBpbnRvIHRlc3RzXSksCisgCSAgICAgICBbdGVzdHNfdXNlX3JwYXRoPSRlbmFibGV2YWxdLCBbdGVzdHNfdXNlX3JwYXRoPW5vXSkKK0BAIC0zODgsNyArNDQ1LDcgQEAgY2FzZSAiJGV1X3ZlcnNpb24iIGluCisgZXNhYworIAorICMgUm91bmQgdXAgdG8gdGhlIG5leHQgcmVsZWFzZSBBUEkgKHgueSkgdmVyc2lvbi4KKy1ldV92ZXJzaW9uPSQoKCAoZXVfdmVyc2lvbiArIDk5OSkgLyAxMDAwICkpCisrZXVfdmVyc2lvbj1gZXhwciBcKCAkZXVfdmVyc2lvbiArIDk5OSBcKSAvIDEwMDBgCisgCisgZG5sIFVuaXF1ZSBJRCBmb3IgdGhpcyBidWlsZC4KKyBNT0RWRVJTSU9OPSJCdWlsZCBmb3IgJHtMSUJFQkxfU1VCRElSfSAke2V1X3ZlcnNpb259ICR7YWNfY3ZfYnVpbGR9IgorZGlmZiAtLWdpdCBhL2xpYi9DaGFuZ2VMb2cgYi9saWIvQ2hhbmdlTG9nCitpbmRleCBkMDRiZjE3Li43MjBjOThkIDEwMDY0NAorLS0tIGEvbGliL0NoYW5nZUxvZworKysrIGIvbGliL0NoYW5nZUxvZworQEAgLTczLDYgKzczLDkgQEAKKyAKKyAyMDA5LTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIGV1LWNvbmZpZy5oIFshIEhBVkVfQlVJTFRJTl9QT1BDT1VOVF0KKysJKF9fYnVpbHRpbl9wb3Bjb3VudCk6IE5ldyBpbmxpbmUgZnVuY3Rpb24uCisrCisgCSogZXUtY29uZmlnLmg6IEFkZCBtdWx0aXBsZSBpbmNsdXNpb24gcHJvdGVjdGlvbi4KKyAKKyAyMDA5LTAxLTE3ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KK0BAIC0xMjksNiArMTMyLDExIEBACisgCSogTWFrZWZpbGUuYW0gKGxpYmV1X2FfU09VUkNFUyk6IEFkZCBpdC4KKyAJKiBzeXN0ZW0uaDogRGVjbGFyZSBjcmMzMl9maWxlLgorIAorKzIwMDUtMDItMDcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNC0zMCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogTWFrZWZpbGUuYW06IFVzZSAtZmZ1bmN0aW9uLXNlY3Rpb25zIGZvciB4bWFsbG9jLmMuCitkaWZmIC0tZ2l0IGEvbGliL2V1LWNvbmZpZy5oIGIvbGliL2V1LWNvbmZpZy5oCitpbmRleCA0MDBjZGM2Li44NzJmNmJjIDEwMDY0NAorLS0tIGEvbGliL2V1LWNvbmZpZy5oCisrKysgYi9saWIvZXUtY29uZmlnLmgKK0BAIC0xNjMsNiArMTYzLDE2IEBAIGFzbSAoIi5zZWN0aW9uIHByZWRpY3RfZGF0YSwgXCJhd1wiOyAucHJldmlvdXNcbiIKKyAvKiBUaGlzIG1hY3JvIGlzIHVzZWQgYnkgdGhlIHRlc3RzIGNvbmRpdGlvbmFsaXplIGZvciBzdGFuZGFsb25lIGJ1aWxkaW5nLiAgKi8KKyAjZGVmaW5lIEVMRlVUSUxTX0hFQURFUihuYW1lKSA8bGliIyNuYW1lLmg+CisgCisrI2lmbmRlZiBIQVZFX0JVSUxUSU5fUE9QQ09VTlQKKysjIGRlZmluZSBfX2J1aWx0aW5fcG9wY291bnQgaGFrbWVtX3BvcGNvdW50Cisrc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisraGFrbWVtX3BvcGNvdW50ICh1bnNpZ25lZCBpbnQgeCkKKyt7CisrICAvKiBIQUtNRU0gMTY5ICovCisrICB1bnNpZ25lZCBpbnQgbiA9IHggLSAoKHggPj4gMSkgJiAwMzMzMzMzMzMzMzMpIC0gKCh4ID4+IDIpICYgMDExMTExMTExMTExKTsKKysgIHJldHVybiAoKG4gKyAobiA+PiAzKSkgJiAwMzA3MDcwNzA3MDcpICUgNjM7CisrfQorKyNlbmRpZgkvKiBIQVZFX0JVSUxUSU5fUE9QQ09VTlQgKi8KKyAKKyAjaWZkZWYgU1lNQk9MX1ZFUlNJT05JTkcKKyAjIGRlZmluZSBPTERfVkVSU0lPTihuYW1lLCB2ZXJzaW9uKSBcCitkaWZmIC0tZ2l0IGEvbGliYXNtL0NoYW5nZUxvZyBiL2xpYmFzbS9DaGFuZ2VMb2cKK2luZGV4IDliMjVhZjkuLjMyYjlmZDAgMTAwNjQ0CistLS0gYS9saWJhc20vQ2hhbmdlTG9nCisrKysgYi9saWJhc20vQ2hhbmdlTG9nCitAQCAtODcsNiArODcsMTEgQEAKKyAJKiBhc21fZXJyb3IuYzogQWRkIG5ldyBlcnJvciBBU01fRV9JT0VSUk9SLgorIAkqIGxpYmFzbVAuaDogQWRkIEFTTV9FX0lPRVJST1IgZGVmaW5pdGlvbi4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDItMTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIE1ha2VmaWxlLmFtIChBTV9DRkxBR1MpOiBBZGQgLVd1bnVzZWQgLVdleHRyYSAtV2Zvcm1hdD0yLgorZGlmZiAtLWdpdCBhL2xpYmNwdS9DaGFuZ2VMb2cgYi9saWJjcHUvQ2hhbmdlTG9nCitpbmRleCBhMjBmNDQwLi41ZWEyM2I3IDEwMDY0NAorLS0tIGEvbGliY3B1L0NoYW5nZUxvZworKysrIGIvbGliY3B1L0NoYW5nZUxvZworQEAgLTUxLDYgKzUxLDkgQEAKKyAKKyAyMDA5LTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIGkzODZfZGlzYXNtLmMgKGkzODZfZGlzYXNtKTogQWRkIGFib3J0IGFmdGVyIGFzc2VydC1jb25zdGFudCBmb3Igb2xkCisrCWNvbXBpbGVycyB0aGF0IGRvbid0IHJlYWxpemUgaXQncyBub3JldHVybi4KKysKKyAJKiBNYWtlZmlsZS5hbSAoaTM4Nl9wYXJzZV9DRkxBR1MpOiBVc2UgcXVvdGVzIGFyb3VuZCBjb21tYW5kCisgCXN1YnN0aXR1dGlvbiB0aGF0IGNhbiBwcm9kdWNlIGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAKK0BAIC0zODAsNiArMzgzLDExIEBACisgCSogZGVmcy9pMzg2LmRvYzogTmV3IGZpbGUuCisgCSogZGVmcy94ODZfNjQ6IE5ldyBmaWxlLgorIAorKzIwMDUtMDQtMDQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluc3RlYWQgb2YgLVdleHRyYS4KKysKKyAyMDA1LTAyLTE1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBNYWtlZmlsZSAoQU1fQ0ZMQUdTKTogQWRkIC1XdW51c2VkIC1XZXh0cmEgLVdmb3JtYXQ9Mi4KK2RpZmYgLS1naXQgYS9saWJjcHUvaTM4Nl9kaXNhc20uYyBiL2xpYmNwdS9pMzg2X2Rpc2FzbS5jCitpbmRleCA4MzIyNDFmLi5jN2EwZGYwIDEwMDY0NAorLS0tIGEvbGliY3B1L2kzODZfZGlzYXNtLmMKKysrKyBiL2xpYmNwdS9pMzg2X2Rpc2FzbS5jCitAQCAtODIyLDYgKzgyMiw3IEBAIGkzODZfZGlzYXNtIChjb25zdCB1aW50OF90ICoqc3RhcnRwLCBjb25zdCB1aW50OF90ICplbmQsIEdFbGZfQWRkciBhZGRyLAorIAorIAkJCWRlZmF1bHQ6CisgCQkJICBhc3NlcnQgKCEgIklOVkFMSUQgbm90IGhhbmRsZWQiKTsKKysJCQkgIGFib3J0ICgpOworIAkJCX0KKyAJCSAgICB9CisgCQkgIGVsc2UKK2RpZmYgLS1naXQgYS9saWJkdy9DaGFuZ2VMb2cgYi9saWJkdy9DaGFuZ2VMb2cKK2luZGV4IDQ4N2UzNGEuLjA2YzczN2IgMTAwNjQ0CistLS0gYS9saWJkdy9DaGFuZ2VMb2cKKysrKyBiL2xpYmR3L0NoYW5nZUxvZworQEAgLTg4OSw2ICs4ODksMTAgQEAKKyAKKyAJKiBNYWtlZmlsZS5hbSAoa25vd24tZHdhcmYuaCk6IFJ1biBnYXdrIG9uIGNvbmZpZy9rbm93bi1kd2FyZi5hd2suCisgCisrMjAxMS0wNy0yMCAgTWFyayBXaWVsYWFyZCAgPG1qd0ByZWRoYXQuY29tPgorKworKwkqIGR3YXJmX2JlZ2luX2VsZi5jOiBBZGQgZmFsbGJhY2sgZm9yIGJlNjR0b2ggaWYgbm90IGRlZmluZWQuCisrCisgMjAxMS0wNy0xNCAgTWFyayBXaWVsYWFyZCAgPG1qd0ByZWRoYXQuY29tPgorIAorIAkqIGxpYmR3LmggKGR3YXJmX29mZmRpZSk6IEZpeCBkb2N1bWVudGF0aW9uIHRvIG1lbnRpb24gLmRlYnVnX2luZm8uCitAQCAtMTI0OCw2ICsxMjUyLDEwIEBACisgCisgCSogZHdhcmZfaGFzYXR0cl9pbnRlZ3JhdGUuYzogSW50ZWdyYXRlIERXX0FUX3NwZWNpZmljYXRpb24gdG9vLgorIAorKzIwMDktMDgtMTcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogbGliZHcuaDogRGlzYWJsZSBleHRlcm4gaW5saW5lcyBmb3IgR0NDIDQuMi4KKysKKyAyMDA5LTA4LTEwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIGR3YXJmX2dldHNjb3BldmFyLmM6IFVzZSBkd2FyZl9kaWVuYW1lLgorQEAgLTIwMTYsNiArMjAyNCwxMSBAQAorIAorIDIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKyAJKiBkd2FyZl9mb3JtcmVmX2RpZS5jIChkd2FyZl9mb3JtcmVmX2RpZSk6IEFkZCBDVSBoZWFkZXIgb2Zmc2V0IHRvCisgCWZvcm1yZWYgb2Zmc2V0LgorIAorZGlmZiAtLWdpdCBhL2xpYmR3L2R3YXJmX2JlZ2luX2VsZi5jIGIvbGliZHcvZHdhcmZfYmVnaW5fZWxmLmMKK2luZGV4IDRlMGQ1OTAuLmE2NjE2YTEgMTAwNjQ0CistLS0gYS9saWJkdy9kd2FyZl9iZWdpbl9lbGYuYworKysrIGIvbGliZHcvZHdhcmZfYmVnaW5fZWxmLmMKK0BAIC00Nyw2ICs0NywxNCBAQAorICNpZiBVU0VfWkxJQgorICMgaW5jbHVkZSA8ZW5kaWFuLmg+CisgIyBkZWZpbmUgY3JjMzIJCWxvc2VyX2NyYzMyCisrIyBpZm5kZWYgYmU2NHRvaAorKyMgIGluY2x1ZGUgPGJ5dGVzd2FwLmg+CisrIyAgaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorKyMgICBkZWZpbmUgYmU2NHRvaCh4KSBic3dhcF82NCAoeCkKKysjICBlbHNlCisrIyAgIGRlZmluZSBiZTY0dG9oKHgpICh4KQorKyMgIGVuZGlmCisrIyBlbmRpZgorICMgaW5jbHVkZSA8emxpYi5oPgorICMgdW5kZWYgY3JjMzIKKyAjZW5kaWYKK2RpZmYgLS1naXQgYS9saWJkdy9saWJkdy5oIGIvbGliZHcvbGliZHcuaAoraW5kZXggNDczZTFhMi4uNWE1MTFjZCAxMDA2NDQKKy0tLSBhL2xpYmR3L2xpYmR3LmgKKysrKyBiL2xpYmR3L2xpYmR3LmgKK0BAIC0xMDA0LDcgKzEwMDQsNyBAQCBleHRlcm4gRHdhcmZfT09NIGR3YXJmX25ld19vb21faGFuZGxlciAoRHdhcmYgKmRiZywgRHdhcmZfT09NIGhhbmRsZXIpOworIAorIAorIC8qIElubGluZSBvcHRpbWl6YXRpb25zLiAgKi8KKy0jaWZkZWYgX19PUFRJTUlaRV9fCisrI2lmIGRlZmluZWQgX19PUFRJTUlaRV9fICYmICEoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA9PSAyKQorIC8qIFJldHVybiBhdHRyaWJ1dGUgY29kZSBvZiBnaXZlbiBhdHRyaWJ1dGUuICAqLworIF9fbGliZHdfZXh0ZXJuX2lubGluZSB1bnNpZ25lZCBpbnQKKyBkd2FyZl93aGF0YXR0ciAoRHdhcmZfQXR0cmlidXRlICphdHRyKQorZGlmZiAtLWdpdCBhL2xpYmR3ZmwvQ2hhbmdlTG9nIGIvbGliZHdmbC9DaGFuZ2VMb2cKK2luZGV4IGE1MjUzZTIuLjU5YWJmYWMgMTAwNjQ0CistLS0gYS9saWJkd2ZsL0NoYW5nZUxvZworKysrIGIvbGliZHdmbC9DaGFuZ2VMb2cKK0BAIC03MDQsNiArNzA0LDIxIEBACisgCShkd2ZsX21vZHVsZV9hZGRyc3ltKSAoaV90b19zeW1maWxlKTogTmV3IGZ1bmN0aW9uLgorIAkoZHdmbF9tb2R1bGVfYWRkcnN5bSkgKHNlYXJjaF90YWJsZSk6IFVzZSBpdC4KKyAKKysyMDEzLTExLTA5ICBKYW4gS3JhdG9jaHZpbCAgPGphbi5rcmF0b2NodmlsQHJlZGhhdC5jb20+CisrCisrCU9sZGVyIE9TIGNvbXBhdGliaWxpdHkgYml0cy4KKysJKiBsaW51eC1jb3JlLWF0dGFjaC5jIChiZTY0dG9oLCBsZTY0dG9oLCBiZTMydG9oLCBsZTMydG9oKTogUHJvdmlkZQorKwlmYWxsYmFja3MgaWYgbm90IGRlZmluZWQgYnkgc3lzdGVtLgorKworKzIwMTMtMTEtMDkgIEphbiBLcmF0b2NodmlsICA8amFuLmtyYXRvY2h2aWxAcmVkaGF0LmNvbT4KKysKKysJSGFuZGxlIFQtc3RvcHBlZCBkZXRhY2ggZm9yIG9sZCBrZXJuZWxzLgorKwkqIGxpbnV4LXBpZC1hdHRhY2guYyAoc3RydWN0IHBpZF9hcmcpOiBOZXcgZmllbGQgc3RvcHBlZC4KKysJKHB0cmFjZV9hdHRhY2gpOiBOZXcgcGFyYW1ldGVyIHN0b3BwZWRwLiAgU2V0IGl0IGFwcHJvcHJpYXRlbHkuCisrCShwaWRfc2V0X2luaXRpYWxfcmVnaXN0ZXJzKTogUGFzcyB0aGUgbmV3IGZpZWxkLgorKwkocGlkX3RocmVhZF9kZXRhY2gpOiBIYW5kbGUgdGhlIGNhc2Ugb2YgU1RPUFBFRCBmb3Igb2xkIGtlcm5lbHMuCisrCShfX2xpYmR3ZmxfYXR0YWNoX3N0YXRlX2Zvcl9waWQpOiBJbml0aWFsaXplIFNUT1BQRUQuCisrCisgMjAxMy0xMS0wNyAgSmFuIEtyYXRvY2h2aWwgIDxqYW4ua3JhdG9jaHZpbEByZWRoYXQuY29tPgorIAkgICAgTWFyayBXaWVsYWFyZCAgPG1qd0ByZWRoYXQuY29tPgorIAorQEAgLTI0NjksNiArMjQ4NCwxMSBAQAorIAorIDIwMDUtMDctMjEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisrMjAwNS0wNy0yMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKyAJKiBNYWtlZmlsZS5hbSAobm9pbnN0X0hFQURFUlMpOiBBZGQgbG9jMmMuYy4KKyAKKyAJKiB0ZXN0Mi5jIChtYWluKTogQ2hlY2sgc3NjYW5mIHJlc3VsdCB0byBxdWlldCB3YXJuaW5nLgorZGlmZiAtLWdpdCBhL2xpYmR3ZmwvbGludXgtY29yZS1hdHRhY2guYyBiL2xpYmR3ZmwvbGludXgtY29yZS1hdHRhY2guYworaW5kZXggNWE3YjNiMy4uZDA1YWM3ZSAxMDA2NDQKKy0tLSBhL2xpYmR3ZmwvbGludXgtY29yZS1hdHRhY2guYworKysrIGIvbGliZHdmbC9saW51eC1jb3JlLWF0dGFjaC5jCitAQCAtMjksNiArMjksMzUgQEAKKyAjaW5jbHVkZSAibGliZHdmbFAuaCIKKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSAic3lzdGVtLmgiCisrI2luY2x1ZGUgPGVuZGlhbi5oPgorKyNpbmNsdWRlIDxieXRlc3dhcC5oPgorKyNpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCisrIyBpZm5kZWYgYmU2NHRvaAorKyMgIGRlZmluZSBiZTY0dG9oKHgpIGJzd2FwXzY0ICh4KQorKyMgZW5kaWYKKysjIGlmbmRlZiBsZTY0dG9oCisrIyAgZGVmaW5lIGxlNjR0b2goeCkgKHgpCisrIyBlbmRpZgorKyMgaWZuZGVmIGJlMzJ0b2gKKysjICBkZWZpbmUgYmUzMnRvaCh4KSBic3dhcF8zMiAoeCkKKysjIGVuZGlmCisrIyBpZm5kZWYgbGUzMnRvaAorKyMgIGRlZmluZSBsZTMydG9oKHgpICh4KQorKyMgZW5kaWYKKysjZWxzZQorKyMgaWZuZGVmIGJlNjR0b2gKKysjICBkZWZpbmUgYmU2NHRvaCh4KSAoeCkKKysjIGVuZGlmCisrIyBpZm5kZWYgbGU2NHRvaAorKyMgIGRlZmluZSBsZTY0dG9oKHgpIGJzd2FwXzY0ICh4KQorKyMgZW5kaWYKKysjIGlmbmRlZiBiZTMydG9oCisrIyAgZGVmaW5lIGJlMzJ0b2goeCkgKHgpCisrIyBlbmRpZgorKyMgaWZuZGVmIGxlMzJ0b2gKKysjICBkZWZpbmUgbGUzMnRvaCh4KSBic3dhcF8zMiAoeCkKKysjIGVuZGlmCisrI2VuZGlmCisgCisgI2luY2x1ZGUgIi4uL2xpYmR3L21lbW9yeS1hY2Nlc3MuaCIKKyAKK2RpZmYgLS1naXQgYS9saWJkd2ZsL2xpbnV4LXBpZC1hdHRhY2guYyBiL2xpYmR3ZmwvbGludXgtcGlkLWF0dGFjaC5jCitpbmRleCBhZTcxNzAyLi4wNzZiMmMzIDEwMDY0NAorLS0tIGEvbGliZHdmbC9saW51eC1waWQtYXR0YWNoLmMKKysrKyBiL2xpYmR3ZmwvbGludXgtcGlkLWF0dGFjaC5jCitAQCAtMjU1LDYgKzI1NSwxMSBAQCB2b2lkCisgaW50ZXJuYWxfZnVuY3Rpb24KKyBfX2xpYmR3ZmxfcHRyYWNlX2RldGFjaCAocGlkX3QgdGlkLCBib29sIHRpZF93YXNfc3RvcHBlZCkKKyB7CisrICAvLyBPbGRlciBrZXJuZWxzICh0ZXN0ZWQga2VybmVsLTIuNi4xOC0zNDguMTIuMS5lbDUueDg2XzY0KSBuZWVkIHNwZWNpYWwKKysgIC8vIGhhbmRsaW5nIG9mIHRoZSBkZXRhY2htZW50IHRvIGtlZXAgdGhlIHByb2Nlc3MgU3RhdGU6IFQgKHN0b3BwZWQpLgorKyAgaWYgKHRpZF93YXNfc3RvcHBlZCkKKysgICAgc3lzY2FsbCAoX19OUl90a2lsbCwgdGlkLCBTSUdTVE9QKTsKKysKKyAgIC8qIFRoaXMgaGFuZGxpbmcgaXMgbmVlZGVkIG9ubHkgb24gb2xkZXIgTGludXgga2VybmVscyBzdWNoIGFzCisgICAgICAyLjYuMzItMzU4LjIzLjIuZWw2LnBwYzY0LiAgTGF0ZXIga2VybmVscyBzdWNoIGFzCisgICAgICAzLjExLjctMjAwLmZjMTkueDg2XzY0IHJlbWVtYmVyIHRoZSBUIChzdG9wcGVkKSBzdGF0ZQorQEAgLTI2Miw2ICsyNjcsMTUgQEAgX19saWJkd2ZsX3B0cmFjZV9kZXRhY2ggKHBpZF90IHRpZCwgYm9vbCB0aWRfd2FzX3N0b3BwZWQpCisgICAgICBQVFJBQ0VfREVUQUNILiAgKi8KKyAgIHB0cmFjZSAoUFRSQUNFX0RFVEFDSCwgdGlkLCBOVUxMLAorIAkgICh2b2lkICopIChpbnRwdHJfdCkgKHRpZF93YXNfc3RvcHBlZCA/IFNJR1NUT1AgOiAwKSk7CisrCisrICBpZiAodGlkX3dhc19zdG9wcGVkKQorKyAgICB7CisrICAgICAgLy8gV2FpdCB0aWxsIHRoZSBTSUdTVE9QIHNldHRsZXMgZG93bi4KKysgICAgICBpbnQgaTsKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspCisrCWlmIChsaW51eF9wcm9jX3BpZF9pc19zdG9wcGVkICh0aWQpKQorKwkgIGJyZWFrOworKyAgICB9CisgfQorIAorIHN0YXRpYyB2b2lkCitkaWZmIC0tZ2l0IGEvbGliZWJsL0NoYW5nZUxvZyBiL2xpYmVibC9DaGFuZ2VMb2cKK2luZGV4IDUxYWU2MGYuLmFlZTAyMTcgMTAwNjQ0CistLS0gYS9saWJlYmwvQ2hhbmdlTG9nCisrKysgYi9saWJlYmwvQ2hhbmdlTG9nCitAQCAtNzgwLDYgKzc4MCwxMSBAQAorIAkqIE1ha2VmaWxlLmFtIChsaWJlYmxfKl9zb19TT1VSQ0VTKTogU2V0IHRvICQoKl9TUkNTKSBzbyBkZXBlbmRlbmN5CisgCXRyYWNraW5nIHdvcmtzIHJpZ2h0LgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0yMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogbGliZWJsX3g4Nl82NC5tYXA6IEFkZCB4ODZfNjRfY29yZV9ub3RlLgorZGlmZiAtLWdpdCBhL2xpYmVsZi9DaGFuZ2VMb2cgYi9saWJlbGYvQ2hhbmdlTG9nCitpbmRleCAzMDAxN2NkLi45Y2E5YzczIDEwMDY0NAorLS0tIGEvbGliZWxmL0NoYW5nZUxvZworKysrIGIvbGliZWxmL0NoYW5nZUxvZworQEAgLTM5OCw2ICszOTgsMTEgQEAKKyAKKyAJKiBlbGYta25vd2xlZGdlLmggKFNFQ1RJT05fU1RSSVBfUCk6IFJlbW92ZSA8IFNIVF9OVU0gY2hlY2suCisgCisrMjAxMS0wMy0xMCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBnbnVoYXNoX3hsYXRlLmggKGVsZl9jdnRfZ251aGFzaCk6IEF2b2lkIHBvc3QtaW5jcmVtZW50IGluIGJzd2FwXzMyCisrCWFyZ3VtZW50LCBzaW5jZSBzb21lIGltcGxlbWVudGF0aW9ucyBhcmUgYnVnZ3kgbWFjcm9zLgorKworIDIwMTEtMDItMjYgIE1hcmsgV2llbGFhcmQgIDxtandAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGZfZW5kLmMgKGVsZl9lbmQpOiBDYWxsIHJ3bG9ja191bmxvY2sgYmVmb3JlIHJ3bG9ja19maW5pLgorQEAgLTEwNzUsNiArMTA4MCwxMSBAQAorIAorIAkqIGVsZi5oOiBVcGRhdGUgZnJvbSBnbGliYy4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDUtMDggIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogZWxmX2JlZ2luLmMgKHJlYWRfZmlsZSkgW19NVURGTEFQXTogRG9uJ3QgdXNlIG1tYXAgZm9yIG5vdy4KK2RpZmYgLS1naXQgYS9saWJlbGYvY29tbW9uLmggYi9saWJlbGYvY29tbW9uLmgKK2luZGV4IDc0NGYxYmIuLjE4NWVhNTkgMTAwNjQ0CistLS0gYS9saWJlbGYvY29tbW9uLmgKKysrKyBiL2xpYmVsZi9jb21tb24uaAorQEAgLTEzOSw3ICsxMzksNyBAQCBsaWJlbGZfcmVsZWFzZV9hbGwgKEVsZiAqZWxmKQorICAgKFZhcikgPSAoc2l6ZW9mIChWYXIpID09IDEJCQkJCQkgICAgICBcCisgCSAgID8gKHVuc2lnbmVkIGNoYXIpIChWYXIpCQkJCQkgICAgICBcCisgCSAgIDogKHNpemVvZiAoVmFyKSA9PSAyCQkJCQkJICAgICAgXAorLQkgICAgICA/IGJzd2FwXzE2IChWYXIpCQkJCQkJICAgICAgXAorKwkgICAgICA/ICh1bnNpZ25lZCBzaG9ydCBpbnQpIGJzd2FwXzE2IChWYXIpCQkJICAgICAgXAorIAkgICAgICA6IChzaXplb2YgKFZhcikgPT0gNAkJCQkJICAgICAgXAorIAkJID8gYnN3YXBfMzIgKFZhcikJCQkJCSAgICAgIFwKKyAJCSA6IGJzd2FwXzY0IChWYXIpKSkpCitAQCAtMTQ4LDcgKzE0OCw3IEBAIGxpYmVsZl9yZWxlYXNlX2FsbCAoRWxmICplbGYpCisgICAoRHN0KSA9IChzaXplb2YgKFZhcikgPT0gMQkJCQkJCSAgICAgIFwKKyAJICAgPyAodW5zaWduZWQgY2hhcikgKFZhcikJCQkJCSAgICAgIFwKKyAJICAgOiAoc2l6ZW9mIChWYXIpID09IDIJCQkJCQkgICAgICBcCistCSAgICAgID8gYnN3YXBfMTYgKFZhcikJCQkJCQkgICAgICBcCisrCSAgICAgID8gKHVuc2lnbmVkIHNob3J0IGludCkgYnN3YXBfMTYgKFZhcikJCQkgICAgICBcCisgCSAgICAgIDogKHNpemVvZiAoVmFyKSA9PSA0CQkJCQkgICAgICBcCisgCQkgPyBic3dhcF8zMiAoVmFyKQkJCQkJICAgICAgXAorIAkJIDogYnN3YXBfNjQgKFZhcikpKSkKK2RpZmYgLS1naXQgYS9saWJlbGYvZ251aGFzaF94bGF0ZS5oIGIvbGliZWxmL2dudWhhc2hfeGxhdGUuaAoraW5kZXggMDRkOWNhMS4uM2UyNTkzNiAxMDA2NDQKKy0tLSBhL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmgKKysrKyBiL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmgKK0BAIC0xLDUgKzEsNSBAQAorIC8qIENvbnZlcnNpb24gZnVuY3Rpb25zIGZvciB2ZXJzaW9uaW5nIGluZm9ybWF0aW9uLgorLSAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTEgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDYuCisgCitAQCAtNjksNyArNjksOSBAQCBlbGZfY3Z0X2dudWhhc2ggKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbiwgaW50IGVuY29kZSkKKyAgIGRlc3QzMiA9IChFbGYzMl9Xb3JkICopICZkZXN0NjRbYml0bWFza193b3Jkc107CisgICB3aGlsZSAobGVuID49IDQpCisgICAgIHsKKy0gICAgICAqZGVzdDMyKysgPSBic3dhcF8zMiAoKnNyYzMyKyspOworKyAgICAgICpkZXN0MzIgPSBic3dhcF8zMiAoKnNyYzMyKTsKKysgICAgICArK2Rlc3QzMjsKKysgICAgICArK3NyYzMyOworICAgICAgIGxlbiAtPSA0OworICAgICB9CisgfQorZGlmZiAtLWdpdCBhL3NyYy9DaGFuZ2VMb2cgYi9zcmMvQ2hhbmdlTG9nCitpbmRleCAxNWU2ZmFlLi43ODUzNWM4IDEwMDY0NAorLS0tIGEvc3JjL0NoYW5nZUxvZworKysrIGIvc3JjL0NoYW5nZUxvZworQEAgLTE1OTgsOCArMTU5OCwxNiBAQAorIAkqIHJlYWRlbGYuYyAoYXR0cl9jYWxsYmFjayk6IFVzZSBwcmludF9ibG9jayBvbmx5IHdoZW4gd2UgZG9uJ3QgdXNlCisgCXByaW50X29wcy4KKyAKKysyMDA5LTA4LTE3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGxkLmg6IERpc2FibGUgZXh0ZXJuIGlubGluZXMgZm9yIEdDQyA0LjIuCisrCisgMjAwOS0wOC0xNCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBzdHJpbmdzLmMgKHJlYWRfYmxvY2spOiBDb25kaXRpb25hbGl6ZSBwb3NpeF9mYWR2aXNlIHVzZQorKwlvbiBbUE9TSVhfRkFEVl9TRVFVRU5USUFMXS4KKysJRnJvbSBQZXRyIFNhbGluZ2VyIDxQZXRyLlNhbGluZ2VyQHNlem5hbS5jej4uCisrCisgCSogYXIuYyAoZG9fb3Blcl9leHRyYWN0KTogVXNlIHBhdGhjb25mIGluc3RlYWQgb2Ygc3RhdGZzLgorIAorIDIwMDktMDgtMDEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorQEAgLTE3NjMsNiArMTc3MSw4IEBACisgCSogcmVhZGVsZi5jIChwcmludF9kZWJ1Z19mcmFtZV9zZWN0aW9uKTogVXNlIHQgaW5zdGVhZCBvZiBqIGZvcm1hdHMKKyAJZm9yIHB0cmRpZmZfdCBPRkZTRVQuCisgCisrCSogYWRkcjJsaW5lLmMgKGhhbmRsZV9hZGRyZXNzKTogVXNlICVhIGluc3RlYWQgb2YgJW0gZm9yIGNvbXBhdGliaWxpdHkuCisrCisgMjAwOS0wMS0yMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZWxmbGludC5jIChjaGVja19wcm9ncmFtX2hlYWRlcik6IEZpeCB0eXBvIGluIC5laF9mcmFtZV9oZHIgc2VjdGlvbgorQEAgLTE5NDYsNiArMTk1NiwxMSBAQAorIAl0aGF0IG1hdGNoZXMgaXRzIFBUX0xPQUQncyBwX2ZsYWdzICZ+IFBGX1cuICBPbiBzcGFyYywgUEZfWCByZWFsbHkKKyAJaXMgdmFsaWQgaW4gUkVMUk8uCisgCisrMjAwOC0wMy0wMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiByZWFkZWxmLmMgKGR1bXBfYXJjaGl2ZV9pbmRleCk6IFR3ZWFrIHBvcnRhYmlsaXR5IGhhY2sKKysJdG8gbWF0Y2ggW19fR05VQ19fIDwgNF0gdG9vLgorKworIDIwMDgtMDItMjkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogcmVhZGVsZi5jIChwcmludF9hdHRyaWJ1dGVzKTogQWRkIGEgY2FzdC4KK0BAIC0yMTk3LDYgKzIyMTIsOCBAQAorIAorIAkqIHJlYWRlbGYuYyAoaGV4X2R1bXApOiBGaXggcm91bmRpbmcgZXJyb3IgaW4gd2hpdGVzcGFjZSBjYWxjdWxhdGlvbi4KKyAKKysJKiBNYWtlZmlsZS5hbSAocmVhZGVsZl9ub19XZXJyb3IpOiBOZXcgdmFyaWFibGUuCisrCisgMjAwNy0xMC0xNSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBtYWtlLWRlYnVnLWFyY2hpdmUuaW46IE5ldyBmaWxlLgorQEAgLTI2MzYsNiArMjY1MywxMCBAQAorIAkqIGVsZmxpbnQuYyAodmFsaWRfZV9tYWNoaW5lKTogQWRkIEVNX0FMUEhBLgorIAlSZXBvcnRlZCBieSBDaHJpc3RpYW4gQWljaGluZ2VyIDxHcmVlazBAZ214Lm5ldD4uCisgCisrCSogc3RyaW5ncy5jIChtYXBfZmlsZSk6IERlZmluZSBQT1NJWF9NQURWX1NFUVVFTlRJQUwgdG8KKysJTUFEVl9TRVFVRU5USUFMIGlmIHVuZGVmaW5lZC4gIAlEb24ndCBjYWxsIHBvc2l4X21hZHZpc2UKKysJaWYgbmVpdGhlciBpcyBkZWZpbmVkLgorKworIDIwMDYtMDgtMDggIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGVsZmxpbnQuYyAoY2hlY2tfZHluYW1pYyk6IERvbid0IHJlcXVpcmUgRFRfSEFTSCBmb3IgRFRfU1lNVEFCLgorQEAgLTI3MTIsNiArMjczMywxMCBAQAorIAkqIE1ha2VmaWxlLmFtOiBBZGQgaGFja3MgdG8gY3JlYXRlIGRlcGVuZGVuY3kgZmlsZXMgZm9yIG5vbi1nZW5lcmljCisgCWxpbmtlci4KKyAKKysyMDA2LTA0LTA1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIHN0cmluZ3MuYyAoTUFQX1BPUFVMQVRFKTogRGVmaW5lIHRvIDAgaWYgdW5kZWZpbmVkLgorKworIDIwMDYtMDYtMTIgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGxkZ2VuZXJpYy5jIChsZF9nZW5lcmljX2dlbmVyYXRlX3NlY3Rpb25zKTogRG9uJ3QgY3JlYXRlIC5pbnRlcnAKK0BAIC0zMDYwLDYgKzMwODUsMTEgQEAKKyAJKiByZWFkZWxmLmMgKHByaW50X2RlYnVnX2xvY19zZWN0aW9uKTogRml4IGluZGVudGF0aW9uIGZvciBsYXJnZXIKKyAJYWRkcmVzcyBzaXplLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0zMCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiByZWFkZWxmLmMgKHByaW50X2RlYnVnX2xpbmVfc2VjdGlvbik6IFByaW50IHNlY3Rpb24gb2Zmc2V0IG9mIGVhY2gKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KK2luZGV4IGRiYWMzZWIuLjkwMjhhYTEgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9NYWtlZmlsZS5hbQorQEAgLTkwLDYgKzkwLDExIEBAIGVuZGlmCisgbGRnZW5lcmljX25vX1d1bnVzZWQgPSB5ZXMKKyBsZGdlbmVyaWNfbm9fV3N0YWNrX3VzYWdlID0geWVzCisgCisrIyBCdWdneSBvbGQgY29tcGlsZXJzIG9yIGxpYmMgaGVhZGVycy4KKytyZWFkZWxmX25vX1dlcnJvciA9IHllcworK3N0cmluZ3Nfbm9fV2Vycm9yID0geWVzCisrYWRkcjJsaW5lX25vX1dmb3JtYXQgPSB5ZXMKKysKKyAjIEJhZCwgYmFkIHN0YWNrIHVzYWdlLi4uCisgcmVhZGVsZl9ub19Xc3RhY2tfdXNhZ2UgPSB5ZXMKKyBubV9ub19Xc3RhY2tfdXNhZ2UgPSB5ZXMKK2RpZmYgLS1naXQgYS9zcmMvYWRkcjJsaW5lLmMgYi9zcmMvYWRkcjJsaW5lLmMKK2luZGV4IDBjZTg1NGYuLmQyZDBjOGMgMTAwNjQ0CistLS0gYS9zcmMvYWRkcjJsaW5lLmMKKysrKyBiL3NyYy9hZGRyMmxpbmUuYworQEAgLTYyMiwxMCArNjIyLDEwIEBAIGhhbmRsZV9hZGRyZXNzIChjb25zdCBjaGFyICpzdHJpbmcsIER3ZmwgKmR3ZmwpCisgICAgICAgYm9vbCBwYXJzZWQgPSBmYWxzZTsKKyAgICAgICBpbnQgaSwgajsKKyAgICAgICBjaGFyICpuYW1lID0gTlVMTDsKKy0gICAgICBpZiAoc3NjYW5mIChzdHJpbmcsICIoJW1bXildKSUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZhZGRyLCAmaSkgPT0gMgorKyAgICAgIGlmIChzc2NhbmYgKHN0cmluZywgIiglYVteKV0pJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmFkZHIsICZpKSA9PSAyCisgCSAgJiYgc3RyaW5nW2ldID09ICdcMCcpCisgCXBhcnNlZCA9IGFkanVzdF90b19zZWN0aW9uIChuYW1lLCAmYWRkciwgZHdmbCk7CistICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVtW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorKyAgICAgIHN3aXRjaCAoc3NjYW5mIChzdHJpbmcsICIlYVteLStdJW4lIiBQUklpTUFYICIlbiIsICZuYW1lLCAmaSwgJmFkZHIsICZqKSkKKyAJeworIAlkZWZhdWx0OgorIAkgIGJyZWFrOworZGlmZiAtLWdpdCBhL3NyYy9maW5kdGV4dHJlbC5jIGIvc3JjL2ZpbmR0ZXh0cmVsLmMKK2luZGV4IDI2NGEwNmIuLmQ3ZGUyMDIgMTAwNjQ0CistLS0gYS9zcmMvZmluZHRleHRyZWwuYworKysrIGIvc3JjL2ZpbmR0ZXh0cmVsLmMKK0BAIC01MDIsNyArNTAyLDExIEBAIHB0cmNvbXBhcmUgKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKKyAKKyAKKyBzdGF0aWMgdm9pZAorLWNoZWNrX3JlbCAoc2l6ZV90IG5zZWdtZW50cywgc3RydWN0IHNlZ21lbnRzIHNlZ21lbnRzW25zZWdtZW50c10sCisrY2hlY2tfcmVsIChzaXplX3QgbnNlZ21lbnRzLCBzdHJ1Y3Qgc2VnbWVudHMgc2VnbWVudHNbCisrI2lmIF9fR05VQ19fID49IDQKKysJCQkJCQkgICAgICBuc2VnbWVudHMKKysjZW5kaWYKKysJICAgXSwKKyAJICAgR0VsZl9BZGRyIGFkZHIsIEVsZiAqZWxmLCBFbGZfU2NuICpzeW1zY24sIER3YXJmICpkdywKKyAJICAgY29uc3QgY2hhciAqZm5hbWUsIGJvb2wgbW9yZV90aGFuX29uZSwgdm9pZCAqKmtub3duc3JjcykKKyB7CitkaWZmIC0tZ2l0IGEvc3JjL2xkLmggYi9zcmMvbGQuaAoraW5kZXggMjlmNDAzMS4uODY5NWMzMSAxMDA2NDQKKy0tLSBhL3NyYy9sZC5oCisrKysgYi9zcmMvbGQuaAorQEAgLTExMTQsNiArMTExNCw3IEBAIGV4dGVybiBib29sIGR5bmFtaWNhbGx5X2xpbmtlZF9wICh2b2lkKTsKKyAKKyAvKiBDaGVja2VkIHdoZXRoZXIgdGhlIHN5bWJvbCBpcyB1bmRlZmluZWQgYW5kIHJlZmVyZW5jZWQgZnJvbSBhIERTTy4gICovCisgZXh0ZXJuIGJvb2wgbGlua2VkX2Zyb21fZHNvX3AgKHN0cnVjdCBzY25pbmZvICpzY25pbmZvLCBzaXplX3Qgc3ltaWR4KTsKKysjaWYgZGVmaW5lZCBfX09QVElNSVpFX18gJiYgIShfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID09IDIpCisgI2lmZGVmIF9fR05VQ19TVERDX0lOTElORV9fCisgX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fKSkKKyAjZW5kaWYKK0BAIC0xMTMxLDUgKzExMzIsNiBAQCBsaW5rZWRfZnJvbV9kc29fcCAoc3RydWN0IHNjbmluZm8gKnNjbmluZm8sIHNpemVfdCBzeW1pZHgpCisgCisgICByZXR1cm4gc3ltLT5kZWZpbmVkICYmIHN5bS0+aW5fZHNvOworIH0KKysjZW5kaWYJLyogT3B0aW1pemluZyBhbmQgbm90IEdDQyA0LjIuICAqLworIAorICNlbmRpZgkvKiBsZC5oICovCitkaWZmIC0tZ2l0IGEvc3JjL3JlYWRlbGYuYyBiL3NyYy9yZWFkZWxmLmMKK2luZGV4IGI0Y2IzYTguLjYwNmQyMjAgMTAwNjQ0CistLS0gYS9zcmMvcmVhZGVsZi5jCisrKysgYi9zcmMvcmVhZGVsZi5jCitAQCAtNDM2NCwxMCArNDM2NCwxMiBAQCBsaXN0cHRyX2Jhc2UgKHN0cnVjdCBsaXN0cHRyICpwKQorICAgcmV0dXJuIGJhc2U7CisgfQorIAorK3N0YXRpYyBjb25zdCBjaGFyICpsaXN0cHRyX25hbWU7CisrCisgc3RhdGljIGludAorLWNvbXBhcmVfbGlzdHB0ciAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgdm9pZCAqYXJnKQorK2NvbXBhcmVfbGlzdHB0ciAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKKyB7CistICBjb25zdCBjaGFyICpuYW1lID0gYXJnOworKyAgY29uc3QgY2hhciAqY29uc3QgbmFtZSA9IGxpc3RwdHJfbmFtZTsKKyAgIHN0cnVjdCBsaXN0cHRyICpwMSA9ICh2b2lkICopIGE7CisgICBzdHJ1Y3QgbGlzdHB0ciAqcDIgPSAodm9pZCAqKSBiOworIAorQEAgLTQ0NjMsOCArNDQ2NSwxMSBAQCBzdGF0aWMgdm9pZAorIHNvcnRfbGlzdHB0ciAoc3RydWN0IGxpc3RwdHJfdGFibGUgKnRhYmxlLCBjb25zdCBjaGFyICpuYW1lKQorIHsKKyAgIGlmICh0YWJsZS0+biA+IDApCistICAgIHFzb3J0X3IgKHRhYmxlLT50YWJsZSwgdGFibGUtPm4sIHNpemVvZiB0YWJsZS0+dGFibGVbMF0sCistCSAgICAgJmNvbXBhcmVfbGlzdHB0ciwgKHZvaWQgKikgbmFtZSk7CisrICAgIHsKKysgICAgICBsaXN0cHRyX25hbWUgPSBuYW1lOworKyAgICAgIHFzb3J0ICh0YWJsZS0+dGFibGUsIHRhYmxlLT5uLCBzaXplb2YgdGFibGUtPnRhYmxlWzBdLAorKwkgICAgICZjb21wYXJlX2xpc3RwdHIpOworKyAgICB9CisgfQorIAorIHN0YXRpYyBib29sCitAQCAtOTU2MSw3ICs5NTY2LDcgQEAgZHVtcF9hcmNoaXZlX2luZGV4IChFbGYgKmVsZiwgY29uc3QgY2hhciAqZm5hbWUpCisgCSAgaWYgKHVubGlrZWx5IChlbGZfcmFuZCAoZWxmLCBhc19vZmYpID09IDApCisgCSAgICAgIHx8IHVubGlrZWx5ICgoc3ViZWxmID0gZWxmX2JlZ2luICgtMSwgRUxGX0NfUkVBRF9NTUFQLCBlbGYpKQorIAkJCSAgID09IE5VTEwpKQorLSNpZiBfX0dMSUJDX18gPCAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPCA3KQorKyNpZiBfX0dMSUJDX18gPCAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPCA3KSB8fCBfX0dOVUNfXyA8IDQKKyAJICAgIHdoaWxlICgxKQorICNlbmRpZgorIAkgICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorZGlmZiAtLWdpdCBhL3NyYy9zdHJpbmdzLmMgYi9zcmMvc3RyaW5ncy5jCitpbmRleCBiMmJjZTdiLi5mZTBhYjZjIDEwMDY0NAorLS0tIGEvc3JjL3N0cmluZ3MuYworKysrIGIvc3JjL3N0cmluZ3MuYworQEAgLTQzLDYgKzQzLDEwIEBACisgCisgI2luY2x1ZGUgPHN5c3RlbS5oPgorIAorKyNpZm5kZWYgTUFQX1BPUFVMQVRFCisrIyBkZWZpbmUgTUFQX1BPUFVMQVRFIDAKKysjZW5kaWYKKysKKyAKKyAvKiBQcm90b3R5cGVzIG9mIGxvY2FsIGZ1bmN0aW9ucy4gICovCisgc3RhdGljIGludCByZWFkX2ZkIChpbnQgZmQsIGNvbnN0IGNoYXIgKmZuYW1lLCBvZmY2NF90IGZkbGVuKTsKK0BAIC00ODksOCArNDkzLDEzIEBAIG1hcF9maWxlIChpbnQgZmQsIG9mZjY0X3Qgc3RhcnRfb2ZmLCBvZmY2NF90IGZkbGVuLCBzaXplX3QgKm1hcF9zaXplcCkKKyAJCSAgICBmZCwgc3RhcnRfb2ZmKTsKKyAgICAgICBpZiAobWVtICE9IE1BUF9GQUlMRUQpCisgCXsKKysjaWYgIWRlZmluZWQgUE9TSVhfTUFEVl9TRVFVRU5USUFMICYmIGRlZmluZWQgTUFEVl9TRVFVRU5USUFMCisrIyBkZWZpbmUgUE9TSVhfTUFEVl9TRVFVRU5USUFMIE1BRFZfU0VRVUVOVElBTAorKyNlbmRpZgorKyNpZmRlZiBQT1NJWF9NQURWX1NFUVVFTlRJQUwKKyAJICAvKiBXZSB3aWxsIGdvIHRocm91Z2ggdGhlIG1hcHBpbmcgc2VxdWVudGlhbGx5LiAgKi8KKyAJICAodm9pZCkgcG9zaXhfbWFkdmlzZSAobWVtLCBtYXBfc2l6ZSwgUE9TSVhfTUFEVl9TRVFVRU5USUFMKTsKKysjZW5kaWYKKyAJICBicmVhazsKKyAJfQorICAgICAgIGlmIChlcnJubyAhPSBFSU5WQUwgJiYgZXJybm8gIT0gRU5PTUVNKQorQEAgLTU4MSw5ICs1OTAsMTEgQEAgcmVhZF9ibG9jayAoaW50IGZkLCBjb25zdCBjaGFyICpmbmFtZSwgb2ZmNjRfdCBmZGxlbiwgb2ZmNjRfdCBmcm9tLCBvZmY2NF90IHRvKQorICAgICAgIGVsZm1hcF9vZmYgPSBmcm9tICYgfihwcyAtIDEpOworICAgICAgIGVsZm1hcF9iYXNlID0gZWxmbWFwID0gbWFwX2ZpbGUgKGZkLCBlbGZtYXBfb2ZmLCBmZGxlbiwgJmVsZm1hcF9zaXplKTsKKyAKKysjaWZkZWYgUE9TSVhfRkFEVl9TRVFVRU5USUFMCisgICAgICAgaWYgKHVubGlrZWx5IChlbGZtYXAgPT0gTUFQX0ZBSUxFRCkpCisgCS8qIExldCB0aGUga2VybmVsIGtub3cgd2UgYXJlIGdvaW5nIHRvIHJlYWQgZXZlcnl0aGluZyBpbiBzZXF1ZW5jZS4gICovCisgCSh2b2lkKSBwb3NpeF9mYWR2aXNlIChmZCwgMCwgMCwgUE9TSVhfRkFEVl9TRVFVRU5USUFMKTsKKysjZW5kaWYKKyAgICAgfQorIAorICAgaWYgKHVubGlrZWx5IChlbGZtYXAgPT0gTUFQX0ZBSUxFRCkpCitkaWZmIC0tZ2l0IGEvc3JjL3N0cmlwLmMgYi9zcmMvc3RyaXAuYworaW5kZXggNWU2OTMzNC4uOGJkMTc5MCAxMDA2NDQKKy0tLSBhL3NyYy9zdHJpcC5jCisrKysgYi9zcmMvc3RyaXAuYworQEAgLTQ0LDYgKzQ0LDEyIEBACisgI2luY2x1ZGUgPGxpYmVibC5oPgorICNpbmNsdWRlIDxzeXN0ZW0uaD4KKyAKKysjaWZkZWYgSEFWRV9GVVRJTUVTCisrIyBkZWZpbmUgRlVUSU1FUyhmZCwgZm5hbWUsIHR2cCkgZnV0aW1lcyAoZmQsIHR2cCkKKysjZWxzZQorKyMgZGVmaW5lIEZVVElNRVMoZmQsIGZuYW1lLCB0dnApIHV0aW1lcyAoZm5hbWUsIHR2cCkKKysjZW5kaWYKKysKKyB0eXBlZGVmIHVpbnQ4X3QgR0VsZl9CeXRlOworIAorIC8qIE5hbWUgYW5kIHZlcnNpb24gb2YgcHJvZ3JhbS4gICovCitkaWZmIC0tZ2l0IGEvdGVzdHMvQ2hhbmdlTG9nIGIvdGVzdHMvQ2hhbmdlTG9nCitpbmRleCAxOTg3OGFjLi42ODE1MDI4IDEwMDY0NAorLS0tIGEvdGVzdHMvQ2hhbmdlTG9nCisrKysgYi90ZXN0cy9DaGFuZ2VMb2cKK0BAIC02MDksNiArNjA5LDEzIEBACisgCisgMjAxMy0xMi0wMiAgSmFuIEtyYXRvY2h2aWwgIDxqYW4ua3JhdG9jaHZpbEByZWRoYXQuY29tPgorIAorKwlIYW5kbGUgVC1zdG9wcGVkIGRldGFjaCBmb3Igb2xkIGtlcm5lbHMuCisrCSogYmFja3RyYWNlLmM6IEluY2x1ZGUgc3lzL3N5c2NhbGwuaC4KKysJKGxpbnV4X3Byb2NfcGlkX2lzX3N0b3BwZWQpOiBOZXcgZnVuY3Rpb24uCisrCShwdHJhY2VfZGV0YWNoX3N0b3BwZWQpOiBIYW5kbGUgb2xkIGtlcm5lbHMuCisrCisrMjAxMy0xMi0wMiAgSmFuIEtyYXRvY2h2aWwgIDxqYW4ua3JhdG9jaHZpbEByZWRoYXQuY29tPgorKworIAkqIE1ha2VmaWxlLmFtIChjaGVja19QUk9HUkFNUyk6IEFkZCBiYWNrdHJhY2UsIGJhY2t0cmFjZS1jaGlsZCwKKyAJYmFja3RyYWNlLWRhdGEgYW5kIGJhY2t0cmFjZS1kd2FyZi4KKyAJKEJVSUxUX1NPVVJDRVMsIGNsZWFuLWxvY2FsLCBiYWNrdHJhY2UtY2hpbGQtYmlhcmNoKTogTmV3LgorQEAgLTE0NzMsNiArMTQ4MCw4IEBACisgCisgMjAwOC0wMS0yMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBsaW5lMmFkZHIuYyAobWFpbik6IFJldmVydCBsYXN0IGNoYW5nZS4KKysKKyAJKiB0ZXN0ZmlsZTQ1LlMuYnoyOiBBZGQgdGVzdHMgZm9yIGNsdHEsIGNxdG8uCisgCSogdGVzdGZpbGU0NS5leHBlY3QuYnoyOiBBZGp1c3QuCisgCitAQCAtMjE4MSw2ICsyMTkwLDExIEBACisgCSogTWFrZWZpbGUuYW0gKFRFU1RTKTogQWRkIHJ1bi1lbGZsaW50LXRlc3Quc2guCisgCShFWFRSQV9ESVNUKTogQWRkIHJ1bi1lbGZsaW50LXRlc3Quc2ggYW5kIHRlc3RmaWxlMTguYnoyLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0yNCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZ2V0LWZpbGVzLmMgKG1haW4pOiBVc2UgY29ycmVjdCBmb3JtYXQgc3BlY2lmaWVyLgorZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDQyNWY4Y2QuLjY5NzYwYTQgMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0zODIsNiArMzgyLDcgQEAgZ2V0X2xpbmVzX0xEQUREID0gJChsaWJkdykgJChsaWJlbGYpCisgZ2V0X2ZpbGVzX0xEQUREID0gJChsaWJkdykgJChsaWJlbGYpCisgZ2V0X2FyYW5nZXNfTERBREQgPSAkKGxpYmR3KSAkKGxpYmVsZikKKyBhbGxmY3RzX0xEQUREID0gJChsaWJkdykgJChsaWJlbGYpCisrbGluZTJhZGRyX25vX1dmb3JtYXQgPSB5ZXMKKyBsaW5lMmFkZHJfTERBREQgPSAkKGxpYmR3KSAkKGFyZ3BfTERBREQpCisgYWRkcnNjb3Blc19MREFERCA9ICQobGliZHcpICQoYXJncF9MREFERCkKKyBmdW5jc2NvcGVzX0xEQUREID0gJChsaWJkdykgJChhcmdwX0xEQUREKQorZGlmZiAtLWdpdCBhL3Rlc3RzL2JhY2t0cmFjZS5jIGIvdGVzdHMvYmFja3RyYWNlLmMKK2luZGV4IGFiZDU2YWIuLjZhN2M2NjEgMTAwNjQ0CistLS0gYS90ZXN0cy9iYWNrdHJhY2UuYworKysrIGIvdGVzdHMvYmFja3RyYWNlLmMKK0BAIC0zNiw2ICszNiw3IEBACisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxhcmdwLmg+CisrI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisgI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGR3ZmwpCisgCisgI2lmbmRlZiBfX2xpbnV4X18KK2RpZmYgLS1naXQgYS90ZXN0cy9saW5lMmFkZHIuYyBiL3Rlc3RzL2xpbmUyYWRkci5jCitpbmRleCBlMGQ2NWQzLi43YzE3MWI5IDEwMDY0NAorLS0tIGEvdGVzdHMvbGluZTJhZGRyLmMKKysrKyBiL3Rlc3RzL2xpbmUyYWRkci5jCitAQCAtMTI0LDcgKzEyNCw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgIHsKKyAgICAgICBzdHJ1Y3QgYXJncyBhID0geyAuYXJnID0gYXJndltjbnRdIH07CisgCistICAgICAgc3dpdGNoIChzc2NhbmYgKGEuYXJnLCAiJW1bXjpdOiVkIiwgJmEuZmlsZSwgJmEubGluZSkpCisrICAgICAgc3dpdGNoIChzc2NhbmYgKGEuYXJnLCAiJWFbXjpdOiVkIiwgJmEuZmlsZSwgJmEubGluZSkpCisgCXsKKyAJZGVmYXVsdDoKKyAJY2FzZSAwOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvc2NhbmYtZm9ybWF0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvc2NhbmYtZm9ybWF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwODUxOWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9zY2FuZi1mb3JtYXQucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbTogS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorU3ViamVjdDogVXNlICVtWyBpbnN0ZWFkIG9mICVhWyBpbiBzY2FuZigpCisKKyVhIHdhcyBhIGdudSBleHRlbnRpb24sIGJ1dCBDOTkgbWFkZSB0aGlzIGEgZmxvYXQuICBTbyBpdCBnb3QKK2NoYW5nZWQgdG8gJW0gKHN1cHBvcnRlZCBieSBnbGliYyAyLjcpLCBidXQgJWFbIGFuZCAlYXMgYXJlCitzdGlsbCBzdXBwb3J0ZWQgYnkgZ2xpYmMuICBUaGUgcG9ydGFiaWxpdHkgYnJhbmNoIGNoYW5nZWQgdGhpcworZnJvbSAlbSB0byAlYSBhZ2FpbiBzaW5jZSB0aGF0J3Mgc3VwcG9ydGVkIGJ5IG1vcmUgdmVyc2lvbnMgb2YKK2dsaWJjLiAgSG93ZXZlciBnY2MgZ2l2ZXMgYSB3YXJuaW5nIGFib3V0IHRoaXMgdXNpbmcgLVdmb3JtYXQKK2FuZCB3ZSBoYXZlIGEgbmV3IGVub3VnaCBsaWJjIHRvIHVzZSAlbS4KKworSW5kZXg6IGVsZnV0aWxzLTAuMTUzL3NyYy9hZGRyMmxpbmUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTUzLm9yaWcvc3JjL2FkZHIybGluZS5jCTIwMTItMDItMjQgMjI6Mjk6NTAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTMvc3JjL2FkZHIybGluZS5jCTIwMTItMDItMjQgMjI6Mjk6NTIuMDAwMDAwMDAwICswMDAwCitAQCAtNDU1LDEwICs0NTUsMTAgQEAKKyAgICAgICBib29sIHBhcnNlZCA9IGZhbHNlOworICAgICAgIGludCBpLCBqOworICAgICAgIGNoYXIgKm5hbWUgPSBOVUxMOworLSAgICAgIGlmIChzc2NhbmYgKHN0cmluZywgIiglYVteKV0pJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmFkZHIsICZpKSA9PSAyCisrICAgICAgaWYgKHNzY2FuZiAoc3RyaW5nLCAiKCVtW14pXSklIiBQUklpTUFYICIlbiIsICZuYW1lLCAmYWRkciwgJmkpID09IDIKKyAJICAmJiBzdHJpbmdbaV0gPT0gJ1wwJykKKyAJcGFyc2VkID0gYWRqdXN0X3RvX3NlY3Rpb24gKG5hbWUsICZhZGRyLCBkd2ZsKTsKKy0gICAgICBzd2l0Y2ggKHNzY2FuZiAoc3RyaW5nLCAiJWFbXi0rXSVuJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmksICZhZGRyLCAmaikpCisrICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVtW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorIAl7CisgCWRlZmF1bHQ6CisgCSAgYnJlYWs7CitJbmRleDogZWxmdXRpbHMtMC4xNTMvdGVzdHMvbGluZTJhZGRyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1My5vcmlnL3Rlc3RzL2xpbmUyYWRkci5jCTIwMTItMDItMjQgMjI6Mjk6NTAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTMvdGVzdHMvbGluZTJhZGRyLmMJMjAxMi0wMi0yNCAyMjoyOTo1Mi4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMzIsNyArMTMyLDcgQEAKKyAgICAgeworICAgICAgIHN0cnVjdCBhcmdzIGEgPSB7IC5hcmcgPSBhcmd2W2NudF0gfTsKKyAKKy0gICAgICBzd2l0Y2ggKHNzY2FuZiAoYS5hcmcsICIlYVteOl06JWQiLCAmYS5maWxlLCAmYS5saW5lKSkKKysgICAgICBzd2l0Y2ggKHNzY2FuZiAoYS5hcmcsICIlbVteOl06JWQiLCAmYS5maWxlLCAmYS5saW5lKSkKKyAJeworIAlkZWZhdWx0OgorIAljYXNlIDA6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZTU3OTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZgpAQCAtMCwwICsxLDM5IEBACitPbiBtYW55IGFyY2hpdGVjdHVyZXMgdGhpcyB0ZXN0IGZhaWxzIGJlY2F1c2UgYmluYXJpZXMvbGlicyBwcm9kdWNlZCBieQorYmludXRpbHMgZG9uJ3QgcGFzcyBlbGZsaW50LiBIb3dldmVyIGVsZnV0aWxzIHNob3VsZG4ndCBGVEJGUyBiZWNhdXNlIG9mIHRoaXMuCisKK1NvIHdlIHJ1biB0aGUgdGVzdHMgb24gYWxsIGFyY2hzIHRvIHNlZSB3aGF0IGJyZWFrcywgYnV0IGlmIGl0IGJyZWFrcyB3ZSBpZ25vcmUKK3RoZSByZXN1bHQgKGV4aXRjb2RlIDc3IG1lYW5zOiB0aGlzIHRlc3Qgd2FzIHNraXBwZWQpLgorCitJbmRleDogZWxmdXRpbHMtMC4xNTYvdGVzdHMvcnVuLWVsZmxpbnQtc2VsZi5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU2Lm9yaWcvdGVzdHMvcnVuLWVsZmxpbnQtc2VsZi5zaAkyMDEzLTA3LTI4IDE0OjM1OjM2LjAwMDAwMDAwMCArMDIwMAorKysrIGVsZnV0aWxzLTAuMTU2L3Rlc3RzL3J1bi1lbGZsaW50LXNlbGYuc2gJMjAxMy0wNy0yOCAxNDozNjoxMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xOCw0ICsxOCw0IEBACisgCisgLiAkc3JjZGlyL3Rlc3Qtc3Vici5zaAorIAorLXRlc3RydW5fb25fc2VsZiAke2Fic190b3BfYnVpbGRkaXJ9L3NyYy9lbGZsaW50IC0tcXVpZXQgLS1nbnUtbGQKKyt0ZXN0cnVuX29uX3NlbGZfc2tpcCAke2Fic190b3BfYnVpbGRkaXJ9L3NyYy9lbGZsaW50IC0tcXVpZXQgLS1nbnUtbGQKK0luZGV4OiBlbGZ1dGlscy0wLjE1Ni90ZXN0cy90ZXN0LXN1YnIuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1Ni5vcmlnL3Rlc3RzL3Rlc3Qtc3Vici5zaAkyMDEzLTA3LTI4IDE0OjM1OjM2LjAwMDAwMDAwMCArMDIwMAorKysrIGVsZnV0aWxzLTAuMTU2L3Rlc3RzL3Rlc3Qtc3Vici5zaAkyMDEzLTA3LTI4IDE0OjM1OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTE0OSwzICsxNDksMTggQEAKKyAgICMgT25seSBleGl0IGlmIHNvbWV0aGluZyBmYWlsZWQKKyAgIGlmIHRlc3QgJGV4aXRfc3RhdHVzICE9IDA7IHRoZW4gZXhpdCAkZXhpdF9zdGF0dXM7IGZpCisgfQorKworKyMgU2FtZSBhcyB0ZXN0cnVuX29uX3NlbGYoKSwgYnV0IHNraXAgb24gZmFpbHVyZS4KKyt0ZXN0cnVuX29uX3NlbGZfc2tpcCgpCisreworKyAgZXhpdF9zdGF0dXM9MAorKworKyAgZm9yIGZpbGUgaW4gJHNlbGZfdGVzdF9maWxlczsgZG8KKysgICAgICB0ZXN0cnVuICQqICRmaWxlIFwKKysJICB8fCB7IGVjaG8gIioqKiBmYWlsdXJlIGluICQqICRmaWxlIjsgZXhpdF9zdGF0dXM9Nzc7IH0KKysgIGRvbmUKKysKKysgICMgT25seSBleGl0IGlmIHNvbWV0aGluZyBmYWlsZWQKKysgIGlmIHRlc3QgJGV4aXRfc3RhdHVzICE9IDA7IHRoZW4gZXhpdCAkZXhpdF9zdGF0dXM7IGZpCisrfQorKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvdWNsaWJjLXN1cHBvcnQtZm9yLWVsZnV0aWxzLTAuMTYxLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvdWNsaWJjLXN1cHBvcnQtZm9yLWVsZnV0aWxzLTAuMTYxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNTMzYmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My91Y2xpYmMtc3VwcG9ydC1mb3ItZWxmdXRpbHMtMC4xNjEucGF0Y2gKQEAgLTAsMCArMSwxMDYgQEAKK0Zyb20gM2RhZWMyZGQxMWEwNDk1NWY5NWU4ZjY1YTQ4ODIwMTAzZDg0ZGJlYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1bmxpbmcgWmhlbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorRGF0ZTogVGh1LCA5IEFwciAyMDE1IDEyOjEyOjQ5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHVjbGliYyBzdXBwb3J0IGZvciBlbGZ1dGlscyAwLjE2MQorCitvbiB1Y2xpYmMgc3lzdGVtcyBsaWJpbnRsIGFuZCBsaWJ1YXJncCBhcmUgc2VwYXJhdGUgZnJvbSBsaWJjLgorc28gdGhleSBuZWVkIHRvIGJlIHNwZWNpZmllZCBvbiBjb21tYW5kbGluZSB3aGVuIHdlIHVzZSBwcm94eS1saWJpbnRsCit0aGVuIGxpYmludGwgaXMgYSBzdGF0aWMgYXJjaGl2ZSBzbyBpdCBzaG91bGQgYmUgbGlzdGVkIGxhc3Qgc2luY2UKK2VsZnV0aWxzIGRvZXMgbm90IHJlc3BlY3QgZGlzYWJsZS1ubHMgd2UgbmVlZCB0byBsaW5rIGluIGxpYmludGwKKworV2UgYWRkIGEgbmV3IG9wdGlvbiAtLWVuYWJsZS11Y2xpYmMgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGNvbnRyb2wKK3RoZSB1Y2xpYmMgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZHVyaW5nIGJ1aWxkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3VjbGliYyBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtPgorU2lnbmVkLW9mZi1ieTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitbSnVubGluZyBaaGVuZzoKKyAtIGFkanVzdCBjb250ZXh0CitdCistLS0KKyBjb25maWd1cmUuYWMgICAgICAgfCA4ICsrKysrKysrCisgbGliY3B1L01ha2VmaWxlLmFtIHwgNCArKysrCisgbGliZHcvTWFrZWZpbGUuYW0gIHwgNyArKysrKystCisgbGliZWxmL01ha2VmaWxlLmFtIHwgNSArKysrKworIDQgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBhMWFkNmRiLi44MWZjMzNmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC03MCw2ICs3MCwxNCBAQCBBU19JRihbdGVzdCAiJHVzZV9sb2NrcyIgPSB5ZXNdLAorIAorIEFIX1RFTVBMQVRFKFtVU0VfTE9DS1NdLCBbRGVmaW5lZCBpZiBsaWJyYXJpZXMgc2hvdWxkIGJlIHRocmVhZC1zYWZlLl0pCisgCisrQUNfQVJHX0VOQUJMRShbdWNsaWJjXSwKKytBU19IRUxQX1NUUklORyhbLS1lbmFibGUtdWNsaWJjXSwgW1VzZSB1Y2xpYmMgZm9yIHN5c3RlbSBsaWJyYXJpZXNdKSwKKyt1c2VfdWNsaWJjPXllcywgdXNlX3VjbGliYz1ubykKKytBTV9DT05ESVRJT05BTChVU0VfVUNMSUJDLCB0ZXN0ICIkdXNlX3VjbGliYyIgPSB5ZXMpCisrQVNfSUYoW3Rlc3QgIiR1c2VfdWNsaWJjIiA9IHllc10sIFtBQ19ERUZJTkUoVVNFX1VDTElCQyldKQorKworK0FIX1RFTVBMQVRFKFtVU0VfVUNMSUJDXSwgW0RlZmluZWQgaWYgdWNsaWJjIGxpYnJhcmllcyBhcmUgdXNlZC5dKQorKworIEFDX1BST0dfQ0MKKyBBQ19QUk9HX1JBTkxJQgorIEFDX1BST0dfWUFDQworZGlmZiAtLWdpdCBhL2xpYmNwdS9NYWtlZmlsZS5hbSBiL2xpYmNwdS9NYWtlZmlsZS5hbQoraW5kZXggM2JlY2NmMy4uOWJhNmMwNCAxMDA2NDQKKy0tLSBhL2xpYmNwdS9NYWtlZmlsZS5hbQorKysrIGIvbGliY3B1L01ha2VmaWxlLmFtCitAQCAtODAsNiArODAsMTAgQEAgaTM4Nl9wYXJzZV9DRkxBR1MgPSAtRE5NTkVTPSJgd2MgLWwgPCBpMzg2Lm1uZW1vbmljc2AiCisgaTM4Nl9sZXgubzogaTM4Nl9wYXJzZS5oCisgaTM4Nl9nZW5kaXNfTERBREQgPSAkKGxpYmV1KSAtbG0KKyAKKytpZiBVU0VfVUNMSUJDCisraTM4Nl9nZW5kaXNfTERBREQgKz0gLWx1YXJncCAtbGludGwKKytlbmRpZgorKworIGkzODZfcGFyc2UuaDogaTM4Nl9wYXJzZS5jIDsKKyAKKyBFWFRSQV9ESVNUID0gZGVmcy9pMzg2CitkaWZmIC0tZ2l0IGEvbGliZHcvTWFrZWZpbGUuYW0gYi9saWJkdy9NYWtlZmlsZS5hbQoraW5kZXggODg3ZGE2Yi4uZDMxYjQyOCAxMDA2NDQKKy0tLSBhL2xpYmR3L01ha2VmaWxlLmFtCisrKysgYi9saWJkdy9NYWtlZmlsZS5hbQorQEAgLTEwMiw2ICsxMDIsMTEgQEAgZW5kaWYKKyBsaWJkd19waWNfYV9TT1VSQ0VTID0KKyBhbV9saWJkd19waWNfYV9PQkpFQ1RTID0gJChsaWJkd19hX1NPVVJDRVM6LmM9Lm9zKQorIAorK2xpYmR3X3NvX0xETElCUyA9CisraWYgVVNFX1VDTElCQworK2xpYmR3X3NvX0xETElCUyArPSAtbGludGwgLWx1YXJncAorK2VuZGlmCisrCisgbGliZHdfc29fU09VUkNFUyA9CisgbGliZHcuc28kKEVYRUVYVCk6ICQoc3JjZGlyKS9saWJkdy5tYXAgbGliZHdfcGljLmEgLi4vbGliZHdlbGYvbGliZHdlbGZfcGljLmEgXAorIAkgIC4uL2xpYmR3ZmwvbGliZHdmbF9waWMuYSAuLi9saWJlYmwvbGliZWJsLmEgXAorQEAgLTExMiw3ICsxMTcsNyBAQCBsaWJkdy5zbyQoRVhFRVhUKTogJChzcmNkaXIpL2xpYmR3Lm1hcCBsaWJkd19waWMuYSAuLi9saWJkd2VsZi9saWJkd2VsZl9waWMuYSBcCisgCQktV2wsLS1lbmFibGUtbmV3LWR0YWdzLC1ycGF0aCwkKHBrZ2xpYmRpcikgXAorIAkJLVdsLC0tdmVyc2lvbi1zY3JpcHQsJDwsLS1uby11bmRlZmluZWQgXAorIAkJLVdsLC0td2hvbGUtYXJjaGl2ZSAkKGZpbHRlci1vdXQgJDwsJF4pIC1XbCwtLW5vLXdob2xlLWFyY2hpdmVcCistCQktbGRsICQoemlwX0xJQlMpCisrCQktbGRsICQoemlwX0xJQlMpICQobGliZHdfc29fTERMSUJTKQorIAlAJCh0ZXh0cmVsX2NoZWNrKQorIAlsbiAtZnMgJEAgJEAuJChWRVJTSU9OKQorIAorZGlmZiAtLWdpdCBhL2xpYmVsZi9NYWtlZmlsZS5hbSBiL2xpYmVsZi9NYWtlZmlsZS5hbQoraW5kZXggYWZjYjJhYS4uMDI4MzZhMSAxMDA2NDQKKy0tLSBhL2xpYmVsZi9NYWtlZmlsZS5hbQorKysrIGIvbGliZWxmL01ha2VmaWxlLmFtCitAQCAtOTMsNyArOTMsMTIgQEAgbGliZWxmX2FfU09VUkNFUyA9IGVsZl92ZXJzaW9uLmMgZWxmX2hhc2guYyBlbGZfZXJyb3IuYyBlbGZfZmlsbC5jIFwKKyBsaWJlbGZfcGljX2FfU09VUkNFUyA9CisgYW1fbGliZWxmX3BpY19hX09CSkVDVFMgPSAkKGxpYmVsZl9hX1NPVVJDRVM6LmM9Lm9zKQorIAorKworIGxpYmVsZl9zb19MRExJQlMgPQorK2lmIFVTRV9VQ0xJQkMKKytsaWJlbGZfc29fTERMSUJTICs9IC1saW50bCAtbHVhcmdwCisrZW5kaWYKKysKKyBpZiBVU0VfTE9DS1MKKyBsaWJlbGZfc29fTERMSUJTICs9IC1scHRocmVhZAorIGVuZGlmCistLSAKKzEuOC4zLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvRml4X2VsZl9jdnRfZ3VuaGFzaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzL0ZpeF9lbGZfY3Z0X2d1bmhhc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg2MWU4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzL0ZpeF9lbGZfY3Z0X2d1bmhhc2gucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRml4IGVsZl9jdnRfZ3VuaGFzaCBpZiBkZXN0IGFuZCBzcmMgYXJlIHNhbWUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGUgJ2Rlc3QnIGFuZCAnc3JjJyBjYW4gYmUgc2FtZSwgd2UgbmVlZCB0byBzYXZlIHRoZSB2YWx1ZSBvZiBzcmMzMlsyXQorYmVmb3JlIHN3YXBpbmcgaXQuCisKK1NpZ25lZC1vZmYtYnk6IEJhb3NoYW4gUGFuZyA8QmFvU2hhbi5QYW5nQHdpbmRyaXZlci5jb20+CitkaWZmIC0tZ2l0IGEvbGliZWxmL2dudWhhc2hfeGxhdGUuaCBiL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmgKK2luZGV4IDZmYWYxMTMuLjA0ZDljYTEgMTAwNjQ0CistLS0gYS9saWJlbGYvZ251aGFzaF94bGF0ZS5oCisrKysgYi9saWJlbGYvZ251aGFzaF94bGF0ZS5oCitAQCAtNDAsNiArNDAsNyBAQCBlbGZfY3Z0X2dudWhhc2ggKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbiwgaW50IGVuY29kZSkKKyAgICAgIHdvcmRzLiAgV2UgbXVzdCBkZXRhbmdsZSB0aGVtIGhlcmUuICAgKi8KKyAgIEVsZjMyX1dvcmQgKmRlc3QzMiA9IGRlc3Q7CisgICBjb25zdCBFbGYzMl9Xb3JkICpzcmMzMiA9IHNyYzsKKysgIEVsZjMyX1dvcmQgc2F2ZV9zcmMzMl8yID0gc3JjMzJbMl07IC8vIGRlc3QgY291bGQgYmUgZXF1YWwgdG8gc3JjCisgCisgICAvKiBGaXJzdCBmb3VyIGNvbnRyb2wgd29yZHMsIDMyIGJpdHMuICAqLworICAgZm9yICh1bnNpZ25lZCBpbnQgY250ID0gMDsgY250IDwgNDsgKytjbnQpCitAQCAtNTAsNyArNTEsNyBAQCBlbGZfY3Z0X2dudWhhc2ggKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbiwgaW50IGVuY29kZSkKKyAgICAgICBsZW4gLT0gNDsKKyAgICAgfQorIAorLSAgRWxmMzJfV29yZCBiaXRtYXNrX3dvcmRzID0gZW5jb2RlID8gc3JjMzJbMl0gOiBkZXN0MzJbMl07CisrICBFbGYzMl9Xb3JkIGJpdG1hc2tfd29yZHMgPSBlbmNvZGUgPyBzYXZlX3NyYzMyXzIgOiBkZXN0MzJbMl07CisgCisgICAvKiBOb3cgdGhlIDY0IGJpdCB3b3Jkcy4gICovCisgICBFbGY2NF9Yd29yZCAqZGVzdDY0ID0gKEVsZjY0X1h3b3JkICopICZkZXN0MzJbNF07CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9kc28tbGluay1jaGFuZ2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9kc28tbGluay1jaGFuZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBjZDNlZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzL2Rzby1saW5rLWNoYW5nZS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIyBUaGlzIHBhdGNoIG1ha2VzIHRoZSBsaW5rIHRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgbGliZHcgZXhwbGljaXQsIGFzIHJlY2VudAorIyBsZCBubyBsb25nZXIgaW1wbGljaXRseSBsaW5rcyB0aGVtLiBTZWUKKyMgaHR0cDovL2xpc3RzLmZlZG9yYXByb2plY3Qub3JnL3BpcGVybWFpbC9kZXZlbC8yMDEwLU1hcmNoLzEzMzYwMS5odG1sIGFzCisjIGEgc2ltaWxhciBleGFtcGxlIG9mIHRoZSBlcnJvciBtZXNzYWdlIHlvdSBjYW4gZW5jb3VudGVyIHdpdGhvdXQgdGhpcyBwYXRjaCwKKyMgYW5kIGh0dHBzOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9VbmRlcnN0YW5kaW5nRFNPTGlua0NoYW5nZSBhbmQKKyMgaHR0cHM6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0ZlYXR1cmVzL0NoYW5nZUluSW1wbGljaXREU09MaW5raW5nIGZvciBtb3JlCisjIGRldGFpbHMuCisKKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9NYWtlZmlsZS5hbQorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9NYWtlZmlsZS5hbQorQEAgLTg2LDcgKzg2LDcgQEAgbGliZHcgPSAuLi9saWJkdy9saWJkdy5hICQoemlwX0xJQlMpICQobAorIGxpYmVsZiA9IC4uL2xpYmVsZi9saWJlbGYuYQorIGVsc2UKKyBsaWJhc20gPSAuLi9saWJhc20vbGliYXNtLnNvCistbGliZHcgPSAuLi9saWJkdy9saWJkdy5zbworK2xpYmR3ID0gLi4vbGliZHcvbGliZHcuc28gJCh6aXBfTElCUykgJChsaWJlbGYpICQobGliZWJsKSAtbGRsCisgbGliZWxmID0gLi4vbGliZWxmL2xpYmVsZi5zbworIGVuZGlmCisgbGliZWJsID0gLi4vbGliZWJsL2xpYmVibC5hCistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGVsZnV0aWxzLTAuMTQ4L3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMTcyLDcgKzE3Miw3IEBAIGxpYmR3ID0gLi4vbGliZHcvbGliZHcuYSAkKHppcF9MSUJTKSAkKGwKKyBsaWJlbGYgPSAuLi9saWJlbGYvbGliZWxmLmEKKyBsaWJhc20gPSAuLi9saWJhc20vbGliYXNtLmEKKyBlbHNlCistbGliZHcgPSAuLi9saWJkdy9saWJkdy5zbworK2xpYmR3ID0gLi4vbGliZHcvbGliZHcuc28gJCh6aXBfTElCUykgJChsaWJlbGYpICQobGliZWJsKSAtbGRsCisgbGliZWxmID0gLi4vbGliZWxmL2xpYmVsZi5zbworIGxpYmFzbSA9IC4uL2xpYmFzbS9saWJhc20uc28KKyBlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvbWVtcGNweS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzL21lbXBjcHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRlMzFmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzL21lbXBjcHkucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorCit1Y2xpYmMgZG9lcyBub3QgZXhwb3J0IF9fbWVtcGNweSBsaWtlIGdsaWJjIHNvIHdlIGFsaWFzIGl0IGhlcmUuCitUaGlzIHBhdGNoIG1heSBtYWtlIHNlbnNlIGZvciB1cHN0cmVhbSBidXQgZWxmdXRpbHMgdXNlcyBtb3JlCitnbGliYyBzcGVjaWZpYyBmZWF0dXJlcyBsaWtlIG9ic3RhY2tfcHJpbnRmIHdoaWNoIGFyZSBtaXNzaW5nIGluCit1Y2xpYmMgdGhleSBuZWVkIHRvIGJlIGZpeGVkIGFsb25nIHRvIG1ha2UgaXQgd29yayBhbGwgdGhlIHdheQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGVbRWxmdXRpbHMgdXNlcyBtb3JlIGdsaWJjIHNwZWNpZmljIGZlYXR1cmVzXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9iZWdpbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmX2JlZ2luLmMKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmX2JlZ2luLmMKK0BAIC02OCw2ICs2OCw5IEBACisgI2luY2x1ZGUgImxpYmVsZlAuaCIKKyAjaW5jbHVkZSAiY29tbW9uLmgiCisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysjZGVmaW5lIF9fbWVtcGNweSBtZW1wY3B5CisrI2VuZGlmCisgCisgLyogQ3JlYXRlIGRlc2NyaXB0b3IgZm9yIGFyY2hpdmUgaW4gbWVtb3J5LiAgKi8KKyBzdGF0aWMgaW5saW5lIEVsZiAqCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE0OC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTQ4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODQ5MGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE0OC5iYgpAQCAtMCwwICsxLDkxIEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBhbmQgbGlicmFyaWVzIGZvciBoYW5kbGluZyBjb21waWxlZCBvYmplY3QgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvZWxmdXRpbHMiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIihHUEwtMisgJiBFbGZ1dGlscy1FeGNlcHRpb24pIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjNcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9FWENFUFRJT047bWQ1PTU3MGFkY2IwYzEyMThhYjU3ZjIyNDljNjdkMGNlNDE3IgorREVQRU5EUyA9ICJsaWJ0b29sIGJ6aXAyIHpsaWIgdmlydHVhbC9saWJpbnRsIgorCitQUiA9ICJyMTEiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL2UvbC8ke0JQTn0vJHtCUH0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gImEwYmVkMTEzMDEzNWYxN2FkMjc1MzNiMDAzNGRiYThkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhhZWJmYTRhNzQ1ZGIyMWNmNTQyOWM5NTQxZmU0ODI3MjliNjJlZmM3ZTUzZTkxMTAxNTFiNDE2OWZlODg3ZGEiCisKKyMgcGljayB0aGUgcGF0Y2ggZnJvbSBkZWJpYW4KKyMgaHR0cDovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vZS9lbGZ1dGlscy9lbGZ1dGlsc18wLjE0OC0xLmRlYmlhbi50YXIuZ3oKKworU1JDX1VSSSArPSAiXAorICAgICAgICBmaWxlOi8vcmVkaGF0LXBvcnRhYmlsaXR5LmRpZmYgXAorICAgICAgICBmaWxlOi8vcmVkaGF0LXJvYnVzdGlmeS5kaWZmIFwKKyAgICAgICAgZmlsZTovL2hwcGFfYmFja2VuZC5kaWZmIFwKKyAgICAgICAgZmlsZTovL2FybV9iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vbWlwc19iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vbTY4a19iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vdGVzdHN1aXRlLWlnbm9yZS1lbGZsaW50LmRpZmYgXAorICAgICAgICBmaWxlOi8vZWxmX2FkZGl0aW9ucy5kaWZmIFwKKyAgICAgICAgZmlsZTovL2VsZnV0aWxzLWZzaXplLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3JlbW92ZS11bnVzZWQucGF0Y2ggXAorICAgICAgICBmaWxlOi8vbWVtcGNweS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9maXhfZm9yX2djYy00LjcucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZHNvLWxpbmstY2hhbmdlLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL25tLUZpeC1zaXplLXBhc3NlZC10by1zbnByaW50Zi1mb3ItaW52YWxpZC1zaF9uYW1lLWNhc2UucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZWxmdXRpbHMtYXItYy1maXgtbnVtLXBhc3NlZC10by1tZW1zZXQucGF0Y2ggXAorICAgICAgICBmaWxlOi8vRml4X2VsZl9jdnRfZ3VuaGFzaC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9lbGZfYmVnaW4uYy1DVkUtMjAxNC05NDQ3LWZpeC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9maXgtYnVpbGQtZ2NjLTQuOC5wYXRjaCBcCisiCisjIE9ubHkgYXBwbHkgd2hlbiBidWlsZGluZyB1Y2xpYmMgYmFzZWQgdGFyZ2V0IHJlY2lwZQorU1JDX1VSSV9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIGZpbGU6Ly91Y2xpYmMtc3VwcG9ydC1mb3ItZWxmdXRpbHMtMC4xNDgucGF0Y2giCisKKyMgVGhlIGJ1aWxkc3lzdGVtIHdhbnRzIHRvIGdlbmVyYXRlIDIgLmggZmlsZXMgZnJvbSBzb3VyY2UgdXNpbmcgYSBiaW5hcnkgaXQganVzdCBidWlsdCwKKyMgd2hpY2ggY2FuIG5vdCBwYXNzIHRoZSBjcm9zcyBjb21waWxpbmcsIHNvIGxldCdzIHdvcmsgYXJvdW5kIGl0IGJ5IGFkZGluZyAyIC5oIGZpbGVzCisjIGFsb25nIHdpdGggdGhlIGRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkKKworU1JDX1VSSSArPSAiXAorICAgICAgICBmaWxlOi8vaTM4Nl9kaXMuaCBcCisgICAgICAgIGZpbGU6Ly94ODZfNjRfZGlzLmggXAorIgoraW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitFWFRSQV9PRUNPTkYgPSAiLS1wcm9ncmFtLXByZWZpeD1ldS0gLS13aXRob3V0LWx6bWEiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgLS13aXRob3V0LWJ6bGliIgorRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1lbmFibGUtdWNsaWJjIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzZWQgLWkgJy9eaTM4Nl9kaXMuaDovLCs0IHsvLiovZH0nICR7U30vbGliY3B1L01ha2VmaWxlLmFtCisKKyAgICBjcCAke1dPUktESVJ9LypkaXMuaCAke1N9L2xpYmNwdQorfQorCisjIHdlIGNhbiBub3QgYnVpbGQgY29tcGxldGUgZWxmdXRpbHMgd2hlbiB1c2luZyB1Y2xpYmMKKyMgYnV0IHNvbWUgcmVjaXBlcyBlLmcuIGdjYyA0LjUgZGVwZW5kcyBvbiBsaWJlbGYgc28gd2UKKyMgYnVpbGQgb25seSBsaWJlbGYgZm9yIHVjbGliYyBjYXNlCisKK0VYVFJBX09FTUFLRV9saWJjLXVjbGliYyA9ICItQyBsaWJlbGYiCitFWFRSQV9PRU1BS0VfY2xhc3MtbmF0aXZlID0gIiIKK0VYVFJBX09FTUFLRV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKKyMgUGFja2FnZSB1dGlsaXRpZXMgc2VwYXJhdGVseQorUEFDS0FHRVMgPSsgIiR7UE59LWJpbnV0aWxzIGxpYmVsZiBsaWJhc20gbGliZHciCitGSUxFU18ke1BOfS1iaW51dGlscyA9ICJcCisgICAgJHtiaW5kaXJ9L2V1LWFkZHIybGluZSBcCisgICAgJHtiaW5kaXJ9L2V1LWxkIFwKKyAgICAke2JpbmRpcn0vZXUtbm0gXAorICAgICR7YmluZGlyfS9ldS1yZWFkZWxmIFwKKyAgICAke2JpbmRpcn0vZXUtc2l6ZSBcCisgICAgJHtiaW5kaXJ9L2V1LXN0cmlwIgorCitGSUxFU19saWJlbGYgPSAiJHtsaWJkaXJ9L2xpYmVsZi0ke1BWfS5zbyAke2xpYmRpcn0vbGliZWxmLnNvLioiCitGSUxFU19saWJhc20gPSAiJHtsaWJkaXJ9L2xpYmFzbS0ke1BWfS5zbyAke2xpYmRpcn0vbGliYXNtLnNvLioiCitGSUxFU19saWJkdyAgPSAiJHtsaWJkaXJ9L2xpYmR3LSR7UFZ9LnNvICR7bGliZGlyfS9saWJkdy5zby4qICR7bGliZGlyfS9lbGZ1dGlscy9saWIqIgorIyBTb21lIHBhY2thZ2VzIGhhdmUgdGhlIHZlcnNpb24gcHJlY2VlZGluZyB0aGUgLnNvIGluc3RlYWQgcHJvcGVybHkKKyMgdmVyc2lvbmVkIC5zby48dmVyc2lvbj4sIHNvIHdlIG5lZWQgdG8gcmVvcmRlciBhbmQgcmVwYWNrYWdlLgorI0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vKi0ke1BWfS5zbyAke2Jhc2VfbGliZGlyfS8qLSR7UFZ9LnNvIgorI0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliYXNtLnNvICR7bGliZGlyfS9saWJkdy5zbyAke2xpYmRpcn0vbGliZWxmLnNvIgorCisjIFRoZSBwYWNrYWdlIGNvbnRhaW5zIHN5bWxpbmtzIHRoYXQgdHJpcCB1cCBpbnNhbmUKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliZHcgPSAiZGV2LXNvIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE2My5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzkxODEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjMuYmIKQEAgLTAsMCArMSw4NyBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgYW5kIGxpYnJhcmllcyBmb3IgaGFuZGxpbmcgY29tcGlsZWQgb2JqZWN0IGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2VsZnV0aWxzIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICIoR1BMdjMgJiBFbGZ1dGlscy1FeGNlcHRpb24pIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCitERVBFTkRTID0gImxpYnRvb2wgYnppcDIgemxpYiB2aXJ0dWFsL2xpYmludGwiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL2UvbC9lbGZ1dGlscy8ke1BWfS8ke0JQfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzdjZTg3ZjI1OTk4N2QyZTU0ZTRkODdiODZjYmVlNDEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2M3NzRmMWVlZjMyOTMwOWYzYjA1ZTczMGJkYWM1MDAxMzE1NWQ0Mzc1MThhMmVjMGUyNDg3MWQzMTJmMmUyMyIKKworU1JDX1VSSSArPSAiXAorICAgICAgICBmaWxlOi8vbWVtcGNweS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9kc28tbGluay1jaGFuZ2UucGF0Y2ggXAorICAgICAgICBmaWxlOi8vRml4X2VsZl9jdnRfZ3VuaGFzaC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9maXhoZWFkZXJjaGVjay5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAxLWVsZl9nZXRhcnN5bS1TaWxlbmNlLVdlcnJvci1tYXliZS11bmluaXRpYWxpemVkLWZhbHMucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMS1yZW1vdmUtdGhlLXVubmVlZC1jaGVja2luZy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1hLXN0YWNrLXVzYWdlLXdhcm5pbmcucGF0Y2ggXAorIgorCisjIHBpY2sgdGhlIHBhdGNoIGZyb20gZGViaWFuCisjIGh0dHA6Ly9mdHAuZGUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2UvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNTktNC5kZWJpYW4udGFyLnh6CitTUkNfVVJJICs9ICJcCisgICAgICAgIGZpbGU6Ly9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9ocHBhX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9hcm1fYmFja2VuZC5kaWZmIFwKKyAgICAgICAgZmlsZTovL21pcHNfYmFja2VuZC5kaWZmIFwKKyAgICAgICAgZmlsZTovL202OGtfYmFja2VuZC5kaWZmIFwKKyAgICAgICAgZmlsZTovL3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmIFwKKyAgICAgICAgZmlsZTovL3NjYW5mLWZvcm1hdC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9taXBzX3JlYWRlbGZfdy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9hcm1fZnVuY192YWx1ZS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9hcm1fdW53aW5kX3JldF9tYXNrLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL25vbl9saW51eC5wYXRjaCBcCisiCisKKyMgT25seSBhcHBseSB3aGVuIGJ1aWxkaW5nIHVjbGliYyBiYXNlZCB0YXJnZXQgcmVjaXBlCitTUkNfVVJJX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgZmlsZTovL3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE2MS5wYXRjaCIKKworIyBUaGUgYnVpbGRzeXN0ZW0gd2FudHMgdG8gZ2VuZXJhdGUgMiAuaCBmaWxlcyBmcm9tIHNvdXJjZSB1c2luZyBhIGJpbmFyeSBpdCBqdXN0IGJ1aWx0LAorIyB3aGljaCBjYW4gbm90IHBhc3MgdGhlIGNyb3NzIGNvbXBpbGluZywgc28gbGV0J3Mgd29yayBhcm91bmQgaXQgYnkgYWRkaW5nIDIgLmggZmlsZXMKKyMgYWxvbmcgd2l0aCB0aGUgZG9fY29uZmlndXJlX3ByZXBlbmQoKQorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiA9ICItLXByb2dyYW0tcHJlZml4PWV1LSAtLXdpdGhvdXQtbHptYSIKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLXdpdGhvdXQtYnpsaWIiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWVuYWJsZS11Y2xpYmMiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiAhPSAieDg2XzY0IiBdICYmIFsgLXogYGVjaG8gIiR7VEFSR0VUX0FSQ0h9InxncmVwICdpLjg2J2AgXTt0aGVuCisJCXJtICR7RH0ke2JpbmRpcn0vZXUtb2JqZHVtcAorCWZpCit9CisKKyMgd2UgY2FuIG5vdCBidWlsZCBjb21wbGV0ZSBlbGZ1dGlscyB3aGVuIHVzaW5nIHVjbGliYworIyBidXQgc29tZSByZWNpcGVzIGUuZy4gZ2NjIDQuNSBkZXBlbmRzIG9uIGxpYmVsZiBzbyB3ZQorIyBidWlsZCBvbmx5IGxpYmVsZiBmb3IgdWNsaWJjIGNhc2UKKworRVhUUkFfT0VNQUtFX2xpYmMtdWNsaWJjID0gIi1DIGxpYmVsZiIKK0VYVFJBX09FTUFLRV9jbGFzcy1uYXRpdmUgPSAiIgorRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworIyBQYWNrYWdlIHV0aWxpdGllcyBzZXBhcmF0ZWx5CitQQUNLQUdFUyA9KyAiJHtQTn0tYmludXRpbHMgbGliZWxmIGxpYmFzbSBsaWJkdyIKK0ZJTEVTXyR7UE59LWJpbnV0aWxzID0gIlwKKyAgICAke2JpbmRpcn0vZXUtYWRkcjJsaW5lIFwKKyAgICAke2JpbmRpcn0vZXUtbGQgXAorICAgICR7YmluZGlyfS9ldS1ubSBcCisgICAgJHtiaW5kaXJ9L2V1LXJlYWRlbGYgXAorICAgICR7YmluZGlyfS9ldS1zaXplIFwKKyAgICAke2JpbmRpcn0vZXUtc3RyaXAiCisKK0ZJTEVTX2xpYmVsZiA9ICIke2xpYmRpcn0vbGliZWxmLSR7UFZ9LnNvICR7bGliZGlyfS9saWJlbGYuc28uKiIKK0ZJTEVTX2xpYmFzbSA9ICIke2xpYmRpcn0vbGliYXNtLSR7UFZ9LnNvICR7bGliZGlyfS9saWJhc20uc28uKiIKK0ZJTEVTX2xpYmR3ICA9ICIke2xpYmRpcn0vbGliZHctJHtQVn0uc28gJHtsaWJkaXJ9L2xpYmR3LnNvLiogJHtsaWJkaXJ9L2VsZnV0aWxzL2xpYioiCisjIFNvbWUgcGFja2FnZXMgaGF2ZSB0aGUgdmVyc2lvbiBwcmVjZWVkaW5nIHRoZSAuc28gaW5zdGVhZCBwcm9wZXJseQorIyB2ZXJzaW9uZWQgLnNvLjx2ZXJzaW9uPiwgc28gd2UgbmVlZCB0byByZW9yZGVyIGFuZCByZXBhY2thZ2UuCisjRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8qLSR7UFZ9LnNvICR7YmFzZV9saWJkaXJ9LyotJHtQVn0uc28iCisjRklMRVNfU09MSUJTREVWID0gIiR7bGliZGlyfS9saWJhc20uc28gJHtsaWJkaXJ9L2xpYmR3LnNvICR7bGliZGlyfS9saWJlbGYuc28iCisKKyMgVGhlIHBhY2thZ2UgY29udGFpbnMgc3ltbGlua3MgdGhhdCB0cmlwIHVwIGluc2FuZQorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJkdyA9ICJkZXYtc28iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAwMDEtY29uZmlndXJlLmluLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMDAxLWNvbmZpZ3VyZS5pbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTk1YTI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMDAxLWNvbmZpZ3VyZS5pbi5wYXRjaApAQCAtMCwwICsxLDEwOCBAQAorQWxsb3cgY3Jvc3MgY29tcGlsaW5nLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRlcnMgUm94ZWxsIDxhbmRlcnMucm94ZWxsQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KK2RpZmYgLXVOciBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgorLS0tIGEvY29uZmlndXJlLmluCTIwMTItMTItMTQgMTU6MzE6MzIuNjIzMTgwNDUwICswMTAwCisrKysgYi9jb25maWd1cmUuaW4JMjAxMi0xMi0xNCAxNTo1MzozNC41MTgyMzM1MTkgKzAxMDAKK0BAIC00ODEsNyArNDgxLDcgQEAKKyAsCisgCUFDX01TR19SRVNVTFQobm8pCisgLAorLQlBQ19NU0dfRVJST1IoW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrCUFDX01TR19SRVNVTFQobm8pCisgKQorIAorIEFDX01TR19DSEVDS0lORyhbaWYgYW55IHZhbHVlIGV4aXN0cyBmb3IgV05PSEFOR10pCitAQCAtNTA2LDcgKzUwNiw5IEBACisgCUFDX01TR19SRVNVTFQobm8pCisgCUFDX0RFRklORShXTk9IQU5HX0JBQ0tVUF9WQUxVRSwgMSkKKyAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysJQUNfTVNHX1JFU1VMVCh5ZXMpCisrCUFDX0RFRklORV9VTlFVT1RFRChXTk9IQU5HX0JBQ0tVUF9WQUxVRSwgYGNhdCB3bm9oYW5nYCkKKysJcm0gLWYgd25vaGFuZworICkKKyAKKyAjCitAQCAtNTc0LDcgKzU3Niw4IEBACisgCUFDX0RFRklORShSRUFSTV9TSUcpCisgLAorIAlBQ19NU0dfUkVTVUxUKG5vKQorLSwgQUNfTVNHX1dBUk4oW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrLAorKwlBQ19NU0dfUkVTVUxUKG5vKQorICkKKyAKKyAjIEhQVVg3IGhhcyB0cm91YmxlIHdpdGggdGhlIGJpZyBjYXQgc28gc3BsaXQgaXQKK0BAIC03MjUsNyArNzI4LDkgQEAKKyAsCisgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICwKKy0JQUNfTVNHX0VSUk9SKFtFeHBlY3QgY2FuJ3QgYmUgY3Jvc3MgY29tcGlsZWRdKQorKyAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisrICAgICAgICBBQ19ERUZJTkUoSEFWRV9TR1RUWUIpCisrICAgICAgICBQVFlfVFlQRT1zZ3R0eWIKKyApCisgCisgIyBtYWNoIHN5c3RlbXMgaGF2ZSBpbmNsdWRlIGZpbGVzIGZvciB1bmltcGxlbWVudGVkIGZlYXR1cmVzCitAQCAtNzQ5LDcgKzc1NCw5IEBACisgLAorICAgICAgICAgQUNfTVNHX1JFU1VMVChubykKKyAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysgICAgICAgIEFDX0RFRklORShIQVZFX1RFUk1JTykKKysgICAgICAgIFBUWV9UWVBFPXRlcm1pb3MKKysgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICkKKyAKKyAgICMgbm93IGNoZWNrIGZvciB0aGUgbmV3IHN0eWxlIHR0eXMgKG5vdCB5ZXQgcG9zaXgpCitAQCAtNzcxLDcgKzc3OCw5IEBACisgICAsCisgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgLAorLQlBQ19NU0dfRVJST1IoW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrICAgICAgICBBQ19ERUZJTkUoSEFWRV9URVJNSU9TKQorKyAgICAgICAgUFRZX1RZUEU9dGVybWlvcworKyAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICApCisgZmkKKyAKK0BAIC03OTQsNyArODAzLDcgQEAKKyAsCisgCUFDX01TR19SRVNVTFQobm8pCisgLAorLQlBQ19NU0dfRVJST1IoW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrCUFDX01TR19SRVNVTFQobm8pCisgKQorIAorIEFDX01TR19DSEVDS0lORyhbaWYgVElPQ0dXSU5TWiBpbiB0ZXJtaW9zLmhdKQorQEAgLTgxNiw3ICs4MjUsNyBAQAorICwKKyAJQUNfTVNHX1JFU1VMVChubykKKyAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysJQUNfTVNHX1JFU1VMVChubykKKyApCisgCisgIyBmaW5hbGx5IGNoZWNrIGZvciBDcmF5IHN0eWxlIHR0eXMKK0BAIC04MzcsNyArODQ2LDcgQEAKKyAsCisgCUFDX01TR19SRVNVTFQobm8pCisgLAorLQlBQ19NU0dfRVJST1IoW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrCUFDX01TR19SRVNVTFQobm8pCisgKQorIAorICMKK0BAIC04ODksNyArODk4LDggQEAKKyAJQUNfTVNHX1JFU1VMVCh5ZXMpLAorIAlBQ19NU0dfUkVTVUxUKG5vKQorICwKKy0JQUNfTVNHX0VSUk9SKFtFeHBlY3QgY2FuJ3QgYmUgY3Jvc3MgY29tcGlsZWRdKQorKwlBQ19ERUZJTkUoSEFWRV9TVl9USU1FWk9ORSkKKysJQUNfTVNHX1JFU1VMVCh5ZXMpLAorICkKKyAKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMS1leHBlY3QtaW5zdGFsbC1zY3JpcHRzLXdpdGhvdXQtdXNpbmctdGhlLWZpeGxpbmUxLXRjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMDAxLWV4cGVjdC1pbnN0YWxsLXNjcmlwdHMtd2l0aG91dC11c2luZy10aGUtZml4bGluZTEtdGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc0YWQ4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMS1leHBlY3QtaW5zdGFsbC1zY3JpcHRzLXdpdGhvdXQtdXNpbmctdGhlLWZpeGxpbmUxLXRjLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbd3JsaW51eCBzcGVjaWZpY10KKworU3ViamVjdDogZXhwZWN0OiBpbnN0YWxsIHNjcmlwdHMgd2l0aG91dCB1c2luZyB0aGUgZml4bGluZTEgdGNsIHNjcmlwdAorCitPbiBvbGRlciBtYWNoaW5lcyBsaWtlIFNMRUQxMS4yLCB3ZSBhcmUgZW5jb3VudGVyaW5nIGRvX2luc3RhbGwgZmFpbHVyZXMKK2NvbXBsYWluaW5nIHRoYXQgJ0dMSUJDXzIuMTQnIGlzIG5vdCBmb3VuZCBpbiAvbGliNjQvbGliYy5zby42IGJ1dCBpcyByZXF1aXJlZAorYnkgbGlidGNsOC42LnNvLjAuCisKK1RoaXMgaXMgYmVjYXVzZSB0aGF0IHdlJ3JlIGV4ZWN1dGluZyB0aGUgZml4bGluZTEgdGNsIHNjcmlwdCB3aGljaCByZXF1aXJlcworbGlidGNsOC42LnNvLjAgaW4gc3lzcm9vdC4gSG93ZXZlciwgYWxsIGNvbW1hbmRzIGluIFNDUklQVFMgYWxyZWFkeSBoYXZlIGdvdAordGhlIGNvcnJlY3QgZmlyc3QgbGluZSwgdGhhdCBpcyAnIyEvYmluL3NoJy4gV2UgZG9uJ3QgbmVlZCB0byBtb2RpZnkgYW55dGhpbmcuCitUaGF0J3Mgd2h5IHdlIGNvdWxkIGp1c3QgY29weSB0aGVtLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGMwNWM4ODAuLmYxMzk0ZmYgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0zODAsNyArMzgwLDcgQEAgZGlzdDogZGlzdC1jbGVhbiBkb2MKKyAJY3AgJChESVNUX1JPT1QpLyQoUEtHX0RJUikudGFyLmd6ICQodG9wX2J1aWxkZGlyKQorIAorICQoU0NSSVBUUyk6CistCSQoVENMU0gpICQoc3JjZGlyKS9maXhsaW5lMSAkKFNIT1JUX0JJTkRJUikgPCAkKHNyY2RpcikvZXhhbXBsZS8kQCA+ICRACisrCWNwICQoc3JjZGlyKS9leGFtcGxlLyRAICRACisgCisgIyMgV2UgY2Fubm90IHVzZSBUQ0xfTElCUyBiZWxvdyAoYWZ0ZXIgVENMX0xJQl9TUEVDKSBiZWNhdXNlIGl0cworICMjIGV4cGFuc2lvbiByZWZlcmVuY2VzIHRoZSBjb250ZW50cyBvZiBMSUJTLCB3aGljaCBjb250YWlucyBsaW5rZXIKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMDAyLXRjbC5tNC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMi10Y2wubTQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM0YzZiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMi10Y2wubTQucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXNlIHByb3BlciAtTCBwYXRoIHdoZW4gY3Jvc3MgY29tcGlsaW5nLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRlcnMgUm94ZWxsIDxhbmRlcnMucm94ZWxsQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KK2RpZmYgLXVOciBhL3RjbGNvbmZpZy90Y2wubTQgYi90Y2xjb25maWcvdGNsLm00CistLS0gYS90Y2xjb25maWcvdGNsLm00CTIwMTItMTItMTQgMDk6MTY6NTguNzg5ODYxMjgxICswMTAwCisrKysgYi90Y2xjb25maWcvdGNsLm00CTIwMTItMTItMTQgMTA6NTU6NDMuNTQyMjk3MDEwICswMTAwCitAQCAtMzcxLDcgKzM3MSw3IEBACisgICAgICMgb2YgVENMX0JVSUxEX0xJQl9TUEVDLiBBbiBleHRlbnNpb24gc2hvdWxkIG1ha2UgdXNlIG9mIFRDTF9MSUJfU1BFQworICAgICAjIGluc3RlYWQgb2YgVENMX0JVSUxEX0xJQl9TUEVDIHNpbmNlIGl0IHdpbGwgd29yayB3aXRoIGJvdGggYW4KKyAgICAgIyBpbnN0YWxsZWQgYW5kIHVuaW5zdGFsbGVkIHZlcnNpb24gb2YgVGNsLgorLSAgICBpZiB0ZXN0IC1mICIke1RDTF9CSU5fRElSfS9NYWtlZmlsZSIgOyB0aGVuCisrICAgIGlmIHRlc3QgLWYgIiR7VENMX0JJTl9ESVJ9L01ha2VmaWxlIiB8fCB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAgICAgICAgVENMX0xJQl9TUEVDPSIke1RDTF9CVUlMRF9MSUJfU1BFQ30iCisgICAgICAgICBUQ0xfU1RVQl9MSUJfU1BFQz0iJHtUQ0xfQlVJTERfU1RVQl9MSUJfU1BFQ30iCisgICAgICAgICBUQ0xfU1RVQl9MSUJfUEFUSD0iJHtUQ0xfQlVJTERfU1RVQl9MSUJfUEFUSH0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAxLWV4YW1wbGUtc2hlYmFuZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDEtZXhhbXBsZS1zaGViYW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OTdmMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAxLWV4YW1wbGUtc2hlYmFuZy5wYXRjaApAQCAtMCwwICsxLDE0NCBAQAorQXV0aG9yOiBNaWtlIE1hcmtsZXkgPG1pa2VAbWFya2xleS5vcmc+CitBdXRob3I6IFNlcmdlaSBHb2xvdmFuIDxzZ29sb3ZhbkBkZWJpYW4ub3JnPgorRGVzY3JpcHRpb246IEZpeGVzIHNoZWJhbmdzIGluIGV4YW1wbGVzIChDbG9zZXM6ICMxNTIzNjcpLgorCitCYWNrcG9ydGVkIGZyb20gRGViaWFuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IGV4cGVjdDUuNDUvZXhhbXBsZS9iZWVyLmV4cAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGV4cGVjdDUuNDUub3JpZy9leGFtcGxlL2JlZXIuZXhwCTIwMDYtMDEtMjUgMTM6NTE6MzkuMDAwMDAwMDAwIC0wODAwCisrKysgZXhwZWN0NS40NS9leGFtcGxlL2JlZXIuZXhwCTIwMTMtMTEtMDEgMTc6MzU6MTkuODE3MzE4MzQxIC0wNzAwCitAQCAtMSw0ICsxLDkgQEAKKy0jIS9kZXBvdC9wYXRoL2V4cGVjdCAtZgorKyMhL2Jpbi9zaAorKyMgLSotIHRjbCAtKi0KKysjIFRoZSBuZXh0IGxpbmUgaXMgZXhlY3V0ZWQgYnkgL2Jpbi9zaCwgYnV0IG5vdCB0Y2wgXAorK2V4ZWMgdGNsc2ggIiQwIiAkezErIiRAIn0KKysKKytwYWNrYWdlIHJlcXVpcmUgRXhwZWN0CisgCisgIyA5OSBib3R0bGVzIG9mIGJlZXIgb24gdGhlIHdhbGwsIEV4cGVjdC1zdHlsZQorICMgQXV0aG9yOiBEb24gTGliZXMgPGxpYmVzQG5pc3QuZ292PgorSW5kZXg6IGV4cGVjdDUuNDUvZXhhbXBsZS9leHBlY3RkLnByb3RvCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwZWN0NS40NS5vcmlnL2V4YW1wbGUvZXhwZWN0ZC5wcm90bwkyMDEwLTA3LTAyIDA5OjAzOjMxLjAwMDAwMDAwMCAtMDcwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS9leHBlY3RkLnByb3RvCTIwMTMtMTEtMDEgMTc6MzU6MTkuODIxMzE4MzQxIC0wNzAwCitAQCAtMSw0ICsxLDEwIEBACistIyEvZGVwb3QvdGNsL3NyYy9leHBlY3QvZSAtLQorKyMhL2Jpbi9zaAorKyMgLSotIHRjbCAtKi0KKysjIFRoZSBuZXh0IGxpbmUgaXMgZXhlY3V0ZWQgYnkgL2Jpbi9zaCwgYnV0IG5vdCB0Y2wgXAorK2V4ZWMgdGNsc2ggIiQwIiAkezErIiRAIn0KKysKKytwYWNrYWdlIHJlcXVpcmUgRXhwZWN0CisrCisgIyBEZXNjcmlwdGlvbjogU2ltcGxlIGZyYWdtZW50IHRvIGJlZ2luIGEgdGVsbmV0IGRhZW1vbgorICMgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBDaGFwdGVyIDE3IG9mICJFeHBsb3JpbmcgRXhwZWN0IgorICMgQXV0aG9yOiBEb24gTGliZXMsIE5JU1QKK0luZGV4OiBleHBlY3Q1LjQ1L2V4YW1wbGUvaXJzaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGV4cGVjdDUuNDUub3JpZy9leGFtcGxlL2lyc2gJMjAxMC0wNy0wMiAwOTowMzozMS4wMDAwMDAwMDAgLTA3MDAKKysrKyBleHBlY3Q1LjQ1L2V4YW1wbGUvaXJzaAkyMDEzLTExLTAxIDE3OjM1OjE5LjgyMTMxODM0MSAtMDcwMAorQEAgLTEsNCArMSw5IEBACistIyEvZGVwb3QvcGF0aC9leHBlY3QgLS0KKysjIS9iaW4vc2gKKysjIC0qLSB0Y2wgLSotCisrIyBUaGUgbmV4dCBsaW5lIGlzIGV4ZWN1dGVkIGJ5IC9iaW4vc2gsIGJ1dCBub3QgdGNsIFwKKytleGVjIHRjbHNoICIkMCIgJHsxKyIkQCJ9CisrCisrcGFja2FnZSByZXF1aXJlIEV4cGVjdAorIAorICMgRG8gcnNoIGludGVyYWN0aXZlbHkuICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorICMgICAgcnNoIDxyZW1vdGU+IGxzIC1sICJ8IiBtb3JlCitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL3Bhc3N3ZC5jZ2kKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS9wYXNzd2QuY2dpCTIwMDAtMDEtMDYgMTU6MjI6MDcuMDAwMDAwMDAwIC0wODAwCisrKysgZXhwZWN0NS40NS9leGFtcGxlL3Bhc3N3ZC5jZ2kJMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsOSBAQAorLSMhL2RlcG90L3BhdGgvZXhwZWN0IC0tCisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB0Y2xzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKyAKKyAjIFRoaXMgaXMgYSBDR0kgc2NyaXB0IHRvIHByb2Nlc3MgcmVxdWVzdHMgY3JlYXRlZCBieSB0aGUgYWNjb21wYW55aW5nCisgIyBwYXNzd2QuaHRtbCBmb3JtLiAgVGhpcyBzY3JpcHQgaXMgcHJldHR5IGJhc2ljLCBhbHRob3VnaCBpdCBpcworSW5kZXg6IGV4cGVjdDUuNDUvZXhhbXBsZS9wYXNzd2Rwcm9tcHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS9wYXNzd2Rwcm9tcHQJMjAwMy0wOS0wNSAxMjowMTo1OS4wMDAwMDAwMDAgLTA3MDAKKysrKyBleHBlY3Q1LjQ1L2V4YW1wbGUvcGFzc3dkcHJvbXB0CTIwMTMtMTEtMDEgMTc6MzU6MTkuODIxMzE4MzQxIC0wNzAwCitAQCAtMSw0ICsxLDkgQEAKKy0jIS9kZXBvdC9wYXRoL2V4cGVjdAorKyMhL2Jpbi9zaAorKyMgLSotIHRjbCAtKi0KKysjIFRoZSBuZXh0IGxpbmUgaXMgZXhlY3V0ZWQgYnkgL2Jpbi9zaCwgYnV0IG5vdCB0Y2wgXAorK2V4ZWMgdGNsc2ggIiQwIiAkezErIiRAIn0KKysKKytwYWNrYWdlIHJlcXVpcmUgRXhwZWN0CisgCisgIyBUaGlzIHNjcmlwdCBwcm9tcHRzIGZvciBhIHBhc3N3ZCBmcm9tIHN0ZGluIHdoaWxlIGVjaG9pbmcgKidzCisgCitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL3JlcHJvbXB0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwZWN0NS40NS5vcmlnL2V4YW1wbGUvcmVwcm9tcHQJMjAwMC0wMS0wNiAxNToyMjowNy4wMDAwMDAwMDAgLTA4MDAKKysrKyBleHBlY3Q1LjQ1L2V4YW1wbGUvcmVwcm9tcHQJMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsOSBAQAorLSMhL2RlcG90L3BhdGgvZXhwZWN0IC0tCisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB0Y2xzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKyAKKyAjIE5hbWU6IHJlcHJvbXB0CisgIyBEZXNjcmlwdGlvbjogcmVwcm9tcHQgZXZlcnkgc28gb2Z0ZW4gdW50aWwgdXNlciBlbnRlcnMgc29tZXRoaW5nCitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL3Rlcm1fZXhwZWN0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwZWN0NS40NS5vcmlnL2V4YW1wbGUvdGVybV9leHBlY3QJMjAwNS0wMi0xNSAxMDoxMTozMS4wMDAwMDAwMDAgLTA4MDAKKysrKyBleHBlY3Q1LjQ1L2V4YW1wbGUvdGVybV9leHBlY3QJMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsOSBAQAorLSMhL2RlcG90L3BhdGgvZXhwZWN0aworKyMhL2Jpbi9zaAorKyMgLSotIHRjbCAtKi0KKysjIFRoZSBuZXh0IGxpbmUgaXMgZXhlY3V0ZWQgYnkgL2Jpbi9zaCwgYnV0IG5vdCB0Y2wgXAorK2V4ZWMgd2lzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKyAKKyAjIE5hbWU6IHRrdGVybSAtIHRlcm1pbmFsIGVtdWxhdG9yIHVzaW5nIEV4cGVjdCBhbmQgVGsgdGV4dCB3aWRnZXQsIHYzLjAKKyAjIEF1dGhvcjogRG9uIExpYmVzLCBKdWx5ICc5NAorSW5kZXg6IGV4cGVjdDUuNDUvZXhhbXBsZS92cmZ5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwZWN0NS40NS5vcmlnL2V4YW1wbGUvdnJmeQkyMDEwLTA3LTAyIDA5OjAzOjMxLjAwMDAwMDAwMCAtMDcwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS92cmZ5CTIwMTMtMTEtMDEgMTc6MzU6MTkuODIxMzE4MzQxIC0wNzAwCitAQCAtMSw0ICsxLDkgQEAKKy0jIS9kZXBvdC9wYXRoL2V4cGVjdCAtZgorKyMhL2Jpbi9zaAorKyMgLSotIHRjbCAtKi0KKysjIFRoZSBuZXh0IGxpbmUgaXMgZXhlY3V0ZWQgYnkgL2Jpbi9zaCwgYnV0IG5vdCB0Y2wgXAorK2V4ZWMgdGNsc2ggIiQwIiAkezErIiRAIn0KKysKKytwYWNrYWdlIHJlcXVpcmUgRXhwZWN0CisgCisgCisgIyBzZXBhcmF0ZSBhZGRyZXNzIGludG8gdXNlciBhbmQgaG9zdAorSW5kZXg6IGV4cGVjdDUuNDUvZXhhbXBsZS94cmxvZ2luCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwZWN0NS40NS5vcmlnL2V4YW1wbGUveHJsb2dpbgkyMDAwLTAxLTA2IDE1OjIyOjA4LjAwMDAwMDAwMCAtMDgwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS94cmxvZ2luCTIwMTMtMTEtMDEgMTc6MzU6MTkuODIxMzE4MzQxIC0wNzAwCitAQCAtMSw0ICsxLDEwIEBACistIyEvZGVwb3QvcGF0aC9leHBlY3QgLS0KKysjIS9iaW4vc2gKKysjIC0qLSB0Y2wgLSotCisrIyBUaGUgbmV4dCBsaW5lIGlzIGV4ZWN1dGVkIGJ5IC9iaW4vc2gsIGJ1dCBub3QgdGNsIFwKKytleGVjIHRjbHNoICIkMCIgJHsxKyIkQCJ9CisrCisrcGFja2FnZSByZXF1aXJlIEV4cGVjdAorKworICMgeHJsb2dpbiAtIHJsb2dpbiBidXQgd2l0aCBjdXJyZW50IERJU1BMQVkKKyAjCisgIyBZb3UgY2FuIGV4dGVuZCB0aGlzIGlkZWEgdG8gc2F2ZSBhbnkgYXJiaXRyYXJ5IGluZm9ybWF0aW9uIGFjcm9zcyBybG9naW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3RfNS40NS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3RfNS40NS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzJhYWI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdF81LjQ1LmJiCkBAIC0wLDAgKzEsNjQgQEAKK1NVTU1BUlkgPSAidG9vbCBmb3IgYXV0b21hdGluZyBpbnRlcmFjdGl2ZSBhcHBsaWNhdGlvbnMgYWNjb3JkaW5nIHRvIGEgc2NyaXB0IgorREVTQ1JJUFRJT04gPSAiRXhwZWN0IGlzIGEgdG9vbCBmb3IgYXV0b21hdGluZyBpbnRlcmFjdGl2ZSBhcHBsaWNhdGlvbnMgYWNjb3JkaW5nIHRvIGEgc2NyaXB0LiBcCitGb2xsb3dpbmcgdGhlIHNjcmlwdCwgRXhwZWN0IGtub3dzIHdoYXQgY2FuIGJlIGV4cGVjdGVkIGZyb20gYSBwcm9ncmFtIGFuZCB3aGF0IFwKK3RoZSBjb3JyZWN0IHJlc3BvbnNlIHNob3VsZCBiZS4gRXhwZWN0IGlzIGFsc28gdXNlZnVsIGZvciB0ZXN0aW5nIHRoZXNlIHNhbWUgXAorYXBwbGljYXRpb25zLiBBbmQgYnkgYWRkaW5nIFRrLCB5b3UgY2FuIGFsc28gd3JhcCBpbnRlcmFjdGl2ZSBhcHBsaWNhdGlvbnMgaW4gXAorWDExIEdVSXMuIEFuIGludGVycHJldGVkIGxhbmd1YWdlIHByb3ZpZGVzIGJyYW5jaGluZyBhbmQgaGlnaC1sZXZlbCBjb250cm9sIFwKK3N0cnVjdHVyZXMgdG8gZGlyZWN0IHRoZSBkaWFsb2d1ZS4gSW4gYWRkaXRpb24sIHRoZSB1c2VyIGNhbiB0YWtlIGNvbnRyb2wgYW5kIFwKK2ludGVyYWN0IGRpcmVjdGx5IHdoZW4gZGVzaXJlZCwgYWZ0ZXJ3YXJkIHJldHVybmluZyBjb250cm9sIHRvIHRoZSBzY3JpcHQuIFwKKyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZXhwZWN0LyIKK0xJQ0VOU0UgPSAiUEQiCitTRUNUSU9OID0gImRldmVsIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9saWNlbnNlLnRlcm1zO21kNT1mYmYyZGU3ZTkxMDI1MDViMTQzOWRiMDZmYzM2Y2U1YyIKKworREVQRU5EUyArPSAidGNsIgorUkRFUEVORFNfJHtQTn0gPSAidGNsIgorCitpbmhlcml0IGF1dG90b29scworCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZXhwZWN0L0V4cGVjdC8ke1BWfS8ke0JQTn0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUuaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi10Y2wubTQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDEtZXhhbXBsZS1zaGViYW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZXhwZWN0LWluc3RhbGwtc2NyaXB0cy13aXRob3V0LXVzaW5nLXRoZS1maXhsaW5lMS10Yy5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjQ0ZTFhNGY0Yzg3N2U5ZGRjNWE1NDJkZmE3ZWNjOTJiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImIyOGRjYTkwNDI4YTNiMzBlNjUwNTI1Y2RjMTYyNTVkNzZiYjZjY2Q2NWQ0NDhiZTUzZTYyMGQ5NWQ1Y2MwNDAiCisKK1MgPSAiJHtXT1JLRElSfS8ke0JQTn0ke1BWfSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9CisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke0R9JHtsaWJkaXJ9L2V4cGVjdCR7UFZ9L2xpYmV4cGVjdCouc28gICAke0R9JHtsaWJkaXJ9LworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtTfS9maXhsaW5lMSAgICAgICAgICAgJHtEfSR7bGliZGlyfS9leHBlY3Qke1BWfS8KKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7U30vZXhhbXBsZS8qICAgICAgICAgICR7RH0ke2xpYmRpcn0vZXhwZWN0JHtQVn0vCisgICAgICAgIHJtICR7RH0ke2xpYmRpcn0vZXhwZWN0JHtQVn0vbGliZXhwZWN0Ki5zbworICAgICAgICBzZWQgLWUgJ3N8JGRpcnwke2xpYmRpcn18JyAtaSAke0R9JHtsaWJkaXJ9L2V4cGVjdCR7UFZ9L3BrZ0luZGV4LnRjbAorfQorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC10Y2w9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtdGNsaW5jbHVkZT0ke1NUQUdJTkdfSU5DRElSfS90Y2w4LjYgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS10aHJlYWRzIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJwYXRoIFwKKyAgICAgICAgICAgICAgICAiCitFWFRSQV9PRU1BS0VfaW5zdGFsbCA9ICIgJ1NDUklQVFM9JyAiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7QlBOfSR7UFZ9Ly5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2xpYmRpcl9uYXRpdmV9L2V4cGVjdCR7UFZ9L2xpYmV4cGVjdCouc28gXAorICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vZXhwZWN0LmggXAorICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vZXhwZWN0X3RjbC5oIFwKKyAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L2V4cGVjdF9jb21tLmggXAorICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vdGNsZGJnLmggXAorICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vKi5oIFwKKyAgICAgICAgICAgICAgICAgICIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9saWJleHBlY3Qke1BWfS5zbyBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2V4cGVjdCR7UFZ9LyogXAorICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmRpc2svZ3B0ZmRpc2tfMS4wLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mZGlzay9ncHRmZGlza18xLjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGIwZTMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmRpc2svZ3B0ZmRpc2tfMS4wLjAuYmIKQEAgLTAsMCArMSwyMCBAQAorREVTQ1JJUFRJT04gPSAiR1BUIGZkaXNrIGlzIGEgZGlzayBwYXJ0aXRpb25pbmcgdG9vbCBsb29zZWx5IG1vZGVsZWQgb24gTGludXggZmRpc2ssIGJ1dCB1c2VkIGZvciBtb2RpZnlpbmcgR1VJRCBQYXJ0aXRpb24gVGFibGUgKEdQVCkgZGlza3MuIFRoZSByZWxhdGVkIEZpeFBhcnRzIHV0aWxpdHkgZml4ZXMgc29tZSBjb21tb24gcHJvYmxlbXMgb24gTWFzdGVyIEJvb3QgUmVjb3JkIChNQlIpIGRpc2tzLiIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorCitERVBFTkRTID0gInV0aWwtbGludXggcG9wdCBuY3Vyc2VzIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0vJHtQVn0vJHtCUH0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjIwNjFmOTE3YWYwODQyMTU4OThkNGZlYTA0ZDgzODhmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjViNjY5NTY3NDNhNzk5ZmMwNDcxY2RiMDMyNjY1YzEzOTFlODJmOWM1YjNmMWQ3ZDcyNmQyOWZlMmJhMDFkNmMiCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBjZ2Rpc2sgJHtEfSR7c2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgZ2Rpc2sgJHtEfSR7c2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgc2dkaXNrICR7RH0ke3NiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1IGZpeHBhcnRzICR7RH0ke3NiaW5kaXJ9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZS8wMDAxLUFkZC1QLXByb21wdC1pbnRvLVVzYWdlLWluZm8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvMDAwMS1BZGQtUC1wcm9tcHQtaW50by1Vc2FnZS1pbmZvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMTZiMmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvMDAwMS1BZGQtUC1wcm9tcHQtaW50by1Vc2FnZS1pbmZvLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gMDhhYmY5NDRiMmJmZjI3YjZkZDMyNWRkMTViNDg2MWNlYmVmMTEzYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1bmxpbmcgWmhlbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorRGF0ZTogV2VkLCA4IEFwciAyMDE1IDAzOjI2OjU3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCAtUCBwcm9tcHQgaW50byBVc2FnZSBpbmZvCisKK0N1cnJlbnRseSwgVXNhZ2UgaW5mbyBkb2Vzbid0IGluY2x1ZGUgLVAgcHJvbXB0LCBhZGQgaXQ6CisKK3Jvb3RAYXJtYTllbDp+IyBmaWxlCitVc2FnZTogZmlsZSBbLWJjRWhpa0xsTm5wcnN2ejBdIFstLWFwcGxlXSBbLS1taW1lLWVuY29kaW5nXSBbLS1taW1lLXR5cGVdCisgICAgICAgICAgICBbLWUgdGVzdG5hbWVdIFstRiBzZXBhcmF0b3JdIFstZiBuYW1lZmlsZV0gWy1tIG1hZ2ljZmlsZXNdCisgICAgICAgICAgICBbLVAgcGFyYW1ldGVyPWxpbWl0c10gZmlsZSAuLi4KKyAgICAgICBmaWxlIC1DIFstbSBtYWdpY2ZpbGVzXQorICAgICAgIGZpbGUgWy0taGVscF0KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CistLS0KKyBzcmMvZmlsZS5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9maWxlLmMgYi9zcmMvZmlsZS5jCitpbmRleCAyYjE1ZTIxLi5lNWE5NTdiIDEwMDY0NAorLS0tIGEvc3JjL2ZpbGUuYworKysrIGIvc3JjL2ZpbGUuYworQEAgLTc2LDggKzc2LDggQEAgaW50IGdldG9wdF9sb25nKGludCBhcmdjLCBjaGFyICogY29uc3QgKmFyZ3YsIGNvbnN0IGNoYXIgKm9wdHN0cmluZywgY29uc3Qgc3RydWMKKyAjIGRlZmluZSBVU0FHRSAgXAorICAgICAiVXNhZ2U6ICVzIFsiIEZJTEVfRkxBR1MgXAorIAkiXSBbLS1hcHBsZV0gWy0tZXh0ZW5zaW9uXSBbLS1taW1lLWVuY29kaW5nXSBbLS1taW1lLXR5cGVdXG4iIFwKKy0gICAgIiAgICAgICAgICAgIFstZSB0ZXN0bmFtZV0gWy1GIHNlcGFyYXRvcl0gWy1mIG5hbWVmaWxlXSBbLW0gbWFnaWNmaWxlc10gIiBcCistICAgICJmaWxlIC4uLlxuIiBcCisrICAgICIgICAgICAgICAgICBbLWUgdGVzdG5hbWVdIFstRiBzZXBhcmF0b3JdIFstZiBuYW1lZmlsZV0gWy1tIG1hZ2ljZmlsZXNdXG4gIiBcCisrICAgICIgICAgICAgICAgICBbLVAgcGFyYW1ldGVyPWxpbWl0c10gZmlsZSAuLi5cbiIgXAorICAgICAiICAgICAgICVzIC1DIFstbSBtYWdpY2ZpbGVzXVxuIiBcCisgICAgICIgICAgICAgJXMgWy0taGVscF1cbiIKKyAKKy0tIAorMS44LjMuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvZGViaWFuLTc0MjI2Mi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZS9kZWJpYW4tNzQyMjYyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZjQ4NWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvZGViaWFuLTc0MjI2Mi5wYXRjaApAQCAtMCwwICsxLDE5IEBACitUaGUgYXdrIHBhdHRlcm4gd2FzIGNoZWNrZWQgKmJlZm9yZSogdGhlIFBlcmwgcGF0dGVybiwgc28gdGhlIHBlcmwKK3NjcmlwdCB3aXRoIEJFR0lOey4uLn0gd291bGQgYmUgcmVwb3J0ZWQgYXMgYXdrLCB0aGlzIHBhdGNoIGZpeGVzIGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtkZWJpYW5dCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waCBCaWVkbCA8ZGViaWFuLmF4aG5AbWFuY2htYWwuaW4tdWxtLmRlPgorU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KK2RpZmYgLS1naXQgYS9tYWdpYy9NYWdkaXIvY29tbWFuZHMgYi9tYWdpYy9NYWdkaXIvY29tbWFuZHMKKy0tLSBhL21hZ2ljL01hZ2Rpci9jb21tYW5kcworKysrIGIvbWFnaWMvTWFnZGlyL2NvbW1hbmRzCitAQCAtNTcsNiArNTcsNyBAQAorIDAJc3RyaW5nL3d0CSMhXCAvdXNyL2Jpbi9hd2sJYXdrIHNjcmlwdCB0ZXh0IGV4ZWN1dGFibGUKKyAhOm1pbWUJdGV4dC94LWF3aworIDAJcmVnZXgvNDA5Ngk9Xlxcc3swLDEwMH1CRUdJTlxcc3swLDEwMH1be10JYXdrIG9yIHBlcmwgc2NyaXB0IHRleHQKKyshOnN0cmVuZ3RoIC0gMTIKKyAKKyAjIEFUJlQgQmVsbCBMYWJzJyBQbGFuIDkgc2hlbGwKKyAwCXN0cmluZy93dAkjIVwgL2Jpbi9yYwlQbGFuIDkgcmMgc2hlbGwgc2NyaXB0IHRleHQgZXhlY3V0YWJsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlXzUuMjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGVfNS4yNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGI5NWQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlXzUuMjQuYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJGaWxlIGNsYXNzaWZpY2F0aW9uIHRvb2wiCitERVNDUklQVElPTiA9ICJGaWxlIGF0dGVtcHRzIHRvIGNsYXNzaWZ5IGZpbGVzIGRlcGVuZGluZyBcCitvbiB0aGVpciBjb250ZW50cyBhbmQgcHJpbnRzIGEgZGVzY3JpcHRpb24gaWYgYSBtYXRjaCBpcyBmb3VuZC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmRhcndpbnN5cy5jb20vZmlsZS8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKKyMgdHdvIGNsYXVzZSBCU0QKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORztiZWdpbmxpbmU9MjttZDU9NmE3MzgyODcyZWRiNjhkMzNlMWE5Mzk4YjZlMDMxODgiCisKK0RFUEVORFMgPSAiemxpYiBmaWxlLW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInpsaWItbmF0aXZlIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vZmlsZS9maWxlLmdpdCBcCisgICAgICAgIGZpbGU6Ly9kZWJpYW4tNzQyMjYyLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtQWRkLVAtcHJvbXB0LWludG8tVXNhZ2UtaW5mby5wYXRjaCBcCisgICAgICAgICIKKworU1JDUkVWID0gIjNjMDg3NGJlNGQzMjMyZDY3MmIyMGY1MTM0NTFhMzljZmQ3YzU4NWEiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9taXNjLyoubWdjIgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJY3JlYXRlX2NtZGxpbmVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9maWxlIFwKKwkJLS1tYWdpYy1maWxlICR7ZGF0YWRpcn0vbWlzYy9tYWdpYy5tZ2MKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCWNyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZmlsZSBcCisJCS0tbWFnaWMtZmlsZSAke2RhdGFkaXJ9L21pc2MvbWFnaWMubWdjCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmlsZXMvZG9fbm90X2NyZWF0ZV9wZGZfZG9jLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9maWxlcy9kb19ub3RfY3JlYXRlX3BkZl9kb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyODMzYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmlsZXMvZG9fbm90X2NyZWF0ZV9wZGZfZG9jLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSAoZW1iZWRkZWQgc3BlY2lmaWMpCisKK1NpZ25lZC1vZmYtYnk6IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KKworSW5kZXg6IGZsZXgtMi41LjM3L2RvYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGZsZXgtMi41LjM3Lm9yaWcvZG9jL01ha2VmaWxlLmFtCTIwMTItMDctMjEgMDQ6MTg6MjcuMDAwMDAwMDAwICswMzAwCisrKysgZmxleC0yLjUuMzcvZG9jL01ha2VmaWxlLmFtCTIwMTMtMDctMzAgMTc6NTc6MDkuODM0ODM0NTMxICswMzAwCitAQCAtMiw3ICsyLDcgQEAKKyAKKyBpbmZvX1RFWElORk9TID0JZmxleC50ZXhpCisgZGlzdF9tYW5fTUFOUyA9IGZsZXguMQorLWRpc3RfZG9jX0RBVEE9IGZsZXgucGRmCisrRVhUUkFfRElTVD0gZmxleC5wZGYKKyAKKyBDTEVBTkZJTEVTID0gXAorIAlmbGV4LmhrcyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZpbGVzL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmlsZXMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJmZmJhMTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZpbGVzL3J1bi1wdGVzdApAQCAtMCwwICsxLDI5IEBACisjIS9iaW4vc2gKKwordGVzdDE9InRlc3QtYWxsb2MtZXh0cmEgdGVzdC1hcnJheS1uciB0ZXN0LWFycmF5LXIgdGVzdC1iYXNpYy1uciB0ZXN0LWJhc2ljLXIgdGVzdC1leHRlbmRlZCB0ZXN0LXF1b3RlcyBcCit0ZXN0LWJpc29uLW5yIHRlc3QtYmlzb24teXlsbG9jIHRlc3QtYmlzb24teXlsdmFsIHRlc3QtYysrLWJhc2ljIHRlc3QtYy1jcHAtbnIgdGVzdC1wcmVmaXgtbnIgdGVzdC1jY2wgXAordGVzdC1jLWNwcC1yIHRlc3QtYysrLW11bHRpcGxlLXNjYW5uZXJzIHRlc3QtbWVtLXIgdGVzdC1tZW0tbnIgdGVzdC1kZWJ1Zy1uciB0ZXN0LWxpbmVkaXItciB0ZXN0LW5vYW5zaS1yIFwKK3Rlc3QteXlleHRyYSB0ZXN0LWhlYWRlci1yIHRlc3Qtbm9hbnNpLW5yIHRlc3QtZGVidWctciBURU1QTEFURSB0ZXN0LXRvcCB0ZXN0LWhlYWRlci1uciB0ZXN0LXByZWZpeC1yIgordGVzdDI9InRlc3QtbXVsdGlwbGUtc2Nhbm5lcnMtbnIgdGVzdC1wb3NpeGx5LWNvcnJlY3QgdGVzdC1wb3NpeCB0ZXN0LXN0cmluZy1yIHRlc3Qtc3RyaW5nLW5yIgordGVzdDM9InRlc3QtcHRocmVhZCB0ZXN0LWluY2x1ZGUtYnktcHVzaCB0ZXN0LWluY2x1ZGUtYnktYnVmZmVyIHRlc3QtaW5jbHVkZS1ieS1yZWVudHJhbnQiCit0ZXN0ND0idGVzdC1saW5lbm8tbnIgdGVzdC1saW5lbm8tciB0ZXN0LWxpbmVuby10cmFpbGluZyIKK3Rlc3Q1PSJ0ZXN0LWMrKy15eXdyYXAgdGVzdC1yZXNjYW4tciB0ZXN0LXJlc2Nhbi1uciIKK3Rlc3Q2PSJ0ZXN0LXJlamVjdC1uciB0ZXN0LXJlamVjdC1yIgordGVzdDc9InRlc3QtcmVqZWN0LXNlciB0ZXN0LXJlamVjdC12ZXIiCit0ZXN0OD0idGVzdC1tdWx0aXBsZS1zY2FubmVycy1yIgorCitvdXRwdXQoKSB7CisgIGlmIFsgJD8gLWVxIDAgXTsgXAorICAgIHRoZW4gZWNobyAiUEFTUzogJGkiOyBcCisgICAgZWxzZSBlY2hvICJGQUlMOiAkaSI7IFwKKyAgZmk7Cit9CisKK2ZvciBpIGluICR0ZXN0MTsgZG8gJGkvJGkgPCAkaS90ZXN0LmlucHV0ID4vZGV2L251bGw7IG91dHB1dDsgZG9uZQorZm9yIGkgaW4gJHRlc3QyOyBkbyAkaS8kaSA+L2Rldi9udWxsOyBvdXRwdXQ7IGRvbmUKK2ZvciBpIGluICR0ZXN0MzsgZG8gY2QgJGk7IC4vJGkgdGVzdC0xLmlucHV0ID4vZGV2L251bGw7IG91dHB1dDsgY2QgLi47IGRvbmUKK2ZvciBpIGluICR0ZXN0NDsgZG8gdGVzdCBgJGkvJGkgPCAkaS90ZXN0LmlucHV0YCAtZXEgYCRpLyRpIDEgPCAkaS90ZXN0LmlucHV0YCA+L2Rldi9udWxsOyBvdXRwdXQ7IGRvbmUKK2ZvciBpIGluICR0ZXN0NTsgZG8gJGkvJGkgJGkvdGVzdC5pbnB1dCA+L2Rldi9udWxsOyBvdXRwdXQ7IGRvbmUKK2ZvciBpIGluICR0ZXN0NjsgZG8gdGVzdC1yZWplY3QvJGkgPCB0ZXN0LXJlamVjdC90ZXN0LmlucHV0ID4vZGV2L251bGw7IG91dHB1dDsgZG9uZQorZm9yIGkgaW4gJHRlc3Q3OyBkbyB0ZXN0LXJlamVjdC8kaSB0ZXN0LXJlamVjdC8kaS50YWJsZXMgPCB0ZXN0LXJlamVjdC90ZXN0LmlucHV0ID4vZGV2L251bGw7IG91dHB1dDsgZG9uZQorY2QgJHRlc3Q4OyAuLyR0ZXN0OCA+L2Rldi9udWxsOyBpPSR0ZXN0OCBvdXRwdXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZsZXguaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YTI2ZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZsZXguaW5jCkBAIC0wLDAgKzEsNDQgQEAKK1NVTU1BUlkgPSAiRmxleCAoVGhlIEZhc3QgTGV4aWNhbCBBbmFseXplcikiCitERVNDUklQVElPTiA9ICJGbGV4IGlzIGEgZmFzdCBsZXhpY2FsIGFuYWx5c2VyIGdlbmVyYXRvci4gIEZsZXggaXMgYSB0b29sIGZvciBnZW5lcmF0aW5nIHByb2dyYW1zIHRoYXQgcmVjb2duaXplIFwKK2xleGljYWwgcGF0dGVybnMgaW4gdGV4dC4iCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2ZsZXgvIgorCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJCU0QiCitERVBFTkRTICs9ICIke0AnYmlzb24tbmF0aXZlIGZsZXgtbmF0aXZlJyBpZiAnJHtQVEVTVF9FTkFCTEVEfScgPT0gJzEnIGVsc2UgJyd9IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9mbGV4L2ZsZXgtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gcHRlc3QKKworCitNNCA9ICIke2JpbmRpcn0vbTQiCitNNF9jbGFzcy1uYXRpdmUgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L200IgorCitFWFRSQV9PRUNPTkYgKz0gImFjX2N2X3BhdGhfTTQ9JHtNNH0iCitFWFRSQV9PRU1BS0UgKz0gIm00PSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9tNCIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2ZsZXggTTQ9JHtNNH0KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2ZsZXggTTQ9JHtNNH0KK30KKworUkRFUEVORFNfJHtQTn0gKz0gIm00IgorCitkb19jb21waWxlX3B0ZXN0KCkgeworCWZvciBpIGluIGBmaW5kICR7U30vdGVzdHMvIC10eXBlIGQgfGdyZXAgLUV2ICJjb25jYXRlbmF0ZWQtb3B0aW9uc3xyZWplY3R8dGFibGUtb3B0cyIgfCBhd2sgLUYvICd7cHJpbnQgJE5GfSdgOyBcCisJICBkbyBvZV9ydW5tYWtlIC1DICR7U30vdGVzdHMvJGkgLWYgJHtCfS90ZXN0cy8kaS9NYWtlZmlsZSB0b3BfYnVpbGRkaXI9JHtCfSBGTEVYPWZsZXggJGk7IFwKKwlkb25lCisJb2VfcnVubWFrZSAtQyAke1N9L3Rlc3RzL3Rlc3QtcmVqZWN0IC1mICR7Qn0vdGVzdHMvdGVzdC1yZWplY3QvTWFrZWZpbGUgdG9wX2J1aWxkZGlyPSR7Qn0gRkxFWD1mbGV4IHRlc3QtcmVqZWN0LW5yIHRlc3QtcmVqZWN0LXIgdGVzdC1yZWplY3Qtc2VyIHRlc3QtcmVqZWN0LXZlcgorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWZvciBpIGluIGBmaW5kICR7U30vdGVzdHMvIC10eXBlIGQgfCBhd2sgLUYvICd7cHJpbnQgJE5GfSdgOyBcCisJICBkbyBjcCAtciAke1N9L3Rlc3RzLyRpICR7RH0ke1BURVNUX1BBVEh9OyBcCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4XzIuNS4zOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleF8yLjUuMzkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ4NTc0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleF8yLjUuMzkuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIGZsZXguaW5jCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU0NzQyY2Y5MmU4OTA0MGIzOTQ4NmE2MjE5YjY4MDY3IgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZG9fbm90X2NyZWF0ZV9wZGZfZG9jLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzdkNDRjNmJiOGMwNzA1ZTAwMTdhYjlhODRhMTUwMmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWRkMmI1NWYzYmMzOGNiNTEyYjQ4ZmFkN2Q3MmY0M2IxMWVmMjQ0NDg3ZmYyNWZjMDBhYWJlYzFlMzJiNjE3ZiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTI0NTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjguaW5jCkBAIC0wLDAgKzEsMTE4IEBACityZXF1aXJlIGdjYy1jb21tb24uaW5jCisKKyMgVGhpcmQgZGlnaXQgaW4gUFYgc2hvdWxkIGJlIGluY3JlbWVudGVkIGFmdGVyIGEgbWlub3IgcmVsZWFzZQorCitQViA9ICI0LjguNCIKKworIyBCSU5WIHNob3VsZCBiZSBpbmNyZW1lbnRlZCB0byBhIHJldmlzaW9uIGFmdGVyIGEgbWlub3IgZ2NjIHJlbGVhc2UKKworQklOViA9ICI0LjguNCIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vZ2NjLTQuODoiCisKK0RFUEVORFMgPSsgIm1wZnIgZ21wIGxpYm1wYyB6bGliIgorTkFUSVZFREVQUyA9ICJtcGZyLW5hdGl2ZSBnbXAtbmF0aXZlIGxpYm1wYy1uYXRpdmUgemxpYi1uYXRpdmUiCisKK0xJQ0VOU0UgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24gJiBHUEx2MyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKyAgICBmaWxlOi8vQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICBmaWxlOi8vQ09QWUlORzMuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiBcCisgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgZmlsZTovL0NPUFlJTkcuUlVOVElNRTttZDU9ZmU2MGQ4NzA0ODU2N2Q0ZmU4YzhhMGVkMjQ0OGJjYzggXAorIgorCitTUkNfVVJJID0gIlwKKyAgICAke0dOVV9NSVJST1J9L2djYy9nY2MtJHtQVn0vZ2NjLSR7UFZ9LnRhci5iejIgXAorICAgIGZpbGU6Ly8wMDAyLXVjbGliYy1jb25mLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwOS1jOTktc25wcmludGYucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBcCisgICAgZmlsZTovLzAwMTEtaW5kZXhfbWFjcm8ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDEyLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxMy1saWJzdGRjLW5hbWVzcGFjZS5wYXRjaCBcCisgICAgZmlsZTovLzAwMTQtc2gtcHIyNDgzNi5wYXRjaCBcCisgICAgZmlsZTovLzAwMTUtYXJtLVVzZS1UQVJHRVRfRU5ESUFOX09QVElPTi1mb3ItZGV0ZXJtaW5pbmctTVVMVElMSS5wYXRjaCBcCisgICAgZmlsZTovLzAwMTYtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE3LWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaCBcCisgICAgZmlsZTovLzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyMS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDIyLUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDIzLVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyNC1QUi10YXJnZXQtMzIyMTkucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI1LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyNi1saWJnY2Mtc2psai1jaGVjay5wYXRjaCBcCisgICAgZmlsZTovLzAwMjctY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI4LU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDMwLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaCBcCisgICAgZmlsZTovLzAwMzEtRGlzYWJsZS1zZHQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDMyLWxpYnRvb2wucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDM0LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDM1LXdjYXN0LXF1YWwtUFItNTUzODMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDM4LWdjYy00LjgtYnVpbGQtYXJncy5wYXRjaCBcCisgICAgZmlsZTovLzAwNDAtZml4LWcrKy1zeXNyb290LnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0MS1saWJ0b29sLWF2b2lkLWxpYmRpci5wYXRjaCBcCisgICAgZmlsZTovLzAwNDItcHI1Nzc0OC5wYXRjaCBcCisgICAgZmlsZTovLzAwNDMtY3BwLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0NC1nZW5ndHlwZXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQ2LWxpYmF0b21pYy1kZXB0cmFja2luZy5wYXRjaCBcCisgICAgZmlsZTovLzAwNDctcmVwb21lbWJ1Zy5wYXRjaCBcCisgICAgZmlsZTovLzAwNDktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBcCisgICAgZmlsZTovL3RhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiNWE4NGEzMDgzOWIyYWNhMjJhMmQ3MjNkZTJhNjI2ZWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGE4MGFhMjM3OThiOGU5YjU3OTM0OTRiOGM5NzZiMzliOGQ5YWEyZTUzY2Q1ZWQ1NTM0YWZmNjYyYTdmODY5NSIKKworUyA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9L2djYy0ke1BWfSIKK0IgPSAiJHtXT1JLRElSfS9nY2MtJHtQVn0vYnVpbGQuJHtIT1NUX1NZU30uJHtUQVJHRVRfU1lTfSIKKworIyBMYW5ndWFnZSBPdmVycmlkZXMKK0ZPUlRSQU4gPSAiIgorSkFWQSA9ICIiCisKK0xUTyA9ICItLWVuYWJsZS1sdG8iCisKK0VYVFJBX09FQ09ORl9CQVNFID0gIlwKKyAgICAke0xUT30gXAorICAgIC0tZW5hYmxlLWxpYnNzcCBcCisgICAgLS1kaXNhYmxlLWJvb3RzdHJhcCBcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS13aXRoLWxpbmtlci1oYXNoLXN0eWxlPSR7TElOS0VSX0hBU0hfU1RZTEV9IFwKKyAgICAtLWVuYWJsZS1saW5rZXItYnVpbGQtaWQgXAorICAgIC0td2l0aC1wcGw9bm8gXAorICAgIC0td2l0aC1jbG9vZz1ubyBcCisgICAgLS1lbmFibGUtY2hlY2tpbmc9cmVsZWFzZSBcCisgICAgLS1lbmFibGUtY2hlYWRlcnM9Y19nbG9iYWwgXAorIgorCitFWFRSQV9PRUNPTkZfSU5JVElBTCA9ICJcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0tZGlzYWJsZS1saWJnb21wIFwKKyAgICAtLWRpc2FibGUtbGlic3NwIFwKKyAgICAtLWRpc2FibGUtbGlicXVhZG1hdGggXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS1kaXNhYmxlLWx0byBcCisgICAgLS1kaXNhYmxlLXBsdWdpbiBcCisgICAgLS1lbmFibGUtZGVjaW1hbC1mbG9hdD1ubyBcCisiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZGlzYWJsZS1kZWNpbWFsLWZsb2F0ICIKKworRVhUUkFfT0VDT05GX1BBVEhTID0gIlwgCisgICAgLS13aXRoLWd4eC1pbmNsdWRlLWRpcj0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke3RhcmdldF9pbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcIAorICAgIC0td2l0aC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcIAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisiCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ODgwMTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBiZjNkOTZhZTU4ZmExODBiOGI0NjhkMjVkYzJlMDIwOWRhY2EyNzUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzc6MTEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMS8zNV0gZ2NjLTQuMy4xOiBBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGNvbmZpZ3VyZSAgICB8ICAgIDIgKy0KKyBjb25maWd1cmUuYWMgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGQ4MDk1MzUuLjFiNzZjOTAgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTc0MzksNyArNzQzOSw3IEBAIGZpCisgIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgorIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCisgCistRkxBR1NfRk9SX1RBUkdFVD0KKytGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgorIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgorICAqIiBuZXdsaWIgIiopCisgICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDQ4ZWMxYWEuLjg5ZDFkM2YgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI4NzMsNyArMjg3Myw3IEBAIGZpCisgIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgorIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCisgCistRkxBR1NfRk9SX1RBUkdFVD0KKytGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgorIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgorICAqIiBuZXdsaWIgIiopCisgICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwMi11Y2xpYmMtY29uZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDItdWNsaWJjLWNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhM2IxMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDItdWNsaWJjLWNvbmYucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSBkMDMwOTczYzg3MmMwMGQ5MTY5MjFkODRkZWVlMGFmMmMwZDM4MDgxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzg6MjUgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMi8zNV0gdWNsaWJjLWNvbmYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggfCAgICA0ICsrKysKKyBsaWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyAgICAgfCAgICA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCBiL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAoraW5kZXggNjBiMDQ5Ny4uNmRjN2VhZCAxMDA3NTUKKy0tLSBhL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAorKysrIGIvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCitAQCAtMTA2LDYgKzEwNiwxMCBAQCBpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC1nbnUgXQorICB0aGVuCisgICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKytlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LXVjbGliYyBdCisrIHRoZW4KKysgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisrICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorIGVsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCBdIDsgdGhlbgorICAgbWFrZSBib290c3RyYXAgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwgfHwgZXhpdCAxCitkaWZmIC0tZ2l0IGEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgYi9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworaW5kZXggNzQzZDk1MS4uYWU0ZWE2MCAxMDA3NTUKKy0tLSBhL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCisrKysgYi9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworQEAgLTYwMyw3ICs2MDMsNyBAQCBob3N0X29zPWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKyAKKyAjIFRyYW5zZm9ybSBsaW51eCogdG8gKi0qLWxpbnV4LWdudSosIHRvIHN1cHBvcnQgb2xkIGNvbmZpZ3VyZSBzY3JpcHRzLgorIGNhc2UgJGhvc3Rfb3MgaW4KKy1saW51eC1nbnUqKSA7OworK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikgOzsKKyBsaW51eCopIGhvc3Q9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoLiotLiotbGludXhcKVwoLipcKSQvXDEtZ251XDIvJ2AKKyBlc2FjCisgCitAQCAtMTI0Nyw3ICsxMjQ3LDcgQEAgbGludXgtZ251b2xkbGQqIHwgbGludXgtZ251YW91dCogfCBsaW51eC1nbnVjb2ZmKikKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOThlOTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApAQCAtMCwwICsxLDg3IEBACitGcm9tIGQyZDlkZDc1NmM0MzU2ZDE0ZGQ3YWUwMDM4NTYzNDRjYjRmMzc5ODUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MDoxMiArMDQwMAorU3ViamVjdDogW1BBVENIIDAzLzM1XSBnY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIHwgICAgNSArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCAgfCAgICA5ICsrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaCAgfCAgICA5ICsrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKK2luZGV4IDBkMzA5YTUuLmYyZjFlMWYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCitAQCAtMjYzLDUgKzI2MywxMCBAQCBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKyAjaWZkZWYgX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUCisgI2RlZmluZSBfR0xJQkNYWF9MREJMX0NPTVBBVChkYmwsIGxkYmwpIFwKKyAgIGV4dGVybiAiQyIgdm9pZCBsZGJsICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoYWxpYXMgKCNkYmwpKSkKKysjaWZkZWYgX19VQ0xJQkNfXworKy8vIFRoaXMgaXMgYmVjYXVzZSBfX2NfbG9jYWxlIGlzIG9mIHR5cGUgX19jdHlwZV90b3VwbG93X3QqIHdoaWNoIGlzIHNob3J0IG9uIHVjbGliYy4gZm9yIGdsaWJjIGl0cyBpbnQqCisrX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3RvX3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BzLCBfWlN0MTRfX2NvbnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMpOworKyNlbHNlCisgX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3RvX3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BpLCBfWlN0MTRfX2NvbnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGkpOworKyNlbmRpZgorICNlbmRpZiAvLyBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKK2luZGV4IGI1ZmQ5ODkuLjNkYTlhNWQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAorQEAgLTQwLDEzICs0MCwyMiBAQAorIAorICNpbmNsdWRlIDxjbG9jYWxlPgorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2VuZGlmCisrCisgI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisgCisgbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysgIHR5cGVkZWYgX19jdHlwZV90b3VwbG93X3QqCV9fY19sb2NhbGU7CisrI2Vsc2UKKyAgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisrI2VuZGlmCisgCisgICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgYW5kIGxvbmcgZG91YmxlIHRvIHN0cmluZyBhbmQKKyAgIC8vIHJldHVybiBsZW5ndGggb2Ygc3RyaW5nLiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAoraW5kZXggMmQ4ZTk3OC4uMTRlYjA4ZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCitAQCAtMzMsNiArMzMsMTEgQEAKKyAKKyAvLyBJbmZvcm1hdGlvbiBhcyBnbGVhbmVkIGZyb20gL3Vzci9pbmNsdWRlL2N0eXBlLmgKKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNlbmRpZgorKworIG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQorIHsKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorQEAgLTQxLDcgKzQ2LDExIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICBzdHJ1Y3QgY3R5cGVfYmFzZQorICAgeworICAgICAvLyBOb24tc3RhbmRhcmQgdHlwZWRlZnMuCisrI2lmZGVmIF9fVUNMSUJDX18KKysgICAgdHlwZWRlZiBjb25zdCBfX2N0eXBlX3RvdXBsb3dfdCoJX190b190eXBlOworKyNlbHNlCisgICAgIHR5cGVkZWYgY29uc3QgaW50KiAJCV9fdG9fdHlwZTsKKysjZW5kaWYKKyAKKyAgICAgLy8gTkI6IE9mZnNldHMgaW50byBjdHlwZTxjaGFyPjo6X01fdGFibGUgZm9yY2UgYSBwYXJ0aWN1bGFyIHNpemUKKyAgICAgLy8gb24gdGhlIG1hc2sgdHlwZS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSBkb24ndCB1c2UgYW4gZW51bS4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZjVmMzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2gKQEAgLTAsMCArMSwyODYyIEBACitGcm9tIGE1NWM3NTFhNDQ5YzJjYmYwYjNmY2MwN2FhYjFiODZiZjk2NjE1MTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MTozOSArMDQwMAorU3ViamVjdDogW1BBVENIIDA0LzM1XSB1Y2xpYmMtbG9jYWxlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM3ICsrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgIDYzICsrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAgMTYwICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgMTE3ICsrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjICAgICAgICB8ICAzMDggKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyAgICAgICAgfCAgIDgwICsrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgIDMwMCArKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyAgICAgICB8ICAxMDAgKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAgMTE4ICsrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICA2OTIgKysrKysrKysrKysrKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICAxNjAgKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8ICA0MDYgKysrKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAgIDY4ICsrCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDc1ICsrKworIGxpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oICAgICAgIHwgICAgMiArCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyICAgICAgICAgICAgICAgICAgfCAgICAyICsKKyAxNiBmaWxlcyBjaGFuZ2VkLCAyNjg4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00IGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAoraW5kZXggMDg3MWE2YS4uMzI2ZDdlZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKKysrKyBiL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKK0BAIC0xOTA1LDYgKzE5MDUsOSBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgICotdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrICAgICAgICA7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQorIAk7OworQEAgLTIwNjksNiArMjA3Miw0MCBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKKyAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCisgICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorICAgICAgIDs7CisrICAgIHVjbGliYykKKysgICAgICBBQ19NU0dfUkVTVUxUKHVjbGliYykKKysKKysgICAgICAjIERlY2xhcmUgaW50ZW50aW9uIHRvIHVzZSBnZXR0ZXh0LCBhbmQgYWRkIHN1cHBvcnQgZm9yIHNwZWNpZmljCisrICAgICAgIyBsYW5ndWFnZXMuCisrICAgICAgIyBGb3Igc29tZSByZWFzb24sIEFMTF9MSU5HVUFTIGhhcyB0byBiZSBiZWZvcmUgQU0tR05VLUdFVFRFWFQKKysgICAgICBBTExfTElOR1VBUz0iZGUgZnIiCisrCisrICAgICAgIyBEb24ndCBjYWxsIEFNLUdOVS1HRVRURVhUIGhlcmUuIEluc3RlYWQsIGFzc3VtZSBnbGliYy4KKysgICAgICBBQ19DSEVDS19QUk9HKGNoZWNrX21zZ2ZtdCwgbXNnZm10LCB5ZXMsIG5vKQorKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCisrICAgICAgICBVU0VfTkxTPXllcworKyAgICAgIGZpCisrICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCisrICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCisrICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCisrICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCisrICAgICAgZG9uZQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfTU9GSUxFUykKKysgICAgICBBQ19TVUJTVChnbGliY3h4X1BPRklMRVMpCisrCisrICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yYWUzZTRhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC0wLDAgKzEsNjMgQEAKKysvLyBQcm90b3R5cGVzIGZvciBHTElCQyB0aHJlYWQgbG9jYWxlIF9fLXByZWZpeGVkIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLyBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisrI2luY2x1ZGUgPGNsb2NhbGU+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAorKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCisrZXh0ZXJuICJDIiBfX3R5cGVvZihubF9sYW5naW5mb19sKSBfX25sX2xhbmdpbmZvX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJjb2xsX2wpIF9fc3RyY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyZnRpbWVfbCkgX19zdHJmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9kX2wpIF9fc3RydG9kX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2ZfbCkgX19zdHJ0b2ZfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvbGRfbCkgX19zdHJ0b2xkX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ4ZnJtX2wpIF9fc3RyeGZybV9sOworK2V4dGVybiAiQyIgX190eXBlb2YobmV3bG9jYWxlKSBfX25ld2xvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGZyZWVsb2NhbGUpIF9fZnJlZWxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGR1cGxvY2FsZSkgX19kdXBsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK2V4dGVybiAiQyIgX190eXBlb2YoaXN3Y3R5cGVfbCkgX19pc3djdHlwZV9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93bG93ZXJfbCkgX190b3dsb3dlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93dXBwZXJfbCkgX190b3d1cHBlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzY29sbF9sKSBfX3djc2NvbGxfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2Z0aW1lX2wpIF9fd2NzZnRpbWVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKKysjZW5kaWYKKysKKysjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjUwODFkYzEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTAsMCArMSwxNjAgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxjZXJybm8+ICAvLyBGb3IgZXJybm8KKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxzdGRleGNlcHQ+CisrI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworKyNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2Y7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19sZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICBfX2NfbG9jYWxlIF9fb2xkKQorKyAgeworKyAgICBfX2Nsb2MgPSBfX25ld2xvY2FsZSgxIDw8IExDX0FMTCwgX19zLCBfX29sZCk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgaWYgKCFfX2Nsb2MpCisrICAgICAgeworKwkvLyBUaGlzIG5hbWVkIGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIE9TLgorKwlfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUgIgorKwkJCSAgICAgICJuYW1lIG5vdCB2YWxpZCIpKTsKKysgICAgICB9CisrI2VuZGlmCisrICB9CisrCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsKKysgICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKysgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsKKysgIH0KKysKKysgIF9fY19sb2NhbGUKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KKyt9IC8vIG5hbWVzcGFjZSBzdGQKKysKKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9CisrICAgIHsKKysgICAgICAiTENfQ1RZUEUiLAorKyAgICAgICJMQ19OVU1FUklDIiwKKysgICAgICAiTENfVElNRSIsCisrICAgICAgIkxDX0NPTExBVEUiLAorKyAgICAgICJMQ19NT05FVEFSWSIsCisrICAgICAgIkxDX01FU1NBR0VTIiwKKysjaWYgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgIT0gMAorKyAgICAgICJMQ19QQVBFUiIsCisrICAgICAgIkxDX05BTUUiLAorKyAgICAgICJMQ19BRERSRVNTIiwKKysgICAgICAiTENfVEVMRVBIT05FIiwKKysgICAgICAiTENfTUVBU1VSRU1FTlQiLAorKyAgICAgICJMQ19JREVOVElGSUNBVElPTiIKKysjZW5kaWYKKysgICAgfTsKKyt9CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOworK30gIC8vIG5hbWVzcGFjZSBzdGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZGEwN2MxZgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC0wLDAgKzEsMTE3IEBACisrLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZuZGVmIF9DX0xPQ0FMRV9ICisrI2RlZmluZSBfQ19MT0NBTEVfSCAxCisrCisrI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorKworKyNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrI2VuZGlmCisrI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBjYXRlZ29yaWVzCisrI2VuZGlmCisrLy8gI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyA2CisrI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworK30KKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICB0eXBlZGVmIF9fbG9jYWxlX3QJCV9fY19sb2NhbGU7CisrI2Vsc2UKKysgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisrI2VuZGlmCisrCisrICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCisrICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorKyAgLy8gYmUgYXZvaWRlZC4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KKysgICAgaW50CisrICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCisrCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKKysgICAgeworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fc2F2LCBfX29sZCk7CisrICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCAiQyIpOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CisrI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisrI2VuZGlmCisrICAgICAgcmV0dXJuIF9fcmV0OworKyAgICB9CisrfQorKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNjRhYTk2MgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworQEAgLTAsMCArMSwzMDggQEAKKysvLyBzdGQ6OmNvZGVjdnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuNSAtIFRlbXBsYXRlIGNsYXNzIGNvZGVjdnQKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Y3N0ZGxpYj4gIC8vIEZvciBNQl9DVVJfTUFYCisrI2luY2x1ZGUgPGNsaW1pdHM+ICAvLyBGb3IgTUJfTEVOX01BWAorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAorKwkgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCSBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwkgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisrICB7CisrICAgIHJlc3VsdCBfX3JldCA9IG9rOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gd2NzbnJ0b21icyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBmYWxsIGJhY2sgdG8gd2NydG9tYiBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogd2NzbnJ0b21icyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQgPSB3bWVtY2hyKF9fZnJvbV9uZXh0LCBMJ1wwJywKKysJCQkJCQkgICAgICBfX2Zyb21fZW5kIC0gX19mcm9tX25leHQpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwljb25zdCBzaXplX3QgX19jb252ID0gd2NzbnJ0b21icyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJCSBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCQkgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gd2NydG9tYi4KKysJICAgIGZvciAoOyBfX2Zyb20gPCBfX2Zyb21fbmV4dDsgKytfX2Zyb20pCisrCSAgICAgIF9fdG9fbmV4dCArPSB3Y3J0b21iKF9fdG9fbmV4dCwgKl9fZnJvbSwgJl9fdG1wX3N0YXRlKTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBleHRlcm5fdHlwZSBfX2J1ZltNQl9MRU5fTUFYXTsKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgIGNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3J0b21iKF9fYnVmLCAqX19mcm9tX25leHQsICZfX3RtcF9zdGF0ZSk7CisrCSAgICBpZiAoX19jb252ID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX3RvX2VuZCAtIF9fdG9fbmV4dCkpCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICAgIGVsc2UKKysJICAgICAgeworKwkJbWVtY3B5KF9fdG9fbmV4dCwgX19idWYsIF9fY29udik7CisrCQlfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCQlfX3RvX25leHQgKz0gX19jb252OworKwkJKytfX2Zyb21fbmV4dDsKKysJICAgICAgfQorKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorKwlpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwlpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIHN0b3JlIGEgTCdcMCcgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87CisrCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKKysJICYmIF9fcmV0ID09IG9rOykKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tX25leHQsICdcMCcsCisrCQkJCQkJCQkgIF9fZnJvbV9lbmQKKysJCQkJCQkJCSAgLSBfX2Zyb21fbmV4dCkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAorKwkJCQkgICBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yICg7OyArK19fdG9fbmV4dCwgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhfX3RvX25leHQsIF9fZnJvbSwgX19mcm9tX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb207CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCA9IGVycm9yOworKwkgIH0KKysJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQorKwkgIHsKKysJICAgIC8vIEl0IGlzIHVuY2xlYXIgd2hhdCB0byByZXR1cm4gaW4gdGhpcyBjYXNlIChzZWUgRFIgMzgyKS4KKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICB9CisrCisrCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCisrCSAgeworKwkgICAgaWYgKF9fdG9fbmV4dCA8IF9fdG9fZW5kKQorKwkgICAgICB7CisrCQkvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkJX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkJKytfX2Zyb21fbmV4dDsKKysJCSpfX3RvX25leHQrKyA9IEwnXDAnOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCisrICB7CisrICAgIC8vIFhYWCBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZW5jb2RpbmcgaXMKKysgICAgLy8gc3RhdGVsZXNzIGFuZCBpcyBlaXRoZXIgc2luZ2xlLWJ5dGUgb3IgdmFyaWFibGUtd2lkdGguCisrICAgIGludCBfX3JldCA9IDA7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorKyAgICAgIF9fcmV0ID0gMTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncy4KKysgICAgaW50IF9fcmV0ID0gTUJfQ1VSX01BWDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2xlbmd0aChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CisrICB7CisrICAgIGludCBfX3JldCA9IDA7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGFkdmFuY2UgcGFzdCBpdCBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysKKysgICAgLy8gQSBkdW1teSBpbnRlcm5hbCBidWZmZXIgaXMgbmVlZGVkIGluIG9yZGVyIGZvciBtYnNucnRvY3dzIHRvIGNvbnNpZGVyCisrICAgIC8vIGl0cyBmb3VydGggcGFyYW1ldGVyIChpdCB3b3VsZG4ndCB3aXRoIE5VTEwgYXMgZmlyc3QgcGFyYW1ldGVyKS4KKysgICAgd2NoYXJfdCogX190byA9IHN0YXRpY19jYXN0PHdjaGFyX3QqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZih3Y2hhcl90KQorKwkJCQkJCQkgICAqIF9fbWF4KSk7CisrICAgIHdoaWxlIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tLCAnXDAnLAorKwkJCQkJCQkJICBfX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbSkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZW5kOworKworKwljb25zdCBleHRlcm5fdHlwZSogX190bXBfZnJvbSA9IF9fZnJvbTsKKysJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190bywgJl9fZnJvbSwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbSwKKysJCQkJICAgX19tYXgsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gbWJydG93Yy4KKysJICAgIGZvciAoX19mcm9tID0gX190bXBfZnJvbTs7IF9fZnJvbSArPSBfX2NvbnYpCisrCSAgICAgIHsKKysJCV9fY29udiA9IG1icnRvd2MoTlVMTCwgX19mcm9tLCBfX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJICAgIGJyZWFrOworKwkgIH0KKysJaWYgKCFfX2Zyb20pCisrCSAgX19mcm9tID0gX19mcm9tX2NodW5rX2VuZDsKKysKKysJX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJX19tYXggLT0gX19jb252OworKworKwlpZiAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCisrCSAgeworKwkgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgICsrX19mcm9tOworKwkgICAgKytfX3JldDsKKysJICAgIC0tX19tYXg7CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jMjY2NGE3CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDgwIEBACisrLy8gc3RkOjpjb2xsYXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi40LjEuMiAgY29sbGF0ZSB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKysjZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCisrI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCisrICAvLyBiZSBwdXQgdGhlcmUgaW5zdGVhZCBvZiBoZXJlLgorKyAgdGVtcGxhdGU8PgorKyAgICBpbnQKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiBfX29uZSwgY29uc3QgY2hhciogX190d28pIGNvbnN0CisrICAgIHsKKysgICAgICBpbnQgX19jbXAgPSBfX3N0cmNvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiBfX3RvLCBjb25zdCBjaGFyKiBfX2Zyb20sCisrCQkJCXNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fc3RyeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICBpbnQKKysgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90KiBfX29uZSwKKysJCQkJIGNvbnN0IHdjaGFyX3QqIF9fdHdvKSBjb25zdAorKyAgICB7CisrICAgICAgaW50IF9fY21wID0gX193Y3Njb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHNpemVfdAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCogX190bywgY29uc3Qgd2NoYXJfdCogX19mcm9tLAorKwkJCQkgICBzaXplX3QgX19uKSBjb25zdAorKyAgICB7IHJldHVybiBfX3djc3hmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyOTRlM2EKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDMwMCBAQAorKy8vIHN0ZDo6Y3R5cGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuMS4yICBjdHlwZSB2aXJ0dWFsIGZ1bmN0aW9ucy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQorKyNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQorKyNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorKyAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCisrICB0ZW1wbGF0ZTw+CisrICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQorKyAgICB7CisrICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJeworKwkgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUpOworKwkgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSwgX19zKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIHRoaXMtPl9NX3RvdXBwZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b3VwcGVyOworKwkgIHRoaXMtPl9NX3RvbG93ZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b2xvd2VyOworKwkgIHRoaXMtPl9NX3RhYmxlID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfYjsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCisrICBjdHlwZTx3Y2hhcl90Pjo6X01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3QKKysgIHsKKysgICAgX193bWFza190eXBlIF9fcmV0OworKyAgICBzd2l0Y2ggKF9fbSkKKysgICAgICB7CisrICAgICAgY2FzZSBzcGFjZToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJzcGFjZSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwcmludDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwcmludCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBjbnRybDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJjbnRybCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB1cHBlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ1cHBlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBsb3dlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJsb3dlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbHBoYToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbHBoYSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwdW5jdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwdW5jdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB4ZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgieGRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFsbnVtOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFsbnVtIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGdyYXBoOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImdyYXBoIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwlfX3JldCA9IF9fd21hc2tfdHlwZSgpOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd3VwcGVyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd3VwcGVyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd2xvd2VyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd2xvd2VyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgYm9vbAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorKyAgeworKyAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKyAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KKysgICAgYm9vbCBfX3JldCA9IGZhbHNlOworKyAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKyAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKysJICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJeworKwkgIF9fcmV0ID0gdHJ1ZTsKKysJICBicmVhazsKKysJfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMoY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgbWFzayogX192ZWMpIGNvbnN0CisrICB7CisrICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX3ZlYywgKytfX2xvKQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrCW1hc2sgX19tID0gMDsKKysJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKwkgIGlmIChfX2lzd2N0eXBlX2woKl9fbG8sIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwkgICAgX19tIHw9IF9NX2JpdFtfX2JpdGN1cl07CisrCSpfX3ZlYyA9IF9fbTsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiAhdGhpcy0+ZG9faXMoX19tLCAqX19sbykpCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiB0aGlzLT5kb19pcyhfX20sICpfX2xvKSAhPSAwKQorKyAgICAgICsrX19sbzsKKysgICAgcmV0dXJuIF9fbG87CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjaGFyIF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9NX3dpZGVuW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOyB9CisrCisrICBjb25zdCBjaGFyKgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgd2NoYXJfdCogX19kZXN0KSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKwkqX19kZXN0ID0gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG8pXTsKKysJKytfX2xvOworKwkrK19fZGVzdDsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY2hhcgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KHdjaGFyX3QgX193YywgY2hhciBfX2RmYXVsdCkgY29uc3QKKysgIHsKKysgICAgaWYgKF9fd2MgPj0gMCAmJiBfX3djIDwgMTI4ICYmIF9NX25hcnJvd19vaykKKysgICAgICByZXR1cm4gX01fbmFycm93W19fd2NdOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYihfX3djKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIGNoYXIgX19kZmF1bHQsCisrCSAgICBjaGFyKiBfX2Rlc3QpIGNvbnN0CisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgaWYgKF9NX25hcnJvd19vaykKKysgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrCXsKKysJICBpZiAoKl9fbG8gPj0gMCAmJiAqX19sbyA8IDEyOCkKKysJICAgICpfX2Rlc3QgPSBfTV9uYXJyb3dbKl9fbG9dOworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAgICAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysJICAgIH0KKysJICArK19fbG87CisrCSAgKytfX2Rlc3Q7CisrCX0KKysgICAgZWxzZQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7CisrCSAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysJICArK19fbG87CisrCSAgKytfX2Rlc3Q7CisrCX0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgdm9pZAorKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfY3R5cGUoKQorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIHdpbnRfdCBfX2k7CisrICAgIGZvciAoX19pID0gMDsgX19pIDwgMTI4OyArK19faSkKKysgICAgICB7CisrCWNvbnN0IGludCBfX2MgPSB3Y3RvYihfX2kpOworKwlpZiAoX19jID09IEVPRikKKysJICBicmVhazsKKysJZWxzZQorKwkgIF9NX25hcnJvd1tfX2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKTsKKysgICAgICB9CisrICAgIGlmIChfX2kgPT0gMTI4KQorKyAgICAgIF9NX25hcnJvd19vayA9IHRydWU7CisrICAgIGVsc2UKKysgICAgICBfTV9uYXJyb3dfb2sgPSBmYWxzZTsKKysgICAgZm9yIChzaXplX3QgX19qID0gMDsKKysJIF9faiA8IHNpemVvZihfTV93aWRlbikgLyBzaXplb2Yod2ludF90KTsgKytfX2opCisrICAgICAgX01fd2lkZW5bX19qXSA9IGJ0b3djKF9faik7CisrCisrICAgIGZvciAoc2l6ZV90IF9fayA9IDA7IF9fayA8PSAxMTsgKytfX2spCisrICAgICAgeworKwlfTV9iaXRbX19rXSA9IHN0YXRpY19jYXN0PG1hc2s+KF9JU2JpdChfX2spKTsKKysJX01fd21hc2tbX19rXSA9IF9NX2NvbnZlcnRfdG9fd21hc2soX01fYml0W19fa10pOworKyAgICAgIH0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICB9CisrI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTM1OTRkOQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMTAwIEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNlbHNlCisrI3VuZGVmIGdldHRleHQKKysjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorKyAgdGVtcGxhdGU8PgorKyAgICBzdHJpbmcKKysgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KGdldHRleHQoX19kZmF1bHQuY19zdHIoKSkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbHNlCisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbmRpZgorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHdzdHJpbmcKKysgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgd3N0cmluZyYgX19kZmF1bHQpIGNvbnN0CisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxzZQorKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZW5kaWYKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjE0MjQwNzgKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0wLDAgKzEsMTE4IEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKytleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKKysjZWxzZQorKyN1bmRlZiBfX3RleHRkb21haW4KKysjdW5kZWYgX19iaW5kdGV4dGRvbWFpbgorKyNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisrI2VuZGlmCisrCisrICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoc2l6ZV90IF9fcmVmcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfZ2V0X2NfbG9jYWxlKCkpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpCisrICAgICB7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCXNpemVfdCBfX3JlZnMpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCisrICAgICB7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKyAgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisrCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisrICAgIHsKKysgICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisrICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CisrICAgIH0KKysKKysgIC8vIFZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKKysgICAgeworKyAgICAgIGlmIChfTV9uYW1lX21lc3NhZ2VzICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZworKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLAorKwkJCSAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0CisrICAgIHsKKysgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KKysgICAgICAvLyBiZSB1c2VkLgorKyAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdm9pZAorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdAorKyAgICB7IH0KKysKKysgICAvLyBtZXNzYWdlc19ieW5hbWUKKysgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpCisrICAgICB7CisrICAgICAgIGlmICh0aGlzLT5fTV9uYW1lX21lc3NhZ2VzICE9IGxvY2FsZTo6ZmFjZXQ6Ol9TX2dldF9jX25hbWUoKSkKKysJIGRlbGV0ZSBbXSB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzOworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJIHsKKysJICAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKKysJIH0KKysgICAgIH0KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYWE1MjczMQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsNjkyIEBACisrLy8gc3RkOjptb25leXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi42LjMuMiAgbW9uZXlwdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBvcHRpbWl6ZSB0aGlzIGZvciB1Y2xpYmMKKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CisrICAvLyBzcGFjZSBub25lIHN5bWJvbCBzaWduIHZhbHVlCisrICBtb25leV9iYXNlOjpwYXR0ZXJuCisrICBtb25leV9iYXNlOjpfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pCisrICB7CisrICAgIHBhdHRlcm4gX19yZXQ7CisrCisrICAgIC8vIFRoaXMgaW5zYW5lbHkgY29tcGxpY2F0ZWQgcm91dGluZSBhdHRlbXB0cyB0byBjb25zdHJ1Y3QgYSB2YWxpZAorKyAgICAvLyBwYXR0ZXJuIGZvciB1c2Ugd2l0aCBtb255ZXB1bmN0LiBBIGNvdXBsZSBvZiBpbnZhcmlhbnRzOgorKworKyAgICAvLyBpZiAoX19wcmVjZWRlcykgc3ltYm9sIC0+IHZhbHVlCisrICAgIC8vIGVsc2UgdmFsdWUgLT4gc3ltYm9sCisrCisrICAgIC8vIGlmIChfX3NwYWNlKSBzcGFjZQorKyAgICAvLyBlbHNlIG5vbmUKKysKKysgICAgLy8gbm9uZSA9PSBuZXZlciBmaXJzdAorKyAgICAvLyBzcGFjZSBuZXZlciBmaXJzdCBvciBsYXN0CisrCisrICAgIC8vIEFueSBlbGVnYW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGFyZSB3ZWxjb21lLgorKyAgICBzd2l0Y2ggKF9fcG9zbikKKysgICAgICB7CisrICAgICAgY2FzZSAwOgorKyAgICAgIGNhc2UgMToKKysJLy8gMSBUaGUgc2lnbiBwcmVjZWRlcyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KKysJX19yZXQuZmllbGRbMF0gPSBzaWduOworKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24uCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24gYW5kIGVuZHMgd2l0aCBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMjoKKysJLy8gMiBUaGUgc2lnbiBmb2xsb3dzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIGVpdGhlciBlbmRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkgICAgX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZW5kcyB3aXRoIHNpZ24gdGhlbiBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMzoKKysJLy8gMyBUaGUgc2lnbiBpbW1lZGlhdGVseSBwcmVjZWRlcyB0aGUgc3ltYm9sLgorKwlpZiAoX19wcmVjZWRlcykKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHNpZ247CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgNDoKKysJLy8gNCBUaGUgc2lnbiBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkgICAgX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysJCQkJCQkgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCB0cnVlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gdHJ1ZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKwkJCQkJCSAgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCBmYWxzZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gZmFsc2UKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJCQkJCQljb25zdCBjaGFyKikKKysjZWxzZQorKwkJCQkJCQljb25zdCBjaGFyKiBfX25hbWUpCisrI2VuZGlmCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysKKysJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKworKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKKysJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7CisrCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKwkgICAgeworKwkgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysJICAgICAgc2l6ZV90IF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysJICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysJICAgICAgX01fZGF0YSA9IDA7CisrCSAgICAgIGRlbGV0ZSBfX3djc19wczsKKysJICAgICAgZGVsZXRlIF9fd2NzX25zOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0KKysKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLAorKwkJCQkJCSAgICAgIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICB2b2lkCisrICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJICAgICAgIGNvbnN0IGNoYXIqKQorKyNlbHNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgIHsKKysgICAgaWYgKCFfTV9kYXRhKQorKyAgICAgIF9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIGZhbHNlPjsKKysKKysgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysgICAgICAgICAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICB0cnkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysgICAgICAgICAgICAgIHNpemVfdCBfX2xlbjsKKysgICAgICAgICAgICAgIF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKyAgICAgICAgICAgICAgaWYgKF9fbGVuKQorKyAgICAgICAgICAgICAgICB7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKysJICAgICAgaWYgKCFfX25wb3NuKQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOworKwkgICAgICBlbHNlIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysgICAgICAgICAgY2F0Y2ggKC4uLikKKysJICAgIHsKKysJICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgICAgICAgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0KKysKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ucG9zbik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQorKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44ODNlYzFhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIHN0ZDo6bnVtcHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjMuMS4yICBudW1wdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKERFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChUSE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysKKysJICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSAnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gInRydWUiOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OworKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSAiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV0pOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysKKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCX0KKysKKysgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9IEwidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9IEwiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKyAjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lMDcwN2Q3CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDQwNiBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6CisrICAgIF9NX3B1dChjaGFyKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgY2hhciogX19mb3JtYXQsCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisrCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyNlbHNlCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorKyAgICAgIGlmIChfX2xlbiA9PSAwKQorKwlfX3NbMF0gPSAnXDAnOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPGNoYXI+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9ICJQTSI7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9ICJNb25kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSAiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9ICJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSAiVGh1cnNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSAiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gIlN1biI7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSAiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9ICJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gIldlZCI7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSAiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9ICJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gIlNhdCI7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSAiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSAiTWFyY2giOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSAiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gIkp1bmUiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSAiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9ICJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSAiU2VwdGVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSAiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSAiRGVjZW1iZXIiOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9ICJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSAiTWFyIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9ICJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSAiSnVuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9ICJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSAiU2VwIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9ICJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSAiRGVjIjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9UX0ZNVCwKKysJCQkJCQkJICAgICBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX19ubF9sYW5naW5mb19sKEFNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fbmxfbGFuZ2luZm9fbChQTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1UX0FNUE0sIF9fY2xvYyk7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX19ubF9sYW5naW5mb19sKERBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX25sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX19ubF9sYW5naW5mb19sKERBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX25sX2xhbmdpbmZvX2woREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX19ubF9sYW5naW5mb19sKERBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX19ubF9sYW5naW5mb19sKEFCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX19ubF9sYW5naW5mb19sKE1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX19ubF9sYW5naW5mb19sKE1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX19ubF9sYW5naW5mb19sKE1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEyLCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9jKTsKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46OgorKyAgICBfTV9wdXQod2NoYXJfdCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IHdjaGFyX3QqIF9fZm9ybWF0LAorKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9IEwnXDAnOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyN3YXJuaW5nIHdpZGUgdGltZSBzdHVmZgorKy8vICAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gTCJBTSI7CisrCSAgX01fZGF0YS0+X01fcG0gPSBMIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBMIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gTCJTdW5kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBMIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IEwiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IEwiV2VkbmVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gTCJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IEwiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gTCJTYXR1cmRheSI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IEwiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IEwiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IEwiVHVlIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IEwiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IEwiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IEwiRnJpIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IEwiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBMIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBMIkZlYnJ1YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gTCJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IEwiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IEwiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IEwiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IEwiQXVndXN0IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gTCJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBMIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBMIk5vdmVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gTCJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gTCJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gTCJGZWIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gTCJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gTCJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gTCJNYXkiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gTCJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gTCJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gTCJBdWciOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gTCJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gTCJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gTCJOb3YiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gTCJEZWMiOworKwl9CisrI2lmIDAKKysgICAgICBlbHNlCisrCXsKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworKworKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1BNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1UX0FNUE0sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX191Ll9fdzsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX191Ll9fdzsKKysJfQorKyNlbmRpZiAvLyAwCisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYmE4ZTg1OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtMCwwICsxLDY4IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKF9fY2FjaGUpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICAgc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKKysgICAgeworKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CisrICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+Ojp+X190aW1lcHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX25hbWVfdGltZXB1bmN0ICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitpbmRleCBmNDBkZGNmLi5jNTdhNzUxIDEwMDc1NQorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorQEAgLTE1ODIyLDYgKzE1ODIyLDkgQEAgZmkKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgICotdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrICAgICAgICA7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQorIAk7OworQEAgLTE2MDc5LDYgKzE2MDgyLDc4IEBAICRhc19lY2hvICJuZXdsaWIiID4mNjsgfQorICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1Y2xpYmMiID4mNQorKyRhc19lY2hvICJ1Y2xpYmMiID4mNjsgfQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jaGVja19tc2dmbXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9IiRjaGVja19tc2dmbXQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9InllcyIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysgIHRlc3QgLXogIiRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCIgJiYgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9Im5vIgorK2ZpCisrZmkKKytjaGVja19tc2dmbXQ9JGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10CisraWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2hlY2tfbXNnZm10IiA+JjUKKyskYXNfZWNobyAiJGNoZWNrX21zZ2ZtdCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrCisrCisrCisrICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCitpbmRleCA1ODBkNzI1Li4zZmU2MWI4IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCitAQCAtMTAxLDcgKzEwMSw5IEBAIHVzaW5nIHN0ZDo6d21lbWNtcDsKKyB1c2luZyBzdGQ6OndtZW1jcHk7CisgdXNpbmcgc3RkOjp3bWVtbW92ZTsKKyB1c2luZyBzdGQ6OndtZW1zZXQ7CisrI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKKyB1c2luZyBzdGQ6Ondjc2Z0aW1lOworKyNlbmRpZgorIAorICNpZiBfR0xJQkNYWF9VU0VfQzk5CisgdXNpbmcgc3RkOjp3Y3N0b2xkOworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgoraW5kZXggMGU2YjFmYy4uNDA1YWVlMiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCitAQCAtMTc1LDcgKzE3NSw5IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICB1c2luZyA6Ondjc2NvbGw7CisgICB1c2luZyA6Ondjc2NweTsKKyAgIHVzaW5nIDo6d2NzY3NwbjsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorICAgdXNpbmcgOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAgIHVzaW5nIDo6d2NzbGVuOworICAgdXNpbmcgOjp3Y3NuY2F0OworICAgdXNpbmcgOjp3Y3NuY21wOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNiYmZlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaApAQCAtMCwwICsxLDI1NyBAQAorRnJvbSA2YTNlODUwNmExMmMxMjcyOGQ4YjI5OTAxZGVmZDczOGJlNDM3NTdmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDI6MzYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8zNV0gdWNsaWJjLWxvY2FsZS1ub19feAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgICA0NSArKysrKysrKysrKysrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgICAxNCAtLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAgIDEgKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgICAgICAgIHwgICAgNyAtLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8ICAgIDcgLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgICAgICAgfCAgICA3ICstLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgICAxOCArKystLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgICAgNCAtLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgICAgMyAtLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgICAgMyAtLQorIDEwIGZpbGVzIGNoYW5nZWQsIDU1IGluc2VydGlvbnMoKyksIDU0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitpbmRleCAyYWUzZTRhLi5lNzRmZGRmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC02MCw0ICs2MCw0OSBAQCBleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7CisgZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKKyAjZW5kaWYKKyAKKysjIGRlZmluZSBfX25sX2xhbmdpbmZvX2wgbmxfbGFuZ2luZm9fbAorKyMgZGVmaW5lIF9fc3RyY29sbF9sIHN0cmNvbGxfbAorKyMgZGVmaW5lIF9fc3RyZnRpbWVfbCBzdHJmdGltZV9sCisrIyBkZWZpbmUgX19zdHJ0b2RfbCBzdHJ0b2RfbAorKyMgZGVmaW5lIF9fc3RydG9mX2wgc3RydG9mX2wKKysjIGRlZmluZSBfX3N0cnRvbGRfbCBzdHJ0b2xkX2wKKysjIGRlZmluZSBfX3N0cnhmcm1fbCBzdHJ4ZnJtX2wKKysjIGRlZmluZSBfX25ld2xvY2FsZSBuZXdsb2NhbGUKKysjIGRlZmluZSBfX2ZyZWVsb2NhbGUgZnJlZWxvY2FsZQorKyMgZGVmaW5lIF9fZHVwbG9jYWxlIGR1cGxvY2FsZQorKyMgZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQorKworKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysjICBkZWZpbmUgX19pc3djdHlwZV9sIGlzd2N0eXBlX2wKKysjICBkZWZpbmUgX190b3dsb3dlcl9sIHRvd2xvd2VyX2wKKysjICBkZWZpbmUgX190b3d1cHBlcl9sIHRvd3VwcGVyX2wKKysjICBkZWZpbmUgX193Y3Njb2xsX2wgd2NzY29sbF9sCisrIyAgZGVmaW5lIF9fd2NzZnRpbWVfbCB3Y3NmdGltZV9sCisrIyAgZGVmaW5lIF9fd2NzeGZybV9sIHdjc3hmcm1fbAorKyMgIGRlZmluZSBfX3djdHlwZV9sIHdjdHlwZV9sCisrIyBlbmRpZgorKworKyNlbHNlCisrIyBkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjIGRlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyMgZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCisrIyB3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrIyBkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjIGRlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCisrIyBkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKy8vIyBkZWZpbmUgX191c2Vsb2NhbGUgPworKy8vCisrIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyMgIGRlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrIyAgZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgICB0b3dsb3dlcigoQykpCisrIyAgZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgICB0b3d1cHBlcigoQykpCisrIyAgZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCisrLy8jICBkZWZpbmUgX193Y3NmdGltZV9sKFMsIE0sIEYsIFQsIEwpICB3Y3NmdGltZSgoUyksIChNKSwgKEYpLCAoVCkpCisrIyAgZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjICBkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgIHdjdHlwZSgoUykpCisrIyBlbmRpZgorKworICNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitpbmRleCA1MDgxZGMxLi4yMTQzMGQwIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0zOSwyMCArMzksNiBAQAorICNpbmNsdWRlIDxsYW5naW5mby5oPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19zdHJ0b2xfbChTLCBFLCBCLCBMKSAgICAgIHN0cnRvbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b3VsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvdWwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG9sbF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b2xsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvdWxsX2woUywgRSwgQiwgTCkgICAgc3RydG91bGwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCistI2RlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorLSNkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCistI3dhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKy0jZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCistI2RlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCistI2RlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIHRlbXBsYXRlPD4KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitpbmRleCBkYTA3YzFmLi40YmNhNWYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtNjgsNiArNjgsNyBAQCBuYW1lc3BhY2UgX19nbnVfY3h4CisgeworICAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworIH0KKysjZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQorICNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworaW5kZXggYzI2NjRhNy4uZWM1YzMyOSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK0BAIC0zNiwxMyArMzYsNiBAQAorICNpbmNsdWRlIDxsb2NhbGU+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorLSNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorLSNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKy0jZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitpbmRleCA3Mjk0ZTNhLi43YjEyODYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMzgsMTMgKzM4LDYgQEAKKyAjdW5kZWYgX0xJQkMKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCistI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCistI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCistI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworaW5kZXggMTM1OTRkOS4uZDc2OTNiNCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworQEAgLTM5LDEzICszOSwxMCBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBnZXR0ZXh0IHN0dWZmCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistZXh0ZXJuICJDIiBjaGFyICpfX2RjZ2V0dGV4dChjb25zdCBjaGFyICpkb21haW5uYW1lLAorLQkJCSAgICAgY29uc3QgY2hhciAqbXNnaWQsIGludCBjYXRlZ29yeSk7CisgI3VuZGVmIGdldHRleHQKKy0jZGVmaW5lIGdldHRleHQobXNnaWQpIF9fZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjZGVmaW5lIGdldHRleHQobXNnaWQpIGRjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisgI2Vsc2UKKy0jdW5kZWYgZ2V0dGV4dAorICNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorICNlbmRpZgorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitpbmRleCAxNDI0MDc4Li5kODlkYTMzIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTM2LDE1ICszNiwxMSBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLWV4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworLWV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorLQkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworLSNlbHNlCistI3VuZGVmIF9fdGV4dGRvbWFpbgorLSN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCistI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI3VuZGVmIHRleHRkb21haW4KKysjdW5kZWYgYmluZHRleHRkb21haW4KKysjZGVmaW5lIHRleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisgI2VuZGlmCisgCisgICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorQEAgLTcwLDcgKzY2LDcgQEAgZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisgCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisgICAgIHsKKy0gICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisrICAgICAgYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKyAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKKyAgICAgfQorIAorQEAgLTkwLDcgKzg2LDcgQEAgZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisgICAgIHsKKyAgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KKyAgICAgICAvLyBiZSB1c2VkLgorLSAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisrICAgICAgdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCBhYTUyNzMxLi4yZTZmODBhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtNDMsMTAgKzQzLDYgQEAKKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IDg4M2VjMWEuLjJjNzA2NDIgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtNDEsOSArNDEsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK2luZGV4IGUwNzA3ZDcuLmQ4NDhlZDUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtNDAsOSArNDAsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MDY4NTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK0Zyb20gMjI1NTExYTNhZWIxOTNhOTE2YjM5OTlmMGI2NDBhMzkyY2FhNjdjZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ1OjU3ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMzVdIHVjbGliYy1sb2NhbGUtd2NoYXJfZml4CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgfCAgICA0ICsrLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICB8ICAgMTMgKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IDJlNmY4MGEuLjMxZWJiOWYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC00MDEsNyArNDAxLDcgQEAgbmFtZXNwYWNlIHN0ZAorICMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKy0jIGVsc2UKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisgIyBlbmRpZgorQEAgLTU1Niw3ICs1NTYsNyBAQCBuYW1lc3BhY2Ugc3RkCisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IDJjNzA2NDIuLmQ1Yzg5NjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMTI3LDEyICsxMjcsMjUgQEAgbmFtZXNwYWNlIHN0ZAorIAl7CisgCSAgLy8gTmFtZWQgbG9jYWxlLgorIAkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBudW1lcmljCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorIAkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworIAorIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKyAKKyAJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKyAJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NTExMjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCkBAIC0wLDAgKzEsNTQyIEBACitGcm9tIDZmZmU3YzQ2ZjUyZDI3ODY0YzNkZjM2NjNlMTZlYzlkZGVlNzFlOGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0Njo1OCArMDQwMAorU3ViamVjdDogW1BBVENIIDA3LzM1XSB1Y2xpYmMtbG9jYWxlLXVwZGF0ZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgICAgMyArCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAgIDc0ICsrKysrKysrKy0tLS0tLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgIDQyICsrKysrKy0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgIDUxICsrKysrKysrKystLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAgIDEyICsrLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICAgMzQgKysrKystLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgICA1ICsrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAgIDE4ICsrKy0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAgIDE3ICsrKy0tCisgOSBmaWxlcyBjaGFuZ2VkLCAxNTggaW5zZXJ0aW9ucygrKSwgOTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK2luZGV4IGU3NGZkZGYuLjk3MWE2YjQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTMxLDYgKzMxLDkgQEAKKyAKKyAjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8Y3N0ZGxpYj4KKysjaW5jbHVkZSA8Y3N0cmluZz4KKysjaW5jbHVkZSA8Y3N0ZGRlZj4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBjbGVhbiB0aGlzIHVwCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitpbmRleCAyMTQzMGQwLi4xYjlkOGUxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0zOSwyMyArMzksMjAgQEAKKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICB0ZW1wbGF0ZTw+CisgICAgIHZvaWQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZjsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2Y7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdGVtcGxhdGU8PgorQEAgLTYzLDE2ICs2MCwxMyBAQCBuYW1lc3BhY2Ugc3RkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZDsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19kOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPD4KK0BAIC04MCwxNiArNzQsMTMgQEAgbmFtZXNwYWNlIHN0ZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2xkOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19sZDsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB2b2lkCitAQCAtMTEwLDE3ICsxMDEsMTggQEAgbmFtZXNwYWNlIHN0ZAorICAgdm9pZAorICAgbG9jYWxlOjpmYWNldDo6X1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICB7CistICAgIGlmIChfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisrICAgIGlmIChfX2Nsb2MgJiYgX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorICAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOworICAgfQorIAorICAgX19jX2xvY2FsZQorICAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorICAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQorLX0gLy8gbmFtZXNwYWNlIHN0ZAorIAorLW5hbWVzcGFjZSBfX2dudV9jeHgKKy17CisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorKworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisrCisgICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KKyAgICAgeworICAgICAgICJMQ19DVFlQRSIsCitAQCAtMTM4LDkgKzEzMCwxMSBAQCBuYW1lc3BhY2UgX19nbnVfY3h4CisgICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIgorICNlbmRpZgorICAgICB9OworLX0KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKysKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CistfSAgLy8gbmFtZXNwYWNlIHN0ZAorKworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitpbmRleCA0YmNhNWYxLi42NGE2ZDQ2IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtMzksMjEgKzM5LDIzIEBACisgI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorIAorICNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCistI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnZzbnByaW50ZiBvciBzdGQ6OnZzcHJpbnRmCisgI2luY2x1ZGUgPGNsb2NhbGU+CisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CQkvLyBGb3IgY29kZWN2dAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCB0aGlzCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyNpZmRlZiBfR0xJQkNYWF9VU0VfSUNPTlYKKyAjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjaWZkZWYgSEFWRV9MSUJJTlRMX0gKKysjaW5jbHVkZSA8bGliaW50bC5oPgkJLy8gRm9yIG1lc3NhZ2VzCisgI2VuZGlmCisrI2luY2x1ZGUgPGNzdGRhcmc+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrLy8gcHNtOiB1c2VkIGluIG9zL2dudS1saW51eC9jdHlwZV9ub25pbmxpbmUuaAorICNlbmRpZgorICNkZWZpbmUgX0dMSUJDWFhfQ19MT0NBTEVfR05VIDEKKyAKK0BAIC03OCwyMyArODAsMjUgQEAgbmFtZXNwYWNlIHN0ZAorICNlbHNlCisgICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworICNlbmRpZgorLQorLSAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorLSAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworLSAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHZzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKyAgIC8vIGJlIGF2b2lkZWQuCistICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CistICAgIGludAorLSAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LAorLQkJICAgICBjb25zdCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCistCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LAorLSNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCisrICAgIGlubGluZSBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjb25zdCBfX2NfbG9jYWxlJgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysJX19jbG9jIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKKysjZW5kaWYKKysJCSAgICAgLAorKwkJICAgICBjaGFyKiBfX291dCwKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsIC4uLikKKyAgICAgeworKyAgICAgIHZhX2xpc3QgX19hcmdzOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKworICAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKy0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCistICAgIHsKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKyAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworQEAgLTEwMyw3ICsxMDcsOSBAQCBuYW1lc3BhY2Ugc3RkCisgIyBlbmRpZgorICNlbmRpZgorIAorLSAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysgICAgICB2YV9zdGFydChfX2FyZ3MsIF9fZm10KTsKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnZzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19hcmdzKTsKKysgICAgICB2YV9lbmQoX19hcmdzKTsKKyAKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKyAgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitpbmRleCA3YjEyODYxLi4xM2UwMTFkIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMzMsMTYgKzMzLDIwIEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorICAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCistICB0ZW1wbGF0ZTw+CisgICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKyAgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQorICAgICB7CitAQCAtNTcsNiArNjEsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2VuZGlmCisgCX0KKyAgICAgfQorKyAgICBjdHlwZV9ieW5hbWU8Y2hhcj46On5jdHlwZV9ieW5hbWUoKQorKyAgICB7IH0KKyAKKyAjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKK0BAIC0xMzgsMTcgKzE0NCwzMyBAQCBuYW1lc3BhY2Ugc3RkCisgICBjdHlwZTx3Y2hhcl90Pjo6CisgICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0CisgICB7CistICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCistICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICAvLyBUaGUgY2FzZSBvZiBfX20gPT0gY3R5cGVfYmFzZTo6c3BhY2UgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCwKKysgICAgLy8gZHVlIHRvIGl0cyB1c2UgaW4gbWFueSBpc3RyZWFtIGZ1bmN0aW9ucy4gIFRoZXJlZm9yZSB3ZSBkZWFsIHdpdGgKKysgICAgLy8gaXQgZmlyc3QsIGV4cGxvaXRpbmcgdGhlIGtub3dsZWRnZSB0aGF0IG9uIEdOVSBzeXN0ZW1zIF9NX2JpdFs1XQorKyAgICAvLyBpcyB0aGUgbWFzayBjb3JyZXNwb25kaW5nIHRvIGN0eXBlX2Jhc2U6OnNwYWNlLiAgTkI6IGFuIGVuY29kaW5nCisrICAgIC8vIGNoYW5nZSB3b3VsZCBub3QgYWZmZWN0IGNvcnJlY3RuZXNzIQorKworICAgICBib29sIF9fcmV0ID0gZmFsc2U7CistICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CistICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKy0gICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorLQkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorLQl7CistCSAgX19yZXQgPSB0cnVlOworLQkgIGJyZWFrOworLQl9CisrICAgIGlmIChfX20gPT0gX01fYml0WzVdKQorKyAgICAgIF9fcmV0ID0gX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbNV0sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgZWxzZQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrCWZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysJICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXSkKKysJICAgIHsKKysJICAgICAgaWYgKF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwkJeworKwkJICBfX3JldCA9IHRydWU7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgICBlbHNlIGlmIChfX20gPT0gX01fYml0W19fYml0Y3VyXSkKKysJCWJyZWFrOworKwkgICAgfQorKyAgICAgIH0KKysKKyAgICAgcmV0dXJuIF9fcmV0OworICAgfQorIAorQEAgLTI5MCw0ICszMTIsNSBAQCBuYW1lc3BhY2Ugc3RkCisgI2VuZGlmCisgICB9CisgI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorLX0KKysKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IGQ4OWRhMzMuLjA2NzY1N2EgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtNTMsMTIgKzUzLDE2IEBACisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorIAkJCQlzaXplX3QgX19yZWZzKQorLSAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpKSwKKy0gICAgIF9NX25hbWVfbWVzc2FnZXMoX19zKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhOVUxMKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoTlVMTCkKKyAgICAgIHsKKy0gICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKyAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICAvLyBMYXN0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGlmIG5ldyB0aHJvd3MuCisrICAgICAgIF9NX2NfbG9jYWxlX21lc3NhZ2VzID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKyAgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCAzMWViYjlmLi43Njc5YjljIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitAQCAtMjA2LDcgKzIxMSw3IEBAIG5hbWVzcGFjZSBzdGQKKyAJICB9CisgCWJyZWFrOworICAgICAgIGRlZmF1bHQ6CistCTsKKysJX19yZXQgPSBwYXR0ZXJuKCk7CisgICAgICAgfQorICAgICByZXR1cm4gX19yZXQ7CisgICB9CitAQCAtMzkwLDcgKzM5NSw5IEBAIG5hbWVzcGFjZSBzdGQKKyAJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorIAkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorLQkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgIAkgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworIAkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisgI2VuZGlmCisgCitAQCAtNDc3LDggKzQ4NCw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgICAgICBmcmVlKF9fb2xkKTsKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworIAkgICAgfQorQEAgLTQ5OCw4ICs1MDUsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgZnJlZShfX29sZCk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJfQorICAgICB9CitAQCAtNTQ1LDggKzU1MiwxMSBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKyAJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKy0JICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysgICAgICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisrICAgICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisgI2VuZGlmCisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitAQCAtNjMzLDggKzY0Myw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgICAgICBmcmVlKF9fb2xkKTsKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAJICAgIH0KK0BAIC02NTMsOCArNjYzLDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgIGZyZWUoX19vbGQpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCX0KKyAgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCBkNWM4OTYxLi44YWU4OTY5IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTMzLDkgKzMzLDE0IEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitpbmRleCBkODQ4ZWQ1Li5mMjRkNTNlIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworQEAgLTUzLDExICs1MywxNCBAQCBuYW1lc3BhY2Ugc3RkCisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX19zdHJmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorIAkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAjZWxzZQorLSAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKyAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RyZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworLSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0gICAgICBmcmVlKF9fb2xkKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorICAgICAgIGlmIChfX2xlbiA9PSAwKQorQEAgLTIwNywxMSArMjEwLDE0IEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisgCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICNlbHNlCistICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSB3Y3NmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CistICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLSAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgICAgaWYgKF9fbGVuID09IDApCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitpbmRleCBiYThlODU4Li4xNjY1ZGRlIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC01MCwxMiArNTAsMjEgQEAKKyAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKyAJCQkJICAgICBzaXplX3QgX19yZWZzKQorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKy0gICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChOVUxMKQorICAgICB7CistICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7CisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOworICAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CistICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKKysKKysgICAgICB0cnkKKysJeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyB9CisrICAgICAgY2F0Y2goLi4uKQorKwl7CisrCSAgZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwl9CisrCisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODIzODA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA5ZjIxNTg0NTE5ODFjZjBhODBjZmFiZGM3OWFlMzFiYjY5NzZhODAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDg6MTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8zNV0gbWlzc2luZy1leGVjaW5mb19oCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgYm9laG0tZ2MvaW5jbHVkZS9nYy5oIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oIGIvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCitpbmRleCBjNTFlMDE3Li5hN2JhOGRjIDEwMDY0NAorLS0tIGEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCisrKysgYi9ib2VobS1nYy9pbmNsdWRlL2djLmgKK0BAIC01MDMsNyArNTAzLDcgQEAgR0NfQVBJIEdDX1BUUiBHQ19tYWxsb2NfYXRvbWljX2lnbm9yZV9vZmZfcGFnZSBHQ19QUk9UTygoc2l6ZV90IGxiKSk7CisgI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykKKyAjIGluY2x1ZGUgPGZlYXR1cmVzLmg+CisgIyBpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEgfHwgX19HTElCQ19fID4gMikgXAorLSAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pCisrICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykKKyAjICAgaWZuZGVmIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgICBkZWZpbmUgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICBlbmRpZgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDktYzk5LXNucHJpbnRmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNjg3NzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIGUzOTNlMDc2ZjFhYjgyZDI1ZTFhYTA0ZDZlZGVhMjdiNDFkM2ViMDYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0OTowMyArMDQwMAorU3ViamVjdDogW1BBVENIIDA5LzM1XSBjOTktc25wcmludGYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8gYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KK2luZGV4IGU4NWJkODMuLjZhZjgzOWEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworQEAgLTEzOSw3ICsxMzksNyBAQCBuYW1lc3BhY2Ugc3RkCisgICB1c2luZyA6OnZzcHJpbnRmOworIH0gLy8gbmFtZXNwYWNlIHN0ZAorIAorLSNpZiBfR0xJQkNYWF9VU0VfQzk5CisrI2lmIF9HTElCQ1hYX1VTRV9DOTkgfHwgZGVmaW5lZChfX1VDTElCQ19fKQorIAorICN1bmRlZiBzbnByaW50ZgorICN1bmRlZiB2ZnNjYW5mCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYyODU3MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gNzNmNjlkODA2ZTJjOTU2MWE1NDk5NTIyMzQzMWExMDc2Y2ZkNjE2NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ5OjU3ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMzVdIGM5OS1jb21wbGV4LXVnbHktaGFjaworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSB8ICAgIDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IGM1N2E3NTEuLmExMzMzZTIgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMTg3MzQsNiArMTg3MzQsOSBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgSVNPIEM5OSBzdXBwb3J0IHRvIFRSMSBpbiA8Y29tcGxleC5oPi4uLiAiID4mNjsgfQorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpbmNsdWRlIDxjb21wbGV4Lmg+CisrI2lmZGVmIF9fVUNMSUJDX18KKysjZXJyb3IgdWdseSBoYWNrIHRvIG1ha2Ugc3VyZSBjb25maWd1cmUgdGVzdCBmYWlscyBoZXJlIGZvciBjcm9zcyB1bnRpbCB1Q2xpYmMgc3VwcG9ydHMgdGhlIGNvbXBsZXggZnVuY3MKKysjZW5kaWYKKyBpbnQKKyBtYWluICgpCisgeworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDExLWluZGV4X21hY3JvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMS1pbmRleF9tYWNyby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWU3OWIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMS1pbmRleF9tYWNyby5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIGIwMzc5NTNlNDAzMTJiNDVhYjg0ZWQwYTNhZDg4MmJiNWU0MTMxMDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1MTowMiArMDQwMAorU3ViamVjdDogW1BBVENIIDExLzM1XSBpbmRleF9tYWNybworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlICAgICAgIHwgICAgMyArKysKKyBsaWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaCB8ICAgIDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKK2luZGV4IDM4ZWIxZTguLjE1OGQyMWEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKK0BAIC01NSw2ICs1NSw5IEBACisgI2luY2x1ZGUgPGJpdHMvZ3Roci5oPgorICNpbmNsdWRlIDx0cjEvZnVuY3Rpb25hbD4KKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgIyBpZmRlZiBfX0dDCisgIyAgIGRlZmluZSBfX0dDX0NPTlNUIGNvbnN0CisgIyBlbHNlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmggYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAoraW5kZXggZDdiNWNiZC4uYjliM2FjYiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAorQEAgLTQ4LDYgKzQ4LDkgQEAKKyAjaW5jbHVkZSA8ZXh0L21lbW9yeT4gLy8gRm9yIHVuaW5pdGlhbGl6ZWRfY29weV9uCisgI2luY2x1ZGUgPGV4dC9udW1lcmljPiAvLyBGb3IgcG93ZXIKKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTItbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDEyLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OGQ0NWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDEyLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gYTBjYjEzYmRkOThhOTQxYjgxZmRhZmU0Y2Q5NmU0YzU2OWZlYjY1MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjUyOjM2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTIvMzVdIGxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBsaWJtdWRmbGFwL21mLWhvb2tzMi5jIHwgICAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMgYi9saWJtdWRmbGFwL21mLWhvb2tzMi5jCitpbmRleCA0YWYxN2RmLi5hM2M2YjJmIDEwMDY0NAorLS0tIGEvbGlibXVkZmxhcC9tZi1ob29rczIuYworKysrIGIvbGlibXVkZmxhcC9tZi1ob29rczIuYworQEAgLTQyNCw3ICs0MjQsNyBAQCBXUkFQUEVSMih2b2lkLCBiemVybywgdm9pZCAqcywgc2l6ZV90IG4pCisgeworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgbiwgX19NRl9DSEVDS19XUklURSwgImJ6ZXJvIHJlZ2lvbiIpOworLSAgYnplcm8gKHMsIG4pOworKyAgbWVtc2V0IChzLCAwLCBuKTsKKyB9CisgCisgCitAQCAtNDM0LDcgKzQzNCw3IEBAIFdSQVBQRVIyKHZvaWQsIGJjb3B5LCBjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRlc3QsIHNpemVfdCBuKQorICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQoc3JjLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY29weSBzcmMiKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChkZXN0LCBuLCBfX01GX0NIRUNLX1dSSVRFLCAiYmNvcHkgZGVzdCIpOworLSAgYmNvcHkgKHNyYywgZGVzdCwgbik7CisrICBtZW1tb3ZlIChkZXN0LCBzcmMsIG4pOworIH0KKyAKKyAKK0BAIC00NDQsNyArNDQ0LDcgQEAgV1JBUFBFUjIoaW50LCBiY21wLCBjb25zdCB2b2lkICpzMSwgY29uc3Qgdm9pZCAqczIsIHNpemVfdCBuKQorICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQoczEsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjbXAgMXN0IGFyZyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMyLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY21wIDJuZCBhcmciKTsKKy0gIHJldHVybiBiY21wIChzMSwgczIsIG4pOworKyAgcmV0dXJuIG4gPT0gMCA/IDAgOiBtZW1jbXAgKHMxLCBzMiwgbik7CisgfQorIAorIAorQEAgLTQ1Myw3ICs0NTMsNyBAQCBXUkFQUEVSMihjaGFyICosIGluZGV4LCBjb25zdCBjaGFyICpzLCBpbnQgYykKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJpbmRleCByZWdpb24iKTsKKy0gIHJldHVybiBpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RyY2hyIChzLCBjKTsKKyB9CisgCisgCitAQCAtNDYyLDcgKzQ2Miw3IEBAIFdSQVBQRVIyKGNoYXIgKiwgcmluZGV4LCBjb25zdCBjaGFyICpzLCBpbnQgYykKKyAgIHNpemVfdCBuID0gc3RybGVuIChzKTsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIENMQU1QQUREKG4sIDEpLCBfX01GX0NIRUNLX1JFQUQsICJyaW5kZXggcmVnaW9uIik7CistICByZXR1cm4gcmluZGV4IChzLCBjKTsKKysgIHJldHVybiBzdHJyY2hyIChzLCBjKTsKKyB9CisgCisgLyogWFhYOiAgc3RwY3B5LCBtZW1jY3B5ICovCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhM2VmZGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gMTA0ZTRkNjYyMDhmMjcyNmIxNGQyZjVlZWJjZTkwNzAwY2JjODNjOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU0OjAyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTMvMzVdIGxpYnN0ZGMrKy1uYW1lc3BhY2UKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIHwgICAgNCArKystCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgICB8ICAgIDQgKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IDA2NzY1N2EuLmRkNzZhNmMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtMzIsNyArMzIsOCBAQAorIC8vCisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKy0KKytuYW1lc3BhY2Ugc3RkCisreworICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworICNlbmRpZgorQEAgLTExNiwzICsxMTcsNCBAQAorIAkgICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7CisgCSB9CisgICAgICB9CisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAoraW5kZXggMTY2NWRkZS4uOTA1YzQzMyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtMzMsNyArMzMsOCBAQAorIC8vCisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKy0KKytuYW1lc3BhY2Ugc3RkCisreworICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKQorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKK0BAIC03NSwzICs3Niw0IEBACisgICAgICAgZGVsZXRlIF9NX2RhdGE7CisgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICAgICB9CisrfQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE0LXNoLXByMjQ4MzYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE0LXNoLXByMjQ4MzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I4ZmQ1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTQtc2gtcHIyNDgzNi5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIGVkYzlhY2IxODE4MTBmMjM0YjZiOWY3ZDI4MjBiMGU0ZjZhMWVlYWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1NDo0OCArMDQwMAorU3ViamVjdDogW1BBVENIIDE0LzM1XSBzaC1wcjI0ODM2CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitodHRwOi8vc291cmNlZm9yZ2UubmV0L21haWxhcmNoaXZlL2ZvcnVtLnBocD90aHJlYWRfaWQ9ODk1OTMwNCZmb3J1bV9pZD01MzQ4CitodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTI0ODM2CistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgICAgMiArLQorIGdjYy9jb25maWd1cmUuYWMgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggZTEyYTE4MC4uMTM1YmJmNSAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0yMzM3OCw3ICsyMzM3OCw3IEBAIGZvbzoJLmxvbmcJMjUKKyAJdGxzX2ZpcnN0X21pbm9yPTE0CisgCXRsc19hc19vcHQ9Ii1tNjQgLUFlc2FtZSAtLWZhdGFsLXdhcm5pbmdzIgorIAk7OworLSAgc2gtKi0qIHwgc2hbMzRdLSotKikKKysgIHNoLSotKiB8IHNoWzM0XSotKi0qKQorICAgICBjb25mdGVzdF9zPScKKyAJLnNlY3Rpb24gIi50ZGF0YSIsImF3VCIsQHByb2diaXRzCisgZm9vOgkubG9uZwkyNQorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCBlYmEzNTc3Li42MzYzYTIxIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTMxNDEsNyArMzE0MSw3IEBAIGZvbzoJLmxvbmcJMjUKKyAJdGxzX2ZpcnN0X21pbm9yPTE0CisgCXRsc19hc19vcHQ9Ii1tNjQgLUFlc2FtZSAtLWZhdGFsLXdhcm5pbmdzIgorIAk7OworLSAgc2gtKi0qIHwgc2hbMzRdLSotKikKKysgIHNoLSotKiB8IHNoWzM0XSotKi0qKQorICAgICBjb25mdGVzdF9zPScKKyAJLnNlY3Rpb24gIi50ZGF0YSIsImF3VCIsQHByb2diaXRzCisgZm9vOgkubG9uZwkyNQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE1LWFybS1Vc2UtVEFSR0VUX0VORElBTl9PUFRJT04tZm9yLWRldGVybWluaW5nLU1VTFRJTEkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE1LWFybS1Vc2UtVEFSR0VUX0VORElBTl9PUFRJT04tZm9yLWRldGVybWluaW5nLU1VTFRJTEkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4MTIyMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTUtYXJtLVVzZS1UQVJHRVRfRU5ESUFOX09QVElPTi1mb3ItZGV0ZXJtaW5pbmctTVVMVElMSS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDUwZTUzNjYwMDViMGY2YWYyNzM3OGUyYTVjM2NiOWY5OTM2YTdlNjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1ODozNiArMDQwMAorU3ViamVjdDogW1BBVENIIDE1LzM1XSBhcm06IFVzZSBUQVJHRVRfRU5ESUFOX09QVElPTiBmb3IgZGV0ZXJtaW5pbmcKKyBNVUxUSUxJQl9ERUZBVUxUUworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggYi9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAoraW5kZXggNDg4ZWZhNC4uNzUzZGMzYSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCisrKysgYi9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorQEAgLTQ2LDcgKzQ2LDcgQEAKKyAKKyAjdW5kZWYgIE1VTFRJTElCX0RFRkFVTFRTCisgI2RlZmluZSBNVUxUSUxJQl9ERUZBVUxUUyBcCistCXsgIm1hcm0iLCAibWxpdHRsZS1lbmRpYW4iLCAibWZsb2F0LWFiaT1oYXJkIiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKysJeyAibWFybSIsIFRBUkdFVF9FTkRJQU5fT1BUSU9OLCAibWZsb2F0LWFiaT1oYXJkIiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKyAKKyAvKiBOb3cgd2UgZGVmaW5lIHRoZSBzdHJpbmdzIHVzZWQgdG8gYnVpbGQgdGhlIHNwZWMgZmlsZS4gICovCisgI3VuZGVmICBMSUJfU1BFQworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTU1ZTQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaApAQCAtMCwwICsxLDIyMSBAQAorRnJvbSAxNjAzOTdlZjNjMzMzMTA5OWFmMDI4ZjFiOGQzZTA4NWIwN2Q4OGFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTk6MDAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNi8zNV0gZ2NjOiBwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uOiBjb2Rlc291cmNlcnldCistLS0KKyBnY2MvTWFrZWZpbGUuaW4gICAgIHwgICAgMiArLQorIGdjYy9jb21tb24ub3B0ICAgICAgfCAgICA0ICsrKysKKyBnY2MvY29uZmlnLmluICAgICAgIHwgICAgNiArKysrKysKKyBnY2MvY29uZmlndXJlICAgICAgIHwgICAyMCArKysrKysrKysrKysrKysrKystLQorIGdjYy9jb25maWd1cmUuYWMgICAgfCAgIDEwICsrKysrKysrKysKKyBnY2MvZG9jL2ludm9rZS50ZXhpIHwgICAgOSArKysrKysrKysKKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgICAgMiArKworIGdjYy9pbmNwYXRoLmMgICAgICAgfCAgIDE5ICsrKysrKysrKysrKysrKysrKysKKyA4IGZpbGVzIGNoYW5nZWQsIDY5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC44LjQvZ2NjL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL01ha2VmaWxlLmluCisrKysgZ2NjLTQuOC40L2djYy9NYWtlZmlsZS5pbgorQEAgLTIwMTksNyArMjAxOSw3IEBAIGF0dHJpYnMubyA6IGF0dHJpYnMuYyAkKENPTkZJR19IKSAkKFNZU1QKKyAKKyBpbmNwYXRoLm86IGluY3BhdGguYyBpbmNwYXRoLmggJChDT05GSUdfSCkgJChTWVNURU1fSCkgJChDUFBMSUJfSCkgXAorIAkJaW50bC5oIHByZWZpeC5oIGNvcmV0eXBlcy5oICQoVE1fSCkgY3BwZGVmYXVsdC5oICQoVEFSR0VUX0gpIFwKKy0JCSQoTUFDSE1PREVfSCkKKysJCSQoTUFDSE1PREVfSCkgJChGTEFHU19IKSB0b3BsZXYuaAorIAorIENGTEFHUy1wcmVmaXgubyArPSAtRFBSRUZJWD1cIiQocHJlZml4KVwiIC1EQkFTRVZFUj0kKEJBU0VWRVJfcykKKyBwcmVmaXgubzogcHJlZml4LmMgJChDT05GSUdfSCkgJChTWVNURU1fSCkgY29yZXR5cGVzLmggcHJlZml4LmggXAorSW5kZXg6IGdjYy00LjguNC9nY2MvY29tbW9uLm9wdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb21tb24ub3B0CisrKysgZ2NjLTQuOC40L2djYy9jb21tb24ub3B0CitAQCAtNTk1LDYgKzU5NSwxMCBAQCBXcGVkYW50aWMKKyBDb21tb24gVmFyKHBlZGFudGljKSBXYXJuaW5nCisgSXNzdWUgd2FybmluZ3MgbmVlZGVkIGZvciBzdHJpY3QgY29tcGxpYW5jZSB0byB0aGUgc3RhbmRhcmQKKyAKKytXcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0NvbW1vbiBWYXIoZmxhZ19wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKSBJbml0KDEpIFdhcm5pbmcKKytXYXJuIGZvciAtSSBhbmQgLUwgb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMgaWYgY3Jvc3MgY29tcGlsaW5nCisrCisgV3NoYWRvdworIENvbW1vbiBWYXIod2Fybl9zaGFkb3cpIFdhcm5pbmcKKyBXYXJuIHdoZW4gb25lIGxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgYW5vdGhlcgorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy5pbgorKysrIGdjYy00LjguNC9nY2MvY29uZmlnLmluCitAQCAtMTM4LDYgKzEzOCwxMiBAQAorICNlbmRpZgorIAorIAorKy8qIERlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXMgKi8KKysjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorKyN1bmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUworKyNlbmRpZgorKworKworIC8qIERlZmluZSBpZiB5b3Ugd2FudCBhbGwgb3BlcmF0aW9ucyBvbiBSVEwgKHRoZSBiYXNpYyBkYXRhIHN0cnVjdHVyZSBvZiB0aGUKKyAgICBvcHRpbWl6ZXIgYW5kIGJhY2sgZW5kKSB0byBiZSBjaGVja2VkIGZvciBkeW5hbWljIHR5cGUgc2FmZXR5IGF0IHJ1bnRpbWUuCisgICAgVGhpcyBpcyBxdWl0ZSBleHBlbnNpdmUuICovCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlndXJlCisrKysgZ2NjLTQuOC40L2djYy9jb25maWd1cmUKK0BAIC05MTgsNiArOTE4LDcgQEAgd2l0aF9nYworIHdpdGhfc3lzdGVtX3psaWIKKyBlbmFibGVfbWFpbnRhaW5lcl9tb2RlCisgZW5hYmxlX3ZlcnNpb25fc3BlY2lmaWNfcnVudGltZV9saWJzCisrZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMKKyBlbmFibGVfcGx1Z2luCisgZW5hYmxlX2xpYnF1YWRtYXRoX3N1cHBvcnQKKyB3aXRoX2xpbmtlcl9oYXNoX3N0eWxlCitAQCAtMTYzOSw2ICsxNjQwLDggQEAgT3B0aW9uYWwgRmVhdHVyZXM6CisgICAtLWVuYWJsZS12ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbGlicworICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGF0IHJ1bnRpbWUgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgY29tcGlsZXItc3BlY2lmaWMgZGlyZWN0b3J5CisrICAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXMKKyAgIC0tZW5hYmxlLXBsdWdpbiAgICAgICAgIGVuYWJsZSBwbHVnaW4gc3VwcG9ydAorICAgLS1kaXNhYmxlLWxpYnF1YWRtYXRoLXN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGUgbGlicXVhZG1hdGggc3VwcG9ydCBmb3IgRm9ydHJhbgorQEAgLTE3ODQ3LDcgKzE3ODUwLDcgQEAgZWxzZQorICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCistI2xpbmUgMTc4NTAgImNvbmZpZ3VyZSIKKysjbGluZSAxNzg1MyAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0xNzk1Myw3ICsxNzk1Niw3IEBAIGVsc2UKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLSNsaW5lIDE3OTU2ICJjb25maWd1cmUiCisrI2xpbmUgMTc5NTkgImNvbmZpZ3VyZSIKKyAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyAKKyAjaWYgSEFWRV9ETEZDTl9ICitAQCAtMjcyMTksNiArMjcyMjIsMTkgQEAgaWYgdGVzdCAiJHtlbmFibGVfdmVyc2lvbl9zcGVjaWZpY19ydW50aQorIGZpCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgZW5hYmxldmFsPSRlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllczsKKytlbHNlCisrICBlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ubworK2ZpCisrCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorKworKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTIDEiID4+Y29uZmRlZnMuaAorKworK2ZpCisrCisgIyBTdWJzdGl0dXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgCisgCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlndXJlLmFjCisrKysgZ2NjLTQuOC40L2djYy9jb25maWd1cmUuYWMKK0BAIC01MTIwLDYgKzUxMjAsMTYgQEAgQUNfQVJHX0VOQUJMRSh2ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbAorICAgICAgICAgICAgICAgICBbc3BlY2lmeSB0aGF0IHJ1bnRpbWUgbGlicmFyaWVzIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGluIGEgY29tcGlsZXItc3BlY2lmaWMgZGlyZWN0b3J5XSldKQorIAorK0FDX0FSR19FTkFCTEUoW3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAorKyAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXNdKSwsCisrICAgICAgICAgICAgIFtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ub10pCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorKyAgQUNfREVGSU5FKFtFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFU10sCisrICAgICAgICAgICBbMV0sCisrICAgICAgICAgICBbRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3Rvcmllc10pCisrZmkKKysKKyAjIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyBBQ19TVUJTVChzdWJkaXJzKQorIEFDX1NVQlNUKHNyY2RpcikKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2RvYy9pbnZva2UudGV4aQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9kb2MvaW52b2tlLnRleGkKKysrKyBnY2MtNC44LjQvZ2NjL2RvYy9pbnZva2UudGV4aQorQEAgLTI1OCw2ICsyNTgsNyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCisgLVdvdmVybGVuZ3RoLXN0cmluZ3MgIC1XcGFja2VkICAtV3BhY2tlZC1iaXRmaWVsZC1jb21wYXQgIC1XcGFkZGVkIEBnb2wKKyAtV3BhcmVudGhlc2VzICAtV3BlZGFudGljLW1zLWZvcm1hdCAtV25vLXBlZGFudGljLW1zLWZvcm1hdCBAZ29sCisgLVdwb2ludGVyLWFyaXRoICAtV25vLXBvaW50ZXItdG8taW50LWNhc3QgQGdvbAorKy1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyBAZ29sCisgLVdyZWR1bmRhbnQtZGVjbHMgIC1Xbm8tcmV0dXJuLWxvY2FsLWFkZHIgQGdvbAorIC1XcmV0dXJuLXR5cGUgIC1Xc2VxdWVuY2UtcG9pbnQgIC1Xc2hhZG93IEBnb2wKKyAtV3NpZ24tY29tcGFyZSAgLVdzaWduLWNvbnZlcnNpb24gIC1Xc2l6ZW9mLXBvaW50ZXItbWVtYWNjZXNzIEBnb2wKK0BAIC00MDIyLDYgKzQwMjMsMTQgQEAgaGVhZGVycy0tLWZvciB0aGF0LCBAb3B0aW9uey1XdW5rbm93bi1wcgorICBmb3IgbW9zdCB0YXJnZXRzLCBpdCBpcyBtYWRlIHVwIG9mIGNvZGUgYW5kIHRodXMgcmVxdWlyZXMgdGhlIHN0YWNrCisgIHRvIGJlIG1hZGUgZXhlY3V0YWJsZSBpbiBvcmRlciBmb3IgdGhlIHByb2dyYW0gdG8gd29yayBwcm9wZXJseS4KKyAKKytAaXRlbSAtV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytAb3BpbmRleCBXbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0RvIG5vdCB3YXJuIGZvciBAb3B0aW9uey1JfSBvciBAb3B0aW9uey1MfSBvcHRpb25zIHVzaW5nIHN5c3RlbQorK2RpcmVjdG9yaWVzIHN1Y2ggYXMgQGZpbGV7L3Vzci9pbmNsdWRlfSB3aGVuIGNyb3NzIGNvbXBpbGluZy4gIFRoaXMKKytvcHRpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBjaHJvb3QgZW52aXJvbm1lbnRzIHdoZW4gc3VjaAorK2RpcmVjdG9yaWVzIGNvbnRhaW4gdGhlIGNvcnJlY3QgaGVhZGVycyBhbmQgbGlicmFyaWVzIGZvciB0aGUgdGFyZ2V0Cisrc3lzdGVtIHJhdGhlciB0aGFuIHRoZSBob3N0LgorKworIEBpdGVtIC1XZmxvYXQtZXF1YWwKKyBAb3BpbmRleCBXZmxvYXQtZXF1YWwKKyBAb3BpbmRleCBXbm8tZmxvYXQtZXF1YWwKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2djYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2djYy5jCisrKysgZ2NjLTQuOC40L2djYy9nY2MuYworQEAgLTc0MSw2ICs3NDEsOCBAQCBwcm9wZXIgcG9zaXRpb24gYW1vbmcgdGhlIG90aGVyIG91dHB1dCBmCisgICAgIiV7ZnVzZS1sZD0qOi1mdXNlLWxkPSUqfVwKKyAgICAgJVggJXtvKn0gJXtlKn0gJXtOfSAle259ICV7cn1cCisgICAgICV7c30gJXt0fSAle3UqfSAle3p9ICV7Wn0gJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVTfX1cCisrICAgICV7V25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXM6LS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzfVwKKysgICAgJXtXZXJyb3I9cG9pc29uLXN5c3RlbS1kaXJlY3RvcmllczotLWVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXN9XAorICAgICAle3N0YXRpYzp9ICV7TCp9ICUobWZ3cmFwKSAlKGxpbmtfbGliZ2NjKSAiIFNBTklUSVpFUl9FQVJMWV9TUEVDICIgJW9cCisgICAgICV7Zm9wZW5tcHxmdHJlZS1wYXJhbGxlbGl6ZS1sb29wcz0qOiU6aW5jbHVkZShsaWJnb21wLnNwZWMpJShsaW5rX2dvbXApfVwKKyAgICAgJXtmZ251LXRtOiU6aW5jbHVkZShsaWJpdG0uc3BlYyklKGxpbmtfaXRtKX1cCitJbmRleDogZ2NjLTQuOC40L2djYy9pbmNwYXRoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvaW5jcGF0aC5jCisrKysgZ2NjLTQuOC40L2djYy9pbmNwYXRoLmMKK0BAIC0yOCw2ICsyOCw3IEBACisgI2luY2x1ZGUgImludGwuaCIKKyAjaW5jbHVkZSAiaW5jcGF0aC5oIgorICNpbmNsdWRlICJjcHBkZWZhdWx0LmgiCisrI2luY2x1ZGUgImRpYWdub3N0aWMtY29yZS5oIgorIAorIC8qIE1pY3Jvc29mdCBXaW5kb3dzIGRvZXMgbm90IG5hdGl2ZWx5IHN1cHBvcnQgaW5vZGVzLgorICAgIFZNUyBoYXMgbm9uLW51bWVyaWMgaW5vZGVzLiAgKi8KK0BAIC0zODIsNiArMzgzLDI0IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb28KKyAJfQorICAgICAgIGZwcmludGYgKHN0ZGVyciwgXygiRW5kIG9mIHNlYXJjaCBsaXN0LlxuIikpOworICAgICB9CisrCisrI2lmZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCisrICBpZiAoZmxhZ19wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKQorKyAgICB7CisrICAgICAgIHN0cnVjdCBjcHBfZGlyICpwOworKworKyAgICAgICBmb3IgKHAgPSBoZWFkc1tRVU9URV07IHA7IHAgPSBwLT5uZXh0KQorKyAgICAgICAgIHsKKysgICAgICAgICAgaWYgKCghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvaW5jbHVkZSIsIDEyKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvbG9jYWwvaW5jbHVkZSIsIDE4KSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkpCisrICAgICAgICAgICAgd2FybmluZyAoT1BUX1dwb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLAorKyAgICAgICAgICAgICAgICAgICAgICJpbmNsdWRlIGxvY2F0aW9uIFwiJXNcIiBpcyB1bnNhZmUgZm9yICIKKysgICAgICAgICAgICAgICAgICAgICAiY3Jvc3MtY29tcGlsYXRpb24iLAorKyAgICAgICAgICAgICAgICAgICAgIHAtPm5hbWUpOworKyAgICAgICAgIH0KKysgICAgfQorKyNlbmRpZgorIH0KKyAKKyAvKiBVc2UgZ2l2ZW4gLUkgcGF0aHMgZm9yICNpbmNsdWRlICIuLi4iIGJ1dCBub3QgI2luY2x1ZGUgPC4uLj4sIGFuZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE3LWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTgxZWZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBlOTljOWM5NzI2NmQ2ZDNlOGNhYzc5OGFhOTE0MDgyNTBjNGQ2MGNmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MDA6MzQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNy8zNV0gZ2NjLXBvaXNvbi1kaXItZXh0ZW5kCisKK0FkZCAvc3cvaW5jbHVkZSBhbmQgL29wdC9pbmNsdWRlIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAoremVja2Utbm8taG9zdC1pbmNsdWRlcy5wYXRjaCBwYXRjaC4gIFRoZSBvcmlnaW5hbCBwYXRjaCBjaGVja2VkIGZvcgorL3Vzci9pbmNsdWRlLCAvc3cvaW5jbHVkZSBhbmQgL29wdC9pbmNsdWRlIGFuZCB0aGVuIHRyaWdnZXJlZCBhIGZhaWx1cmUgYW5kCithYm9ydGVkLgorCitJbnN0ZWFkLCB3ZSBhZGQgdGhlIHR3byBtaXNzaW5nIGl0ZW1zIHRvIHRoZSBjdXJyZW50IHNjYW4uICBJZiB0aGUgdXNlcgord2FudHMgdGhpcyB0byBiZSBhIGZhaWx1cmUsIHRoZXkgY2FuIGFkZCAiLVdlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvaW5jcGF0aC5jIHwgICAgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2luY3BhdGguYyBiL2djYy9pbmNwYXRoLmMKK2luZGV4IGNkNDFjNzguLmVhYzRhOTIgMTAwNjQ0CistLS0gYS9nY2MvaW5jcGF0aC5jCisrKysgYi9nY2MvaW5jcGF0aC5jCitAQCAtMzkzLDcgKzM5Myw5IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb290LCBjcHBfcmVhZGVyICpwZmlsZSwgaW50IHZlcmJvc2UpCisgICAgICAgICAgeworICAgICAgICAgICBpZiAoKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9pbmNsdWRlIiwgMTIpKQorICAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9sb2NhbC9pbmNsdWRlIiwgMTgpKQorLSAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi9zdy9pbmNsdWRlIiwgMTEpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL29wdC9pbmNsdWRlIiwgMTIpKSkKKyAgICAgICAgICAgICB3YXJuaW5nIChPUFRfV3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMsCisgICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGUgbG9jYXRpb24gXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvbiIsCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE4LWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOGNhZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE4LWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK0Zyb20gNTYyMDdmYTI5MjNlOGVkZjc3NGU5OGZmYWM4MjY2NjA5MTA3NmJlMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjA4OjMxICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTgvMzVdIGdjYy00LjMuMzogU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVAorCitCZWZvcmUgY29tbWl0dGluZywgSSBub3RpY2VkIHRoYXQgUFIvMzIxNjEgd2FzIG1hcmtlZCBhcyBhIGR1cCBvZiBQUi8zMjAwOSwgYnV0IG15IHByZXZpb3VzIHBhdGNoIGRpZCBub3QgZml4IGl0LgorCitUaGlzIGFsdGVybmF0aXZlIHBhdGNoIGlzIGJldHRlciBiZWNhdXNlIGl0IGxldHMgeW91IGp1c3QgdXNlIENGTEFHU19GT1JfVEFSR0VUIHRvIHNldCB0aGUgY29tcGlsYXRpb24gZmxhZ3MgZm9yIGxpYmdjYy4gU2luY2UgYm9vdHN0cmFwcGVkIHRhcmdldCBsaWJyYXJpZXMgYXJlIG5ldmVyIGNvbXBpbGVkIHdpdGggdGhlIG5hdGl2ZSBjb21waWxlciwgaXQgbWFrZXMgbGl0dGxlIHNlbnNlIHRvIHVzZSBkaWZmZXJlbnQgZmxhZ3MgZm9yIHN0YWdlMSBhbmQgbGF0ZXIgc3RhZ2VzLiBBbmQgaXQgYWxzbyBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGEgZGlmZmVyZW50IHZhcmlhYmxlIHRoYW4gQ0ZMQUdTX0ZPUl9UQVJHRVQuCisKK090aGVyIGNoYW5nZXMgSSBoYWQgdG8gZG8gaW5jbHVkZToKKworLSBtb3ZpbmcgdGhlIGNyZWF0aW9uIG9mIGRlZmF1bHQgQ0ZMQUdTX0ZPUl9UQVJHRVQgZnJvbSBNYWtlZmlsZS5hbSB0byBjb25maWd1cmUuYWMsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBCT09UX0NGTEFHUyBhcmUgc3Vic3RpdHV0ZWQgaW50byBDRkxBR1NfRk9SX1RBUkdFVCAod2hpY2ggaXMgIi1PMiAtZyAkKENGTEFHUykiKSB2aWEgJChDRkxBR1MpLiBJdCBpcyBhbHNvIGNsZWFuZXIgdGhpcyB3YXkgdGhvdWdoLgorCistIHBhc3NpbmcgdGhlIHJpZ2h0IENGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBhcyBleHBvcnRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKworSSBhbHNvIHN0b3BwZWQgcGFzc2luZyBMSUJDRkxBR1MgdG8gY29uZmlndXJlIHNjcmlwdHMgc2luY2UgdGhleSBhcmUgdW51c2VkIGluIHRoZSB3aG9sZSBzcmMgdHJlZS4gQW5kIEkgdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbiBhcyBILVAgcmVtaW5kZWQgbWUgdG8gZG8uCisKK0Jvb3RzdHJhcHBlZC9yZWd0ZXN0ZWQgaTY4Ni1wYy1saW51eC1nbnUsIHdpbGwgY29tbWl0IHRvIDQuNCBzaG9ydGx5LiBPayBmb3IgNC4zPworCitTaWduZWQtb2ZmLWJ5OiBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUgfCAgIDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggMWI3NmM5MC4uZTRkY2U3YyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNjc3Miw2ICs2NzcyLDM4IEBAIGZpCisgCisgCisgCisrIyBEdXJpbmcgZ2NjIGJvb3RzdHJhcCwgaWYgd2UgdXNlIHNvbWUgcmFuZG9tIGNjIGZvciBzdGFnZTEgdGhlbiBDRkxBR1MKKysjIG1pZ2h0IGJlIGVtcHR5IG9yICItZyIuICBXZSBkb24ndCByZXF1aXJlIGEgQysrIGNvbXBpbGVyLCBzbyBDWFhGTEFHUworKyMgbWlnaHQgYWxzbyBiZSBlbXB0eSAob3IgIi1nIiwgaWYgYSBub24tR0NDIEMrKyBjb21waWxlciBpcyBpbiB0aGUgcGF0aCkuCisrIyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IFRBUkdFVCBsaWJyYXJpZXMgKHdoaWNoIHdlIGtub3cgYXJlIGJ1aWx0IHdpdGgKKysjIGdjYykgYXJlIGJ1aWx0IHdpdGggIi1PMiAtZyIsIHNvIGluY2x1ZGUgdGhvc2Ugb3B0aW9ucyB3aGVuIHNldHRpbmcKKysjIENGTEFHU19GT1JfVEFSR0VUIGFuZCBDWFhGTEFHU19GT1JfVEFSR0VULgorK2lmIHRlc3QgIngkQ0ZMQUdTX0ZPUl9UQVJHRVQiID0geDsgdGhlbgorKyAgQ0ZMQUdTX0ZPUl9UQVJHRVQ9JENGTEFHUworKyAgY2FzZSAiICRDRkxBR1MgIiBpbgorKyAgICAqIiAtTzIgIiopIDs7CisrICAgICopIENGTEFHU19GT1JfVEFSR0VUPSItTzIgJENGTEFHUyIgOzsKKysgIGVzYWMKKysgIGNhc2UgIiAkQ0ZMQUdTICIgaW4KKysgICAgKiIgLWcgIiogfCAqIiAtZzMgIiopIDs7CisrICAgICopIENGTEFHU19GT1JfVEFSR0VUPSItZyAkQ0ZMQUdTIiA7OworKyAgZXNhYworK2ZpCisrCisrCisraWYgdGVzdCAieCRDWFhGTEFHU19GT1JfVEFSR0VUIiA9IHg7IHRoZW4KKysgIENYWEZMQUdTX0ZPUl9UQVJHRVQ9JENYWEZMQUdTCisrICBjYXNlICIgJENYWEZMQUdTICIgaW4KKysgICAgKiIgLU8yICIqKSA7OworKyAgICAqKSBDWFhGTEFHU19GT1JfVEFSR0VUPSItTzIgJENYWEZMQUdTIiA7OworKyAgZXNhYworKyAgY2FzZSAiICRDWFhGTEFHUyAiIGluCisrICAgICoiIC1nICIqIHwgKiIgLWczICIqKSA7OworKyAgICAqKSBDWFhGTEFHU19GT1JfVEFSR0VUPSItZyAkQ1hYRkxBR1MiIDs7CisrICBlc2FjCisrZmkKKysKKysKKyAjIEhhbmRsZSAtLXdpdGgtaGVhZGVycz1YWFguICBJZiB0aGUgdmFsdWUgaXMgbm90ICJ5ZXMiLCB0aGUgY29udGVudHMgb2YKKyAjIHRoZSBuYW1lZCBkaXJlY3RvcnkgYXJlIGNvcGllZCB0byAkKHRvb2xkaXIpL3N5cy1pbmNsdWRlLgorIGlmIHRlc3QgeCIke3dpdGhfaGVhZGVyc30iICE9IHggJiYgdGVzdCB4IiR7d2l0aF9oZWFkZXJzfSIgIT0geG5vIDsgdGhlbgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxOS02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTc1Y2ZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxOS02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaApAQCAtMCwwICsxLDc5IEBACitGcm9tIDE4ZmRlNTc0MGIwOTMyNGRmYjljZjQxZTk4NDk2NzI1NzNmZjVmYTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxMDowNiArMDQwMAorU3ViamVjdDogW1BBVENIIDE5LzM1XSA2NC1iaXQgbXVsdGlsaWIgaGFjay4KKworR0NDIGhhcyBpbnRlcm5hbCBtdWx0aWxpYiBoYW5kbGluZyBjb2RlIGJ1dCBpdCBhc3N1bWVzIGEgdmVyeSBzcGVjaWZpYyByaWdpZCBkaXJlY3RvcnkKK2xheW91dC4gVGhlIGJ1aWxkIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiBvZiBtdWx0aWxpYiBsYXlvdXQgaXMgdmVyeSBnZW5lcmljIGFuZCBhbGxvd3MKK2NvbXBsZXRlIGN1c3RvbWlzYXRpb24gb2YgdGhlIGxpYnJhcnkgZGlyZWN0b3JpZXMuCisKK1RoaXMgcGF0Y2ggaXMgYSBwYXJ0aWFsIHNvbHV0aW9uIHRvIGFsbG93IGFueSBjdXN0b20gZGlyZWN0b3JpZXMgdG8gYmUgcGFzc2VkIGludG8gZ2NjCithbmQgaGFuZGxlZCBjb3JyZWN0bHkuIEl0IGZvcmNlcyBnY2MgdG8gdXNlIHRoZSBiYXNlX2xpYmRpciAod2hpY2ggaXMgdGhlIGN1cnJlbnQKK2RpcmVjdG9yeSwgIi4iKS4gV2UgbmVlZCB0byBkbyB0aGlzIGZvciBlYWNoIG11bHRpbGliIHRoYXQgaXMgY29uZmlndXJlZCBhcyB3ZSBkb24ndAora25vdyB3aGljaCBjb21waWxlciBvcHRpb25zIG1heSBiZSBiZWluZyBwYXNzZWQgaW50byB0aGUgY29tcGlsZXIuIFNpbmNlIHdlIGhhdmUgYSBjb21waWxlcgorcGVyIG11bGl0bGliIGF0IHRoaXMgcG9pbnQgdGhhdCBpc24ndCBhbiBpc3N1ZS4KKworVGhlIG9uZSBwcm9ibGVtIGlzIHRoZSB0YXJnZXQgY29tcGlsZXIgaXMgb25seSBnb2luZyB0byB3b3JrIGZvciB0aGUgZGVmYXVsdCBtdWx0bGlsaWIgYXQKK3RoaXMgcG9pbnQuIElkZWFsbHkgd2UnZCBmaWd1cmUgb3V0IHdoaWNoIG11bHRpbGlicyB3ZXJlIGJlaW5nIGVuYWJsZWQgd2l0aCB3aGljaCBwYXRocworYW5kIGJlIGFibGUgdG8gcGF0Y2ggdGhlc2UgZW50cmllcyB3aXRoIGEgY29tcGxldGUgc2V0IG9mIGNvcnJlY3QgcGF0aHMgYnV0IHRoaXMgd2UKK2Rvbid0IGhhdmUgc3VjaCBjb2RlIGF0IHRoaXMgcG9pbnQuIFRoaXMgaXMgc29tZXRoaW5nIHRoZSB0YXJnZXQgZ2NjIHJlY2lwZSBzaG91bGQgZG8KK2FuZCBvdmVycmlkZSB0aGVzZSBwbGF0Zm9ybSBkZWZhdWx0cyBpbiBpdHMgYnVpbGQgY29uZmlnLgorCitSUCAxNS84LzExCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBFbHZpcyBEb3dzb24gPGVsdmlzLmRvd3NvbkBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NCAgIHwgICAgNiArKy0tLS0KKyBnY2MvY29uZmlnL21pcHMvdC1saW51eDY0ICAgfCAgIDEwICsrKy0tLS0tLS0KKyBnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQgfCAgICA1ICsrLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0CisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKK0BAIC0zMiw3ICszMiw1IEBACisgIworIGNvbW1hPSwKKyBNVUxUSUxJQl9PUFRJT05TICAgID0gJChzdWJzdCAkKGNvbW1hKSwvLCQoVE1fTVVMVElMSUJfQ09ORklHKSkKKy1NVUxUSUxJQl9ESVJOQU1FUyAgID0gJChwYXRzdWJzdCBtJSwgJSwgJChzdWJzdCAvLCAsJChNVUxUSUxJQl9PUFRJT05TKSkpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IG02ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnUpCistTVVMVElMSUJfT1NESVJOQU1FUys9IG0zMj0kKGlmICQod2lsZGNhcmQgJChzaGVsbCBlY2hvICQoU1lTVEVNX0hFQURFUl9ESVIpKS8uLi8uLi91c3IvbGliMzIpLC4uL2xpYjMyLC4uL2xpYikkKGNhbGwgaWZfbXVsdGlhcmNoLDppMzg2LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbXgzMj0uLi9saWJ4MzIkKGNhbGwgaWZfbXVsdGlhcmNoLDp4ODZfNjQtbGludXgtZ251eDMyKQorK01VTFRJTElCX0RJUk5BTUVTID0gLiAuCisrTVVMVElMSUJfT1NESVJOQU1FUyA9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0CisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKK0BAIC0xNywxMCArMTcsNiBAQAorICMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorIE1VTFRJTElCX09QVElPTlMgPSBtYWJpPW4zMi9tYWJpPTMyL21hYmk9NjQKKy1NVUxUSUxJQl9ESVJOQU1FUyA9IG4zMiAzMiA2NAorLU1JUFNfRUwgPSAkKGlmICQoZmlsdGVyICVlbCwgJChmaXJzdHdvcmQgJChzdWJzdCAtLCAsJCh0YXJnZXQpKSkpLGVsKQorLU1JUFNfU09GVCA9ICQoaWYgJChzdHJpcCAkKGZpbHRlciBNQVNLX1NPRlRfRkxPQVRfQUJJLCAkKHRhcmdldF9jcHVfZGVmYXVsdCkpICQoZmlsdGVyIHNvZnQsICQod2l0aF9mbG9hdCkpKSxzb2Z0KQorLU1VTFRJTElCX09TRElSTkFNRVMgPSBcCistCS4uL2xpYjMyJChjYWxsIGlmX211bHRpYXJjaCw6bWlwczY0JChNSVBTX0VMKS1saW51eC1nbnVhYmluMzIkKE1JUFNfU09GVCkpIFwKKy0JLi4vbGliJChjYWxsIGlmX211bHRpYXJjaCw6bWlwcyQoTUlQU19FTCktbGludXgtZ251JChNSVBTX1NPRlQpKSBcCistCS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6bWlwczY0JChNSVBTX0VMKS1saW51eC1nbnVhYmk2NCQoTUlQU19TT0ZUKSkKKytNVUxUSUxJQl9ESVJOQU1FUyA9IC4gLiAuCisrTVVMVElMSUJfT1NESVJOQU1FUyA9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCisrCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKK0BAIC0yNiw3ICsyNiw2IEBACisgIyBNVUxUSUxJQl9PU0RJUk5BTUVTIGFjY29yZGluZyB0byB3aGF0IGlzIGZvdW5kIG9uIHRoZSB0YXJnZXQuCisgCisgTVVMVElMSUJfT1BUSU9OUyAgICA6PSBtNjQvbTMyCistTVVMVElMSUJfRElSTkFNRVMgICA6PSA2NCAzMgorK01VTFRJTElCX0RJUk5BTUVTICAgOj0gLiAuCisgTVVMVElMSUJfRVhUUkFfT1BUUyA6PSAKKy1NVUxUSUxJQl9PU0RJUk5BTUVTIDo9IG02ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOnBvd2VycGM2NC1saW51eC1nbnUpCistTVVMVElMSUJfT1NESVJOQU1FUyArPSBtMzI9JChpZiAkKHdpbGRjYXJkICQoc2hlbGwgZWNobyAkKFNZU1RFTV9IRUFERVJfRElSKSkvLi4vLi4vdXNyL2xpYjMyKSwuLi9saWIzMiwuLi9saWIpJChjYWxsIGlmX211bHRpYXJjaCw6cG93ZXJwYy1saW51eC1nbnUpCisrTVVMVElMSUJfT1NESVJOQU1FUyA6PSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZjAyMWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIwLW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2gKQEAgLTAsMCArMSwxMDIgQEAKK0Zyb20gMzA3YzhmZjNlZjY2NmI3YmQ1YWM3MzM4NjNmMmZiYjI3YTlkNTIxZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjEyOjU2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjAvMzVdIG9wdGlvbmFsIGxpYnN0ZGMKKworZ2NjLXJ1bnRpbWUgYnVpbGRzIGxpYnN0ZGMrKyBzZXBhcmF0ZWx5IGZyb20gZ2NjLWNyb3NzLSouIEl0cyBjb25maWd1cmUgdGVzdHMgdXNpbmcgZysrCit3aWxsIG5vdCBydW4gY29ycmVjdGx5IHNpbmNlIGJ5IGRlZmF1bHQgdGhlIGxpbmtlciB3aWxsIHRyeSB0byBsaW5rIGFnYWluc3QgbGlic3RkYysrCit3aGljaCBzaG91bGRuJ3QgZXhpc3QgeWV0LiBXZSBuZWVkIGFuIG9wdGlvbiB0byBkaXNhYmxlIC1sc3RkYysrCitvcHRpb24gd2hpbHN0IGxlYXZpbmcgLWxjLCAtbGdjYyBhbmQgb3RoZXIgYXV0b21hdGljIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGFkZGVkIGJ5IGdjYworZHJpdmVyLiBUaGlzIHBhdGNoIGFkZHMgc3VjaCBhbiBvcHRpb24gd2hpY2ggb25seSBkaXNhYmxlcyB0aGUgLWxzdGRjKysuCisKK0EgInN0YW5kYXJkIiBnY2MgYnVpbGQgdXNlcyB4Z2NjIGFuZCBoZW5jZSBhdm9pZHMgdGhpcy4gV2Ugc2hvdWxkIGFzayB1cHN0cmVhbSBob3cgdG8KK2RvIHRoaXMgb2ZmaWNpYWxseSwgdGhlIGxpa2VseSBhbnN3ZXIgaXMgZG9uJ3QgYnVpbGQgbGlic3RkYysrIHNlcGFyYXRlbHkuCisKK1JQIDI5LzYvMTAKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGdjYy9jLWZhbWlseS9jLm9wdCAgfCAgICA0ICsrKysKKyBnY2MvY3AvZysrc3BlYy5jICAgIHwgICAgMSArCisgZ2NjL2RvYy9pbnZva2UudGV4aSB8ICAgIDkgKysrKysrKy0tCisgZ2NjL2djYy5jICAgICAgICAgICB8ICAgIDEgKworIDQgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLm9wdCBiL2djYy9jLWZhbWlseS9jLm9wdAoraW5kZXggMTBhZTg0ZC4uZGMzZmZkZiAxMDA2NDQKKy0tLSBhL2djYy9jLWZhbWlseS9jLm9wdAorKysrIGIvZ2NjL2MtZmFtaWx5L2Mub3B0CitAQCAtMTI5OSw2ICsxMjk5LDEwIEBAIG5vc3RkaW5jKysKKyBDKysgT2JqQysrCisgRG8gbm90IHNlYXJjaCBzdGFuZGFyZCBzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcmllcyBmb3IgQysrCisgCisrbm9zdGRsaWIrKworK0RyaXZlcgorK0RvIG5vdCBsaW5rIHN0YW5kYXJkIEMrKyBydW50aW1lIGxpYnJhcnkKKysKKyBvCisgQyBPYmpDIEMrKyBPYmpDKysgSm9pbmVkIFNlcGFyYXRlCisgOyBEb2N1bWVudGVkIGluIGNvbW1vbi5vcHQKK2RpZmYgLS1naXQgYS9nY2MvY3AvZysrc3BlYy5jIGIvZ2NjL2NwL2crK3NwZWMuYworaW5kZXggYjg5NmVlYS4uZjU1MjE2YiAxMDA2NDQKKy0tLSBhL2djYy9jcC9nKytzcGVjLmMKKysrKyBiL2djYy9jcC9nKytzcGVjLmMKK0BAIC0xMjYsNiArMTI2LDcgQEAgbGFuZ19zcGVjaWZpY19kcml2ZXIgKHN0cnVjdCBjbF9kZWNvZGVkX29wdGlvbiAqKmluX2RlY29kZWRfb3B0aW9ucywKKyAgICAgICBzd2l0Y2ggKGRlY29kZWRfb3B0aW9uc1tpXS5vcHRfaW5kZXgpCisgCXsKKyAJY2FzZSBPUFRfbm9zdGRsaWI6CisrCWNhc2UgT1BUX25vc3RkbGliX186CisgCWNhc2UgT1BUX25vZGVmYXVsdGxpYnM6CisgCSAgbGlicmFyeSA9IC0xOworIAkgIGJyZWFrOworZGlmZiAtLWdpdCBhL2djYy9kb2MvaW52b2tlLnRleGkgYi9nY2MvZG9jL2ludm9rZS50ZXhpCitpbmRleCBhMDIyNjIyLi5mMTVjOTkxIDEwMDY0NAorLS0tIGEvZ2NjL2RvYy9pbnZva2UudGV4aQorKysrIGIvZ2NjL2RvYy9pbnZva2UudGV4aQorQEAgLTE5MCw3ICsxOTAsNyBAQCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorIC1mcmVwbyAgLWZuby1ydHRpICAtZnN0YXRzICAtZnRlbXBsYXRlLWJhY2t0cmFjZS1saW1pdD1AdmFye259IEBnb2wKKyAtZnRlbXBsYXRlLWRlcHRoPUB2YXJ7bn0gQGdvbAorIC1mbm8tdGhyZWFkc2FmZS1zdGF0aWNzIC1mdXNlLWN4YS1hdGV4aXQgIC1mbm8td2VhayAgLW5vc3RkaW5jKysgQGdvbAorLS1mbm8tZGVmYXVsdC1pbmxpbmUgIC1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiBAZ29sCisrLW5vc3RkbGliKysgLWZuby1kZWZhdWx0LWlubGluZSAgLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIEBnb2wKKyAtZnZpc2liaWxpdHktbXMtY29tcGF0IEBnb2wKKyAtZmV4dC1udW1lcmljLWxpdGVyYWxzIEBnb2wKKyAtV2FiaSAgLVdjb252ZXJzaW9uLW51bGwgIC1XY3Rvci1kdG9yLXByaXZhY3kgQGdvbAorQEAgLTQ1Myw3ICs0NTMsNyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCisgLW5vc3RhcnRmaWxlcyAgLW5vZGVmYXVsdGxpYnMgIC1ub3N0ZGxpYiAtcGllIC1yZHluYW1pYyBAZ29sCisgLXMgIC1zdGF0aWMgLXN0YXRpYy1saWJnY2MgLXN0YXRpYy1saWJzdGRjKysgQGdvbAorIC1zdGF0aWMtbGliYXNhbiAtc3RhdGljLWxpYnRzYW4gQGdvbAorLS1zaGFyZWQgLXNoYXJlZC1saWJnY2MgIC1zeW1ib2xpYyBAZ29sCisrLXNoYXJlZCAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIC1ub3N0ZGxpYisrIEBnb2wKKyAtVCBAdmFye3NjcmlwdH0gIC1XbCxAdmFye29wdGlvbn0gIC1YbGlua2VyIEB2YXJ7b3B0aW9ufSBAZ29sCisgLXUgQHZhcntzeW1ib2x9fQorIAorQEAgLTk4ODYsNiArOTg4NiwxMSBAQCBUaGVzZSBlbnRyaWVzIGFyZSB1c3VhbGx5IHJlc29sdmVkIGJ5IGVudHJpZXMgaW4KKyBsaWJjLiAgVGhlc2UgZW50cnkgcG9pbnRzIHNob3VsZCBiZSBzdXBwbGllZCB0aHJvdWdoIHNvbWUgb3RoZXIKKyBtZWNoYW5pc20gd2hlbiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisgCisrQGl0ZW0gLW5vc3RkbGliKysKKytAb3BpbmRleCBub3N0ZGxpYisrCisrRG8gbm90IHVzZSB0aGUgc3RhbmRhcmQgc3lzdGVtIEMrKyBydW50aW1lIGxpYnJhcmllcyB3aGVuIGxpbmtpbmcuCisrT25seSB0aGUgbGlicmFyaWVzIHlvdSBzcGVjaWZ5IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBsaW5rZXIuCisrCisgQGNpbmRleCBAb3B0aW9uey1sZ2NjfSwgdXNlIHdpdGggQG9wdGlvbnstbm9zdGRsaWJ9CisgQGNpbmRleCBAb3B0aW9uey1ub3N0ZGxpYn0gYW5kIHVucmVzb2x2ZWQgcmVmZXJlbmNlcworIEBjaW5kZXggdW5yZXNvbHZlZCByZWZlcmVuY2VzIGFuZCBAb3B0aW9uey1ub3N0ZGxpYn0KK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IGVmZGI2MjUuLjQ3Nzc1MmYgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTc0OCw2ICs3NDgsNyBAQCBwcm9wZXIgcG9zaXRpb24gYW1vbmcgdGhlIG90aGVyIG91dHB1dCBmaWxlcy4gICovCisgICAgICUobWZsaWIpICIgU1RBQ0tfU1BMSVRfU1BFQyAiXAorICAgICAle2Zwcm9maWxlLWFyY3N8ZnByb2ZpbGUtZ2VuZXJhdGUqfGNvdmVyYWdlOi1sZ2Nvdn0gIiBTQU5JVElaRVJfU1BFQyAiIFwKKyAgICAgJXshbm9zdGRsaWI6JXshbm9kZWZhdWx0bGliczolKGxpbmtfc3NwKSAlKGxpbmtfZ2NjX2Nfc2VxdWVuY2UpfX1cCisrICAgICV7IW5vc3RkbGliKys6fVwKKyAgICAgJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVFfX0gJXtUKn0gfX19fX19IgorICNlbmRpZgorIAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViM2M2MWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitGcm9tIDAwNDY5NmUwNTRhZTlkYzcxZDUxMmNjNzU1Y2NjNDA3NGZjNjJiMmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNDoyMCArMDQwMAorU3ViamVjdDogW1BBVENIIDIxLzM1XSBnY2M6IGRpc2FibGUgTUFTS19SRUxBWF9QSUNfQ0FMTFMgYml0CisKK1RoZSBuZXcgZmVhdHVyZSBhZGRlZCBhZnRlciA0LjMuMworImh0dHA6Ly93d3cucHViYnMubmV0LzIwMDkwOS9nY2MvOTQwNDgtcGF0Y2gtYWRkLXN1cHBvcnQtZm9yLXJtaXBzamFsci5odG1sIgord2lsbCBjYXVzZSBjYzFwbHVzIGVhdCB1cCBhbGwgdGhlIHN5c3RlbSBtZW1vcnkgd2hlbiBidWlsZCB3ZWJraXQtZ3RrLgorVGhlIGZ1bmN0aW9uIG1pcHNfZ2V0X3BpY19jYWxsX3N5bWJvbCBrZWVwcyBvbiByZWN1cnNpdmVseSBjYWxsaW5nIGl0c2VsZi4KK0Rpc2FibGUgdGhpcyBmZWF0dXJlIHRvIHdhbGsgYXNpZGUgdGhlIGJ1Zy4KKworU2lnbmVkLW9mZi1ieTogRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIGdjYy9jb25maWd1cmUgICAgfCAgICA3IC0tLS0tLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgICAgNyAtLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCBiNjVkMjFkLi5iZGFiNDVhIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTI1ODI5LDEzICsyNTgyOSw2IEBAICRhc19lY2hvX24gImNoZWNraW5nIGFzc2VtYmxlciBhbmQgbGlua2VyIGZvciBleHBsaWNpdCBKQUxSIHJlbG9jYXRpb24uLi4gIiA+JjY7CisgICAgICAgICBybSAtZiBjb25mdGVzdC4qCisgICAgICAgZmkKKyAgICAgZmkKKy0gICAgaWYgdGVzdCAkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MgPSB5ZXM7IHRoZW4KKy0gICAgICBpZiB0ZXN0IHgkdGFyZ2V0X2NwdV9kZWZhdWx0ID0geDsgdGhlbgorLSAgICAgICAgdGFyZ2V0X2NwdV9kZWZhdWx0PU1BU0tfUkVMQVhfUElDX0NBTExTCistICAgICAgZWxzZQorLSAgICAgICAgdGFyZ2V0X2NwdV9kZWZhdWx0PSIoJHRhcmdldF9jcHVfZGVmYXVsdCl8TUFTS19SRUxBWF9QSUNfQ0FMTFMiCistICAgICAgZmkKKy0gICAgZmkKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyIgPiY1CisgJGFzX2VjaG8gIiRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyIgPiY2OyB9CisgCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IGUyMjZiODUuLjVmNWM5MDkgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtNDA5OSwxMyArNDA5OSw2IEBAIHg6CisgICAgICAgICBybSAtZiBjb25mdGVzdC4qCisgICAgICAgZmkKKyAgICAgZmkKKy0gICAgaWYgdGVzdCAkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MgPSB5ZXM7IHRoZW4KKy0gICAgICBpZiB0ZXN0IHgkdGFyZ2V0X2NwdV9kZWZhdWx0ID0geDsgdGhlbgorLSAgICAgICAgdGFyZ2V0X2NwdV9kZWZhdWx0PU1BU0tfUkVMQVhfUElDX0NBTExTCistICAgICAgZWxzZQorLSAgICAgICAgdGFyZ2V0X2NwdV9kZWZhdWx0PSIoJHRhcmdldF9jcHVfZGVmYXVsdCl8TUFTS19SRUxBWF9QSUNfQ0FMTFMiCistICAgICAgZmkKKy0gICAgZmkKKyAgICAgQUNfTVNHX1JFU1VMVCgkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MpCisgCisgICAgIEFDX0NBQ0hFX0NIRUNLKFtsaW5rZXIgZm9yIC5laF9mcmFtZSBwZXJzb25hbGl0eSByZWxheGF0aW9uXSwKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYzhhYmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIyLUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSA3ZjVjOWRjYzcxYzhiODNhMGI1NTk2MjY2Y2M0YmRmMDkzNmU4ZTAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTY6MjggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMi8zNV0gQ09MTEVDVF9HQ0NfT1BUSU9OUworCitUaGlzIHBhdGNoIGFkZHMgLS1zeXNyb290IGludG8gQ09MTEVDVF9HQ0NfT1BUSU9OUyB3aGljaCBpcyB1c2VkIHRvCitpbnZva2UgY29sbGVjdDIuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2djYy5jIHwgICAgOSArKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDQ3Nzc1MmYuLjUxMDYyYWEgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTQwOTgsNiArNDA5OCwxNSBAQCBzZXRfY29sbGVjdF9nY2Nfb3B0aW9ucyAodm9pZCkKKyAJCXNpemVvZiAoIkNPTExFQ1RfR0NDX09QVElPTlM9IikgLSAxKTsKKyAKKyAgIGZpcnN0X3RpbWUgPSBUUlVFOworKyNpZmRlZiBIQVZFX0xEX1NZU1JPT1QKKysgIGlmICh0YXJnZXRfc3lzdGVtX3Jvb3RfY2hhbmdlZCAmJiB0YXJnZXRfc3lzdGVtX3Jvb3QpCisrICAgIHsKKysgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssICInLS1zeXNyb290PSIsIHNpemVvZigiJy0tc3lzcm9vdD0iKS0xKTsKKysgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssIHRhcmdldF9zeXN0ZW1fcm9vdCxzdHJsZW4odGFyZ2V0X3N5c3RlbV9yb290KSk7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCAiJyIsIDEpOworKyAgICAgIGZpcnN0X3RpbWUgPSBGQUxTRTsKKysgICAgfQorKyNlbmRpZgorICAgZm9yIChpID0gMDsgKGludCkgaSA8IG5fc3dpdGNoZXM7IGkrKykKKyAgICAgeworICAgICAgIGNvbnN0IGNoYXIgKmNvbnN0ICphcmdzOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIzLVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQ0MzVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApAQCAtMCwwICsxLDg4IEBACitGcm9tIDQ2ZDUyNDM5MDUyZjA4NzZhOTJkY2Y4YTBhYjljNjBkNzVjODAzMGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNzoyNSArMDQwMAorU3ViamVjdDogW1BBVENIIDIzLzM1XSBVc2UgdGhlIGRlZmF1bHRzLmggaW4gJHtCfSBpbnN0ZWFkIG9mICR7U30sIGFuZCB0LW9lCisgaW4gJHtCfQorCitVc2UgdGhlIGRlZmF1bHRzLmggaW4gJHtCfSBpbnN0ZWFkIG9mICR7U30sIGFuZCB0LW9lIGluICR7Qn0sIHNvIHRoYXQKK3RoZSBzb3VyY2UgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGdjYy1jcm9zcy1pbml0aWFsLAorZ2NjLWNyb3NzLWludGVybWVkaWF0ZSwgZ2NjLWNyb3NzLCBnY2MtcnVudGltZSwgYW5kIGFsc28gdGhlIHNkayBidWlsZC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvTWFrZWZpbGUuaW4gIHwgICAgMiArLQorIGdjYy9jb25maWd1cmUgICAgfCAgICA0ICsrLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgICAgNCArKy0tCisgZ2NjL21rY29uZmlnLnNoICB8ICAgIDQgKystLQorIDQgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCA5MGEyYmJhLi4yMzIwNDk3IDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC00NjksNyArNDY5LDcgQEAgVEFSR0VUX1NZU1RFTV9ST09UID0gQFRBUkdFVF9TWVNURU1fUk9PVEAKKyBUQVJHRVRfU1lTVEVNX1JPT1RfREVGSU5FID0gQFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkVACisgCisgeG1ha2VfZmlsZT1AeG1ha2VfZmlsZUAKKy10bWFrZV9maWxlPUB0bWFrZV9maWxlQAorK3RtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVAIC4vdC1vZQorIFRNX0VORElBTl9DT05GSUc9QFRNX0VORElBTl9DT05GSUdACisgVE1fTVVMVElMSUJfQ09ORklHPUBUTV9NVUxUSUxJQl9DT05GSUdACisgVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUc9QFRNX01VTFRJTElCX0VYQ0VQVElPTlNfQ09ORklHQAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCBiZGFiNDVhLi5kNTg3OTkzIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTExNTM5LDggKzExNTM5LDggQEAgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorICAgICAgICA7OworICAgICBkZWZhdWx0cy5oICkKKy0gICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS8kZiIKKy0gICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vJGYiCisgICAgICAgIDs7CisgICAgICogKQorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggNWY1YzkwOS4uNWU1ZTg0ZiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC0xNzIwLDggKzE3MjAsOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisgICAgICAgIDs7CisgICAgIGRlZmF1bHRzLmggKQorLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgorLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKKyAgICAgICAgOzsKKyAgICAgKiApCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZGlmZiAtLWdpdCBhL2djYy9ta2NvbmZpZy5zaCBiL2djYy9ta2NvbmZpZy5zaAoraW5kZXggMjlmZGZjNy4uZTA0OGRjZSAxMDA2NDQKKy0tLSBhL2djYy9ta2NvbmZpZy5zaAorKysrIGIvZ2NjL21rY29uZmlnLnNoCitAQCAtNzcsNyArNzcsNyBAQCBpZiBbIC1uICIkSEVBREVSUyIgXTsgdGhlbgorICAgICBpZiBbICQjIC1nZSAxIF07IHRoZW4KKyAJZWNobyAnI2lmZGVmIElOX0dDQycgPj4gJHtvdXRwdXR9VAorIAlmb3IgZmlsZSBpbiAiJEAiOyBkbworLQkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiZGVmYXVsdHMuaCI7IHRoZW4KKysJICAgIGlmIHRlc3QgeCIkZmlsZSIgPSB4Ii4vZGVmYXVsdHMuaCI7IHRoZW4KKyAJCXBvc3Rwb25lX2RlZmF1bHRzX2g9InllcyIKKyAJICAgIGVsc2UKKyAJCWVjaG8gIiMgaW5jbHVkZSBcIiRmaWxlXCIiID4+ICR7b3V0cHV0fVQKK0BAIC0xMDMsNyArMTAzLDcgQEAgZXNhYworIAorICMgSWYgd2UgcG9zdHBvbmVkIGluY2x1ZGluZyBkZWZhdWx0cy5oLCBhZGQgdGhlICNpbmNsdWRlIG5vdy4KKyBpZiB0ZXN0IHgiJHBvc3Rwb25lX2RlZmF1bHRzX2giID0geCJ5ZXMiOyB0aGVuCistICAgIGVjaG8gIiMgaW5jbHVkZSBcImRlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorKyAgICBlY2hvICIjIGluY2x1ZGUgXCIuL2RlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorIGZpCisgCisgIyBBZGQgbXVsdGlwbGUgaW5jbHVzaW9uIHByb3RlY3Rpb24gZ3VhcmQsIHBhcnQgdHdvLgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjQtUFItdGFyZ2V0LTMyMjE5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0N2Q4NDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaApAQCAtMCwwICsxLDY3IEBACitGcm9tIGUwZDE1ZjRmOGJmMjhjMzUxYjkyMTVjYTM3ZjFjYWEyNGRmMGUxZmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxODo1NCArMDQwMAorU3ViamVjdDogW1BBVENIIDI0LzM1XSBQUiB0YXJnZXQvMzIyMTkKKworKiB2YXJhc20uYyAoZGVmYXVsdF9iaW5kc19sb2NhbF9wXzEpOiBXZWFrIGRhdGEgaXMgbm90IGxvY2FsLgorCitTaWduZWQtb2ZmLWJ5OiBCZXJuaGFyZCBSZXV0bmVyLUZpc2NoZXIgPHJlcC5kb3Qubm9wQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKy0tLQorIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjEuYyB8ICAgMTQgKysrKysrKysrKysrKysKKyBnY2MvdmFyYXNtLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICsrKystLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmlzaWJpbGl0eS0yMS5jCisKK2RpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92aXNpYmlsaXR5LTIxLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92aXNpYmlsaXR5LTIxLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iZTdkZWRhCistLS0gL2Rldi9udWxsCisrKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92aXNpYmlsaXR5LTIxLmMKK0BAIC0wLDAgKzEsMTQgQEAKKysvKiBQUiB0YXJnZXQvMzIyMTkgKi8KKysvKiB7IGRnLWRvIHJ1biB9ICovCisrLyogeyBkZy1yZXF1aXJlLXZpc2liaWxpdHkgIiIgfSAqLworKy8qIHsgZGctb3B0aW9ucyAiLWZQSUMiIHsgdGFyZ2V0IGZwaWMgfSB9ICovCisrCisrZXh0ZXJuIHZvaWQgZigpIF9fYXR0cmlidXRlX18oKHdlYWssdmlzaWJpbGl0eSgiaGlkZGVuIikpKTsKKytleHRlcm4gaW50IHB1dHMoIGNoYXIgY29uc3QqICk7CisraW50IG1haW4oKQorK3sKKysJaWYgKGYpCisrCQlmKCk7CisrCXJldHVybiAwOworK30KKysKK2RpZmYgLS1naXQgYS9nY2MvdmFyYXNtLmMgYi9nY2MvdmFyYXNtLmMKK2luZGV4IDY2NDgxMDMuLmZhZGJhNzggMTAwNjQ0CistLS0gYS9nY2MvdmFyYXNtLmMKKysrKyBiL2djYy92YXJhc20uYworQEAgLTY2NzUsNiArNjY3NSwxMCBAQCBkZWZhdWx0X2JpbmRzX2xvY2FsX3BfMSAoY29uc3RfdHJlZSBleHAsIGludCBzaGxpYikKKyAgIC8qIFN0YXRpYyB2YXJpYWJsZXMgYXJlIGFsd2F5cyBsb2NhbC4gICovCisgICBlbHNlIGlmICghIFRSRUVfUFVCTElDIChleHApKQorICAgICBsb2NhbF9wID0gdHJ1ZTsKKysgIC8qIGhpZGRlbiB3ZWFrIGNhbid0IGJlIG92ZXJyaWRkZW4gYnkgc29tZXRoaW5nIG5vbi1sb2NhbCwgYWxsCisrICAgICB0aGF0IGlzIHBvc3NpYmxlIGlzIHRoYXQgaXQgaXMgbm90IGRlZmluZWQgYXQgYWxsLiAqLworKyAgZWxzZSBpZiAoREVDTF9XRUFLIChleHApKQorKyAgICBsb2NhbF9wID0gZmFsc2U7CisgICAvKiBBIHZhcmlhYmxlIGlzIGxvY2FsIGlmIHRoZSB1c2VyIGhhcyBzYWlkIGV4cGxpY2l0bHkgdGhhdCBpdCB3aWxsCisgICAgICBiZS4gICovCisgICBlbHNlIGlmICgoREVDTF9WSVNJQklMSVRZX1NQRUNJRklFRCAoZXhwKQorQEAgLTY2ODgsMTEgKzY2OTIsNiBAQCBkZWZhdWx0X2JpbmRzX2xvY2FsX3BfMSAoY29uc3RfdHJlZSBleHAsIGludCBzaGxpYikKKyAgICAgIGxvY2FsLiAgKi8KKyAgIGVsc2UgaWYgKERFQ0xfVklTSUJJTElUWSAoZXhwKSAhPSBWSVNJQklMSVRZX0RFRkFVTFQpCisgICAgIGxvY2FsX3AgPSB0cnVlOworLSAgLyogRGVmYXVsdCB2aXNpYmlsaXR5IHdlYWsgZGF0YSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIHN0cm9uZyBzeW1ib2wKKy0gICAgIGluIGFub3RoZXIgbW9kdWxlIGFuZCBzbyBhcmUgbm90IGxvY2FsLiAgKi8KKy0gIGVsc2UgaWYgKERFQ0xfV0VBSyAoZXhwKQorLQkgICAmJiAhcmVzb2x2ZWRfbG9jYWxseSkKKy0gICAgbG9jYWxfcCA9IGZhbHNlOworICAgLyogSWYgUElDLCB0aGVuIGFzc3VtZSB0aGF0IGFueSBnbG9iYWwgbmFtZSBjYW4gYmUgb3ZlcnJpZGRlbiBieQorICAgICAgc3ltYm9scyByZXNvbHZlZCBmcm9tIG90aGVyIG1vZHVsZXMuICAqLworICAgZWxzZSBpZiAoc2hsaWIpCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI1LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNzkxNGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI1LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gYWY4YTU2ZWE0ZTE3YjI5MDllZmYyYzU3NzA0YWI0M2VmMjRmMjhkMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIwOjAxICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjUvMzVdIGZvcnRyYW4gY3Jvc3MtY29tcGlsZSBoYWNrLgorCisqIEZvcnRyYW4gd291bGQgaGF2ZSBzZWFyY2hlZCBmb3IgYXJtLWFuZ3N0cm9tLWdudWVhYmktZ2ZvcnRyYW4gYnV0IHdvdWxkIGhhdmUgdXNlZAordXNlZCBnZm9ydGFuLiBGb3IgZ2NjXzQuMi4yLmJiIHdlIHdhbnQgdG8gdXNlIHRoZSBnZm9ydHJhbiBjb21waWxlciBmcm9tIG91ciBjcm9zcworZGlyZWN0b3J5LgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgbGliZ2ZvcnRyYW4vY29uZmlndXJlICAgIHwgICAgMiArLQorIGxpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZSBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQoraW5kZXggODM4NWU5Ni4uYjhmN2E5MiAxMDA3NTUKKy0tLSBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQorKysrIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlCitAQCAtMTI3MDQsNyArMTI3MDQsNyBAQCBlc2FjCisgCisgIyBXZSBuZWVkIGdmb3J0cmFuIHRvIGNvbXBpbGUgcGFydHMgb2YgdGhlIGxpYnJhcnkKKyAjQUNfUFJPR19GQyhnZm9ydHJhbikKKy1GQz0iJEdGT1JUUkFOIgorKyNGQz0iJEdGT1JUUkFOIgorIGFjX2V4dD0ke2FjX2ZjX3NyY2V4dC1mfQorIGFjX2NvbXBpbGU9JyRGQyAtYyAkRkNGTEFHUyAkYWNfZmNmbGFnc19zcmNleHQgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisgYWNfbGluaz0nJEZDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkRkNGTEFHUyAkTERGTEFHUyAkYWNfZmNmbGFnc19zcmNleHQgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCitkaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCitpbmRleCA3ZDk3ZmVkLi4zZjlmNDg0IDEwMDY0NAorLS0tIGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCisrKysgYi9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKK0BAIC0yMjcsNyArMjI3LDcgQEAgQUNfU1VCU1QoZW5hYmxlX3N0YXRpYykKKyAKKyAjIFdlIG5lZWQgZ2ZvcnRyYW4gdG8gY29tcGlsZSBwYXJ0cyBvZiB0aGUgbGlicmFyeQorICNBQ19QUk9HX0ZDKGdmb3J0cmFuKQorLUZDPSIkR0ZPUlRSQU4iCisrI0ZDPSIkR0ZPUlRSQU4iCisgQUNfUFJPR19GQyhnZm9ydHJhbikKKyAKKyAjIGV4dHJhIExEIEZsYWdzIHdoaWNoIGFyZSByZXF1aXJlZCBmb3IgdGFyZ2V0cworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNi1saWJnY2Mtc2psai1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGVmYWI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNi1saWJnY2Mtc2psai1jaGVjay5wYXRjaApAQCAtMCwwICsxLDc0IEBACitGcm9tIDA4YzIzOTg0NDVlNmNhYzI4MjQ4OGY2NGFlNmJmMjljYmNkOGRiMjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMDo1MCArMDQwMAorU3ViamVjdDogW1BBVENIIDI2LzM1XSBsaWJnY2Mtc2psai1jaGVjaworCithY19mbl9jX3RyeV9jb21waWxlIGRvZXNudCBzZWVtIHRvIGtlZXAgdGhlIGludGVybWVkaWF0ZSBmaWxlcword2hpY2ggYXJlIG5lZWRlZCBmb3Igc2psaiB0ZXN0IHRvIHBhc3Mgc2luY2UgaXQgZ3JlcHMgaW50byB0aGUKK2dlbmVyYXRlZCBmaWxlLiBTbyB3ZSBydW4gdGhlIGNvbXBpbGVyIGNvbW1hbmQgdXNpbmcgQUNfVFJZX0NPTU1BTkQKK3doaWNoIHRoZW4gZ2VuZXJhdGVzIHRoZSBuZWVkZWQgLnMgZmlsZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYmdjYy9jb25maWd1cmUgICAgfCAgIDEwICsrKysrKy0tLS0KKyBsaWJnY2MvY29uZmlndXJlLmFjIHwgICAxMCArKysrLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmdjYy9jb25maWd1cmUgYi9saWJnY2MvY29uZmlndXJlCitpbmRleCAxNDI1ZGY2Li5kMThlM2NiIDEwMDY0NAorLS0tIGEvbGliZ2NjL2NvbmZpZ3VyZQorKysrIGIvbGliZ2NjL2NvbmZpZ3VyZQorQEAgLTQyMDgsMTcgKzQyMDgsMTkgQEAgdm9pZCBmb28gKCkKKyB9CisgCisgX0FDRU9GCistQ0ZMQUdTX2hvbGQ9JENGTEFHUworLUNGTEFHUz0iLS1zYXZlLXRlbXBzIC1mZXhjZXB0aW9ucyIKKyBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz11bmtub3duCistaWYgYWNfZm5fY190cnlfY29tcGlsZTsgdGhlbiA6CisraWYgeyBhY190cnk9JyR7Q0MtY2N9IC1mZXhjZXB0aW9ucyAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mNScKKysgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY190cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgorICAgaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXllcworICAgZWxpZiBncmVwIF9VbndpbmRfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPW5vCisgICBmaQorIGZpCistQ0ZMQUdTPSRDRkxBR1NfaG9sZAorIHJtIC1mIGNvbmZ0ZXN0KgorIAorIGZpCitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZ3VyZS5hYyBiL2xpYmdjYy9jb25maWd1cmUuYWMKK2luZGV4IDhiN2FiYTUuLmM3Yzk2NDQgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlndXJlLmFjCisrKysgYi9saWJnY2MvY29uZmlndXJlLmFjCitAQCAtMjE2LDE2ICsyMTYsMTQgQEAgdm9pZCBmb28gKCkKKyAgIGJhcigpOworIH0KKyBdKV0pCistQ0ZMQUdTX2hvbGQ9JENGTEFHUworLUNGTEFHUz0iLS1zYXZlLXRlbXBzIC1mZXhjZXB0aW9ucyIKKyBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz11bmtub3duCistQVNfSUYoW2FjX2ZuX2NfdHJ5X2NvbXBpbGVdLAorLSAgW2lmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorK2lmIEFDX1RSWV9DT01NQU5EKCR7Q0MtY2N9IC1mZXhjZXB0aW9ucyAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mQVNfTUVTU0FHRV9MT0dfRkQpOyB0aGVuCisrICBpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9eWVzCisgICBlbGlmIGdyZXAgX1Vud2luZF9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9bm8KKy0gIGZpXSkKKy1DRkxBR1M9JENGTEFHU19ob2xkCisrICBmaQorK2ZpCisgcm0gLWYgY29uZnRlc3QqCisgXSkKKyAKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjctY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlOTUyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjctY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSBhMGY5YmQwOWM4MTZhZDI5ZWNmN2MyOWQ2YzI3ZjdkZjk3NzEwMzY0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjI6MDAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNy8zNV0gY3BwOiBob25vciBzeXNyb290LgorCitDdXJyZW50bHksIGlmIHRoZSBnY2MgdG9vbGNoYWluIGlzIHJlbG9jYXRlZCBhbmQgaW5zdGFsbGVkIGZyb20gc3N0YXRlLCB0aGVuIHlvdSB0cnkgYW5kIGNvbXBpbGUKK3ByZXByb2Nlc3NlZCBzb3VyY2UgKC5pIG9yIC5paSBmaWxlcyksIHRoZSBjb21waWxlciB3aWxsIHRyeSBhbmQgYWNjZXNzIHRoZSBidWlsdGluIHN5c3Jvb3QgbG9jYXRpb24KK3JhdGhlciB0aGFuIHRoZSAtLXN5c3Jvb3Qgb3B0aW9uIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmUuIElmIGFjY2VzcyB0byB0aGF0IGRpcmVjdG9yeSBpcworcGVybWlzc2lvbiBkZW5pZWQgKHVucmVhZGFibGUpLCBnY2Mgd2lsbCBlcnJvci4KKworVGhpcyBoYXBwZW5zIHdoZW4gY2NhY2hlIGlzIGluIHVzZSBkdWUgdG8gdGhlIGZhY3QgaXQgdXNlcyBwcmVwcm9jZXNzZWQgc291cmNlIGZpbGVzLgorCitUaGUgZml4IGJlbG93IGFkZHMgJUkgdG8gdGhlIGNwcC1vdXRwdXQgc3BlYyBtYWNybyBzbyB0aGUgZGVmYXVsdCBzdWJzdGl0dXRpb25zIGZvciAtaXByZWZpeCwKKy1pc3lzdGVtLCAtaXN5c3Jvb3QgaGFwcGVuIGFuZCB0aGUgY29ycmVjdCBzeXNyb290IGlzIHVzZWQuCisKK1tZT0NUTyAjMjA3NF0KKworUlAgMjAxMi8wNC8xMworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jcC9sYW5nLXNwZWNzLmggfCAgICAyICstCisgZ2NjL2djYy5jICAgICAgICAgICB8ICAgIDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jcC9sYW5nLXNwZWNzLmggYi9nY2MvY3AvbGFuZy1zcGVjcy5oCitpbmRleCBhMDAxYzNlLi4xYWFlMWU0IDEwMDY0NAorLS0tIGEvZ2NjL2NwL2xhbmctc3BlY3MuaAorKysrIGIvZ2NjL2NwL2xhbmctc3BlY3MuaAorQEAgLTYzLDUgKzYzLDUgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIHsiLmlpIiwgIkBjKystY3BwLW91dHB1dCIsIDAsIDAsIDB9LAorICAgeyJAYysrLWNwcC1vdXRwdXQiLAorICAgICIleyFNOiV7IU1NOiV7IUU6XAorLSAgICBjYzFwbHVzIC1mcHJlcHJvY2Vzc2VkICVpICUoY2MxX29wdGlvbnMpICUyXAorKyAgICBjYzFwbHVzIC1mcHJlcHJvY2Vzc2VkICVpICVJICUoY2MxX29wdGlvbnMpICUyXAorICAgICAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggNTEwNjJhYS4uY2Y2Yjk5ZSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTA0Miw3ICsxMDQyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb21waWxlciBkZWZhdWx0X2NvbXBpbGVyc1tdID0KKyAgICAgICAgICAgICAgICAgICAgICVXe28qOi0tb3V0cHV0LXBjaD0lKn19JVZ9fX19fX0iLCAwLCAwLCAwfSwKKyAgIHsiLmkiLCAiQGNwcC1vdXRwdXQiLCAwLCAwLCAwfSwKKyAgIHsiQGNwcC1vdXRwdXQiLAorLSAgICIleyFNOiV7IU1NOiV7IUU6Y2MxIC1mcHJlcHJvY2Vzc2VkICVpICUoY2MxX29wdGlvbnMpICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCisrICAgIiV7IU06JXshTU06JXshRTpjYzEgLWZwcmVwcm9jZXNzZWQgJWkgJUkgJShjYzFfb3B0aW9ucykgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKKyAgIHsiLnMiLCAiQGFzc2VtYmxlciIsIDAsIDAsIDB9LAorICAgeyJAYXNzZW1ibGVyIiwKKyAgICAiJXshTToleyFNTToleyFFOiV7IVM6YXMgJShhc21fZGVidWcpICUoYXNtX29wdGlvbnMpICVpICVBIH19fX0iLCAwLCAwLCAwfSwKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2Mzg3MjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI4LU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAzMDFlMThkNDcxMWRiNTkyNWU3NjdmYWQwOGRmZmE5Y2ZlMGEyZjFmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjM6MDggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyOC8zNV0gTUlQUzY0OiBEZWZhdWx0IHRvIE42NCBBQkkKKworTUlQUzY0IGRlZmF1bHRzIHRvIG4zMiBBQkksIHRoaXMgcGF0Y2ggbWFrZXMgaXQKK3NvIHRoYXQgaXQgZGVmYXVsdHMgdG8gTjY0IEFCSQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZyBzcGVjaWZpY10KKy0tLQorIGdjYy9jb25maWcuZ2NjIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy5nY2MgYi9nY2MvY29uZmlnLmdjYworaW5kZXggMWEwYmU1MC4uOTg5YzJmYiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcuZ2NjCisrKysgYi9nY2MvY29uZmlnLmdjYworQEAgLTE3OTcsNyArMTc5Nyw3IEBAIG1pcHMqLW10aS1saW51eCopCisgbWlwczY0Ki0qLWxpbnV4KiB8IG1pcHNpc2E2NCotKi1saW51eCopCisgCXRtX2ZpbGU9ImRieGVsZi5oIGVsZm9zLmggZ251LXVzZXIuaCBsaW51eC5oIGdsaWJjLXN0ZGludC5oICR7dG1fZmlsZX0gbWlwcy9nbnUtdXNlci5oIG1pcHMvZ251LXVzZXI2NC5oIG1pcHMvbGludXg2NC5oIG1pcHMvbGludXgtY29tbW9uLmgiCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gbWlwcy90LWxpbnV4NjQiCistCXRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gTUlQU19BQklfREVGQVVMVD1BQklfTjMyIgorKwl0bV9kZWZpbmVzPSIke3RtX2RlZmluZXN9IE1JUFNfQUJJX0RFRkFVTFQ9QUJJXzY0IgorIAljYXNlICR7dGFyZ2V0fSBpbgorIAkJbWlwczY0ZWwtc3QtbGludXgtZ251KQorIAkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gbWlwcy9zdC5oIgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFhNmQ5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjktRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaApAQCAtMCwwICsxLDIwOSBAQAorRnJvbSAyOWQxMjM0NGZiNjgyYTA1M2RlNTNlYjA4Yjk1NzA0Y2YzYjY3YWYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjQ6NTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyOS8zNV0gRGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIGFuZCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIKKyByZWxhdGl2ZSB0byBTWVNURU1MSUJTX0RJUgorCitUaGlzIHBhdGNoIGRlZmluZXMgR0xJQkNfRFlOQU1JQ19MSU5LRVIgYW5kIFVDTElCQ19EWU5BTUlDX0xJTktFUgorcmVsYXRpdmUgdG8gU1lTVEVNTElCU19ESVIgd2hpY2ggY2FuIGJlIHNldCBpbiBnZW5lcmF0ZWQgaGVhZGVycworVGhpcyBicmVha3MgdGhlIGFzc3VtcHRpb24gb2YgaGFyZGNvZGVkIG11bHRpbGliIGluIGdjYworQ2hhbmdlIGlzIG9ubHkgZm9yIHRoZSBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcyBpbiBPRSBpbmNsdWRpbmcKK1NILCBzcGFyYywgYWxwaGEgZm9yIHBvc3NpYmxlIGZ1dHVyZSBzdXBwb3J0IChpZiBhbnkpCisKK1JlbW92ZXMgdGhlIGRvX2hlYWRlcmZpeCB0YXNrIGluIG1ldGFkYXRhCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlndXJhdGlvbl0KKy0tLQorIGdjYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmggfCAgICA0ICsrLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggIHwgICAgNCArKy0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL2kzODYvbGludXguaCAgICAgIHwgICAgMiArLQorIGdjYy9jb25maWcvaTM4Ni9saW51eDY0LmggICAgfCAgICA2ICsrKy0tLQorIGdjYy9jb25maWcvbWlwcy9saW51eC5oICAgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaCAgICB8ICAgIDggKysrKy0tLS0KKyBnY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmggIHwgICAgOCArKysrLS0tLQorIGdjYy9jb25maWcvc2gvbGludXguaCAgICAgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oICAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaCAgIHwgICAgNCArKy0tCisgMTEgZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAorQEAgLTIzLDggKzIzLDggQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KKyAjZGVmaW5lIEVYVFJBX1NQRUNTIFwKKyB7ICJlbGZfZHluYW1pY19saW5rZXIiLCBFTEZfRFlOQU1JQ19MSU5LRVIgfSwKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCSIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUglTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKKyAjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttZ2xpYmM6IiBHICI7OiIgVSAifSIKKyAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQworSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCitAQCAtNjgsOCArNjgsOCBAQAorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgYW5kIFRBUkdFVF9ERUZBVUxUX0ZMT0FUX0FCSS4gICovCisgCisgI3VuZGVmICBHTElCQ19EWU5BTUlDX0xJTktFUgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCAiL2xpYi9sZC1saW51eC5zby4zIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCAiL2xpYi9sZC1saW51eC1hcm1oZi5zby4zIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMyIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0hBUkRfRkxPQVQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LWFybWhmLnNvLjMiCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9ERUZBVUxUIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFwKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorQEAgLTU3LDcgKzU3LDcgQEAKKyAKKyAjZGVmaW5lIExJQkdDQ19TUEVDICIle21mbG9hdC1hYmk9c29mdCo6LWxmbG9hdH0gLWxnY2MiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI2RlZmluZSBMSU5VWF9UQVJHRVRfTElOS19TUEVDICAiJXtoKn0gXAorICAgICV7c3RhdGljOi1Cc3RhdGljfSBcCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvaTM4Ni9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKK0BAIC0yMCw0ICsyMCw0IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuCisgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OICJlbGZfaTM4NiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorQEAgLTI3LDYgKzI3LDYgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USQorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT042NCAiZWxmX3g4Nl82NCIKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OWDMyICJlbGYzMl94ODZfNjQiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXgteDg2LTY0LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYngzMi9sZC1saW51eC14MzIuc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14ODYtNjQuc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14MzIuc28uMiIKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL21pcHMvbGludXguaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL21pcHMvbGludXguaAorQEAgLTE3LDQgKzE3LDQgQEAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgRworIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLnNvLjEiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQuc28uMSIKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvbWlwcy9saW51eDY0LmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAorQEAgLTIyLDEwICsyMiwxMCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLgorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT042NCAiZWxmNjQle0VCOmJ9JXtFTDpsfXRzbWlwIgorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT05OMzIgImVsZjMyJXtFQjpifSV7RUw6bH10c21pcG4zMiIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQuc28uMSIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWI2NC9sZC5zby4xIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgIi9saWIzMi9sZC5zby4xIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSTjMyICIvbGliMzIvbGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQuc28uMSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSTjMyIFNZU1RFTUxJQlNfRElSICJsZC5zby4xIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSTjMyIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUk4zMiAiL3N5c3RlbS9iaW4vbGlua2VyMzIiCisgI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUk4zMiBcCisgICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIgKEdMSUJDX0RZTkFNSUNfTElOS0VSTjMyLCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIsIFwKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAorQEAgLTM2NiwxNCArMzY2LDE0IEBAIGV4dGVybiBpbnQgZG90X3N5bWJvbHM7CisgI3VuZGVmCUxJTktfT1NfREVGQVVMVF9TUEVDCisgI2RlZmluZSBMSU5LX09TX0RFRkFVTFRfU1BFQyAiJShsaW5rX29zX2xpbnV4KSIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQuc28uMSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLnNvLjEiCisgI2lmZGVmIExJTlVYNjRfREVGQVVMVF9BQklfRUxGdjIKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MTovbGliNjQvbGQ2NC5zby4xOzovbGliNjQvbGQ2NC5zby4yfSIKKyAjZWxzZQorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYyOi9saWI2NC9sZDY0LnNvLjI7Oi9saWI2NC9sZDY0LnNvLjF9IgorICNlbmRpZgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYi9sZDY0LXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCisgI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQworICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgorICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvc2gvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvc2gvbGludXguaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL3NoL2xpbnV4LmgKK0BAIC00Myw3ICs0Myw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuCisgCisgI2RlZmluZSBUQVJHRVRfQVNNX0ZJTEVfRU5EIGZpbGVfZW5kX2luZGljYXRlX2V4ZWNfc3RhY2sKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjdW5kZWYgU1VCVEFSR0VUX0xJTktfRU1VTF9TVUZGSVgKKyAjZGVmaW5lIFNVQlRBUkdFVF9MSU5LX0VNVUxfU1VGRklYICJfbGludXgiCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvc3BhcmMvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvc3BhcmMvbGludXguaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKK0BAIC04Myw3ICs4Myw3IEBAIGV4dGVybiBjb25zdCBjaGFyICpob3N0X2RldGVjdF9sb2NhbF9jcHUKKyAgICBXaGVuIHRoZSAtc2hhcmVkIGxpbmsgb3B0aW9uIGlzIHVzZWQgYSBmaW5hbCBsaW5rIGlzIG5vdCBiZWluZworICAgIGRvbmUuICAqLworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICN1bmRlZiAgTElOS19TUEVDCisgI2RlZmluZSBMSU5LX1NQRUMgIi1tIGVsZjMyX3NwYXJjICV7c2hhcmVkOi1zaGFyZWR9IFwKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAorQEAgLTkyLDggKzkyLDggQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KKyAgICBXaGVuIHRoZSAtc2hhcmVkIGxpbmsgb3B0aW9uIGlzIHVzZWQgYSBmaW5hbCBsaW5rIGlzIG5vdCBiZWluZworICAgIGRvbmUuICAqLworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC1saW51eC5zby4yIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYjY0L2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjaWZkZWYgU1BBUkNfQklfQVJDSAorIAorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL2xpbnV4LmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9saW51eC5oCitAQCAtNzMsMTAgKzczLDEwIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVEkKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUiBtdXN0IGJlIGRlZmluZWQgZm9yIGVhY2ggdGFyZ2V0IHVzaW5nIHRoZW0sIG9yCisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBhbmQgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBmb3IgdGFyZ2V0cworICAgIHN1cHBvcnRpbmcgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBjb21waWxhdGlvbi4gICovCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliL2xkNjQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgIi9saWIvbGR4MzItdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgU1lTVEVNTElCU19ESVIgImxkeDMyLXVDbGliYy5zby4wIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSICIvc3lzdGVtL2Jpbi9saW5rZXIiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIzMiAiL3N5c3RlbS9iaW4vbGlua2VyIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSNjQgIi9zeXN0ZW0vYmluL2xpbmtlcjY0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMwLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2VhZmY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSBjMTgxNmMxNjAxNTZmOTljMzRlNmEwYTAzMTFiYjAyMTkzMjY4MDRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjY6MzcgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzMC8zNV0gZ2NjOiBGaXggYXJndW1lbnQgbGlzdCB0b28gbG9uZyBlcnJvci4KKworVGhlcmUgd291bGQgYmUgYW4gIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gdGhlCitidWlsZCBkaXJlY3RvcnkgaXMgbG9uZ2VyIHRoYW4gMjAwLCB0aGlzIGlzIGNhdXNlZCBieToKKworaGVhZGVycz1gZWNobyAkKFBMVUdJTl9IRUFERVJTKSB8IHRyICcgJyAnXDAxMicgfCBzb3J0IC11YAorCitUaGUgUExVR0lOX0hFQURFUlMgaXMgdG9vIGxvbmcgYmVmb3JlIHNvcnQsIHNvIHRoZSAiZWNobyIgY2FuJ3QgaGFuZGxlCitpdCwgdXNlIHRoZSAkKHNvcnQgbGlzdCkgb2YgR05VIG1ha2Ugd2hpY2ggY2FuIGhhbmRsZSB0aGUgdG9vIGxvbmcgbGlzdAord291bGQgZml4IHRoZSBwcm9ibGVtLCB0aGUgaGVhZGVyIHdvdWxkIGJlIHNob3J0IGVub3VnaCBhZnRlciBzb3J0ZWQuCitUaGUgInRyICcgJyAnXDAxMiciIHdhcyB1c2VkIGZvciB0cmFuc2xhdGluZyB0aGUgc3BhY2UgdG8gIlxuIiwgdGhlCiskKHNvcnQgbGlzdCkgZG9lc24ndCBuZWVkIHRoaXMuCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvTWFrZWZpbGUuaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IDIzMjA0OTcuLjg1NjJhNjIgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTQ2MjcsNyArNDYyNyw3IEBAIGluc3RhbGwtcGx1Z2luOiBpbnN0YWxsZGlycyBsYW5nLmluc3RhbGwtcGx1Z2luIHMtaGVhZGVyLXZhcnMgaW5zdGFsbC1nZW5ndHlwZQorICMgV2Uga2VlcCB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgZmlsZXMgaW4gY29uZmlnIG9yIGMtZmFtaWx5IGFuZCAuZGVmCisgIyBmaWxlcy4gQWxsIG90aGVyIGZpbGVzIGFyZSBmbGF0dGVuZWQgdG8gYSBzaW5nbGUgZGlyZWN0b3J5LgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKHBsdWdpbl9pbmNsdWRlZGlyKQorLQloZWFkZXJzPWBlY2hvICQoUExVR0lOX0hFQURFUlMpIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgLXVgOyBcCisrCWhlYWRlcnM9IiQoc29ydCAkKFBMVUdJTl9IRUFERVJTKSkiOyBcCisgCXNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2A7IFwKKyAJZm9yIGZpbGUgaW4gJCRoZWFkZXJzOyBkbyBcCisgCSAgaWYgWyAtZiAkJGZpbGUgXSA7IHRoZW4gXAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMxLURpc2FibGUtc2R0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMS1EaXNhYmxlLXNkdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzFkNWUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMS1EaXNhYmxlLXNkdC5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorRnJvbSBiODUyNjViYzk0ZWMxYmVhZjFkM2I2OTdjMDNkYjYyOTkxNTUzNDY3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6Mjg6MTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzMS8zNV0gRGlzYWJsZSBzZHQuCisKK1dlIGRvbid0IGxpc3QgZHRyYWNlIGluIERFUEVORFMgc28gd2Ugc2hvdWxkbid0IGJlIGRlcGVuZGluZyBvbiB0aGlzIGhlYWRlci4KK0l0IG1heSBvciBtYXkgbm90IGV4aXN0IGZyb20gcHJlaXZvdXMgYnVpbGRzIHRob3VnaC4gVG8gYmUgZGV0ZXJtaW5zdGljLCBkaXNhYmxlCitzZHQuaCB1c2FnZSBhbHdheXMuIFRoaXMgYXZvaWRzIGJ1aWxkIGZhaWx1cmVzIGlmIHRoZSBoZWFkZXIgaXMgcmVtb3ZlZCBhZnRlciBjb25maWd1cmUKK2J1dCBiZWZvcmUgbGliZ2NjIGlzIGNvbXBpbGVkIGZvciBleGFtcGxlLgorCitSUCAyMDEyLzgvNworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitEaXNhYmxlIHNkdCBmb3IgbGlic3RkYysrLXYzLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtoYWNrXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICAgICAgICAgICB8IDEyICsrKysrKy0tLS0tLQorIGdjYy9jb25maWd1cmUuYWMgICAgICAgICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlICAgIHwgIDYgKysrLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYyB8ICAyICstCisgNCBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCAzYzU1MGE2Li4wMWM3NjI2IDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTI2ODEyLDEyICsyNjgxMiwxMiBAQCBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5IiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkuLi4gIiA+JjY7IH0KKyBoYXZlX3N5c19zZHRfaD1ubworLWlmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorLSAgaGF2ZV9zeXNfc2R0X2g9eWVzCistCistJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCistCistZmkKKysjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisrIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCisrIworKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKysjCisrI2ZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXZlX3N5c19zZHRfaCIgPiY1CisgJGFzX2VjaG8gIiRoYXZlX3N5c19zZHRfaCIgPiY2OyB9CisgCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDM2MDFhYjYuLjA2ZTUwMWYgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtNDc3OSwxNSArNDc3OSwxNSBAQCBpZiB0ZXN0IHgkZ2NjX2N2X2xpYmNfcHJvdmlkZXNfc3NwID0geHllczsgdGhlbgorIGZpCisgCisgIyBUZXN0IGZvciA8c3lzL3NkdC5oPiBvbiB0aGUgdGFyZ2V0LgorLUdDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKy1BQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQorLWhhdmVfc3lzX3NkdF9oPW5vCistaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCistICBoYXZlX3N5c19zZHRfaD15ZXMKKy0gIEFDX0RFRklORShIQVZFX1NZU19TRFRfSCwgMSwKKy0gICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorLWZpCistQUNfTVNHX1JFU1VMVCgkaGF2ZV9zeXNfc2R0X2gpCisrI0dDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKysjQUNfTVNHX0NIRUNLSU5HKHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSkKKysjaGF2ZV9zeXNfc2R0X2g9bm8KKysjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisrIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCisrIyAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorKyMgICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorKyNmaQorKyNBQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKyAKKyAjIENoZWNrIGlmIFRGbW9kZSBsb25nIGRvdWJsZSBzaG91bGQgYmUgdXNlZCBieSBkZWZhdWx0IG9yIG5vdC4KKyAjIFNvbWUgZ2xpYmMgdGFyZ2V0cyB1c2VkIERGbW9kZSBsb25nIGRvdWJsZSwgYnV0IHdpdGggZ2xpYmMgMi40CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IDQ5NTNjOWYuLjUzYTExNDUgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMjA1NzgsMTEgKzIwNTc4LDExIEBAIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKyAKKy0gIGlmIHRlc3QgJGdsaWJjeHhfY3Zfc3lzX3NkdF9oID0geWVzOyB0aGVuCisrIyAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KKyAKKy0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKysjJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCisgCistICBmaQorKyMgIGZpCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3Zfc3lzX3NkdF9oIiA+JjUKKyAkYXNfZWNobyAiJGdsaWJjeHhfY3Zfc3lzX3NkdF9oIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlLmFjIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworaW5kZXggNzNkNDMwYS4uZjIxMzVlMiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKK0BAIC0yMTEsNyArMjExLDcgQEAgR0xJQkNYWF9DSEVDS19TQ19OUFJPQ0VTU09SU19PTkxOCisgR0xJQkNYWF9DSEVDS19TQ19OUFJPQ19PTkxOCisgR0xJQkNYWF9DSEVDS19QVEhSRUFEU19OVU1fUFJPQ0VTU09SU19OUAorIEdMSUJDWFhfQ0hFQ0tfU1lTQ1RMX0hXX05DUFUKKy1HTElCQ1hYX0NIRUNLX1NEVF9ICisrI0dMSUJDWFhfQ0hFQ0tfU0RUX0gKKyAKKyAjIENoZWNrIGZvciBhdmFpbGFibGUgaGVhZGVycy4KKyBBQ19DSEVDS19IRUFERVJTKFtlbmRpYW4uaCBleGVjaW5mby5oIGZsb2F0LmggZnAuaCBpZWVlZnAuaCBpbnR0eXBlcy5oIFwKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMyLWxpYnRvb2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMyLWxpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IzZDFiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzItbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDZjNzE1ZmNmYTI2MmFkYWRjYTgxYzY4YTFmM2Y2OWFhMzE4N2E1MDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyOToxMSArMDQwMAorU3ViamVjdDogW1BBVENIIDMyLzM1XSBsaWJ0b29sCisKK2xpYnN0ZGMrKyBmcm9tIGdjYy1ydW50aW1lIGdldHMgY3JlYXRlZCB3aXRoIC1ycGF0aD0vdXNyL2xpYi8uLi9saWIgZm9yIHFlbXV4ODYtNjQKK3doZW4gcnVubmluZyBvbiBhbSB4ODZfNjQgYnVpbGQgaG9zdC4KKworVGhpcyBwYXRjaCBzdG9wcyB0aGlzIHNwZWFkaW5nIHRvIGxpYmRpciBpbiB0aGUgbGlic3RkYysrLmxhIGZpbGUgd2l0aGluIGxpYnRvb2wuCitBcmd1YWJseSwgaXQgc2hvdWxkbid0IGJlIHBhc3NpbmcgdGhpcyBpbnRvIGxpYnRvb2wgaW4gdGhlIGZpcnN0IHBsYWNlIGJ1dAorZm9yIG5vdyB0aGlzIHJlc29sdmVzIHRoZSBuYXN0aWVzdCBwcm9ibGVtcyB0aGlzIGNhdXNlcy4KKworZnVuY19ub3JtYWxfYWJzcGF0aCB3b3VsZCByZXNvbHZlIGFuIGVtcHR5IHBhdGggdG8gYHB3ZGAgc28gd2UgbmVlZAordG8gZmlsdGVyIHRoZSB6ZXJvIGNhc2UuCisKK1JQIDIwMTIvOC8yNAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGx0bWFpbi5zaCB8ICAgIDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAoraW5kZXggYTAzNDMzZi4uNDZmNDdjMiAxMDA2NDQKKy0tLSBhL2x0bWFpbi5zaAorKysrIGIvbHRtYWluLnNoCitAQCAtNjM1OSw2ICs2MzU5LDEwIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgXGAtcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCisgCisgICAgICAgaW5zdGFsbF9saWJkaXI9IiQxIgorKyAgICAgIGlmIHRlc3QgLW4gIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KKysJZnVuY19ub3JtYWxfYWJzcGF0aCAiJGluc3RhbGxfbGliZGlyIgorKwlpbnN0YWxsX2xpYmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKKysgICAgICBmaQorIAorICAgICAgIG9sZGxpYnM9CisgICAgICAgaWYgdGVzdCAteiAiJHJwYXRoIjsgdGhlbgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk5OTg0ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzMtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaApAQCAtMCwwICsxLDQzIEBACitGcm9tIDk3ZTQ1OTFjMjAzMTA0MjVlN2FjYTBlNjcxMmE4ZDk0ODBlNzc0NGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTozMDozMiArMDQwMAorU3ViamVjdDogW1BBVENIIDMzLzM1XSBnY2M6IGFybXY0OiBwYXNzIGZpeC12NGJ4IHRvIGxpbmtlciB0byBzdXBwb3J0IEVBQkkuCisKK1RoZSBMSU5LX1NQRUMgZm9yIGxpbnV4IGdldHMgb3ZlcndyaXR0ZW4gYnkgbGludXgtZWFiaS5oIHdoaWNoCittZWFucyB0aGUgdmFsdWUgb2YgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgZ2V0cyBsb3N0IGFuZCBhcyBhIHJlc3VsdAordGhlIG9wdGlvbiBpcyBub3QgcGFzc2VkIHRvIGxpbmtlciB3aGVuIGNob3NpbmcgbWFyY2g9YXJtdjQKK1RoaXMgcGF0Y2ggcmVkZWZpbmVzIHRoaXMgaW4gbGludXgtZWFiaS5oIGFuZCByZWluc2VydHMgaXQKK2ZvciBlYWJpIGRlZmF1bHRpbmcgdG9vbGNoYWlucy4KKworV2UgbWlnaHQgd2FudCB0byBzZW5kIGl0IHVwc3RyZWFtLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCB8ICAgIDYgKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCitpbmRleCA4MGY0NTRkLi40ZGIzZWI5IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCisrKysgYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK0BAIC03NywxMCArNzcsMTQgQEAKKyAgICAgJXttZmxvYXQtYWJpPXNvZnQqOiIgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCAifSBcCisgICAgICV7IW1mbG9hdC1hYmk9KjoiIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgIn0iCisgCisrLyogRm9yIGFybXY0IHdlIHBhc3MgLS1maXgtdjRieCB0byBsaW5rZXIgdG8gc3VwcG9ydCBFQUJJICovCisrI3VuZGVmIFRBUkdFVF9GSVhfVjRCWF9TUEVDCisrI2RlZmluZSBUQVJHRVRfRklYX1Y0QlhfU1BFQyAiJXttY3B1PWFybTh8bWNwdT1hcm04MTB8bWNwdT1zdHJvbmdhcm0qfG1hcmNoPWFybXY0OiAtLWZpeC12NGJ4fSIKKysKKyAvKiBBdCB0aGlzIHBvaW50LCBicGFiaS5oIHdpbGwgaGF2ZSBjbG9iYmVyZWQgTElOS19TUEVDLiAgV2Ugd2FudCB0bworICAgIHVzZSB0aGUgR05VL0xpbnV4IHZlcnNpb24sIG5vdCB0aGUgZ2VuZXJpYyBCUEFCSSB2ZXJzaW9uLiAgKi8KKyAjdW5kZWYgIExJTktfU1BFQworLSNkZWZpbmUgTElOS19TUEVDIEJFOF9MSU5LX1NQRUMJCQkJCQlcCisrI2RlZmluZSBMSU5LX1NQRUMgQkU4X0xJTktfU1BFQyBUQVJHRVRfRklYX1Y0QlhfU1BFQwkJCVwKKyAgIExJTlVYX09SX0FORFJPSURfTEQgKExJTlVYX1RBUkdFVF9MSU5LX1NQRUMsCQkJCVwKKyAJCSAgICAgICBMSU5VWF9UQVJHRVRfTElOS19TUEVDICIgIiBBTkRST0lEX0xJTktfU1BFQykKKyAKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YjlmODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM0LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2gKQEAgLTAsMCArMSwxMDIgQEAKK0Zyb20gZmM1ZTRiZWFlYTg1NmEyYjQ4NmM3NzBhZDNhZGRjMGY1YmIzMTAwZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjMzOjA0ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzQvMzVdIFVzZSB0aGUgbXVsdGlsaWIgY29uZmlnIGZpbGVzIGZyb20gJHtCfSBpbnN0ZWFkIG9mCisgdXNpbmcgdGhlIG9uZXMgZnJvbSAke1N9CisKK1VzZSB0aGUgbXVsdGlsaWIgY29uZmlnIGZpbGVzIGZyb20gJHtCfSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBvbmVzIGZyb20gJHtTfQorc28gdGhhdCB0aGUgc291cmNlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBnY2MtY3Jvc3MtaW5pdGlhbCwKK2djYy1jcm9zcy1pbnRlcm1lZGlhdGUsIGdjYy1jcm9zcywgZ2NjLXJ1bnRpbWUsIGFuZCBhbHNvIHRoZSBzZGsgYnVpbGQuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIGdjYy9jb25maWd1cmUgICAgfCAgIDIyICsrKysrKysrKysrKysrKysrKy0tLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgICAyMiArKysrKysrKysrKysrKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDhiYzBjOTguLjNjZDA4MTcgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMTE1MTksMTAgKzExNTE5LDIwIEBAIGRvbmUKKyB0bWFrZV9maWxlXz0KKyBmb3IgZiBpbiAke3RtYWtlX2ZpbGV9CisgZG8KKy0JaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCistCXRoZW4KKy0JCXRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKy0JZmkKKysgIGNhc2UgJGYgaW4KKysgICAgKi90LWxpbnV4NjQgKQorKyAgICAgICBpZiB0ZXN0IC1mIC4vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gLi9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICogKQorKyAgICAgICBpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgIGVzYWMKKyBkb25lCisgdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlX30iCisgCitAQCAtMTE1MzMsNiArMTE1NDMsMTAgQEAgdG1fZmlsZV9saXN0PSJvcHRpb25zLmgiCisgdG1faW5jbHVkZV9saXN0PSJvcHRpb25zLmggaW5zbi1jb25zdGFudHMuaCIKKyBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgIGNhc2UgJGYgaW4KKysgICAgKi9saW51eDY0LmggKQorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIDs7CisgICAgIC4vKiApCisgICAgICAgIGY9YGVjaG8gJGYgfCBzZWQgJ3MvXi4uLy8nYAorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAkZiIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggNWU1ZTg0Zi4uNDE1YTZkZiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC0xNzAwLDEwICsxNzAwLDIwIEBAIGRvbmUKKyB0bWFrZV9maWxlXz0KKyBmb3IgZiBpbiAke3RtYWtlX2ZpbGV9CisgZG8KKy0JaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCistCXRoZW4KKy0JCXRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKy0JZmkKKysgIGNhc2UgJGYgaW4KKysgICAgKi90LWxpbnV4NjQgKQorKyAgICAgICBpZiB0ZXN0IC1mIC4vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gLi9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICogKQorKyAgICAgICBpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgIGVzYWMKKyBkb25lCisgdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlX30iCisgCitAQCAtMTcxNCw2ICsxNzI0LDEwIEBAIHRtX2ZpbGVfbGlzdD0ib3B0aW9ucy5oIgorIHRtX2luY2x1ZGVfbGlzdD0ib3B0aW9ucy5oIGluc24tY29uc3RhbnRzLmgiCisgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICBjYXNlICRmIGluCisrICAgICovbGludXg2NC5oICkKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICA7OworICAgICAuLyogKQorICAgICAgICBmPWBlY2hvICRmIHwgc2VkICdzL14uLi8vJ2AKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gJGYiCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzUtd2Nhc3QtcXVhbC1QUi01NTM4My5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzUtd2Nhc3QtcXVhbC1QUi01NTM4My5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTRjZjRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzNS13Y2FzdC1xdWFsLVBSLTU1MzgzLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0Zyb20gZGVmZmRiMGIyNDk3YTEwNjA2MWQzZWEyYzZhM2ZlZjRmYmEzNDQ1ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjM5OjUxICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzUvMzVdIHdjYXN0LXF1YWwgUFIvNTUzODMKKworVGhpcyBpcyBhIGJhY2twb3J0IGZyb20gZ2NjIGJ1Z3ppbGxhCisKK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTUzODMKKworVGhpcyBjb21taXQgZml4ZXMgYSB3cm9uZyB3YXJuaW5nIGJlaGF2aW9yLiBUaGlzIGJ1ZyB3aGljaCBoYXMgbm8KK3dvcmthcm91bmQgb3RoZXIgdGhhbiBkaXNhYmxpbmcgdGhlIHdhcm5pbmcuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKy0tLQorIGdjYy9jL2MtdHlwZWNrLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQorIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL1djYXN0LXF1YWwtMS5jIHwgICAgNiArKystLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jL2MtdHlwZWNrLmMgYi9nY2MvYy9jLXR5cGVjay5jCitpbmRleCBkZGI2ZDM5Li5jNjI0MTIwIDEwMDY0NAorLS0tIGEvZ2NjL2MvYy10eXBlY2suYworKysrIGIvZ2NjL2MvYy10eXBlY2suYworQEAgLTQ0NjQsNyArNDQ2NCw3IEBAIGhhbmRsZV93YXJuX2Nhc3RfcXVhbCAobG9jYXRpb25fdCBsb2MsIHRyZWUgdHlwZSwgdHJlZSBvdHlwZSkKKyAgICAgLyogVGhlcmUgYXJlIHF1YWxpZmllcnMgcHJlc2VudCBpbiBJTl9PVFlQRSB0aGF0IGFyZSBub3QgcHJlc2VudAorICAgICAgICBpbiBJTl9UWVBFLiAgKi8KKyAgICAgd2FybmluZ19hdCAobG9jLCBPUFRfV2Nhc3RfcXVhbCwKKy0JCSJjYXN0IGRpc2NhcmRzICVxI3YgcXVhbGlmaWVyIGZyb20gcG9pbnRlciB0YXJnZXQgdHlwZSIsCisrCQkiY2FzdCBkaXNjYXJkcyAlcXYgcXVhbGlmaWVyIGZyb20gcG9pbnRlciB0YXJnZXQgdHlwZSIsCisgCQlkaXNjYXJkZWQpOworIAorICAgaWYgKGFkZGVkIHx8IGRpc2NhcmRlZCkKK2RpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9XY2FzdC1xdWFsLTEuYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL1djYXN0LXF1YWwtMS5jCitpbmRleCA2NDBlNGYwLi41NjM4MmM3IDEwMDY0NAorLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vV2Nhc3QtcXVhbC0xLmMKKysrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL1djYXN0LXF1YWwtMS5jCitAQCAtODUsMTEgKzg1LDExIEBAIGYzICh2b2lkICoqKmJhcikKKyB2b2lkCisgZjQgKHZvaWQgKiBjb25zdCAqKmJhcikKKyB7CistICBjb25zdCB2b2lkICoqKnA5ID0gKGNvbnN0IHZvaWQgKioqKSBiYXI7IC8qIHsgZGctd2FybmluZyAiY2FzdCIgfSAqLworKyAgY29uc3Qgdm9pZCAqKipwOSA9IChjb25zdCB2b2lkICoqKikgYmFyOyAvKiB7IGRnLXdhcm5pbmcgImNhc3QgZGlzY2FyZHMgLmNvbnN0LiBxdWFsaWZpZXIiIH0gKi8KKyAgIHZvaWQgKiBjb25zdCAqKnAxMSA9ICh2b2lkICogY29uc3QgKiopIGJhcjsKKy0gIHZvaWQgKiogY29uc3QgKnAxMyA9ICh2b2lkICoqIGNvbnN0ICopIGJhcjsgLyogeyBkZy13YXJuaW5nICJjYXN0IiB9ICovCisrICB2b2lkICoqIGNvbnN0ICpwMTMgPSAodm9pZCAqKiBjb25zdCAqKSBiYXI7IC8qIHsgZGctd2FybmluZyAiY2FzdCBkaXNjYXJkcyAuY29uc3QuIHF1YWxpZmllciIgfSAqLworICAgY29uc3Qgdm9pZCAqIGNvbnN0ICoqcDE1ID0gKGNvbnN0IHZvaWQgKiBjb25zdCAqKikgYmFyOyAvKiB7IGRnLXdhcm5pbmcgImNhc3QiIH0gKi8KKy0gIGNvbnN0IHZvaWQgKiogY29uc3QgKnAxNyA9IChjb25zdCB2b2lkICoqIGNvbnN0ICopIGJhcjsgLyogeyBkZy13YXJuaW5nICJjYXN0IiB9ICovCisrICBjb25zdCB2b2lkICoqIGNvbnN0ICpwMTcgPSAoY29uc3Qgdm9pZCAqKiBjb25zdCAqKSBiYXI7IC8qIHsgZGctd2FybmluZyAiY2FzdCBkaXNjYXJkcyAuY29uc3QuIHF1YWxpZmllciIgfSAqLworICAgdm9pZCAqIGNvbnN0ICogY29uc3QgKiBwMTkgPSAodm9pZCAqIGNvbnN0ICogY29uc3QgKikgYmFyOworICAgY29uc3Qgdm9pZCAqIGNvbnN0ICogY29uc3QgKnAyMSA9IChjb25zdCB2b2lkICogY29uc3QgKiBjb25zdCAqKSBiYXI7CisgfQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM4LWdjYy00LjgtYnVpbGQtYXJncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzgtZ2NjLTQuOC1idWlsZC1hcmdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjODI5MGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM4LWdjYy00LjgtYnVpbGQtYXJncy5wYXRjaApAQCAtMCwwICsxLDY0IEBACitXaGVuIGNyb3NzIGNvbXBpbGluZyBhIHRhcmdldCBnY2MsIHRhcmdldCBmbGFncyBtYXkgYmUgdXNlZCBvbiB0aGUgaG9zdAorCitDb25maWd1cmUgaWRlbnRpZmllcyBhIG51bWJlciBvZiB3YXJuaW5nIGZsYWdzIChXQVJOX0NGTEFHUyBhbmQKK1dBUk5fQ1hYRkxBR1MpIGZyb20gdGhlICRDQyB2YWx1ZS4gIFRoZSBjcm9zcyBjb21waWxlciBtYXkgYmUgZGlmZmVyZW50Citmcm9tIHRoZSBob3N0IGNvbXBpbGVyIGFuZCBtYXkgbm90IHN1cHBvcnQgdGhlIHNhbWUgc2V0IG9mIGZsYWdzLiAgVGhpcworbGVhZHMgdG8gcHJvYmxlbXMgc3VjaCBhczoKKworY2MxcGx1czogZXJyb3I6IHVucmVjb2duaXplZCBjb21tYW5kIGxpbmUgb3B0aW9uICItV25vLW5hcnJvd2luZyIKK2NjMXBsdXM6IGVycm9yOiB1bnJlY29nbml6ZWQgY29tbWFuZCBsaW5lIG9wdGlvbiAiLVduby1vdmVybGVuZ3RoLXN0cmluZ3MiCisKK1dvcmsgYXJvdW5kIHRoaXMgcHJvYmxlbSBieSByZW1vdmluZyB0aGUgd2FybmluZyBmbGFncyBmcm9tIHRoZQorQlVJTERfQ1hYRkxBR1MgdmFsdWUsIGluIGEgd2F5IHNpbWlsYXIgdG8gdGhlIEJVSUxEX0NGTEFHUy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZ3VyZQorKysrIGdjYy00LjguNC9nY2MvY29uZmlndXJlCitAQCAtMTc4NjQsNyArMTc4NjQsNyBAQCBlbHNlCisgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0jbGluZSAxNzg1MyAiY29uZmlndXJlIgorKyNsaW5lIDE3ODY3ICJjb25maWd1cmUiCisgI2luY2x1ZGUgImNvbmZkZWZzLmgiCisgCisgI2lmIEhBVkVfRExGQ05fSAorQEAgLTE3OTcwLDcgKzE3OTcwLDcgQEAgZWxzZQorICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCistI2xpbmUgMTc5NTkgImNvbmZpZ3VyZSIKKysjbGluZSAxNzk3MyAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0yNjkxOCwxOCArMjY5MTgsMTUgQEAgJGFzX2VjaG8gIiNkZWZpbmUgVEFSR0VUX0xJQkNfUFJPVklERVNfUworIGZpCisgCisgIyBUZXN0IGZvciA8c3lzL3NkdC5oPiBvbiB0aGUgdGFyZ2V0LgorLQorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5IiA+JjUKKy0kYXNfZWNob19uICJjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkuLi4gIiA+JjY7IH0KKy1oYXZlX3N5c19zZHRfaD1ubworKyNHQ0NfVEFSR0VUX1RFTVBMQVRFKFtIQVZFX1NZU19TRFRfSF0pCisrI0FDX01TR19DSEVDS0lORyhzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkpCisrI2hhdmVfc3lzX3NkdF9oPW5vCisgI2lmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorICMgIGhhdmVfc3lzX3NkdF9oPXllcworLSMKKy0jJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCistIworKyMgIEFDX0RFRklORShIQVZFX1NZU19TRFRfSCwgMSwKKysjICAgICAgICAgICAgW0RlZmluZSBpZiB5b3VyIHRhcmdldCBDIGxpYnJhcnkgcHJvdmlkZXMgc3lzL3NkdC5oXSkKKyAjZmkKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfc3lzX3NkdF9oIiA+JjUKKy0kYXNfZWNobyAiJGhhdmVfc3lzX3NkdF9oIiA+JjY7IH0KKysjQUNfTVNHX1JFU1VMVCgkaGF2ZV9zeXNfc2R0X2gpCisgCisgIyBDaGVjayBpZiBURm1vZGUgbG9uZyBkb3VibGUgc2hvdWxkIGJlIHVzZWQgYnkgZGVmYXVsdCBvciBub3QuCisgIyBTb21lIGdsaWJjIHRhcmdldHMgdXNlZCBERm1vZGUgbG9uZyBkb3VibGUsIGJ1dCB3aXRoIGdsaWJjIDIuNApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQwLWZpeC1nKystc3lzcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTBhYTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorUG9ydGlvbnMgb2YKKworaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL2djYy1wYXRjaGVzQGdjYy5nbnUub3JnL21zZzI2MDEzLmh0bWwKKworYXJlIG5vdCB1cHN0cmVhbWVkIHlldC4gU28gbGV0cyBrZWVwIG1pc3NpbmcgcGllY2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGdjYy00LjguMS9nY2MvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYwkyMDEzLTA3LTE1IDE1OjU1OjQ5LjQ4ODM5OTEzMiAtMDcwMAorKysrIGdjYy00LjguMS9nY2MvY29uZmlndXJlLmFjCTIwMTMtMDctMTUgMTY6MDI6MzEuNzcyNDA2Njc5IC0wNzAwCitAQCAtMTQ4LDcgKzE0OCw5IEBACisgaWYgdGVzdCAiJHt3aXRoX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGdjY19neHhfd2l0aG91dF9zeXNyb290PWBleHByICIke2djY19neHhfaW5jbHVkZV9kaXJ9IiA6ICIke3dpdGhfc3lzcm9vdH0iJ1woLipcKSdgCisgICBpZiB0ZXN0ICIke2djY19neHhfd2l0aG91dF9zeXNyb290fSI7IHRoZW4KKy0gICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGlmIHRlc3QgeCR7d2l0aF9zeXNyb290fSAhPSB4LzsgdGhlbgorKyAgICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBmaQorICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290PTEKKyAgIGZpCisgZmkKK0luZGV4OiBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9jb25maWd1cmUJMjAxMy0wNy0xNSAxNTo1NTo0OS40NzIzOTkxMzIgLTA3MDAKKysrKyBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZQkyMDEzLTA3LTE1IDE2OjAyOjMxLjc4MDQwNjY4MCAtMDcwMAorQEAgLTMzMjUsNyArMzMyNSw5IEBACisgaWYgdGVzdCAiJHt3aXRoX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGdjY19neHhfd2l0aG91dF9zeXNyb290PWBleHByICIke2djY19neHhfaW5jbHVkZV9kaXJ9IiA6ICIke3dpdGhfc3lzcm9vdH0iJ1woLipcKSdgCisgICBpZiB0ZXN0ICIke2djY19neHhfd2l0aG91dF9zeXNyb290fSI7IHRoZW4KKy0gICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGlmIHRlc3QgeCR7d2l0aF9zeXNyb290fSAhPSB4LzsgdGhlbgorKyAgICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBmaQorICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290PTEKKyAgIGZpCisgZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQxLWxpYnRvb2wtYXZvaWQtbGliZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZDk2MTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQxLWxpYnRvb2wtYXZvaWQtbGliZGlyLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0F2b2lkIHVzaW5nIGxpYmRpciBmcm9tIC5sYSB3aGljaCB1c3VhbGx5IHBvaW50cyB0byBhIGhvc3QgcGF0aAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCBhMDM0MzNmLi4xOTAyYTkwIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC01NjI4LDYgKzU2MjgsOSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorIAkgIGVsc2UKKysJICAgICMgSW5zdGVhZCBvZiB1c2luZyBsaWJkaXIgZnJvbSAubGEgd2hpY2ggdXN1YWxseSBwb2ludHMgdG8gYSBob3N0IHBhdGgsCisrCSAgICAjIHVzZSB0aGUgcGF0aCB0aGUgLmxhIGlzIGNvbnRhaW5lZCBpbi4KKysJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKyAJICAgIGRpcj0iJGxpYmRpciIKKyAJICAgIGFic2Rpcj0iJGxpYmRpciIKKyAJICBmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Mi1wcjU3NzQ4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Mi1wcjU3NzQ4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNTZmNzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQyLXByNTc3NDgucGF0Y2gKQEAgLTAsMCArMSw3OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWoKKworMjAxMy0wOC0wMSAgTWFydGluIEphbWJvciAgPG1qYW1ib3JAc3VzZS5jej4KKworCVBSIG1pZGRsZS1lbmQvNTc3NDgKKwkqIHN0b3ItbGF5b3V0LmMgKGNvbXB1dGVfcmVjb3JkX21vZGUpOiBUcmVhdCB6ZXJvLXNpemVkIGFycmF5IGZpZWxkcworCWxpa2UgaW5jb21wbGV0ZSB0eXBlcy4KKwordGVzdHN1aXRlLworCSogZ2NjLmRnL3RvcnR1cmUvcHI1Nzc0OC5jOiBOZXcgdGVzdC4KKworCitJbmRleDogZ2NjLTQuOC4xL2djYy9zdG9yLWxheW91dC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL3N0b3ItbGF5b3V0LmMJMjAxMy0wNC0yOCAxMDoyOToxOC4wMDAwMDAwMDAgLTA3MDAKKysrKyBnY2MtNC44LjEvZ2NjL3N0b3ItbGF5b3V0LmMJMjAxMy0wOC0wMSAxNTowMjowOC4wMTgwMDYxMjUgLTA3MDAKK0BAIC0xNjE4LDcgKzE2MTgsOSBAQAorIAkJICAgJiYgaW50ZWdlcl96ZXJvcCAoVFlQRV9TSVpFIChUUkVFX1RZUEUgKGZpZWxkKSkpKSkKKyAJICB8fCAhIGhvc3RfaW50ZWdlcnAgKGJpdF9wb3NpdGlvbiAoZmllbGQpLCAxKQorIAkgIHx8IERFQ0xfU0laRSAoZmllbGQpID09IDAKKy0JICB8fCAhIGhvc3RfaW50ZWdlcnAgKERFQ0xfU0laRSAoZmllbGQpLCAxKSkKKysJICB8fCAhIGhvc3RfaW50ZWdlcnAgKERFQ0xfU0laRSAoZmllbGQpLCAxKQorKwkgIHx8IChUUkVFX0NPREUgKFRSRUVfVFlQRSAoZmllbGQpKSA9PSBBUlJBWV9UWVBFCisrCSAgICAgICYmIHRyZWVfbG93X2NzdCAoREVDTF9TSVpFIChmaWVsZCksIDEpID09IDApKQorIAlyZXR1cm47CisgCisgICAgICAgLyogSWYgdGhpcyBmaWVsZCBpcyB0aGUgd2hvbGUgc3RydWN0LCByZW1lbWJlciBpdHMgbW9kZSBzbworSW5kZXg6IGdjYy00LjguMS9nY2MvdGVzdHN1aXRlL2djYy5kZy90b3J0dXJlL3ByNTc3NDguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9nY2MvdGVzdHN1aXRlL2djYy5kZy90b3J0dXJlL3ByNTc3NDguYwkyMDEzLTA4LTAxIDE1OjAyOjA4LjA2MjAwNjEyNiAtMDcwMAorQEAgLTAsMCArMSw0NSBAQAorKy8qIFBSIG1pZGRsZS1lbmQvNTc3NDggKi8KKysvKiB7IGRnLWRvIHJ1biB9ICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworK2V4dGVybiB2b2lkIGFib3J0ICh2b2lkKTsKKysKKyt0eXBlZGVmIGxvbmcgbG9uZyBWCisrICBfX2F0dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDIgKiBzaXplb2YgKGxvbmcgbG9uZykpLCBtYXlfYWxpYXMpKTsKKysKKyt0eXBlZGVmIHN0cnVjdCBTIHsgViBhOyBWIGJbMF07IH0gUCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkICgxKSkpOworKworK3N0cnVjdCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBUIHsgY2hhciBjOyBQIHM7IH07CisrCisrdm9pZCBfX2F0dHJpYnV0ZV9fKChub2lubGluZSwgbm9jbG9uZSkpCisrY2hlY2sgKHN0cnVjdCBUICp0KQorK3sKKysgIGlmICh0LT5zLmJbMF1bMF0gIT0gMyB8fCB0LT5zLmJbMF1bMV0gIT0gNCkKKysgICAgYWJvcnQgKCk7CisrfQorKworK2ludCBfX2F0dHJpYnV0ZV9fKChub2lubGluZSwgbm9jbG9uZSkpCisrZ2V0X2kgKHZvaWQpCisreworKyAgcmV0dXJuIDA7CisrfQorKworK3ZvaWQgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUsIG5vY2xvbmUpKQorK2ZvbyAoUCAqcCkKKyt7CisrICBWIGEgPSB7IDMsIDQgfTsKKysgIGludCBpID0gZ2V0X2koKTsKKysgIHAtPmJbaV0gPSBhOworK30KKysKKytpbnQKKyttYWluICgpCisreworKyAgc3RydWN0IFQgKnQgPSAoc3RydWN0IFQgKikgbWFsbG9jICgxMjgpOworKworKyAgZm9vICgmdC0+cyk7CisrICBjaGVjayAodCk7CisrCisrICByZXR1cm4gMDsKKyt9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQzLWNwcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDMtY3BwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZjg2NDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQzLWNwcC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitUaGUgT0UgZW52aXJvbm1lbnQgc2V0cyBhbmQgZXhwb3J0cyBDUFAgYXMgYmVpbmcgdGhlIHRhcmdldCBnY2MuIFdoZW4gYnVpbGRpbmcgCitnY2MtY3Jvc3MtY2FuYWRpYW4gZm9yIGEgbWluZ3cgdGFyZ2V0dGVkIHNkaywgdGhlIGZvbGxvd2luZyBjYW4gYmUgZm91bmQgaW4KK2J1aWxkLng4Nl82NC1wb2t5c2RrLW1pbmd3MzIuaTU4Ni1wb2t5LWxpbnV4L2J1aWxkLXg4Nl82NC1saW51eC9saWJpYmVydHkvY29uZmlnLmxvZzoKKworY29uZmlndXJlOjM2NDE6IGNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzCitjb25maWd1cmU6MzY2NjogZ2NjICAtYyAtaXN5c3RlbS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAgY29uZnRlc3QuYyA+JjUKK2NvbmZpZ3VyZTozNjY2OiAkPyA9IDAKK2NvbmZpZ3VyZTozNjk4OiByZXN1bHQ6IG5vCitjb25maWd1cmU6Mzc4NjogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IKK2NvbmZpZ3VyZTozODU2OiByZXN1bHQ6IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjIC1FIC0tc3lzcm9vdD0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1uYXRpdmVzZGstbWluZ3czMi1wb2t5c2RrLW1pbmd3MzIKK2NvbmZpZ3VyZTozODc2OiB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYyAtRSAtLXN5c3Jvb3Q9L21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbmF0aXZlc2RrLW1pbmd3MzItcG9reXNkay1taW5ndzMyICBjb25mdGVzdC5jCitjb25maWd1cmU6Mzg3NjogJD8gPSAwCisKK05vdGUgdGhpcyBpcyBhICpidWlsZCogdGFyZ2V0IChpbiBidWlsZC14ODZfNjQtbGludXgpIHNvIGl0IHNob3VsZCBiZSB1c2luZyAKK3RoZSBob3N0ICJnY2MiLCBub3QgeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MuIFNpbmNlIHRoZSBtaW5ndzMyIGhlYWRlcnMgYXJlIAordmVyeSBkaWZmZXJlbnQsIHVzaW5nIHRoZSB3cm9uZyBjcHAgaXMgYSByZWFsIHByb2JsZW0uIEl0IGlzIGxlYWtpbmcgaW50byAKK2NvbmZpZ3VyZSB0aHJvdWdoIHRoZSBDUFAgdmFyaWFibGUuIFVsdGltYXRlbHkgdGhpcyBsZWFkcyB0byBidWlsZCBmYWlsdXJlcyAKK3JlbGF0ZWQgdG8gbm90IGJlaW5nIGFibGUgdG8gaW5jbHVkZSBhIHByb2Nlc3MuaCBmaWxlIGZvciBwZW0tdW5peC5jLgorCitUaGUgZml4IGlzIHRvIGVuc3VyZSB3ZSBleHBvcnQgYSBzYW5lIENQUCB2YWx1ZSBpbnRvIHRoZSBidWlsZCBlbnZpcm9ubWVudCB3aGVuCit1c2luZyBidWlsZCB0YXJnZXRzLiBXZSBjb3VsZCBkZWZpbmUgYSBDUFBfRk9SX0JVSUxEIHZhbHVlIHdoaWNoIG1heSBiZSB0aGUgdmVyc2lvbgord2hpY2ggbmVlZHMgdG8gYmUgdXBzdHJlYW1lZCBidXQgZm9yIG5vdywgdGhpcyBmaXggaXMgZ29vZCBlbm91Z2ggdG8gYXZvaWQgdGhlIAorcHJvYmxlbS4KKworUlAgMjIvMDgvMjAxMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdjYy00LjguMS9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL01ha2VmaWxlLmluCTIwMTMtMDMtMzAgMTE6MjU6MDMuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL01ha2VmaWxlLmluCTIwMTMtMDgtMTMgMTI6MDM6MTcuMTUxOTg4ODgyICswMDAwCitAQCAtMTQ5LDYgKzE0OSw3IEBACisgCUFSPSIkKEFSX0ZPUl9CVUlMRCkiOyBleHBvcnQgQVI7IFwKKyAJQVM9IiQoQVNfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUzsgXAorIAlDQz0iJChDQ19GT1JfQlVJTEQpIjsgZXhwb3J0IENDOyBcCisrCUNQUD0iJChDQ19GT1JfQlVJTEQpIC1FIjsgZXhwb3J0IENQUDsgXAorIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0ZMQUdTOyBcCisgCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCisgCUNYWD0iJChDWFhfRk9SX0JVSUxEKSI7IGV4cG9ydCBDWFg7IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDQtZ2VuZ3R5cGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0NC1nZW5ndHlwZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM4NzYxZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDQtZ2VuZ3R5cGVzLnBhdGNoCkBAIC0wLDAgKzEsOTcgQEAKK2dlbmd0eXBlIGlzIGdlbmVyYXRlZCBmb3IgYm90aCB0aGUgYnVpbGQgc3lzdGVtIGFuZCB0aGUgdGFyZ2V0LiAtREdFTkVSQVRPUl9GSUxFCit3YXMgYWRkZWQgaW4gdGhlIHBhdGNoIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDEyLTA3L21zZzAwMjczLmh0bWwKK2FuZCB3YXMgYXBwbGllZCB0byBib3RoIHZlcnNpb25zIG9mIGdlbmd0eXBlLgorCitVbmZvcnR1bmF0ZWx5IHRoZSBwcmVzZW5jZSBvZiB0aGlzIGZsYWcgdHJpZ2dlcnMgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gKGJjb25maWcuaCkgCit0byBiZSBpbmNsdWRlZCBmb3IgdGhlIHRhcmdldCBidWlsZCBvZiBnZW5ndHlwZS4gQ29tcGlsaW5nIGdlbmd0eXBlIHdpdGggdGhlIHRhcmdldCAKK2NvbXBpbGVyIGFuZCBiY29uZmlnLmggY2FuIHJlc3VsdCBpbiBlcnJvcnMgaWYgdGhlIGJ1aWxkIGFuZCB0YXJnZXQgc3lzdGVtcyBhcmUgCitkaXNzaW1pbGFyLiBBbiBleGFtcGxlIGNhc2UgdGhpcyBmYWlscyBpcyBjcm9zcyBjb21waWxpbmcgZ2NjIG9uIGxpbnV4IGZvciBhIGRhcndpbiAKK3RhcmdldCBzeXN0ZW06CisKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmstc2hhcmVkL2djYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2dlbmd0eXBlLXBhcnNlLmM6MjU6MDoKK3wgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrLXNoYXJlZC9nY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9nZW5ndHlwZS1wYXJzZS5jOiBJbiBmdW5jdGlvbiAndm9pZCBwYXJzZV9lcnJvcihjb25zdCBjaGFyKiwgLi4uKSc6Cit8IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay1zaGFyZWQvZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2Mvc3lzdGVtLmg6OTM6NTM6IGVycm9yOiAnZnB1dGNfdW5sb2NrZWQnIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZQorfCAgIyAgZGVmaW5lIGZwdXRjKEMsIFN0cmVhbSkgZnB1dGNfdW5sb2NrZWQgKEMsIFN0cmVhbSkKKword2hpY2ggb2NjdXJzIHNpbmNlIGF1dG8tYnVpbGQuaCBhbmQgYXV0by1ob3N0LmggaGF2ZSBkaWZmZXJuZXQgdmFsdWVzIG9mCitIQVZFX0ZQVVRDX1VOTE9DS0VEOgorCisjZGVmaW5lIEhBVkVfRlBVVENfVU5MT0NLRUQgMQorLyogI3VuZGVmIEhBVkVfRlBVVFNfVU5MT0NLRUQgKi8KKworVGhlIG9idmlvdXMgZml4IGlzIHRvIG9ubHkgaW5jbHVkZSB0aGUgZmxhZyBvbiBidWlsZC8gdGFyZ2V0cyB3aGljaCB0aGlzIHBhdGNoIGRvZXMsIGhvd2V2ZXIgCit0aGlzIGFsc28gbGVhZHMgdG8gY29tcGlsZSBlcnJvcnMgZHVlIHRvIGNvbnN0X3RyZWUgYmVpbmcgdW5kZWZpbmVkIGJ1dCB1c2VkIGluIGRvdWJsZV9pbnQuaAorCitJIGFkZGVkIGEgR0VORVJBVE9SX0ZJTEUyIGZsYWcgdG8gd29ya2Fyb3VuZCB0aG9zZSBpbiB0aGUgCit0YXJnZXQgY2FzZSBhbmQgYWxsb3cgdGhlIGJ1aWxkIHRvIHN1Y2NlZWQuCisKK09ubHkgdGhlIGJ1aWxkL2dlbmd0eXBlcyBzaG91bGQgaGF2ZSB0aGUgLURHRU5FUkFUT1JfRklMRSAKKworUlAgMjIvOC8yMDEzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2NjLTQuOC4xL2djYy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9NYWtlZmlsZS5pbgkyMDEzLTA4LTE5IDExOjQwOjM2Ljg0NDAxNDQyNCArMDAwMAorKysrIGdjYy00LjguMS9nY2MvTWFrZWZpbGUuaW4JMjAxMy0wOC0xOSAxMTo0MDozNy43ODQwMTQ0MDIgKzAwMDAKK0BAIC0zOTAzLDI3ICszOTAzLDI5IEBACisgCisgZ2VuZ3R5cGUtbGV4Lm8gYnVpbGQvZ2VuZ3R5cGUtbGV4Lm8gOiBnZW5ndHlwZS1sZXguYyBnZW5ndHlwZS5oICQoU1lTVEVNX0gpCisgZ2VuZ3R5cGUtbGV4Lm86ICQoQ09ORklHX0gpICQoQkNPTkZJR19IKQorLUNGTEFHUy1nZW5ndHlwZS1sZXgubyArPSAtREdFTkVSQVRPUl9GSUxFCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLWxleC5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKyBidWlsZC9nZW5ndHlwZS1sZXgubzogJChCQ09ORklHX0gpCisgCisgZ2VuZ3R5cGUtcGFyc2UubyBidWlsZC9nZW5ndHlwZS1wYXJzZS5vIDogZ2VuZ3R5cGUtcGFyc2UuYyBnZW5ndHlwZS5oIFwKKyAgICQoU1lTVEVNX0gpCisgZ2VuZ3R5cGUtcGFyc2UubzogJChDT05GSUdfSCkKKy1DRkxBR1MtZ2VuZ3R5cGUtcGFyc2UubyArPSAtREdFTkVSQVRPUl9GSUxFCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLXBhcnNlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLXBhcnNlLm86ICQoQkNPTkZJR19IKQorIAorIGdlbmd0eXBlLXN0YXRlLm8gYnVpbGQvZ2VuZ3R5cGUtc3RhdGUubzogZ2VuZ3R5cGUtc3RhdGUuYyAkKFNZU1RFTV9IKSBcCisgICBnZW5ndHlwZS5oIGVycm9ycy5oIGRvdWJsZS1pbnQuaCB2ZXJzaW9uLmggJChIQVNIVEFCX0gpICQoT0JTVEFDS19IKSBcCisgICAkKFhSRUdFWF9IKQorIGdlbmd0eXBlLXN0YXRlLm86ICQoQ09ORklHX0gpCistQ0ZMQUdTLWdlbmd0eXBlLXN0YXRlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorK0NGTEFHUy1nZW5ndHlwZS1zdGF0ZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUyCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLXN0YXRlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLXN0YXRlLm86ICQoQkNPTkZJR19IKQorIAorIGdlbmd0eXBlLm8gYnVpbGQvZ2VuZ3R5cGUubyA6IGdlbmd0eXBlLmMgJChTWVNURU1fSCkgZ2VuZ3R5cGUuaCAJXAorICAgcnRsLmRlZiBpbnNuLW5vdGVzLmRlZiBlcnJvcnMuaCBkb3VibGUtaW50LmggdmVyc2lvbi5oICQoSEFTSFRBQl9IKSBcCisgICAkKE9CU1RBQ0tfSCkgJChYUkVHRVhfSCkKKyBnZW5ndHlwZS5vOiAkKENPTkZJR19IKQorLUNGTEFHUy1nZW5ndHlwZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKytDRkxBR1MtZ2VuZ3R5cGUubyArPSAtREdFTkVSQVRPUl9GSUxFMgorK0NGTEFHUy1idWlsZC9nZW5ndHlwZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKyBidWlsZC9nZW5ndHlwZS5vOiAkKEJDT05GSUdfSCkKKyAKKyBidWlsZC9nZW5tZGRlcHMubzogZ2VubWRkZXBzLmMgJChCQ09ORklHX0gpICQoU1lTVEVNX0gpIGNvcmV0eXBlcy5oCVwKK0BAIC0zOTg4LDcgKzM5OTAsNyBAQAorICMgYW55IHN5c3RlbSBoZWFkZXIgaXMgaW5jbHVkZWQuCisgZ2VuZ3R5cGUtbGV4LmMgOiBnZW5ndHlwZS1sZXgubAorIAktJChGTEVYKSAkKEZMRVhGTEFHUykgLW8kQCAkPCAmJiB7IFwKKy0JICBlY2hvICcjaW5jbHVkZSAiYmNvbmZpZy5oIicgPiAkQC50bXA7IFwKKysJICBlY2hvICcnID4gJEAudG1wOyBcCisgCSAgY2F0ICRAID4+ICRALnRtcDsgXAorIAkgIG12ICRALnRtcCAkQDsgXAorIAl9CitJbmRleDogZ2NjLTQuOC4xL2djYy9kb3VibGUtaW50LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvZG91YmxlLWludC5oCTIwMTMtMDEtMzAgMTE6MDQ6MzAuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2djYy9kb3VibGUtaW50LmgJMjAxMy0wOC0xOSAxMTo0MTo1MS41NjQwMTI3MTkgKzAwMDAKK0BAIC00NDgsMTAgKzQ0OCwxMiBAQAorIAorIAorICNpZm5kZWYgR0VORVJBVE9SX0ZJTEUKKysjaWZuZGVmIEdFTkVSQVRPUl9GSUxFMgorIC8qIENvbnZlcnNpb24gdG8gYW5kIGZyb20gR01QIGludGVnZXIgcmVwcmVzZW50YXRpb25zLiAgKi8KKyAKKyB2b2lkIG1wel9zZXRfZG91YmxlX2ludCAobXB6X3QsIGRvdWJsZV9pbnQsIGJvb2wpOworIGRvdWJsZV9pbnQgbXB6X2dldF9kb3VibGVfaW50IChjb25zdF90cmVlLCBtcHpfdCwgYm9vbCk7CisgI2VuZGlmCisrI2VuZGlmCisgCisgI2VuZGlmIC8qIERPVUJMRV9JTlRfSCAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQ2LWxpYmF0b21pYy1kZXB0cmFja2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWE0ZjQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorZ2NjIDQuOCB3b24ndCBidWlsZCB3aXRoIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIHNpbmNlIHRoZSAqLlBwbyBmaWxlcworZG9uJ3QgZ2V0IGNyZWF0ZWQgdW5sZXNzIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgaXMgdHJ1ZS4KKworVGhpcyBwYXRjaCBlbnN1cmVzIHdlIG9ubHkgdXNlIHRob3NlIGNvbXBpbGVyIG9wdGlvbnMgd2hlbiBpdHMgZW5hYmxlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworKFByb2JsZW0gd2FzIGFscmVhZHkgcmVwb3J0ZWQgdXBzdHJlYW0sIGF0dGFjaGVkIHRoaXMgcGF0Y2ggdGhlcmUKK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTU5MzApCisKK1JQIAorMjAxMi8wOS8yMgorCitJbmRleDogZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2xpYmF0b21pYy9NYWtlZmlsZS5hbQkyMDEzLTAxLTE0IDE4OjE2OjIzLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9saWJhdG9taWMvTWFrZWZpbGUuYW0JMjAxMy0wOS0yMiAxMDozODoxOC45MDQwNjQ3NTAgKzAwMDAKK0BAIC0xMDAsNyArMTAwLDggQEAKKyBJRlVOQ19ERUYJPSAtRElGVU5DX0FMVD0kKFBBVF9TKQorIElGVU5DX09QVAk9ICQod29yZCAkKFBBVF9TKSwkKElGVU5DX09QVElPTlMpKQorIAorLU1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9UUlVFQE1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMJCT0gCisgTV9TSVpFCQk9IC1ETj0kKFBBVF9OKQorIE1fSUZVTkMJCT0gJChpZiAkKFBBVF9TKSwkKElGVU5DX0RFRikgJChJRlVOQ19PUFQpKQorIE1fRklMRQkJPSAkKFBBVF9CQVNFKV9uLmMKK0luZGV4OiBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvbGliYXRvbWljL01ha2VmaWxlLmluCTIwMTMtMDUtMzEgMDk6MDk6MjYuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5pbgkyMDEzLTA5LTIyIDEwOjQwOjQyLjUyMDA1OTkxNyArMDAwMAorQEAgLTI5OCw3ICsyOTgsOCBAQAorIFBBVF9TID0gJCh3b3JkIDMsJChQQVRfU1BMSVQpKQorIElGVU5DX0RFRiA9IC1ESUZVTkNfQUxUPSQoUEFUX1MpCisgSUZVTkNfT1BUID0gJCh3b3JkICQoUEFUX1MpLCQoSUZVTkNfT1BUSU9OUykpCistTV9ERVBTID0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfVFJVRUBNX0RFUFMgPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMgPSAKKyBNX1NJWkUgPSAtRE49JChQQVRfTikKKyBNX0lGVU5DID0gJChpZiAkKFBBVF9TKSwkKElGVU5DX0RFRikgJChJRlVOQ19PUFQpKQorIE1fRklMRSA9ICQoUEFUX0JBU0UpX24uYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ny1yZXBvbWVtYnVnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ny1yZXBvbWVtYnVnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZmQ1NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQ3LXJlcG9tZW1idWcucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorV2hlbiBjb21waWxpbmcgYSBwcm9qZWN0IHVzaW5nIC1mcmVwbywgLnJwbyBmaWxlcyBhcmUgd3JpdHRlbiBhbG9uZ3NpZGUKK3RoZSAubyBmaWxlLCB0aGUgc3ltYm9scyBlaXRoZXIgaGF2ZSBPIG9yIEMgYWdhaW5zdCB0aGVtLiBEdXJpbmcgZmluYWwgbGlua2luZywKK3RoZSBvYmplY3RzIGNhbiBiZSByZWNvbXBpbGVkIHdpdGggc29tZSBvZiB0aGUgZW50cmllcyB0d2Vha2VkL2Nob3NlbiBieSB0aGUgCit0bGluay5jIGNvZGUgKHZpc2libGUgd2l0aCBUTElOS19WRVJCT1NFPTMpLCBpdCBkb2VzIHRoaXMgYnkgY2hhbmdpbmcgTyAtPiBDCitpbiB0aGUgLnJwbyBmaWxlcy4KKworTXkgdGVzdHMgc2hvd2VkIHRoYXQgaW5pdF9yZXBvIChjcC9yZXBvLmMpIHdhcyBjb3JyZWN0bHkgY2FsbGluZyAKK0lERU5USUZJRVJfUkVQT19DSE9TRU4gYWdhaW5zdCB0aGUgcmlnaHQgaWRlbnRpZmVycyBhbmQgc2V0dGluZyB0aGUKK2Nob3NlbiBiaXQuCisKK0J5IHRoZSB0aW1lIGZpbmlzaF9yZXBvKCkgb3IgZW1pdF9yZXBvX3AoKSB3ZXJlIGNhbGxlZCwgdGhlIHBvaW50ZXIgcmV0dXJuZWQKK2J5IGdldF9pZGVudGlmaWVyKCkgZm9yIHRoZSBzeW1ib2wgbWFya2VkIGR1cmluZyBpbml0X3JlcG8gaGFkIGNoYW5nZWQgYW5kCit0aGUgY2hvc2VuIGJpdCB3YXMgbm8gbG9uZ2VyIHNldC4gVGhpcyBsZWFkIHRvIGxpbmtpbmcgYnVncyBsaWtlOgorCitjb2xsZWN0OiByZWxpbmtpbmcKK2NvbGxlY3QyOiBlcnJvcjogJ19aTks2c3Vkb2t1NUNsZWFySU5TXzhTZXF1ZW5jZUVFY2xFUlMxXycgd2FzIGFzc2lnbmVkIHRvICdib2FyZC5ycG8nLCBidXQgd2FzIG5vdCBkZWZpbmVkIGR1cmluZyByZWNvbXBpbGF0aW9uLCBvciB2aWNlIHZlcnNhCisKK1RoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBpcyBnZXR0aW5nIGNhbGxlZCBiZWZvcmUKK2ZpbmlzaF9yZXBvKCkgaXMgY2FsbGVkIGFuZCBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyBpcyBzZXQgdG8gZmFsc2UgCitzbyB0aGUgaWRlbnRpZmllcnMgYXJlIG5vdCBwcmVzZXJ2ZWQuIFRoZXkgYXJlIHJlY3JlYXRlZCBidXQgdGhlIAorY2hvc2VuIGJpdHMgZ2V0IHdpcGVkIG91dCB3aGljaCBpcyB3aHkgdGhlIHBvaW50ZXIgY2hhbmdlcyBhbmQgdGhlIAorY2hvc2VuIGJpdCBpcyBub3Qgc2V0LgorCitUaGUgZml4IGlzIHRvIGNoYW5nZSBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyAqYWZ0ZXIqIHRoZSBmaW5pc2hfcmVwbyAKK2NhbGxzIGFyZSBtYWRlLgorCitSZXByb2R1Y3Rpb24gaXMgdHJpY2t5IHNpbmNlIHlvdSBuZWVkIHRvIHRyaWdnZXIgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGF0CitqdXN0IHRoZSByaWdodCBtb21lbnQuCisKK1JQIDIwMTMvMTAvOQorCitbWU9DVE8gIzUxMzNdCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2NjLTQuOC4xL2djYy90b3BsZXYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy90b3BsZXYuYwkyMDEzLTAzLTI4IDA4OjI5OjUxLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9nY2MvdG9wbGV2LmMJMjAxMy0xMC0wOSAyMDoyNzoxNy4wODkyMjgwMjMgKzAwMDAKK0BAIC01NTEsMTEgKzU1MSwxMSBAQAorICAgaWYgKGZsYWdfc3ludGF4X29ubHkgfHwgZmxhZ193cGEpCisgICAgIHJldHVybjsKKyAKKy0gIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzID0gZmFsc2U7CistCisgICAvKiBUaGlzIG11c3QgYWxzbyBjYWxsIGZpbmFsaXplX2NvbXBpbGF0aW9uX3VuaXQuICAqLworICAgbGFuZ19ob29rcy5kZWNscy5maW5hbF93cml0ZV9nbG9iYWxzICgpOworIAorKyAgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnMgPSBmYWxzZTsKKysKKyAgIGlmIChzZWVuX2Vycm9yICgpKQorICAgICByZXR1cm47CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQ5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQ5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4ZjhmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDllMGUxOWVhYzI1NjJmNzM4NTg2MDJmZTI2ZTIwNDRlYjhiMjBjNDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+CitEYXRlOiBXZWQsIDUgRmViIDIwMTQgMTY6NTI6MzEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gRW5hYmxlIFNQRSAmIEFsdGlWZWMgZ2VuZXJhdGlvbiBvbiBwb3dlcGMqbGludXggdGFyZ2V0CisKK1doZW4gaXMgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXgsIHRoZSByZXN1bHRpbmcgR0NDIHdpbGwgCitub3QgYmUgYWJsZSB0byBnZW5lcmF0ZSBjb2RlIGZvciBTUEUgdGFyZ2V0cyAoZTUwMHYxL3YyKS4KK0dDQyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eHNwZSB3aWxsIG5vdCBiZSBhYmxlIHRvCitnZW5lcmF0ZSBBbHRpVmVjIGluc3RydWN0aW9ucyAoZm9yIGU2NTAwKS4KK1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmZpZ3VyZWQgZmlsZSBzdWNoIHRoYXQgU1BFIG9yIEFsdGlWZWMgY29kZQorY2FuIGJlIGdlbmVyYXRlZCB3aGVuIGdjYyBpcyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eC4KK1RoZSBBQkkgYW5kIHNwZWNpZmZpYyBpbnN0cnVjdGlvbnMgY2FuIGJlIHNlbGVjdGVkIHRocm91Z2ggdGhlCisiLW1hYmk9c3BlIG9yIC1tYWJpPWFsdGl2ZWMiIGFuZCB0aGUgIi1tc3BlIG9yIC1tYWx0aXZlYyIgcGFyYW1ldGVycy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+CistLS0KKyBnY2MvY29uZmlnLmdjYyB8ICAgIDcgKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcuZ2NjIGIvZ2NjL2NvbmZpZy5nY2MKK2luZGV4IGNiN2E5NGUuLmQzOTJjMmIgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnLmdjYworKysrIGIvZ2NjL2NvbmZpZy5nY2MKK0BAIC0yMDY4LDcgKzIwNjgsMTIgQEAgcG93ZXJwYy0qLXJ0ZW1zKikKKyAJdG1ha2VfZmlsZT0icnM2MDAwL3QtZnBydWxlcyByczYwMDAvdC1ydGVtcyB0LXJ0ZW1zIHJzNjAwMC90LXBwY2NvbW0iCisgCTs7CisgcG93ZXJwYyotKi1saW51eCopCistCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCIKKysJY2FzZSAke3RhcmdldH0gaW4KKysJICAgIHBvd2VycGMqLSotbGludXgqc3BlKiB8IHBvd2VycGMqLSotbGludXgqYWx0aXZlYyopCisrCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmgiIDs7CisrCSAgICAqKQorKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIHJzNjAwMC9saW51eGFsdGl2ZWMuaCByczYwMDAvbGludXhzcGUuaCByczYwMDAvZTUwMC5oIiA7OworKwllc2FjCisgCWV4dHJhX29wdGlvbnM9IiR7ZXh0cmFfb3B0aW9uc30gcnM2MDAwL3N5c3Y0Lm9wdCIKKyAJdG1ha2VfZmlsZT0icnM2MDAwL3QtZnBydWxlcyByczYwMDAvdC1wcGNvcyAke3RtYWtlX2ZpbGV9IHJzNjAwMC90LXBwY2NvbW0iCisgCWNhc2UgJHt0YXJnZXR9IGluCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OGM2NmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC90YXJnZXQtZ2NjLWluY2x1ZGVkaXIucGF0Y2gKQEAgLTAsMCArMSw4MSBAQAorRW5zdXJlIHRhcmdldCBnY2MgaGVhZGVycyBjYW4gYmUgaW5jbHVkZWQKKworVGhlcmUgYXJlIGEgZmV3IGhlYWRlcnMgaW5zdGFsbGVkIGFzIHBhcnQgb2YgdGhlIE9wZW5FbWJlZGRlZAorZ2NjLXJ1bnRpbWUgdGFyZ2V0IChvbXAuaCwgc3NwLyouaCkuIEJlaW5nIGluc3RhbGxlZCBmcm9tIGEgcmVjaXBlCitidWlsdCBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIHRoZXNlIGFyZSB3aXRoaW4gdGhlIHRhcmdldAorc3lzcm9vdCBhbmQgbm90IGNyb3NzL25hdGl2ZXNkazsgdGh1cyB0aGV5IHdlcmVuJ3QgYWJsZSB0byBiZQorZm91bmQgYnkgZ2NjIHdpdGggdGhlIGV4aXN0aW5nIHNlYXJjaCBwYXRocy4gQWRkIHN1cHBvcnQgZm9yCitwaWNraW5nIHVwIHRoZXNlIGhlYWRlcnMgdW5kZXIgdGhlIHN5c3Jvb3Qgc3VwcGxpZWQgb24gdGhlIGdjYworY29tbWFuZCBsaW5lIGluIG9yZGVyIHRvIHJlc29sdmUgdGhpcy4KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gYS9nY2MvTWFrZWZpbGUuaW4JMjAxNC0xMi0yMyAxMTo1NzozMy4zMjc4NzMzMzEgKzAwMDAKKysrKyBiL2djYy9NYWtlZmlsZS5pbgkyMDE1LTAxLTIxIDExOjMyOjM1LjQ0NzMwNTM5NCArMDAwMAorQEAgLTU4Nyw2ICs1ODcsNyBAQAorIAorICMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBsaWJyYXJpZXMgZXRjLgorIGxpYnN1YmRpciA9ICQobGliZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pCisrbGlic3ViZGlyX3RhcmdldCA9IGdjYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikKKyAjIERpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIgZmluZHMgZXhlY3V0YWJsZXMKKyBsaWJleGVjc3ViZGlyID0gJChsaWJleGVjZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggYWxsIHBsdWdpbiByZXNvdXJjZXMgYXJlIGluc3RhbGxlZAorQEAgLTI1MzQsNiArMjUzNSw3IEBACisgCisgUFJFUFJPQ0VTU09SX0RFRklORVMgPSBcCisgICAtREdDQ19JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlXCIgXAorKyAgLURHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUPVwiJChsaWJzdWJkaXJfdGFyZ2V0KS9pbmNsdWRlXCIgXAorICAgLURGSVhFRF9JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlLWZpeGVkXCIgXAorICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVI9XCIkKGdjY19neHhfaW5jbHVkZV9kaXIpXCIgXAorICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1Q9JChnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290KSBcCistLS0gYS9nY2MvY3BwZGVmYXVsdC5jCTIwMTUtMDEtMTMgMTc6NDA6MjYuMTMxMDEyNzI1ICswMDAwCisrKysgYi9nY2MvY3BwZGVmYXVsdC5jCTIwMTUtMDEtMjEgMTE6MzA6MDguOTI4NDI2NDkyICswMDAwCitAQCAtNTksNiArNTksMTAgQEAKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMuICAqLworICAgICB7IEdDQ19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKyAjZW5kaWYKKysjaWZkZWYgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVAorKyAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycyB1bmRlciB0aGUgc3BlY2lmaWVkIHN5c3Jvb3QuICAqLworKyAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VULCAiR0NDIiwgMCwgMCwgMSwgMCB9LAorKyNlbmRpZgorICNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorICAgICAvKiAvdXNyL2xvY2FsL2luY2x1ZGUgY29tZXMgYmVmb3JlIHRoZSBmaXhpbmNsdWRlZCBoZWFkZXIgZmlsZXMuICAqLworICAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAyIH0sCitkaWZmIC0tZ2l0IGEvZ2NjL2RlZmF1bHRzLmggYi9nY2MvZGVmYXVsdHMuaAoraW5kZXggZjk0YWUxNy4uZDk4YjQwYiAxMDA2NDQKKy0tLSBhL2djYy9kZWZhdWx0cy5oCisrKysgYi9nY2MvZGVmYXVsdHMuaAorQEAgLTEzOTAsNCArMTM5MCwxMyBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAKKyAjZW5kaWYgLyogR0NDX0lOU05fRkxBR1NfSCAgKi8KKyAKKysvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KKysKKysjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQorKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKKysjZW5kaWYKKysjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgorKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCisrI2VuZGlmCisrCisgI2VuZGlmICAvKiAhIEdDQ19ERUZBVUxUU19IICovCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA5ZjBiNzgxLi4xNzRmY2E4IDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMTg5LDEzICsxMTg5LDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmdjY19saWJleGVjX3ByZWZpeDsKKyAKKyAvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KKyAKKy0jaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQorLSNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKKy0jZW5kaWYKKy0jaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgorLSNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCistI2VuZGlmCistCisgI2lmZGVmIENST1NTX0RJUkVDVE9SWV9TVFJVQ1RVUkUgIC8qIERvbid0IHVzZSB0aGVzZSBwcmVmaXhlcyBmb3IgYSBjcm9zcyBjb21waWxlci4gICovCisgI3VuZGVmIE1EX0VYRUNfUFJFRklYCisgI3VuZGVmIE1EX1NUQVJURklMRV9QUkVGSVgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTFiYTVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkuaW5jCkBAIC0wLDAgKzEsMTI3IEBACityZXF1aXJlIGdjYy1jb21tb24uaW5jCisKKyMgVGhpcmQgZGlnaXQgaW4gUFYgc2hvdWxkIGJlIGluY3JlbWVudGVkIGFmdGVyIGEgbWlub3IgcmVsZWFzZQorCitQViA9ICI0LjkuMyIKKworIyBCSU5WIHNob3VsZCBiZSBpbmNyZW1lbnRlZCB0byBhIHJldmlzaW9uIGFmdGVyIGEgbWlub3IgZ2NjIHJlbGVhc2UKKworQklOViA9ICI0LjkuMyIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vZ2NjLTQuOToiCisKK0RFUEVORFMgPSsgIm1wZnIgZ21wIGxpYm1wYyB6bGliIgorTkFUSVZFREVQUyA9ICJtcGZyLW5hdGl2ZSBnbXAtbmF0aXZlIGxpYm1wYy1uYXRpdmUgemxpYi1uYXRpdmUiCisKK0xJQ0VOU0UgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24gJiBHUEx2MyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKyAgICBmaWxlOi8vQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICBmaWxlOi8vQ09QWUlORzMuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiBcCisgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgZmlsZTovL0NPUFlJTkcuUlVOVElNRTttZDU9ZmU2MGQ4NzA0ODU2N2Q0ZmU4YzhhMGVkMjQ0OGJjYzggXAorIgorCitTUkNfVVJJID0gIlwKKyAgICAke0dOVV9NSVJST1J9L2djYy9nY2MtJHtQVn0vZ2NjLSR7UFZ9LnRhci5iejIgXAorICAgIGZpbGU6Ly8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAyLXVjbGliYy1jb25mLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwOS1jOTktc25wcmludGYucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBcCisgICAgZmlsZTovLzAwMTEtaW5kZXhfbWFjcm8ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNC1zaC1wcjI0ODM2LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaCBcCisgICAgZmlsZTovLzAwMTctZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxOC1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCisgICAgZmlsZTovLzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDIwLW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMjItQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaCBcCisgICAgZmlsZTovLzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaCBcCisgICAgZmlsZTovLzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBcCisgICAgZmlsZTovLzAwMjktRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaCBcCisgICAgZmlsZTovLzAwMzAtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzMS1EaXNhYmxlLXNkdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMzItbGlidG9vbC5wYXRjaCBcCisgICAgZmlsZTovLzAwMzMtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaCBcCisgICAgZmlsZTovLzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaCBcCisgICAgZmlsZTovLzAwNDAtZml4LWcrKy1zeXNyb290LnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0MS1saWJ0b29sLWF2b2lkLWxpYmRpci5wYXRjaCBcCisgICAgZmlsZTovLzAwNDMtY3BwLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0NC1nZW5ndHlwZXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQ2LWxpYmF0b21pYy1kZXB0cmFja2luZy5wYXRjaCBcCisgICAgZmlsZTovLzAwNDctcmVwb21lbWJ1Zy5wYXRjaCBcCisgICAgZmlsZTovLzAwNDktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBcCisgICAgZmlsZTovLzAwNTAtUmV2ZXJ0LVVzZS1kYnhfcmVnX251bWJlci1mb3Itc3Bhbm5pbmctcmVnaXN0ZXJzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1MS1lYWJpc3BlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1Mi1BZGQtdGFyZ2V0LWhvb2stdG8tb3ZlcnJpZGUtRFdBUkYyLWZyYW1lLXJlZ2lzdGVyLXNpLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1My1nY2MtZml4LXNlZ2ZhdWx0LWZyb20tY2FsbGluZy1mcmVlLW9uLW5vbi1tYWxsb2MtZC1hLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1NC1nY2MtTWFrZWZpbGUuaW4tZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWZhaWx1cmUucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDU1LWR3YXJmLXJlZy1wcm9jZXNzaW5nLWhlbHBlci5wYXRjaCBcCisgICAgZmlsZTovLzAwNTYtZGVmaW5lLWRlZmF1bHQtY2ZhLXJlZ2lzdGVyLW1hcHBpbmcucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDU3LWFhcmNoNjQtY29uZmlnLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1OC1nY2MtcjIxMjE3MS5wYXRjaCBcCisgICAgZmlsZTovLzAwNTktZ2NjLVBSLXJ0bC1vcHRpbWl6YXRpb24tNjMzNDgucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDYwLU9ubHktYWxsb3ctZTUwMC1kb3VibGUtaW4tU1BFX1NJTURfUkVHTk9fUC1yZWdpc3RlcnMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDYxLXRhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaCBcCisgICAgZmlsZTovLzAwNjItVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaCBcCisgICAgZmlsZTovLzAwNjMtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDA2NC1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjZmODMxYjRkMjUxODcyNzM2ZThlOWNjMDk3NDZmMzI3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIzMzJiMmE1YTMyMWI1NzUwOGI5MDMxMzU0YTg1MDNhZjZmZGZiODY4YjhjMTc0OGQzMzAyOGQxMDBhOGI2N2UiCisKK1MgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfS9nY2MtJHtQVn0iCitCID0gIiR7V09SS0RJUn0vZ2NjLSR7UFZ9L2J1aWxkLiR7SE9TVF9TWVN9LiR7VEFSR0VUX1NZU30iCisKKyMgTGFuZ3VhZ2UgT3ZlcnJpZGVzCitGT1JUUkFOID0gIiIKK0pBVkEgPSAiIgorCitMVE8gPSAiLS1lbmFibGUtbHRvIgorCitFWFRSQV9PRUNPTkZfQkFTRSA9ICJcCisgICAgJHtMVE99IFwKKyAgICAtLWVuYWJsZS1saWJzc3AgXAorICAgIC0tZGlzYWJsZS1ib290c3RyYXAgXAorICAgIC0tZGlzYWJsZS1saWJtdWRmbGFwIFwKKyAgICAtLXdpdGgtc3lzdGVtLXpsaWIgXAorICAgIC0td2l0aC1saW5rZXItaGFzaC1zdHlsZT0ke0xJTktFUl9IQVNIX1NUWUxFfSBcCisgICAgLS1lbmFibGUtbGlua2VyLWJ1aWxkLWlkIFwKKyAgICAtLXdpdGgtcHBsPW5vIFwKKyAgICAtLXdpdGgtY2xvb2c9bm8gXAorICAgIC0tZW5hYmxlLWNoZWNraW5nPXJlbGVhc2UgXAorICAgIC0tZW5hYmxlLWNoZWFkZXJzPWNfZ2xvYmFsIFwKKyIKKworRVhUUkFfT0VDT05GX0lOSVRJQUwgPSAiXAorICAgIC0tZGlzYWJsZS1saWJtdWRmbGFwIFwKKyAgICAtLWRpc2FibGUtbGliZ29tcCBcCisgICAgLS1kaXNhYmxlLWxpYnNzcCBcCisgICAgLS1kaXNhYmxlLWxpYnF1YWRtYXRoIFwKKyAgICAtLXdpdGgtc3lzdGVtLXpsaWIgXAorICAgIC0tZGlzYWJsZS1sdG8gXAorICAgIC0tZGlzYWJsZS1wbHVnaW4gXAorICAgIC0tZW5hYmxlLWRlY2ltYWwtZmxvYXQ9bm8gXAorIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWRpc2FibGUtZGVjaW1hbC1mbG9hdCAiCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLWd4eC1pbmNsdWRlLWRpcj0vbm90L2V4aXN0e3RhcmdldF9pbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcCisgICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTg4MDExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gYmYzZDk2YWU1OGZhMTgwYjhiNDY4ZDI1ZGMyZTAyMDlkYWNhMjc1MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjM3OjExICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDEvMzVdIGdjYy00LjMuMTogQVJDSF9GTEFHU19GT1JfVEFSR0VUCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBjb25maWd1cmUgICAgfCAgICAyICstCisgY29uZmlndXJlLmFjIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBkODA5NTM1Li4xYjc2YzkwIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC03NDM5LDcgKzc0MzksNyBAQCBmaQorICMgZm9yIHRhcmdldF9hbGlhcyBhbmQgZ2NjIGRvZXNuJ3QgbWFuYWdlIGl0IGNvbnNpc3RlbnRseS4KKyB0YXJnZXRfY29uZmlnYXJncz0iLS1jYWNoZS1maWxlPS4vY29uZmlnLmNhY2hlICR7dGFyZ2V0X2NvbmZpZ2FyZ3N9IgorIAorLUZMQUdTX0ZPUl9UQVJHRVQ9CisrRkxBR1NfRk9SX1RBUkdFVD0iJEFSQ0hfRkxBR1NfRk9SX1RBUkdFVCIKKyBjYXNlICIgJHRhcmdldF9jb25maWdkaXJzICIgaW4KKyAgKiIgbmV3bGliICIqKQorICAgY2FzZSAiICR0YXJnZXRfY29uZmlnYXJncyAiIGluCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA0OGVjMWFhLi44OWQxZDNmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yODczLDcgKzI4NzMsNyBAQCBmaQorICMgZm9yIHRhcmdldF9hbGlhcyBhbmQgZ2NjIGRvZXNuJ3QgbWFuYWdlIGl0IGNvbnNpc3RlbnRseS4KKyB0YXJnZXRfY29uZmlnYXJncz0iLS1jYWNoZS1maWxlPS4vY29uZmlnLmNhY2hlICR7dGFyZ2V0X2NvbmZpZ2FyZ3N9IgorIAorLUZMQUdTX0ZPUl9UQVJHRVQ9CisrRkxBR1NfRk9SX1RBUkdFVD0iJEFSQ0hfRkxBR1NfRk9SX1RBUkdFVCIKKyBjYXNlICIgJHRhcmdldF9jb25maWdkaXJzICIgaW4KKyAgKiIgbmV3bGliICIqKQorICAgY2FzZSAiICR0YXJnZXRfY29uZmlnYXJncyAiIGluCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAyLXVjbGliYy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYTNiMTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAyLXVjbGliYy1jb25mLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gZDAzMDk3M2M4NzJjMDBkOTE2OTIxZDg0ZGVlZTBhZjJjMGQzODA4MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjM4OjI1ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDIvMzVdIHVjbGliYy1jb25mCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoIHwgICAgNCArKysrCisgbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgICAgIHwgICAgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggYi9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKK2luZGV4IDYwYjA0OTcuLjZkYzdlYWQgMTAwNzU1CistLS0gYS9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKKysrKyBiL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAorQEAgLTEwNiw2ICsxMDYsMTAgQEAgaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtZ251IF0KKyAgdGhlbgorICAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisrZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC11Y2xpYmMgXQorKyB0aGVuCisrICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorKyAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKyBlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgXSA7IHRoZW4KKyAgIG1ha2UgYm9vdHN0cmFwIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsIHx8IGV4aXQgMQorZGlmZiAtLWdpdCBhL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnIGIvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKK2luZGV4IDc0M2Q5NTEuLmFlNGVhNjAgMTAwNzU1CistLS0gYS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworKysrIGIvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKK0BAIC02MDMsNyArNjAzLDcgQEAgaG9zdF9vcz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisgCisgIyBUcmFuc2Zvcm0gbGludXgqIHRvICotKi1saW51eC1nbnUqLCB0byBzdXBwb3J0IG9sZCBjb25maWd1cmUgc2NyaXB0cy4KKyBjYXNlICRob3N0X29zIGluCistbGludXgtZ251KikgOzsKKytsaW51eC1nbnUqfGxpbnV4LXVjbGliYyopIDs7CisgbGludXgqKSBob3N0PWBlY2hvICRob3N0IHwgc2VkICdzL15cKC4qLS4qLWxpbnV4XClcKC4qXCkkL1wxLWdudVwyLydgCisgZXNhYworIAorQEAgLTEyNDcsNyArMTI0Nyw3IEBAIGxpbnV4LWdudW9sZGxkKiB8IGxpbnV4LWdudWFvdXQqIHwgbGludXgtZ251Y29mZiopCisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIHZlcnNpb25fdHlwZT1saW51eAorICAgbmVlZF9saWJfcHJlZml4PW5vCisgICBuZWVkX3ZlcnNpb249bm8KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk4ZTk5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2gKQEAgLTAsMCArMSw4NyBAQAorRnJvbSBkMmQ5ZGQ3NTZjNDM1NmQxNGRkN2FlMDAzODU2MzQ0Y2I0ZjM3OTg1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDA6MTIgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMy8zNV0gZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYyB8ICAgIDUgKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmggIHwgICAgOSArKysrKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmggIHwgICAgOSArKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCitpbmRleCAwZDMwOWE1Li5mMmYxZTFmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYworQEAgLTI2Myw1ICsyNjMsMTAgQEAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCisgI2lmZGVmIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVAorICNkZWZpbmUgX0dMSUJDWFhfTERCTF9DT01QQVQoZGJsLCBsZGJsKSBcCisgICBleHRlcm4gIkMiIHZvaWQgbGRibCAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKGFsaWFzICgjZGJsKSkpCisrI2lmZGVmIF9fVUNMSUJDX18KKysvLyBUaGlzIGlzIGJlY2F1c2UgX19jX2xvY2FsZSBpcyBvZiB0eXBlIF9fY3R5cGVfdG91cGxvd190KiB3aGljaCBpcyBzaG9ydCBvbiB1Y2xpYmMuIGZvciBnbGliYyBpdHMgaW50KgorK19HTElCQ1hYX0xEQkxfQ09NUEFUKF9aU3QxNF9fY29udmVydF90b192SWRFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQcywgX1pTdDE0X19jb252ZXJ0X3RvX3ZJZUV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BzKTsKKysjZWxzZQorIF9HTElCQ1hYX0xEQkxfQ09NUEFUKF9aU3QxNF9fY29udmVydF90b192SWRFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQaSwgX1pTdDE0X19jb252ZXJ0X3RvX3ZJZUV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BpKTsKKysjZW5kaWYKKyAjZW5kaWYgLy8gX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCitpbmRleCBiNWZkOTg5Li4zZGE5YTVkIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKK0BAIC00MCwxMyArNDAsMjIgQEAKKyAKKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNlbmRpZgorKworICNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgMAorIAorIG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQorIHsKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrICB0eXBlZGVmIF9fY3R5cGVfdG91cGxvd190KglfX2NfbG9jYWxlOworKyNlbHNlCisgICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworKyNlbmRpZgorIAorICAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgZG91YmxlIGFuZCBsb25nIGRvdWJsZSB0byBzdHJpbmcgYW5kCisgICAvLyByZXR1cm4gbGVuZ3RoIG9mIHN0cmluZy4gIElmIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmggYi9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKK2luZGV4IDJkOGU5NzguLjE0ZWIwOGYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAorQEAgLTMzLDYgKzMzLDExIEBACisgCisgLy8gSW5mb3JtYXRpb24gYXMgZ2xlYW5lZCBmcm9tIC91c3IvaW5jbHVkZS9jdHlwZS5oCisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjZW5kaWYKKysKKyBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKKyB7CisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KK0BAIC00MSw3ICs0NiwxMSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorICAgc3RydWN0IGN0eXBlX2Jhc2UKKyAgIHsKKyAgICAgLy8gTm9uLXN0YW5kYXJkIHR5cGVkZWZzLgorKyNpZmRlZiBfX1VDTElCQ19fCisrICAgIHR5cGVkZWYgY29uc3QgX19jdHlwZV90b3VwbG93X3QqCV9fdG9fdHlwZTsKKysjZWxzZQorICAgICB0eXBlZGVmIGNvbnN0IGludCogCQlfX3RvX3R5cGU7CisrI2VuZGlmCisgCisgICAgIC8vIE5COiBPZmZzZXRzIGludG8gY3R5cGU8Y2hhcj46Ol9NX3RhYmxlIGZvcmNlIGEgcGFydGljdWxhciBzaXplCisgICAgIC8vIG9uIHRoZSBtYXNrIHR5cGUuIEJlY2F1c2Ugb2YgdGhpcywgd2UgZG9uJ3QgdXNlIGFuIGVudW0uCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWY1ZjMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoCkBAIC0wLDAgKzEsMjg2MiBAQAorRnJvbSBhNTVjNzUxYTQ0OWMyY2JmMGIzZmNjMDdhYWIxYjg2YmY5NjYxNTEwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDE6MzkgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNC8zNV0gdWNsaWJjLWxvY2FsZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzNyArKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgICA2MyArKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgIDE2MCArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oICAgICAgIHwgIDExNyArKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyAgICAgICAgfCAgMzA4ICsrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgICAgICAgIHwgICA4MCArKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8ICAzMDAgKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgICAgICAgfCAgMTAwICsrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgIDExOCArKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgICAgICAgfCAgNjkyICsrKysrKysrKysrKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgMTYwICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAgNDA2ICsrKysrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCAgIHwgICA2OCArKworIGxpYnN0ZGMrKy12My9jb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3NSArKysKKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCAgICAgICB8ICAgIDIgKworIGxpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciAgICAgICAgICAgICAgICAgIHwgICAgMiArCisgMTYgZmlsZXMgY2hhbmdlZCwgMjY4OCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNCBiL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKK2luZGV4IDA4NzFhNmEuLjMyNmQ3ZWYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CisrKysgYi9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CitAQCAtMTkwNSw2ICsxOTA1LDkgQEAgQUNfREVGVU4oW0dMSUJDWFhfRU5BQkxFX0NMT0NBTEVdLCBbCisgICAjIERlZmF1bHQgdG8gImdlbmVyaWMiLgorICAgaWYgdGVzdCAkZW5hYmxlX2Nsb2NhbGVfZmxhZyA9IGF1dG87IHRoZW4KKyAgICAgY2FzZSAke3RhcmdldF9vc30gaW4KKysgICAgICAqLXVjbGliYyopCisrICAgICAgICBlbmFibGVfY2xvY2FsZV9mbGFnPXVjbGliYworKyAgICAgICAgOzsKKyAgICAgICBsaW51eCogfCBnbnUqIHwga2ZyZWVic2QqLWdudSB8IGtuZXRic2QqLWdudSkKKyAJZW5hYmxlX2Nsb2NhbGVfZmxhZz1nbnUKKyAJOzsKK0BAIC0yMDY5LDYgKzIwNzIsNDAgQEAgQUNfREVGVU4oW0dMSUJDWFhfRU5BQkxFX0NMT0NBTEVdLCBbCisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgQUNfTVNHX1JFU1VMVCh1Y2xpYmMpCisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgQUNfQ0hFQ0tfUFJPRyhjaGVja19tc2dmbXQsIG1zZ2ZtdCwgeWVzLCBubykKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysgICAgICBBQ19TVUJTVChnbGliY3h4X01PRklMRVMpCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9QT0ZJTEVTKQorKworKyAgICAgIENMT0NBTEVfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrICAgICAgQ0xPQ0FMRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworKyAgICAgIENDT0xMQVRFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKyAgICAgIENDVFlQRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysgICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKyAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysgICAgICA7OworICAgZXNhYworIAorICAgIyBUaGlzIGlzIHdoZXJlIHRoZSB0ZXN0c3VpdGUgbG9va3MgZm9yIGxvY2FsZSBjYXRhbG9ncywgdXNpbmcgdGhlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMmFlM2U0YQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitAQCAtMCwwICsxLDYzIEBACisrLy8gUHJvdG90eXBlcyBmb3IgR0xJQkMgdGhyZWFkIGxvY2FsZSBfXy1wcmVmaXhlZCBmdW5jdGlvbnMgLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8gV3JpdHRlbiBieSBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorKyNpbmNsdWRlIDxjbG9jYWxlPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGNsZWFuIHRoaXMgdXAKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKworK2V4dGVybiAiQyIgX190eXBlb2YobmxfbGFuZ2luZm9fbCkgX19ubF9sYW5naW5mb19sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyY29sbF9sKSBfX3N0cmNvbGxfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmZ0aW1lX2wpIF9fc3RyZnRpbWVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZF9sKSBfX3N0cnRvZF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9mX2wpIF9fc3RydG9mX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2xkX2wpIF9fc3RydG9sZF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyeGZybV9sKSBfX3N0cnhmcm1fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKG5ld2xvY2FsZSkgX19uZXdsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihmcmVlbG9jYWxlKSBfX2ZyZWVsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihkdXBsb2NhbGUpIF9fZHVwbG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKytleHRlcm4gIkMiIF9fdHlwZW9mKGlzd2N0eXBlX2wpIF9faXN3Y3R5cGVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHRvd2xvd2VyX2wpIF9fdG93bG93ZXJfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHRvd3VwcGVyX2wpIF9fdG93dXBwZXJfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2NvbGxfbCkgX193Y3Njb2xsX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3NmdGltZV9sKSBfX3djc2Z0aW1lX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3N4ZnJtX2wpIF9fd2NzeGZybV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2N0eXBlX2wpIF9fd2N0eXBlX2w7CisrI2VuZGlmCisrCisrI2VuZGlmIC8vIEdMSUJDIDIuMyBhbmQgbGF0ZXIKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41MDgxZGMxCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0wLDAgKzEsMTYwIEBACisrLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8Y2Vycm5vPiAgLy8gRm9yIGVycm5vCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8c3RkZXhjZXB0PgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19zdHJ0b2xfbChTLCBFLCBCLCBMKSAgICAgIHN0cnRvbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b3VsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvdWwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG9sbF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b2xsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvdWxsX2woUywgRSwgQiwgTCkgICAgc3RydG91bGwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCisrI2RlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorKyNkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCisrI3dhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKysjZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCisrI2RlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGZsb2F0JiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19mOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2Q7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgbG9uZyBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fbGQ7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdm9pZAorKyAgbG9jYWxlOjpmYWNldDo6X1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorKwkJCQkgICAgX19jX2xvY2FsZSBfX29sZCkKKysgIHsKKysgICAgX19jbG9jID0gX19uZXdsb2NhbGUoMSA8PCBMQ19BTEwsIF9fcywgX19vbGQpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIGlmICghX19jbG9jKQorKyAgICAgIHsKKysJLy8gVGhpcyBuYW1lZCBsb2NhbGUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyBPUy4KKysJX190aHJvd19ydW50aW1lX2Vycm9yKF9fTigibG9jYWxlOjpmYWNldDo6X1NfY3JlYXRlX2NfbG9jYWxlICIKKysJCQkgICAgICAibmFtZSBub3QgdmFsaWQiKSk7CisrICAgICAgfQorKyNlbmRpZgorKyAgfQorKworKyAgdm9pZAorKyAgbG9jYWxlOjpmYWNldDo6X1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICB7CisrICAgIGlmIChfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisrICAgICAgX19mcmVlbG9jYWxlKF9fY2xvYyk7CisrICB9CisrCisrICBfX2NfbG9jYWxlCisrICBsb2NhbGU6OmZhY2V0OjpfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICB7IHJldHVybiBfX2R1cGxvY2FsZShfX2Nsb2MpOyB9CisrfSAvLyBuYW1lc3BhY2Ugc3RkCisrCisrbmFtZXNwYWNlIF9fZ251X2N4eAorK3sKKysgIGNvbnN0IGNoYXIqIGNvbnN0IGNhdGVnb3J5X25hbWVzWzYgKyBfR0xJQkNYWF9OVU1fQ0FURUdPUklFU10gPQorKyAgICB7CisrICAgICAgIkxDX0NUWVBFIiwKKysgICAgICAiTENfTlVNRVJJQyIsCisrICAgICAgIkxDX1RJTUUiLAorKyAgICAgICJMQ19DT0xMQVRFIiwKKysgICAgICAiTENfTU9ORVRBUlkiLAorKyAgICAgICJMQ19NRVNTQUdFUyIsCisrI2lmIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTICE9IDAKKysgICAgICAiTENfUEFQRVIiLAorKyAgICAgICJMQ19OQU1FIiwKKysgICAgICAiTENfQUREUkVTUyIsCisrICAgICAgIkxDX1RFTEVQSE9ORSIsCisrICAgICAgIkxDX01FQVNVUkVNRU5UIiwKKysgICAgICAiTENfSURFTlRJRklDQVRJT04iCisrI2VuZGlmCisrICAgIH07CisrfQorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICBjb25zdCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4OjpjYXRlZ29yeV9uYW1lczsKKyt9ICAvLyBuYW1lc3BhY2Ugc3RkCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmRhMDdjMWYKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtMCwwICsxLDExNyBAQAorKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2lmbmRlZiBfQ19MT0NBTEVfSAorKyNkZWZpbmUgX0NfTE9DQUxFX0ggMQorKworKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKysKKysjaW5jbHVkZSA8Y3N0cmluZz4gICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnN0cmxlbgorKyNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c25wcmludGYgb3Igc3RkOjpzcHJpbnRmCisrI2luY2x1ZGUgPGNsb2NhbGU+CisrI2luY2x1ZGUgPGxhbmdpbmZvLmg+CQkvLyBGb3IgY29kZWN2dAorKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyNpbmNsdWRlIDxpY29udi5oPgkJLy8gRm9yIGNvZGVjdnQgdXNpbmcgaWNvbnYsIGljb252X3QKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjaW5jbHVkZSA8bGliaW50bC5oPiAJCS8vIEZvciBtZXNzYWdlcworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHdoYXQgaXMgX0dMSUJDWFhfQ19MT0NBTEVfR05VIGZvcgorKyNlbmRpZgorKyNkZWZpbmUgX0dMSUJDWFhfQ19MT0NBTEVfR05VIDEKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggY2F0ZWdvcmllcworKyNlbmRpZgorKy8vICNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgNgorKyNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgMAorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrbmFtZXNwYWNlIF9fZ251X2N4eAorK3sKKysgIGV4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKyt9CisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgdHlwZWRlZiBfX2xvY2FsZV90CQlfX2NfbG9jYWxlOworKyNlbHNlCisrICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworKyNlbmRpZgorKworKyAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorKyAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworKyAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKysgIC8vIGJlIGF2b2lkZWQuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CisrICAgIGludAorKyAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LAorKwkJICAgICBjb25zdCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCisrCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCisrICAgIHsKKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjKQorKyAgICB7CisrIyBpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX29sZCkgKyAxXTsKKysgICAgICBzdGQ6OnN0cmNweShfX3NhdiwgX19vbGQpOworKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgIkMiKTsKKysjIGVuZGlmCisrI2VuZGlmCisrCisrICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjpzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKyAgICAgIF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19vbGQpOworKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworKyNlbmRpZgorKyAgICAgIHJldHVybiBfX3JldDsKKysgICAgfQorK30KKysKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjY0YWE5NjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMzA4IEBACisrLy8gc3RkOjpjb2RlY3Z0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4xLjUgLSBUZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0CisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGNzdGRsaWI+ICAvLyBGb3IgTUJfQ1VSX01BWAorKyNpbmNsdWRlIDxjbGltaXRzPiAgLy8gRm9yIE1CX0xFTl9NQVgKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKKysJIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorKwkgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKKysJIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorKyAgeworKyAgICByZXN1bHQgX19yZXQgPSBvazsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIHdjc25ydG9tYnMgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2UgZmFsbCBiYWNrIHRvIHdjcnRvbWIgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IHdjc25ydG9tYnMgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87CisrCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKKysJICYmIF9fcmV0ID09IG9rOykKKysgICAgICB7CisrCWNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kID0gd21lbWNocihfX2Zyb21fbmV4dCwgTCdcMCcsCisrCQkJCQkJICAgICAgX19mcm9tX2VuZCAtIF9fZnJvbV9uZXh0KTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2Zyb21fZW5kOworKworKwlfX2Zyb20gPSBfX2Zyb21fbmV4dDsKKysJY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjc25ydG9tYnMoX190b19uZXh0LCAmX19mcm9tX25leHQsCisrCQkJCQkgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAorKwkJCQkJIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIHdjcnRvbWIuCisrCSAgICBmb3IgKDsgX19mcm9tIDwgX19mcm9tX25leHQ7ICsrX19mcm9tKQorKwkgICAgICBfX3RvX25leHQgKz0gd2NydG9tYihfX3RvX25leHQsICpfX2Zyb20sICZfX3RtcF9zdGF0ZSk7CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCA9IGVycm9yOworKwkgIH0KKysJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQorKwkgIHsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICB9CisrCisrCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCisrCSAgeworKwkgICAgZXh0ZXJuX3R5cGUgX19idWZbTUJfTEVOX01BWF07CisrCSAgICBfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCSAgICBjb25zdCBzaXplX3QgX19jb252ID0gd2NydG9tYihfX2J1ZiwgKl9fZnJvbV9uZXh0LCAmX190bXBfc3RhdGUpOworKwkgICAgaWYgKF9fY29udiA+IHN0YXRpY19jYXN0PHNpemVfdD4oX190b19lbmQgLSBfX3RvX25leHQpKQorKwkgICAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCW1lbWNweShfX3RvX25leHQsIF9fYnVmLCBfX2NvbnYpOworKwkJX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkJX190b19uZXh0ICs9IF9fY29udjsKKysJCSsrX19mcm9tX25leHQ7CisrCSAgICAgIH0KKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKysJaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKKysJaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisrICB7CisrICAgIHJlc3VsdCBfX3JldCA9IG9rOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBzdG9yZSBhIEwnXDAnIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgICBmb3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOworKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kCisrCSAmJiBfX3JldCA9PSBvazspCisrICAgICAgeworKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZDsKKysJX19mcm9tX2NodW5rX2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4obWVtY2hyKF9fZnJvbV9uZXh0LCAnXDAnLAorKwkJCQkJCQkJICBfX2Zyb21fZW5kCisrCQkJCQkJCQkgIC0gX19mcm9tX25leHQpKTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2Zyb21fZW5kOworKworKwlfX2Zyb20gPSBfX2Zyb21fbmV4dDsKKysJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190b19uZXh0LCAmX19mcm9tX25leHQsCisrCQkJCSAgIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwKKysJCQkJICAgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gbWJydG93Yy4KKysJICAgIGZvciAoOzsgKytfX3RvX25leHQsIF9fZnJvbSArPSBfX2NvbnYpCisrCSAgICAgIHsKKysJCV9fY29udiA9IG1icnRvd2MoX190b19uZXh0LCBfX2Zyb20sIF9fZnJvbV9lbmQgLSBfX2Zyb20sCisrCQkJCSAmX190bXBfc3RhdGUpOworKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKQorKwkJICAgIHx8IF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSkKKysJCSAgYnJlYWs7CisrCSAgICAgIH0KKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tOworKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgPSBlcnJvcjsKKysJICB9CisrCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKysJICB7CisrCSAgICAvLyBJdCBpcyB1bmNsZWFyIHdoYXQgdG8gcmV0dXJuIGluIHRoaXMgY2FzZSAoc2VlIERSIDM4MikuCisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgfQorKworKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorKwkgIHsKKysJICAgIGlmIChfX3RvX25leHQgPCBfX3RvX2VuZCkKKysJICAgICAgeworKwkJLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKKysJCV9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJCSsrX19mcm9tX25leHQ7CisrCQkqX190b19uZXh0KysgPSBMJ1wwJzsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKQorKyAgeworKyAgICAvLyBYWFggVGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGVuY29kaW5nIGlzCisrICAgIC8vIHN0YXRlbGVzcyBhbmQgaXMgZWl0aGVyIHNpbmdsZS1ieXRlIG9yIHZhcmlhYmxlLXdpZHRoLgorKyAgICBpbnQgX19yZXQgPSAwOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysgICAgaWYgKE1CX0NVUl9NQVggPT0gMSkKKysgICAgICBfX3JldCA9IDE7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBpbnQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MuCisrICAgIGludCBfX3JldCA9IE1CX0NVUl9NQVg7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBpbnQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19sZW5ndGgoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKysJICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdAorKyAgeworKyAgICBpbnQgX19yZXQgPSAwOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBhZHZhbmNlIHBhc3QgaXQgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCisrCisrICAgIC8vIEEgZHVtbXkgaW50ZXJuYWwgYnVmZmVyIGlzIG5lZWRlZCBpbiBvcmRlciBmb3IgbWJzbnJ0b2N3cyB0byBjb25zaWRlcgorKyAgICAvLyBpdHMgZm91cnRoIHBhcmFtZXRlciAoaXQgd291bGRuJ3Qgd2l0aCBOVUxMIGFzIGZpcnN0IHBhcmFtZXRlcikuCisrICAgIHdjaGFyX3QqIF9fdG8gPSBzdGF0aWNfY2FzdDx3Y2hhcl90Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yod2NoYXJfdCkKKysJCQkJCQkJICAgKiBfX21heCkpOworKyAgICB3aGlsZSAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCisrICAgICAgeworKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZDsKKysJX19mcm9tX2NodW5rX2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4obWVtY2hyKF9fZnJvbSwgJ1wwJywKKysJCQkJCQkJCSAgX19lbmQKKysJCQkJCQkJCSAgLSBfX2Zyb20pKTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2VuZDsKKysKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fdG1wX2Zyb20gPSBfX2Zyb207CisrCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG8sICZfX2Zyb20sCisrCQkJCSAgIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb20sCisrCQkJCSAgIF9fbWF4LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIG1icnRvd2MuCisrCSAgICBmb3IgKF9fZnJvbSA9IF9fdG1wX2Zyb207OyBfX2Zyb20gKz0gX19jb252KQorKwkgICAgICB7CisrCQlfX2NvbnYgPSBtYnJ0b3djKE5VTEwsIF9fZnJvbSwgX19lbmQgLSBfX2Zyb20sCisrCQkJCSAmX190bXBfc3RhdGUpOworKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKQorKwkJICAgIHx8IF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSkKKysJCSAgYnJlYWs7CisrCSAgICAgIH0KKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ICs9IF9fZnJvbSAtIF9fdG1wX2Zyb207CisrCSAgICBicmVhazsKKysJICB9CisrCWlmICghX19mcm9tKQorKwkgIF9fZnJvbSA9IF9fZnJvbV9jaHVua19lbmQ7CisrCisrCV9fcmV0ICs9IF9fZnJvbSAtIF9fdG1wX2Zyb207CisrCV9fbWF4IC09IF9fY29udjsKKysKKysJaWYgKF9fZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorKwkgIHsKKysJICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCisrCSAgICBfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCSAgICArK19fZnJvbTsKKysJICAgICsrX19yZXQ7CisrCSAgICAtLV9fbWF4OworKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYzI2NjRhNworLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworQEAgLTAsMCArMSw4MCBAQAorKy8vIHN0ZDo6Y29sbGF0ZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNC4xLjIgIGNvbGxhdGUgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCisrI2RlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCisrI2RlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBUaGVzZSBhcmUgYmFzaWNhbGx5IGV4dGVuc2lvbnMgdG8gY2hhcl90cmFpdHMsIGFuZCBwZXJoYXBzIHNob3VsZAorKyAgLy8gYmUgcHV0IHRoZXJlIGluc3RlYWQgb2YgaGVyZS4KKysgIHRlbXBsYXRlPD4KKysgICAgaW50CisrICAgIGNvbGxhdGU8Y2hhcj46Ol9NX2NvbXBhcmUoY29uc3QgY2hhciogX19vbmUsIGNvbnN0IGNoYXIqIF9fdHdvKSBjb25zdAorKyAgICB7CisrICAgICAgaW50IF9fY21wID0gX19zdHJjb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHNpemVfdAorKyAgICBjb2xsYXRlPGNoYXI+OjpfTV90cmFuc2Zvcm0oY2hhciogX190bywgY29uc3QgY2hhciogX19mcm9tLAorKwkJCQlzaXplX3QgX19uKSBjb25zdAorKyAgICB7IHJldHVybiBfX3N0cnhmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgaW50CisrICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBhcmUoY29uc3Qgd2NoYXJfdCogX19vbmUsCisrCQkJCSBjb25zdCB3Y2hhcl90KiBfX3R3bykgY29uc3QKKysgICAgeworKyAgICAgIGludCBfX2NtcCA9IF9fd2NzY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisrICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2NtcCAhPSAwKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBzaXplX3QKKysgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fdHJhbnNmb3JtKHdjaGFyX3QqIF9fdG8sIGNvbnN0IHdjaGFyX3QqIF9fZnJvbSwKKysJCQkJICAgc2l6ZV90IF9fbikgY29uc3QKKysgICAgeyByZXR1cm4gX193Y3N4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjk0ZTNhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworQEAgLTAsMCArMSwzMDAgQEAKKysvLyBzdGQ6OmN0eXBlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4xLjEuMiAgY3R5cGUgdmlydHVhbCBmdW5jdGlvbnMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgd2N0eXBlKChTKSkKKysjZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgIHRvd3VwcGVyKChDKSkKKysjZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgIHRvd2xvd2VyKChDKSkKKysjZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKKysgIC8vIHZhcmlvdXMgL2NvbmZpZy9vcy8qIGZpbGVzLgorKyAgdGVtcGxhdGU8PgorKyAgICBjdHlwZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisrICAgIDogY3R5cGU8Y2hhcj4oMCwgZmFsc2UsIF9fcmVmcykKKysgICAgeworKyAgICAgIGlmIChzdGQ6OnN0cmNtcChfX3MsICJDIikgIT0gMCAmJiBzdGQ6OnN0cmNtcChfX3MsICJQT1NJWCIpICE9IDApCisrCXsKKysJICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlKTsKKysJICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUsIF9fcyk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICB0aGlzLT5fTV90b3VwcGVyID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfdG91cHBlcjsKKysJICB0aGlzLT5fTV90b2xvd2VyID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfdG9sb3dlcjsKKysJICB0aGlzLT5fTV90YWJsZSA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX2I7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgY3R5cGU8d2NoYXJfdD46Ol9fd21hc2tfdHlwZQorKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0CisrICB7CisrICAgIF9fd21hc2tfdHlwZSBfX3JldDsKKysgICAgc3dpdGNoIChfX20pCisrICAgICAgeworKyAgICAgIGNhc2Ugc3BhY2U6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgic3BhY2UiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgcHJpbnQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgicHJpbnQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgY250cmw6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiY250cmwiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgdXBwZXI6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgidXBwZXIiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgbG93ZXI6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgibG93ZXIiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgYWxwaGE6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiYWxwaGEiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgcHVuY3Q6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgicHVuY3QiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgeGRpZ2l0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInhkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbG51bToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbG51bSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBncmFwaDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJncmFwaCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJX19yZXQgPSBfX3dtYXNrX3R5cGUoKTsKKysgICAgICB9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX190b3d1cHBlcl9sKF9fYywgX01fY19sb2NhbGVfY3R5cGUpOyB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKyAgICAgIHsKKysgICAgICAgICpfX2xvID0gX190b3d1cHBlcl9sKCpfX2xvLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgICAgICArK19fbG87CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b2xvd2VyKHdjaGFyX3QgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX190b3dsb3dlcl9sKF9fYywgX01fY19sb2NhbGVfY3R5cGUpOyB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKyAgICAgIHsKKysgICAgICAgICpfX2xvID0gX190b3dsb3dlcl9sKCpfX2xvLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgICAgICArK19fbG87CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIGJvb2wKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QKKysgIHsKKysgICAgLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysgICAgLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKKysgICAgY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysgICAgZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKyAgICAgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdCisrCSAgJiYgX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCXsKKysJICBfX3JldCA9IHRydWU7CisrCSAgYnJlYWs7CisrCX0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX2lzKGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdAorKyAgeworKyAgICBmb3IgKDsgX19sbyA8IF9faGk7ICsrX192ZWMsICsrX19sbykKKysgICAgICB7CisrCS8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrCS8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKwljb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKwltYXNrIF9fbSA9IDA7CisrCWZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysJICBpZiAoX19pc3djdHlwZV9sKCpfX2xvLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJICAgIF9fbSB8PSBfTV9iaXRbX19iaXRjdXJdOworKwkqX192ZWMgPSBfX207CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkgJiYgIXRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pKQorKyAgICAgICsrX19sbzsKKysgICAgcmV0dXJuIF9fbG87CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkgJiYgdGhpcy0+ZG9faXMoX19tLCAqX19sbykgIT0gMCkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpXTsgfQorKworKyAgY29uc3QgY2hhcioKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIHdjaGFyX3QqIF9fZGVzdCkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKyAgICAgIHsKKysJKl9fZGVzdCA9IF9NX3dpZGVuW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvKV07CisrCSsrX19sbzsKKysJKytfX2Rlc3Q7CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIGNoYXIKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX25hcnJvdyh3Y2hhcl90IF9fd2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CisrICB7CisrICAgIGlmIChfX3djID49IDAgJiYgX193YyA8IDEyOCAmJiBfTV9uYXJyb3dfb2spCisrICAgICAgcmV0dXJuIF9NX25hcnJvd1tfX3djXTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICBjb25zdCBpbnQgX19jID0gd2N0b2IoX193Yyk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX25hcnJvdyhjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpLCBjaGFyIF9fZGZhdWx0LAorKwkgICAgY2hhciogX19kZXN0KSBjb25zdAorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGlmIChfTV9uYXJyb3dfb2spCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgaWYgKCpfX2xvID49IDAgJiYgKl9fbG8gPCAxMjgpCisrCSAgICAqX19kZXN0ID0gX01fbmFycm93WypfX2xvXTsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7CisrCSAgICAgICpfX2Rlc3QgPSAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrCSAgICB9CisrCSAgKytfX2xvOworKwkgICsrX19kZXN0OworKwl9CisrICAgIGVsc2UKKysgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrCXsKKysJICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICpfX2Rlc3QgPSAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrCSAgKytfX2xvOworKwkgICsrX19kZXN0OworKwl9CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIHZvaWQKKysgIGN0eXBlPHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX2N0eXBlKCkKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICB3aW50X3QgX19pOworKyAgICBmb3IgKF9faSA9IDA7IF9faSA8IDEyODsgKytfX2kpCisrICAgICAgeworKwljb25zdCBpbnQgX19jID0gd2N0b2IoX19pKTsKKysJaWYgKF9fYyA9PSBFT0YpCisrCSAgYnJlYWs7CisrCWVsc2UKKysJICBfTV9uYXJyb3dbX19pXSA9IHN0YXRpY19jYXN0PGNoYXI+KF9fYyk7CisrICAgICAgfQorKyAgICBpZiAoX19pID09IDEyOCkKKysgICAgICBfTV9uYXJyb3dfb2sgPSB0cnVlOworKyAgICBlbHNlCisrICAgICAgX01fbmFycm93X29rID0gZmFsc2U7CisrICAgIGZvciAoc2l6ZV90IF9faiA9IDA7CisrCSBfX2ogPCBzaXplb2YoX01fd2lkZW4pIC8gc2l6ZW9mKHdpbnRfdCk7ICsrX19qKQorKyAgICAgIF9NX3dpZGVuW19fal0gPSBidG93YyhfX2opOworKworKyAgICBmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPD0gMTE7ICsrX19rKQorKyAgICAgIHsKKysJX01fYml0W19fa10gPSBzdGF0aWNfY2FzdDxtYXNrPihfSVNiaXQoX19rKSk7CisrCV9NX3dtYXNrW19fa10gPSBfTV9jb252ZXJ0X3RvX3dtYXNrKF9NX2JpdFtfX2tdKTsKKysgICAgICB9CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgfQorKyNlbmRpZiAvLyAgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjEzNTk0ZDkKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCitAQCAtMCwwICsxLDEwMCBAQAorKy8vIHN0ZDo6bWVzc2FnZXMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjcuMS4yICBtZXNzYWdlcyB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBnZXR0ZXh0IHN0dWZmCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrZXh0ZXJuICJDIiBjaGFyICpfX2RjZ2V0dGV4dChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJCSAgICAgY29uc3QgY2hhciAqbXNnaWQsIGludCBjYXRlZ29yeSk7CisrI3VuZGVmIGdldHRleHQKKysjZGVmaW5lIGdldHRleHQobXNnaWQpIF9fZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjZWxzZQorKyN1bmRlZiBnZXR0ZXh0CisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFNwZWNpYWxpemF0aW9ucy4KKysgIHRlbXBsYXRlPD4KKysgICAgc3RyaW5nCisrICAgIG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZyYgX19kZmF1bHQpIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpKTsKKysgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7CisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZWxzZQorKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZW5kaWYKKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB3c3RyaW5nCisrICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHdzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorKyAgICB7CisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfbWVzc2FnZXMpOworKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVsc2UKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVuZGlmCisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xNDI0MDc4CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtMCwwICsxLDExOCBAQAorKy8vIHN0ZDo6bWVzc2FnZXMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjcuMS4yICBtZXNzYWdlcyBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrZXh0ZXJuICJDIiBjaGFyICpfX3RleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CisrZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJCSAgY29uc3QgY2hhciAqZGlybmFtZSk7CisrI2Vsc2UKKysjdW5kZWYgX190ZXh0ZG9tYWluCisrI3VuZGVmIF9fYmluZHRleHRkb21haW4KKysjZGVmaW5lIF9fdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBfX2JpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorKyNlbmRpZgorKworKyAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKHNpemVfdCBfX3JlZnMpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2dldF9jX2xvY2FsZSgpKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICAgeyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorKwkJCQlzaXplX3QgX19yZWZzKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoX19zKQorKyAgICAgeworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysgICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZworKyAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAorKwkJCSAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAorKyAgICB7CisrICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworKyAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOworKyAgICB9CisrCisrICAvLyBWaXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIG1lc3NhZ2VzPF9DaGFyVD46On5tZXNzYWdlcygpCisrICAgIHsKKysgICAgICBpZiAoX01fbmFtZV9tZXNzYWdlcyAhPSBfU19nZXRfY19uYW1lKCkpCisrCWRlbGV0ZSBbXSBfTV9uYW1lX21lc3NhZ2VzOworKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywKKysJCQkgICAgICBjb25zdCBsb2NhbGUmKSBjb25zdAorKyAgICB7CisrICAgICAgLy8gTm8gZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSwgYXNzdW1lIHRoZSBjYXRhbG9nIGV4aXN0cyBhbmQgY2FuCisrICAgICAgLy8gYmUgdXNlZC4KKysgICAgICBfX3RleHRkb21haW4oX19zLmNfc3RyKCkpOworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHZvaWQKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fY2xvc2UoY2F0YWxvZykgY29uc3QKKysgICAgeyB9CisrCisrICAgLy8gbWVzc2FnZXNfYnluYW1lCisrICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXNfYnluYW1lPF9DaGFyVD46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisrICAgICA6IG1lc3NhZ2VzPF9DaGFyVD4oX19yZWZzKQorKyAgICAgeworKyAgICAgICBpZiAodGhpcy0+X01fbmFtZV9tZXNzYWdlcyAhPSBsb2NhbGU6OmZhY2V0OjpfU19nZXRfY19uYW1lKCkpCisrCSBkZWxldGUgW10gdGhpcy0+X01fbmFtZV9tZXNzYWdlczsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrCisrICAgICAgIGlmIChzdGQ6OnN0cmNtcChfX3MsICJDIikgIT0gMCAmJiBzdGQ6OnN0cmNtcChfX3MsICJQT1NJWCIpICE9IDApCisrCSB7CisrCSAgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMpOworKwkgICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7CisrCSB9CisrICAgICB9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmFhNTI3MzEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDY5MiBAQAorKy8vIHN0ZDo6bW9uZXlwdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNi4zLjIgIG1vbmV5cHVuY3QgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgb3B0aW1pemUgdGhpcyBmb3IgdWNsaWJjCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIHZhbGlkIHBhdHRlcm4gY29uc2lzdGluZyBvZiBzb21lIGNvbWJpbmF0aW9uIG9mOgorKyAgLy8gc3BhY2Ugbm9uZSBzeW1ib2wgc2lnbiB2YWx1ZQorKyAgbW9uZXlfYmFzZTo6cGF0dGVybgorKyAgbW9uZXlfYmFzZTo6X1NfY29uc3RydWN0X3BhdHRlcm4oY2hhciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKQorKyAgeworKyAgICBwYXR0ZXJuIF9fcmV0OworKworKyAgICAvLyBUaGlzIGluc2FuZWx5IGNvbXBsaWNhdGVkIHJvdXRpbmUgYXR0ZW1wdHMgdG8gY29uc3RydWN0IGEgdmFsaWQKKysgICAgLy8gcGF0dGVybiBmb3IgdXNlIHdpdGggbW9ueWVwdW5jdC4gQSBjb3VwbGUgb2YgaW52YXJpYW50czoKKysKKysgICAgLy8gaWYgKF9fcHJlY2VkZXMpIHN5bWJvbCAtPiB2YWx1ZQorKyAgICAvLyBlbHNlIHZhbHVlIC0+IHN5bWJvbAorKworKyAgICAvLyBpZiAoX19zcGFjZSkgc3BhY2UKKysgICAgLy8gZWxzZSBub25lCisrCisrICAgIC8vIG5vbmUgPT0gbmV2ZXIgZmlyc3QKKysgICAgLy8gc3BhY2UgbmV2ZXIgZmlyc3Qgb3IgbGFzdAorKworKyAgICAvLyBBbnkgZWxlZ2FudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBhcmUgd2VsY29tZS4KKysgICAgc3dpdGNoIChfX3Bvc24pCisrICAgICAgeworKyAgICAgIGNhc2UgMDoKKysgICAgICBjYXNlIDE6CisrCS8vIDEgVGhlIHNpZ24gcHJlY2VkZXMgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisrCV9fcmV0LmZpZWxkWzBdID0gc2lnbjsKKysJaWYgKF9fc3BhY2UpCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBzdGFydHMgd2l0aCBzaWduLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBzdGFydHMgd2l0aCBzaWduIGFuZCBlbmRzIHdpdGggbm9uZS4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgfQorKwlicmVhazsKKysgICAgICBjYXNlIDI6CisrCS8vIDIgVGhlIHNpZ24gZm9sbG93cyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KKysJaWYgKF9fc3BhY2UpCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBlaXRoZXIgZW5kcyB3aXRoIHNpZ24uCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJICAgIF9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIGVuZHMgd2l0aCBzaWduIHRoZW4gbm9uZS4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCSAgICBfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgfQorKwlicmVhazsKKysgICAgICBjYXNlIDM6CisrCS8vIDMgVGhlIHNpZ24gaW1tZWRpYXRlbHkgcHJlY2VkZXMgdGhlIHN5bWJvbC4KKysJaWYgKF9fcHJlY2VkZXMpCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSBzaWduOworKwkgICAgX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwlicmVhazsKKysgICAgICBjYXNlIDQ6CisrCS8vIDQgVGhlIHNpZ24gaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgc3ltYm9sLgorKwlpZiAoX19wcmVjZWRlcykKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc2lnbjsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrCTsKKysgICAgICB9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrCQkJCQkJICAgICBjb25zdCBjaGFyKikKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8Y2hhciwgdHJ1ZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgaWYgKCFfX25wb3NuKQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIoKSI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sCisrCQkJCQkJCV9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgIC8vIF9JbnRsID09IHRydWUKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0lOVF9DVVJSX1NZTUJPTCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLAorKwkJCQkJCSAgICAgIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysJCQkJCQkgICAgICBjb25zdCBjaGFyKikKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8Y2hhciwgZmFsc2U+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX0RFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgaWYgKCFfX25wb3NuKQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIoKSI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sCisrCQkJCQkJCV9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgIC8vIF9JbnRsID09IGZhbHNlCisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0ZSQUNfRElHSVRTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkJY29uc3QgY2hhciopCisrI2Vsc2UKKysJCQkJCQkJY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTx3Y2hhcl90LCB0cnVlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKysJICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbW9uZXRhcnkKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsc2UKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCisrCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0lOVF9DVVJSX1NZTUJPTCwgX19jbG9jKTsKKysKKysJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7CisrCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOworKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICB0cnkKKysJICAgIHsKKysJICAgICAgbWJzdGF0ZV90IF9fc3RhdGU7CisrCSAgICAgIHNpemVfdCBfX2xlbiA9IHN0cmxlbihfX2Nwb3NzaWduKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfcHMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19wcywgJl9fY3Bvc3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX3djc19wczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKysJICAgICAgaWYgKCFfX25wb3NuKQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOworKwkgICAgICBlbHNlIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAgICAgLy8gX0ludGwgPT0gdHJ1ZS4KKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgICB9CisrCSAgY2F0Y2ggKC4uLikKKysJICAgIHsKKysJICAgICAgZGVsZXRlIF9NX2RhdGE7CisrCSAgICAgIF9NX2RhdGEgPSAwOworKwkgICAgICBkZWxldGUgX193Y3NfcHM7CisrCSAgICAgIGRlbGV0ZSBfX3djc19uczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCSAgICB9CisrCisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywKKysJCQkJCQkgICAgICBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgdm9pZAorKyAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJCQkJCSAgICAgICBjb25zdCBjaGFyKikKKysjZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX25hbWUpCisrI2VuZGlmCisrICB7CisrICAgIGlmICghX01fZGF0YSkKKysgICAgICBfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTx3Y2hhcl90LCBmYWxzZT47CisrCisrICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKysJICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbW9uZXRhcnkKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsc2UKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisrICAgICAgICAgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysKKysJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fQ1VSUkVOQ1lfU1lNQk9MLCBfX2Nsb2MpOworKworKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKKysJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7CisrCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgdHJ5CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgbWJzdGF0ZV90IF9fc3RhdGU7CisrICAgICAgICAgICAgICBzaXplX3QgX19sZW47CisrICAgICAgICAgICAgICBfX2xlbiA9IHN0cmxlbihfX2Nwb3NzaWduKTsKKysgICAgICAgICAgICAgIGlmIChfX2xlbikKKysgICAgICAgICAgICAgICAgeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfcHMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19wcywgJl9fY3Bvc3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX3djc19wczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jbmVnc2lnbik7CisrCSAgICAgIGlmICghX19ucG9zbikKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIigpIjsKKysJICAgICAgZWxzZSBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgICB9CisrICAgICAgICAgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICAgICAgICAgICAgX01fZGF0YSA9IDA7CisrCSAgICAgIGRlbGV0ZSBfX3djc19wczsKKysJICAgICAgZGVsZXRlIF9fd2NzX25zOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCSAgICB9CisrCisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0ZSQUNfRElHSVRTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbnBvc24pOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQorKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46On5tb25leXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKKysgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODgzZWMxYQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTAsMCArMSwxNjAgQEAKKysvLyBzdGQ6Om51bXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4zLjEuMiAgbnVtcHVuY3QgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBudW1wdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX251bXB1bmN0X2NhY2hlPGNoYXI+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7CisrCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbnVtX2Jhc2U6Ol9TX29lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfb3V0W19faV0gPSBfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19pXTsKKysKKysJICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX251bV9iYXNlOjpfU19pZW5kOyArK19faikKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX2luW19fal0gPSBfX251bV9iYXNlOjpfU19hdG9tc19pbltfX2pdOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCisrCSAgLy8gQ2hlY2sgZm9yIE5VTEwsIHdoaWNoIGltcGxpZXMgbm8gZ3JvdXBpbmcuCisrCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gJ1wwJykKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCX0KKysKKysgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9ICJ0cnVlIjsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gNDsKKysgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gImZhbHNlIjsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWVfc2l6ZSA9IDU7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbnVtcHVuY3Q8Y2hhcj46On5udW1wdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX251bXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7CisrCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldKTsKKysKKysJICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX251bV9iYXNlOjpfU19pZW5kOyArK19faikKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX2luW19fal0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19pbltfX2pdKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICAvLyBOQjogSW4gdGhlIEdOVSBtb2RlbCB3Y2hhcl90IGlzIGFsd2F5cyAzMiBiaXQgd2lkZS4KKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrCisrCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gTCdcMCcpCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwl9CisrCisrICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKysgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSBMInRydWUiOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OworKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSBMImZhbHNlIjsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWVfc2l6ZSA9IDU7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbnVtcHVuY3Q8d2NoYXJfdD46On5udW1wdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysgI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTA3MDdkNworLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworQEAgLTAsMCArMSw0MDYgQEAKKysvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4zLjIgLSB0aW1lX3B1dCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8Y2hhcj46OgorKyAgICBfTV9wdXQoY2hhciogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IGNoYXIqIF9fZm9ybWF0LAorKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX19zdHJmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RyZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gJ1wwJzsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX3RpbWVwdW5jdF9jYWNoZTxjaGFyPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19nZXRfY19sb2NhbGUoKTsKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9ICIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9ICIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gIiI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9hbSA9ICJBTSI7CisrCSAgX01fZGF0YS0+X01fcG0gPSAiUE0iOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9ICIiOworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX01fZGF0YS0+X01fZGF5MSA9ICJTdW5kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSAiTW9uZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gIlR1ZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSAiV2VkbmVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gIlRodXJzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gIkZyaWRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9ICJTYXR1cmRheSI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9ICJTdW4iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gIk1vbiI7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSAiVHVlIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9ICJXZWQiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gIlRodSI7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSAiRnJpIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9ICJTYXQiOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9ICJKYW51YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gIkZlYnJ1YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gIk1hcmNoIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gIkFwcmlsIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gIk1heSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9ICJKdW5lIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gIkp1bHkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSAiQXVndXN0IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gIlNlcHRlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9ICJPY3RvYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gIk5vdmVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gIkRlY2VtYmVyIjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSAiSmFuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9ICJGZWIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gIk1hciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSAiQXByIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9ICJNYXkiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gIkp1biI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSAiSnVsIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9ICJBdWciOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gIlNlcCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSAiT2N0IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9ICJOb3YiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gIkRlYyI7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKERfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKERfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX0RfVF9GTVQsCisrCQkJCQkJCSAgICAgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fbmxfbGFuZ2luZm9fbChBTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG0gPSBfX25sX2xhbmdpbmZvX2woUE1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVF9BTVBNLCBfX2Nsb2MpOworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX01fZGF0YS0+X01fZGF5MSA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gX19ubF9sYW5naW5mb19sKERBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX25sX2xhbmdpbmZvX2woREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gX19ubF9sYW5naW5mb19sKERBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX25sX2xhbmdpbmZvX2woREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX19ubF9sYW5naW5mb19sKEFCREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzcsIF9fY2xvYyk7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX19ubF9sYW5naW5mb19sKE1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IF9fbmxfbGFuZ2luZm9fbChNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX19ubF9sYW5naW5mb19sKE1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBfX25sX2xhbmdpbmZvX2woTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IF9fbmxfbGFuZ2luZm9fbChNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX19ubF9sYW5naW5mb19sKE1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBfX25sX2xhbmdpbmZvX2woTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IF9fbmxfbGFuZ2luZm9fbChNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX19ubF9sYW5naW5mb19sKE1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX19ubF9sYW5naW5mb19sKE1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gX19ubF9sYW5naW5mb19sKE1PTl8xMiwgX19jbG9jKTsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTIsIF9fY2xvYyk7CisrCX0KKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjoKKysgICAgX01fcHV0KHdjaGFyX3QqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCB3Y2hhcl90KiBfX2Zvcm1hdCwKKysJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwgX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisrCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyNlbHNlCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSB3Y3NmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorKyAgICAgIGlmIChfX2xlbiA9PSAwKQorKwlfX3NbMF0gPSBMJ1wwJzsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX3RpbWVwdW5jdF9jYWNoZTx3Y2hhcl90PjsKKysKKysjd2FybmluZyB3aWRlIHRpbWUgc3R1ZmYKKysvLyAgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19nZXRfY19sb2NhbGUoKTsKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IEwiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IEwiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gTCIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gTCIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9hbSA9IEwiQU0iOworKwkgIF9NX2RhdGEtPl9NX3BtID0gTCJQTSI7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gTCIiOworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX01fZGF0YS0+X01fZGF5MSA9IEwiU3VuZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gTCJNb25kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBMIlR1ZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBMIldlZG5lc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IEwiVGh1cnNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBMIkZyaWRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9IEwiU2F0dXJkYXkiOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBMIlN1biI7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSBMIk1vbiI7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBMIlR1ZSI7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBMIldlZCI7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSBMIlRodSI7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBMIkZyaSI7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBMIlNhdCI7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gTCJKYW51YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gTCJGZWJydWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IEwiTWFyY2giOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBMIkFwcmlsIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gTCJNYXkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBMIkp1bmUiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBMIkp1bHkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBMIkF1Z3VzdCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IEwiU2VwdGVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gTCJPY3RvYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gTCJOb3ZlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IEwiRGVjZW1iZXIiOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IEwiSmFuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IEwiRmViIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IEwiTWFyIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IEwiQXByIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IEwiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IEwiSnVuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IEwiSnVsIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IEwiQXVnIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IEwiU2VwIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IEwiT2N0IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IEwiTm92IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IEwiRGVjIjsKKysJfQorKyNpZiAwCisrICAgICAgZWxzZQorKwl7CisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKysKKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCAqX193OyB9IF9fdTsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX0RfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW0gPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dQTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG0gPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVF9BTVBNLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IF9fdS5fX3c7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9IF9fdS5fX3c7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IF9fdS5fX3c7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gX191Ll9fdzsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fdS5fX3c7CisrCX0KKysjZW5kaWYgLy8gMAorKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmJhOGU4NTgKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorQEAgLTAsMCArMSw2OCBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IGZ1bmN0aW9ucworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4zLjIgLSB0aW1lX3B1dCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMpCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisrICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NhY2hlX3R5cGUqIF9fY2FjaGUsIHNpemVfdCBfX3JlZnMpCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShfX2NhY2hlKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisrICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorKwkJCQkgICAgIHNpemVfdCBfX3JlZnMpCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCisrICAgIHsKKysgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IF9fdG1wOworKyAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6fl9fdGltZXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9uYW1lX3RpbWVwdW5jdCAhPSBfU19nZXRfY19uYW1lKCkpCisrCWRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrICAgIH0KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQoraW5kZXggZjQwZGRjZi4uYzU3YTc1MSAxMDA3NTUKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK0BAIC0xNTgyMiw2ICsxNTgyMiw5IEBAIGZpCisgICAjIERlZmF1bHQgdG8gImdlbmVyaWMiLgorICAgaWYgdGVzdCAkZW5hYmxlX2Nsb2NhbGVfZmxhZyA9IGF1dG87IHRoZW4KKyAgICAgY2FzZSAke3RhcmdldF9vc30gaW4KKysgICAgICAqLXVjbGliYyopCisrICAgICAgICBlbmFibGVfY2xvY2FsZV9mbGFnPXVjbGliYworKyAgICAgICAgOzsKKyAgICAgICBsaW51eCogfCBnbnUqIHwga2ZyZWVic2QqLWdudSB8IGtuZXRic2QqLWdudSkKKyAJZW5hYmxlX2Nsb2NhbGVfZmxhZz1nbnUKKyAJOzsKK0BAIC0xNjA3OSw2ICsxNjA4Miw3OCBAQCAkYXNfZWNobyAibmV3bGliIiA+JjY7IH0KKyAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCisgICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorICAgICAgIDs7CisrICAgIHVjbGliYykKKysgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdWNsaWJjIiA+JjUKKyskYXNfZWNobyAidWNsaWJjIiA+JjY7IH0KKysKKysgICAgICAjIERlY2xhcmUgaW50ZW50aW9uIHRvIHVzZSBnZXR0ZXh0LCBhbmQgYWRkIHN1cHBvcnQgZm9yIHNwZWNpZmljCisrICAgICAgIyBsYW5ndWFnZXMuCisrICAgICAgIyBGb3Igc29tZSByZWFzb24sIEFMTF9MSU5HVUFTIGhhcyB0byBiZSBiZWZvcmUgQU0tR05VLUdFVFRFWFQKKysgICAgICBBTExfTElOR1VBUz0iZGUgZnIiCisrCisrICAgICAgIyBEb24ndCBjYWxsIEFNLUdOVS1HRVRURVhUIGhlcmUuIEluc3RlYWQsIGFzc3VtZSBnbGliYy4KKysgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1zZ2ZtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG1zZ2ZtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2hlY2tfbXNnZm10K3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10PSIkY2hlY2tfbXNnZm10IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10PSJ5ZXMiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQiICYmIGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10PSJubyIKKytmaQorK2ZpCisrY2hlY2tfbXNnZm10PSRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdAorK2lmIHRlc3QgLW4gIiRjaGVja19tc2dmbXQiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNoZWNrX21zZ2ZtdCIgPiY1CisrJGFzX2VjaG8gIiRjaGVja19tc2dmbXQiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCisrICAgICAgICBVU0VfTkxTPXllcworKyAgICAgIGZpCisrICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCisrICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCisrICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCisrICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCisrICAgICAgZG9uZQorKworKworKworKyAgICAgIENMT0NBTEVfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrICAgICAgQ0xPQ0FMRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworKyAgICAgIENDT0xMQVRFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKyAgICAgIENDVFlQRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysgICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKyAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysgICAgICA7OworICAgZXNhYworIAorICAgIyBUaGlzIGlzIHdoZXJlIHRoZSB0ZXN0c3VpdGUgbG9va3MgZm9yIGxvY2FsZSBjYXRhbG9ncywgdXNpbmcgdGhlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmggYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAoraW5kZXggNTgwZDcyNS4uM2ZlNjFiOCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAorQEAgLTEwMSw3ICsxMDEsOSBAQCB1c2luZyBzdGQ6OndtZW1jbXA7CisgdXNpbmcgc3RkOjp3bWVtY3B5OworIHVzaW5nIHN0ZDo6d21lbW1vdmU7CisgdXNpbmcgc3RkOjp3bWVtc2V0OworKyNpZiBfR0xJQkNYWF9IQVZFX1dDU0ZUSU1FCisgdXNpbmcgc3RkOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAKKyAjaWYgX0dMSUJDWFhfVVNFX0M5OQorIHVzaW5nIHN0ZDo6d2NzdG9sZDsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIKK2luZGV4IDBlNmIxZmMuLjQwNWFlZTIgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgorQEAgLTE3NSw3ICsxNzUsOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorICAgdXNpbmcgOjp3Y3Njb2xsOworICAgdXNpbmcgOjp3Y3NjcHk7CisgICB1c2luZyA6Ondjc2NzcG47CisrI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKKyAgIHVzaW5nIDo6d2NzZnRpbWU7CisrI2VuZGlmCisgICB1c2luZyA6Ondjc2xlbjsKKyAgIHVzaW5nIDo6d2NzbmNhdDsKKyAgIHVzaW5nIDo6d2NzbmNtcDsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYmJmZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2gKQEAgLTAsMCArMSwyNTcgQEAKK0Zyb20gNmEzZTg1MDZhMTJjMTI3MjhkOGIyOTkwMWRlZmQ3MzhiZTQzNzU3ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQyOjM2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDUvMzVdIHVjbGliYy1sb2NhbGUtbm9fX3gKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICAgNDUgKysrKysrKysrKysrKysrKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8ICAgMTQgLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgICAxICsKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjICAgICAgICB8ICAgIDcgLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgICA3IC0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjICAgICAgIHwgICAgNyArLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8ICAgMTggKysrLS0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICAgIDQgLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICAgIDMgLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8ICAgIDMgLS0KKyAxMCBmaWxlcyBjaGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAoraW5kZXggMmFlM2U0YS4uZTc0ZmRkZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitAQCAtNjAsNCArNjAsNDkgQEAgZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3N4ZnJtX2wpIF9fd2NzeGZybV9sOworIGV4dGVybiAiQyIgX190eXBlb2Yod2N0eXBlX2wpIF9fd2N0eXBlX2w7CisgI2VuZGlmCisgCisrIyBkZWZpbmUgX19ubF9sYW5naW5mb19sIG5sX2xhbmdpbmZvX2wKKysjIGRlZmluZSBfX3N0cmNvbGxfbCBzdHJjb2xsX2wKKysjIGRlZmluZSBfX3N0cmZ0aW1lX2wgc3RyZnRpbWVfbAorKyMgZGVmaW5lIF9fc3RydG9kX2wgc3RydG9kX2wKKysjIGRlZmluZSBfX3N0cnRvZl9sIHN0cnRvZl9sCisrIyBkZWZpbmUgX19zdHJ0b2xkX2wgc3RydG9sZF9sCisrIyBkZWZpbmUgX19zdHJ4ZnJtX2wgc3RyeGZybV9sCisrIyBkZWZpbmUgX19uZXdsb2NhbGUgbmV3bG9jYWxlCisrIyBkZWZpbmUgX19mcmVlbG9jYWxlIGZyZWVsb2NhbGUKKysjIGRlZmluZSBfX2R1cGxvY2FsZSBkdXBsb2NhbGUKKysjIGRlZmluZSBfX3VzZWxvY2FsZSB1c2Vsb2NhbGUKKysKKysjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrIyAgZGVmaW5lIF9faXN3Y3R5cGVfbCBpc3djdHlwZV9sCisrIyAgZGVmaW5lIF9fdG93bG93ZXJfbCB0b3dsb3dlcl9sCisrIyAgZGVmaW5lIF9fdG93dXBwZXJfbCB0b3d1cHBlcl9sCisrIyAgZGVmaW5lIF9fd2NzY29sbF9sIHdjc2NvbGxfbAorKyMgIGRlZmluZSBfX3djc2Z0aW1lX2wgd2NzZnRpbWVfbAorKyMgIGRlZmluZSBfX3djc3hmcm1fbCB3Y3N4ZnJtX2wKKysjICBkZWZpbmUgX193Y3R5cGVfbCB3Y3R5cGVfbAorKyMgZW5kaWYKKysKKysjZWxzZQorKyMgZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICBubF9sYW5naW5mbygoTikpCisrIyBkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKysjIGRlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyMgd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworKyMgZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCisrIyBkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorKyMgZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKysvLyMgZGVmaW5lIF9fdXNlbG9jYWxlID8KKysvLworKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysjICBkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorKyMgIGRlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICAgdG93bG93ZXIoKEMpKQorKyMgIGRlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICAgdG93dXBwZXIoKEMpKQorKyMgIGRlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorKy8vIyAgZGVmaW5lIF9fd2NzZnRpbWVfbChTLCBNLCBGLCBULCBMKSAgd2NzZnRpbWUoKFMpLCAoTSksIChGKSwgKFQpKQorKyMgIGRlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCisrIyAgZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyMgZW5kaWYKKysKKyAjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworaW5kZXggNTA4MWRjMS4uMjE0MzBkMCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMzksMjAgKzM5LDYgQEAKKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorLSNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKy0jZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorLSN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CistI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorLSNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICB0ZW1wbGF0ZTw+CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAoraW5kZXggZGEwN2MxZi4uNGJjYTVmMSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTY4LDYgKzY4LDcgQEAgbmFtZXNwYWNlIF9fZ251X2N4eAorIHsKKyAgIGV4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKyB9CisrI2RlZmluZSBfX3VzZWxvY2FsZSB1c2Vsb2NhbGUKKyAjZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK2luZGV4IGMyNjY0YTcuLmVjNWMzMjkgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitAQCAtMzYsMTMgKzM2LDYgQEAKKyAjaW5jbHVkZSA8bG9jYWxlPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKy0jZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKy0jZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCistI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworaW5kZXggNzI5NGUzYS4uN2IxMjg2MSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworQEAgLTM4LDEzICszOCw2IEBACisgI3VuZGVmIF9MSUJDCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQorLSNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQorLSNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQorLSNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK2luZGV4IDEzNTk0ZDkuLmQ3NjkzYjQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK0BAIC0zOSwxMyArMzksMTAgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLWV4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworICN1bmRlZiBnZXR0ZXh0CistI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBkY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorICNlbHNlCistI3VuZGVmIGdldHRleHQKKyAjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKyAjZW5kaWYKKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAoraW5kZXggMTQyNDA3OC4uZDg5ZGEzMyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0zNiwxNSArMzYsMTEgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy1leHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKy1leHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKKy0jZWxzZQorLSN1bmRlZiBfX3RleHRkb21haW4KKy0jdW5kZWYgX19iaW5kdGV4dGRvbWFpbgorLSNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKy0jZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyN1bmRlZiB0ZXh0ZG9tYWluCisrI3VuZGVmIGJpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSB0ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorICNlbmRpZgorIAorICAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KK0BAIC03MCw3ICs2Niw3IEBAIGV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorICAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAorIAkJCSAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAorICAgICB7CistICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworKyAgICAgIGJpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisgICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CisgICAgIH0KKyAKK0BAIC05MCw3ICs4Niw3IEBAIGV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorICAgICB7CisgICAgICAgLy8gTm8gZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSwgYXNzdW1lIHRoZSBjYXRhbG9nIGV4aXN0cyBhbmQgY2FuCisgICAgICAgLy8gYmUgdXNlZC4KKy0gICAgICBfX3RleHRkb21haW4oX19zLmNfc3RyKCkpOworKyAgICAgIHRleHRkb21haW4oX19zLmNfc3RyKCkpOworICAgICAgIHJldHVybiAwOworICAgICB9CisgCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworaW5kZXggYWE1MjczMS4uMmU2ZjgwYSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTQzLDEwICs0Myw2IEBACisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIHZhbGlkIHBhdHRlcm4gY29uc2lzdGluZyBvZiBzb21lIGNvbWJpbmF0aW9uIG9mOgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCA4ODNlYzFhLi4yYzcwNjQyIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTQxLDkgKzQxLDYgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCisgeworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitpbmRleCBlMDcwN2Q3Li5kODQ4ZWQ1IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworQEAgLTQwLDkgKzQwLDYgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCisgeworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDA2ODU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApAQCAtMCwwICsxLDY4IEBACitGcm9tIDIyNTUxMWEzYWViMTkzYTkxNmIzOTk5ZjBiNjQwYTM5MmNhYTY3Y2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0NTo1NyArMDQwMAorU3ViamVjdDogW1BBVENIIDA2LzM1XSB1Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIHwgICAgNCArKy0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgfCAgIDEzICsrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCAyZTZmODBhLi4zMWViYjlmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtNDAxLDcgKzQwMSw3IEBAIG5hbWVzcGFjZSBzdGQKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CistIyBlbHNlCisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworICMgZW5kaWYKK0BAIC01NTYsNyArNTU2LDcgQEAgbmFtZXNwYWNlIHN0ZAorICMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKy0jIGVsc2UKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisgIyBlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCAyYzcwNjQyLi5kNWM4OTYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTEyNywxMiArMTI3LDI1IEBAIG5hbWVzcGFjZSBzdGQKKyAJeworIAkgIC8vIE5hbWVkIGxvY2FsZS4KKyAJICAvLyBOQjogSW4gdGhlIEdOVSBtb2RlbCB3Y2hhcl90IGlzIGFsd2F5cyAzMiBiaXQgd2lkZS4KKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbnVtZXJpYworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKyAJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKyAKKyAJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisgCisgCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gTCdcMCcpCisgCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODUxMTIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaApAQCAtMCwwICsxLDU0MiBAQAorRnJvbSA2ZmZlN2M0NmY1MmQyNzg2NGMzZGYzNjYzZTE2ZWM5ZGRlZTcxZThmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDY6NTggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNy8zNV0gdWNsaWJjLWxvY2FsZS11cGRhdGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICAgIDMgKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgICA3NCArKysrKysrKystLS0tLS0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oICAgICAgIHwgICA0MiArKysrKystLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgICA1MSArKysrKysrKysrLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgICAxMiArKy0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgICAgICAgfCAgIDM0ICsrKysrLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgICAgNSArKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgICAxOCArKystLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCAgIHwgICAxNyArKystLQorIDkgZmlsZXMgY2hhbmdlZCwgMTU4IGluc2VydGlvbnMoKyksIDk4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitpbmRleCBlNzRmZGRmLi45NzFhNmI0IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC0zMSw2ICszMSw5IEBACisgCisgI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisgI2luY2x1ZGUgPGNsb2NhbGU+CisrI2luY2x1ZGUgPGNzdGRsaWI+CisrI2luY2x1ZGUgPGNzdHJpbmc+CisrI2luY2x1ZGUgPGNzdGRkZWY+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworaW5kZXggMjE0MzBkMC4uMWI5ZDhlMSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMzksMjMgKzM5LDIwIEBACisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistbmFtZXNwYWNlIHN0ZAorLXsKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgdGVtcGxhdGU8PgorICAgICB2b2lkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2Y7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19mOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPD4KK0BAIC02MywxNiArNjAsMTMgQEAgbmFtZXNwYWNlIHN0ZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2Q7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fZDsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB0ZW1wbGF0ZTw+CitAQCAtODAsMTYgKzc0LDEzIEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19sZDsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fbGQ7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdm9pZAorQEAgLTExMCwxNyArMTAxLDE4IEBAIG5hbWVzcGFjZSBzdGQKKyAgIHZvaWQKKyAgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorICAgeworLSAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICBpZiAoX19jbG9jICYmIF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKyAgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsKKyAgIH0KKyAKKyAgIF9fY19sb2NhbGUKKyAgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKyAgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KKy19IC8vIG5hbWVzcGFjZSBzdGQKKyAKKy1uYW1lc3BhY2UgX19nbnVfY3h4CisteworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKysKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorKworICAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9CisgICAgIHsKKyAgICAgICAiTENfQ1RZUEUiLAorQEAgLTEzOCw5ICsxMzAsMTEgQEAgbmFtZXNwYWNlIF9fZ251X2N4eAorICAgICAgICJMQ19JREVOVElGSUNBVElPTiIKKyAjZW5kaWYKKyAgICAgfTsKKy19CisgCistbmFtZXNwYWNlIHN0ZAorLXsKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisrCisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOworLX0gIC8vIG5hbWVzcGFjZSBzdGQKKysKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAoraW5kZXggNGJjYTVmMS4uNjRhNmQ0NiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTM5LDIxICszOSwyMyBAQAorICNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyAKKyAjaW5jbHVkZSA8Y3N0cmluZz4gICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnN0cmxlbgorLSNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c25wcmludGYgb3Igc3RkOjpzcHJpbnRmCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjp2c25wcmludGYgb3Igc3RkOjp2c3ByaW50ZgorICNpbmNsdWRlIDxjbG9jYWxlPgorICNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggdGhpcworICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysjaWZkZWYgX0dMSUJDWFhfVVNFX0lDT05WCisgI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLSNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2lmZGVmIEhBVkVfTElCSU5UTF9ICisrI2luY2x1ZGUgPGxpYmludGwuaD4JCS8vIEZvciBtZXNzYWdlcworICNlbmRpZgorKyNpbmNsdWRlIDxjc3RkYXJnPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHdoYXQgaXMgX0dMSUJDWFhfQ19MT0NBTEVfR05VIGZvcgorKy8vIHBzbTogdXNlZCBpbiBvcy9nbnUtbGludXgvY3R5cGVfbm9uaW5saW5lLmgKKyAjZW5kaWYKKyAjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCisgCitAQCAtNzgsMjMgKzgwLDI1IEBAIG5hbWVzcGFjZSBzdGQKKyAjZWxzZQorICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKyAjZW5kaWYKKy0KKy0gIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKy0gIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKy0gIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisrICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCisrICAvLyBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworKyAgLy8gdGhlIHVuc2FmZSB2c3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisgICAvLyBiZSBhdm9pZGVkLgorLSAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorLSAgICBpbnQKKy0gICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwKKy0JCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorLQkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKy0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQorKyAgICBpbmxpbmUgaW50CisrICAgIF9fY29udmVydF9mcm9tX3YoY29uc3QgX19jX2xvY2FsZSYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCV9fY2xvYyBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCisrI2VuZGlmCisrCQkgICAgICwKKysJCSAgICAgY2hhciogX19vdXQsCisrCQkgICAgIGNvbnN0IGludCBfX3NpemUsCisrCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LCAuLi4pCisgICAgIHsKKysgICAgICB2YV9saXN0IF9fYXJnczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysKKyAgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCistCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjKQorLSAgICB7CisgIyBpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAgICAgICBjaGFyKiBfX29sZCA9IHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX29sZCkgKyAxXTsKK0BAIC0xMDMsNyArMTA3LDkgQEAgbmFtZXNwYWNlIHN0ZAorICMgZW5kaWYKKyAjZW5kaWYKKyAKKy0gICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CisrICAgICAgdmFfc3RhcnQoX19hcmdzLCBfX2ZtdCk7CisrICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjp2c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fYXJncyk7CisrICAgICAgdmFfZW5kKF9fYXJncyk7CisgCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisgICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworaW5kZXggN2IxMjg2MS4uMTNlMDExZCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworQEAgLTMzLDE2ICszMywyMCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKKyAgIC8vIHZhcmlvdXMgL2NvbmZpZy9vcy8qIGZpbGVzLgorLSAgdGVtcGxhdGU8PgorICAgICBjdHlwZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisgICAgIDogY3R5cGU8Y2hhcj4oMCwgZmFsc2UsIF9fcmVmcykKKyAgICAgeworQEAgLTU3LDYgKzYxLDggQEAgbmFtZXNwYWNlIHN0ZAorICNlbmRpZgorIAl9CisgICAgIH0KKysgICAgY3R5cGVfYnluYW1lPGNoYXI+Ojp+Y3R5cGVfYnluYW1lKCkKKysgICAgeyB9CisgCisgI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCitAQCAtMTM4LDE3ICsxNDQsMzMgQEAgbmFtZXNwYWNlIHN0ZAorICAgY3R5cGU8d2NoYXJfdD46OgorICAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorICAgeworLSAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorLSAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KKysgICAgLy8gVGhlIGNhc2Ugb2YgX19tID09IGN0eXBlX2Jhc2U6OnNwYWNlIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQsCisrICAgIC8vIGR1ZSB0byBpdHMgdXNlIGluIG1hbnkgaXN0cmVhbSBmdW5jdGlvbnMuICBUaGVyZWZvcmUgd2UgZGVhbCB3aXRoCisrICAgIC8vIGl0IGZpcnN0LCBleHBsb2l0aW5nIHRoZSBrbm93bGVkZ2UgdGhhdCBvbiBHTlUgc3lzdGVtcyBfTV9iaXRbNV0KKysgICAgLy8gaXMgdGhlIG1hc2sgY29ycmVzcG9uZGluZyB0byBjdHlwZV9iYXNlOjpzcGFjZS4gIE5COiBhbiBlbmNvZGluZworKyAgICAvLyBjaGFuZ2Ugd291bGQgbm90IGFmZmVjdCBjb3JyZWN0bmVzcyEKKysKKyAgICAgYm9vbCBfX3JldCA9IGZhbHNlOworLSAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworLSAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCistICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKy0JICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKy0JeworLQkgIF9fcmV0ID0gdHJ1ZTsKKy0JICBicmVhazsKKy0JfQorKyAgICBpZiAoX19tID09IF9NX2JpdFs1XSkKKysgICAgICBfX3JldCA9IF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrWzVdLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgIGVsc2UKKysgICAgICB7CisrCS8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrCS8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKwljb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0pCisrCSAgICB7CisrCSAgICAgIGlmIChfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJCXsKKysJCSAgX19yZXQgPSB0cnVlOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgZWxzZSBpZiAoX19tID09IF9NX2JpdFtfX2JpdGN1cl0pCisrCQlicmVhazsKKysJICAgIH0KKysgICAgICB9CisrCisgICAgIHJldHVybiBfX3JldDsKKyAgIH0KKyAKK0BAIC0yOTAsNCArMzEyLDUgQEAgbmFtZXNwYWNlIHN0ZAorICNlbmRpZgorICAgfQorICNlbmRpZiAvLyAgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKy19CisrCisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitpbmRleCBkODlkYTMzLi4wNjc2NTdhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTUzLDEyICs1MywxNiBAQAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKyAJCQkJc2l6ZV90IF9fcmVmcykKKy0gICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCistICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoTlVMTCksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKE5VTEwpCisgICAgICB7CistICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworLSAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbX19sZW5dOworKyAgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7CisgICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgLy8gTGFzdCB0byBhdm9pZCBsZWFraW5nIG1lbW9yeSBpZiBuZXcgdGhyb3dzLgorKyAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisgICAgICB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworaW5kZXggMzFlYmI5Zi4uNzY3OWI5YyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTMzLDkgKzMzLDE0IEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworQEAgLTIwNiw3ICsyMTEsNyBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgfQorIAlicmVhazsKKyAgICAgICBkZWZhdWx0OgorLQk7CisrCV9fcmV0ID0gcGF0dGVybigpOworICAgICAgIH0KKyAgICAgcmV0dXJuIF9fcmV0OworICAgfQorQEAgLTM5MCw3ICszOTUsOSBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKyAJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKy0JICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAJICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKyAJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworICNlbmRpZgorIAorQEAgLTQ3Nyw4ICs0ODQsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICAgICAgZnJlZShfX29sZCk7CisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorIAkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAJICAgIH0KK0BAIC00OTgsOCArNTA1LDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgIGZyZWUoX19vbGQpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCX0KKyAgICAgfQorQEAgLTU0NSw4ICs1NTIsMTEgQEAgbmFtZXNwYWNlIHN0ZAorIAkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCisgCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCistCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrICAgICAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworKyAgICAgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworKyAgICAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworICNlbmRpZgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworQEAgLTYzMyw4ICs2NDMsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICAgICAgZnJlZShfX29sZCk7CisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgCSAgICB9CitAQCAtNjUzLDggKzY2Myw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICBmcmVlKF9fb2xkKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorIAl9CisgICAgIH0KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggZDVjODk2MS4uOGFlODk2OSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworaW5kZXggZDg0OGVkNS4uZjI0ZDUzZSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC01MywxMSArNTMsMTQgQEAgbmFtZXNwYWNlIHN0ZAorICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKyAJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisgI2Vsc2UKKy0gICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworKyAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmZ0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKy0gICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistICAgICAgZnJlZShfX29sZCk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICAgICBpZiAoX19sZW4gPT0gMCkKK0BAIC0yMDcsMTEgKzIxMCwxNCBAQCBuYW1lc3BhY2Ugc3RkCisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorIAkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAjZWxzZQorLSAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKyAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworLSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0gICAgICBmcmVlKF9fb2xkKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorICAgICAgIGlmIChfX2xlbiA9PSAwKQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAoraW5kZXggYmE4ZTg1OC4uMTY2NWRkZSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtNTAsMTIgKzUwLDIxIEBACisgICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisgCQkJCSAgICAgc2l6ZV90IF9fcmVmcykKKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCistICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKKysgICAgX01fbmFtZV90aW1lcHVuY3QoTlVMTCkKKyAgICAgeworLSAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworLSAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0ZDo6c3RybGVuKF9fcykgKyAxOworKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbX19sZW5dOworKyAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKyAgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IF9fdG1wOworLSAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7CisrCisrICAgICAgdHJ5CisrCXsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsgfQorKyAgICAgIGNhdGNoKC4uLikKKysJeworKwkgIGRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsKKysJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJfQorKworICAgICB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgyMzgwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gOWYyMTU4NDUxOTgxY2YwYTgwY2ZhYmRjNzlhZTMxYmI2OTc2YTgwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ4OjEwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDgvMzVdIG1pc3NpbmctZXhlY2luZm9faAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGJvZWhtLWdjL2luY2x1ZGUvZ2MuaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCBiL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAoraW5kZXggYzUxZTAxNy4uYTdiYThkYyAxMDA2NDQKKy0tLSBhL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAorKysrIGIvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCitAQCAtNTAzLDcgKzUwMyw3IEBAIEdDX0FQSSBHQ19QVFIgR0NfbWFsbG9jX2F0b21pY19pZ25vcmVfb2ZmX3BhZ2UgR0NfUFJPVE8oKHNpemVfdCBsYikpOworICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0dMSUJDX18pCisgIyBpbmNsdWRlIDxmZWF0dXJlcy5oPgorICMgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxIHx8IF9fR0xJQkNfXyA+IDIpIFwKKy0gICAgICYmICFkZWZpbmVkKF9faWE2NF9fKQorKyAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCisgIyAgIGlmbmRlZiBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgICAgZGVmaW5lIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgZW5kaWYKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwOS1jOTktc25wcmludGYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTY4Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwOS1jOTktc25wcmludGYucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSBlMzkzZTA3NmYxYWI4MmQyNWUxYWEwNGQ2ZWRlYTI3YjQxZDNlYjA2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDk6MDMgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwOS8zNV0gYzk5LXNucHJpbnRmCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCitpbmRleCBlODViZDgzLi42YWY4MzlhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KK0BAIC0xMzksNyArMTM5LDcgQEAgbmFtZXNwYWNlIHN0ZAorICAgdXNpbmcgOjp2c3ByaW50ZjsKKyB9IC8vIG5hbWVzcGFjZSBzdGQKKyAKKy0jaWYgX0dMSUJDWFhfVVNFX0M5OQorKyNpZiBfR0xJQkNYWF9VU0VfQzk5IHx8IGRlZmluZWQoX19VQ0xJQkNfXykKKyAKKyAjdW5kZWYgc25wcmludGYKKyAjdW5kZWYgdmZzY2FuZgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2Mjg1NzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDczZjY5ZDgwNmUyYzk1NjFhNTQ5OTUyMjM0MzFhMTA3NmNmZDYxNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0OTo1NyArMDQwMAorU3ViamVjdDogW1BBVENIIDEwLzM1XSBjOTktY29tcGxleC11Z2x5LWhhY2sKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWd1cmUgfCAgICAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitpbmRleCBjNTdhNzUxLi5hMTMzM2UyIDEwMDc1NQorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorQEAgLTE4NzM0LDYgKzE4NzM0LDkgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIElTTyBDOTkgc3VwcG9ydCB0byBUUjEgaW4gPGNvbXBsZXguaD4uLi4gIiA+JjY7IH0KKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8Y29tcGxleC5oPgorKyNpZmRlZiBfX1VDTElCQ19fCisrI2Vycm9yIHVnbHkgaGFjayB0byBtYWtlIHN1cmUgY29uZmlndXJlIHRlc3QgZmFpbHMgaGVyZSBmb3IgY3Jvc3MgdW50aWwgdUNsaWJjIHN1cHBvcnRzIHRoZSBjb21wbGV4IGZ1bmNzCisrI2VuZGlmCisgaW50CisgbWFpbiAoKQorIHsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMS1pbmRleF9tYWNyby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTEtaW5kZXhfbWFjcm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlNzliMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTEtaW5kZXhfbWFjcm8ucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSBiMDM3OTUzZTQwMzEyYjQ1YWI4NGVkMGEzYWQ4ODJiYjVlNDEzMTAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTE6MDIgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMS8zNV0gaW5kZXhfbWFjcm8KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZSAgICAgICB8ICAgIDMgKysrCisgbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmggfCAgICAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZSBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCitpbmRleCAzOGViMWU4Li4xNThkMjFhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCitAQCAtNTUsNiArNTUsOSBAQAorICNpbmNsdWRlIDxiaXRzL2d0aHIuaD4KKyAjaW5jbHVkZSA8dHIxL2Z1bmN0aW9uYWw+CisgCisrLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLworKyN1bmRlZiBpbmRleAorKworICMgaWZkZWYgX19HQworICMgICBkZWZpbmUgX19HQ19DT05TVCBjb25zdAorICMgZWxzZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgKK2luZGV4IGQ3YjVjYmQuLmI5YjNhY2IgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgKK0BAIC00OCw2ICs0OCw5IEBACisgI2luY2x1ZGUgPGV4dC9tZW1vcnk+IC8vIEZvciB1bmluaXRpYWxpemVkX2NvcHlfbgorICNpbmNsdWRlIDxleHQvbnVtZXJpYz4gLy8gRm9yIHBvd2VyCisgCisrLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLworKyN1bmRlZiBpbmRleAorKworIG5hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQorIHsKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMy1saWJzdGRjLW5hbWVzcGFjZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTNlZmRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMy1saWJzdGRjLW5hbWVzcGFjZS5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIDEwNGU0ZDY2MjA4ZjI3MjZiMTRkMmY1ZWViY2U5MDcwMGNiYzgzYzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1NDowMiArMDQwMAorU3ViamVjdDogW1BBVENIIDEzLzM1XSBsaWJzdGRjKystbmFtZXNwYWNlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCB8ICAgIDQgKysrLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCAgICAgfCAgICA0ICsrKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitpbmRleCAwNjc2NTdhLi5kZDc2YTZjIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTMyLDcgKzMyLDggQEAKKyAvLworIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CistCisrbmFtZXNwYWNlIHN0ZAorK3sKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKyAjZW5kaWYKK0BAIC0xMTYsMyArMTE3LDQgQEAKKyAJICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOworIAkgfQorICAgICAgfQorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK2luZGV4IDE2NjVkZGUuLjkwNWM0MzMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorQEAgLTMzLDcgKzMzLDggQEAKKyAvLworIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CistCisrbmFtZXNwYWNlIHN0ZAorK3sKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykKKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCitAQCAtNzUsMyArNzYsNCBAQAorICAgICAgIGRlbGV0ZSBfTV9kYXRhOworICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAgICAgfQorK30KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNC1zaC1wcjI0ODM2LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNC1zaC1wcjI0ODM2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOGZkNTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE0LXNoLXByMjQ4MzYucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSBlZGM5YWNiMTgxODEwZjIzNGI2YjlmN2QyODIwYjBlNGY2YTFlZWFmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTQ6NDggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNC8zNV0gc2gtcHIyNDgzNgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9tYWlsYXJjaGl2ZS9mb3J1bS5waHA/dGhyZWFkX2lkPTg5NTkzMDQmZm9ydW1faWQ9NTM0OAoraHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0yNDgzNgorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlndXJlLmFjIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IGUxMmExODAuLjEzNWJiZjUgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjMzNzgsNyArMjMzNzgsNyBAQCBmb286CS5sb25nCTI1CisgCXRsc19maXJzdF9taW5vcj0xNAorIAl0bHNfYXNfb3B0PSItbTY0IC1BZXNhbWUgLS1mYXRhbC13YXJuaW5ncyIKKyAJOzsKKy0gIHNoLSotKiB8IHNoWzM0XS0qLSopCisrICBzaC0qLSogfCBzaFszNF0qLSotKikKKyAgICAgY29uZnRlc3Rfcz0nCisgCS5zZWN0aW9uICIudGRhdGEiLCJhd1QiLEBwcm9nYml0cworIGZvbzoJLmxvbmcJMjUKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggZWJhMzU3Ny4uNjM2M2EyMSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC0zMTQxLDcgKzMxNDEsNyBAQCBmb286CS5sb25nCTI1CisgCXRsc19maXJzdF9taW5vcj0xNAorIAl0bHNfYXNfb3B0PSItbTY0IC1BZXNhbWUgLS1mYXRhbC13YXJuaW5ncyIKKyAJOzsKKy0gIHNoLSotKiB8IHNoWzM0XS0qLSopCisrICBzaC0qLSogfCBzaFszNF0qLSotKikKKyAgICAgY29uZnRlc3Rfcz0nCisgCS5zZWN0aW9uICIudGRhdGEiLCJhd1QiLEBwcm9nYml0cworIGZvbzoJLmxvbmcJMjUKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YzQ2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE1LWFybS1Vc2UtVEFSR0VUX0VORElBTl9PUFRJT04tZm9yLWRldGVybWluaW5nLU1VTFRJTEkucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRnJvbSA1MGU1MzY2MDA1YjBmNmFmMjczNzhlMmE1YzNjYjlmOTkzNmE3ZTYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTg6MzYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNS8zNV0gYXJtOiBVc2UgVEFSR0VUX0VORElBTl9PUFRJT04gZm9yIGRldGVybWluaW5nCisgTVVMVElMSUJfREVGQVVMVFMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGdjYy00LjkuMi9nY2MvY29uZmlnL2FybS9jb2ZmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvY29uZmlnL2FybS9jb2ZmLmgKKysrKyBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hcm0vY29mZi5oCitAQCAtMzIsOCArMzIsMTEgQEAKKyAjZGVmaW5lIFRBUkdFVF9ERUZBVUxUIChNQVNLX0FQQ1NfRlJBTUUpCisgCisgI2lmbmRlZiBNVUxUSUxJQl9ERUZBVUxUUworKyNpZm5kZWYgVEFSR0VUX0VORElBTl9PUFRJT04KKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fT1BUSU9OICJtbGl0dGxlLWVuZGlhbiIKKysjZW5kaWYKKyAjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIFwKKy0gIHsgIm1hcm0iLCAibWxpdHRsZS1lbmRpYW4iLCAibWZsb2F0LWFiaT1zb2Z0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKysgIHsgIm1hcm0iLCBUQVJHRVRfRU5ESUFOX09QVElPTiwgIm1mbG9hdC1hYmk9c29mdCIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiB9CisgI2VuZGlmCisgDAorIC8qIFRoaXMgaXMgQ09GRiwgYnV0IHByZWZlciBzdGFicy4gICovCitJbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvYXJtL2VsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2NvbmZpZy9hcm0vZWxmLmgKKysrKyBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hcm0vZWxmLmgKK0BAIC0xMTYsOCArMTE2LDExIEBACisgI2VuZGlmCisgCisgI2lmbmRlZiBNVUxUSUxJQl9ERUZBVUxUUworKyNpZm5kZWYgVEFSR0VUX0VORElBTl9PUFRJT04KKysjZGVmaW5lIFRBUkdFVF9FTkRJQU5fT1BUSU9OICJtbGl0dGxlLWVuZGlhbiIKKysjZW5kaWYKKyAjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIFwKKy0gIHsgIm1hcm0iLCAibWxpdHRsZS1lbmRpYW4iLCAibWZsb2F0LWFiaT1zb2Z0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiLCAiZm5vLWxlYWRpbmctdW5kZXJzY29yZSIgfQorKyAgeyAibWFybSIsIFRBUkdFVF9FTkRJQU5fT1BUSU9OLCAibWZsb2F0LWFiaT1zb2Z0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiLCAiZm5vLWxlYWRpbmctdW5kZXJzY29yZSIgfQorICNlbmRpZgorIAwKKyAjZGVmaW5lIFRBUkdFVF9BU01fRklMRV9TVEFSVF9BUFBfT0ZGIHRydWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTYtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NWVmOTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoCkBAIC0wLDAgKzEsMTkwIEBACitGcm9tIDE2MDM5N2VmM2MzMzMxMDk5YWYwMjhmMWI4ZDNlMDg1YjA3ZDg4YWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1OTowMCArMDQwMAorU3ViamVjdDogW1BBVENIIDE2LzM1XSBnY2M6IHBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb246IGNvZGVzb3VyY2VyeV0KKy0tLQorIGdjYy9NYWtlZmlsZS5pbiAgICAgfCAgICAyICstCisgZ2NjL2NvbW1vbi5vcHQgICAgICB8ICAgIDQgKysrKworIGdjYy9jb25maWcuaW4gICAgICAgfCAgICA2ICsrKysrKworIGdjYy9jb25maWd1cmUgICAgICAgfCAgIDIwICsrKysrKysrKysrKysrKysrKy0tCisgZ2NjL2NvbmZpZ3VyZS5hYyAgICB8ICAgMTAgKysrKysrKysrKworIGdjYy9kb2MvaW52b2tlLnRleGkgfCAgICA5ICsrKysrKysrKworIGdjYy9nY2MuYyAgICAgICAgICAgfCAgICAyICsrCisgZ2NjL2luY3BhdGguYyAgICAgICB8ICAgMTkgKysrKysrKysrKysrKysrKysrKworIDggZmlsZXMgY2hhbmdlZCwgNjkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbW1vbi5vcHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbW1vbi5vcHQKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb21tb24ub3B0CitAQCAtNjAzLDYgKzYwMywxMCBAQCBXcGVkYW50aWMKKyBDb21tb24gVmFyKHBlZGFudGljKSBXYXJuaW5nCisgSXNzdWUgd2FybmluZ3MgbmVlZGVkIGZvciBzdHJpY3QgY29tcGxpYW5jZSB0byB0aGUgc3RhbmRhcmQKKyAKKytXcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0NvbW1vbiBWYXIoZmxhZ19wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKSBJbml0KDEpIFdhcm5pbmcKKytXYXJuIGZvciAtSSBhbmQgLUwgb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMgaWYgY3Jvc3MgY29tcGlsaW5nCisrCisgV3NoYWRvdworIENvbW1vbiBWYXIod2Fybl9zaGFkb3cpIFdhcm5pbmcKKyBXYXJuIHdoZW4gb25lIGxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgYW5vdGhlcgorSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29uZmlnLmluCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnLmluCitAQCAtMTM4LDYgKzEzOCwxMiBAQAorICNlbmRpZgorIAorIAorKy8qIERlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXMgKi8KKysjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorKyN1bmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUworKyNlbmRpZgorKworKworIC8qIERlZmluZSBpZiB5b3Ugd2FudCBhbGwgb3BlcmF0aW9ucyBvbiBSVEwgKHRoZSBiYXNpYyBkYXRhIHN0cnVjdHVyZSBvZiB0aGUKKyAgICBvcHRpbWl6ZXIgYW5kIGJhY2sgZW5kKSB0byBiZSBjaGVja2VkIGZvciBkeW5hbWljIHR5cGUgc2FmZXR5IGF0IHJ1bnRpbWUuCisgICAgVGhpcyBpcyBxdWl0ZSBleHBlbnNpdmUuICovCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWd1cmUKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWd1cmUKK0BAIC05MjgsNiArOTI4LDcgQEAgd2l0aF9zeXN0ZW1femxpYgorIGVuYWJsZV9tYWludGFpbmVyX21vZGUKKyBlbmFibGVfbGlua19tdXRleAorIGVuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpbWVfbGlicworK2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzCisgZW5hYmxlX3BsdWdpbgorIGVuYWJsZV9ob3N0X3NoYXJlZAorIGVuYWJsZV9saWJxdWFkbWF0aF9zdXBwb3J0CitAQCAtMTY0OCw2ICsxNjQ5LDggQEAgT3B0aW9uYWwgRmVhdHVyZXM6CisgICAtLWVuYWJsZS12ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbGlicworICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGF0IHJ1bnRpbWUgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgY29tcGlsZXItc3BlY2lmaWMgZGlyZWN0b3J5CisrICAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXMKKyAgIC0tZW5hYmxlLXBsdWdpbiAgICAgICAgIGVuYWJsZSBwbHVnaW4gc3VwcG9ydAorICAgLS1lbmFibGUtaG9zdC1zaGFyZWQgICAgYnVpbGQgaG9zdCBjb2RlIGFzIHNoYXJlZCBsaWJyYXJpZXMKKyAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aC1zdXBwb3J0CitAQCAtMjc3MDIsNiArMjc3MDUsMTkgQEAgaWYgdGVzdCAiJHtlbmFibGVfdmVyc2lvbl9zcGVjaWZpY19ydW50aQorIGZpCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgZW5hYmxldmFsPSRlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllczsKKytlbHNlCisrICBlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ubworK2ZpCisrCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorKworKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTIDEiID4+Y29uZmRlZnMuaAorKworK2ZpCisrCisgIyBTdWJzdGl0dXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgCisgCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWd1cmUuYWMKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWd1cmUuYWMKK0BAIC01MzY2LDYgKzUzNjYsMTYgQEAgQUNfQVJHX0VOQUJMRSh2ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbAorICAgICAgICAgICAgICAgICBbc3BlY2lmeSB0aGF0IHJ1bnRpbWUgbGlicmFyaWVzIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGluIGEgY29tcGlsZXItc3BlY2lmaWMgZGlyZWN0b3J5XSldKQorIAorK0FDX0FSR19FTkFCTEUoW3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAorKyAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXNdKSwsCisrICAgICAgICAgICAgIFtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ub10pCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorKyAgQUNfREVGSU5FKFtFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFU10sCisrICAgICAgICAgICBbMV0sCisrICAgICAgICAgICBbRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3Rvcmllc10pCisrZmkKKysKKyAjIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyBBQ19TVUJTVChzdWJkaXJzKQorIEFDX1NVQlNUKHNyY2RpcikKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9kb2MvaW52b2tlLnRleGkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aQorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2RvYy9pbnZva2UudGV4aQorQEAgLTI2MCw2ICsyNjAsNyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCisgLVdvdmVybGVuZ3RoLXN0cmluZ3MgIC1XcGFja2VkICAtV3BhY2tlZC1iaXRmaWVsZC1jb21wYXQgIC1XcGFkZGVkIEBnb2wKKyAtV3BhcmVudGhlc2VzICAtV3BlZGFudGljLW1zLWZvcm1hdCAtV25vLXBlZGFudGljLW1zLWZvcm1hdCBAZ29sCisgLVdwb2ludGVyLWFyaXRoICAtV25vLXBvaW50ZXItdG8taW50LWNhc3QgQGdvbAorKy1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyBAZ29sCisgLVdyZWR1bmRhbnQtZGVjbHMgIC1Xbm8tcmV0dXJuLWxvY2FsLWFkZHIgQGdvbAorIC1XcmV0dXJuLXR5cGUgIC1Xc2VxdWVuY2UtcG9pbnQgIC1Xc2hhZG93IEBnb2wKKyAtV3NpZ24tY29tcGFyZSAgLVdzaWduLWNvbnZlcnNpb24gLVdmbG9hdC1jb252ZXJzaW9uIEBnb2wKK0BAIC00MjMwLDYgKzQyMzEsMTQgQEAgaGVhZGVycy0tLWZvciB0aGF0LCBAb3B0aW9uey1XdW5rbm93bi1wcgorICBmb3IgbW9zdCB0YXJnZXRzLCBpdCBpcyBtYWRlIHVwIG9mIGNvZGUgYW5kIHRodXMgcmVxdWlyZXMgdGhlIHN0YWNrCisgIHRvIGJlIG1hZGUgZXhlY3V0YWJsZSBpbiBvcmRlciBmb3IgdGhlIHByb2dyYW0gdG8gd29yayBwcm9wZXJseS4KKyAKKytAaXRlbSAtV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytAb3BpbmRleCBXbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0RvIG5vdCB3YXJuIGZvciBAb3B0aW9uey1JfSBvciBAb3B0aW9uey1MfSBvcHRpb25zIHVzaW5nIHN5c3RlbQorK2RpcmVjdG9yaWVzIHN1Y2ggYXMgQGZpbGV7L3Vzci9pbmNsdWRlfSB3aGVuIGNyb3NzIGNvbXBpbGluZy4gIFRoaXMKKytvcHRpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBjaHJvb3QgZW52aXJvbm1lbnRzIHdoZW4gc3VjaAorK2RpcmVjdG9yaWVzIGNvbnRhaW4gdGhlIGNvcnJlY3QgaGVhZGVycyBhbmQgbGlicmFyaWVzIGZvciB0aGUgdGFyZ2V0Cisrc3lzdGVtIHJhdGhlciB0aGFuIHRoZSBob3N0LgorKworIEBpdGVtIC1XZmxvYXQtZXF1YWwKKyBAb3BpbmRleCBXZmxvYXQtZXF1YWwKKyBAb3BpbmRleCBXbm8tZmxvYXQtZXF1YWwKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9nY2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvZ2NjLmMKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9nY2MuYworQEAgLTc2NCw2ICs3NjQsOCBAQCBwcm9wZXIgcG9zaXRpb24gYW1vbmcgdGhlIG90aGVyIG91dHB1dCBmCisgICAgIiV7ZnVzZS1sZD0qOi1mdXNlLWxkPSUqfVwKKyAgICAgJVggJXtvKn0gJXtlKn0gJXtOfSAle259ICV7cn1cCisgICAgICV7c30gJXt0fSAle3UqfSAle3p9ICV7Wn0gJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVTfX0gIiBWVEFCTEVfVkVSSUZJQ0FUSU9OX1NQRUMgIiBcCisrICAgICV7V25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXM6LS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzfVwKKysgICAgJXtXZXJyb3I9cG9pc29uLXN5c3RlbS1kaXJlY3RvcmllczotLWVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXN9XAorICAgICAle3N0YXRpYzp9ICV7TCp9ICUobWZ3cmFwKSAlKGxpbmtfbGliZ2NjKSAiIFNBTklUSVpFUl9FQVJMWV9TUEVDICIgJW9cCisgICAgICV7Zm9wZW5tcHxmdHJlZS1wYXJhbGxlbGl6ZS1sb29wcz0qOiU6aW5jbHVkZShsaWJnb21wLnNwZWMpJShsaW5rX2dvbXApfVwKKyAgICAgJXtmZ251LXRtOiU6aW5jbHVkZShsaWJpdG0uc3BlYyklKGxpbmtfaXRtKX1cCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvaW5jcGF0aC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9pbmNwYXRoLmMKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9pbmNwYXRoLmMKK0BAIC0yOCw2ICsyOCw3IEBACisgI2luY2x1ZGUgImludGwuaCIKKyAjaW5jbHVkZSAiaW5jcGF0aC5oIgorICNpbmNsdWRlICJjcHBkZWZhdWx0LmgiCisrI2luY2x1ZGUgImRpYWdub3N0aWMtY29yZS5oIgorIAorIC8qIE1pY3Jvc29mdCBXaW5kb3dzIGRvZXMgbm90IG5hdGl2ZWx5IHN1cHBvcnQgaW5vZGVzLgorICAgIFZNUyBoYXMgbm9uLW51bWVyaWMgaW5vZGVzLiAgKi8KK0BAIC0zODIsNiArMzgzLDI0IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb28KKyAJfQorICAgICAgIGZwcmludGYgKHN0ZGVyciwgXygiRW5kIG9mIHNlYXJjaCBsaXN0LlxuIikpOworICAgICB9CisrCisrI2lmZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCisrICBpZiAoZmxhZ19wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKQorKyAgICB7CisrICAgICAgIHN0cnVjdCBjcHBfZGlyICpwOworKworKyAgICAgICBmb3IgKHAgPSBoZWFkc1tRVU9URV07IHA7IHAgPSBwLT5uZXh0KQorKyAgICAgICAgIHsKKysgICAgICAgICAgaWYgKCghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvaW5jbHVkZSIsIDEyKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvbG9jYWwvaW5jbHVkZSIsIDE4KSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkpCisrICAgICAgICAgICAgd2FybmluZyAoT1BUX1dwb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLAorKyAgICAgICAgICAgICAgICAgICAgICJpbmNsdWRlIGxvY2F0aW9uIFwiJXNcIiBpcyB1bnNhZmUgZm9yICIKKysgICAgICAgICAgICAgICAgICAgICAiY3Jvc3MtY29tcGlsYXRpb24iLAorKyAgICAgICAgICAgICAgICAgICAgIHAtPm5hbWUpOworKyAgICAgICAgIH0KKysgICAgfQorKyNlbmRpZgorIH0KKyAKKyAvKiBVc2UgZ2l2ZW4gLUkgcGF0aHMgZm9yICNpbmNsdWRlICIuLi4iIGJ1dCBub3QgI2luY2x1ZGUgPC4uLj4sIGFuZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE3LWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTgxZWZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBlOTljOWM5NzI2NmQ2ZDNlOGNhYzc5OGFhOTE0MDgyNTBjNGQ2MGNmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MDA6MzQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNy8zNV0gZ2NjLXBvaXNvbi1kaXItZXh0ZW5kCisKK0FkZCAvc3cvaW5jbHVkZSBhbmQgL29wdC9pbmNsdWRlIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAoremVja2Utbm8taG9zdC1pbmNsdWRlcy5wYXRjaCBwYXRjaC4gIFRoZSBvcmlnaW5hbCBwYXRjaCBjaGVja2VkIGZvcgorL3Vzci9pbmNsdWRlLCAvc3cvaW5jbHVkZSBhbmQgL29wdC9pbmNsdWRlIGFuZCB0aGVuIHRyaWdnZXJlZCBhIGZhaWx1cmUgYW5kCithYm9ydGVkLgorCitJbnN0ZWFkLCB3ZSBhZGQgdGhlIHR3byBtaXNzaW5nIGl0ZW1zIHRvIHRoZSBjdXJyZW50IHNjYW4uICBJZiB0aGUgdXNlcgord2FudHMgdGhpcyB0byBiZSBhIGZhaWx1cmUsIHRoZXkgY2FuIGFkZCAiLVdlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvaW5jcGF0aC5jIHwgICAgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2luY3BhdGguYyBiL2djYy9pbmNwYXRoLmMKK2luZGV4IGNkNDFjNzguLmVhYzRhOTIgMTAwNjQ0CistLS0gYS9nY2MvaW5jcGF0aC5jCisrKysgYi9nY2MvaW5jcGF0aC5jCitAQCAtMzkzLDcgKzM5Myw5IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb290LCBjcHBfcmVhZGVyICpwZmlsZSwgaW50IHZlcmJvc2UpCisgICAgICAgICAgeworICAgICAgICAgICBpZiAoKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9pbmNsdWRlIiwgMTIpKQorICAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9sb2NhbC9pbmNsdWRlIiwgMTgpKQorLSAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi9zdy9pbmNsdWRlIiwgMTEpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL29wdC9pbmNsdWRlIiwgMTIpKSkKKyAgICAgICAgICAgICB3YXJuaW5nIChPUFRfV3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMsCisgICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGUgbG9jYXRpb24gXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvbiIsCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE4LWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOGNhZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE4LWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK0Zyb20gNTYyMDdmYTI5MjNlOGVkZjc3NGU5OGZmYWM4MjY2NjA5MTA3NmJlMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjA4OjMxICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTgvMzVdIGdjYy00LjMuMzogU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVAorCitCZWZvcmUgY29tbWl0dGluZywgSSBub3RpY2VkIHRoYXQgUFIvMzIxNjEgd2FzIG1hcmtlZCBhcyBhIGR1cCBvZiBQUi8zMjAwOSwgYnV0IG15IHByZXZpb3VzIHBhdGNoIGRpZCBub3QgZml4IGl0LgorCitUaGlzIGFsdGVybmF0aXZlIHBhdGNoIGlzIGJldHRlciBiZWNhdXNlIGl0IGxldHMgeW91IGp1c3QgdXNlIENGTEFHU19GT1JfVEFSR0VUIHRvIHNldCB0aGUgY29tcGlsYXRpb24gZmxhZ3MgZm9yIGxpYmdjYy4gU2luY2UgYm9vdHN0cmFwcGVkIHRhcmdldCBsaWJyYXJpZXMgYXJlIG5ldmVyIGNvbXBpbGVkIHdpdGggdGhlIG5hdGl2ZSBjb21waWxlciwgaXQgbWFrZXMgbGl0dGxlIHNlbnNlIHRvIHVzZSBkaWZmZXJlbnQgZmxhZ3MgZm9yIHN0YWdlMSBhbmQgbGF0ZXIgc3RhZ2VzLiBBbmQgaXQgYWxzbyBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGEgZGlmZmVyZW50IHZhcmlhYmxlIHRoYW4gQ0ZMQUdTX0ZPUl9UQVJHRVQuCisKK090aGVyIGNoYW5nZXMgSSBoYWQgdG8gZG8gaW5jbHVkZToKKworLSBtb3ZpbmcgdGhlIGNyZWF0aW9uIG9mIGRlZmF1bHQgQ0ZMQUdTX0ZPUl9UQVJHRVQgZnJvbSBNYWtlZmlsZS5hbSB0byBjb25maWd1cmUuYWMsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBCT09UX0NGTEFHUyBhcmUgc3Vic3RpdHV0ZWQgaW50byBDRkxBR1NfRk9SX1RBUkdFVCAod2hpY2ggaXMgIi1PMiAtZyAkKENGTEFHUykiKSB2aWEgJChDRkxBR1MpLiBJdCBpcyBhbHNvIGNsZWFuZXIgdGhpcyB3YXkgdGhvdWdoLgorCistIHBhc3NpbmcgdGhlIHJpZ2h0IENGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBhcyBleHBvcnRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKworSSBhbHNvIHN0b3BwZWQgcGFzc2luZyBMSUJDRkxBR1MgdG8gY29uZmlndXJlIHNjcmlwdHMgc2luY2UgdGhleSBhcmUgdW51c2VkIGluIHRoZSB3aG9sZSBzcmMgdHJlZS4gQW5kIEkgdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbiBhcyBILVAgcmVtaW5kZWQgbWUgdG8gZG8uCisKK0Jvb3RzdHJhcHBlZC9yZWd0ZXN0ZWQgaTY4Ni1wYy1saW51eC1nbnUsIHdpbGwgY29tbWl0IHRvIDQuNCBzaG9ydGx5LiBPayBmb3IgNC4zPworCitTaWduZWQtb2ZmLWJ5OiBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUgfCAgIDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggMWI3NmM5MC4uZTRkY2U3YyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNjc3Miw2ICs2NzcyLDM4IEBAIGZpCisgCisgCisgCisrIyBEdXJpbmcgZ2NjIGJvb3RzdHJhcCwgaWYgd2UgdXNlIHNvbWUgcmFuZG9tIGNjIGZvciBzdGFnZTEgdGhlbiBDRkxBR1MKKysjIG1pZ2h0IGJlIGVtcHR5IG9yICItZyIuICBXZSBkb24ndCByZXF1aXJlIGEgQysrIGNvbXBpbGVyLCBzbyBDWFhGTEFHUworKyMgbWlnaHQgYWxzbyBiZSBlbXB0eSAob3IgIi1nIiwgaWYgYSBub24tR0NDIEMrKyBjb21waWxlciBpcyBpbiB0aGUgcGF0aCkuCisrIyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IFRBUkdFVCBsaWJyYXJpZXMgKHdoaWNoIHdlIGtub3cgYXJlIGJ1aWx0IHdpdGgKKysjIGdjYykgYXJlIGJ1aWx0IHdpdGggIi1PMiAtZyIsIHNvIGluY2x1ZGUgdGhvc2Ugb3B0aW9ucyB3aGVuIHNldHRpbmcKKysjIENGTEFHU19GT1JfVEFSR0VUIGFuZCBDWFhGTEFHU19GT1JfVEFSR0VULgorK2lmIHRlc3QgIngkQ0ZMQUdTX0ZPUl9UQVJHRVQiID0geDsgdGhlbgorKyAgQ0ZMQUdTX0ZPUl9UQVJHRVQ9JENGTEFHUworKyAgY2FzZSAiICRDRkxBR1MgIiBpbgorKyAgICAqIiAtTzIgIiopIDs7CisrICAgICopIENGTEFHU19GT1JfVEFSR0VUPSItTzIgJENGTEFHUyIgOzsKKysgIGVzYWMKKysgIGNhc2UgIiAkQ0ZMQUdTICIgaW4KKysgICAgKiIgLWcgIiogfCAqIiAtZzMgIiopIDs7CisrICAgICopIENGTEFHU19GT1JfVEFSR0VUPSItZyAkQ0ZMQUdTIiA7OworKyAgZXNhYworK2ZpCisrCisrCisraWYgdGVzdCAieCRDWFhGTEFHU19GT1JfVEFSR0VUIiA9IHg7IHRoZW4KKysgIENYWEZMQUdTX0ZPUl9UQVJHRVQ9JENYWEZMQUdTCisrICBjYXNlICIgJENYWEZMQUdTICIgaW4KKysgICAgKiIgLU8yICIqKSA7OworKyAgICAqKSBDWFhGTEFHU19GT1JfVEFSR0VUPSItTzIgJENYWEZMQUdTIiA7OworKyAgZXNhYworKyAgY2FzZSAiICRDWFhGTEFHUyAiIGluCisrICAgICoiIC1nICIqIHwgKiIgLWczICIqKSA7OworKyAgICAqKSBDWFhGTEFHU19GT1JfVEFSR0VUPSItZyAkQ1hYRkxBR1MiIDs7CisrICBlc2FjCisrZmkKKysKKysKKyAjIEhhbmRsZSAtLXdpdGgtaGVhZGVycz1YWFguICBJZiB0aGUgdmFsdWUgaXMgbm90ICJ5ZXMiLCB0aGUgY29udGVudHMgb2YKKyAjIHRoZSBuYW1lZCBkaXJlY3RvcnkgYXJlIGNvcGllZCB0byAkKHRvb2xkaXIpL3N5cy1pbmNsdWRlLgorIGlmIHRlc3QgeCIke3dpdGhfaGVhZGVyc30iICE9IHggJiYgdGVzdCB4IiR7d2l0aF9oZWFkZXJzfSIgIT0geG5vIDsgdGhlbgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxOS02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNThiZTBjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxOS02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaApAQCAtMCwwICsxLDgyIEBACitGcm9tIDE4ZmRlNTc0MGIwOTMyNGRmYjljZjQxZTk4NDk2NzI1NzNmZjVmYTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxMDowNiArMDQwMAorU3ViamVjdDogW1BBVENIIDE5LzM1XSA2NC1iaXQgbXVsdGlsaWIgaGFjay4KKworR0NDIGhhcyBpbnRlcm5hbCBtdWx0aWxpYiBoYW5kbGluZyBjb2RlIGJ1dCBpdCBhc3N1bWVzIGEgdmVyeSBzcGVjaWZpYyByaWdpZCBkaXJlY3RvcnkKK2xheW91dC4gVGhlIGJ1aWxkIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiBvZiBtdWx0aWxpYiBsYXlvdXQgaXMgdmVyeSBnZW5lcmljIGFuZCBhbGxvd3MKK2NvbXBsZXRlIGN1c3RvbWlzYXRpb24gb2YgdGhlIGxpYnJhcnkgZGlyZWN0b3JpZXMuCisKK1RoaXMgcGF0Y2ggaXMgYSBwYXJ0aWFsIHNvbHV0aW9uIHRvIGFsbG93IGFueSBjdXN0b20gZGlyZWN0b3JpZXMgdG8gYmUgcGFzc2VkIGludG8gZ2NjCithbmQgaGFuZGxlZCBjb3JyZWN0bHkuIEl0IGZvcmNlcyBnY2MgdG8gdXNlIHRoZSBiYXNlX2xpYmRpciAod2hpY2ggaXMgdGhlIGN1cnJlbnQKK2RpcmVjdG9yeSwgIi4iKS4gV2UgbmVlZCB0byBkbyB0aGlzIGZvciBlYWNoIG11bHRpbGliIHRoYXQgaXMgY29uZmlndXJlZCBhcyB3ZSBkb24ndAora25vdyB3aGljaCBjb21waWxlciBvcHRpb25zIG1heSBiZSBiZWluZyBwYXNzZWQgaW50byB0aGUgY29tcGlsZXIuIFNpbmNlIHdlIGhhdmUgYSBjb21waWxlcgorcGVyIG11bGl0bGliIGF0IHRoaXMgcG9pbnQgdGhhdCBpc24ndCBhbiBpc3N1ZS4KKworVGhlIG9uZSBwcm9ibGVtIGlzIHRoZSB0YXJnZXQgY29tcGlsZXIgaXMgb25seSBnb2luZyB0byB3b3JrIGZvciB0aGUgZGVmYXVsdCBtdWx0bGlsaWIgYXQKK3RoaXMgcG9pbnQuIElkZWFsbHkgd2UnZCBmaWd1cmUgb3V0IHdoaWNoIG11bHRpbGlicyB3ZXJlIGJlaW5nIGVuYWJsZWQgd2l0aCB3aGljaCBwYXRocworYW5kIGJlIGFibGUgdG8gcGF0Y2ggdGhlc2UgZW50cmllcyB3aXRoIGEgY29tcGxldGUgc2V0IG9mIGNvcnJlY3QgcGF0aHMgYnV0IHRoaXMgd2UKK2Rvbid0IGhhdmUgc3VjaCBjb2RlIGF0IHRoaXMgcG9pbnQuIFRoaXMgaXMgc29tZXRoaW5nIHRoZSB0YXJnZXQgZ2NjIHJlY2lwZSBzaG91bGQgZG8KK2FuZCBvdmVycmlkZSB0aGVzZSBwbGF0Zm9ybSBkZWZhdWx0cyBpbiBpdHMgYnVpbGQgY29uZmlnLgorCitSUCAxNS84LzExCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBFbHZpcyBEb3dzb24gPGVsdmlzLmRvd3NvbkBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NCAgIHwgICAgNiArKy0tLS0KKyBnY2MvY29uZmlnL21pcHMvdC1saW51eDY0ICAgfCAgIDEwICsrKy0tLS0tLS0KKyBnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQgfCAgICA1ICsrLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKK0BAIC0zMiw3ICszMiw1IEBACisgIworIGNvbW1hPSwKKyBNVUxUSUxJQl9PUFRJT05TICAgID0gJChzdWJzdCAkKGNvbW1hKSwvLCQoVE1fTVVMVElMSUJfQ09ORklHKSkKKy1NVUxUSUxJQl9ESVJOQU1FUyAgID0gJChwYXRzdWJzdCBtJSwgJSwgJChzdWJzdCAvLCAsJChNVUxUSUxJQl9PUFRJT05TKSkpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IG02ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnUpCistTVVMVElMSUJfT1NESVJOQU1FUys9IG0zMj0kKGlmICQod2lsZGNhcmQgJChzaGVsbCBlY2hvICQoU1lTVEVNX0hFQURFUl9ESVIpKS8uLi8uLi91c3IvbGliMzIpLC4uL2xpYjMyLC4uL2xpYikkKGNhbGwgaWZfbXVsdGlhcmNoLDppMzg2LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbXgzMj0uLi9saWJ4MzIkKGNhbGwgaWZfbXVsdGlhcmNoLDp4ODZfNjQtbGludXgtZ251eDMyKQorK01VTFRJTElCX0RJUk5BTUVTID0gLiAuCisrTVVMVElMSUJfT1NESVJOQU1FUyA9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKK0BAIC0xNywxMCArMTcsNiBAQAorICMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorIE1VTFRJTElCX09QVElPTlMgPSBtYWJpPW4zMi9tYWJpPTMyL21hYmk9NjQKKy1NVUxUSUxJQl9ESVJOQU1FUyA9IG4zMiAzMiA2NAorLU1JUFNfRUwgPSAkKGlmICQoZmlsdGVyICVlbCwgJChmaXJzdHdvcmQgJChzdWJzdCAtLCAsJCh0YXJnZXQpKSkpLGVsKQorLU1JUFNfU09GVCA9ICQoaWYgJChzdHJpcCAkKGZpbHRlciBNQVNLX1NPRlRfRkxPQVRfQUJJLCAkKHRhcmdldF9jcHVfZGVmYXVsdCkpICQoZmlsdGVyIHNvZnQsICQod2l0aF9mbG9hdCkpKSxzb2Z0KQorLU1VTFRJTElCX09TRElSTkFNRVMgPSBcCistCS4uL2xpYjMyJChjYWxsIGlmX211bHRpYXJjaCw6bWlwczY0JChNSVBTX0VMKS1saW51eC1nbnVhYmluMzIkKE1JUFNfU09GVCkpIFwKKy0JLi4vbGliJChjYWxsIGlmX211bHRpYXJjaCw6bWlwcyQoTUlQU19FTCktbGludXgtZ251JChNSVBTX1NPRlQpKSBcCistCS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6bWlwczY0JChNSVBTX0VMKS1saW51eC1nbnVhYmk2NCQoTUlQU19TT0ZUKSkKKytNVUxUSUxJQl9ESVJOQU1FUyA9IC4gLiAuCisrTVVMVElMSUJfT1NESVJOQU1FUyA9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCisrCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKK0BAIC0yNiwxMCArMjYsOSBAQAorICMgTVVMVElMSUJfT1NESVJOQU1FUyBhY2NvcmRpbmcgdG8gd2hhdCBpcyBmb3VuZCBvbiB0aGUgdGFyZ2V0LgorIAorIE1VTFRJTElCX09QVElPTlMgICAgOj0gbTY0L20zMgorLU1VTFRJTElCX0RJUk5BTUVTICAgOj0gNjQgMzIKKytNVUxUSUxJQl9ESVJOQU1FUyAgIDo9IC4gLgorIE1VTFRJTElCX0VYVFJBX09QVFMgOj0gCistTVVMVElMSUJfT1NESVJOQU1FUyA6PSBtNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDpwb3dlcnBjNjQtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMgKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOnBvd2VycGMtbGludXgtZ251KQorK01VTFRJTElCX09TRElSTkFNRVMgOj0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKKyAKKyByczYwMDAtbGludXgubzogJChzcmNkaXIpL2NvbmZpZy9yczYwMDAvcnM2MDAwLWxpbnV4LmMKKyAJJChDT01QSUxFKSAkPApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNDY2MTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIwLW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorRnJvbSAzMDdjOGZmM2VmNjY2YjdiZDVhYzczMzg2M2YyZmJiMjdhOWQ1MjFlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTI6NTYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMC8zNV0gb3B0aW9uYWwgbGlic3RkYworCitnY2MtcnVudGltZSBidWlsZHMgbGlic3RkYysrIHNlcGFyYXRlbHkgZnJvbSBnY2MtY3Jvc3MtKi4gSXRzIGNvbmZpZ3VyZSB0ZXN0cyB1c2luZyBnKysKK3dpbGwgbm90IHJ1biBjb3JyZWN0bHkgc2luY2UgYnkgZGVmYXVsdCB0aGUgbGlua2VyIHdpbGwgdHJ5IHRvIGxpbmsgYWdhaW5zdCBsaWJzdGRjKysKK3doaWNoIHNob3VsZG4ndCBleGlzdCB5ZXQuIFdlIG5lZWQgYW4gb3B0aW9uIHRvIGRpc2FibGUgLWxzdGRjKysKK29wdGlvbiB3aGlsc3QgbGVhdmluZyAtbGMsIC1sZ2NjIGFuZCBvdGhlciBhdXRvbWF0aWMgbGlicmFyeSBkZXBlbmRlbmNpZXMgYWRkZWQgYnkgZ2NjCitkcml2ZXIuIFRoaXMgcGF0Y2ggYWRkcyBzdWNoIGFuIG9wdGlvbiB3aGljaCBvbmx5IGRpc2FibGVzIHRoZSAtbHN0ZGMrKy4KKworQSAic3RhbmRhcmQiIGdjYyBidWlsZCB1c2VzIHhnY2MgYW5kIGhlbmNlIGF2b2lkcyB0aGlzLiBXZSBzaG91bGQgYXNrIHVwc3RyZWFtIGhvdyB0bworZG8gdGhpcyBvZmZpY2lhbGx5LCB0aGUgbGlrZWx5IGFuc3dlciBpcyBkb24ndCBidWlsZCBsaWJzdGRjKysgc2VwYXJhdGVseS4KKworUlAgMjkvNi8xMAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgZ2NjL2MtZmFtaWx5L2Mub3B0ICB8ICAgIDQgKysrKworIGdjYy9jcC9nKytzcGVjLmMgICAgfCAgICAxICsKKyBnY2MvZG9jL2ludm9rZS50ZXhpIHwgICAgOSArKysrKysrLS0KKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgICAgMSArCisgNCBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvYy1mYW1pbHkvYy5vcHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2MtZmFtaWx5L2Mub3B0CisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvYy1mYW1pbHkvYy5vcHQKK0BAIC0xMzIzLDYgKzEzMjMsMTAgQEAgbm9zdGRpbmMrKworIEMrKyBPYmpDKysKKyBEbyBub3Qgc2VhcmNoIHN0YW5kYXJkIHN5c3RlbSBpbmNsdWRlIGRpcmVjdG9yaWVzIGZvciBDKysKKyAKKytub3N0ZGxpYisrCisrRHJpdmVyCisrRG8gbm90IGxpbmsgc3RhbmRhcmQgQysrIHJ1bnRpbWUgbGlicmFyeQorKworIG8KKyBDIE9iakMgQysrIE9iakMrKyBKb2luZWQgU2VwYXJhdGUKKyA7IERvY3VtZW50ZWQgaW4gY29tbW9uLm9wdAorSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NwL2crK3NwZWMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY3AvZysrc3BlYy5jCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY3AvZysrc3BlYy5jCitAQCAtMTM4LDYgKzEzOCw3IEBAIGxhbmdfc3BlY2lmaWNfZHJpdmVyIChzdHJ1Y3QgY2xfZGVjb2RlZF8KKyAgICAgICBzd2l0Y2ggKGRlY29kZWRfb3B0aW9uc1tpXS5vcHRfaW5kZXgpCisgCXsKKyAJY2FzZSBPUFRfbm9zdGRsaWI6CisrCWNhc2UgT1BUX25vc3RkbGliX186CisgCWNhc2UgT1BUX25vZGVmYXVsdGxpYnM6CisgCSAgbGlicmFyeSA9IC0xOworIAkgIGJyZWFrOworSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2RvYy9pbnZva2UudGV4aQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvZG9jL2ludm9rZS50ZXhpCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZG9jL2ludm9rZS50ZXhpCitAQCAtMTkzLDYgKzE5Myw3IEBAIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisgLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIEBnb2wKKyAtZnZ0YWJsZS12ZXJpZnk9QHZhcntzdGR8cHJlaW5pdHxub25lfSBAZ29sCisgLWZ2dHYtY291bnRzIC1mdnR2LWRlYnVnIEBnb2wKKystbm9zdGRsaWIrKyBAZ29sCisgLWZ2aXNpYmlsaXR5LW1zLWNvbXBhdCBAZ29sCisgLWZleHQtbnVtZXJpYy1saXRlcmFscyBAZ29sCisgLVdhYmkgIC1XY29udmVyc2lvbi1udWxsICAtV2N0b3ItZHRvci1wcml2YWN5IEBnb2wKK0BAIC00NTcsNyArNDU4LDcgQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdHN9LgorIC1ub3N0YXJ0ZmlsZXMgIC1ub2RlZmF1bHRsaWJzICAtbm9zdGRsaWIgLXBpZSAtcmR5bmFtaWMgQGdvbAorIC1zICAtc3RhdGljIC1zdGF0aWMtbGliZ2NjIC1zdGF0aWMtbGlic3RkYysrIEBnb2wKKyAtc3RhdGljLWxpYmFzYW4gLXN0YXRpYy1saWJ0c2FuIC1zdGF0aWMtbGlibHNhbiAtc3RhdGljLWxpYnVic2FuIEBnb2wKKy0tc2hhcmVkIC1zaGFyZWQtbGliZ2NjICAtc3ltYm9saWMgQGdvbAorKy1zaGFyZWQgLXNoYXJlZC1saWJnY2MgIC1zeW1ib2xpYyAtbm9zdGRsaWIrKyBAZ29sCisgLVQgQHZhcntzY3JpcHR9ICAtV2wsQHZhcntvcHRpb259ICAtWGxpbmtlciBAdmFye29wdGlvbn0gQGdvbAorIC11IEB2YXJ7c3ltYm9sfX0KKyAKK0BAIC0xMDI4NSw2ICsxMDI4NiwxMSBAQCBUaGVzZSBlbnRyaWVzIGFyZSB1c3VhbGx5IHJlc29sdmVkIGJ5IGVuCisgbGliYy4gIFRoZXNlIGVudHJ5IHBvaW50cyBzaG91bGQgYmUgc3VwcGxpZWQgdGhyb3VnaCBzb21lIG90aGVyCisgbWVjaGFuaXNtIHdoZW4gdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLgorIAorK0BpdGVtIC1ub3N0ZGxpYisrCisrQG9waW5kZXggbm9zdGRsaWIrKworK0RvIG5vdCB1c2UgdGhlIHN0YW5kYXJkIHN5c3RlbSBDKysgcnVudGltZSBsaWJyYXJpZXMgd2hlbiBsaW5raW5nLgorK09ubHkgdGhlIGxpYnJhcmllcyB5b3Ugc3BlY2lmeSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgbGlua2VyLgorKworIEBjaW5kZXggQG9wdGlvbnstbGdjY30sIHVzZSB3aXRoIEBvcHRpb257LW5vc3RkbGlifQorIEBjaW5kZXggQG9wdGlvbnstbm9zdGRsaWJ9IGFuZCB1bnJlc29sdmVkIHJlZmVyZW5jZXMKKyBAY2luZGV4IHVucmVzb2x2ZWQgcmVmZXJlbmNlcyBhbmQgQG9wdGlvbnstbm9zdGRsaWJ9CitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZ2NjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2djYy5jCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZ2NjLmMKK0BAIC03NzIsNiArNzcyLDcgQEAgcHJvcGVyIHBvc2l0aW9uIGFtb25nIHRoZSBvdGhlciBvdXRwdXQgZgorICAgICAlKG1mbGliKSAiIFNUQUNLX1NQTElUX1NQRUMgIlwKKyAgICAgJXtmcHJvZmlsZS1hcmNzfGZwcm9maWxlLWdlbmVyYXRlKnxjb3ZlcmFnZTotbGdjb3Z9ICIgU0FOSVRJWkVSX1NQRUMgIiBcCisgICAgICV7IW5vc3RkbGliOiV7IW5vZGVmYXVsdGxpYnM6JShsaW5rX3NzcCkgJShsaW5rX2djY19jX3NlcXVlbmNlKX19XAorKyAgICAleyFub3N0ZGxpYisrOn1cCisgICAgICV7IW5vc3RkbGliOiV7IW5vc3RhcnRmaWxlczolRX19ICV7VCp9IH19fX19fSIKKyAjZW5kaWYKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzYzYxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0Zyb20gMDA0Njk2ZTA1NGFlOWRjNzFkNTEyY2M3NTVjY2M0MDc0ZmM2MmIyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE0OjIwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjEvMzVdIGdjYzogZGlzYWJsZSBNQVNLX1JFTEFYX1BJQ19DQUxMUyBiaXQKKworVGhlIG5ldyBmZWF0dXJlIGFkZGVkIGFmdGVyIDQuMy4zCisiaHR0cDovL3d3dy5wdWJicy5uZXQvMjAwOTA5L2djYy85NDA0OC1wYXRjaC1hZGQtc3VwcG9ydC1mb3Itcm1pcHNqYWxyLmh0bWwiCit3aWxsIGNhdXNlIGNjMXBsdXMgZWF0IHVwIGFsbCB0aGUgc3lzdGVtIG1lbW9yeSB3aGVuIGJ1aWxkIHdlYmtpdC1ndGsuCitUaGUgZnVuY3Rpb24gbWlwc19nZXRfcGljX2NhbGxfc3ltYm9sIGtlZXBzIG9uIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgaXRzZWxmLgorRGlzYWJsZSB0aGlzIGZlYXR1cmUgdG8gd2FsayBhc2lkZSB0aGUgYnVnLgorCitTaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgIDcgLS0tLS0tLQorIGdjYy9jb25maWd1cmUuYWMgfCAgICA3IC0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IGI2NWQyMWQuLmJkYWI0NWEgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjU4MjksMTMgKzI1ODI5LDYgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIgZm9yIGV4cGxpY2l0IEpBTFIgcmVsb2NhdGlvbi4uLiAiID4mNjsKKyAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgICBmaQorICAgICBmaQorLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgorLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKKy0gICAgICBlbHNlCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKKy0gICAgICBmaQorLSAgICBmaQorICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjUKKyAkYXNfZWNobyAiJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggZTIyNmI4NS4uNWY1YzkwOSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC00MDk5LDEzICs0MDk5LDYgQEAgeDoKKyAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgICBmaQorICAgICBmaQorLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgorLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKKy0gICAgICBlbHNlCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKKy0gICAgICBmaQorLSAgICBmaQorICAgICBBQ19NU0dfUkVTVUxUKCRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYykKKyAKKyAgICAgQUNfQ0FDSEVfQ0hFQ0soW2xpbmtlciBmb3IgLmVoX2ZyYW1lIHBlcnNvbmFsaXR5IHJlbGF4YXRpb25dLAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIyLUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIyLUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBjOGFiZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjItQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDdmNWM5ZGNjNzFjOGI4M2EwYjU1OTYyNjZjYzRiZGYwOTM2ZThlMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNjoyOCArMDQwMAorU3ViamVjdDogW1BBVENIIDIyLzM1XSBDT0xMRUNUX0dDQ19PUFRJT05TCisKK1RoaXMgcGF0Y2ggYWRkcyAtLXN5c3Jvb3QgaW50byBDT0xMRUNUX0dDQ19PUFRJT05TIHdoaWNoIGlzIHVzZWQgdG8KK2ludm9rZSBjb2xsZWN0Mi4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvZ2NjLmMgfCAgICA5ICsrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggNDc3NzUyZi4uNTEwNjJhYSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtNDA5OCw2ICs0MDk4LDE1IEBAIHNldF9jb2xsZWN0X2djY19vcHRpb25zICh2b2lkKQorIAkJc2l6ZW9mICgiQ09MTEVDVF9HQ0NfT1BUSU9OUz0iKSAtIDEpOworIAorICAgZmlyc3RfdGltZSA9IFRSVUU7CisrI2lmZGVmIEhBVkVfTERfU1lTUk9PVAorKyAgaWYgKHRhcmdldF9zeXN0ZW1fcm9vdF9jaGFuZ2VkICYmIHRhcmdldF9zeXN0ZW1fcm9vdCkKKysgICAgeworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIictLXN5c3Jvb3Q9Iiwgc2l6ZW9mKCInLS1zeXNyb290PSIpLTEpOworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgdGFyZ2V0X3N5c3RlbV9yb290LHN0cmxlbih0YXJnZXRfc3lzdGVtX3Jvb3QpKTsKKysgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssICInIiwgMSk7CisrICAgICAgZmlyc3RfdGltZSA9IEZBTFNFOworKyAgICB9CisrI2VuZGlmCisgICBmb3IgKGkgPSAwOyAoaW50KSBpIDwgbl9zd2l0Y2hlczsgaSsrKQorICAgICB7CisgICAgICAgY29uc3QgY2hhciAqY29uc3QgKmFyZ3M7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIzLVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZGZlOWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIzLVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoCkBAIC0wLDAgKzEsOTYgQEAKK0Zyb20gZjdkNDljYTQ0NWU2MGZhYTFiNTI1NmM2YjRmOTZjMWVlNWMwZTM1MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE3OjI1ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjMvMzVdIFVzZSB0aGUgZGVmYXVsdHMuaCBpbiAke0J9IGluc3RlYWQgb2YgJHtTfSwgYW5kIHQtb2UKKyBpbiAke0J9CisKK1VzZSB0aGUgZGVmYXVsdHMuaCBpbiAke0J9IGluc3RlYWQgb2YgJHtTfSwgYW5kIHQtb2UgaW4gJHtCfSwgc28gdGhhdAordGhlIHNvdXJjZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZ2NjLWNyb3NzLWluaXRpYWwsCitnY2MtY3Jvc3MtaW50ZXJtZWRpYXRlLCBnY2MtY3Jvc3MsIGdjYy1ydW50aW1lLCBhbmQgYWxzbyB0aGUgc2RrIGJ1aWxkLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2hpbGUgY29tcGlsaW5nIGdjYy1jcm9zc3Nkay1pbml0aWFsLXg4Nl82NCBvbiBzb21lIGhvc3QsIHRoZXJlIGlzCitvY2Nhc2lvbmFsbHkgZmFpbHVyZSB0aGF0IHRlc3QgdGhlIGV4aXN0YW5jZSBvZiBkZWZhdWx0LmggZG9lc24ndAord29yaywgdGhlIHJlYXNvbiBpcyB0bV9pbmNsdWRlX2xpc3Q9JyoqIGRlZmF1bHRzLmgnIHJhdGhlciB0aGFuCit0bV9pbmNsdWRlX2xpc3Q9JyoqIC4vZGVmYXVsdHMuaCcKKworU28gd2UgYWRkIHRoZSB0ZXN0IGNvbmRpdGlvbiBmb3IgdGhpcyBzaXR1YXRpb24uCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2MvTWFrZWZpbGUuaW4gIHwgICAgMiArLQorIGdjYy9jb25maWd1cmUgICAgfCAgICA0ICsrLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgICAgNCArKy0tCisgZ2NjL21rY29uZmlnLnNoICB8ICAgIDQgKystLQorIDQgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCBkMWFiMjJmLi4xNWZlNGI2IDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC00ODMsNyArNDgzLDcgQEAgVEFSR0VUX1NZU1RFTV9ST09UID0gQFRBUkdFVF9TWVNURU1fUk9PVEAKKyBUQVJHRVRfU1lTVEVNX1JPT1RfREVGSU5FID0gQFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkVACisgCisgeG1ha2VfZmlsZT1AeG1ha2VfZmlsZUAKKy10bWFrZV9maWxlPUB0bWFrZV9maWxlQAorK3RtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVAIC4vdC1vZQorIFRNX0VORElBTl9DT05GSUc9QFRNX0VORElBTl9DT05GSUdACisgVE1fTVVMVElMSUJfQ09ORklHPUBUTV9NVUxUSUxJQl9DT05GSUdACisgVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUc9QFRNX01VTFRJTElCX0VYQ0VQVElPTlNfQ09ORklHQAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCA1Mzk5YjJiLi42MGEwNGJkIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTExNjMxLDggKzExNjMxLDggQEAgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorICAgICAgICA7OworICAgICBkZWZhdWx0cy5oICkKKy0gICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS8kZiIKKy0gICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vJGYiCisgICAgICAgIDs7CisgICAgICogKQorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggZjg3YzNiNi4uNDYwZTBkOSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC0xNzQwLDggKzE3NDAsOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisgICAgICAgIDs7CisgICAgIGRlZmF1bHRzLmggKQorLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgorLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKKyAgICAgICAgOzsKKyAgICAgKiApCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZGlmZiAtLWdpdCBhL2djYy9ta2NvbmZpZy5zaCBiL2djYy9ta2NvbmZpZy5zaAoraW5kZXggYzcxNDZlZC4uYjE1M2Y0NSAxMDA2NDQKKy0tLSBhL2djYy9ta2NvbmZpZy5zaAorKysrIGIvZ2NjL21rY29uZmlnLnNoCitAQCAtNzcsNyArNzcsNyBAQCBpZiBbIC1uICIkSEVBREVSUyIgXTsgdGhlbgorICAgICBpZiBbICQjIC1nZSAxIF07IHRoZW4KKyAJZWNobyAnI2lmZGVmIElOX0dDQycgPj4gJHtvdXRwdXR9VAorIAlmb3IgZmlsZSBpbiAiJEAiOyBkbworLQkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiZGVmYXVsdHMuaCI7IHRoZW4KKysJICAgIGlmIHRlc3QgeCIkZmlsZSIgPSB4Ii4vZGVmYXVsdHMuaCIgLW8geCIkZmlsZSIgPSB4ImRlZmF1bHRzLmgiOyB0aGVuCisgCQlwb3N0cG9uZV9kZWZhdWx0c19oPSJ5ZXMiCisgCSAgICBlbHNlCisgCQllY2hvICIjIGluY2x1ZGUgXCIkZmlsZVwiIiA+PiAke291dHB1dH1UCitAQCAtMTA2LDcgKzEwNiw3IEBAIGVzYWMKKyAKKyAjIElmIHdlIHBvc3Rwb25lZCBpbmNsdWRpbmcgZGVmYXVsdHMuaCwgYWRkIHRoZSAjaW5jbHVkZSBub3cuCisgaWYgdGVzdCB4IiRwb3N0cG9uZV9kZWZhdWx0c19oIiA9IHgieWVzIjsgdGhlbgorLSAgICBlY2hvICIjIGluY2x1ZGUgXCJkZWZhdWx0cy5oXCIiID4+ICR7b3V0cHV0fVQKKysgICAgZWNobyAiIyBpbmNsdWRlIFwiLi9kZWZhdWx0cy5oXCIiID4+ICR7b3V0cHV0fVQKKyBmaQorIAorICMgQWRkIG11bHRpcGxlIGluY2x1c2lvbiBwcm90ZWN0aW9uIGd1YXJkLCBwYXJ0IHR3by4KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNC1QUi10YXJnZXQtMzIyMTkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWFjZjdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNC1QUi10YXJnZXQtMzIyMTkucGF0Y2gKQEAgLTAsMCArMSw2MiBAQAorRnJvbSBlMGQxNWY0ZjhiZjI4YzM1MWI5MjE1Y2EzN2YxY2FhMjRkZjBlMWZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTg6NTQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNC8zNV0gUFIgdGFyZ2V0LzMyMjE5CisKKyogdmFyYXNtLmMgKGRlZmF1bHRfYmluZHNfbG9jYWxfcF8xKTogV2VhayBkYXRhIGlzIG5vdCBsb2NhbC4KKworU2lnbmVkLW9mZi1ieTogQmVybmhhcmQgUmV1dG5lci1GaXNjaGVyIDxyZXAuZG90Lm5vcEBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CistLS0KKyBnY2MvdGVzdHN1aXRlL2djYy5kZy92aXNpYmlsaXR5LTIxLmMgfCAgIDE0ICsrKysrKysrKysrKysrCisgZ2NjL3ZhcmFzbS5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOSArKysrLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjEuYworCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvdmFyYXNtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL3ZhcmFzbS5jCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvdmFyYXNtLmMKK0BAIC02NzcxLDYgKzY3NzEsMTAgQEAgZGVmYXVsdF9iaW5kc19sb2NhbF9wXzEgKGNvbnN0X3RyZWUgZXhwLAorICAgLyogU3RhdGljIHZhcmlhYmxlcyBhcmUgYWx3YXlzIGxvY2FsLiAgKi8KKyAgIGVsc2UgaWYgKCEgVFJFRV9QVUJMSUMgKGV4cCkpCisgICAgIGxvY2FsX3AgPSB0cnVlOworKyAgLyogaGlkZGVuIHdlYWsgY2FuJ3QgYmUgb3ZlcnJpZGRlbiBieSBzb21ldGhpbmcgbm9uLWxvY2FsLCBhbGwKKysgICAgIHRoYXQgaXMgcG9zc2libGUgaXMgdGhhdCBpdCBpcyBub3QgZGVmaW5lZCBhdCBhbGwuICovCisrICBlbHNlIGlmIChERUNMX1dFQUsgKGV4cCkpCisrICAgIGxvY2FsX3AgPSBmYWxzZTsKKyAgIC8qIEEgdmFyaWFibGUgaXMgbG9jYWwgaWYgdGhlIHVzZXIgaGFzIHNhaWQgZXhwbGljaXRseSB0aGF0IGl0IHdpbGwKKyAgICAgIGJlLiAgKi8KKyAgIGVsc2UgaWYgKChERUNMX1ZJU0lCSUxJVFlfU1BFQ0lGSUVEIChleHApCitAQCAtNjc4NCwxMSArNjc4OCw2IEBAIGRlZmF1bHRfYmluZHNfbG9jYWxfcF8xIChjb25zdF90cmVlIGV4cCwKKyAgICAgIGxvY2FsLiAgKi8KKyAgIGVsc2UgaWYgKERFQ0xfVklTSUJJTElUWSAoZXhwKSAhPSBWSVNJQklMSVRZX0RFRkFVTFQpCisgICAgIGxvY2FsX3AgPSB0cnVlOworLSAgLyogRGVmYXVsdCB2aXNpYmlsaXR5IHdlYWsgZGF0YSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIHN0cm9uZyBzeW1ib2wKKy0gICAgIGluIGFub3RoZXIgbW9kdWxlIGFuZCBzbyBhcmUgbm90IGxvY2FsLiAgKi8KKy0gIGVsc2UgaWYgKERFQ0xfV0VBSyAoZXhwKQorLQkgICAmJiAhcmVzb2x2ZWRfbG9jYWxseSkKKy0gICAgbG9jYWxfcCA9IGZhbHNlOworICAgLyogSWYgUElDLCB0aGVuIGFzc3VtZSB0aGF0IGFueSBnbG9iYWwgbmFtZSBjYW4gYmUgb3ZlcnJpZGRlbiBieQorICAgICAgc3ltYm9scyByZXNvbHZlZCBmcm9tIG90aGVyIG1vZHVsZXMuICAqLworICAgZWxzZSBpZiAoc2hsaWIpCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvdGVzdHN1aXRlL2djYy5kZy92aXNpYmlsaXR5LTIyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjIuYworQEAgLTAsMCArMSwxMyBAQAorKy8qIFBSIHRhcmdldC8zMjIxOSAqLworKy8qIHsgZGctZG8gcnVuIH0gKi8KKysvKiB7IGRnLXJlcXVpcmUtdmlzaWJpbGl0eSAiIiB9ICovCisrLyogeyBkZy1vcHRpb25zICItZlBJQyIgeyB0YXJnZXQgZnBpYyB9IH0gKi8KKysKKytleHRlcm4gdm9pZCBmKCkgX19hdHRyaWJ1dGVfXygod2Vhayx2aXNpYmlsaXR5KCJoaWRkZW4iKSkpOworK2V4dGVybiBpbnQgcHV0cyggY2hhciBjb25zdCogKTsKKytpbnQgbWFpbigpCisreworKyAgaWYgKGYpCisrICAgIGYoKTsKKysgIHJldHVybiAwOworK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI1LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNzkxNGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI1LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gYWY4YTU2ZWE0ZTE3YjI5MDllZmYyYzU3NzA0YWI0M2VmMjRmMjhkMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIwOjAxICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjUvMzVdIGZvcnRyYW4gY3Jvc3MtY29tcGlsZSBoYWNrLgorCisqIEZvcnRyYW4gd291bGQgaGF2ZSBzZWFyY2hlZCBmb3IgYXJtLWFuZ3N0cm9tLWdudWVhYmktZ2ZvcnRyYW4gYnV0IHdvdWxkIGhhdmUgdXNlZAordXNlZCBnZm9ydGFuLiBGb3IgZ2NjXzQuMi4yLmJiIHdlIHdhbnQgdG8gdXNlIHRoZSBnZm9ydHJhbiBjb21waWxlciBmcm9tIG91ciBjcm9zcworZGlyZWN0b3J5LgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgbGliZ2ZvcnRyYW4vY29uZmlndXJlICAgIHwgICAgMiArLQorIGxpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZSBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQoraW5kZXggODM4NWU5Ni4uYjhmN2E5MiAxMDA3NTUKKy0tLSBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQorKysrIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlCitAQCAtMTI3MDQsNyArMTI3MDQsNyBAQCBlc2FjCisgCisgIyBXZSBuZWVkIGdmb3J0cmFuIHRvIGNvbXBpbGUgcGFydHMgb2YgdGhlIGxpYnJhcnkKKyAjQUNfUFJPR19GQyhnZm9ydHJhbikKKy1GQz0iJEdGT1JUUkFOIgorKyNGQz0iJEdGT1JUUkFOIgorIGFjX2V4dD0ke2FjX2ZjX3NyY2V4dC1mfQorIGFjX2NvbXBpbGU9JyRGQyAtYyAkRkNGTEFHUyAkYWNfZmNmbGFnc19zcmNleHQgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisgYWNfbGluaz0nJEZDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkRkNGTEFHUyAkTERGTEFHUyAkYWNfZmNmbGFnc19zcmNleHQgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCitkaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCitpbmRleCA3ZDk3ZmVkLi4zZjlmNDg0IDEwMDY0NAorLS0tIGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCisrKysgYi9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKK0BAIC0yMjcsNyArMjI3LDcgQEAgQUNfU1VCU1QoZW5hYmxlX3N0YXRpYykKKyAKKyAjIFdlIG5lZWQgZ2ZvcnRyYW4gdG8gY29tcGlsZSBwYXJ0cyBvZiB0aGUgbGlicmFyeQorICNBQ19QUk9HX0ZDKGdmb3J0cmFuKQorLUZDPSIkR0ZPUlRSQU4iCisrI0ZDPSIkR0ZPUlRSQU4iCisgQUNfUFJPR19GQyhnZm9ydHJhbikKKyAKKyAjIGV4dHJhIExEIEZsYWdzIHdoaWNoIGFyZSByZXF1aXJlZCBmb3IgdGFyZ2V0cworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNi1saWJnY2Mtc2psai1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGVmYWI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNi1saWJnY2Mtc2psai1jaGVjay5wYXRjaApAQCAtMCwwICsxLDc0IEBACitGcm9tIDA4YzIzOTg0NDVlNmNhYzI4MjQ4OGY2NGFlNmJmMjljYmNkOGRiMjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMDo1MCArMDQwMAorU3ViamVjdDogW1BBVENIIDI2LzM1XSBsaWJnY2Mtc2psai1jaGVjaworCithY19mbl9jX3RyeV9jb21waWxlIGRvZXNudCBzZWVtIHRvIGtlZXAgdGhlIGludGVybWVkaWF0ZSBmaWxlcword2hpY2ggYXJlIG5lZWRlZCBmb3Igc2psaiB0ZXN0IHRvIHBhc3Mgc2luY2UgaXQgZ3JlcHMgaW50byB0aGUKK2dlbmVyYXRlZCBmaWxlLiBTbyB3ZSBydW4gdGhlIGNvbXBpbGVyIGNvbW1hbmQgdXNpbmcgQUNfVFJZX0NPTU1BTkQKK3doaWNoIHRoZW4gZ2VuZXJhdGVzIHRoZSBuZWVkZWQgLnMgZmlsZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYmdjYy9jb25maWd1cmUgICAgfCAgIDEwICsrKysrKy0tLS0KKyBsaWJnY2MvY29uZmlndXJlLmFjIHwgICAxMCArKysrLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmdjYy9jb25maWd1cmUgYi9saWJnY2MvY29uZmlndXJlCitpbmRleCAxNDI1ZGY2Li5kMThlM2NiIDEwMDY0NAorLS0tIGEvbGliZ2NjL2NvbmZpZ3VyZQorKysrIGIvbGliZ2NjL2NvbmZpZ3VyZQorQEAgLTQyMDgsMTcgKzQyMDgsMTkgQEAgdm9pZCBmb28gKCkKKyB9CisgCisgX0FDRU9GCistQ0ZMQUdTX2hvbGQ9JENGTEFHUworLUNGTEFHUz0iLS1zYXZlLXRlbXBzIC1mZXhjZXB0aW9ucyIKKyBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz11bmtub3duCistaWYgYWNfZm5fY190cnlfY29tcGlsZTsgdGhlbiA6CisraWYgeyBhY190cnk9JyR7Q0MtY2N9IC1mZXhjZXB0aW9ucyAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mNScKKysgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY190cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgorICAgaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXllcworICAgZWxpZiBncmVwIF9VbndpbmRfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPW5vCisgICBmaQorIGZpCistQ0ZMQUdTPSRDRkxBR1NfaG9sZAorIHJtIC1mIGNvbmZ0ZXN0KgorIAorIGZpCitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZ3VyZS5hYyBiL2xpYmdjYy9jb25maWd1cmUuYWMKK2luZGV4IDhiN2FiYTUuLmM3Yzk2NDQgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlndXJlLmFjCisrKysgYi9saWJnY2MvY29uZmlndXJlLmFjCitAQCAtMjE2LDE2ICsyMTYsMTQgQEAgdm9pZCBmb28gKCkKKyAgIGJhcigpOworIH0KKyBdKV0pCistQ0ZMQUdTX2hvbGQ9JENGTEFHUworLUNGTEFHUz0iLS1zYXZlLXRlbXBzIC1mZXhjZXB0aW9ucyIKKyBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz11bmtub3duCistQVNfSUYoW2FjX2ZuX2NfdHJ5X2NvbXBpbGVdLAorLSAgW2lmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorK2lmIEFDX1RSWV9DT01NQU5EKCR7Q0MtY2N9IC1mZXhjZXB0aW9ucyAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mQVNfTUVTU0FHRV9MT0dfRkQpOyB0aGVuCisrICBpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9eWVzCisgICBlbGlmIGdyZXAgX1Vud2luZF9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9bm8KKy0gIGZpXSkKKy1DRkxBR1M9JENGTEFHU19ob2xkCisrICBmaQorK2ZpCisgcm0gLWYgY29uZnRlc3QqCisgXSkKKyAKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjctY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlOTUyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjctY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSBhMGY5YmQwOWM4MTZhZDI5ZWNmN2MyOWQ2YzI3ZjdkZjk3NzEwMzY0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjI6MDAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNy8zNV0gY3BwOiBob25vciBzeXNyb290LgorCitDdXJyZW50bHksIGlmIHRoZSBnY2MgdG9vbGNoYWluIGlzIHJlbG9jYXRlZCBhbmQgaW5zdGFsbGVkIGZyb20gc3N0YXRlLCB0aGVuIHlvdSB0cnkgYW5kIGNvbXBpbGUKK3ByZXByb2Nlc3NlZCBzb3VyY2UgKC5pIG9yIC5paSBmaWxlcyksIHRoZSBjb21waWxlciB3aWxsIHRyeSBhbmQgYWNjZXNzIHRoZSBidWlsdGluIHN5c3Jvb3QgbG9jYXRpb24KK3JhdGhlciB0aGFuIHRoZSAtLXN5c3Jvb3Qgb3B0aW9uIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmUuIElmIGFjY2VzcyB0byB0aGF0IGRpcmVjdG9yeSBpcworcGVybWlzc2lvbiBkZW5pZWQgKHVucmVhZGFibGUpLCBnY2Mgd2lsbCBlcnJvci4KKworVGhpcyBoYXBwZW5zIHdoZW4gY2NhY2hlIGlzIGluIHVzZSBkdWUgdG8gdGhlIGZhY3QgaXQgdXNlcyBwcmVwcm9jZXNzZWQgc291cmNlIGZpbGVzLgorCitUaGUgZml4IGJlbG93IGFkZHMgJUkgdG8gdGhlIGNwcC1vdXRwdXQgc3BlYyBtYWNybyBzbyB0aGUgZGVmYXVsdCBzdWJzdGl0dXRpb25zIGZvciAtaXByZWZpeCwKKy1pc3lzdGVtLCAtaXN5c3Jvb3QgaGFwcGVuIGFuZCB0aGUgY29ycmVjdCBzeXNyb290IGlzIHVzZWQuCisKK1tZT0NUTyAjMjA3NF0KKworUlAgMjAxMi8wNC8xMworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jcC9sYW5nLXNwZWNzLmggfCAgICAyICstCisgZ2NjL2djYy5jICAgICAgICAgICB8ICAgIDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jcC9sYW5nLXNwZWNzLmggYi9nY2MvY3AvbGFuZy1zcGVjcy5oCitpbmRleCBhMDAxYzNlLi4xYWFlMWU0IDEwMDY0NAorLS0tIGEvZ2NjL2NwL2xhbmctc3BlY3MuaAorKysrIGIvZ2NjL2NwL2xhbmctc3BlY3MuaAorQEAgLTYzLDUgKzYzLDUgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIHsiLmlpIiwgIkBjKystY3BwLW91dHB1dCIsIDAsIDAsIDB9LAorICAgeyJAYysrLWNwcC1vdXRwdXQiLAorICAgICIleyFNOiV7IU1NOiV7IUU6XAorLSAgICBjYzFwbHVzIC1mcHJlcHJvY2Vzc2VkICVpICUoY2MxX29wdGlvbnMpICUyXAorKyAgICBjYzFwbHVzIC1mcHJlcHJvY2Vzc2VkICVpICVJICUoY2MxX29wdGlvbnMpICUyXAorICAgICAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggNTEwNjJhYS4uY2Y2Yjk5ZSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTA0Miw3ICsxMDQyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb21waWxlciBkZWZhdWx0X2NvbXBpbGVyc1tdID0KKyAgICAgICAgICAgICAgICAgICAgICVXe28qOi0tb3V0cHV0LXBjaD0lKn19JVZ9fX19fX0iLCAwLCAwLCAwfSwKKyAgIHsiLmkiLCAiQGNwcC1vdXRwdXQiLCAwLCAwLCAwfSwKKyAgIHsiQGNwcC1vdXRwdXQiLAorLSAgICIleyFNOiV7IU1NOiV7IUU6Y2MxIC1mcHJlcHJvY2Vzc2VkICVpICUoY2MxX29wdGlvbnMpICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCisrICAgIiV7IU06JXshTU06JXshRTpjYzEgLWZwcmVwcm9jZXNzZWQgJWkgJUkgJShjYzFfb3B0aW9ucykgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKKyAgIHsiLnMiLCAiQGFzc2VtYmxlciIsIDAsIDAsIDB9LAorICAgeyJAYXNzZW1ibGVyIiwKKyAgICAiJXshTToleyFNTToleyFFOiV7IVM6YXMgJShhc21fZGVidWcpICUoYXNtX29wdGlvbnMpICVpICVBIH19fX0iLCAwLCAwLCAwfSwKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2Mzg3MjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI4LU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAzMDFlMThkNDcxMWRiNTkyNWU3NjdmYWQwOGRmZmE5Y2ZlMGEyZjFmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjM6MDggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyOC8zNV0gTUlQUzY0OiBEZWZhdWx0IHRvIE42NCBBQkkKKworTUlQUzY0IGRlZmF1bHRzIHRvIG4zMiBBQkksIHRoaXMgcGF0Y2ggbWFrZXMgaXQKK3NvIHRoYXQgaXQgZGVmYXVsdHMgdG8gTjY0IEFCSQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZyBzcGVjaWZpY10KKy0tLQorIGdjYy9jb25maWcuZ2NjIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy5nY2MgYi9nY2MvY29uZmlnLmdjYworaW5kZXggMWEwYmU1MC4uOTg5YzJmYiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcuZ2NjCisrKysgYi9nY2MvY29uZmlnLmdjYworQEAgLTE3OTcsNyArMTc5Nyw3IEBAIG1pcHMqLW10aS1saW51eCopCisgbWlwczY0Ki0qLWxpbnV4KiB8IG1pcHNpc2E2NCotKi1saW51eCopCisgCXRtX2ZpbGU9ImRieGVsZi5oIGVsZm9zLmggZ251LXVzZXIuaCBsaW51eC5oIGdsaWJjLXN0ZGludC5oICR7dG1fZmlsZX0gbWlwcy9nbnUtdXNlci5oIG1pcHMvZ251LXVzZXI2NC5oIG1pcHMvbGludXg2NC5oIG1pcHMvbGludXgtY29tbW9uLmgiCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gbWlwcy90LWxpbnV4NjQiCistCXRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gTUlQU19BQklfREVGQVVMVD1BQklfTjMyIgorKwl0bV9kZWZpbmVzPSIke3RtX2RlZmluZXN9IE1JUFNfQUJJX0RFRkFVTFQ9QUJJXzY0IgorIAljYXNlICR7dGFyZ2V0fSBpbgorIAkJbWlwczY0ZWwtc3QtbGludXgtZ251KQorIAkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gbWlwcy9zdC5oIgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY5ZDI5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjktRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaApAQCAtMCwwICsxLDIyOCBAQAorRnJvbSAyOWQxMjM0NGZiNjgyYTA1M2RlNTNlYjA4Yjk1NzA0Y2YzYjY3YWYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjQ6NTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyOS8zNV0gRGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIGFuZCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIKKyByZWxhdGl2ZSB0byBTWVNURU1MSUJTX0RJUgorCitUaGlzIHBhdGNoIGRlZmluZXMgR0xJQkNfRFlOQU1JQ19MSU5LRVIgYW5kIFVDTElCQ19EWU5BTUlDX0xJTktFUgorcmVsYXRpdmUgdG8gU1lTVEVNTElCU19ESVIgd2hpY2ggY2FuIGJlIHNldCBpbiBnZW5lcmF0ZWQgaGVhZGVycworVGhpcyBicmVha3MgdGhlIGFzc3VtcHRpb24gb2YgaGFyZGNvZGVkIG11bHRpbGliIGluIGdjYworQ2hhbmdlIGlzIG9ubHkgZm9yIHRoZSBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcyBpbiBPRSBpbmNsdWRpbmcKK1NILCBzcGFyYywgYWxwaGEgZm9yIHBvc3NpYmxlIGZ1dHVyZSBzdXBwb3J0IChpZiBhbnkpCisKK1JlbW92ZXMgdGhlIGRvX2hlYWRlcmZpeCB0YXNrIGluIG1ldGFkYXRhCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlndXJhdGlvbl0KKy0tLQorIGdjYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmggfCAgICA0ICsrLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggIHwgICAgNCArKy0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL2kzODYvbGludXguaCAgICAgIHwgICAgMiArLQorIGdjYy9jb25maWcvaTM4Ni9saW51eDY0LmggICAgfCAgICA2ICsrKy0tLQorIGdjYy9jb25maWcvbWlwcy9saW51eC5oICAgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaCAgICB8ICAgIDggKysrKy0tLS0KKyBnY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmggIHwgICAgOCArKysrLS0tLQorIGdjYy9jb25maWcvc2gvbGludXguaCAgICAgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oICAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaCAgIHwgICAgNCArKy0tCisgMTEgZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTIzLDggKzIzLDggQEAKKyAjZGVmaW5lIEVYVFJBX1NQRUNTIFwKKyB7ICJlbGZfZHluYW1pY19saW5rZXIiLCBFTEZfRFlOQU1JQ19MSU5LRVIgfSwKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCSIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUglTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKKyAjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttZ2xpYmM6IiBHICI7OiIgVSAifSIKKyAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQworSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtNjgsOCArNjgsOCBAQAorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgYW5kIFRBUkdFVF9ERUZBVUxUX0ZMT0FUX0FCSS4gICovCisgCisgI3VuZGVmICBHTElCQ19EWU5BTUlDX0xJTktFUgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCAiL2xpYi9sZC1saW51eC5zby4zIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCAiL2xpYi9sZC1saW51eC1hcm1oZi5zby4zIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMyIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0hBUkRfRkxPQVQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LWFybWhmLnNvLjMiCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9ERUZBVUxUIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFwKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTU3LDcgKzU3LDcgQEAKKyAKKyAjZGVmaW5lIExJQkdDQ19TUEVDICIle21mbG9hdC1hYmk9c29mdCo6LWxmbG9hdH0gLWxnY2MiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI2RlZmluZSBMSU5VWF9UQVJHRVRfTElOS19TUEVDICAiJXtoKn0gXAorICAgICV7c3RhdGljOi1Cc3RhdGljfSBcCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvaTM4Ni9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC0yMCw0ICsyMCw0IEBACisgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OICJlbGZfaTM4NiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTI3LDYgKzI3LDYgQEAKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9ONjQgImVsZl94ODZfNjQiCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTlgzMiAiZWxmMzJfeDg2XzY0IgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC1saW51eC5zby4yIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYjY0L2xkLWxpbnV4LXg4Ni02NC5zby4yIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgIi9saWJ4MzIvbGQtbGludXgteDMyLnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgteDg2LTY0LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgteDMyLnNvLjIiCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvbWlwcy9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC0xOCw4ICsxOCw4IEBACisgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFwKKy0gICIle21uYW49MjAwODovbGliL2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliL2xkLnNvLjF9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKKyAKKyAjdW5kZWYgVUNMSUJDX0RZTkFNSUNfTElOS0VSCisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliL2xkLXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wfSIKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvbWlwcy9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTIzLDIwICsyMywyMCBAQAorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT05OMzIgImVsZjMyJXtFQjpifSV7RUw6bH10c21pcG4zMiIKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWIvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCistICAiJXttbmFuPTIwMDg6L2xpYjY0L2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliNjQvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIzMi9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYjMyL2xkLnNvLjF9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKKyAKKyAjdW5kZWYgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFwKKy0gICIle21uYW49MjAwODovbGliL2xkLXVDbGliYy1taXBzbjguc28uMDs6L2xpYi9sZC11Q2xpYmMuc28uMH0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMH0iCisgI3VuZGVmIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0CisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZDY0LXVDbGliYy1taXBzbjguc28uMDs6L2xpYi9sZDY0LXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMH0iCisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIzMi9sZC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIzMi9sZC11Q2xpYmMuc28uMH0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMH0iCisgCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVJOMzIgIi9zeXN0ZW0vYmluL2xpbmtlcjMyIgorICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVJOMzIgXAorSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtMzY3LDE0ICszNjcsMTQgQEAKKyAjdW5kZWYJTElOS19PU19ERUZBVUxUX1NQRUMKKyAjZGVmaW5lIExJTktfT1NfREVGQVVMVF9TUEVDICIlKGxpbmtfb3NfbGludXgpIgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQuc28uMSIKKyAjaWZkZWYgTElOVVg2NF9ERUZBVUxUX0FCSV9FTEZ2MgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYxOi9saWI2NC9sZDY0LnNvLjE7Oi9saWI2NC9sZDY0LnNvLjJ9IgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYxOiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4yfSIKKyAjZWxzZQorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYyOi9saWI2NC9sZDY0LnNvLjI7Oi9saWI2NC9sZDY0LnNvLjF9IgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYyOiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMjs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4xfSIKKyAjZW5kaWYKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wIgorICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKKyAjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttZ2xpYmM6IiBHICI7OiIgVSAifSIKKyAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQworSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL3NoL2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL3NoL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9zaC9saW51eC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtNDMsNyArNDMsNyBAQAorIAorICNkZWZpbmUgVEFSR0VUX0FTTV9GSUxFX0VORCBmaWxlX2VuZF9pbmRpY2F0ZV9leGVjX3N0YWNrCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI3VuZGVmIFNVQlRBUkdFVF9MSU5LX0VNVUxfU1VGRklYCisgI2RlZmluZSBTVUJUQVJHRVRfTElOS19FTVVMX1NVRkZJWCAiX2xpbnV4IgorSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtODMsNyArODMsNyBAQAorICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCisgICAgZG9uZS4gICovCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI3VuZGVmICBMSU5LX1NQRUMKKyAjZGVmaW5lIExJTktfU1BFQyAiLW0gZWxmMzJfc3BhcmMgJXtzaGFyZWQ6LXNoYXJlZH0gXAorSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCisrKysgZ2NjLTQuOS4wL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtOTIsOCArOTIsOCBAQAorICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCisgICAgZG9uZS4gICovCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICNpZmRlZiBTUEFSQ19CSV9BUkNICisgCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC03MywxMCArNzMsMTAgQEAKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUiBtdXN0IGJlIGRlZmluZWQgZm9yIGVhY2ggdGFyZ2V0IHVzaW5nIHRoZW0sIG9yCisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBhbmQgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBmb3IgdGFyZ2V0cworICAgIHN1cHBvcnRpbmcgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBjb21waWxhdGlvbi4gICovCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliL2xkNjQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgIi9saWIvbGR4MzItdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgU1lTVEVNTElCU19ESVIgImxkeDMyLXVDbGliYy5zby4wIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSICIvc3lzdGVtL2Jpbi9saW5rZXIiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIzMiAiL3N5c3RlbS9iaW4vbGlua2VyIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSNjQgIi9zeXN0ZW0vYmluL2xpbmtlcjY0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMwLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2VhZmY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSBjMTgxNmMxNjAxNTZmOTljMzRlNmEwYTAzMTFiYjAyMTkzMjY4MDRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjY6MzcgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzMC8zNV0gZ2NjOiBGaXggYXJndW1lbnQgbGlzdCB0b28gbG9uZyBlcnJvci4KKworVGhlcmUgd291bGQgYmUgYW4gIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gdGhlCitidWlsZCBkaXJlY3RvcnkgaXMgbG9uZ2VyIHRoYW4gMjAwLCB0aGlzIGlzIGNhdXNlZCBieToKKworaGVhZGVycz1gZWNobyAkKFBMVUdJTl9IRUFERVJTKSB8IHRyICcgJyAnXDAxMicgfCBzb3J0IC11YAorCitUaGUgUExVR0lOX0hFQURFUlMgaXMgdG9vIGxvbmcgYmVmb3JlIHNvcnQsIHNvIHRoZSAiZWNobyIgY2FuJ3QgaGFuZGxlCitpdCwgdXNlIHRoZSAkKHNvcnQgbGlzdCkgb2YgR05VIG1ha2Ugd2hpY2ggY2FuIGhhbmRsZSB0aGUgdG9vIGxvbmcgbGlzdAord291bGQgZml4IHRoZSBwcm9ibGVtLCB0aGUgaGVhZGVyIHdvdWxkIGJlIHNob3J0IGVub3VnaCBhZnRlciBzb3J0ZWQuCitUaGUgInRyICcgJyAnXDAxMiciIHdhcyB1c2VkIGZvciB0cmFuc2xhdGluZyB0aGUgc3BhY2UgdG8gIlxuIiwgdGhlCiskKHNvcnQgbGlzdCkgZG9lc24ndCBuZWVkIHRoaXMuCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvTWFrZWZpbGUuaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IDIzMjA0OTcuLjg1NjJhNjIgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTQ2MjcsNyArNDYyNyw3IEBAIGluc3RhbGwtcGx1Z2luOiBpbnN0YWxsZGlycyBsYW5nLmluc3RhbGwtcGx1Z2luIHMtaGVhZGVyLXZhcnMgaW5zdGFsbC1nZW5ndHlwZQorICMgV2Uga2VlcCB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgZmlsZXMgaW4gY29uZmlnIG9yIGMtZmFtaWx5IGFuZCAuZGVmCisgIyBmaWxlcy4gQWxsIG90aGVyIGZpbGVzIGFyZSBmbGF0dGVuZWQgdG8gYSBzaW5nbGUgZGlyZWN0b3J5LgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKHBsdWdpbl9pbmNsdWRlZGlyKQorLQloZWFkZXJzPWBlY2hvICQoUExVR0lOX0hFQURFUlMpIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgLXVgOyBcCisrCWhlYWRlcnM9IiQoc29ydCAkKFBMVUdJTl9IRUFERVJTKSkiOyBcCisgCXNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2A7IFwKKyAJZm9yIGZpbGUgaW4gJCRoZWFkZXJzOyBkbyBcCisgCSAgaWYgWyAtZiAkJGZpbGUgXSA7IHRoZW4gXAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMxLURpc2FibGUtc2R0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMS1EaXNhYmxlLXNkdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzFkNWUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMS1EaXNhYmxlLXNkdC5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorRnJvbSBiODUyNjViYzk0ZWMxYmVhZjFkM2I2OTdjMDNkYjYyOTkxNTUzNDY3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6Mjg6MTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzMS8zNV0gRGlzYWJsZSBzZHQuCisKK1dlIGRvbid0IGxpc3QgZHRyYWNlIGluIERFUEVORFMgc28gd2Ugc2hvdWxkbid0IGJlIGRlcGVuZGluZyBvbiB0aGlzIGhlYWRlci4KK0l0IG1heSBvciBtYXkgbm90IGV4aXN0IGZyb20gcHJlaXZvdXMgYnVpbGRzIHRob3VnaC4gVG8gYmUgZGV0ZXJtaW5zdGljLCBkaXNhYmxlCitzZHQuaCB1c2FnZSBhbHdheXMuIFRoaXMgYXZvaWRzIGJ1aWxkIGZhaWx1cmVzIGlmIHRoZSBoZWFkZXIgaXMgcmVtb3ZlZCBhZnRlciBjb25maWd1cmUKK2J1dCBiZWZvcmUgbGliZ2NjIGlzIGNvbXBpbGVkIGZvciBleGFtcGxlLgorCitSUCAyMDEyLzgvNworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitEaXNhYmxlIHNkdCBmb3IgbGlic3RkYysrLXYzLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtoYWNrXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICAgICAgICAgICB8IDEyICsrKysrKy0tLS0tLQorIGdjYy9jb25maWd1cmUuYWMgICAgICAgICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlICAgIHwgIDYgKysrLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYyB8ICAyICstCisgNCBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCAzYzU1MGE2Li4wMWM3NjI2IDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTI2ODEyLDEyICsyNjgxMiwxMiBAQCBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5IiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkuLi4gIiA+JjY7IH0KKyBoYXZlX3N5c19zZHRfaD1ubworLWlmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorLSAgaGF2ZV9zeXNfc2R0X2g9eWVzCistCistJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCistCistZmkKKysjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisrIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCisrIworKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKysjCisrI2ZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXZlX3N5c19zZHRfaCIgPiY1CisgJGFzX2VjaG8gIiRoYXZlX3N5c19zZHRfaCIgPiY2OyB9CisgCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDM2MDFhYjYuLjA2ZTUwMWYgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtNDc3OSwxNSArNDc3OSwxNSBAQCBpZiB0ZXN0IHgkZ2NjX2N2X2xpYmNfcHJvdmlkZXNfc3NwID0geHllczsgdGhlbgorIGZpCisgCisgIyBUZXN0IGZvciA8c3lzL3NkdC5oPiBvbiB0aGUgdGFyZ2V0LgorLUdDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKy1BQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQorLWhhdmVfc3lzX3NkdF9oPW5vCistaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCistICBoYXZlX3N5c19zZHRfaD15ZXMKKy0gIEFDX0RFRklORShIQVZFX1NZU19TRFRfSCwgMSwKKy0gICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorLWZpCistQUNfTVNHX1JFU1VMVCgkaGF2ZV9zeXNfc2R0X2gpCisrI0dDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKysjQUNfTVNHX0NIRUNLSU5HKHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSkKKysjaGF2ZV9zeXNfc2R0X2g9bm8KKysjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisrIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCisrIyAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorKyMgICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorKyNmaQorKyNBQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKyAKKyAjIENoZWNrIGlmIFRGbW9kZSBsb25nIGRvdWJsZSBzaG91bGQgYmUgdXNlZCBieSBkZWZhdWx0IG9yIG5vdC4KKyAjIFNvbWUgZ2xpYmMgdGFyZ2V0cyB1c2VkIERGbW9kZSBsb25nIGRvdWJsZSwgYnV0IHdpdGggZ2xpYmMgMi40CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IDQ5NTNjOWYuLjUzYTExNDUgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMjA1NzgsMTEgKzIwNTc4LDExIEBAIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKyAKKy0gIGlmIHRlc3QgJGdsaWJjeHhfY3Zfc3lzX3NkdF9oID0geWVzOyB0aGVuCisrIyAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KKyAKKy0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKysjJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCisgCistICBmaQorKyMgIGZpCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3Zfc3lzX3NkdF9oIiA+JjUKKyAkYXNfZWNobyAiJGdsaWJjeHhfY3Zfc3lzX3NkdF9oIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlLmFjIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworaW5kZXggNzNkNDMwYS4uZjIxMzVlMiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKK0BAIC0yMTEsNyArMjExLDcgQEAgR0xJQkNYWF9DSEVDS19TQ19OUFJPQ0VTU09SU19PTkxOCisgR0xJQkNYWF9DSEVDS19TQ19OUFJPQ19PTkxOCisgR0xJQkNYWF9DSEVDS19QVEhSRUFEU19OVU1fUFJPQ0VTU09SU19OUAorIEdMSUJDWFhfQ0hFQ0tfU1lTQ1RMX0hXX05DUFUKKy1HTElCQ1hYX0NIRUNLX1NEVF9ICisrI0dMSUJDWFhfQ0hFQ0tfU0RUX0gKKyAKKyAjIENoZWNrIGZvciBhdmFpbGFibGUgaGVhZGVycy4KKyBBQ19DSEVDS19IRUFERVJTKFtlbmRpYW4uaCBleGVjaW5mby5oIGZsb2F0LmggZnAuaCBpZWVlZnAuaCBpbnR0eXBlcy5oIFwKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMyLWxpYnRvb2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMyLWxpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IzZDFiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzItbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDZjNzE1ZmNmYTI2MmFkYWRjYTgxYzY4YTFmM2Y2OWFhMzE4N2E1MDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyOToxMSArMDQwMAorU3ViamVjdDogW1BBVENIIDMyLzM1XSBsaWJ0b29sCisKK2xpYnN0ZGMrKyBmcm9tIGdjYy1ydW50aW1lIGdldHMgY3JlYXRlZCB3aXRoIC1ycGF0aD0vdXNyL2xpYi8uLi9saWIgZm9yIHFlbXV4ODYtNjQKK3doZW4gcnVubmluZyBvbiBhbSB4ODZfNjQgYnVpbGQgaG9zdC4KKworVGhpcyBwYXRjaCBzdG9wcyB0aGlzIHNwZWFkaW5nIHRvIGxpYmRpciBpbiB0aGUgbGlic3RkYysrLmxhIGZpbGUgd2l0aGluIGxpYnRvb2wuCitBcmd1YWJseSwgaXQgc2hvdWxkbid0IGJlIHBhc3NpbmcgdGhpcyBpbnRvIGxpYnRvb2wgaW4gdGhlIGZpcnN0IHBsYWNlIGJ1dAorZm9yIG5vdyB0aGlzIHJlc29sdmVzIHRoZSBuYXN0aWVzdCBwcm9ibGVtcyB0aGlzIGNhdXNlcy4KKworZnVuY19ub3JtYWxfYWJzcGF0aCB3b3VsZCByZXNvbHZlIGFuIGVtcHR5IHBhdGggdG8gYHB3ZGAgc28gd2UgbmVlZAordG8gZmlsdGVyIHRoZSB6ZXJvIGNhc2UuCisKK1JQIDIwMTIvOC8yNAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGx0bWFpbi5zaCB8ICAgIDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAoraW5kZXggYTAzNDMzZi4uNDZmNDdjMiAxMDA2NDQKKy0tLSBhL2x0bWFpbi5zaAorKysrIGIvbHRtYWluLnNoCitAQCAtNjM1OSw2ICs2MzU5LDEwIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgXGAtcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCisgCisgICAgICAgaW5zdGFsbF9saWJkaXI9IiQxIgorKyAgICAgIGlmIHRlc3QgLW4gIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KKysJZnVuY19ub3JtYWxfYWJzcGF0aCAiJGluc3RhbGxfbGliZGlyIgorKwlpbnN0YWxsX2xpYmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKKysgICAgICBmaQorIAorICAgICAgIG9sZGxpYnM9CisgICAgICAgaWYgdGVzdCAteiAiJHJwYXRoIjsgdGhlbgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzNmMzN2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSA5N2U0NTkxYzIwMzEwNDI1ZTdhY2EwZTY3MTJhOGQ5NDgwZTc3NDRjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MzA6MzIgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzMy8zNV0gZ2NjOiBhcm12NDogcGFzcyBmaXgtdjRieCB0byBsaW5rZXIgdG8gc3VwcG9ydCBFQUJJLgorCitUaGUgTElOS19TUEVDIGZvciBsaW51eCBnZXRzIG92ZXJ3cml0dGVuIGJ5IGxpbnV4LWVhYmkuaCB3aGljaAorbWVhbnMgdGhlIHZhbHVlIG9mIFRBUkdFVF9GSVhfVjRCWF9TUEVDIGdldHMgbG9zdCBhbmQgYXMgYSByZXN1bHQKK3RoZSBvcHRpb24gaXMgbm90IHBhc3NlZCB0byBsaW5rZXIgd2hlbiBjaG9zaW5nIG1hcmNoPWFybXY0CitUaGlzIHBhdGNoIHJlZGVmaW5lcyB0aGlzIGluIGxpbnV4LWVhYmkuaCBhbmQgcmVpbnNlcnRzIGl0Citmb3IgZWFiaSBkZWZhdWx0aW5nIHRvb2xjaGFpbnMuCisKK1dlIG1pZ2h0IHdhbnQgdG8gc2VuZCBpdCB1cHN0cmVhbS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggfCAgICA2ICsrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCitAQCAtNzcsMTAgKzc3LDE0IEBACisgICAgICV7bWZsb2F0LWFiaT1zb2Z0KjoiIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQgIn0gXAorICAgICAleyFtZmxvYXQtYWJpPSo6IiBHTElCQ19EWU5BTUlDX0xJTktFUl9ERUZBVUxUICJ9IgorIAorKy8qIEZvciBhcm12NCB3ZSBwYXNzIC0tZml4LXY0YnggdG8gbGlua2VyIHRvIHN1cHBvcnQgRUFCSSAqLworKyN1bmRlZiBUQVJHRVRfRklYX1Y0QlhfU1BFQworKyNkZWZpbmUgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgIiV7bWNwdT1hcm04fG1jcHU9YXJtODEwfG1jcHU9c3Ryb25nYXJtKnxtYXJjaD1hcm12NDogLS1maXgtdjRieH0iCisrCisgLyogQXQgdGhpcyBwb2ludCwgYnBhYmkuaCB3aWxsIGhhdmUgY2xvYmJlcmVkIExJTktfU1BFQy4gIFdlIHdhbnQgdG8KKyAgICB1c2UgdGhlIEdOVS9MaW51eCB2ZXJzaW9uLCBub3QgdGhlIGdlbmVyaWMgQlBBQkkgdmVyc2lvbi4gICovCisgI3VuZGVmICBMSU5LX1NQRUMKKy0jZGVmaW5lIExJTktfU1BFQyBFQUJJX0xJTktfU1BFQwkJCQkJXAorKyNkZWZpbmUgTElOS19TUEVDIFRBUkdFVF9GSVhfVjRCWF9TUEVDIEVBQklfTElOS19TUEVDCQkJXAorICAgTElOVVhfT1JfQU5EUk9JRF9MRCAoTElOVVhfVEFSR0VUX0xJTktfU1BFQywJCQkJXAorIAkJICAgICAgIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgIiAiIEFORFJPSURfTElOS19TUEVDKQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YjlmODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDM0LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2gKQEAgLTAsMCArMSwxMDIgQEAKK0Zyb20gZmM1ZTRiZWFlYTg1NmEyYjQ4NmM3NzBhZDNhZGRjMGY1YmIzMTAwZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjMzOjA0ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzQvMzVdIFVzZSB0aGUgbXVsdGlsaWIgY29uZmlnIGZpbGVzIGZyb20gJHtCfSBpbnN0ZWFkIG9mCisgdXNpbmcgdGhlIG9uZXMgZnJvbSAke1N9CisKK1VzZSB0aGUgbXVsdGlsaWIgY29uZmlnIGZpbGVzIGZyb20gJHtCfSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBvbmVzIGZyb20gJHtTfQorc28gdGhhdCB0aGUgc291cmNlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBnY2MtY3Jvc3MtaW5pdGlhbCwKK2djYy1jcm9zcy1pbnRlcm1lZGlhdGUsIGdjYy1jcm9zcywgZ2NjLXJ1bnRpbWUsIGFuZCBhbHNvIHRoZSBzZGsgYnVpbGQuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIGdjYy9jb25maWd1cmUgICAgfCAgIDIyICsrKysrKysrKysrKysrKysrKy0tLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgICAyMiArKysrKysrKysrKysrKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDhiYzBjOTguLjNjZDA4MTcgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMTE1MTksMTAgKzExNTE5LDIwIEBAIGRvbmUKKyB0bWFrZV9maWxlXz0KKyBmb3IgZiBpbiAke3RtYWtlX2ZpbGV9CisgZG8KKy0JaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCistCXRoZW4KKy0JCXRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKy0JZmkKKysgIGNhc2UgJGYgaW4KKysgICAgKi90LWxpbnV4NjQgKQorKyAgICAgICBpZiB0ZXN0IC1mIC4vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gLi9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICogKQorKyAgICAgICBpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgIGVzYWMKKyBkb25lCisgdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlX30iCisgCitAQCAtMTE1MzMsNiArMTE1NDMsMTAgQEAgdG1fZmlsZV9saXN0PSJvcHRpb25zLmgiCisgdG1faW5jbHVkZV9saXN0PSJvcHRpb25zLmggaW5zbi1jb25zdGFudHMuaCIKKyBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgIGNhc2UgJGYgaW4KKysgICAgKi9saW51eDY0LmggKQorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIDs7CisgICAgIC4vKiApCisgICAgICAgIGY9YGVjaG8gJGYgfCBzZWQgJ3MvXi4uLy8nYAorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAkZiIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggNWU1ZTg0Zi4uNDE1YTZkZiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC0xNzAwLDEwICsxNzAwLDIwIEBAIGRvbmUKKyB0bWFrZV9maWxlXz0KKyBmb3IgZiBpbiAke3RtYWtlX2ZpbGV9CisgZG8KKy0JaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCistCXRoZW4KKy0JCXRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKy0JZmkKKysgIGNhc2UgJGYgaW4KKysgICAgKi90LWxpbnV4NjQgKQorKyAgICAgICBpZiB0ZXN0IC1mIC4vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gLi9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICogKQorKyAgICAgICBpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgIGVzYWMKKyBkb25lCisgdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlX30iCisgCitAQCAtMTcxNCw2ICsxNzI0LDEwIEBAIHRtX2ZpbGVfbGlzdD0ib3B0aW9ucy5oIgorIHRtX2luY2x1ZGVfbGlzdD0ib3B0aW9ucy5oIGluc24tY29uc3RhbnRzLmgiCisgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICBjYXNlICRmIGluCisrICAgICovbGludXg2NC5oICkKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICA7OworICAgICAuLyogKQorICAgICAgICBmPWBlY2hvICRmIHwgc2VkICdzL14uLi8vJ2AKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gJGYiCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDAtZml4LWcrKy1zeXNyb290LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwYWE1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDAtZml4LWcrKy1zeXNyb290LnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK1BvcnRpb25zIG9mCisKK2h0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9nY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZy9tc2cyNjAxMy5odG1sCisKK2FyZSBub3QgdXBzdHJlYW1lZCB5ZXQuIFNvIGxldHMga2VlcCBtaXNzaW5nIHBpZWNlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9jb25maWd1cmUuYWMJMjAxMy0wNy0xNSAxNTo1NTo0OS40ODgzOTkxMzIgLTA3MDAKKysrKyBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZS5hYwkyMDEzLTA3LTE1IDE2OjAyOjMxLjc3MjQwNjY3OSAtMDcwMAorQEAgLTE0OCw3ICsxNDgsOSBAQAorIGlmIHRlc3QgIiR7d2l0aF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuCisgICBnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdD1gZXhwciAiJHtnY2NfZ3h4X2luY2x1ZGVfZGlyfSIgOiAiJHt3aXRoX3N5c3Jvb3R9IidcKC4qXCknYAorICAgaWYgdGVzdCAiJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iOyB0aGVuCistICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBpZiB0ZXN0IHgke3dpdGhfc3lzcm9vdH0gIT0geC87IHRoZW4KKysgICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgZmkKKyAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdD0xCisgICBmaQorIGZpCitJbmRleDogZ2NjLTQuOC4xL2djYy9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvY29uZmlndXJlCTIwMTMtMDctMTUgMTU6NTU6NDkuNDcyMzk5MTMyIC0wNzAwCisrKysgZ2NjLTQuOC4xL2djYy9jb25maWd1cmUJMjAxMy0wNy0xNSAxNjowMjozMS43ODA0MDY2ODAgLTA3MDAKK0BAIC0zMzI1LDcgKzMzMjUsOSBAQAorIGlmIHRlc3QgIiR7d2l0aF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuCisgICBnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdD1gZXhwciAiJHtnY2NfZ3h4X2luY2x1ZGVfZGlyfSIgOiAiJHt3aXRoX3N5c3Jvb3R9IidcKC4qXCknYAorICAgaWYgdGVzdCAiJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iOyB0aGVuCistICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBpZiB0ZXN0IHgke3dpdGhfc3lzcm9vdH0gIT0geC87IHRoZW4KKysgICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgZmkKKyAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdD0xCisgICBmaQorIGZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQxLWxpYnRvb2wtYXZvaWQtbGliZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0MS1saWJ0b29sLWF2b2lkLWxpYmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQ5NjEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0MS1saWJ0b29sLWF2b2lkLWxpYmRpci5wYXRjaApAQCAtMCwwICsxLDE5IEBACitBdm9pZCB1c2luZyBsaWJkaXIgZnJvbSAubGEgd2hpY2ggdXN1YWxseSBwb2ludHMgdG8gYSBob3N0IHBhdGgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KKworZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAoraW5kZXggYTAzNDMzZi4uMTkwMmE5MCAxMDA2NDQKKy0tLSBhL2x0bWFpbi5zaAorKysrIGIvbHRtYWluLnNoCitAQCAtNTYyOCw2ICs1NjI4LDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKyAJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKyAJICBlbHNlCisrCSAgICAjIEluc3RlYWQgb2YgdXNpbmcgbGliZGlyIGZyb20gLmxhIHdoaWNoIHVzdWFsbHkgcG9pbnRzIHRvIGEgaG9zdCBwYXRoLAorKwkgICAgIyB1c2UgdGhlIHBhdGggdGhlIC5sYSBpcyBjb250YWluZWQgaW4uCisrCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisgCSAgICBkaXI9IiRsaWJkaXIiCisgCSAgICBhYnNkaXI9IiRsaWJkaXIiCisgCSAgZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDMtY3BwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0My1jcHAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFmODY0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDMtY3BwLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK1RoZSBPRSBlbnZpcm9ubWVudCBzZXRzIGFuZCBleHBvcnRzIENQUCBhcyBiZWluZyB0aGUgdGFyZ2V0IGdjYy4gV2hlbiBidWlsZGluZyAKK2djYy1jcm9zcy1jYW5hZGlhbiBmb3IgYSBtaW5ndyB0YXJnZXR0ZWQgc2RrLCB0aGUgZm9sbG93aW5nIGNhbiBiZSBmb3VuZCBpbgorYnVpbGQueDg2XzY0LXBva3lzZGstbWluZ3czMi5pNTg2LXBva3ktbGludXgvYnVpbGQteDg2XzY0LWxpbnV4L2xpYmliZXJ0eS9jb25maWcubG9nOgorCitjb25maWd1cmU6MzY0MTogY2hlY2tpbmcgZm9yIF9GSUxFX09GRlNFVF9CSVRTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMKK2NvbmZpZ3VyZTozNjY2OiBnY2MgIC1jIC1pc3lzdGVtL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlICBjb25mdGVzdC5jID4mNQorY29uZmlndXJlOjM2NjY6ICQ/ID0gMAorY29uZmlndXJlOjM2OTg6IHJlc3VsdDogbm8KK2NvbmZpZ3VyZTozNzg2OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvcgorY29uZmlndXJlOjM4NTY6IHJlc3VsdDogeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MgLUUgLS1zeXNyb290PS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LW5hdGl2ZXNkay1taW5ndzMyLXBva3lzZGstbWluZ3czMgorY29uZmlndXJlOjM4NzY6IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjIC1FIC0tc3lzcm9vdD0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1uYXRpdmVzZGstbWluZ3czMi1wb2t5c2RrLW1pbmd3MzIgIGNvbmZ0ZXN0LmMKK2NvbmZpZ3VyZTozODc2OiAkPyA9IDAKKworTm90ZSB0aGlzIGlzIGEgKmJ1aWxkKiB0YXJnZXQgKGluIGJ1aWxkLXg4Nl82NC1saW51eCkgc28gaXQgc2hvdWxkIGJlIHVzaW5nIAordGhlIGhvc3QgImdjYyIsIG5vdCB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYy4gU2luY2UgdGhlIG1pbmd3MzIgaGVhZGVycyBhcmUgCit2ZXJ5IGRpZmZlcmVudCwgdXNpbmcgdGhlIHdyb25nIGNwcCBpcyBhIHJlYWwgcHJvYmxlbS4gSXQgaXMgbGVha2luZyBpbnRvIAorY29uZmlndXJlIHRocm91Z2ggdGhlIENQUCB2YXJpYWJsZS4gVWx0aW1hdGVseSB0aGlzIGxlYWRzIHRvIGJ1aWxkIGZhaWx1cmVzIAorcmVsYXRlZCB0byBub3QgYmVpbmcgYWJsZSB0byBpbmNsdWRlIGEgcHJvY2Vzcy5oIGZpbGUgZm9yIHBlbS11bml4LmMuCisKK1RoZSBmaXggaXMgdG8gZW5zdXJlIHdlIGV4cG9ydCBhIHNhbmUgQ1BQIHZhbHVlIGludG8gdGhlIGJ1aWxkIGVudmlyb25tZW50IHdoZW4KK3VzaW5nIGJ1aWxkIHRhcmdldHMuIFdlIGNvdWxkIGRlZmluZSBhIENQUF9GT1JfQlVJTEQgdmFsdWUgd2hpY2ggbWF5IGJlIHRoZSB2ZXJzaW9uCit3aGljaCBuZWVkcyB0byBiZSB1cHN0cmVhbWVkIGJ1dCBmb3Igbm93LCB0aGlzIGZpeCBpcyBnb29kIGVub3VnaCB0byBhdm9pZCB0aGUgCitwcm9ibGVtLgorCitSUCAyMi8wOC8yMDEzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2NjLTQuOC4xL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvTWFrZWZpbGUuaW4JMjAxMy0wMy0zMCAxMToyNTowMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvTWFrZWZpbGUuaW4JMjAxMy0wOC0xMyAxMjowMzoxNy4xNTE5ODg4ODIgKzAwMDAKK0BAIC0xNDksNiArMTQ5LDcgQEAKKyAJQVI9IiQoQVJfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUjsgXAorIAlBUz0iJChBU19GT1JfQlVJTEQpIjsgZXhwb3J0IEFTOyBcCisgCUNDPSIkKENDX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0M7IFwKKysJQ1BQPSIkKENDX0ZPUl9CVUlMRCkgLUUiOyBleHBvcnQgQ1BQOyBcCisgCUNGTEFHUz0iJChDRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDRkxBR1M7IFwKKyAJQ09ORklHX1NIRUxMPSIkKFNIRUxMKSI7IGV4cG9ydCBDT05GSUdfU0hFTEw7IFwKKyAJQ1hYPSIkKENYWF9GT1JfQlVJTEQpIjsgZXhwb3J0IENYWDsgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0NC1nZW5ndHlwZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ0LWdlbmd0eXBlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzg3NjFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0NC1nZW5ndHlwZXMucGF0Y2gKQEAgLTAsMCArMSw5NyBAQAorZ2VuZ3R5cGUgaXMgZ2VuZXJhdGVkIGZvciBib3RoIHRoZSBidWlsZCBzeXN0ZW0gYW5kIHRoZSB0YXJnZXQuIC1ER0VORVJBVE9SX0ZJTEUKK3dhcyBhZGRlZCBpbiB0aGUgcGF0Y2ggaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMTItMDcvbXNnMDAyNzMuaHRtbAorYW5kIHdhcyBhcHBsaWVkIHRvIGJvdGggdmVyc2lvbnMgb2YgZ2VuZ3R5cGUuCisKK1VuZm9ydHVuYXRlbHkgdGhlIHByZXNlbmNlIG9mIHRoaXMgZmxhZyB0cmlnZ2VycyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiAoYmNvbmZpZy5oKSAKK3RvIGJlIGluY2x1ZGVkIGZvciB0aGUgdGFyZ2V0IGJ1aWxkIG9mIGdlbmd0eXBlLiBDb21waWxpbmcgZ2VuZ3R5cGUgd2l0aCB0aGUgdGFyZ2V0IAorY29tcGlsZXIgYW5kIGJjb25maWcuaCBjYW4gcmVzdWx0IGluIGVycm9ycyBpZiB0aGUgYnVpbGQgYW5kIHRhcmdldCBzeXN0ZW1zIGFyZSAKK2Rpc3NpbWlsYXIuIEFuIGV4YW1wbGUgY2FzZSB0aGlzIGZhaWxzIGlzIGNyb3NzIGNvbXBpbGluZyBnY2Mgb24gbGludXggZm9yIGEgZGFyd2luIAordGFyZ2V0IHN5c3RlbToKKworSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay1zaGFyZWQvZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvZ2VuZ3R5cGUtcGFyc2UuYzoyNTowOgorfCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmstc2hhcmVkL2djYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2dlbmd0eXBlLXBhcnNlLmM6IEluIGZ1bmN0aW9uICd2b2lkIHBhcnNlX2Vycm9yKGNvbnN0IGNoYXIqLCAuLi4pJzoKK3wgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrLXNoYXJlZC9nY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9zeXN0ZW0uaDo5Mzo1MzogZXJyb3I6ICdmcHV0Y191bmxvY2tlZCcgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlCit8ICAjICBkZWZpbmUgZnB1dGMoQywgU3RyZWFtKSBmcHV0Y191bmxvY2tlZCAoQywgU3RyZWFtKQorCit3aGljaCBvY2N1cnMgc2luY2UgYXV0by1idWlsZC5oIGFuZCBhdXRvLWhvc3QuaCBoYXZlIGRpZmZlcm5ldCB2YWx1ZXMgb2YKK0hBVkVfRlBVVENfVU5MT0NLRUQ6CisKKyNkZWZpbmUgSEFWRV9GUFVUQ19VTkxPQ0tFRCAxCisvKiAjdW5kZWYgSEFWRV9GUFVUU19VTkxPQ0tFRCAqLworCitUaGUgb2J2aW91cyBmaXggaXMgdG8gb25seSBpbmNsdWRlIHRoZSBmbGFnIG9uIGJ1aWxkLyB0YXJnZXRzIHdoaWNoIHRoaXMgcGF0Y2ggZG9lcywgaG93ZXZlciAKK3RoaXMgYWxzbyBsZWFkcyB0byBjb21waWxlIGVycm9ycyBkdWUgdG8gY29uc3RfdHJlZSBiZWluZyB1bmRlZmluZWQgYnV0IHVzZWQgaW4gZG91YmxlX2ludC5oCisKK0kgYWRkZWQgYSBHRU5FUkFUT1JfRklMRTIgZmxhZyB0byB3b3JrYXJvdW5kIHRob3NlIGluIHRoZSAKK3RhcmdldCBjYXNlIGFuZCBhbGxvdyB0aGUgYnVpbGQgdG8gc3VjY2VlZC4KKworT25seSB0aGUgYnVpbGQvZ2VuZ3R5cGVzIHNob3VsZCBoYXZlIHRoZSAtREdFTkVSQVRPUl9GSUxFIAorCitSUCAyMi84LzIwMTMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnY2MtNC44LjEvZ2NjL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL01ha2VmaWxlLmluCTIwMTMtMDgtMTkgMTE6NDA6MzYuODQ0MDE0NDI0ICswMDAwCisrKysgZ2NjLTQuOC4xL2djYy9NYWtlZmlsZS5pbgkyMDEzLTA4LTE5IDExOjQwOjM3Ljc4NDAxNDQwMiArMDAwMAorQEAgLTM5MDMsMjcgKzM5MDMsMjkgQEAKKyAKKyBnZW5ndHlwZS1sZXgubyBidWlsZC9nZW5ndHlwZS1sZXgubyA6IGdlbmd0eXBlLWxleC5jIGdlbmd0eXBlLmggJChTWVNURU1fSCkKKyBnZW5ndHlwZS1sZXgubzogJChDT05GSUdfSCkgJChCQ09ORklHX0gpCistQ0ZMQUdTLWdlbmd0eXBlLWxleC5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKytDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUtbGV4Lm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLWxleC5vOiAkKEJDT05GSUdfSCkKKyAKKyBnZW5ndHlwZS1wYXJzZS5vIGJ1aWxkL2dlbmd0eXBlLXBhcnNlLm8gOiBnZW5ndHlwZS1wYXJzZS5jIGdlbmd0eXBlLmggXAorICAgJChTWVNURU1fSCkKKyBnZW5ndHlwZS1wYXJzZS5vOiAkKENPTkZJR19IKQorLUNGTEFHUy1nZW5ndHlwZS1wYXJzZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKytDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubyArPSAtREdFTkVSQVRPUl9GSUxFCisgYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubzogJChCQ09ORklHX0gpCisgCisgZ2VuZ3R5cGUtc3RhdGUubyBidWlsZC9nZW5ndHlwZS1zdGF0ZS5vOiBnZW5ndHlwZS1zdGF0ZS5jICQoU1lTVEVNX0gpIFwKKyAgIGdlbmd0eXBlLmggZXJyb3JzLmggZG91YmxlLWludC5oIHZlcnNpb24uaCAkKEhBU0hUQUJfSCkgJChPQlNUQUNLX0gpIFwKKyAgICQoWFJFR0VYX0gpCisgZ2VuZ3R5cGUtc3RhdGUubzogJChDT05GSUdfSCkKKy1DRkxBR1MtZ2VuZ3R5cGUtc3RhdGUubyArPSAtREdFTkVSQVRPUl9GSUxFCisrQ0ZMQUdTLWdlbmd0eXBlLXN0YXRlLm8gKz0gLURHRU5FUkFUT1JfRklMRTIKKytDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUtc3RhdGUubyArPSAtREdFTkVSQVRPUl9GSUxFCisgYnVpbGQvZ2VuZ3R5cGUtc3RhdGUubzogJChCQ09ORklHX0gpCisgCisgZ2VuZ3R5cGUubyBidWlsZC9nZW5ndHlwZS5vIDogZ2VuZ3R5cGUuYyAkKFNZU1RFTV9IKSBnZW5ndHlwZS5oIAlcCisgICBydGwuZGVmIGluc24tbm90ZXMuZGVmIGVycm9ycy5oIGRvdWJsZS1pbnQuaCB2ZXJzaW9uLmggJChIQVNIVEFCX0gpIFwKKyAgICQoT0JTVEFDS19IKSAkKFhSRUdFWF9IKQorIGdlbmd0eXBlLm86ICQoQ09ORklHX0gpCistQ0ZMQUdTLWdlbmd0eXBlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorK0NGTEFHUy1nZW5ndHlwZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUyCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLm86ICQoQkNPTkZJR19IKQorIAorIGJ1aWxkL2dlbm1kZGVwcy5vOiBnZW5tZGRlcHMuYyAkKEJDT05GSUdfSCkgJChTWVNURU1fSCkgY29yZXR5cGVzLmgJXAorQEAgLTM5ODgsNyArMzk5MCw3IEBACisgIyBhbnkgc3lzdGVtIGhlYWRlciBpcyBpbmNsdWRlZC4KKyBnZW5ndHlwZS1sZXguYyA6IGdlbmd0eXBlLWxleC5sCisgCS0kKEZMRVgpICQoRkxFWEZMQUdTKSAtbyRAICQ8ICYmIHsgXAorLQkgIGVjaG8gJyNpbmNsdWRlICJiY29uZmlnLmgiJyA+ICRALnRtcDsgXAorKwkgIGVjaG8gJycgPiAkQC50bXA7IFwKKyAJICBjYXQgJEAgPj4gJEAudG1wOyBcCisgCSAgbXYgJEAudG1wICRAOyBcCisgCX0KK0luZGV4OiBnY2MtNC44LjEvZ2NjL2RvdWJsZS1pbnQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9kb3VibGUtaW50LmgJMjAxMy0wMS0zMCAxMTowNDozMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvZ2NjL2RvdWJsZS1pbnQuaAkyMDEzLTA4LTE5IDExOjQxOjUxLjU2NDAxMjcxOSArMDAwMAorQEAgLTQ0OCwxMCArNDQ4LDEyIEBACisgCisgCisgI2lmbmRlZiBHRU5FUkFUT1JfRklMRQorKyNpZm5kZWYgR0VORVJBVE9SX0ZJTEUyCisgLyogQ29udmVyc2lvbiB0byBhbmQgZnJvbSBHTVAgaW50ZWdlciByZXByZXNlbnRhdGlvbnMuICAqLworIAorIHZvaWQgbXB6X3NldF9kb3VibGVfaW50IChtcHpfdCwgZG91YmxlX2ludCwgYm9vbCk7CisgZG91YmxlX2ludCBtcHpfZ2V0X2RvdWJsZV9pbnQgKGNvbnN0X3RyZWUsIG1wel90LCBib29sKTsKKyAjZW5kaWYKKysjZW5kaWYKKyAKKyAjZW5kaWYgLyogRE9VQkxFX0lOVF9IICovCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ2LWxpYmF0b21pYy1kZXB0cmFja2luZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDYtbGliYXRvbWljLWRlcHRyYWNraW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYTRmNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ2LWxpYmF0b21pYy1kZXB0cmFja2luZy5wYXRjaApAQCAtMCwwICsxLDQxIEBACitnY2MgNC44IHdvbid0IGJ1aWxkIHdpdGggLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgc2luY2UgdGhlICouUHBvIGZpbGVzCitkb24ndCBnZXQgY3JlYXRlZCB1bmxlc3MgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyBpcyB0cnVlLgorCitUaGlzIHBhdGNoIGVuc3VyZXMgd2Ugb25seSB1c2UgdGhvc2UgY29tcGlsZXIgb3B0aW9ucyB3aGVuIGl0cyBlbmFibGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisoUHJvYmxlbSB3YXMgYWxyZWFkeSByZXBvcnRlZCB1cHN0cmVhbSwgYXR0YWNoZWQgdGhpcyBwYXRjaCB0aGVyZQoraHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NTkzMCkKKworUlAgCisyMDEyLzA5LzIyCisKK0luZGV4OiBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvbGliYXRvbWljL01ha2VmaWxlLmFtCTIwMTMtMDEtMTQgMTg6MTY6MjMuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5hbQkyMDEzLTA5LTIyIDEwOjM4OjE4LjkwNDA2NDc1MCArMDAwMAorQEAgLTEwMCw3ICsxMDAsOCBAQAorIElGVU5DX0RFRgk9IC1ESUZVTkNfQUxUPSQoUEFUX1MpCisgSUZVTkNfT1BUCT0gJCh3b3JkICQoUEFUX1MpLCQoSUZVTkNfT1BUSU9OUykpCisgCistTV9ERVBTCQk9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX1RSVUVATV9ERVBTCQk9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX0ZBTFNFQE1fREVQUwkJPSAKKyBNX1NJWkUJCT0gLUROPSQoUEFUX04pCisgTV9JRlVOQwkJPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCisgTV9GSUxFCQk9ICQoUEFUX0JBU0UpX24uYworSW5kZXg6IGdjYy00LjguMS9saWJhdG9taWMvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9saWJhdG9taWMvTWFrZWZpbGUuaW4JMjAxMy0wNS0zMSAwOTowOToyNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmluCTIwMTMtMDktMjIgMTA6NDA6NDIuNTIwMDU5OTE3ICswMDAwCitAQCAtMjk4LDcgKzI5OCw4IEBACisgUEFUX1MgPSAkKHdvcmQgMywkKFBBVF9TUExJVCkpCisgSUZVTkNfREVGID0gLURJRlVOQ19BTFQ9JChQQVRfUykKKyBJRlVOQ19PUFQgPSAkKHdvcmQgJChQQVRfUyksJChJRlVOQ19PUFRJT05TKSkKKy1NX0RFUFMgPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9UUlVFQE1fREVQUyA9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX0ZBTFNFQE1fREVQUyA9IAorIE1fU0laRSA9IC1ETj0kKFBBVF9OKQorIE1fSUZVTkMgPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCisgTV9GSUxFID0gJChQQVRfQkFTRSlfbi5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ3LXJlcG9tZW1idWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ3LXJlcG9tZW1idWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFmZDU1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDctcmVwb21lbWJ1Zy5wYXRjaApAQCAtMCwwICsxLDUzIEBACitXaGVuIGNvbXBpbGluZyBhIHByb2plY3QgdXNpbmcgLWZyZXBvLCAucnBvIGZpbGVzIGFyZSB3cml0dGVuIGFsb25nc2lkZQordGhlIC5vIGZpbGUsIHRoZSBzeW1ib2xzIGVpdGhlciBoYXZlIE8gb3IgQyBhZ2FpbnN0IHRoZW0uIER1cmluZyBmaW5hbCBsaW5raW5nLAordGhlIG9iamVjdHMgY2FuIGJlIHJlY29tcGlsZWQgd2l0aCBzb21lIG9mIHRoZSBlbnRyaWVzIHR3ZWFrZWQvY2hvc2VuIGJ5IHRoZSAKK3RsaW5rLmMgY29kZSAodmlzaWJsZSB3aXRoIFRMSU5LX1ZFUkJPU0U9MyksIGl0IGRvZXMgdGhpcyBieSBjaGFuZ2luZyBPIC0+IEMKK2luIHRoZSAucnBvIGZpbGVzLgorCitNeSB0ZXN0cyBzaG93ZWQgdGhhdCBpbml0X3JlcG8gKGNwL3JlcG8uYykgd2FzIGNvcnJlY3RseSBjYWxsaW5nIAorSURFTlRJRklFUl9SRVBPX0NIT1NFTiBhZ2FpbnN0IHRoZSByaWdodCBpZGVudGlmZXJzIGFuZCBzZXR0aW5nIHRoZQorY2hvc2VuIGJpdC4KKworQnkgdGhlIHRpbWUgZmluaXNoX3JlcG8oKSBvciBlbWl0X3JlcG9fcCgpIHdlcmUgY2FsbGVkLCB0aGUgcG9pbnRlciByZXR1cm5lZAorYnkgZ2V0X2lkZW50aWZpZXIoKSBmb3IgdGhlIHN5bWJvbCBtYXJrZWQgZHVyaW5nIGluaXRfcmVwbyBoYWQgY2hhbmdlZCBhbmQKK3RoZSBjaG9zZW4gYml0IHdhcyBubyBsb25nZXIgc2V0LiBUaGlzIGxlYWQgdG8gbGlua2luZyBidWdzIGxpa2U6CisKK2NvbGxlY3Q6IHJlbGlua2luZworY29sbGVjdDI6IGVycm9yOiAnX1pOSzZzdWRva3U1Q2xlYXJJTlNfOFNlcXVlbmNlRUVjbEVSUzFfJyB3YXMgYXNzaWduZWQgdG8gJ2JvYXJkLnJwbycsIGJ1dCB3YXMgbm90IGRlZmluZWQgZHVyaW5nIHJlY29tcGlsYXRpb24sIG9yIHZpY2UgdmVyc2EKKworVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIGdldHRpbmcgY2FsbGVkIGJlZm9yZQorZmluaXNoX3JlcG8oKSBpcyBjYWxsZWQgYW5kIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzIGlzIHNldCB0byBmYWxzZSAKK3NvIHRoZSBpZGVudGlmaWVycyBhcmUgbm90IHByZXNlcnZlZC4gVGhleSBhcmUgcmVjcmVhdGVkIGJ1dCB0aGUgCitjaG9zZW4gYml0cyBnZXQgd2lwZWQgb3V0IHdoaWNoIGlzIHdoeSB0aGUgcG9pbnRlciBjaGFuZ2VzIGFuZCB0aGUgCitjaG9zZW4gYml0IGlzIG5vdCBzZXQuCisKK1RoZSBmaXggaXMgdG8gY2hhbmdlIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzICphZnRlciogdGhlIGZpbmlzaF9yZXBvIAorY2FsbHMgYXJlIG1hZGUuCisKK1JlcHJvZHVjdGlvbiBpcyB0cmlja3kgc2luY2UgeW91IG5lZWQgdG8gdHJpZ2dlciB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgYXQKK2p1c3QgdGhlIHJpZ2h0IG1vbWVudC4KKworUlAgMjAxMy8xMC85CisKK1tZT0NUTyAjNTEzM10KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnY2MtNC44LjEvZ2NjL3RvcGxldi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL3RvcGxldi5jCTIwMTMtMDMtMjggMDg6Mjk6NTEuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2djYy90b3BsZXYuYwkyMDEzLTEwLTA5IDIwOjI3OjE3LjA4OTIyODAyMyArMDAwMAorQEAgLTU1MSwxMSArNTUxLDExIEBACisgICBpZiAoZmxhZ19zeW50YXhfb25seSB8fCBmbGFnX3dwYSkKKyAgICAgcmV0dXJuOworIAorLSAgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnMgPSBmYWxzZTsKKy0KKyAgIC8qIFRoaXMgbXVzdCBhbHNvIGNhbGwgZmluYWxpemVfY29tcGlsYXRpb25fdW5pdC4gICovCisgICBsYW5nX2hvb2tzLmRlY2xzLmZpbmFsX3dyaXRlX2dsb2JhbHMgKCk7CisgCisrICBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyA9IGZhbHNlOworKworICAgaWYgKHNlZW5fZXJyb3IgKCkpCisgICAgIHJldHVybjsKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOThmOGZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gOWUwZTE5ZWFjMjU2MmY3Mzg1ODYwMmZlMjZlMjA0NGViOGIyMGM0NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRydS1DZXphciBTYXJkYW4gPGFsZXhhbmRydS5zYXJkYW5AZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFdlZCwgNSBGZWIgMjAxNCAxNjo1MjozMSArMDIwMAorU3ViamVjdDogW1BBVENIXSBFbmFibGUgU1BFICYgQWx0aVZlYyBnZW5lcmF0aW9uIG9uIHBvd2VwYypsaW51eCB0YXJnZXQKKworV2hlbiBpcyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eCwgdGhlIHJlc3VsdGluZyBHQ0Mgd2lsbCAKK25vdCBiZSBhYmxlIHRvIGdlbmVyYXRlIGNvZGUgZm9yIFNQRSB0YXJnZXRzIChlNTAwdjEvdjIpLgorR0NDIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4c3BlIHdpbGwgbm90IGJlIGFibGUgdG8KK2dlbmVyYXRlIEFsdGlWZWMgaW5zdHJ1Y3Rpb25zIChmb3IgZTY1MDApLgorVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgY29uZmlndXJlZCBmaWxlIHN1Y2ggdGhhdCBTUEUgb3IgQWx0aVZlYyBjb2RlCitjYW4gYmUgZ2VuZXJhdGVkIHdoZW4gZ2NjIGlzIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4LgorVGhlIEFCSSBhbmQgc3BlY2lmZmljIGluc3RydWN0aW9ucyBjYW4gYmUgc2VsZWN0ZWQgdGhyb3VnaCB0aGUKKyItbWFiaT1zcGUgb3IgLW1hYmk9YWx0aXZlYyIgYW5kIHRoZSAiLW1zcGUgb3IgLW1hbHRpdmVjIiBwYXJhbWV0ZXJzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRydS1DZXphciBTYXJkYW4gPGFsZXhhbmRydS5zYXJkYW5AZnJlZXNjYWxlLmNvbT4KKy0tLQorIGdjYy9jb25maWcuZ2NjIHwgICAgNyArKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy5nY2MgYi9nY2MvY29uZmlnLmdjYworaW5kZXggY2I3YTk0ZS4uZDM5MmMyYiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcuZ2NjCisrKysgYi9nY2MvY29uZmlnLmdjYworQEAgLTIwNjgsNyArMjA2OCwxMiBAQCBwb3dlcnBjLSotcnRlbXMqKQorIAl0bWFrZV9maWxlPSJyczYwMDAvdC1mcHJ1bGVzIHJzNjAwMC90LXJ0ZW1zIHQtcnRlbXMgcnM2MDAwL3QtcHBjY29tbSIKKyAJOzsKKyBwb3dlcnBjKi0qLWxpbnV4KikKKy0JdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIgorKwljYXNlICR7dGFyZ2V0fSBpbgorKwkgICAgcG93ZXJwYyotKi1saW51eCpzcGUqIHwgcG93ZXJwYyotKi1saW51eCphbHRpdmVjKikKKysJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCIgOzsKKysJICAgICopCisrCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmggcnM2MDAwL2xpbnV4YWx0aXZlYy5oIHJzNjAwMC9saW51eHNwZS5oIHJzNjAwMC9lNTAwLmgiIDs7CisrCWVzYWMKKyAJZXh0cmFfb3B0aW9ucz0iJHtleHRyYV9vcHRpb25zfSByczYwMDAvc3lzdjQub3B0IgorIAl0bWFrZV9maWxlPSJyczYwMDAvdC1mcHJ1bGVzIHJzNjAwMC90LXBwY29zICR7dG1ha2VfZmlsZX0gcnM2MDAwL3QtcHBjY29tbSIKKyAJY2FzZSAke3RhcmdldH0gaW4KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUwLVJldmVydC1Vc2UtZGJ4X3JlZ19udW1iZXItZm9yLXNwYW5uaW5nLXJlZ2lzdGVycy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTAtUmV2ZXJ0LVVzZS1kYnhfcmVnX251bWJlci1mb3Itc3Bhbm5pbmctcmVnaXN0ZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYWQ2ZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUwLVJldmVydC1Vc2UtZGJ4X3JlZ19udW1iZXItZm9yLXNwYW5uaW5nLXJlZ2lzdGVycy5wYXRjaApAQCAtMCwwICsxLDgwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRnJvbSBjYjliMWMwNDFiNjM0YTRjMTI4ODk2ZTNkM2VlZDQwODI2MDhjNzk3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMyBNYXkgMjAxNCAxOToyNToxNyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBSZXZlcnQgIjIwMTMtMDUtMjEgIENocmlzdGlhbiBCcnVlbCAKKyA8Y2hyaXN0aWFuLmJydWVsQHN0LmNvbT4iCisKK1RoaXMgcmV2ZXJ0cyBjb21taXQgMzk4MzAzNmE4YjZiMjcxMGM1Nzc3NzE5NGYyMTUwNzgxOWE3MzU1My4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworQ29uZmxpY3RzOgorCWdjYy9DaGFuZ2VMb2cKKy0tLQorIGdjYy9DaGFuZ2VMb2cgICB8IDIxOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQorIGdjYy9kd2FyZjJvdXQuYyB8ICAzMyArKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDIzNCBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9kd2FyZjJvdXQuYyBiL2djYy9kd2FyZjJvdXQuYworaW5kZXggMTI3MjMyNi4uNmFjMmIyOCAxMDA2NDQKKy0tLSBhL2djYy9kd2FyZjJvdXQuYworKysrIGIvZ2NjL2R3YXJmMm91dC5jCitAQCAtMTA4NzAsMjcgKzEwODcwLDI1IEBAIHN0YXRpYyBkd19sb2NfZGVzY3JfcmVmCisgbXVsdGlwbGVfcmVnX2xvY19kZXNjcmlwdG9yIChydHggcnRsLCBydHggcmVncywKKyAJCQkgICAgIGVudW0gdmFyX2luaXRfc3RhdHVzIGluaXRpYWxpemVkKQorIHsKKy0gIGludCBzaXplLCBpOworKyAgaW50IG5yZWdzLCBzaXplLCBpOworKyAgdW5zaWduZWQgcmVnOworICAgZHdfbG9jX2Rlc2NyX3JlZiBsb2NfcmVzdWx0ID0gTlVMTDsKKyAKKy0gIC8qIFNpbXBsZSwgY29udGlndW91cyByZWdpc3RlcnMuICAqLworLSAgaWYgKHJlZ3MgPT0gTlVMTF9SVFgpCistICAgIHsKKy0gICAgICB1bnNpZ25lZCByZWcgPSBSRUdOTyAocnRsKTsKKy0gICAgICBpbnQgbnJlZ3M7CistCisrICByZWcgPSBSRUdOTyAocnRsKTsKKyAjaWZkZWYgTEVBRl9SRUdfUkVNQVAKKy0gICAgICBpZiAoY3J0bC0+dXNlc19vbmx5X2xlYWZfcmVncykKKy0JeworLQkgIGludCBsZWFmX3JlZyA9IExFQUZfUkVHX1JFTUFQIChyZWcpOworLQkgIGlmIChsZWFmX3JlZyAhPSAtMSkKKy0JICAgIHJlZyA9ICh1bnNpZ25lZCkgbGVhZl9yZWc7CistCX0KKysgIGlmIChjcnRsLT51c2VzX29ubHlfbGVhZl9yZWdzKQorKyAgICB7CisrICAgICAgaW50IGxlYWZfcmVnID0gTEVBRl9SRUdfUkVNQVAgKHJlZyk7CisrICAgICAgaWYgKGxlYWZfcmVnICE9IC0xKQorKwlyZWcgPSAodW5zaWduZWQpIGxlYWZfcmVnOworKyAgICB9CisgI2VuZGlmCisrICBnY2NfYXNzZXJ0ICgodW5zaWduZWQpIERCWF9SRUdJU1RFUl9OVU1CRVIgKHJlZykgPT0gZGJ4X3JlZ19udW1iZXIgKHJ0bCkpOworKyAgbnJlZ3MgPSBoYXJkX3JlZ25vX25yZWdzW1JFR05PIChydGwpXVtHRVRfTU9ERSAocnRsKV07CisgCistICAgICAgZ2NjX2Fzc2VydCAoKHVuc2lnbmVkKSBEQlhfUkVHSVNURVJfTlVNQkVSIChyZWcpID09IGRieF9yZWdfbnVtYmVyIChydGwpKTsKKy0gICAgICBucmVncyA9IGhhcmRfcmVnbm9fbnJlZ3NbUkVHTk8gKHJ0bCldW0dFVF9NT0RFIChydGwpXTsKKy0KKysgIC8qIFNpbXBsZSwgY29udGlndW91cyByZWdpc3RlcnMuICAqLworKyAgaWYgKHJlZ3MgPT0gTlVMTF9SVFgpCisrICAgIHsKKyAgICAgICBzaXplID0gR0VUX01PREVfU0laRSAoR0VUX01PREUgKHJ0bCkpIC8gbnJlZ3M7CisgCisgICAgICAgbG9jX3Jlc3VsdCA9IE5VTEw7CitAQCAtMTA5MTgsOSArMTA5MTYsMTAgQEAgbXVsdGlwbGVfcmVnX2xvY19kZXNjcmlwdG9yIChydHggcnRsLCBydHggcmVncywKKyAgICAgeworICAgICAgIGR3X2xvY19kZXNjcl9yZWYgdDsKKyAKKy0gICAgICB0ID0gb25lX3JlZ19sb2NfZGVzY3JpcHRvciAoZGJ4X3JlZ19udW1iZXIgKFhWRUNFWFAgKHJlZ3MsIDAsIGkpKSwKKysgICAgICB0ID0gb25lX3JlZ19sb2NfZGVzY3JpcHRvciAoUkVHTk8gKFhWRUNFWFAgKHJlZ3MsIDAsIGkpKSwKKyAJCQkJICBWQVJfSU5JVF9TVEFUVVNfSU5JVElBTElaRUQpOworICAgICAgIGFkZF9sb2NfZGVzY3IgKCZsb2NfcmVzdWx0LCB0KTsKKysgICAgICBzaXplID0gR0VUX01PREVfU0laRSAoR0VUX01PREUgKFhWRUNFWFAgKHJlZ3MsIDAsIDApKSk7CisgICAgICAgYWRkX2xvY19kZXNjcl9vcF9waWVjZSAoJmxvY19yZXN1bHQsIHNpemUpOworICAgICB9CisgCistLSAKKzEuOS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTEtZWFiaXNwZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTEtZWFiaXNwZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWUzODkwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1MS1lYWJpc3BlLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUYWtlbiBmcm9tIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDE0LTA0L21zZzAyMDY0Lmh0bWwKKworMjAxNC0wNC0zMCAgQ2VzYXIgUGhpbGlwcGlkaXMgIDxjZXNhckBjb2Rlc291cmNlcnkuY29tPgorCisJZ2NjLworCSogZHdhcmYyY2ZpLmMgKGR3Zl9yZWdubyk6IERvbid0IGFzc2VydCByZWcgaXMgYSBwc2V1ZG8KKwlyZWdpc3Rlci4KKwkKKworZGlmZiAtLWdpdCBhL2djYy9kd2FyZjJjZmkuYyBiL2djYy9kd2FyZjJjZmkuYworaW5kZXggNDE4MDg5MC4uNDBlZjBlMiAxMDA2NDQKKy0tLSBhL2djYy9kd2FyZjJjZmkuYworKysrIGIvZ2NjL2R3YXJmMmNmaS5jCitAQCAtOTA2LDcgKzkwNiw2IEBAIG5vdGljZV9laF90aHJvdyAocnR4IGluc24pCisgc3RhdGljIGlubGluZSB1bnNpZ25lZAorIGR3Zl9yZWdubyAoY29uc3RfcnR4IHJlZykKKyB7CistICBnY2NfYXNzZXJ0IChSRUdOTyAocmVnKSA8IEZJUlNUX1BTRVVET19SRUdJU1RFUik7CisgICByZXR1cm4gRFdBUkZfRlJBTUVfUkVHTlVNIChSRUdOTyAocmVnKSk7CisgfQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Mi1BZGQtdGFyZ2V0LWhvb2stdG8tb3ZlcnJpZGUtRFdBUkYyLWZyYW1lLXJlZ2lzdGVyLXNpLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Mi1BZGQtdGFyZ2V0LWhvb2stdG8tb3ZlcnJpZGUtRFdBUkYyLWZyYW1lLXJlZ2lzdGVyLXNpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OTU4YjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUyLUFkZC10YXJnZXQtaG9vay10by1vdmVycmlkZS1EV0FSRjItZnJhbWUtcmVnaXN0ZXItc2kucGF0Y2gKQEAgLTAsMCArMSwxMzggQEAKK0Zyb20gZDYyNjI5N2U4N2UxOTI1MWEyODRlYTFlOTM2MGU4MzFiNDg5OTljYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IG1wZiA8bXBmQDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhND4KK0RhdGU6IFRodSwgNCBTZXAgMjAxNCAwODozMjowNSArMDAwMAorU3ViamVjdDogW1BBVENIXSBBZGQgdGFyZ2V0IGhvb2sgdG8gb3ZlcnJpZGUgRFdBUkYyIGZyYW1lIHJlZ2lzdGVyIHNpemUKKworZ2NjLworCisJKiB0YXJnZXQuZGVmIChUQVJHRVRfRFdBUkZfRlJBTUVfUkVHX01PREUpOiBOZXcgdGFyZ2V0IGhvb2suCisJKiB0YXJnaG9va3MuYyAoZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZSk6IE5ldyBmdW5jdGlvbi4KKwkqIHRhcmdob29rcy5oIChkZWZhdWx0X2R3YXJmX2ZyYW1lX3JlZ19tb2RlKTogTmV3IHByb3RvdHlwZS4KKwkqIGRvYy90bS50ZXhpLmluIChUQVJHRVRfRFdBUkZfRlJBTUVfUkVHX01PREUpOiBEb2N1bWVudC4KKwkqIGRvYy90bS50ZXhpOiBSZWdlbmVyYXRlLgorCSogZHdhcmYyY2ZpLmMgKGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzKTogQWJzdHJhY3QgbW9kZQorCXNlbGVjdGlvbiBsb2dpYyB0byBkZWZhdWx0X2R3YXJmX2ZyYW1lX3JlZ19tb2RlLgorCisKKworZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjE0ODk4IDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZ2NjIDUuMF0KKworLS0tCisgZ2NjL0NoYW5nZUxvZyAgICAgIHwgMTAgKysrKysrKysrKworIGdjYy9kb2MvdG0udGV4aSAgICB8ICA3ICsrKysrKysKKyBnY2MvZG9jL3RtLnRleGkuaW4gfCAgMiArKworIGdjYy9kd2FyZjJjZmkuYyAgICB8ICA0ICstLS0KKyBnY2MvdGFyZ2V0LmRlZiAgICAgfCAxMSArKysrKysrKysrKworIGdjYy90YXJnaG9va3MuYyAgICB8IDEzICsrKysrKysrKysrKysKKyBnY2MvdGFyZ2hvb2tzLmggICAgfCAgMSArCisgNyBmaWxlcyBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2NjLTQuOS4yL2djYy9kb2MvdG0udGV4aQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy9kb2MvdG0udGV4aQorKysrIGdjYy00LjkuMi9nY2MvZG9jL3RtLnRleGkKK0BAIC05MDE3LDYgKzkwMTcsMTMgQEAgcmVnaXN0ZXIgaW4gRHdhcmYuICBPdGhlcndpc2UsIHRoaXMgaG9vaworIElmIG5vdCBkZWZpbmVkLCB0aGUgZGVmYXVsdCBpcyB0byByZXR1cm4gQGNvZGV7TlVMTF9SVFh9LgorIEBlbmQgZGVmdHlwZWZuCisgCisrQGRlZnR5cGVmbiB7VGFyZ2V0IEhvb2t9IHtlbnVtIG1hY2hpbmVfbW9kZX0gVEFSR0VUX0RXQVJGX0ZSQU1FX1JFR19NT0RFIChpbnQgQHZhcntyZWdub30pCisrR2l2ZW4gYSByZWdpc3RlciwgdGhpcyBob29rIHNob3VsZCByZXR1cm4gdGhlIG1vZGUgd2hpY2ggdGhlCisrY29ycmVzcG9uZGluZyBEd2FyZiBmcmFtZSByZWdpc3RlciBzaG91bGQgaGF2ZS4gIFRoaXMgaXMgbm9ybWFsbHkKKyt1c2VkIHRvIHJldHVybiBhIHNtYWxsZXIgbW9kZSB0aGFuIHRoZSByYXcgbW9kZSB0byBwcmV2ZW50IGNhbGwKKytjbG9iYmVyZWQgcGFydHMgb2YgYSByZWdpc3RlciBhbHRlcmluZyB0aGUgZnJhbWUgcmVnaXN0ZXIgc2l6ZQorK0BlbmQgZGVmdHlwZWZuCisrCisgQGRlZnR5cGVmbiB7VGFyZ2V0IEhvb2t9IHZvaWQgVEFSR0VUX0lOSVRfRFdBUkZfUkVHX1NJWkVTX0VYVFJBICh0cmVlIEB2YXJ7YWRkcmVzc30pCisgSWYgc29tZSByZWdpc3RlcnMgYXJlIHJlcHJlc2VudGVkIGluIER3YXJmLTIgdW53aW5kIGluZm9ybWF0aW9uIGluCisgbXVsdGlwbGUgcGllY2VzLCBkZWZpbmUgdGhpcyBob29rIHRvIGZpbGwgaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlCitJbmRleDogZ2NjLTQuOS4yL2djYy9kb2MvdG0udGV4aS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy9kb2MvdG0udGV4aS5pbgorKysrIGdjYy00LjkuMi9nY2MvZG9jL3RtLnRleGkuaW4KK0BAIC02NzQ1LDYgKzY3NDUsOCBAQCB0aGUgdGFyZ2V0IHN1cHBvcnRzIERXQVJGIDIgZnJhbWUgdW53aW5kCisgCisgQGhvb2sgVEFSR0VUX0RXQVJGX1JFR0lTVEVSX1NQQU4KKyAKKytAaG9vayBUQVJHRVRfRFdBUkZfRlJBTUVfUkVHX01PREUKKysKKyBAaG9vayBUQVJHRVRfSU5JVF9EV0FSRl9SRUdfU0laRVNfRVhUUkEKKyAKKyBAaG9vayBUQVJHRVRfQVNNX1RUWVBFCitJbmRleDogZ2NjLTQuOS4yL2djYy9kd2FyZjJjZmkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy9kd2FyZjJjZmkuYworKysrIGdjYy00LjkuMi9nY2MvZHdhcmYyY2ZpLmMKK0BAIC0yNzEsMTEgKzI3MSw5IEBAIGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzICh0cmUKKyAgICAgICBpZiAocm51bSA8IERXQVJGX0ZSQU1FX1JFR0lTVEVSUykKKyAJeworIAkgIEhPU1RfV0lERV9JTlQgb2Zmc2V0ID0gcm51bSAqIEdFVF9NT0RFX1NJWkUgKG1vZGUpOworLQkgIGVudW0gbWFjaGluZV9tb2RlIHNhdmVfbW9kZSA9IHJlZ19yYXdfbW9kZVtpXTsKKyAJICBIT1NUX1dJREVfSU5UIHNpemU7CisrCSAgZW51bSBtYWNoaW5lX21vZGUgc2F2ZV9tb2RlID0gdGFyZ2V0bS5kd2FyZl9mcmFtZV9yZWdfbW9kZSAoaSk7CisgCistCSAgaWYgKEhBUkRfUkVHTk9fQ0FMTF9QQVJUX0NMT0JCRVJFRCAoaSwgc2F2ZV9tb2RlKSkKKy0JICAgIHNhdmVfbW9kZSA9IGNob29zZV9oYXJkX3JlZ19tb2RlIChpLCAxLCB0cnVlKTsKKyAJICBpZiAoZG51bSA9PSBEV0FSRl9GUkFNRV9SRVRVUk5fQ09MVU1OKQorIAkgICAgeworIAkgICAgICBpZiAoc2F2ZV9tb2RlID09IFZPSURtb2RlKQorSW5kZXg6IGdjYy00LjkuMi9nY2MvdGFyZ2V0LmRlZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy90YXJnZXQuZGVmCisrKysgZ2NjLTQuOS4yL2djYy90YXJnZXQuZGVmCitAQCAtMzIxOCw2ICszMjE4LDE3IEBAIElmIG5vdCBkZWZpbmVkLCB0aGUgZGVmYXVsdCBpcyB0byByZXR1cm4KKyAgcnR4LCAocnR4IHJlZyksCisgIGhvb2tfcnR4X3J0eF9udWxsKQorIAorKy8qIEdpdmVuIGEgcmVnaXN0ZXIgcmV0dXJuIHRoZSBtb2RlIG9mIHRoZSBjb3JyZXNwb25kaW5nIERXQVJGIGZyYW1lCisrICAgcmVnaXN0ZXIuICAqLworK0RFRkhPT0sKKysoZHdhcmZfZnJhbWVfcmVnX21vZGUsCisrICJHaXZlbiBhIHJlZ2lzdGVyLCB0aGlzIGhvb2sgc2hvdWxkIHJldHVybiB0aGUgbW9kZSB3aGljaCB0aGVcblwKKytjb3JyZXNwb25kaW5nIER3YXJmIGZyYW1lIHJlZ2lzdGVyIHNob3VsZCBoYXZlLiAgVGhpcyBpcyBub3JtYWxseVxuXAorK3VzZWQgdG8gcmV0dXJuIGEgc21hbGxlciBtb2RlIHRoYW4gdGhlIHJhdyBtb2RlIHRvIHByZXZlbnQgY2FsbFxuXAorK2Nsb2JiZXJlZCBwYXJ0cyBvZiBhIHJlZ2lzdGVyIGFsdGVyaW5nIHRoZSBmcmFtZSByZWdpc3RlciBzaXplIiwKKysgZW51bSBtYWNoaW5lX21vZGUsIChpbnQgcmVnbm8pLAorKyBkZWZhdWx0X2R3YXJmX2ZyYW1lX3JlZ19tb2RlKQorKworIC8qIElmIGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzIG5lZWRzIHRvIGZpbGwgaW4gdGFibGUKKyAgICBlbnRyaWVzIG5vdCBjb3JyZXNwb25kaW5nIGRpcmVjdGx5IHRvIHJlZ2lzdGVycyBiZWxvdworICAgIEZJUlNUX1BTRVVET19SRUdJU1RFUiwgdGhpcyBob29rIHNob3VsZCBnZW5lcmF0ZSB0aGUgbmVjZXNzYXJ5CitJbmRleDogZ2NjLTQuOS4yL2djYy90YXJnaG9va3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy90YXJnaG9va3MuYworKysrIGdjYy00LjkuMi9nY2MvdGFyZ2hvb2tzLmMKK0BAIC0xNDM4LDYgKzE0MzgsMTkgQEAgZGVmYXVsdF9kZWJ1Z191bndpbmRfaW5mbyAodm9pZCkKKyAgIHJldHVybiBVSV9OT05FOworIH0KKyAKKysvKiBEZXRlcm1pbmUgdGhlIGNvcnJlY3QgbW9kZSBmb3IgYSBEd2FyZiBmcmFtZSByZWdpc3RlciB0aGF0IHJlcHJlc2VudHMKKysgICByZWdpc3RlciBSRUdOTy4gICovCisrCisrZW51bSBtYWNoaW5lX21vZGUKKytkZWZhdWx0X2R3YXJmX2ZyYW1lX3JlZ19tb2RlIChpbnQgcmVnbm8pCisreworKyAgZW51bSBtYWNoaW5lX21vZGUgc2F2ZV9tb2RlID0gcmVnX3Jhd19tb2RlW3JlZ25vXTsKKysKKysgIGlmIChIQVJEX1JFR05PX0NBTExfUEFSVF9DTE9CQkVSRUQgKHJlZ25vLCBzYXZlX21vZGUpKQorKyAgICBzYXZlX21vZGUgPSBjaG9vc2VfaGFyZF9yZWdfbW9kZSAocmVnbm8sIDEsIHRydWUpOworKyAgcmV0dXJuIHNhdmVfbW9kZTsKKyt9CisrCisgLyogVG8gYmUgdXNlZCBieSB0YXJnZXRzIHdoZXJlIHJlZ19yYXdfbW9kZSBkb2Vzbid0IHJldHVybiB0aGUgcmlnaHQKKyAgICBtb2RlIGZvciByZWdpc3RlcnMgdXNlZCBpbiBhcHBseV9idWlsdGluX3JldHVybiBhbmQgYXBwbHlfYnVpbHRpbl9hcmcuICAqLworIAorSW5kZXg6IGdjYy00LjkuMi9nY2MvdGFyZ2hvb2tzLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvdGFyZ2hvb2tzLmgKKysrKyBnY2MtNC45LjIvZ2NjL3Rhcmdob29rcy5oCitAQCAtMTk0LDYgKzE5NCw3IEBAIGV4dGVybiBpbnQgZGVmYXVsdF9sYWJlbF9hbGlnbl9tYXhfc2tpcAorIGV4dGVybiBpbnQgZGVmYXVsdF9qdW1wX2FsaWduX21heF9za2lwIChydHgpOworIGV4dGVybiBzZWN0aW9uICogZGVmYXVsdF9mdW5jdGlvbl9zZWN0aW9uKHRyZWUgZGVjbCwgZW51bSBub2RlX2ZyZXF1ZW5jeSBmcmVxLAorIAkJCQkJICBib29sIHN0YXJ0dXAsIGJvb2wgZXhpdCk7CisrZXh0ZXJuIGVudW0gbWFjaGluZV9tb2RlIGRlZmF1bHRfZHdhcmZfZnJhbWVfcmVnX21vZGUgKGludCk7CisgZXh0ZXJuIGVudW0gbWFjaGluZV9tb2RlIGRlZmF1bHRfZ2V0X3JlZ19yYXdfbW9kZSAoaW50KTsKKyAKKyBleHRlcm4gdm9pZCAqZGVmYXVsdF9nZXRfcGNoX3ZhbGlkaXR5IChzaXplX3QgKik7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUzLWdjYy1maXgtc2VnZmF1bHQtZnJvbS1jYWxsaW5nLWZyZWUtb24tbm9uLW1hbGxvYy1kLWEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUzLWdjYy1maXgtc2VnZmF1bHQtZnJvbS1jYWxsaW5nLWZyZWUtb24tbm9uLW1hbGxvYy1kLWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiNDQ1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTMtZ2NjLWZpeC1zZWdmYXVsdC1mcm9tLWNhbGxpbmctZnJlZS1vbi1ub24tbWFsbG9jLWQtYS5wYXRjaApAQCAtMCwwICsxLDY2IEBACitGcm9tIGEyMmEyMjJjOGY5Mjk5ZjZjMDdhMDI3NDM4OGFkZTdkNGFiOGMyOGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMjAgSnVuIDIwMTQgMTY6NDE6MDggLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gZ2NjOiBmaXggc2VnZmF1bHQgZnJvbSBjYWxsaW5nIGZyZWUgb24gbm9uLW1hbGxvYydkIGFyZWEKKworV2Ugc2VlIHRoZSBmb2xsb3dpbmcgb24gYSAzMmJpdCBnY2MgaW5zdGFsbGVkIG9uIDY0IGJpdCBob3N0OgorCisgIFJlYWRpbmcgc3ltYm9scyBmcm9tIC4vaTU4Ni1wb2t5bWxsaWIzMi1saW51eC1nY2MuLi5kb25lLgorICAoZ2RiKSBydW4KKyAgU3RhcnRpbmcgcHJvZ3JhbTogeDg2LXBva3ltbGxpYjMyLWxpbnV4L2xpYjMyLWdjYy80LjkuMC1yMC9pbWFnZS91c3IvYmluL2k1ODYtcG9reW1sbGliMzItbGludXgtZ2NjCisKKyAgUHJvZ3JhbSByZWNlaXZlZCBzaWduYWwgU0lHU0VHViwgU2VnbWVudGF0aW9uIGZhdWx0LgorICAweGY3ZTk1N2UwIGluIGZyZWUgKCkgZnJvbSAvbGliL2kzODYtbGludXgtZ251L2xpYmMuc28uNgorICAoZ2RiKSBidAorICAjMCAgMHhmN2U5NTdlMCBpbiBmcmVlICgpIGZyb20gL2xpYi9pMzg2LWxpbnV4LWdudS9saWJjLnNvLjYKKyAgIzEgIDB4MDgwNGI3M2MgaW4gc2V0X211bHRpbGliX2RpciAoKSBhdCBnY2MtNC45LjAvZ2NjL2djYy5jOjc4MjcKKyAgIzIgIG1haW4gKGFyZ2M9MSwgYXJndj0weGZmZmZkNTA0KSBhdCBnY2MtNC45LjAvZ2NjL2djYy5jOjY2ODgKKyAgKGdkYikKKworVGhlIHByb2JsZW0gYXJpc2VzIGJlY2F1c2Ugd2UgY29uZGl0aW9uYWxseSBhc3NpZ24gdGhlIHBvaW50ZXIgd2UKK2V2ZW50dWFsbHkgZnJlZSwgYW5kIHRoZSBjb25kaXRpb25hbCBtYXkgYXNzaWduIHRoZSBwb2ludGVyIHRvIHRoZQorbm9uLW1hbGxvYydkIGludGVybmFsIHN0cmluZyAiLiIgd2hpY2ggZmFpbHMgd2hlbiB3ZSBmcmVlIGl0IGhlcmU6CisKKyAgIGlmIChtdWx0aWxpYl9kaXIgPT0gTlVMTCAmJiBtdWx0aWxpYl9vc19kaXIgIT0gTlVMTAorICAgICAgICYmIHN0cmNtcCAobXVsdGlsaWJfb3NfZGlyLCAiLiIpID09IDApCisgICAgIHsKKyAgICAgICBmcmVlIChDT05TVF9DQVNUIChjaGFyICosIG11bHRpbGliX29zX2RpcikpOworICAgICAgIC4uLgorCitBcyBzdWdnZXN0ZWQgYnkgSmFrdWIsIGVuc3VyZSB0aGUgIi4iIGNhc2UgaXMgYWxzbyBtYWxsb2MnZCB2aWEKK3hzdHJkdXAoKSBhbmQgaGVuY2UgdGhlIHBvaW50ZXIgZm9yIHRoZSAiLiIgY2FzZSBjYW4gYmUgZnJlZWQuCisKK0NjOiBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPgorQ2M6IEplZmYgTGF3IDxsYXdAcmVkaGF0LmNvbT4KK0NjOiBNYXR0aGlhcyBLbG9zZSA8ZG9rb0B1YnVudHUuY29tPgorQ0M6IFRvYmlhcyBCdXJudXMgPGJ1cm51c0BuZXQtYi5kZT4KK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQgWyBodHRwczovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMTQtMDYvbXNnMDIwNjkuaHRtbCBdCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggOWFjMThlNjBkODAxLi4xNjhhY2Y3ZWIwYzkgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTc3OTAsMTAgKzc3OTAsMTUgQEAgc2V0X211bHRpbGliX2RpciAodm9pZCkKKyAJCXEyKys7CisgCSAgICAgIGlmICgqcTIgPT0gJzonKQorIAkJbWxfZW5kID0gcTI7CistCSAgICAgIG5ld19tdWx0aWxpYl9vc19kaXIgPSBYTkVXVkVDIChjaGFyLCBtbF9lbmQgLSBxKTsKKy0JICAgICAgbWVtY3B5IChuZXdfbXVsdGlsaWJfb3NfZGlyLCBxICsgMSwgbWxfZW5kIC0gcSAtIDEpOworLQkgICAgICBuZXdfbXVsdGlsaWJfb3NfZGlyW21sX2VuZCAtIHEgLSAxXSA9ICdcMCc7CistCSAgICAgIG11bHRpbGliX29zX2RpciA9ICpuZXdfbXVsdGlsaWJfb3NfZGlyID8gbmV3X211bHRpbGliX29zX2RpciA6ICIuIjsKKysJICAgICAgaWYgKG1sX2VuZCAtIHEgPT0gMSkKKysJCW11bHRpbGliX29zX2RpciA9IHhzdHJkdXAgKCIuIik7CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgbmV3X211bHRpbGliX29zX2RpciA9IFhORVdWRUMgKGNoYXIsIG1sX2VuZCAtIHEpOworKwkJICBtZW1jcHkgKG5ld19tdWx0aWxpYl9vc19kaXIsIHEgKyAxLCBtbF9lbmQgLSBxIC0gMSk7CisrCQkgIG5ld19tdWx0aWxpYl9vc19kaXJbbWxfZW5kIC0gcSAtIDFdID0gJ1wwJzsKKysJCSAgbXVsdGlsaWJfb3NfZGlyID0gbmV3X211bHRpbGliX29zX2RpcjsKKysJCX0KKyAKKyAJICAgICAgaWYgKHEyIDwgZW5kICYmICpxMiA9PSAnOicpCisgCQl7CistLSAKKzEuOS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTQtZ2NjLU1ha2VmaWxlLmluLWZpeC1wYXJhbGxlbC1idWlsZGluZy1mYWlsdXJlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NC1nY2MtTWFrZWZpbGUuaW4tZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWZhaWx1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U4ZWZhMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTQtZ2NjLU1ha2VmaWxlLmluLWZpeC1wYXJhbGxlbC1idWlsZGluZy1mYWlsdXJlLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK2djYy9NYWtlZmlsZS5pbjogZml4IHBhcmFsbGVsIGJ1aWxkaW5nIGZhaWx1cmUKKworVGhlIGdjYy1hci5vLCBnY2Mtbm0ubywgZ2NjLXJhbmxpYi5vIGFuZCBlcnJvcnMubyBpbmNsdWRlZAorY29uZmlnLmggd2hpY2ggd2FzIGEgZ2VuZXJhdGVkIGZpbGUuIEJ1dCBubyBleHBsaWNpdHkgcnVsZQordG8gY2xhcmlmeSB0aGUgZGVwZW5kZW5jeS4gVGhlcmUgd2FzIHBvdGVudGlhbCBidWlsZGluZworZmFpbHVyZSB3aGlsZSBwYXJhbGxlbCBtYWtlLgorCitGb3IgZ2NjLWFyLm8sIGdjYy1ubS5vIGFuZCBnY2MtcmFubGliLm8sIHRoZXkgd2VyZSBjb21waWxlZCBmcm9tIG9uZSBDCitzb3VyY2UgZmlsZSBnY2MtYXIuYywgd2UgYWRkIHRoZW0gdG8gQUxMX0hPU1RfQkFDS0VORF9PQkpTLCBzbyB0aGUKKyckKEFMTF9IT1NUX09CSlMpIDogfCAkKGdlbmVyYXRlZF9maWxlcyknIHJ1bGUgY291bGQgd29yayBmb3IgdGhlc2UKK29iamVjdHMuCisKK0ZvciBlcnJvcnMubywgaXQgaXMgcGFydCBvZiBnZW5ndHlwZSwgYW5kIHRoZSBnZW5ndHlwZSBnZW5lcmF0b3IgcHJvZ3JhbQoraXMgc3BlY2lhbDogVHdvIHZlcnNpb25zIGFyZSBidWlsdC4gT25lIGlzIGZvciB0aGUgYnVpbGQgbWFjaGluZSwgYW5kIG9uZQoraXMgZm9yIHRoZSBob3N0LiBXZSByZWZlcmVkIHdoYXQgZ2VuZ3R5cGUtcGFyc2UubyBkaWQgKHdoaWNoIGFsc28gaXMgcGFydAorb2YgZ2VuZ3R5cGUpLgorCitbR0NDICM2MTg5OV0KK2h0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTYxODk5CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtnY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZ10KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgZ2NjL01ha2VmaWxlLmluIHwgNyArKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCA2NDc1Y2JhLi41NmU1MGJiIDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC0xNDgxLDEzICsxNDgxLDE2IEBAIE9CSlMtbGliY29tbW9uLXRhcmdldCA9ICQoY29tbW9uX291dF9vYmplY3RfZmlsZSkgcHJlZml4Lm8gcGFyYW1zLm8gXAorIAlvcHRzLm8gb3B0cy1jb21tb24ubyBvcHRpb25zLm8gdmVjLm8gaG9va3MubyBjb21tb24vY29tbW9uLXRhcmdob29rcy5vIFwKKyAJaGFzaC10YWJsZS5vIGZpbGUtZmluZC5vCisgCisrIyBPYmplY3RzIGNvbXBpbGVkIGZyb20gb25lIEMgc291cmNlIGZpbGUgZ2NjLWFyLmMKKytPQkpTLWdjYy1hciA9IGdjYy1hci5vIGdjYy1ubS5vIGdjYy1yYW5saWIubworKworICMgVGhpcyBsaXN0cyBhbGwgaG9zdCBvYmplY3RzIGZvciB0aGUgZnJvbnQgZW5kcy4KKyBBTExfSE9TVF9GUk9OVEVORF9PQkpTID0gJChmb3JlYWNoIHYsJChDT05GSUdfTEFOR1VBR0VTKSwkKCQodilfT0JKUykpCisgCisgQUxMX0hPU1RfQkFDS0VORF9PQkpTID0gJChHQ0NfT0JKUykgJChPQkpTKSAkKE9CSlMtbGliY29tbW9uKSBcCisgICAkKE9CSlMtbGliY29tbW9uLXRhcmdldCkgQFRSRUVCUk9XU0VSQCBtYWluLm8gYy1mYW1pbHkvY3Bwc3BlYy5vIFwKKyAgICQoQ09MTEVDVDJfT0JKUykgJChFWFRSQV9HQ0NfT0JKUykgJChHQ09WX09CSlMpICQoR0NPVl9EVU1QX09CSlMpIFwKKy0gIGx0by13cmFwcGVyLm8KKysgIGx0by13cmFwcGVyLm8gJChPQkpTLWdjYy1hcikKKyAKKyAjIFRoaXMgbGlzdHMgYWxsIGhvc3Qgb2JqZWN0IGZpbGVzLCB3aGV0aGVyIHRoZXkgYXJlIGluY2x1ZGVkIGluIHRoaXMKKyAjIGNvbXBpbGF0aW9uIG9yIG5vdC4KK0BAIC0yNDM3LDYgKzI0NDAsOCBAQCBnZW5ndHlwZS1wYXJzZS5vOiAkKENPTkZJR19IKQorIENGTEFHUy1idWlsZC9nZW5ndHlwZS1wYXJzZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKyBidWlsZC9nZW5ndHlwZS1wYXJzZS5vOiAkKEJDT05GSUdfSCkKKyAKKytlcnJvcnMubyA6ICQoQ09ORklHX0gpCisrCisgZ2VuZ3R5cGUtc3RhdGUubyBidWlsZC9nZW5ndHlwZS1zdGF0ZS5vOiBnZW5ndHlwZS1zdGF0ZS5jICQoU1lTVEVNX0gpIFwKKyAgIGdlbmd0eXBlLmggZXJyb3JzLmggZG91YmxlLWludC5oIHZlcnNpb24uaCAkKEhBU0hUQUJfSCkgJChPQlNUQUNLX0gpIFwKKyAgICQoWFJFR0VYX0gpCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NS1kd2FyZi1yZWctcHJvY2Vzc2luZy1oZWxwZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU1LWR3YXJmLXJlZy1wcm9jZXNzaW5nLWhlbHBlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTdkYWIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NS1kd2FyZi1yZWctcHJvY2Vzc2luZy1oZWxwZXIucGF0Y2gKQEAgLTAsMCArMSwxNDggQEAKK0Zyb20gNGZkMzlmMTMyOTM3OWUwMGY5NTgzOTRhZGRlNmJlOTZmMGNhZjIxZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IGhhaW5xdWUgPGhhaW5xdWVAMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0PgorRGF0ZTogRnJpLCA1IERlYyAyMDE0IDE2OjUzOjIyICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIDIwMTQtMTItMDUgIE9saXZpZXIgSGFpbnF1ZSAgPGhhaW5xdWVAYWRhY29yZS5jb20+CisKKyAgICAgICAgKiBkd2FyZjJjZmkuYyAoaW5pdF9vbmVfZHdhcmZfcmVnX3NpemUpOiBOZXcgaGVscGVyLCBwcm9jZXNzaW5nCisgICAgICAgIG9uZSBwYXJ0aWN1bGFyIHJlZyBmb3IgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMuCisgICAgICAgIChleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyk6IFJld29yayB0byB1c2UgaGVscGVyIGFuZAorICAgICAgICBhY2NvdW50IGZvciBkd2FyZiByZWdpc3RlciBzcGFucy4KKworCisKK2dpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxODQyOCAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2djYyA1LjBdCisKKy0tLQorIGdjYy9DaGFuZ2VMb2cgICB8ICA3ICsrKysrCisgZ2NjL2R3YXJmMmNmaS5jIHwgOTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA4NSBpbnNlcnRpb25zKCspLCAyMCBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjkuMi9nY2MvZHdhcmYyY2ZpLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvZHdhcmYyY2ZpLmMKKysrKyBnY2MtNC45LjIvZ2NjL2R3YXJmMmNmaS5jCitAQCAtMjUyLDcgKzI1Miw1OSBAQCBpbml0X3JldHVybl9jb2x1bW5fc2l6ZSAoZW51bSBtYWNoaW5lX21vCisgCQkgIGdlbl9pbnRfbW9kZSAoc2l6ZSwgbW9kZSkpOworIH0KKyAKKy0vKiBHZW5lcmF0ZSBjb2RlIHRvIGluaXRpYWxpemUgdGhlIHJlZ2lzdGVyIHNpemUgdGFibGUuICAqLworKy8qIERhdGFzdHJ1Y3R1cmUgdXNlZCBieSBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyBhbmQKKysgICBpbml0X29uZV9kd2FyZl9yZWdfc2l6ZSB0byBjb21tdW5pY2F0ZSBvbiB3aGF0IGhhcyBiZWVuIGRvbmUgYnkgdGhlCisrICAgbGF0dGVyLiAgKi8KKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIC8qIFdoZXRoZXIgdGhlIGR3YXJmIHJldHVybiBjb2x1bW4gd2FzIGluaXRpYWxpemVkLiAgKi8KKysgIGJvb2wgd3JvdGVfcmV0dXJuX2NvbHVtbjsKKysKKysgIC8qIEZvciBlYWNoIGhhcmQgcmVnaXN0ZXIgUkVHTk8sIHdoZXRoZXIgaW5pdF9vbmVfZHdhcmZfcmVnX3NpemUKKysgICAgIHdhcyBnaXZlbiBSRUdOTyB0byBwcm9jZXNzIGFscmVhZHkuICAqLworKyAgYm9vbCBwcm9jZXNzZWRfcmVnbm8gW0ZJUlNUX1BTRVVET19SRUdJU1RFUl07CisrCisrfSBpbml0X29uZV9kd2FyZl9yZWdfc3RhdGU7CisrCisrLyogSGVscGVyIGZvciBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcy4gIEdlbmVyYXRlIGNvZGUgdG8KKysgICBpbml0aWFsaXplIHRoZSBkd2FyZiByZWdpc3RlciBzaXplIHRhYmxlIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gcmVnaXN0ZXIKKysgICBSRUdOTyBpbiBSRUdNT0RFLiAgVEFCTEUgaXMgdGhlIHRhYmxlIGJhc2UgYWRkcmVzcywgU0xPVE1PREUgaXMgdGhlIG1vZGUgdG8KKysgICB1c2UgZm9yIHRoZSBzaXplIGVudHJ5IHRvIGluaXRpYWxpemUsIGFuZCBJTklUX1NUQVRFIGlzIHRoZSBjb21tdW5pY2F0aW9uCisrICAgZGF0YXN0cnVjdHVyZSBjb252ZXlpbmcgd2hhdCB3ZSdyZSBkb2luZyB0byBvdXIgY2FsbGVyLiAgKi8KKysKKytzdGF0aWMKKyt2b2lkIGluaXRfb25lX2R3YXJmX3JlZ19zaXplIChpbnQgcmVnbm8sIG1hY2hpbmVfbW9kZSByZWdtb2RlLAorKwkJCSAgICAgIHJ0eCB0YWJsZSwgbWFjaGluZV9tb2RlIHNsb3Rtb2RlLAorKwkJCSAgICAgIGluaXRfb25lX2R3YXJmX3JlZ19zdGF0ZSAqaW5pdF9zdGF0ZSkKKyt7CisrICBjb25zdCB1bnNpZ25lZCBpbnQgZG51bSA9IERXQVJGX0ZSQU1FX1JFR05VTSAocmVnbm8pOworKyAgY29uc3QgdW5zaWduZWQgaW50IHJudW0gPSBEV0FSRjJfRlJBTUVfUkVHX09VVCAoZG51bSwgMSk7CisrCisrICBjb25zdCBIT1NUX1dJREVfSU5UIHNsb3RvZmZzZXQgPSBybnVtICogR0VUX01PREVfU0laRSAoc2xvdG1vZGUpOworKyAgY29uc3QgSE9TVF9XSURFX0lOVCByZWdzaXplID0gR0VUX01PREVfU0laRSAocmVnbW9kZSk7CisrCisrICBpbml0X3N0YXRlLT5wcm9jZXNzZWRfcmVnbm9bcmVnbm9dID0gdHJ1ZTsKKysKKysgIGlmIChybnVtID49IERXQVJGX0ZSQU1FX1JFR0lTVEVSUykKKysgICAgcmV0dXJuOworKworKyAgaWYgKGRudW0gPT0gRFdBUkZfRlJBTUVfUkVUVVJOX0NPTFVNTikKKysgICAgeworKyAgICAgIGlmIChyZWdtb2RlID09IFZPSURtb2RlKQorKwlyZXR1cm47CisrICAgICAgaW5pdF9zdGF0ZS0+d3JvdGVfcmV0dXJuX2NvbHVtbiA9IHRydWU7CisrICAgIH0KKysKKysgIGlmIChzbG90b2Zmc2V0IDwgMCkKKysgICAgcmV0dXJuOworKworKyAgZW1pdF9tb3ZlX2luc24gKGFkanVzdF9hZGRyZXNzICh0YWJsZSwgc2xvdG1vZGUsIHNsb3RvZmZzZXQpLAorKwkJICBnZW5faW50X21vZGUgKHJlZ3NpemUsIHNsb3Rtb2RlKSk7CisrfQorKworKy8qIEdlbmVyYXRlIGNvZGUgdG8gaW5pdGlhbGl6ZSB0aGUgZHdhcmYgcmVnaXN0ZXIgc2l6ZSB0YWJsZSBsb2NhdGVkCisrICAgYXQgdGhlIHByb3ZpZGVkIEFERFJFU1MuICAqLworIAorIHZvaWQKKyBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyAodHJlZSBhZGRyZXNzKQorQEAgLTI2MSwzNSArMzEzLDQwIEBAIGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzICh0cmUKKyAgIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgPSBUWVBFX01PREUgKGNoYXJfdHlwZV9ub2RlKTsKKyAgIHJ0eCBhZGRyID0gZXhwYW5kX25vcm1hbCAoYWRkcmVzcyk7CisgICBydHggbWVtID0gZ2VuX3J0eF9NRU0gKEJMS21vZGUsIGFkZHIpOworLSAgYm9vbCB3cm90ZV9yZXR1cm5fY29sdW1uID0gZmFsc2U7CisrCisrICBpbml0X29uZV9kd2FyZl9yZWdfc3RhdGUgaW5pdF9zdGF0ZTsKKysKKysgIG1lbXNldCAoKGNoYXIgKikmaW5pdF9zdGF0ZSwgMCwgc2l6ZW9mIChpbml0X3N0YXRlKSk7CisgCisgICBmb3IgKGkgPSAwOyBpIDwgRklSU1RfUFNFVURPX1JFR0lTVEVSOyBpKyspCisgICAgIHsKKy0gICAgICB1bnNpZ25lZCBpbnQgZG51bSA9IERXQVJGX0ZSQU1FX1JFR05VTSAoaSk7CistICAgICAgdW5zaWduZWQgaW50IHJudW0gPSBEV0FSRjJfRlJBTUVfUkVHX09VVCAoZG51bSwgMSk7CistCistICAgICAgaWYgKHJudW0gPCBEV0FSRl9GUkFNRV9SRUdJU1RFUlMpCistCXsKKy0JICBIT1NUX1dJREVfSU5UIG9mZnNldCA9IHJudW0gKiBHRVRfTU9ERV9TSVpFIChtb2RlKTsKKy0JICBIT1NUX1dJREVfSU5UIHNpemU7CistCSAgZW51bSBtYWNoaW5lX21vZGUgc2F2ZV9tb2RlID0gdGFyZ2V0bS5kd2FyZl9mcmFtZV9yZWdfbW9kZSAoaSk7CisrICAgICAgbWFjaGluZV9tb2RlIHNhdmVfbW9kZTsKKysgICAgICBydHggc3BhbjsKKyAKKy0JICBpZiAoZG51bSA9PSBEV0FSRl9GUkFNRV9SRVRVUk5fQ09MVU1OKQorKyAgICAgIC8qIE5vIHBvaW50IGluIHByb2Nlc3NpbmcgYSByZWdpc3RlciBtdWx0aXBsZSB0aW1lcy4gIFRoaXMgY291bGQgaGFwcGVuCisrICAgICAgICB3aXRoIHJlZ2lzdGVyIHNwYW5zLCBlLmcuIHdoZW4gYSByZWcgaXMgZmlyc3QgcHJvY2Vzc2VkIGFzIGEgcGllY2Ugb2YKKysgICAgICAgIGEgc3BhbiwgdGhlbiBhcyBhIHJlZ2lzdGVyIG9uIGl0cyBvd24gbGF0ZXIgb24uICAqLworKworKyAgICAgIGlmIChpbml0X3N0YXRlLnByb2Nlc3NlZF9yZWdub1tpXSkKKysgICAgICAgY29udGludWU7CisrCisrICAgICAgc2F2ZV9tb2RlID0gdGFyZ2V0bS5kd2FyZl9mcmFtZV9yZWdfbW9kZSAoaSk7CisrICAgICAgc3BhbiA9IHRhcmdldG0uZHdhcmZfcmVnaXN0ZXJfc3BhbiAoZ2VuX3J0eF9SRUcgKHNhdmVfbW9kZSwgaSkpOworKyAgICAgIGlmICghc3BhbikKKysgICAgICAgaW5pdF9vbmVfZHdhcmZfcmVnX3NpemUgKGksIHNhdmVfbW9kZSwgbWVtLCBtb2RlLCAmaW5pdF9zdGF0ZSk7CisrICAgICAgZWxzZQorKyAgICAgICB7CisrICAgICAgICAgZm9yIChpbnQgc2kgPSAwOyBzaSA8IFhWRUNMRU4gKHNwYW4sIDApOyBzaSsrKQorIAkgICAgeworLQkgICAgICBpZiAoc2F2ZV9tb2RlID09IFZPSURtb2RlKQorLQkJY29udGludWU7CistCSAgICAgIHdyb3RlX3JldHVybl9jb2x1bW4gPSB0cnVlOworLQkgICAgfQorLQkgIHNpemUgPSBHRVRfTU9ERV9TSVpFIChzYXZlX21vZGUpOworLQkgIGlmIChvZmZzZXQgPCAwKQorLQkgICAgY29udGludWU7CisrICAgICAgICAgICAgIHJ0eCByZWcgPSBYVkVDRVhQIChzcGFuLCAwLCBzaSk7CisrICAgICAgICAgICAgIGluaXRfb25lX2R3YXJmX3JlZ19zaXplCisrICAgICAgICAgICAgICAgKFJFR05PIChyZWcpLCBHRVRfTU9ERSAocmVnKSwgbWVtLCBtb2RlLCAmaW5pdF9zdGF0ZSk7CisrICAgICAgICAgICB9CisgCistCSAgZW1pdF9tb3ZlX2luc24gKGFkanVzdF9hZGRyZXNzIChtZW0sIG1vZGUsIG9mZnNldCksCistCQkJICBnZW5faW50X21vZGUgKHNpemUsIG1vZGUpKTsKKyAJfQorICAgICB9CisgCistICBpZiAoIXdyb3RlX3JldHVybl9jb2x1bW4pCisrICBpZiAoIWluaXRfc3RhdGUud3JvdGVfcmV0dXJuX2NvbHVtbikKKyAgICAgaW5pdF9yZXR1cm5fY29sdW1uX3NpemUgKG1vZGUsIG1lbSwgRFdBUkZfRlJBTUVfUkVUVVJOX0NPTFVNTik7CisgCisgI2lmZGVmIERXQVJGX0FMVF9GUkFNRV9SRVRVUk5fQ09MVU1OCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU2LWRlZmluZS1kZWZhdWx0LWNmYS1yZWdpc3Rlci1tYXBwaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ni1kZWZpbmUtZGVmYXVsdC1jZmEtcmVnaXN0ZXItbWFwcGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjZjOTRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ni1kZWZpbmUtZGVmYXVsdC1jZmEtcmVnaXN0ZXItbWFwcGluZy5wYXRjaApAQCAtMCwwICsxLDc1IEBACitGcm9tIGMwMjM1YTMzZGU4YzRmNzhjY2UzNWIyYThjMjAzNWM4M2ZlMWJkMTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBoYWlucXVlIDxoYWlucXVlQDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhND4KK0RhdGU6IEZyaSwgNSBEZWMgMjAxNCAxNzowMTo0MiArMDAwMAorU3ViamVjdDogW1BBVENIXSAyMDE0LTEyLTA1ICBPbGl2aWVyIEhhaW5xdWUgIDxoYWlucXVlQGFkYWNvcmUuY29tPgorCisgICAgICAgIGdjYy8KKyAgICAgICAgKiBkZWZhdWx0cy5oOiAoRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4pOiBEZWZpbmUgZGVmYXVsdC4KKyAgICAgICAgKiBkd2FyZjJjZmkuYyAoaW5pdF9vbmVfZHdhcmZfcmVnX3NpemUpOiBIb25vcgorICAgICAgICBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTi4KKworICAgICAgICBsaWJnY2MvCisgICAgICAgICogdW53aW5kLWR3Mi5jIChEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTik6IFJlbW92ZSBkZWZhdWx0IGRlZiwKKyAgICAgICAgbm93IHByb3ZpZGVkIGJ5IGRlZmF1bHRzLmguCisKKworCitnaXQtc3ZuLWlkOiBzdm4rc3NoOi8vZ2NjLmdudS5vcmcvc3ZuL2djYy90cnVua0AyMTg0MjkgMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtnY2MgNS4wXQorCistLS0KKyBnY2MvQ2hhbmdlTG9nICAgICAgIHwgNiArKysrKysKKyBnY2MvZGVmYXVsdHMuaCAgICAgIHwgNSArKysrKworIGdjYy9kd2FyZjJjZmkuYyAgICAgfCAzICsrLQorIGxpYmdjYy9DaGFuZ2VMb2cgICAgfCA1ICsrKysrCisgbGliZ2NjL3Vud2luZC1kdzIuYyB8IDQgLS0tLQorIDUgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjkuMi9nY2MvZGVmYXVsdHMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy9kZWZhdWx0cy5oCisrKysgZ2NjLTQuOS4yL2djYy9kZWZhdWx0cy5oCitAQCAtNDM4LDYgKzQzOCwxMSBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJCisgI2RlZmluZSBEV0FSRl9GUkFNRV9SRUdOVU0oUkVHKSBEQlhfUkVHSVNURVJfTlVNQkVSIChSRUcpCisgI2VuZGlmCisgCisrLyogVGhlIG1hcHBpbmcgZnJvbSBkd2FyZiBDRkEgcmVnIG51bWJlciB0byBpbnRlcm5hbCBkd2FyZiByZWcgbnVtYmVycy4gICovCisrI2lmbmRlZiBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTgorKyNkZWZpbmUgRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4oUkVHTk8pIChSRUdOTykKKysjZW5kaWYKKysKKyAvKiBNYXAgcmVnaXN0ZXIgbnVtYmVycyBoZWxkIGluIHRoZSBjYWxsIGZyYW1lIGluZm8gdGhhdCBnY2MgaGFzCisgICAgY29sbGVjdGVkIHVzaW5nIERXQVJGX0ZSQU1FX1JFR05VTSB0byB0aG9zZSB0aGF0IHNob3VsZCBiZSBvdXRwdXQgaW4KKyAgICAuZGVidWdfZnJhbWUgYW5kIC5laF9mcmFtZS4gICovCitJbmRleDogZ2NjLTQuOS4yL2djYy9kd2FyZjJjZmkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy9kd2FyZjJjZmkuYworKysrIGdjYy00LjkuMi9nY2MvZHdhcmYyY2ZpLmMKK0BAIC0yODAsOCArMjgwLDkgQEAgdm9pZCBpbml0X29uZV9kd2FyZl9yZWdfc2l6ZSAoaW50IHJlZ25vLAorIHsKKyAgIGNvbnN0IHVuc2lnbmVkIGludCBkbnVtID0gRFdBUkZfRlJBTUVfUkVHTlVNIChyZWdubyk7CisgICBjb25zdCB1bnNpZ25lZCBpbnQgcm51bSA9IERXQVJGMl9GUkFNRV9SRUdfT1VUIChkbnVtLCAxKTsKKysgIGNvbnN0IHVuc2lnbmVkIGludCBkY29sID0gRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4gKHJudW0pOworIAorLSAgY29uc3QgSE9TVF9XSURFX0lOVCBzbG90b2Zmc2V0ID0gcm51bSAqIEdFVF9NT0RFX1NJWkUgKHNsb3Rtb2RlKTsKKysgIGNvbnN0IEhPU1RfV0lERV9JTlQgc2xvdG9mZnNldCA9IGRjb2wgKiBHRVRfTU9ERV9TSVpFIChzbG90bW9kZSk7CisgICBjb25zdCBIT1NUX1dJREVfSU5UIHJlZ3NpemUgPSBHRVRfTU9ERV9TSVpFIChyZWdtb2RlKTsKKyAKKyAgIGluaXRfc3RhdGUtPnByb2Nlc3NlZF9yZWdub1tyZWdub10gPSB0cnVlOworSW5kZXg6IGdjYy00LjkuMi9saWJnY2MvdW53aW5kLWR3Mi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvbGliZ2NjL3Vud2luZC1kdzIuYworKysrIGdjYy00LjkuMi9saWJnY2MvdW53aW5kLWR3Mi5jCitAQCAtNTUsMTAgKzU1LDYgQEAKKyAjZGVmaW5lIFBSRV9HQ0MzX0RXQVJGX0ZSQU1FX1JFR0lTVEVSUyBEV0FSRl9GUkFNRV9SRUdJU1RFUlMKKyAjZW5kaWYKKyAKKy0jaWZuZGVmIERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OCistI2RlZmluZSBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTihSRUdOTykgKFJFR05PKQorLSNlbmRpZgorLQorIC8qID8/PyBGb3IgdGhlIHB1YmxpYyBmdW5jdGlvbiBpbnRlcmZhY2VzLCB3ZSB0ZW5kIHRvIGdjY19hc3NlcnQgdGhhdCB0aGUKKyAgICBjb2x1bW4gbnVtYmVycyBhcmUgaW4gcmFuZ2UuICBGb3IgdGhlIGR3YXJmMiB1bndpbmQgaW5mbyB0aGlzIGRvZXMgaGFwcGVuLAorICAgIGFsdGhvdWdoIHNvIGZhciBpbiBhIGNhc2UgdGhhdCBkb2Vzbid0IGFjdHVhbGx5IG1hdHRlci4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTctYWFyY2g2NC1jb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU3LWFhcmNoNjQtY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOTU1OTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU3LWFhcmNoNjQtY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Rpc2FibGUgdGhlIE1VTFRJTElCX09TRElSTkFNRVMgYW5kIG90aGVyIG11bHRpbGliIG9wdGlvbnMuCisKK0hhcmQgY29kaW5nIHRoZSBNVUxUSUxJQl9PU0RJUk5BTUVTIHdpdGggLi4vbGliNjQgaXMgY2F1c2luZyBwcm9ibGVtcyBvbgorc3lzdGVtcyB3aGVyZSB0aGUgbGliZGlyIGlzIE5PVCBzZXQgdG8gL2xpYjY0LiAgVGhpcyBpcyBhbGxvd2VkIGJ5IHRoZSBBQkksIGFzCitsb25nIGFzIHRoZSBkeW5hbWljIGxvYWRlciBpcyBwcmVzZW50IGluIC9saWIuCisKK1dlIHNpbXBseSB3YW50IHRvIHVzZSB0aGUgZGVmYXVsdCBydWxlcyBpbiBnY2MgdG8gZmluZCBhbmQgY29uZmlndXJlIHRoZSAKK25vcm1hbCBsaWJkaXIuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IGdjYy00LjkuMS9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4xLm9yaWcvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAorKysrIGdjYy00LjkuMS9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4CitAQCAtMjEsMTEgKzIxLDExIEBACisgTElCMUFTTVNSQyAgID0gYWFyY2g2NC9saWIxZnVuY3MuYXNtCisgTElCMUFTTUZVTkNTID0gX2FhcmNoNjRfc3luY19jYWNoZV9yYW5nZQorIAorLUFBUkNIX0JFID0gJChpZiAkKGZpbmRzdHJpbmcgVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVD0xLCAkKHRtX2RlZmluZXMpKSxfYmUpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IC49Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDphYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQorLU1VTFRJQVJDSF9ESVJOQU1FID0gJChjYWxsIGlmX211bHRpYXJjaCxhYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQorKyNBQVJDSF9CRSA9ICQoaWYgJChmaW5kc3RyaW5nIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQ9MSwgJCh0bV9kZWZpbmVzKSksX2JlKQorKyNNVUxUSUxJQl9PU0RJUk5BTUVTID0gLj0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOmFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCisrI01VTFRJQVJDSF9ESVJOQU1FID0gJChjYWxsIGlmX211bHRpYXJjaCxhYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQorIAorICMgRGlzYWJsZSB0aGUgbXVsdGlsaWIgZm9yIGxpbnV4LWdudSB0YXJnZXRzIGZvciB0aGUgdGltZSBiZWluZzsgZm9jdXMKKyAjIG9uIHRoZSBiYXJlbWV0YWwgdGFyZ2V0cy4KKy1NVUxUSUxJQl9PUFRJT05TICAgID0KKy1NVUxUSUxJQl9ESVJOQU1FUyAgID0KKysjTVVMVElMSUJfT1BUSU9OUyAgICA9CisrI01VTFRJTElCX0RJUk5BTUVTICAgPQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1OC1nY2MtcjIxMjE3MS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTgtZ2NjLXIyMTIxNzEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0MmJhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTgtZ2NjLXIyMTIxNzEucGF0Y2gKQEAgLTAsMCArMSwxMTMgQEAKK0Zyb20gY2EwM2NmMWIxMzNkNjZlYjk3OGM2OGY2ZGJjMzQ1ZTlhYWJjYmE4OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IHVyb3MgPHVyb3NAMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0PgorRGF0ZTogTW9uLCAzMCBKdW4gMjAxNCAxOTozMDo1MiArMDAwMAorU3ViamVjdDogW1BBVENIXSByMjEyMTcxCisKKyogZXhjZXB0LmMgKGVtaXRfbm90ZV9laF9yZWdpb25fZW5kKTogTmV3IGhlbHBlcgorIGZ1bmN0aW9uLiAJKGNvbnZlcnRfdG9fZWhfcmVnaW9uX3Jhbmdlcyk6IFVzZQorIGVtaXRfbm90ZV9laF9yZWdpb25fZW5kIHRvIAllbWl0IEVIX1JFR0lPTl9FTkQgbm90ZS4gCisgKiBqdW1wLmMgKGNsZWFudXBfYmFycmllcnMpOiBEbyBub3Qgc3BsaXQgYSBjYWxsIGFuZCBpdHMgCisgY29ycmVzcG9uZGluZyBDQUxMX0FSR19MT0NBVElPTiBub3RlLgorCitnaXQtc3ZuLWlkOiBzdm4rc3NoOi8vZ2NjLmdudS5vcmcvc3ZuL2djYy90cnVua0AyMTIxNzEgMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2h0dHBzOi8vZ2NjLmdudS5vcmcvdmlld2N2cy9nY2M/dmlldz1yZXZpc2lvbiZyZXZpc2lvbj0yMTIxNzFdCitTaWduZWQtb2ZmLWJ5OiBCYW9zaGFuIFBhbmcgPGJhb3NoYW4ucGFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZ2NjL2V4Y2VwdC5jIHwgICAyMyArKysrKysrKysrKysrKysrKystLS0tLQorIGdjYy9qdW1wLmMgICB8ICAgMTkgKysrKysrKysrKysrKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9leGNlcHQuYyBiL2djYy9leGNlcHQuYworaW5kZXggZGM1YzFkMi4uN2FjMTE0ZiAxMDA2NDQKKy0tLSBhL2djYy9leGNlcHQuYworKysrIGIvZ2NjL2V4Y2VwdC5jCitAQCAtMjQ2Niw2ICsyNDY2LDIwIEBAIGFkZF9jYWxsX3NpdGUgKHJ0eCBsYW5kaW5nX3BhZCwgaW50IGFjdGlvbiwgaW50IHNlY3Rpb24pCisgICByZXR1cm4gY2FsbF9zaXRlX2Jhc2UgKyBjcnRsLT5laC5jYWxsX3NpdGVfcmVjb3JkX3Zbc2VjdGlvbl0tPmxlbmd0aCAoKSAtIDE7CisgfQorIAorK3N0YXRpYyBydHgKKytlbWl0X25vdGVfZWhfcmVnaW9uX2VuZCAocnR4IGluc24pCisreworKyAgcnR4IG5leHQgPSBORVhUX0lOU04gKGluc24pOworKworKyAgLyogTWFrZSBzdXJlIHdlIGRvIG5vdCBzcGxpdCBhIGNhbGwgYW5kIGl0cyBjb3JyZXNwb25kaW5nCisrICAgICBDQUxMX0FSR19MT0NBVElPTiBub3RlLiAgKi8KKysgIGlmIChuZXh0ICYmIE5PVEVfUCAobmV4dCkKKysgICAgICAmJiBOT1RFX0tJTkQgKG5leHQpID09IE5PVEVfSU5TTl9DQUxMX0FSR19MT0NBVElPTikKKysgICAgaW5zbiA9IG5leHQ7CisrCisrICByZXR1cm4gZW1pdF9ub3RlX2FmdGVyIChOT1RFX0lOU05fRUhfUkVHSU9OX0VORCwgaW5zbik7CisrfQorKworIC8qIFR1cm4gUkVHX0VIX1JFR0lPTiBub3RlcyBiYWNrIGludG8gTk9URV9JTlNOX0VIX1JFR0lPTiBub3Rlcy4KKyAgICBUaGUgbmV3IG5vdGUgbnVtYmVycyB3aWxsIG5vdCByZWZlciB0byByZWdpb24gbnVtYmVycywgYnV0CisgICAgaW5zdGVhZCB0byBjYWxsIHNpdGUgZW50cmllcy4gICovCitAQCAtMjU0NCw4ICsyNTU4LDggQEAgY29udmVydF90b19laF9yZWdpb25fcmFuZ2VzICh2b2lkKQorIAkJbm90ZSA9IGVtaXRfbm90ZV9iZWZvcmUgKE5PVEVfSU5TTl9FSF9SRUdJT05fQkVHLAorIAkJCQkJIGZpcnN0X25vX2FjdGlvbl9pbnNuX2JlZm9yZV9zd2l0Y2gpOworIAkJTk9URV9FSF9IQU5ETEVSIChub3RlKSA9IGNhbGxfc2l0ZTsKKy0JCW5vdGUgPSBlbWl0X25vdGVfYWZ0ZXIgKE5PVEVfSU5TTl9FSF9SRUdJT05fRU5ELAorLQkJCQkJbGFzdF9ub19hY3Rpb25faW5zbl9iZWZvcmVfc3dpdGNoKTsKKysJCW5vdGUKKysJCSAgPSBlbWl0X25vdGVfZWhfcmVnaW9uX2VuZCAobGFzdF9ub19hY3Rpb25faW5zbl9iZWZvcmVfc3dpdGNoKTsKKyAJCU5PVEVfRUhfSEFORExFUiAobm90ZSkgPSBjYWxsX3NpdGU7CisgCQlnY2NfYXNzZXJ0IChsYXN0X2FjdGlvbiAhPSAtMworIAkJCSAgICB8fCAobGFzdF9hY3Rpb25faW5zbgorQEAgLTI1NjksOCArMjU4Myw3IEBAIGNvbnZlcnRfdG9fZWhfcmVnaW9uX3JhbmdlcyAodm9pZCkKKyAJCSAgICBmaXJzdF9ub19hY3Rpb25faW5zbiA9IE5VTExfUlRYOworIAkJICB9CisgCistCQlub3RlID0gZW1pdF9ub3RlX2FmdGVyIChOT1RFX0lOU05fRUhfUkVHSU9OX0VORCwKKy0JCQkJCWxhc3RfYWN0aW9uX2luc24pOworKwkJbm90ZSA9IGVtaXRfbm90ZV9laF9yZWdpb25fZW5kIChsYXN0X2FjdGlvbl9pbnNuKTsKKyAJCU5PVEVfRUhfSEFORExFUiAobm90ZSkgPSBjYWxsX3NpdGU7CisgCSAgICAgIH0KKyAKK0BAIC0yNjE3LDcgKzI2MzAsNyBAQCBjb252ZXJ0X3RvX2VoX3JlZ2lvbl9yYW5nZXMgKHZvaWQpCisgCisgICBpZiAobGFzdF9hY3Rpb24gPj0gLTEgJiYgISBmaXJzdF9ub19hY3Rpb25faW5zbikKKyAgICAgeworLSAgICAgIG5vdGUgPSBlbWl0X25vdGVfYWZ0ZXIgKE5PVEVfSU5TTl9FSF9SRUdJT05fRU5ELCBsYXN0X2FjdGlvbl9pbnNuKTsKKysgICAgICBub3RlID0gZW1pdF9ub3RlX2VoX3JlZ2lvbl9lbmQgKGxhc3RfYWN0aW9uX2luc24pOworICAgICAgIE5PVEVfRUhfSEFORExFUiAobm90ZSkgPSBjYWxsX3NpdGU7CisgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9nY2MvanVtcC5jIGIvZ2NjL2p1bXAuYworaW5kZXggOTQxOGY2NS4uYTVlNWY1MiAxMDA2NDQKKy0tLSBhL2djYy9qdW1wLmMKKysrKyBiL2djYy9qdW1wLmMKK0BAIC0xMjEsMTUgKzEyMSwyNiBAQCByZWJ1aWxkX2p1bXBfbGFiZWxzX2NoYWluIChydHggY2hhaW4pCisgc3RhdGljIHVuc2lnbmVkIGludAorIGNsZWFudXBfYmFycmllcnMgKHZvaWQpCisgeworLSAgcnR4IGluc24sIG5leHQsIHByZXY7CistICBmb3IgKGluc24gPSBnZXRfaW5zbnMgKCk7IGluc247IGluc24gPSBuZXh0KQorKyAgcnR4IGluc247CisrICBmb3IgKGluc24gPSBnZXRfaW5zbnMgKCk7IGluc247IGluc24gPSBORVhUX0lOU04gKGluc24pKQorICAgICB7CistICAgICAgbmV4dCA9IE5FWFRfSU5TTiAoaW5zbik7CisgICAgICAgaWYgKEJBUlJJRVJfUCAoaW5zbikpCisgCXsKKy0JICBwcmV2ID0gcHJldl9ub25ub3RlX2luc24gKGluc24pOworKwkgIHJ0eCBwcmV2ID0gcHJldl9ub25ub3RlX2luc24gKGluc24pOworIAkgIGlmICghcHJldikKKyAJICAgIGNvbnRpbnVlOworKworKwkgIGlmIChDQUxMX1AgKHByZXYpKQorKwkgICAgeworKwkgICAgICAvKiBNYWtlIHN1cmUgd2UgZG8gbm90IHNwbGl0IGEgY2FsbCBhbmQgaXRzIGNvcnJlc3BvbmRpbmcKKysJCSBDQUxMX0FSR19MT0NBVElPTiBub3RlLiAgKi8KKysJICAgICAgcnR4IG5leHQgPSBORVhUX0lOU04gKHByZXYpOworKworKwkgICAgICBpZiAoTk9URV9QIChuZXh0KQorKwkJICAmJiBOT1RFX0tJTkQgKG5leHQpID09IE5PVEVfSU5TTl9DQUxMX0FSR19MT0NBVElPTikKKysJCXByZXYgPSBuZXh0OworKwkgICAgfQorKworIAkgIGlmIChCQVJSSUVSX1AgKHByZXYpKQorIAkgICAgZGVsZXRlX2luc24gKGluc24pOworIAkgIGVsc2UgaWYgKHByZXYgIT0gUFJFVl9JTlNOIChpbnNuKSkKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU5LWdjYy1QUi1ydGwtb3B0aW1pemF0aW9uLTYzMzQ4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1OS1nY2MtUFItcnRsLW9wdGltaXphdGlvbi02MzM0OC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTgyN2NiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1OS1nY2MtUFItcnRsLW9wdGltaXphdGlvbi02MzM0OC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitGcm9tIDZlYWUzZTYzN2ZjYzIyZDIxYjUxZDQ0ZDYxZTNhOWNiNDgyNWU3NzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAzMCBPY3QgMjAxNCAyMDozNzoxNCAtMDcwMAorU3ViamVjdDogW1BBVENIXVBSIHJ0bC1vcHRpbWl6YXRpb24vNjMzNDgKKyAKK1BSIHJ0bC1vcHRpbWl6YXRpb24vNjMzNDgKKyogZW1pdC1ydGwuYyAodHJ5X3NwbGl0KTogRG8gbm90IGVtaXQgZXh0cmEgYmFycmllci4KKworTm90ZTogdGhpcyBwYXRjaCBpcyB0byBmaXggdGhlIHNpZGUgZWZmZWN0IGludHJvZHVjZWQgYnkgcjIxMjE3MSB3aGljaCB3YXMgcmVwb3J0ZWQgYXQ6CitodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD02MzM0OAorCitnaXQtc3ZuLWlkOiBzdm4rc3NoOi8vZ2NjLmdudS5vcmcvc3ZuL2djYy90cnVua0AyMTU2MTMgMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2h0dHBzOi8vZ2NjLmdudS5vcmcvdmlld2N2cy9nY2M/dmlldz1yZXZpc2lvbiZyZXZpc2lvbj0yMTU2MTNdCitTaWduZWQtb2ZmLWJ5OiBCYW9zaGFuIFBhbmcgPGJhb3NoYW4ucGFuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdjYy9lbWl0LXJ0bC5jIHwgICAxMSAtLS0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMCBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9lbWl0LXJ0bC5jIGIvZ2NjL2VtaXQtcnRsLmMKK2luZGV4IDQ3MzZmOGQuLmFlNjlkYmQgMTAwNjQ0CistLS0gYS9nY2MvZW1pdC1ydGwuYworKysrIGIvZ2NjL2VtaXQtcnRsLmMKK0BAIC0zNDIyLDcgKzM0MjIsNiBAQCB0cnlfc3BsaXQgKHJ0eCBwYXQsIHJ0eCB0cmlhbCwgaW50IGxhc3QpCisgeworICAgcnR4IGJlZm9yZSA9IFBSRVZfSU5TTiAodHJpYWwpOworICAgcnR4IGFmdGVyID0gTkVYVF9JTlNOICh0cmlhbCk7CistICBpbnQgaGFzX2JhcnJpZXIgPSAwOworICAgcnR4IG5vdGUsIHNlcSwgdGVtOworICAgaW50IHByb2JhYmlsaXR5OworICAgcnR4IGluc25fbGFzdCwgaW5zbjsKK0BAIC0zNDQxLDE0ICszNDQwLDYgQEAgdHJ5X3NwbGl0IChydHggcGF0LCBydHggdHJpYWwsIGludCBsYXN0KQorIAorICAgc3BsaXRfYnJhbmNoX3Byb2JhYmlsaXR5ID0gLTE7CisgCistICAvKiBJZiB3ZSBhcmUgc3BsaXR0aW5nIGEgSlVNUF9JTlNOLCBpdCBtaWdodCBiZSBmb2xsb3dlZCBieSBhIEJBUlJJRVIuCistICAgICBXZSBtYXkgbmVlZCB0byBoYW5kbGUgdGhpcyBzcGVjaWFsbHkuICAqLworLSAgaWYgKGFmdGVyICYmIEJBUlJJRVJfUCAoYWZ0ZXIpKQorLSAgICB7CistICAgICAgaGFzX2JhcnJpZXIgPSAxOworLSAgICAgIGFmdGVyID0gTkVYVF9JTlNOIChhZnRlcik7CistICAgIH0KKy0KKyAgIGlmICghc2VxKQorICAgICByZXR1cm4gdHJpYWw7CisgCitAQCAtMzU5NCw4ICszNTg1LDYgQEAgdHJ5X3NwbGl0IChydHggcGF0LCBydHggdHJpYWwsIGludCBsYXN0KQorICAgdGVtID0gZW1pdF9pbnNuX2FmdGVyX3NldGxvYyAoc2VxLCB0cmlhbCwgSU5TTl9MT0NBVElPTiAodHJpYWwpKTsKKyAKKyAgIGRlbGV0ZV9pbnNuICh0cmlhbCk7CistICBpZiAoaGFzX2JhcnJpZXIpCistICAgIGVtaXRfYmFycmllcl9hZnRlciAodGVtKTsKKyAKKyAgIC8qIFJlY3Vyc2l2ZWx5IGNhbGwgdHJ5X3NwbGl0IGZvciBlYWNoIG5ldyBpbnNuIGNyZWF0ZWQ7IGJ5IHRoZQorICAgICAgdGltZSBjb250cm9sIHJldHVybnMgaGVyZSB0aGF0IGluc24gd2lsbCBiZSBmdWxseSBzcGxpdCwgc28KKy0tIAorMS43LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2MC1Pbmx5LWFsbG93LWU1MDAtZG91YmxlLWluLVNQRV9TSU1EX1JFR05PX1AtcmVnaXN0ZXJzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2MC1Pbmx5LWFsbG93LWU1MDAtZG91YmxlLWluLVNQRV9TSU1EX1JFR05PX1AtcmVnaXN0ZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YTlmZGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYwLU9ubHktYWxsb3ctZTUwMC1kb3VibGUtaW4tU1BFX1NJTURfUkVHTk9fUC1yZWdpc3RlcnMucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorRnJvbSA1YzAwOTIwNzAyNTMxMTNjZjBkOWM0NWVhY2M4ODRiM2VjYzM0ZDgxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbToganNtMjggPGpzbTI4QDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhND4KK0RhdGU6IFNhdCwgMjUgT2N0IDIwMTQgMDA6MjM6MTcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gT25seSBhbGxvdyBlNTAwIGRvdWJsZSBpbiBTUEVfU0lNRF9SRUdOT19QIHJlZ2lzdGVycy4KKworcnM2MDAwX2hhcmRfcmVnbm9fbnJlZ3NfaW50ZXJuYWwgYWxsb3dzIFNQRSB2ZWN0b3JzIGluIHNpbmdsZQorcmVnaXN0ZXJzIHNhdGlzZnlpbmcgU1BFX1NJTURfUkVHTk9fUCAoaS5lLiByZWdpc3RlciBudW1iZXJzIDAgdG8KKzMxKS4gIEhvd2V2ZXIsIHRoZSBjb3JyZXNwb25kaW5nIHRlc3QgZm9yIGU1MDAgZG91YmxlIHRyZWF0cyBhbGwKK3JlZ2lzdGVycyBhcyBiZWluZyBhYmxlIHRvIHN0b3JlIGEgNjQtYml0IHZhbHVlLCByYXRoZXIgdGhhbiBqdXN0Cit0aG9zZSBHUFJzLgorCitMb2dpY2FsbHkgdGhpcyBpbmNvbnNpc3RlbmN5IGlzIHdyb25nOyBpbiBhZGRpdGlvbiwgaXQgY2F1c2VzIHByb2JsZW1zCit1bndpbmRpbmcgZnJvbSBzaWduYWwgaGFuZGxlcnMuICBsaW51eC11bndpbmQuaCB1c2VzCitBUkdfUE9JTlRFUl9SRUdOVU0gYXMgYSBwbGFjZSB0byBzdG9yZSB0aGUgcmV0dXJuIGFkZHJlc3MgZnJvbSBhCitzaWduYWwgaGFuZGxlciwgYnV0IHRoaXMgbG9naWMgaW4gcnM2MDAwX2hhcmRfcmVnbm9fbnJlZ3NfaW50ZXJuYWwKK3Jlc3VsdHMgaW4gdGhhdCBiZWluZyBjb25zaWRlcmVkIGFuIDgtYnl0ZSByZWdpc3RlciwgcmVzdWx0aW5nIGluCithc3NlcnRpb24gZmFpbHVyZXMuCisoPGh0dHBzOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAxNC0wOS9tc2cwMjYyNS5odG1sPiBmaXJzdAorbmVlZHMgdG8gYmUgYXBwbGllZCBmb3IgdW53aW5kaW5nIHRvIHdvcmsgaW4gZ2VuZXJhbCBvbiBlNTAwLikgIFRoaXMKK3BhdGNoIG1ha2VzIHJzNjAwMF9oYXJkX3JlZ25vX25yZWdzX2ludGVybmFsIGhhbmRsZSB0aGUgZTUwMCBkb3VibGUKK2Nhc2UgY29uc2lzdGVudGx5IHdpdGggU1BFIHZlY3RvcnMuCisKK1Rlc3RlZCB3aXRoIG5vIHJlZ3Jlc3Npb25zIHdpdGggY3Jvc3MgdG8gcG93ZXJwYy1saW51eC1nbnVzcGUgKGdpdmVuCit0aGUgYWZvcmVtZW50aW9uZWQgcGF0Y2ggYXBwbGllZCkuICBGYWlsdXJlcyBvZiBzaWduYWwgaGFuZGxpbmcKK3Vud2luZGluZyB0ZXN0cyBzdWNoIGFzIGdjYy5kZy9jbGVhbnVwLXs4LDksMTAsMTF9LmMgYXJlIGZpeGVkIGJ5IHRoaXMKK3BhdGNoLgorCisJKiBjb25maWcvcnM2MDAwL3JzNjAwMC5jIChyczYwMDBfaGFyZF9yZWdub19ucmVnc19pbnRlcm5hbCk6IERvCisJbm90IGFsbG93IGU1MDAgZG91YmxlIGluIHJlZ2lzdGVycyBub3Qgc2F0aXN5ZmluZworCVNQRV9TSU1EX1JFR05PX1AuCisKKworZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjE2Njg4IDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZ2NjIDUuMF0KKworLS0tCisgZ2NjL0NoYW5nZUxvZyAgICAgICAgICAgICAgfCA2ICsrKysrKworIGdjYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBnY2MtNC45LjIvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYworKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYworQEAgLTE3MDMsNyArMTcwMyw3IEBAIHJzNjAwMF9oYXJkX3JlZ25vX25yZWdzX2ludGVybmFsIChpbnQgcmUKKyAgICAgIFNDbW9kZSBzbyBhcyB0byBwYXNzIHRoZSB2YWx1ZSBjb3JyZWN0bHkgaW4gYSBwYWlyIG9mCisgICAgICByZWdpc3RlcnMuICAqLworICAgZWxzZSBpZiAoVEFSR0VUX0U1MDBfRE9VQkxFICYmIEZMT0FUX01PREVfUCAobW9kZSkgJiYgbW9kZSAhPSBTQ21vZGUKKy0JICAgJiYgIURFQ0lNQUxfRkxPQVRfTU9ERV9QIChtb2RlKSkKKysJICAgJiYgIURFQ0lNQUxfRkxPQVRfTU9ERV9QIChtb2RlKSAmJiBTUEVfU0lNRF9SRUdOT19QIChyZWdubykpCisgICAgIHJlZ19zaXplID0gVU5JVFNfUEVSX0ZQX1dPUkQ7CisgCisgICBlbHNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYxLXRhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjEtdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OGM2NmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYxLXRhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaApAQCAtMCwwICsxLDgxIEBACitFbnN1cmUgdGFyZ2V0IGdjYyBoZWFkZXJzIGNhbiBiZSBpbmNsdWRlZAorCitUaGVyZSBhcmUgYSBmZXcgaGVhZGVycyBpbnN0YWxsZWQgYXMgcGFydCBvZiB0aGUgT3BlbkVtYmVkZGVkCitnY2MtcnVudGltZSB0YXJnZXQgKG9tcC5oLCBzc3AvKi5oKS4gQmVpbmcgaW5zdGFsbGVkIGZyb20gYSByZWNpcGUKK2J1aWx0IGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgdGhlc2UgYXJlIHdpdGhpbiB0aGUgdGFyZ2V0CitzeXNyb290IGFuZCBub3QgY3Jvc3MvbmF0aXZlc2RrOyB0aHVzIHRoZXkgd2VyZW4ndCBhYmxlIHRvIGJlCitmb3VuZCBieSBnY2Mgd2l0aCB0aGUgZXhpc3Rpbmcgc2VhcmNoIHBhdGhzLiBBZGQgc3VwcG9ydCBmb3IKK3BpY2tpbmcgdXAgdGhlc2UgaGVhZGVycyB1bmRlciB0aGUgc3lzcm9vdCBzdXBwbGllZCBvbiB0aGUgZ2NjCitjb21tYW5kIGxpbmUgaW4gb3JkZXIgdG8gcmVzb2x2ZSB0aGlzLgorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgkyMDE0LTEyLTIzIDExOjU3OjMzLjMyNzg3MzMzMSArMDAwMAorKysrIGIvZ2NjL01ha2VmaWxlLmluCTIwMTUtMDEtMjEgMTE6MzI6MzUuNDQ3MzA1Mzk0ICswMDAwCitAQCAtNTg3LDYgKzU4Nyw3IEBACisgCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbXBpbGVyIGZpbmRzIGxpYnJhcmllcyBldGMuCisgbGlic3ViZGlyID0gJChsaWJkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikKKytsaWJzdWJkaXJfdGFyZ2V0ID0gZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKQorICMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBleGVjdXRhYmxlcworIGxpYmV4ZWNzdWJkaXIgPSAkKGxpYmV4ZWNkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikKKyAjIERpcmVjdG9yeSBpbiB3aGljaCBhbGwgcGx1Z2luIHJlc291cmNlcyBhcmUgaW5zdGFsbGVkCitAQCAtMjUzNCw2ICsyNTM1LDcgQEAKKyAKKyBQUkVQUk9DRVNTT1JfREVGSU5FUyA9IFwKKyAgIC1ER0NDX0lOQ0xVREVfRElSPVwiJChsaWJzdWJkaXIpL2luY2x1ZGVcIiBcCisrICAtREdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQ9XCIkKGxpYnN1YmRpcl90YXJnZXQpL2luY2x1ZGVcIiBcCisgICAtREZJWEVEX0lOQ0xVREVfRElSPVwiJChsaWJzdWJkaXIpL2luY2x1ZGUtZml4ZWRcIiBcCisgICAtREdQTFVTUExVU19JTkNMVURFX0RJUj1cIiQoZ2NjX2d4eF9pbmNsdWRlX2RpcilcIiBcCisgICAtREdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVD0kKGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3QpIFwKKy0tLSBhL2djYy9jcHBkZWZhdWx0LmMJMjAxNS0wMS0xMyAxNzo0MDoyNi4xMzEwMTI3MjUgKzAwMDAKKysrKyBiL2djYy9jcHBkZWZhdWx0LmMJMjAxNS0wMS0yMSAxMTozMDowOC45Mjg0MjY0OTIgKzAwMDAKK0BAIC01OSw2ICs1OSwxMCBAQAorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycy4gICovCisgICAgIHsgR0NDX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorKyNpZmRlZiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUCisrICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgc3lzcm9vdC4gICovCisrICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisrI2VuZGlmCisgI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisgICAgIC8qIC91c3IvbG9jYWwvaW5jbHVkZSBjb21lcyBiZWZvcmUgdGhlIGZpeGluY2x1ZGVkIGhlYWRlciBmaWxlcy4gICovCisgICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDIgfSwKK2RpZmYgLS1naXQgYS9nY2MvZGVmYXVsdHMuaCBiL2djYy9kZWZhdWx0cy5oCitpbmRleCBmOTRhZTE3Li5kOThiNDBiIDEwMDY0NAorLS0tIGEvZ2NjL2RlZmF1bHRzLmgKKysrKyBiL2djYy9kZWZhdWx0cy5oCitAQCAtMTM5MCw0ICsxMzkwLDEzIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorIAorICNlbmRpZiAvKiBHQ0NfSU5TTl9GTEFHU19IICAqLworIAorKy8qIERlZmF1bHQgcHJlZml4ZXMgdG8gYXR0YWNoIHRvIGNvbW1hbmQgbmFtZXMuICAqLworKworKyNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xCisrI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEgIi9saWIvIgorKyNlbmRpZgorKyNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yCisrI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIi91c3IvbGliLyIKKysjZW5kaWYKKysKKyAjZW5kaWYgIC8qICEgR0NDX0RFRkFVTFRTX0ggKi8KK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDlmMGI3ODEuLjE3NGZjYTggMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTExODksMTMgKzExODksNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqZ2NjX2xpYmV4ZWNfcHJlZml4OworIAorIC8qIERlZmF1bHQgcHJlZml4ZXMgdG8gYXR0YWNoIHRvIGNvbW1hbmQgbmFtZXMuICAqLworIAorLSNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xCistI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEgIi9saWIvIgorLSNlbmRpZgorLSNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yCistI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIi91c3IvbGliLyIKKy0jZW5kaWYKKy0KKyAjaWZkZWYgQ1JPU1NfRElSRUNUT1JZX1NUUlVDVFVSRSAgLyogRG9uJ3QgdXNlIHRoZXNlIHByZWZpeGVzIGZvciBhIGNyb3NzIGNvbXBpbGVyLiAgKi8KKyAjdW5kZWYgTURfRVhFQ19QUkVGSVgKKyAjdW5kZWYgTURfU1RBUlRGSUxFX1BSRUZJWApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2Mi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2Mi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OGJkNDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYyLVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorRnJvbSA4NjFiY2ZkNGFlODE0ZjM1MWUwYzY2OGVlMjZkMDFkMTMzMWUwNDIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMjggQXByIDIwMTUgMjM6MTU6MjcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAzNi8zN10gVXNlIFNZU1RFTUxJQlNfRElSIHJlcGxhY2VtZW50IGluc3RlYWQgb2YgaGFyZGNvZGluZworIGJhc2VfbGliZGlyCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCisrKysgZ2NjLTQuOS4yL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKK0BAIC0yMSw3ICsyMSw3IEBACisgI2lmbmRlZiBHQ0NfQUFSQ0g2NF9MSU5VWF9ICisgI2RlZmluZSBHQ0NfQUFSQ0g2NF9MSU5VWF9ICisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC1hYXJjaDY0JXttYmlnLWVuZGlhbjpfYmV9LnNvLjEiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfS5zby4xIgorIAorICNkZWZpbmUgQ1BQX1NQRUMgIiV7cHRocmVhZDotRF9SRUVOVFJBTlR9IgorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2My1uYXRpdmVzZGstZ2NjLXN1cHBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYzLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWVmYTQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2My1uYXRpdmVzZGstZ2NjLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxOTggQEAKK0JlaW5nIGFibGUgdG8gYnVpbGQgYSBuYXRpdmVzZGsgZ2NjIGlzIHVzZWZ1bCwgcGFydGljdWxhcmx5IGluIGNhc2VzCit3aGVyZSB0aGUgaG9zdCBjb21waWxlciBtYXkgYmUgb2YgYW4gaW5jb21wYXRpYmxlIHZlcnNpb24gKG9yIGEgMzIKK2JpdCBjb21waWxlciBpcyBuZWVkZWQpLgorCitTYWRseSwgYnVpbGRpbmcgbmF0aXZlc2RrLWdjYyBpcyBub3Qgc3RyYWlnaHQgZm9yd2FyZC4gV2UgaW5zdGFsbAorbmF0aXZlc2RrLWdjYyBpbnRvIGEgcmVsb2NhdGFibGUgbG9jYXRpb24gYW5kIHRoaXMgbWVhbnMgdGhhdCBpdHMKK2xpYnJhcnkgbG9jYXRpb25zIGNhbiBjaGFuZ2UuICJOb3JtYWwiIHN5c3Jvb3Qgc3VwcG9ydCBkb2Vzbid0IGhlbHAKK2luIHRoaXMgY2FzZSBzaW5jZSB0aGUgdmFsdWVzIG9mIHBhdGhzIGxpa2UgImxpYmRpciIgY2hhbmdlLCBub3QganVzdAorYmFzZSByb290IGRpcmVjdG9yeSBvZiB0aGUgc3lzdGVtLgorCitJbiBvcmRlciB0byBoYW5kbGUgdGhpcyB3ZSBkbyB0d28gdGhpbmdzOgorCithKSBBZGQgJXIgaW50byBzcGVjIGZpbGUgbWFya3VwIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBpbmplY3RlZCBwYXRocworICAgc3VjaCBhcyBTWVNURU1MSUJTX0RJUiAoc2VlIGdjY19tdWx0aWxpYl9zZXR1cCgpKS4KK2IpIEFkZCBvdGhlciBwYXRocyB3aGljaCBuZWVkIHJlbG9jYXRpb24gaW50byBhIC5nY2NyZWxvY3ByZWZpeCBzZWN0aW9uCisgICB3aGljaCB0aGUgcmVsb2NhdGlvbiBjb2RlIHdpbGwgbm90aWNlIGFuZCBhZGp1c3QgYXV0b21hdGljYWxseS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitSUCAyMDE1LzcvMjgKK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDVmZDNkMGEuLjJkZTI5YWEgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTEyMCw2ICsxMjAsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqdGFyZ2V0X3N5c3RlbV9yb290ID0gVEFSR0VUX1NZU1RFTV9ST09UOworICNlbHNlCisgc3RhdGljIGNvbnN0IGNoYXIgKnRhcmdldF9zeXN0ZW1fcm9vdCA9IDA7CisgI2VuZGlmCisrIAorK3N0YXRpYyBjaGFyIHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1lTVEVNTElCU19ESVI7CisgCisgLyogTm9uemVybyBtZWFucyBwYXNzIHRoZSB1cGRhdGVkIHRhcmdldF9zeXN0ZW1fcm9vdCB0byB0aGUgY29tcGlsZXIuICAqLworIAorQEAgLTM4NCw2ICszODYsNyBAQCBvciB3aXRoIGNvbnN0YW50IHRleHQgaW4gYSBzaW5nbGUgYXJndW1lbnQuCisgICVHICAgICBwcm9jZXNzIExJQkdDQ19TUEVDIGFzIGEgc3BlYy4KKyAgJVIgICAgIE91dHB1dCB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0YXJnZXRfc3lzdGVtX3Jvb3QgYW5kCisgICAgICAgICB0YXJnZXRfc3lzcm9vdF9zdWZmaXguCisrICVyICAgICBPdXRwdXQgdGhlIGJhc2UgcGF0aCB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4CisgICVTICAgICBwcm9jZXNzIFNUQVJURklMRV9TUEVDIGFzIGEgc3BlYy4gIEEgY2FwaXRhbCBTIGlzIGFjdHVhbGx5IHVzZWQgaGVyZS4KKyAgJUUgICAgIHByb2Nlc3MgRU5ERklMRV9TUEVDIGFzIGEgc3BlYy4gIEEgY2FwaXRhbCBFIGlzIGFjdHVhbGx5IHVzZWQgaGVyZS4KKyAgJUMgICAgIHByb2Nlc3MgQ1BQX1NQRUMgYXMgYSBzcGVjLgorQEAgLTEyMTgsMTAgKzEyMjEsMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmdjY19saWJleGVjX3ByZWZpeDsKKyAgICBnY2NfZXhlY19wcmVmaXggaXMgc2V0IGJlY2F1c2UsIGluIHRoYXQgY2FzZSwgd2Uga25vdyB3aGVyZSB0aGUKKyAgICBjb21waWxlciBoYXMgYmVlbiBpbnN0YWxsZWQsIGFuZCB1c2UgcGF0aHMgcmVsYXRpdmUgdG8gdGhhdAorICAgIGxvY2F0aW9uIGluc3RlYWQuICAqLworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9leGVjX3ByZWZpeCA9IFNUQU5EQVJEX0VYRUNfUFJFRklYOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9saWJleGVjX3ByZWZpeCA9IFNUQU5EQVJEX0xJQkVYRUNfUFJFRklYOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9iaW5kaXJfcHJlZml4ID0gU1RBTkRBUkRfQklORElSX1BSRUZJWDsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7Cisrc3RhdGljIGNoYXIgc3RhbmRhcmRfZXhlY19wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfRVhFQ19QUkVGSVg7Cisrc3RhdGljIGNoYXIgc3RhbmRhcmRfbGliZXhlY19wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfTElCRVhFQ19QUkVGSVg7Cisrc3RhdGljIGNoYXIgc3RhbmRhcmRfYmluZGlyX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9CSU5ESVJfUFJFRklYOworK3N0YXRpYyBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4ID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWDsKKyAKKyAvKiBGb3IgbmF0aXZlIGNvbXBpbGVycywgdGhlc2UgYXJlIHdlbGwta25vd24gcGF0aHMgY29udGFpbmluZworICAgIGNvbXBvbmVudHMgdGhhdCBtYXkgYmUgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbS4gIEZvciBjcm9zcworQEAgLTEyMjksOSArMTIzMiw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4ID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWDsKKyBzdGF0aWMgY29uc3QgY2hhciAqbWRfZXhlY19wcmVmaXggPSBNRF9FWEVDX1BSRUZJWDsKKyBzdGF0aWMgY29uc3QgY2hhciAqbWRfc3RhcnRmaWxlX3ByZWZpeCA9IE1EX1NUQVJURklMRV9QUkVGSVg7Cisgc3RhdGljIGNvbnN0IGNoYXIgKm1kX3N0YXJ0ZmlsZV9wcmVmaXhfMSA9IE1EX1NUQVJURklMRV9QUkVGSVhfMTsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8xCisrc3RhdGljIGNoYXIgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8xWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKQorICAgPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzE7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMgorK3N0YXRpYyBjaGFyIHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkKKyAgID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yOworIAorIC8qIEEgcmVsYXRpdmUgcGF0aCB0byBiZSB1c2VkIGluIGZpbmRpbmcgdGhlIGxvY2F0aW9uIG9mIHRvb2xzCitAQCAtNTMwNSw2ICs1MzA4LDExIEBAIGRvX3NwZWNfMSAoY29uc3QgY2hhciAqc3BlYywgaW50IGluc3dpdGNoLCBjb25zdCBjaGFyICpzb2Z0X21hdGNoZWRfcGFydCkKKyAJICAgICAgfQorIAkgICAgYnJlYWs7CisgCisrICAgICAgICAgIGNhc2UgJ3InOgorKyAgICAgICAgICAgICAgb2JzdGFja19ncm93ICgmb2JzdGFjaywgdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeCwKKysJCSAgICAgIHN0cmxlbiAodGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeCkpOworKyAgICAgICAgICAgIGJyZWFrOworKworIAkgIGNhc2UgJ1MnOgorIAkgICAgdmFsdWUgPSBkb19zcGVjXzEgKHN0YXJ0ZmlsZV9zcGVjLCAwLCBOVUxMKTsKKyAJICAgIGlmICh2YWx1ZSAhPSAwKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NwcGRlZmF1bHQuYyBiL2djYy9jcHBkZWZhdWx0LmMKK2luZGV4IGRhZDY5ZTYuLmNmNDNmMjggMTAwNjQ0CistLS0gYS9nY2MvY3BwZGVmYXVsdC5jCisrKysgYi9nY2MvY3BwZGVmYXVsdC5jCitAQCAtMzUsNiArMzUsMzAgQEAKKyAjIHVuZGVmIENST1NTX0lOQ0xVREVfRElSCisgI2VuZGlmCisgCisrc3RhdGljIGNoYXIgR1BMVVNQTFVTX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdQTFVTUExVU19JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBHQ0NfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR0NDX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUOworKyNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIExPQ0FMX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IExPQ0FMX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBQUkVGSVhfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBQUkVGSVhfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gUFJFRklYX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBGSVhFRF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIEZJWEVEX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEZJWEVEX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBDUk9TU19JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIENST1NTX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IENST1NTX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBUT09MX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgVE9PTF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBUT09MX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIKKytzdGF0aWMgY2hhciBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSOworKyNlbmRpZgorKworIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorICNpZmRlZiBJTkNMVURFX0RFRkFVTFRTCisgPSBJTkNMVURFX0RFRkFVTFRTOworQEAgLTQyLDM4ICs2NiwzOCBAQCBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KKyA9IHsKKyAjaWZkZWYgR1BMVVNQTFVTX0lOQ0xVREVfRElSCisgICAgIC8qIFBpY2sgdXAgR05VIEMrKyBnZW5lcmljIGluY2x1ZGUgZmlsZXMuICAqLworLSAgICB7IEdQTFVTUExVU19JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCisrICAgIHsgR1BMVVNQTFVTX0lOQ0xVREVfRElSVkFSLCAiRysrIiwgMSwgMSwKKyAgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVIKKyAgICAgLyogUGljayB1cCBHTlUgQysrIHRhcmdldC1kZXBlbmRlbnQgaW5jbHVkZSBmaWxlcy4gICovCistICAgIHsgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAorKyAgICB7IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSVkFSLCAiRysrIiwgMSwgMSwKKyAgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDEgfSwKKyAjZW5kaWYKKyAjaWZkZWYgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSCisgICAgIC8qIFBpY2sgdXAgR05VIEMrKyBiYWNrd2FyZCBhbmQgZGVwcmVjYXRlZCBpbmNsdWRlIGZpbGVzLiAgKi8KKy0gICAgeyBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAorKyAgICB7IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUlZBUiwgIkcrKyIsIDEsIDEsCisgICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEdDQ19JTkNMVURFX0RJUgorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycy4gICovCistICAgIHsgR0NDX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorKyAgICB7IEdDQ19JTkNMVURFX0RJUlZBUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVAorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycyB1bmRlciB0aGUgc3BlY2lmaWVkIHN5c3Jvb3QuICAqLworLSAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VULCAiR0NDIiwgMCwgMCwgMSwgMCB9LAorKyAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMlZBUiwgIkdDQyIsIDAsIDAsIDEsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKKyAgICAgLyogL3Vzci9sb2NhbC9pbmNsdWRlIGNvbWVzIGJlZm9yZSB0aGUgZml4aW5jbHVkZWQgaGVhZGVyIGZpbGVzLiAgKi8KKy0gICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMiB9LAorLSAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAwIH0sCisrICAgIHsgTE9DQUxfSU5DTFVERV9ESVJWQVIsIDAsIDAsIDEsIDEsIDIgfSwKKysgICAgeyBMT0NBTF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMSwgMCB9LAorICNlbmRpZgorICNpZmRlZiBQUkVGSVhfSU5DTFVERV9ESVIKKy0gICAgeyBQUkVGSVhfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDAsIDAgfSwKKysgICAgeyBQUkVGSVhfSU5DTFVERV9ESVJWQVIsIDAsIDAsIDEsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgRklYRURfSU5DTFVERV9ESVIKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBmaXhpbmNsdWRlcy4gICovCistICAgIHsgRklYRURfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLAorKyAgICB7IEZJWEVEX0lOQ0xVREVfRElSVkFSLCAiR0NDIiwgMCwgMCwgMCwKKyAgICAgICAvKiBBIG11bHRpbGliIHN1ZmZpeCBuZWVkcyBhZGRpbmcgaWYgZGlmZmVyZW50IG11bHRpbGlicyB1c2UKKyAJIGRpZmZlcmVudCBoZWFkZXJzLiAgKi8KKyAjaWZkZWYgU1lTUk9PVF9IRUFERVJTX1NVRkZJWF9TUEVDCitAQCAtODUsMTYgKzEwOSwxNiBAQCBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KKyAjZW5kaWYKKyAjaWZkZWYgQ1JPU1NfSU5DTFVERV9ESVIKKyAgICAgLyogT25lIHBsYWNlIHRoZSB0YXJnZXQgc3lzdGVtJ3MgaGVhZGVycyBtaWdodCBiZS4gICovCistICAgIHsgQ1JPU1NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisrICAgIHsgQ1JPU1NfSU5DTFVERV9ESVJWQVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIFRPT0xfSU5DTFVERV9ESVIKKyAgICAgLyogQW5vdGhlciBwbGFjZSB0aGUgdGFyZ2V0IHN5c3RlbSdzIGhlYWRlcnMgbWlnaHQgYmUuICAqLworLSAgICB7IFRPT0xfSU5DTFVERV9ESVIsICJCSU5VVElMUyIsIDAsIDEsIDAsIDAgfSwKKysgICAgeyBUT09MX0lOQ0xVREVfRElSVkFSLCAiQklOVVRJTFMiLCAwLCAxLCAwLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUgorICAgICAvKiAvdXNyL2luY2x1ZGUgY29tZXMgZGVhZCBsYXN0LiAgKi8KKy0gICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMiB9LAorLSAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAwIH0sCisrICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSVkFSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDIgfSwKKysgICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVJWQVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMCB9LAorICNlbmRpZgorICAgICB7IDAsIDAsIDAsIDAsIDAsIDAgfQorICAgfTsKK2RpZmYgLS1naXQgYS9nY2MvY3BwZGVmYXVsdC5oIGIvZ2NjL2NwcGRlZmF1bHQuaAoraW5kZXggMzBiNmZlZC4uMmVmOTZiNyAxMDA2NDQKKy0tLSBhL2djYy9jcHBkZWZhdWx0LmgKKysrKyBiL2djYy9jcHBkZWZhdWx0LmgKK0BAIC0zMyw3ICszMyw4IEBACisgCisgc3RydWN0IGRlZmF1bHRfaW5jbHVkZQorIHsKKy0gIGNvbnN0IGNoYXIgKmNvbnN0IGZuYW1lOwkvKiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5LiAgKi8KKysgIGNvbnN0IGNoYXIgKmZuYW1lOyAgICAgLyogVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeS4gICovCisrCisgICBjb25zdCBjaGFyICpjb25zdCBjb21wb25lbnQ7CS8qIFRoZSBjb21wb25lbnQgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5CisgCQkJCSAgIChzZWUgdXBkYXRlX3BhdGggaW4gcHJlZml4LmMpICovCisgICBjb25zdCBjaGFyIGNwbHVzcGx1czsJCS8qIE9ubHkgbG9vayBoZXJlIGlmIHdlJ3JlIGNvbXBpbGluZyBDKysuICAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2NC1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY0LWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzU2OTg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2NC1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2gKQEAgLTAsMCArMSw4OCBAQAorU2VhcmNoIHRhcmdldCBzeXNyb290IGdjYyB2ZXJzaW9uIHNwZWNpZmljIGRpcnMgd2l0aCBtdWx0aWxpYi4KKworV2UgaW5zdGFsbCB0aGUgZ2NjIGxpYnJhcmllcyAoc3VjaCBhcyBjcnRiZWdpbi5wKSBpbnRvCis8c3lzcm9vdD48bGliZGlyPi88dGFyZ2V0LXN5cz4vNS4yLjAvCit3aGljaCBpcyBhIGRlZmF1bHQgc2VhcmNoIHBhdGggZm9yIEdDQyAoYWthIG11bHRpX3N1ZmZpeCBpbiB0aGUgCitjb2RlIGJlbG93KS4gPHRhcmdldC1zeXM+IGlzICdtYWNoaW5lJyBpbiBnY2MncyB0ZXJtaW5vbG9neS4gV2UgdXNlCit0aGVzZSBkaXJlY3RvcmllcyBzbyB0aGF0IG11bHRpcGxlIGdjYyB2ZXJzaW9ucyBjb3VsZCBpbiB0aGVvcnkgCitjby1leGlzdCBvbiB0YXJnZXQuCisKK1dlIG9ubHkgd2FudCB0byBidWlsZCBvbmUgZ2NjLWNyb3NzLWNhbmFkaWFuIHBlciBhcmNoIGFuZCBoYXZlIHRoaXMgd29yayAKK2ZvciBhbGwgbXVsdGlsaWJzLiA8dGFyZ2V0LXN5cz4gY2FuIGJlIGhhbmRsZWQgYnkgbWFwcGluZyB0aGUgbXVsdGlsaWIKKzx0YXJnZXQtc3lzPiB0byB0aGUgb25lIHVzZWQgYnkgZ2NjLWNyb3NzLWNhbmFkaWFuLCBlLmcuIG1pcHM2NC1wb2xrbWxsaWIzMi1saW51eCAKK2lzIHN5bWxpbmtlZCB0byBieSBtaXBzNjQtcG9reS1saW51eC4KKworVGhlIGRlZmF1bHQgZ2NjIHNlYXJjaCBwYXRoIGluIHRoZSB0YXJnZXQgc3lzcm9vdCBmb3IgYSAibGliNjQiIG11dGxpbGliIGlzOgorCis8c3lzcm9vdD4vbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vdXNyL2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi9saWIzMi8KKzxzeXNyb290Pi91c3IvbGliMzIvCisKK3doaWNoIG1lYW5zIHRoYXQgdGhlIGxpYjMyIGNydGJlZ2luLm8gd2lsbCBiZSBmb3VuZCBhbmQgdGhlIGxpYjY0IG9uZXMKK3dpbGwgbm90IHdoaWNoIGxlYWRzIHRvIGNvbXBpbGVyIGZhaWx1cmVzLgorCitUaGlzIHBhdGNoIGluamVjdHMgYSBtdWx0aWxpYiB2ZXJzaW9uIG9mIHRoYXQgcGF0aCBmaXJzdCBzbyB0aGUgbGliNjQKK2JpbmFyaWVzIGNhbiBiZSBmb3VuZCBmaXJzdC4gV2l0aCB0aGlzIGNoYW5nZSB0aGUgc2VhcmNoIHBhdGggYmVjb21lczoKKworPHN5c3Jvb3Q+L2xpYjMyLy4uL2xpYjY0L21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L3Vzci9saWIzMi8uLi9saWI2NC9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi91c3IvbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L2xpYjMyLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitSUCAyMDE1LzcvMzEKKworSW5kZXg6IGdjYy01LjIuMC9nY2MvZ2NjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNS4yLjAub3JpZy9nY2MvZ2NjLmMKKysrKyBnY2MtNS4yLjAvZ2NjL2djYy5jCitAQCAtMjMwNSw3ICsyMzA1LDcgQEAgZm9yX2VhY2hfcGF0aCAoY29uc3Qgc3RydWN0IHBhdGhfcHJlZml4CisgICAgICAgaWYgKHBhdGggPT0gTlVMTCkKKyAJeworIAkgIGxlbiA9IHBhdGhzLT5tYXhfbGVuICsgZXh0cmFfc3BhY2UgKyAxOworLQkgIGxlbiArPSBNQVggKE1BWCAoc3VmZml4X2xlbiwgbXVsdGlfb3NfZGlyX2xlbiksIG11bHRpYXJjaF9sZW4pOworKwkgIGxlbiArPSBNQVggKChzdWZmaXhfbGVuICsgbXVsdGlfb3NfZGlyX2xlbiksIG11bHRpYXJjaF9sZW4pOworIAkgIHBhdGggPSBYTkVXVkVDIChjaGFyLCBsZW4pOworIAl9CisgCitAQCAtMjMxNyw2ICsyMzE3LDMzIEBAIGZvcl9lYWNoX3BhdGggKGNvbnN0IHN0cnVjdCBwYXRoX3ByZWZpeAorIAkgIC8qIExvb2sgZmlyc3QgaW4gTUFDSElORS9WRVJTSU9OIHN1YmRpcmVjdG9yeS4gICovCisgCSAgaWYgKCFza2lwX211bHRpX2RpcikKKyAJICAgIHsKKysJICAgICAgaWYgKCEocGwtPm9zX211bHRpbGliID8gc2tpcF9tdWx0aV9vc19kaXIgOiBza2lwX211bHRpX2RpcikpCisrCSAgICAgICAgeworKwkgICAgICAgICAgY29uc3QgY2hhciAqdGhpc19tdWx0aTsKKysJICAgICAgICAgIHNpemVfdCB0aGlzX211bHRpX2xlbjsKKysKKysJICAgICAgICAgIGlmIChwbC0+b3NfbXVsdGlsaWIpCisrCQkgICAgeworKwkJICAgICAgdGhpc19tdWx0aSA9IG11bHRpX29zX2RpcjsKKysJCSAgICAgIHRoaXNfbXVsdGlfbGVuID0gbXVsdGlfb3NfZGlyX2xlbjsKKysJCSAgICB9CisrCSAgICAgICAgICBlbHNlCisrCQkgICAgeworKwkJICAgICAgdGhpc19tdWx0aSA9IG11bHRpX2RpcjsKKysJCSAgICAgIHRoaXNfbXVsdGlfbGVuID0gbXVsdGlfZGlyX2xlbjsKKysJCSAgICB9CisrCisrCSAgICAgICAgICAvKiBMb29rIGluIG11bHRpbGliIE1BQ0hJTkUvVkVSU0lPTiBzdWJkaXJlY3RvcnkgZmlyc3QgKi8KKysJICAgICAgICAgIGlmICh0aGlzX211bHRpX2xlbikKKysJICAgICAgICAgICAgeworKwkJICAgICAgbWVtY3B5IChwYXRoICsgbGVuLCB0aGlzX211bHRpLCB0aGlzX211bHRpX2xlbiArIDEpOworKwkgICAgICAgICAgICAgIG1lbWNweSAocGF0aCArIGxlbiArIHRoaXNfbXVsdGlfbGVuLCBtdWx0aV9zdWZmaXgsIHN1ZmZpeF9sZW4gKyAxKTsKKysJICAgICAgICAgICAgICByZXQgPSBjYWxsYmFjayAocGF0aCwgY2FsbGJhY2tfaW5mbyk7CisrCSAgICAgICAgICAgICAgICBpZiAocmV0KQorKwkJICAgICAgICAgIGJyZWFrOworKwkgICAgICAgICAgICB9CisrCSAgICAgICAgfQorKworIAkgICAgICBtZW1jcHkgKHBhdGggKyBsZW4sIG11bHRpX3N1ZmZpeCwgc3VmZml4X2xlbiArIDEpOworIAkgICAgICByZXQgPSBjYWxsYmFjayAocGF0aCwgY2FsbGJhY2tfaW5mbyk7CisgCSAgICAgIGlmIChyZXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY5MWY1OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLmluYwpAQCAtMCwwICsxLDEyMCBAQAorcmVxdWlyZSBnY2MtY29tbW9uLmluYworCisjIFRoaXJkIGRpZ2l0IGluIFBWIHNob3VsZCBiZSBpbmNyZW1lbnRlZCBhZnRlciBhIG1pbm9yIHJlbGVhc2UKKworUFYgPSAiNS4yLjAiCisKKyNTTkFQID0gIjUtMjAxNTA0MDUiCisKKyMgQklOViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgdG8gYSByZXZpc2lvbiBhZnRlciBhIG1pbm9yIGdjYyByZWxlYXNlCisKK0JJTlYgPSAiNS4yLjAiCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L2djYy01LjI6JHtGSUxFX0RJUk5BTUV9L2djYy01LjIvYmFja3BvcnQ6IgorCitERVBFTkRTID0rICJtcGZyIGdtcCBsaWJtcGMgemxpYiIKK05BVElWRURFUFMgPSAibXBmci1uYXRpdmUgZ21wLW5hdGl2ZSBsaWJtcGMtbmF0aXZlIHpsaWItbmF0aXZlIgorCitMSUNFTlNFID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uICYgR1BMdjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgIGZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgZmlsZTovL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgZmlsZTovL0NPUFlJTkczLkxJQjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYgXAorICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgIGZpbGU6Ly9DT1BZSU5HLlJVTlRJTUU7bWQ1PWZlNjBkODcwNDg1NjdkNGZlOGM4YTBlZDI0NDhiY2M4IFwKKyIKKyNCQVNFVVJJID0gImh0dHA6Ly93d3cubmV0Z3VsbC5jb20vZ2NjL3NuYXBzaG90cy8ke1NOQVB9L2djYy0ke1NOQVB9LnRhci5iejIiCitCQVNFVVJJID0gIiR7R05VX01JUlJPUn0vZ2NjL2djYy0ke1BWfS9nY2MtJHtQVn0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNTFiY2ZlYjNkYTdkZDRjNjIzZTI3MjA3ZWQ0MzQ2NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1ZjgzNWIwNGI1ZjdkZDRmNGQyZGM5NjE5MGVjMTYyMWI4ZDg5ZjJkYzZmNjM4ZjlmOGJjMWIxMDE0YmE4Y2FkIgorCitTUkNfVVJJID0gIlwKKyAgICAgICAgICAgJHtCQVNFVVJJfSBcCisgICAgICAgICAgICR7QkFDS1BPUlRTfSBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi11Y2xpYmMtY29uZi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEwLWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTEtZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTItZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMy02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE0LW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTctVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOC1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE5LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjAtY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMS1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjItRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIzLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI0LURpc2FibGUtc2R0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjUtbGlidG9vbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI2LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNy1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjgtQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI5LWV4cG9ydC1DUFAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMC1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzEtRGlzYWJsZS10aGUtTVVMVElMSUJfT1NESVJOQU1FUy1hbmQtb3RoZXItbXVsdGlsaWItby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMyLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzMtZ2NjLTQuOC13b24tdC1idWlsZC13aXRoLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM0LURvbi10LXNlYXJjaC1ob3N0LWRpcmVjdG9yeS1kdXJpbmctcmVsaW5rLWlmLWluc3RfcHIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzNS1Eb250LWxpbmstdGhlLXBsdWdpbnMtd2l0aC1saWJnb21wLWV4cGxpY2l0bHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzNi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzctcHI2NTc3OS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM4LWZpeC1nKystc3lzcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM5LWxpYmNjMS1maXgtbGliY2MxLXMtaW5zdGFsbC1wYXRoLWFuZC1ycGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDQwLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDQxLWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaCBcCisgICAgICAgICAgIgorCitCQUNLUE9SVFMgPSAiIgorI1MgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfS9nY2MtJHtTTkFQfSIKK1MgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfS9nY2MtJHtQVn0iCitCID0gIiR7V09SS0RJUn0vZ2NjLSR7UFZ9L2J1aWxkLiR7SE9TVF9TWVN9LiR7VEFSR0VUX1NZU30iCisKKyMgTGFuZ3VhZ2UgT3ZlcnJpZGVzCitGT1JUUkFOID0gIiIKK0pBVkEgPSAiIgorCitMVE8gPSAiLS1lbmFibGUtbHRvIgorCitFWFRSQV9PRUNPTkZfQkFTRSA9ICJcCisgICAgJHtMVE99IFwKKyAgICAtLWVuYWJsZS1saWJzc3AgXAorICAgIC0tZGlzYWJsZS1ib290c3RyYXAgXAorICAgIC0tZGlzYWJsZS1saWJtdWRmbGFwIFwKKyAgICAtLXdpdGgtc3lzdGVtLXpsaWIgXAorICAgIC0td2l0aC1saW5rZXItaGFzaC1zdHlsZT0ke0xJTktFUl9IQVNIX1NUWUxFfSBcCisgICAgLS1lbmFibGUtbGlua2VyLWJ1aWxkLWlkIFwKKyAgICAtLXdpdGgtcHBsPW5vIFwKKyAgICAtLXdpdGgtY2xvb2c9bm8gXAorICAgIC0tZW5hYmxlLWNoZWNraW5nPXJlbGVhc2UgXAorICAgIC0tZW5hYmxlLWNoZWFkZXJzPWNfZ2xvYmFsIFwKKyIKKworRVhUUkFfT0VDT05GX0lOSVRJQUwgPSAiXAorICAgIC0tZGlzYWJsZS1saWJtdWRmbGFwIFwKKyAgICAtLWRpc2FibGUtbGliZ29tcCBcCisgICAgLS1kaXNhYmxlLWxpYnNzcCBcCisgICAgLS1kaXNhYmxlLWxpYnF1YWRtYXRoIFwKKyAgICAtLXdpdGgtc3lzdGVtLXpsaWIgXAorICAgIC0tZGlzYWJsZS1sdG8gXAorICAgIC0tZGlzYWJsZS1wbHVnaW4gXAorICAgIC0tZW5hYmxlLWRlY2ltYWwtZmxvYXQ9bm8gXAorIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWRpc2FibGUtZGVjaW1hbC1mbG9hdCAiCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLWd4eC1pbmNsdWRlLWRpcj0vbm90L2V4aXN0e3RhcmdldF9pbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcCisgICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzc2NmY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gYTBmZWUwY2VlM2Q0YmQ0YWFiMWUzYThlMDQ0NDZmOTlkOTE4YzRmZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjM3OjExICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDEvMzVdIGdjYy00LjMuMTogQVJDSF9GTEFHU19GT1JfVEFSR0VUCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBjb25maWd1cmUgICAgfCAyICstCisgY29uZmlndXJlLmFjIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA3NjE2Zjg4Li41MGU3Y2JjIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC03NDY0LDcgKzc0NjQsNyBAQCBmaQorICMgZm9yIHRhcmdldF9hbGlhcyBhbmQgZ2NjIGRvZXNuJ3QgbWFuYWdlIGl0IGNvbnNpc3RlbnRseS4KKyB0YXJnZXRfY29uZmlnYXJncz0iLS1jYWNoZS1maWxlPS4vY29uZmlnLmNhY2hlICR7dGFyZ2V0X2NvbmZpZ2FyZ3N9IgorIAorLUZMQUdTX0ZPUl9UQVJHRVQ9CisrRkxBR1NfRk9SX1RBUkdFVD0iJEFSQ0hfRkxBR1NfRk9SX1RBUkdFVCIKKyBjYXNlICIgJHRhcmdldF9jb25maWdkaXJzICIgaW4KKyAgKiIgbmV3bGliICIqKQorICAgY2FzZSAiICR0YXJnZXRfY29uZmlnYXJncyAiIGluCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA4Yzg1YTA4Li5mMzRhZjdlIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zMTA0LDcgKzMxMDQsNyBAQCBmaQorICMgZm9yIHRhcmdldF9hbGlhcyBhbmQgZ2NjIGRvZXNuJ3QgbWFuYWdlIGl0IGNvbnNpc3RlbnRseS4KKyB0YXJnZXRfY29uZmlnYXJncz0iLS1jYWNoZS1maWxlPS4vY29uZmlnLmNhY2hlICR7dGFyZ2V0X2NvbmZpZ2FyZ3N9IgorIAorLUZMQUdTX0ZPUl9UQVJHRVQ9CisrRkxBR1NfRk9SX1RBUkdFVD0iJEFSQ0hfRkxBR1NfRk9SX1RBUkdFVCIKKyBjYXNlICIgJHRhcmdldF9jb25maWdkaXJzICIgaW4KKyAgKiIgbmV3bGliICIqKQorICAgY2FzZSAiICR0YXJnZXRfY29uZmlnYXJncyAiIGluCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDAyLXVjbGliYy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZDMzYTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDAyLXVjbGliYy1jb25mLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gNzYzNTI0OGE0YzliNTFkNzIzZDcyMWFjYWVlYjVmMmYxMTk1Nzk4NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjM4OjI1ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDIvMzVdIHVjbGliYy1jb25mCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoIHwgNCArKysrCisgbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgICAgIHwgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggYi9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKK2luZGV4IDYwYjA0OTcuLjZkYzdlYWQgMTAwNzU1CistLS0gYS9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKKysrKyBiL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAorQEAgLTEwNiw2ICsxMDYsMTAgQEAgaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtZ251IF0KKyAgdGhlbgorICAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisrZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC11Y2xpYmMgXQorKyB0aGVuCisrICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorKyAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKyBlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgXSA7IHRoZW4KKyAgIG1ha2UgYm9vdHN0cmFwIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsIHx8IGV4aXQgMQorZGlmZiAtLWdpdCBhL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnIGIvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKK2luZGV4IDc0M2Q5NTEuLmFlNGVhNjAgMTAwNzU1CistLS0gYS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworKysrIGIvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKK0BAIC02MDMsNyArNjAzLDcgQEAgaG9zdF9vcz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisgCisgIyBUcmFuc2Zvcm0gbGludXgqIHRvICotKi1saW51eC1nbnUqLCB0byBzdXBwb3J0IG9sZCBjb25maWd1cmUgc2NyaXB0cy4KKyBjYXNlICRob3N0X29zIGluCistbGludXgtZ251KikgOzsKKytsaW51eC1nbnUqfGxpbnV4LXVjbGliYyopIDs7CisgbGludXgqKSBob3N0PWBlY2hvICRob3N0IHwgc2VkICdzL15cKC4qLS4qLWxpbnV4XClcKC4qXCkkL1wxLWdudVwyLydgCisgZXNhYworIAorQEAgLTEyNDcsNyArMTI0Nyw3IEBAIGxpbnV4LWdudW9sZGxkKiB8IGxpbnV4LWdudWFvdXQqIHwgbGludXgtZ251Y29mZiopCisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIHZlcnNpb25fdHlwZT1saW51eAorICAgbmVlZF9saWJfcHJlZml4PW5vCisgICBuZWVkX3ZlcnNpb249bm8KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2EyNTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2gKQEAgLTAsMCArMSw4NyBAQAorRnJvbSAzYWVlNThhZDA0M2FmMzNhYjAwYzljZDdiYzg4ZjBjYWRlODNmMjM2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDA6MTIgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMy8zNV0gZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYyB8IDUgKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmggIHwgOSArKysrKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmggIHwgOSArKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCitpbmRleCA2ZGE1ZjIyLi4yZjg1YzJmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYworQEAgLTI2Myw1ICsyNjMsMTAgQEAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCisgI2lmZGVmIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVAorICNkZWZpbmUgX0dMSUJDWFhfTERCTF9DT01QQVQoZGJsLCBsZGJsKSBcCisgICBleHRlcm4gIkMiIHZvaWQgbGRibCAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKGFsaWFzICgjZGJsKSkpCisrI2lmZGVmIF9fVUNMSUJDX18KKysvLyBUaGlzIGlzIGJlY2F1c2UgX19jX2xvY2FsZSBpcyBvZiB0eXBlIF9fY3R5cGVfdG91cGxvd190KiB3aGljaCBpcyBzaG9ydCBvbiB1Y2xpYmMuIGZvciBnbGliYyBpdHMgaW50KgorK19HTElCQ1hYX0xEQkxfQ09NUEFUKF9aU3QxNF9fY29udmVydF90b192SWRFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQcywgX1pTdDE0X19jb252ZXJ0X3RvX3ZJZUV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BzKTsKKysjZWxzZQorIF9HTElCQ1hYX0xEQkxfQ09NUEFUKF9aU3QxNF9fY29udmVydF90b192SWRFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQaSwgX1pTdDE0X19jb252ZXJ0X3RvX3ZJZUV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BpKTsKKysjZW5kaWYKKyAjZW5kaWYgLy8gX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCitpbmRleCBlZTNlZjg2Li43ZmQ1NDg1IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKK0BAIC00MCwxMyArNDAsMjIgQEAKKyAKKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNlbmRpZgorKworICNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgMAorIAorIG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQorIHsKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrICB0eXBlZGVmIF9fY3R5cGVfdG91cGxvd190KglfX2NfbG9jYWxlOworKyNlbHNlCisgICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworKyNlbmRpZgorIAorICAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgZG91YmxlIGFuZCBsb25nIGRvdWJsZSB0byBzdHJpbmcgYW5kCisgICAvLyByZXR1cm4gbGVuZ3RoIG9mIHN0cmluZy4gIElmIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmggYi9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKK2luZGV4IGZkNTJiNzMuLjI2MjdjZjMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAorQEAgLTMzLDYgKzMzLDExIEBACisgCisgLy8gSW5mb3JtYXRpb24gYXMgZ2xlYW5lZCBmcm9tIC91c3IvaW5jbHVkZS9jdHlwZS5oCisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjZW5kaWYKKysKKyBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKKyB7CisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KK0BAIC00MSw3ICs0NiwxMSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorICAgc3RydWN0IGN0eXBlX2Jhc2UKKyAgIHsKKyAgICAgLy8gTm9uLXN0YW5kYXJkIHR5cGVkZWZzLgorKyNpZmRlZiBfX1VDTElCQ19fCisrICAgIHR5cGVkZWYgY29uc3QgX19jdHlwZV90b3VwbG93X3QqCV9fdG9fdHlwZTsKKysjZWxzZQorICAgICB0eXBlZGVmIGNvbnN0IGludCogCQlfX3RvX3R5cGU7CisrI2VuZGlmCisgCisgICAgIC8vIE5COiBPZmZzZXRzIGludG8gY3R5cGU8Y2hhcj46Ol9NX3RhYmxlIGZvcmNlIGEgcGFydGljdWxhciBzaXplCisgICAgIC8vIG9uIHRoZSBtYXNrIHR5cGUuIEJlY2F1c2Ugb2YgdGhpcywgd2UgZG9uJ3QgdXNlIGFuIGVudW0uCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzk0N2E3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoCkBAIC0wLDAgKzEsMjg2MiBAQAorRnJvbSA5ZjczZTA2MzE1Yzk0NjI5ZmI5MDJiZDk0MjE5NjY3Y2Y4MzA3YjhmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDE6MzkgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNC8zNV0gdWNsaWJjLWxvY2FsZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDM3ICsrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgNjMgKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8IDE2MCArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oICAgICAgIHwgMTE3ICsrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjICAgICAgICB8IDMwOCArKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjICAgICAgICB8ICA4MCArKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8IDMwMCArKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyAgICAgICB8IDEwMCArKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8IDExOCArKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgICAgICAgfCA2OTIgKysrKysrKysrKysrKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAxNjAgKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8IDQwNiArKysrKysrKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICB8ICA2OCArKworIGxpYnN0ZGMrKy12My9jb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDc1ICsrKworIGxpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oICAgICAgIHwgICAyICsKKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIgICAgICAgICAgICAgICAgICB8ICAgMiArCisgMTYgZmlsZXMgY2hhbmdlZCwgMjY4OCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNCBiL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKK2luZGV4IGExZTMwMWYuLjBmZTkzMjYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CisrKysgYi9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CitAQCAtMTk4Myw2ICsxOTgzLDkgQEAgQUNfREVGVU4oW0dMSUJDWFhfRU5BQkxFX0NMT0NBTEVdLCBbCisgICAjIERlZmF1bHQgdG8gImdlbmVyaWMiLgorICAgaWYgdGVzdCAkZW5hYmxlX2Nsb2NhbGVfZmxhZyA9IGF1dG87IHRoZW4KKyAgICAgY2FzZSAke3RhcmdldF9vc30gaW4KKysgICAgICAqLXVjbGliYyopCisrICAgICAgICBlbmFibGVfY2xvY2FsZV9mbGFnPXVjbGliYworKyAgICAgICAgOzsKKyAgICAgICBsaW51eCogfCBnbnUqIHwga2ZyZWVic2QqLWdudSB8IGtuZXRic2QqLWdudSkKKyAJZW5hYmxlX2Nsb2NhbGVfZmxhZz1nbnUKKyAJOzsKK0BAIC0yMTY3LDYgKzIxNzAsNDAgQEAgQUNfREVGVU4oW0dMSUJDWFhfRU5BQkxFX0NMT0NBTEVdLCBbCisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgQUNfTVNHX1JFU1VMVCh1Y2xpYmMpCisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgQUNfQ0hFQ0tfUFJPRyhjaGVja19tc2dmbXQsIG1zZ2ZtdCwgeWVzLCBubykKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysgICAgICBBQ19TVUJTVChnbGliY3h4X01PRklMRVMpCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9QT0ZJTEVTKQorKworKyAgICAgIENMT0NBTEVfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrICAgICAgQ0xPQ0FMRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworKyAgICAgIENDT0xMQVRFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKyAgICAgIENDVFlQRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysgICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKyAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysgICAgICA7OworICAgZXNhYworIAorICAgIyBUaGlzIGlzIHdoZXJlIHRoZSB0ZXN0c3VpdGUgbG9va3MgZm9yIGxvY2FsZSBjYXRhbG9ncywgdXNpbmcgdGhlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMmFlM2U0YQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitAQCAtMCwwICsxLDYzIEBACisrLy8gUHJvdG90eXBlcyBmb3IgR0xJQkMgdGhyZWFkIGxvY2FsZSBfXy1wcmVmaXhlZCBmdW5jdGlvbnMgLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8gV3JpdHRlbiBieSBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorKyNpbmNsdWRlIDxjbG9jYWxlPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGNsZWFuIHRoaXMgdXAKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKworK2V4dGVybiAiQyIgX190eXBlb2YobmxfbGFuZ2luZm9fbCkgX19ubF9sYW5naW5mb19sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyY29sbF9sKSBfX3N0cmNvbGxfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmZ0aW1lX2wpIF9fc3RyZnRpbWVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZF9sKSBfX3N0cnRvZF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9mX2wpIF9fc3RydG9mX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2xkX2wpIF9fc3RydG9sZF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyeGZybV9sKSBfX3N0cnhmcm1fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKG5ld2xvY2FsZSkgX19uZXdsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihmcmVlbG9jYWxlKSBfX2ZyZWVsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihkdXBsb2NhbGUpIF9fZHVwbG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKytleHRlcm4gIkMiIF9fdHlwZW9mKGlzd2N0eXBlX2wpIF9faXN3Y3R5cGVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHRvd2xvd2VyX2wpIF9fdG93bG93ZXJfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHRvd3VwcGVyX2wpIF9fdG93dXBwZXJfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2NvbGxfbCkgX193Y3Njb2xsX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3NmdGltZV9sKSBfX3djc2Z0aW1lX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3N4ZnJtX2wpIF9fd2NzeGZybV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2N0eXBlX2wpIF9fd2N0eXBlX2w7CisrI2VuZGlmCisrCisrI2VuZGlmIC8vIEdMSUJDIDIuMyBhbmQgbGF0ZXIKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41MDgxZGMxCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0wLDAgKzEsMTYwIEBACisrLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8Y2Vycm5vPiAgLy8gRm9yIGVycm5vCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8c3RkZXhjZXB0PgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19zdHJ0b2xfbChTLCBFLCBCLCBMKSAgICAgIHN0cnRvbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b3VsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvdWwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG9sbF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b2xsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvdWxsX2woUywgRSwgQiwgTCkgICAgc3RydG91bGwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCisrI2RlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorKyNkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCisrI3dhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKysjZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCisrI2RlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGZsb2F0JiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19mOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2Q7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgbG9uZyBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fbGQ7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdm9pZAorKyAgbG9jYWxlOjpmYWNldDo6X1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorKwkJCQkgICAgX19jX2xvY2FsZSBfX29sZCkKKysgIHsKKysgICAgX19jbG9jID0gX19uZXdsb2NhbGUoMSA8PCBMQ19BTEwsIF9fcywgX19vbGQpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIGlmICghX19jbG9jKQorKyAgICAgIHsKKysJLy8gVGhpcyBuYW1lZCBsb2NhbGUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyBPUy4KKysJX190aHJvd19ydW50aW1lX2Vycm9yKF9fTigibG9jYWxlOjpmYWNldDo6X1NfY3JlYXRlX2NfbG9jYWxlICIKKysJCQkgICAgICAibmFtZSBub3QgdmFsaWQiKSk7CisrICAgICAgfQorKyNlbmRpZgorKyAgfQorKworKyAgdm9pZAorKyAgbG9jYWxlOjpmYWNldDo6X1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICB7CisrICAgIGlmIChfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisrICAgICAgX19mcmVlbG9jYWxlKF9fY2xvYyk7CisrICB9CisrCisrICBfX2NfbG9jYWxlCisrICBsb2NhbGU6OmZhY2V0OjpfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICB7IHJldHVybiBfX2R1cGxvY2FsZShfX2Nsb2MpOyB9CisrfSAvLyBuYW1lc3BhY2Ugc3RkCisrCisrbmFtZXNwYWNlIF9fZ251X2N4eAorK3sKKysgIGNvbnN0IGNoYXIqIGNvbnN0IGNhdGVnb3J5X25hbWVzWzYgKyBfR0xJQkNYWF9OVU1fQ0FURUdPUklFU10gPQorKyAgICB7CisrICAgICAgIkxDX0NUWVBFIiwKKysgICAgICAiTENfTlVNRVJJQyIsCisrICAgICAgIkxDX1RJTUUiLAorKyAgICAgICJMQ19DT0xMQVRFIiwKKysgICAgICAiTENfTU9ORVRBUlkiLAorKyAgICAgICJMQ19NRVNTQUdFUyIsCisrI2lmIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTICE9IDAKKysgICAgICAiTENfUEFQRVIiLAorKyAgICAgICJMQ19OQU1FIiwKKysgICAgICAiTENfQUREUkVTUyIsCisrICAgICAgIkxDX1RFTEVQSE9ORSIsCisrICAgICAgIkxDX01FQVNVUkVNRU5UIiwKKysgICAgICAiTENfSURFTlRJRklDQVRJT04iCisrI2VuZGlmCisrICAgIH07CisrfQorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICBjb25zdCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4OjpjYXRlZ29yeV9uYW1lczsKKyt9ICAvLyBuYW1lc3BhY2Ugc3RkCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmRhMDdjMWYKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtMCwwICsxLDExNyBAQAorKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2lmbmRlZiBfQ19MT0NBTEVfSAorKyNkZWZpbmUgX0NfTE9DQUxFX0ggMQorKworKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKysKKysjaW5jbHVkZSA8Y3N0cmluZz4gICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnN0cmxlbgorKyNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c25wcmludGYgb3Igc3RkOjpzcHJpbnRmCisrI2luY2x1ZGUgPGNsb2NhbGU+CisrI2luY2x1ZGUgPGxhbmdpbmZvLmg+CQkvLyBGb3IgY29kZWN2dAorKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyNpbmNsdWRlIDxpY29udi5oPgkJLy8gRm9yIGNvZGVjdnQgdXNpbmcgaWNvbnYsIGljb252X3QKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjaW5jbHVkZSA8bGliaW50bC5oPiAJCS8vIEZvciBtZXNzYWdlcworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHdoYXQgaXMgX0dMSUJDWFhfQ19MT0NBTEVfR05VIGZvcgorKyNlbmRpZgorKyNkZWZpbmUgX0dMSUJDWFhfQ19MT0NBTEVfR05VIDEKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggY2F0ZWdvcmllcworKyNlbmRpZgorKy8vICNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgNgorKyNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgMAorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrbmFtZXNwYWNlIF9fZ251X2N4eAorK3sKKysgIGV4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKyt9CisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgdHlwZWRlZiBfX2xvY2FsZV90CQlfX2NfbG9jYWxlOworKyNlbHNlCisrICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworKyNlbmRpZgorKworKyAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorKyAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworKyAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKysgIC8vIGJlIGF2b2lkZWQuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CisrICAgIGludAorKyAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LAorKwkJICAgICBjb25zdCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCisrCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCisrICAgIHsKKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjKQorKyAgICB7CisrIyBpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX29sZCkgKyAxXTsKKysgICAgICBzdGQ6OnN0cmNweShfX3NhdiwgX19vbGQpOworKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgIkMiKTsKKysjIGVuZGlmCisrI2VuZGlmCisrCisrICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjpzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKyAgICAgIF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19vbGQpOworKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworKyNlbmRpZgorKyAgICAgIHJldHVybiBfX3JldDsKKysgICAgfQorK30KKysKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjY0YWE5NjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMzA4IEBACisrLy8gc3RkOjpjb2RlY3Z0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4xLjUgLSBUZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0CisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGNzdGRsaWI+ICAvLyBGb3IgTUJfQ1VSX01BWAorKyNpbmNsdWRlIDxjbGltaXRzPiAgLy8gRm9yIE1CX0xFTl9NQVgKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKKysJIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorKwkgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKKysJIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorKyAgeworKyAgICByZXN1bHQgX19yZXQgPSBvazsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIHdjc25ydG9tYnMgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2UgZmFsbCBiYWNrIHRvIHdjcnRvbWIgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IHdjc25ydG9tYnMgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87CisrCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKKysJICYmIF9fcmV0ID09IG9rOykKKysgICAgICB7CisrCWNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kID0gd21lbWNocihfX2Zyb21fbmV4dCwgTCdcMCcsCisrCQkJCQkJICAgICAgX19mcm9tX2VuZCAtIF9fZnJvbV9uZXh0KTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2Zyb21fZW5kOworKworKwlfX2Zyb20gPSBfX2Zyb21fbmV4dDsKKysJY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjc25ydG9tYnMoX190b19uZXh0LCAmX19mcm9tX25leHQsCisrCQkJCQkgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAorKwkJCQkJIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIHdjcnRvbWIuCisrCSAgICBmb3IgKDsgX19mcm9tIDwgX19mcm9tX25leHQ7ICsrX19mcm9tKQorKwkgICAgICBfX3RvX25leHQgKz0gd2NydG9tYihfX3RvX25leHQsICpfX2Zyb20sICZfX3RtcF9zdGF0ZSk7CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCA9IGVycm9yOworKwkgIH0KKysJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQorKwkgIHsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICB9CisrCisrCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCisrCSAgeworKwkgICAgZXh0ZXJuX3R5cGUgX19idWZbTUJfTEVOX01BWF07CisrCSAgICBfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCSAgICBjb25zdCBzaXplX3QgX19jb252ID0gd2NydG9tYihfX2J1ZiwgKl9fZnJvbV9uZXh0LCAmX190bXBfc3RhdGUpOworKwkgICAgaWYgKF9fY29udiA+IHN0YXRpY19jYXN0PHNpemVfdD4oX190b19lbmQgLSBfX3RvX25leHQpKQorKwkgICAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCW1lbWNweShfX3RvX25leHQsIF9fYnVmLCBfX2NvbnYpOworKwkJX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkJX190b19uZXh0ICs9IF9fY29udjsKKysJCSsrX19mcm9tX25leHQ7CisrCSAgICAgIH0KKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKysJaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKKysJaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisrICB7CisrICAgIHJlc3VsdCBfX3JldCA9IG9rOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBzdG9yZSBhIEwnXDAnIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgICBmb3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOworKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kCisrCSAmJiBfX3JldCA9PSBvazspCisrICAgICAgeworKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZDsKKysJX19mcm9tX2NodW5rX2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4obWVtY2hyKF9fZnJvbV9uZXh0LCAnXDAnLAorKwkJCQkJCQkJICBfX2Zyb21fZW5kCisrCQkJCQkJCQkgIC0gX19mcm9tX25leHQpKTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2Zyb21fZW5kOworKworKwlfX2Zyb20gPSBfX2Zyb21fbmV4dDsKKysJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190b19uZXh0LCAmX19mcm9tX25leHQsCisrCQkJCSAgIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwKKysJCQkJICAgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gbWJydG93Yy4KKysJICAgIGZvciAoOzsgKytfX3RvX25leHQsIF9fZnJvbSArPSBfX2NvbnYpCisrCSAgICAgIHsKKysJCV9fY29udiA9IG1icnRvd2MoX190b19uZXh0LCBfX2Zyb20sIF9fZnJvbV9lbmQgLSBfX2Zyb20sCisrCQkJCSAmX190bXBfc3RhdGUpOworKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKQorKwkJICAgIHx8IF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSkKKysJCSAgYnJlYWs7CisrCSAgICAgIH0KKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tOworKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgPSBlcnJvcjsKKysJICB9CisrCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKysJICB7CisrCSAgICAvLyBJdCBpcyB1bmNsZWFyIHdoYXQgdG8gcmV0dXJuIGluIHRoaXMgY2FzZSAoc2VlIERSIDM4MikuCisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgfQorKworKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorKwkgIHsKKysJICAgIGlmIChfX3RvX25leHQgPCBfX3RvX2VuZCkKKysJICAgICAgeworKwkJLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKKysJCV9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJCSsrX19mcm9tX25leHQ7CisrCQkqX190b19uZXh0KysgPSBMJ1wwJzsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKQorKyAgeworKyAgICAvLyBYWFggVGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGVuY29kaW5nIGlzCisrICAgIC8vIHN0YXRlbGVzcyBhbmQgaXMgZWl0aGVyIHNpbmdsZS1ieXRlIG9yIHZhcmlhYmxlLXdpZHRoLgorKyAgICBpbnQgX19yZXQgPSAwOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysgICAgaWYgKE1CX0NVUl9NQVggPT0gMSkKKysgICAgICBfX3JldCA9IDE7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBpbnQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MuCisrICAgIGludCBfX3JldCA9IE1CX0NVUl9NQVg7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBpbnQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19sZW5ndGgoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKysJICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdAorKyAgeworKyAgICBpbnQgX19yZXQgPSAwOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBhZHZhbmNlIHBhc3QgaXQgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCisrCisrICAgIC8vIEEgZHVtbXkgaW50ZXJuYWwgYnVmZmVyIGlzIG5lZWRlZCBpbiBvcmRlciBmb3IgbWJzbnJ0b2N3cyB0byBjb25zaWRlcgorKyAgICAvLyBpdHMgZm91cnRoIHBhcmFtZXRlciAoaXQgd291bGRuJ3Qgd2l0aCBOVUxMIGFzIGZpcnN0IHBhcmFtZXRlcikuCisrICAgIHdjaGFyX3QqIF9fdG8gPSBzdGF0aWNfY2FzdDx3Y2hhcl90Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yod2NoYXJfdCkKKysJCQkJCQkJICAgKiBfX21heCkpOworKyAgICB3aGlsZSAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCisrICAgICAgeworKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZDsKKysJX19mcm9tX2NodW5rX2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4obWVtY2hyKF9fZnJvbSwgJ1wwJywKKysJCQkJCQkJCSAgX19lbmQKKysJCQkJCQkJCSAgLSBfX2Zyb20pKTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2VuZDsKKysKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fdG1wX2Zyb20gPSBfX2Zyb207CisrCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG8sICZfX2Zyb20sCisrCQkJCSAgIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb20sCisrCQkJCSAgIF9fbWF4LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIG1icnRvd2MuCisrCSAgICBmb3IgKF9fZnJvbSA9IF9fdG1wX2Zyb207OyBfX2Zyb20gKz0gX19jb252KQorKwkgICAgICB7CisrCQlfX2NvbnYgPSBtYnJ0b3djKE5VTEwsIF9fZnJvbSwgX19lbmQgLSBfX2Zyb20sCisrCQkJCSAmX190bXBfc3RhdGUpOworKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKQorKwkJICAgIHx8IF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSkKKysJCSAgYnJlYWs7CisrCSAgICAgIH0KKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ICs9IF9fZnJvbSAtIF9fdG1wX2Zyb207CisrCSAgICBicmVhazsKKysJICB9CisrCWlmICghX19mcm9tKQorKwkgIF9fZnJvbSA9IF9fZnJvbV9jaHVua19lbmQ7CisrCisrCV9fcmV0ICs9IF9fZnJvbSAtIF9fdG1wX2Zyb207CisrCV9fbWF4IC09IF9fY29udjsKKysKKysJaWYgKF9fZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorKwkgIHsKKysJICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCisrCSAgICBfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCSAgICArK19fZnJvbTsKKysJICAgICsrX19yZXQ7CisrCSAgICAtLV9fbWF4OworKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYzI2NjRhNworLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworQEAgLTAsMCArMSw4MCBAQAorKy8vIHN0ZDo6Y29sbGF0ZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNC4xLjIgIGNvbGxhdGUgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCisrI2RlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCisrI2RlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBUaGVzZSBhcmUgYmFzaWNhbGx5IGV4dGVuc2lvbnMgdG8gY2hhcl90cmFpdHMsIGFuZCBwZXJoYXBzIHNob3VsZAorKyAgLy8gYmUgcHV0IHRoZXJlIGluc3RlYWQgb2YgaGVyZS4KKysgIHRlbXBsYXRlPD4KKysgICAgaW50CisrICAgIGNvbGxhdGU8Y2hhcj46Ol9NX2NvbXBhcmUoY29uc3QgY2hhciogX19vbmUsIGNvbnN0IGNoYXIqIF9fdHdvKSBjb25zdAorKyAgICB7CisrICAgICAgaW50IF9fY21wID0gX19zdHJjb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHNpemVfdAorKyAgICBjb2xsYXRlPGNoYXI+OjpfTV90cmFuc2Zvcm0oY2hhciogX190bywgY29uc3QgY2hhciogX19mcm9tLAorKwkJCQlzaXplX3QgX19uKSBjb25zdAorKyAgICB7IHJldHVybiBfX3N0cnhmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgaW50CisrICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBhcmUoY29uc3Qgd2NoYXJfdCogX19vbmUsCisrCQkJCSBjb25zdCB3Y2hhcl90KiBfX3R3bykgY29uc3QKKysgICAgeworKyAgICAgIGludCBfX2NtcCA9IF9fd2NzY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisrICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2NtcCAhPSAwKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBzaXplX3QKKysgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fdHJhbnNmb3JtKHdjaGFyX3QqIF9fdG8sIGNvbnN0IHdjaGFyX3QqIF9fZnJvbSwKKysJCQkJICAgc2l6ZV90IF9fbikgY29uc3QKKysgICAgeyByZXR1cm4gX193Y3N4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjk0ZTNhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworQEAgLTAsMCArMSwzMDAgQEAKKysvLyBzdGQ6OmN0eXBlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4xLjEuMiAgY3R5cGUgdmlydHVhbCBmdW5jdGlvbnMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgd2N0eXBlKChTKSkKKysjZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgIHRvd3VwcGVyKChDKSkKKysjZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgIHRvd2xvd2VyKChDKSkKKysjZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKKysgIC8vIHZhcmlvdXMgL2NvbmZpZy9vcy8qIGZpbGVzLgorKyAgdGVtcGxhdGU8PgorKyAgICBjdHlwZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisrICAgIDogY3R5cGU8Y2hhcj4oMCwgZmFsc2UsIF9fcmVmcykKKysgICAgeworKyAgICAgIGlmIChzdGQ6OnN0cmNtcChfX3MsICJDIikgIT0gMCAmJiBzdGQ6OnN0cmNtcChfX3MsICJQT1NJWCIpICE9IDApCisrCXsKKysJICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlKTsKKysJICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUsIF9fcyk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICB0aGlzLT5fTV90b3VwcGVyID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfdG91cHBlcjsKKysJICB0aGlzLT5fTV90b2xvd2VyID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfdG9sb3dlcjsKKysJICB0aGlzLT5fTV90YWJsZSA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX2I7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgY3R5cGU8d2NoYXJfdD46Ol9fd21hc2tfdHlwZQorKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0CisrICB7CisrICAgIF9fd21hc2tfdHlwZSBfX3JldDsKKysgICAgc3dpdGNoIChfX20pCisrICAgICAgeworKyAgICAgIGNhc2Ugc3BhY2U6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgic3BhY2UiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgcHJpbnQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgicHJpbnQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgY250cmw6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiY250cmwiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgdXBwZXI6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgidXBwZXIiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgbG93ZXI6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgibG93ZXIiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgYWxwaGE6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiYWxwaGEiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgcHVuY3Q6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgicHVuY3QiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgeGRpZ2l0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInhkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbG51bToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbG51bSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBncmFwaDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJncmFwaCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJX19yZXQgPSBfX3dtYXNrX3R5cGUoKTsKKysgICAgICB9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX190b3d1cHBlcl9sKF9fYywgX01fY19sb2NhbGVfY3R5cGUpOyB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKyAgICAgIHsKKysgICAgICAgICpfX2xvID0gX190b3d1cHBlcl9sKCpfX2xvLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgICAgICArK19fbG87CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b2xvd2VyKHdjaGFyX3QgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX190b3dsb3dlcl9sKF9fYywgX01fY19sb2NhbGVfY3R5cGUpOyB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKyAgICAgIHsKKysgICAgICAgICpfX2xvID0gX190b3dsb3dlcl9sKCpfX2xvLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgICAgICArK19fbG87CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIGJvb2wKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QKKysgIHsKKysgICAgLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysgICAgLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKKysgICAgY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysgICAgZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKyAgICAgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdCisrCSAgJiYgX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCXsKKysJICBfX3JldCA9IHRydWU7CisrCSAgYnJlYWs7CisrCX0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX2lzKGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdAorKyAgeworKyAgICBmb3IgKDsgX19sbyA8IF9faGk7ICsrX192ZWMsICsrX19sbykKKysgICAgICB7CisrCS8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrCS8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKwljb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKwltYXNrIF9fbSA9IDA7CisrCWZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysJICBpZiAoX19pc3djdHlwZV9sKCpfX2xvLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJICAgIF9fbSB8PSBfTV9iaXRbX19iaXRjdXJdOworKwkqX192ZWMgPSBfX207CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkgJiYgIXRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pKQorKyAgICAgICsrX19sbzsKKysgICAgcmV0dXJuIF9fbG87CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkgJiYgdGhpcy0+ZG9faXMoX19tLCAqX19sbykgIT0gMCkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpXTsgfQorKworKyAgY29uc3QgY2hhcioKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIHdjaGFyX3QqIF9fZGVzdCkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKyAgICAgIHsKKysJKl9fZGVzdCA9IF9NX3dpZGVuW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvKV07CisrCSsrX19sbzsKKysJKytfX2Rlc3Q7CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIGNoYXIKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX25hcnJvdyh3Y2hhcl90IF9fd2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CisrICB7CisrICAgIGlmIChfX3djID49IDAgJiYgX193YyA8IDEyOCAmJiBfTV9uYXJyb3dfb2spCisrICAgICAgcmV0dXJuIF9NX25hcnJvd1tfX3djXTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICBjb25zdCBpbnQgX19jID0gd2N0b2IoX193Yyk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX25hcnJvdyhjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpLCBjaGFyIF9fZGZhdWx0LAorKwkgICAgY2hhciogX19kZXN0KSBjb25zdAorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGlmIChfTV9uYXJyb3dfb2spCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgaWYgKCpfX2xvID49IDAgJiYgKl9fbG8gPCAxMjgpCisrCSAgICAqX19kZXN0ID0gX01fbmFycm93WypfX2xvXTsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7CisrCSAgICAgICpfX2Rlc3QgPSAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrCSAgICB9CisrCSAgKytfX2xvOworKwkgICsrX19kZXN0OworKwl9CisrICAgIGVsc2UKKysgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrCXsKKysJICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICpfX2Rlc3QgPSAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrCSAgKytfX2xvOworKwkgICsrX19kZXN0OworKwl9CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIHZvaWQKKysgIGN0eXBlPHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX2N0eXBlKCkKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICB3aW50X3QgX19pOworKyAgICBmb3IgKF9faSA9IDA7IF9faSA8IDEyODsgKytfX2kpCisrICAgICAgeworKwljb25zdCBpbnQgX19jID0gd2N0b2IoX19pKTsKKysJaWYgKF9fYyA9PSBFT0YpCisrCSAgYnJlYWs7CisrCWVsc2UKKysJICBfTV9uYXJyb3dbX19pXSA9IHN0YXRpY19jYXN0PGNoYXI+KF9fYyk7CisrICAgICAgfQorKyAgICBpZiAoX19pID09IDEyOCkKKysgICAgICBfTV9uYXJyb3dfb2sgPSB0cnVlOworKyAgICBlbHNlCisrICAgICAgX01fbmFycm93X29rID0gZmFsc2U7CisrICAgIGZvciAoc2l6ZV90IF9faiA9IDA7CisrCSBfX2ogPCBzaXplb2YoX01fd2lkZW4pIC8gc2l6ZW9mKHdpbnRfdCk7ICsrX19qKQorKyAgICAgIF9NX3dpZGVuW19fal0gPSBidG93YyhfX2opOworKworKyAgICBmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPD0gMTE7ICsrX19rKQorKyAgICAgIHsKKysJX01fYml0W19fa10gPSBzdGF0aWNfY2FzdDxtYXNrPihfSVNiaXQoX19rKSk7CisrCV9NX3dtYXNrW19fa10gPSBfTV9jb252ZXJ0X3RvX3dtYXNrKF9NX2JpdFtfX2tdKTsKKysgICAgICB9CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgfQorKyNlbmRpZiAvLyAgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjEzNTk0ZDkKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCitAQCAtMCwwICsxLDEwMCBAQAorKy8vIHN0ZDo6bWVzc2FnZXMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjcuMS4yICBtZXNzYWdlcyB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBnZXR0ZXh0IHN0dWZmCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrZXh0ZXJuICJDIiBjaGFyICpfX2RjZ2V0dGV4dChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJCSAgICAgY29uc3QgY2hhciAqbXNnaWQsIGludCBjYXRlZ29yeSk7CisrI3VuZGVmIGdldHRleHQKKysjZGVmaW5lIGdldHRleHQobXNnaWQpIF9fZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjZWxzZQorKyN1bmRlZiBnZXR0ZXh0CisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFNwZWNpYWxpemF0aW9ucy4KKysgIHRlbXBsYXRlPD4KKysgICAgc3RyaW5nCisrICAgIG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZyYgX19kZmF1bHQpIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpKTsKKysgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7CisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZWxzZQorKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZW5kaWYKKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB3c3RyaW5nCisrICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHdzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorKyAgICB7CisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfbWVzc2FnZXMpOworKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVsc2UKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVuZGlmCisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xNDI0MDc4CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtMCwwICsxLDExOCBAQAorKy8vIHN0ZDo6bWVzc2FnZXMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjcuMS4yICBtZXNzYWdlcyBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrZXh0ZXJuICJDIiBjaGFyICpfX3RleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CisrZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJCSAgY29uc3QgY2hhciAqZGlybmFtZSk7CisrI2Vsc2UKKysjdW5kZWYgX190ZXh0ZG9tYWluCisrI3VuZGVmIF9fYmluZHRleHRkb21haW4KKysjZGVmaW5lIF9fdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBfX2JpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorKyNlbmRpZgorKworKyAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKHNpemVfdCBfX3JlZnMpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2dldF9jX2xvY2FsZSgpKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICAgeyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorKwkJCQlzaXplX3QgX19yZWZzKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoX19zKQorKyAgICAgeworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysgICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZworKyAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAorKwkJCSAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAorKyAgICB7CisrICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworKyAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOworKyAgICB9CisrCisrICAvLyBWaXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIG1lc3NhZ2VzPF9DaGFyVD46On5tZXNzYWdlcygpCisrICAgIHsKKysgICAgICBpZiAoX01fbmFtZV9tZXNzYWdlcyAhPSBfU19nZXRfY19uYW1lKCkpCisrCWRlbGV0ZSBbXSBfTV9uYW1lX21lc3NhZ2VzOworKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywKKysJCQkgICAgICBjb25zdCBsb2NhbGUmKSBjb25zdAorKyAgICB7CisrICAgICAgLy8gTm8gZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSwgYXNzdW1lIHRoZSBjYXRhbG9nIGV4aXN0cyBhbmQgY2FuCisrICAgICAgLy8gYmUgdXNlZC4KKysgICAgICBfX3RleHRkb21haW4oX19zLmNfc3RyKCkpOworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHZvaWQKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fY2xvc2UoY2F0YWxvZykgY29uc3QKKysgICAgeyB9CisrCisrICAgLy8gbWVzc2FnZXNfYnluYW1lCisrICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXNfYnluYW1lPF9DaGFyVD46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisrICAgICA6IG1lc3NhZ2VzPF9DaGFyVD4oX19yZWZzKQorKyAgICAgeworKyAgICAgICBpZiAodGhpcy0+X01fbmFtZV9tZXNzYWdlcyAhPSBsb2NhbGU6OmZhY2V0OjpfU19nZXRfY19uYW1lKCkpCisrCSBkZWxldGUgW10gdGhpcy0+X01fbmFtZV9tZXNzYWdlczsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrCisrICAgICAgIGlmIChzdGQ6OnN0cmNtcChfX3MsICJDIikgIT0gMCAmJiBzdGQ6OnN0cmNtcChfX3MsICJQT1NJWCIpICE9IDApCisrCSB7CisrCSAgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMpOworKwkgICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7CisrCSB9CisrICAgICB9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmFhNTI3MzEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDY5MiBAQAorKy8vIHN0ZDo6bW9uZXlwdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNi4zLjIgIG1vbmV5cHVuY3QgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgb3B0aW1pemUgdGhpcyBmb3IgdWNsaWJjCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIHZhbGlkIHBhdHRlcm4gY29uc2lzdGluZyBvZiBzb21lIGNvbWJpbmF0aW9uIG9mOgorKyAgLy8gc3BhY2Ugbm9uZSBzeW1ib2wgc2lnbiB2YWx1ZQorKyAgbW9uZXlfYmFzZTo6cGF0dGVybgorKyAgbW9uZXlfYmFzZTo6X1NfY29uc3RydWN0X3BhdHRlcm4oY2hhciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKQorKyAgeworKyAgICBwYXR0ZXJuIF9fcmV0OworKworKyAgICAvLyBUaGlzIGluc2FuZWx5IGNvbXBsaWNhdGVkIHJvdXRpbmUgYXR0ZW1wdHMgdG8gY29uc3RydWN0IGEgdmFsaWQKKysgICAgLy8gcGF0dGVybiBmb3IgdXNlIHdpdGggbW9ueWVwdW5jdC4gQSBjb3VwbGUgb2YgaW52YXJpYW50czoKKysKKysgICAgLy8gaWYgKF9fcHJlY2VkZXMpIHN5bWJvbCAtPiB2YWx1ZQorKyAgICAvLyBlbHNlIHZhbHVlIC0+IHN5bWJvbAorKworKyAgICAvLyBpZiAoX19zcGFjZSkgc3BhY2UKKysgICAgLy8gZWxzZSBub25lCisrCisrICAgIC8vIG5vbmUgPT0gbmV2ZXIgZmlyc3QKKysgICAgLy8gc3BhY2UgbmV2ZXIgZmlyc3Qgb3IgbGFzdAorKworKyAgICAvLyBBbnkgZWxlZ2FudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBhcmUgd2VsY29tZS4KKysgICAgc3dpdGNoIChfX3Bvc24pCisrICAgICAgeworKyAgICAgIGNhc2UgMDoKKysgICAgICBjYXNlIDE6CisrCS8vIDEgVGhlIHNpZ24gcHJlY2VkZXMgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisrCV9fcmV0LmZpZWxkWzBdID0gc2lnbjsKKysJaWYgKF9fc3BhY2UpCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBzdGFydHMgd2l0aCBzaWduLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBzdGFydHMgd2l0aCBzaWduIGFuZCBlbmRzIHdpdGggbm9uZS4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgfQorKwlicmVhazsKKysgICAgICBjYXNlIDI6CisrCS8vIDIgVGhlIHNpZ24gZm9sbG93cyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KKysJaWYgKF9fc3BhY2UpCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBlaXRoZXIgZW5kcyB3aXRoIHNpZ24uCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJICAgIF9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIGVuZHMgd2l0aCBzaWduIHRoZW4gbm9uZS4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCSAgICBfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgfQorKwlicmVhazsKKysgICAgICBjYXNlIDM6CisrCS8vIDMgVGhlIHNpZ24gaW1tZWRpYXRlbHkgcHJlY2VkZXMgdGhlIHN5bWJvbC4KKysJaWYgKF9fcHJlY2VkZXMpCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSBzaWduOworKwkgICAgX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwlicmVhazsKKysgICAgICBjYXNlIDQ6CisrCS8vIDQgVGhlIHNpZ24gaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgc3ltYm9sLgorKwlpZiAoX19wcmVjZWRlcykKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc2lnbjsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrCTsKKysgICAgICB9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrCQkJCQkJICAgICBjb25zdCBjaGFyKikKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8Y2hhciwgdHJ1ZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgaWYgKCFfX25wb3NuKQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIoKSI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sCisrCQkJCQkJCV9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgIC8vIF9JbnRsID09IHRydWUKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0lOVF9DVVJSX1NZTUJPTCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLAorKwkJCQkJCSAgICAgIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysJCQkJCQkgICAgICBjb25zdCBjaGFyKikKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8Y2hhciwgZmFsc2U+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX0RFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgaWYgKCFfX25wb3NuKQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIoKSI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sCisrCQkJCQkJCV9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgIC8vIF9JbnRsID09IGZhbHNlCisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0ZSQUNfRElHSVRTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkJY29uc3QgY2hhciopCisrI2Vsc2UKKysJCQkJCQkJY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTx3Y2hhcl90LCB0cnVlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKysJICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbW9uZXRhcnkKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsc2UKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCisrCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0lOVF9DVVJSX1NZTUJPTCwgX19jbG9jKTsKKysKKysJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7CisrCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOworKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICB0cnkKKysJICAgIHsKKysJICAgICAgbWJzdGF0ZV90IF9fc3RhdGU7CisrCSAgICAgIHNpemVfdCBfX2xlbiA9IHN0cmxlbihfX2Nwb3NzaWduKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfcHMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19wcywgJl9fY3Bvc3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX3djc19wczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKysJICAgICAgaWYgKCFfX25wb3NuKQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOworKwkgICAgICBlbHNlIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAgICAgLy8gX0ludGwgPT0gdHJ1ZS4KKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgICB9CisrCSAgY2F0Y2ggKC4uLikKKysJICAgIHsKKysJICAgICAgZGVsZXRlIF9NX2RhdGE7CisrCSAgICAgIF9NX2RhdGEgPSAwOworKwkgICAgICBkZWxldGUgX193Y3NfcHM7CisrCSAgICAgIGRlbGV0ZSBfX3djc19uczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCSAgICB9CisrCisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywKKysJCQkJCQkgICAgICBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgdm9pZAorKyAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJCQkJCSAgICAgICBjb25zdCBjaGFyKikKKysjZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX25hbWUpCisrI2VuZGlmCisrICB7CisrICAgIGlmICghX01fZGF0YSkKKysgICAgICBfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTx3Y2hhcl90LCBmYWxzZT47CisrCisrICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKysJICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbW9uZXRhcnkKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsc2UKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisrICAgICAgICAgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysKKysJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fQ1VSUkVOQ1lfU1lNQk9MLCBfX2Nsb2MpOworKworKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKKysJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7CisrCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgdHJ5CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgbWJzdGF0ZV90IF9fc3RhdGU7CisrICAgICAgICAgICAgICBzaXplX3QgX19sZW47CisrICAgICAgICAgICAgICBfX2xlbiA9IHN0cmxlbihfX2Nwb3NzaWduKTsKKysgICAgICAgICAgICAgIGlmIChfX2xlbikKKysgICAgICAgICAgICAgICAgeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfcHMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19wcywgJl9fY3Bvc3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX3djc19wczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jbmVnc2lnbik7CisrCSAgICAgIGlmICghX19ucG9zbikKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIigpIjsKKysJICAgICAgZWxzZSBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgICB9CisrICAgICAgICAgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICAgICAgICAgICAgX01fZGF0YSA9IDA7CisrCSAgICAgIGRlbGV0ZSBfX3djc19wczsKKysJICAgICAgZGVsZXRlIF9fd2NzX25zOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCSAgICB9CisrCisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0ZSQUNfRElHSVRTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbnBvc24pOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQorKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46On5tb25leXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKKysgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODgzZWMxYQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTAsMCArMSwxNjAgQEAKKysvLyBzdGQ6Om51bXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4zLjEuMiAgbnVtcHVuY3QgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBudW1wdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX251bXB1bmN0X2NhY2hlPGNoYXI+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7CisrCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbnVtX2Jhc2U6Ol9TX29lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfb3V0W19faV0gPSBfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19pXTsKKysKKysJICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX251bV9iYXNlOjpfU19pZW5kOyArK19faikKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX2luW19fal0gPSBfX251bV9iYXNlOjpfU19hdG9tc19pbltfX2pdOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCisrCSAgLy8gQ2hlY2sgZm9yIE5VTEwsIHdoaWNoIGltcGxpZXMgbm8gZ3JvdXBpbmcuCisrCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gJ1wwJykKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCX0KKysKKysgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9ICJ0cnVlIjsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gNDsKKysgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gImZhbHNlIjsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWVfc2l6ZSA9IDU7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbnVtcHVuY3Q8Y2hhcj46On5udW1wdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX251bXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7CisrCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldKTsKKysKKysJICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX251bV9iYXNlOjpfU19pZW5kOyArK19faikKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX2luW19fal0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19pbltfX2pdKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICAvLyBOQjogSW4gdGhlIEdOVSBtb2RlbCB3Y2hhcl90IGlzIGFsd2F5cyAzMiBiaXQgd2lkZS4KKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrCisrCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gTCdcMCcpCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwl9CisrCisrICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKysgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSBMInRydWUiOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OworKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSBMImZhbHNlIjsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWVfc2l6ZSA9IDU7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbnVtcHVuY3Q8d2NoYXJfdD46On5udW1wdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysgI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTA3MDdkNworLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworQEAgLTAsMCArMSw0MDYgQEAKKysvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4zLjIgLSB0aW1lX3B1dCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8Y2hhcj46OgorKyAgICBfTV9wdXQoY2hhciogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IGNoYXIqIF9fZm9ybWF0LAorKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX19zdHJmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RyZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gJ1wwJzsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX3RpbWVwdW5jdF9jYWNoZTxjaGFyPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19nZXRfY19sb2NhbGUoKTsKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9ICIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9ICIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gIiI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9hbSA9ICJBTSI7CisrCSAgX01fZGF0YS0+X01fcG0gPSAiUE0iOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9ICIiOworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX01fZGF0YS0+X01fZGF5MSA9ICJTdW5kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSAiTW9uZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gIlR1ZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSAiV2VkbmVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gIlRodXJzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gIkZyaWRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9ICJTYXR1cmRheSI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9ICJTdW4iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gIk1vbiI7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSAiVHVlIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9ICJXZWQiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gIlRodSI7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSAiRnJpIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9ICJTYXQiOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9ICJKYW51YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gIkZlYnJ1YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gIk1hcmNoIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gIkFwcmlsIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gIk1heSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9ICJKdW5lIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gIkp1bHkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSAiQXVndXN0IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gIlNlcHRlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9ICJPY3RvYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gIk5vdmVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gIkRlY2VtYmVyIjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSAiSmFuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9ICJGZWIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gIk1hciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSAiQXByIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9ICJNYXkiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gIkp1biI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSAiSnVsIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9ICJBdWciOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gIlNlcCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSAiT2N0IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9ICJOb3YiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gIkRlYyI7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKERfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKERfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX0RfVF9GTVQsCisrCQkJCQkJCSAgICAgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fbmxfbGFuZ2luZm9fbChBTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG0gPSBfX25sX2xhbmdpbmZvX2woUE1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVF9BTVBNLCBfX2Nsb2MpOworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX01fZGF0YS0+X01fZGF5MSA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gX19ubF9sYW5naW5mb19sKERBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX25sX2xhbmdpbmZvX2woREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gX19ubF9sYW5naW5mb19sKERBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX25sX2xhbmdpbmZvX2woREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX19ubF9sYW5naW5mb19sKEFCREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzcsIF9fY2xvYyk7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX19ubF9sYW5naW5mb19sKE1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IF9fbmxfbGFuZ2luZm9fbChNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX19ubF9sYW5naW5mb19sKE1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBfX25sX2xhbmdpbmZvX2woTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IF9fbmxfbGFuZ2luZm9fbChNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX19ubF9sYW5naW5mb19sKE1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBfX25sX2xhbmdpbmZvX2woTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IF9fbmxfbGFuZ2luZm9fbChNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX19ubF9sYW5naW5mb19sKE1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX19ubF9sYW5naW5mb19sKE1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gX19ubF9sYW5naW5mb19sKE1PTl8xMiwgX19jbG9jKTsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTIsIF9fY2xvYyk7CisrCX0KKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjoKKysgICAgX01fcHV0KHdjaGFyX3QqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCB3Y2hhcl90KiBfX2Zvcm1hdCwKKysJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwgX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisrCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyNlbHNlCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSB3Y3NmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorKyAgICAgIGlmIChfX2xlbiA9PSAwKQorKwlfX3NbMF0gPSBMJ1wwJzsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX3RpbWVwdW5jdF9jYWNoZTx3Y2hhcl90PjsKKysKKysjd2FybmluZyB3aWRlIHRpbWUgc3R1ZmYKKysvLyAgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19nZXRfY19sb2NhbGUoKTsKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IEwiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IEwiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gTCIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gTCIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9hbSA9IEwiQU0iOworKwkgIF9NX2RhdGEtPl9NX3BtID0gTCJQTSI7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gTCIiOworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX01fZGF0YS0+X01fZGF5MSA9IEwiU3VuZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gTCJNb25kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBMIlR1ZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBMIldlZG5lc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IEwiVGh1cnNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBMIkZyaWRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9IEwiU2F0dXJkYXkiOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBMIlN1biI7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSBMIk1vbiI7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBMIlR1ZSI7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBMIldlZCI7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSBMIlRodSI7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBMIkZyaSI7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBMIlNhdCI7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gTCJKYW51YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gTCJGZWJydWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IEwiTWFyY2giOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBMIkFwcmlsIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gTCJNYXkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBMIkp1bmUiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBMIkp1bHkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBMIkF1Z3VzdCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IEwiU2VwdGVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gTCJPY3RvYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gTCJOb3ZlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IEwiRGVjZW1iZXIiOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IEwiSmFuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IEwiRmViIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IEwiTWFyIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IEwiQXByIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IEwiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IEwiSnVuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IEwiSnVsIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IEwiQXVnIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IEwiU2VwIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IEwiT2N0IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IEwiTm92IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IEwiRGVjIjsKKysJfQorKyNpZiAwCisrICAgICAgZWxzZQorKwl7CisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKysKKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCAqX193OyB9IF9fdTsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX0RfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW0gPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dQTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG0gPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVF9BTVBNLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IF9fdS5fX3c7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9IF9fdS5fX3c7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IF9fdS5fX3c7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gX191Ll9fdzsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fdS5fX3c7CisrCX0KKysjZW5kaWYgLy8gMAorKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmJhOGU4NTgKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorQEAgLTAsMCArMSw2OCBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IGZ1bmN0aW9ucworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4zLjIgLSB0aW1lX3B1dCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMpCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisrICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NhY2hlX3R5cGUqIF9fY2FjaGUsIHNpemVfdCBfX3JlZnMpCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShfX2NhY2hlKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisrICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorKwkJCQkgICAgIHNpemVfdCBfX3JlZnMpCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCisrICAgIHsKKysgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IF9fdG1wOworKyAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6fl9fdGltZXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9uYW1lX3RpbWVwdW5jdCAhPSBfU19nZXRfY19uYW1lKCkpCisrCWRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrICAgIH0KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQoraW5kZXggZjViMjhmNC4uZmJhZDY2NyAxMDA3NTUKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK0BAIC0xNTkxMyw2ICsxNTkxMyw5IEBAIGZpCisgICAjIERlZmF1bHQgdG8gImdlbmVyaWMiLgorICAgaWYgdGVzdCAkZW5hYmxlX2Nsb2NhbGVfZmxhZyA9IGF1dG87IHRoZW4KKyAgICAgY2FzZSAke3RhcmdldF9vc30gaW4KKysgICAgICAqLXVjbGliYyopCisrICAgICAgICBlbmFibGVfY2xvY2FsZV9mbGFnPXVjbGliYworKyAgICAgICAgOzsKKyAgICAgICBsaW51eCogfCBnbnUqIHwga2ZyZWVic2QqLWdudSB8IGtuZXRic2QqLWdudSkKKyAJZW5hYmxlX2Nsb2NhbGVfZmxhZz1nbnUKKyAJOzsKK0BAIC0xNjE5MSw2ICsxNjE5NCw3OCBAQCAkYXNfZWNobyAibmV3bGliIiA+JjY7IH0KKyAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCisgICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorICAgICAgIDs7CisrICAgIHVjbGliYykKKysgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdWNsaWJjIiA+JjUKKyskYXNfZWNobyAidWNsaWJjIiA+JjY7IH0KKysKKysgICAgICAjIERlY2xhcmUgaW50ZW50aW9uIHRvIHVzZSBnZXR0ZXh0LCBhbmQgYWRkIHN1cHBvcnQgZm9yIHNwZWNpZmljCisrICAgICAgIyBsYW5ndWFnZXMuCisrICAgICAgIyBGb3Igc29tZSByZWFzb24sIEFMTF9MSU5HVUFTIGhhcyB0byBiZSBiZWZvcmUgQU0tR05VLUdFVFRFWFQKKysgICAgICBBTExfTElOR1VBUz0iZGUgZnIiCisrCisrICAgICAgIyBEb24ndCBjYWxsIEFNLUdOVS1HRVRURVhUIGhlcmUuIEluc3RlYWQsIGFzc3VtZSBnbGliYy4KKysgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1zZ2ZtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG1zZ2ZtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2hlY2tfbXNnZm10K3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10PSIkY2hlY2tfbXNnZm10IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10PSJ5ZXMiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQiICYmIGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10PSJubyIKKytmaQorK2ZpCisrY2hlY2tfbXNnZm10PSRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdAorK2lmIHRlc3QgLW4gIiRjaGVja19tc2dmbXQiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNoZWNrX21zZ2ZtdCIgPiY1CisrJGFzX2VjaG8gIiRjaGVja19tc2dmbXQiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCisrICAgICAgICBVU0VfTkxTPXllcworKyAgICAgIGZpCisrICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCisrICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCisrICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCisrICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCisrICAgICAgZG9uZQorKworKworKworKyAgICAgIENMT0NBTEVfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrICAgICAgQ0xPQ0FMRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworKyAgICAgIENDT0xMQVRFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKyAgICAgIENDVFlQRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysgICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKyAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysgICAgICA7OworICAgZXNhYworIAorICAgIyBUaGlzIGlzIHdoZXJlIHRoZSB0ZXN0c3VpdGUgbG9va3MgZm9yIGxvY2FsZSBjYXRhbG9ncywgdXNpbmcgdGhlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmggYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAoraW5kZXggMDZiNWQ0Ny4uN2QzZjgzNSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAorQEAgLTEwMSw3ICsxMDEsOSBAQCB1c2luZyBzdGQ6OndtZW1jbXA7CisgdXNpbmcgc3RkOjp3bWVtY3B5OworIHVzaW5nIHN0ZDo6d21lbW1vdmU7CisgdXNpbmcgc3RkOjp3bWVtc2V0OworKyNpZiBfR0xJQkNYWF9IQVZFX1dDU0ZUSU1FCisgdXNpbmcgc3RkOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAKKyAjaWYgX0dMSUJDWFhfVVNFX0M5OQorIHVzaW5nIHN0ZDo6d2NzdG9sZDsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIKK2luZGV4IGFhMWIyZmEuLjQ1YzQ2MTcgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgorQEAgLTE3NSw3ICsxNzUsOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorICAgdXNpbmcgOjp3Y3Njb2xsOworICAgdXNpbmcgOjp3Y3NjcHk7CisgICB1c2luZyA6Ondjc2NzcG47CisrI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKKyAgIHVzaW5nIDo6d2NzZnRpbWU7CisrI2VuZGlmCisgICB1c2luZyA6Ondjc2xlbjsKKyAgIHVzaW5nIDo6d2NzbmNhdDsKKyAgIHVzaW5nIDo6d2NzbmNtcDsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMDUzZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2gKQEAgLTAsMCArMSwyNTcgQEAKK0Zyb20gYThlNjgzOTE3YTNlOGE2NjQyNjM5ZTY1YzA2ZDRkNGZjNDZjYzhhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQyOjM2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDUvMzVdIHVjbGliYy1sb2NhbGUtbm9fX3gKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8IDQ1ICsrKysrKysrKysrKysrKysrKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8IDE0IC0tLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAxICsKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjICAgICAgICB8ICA3IC0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8ICA3IC0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyAgICAgICB8ICA3ICstLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8IDE4ICsrKystLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgIDQgLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICAzIC0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAgMyAtLQorIDEwIGZpbGVzIGNoYW5nZWQsIDU1IGluc2VydGlvbnMoKyksIDU0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitpbmRleCAyYWUzZTRhLi5lNzRmZGRmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC02MCw0ICs2MCw0OSBAQCBleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7CisgZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKKyAjZW5kaWYKKyAKKysjIGRlZmluZSBfX25sX2xhbmdpbmZvX2wgbmxfbGFuZ2luZm9fbAorKyMgZGVmaW5lIF9fc3RyY29sbF9sIHN0cmNvbGxfbAorKyMgZGVmaW5lIF9fc3RyZnRpbWVfbCBzdHJmdGltZV9sCisrIyBkZWZpbmUgX19zdHJ0b2RfbCBzdHJ0b2RfbAorKyMgZGVmaW5lIF9fc3RydG9mX2wgc3RydG9mX2wKKysjIGRlZmluZSBfX3N0cnRvbGRfbCBzdHJ0b2xkX2wKKysjIGRlZmluZSBfX3N0cnhmcm1fbCBzdHJ4ZnJtX2wKKysjIGRlZmluZSBfX25ld2xvY2FsZSBuZXdsb2NhbGUKKysjIGRlZmluZSBfX2ZyZWVsb2NhbGUgZnJlZWxvY2FsZQorKyMgZGVmaW5lIF9fZHVwbG9jYWxlIGR1cGxvY2FsZQorKyMgZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQorKworKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysjICBkZWZpbmUgX19pc3djdHlwZV9sIGlzd2N0eXBlX2wKKysjICBkZWZpbmUgX190b3dsb3dlcl9sIHRvd2xvd2VyX2wKKysjICBkZWZpbmUgX190b3d1cHBlcl9sIHRvd3VwcGVyX2wKKysjICBkZWZpbmUgX193Y3Njb2xsX2wgd2NzY29sbF9sCisrIyAgZGVmaW5lIF9fd2NzZnRpbWVfbCB3Y3NmdGltZV9sCisrIyAgZGVmaW5lIF9fd2NzeGZybV9sIHdjc3hmcm1fbAorKyMgIGRlZmluZSBfX3djdHlwZV9sIHdjdHlwZV9sCisrIyBlbmRpZgorKworKyNlbHNlCisrIyBkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjIGRlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyMgZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCisrIyB3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrIyBkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjIGRlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCisrIyBkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKy8vIyBkZWZpbmUgX191c2Vsb2NhbGUgPworKy8vCisrIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyMgIGRlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrIyAgZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgICB0b3dsb3dlcigoQykpCisrIyAgZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgICB0b3d1cHBlcigoQykpCisrIyAgZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCisrLy8jICBkZWZpbmUgX193Y3NmdGltZV9sKFMsIE0sIEYsIFQsIEwpICB3Y3NmdGltZSgoUyksIChNKSwgKEYpLCAoVCkpCisrIyAgZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjICBkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgIHdjdHlwZSgoUykpCisrIyBlbmRpZgorKworICNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitpbmRleCA1MDgxZGMxLi4yMTQzMGQwIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0zOSwyMCArMzksNiBAQAorICNpbmNsdWRlIDxsYW5naW5mby5oPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19zdHJ0b2xfbChTLCBFLCBCLCBMKSAgICAgIHN0cnRvbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b3VsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvdWwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG9sbF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b2xsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvdWxsX2woUywgRSwgQiwgTCkgICAgc3RydG91bGwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCistI2RlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorLSNkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCistI3dhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKy0jZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCistI2RlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCistI2RlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIHRlbXBsYXRlPD4KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitpbmRleCBkYTA3YzFmLi40YmNhNWYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtNjgsNiArNjgsNyBAQCBuYW1lc3BhY2UgX19nbnVfY3h4CisgeworICAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworIH0KKysjZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQorICNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworaW5kZXggYzI2NjRhNy4uZWM1YzMyOSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK0BAIC0zNiwxMyArMzYsNiBAQAorICNpbmNsdWRlIDxsb2NhbGU+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorLSNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorLSNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKy0jZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitpbmRleCA3Mjk0ZTNhLi43YjEyODYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMzgsMTMgKzM4LDYgQEAKKyAjdW5kZWYgX0xJQkMKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCistI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCistI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCistI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworaW5kZXggMTM1OTRkOS4uZDc2OTNiNCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworQEAgLTM5LDEzICszOSwxMCBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBnZXR0ZXh0IHN0dWZmCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistZXh0ZXJuICJDIiBjaGFyICpfX2RjZ2V0dGV4dChjb25zdCBjaGFyICpkb21haW5uYW1lLAorLQkJCSAgICAgY29uc3QgY2hhciAqbXNnaWQsIGludCBjYXRlZ29yeSk7CisgI3VuZGVmIGdldHRleHQKKy0jZGVmaW5lIGdldHRleHQobXNnaWQpIF9fZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjZGVmaW5lIGdldHRleHQobXNnaWQpIGRjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisgI2Vsc2UKKy0jdW5kZWYgZ2V0dGV4dAorICNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorICNlbmRpZgorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitpbmRleCAxNDI0MDc4Li5kODlkYTMzIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTM2LDE1ICszNiwxMSBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLWV4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworLWV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorLQkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworLSNlbHNlCistI3VuZGVmIF9fdGV4dGRvbWFpbgorLSN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCistI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI3VuZGVmIHRleHRkb21haW4KKysjdW5kZWYgYmluZHRleHRkb21haW4KKysjZGVmaW5lIHRleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisgI2VuZGlmCisgCisgICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorQEAgLTcwLDcgKzY2LDcgQEAgZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisgCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisgICAgIHsKKy0gICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisrICAgICAgYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKyAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKKyAgICAgfQorIAorQEAgLTkwLDcgKzg2LDcgQEAgZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisgICAgIHsKKyAgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KKyAgICAgICAvLyBiZSB1c2VkLgorLSAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisrICAgICAgdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCBhYTUyNzMxLi4yZTZmODBhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtNDMsMTAgKzQzLDYgQEAKKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IDg4M2VjMWEuLjJjNzA2NDIgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtNDEsOSArNDEsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK2luZGV4IGUwNzA3ZDcuLmQ4NDhlZDUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtNDAsOSArNDAsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMTJhMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK0Zyb20gY2RiOWU5Yzk0NDBiZWI1OWJjMjA0NzZlZWE1YTljZjI1MzhjZDE5NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ1OjU3ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMzVdIHVjbGliYy1sb2NhbGUtd2NoYXJfZml4CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgfCAgNCArKy0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgfCAxMyArKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworaW5kZXggMmU2ZjgwYS4uMzFlYmI5ZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTQwMSw3ICs0MDEsNyBAQCBuYW1lc3BhY2Ugc3RkCisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitAQCAtNTU2LDcgKzU1Niw3IEBAIG5hbWVzcGFjZSBzdGQKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CistIyBlbHNlCisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworICMgZW5kaWYKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggMmM3MDY0Mi4uZDVjODk2MSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0xMjcsMTIgKzEyNywyNSBAQCBuYW1lc3BhY2Ugc3RkCisgCXsKKyAJICAvLyBOYW1lZCBsb2NhbGUuCisgCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG51bWVyaWMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisgCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKyAJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisgCisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorIAorIAkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorIAkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4Yjc5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKQEAgLTAsMCArMSw1NDIgQEAKK0Zyb20gMjQ0YjlkMWI1Y2M2ZDUzODI5MzUxOTI5OTg1MzFlZTcwYWZiMjYyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ2OjU4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvMzVdIHVjbGliYy1sb2NhbGUtdXBkYXRlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgMyArCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCA3NCArKysrKysrKysrLS0tLS0tLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCA0MiArKysrKystLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8IDUxICsrKysrKysrKysrLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgMTIgKystLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgMzQgKysrKysrLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgIDUgKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8IDE4ICsrKystLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCAgIHwgMTcgKysrLS0KKyA5IGZpbGVzIGNoYW5nZWQsIDE1OCBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAoraW5kZXggZTc0ZmRkZi4uOTcxYTZiNCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitAQCAtMzEsNiArMzEsOSBAQAorIAorICNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorICNpbmNsdWRlIDxjbG9jYWxlPgorKyNpbmNsdWRlIDxjc3RkbGliPgorKyNpbmNsdWRlIDxjc3RyaW5nPgorKyNpbmNsdWRlIDxjc3RkZGVmPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGNsZWFuIHRoaXMgdXAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK2luZGV4IDIxNDMwZDAuLjFiOWQ4ZTEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTM5LDIzICszOSwyMCBAQAorICNpbmNsdWRlIDxsYW5naW5mby5oPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIHRlbXBsYXRlPD4KKyAgICAgdm9pZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGZsb2F0JiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19mOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fZjsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB0ZW1wbGF0ZTw+CitAQCAtNjMsMTYgKzYwLDEzIEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19kOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2Q7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdGVtcGxhdGU8PgorQEAgLTgwLDE2ICs3NCwxMyBAQCBuYW1lc3BhY2Ugc3RkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgbG9uZyBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fbGQ7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2xkOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHZvaWQKK0BAIC0xMTAsMTcgKzEwMSwxOCBAQCBuYW1lc3BhY2Ugc3RkCisgICB2b2lkCisgICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKyAgIHsKKy0gICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKysgICAgaWYgKF9fY2xvYyAmJiBfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisgICAgICAgX19mcmVlbG9jYWxlKF9fY2xvYyk7CisgICB9CisgCisgICBfX2NfbG9jYWxlCisgICBsb2NhbGU6OmZhY2V0OjpfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICB7IHJldHVybiBfX2R1cGxvY2FsZShfX2Nsb2MpOyB9CistfSAvLyBuYW1lc3BhY2Ugc3RkCisgCistbmFtZXNwYWNlIF9fZ251X2N4eAorLXsKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisrCisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKysKKyAgIGNvbnN0IGNoYXIqIGNvbnN0IGNhdGVnb3J5X25hbWVzWzYgKyBfR0xJQkNYWF9OVU1fQ0FURUdPUklFU10gPQorICAgICB7CisgICAgICAgIkxDX0NUWVBFIiwKK0BAIC0xMzgsOSArMTMwLDExIEBAIG5hbWVzcGFjZSBfX2dudV9jeHgKKyAgICAgICAiTENfSURFTlRJRklDQVRJT04iCisgI2VuZGlmCisgICAgIH07CistfQorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorKworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICBjb25zdCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4OjpjYXRlZ29yeV9uYW1lczsKKy19ICAvLyBuYW1lc3BhY2Ugc3RkCisrCisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK2luZGV4IDRiY2E1ZjEuLjY0YTZkNDYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC0zOSwyMSArMzksMjMgQEAKKyAjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisgCisgI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KKy0jaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgorKyNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6dnNucHJpbnRmIG9yIHN0ZDo6dnNwcmludGYKKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHRoaXMKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9JQ09OVgorICNpbmNsdWRlIDxpY29udi5oPgkJLy8gRm9yIGNvZGVjdnQgdXNpbmcgaWNvbnYsIGljb252X3QKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy0jaW5jbHVkZSA8bGliaW50bC5oPiAJCS8vIEZvciBtZXNzYWdlcworKyNpZmRlZiBIQVZFX0xJQklOVExfSAorKyNpbmNsdWRlIDxsaWJpbnRsLmg+CQkvLyBGb3IgbWVzc2FnZXMKKyAjZW5kaWYKKysjaW5jbHVkZSA8Y3N0ZGFyZz4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKKysvLyBwc206IHVzZWQgaW4gb3MvZ251LWxpbnV4L2N0eXBlX25vbmlubGluZS5oCisgI2VuZGlmCisgI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorIAorQEAgLTc4LDIzICs4MCwyNSBAQCBuYW1lc3BhY2Ugc3RkCisgI2Vsc2UKKyAgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisgI2VuZGlmCistCistICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCistICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCistICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorKyAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgZG91YmxlIHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorKyAgLy8gc3RyaW5nLiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKysgIC8vIHRoZSB1bnNhZmUgdnNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorICAgLy8gYmUgYXZvaWRlZC4KKy0gIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KKy0gICAgaW50CistICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCistCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKKy0JCSAgICAgY29uc3QgY2hhciogX19mbXQsCistI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCistCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKKysgICAgaW5saW5lIGludAorKyAgICBfX2NvbnZlcnRfZnJvbV92KGNvbnN0IF9fY19sb2NhbGUmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKwlfX2Nsb2MgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQorKyNlbmRpZgorKwkJICAgICAsCisrCQkgICAgIGNoYXIqIF9fb3V0LAorKwkJICAgICBjb25zdCBpbnQgX19zaXplLAorKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwgLi4uKQorICAgICB7CisrICAgICAgdmFfbGlzdCBfX2FyZ3M7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCisgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKKy0gICAgeworICMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07CitAQCAtMTAzLDcgKzEwNyw5IEBAIG5hbWVzcGFjZSBzdGQKKyAjIGVuZGlmCisgI2VuZGlmCisgCistICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjpzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOworKyAgICAgIHZhX3N0YXJ0KF9fYXJncywgX19mbXQpOworKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6dnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX2FyZ3MpOworKyAgICAgIHZhX2VuZChfX2FyZ3MpOworIAorICNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworICAgICAgIF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19vbGQpOworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK2luZGV4IDdiMTI4NjEuLjEzZTAxMWQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0zMywxNiArMzMsMjAgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistbmFtZXNwYWNlIHN0ZAorLXsKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCisgICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KKy0gIHRlbXBsYXRlPD4KKyAgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorICAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpCisgICAgIHsKK0BAIC01Nyw2ICs2MSw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjZW5kaWYKKyAJfQorICAgICB9CisrICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6fmN0eXBlX2J5bmFtZSgpCisrICAgIHsgfQorIAorICNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICAgY3R5cGU8d2NoYXJfdD46Ol9fd21hc2tfdHlwZQorQEAgLTEzOCwxNyArMTQ0LDMzIEBAIG5hbWVzcGFjZSBzdGQKKyAgIGN0eXBlPHdjaGFyX3Q+OjoKKyAgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QKKyAgIHsKKy0gICAgLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKy0gICAgLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrICAgIC8vIFRoZSBjYXNlIG9mIF9fbSA9PSBjdHlwZV9iYXNlOjpzcGFjZSBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LAorKyAgICAvLyBkdWUgdG8gaXRzIHVzZSBpbiBtYW55IGlzdHJlYW0gZnVuY3Rpb25zLiAgVGhlcmVmb3JlIHdlIGRlYWwgd2l0aAorKyAgICAvLyBpdCBmaXJzdCwgZXhwbG9pdGluZyB0aGUga25vd2xlZGdlIHRoYXQgb24gR05VIHN5c3RlbXMgX01fYml0WzVdCisrICAgIC8vIGlzIHRoZSBtYXNrIGNvcnJlc3BvbmRpbmcgdG8gY3R5cGVfYmFzZTo6c3BhY2UuICBOQjogYW4gZW5jb2RpbmcKKysgICAgLy8gY2hhbmdlIHdvdWxkIG5vdCBhZmZlY3QgY29ycmVjdG5lc3MhCisrCisgICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKKy0gICAgY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKy0gICAgZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorLSAgICAgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdCistCSAgJiYgX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCistCXsKKy0JICBfX3JldCA9IHRydWU7CistCSAgYnJlYWs7CistCX0KKysgICAgaWYgKF9fbSA9PSBfTV9iaXRbNV0pCisrICAgICAgX19yZXQgPSBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1s1XSwgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICBlbHNlCisrICAgICAgeworKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KKysJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKwkgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdKQorKwkgICAgeworKwkgICAgICBpZiAoX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCQl7CisrCQkgIF9fcmV0ID0gdHJ1ZTsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKF9fbSA9PSBfTV9iaXRbX19iaXRjdXJdKQorKwkJYnJlYWs7CisrCSAgICB9CisrICAgICAgfQorKworICAgICByZXR1cm4gX19yZXQ7CisgICB9CisgCitAQCAtMjkwLDQgKzMxMiw1IEBAIG5hbWVzcGFjZSBzdGQKKyAjZW5kaWYKKyAgIH0KKyAjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCistfQorKworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAoraW5kZXggZDg5ZGEzMy4uMDY3NjU3YSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC01MywxMiArNTMsMTYgQEAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisgCQkJCXNpemVfdCBfX3JlZnMpCistICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAorLSAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKE5VTEwpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhOVUxMKQorICAgICAgeworLSAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKy0gICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0ZDo6c3RybGVuKF9fcykgKyAxOworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKysgICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOworICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrCisrICAgICAgIC8vIExhc3QgdG8gYXZvaWQgbGVha2luZyBtZW1vcnkgaWYgbmV3IHRocm93cy4KKysgICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworICAgICAgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IDMxZWJiOWYuLjc2NzliOWMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK0BAIC0yMDYsNyArMjExLDcgQEAgbmFtZXNwYWNlIHN0ZAorIAkgIH0KKyAJYnJlYWs7CisgICAgICAgZGVmYXVsdDoKKy0JOworKwlfX3JldCA9IHBhdHRlcm4oKTsKKyAgICAgICB9CisgICAgIHJldHVybiBfX3JldDsKKyAgIH0KK0BAIC0zOTAsNyArMzk1LDkgQEAgbmFtZXNwYWNlIHN0ZAorIAkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCisgCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCistCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgCSAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisgCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKyAjZW5kaWYKKyAKK0BAIC00NzcsOCArNDg0LDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgICAgIGZyZWUoX19vbGQpOworKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgCSAgICB9CitAQCAtNDk4LDggKzUwNSw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICBmcmVlKF9fb2xkKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorIAl9CisgICAgIH0KK0BAIC01NDUsOCArNTUyLDExIEBAIG5hbWVzcGFjZSBzdGQKKyAJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorIAkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorLQkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyAgICAgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKysgICAgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKyAjZW5kaWYKKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK0BAIC02MzMsOCArNjQzLDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgICAgIGZyZWUoX19vbGQpOworKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworIAkgICAgfQorQEAgLTY1Myw4ICs2NjMsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgZnJlZShfX29sZCk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJfQorICAgICB9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IGQ1Yzg5NjEuLjhhZTg5NjkgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK2luZGV4IGQ4NDhlZDUuLmYyNGQ1M2UgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtNTMsMTEgKzUzLDE0IEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisgCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICNlbHNlCistICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CistICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLSAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgICAgaWYgKF9fbGVuID09IDApCitAQCAtMjA3LDExICsyMTAsMTQgQEAgbmFtZXNwYWNlIHN0ZAorICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKyAJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisgI2Vsc2UKKy0gICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworKyAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKy0gICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistICAgICAgZnJlZShfX29sZCk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICAgICBpZiAoX19sZW4gPT0gMCkKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK2luZGV4IGJhOGU4NTguLjE2NjVkZGUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorQEAgLTUwLDEyICs1MCwyMSBAQAorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorIAkJCQkgICAgIHNpemVfdCBfX3JlZnMpCisgICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorLSAgICBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCisrICAgIF9NX25hbWVfdGltZXB1bmN0KE5VTEwpCisgICAgIHsKKy0gICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKy0gICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKysgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7CisgICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKy0gICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOworKworKyAgICAgIHRyeQorKwl7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7IH0KKysgICAgICBjYXRjaCguLi4pCisrCXsKKysJICBkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCX0KKysKKyAgICAgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZjZiMTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDBhODBmNjBkZTA4YmQ1ODI5Y2ExYjM3NThmNzBhOTJiNjFkZGExNDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0ODoxMCArMDQwMAorU3ViamVjdDogW1BBVENIIDA4LzM1XSBtaXNzaW5nLWV4ZWNpbmZvX2gKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBib2VobS1nYy9pbmNsdWRlL2djLmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ib2VobS1nYy9pbmNsdWRlL2djLmggYi9ib2VobS1nYy9pbmNsdWRlL2djLmgKK2luZGV4IDZiMzhmMmQuLmZjYTk4ZmYgMTAwNjQ0CistLS0gYS9ib2VobS1nYy9pbmNsdWRlL2djLmgKKysrKyBiL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAorQEAgLTUwMyw3ICs1MDMsNyBAQCBHQ19BUEkgR0NfUFRSIEdDX21hbGxvY19hdG9taWNfaWdub3JlX29mZl9wYWdlIEdDX1BST1RPKChzaXplX3QgbGIpKTsKKyAjaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19HTElCQ19fKQorICMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyAjIGlmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSB8fCBfX0dMSUJDX18gPiAyKSBcCistICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykKKysgICAgICYmICFkZWZpbmVkKF9faWE2NF9fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKQorICMgICBpZm5kZWYgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICAgIGRlZmluZSBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgIGVuZGlmCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDktYzk5LXNucHJpbnRmLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwOS1jOTktc25wcmludGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI1YjJhMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDktYzk5LXNucHJpbnRmLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gN2I3Y2FmNDMwNWE1NGZhNGRmZGQwZWZkNWJkNDFjYjk0Y2JjZjQzZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ5OjAzICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMzVdIGM5OS1zbnByaW50ZgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworaW5kZXggMzdmMDFjYS4uZjAwYzA2ZCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCitAQCAtMTQ0LDcgKzE0NCw3IEBAIG5hbWVzcGFjZSBzdGQKKyAgIHVzaW5nIDo6dnNwcmludGY7CisgfSAvLyBuYW1lc3BhY2Ugc3RkCisgCistI2lmIF9HTElCQ1hYX1VTRV9DOTkKKysjaWYgX0dMSUJDWFhfVVNFX0M5OSB8fCBkZWZpbmVkKF9fVUNMSUJDX18pCisgCisgI3VuZGVmIHNucHJpbnRmCisgI3VuZGVmIHZmc2NhbmYKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMC1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTAtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUwMmVmOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTAtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKQEAgLTAsMCArMSwxOTIgQEAKK0Zyb20gZDFlODVhMzYzZmZjZDI1OWU5YjA4NDFiODVjYTEwYWYyZjMxYmQ3MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU5OjAwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMzVdIGdjYzogcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbjogY29kZXNvdXJjZXJ5XQorLS0tCisgZ2NjL2NvbW1vbi5vcHQgICAgICB8ICA0ICsrKysKKyBnY2MvY29uZmlnLmluICAgICAgIHwgIDYgKysrKysrCisgZ2NjL2NvbmZpZ3VyZSAgICAgICB8IDE2ICsrKysrKysrKysrKysrKysKKyBnY2MvY29uZmlndXJlLmFjICAgIHwgMTAgKysrKysrKysrKworIGdjYy9kb2MvaW52b2tlLnRleGkgfCAgOSArKysrKysrKysKKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgIDIgKysKKyBnY2MvaW5jcGF0aC5jICAgICAgIHwgMTkgKysrKysrKysrKysrKysrKysrKworIDcgZmlsZXMgY2hhbmdlZCwgNjYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbW1vbi5vcHQgYi9nY2MvY29tbW9uLm9wdAoraW5kZXggYjQ5YWM0Ni4uNzgzZDIzMSAxMDA2NDQKKy0tLSBhL2djYy9jb21tb24ub3B0CisrKysgYi9nY2MvY29tbW9uLm9wdAorQEAgLTYyMyw2ICs2MjMsMTAgQEAgV3JldHVybi1sb2NhbC1hZGRyCisgQ29tbW9uIFZhcih3YXJuX3JldHVybl9sb2NhbF9hZGRyKSBJbml0KDEpIFdhcm5pbmcKKyBXYXJuIGFib3V0IHJldHVybmluZyBhIHBvaW50ZXIvcmVmZXJlbmNlIHRvIGEgbG9jYWwgb3IgdGVtcG9yYXJ5IHZhcmlhYmxlLgorIAorK1dwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQ29tbW9uIFZhcihmbGFnX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpIEluaXQoMSkgV2FybmluZworK1dhcm4gZm9yIC1JIGFuZCAtTCBvcHRpb25zIHVzaW5nIHN5c3RlbSBkaXJlY3RvcmllcyBpZiBjcm9zcyBjb21waWxpbmcKKysKKyBXc2hhZG93CisgQ29tbW9uIFZhcih3YXJuX3NoYWRvdykgV2FybmluZworIFdhcm4gd2hlbiBvbmUgbG9jYWwgdmFyaWFibGUgc2hhZG93cyBhbm90aGVyCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy5pbiBiL2djYy9jb25maWcuaW4KK2luZGV4IGYyZWQzMDEuLmYyOTBjNmIgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnLmluCisrKysgYi9nY2MvY29uZmlnLmluCitAQCAtMTY4LDYgKzE2OCwxMiBAQAorICNlbmRpZgorIAorIAorKy8qIERlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXMgKi8KKysjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorKyN1bmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUworKyNlbmRpZgorKworKworIC8qIERlZmluZSBpZiB5b3Ugd2FudCBhbGwgb3BlcmF0aW9ucyBvbiBSVEwgKHRoZSBiYXNpYyBkYXRhIHN0cnVjdHVyZSBvZiB0aGUKKyAgICBvcHRpbWl6ZXIgYW5kIGJhY2sgZW5kKSB0byBiZSBjaGVja2VkIGZvciBkeW5hbWljIHR5cGUgc2FmZXR5IGF0IHJ1bnRpbWUuCisgICAgVGhpcyBpcyBxdWl0ZSBleHBlbnNpdmUuICovCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDk1MjM3NzMuLjE4MTc0OGUgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtOTMyLDYgKzkzMiw3IEBAIHdpdGhfc3lzdGVtX3psaWIKKyBlbmFibGVfbWFpbnRhaW5lcl9tb2RlCisgZW5hYmxlX2xpbmtfbXV0ZXgKKyBlbmFibGVfdmVyc2lvbl9zcGVjaWZpY19ydW50aW1lX2xpYnMKKytlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcworIGVuYWJsZV9wbHVnaW4KKyBlbmFibGVfaG9zdF9zaGFyZWQKKyBlbmFibGVfbGlicXVhZG1hdGhfc3VwcG9ydAorQEAgLTE2NjEsNiArMTY2Miw4IEBAIE9wdGlvbmFsIEZlYXR1cmVzOgorICAgLS1lbmFibGUtdmVyc2lvbi1zcGVjaWZpYy1ydW50aW1lLWxpYnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhhdCBydW50aW1lIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIGNvbXBpbGVyLXNwZWNpZmljIGRpcmVjdG9yeQorKyAgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzCisgICAtLWVuYWJsZS1wbHVnaW4gICAgICAgICBlbmFibGUgcGx1Z2luIHN1cHBvcnQKKyAgIC0tZW5hYmxlLWhvc3Qtc2hhcmVkICAgIGJ1aWxkIGhvc3QgY29kZSBhcyBzaGFyZWQgbGlicmFyaWVzCisgICAtLWRpc2FibGUtbGlicXVhZG1hdGgtc3VwcG9ydAorQEAgLTI4MDg3LDYgKzI4MDkwLDE5IEBAIGlmIHRlc3QgIiR7ZW5hYmxlX3ZlcnNpb25fc3BlY2lmaWNfcnVudGltZV9saWJzK3NldH0iID0gc2V0OyB0aGVuIDoKKyBmaQorIAorIAorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzK3NldH0iID0gc2V0OyB0aGVuIDoKKysgIGVuYWJsZXZhbD0kZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM7CisrZWxzZQorKyAgZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM9bm8KKytmaQorKworK2lmIHRlc3QgIngke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzfSIgPSAieHllcyI7IHRoZW4KKysKKyskYXNfZWNobyAiI2RlZmluZSBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUyAxIiA+PmNvbmZkZWZzLmgKKysKKytmaQorKworICMgU3Vic3RpdHV0ZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworIAorIAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCA2OGIwZWU4Li44YjA3MDc4IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTU1NzEsNiArNTU3MSwxNiBAQCBBQ19BUkdfRU5BQkxFKHZlcnNpb24tc3BlY2lmaWMtcnVudGltZS1saWJzLAorICAgICAgICAgICAgICAgICBbc3BlY2lmeSB0aGF0IHJ1bnRpbWUgbGlicmFyaWVzIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGluIGEgY29tcGlsZXItc3BlY2lmaWMgZGlyZWN0b3J5XSldKQorIAorK0FDX0FSR19FTkFCTEUoW3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAorKyAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXNdKSwsCisrICAgICAgICAgICAgIFtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ub10pCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorKyAgQUNfREVGSU5FKFtFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFU10sCisrICAgICAgICAgICBbMV0sCisrICAgICAgICAgICBbRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3Rvcmllc10pCisrZmkKKysKKyAjIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyBBQ19TVUJTVChzdWJkaXJzKQorIEFDX1NVQlNUKHNyY2RpcikKK2RpZmYgLS1naXQgYS9nY2MvZG9jL2ludm9rZS50ZXhpIGIvZ2NjL2RvYy9pbnZva2UudGV4aQoraW5kZXggNTIwYzJjNS4uMGRmOGE0NyAxMDA2NDQKKy0tLSBhL2djYy9kb2MvaW52b2tlLnRleGkKKysrKyBiL2djYy9kb2MvaW52b2tlLnRleGkKK0BAIC0yNjksNiArMjY5LDcgQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdHN9LgorIC1Xb3Zlcmxlbmd0aC1zdHJpbmdzICAtV3BhY2tlZCAgLVdwYWNrZWQtYml0ZmllbGQtY29tcGF0ICAtV3BhZGRlZCBAZ29sCisgLVdwYXJlbnRoZXNlcyAgLVdwZWRhbnRpYy1tcy1mb3JtYXQgLVduby1wZWRhbnRpYy1tcy1mb3JtYXQgQGdvbAorIC1XcG9pbnRlci1hcml0aCAgLVduby1wb2ludGVyLXRvLWludC1jYXN0IEBnb2wKKystV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgQGdvbAorIC1XcmVkdW5kYW50LWRlY2xzICAtV25vLXJldHVybi1sb2NhbC1hZGRyIEBnb2wKKyAtV3JldHVybi10eXBlICAtV3NlcXVlbmNlLXBvaW50ICAtV3NoYWRvdyAgLVduby1zaGFkb3ctaXZhciBAZ29sCisgLVdzaGlmdC1jb3VudC1uZWdhdGl2ZSAtV3NoaWZ0LWNvdW50LW92ZXJmbG93IEBnb2wKK0BAIC00NDMyLDYgKzQ0MzMsMTQgQEAgbWFkZSB1cCBvZiBkYXRhIG9ubHkgYW5kIHRodXMgcmVxdWlyZXMgbm8gc3BlY2lhbCB0cmVhdG1lbnQuICBCdXQsIGZvcgorIG1vc3QgdGFyZ2V0cywgaXQgaXMgbWFkZSB1cCBvZiBjb2RlIGFuZCB0aHVzIHJlcXVpcmVzIHRoZSBzdGFjayB0byBiZQorIG1hZGUgZXhlY3V0YWJsZSBpbiBvcmRlciBmb3IgdGhlIHByb2dyYW0gdG8gd29yayBwcm9wZXJseS4KKyAKKytAaXRlbSAtV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytAb3BpbmRleCBXbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0RvIG5vdCB3YXJuIGZvciBAb3B0aW9uey1JfSBvciBAb3B0aW9uey1MfSBvcHRpb25zIHVzaW5nIHN5c3RlbQorK2RpcmVjdG9yaWVzIHN1Y2ggYXMgQGZpbGV7L3Vzci9pbmNsdWRlfSB3aGVuIGNyb3NzIGNvbXBpbGluZy4gIFRoaXMKKytvcHRpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBjaHJvb3QgZW52aXJvbm1lbnRzIHdoZW4gc3VjaAorK2RpcmVjdG9yaWVzIGNvbnRhaW4gdGhlIGNvcnJlY3QgaGVhZGVycyBhbmQgbGlicmFyaWVzIGZvciB0aGUgdGFyZ2V0Cisrc3lzdGVtIHJhdGhlciB0aGFuIHRoZSBob3N0LgorKworIEBpdGVtIC1XZmxvYXQtZXF1YWwKKyBAb3BpbmRleCBXZmxvYXQtZXF1YWwKKyBAb3BpbmRleCBXbm8tZmxvYXQtZXF1YWwKK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IGQ5NTZjMzYuLjY3NWJjYzEgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTgzNSw2ICs4MzUsOCBAQCBwcm9wZXIgcG9zaXRpb24gYW1vbmcgdGhlIG90aGVyIG91dHB1dCBmaWxlcy4gICovCisgICAgIiV7ZnVzZS1sZD0qOi1mdXNlLWxkPSUqfSAiIExJTktfQ09NUFJFU1NfREVCVUdfU1BFQyBcCisgICAgIiVYICV7byp9ICV7ZSp9ICV7Tn0gJXtufSAle3J9XAorICAgICAle3N9ICV7dH0gJXt1Kn0gJXt6fSAle1p9ICV7IW5vc3RkbGliOiV7IW5vc3RhcnRmaWxlczolU319ICIgVlRBQkxFX1ZFUklGSUNBVElPTl9TUEVDICIgXAorKyAgICAle1duby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzOi0tbm8tcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc31cCisrICAgICV7V2Vycm9yPXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXM6LS1lcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzfVwKKyAgICAgJXtzdGF0aWM6fSAle0wqfSAlKG1md3JhcCkgJShsaW5rX2xpYmdjYykgIiBTQU5JVElaRVJfRUFSTFlfU1BFQyAiICVvXAorICAgICAiIENIS1BfU1BFQyAiIFwKKyAgICAgJXtmb3BlbmFjY3xmb3Blbm1wfGZ0cmVlLXBhcmFsbGVsaXplLWxvb3BzPSo6JTppbmNsdWRlKGxpYmdvbXAuc3BlYyklKGxpbmtfZ29tcCl9XAorZGlmZiAtLWdpdCBhL2djYy9pbmNwYXRoLmMgYi9nY2MvaW5jcGF0aC5jCitpbmRleCA2YzU0Y2E2Li5jYzBjOTIxIDEwMDY0NAorLS0tIGEvZ2NjL2luY3BhdGguYworKysrIGIvZ2NjL2luY3BhdGguYworQEAgLTI4LDYgKzI4LDcgQEAKKyAjaW5jbHVkZSAiaW50bC5oIgorICNpbmNsdWRlICJpbmNwYXRoLmgiCisgI2luY2x1ZGUgImNwcGRlZmF1bHQuaCIKKysjaW5jbHVkZSAiZGlhZ25vc3RpYy1jb3JlLmgiCisgCisgLyogTWljcm9zb2Z0IFdpbmRvd3MgZG9lcyBub3QgbmF0aXZlbHkgc3VwcG9ydCBpbm9kZXMuCisgICAgVk1TIGhhcyBub24tbnVtZXJpYyBpbm9kZXMuICAqLworQEAgLTM4Myw2ICszODQsMjQgQEAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMgKGNvbnN0IGNoYXIgKnN5c3Jvb3QsIGNwcF9yZWFkZXIgKnBmaWxlLCBpbnQgdmVyYm9zZSkKKyAJfQorICAgICAgIGZwcmludGYgKHN0ZGVyciwgXygiRW5kIG9mIHNlYXJjaCBsaXN0LlxuIikpOworICAgICB9CisrCisrI2lmZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCisrICBpZiAoZmxhZ19wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKQorKyAgICB7CisrICAgICAgIHN0cnVjdCBjcHBfZGlyICpwOworKworKyAgICAgICBmb3IgKHAgPSBoZWFkc1tRVU9URV07IHA7IHAgPSBwLT5uZXh0KQorKyAgICAgICAgIHsKKysgICAgICAgICAgaWYgKCghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvaW5jbHVkZSIsIDEyKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvbG9jYWwvaW5jbHVkZSIsIDE4KSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkpCisrICAgICAgICAgICAgd2FybmluZyAoT1BUX1dwb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLAorKyAgICAgICAgICAgICAgICAgICAgICJpbmNsdWRlIGxvY2F0aW9uIFwiJXNcIiBpcyB1bnNhZmUgZm9yICIKKysgICAgICAgICAgICAgICAgICAgICAiY3Jvc3MtY29tcGlsYXRpb24iLAorKyAgICAgICAgICAgICAgICAgICAgIHAtPm5hbWUpOworKyAgICAgICAgIH0KKysgICAgfQorKyNlbmRpZgorIH0KKyAKKyAvKiBVc2UgZ2l2ZW4gLUkgcGF0aHMgZm9yICNpbmNsdWRlICIuLi4iIGJ1dCBub3QgI2luY2x1ZGUgPC4uLj4sIGFuZAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDExLWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTEtZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2N2Q5ODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDExLWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIGYxNThmY2MwODRlODhiMWQ4ZDFlY2Y1YjAwNWQzNzc3NjVhZWYxNmUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTowMDozNCArMDQwMAorU3ViamVjdDogW1BBVENIIDExLzM1XSBnY2MtcG9pc29uLWRpci1leHRlbmQKKworQWRkIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYmFzZWQgb24gdGhlIG9yaWdpbmFsCit6ZWNrZS1uby1ob3N0LWluY2x1ZGVzLnBhdGNoIHBhdGNoLiAgVGhlIG9yaWdpbmFsIHBhdGNoIGNoZWNrZWQgZm9yCisvdXNyL2luY2x1ZGUsIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYW5kIHRoZW4gdHJpZ2dlcmVkIGEgZmFpbHVyZSBhbmQKK2Fib3J0ZWQuCisKK0luc3RlYWQsIHdlIGFkZCB0aGUgdHdvIG1pc3NpbmcgaXRlbXMgdG8gdGhlIGN1cnJlbnQgc2Nhbi4gIElmIHRoZSB1c2VyCit3YW50cyB0aGlzIHRvIGJlIGEgZmFpbHVyZSwgdGhleSBjYW4gYWRkICItV2Vycm9yPXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9pbmNwYXRoLmMgfCA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvaW5jcGF0aC5jIGIvZ2NjL2luY3BhdGguYworaW5kZXggY2MwYzkyMS4uMGJjMWY2NyAxMDA2NDQKKy0tLSBhL2djYy9pbmNwYXRoLmMKKysrKyBiL2djYy9pbmNwYXRoLmMKK0BAIC0zOTQsNyArMzk0LDkgQEAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMgKGNvbnN0IGNoYXIgKnN5c3Jvb3QsIGNwcF9yZWFkZXIgKnBmaWxlLCBpbnQgdmVyYm9zZSkKKyAgICAgICAgICB7CisgICAgICAgICAgIGlmICgoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2luY2x1ZGUiLCAxMikpCisgICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2xvY2FsL2luY2x1ZGUiLCAxOCkpCistICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3N3L2luY2x1ZGUiLCAxMSkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvb3B0L2luY2x1ZGUiLCAxMikpKQorICAgICAgICAgICAgIHdhcm5pbmcgKE9QVF9XcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcywKKyAgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSBsb2NhdGlvbiBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisgICAgICAgICAgICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uIiwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMi1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTItZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVmY2E3MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTItZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorRnJvbSBhNTQyMzljYmRjNmY5M2M2ZDc0ZWE2YjA3OGYxNDcwNzcwYzRmNWFhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MDg6MzEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMi8zNV0gZ2NjLTQuMy4zOiBTWVNST09UX0NGTEFHU19GT1JfVEFSR0VUCisKK0JlZm9yZSBjb21taXR0aW5nLCBJIG5vdGljZWQgdGhhdCBQUi8zMjE2MSB3YXMgbWFya2VkIGFzIGEgZHVwIG9mIFBSLzMyMDA5LCBidXQgbXkgcHJldmlvdXMgcGF0Y2ggZGlkIG5vdCBmaXggaXQuCisKK1RoaXMgYWx0ZXJuYXRpdmUgcGF0Y2ggaXMgYmV0dGVyIGJlY2F1c2UgaXQgbGV0cyB5b3UganVzdCB1c2UgQ0ZMQUdTX0ZPUl9UQVJHRVQgdG8gc2V0IHRoZSBjb21waWxhdGlvbiBmbGFncyBmb3IgbGliZ2NjLiBTaW5jZSBib290c3RyYXBwZWQgdGFyZ2V0IGxpYnJhcmllcyBhcmUgbmV2ZXIgY29tcGlsZWQgd2l0aCB0aGUgbmF0aXZlIGNvbXBpbGVyLCBpdCBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGRpZmZlcmVudCBmbGFncyBmb3Igc3RhZ2UxIGFuZCBsYXRlciBzdGFnZXMuIEFuZCBpdCBhbHNvIG1ha2VzIGxpdHRsZSBzZW5zZSB0byB1c2UgYSBkaWZmZXJlbnQgdmFyaWFibGUgdGhhbiBDRkxBR1NfRk9SX1RBUkdFVC4KKworT3RoZXIgY2hhbmdlcyBJIGhhZCB0byBkbyBpbmNsdWRlOgorCistIG1vdmluZyB0aGUgY3JlYXRpb24gb2YgZGVmYXVsdCBDRkxBR1NfRk9SX1RBUkdFVCBmcm9tIE1ha2VmaWxlLmFtIHRvIGNvbmZpZ3VyZS5hYywgYmVjYXVzZSBvdGhlcndpc2UgdGhlIEJPT1RfQ0ZMQUdTIGFyZSBzdWJzdGl0dXRlZCBpbnRvIENGTEFHU19GT1JfVEFSR0VUICh3aGljaCBpcyAiLU8yIC1nICQoQ0ZMQUdTKSIpIHZpYSAkKENGTEFHUykuIEl0IGlzIGFsc28gY2xlYW5lciB0aGlzIHdheSB0aG91Z2guCisKKy0gcGFzc2luZyB0aGUgcmlnaHQgQ0ZMQUdTIHRvIGNvbmZpZ3VyZSBzY3JpcHRzIGFzIGV4cG9ydGVkIGVudmlyb25tZW50IHZhcmlhYmxlcworCitJIGFsc28gc3RvcHBlZCBwYXNzaW5nIExJQkNGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBzaW5jZSB0aGV5IGFyZSB1bnVzZWQgaW4gdGhlIHdob2xlIHNyYyB0cmVlLiBBbmQgSSB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uIGFzIEgtUCByZW1pbmRlZCBtZSB0byBkby4KKworQm9vdHN0cmFwcGVkL3JlZ3Rlc3RlZCBpNjg2LXBjLWxpbnV4LWdudSwgd2lsbCBjb21taXQgdG8gNC40IHNob3J0bHkuIE9rIGZvciA0LjM/CisKK1NpZ25lZC1vZmYtYnk6IFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZSB8IDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggNTBlN2NiYy4uNmI5NzY5MyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNjczMyw2ICs2NzMzLDM4IEBAIGZpCisgCisgCisgCisrIyBEdXJpbmcgZ2NjIGJvb3RzdHJhcCwgaWYgd2UgdXNlIHNvbWUgcmFuZG9tIGNjIGZvciBzdGFnZTEgdGhlbiBDRkxBR1MKKysjIG1pZ2h0IGJlIGVtcHR5IG9yICItZyIuICBXZSBkb24ndCByZXF1aXJlIGEgQysrIGNvbXBpbGVyLCBzbyBDWFhGTEFHUworKyMgbWlnaHQgYWxzbyBiZSBlbXB0eSAob3IgIi1nIiwgaWYgYSBub24tR0NDIEMrKyBjb21waWxlciBpcyBpbiB0aGUgcGF0aCkuCisrIyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IFRBUkdFVCBsaWJyYXJpZXMgKHdoaWNoIHdlIGtub3cgYXJlIGJ1aWx0IHdpdGgKKysjIGdjYykgYXJlIGJ1aWx0IHdpdGggIi1PMiAtZyIsIHNvIGluY2x1ZGUgdGhvc2Ugb3B0aW9ucyB3aGVuIHNldHRpbmcKKysjIENGTEFHU19GT1JfVEFSR0VUIGFuZCBDWFhGTEFHU19GT1JfVEFSR0VULgorK2lmIHRlc3QgIngkQ0ZMQUdTX0ZPUl9UQVJHRVQiID0geDsgdGhlbgorKyAgQ0ZMQUdTX0ZPUl9UQVJHRVQ9JENGTEFHUworKyAgY2FzZSAiICRDRkxBR1MgIiBpbgorKyAgICAqIiAtTzIgIiopIDs7CisrICAgICopIENGTEFHU19GT1JfVEFSR0VUPSItTzIgJENGTEFHUyIgOzsKKysgIGVzYWMKKysgIGNhc2UgIiAkQ0ZMQUdTICIgaW4KKysgICAgKiIgLWcgIiogfCAqIiAtZzMgIiopIDs7CisrICAgICopIENGTEFHU19GT1JfVEFSR0VUPSItZyAkQ0ZMQUdTIiA7OworKyAgZXNhYworK2ZpCisrCisrCisraWYgdGVzdCAieCRDWFhGTEFHU19GT1JfVEFSR0VUIiA9IHg7IHRoZW4KKysgIENYWEZMQUdTX0ZPUl9UQVJHRVQ9JENYWEZMQUdTCisrICBjYXNlICIgJENYWEZMQUdTICIgaW4KKysgICAgKiIgLU8yICIqKSA7OworKyAgICAqKSBDWFhGTEFHU19GT1JfVEFSR0VUPSItTzIgJENYWEZMQUdTIiA7OworKyAgZXNhYworKyAgY2FzZSAiICRDWFhGTEFHUyAiIGluCisrICAgICoiIC1nICIqIHwgKiIgLWczICIqKSA7OworKyAgICAqKSBDWFhGTEFHU19GT1JfVEFSR0VUPSItZyAkQ1hYRkxBR1MiIDs7CisrICBlc2FjCisrZmkKKysKKysKKyAjIEhhbmRsZSAtLXdpdGgtaGVhZGVycz1YWFguICBJZiB0aGUgdmFsdWUgaXMgbm90ICJ5ZXMiLCB0aGUgY29udGVudHMgb2YKKyAjIHRoZSBuYW1lZCBkaXJlY3RvcnkgYXJlIGNvcGllZCB0byAkKHRvb2xkaXIpL3N5cy1pbmNsdWRlLgorIGlmIHRlc3QgeCIke3dpdGhfaGVhZGVyc30iICE9IHggJiYgdGVzdCB4IiR7d2l0aF9oZWFkZXJzfSIgIT0geG5vIDsgdGhlbgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEzLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMy02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2MwNjYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMy02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaApAQCAtMCwwICsxLDg1IEBACitGcm9tIGQ1MTUxYmViZDA3OWU5ODFkYzcxMGYyYTAzMTgzMGQ4OWNiMWU3MmUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxMDowNiArMDQwMAorU3ViamVjdDogW1BBVENIIDEzLzM1XSA2NC1iaXQgbXVsdGlsaWIgaGFjay4KKworR0NDIGhhcyBpbnRlcm5hbCBtdWx0aWxpYiBoYW5kbGluZyBjb2RlIGJ1dCBpdCBhc3N1bWVzIGEgdmVyeSBzcGVjaWZpYyByaWdpZCBkaXJlY3RvcnkKK2xheW91dC4gVGhlIGJ1aWxkIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiBvZiBtdWx0aWxpYiBsYXlvdXQgaXMgdmVyeSBnZW5lcmljIGFuZCBhbGxvd3MKK2NvbXBsZXRlIGN1c3RvbWlzYXRpb24gb2YgdGhlIGxpYnJhcnkgZGlyZWN0b3JpZXMuCisKK1RoaXMgcGF0Y2ggaXMgYSBwYXJ0aWFsIHNvbHV0aW9uIHRvIGFsbG93IGFueSBjdXN0b20gZGlyZWN0b3JpZXMgdG8gYmUgcGFzc2VkIGludG8gZ2NjCithbmQgaGFuZGxlZCBjb3JyZWN0bHkuIEl0IGZvcmNlcyBnY2MgdG8gdXNlIHRoZSBiYXNlX2xpYmRpciAod2hpY2ggaXMgdGhlIGN1cnJlbnQKK2RpcmVjdG9yeSwgIi4iKS4gV2UgbmVlZCB0byBkbyB0aGlzIGZvciBlYWNoIG11bHRpbGliIHRoYXQgaXMgY29uZmlndXJlZCBhcyB3ZSBkb24ndAora25vdyB3aGljaCBjb21waWxlciBvcHRpb25zIG1heSBiZSBiZWluZyBwYXNzZWQgaW50byB0aGUgY29tcGlsZXIuIFNpbmNlIHdlIGhhdmUgYSBjb21waWxlcgorcGVyIG11bGl0bGliIGF0IHRoaXMgcG9pbnQgdGhhdCBpc24ndCBhbiBpc3N1ZS4KKworVGhlIG9uZSBwcm9ibGVtIGlzIHRoZSB0YXJnZXQgY29tcGlsZXIgaXMgb25seSBnb2luZyB0byB3b3JrIGZvciB0aGUgZGVmYXVsdCBtdWx0bGlsaWIgYXQKK3RoaXMgcG9pbnQuIElkZWFsbHkgd2UnZCBmaWd1cmUgb3V0IHdoaWNoIG11bHRpbGlicyB3ZXJlIGJlaW5nIGVuYWJsZWQgd2l0aCB3aGljaCBwYXRocworYW5kIGJlIGFibGUgdG8gcGF0Y2ggdGhlc2UgZW50cmllcyB3aXRoIGEgY29tcGxldGUgc2V0IG9mIGNvcnJlY3QgcGF0aHMgYnV0IHRoaXMgd2UKK2Rvbid0IGhhdmUgc3VjaCBjb2RlIGF0IHRoaXMgcG9pbnQuIFRoaXMgaXMgc29tZXRoaW5nIHRoZSB0YXJnZXQgZ2NjIHJlY2lwZSBzaG91bGQgZG8KK2FuZCBvdmVycmlkZSB0aGVzZSBwbGF0Zm9ybSBkZWZhdWx0cyBpbiBpdHMgYnVpbGQgY29uZmlnLgorCitSUCAxNS84LzExCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBFbHZpcyBEb3dzb24gPGVsdmlzLmRvd3NvbkBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NCAgIHwgIDYgKystLS0tCisgZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NCAgIHwgMTAgKysrLS0tLS0tLQorIGdjYy9jb25maWcvcnM2MDAwL3QtbGludXg2NCB8ICA1ICsrLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NCBiL2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKK2luZGV4IGY2ZGJiNzguLmQ3NzBkYTUgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0CisrKysgYi9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0CitAQCAtMzIsNyArMzIsNSBAQAorICMKKyBjb21tYT0sCisgTVVMVElMSUJfT1BUSU9OUyAgICA9ICQoc3Vic3QgJChjb21tYSksLywkKFRNX01VTFRJTElCX0NPTkZJRykpCistTVVMVElMSUJfRElSTkFNRVMgICA9ICQocGF0c3Vic3QgbSUsICUsICQoc3Vic3QgLywgLCQoTVVMVElMSUJfT1BUSU9OUykpKQorLU1VTFRJTElCX09TRElSTkFNRVMgPSBtNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDp4ODZfNjQtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMrPSBtMzI9JChpZiAkKHdpbGRjYXJkICQoc2hlbGwgZWNobyAkKFNZU1RFTV9IRUFERVJfRElSKSkvLi4vLi4vdXNyL2xpYjMyKSwuLi9saWIzMiwuLi9saWIpJChjYWxsIGlmX211bHRpYXJjaCw6aTM4Ni1saW51eC1nbnUpCistTVVMVElMSUJfT1NESVJOQU1FUys9IG14MzI9Li4vbGlieDMyJChjYWxsIGlmX211bHRpYXJjaCw6eDg2XzY0LWxpbnV4LWdudXgzMikKKytNVUxUSUxJQl9ESVJOQU1FUyA9IC4gLgorK01VTFRJTElCX09TRElSTkFNRVMgPSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKQorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQgYi9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0CitpbmRleCA3ZTk2NDA2Li5iNzJkY2IwIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorKysrIGIvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorQEAgLTE3LDEwICsxNyw2IEBACisgIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgCisgTVVMVElMSUJfT1BUSU9OUyA9IG1hYmk9bjMyL21hYmk9MzIvbWFiaT02NAorLU1VTFRJTElCX0RJUk5BTUVTID0gbjMyIDMyIDY0CistTUlQU19FTCA9ICQoaWYgJChmaWx0ZXIgJWVsLCAkKGZpcnN0d29yZCAkKHN1YnN0IC0sICwkKHRhcmdldCkpKSksZWwpCistTUlQU19TT0ZUID0gJChpZiAkKHN0cmlwICQoZmlsdGVyIE1BU0tfU09GVF9GTE9BVF9BQkksICQodGFyZ2V0X2NwdV9kZWZhdWx0KSkgJChmaWx0ZXIgc29mdCwgJCh3aXRoX2Zsb2F0KSkpLHNvZnQpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IFwKKy0JLi4vbGliMzIkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzNjQkKE1JUFNfRUwpLWxpbnV4LWdudWFiaW4zMiQoTUlQU19TT0ZUKSkgXAorLQkuLi9saWIkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzJChNSVBTX0VMKS1saW51eC1nbnUkKE1JUFNfU09GVCkpIFwKKy0JLi4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzNjQkKE1JUFNfRUwpLWxpbnV4LWdudWFiaTY0JChNSVBTX1NPRlQpKQorK01VTFRJTElCX0RJUk5BTUVTID0gLiAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKKysKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQgYi9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKK2luZGV4IGI2YjM1MWQuLjFkNWIzN2EgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKKysrKyBiL2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorQEAgLTI2LDEwICsyNiw5IEBACisgIyBNVUxUSUxJQl9PU0RJUk5BTUVTIGFjY29yZGluZyB0byB3aGF0IGlzIGZvdW5kIG9uIHRoZSB0YXJnZXQuCisgCisgTVVMVElMSUJfT1BUSU9OUyAgICA6PSBtNjQvbTMyCistTVVMVElMSUJfRElSTkFNRVMgICA6PSA2NCAzMgorK01VTFRJTElCX0RJUk5BTUVTICAgOj0gLiAuCisgTVVMVElMSUJfRVhUUkFfT1BUUyA6PSAKKy1NVUxUSUxJQl9PU0RJUk5BTUVTIDo9IG02ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOnBvd2VycGM2NC1saW51eC1nbnUpCistTVVMVElMSUJfT1NESVJOQU1FUyArPSBtMzI9JChpZiAkKHdpbGRjYXJkICQoc2hlbGwgZWNobyAkKFNZU1RFTV9IRUFERVJfRElSKSkvLi4vLi4vdXNyL2xpYjMyKSwuLi9saWIzMiwuLi9saWIpJChjYWxsIGlmX211bHRpYXJjaCw6cG93ZXJwYy1saW51eC1nbnUpCisrTVVMVElMSUJfT1NESVJOQU1FUyA6PSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKQorIAorIHJzNjAwMC1saW51eC5vOiAkKHNyY2RpcikvY29uZmlnL3JzNjAwMC9yczYwMDAtbGludXguYworIAkkKENPTVBJTEUpICQ8CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzRmZTQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNC1vcHRpb25hbC1saWJzdGRjLnBhdGNoCkBAIC0wLDAgKzEsMTAxIEBACitGcm9tIGQ3YjQyZDkzZDA3N2IyNTIzYzI2ZjBkZmYwYjZjNDRmZGZmZjlkM2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxMjo1NiArMDQwMAorU3ViamVjdDogW1BBVENIIDE0LzM1XSBvcHRpb25hbCBsaWJzdGRjCisKK2djYy1ydW50aW1lIGJ1aWxkcyBsaWJzdGRjKysgc2VwYXJhdGVseSBmcm9tIGdjYy1jcm9zcy0qLiBJdHMgY29uZmlndXJlIHRlc3RzIHVzaW5nIGcrKword2lsbCBub3QgcnVuIGNvcnJlY3RseSBzaW5jZSBieSBkZWZhdWx0IHRoZSBsaW5rZXIgd2lsbCB0cnkgdG8gbGluayBhZ2FpbnN0IGxpYnN0ZGMrKword2hpY2ggc2hvdWxkbid0IGV4aXN0IHlldC4gV2UgbmVlZCBhbiBvcHRpb24gdG8gZGlzYWJsZSAtbHN0ZGMrKworb3B0aW9uIHdoaWxzdCBsZWF2aW5nIC1sYywgLWxnY2MgYW5kIG90aGVyIGF1dG9tYXRpYyBsaWJyYXJ5IGRlcGVuZGVuY2llcyBhZGRlZCBieSBnY2MKK2RyaXZlci4gVGhpcyBwYXRjaCBhZGRzIHN1Y2ggYW4gb3B0aW9uIHdoaWNoIG9ubHkgZGlzYWJsZXMgdGhlIC1sc3RkYysrLgorCitBICJzdGFuZGFyZCIgZ2NjIGJ1aWxkIHVzZXMgeGdjYyBhbmQgaGVuY2UgYXZvaWRzIHRoaXMuIFdlIHNob3VsZCBhc2sgdXBzdHJlYW0gaG93IHRvCitkbyB0aGlzIG9mZmljaWFsbHksIHRoZSBsaWtlbHkgYW5zd2VyIGlzIGRvbid0IGJ1aWxkIGxpYnN0ZGMrKyBzZXBhcmF0ZWx5LgorCitSUCAyOS82LzEwCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBnY2MvYy1mYW1pbHkvYy5vcHQgIHwgNCArKysrCisgZ2NjL2NwL2crK3NwZWMuYyAgICB8IDEgKworIGdjYy9kb2MvaW52b2tlLnRleGkgfCA4ICsrKysrKystCisgZ2NjL2djYy5jICAgICAgICAgICB8IDEgKworIDQgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2MtZmFtaWx5L2Mub3B0IGIvZ2NjL2MtZmFtaWx5L2Mub3B0CitpbmRleCA5ODNmNGE4Li45NjkyNGY2IDEwMDY0NAorLS0tIGEvZ2NjL2MtZmFtaWx5L2Mub3B0CisrKysgYi9nY2MvYy1mYW1pbHkvYy5vcHQKK0BAIC0xNTQzLDYgKzE1NDMsMTAgQEAgbm9zdGRpbmMrKworIEMrKyBPYmpDKysKKyBEbyBub3Qgc2VhcmNoIHN0YW5kYXJkIHN5c3RlbSBpbmNsdWRlIGRpcmVjdG9yaWVzIGZvciBDKysKKyAKKytub3N0ZGxpYisrCisrRHJpdmVyCisrRG8gbm90IGxpbmsgc3RhbmRhcmQgQysrIHJ1bnRpbWUgbGlicmFyeQorKworIG8KKyBDIE9iakMgQysrIE9iakMrKyBKb2luZWQgU2VwYXJhdGUKKyA7IERvY3VtZW50ZWQgaW4gY29tbW9uLm9wdAorZGlmZiAtLWdpdCBhL2djYy9jcC9nKytzcGVjLmMgYi9nY2MvY3AvZysrc3BlYy5jCitpbmRleCA2NTM2ZDdlLi5mNTdhNWQ0IDEwMDY0NAorLS0tIGEvZ2NjL2NwL2crK3NwZWMuYworKysrIGIvZ2NjL2NwL2crK3NwZWMuYworQEAgLTEzOCw2ICsxMzgsNyBAQCBsYW5nX3NwZWNpZmljX2RyaXZlciAoc3RydWN0IGNsX2RlY29kZWRfb3B0aW9uICoqaW5fZGVjb2RlZF9vcHRpb25zLAorICAgICAgIHN3aXRjaCAoZGVjb2RlZF9vcHRpb25zW2ldLm9wdF9pbmRleCkKKyAJeworIAljYXNlIE9QVF9ub3N0ZGxpYjoKKysJY2FzZSBPUFRfbm9zdGRsaWJfXzoKKyAJY2FzZSBPUFRfbm9kZWZhdWx0bGliczoKKyAJICBsaWJyYXJ5ID0gLTE7CisgCSAgYnJlYWs7CitkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9pbnZva2UudGV4aSBiL2djYy9kb2MvaW52b2tlLnRleGkKK2luZGV4IDBkZjhhNDcuLjczODU2ZDAgMTAwNjQ0CistLS0gYS9nY2MvZG9jL2ludm9rZS50ZXhpCisrKysgYi9nY2MvZG9jL2ludm9rZS50ZXhpCitAQCAtMTk1LDYgKzE5NSw3IEBAIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisgLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIEBnb2wKKyAtZnZ0YWJsZS12ZXJpZnk9QHJ7W31zdGRAcnt8fXByZWluaXRAcnt8fW5vbmVAcntdfSBAZ29sCisgLWZ2dHYtY291bnRzIC1mdnR2LWRlYnVnIEBnb2wKKystbm9zdGRsaWIrKyBAZ29sCisgLWZ2aXNpYmlsaXR5LW1zLWNvbXBhdCBAZ29sCisgLWZleHQtbnVtZXJpYy1saXRlcmFscyBAZ29sCisgLVdhYmk9QHZhcntufSAgLVdhYmktdGFnICAtV2NvbnZlcnNpb24tbnVsbCAgLVdjdG9yLWR0b3ItcHJpdmFjeSBAZ29sCitAQCAtNDg4LDcgKzQ4OSw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KKyAtcyAgLXN0YXRpYyAtc3RhdGljLWxpYmdjYyAtc3RhdGljLWxpYnN0ZGMrKyBAZ29sCisgLXN0YXRpYy1saWJhc2FuIC1zdGF0aWMtbGlidHNhbiAtc3RhdGljLWxpYmxzYW4gLXN0YXRpYy1saWJ1YnNhbiBAZ29sCisgLXN0YXRpYy1saWJtcHggLXN0YXRpYy1saWJtcHh3cmFwcGVycyBAZ29sCistLXNoYXJlZCAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIEBnb2wKKystc2hhcmVkIC1zaGFyZWQtbGliZ2NjICAtc3ltYm9saWMgLW5vc3RkbGliKysgQGdvbAorIC1UIEB2YXJ7c2NyaXB0fSAgLVdsLEB2YXJ7b3B0aW9ufSAgLVhsaW5rZXIgQHZhcntvcHRpb259IEBnb2wKKyAtdSBAdmFye3N5bWJvbH0gLXogQHZhcntrZXl3b3JkfX0KKyAKK0BAIC0xMTE4NSw2ICsxMTE4NiwxMSBAQCBUaGVzZSBlbnRyaWVzIGFyZSB1c3VhbGx5IHJlc29sdmVkIGJ5IGVudHJpZXMgaW4KKyBsaWJjLiAgVGhlc2UgZW50cnkgcG9pbnRzIHNob3VsZCBiZSBzdXBwbGllZCB0aHJvdWdoIHNvbWUgb3RoZXIKKyBtZWNoYW5pc20gd2hlbiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisgCisrQGl0ZW0gLW5vc3RkbGliKysKKytAb3BpbmRleCBub3N0ZGxpYisrCisrRG8gbm90IHVzZSB0aGUgc3RhbmRhcmQgc3lzdGVtIEMrKyBydW50aW1lIGxpYnJhcmllcyB3aGVuIGxpbmtpbmcuCisrT25seSB0aGUgbGlicmFyaWVzIHlvdSBzcGVjaWZ5IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBsaW5rZXIuCisrCisgQGNpbmRleCBAb3B0aW9uey1sZ2NjfSwgdXNlIHdpdGggQG9wdGlvbnstbm9zdGRsaWJ9CisgQGNpbmRleCBAb3B0aW9uey1ub3N0ZGxpYn0gYW5kIHVucmVzb2x2ZWQgcmVmZXJlbmNlcworIEBjaW5kZXggdW5yZXNvbHZlZCByZWZlcmVuY2VzIGFuZCBAb3B0aW9uey1ub3N0ZGxpYn0KK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDY3NWJjYzEuLmEzN2VjOGIgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTg0NSw2ICs4NDUsNyBAQCBwcm9wZXIgcG9zaXRpb24gYW1vbmcgdGhlIG90aGVyIG91dHB1dCBmaWxlcy4gICovCisgICAgICUobWZsaWIpICIgU1RBQ0tfU1BMSVRfU1BFQyAiXAorICAgICAle2Zwcm9maWxlLWFyY3N8ZnByb2ZpbGUtZ2VuZXJhdGUqfGNvdmVyYWdlOi1sZ2Nvdn0gIiBTQU5JVElaRVJfU1BFQyAiIFwKKyAgICAgJXshbm9zdGRsaWI6JXshbm9kZWZhdWx0bGliczolKGxpbmtfc3NwKSAlKGxpbmtfZ2NjX2Nfc2VxdWVuY2UpfX1cCisrICAgICV7IW5vc3RkbGliKys6fVwKKyAgICAgJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVFfX0gJXtUKn0gfX19fX19IgorICNlbmRpZgorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE1LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZjFlM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE1LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitGcm9tIGFkMTU5Mjc5MTY5ODI4NmI4MDYyNmRkZDU2NzlmZjJlZjQ1N2FiNzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNDoyMCArMDQwMAorU3ViamVjdDogW1BBVENIIDE1LzM1XSBnY2M6IGRpc2FibGUgTUFTS19SRUxBWF9QSUNfQ0FMTFMgYml0CisKK1RoZSBuZXcgZmVhdHVyZSBhZGRlZCBhZnRlciA0LjMuMworImh0dHA6Ly93d3cucHViYnMubmV0LzIwMDkwOS9nY2MvOTQwNDgtcGF0Y2gtYWRkLXN1cHBvcnQtZm9yLXJtaXBzamFsci5odG1sIgord2lsbCBjYXVzZSBjYzFwbHVzIGVhdCB1cCBhbGwgdGhlIHN5c3RlbSBtZW1vcnkgd2hlbiBidWlsZCB3ZWJraXQtZ3RrLgorVGhlIGZ1bmN0aW9uIG1pcHNfZ2V0X3BpY19jYWxsX3N5bWJvbCBrZWVwcyBvbiByZWN1cnNpdmVseSBjYWxsaW5nIGl0c2VsZi4KK0Rpc2FibGUgdGhpcyBmZWF0dXJlIHRvIHdhbGsgYXNpZGUgdGhlIGJ1Zy4KKworU2lnbmVkLW9mZi1ieTogRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIGdjYy9jb25maWd1cmUgICAgfCA3IC0tLS0tLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgNyAtLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCAxODE3NDhlLi45MDA5MDY0IDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTI2NDUxLDEzICsyNjQ1MSw2IEBAICRhc19lY2hvX24gImNoZWNraW5nIGFzc2VtYmxlciBhbmQgbGlua2VyIGZvciBleHBsaWNpdCBKQUxSIHJlbG9jYXRpb24uLi4gIiA+JjY7CisgICAgICAgICBybSAtZiBjb25mdGVzdC4qCisgICAgICAgZmkKKyAgICAgZmkKKy0gICAgaWYgdGVzdCAkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MgPSB5ZXM7IHRoZW4KKy0gICAgICBpZiB0ZXN0IHgkdGFyZ2V0X2NwdV9kZWZhdWx0ID0geDsgdGhlbgorLSAgICAgICAgdGFyZ2V0X2NwdV9kZWZhdWx0PU1BU0tfUkVMQVhfUElDX0NBTExTCistICAgICAgZWxzZQorLSAgICAgICAgdGFyZ2V0X2NwdV9kZWZhdWx0PSIoJHRhcmdldF9jcHVfZGVmYXVsdCl8TUFTS19SRUxBWF9QSUNfQ0FMTFMiCistICAgICAgZmkKKy0gICAgZmkKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyIgPiY1CisgJGFzX2VjaG8gIiRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyIgPiY2OyB9CisgCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDhiMDcwNzguLmM3YTI4YjQgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtNDM2MSwxMyArNDM2MSw2IEBAIHg6CisgICAgICAgICBybSAtZiBjb25mdGVzdC4qCisgICAgICAgZmkKKyAgICAgZmkKKy0gICAgaWYgdGVzdCAkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MgPSB5ZXM7IHRoZW4KKy0gICAgICBpZiB0ZXN0IHgkdGFyZ2V0X2NwdV9kZWZhdWx0ID0geDsgdGhlbgorLSAgICAgICAgdGFyZ2V0X2NwdV9kZWZhdWx0PU1BU0tfUkVMQVhfUElDX0NBTExTCistICAgICAgZWxzZQorLSAgICAgICAgdGFyZ2V0X2NwdV9kZWZhdWx0PSIoJHRhcmdldF9jcHVfZGVmYXVsdCl8TUFTS19SRUxBWF9QSUNfQ0FMTFMiCistICAgICAgZmkKKy0gICAgZmkKKyAgICAgQUNfTVNHX1JFU1VMVCgkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MpCisgCisgICAgIEFDX0NBQ0hFX0NIRUNLKFtsaW5rZXIgZm9yIC5laF9mcmFtZSBwZXJzb25hbGl0eSByZWxheGF0aW9uXSwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OWRlMzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE2LUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSAyYjIyZWUyZTQ0Njg4ZjhhNzJiOWFmNzZhMDQzMWQ4NmJhYzAwZDQ3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTY6MjggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNi8zNV0gQ09MTEVDVF9HQ0NfT1BUSU9OUworCitUaGlzIHBhdGNoIGFkZHMgLS1zeXNyb290IGludG8gQ09MTEVDVF9HQ0NfT1BUSU9OUyB3aGljaCBpcyB1c2VkIHRvCitpbnZva2UgY29sbGVjdDIuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2djYy5jIHwgOSArKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IGEzN2VjOGIuLjg3YjQ3YzUgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTQzNTIsNiArNDM1MiwxNSBAQCBzZXRfY29sbGVjdF9nY2Nfb3B0aW9ucyAodm9pZCkKKyAJCXNpemVvZiAoIkNPTExFQ1RfR0NDX09QVElPTlM9IikgLSAxKTsKKyAKKyAgIGZpcnN0X3RpbWUgPSBUUlVFOworKyNpZmRlZiBIQVZFX0xEX1NZU1JPT1QKKysgIGlmICh0YXJnZXRfc3lzdGVtX3Jvb3RfY2hhbmdlZCAmJiB0YXJnZXRfc3lzdGVtX3Jvb3QpCisrICAgIHsKKysgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssICInLS1zeXNyb290PSIsIHNpemVvZigiJy0tc3lzcm9vdD0iKS0xKTsKKysgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssIHRhcmdldF9zeXN0ZW1fcm9vdCxzdHJsZW4odGFyZ2V0X3N5c3RlbV9yb290KSk7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCAiJyIsIDEpOworKyAgICAgIGZpcnN0X3RpbWUgPSBGQUxTRTsKKysgICAgfQorKyNlbmRpZgorICAgZm9yIChpID0gMDsgKGludCkgaSA8IG5fc3dpdGNoZXM7IGkrKykKKyAgICAgeworICAgICAgIGNvbnN0IGNoYXIgKmNvbnN0ICphcmdzOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE3LVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTA2MTMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApAQCAtMCwwICsxLDk2IEBACitGcm9tIDEyZjQ2N2JjNmQ4OTUzYmEzNDJmZTUxNjZiOWEyZjM5N2IzMzQ3OTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNzoyNSArMDQwMAorU3ViamVjdDogW1BBVENIIDE3LzM1XSBVc2UgdGhlIGRlZmF1bHRzLmggaW4gJHtCfSBpbnN0ZWFkIG9mICR7U30sIGFuZCB0LW9lIGluCisgJHtCfQorCitVc2UgdGhlIGRlZmF1bHRzLmggaW4gJHtCfSBpbnN0ZWFkIG9mICR7U30sIGFuZCB0LW9lIGluICR7Qn0sIHNvIHRoYXQKK3RoZSBzb3VyY2UgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGdjYy1jcm9zcy1pbml0aWFsLAorZ2NjLWNyb3NzLWludGVybWVkaWF0ZSwgZ2NjLWNyb3NzLCBnY2MtcnVudGltZSwgYW5kIGFsc28gdGhlIHNkayBidWlsZC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1doaWxlIGNvbXBpbGluZyBnY2MtY3Jvc3NzZGstaW5pdGlhbC14ODZfNjQgb24gc29tZSBob3N0LCB0aGVyZSBpcworb2NjYXNpb25hbGx5IGZhaWx1cmUgdGhhdCB0ZXN0IHRoZSBleGlzdGFuY2Ugb2YgZGVmYXVsdC5oIGRvZXNuJ3QKK3dvcmssIHRoZSByZWFzb24gaXMgdG1faW5jbHVkZV9saXN0PScqKiBkZWZhdWx0cy5oJyByYXRoZXIgdGhhbgordG1faW5jbHVkZV9saXN0PScqKiAuL2RlZmF1bHRzLmgnCisKK1NvIHdlIGFkZCB0aGUgdGVzdCBjb25kaXRpb24gZm9yIHRoaXMgc2l0dWF0aW9uLgorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgZ2NjL01ha2VmaWxlLmluICB8IDIgKy0KKyBnY2MvY29uZmlndXJlICAgIHwgNCArKy0tCisgZ2NjL2NvbmZpZ3VyZS5hYyB8IDQgKystLQorIGdjYy9ta2NvbmZpZy5zaCAgfCA0ICsrLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgoraW5kZXggNGFiNzQwNS4uNjYxYWUxNyAxMDA2NDQKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgorKysrIGIvZ2NjL01ha2VmaWxlLmluCitAQCAtNTAyLDcgKzUwMiw3IEBAIFRBUkdFVF9TWVNURU1fUk9PVCA9IEBUQVJHRVRfU1lTVEVNX1JPT1RACisgVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORSA9IEBUQVJHRVRfU1lTVEVNX1JPT1RfREVGSU5FQAorIAorIHhtYWtlX2ZpbGU9QHhtYWtlX2ZpbGVACistdG1ha2VfZmlsZT1AdG1ha2VfZmlsZUAKKyt0bWFrZV9maWxlPUB0bWFrZV9maWxlQCAuL3Qtb2UKKyBUTV9FTkRJQU5fQ09ORklHPUBUTV9FTkRJQU5fQ09ORklHQAorIFRNX01VTFRJTElCX0NPTkZJRz1AVE1fTVVMVElMSUJfQ09ORklHQAorIFRNX01VTFRJTElCX0VYQ0VQVElPTlNfQ09ORklHPUBUTV9NVUxUSUxJQl9FWENFUFRJT05TX0NPTkZJR0AKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggOTAwOTA2NC4uZjA1OWMyZiAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0xMTg0MSw4ICsxMTg0MSw4IEBAIGZvciBmIGluICR0bV9maWxlOyBkbworICAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKyAgICAgICAgOzsKKyAgICAgZGVmYXVsdHMuaCApCistICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvJGYiCistICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuLyRmIgorICAgICAgICA7OworICAgICAqICkKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS9jb25maWcvJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IGM3YTI4YjQuLjJlNjY4YTUgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtMTgzMiw4ICsxODMyLDggQEAgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorICAgICAgICA7OworICAgICBkZWZhdWx0cy5oICkKKy0gICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS8kZiIKKy0gICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vJGYiCisgICAgICAgIDs7CisgICAgICogKQorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKK2RpZmYgLS1naXQgYS9nY2MvbWtjb25maWcuc2ggYi9nY2MvbWtjb25maWcuc2gKK2luZGV4IGMzMmYwODcuLjY4MDNhYjkgMTAwNjQ0CistLS0gYS9nY2MvbWtjb25maWcuc2gKKysrKyBiL2djYy9ta2NvbmZpZy5zaAorQEAgLTc3LDcgKzc3LDcgQEAgaWYgWyAtbiAiJEhFQURFUlMiIF07IHRoZW4KKyAgICAgaWYgWyAkIyAtZ2UgMSBdOyB0aGVuCisgCWVjaG8gJyNpZmRlZiBJTl9HQ0MnID4+ICR7b3V0cHV0fVQKKyAJZm9yIGZpbGUgaW4gIiRAIjsgZG8KKy0JICAgIGlmIHRlc3QgeCIkZmlsZSIgPSB4ImRlZmF1bHRzLmgiOyB0aGVuCisrCSAgICBpZiB0ZXN0IHgiJGZpbGUiID0geCIuL2RlZmF1bHRzLmgiIC1vIHgiJGZpbGUiID0geCJkZWZhdWx0cy5oIjsgdGhlbgorIAkJcG9zdHBvbmVfZGVmYXVsdHNfaD0ieWVzIgorIAkgICAgZWxzZQorIAkJZWNobyAiIyBpbmNsdWRlIFwiJGZpbGVcIiIgPj4gJHtvdXRwdXR9VAorQEAgLTEwOSw3ICsxMDksNyBAQCBlc2FjCisgCisgIyBJZiB3ZSBwb3N0cG9uZWQgaW5jbHVkaW5nIGRlZmF1bHRzLmgsIGFkZCB0aGUgI2luY2x1ZGUgbm93LgorIGlmIHRlc3QgeCIkcG9zdHBvbmVfZGVmYXVsdHNfaCIgPSB4InllcyI7IHRoZW4KKy0gICAgZWNobyAiIyBpbmNsdWRlIFwiZGVmYXVsdHMuaFwiIiA+PiAke291dHB1dH1UCisrICAgIGVjaG8gIiMgaW5jbHVkZSBcIi4vZGVmYXVsdHMuaFwiIiA+PiAke291dHB1dH1UCisgZmkKKyAKKyAjIEFkZCBtdWx0aXBsZSBpbmNsdXNpb24gcHJvdGVjdGlvbiBndWFyZCwgcGFydCB0d28uCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTgtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE4LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNzMzOTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE4LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gOTU1MDZiNDRjOWVmNDcyNWZlZjUyZmE4NjRkM2QzZmNmOTMxZTQ0MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIwOjAxICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTgvMzVdIGZvcnRyYW4gY3Jvc3MtY29tcGlsZSBoYWNrLgorCisqIEZvcnRyYW4gd291bGQgaGF2ZSBzZWFyY2hlZCBmb3IgYXJtLWFuZ3N0cm9tLWdudWVhYmktZ2ZvcnRyYW4gYnV0IHdvdWxkIGhhdmUgdXNlZAordXNlZCBnZm9ydGFuLiBGb3IgZ2NjXzQuMi4yLmJiIHdlIHdhbnQgdG8gdXNlIHRoZSBnZm9ydHJhbiBjb21waWxlciBmcm9tIG91ciBjcm9zcworZGlyZWN0b3J5LgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgbGliZ2ZvcnRyYW4vY29uZmlndXJlICAgIHwgMiArLQorIGxpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYyB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZSBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQoraW5kZXggZTE1OTJmNy4uNzZkMTliMyAxMDA3NTUKKy0tLSBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQorKysrIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlCitAQCAtMTI3NDcsNyArMTI3NDcsNyBAQCBlc2FjCisgCisgIyBXZSBuZWVkIGdmb3J0cmFuIHRvIGNvbXBpbGUgcGFydHMgb2YgdGhlIGxpYnJhcnkKKyAjQUNfUFJPR19GQyhnZm9ydHJhbikKKy1GQz0iJEdGT1JUUkFOIgorKyNGQz0iJEdGT1JUUkFOIgorIGFjX2V4dD0ke2FjX2ZjX3NyY2V4dC1mfQorIGFjX2NvbXBpbGU9JyRGQyAtYyAkRkNGTEFHUyAkYWNfZmNmbGFnc19zcmNleHQgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisgYWNfbGluaz0nJEZDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkRkNGTEFHUyAkTERGTEFHUyAkYWNfZmNmbGFnc19zcmNleHQgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCitkaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCitpbmRleCAzNWE4YjM5Li42YTBkOGE5IDEwMDY0NAorLS0tIGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCisrKysgYi9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKK0BAIC0yNDAsNyArMjQwLDcgQEAgQUNfU1VCU1QoZW5hYmxlX3N0YXRpYykKKyAKKyAjIFdlIG5lZWQgZ2ZvcnRyYW4gdG8gY29tcGlsZSBwYXJ0cyBvZiB0aGUgbGlicmFyeQorICNBQ19QUk9HX0ZDKGdmb3J0cmFuKQorLUZDPSIkR0ZPUlRSQU4iCisrI0ZDPSIkR0ZPUlRSQU4iCisgQUNfUFJPR19GQyhnZm9ydHJhbikKKyAKKyAjIGV4dHJhIExEIEZsYWdzIHdoaWNoIGFyZSByZXF1aXJlZCBmb3IgdGFyZ2V0cworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE5LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxOS1saWJnY2Mtc2psai1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzUzOTRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxOS1saWJnY2Mtc2psai1jaGVjay5wYXRjaApAQCAtMCwwICsxLDc0IEBACitGcm9tIDk0ZjYxOWNkMzI1N2UzNWUyMGE4Nzc2NDBkMGNiOTBjMmIzZWZjMTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMDo1MCArMDQwMAorU3ViamVjdDogW1BBVENIIDE5LzM1XSBsaWJnY2Mtc2psai1jaGVjaworCithY19mbl9jX3RyeV9jb21waWxlIGRvZXNudCBzZWVtIHRvIGtlZXAgdGhlIGludGVybWVkaWF0ZSBmaWxlcword2hpY2ggYXJlIG5lZWRlZCBmb3Igc2psaiB0ZXN0IHRvIHBhc3Mgc2luY2UgaXQgZ3JlcHMgaW50byB0aGUKK2dlbmVyYXRlZCBmaWxlLiBTbyB3ZSBydW4gdGhlIGNvbXBpbGVyIGNvbW1hbmQgdXNpbmcgQUNfVFJZX0NPTU1BTkQKK3doaWNoIHRoZW4gZ2VuZXJhdGVzIHRoZSBuZWVkZWQgLnMgZmlsZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYmdjYy9jb25maWd1cmUgICAgfCAxMCArKysrKystLS0tCisgbGliZ2NjL2NvbmZpZ3VyZS5hYyB8IDEwICsrKystLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZ3VyZSBiL2xpYmdjYy9jb25maWd1cmUKK2luZGV4IDA4YzkzMTkuLjVmZmFlYjMgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlndXJlCisrKysgYi9saWJnY2MvY29uZmlndXJlCitAQCAtNDU3MCwxNyArNDU3MCwxOSBAQCB2b2lkIGZvbyAoKQorIH0KKyAKKyBfQUNFT0YKKy1DRkxBR1NfaG9sZD0kQ0ZMQUdTCistQ0ZMQUdTPSItLXNhdmUtdGVtcHMgLWZleGNlcHRpb25zIgorIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXVua25vd24KKy1pZiBhY19mbl9jX3RyeV9jb21waWxlOyB0aGVuIDoKKytpZiB7IGFjX3RyeT0nJHtDQy1jY30gLWZleGNlcHRpb25zIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiY1JworKyAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCisgICBpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9eWVzCisgICBlbGlmIGdyZXAgX1Vud2luZF9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9bm8KKyAgIGZpCisgZmkKKy1DRkxBR1M9JENGTEFHU19ob2xkCisgcm0gLWYgY29uZnRlc3QqCisgCisgZmkKK2RpZmYgLS1naXQgYS9saWJnY2MvY29uZmlndXJlLmFjIGIvbGliZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggMWM0MDVlOC4uZjUyOTc1ZCAxMDA2NDQKKy0tLSBhL2xpYmdjYy9jb25maWd1cmUuYWMKKysrKyBiL2xpYmdjYy9jb25maWd1cmUuYWMKK0BAIC0yNTUsMTYgKzI1NSwxNCBAQCB2b2lkIGZvbyAoKQorICAgYmFyKCk7CisgfQorIF0pXSkKKy1DRkxBR1NfaG9sZD0kQ0ZMQUdTCistQ0ZMQUdTPSItLXNhdmUtdGVtcHMgLWZleGNlcHRpb25zIgorIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXVua25vd24KKy1BU19JRihbYWNfZm5fY190cnlfY29tcGlsZV0sCistICBbaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisraWYgQUNfVFJZX0NPTU1BTkQoJHtDQy1jY30gLWZleGNlcHRpb25zIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiZBU19NRVNTQUdFX0xPR19GRCk7IHRoZW4KKysgIGlmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz15ZXMKKyAgIGVsaWYgZ3JlcCBfVW53aW5kX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz1ubworLSAgZmldKQorLUNGTEFHUz0kQ0ZMQUdTX2hvbGQKKysgIGZpCisrZmkKKyBybSAtZiBjb25mdGVzdCoKKyBdKQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIwLWNwcC1ob25vci1zeXNyb290LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMC1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWJjNjhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMC1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIDZlNjI4M2Q2NDVjODNjYTUzNDIxOWEwMmFlODgyYTNkN2JlOTVmZjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMjowMCArMDQwMAorU3ViamVjdDogW1BBVENIIDIwLzM1XSBjcHA6IGhvbm9yIHN5c3Jvb3QuCisKK0N1cnJlbnRseSwgaWYgdGhlIGdjYyB0b29sY2hhaW4gaXMgcmVsb2NhdGVkIGFuZCBpbnN0YWxsZWQgZnJvbSBzc3RhdGUsIHRoZW4geW91IHRyeSBhbmQgY29tcGlsZQorcHJlcHJvY2Vzc2VkIHNvdXJjZSAoLmkgb3IgLmlpIGZpbGVzKSwgdGhlIGNvbXBpbGVyIHdpbGwgdHJ5IGFuZCBhY2Nlc3MgdGhlIGJ1aWx0aW4gc3lzcm9vdCBsb2NhdGlvbgorcmF0aGVyIHRoYW4gdGhlIC0tc3lzcm9vdCBvcHRpb24gc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kbGluZS4gSWYgYWNjZXNzIHRvIHRoYXQgZGlyZWN0b3J5IGlzCitwZXJtaXNzaW9uIGRlbmllZCAodW5yZWFkYWJsZSksIGdjYyB3aWxsIGVycm9yLgorCitUaGlzIGhhcHBlbnMgd2hlbiBjY2FjaGUgaXMgaW4gdXNlIGR1ZSB0byB0aGUgZmFjdCBpdCB1c2VzIHByZXByb2Nlc3NlZCBzb3VyY2UgZmlsZXMuCisKK1RoZSBmaXggYmVsb3cgYWRkcyAlSSB0byB0aGUgY3BwLW91dHB1dCBzcGVjIG1hY3JvIHNvIHRoZSBkZWZhdWx0IHN1YnN0aXR1dGlvbnMgZm9yIC1pcHJlZml4LAorLWlzeXN0ZW0sIC1pc3lzcm9vdCBoYXBwZW4gYW5kIHRoZSBjb3JyZWN0IHN5c3Jvb3QgaXMgdXNlZC4KKworW1lPQ1RPICMyMDc0XQorCitSUCAyMDEyLzA0LzEzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NwL2xhbmctc3BlY3MuaCB8IDIgKy0KKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NwL2xhbmctc3BlY3MuaCBiL2djYy9jcC9sYW5nLXNwZWNzLmgKK2luZGV4IGIwNzI4ZjAuLmU2OWVlN2QgMTAwNjQ0CistLS0gYS9nY2MvY3AvbGFuZy1zcGVjcy5oCisrKysgYi9nY2MvY3AvbGFuZy1zcGVjcy5oCitAQCAtNjMsNSArNjMsNSBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgeyIuaWkiLCAiQGMrKy1jcHAtb3V0cHV0IiwgMCwgMCwgMH0sCisgICB7IkBjKystY3BwLW91dHB1dCIsCisgICAgIiV7IU06JXshTU06JXshRTpcCistICAgIGNjMXBsdXMgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJTJcCisrICAgIGNjMXBsdXMgLWZwcmVwcm9jZXNzZWQgJWkgJUkgJShjYzFfb3B0aW9ucykgJTJcCisgICAgICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA4N2I0N2M1Li5lNmVmYWU3IDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMTQyLDcgKzExNDIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBpbGVyIGRlZmF1bHRfY29tcGlsZXJzW10gPQorICAgICAgICAgICAgICAgICAgICAgJVd7byo6LS1vdXRwdXQtcGNoPSUqfX0lVn19fX19fSIsIDAsIDAsIDB9LAorICAgeyIuaSIsICJAY3BwLW91dHB1dCIsIDAsIDAsIDB9LAorICAgeyJAY3BwLW91dHB1dCIsCistICAgIiV7IU06JXshTU06JXshRTpjYzEgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKKysgICAiJXshTToleyFNTToleyFFOmNjMSAtZnByZXByb2Nlc3NlZCAlaSAlSSAlKGNjMV9vcHRpb25zKSAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorICAgeyIucyIsICJAYXNzZW1ibGVyIiwgMCwgMCwgMH0sCisgICB7IkBhc3NlbWJsZXIiLAorICAgICIleyFNOiV7IU1NOiV7IUU6JXshUzphcyAlKGFzbV9kZWJ1ZykgJShhc21fb3B0aW9ucykgJWkgJUEgfX19fSIsIDAsIDAsIDB9LAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIxLU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIxLU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FhZDQ4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjEtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApAQCAtMCwwICsxLDU3IEBACitGcm9tIDdmNzY2ZmM0N2Y5Mzg4ZGQwMDk0ODUyYTQzZjFhZjI1NjhiNGI5YjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMzowOCArMDQwMAorU3ViamVjdDogW1BBVENIIDIxLzM1XSBNSVBTNjQ6IERlZmF1bHQgdG8gTjY0IEFCSQorCitNSVBTNjQgZGVmYXVsdHMgdG8gbjMyIEFCSSwgdGhpcyBwYXRjaCBtYWtlcyBpdAorc28gdGhhdCBpdCBkZWZhdWx0cyB0byBONjQgQUJJCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlnIHNwZWNpZmljXQorLS0tCisgZ2NjL2NvbmZpZy5nY2MgfCAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcuZ2NjIGIvZ2NjL2NvbmZpZy5nY2MKK2luZGV4IGNiMDhhNWMuLmIxNTU3NDQgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnLmdjYworKysrIGIvZ2NjL2NvbmZpZy5nY2MKK0BAIC0yMDExLDI5ICsyMDExLDI5IEBAIG1pcHMqLSotbGludXgqKQkJCQkjIExpbnV4IE1JUFMsIGVpdGhlciBlbmRpYW4uCisgCQkJZGVmYXVsdF9taXBzX2FyY2g9bWlwczMyCisgCQkJOzsKKyAJCW1pcHM2NGVsLXN0LWxpbnV4LWdudSkKKy0JCQlkZWZhdWx0X21pcHNfYWJpPW4zMgorKwkJCWRlZmF1bHRfbWlwc19hYmk9NjQKKyAJCQl0bV9maWxlPSIke3RtX2ZpbGV9IG1pcHMvc3QuaCIKKyAJCQl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IG1pcHMvdC1zdCIKKyAJCQllbmFibGVfbWlwc19tdWx0aWxpYnM9InllcyIKKyAJCQk7OworIAkJbWlwczY0b2N0ZW9uKi0qLWxpbnV4KikKKy0JCQlkZWZhdWx0X21pcHNfYWJpPW4zMgorKwkJCWRlZmF1bHRfbWlwc19hYmk9NjQKKyAJCQl0bV9kZWZpbmVzPSIke3RtX2RlZmluZXN9IE1JUFNfQ1BVX1NUUklOR19ERUZBVUxUPVxcXCJvY3Rlb25cXFwiIgorIAkJCXRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1NPRlRfRkxPQVRfQUJJCisgCQkJZW5hYmxlX21pcHNfbXVsdGlsaWJzPSJ5ZXMiCisgCQkJOzsKKyAJCW1pcHNpc2E2NHI2Ki0qLWxpbnV4KikKKy0JCQlkZWZhdWx0X21pcHNfYWJpPW4zMgorKwkJCWRlZmF1bHRfbWlwc19hYmk9NjQKKyAJCQlkZWZhdWx0X21pcHNfYXJjaD1taXBzNjRyNgorIAkJCWVuYWJsZV9taXBzX211bHRpbGlicz0ieWVzIgorIAkJCTs7CisgCQltaXBzaXNhNjRyMiotKi1saW51eCopCistCQkJZGVmYXVsdF9taXBzX2FiaT1uMzIKKysJCQlkZWZhdWx0X21pcHNfYWJpPTY0CisgCQkJZGVmYXVsdF9taXBzX2FyY2g9bWlwczY0cjIKKyAJCQllbmFibGVfbWlwc19tdWx0aWxpYnM9InllcyIKKyAJCQk7OworIAkJbWlwczY0Ki0qLWxpbnV4KiB8IG1pcHNpc2E2NCotKi1saW51eCopCistCQkJZGVmYXVsdF9taXBzX2FiaT1uMzIKKysJCQlkZWZhdWx0X21pcHNfYWJpPTY0CisgCQkJZW5hYmxlX21pcHNfbXVsdGlsaWJzPSJ5ZXMiCisgCQkJOzsKKyAJZXNhYworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIyLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIyLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1MjBkMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjItRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaApAQCAtMCwwICsxLDIxNiBAQAorRnJvbSA0Zjk0YWRkZWQ4YjcwNDM2NDIzODZiMzFlZDRjM2ExYmQwMTZmMzE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjQ6NTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMi8zNV0gRGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIGFuZCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIKKyByZWxhdGl2ZSB0byBTWVNURU1MSUJTX0RJUgorCitUaGlzIHBhdGNoIGRlZmluZXMgR0xJQkNfRFlOQU1JQ19MSU5LRVIgYW5kIFVDTElCQ19EWU5BTUlDX0xJTktFUgorcmVsYXRpdmUgdG8gU1lTVEVNTElCU19ESVIgd2hpY2ggY2FuIGJlIHNldCBpbiBnZW5lcmF0ZWQgaGVhZGVycworVGhpcyBicmVha3MgdGhlIGFzc3VtcHRpb24gb2YgaGFyZGNvZGVkIG11bHRpbGliIGluIGdjYworQ2hhbmdlIGlzIG9ubHkgZm9yIHRoZSBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcyBpbiBPRSBpbmNsdWRpbmcKK1NILCBzcGFyYywgYWxwaGEgZm9yIHBvc3NpYmxlIGZ1dHVyZSBzdXBwb3J0IChpZiBhbnkpCisKK1JlbW92ZXMgdGhlIGRvX2hlYWRlcmZpeCB0YXNrIGluIG1ldGFkYXRhCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlndXJhdGlvbl0KKy0tLQorIGdjYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmggfCAgNCArKy0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oICB8ICA0ICsrLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCAgIHwgIDIgKy0KKyBnY2MvY29uZmlnL2kzODYvbGludXguaCAgICAgIHwgIDIgKy0KKyBnY2MvY29uZmlnL2kzODYvbGludXg2NC5oICAgIHwgIDYgKysrLS0tCisgZ2NjL2NvbmZpZy9saW51eC5oICAgICAgICAgICB8ICA4ICsrKystLS0tCisgZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmggICAgICB8IDEyICsrKysrKy0tLS0tLQorIGdjYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaCAgfCAxMCArKysrKy0tLS0tCisgZ2NjL2NvbmZpZy9zaC9saW51eC5oICAgICAgICB8ICAyICstCisgZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oICAgICB8ICAyICstCisgZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmggICB8ICA0ICsrLS0KKyAxMSBmaWxlcyBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspLCAyOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmggYi9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCitpbmRleCAyYzcwYTJmLi5kZDA0OGRiIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAorKysrIGIvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAorQEAgLTIzLDggKzIzLDggQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAjZGVmaW5lIEVYVFJBX1NQRUNTIFwKKyB7ICJlbGZfZHluYW1pY19saW5rZXIiLCBFTEZfRFlOQU1JQ19MSU5LRVIgfSwKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCSIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUglTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKKyAjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttZ2xpYmM6IiBHICI7OiIgVSAifSIKKyAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAoraW5kZXggZTlkNjVkYy4uY2ZkZjNmMCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorKysrIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCitAQCAtNjgsOCArNjgsOCBAQAorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgYW5kIFRBUkdFVF9ERUZBVUxUX0ZMT0FUX0FCSS4gICovCisgCisgI3VuZGVmICBHTElCQ19EWU5BTUlDX0xJTktFUgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCAiL2xpYi9sZC1saW51eC5zby4zIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCAiL2xpYi9sZC1saW51eC1hcm1oZi5zby4zIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMyIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0hBUkRfRkxPQVQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LWFybWhmLnNvLjMiCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9ERUZBVUxUIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFwKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitpbmRleCAxMjc5Y2JhLi4xZGRlNzQ3IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKysrKyBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitAQCAtNjIsNyArNjIsNyBAQAorIAorICNkZWZpbmUgTElCR0NDX1NQRUMgIiV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjZGVmaW5lIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgICIle2gqfSBcCisgICAgJXtzdGF0aWM6LUJzdGF0aWN9IFwKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvbGludXguaCBiL2djYy9jb25maWcvaTM4Ni9saW51eC5oCitpbmRleCBhMTAwOTYzLi4yMWJhMmIyIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKKysrKyBiL2djYy9jb25maWcvaTM4Ni9saW51eC5oCitAQCAtMjAsNCArMjAsNCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTiAiZWxmX2kzODYiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCBiL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKK2luZGV4IGEyN2QzYmUuLjYxODVjY2UgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCisrKysgYi9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCitAQCAtMjcsNiArMjcsNiBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9ONjQgImVsZl94ODZfNjQiCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTlgzMiAiZWxmMzJfeDg2XzY0IgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC1saW51eC5zby4yIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYjY0L2xkLWxpbnV4LXg4Ni02NC5zby4yIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgIi9saWJ4MzIvbGQtbGludXgteDMyLnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgteDg2LTY0LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgteDMyLnNvLjIiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9saW51eC5oIGIvZ2NjL2NvbmZpZy9saW51eC5oCitpbmRleCA4NTczODlhLi4yMmI5YmU1IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9saW51eC5oCisrKysgYi9nY2MvY29uZmlnL2xpbnV4LmgKK0BAIC03MywxMCArNzMsMTAgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVIgbXVzdCBiZSBkZWZpbmVkIGZvciBlYWNoIHRhcmdldCB1c2luZyB0aGVtLCBvcgorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgYW5kIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgZm9yIHRhcmdldHMKKyAgICBzdXBwb3J0aW5nIGJvdGggMzItYml0IGFuZCA2NC1iaXQgY29tcGlsYXRpb24uICAqLworLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYi9sZDY0LXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSWDMyICIvbGliL2xkeDMyLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSWDMyIFNZU1RFTUxJQlNfRElSICJsZHgzMi11Q2xpYmMuc28uMCIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUiAiL3N5c3RlbS9iaW4vbGlua2VyIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSMzIgIi9zeXN0ZW0vYmluL2xpbmtlciIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUjY0ICIvc3lzdGVtL2Jpbi9saW5rZXI2NCIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL21pcHMvbGludXguaCBiL2djYy9jb25maWcvbWlwcy9saW51eC5oCitpbmRleCA5MWRmMjYxLi5jMzA2YWZiIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKKysrKyBiL2djYy9jb25maWcvbWlwcy9saW51eC5oCitAQCAtMjIsMjAgKzIyLDIwIEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTk4zMiAiZWxmMzIle0VCOmJ9JXtFTDpsfXRzbWlwbjMyIgorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYi9sZC5zby4xfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1taXBzbjguc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQuc28uMX0iCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFwKKy0gICIle21uYW49MjAwODovbGliNjQvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWI2NC9sZC5zby4xfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1taXBzbjguc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQuc28uMX0iCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUk4zMiBcCistICAiJXttbmFuPTIwMDg6L2xpYjMyL2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliMzIvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorIAorICN1bmRlZiBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMgorICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliL2xkLXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wfSIKKyAjdW5kZWYgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFwKKy0gICIle21uYW49MjAwODovbGliL2xkNjQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliL2xkNjQtdUNsaWJjLnNvLjB9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wfSIKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUk4zMiBcCistICAiJXttbmFuPTIwMDg6L2xpYjMyL2xkLXVDbGliYy1taXBzbjguc28uMDs6L2xpYjMyL2xkLXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wfSIKKyAKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUk4zMiAiL3N5c3RlbS9iaW4vbGlua2VyMzIiCisgI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUk4zMiBcCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oIGIvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCitpbmRleCAwODc5ZTdlLi4zMWM0MzM4IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCisrKysgYi9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKK0BAIC0zNTcsMTQgKzM1NywxNCBAQCBleHRlcm4gaW50IGRvdF9zeW1ib2xzOworICN1bmRlZglMSU5LX09TX0RFRkFVTFRfU1BFQworICNkZWZpbmUgTElOS19PU19ERUZBVUxUX1NQRUMgIiUobGlua19vc19saW51eCkiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLnNvLjEiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC5zby4xIgorICNpZmRlZiBMSU5VWDY0X0RFRkFVTFRfQUJJX0VMRnYyCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjE6L2xpYjY0L2xkNjQuc28uMTs6L2xpYjY0L2xkNjQuc28uMn0iCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjE6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjJ9IgorICNlbHNlCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjI6L2xpYjY0L2xkNjQuc28uMjs6L2xpYjY0L2xkNjQuc28uMX0iCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjI6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4yOzoiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjF9IgorICNlbmRpZgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYi9sZDY0LXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCisgI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQworICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgorICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9zaC9saW51eC5oIGIvZ2NjL2NvbmZpZy9zaC9saW51eC5oCitpbmRleCAwZjVkNjE0Li4xNjg0MTZjIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9zaC9saW51eC5oCisrKysgYi9nY2MvY29uZmlnL3NoL2xpbnV4LmgKK0BAIC00Myw3ICs0Myw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgCisgI2RlZmluZSBUQVJHRVRfQVNNX0ZJTEVfRU5EIGZpbGVfZW5kX2luZGljYXRlX2V4ZWNfc3RhY2sKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjdW5kZWYgU1VCVEFSR0VUX0xJTktfRU1VTF9TVUZGSVgKKyAjZGVmaW5lIFNVQlRBUkdFVF9MSU5LX0VNVUxfU1VGRklYICJfbGludXgiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oIGIvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCitpbmRleCA1NmRlZjRiLi4wMGI1NjRjIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCisrKysgYi9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKK0BAIC04Myw3ICs4Myw3IEBAIGV4dGVybiBjb25zdCBjaGFyICpob3N0X2RldGVjdF9sb2NhbF9jcHUgKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CisgICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlvbiBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKKyAgICBkb25lLiAgKi8KKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjdW5kZWYgIExJTktfU1BFQworICNkZWZpbmUgTElOS19TUEVDICItbSBlbGYzMl9zcGFyYyAle3NoYXJlZDotc2hhcmVkfSBcCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmggYi9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAoraW5kZXggZmE4MDVmZC4uMGViNGFjZCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCisrKysgYi9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAorQEAgLTg0LDggKzg0LDggQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgICBXaGVuIHRoZSAtc2hhcmVkIGxpbmsgb3B0aW9uIGlzIHVzZWQgYSBmaW5hbCBsaW5rIGlzIG5vdCBiZWluZworICAgIGRvbmUuICAqLworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC1saW51eC5zby4yIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYjY0L2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjaWZkZWYgU1BBUkNfQklfQVJDSAorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIzLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjMtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMzdkZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIzLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIDhkYjYwNjIwNTQ4N2ViYjAzZWFlNzg4ODI2ZmFmNjRiZDY5MTg0NTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNjozNyArMDQwMAorU3ViamVjdDogW1BBVENIIDIzLzM1XSBnY2M6IEZpeCBhcmd1bWVudCBsaXN0IHRvbyBsb25nIGVycm9yLgorCitUaGVyZSB3b3VsZCBiZSBhbiAiQXJndW1lbnQgbGlzdCB0b28gbG9uZyIgZXJyb3Igd2hlbiB0aGUKK2J1aWxkIGRpcmVjdG9yeSBpcyBsb25nZXIgdGhhbiAyMDAsIHRoaXMgaXMgY2F1c2VkIGJ5OgorCitoZWFkZXJzPWBlY2hvICQoUExVR0lOX0hFQURFUlMpIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgLXVgCisKK1RoZSBQTFVHSU5fSEVBREVSUyBpcyB0b28gbG9uZyBiZWZvcmUgc29ydCwgc28gdGhlICJlY2hvIiBjYW4ndCBoYW5kbGUKK2l0LCB1c2UgdGhlICQoc29ydCBsaXN0KSBvZiBHTlUgbWFrZSB3aGljaCBjYW4gaGFuZGxlIHRoZSB0b28gbG9uZyBsaXN0Cit3b3VsZCBmaXggdGhlIHByb2JsZW0sIHRoZSBoZWFkZXIgd291bGQgYmUgc2hvcnQgZW5vdWdoIGFmdGVyIHNvcnRlZC4KK1RoZSAidHIgJyAnICdcMDEyJyIgd2FzIHVzZWQgZm9yIHRyYW5zbGF0aW5nIHRoZSBzcGFjZSB0byAiXG4iLCB0aGUKKyQoc29ydCBsaXN0KSBkb2Vzbid0IG5lZWQgdGhpcy4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9NYWtlZmlsZS5pbiB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgoraW5kZXggNjYxYWUxNy4uOTQ3MGE5MiAxMDA2NDQKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgorKysrIGIvZ2NjL01ha2VmaWxlLmluCitAQCAtMzI1NSw3ICszMjU1LDcgQEAgaW5zdGFsbC1wbHVnaW46IGluc3RhbGxkaXJzIGxhbmcuaW5zdGFsbC1wbHVnaW4gcy1oZWFkZXItdmFycyBpbnN0YWxsLWdlbmd0eXBlCisgIyBXZSBrZWVwIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBmaWxlcyBpbiBjb25maWcgb3IgYy1mYW1pbHkgYW5kIC5kZWYKKyAjIGZpbGVzLiBBbGwgb3RoZXIgZmlsZXMgYXJlIGZsYXR0ZW5lZCB0byBhIHNpbmdsZSBkaXJlY3RvcnkuCisgCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQocGx1Z2luX2luY2x1ZGVkaXIpCistCWhlYWRlcnM9YGVjaG8gJChQTFVHSU5fSEVBREVSUykgJCQoY2QgJChzcmNkaXIpOyBlY2hvICouaCAqLmRlZikgfCB0ciAnICcgJ1wwMTInIHwgc29ydCAtdWA7IFwKKysJaGVhZGVycz0iJChzb3J0ICQoUExVR0lOX0hFQURFUlMpICQkKGNkICQoc3JjZGlyKTsgZWNobyAqLmggKi5kZWYpKSI7IFwKKyAJc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYDsgXAorIAlmb3IgZmlsZSBpbiAkJGhlYWRlcnM7IGRvIFwKKyAJICBpZiBbIC1mICQkZmlsZSBdIDsgdGhlbiBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjQtRGlzYWJsZS1zZHQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI0LURpc2FibGUtc2R0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMjE5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI0LURpc2FibGUtc2R0LnBhdGNoCkBAIC0wLDAgKzEsMTEzIEBACitGcm9tIGUxMzYzNDJkMmY3YzBiZGIxY2Y0YjU3YWQzNDQwZDNjOWU3MTAzMjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyODoxMCArMDQwMAorU3ViamVjdDogW1BBVENIIDI0LzM1XSBEaXNhYmxlIHNkdC4KKworV2UgZG9uJ3QgbGlzdCBkdHJhY2UgaW4gREVQRU5EUyBzbyB3ZSBzaG91bGRuJ3QgYmUgZGVwZW5kaW5nIG9uIHRoaXMgaGVhZGVyLgorSXQgbWF5IG9yIG1heSBub3QgZXhpc3QgZnJvbSBwcmVpdm91cyBidWlsZHMgdGhvdWdoLiBUbyBiZSBkZXRlcm1pbnN0aWMsIGRpc2FibGUKK3NkdC5oIHVzYWdlIGFsd2F5cy4gVGhpcyBhdm9pZHMgYnVpbGQgZmFpbHVyZXMgaWYgdGhlIGhlYWRlciBpcyByZW1vdmVkIGFmdGVyIGNvbmZpZ3VyZQorYnV0IGJlZm9yZSBsaWJnY2MgaXMgY29tcGlsZWQgZm9yIGV4YW1wbGUuCisKK1JQIDIwMTIvOC83CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0Rpc2FibGUgc2R0IGZvciBsaWJzdGRjKystdjMuCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2hhY2tdCistLS0KKyBnY2MvY29uZmlndXJlICAgICAgICAgICAgIHwgMTIgKysrKysrLS0tLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyAgICAgICAgICB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWd1cmUgICAgfCAgNiArKystLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlLmFjIHwgIDIgKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IGYwNTljMmYuLjk4ODUzYjMgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjc3MzMsMTIgKzI3NzMzLDEyIEBAIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeS4uLiAiID4mNjsgfQorIGhhdmVfc3lzX3NkdF9oPW5vCistaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCistICBoYXZlX3N5c19zZHRfaD15ZXMKKy0KKy0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKy0KKy1maQorKyNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKysjICBoYXZlX3N5c19zZHRfaD15ZXMKKysjCisrIyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorKyMKKysjZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfc3lzX3NkdF9oIiA+JjUKKyAkYXNfZWNobyAiJGhhdmVfc3lzX3NkdF9oIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggMmU2NjhhNS4uNTJjZGNiOCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC01MjMyLDE1ICs1MjMyLDE1IEBAIGlmIHRlc3QgeCRnY2NfY3ZfbGliY19wcm92aWRlc19zc3AgPSB4eWVzOyB0aGVuCisgZmkKKyAKKyAjIFRlc3QgZm9yIDxzeXMvc2R0Lmg+IG9uIHRoZSB0YXJnZXQuCistR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQorLUFDX01TR19DSEVDS0lORyhzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkpCistaGF2ZV9zeXNfc2R0X2g9bm8KKy1pZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKy0gIGhhdmVfc3lzX3NkdF9oPXllcworLSAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorLSAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCistZmkKKy1BQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKysjR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQorKyNBQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQorKyNoYXZlX3N5c19zZHRfaD1ubworKyNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKysjICBoYXZlX3N5c19zZHRfaD15ZXMKKysjICBBQ19ERUZJTkUoSEFWRV9TWVNfU0RUX0gsIDEsCisrIyAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCisrI2ZpCisrI0FDX01TR19SRVNVTFQoJGhhdmVfc3lzX3NkdF9oKQorIAorICMgQ2hlY2sgaWYgVEZtb2RlIGxvbmcgZG91YmxlIHNob3VsZCBiZSB1c2VkIGJ5IGRlZmF1bHQgb3Igbm90LgorICMgU29tZSBnbGliYyB0YXJnZXRzIHVzZWQgREZtb2RlIGxvbmcgZG91YmxlLCBidXQgd2l0aCBnbGliYyAyLjQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQoraW5kZXggZmJhZDY2Ny4uN2Q1YTZjNiAxMDA3NTUKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK0BAIC0yMDg5NywxMSArMjA4OTcsMTEgQEAgYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisgYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorIAorLSAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KKysjICBpZiB0ZXN0ICRnbGliY3h4X2N2X3N5c19zZHRfaCA9IHllczsgdGhlbgorIAorLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKyAKKy0gIGZpCisrIyAgZmkKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNQorICRhc19lY2hvICIkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMgYi9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCitpbmRleCA3YTdjMWQ4Li5iMTNlYWJjIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworQEAgLTIyOSw3ICsyMjksNyBAQCBHTElCQ1hYX0NIRUNLX1NDX05QUk9DRVNTT1JTX09OTE4KKyBHTElCQ1hYX0NIRUNLX1NDX05QUk9DX09OTE4KKyBHTElCQ1hYX0NIRUNLX1BUSFJFQURTX05VTV9QUk9DRVNTT1JTX05QCisgR0xJQkNYWF9DSEVDS19TWVNDVExfSFdfTkNQVQorLUdMSUJDWFhfQ0hFQ0tfU0RUX0gKKysjR0xJQkNYWF9DSEVDS19TRFRfSAorIAorICMgQ2hlY2sgZm9yIGF2YWlsYWJsZSBoZWFkZXJzLgorIEFDX0NIRUNLX0hFQURFUlMoW2VuZGlhbi5oIGV4ZWNpbmZvLmggZmxvYXQuaCBmcC5oIGllZWVmcC5oIGludHR5cGVzLmggXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI1LWxpYnRvb2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI1LWxpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5NzdkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjUtbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDFjYTU0OTY3ZDhmNjdhYjBlY2E3NzIzMzRlNWM5MjVhNWU4YzgwY2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyOToxMSArMDQwMAorU3ViamVjdDogW1BBVENIIDI1LzM1XSBsaWJ0b29sCisKK2xpYnN0ZGMrKyBmcm9tIGdjYy1ydW50aW1lIGdldHMgY3JlYXRlZCB3aXRoIC1ycGF0aD0vdXNyL2xpYi8uLi9saWIgZm9yIHFlbXV4ODYtNjQKK3doZW4gcnVubmluZyBvbiBhbSB4ODZfNjQgYnVpbGQgaG9zdC4KKworVGhpcyBwYXRjaCBzdG9wcyB0aGlzIHNwZWFkaW5nIHRvIGxpYmRpciBpbiB0aGUgbGlic3RkYysrLmxhIGZpbGUgd2l0aGluIGxpYnRvb2wuCitBcmd1YWJseSwgaXQgc2hvdWxkbid0IGJlIHBhc3NpbmcgdGhpcyBpbnRvIGxpYnRvb2wgaW4gdGhlIGZpcnN0IHBsYWNlIGJ1dAorZm9yIG5vdyB0aGlzIHJlc29sdmVzIHRoZSBuYXN0aWVzdCBwcm9ibGVtcyB0aGlzIGNhdXNlcy4KKworZnVuY19ub3JtYWxfYWJzcGF0aCB3b3VsZCByZXNvbHZlIGFuIGVtcHR5IHBhdGggdG8gYHB3ZGAgc28gd2UgbmVlZAordG8gZmlsdGVyIHRoZSB6ZXJvIGNhc2UuCisKK1JQIDIwMTIvOC8yNAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGx0bWFpbi5zaCB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAoraW5kZXggOTUwM2VjOC4uMDEyMWZiYSAxMDA2NDQKKy0tLSBhL2x0bWFpbi5zaAorKysrIGIvbHRtYWluLnNoCitAQCAtNjM1OSw2ICs2MzU5LDEwIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgXGAtcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCisgCisgICAgICAgaW5zdGFsbF9saWJkaXI9IiQxIgorKyAgICAgIGlmIHRlc3QgLW4gIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KKysJZnVuY19ub3JtYWxfYWJzcGF0aCAiJGluc3RhbGxfbGliZGlyIgorKwlpbnN0YWxsX2xpYmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKKysgICAgICBmaQorIAorICAgICAgIG9sZGxpYnM9CisgICAgICAgaWYgdGVzdCAteiAiJHJwYXRoIjsgdGhlbgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI2LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI2LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhNjUyYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjYtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaApAQCAtMCwwICsxLDQzIEBACitGcm9tIDVmNWNhNTdmY2VjNGJhZmUzNzgwMzcxZDEzNDJhY2Q0MGM2MDg2OTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTozMDozMiArMDQwMAorU3ViamVjdDogW1BBVENIIDI2LzM1XSBnY2M6IGFybXY0OiBwYXNzIGZpeC12NGJ4IHRvIGxpbmtlciB0byBzdXBwb3J0IEVBQkkuCisKK1RoZSBMSU5LX1NQRUMgZm9yIGxpbnV4IGdldHMgb3ZlcndyaXR0ZW4gYnkgbGludXgtZWFiaS5oIHdoaWNoCittZWFucyB0aGUgdmFsdWUgb2YgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgZ2V0cyBsb3N0IGFuZCBhcyBhIHJlc3VsdAordGhlIG9wdGlvbiBpcyBub3QgcGFzc2VkIHRvIGxpbmtlciB3aGVuIGNob3NpbmcgbWFyY2g9YXJtdjQKK1RoaXMgcGF0Y2ggcmVkZWZpbmVzIHRoaXMgaW4gbGludXgtZWFiaS5oIGFuZCByZWluc2VydHMgaXQKK2ZvciBlYWJpIGRlZmF1bHRpbmcgdG9vbGNoYWlucy4KKworV2UgbWlnaHQgd2FudCB0byBzZW5kIGl0IHVwc3RyZWFtLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCB8IDYgKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCitpbmRleCBjZmRmM2YwLi4wNDhhMDYyIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCisrKysgYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK0BAIC03NywxMCArNzcsMTQgQEAKKyAgICAgJXttZmxvYXQtYWJpPXNvZnQqOiIgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCAifSBcCisgICAgICV7IW1mbG9hdC1hYmk9KjoiIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgIn0iCisgCisrLyogRm9yIGFybXY0IHdlIHBhc3MgLS1maXgtdjRieCB0byBsaW5rZXIgdG8gc3VwcG9ydCBFQUJJICovCisrI3VuZGVmIFRBUkdFVF9GSVhfVjRCWF9TUEVDCisrI2RlZmluZSBUQVJHRVRfRklYX1Y0QlhfU1BFQyAiJXttY3B1PWFybTh8bWNwdT1hcm04MTB8bWNwdT1zdHJvbmdhcm0qfG1hcmNoPWFybXY0OiAtLWZpeC12NGJ4fSIKKysKKyAvKiBBdCB0aGlzIHBvaW50LCBicGFiaS5oIHdpbGwgaGF2ZSBjbG9iYmVyZWQgTElOS19TUEVDLiAgV2Ugd2FudCB0bworICAgIHVzZSB0aGUgR05VL0xpbnV4IHZlcnNpb24sIG5vdCB0aGUgZ2VuZXJpYyBCUEFCSSB2ZXJzaW9uLiAgKi8KKyAjdW5kZWYgIExJTktfU1BFQworLSNkZWZpbmUgTElOS19TUEVDIEVBQklfTElOS19TUEVDCQkJCQlcCisrI2RlZmluZSBMSU5LX1NQRUMgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgRUFCSV9MSU5LX1NQRUMJCQlcCisgICBMSU5VWF9PUl9BTkRST0lEX0xEIChMSU5VWF9UQVJHRVRfTElOS19TUEVDLAkJCQlcCisgCQkgICAgICAgTElOVVhfVEFSR0VUX0xJTktfU1BFQyAiICIgQU5EUk9JRF9MSU5LX1NQRUMpCisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjctVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjctVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDVkYTM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNy1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitGcm9tIDQ4NGU4YzFlOGQ0M2U2MjZlZTJkZGJkZTllYjhlMGFmN2ExNzZhZWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTozMzowNCArMDQwMAorU3ViamVjdDogW1BBVENIIDI3LzM1XSBVc2UgdGhlIG11bHRpbGliIGNvbmZpZyBmaWxlcyBmcm9tICR7Qn0gaW5zdGVhZCBvZgorIHVzaW5nIHRoZSBvbmVzIGZyb20gJHtTfQorCitVc2UgdGhlIG11bHRpbGliIGNvbmZpZyBmaWxlcyBmcm9tICR7Qn0gaW5zdGVhZCBvZiB1c2luZyB0aGUgb25lcyBmcm9tICR7U30KK3NvIHRoYXQgdGhlIHNvdXJjZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZ2NjLWNyb3NzLWluaXRpYWwsCitnY2MtY3Jvc3MtaW50ZXJtZWRpYXRlLCBnY2MtY3Jvc3MsIGdjYy1ydW50aW1lLCBhbmQgYWxzbyB0aGUgc2RrIGJ1aWxkLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgMjIgKysrKysrKysrKysrKysrKysrLS0tLQorIGdjYy9jb25maWd1cmUuYWMgfCAyMiArKysrKysrKysrKysrKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDk4ODUzYjMuLmQwZWM1MGYgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMTE4MjEsMTAgKzExODIxLDIwIEBAIGRvbmUKKyB0bWFrZV9maWxlXz0KKyBmb3IgZiBpbiAke3RtYWtlX2ZpbGV9CisgZG8KKy0JaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCistCXRoZW4KKy0JCXRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKy0JZmkKKysgIGNhc2UgJGYgaW4KKysgICAgKi90LWxpbnV4NjQgKQorKyAgICAgICBpZiB0ZXN0IC1mIC4vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gLi9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICogKQorKyAgICAgICBpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgIGVzYWMKKyBkb25lCisgdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlX30iCisgCitAQCAtMTE4MzUsNiArMTE4NDUsMTAgQEAgdG1fZmlsZV9saXN0PSJvcHRpb25zLmgiCisgdG1faW5jbHVkZV9saXN0PSJvcHRpb25zLmggaW5zbi1jb25zdGFudHMuaCIKKyBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgIGNhc2UgJGYgaW4KKysgICAgKi9saW51eDY0LmggKQorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIDs7CisgICAgIC4vKiApCisgICAgICAgIGY9YGVjaG8gJGYgfCBzZWQgJ3MvXi4uLy8nYAorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAkZiIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggNTJjZGNiOC4uM2NmNjA2YSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC0xODEyLDEwICsxODEyLDIwIEBAIGRvbmUKKyB0bWFrZV9maWxlXz0KKyBmb3IgZiBpbiAke3RtYWtlX2ZpbGV9CisgZG8KKy0JaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCistCXRoZW4KKy0JCXRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKy0JZmkKKysgIGNhc2UgJGYgaW4KKysgICAgKi90LWxpbnV4NjQgKQorKyAgICAgICBpZiB0ZXN0IC1mIC4vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gLi9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICogKQorKyAgICAgICBpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgIGVzYWMKKyBkb25lCisgdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlX30iCisgCitAQCAtMTgyNiw2ICsxODM2LDEwIEBAIHRtX2ZpbGVfbGlzdD0ib3B0aW9ucy5oIgorIHRtX2luY2x1ZGVfbGlzdD0ib3B0aW9ucy5oIGluc24tY29uc3RhbnRzLmgiCisgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICBjYXNlICRmIGluCisrICAgICovbGludXg2NC5oICkKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICA7OworICAgICAuLyogKQorICAgICAgICBmPWBlY2hvICRmIHwgc2VkICdzL14uLi8vJ2AKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gJGYiCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjgtQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjgtQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTAyZTkwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyOC1Bdm9pZC11c2luZy1saWJkaXItZnJvbS0ubGEtd2hpY2gtdXN1YWxseS1wb2ludHMtdG8tLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gMTEyY2E5Zjg2MDExNGJjNzkyNzNhNzllZDQyNzIyZmRjOWRlZDZlYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA5OjM5OjM4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjgvMzVdIEF2b2lkIHVzaW5nIGxpYmRpciBmcm9tIC5sYSB3aGljaCB1c3VhbGx5IHBvaW50cyB0byBhCisgaG9zdCBwYXRoCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsdG1haW4uc2ggfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAoraW5kZXggMDEyMWZiYS4uNTJiZGJkYiAxMDA2NDQKKy0tLSBhL2x0bWFpbi5zaAorKysrIGIvbHRtYWluLnNoCitAQCAtNTYyOCw2ICs1NjI4LDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKyAJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKyAJICBlbHNlCisrCSAgICAjIEluc3RlYWQgb2YgdXNpbmcgbGliZGlyIGZyb20gLmxhIHdoaWNoIHVzdWFsbHkgcG9pbnRzIHRvIGEgaG9zdCBwYXRoLAorKwkgICAgIyB1c2UgdGhlIHBhdGggdGhlIC5sYSBpcyBjb250YWluZWQgaW4uCisrCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisgCSAgICBkaXI9IiRsaWJkaXIiCisgCSAgICBhYnNkaXI9IiRsaWJkaXIiCisgCSAgZmkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyOS1leHBvcnQtQ1BQLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyOS1leHBvcnQtQ1BQLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMDVhZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI5LWV4cG9ydC1DUFAucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSBhOTgzMDMzZjEzMjdhNjkyYWY1NWJlOGQxYWE2MWFlZGUxOGM0YWZiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDk6NDA6NTkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyOS8zNV0gZXhwb3J0IENQUAorCitUaGUgT0UgZW52aXJvbm1lbnQgc2V0cyBhbmQgZXhwb3J0cyBDUFAgYXMgYmVpbmcgdGhlIHRhcmdldCBnY2MuIFdoZW4KK2J1aWxkaW5nIGdjYy1jcm9zcy1jYW5hZGlhbiBmb3IgYSBtaW5ndyB0YXJnZXR0ZWQgc2RrLCB0aGUgZm9sbG93aW5nIGNhbiBiZSBmb3VuZAoraW4gYnVpbGQueDg2XzY0LXBva3lzZGstbWluZ3czMi5pNTg2LXBva3ktbGludXgvYnVpbGQteDg2XzY0LWxpbnV4L2xpYmliZXJ0eS9jb25maWcubG9nOgorCitjb25maWd1cmU6MzY0MTogY2hlY2tpbmcgZm9yIF9GSUxFX09GRlNFVF9CSVRTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMKK2NvbmZpZ3VyZTozNjY2OiBnY2MgIC1jIC1pc3lzdGVtL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlICBjb25mdGVzdC5jID4mNQorY29uZmlndXJlOjM2NjY6ICQ/ID0gMAorY29uZmlndXJlOjM2OTg6IHJlc3VsdDogbm8KK2NvbmZpZ3VyZTozNzg2OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvcgorY29uZmlndXJlOjM4NTY6IHJlc3VsdDogeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MgLUUgLS1zeXNyb290PS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LW5hdGl2ZXNkay1taW5ndzMyLXBva3lzZGstbWluZ3czMgorY29uZmlndXJlOjM4NzY6IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjIC1FIC0tc3lzcm9vdD0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1uYXRpdmVzZGstbWluZ3czMi1wb2t5c2RrLW1pbmd3MzIgY29uZnRlc3QuYworY29uZmlndXJlOjM4NzY6ICQ/ID0gMAorCitOb3RlIHRoaXMgaXMgYSAqYnVpbGQqIHRhcmdldCAoaW4gYnVpbGQteDg2XzY0LWxpbnV4KSBzbyBpdCBzaG91bGQgYmUKK3VzaW5nIHRoZSBob3N0ICJnY2MiLCBub3QgeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MuIFNpbmNlIHRoZSBtaW5ndzMyCitoZWFkZXJzIGFyZSB2ZXJ5IGRpZmZlcmVudCwgdXNpbmcgdGhlIHdyb25nIGNwcCBpcyBhIHJlYWwgcHJvYmxlbS4gSXQgaXMgbGVha2luZworaW50byBjb25maWd1cmUgdGhyb3VnaCB0aGUgQ1BQIHZhcmlhYmxlLiBVbHRpbWF0ZWx5IHRoaXMgbGVhZHMgdG8gYnVpbGQKK2ZhaWx1cmVzIHJlbGF0ZWQgdG8gbm90IGJlaW5nIGFibGUgdG8gaW5jbHVkZSBhIHByb2Nlc3MuaCBmaWxlIGZvciBwZW0tdW5peC5jLgorCitUaGUgZml4IGlzIHRvIGVuc3VyZSB3ZSBleHBvcnQgYSBzYW5lIENQUCB2YWx1ZSBpbnRvIHRoZSBidWlsZAorZW52aXJvbm1lbnQgd2hlbiB1c2luZyBidWlsZCB0YXJnZXRzLiBXZSBjb3VsZCBkZWZpbmUgYSBDUFBfRk9SX0JVSUxEIHZhbHVlIHdoaWNoIG1heSBiZQordGhlIHZlcnNpb24gd2hpY2ggbmVlZHMgdG8gYmUgdXBzdHJlYW1lZCBidXQgZm9yIG5vdywgdGhpcyBmaXggaXMgZ29vZCBlbm91Z2ggdG8KK2F2b2lkIHRoZSBwcm9ibGVtLgorCitSUCAyMi8wOC8yMDEzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDM2YjQwMDguLmE3ODNlMWUgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0xNDksNiArMTQ5LDcgQEAgQlVJTERfRVhQT1JUUyA9IFwKKyAJQVI9IiQoQVJfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUjsgXAorIAlBUz0iJChBU19GT1JfQlVJTEQpIjsgZXhwb3J0IEFTOyBcCisgCUNDPSIkKENDX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0M7IFwKKysJQ1BQPSIkKENDX0ZPUl9CVUlMRCkgLUUiOyBleHBvcnQgQ1BQOyBcCisgCUNGTEFHUz0iJChDRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDRkxBR1M7IFwKKyAJQ09ORklHX1NIRUxMPSIkKFNIRUxMKSI7IGV4cG9ydCBDT05GSUdfU0hFTEw7IFwKKyAJQ1hYPSIkKENYWF9GT1JfQlVJTEQpIjsgZXhwb3J0IENYWDsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMwLUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMwLUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODczZGNhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzAtRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDNkODcwYTE4NGMwNWRmMTMzOGRiMTg3MDMwMWM0MTQ0YmE5OWZjM2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+CitEYXRlOiBXZWQsIDUgRmViIDIwMTQgMTY6NTI6MzEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAzMC8zNV0gRW5hYmxlIFNQRSAmIEFsdGlWZWMgZ2VuZXJhdGlvbiBvbiBwb3dlcGMqbGludXggdGFyZ2V0CisKK1doZW4gaXMgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXgsIHRoZSByZXN1bHRpbmcgR0NDIHdpbGwKK25vdCBiZSBhYmxlIHRvIGdlbmVyYXRlIGNvZGUgZm9yIFNQRSB0YXJnZXRzIChlNTAwdjEvdjIpLgorR0NDIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4c3BlIHdpbGwgbm90IGJlIGFibGUgdG8KK2dlbmVyYXRlIEFsdGlWZWMgaW5zdHJ1Y3Rpb25zIChmb3IgZTY1MDApLgorVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgY29uZmlndXJlZCBmaWxlIHN1Y2ggdGhhdCBTUEUgb3IgQWx0aVZlYyBjb2RlCitjYW4gYmUgZ2VuZXJhdGVkIHdoZW4gZ2NjIGlzIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4LgorVGhlIEFCSSBhbmQgc3BlY2lmZmljIGluc3RydWN0aW9ucyBjYW4gYmUgc2VsZWN0ZWQgdGhyb3VnaCB0aGUKKyItbWFiaT1zcGUgb3IgLW1hYmk9YWx0aXZlYyIgYW5kIHRoZSAiLW1zcGUgb3IgLW1hbHRpdmVjIiBwYXJhbWV0ZXJzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRydS1DZXphciBTYXJkYW4gPGFsZXhhbmRydS5zYXJkYW5AZnJlZXNjYWxlLmNvbT4KKy0tLQorIGdjYy9jb25maWcuZ2NjIHwgOSArKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCitpbmRleCBiMTU1NzQ0Li4wNTQxYjhhIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy5nY2MKKysrKyBiL2djYy9jb25maWcuZ2NjCitAQCAtMjMzNyw3ICsyMzM3LDE0IEBAIHBvd2VycGMtKi1ydGVtcyopCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gcnM2MDAwL3QtZnBydWxlcyByczYwMDAvdC1ydGVtcyByczYwMDAvdC1wcGNjb21tIgorIAk7OworIHBvd2VycGMqLSotbGludXgqKQorLQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZ251LXVzZXIuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCIKKysJY2FzZSAke3RhcmdldH0gaW4KKysJICAgIHBvd2VycGMqLSotbGludXgqc3BlKiB8IHBvd2VycGMqLSotbGludXgqYWx0aXZlYyopCisrCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZ251LXVzZXIuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCIKKysJCTs7CisrCSAgICAqKQorKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGdudS11c2VyLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmggcnM2MDAwL2xpbnV4YWx0aXZlYy5oIHJzNjAwMC9saW51eHNwZS5oIHJzNjAwMC9lNTAwLmgiCisrCQk7OworKwllc2FjCisgCWV4dHJhX29wdGlvbnM9IiR7ZXh0cmFfb3B0aW9uc30gcnM2MDAwL3N5c3Y0Lm9wdCIKKyAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSByczYwMDAvdC1mcHJ1bGVzIHJzNjAwMC90LXBwY2NvbW0iCisgCWV4dHJhX29ianM9IiRleHRyYV9vYmpzIHJzNjAwMC1saW51eC5vIgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMxLURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMxLURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2Y2JhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzEtRGlzYWJsZS10aGUtTVVMVElMSUJfT1NESVJOQU1FUy1hbmQtb3RoZXItbXVsdGlsaWItby5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIGE4MjRjZDNmNDU4NzVmNmMxYzQ3Y2NkYmYzMzUzNDk0N2JkMmI1ODcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAxMDoyMTo1NSArMDAwMAorU3ViamVjdDogW1BBVENIIDMxLzM1XSBEaXNhYmxlIHRoZSBNVUxUSUxJQl9PU0RJUk5BTUVTIGFuZCBvdGhlciBtdWx0aWxpYgorIG9wdGlvbnMuCisKK0hhcmQgY29kaW5nIHRoZSBNVUxUSUxJQl9PU0RJUk5BTUVTIHdpdGggLi4vbGliNjQgaXMgY2F1c2luZyBwcm9ibGVtcyBvbgorc3lzdGVtcyB3aGVyZSB0aGUgbGliZGlyIGlzIE5PVCBzZXQgdG8gL2xpYjY0LiAgVGhpcyBpcyBhbGxvd2VkIGJ5IHRoZQorQUJJLCBhcworbG9uZyBhcyB0aGUgZHluYW1pYyBsb2FkZXIgaXMgcHJlc2VudCBpbiAvbGliLgorCitXZSBzaW1wbHkgd2FudCB0byB1c2UgdGhlIGRlZmF1bHQgcnVsZXMgaW4gZ2NjIHRvIGZpbmQgYW5kIGNvbmZpZ3VyZSB0aGUKK25vcm1hbCBsaWJkaXIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZVtPRS1TcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdjYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXggfCA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXggYi9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4CitpbmRleCBjMjk2Mzc2Li4zYmI1OWJmIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAorKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAorQEAgLTIxLDggKzIxLDggQEAKKyBMSUIxQVNNU1JDICAgPSBhYXJjaDY0L2xpYjFmdW5jcy5hc20KKyBMSUIxQVNNRlVOQ1MgPSBfYWFyY2g2NF9zeW5jX2NhY2hlX3JhbmdlCisgCistQUFSQ0hfQkUgPSAkKGlmICQoZmluZHN0cmluZyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEsICQodG1fZGVmaW5lcykpLF9iZSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gbWFiaS5scDY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6YWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKy1NVUxUSUFSQ0hfRElSTkFNRSA9ICQoY2FsbCBpZl9tdWx0aWFyY2gsYWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKysjQUFSQ0hfQkUgPSAkKGlmICQoZmluZHN0cmluZyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEsICQodG1fZGVmaW5lcykpLF9iZSkKKysjTVVMVElMSUJfT1NESVJOQU1FUyA9IG1hYmkubHA2ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOmFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCisrI01VTFRJQVJDSF9ESVJOQU1FID0gJChjYWxsIGlmX211bHRpYXJjaCxhYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQorIAorLU1VTFRJTElCX09TRElSTkFNRVMgKz0gbWFiaS5pbHAzMj0uLi9saWJpbHAzMgorKyNNVUxUSUxJQl9PU0RJUk5BTUVTICs9IG1hYmkuaWxwMzI9Li4vbGliaWxwMzIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMi1FbnN1cmUtdGFyZ2V0LWdjYy1oZWFkZXJzLWNhbi1iZS1pbmNsdWRlZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzItRW5zdXJlLXRhcmdldC1nY2MtaGVhZGVycy1jYW4tYmUtaW5jbHVkZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxMzMwNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzItRW5zdXJlLXRhcmdldC1nY2MtaGVhZGVycy1jYW4tYmUtaW5jbHVkZWQucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorRnJvbSBlNjAwOTBmN2M1MzdjODRmZDFiMjIzMDdlZGQ5ZjM4NjIyOGM3MzM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMTA6MjU6MTEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzMi8zNV0gRW5zdXJlIHRhcmdldCBnY2MgaGVhZGVycyBjYW4gYmUgaW5jbHVkZWQKKworVGhlcmUgYXJlIGEgZmV3IGhlYWRlcnMgaW5zdGFsbGVkIGFzIHBhcnQgb2YgdGhlIE9wZW5FbWJlZGRlZAorZ2NjLXJ1bnRpbWUgdGFyZ2V0IChvbXAuaCwgc3NwLyouaCkuIEJlaW5nIGluc3RhbGxlZCBmcm9tIGEgcmVjaXBlCitidWlsdCBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIHRoZXNlIGFyZSB3aXRoaW4gdGhlIHRhcmdldAorc3lzcm9vdCBhbmQgbm90IGNyb3NzL25hdGl2ZXNkazsgdGh1cyB0aGV5IHdlcmVuJ3QgYWJsZSB0byBiZQorZm91bmQgYnkgZ2NjIHdpdGggdGhlIGV4aXN0aW5nIHNlYXJjaCBwYXRocy4gQWRkIHN1cHBvcnQgZm9yCitwaWNraW5nIHVwIHRoZXNlIGhlYWRlcnMgdW5kZXIgdGhlIHN5c3Jvb3Qgc3VwcGxpZWQgb24gdGhlIGdjYworY29tbWFuZCBsaW5lIGluIG9yZGVyIHRvIHJlc29sdmUgdGhpcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdjYy9NYWtlZmlsZS5pbiAgfCAyICsrCisgZ2NjL2NwcGRlZmF1bHQuYyB8IDQgKysrKworIGdjYy9kZWZhdWx0cy5oICAgfCA5ICsrKysrKysrKworIGdjYy9nY2MuYyAgICAgICAgfCA3IC0tLS0tLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IDk0NzBhOTIuLjE0OTdlZGUgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTU4Miw2ICs1ODIsNyBAQCBsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACisgCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbXBpbGVyIGZpbmRzIGxpYnJhcmllcyBldGMuCisgbGlic3ViZGlyID0gJChsaWJkaXIpL2djYy8kKHJlYWxfdGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKSQoYWNjZWxfZGlyX3N1ZmZpeCkKKytsaWJzdWJkaXJfdGFyZ2V0ID0gZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKQorICMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBleGVjdXRhYmxlcworIGxpYmV4ZWNzdWJkaXIgPSAkKGxpYmV4ZWNkaXIpL2djYy8kKHJlYWxfdGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKSQoYWNjZWxfZGlyX3N1ZmZpeCkKKyAjIERpcmVjdG9yeSBpbiB3aGljaCBhbGwgcGx1Z2luIHJlc291cmNlcyBhcmUgaW5zdGFsbGVkCitAQCAtMjYwMyw2ICsyNjA0LDcgQEAgQ0ZMQUdTLWludGwubyArPSAtRExPQ0FMRURJUj1cIiQobG9jYWxlZGlyKVwiCisgCisgUFJFUFJPQ0VTU09SX0RFRklORVMgPSBcCisgICAtREdDQ19JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlXCIgXAorKyAgLURHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUPVwiJChsaWJzdWJkaXJfdGFyZ2V0KS9pbmNsdWRlXCIgXAorICAgLURGSVhFRF9JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlLWZpeGVkXCIgXAorICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVI9XCIkKGdjY19neHhfaW5jbHVkZV9kaXIpXCIgXAorICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1Q9JChnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290KSBcCitkaWZmIC0tZ2l0IGEvZ2NjL2NwcGRlZmF1bHQuYyBiL2djYy9jcHBkZWZhdWx0LmMKK2luZGV4IDU4MGMxYmEuLjAzYTAyODcgMTAwNjQ0CistLS0gYS9nY2MvY3BwZGVmYXVsdC5jCisrKysgYi9nY2MvY3BwZGVmYXVsdC5jCitAQCAtNTksNiArNTksMTAgQEAgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzLiAgKi8KKyAgICAgeyBHQ0NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisgI2VuZGlmCisrI2lmZGVmIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQKKysgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMgdW5kZXIgdGhlIHNwZWNpZmllZCBzeXNyb290LiAgKi8KKysgICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVCwgIkdDQyIsIDAsIDAsIDEsIDAgfSwKKysjZW5kaWYKKyAjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKKyAgICAgLyogL3Vzci9sb2NhbC9pbmNsdWRlIGNvbWVzIGJlZm9yZSB0aGUgZml4aW5jbHVkZWQgaGVhZGVyIGZpbGVzLiAgKi8KKyAgICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMiB9LAorZGlmZiAtLWdpdCBhL2djYy9kZWZhdWx0cy5oIGIvZ2NjL2RlZmF1bHRzLmgKK2luZGV4IDFkNTQ3OTguLjk4M2Q0NWUgMTAwNjQ0CistLS0gYS9nY2MvZGVmYXVsdHMuaAorKysrIGIvZ2NjL2RlZmF1bHRzLmgKK0BAIC0xMzYxLDQgKzEzNjEsMTMgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisgCisgI2VuZGlmIC8qIEdDQ19JTlNOX0ZMQUdTX0ggICovCisgCisrLyogRGVmYXVsdCBwcmVmaXhlcyB0byBhdHRhY2ggdG8gY29tbWFuZCBuYW1lcy4gICovCisrCisrI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEKKysjZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMSAiL2xpYi8iCisrI2VuZGlmCisrI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIKKysjZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiAiL3Vzci9saWIvIgorKyNlbmRpZgorKworICNlbmRpZiAgLyogISBHQ0NfREVGQVVMVFNfSCAqLworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggZTZlZmFlNy4uM2NhMjdiOSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTI2MywxMyArMTI2Myw2IEBAIHN0YXRpYyBjb25zdCBjaGFyICpnY2NfbGliZXhlY19wcmVmaXg7CisgCisgLyogRGVmYXVsdCBwcmVmaXhlcyB0byBhdHRhY2ggdG8gY29tbWFuZCBuYW1lcy4gICovCisgCistI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEKKy0jZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMSAiL2xpYi8iCistI2VuZGlmCistI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIKKy0jZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiAiL3Vzci9saWIvIgorLSNlbmRpZgorLQorICNpZmRlZiBDUk9TU19ESVJFQ1RPUllfU1RSVUNUVVJFICAvKiBEb24ndCB1c2UgdGhlc2UgcHJlZml4ZXMgZm9yIGEgY3Jvc3MgY29tcGlsZXIuICAqLworICN1bmRlZiBNRF9FWEVDX1BSRUZJWAorICN1bmRlZiBNRF9TVEFSVEZJTEVfUFJFRklYCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzMtZ2NjLTQuOC13b24tdC1idWlsZC13aXRoLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzMtZ2NjLTQuOC13b24tdC1idWlsZC13aXRoLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTllNDEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMy1nY2MtNC44LXdvbi10LWJ1aWxkLXdpdGgtZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gOTk3ZjllOTM5Zjg1ZjY1MWIyMmE0ODI1MWNmYjE0NDQ4MzFkNTRjYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDExOjE3OjE5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMzMvMzVdIGdjYyA0LjgrIHdvbid0IGJ1aWxkIHdpdGggLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcKKworc2luY2UgdGhlICouUHBvIGZpbGVzIGRvbid0IGdldCBjcmVhdGVkIHVubGVzcyAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIGlzIHRydWUuCisKK1RoaXMgcGF0Y2ggZW5zdXJlcyB3ZSBvbmx5IHVzZSB0aG9zZSBjb21waWxlciBvcHRpb25zIHdoZW4gaXRzIGVuYWJsZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKKyhQcm9ibGVtIHdhcyBhbHJlYWR5IHJlcG9ydGVkIHVwc3RyZWFtLCBhdHRhY2hlZCB0aGlzIHBhdGNoIHRoZXJlCitodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU1OTMwKQorCitSUAorMjAxMi8wOS8yMgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliYXRvbWljL01ha2VmaWxlLmFtIHwgMyArKy0KKyBsaWJhdG9taWMvTWFrZWZpbGUuaW4gfCAzICsrLQorIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliYXRvbWljL01ha2VmaWxlLmFtIGIvbGliYXRvbWljL01ha2VmaWxlLmFtCitpbmRleCAzZDhhYjYyLi4yM2RmZjdlIDEwMDY0NAorLS0tIGEvbGliYXRvbWljL01ha2VmaWxlLmFtCisrKysgYi9saWJhdG9taWMvTWFrZWZpbGUuYW0KK0BAIC0xMDEsNyArMTAxLDggQEAgUEFUX1MJCT0gJCh3b3JkIDMsJChQQVRfU1BMSVQpKQorIElGVU5DX0RFRgk9IC1ESUZVTkNfQUxUPSQoUEFUX1MpCisgSUZVTkNfT1BUCT0gJCh3b3JkICQoUEFUX1MpLCQoSUZVTkNfT1BUSU9OUykpCisgCistTV9ERVBTCQk9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX1RSVUVATV9ERVBTCQk9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX0ZBTFNFQE1fREVQUwkJPQorIE1fU0laRQkJPSAtRE49JChQQVRfTikKKyBNX0lGVU5DCQk9ICQoaWYgJChQQVRfUyksJChJRlVOQ19ERUYpICQoSUZVTkNfT1BUKSkKKyBNX0ZJTEUJCT0gJChQQVRfQkFTRSlfbi5jCitkaWZmIC0tZ2l0IGEvbGliYXRvbWljL01ha2VmaWxlLmluIGIvbGliYXRvbWljL01ha2VmaWxlLmluCitpbmRleCA5Mjg4NjUyLi4zNzIwMjU2IDEwMDY0NAorLS0tIGEvbGliYXRvbWljL01ha2VmaWxlLmluCisrKysgYi9saWJhdG9taWMvTWFrZWZpbGUuaW4KK0BAIC0zMzAsNyArMzMwLDggQEAgUEFUX04gPSAkKHdvcmQgMiwkKFBBVF9TUExJVCkpCisgUEFUX1MgPSAkKHdvcmQgMywkKFBBVF9TUExJVCkpCisgSUZVTkNfREVGID0gLURJRlVOQ19BTFQ9JChQQVRfUykKKyBJRlVOQ19PUFQgPSAkKHdvcmQgJChQQVRfUyksJChJRlVOQ19PUFRJT05TKSkKKy1NX0RFUFMgPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9UUlVFQE1fREVQUyA9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX0ZBTFNFQE1fREVQUyA9CisgTV9TSVpFID0gLUROPSQoUEFUX04pCisgTV9JRlVOQyA9ICQoaWYgJChQQVRfUyksJChJRlVOQ19ERUYpICQoSUZVTkNfT1BUKSkKKyBNX0ZJTEUgPSAkKFBBVF9CQVNFKV9uLmMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNC1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNC1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwN2NkN2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM0LURvbi10LXNlYXJjaC1ob3N0LWRpcmVjdG9yeS1kdXJpbmctcmVsaW5rLWlmLWluc3RfcHIucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSBjOTRkYTI1N2EyMTk4NzNiOTQ2ZTA4MzA2MTQxYWY3NzQ5Njc5ZjY3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMyBNYXIgMjAxNSAwODoyMToxOSArMDAwMAorU3ViamVjdDogW1BBVENIIDM0LzM1XSBEb24ndCBzZWFyY2ggaG9zdCBkaXJlY3RvcnkgZHVyaW5nICJyZWxpbmsiIGlmCisgJGluc3RfcHJlZml4IGlzIHByb3ZpZGVkCisKK2h0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9saWJ0b29sLXBhdGNoZXMvMjAxMS0wMS9tc2cwMDAyNi5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsdG1haW4uc2ggfCA1ICsrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAoraW5kZXggNTJiZGJkYi4uODJiY2VjMyAxMDA2NDQKKy0tLSBhL2x0bWFpbi5zaAorKysrIGIvbHRtYWluLnNoCitAQCAtNjAwNCwxMiArNjAwNCwxMyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgICBmaQorIAkgICAgZWxzZQorIAkgICAgICAjIFdlIGNhbm5vdCBzZWVtIHRvIGhhcmRjb2RlIGl0LCBndWVzcyB3ZSdsbCBmYWtlIGl0LgorKwkgICAgICAjIERlZmF1bHQgaWYgJGxpYmRpciBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHByZWZpeDoKKyAJICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgorLQkgICAgICAjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisrCisgCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisgCQljYXNlICRsaWJkaXIgaW4KKyAJCSAgW1xcL10qKQorLQkJICAgIGFkZF9kaXI9IiRhZGRfZGlyIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisrCQkgICAgYWRkX2Rpcj0iLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKyAJCSAgICA7OworIAkJZXNhYworIAkgICAgICBmaQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM1LURvbnQtbGluay10aGUtcGx1Z2lucy13aXRoLWxpYmdvbXAtZXhwbGljaXRseS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzUtRG9udC1saW5rLXRoZS1wbHVnaW5zLXdpdGgtbGliZ29tcC1leHBsaWNpdGx5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NWYzODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM1LURvbnQtbGluay10aGUtcGx1Z2lucy13aXRoLWxpYmdvbXAtZXhwbGljaXRseS5wYXRjaApAQCAtMCwwICsxLDgzIEBACitGcm9tIDNhMDk1NDVmM2QxOGNlNDkyZWY1NTYzOTIxNWEwNzIyODJkZTAzZDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCA4IE1hciAyMDE1IDAzOjQxOjM5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMzUvMzVdIERvbnQgbGluayB0aGUgcGx1Z2lucyB3aXRoIGxpYmdvbXAgZXhwbGljaXRseQorCitUaGV5IGFyZSBkbG9wZW5lZCBieSBsaWJnb21wIGFueXdheS4gVGhpcyBmaXhlcwordGhlIGxpYnRvb2wgcmVsaW5rIGlzc3VlIHdoaWNoIGNhdXNlcyBpc3N1ZXMgZHVyaW5nCitjcm9zcyBjb21waWxhdGlvbgorCitsaWJ0b29sOiBpbnN0YWxsOiAvdXNyL2Jpbi9pbnN0YWxsIC1jIC5saWJzL2xpYmdvbXAubGFpCisvaG9tZS91YnVudHUvd29yay9ibGVlZGluZy9idWlsZC1xZW11eDg2LTY0bWMvdG1wL3dvcmsvY29yZTItNjQtcmRrLWxpbnV4L2djYy1ydW50aW1lLzUuMC1yMC9pbWFnZS91c3IvbGliLy4uL2xpYi9saWJnb21wLmxhCitsaWJ0b29sOiBpbnN0YWxsOiBlcnJvcjogY2Fubm90IGluc3RhbGwgYGxpYmdvbXAtcGx1Z2luLWhvc3Rfbm9uc2htLmxhJwordG8gYSBkaXJlY3Rvcnkgbm90IGVuZGluZyBpbiAvdXNyL2xpYgorTWFrZWZpbGU6NTE3OiByZWNpcGUgZm9yIHRhcmdldCAnaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTJyBmYWlsZWQKK21ha2VbMl06ICoqKiBbaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTXSBFcnJvciAxCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWJnb21wL01ha2VmaWxlLmluICAgICAgICB8IDcgKysrLS0tLQorIGxpYmdvbXAvcGx1Z2luL01ha2VmcmFnLmFtIHwgMyArLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmdvbXAvTWFrZWZpbGUuaW4gYi9saWJnb21wL01ha2VmaWxlLmluCitpbmRleCBiNjFiMTA4Li43MWIyNjI3IDEwMDY0NAorLS0tIGEvbGliZ29tcC9NYWtlZmlsZS5pbgorKysrIGIvbGliZ29tcC9NYWtlZmlsZS5pbgorQEAgLTEyMyw3ICsxMjMsNyBAQCBhbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpIiAiJChERVNURElSKSQoaW5mb2RpcikiIFwKKyAJIiQoREVTVERJUikkKGZpbmNsdWRlZGlyKSIgIiQoREVTVERJUikkKGxpYnN1YmluY2x1ZGVkaXIpIiBcCisgCSIkKERFU1RESVIpJCh0b29sZXhlY2xpYmRpcikiCisgTFRMSUJSQVJJRVMgPSAkKHRvb2xleGVjbGliX0xUTElCUkFSSUVTKQorLWxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0RFUEVOREVOQ0lFUyA9IGxpYmdvbXAubGEKKytsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MSUJBREQgPQorIGFtX2xpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX09CSkVDVFMgPSAgXAorIAlsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYS1wbHVnaW4taG9zdC5sbworIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX09CSkVDVFMgPSAgXAorQEAgLTEzMyw3ICsxMzMsNyBAQCBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyBcCisgCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisgCSQobGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorIGFtX19ERVBFTkRFTkNJRVNfMSA9CistQFBMVUdJTl9OVlBUWF9UUlVFQGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0RFUEVOREVOQ0lFUyA9IGxpYmdvbXAubGEgXAorK0BQTFVHSU5fTlZQVFhfVFJVRUBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9ERVBFTkRFTkNJRVMgPSAgXAorIEBQTFVHSU5fTlZQVFhfVFJVRUAJJChhbV9fREVQRU5ERU5DSUVTXzEpCisgQFBMVUdJTl9OVlBUWF9UUlVFQGFtX2xpYmdvbXBfcGx1Z2luX252cHR4X2xhX09CSkVDVFMgPSAgXAorIEBQTFVHSU5fTlZQVFhfVFJVRUAJbGliZ29tcF9wbHVnaW5fbnZwdHhfbGEtcGx1Z2luLW52cHR4LmxvCitAQCAtNDA3LDcgKzQwNyw3IEBAIGxpYmdvbXBfbGFfU09VUkNFUyA9IGFsbG9jLmMgYmFycmllci5jIGNyaXRpY2FsLmMgZW52LmMgZXJyb3IuYyBpdGVyLmMgXAorIEBQTFVHSU5fTlZQVFhfVFJVRUBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MREZMQUdTID0gIFwKKyBAUExVR0lOX05WUFRYX1RSVUVACSQobGliZ29tcF9wbHVnaW5fbnZwdHhfdmVyc2lvbl9pbmZvKSBcCisgQFBMVUdJTl9OVlBUWF9UUlVFQAkkKGx0X2hvc3RfZmxhZ3MpICQoUExVR0lOX05WUFRYX0xERkxBR1MpCistQFBMVUdJTl9OVlBUWF9UUlVFQGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xJQkFERCA9IGxpYmdvbXAubGEgJChQTFVHSU5fTlZQVFhfTElCUykKKytAUExVR0lOX05WUFRYX1RSVUVAbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTElCQUREID0gJChQTFVHSU5fTlZQVFhfTElCUykKKyBAUExVR0lOX05WUFRYX1RSVUVAbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTElCVE9PTEZMQUdTID0gLS10YWc9ZGlzYWJsZS1zdGF0aWMKKyBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV92ZXJzaW9uX2luZm8gPSAtdmVyc2lvbi1pbmZvICQobGlidG9vbF9WRVJTSU9OKQorIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX1NPVVJDRVMgPSBwbHVnaW4vcGx1Z2luLWhvc3QuYworQEAgLTQxNSw3ICs0MTUsNiBAQCBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1ESE9TVF9OT05TSE1fUExVR0lOCisgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTERGTEFHUyA9IFwKKyAJJChsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV92ZXJzaW9uX2luZm8pICQobHRfaG9zdF9mbGFncykKKyAKKy1saWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MSUJBREQgPSBsaWJnb21wLmxhCisgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTElCVE9PTEZMQUdTID0gLS10YWc9ZGlzYWJsZS1zdGF0aWMKKyBub2Rpc3Rfbm9pbnN0X0hFQURFUlMgPSBsaWJnb21wX2YuaAorIG5vZGlzdF9saWJzdWJpbmNsdWRlX0hFQURFUlMgPSBvbXAuaCBvcGVuYWNjLmgKK2RpZmYgLS1naXQgYS9saWJnb21wL3BsdWdpbi9NYWtlZnJhZy5hbSBiL2xpYmdvbXAvcGx1Z2luL01ha2VmcmFnLmFtCitpbmRleCAxNjc0ODVmLi5kMmM1NDI4IDEwMDY0NAorLS0tIGEvbGliZ29tcC9wbHVnaW4vTWFrZWZyYWcuYW0KKysrKyBiL2xpYmdvbXAvcGx1Z2luL01ha2VmcmFnLmFtCitAQCAtMzUsNyArMzUsNyBAQCBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpICQoUExVR0lOX05WUFRYX0NQUEZMQUdTKQorIGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xERkxBR1MgPSAkKGxpYmdvbXBfcGx1Z2luX252cHR4X3ZlcnNpb25faW5mbykgXAorIAkkKGx0X2hvc3RfZmxhZ3MpCisgbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTERGTEFHUyArPSAkKFBMVUdJTl9OVlBUWF9MREZMQUdTKQorLWxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xJQkFERCA9IGxpYmdvbXAubGEgJChQTFVHSU5fTlZQVFhfTElCUykKKytsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MSUJBREQgPSAkKFBMVUdJTl9OVlBUWF9MSUJTKQorIGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xJQlRPT0xGTEFHUyA9IC0tdGFnPWRpc2FibGUtc3RhdGljCisgZW5kaWYKKyAKK0BAIC00NSw1ICs0NSw0IEBAIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX1NPVVJDRVMgPSBwbHVnaW4vcGx1Z2luLWhvc3QuYworIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURIT1NUX05PTlNITV9QTFVHSU4KKyBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MREZMQUdTID0gXAorIAkkKGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX3ZlcnNpb25faW5mbykgJChsdF9ob3N0X2ZsYWdzKQorLWxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xJQkFERCA9IGxpYmdvbXAubGEKKyBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MSUJUT09MRkxBR1MgPSAtLXRhZz1kaXNhYmxlLXN0YXRpYworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM2LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM2LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY5MTk0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzYtVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGcm9tIDg2MWJjZmQ0YWU4MTRmMzUxZTBjNjY4ZWUyNmQwMWQxMzMxZTA0MjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVHVlLCAyOCBBcHIgMjAxNSAyMzoxNToyNyAtMDcwMAorU3ViamVjdDogW1BBVENIIDM2LzM3XSBVc2UgU1lTVEVNTElCU19ESVIgcmVwbGFjZW1lbnQgaW5zdGVhZCBvZiBoYXJkY29kaW5nCisgYmFzZV9saWJkaXIKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdjYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAoraW5kZXggOWFiYjI1Mi4uNzk1MjVlZSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKKysrKyBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKK0BAIC0yMSw3ICsyMSw3IEBACisgI2lmbmRlZiBHQ0NfQUFSQ0g2NF9MSU5VWF9ICisgI2RlZmluZSBHQ0NfQUFSQ0g2NF9MSU5VWF9ICisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC1hYXJjaDY0JXttYmlnLWVuZGlhbjpfYmV9JXttYWJpPWlscDMyOl9pbHAzMn0uc28uMSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfSV7bWFiaT1pbHAzMjpfaWxwMzJ9LnNvLjEiCisgCisgI3VuZGVmICBBU0FOX0NDMV9TUEVDCisgI2RlZmluZSBBU0FOX0NDMV9TUEVDICIleyU6c2FuaXRpemUoYWRkcmVzcyk6LWZ1bndpbmQtdGFibGVzfSIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNy1wcjY1Nzc5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNy1wcjY1Nzc5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MjQ2NzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM3LXByNjU3NzkucGF0Y2gKQEAgLTAsMCArMSwxNzMgQEAKK0xpc3QtSWQ6IDxnY2MtcGF0Y2hlcy5nY2MuZ251Lm9yZz4KK0xpc3QtQXJjaGl2ZTogPGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8+CitMaXN0LVBvc3Q6IDxtYWlsdG86Z2NjLXBhdGNoZXMgYXQgZ2NjIGRvdCBnbnUgZG90IG9yZz4KK0xpc3QtSGVscDogPG1haWx0bzpnY2MtcGF0Y2hlcy1oZWxwIGF0IGdjYyBkb3QgZ251IGRvdCBvcmc+CitEYXRlOiBNb24sIDIwIEFwciAyMDE1IDEyOjQwOjQ5ICswOTMwCitGcm9tOiBBbGFuIE1vZHJhIDxhbW9kcmEgYXQgZ21haWwgZG90IGNvbT4KK1RvOiBnY2MtcGF0Y2hlcyBhdCBnY2MgZG90IGdudSBkb3Qgb3JnCitTdWJqZWN0OiBbUGF0Y2hdIHByNjU3NzkgLSBbNS82IFJlZ3Jlc3Npb25dIHVuZGVmaW5lZCBsb2NhbCBzeW1ib2wgb24gcG93ZXJwYworCitUaGlzIHBhdGNoIHJlbW92ZXMgYm9ndXMgZGVidWcgaW5mbyBsZWZ0IGFyb3VuZCBieSBzaHJpbmstd3JhcHBpbmcsCit3aGljaCBvbiBzb21lIHBvd2VycGMgdGFyZ2V0cyB3aXRoIGp1c3QgdGhlIHJpZ2h0IHJlZ2lzdGVyIGFsbG9jYXRpb24KK2xlZCB0byBhc3NlbWJseSBlcnJvcnMuCisKK0Jvb3RzdHJhcHBlZCBhbmQgcmVncmVzc2lvbiB0ZXN0ZWQgcG93ZXJwYzY0LWxpbnV4IGFuZCB4ODZfNjQtbGludXguCisKK2h0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTY1Nzc5CisKK2djYy8KKwlQUiBkZWJ1Zy82NTc3OQorCSogc2hyaW5rLXdyYXAuYyAoaW5zbl91c2VzX3JlZyk6IE5ldyBmdW5jdGlvbi4KKwkobW92ZV9pbnNuX2Zvcl9zaHJpbmtfd3JhcCk6IFJlbW92ZSBkZWJ1ZyBpbnNucyB1c2luZyByZWdzIHNldAorCWJ5IHRoZSBtb3ZlZCBpbnNuLgorZ2NjL3Rlc3RzdWl0ZS8KKwkqIGdjYy5kZy9wcjY1Nzc5LmM6IE5ldy4KKwkKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyAoZnJvbSBtYWlsaW5nIGxpc3QsIG5vdCBtZXJnZWQgeWV0KQorCitJbmRleDogYS9nY2Mvc2hyaW5rLXdyYXAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvZ2NjL3Nocmluay13cmFwLmMub3JpZworKysrIGIvZ2NjL3Nocmluay13cmFwLmMKK0BAIC0xODIsNiArMTgyLDIxIEBAIGxpdmVfZWRnZV9mb3JfcmVnIChiYXNpY19ibG9jayBiYiwgaW50IHIKKyAgIHJldHVybiBsaXZlX2VkZ2U7CisgfQorIAorK3N0YXRpYyBib29sCisraW5zbl91c2VzX3JlZyAocnR4X2luc24gKmluc24sIHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IGVuZF9yZWdubykKKyt7CisrICBkZl9yZWYgdXNlOworKworKyAgRk9SX0VBQ0hfSU5TTl9VU0UgKHVzZSwgaW5zbikKKysgICAgeworKyAgICAgIHJ0eCByZWcgPSBERl9SRUZfUkVHICh1c2UpOworKworKyAgICAgIGlmIChSRUdfUCAocmVnKSAmJiBSRUdOTyAocmVnKSA+PSByZWdubyAmJiBSRUdOTyAocmVnKSA8IGVuZF9yZWdubykKKysJcmV0dXJuIHRydWU7CisrICAgIH0KKysgIHJldHVybiBmYWxzZTsKKyt9CisrCisgLyogVHJ5IHRvIG1vdmUgSU5TTiBmcm9tIEJCIHRvIGEgc3VjY2Vzc29yLiAgUmV0dXJuIHRydWUgb24gc3VjY2Vzcy4KKyAgICBVU0VTIGFuZCBERUZTIGFyZSB0aGUgc2V0IG9mIHJlZ2lzdGVycyB0aGF0IGFyZSB1c2VkIGFuZCBkZWZpbmVkCisgICAgYWZ0ZXIgSU5TTiBpbiBCQi4gIFNQTElUX1AgaW5kaWNhdGVzIHdoZXRoZXIgYSBsaXZlIGVkZ2UgZnJvbSBCQgorQEAgLTM0MCwxMCArMzU1LDE1IEBAIG1vdmVfaW5zbl9mb3Jfc2hyaW5rX3dyYXAgKGJhc2ljX2Jsb2NrIGIKKyAgICAgICAqc3BsaXRfcCA9IHRydWU7CisgICAgIH0KKyAKKysgIHZlYzxiYXNpY19ibG9jaz4gbGl2ZV9iYnM7CisrICBpZiAoTUFZX0hBVkVfREVCVUdfSU5TTlMpCisrICAgIGxpdmVfYmJzLmNyZWF0ZSAoNSk7CisgICAvKiBBdCB0aGlzIHBvaW50IHdlIGFyZSBjb21taXR0ZWQgdG8gbW92aW5nIElOU04sIGJ1dCBsZXQncyB0cnkgdG8KKyAgICAgIG1vdmUgaXQgYXMgZmFyIGFzIHdlIGNhbi4gICovCisgICBkbworICAgICB7CisrICAgICAgaWYgKE1BWV9IQVZFX0RFQlVHX0lOU05TKQorKwlsaXZlX2Jicy5zYWZlX3B1c2ggKGJiKTsKKyAgICAgICBsaXZlX291dCA9IGRmX2dldF9saXZlX291dCAoYmIpOworICAgICAgIGxpdmVfaW4gPSBkZl9nZXRfbGl2ZV9pbiAobmV4dF9ibG9jayk7CisgICAgICAgYmIgPSBuZXh0X2Jsb2NrOworQEAgLTQyNiw2ICs0NDYsMzQgQEAgbW92ZV9pbnNuX2Zvcl9zaHJpbmtfd3JhcCAoYmFzaWNfYmxvY2sgYgorIAlTRVRfUkVHTk9fUkVHX1NFVCAoYmJfdXNlcywgaSk7CisgICAgIH0KKyAKKysgIC8qIFJlbW92ZSBkZWJ1ZyBpbnNucyB1c2luZyByZWdzIHNldCBieSB0aGUgaW5zbiB3ZSBhcmUgbW92aW5nLiAgKi8KKysgIGlmIChNQVlfSEFWRV9ERUJVR19JTlNOUykKKysgICAgeworKyAgICAgIHdoaWxlICghbGl2ZV9iYnMuaXNfZW1wdHkgKCkpCisrCXsKKysJICBydHhfaW5zbiAqZGluc247CisrCSAgYmFzaWNfYmxvY2sgdG1wX2JiID0gbGl2ZV9iYnMucG9wICgpOworKworKwkgIEZPUl9CQl9JTlNOU19SRVZFUlNFICh0bXBfYmIsIGRpbnNuKQorKwkgICAgeworKwkgICAgICBpZiAoZGluc24gPT0gaW5zbikKKysJCWJyZWFrOworKwkgICAgICBpZiAoREVCVUdfSU5TTl9QIChkaW5zbikKKysJCSAgJiYgaW5zbl91c2VzX3JlZyAoZGluc24sIGRyZWdubywgZW5kX2RyZWdubykpCisrCQl7CisrCQkgIGlmICgqc3BsaXRfcCkKKysJCSAgICAvKiBJZiBzcGxpdCwgdGhlbiB3ZSB3aWxsIGJlIG1vdmluZyBpbnNuIGludG8gYQorKwkJICAgICAgIG5ld2x5IGNyZWF0ZWQgYmxvY2sgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGVudHJ5CisrCQkgICAgICAgYmxvY2suICBNb3ZlIHRoZSBkZWJ1ZyBpbmZvIHRoZXJlIHRvby4gICovCisrCQkgICAgZW1pdF9kZWJ1Z19pbnNuX2FmdGVyIChQQVRURVJOIChkaW5zbiksIGJiX25vdGUgKGJiKSk7CisrCQkgIGRlbGV0ZV9pbnNuIChkaW5zbik7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgfQorKwl9CisrICAgICAgbGl2ZV9iYnMucmVsZWFzZSAoKTsKKysgICAgfQorKworICAgZW1pdF9pbnNuX2FmdGVyIChQQVRURVJOIChpbnNuKSwgYmJfbm90ZSAoYmIpKTsKKyAgIGRlbGV0ZV9pbnNuIChpbnNuKTsKKyAgIHJldHVybiB0cnVlOworSW5kZXg6IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI2NTc3OS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjY1Nzc5LmMKK0BAIC0wLDAgKzEsNjQgQEAKKysvKiB7IGRnLWRvIHJ1biB9ICovCisrLyogeyBkZy1vcHRpb25zICItTzIgLWciIH0gKi8KKysvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLW1yZWxvY2F0YWJsZSIgeyB0YXJnZXQgcG93ZXJwYy0qLXJ0ZW1zKiB9IH0gKi8KKysKKyt1bnNpZ25lZCBsb25nIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCisrYWRsZXIzMiAodW5zaWduZWQgbG9uZyBhZGxlciwgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQorK3sKKysgIHVuc2lnbmVkIGxvbmcgczEgPSBhZGxlciAmIDB4ZmZmZjsKKysgIHVuc2lnbmVkIGxvbmcgczIgPSAoYWRsZXIgPj4gMTYpICYgMHhmZmZmOworKyAgaW50IGs7CisrCisrICBpZiAoYnVmID09IDApCisrICAgIHJldHVybiAxTDsKKysKKysgIHdoaWxlIChsZW4gPiAwKQorKyAgICB7CisrICAgICAgayA9IGxlbiA8IDU1NTIgPyBsZW4gOiA1NTUyOworKyAgICAgIGxlbiAtPSBrOworKyAgICAgIHdoaWxlIChrID49IDE2KQorKwl7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBrIC09IDE2OworKwl9CisrICAgICAgaWYgKGsgIT0gMCkKKysJZG8KKysJICB7CisrCSAgICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIH0gd2hpbGUgKC0tayk7CisrICAgICAgczEgJj0gMHhmZmZmZmZmZlVMOworKyAgICAgIHMyICY9IDB4ZmZmZmZmZmZVTDsKKysgICAgICBzMSAlPSA2NTUyMUw7CisrICAgICAgczIgJT0gNjU1MjFMOworKyAgICB9CisrICByZXR1cm4gKHMyIDw8IDE2KSB8IHMxOworK30KKysKKyt1bnNpZ25lZCBjaGFyIGJ1ZltdID0geyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LAorKwkJCTgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsCisrCQkJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJCQkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkJCTB4NTUsIDB4YWEgfTsKKytpbnQKKyttYWluICgpCisreworKyAgdW5zaWduZWQgbG9uZyB4ID0gYWRsZXIzMiAoMCwgYnVmLCBzaXplb2YgYnVmKTsKKysgIGlmICh4ICE9IDB4NjQwNDA5ZWZVTCkKKysgICAgX19idWlsdGluX2Fib3J0ICgpOworKyAgcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzOC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM4LWZpeC1nKystc3lzcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDI0ZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzOC1maXgtZysrLXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorUG9ydGlvbnMgb2YKKworaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL2djYy1wYXRjaGVzQGdjYy5nbnUub3JnL21zZzI2MDEzLmh0bWwKKworYXJlIG5vdCB1cHN0cmVhbWVkIHlldC4gU28gbGV0cyBrZWVwIG1pc3NpbmcgcGllY2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2l0aG91dCB0aGlzLCBjb21waWxpbmcgc29tZXRoaW5nIHNpbXBsZSBsaWtlICNpbmNsdWRlIDxsaW1pdHM+IG9uIHRhcmdldAord2l0aCBjKysgdGVzdC5jcHAgZmFpbHMgdW5hYmxlIHRvIGZpbmQgdGhlIGhlYWRlci4gc3RyYWNlIHNob3dzIGl0IGxvb2tpbmcgaW4KK3Vzci9pbmNsdWRlL3h4eHggcmF0aGVyIHRoYW4gL3Vzci9pbmNsdWRlL3h4eHgKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGdjYy00LjguMS9nY2MvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYwkyMDEzLTA3LTE1IDE1OjU1OjQ5LjQ4ODM5OTEzMiAtMDcwMAorKysrIGdjYy00LjguMS9nY2MvY29uZmlndXJlLmFjCTIwMTMtMDctMTUgMTY6MDI6MzEuNzcyNDA2Njc5IC0wNzAwCitAQCAtMTQ4LDcgKzE0OCw5IEBACisgaWYgdGVzdCAiJHt3aXRoX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGdjY19neHhfd2l0aG91dF9zeXNyb290PWBleHByICIke2djY19neHhfaW5jbHVkZV9kaXJ9IiA6ICIke3dpdGhfc3lzcm9vdH0iJ1woLipcKSdgCisgICBpZiB0ZXN0ICIke2djY19neHhfd2l0aG91dF9zeXNyb290fSI7IHRoZW4KKy0gICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGlmIHRlc3QgeCR7d2l0aF9zeXNyb290fSAhPSB4LzsgdGhlbgorKyAgICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBmaQorICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290PTEKKyAgIGZpCisgZmkKK0luZGV4OiBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9jb25maWd1cmUJMjAxMy0wNy0xNSAxNTo1NTo0OS40NzIzOTkxMzIgLTA3MDAKKysrKyBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZQkyMDEzLTA3LTE1IDE2OjAyOjMxLjc4MDQwNjY4MCAtMDcwMAorQEAgLTMzMjUsNyArMzMyNSw5IEBACisgaWYgdGVzdCAiJHt3aXRoX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGdjY19neHhfd2l0aG91dF9zeXNyb290PWBleHByICIke2djY19neHhfaW5jbHVkZV9kaXJ9IiA6ICIke3dpdGhfc3lzcm9vdH0iJ1woLipcKSdgCisgICBpZiB0ZXN0ICIke2djY19neHhfd2l0aG91dF9zeXNyb290fSI7IHRoZW4KKy0gICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGlmIHRlc3QgeCR7d2l0aF9zeXNyb290fSAhPSB4LzsgdGhlbgorKyAgICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBmaQorICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290PTEKKyAgIGZpCisgZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzktbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzOS1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYwMjVjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzktbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsNTEgQEAKK0Zyb20gYWNlYTBkZjk5OTdhNDdmOGI4MjI0YjZjYTE2MThjOGM5ZGZiZTZkNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogU3VuLCA1IEp1bCAyMDE1IDIwOjI1OjE4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYmNjMTogZml4IGxpYmNjMSdzIGluc3RhbGwgcGF0aCBhbmQgcnBhdGgKKworKiBJbnN0YWxsIGxpYmNjMS5zbyBhbmQgbGliY2MxcGx1Z2luLnNvIGludG8KKyAgJChsaWJleGVjZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKGdjY192ZXJzaW9uKSwgYXMgd2hhdCB3ZQorICBoYWQgZG9uZSB0byBsdG8tcGx1Z2luLgorKiBGaXggYmFkIFJQQVRIIGl1c3N1ZToKKyAgZ2NjLTUuMi4wOiBwYWNrYWdlIGdjYy1wbHVnaW5zIGNvbnRhaW5zIGJhZCBSUEFUSCAvcGF0aHQvdG8vdG1wL3N5c3Jvb3RzL3FlbXV4ODYtNjQvdXNyL2xpYjY0Ly4uL2xpYjY0IGluIGZpbGUKKyAvcGF0aC90by9nY2MvNS4yLjAtcjAvcGFja2FnZXMtc3BsaXQvZ2NjLXBsdWdpbnMvdXNyL2xpYjY0L2djYy94ODZfNjQtcG9reS1saW51eC81LjIuMC9wbHVnaW4vbGliY2MxcGx1Z2luLnNvLjAuMC4wCisgW3JwYXRoc10KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmNjMS9NYWtlZmlsZS5hbSAgfCAgICA0ICsrLS0KKyBsaWJjYzEvTWFrZWZpbGUuaW4gIHwgICAgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJjYzEvTWFrZWZpbGUuYW0gYi9saWJjYzEvTWFrZWZpbGUuYW0KK2luZGV4IDdhMjc0YjMuLmRiNjliZWEgMTAwNjQ0CistLS0gYS9saWJjYzEvTWFrZWZpbGUuYW0KKysrKyBiL2xpYmNjMS9NYWtlZmlsZS5hbQorQEAgLTM1LDggKzM1LDggQEAgbGliaWJlcnR5ID0gJChpZiAkKHdpbGRjYXJkICQobGliaWJlcnR5X25vYXNhbikpLCQoV2MpJChsaWJpYmVydHlfbm9hc2FuKSwgXAorIAkgICAgJChXYykkKGxpYmliZXJ0eV9ub3JtYWwpKSkKKyBsaWJpYmVydHlfZGVwID0gJChwYXRzdWJzdCAkKFdjKSUsJSwkKGxpYmliZXJ0eSkpCisgCistcGx1Z2luZGlyID0gJChsaWJkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQoZ2NjX3ZlcnNpb24pL3BsdWdpbgorLWNjMWxpYmRpciA9ICQobGliZGlyKS8kKGxpYnN1ZmZpeCkKKytjYzFsaWJkaXIgPSAkKGxpYmV4ZWNkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQoZ2NjX3ZlcnNpb24pCisrcGx1Z2luZGlyID0gJChjYzFsaWJkaXIpCisgCisgaWYgRU5BQkxFX1BMVUdJTgorIHBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmNjMXBsdWdpbi5sYQorZGlmZiAtLWdpdCBhL2xpYmNjMS9NYWtlZmlsZS5pbiBiL2xpYmNjMS9NYWtlZmlsZS5pbgoraW5kZXggMTkxNjEzNC4uYzg5OTVkMiAxMDA2NDQKKy0tLSBhL2xpYmNjMS9NYWtlZmlsZS5pbgorKysrIGIvbGliY2MxL01ha2VmaWxlLmluCitAQCAtMjYyLDggKzI2Miw4IEBAIGxpYmliZXJ0eSA9ICQoaWYgJCh3aWxkY2FyZCAkKGxpYmliZXJ0eV9ub2FzYW4pKSwkKFdjKSQobGliaWJlcnR5X25vYXNhbiksIFwKKyAJICAgICQoV2MpJChsaWJpYmVydHlfbm9ybWFsKSkpCisgCisgbGliaWJlcnR5X2RlcCA9ICQocGF0c3Vic3QgJChXYyklLCUsJChsaWJpYmVydHkpKQorLXBsdWdpbmRpciA9ICQobGliZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKGdjY192ZXJzaW9uKS9wbHVnaW4KKy1jYzFsaWJkaXIgPSAkKGxpYmRpcikvJChsaWJzdWZmaXgpCisrY2MxbGliZGlyID0gJChsaWJleGVjZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKGdjY192ZXJzaW9uKQorK3BsdWdpbmRpciA9ICQoY2MxbGliZGlyKQorIEBFTkFCTEVfUExVR0lOX1RSVUVAcGx1Z2luX0xUTElCUkFSSUVTID0gbGliY2MxcGx1Z2luLmxhCisgQEVOQUJMRV9QTFVHSU5fVFJVRUBjYzFsaWJfTFRMSUJSQVJJRVMgPSBsaWJjYzEubGEKKyBCVUlMVF9TT1VSQ0VTID0gY29tcGlsZXItbmFtZS5oCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDQwLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwNDAtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkODFhZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDQwLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDE5NiBAQAorQmVpbmcgYWJsZSB0byBidWlsZCBhIG5hdGl2ZXNkayBnY2MgaXMgdXNlZnVsLCBwYXJ0aWN1bGFybHkgaW4gY2FzZXMKK3doZXJlIHRoZSBob3N0IGNvbXBpbGVyIG1heSBiZSBvZiBhbiBpbmNvbXBhdGlibGUgdmVyc2lvbiAob3IgYSAzMgorYml0IGNvbXBpbGVyIGlzIG5lZWRlZCkuCisKK1NhZGx5LCBidWlsZGluZyBuYXRpdmVzZGstZ2NjIGlzIG5vdCBzdHJhaWdodCBmb3J3YXJkLiBXZSBpbnN0YWxsCituYXRpdmVzZGstZ2NjIGludG8gYSByZWxvY2F0YWJsZSBsb2NhdGlvbiBhbmQgdGhpcyBtZWFucyB0aGF0IGl0cworbGlicmFyeSBsb2NhdGlvbnMgY2FuIGNoYW5nZS4gIk5vcm1hbCIgc3lzcm9vdCBzdXBwb3J0IGRvZXNuJ3QgaGVscAoraW4gdGhpcyBjYXNlIHNpbmNlIHRoZSB2YWx1ZXMgb2YgcGF0aHMgbGlrZSAibGliZGlyIiBjaGFuZ2UsIG5vdCBqdXN0CitiYXNlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBzeXN0ZW0uCisKK0luIG9yZGVyIHRvIGhhbmRsZSB0aGlzIHdlIGRvIHR3byB0aGluZ3M6CisKK2EpIEFkZCAlciBpbnRvIHNwZWMgZmlsZSBtYXJrdXAgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGluamVjdGVkIHBhdGhzCisgICBzdWNoIGFzIFNZU1RFTUxJQlNfRElSIChzZWUgZ2NjX211bHRpbGliX3NldHVwKCkpLgorYikgQWRkIG90aGVyIHBhdGhzIHdoaWNoIG5lZWQgcmVsb2NhdGlvbiBpbnRvIGEgLmdjY3JlbG9jcHJlZml4IHNlY3Rpb24KKyAgIHdoaWNoIHRoZSByZWxvY2F0aW9uIGNvZGUgd2lsbCBub3RpY2UgYW5kIGFkanVzdCBhdXRvbWF0aWNhbGx5LgorCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorUlAgMjAxNS83LzI4CisKK2RpZmYgLS1naXQgYS9nY2MvY3BwZGVmYXVsdC5jIGIvZ2NjL2NwcGRlZmF1bHQuYworLS0tIGEvZ2NjL2NwcGRlZmF1bHQuYworKysrIGIvZ2NjL2NwcGRlZmF1bHQuYworQEAgLTM1LDYgKzM1LDMwIEBACisgIyB1bmRlZiBDUk9TU19JTkNMVURFX0RJUgorICNlbmRpZgorIAorK3N0YXRpYyBjaGFyIEdQTFVTUExVU19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHUExVU1BMVVNfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgR0NDX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdDQ19JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVDsKKysjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBMT0NBTF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBMT0NBTF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgUFJFRklYX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgUFJFRklYX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFBSRUZJWF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgRklYRURfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBGSVhFRF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBGSVhFRF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgQ1JPU1NfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBDUk9TU19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBDUk9TU19JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgVE9PTF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIFRPT0xfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gVE9PTF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSCisrc3RhdGljIGNoYXIgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUjsKKysjZW5kaWYKKysKKyBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KKyAjaWZkZWYgSU5DTFVERV9ERUZBVUxUUworID0gSU5DTFVERV9ERUZBVUxUUzsKK0BAIC00MiwzOCArNjYsMzggQEAgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCisgPSB7CisgI2lmZGVmIEdQTFVTUExVU19JTkNMVURFX0RJUgorICAgICAvKiBQaWNrIHVwIEdOVSBDKysgZ2VuZXJpYyBpbmNsdWRlIGZpbGVzLiAgKi8KKy0gICAgeyBHUExVU1BMVVNfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAorKyAgICB7IEdQTFVTUExVU19JTkNMVURFX0RJUlZBUiwgIkcrKyIsIDEsIDEsCisgICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSCisgICAgIC8qIFBpY2sgdXAgR05VIEMrKyB0YXJnZXQtZGVwZW5kZW50IGluY2x1ZGUgZmlsZXMuICAqLworLSAgICB7IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKKysgICAgeyBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUlZBUiwgIkcrKyIsIDEsIDEsCisgICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAxIH0sCisgI2VuZGlmCisgI2lmZGVmIEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUgorICAgICAvKiBQaWNrIHVwIEdOVSBDKysgYmFja3dhcmQgYW5kIGRlcHJlY2F0ZWQgaW5jbHVkZSBmaWxlcy4gICovCistICAgIHsgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKKysgICAgeyBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAorICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBHQ0NfSU5DTFVERV9ESVIKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMuICAqLworLSAgICB7IEdDQ19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKysgICAgeyBHQ0NfSU5DTFVERV9ESVJWQVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMgdW5kZXIgdGhlIHNwZWNpZmllZCBzeXNyb290LiAgKi8KKy0gICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVCwgIkdDQyIsIDAsIDAsIDEsIDAgfSwKKysgICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzJWQVIsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisgICAgIC8qIC91c3IvbG9jYWwvaW5jbHVkZSBjb21lcyBiZWZvcmUgdGhlIGZpeGluY2x1ZGVkIGhlYWRlciBmaWxlcy4gICovCistICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDIgfSwKKy0gICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMCB9LAorKyAgICB7IExPQ0FMX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAxLCAyIH0sCisrICAgIHsgTE9DQUxfSU5DTFVERV9ESVJWQVIsIDAsIDAsIDEsIDEsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgUFJFRklYX0lOQ0xVREVfRElSCistICAgIHsgUFJFRklYX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAwLCAwIH0sCisrICAgIHsgUFJFRklYX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAwLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEZJWEVEX0lOQ0xVREVfRElSCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZml4aW5jbHVkZXMuICAqLworLSAgICB7IEZJWEVEX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwKKysgICAgeyBGSVhFRF9JTkNMVURFX0RJUlZBUiwgIkdDQyIsIDAsIDAsIDAsCisgICAgICAgLyogQSBtdWx0aWxpYiBzdWZmaXggbmVlZHMgYWRkaW5nIGlmIGRpZmZlcmVudCBtdWx0aWxpYnMgdXNlCisgCSBkaWZmZXJlbnQgaGVhZGVycy4gICovCisgI2lmZGVmIFNZU1JPT1RfSEVBREVSU19TVUZGSVhfU1BFQworQEAgLTg1LDE2ICsxMDksMTYgQEAgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCisgI2VuZGlmCisgI2lmZGVmIENST1NTX0lOQ0xVREVfRElSCisgICAgIC8qIE9uZSBwbGFjZSB0aGUgdGFyZ2V0IHN5c3RlbSdzIGhlYWRlcnMgbWlnaHQgYmUuICAqLworLSAgICB7IENST1NTX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorKyAgICB7IENST1NTX0lOQ0xVREVfRElSVkFSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBUT09MX0lOQ0xVREVfRElSCisgICAgIC8qIEFub3RoZXIgcGxhY2UgdGhlIHRhcmdldCBzeXN0ZW0ncyBoZWFkZXJzIG1pZ2h0IGJlLiAgKi8KKy0gICAgeyBUT09MX0lOQ0xVREVfRElSLCAiQklOVVRJTFMiLCAwLCAxLCAwLCAwIH0sCisrICAgIHsgVE9PTF9JTkNMVURFX0RJUlZBUiwgIkJJTlVUSUxTIiwgMCwgMSwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIKKyAgICAgLyogL3Vzci9pbmNsdWRlIGNvbWVzIGRlYWQgbGFzdC4gICovCistICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDIgfSwKKy0gICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMCB9LAorKyAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAyIH0sCisrICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSVkFSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDAgfSwKKyAjZW5kaWYKKyAgICAgeyAwLCAwLCAwLCAwLCAwLCAwIH0KKyAgIH07CitkaWZmIC0tZ2l0IGEvZ2NjL2NwcGRlZmF1bHQuaCBiL2djYy9jcHBkZWZhdWx0LmgKKy0tLSBhL2djYy9jcHBkZWZhdWx0LmgKKysrKyBiL2djYy9jcHBkZWZhdWx0LmgKK0BAIC0zMyw3ICszMyw4IEBACisgCisgc3RydWN0IGRlZmF1bHRfaW5jbHVkZQorIHsKKy0gIGNvbnN0IGNoYXIgKmNvbnN0IGZuYW1lOwkvKiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5LiAgKi8KKysgIGNvbnN0IGNoYXIgKmZuYW1lOyAgICAgLyogVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeS4gICovCisrCisgICBjb25zdCBjaGFyICpjb25zdCBjb21wb25lbnQ7CS8qIFRoZSBjb21wb25lbnQgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5CisgCQkJCSAgIChzZWUgdXBkYXRlX3BhdGggaW4gcHJlZml4LmMpICovCisgICBjb25zdCBjaGFyIGNwbHVzcGx1czsJCS8qIE9ubHkgbG9vayBoZXJlIGlmIHdlJ3JlIGNvbXBpbGluZyBDKysuICAqLworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMjAsNiArMTIwLDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKnRhcmdldF9zeXN0ZW1fcm9vdCA9IFRBUkdFVF9TWVNURU1fUk9PVDsKKyAjZWxzZQorIHN0YXRpYyBjb25zdCBjaGFyICp0YXJnZXRfc3lzdGVtX3Jvb3QgPSAwOworICNlbmRpZgorKyAKKytzdGF0aWMgY2hhciB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNZU1RFTUxJQlNfRElSOworIAorIC8qIE5vbnplcm8gbWVhbnMgcGFzcyB0aGUgdXBkYXRlZCB0YXJnZXRfc3lzdGVtX3Jvb3QgdG8gdGhlIGNvbXBpbGVyLiAgKi8KKyAKK0BAIC0zOTAsNiArMzkyLDcgQEAgb3Igd2l0aCBjb25zdGFudCB0ZXh0IGluIGEgc2luZ2xlIGFyZ3VtZW50LgorICAlRyAgICAgcHJvY2VzcyBMSUJHQ0NfU1BFQyBhcyBhIHNwZWMuCisgICVSICAgICBPdXRwdXQgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGFyZ2V0X3N5c3RlbV9yb290IGFuZAorICAgICAgICAgdGFyZ2V0X3N5c3Jvb3Rfc3VmZml4LgorKyAlciAgICAgT3V0cHV0IHRoZSBiYXNlIHBhdGggdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeAorICAlUyAgICAgcHJvY2VzcyBTVEFSVEZJTEVfU1BFQyBhcyBhIHNwZWMuICBBIGNhcGl0YWwgUyBpcyBhY3R1YWxseSB1c2VkIGhlcmUuCisgICVFICAgICBwcm9jZXNzIEVOREZJTEVfU1BFQyBhcyBhIHNwZWMuICBBIGNhcGl0YWwgRSBpcyBhY3R1YWxseSB1c2VkIGhlcmUuCisgICVDICAgICBwcm9jZXNzIENQUF9TUEVDIGFzIGEgc3BlYy4KK0BAIC0xMjg2LDEwICsxMjg5LDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpnY2NfbGliZXhlY19wcmVmaXg7CisgICAgZ2NjX2V4ZWNfcHJlZml4IGlzIHNldCBiZWNhdXNlLCBpbiB0aGF0IGNhc2UsIHdlIGtub3cgd2hlcmUgdGhlCisgICAgY29tcGlsZXIgaGFzIGJlZW4gaW5zdGFsbGVkLCBhbmQgdXNlIHBhdGhzIHJlbGF0aXZlIHRvIHRoYXQKKyAgICBsb2NhdGlvbiBpbnN0ZWFkLiAgKi8KKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfZXhlY19wcmVmaXggPSBTVEFOREFSRF9FWEVDX1BSRUZJWDsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfbGliZXhlY19wcmVmaXggPSBTVEFOREFSRF9MSUJFWEVDX1BSRUZJWDsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfYmluZGlyX3ByZWZpeCA9IFNUQU5EQVJEX0JJTkRJUl9QUkVGSVg7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXggPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYOworK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2V4ZWNfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0VYRUNfUFJFRklYOworK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2xpYmV4ZWNfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0xJQkVYRUNfUFJFRklYOworK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2JpbmRpcl9wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfQklORElSX1BSRUZJWDsKKytzdGF0aWMgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7CisgCisgLyogRm9yIG5hdGl2ZSBjb21waWxlcnMsIHRoZXNlIGFyZSB3ZWxsLWtub3duIHBhdGhzIGNvbnRhaW5pbmcKKyAgICBjb21wb25lbnRzIHRoYXQgbWF5IGJlIHByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0uICBGb3IgY3Jvc3MKK0BAIC0xMjk3LDkgKzEzMDAsOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7Cisgc3RhdGljIGNvbnN0IGNoYXIgKm1kX2V4ZWNfcHJlZml4ID0gTURfRVhFQ19QUkVGSVg7Cisgc3RhdGljIGNvbnN0IGNoYXIgKm1kX3N0YXJ0ZmlsZV9wcmVmaXggPSBNRF9TVEFSVEZJTEVfUFJFRklYOworIHN0YXRpYyBjb25zdCBjaGFyICptZF9zdGFydGZpbGVfcHJlZml4XzEgPSBNRF9TVEFSVEZJTEVfUFJFRklYXzE7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMQorK3N0YXRpYyBjaGFyIHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMVs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkKKyAgID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzIKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpCisgICA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMjsKKyAKKyAvKiBBIHJlbGF0aXZlIHBhdGggdG8gYmUgdXNlZCBpbiBmaW5kaW5nIHRoZSBsb2NhdGlvbiBvZiB0b29scworQEAgLTU1NTAsNiArNTU1MywxMSBAQCBkb19zcGVjXzEgKGNvbnN0IGNoYXIgKnNwZWMsIGludCBpbnN3aXRjaCwgY29uc3QgY2hhciAqc29mdF9tYXRjaGVkX3BhcnQpCisgCSAgICAgIH0KKyAJICAgIGJyZWFrOworIAorKyAgICAgICAgICBjYXNlICdyJzoKKysgICAgICAgICAgICAgIG9ic3RhY2tfZ3JvdyAoJm9ic3RhY2ssIHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgsCisrCQkgICAgICBzdHJsZW4gKHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgpKTsKKysgICAgICAgICAgICBicmVhazsKKysKKyAJICBjYXNlICdTJzoKKyAJICAgIHZhbHVlID0gZG9fc3BlY18xIChzdGFydGZpbGVfc3BlYywgMCwgTlVMTCk7CisgCSAgICBpZiAodmFsdWUgIT0gMCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwNDEtaGFuZGxlLXRhcmdldC1zeXNyb290LW11bHRpbGliLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDA0MS1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1Njk4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwNDEtaGFuZGxlLXRhcmdldC1zeXNyb290LW11bHRpbGliLnBhdGNoCkBAIC0wLDAgKzEsODggQEAKK1NlYXJjaCB0YXJnZXQgc3lzcm9vdCBnY2MgdmVyc2lvbiBzcGVjaWZpYyBkaXJzIHdpdGggbXVsdGlsaWIuCisKK1dlIGluc3RhbGwgdGhlIGdjYyBsaWJyYXJpZXMgKHN1Y2ggYXMgY3J0YmVnaW4ucCkgaW50bworPHN5c3Jvb3Q+PGxpYmRpcj4vPHRhcmdldC1zeXM+LzUuMi4wLword2hpY2ggaXMgYSBkZWZhdWx0IHNlYXJjaCBwYXRoIGZvciBHQ0MgKGFrYSBtdWx0aV9zdWZmaXggaW4gdGhlIAorY29kZSBiZWxvdykuIDx0YXJnZXQtc3lzPiBpcyAnbWFjaGluZScgaW4gZ2NjJ3MgdGVybWlub2xvZ3kuIFdlIHVzZQordGhlc2UgZGlyZWN0b3JpZXMgc28gdGhhdCBtdWx0aXBsZSBnY2MgdmVyc2lvbnMgY291bGQgaW4gdGhlb3J5IAorY28tZXhpc3Qgb24gdGFyZ2V0LgorCitXZSBvbmx5IHdhbnQgdG8gYnVpbGQgb25lIGdjYy1jcm9zcy1jYW5hZGlhbiBwZXIgYXJjaCBhbmQgaGF2ZSB0aGlzIHdvcmsgCitmb3IgYWxsIG11bHRpbGlicy4gPHRhcmdldC1zeXM+IGNhbiBiZSBoYW5kbGVkIGJ5IG1hcHBpbmcgdGhlIG11bHRpbGliCis8dGFyZ2V0LXN5cz4gdG8gdGhlIG9uZSB1c2VkIGJ5IGdjYy1jcm9zcy1jYW5hZGlhbiwgZS5nLiBtaXBzNjQtcG9sa21sbGliMzItbGludXggCitpcyBzeW1saW5rZWQgdG8gYnkgbWlwczY0LXBva3ktbGludXguCisKK1RoZSBkZWZhdWx0IGdjYyBzZWFyY2ggcGF0aCBpbiB0aGUgdGFyZ2V0IHN5c3Jvb3QgZm9yIGEgImxpYjY0IiBtdXRsaWxpYiBpczoKKworPHN5c3Jvb3Q+L2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L3Vzci9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vbGliMzIvCis8c3lzcm9vdD4vdXNyL2xpYjMyLworCit3aGljaCBtZWFucyB0aGF0IHRoZSBsaWIzMiBjcnRiZWdpbi5vIHdpbGwgYmUgZm91bmQgYW5kIHRoZSBsaWI2NCBvbmVzCit3aWxsIG5vdCB3aGljaCBsZWFkcyB0byBjb21waWxlciBmYWlsdXJlcy4KKworVGhpcyBwYXRjaCBpbmplY3RzIGEgbXVsdGlsaWIgdmVyc2lvbiBvZiB0aGF0IHBhdGggZmlyc3Qgc28gdGhlIGxpYjY0CitiaW5hcmllcyBjYW4gYmUgZm91bmQgZmlyc3QuIFdpdGggdGhpcyBjaGFuZ2UgdGhlIHNlYXJjaCBwYXRoIGJlY29tZXM6CisKKzxzeXNyb290Pi9saWIzMi8uLi9saWI2NC9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vdXNyL2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi9saWIzMi8KKzxzeXNyb290Pi91c3IvbGliMzIvCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworUlAgMjAxNS83LzMxCisKK0luZGV4OiBnY2MtNS4yLjAvZ2NjL2djYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTUuMi4wLm9yaWcvZ2NjL2djYy5jCisrKysgZ2NjLTUuMi4wL2djYy9nY2MuYworQEAgLTIzMDUsNyArMjMwNSw3IEBAIGZvcl9lYWNoX3BhdGggKGNvbnN0IHN0cnVjdCBwYXRoX3ByZWZpeAorICAgICAgIGlmIChwYXRoID09IE5VTEwpCisgCXsKKyAJICBsZW4gPSBwYXRocy0+bWF4X2xlbiArIGV4dHJhX3NwYWNlICsgMTsKKy0JICBsZW4gKz0gTUFYIChNQVggKHN1ZmZpeF9sZW4sIG11bHRpX29zX2Rpcl9sZW4pLCBtdWx0aWFyY2hfbGVuKTsKKysJICBsZW4gKz0gTUFYICgoc3VmZml4X2xlbiArIG11bHRpX29zX2Rpcl9sZW4pLCBtdWx0aWFyY2hfbGVuKTsKKyAJICBwYXRoID0gWE5FV1ZFQyAoY2hhciwgbGVuKTsKKyAJfQorIAorQEAgLTIzMTcsNiArMjMxNywzMyBAQCBmb3JfZWFjaF9wYXRoIChjb25zdCBzdHJ1Y3QgcGF0aF9wcmVmaXgKKyAJICAvKiBMb29rIGZpcnN0IGluIE1BQ0hJTkUvVkVSU0lPTiBzdWJkaXJlY3RvcnkuICAqLworIAkgIGlmICghc2tpcF9tdWx0aV9kaXIpCisgCSAgICB7CisrCSAgICAgIGlmICghKHBsLT5vc19tdWx0aWxpYiA/IHNraXBfbXVsdGlfb3NfZGlyIDogc2tpcF9tdWx0aV9kaXIpKQorKwkgICAgICAgIHsKKysJICAgICAgICAgIGNvbnN0IGNoYXIgKnRoaXNfbXVsdGk7CisrCSAgICAgICAgICBzaXplX3QgdGhpc19tdWx0aV9sZW47CisrCisrCSAgICAgICAgICBpZiAocGwtPm9zX211bHRpbGliKQorKwkJICAgIHsKKysJCSAgICAgIHRoaXNfbXVsdGkgPSBtdWx0aV9vc19kaXI7CisrCQkgICAgICB0aGlzX211bHRpX2xlbiA9IG11bHRpX29zX2Rpcl9sZW47CisrCQkgICAgfQorKwkgICAgICAgICAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIHRoaXNfbXVsdGkgPSBtdWx0aV9kaXI7CisrCQkgICAgICB0aGlzX211bHRpX2xlbiA9IG11bHRpX2Rpcl9sZW47CisrCQkgICAgfQorKworKwkgICAgICAgICAgLyogTG9vayBpbiBtdWx0aWxpYiBNQUNISU5FL1ZFUlNJT04gc3ViZGlyZWN0b3J5IGZpcnN0ICovCisrCSAgICAgICAgICBpZiAodGhpc19tdWx0aV9sZW4pCisrCSAgICAgICAgICAgIHsKKysJCSAgICAgIG1lbWNweSAocGF0aCArIGxlbiwgdGhpc19tdWx0aSwgdGhpc19tdWx0aV9sZW4gKyAxKTsKKysJICAgICAgICAgICAgICBtZW1jcHkgKHBhdGggKyBsZW4gKyB0aGlzX211bHRpX2xlbiwgbXVsdGlfc3VmZml4LCBzdWZmaXhfbGVuICsgMSk7CisrCSAgICAgICAgICAgICAgcmV0ID0gY2FsbGJhY2sgKHBhdGgsIGNhbGxiYWNrX2luZm8pOworKwkgICAgICAgICAgICAgICAgaWYgKHJldCkKKysJCSAgICAgICAgICBicmVhazsKKysJICAgICAgICAgICAgfQorKwkgICAgICAgIH0KKysKKyAJICAgICAgbWVtY3B5IChwYXRoICsgbGVuLCBtdWx0aV9zdWZmaXgsIHN1ZmZpeF9sZW4gKyAxKTsKKyAJICAgICAgcmV0ID0gY2FsbGJhY2sgKHBhdGgsIGNhbGxiYWNrX2luZm8pOworIAkgICAgICBpZiAocmV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb21tb24uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2M2MwN2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNvbW1vbi5pbmMKQEAgLTAsMCArMSwxMDAgQEAKK1NVTU1BUlkgPSAiR05VIGNjIGFuZCBnY2MgQyBjb21waWxlcnMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2NjLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTCIKKworTkFUSVZFREVQUyA9ICIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitCUE4gPSAiZ2NjIgorCitkZWYgZ2V0X2djY19mbG9hdF9zZXR0aW5nKGJiLCBkKToKKyAgICBpZiBkLmdldFZhcignQVJNUEtHU0ZYX0VBQkknLCBUcnVlKSA9PSAiaGYiIGFuZCBkLmdldFZhcignVFJBTlNMQVRFRF9UQVJHRVRfQVJDSCcsIFRydWUpID09ICJhcm0iOgorICAgICAgICByZXR1cm4gIi0td2l0aC1mbG9hdD1oYXJkIgorICAgIGlmIGQuZ2V0VmFyKCdUQVJHRVRfRlBVJywgVHJ1ZSkgaW4gWyAnc29mdCcgXToKKyAgICAgICAgcmV0dXJuICItLXdpdGgtZmxvYXQ9c29mdCIKKyAgICBpZiBkLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpIGluIFsgJ3BwYy1lZmQnIF06CisgICAgICAgIHJldHVybiAiLS1lbmFibGUtZTUwMF9kb3VibGUiCisgICAgcmV0dXJuICIiCisKK2dldF9nY2NfZmxvYXRfc2V0dGluZ1t2YXJkZXB2YWx1ZV0gPSAiJHtAZ2V0X2djY19mbG9hdF9zZXR0aW5nKGJiLCBkKX0iCisKK2RlZiBnZXRfZ2NjX21pcHNfcGx0X3NldHRpbmcoYmIsIGQpOgorICAgIGlmIGQuZ2V0VmFyKCdUUkFOU0xBVEVEX1RBUkdFVF9BUkNIJywgVHJ1ZSkgaW4gWyAnbWlwcycsICdtaXBzZWwnIF0gYW5kIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbXBsdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmV0dXJuICItLXdpdGgtbWlwcy1wbHQiCisgICAgcmV0dXJuICIiCisKK2RlZiBnZXRfbG9uZ19kb3VibGVfc2V0dGluZyhiYiwgZCk6CisgICAgaWYgZC5nZXRWYXIoJ1RSQU5TTEFURURfVEFSR0VUX0FSQ0gnLCBUcnVlKSBpbiBbICdwb3dlcnBjJywgJ3Bvd2VycGM2NCcgXSBhbmQgZC5nZXRWYXIoJ1RDTElCQycsIFRydWUpIGluIFsgJ3VjbGliYycsICdnbGliYycgXToKKyAgICAgICAgcmV0dXJuICItLXdpdGgtbG9uZy1kb3VibGUtMTI4IgorICAgIHJldHVybiAiIgorCitkZWYgZ2V0X2djY19tdWx0aWFyY2hfc2V0dGluZyhiYiwgZCk6CisgICAgdGFyZ2V0X2FyY2ggPSBkLmdldFZhcignVFJBTlNMQVRFRF9UQVJHRVRfQVJDSCcsIFRydWUpCisgICAgbXVsdGlhcmNoX29wdGlvbnMgPSB7CisgICAgICAgICJpNTg2IjogICAgIi0tZW5hYmxlLXRhcmdldHM9YWxsIiwKKyAgICAgICAgImk2ODYiOiAgICAiLS1lbmFibGUtdGFyZ2V0cz1hbGwiLAorICAgICAgICAicG93ZXJwYyI6ICItLWVuYWJsZS10YXJnZXRzPXBvd2VycGM2NCIsCisgICAgICAgICJtaXBzIjogICAgIi0tZW5hYmxlLXRhcmdldHM9YWxsIiwKKyAgICAgICAgInNwYXJjIjogICAiLS1lbmFibGUtdGFyZ2V0cz1hbGwiLAorICAgIH0KKworICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbXVsdGlhcmNoJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBpZiB0YXJnZXRfYXJjaCBpbiBtdWx0aWFyY2hfb3B0aW9ucyA6CisgICAgICAgICAgICByZXR1cm4gbXVsdGlhcmNoX29wdGlvbnNbdGFyZ2V0X2FyY2hdCisgICAgcmV0dXJuICIiCisKKyMgdGhpcyBpcyB1c2VkIGJ5IHRoZSBtdWx0aWxpYiBzZXR1cCBvZiBnY2MKK2RlZiBnZXRfdHVuZV9wYXJhbWV0ZXJzKHR1bmUsIGQpOgorICAgIGF2YWlsdHVuZXMgPSBkLmdldFZhcignQVZBSUxUVU5FUycsIFRydWUpCisgICAgaWYgdHVuZSBub3QgaW4gYXZhaWx0dW5lcy5zcGxpdCgpOgorICAgICAgICBiYi5lcnJvcignVGhlIHR1bmU6ICVzIGlzIG5vdCBvbmUgb2YgdGhlIGF2YWlsYWJsZSB0dW5lczogJXMnLCB0dW5lIG9yIE5vbmUsIGF2YWlsdHVuZXMpCisKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBvdmVycmlkZSA9ICc6dHVuZS0nICsgdHVuZQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIGxvY2FsZGF0YS5nZXRWYXIoJ09WRVJSSURFUycsIEZhbHNlKSArIG92ZXJyaWRlKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgcmV0ZGljdCA9IHt9CisgICAgcmV0ZGljdFsndHVuZSddID0gdHVuZQorICAgIHJldGRpY3RbJ2NjYXJncyddID0gbG9jYWxkYXRhLmdldFZhcignVFVORV9DQ0FSR1MnLCBUcnVlKQorICAgIHJldGRpY3RbJ2ZlYXR1cmVzJ10gPSBsb2NhbGRhdGEuZ2V0VmFyKCdUVU5FX0ZFQVRVUkVTJywgVHJ1ZSkKKyAgICAjIEJBU0VMSUIgaXMgdXNlZCBieSB0aGUgbXVsdGlsaWIgY29kZSB0byBjaGFuZ2UgbGlicmFyeSBwYXRocworICAgIHJldGRpY3RbJ2Jhc2VsaWInXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0JBU0VfTElCJywgVHJ1ZSkgb3IgbG9jYWxkYXRhLmdldFZhcignQkFTRUxJQicsIFRydWUpCisgICAgcmV0ZGljdFsnYXJjaCddID0gbG9jYWxkYXRhLmdldFZhcignVFVORV9BUkNIJywgVHJ1ZSkKKyAgICByZXRkaWN0WydhYmlleHRlbnNpb24nXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0FCSUVYVEVOU0lPTicsIFRydWUpCisgICAgcmV0ZGljdFsndGFyZ2V0X2ZwdSddID0gbG9jYWxkYXRhLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpCisgICAgcmV0ZGljdFsncGtnYXJjaCddID0gbG9jYWxkYXRhLmdldFZhcignVFVORV9QS0dBUkNIJywgVHJ1ZSkKKyAgICByZXRkaWN0WydwYWNrYWdlX2V4dHJhX2FyY2hzJ10gPSBsb2NhbGRhdGEuZ2V0VmFyKCdQQUNLQUdFX0VYVFJBX0FSQ0hTJywgVHJ1ZSkKKyAgICByZXR1cm4gcmV0ZGljdAorCitnZXRfdHVuZV9wYXJhbWV0ZXJzW3ZhcmRlcHNleGNsdWRlXSA9ICJBVkFJTFRVTkVTIFRVTkVfQ0NBUkdTIE9WRVJSSURFUyBUVU5FX0ZFQVRVUkVTIEJBU0VfTElCIEJBU0VMSUIgVFVORV9BUkNIIEFCSUVYVEVOU0lPTiBUQVJHRVRfRlBVIFRVTkVfUEtHQVJDSCBQQUNLQUdFX0VYVFJBX0FSQ0hTIgorCitERUJJQU5OQU1FXyR7TUxQUkVGSVh9bGliZ2NjID0gImxpYmdjYzEiCisKK01JUlJPUlMgPSsgIlwKKyR7R05VX01JUlJPUn0vZ2NjICAgIGZ0cDovL2djYy5nbnUub3JnL3B1Yi9nY2MvcmVsZWFzZXMvIFxuIFwKKyR7R05VX01JUlJPUn0vZ2NjCWZ0cDovL2dkLnR1d2llbi5hYy5hdC9nbnUvZ2NjLyBcbiBcCiske0dOVV9NSVJST1J9L2djYwlodHRwOi8vbWlycm9ycy5yY24ubmV0L3B1Yi9zb3VyY2V3YXJlL2djYy9yZWxlYXNlcy8gXG4gXAorJHtHTlVfTUlSUk9SfS9nY2MgICBodHRwOi8vZ2NjLmdldC1zb2Z0d2FyZS5jb20vcmVsZWFzZXMvIFxuIFwKKyR7R05VX01JUlJPUn0vZ2NjCWh0dHA6Ly9nY2MuZ2V0LXNvZnR3YXJlLmNvbS9yZWxlYXNlcy8gXG4gXAorIgorIworIyBTZXQgc29tZSBkZWZhdWx0IHZhbHVlcworIworZ2NjbGliZGlyID0gIiR7bGliZGlyfS9nY2MiCitCSU5WID0gIiR7UFZ9IgorI1MgPSAiJHtXT1JLRElSfS9nY2MtJHtQVn0iCitTID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0vZ2NjLSR7UFZ9IgorQiA9ICIke1dPUktESVJ9L2djYy0ke1BWfS9idWlsZC4ke0hPU1RfU1lTfS4ke1RBUkdFVF9TWVN9IgorCit0YXJnZXRfaW5jbHVkZWRpciA/PSAiJHtpbmNsdWRlZGlyfSIKK3RhcmdldF9saWJkaXIgPz0gIiR7bGliZGlyfSIKK3RhcmdldF9iYXNlX2xpYmRpciA/PSAiJHtiYXNlX2xpYmRpcn0iCit0YXJnZXRfcHJlZml4ID89ICIke3ByZWZpeH0iCisKKyMgV2UgbmVlZCB0byBlbnN1cmUgdGhhdCBmb3IgdGhlIHNoYXJlZCB3b3JrIGRpcmVjdG9yeSwgdGhlIGRvX3BhdGNoIHNpZ25hdHVyZXMgbWF0Y2gKKyMgVGhlIHJlYWwgV09SS0RJUiBsb2NhdGlvbiBpc24ndCBhIGRlcGVuZGVuY3kgZm9yIHRoZSBzaGFyZWQgd29ya2Rpci4KK3NyY19wYXRjaGVzW3ZhcmRlcHNleGNsdWRlXSA9ICJXT1JLRElSIgorc2hvdWxkX2FwcGx5W3ZhcmRlcHNleGNsdWRlXSArPSAiUE4iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb25maWd1cmUtY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTRiZTczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb25maWd1cmUtY29tbW9uLmluYwpAQCAtMCwwICsxLDEyOCBAQAorcmVxdWlyZSBnY2MtbXVsdGlsaWItY29uZmlnLmluYworcmVxdWlyZSBnY2Mtc2hhcmVkLXNvdXJjZS5pbmMKKyMKKyMgQnVpbGQgdGhlIGxpc3Qgb2YgbGFuYWd1YWdlcyB0byBidWlsZC4KKyMKKyMgVGhlc2UgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHZlcnNpb24gc3BlY2lmaWMgLmluYyBmaWxlLgorCisjIEphdmEgKGdjaiBkb2Vzbid0IHdvcmsgb24gYWxsIGFyY2hpdGVjdHVyZXMpCitKQVZBID89ICIsamF2YSIKK0pBVkFfYXJtID89ICIiCitKQVZBX2FybWViID89ICIiCitKQVZBX21pcHNlbCA/PSAiIgorSkFWQV9zaDMgPz0gIiIKKyMgZ2NjIDMueCBleHBlY3RzICdmNzcnLCA0LjAgZXhwZWN0cyAnZjk1JywgNC4xIGFuZCA0LjIgZXhwZWN0ICdmb3J0cmFuJworRk9SVFJBTiA/PSAiLGY3NyIKK0xBTkdVQUdFUyA/PSAiYyxjKyske0ZPUlRSQU59JHtKQVZBfSIKKyMgZGlzYWJsZSAtLWVuYWJsZS10YXJnZXQtb3B0c3BhY2UgZm9yIHBvd2VycGMgU1BFCisjIGF0IC1PcyBsaWJnY2Muc28uMSBjcmVhdGVzIHJlZmVyZW5jZXMgaW50bworIyBoaWRkZW4gc3ltYm9scyBpbiBsaWJnY2MuYSB3aGljaCBsaW5rZXIgY29tcGxhaW5zCisjIHdoZW4gbGlua2luZyBzaGFyZWQgbGlicmFyaWVzIGZ1cnRoZXIgaW4gdGhlIGJ1aWxkIGxpa2UgKGdudXRscykKKworU1BFQ0lBTF9BUkNIX0xJU1QgPSAicG93ZXJwYyIKK09QVFNQQUNFID0gJyR7QGJiLnV0aWxzLmNvbnRhaW5zKCJTUEVDSUFMX0FSQ0hfTElTVCIsICIke1RBUkdFVF9BUkNIfSIsICIiLCAiLS1lbmFibGUtdGFyZ2V0LW9wdHNwYWNlIixkKX0nCisKK0VYVFJBX09FQ09ORl9CQVNFID89ICIiCitFWFRSQV9PRUNPTkZfUEFUSFMgPz0gIiIKK0VYVFJBX09FQ09ORl9JTklUSUFMID89ICIiCisKK0dDQ01VTFRJTElCID89ICItLWRpc2FibGUtbXVsdGlsaWIiCitHQ0NUSFJFQURTID89ICJwb3NpeCIKKworRVhUUkFfT0VDT05GID0gIlwKKyAgICAke0BbJy0tZW5hYmxlLWNsb2NhbGU9Z2VuZXJpYycsICcnXVtkLmdldFZhcignVVNFX05MUycsIFRydWUpICE9ICdubyddfSBcCisgICAgLS13aXRoLWdudS1sZCBcCisgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAtLWVuYWJsZS1sYW5ndWFnZXM9JHtMQU5HVUFHRVN9IFwKKyAgICAtLWVuYWJsZS10aHJlYWRzPSR7R0NDVEhSRUFEU30gXAorICAgICR7R0NDTVVMVElMSUJ9IFwKKyAgICAtLWVuYWJsZS1jOTkgXAorICAgIC0tZW5hYmxlLWxvbmctbG9uZyBcCisgICAgLS1lbmFibGUtc3ltdmVycz1nbnUgXAorICAgIC0tZW5hYmxlLWxpYnN0ZGN4eC1wY2ggXAorICAgIC0tcHJvZ3JhbS1wcmVmaXg9JHtUQVJHRVRfUFJFRklYfSBcCisgICAgLS13aXRob3V0LWxvY2FsLXByZWZpeCBcCisgICAgJHtPUFRTUEFDRX0gXAorICAgICR7RVhUUkFfT0VDT05GX0JBU0V9IFwKKyAgICAke0VYVFJBX09FQ09ORl9HQ0NfRkxPQVR9IFwKKyAgICAke0VYVFJBX09FQ09ORl9QQVRIU30gXAorICAgICR7QGdldF9nY2NfbWlwc19wbHRfc2V0dGluZyhiYiwgZCl9IFwKKyAgICAke0BnZXRfbG9uZ19kb3VibGVfc2V0dGluZyhiYiwgZCl9IFwKKyAgICAke0BnZXRfZ2NjX211bHRpYXJjaF9zZXR0aW5nKGJiLCBkKX0gXAorIgorCitleHBvcnQgZ2NjX2N2X2NvbGxlY3QyX2xpYnMgPSAnbm9uZSByZXF1aXJlZCcKKyMgV2UgbmVlZCB0byBzZXQgZ2NjX2N2X2NvbGxlY3QyX2xpYnMgZWxzZSB0aGVyZSBpcyBjcm9zcy1jb21waWxhdGlvbiBiYWRuZXNzCisjIGluIHRoZSBjb25maWcubG9nIGZpbGVzICh3aGljaCBtaWdodCBub3QgZ2V0IGdlbmVyYXRlZCB1bnRpbCBkb19jb21waWxlCisjIGhlbmNlIGJlaW5nIG1pc3NlZCBieSB0aGUgaW5zYW5lIGRvX2NvbmZpZ3VyZSBjaGVjaykuCisKKyMgQnVpbGQgdWNsaWJjIGNvbXBpbGVycyB3aXRob3V0IGN4YV9hdGV4aXQgc3VwcG9ydAorRVhUUkFfT0VDT05GX2FwcGVuZF9saW51eCA9ICIgLS1lbmFibGUtX19jeGFfYXRleGl0IgorRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1lbmFibGUtX19jeGFfYXRleGl0IgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHM2NCA9ICIgLS13aXRoLWFiaT02NCAtLXdpdGgtYXJjaC02ND1taXBzNjQgLS13aXRoLXR1bmUtNjQ9bWlwczY0IgorRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzNjRlbCA9ICIgLS13aXRoLWFiaT02NCAtLXdpdGgtYXJjaC02ND1taXBzNjQgLS13aXRoLXR1bmUtNjQ9bWlwczY0IgorRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzNjRuMzIgPSAiIC0td2l0aC1hYmk9NjQgLS13aXRoLWFyY2gtNjQ9bWlwczY0IC0td2l0aC10dW5lLTY0PW1pcHM2NCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwczY0ZWxuMzIgPSAiIC0td2l0aC1hYmk9NjQgLS13aXRoLWFyY2gtNjQ9bWlwczY0IC0td2l0aC10dW5lLTY0PW1pcHM2NCIKKworIyBBUk12NisgYWRkcyBhdG9taWMgaW5zdHJ1Y3Rpb25zIHRoYXQgYWZmZWN0IHRoZSBBQkkgaW4gbGlicmFyaWVzIGJ1aWx0CisjIHdpdGggVFVORV9DQ0FSR1MgaW4gZ2NjLXJ1bnRpbWUuICBNYWtlIHRoZSBjb21waWxlciBkZWZhdWx0IHRvIGEKKyMgY29tcGF0aWJsZSBhcmNoaXRlY3R1cmUuICBhcm12NiBhbmQgYXJtdjdhIGNvdmVyIHRoZSBtaW5pbXVtIHR1bmUKKyMgZmVhdHVyZXMgdXNlZCBpbiBPRS4KK0VYVFJBX09FQ09ORl9hcHBlbmRfYXJtdjYgPSAiIC0td2l0aC1hcmNoPWFybXY2IgorRVhUUkFfT0VDT05GX2FwcGVuZF9hcm12N2EgPSAiIC0td2l0aC1hcmNoPWFybXY3LWEiCisKK0VYVFJBX09FQ09ORl9HQ0NfRkxPQVQgPz89ICIiCitDUFBGTEFHUyA9ICIiCisKK1NZU1RFTUhFQURFUlMgPSAiJHt0YXJnZXRfaW5jbHVkZWRpcn0iCitTWVNURU1MSUJTID0gIiR7dGFyZ2V0X2Jhc2VfbGliZGlyfS8iCitTWVNURU1MSUJTMSA9ICIke3RhcmdldF9saWJkaXJ9LyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgdGVhY2ggZ2NjIHRvIGZpbmQgY29ycmVjdCB0YXJnZXQgaW5jbHVkZWRpciB3aGVuIGNoZWNraW5nIGxpYmMgc3NwIHN1cHBvcnQKKwlta2RpciAtcCAke0J9L2djYworCWVjaG8gIk5BVElWRV9TWVNURU1fSEVBREVSX0RJUiA9ICR7U1lTVEVNSEVBREVSU30iID4gJHtCfS9nY2MvdC1vZQorCWNhdCAke1N9L2djYy9kZWZhdWx0cy5oIHwgZ3JlcCAtdiAiXCNlbmRpZi4qR0NDX0RFRkFVTFRTX0giID4gJHtCfS9nY2MvZGVmYXVsdHMuaC5uZXcKKwljYXQgPj4ke0J9L2djYy9kZWZhdWx0cy5oLm5ldyA8PF9FT0YKKyNkZWZpbmUgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSICIke1NZU1RFTUhFQURFUlN9IgorI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEgIiR7U1lTVEVNTElCU30iCisjZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiAiJHtTWVNURU1MSUJTMX0iCisjZGVmaW5lIFNZU1RFTUxJQlNfRElSICIke1NZU1RFTUxJQlN9IgorI2VuZGlmIC8qICEgR0NDX0RFRkFVTFRTX0ggKi8KK19FT0YKKwltdiAke0J9L2djYy9kZWZhdWx0cy5oLm5ldyAke0J9L2djYy9kZWZhdWx0cy5oCit9CisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJIyBTZXR1cCB0aGVzZSB2YXJzIGZvciBjcm9zcyBidWlsZGluZyBvbmx5CisJIyAuLi4gYmVjYXVzZSBmb29fRk9SX1RBUkdFVCBhcHBhcmVudGx5IGdldHMgbWlzaW50ZXJwcmV0ZWQgaW5zaWRlIHRoZQorCSMgZ2NjIGJ1aWxkIHN0dWZmIHdoZW4gdGhlIGJ1aWxkIGlzIHByb2R1Y2luZyBhIGNyb3NzIGNvbXBpbGVyIC0gaS5lLgorCSMgd2hlbiB0aGUgJ2N1cnJlbnQnIHRhcmdldCBpcyB0aGUgJ2hvc3QnIHN5c3RlbSwgYW5kIHRoZSBob3N0IGlzIG5vdAorCSMgdGhlIHRhcmdldCAoYmVjYXVzZSB0aGUgYnVpbGQgaXMgYWN0dWFsbHkgbWFraW5nIGEgY3Jvc3MgY29tcGlsZXIhKQorCWlmIFsgIiR7QlVJTERfU1lTfSIgIT0gIiR7SE9TVF9TWVN9IiBdOyB0aGVuCisJCWV4cG9ydCBDQ19GT1JfVEFSR0VUPSIke0NDfSIKKwkJZXhwb3J0IEdDQ19GT1JfVEFSR0VUPSIke0NDfSIKKwkJZXhwb3J0IENYWF9GT1JfVEFSR0VUPSIke0NYWH0iCisJCWV4cG9ydCBBU19GT1JfVEFSR0VUPSIke0hPU1RfUFJFRklYfWFzIgorCQlleHBvcnQgTERfRk9SX1RBUkdFVD0iJHtIT1NUX1BSRUZJWH1sZCIKKwkJZXhwb3J0IE5NX0ZPUl9UQVJHRVQ9IiR7SE9TVF9QUkVGSVh9bm0iCisJCWV4cG9ydCBBUl9GT1JfVEFSR0VUPSIke0hPU1RfUFJFRklYfWFyIgorCQlleHBvcnQgR0ZPUlRSQU5fRk9SX1RBUkdFVD0iZ2ZvcnRyYW4iCisJCWV4cG9ydCBSQU5MSUJfRk9SX1RBUkdFVD0iJHtIT1NUX1BSRUZJWH1yYW5saWIiCisJZmkKKwlleHBvcnQgQ0NfRk9SX0JVSUxEPSIke0JVSUxEX0NDfSIKKwlleHBvcnQgQ1hYX0ZPUl9CVUlMRD0iJHtCVUlMRF9DWFh9IgorCWV4cG9ydCBDRkxBR1NfRk9SX0JVSUxEPSIke0JVSUxEX0NGTEFHU30iCisJZXhwb3J0IENQUEZMQUdTX0ZPUl9CVUlMRD0iJHtCVUlMRF9DUFBGTEFHU30iCisJZXhwb3J0IENYWEZMQUdTX0ZPUl9CVUlMRD0iJHtCVUlMRF9DWFhGTEFHU30iCisJZXhwb3J0IExERkxBR1NfRk9SX0JVSUxEPSIke0JVSUxEX0xERkxBR1N9IgorCWV4cG9ydCBDRkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfQ0ZMQUdTfSIKKwlleHBvcnQgQ1BQRkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfQ1BQRkxBR1N9IgorCWV4cG9ydCBDWFhGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9DWFhGTEFHU30iCisJZXhwb3J0IExERkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfTERGTEFHU30iCisKKworCW9lX3J1bmNvbmYKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGU0ODgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbi5pbmMKQEAgLTAsMCArMSwxNzcgQEAKK2luaGVyaXQgY3Jvc3MtY2FuYWRpYW4KKworU1VNTUFSWSA9ICJHTlUgY2MgYW5kIGdjYyBDIGNvbXBpbGVycyAoY3Jvc3MtY2FuYWRpYW4gZm9yICR7VEFSR0VUX0FSQ0h9IHRhcmdldCkiCitQTiA9ICJnY2MtY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSIKKworREVQRU5EUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MgdmlydHVhbC8ke0hPU1RfUFJFRklYfWJpbnV0aWxzLWNyb3Nzc2RrIHZpcnR1YWwvbmF0aXZlc2RrLSR7SE9TVF9QUkVGSVh9bGliYy1mb3ItZ2NjIG5hdGl2ZXNkay1nZXR0ZXh0IgorCitHQ0NNVUxUSUxJQiA9ICItLWVuYWJsZS1tdWx0aWxpYiIKKworcmVxdWlyZSBnY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKKworRVhUUkFfT0VDT05GX1BBVEhTID0gIlwKKyAgICAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPS9ub3QvZXhpc3Qke3RhcmdldF9pbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcCisgICAgLS13aXRoLWJ1aWxkLXRpbWUtdG9vbHM9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8ke1RBUkdFVF9TWVN9L2JpbiBcCisgICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyIKKyMgV2UgaGF2ZSB0byBwb2ludCBnY2MgYXQgYSBzeXNyb290IGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHJlYnVpbGQgaWYgdGhpcyBjaGFuZ2VzCisjIGUuZy4gd2Ugc3dpdGNoIGJldHdlZW4gZGlmZmVyZW50IG1hY2hpbmVzIHdpdGggZGlmZmVyZW50IHR1bmVzLgorRVhUUkFfT0VDT05GX1BBVEhTW3ZhcmRlcHNleGNsdWRlXSA9ICJUVU5FX1BLR0FSQ0giCitUQVJHRVRfQVJDSFt2YXJkZXBzZXhjbHVkZV0gPSAiVFVORV9BUkNIIgorZ2V0X2djY19mbG9hdF9zZXR0aW5nW3ZhcmRlcHZhbHVlXSA9ICIiCisKKyMKKyMgZ2NjLWNyb3NzIGxvb2tzIGFuZCBmaW5kcyB0aGVzZSBpbiAke2V4ZWNfcHJlZml4fSBidXQgd2UncmUgbm90IHNvIGx1Y2t5CisjIGZvciB0aGUgc2RrLiBIYXJkY29kaW5nIHRoZSBwYXRocyBlbnN1cmVzIHRoZSBidWlsZCBkb2Vzbid0IGdvIGNhbmFkaWFuIG9yIHdvcnNlLgorIworZXhwb3J0IEFSX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfWFyIgorZXhwb3J0IEFTX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfWFzIgorZXhwb3J0IERMTFRPT0xfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9ZGxsdG9vbCIKK2V4cG9ydCBDQ19GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1nY2MiCitleHBvcnQgQ1hYX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfWcrKyIKK2V4cG9ydCBHQ0NfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9Z2NjIgorZXhwb3J0IExEX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfWxkIgorZXhwb3J0IExJUE9fRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9bGlwbyIKK2V4cG9ydCBOTV9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1ubSIKK2V4cG9ydCBPQkpEVU1QX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfW9iamR1bXAiCitleHBvcnQgUkFOTElCX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfXJhbmxpYiIKK2V4cG9ydCBTVFJJUF9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1zdHJpcCIKK2V4cG9ydCBXSU5EUkVTX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfXdpbmRyZXMiCisKKyMKKyMgV2UgbmVlZCB0byBvdmVycmlkZSB0aGlzIGFuZCBtYWtlIHN1cmUgdGhlIGNvbXBpbGVyIGNhbiBmaW5kIHN0YWdpbmcKKyMKK2V4cG9ydCBBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQgPSAiLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSIKKworZG9fY29uZmlndXJlICgpIHsKKwlleHBvcnQgQ0NfRk9SX0JVSUxEPSIke0JVSUxEX0NDfSIKKwlleHBvcnQgQ1hYX0ZPUl9CVUlMRD0iJHtCVUlMRF9DWFh9IgorCWV4cG9ydCBDRkxBR1NfRk9SX0JVSUxEPSIke0JVSUxEX0NGTEFHU30iCisJZXhwb3J0IENQUEZMQUdTX0ZPUl9CVUlMRD0iJHtCVUlMRF9DUFBGTEFHU30iCisJZXhwb3J0IENYWEZMQUdTX0ZPUl9CVUlMRD0iJHtCVUlMRF9DWFhGTEFHU30iCisJZXhwb3J0IExERkxBR1NfRk9SX0JVSUxEPSIke0JVSUxEX0xERkxBR1N9IgorCWV4cG9ydCBDRkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfQ0ZMQUdTfSIKKwlleHBvcnQgQ1BQRkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfQ1BQRkxBR1N9IgorCWV4cG9ydCBDWFhGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9DWFhGTEFHU30iCisJZXhwb3J0IExERkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfTERGTEFHU30iCisJb2VfcnVuY29uZgorfQorCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlIGFsbC1ob3N0IGNvbmZpZ3VyZS10YXJnZXQtbGliZ2NjCit9CisKKyMgSGF2aW5nIGFueXRoaW5nIGF1dG8gZGVwZW5kaW5nIG9uIGdjYy1jcm9zcy1zZGsgaXMgYSByZWFsbHkgYmFkIGlkZWEuLi4KK0VYQ0xVREVfRlJPTV9TSExJQlMgPSAiMSIKKworUEFDS0FHRVMgPSAiJHtQTn0tZGJnICR7UE59ICR7UE59LWRvYyIKKworRklMRVNfJHtQTn0gPSAiXAorICAgICR7ZXhlY19wcmVmaXh9L2Jpbi8qIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vKiBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS8qLm8gXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vc3BlY3MgXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbGliKiBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUtZml4ZWQgXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vcGx1Z2luL2luY2x1ZGUvIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3BsdWdpbi9ndHlwZS4qIFwKKyAgICAke2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKKyAgICAke3ByZWZpeH0vJHtUQVJHRVRfU1lTfS9iaW4vKiBcCisgICAgJHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vbGliLyogXAorICAgICR7cHJlZml4fS8ke1RBUkdFVF9TWVN9L3Vzci9pbmNsdWRlLyogXAorIgorSU5TQU5FX1NLSVBfJHtQTn0gKz0gImRldi1zbyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIgXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS8uZGVidWcgXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9wbHVnaW4vLmRlYnVnIFwKKyIKKworRklMRVNfJHtQTn0tZG9jID0gIlwKKyAgICAke2luZm9kaXJ9IFwKKyAgICAke21hbmRpcn0gXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9SRUFETUUgXAorIgorCitFWEVFWFQgPSAiIgorCisjIENvbXB1dGUgaG93IHRvIGdldCBmcm9tIGxpYmV4ZWNkaXIgdG8gYmluZGlyIGluIHB5dGhvbiAoZWFzaWVyIHRoYW4gc2hlbGwpCitCSU5SRUxQQVRIID0gIiR7QG9zLnBhdGgucmVscGF0aChkLmV4cGFuZCgiJHtiaW5kaXJ9IiksIGQuZXhwYW5kKCIke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0iKSl9IgorCitkb19pbnN0YWxsICgpIHsKKwkoIGNkICR7Qn0vJHtUQVJHRVRfU1lTfS9saWJnY2M7IG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC11bndpbmRfaCApCisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLWhvc3QKKworCSMgQ2xlYW51cCBzb21lIG9mIHRoZSAke2xpYmRpcn17LGV4ZWN9L2djYyBzdHVmZiAuLi4KKwlybSAtciAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5zdGFsbC10b29scworCXJtIC1yICR7RH0ke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5zdGFsbC10b29scworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vZmluY2x1ZGUKKworCSMgV2UgY2FyZSBhYm91dCBnKysgbm90IGMrKworCXJtIC1mICR7RH0ke2JpbmRpcn0vKmMrKworCisJIyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSBnY2MtPHZlcnNpb24+IGNvcGllcworCXJtIC1mICR7RH0ke2JpbmRpcn0vKmdjYy0/Lj8qCisKKwkjIFdlIHVzZSBsaWJpYmVydHkgZnJvbSBiaW51dGlscworCXJtIC1mICR7RH0ke3ByZWZpeH0vJHtUQVJHRVRfU1lTfS9saWIvbGliaWJlcnR5LmEKKwkjIE5vdCBzdXJlIHdoZXJlIHRoZSBzdHJhbmdlIHBhdGhzIGNvbWUgZnJvbQorCXJtIC1mICR7RH0ke2xpYmRpcn0vLi4vbGliL2xpYmliZXJ0eS5hCisJcm0gLWYgJHtEfSR7bGliZGlyfS9saWJpYmVydHkuYQorCisJIyBDbGVhbnVwIGVtcHR5IGRpcmVjdG9yaWVzIHdoaWNoIGFyZSBub3Qgc2hpcHBlZAorCSMgd2UgdXNlIHJtZGlyIGluc3RlYWQgb2YgJ3JtIC1mJyB0byBlbnN1cmUgdGhlIG5vbiBlbXB0eSBkaXJlY3RvcmllcyBhcmUgbm90IGRlbGV0ZWQKKwkjICR7RH0ke2xpYmRpcn0vLi4vbGliIG9ubHkgc2VlbXMgdG8gYXBwZWFyIHdpdGggU0RLTUFDSElORT1pNjg2CisJbG9jYWwgZW1wdHlfZGlycz0iJHtEfSR7bGliZGlyfS8uLi9saWIgJHtEfSR7cHJlZml4fS8ke1RBUkdFVF9TWVN9L2xpYiAke0R9JHtwcmVmaXh9LyR7VEFSR0VUX1NZU30gJHtEfSR7aW5jbHVkZWRpcn0iCisJZm9yIGkgaW4gJGVtcHR5X2RpcnM7IGRvCisJCVsgLWQgJGkgXSAmJiBybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAkaQorCWRvbmUKKworCSMgSW5zZXJ0IHN5bWxpbmtzIGludG8gbGliZXhlYyBzbyB3aGVuIHRvb2xzIHdpdGhvdXQgYSBwcmVmaXggYXJlIHNlYXJjaGVkIGZvciwgdGhlIGNvcnJlY3Qgb25lcyBhcmUKKwkjIGZvdW5kLgorCWRlc3Q9JHtEfSR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS8KKwlpbnN0YWxsIC1kICRkZXN0CisJc3VmZml4PSR7RVhFRVhUfQorCWZvciB0IGluIGFyIGFzIGxkIG5tIG9iamNvcHkgb2JqZHVtcCByYW5saWIgc3RyaXAgZzc3IGdjYyBjcHAgZ2ZvcnRyYW47IGRvCisJCWlmIFsgIiR0IiA9ICJnNzciIC1vICIkdCIgPSAiZ2ZvcnRyYW4iIF0gJiYgWyAhIC1lICR7RH0ke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfSR0JHN1ZmZpeCBdOyB0aGVuCisJCQljb250aW51ZQorCQlmaQorCisJCWxuIC1zZiAke0JJTlJFTFBBVEh9LyR7VEFSR0VUX1BSRUZJWH0kdCRzdWZmaXggJGRlc3QkdCRzdWZmaXgKKwlkb25lCisJdD1yZWFsLWxkCisJbG4gLXNmICR7QklOUkVMUEFUSH0vJHtUQVJHRVRfUFJFRklYfWxkJHN1ZmZpeCAkZGVzdCR0JHN1ZmZpeAorCisJIyBsaWJxdWFkbWF0aCBoZWFkZXJzIG5lZWQgdG8gIGJlIGF2YWlsYWJsZSBpbiB0aGUgZ2NjIGxpYmV4ZWMgZGlyCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS8KKwljcCAke1N9L2xpYnF1YWRtYXRoL3F1YWRtYXRoLmggJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvCisJY3AgJHtTfS9saWJxdWFkbWF0aC9xdWFkbWF0aF93ZWFrLmggJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvCisKKwljaG93biAtUiByb290OnJvb3QgJHtEfQorCQorCWNyb3NzX2NhbmFkaWFuX2JpbmRpcmxpbmtzCit9CisKK0VMRlVUSUxTID0gIm5hdGl2ZXNkay1lbGZ1dGlscyIKK0RFUEVORFMgKz0gIm5hdGl2ZXNkay1nbXAgbmF0aXZlc2RrLW1wZnIgbmF0aXZlc2RrLWxpYm1wYyAke0VMRlVUSUxTfSBuYXRpdmVzZGstemxpYiIKK1JERVBFTkRTXyR7UE59ICs9ICJuYXRpdmVzZGstbXBmciBuYXRpdmVzZGstbGlibXBjICR7RUxGVVRJTFN9IgorCitTWVNURU1IRUFERVJTID0gIi91c3IvaW5jbHVkZSIKK1NZU1RFTUxJQlMgPSAiJHt0YXJnZXRfYmFzZV9saWJkaXJ9LyIKK1NZU1RFTUxJQlMxID0gIiR7dGFyZ2V0X2xpYmRpcn0vIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiCisKK0VYVFJBX09FQ09ORiArPSAiXAorICAgIC0td2l0aC1tcGZyPSR7U1RBR0lOR19ESVJfSE9TVH0ke2xheW91dF9leGVjX3ByZWZpeH0gXAorICAgIC0td2l0aC1tcGM9JHtTVEFHSU5HX0RJUl9IT1NUfSR7bGF5b3V0X2V4ZWNfcHJlZml4fSBcCisiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy1iYXJlbWV0YWwgPSAiIC0td2l0aG91dC1oZWFkZXJzIgorRVhUUkFfT0VDT05GX3JlbW92ZV9saWJjLWJhcmVtZXRhbCA9ICItLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IgorRVhUUkFfT0VDT05GX3JlbW92ZV9saWJjLWJhcmVtZXRhbCA9ICItLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0iCisKKyMgZ2NjIDQuNyBuZWVkcyAtaXN5c3RlbQorZXhwb3J0IEFSQ0hfRkxBR1NfRk9SX1RBUkdFVCA9ICItLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IC1pc3lzdGVtPSR7dGFyZ2V0X2luY2x1ZGVkaXJ9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl80LjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjUzYzVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl80LjguYmIKQEAgLTAsMCArMSw1IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLWNyb3NzLWNhbmFkaWFuLmluYworCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl80LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjUzYzVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl80LjkuYmIKQEAgLTAsMCArMSw1IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLWNyb3NzLWNhbmFkaWFuLmluYworCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl81LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjUzYzVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl81LjIuYmIKQEAgLTAsMCArMSw1IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLWNyb3NzLWNhbmFkaWFuLmluYworCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE5NzQ0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbC5pbmMKQEAgLTAsMCArMSw5NiBAQAorREVQRU5EUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscyAke05BVElWRURFUFN9IgorUFJPVklERVMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRpYWwiCitQQUNLQUdFUyA9ICIiCisKK0lOSElCSVRfQVVUT1RPT0xTX0RFUFMgPSAiMSIKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK1BOID0gImdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorCitDUk9TU19UQVJHRVRfU1lTX0RJUl9hcHBlbmQgPSAiLiR7UE59IgorCisjIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgYSAtdmVyeS0gYmFzaWMgY29uZmlnCisjIHN5c3Jvb3QgaXMgbmVlZGVkIGluIGNhc2Ugd2UgdXNlIGxpYmMtaW5pdGlhbAorRVhUUkFfT0VDT05GID0gIlwKKyAgICAtLXdpdGgtbmV3bGliIFwKKyAgICAtLXdpdGhvdXQtaGVhZGVycyBcCisgICAgLS1kaXNhYmxlLXNoYXJlZCBcCisgICAgLS1kaXNhYmxlLXRocmVhZHMgXAorICAgIC0tZGlzYWJsZS1tdWx0aWxpYiBcCisgICAgLS1kaXNhYmxlLV9fY3hhX2F0ZXhpdCBcCisgICAgLS1lbmFibGUtbGFuZ3VhZ2VzPWMgXAorICAgICR7T1BUU1BBQ0V9IFwKKyAgICAtLXByb2dyYW0tcHJlZml4PSR7VEFSR0VUX1BSRUZJWH0gXAorICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7R0NDQ1JPU1NfQlVJTERTWVNST09UfSBcCisgICAgJHtFWFRSQV9PRUNPTkZfSU5JVElBTH0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGQtaXMtZ29sZCcsICctLXdpdGgtbGQ9JHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59LyR7VEFSR0VUX1BSRUZJWH1sZC5iZmQnLCAnJywgZCl9IFwKKyAgICAke0VYVFJBX09FQ09ORl9HQ0NfRkxPQVR9IFwKKyIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtbmF0aXZlLXN5c3RlbS1oZWFkZXItZGlyPSR7U1lTVEVNSEVBREVSU30iCisKK0dDQ0NST1NTX0JVSUxEU1lTUk9PVCA9ICIke0J9L3RtcHN5c3Jvb3QiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlzeXNyPSR7R0NDQ1JPU1NfQlVJTERTWVNST09UfSR7dGFyZ2V0X2luY2x1ZGVkaXJ9CisJbWtkaXIgLXAgJHN5c3IKKwlmb3IgdCBpbiBsaW51eCBhc20gYXNtLWdlbmVyaWM7IGRvCisJCXJtIC1mICRzeXNyLyR0CisJCWxuIC1zICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7dGFyZ2V0X2luY2x1ZGVkaXJ9LyR0ICRzeXNyLworCWRvbmUKK30KKworZG9fY29tcGlsZSAoKSB7CisgICAgb2VfcnVubWFrZSBhbGwtZ2NjIGNvbmZpZ3VyZS10YXJnZXQtbGliZ2NjCit9Citkb19pbnN0YWxsICgpIHsKKwkoIGNkICR7Qn0vJHtUQVJHRVRfU1lTfS9saWJnY2M7IG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC11bndpbmRfaCApCisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLWdjYworCisJIyBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGlzIChoZXJlIHNoYXJlcy8gY29udGFpbnMgbWFuLywgaW5mby8sIGxvY2FsZS8pLgorCXJtIC1yZiAke0R9JHtkYXRhZGlyfS8KKworCSMgV2UgdXNlIGxpYmliZXJ0eSBmcm9tIGJpbnV0aWxzCisJZmluZCAke0R9JHtleGVjX3ByZWZpeH0vbGliIC1uYW1lIGxpYmliZXJ0eS5hIHwgeGFyZ3Mgcm0gLWYKKwlmaW5kICR7RH0ke2V4ZWNfcHJlZml4fS9saWIgLW5hbWUgbGliaWJlcnR5LmggfCB4YXJncyBybSAtZgorCisJIyBJbnNlcnQgc3ltbGlua3MgaW50byBsaWJleGVjIHNvIHdoZW4gdG9vbHMgd2l0aG91dCBhIHByZWZpeCBhcmUgc2VhcmNoZWQgZm9yLCB0aGUgY29ycmVjdCBvbmVzIGFyZQorCSMgZm91bmQuIFRoZXNlIG5lZWQgdG8gYmUgcmVsYXRpdmUgcGF0aHMgc28gdGhleSB3b3JrIGluIGRpZmZlcmVudCBsb2NhdGlvbnMuCisJZGVzdD0ke0R9JHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LworCWluc3RhbGwgLWQgJGRlc3QKKwl1c2VsZD0ke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xkLWlzLWdvbGQnLCAnLmJmZCcsICcnLCBkKX0KKwlsbiAtc2YgJHtCSU5SRUxQQVRIfS8ke1RBUkdFVF9QUkVGSVh9bGQke3VzZWxkfSAke2Rlc3R9bGQKKwlmb3IgdCBpbiBhciBhcyBubSBvYmpjb3B5IG9iamR1bXAgcmFubGliIHN0cmlwIGc3NyBnY2MgY3BwIGdmb3J0cmFuOyBkbworCQlsbiAtc2YgJHtCSU5SRUxQQVRIfS8ke1RBUkdFVF9QUkVGSVh9JHQgJGRlc3QkdAorCWRvbmUKKwkjIGZpeGVkIGxpbWl0cy5oIGluZmFjdCBpbmNsdWRlcyB0aGUgc28gY2FsbGVkIHJlYWwgbGltaXRzLmgKKwkjIHdoaWNoIHNob3VsZCBjb21lIGZyb20gbGliYyBidXQgd2hlbiB3ZSBidWlsZCBsaWJjLWluaXRpYWwKKwkjIHRoZW4gYnVuY2ggb2YgY29uZmlndXJlIHRlc3RzIGluY2x1ZGUgZml4ZWQgbGltaXRzLmggd2hpY2ggaW4gdHVybgorCSMgaW5jbHVkZXMgcmVhbCBsaW1pdHMuaCBidXQgdGhpcyByZWFsIGxpbWl0cy5oIGlzIG5vdCBzdGFnZWQgeWV0CisJIyBzbyB3ZSBvdmVyd2lydGUgdGhlIGdlbmVyYXRlZCBpbmNsdWRlLWZpeGVkL2xpbWl0cy5oIGZvciBnY2MtY3Jvc3MtaW5pdGlhbAorCSMgdG8gZ2V0IHJpZCByZWZlcmVuY2VzIHRvIHJlYWwgbGltaXRzLmgKKwljcCBnY2MvaW5jbHVkZS1maXhlZC9saW1pdHMuaCAke0R9JHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlL2xpbWl0cy5oCisKKwkjIGdjYy1ydW50aW1lIGluc3RhbGxzIGxpYmdjYyBpbnRvIGEgc3BlY2lhbCBsb2NhdGlvbiBpbiBzdGFnaW5nIHNpbmNlIGl0IGJyZWFrcyBkb2luZyBhIHN0YW5kYWxvbmUgYnVpbGQKKwljYXNlICR7UE59IGluCisJCSpnY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfXwqZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0pCisJCQlkZXN0PSR7RH0vJHtpbmNsdWRlZGlyfS9nY2MtYnVpbGQtaW50ZXJuYWwtaW5pdGlhbC0ke1RBUkdFVF9TWVN9CisJCQloYXJkbGlua2RpciAuICRkZXN0CisJCTs7CisJZXNhYworfQorIworIyBPdmVycmlkZSB0aGUgZGVmYXVsdCBzeXNyb290IHN0YWdpbmcgY29weSBzaW5jZSB0aGlzIHdvbid0IGxvb2sgbGlrZSBhIHRhcmdldCBzeXN0ZW0KKyMKK3N5c3Jvb3Rfc3RhZ2VfYWxsKCkgeworCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0gJHtTWVNST09UX0RFU1RESVJ9CisJaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke3RhcmdldF9iYXNlX2xpYmRpcn0vCisJaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke3RhcmdldF9saWJkaXJ9LworCW12ICR7U1lTUk9PVF9ERVNURElSfSR7dGFyZ2V0X2Jhc2VfbGliZGlyfS8qICR7U1lTUk9PVF9ERVNURElSfSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7dGFyZ2V0X2Jhc2VfbGliZGlyfS8gfHwgdHJ1ZQorCW12ICR7U1lTUk9PVF9ERVNURElSfSR7dGFyZ2V0X2xpYmRpcn0vKiAke1NZU1JPT1RfREVTVERJUn0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke3RhcmdldF9saWJkaXJ9LyB8fCB0cnVlCit9CisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtTWVNST09UX0RFU1RESVJ9LyR7U1RBR0lOR19ESVJfSE9TVH0vICR7U1lTUk9PVF9ERVNURElSfS8ke1NUQUdJTkdfRElSX1RBUkdFVH0vJHt0YXJnZXRfYmFzZV9saWJkaXJ9LyIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7U1RBR0lOR19ESVJfSE9TVH0vICR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9LyR7dGFyZ2V0X2Jhc2VfbGliZGlyfS8iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF80LjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNzNlNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNC44LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfJHtQVn0uYmIKK3JlcXVpcmUgZ2NjLWNyb3NzLWluaXRpYWwuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzczZTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzQuOS5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXyR7UFZ9LmJiCityZXF1aXJlIGdjYy1jcm9zcy1pbml0aWFsLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzUuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF81LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM3M2U1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF81LjIuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc18ke1BWfS5iYgorcmVxdWlyZSBnY2MtY3Jvc3MtaW5pdGlhbC5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExMDYzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MuaW5jCkBAIC0wLDAgKzEsMTk4IEBACitpbmhlcml0IGNyb3NzCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitFWFRSQURFUEVORFMgPSAiIgorREVQRU5EUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1saWJjLWZvci1nY2MgJHtFWFRSQURFUEVORFN9ICR7TkFUSVZFREVQU30iCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9ZysrIgorcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcigiVEFSR0VUX09TIiwgVHJ1ZSkuc3RhcnRzd2l0aCgibGludXgiKToKKyAgICAgICAgZC5zZXRWYXIoIkVYVFJBREVQRU5EUyIsICJsaW51eC1saWJjLWhlYWRlcnMiKQorfQorCitQTiA9ICJnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0iCisKK3JlcXVpcmUgZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCisKK0VYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyIKK0VYVFJBX09FQ09ORl9hcHBlbmRfc2g0ID0gIiBcCisgICAgLS13aXRoLW11bHRpbGliLWxpc3Q9IFwKKyAgICAtLWVuYWJsZS1pbmNvbXBsZXRlLXRhcmdldHMgXAorIgorCitFWFRSQV9PRUNPTkYgKz0gIlwKKyAgICAtLXdpdGgtbXBmcj0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9IFwKKyAgICAtLXdpdGgtc3lzdGVtLXpsaWIgXAorIgorCitERVBFTkRTX3JlbW92ZV9saWJjLWJhcmVtZXRhbCA6PSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1mb3ItZ2NjIgorRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLWJhcmVtZXRhbCA9ICIgLS13aXRob3V0LWhlYWRlcnMiCitFWFRSQV9PRUNPTkZfcmVtb3ZlX2xpYmMtYmFyZW1ldGFsID0gIi0tZW5hYmxlLXRocmVhZHM9cG9zaXgiCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLWd4eC1pbmNsdWRlLWRpcj0vbm90L2V4aXN0JHt0YXJnZXRfaW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAorICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisiCisKK0FSQ0hfRkxBR1NfRk9SX1RBUkdFVCArPSAiLWlzeXN0ZW0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke3RhcmdldF9pbmNsdWRlZGlyfSIKKworZG9fY29tcGlsZSAoKSB7CisJZXhwb3J0IENDPSIke0JVSUxEX0NDfSIKKwlleHBvcnQgQVJfRk9SX1RBUkdFVD0iJHtUQVJHRVRfU1lTfS1hciIKKwlleHBvcnQgUkFOTElCX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX1NZU30tcmFubGliIgorCWV4cG9ydCBMRF9GT1JfVEFSR0VUPSIke1RBUkdFVF9TWVN9LWxkIgorCWV4cG9ydCBOTV9GT1JfVEFSR0VUPSIke1RBUkdFVF9TWVN9LW5tIgorCWV4cG9ydCBDQ19GT1JfVEFSR0VUPSIke0NDQUNIRX0gJHtUQVJHRVRfU1lTfS1nY2MiCisJZXhwb3J0IENGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9DRkxBR1N9IgorCWV4cG9ydCBDUFBGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9DUFBGTEFHU30iCisJZXhwb3J0IENYWEZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NYWEZMQUdTfSIKKwlleHBvcnQgTERGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9MREZMQUdTfSIKKworCW9lX3J1bm1ha2UgYWxsLWhvc3QgY29uZmlndXJlLXRhcmdldC1saWJnY2MKKwkjIG5vdyBnZW5lcmF0ZSBzY3JpcHQgdG8gZHJpdmUgdGVzdGluZworCWVjaG8gIiMhL3Vzci9iaW4vZW52IHNoIiA+JHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNldCA+PiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJIyBwcnVuZSBvdXQgdGhlIHVubmVlZGVkIHZhcnMKKwlzZWQgLWkgLWUgIi9eQkFTSC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlVTRVIvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15PUFQvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15ESVJTVEFDSy9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXkVVSUQvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15GVU5DTkFNRS9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXkdST1VQUy9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXkhPU1QvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15IT01FL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eSUZTL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eTENfQUxML2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eTE9HTkFNRS9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXk1BQ0hUWVBFL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eT1NUWVBFL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eUElQRS9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlNIRUxML2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eJy9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlVJRC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlRFUk0vZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15QQVRDSF9HRVQvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15QS0dfL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eUE9TSVhMWV8vZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15QUElEL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eUFM0L2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eUS9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlNITFZML2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eU1RBR0lORy9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXkxEX0xJQlJBUllfUEFUSC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlBTRVVETy9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisKKwkjIGFwcGVuZCBleGVjdXRpb24gcGFydCBvZiB0aGUgc2NyaXB0CitjYXQgPj4gJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYyA8PCBTVE9QCit0YXJnZXQ9IlwkMSIKK3VzYWdlICgpIHsKKwllY2hvICJVc2FnZToiCisJZWNobyAiXCQwIHVzZXJAdGFyZ2V0ICdleHRyYSBvcHRpb25zIHRvIGRlamFnbnUnIgorCWVjaG8gIlwkMCB0YXJnZXQgJ2V4dHJhIG9wdGlvbnMgdG8gZGVqYWdudSciCisJZWNobyAiXCQwIHRhcmdldCIKKwllY2hvICJlLmcuIFwkMCAxOTIuMTY4LjcuMiAnIGRnLmV4cD12aXNpYmlsaXR5LWQuYyciCisJZWNobyAid2lsbCBvbmx5IHJ1biB2aXNpYmlsaXR5LWQuYyB0ZXN0IGNhc2UiCisJZWNobyAiZS5nLiBcJDAgMTkyLjE2OC43LjIgJy8tbXRodW1iIGRnLmV4cD12aXNpYmlsaXR5LWQuYyciCisJZWNobyAid2lsbCBvbmx5IHJ1biB2aXNpYmlsaXR5LWQuYyB0ZXN0IGNhc2UgaW4gdGh1bWIgbW9kZSIKKwllY2hvICJZb3UgbmVlZCB0byBoYXZlIGRlamFnbnUgYXV0b2dlbiBleHBlY3QgaW5zdGFsbGVkIgorCWVjaG8gIm9uIHRoZSBidWlsZCBob3N0IgorICAgIH0KK2lmIFsgInhcJHRhcmdldCIgPSAieCIgXQordGhlbgorCWVjaG8gIlBsZWFzZSBzcGVjaWZ5IHRoZSB0YXJnZXQgbWFjaGluZSBhbmQgcmVtb3RlIHVzZXIgaW4gZm9ybSBvZiB1c2VyQHRhcmdldFxuIgorCXVzYWdlCisJZXhpdCAxOworZmkKKworc2hpZnQKKworZWNobyAiXCR0YXJnZXQiIHwgZ3JlcCAiQCIgMj4mMSA+IC9kZXYvbnVsbAoraWYgWyAieFwkPyIgPSAieDAiIF0KK3RoZW4KKyAgIHVzZXI9XCQoZWNobyBcJHRhcmdldCB8IGN1dCAtZCAnQCcgLWYgMSkKKyAgIHRhcmdldD1cJChlY2hvIFwkdGFyZ2V0IHwgY3V0IC1kICdAJyAtZiAyKQorZWxzZQorICAgdXNlcj1cJFVTRVIKK2ZpCitzc2ggXCR1c2VyQFwkdGFyZ2V0IGRhdGUgMj4mMSA+IC9kZXYvbnVsbAoraWYgWyAieFwkPyIgIT0gIngwIiBdCit0aGVuCisJZWNobyAiRmFpbGVkIGNvbm5lY3RpbmcgdG8gXCR1c2VyQFwkdGFyZ2V0IGl0IGNvdWxkIGJlIGJlY2F1c2UiCisJZWNobyAieW91IGRvbid0IGhhdmUgcGFzc3dvcmRsZXNzIHNzaCBzZXR1cCB0byBhY2Nlc3MgXCR0YXJnZXQiCisJZWNobyAib3Igc29tZXRpbWVzIGhvc3Qga2V5IGhhcyBiZWVuIGNoYW5nZWQiCisJZWNobyAiaW4gc3VjaCBjYXNlIGRvIHNvbWV0aGluZyBsaWtlIGJlbG93IG9uIGJ1aWxkIGhvc3QiCisJZWNobyAic3NoLWtleWdlbiAtZiAifi8uc3NoL2tub3duX2hvc3RzIiAtUiBcJHRhcmdldCIKKwllY2hvICJhbmQgdGhlbiB0cnkgc3NoIFwkdXNlckBcJHRhcmdldCIKKworCXVzYWdlCisJZXhpdCAxCitmaQorCWVjaG8gImxhcHBlbmQgYm9hcmRzX2RpciBbcHdkXS8uLi8uLi8uLiIgPiAke0J9L3NpdGUuZXhwCisJZWNobyAibG9hZF9nZW5lcmljX2NvbmZpZyBcInVuaXhcIiIgPiAke0J9LyR7UEFDS0FHRV9BUkNIfS5leHAKKwllY2hvICJzZXRfYm9hcmRfaW5mbyB1c2VybmFtZSBcJHVzZXIiID4+ICR7Qn0vJHtQQUNLQUdFX0FSQ0h9LmV4cAorCWVjaG8gInNldF9ib2FyZF9pbmZvIHJzaF9wcm9nIHNzaCIgPj4gJHtCfS8ke1BBQ0tBR0VfQVJDSH0uZXhwCisJZWNobyAic2V0X2JvYXJkX2luZm8gcmNwX3Byb2cgc2NwIiA+PiAke0J9LyR7UEFDS0FHRV9BUkNIfS5leHAKKwllY2hvICJzZXRfYm9hcmRfaW5mbyBob3N0bmFtZSBcJHRhcmdldCIgPj4gJHtCfS8ke1BBQ0tBR0VfQVJDSH0uZXhwCisJREVKQUdOVT0ke0J9L3NpdGUuZXhwIG1ha2UgLWsgY2hlY2sgUlVOVEVTVEZMQUdTPSItLXRhcmdldF9ib2FyZD0ke1BBQ0tBR0VfQVJDSH1cJEAiCisKK1NUT1AKKworCWNobW9kICt4ICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKworfQorCitJTkhJQklUX1BBQ0tBR0VfU1RSSVAgPSAiMSIKKworIyBDb21wdXRlIGhvdyB0byBnZXQgZnJvbSBsaWJleGVjZGlyIHRvIGJpbmRpciBpbiBweXRob24gKGVhc2llciB0aGFuIHNoZWxsKQorQklOUkVMUEFUSCA9ICIke0Bvcy5wYXRoLnJlbHBhdGgoZC5leHBhbmQoIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vYmluLyR7VEFSR0VUX1NZU30iKSwgZC5leHBhbmQoIiR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfSIpKX0iCisKK2RvX2luc3RhbGwgKCkgeworCSggY2QgJHtCfS8ke1RBUkdFVF9TWVN9L2xpYmdjYzsgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLXVud2luZF9oICkKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtaG9zdAorCisJaW5zdGFsbCAtZCAke0R9JHt0YXJnZXRfYmFzZV9saWJkaXJ9CisJaW5zdGFsbCAtZCAke0R9JHt0YXJnZXRfbGliZGlyfQorICAgIAorCSMgTGluayBnZm9ydHJhbiB0byBnNzcgdG8gc2F0aXNmeSBub3Qtc28tc21hcnQgY29uZmlndXJlIG9yIGhhcmQgY29kZWQgZzc3CisJIyBnZm9ydHJhbiBpcyBmdWxseSBiYWNrd2FyZHMgY29tcGF0aWJsZS4gVGhpcyBpcyBhIHNhZmUgYW5kIHByYWN0aWNhbCBzb2x1dGlvbi4gCisJbG4gLXNmICR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vYmluLyR7VEFSR0VUX1BSRUZJWH1nZm9ydHJhbiAke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L2Jpbi8ke1RBUkdFVF9QUkVGSVh9Zzc3IHx8IHRydWUKKworCQorCSMgSW5zZXJ0IHN5bWxpbmtzIGludG8gbGliZXhlYyBzbyB3aGVuIHRvb2xzIHdpdGhvdXQgYSBwcmVmaXggYXJlIHNlYXJjaGVkIGZvciwgdGhlIGNvcnJlY3Qgb25lcyBhcmUKKwkjIGZvdW5kLiBUaGVzZSBuZWVkIHRvIGJlIHJlbGF0aXZlIHBhdGhzIHNvIHRoZXkgd29yayBpbiBkaWZmZXJlbnQgbG9jYXRpb25zLgorCWRlc3Q9JHtEfSR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS8KKwlpbnN0YWxsIC1kICRkZXN0CisJZm9yIHQgaW4gYXIgYXMgbGQgbm0gb2JqY29weSBvYmpkdW1wIHJhbmxpYiBzdHJpcCBnNzcgZ2NjIGNwcCBnZm9ydHJhbjsgZG8KKwkJbG4gLXNmICR7QklOUkVMUEFUSH0vJHtUQVJHRVRfUFJFRklYfSR0ICRkZXN0JHQKKwkJbG4gLXNmICR7QklOUkVMUEFUSH0vJHtUQVJHRVRfUFJFRklYfSR0ICR7ZGVzdH0ke1RBUkdFVF9QUkVGSVh9JHQKKwlkb25lCisKKwkjIFJlbW92ZSB0aGluZ3Mgd2UgZG9uJ3QgbmVlZCBidXQga2VlcCBzaGFyZS9qYXZhCisJZm9yIGQgaW4gaW5mbyBtYW4gc2hhcmUvZG9jIHNoYXJlL2xvY2FsZSBzaGFyZS9tYW4gc2hhcmUvaW5mbzsgZG8KKwkJcm0gLXJmICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9LyRkCisJZG9uZQorCisJIyBsaWJxdWFkbWF0aCBoZWFkZXJzIG5lZWQgdG8gIGJlIGF2YWlsYWJsZSBpbiB0aGUgZ2NjIGxpYmV4ZWMgZGlyCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS8KKwljcCAke1N9L2xpYnF1YWRtYXRoL3F1YWRtYXRoLmggJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvCisJY3AgJHtTfS9saWJxdWFkbWF0aC9xdWFkbWF0aF93ZWFrLmggJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvCisKKwkjIFdlIHVzZSBsaWJpYmVydHkgZnJvbSBiaW51dGlscworCWZpbmQgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYiAtbmFtZSBsaWJpYmVydHkuYSB8IHhhcmdzIHJtIC1mCisJZmluZCAke0R9JHtleGVjX3ByZWZpeH0vbGliIC1uYW1lIGxpYmliZXJ0eS5oIHwgeGFyZ3Mgcm0gLWYKKworCSMgZ2NjLXJ1bnRpbWUgaW5zdGFsbHMgbGliZ2NjIGludG8gYSBzcGVjaWFsIGxvY2F0aW9uIGluIHN0YWdpbmcgc2luY2UgaXQgYnJlYWtzIGRvaW5nIGEgc3RhbmRhbG9uZSBidWlsZAorCWNhc2UgJHtQTn0gaW4KKwkJKmdjYy1jcm9zcy0ke1RBUkdFVF9BUkNIfXwqZ2NjLWNyb3Nzc2RrLSR7VEFSR0VUX0FSQ0h9KQorCQkJZGVzdD0ke0R9LyR7aW5jbHVkZWRpcn0vZ2NjLWJ1aWxkLWludGVybmFsLSR7VEFSR0VUX1NZU30KKwkJCWhhcmRsaW5rZGlyIC4gJGRlc3QKKwkJOzsKKwllc2FjCit9CisKK2RvX3BhY2thZ2Vbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZWRhdGFbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9pcGtbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9ycG1bbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9kZWJbbm9leGVjXSA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc180LjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDNjY2EwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc180LjguYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLWNyb3NzLmluYworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzQuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0M2NjYTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzQuOS5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtY3Jvc3MuaW5jCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc181LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzY2NhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNS4yLmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1jcm9zcy5pbmMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QyNTk5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbC5pbmMKQEAgLTAsMCArMSwxMCBAQAoraW5oZXJpdCBjcm9zc3NkaworCitQTiA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKKworU1lTVEVNSEVBREVSUyA9ICIke1NES1BBVEhOQVRJVkV9JHtwcmVmaXhfbmF0aXZlc2RrfS9pbmNsdWRlIgorU1lTVEVNTElCUyA9ICIke1NES1BBVEhOQVRJVkV9JHtiYXNlX2xpYmRpcl9uYXRpdmVzZGt9LyIKK1NZU1RFTUxJQlMxID0gIiR7U0RLUEFUSE5BVElWRX0ke2xpYmRpcl9uYXRpdmVzZGt9LyIKKworREVQRU5EUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscy1jcm9zc3NkayBnZXR0ZXh0LW5hdGl2ZSAke05BVElWRURFUFN9IgorUFJPVklERVMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRpYWwtY3Jvc3NzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDkwZTExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzQuOC5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfJHtQVn0uYmIKK3JlcXVpcmUgZ2NjLWNyb3Nzc2RrLWluaXRpYWwuaW5jCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF80LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOTBlMTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNC45LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF8ke1BWfS5iYgorcmVxdWlyZSBnY2MtY3Jvc3NzZGstaW5pdGlhbC5pbmMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzUuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF81LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5MGUxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF81LjIuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXyR7UFZ9LmJiCityZXF1aXJlIGdjYy1jcm9zc3Nkay1pbml0aWFsLmluYworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGsuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZjg4MGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLmluYwpAQCAtMCwwICsxLDEyIEBACitpbmhlcml0IGNyb3Nzc2RrCisKK1BOID0gImdjYy1jcm9zc3Nkay0ke1RBUkdFVF9BUkNIfSIKKworU1lTVEVNSEVBREVSUyA9ICIke1NES1BBVEhOQVRJVkV9JHtwcmVmaXhfbmF0aXZlc2RrfS9pbmNsdWRlIgorU1lTVEVNTElCUyA9ICIke1NES1BBVEhOQVRJVkV9JHtiYXNlX2xpYmRpcl9uYXRpdmVzZGt9LyIKK1NZU1RFTUxJQlMxID0gIiR7U0RLUEFUSE5BVElWRX0ke2xpYmRpcl9uYXRpdmVzZGt9LyIKKworR0NDTVVMVElMSUIgPSAiLS1kaXNhYmxlLW11bHRpbGliIgorCitERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzLWNyb3Nzc2RrIHZpcnR1YWwvbmF0aXZlc2RrLSR7VEFSR0VUX1BSRUZJWH1saWJjLWZvci1nY2MgZ2V0dGV4dC1uYXRpdmUgJHtOQVRJVkVERVBTfSIKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1jcm9zc3NkayB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nKystY3Jvc3NzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzQuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTZjNGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzQuOC5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXyR7UFZ9LmJiCityZXF1aXJlIGdjYy1jcm9zc3Nkay5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka180LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhNmM0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNC45LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfJHtQVn0uYmIKK3JlcXVpcmUgZ2NjLWNyb3Nzc2RrLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka181LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE2YzRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka181LjIuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc18ke1BWfS5iYgorcmVxdWlyZSBnY2MtY3Jvc3NzZGsuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLW11bHRpbGliLWNvbmZpZy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLW11bHRpbGliLWNvbmZpZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdmOWY1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtbXVsdGlsaWItY29uZmlnLmluYwpAQCAtMCwwICsxLDIyNyBAQAorIyBmb2xsb3dpbmcgY29kZSBtb2RpZmllcyB0aGVzZSBkZWZpbml0aW9ucyBpbiB0aGUgZ2NjIGNvbmZpZworIyAgICBNVUxUSUxJQl9PUFRJT05TCisjICAgIE1VTFRJTElCX0RJUk5BTUVTCisjICAgIE1VTFRJTElCX09TRElSTkFNRVMKKyMgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMgorIyAgICBHTElCQ19EWU5BTUlDX0xJTktFUjY0CisjICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyCisjICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSTjMyCisjICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2Ugb2YgdGhlc2UgdmFyaWFibGVzIGxvb2sgYXQgdGhlc2UgZmlsZXMgaW4gdGhlIGdjYyBzb3VyY2UgY29kZQorIyAgICBnY2MvY29uZmlnL2kzODYvdC1saW51eDY0CisjICAgIGdjYy9jb25maWcvbWlwcy90LWxpbnV4NjQKKyMgICAgZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CisjICAgIGdjYy9jb25maWcvaTM4Ni9saW51eDY0LmgKKyMgICAgZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAorIyAgICBnY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKKworTVVMVElMSUJfT1BUSU9OX1dISVRFTElTVCA/Pz0gIi1tMzIgLW02NCAtbXgzMiAtbWFiaT1uMzIgLW1hYmk9MzIgLW1hYmk9NjQiIAorCitweXRob24gZ2NjX211bHRpbGliX3NldHVwKCkgeworICAgIGltcG9ydCByZQorICAgIGltcG9ydCBzaHV0aWwKKyAgICBpbXBvcnQgZ2xvYgorCisgICAgc3JjZGlyID0gZC5nZXRWYXIoJ1MnLCBUcnVlKQorICAgIGJ1aWxkZGlyID0gZC5nZXRWYXIoJ0InLCBUcnVlKQorICAgIHNyY19jb25mX2RpciA9ICclcy9nY2MvY29uZmlnJyAlIHNyY2RpcgorICAgIGJ1aWxkX2NvbmZfZGlyID0gJyVzL2djYy9jb25maWcnICUgYnVpbGRkaXIKKworICAgIGJiLnV0aWxzLnJlbW92ZShidWlsZF9jb25mX2RpciwgVHJ1ZSkKKyAgICBtbF9nbG9icyA9ICgnJXMvKi90LWxpbnV4NjQnICUgc3JjX2NvbmZfZGlyLAorICAgICAgICAgICAgICAgICclcy8qL2xpbnV4NjQuaCcgJSBzcmNfY29uZl9kaXIsCisgICAgICAgICAgICAgICAgJyVzLyovbGludXguaCcgJSBzcmNfY29uZl9kaXIsCisgICAgICAgICAgICAgICAgJyVzL2xpbnV4LmgnICUgc3JjX2NvbmZfZGlyKQorCisgICAgIyBjb3B5IHRoZSB0YXJnZXQgbXVsdGlsaWIgY29uZmlnIGZpbGVzIHRvICR7Qn0KKyAgICBmb3IgbWxfZ2xvYiBpbiBtbF9nbG9iczoKKyAgICAgICAgZm9yIGZuIGluIGdsb2IuZ2xvYihtbF9nbG9iKToKKyAgICAgICAgICAgIHJlbF9wYXRoID0gb3MucGF0aC5yZWxwYXRoKGZuLCBzcmNfY29uZl9kaXIpCisgICAgICAgICAgICBwYXJlbnRfZGlyID0gb3MucGF0aC5kaXJuYW1lKHJlbF9wYXRoKQorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKCclcy8lcycgJSAoYnVpbGRfY29uZl9kaXIsIHBhcmVudF9kaXIpKQorICAgICAgICAgICAgYmIudXRpbHMuY29weWZpbGUoZm4sICclcy8lcycgJSAoYnVpbGRfY29uZl9kaXIsIHJlbF9wYXRoKSkKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBtdWx0aWxpYnMgPSAoZC5nZXRWYXIoJ01VTFRJTElCX1ZBUklBTlRTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKyAgICBpZiBub3QgbXVsdGlsaWJzIGFuZCBwbiAhPSAibmF0aXZlc2RrLWdjYyI6CisgICAgICAgIHJldHVybgorCisgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKQorCisgICAgaWYgKCclc2djYycgJSBtbHByZWZpeCkgIT0gcG4gYW5kIChub3QgcG4uc3RhcnRzd2l0aCgnZ2NjLWNyb3NzLWNhbmFkaWFuJykpIGFuZCBwbiAhPSAibmF0aXZlc2RrLWdjYyI6CisgICAgICAgIHJldHVybgorCisKKyAgICBkZWYgd3JpdGVfY29uZmlnKHJvb3QsIGZpbGVzLCBvcHRpb25zLCBkaXJuYW1lcywgb3NkaXJuYW1lcyk6CisgICAgICAgIGZvciBtbF9jb25mX2ZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICB3aXRoIG9wZW4ocm9vdCArICcvJyArIG1sX2NvbmZfZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIGZpbGVsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICAjIHJlY3JlYXRlIG11bHRpbGliIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgICAgICAgICAgICAgICAgc3Vic3RzID0gWworICAgICAgICAgICAgICAgICAgICAocideKFxzKihNVUxUSUxJQl9PUFRJT05TXHMqPSkuKikkJywgcidcMiAlcycgJSAnLycuam9pbihvcHRpb25zKSksCisgICAgICAgICAgICAgICAgICAgIChyJ14oXHMqTVVMVElMSUJfT1BUSU9OU1xzKlwrPS4qKSQnLCAnJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oXHMqKE1VTFRJTElCX0RJUk5BTUVTXHMqPSkuKikkJywgcidcMiAlcycgJSAnICcuam9pbihkaXJuYW1lcykpLAorICAgICAgICAgICAgICAgICAgICAocideKFxzKk1VTFRJTElCX0RJUk5BTUVTXHMqXCs9LiopJCcsICcnKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXihccyooTVVMVElMSUJfT1NESVJOQU1FU1xzKj0pLiopJCcsIHInXDIgJXMnICUgJyAnLmpvaW4ob3NkaXJuYW1lcykpLAorICAgICAgICAgICAgICAgICAgICAocideKFxzKk1VTFRJTElCX09TRElSTkFNRVNccypcKz0uKikkJywgJycpLAorICAgICAgICAgICAgICAgIF0KKworICAgICAgICAgICAgICAgIGZvciAoaSwgbGluZSkgaW4gZW51bWVyYXRlKGZpbGVsaW5lcyk6CisgICAgICAgICAgICAgICAgICAgIGZvciBzdWJzdCBpbiBzdWJzdHM6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gcmUuc3ViKHN1YnN0WzBdLCBzdWJzdFsxXSwgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgZmlsZWxpbmVzW2ldID0gbGluZQorCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHJvb3QgKyAnLycgKyBtbF9jb25mX2ZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnJy5qb2luKGZpbGVsaW5lcykpCisKKyAgICBkZWYgd3JpdGVfaGVhZGVycyhyb290LCBmaWxlcywgbGliZGlyMzIsIGxpYmRpcjY0LCBsaWJkaXJ4MzIsIGxpYmRpcm4zMik6CisgICAgICAgIGRlZiB3cmFwX2xpYmRpcihsaWJkaXIpOgorICAgICAgICAgICAgaWYgbGliZGlyLmZpbmQoJ1NZU1RFTUxJQlNfRElSJykgIT0gLTE6CisgICAgICAgICAgICAgICAgcmV0dXJuICciJXIiJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJyIvJXMvIicgJSBsaWJkaXIKKworICAgICAgICBmb3IgbWxfY29uZl9maWxlIGluIGZpbGVzOgorICAgICAgICAgICAgZm4gPSByb290ICsgJy8nICsgbWxfY29uZl9maWxlCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZm4pOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB3aXRoIG9wZW4oZm4sICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlbGluZXMgPSBmLnJlYWRsaW5lcygpCisKKyAgICAgICAgICAgICAgICAjIHJlcGxhY2UgbGluZXMgbGlrZQorICAgICAgICAgICAgICAgICMgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorICAgICAgICAgICAgICAgICMgYnkKKyAgICAgICAgICAgICAgICAjICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi8iICJsZC1saW51eC5zby4yIgorICAgICAgICAgICAgICAgICMgdGhpcyBpcyBuZWVkZWQgdG8gcHV0IHRoZSBjb3JyZWN0IGR5bmFtaWMgbG9hZGVyIHBhdGggaW4gdGhlIGdlbmVyYXRlZCBiaW5hcmllcworICAgICAgICAgICAgICAgIHN1YnN0cyA9IFsKKyAgICAgICAgICAgICAgICAgICAgKHInXigjZGVmaW5lXHMqR0xJQkNfRFlOQU1JQ19MSU5LRVIzMlxzKikoXFMrKShccypcIi4qXCIpJCcsCisgICAgICAgICAgICAgICAgICAgICAgICByJ1wxJyArIHdyYXBfbGliZGlyKGxpYmRpcjMyKSArIHInXDMnKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXigjZGVmaW5lXHMqR0xJQkNfRFlOQU1JQ19MSU5LRVI2NFxzKikoXFMrKShccypcIlxTK1wiKSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgcidcMScgKyB3cmFwX2xpYmRpcihsaWJkaXI2NCkgKyByJ1wzJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKkdMSUJDX0RZTkFNSUNfTElOS0VSNjRccypcIlxTK1wiXHMqKShcUyspKFxzKlwiXFMrXCJccyopKFxTKykoXHMqXCIuKlwiKSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgcidcMScgKyB3cmFwX2xpYmRpcihsaWJkaXI2NCkgKyByJ1wzJyArIHdyYXBfbGliZGlyKGxpYmRpcjY0KSArIHInXDUnKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXigjZGVmaW5lXHMqR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzJccyopKFxTKykoXHMqXCIuKlwiKSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgcidcMScgKyB3cmFwX2xpYmRpcihsaWJkaXJ4MzIpICsgcidcMycpLAorICAgICAgICAgICAgICAgICAgICAocideKCNkZWZpbmVccypHTElCQ19EWU5BTUlDX0xJTktFUk4zMlxzKikoXFMrKShccypcIi4qXCIpJCcsCisgICAgICAgICAgICAgICAgICAgICAgICByJ1wxJyArIHdyYXBfbGliZGlyKGxpYmRpcm4zMikgKyByJ1wzJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKlVDTElCQ19EWU5BTUlDX0xJTktFUjMyXHMqKShcUyspKFxzKlwiLipcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlyMzIpICsgcidcMycpLAorICAgICAgICAgICAgICAgICAgICAocideKCNkZWZpbmVccypVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NFxzKikoXFMrKShccypcIi4qXCIpJCcsCisgICAgICAgICAgICAgICAgICAgICAgICByJ1wxJyArIHdyYXBfbGliZGlyKGxpYmRpcjY0KSArIHInXDMnKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXigjZGVmaW5lXHMqVUNMSUJDX0RZTkFNSUNfTElOS0VSTjMyXHMqKShcUyspKFxzKlwiLipcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlybjMyKSArIHInXDMnKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXigjZGVmaW5lXHMqVUNMSUJDX0RZTkFNSUNfTElOS0VSXGJccyopKFxTKykoXHMqXCIuKlwiKSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgcidcMScgKyB3cmFwX2xpYmRpcihsaWJkaXIzMikgKyByJ1wzJyksCisgICAgICAgICAgICAgICAgXQorCisgICAgICAgICAgICAgICAgZm9yIChpLCBsaW5lKSBpbiBlbnVtZXJhdGUoZmlsZWxpbmVzKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHN1YnN0IGluIHN1YnN0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSByZS5zdWIoc3Vic3RbMF0sIHN1YnN0WzFdLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICBmaWxlbGluZXNbaV0gPSBsaW5lCisKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ocm9vdCArICcvJyArIG1sX2NvbmZfZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCcnLmpvaW4oZmlsZWxpbmVzKSkKKworCisgICAgZ2NjX3RhcmdldF9jb25maWdfZmlsZXMgPSB7CisgICAgICAgICd4ODZfNjQnICAgIDogWydnY2MvY29uZmlnL2kzODYvdC1saW51eDY0J10sCisgICAgICAgICdpNTg2JyAgICAgIDogWydnY2MvY29uZmlnL2kzODYvdC1saW51eDY0J10sCisgICAgICAgICdpNjg2JyAgICAgIDogWydnY2MvY29uZmlnL2kzODYvdC1saW51eDY0J10sCisgICAgICAgICdtaXBzJyAgICAgIDogWydnY2MvY29uZmlnL21pcHMvdC1saW51eDY0J10sCisgICAgICAgICdtaXBzNjQnICAgIDogWydnY2MvY29uZmlnL21pcHMvdC1saW51eDY0J10sCisgICAgICAgICdwb3dlcnBjJyAgIDogWydnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQnXSwKKyAgICAgICAgJ3Bvd2VycGM2NCcgOiBbJ2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NCddLAorICAgIH0KKworICAgIGdjY19oZWFkZXJfY29uZmlnX2ZpbGVzID0geworICAgICAgICAneDg2XzY0JyAgICA6IFsnZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCddLAorICAgICAgICAnaTU4NicgICAgICA6IFsnZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCddLAorICAgICAgICAnaTY4NicgICAgICA6IFsnZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCddLAorICAgICAgICAnbWlwcycgICAgICA6IFsnZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgnLCAnZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaCddLAorICAgICAgICAnbWlwczY0JyAgICA6IFsnZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgnLCAnZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaCddLAorICAgICAgICAncG93ZXJwYycgICA6IFsnZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oJ10sCisgICAgICAgICdwb3dlcnBjNjQnIDogWydnY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgnXSwKKyAgICB9CisKKyAgICBsaWJkaXIzMiA9ICdTWVNURU1MSUJTX0RJUicKKyAgICBsaWJkaXI2NCA9ICdTWVNURU1MSUJTX0RJUicKKyAgICBsaWJkaXJ4MzIgPSAnU1lTVEVNTElCU19ESVInCisgICAgbGliZGlybjMyID0gJ1NZU1RFTUxJQlNfRElSJworCisKKyAgICB0YXJnZXRfYXJjaCA9IChkLmdldFZhcignVEFSR0VUX0FSQ0hfTVVMVElMSUJfT1JJR0lOQUwnLCBUcnVlKSBpZiBtbHByZWZpeAorICAgICAgICAgICAgICAgICAgICBlbHNlIGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpKQorICAgIGlmIHBuID09ICJuYXRpdmVzZGstZ2NjIjoKKyAgICAgICAgaGVhZGVyX2NvbmZpZ19maWxlcyA9IGdjY19oZWFkZXJfY29uZmlnX2ZpbGVzW2QuZ2V0VmFyKCJTREtfQVJDSCIsIFRydWUpXQorICAgICAgICB3cml0ZV9oZWFkZXJzKGJ1aWxkZGlyLCBoZWFkZXJfY29uZmlnX2ZpbGVzLCBsaWJkaXIzMiwgbGliZGlyNjQsIGxpYmRpcngzMiwgbGliZGlybjMyKQorICAgICAgICByZXR1cm4KKworICAgIGlmIHRhcmdldF9hcmNoIG5vdCBpbiBnY2NfdGFyZ2V0X2NvbmZpZ19maWxlczoKKyAgICAgICAgYmIud2FybignZ2NjIG11bHRpbGliIHNldHVwIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFRBUkdFVF9BUkNIPScgKyB0YXJnZXRfYXJjaCkKKyAgICAgICAgcmV0dXJuCisKKyAgICB0YXJnZXRfY29uZmlnX2ZpbGVzID0gZ2NjX3RhcmdldF9jb25maWdfZmlsZXNbdGFyZ2V0X2FyY2hdCisgICAgaGVhZGVyX2NvbmZpZ19maWxlcyA9IGdjY19oZWFkZXJfY29uZmlnX2ZpbGVzW3RhcmdldF9hcmNoXQorCisgICAgbWxfbGlzdCA9IFsnREVGQVVMVFRVTkVfTVVMVElMSUJfT1JJR0lOQUwnIGlmIG1scHJlZml4IGVsc2UgJ0RFRkFVTFRUVU5FJ10KKyAgICBtbHR1bmVzID0gWygnREVGQVVMVFRVTkVfdmlydGNsYXNzLW11bHRpbGliLSVzJyAlIG1sKSBmb3IgbWwgaW4gbXVsdGlsaWJzXQorICAgIGlmIG1scHJlZml4OgorICAgICAgICBtbGluZGV4ID0gMAorICAgICAgICBmb3IgbWwgaW4gbXVsdGlsaWJzOgorICAgICAgICAgICAgaWYgbWxwcmVmaXggPT0gbWwgKyAnLSc6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIG1saW5kZXggKz0gMQorCisgICAgICAgIG1sX2xpc3QuZXh0ZW5kKG1sdHVuZXNbOm1saW5kZXhdICsgWydERUZBVUxUVFVORSddICsgbWx0dW5lc1sobWxpbmRleCArIDEpOl0pCisgICAgZWxzZToKKyAgICAgICAgbWxfbGlzdC5leHRlbmQobWx0dW5lcykKKworICAgIG9wdGlvbnMgPSBbXQorICAgIGRpcm5hbWVzID0gW10KKyAgICBvc2Rpcm5hbWVzID0gW10KKyAgICBvcHRzZXRzID0gW10KKworICAgIGZvciBtbCBpbiBtbF9saXN0OgorICAgICAgICB0dW5lID0gZC5nZXRWYXIobWwsIFRydWUpCisgICAgICAgIGlmIG5vdCB0dW5lOgorICAgICAgICAgICAgYmIud2FybigiJXMgZG9lc24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyB0dW5lLiBTa2lwcGluZy4uLiIgJSBtbCkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHR1bmVfcGFyYW1ldGVycyA9IGdldF90dW5lX3BhcmFtZXRlcnModHVuZSwgZCkKKworICAgICAgICB0dW5lX2Jhc2VsaWIgPSB0dW5lX3BhcmFtZXRlcnNbJ2Jhc2VsaWInXQorICAgICAgICBpZiBub3QgdHVuZV9iYXNlbGliOgorICAgICAgICAgICAgYmIud2FybigiVHVuZSAlcyBkb2Vzbid0IGhhdmUgYSBiYXNlbGliIHNldC4gU2tpcHBpbmcuLi4iICUgdHVuZSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgdHVuZV9iYXNlbGliID09ICdsaWI2NCc6CisgICAgICAgICAgICBsaWJkaXI2NCA9IHR1bmVfYmFzZWxpYgorICAgICAgICBlbGlmIHR1bmVfYmFzZWxpYiA9PSAnbGlieDMyJzoKKyAgICAgICAgICAgIGxpYmRpcngzMiA9IHR1bmVfYmFzZWxpYgorICAgICAgICBlbGlmIHR1bmVfYmFzZWxpYiA9PSAnbGliMzInOgorICAgICAgICAgICAgbGliZGlybjMyID0gdHVuZV9iYXNlbGliCisgICAgICAgIGVsaWYgdHVuZV9iYXNlbGliID09ICdsaWInOgorICAgICAgICAgICAgbGliZGlyMzIgPSB0dW5lX2Jhc2VsaWIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLmVycm9yKCdVbmtub3duIGxpYmRpciAoJXMpIG9mIHRoZSB0dW5lIDogJXMnICUgKHR1bmVfYmFzZWxpYiwgdHVuZSkpCisKKyAgICAgICAgIyB0YWtlIG91dCAnLScgbWNwdT0ncyBhbmQgbWFyY2g9J3MgZnJvbSBwYXJhbWV0ZXJzCisgICAgICAgIG9wdHMgPSBbXQorICAgICAgICB3aGl0ZWxpc3QgPSAoZC5nZXRWYXIoIk1VTFRJTElCX09QVElPTl9XSElURUxJU1QiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBmb3IgaSBpbiB0dW5lX3BhcmFtZXRlcnNbJ2NjYXJncyddLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBpIGluIHdoaXRlbGlzdDoKKyAgICAgICAgICAgICAgICAjIE5lZWQgdG8gc3RyaXAgJy0nIGZyb20gb3B0aW9uCisgICAgICAgICAgICAgICAgb3B0cy5hcHBlbmQoaVsxOl0pCisgICAgICAgIG9wdGlvbnMuYXBwZW5kKCIgIi5qb2luKG9wdHMpKQorCisgICAgICAgIGlmIHR1bmVfYmFzZWxpYiA9PSAnbGliJzoKKyAgICAgICAgICAgIGRpcm5hbWVzLmFwcGVuZCgnMzInKSAgIyAvbGliID0+IDMyYml0IGxpYgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGlybmFtZXMuYXBwZW5kKHR1bmVfYmFzZWxpYi5yZXBsYWNlKCdsaWInLCAnJykpCisgICAgICAgIG9zZGlybmFtZXMuYXBwZW5kKCcuLi8nICsgdHVuZV9iYXNlbGliKQorCisgICAgd3JpdGVfY29uZmlnKGJ1aWxkZGlyLCB0YXJnZXRfY29uZmlnX2ZpbGVzLCBvcHRpb25zLCBkaXJuYW1lcywgb3NkaXJuYW1lcykKKyAgICB3cml0ZV9oZWFkZXJzKGJ1aWxkZGlyLCBoZWFkZXJfY29uZmlnX2ZpbGVzLCBsaWJkaXIzMiwgbGliZGlyNjQsIGxpYmRpcngzMiwgbGliZGlybjMyKQorfQorCitnY2NfbXVsdGlsaWJfc2V0dXBbY2xlYW5kaXJzXSA9ICIke0J9L2djYy9jb25maWciCisKK0VYVFJBQ09ORkZVTkNTICs9ICJnY2NfbXVsdGlsaWJfc2V0dXAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWUuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTc1N2U2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lLmluYwpAQCAtMCwwICsxLDE5NSBAQAorcmVxdWlyZSBnY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKKworQ1hYRkxBR1MgOj0gIiR7QG9lX2ZpbHRlcl9vdXQoJy1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbicsICcke0NYWEZMQUdTfScsIGQpfSIKKworRVhUUkFfT0VDT05GX1BBVEhTID0gIlwKKyAgICAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPSR7aW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAorICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGludXhzdGRiYXNlID0gIiAtLWVuYWJsZS1jbG9jYWxlPWdudSIKKworUlVOVElNRVRBUkdFVCA9ICJsaWJzc3AgbGlic3RkYysrLXYzIGxpYmdvbXAgbGliYXRvbWljIgorIyAgPworIyBsaWJpYmVydHkKKyMgbGlibXVkZmxhcAorIyBsaWJnZm9ydHJhbiBuZWVkcyBzZXBhcmF0ZSByZWNpcGUgZHVlIHRvIGxpYnF1YWRtYXRoIGRlcGVuZGVuY3kKKworZG9fY29uZmlndXJlICgpIHsKKwlleHBvcnQgQ1hYPSIke0NYWH0gLW5vc3RkaW5jKysgLW5vc3RkbGliKysiCisJbXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWhhcmRsaW5rZGlyICR7U1RBR0lOR19JTkNESVJfTkFUSVZFfS9nY2MtYnVpbGQtaW50ZXJuYWwtJG10YXJnZXQgJHtCfQorCWZvciBkIGluIGxpYmdjYyAke1JVTlRJTUVUQVJHRVR9OyBkbworCQllY2hvICJDb25maWd1cmluZyAkZCIKKwkJcm0gLXJmICR7Qn0vJHRhcmdldC8kZC8KKwkJbWtkaXIgLXAgJHtCfS8kdGFyZ2V0LyRkLworCQljZCAke0J9LyR0YXJnZXQvJGQvCisJCWNobW9kIGEreCAke1N9LyRkL2NvbmZpZ3VyZQorCQkke1N9LyRkL2NvbmZpZ3VyZSAke0NPTkZJR1VSRU9QVFN9ICR7RVhUUkFfT0VDT05GfQorCWRvbmUKK30KKworZG9fY29tcGlsZSAoKSB7CisJdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJZm9yIGQgaW4gbGliZ2NjICR7UlVOVElNRVRBUkdFVH07IGRvCisJCWNkICR7Qn0vJHRhcmdldC8kZC8KKwkJb2VfcnVubWFrZSBNVUxUSUJVSUxEVE9QPSR7Qn0vJHRhcmdldC8kZC8KKwlkb25lCit9CisKK2RvX2luc3RhbGwgKCkgeworCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWZvciBkIGluICR7UlVOVElNRVRBUkdFVH07IGRvCisJCWNkICR7Qn0vJHRhcmdldC8kZC8KKwkJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBNVUxUSUJVSUxEVE9QPSR7Qn0vJHRhcmdldC8kZC8gaW5zdGFsbAorCWRvbmUKKwlybSAtcmYgJHtEfSR7aW5mb2Rpcn0vbGliZ29tcC5pbmZvICR7RH0ke2luZm9kaXJ9L2RpcgorCXJtIC1yZiAke0R9JHtpbmZvZGlyfS9saWJxdWFkbWF0aC5pbmZvICR7RH0ke2luZm9kaXJ9L2RpcgorCWlmIFsgLWQgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2ZpbmNsdWRlIF07IHRoZW4KKwkJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgLXAgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2ZpbmNsdWRlCisJZmkKKwlpZiBbIC1kICR7RH0ke2luZm9kaXJ9IF07IHRoZW4KKwkJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgLXAgJHtEfSR7aW5mb2Rpcn0KKwlmaQorCWlmIFsgIiR7VEFSR0VUX09TfSIgPSAibGludXgtZ251c3BlIiBdOyB0aGVuCisJCWxuIC1zICR7VEFSR0VUX1NZU30gJHtEfSR7aW5jbHVkZWRpcn0vYysrLyR7QklOVn0vJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LWxpbnV4CisJZmkKKwljaG93biAtUiByb290OnJvb3QgJHtEfQorfQorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorREVQRU5EUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9ZysrIGxpYmdjYyIKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWNvbXBpbGVybGlicyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCisKK1BBQ0tBR0VTID0gIlwKKyAgICAke1BOfS1kYmcgXAorICAgIGxpYnN0ZGMrKyBcCisgICAgbGlic3RkYysrLXByZWNvbXBpbGUtZGV2IFwKKyAgICBsaWJzdGRjKystZGV2IFwKKyAgICBsaWJzdGRjKystc3RhdGljZGV2IFwKKyAgICBsaWJnMmMgXAorICAgIGxpYmcyYy1kZXYgXAorICAgIGxpYnNzcCBcCisgICAgbGlic3NwLWRldiBcCisgICAgbGlic3NwLXN0YXRpY2RldiBcCisgICAgbGlibXVkZmxhcCBcCisgICAgbGlibXVkZmxhcC1kZXYgXAorICAgIGxpYm11ZGZsYXAtc3RhdGljZGV2IFwKKyAgICBsaWJxdWFkbWF0aCBcCisgICAgbGlicXVhZG1hdGgtZGV2IFwKKyAgICBsaWJxdWFkbWF0aC1zdGF0aWNkZXYgXAorICAgIGxpYmdvbXAgXAorICAgIGxpYmdvbXAtZGV2IFwKKyAgICBsaWJnb21wLXN0YXRpY2RldiBcCisgICAgbGliYXRvbWljIFwKKyAgICBsaWJhdG9taWMtZGV2IFwKKyAgICBsaWJhdG9taWMtc3RhdGljZGV2IFwKKyIKKworIyBNb3N0IGxpYnJhcmllcyBhcmUgbGljZW5zZWQgd2l0aCB0aGUgZXhjZXB0aW9uLCBidXQKKyMgb25lIGxpYnJhcnkgaXMgcmVhbGx5IEdQTHYzLgorIworTElDRU5TRV8ke1BOfS1kYmcgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24gJiBHUEx2MyIKK0xJQ0VOU0VfbGlic3RkYysrID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJzdGRjKystcHJlY29tcGlsZS1kZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYnN0ZGMrKy1kZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYnN0ZGMrKy1zdGF0aWNkZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYmcyYyA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGliZzJjLWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlic3NwID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJzc3AtZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJzc3Atc3RhdGljZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJnZm9ydHJhbiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGliZ2ZvcnRyYW4tZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJnZm9ydHJhbi1zdGF0aWNkZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYm11ZGZsYXAgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYm11ZGZsYXAtZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJtdWRmbGFwLXN0YXRpY2RldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlicXVhZG1hdGggPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYnF1YWRtYXRoLWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlicXVhZG1hdGgtc3RhdGljZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJhdG9taWMgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYmF0b21pYy1kZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYmF0b21pYy1zdGF0aWNkZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCisKK0xJQ0VOU0VfbGliZ29tcCA9ICJHUEx2MyIKK0xJQ0VOU0VfbGliZ29tcC1kZXYgPSAiR1BMdjMiCitMSUNFTlNFX2xpYmdvbXAtc3RhdGljZGV2ID0gIkdQTHYzIgorCisjIFRoZSBiYXNlIHBhY2thZ2UgZG9lc24ndCBleGlzdCwgc28gd2UgY2xlYXIgdGhlIHJlY29tbWVuZHMuCitSUkVDT01NRU5EU18ke1BOfS1kYmcgPSAiIgorCisjIGluY2x1ZGUgcHl0aG9uIGRlYnVnZ2luZyBzY3JpcHRzCitGSUxFU18ke1BOfS1kYmcgKz0gIlwKKyAgICAke2xpYmRpcn0vbGlic3RkYysrLnNvLiotZ2RiLnB5IFwKKyAgICAke2RhdGFkaXJ9L2djYy0ke0JJTlZ9L3B5dGhvbi9saWJzdGRjeHggXAorIgorCitGSUxFU19saWJnMmMgPSAiJHt0YXJnZXRfbGliZGlyfS9saWJnMmMuc28uKiIKK0ZJTEVTX2xpYmcyYy1kZXYgPSAiXAorICAgICR7bGliZGlyfS9saWJnMmMuc28gXAorICAgICR7bGliZGlyfS9saWJnMmMuYSBcCisgICAgJHtsaWJkaXJ9L2xpYmZydGJlZ2luLmEgXAorIgorCitGSUxFU19saWJzdGRjKysgPSAiJHtsaWJkaXJ9L2xpYnN0ZGMrKy5zby4qIgorRklMRVNfbGlic3RkYysrLWRldiA9ICJcCisgICAgJHtpbmNsdWRlZGlyfS9jKysvIFwKKyAgICAke2xpYmRpcn0vbGlic3RkYysrLnNvIFwKKyAgICAke2xpYmRpcn0vbGlic3RkYysrLmxhIFwKKyAgICAke2xpYmRpcn0vbGlic3VwYysrLmxhIFwKKyIKK0ZJTEVTX2xpYnN0ZGMrKy1zdGF0aWNkZXYgPSAiXAorICAgICR7bGliZGlyfS9saWJzdGRjKysuYSBcCisgICAgJHtsaWJkaXJ9L2xpYnN1cGMrKy5hIFwKKyIKKworRklMRVNfbGlic3RkYysrLXByZWNvbXBpbGUtZGV2ID0gIiR7aW5jbHVkZWRpcn0vYysrLyR7VEFSR0VUX1NZU30vYml0cy8qLmdjaCIKKworRklMRVNfbGlic3NwID0gIiR7bGliZGlyfS9saWJzc3Auc28uKiIKK0ZJTEVTX2xpYnNzcC1kZXYgPSAiXAorICAgICR7bGliZGlyfS9saWJzc3AqLnNvIFwKKyAgICAke2xpYmRpcn0vbGlic3NwKl9ub25zaGFyZWQuYSBcCisgICAgJHtsaWJkaXJ9L2xpYnNzcCoubGEgXAorICAgICR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvc3NwIFwKKyIKK0ZJTEVTX2xpYnNzcC1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYnNzcCouYSIKKworRklMRVNfbGlicXVhZG1hdGggPSAiJHtsaWJkaXJ9L2xpYnF1YWRtYXRoKi5zby4qIgorRklMRVNfbGlicXVhZG1hdGgtZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlL3F1YWRtYXRoKiBcCisgICAgJHtsaWJkaXJ9L2xpYnF1YWRtYXRoKi5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYnF1YWRtYXRoLmxhIFwKKyIKK0ZJTEVTX2xpYnF1YWRtYXRoLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGlicXVhZG1hdGguYSIKKworRklMRVNfbGlibXVkZmxhcCA9ICIke2xpYmRpcn0vbGlibXVkZmxhcCouc28uKiIKK0ZJTEVTX2xpYm11ZGZsYXAtZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbGlibXVkZmxhcCouc28gXAorICAgICR7bGliZGlyfS9saWJtdWRmbGFwLmxhIFwKKyIKK0ZJTEVTX2xpYm11ZGZsYXAtc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJtdWRmbGFwLmEiCisKK0ZJTEVTX2xpYmdvbXAgPSAiJHtsaWJkaXJ9L2xpYmdvbXAqJHtTT0xJQlN9IgorRklMRVNfbGliZ29tcC1kZXYgPSAiXAorICAgICR7bGliZGlyfS9saWJnb21wKiR7U09MSUJTREVWfSBcCisgICAgJHtsaWJkaXJ9L2xpYmdvbXAqLmxhIFwKKyAgICAke2xpYmRpcn0vbGliZ29tcC5zcGVjIFwKKyAgICAke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlL29tcC5oIFwKKyIKK0ZJTEVTX2xpYmdvbXAtc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJnb21wKi5hIgorCitGSUxFU19saWJhdG9taWMgPSAiJHtsaWJkaXJ9L2xpYmF0b21pYy5zby4qIgorRklMRVNfbGliYXRvbWljLWRldiA9ICJcCisgICAgJHtsaWJkaXJ9L2xpYmF0b21pYy5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYmF0b21pYy5sYSBcCisiCitGSUxFU19saWJhdG9taWMtc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJhdG9taWMuYSIKKworZG9fcGFja2FnZV93cml0ZV9pcGtbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjOmRvX3BhY2thZ2VkYXRhIgorZG9fcGFja2FnZV93cml0ZV9kZWJbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjOmRvX3BhY2thZ2VkYXRhIgorZG9fcGFja2FnZV93cml0ZV9ycG1bZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjOmRvX3BhY2thZ2VkYXRhIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzQuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV80LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk3ZDY5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV80LjguYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLXJ1bnRpbWUuaW5jCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV80LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5N2Q2OTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNC45LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1ydW50aW1lLmluYworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjMxZTc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzUuMi5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtcnVudGltZS5pbmMKKworRklMRVNfbGliZ29tcC1kZXYgKz0gIlwKKyAgICAke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlL29wZW5hY2MuaCBcCisiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVycy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ODdjY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnMuaW5jCkBAIC0wLDAgKzEsMTE5IEBACityZXF1aXJlIGdjYy1jb25maWd1cmUtY29tbW9uLmluYworCitMSUNFTlNFID0gIk5DU0EgfCBNSVQiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgIGZpbGU6Ly9saWJzYW5pdGl6ZXIvTElDRU5TRS5UWFQ7bWQ1PTAyNDljMzc3NDg5MzZmYWY1YjFlZmQ1Nzg5NTg3OTA5IFwKKyIKKworRVhUUkFfT0VDT05GX1BBVEhTID0gIlwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorIgorCitkb19jb25maWd1cmUgKCkgeworICAgIG10YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKyAgICB0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKyAgICBpZiBbIC1kICR7U1RBR0lOR19JTkNESVJfTkFUSVZFfS9nY2MtYnVpbGQtaW50ZXJuYWwtJG10YXJnZXQgXTsgdGhlbgorICAgICAgICBoYXJkbGlua2RpciAke1NUQUdJTkdfSU5DRElSX05BVElWRX0vZ2NjLWJ1aWxkLWludGVybmFsLSRtdGFyZ2V0ICR7Qn0KKyAgICBmaQorCisgICAgZWNobyAiQ29uZmlndXJpbmcgbGlic2FuaXRpemVyIgorICAgIHJtIC1yZiAke0J9LyR0YXJnZXQvbGlic2FuaXRpemVyLworICAgIG1rZGlyIC1wICR7Qn0vJHRhcmdldC9saWJzYW5pdGl6ZXIvCisgICAgIyBUaGlzIGlzIGtpbmQgb2YgZ3Jvc3MsIGJ1dCBpdCdzIGFuIGVhc3kgd2F5IHRvIG1ha2UgY29uZmlndXJlIGhhcHB5CisgICAgIyB3aXRob3V0IGhhY2tpbmcgaXQgdXAgdG8gdXNlIHRoZSBzeXN0ZW0gc3RkYysrIGluc3RlYWQgb2YgdGhlIG9uZSBpdAorICAgICMgZXhwZWN0cyB0byBiZSBuZXdseSBidWlsdC4KKyAgICBybSAtcmYgJHtCfS8kdGFyZ2V0L2xpYnN0ZGMrKy12My8KKyAgICBta2RpciAtcCAke0J9LyR0YXJnZXQvbGlic3RkYysrLXYzL3NyYy8KKyAgICBsbiAtcyAke1NUQUdJTkdfTElCRElSfS9saWJzdGRjKysubGEgJHtCfS8kdGFyZ2V0L2xpYnN0ZGMrKy12My9zcmMvCisgICAgbG4gLXMgJHtTVEFHSU5HX0xJQkRJUn0vbGlic3RkYysrLnNvICR7Qn0vJHRhcmdldC9saWJzdGRjKystdjMvc3JjLworICAgIGNkICR7Qn0vJHRhcmdldC9saWJzYW5pdGl6ZXIvCisgICAgY2htb2QgYSt4ICR7U30vbGlic2FuaXRpemVyL2NvbmZpZ3VyZQorICAgICR7U30vbGlic2FuaXRpemVyL2NvbmZpZ3VyZSAke0NPTkZJR1VSRU9QVFN9ICR7RVhUUkFfT0VDT05GfQorICAgICMgRWFzaWVzdCB3YXkgdG8gc3RvcCBiYWQgUlBBVEhzIGdldHRpbmcgaW50byB0aGUgbGlicmFyeSBzaW5jZSB3ZSBoYXZlIGEKKyAgICAjIGJyb2tlbiBsaWJ0b29sIGhlcmUKKyAgICBzZWQgLWkgLWUgJ3MvaGFyZGNvZGVfaW50b19saWJzPXllcy9oYXJkY29kZV9pbnRvX2xpYnM9bm8vJyAke0J9LyR0YXJnZXQvbGlic2FuaXRpemVyL2xpYnRvb2wKK30KKworZG9fY29tcGlsZSAoKSB7CisgICAgdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisgICAgY2QgJHtCfS8kdGFyZ2V0L2xpYnNhbml0aXplci8KKyAgICBvZV9ydW5tYWtlIE1VTFRJQlVJTERUT1A9JHtCfS8kdGFyZ2V0L2xpYnNhbml0aXplci8KK30KKworZG9faW5zdGFsbCAoKSB7CisgICAgdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisgICAgY2QgJHtCfS8kdGFyZ2V0L2xpYnNhbml0aXplci8KKyAgICBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIE1VTFRJQlVJTERUT1A9JHtCfS8kdGFyZ2V0L2xpYnNhbml0aXplci8gaW5zdGFsbAorICAgIGlmIFsgLWQgJHtEfSR7aW5mb2Rpcn0gXTsgdGhlbgorICAgICAgICBybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAtcCAke0R9JHtpbmZvZGlyfQorICAgIGZpCisgICAgY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCitERVBFTkRTID0gImdjYy1ydW50aW1lIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKKworUEFDS0FHRVMgPSAiJHtQTn0iCitQQUNLQUdFUyArPSAibGliYXNhbiBsaWJ1YnNhbiBsaWJsc2FuIGxpYnRzYW4iCitQQUNLQUdFUyArPSAibGliYXNhbi1kZXYgbGlidWJzYW4tZGV2IGxpYmxzYW4tZGV2IGxpYnRzYW4tZGV2IgorUEFDS0FHRVMgKz0gImxpYmFzYW4tZGJnIGxpYnVic2FuLWRiZyBsaWJsc2FuLWRiZyBsaWJ0c2FuLWRiZyIKK1BBQ0tBR0VTICs9ICJsaWJhc2FuLXN0YXRpY2RldiBsaWJ1YnNhbi1zdGF0aWNkZXYgbGlibHNhbi1zdGF0aWNkZXYgbGlidHNhbi1zdGF0aWNkZXYiCisKK1JERVBFTkRTX2xpYmFzYW4gKz0gImxpYnN0ZGMrKyIKK1JERVBFTkRTX2xpYnVic2FuICs9ICJsaWJzdGRjKysiCitSREVQRU5EU19saWJsc2FuICs9ICJsaWJzdGRjKysiCitSREVQRU5EU19saWJ0c2FuICs9ICJsaWJzdGRjKysiCitSREVQRU5EU19saWJhc2FuLWRldiArPSAiJHtQTn0iCitSREVQRU5EU19saWJ1YnNhbi1kZXYgKz0gIiR7UE59IgorUkRFUEVORFNfbGlibHNhbi1kZXYgKz0gIiR7UE59IgorUkRFUEVORFNfbGlidHNhbi1kZXYgKz0gIiR7UE59IgorUlJFQ09NTUVORFNfJHtQTn0gKz0gImxpYmFzYW4gbGlidWJzYW4iCitSUkVDT01NRU5EU18ke1BOfV9hcHBlbmRfeDg2LTY0ID0gIiBsaWJsc2FuIGxpYnRzYW4iCitSUkVDT01NRU5EU18ke1BOfV9hcHBlbmRfeDg2ID0gIiBsaWJsc2FuIgorCitkb19wYWNrYWdlX3dyaXRlX2lwa1tkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfSR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX2RlYltkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfSR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX3JwbVtkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfSR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnM6ZG9fcGFja2FnZWRhdGEiCisKKyMgTUlQUywgYWFyY2g2NCwgYW5kIFNQQVJDIGFyZSBicm9rZW4uCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NHxpLjg2fHBvd2VycGN8YXJtKS4qLWxpbnV4JworCitGSUxFU19saWJhc2FuICs9ICIke2xpYmRpcn0vbGliYXNhbi5zby4qIgorRklMRVNfbGliYXNhbi1kYmcgKz0gIiR7bGliZGlyfS8uZGVidWcvbGliYXNhbi5zby4qIgorRklMRVNfbGliYXNhbi1kZXYgKz0gIlwKKyAgICAke2xpYmRpcn0vbGliYXNhbl9wcmVpbml0Lm8gXAorICAgICR7bGliZGlyfS9saWJhc2FuLnNvIFwKKyAgICAke2xpYmRpcn0vbGliYXNhbi5sYSBcCisiCitGSUxFU19saWJhc2FuLXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2xpYmFzYW4uYSIKKworRklMRVNfbGlidWJzYW4gKz0gIiR7bGliZGlyfS9saWJ1YnNhbi5zby4qIgorRklMRVNfbGlidWJzYW4tZGJnICs9ICIke2xpYmRpcn0vLmRlYnVnL2xpYnVic2FuLnNvLioiCitGSUxFU19saWJ1YnNhbi1kZXYgKz0gIlwKKyAgICAke2xpYmRpcn0vbGlidWJzYW4uc28gXAorICAgICR7bGliZGlyfS9saWJ1YnNhbi5sYSBcCisiCitGSUxFU19saWJ1YnNhbi1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9saWJ1YnNhbi5hIgorCitGSUxFU19saWJsc2FuICs9ICIke2xpYmRpcn0vbGlibHNhbi5zby4qIgorRklMRVNfbGlibHNhbi1kYmcgKz0gIiR7bGliZGlyfS8uZGVidWcvbGlibHNhbi5zby4qIgorRklMRVNfbGlibHNhbi1kZXYgKz0gIlwKKyAgICAke2xpYmRpcn0vbGlibHNhbi5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYmxzYW4ubGEgXAorIgorRklMRVNfbGlibHNhbi1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9saWJsc2FuLmEiCisKK0ZJTEVTX2xpYnRzYW4gKz0gIiR7bGliZGlyfS9saWJ0c2FuLnNvLioiCitGSUxFU19saWJ0c2FuLWRiZyArPSAiJHtsaWJkaXJ9Ly5kZWJ1Zy9saWJ0c2FuLnNvLioiCitGSUxFU19saWJ0c2FuLWRldiArPSAiXAorICAgICR7bGliZGlyfS9saWJ0c2FuLnNvIFwKKyAgICAke2xpYmRpcn0vbGlidHNhbi5sYSBcCisiCitGSUxFU19saWJ0c2FuLXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2xpYnRzYW4uYSIKKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9Lyouc3BlYyAke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlL3Nhbml0aXplci8qLmgiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDFmNjY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzQuOC5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2Mtc2FuaXRpemVycy5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc180LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMWY2NjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNC45LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1zYW5pdGl6ZXJzLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzUuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc181LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxZjY2NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc181LjIuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLXNhbml0aXplcnMuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNoYXJlZC1zb3VyY2UuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zaGFyZWQtc291cmNlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWNmZmIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zaGFyZWQtc291cmNlLmluYwpAQCAtMCwwICsxLDkgQEAKK2RvX2ZldGNoKCkgeworCToKK30KK2RvX2ZldGNoW25vZXhlY10gPSAiMSIKK2RlbHRhc2sgZG9fdW5wYWNrCitkZWx0YXNrIGRvX3BhdGNoCisKK2RvX2NvbmZpZ3VyZVtkZXBlbmRzXSArPSAiZ2NjLXNvdXJjZS0ke1BWfTpkb19wcmVjb25maWd1cmUiCitkb19wb3B1bGF0ZV9saWNbZGVwZW5kc10gKz0gImdjYy1zb3VyY2UtJHtQVn06ZG9fdW5wYWNrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2UuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NGZkNGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZS5pbmMKQEAgLTAsMCArMSwzNiBAQAorZGVsdGFzayBkb19jb25maWd1cmUgCitkZWx0YXNrIGRvX2NvbXBpbGUgCitkZWx0YXNrIGRvX3BhY2thZ2UgCitkZWx0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfcnBtIAorZGVsdGFzayBkb19wYWNrYWdlX3dyaXRlX2lwayAKK2RlbHRhc2sgZG9fcGFja2FnZV93cml0ZV9kZWIKK2RlbHRhc2sgZG9faW5zdGFsbCAKK2RlbHRhc2sgZG9fcG9wdWxhdGVfc3lzcm9vdAorZGVsdGFzayBkb19wb3B1bGF0ZV9saWMgCitkZWx0YXNrIGRvX3BhY2thZ2VfcWEKK2RlbHRhc2sgZG9fcGFja2FnZWRhdGEKK2RlbHRhc2sgZG9fcm1fd29yaworCitQTiA9ICJnY2Mtc291cmNlLSR7UFZ9IgorV09SS0RJUiA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9IgorU1NUQVRFX1NXU1BFQyA9ICJzc3RhdGU6Z2NjOjoke1BWfToke1BSfTo6JHtTU1RBVEVfVkVSU0lPTn06IgorCitTVEFNUCA9ICIke1NUQU1QU19ESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfSIKK1NUQU1QQ0xFQU4gPSAiJHtTVEFNUFNfRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tKiIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0RFUEVORFMgPSAiIgorUEFDS0FHRVMgPSAiIgorCitweXRob24gZG9fcHJlY29uZmlndXJlICgpIHsKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIGNtZCA9IGQuZXhwYW5kKCdjZCAke1N9ICYmIFBBVEg9JHtQQVRIfSBnbnUtY29uZmlnaXplJykKKyAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICAjIFNlZSAwMDQ0LWdlbmd0eXBlcy5wYXRjaCwgd2UgbmVlZCB0byByZWdlbmVyYXRlIHRoaXMgZmlsZQorICAgIGJiLnV0aWxzLnJlbW92ZShkLmV4cGFuZCgiJHtTfS9nY2MvZ2VuZ3R5cGUtbGV4LmMiKSkKKyAgICBjbWQgPSBkLmV4cGFuZCgic2VkIC1pICdzL0JVSUxEX0lORk89aW5mby9CVUlMRF9JTkZPPS8nICR7U30vZ2NjL2NvbmZpZ3VyZSIpCisgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCit9CithZGR0YXNrIGRvX3ByZWNvbmZpZ3VyZSBhZnRlciBkb19wYXRjaAorZG9fcHJlY29uZmlndXJlW2RlcGVuZHNdICs9ICJnbnUtY29uZmlnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IGF1dG9jb25mLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV80LjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV80LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5MGZhMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzQuOC5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlLmluYworCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzQuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODkwZmEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNC45LmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2UuaW5jCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OTBmYTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV81LjIuYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZS5pbmMKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXRhcmdldC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXRhcmdldC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUxNjBjMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtdGFyZ2V0LmluYwpAQCAtMCwwICsxLDIxNCBAQAorR0NDTVVMVElMSUIgPSAiLS1lbmFibGUtbXVsdGlsaWIiCityZXF1aXJlIGdjYy1jb25maWd1cmUtY29tbW9uLmluYworCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAorICAgIC0td2l0aC1zeXNyb290PS8gXAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisgICAgLS13aXRoLW5hdGl2ZS1zeXN0ZW0taGVhZGVyLWRpcj0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke3RhcmdldF9pbmNsdWRlZGlyfSBcCisgICAgLS13aXRoLWd4eC1pbmNsdWRlLWRpcj0ke2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKKyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saW51eHN0ZGJhc2UgPSAiIC0tZW5hYmxlLWNsb2NhbGU9Z251IgorCisjIGxpYmNjMSByZXF1cmVzIGdjY19jdl9vYmpkdW1wIHdoZW4gY3Jvc3MgYnVpbGQsIGJ1dCBnY2NfY3Zfb2JqZHVtcCBpcworIyBzZXQgaW4gc3ViZGlyIGdjYywgc28gc3ViZGlyIGxpYmNjMSBjYW4ndCB1c2UgaXQsIGV4cG9ydCBpdCBoZXJlIHRvCisjIGZpeCB0aGUgcHJvYmxlbS4KK2V4cG9ydCBnY2NfY3Zfb2JqZHVtcCA9ICIke1RBUkdFVF9QUkVGSVh9b2JqZHVtcCIKKworRVhUUkFfT0VDT05GX0dDQ19GTE9BVCA9ICIke0BnZXRfZ2NjX2Zsb2F0X3NldHRpbmcoYmIsIGQpfSIKKworUEFDS0FHRVMgPSAiXAorICAgICR7UE59ICR7UE59LXBsdWdpbnMgJHtQTn0tc3ltbGlua3MgXAorICAgIGcrKyBnKystc3ltbGlua3MgXAorICAgIGNwcCBjcHAtc3ltbGlua3MgXAorICAgIGc3NyBnNzctc3ltbGlua3MgXAorICAgIGdmb3J0cmFuIGdmb3J0cmFuLXN5bWxpbmtzIFwKKyAgICBnY292IGdjb3Ytc3ltbGlua3MgXAorICAgICR7UE59LWRvYyBcCisgICAgJHtQTn0tZGV2IFwKKyAgICAke1BOfS1kYmcgXAorIgorCitGSUxFU18ke1BOfSA9ICJcCisgICAgJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1nY2MqIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vY29sbGVjdDIgXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9jYyogXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9sdG8qIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbGliKiR7U09MSUJTfSBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYmx0byoke1NPTElCU0RFVn0gXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vKi5vIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3NwZWNzIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYioke1NPTElCU30gXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZSBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLWZpeGVkIFwKKyIKK0lOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtc28iCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS8uZGVidWcvIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vcGx1Z2luLy5kZWJ1Zy8gXAorIgorRklMRVNfJHtQTn0tZGV2ID0gIlwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYioke1NPTElCU0RFVn0gXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWIqJHtTT0xJQlNERVZ9IFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3BsdWdpbi9pbmNsdWRlLyBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3BsdWdpbi9nZW5ndHlwZSBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9wbHVnaW4vZ3R5cGUuc3RhdGUgXAorIgorRklMRVNfJHtQTn0tc3ltbGlua3MgPSAiXAorICAgICR7YmluZGlyfS9jYyBcCisgICAgJHtiaW5kaXJ9L2djYyBcCisgICAgJHtiaW5kaXJ9L2djY2J1ZyBcCisiCisKK0ZJTEVTXyR7UE59LXBsdWdpbnMgPSAiXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vcGx1Z2luIFwKKyIKK0FMTE9XX0VNUFRZXyR7UE59LXBsdWdpbnMgPSAiMSIKKworRklMRVNfZzc3ID0gIlwKKyAgICAke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfWc3NyBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2Y3NzEgXAorIgorRklMRVNfZzc3LXN5bWxpbmtzID0gIlwKKyAgICAke2JpbmRpcn0vZzc3IFwKKyAgICAke2JpbmRpcn0vZjc3IFwKKyIKK0ZJTEVTX2dmb3J0cmFuID0gIlwKKyAgICAke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfWdmb3J0cmFuIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vZjk1MSBcCisiCitGSUxFU19nZm9ydHJhbi1zeW1saW5rcyA9ICJcCisgICAgJHtiaW5kaXJ9L2dmb3J0cmFuIFwKKyAgICAke2JpbmRpcn0vZjk1IgorCitGSUxFU19jcHAgPSAiXAorICAgICR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9Y3BwIFwKKyAgICAke2Jhc2VfbGliZGlyfS9jcHAgXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9jYzEiCitGSUxFU19jcHAtc3ltbGlua3MgPSAiJHtiaW5kaXJ9L2NwcCIKKworRklMRVNfZ2NvdiA9ICIke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfWdjb3YgXAorICAgICR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9Z2Nvdi10b29sIFwKKyIKK0ZJTEVTX2djb3Ytc3ltbGlua3MgPSAiJHtiaW5kaXJ9L2djb3YgXAorICAgICR7YmluZGlyfS9nY292LXRvb2wgXAorIgorCitGSUxFU19nKysgPSAiXAorICAgICR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9ZysrIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vY2MxcGx1cyBcCisiCitGSUxFU19nKystc3ltbGlua3MgPSAiXAorICAgICR7YmluZGlyfS9jKysgXAorICAgICR7YmluZGlyfS9nKysgXAorIgorCitGSUxFU18ke1BOfS1kb2MgPSAiXAorICAgICR7aW5mb2Rpcn0gXAorICAgICR7bWFuZGlyfSBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlL1JFQURNRSBcCisiCisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UgYWxsLWhvc3QKK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLWhvc3QKKworCSMgQWRkIHVud2luZC5oLCBpdCBjb21lcyBmcm9tIGxpYmdjYyB3aGljaCB3ZSBkb24ndCB3YW50IHRvIGJ1aWxkIGFnYWluCisJaW5zdGFsbCAke1NUQUdJTkdfTElCRElSX05BVElWRX0vJHtUQVJHRVRfU1lTfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvdW53aW5kLmggJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvCisKKwkjIEluZm8gZGlyIGxpc3RpbmcgaXNuJ3QgaW50ZXJlc3RpbmcgYXQgdGhpcyBwb2ludCBzbyByZW1vdmUgaXQgaWYgaXQgZXhpc3RzLgorCWlmIFsgLWUgIiR7RH0ke2luZm9kaXJ9L2RpciIgXTsgdGhlbgorCQlybSAtZiAke0R9JHtpbmZvZGlyfS9kaXIKKwlmaQorCisJIyBDbGVhbnVwIHNvbWUgb2YgdGhlICR7bGliZGlyfXssZXhlY30vZ2NjIHN0dWZmIC4uLgorCXJtIC1yICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbnN0YWxsLXRvb2xzCisJcm0gLXIgJHtEfSR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbnN0YWxsLXRvb2xzCisJcm0gLXJmICR7RH0ke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vKi5sYQorCXJtZGlyICR7RH0ke2luY2x1ZGVkaXJ9CisJcm0gLXJmICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9maW5jbHVkZQorCisJIyBIYWNrIGFyb3VuZCBzcGVjcyBmaWxlIGFzc3VtcHRpb25zCisJdGVzdCAtZiAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vc3BlY3MgJiYgc2VkIC1pIC1lICcvXipjcm9zc19jb21waWxlOiQvIHsgbjsgcy8xLzAvOyB9JyAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vc3BlY3MKKworCSMgQ2xlYW51cCBtYW5wYWdlcy4uCisJcm0gLXJmICR7RH0ke21hbmRpcn0vbWFuNworCisJY2QgJHtEfSR7YmluZGlyfQorCisJIyBXZSBjYXJlIGFib3V0IGcrKyBub3QgYysrCisJcm0gLWYgKmMrKworCisJIyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSBnY2MtPHZlcnNpb24+IG9uZXMgZm9yIHRoaXMKKwlybSAtZiAqZ2NjLT8uPyoKKworCSMgV2UgdXNlIGxpYmliZXJ0eSBmcm9tIGJpbnV0aWxzCisJZmluZCAke0R9JHtsaWJkaXJ9IC1uYW1lIGxpYmliZXJ0eS5hIHwgeGFyZ3Mgcm0gLWYKKwlmaW5kICR7RH0ke2xpYmRpcn0gLW5hbWUgbGliaWJlcnR5LmggfCB4YXJncyBybSAtZgorCisJIyBOb3Qgc3VyZSB3aHkgd2UgZW5kIHVwIHdpdGggdGhlc2UgYnV0IHdlIGRvbid0IHdhbnQgdGhlbS4uLgorCXJtIC1mICR7VEFSR0VUX1BSRUZJWH0ke1RBUkdFVF9QUkVGSVh9KgorCisJIyBTeW1saW5rcyBzbyB3ZSBjYW4gdXNlIHRoZXNlIHRyaXZpYWxseSBvbiB0aGUgdGFyZ2V0CisJaWYgWyAtZSAke1RBUkdFVF9QUkVGSVh9Zzc3IF07IHRoZW4KKwkJbG4gLXNmICR7VEFSR0VUX1BSRUZJWH1nNzcgZzc3IHx8IHRydWUKKwkJbG4gLXNmIGc3NyBmNzcgfHwgdHJ1ZQorCWZpCisJaWYgWyAtZSAke1RBUkdFVF9QUkVGSVh9Z2ZvcnRyYW4gXTsgdGhlbgorCQlsbiAtc2YgJHtUQVJHRVRfUFJFRklYfWdmb3J0cmFuIGdmb3J0cmFuIHx8IHRydWUKKwkJbG4gLXNmIGdmb3J0cmFuIGY5NSB8fCB0cnVlCisJZmkKKwlsbiAtc2YgJHtUQVJHRVRfUFJFRklYfWcrKyBnKysKKwlsbiAtc2YgJHtUQVJHRVRfUFJFRklYfWdjYyBnY2MKKwlsbiAtc2YgJHtUQVJHRVRfUFJFRklYfWNwcCBjcHAKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfbGliZGlyfQorCWxuIC1zZiAke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfWNwcCAke0R9JHtiYXNlX2xpYmRpcn0vY3BwCisJbG4gLXNmIGcrKyBjKysKKwlsbiAtc2YgZ2NjIGNjCisKKwljaG93biAtUiByb290OnJvb3QgJHtEfQorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgICAgICMKKyAgICAgICAgIyBUaGVmaXhpbmMuc2ggc2NyaXB0LCBydW4gb24gdGhlIGdjYydzIGNvbXBpbGUgcGhhc2UsIGxvb2tzIGludG8gc3lzcm9vdCBoZWFkZXIKKyAgICAgICAgIyBmaWxlcyBhbmQgcGxhY2VzIHRoZSBtb2RpZmllZCBmaWxlcyBpbnRvCisgICAgICAgICMge0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS1maXhlZCBmb2xkZXIuIFRoaXMgbWFrZXMgdGhlCisgICAgICAgICMgYnVpbGQgbm90IGRldGVybWluaXN0aWMuIFRoZSBmb2xsb3dpbmcgY29kZSBwcnVuZXMgYWxsIHRob3NlIGhlYWRlcnMKKyAgICAgICAgIyBleGNlcHQgdGhvc2UgdW5kZXIgaW5jbHVkZS1maXhlZC9saW51eCwgKmxpbWl0cy5oIGFuZCBSRUFETUUsIHlpZWxkaW5nCisgICAgICAgICMgdGhlIHNhbWUgaW5jbHVkZS1maXhlZCBmb2xkZXJzIG5vIG1hdHRlciB3aGF0IHN5c3Jvb3QKKworICAgICAgICBpbmNsdWRlX2ZpeGVkPSIke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS1maXhlZCIKKyAgICAgICAgZm9yIGYgaW4gJChmaW5kICR7aW5jbHVkZV9maXhlZH0gLXR5cGUgZik7IGRvCisgICAgICAgICAgICAgICAgY2FzZSAkZiBpbgorICAgICAgICAgICAgICAgICovaW5jbHVkZS1maXhlZC9saW51eC8qKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICovaW5jbHVkZS1maXhlZC8qbGltaXRzLmgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgKi9pbmNsdWRlLWZpeGVkL1JFQURNRSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgICAjIHJlbW92ZSBmaWxlIGFuZCBkaXJlY3RvcnkgaWYgZW1wdHkKKyAgICAgICAgICAgICAgICAgICAgYmJkZWJ1ZyAyICJQcnVuaW5nICRmIgorICAgICAgICAgICAgICAgICAgICBybSAkZgorICAgICAgICAgICAgICAgICAgICBmaW5kICQoZGlybmFtZSAkZikgLW1heGRlcHRoIDAgLWVtcHR5IC1leGVjIHJtZGlyIHt9IFw7CisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICBkb25lCit9CisKKyMgSW5zdGFsbGluZyAvdXNyL2xpYi9nY2MvKiBtZWFucyB3ZSdkIGhhdmUgdHdvIGNvcGllcywgb25lIGZyb20gZ2NjLWNyb3NzCisjIGFuZCBvbmUgZnJvbSBoZXJlLiBUaGVzZSBjYW4gY29uZnVzZSBnY2MgY3Jvc3Mgd2hlcmUgaW5jbHVkZXMgdXNlICNpbmNsdWRlX25leHQKKyMgYW5kIGJ1aWxkcyB0cmFjayBmaWxlIGRlcGVuZGVuY2llcyAoZS5nLiBwZXJsIGFuZCBpdHMgbWFrZWRlcGVuZHMgY29kZSkuCisjIEZvciBkZXRlcm1pbmlzbSB3ZSBkb24ndCBpbnN0YWxsIHRoaXMgZXZlciBhbmQgcmVseSBvbiB0aGUgY29weSBmcm9tIGdjYy1jcm9zcy4KKyMgW1lPQ1RPICM3Mjg3XQorc3lzcm9vdF9zdGFnZV9kaXJzX2FwcGVuZCAoKSB7CisJcm0gLXJmICR0byR7bGliZGlyfS9nY2MKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY180LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM2MThkZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNC44LmJiCkBAIC0wLDAgKzEsOSBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy10YXJnZXQuaW5jCisKKyMgQnVpbGRpbmcgd2l0aCB0aHVtYiBlbmFibGVkIG9uIGFybXY0dCBmYWlscyB3aXRoCisjIHwgZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvY3AvZGVjbC5jOjc0Mzg6KC50ZXh0LnVubGlrZWx5KzB4MmZhKTogcmVsb2NhdGlvbiB0cnVuY2F0ZWQgdG8gZml0OiBSX0FSTV9USE1fQ0FMTCBhZ2FpbnN0IHN5bWJvbCBgZmFuY3lfYWJvcnQoY2hhciBjb25zdCosIGludCwgY2hhciBjb25zdCopJyBkZWZpbmVkIGluIC5nbHVlXzcgc2VjdGlvbiBpbiBsaW5rZXIgc3R1YnMKKyMgfCBnY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9jcC9kZWNsLmM6NzQ0MjooLnRleHQudW5saWtlbHkrMHgzMTgpOiBhZGRpdGlvbmFsIHJlbG9jYXRpb24gb3ZlcmZsb3dzIG9taXR0ZWQgZnJvbSB0aGUgb3V0cHV0CitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY0ID0gImFybSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzQuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NGJhYWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzQuOS5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLXRhcmdldC5pbmMKKworIyBCdWlsZGluZyB3aXRoIHRodW1iIGVuYWJsZWQgb24gYXJtdjR0IGZhaWxzIHdpdGgKKyMgfCBnY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9jcC9kZWNsLmM6NzQzODooLnRleHQudW5saWtlbHkrMHgyZmEpOiByZWxvY2F0aW9uIHRydW5jYXRlZCB0byBmaXQ6IFJfQVJNX1RITV9DQUxMIGFnYWluc3Qgc3ltYm9sIGBmYW5jeV9hYm9ydChjaGFyIGNvbnN0KiwgaW50LCBjaGFyIGNvbnN0KiknIGRlZmluZWQgaW4gLmdsdWVfNyBzZWN0aW9uIGluIGxpbmtlciBzdHVicworIyB8IGdjYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2NwL2RlY2wuYzo3NDQyOigudGV4dC51bmxpa2VseSsweDMxOCk6IGFkZGl0aW9uYWwgcmVsb2NhdGlvbiBvdmVyZmxvd3Mgb21pdHRlZCBmcm9tIHRoZSBvdXRwdXQKK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKKworI1NZU1RFTUhFQURFUlNfY2xhc3MtbmF0aXZlc2RrID0gIiR7QCcke3RhcmdldF9pbmNsdWRlZGlyfScucmVwbGFjZShkLmdldFZhcignU0RLUEFUSCcsIFRydWUpLCclcicpfSIKKyNTWVNURU1MSUJTX2NsYXNzLW5hdGl2ZXNkayA9ICIke0AnJHt0YXJnZXRfYmFzZV9saWJkaXJ9Jy5yZXBsYWNlKGQuZ2V0VmFyKCdTREtQQVRIJywgVHJ1ZSksJyVyJyl9LyIKKyNTWVNURU1MSUJTMV9jbGFzcy1uYXRpdmVzZGsgPSAiJHtAJyR7dGFyZ2V0X2xpYmRpcn0nLnJlcGxhY2UoZC5nZXRWYXIoJ1NES1BBVEgnLCBUcnVlKSwnJXInKX0vIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzUuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYTUyM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzUuMi5iYgpAQCAtMCwwICsxLDE1IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLXRhcmdldC5pbmMKKworIyBCdWlsZGluZyB3aXRoIHRodW1iIGVuYWJsZWQgb24gYXJtdjR0IGZhaWxzIHdpdGgKKyMgfCBnY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9jcC9kZWNsLmM6NzQzODooLnRleHQudW5saWtlbHkrMHgyZmEpOiByZWxvY2F0aW9uIHRydW5jYXRlZCB0byBmaXQ6IFJfQVJNX1RITV9DQUxMIGFnYWluc3Qgc3ltYm9sIGBmYW5jeV9hYm9ydChjaGFyIGNvbnN0KiwgaW50LCBjaGFyIGNvbnN0KiknIGRlZmluZWQgaW4gLmdsdWVfNyBzZWN0aW9uIGluIGxpbmtlciBzdHVicworIyB8IGdjYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2NwL2RlY2wuYzo3NDQyOigudGV4dC51bmxpa2VseSsweDMxOCk6IGFkZGl0aW9uYWwgcmVsb2NhdGlvbiBvdmVyZmxvd3Mgb21pdHRlZCBmcm9tIHRoZSBvdXRwdXQKK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIEVhc2llc3Qgd2F5IHRvIHN0b3AgYmFkIFJQQVRIcyBnZXR0aW5nIGludG8gdGhlIGxpYnJhcnkgc2luY2Ugd2UgaGF2ZSBhCisJIyBicm9rZW4gbGlidG9vbCBoZXJlCisJc2VkIC1pIC1lICdzL2hhcmRjb2RlX2ludG9fbGlicz15ZXMvaGFyZGNvZGVfaW50b19saWJzPW5vLycgJHtTfS9saWJjYzEvY29uZmlndXJlCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1jb21tb24uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOWVhNjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWNvbW1vbi5pbmMKQEAgLTAsMCArMSwxNDQgQEAKK0JQTiA9ICJsaWJnY2MiCisKK3JlcXVpcmUgZ2NjLXNoYXJlZC1zb3VyY2UuaW5jCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2xpYmRpcn0gJHtEfSR7bGliZGlyfQorCWhhcmRsaW5rZGlyICR7U1RBR0lOR19JTkNESVJfTkFUSVZFfS8ke0xJQkdDQ0JVSUxEVFJFRU5BTUV9JHRhcmdldC8gJHtCfQorCW1rZGlyIC1wICR7Qn0vJHtCUE59CisJbWtkaXIgLXAgJHtCfS8kdGFyZ2V0LyR7QlBOfS8KKwljZCAke0J9LyR7QlBOfQorCWNobW9kIGEreCAke1N9LyR7QlBOfS9jb25maWd1cmUKKwkke1N9LyR7QlBOfS9jb25maWd1cmUgJHtDT05GSUdVUkVPUFRTfSAke0VYVFJBX09FQ09ORn0KK30KKworZG9fY29tcGlsZSAoKSB7CisJdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJY2QgJHtCfS8ke0JQTn0KKwlvZV9ydW5tYWtlIE1VTFRJQlVJTERUT1A9JHtCfS8kdGFyZ2V0LyR7QlBOfS8KK30KKworZG9faW5zdGFsbCAoKSB7CisJdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJY2QgJHtCfS8ke0JQTn0KKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIE1VTFRJQlVJTERUT1A9JHtCfS8kdGFyZ2V0LyR7QlBOfS8gaW5zdGFsbAorCisJIyBNb3ZlIGxpYmdjY19zIGludG8gL2xpYgorCW1rZGlyIC1wICR7RH0ke2Jhc2VfbGliZGlyfQorCWlmIFsgLWYgJHtEfSR7bGliZGlyfS9ub2YvbGliZ2NjX3Muc28gXTsgdGhlbgorCQltdiAke0R9JHtsaWJkaXJ9L25vZi9saWJnY2MqICR7RH0ke2Jhc2VfbGliZGlyfQorCWVsc2UKKwkJbXYgJHtEfSR7bGliZGlyfS9saWJnY2MqICR7RH0ke2Jhc2VfbGliZGlyfSB8fCB0cnVlCisJZmkKKworCSMgaW5zdGFsbCB0aGUgcnVudGltZSBpbiAvdXNyL2xpYi8gbm90IGluIC91c3IvbGliL2djYyBvbiB0YXJnZXQKKwkjIHNvIHRoYXQgY3Jvc3MtZ2NjIGNhbiBmaW5kIGl0IGluIHRoZSBzeXNyb290CisKKwltdiAke0R9JHtsaWJkaXJ9L2djYy8qICR7RH0ke2xpYmRpcn0KKwlybSAtcmYgJHtEfSR7bGliZGlyfS9nY2MvCisJIyB1bndpbmQuaCBpcyBpbnN0YWxsZWQgaGVyZSB3aGljaCBpcyBzaGlwcGVkIGluIGdjYy1jcm9zcworCSMgYXMgd2VsbCBhcyB0YXJnZXQgZ2NjIGFuZCB0aGV5IGFyZSBpZGVudGljYWwgc28gd2UgZG9udAorCSMgc2hpcCBvbmUgd2l0aCBsaWJnY2MgaGVyZQorCXJtIC1yZiAke0R9JHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2xpYmMtYmFyZW1ldGFsICgpIHsKKwlybWRpciAke0R9JHtiYXNlX2xpYmRpcn0KK30KKworUkRFUEVORFNfJHtQTn0tZGV2X2xpYmMtYmFyZW1ldGFsID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCisKK2FkZHRhc2sgbXVsdGlsaWJfaW5zdGFsbCBhZnRlciBkb19pbnN0YWxsIGJlZm9yZSBkb19wYWNrYWdlIGRvX3BvcHVsYXRlX3N5c3Jvb3QKKyMgdGhpcyBtYWtlcyBtdWx0aWxpYiBnY2MgZmlsZXMgZmluZGFibGUgZm9yIHRhcmdldCBnY2MKKyMgZS5nLgorIyAgICAvdXNyL2xpYi9pNTg2LXBva3ltbGxpYjMyLWxpbnV4LzQuNy8KKyMgYnkgY3JlYXRpbmcgdGhpcyBzeW1saW5rIHRvIGl0CisjICAgIC91c3IvbGliNjQveDg2XzY0LXBva3ktbGludXgvNC43LzMyCisKK2Zha2Vyb290IHB5dGhvbiBkb19tdWx0aWxpYl9pbnN0YWxsKCkgeworICAgIGltcG9ydCByZQorCisgICAgbXVsdGlsaWJzID0gZC5nZXRWYXIoJ01VTFRJTElCX1ZBUklBTlRTJywgVHJ1ZSkKKyAgICBpZiBub3QgbXVsdGlsaWJzIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIGJpbnYgPSBkLmdldFZhcignQklOVicsIFRydWUpCisKKyAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpCisgICAgaWYgKCclc2xpYmdjYycgJSBtbHByZWZpeCkgIT0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSk6CisgICAgICAgIHJldHVybgorCisgICAgaWYgbWxwcmVmaXg6CisgICAgICAgIG9yaWdfdHVuZSA9IGQuZ2V0VmFyKCdERUZBVUxUVFVORV9NVUxUSUxJQl9PUklHSU5BTCcsIFRydWUpCisgICAgICAgIG9yaWdfdHVuZV9wYXJhbXMgPSBnZXRfdHVuZV9wYXJhbWV0ZXJzKG9yaWdfdHVuZSwgZCkKKyAgICAgICAgb3JpZ190dW5lX2Jhc2VsaWIgPSBvcmlnX3R1bmVfcGFyYW1zWydiYXNlbGliJ10KKyAgICAgICAgb3JpZ190dW5lX2JpdG5lc3MgPSBvcmlnX3R1bmVfYmFzZWxpYi5yZXBsYWNlKCdsaWInLCAnJykKKyAgICAgICAgaWYgbm90IG9yaWdfdHVuZV9iaXRuZXNzOgorICAgICAgICAgICAgb3JpZ190dW5lX2JpdG5lc3MgPSAnMzInCisKKyAgICAgICAgc3JjID0gJy4uLy4uLy4uLycgKyBvcmlnX3R1bmVfYmFzZWxpYiArICcvJyArIFwKKyAgICAgICAgICAgIGQuZ2V0VmFyKCdUQVJHRVRfU1lTX01VTFRJTElCX09SSUdJTkFMJywgVHJ1ZSkgKyAnLycgKyBiaW52ICsgJy8nCisKKyAgICAgICAgZGVzdCA9IGQuZ2V0VmFyKCdEJywgVHJ1ZSkgKyBkLmdldFZhcignbGliZGlyJywgVHJ1ZSkgKyAnLycgKyBcCisgICAgICAgICAgICBkLmdldFZhcignVEFSR0VUX1NZUycsIFRydWUpICsgJy8nICsgYmludiArICcvJyArIG9yaWdfdHVuZV9iaXRuZXNzCisKKyAgICAgICAgaWYgb3MucGF0aC5sZXhpc3RzKGRlc3QpOgorICAgICAgICAgICAgb3MudW5saW5rKGRlc3QpCisgICAgICAgIG9zLnN5bWxpbmsoc3JjLCBkZXN0KQorICAgICAgICByZXR1cm4KKworCisgICAgZm9yIG1sIGluIG11bHRpbGlicy5zcGxpdCgpOgorICAgICAgICB0dW5lID0gZC5nZXRWYXIoJ0RFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi0nICsgbWwsIFRydWUpCisgICAgICAgIGlmIG5vdCB0dW5lOgorICAgICAgICAgICAgYmIud2FybignREVGQVVMVFRVTkVfdmlydGNsYXNzLW11bHRpbGliLSVzIGlzIG5vdCBkZWZpbmVkLiBTa2lwcGluZy4uLicgJSBtbCkKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgdHVuZV9wYXJhbWV0ZXJzID0gZ2V0X3R1bmVfcGFyYW1ldGVycyh0dW5lLCBkKQorICAgICAgICB0dW5lX2Jhc2VsaWIgPSB0dW5lX3BhcmFtZXRlcnNbJ2Jhc2VsaWInXQorICAgICAgICBpZiBub3QgdHVuZV9iYXNlbGliOgorICAgICAgICAgICAgYmIud2FybigiVHVuZSAlcyBkb2Vzbid0IGhhdmUgYSBiYXNlbGliIHNldC4gU2tpcHBpbmcuLi4iICUgdHVuZSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgdHVuZV9hcmNoID0gdHVuZV9wYXJhbWV0ZXJzWydhcmNoJ10KKyAgICAgICAgdHVuZV9iaXRuZXNzID0gdHVuZV9iYXNlbGliLnJlcGxhY2UoJ2xpYicsICcnKQorICAgICAgICBpZiBub3QgdHVuZV9iaXRuZXNzOgorICAgICAgICAgICAgdHVuZV9iaXRuZXNzID0gJzMyJyAjIC9saWIgPT4gMzJiaXQgbGliCisKKyAgICAgICAgc3JjID0gJy4uLy4uLy4uLycgKyB0dW5lX2Jhc2VsaWIgKyAnLycgKyBcCisgICAgICAgICAgICB0dW5lX2FyY2ggKyBkLmdldFZhcignVEFSR0VUX1ZFTkRPUicsIFRydWUpICsgJ21sJyArIG1sICsgXAorICAgICAgICAgICAgJy0nICsgZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpICsgJy8nICsgYmludiArICcvJworCisgICAgICAgIGRlc3QgPSBkLmdldFZhcignRCcsIFRydWUpICsgZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpICsgJy8nICsgXAorICAgICAgICAgICAgZC5nZXRWYXIoJ1RBUkdFVF9TWVMnLCBUcnVlKSArICcvJyArIGJpbnYgKyAnLycgKyB0dW5lX2JpdG5lc3MKKworICAgICAgICBpZiBvcy5wYXRoLmxleGlzdHMoZGVzdCk6CisgICAgICAgICAgICBvcy51bmxpbmsoZGVzdCkKKyAgICAgICAgb3Muc3ltbGluayhzcmMsIGRlc3QpCit9CisKK2RlZiBnZXRfb3JpZ2luYWxfdmVuZG9yb3MoZCk6CisgICAgdmVuZG9yb3MgPSBkLmV4cGFuZCgnJHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30nKQorICAgIGZvciBzdWZmaXggaW4gW2QuZ2V0VmFyKCdBQklFWFRFTlNJT04nLCBUcnVlKSwgZC5nZXRWYXIoJ0xJQkNFWFRFTlNJT04nLCBUcnVlKV06CisgICAgICAgIGlmIHN1ZmZpeCBhbmQgdmVuZG9yb3MuZW5kc3dpdGgoc3VmZml4KToKKyAgICAgICAgICAgIHZlbmRvcm9zID0gdmVuZG9yb3NbOi1sZW4oc3VmZml4KV0KKyAgICByZXR1cm4gdmVuZG9yb3MKKworT1JJR19UQVJHRVRfVkVORE9ST1MgOj0gIiR7QGdldF9vcmlnaW5hbF92ZW5kb3JvcyhkKX0iCitCQVNFVEFSR0VUX1NZUyA9ICIke1RBUkdFVF9BUkNIfSR7T1JJR19UQVJHRVRfVkVORE9ST1N9IgorCithZGR0YXNrIGV4dHJhX3N5bWxpbmtzIGFmdGVyIGRvX211bHRpbGliX2luc3RhbGwgYmVmb3JlIGRvX3BhY2thZ2UgZG9fcG9wdWxhdGVfc3lzcm9vdAorZmFrZXJvb3QgcHl0aG9uIGRvX2V4dHJhX3N5bWxpbmtzKCkgeworICAgIHRhcmdldHN5cyA9IGQuZ2V0VmFyKCdCQVNFVEFSR0VUX1NZUycsIFRydWUpCisKKyAgICBpZiB0YXJnZXRzeXMgIT0gZC5nZXRWYXIoJ1RBUkdFVF9TWVMnLCBUcnVlKToKKyAgICAgICAgZGVzdCA9IGQuZ2V0VmFyKCdEJywgVHJ1ZSkgKyBkLmdldFZhcignbGliZGlyJywgVHJ1ZSkgKyAnLycgKyB0YXJnZXRzeXMKKyAgICAgICAgc3JjID0gZC5nZXRWYXIoJ1RBUkdFVF9TWVMnLCBUcnVlKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5sZXhpc3RzKGRlc3QpIGFuZCBvcy5wYXRoLmxleGlzdHMoZC5nZXRWYXIoJ0QnLCBUcnVlKSArIGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSk6CisgICAgICAgICAgICBvcy5zeW1saW5rKHNyYywgZGVzdCkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWwuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOTJmMDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWwuaW5jCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgbGliZ2NjLWNvbW1vbi5pbmMKKworREVQRU5EUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtaW5pdGlhbCIKKworTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKKworU1RBR0lOR0NDID0gImdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorU1RBR0lOR0NDX2NsYXNzLW5hdGl2ZXNkayA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1BBVEhfcHJlcGVuZCA9ICIke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0uJHtTVEFHSU5HQ0N9OiIKKworUEFDS0FHRVMgPSAiIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1zaGFyZWQiCisKK0xJQkdDQ0JVSUxEVFJFRU5BTUUgPSAiZ2NjLWJ1aWxkLWludGVybmFsLWluaXRpYWwtIgorCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfS8iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF80LjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZjI1M2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNC44LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdjYy1pbml0aWFsLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzQuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF80LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmMjUzZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF80LjkuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgbGliZ2NjLWluaXRpYWwuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWYyNTNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzUuMi5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBsaWJnY2MtaW5pdGlhbC5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5YWRiZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MuaW5jCkBAIC0wLDAgKzEsNDEgQEAKK3JlcXVpcmUgbGliZ2NjLWNvbW1vbi5pbmMKKworREVQRU5EUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9ZysrIgorCitQQUNLQUdFUyA9ICJcCisgICAgJHtQTn0gXAorICAgICR7UE59LWRldiBcCisgICAgJHtQTn0tZGJnIFwKKyIKKworIyBBbGwgbGliZ2NjIHNvdXJjZSBpcyBtYXJrZWQgd2l0aCB0aGUgZXhjZXB0aW9uLgorIworTElDRU5TRV8ke1BOfSA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfJHtQTn0tZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV8ke1BOfS1kYmcgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCisKKworRklMRVNfJHtQTn0gPSAiJHtiYXNlX2xpYmRpcn0vbGliZ2NjKi5zby4qIgorRklMRVNfJHtQTn0tZGV2ID0gIlwKKyAgICAke2Jhc2VfbGliZGlyfS9saWJnY2MqLnNvIFwKKyAgICAke2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LypjcnQqIFwKKyAgICAke2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LzY0IFwKKyAgICAke2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LzMyIFwKKyAgICAke2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3gzMiBcCisgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9uMzIgXAorICAgICR7bGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbGliZ2NjKiBcCisgICAgJHtAYmFzZV9jb25kaXRpb25hbCgnQkFTRVRBUkdFVF9TWVMnLCAnJHtUQVJHRVRfU1lTfScsICcnLCAnJHtsaWJkaXJ9LyR7QkFTRVRBUkdFVF9TWVN9JywgZCl9IFwKKyAgICAke2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYmdjb3YuYSBcCisiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiYXNlX2xpYmRpcn0vLmRlYnVnLyIKKworTElCR0NDQlVJTERUUkVFTkFNRSA9ICJnY2MtYnVpbGQtaW50ZXJuYWwtIgorCitkb19wYWNrYWdlW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKKworSU5TQU5FX1NLSVBfJHtQTn0tZGV2ID0gInN0YXRpY2RldiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY180LjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE1MmYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY180LjguYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgbGliZ2NjLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY180LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE1MmYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY180LjkuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgbGliZ2NjLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY181LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE1MmYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY181LjIuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgbGliZ2NjLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyODQzZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbi5pbmMKQEAgLTAsMCArMSw3NCBAQAorcmVxdWlyZSBnY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKKworRVhUUkFfT0VDT05GX1BBVEhTID0gIlwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorIgorCitkb19jb25maWd1cmUgKCkgeworCW10YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwl0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwloYXJkbGlua2RpciAke1NUQUdJTkdfSU5DRElSX05BVElWRX0vZ2NjLWJ1aWxkLWludGVybmFsLSRtdGFyZ2V0ICR7Qn0KKworCWVjaG8gIkNvbmZpZ3VyaW5nIGxpYmdmb3J0cmFuIgorCXJtIC1yZiAke0J9LyR0YXJnZXQvbGliZ2ZvcnRyYW4vCisJbWtkaXIgLXAgJHtCfS8kdGFyZ2V0L2xpYmdmb3J0cmFuLworCWNkICR7Qn0vJHRhcmdldC9saWJnZm9ydHJhbi8KKwljaG1vZCBhK3ggJHtTfS9saWJnZm9ydHJhbi9jb25maWd1cmUKKwkke1N9L2xpYmdmb3J0cmFuL2NvbmZpZ3VyZSAke0NPTkZJR1VSRU9QVFN9ICR7RVhUUkFfT0VDT05GfQorCSMgRWFzaWVzdCB3YXkgdG8gc3RvcCBiYWQgUlBBVEhzIGdldHRpbmcgaW50byB0aGUgbGlicmFyeSBzaW5jZSB3ZSBoYXZlIGEKKwkjIGJyb2tlbiBsaWJ0b29sIGhlcmUKKwlzZWQgLWkgLWUgJ3MvaGFyZGNvZGVfaW50b19saWJzPXllcy9oYXJkY29kZV9pbnRvX2xpYnM9bm8vJyAke0J9LyR0YXJnZXQvbGliZ2ZvcnRyYW4vbGlidG9vbAorfQorCitkb19jb21waWxlICgpIHsKKwl0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwljZCAke0J9LyR0YXJnZXQvbGliZ2ZvcnRyYW4vCisJb2VfcnVubWFrZSBNVUxUSUJVSUxEVE9QPSR7Qn0vJHRhcmdldC9saWJnZm9ydHJhbi8KK30KKworZG9faW5zdGFsbCAoKSB7CisJdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJY2QgJHtCfS8kdGFyZ2V0L2xpYmdmb3J0cmFuLworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgTVVMVElCVUlMRFRPUD0ke0J9LyR0YXJnZXQvbGliZ2ZvcnRyYW4vIGluc3RhbGwKKwlpZiBbIC1kICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9maW5jbHVkZSBdOyB0aGVuCisJCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5IC1wICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9maW5jbHVkZQorCWZpCisJaWYgWyAtZCAke0R9JHtpbmZvZGlyfSBdOyB0aGVuCisJCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5IC1wICR7RH0ke2luZm9kaXJ9CisJZmkKKwljaG93biAtUiByb290OnJvb3QgJHtEfQorfQorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorREVQRU5EUyA9ICJnY2MtcnVudGltZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCisKK1BBQ0tBR0VTID0gIlwKKyAgICAke1BOfS1kYmcgXAorICAgIGxpYmdmb3J0cmFuIFwKKyAgICBsaWJnZm9ydHJhbi1kZXYgXAorICAgIGxpYmdmb3J0cmFuLXN0YXRpY2RldiBcCisiCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGliZ2ZvcnRyYW4uc28uKiIKK0ZJTEVTXyR7UE59LWRldiA9ICJcCisgICAgJHtsaWJkaXJ9L2xpYmdmb3J0cmFuKi5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYmdmb3J0cmFuLnNwZWMgXAorICAgICR7bGliZGlyfS9saWJnZm9ydHJhbi5sYSBcCisgICAgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbGliZ2ZvcnRyYW5iZWdpbi4qIFwKKyAgICAke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWJjYWZfc2luZ2xlKiBcCisiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYmdmb3J0cmFuLmEiCisKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliZ2ZvcnRyYW4tZGV2ID0gInN0YXRpY2RldiIKKworZG9fcGFja2FnZV93cml0ZV9pcGtbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjOmRvX3BhY2thZ2VkYXRhIgorZG9fcGFja2FnZV93cml0ZV9kZWJbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjOmRvX3BhY2thZ2VkYXRhIgorZG9fcGFja2FnZV93cml0ZV9ycG1bZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjOmRvX3BhY2thZ2VkYXRhIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIGYgPSBkLmdldFZhcigiRk9SVFJBTiIsIFRydWUpCisgICAgaWYgImZvcnRyYW4iIG5vdCBpbiBmOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgibGliZ2ZvcnRyYW4gbmVlZHMgZm9ydHJhbiBzdXBwb3J0IHRvIGJlIGVuYWJsZWQgaW4gdGhlIGNvbXBpbGVyIikKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl80LjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZGQ4YjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNC44LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdmb3J0cmFuLmluYworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWRkOGI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzQuOS5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBsaWJnZm9ydHJhbi5pbmMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzUuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl81LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkZDhiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl81LjIuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgbGliZ2ZvcnRyYW4uaW5jCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItNy45LjEuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi03LjkuMS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhOTVhZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItNy45LjEuaW5jCkBAIC0wLDAgKzEsOSBAQAorTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYzICYgTEdQTHYyICYgTEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorCQkgICAgZmlsZTovL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisJCSAgICBmaWxlOi8vQ09QWUlORzMuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiBcCisJCSAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTlmNjA0ZDhhNGY4ZTc0ZjRmNTE0MDg0NWEyMWI2Njc0IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjNiOTdkZTkxOWE5ZGJhODQ0OTBiMmUwNzZlYzRjYjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDk5NGFkOTg2NzI2YWM0MTI4YTZmMWJkODAyMGNkNjcyZTlhOTJhYTc2YjgwNzM2NTYzZWY5OTI5OTI3NjRlZiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jb21tb24uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NmJhOGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNvbW1vbi5pbmMKQEAgLTAsMCArMSw3MSBAQAorU1VNTUFSWSA9ICJHTlUgZGVidWdnZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2RiLyIKK0xJQ0VOU0UgPSAiR1BMdjMrIgorU0VDVElPTiA9ICJkZXZlbCIKK0RFUEVORFMgPSAiZXhwYXQgemxpYiBuY3Vyc2VzIHJlYWRsaW5lICR7TFRUTkdVU1R9IgorCitMVFROR1VTVCA9ICJsdHRuZy11c3QiCitMVFROR1VTVF9hYXJjaDY0ID0gIiIKK0xUVE5HVVNUX2xpYmMtdWNsaWJjID0gIiIKK0xUVE5HVVNUX21pcHMgPSAiIgorTFRUTkdVU1RfbWlwc2VsID0gIiIKK0xUVE5HVVNUX21pcHM2NCA9ICIiCitMVFROR1VTVF9taXBzNjRlbCA9ICIiCitMVFROR1VTVF9taXBzNjRuMzIgPSAiIgorTFRUTkdVU1RfbWlwczY0ZWxuMzIgPSAiIgorTFRUTkdVU1Rfc2g0ID0gIiIKK0xUVE5HVVNUX2xpYmMtbXVzbCA9ICIiCisKK0lOQ19QUiA9ICJyMCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorCQlmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTlmNjA0ZDhhNGY4ZTc0ZjRmNTE0MDg0NWEyMWI2Njc0IFwKKwkJZmlsZTovL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisJCWZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IgoraW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2RiL2dkYi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICIKK2V4cG9ydCBDQ19GT1JfQlVJTEQgPSAiJHtCVUlMRF9DQ30iCitleHBvcnQgQ1hYX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NYWH0iCitleHBvcnQgQ1BQX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NQUH0iCitleHBvcnQgQ0ZMQUdTX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NGTEFHU30iCitleHBvcnQgQ1hYRkxBR1NfRk9SX0JVSUxEID0gIiR7QlVJTERfQ1hYRkxBR1N9IgorZXhwb3J0IENQUEZMQUdTX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NQUEZMQUdTfSIKKworQiA9ICIke1dPUktESVJ9L2J1aWxkLSR7VEFSR0VUX1NZU30iCisKK0VYVFJBX09FTUFLRSA9ICInU1VCRElSUz1pbnRsIG1tYWxsb2MgbGliaWJlcnR5IG9wY29kZXMgYmZkIHNpbSBnZGIgZXRjIHV0aWxzJyIKKworRVhQQVQgPSAiLS13aXRoLWV4cGF0IC0td2l0aC1saWJleHBhdC1wcmVmaXg9JHtTVEFHSU5HX0RJUl9IT1NUfSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1nZGJ0ayAtLWRpc2FibGUtdHVpIC0tZGlzYWJsZS14IC0tZGlzYWJsZS13ZXJyb3IgXAorICAgICAgICAgICAgICAgIC0td2l0aC1jdXJzZXMgLS1kaXNhYmxlLW11bHRpbGliIC0td2l0aC1zeXN0ZW0tcmVhZGxpbmUgLS1kaXNhYmxlLXNpbSBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LWx6bWEgLS13aXRob3V0LWd1aWxlIFwKKyAgICAgICAgICAgICAgICAke0dEQlBST1BSRUZJWH0gJHtFWFBBVH0gXAorICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbXVsdGlhcmNoJywgJy0tZW5hYmxlLTY0LWJpdC1iZmQnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtcnBhdGggXAorICAgICAgICAgICAgICAgIgorCitHREJQUk9QUkVGSVggPSAiLS1wcm9ncmFtLXByZWZpeD0nJyIKKworZG9fY29uZmlndXJlICgpIHsKKwkjIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gdG8gYXZvaWQgdGhlIGF1dG9jb25mL2F1dG9tYWtlL2FjbG9jYWwvYXV0b2hlYWRlcgorCSMgY2FsbHMgZm9yIG5vdworCShjZCAke1N9ICYmIGdudS1jb25maWdpemUpIHx8IGRpZSAiZmFpbHVyZSBpbiBydW5uaW5nIGdudS1jb25maWdpemUiCisJb2VfcnVuY29uZgorfQorCisjIHdlIGRvbid0IHdhbnQgZ2RiIHRvIHByb3ZpZGUgYmZkL2liZXJ0eS9vcGNvZGVzLCB3aGljaCBpbnN0ZWFkIHdpbGwgb3ZlcnJpZGUgdGhlCisjIHJpZ2h0IGJpdHMgaW5zdGFsbGVkIGJ5IGJpbnV0aWxzLgorZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gLXJmICR7RH0ke2xpYmRpcn0KKwlybSAtcmYgJHtEfSR7aW5jbHVkZWRpcn0KKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vbG9jYWxlCit9CisKK1JSRUNPTU1FTkRTX2dkYl9hcHBlbmRfbGludXggPSAiIGdsaWJjLXRocmVhZC1kYiAiCitSUkVDT01NRU5EU19nZGJfYXBwZW5kX2xpbnV4LWdudWVhYmkgPSAiIGdsaWJjLXRocmVhZC1kYiAiCitSUkVDT01NRU5EU19nZGJzZXJ2ZXJfYXBwZW5kX2xpbnV4ID0gIiBnbGliYy10aHJlYWQtZGIgIgorUlJFQ09NTUVORFNfZ2Ric2VydmVyX2FwcGVuZF9saW51eC1nbnVlYWJpID0gIiBnbGliYy10aHJlYWQtZGIgIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLWNhbmFkaWFuLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW4uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZDYwYTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLWNhbmFkaWFuLmluYwpAQCAtMCwwICsxLDM4IEBACitpbmhlcml0IGNyb3NzLWNhbmFkaWFuCitpbmhlcml0IHB5dGhvbi1kaXIKKworU1VNTUFSWSA9ICJHTlUgZGVidWdnZXIgKGNyb3NzLWNhbmFkaWFuIGdkYiBmb3IgJHtUQVJHRVRfQVJDSH0gdGFyZ2V0KSIKK1BOID0gImdkYi1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9IgorQlBOID0gImdkYiIKKworREVQRU5EUyA9ICJuYXRpdmVzZGstbmN1cnNlcyBuYXRpdmVzZGstZXhwYXQgbmF0aXZlc2RrLWdldHRleHQgbmF0aXZlc2RrLXJlYWRsaW5lIG5hdGl2ZXNkay1weXRob24iCitSREVQRU5EU18ke1BOfSArPSAibmF0aXZlc2RrLXB5dGhvbi1jb3JlIG5hdGl2ZXNkay1weXRob24tbGFuZyBuYXRpdmVzZGstcHl0aG9uLXJlIFwKKyAgICAgICAgICAgICAgICAgICBuYXRpdmVzZGstcHl0aG9uLWNvZGVjcyBuYXRpdmVzZGstcHl0aG9uLW5ldGNsaWVudCIKKworR0RCUFJPUFJFRklYID0gIi0tcHJvZ3JhbS1wcmVmaXg9JyR7VEFSR0VUX1BSRUZJWH0nIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIiAtLXdpdGgtcHl0aG9uPSR7V09SS0RJUn0vcHl0aG9uIgorCitTU1RBVEVfRFVQV0hJVEVMSVNUICs9ICIke1NUQUdJTkdfREFUQURJUn0vZ2RiIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKK2NhdCA+ICR7V09SS0RJUn0vcHl0aG9uIDw8IEVPRgorIyEgL2Jpbi9zaAorY2FzZSAiXCQyIiBpbgorICAgICAgICAtLWluY2x1ZGVzKSBlY2hvICItSSR7U1RBR0lOR19JTkNESVJ9LyR7UFlUSE9OX0RJUn0vIiA7OworICAgICAgICAtLWxkZmxhZ3MpIGVjaG8gIi1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfTElCRElSfS8uLiAtV2wsLXJwYXRoLCR7bGliZGlyfS8uLiAtbHB0aHJlYWQgLWxkbCAtbHV0aWwgLWxtIC1scHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059IiA7OworICAgICAgICAtLWV4ZWMtcHJlZml4KSBlY2hvICIke2V4ZWNfcHJlZml4fSIgOzsKKyAgICAgICAgKikgZXhpdCAxIDs7Citlc2FjCitleGl0IDAKK0VPRgorICAgICAgICBjaG1vZCAreCAke1dPUktESVJ9L3B5dGhvbgorfQorCisjIHdlIGRvbid0IHdhbnQgZ2RiIHRvIHByb3ZpZGUgYmZkL2liZXJ0eS9vcGNvZGVzLCB3aGljaCBpbnN0ZWFkIHdpbGwgb3ZlcnJpZGUgdGhlCisjIHJpZ2h0IGJpdHMgaW5zdGFsbGVkIGJ5IGJpbnV0aWxzLgorZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gLXJmICR7RH0ke2V4ZWNfcHJlZml4fS9saWIKKwljcm9zc19jYW5hZGlhbl9iaW5kaXJsaW5rcworfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLWNhbmFkaWFuXzcuOS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy1jYW5hZGlhbl83LjkuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDEwMzU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy1jYW5hZGlhbl83LjkuMS5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgZ2RiLWNvbW1vbi5pbmMKK3JlcXVpcmUgZ2RiLWNyb3NzLWNhbmFkaWFuLmluYworcmVxdWlyZSBnZGItJHtQVn0uaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNDQ3NzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLmluYwpAQCAtMCwwICsxLDI2IEBACityZXF1aXJlIGdkYi1jb21tb24uaW5jCisKK0RFUEVORFMgPSAiZXhwYXQtbmF0aXZlIG5jdXJzZXMtbmF0aXZlIHJlYWRsaW5lLW5hdGl2ZSBweXRob24tbmF0aXZlIgorCitpbmhlcml0IHB5dGhvbm5hdGl2ZQorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1weXRob249JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgZXhwb3J0IEJVSUxEX1NZUz0iJHtCVUlMRF9TWVN9IgorICAgIGV4cG9ydCBIT1NUX1NZUz0iJHtIT1NUX1NZU30iCisgICAgZXhwb3J0IFNUQUdJTkdfTElCRElSPSIke1NUQUdJTkdfTElCRElSX05BVElWRX0iCisgICAgZXhwb3J0IFNUQUdJTkdfSU5DRElSPSIke1NUQUdJTkdfSU5DRElSX05BVElWRX0iCit9CisKKyNFWFRSQV9PRU1BS0UgKz0gIkxERkxBR1M9JyR7QlVJTERfTERGTEFHU30nIgorCitHREJQUk9QUkVGSVggPSAiIgorCitQTiA9ICJnZGItY3Jvc3MtJHtUQVJHRVRfQVJDSH0iCitCUE4gPSAiZ2RiIgorCitpbmhlcml0IGNyb3NzCitpbmhlcml0IGdldHRleHQKKworZGF0YWRpciAuPSAiL2dkYi0ke1RVTkVfUEtHQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3NfNy45LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzXzcuOS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOTVjZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzXzcuOS4xLmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSBnZGItY3Jvc3MuaW5jCityZXF1aXJlIGdkYi0ke1BWfS5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtbWFrZS1tYW4taW5zdGFsbC1yZWxhdGl2ZS10by1ERVNURElSLnBhdGNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGMwMjEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi5pbmMKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSBnZGItY29tbW9uLmluYworCitpbmhlcml0IGdldHRleHQKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDItQ2hhbmdlLW9yZGVyLW9mLUNGTEFHUy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMy1BZGQtc3VwcG9ydC1mb3ItUmVuZXNhcy1TSC1zaDQtYXJjaGl0ZWN0dXJlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtZGV0ZWN0aW9uLW9mLTY0LWJpdC1QUEMtaW5mZXJpb3ItaW4tZ2Ric2VydmVyLnBhdGNoIFwKKyAgICAgICAgICAgIgorI0xERkxBR1NfYXBwZW5kID0gIiAtcyIKKyNleHBvcnQgQ0ZMQUdTX2FwcGVuZD0iIC1MJHtTVEFHSU5HX0xJQkRJUn0iCisKKyMgY3Jvc3MtY2FuYWRpYW4gbXVzdCBub3Qgc2VlIHRoaXMKK1BBQ0tBR0VTID0rICJnZGJzZXJ2ZXIiCitGSUxFU19nZGJzZXJ2ZXIgPSAiJHtiaW5kaXJ9L2dkYnNlcnZlciIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS1tYWtlLW1hbi1pbnN0YWxsLXJlbGF0aXZlLXRvLURFU1RESVIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDEtbWFrZS1tYW4taW5zdGFsbC1yZWxhdGl2ZS10by1ERVNURElSLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5OTZjMTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDEtbWFrZS1tYW4taW5zdGFsbC1yZWxhdGl2ZS10by1ERVNURElSLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gMTJiMDUwNjk1MTQ2MGMzY2MzN2Q3NzU0NzhkMDI0ZGIzZjk1ZTlkOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDI6Mjc6NTUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzNdIG1ha2UgbWFuIGluc3RhbGwgcmVsYXRpdmUgdG8gREVTVERJUgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNpbS9jb21tb24vTWFrZWZpbGUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zaW0vY29tbW9uL01ha2VmaWxlLmluIGIvc2ltL2NvbW1vbi9NYWtlZmlsZS5pbgoraW5kZXggZDQ5YTkzYi4uMjEyMWM0NiAxMDA2NDQKKy0tLSBhL3NpbS9jb21tb24vTWFrZWZpbGUuaW4KKysrKyBiL3NpbS9jb21tb24vTWFrZWZpbGUuaW4KK0BAIC0zNSw3ICszNSw3IEBAIHRvb2xkaXIgPSAkKGxpYmRpcikvJCh0YXJnZXRfYWxpYXMpCisgZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACisgZGF0YWRpciA9IEBkYXRhZGlyQAorIG1hbmRpciA9IEBtYW5kaXJACistbWFuMWRpciA9ICQobWFuZGlyKS9tYW4xCisrbWFuMWRpciA9ICQoREVTVERJUikkKG1hbmRpcikvbWFuMQorIGluZm9kaXIgPSBAaW5mb2RpckAKKyBpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMi1DaGFuZ2Utb3JkZXItb2YtQ0ZMQUdTLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAyLUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjYjQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMi1DaGFuZ2Utb3JkZXItb2YtQ0ZMQUdTLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gMjYyY2NjNGZkYjJhM2RmMGYxNmM2MWE4MDcwNDY5NjRhZTc3MjljOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDI6Mjk6MjMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzNdIENoYW5nZSBvcmRlciBvZiBDRkxBR1MKKworTGV0cyB1cyBvdmVycmlkZSBXZXJyb3IgaWYgbmVlZCBiZQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4gfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbiBiL2dkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4KK2luZGV4IDFlZDJlYzguLjBjZWY5NWIgMTAwNjQ0CistLS0gYS9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluCisrKysgYi9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluCitAQCAtMTMxLDEwICsxMzEsMTAgQEAgQ0ZMQUdTID0gQENGTEFHU0AKKyBDUFBGTEFHUyA9IEBDUFBGTEFHU0AKKyAKKyAjIElOVEVSTkFMX0NGTEFHUyBpcyB0aGUgYWdncmVnYXRlIG9mIGFsbCBvdGhlciAqQ0ZMQUdTIG1hY3Jvcy4KKy1JTlRFUk5BTF9DRkxBR1NfQkFTRSA9ICAke0NGTEFHU30gJHtHTE9CQUxfQ0ZMQUdTfSBcCisrSU5URVJOQUxfQ0ZMQUdTX0JBU0UgPSAke0dMT0JBTF9DRkxBR1N9IFwKKyAJJHtQUk9GSUxFX0NGTEFHU30gJHtJTkNMVURFX0NGTEFHU30gJHtDUFBGTEFHU30KKyBJTlRFUk5BTF9XQVJOX0NGTEFHUyA9ICAke0lOVEVSTkFMX0NGTEFHU19CQVNFfSAkKFdBUk5fQ0ZMQUdTKQorLUlOVEVSTkFMX0NGTEFHUyA9ICAke0lOVEVSTkFMX1dBUk5fQ0ZMQUdTfSAkKFdFUlJPUl9DRkxBR1MpIC1ER0RCU0VSVkVSCisrSU5URVJOQUxfQ0ZMQUdTID0gICR7SU5URVJOQUxfV0FSTl9DRkxBR1N9ICQoV0VSUk9SX0NGTEFHUykgJHtDRkxBR1N9IC1ER0RCU0VSVkVSCisgCisgIyBMREZMQUdTIGlzIHNwZWNpZmljYWxseSByZXNlcnZlZCBmb3Igc2V0dGluZyBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAjIHdoZW4gcnVubmluZyBtYWtlLgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDMtQWRkLXN1cHBvcnQtZm9yLVJlbmVzYXMtU0gtc2g0LWFyY2hpdGVjdHVyZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMy1BZGQtc3VwcG9ydC1mb3ItUmVuZXNhcy1TSC1zaDQtYXJjaGl0ZWN0dXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhM2UyMmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDMtQWRkLXN1cHBvcnQtZm9yLVJlbmVzYXMtU0gtc2g0LWFyY2hpdGVjdHVyZS5wYXRjaApAQCAtMCwwICsxLDkyMSBAQAorRnJvbSA0MDdjYjEzY2ZiNzA2OTdmNDVkZmI3NjEzMDRlMDA1ZTFlY2JkMGU5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMjozMToxMiArMDAwMAorU3ViamVjdDogW1BBVENIIDMvM10gQWRkIHN1cHBvcnQgZm9yIFJlbmVzYXMgU0ggKHNoNCkgYXJjaGl0ZWN0dXJlLgorCitnZGIgKDcuNC0xfmN2czIwMTExMTE3LjIpIGV4cGVyaW1lbnRhbDsgdXJnZW5jeT1sb3cKKyAuCisgICAqIEFkZCBSZW5lc2FzIFNIIChzaDQpIHN1cHBvcnQgKENsb3NlczogIzU3NjI0MikKKyAgICAgLSBUaGFua3MgTm9idWhpcm8gSXdhbWF0c3UsIFRha2FzaGkgWW9zaGlpLgorQXV0aG9yOiBIZWN0b3IgT3JvbiA8enVtYmlAZGViaWFuLm9yZz4KK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNTc2MjQyCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdkYi9NYWtlZmlsZS5pbiAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCisgZ2RiL2NvbmZpZ3VyZS5ob3N0ICAgICAgICAgICAgICAgICAgIHwgICAxICsKKyBnZGIvc2gtbGludXgtdGRlcC5jICAgICAgICAgICAgICAgICAgfCA1MTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBnZGIvc2gtdGRlcC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgNTQgKystLQorIGdkYi9zaC10ZGVwLmggICAgICAgICAgICAgICAgICAgICAgICB8ICA0OSArKysrCisgZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwIHwgICA1ICsKKyBnZGIvdGVzdHN1aXRlL2dkYi5hc20vc2guaW5jICAgICAgICAgfCAgIDMgKy0KKyBnZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTEuYyAgICAgfCAgIDMgKworIGdkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMy5jICAgICB8ICAgNCArCisgZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdhbGwuYyAgICAgIHwgICAzICsKKyBnZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ25hbHMuYyAgICAgfCAgIDQgKworIDExIGZpbGVzIGNoYW5nZWQsIDYxNyBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5pbgoraW5kZXggNzkzNzgwMS4uNjNiYWY4MSAxMDA2NDQKKy0tLSBhL2dkYi9NYWtlZmlsZS5pbgorKysrIGIvZ2RiL01ha2VmaWxlLmluCitAQCAtMTcwNyw2ICsxNzA3LDcgQEAgQUxMREVQRklMRVMgPSBcCisgCXNjb3JlLXRkZXAuYyBcCisgCXNlci1nbzMyLmMgc2VyLXBpcGUuYyBzZXItdGNwLmMgc2VyLW1pbmd3LmMgXAorIAlzaC10ZGVwLmMgc2g2NC10ZGVwLmMgc2huYnNkLXRkZXAuYyBzaG5ic2QtbmF0LmMgXAorKwlzaC1saW51eC10ZGVwLmMgc2gtbGludXgtbmF0LmMgXAorIAlzb2wyLXRkZXAuYyBcCisgCXNvbGliLXN2cjQuYyBcCisgCXNwYXJjLWxpbnV4LW5hdC5jIHNwYXJjLWxpbnV4LXRkZXAuYyBcCitkaWZmIC0tZ2l0IGEvZ2RiL2NvbmZpZ3VyZS5ob3N0IGIvZ2RiL2NvbmZpZ3VyZS5ob3N0CitpbmRleCBkMDdiZTRiLi5iNjM5MWM1IDEwMDY0NAorLS0tIGEvZ2RiL2NvbmZpZ3VyZS5ob3N0CisrKysgYi9nZGIvY29uZmlndXJlLmhvc3QKK0BAIC0xNTAsNiArMTUwLDcgQEAgcG93ZXJwYyotKi1saW51eCopCWdkYl9ob3N0PWxpbnV4IDs7CisgCisgczM5MCotKi1saW51eCopCQlnZGJfaG9zdD1saW51eCA7OworIAorK3NoKi0qLWxpbnV4KikJCWdkYl9ob3N0PWxpbnV4IDs7Cisgc2gqLSotbmV0YnNkZWxmKiB8IHNoKi0qLWtuZXRic2QqLWdudSkKKyAJCQlnZGJfaG9zdD1uYnNkIDs7Cisgc2gqLSotb3BlbmJzZCopCQlnZGJfaG9zdD1uYnNkIDs7CitkaWZmIC0tZ2l0IGEvZ2RiL3NoLWxpbnV4LXRkZXAuYyBiL2dkYi9zaC1saW51eC10ZGVwLmMKK2luZGV4IDJmZjJlZTguLjFhMTEyNjIgMTAwNjQ0CistLS0gYS9nZGIvc2gtbGludXgtdGRlcC5jCisrKysgYi9nZGIvc2gtbGludXgtdGRlcC5jCitAQCAtMTgsMTQgKzE4LDM3IEBACisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNpbmNsdWRlICJkZWZzLmgiCisrI2luY2x1ZGUgImdkYmNvcmUuaCIKKysjaW5jbHVkZSAiZnJhbWUuaCIKKysjaW5jbHVkZSAiZnJhbWUtYmFzZS5oIgorKyNpbmNsdWRlICJmcmFtZS11bndpbmQuaCIKKysjaW5jbHVkZSAiZHdhcmYyLWZyYW1lLmgiCisrI2luY2x1ZGUgInZhbHVlLmgiCisrI2luY2x1ZGUgInJlZ2NhY2hlLmgiCisrI2luY2x1ZGUgImluZmVyaW9yLmgiCisgI2luY2x1ZGUgIm9zYWJpLmgiCisgCisrI2luY2x1ZGUgInJlZ2dyb3Vwcy5oIgorKyNpbmNsdWRlICJhcmNoLXV0aWxzLmgiCisrI2luY2x1ZGUgImZsb2F0Zm9ybWF0LmgiCisgI2luY2x1ZGUgInNvbGliLXN2cjQuaCIKKyAjaW5jbHVkZSAic3ltdGFiLmgiCisrI2luY2x1ZGUgImdkYl9zdHJpbmcuaCIKKysjaW5jbHVkZSAiY29tbWFuZC5oIgorKyNpbmNsdWRlICJnZGJfYXNzZXJ0LmgiCisgCisgI2luY2x1ZGUgInRyYWQtZnJhbWUuaCIKKyAjaW5jbHVkZSAidHJhbXAtZnJhbWUuaCIKKyAKKysjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrI2luY2x1ZGUgPHN5cy91c2VyLmg+CisrI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisrCisrI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKysKKysjaW5jbHVkZSAicmVnc2V0LmgiCisgI2luY2x1ZGUgImdsaWJjLXRkZXAuaCIKKyAjaW5jbHVkZSAic2gtdGRlcC5oIgorICNpbmNsdWRlICJsaW51eC10ZGVwLmgiCitAQCAtMTgwLDkgKzIwMyw1MDUgQEAgc3RhdGljIHN0cnVjdCB0cmFtcF9mcmFtZSBzaF9saW51eF9ydF9zaWdyZXR1cm5fdHJhbXBfZnJhbWUgPSB7CisgICBzaF9saW51eF9ydF9zaWdyZXR1cm5faW5pdAorIH07CisgCisrLyogUmVjb2duaXppbmcgc2lnbmFsIGhhbmRsZXIgZnJhbWVzLiAgKi8KKysKKysvKiBHTlUvTGludXggaGFzIHR3byBmbGF2b3JzIG9mIHNpZ25hbHMuICBOb3JtYWwgc2lnbmFsIGhhbmRsZXJzLCBhbmQKKysgICAicmVhbHRpbWUiIChSVCkgc2lnbmFscy4gIFRoZSBSVCBzaWduYWxzIGNhbiBwcm92aWRlIGFkZGl0aW9uYWwKKysgICBpbmZvcm1hdGlvbiB0byB0aGUgc2lnbmFsIGhhbmRsZXIgaWYgdGhlIFNBX1NJR0lORk8gZmxhZyBpcyBzZXQKKysgICB3aGVuIGVzdGFibGlzaGluZyBhIHNpZ25hbCBoYW5kbGVyIHVzaW5nIGBzaWdhY3Rpb24nLiAgSXQgaXMgbm90CisrICAgdW5saWtlbHkgdGhhdCBmdXR1cmUgdmVyc2lvbnMgb2YgR05VL0xpbnV4IHdpbGwgc3VwcG9ydCBTQV9TSUdJTkZPCisrICAgZm9yIG5vcm1hbCBzaWduYWxzIHRvby4gICovCisrCisrLyogV2hlbiB0aGUgU0ggTGludXgga2VybmVsIGNhbGxzIGEgc2lnbmFsIGhhbmRsZXIgYW5kIHRoZQorKyAgIFNBX1JFU1RPUkVSIGZsYWcgaXNuJ3Qgc2V0LCB0aGUgcmV0dXJuIGFkZHJlc3MgcG9pbnRzIHRvIGEgYml0IG9mCisrICAgY29kZSBvbiB0aGUgc3RhY2suICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgd2hldGhlciB0aGUgUEMgYXBwZWFycyB0bworKyAgIGJlIHdpdGhpbiB0aGlzIGJpdCBvZiBjb2RlLgorKworKyAgIFRoZSBpbnN0cnVjdGlvbiBzZXF1ZW5jZSBmb3Igbm9ybWFsIHNpZ25hbHMgaXMKKysgICAgICAgbW92LncgIDFmLHIzCisrICAgICAgIHRyYXBhICAjMTYKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgIDE6IC53b3JkICBfX05SX3NpZ3JldHVybgorKyAgIG9yIDB4OTMwNSAweGMzMTAgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDAwNzcuCisrCisrICAgQ2hlY2tpbmcgZm9yIHRoZSBjb2RlIHNlcXVlbmNlIHNob3VsZCBiZSBzb21ld2hhdCByZWxpYWJsZSwgYmVjYXVzZQorKyAgIHRoZSBlZmZlY3QgaXMgdG8gY2FsbCB0aGUgc3lzdGVtIGNhbGwgc2lncmV0dXJuLiAgVGhpcyBpcyB1bmxpa2VseQorKyAgIHRvIG9jY3VyIGFueXdoZXJlIG90aGVyIHRoYW4gYSBzaWduYWwgdHJhbXBvbGluZS4KKysKKysgICBJdCBraW5kIG9mIHN1Y2tzIHRoYXQgd2UgaGF2ZSB0byByZWFkIG1lbW9yeSBmcm9tIHRoZSBwcm9jZXNzIGluCisrICAgb3JkZXIgdG8gaWRlbnRpZnkgYSBzaWduYWwgdHJhbXBvbGluZSwgYnV0IHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZQorKyAgIGFueSBvdGhlciB3YXkuICBUaGUgUENfSU5fU0lHVFJBTVAgbWFjcm8gaW4gdG0tbGludXguaCBhcnJhbmdlcyB0bworKyAgIG9ubHkgY2FsbCB1cyBpZiBubyBmdW5jdGlvbiBuYW1lIGNvdWxkIGJlIGlkZW50aWZpZWQsIHdoaWNoIHNob3VsZAorKyAgIGJlIHRoZSBjYXNlIHNpbmNlIHRoZSBjb2RlIGlzIG9uIHRoZSBzdGFjay4KKysKKysgICBEZXRlY3Rpb24gb2Ygc2lnbmFsIHRyYW1wb2xpbmVzIGZvciBoYW5kbGVycyB0aGF0IHNldCB0aGUKKysgICBTQV9SRVNUT1JFUiBmbGFnIGlzIGluIGdlbmVyYWwgbm90IHBvc3NpYmxlLiAgVW5mb3J0dW5hdGVseSB0aGlzIGlzCisrICAgd2hhdCB0aGUgR05VIEMgTGlicmFyeSBoYXMgYmVlbiBkb2luZyBmb3IgcXVpdGUgc29tZSB0aW1lIG5vdy4KKysgICBIb3dldmVyLCBhcyBvZiB2ZXJzaW9uIDIuMS4yLCB0aGUgR05VIEMgTGlicmFyeSB1c2VzIHNpZ25hbAorKyAgIHRyYW1wb2xpbmVzIChuYW1lZCBfX3Jlc3RvcmUgYW5kIF9fcmVzdG9yZV9ydCkgdGhhdCBhcmUgaWRlbnRpY2FsCisrICAgdG8gdGhlIG9uZXMgdXNlZCBieSB0aGUga2VybmVsLiAgVGhlcmVmb3JlLCB0aGVzZSB0cmFtcG9saW5lcyBhcmUKKysgICBzdXBwb3J0ZWQgdG9vLiAgKi8KKysKKysjZGVmaW5lIE1PVlcobikJICgweDkzMDB8KChuKS0yKSkJLyogTW92ZSBtZW0gd29yZCBhdCBQQytuIHRvIFIzICovCisrI2RlZmluZSBUUkFQMTYJIDB4YzMxMAkJCS8qIFN5c2NhbGwgdy9ubyBhcmdzIChOUiBpbiBSMykgKi8KKysjZGVmaW5lIE9SX1IwX1IwIDB4MjAwYgkJCS8qIG9yIHIwLHIwIChpbnNlcnQgdG8gYXZvaWQgaGFyZHdhcmUgYnVnKSAqLworKworKyNkZWZpbmUgTElOVVhfU0lHVFJBTVBfSU5TTjAJTU9WVyg3KQkJLyogTW92ZSBtZW0gd29yZCBhdCBQQys3IHRvIFIzICovCisrI2RlZmluZSBMSU5VWF9TSUdUUkFNUF9JTlNOMQlUUkFQMTYJCS8qIFN5c2NhbGwgdy9ubyBhcmdzIChOUiBpbiBSMykgKi8KKysjZGVmaW5lIExJTlVYX1NJR1RSQU1QX0lOU04yCU9SX1IwX1IwCS8qIG9yIHIwLHIwIChpbnNlcnQgdG8gYXZvaWQgaGFyZHdhcmUgYnVnKSAqLworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBsaW51eF9zaWd0cmFtcF9jb2RlW10gPQorK3sKKysgIExJTlVYX1NJR1RSQU1QX0lOU04wLAorKyAgTElOVVhfU0lHVFJBTVBfSU5TTjEsCisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1NJR1RSQU1QX0lOU04yLAorKyAgX19OUl9zaWdyZXR1cm4KKyt9OworKworKyNkZWZpbmUgTElOVVhfU0lHVFJBTVBfTEVOIChzaXplb2YgbGludXhfc2lndHJhbXBfY29kZSkKKysKKysvKiBJZiBQQyBpcyBpbiBhIHNpZ3RyYW1wIHJvdXRpbmUsIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgc3RhcnQgb2YKKysgICB0aGUgcm91dGluZS4gIE90aGVyd2lzZSwgcmV0dXJuIDAuICAqLworKworK3N0YXRpYyBDT1JFX0FERFIKKytzaF9saW51eF9zaWd0cmFtcF9zdGFydCAoc3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUpCisreworKyAgQ09SRV9BRERSIHBjID0gZ2V0X2ZyYW1lX3BjIChuZXh0X2ZyYW1lKTsKKysgIGdkYl9ieXRlIGJ1ZltMSU5VWF9TSUdUUkFNUF9MRU5dOworKworKyAgLyogV2Ugb25seSByZWNvZ25pemUgYSBzaWduYWwgdHJhbXBvbGluZSBpZiBQQyBpcyBhdCB0aGUgc3RhcnQgb2YKKysgICAgIG9uZSBvZiB0aGUgdGhyZWUgaW5zdHJ1Y3Rpb25zLiAgV2Ugb3B0aW1pemUgZm9yIGZpbmRpbmcgdGhlIFBDIGF0CisrICAgICB0aGUgc3RhcnQsIGFzIHdpbGwgYmUgdGhlIGNhc2Ugd2hlbiB0aGUgdHJhbXBvbGluZSBpcyBub3QgdGhlCisrICAgICBmaXJzdCBmcmFtZSBvbiB0aGUgc3RhY2suICBXZSBhc3N1bWUgdGhhdCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUKKysgICAgIFBDIGlzIG5vdCBhdCB0aGUgc3RhcnQgb2YgdGhlIGluc3RydWN0aW9uIHNlcXVlbmNlLCB0aGVyZSB3aWxsIGJlCisrICAgICBhIGZldyB0cmFpbGluZyByZWFkYWJsZSBieXRlcyBvbiB0aGUgc3RhY2suICAqLworKworKyAgaWYgKCFzYWZlX2ZyYW1lX3Vud2luZF9tZW1vcnkgKG5leHRfZnJhbWUsIHBjLCBidWYsIExJTlVYX1NJR1RSQU1QX0xFTikpCisrICAgIHJldHVybiAwOworKworKyAgaWYgKGJ1ZlswXSAhPSBMSU5VWF9TSUdUUkFNUF9JTlNOMCkKKysgICAgeworKyAgICAgIGlmIChidWZbMF0gIT0gTElOVVhfU0lHVFJBTVBfSU5TTjEpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgICBwYyAtPSAyOworKworKyAgICAgIGlmICghc2FmZV9mcmFtZV91bndpbmRfbWVtb3J5IChuZXh0X2ZyYW1lLCBwYywgYnVmLCBMSU5VWF9TSUdUUkFNUF9MRU4pKQorKwlyZXR1cm4gMDsKKysgICAgfQorKworKyAgaWYgKG1lbWNtcCAoYnVmLCBsaW51eF9zaWd0cmFtcF9jb2RlLCBMSU5VWF9TSUdUUkFNUF9MRU4pICE9IDApCisrICAgIHJldHVybiAwOworKworKyAgcmV0dXJuIHBjOworK30KKysKKysvKiBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIHNhbWUgZm9yIFJUIHNpZ25hbHMuICBIZXJlIHRoZSBpbnN0cnVjdGlvbgorKyAgIHNlcXVlbmNlIGlzCisrICAgICAgIG1vdi53ICAxZixyMworKyAgICAgICB0cmFwYSAgIzE2CisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAxOiAud29yZCAgX19OUl9ydF9zaWdyZXR1cm4KKysgICBvciAweDkzMDUgMHhjMzEwIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgwMGFkLgorKworKyAgIFRoZSBlZmZlY3QgaXMgdG8gY2FsbCB0aGUgc3lzdGVtIGNhbGwgcnRfc2lncmV0dXJuLiAgKi8KKysKKysjZGVmaW5lIExJTlVYX1JUX1NJR1RSQU1QX0lOU04wCQlNT1ZXKDcpCQkvKiBNb3ZlIG1lbSB3b3JkIGF0IFBDKzcgdG8gUjMgKi8KKysjZGVmaW5lIExJTlVYX1JUX1NJR1RSQU1QX0lOU04xCQlUUkFQMTYJCS8qIFN5c2NhbGwgdy9ubyBhcmdzIChOUiBpbiBSMykgKi8KKysjZGVmaW5lIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yCQlPUl9SMF9SMAkvKiBvciByMCxyMCAoaW5zZXJ0IHRvIGF2b2lkIGhhcmR3YXJlIGJ1ZykgKi8KKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGludXhfcnRfc2lndHJhbXBfY29kZVtdID0KKyt7CisrICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMCwKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04xLAorKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMiwKKysgIF9fTlJfcnRfc2lncmV0dXJuCisrfTsKKysKKysjZGVmaW5lIExJTlVYX1JUX1NJR1RSQU1QX0xFTiAoc2l6ZW9mIGxpbnV4X3J0X3NpZ3RyYW1wX2NvZGUpCisrCisrLyogSWYgUEMgaXMgaW4gYSBSVCBzaWd0cmFtcCByb3V0aW5lLCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0CisrICAgb2YgdGhlIHJvdXRpbmUuICBPdGhlcndpc2UsIHJldHVybiAwLiAgKi8KKysKKytzdGF0aWMgQ09SRV9BRERSCisrc2hfbGludXhfcnRfc2lndHJhbXBfc3RhcnQgKHN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2ZyYW1lKQorK3sKKysgIENPUkVfQUREUiBwYyA9IGdldF9mcmFtZV9wYyAobmV4dF9mcmFtZSk7CisrICBnZGJfYnl0ZSBidWZbTElOVVhfUlRfU0lHVFJBTVBfTEVOXTsKKysKKysgIC8qIFdlIG9ubHkgcmVjb2duaXplIGEgc2lnbmFsIHRyYW1wb2xpbmUgaWYgUEMgaXMgYXQgdGhlIHN0YXJ0IG9mCisrICAgICBvbmUgb2YgdGhlIHR3byBpbnN0cnVjdGlvbnMuICBXZSBvcHRpbWl6ZSBmb3IgZmluZGluZyB0aGUgUEMgYXQKKysgICAgIHRoZSBzdGFydCwgYXMgd2lsbCBiZSB0aGUgY2FzZSB3aGVuIHRoZSB0cmFtcG9saW5lIGlzIG5vdCB0aGUKKysgICAgIGZpcnN0IGZyYW1lIG9uIHRoZSBzdGFjay4gIFdlIGFzc3VtZSB0aGF0IGluIHRoZSBjYXNlIHdoZXJlIHRoZQorKyAgICAgUEMgaXMgbm90IGF0IHRoZSBzdGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UsIHRoZXJlIHdpbGwgYmUKKysgICAgIGEgZmV3IHRyYWlsaW5nIHJlYWRhYmxlIGJ5dGVzIG9uIHRoZSBzdGFjay4gICovCisrCisrICBpZiAoIXNhZmVfZnJhbWVfdW53aW5kX21lbW9yeSAobmV4dF9mcmFtZSwgcGMsIGJ1ZiwgTElOVVhfUlRfU0lHVFJBTVBfTEVOKSkKKysgICAgcmV0dXJuIDA7CisrCisrICBpZiAoYnVmWzBdICE9IExJTlVYX1JUX1NJR1RSQU1QX0lOU04wKQorKyAgICB7CisrICAgICAgaWYgKGJ1ZlswXSAhPSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMSkKKysJcmV0dXJuIDA7CisrCisrICAgICAgcGMgLT0gMjsKKysKKysgICAgICBpZiAoIXNhZmVfZnJhbWVfdW53aW5kX21lbW9yeSAobmV4dF9mcmFtZSwgcGMsIGJ1ZiwKKysJCQkJICAgICBMSU5VWF9SVF9TSUdUUkFNUF9MRU4pKQorKwlyZXR1cm4gMDsKKysgICAgfQorKworKyAgaWYgKG1lbWNtcCAoYnVmLCBsaW51eF9ydF9zaWd0cmFtcF9jb2RlLCBMSU5VWF9SVF9TSUdUUkFNUF9MRU4pICE9IDApCisrICAgIHJldHVybiAwOworKworKyAgcmV0dXJuIHBjOworK30KKysKKysvKiBSZXR1cm4gd2hldGhlciBQQyBpcyBpbiBhIEdOVS9MaW51eCBzaWd0cmFtcCByb3V0aW5lLiAgKi8KKysKKytzdGF0aWMgaW50Cisrc2hfbGludXhfc2lndHJhbXBfcCAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUpCisreworKyAgQ09SRV9BRERSIHBjID0gZ2V0X2ZyYW1lX3BjICh0aGlzX2ZyYW1lKTsKKysgIGNoYXIgKm5hbWU7CisrCisrICBmaW5kX3BjX3BhcnRpYWxfZnVuY3Rpb24gKHBjLCAmbmFtZSwgTlVMTCwgTlVMTCk7CisrCisrICAvKiBJZiB3ZSBoYXZlIE5BTUUsIHdlIGNhbiBvcHRpbWl6ZSB0aGUgc2VhcmNoLiAgVGhlIHRyYW1wb2xpbmVzIGFyZQorKyAgICAgbmFtZWQgX19yZXN0b3JlIGFuZCBfX3Jlc3RvcmVfcnQuICBIb3dldmVyLCB0aGV5IGFyZW4ndCBkeW5hbWljYWxseQorKyAgICAgZXhwb3J0ZWQgZnJvbSB0aGUgc2hhcmVkIEMgbGlicmFyeSwgc28gdGhlIHRyYW1wb2xpbmUgbWF5IGFwcGVhciB0bworKyAgICAgYmUgcGFydCBvZiB0aGUgcHJlY2VkaW5nIGZ1bmN0aW9uLiAgVGhpcyBzaG91bGQgYWx3YXlzIGJlIHNpZ2FjdGlvbiwKKysgICAgIF9fc2lnYWN0aW9uLCBvciBfX2xpYmNfc2lnYWN0aW9uIChhbGwgYWxpYXNlcyB0byB0aGUgc2FtZSBmdW5jdGlvbikuICAqLworKyAgaWYgKG5hbWUgPT0gTlVMTCB8fCBzdHJzdHIgKG5hbWUsICJzaWdhY3Rpb24iKSAhPSBOVUxMKQorKyAgICByZXR1cm4gKHNoX2xpbnV4X3NpZ3RyYW1wX3N0YXJ0ICh0aGlzX2ZyYW1lKSAhPSAwCisrCSAgICB8fCBzaF9saW51eF9ydF9zaWd0cmFtcF9zdGFydCAodGhpc19mcmFtZSkgIT0gMCk7CisrCisrICByZXR1cm4gKHN0cmNtcCAoIl9fcmVzdG9yZSIsIG5hbWUpID09IDAKKysJICB8fCBzdHJjbXAgKCJfX3Jlc3RvcmVfcnQiLCBuYW1lKSA9PSAwKTsKKyt9CisrCisrLyogT2Zmc2V0IHRvIHN0cnVjdCBzaWdjb250ZXh0IGluIHVjb250ZXh0LCBmcm9tIDxhc20vdWNvbnRleHQuaD4uICAqLworKyNkZWZpbmUgU0hfTElOVVhfVUNPTlRFWFRfU0lHQ09OVEVYVF9PRkZTRVQgMTIKKysKKysKKysvKiBBc3N1bWluZyBORVhUX0ZSQU1FIGlzIGEgZnJhbWUgZm9sbG93aW5nIGEgR05VL0xpbnV4IHNpZ3RyYW1wCisrICAgcm91dGluZSwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBhc3NvY2lhdGVkIHNpZ2NvbnRleHQgc3RydWN0dXJlLiAgKi8KKysKKytzdGF0aWMgQ09SRV9BRERSCisrc2hfbGludXhfc2lnY29udGV4dF9hZGRyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSkKKyt7CisrICBDT1JFX0FERFIgcGM7CisrICBDT1JFX0FERFIgc3A7CisrCisrICBzcCA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25lZCAodGhpc19mcmFtZSwgU1BfUkVHTlVNKTsKKysKKysgIHBjID0gc2hfbGludXhfc2lndHJhbXBfc3RhcnQgKHRoaXNfZnJhbWUpOworKyAgaWYgKHBjKQorKyAgICB7CisrICAgICAgcmV0dXJuIHNwOworKyAgICB9CisrCisrICBwYyA9IHNoX2xpbnV4X3J0X3NpZ3RyYW1wX3N0YXJ0ICh0aGlzX2ZyYW1lKTsKKysgIGlmIChwYykKKysgICAgeworKyAgICAgIENPUkVfQUREUiB1Y29udGV4dF9hZGRyOworKworKyAgICAgIC8qIFRoZSBzaWdjb250ZXh0IHN0cnVjdHVyZSBpcyBwYXJ0IG9mIHRoZSB1c2VyIGNvbnRleHQuICBBCisrCSBwb2ludGVyIHRvIHRoZSB1c2VyIGNvbnRleHQgaXMgcGFzc2VkIGFzIHRoZSB0aGlyZCBhcmd1bWVudAorKwkgdG8gdGhlIHNpZ25hbCBoYW5kbGVyLiAgKi8KKysgICAgICB1Y29udGV4dF9hZGRyID0gZ2V0X2ZyYW1lX3JlZ2lzdGVyX3Vuc2lnbmVkICh0aGlzX2ZyYW1lLCBBUkcwX1JFR05VTSsyKTsKKysgICAgICByZXR1cm4gdWNvbnRleHRfYWRkciArIFNIX0xJTlVYX1VDT05URVhUX1NJR0NPTlRFWFRfT0ZGU0VUOworKyAgICB9CisrCisrICBlcnJvciAoIkNvdWxkbid0IHJlY29nbml6ZSBzaWduYWwgdHJhbXBvbGluZS4iKTsKKysgIHJldHVybiAwOworK30KKysKKysvKiBTaWduYWwgdHJhbXBvbGluZXMuICAqLworK2V4dGVybiBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKnNoX2FsbG9jX2ZyYW1lX2NhY2hlICh2b2lkKTsKKysKKytzdGF0aWMgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICoKKytzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9jYWNoZSAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlKQorK3sKKysgIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqY2FjaGU7CisrICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZXRfY3VycmVudF9hcmNoICgpKTsKKysgIENPUkVfQUREUiBzaWdjb250ZXh0X2FkZHI7CisrCisrICBpZiAoKnRoaXNfY2FjaGUpCisrICAgIHJldHVybiAqdGhpc19jYWNoZTsKKysKKysgIGNhY2hlID0gc2hfYWxsb2NfZnJhbWVfY2FjaGUgKCk7CisrCisrICBjYWNoZS0+YmFzZSA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25lZCAodGhpc19mcmFtZSwgU1BfUkVHTlVNKTsKKysgIHNpZ2NvbnRleHRfYWRkciA9IHRkZXAtPnNpZ2NvbnRleHRfYWRkciAodGhpc19mcmFtZSk7CisrICBpZiAodGRlcC0+c2NfcmVnX29mZnNldCkKKysgICAgeworKyAgICAgIGludCBpOworKworKyAgICAgIGdkYl9hc3NlcnQgKHRkZXAtPnNjX251bV9yZWdzIDw9IFNIX05VTV9SRUdTKTsKKysKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgdGRlcC0+c2NfbnVtX3JlZ3M7IGkrKykKKysJaWYgKHRkZXAtPnNjX3JlZ19vZmZzZXRbaV0gIT0gLTEpCisrCSAgY2FjaGUtPnNhdmVkX3JlZ3NbaV0gPSBzaWdjb250ZXh0X2FkZHIgKyB0ZGVwLT5zY19yZWdfb2Zmc2V0W2ldOworKyAgICB9CisrCisrICAqdGhpc19jYWNoZSA9IGNhY2hlOworKyAgcmV0dXJuIGNhY2hlOworK30KKysKKytzdGF0aWMgdm9pZAorK3NoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3RoaXNfaWQgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSwKKysJCQkgICAgIHN0cnVjdCBmcmFtZV9pZCAqdGhpc19pZCkKKyt7CisrICBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKmNhY2hlID0KKysgICAgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfY2FjaGUgKHRoaXNfZnJhbWUsIHRoaXNfY2FjaGUpOworKworKyAgKCp0aGlzX2lkKSA9IGZyYW1lX2lkX2J1aWxkIChjYWNoZS0+YmFzZSArIDY0LCBjYWNoZS0+cGMpOworK30KKysKKytleHRlcm4gc3RydWN0IHZhbHVlICogc2hfZnJhbWVfcHJldl9yZWdpc3RlciAoKTsKKytzdGF0aWMgc3RydWN0IHZhbHVlICoKKytzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9wcmV2X3JlZ2lzdGVyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwKKysgICAgICAgICAgICAgICAgICAgdm9pZCAqKnRoaXNfY2FjaGUsIGludCByZWdudW0pCisreworKyAgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfY2FjaGUgKHRoaXNfZnJhbWUsIHRoaXNfY2FjaGUpOworKworKyAgcmV0dXJuIHNoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHRoaXNfZnJhbWUsIHRoaXNfY2FjaGUsIHJlZ251bSk7CisrfQorKworK3N0YXRpYyBpbnQKKytzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9zbmlmZmVyIChjb25zdCBzdHJ1Y3QgZnJhbWVfdW53aW5kICpzZWxmLAorKyAgICAgICAgICAgICAgICAgc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsCisrICAgICAgICAgICAgICAgICB2b2lkICoqdGhpc19wcm9sb2d1ZV9jYWNoZSkKKyt7CisrICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZXRfZnJhbWVfYXJjaCAodGhpc19mcmFtZSkpOworKworKyAgLyogV2Ugc2hvdWxkbid0IGV2ZW4gYm90aGVyIGlmIHdlIGRvbid0IGhhdmUgYSBzaWdjb250ZXh0X2FkZHIKKysgICAgIGhhbmRsZXIuICAqLworKyAgaWYgKHRkZXAtPnNpZ2NvbnRleHRfYWRkciA9PSBOVUxMKQorKyAgICByZXR1cm4gMDsKKysKKysgIGlmICh0ZGVwLT5zaWd0cmFtcF9wICE9IE5VTEwpCisrICAgIHsKKysgICAgICBpZiAodGRlcC0+c2lndHJhbXBfcCAodGhpc19mcmFtZSkpCisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBmcmFtZV91bndpbmQgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfdW53aW5kID0KKyt7CisrICBTSUdUUkFNUF9GUkFNRSwKKysgIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3RoaXNfaWQsCisrICBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9wcmV2X3JlZ2lzdGVyLAorKyAgTlVMTCwKKysgIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3NuaWZmZXIKKyt9OworKworKy8qIFN1cHBseSByZWdpc3RlciBSRUdOVU0gZnJvbSB0aGUgYnVmZmVyIHNwZWNpZmllZCBieSBHUkVHUyBhbmQgTEVOCisrICAgaW4gdGhlIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBzZXQgUkVHU0VUIHRvIHJlZ2lzdGVyIGNhY2hlCisrICAgUkVHQ0FDSEUuICBJZiBSRUdOVU0gaXMgLTEsIGRvIHRoaXMgZm9yIGFsbCByZWdpc3RlcnMgaW4gUkVHU0VULiAgKi8KKysKKyt2b2lkCisrc2hfc3VwcGx5X2dyZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKysgICAgICAgICAgICAgaW50IHJlZ251bSwgY29uc3Qgdm9pZCAqZ3JlZ3MsIHNpemVfdCBsZW4pCisreworKyAgY29uc3Qgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAocmVnc2V0LT5hcmNoKTsKKysgIGNvbnN0IGNoYXIgKnJlZ3MgPSBncmVnczsKKysgIGludCBpOworKworKyAgZ2RiX2Fzc2VydCAobGVuID09IHRkZXAtPnNpemVvZl9ncmVnc2V0KTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCB0ZGVwLT5ncmVnc2V0X251bV9yZWdzOyBpKyspCisrICAgIHsKKysgICAgICBpZiAoKHJlZ251bSA9PSBpIHx8IHJlZ251bSA9PSAtMSkKKysgICAgICAmJiB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXRbaV0gIT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKHJlZ2NhY2hlLCBpLCByZWdzICsgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0W2ldKTsKKysgICAgfQorK30KKysKKysvKiBDb2xsZWN0IHJlZ2lzdGVyIFJFR05VTSBmcm9tIHRoZSByZWdpc3RlciBjYWNoZSBSRUdDQUNIRSBhbmQgc3RvcmUKKysgICBpdCBpbiB0aGUgYnVmZmVyIHNwZWNpZmllZCBieSBHUkVHUyBhbmQgTEVOIGFzIGRlc2NyaWJlZCBieSB0aGUKKysgICBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgc2V0IFJFR1NFVC4gIElmIFJFR05VTSBpcyAtMSwgZG8gdGhpcyBmb3IKKysgICBhbGwgcmVnaXN0ZXJzIGluIFJFR1NFVC4gICovCisrCisrdm9pZAorK3NoX2NvbGxlY3RfZ3JlZ3NldCAoY29uc3Qgc3RydWN0IHJlZ3NldCAqcmVnc2V0LAorKyAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKysgICAgICAgICAgICAgIGludCByZWdudW0sIHZvaWQgKmdyZWdzLCBzaXplX3QgbGVuKQorK3sKKysgIGNvbnN0IHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKHJlZ3NldC0+YXJjaCk7CisrICBjaGFyICpyZWdzID0gZ3JlZ3M7CisrICBpbnQgaTsKKysKKysgIGdkYl9hc3NlcnQgKGxlbiA9PSB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCk7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgdGRlcC0+Z3JlZ3NldF9udW1fcmVnczsgaSsrKQorKyAgICB7CisrICAgICAgaWYgKChyZWdudW0gPT0gaSB8fCByZWdudW0gPT0gLTEpCisrICAgICAgJiYgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0W2ldICE9IC0xKQorKyAgICByZWdjYWNoZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIGksIHJlZ3MgKyB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXRbaV0pOworKyAgICB9CisrfQorKworKy8qIFN1cHBseSByZWdpc3RlciBSRUdOVU0gZnJvbSB0aGUgYnVmZmVyIHNwZWNpZmllZCBieSBGUFJFR1MgYW5kIExFTgorKyAgIGluIHRoZSBmbG9hdGluZy1wb2ludCByZWdpc3RlciBzZXQgUkVHU0VUIHRvIHJlZ2lzdGVyIGNhY2hlCisrICAgUkVHQ0FDSEUuICBJZiBSRUdOVU0gaXMgLTEsIGRvIHRoaXMgZm9yIGFsbCByZWdpc3RlcnMgaW4gUkVHU0VULiAgKi8KKysKKytzdGF0aWMgdm9pZAorK3NoX3N1cHBseV9mcHJlZ3NldCAoY29uc3Qgc3RydWN0IHJlZ3NldCAqcmVnc2V0LCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorKyAgICAgICAgICAgICAgaW50IHJlZ251bSwgY29uc3Qgdm9pZCAqZnByZWdzLCBzaXplX3QgbGVuKQorK3sKKysgIGNvbnN0IHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKHJlZ3NldC0+YXJjaCk7CisrICBjb25zdCBjaGFyICpyZWdzID0gZnByZWdzOworKyAgaW50IGk7CisrCisrICBnZGJfYXNzZXJ0IChsZW4gPT0gdGRlcC0+c2l6ZW9mX2ZwcmVnc2V0KTsKKysgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorKyAgICB7CisrICAgICAgaWYgKHJlZ251bSA9PSBpKzI1IHx8IHJlZ251bSA9PSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X3N1cHBseSAocmVnY2FjaGUsIGkrMjUsIHJlZ3MgKyBpKjQpOworKyAgICB9CisrICBpZiAocmVnbnVtID09IEZQU0NSX1JFR05VTSB8fCByZWdudW0gPT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKHJlZ2NhY2hlLCBGUFNDUl9SRUdOVU0sIHJlZ3MgKyAzMio0KTsKKysgIGlmIChyZWdudW0gPT0gRlBVTF9SRUdOVU0gfHwgcmVnbnVtID09IC0xKQorKyAgICByZWdjYWNoZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgRlBVTF9SRUdOVU0sIHJlZ3MgKyAzMyo0KTsKKyt9CisrCisrLyogQ29sbGVjdCByZWdpc3RlciBSRUdOVU0gZnJvbSB0aGUgcmVnaXN0ZXIgY2FjaGUgUkVHQ0FDSEUgYW5kIHN0b3JlCisrICAgaXQgaW4gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgRlBSRUdTIGFuZCBMRU4gYXMgZGVzY3JpYmVkIGJ5IHRoZQorKyAgIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIHNldCBSRUdTRVQuICBJZiBSRUdOVU0gaXMgLTEsIGRvIHRoaXMgZm9yCisrICAgYWxsIHJlZ2lzdGVycyBpbiBSRUdTRVQuICAqLworKworK3N0YXRpYyB2b2lkCisrc2hfY29sbGVjdF9mcHJlZ3NldCAoY29uc3Qgc3RydWN0IHJlZ3NldCAqcmVnc2V0LAorKyAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisrICAgICAgICAgICAgICAgaW50IHJlZ251bSwgdm9pZCAqZnByZWdzLCBzaXplX3QgbGVuKQorK3sKKysgIGNvbnN0IHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKHJlZ3NldC0+YXJjaCk7CisrICBjaGFyICpyZWdzID0gZnByZWdzOworKyAgaW50IGk7CisrCisrICBnZGJfYXNzZXJ0IChsZW4gPT0gdGRlcC0+c2l6ZW9mX2ZwcmVnc2V0KTsKKysgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorKyAgICB7CisrICAgICAgaWYgKHJlZ251bSA9PSBpKzI1IHx8IHJlZ251bSA9PSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QgKHJlZ2NhY2hlLCBpKzI1LCByZWdzICsgaSo0KTsKKysgICAgfQorKyAgaWYgKHJlZ251bSA9PSBGUFNDUl9SRUdOVU0gfHwgcmVnbnVtID09IC0xKQorKyAgICByZWdjYWNoZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIEZQU0NSX1JFR05VTSwgcmVncyArIDMyKjQpOworKyAgaWYgKHJlZ251bSA9PSBGUFVMX1JFR05VTSB8fCByZWdudW0gPT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19jb2xsZWN0IChyZWdjYWNoZSwgRlBVTF9SRUdOVU0sIHJlZ3MgKyAzMyo0KTsKKyt9CisrCisrLyogUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSByZWdpc3RlciBzZXQgZm9yIHRoZSBjb3JlIHNlY3Rpb24gaWRlbnRpZmllZAorKyAgIGJ5IFNFQ1RfTkFNRSBhbmQgU0VDVF9TSVpFLiAgKi8KKysKKytjb25zdCBzdHJ1Y3QgcmVnc2V0ICoKKytzaF9saW51eF9yZWdzZXRfZnJvbV9jb3JlX3NlY3Rpb24gKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzZWN0X25hbWUsIHNpemVfdCBzZWN0X3NpemUpCisreworKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2RiYXJjaCk7CisrCisrICBpZiAoc3RyY21wIChzZWN0X25hbWUsICIucmVnIikgPT0gMCAmJiBzZWN0X3NpemUgPT0gdGRlcC0+c2l6ZW9mX2dyZWdzZXQpCisrICAgIHsKKysgICAgICBpZiAodGRlcC0+Z3JlZ3NldCA9PSBOVUxMKQorKyAgICB0ZGVwLT5ncmVnc2V0ID0gcmVnc2V0X2FsbG9jIChnZGJhcmNoLCBzaF9zdXBwbHlfZ3JlZ3NldCwKKysgICAgICAgICAgICAgICAgICAgICAgc2hfY29sbGVjdF9ncmVnc2V0KTsKKysgICAgICByZXR1cm4gdGRlcC0+Z3JlZ3NldDsKKysgICAgfQorKworKyAgaWYgKChzdHJjbXAgKHNlY3RfbmFtZSwgIi5yZWcyIikgPT0gMCAmJiBzZWN0X3NpemUgPT0gdGRlcC0+c2l6ZW9mX2ZwcmVnc2V0KSkKKysgICAgeworKyAgICAgIGlmICh0ZGVwLT5mcHJlZ3NldCA9PSBOVUxMKQorKyAgICB0ZGVwLT5mcHJlZ3NldCA9IHJlZ3NldF9hbGxvYyAoZ2RiYXJjaCwgc2hfc3VwcGx5X2ZwcmVnc2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgc2hfY29sbGVjdF9mcHJlZ3NldCk7CisrICAgICAgcmV0dXJuIHRkZXAtPmZwcmVnc2V0OworKyAgICB9CisrCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrLyogVGhlIHJlZ2lzdGVyIHNldHMgdXNlZCBpbiBHTlUvTGludXggRUxGIGNvcmUtZHVtcHMgYXJlIGlkZW50aWNhbCB0bworKyAgIHRoZSByZWdpc3RlciBzZXRzIGluIGBzdHJ1Y3QgdXNlcicgdGhhdCBhcmUgdXNlZCBmb3IgYS5vdXQKKysgICBjb3JlLWR1bXBzLiAgVGhlc2UgYXJlIGFsc28gdXNlZCBieSBwdHJhY2UoMikuICBUaGUgY29ycmVzcG9uZGluZworKyAgIHR5cGVzIGFyZSBgZWxmX2dyZWdzZXRfdCcgZm9yIHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzICh3aXRoCisrICAgYGVsZl9ncmVnX3QnIHRoZSB0eXBlIG9mIGEgc2luZ2xlIEdQIHJlZ2lzdGVyKSBhbmQgYGVsZl9mcHJlZ3NldF90JworKyAgIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLgorKworKyAgIFRob3NlIHR5cGVzIHVzZWQgdG8gYmUgYXZhaWxhYmxlIHVuZGVyIHRoZSBuYW1lcyBgZ3JlZ3NldF90JyBhbmQKKysgICBgZnByZWdzZXRfdCcgdG9vLCBhbmQgR0RCIHVzZWQgdGhvc2UgbmFtZXMgaW4gdGhlIHBhc3QuICBCdXQgdGhvc2UKKysgICBuYW1lcyBhcmUgbm93IHVzZWQgZm9yIHRoZSByZWdpc3RlciBzZXRzIHVzZWQgaW4gdGhlIGBtY29udGV4dF90JworKyAgIHR5cGUsIHdoaWNoIGhhdmUgYSBkaWZmZXJlbnQgc2l6ZSBhbmQgbGF5b3V0LiAgKi8KKysKKysvKiBNYXBwaW5nIGJldHdlZW4gdGhlIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMgaW4gYHN0cnVjdCB1c2VyJworKyAgIGZvcm1hdCBhbmQgR0RCJ3MgcmVnaXN0ZXIgY2FjaGUgbGF5b3V0LiAgKi8KKysKKysvKiBGcm9tIDxzeXMvcmVnLmg+LiAgKi8KKytzdGF0aWMgaW50IHNoX2xpbnV4X2dyZWdzZXRfcmVnX29mZnNldFtdID0KKyt7CisrIDAsCTQsCTgsCTEyLAkxNiwJMjAsCTI0LAkyOCwKKysgMzIsCTM2LAk0MCwJNDQsCTQ4LAk1MiwJNTYsCTYwLAorKworKyBSRUdfUEMqNCwgICBSRUdfUFIqNCwgICBSRUdfR0JSKjQsICAtMSwKKysgUkVHX01BQ0gqNCwgUkVHX01BQ0wqNCwgUkVHX1NSKjQsCisrfTsKKysKKysvKiBNYXBwaW5nIGJldHdlZW4gdGhlIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMgaW4gYHN0cnVjdAorKyAgIHNpZ2NvbnRleHQnIGZvcm1hdCBhbmQgR0RCJ3MgcmVnaXN0ZXIgY2FjaGUgbGF5b3V0LiAgKi8KKysKKysvKiBGcm9tIDxhc20vc2lnY29udGV4dC5oPi4gICovCisrc3RhdGljIGludCBzaF9saW51eF9zY19yZWdfb2Zmc2V0W10gPQorK3sKKysgNCwJOCwJMTIsCTE2LAkyMCwJMjQsCTI4LAkzMiwKKysgMzYsCTQwLAk0NCwJNDgsCTUyLAk1NiwJNjAsCTY0LAorKyA2OCwJNzIsCTgwLAktMSwKKysgODQsCTg4LAk3NgorK307CisrCisgc3RhdGljIHZvaWQKKyBzaF9saW51eF9pbml0X2FiaSAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCkKKyB7CisrICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZGJhcmNoKTsKKysgIGJmZCBhYmZkOworKworKyAgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0ID0gc2hfbGludXhfZ3JlZ3NldF9yZWdfb2Zmc2V0OworKyAgdGRlcC0+Z3JlZ3NldF9udW1fcmVncyA9IEFSUkFZX1NJWkUgKHNoX2xpbnV4X2dyZWdzZXRfcmVnX29mZnNldCk7CisrICB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCA9IDIzICogNDsKKysKKysgIHRkZXAtPmpiX3BjX29mZnNldCA9IDMyOyAgICAgLyogRnJvbSA8Yml0cy9zZXRqbXAuaD4uICAqLworKworKyAgdGRlcC0+c2lndHJhbXBfcCA9IHNoX2xpbnV4X3NpZ3RyYW1wX3A7CisrICB0ZGVwLT5zaWdjb250ZXh0X2FkZHIgPSBzaF9saW51eF9zaWdjb250ZXh0X2FkZHI7CisrICB0ZGVwLT5zY19yZWdfb2Zmc2V0ID0gc2hfbGludXhfc2NfcmVnX29mZnNldDsKKysgIHRkZXAtPnNjX251bV9yZWdzID0gQVJSQVlfU0laRSAoc2hfbGludXhfc2NfcmVnX29mZnNldCk7CisrCisrICBmcmFtZV91bndpbmRfYXBwZW5kX3Vud2luZGVyKGdkYmFyY2gsICZzaF9saW51eF9zaWd0cmFtcF9mcmFtZV91bndpbmQpOworKworKyAgLyogSWYgd2UgaGF2ZSBhIHJlZ2lzdGVyIG1hcHBpbmcsIGVuYWJsZSB0aGUgZ2VuZXJpYyBjb3JlIGZpbGUKKysgICAgIHN1cHBvcnQsIHVubGVzcyBpdCBoYXMgYWxyZWFkeSBiZWVuIGVuYWJsZWQuICAqLworKyAgaWYgKHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldAorKyAgICAgICYmICFnZGJhcmNoX3JlZ3NldF9mcm9tX2NvcmVfc2VjdGlvbl9wIChnZGJhcmNoKSkKKysgICAgc2V0X2dkYmFyY2hfcmVnc2V0X2Zyb21fY29yZV9zZWN0aW9uIChnZGJhcmNoLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hfbGludXhfcmVnc2V0X2Zyb21fY29yZV9zZWN0aW9uKTsKKysKKyAgIGxpbnV4X2luaXRfYWJpIChpbmZvLCBnZGJhcmNoKTsKKyAKKyAgIC8qIEdOVS9MaW51eCB1c2VzIFNWUjQtc3R5bGUgc2hhcmVkIGxpYnJhcmllcy4gICovCitkaWZmIC0tZ2l0IGEvZ2RiL3NoLXRkZXAuYyBiL2dkYi9zaC10ZGVwLmMKK2luZGV4IDgyY2YyZjQuLmI0NDNlNDYgMTAwNjQ0CistLS0gYS9nZGIvc2gtdGRlcC5jCisrKysgYi9nZGIvc2gtdGRlcC5jCitAQCAtMjEsNiArMjEsOSBAQAorICAgIHNhY0BjeWdudXMuY29tLiAgKi8KKyAKKyAjaW5jbHVkZSAiZGVmcy5oIgorKyNpbmNsdWRlICJhcmNoLXV0aWxzLmgiCisrI2luY2x1ZGUgImNvbW1hbmQuaCIKKysjaW5jbHVkZSAiZHVtbXktZnJhbWUuaCIKKyAjaW5jbHVkZSAiZnJhbWUuaCIKKyAjaW5jbHVkZSAiZnJhbWUtYmFzZS5oIgorICNpbmNsdWRlICJmcmFtZS11bndpbmQuaCIKK0BAIC0zNSw2ICszOCw3IEBACisgI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKKyAjaW5jbHVkZSAiZmxvYXRmb3JtYXQuaCIKKyAjaW5jbHVkZSAicmVnY2FjaGUuaCIKKysjaW5jbHVkZSAicmVnc2V0LmgiCisgI2luY2x1ZGUgImRvdWJsZXN0LmgiCisgI2luY2x1ZGUgIm9zYWJpLmgiCisgI2luY2x1ZGUgInJlZ2dyb3Vwcy5oIgorQEAgLTY3LDIzICs3MSw2IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzaF9jY19lbnVtW10gPSB7CisgCisgc3RhdGljIGNvbnN0IGNoYXIgKnNoX2FjdGl2ZV9jYWxsaW5nX2NvbnZlbnRpb24gPSBzaF9jY19nY2M7CisgCistI2RlZmluZSBTSF9OVU1fUkVHUyA2NworLQorLXN0cnVjdCBzaF9mcmFtZV9jYWNoZQorLXsKKy0gIC8qIEJhc2UgYWRkcmVzcy4gICovCistICBDT1JFX0FERFIgYmFzZTsKKy0gIExPTkdFU1Qgc3Bfb2Zmc2V0OworLSAgQ09SRV9BRERSIHBjOworLQorLSAgLyogRmxhZyBzaG93aW5nIHRoYXQgYSBmcmFtZSBoYXMgYmVlbiBjcmVhdGVkIGluIHRoZSBwcm9sb2d1ZSBjb2RlLiAgKi8KKy0gIGludCB1c2VzX2ZwOworLQorLSAgLyogU2F2ZWQgcmVnaXN0ZXJzLiAgKi8KKy0gIENPUkVfQUREUiBzYXZlZF9yZWdzW1NIX05VTV9SRUdTXTsKKy0gIENPUkVfQUREUiBzYXZlZF9zcDsKKy19OworLQorIHN0YXRpYyBpbnQKKyBzaF9pc19yZW5lc2FzX2NhbGxpbmdfY29udmVudGlvbiAoc3RydWN0IHR5cGUgKmZ1bmNfdHlwZSkKKyB7CitAQCAtMTA0Myw3ICsxMDMwLDcgQEAgc2hfdHJlYXRfYXNfZmx0X3AgKHN0cnVjdCB0eXBlICp0eXBlKQorICAgICByZXR1cm4gMDsKKyAgIC8qIE90aGVyd2lzZSBpZiB0aGUgdHlwZSBvZiB0aGF0IG1lbWJlciBpcyBmbG9hdCwgdGhlIHdob2xlIHR5cGUgaXMKKyAgICAgIHRyZWF0ZWQgYXMgZmxvYXQuICAqLworLSAgaWYgKFRZUEVfQ09ERSAoVFlQRV9GSUVMRF9UWVBFICh0eXBlLCAwKSkgPT0gVFlQRV9DT0RFX0ZMVCkKKysgIGlmIChUWVBFX0NPREUgKGNoZWNrX3R5cGVkZWYgKFRZUEVfRklFTERfVFlQRSAodHlwZSwgMCkpKSA9PSBUWVBFX0NPREVfRkxUKQorICAgICByZXR1cm4gMTsKKyAgIC8qIE90aGVyd2lzZSBpdCdzIG5vdCB0cmVhdGVkIGFzIGZsb2F0LiAgKi8KKyAgIHJldHVybiAwOworQEAgLTEwOTMsNyArMTA4MCw3IEBAIHNoX3B1c2hfZHVtbXlfY2FsbF9mcHUgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorICAgICAgaW4gZm91ciByZWdpc3RlcnMgYXZhaWxhYmxlLiAgTG9vcCB0aHJ1IGFyZ3MgZnJvbSBmaXJzdCB0byBsYXN0LiAgKi8KKyAgIGZvciAoYXJnbnVtID0gMDsgYXJnbnVtIDwgbmFyZ3M7IGFyZ251bSsrKQorICAgICB7CistICAgICAgdHlwZSA9IHZhbHVlX3R5cGUgKGFyZ3NbYXJnbnVtXSk7CisrICAgICAgdHlwZSA9IGNoZWNrX3R5cGVkZWYgKHZhbHVlX3R5cGUgKGFyZ3NbYXJnbnVtXSkpOworICAgICAgIGxlbiA9IFRZUEVfTEVOR1RIICh0eXBlKTsKKyAgICAgICB2YWwgPSBzaF9qdXN0aWZ5X3ZhbHVlX2luX3JlZyAoZ2RiYXJjaCwgYXJnc1thcmdudW1dLCBsZW4pOworIAorQEAgLTE4MjEsNyArMTgwOCw3IEBAIHNoX2R3YXJmMl9mcmFtZV9pbml0X3JlZyAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIGludCByZWdudW0sCisgICAgIHJlZy0+aG93ID0gRFdBUkYyX0ZSQU1FX1JFR19VTkRFRklORUQ7CisgfQorIAorLXN0YXRpYyBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKgorK3N0cnVjdCBzaF9mcmFtZV9jYWNoZSAqCisgc2hfYWxsb2NfZnJhbWVfY2FjaGUgKHZvaWQpCisgeworICAgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpjYWNoZTsKK0BAIC0xODQ4LDcgKzE4MzUsNyBAQCBzaF9hbGxvY19mcmFtZV9jYWNoZSAodm9pZCkKKyAgIHJldHVybiBjYWNoZTsKKyB9CisgCistc3RhdGljIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqCisrc3RydWN0IHNoX2ZyYW1lX2NhY2hlICoKKyBzaF9mcmFtZV9jYWNoZSAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlKQorIHsKKyAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUpOworQEAgLTE5MTUsOSArMTkwMiw5IEBAIHNoX2ZyYW1lX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUpCisgICByZXR1cm4gY2FjaGU7CisgfQorIAorLXN0YXRpYyBzdHJ1Y3QgdmFsdWUgKgorLXNoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAorLQkJCXZvaWQgKip0aGlzX2NhY2hlLCBpbnQgcmVnbnVtKQorK3N0cnVjdCB2YWx1ZSAqCisrc2hfZnJhbWVfcHJldl9yZWdpc3RlciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlLAorKwkJCWludCByZWdudW0pCisgeworICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRfZnJhbWVfYXJjaCAodGhpc19mcmFtZSk7CisgICBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKmNhY2hlID0gc2hfZnJhbWVfY2FjaGUgKHRoaXNfZnJhbWUsIHRoaXNfY2FjaGUpOworQEAgLTE5MzEsNyArMTkxOCw3IEBAIHNoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAorICAgICAgdGhlIGN1cnJlbnQgZnJhbWUuICBGcm9iIHJlZ251bSBzbyB0aGF0IHdlIHB1bGwgdGhlIHZhbHVlIGZyb20KKyAgICAgIHRoZSBjb3JyZWN0IHBsYWNlLiAgKi8KKyAgIGlmIChyZWdudW0gPT0gZ2RiYXJjaF9wY19yZWdudW0gKGdkYmFyY2gpKQorLSAgICByZWdudW0gPSBQUl9SRUdOVU07CisrICAgIHJlZ251bSA9IFBSX1JFR05VTTsgLyogWFhYOiByZWFsbHk/ICovCisgCisgICBpZiAocmVnbnVtIDwgU0hfTlVNX1JFR1MgJiYgY2FjaGUtPnNhdmVkX3JlZ3NbcmVnbnVtXSAhPSAtMSkKKyAgICAgcmV0dXJuIGZyYW1lX3Vud2luZF9nb3RfbWVtb3J5ICh0aGlzX2ZyYW1lLCByZWdudW0sCitAQCAtMjIzNyw4ICsyMjI0LDggQEAgc2hfcmV0dXJuX2luX2ZpcnN0X2hpZGRlbl9wYXJhbV9wIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKKyBzdGF0aWMgc3RydWN0IGdkYmFyY2ggKgorIHNoX2dkYmFyY2hfaW5pdCAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICphcmNoZXMpCisgeworLSAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2g7CisgICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwOworKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2g7CisgCisgICAvKiBTSDUgaXMgaGFuZGxlZCBlbnRpcmVseSBpbiBzaDY0LXRkZXAuYy4gICovCisgICBpZiAoaW5mby5iZmRfYXJjaF9pbmZvLT5tYWNoID09IGJmZF9tYWNoX3NoNSkKK0BAIC0yMjU0LDYgKzIyNDEsMTggQEAgc2hfZ2RiYXJjaF9pbml0IChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVjdCBnZGJhcmNoX2xpc3QgKmFyY2hlcykKKyAgIHRkZXAgPSBYQ05FVyAoc3RydWN0IGdkYmFyY2hfdGRlcCk7CisgICBnZGJhcmNoID0gZ2RiYXJjaF9hbGxvYyAoJmluZm8sIHRkZXApOworIAorKyAgLyogR2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCisrICB0ZGVwLT5ncmVnc2V0ID0gTlVMTDsKKysgIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldCA9IE5VTEw7CisrICB0ZGVwLT5ncmVnc2V0X251bV9yZWdzID0gMjM7CisrICB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCA9IDA7CisrCisrICAvKiBGbG9hdGluZy1wb2ludCByZWdpc3RlcnMuICAqLworKyAgdGRlcC0+ZnByZWdzZXQgPSBOVUxMOworKyAgdGRlcC0+c2l6ZW9mX2ZwcmVnc2V0ID0gMzQqNDsKKysKKysgIHRkZXAtPmpiX3BjX29mZnNldCA9IC0xOworKworICAgc2V0X2dkYmFyY2hfc2hvcnRfYml0IChnZGJhcmNoLCAyICogVEFSR0VUX0NIQVJfQklUKTsKKyAgIHNldF9nZGJhcmNoX2ludF9iaXQgKGdkYmFyY2gsIDQgKiBUQVJHRVRfQ0hBUl9CSVQpOworICAgc2V0X2dkYmFyY2hfbG9uZ19iaXQgKGdkYmFyY2gsIDQgKiBUQVJHRVRfQ0hBUl9CSVQpOworQEAgLTI0MDQsMTAgKzI0MDMsMTEgQEAgc2hfZ2RiYXJjaF9pbml0IChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVjdCBnZGJhcmNoX2xpc3QgKmFyY2hlcykKKyAgICAgICBicmVhazsKKyAgICAgfQorIAorKyAgZHdhcmYyX2FwcGVuZF91bndpbmRlcnMgKGdkYmFyY2gpOworKworICAgLyogSG9vayBpbiBBQkktc3BlY2lmaWMgb3ZlcnJpZGVzLCBpZiB0aGV5IGhhdmUgYmVlbiByZWdpc3RlcmVkLiAgKi8KKyAgIGdkYmFyY2hfaW5pdF9vc2FiaSAoaW5mbywgZ2RiYXJjaCk7CisgCistICBkd2FyZjJfYXBwZW5kX3Vud2luZGVycyAoZ2RiYXJjaCk7CisgICBmcmFtZV91bndpbmRfYXBwZW5kX3Vud2luZGVyIChnZGJhcmNoLCAmc2hfc3R1Yl91bndpbmQpOworICAgZnJhbWVfdW53aW5kX2FwcGVuZF91bndpbmRlciAoZ2RiYXJjaCwgJnNoX2ZyYW1lX3Vud2luZCk7CisgCitkaWZmIC0tZ2l0IGEvZ2RiL3NoLXRkZXAuaCBiL2dkYi9zaC10ZGVwLmgKK2luZGV4IGZjNjcxYTUuLjY5OWY1OWYgMTAwNjQ0CistLS0gYS9nZGIvc2gtdGRlcC5oCisrKysgYi9nZGIvc2gtdGRlcC5oCitAQCAtMjEsNiArMjEsMTIgQEAKKyAKKyAvKiBDb250cmlidXRlZCBieSBTdGV2ZSBDaGFtYmVybGFpbiBzYWNAY3lnbnVzLmNvbS4gICovCisgCisrc3RydWN0IGZyYW1lX2luZm87Cisrc3RydWN0IGdkYmFyY2g7Cisrc3RydWN0IHJlZ2dyb3VwOworK3N0cnVjdCByZWdzZXQ7Cisrc3RydWN0IHJlZ2NhY2hlOworKworIC8qIFJlZ2lzdGVycyBmb3IgYWxsIFNIIHZhcmlhbnRzLiAgVXNlZCBhbHNvIGJ5IHNoMy1yb20uYy4gICovCisgZW51bQorICAgeworQEAgLTI5LDYgKzM1LDcgQEAgZW51bQorICAgICBBUkcwX1JFR05VTSA9IDQsCisgICAgIEFSR0xBU1RfUkVHTlVNID0gNywKKyAgICAgRlBfUkVHTlVNID0gMTQsCisrICAgIFNQX1JFR05VTSA9IDE1LAorICAgICBQQ19SRUdOVU0gPSAxNiwKKyAgICAgUFJfUkVHTlVNID0gMTcsCisgICAgIEdCUl9SRUdOVU0gPSAxOCwKK0BAIC04MSw2ICs4OCwyNCBAQCBlbnVtCisgICAgIEZWMF9SRUdOVU0gPSA3NiwKKyAgICAgRlZfTEFTVF9SRUdOVU0gPSA3OQorICAgfTsKKysjZGVmaW5lIFNIX05VTV9SRUdTIDY3CisrCisrc3RydWN0IHNoX2ZyYW1lX2NhY2hlCisreworKyAgLyogQmFzZSBhZGRyZXNzLiAgKi8KKysgIENPUkVfQUREUiBiYXNlOworKyAgTE9OR0VTVCBzcF9vZmZzZXQ7CisrICBDT1JFX0FERFIgcGM7CisrCisrICAvKiBGbGFnIHNob3dpbmcgdGhhdCBhIGZyYW1lIGhhcyBiZWVuIGNyZWF0ZWQgaW4gdGhlIHByb2xvZ3VlIGNvZGUuICovCisrICBpbnQgdXNlc19mcDsKKysKKysgIC8qIFNhdmVkIHJlZ2lzdGVycy4gICovCisrICBDT1JFX0FERFIgc2F2ZWRfcmVnc1tTSF9OVU1fUkVHU107CisrICBDT1JFX0FERFIgc2F2ZWRfc3A7CisrfTsKKysKKytleHRlcm4gc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpzaF9mcmFtZV9jYWNoZSAoc3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlKTsKKyAKKyAvKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgYSByZWdpc3RlciBpbiBhIGNvcmUtZmlsZS4gICovCisgc3RydWN0IHNoX2NvcmVmaWxlX3JlZ21hcAorQEAgLTg5LDggKzExNCwzMiBAQCBzdHJ1Y3Qgc2hfY29yZWZpbGVfcmVnbWFwCisgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OworIH07CisgCisrLyogc2ggYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGluZm9ybWF0aW9uLiAgKi8KKyBzdHJ1Y3QgZ2RiYXJjaF90ZGVwCisgeworKyAgLyogR2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCisrICBzdHJ1Y3QgcmVnc2V0ICpncmVnc2V0OworKyAgaW50ICpncmVnc2V0X3JlZ19vZmZzZXQ7CisrICBpbnQgZ3JlZ3NldF9udW1fcmVnczsKKysgIHNpemVfdCBzaXplb2ZfZ3JlZ3NldDsKKysKKysgIC8qIEZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4gICovCisrICBzdHJ1Y3QgcmVnc2V0ICpmcHJlZ3NldDsKKysgIHNpemVfdCBzaXplb2ZfZnByZWdzZXQ7CisrCisrICAvKiBPZmZzZXQgb2Ygc2F2ZWQgUEMgaW4gam1wX2J1Zi4gICovCisrICBpbnQgamJfcGNfb2Zmc2V0OworKworKyAgLyogRGV0ZWN0IHNpZ3RyYW1wLiAgKi8KKysgIGludCAoKnNpZ3RyYW1wX3ApIChzdHJ1Y3QgZnJhbWVfaW5mbyAqKTsKKysKKysgIC8qIEdldCBhZGRyZXNzIG9mIHNpZ2NvbnRleHQgZm9yIHNpZ3RyYW1wLiAgKi8KKysgIENPUkVfQUREUiAoKnNpZ2NvbnRleHRfYWRkcikgKHN0cnVjdCBmcmFtZV9pbmZvICopOworKworKyAgLyogT2Zmc2V0IG9mIHJlZ2lzdGVycyBpbiBgc3RydWN0IHNpZ2NvbnRleHQnLiAgKi8KKysgIGludCAqc2NfcmVnX29mZnNldDsKKysgIGludCBzY19udW1fcmVnczsKKysKKyAgIC8qIE5vbi1OVUxMIHdoZW4gZGVidWdnaW5nIGZyb20gYSBjb3JlIGZpbGUuICBQcm92aWRlcyB0aGUgb2Zmc2V0CisgICAgICB3aGVyZSBlYWNoIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBpcyBzdG9yZWQgaW5zaWRlIHRoZSBhc3NvY2lhdGVkCisgICAgICBjb3JlIGZpbGUgc2VjdGlvbi4gICovCitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwCitpbmRleCA4ODU0YWYwLi5lZjQ0NjgyIDEwMDY0NAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5hc20vYXNtLXNvdXJjZS5leHAKK0BAIC0xMTMsNiArMTEzLDExIEBAIHN3aXRjaCAtZ2xvYiAtLSBbaXN0YXJnZXRdIHsKKyAgICAgICAgICAgICBhcHBlbmQgbGluay1mbGFncyAiIC1tIGVsZjMycHBjIgorICAgICAgICAgfQorICAgICB9CisrICAgICJzaCotbGludXgqIiB7CisrICAgICAgICBzZXQgYXNtLWFyY2ggc2gtbGludXgKKysgICAgICAgIHNldCBhc20tZmxhZ3MgIi1JJHtzcmNkaXJ9LyR7c3ViZGlyfSAtSSR7b2JqZGlyfS8ke3N1YmRpcn0iCisrCXNldCBkZWJ1Zy1mbGFncyAiLWdkd2FyZi0yIgorKyAgICB9CisgICAgICJzaCotKi0qIiB7CisgICAgICAgICBzZXQgYXNtLWFyY2ggc2gKKyAJc2V0IGRlYnVnLWZsYWdzICItZ2R3YXJmLTIiCitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL3NoLmluYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9zaC5pbmMKK2luZGV4IGE0YTVmYzUuLjg5ZWZlZDcgMTAwNjQ0CistLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5hc20vc2guaW5jCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5hc20vc2guaW5jCitAQCAtNDAsOSArNDAsOCBAQAorIAltb3YubCAgIC5MY29uc3RcQCxyMQorIAlicmEJLkxhZnRlcmNvbnN0XEAKKyAJbm9wCistCW5vcAorLS5MY29uc3RcQDoKKyAJLmFsaWduCTIKKysuTGNvbnN0XEA6CisgCS5sb25nCVxzdWJyCisgCS5hbGlnbgkxCisgLkxhZnRlcmNvbnN0XEA6CitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGExLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTEuYworaW5kZXggNDI0ZTFiOC4uMGRlMmU3YiAxMDA2NDQKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMS5jCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTEuYworQEAgLTEsNiArMSw5IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHNpZ25hbC5oPgorIAorKyNpZmRlZiBfX3NoX18KKysjZGVmaW5lIHNpZ25hbChhLGIpICAgIC8qIFNpZ25hbHMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHRhcmdldCAtIG1ha2UgdGhlbSBnbyBhd2F5ICovCisrI2VuZGlmCisgCisgdm9pZAorIGhhbmRsZV9VU1IxIChpbnQgc2lnKQorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMy5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGEzLmMKK2luZGV4IDQyNGUxYjguLjk1MmFhZjIgMTAwNjQ0CistLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTMuYworKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGEzLmMKK0BAIC0xLDYgKzEsMTAgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c2lnbmFsLmg+CisgCisrI2lmZGVmIF9fc2hfXworKyNkZWZpbmUgc2lnbmFsKGEsYikgICAgLyogU2lnbmFscyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdGFyZ2V0IC0gbWFrZSB0aGVtIGdvIGF3YXkgKi8KKysjZW5kaWYKKysKKyAKKyB2b2lkCisgaGFuZGxlX1VTUjEgKGludCBzaWcpCitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdhbGwuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYWxsLmMKK2luZGV4IDgxZjNiMDguLjE1NzRiMmQgMTAwNjQ0CistLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2FsbC5jCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2FsbC5jCitAQCAtMSw2ICsxLDkgQEAKKyAjaW5jbHVkZSA8c2lnbmFsLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorIAorKyNpZmRlZiBfX3NoX18KKysjZGVmaW5lIHNpZ25hbChhLGIpICAgIC8qIFNpZ25hbHMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHRhcmdldCAtIG1ha2UgdGhlbSBnbyBhd2F5ICovCisrI2VuZGlmCisgCisgLyogU2lnbmFsIGhhbmRsZXJzLCB3ZSBzZXQgYnJlYWtwb2ludHMgaW4gdGhlbSB0byBtYWtlIHN1cmUgdGhhdCB0aGUKKyAgICBzaWduYWxzIHJlYWxseSBnZXQgZGVsaXZlcmVkLiAgKi8KK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ25hbHMuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnbmFscy5jCitpbmRleCA3NTY2MDY4Li4xMjA1YTliIDEwMDY0NAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWduYWxzLmMKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnbmFscy5jCitAQCAtMyw2ICszLDEwIEBACisgI2luY2x1ZGUgPHNpZ25hbC5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAKKysjaWZkZWYgX19zaF9fCisrI2RlZmluZSBzaWduYWwoYSxiKSAgICAvKiBTaWduYWxzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB0YXJnZXQgLSBtYWtlIHRoZW0gZ28gYXdheSAqLworKyNkZWZpbmUgYWxhcm0oYSkgICAgICAgLyogRGl0dG8gZm9yIGFsYXJtKCkgKi8KKysjZW5kaWYKKyAKKyBzdGF0aWMgaW50IGNvdW50ID0gMDsKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi9maXgtZGV0ZWN0aW9uLW9mLTY0LWJpdC1QUEMtaW5mZXJpb3ItaW4tZ2Ric2VydmVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi9maXgtZGV0ZWN0aW9uLW9mLTY0LWJpdC1QUEMtaW5mZXJpb3ItaW4tZ2Ric2VydmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NTQzNTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiL2ZpeC1kZXRlY3Rpb24tb2YtNjQtYml0LVBQQy1pbmZlcmlvci1pbi1nZGJzZXJ2ZXIucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorRnJvbSA0ZmU2N2RiYWZhMWJlZTY3OWRhZWNjMTJlZDMwNjIxZDVjMjYwNWRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWWFvIFFpIDx5YW9AY29kZXNvdXJjZXJ5LmNvbT4KK0RhdGU6IE1vbiwgMTEgTWF5IDIwMTUgMTA6NTc6MzMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGRldGVjdGlvbiBvZiA2NC1iaXQgUFBDIGluZmVyaW9yIGluIGdkYnNlcnZlcgorCitJc3N1ZSAjMTY3NzUKKworKiBnZGJzZXJ2ZXIvbGludXgtcHBjLWxvdy5jIChwcGNfYXJjaF9zZXR1cCk6IENoYW5nZSB2YXJpYWJsZSBtc3IgdG8gdHlwZQorJ3Vuc2lnbmVkIGxvbmcnLiAgQ2hlY2sgYml0IDYzIG9yIGJpdCAzMSBpcyBvbmUuCisKK2h0dHBzOi8vc291cmNld2FyZS5vcmcvbWwvZ2RiLXBhdGNoZXMvMjAxNC0xMi9tc2cwMDIzOS5odG1sCitXcml0dGVuIGJ5OiBZYW8gUWkgPHlhb0Bjb2Rlc291cmNlcnkuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZ2RiL2dkYnNlcnZlci9saW51eC1wcGMtbG93LmMgfCAxMSArKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nZGIvZ2Ric2VydmVyL2xpbnV4LXBwYy1sb3cuYyBiL2dkYi9nZGJzZXJ2ZXIvbGludXgtcHBjLWxvdy5jCitpbmRleCA2M2Q0MjE4Li5hNjJjZjIyIDEwMDY0NAorLS0tIGEvZ2RiL2dkYnNlcnZlci9saW51eC1wcGMtbG93LmMKKysrKyBiL2dkYi9nZGJzZXJ2ZXIvbGludXgtcHBjLWxvdy5jCitAQCAtMzc0LDcgKzM3NCw3IEBAIHBwY19hcmNoX3NldHVwICh2b2lkKQorIHsKKyAgIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2M7CisgI2lmZGVmIF9fcG93ZXJwYzY0X18KKy0gIGxvbmcgbXNyOworKyAgdW5zaWduZWQgbG9uZyBtc3I7CisgICBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlOworIAorICAgLyogT24gYSA2NC1iaXQgaG9zdCwgYXNzdW1lIDY0LWJpdCBpbmZlcmlvciBwcm9jZXNzIHdpdGggbm8KK0BAIC0zODQsMTMgKzM4NCwxNiBAQCBwcGNfYXJjaF9zZXR1cCAodm9pZCkKKyAgIGN1cnJlbnRfcHJvY2VzcyAoKS0+dGRlc2MgPSB0ZGVzYzsKKyAgIHBwY19od2NhcCA9IDA7CisgCistICAvKiBPbmx5IGlmIHRoZSBoaWdoIGJpdCBvZiB0aGUgTVNSIGlzIHNldCwgd2UgYWN0dWFsbHkgaGF2ZQorLSAgICAgYSA2NC1iaXQgaW5mZXJpb3IuICAqLworKyAgLyogV2UgYWN0dWFsbHkgaGF2ZSBhIDY0LWJpdCBpbmZlcmlvciBvbmx5IGlmIHRoZSBjZXJ0YWluIGJpdCBvZiB0aGUKKysgICAgIE1TUiBpcyBzZXQuICBUaGUgUG93ZXJJU0EgQm9vayBJSUktUyBNU1IgaXMgZGlmZmVyZW50IGZyb20gdGhlCisrICAgICBQb3dlcklTQSBCb29rIElJSS1FIE1TUi4gIFRoZSBCb29rIElJSS1TIE1TUiBpcyA2NCBiaXRzIHdpZGUsIGFuZAorKyAgICAgaXRzIE1TUltTRl0gaXMgdGhlIGJpdCAwIG9mIGEgNjQtYml0IHZhbHVlLiAgQm9vayBJSUktRSBNU1IgaXMgMzIKKysgICAgIGJpdHMgd2lkZSwgYW5kIGl0cyBNU1JbQ01dIGlzIHRoZSBiaXQgMCBvZiBhIDMyLWJpdCB2YWx1ZS4gICovCisgICByZWdjYWNoZSA9IG5ld19yZWdpc3Rlcl9jYWNoZSAodGRlc2MpOworICAgZmV0Y2hfaW5mZXJpb3JfcmVnaXN0ZXJzIChyZWdjYWNoZSwgZmluZF9yZWdubyAodGRlc2MsICJtc3IiKSk7CisgICBjb2xsZWN0X3JlZ2lzdGVyX2J5X25hbWUgKHJlZ2NhY2hlLCAibXNyIiwgJm1zcik7CisgICBmcmVlX3JlZ2lzdGVyX2NhY2hlIChyZWdjYWNoZSk7CistICBpZiAobXNyIDwgMCkKKysgIGlmIChtc3IgJiAweDgwMDAwMDAwODAwMDAwMDApCisgICAgIHsKKyAgICAgICBwcGNfZ2V0X2h3Y2FwICgmcHBjX2h3Y2FwKTsKKyAgICAgICBpZiAocHBjX2h3Y2FwICYgUFBDX0ZFQVRVUkVfQ0VMTCkKKy0tIAorMS44LjUuMi4yMzMuZzkzMmY3ZTQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYl83LjkuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGJfNy45LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1MmUyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGJfNy45LjEuYmIKQEAgLTAsMCArMSwyNCBAQAorcmVxdWlyZSBnZGIuaW5jCityZXF1aXJlIGdkYi0ke1BWfS5pbmMKKworaW5oZXJpdCBweXRob24tZGlyCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLS13aXRoLXB5dGhvbj0ke1dPUktESVJ9L3B5dGhvbiwtLXdpdGhvdXQtcHl0aG9uLHB5dGhvbixweXRob24gcHl0aG9uLWNvZGVjcyIKK1BBQ0tBR0VDT05GSUdbYmFiZWx0cmFjZV0gPSAiLS13aXRoLWJhYmVsdHJhY2UsLS13aXRob3V0LWJhYmVsdHJhY2UsYmFiZWx0cmFjZSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJaWYgWyAtbiAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHl0aG9uJywgJ3B5dGhvbicsICcnLCBkKX0iIF07IHRoZW4KKwkJY2F0ID4gJHtXT1JLRElSfS9weXRob24gPDwgRU9GCisjIS9iaW4vc2gKK2Nhc2UgIlwkMiIgaW4KKwktLWluY2x1ZGVzKSBlY2hvICItSSR7U1RBR0lOR19JTkNESVJ9LyR7UFlUSE9OX0RJUn0vIiA7OworCS0tbGRmbGFncykgZWNobyAiLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJ9Ly4uIC1XbCwtcnBhdGgsJHtsaWJkaXJ9Ly4uIC1scHRocmVhZCAtbGRsIC1sdXRpbCAtbG0gLWxweXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0iIDs7CisJLS1leGVjLXByZWZpeCkgZWNobyAiJHtleGVjX3ByZWZpeH0iIDs7CisJKikgZXhpdCAxIDs7Citlc2FjCitleGl0IDAKK0VPRgorCQljaG1vZCAreCAke1dPUktESVJ9L3B5dGhvbgorCWZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYTRhMjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0LmluYwpAQCAtMCwwICsxLDEzMCBAQAorU1VNTUFSWSA9ICJEaXN0cmlidXRlZCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdC1zY20uY29tIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK0RFUEVORFMgPSAib3BlbnNzbCBjdXJsIHpsaWIgZXhwYXQiCisKK1BST1ZJREVTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGdpdC1yZXBsYWNlbWVudC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9zb2Z0d2FyZS9zY20vZ2l0L2dpdC0ke1BWfS50YXIuZ3o7bmFtZT10YXJiYWxsIFwKKyAgICAgICAgICAgJHtLRVJORUxPUkdfTUlSUk9SfS9zb2Z0d2FyZS9zY20vZ2l0L2dpdC1tYW5wYWdlcy0ke1BWfS50YXIuZ3o7bmFtZT1tYW5wYWdlcyIKKworUyA9ICIke1dPUktESVJ9L2dpdC0ke1BWfSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2MwZDdlZjAzYTdlYjA0Y2U3OTViMGY2MGU2OGU3ZTEiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtcGVybD0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcGVybC1uYXRpdmUvcGVybCBcCisJCS0td2l0aG91dC10Y2x0ayBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwZXJsbmF0aXZlCisKK0VYVFJBX09FTUFLRSA9ICJOT19QWVRIT049MSBDRkxBR1M9JyR7Q0ZMQUdTfScgTERGTEFHUz0nJHtMREZMQUdTfSciCitFWFRSQV9PRU1BS0UgKz0gIidQRVJMX1BBVEg9L3Vzci9iaW4vZW52IHBlcmwnIgorRVhUUkFfT0VNQUtFX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIE5PX0NST1NTX0RJUkVDVE9SWV9IQVJETElOS1M9MSIKKworZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKwkjIFJlbW92ZSBwZXJsL3BlcmwubWFrIHRvIGZpeCB0aGUgb3V0LW9mLWRhdGUgcGVybC5tYWsgZXJyb3IKKwkjIGR1cmluZyByZWJ1aWxkCisJcm0gLWYgcGVybC9wZXJsLm1haworfQorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0iJHtEfSIgYmluZGlyPSR7YmluZGlyfSBcCisJCXRlbXBsYXRlX2Rpcj0ke2RhdGFkaXJ9L2dpdC1jb3JlL3RlbXBsYXRlcyBcCisJCUdJVF9QWVRIT05fRElSPSR7RH0ke2RhdGFkaXJ9L2dpdC1jb3JlL3B5dGhvbgorCWluc3RhbGwgLWQgJHtEfS8ke21hbmRpcn0vbWFuMQorCWluc3RhbGwgLWQgJHtEfS8ke21hbmRpcn0vbWFuNQorCWluc3RhbGwgLWQgJHtEfS8ke21hbmRpcn0vbWFuNworCWluc3RhbGwgLXQgJHtEfS8ke21hbmRpcn0vbWFuMSAke1dPUktESVJ9L21hbjEvKgorCWluc3RhbGwgLXQgJHtEfS8ke21hbmRpcn0vbWFuNSAke1dPUktESVJ9L21hbjUvKgorCWluc3RhbGwgLXQgJHtEfS8ke21hbmRpcn0vbWFuNyAke1dPUktESVJ9L21hbjcvKgorCWluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9L2Jhc2gtY29tcGxldGlvbi9jb21wbGV0aW9ucy8KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoICR7RH0vJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24vY29tcGxldGlvbnMvZ2l0Cit9CisKK3BlcmxfbmF0aXZlX2ZpeHVwICgpIHsKKwlzZWQgLWkgLWUgJ3MjJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlLyMke2JpbmRpcn0vIycgXAorCSAgICAgICAtZSAncyMke2xpYmRpcn0vcGVybC1uYXRpdmUvIyR7bGliZGlyfS8jJyBcCisJICAgICR7QGQuZ2V0VmFyKCJQRVJMVE9PTFMiLCBUcnVlKS5yZXBsYWNlKCcgLycsZC5nZXRWYXIoJ0QnLCBUcnVlKSArICcvJyl9CisKKwkjICR7bGliZGlyfSBpcyBub3QgYXBwbGljYWJsZSBoZXJlLCBwZXJsLW5hdGl2ZSBmaWxlcyBhcmUgYWx3YXlzCisJIyBpbnN0YWxsZWQgdG8gL3Vzci9saWIgb24gYm90aCAzMi82NCBiaXRzIHRhcmdldHMuCisJbXYgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYi9wZXJsLW5hdGl2ZS9wZXJsICR7RH0ke2xpYmRpcn0KKwlybWRpciAtcCAke0R9JHtleGVjX3ByZWZpeH0vbGliL3BlcmwtbmF0aXZlIHx8IHRydWUKK30KKworUkVMX0dJVF9FWEVDX1BBVEggPSAiJHtAb3MucGF0aC5yZWxwYXRoKGxpYmV4ZWNkaXIsIGJpbmRpcil9L2dpdC1jb3JlIgorUkVMX0dJVF9URU1QTEFURV9ESVIgPSAiJHtAb3MucGF0aC5yZWxwYXRoKGRhdGFkaXIsIGJpbmRpcil9L2dpdC1jb3JlL3RlbXBsYXRlcyIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0ICgpIHsKKwlwZXJsX25hdGl2ZV9maXh1cAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9naXQgXAorCQlHSVRfRVhFQ19QQVRIPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7UkVMX0dJVF9FWEVDX1BBVEh9IFwKKwkJR0lUX1RFTVBMQVRFX0RJUj0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke1JFTF9HSVRfVEVNUExBVEVfRElSfQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9naXQgXAorCQlHSVRfRVhFQ19QQVRIPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7UkVMX0dJVF9FWEVDX1BBVEh9IFwKKwkJR0lUX1RFTVBMQVRFX0RJUj0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke1JFTF9HSVRfVEVNUExBVEVfRElSfQorCXBlcmxfbmF0aXZlX2ZpeHVwCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2dpdC1jb3JlICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlLy5kZWJ1ZyIKKworUEVSTFRPT0xTID0gIiBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtYWRkLS1pbnRlcmFjdGl2ZSBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtYXJjaGltcG9ydCBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtY3ZzZXhwb3J0Y29tbWl0IFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1jdnNpbXBvcnQgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWN2c3NlcnZlciBcCisgICAgJHtiaW5kaXJ9L2dpdC1jdnNzZXJ2ZXIgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWRpZmZ0b29sIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1yZWxpbmsgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LXNlbmQtZW1haWwgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LXN2biBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtaW5zdGF3ZWIgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LXN1Ym1vZHVsZSBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtYW0gXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LXJlcXVlc3QtcHVsbCBcCisgICAgJHtkYXRhZGlyfS9naXR3ZWIvZ2l0d2ViLmNnaSBcCisgICAgJHtkYXRhZGlyfS9naXQtY29yZS90ZW1wbGF0ZXMvaG9va3MvcHJlcGFyZS1jb21taXQtbXNnLnNhbXBsZSBcCisgICAgJHtkYXRhZGlyfS9naXQtY29yZS90ZW1wbGF0ZXMvaG9va3MvcHJlLXJlYmFzZS5zYW1wbGUgXAorIgorCisjIEJhc2ljIHRhYiBjb21wbGV0aW9uIHN1cHBvcnQKK1BBQ0tBR0VTID0rICIke1BOfS1iYXNoLWNvbXBsZXRpb24iCitGSUxFU18ke1BOfS1iYXNoLWNvbXBsZXRpb24gPSAiJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24vY29tcGxldGlvbnMvKiIKKworIyBHaXQgdG9vbHMgcmVxdWlyaW5nIHBlcmwKK1BBQ0tBR0VTID0rICIke1BOfS1wZXJsdG9vbHMiCitGSUxFU18ke1BOfS1wZXJsdG9vbHMgKz0gIiBcCisgICAgJHtQRVJMVE9PTFN9IFwKKyAgICAke2xpYmRpcn0vcGVybCBcCisgICAgJHtkYXRhZGlyfS9wZXJsIFwKKyIKK1JERVBFTkRTXyR7UE59LXBlcmx0b29scyA9ICIke1BOfSBwZXJsIHBlcmwtbW9kdWxlLWZpbGUtcGF0aCBmaW5kdXRpbHMiCisKK1BBQ0tBR0VTID0rICIke1BOfS1weXRob24iCitGSUxFU18ke1BOfS1weXRob24gPSAiJHtsaWJkaXJ9L3B5dGhvbioiCisKKworIyBnaXQtdGsgcGFja2FnZSB3aXRoIGdpdGsgYW5kIGdpdC1ndWkKK1BBQ0tBR0VTID0rICIke1BOfS10ayIKKyNSREVQRU5EU18ke1BOfS10ayA9ICIke1BOfSB0ayB0Y2wiCisjRVhUUkFfT0VNQUtFID0gIlRDTF9QQVRIPSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9L3RjbHNoIgorRklMRVNfJHtQTn0tdGsgPSAiIFwKKyAgICAke2JpbmRpcn0vZ2l0ayBcCisgICAgJHtkYXRhZGlyfS9naXRrIFwKKyIKKworUEFDS0FHRVMgPSsgImdpdHdlYiIKK0ZJTEVTX2dpdHdlYiA9ICIke2RhdGFkaXJ9L2dpdHdlYi8iCisKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdF8yLjUuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXRfMi41LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2ODZjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXRfMi41LjAuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSBnaXQuaW5jCisKK0VYVFJBX09FQ09ORiArPSAiYWNfY3Zfc25wcmludGZfcmV0dXJuc19ib2d1cz1ubyBcCisgICAgICAgICAgICAgICAgIGFjX2N2X2ZyZWFkX3JlYWRzX2RpcmVjdG9yaWVzPSR7YWNfY3ZfZnJlYWRfcmVhZHNfZGlyZWN0b3JpZXM9eWVzfSBcCisgICAgICAgICAgICAgICAgICIKK0VYVFJBX09FTUFLRSArPSAiTk9fR0VUVEVYVD0xIgorCitTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICIzYmM5YjBhODAzYWU4ZWM2YzUzMTZjYzY0ZjBiN2Y3OCIKK1NSQ19VUklbdGFyYmFsbC5zaGEyNTZzdW1dID0gIjhmYTEzYmE4NDM0ZmY4M2QyNGY1N2Y4MzFkNTVkYmI5MDQ2NDM0YzI2NjY0MTE4MGEzNzc0NGZhY2ZjZTcyYWMiCitTUkNfVVJJW21hbnBhZ2VzLm1kNXN1bV0gPSAiMTM0YjA0OWU1MTQyMGEzMzYwNDlhYWMyMWM4OGE3NWEiCitTUkNfVVJJW21hbnBhZ2VzLnNoYTI1NnN1bV0gPSAiNzQ1ZTRlNzk3ZmU1MDYxZTc4MWM4ODBkMzcwYjFiZWI0ODAxOTkxMjdkYTVhY2FmNGUzNzZlMGIwOWQ0ZDY4NSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9jb25maWctZ3Vlc3MtdWNsaWJjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL2NvbmZpZy1ndWVzcy11Y2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5NDExNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9jb25maWctZ3Vlc3MtdWNsaWJjLnBhdGNoCkBAIC0wLDAgKzEsMTcwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUGF0Y2ggY291cnRlc3kgZ2VudG9vLXBvcnRhZ2Uvc3lzLWRldmVsL2dudWNvbmZpZy9maWxlcy9hdXRvbWFrZS0xLjguNS1jb25maWctZ3Vlc3MtdWNsaWJjLnBhdGNoLgorCit1cGRhdGVkIHRvIDIwMDUwNTE2IGJ5IE1hcmNpbiAnSHJ3JyBKdXN6a2lld2ljeiAoYnkgaGFuZCkKK3VwZGF0ZWQgdG8gMjAwODAxMjMgYnkgTml0aW4gQSBLYW1ibGUgKGJ5IGhhbmQpCit1cGRhdGVkIHRvIDIwMTExMDAxIGJ5IFNhdWwgV29sZCAoYnkgaGFuZCkKK3VwZGF0ZWQgdG8gMjAxMjA4MTggYnkgTWFyY2luICdIcncnIEp1c3praWV3aWN6IChieSBoYW5kKQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJjaW4gSnVzemtpZXdpY3ogPG1hcmNpbi5qdXN6a2lld2ljekBsaW5hcm8ub3JnPgorCistLS0KKyBjb25maWcuZ3Vlc3MgfCAgIDY3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKyksIDI3IGRlbGV0aW9ucygtKQorCistLS0gZ2l0Lm9yaWcvY29uZmlnLmd1ZXNzCisrKysgZ2l0L2NvbmZpZy5ndWVzcworQEAgLTEzOCw2ICsxMzgsMTkgQEAgVU5BTUVfUkVMRUFTRT1gKHVuYW1lIC1yKSAyPi9kZXYvbnVsbGAgfAorIFVOQU1FX1NZU1RFTT1gKHVuYW1lIC1zKSAyPi9kZXYvbnVsbGAgIHx8IFVOQU1FX1NZU1RFTT11bmtub3duCisgVU5BTUVfVkVSU0lPTj1gKHVuYW1lIC12KSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfVkVSU0lPTj11bmtub3duCisgCisrIyBEZXRlY3QgdWNsaWJjIHN5c3RlbXMuCisrCisrTElCQz0iZ251IgorK2lmIFsgLWYgL3Vzci9pbmNsdWRlL2JpdHMvdUNsaWJjX2NvbmZpZy5oIF0KKyt0aGVuCisrCUxJQkM9dWNsaWJjCisrCWlmIFsgLW4gYGdyZXAgIiNkZWZpbmUgX19VQ0xJQkNfQ09ORklHX1ZFUlNJT05fXyIgL3Vzci9pbmNsdWRlL2JpdHMvdUNsaWJjX2NvbmZpZy5oYCBdCisrCXRoZW4KKysJCVVDTElCQ19TVUJWRVI9YHNlZCAtbiAiLyNkZWZpbmUgX19VQ0xJQkNfQ09ORklHX1ZFUlNJT05fXyAvcy8vL3AiIC91c3IvaW5jbHVkZS9iaXRzL3VDbGliY19jb25maWcuaGAKKysJCUxJQkM9JExJQkMkVUNMSUJDX1NVQlZFUgorKwlmaQorK2ZpCisrCisgIyBOb3RlOiBvcmRlciBpcyBzaWduaWZpY2FudCAtIHRoZSBjYXNlIGJyYW5jaGVzIGFyZSBub3QgZXhjbHVzaXZlLgorIAorIGNhc2UgIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgaW4KK0BAIC04ODYsMTUgKzg5OSwxNSBAQCBFT0YKKyAJICBFVjY4KikgVU5BTUVfTUFDSElORT1hbHBoYWV2NjggOzsKKyAJZXNhYworIAlvYmpkdW1wIC0tcHJpdmF0ZS1oZWFkZXJzIC9iaW4vc2ggfCBncmVwIC1xIGxkLnNvLjEKKy0JaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0ibGliYzEiIDsgZWxzZSBMSUJDPSIiIDsgZmkKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251JHtMSUJDfQorKwlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPSJnbnVsaWJjMSIgOyBlbHNlIExJQkM9IiIgOyBmaQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgYXJtKjpMaW51eDoqOiopCisgCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKyAJaWYgZWNobyBfX0FSTV9FQUJJX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorIAkgICAgfCBncmVwIC1xIF9fQVJNX0VBQklfXworIAl0aGVuCistCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZWxzZQorIAkgICAgaWYgZWNobyBfX0FSTV9QQ1NfVkZQIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKyAJCXwgZ3JlcCAtcSBfX0FSTV9QQ1NfVkZQCitAQCAtOTA2LDE5ICs5MTksMTkgQEAgRU9GCisgCWZpCisgCWV4aXQgOzsKKyAgICAgYXZyMzIqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBjcmlzOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LWF4aXMtbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBjcmlzdjMyOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LWF4aXMtbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBmcnY6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIGhleGFnb246TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIGkqODY6TGludXg6KjoqKQorIAlMSUJDPWdudQorQEAgLTkzMiwxMyArOTQ1LDEzIEBAIEVPRgorIAllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LSR7TElCQ30iCisgCWV4aXQgOzsKKyAgICAgaWE2NDpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgbTMycio6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIG02OCo6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIG1pcHM6TGludXg6KjoqIHwgbWlwczY0OkxpbnV4Oio6KikKKyAJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorQEAgLTk1Nyw1NCArOTcwLDU0IEBAIEVPRgorIAkjZW5kaWYKKyBFT0YKKyAJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15DUFUnYAorLQl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtZ251IjsgZXhpdDsgfQorKwl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtJHtMSUJDfSI7IGV4aXQ7IH0KKyAJOzsKKyAgICAgb3IzMjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgcGFkcmU6TGludXg6KjoqKQorLQllY2hvIHNwYXJjLXVua25vd24tbGludXgtZ251CisrCWVjaG8gc3BhcmMtdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgcGFyaXNjNjQ6TGludXg6KjoqIHwgaHBwYTY0OkxpbnV4Oio6KikKKy0JZWNobyBocHBhNjQtdW5rbm93bi1saW51eC1nbnUKKysJZWNobyBocHBhNjQtdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgcGFyaXNjOkxpbnV4Oio6KiB8IGhwcGE6TGludXg6KjoqKQorIAkjIExvb2sgZm9yIENQVSBsZXZlbAorIAljYXNlIGBncmVwICdeY3B1W15hLXpdKjonIC9wcm9jL2NwdWluZm8gMj4vZGV2L251bGwgfCBjdXQgLWQnICcgLWYyYCBpbgorLQkgIFBBNyopIGVjaG8gaHBwYTEuMS11bmtub3duLWxpbnV4LWdudSA7OworLQkgIFBBOCopIGVjaG8gaHBwYTIuMC11bmtub3duLWxpbnV4LWdudSA7OworLQkgICopICAgIGVjaG8gaHBwYS11bmtub3duLWxpbnV4LWdudSA7OworKwkgIFBBNyopIGVjaG8gaHBwYTEuMS11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKKysJICBQQTgqKSBlY2hvIGhwcGEyLjAtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisrCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtJHtMSUJDfSA7OworIAllc2FjCisgCWV4aXQgOzsKKyAgICAgcHBjNjQ6TGludXg6KjoqKQorLQllY2hvIHBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudQorKwllY2hvIHBvd2VycGM2NC11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBwcGM6TGludXg6KjoqKQorLQllY2hvIHBvd2VycGMtdW5rbm93bi1saW51eC1nbnUKKysJZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHMzOTA6TGludXg6KjoqIHwgczM5MHg6TGludXg6KjoqKQorIAllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWxpbnV4CisgCWV4aXQgOzsKKyAgICAgc2g2NCo6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHNoKjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgc3BhcmM6TGludXg6KjoqIHwgc3BhcmM2NDpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgdGlsZSo6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHZheDpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHg4Nl82NDpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgeHRlbnNhKjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKKyAJIyBwdHggNC4wIGRvZXMgdW5hbWUgLXMgY29ycmVjdGx5LCB3aXRoIERZTklYL3B0eCBpbiB0aGVyZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9nbnUtY29uZmlnaXplLmluIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL2dudS1jb25maWdpemUuaW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDQ5MDhmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9nbnUtY29uZmlnaXplLmluCkBAIC0wLDAgKzEsMjY3IEBACisjISAvdXNyL2Jpbi9lbnYgcGVybAorIyAtKi0gcGVybCAtKi0KKworZXZhbCAnY2FzZSAkIyBpbiAwKSBleGVjIC91c3IvYmluL3BlcmwgLVMgIiQwIjs7ICopIGV4ZWMgL3Vzci9iaW4vcGVybCAtUyAiJDAiICIkQCI7OyBlc2FjJworICAgIGlmIDA7CisKKyMgZ251LWNvbmZpZ2l6ZSAtIGluc3RhbGwgdGhlIEdOVSBjb25maWcuZ3Vlc3MgLyBjb25maWcuc3ViIGluIGEgZGlyZWN0b3J5IHRyZWUKKyMgQmFzZWQgb24gYXV0b3JlY29uZjoKKyMgICBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMKKyMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisjIDAyMTExLTEzMDcsIFVTQS4KKworQkVHSU4KK3sKKyAgbXkgJGRhdGFkaXIgPSAkRU5WeydhdXRvbTR0ZV9wZXJsbGliZGlyJ30gfHwgJ0BhdXRvbTR0ZV9wZXJsbGliZGlyQCc7CisjICAnL2hvbWUva2VyZ290aC9jb2RlL2J1aWxkLWFybS90bXAvc3RhZ2luZy9zaGFyZS9hdXRvY29uZic7CisgIHVuc2hpZnQgQElOQywgJGRhdGFkaXI7CisKKyAgIyBPdmVycmlkZSBTSEVMTC4gIE9uIERKR1BQIFNIRUxMIG1heSBub3QgYmUgc2V0IHRvIGEgc2hlbGwKKyAgIyB0aGF0IGNhbiBoYW5kbGUgcmVkaXJlY3Rpb24gYW5kIHF1b3RlIGFyZ3VtZW50cyBjb3JyZWN0bHksCisgICMgZS5nLjogQ09NTUFORC5DT00uICBGb3IgREpHUFAgYWx3YXlzIHVzZSB0aGUgc2hlbGwgdGhhdCBjb25maWd1cmUKKyAgIyBoYXMgZGV0ZWN0ZWQuCisgICRFTlZ7J1NIRUxMJ30gPSAnL2Jpbi9zaCcgaWYgKCReTyBlcSAnZG9zJyk7Cit9CisKK3VzZSBBdXRvbTR0ZTo6Q2hhbm5lbERlZnM7Cit1c2UgQXV0b200dGU6OkNoYW5uZWxzOwordXNlIEF1dG9tNHRlOjpDb25maWd1cmVfYWM7Cit1c2UgQXV0b200dGU6OkZpbGVVdGlsczsKK3VzZSBBdXRvbTR0ZTo6R2VuZXJhbDsKK3VzZSBBdXRvbTR0ZTo6WEZpbGU7CisjIERvIG5vdCB1c2UgQ3dkOjpjaGRpciwgc2luY2UgaXQgbWlnaHQgaGFuZy4KK3VzZSBDd2QgJ2N3ZCc7Cit1c2Ugc3RyaWN0OworCisjIyAtLS0tLS0tLS0tLSAjIworIyMgVmFyaWFibGVzLiAgIyMKKyMjIC0tLS0tLS0tLS0tICMjCisKKyMgJEhFTFAKKyMgLS0tLS0KKyRoZWxwID0gIlVzYWdlOiAkMCBbT1BUSU9OXSAuLi4gW0NPTkZJR1VSRS1BQyBvciBESVJFQ1RPUlldIC4uLgorCitJbnN0YWxsIHRoZSBHTlUgY29uZmlnLnN1YiBhbmQgY29uZmlnLmd1ZXNzIHNjcmlwdHMgaW4gdGhlCitESVJFQ1RPUklFUyBvciB0aGUgZGlyZWN0b3J5IHRyZWVzIGRyaXZlbiBieSBDT05GSUdVUkUtQUMKKyhkZWZhdWx0aW5nIHRvIGAuJykuCisKK09wZXJhdGlvbiBtb2RlczoKKyAgLWgsIC0taGVscCAgICAgICAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICB2ZXJib3NlbHkgcmVwb3J0IHByb2Nlc3NpbmcKKyAgLWYsIC0tZm9yY2UgICAgICAgICAgICAgIGNvbnNpZGVyIGFsbCBmaWxlcyBvYnNvbGV0ZQorICAtcywgLS1zeW1saW5rICAgICAgICAgICAgaW5zdGFsbCBzeW1ib2xpYyBsaW5rcyBpbnN0ZWFkIG9mIGNvcGllcworICAtVywgLS13YXJuaW5ncz1DQVRFR09SWSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZIFtzeW50YXhdCisKKyIgLiBBdXRvbTR0ZTo6Q2hhbm5lbERlZnM6OnVzYWdlIC4gIgorCitUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgXGBXQVJOSU5HU1wnIGlzIGhvbm9yZWQuICBTb21lIHN1YnRvb2xzIG1pZ2h0CitzdXBwb3J0IG90aGVyIHdhcm5pbmcgdHlwZXMsIHVzaW5nIFxgYWxsJyBpcyBlbmNvdXJhZ2VkLgorIjsKKworIyAkVkVSU0lPTgorIyAtLS0tLS0tLQorJHZlcnNpb24gPSAiZ251LWNvbmZpZ2l6ZSAxLjAKKworQ29weXJpZ2h0IChDKSAyMDA0IENocmlzIExhcnNvbgorVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KK3dhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIjsKKworbXkgJGNvbmZpZ2RpciAgPSAnQGdudS1jb25maWdkaXJAJzsKKyMnL2hvbWUva2VyZ290aC9jb2RlL2J1aWxkLWFybS90bXAvc3RhZ2luZy9pNjg2LWxpbnV4L3NoYXJlL2dudS1jb25maWcnOworbXkgJGF1dG9jb25mICAgPSAkRU5WeydBVVRPQ09ORid9ICAgICB8fCAnYXV0b2NvbmYnOworCisjIHVzZSBzeW1saW5rcyBpbnN0ZWFkLgorbXkgJHN5bWxpbmsgPSAwOworCitteSAkY29uZmlndXJlX2FjOworCitteSAkcm0gPSAicm0gLWYiOworbXkgJGxuX3MgPSAibG4gLXNmIjsKK215ICRjcCA9ICJjcCAtZiI7CitteSAkbWtkaXIgPSAibWtkaXIiOworbXkgJGNobW9kID0gImNobW9kIjsKKworIyMgLS0tLS0tLS0tLSAjIworIyMgUm91dGluZXMuICAjIworIyMgLS0tLS0tLS0tLSAjIworCisKKyMgcGFyc2VfYXJncyAoKQorIyAtLS0tLS0tLS0tLS0tCisjIFByb2Nlc3MgYW55IGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCitzdWIgcGFyc2VfYXJncyAoKQoreworICBteSAkc3JjZGlyOworCisgIGdldG9wdCAoJ3N8c3ltbGluaycgICAgICAgICAgICA9PiBcJHN5bWxpbmspOworCisgICMgRXZlbiBpZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBjb25maWd1cmUuYWMsIHRyaW0gdG8gZ2V0IHRoZQorICAjIGRpcmVjdG9yeSwgYW5kIGxvb2sgZm9yIGNvbmZpZ3VyZS5hYyBhZ2Fpbi4gIEJlY2F1c2UgKGkpIHRoZSBjb2RlCisgICMgaXMgc2ltcGxlciwgYW5kIChpaSkgd2UgYXJlIHN0aWxsIGFibGUgdG8gZGlhZ25vc2Ugc2ltdWx0YW5lb3VzCisgICMgcHJlc2VuY2Ugb2YgY29uZmlndXJlLmFjIGFuZCBjb25maWd1cmUuaW4uCisgIEBBUkdWID0gbWFwIHsgL2NvbmZpZ3VyZVwuKGFjfGluKSQvID8gZGlybmFtZSAoJF8pIDogJF8gfSBAQVJHVjsKKyAgcHVzaCBAQVJHViwgJy4nIHVubGVzcyBAQVJHVjsKK30KKworCisjICZnbnVfY29uZmlnaXplX2N1cnJlbnRfZGlyZWN0b3J5CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgZ251X2NvbmZpZ2l6ZV9jdXJyZW50X2RpcmVjdG9yeSAoKQoreworICBteSAkY29uZmlndXJlX2FjID0gcmVxdWlyZV9jb25maWd1cmVfYWM7CisKKyAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKyAgIyBJcyBpdCB1c2luZyBBdXRvY29uZj8gICMKKyAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKworICBteSAkdXNlc19hdXRvY29uZjsKKyAgbXkgJHVzZXNfZ2V0dGV4dDsKKyAgbXkgJGNvbmZpZ3VyZV9hY19maWxlID0gbmV3IEF1dG9tNHRlOjpYRmlsZSAkY29uZmlndXJlX2FjOworICB3aGlsZSAoJF8gPSAkY29uZmlndXJlX2FjX2ZpbGUtPmdldGxpbmUpCisgICAgIHsKKyAgICAgICBzLyMuKi8vOworICAgICAgIHMvZG5sLiovLzsKKyAgICAgICAkdXNlc19hdXRvY29uZiA9IDEgaWYgL0FDX0lOSVQvOworICAgICB9CisKKyAgaWYgKCEkdXNlc19hdXRvY29uZikKKyAgICB7CisgICAgICB2ZXJiICIkY29uZmlndXJlX2FjOiBub3QgdXNpbmcgQXV0b2NvbmYiOworICAgICAgcmV0dXJuOworICAgIH0KKworICBteSAkYXV4X2RpcjsKKyAgbXkgQHN1YmRpcjsKKyAgbXkgJGNtZDsKKyAgbXkgJGRlc3Q7CisKKyAgdmVyYiAiJGNvbmZpZ3VyZV9hYzogdHJhY2luZyI7CisgIG15ICR0cmFjZXMgPSBuZXcgQXV0b200dGU6OlhGaWxlCisgICAgKCIkYXV0b2NvbmYiCisgICAgIC4gam9pbiAoJyAtLXRyYWNlPScsICcnLAorCSAgICAgIyBJZiB5b3UgY2hhbmdlIHRoaXMgbGlzdCwgdXBkYXRlIHRoZQorCSAgICAgIyBgQXV0b3JlY29uZi1wcmVzZWxlY3Rpb25zJyBzZWN0aW9uIG9mIGF1dG9tNHRlLmluLgorCSAgICAgJ0FDX0NPTkZJR19BVVhfRElSOkFDX0NPTkZJR19BVVhfRElSOlwkMScsCisJICAgICAnQUNfQ09ORklHX1NVQkRJUlM6QUNfQ09ORklHX1NVQkRJUlM6XCQxJywKKwkgICAgICdBQ19JTklUJywKKwkgICAgKQorICAgICAuICcgfCcpOworICB3aGlsZSAoJF8gPSAkdHJhY2VzLT5nZXRsaW5lKQorICAgIHsKKyAgICAgICRhdXhfZGlyID0gJDEgICAgICAgICAgICAgICAgIGlmIC9BQ19DT05GSUdfQVVYX0RJUjooLiopLzsKKyAgICAgICR1c2VzX2F1dG9jb25mID0gMSAgICAgICAgICAgIGlmIC9BQ19JTklULzsKKyAgICAgIHB1c2ggQHN1YmRpciwgc3BsaXQgKCcgJywgJDEpIGlmIC9BQ19DT05GSUdfU1VCRElSUzooLiopLzsKKyAgICB9CisKKyAgIyBUaGUgc3ViZGlycyBhcmUgKm9wdGlvbmFsKiwgdGhleSBtYXkgbm90IGV4aXN0LgorICBmb3JlYWNoIChAc3ViZGlyKQorICAgIHsKKyAgICAgIGlmICgtZCkKKwl7CisJICB2ZXJiICIkY29uZmlndXJlX2FjOiBzdWJkaXJlY3RvcnkgJF8gdG8gZ251LWNvbmZpZ2l6ZSI7CisJICBnbnVfY29uZmlnaXplICgkXyk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHZlcmIgIiRjb25maWd1cmVfYWM6IHN1YmRpcmVjdG9yeSAkXyBub3QgcHJlc2VudCI7CisJfQorICAgIH0KKworICAkZGVzdCA9ICIuIjsKKworICBpZiAoZGVmaW5lZCAkYXV4X2RpcikKKyAgICB7CisgICAgICAkZGVzdCA9ICRhdXhfZGlyOworICAgICAgaWYgKCEgLWQgJGF1eF9kaXIpCisgICAgICAgIHsKKyAgICAgICAgICB2ZXJiICIkY29uZmlndXJlX2FjOiBjcmVhdGluZyBkaXJlY3RvcnkgJGF1eF9kaXIiOworICAgICAgICAgIG1rZGlyICRhdXhfZGlyCisgICAgICAgICAgICBvciBlcnJvciAiY2Fubm90IGNyZWF0ZSAkYXV4X2RpcjogJCEiOworICAgICAgICB9CisgICAgfQorCisgIGlmICghJHN5bWxpbmspCisgICAgeworICAgICAgJGNtZCA9ICRjcDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAkY21kID0gJGxuX3M7CisgICAgfQorCisgIHhzeXN0ZW0gKCIkY21kICRjb25maWdkaXIvY29uZmlnLmd1ZXNzICRkZXN0LyIpOworICB4c3lzdGVtICgiJGNobW9kIHUreCAkZGVzdC9jb25maWcuZ3Vlc3MiKTsKKyAgeHN5c3RlbSAoIiRjbWQgJGNvbmZpZ2Rpci9jb25maWcuc3ViICRkZXN0LyIpOworICB4c3lzdGVtICgiJGNobW9kIHUreCAkZGVzdC9jb25maWcuc3ViIik7Cit9CisKKworIyAmZ251X2NvbmZpZ2l6ZSAoJERJUkVDVE9SWSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlY29uZiB0aGUgJERJUkVDVE9SWS4KK3N1YiBnbnVfY29uZmlnaXplICgkKQoreworICBteSAoJGRpcmVjdG9yeSkgPSBAXzsKKyAgbXkgJGN3ZCA9IGN3ZDsKKworICAjIFRoZSBmb3JtYXQgZm9yIHRoaXMgbWVzc2FnZSBpcyBub3QgZnJlZTogdGFrZW4gZnJvbSBFbWFjcywgaXRzZWxmCisgICMgdXNpbmcgR05VIE1ha2UncyBmb3JtYXQuCisgIHZlcmIgIkVudGVyaW5nIGRpcmVjdG9yeSBgJGRpcmVjdG9yeSciOworICBjaGRpciAkZGlyZWN0b3J5CisgICAgb3IgZXJyb3IgImNhbm5vdCBjaGRpciB0byAkZGlyZWN0b3J5OiAkISI7CisKKyAgZ251X2NvbmZpZ2l6ZV9jdXJyZW50X2RpcmVjdG9yeTsKKworICAjIFRoZSBmb3JtYXQgaXMgbm90IGZyZWU6IHRha2VuIGZyb20gRW1hY3MsIGl0c2VsZiB1c2luZyBHTlUgTWFrZSdzCisgICMgZm9ybWF0LgorICB2ZXJiICJMZWF2aW5nIGRpcmVjdG9yeSBgJGRpcmVjdG9yeSciOworICBjaGRpciAkY3dkCisgICAgb3IgZXJyb3IgImNhbm5vdCBjaGRpciB0byAkY3dkOiAkISI7Cit9CisKKworIyMgLS0tLS0tICMjCisjIyBNYWluLiAgIyMKKyMjIC0tLS0tLSAjIworCitwYXJzZV9hcmdzOworCisjIEF1dG9yZWNvbmYgYWxsIHRoZSBnaXZlbiBjb25maWd1cmUuYWMuICBBIHdoaWxlIGxvb3AsIG5vdCBhIGZvciwKKyMgc2luY2UgdGhlIGxpc3QgY2FuIGNoYW5nZSBhdCBydW50aW1lIGJlY2F1c2Ugb2YgQUNfQ09ORklHX1NVQkRJUlMuCitmb3IgbXkgJGRpcmVjdG9yeSAoQEFSR1YpCisgIHsKKyAgICBnbnVfY29uZmlnaXplICgkZGlyZWN0b3J5KTsKKyAgfQorCisjIyMgU2V0dXAgIkdOVSIgc3R5bGUgZm9yIHBlcmwtbW9kZSBhbmQgY3BlcmwtbW9kZS4KKyMjIExvY2FsIFZhcmlhYmxlczoKKyMjIHBlcmwtaW5kZW50LWxldmVsOiAyCisjIyBwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKKyMjIHBlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtaW5kZW50LWxldmVsOiAyCisjIyBjcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKKyMjIGNwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWV4dHJhLW5ld2xpbmUtYmVmb3JlLWJyYWNlOiB0CisjIyBjcGVybC1tZXJnZS10cmFpbGluZy1lbHNlOiBuaWwKKyMjIGNwZXJsLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiAyCisjIyBFbmQ6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvbXVzbC1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL211c2wtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTQ3NDM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL211c2wtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitzdXBwb3J0IG11c2wKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogZ251LWNvbmZpZy0yMDEyMDgxNC9jb25maWcuc3ViCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251LWNvbmZpZy0yMDEyMDgxNC5vcmlnL2NvbmZpZy5zdWIJMjAxMi0wOS0xOCAwMjoyNzo0NS4wMDAwMDAwMDAgLTA3MDAKKysrKyBnbnUtY29uZmlnLTIwMTIwODE0L2NvbmZpZy5zdWIJMjAxNC0wMy0yNiAwMDozNDoxOS45NTU5OTY3MDkgLTA3MDAKK0BAIC0xMjMsNiArMTIzLDcgQEAKKyBtYXliZV9vcz1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDIvJ2AKKyBjYXNlICRtYXliZV9vcyBpbgorICAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtYW5kcm9pZCogfCBsaW51eC1kaWV0bGliYyB8IGxpbnV4LW5ld2xpYiogfCBcCisrICBsaW51eC1tdXNsKiB8IFwKKyAgIGxpbnV4LXVjbGliYyogfCB1Y2xpbnV4LXVjbGliYyogfCB1Y2xpbnV4LWdudSogfCBrZnJlZWJzZCotZ251KiB8IFwKKyAgIGtuZXRic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBcCisgICBrb3BlbnNvbGFyaXMqLWdudSogfCBcCitAQCAtMTM2NSw2ICsxMzY2LDcgQEAKKyAJICAgICAgfCAtY3lnd2luKiB8IC1tc3lzKiB8IC1wZSogfCAtcHNvcyogfCAtbW9zcyogfCAtcHJvZWxmKiB8IC1ydGVtcyogXAorIAkgICAgICB8IC1taW5ndzMyKiB8IC1taW5ndzY0KiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LWFuZHJvaWQqIFwKKyAJICAgICAgfCAtbGludXgtbmV3bGliKiB8IC1saW51eC11Y2xpYmMqIFwKKysJICAgICAgfCAtbGludXgtbXVzbCogXAorIAkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCisgCSAgICAgIHwgLWludGVyaXgqIHwgLXV3aW4qIHwgLW1rcyogfCAtcmhhcHNvZHkqIHwgLWRhcndpbiogfCAtb3BlbmVkKiBcCisgCSAgICAgIHwgLW9wZW5zdGVwKiB8IC1vc2tpdCogfCAtY29uaXgqIHwgLXB3MzIqIHwgLW5vbnN0b3B1eCogXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL3VjbGliYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy91Y2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVmZTEwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy91Y2xpYmMucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBjb25maWcuc3ViLm9yaWcJMjAwNC0wNS0xNCAxOTozODozNi4wMDAwMDAwMDAgLTA1MDAKKysrKyBjb25maWcuc3ViCTIwMDQtMDUtMTQgMTk6Mzk6MTcuMDAwMDAwMDAwIC0wNTAwCitAQCAtMTE4LDcgKzExOCw3IEBACisgIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KKyBtYXliZV9vcz1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDIvJ2AKKyBjYXNlICRtYXliZV9vcyBpbgorLSAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBzdG9ybS1jaGFvcyogfCBvczItZW14KiB8IHJ0bWstbm92YSopCisrICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC11Y2xpYmMqIHwgZnJlZWJzZCotZ251KiB8IG5ldGJzZCotZ251KiB8IHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKKyAgICAgb3M9LSRtYXliZV9vcworICAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMS8nYAorICAgICA7OworQEAgLTExMzUsNyArMTEzNSw4IEBACisgCSAgICAgIHwgLXVkaSogfCAtZWFiaSogfCAtbGl0ZXMqIHwgLWllZWUqIHwgLWdvMzIqIHwgLWF1eCogXAorIAkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiBcCisgCSAgICAgIHwgLWN5Z3dpbiogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKKy0JICAgICAgfCAtbWluZ3czMiogfCAtbGludXgtZ251KiB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCisrCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAtbGludXgtdWNsaWJjKiBcCisrCSAgICAgIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIFwKKyAJICAgICAgfCAtaW50ZXJpeCogfCAtdXdpbiogfCAtbWtzKiB8IC1yaGFwc29keSogfCAtZGFyd2luKiB8IC1vcGVuZWQqIFwKKyAJICAgICAgfCAtb3BlbnN0ZXAqIHwgLW9za2l0KiB8IC1jb25peCogfCAtcHczMiogfCAtbm9uc3RvcHV4KiBcCisgCSAgICAgIHwgLXN0b3JtLWNoYW9zKiB8IC10b3BzMTAqIHwgLXRlbmV4KiB8IC10b3BzMjAqIHwgLWl0cyogXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnXzIwMTIwODE0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnXzIwMTIwODE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViN2U0MjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWdfMjAxMjA4MTQuYmIKQEAgLTAsMCArMSw0MSBAQAorU1VNTUFSWSA9ICJnbnUtY29uZmlnaXplIgorREVTQ1JJUFRJT04gPSAiVG9vbCB0aGF0IGluc3RhbGxzIHRoZSBHTlUgY29uZmlnLmd1ZXNzIC8gY29uZmlnLnN1YiBpbnRvIGEgZGlyZWN0b3J5IHRyZWUiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2NvbmZpZy5ndWVzcztlbmRsaW5lPTM5O21kNT1iNzlhNDY2MzQ3NWY0ZDcyNDg0NjQ2MzI3NzgxN2UwZCIKKworREVQRU5EU19jbGFzcy1uYXRpdmUgPSAicGVybC1uYXRpdmUtcnVudGltZSIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9nbnUtY29uZmlnL2dudS1jb25maWctJHtQVn0udGFyLmJ6MiBcCisJICAgZmlsZTovL2NvbmZpZy1ndWVzcy11Y2xpYmMucGF0Y2ggXAorCSAgIGZpbGU6Ly9tdXNsLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ251LWNvbmZpZ2l6ZS5pbiIKKworU1JDX1VSSVttZDVzdW1dID0gImJjZmNhNWEyYmIzOWVkYWQ0YWFlNWE2NWVmYzg0MDk0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ0Zjk5YThlNzZmM2U4ZTRmZWMwYmI1YWQ0NzYyZjhlNDQzNjYxNjg1NTRjZTY2Y2I4NWFmYmUyZWQzZWZkOGIiCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2dudS1jb25maWcgXAorCQkgICAke0R9JHtiaW5kaXJ9CisJY2F0ICR7V09SS0RJUn0vZ251LWNvbmZpZ2l6ZS5pbiB8IFwKKwkJc2VkIC1lICdzLEBnbnUtY29uZmlnZGlyQCwke2RhdGFkaXJ9L2dudS1jb25maWcsZycgXAorCQkgICAgLWUgJ3MsQGF1dG9tNHRlX3BlcmxsaWJkaXJALCR7ZGF0YWRpcn0vYXV0b2NvbmYsZycgPiAke0R9JHtiaW5kaXJ9L2dudS1jb25maWdpemUKKwkjIEluIHRoZSBuYXRpdmUgY2FzZSB3ZSB3YW50IHRoZSBzeXN0ZW0gcGVybCBhcyBwZXJsLW5hdGl2ZSBjYW4ndCBoYXZlIGJ1aWx0IHlldAorCWlmIFsgIiR7UE59IiAhPSAiZ251LWNvbmZpZy1uYXRpdmUiIC1hICIke1BOfSIgIT0gIm5hdGl2ZXNkay1nbnUtY29uZmlnIiBdOyB0aGVuCisJCXNlZCAtaSAtZSAncywvdXNyL2Jpbi9lbnYsJHtiaW5kaXJ9L2VudixnJyAke0R9JHtiaW5kaXJ9L2dudS1jb25maWdpemUKKwlmaQorCWNobW9kIDc1NSAke0R9JHtiaW5kaXJ9L2dudS1jb25maWdpemUKKwlpbnN0YWxsIC1tIDA2NDQgY29uZmlnLmd1ZXNzIGNvbmZpZy5zdWIgJHtEfSR7ZGF0YWRpcn0vZ251LWNvbmZpZy8KK30KKworUEFDS0FHRVMgPSAiJHtQTn0iCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0gJHtkYXRhZGlyfS9nbnUtY29uZmlnIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWdfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDVmMmI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnX2dpdC5iYgpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gImdudS1jb25maWdpemUiCitERVNDUklQVElPTiA9ICJUb29sIHRoYXQgaW5zdGFsbHMgdGhlIEdOVSBjb25maWcuZ3Vlc3MgLyBjb25maWcuc3ViIGludG8gYSBkaXJlY3RvcnkgdHJlZSIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTC0zLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24iCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9jb25maWcuZ3Vlc3M7YmVnaW5saW5lPTc7ZW5kbGluZT0yNzttZDU9OWJhYzhiMTc0M2MyMjQwYWUwN2NjZTZlNTQ2YWMyZjIiCisKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInBlcmwtbmF0aXZlLXJ1bnRpbWUiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK1NSQ1JFViA9ICJiNTc2ZmE4N2MxNDBiODI0NDY2ZWYxNjM4ZTk0NWU4N2RjNWMwMzQzIgorUFYgPSAiMjAxNTA3MjgrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnN2LmdudS5vcmcvY29uZmlnLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9nbnUtY29uZmlnaXplLmluIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitDTEVBTkJST0tFTiA9ICIxIgorCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9nbnUtY29uZmlnIFwKKwkJICAgJHtEfSR7YmluZGlyfQorCWNhdCAke1dPUktESVJ9L2dudS1jb25maWdpemUuaW4gfCBcCisJCXNlZCAtZSAncyxAZ251LWNvbmZpZ2RpckAsJHtkYXRhZGlyfS9nbnUtY29uZmlnLGcnIFwKKwkJICAgIC1lICdzLEBhdXRvbTR0ZV9wZXJsbGliZGlyQCwke2RhdGFkaXJ9L2F1dG9jb25mLGcnID4gJHtEfSR7YmluZGlyfS9nbnUtY29uZmlnaXplCisJIyBJbiB0aGUgbmF0aXZlIGNhc2Ugd2Ugd2FudCB0aGUgc3lzdGVtIHBlcmwgYXMgcGVybC1uYXRpdmUgY2FuJ3QgaGF2ZSBidWlsdCB5ZXQKKwlpZiBbICIke1BOfSIgIT0gImdudS1jb25maWctbmF0aXZlIiAtYSAiJHtQTn0iICE9ICJuYXRpdmVzZGstZ251LWNvbmZpZyIgXTsgdGhlbgorCQlzZWQgLWkgLWUgJ3MsL3Vzci9iaW4vZW52LCR7YmluZGlyfS9lbnYsZycgJHtEfSR7YmluZGlyfS9nbnUtY29uZmlnaXplCisJZmkKKwljaG1vZCA3NTUgJHtEfSR7YmluZGlyfS9nbnUtY29uZmlnaXplCisJaW5zdGFsbCAtbSAwNjQ0IGNvbmZpZy5ndWVzcyBjb25maWcuc3ViICR7RH0ke2RhdGFkaXJ9L2dudS1jb25maWcvCit9CisKK1BBQ0tBR0VTID0gIiR7UE59IgorRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9ICR7ZGF0YWRpcn0vZ251LWNvbmZpZyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvYXJtX2FhcmNoNjQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9hcm1fYWFyY2g2NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTc4OGI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvYXJtX2FhcmNoNjQucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorZ3VpbGU6IGFkZCBhYXJjaDY0IHJlY29nbml0aW9uCisKK0Fzc3VtZSBsaXR0bGUtZW5kaWFuLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogam9lLnNsYXRlckB3aW5kcml2ZXIuY29tCisKKy0tLSBhL21vZHVsZS9zeXN0ZW0vYmFzZS90YXJnZXQuc2NtCisrKysgYi9tb2R1bGUvc3lzdGVtL2Jhc2UvdGFyZ2V0LnNjbQorQEAgLTcwLDYgKzcwLDggQEAKKyAgICAgICAgICAgICAoKG1lbWJlciBjcHUgJygic3BhcmMiICJzcGFyYzY0IiAicG93ZXJwYyIgInBvd2VycGM2NCIgInNwdSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlwcyIgIm1pcHM2NCIpKQorICAgICAgICAgICAgICAoZW5kaWFubmVzcyBiaWcpKQorKyAgICAgICAgICAgICgoc3RyaW5nLW1hdGNoICJeYWFyY2g2NCIgY3B1KQorKyAgICAgICAgICAgICAoZW5kaWFubmVzcyBsaXR0bGUpKQorICAgICAgICAgICAgICgoc3RyaW5nLW1hdGNoICJeYXJtLiplYiIgY3B1KQorICAgICAgICAgICAgICAoZW5kaWFubmVzcyBiaWcpKQorICAgICAgICAgICAgICgoc3RyaW5nLW1hdGNoICJeYXJtLioiIGNwdSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2FybV9lbmRpYW5uZXNzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvYXJtX2VuZGlhbm5lc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE0MzI4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2FybV9lbmRpYW5uZXNzLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1N1cHBvcnQgZm9ybSBBUk0gZW5kaWFubmVzcworCitGaXhlcyBZb2N0byBidWcjIDI3MjkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBndWlsZS0yLjAuNS9tb2R1bGUvc3lzdGVtL2Jhc2UvdGFyZ2V0LnNjbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd1aWxlLTIuMC41Lm9yaWcvbW9kdWxlL3N5c3RlbS9iYXNlL3RhcmdldC5zY20JMjAxMi0wMS0yNCAwMzowNjowNi4wMDAwMDAwMDAgLTA4MDAKKysrKyBndWlsZS0yLjAuNS9tb2R1bGUvc3lzdGVtL2Jhc2UvdGFyZ2V0LnNjbQkyMDEyLTA3LTEyIDEzOjA1OjQ0LjM3MjM2NDEwMyAtMDcwMAorQEAgLTcwLDcgKzcwLDkgQEAKKyAgICAgICAgICAgICAoKG1lbWJlciBjcHUgJygic3BhcmMiICJzcGFyYzY0IiAicG93ZXJwYyIgInBvd2VycGM2NCIgInNwdSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlwcyIgIm1pcHM2NCIpKQorICAgICAgICAgICAgICAoZW5kaWFubmVzcyBiaWcpKQorLSAgICAgICAgICAgICgoc3RyaW5nLW1hdGNoICJeYXJtLiplbCIgY3B1KQorKyAgICAgICAgICAgICgoc3RyaW5nLW1hdGNoICJeYXJtLiplYiIgY3B1KQorKyAgICAgICAgICAgICAoZW5kaWFubmVzcyBiaWcpKQorKyAgICAgICAgICAgICgoc3RyaW5nLW1hdGNoICJeYXJtLioiIGNwdSkKKyAgICAgICAgICAgICAgKGVuZGlhbm5lc3MgbGl0dGxlKSkKKyAgICAgICAgICAgICAoZWxzZQorICAgICAgICAgICAgICAoZXJyb3IgInVua25vd24gQ1BVIGVuZGlhbm5lc3MiIGNwdSkpKSkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMi1NYXJrLVVudXNlZC1tb2R1bGVzLWFyZS1yZW1vdmVkLWdjLXRlc3QtYXMtdW5yZXNvbHZlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZGViaWFuLzAwMDItTWFyay1VbnVzZWQtbW9kdWxlcy1hcmUtcmVtb3ZlZC1nYy10ZXN0LWFzLXVucmVzb2x2ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzIzOGE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZGViaWFuLzAwMDItTWFyay1VbnVzZWQtbW9kdWxlcy1hcmUtcmVtb3ZlZC1nYy10ZXN0LWFzLXVucmVzb2x2ZS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KKworU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworRnJvbSBlNTJiZmNkYmFjYTVkY2U0OTg2NzhkOGY1MTIzODFlM2UzOWE0MDY2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iIEJyb3duaW5nIDxybGJAZGVmYXVsdHZhbHVlLm9yZz4KK0RhdGU6IFN1biwgMTggTWFyIDIwMTIgMTE6NDA6NTUgLTA1MDAKK1N1YmplY3Q6IE1hcmsgIlVudXNlZCBtb2R1bGVzIGFyZSByZW1vdmVkIiBnYyB0ZXN0IGFzIHVucmVzb2x2ZWQuCisKK0FzIHBlciBkaXNjdXNzaW9uIHdpdGggdXBzdHJlYW0sIG1hcmsgdGhpcyB0ZXN0IGFzIHVucmVzb2x2ZWQgc2luY2UgaXQKK21heSBwcm9kdWNlIGZhbHNlIG5lZ2F0aXZlcywgZGVwZW5kaW5nIG9uIHRoZSBiZWhhdmlvci90aW1pbmcgb2YgdGhlCitnYXJiYWdlIGNvbGxlY3Rvci4KKy0tLQorIHRlc3Qtc3VpdGUvdGVzdHMvZ2MudGVzdCB8ICAgMTEgKysrKysrLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3Rlc3Qtc3VpdGUvdGVzdHMvZ2MudGVzdCBiL3Rlc3Qtc3VpdGUvdGVzdHMvZ2MudGVzdAoraW5kZXggYTk2OTc1Mi4uOGM4ZTEzZSAxMDA2NDQKKy0tLSBhL3Rlc3Qtc3VpdGUvdGVzdHMvZ2MudGVzdAorKysrIGIvdGVzdC1zdWl0ZS90ZXN0cy9nYy50ZXN0CitAQCAtODQsMTEgKzg0LDEzIEBACisgICAgICAgOzsgb25lIGdjIHJvdW5kLiBub3Qgc3VyZSB3aHkuCisgCisgICAgICAgKG1heWJlLWdjLWZsYWtpbmVzcworLSAgICAgICAoPSAobGV0IGxwICgoaSAwKSkKKy0gICAgICAgICAgICAoaWYgKGd1YXJkKQorLSAgICAgICAgICAgICAgICAobHAgKDErIGkpKQorLSAgICAgICAgICAgICAgICBpKSkKKy0gICAgICAgICAgdG90YWwpKSkpCisrICAgICAgIChvciAoPSAobGV0IGxwICgoaSAwKSkKKysgICAgICAgICAgICAgICAgKGlmIChndWFyZCkKKysgICAgICAgICAgICAgICAgICAgIChscCAoMSsgaSkpCisrICAgICAgICAgICAgICAgICAgICBpKSkKKysgICAgICAgICAgICAgIHRvdGFsKQorKyAgICAgICAgICAgKHRocm93ICd1bnJlc29sdmVkKSkpKSkKKysKKyAKKyAgIChwYXNzLWlmICJMZXhpY2FsIHZhcnMgYXJlIGNvbGxlY3RhYmxlIgorICAgICAobGV0ICgobCAoY29tcGlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZGViaWFuLzAwMDMtTWFyay1tdXRleC13aXRoLW93bmVyLW5vdC1yZXRhaW5lZC10aHJlYWRzLXRlc3QtYXMtdS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAzLU1hcmstbXV0ZXgtd2l0aC1vd25lci1ub3QtcmV0YWluZWQtdGhyZWFkcy10ZXN0LWFzLXUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRiZTNiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAzLU1hcmstbXV0ZXgtd2l0aC1vd25lci1ub3QtcmV0YWluZWQtdGhyZWFkcy10ZXN0LWFzLXUucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZWJpYW4gcGF0Y2hdCisKK1NpZ25lZC1PZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK0Zyb20gODQ4NTQzMDkxZDU1ZGRkYjU0YTg1NjEyMTU1OTY0NTA2ZDcxMjg1MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYiBCcm93bmluZyA8cmxiQGRlZmF1bHR2YWx1ZS5vcmc+CitEYXRlOiBTdW4sIDE4IE1hciAyMDEyIDEzOjI4OjI0IC0wNTAwCitTdWJqZWN0OiBNYXJrICJtdXRleCB3aXRoIG93bmVyIG5vdCByZXRhaW5lZCIgdGhyZWFkcyB0ZXN0IGFzIHVucmVzb2x2ZWQuCisKK0FzIHBlciBkaXNjdXNzaW9uIHdpdGggdXBzdHJlYW0sIG1hcmsgdGhpcyB0ZXN0IGFzIHVucmVzb2x2ZWQgc2luY2UgaXQKK21heSBwcm9kdWNlIGZhbHNlIG5lZ2F0aXZlcywgZGVwZW5kaW5nIG9uIHRoZSBiZWhhdmlvci90aW1pbmcgb2YgdGhlCitnYXJiYWdlIGNvbGxlY3Rvci4KKy0tLQorIHRlc3Qtc3VpdGUvdGVzdHMvdGhyZWFkcy50ZXN0IHwgICAgNiArKysrLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3Rlc3Qtc3VpdGUvdGVzdHMvdGhyZWFkcy50ZXN0IGIvdGVzdC1zdWl0ZS90ZXN0cy90aHJlYWRzLnRlc3QKK2luZGV4IDg1YTdjMzguLjUwODk5Y2IgMTAwNjQ0CistLS0gYS90ZXN0LXN1aXRlL3Rlc3RzL3RocmVhZHMudGVzdAorKysrIGIvdGVzdC1zdWl0ZS90ZXN0cy90aHJlYWRzLnRlc3QKK0BAIC00MTQsOCArNDE0LDEwIEBACisgCisgICAgICAgICAgICAgKGdjKSAoZ2MpCisgICAgICAgICAgICAgKGxldCAoKG0gKGcpKSkKKy0gICAgICAgICAgICAgIChhbmQgKG11dGV4PyBtKQorLSAgICAgICAgICAgICAgICAgICAoZXE/IChtdXRleC1vd25lciBtKSAoY3VycmVudC10aHJlYWQpKSkpKSkpCisrICAgICAgICAgICAgICAob3IKKysgICAgICAgICAgICAgICAoYW5kIChtdXRleD8gbSkKKysgICAgICAgICAgICAgICAgICAgIChlcT8gKG11dGV4LW93bmVyIG0pIChjdXJyZW50LXRocmVhZCkpKQorKyAgICAgICAgICAgICAgICh0aHJvdyAndW5yZXNvbHZlZCkpKSkpKQorIAorICAgICAgIDs7CisgICAgICAgOzsgbXV0ZXggbG9jayBsZXZlbHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2d1aWxlXzIuMC42X2ZpeF9zZWRfZXJyb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9ndWlsZV8yLjAuNl9maXhfc2VkX2Vycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZGMyMjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9ndWlsZV8yLjAuNl9maXhfc2VkX2Vycm9yLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGlzIGZpeGVzIHNlZCBpc3N1ZSB3aGVuIHByZWZpeCBoYXMgLyBpbiBpdCwgbGlrZSAvdXNyL2xvY2FsCisKK2F1dG9yZWNvbmYgZXJyb3IgYXZvaWRlZDoKK3wgc2VkOiAtZSBleHByZXNzaW9uICMxLCBjaGFyIDk6IHVua25vd24gb3B0aW9uIHRvIGBzJworfCBjb25maWd1cmUuYWM6Mzk6IGVycm9yOiBBQ19JTklUIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBwYWNrYWdlIGFuZCB2ZXJzaW9uIGFyZ3VtZW50cworCitTaWduZWQtT2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wMQorCitJbmRleDogZ3VpbGUtMi4wLjUvYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd1aWxlLTIuMC41Lm9yaWcvYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbgorKysrIGd1aWxlLTIuMC41L2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KK0BAIC0xODcsNyArMTg3LDcgQEAgZWxzZQorICAgICB2PVVOS05PV04KKyBmaQorIAorLXY9YGVjaG8gIiR2IiB8c2VkICJzL14kcHJlZml4Ly8iYAorK3Y9YGVjaG8gIiR2IiB8c2VkICJzI14kcHJlZml4IyMiYAorIAorICMgVGVzdCB3aGV0aGVyIHRvIGFwcGVuZCB0aGUgIi1kaXJ0eSIgc3VmZml4IG9ubHkgaWYgdGhlIHZlcnNpb24KKyAjIHN0cmluZyB3ZSdyZSB1c2luZyBjYW1lIGZyb20gZ2l0LiAgSS5lLiwgc2tpcCB0aGUgdGVzdCBpZiBpdCdzICJVTktOT1dOIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvbGliZ3VpbGUtTWFrZWZpbGUuYW0taG9vay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2xpYmd1aWxlLU1ha2VmaWxlLmFtLWhvb2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwYjlkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2xpYmd1aWxlLU1ha2VmaWxlLmFtLWhvb2sucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSA5YzRlMTIwYTdhODdkYjM0ZDIyYTUwODgzYTVhNTI1MTcwYjQ4MGQ3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDYgSmFuIDIwMTUgMjM6MTA6NTEgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gbGliZ3VpbGUvTWFrZWZpbGUuYW06IGluc3RhbGwtZGF0YS1ob29rIC0+IGluc3RhbGwtZXhlYy1ob29rCisKK0l0IG1heSBpbnN0YWxsIHN1Y2ggYSBmaWxlOgorL3Vzci9saWI2NC9saWJndWlsZS0yLjAqLWdkYi5zY20KKworVGhpcyBpcyBiZWNhdXNlIHdoZW4gdGhlcmUgaXMgbm8gZmlsZSBpbiB0aGUgZGlyZWN0b3J5OgorZm9yIGYgaW4gbGliZ3VpbGUtMi4wKjsgZG8KKyAgICBbc25pcF0KK2RvbmUKKworVGhlIGYgd291bGQgYmUgbGliZ3VpbGUtMi4wKiBpdHNlbGYsIHVzZSBpbnN0YWxsLWV4ZWMtaG9vayB3aWxsIGZpeCB0aGUKK3Byb2JsZW0gc2luY2UgaXQgZGVwZW5kcyBvbiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJndWlsZS9NYWtlZmlsZS5hbSB8ICAgIDQgKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmd1aWxlL01ha2VmaWxlLmFtIGIvbGliZ3VpbGUvTWFrZWZpbGUuYW0KK2luZGV4IDVkZWNkOTkuLjUyNjQ1YjcgMTAwNjQ0CistLS0gYS9saWJndWlsZS9NYWtlZmlsZS5hbQorKysrIGIvbGliZ3VpbGUvTWFrZWZpbGUuYW0KK0BAIC00NDYsMTAgKzQ0Niw4IEBAIEVYVFJBX2xpYmd1aWxlX0BHVUlMRV9FRkZFQ1RJVkVfVkVSU0lPTkBfbGFfU09VUkNFUyA9IF9zY20uaAkJXAorICMjIGRlbGV0ZSBndWlsZS1zbmFyZi5hd2sgZnJvbSB0aGUgaW5zdGFsbGF0aW9uIGJpbmRpciwgaW4gY2FzZSBpdCdzCisgIyMgbGluZ2VyaW5nIHRoZXJlIGR1ZSB0byBhbiBlYXJsaWVyIGd1aWxlIHZlcnNpb24gbm90IGhhdmluZyBiZWVuCisgIyMgd2lwZWQgb3V0LgorLWluc3RhbGwtZXhlYy1ob29rOgorK2luc3RhbGwtZXhlYy1ob29rOiBsaWJndWlsZS0yLjAtZ2RiLnNjbQorIAlybSAtZiAkKERFU1RESVIpJChiaW5kaXIpL2d1aWxlLXNuYXJmLmF3aworLQorLWluc3RhbGwtZGF0YS1ob29rOiBsaWJndWlsZS0yLjAtZ2RiLnNjbQorIAlAJChNS0RJUl9QKSAkKERFU1RESVIpJChsaWJkaXIpCisgIyMgV2Ugd2FudCB0byBpbnN0YWxsIGxpYmd1aWxlLTIuMC1nZGIuc2NtIGFzIFNPTUVUSElORy1nZGIuc2NtLgorICMjIFNPTUVUSElORyBpcyB0aGUgZnVsbCBuYW1lIG9mIHRoZSBmaW5hbCBsaWJyYXJ5LiAgV2Ugd2FudCB0byBpZ25vcmUKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9saWJndWlsZS1WTS1BU01fTVVMLWZvci1BUk0tQWRkLWVhcmx5Y2xvYmJlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2xpYmd1aWxlLVZNLUFTTV9NVUwtZm9yLUFSTS1BZGQtZWFybHljbG9iYmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MDA1OWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9saWJndWlsZS1WTS1BU01fTVVMLWZvci1BUk0tQWRkLWVhcmx5Y2xvYmJlci5wYXRjaApAQCAtMCwwICsxLDQzIEBACitGcm9tIGE4NWM3OGVhMTM5Mzk4NWZkYjZlNjY3OGRlYTE5MTM1YzU1M2QzNDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJrIEggV2VhdmVyIDxtaHdAbmV0cmlzLm9yZz4KK0RhdGU6IEZyaSwgMTkgU2VwIDIwMTQgMjE6MTg6MDkgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gVk06IEFTTV9NVUwgZm9yIEFSTTogQWRkIGVhcmx5Y2xvYmJlciBjb25zdHJhaW50IHRvIHRoZSBTTVVMTAorIG91dHB1dHMuCisKK1JlcG9ydGVkIGJ5IFJvYiBCcm93bmluZyA8cmxiQGRlZmF1bHR2YWx1ZS5vcmc+LgorCisqIGxpYmd1aWxlL3ZtLWktc2NoZW1lLmMgKEFTTV9NVUwpW0FSTV06IEFkZCBlYXJseWNsb2JiZXIgKCYpIGNvbnN0cmFpbnQKKyAgdG8gdGhlIFNNVUxMIG91dHB1dCByZWdpc3RlcnMuCisKK0F1dGhvcjogTWFyayBIIFdlYXZlciA8bWh3QG5ldHJpcy5vcmc+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmd1aWxlL3ZtLWktc2NoZW1lLmMgfCA1ICsrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmd1aWxlL3ZtLWktc2NoZW1lLmMgYi9saWJndWlsZS92bS1pLXNjaGVtZS5jCitpbmRleCA1ODdhYTk1Li4xNjJlZmFiIDEwMDY0NAorLS0tIGEvbGliZ3VpbGUvdm0taS1zY2hlbWUuYworKysrIGIvbGliZ3VpbGUvdm0taS1zY2hlbWUuYworQEAgLTEsNSArMSw0IEBACistLyogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLAorLSAqICAgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDktMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgKiAKKyAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitAQCAtMzYzLDcgKzM2Miw3IEBAIFZNX0RFRklORV9GVU5DVElPTiAoMTQ5LCBnZSwgImdlPyIsIDIpCisgICAgICAgewkJCQkJCQkJCVwKKyAJc2NtX3Rfc2lnbmVkX2JpdHMgcmxvLCByaGk7CQkJCQlcCisgCWFzbSAoInNtdWxsICUwLCAlMSwgJTIsICUzXG4iCQkJCQlcCistCSAgICAgOiAiPXIiIChybG8pLCAiPXIiIChyaGkpCQkJCQlcCisrCSAgICAgOiAiPSZyIiAocmxvKSwgIj0mciIgKHJoaSkJCQkJCVwKKyAJICAgICA6ICJyIiAoU0NNX1VOUEFDSyAoeCkgLSBzY21fdGMyX2ludCksCQkJXAorIAkgICAgICAgInIiIChTQ01fSV9JTlVNICh5KSkpOwkJCQkJXAorIAlpZiAoU0NNX0xJS0VMWSAoU0NNX1NSUyAocmxvLCAzMSkgPT0gcmhpKSkJCQlcCistLSAKKzIuMy41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL29wZW5zdXNlL2d1aWxlLTY0Yml0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtNjRiaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNlMzEyZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL29wZW5zdXNlL2d1aWxlLTY0Yml0LnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3BlbnN1c2UgcGF0Y2hdCisKK1NpZ25lZC1PZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK0luZGV4OiBndWlsZS0yLjAuMy9saWJndWlsZS9oYXNoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndWlsZS0yLjAuMy5vcmlnL2xpYmd1aWxlL2hhc2guYwkyMDExLTA3LTA2IDE1OjQ5OjU5LjAwMDAwMDAwMCAtMDcwMAorKysrIGd1aWxlLTIuMC4zL2xpYmd1aWxlL2hhc2guYwkyMDEyLTAxLTEzIDIxOjQ5OjQzLjMzMjg0NDg4NCAtMDgwMAorQEAgLTI3MCw3ICsyNzAsNyBAQCBzY21faGFzaGVyKFNDTSBvYmosIHVuc2lnbmVkIGxvbmcgbiwgc2l6CisgdW5zaWduZWQgbG9uZworIHNjbV9paGFzaHEgKFNDTSBvYmosIHVuc2lnbmVkIGxvbmcgbikKKyB7CistICByZXR1cm4gKFNDTV9VTlBBQ0sgKG9iaikgPj4gMSkgJSBuOworKyAgcmV0dXJuICgodW5zaWduZWQgbG9uZykgU0NNX1VOUEFDSyAob2JqKSA+PiAxKSAlIG47CisgfQorIAorIAorQEAgLTMwNiw3ICszMDYsNyBAQCBzY21faWhhc2h2IChTQ00gb2JqLCB1bnNpZ25lZCBsb25nIG4pCisgICBpZiAoU0NNX05VTVAob2JqKSkKKyAgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKSBzY21faGFzaGVyKG9iaiwgbiwgMTApOworICAgZWxzZQorLSAgICByZXR1cm4gU0NNX1VOUEFDSyAob2JqKSAlIG47CisrICAgIHJldHVybiAodW5zaWduZWQgbG9uZykgU0NNX1VOUEFDSyAob2JqKSAlIG47CisgfQorIAorIAorSW5kZXg6IGd1aWxlLTIuMC4zL2xpYmd1aWxlL3N0cnVjdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3VpbGUtMi4wLjMub3JpZy9saWJndWlsZS9zdHJ1Y3QuYwkyMDExLTA3LTA2IDE1OjUwOjAwLjAwMDAwMDAwMCAtMDcwMAorKysrIGd1aWxlLTIuMC4zL2xpYmd1aWxlL3N0cnVjdC5jCTIwMTItMDEtMTMgMjE6NDk6NDMuMzMyODQ0ODg0IC0wODAwCitAQCAtOTQyLDcgKzk0Miw3IEBAIHNjbV9zdHJ1Y3RfaWhhc2hxIChTQ00gb2JqLCB1bnNpZ25lZCBsb24KKyB7CisgICAvKiBUaGUgbGVuZ3RoIG9mIHRoZSBoYXNoIHRhYmxlIHNob3VsZCBiZSBhIHJlbGF0aXZlIHByaW1lIGl0J3Mgbm90CisgICAgICBuZWNlc3NhcnkgdG8gc2hpZnQgZG93biB0aGUgYWRkcmVzcy4gICovCistICByZXR1cm4gU0NNX1VOUEFDSyAob2JqKSAlIG47CisrICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIFNDTV9VTlBBQ0sgKG9iaikgJSBuOworIH0KKyAKKyBTQ01fREVGSU5FIChzY21fc3RydWN0X3Z0YWJsZV9uYW1lLCAic3RydWN0LXZ0YWJsZS1uYW1lIiwgMSwgMCwgMCwgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9vcGVuc3VzZS9ndWlsZS10dXJuLW9mZi1nYy10ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtdHVybi1vZmYtZ2MtdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjAxNDg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtdHVybi1vZmYtZ2MtdGVzdC5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29wZW5zdXNlIHBhdGNoXQorCitTaWduZWQtT2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitTZWUgaHR0cDovL2RlYmJ1Z3MuZ251Lm9yZy9jZ2kvYnVncmVwb3J0LmNnaT9idWc9MTAwOTYKK3doeSB0aGlzIHRlc3QgaXMgdHVybmVkIG9mZi4KK0luZGV4OiBndWlsZS0yLjAuMy90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndWlsZS0yLjAuMy5vcmlnL3Rlc3Qtc3VpdGUvdGVzdHMvZ2MudGVzdAkyMDExLTEwLTE1IDA5OjM0OjQwLjAwMDAwMDAwMCAtMDcwMAorKysrIGd1aWxlLTIuMC4zL3Rlc3Qtc3VpdGUvdGVzdHMvZ2MudGVzdAkyMDEyLTAxLTEzIDIxOjUyOjEwLjI4MjU0MDM1NSAtMDgwMAorQEAgLTY1LDIzICs2NSwyMyBAQAorICAgICAgIGZvbykpKQorIAorIAorLSh3aXRoLXRlc3QtcHJlZml4ICJnYyIKKy0gIChwYXNzLWlmICJVbnVzZWQgbW9kdWxlcyBhcmUgcmVtb3ZlZCIKKy0gICAgKGxldCogKChndWFyZCAobWFrZS1ndWFyZGlhbikpCistICAgICAgICAgICAodG90YWwgMTAwMCkpCistCistICAgICAgKGZvci1lYWNoIChsYW1iZGEgKHgpIChndWFyZCAobWFrZS1tb2R1bGUpKSkgKGlvdGEgdG90YWwpKQorKzs7KHdpdGgtdGVzdC1wcmVmaXggImdjIgorKzs7ICAocGFzcy1pZiAiVW51c2VkIG1vZHVsZXMgYXJlIHJlbW92ZWQiCisrOzsgICAgKGxldCogKChndWFyZCAobWFrZS1ndWFyZGlhbikpCisrOzsgICAgICAgICAgICh0b3RhbCAxMDAwKSkKKys7OworKzs7ICAgICAgKGZvci1lYWNoIChsYW1iZGEgKHgpIChndWFyZCAobWFrZS1tb2R1bGUpKSkgKGlvdGEgdG90YWwpKQorIAorICAgICAgIDs7IEF2b2lkIGZhbHNlIHJlZmVyZW5jZXMgdG8gdGhlIG1vZHVsZXMgb24gdGhlIHN0YWNrLgorLSAgICAgIChzdGFjay1jbGVhbnVwIDIwKQorKzs7ICAgICAgKHN0YWNrLWNsZWFudXAgMjApCisgCistICAgICAgKGdjKQorLSAgICAgIChnYykgOzsgdHdpY2U6IGhhdmUgdG8ga2lsbCB0aGUgd2VhayB2ZWN0b3JzLgorLSAgICAgIChnYykgOzsgdGhyaWNlOiBiZWNhdXNlIHRoZSB0ZXN0IGRvZXNuJ3Qgc3VjY2VlZCB3aXRoIG9ubHkKKys7OyAgICAgIChnYykKKys7OyAgICAgIChnYykgOzsgdHdpY2U6IGhhdmUgdG8ga2lsbCB0aGUgd2VhayB2ZWN0b3JzLgorKzs7ICAgICAgKGdjKSA7OyB0aHJpY2U6IGJlY2F1c2UgdGhlIHRlc3QgZG9lc24ndCBzdWNjZWVkIHdpdGggb25seQorICAgICAgICAgICAgOzsgb25lIGdjIHJvdW5kLiBub3Qgc3VyZSB3aHkuCisgCistICAgICAgKD0gKGxldCBscCAoKGkgMCkpCistICAgICAgICAgICAoaWYgKGd1YXJkKQorLSAgICAgICAgICAgICAgIChscCAoMSsgaSkpCistICAgICAgICAgICAgICAgaSkpCistICAgICAgICAgdG90YWwpKSkpCisrOzsgICAgICAoPSAobGV0IGxwICgoaSAwKSkKKys7OyAgICAgICAgICAgKGlmIChndWFyZCkKKys7OyAgICAgICAgICAgICAgIChscCAoMSsgaSkpCisrOzsgICAgICAgICAgICAgICBpKSkKKys7OyAgICAgICAgIHRvdGFsKSkpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvd29ya2Fyb3VuZC1pY2Utc3NhLWNvcnJ1cHRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy93b3JrYXJvdW5kLWljZS1zc2EtY29ycnVwdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzM0ODM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvd29ya2Fyb3VuZC1pY2Utc3NhLWNvcnJ1cHRpb24ucGF0Y2gKQEAgLTAsMCArMSw2MCBAQAorbGliZ3VpbGUvdm0taS1zeXN0ZW0uYzogd29ya2Fyb3VuZCBpY2Ugc3NhIGNvcnJ1cHRpb24gd2hpbGUgY29tcGlsaW5nIHdpdGggb3B0aW9uIC1nIC1PCisKK1doaWxlIGNvbXBpbGluZyB3aXRoIG9wdGlvbiAtZyAtTywgdGhlcmUgd2FzIGEgc3NhIGNvcnJ1cHRpb246CisuLgorVW5hYmxlIHRvIGNvYWxlc2NlIHNzYV9uYW1lcyA0OCBhbmQgMzQ3NiB3aGljaCBhcmUgbWFya2VkIGFzIE1VU1QgQ09BTEVTQ0UuCitzcF80OChhYikgYW5kICBzcF8zNDc2KGFiKQorZ3VpbGUtMi4wLjExL2xpYmd1aWxlL3ZtLWVuZ2luZS5jOiBJbiBmdW5jdGlvbiAndm1fZGVidWdfZW5naW5lJzoKK2d1aWxlLTIuMC4xMS9saWJndWlsZS92bS5jOjY3MzoxOTogaW50ZXJuYWwgY29tcGlsZXIgZXJyb3I6IFNTQSBjb3JydXB0aW9uCisgI2RlZmluZSBWTV9OQU1FICAgdm1fZGVidWdfZW5naW5lCisgICAgICAgICAgICAgICAgICAgXgorZ3VpbGUtMi4wLjExL2xpYmd1aWxlL3ZtLWVuZ2luZS5jOjM5OjE6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyAnVk1fTkFNRScKKyBWTV9OQU1FIChTQ00gdm0sIFNDTSBwcm9ncmFtLCBTQ00gKmFyZ3YsIGludCBuYXJncykKKyBeCitQbGVhc2Ugc3VibWl0IGEgZnVsbCBidWcgcmVwb3J0LAord2l0aCBwcmVwcm9jZXNzZWQgc291cmNlIGlmIGFwcHJvcHJpYXRlLgorU2VlIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVncy5odG1sPiBmb3IgaW5zdHJ1Y3Rpb25zLgorLi4uCisKK1R3ZWFrIGxpYmd1aWxlL3ZtLWktc3lzdGVtLmMgdG8gYWRkIGJvdW5kYXJ5IHZhbHVlIGNoZWNrIHRvIHdvcmthcm91bmQgaXQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJndWlsZS92bS1pLXN5c3RlbS5jIHwgMjAgKysrKysrKysrKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmd1aWxlL3ZtLWktc3lzdGVtLmMgYi9saWJndWlsZS92bS1pLXN5c3RlbS5jCistLS0gYS9saWJndWlsZS92bS1pLXN5c3RlbS5jCisrKysgYi9saWJndWlsZS92bS1pLXN5c3RlbS5jCitAQCAtNjI1LDEwICs2MjUsMjIgQEAgVk1fREVGSU5FX0lOU1RSVUNUSU9OICg0NywgYmluZF9vcHRpb25hbHNfc2h1ZmZsZSwgImJpbmQtb3B0aW9uYWxzL3NodWZmbGUiLCA2LAorICAgLyogbm93IHNodWZmbGUgdXAsIGZyb20gd2FsayB0byBudG90YWwgKi8KKyAgIHsKKyAgICAgc2NtX3RfcHRyZGlmZiBuc2h1ZiA9IHNwIC0gd2FsayArIDEsIGk7CistICAgIHNwID0gKGZwIC0gMSkgKyBudG90YWwgKyBuc2h1ZjsKKy0gICAgQ0hFQ0tfT1ZFUkZMT1cgKCk7CistICAgIGZvciAoaSA9IDA7IGkgPCBuc2h1ZjsgaSsrKQorLSAgICAgIHNwWy1pXSA9IHdhbGtbbnNodWYtaS0xXTsKKysgICAgLyogY2hlY2sgdGhlIHZhbHVlIG9mIG5zaHVmIHRvIHdvcmthcm91bmQgaWNlIHNzYSBjb3JydXB0aW9uICovCisrICAgIC8qIHdoaWxlIGNvbXBpbGluZyB3aXRoIC1PIC1nICovCisrICAgIGlmIChuc2h1ZiA+IDApCisrICAgIHsKKysgICAgICBzcCA9IChmcCAtIDEpICsgbnRvdGFsICsgbnNodWY7CisrICAgICAgQ0hFQ0tfT1ZFUkZMT1cgKCk7CisrICAgICAgZm9yIChpID0gMDsgaSA8IG5zaHVmOyBpKyspCisrICAgICAgICBzcFstaV0gPSB3YWxrW25zaHVmLWktMV07CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgc3AgPSAoZnAgLSAxKSArIG50b3RhbCArIG5zaHVmOworKyAgICAgIENIRUNLX09WRVJGTE9XICgpOworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBuc2h1ZjsgaSsrKQorKyAgICAgICAgc3BbLWldID0gd2Fsa1tuc2h1Zi1pLTFdOworKyAgICB9CisgICB9CisgICAvKiBhbmQgZmlsbCBvcHRpb25hbHMgJiBrZXl3b3JkIGFyZ3Mgd2l0aCBTQ01fVU5ERUZJTkVEICovCisgICB3aGlsZSAod2FsayA8PSAoZnAgLSAxKSArIG50b3RhbCkKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZ3VpbGVfMi4wLjExLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZ3VpbGVfMi4wLjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4Njk2OTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9ndWlsZV8yLjAuMTEuYmIKQEAgLTAsMCArMSwxMTEgQEAKK1NVTU1BUlkgPSAiR3VpbGUgaXMgdGhlIEdOVSBVYmlxdWl0b3VzIEludGVsbGlnZW50IExhbmd1YWdlIGZvciBFeHRlbnNpb25zIgorREVTQ1JJUFRJT04gPSAiR3VpbGUgaXMgdGhlIEdOVSBVYmlxdWl0b3VzIEludGVsbGlnZW50IExhbmd1YWdlIGZvciBFeHRlbnNpb25zLFwKKyB0aGUgb2ZmaWNpYWwgZXh0ZW5zaW9uIGxhbmd1YWdlIGZvciB0aGUgR05VIG9wZXJhdGluZyBzeXN0ZW0uXAorIEd1aWxlIGlzIGEgbGlicmFyeSBkZXNpZ25lZCB0byBoZWxwIHByb2dyYW1tZXJzIGNyZWF0ZSBmbGV4aWJsZSBhcHBsaWNhdGlvbnMuXAorIFVzaW5nIEd1aWxlIGluIGFuIGFwcGxpY2F0aW9uIGFsbG93cyB0aGUgYXBwbGljYXRpb24ncyBmdW5jdGlvbmFsaXR5IHRvIGJlXAorIGV4dGVuZGVkIGJ5IHVzZXJzIG9yIG90aGVyIHByb2dyYW1tZXJzIHdpdGggcGx1Zy1pbnMsIG1vZHVsZXMsIG9yIHNjcmlwdHMuXAorIEd1aWxlIHByb3ZpZGVzIHdoYXQgbWlnaHQgYmUgZGVzY3JpYmVkIGFzICdwcmFjdGljYWwgc29mdHdhcmUgZnJlZWRvbSwnXAorIG1ha2luZyBpdCBwb3NzaWJsZSBmb3IgdXNlcnMgdG8gY3VzdG9taXplIGFuIGFwcGxpY2F0aW9uIHRvIG1lZXQgdGhlaXJcCisgbmVlZHMgd2l0aG91dCBkaWdnaW5nIGludG8gdGhlIGFwcGxpY2F0aW9uJ3MgaW50ZXJuYWxzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2d1aWxlLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9ndWlsZS9ndWlsZS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vZGViaWFuLzAwMDItTWFyay1VbnVzZWQtbW9kdWxlcy1hcmUtcmVtb3ZlZC1nYy10ZXN0LWFzLXVucmVzb2x2ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vMDAwMy1NYXJrLW11dGV4LXdpdGgtb3duZXItbm90LXJldGFpbmVkLXRocmVhZHMtdGVzdC1hcy11LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL29wZW5zdXNlL2d1aWxlLTY0Yml0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2d1aWxlXzIuMC42X2ZpeF9zZWRfZXJyb3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXJtX2VuZGlhbm5lc3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXJtX2FhcmNoNjQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vd29ya2Fyb3VuZC1pY2Utc3NhLWNvcnJ1cHRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGliZ3VpbGUtTWFrZWZpbGUuYW0taG9vay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJndWlsZS1WTS1BU01fTVVMLWZvci1BUk0tQWRkLWVhcmx5Y2xvYmJlci5wYXRjaCBcCisgICAgICAgICAgICIKKworIyAgICAgICAgICAgZmlsZTovL2RlYmlhbi8wMDAxLUNoYW5nZS1ndWlsZS10by1ndWlsZS1YLlktZm9yLWluZm8tcGFnZXMucGF0Y2gKKyMgICAgICAgICAgIGZpbGU6Ly9vcGVuc3VzZS9ndWlsZS10dXJuLW9mZi1nYy10ZXN0LnBhdGNoCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwM2YxYmNlMWE0OTgzMDc2ZDk1NTAwMzQ3MjMwNmExMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhZWQwYTRhNmRiNGUzMTBjYmRmZWIzNjEzZmE2Zjg2ZmRkYzkxZWY2MjRjMWUzZjg5MzdhNjMwNGM2OTEwM2UyIgorCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnIHRleGluZm8KK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitERVBFTkRTID0gImxpYnVuaXN0cmluZyBiZHdnYyBnbXAgbGlidG9vbCBsaWJmZmkgbmN1cnNlcyByZWFkbGluZSIKKyMgYWRkIGd1aWxlLW5hdGl2ZSBvbmx5IHRvIHRoZSB0YXJnZXQgcmVjaXBlJ3MgREVQRU5EUworREVQRU5EU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBndWlsZS1uYXRpdmUgbGliYXRvbWljLW9wcyIKKworUkRFUEVORFNfJHtQTn1fYXBwZW5kX2xpYmMtZ2xpYmNfY2xhc3MtdGFyZ2V0ID0gImdsaWJjLWdjb252LWlzbzg4NTktMSIKKworRVhUUkFfT0VDT05GICs9ICIke0BbJy0td2l0aG91dC1saWJsdGRsLXByZWZpeCAtLXdpdGhvdXQtbGliZ21wLXByZWZpeCAtLXdpdGhvdXQtbGlicmVhZGxpbmUtcHJlZml4JywgJyddW2JiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsZCldfSIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIC0td2l0aC1saWJ1bmlzdHJpbmctcHJlZml4PSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtbGliZ21wLXByZWZpeD0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLWxpYmx0ZGwtcHJlZml4PSR7U1RBR0lOR19MSUJESVJ9IgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlta2RpciAtcCBwbworfQorCitleHBvcnQgR1VJTEVfRk9SX0JVSUxEPSIke0JVSUxEX1NZU30tZ3VpbGUiCisKK2RvX2NvbXBpbGVfYXBwZW5kKCkgeworCSMganVzdCBmb3IgdGFyZ2V0IHJlY2lwZQorCWlmIFsgIiR7UE59IiA9ICJndWlsZSIgXQorCXRoZW4KKwkJc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0RJUl9UQVJHRVR9OjpnIFwKKwkgICAgICAgICAgICAgICAtZSBzOi8ke1RBUkdFVF9TWVN9OjpnIFwKKwkgICAgICAgICAgICAgICAtZSBzOi1ML3Vzci9saWI6OmcgXAorICAgICAgICAJICAgICAgIC1lIHM6LWlzeXN0ZW0vdXNyL2luY2x1ZGU6OmcgXAorCSAgICAgICAgICAgICAgIC1lIHM6LC91c3IvbGliOixcJFx7bGliZGlyXH06ZyBcCisJICAgICAgICAgICAgICAgICAgbWV0YS9ndWlsZS0yLjAucGMKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJaW5zdGFsbCAtbSAwNzU1ICAke0R9JHtiaW5kaXJ9L2d1aWxlICR7RH0ke2JpbmRpcn0vJHtIT1NUX1NZU30tZ3VpbGUKKworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2d1aWxlIFwKKwkJR1VJTEVfTE9BRF9QQVRIPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ3VpbGUvMi4wIFwKKwkJR1VJTEVfTE9BRF9DT01QSUxFRF9QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ndWlsZS8yLjAvY2NhY2hlCisJY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS8ke0hPU1RfU1lTfS1ndWlsZSBcCisJCUdVSUxFX0xPQURfUEFUSD0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2d1aWxlLzIuMCBcCisJCUdVSUxFX0xPQURfQ09NUElMRURfUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ3VpbGUvMi4wL2NjYWNoZQorfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgPSAiZ3VpbGVfY3Jvc3NfY29uZmlnIgorCitndWlsZV9jcm9zc19jb25maWcoKSB7CisJIyB0aGlzIGlzIG9ubHkgZm9yIHRhcmdldCByZWNpcGUKKwlpZiBbICIke1BOfSIgPSAiZ3VpbGUiIF0KKwl0aGVuCisJICAgICAgICAjIENyZWF0ZSBndWlsZS1jb25maWcgcmV0dXJuaW5nIHRhcmdldCB2YWx1ZXMgaW5zdGVhZCBvZiBuYXRpdmUgdmFsdWVzCisJICAgICAgICBpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9CisgICAgICAgIAllY2hvICcjISdgd2hpY2ggJHtCVUlMRF9TWVN9LWd1aWxlYCQnIFxcXG4tLW5vLWF1dG8tY29tcGlsZSAtZSBtYWluIC1zXG4hI1xuKGRlZmluZSAlZ3VpbGUtYnVpbGQtaW5mbyAnXCdcKCBcCisJCQk+ICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzCisJICAgICAgICBzZWQgLW4gLWUgJ3M6XlsgXHRdKntbIFx0XSoiOiAgKDonIFwKKwkJCS1lICdzOiIsWyBcdF0qIjogLiAiOicgXAorCQkJLWUgJ3M6IiAqfSwgKlxcOiIpOicgXAorCQkJLWUgJ3M6Xi4qY2FjaGVkaXIuKiQ6OicgXAorCQkJLWUgJy9eICAoL3AnIFwKKwkJCTwgJHtCfS9saWJndWlsZS9saWJwYXRoLmggPj4gJHtCfS9ndWlsZS1jb25maWcuY3Jvc3MKKwkgICAgICAgIGVjaG8gJykpJyA+PiAke0J9L2d1aWxlLWNvbmZpZy5jcm9zcworCSAgICAgICAgY2F0ICR7Qn0vbWV0YS9ndWlsZS1jb25maWcgPj4gJHtCfS9ndWlsZS1jb25maWcuY3Jvc3MKKwkgICAgICAgIGluc3RhbGwgJHtCfS9ndWlsZS1jb25maWcuY3Jvc3MgJHtTVEFHSU5HX0JJTkRJUl9DUk9TU30vZ3VpbGUtY29uZmlnCisJZmkKK30KKworIyBHdWlsZSBuZWVkcyB0aGUgY29tcGlsZWQgZmlsZXMgdG8gYmUgbmV3ZXIgdGhhbiB0aGUgc291cmNlLCBhbmQgaXQgd29uJ3QKKyMgYXV0by1jb21waWxlIGludG8gdGhlIHByZWZpeCBldmVuIGlmIGl0IGNhbiB3cml0ZSB0aGVyZSwgc28gdG91Y2ggdGhlbSBoZXJlIGFzCisjIHN5c3Jvb3QgaXMgbWFuYWdlZC4KK1NTVEFURVBPU1RJTlNURlVOQ1MgKz0gImd1aWxlX3NzdGF0ZV9wb3N0aW5zdCIKK2d1aWxlX3NzdGF0ZV9wb3N0aW5zdCgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorICAgICAgICAgICAgICAgIGZpbmQgJHtTVEFHSU5HX0RJUl9UQVJHRVR9LyR7bGliZGlyfS9ndWlsZS8yLjAvY2NhY2hlIC10eXBlIGYgfCB4YXJncyB0b3VjaAorCWZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsdC9maWxlcy9ndWlsdC1iYXNoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbHQvZmlsZXMvZ3VpbHQtYmFzaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGE0MzllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbHQvZmlsZXMvZ3VpbHQtYmFzaC5wYXRjaApAQCAtMCwwICsxLDI4OCBAQAorZ3VpbHQ6IGV4cGxpY2l0bHkgY2FsbCBmb3IgYmFzaAorCitSdW5uaW5nIGNvbXBsZXggZ3VpbHQgc3RhY2tzIG9mIHBhdGNoZXMvY29tbWl0cyBjYW4gY2F1c2UgaW50ZXJlc3RpbmcKK2ZhaWx1cmVzIGFmdGVyIH4yMG0gb2YgcHJvY2Vzc2luZywgd2l0aCBlcnJvcnMgbGlrZSAiQmFkIHN1YnN0aXR1dGlvbiIuCisKK1RoZXNlIGhhdmUgYmVlbiB0cmFjZWQgYmFjayB0byBoYXZpbmcgL2Jpbi9zaCAtLT4gIC9iaW4vZGFzaCBvbiBVYnVudHUKK3N5c3RlbXMuICBQdXR0aW5nIGEgc2hlbGwgdGhhdCBhY3R1YWxseSAqd29ya3MqIChzdWNoIGFzIC9iaW4vYmFzaCkKK2luIGFzIC9iaW4vc2ggbWFrZXMgdGhlIHByb2JsZW0gZ28gYXdheS4gIFNvIGhlcmUgd2UgY2hhbmdlIHRoZSBndWlsdAorc2NyaXB0cyB0byBleHBsaWNpdGx5IGNhbGwgZm9yIGJhc2ggdG8gZW5zdXJlIHdlIGRvbid0IGhhdmUgYSBzaW1pbGFyCitpc3N1ZSBhZnRlciBkZXBsb3ltZW50LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lLXNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KKworLS0tCisgZ3VpbHQgICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1hZGQgICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWFwcGxpZWQgICAgICAgfCAgICAyICstCisgZ3VpbHQtYnJhbmNoICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1kZWxldGUgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWRpZmYgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtZXhwb3J0ICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1maWxlcyAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWZvbGQgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtZm9yayAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1ncmFwaCAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWhlYWRlciAgICAgICAgfCAgICAyICstCisgZ3VpbHQtaGVscCAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1pbXBvcnQgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWltcG9ydC1jb21taXQgfCAgICAyICstCisgZ3VpbHQtaW5pdCAgICAgICAgICB8ICAgIDQgKystLQorIGd1aWx0LW5ldyAgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtbmV4dCAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1wYXRjaGJvbWIgICAgIHwgICAgMiArLQorIGd1aWx0LXBvcCAgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtcHJldiAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1wdXNoICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LXJlYmFzZSAgICAgICAgfCAgICAyICstCisgZ3VpbHQtcmVmcmVzaCAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1ybSAgICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LXNlcmllcyAgICAgICAgfCAgICAyICstCisgZ3VpbHQtc3RhdHVzICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC10b3AgICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LXVuYXBwbGllZCAgICAgfCAgICAyICstCisgMjkgZmlsZXMgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKSwgMzAgZGVsZXRpb25zKC0pCisKKy0tLSBhL2d1aWx0CisrKysgYi9ndWlsdAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNi0yMDEwCisgIworLS0tIGEvZ3VpbHQtYWRkCisrKysgYi9ndWlsdC1hZGQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1hcHBsaWVkCisrKysgYi9ndWlsdC1hcHBsaWVkCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtYnJhbmNoCisrKysgYi9ndWlsdC1icmFuY2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDctMjAwOAorICMKKy0tLSBhL2d1aWx0LWRlbGV0ZQorKysrIGIvZ3VpbHQtZGVsZXRlCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtZGlmZgorKysrIGIvZ3VpbHQtZGlmZgorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKEMpIDIwMDcgSm9zZWYgJ0plZmYnIFNpcGVrIDxqZWZmcGNAam9zZWZzaXBlay5uZXQ+CisgIworLS0tIGEvZ3VpbHQtZXhwb3J0CisrKysgYi9ndWlsdC1leHBvcnQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBQaWVycmUgSGFib3V6aXQsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1maWxlcworKysrIGIvZ3VpbHQtZmlsZXMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChDKSAyMDA3IFlhc3VzaGkgU0hPSkkgPHlhc2hpQGF0bWFyay10ZWNobm8uY29tPgorICMKKy0tLSBhL2d1aWx0LWZvbGQKKysrKyBiL2d1aWx0LWZvbGQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1mb3JrCisrKysgYi9ndWlsdC1mb3JrCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA3CisgIworLS0tIGEvZ3VpbHQtZ3JhcGgKKysrKyBiL2d1aWx0LWdyYXBoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA3CisgIworLS0tIGEvZ3VpbHQtaGVhZGVyCisrKysgYi9ndWlsdC1oZWFkZXIKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYtMjAxMAorICMKKy0tLSBhL2d1aWx0LWhlbHAKKysrKyBiL2d1aWx0LWhlbHAKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDcKKyAjCistLS0gYS9ndWlsdC1pbXBvcnQKKysrKyBiL2d1aWx0LWltcG9ydAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNworICMKKy0tLSBhL2d1aWx0LWltcG9ydC1jb21taXQKKysrKyBiL2d1aWx0LWltcG9ydC1jb21taXQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDcKKyAjCistLS0gYS9ndWlsdC1pbml0CisrKysgYi9ndWlsdC1pbml0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworQEAgLTMxLDcgKzMxLDcgQEAgdG91Y2ggIiRHVUlMVF9ESVIvJGJyYW5jaC9zdGF0dXMiCisgCisgbWtkaXIgLXAgIiRHSVRfRElSL2hvb2tzL2d1aWx0IgorIGNhdCA+ICIkR0lUX0RJUi9ob29rcy9ndWlsdC9kZWxldGUiIDw8RU9GCistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjIFVzYWdlOiA8c2NyaXB0PiA8cGF0Y2ggYmVpbmcgcmVtb3ZlZD4KKyAKKyBlY2hvICJSZW1vdmluZyBwYXRjaCAnXCQxJy4uLiIKKy0tLSBhL2d1aWx0LW5ldworKysrIGIvZ3VpbHQtbmV3CitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtbmV4dAorKysrIGIvZ3VpbHQtbmV4dAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LXBhdGNoYm9tYgorKysrIGIvZ3VpbHQtcGF0Y2hib21iCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA3CisgIworLS0tIGEvZ3VpbHQtcG9wCisrKysgYi9ndWlsdC1wb3AKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1wcmV2CisrKysgYi9ndWlsdC1wcmV2CitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtcHVzaAorKysrIGIvZ3VpbHQtcHVzaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LXJlYmFzZQorKysrIGIvZ3VpbHQtcmViYXNlCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA3CisgIworLS0tIGEvZ3VpbHQtcmVmcmVzaAorKysrIGIvZ3VpbHQtcmVmcmVzaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LXJtCisrKysgYi9ndWlsdC1ybQorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LXNlcmllcworKysrIGIvZ3VpbHQtc2VyaWVzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtc3RhdHVzCisrKysgYi9ndWlsdC1zdGF0dXMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC10b3AKKysrKyBiL2d1aWx0LXRvcAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LXVuYXBwbGllZAorKysrIGIvZ3VpbHQtdW5hcHBsaWVkCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbHQvZ3VpbHQtbmF0aXZlX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWx0L2d1aWx0LW5hdGl2ZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzYzY4YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWx0L2d1aWx0LW5hdGl2ZV9naXQuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJxdWlsdC1saWtlIHRvb2wgZm9yIEdpdCIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI2ZjM0MDBkYzFhMDFjZWJhZmU4YTUyYjNmMzQ0MTM1IgorCitpbmhlcml0IG5hdGl2ZQorCitTUkNfVVJJID0gImdpdDovL3JlcG8ub3IuY3ovZ3VpbHQuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2d1aWx0LWJhc2gucGF0Y2ggXAorICAgICAgICAgICAiCitQViA9ICIwLjM1K2dpdCR7U1JDUFZ9IgorU1JDUkVWID0gImMyYTViYWU1MTFjNmQ1MzU0YWE0ZTFjYjU5MDY5YzMxZGYyYjhlZWIiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKKyMgd2UgZG9uJ3QgY29tcGlsZSwgd2UganVzdCBpbnN0YWxsCitkb19jb21waWxlKCkgeworCToKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIFBSRUZJWD0ke0R9LyR7cHJlZml4fSBpbnN0YWxsCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9oZWxwMm1hbi9oZWxwMm1hbi1uYXRpdmVfMS40Ny4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaGVscDJtYW4vaGVscDJtYW4tbmF0aXZlXzEuNDcuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzZkNTBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaGVscDJtYW4vaGVscDJtYW4tbmF0aXZlXzEuNDcuMS5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIlByb2dyYW0gZm9yIGNyZWF0aW5nIHNpbXBsZSBtYW4gcGFnZXMiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorREVQRU5EUyA9ICJhdXRvY29uZi1uYXRpdmUgYXV0b21ha2UtbmF0aXZlIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjZjdhYWFlZWE0MGJmZjExNzZkZjgyNTQzMDY5NDE3MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNTliMjZmNjBjYjA2ZTQ1YjAwZTcyOWRlYTcyMWU3YTE3MjIwZTJjMTdkODAwZWI0MjgyNzFhNzUwMzgyYjA2IgorCitpbmhlcml0IGF1dG90b29scyBuYXRpdmUKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1ubHMiCisKKyMgV2UgZG9uJ3Qgd2FudCB0byByZWNvbmZpZ3VyZSB0aGluZ3MgYXMgaXQgd291bGQgcmVxdWlyZSAncGVybG5hdGl2ZScgdG8gYmUKKyMgdXNlZC4KK2RvX2NvbmZpZ3VyZSgpIHsKKwlvZV9ydW5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwkjIE1ha2Ugc3VyZSB3ZSB1c2UgL3Vzci9iaW4vZW52IHBlcmwKKwlzZWQgLWkgLWUgIjFzOiMhLio6IyEgL3Vzci9iaW4vZW52IHBlcmw6IiAke0R9JHtiaW5kaXJ9L2hlbHAybWFuCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pMmMtdG9vbHMvZmlsZXMvTW9kdWxlLm1rIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaTJjLXRvb2xzL2ZpbGVzL01vZHVsZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2FmNzJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaTJjLXRvb2xzL2ZpbGVzL01vZHVsZS5tawpAQCAtMCwwICsxLDcyIEBACisjIEVFUFJPTUVSCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworRUVQUk9NRVJfRElSCTo9IGVlcHJvbWVyCisKK0VFUFJPTUVSX0NGTEFHUwk6PSAtV3N0cmljdC1wcm90b3R5cGVzIC1Xc2hhZG93IC1XcG9pbnRlci1hcml0aCAtV2Nhc3QtcXVhbCBcCisJCSAgIC1XY2FzdC1hbGlnbiAtV3dyaXRlLXN0cmluZ3MgLVduZXN0ZWQtZXh0ZXJucyAtV2lubGluZSBcCisJCSAgIC1XIC1XdW5kZWYgLVdtaXNzaW5nLXByb3RvdHlwZXMgLUlpbmNsdWRlCisKK0VFUFJPTUVSX1RBUkdFVFMJOj0gZWVwcm9tZXIgZWVwcm9tIGVlcHJvZworCisjCisjIFByb2dyYW1zCisjCisKKyQoRUVQUk9NRVJfRElSKS9lZXByb21lcjogJChFRVBST01FUl9ESVIpL2VlcHJvbWVyLm8KKwkkKENDKSAkKExERkxBR1MpIC1vICRAICReCisKKyQoRUVQUk9NRVJfRElSKS9lZXByb206ICQoRUVQUk9NRVJfRElSKS9lZXByb20ubworCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJF4KKworJChFRVBST01FUl9ESVIpL2VlcHJvZzogJChFRVBST01FUl9ESVIpL2VlcHJvZy5vICQoRUVQUk9NRVJfRElSKS8yNGNYWC5vIAorCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJF4KKworIworIyBPYmplY3RzCisjCisKKyQoRUVQUk9NRVJfRElSKS9lZXByb21lci5vOiAkKEVFUFJPTUVSX0RJUikvZWVwcm9tZXIuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKEVFUFJPTUVSX0NGTEFHUykgLWMgJDwgLW8gJEAKKworJChFRVBST01FUl9ESVIpL2VlcHJvbS5vOiAkKEVFUFJPTUVSX0RJUikvZWVwcm9tLmMKKwkkKENDKSAkKENGTEFHUykgJChFRVBST01FUl9DRkxBR1MpIC1jICQ8IC1vICRACisKKyQoRUVQUk9NRVJfRElSKS9lZXByb2cubzogJChFRVBST01FUl9ESVIpL2VlcHJvZy5jCisJJChDQykgJChDRkxBR1MpICQoRUVQUk9NRVJfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCiskKEVFUFJPTUVSX0RJUikvMjRjWFgubzogJChFRVBST01FUl9ESVIpLzI0Y1hYLmMKKwkkKENDKSAkKENGTEFHUykgJChFRVBST01FUl9DRkxBR1MpIC1jICQ8IC1vICRACisKKyMKKyMgQ29tbWFuZHMKKyMKKworYWxsLWVlcHJvbWVyOiAkKGFkZHByZWZpeCAkKEVFUFJPTUVSX0RJUikvLCQoRUVQUk9NRVJfVEFSR0VUUykpCisKK3N0cmlwLWVlcHJvbWVyOiAkKGFkZHByZWZpeCAkKEVFUFJPTUVSX0RJUikvLCQoRUVQUk9NRVJfVEFSR0VUUykpCisJc3RyaXAgJChhZGRwcmVmaXggJChFRVBST01FUl9ESVIpLywkKEVFUFJPTUVSX1RBUkdFVFMpKQorCitjbGVhbi1lZXByb21lcjoKKwkkKFJNKSAkKGFkZHByZWZpeCAkKEVFUFJPTUVSX0RJUikvLCoubyAkKEVFUFJPTUVSX1RBUkdFVFMpKQorCitpbnN0YWxsLWVlcHJvbWVyOiAkKGFkZHByZWZpeCAkKEVFUFJPTUVSX0RJUikvLCQoRUVQUk9NRVJfVEFSR0VUUykpCisJJChJTlNUQUxMX0RJUikgJChERVNURElSKSQoc2JpbmRpcikgJChERVNURElSKSQobWFuOGRpcikKKwlmb3IgcHJvZ3JhbSBpbiAkKEVFUFJPTUVSX1RBUkdFVFMpIDsgZG8gXAorCSQoSU5TVEFMTF9QUk9HUkFNKSAkKEVFUFJPTUVSX0RJUikvJCRwcm9ncmFtICQoREVTVERJUikkKHNiaW5kaXIpIDsgZG9uZQorCit1bmluc3RhbGwtZWVwcm9tZXI6CisJZm9yIHByb2dyYW0gaW4gJChFRVBST01FUl9UQVJHRVRTKSA7IGRvIFwKKwkkKFJNKSAkKERFU1RESVIpJChzYmluZGlyKS8kJHByb2dyYW0gOyBcCisJJChSTSkgJChERVNURElSKSQobWFuOGRpcikvJCRwcm9ncmFtLjggOyBkb25lCisKK2FsbDogYWxsLWVlcHJvbWVyCisKK3N0cmlwOiBzdHJpcC1lZXByb21lcgorCitjbGVhbjogY2xlYW4tZWVwcm9tZXIKKworaW5zdGFsbDogaW5zdGFsbC1lZXByb21lcgorCit1bmluc3RhbGw6IHVuaW5zdGFsbC1lZXByb21lcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaTJjLXRvb2xzL2kyYy10b29sc18zLjEuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2kyYy10b29scy9pMmMtdG9vbHNfMy4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmNGQ2OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2kyYy10b29scy9pMmMtdG9vbHNfMy4xLjIuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJTZXQgb2YgaTJjIHRvb2xzIGZvciBsaW51eCIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2RsLmxtLXNlbnNvcnMub3JnL2kyYy10b29scy9yZWxlYXNlcy8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL01vZHVsZS5tayBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiNzEwNGExMDQzZDExYTVlMmM3YjEzMTYxNGViMWI5NjIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGI1ZTY5ZjJlMmE2ZTNhYTJlY2RmZTZhNWY0OTBiMTQ5YzUwNDQ2ODc3MGY1ODkyMWM4YzViOGE3ODYwYTQ0MSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKyAgICBjcCAke1dPUktESVJ9L01vZHVsZS5tayAke1N9L2VlcHJvbWVyLworICAgIHNlZCAtaSAncyMvdXNyL2xvY2FsIy91c3IjJyAke1N9L01ha2VmaWxlCisgICAgZWNobyAiaW5jbHVkZSBlZXByb21lci9Nb2R1bGUubWsiID4+ICR7U30vTWFrZWZpbGUKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfS9saW51eAorICAgIGluc3RhbGwgLW0gMDY0NCBpbmNsdWRlL2xpbnV4L2kyYy1kZXYuaCAke0R9JHtpbmNsdWRlZGlyfS9saW51eC9pMmMtZGV2LXVzZXIuaAorICAgIHJtIC1mICR7RH0ke2luY2x1ZGVkaXJ9L2xpbnV4L2kyYy1kZXYuaAorfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tbWlzYyIKK0ZJTEVTXyR7UE59LW1pc2MgPSAiJHtzYmluZGlyfS9pMmMtc3R1Yi1mcm9tLWR1bXAgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RkY21vbiBcCisgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZGVjb2RlLWVkaWQgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RlY29kZS1kaW1tcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZGVjb2RlLXZhaW8gXAorICAgICAgICAgICAgICAgICAgICAgICAiCitSREVQRU5EU18ke1BOfSArPSAiJHtQTn0tbWlzYyIKK1JERVBFTkRTXyR7UE59LW1pc2MgKz0gInBlcmwiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlXzAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi1uYXRpdmVfMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZjRhZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlXzAuMS5iYgpAQCAtMCwwICsxLDM2IEBACitTVU1NQVJZID0gImljZWNjIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCIKK0RFU0NSSVBUSU9OID0gIlRoaXMgaXMgYSB2ZXJzaW9uIG9mIHRoZSBpY2VjYy1jcmVhdGUtZW52IHNjcmlwdCB0aGF0IGhhcyBcCitiZWVuIG1vZGlmaWVkIGluIG9yZGVyIHRvIG1ha2UgaXQgd29yayB3aXRoIE9FLiIKK1NFQ1RJT04gPSAiYmFzZSIKKyMgc291cmNlIGZpbGUgaGFzIGp1c3QgYSAiR1BMIiB3b3JkLCBidXQgdXBzdHJlYW0gaXMgR1BMdjIrLgorIyBtb3N0IHByb2JhYmx5IGp1c3QgR1BMIHdvdWxkIGJlIGEgbWlzdGFrZQorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9pY2VjYy1jcmVhdGUtZW52O2JlZ2lubGluZT0yO2VuZGxpbmU9NTttZDU9YWUxZGYzZDZhMDU4YmZkYTQwYjY2MDk0YzVmNjA2NWYiCisKK1BSID0gInIyIgorCitERVBFTkRTID0gIiIKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK2luaGVyaXQgbmF0aXZlCisKKyMgVGhpcyBpcyBuZWVkZWQsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZXJlIGlzIGRlcGVuZGVuY3kgbG9vcCBmcm9tIHF1aWx0LW5hdGl2ZQorIyBEZXBlbmRlbmN5IGxvb3AgIzEgZm91bmQ6CisjICBUYXNrIDEwOTA3IChtZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlXzAuNjAuYmIsIGRvX2luc3RhbGwpIChkZXBlbmRlbnQgVGFza3MgWydxdWlsdC1uYXRpdmUsIGRvX2NvbXBpbGUnXSkKKyMgIFRhc2sgMTA5MDggKG1ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC1uYXRpdmVfMC42MC5iYiwgZG9fcG9wdWxhdGVfc3lzcm9vdCkgKGRlcGVuZGVudCBUYXNrcyBbJ3F1aWx0LW5hdGl2ZSwgZG9faW5zdGFsbCddKQorIyAgVGFzayAxMDk5NyAobWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi1uYXRpdmVfMC4xLmJiLCBkb19wYXRjaCkgKGRlcGVuZGVudCBUYXNrcyBbJ2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlLCBkb191bnBhY2snLCAncXVpbHQtbmF0aXZlLCBkb19wb3B1bGF0ZV9zeXNyb290J10pCisjICBUYXNrIDExMDAxIChtZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52LW5hdGl2ZV8wLjEuYmIsIGRvX2NvbmZpZ3VyZSkgKGRlcGVuZGVudCBUYXNrcyBbJ2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlLCBkb19wYXRjaCddKQorIyAgVGFzayAxMTAwMiAobWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi1uYXRpdmVfMC4xLmJiLCBkb19jb21waWxlKSAoZGVwZW5kZW50IFRhc2tzIFsnaWNlY2MtY3JlYXRlLWVudi1uYXRpdmUsIGRvX2NvbmZpZ3VyZSddKQorIyAgVGFzayAxMDk5OCAobWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi1uYXRpdmVfMC4xLmJiLCBkb19pbnN0YWxsKSAoZGVwZW5kZW50IFRhc2tzIFsnaWNlY2MtY3JlYXRlLWVudi1uYXRpdmUsIGRvX2NvbXBpbGUnXSkKKyMgIFRhc2sgMTA5OTkgKG1ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlXzAuMS5iYiwgZG9fcG9wdWxhdGVfc3lzcm9vdCkgKGRlcGVuZGVudCBUYXNrcyBbJ2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlLCBkb19pbnN0YWxsJ10pCisjICBUYXNrIDEwOTEwIChtZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlXzAuNjAuYmIsIGRvX2NvbmZpZ3VyZSkgKGRlcGVuZGVudCBUYXNrcyBbJ3F1aWx0LW5hdGl2ZSwgZG9fcGF0Y2gnLCAnaWNlY2MtY3JlYXRlLWVudi1uYXRpdmUsIGRvX3BvcHVsYXRlX3N5c3Jvb3QnXSkKKyMgIFRhc2sgMTA5MTEgKG1ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC1uYXRpdmVfMC42MC5iYiwgZG9fY29tcGlsZSkgKGRlcGVuZGVudCBUYXNrcyBbJ3F1aWx0LW5hdGl2ZSwgZG9fY29uZmlndXJlJ10pCitQQVRDSFRPT0wgPSAicGF0Y2giCitTUkNfVVJJID0gImZpbGU6Ly9pY2VjYy1jcmVhdGUtZW52IgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9LyR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2ljZWNjLWNyZWF0ZS1lbnYgJHtEfS8ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2U0ZGJjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52CkBAIC0wLDAgKzEsMTkyIEBACisjISAvdXNyL2Jpbi9lbnYgYmFzaAorIyBpY2VjYyAtLSBBIHNpbXBsZSBkaXN0cmlidXRlZCBjb21waWxlciBzeXN0ZW0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA0IGJ5IHRoZSBJY2VjcmVhbSBBdXRob3JzCisjIEdQTAorCit0YXJnZXRfZmlsZXM9CisKK2lzX2NvbnRhaW5lZCAoKQoreworICBjYXNlICIgJHRhcmdldF9maWxlcyAiIGluCisgICAgKiIgJDEgIiogKSByZXR1cm4gMCA7OworICAgICoiPSQxICIqICkgcmV0dXJuIDA7OworICAgICogKSByZXR1cm4gMSA7OworICBlc2FjCit9CisKK2FkZF9maWxlICgpCit7CisgIGxvY2FsIG5hbWU9IiQxIgorICBsb2NhbCBwYXRoPSIkMSI7CisgIGlmIHRlc3QgLW4gIiQyIjsgdGhlbgorICAgIG5hbWU9IiQyIgorICBmaQorICB0ZXN0IC16ICIkbmFtZSIgJiYgcmV0dXJuCisgICMgbHMgLUggaXNuJ3QgcmVhbGx5IHRoZSBzYW1lIGFzIHJlYWRsaW5rLCBidXQKKyAgIyByZWFkbGluayBpcyBub3QgcG9ydGFibGUgZW5vdWdoLgorICBwYXRoPWBscyAtSCAkcGF0aGAKKyAgdG9hZGQ9IiRuYW1lPSRwYXRoIgorICBpc19jb250YWluZWQgIiR0b2FkZCIgJiYgcmV0dXJuCisgIGlmIHRlc3QgLXogIiRzaWxlbnQiOyB0aGVuCisgIGVjaG8gImFkZGluZyBmaWxlICR0b2FkZCIKKyAgZmkKKyAgdGFyZ2V0X2ZpbGVzPSIkdGFyZ2V0X2ZpbGVzICR0b2FkZCIKKyAgaWYgdGVzdCAteCAiJHBhdGgiOyB0aGVuCisgICAgIyBPbmx5IGNhbGwgbGRkIHdoZW4gaXQgbWFrZXMgc2Vuc2UKKyAgICBpZiBmaWxlIC1MICIkcGF0aCIgfCBncmVwICdFTEYnID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKwlpZiAhIGZpbGUgLUwgIiRwYXRoIiB8IGdyZXAgJ3N0YXRpYycgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICMgbGRkIG5vdyBvdXRwdXRzIGxkIGFzIC9saWIvbGQtbGludXguc28ueHggb24gY3VycmVudCBucHRsIGJhc2VkIGdsaWJjCisJCSMgdGhpcyByZWdleHAgcGFyc2UgdGhlIG91dHB1dHMgbGlrZToKKwkJIyBsZGQgL3Vzci9iaW4vZ2NjCisJCSMgICAgICAgICBsaW51eC1nYXRlLnNvLjEgPT4gICgweGZmZmZlMDAwKQorCQkjICAgICAgICAgbGliYy5zby42ID0+IC9saWIvdGxzL2xpYmMuc28uNiAoMHhiN2U4MTAwMCkKKwkJIyAgICAgICAgIC9saWIvbGQtbGludXguc28uMiAoMHhiN2ZlODAwMCkKKwkJIyBjb3ZlcmluZyBib3RoIHNpdHVhdGlvbnMgKCB3aXRoID0+IGFuZCB3aXRob3V0ICkKKyAgICAgICAgICBmb3IgbGliIGluIGBsZGQgIiRwYXRoIiB8IHNlZCAtbiAncyxeW14vXSpcKC9bXiBdKlwpLiosXDEscCdgOyBkbworCSAgICB0ZXN0IC1mICIkbGliIiB8fCBjb250aW51ZQorCSAgICAjIENoZWNrIHdldGhlciB0aGUgc2FtZSBsaWJyYXJ5IGFsc28gZXhpc3RzIGluIHRoZSBwYXJlbnQgZGlyZWN0b3J5LAorCSAgICAjIGFuZCBwcmVmZXIgdGhhdCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGl0IGlzIGEgbW9yZSBnZW5lcmljIG9uZS4KKwkgICAgbG9jYWwgYmFzZWxpYj1gZWNobyAiJGxpYiIgfCBzZWQgJ3MsXCgvW14vXSpcKS8uKlwoL1teL10qXCkkLFwxXDIsJ2AKKwkgICAgdGVzdCAtZiAiJGJhc2VsaWIiICYmIGxpYj0kYmFzZWxpYgorCSAgYWRkX2ZpbGUgIiRsaWIiCisgICAgICAgIGRvbmUKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKK30KKworIyBiYWNrd2FyZCBjb21wYXQKK2lmIHRlc3QgIiQxIiA9ICItLXJlc3BlY3QtcGF0aCI7IHRoZW4KKyAgc2hpZnQKK2ZpCisKKyNhZGQgYSAtLXNpbGVudCBzd2l0Y2ggdG8gYXZvaWQgImJyb2tlbiBwaXBlIiBlcnJvcnMgd2hlbiBjYWxsaW5nIHRoaXMgc2NpcHQgZnJvbSB3aXRoaW4gT0UKK2lmIHRlc3QgIiQxIiA9ICItLXNpbGVudCI7IHRoZW4KKyBzaWxlbnQ9MQorIHNoaWZ0CitmaQorCisKK2FkZGVkX2djYz0kMQorc2hpZnQKK2FkZGVkX2d4eD0kMQorc2hpZnQKK2FkZGVkX2FzPSQxCitzaGlmdAorYXJjaGl2ZV9uYW1lPSQxCisKK2lmIHRlc3QgLXogIiRhZGRlZF9nY2MiIHx8IHRlc3QgLXogIiRhZGRlZF9neHgiIDsgdGhlbgorCWVjaG8gInVzYWdlOiAkMCA8Z2NjX3BhdGg+IDxnKytfcGF0aD4iCisJZXhpdCAxCitmaQorCitpZiAhIHRlc3QgLXggIiRhZGRlZF9nY2MiIDsgdGhlbgorICBlY2hvICInJGFkZGVkX2djYycgaXMgbm8gZXhlY3V0YWJsZS4iCisgIGV4aXQgMQorZmkKKworaWYgISB0ZXN0IC14ICIkYWRkZWRfZ3h4IiA7IHRoZW4KKyAgZWNobyAiJyRhZGRlZF9nY2MnIGlzIG5vIGV4ZWN1dGFibGUuIgorICBleGl0IDEKK2ZpCisKKworCithZGRfZmlsZSAkYWRkZWRfZ2NjIC91c3IvYmluL2djYworYWRkX2ZpbGUgJGFkZGVkX2d4eCAvdXNyL2Jpbi9nKysKKworaWYgdGVzdCAteiAiJGFkZGVkX2FzIiA7IHRoZW4KKyBhZGRfZmlsZSAvdXNyL2Jpbi9hcyAvdXNyL2Jpbi9hcworZWxzZQorIGlmICEgdGVzdCAteCAiJGFkZGVkX2FzIiA7IHRoZW4KKyAgZWNobyAiJyRhZGRlZF9hcycgaXMgbm8gZXhlY3V0YWJsZS4iCisgIGV4aXQgMQorIGZpCisKKyBhZGRfZmlsZSAkYWRkZWRfYXMgIC91c3IvYmluL2FzCitmaQorCithZGRfZmlsZSBgJGFkZGVkX2djYyAtcHJpbnQtcHJvZy1uYW1lPWNjMWAgL3Vzci9iaW4vY2MxCithZGRfZmlsZSBgJGFkZGVkX2d4eCAtcHJpbnQtcHJvZy1uYW1lPWNjMXBsdXNgIC91c3IvYmluL2NjMXBsdXMKK3NwZWNmaWxlPWAkYWRkZWRfZ2NjIC1wcmludC1maWxlLW5hbWU9c3BlY3NgCitpZiB0ZXN0IC1uICIkc3BlY2ZpbGUiICYmIHRlc3QgLWUgIiRzcGVjZmlsZSI7IHRoZW4KKyAgYWRkX2ZpbGUgIiRzcGVjZmlsZSIKK2ZpCisKK2x0b2ZpbGU9YCRhZGRlZF9nY2MgLXByaW50LXByb2ctbmFtZT1sdG8xYAorcGx1Z2luZmlsZT0iJHtsdG9maWxlJWx0bzF9bGlibHRvX3BsdWdpbi5zbyIKK2lmIHRlc3QgLXIgIiRwbHVnaW5maWxlIgordGhlbgorICBhZGRfZmlsZSAkcGx1Z2luZmlsZSAgJHtwbHVnaW5maWxlIyp1c3J9CisgIGFkZF9maWxlICRwbHVnaW5maWxlICAvdXNyJHtwbHVnaW5maWxlIyp1c3J9CitmaQorCit0ZW1wZGlyPWBta3RlbXAgLWQgL3RtcC9pY2VjY2VudlhYWFhYWGAKK25ld190YXJnZXRfZmlsZXM9Citmb3IgaSBpbiAkdGFyZ2V0X2ZpbGVzOyBkbworIGNhc2UgJGkgaW4KKyAgICo9LyopCisgICAgdGFyZ2V0PWBlY2hvICRpIHwgY3V0IC1kPSAtZjFgCisgICAgcGF0aD1gZWNobyAkaSB8IGN1dCAtZD0gLWYyYAorICAgIDs7CisgICAqKQorICAgIHBhdGg9JGkKKyAgICB0YXJnZXQ9JGkKKyAgICA7OworICBlc2FjCisgIG1rZGlyIC1wICR0ZW1wZGlyL2BkaXJuYW1lICR0YXJnZXRgCisgIGNwIC1wICRwYXRoICR0ZW1wZGlyLyR0YXJnZXQKKyAgaWYgdGVzdCAtZiAkdGVtcGRpci8kdGFyZ2V0IC1hIC14ICR0ZW1wZGlyLyR0YXJnZXQ7IHRoZW4KKyAgICBzdHJpcCAtcyAkdGVtcGRpci8kdGFyZ2V0IDI+L2Rldi9udWxsCisgIGZpCisgIHRhcmdldD1gZWNobyAkdGFyZ2V0IHwgY3V0IC1iMi1gCisgIG5ld190YXJnZXRfZmlsZXM9IiRuZXdfdGFyZ2V0X2ZpbGVzICR0YXJnZXQiCitkb25lCisKKyNzb3J0IHRoZSBmaWxlcwordGFyZ2V0X2ZpbGVzPWBmb3IgaSBpbiAkbmV3X3RhcmdldF9maWxlczsgZG8gZWNobyAkaTsgZG9uZSB8IHNvcnRgCisKKyN0ZXN0IGlmIGFuIGFyY2hpdmUgbmFtZSB3YXMgc3VwcGxpZWQKKyNpZiBub3QgdXNlIHRoZSBtZDUgb2YgYWxsIGZpbGVzIGFzIHRoZSBhcmNoaXZlIG5hbWUKK2lmIHRlc3QgLXogIiRhcmNoaXZlX25hbWUiOyB0aGVuCisgIG1kNXN1bT1OT05FCisgIGZvciBmaWxlIGluIC91c3IvYmluL21kNXN1bSAvYmluL21kNSAvdXNyL2Jpbi9tZDU7IGRvCisgICAgaWYgdGVzdCAteCAkZmlsZTsgdGhlbgorICAgICAgbWQ1c3VtPSRmaWxlCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKworICAjY2FsY3VsYXRlIG1kNSBhbmQgdXNlIGl0IGFzIHRoZSBhcmNoaXZlIG5hbWUKKyAgYXJjaGl2ZV9uYW1lPWBmb3IgaSBpbiAkdGFyZ2V0X2ZpbGVzOyBkbyB0ZXN0IC1mICR0ZW1wZGlyLyRpICYmICRtZDVzdW0gJHRlbXBkaXIvJGk7IGRvbmUgfCBzZWQgLWUgJ3MvIC4qJC8vJyB8ICRtZDVzdW0gfCBzZWQgLWUgJ3MvIC4qJC8vJ2AudGFyLmd6IHx8IHsKKyAgICBpZiB0ZXN0IC16ICIkc2lsZW50IjsgdGhlbgorICAgICBlY2hvICJDb3VsZG4ndCBjb21wdXRlIE1ENSBzdW0uIgorICAgIGZpCisgICAgZXhpdCAyCisgIH0KKyAgbXlkaXI9YHB3ZGAKK2Vsc2UKKyAgbXlkaXI9ImBkaXJuYW1lICIkYXJjaGl2ZV9uYW1lImAiCisKKyAgI2NoZWNrIGlmIHdlIGhhdmUgYSBmdWxsIHBhdGggb3Igb25seSBhIGZpbGVuYW1lCisgIGlmIHRlc3QgIiRteWRpciIgPSAiLiIgOyB0aGVuCisgICAgbXlkaXI9YHB3ZGAKKyAgZWxzZQorICAgIG15ZGlyPSIiCisgIGZpCitmaQorCitpZiB0ZXN0IC16ICIkc2lsZW50IjsgdGhlbgorZWNobyAiY3JlYXRpbmcgJGFyY2hpdmVfbmFtZSIKK2ZpCisKK2NkICR0ZW1wZGlyCit0YXIgLWN6aGYgIiRteWRpci8kYXJjaGl2ZV9uYW1lIiAkdGFyZ2V0X2ZpbGVzIHx8IHsKKyBpZiB0ZXN0IC16ICIkc2lsZW50IjsgdGhlbgorICBlY2hvICJDb3VsZG4ndCBjcmVhdGUgYXJjaGl2ZSIKKyBmaQorICBleGl0IDMKK30KK2NkIC4uCitybSAtcmYgJHRlbXBkaXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljb24tbmFtaW5nLXV0aWxzL2ljb24tbmFtaW5nLXV0aWxzXzAuOC45MC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljb24tbmFtaW5nLXV0aWxzL2ljb24tbmFtaW5nLXV0aWxzXzAuOC45MC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjM1NmIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNvbi1uYW1pbmctdXRpbHMvaWNvbi1uYW1pbmctdXRpbHNfMC44LjkwLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiRW5hYmxlcyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGN1cnJlbnQgZGVza3RvcCBpY29uIHRoZW1lcyIKK0RFU0NSSVBUSU9OID0gIkEgUGVybCBzY3JpcHQgdXNlZCBmb3IgbWFpbnRhaW5pbmcgYmFja3dhcmRzIFwKK2NvbXBhdGliaWxpdHkgd2l0aCBjdXJyZW50IGRlc2t0b3AgaWNvbiB0aGVtZXMsIHdoaWxlIG1pZ3JhdGluZyB0byB0aGUgXAorbmFtZXMgc3BlY2lmaWVkIGluIHRoZSBJY29uIE5hbWluZyBTcGVjaWZpY2F0aW9uLiBUaGUgSWNvbiBOYW1pbmcgXAorVXRpbGl0aWVzIG1hcCB0aGUgaWNvbiBuYW1lcyB1c2VkIGJ5IHRoZSBHTk9NRSBhbmQgS0RFIGRlc2t0b3BzIHRvIHRoZSBcCitpY29uIG5hbWVzIHByb3Bvc2VkIGluIHRoZSBJY29uIE5hbWluZyBTcGVjaWZpY2F0aW9uLCBhbmQgZ2VuZXJhdGUgdGhlIFwKK2ljb24gZmlsZXMgYXBwcm9wcmlhdGUgdG8gdGhlIGRlc2t0b3AgZW52aXJvbm1lbnQgeW91IHVzZS4gVGhlIEljb24gXAorTmFtaW5nIFNwZWNpZmljYXRpb24gcHJvdmlkZXMgYSBzdGFuZGFyZCBsaXN0IG9mIGNvbW1vbiBpY29uIGNvbnRleHRzIFwKK2FuZCBuYW1lcyB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgaWNvbiB0aGVtZXMgd29yayBpbiBhIGRlc2t0b3AgXAorZW52aXJvbm1lbnQgb3IgYXBwbGljYXRpb24gdGhhdCBpbXBsZW1lbnRzIHRoZSBuYW1pbmcgc3BlY2lmaWNhdGlvbi4gIgorTElDRU5TRSA9ICJHUEx2MiIKK0RFUEVORFMgPSAibGlieG1sLXNpbXBsZS1wZXJsLW5hdGl2ZSIKK1BSID0gInI1IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworU1JDX1VSSSA9ICJodHRwOi8vdGFuZ28uZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzL2ljb24tbmFtaW5nLXV0aWxzLSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIyYzVjN2E0MThlNWViMzI2OGY2NWUyMTk5MzI3N2ZiYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNDRhYjIxOTllZDhjNmE1NWNlMzZmZDRmY2Q4YjgwMjFhNWUyMWY1YmFiMDI4YzBhN2NkY2Y1MmE1OTAyZTFjIgorCitpbmhlcml0IGF1dG90b29scyBhbGxhcmNoIHBlcmxuYXRpdmUKKworZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwkjIE1ha2Ugc3VyZSB3ZSB1c2Ugb3VyIG5hdGl2ZXBlcmwgd3JhcHBlci4KKwlzZWQgLWkgLWUgIjFzOiMhLio6IyEvdXNyL2Jpbi9lbnYgbmF0aXZlcGVybDoiICR7U30vaWNvbi1uYW1lLW1hcHBpbmcucGwuaW4KK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vZHRkcyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9hZHRfaW5zdGFsbGVyIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvYWR0X2luc3RhbGxlcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iOGNmYjJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvYWR0X2luc3RhbGxlcgpAQCAtMCwwICsxLDQyMCBAQAorIyEvYmluL2Jhc2gKKyMgWW9jdG8gQURUIEluc3RhbGxlcgorIworIyBDb3B5cmlnaHQgMjAxMC0yMDExIGJ5IEludGVsIENvcnAuCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgCisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIAorIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIAorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSAKKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gCisjIFRIRSBTT0ZUV0FSRS4KKworCit1c2FnZSAoKQoreworCisgIElOU1RfQVJDSD1gdW5hbWUgLW1gCisgIElOU1RfT1M9YHVuYW1lIC1vfCB0ciAnW0EtWl0nICdbYS16XSdgCisgIElOU1RfS1I9YHVuYW1lIC1yfCB0ciAnW0EtWl0nICdbYS16XSdgCisKKyAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICBlY2hvX2luZm8gIiMgV2VsY29tZSB0byBZb2N0byBBcHBsaWNhdGlvbiBEZXZlbG9wZW1lbnQgVG9vbHMgKEFEVCkgSW5zdGFsbGVyIgorICBlY2hvX2luZm8gIiMgIgorICBlY2hvX2luZm8gIiMgSG9zdCBNYWNoaW5lOlx0XHRcdFx0IiRJTlNUX0FSQ0gKKyAgZWNob19pbmZvICIjIE9TIGluZm86XHRcdFx0XHQkSU5TVF9LUiIgIAorICBlY2hvX2luZm8gIiMgWW9jdG8gQURUIHZlcnNpb24gdG8gYmUgaW5zdGFsbGVkOlx0JFlPQ1RPQURUX1ZFUlNJT04iCisgIGVjaG9faW5mbyAiIyBzdXBwb3J0ZWQgdGFyZ2V0IGFyY2hpdGVjdHVyZXM6XHQkWU9DVE9BRFRfU1VQUE9SVEVEX1RBUkdFVFMiCisgIGVjaG9faW5mbyAiIyBzdXBwb3J0ZWQgdGFyZ2V0IHJvb3RfZnMgaW1hZ2VzOlx0JFlPQ1RPQURUX1NVUFBPUlRFRF9ST09URlMiCisgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorCisgIGVjaG9faW5mbyAiU3lzdGVtd2lkZSBpbnN0YWxsYXRpb24uIEluc3RhbGxhdGlvbiB3aWxsIG9jY3VyIHVuZGVyICRJTlNUQUxMX0ZPTERFUlxuIgorICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgIGVjaG9faW5mbyAiIyBZb3VyIHN5c3RlbSBpbnN0YWxsYXRpb24gY29uZmlndXJhdGlvbnMgZnJvbSBhZHRfaW5zdGFsbGVyLmNvbmYiCisgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKworICBlY2hvX2luZm8gIiMgQ3Jvc3MgdG9vbGNoYWluczpcdFx0JFlPQ1RPQURUX1RBUkdFVFMiCisgIGVjaG9faW5mbyAiIyBJbnN0YWxsIFFlbXU6XHRcdFx0JFlPQ1RPQURUX1FFTVUiCisgIGVjaG9faW5mbyAiIyBJbnN0YWxsIE5GUyB1dGlsaXRpZXM6XHQkWU9DVE9BRFRfTkZTX1VUSUwiCisgICNlY2hvX2luZm8gIiMgSW5zdGFsbCBiaXRiYWtlICsgVUk6XHRcdCRZT0NUT0FEVF9CSVRCQUtFIgorICAjZWNob19pbmZvICIjIEluc3RhbGwgbWV0YWRhdGE6XHQkWU9DVE9BRFRfTUVUQURBVEEiCisgICNlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKworICAgIGVjaG9faW5mbyAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgICAgZWNob19pbmZvICIjIFlvdXIgcm9vdGZzIGltYWdlKHMpIGFuZCB0YXJnZXQgc3lzcm9vdCBzZWxlY3Rpb25zIGZyb20gYWR0X2luc3RhbGxlci5jb25mIgorICAgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorcHJvbXB0PTEKK2ZvciBhcmNoX3R5cGUgaW4gJFlPQ1RPQURUX1RBUkdFVFM7IGRvCisgIGRvd25sb2FkX2ltYWdlcyAkYXJjaF90eXBlICRwcm9tcHQKK2RvbmUKKyAgICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgc2VsZWN0X2luc3RhbGxfdHlwZQorfQorCit2YWxpZGF0ZV9jb25maWcoKQoreworCisgIGZvciBzZWxlY3RlZF9hcmNoX3R5cGUgaW4gJFlPQ1RPQURUX1RBUkdFVFM7IGRvCisgICAgZm91bmQ9MAorICAgIHNlbGVjdF9tYWNoaW5lX3Zhcj0iXCRZT0NUT0FEVF9UQVJHRVRfTUFDSElORV8kc2VsZWN0ZWRfYXJjaF90eXBlIgorICAgIHNlbGVjdF9tYWNoaW5lPWBldmFsIGVjaG8gJHNlbGVjdF9tYWNoaW5lX3ZhcmAKKyAgICBzaG93X2Vycm9yX2Jhbm5lcj0wCisKKyAgICBmb3Igc3VwcG9ydGVkX2FyY2hfdHlwZSBpbiAkWU9DVE9BRFRfU1VQUE9SVEVEX1RBUkdFVFM7IGRvCisgICAgICBpZiBbICIkc2VsZWN0ZWRfYXJjaF90eXBlIiA9PSAiJHN1cHBvcnRlZF9hcmNoX3R5cGUiIF07IHRoZW4KKyAgICAgICAgZm91bmQ9MQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgICAgaWYgWyAkZm91bmQgPT0gMCBdOyB0aGVuCisgICAgICAgZWNob19pbmZvICJbQURUX0lOU1RdIEVycm9yOiBZT0NUQURUX1RBUkdFVFMgaW4gYWR0X2luc3RhbGxlci5jb25mIGNvbnRhaW5zIGludmFsaWQgZW50cmllczogJFlPQ1RPQURUX1RBUkdFVFMuIFZhbGlkIHZhbHVlcyBhcmU6ICRZT0NUT0FEVF9TVVBQT1JURURfVEFSR0VUUyIKKyAgICAgICBzaG93X2Vycm9yX2Jhbm5lcj0xCisgICAgZWxpZiBbIC16ICIkc2VsZWN0X21hY2hpbmUiIF07IHRoZW4KKyAgICAgICBlY2hvX2luZm8gIltBRFRfSU5TVF0gRXJyb3I6IE5vIE1BQ0hJTkUgd2FzIGRlZmluZWQgZm9yICRzZWxlY3RlZF9hcmNoX3R5cGUgYXJjaGl0ZWN0dXJlISBUaGlzIGlzIG5lZWRlZCB0byBpbnN0YWxsIHRoZSB0b29sY2hhaW4gYW5kIHRoZSBjb3JyZWN0IGVudmlyb25tZW50IHNldHRpbmdzLiIKKyAgICAgICBlY2hvX2luZm8gIltBRFRfSU5TVF0gVG8gZG8gdGhhdCwgaW4gYWR0LWluc3RhbGxlci5jb25mLCBzZXQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZTogWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfJHNlbGVjdGVkX2FyY2hfdHlwZSIKKyAgICAgICBzaG93X2Vycm9yX2Jhbm5lcj0xCisgICAgZmkKKworICAgIGlmIFsgJHNob3dfZXJyb3JfYmFubmVyID09IDEgXTsgdGhlbgorICAgICAgIGVjaG8gLWUgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgICAgICAgZWNobyAtZSAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQhIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICAgICAgIGVjaG8gLWUgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgICAgZXhpdCAtMQorICAgIGZpCisgIGRvbmUKKworICBmb3IgYXJjaF90eXBlIGluICRZT0NUT0FEVF9TVVBQT1JURURfVEFSR0VUUzsgZG8KKyAgICAjc2VsZWN0X3RhcmdldF92YXI9IlwkWU9DVE9BRFRfVEFSR0VUXyRhcmNoX3R5cGUiCisgICAgI3NlbGVjdF90YXJnZXQ9YGV2YWwgZWNobyAkc2VsZWN0X3RhcmdldF92YXJgCisKKyAgICAjaWYgWyAiJHNlbGVjdF90YXJnZXQiICE9ICJZIiBdIHx8IFsgIiRzZWxlY3RlZF90YXJnZXQiICE9ICJ5IiBdOyB0aGVuCisgICAgIyAgY29udGludWU7CisgICAgI2ZpCisKKyAgICB0YXJnZXRfc3lzcm9vdF9pbWFnZV92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfJGFyY2hfdHlwZSIKKyAgICB0YXJnZXRfc3lzcm9vdF9pbWFnZT1gZXZhbCBlY2hvICR0YXJnZXRfc3lzcm9vdF9pbWFnZV92YXJgCisKKworICAgIHNlbGVjdF9yb290ZnNfdmFyPSJcJFlPQ1RPQURUX1JPT1RGU18kYXJjaF90eXBlIgorICAgIHNlbGVjdF9yb290ZnM9YGV2YWwgZWNobyAkc2VsZWN0X3Jvb3Rmc192YXJgCisKKyAgICBpZiBbICIkc2VsZWN0X3Jvb3RmcyIgPT0gIiIgXSAmJiBbICIkdGFyZ2V0X3N5c3Jvb3RfaW1hZ2UiID09ICIiIF07IHRoZW4KKyAgICAgICBjb250aW51ZTsKKyAgICBmaQorCisgICAgZm9yIGltYWdlX3R5cGUgaW4gJHNlbGVjdF9yb290ZnM7IGRvCisjdmFsaWRhdGUgcm9vdGZzIHR5cGUgZGVmaW5lZCBpbiBZT0NUT0FEVF9ST09URlNfe0FSQ0h9IGlzIHZhbGlkIGFuZCBpbiBZT0NUT0FEVF9TVVBQT1JURURfUk9PVEZTCisgICAgICBmb3VuZD0wCisgICAgICBmb3Igc3VwcG9ydGVkX3Jvb3Rmc190eXBlIGluICRZT0NUT0FEVF9TVVBQT1JURURfUk9PVEZTOyBkbworICAgICAgICBpZiBbICIkaW1hZ2VfdHlwZSIgPT0gIiRzdXBwb3J0ZWRfcm9vdGZzX3R5cGUiIF07IHRoZW4KKyAgICAgICAgICBmb3VuZD0xCisgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICAgIGlmIFsgJGZvdW5kID09IDAgXTsgdGhlbgorI3RoZSByb290ZnMgdHlwZSBsaXN0ZWQgZm9yIGRvd25sb2FkaW5nIGlzIG5vdCB2YWxpZAorICAgICAgICBlY2hvX2luZm8gIltBRFRfSU5TVF0gRXJyb3I6IFNlbGVjdGVkIFlPQ1RPQURUX1JPT1RGU18kYXJjaF90eXBlIHZhbHVlOiAkaW1hZ2VfdHlwZSwgaXMgbm90IHZhbGlkISBWYWxpZCB2YWx1ZXMgYXJlOiAkWU9DVE9BRFRfU1VQUE9SVEVEX1JPT1RGUyAiCisgICAgICAgZWNobyAtZSAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICAgICBlY2hvIC1lICIjIE1lZXQgZXJyb3Iocykgd2hlbiBpbnN0YWxsaW5nIFlvY3RvIEFEVCEgUGxlYXNlIGNoZWNrIGxvZyBmaWxlIGZvciBkZXRhaWxzLiAiCisgICAgICAgZWNobyAtZSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICAgICAgZXhpdCAtMQorICAgICAgZmkKKyAgICBkb25lCisKKyAgICBmb3VuZD0wCisgICAgZm9yIGltYWdlX3R5cGUgaW4gJHNlbGVjdF9yb290ZnM7IGRvCisjdmFsaWRhdGUgdGhhdCByb290ZnMgdG8gYmUgZXh0cmFjdGVkIG11c3QgYmUgaW4gdGhlIGl0ZW06IFlPQ1RPQURUX1JPT1RGU18ke0FSQ0h9CisgICAgICBpZiBbICIkdGFyZ2V0X3N5c3Jvb3RfaW1hZ2UiID09ICIkaW1hZ2VfdHlwZSIgXTsgdGhlbgorICAgICAgICBmb3VuZD0xCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyMgdGhlIHJvb3RmcyBpbWFnZSB0byBiZSBleHRyYWN0ZWQgaXMgbm90IHNlbGVjdGVkCisgICAgaWYgWyAkZm91bmQgPT0gMCBdOyB0aGVuCisgICAgICBlY2hvX2luZm8gIltBRFRfSU5TVF0gRXJyb3I6IFlPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFXyRhcmNoX3R5cGUgc2VsZWN0aW9uOiAkdGFyZ2V0X3N5c3Jvb3RfaW1hZ2UgaXMgbm90IGluY2x1ZGVkIGluIFlPQ1RPQURUX1JPT1RGU18kYXJjaF90eXBlIHNlbGVjdGlvbnM6ICRzZWxlY3Rfcm9vdGZzIgorICAgICAgZWNobyAtZSAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICAgIGVjaG8gLWUgIiMgTWVldCBlcnJvcihzKSB3aGVuIGluc3RhbGxpbmcgWW9jdG8gQURUISBQbGVhc2UgY2hlY2sgbG9nIGZpbGUgZm9yIGRldGFpbHMuICIKKyAgICAgIGVjaG8gLWUgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgICBleGl0IC0xCisgICAgZmkKKyAgZG9uZQorfQorCisKKyNkZXRlY3Qgb3BrZyBpbnN0YWxsZWQgb3Igbm90LCBmb3IgaW5zdGFsbGluZyBzZGssIHdlIHdpbGwgdXNlCisjdGhpcyBpbnN0YWxsZWQgbG9jYWwgb3BrZworaW5zdGFsbF9vcGtnKCkKK3sKK2lmIFsgISAteCAiJExPQ0FMX09QS0dfTE9DL2Jpbi9vcGtnIiBdOyB0aGVuCisgIGVjaG9faW5mbyAiT1BLRyBpcyBub3Qgc2V0dXAsIHNldHRpbmcgdXAgb3BrZyBpbiBsb2NhbCwgd2hpY2ggaXMgcmVxdWlyZWQgZm9yIGluc3RhbGxpbmcgeW9jdG8gQURULi4uXG4iCisKKyAgaWYgWyAtZCAkTE9DQUxfT1BLR19MT0MgXTsgdGhlbgorICAgIGVjaG9faW5mbyAiRGVsZXRpbmcgb2xkIE9QS0cgZm9sZGVyLCB3aGljaCBkb2Vzbid0IGNvbnRhaW4gZXhlY3V0YWJsZXMuLi4gIgorICAgIHJtIC1yZiAkTE9DQUxfT1BLR19MT0MKKyAgZmkKKworICBwYXJlbnRfZm9sZGVyPWBwd2RgCisgIGNkICRMT0NBTF9PUEtHX0ZPTERFUgorICBjaGVja19yZXN1bHQKKworICBvcGtnX3NvdXJjZV9kaXI9YGxzIC1kIG9wa2ctKmAKKworICBpZiBbICRvcGtnX3NvdXJjZV9kaXIgPT0gIiIgXTsgdGhlbgorICAgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBFcnJvcjogT1BLRyBzb3VyY2UgZGlyZWN0b3J5IGlzIG5vdCBmb3VuZCEiCisgICAgZWNobyAtZSAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICBlY2hvIC1lICIjIE1lZXQgZXJyb3Iocykgd2hlbiBpbnN0YWxsaW5nIFlvY3RvIEFEVCEgUGxlYXNlIGNoZWNrIGxvZyBmaWxlIGZvciBkZXRhaWxzLiAiCisgICAgZWNobyAtZSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICBleGl0IC0xCisgIGZpCisKKyAgY2QgJG9wa2dfc291cmNlX2RpcgorICBjaGVja19yZXN1bHQKKworICBlY2hvX2luZm8gIkNvbmZpZ3VyZSBvcGtnIC4uLlxuIgorICBhdXRvcmVjb25mIC1pCisgIC4vY29uZmlndXJlIC0tcHJlZml4PSRwYXJlbnRfZm9sZGVyLyRMT0NBTF9PUEtHX0xPQyAtLWVuYWJsZS1zaGFyZWQ9bm8gLS1kaXNhYmxlLWN1cmwgLS1kaXNhYmxlLXNzbC1jdXJsIC0tZGlzYWJsZS1ncGcgPj4gJHBhcmVudF9mb2xkZXIvJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgY2hlY2tfcmVzdWx0CisKKyAgZWNob19pbmZvICJNYWtlIG9wa2cgLi4uXG4iCisgIG1ha2UgJj4+ICRwYXJlbnRfZm9sZGVyLyRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgIGNoZWNrX3Jlc3VsdAorCisgIGVjaG9faW5mbyAiTWFrZSBJbnN0YWxsIG9wa2cgLi4uXG4iCisgIG1ha2UgaW5zdGFsbCAmPj4gJHBhcmVudF9mb2xkZXIvJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgI2lmIG1lZXQgZXJyb3Igd2hlbiBpbnN0YWxsaW5nIG9wa2csIGNhbmNlbCB0aGUgaW5zdGFsbGF0aW9uCisgIGNoZWNrX3Jlc3VsdAorCisgIGNkICRwYXJlbnRfZm9sZGVyCisgIGVjaG9faW5mbyAiU3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCBPUEtHLlxuIgorZmkKK30KKworY29uZmlybV9kb3dubG9hZCgpCit7CisjYXZvaWQgcmVwZWF0ZWQgcmVtaW5kaW5nCitpZiBbICIkb3ZlcnJpZGVfb2xkZmlsZSIgPT0gMSBdOyB0aGVuCisgIHJldHVybiAkcHJlX3Jlc3VsdAorZWxzZQorICBvdmVycmlkZV9vbGRmaWxlPTEKK2ZpCisKK3doaWxlIHRydWU7IGRvCisgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gRmlsZXMgWyQxXSBhbHJlYWR5IGV4aXN0cy4gSWYgeW91IGNvbnRpbnVlIGRvd25sb2FkaW5nLCBvbGQgZmlsZXMgd2lsbCBiZSBvdmVycmlkZWQuIgorICAjZWNob19pbmZvICJbQURUX0lOU1RdIEZ1cnRoZXIgcHJvbXB0cyB3aWxsIG5vdCBiZSBnaXZlbiBpZiB0aGVyZSdyZSBtb3JlIGV4aXN0aW5nIGZpbGVzIHRvIGJlIGRvd25sb2FkZWQuIgorICAjZWNob19pbmZvICJbQURUX0lOU1RdIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlIGRvd25sb2FkaW5nPyBQbGVhc2UgZW50ZXIgWS9OOiIKKyAgZWNob19pbmZvICJcbkZpbGUgWyQxXSBhbHJlYWR5IGV4aXN0cywgd2hpY2ggbWVhbnMgeW91J3ZlIGRvd25sb2FkZWQgdGhlIHFlbXUga2VybmVsIGFuZCByb290ZnMgZmlsZShzKSBiZWZvcmUuICBJZiB5b3UgY2hvb3NlIGNvbnRpbnVlIGRvd25sb2FkaW5nLCBvbGQgZmlsZXMgd2lsbCBiZSBvdmVycmlkZGVuLiIKKyAgZWNob19pbmZvICJbQURUX0lOU1RdIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlIGRvd25sb2FkaW5nPyBQbGVhc2UgZW50ZXIgWS9OOiIKKyAgcmVhZCBZT0NUT0FEVF9JTlNUQUxMCisgIFlPQ1RPQURUX0lOU1RBTEw9YHRyICdbYS16XScgJ1tBLVpdJzw8PCIkWU9DVE9BRFRfSU5TVEFMTCJgCisgIGlmIFsgIiRZT0NUT0FEVF9JTlNUQUxMIiA9PSAiWSIgXTsgdGhlbgorICAgIHByZV9yZXN1bHQ9MAorICAgIHJldHVybiAwCisgIGVsaWYgWyAiJFlPQ1RPQURUX0lOU1RBTEwiID09ICJOIiBdOyB0aGVuCisgICAgcHJlX3Jlc3VsdD0xCisgICAgcmV0dXJuIDEKKyAgZmkKK2RvbmUKK30KKworZG93bmxvYWRfZmlsZSgpCit7Citsb2NhbCBmaWxlbmFtZT1gZWNobyAkezEjIyovfWAKK2lmIFsgLWYgIiRMT0NBTF9ET1dOTE9BRC8kZmlsZW5hbWUiIF07IHRoZW4KKyAgY29uZmlybV9kb3dubG9hZCAkZmlsZW5hbWUKKyAgcmVzdWx0PSIkPyIKKyAgaWYgWyAhICIkcmVzdWx0IiA9PSAiMCIgXTsgdGhlbgorICAgIHJldHVybgorICBlbHNlCisgICAgZWNobyAiUmVtb3Zpbmcgb2xkIGZpbGUgWyQxXSIKKyAgICBybSAtcmYgIiRMT0NBTF9ET1dOTE9BRC8kZmlsZW5hbWUiIAorICBmaQorZmkKK2VjaG9faW5mbyAiRG93bmxvYWRpbmcgZmlsZTogJGZpbGVuYW1lLi4uIgord2dldCAiJFlPQ1RPQURUX1JFUE8vcm9vdGZzLyQxIiAtUCAkTE9DQUxfRE9XTkxPQUQgLS1wcm9ncmVzcz1iYXI6Zm9yY2UgMj4mMSB8IHRlZSAtYSAiJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUiIAorfQorCisKKworI05lZWQgdGhyZWUgaW5wdXQgcGFyYW1zOgorIyAkMSBhcmNoX3R5cGUoYXJtIHBvd2VycGMgeDg2IG1pcHMpCisjICQyIG1hY2hpbmUocWVtdWFybSBiZWFnbGVib2FyZCkKKyMgJDMgcm9vdGZzX2ltYWdlX3R5cGUgKGEgbGlzdCBvZiBzZGsgc2F0byBtaW5pbWFsIGxzYikKK2dldF9pbWFnZSgpCit7CisgIGxvY2FsIG1hY2hpbmU9JDIKKyAKKyAgaWYgWyAiJDEiID09ICJ4ODYiIF0gfHwgWyAiJDEiID09ICJ4ODZfNjQiIF07IHRoZW4KKyAgICBrZXJuZWw9ImJ6SW1hZ2UtJG1hY2hpbmUuYmluIgorICBlbGlmIFsgIiQxIiA9PSAicHBjIiBdIHx8IFsgIiQxIiA9PSAibWlwcyIgXTsgdGhlbgorICAgIGtlcm5lbD0idm1saW51eC0kbWFjaGluZS5iaW4iCisgIGVsc2UKKyAgICBrZXJuZWw9InpJbWFnZS0kbWFjaGluZS5iaW4iCisgIGZpCisKKyAgI2VjaG9faW5mbyAiW0FEVF9JTlNUXSBEb3dubG9hZGluZyBxZW11IGtlcm5lbCBiaW5hcnk6ICRxZW11X2tlcm5lbCIKKyAgZG93bmxvYWRfZmlsZSAkbWFjaGluZS8ka2VybmVsCisgIGNoZWNrX3Jlc3VsdAorICAKKyAgZm9yIGltYWdlX3R5cGUgaW4gJHNlbGVjdF9yb290ZnM7IGRvCisgICAgI2VjaG9faW5mbyAiW0FEVF9JTlNUXSBEb3dubG9hZGluZyByb290ZnMgZmlsZTogY29yZS1pbWFnZS0kaW1hZ2VfdHlwZS0kbWFjaGluZS50YXIuYnoyIgorICAgIGZpbGVuYW1lPSJjb3JlLWltYWdlLSRpbWFnZV90eXBlLSRtYWNoaW5lLnRhci5iejIiCisgICAgZG93bmxvYWRfZmlsZSAkbWFjaGluZS8kZmlsZW5hbWUKKyAgICBjaGVja19yZXN1bHQKKyAgZG9uZQorfQorCitkb3dubG9hZF9pbWFnZXMoKQoreworICBzZWxlY3Rfcm9vdGZzX3Zhcj0iXCRZT0NUT0FEVF9ST09URlNfJDEiCisgIHNlbGVjdF9zeXNyb290X2ltYWdlX3Zhcj0iXCRZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV8kMSIKKyAgc2VsZWN0X3N5c3Jvb3RfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9TWVNST09UX0xPQ18kMSIKKyAgc2VsZWN0X21hY2hpbmVfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FXyQxIgorICBzZWxlY3Rfcm9vdGZzPWBldmFsIGVjaG8gJHNlbGVjdF9yb290ZnNfdmFyYAorICBzZWxlY3Rfc3lzcm9vdF9pbWFnZT1gZXZhbCBlY2hvICRzZWxlY3Rfc3lzcm9vdF9pbWFnZV92YXJgCisgIHNlbGVjdF9zeXNyb290PWBldmFsIGVjaG8gJHNlbGVjdF9zeXNyb290X3ZhcmAKKyAgc2VsZWN0X21hY2hpbmU9YGV2YWwgZWNobyAkc2VsZWN0X21hY2hpbmVfdmFyYAorCisgIGlmIFsgLW4gIiRzZWxlY3Rfc3lzcm9vdCIgXTsgdGhlbgorICAgIHNlbGVjdF9zeXNyb290PWByZWFkbGluayAtbSAkc2VsZWN0X3N5c3Jvb3RgCisgIGZpCisKKyAgaWYgWyAiJHNlbGVjdF9yb290ZnMiICE9ICIiIF07IHRoZW4KKyAgICBpZiBbICQyIF07IHRoZW4KKyAgICAjZWNob19pbmZvICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgICAgI2VjaG9faW5mbyAiIyBUbyBiZSBkb3dubG9hZGVkIHJvb3RmcyBpbWFnZSBkZXRhaWxzIGRlZmluZWQgaW4gYWR0X2luc3RhbGxlci5jb25mIgorICAgICNlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgICAgZWNob19pbmZvICIjIFRhcmdldCBhcmNoaXRlY3R1cmU6XHRcdCQxIgorICAgIGVjaG9faW5mbyAiIyBUYXJnZXQgbWFjaGluZTpcdFx0JHNlbGVjdF9tYWNoaW5lIgorICAgIGVjaG9faW5mbyAiIyBSb290X2ZzIGltYWdlczpcdFx0JHNlbGVjdF9yb290ZnMiCisgICAgZWNob19pbmZvICIjIFRhcmdldCBzeXNyb290IGltYWdlOlx0XHQkc2VsZWN0X3N5c3Jvb3RfaW1hZ2UiCisgICAgZWNob19pbmZvICIjIFRhcmdldCBzeXNyb290IGxvYzpcdFx0JHNlbGVjdF9zeXNyb290IgorICAgIGVjaG9faW5mbyAiXG4iCisgICAgI2VjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgIGVsc2UKKyAgICBnZXRfaW1hZ2UgJDEgJHNlbGVjdF9tYWNoaW5lICRzZWxlY3Rfcm9vdGZzCisgICAgZmkKKyAgZmkKK30KKworCisKKworI01haW4gYm9keSBvZiBpbnN0YWxsZXIKKworY2xlYXIKKworcnVuX3BhdGg9YGRpcm5hbWUgJDBgCitjZCAkcnVuX3BhdGgKKworaWYgWyAhIC1mICJzY3JpcHRzL3V0aWwiIF07IHRoZW4KKyAgZWNobyAtZSAiW0FEVF9JTlNUXSBFcnJvcjogU2NyaXB0IGZpbGU6IHV0aWwsIGNhbid0IGJlIGZvdW5kIHVuZGVyOiAkcnVuX3BhdGghIgorICBlY2hvIC1lICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICBlY2hvIC1lICIjIE1lZXQgZXJyb3Iocykgd2hlbiBpbnN0YWxsaW5nIFlvY3RvIEFEVCEgUGxlYXNlIGNoZWNrIGxvZyBmaWxlIGZvciBkZXRhaWxzLiAiCisgIGVjaG8gLWUgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgIGV4aXQgLTEKK2ZpCisKK2lmIFsgISAtZiAic2NyaXB0cy9hZHRfaW5zdGFsbGVyX2ludGVybmFsIiBdOyB0aGVuCisgIGVjaG8gLWUgIltBRFRfSU5TVF0gRXJyb3I6IFNjcmlwdCBmaWxlOiBhZHRfaW5zdGFsbGVyX2ludGVybmFsLCBjYW4ndCBiZSBmb3VuZCB1bmRlcjogJHJ1bl9wYXRoISIKKyAgZWNobyAtZSAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgZWNobyAtZSAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQhIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICBlY2hvIC1lICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICBleGl0IC0xCitmaQorCitjb25maWdfZmlsZT0iYWR0X2luc3RhbGxlci5jb25mIgoraWYgWyAhIC1mICIkY29uZmlnX2ZpbGUiIF07IHRoZW4KKyAgZWNob19pbmZvICJbQURUX0lOU1RdIEVycm9yOiBJbnN0YWxsYXRpb24gY29uZmlndXJhdGlvbiBmaWxlOiBhZHRfaW5zdGFsbGVyLmNvbmYgaXMgbm90IGZvdW5kIVxuIgorICBlY2hvX2luZm8gIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgZWNob19pbmZvICIjIE1lZXQgZXJyb3Iocykgd2hlbiBpbnN0YWxsaW5nIFlvY3RvIEFEVC4gUGxlYXNlIGNoZWNrIGxvZyBmaWxlIGZvciBkZXRhaWxzLiAiCisgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICBleGl0IC0xCitmaQorCisuIHNjcmlwdHMvZGF0YV9kZWZpbmUKKy4gc2NyaXB0cy91dGlsCisKKworaWYgWyAtZiAiJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUiIF07IHRoZW4KKyAgcm0gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKK2ZpCisKK2VjaG8gLW4gIlBsZWFzZSBlbnRlciB0aGUgaW5zdGFsbCBsb2NhdGlvbiAoZGVmYXVsdDogJERFRkFVTFRfSU5TVEFMTF9GT0xERVIpOiAiCityZWFkIElOU1RBTExfRk9MREVSCisKK2lmIFsgIiRJTlNUQUxMX0ZPTERFUiIgPSAiIiBdOyB0aGVuCisgICAgSU5TVEFMTF9GT0xERVI9JERFRkFVTFRfSU5TVEFMTF9GT0xERVIKK2ZpCisKK2V2YWwgSU5TVEFMTF9GT0xERVI9JChwcmludGYgIiVxIiAiJElOU1RBTExfRk9MREVSIikKK2lmIFsgLWQgIiRJTlNUQUxMX0ZPTERFUiIgXTsgdGhlbgorCWV4cG9ydCBJTlNUQUxMX0ZPTERFUj0kKGNkICIkSU5TVEFMTF9GT0xERVIiOyBwd2QpCitlbHNlCisJZXhwb3J0IElOU1RBTExfRk9MREVSPSQocmVhZGxpbmsgLW0gIiRJTlNUQUxMX0ZPTERFUiIpCitmaQorCitpZiBbIC1uICIkKGVjaG8gJElOU1RBTExfRk9MREVSfGdyZXAgJyAnKSIgXTsgdGhlbgorICAgICAgIGVjaG8gIlRoZSB0YXJnZXQgZGlyZWN0b3J5IHBhdGggKCRJTlNUQUxMX0ZPTERFUikgY29udGFpbnMgc3BhY2VzLiBBYm9ydCEiCisgICAgICAgZXhpdCAxCitmaQorCitjbGVhcgorCit1c2FnZQorCit1c2VyX2luc3RfdHlwZT0iJD8iCisKK3ZhbGlkYXRlX2NvbmZpZworY2hlY2tfcmVzdWx0CisKKyNjaGVjayBhZHRfcmVwbyBleGlzdAord2dldCAtLXNwaWRlciAkWU9DVE9BRFRfUkVQTyAyPiYxIHwgdGVlIC1hICIkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRSIKK2lmIGdyZXAgLXEgIjQwNCBOb3QgRm91bmQiICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFOyB0aGVuCisgIGVjaG8gLWUgIltBRFRfSU5TVF0gRXJyb3I6IFlPQ1RPQURUX1JFUE8gZG9lcyBub3QgZXhpc3Q6ICRZT0NUT0FEVF9SRVBPIgorICBlY2hvIC1lICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICBlY2hvIC1lICIjIE1lZXQgZXJyb3Iocykgd2hlbiBpbnN0YWxsaW5nIFlvY3RvIEFEVCEgUGxlYXNlIGNoZWNrIGxvZyBmaWxlIGZvciBkZXRhaWxzLiAiCisgIGVjaG8gLWUgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgIGV4aXQgLTEKK2ZpCisKKyNmaXJzdGx5IHdlIG5lZWQgdG8gaW5zdGFsbCBvcGtnIGhvc3QKK2luc3RhbGxfb3BrZworCisjQ3JlYXRlIGZvbGRlcnMgZm9yIGhvbGRpbmcgcm9vdGZzL3FlbXUgaW1hZ2VzCitpZiBbICEgLWQgIiRMT0NBTF9ET1dOTE9BRCIgXTsgdGhlbgorICBlY2hvX2luZm8gIkNyZWF0aW5nIG5ldyBpbWFnZXMgZG93bmxvYWRpbmcgZm9sZGVyOiAkTE9DQUxfRE9XTkxPQUQgLi4uIgorICBta2RpciAtcCAkTE9DQUxfRE9XTkxPQUQKK2ZpCisKKyNkb3dubG9hZGluZyByZXF1aXJlZCBxZW11IGltYWdlcy9yb290ZnMKK2lmIFsgIiR1c2VyX2luc3RfdHlwZSIgPT0gIjAiIF07IHRoZW4KKyAgb3ZlcnJpZGVfb2xkZmlsZT0xCitlbHNlCisgIG92ZXJyaWRlX29sZGZpbGU9MAorZmkKKworZm9yIGFyY2hfdHlwZSBpbiAkWU9DVE9BRFRfVEFSR0VUUzsgZG8KKyAgZG93bmxvYWRfaW1hZ2VzICRhcmNoX3R5cGUKK2RvbmUKKworc2NyaXB0cy9hZHRfaW5zdGFsbGVyX2ludGVybmFsICR1c2VyX2luc3RfdHlwZQorCityZXN1bHQ9IiQ/IgorI2VjaG9faW5mbyAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCitpZiBbICIkcmVzdWx0IiA9PSAiMCIgXTsgdGhlbgorICBlY2hvX2luZm8gIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICBlY2hvX2luZm8gIiMgWW9jdG8gQURUIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQuIgorICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorZmkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvYWR0X2luc3RhbGxlci5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvYWR0X2luc3RhbGxlci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2N2ZiZDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9hZHRfaW5zdGFsbGVyLmNvbmYKQEAgLTAsMCArMSw3NSBAQAorIyBZb2N0byBBRFQgSW5zdGFsbGVyIENvbmZpZ3VyYXRpb24gRmlsZQorIworIyBDb3B5cmlnaHQgMjAxMC0yMDExIGJ5IEludGVsIENvcnAuCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgCisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIAorIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIAorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSAKKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gCisjIFRIRSBTT0ZUV0FSRS4KKworCisjIFlvdXIgeW9jdG8gZGlzdHJvIHJlcG9zaXRvcnksIHRoaXMgc2hvdWxkIGluY2x1ZGUgSVBLRyBiYXNlZCBwYWNrYWdlcyBhbmQgcm9vdCBmaWxlc3lzdGVtIGZpbGVzIHdoZXJlIHRoZSBpbnN0YWxsYXRpb24gaXMgYmFzZWQgb24KKworWU9DVE9BRFRfUkVQTz0iQURUUkVQTyIKKworIyBUaGUgZm9sbG93aW5nIGFyZSBmb3Igc3lzdGVtIHdpZGUgc2V0dXAKKyMgVGFyZ2V0IGFyY2hpdGVjdHVyZXMgdGhhdCB5b3Ugd2FudCB0byBzZXR1cCBob3N0IGNyb3NzIGRldiBlbnZpcm9ubWVudCBmb3IKKyMgdmFsaWQgdmFsdWVzIGFyZTogYXJtLCB4ODYsIHg4Nl82NCwgcHBjLCBtaXBzIHdpdGggc3BhY2Ugc2VwYXJhdGlvbiBiZXR3ZWVuIGVudHJpZXMKK1lPQ1RPQURUX1RBUkdFVFM9ImFybSB4ODYiCisjIFdoZXRoZXIgaW5zdGFsbCBxZW11IG9yIG5vdCwgdmFsaWQgZW50cmllcyBhcmU6IFkvTgorWU9DVE9BRFRfUUVNVT0iWSIKKyMgV2hldGhlciBpbnN0YWxsIHVzZXItbW9kZSBuZnMgb3Igbm90LCB2YWxpZCBlbnRyaWVzIGFyZTogWS9OLiAgSWYgeW91IHdhbnQgdG8gdXNlIFlvY3RvIEVjbGlwc2UgcGx1Zy1pbiBhcyB5b3VyIGRldiBJREUsIHlvdSBuZWVkIHRvIHNlbGVjdCBib3RoIHFlbXUgYW5kIE5GUworWU9DVE9BRFRfTkZTX1VUSUw9IlkiCisKKyMgVGhlc2UgMiB2YWx1ZXMgd2lsbCBiZSBzdXBwb3J0ZWQgaW4gdGhlIGZ1cnR1cmUgaW5zdGFsbGVyCisjWU9DVE9BRFRfQklUQkFLRT0iWSIKKyNZT0NUT0FEVF9NRVRBREFUQT0iWSIKKworI1RoZSBmb2xsb3dpbmdzIGFyZSBmb3Igc2V0dGluZyB1cCBzcGVjaWZpYyB0YXJnZXQgYXJjaGl0ZWN0dXJlCisjWU9DVE9BRFRfUk9PVEZTXyRhcmNoIGlzIGZvciBzcGVjaWZ5aW5nIHdoYXQgcm9vdCBmaWxlc3lzdGVtIGltYWdlIGZpbGVzIHlvdSB3YW50IHRvIGRvd25sb2FkIGZyb20gdGhlIHJlcG9zaXRvcnkuIFRoZSB2YWxpZCB2YWx1ZXMgdG8gcmVwbGFjZSAkYXJjaCBhcmU6IGFybSwgeDg2LCB4ODZfNjQsIHBvd2VycGMsIG1pcHMuICBUaGUgdmFsaWQgaW1hZ2UgZmlsZXMgYXJlOiBtaW5pbWFsLCBtaW5pbWFsLWRldiwgc2F0bywgc2F0by1kZXYsIHNhdG8tc2RrLGxzYiwgbHNiLWRldiwgbHNiLXNkay4gIElmIHlvdSB3YW50IHRvIGRvd25sb2FkIG11bHRpcGxlIGltYWdlcywgdGhlIGVudHJpZXMgYXJlIHNwYWNlIHNlcGFyYXRlZAorWU9DVE9BRFRfUk9PVEZTX2FybT0ibWluaW1hbCBzYXRvLXNkayIKKyNTcGVjaWZ5IHdoaWNoIHJvb3QgZmlsZXN5c3RlbSBmaWxlIHRvIHVzZSB0byBleHRyYWN0IGFzIHRhcmdldCBzeXNyb290LiAgUGxlYXNlIGVuc3VyZSB0aGUgZW50cnkgaXMgaW4gdGhlIGxpc3Qgb2YgZG93bmxvYWRlZCByb290IGZpbGVzeXN0ZW0gZmlsZXMgdGhhdCBzcGVjaWZpZWQgYWJvdmUgaW4gWU9DVE9BRFRfUk9PVEZTXyRhcmNoCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV9hcm09InNhdG8tc2RrIgorI1RoZSBtYWNoaW5lIGZvciB3aGljaCB5b3Ugd2FudCB0byBkb3dubG9hZCB0aGUgaW1hZ2UuIEVhY2ggbWFjaGluZSBtaWdodCBoYXZlCisjZGlmZmVyZW50IGNvbXBpbGF0aW9uIG9wdGlvbnMgaW4gb3JkZXIgdG8gc2VsZWN0IGNlcnRhaW4gaGFyZHdhcmUgbW9kZWxzIG9yCisjY29uZmlndXJhdGlvbnMKK1lPQ1RPQURUX1RBUkdFVF9NQUNISU5FX2FybT0icWVtdWFybSIKKyNUaGUgbG9jYXRpb24gd2hlcmUgdGhlIHRhcmdldCBzeXNyb290IHdpbGwgYmUgc2V0dXAKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0xPQ19hcm09IiRIT01FL3Rlc3QteW9jdG8vJFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FX2FybSIKKworCisjSGVyZSdzIGEgdGVtcGxhdGUgZm9yIHNldHRpbmcgdXAgdGFyZ2V0IGFyY2ggb2YgeDg2IAorWU9DVE9BRFRfUk9PVEZTX3g4Nj0ic2F0by1zZGsiCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV94ODY9InNhdG8tc2RrIgorWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfeDg2PSJxZW11eDg2IgorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfTE9DX3g4Nj0iJEhPTUUvdGVzdC15b2N0by8kWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfeDg2IgorCisjSGVyZSdzIHNvbWUgdGVtcGxhdGUgb2Ygb3RoZXIgYXJjaGVzLCB3aGljaCB5b3UgbmVlZCB0byBjaGFuZ2UgdGhlIHZhbHVlIGluICIiCitZT0NUT0FEVF9ST09URlNfeDg2XzY0PSJzYXRvLXNkayIKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFX3g4Nl82ND0ic2F0by1zZGsiCitZT0NUT0FEVF9UQVJHRVRfTUFDSElORV94ODZfNjQ9InFlbXV4ODYtNjQiCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfeDg2XzY0PSIkSE9NRS90ZXN0LXlvY3RvLyRZT0NUT0FEVF9UQVJHRVRfTUFDSElORV94ODZfNjQiCisKK1lPQ1RPQURUX1JPT1RGU19wcGM9InNhdG8tc2RrIgorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfcHBjPSJzYXRvLXNkayIKK1lPQ1RPQURUX1RBUkdFVF9NQUNISU5FX3BwYz0icWVtdXBwYyIKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0xPQ19wcGM9IiRIT01FL3Rlc3QteW9jdG8vJFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FX3BwYyIKKworWU9DVE9BRFRfUk9PVEZTX21pcHM9InNhdG8tc2RrIgorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfbWlwcz0ic2F0by1zZGsiCitZT0NUT0FEVF9UQVJHRVRfTUFDSElORV9taXBzPSJxZW11bWlwcyIKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0xPQ19taXBzPSIkSE9NRS90ZXN0LXlvY3RvLyRZT0NUT0FEVF9UQVJHRVRfTUFDSElORV9taXBzIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9vcGtnL2NvbmYvb3BrZy1zZGstaTY4Ni5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvb3BrZy9jb25mL29wa2ctc2RrLWk2ODYuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTYyN2IzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvb3BrZy9jb25mL29wa2ctc2RrLWk2ODYuY29uZgpAQCAtMCwwICsxLDYgQEAKK2FyY2ggYWxsIDEKK2FyY2ggYW55IDYKK2FyY2ggbm9hcmNoIDExCithcmNoIGk2ODYtbmF0aXZlc2RrIDE2CitzcmMgeXAtaTY4Ni1uYXRpdmVzZGsgQURUUkVQT19VUkwvYWR0LWlway9pNjg2LW5hdGl2ZXNkaworc3JjIHlwLWk2ODYtYWxsIEFEVFJFUE9fVVJML2FkdC1pcGsvYWxsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9vcGtnL2NvbmYvb3BrZy1zZGsteDg2XzY0LmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9vcGtnL2NvbmYvb3BrZy1zZGsteDg2XzY0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA1MDRhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL29wa2cvY29uZi9vcGtnLXNkay14ODZfNjQuY29uZgpAQCAtMCwwICsxLDYgQEAKK2FyY2ggYWxsIDEKK2FyY2ggYW55IDYKK2FyY2ggbm9hcmNoIDExCithcmNoIHg4Nl82NC1uYXRpdmVzZGsgMTYKK3NyYyB5cC14ODZfNjQtbmF0aXZlc2RrIEFEVFJFUE9fVVJML2FkdC1pcGsveDg2XzY0LW5hdGl2ZXNkaworc3JjIHlwLXg4Nl82NC1hbGwgQURUUkVQT19VUkwvYWR0LWlway9hbGwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvYWR0X2luc3RhbGxlcl9pbnRlcm5hbCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvYWR0X2luc3RhbGxlcl9pbnRlcm5hbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZjVmYjQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy9hZHRfaW5zdGFsbGVyX2ludGVybmFsCkBAIC0wLDAgKzEsMzEyIEBACisjIS9iaW4vYmFzaAorCisjIFlvY3RvIEFEVCBJbnN0YWxsZXIKKyMKKyMgQ29weXJpZ2h0IDIwMTAtMjAxMSBieSBJbnRlbCBDb3JwLgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IAorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIAorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorIyBUSEUgU09GVFdBUkUuCisKK3BhcnNlX2NvbmZpZygpCit7CisgIElOU1RfQVJDSD1gdW5hbWUgLW1gCisKKyAgY2FzZSAkSU5TVF9BUkNIIGluIAorICBpWzMtNl04NikKKyAgICBPUEtHX0NPTkZJR19GSUxFPSRZT0NUT0FEVF9PUEtHX0NPTkZfRklMRV8zMgorICAgIE9FQ09SRV9OQVRJVkVfU1lTUk9PVD0iJElOU1RBTExfRk9MREVSL3N5c3Jvb3RzLyRJTlNUX0FSQ0gkU0RLX1ZFTkRPUi1saW51eC8iCisgICAgOzsKKyAgeDg2XzY0KQorICAgIE9QS0dfQ09ORklHX0ZJTEU9JFlPQ1RPQURUX09QS0dfQ09ORl9GSUxFXzY0CisgICAgT0VDT1JFX05BVElWRV9TWVNST09UPSIkSU5TVEFMTF9GT0xERVIvc3lzcm9vdHMveDg2XzY0JFNES19WRU5ET1ItbGludXgvIgorICAgIDs7CisgICopCisgICAgZWNob19pbmZvICJbQURUX0lOU1RdIEVycm9yOiBJbnN0YWxsYXRpb24gTWFjaGluZSBpcyBub3Qgc3VwcG9ydGVkISIKKyAgICBleGl0IC0xCisgICAgOzsKKyAgZXNhYworfQorCitnZXRfc3Vkb19hcHAoKQoreworICB1c2VybmFtZT0kKGlkIC1udSkKKworICAjIGZpbmQgdGhlIG93bmVyIG9mIHRoZSBwYXJlbnQKKyAgZGlyPSQxCisgIHdoaWxlIFsgMSBdOyBkbworICAgICAgaWYgWyAtZCAkZGlyIF07IHRoZW4KKyAgICAgICAgICBvd25lcj0kKHN0YXQgLWMgJVUgJGRpcikKKyAgICAgICAgICBicmVhaworICAgICBlbHNlCisgICAgICAgICAgZGlyPSQoZGlybmFtZSAkZGlyKQorICAgICBmaQorICBkb25lCisKKyAgaWYgWyAiJG93bmVyIiA9ICIkdXNlcm5hbWUiIF07IHRoZW4KKyAgICAgIHRydWUKKyAgZWxzZQorICAgICAgZWNobyBzdWRvCisgIGZpCit9CisKKyMgdGhpcyBmdW5jdGlvbiBhY2NlcHRzIGFyY2hfdHlwZSAoeDg2LCB4ODZfNjQsIGFybSwgcHBjLCBtaXBzKSBhcyB0aGUgZmlyc3QKKyMgYXJndW1lbnQsIHJldHVybmluZyB0aGUgbG9jYXRpb24gb2YgdGhlIHRhcmdldCByb290ZnMKK2dldF90YXJnZXRfcm9vdGZzX2xvY2F0aW9uKCkgeworCVsgLXogIiQxIiBdICYmIHJldHVybgorCisJYXJjaF90eXBlPSQxCisJIyByb290ZnMgZXh0cmFjdGlvbiBkaXJlY3RvcnkKKwl0YXJnZXRfc3lzcm9vdF92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfTE9DXyRhcmNoX3R5cGUiCisJdGFyZ2V0X3N5c3Jvb3Q9YGV2YWwgZWNobyAkdGFyZ2V0X3N5c3Jvb3RfdmFyYAorCisJaWYgWyAiJHRhcmdldF9zeXNyb290IiA9PSAiIiBdOyB0aGVuCisJCXJldHVybgorCWVsc2UKKwkJZWNobyAiYHJlYWRsaW5rIC1tICR0YXJnZXRfc3lzcm9vdGAiCisJZmkKK30KKworCisjbGV0IHVzIGluc3RhbGwgYSBxZW11LW5hdGl2ZSBmaXJzdGx5CisjaW5zdGFsbGF0aW9uIHN0ZXAgMgoraW5zdGFsbF9uYXRpdmVfc2RrKCkKK3sKKworZWNob19pbmZvICJcblN0YXJ0IGluc3RhbGxpbmcgc2VsZWN0ZWQgbmF0aXZlIEFEVCBmb3IgYXJjaHM6ICRZT0NUT0FEVF9UQVJHRVRTLi4uIgorCisjIHdoZXJlIHRoZSBwYWNrYWdlcyBhcmUgaW5zdGFsbGVkLgorTkFUSVZFX0lOU1RBTExfRElSPSRJTlNUQUxMX0ZPTERFUgorCitpZiBbIC1kICIkSU5TVEFMTF9GT0xERVIiIF07IHRoZW4KKyAgZWNob19pbmZvICJcbk5hdGl2ZSBBRFQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBcIiRJTlNUQUxMX0ZPTERFUlwiIGFscmVhZHkgZXhpc3RzISBDb250aW51ZSBpbnN0YWxsYXRpb24gd2lsbCBvdmVycmlkZSBpdHMgY29udGVudHMhIgorICBjb25maXJtX2luc3RhbGwgJDEKK2ZpCisKKyNOb3cgYmVnaW4gdG8gaW5zdGFsbCBuYXRpdmUgc2RrIGFuZCBleHRyYWN0IHFlbXUgcm9vdGZzIHdoaWNoIG5lZWRzIHByaXZpbGVnZSByaWdodHMKKyNkZXBlbmRpbmcgb24gdGhlIGluc3RhbGwgbG9jYXRpb24KK1NVRE89JChnZXRfc3Vkb19hcHAgJE5BVElWRV9JTlNUQUxMX0RJUikKK2lmIFsgLW4gIiRTVURPIiBdOyB0aGVuCisgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgIGVjaG9faW5mbyAiUGxlYXNlIG5vdGUgZnJvbSB0aGlzIHBvaW50IG9uIGluc3RhbGxhdGlvbiByZXF1aXJlcyBzdWRvIHBhc3N3b3JkIC4uLiIKKyAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKK2ZpCisKKyN3ZSBuZWVkIHRvIG1ha2UgdGhpcyBkaXJlY3RvcnkgZmlyc3RseSBzaW5jZSBvcGtnIG5lZWQgdG8gdXNlIGl0LgorT1BLR19MT0NLX0RJUj0iJE5BVElWRV9JTlNUQUxMX0RJUi8kT1BLR19MSUJESVIvb3BrZyIKK2lmIFsgISAtZCAiJE9QS0dfTE9DS19ESVIiIF07IHRoZW4KKyAgJFNVRE8gbWtkaXIgLXAgJE9QS0dfTE9DS19ESVIKKyAgZWNob19pbmZvICJTdWNjZXNzZnVsbHkgY3JlYXRlIGRpcmVjdG9yeSAkT1BLR19MT0NLX0RJUi4gIgorI2lmIHVzZXIgZGVsZXRlIC9vcHQveHh4LCB3aGlsZSBkYW5nbGluZyBmb2xkZXJzIHRoZXJlLCByZXBvcnQgZXJyb3IKK2VsaWYgWyAhIC1kICIkSU5TVEFMTF9GT0xERVIiIF07IHRoZW4KKyAgZWNob19pbmZvICJcbkRhbmdsaW5nIG9wa2cgY2FjaGUgZm9sZGVyICRPUEtHX0xPQ0tfRElSIGRldGVjdGVkLiBDb250aW51ZSBpbnN0YWxsYXRpb24gd2lsbCByZW1vdmUgdGhlIGZvbGRlciEiCisgIGNvbmZpcm1faW5zdGFsbCAkMQorICAkU1VETyBybSAtcmYgJE9QS0dfTE9DS19ESVIKKyAgJFNVRE8gbWtkaXIgLXAgJE9QS0dfTE9DS19ESVIKKyNpZiB1c2VyIGFyZSB1cGRhdGluZyBpbnN0YWxsaW5nLCBqdXN0IGxldCBoaW0vaGVyIGdvLCBnaXZlIGhlci9oaW0gcHJvbXB0CitlbHNlCisgIGVjaG9faW5mbyAiQURUIGhhcyBhbHJlYWR5IGJlZW4gaW5zdGFsbGVkLiBXaWxsIHVwZGF0ZSBpdHMgY29udGVudHMuLi4iCitmaQorCisjZmlyc3QgdXBkYXRlIHJlcG9zaXRvcnkKK2lmIFsgIngkU1VETyIgPSAieCIgXTsgdGhlbgorICAgIE9QS0dfQ01EPSIkTE9DQUxfT1BLR19MT0MvYmluL29wa2ciCitlbHNlCisgICAgT1BLR19DTUQ9InN1ZG8gLUUgJExPQ0FMX09QS0dfTE9DL2Jpbi9vcGtnIgorZmkKKworZWNob19pbmZvICJVcGRhdGluZyBvcGtnLi4uIgorJE9QS0dfQ01EIC1mICRPUEtHX0NPTkZJR19GSUxFIC1vICROQVRJVkVfSU5TVEFMTF9ESVIgdXBkYXRlICY+PiAkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorY2hlY2tfcmVzdWx0CitlY2hvX2luZm8gIm9wa2cgdXBkYXRlIHByb2Nlc3MgZW5kZWQuLi4iCisKKyNpbnN0YWxsIGJlbG93IG11c3Qgc2RrLWhvc3QgcGFja2FnZXMKK09QS0dfSU5TVEFMTF9DTUQ9IiRPUEtHX0NNRCAiCitPUEtHX0lOU1RBTExfTkFUSVZFX0NNRD0iJE9QS0dfSU5TVEFMTF9DTUQgIC0tZm9yY2Utb3ZlcndyaXRlIC1mICRPUEtHX0NPTkZJR19GSUxFIC1vICROQVRJVkVfSU5TVEFMTF9ESVIgaW5zdGFsbCIKKworQkFTRV9IT1NUU0RLX1BLR05BTUVTPSJwc2V1ZG8gb3BrZyBwa2djb25maWcgbGlidG9vbCBhdXRvY29uZiBhdXRvbWFrZSIKK2ZvciBwa2cgaW4gJEJBU0VfSE9TVFNES19QS0dOQU1FUzsgZG8KKyAgZWNob19pbmZvICJJbnN0YWxsaW5nICR7cGtnfSBuYXRpdmVzZGsgLi4uXG4iCisgICRPUEtHX0lOU1RBTExfTkFUSVZFX0NNRCBuYXRpdmVzZGstJHtwa2d9ICY+PiAkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorICBjaGVja19yZXN1bHQKK2RvbmUKKworZm9yIHRhcmdldF90eXBlIGluICRZT0NUT0FEVF9UQVJHRVRTOyBkbworICBtYWNoaW5lX3Zhcj0iXCRZT0NUT0FEVF9UQVJHRVRfTUFDSElORV8kdGFyZ2V0X3R5cGUiCisgIG1hY2hpbmU9YGV2YWwgZWNobyAkbWFjaGluZV92YXJgCisgIGVjaG9faW5mbyAiSW5zdGFsbGluZyBjcm9zcyBjYW5hZGlhbiBwYWNrYWdlcyBmb3IgJG1hY2hpbmUgLi4uIgorICAkT1BLR19JTlNUQUxMX05BVElWRV9DTUQgcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLSRtYWNoaW5lICY+PiAkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorICBjaGVja19yZXN1bHQKKworICB0YXJnZXRfc3lzcm9vdD1gZ2V0X3RhcmdldF9yb290ZnNfbG9jYXRpb24gJHRhcmdldF90eXBlYAorICBbIC16ICIkdGFyZ2V0X3N5c3Jvb3QiIF0gJiYgY29udGludWUKKworICAjIGdldCB0aGUgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IHBhdGhzOiBvcmlnaW5hbCAodGhlIG9uZSBiZWZvcmUgcmVsb2NhdGlvbikKKyAgIyBhbmQgcmVsb2NhdGVkCisgIGVudl9zY3JpcHRfb3JpZ2luYWw9YCRPUEtHX0NNRCAtZiAkT1BLR19DT05GSUdfRklMRSAtbyAkTkFUSVZFX0lOU1RBTExfRElSIGZpbGVzIG1ldGEtZW52aXJvbm1lbnQtJG1hY2hpbmV8XAorCQkJCQkJCWdyZXAgZW52aXJvbm1lbnQtc2V0dXBgCisgIGVudl9zY3JpcHRfcmVsb2NhdGVkPSRJTlNUQUxMX0ZPTERFUi8ke2Vudl9zY3JpcHRfb3JpZ2luYWwjIyovfQorCisgICMgb3BrZyB3aWxsIG5vdCBpbnN0YWxsIHBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbiBwYWNrYWdlIGlmIGl0IHdhcyBhbHJlYWR5CisgICMgaW5zdGFsbGVkLiBTbywgdGhlIGVudmlyb25tZW50IHNjcmlwdCBpcyBpbiBvbmUgcGxhY2Ugb3IgdGhlIG90aGVyLgorICBbIC1lICIkSU5TVEFMTF9GT0xERVIvJGVudl9zY3JpcHRfb3JpZ2luYWwiIF0gJiYgZW52X3NjcmlwdD0kSU5TVEFMTF9GT0xERVIvJGVudl9zY3JpcHRfb3JpZ2luYWwKKyAgWyAtZSAiJGVudl9zY3JpcHRfb3JpZ2luYWwiIF0gJiYgZW52X3NjcmlwdD0kZW52X3NjcmlwdF9vcmlnaW5hbAorICBbIC1lICIkZW52X3NjcmlwdF9yZWxvY2F0ZWQiIF0gJiYgZW52X3NjcmlwdD0kZW52X3NjcmlwdF9yZWxvY2F0ZWQKKworICAkU1VETyBzZWQgLWkgLWUgInMlU0RLVEFSR0VUU1lTUk9PVD0uKiVTREtUQVJHRVRTWVNST09UPSR0YXJnZXRfc3lzcm9vdCVnIiAkZW52X3NjcmlwdAorZG9uZQorCitpZiBbICIkWU9DVE9BRFRfUUVNVSIgPT0gIlkiIF0gfHwgWyAiJFlPQ1RPQURUX1FFTVUiID09ICJ5IiBdOyB0aGVuCisgIGVjaG9faW5mbyAiXG5JbnN0YWxsaW5nIHFlbXUgbmF0aXZlIC4uLiIKKyAgJE9QS0dfSU5TVEFMTF9OQVRJVkVfQ01EIG5hdGl2ZXNkay1xZW11ICY+PiAkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorICBjaGVja19yZXN1bHQKKyAgJE9QS0dfSU5TVEFMTF9OQVRJVkVfQ01EIG5hdGl2ZXNkay1xZW11LWhlbHBlciAmPj4gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgY2hlY2tfcmVzdWx0CitmaQorCitpZiBbICIkWU9DVE9BRFRfTkZTX1VUSUwiID09ICJZIiBdIHx8IFsgIiRZT0NUT0FEVF9ORlNfVVRJTCIgPT0gInkiIF07IHRoZW4KKyAgZWNob19pbmZvICJcbkluc3RhbGxpbmcgdW5mcyAuLi4iCisgICRPUEtHX0lOU1RBTExfTkFUSVZFX0NNRCBuYXRpdmVzZGstdW5mczMgJj4+ICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgIGNoZWNrX3Jlc3VsdAorZmkKKworIyBMb3NlIHRoZSAuL29wdC8ke0RJU1RST30vJHtTREtfVkVSU0lPTn0gcGFydCwgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8ga2VlcAorIyB0aGUgZW50aXJlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIFdlIGNvdWxkIHBhdGNoIG9wa2cgdG8gZG8gdGhhdCBidXQgaXQncyBmYXIKKyMgc2ltcGxlciB0byBkbyB0aGF0IGhlcmUgYW5kIGFjaGlldmUgdGhlIHNhbWUgcmVzdWx0LgorIyBUaGlzIGlzIGRvbmUgaW4gdHdvIHN0ZXBzOgoraWYgWyAtZCAkTkFUSVZFX0lOU1RBTExfRElSLyRERUZBVUxUX0lOU1RBTExfRk9MREVSIF07IHRoZW4KKyAgICAjIFN0ZXAgMTogY29weSAuL29wdC8ke0RJU1RST30vJHtTREtfVkVSU0lPTn0gY29udGVudHMgdG8gJE5BVElWRV9JTlNUQUxMX0RJUi4KKyAgICAjIFdlIGNhbm5vdCB1c2UgbW92ZSBpZiAkTkFUSVZFX0lOU1RBTExfRElSIGlzIG5vdCBlbXB0eSAoZm9yIGV4YW1wbGU6IGNvbnRhaW5zCisgICAgIyBhbm90aGVyIFNESykKKyAgICAkU1VETyBjcCAtciAkTkFUSVZFX0lOU1RBTExfRElSLyRERUZBVUxUX0lOU1RBTExfRk9MREVSLyogJE5BVElWRV9JTlNUQUxMX0RJUgorCisgICAgIyBkZWxldGUgdGhlIHNvdXJjZSBkaXJlY3Rvcnkgbm93CisgICAgJFNVRE8gcm0gLXJmICROQVRJVkVfSU5TVEFMTF9ESVIvJERFRkFVTFRfSU5TVEFMTF9GT0xERVIvKgorCisgICAgIyBTdGVwIDI6IERlbGV0ZSB0aGUgLi9vcHQvJHtESVNUUk99LyR7U0RLX1ZFUlNJT059IGRpcmVjdG9yaWVzIHRvbywgdGhleSBzaG91bGQgYmUgZW1wdHkKKyAgICBkaXI9JE5BVElWRV9JTlNUQUxMX0RJUi8kREVGQVVMVF9JTlNUQUxMX0ZPTERFUgorICAgIHdoaWxlIFsgIiRkaXIiICE9ICIkTkFUSVZFX0lOU1RBTExfRElSIiBdOyBkbworICAgICAgICAjIGlmIHRoZSB1c2VyIGNob3NlIC8gYXMgdGhlIGluc3RhbGwgZm9sZGVyLCB0aGVuIHdlIHNob3VsZCBsZWF2ZSAvb3B0IGluIHBsYWNlCisgICAgICAgIGlmIFsgIiRkaXIiID0gIi9vcHQiIF07IHRoZW4KKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisKKyAgICAgICAgIyB0cnkgdG8gZGVsZXRlIHRoZSBkaXJlY3RvcnksIG9ubHkgaWYgaXQncyBlbXB0eQorICAgICAgICAkU1VETyBybWRpciAkZGlyCisgICAgICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKworICAgICAgICAjIGdvIHRvIHRoZSBuZXh0IGRpcmVjdG9yeQorICAgICAgICBkaXI9JChkaXJuYW1lICRkaXIpCisgICAgZG9uZQorICAgICMgU3RlcCAzOiBSZXdyaXRlIHRoZSAqLmxpc3QgZmlsZXMgdG8gY29udGFpbiB0aGUgY29ycmVjdCBwYXRocworICAgICRTVURPIGZpbmQgJE5BVElWRV9JTlNUQUxMX0RJUi92YXIvbGliL29wa2cgLXR5cGUgZiAtZXhlYyBzZWQgLWkgLWUgJyNeJERFRkFVTFRfSU5TVEFMTF9GT0xERVIjJE5BVElWRV9JTlNUQUxMX0RJUiMnIHt9IFw7CitmaQorCisjIExpbmsgdGhlIGxkLnNvLmNhY2hlIGZpbGUgaW50byB0aGUgaG9zdHMgZmlsZXN5c3RlbQoraWYgWyAhIC1mICIkT0VDT1JFX05BVElWRV9TWVNST09UL2V0Yy9sZC5zby5jYWNoZSIgXTsgdGhlbgorZWNob19pbmZvICJMaW5rIHRoZSBsZC5zby5jYWNoZSBmaWxlIGludG8gdGhlIGhvc3QgZmlsZXN5c3RlbSIKKyRTVURPIGxuIC1zIC9ldGMvbGQuc28uY2FjaGUgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC9ldGMvbGQuc28uY2FjaGUKK2NoZWNrX3Jlc3VsdAorZmkKKworIyByZWxvY2F0ZSBiaW5hcmllcworZWNob19pbmZvICJcblJlbG9jYXRpbmcgYmluYXJpZXMgLi4uIgorZXNjYXBlZF9zZGtwYXRoPSQoZWNobyAkREVGQVVMVF9JTlNUQUxMX0ZPTERFUiB8c2VkIC1lICJzOltcK1wuXTpcXFxcXFxcXFwwOmciKQorCisjIFdlIGRvbid0IGNoYW5nZSB0aGUgc2NyaXB0IGluLXBsYWNlIHNpbmNlIHdlIG1heSB3YW50IHRoZSB1c2VyIHRvIHJlLXJ1bgorIyBhZHQtaW5zdGFsbGVyIHNjcmlwdAorc2VkIC1lICJzOiMjREVGQVVMVF9JTlNUQUxMX0RJUiMjOiRlc2NhcGVkX3Nka3BhdGg6IiBzY3JpcHRzL3JlbG9jYXRlX3Nkay5weSA+IHNjcmlwdHMvcmVsb2NhdGVfc2RrX3RtcC5weQorY2htb2QgK3ggc2NyaXB0cy9yZWxvY2F0ZV9zZGtfdG1wLnB5CisKK2RsX3BhdGg9JChmaW5kICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvbGliIC1uYW1lICJsZC1saW51eCoiKQorZXhlY3V0YWJsZV9maWxlcz0kKGZpbmQgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCAtdHlwZSBmIC1wZXJtIC8xMTEpCisKKyRTVURPIHNjcmlwdHMvcmVsb2NhdGVfc2RrX3RtcC5weSAkSU5TVEFMTF9GT0xERVIgJGRsX3BhdGggJGV4ZWN1dGFibGVfZmlsZXMKK2NoZWNrX3Jlc3VsdAorCisjIHJlcGxhY2UgL29wdC8ke0RJU1RST30vJHtTREtfVkVSU0lPTn0gd2l0aCB0aGUgaW5zdGFsbCBmb2xkZXIgaW4gYWxsIGNvbmZpZ3MKK2Vudl9zZXR1cF9zY3JpcHQ9JChmaW5kICROQVRJVkVfSU5TVEFMTF9ESVIvIC1uYW1lICJlbnZpcm9ubWVudC1zZXR1cC0qIikKKyRTVURPIHNlZCAtaSAtZSAiczokREVGQVVMVF9JTlNUQUxMX0ZPTERFUjokTkFUSVZFX0lOU1RBTExfRElSOmciICRlbnZfc2V0dXBfc2NyaXB0CisKK2ZpbmQgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCAtdHlwZSBmIC1leGVjIGZpbGUgJ3t9JyBcOyB8IGdyZXAgIjouKlwoQVNDSUlcfHNjcmlwdFx8c291cmNlXCkuKnRleHQiIHwgXAorICAgIGN1dCAtZCc6JyAtZjEgfCB4YXJncyAkU1VETyBzZWQgLWkgLWUgInM6JERFRkFVTFRfSU5TVEFMTF9GT0xERVI6JE5BVElWRV9JTlNUQUxMX0RJUjpnIgorCisjIGNoYW5nZSBhbGwgc3ltbGlua3MgcG9pbnRpbmcgdG8gL29wdC8ke0RJU1RST30vJHtTREtfVkVSU0lPTn0KK2ZvciBsIGluICQoZmluZCAkTkFUSVZFX0lOU1RBTExfRElSIC10eXBlIGwpOyBkbworICAgICRTVURPIGxuIC1zZm4gJChyZWFkbGluayAkbHxzZWQgLWUgInM6JERFRkFVTFRfSU5TVEFMTF9GT0xERVI6JE5BVElWRV9JTlNUQUxMX0RJUjoiKSAkbAorZG9uZQorCisjIGZpbmQgb3V0IGFsbCBwZXJsIHNjcmlwdHMgaW4gJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCBhbmQgbW9kaWZ5IHRoZW0KKyMgcmVwbGFjaW5nIHRoZSBob3N0IHBlcmwgd2l0aCBTREsgcGVybC4KK2ZvciBwZXJsX3NjcmlwdCBpbiAkKCRTVURPIGdyZXAgLW0gMSAiXiMhLipwZXJsIiAtcmwgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCk7IGRvCisgICAgJFNVRE8gc2VkIC1pIC1lICJzOl4jISAqL3Vzci9iaW4vcGVybC4qOiMhIC91c3IvYmluL2VudiBwZXJsOmciIC1lIFwKKyAgICAgICAgInM6IC91c3IvYmluL3Blcmw6IC91c3IvYmluL2VudiBwZXJsOmciICRwZXJsX3NjcmlwdAorZG9uZQorCitlY2hvX2luZm8gIlxuU3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCBzZWxlY3RlZCBuYXRpdmUgQURUISIKK30KKworI05lZWQgdGhyZWUgaW5wdXQgcGFyYW1zLCAkMSAtLSBhcmNoX3R5cGUoYXJtIHBvd2VycGMgeDg2IG1pcHMpICMyIC0tIHVzZXIgaW5zdGFsbGF0aW9uIHR5cGUKKyNjdXN0b21lciBvciBzY2lsZW50CisKK2luc3RhbGxfdGFyZ2V0KCkKK3sKKwordGFyZ2V0X3N5c3Jvb3Q9YGdldF90YXJnZXRfcm9vdGZzX2xvY2F0aW9uICQxYAorWyAteiAiJHRhcmdldF9zeXNyb290IiBdICYmIHJldHVybiAwCisKK3RhcmdldF9zeXNyb290X2ltYWdlX3Zhcj0iXCRZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV8kMSIKK3RhcmdldF9zeXNyb290X2ltYWdlPWBldmFsIGVjaG8gJHRhcmdldF9zeXNyb290X2ltYWdlX3ZhcmAKK2lmIFsgIiR0YXJnZXRfc3lzcm9vdF9pbWFnZSIgPT0gIiIgXTsgdGhlbgorICBlY2hvX2luZm8gIltBRFRfSU5TVF0gRXJyb3I6IFlPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFXyQxIHNlbGVjdGlvbiBpcyBlbXB0eSwgZmFpbGVkIHRvIGNyZWF0ZSB0YXJnZXQgc3lzcm9vdCEiCisgIHJldHVybiAxCitmaQorCitlY2hvX2luZm8gIkluc3RhbGxpbmcgdGFyZ2V0IHN5c3Jvb3QgZm9yIGFyY2g6ICQxLCByb290ZnMgdHlwZTogJHRhcmdldF9zeXNyb290X2ltYWdlLCBsb2NhdGlvbjogJHRhcmdldF9zeXNyb290IgorCit0YXJnZXRfbWFjaGluZV92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfJDEiCit0YXJnZXRfbWFjaGluZT1gZXZhbCBlY2hvICR0YXJnZXRfbWFjaGluZV92YXJgCitzeXNyb290X2ltYWdlX25hbWU9ImNvcmUtaW1hZ2UtJHRhcmdldF9zeXNyb290X2ltYWdlLSR0YXJnZXRfbWFjaGluZS50YXIuYnoyIgorICAgICNlY2hvX2luZm8gIkV4dHJhY3Rpbmcgcm9vdGZzOiAkc3lzcm9vdF9pbWFnZV9uYW1lLCB1c2luZyBwc2V1ZG8uLi4iCisKKyMgc3VkbyBwYXNzd29yZCBtaWdodCBiZSBuZWVkZWQgdG8gaW5zdGFsbCB0aGUgdGFyZ2V0IHN5c3Jvb3QKK1NVRE89JChnZXRfc3Vkb19hcHAgJHRhcmdldF9zeXNyb290KQorCiskU1VETyBzY3JpcHRzL2V4dHJhY3Rfcm9vdGZzICRzeXNyb290X2ltYWdlX25hbWUgJHRhcmdldF9zeXNyb290ICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgJHVzZXJfaW5zdF90eXBlCitjaGVja19yZXN1bHQKK30KKworCisjTWFpbiBwYXJ0CisuIHNjcmlwdHMvZGF0YV9kZWZpbmUKKy4gc2NyaXB0cy91dGlsCisKK3BhcnNlX2NvbmZpZworCisjc2Vjb25kbHkgd2Ugd2lsbCBzdGFydCB0byBpbnN0YWxsIG5hdGl2ZSB0b29scwordXNlcl9pbnN0X3R5cGU9JDEKK2luc3RhbGxfbmF0aXZlX3NkayAkdXNlcl9pbnN0X3R5cGUKK2NoZWNrX3Jlc3VsdAorCitmb3IgYXJjaF90eXBlIGluICRZT0NUT0FEVF9UQVJHRVRTOyBkbworICBpbnN0YWxsX3RhcmdldCAkYXJjaF90eXBlCisgIGNoZWNrX3Jlc3VsdAorZG9uZQorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvZGF0YV9kZWZpbmUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL2RhdGFfZGVmaW5lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZDY3MTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL2RhdGFfZGVmaW5lCkBAIC0wLDAgKzEsMzggQEAKKyMhL2Jpbi9iYXNoCisKKyMgWW9jdG8gQURUIEluc3RhbGxlcgorIworIyBDb3B5cmlnaHQgMjAxMC0yMDExIGJ5IEludGVsIENvcnAuCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgCisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIAorIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIAorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSAKKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gCisjIFRIRSBTT0ZUV0FSRS4KKworY29uZmlnX2ZpbGU9ImFkdF9pbnN0YWxsZXIuY29uZiIKK3NvdXJjZSBgcHdkYC8kY29uZmlnX2ZpbGUKKworTE9DQUxfT1BLR19MT0M9Ii4vb3BrZy9idWlsZC9vcGtnIgorTE9DQUxfT1BLR19GT0xERVI9Ii4vb3BrZy9idWlsZCIKKworIyBMaXN0IGFsbCBzdXBwb3J0ZWQgcm9vdCBmcyB0eXBlcyBhbmQgdGFyZ2V0IHR5cGVzLAorIyBpdCB3aWxsIGJlIHVzZWQgaW4gdXNlciBjb25maWd1cmF0aW9uIHZhbGlkaXR5IGNoZWNraW5nCitZT0NUT0FEVF9TVVBQT1JURURfUk9PVEZTPSJtaW5pbWFsIG1pbmltYWwtZGV2IHNhdG8gc2F0by1kZXYgc2F0by1zZGsgbHNiIGxzYi1kZXYgbHNiLXNkayIKK1lPQ1RPQURUX1NVUFBPUlRFRF9UQVJHRVRTPSJ4ODYgeDg2XzY0IGFybSBwcGMgbWlwcyIKKyMgRGlmZmVyZW50IGhvc3QgKDMyIGJpdCBvciA2NCBiaXQpIHdpbGwgaGF2ZSBkaWZmZXJlbnQgb3BrZworIyBjb25maWd1cmF0aW9uIGZpbGVzCitZT0NUT0FEVF9PUEtHX0NPTkZfRklMRV8zMj0iLi9vcGtnL2NvbmYvb3BrZy1zZGstaTY4Ni5jb25mIgorWU9DVE9BRFRfT1BLR19DT05GX0ZJTEVfNjQ9Ii4vb3BrZy9jb25mL29wa2ctc2RrLXg4Nl82NC5jb25mIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy9leHRyYWN0X3Jvb3RmcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvZXh0cmFjdF9yb290ZnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDFhNTk1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvZXh0cmFjdF9yb290ZnMKQEAgLTAsMCArMSw2NyBAQAorIyEvYmluL2Jhc2gKKworIyBZb2N0byBBRFQgSW5zdGFsbGVyCisjCisjIENvcHlyaWdodCAyMDEwLTIwMTEgYnkgSW50ZWwgQ29ycC4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCAKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiAKKyMgVEhFIFNPRlRXQVJFLgorCitleHRyYWN0X3Jvb3RmcygpCit7CisKKyAgbmF0aXZlX3N5c3Jvb3Q9JDMKKyAgdGFyZ2V0X3N5c3Jvb3Q9JDIKKyAgUFNFVURPX0NPTU1BTkQ9IiRuYXRpdmVfc3lzcm9vdC91c3IvYmluL3BzZXVkbyIKKyAgVEFSX09QVFM9Ii14amYiCisgIFBTRVVET19PUFRTPSItUCAkbmF0aXZlX3N5c3Jvb3QvdXNyIgorCisKKyAgcm0gLXJmICRQU0VVRE9fTE9DQUxTVEFURURJUgorCisgIGlmIFsgLWQgIiR0YXJnZXRfc3lzcm9vdCIgXTsgdGhlbgorICAgIGVjaG9faW5mbyAiXG5UYXJnZXQgc3lzcm9vdCBsb2NhdGlvbjogJHRhcmdldF9zeXNyb290LCBhbHJlYWR5IGV4aXN0cyEgSWYgeW91IGNvbnRpbnVlIGluc3RhbGxhdGlvbiwgdGhpcyBmb2xkZXIgd2lsbCBiZSByZS1jcmVhdGVkLiIKKyAgICBjb25maXJtX2luc3RhbGwgJDQKKyAgICBybSAtcmYgIiR0YXJnZXRfc3lzcm9vdCIKKyAgZmkKKworICBpZiBbICEgLWQgIiR0YXJnZXRfc3lzcm9vdCIgXTsgdGhlbgorICAgIGVjaG9faW5mbyAiQ3JlYXRpbmcgZGlyZWN0b3J5ICR0YXJnZXRfc3lzcm9vdC4uLiIKKyAgICBta2RpciAtcCAiJHRhcmdldF9zeXNyb290IgorICBmaQorCisgIHBzZXVkb19zdGF0ZV9kaXI9IiR0YXJnZXRfc3lzcm9vdC8uLi8kKGJhc2VuYW1lICIkdGFyZ2V0X3N5c3Jvb3QiKS5wc2V1ZG9fc3RhdGUiCisgIG1rZGlyIC1wICIkcHNldWRvX3N0YXRlX2RpciIKKyAgdG91Y2ggIiRwc2V1ZG9fc3RhdGVfZGlyL3BzZXVkby5waWQiCisgIFBTRVVET19MT0NBTFNUQVRFRElSPSIkcHNldWRvX3N0YXRlX2RpciIKKyAgZXhwb3J0IFBTRVVET19MT0NBTFNUQVRFRElSCisKKyAgZWNob19pbmZvICJFeHRyYWN0aW5nIHJvb3RmczogJDEsIHVzaW5nIHBzZXVkby4uLiIKKyAgJFBTRVVET19DT01NQU5EICRQU0VVRE9fT1BUUyB0YXIgLUMgJDIgIiRUQVJfT1BUUyIgJExPQ0FMX0RPV05MT0FELyQxICY+PiAkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorICBjaGVja19yZXN1bHQKK30KKworI01haW4gcGFydAorLiBzY3JpcHRzL3V0aWwKKworI1BhcmFtZXRlciBkZXRhaWwgaXMgbGlzdGVkIGJlbG93OgorI1BhcmFtIDQ6IFNpbGVudCBpbnN0YWxsIG9yIGN1c3RvbWl6ZSBpbnN0YWxsCisjUGFyYW0gMzogT0VDT1JFX05BVElWRV9TWVNST09UCisjUGFyYW0gMjogdXNlciBkZWZpbmVkIHJvb3RmcyBleHRyYWN0aW9uIGRpcmVjdG9yeQorI3BhcmFtIDE6IHN5c3Jvb3QgaW1hZ2UgbmFtZQorZXh0cmFjdF9yb290ZnMgJDEgJDIgJDMgJDQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvdXRpbCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvdXRpbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmU3NTE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy91dGlsCkBAIC0wLDAgKzEsMTA0IEBACisjIS9iaW4vYmFzaAorCisjIFlvY3RvIEFEVCBJbnN0YWxsZXIKKyMKKyMgQ29weXJpZ2h0IDIwMTAtMjAxMSBieSBJbnRlbCBDb3JwLgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IAorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIAorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorIyBUSEUgU09GVFdBUkUuCisKK2VjaG9faW5mbygpCit7CisgIGVjaG8gLWUgJDEgfCB0ZWUgLWEgJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKK30KKworc2VsZWN0X2luc3RhbGxfdHlwZSgpCit7CisjIElmIGNob29zaW5nIHNpbGVudCBpbnN0YWxsLCBhbGwgb2xkZXIgaW5zdGFsbGF0aW9uIGRhdGEgd2lsbCBiZQorIyBvdmVycmlkZW4gd2l0aG91dCB1c2VyJ3MgaW50ZXJhY3Rpb24KK3doaWxlIHRydWU7IGRvCisgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gU2lsZW50IGluc3RhbGwgbWVhbnMgb3ZlcnJpZGVzIGFsbCBleGlzdGluZyBvbGRlciIKKyAgI2VjaG9faW5mbyAiW0FEVF9JTlNUXSBkYXRhIGFuZCB0aGUgaW5zdGFsbGF0aW9uIG5lZWRzIGxlYXN0IHVzZXIgaW50ZXJhY3Rpb24iCisgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gSWYgeW91IHdhbnQgdG8gdXNlIHNpbGVudCBpbnN0YWxsYXRpb24sIHBsZWFzZSBlbnRlciBTOiIKKyAgI2VjaG9faW5mbyAiW0FEVF9JTlNUXSBJZiB5b3Ugd2FudCB0byBjdXN0b21pemUgaW5zdGFsbGF0aW9uLCBwbGVhc2UgZW50ZXIgQzoiCisgICNlY2hvX2luZm8gIltBRFRfSU5TVH0gSWYgeW91IHdhbnQgdG8gZXhpdCBjdXJyZW50IGluc3RhbGxhdGlvbiwgcGxlYXNlIGVudGVyIFg6IgorICBlY2hvX2luZm8gIlRoZXJlJ3JlIHR3byB3YXlzIHlvdSBjYW4gZG8gaW5zdGFsbGF0aW9uOiBzaWxlbnQgbW9kZSBvciBpbnRlcmFjdGl2ZSBtb2RlLiBUbyBjaG9vc2Ugc2lsZW50IG1vZGUsIHdoaWNoIG1lYW5zIHlvdSBvcHQgZm9yIHRoZSBzeXN0ZW0gdG8gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIGRhdGEgdW5kZXIgdGhlIHNwZWNpZmllZCBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXMgd2l0aG91dCBwcm9tcHRpbmcgZm9yIHlvdXIgY29uZmlybWF0aW9uLiAgUGxlYXNlIGJlIGNhdXRpb3VzIHdpdGggdGhpcyBzZWxlY3Rpb24gd2hpY2ggbWF5IHRyaWdnZXIgeW91ciBsb3NpbmcgZGF0YS4gIFdpdGggdGhlIGludGVyYWN0aXZlIG1vZGUsIHlvdSBoYXZlIHRvIGNsb3NlbHkgbW9uaXRvciB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MsIHNpbmNlIGl0IHdpbGwgcHJvbXB0IHlvdSBlYWNoIHN0ZXAgaXQgbmVlZHMgdG8gb3ZlcnJpZGUgc29tZSBleGlzdGluZyBkYXRhLiAgVG8gY2hvb3NlIHNpbGVudCBtb2RlLCBwbGVhc2UgZW50ZXIgW1NdLCBmb3IgaW50ZXJhY3RpdmUgbW9kZSwgcGxlYXNlIGVudGVyIFtJXSBvciBbWF0gdG8gZXhpdCB0aGUgaW5zdGFsbGF0aW9uLiIKKyAgZWNob19pbmZvICJbQURUX0lOU1RdIFBsZWFzZSBlbnRlciB5b3VyIHNlbGVjdGlvbnMgaGVyZToiCisgIHJlYWQgWU9DVE9BRFRfU0VMCisgIFlPQ1RPQURUX1NFTD1gdHIgJ1thLXpdJyAnW0EtWl0nPDw8IiRZT0NUT0FEVF9TRUwiYAorICBpZiBbICIkWU9DVE9BRFRfU0VMIiA9PSAiUyIgXTsgdGhlbgorICAgIHJldHVybiAiMCIKKyAgZWxpZiBbICIkWU9DVE9BRFRfU0VMIiA9PSAiSSIgXTsgdGhlbgorICAgIHJldHVybiAiMSIKKyAgZWxpZiBbICIkWU9DVE9BRFRfU0VMIiA9PSAiWCIgXTsgdGhlbgorICAgIGVjaG9faW5mbyAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgICAgZWNob19pbmZvICIjIFVzZXIgY2FuY2VsbGVkIGluc3RhbGxhdGlvbiEiCisgICAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICBleGl0IDEKKyAgZmkKK2RvbmUKKworCit9CisKK2NvbmZpcm1faW5zdGFsbCgpCit7CisjIGJlbG93IGFyZSBwcm9tcHQsIG1ha2Ugc3VyZSB1c2VyIHN0aWxsIHdhbnQgdG8gaW5zdGFsbCBldmVuIG1lZXQKKyMgc29tZSBwcm9tcHRzCisKKyNVc2VyIGxpa2VzIHRvIGVuam95IHNpbGVudCBpbnN0YWxsYXRpb24sIHdlIHdpbGwgbm90IGJyZWFrIGhpcworI2luc3RhbGxhdGlvbiBwcm9jZXNzIGhlcmUKK2lmIFsgIiQxIiA9PSAiMCIgXTsgdGhlbgorICByZXR1cm4KK2ZpCisKK3doaWxlIHRydWU7IGRvCisgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBEbyB5b3Ugd2FudCB0byBjb250aW51ZSBpbnN0YWxsYXRpb24/IFBsZWFzZSBlbnRlciBZL046IgorICByZWFkIFlPQ1RPQURUX0lOU1RBTEwKKyAgWU9DVE9BRFRfSU5TVEFMTD1gdHIgJ1thLXpdJyAnW0EtWl0nPDw8IiRZT0NUT0FEVF9JTlNUQUxMImAKKyAgaWYgWyAiJFlPQ1RPQURUX0lOU1RBTEwiID09ICJZIiBdOyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiBbICIkWU9DVE9BRFRfSU5TVEFMTCIgPT0gIk4iIF07IHRoZW4KKyAgICBlY2hvX2luZm8gIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgIGVjaG9faW5mbyAiIyBVc2VyIGNhbmNlbGxlZCBpbnN0YWxsYXRpb24hIgorICAgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgZXhpdCAxCisgIGZpCitkb25lCit9CisKK2NoZWNrX3Jlc3VsdCgpCit7CisgIHJlc3VsdD0kPworICBpZiBbICRyZXN1bHQgLWVxIDEgXTsgdGhlbgorICAgIGV4aXQgLTEKKyAgZWxpZiBbICAkcmVzdWx0IC1uZSAwIF07IHRoZW4KKyAgICAgZWNob19pbmZvICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgICBlY2hvX2luZm8gIiMgTWVldCBlcnJvcihzKSB3aGVuIGluc3RhbGxpbmcgWW9jdG8gQURUISBQbGVhc2UgY2hlY2sgbG9nIGZpbGUgZm9yIGRldGFpbHMuICIKKyAgICAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgIGV4aXQgLTEKKyAgZmkKK30KKworIyB5b2N0byBhZHQgaW5zdGFsbGF0aW9uIGxvZyBmaWxlCitZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFPSJhZHRfaW5zdGFsbGVyLmxvZyIKKyMgVGVtcCBmb2xkZXJzIGhvbGRpbmcgcWVtdS9yb290ZnMgZG93bmxvYWRlZCBpbWFnZXMKKyMgSXQgd2lsbCBiZSBwdXQgaW50byB0aGUgaW5zdGFsbGF0aW9uIGZvbGRlcgorTE9DQUxfRE9XTkxPQUQ9Ii4vZG93bmxvYWRfaW1hZ2UiCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXJfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXJfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZTM4NTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlcl8xLjAuYmIKQEAgLTAsMCArMSw5NSBAQAorIyBZb2N0byBBRFQgSW5zdGFsbGVyIGJiIGZpbGUKKyMKKyMgQ29weXJpZ2h0IDIwMTAtMjAxMiBieSBJbnRlbCBDb3JwLgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IAorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIAorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorIyBUSEUgU09GVFdBUkUuCisKKworU1VNTUFSWSA9ICJBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBUb29sa2l0IgorREVTQ1JJUFRJT04gPSAiQ3JlYXRlcyB0aGUgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKSBpbnN0YWxsZXIgdGFyYmFsbCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvYXBwbGljYXRpb24tZGV2ZWxvcG1lbnQtdG9vbGtpdC1hZHQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK0xJQ0VOU0UgPSAiTUlUIgorCitQQUNLQUdFUyA9ICIiCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitQUiA9ICJyMTEiCisKK0FEVF9ERVBMT1kgPSAiJHtERVBMT1lfRElSfS9zZGsvIgorQURUX0RJUiA9ICIke1dPUktESVJ9L2FkdC1pbnN0YWxsZXIvIgorUyA9ICIke1dPUktESVJ9L29wa2ctJHtQVn0iCisKK1BWID0gIjAuMy4wIgorU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvb3BrZy9vcGtnLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly93Z2V0X2NhY2hlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkdF9pbnN0YWxsZXIgXAorICAgICAgICAgICBmaWxlOi8vc2NyaXB0cy9hZHRfaW5zdGFsbGVyX2ludGVybmFsIFwKKyAgICAgICAgICAgZmlsZTovL3NjcmlwdHMvdXRpbCBcCisgICAgICAgICAgIGZpbGU6Ly9zY3JpcHRzL2RhdGFfZGVmaW5lIFwKKyAgICAgICAgICAgZmlsZTovL3NjcmlwdHMvZXh0cmFjdF9yb290ZnMgXAorICAgICAgICAgICBmaWxlOi8vYWR0X2luc3RhbGxlci5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL29wa2cvY29uZi9vcGtnLXNkay14ODZfNjQuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9vcGtnL2NvbmYvb3BrZy1zZGstaTY4Ni5jb25mIFwKKwkgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjM0MTJjZGM3MWQ3OGI5OGZhY2M4NGIxOTMzMWVjNjRlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdmNzM1ZDFjZGI4ZWYzNzE4ZmIwZjlmYmE0NGNhMGQ5YTVjOTBkM2E3ZjAxNGYzN2E2ZDJmOTQ3NGY1NDk4OGYiCisKK0FEVFJFUE8gPz0gImh0dHA6Ly9hZHRyZXBvLnlvY3RvcHJvamVjdC5vcmcvJHtTREtfVkVSU0lPTn0iCisKKyMgVGhpcyByZWNpcGUgbWFrZXMgbm8gc2Vuc2UgYXMgYSBtdWx0aWxpYgorTVVMVElMSUJTID0gIiIKKworZG9fcG9wdWxhdGVfYWR0W3VtYXNrXSA9ICIwMjIiCisKK2Zha2Vyb290IGRvX3BvcHVsYXRlX2FkdCAoKSB7CisJY2QgJHtXT1JLRElSfQorCW1rZGlyIC1wICR7QURUX0RFUExPWX0KKwlybSAtZiAke0FEVF9ERVBMT1l9L2FkdF9pbnN0YWxsZXIudGFyLmJ6MgorCXJtIC1yZiAke0FEVF9ESVJ9CisJbWtkaXIgLXAgJHtBRFRfRElSfS9vcGtnL2J1aWxkCisJY3AgLXIgb3BrZyAke0FEVF9ESVJ9LworCXNlZCAtaSAtZSAncyNBRFRSRVBPX1VSTCMke0FEVFJFUE99IycgJHtBRFRfRElSfS9vcGtnL2NvbmYvKi5jb25mCisJY3AgLXIgb3BrZy0ke1BWfSAke0FEVF9ESVJ9L29wa2cvYnVpbGQvCisJbXYgJHtBRFRfRElSfS9vcGtnL2J1aWxkL29wa2ctJHtQVn0gJHtBRFRfRElSfS9vcGtnL2J1aWxkL29wa2ctc3ZuCisJcm0gLXJmICR7QURUX0RJUn0vb3BrZy9idWlsZC9vcGtnLXN2bi9wYXRjaGVzICR7QURUX0RJUn0vb3BrZy9idWlsZC9vcGtnLXN2bi8ucGMKKwljcCAtciBzY3JpcHRzICR7QURUX0RJUn0vCisJY3AgYWR0X2luc3RhbGxlciAke0FEVF9ESVJ9CisJY3AgYWR0X2luc3RhbGxlci5jb25mICR7QURUX0RJUn0KKwlzZWQgLWkgLWUgJ3MjQURUUkVQTyMke0FEVFJFUE99IycgJHtBRFRfRElSfS9hZHRfaW5zdGFsbGVyLmNvbmYKKwllY2hvICdTREtfVkVORE9SPSR7U0RLX1ZFTkRPUn0nID4+ICR7QURUX0RJUn0vc2NyaXB0cy9kYXRhX2RlZmluZQorCWVjaG8gJ0RFRkFVTFRfSU5TVEFMTF9GT0xERVI9JHtTREtQQVRIfScgPj4gJHtBRFRfRElSfS9zY3JpcHRzL2RhdGFfZGVmaW5lCisJY3AgJHtDT1JFQkFTRX0vc2NyaXB0cy9yZWxvY2F0ZV9zZGsucHkgJHtBRFRfRElSfS9zY3JpcHRzLworCXRhciBjZmogYWR0X2luc3RhbGxlci50YXIuYnoyIGFkdC1pbnN0YWxsZXIKKwljcCAke1dPUktESVJ9L2FkdF9pbnN0YWxsZXIudGFyLmJ6MiAke0FEVF9ERVBMT1l9Cit9CisKK2RvX3BvcHVsYXRlX2FkdFtub3N0YW1wXSA9ICIxIgorZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlZGF0YVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlX3dyaXRlX2lwa1tub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlX3dyaXRlX3JwbVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlX3dyaXRlX2RlYltub2V4ZWNdID0gIjEiCitkb19wb3BsdWxhdGVfc3lzcm9vdFtub2V4ZWNdID0gIjEiCisKK2FkZHRhc2sgcG9wdWxhdGVfYWR0IGJlZm9yZSBkb19idWlsZCBhZnRlciBkb19pbnN0YWxsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvZmlsZXMvd2dldF9jYWNoZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9maWxlcy93Z2V0X2NhY2hlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMTc1MTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvZmlsZXMvd2dldF9jYWNoZS5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLQorIGxpYm9wa2cvb3BrZ19kb3dubG9hZF93Z2V0LmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2xpYm9wa2cvb3BrZ19kb3dubG9hZF93Z2V0LmMgYi9saWJvcGtnL29wa2dfZG93bmxvYWRfd2dldC5jCitpbmRleCA5MDAxNDkzLi4xOGVmOTFlIDEwMDY0NAorLS0tIGEvbGlib3BrZy9vcGtnX2Rvd25sb2FkX3dnZXQuYworKysrIGIvbGlib3BrZy9vcGtnX2Rvd25sb2FkX3dnZXQuYworQEAgLTUwLDYgKzUwLDcgQEAgaW50IG9wa2dfZG93bmxvYWRfYmFja2VuZChjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRlc3QsCisgCisgICAgIGFyZ3ZbaSsrXSA9ICJ3Z2V0IjsKKyAgICAgYXJndltpKytdID0gIi1xIjsKKysgICAgYXJndltpKytdID0gIi0tbm8tY2FjaGUiOworICAgICBpZiAob3BrZ19jb25maWctPmh0dHBfcHJveHkgfHwgb3BrZ19jb25maWctPmZ0cF9wcm94eSkgeworICAgICAgICAgYXJndltpKytdID0gIi1ZIjsKKyAgICAgICAgIGFyZ3ZbaSsrXSA9ICJvbiI7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTc3NzA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wuaW5jCkBAIC0wLDAgKzEsMjcgQEAKK1NVTU1BUlkgPSAiVXRpbGl0eSBzY3JpcHRzIGZvciBpbnRlcm5hdGlvbmFsaXppbmcgWE1MIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK1VSTFY9IiR7QCcuJy5qb2luKGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy4nKVswOjJdKX0iCitTUkNfVVJJID0gImh0dHA6Ly9sYXVuY2hwYWQubmV0LyR7QlBOfS90cnVuay8ke1BWfS8rZG93bmxvYWQvJHtCUH0udGFyLmd6IgorUyA9ICIke1dPUktESVJ9L2ludGx0b29sLSR7UFZ9IgorCitERVBFTkRTID0gImxpYnhtbC1wYXJzZXItcGVybC1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICJnZXR0ZXh0LWRldiBsaWJ4bWwtcGFyc2VyLXBlcmwiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJsaWJ4bWwtcGFyc2VyLXBlcmwtbmF0aXZlIgorIyBnZXR0ZXh0IGlzIGFzc3VtZWQgdG8gZXhpc3Qgb24gdGhlIGhvc3QKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJsaWJ4bWwtcGFyc2VyLXBlcmwtbmF0aXZlIgorUlJFQ09NTUVORFNfJHtQTn0gPSAicGVybC1tb2R1bGVzIgorUlJFQ09NTUVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworRklMRVNfJHtQTn0tZGV2ID0gIiIKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FjbG9jYWwiCisKK0lOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtZGVwcyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHBlcmxuYXRpdmUKKworZXhwb3J0IFBFUkwgPSAiJHtiaW5kaXJ9L2VudiBwZXJsIgorUEVSTF9jbGFzcy1uYXRpdmUgPSAiL3Vzci9iaW4vZW52IG5hdGl2ZXBlcmwiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvaW50bHRvb2wtbm93YXJuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvaW50bHRvb2wtbm93YXJuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YzkzOGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9pbnRsdG9vbC1ub3dhcm4ucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IGludGx0b29sLTAuNDAuMC9pbnRsdG9vbC1leHRyYWN0LmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaW50bHRvb2wtMC41MC4wLm9yaWcvaW50bHRvb2wtZXh0cmFjdC5pbgkyMDExLTEwLTA4IDIyOjI0OjU3LjAwMDAwMDAwMCArMDMwMAorKysrIGludGx0b29sLTAuNTAuMC9pbnRsdG9vbC1leHRyYWN0LmluCTIwMTEtMTItMDcgMTY6MDQ6MDcuMDAwMDAwMDAwICswMjAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIUBJTlRMVE9PTF9QRVJMQCAtdyAKKysjIUBJTlRMVE9PTF9QRVJMQAorICMgLSotIE1vZGU6IHBlcmw7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDQgIC0qLQorIAorICMKK0luZGV4OiBpbnRsdG9vbC0wLjUwLjAvaW50bHRvb2wtbWVyZ2UuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpbnRsdG9vbC0wLjUwLjAub3JpZy9pbnRsdG9vbC1tZXJnZS5pbgkyMDExLTEwLTA4IDE3OjUyOjAxLjAwMDAwMDAwMCArMDMwMAorKysrIGludGx0b29sLTAuNTAuMC9pbnRsdG9vbC1tZXJnZS5pbgkyMDExLTEyLTA3IDE2OjA1OjU1LjAwMDAwMDAwMCArMDIwMAorQEAgLTEsNCArMSw0IEBACistIyFASU5UTFRPT0xfUEVSTEAgLXcKKysjIUBJTlRMVE9PTF9QRVJMQAorICMgLSotIE1vZGU6IHBlcmw7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDQgIC0qLQorIAorICMKK0luZGV4OiBpbnRsdG9vbC0wLjUwLjAvaW50bHRvb2wtcHJlcGFyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGludGx0b29sLTAuNTAuMC5vcmlnL2ludGx0b29sLXByZXBhcmUuaW4JMjAxMS0xMC0wOCAwOToxNjo1OC4wMDAwMDAwMDAgKzAzMDAKKysrKyBpbnRsdG9vbC0wLjUwLjAvaW50bHRvb2wtcHJlcGFyZS5pbgkyMDExLTEyLTA3IDE2OjA2OjEzLjAwMDAwMDAwMCArMDIwMAorQEAgLTEsNCArMSw0IEBACistIyFASU5UTFRPT0xfUEVSTEAgLXcKKysjIUBJTlRMVE9PTF9QRVJMQAorICMgLSotIE1vZGU6IHBlcmw7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDQgIC0qLQorIAorICMgIEludGx0b29sIC5kZXNrdG9wLCAuZGlyZWN0b3J5IFByZXBhcmUgVG9vbAorSW5kZXg6IGludGx0b29sLTAuNTAuMC9pbnRsdG9vbC11cGRhdGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpbnRsdG9vbC0wLjUwLjAub3JpZy9pbnRsdG9vbC11cGRhdGUuaW4JMjAxMS0xMC0wOCAyMjoyNDo1Ny4wMDAwMDAwMDAgKzAzMDAKKysrKyBpbnRsdG9vbC0wLjUwLjAvaW50bHRvb2wtdXBkYXRlLmluCTIwMTEtMTItMDcgMTY6MDY6MzkuMDAwMDAwMDAwICswMjAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIUBJTlRMVE9PTF9QRVJMQCAtdworKyMhQElOVExUT09MX1BFUkxACisgIyAtKi0gTW9kZTogcGVybDsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogNCAgLSotCisgCisgIwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvbm9wZXJsY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9ub3BlcmxjaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTNlZTFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvbm9wZXJsY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorSW4gdGhlIHRhcmdldCBjYXNlLCB3ZSBjYW4ndCBjaGVjayBpZiBwZXJsIGV4aXN0cyBvciB0cnkgcnVubmluZyBpdC4gSWYgd2UKK2Rvbid0IHBhdGNoIHRoZSBjb2RlLCB0aGUgbmF0aXZlIHBlcmwgbG9jYXRpb24gd291bGQgYmUgdXNlZCwgbm90IHRoZSB0YXJnZXQKK3doaWNoIGlzIGFsc28gaW5jb3JyZWN0LiBXZSB0aGVyZWZvcmUgZGlzYWJsZSB0aGlzIGNvZGUgYW5kIHJlbHkgb24gdGhlIAorY29ycmVjdCB2YWx1ZSBvZiBQRVJMIGJlaW5nIHBhc3NlZCBpbi4KKworUlAgMzEvOC8yMDExCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDUzMzhhNzYuLmU3MDlhMmIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTExLDI0ICsxMSwxMCBAQCBBQ19TVUJTVChwa2dkYXRhZGlyKSBkbmwgYXV0b21ha2UgZG9lcyBub3QgbmVlZCB0aGlzLCBidXQgbGlidG9vbGl6ZSBkb2VzCisgYWNsb2NhbGRpcj0nJHtkYXRhZGlyfScvYWNsb2NhbAorIEFDX1NVQlNUKGFjbG9jYWxkaXIpCisgCistQUNfUEFUSF9QUk9HKFBFUkwsIHBlcmwpCisgaWYgdGVzdCAteiAiJFBFUkwiOyB0aGVuCistICAgQUNfTVNHX0VSUk9SKFtwZXJsIG5vdCBmb3VuZF0pCistZmkKKy1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBwZXJsID49IDUuOC4xXSkKKy0kUEVSTCAtZSAidXNlIDUuOC4xOyIgPiAvZGV2L251bGwgMj4mMQorLWlmIHRlc3QgJD8gLW5lIDA7IHRoZW4KKy0gICBBQ19NU0dfRVJST1IoW3BlcmwgNS44LjEgaXMgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKKy1lbHNlCistICAgUEVSTF9WRVJTSU9OPSJgJFBFUkwgLWUgXCJwcmludGYgJyV2ZCcsICReVlwiYCIKKy0gICBBQ19NU0dfUkVTVUxUKFskUEVSTF9WRVJTSU9OXSkKKy1maQorLUFDX01TR19DSEVDS0lORyhbZm9yIFhNTDo6UGFyc2VyXSkKKy1pZiBgJFBFUkwgLWUgInJlcXVpcmUgWE1MOjpQYXJzZXIiIDI+L2Rldi9udWxsYDsgdGhlbgorLSAgIEFDX01TR19SRVNVTFQoW29rXSkKKy1lbHNlCistICAgQUNfTVNHX0VSUk9SKFtYTUw6OlBhcnNlciBwZXJsIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgaW50bHRvb2xdKQorKyAgIEFDX01TR19FUlJPUihbUEVSTCB2YXJpYWJsZSBub3Qgc2V0XSkKKyBmaQorK0FDX1NVQlNUKFBFUkwpCisgQUNfUEFUSF9QUk9HKEJaUiwgYnpyKQorIAorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvcGVybC01MjItZGVwcmVjYXRpb25zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvcGVybC01MjItZGVwcmVjYXRpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNTIxNzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9wZXJsLTUyMi1kZXByZWNhdGlvbnMucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorUGVybCA1LjIyIGhhcyBkZXByZWNhdGVkIHNvbWUgcmVnZXggZmVhdHVyZXMsIHdoaWNoIGNhdXNlcyB3YXJuaW5ncyB3aGVuCitpbnRsdG9vbC11cGRhdGUgcnVuczoKKworVW5lc2NhcGVkIGxlZnQgYnJhY2UgaW4gcmVnZXggaXMgZGVwcmVjYXRlZCwgcGFzc2VkIHRocm91Z2ggaW4gcmVnZXg7IG1hcmtlZCBieQorPC0tIEhFUkUgaW4gbS9eKC4qKVwkeyA8LS0gSEVSRSA/KFtBLVpfXSspfT8oLiopJC8gYXQKKy9kYXRhL3Bva3ktbWFzdGVyL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2Jpbi9pbnRsdG9vbC11cGRhdGUgbGluZSAxMDY1LgorCitUYWtlIGEgcGF0Y2ggZnJvbSBEZWJpYW4gdG8gc29sdmUgdGhpcy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgKGh0dHBzOi8vYnVncy5sYXVuY2hwYWQubmV0L2ludGx0b29sLytidWcvMTQ2NTAxMCkKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKKy0tLSBpbnRsdG9vbC0wLjUxLjAtT1JJRy9pbnRsdG9vbC11cGRhdGUuaW4JMjAxNS0wNS0yNyAwMDoyMDo0My4wMzgzNzk5NjMgKzAyMDAKKysrKyBpbnRsdG9vbC0wLjUxLjAvaW50bHRvb2wtdXBkYXRlLmluCTIwMTUtMDUtMjcgMDA6MjM6NTMuMzA5MDc4MDUyICswMjAwCitAQCAtMTA2Miw3ICsxMDYyLDcgQEAKKyAJfQorICAgICB9CisgCistICAgIGlmICgkc3RyID1+IC9eKC4qKVwkez8oW0EtWl9dKyl9PyguKikkLykKKysgICAgaWYgKCRzdHIgPX4gL14oLiopXCRcez8oW0EtWl9dKylcfT8oLiopJC8pCisgICAgIHsKKyAJbXkgJHJlc3QgPSAkMzsKKyAJbXkgJHVudG91Y2hlZCA9ICQxOworQEAgLTExOTAsMTAgKzExOTAsMTAgQEAKKyAJJG5hbWUgICAgPX4gcy9cKCskLy9nOworIAkkdmVyc2lvbiA9fiBzL1woKyQvL2c7CisgCistCSR2YXJoYXNoeyJQQUNLQUdFX05BTUUifSA9ICRuYW1lIGlmIChub3QgJG5hbWUgPX4gL1wkez9BQ19QQUNLQUdFX05BTUV9Py8pOworLQkkdmFyaGFzaHsiUEFDS0FHRSJ9ID0gJG5hbWUgaWYgKG5vdCAkbmFtZSA9fiAvXCR7P1BBQ0tBR0V9Py8pOworLQkkdmFyaGFzaHsiUEFDS0FHRV9WRVJTSU9OIn0gPSAkdmVyc2lvbiBpZiAobm90ICRuYW1lID1+IC9cJHs/QUNfUEFDS0FHRV9WRVJTSU9OfT8vKTsKKy0JJHZhcmhhc2h7IlZFUlNJT04ifSA9ICR2ZXJzaW9uIGlmIChub3QgJG5hbWUgPX4gL1wkez9WRVJTSU9OfT8vKTsKKysJJHZhcmhhc2h7IlBBQ0tBR0VfTkFNRSJ9ID0gJG5hbWUgaWYgKG5vdCAkbmFtZSA9fiAvXCRcez9BQ19QQUNLQUdFX05BTUVcfT8vKTsKKysJJHZhcmhhc2h7IlBBQ0tBR0UifSA9ICRuYW1lIGlmIChub3QgJG5hbWUgPX4gL1wkXHs/UEFDS0FHRVx9Py8pOworKwkkdmFyaGFzaHsiUEFDS0FHRV9WRVJTSU9OIn0gPSAkdmVyc2lvbiBpZiAobm90ICRuYW1lID1+IC9cJFx7P0FDX1BBQ0tBR0VfVkVSU0lPTlx9Py8pOworKwkkdmFyaGFzaHsiVkVSU0lPTiJ9ID0gJHZlcnNpb24gaWYgKG5vdCAkbmFtZSA9fiAvXCRcez9WRVJTSU9OXH0/Lyk7CisgICAgIH0KKyAKKyAgICAgaWYgKCRjb25mX3NvdXJjZSA9fiAvXkFDX0lOSVRcKChbXixcKV0rKSwoW14sXCldKylbLF0/KFteLFwpXSspPy9tKQorQEAgLTEyMTksMTEgKzEyMTksMTEgQEAKKyAJJHZlcnNpb24gPX4gcy9cKCskLy9nOworICAgICAgICAgJGJ1Z3VybCAgPX4gcy9cKCskLy9nIGlmIChkZWZpbmVkICRidWd1cmwpOworIAorLQkkdmFyaGFzaHsiUEFDS0FHRV9OQU1FIn0gPSAkbmFtZSBpZiAobm90ICRuYW1lID1+IC9cJHs/QUNfUEFDS0FHRV9OQU1FfT8vKTsKKy0JJHZhcmhhc2h7IlBBQ0tBR0UifSA9ICRuYW1lIGlmIChub3QgJG5hbWUgPX4gL1wkez9QQUNLQUdFfT8vKTsKKy0JJHZhcmhhc2h7IlBBQ0tBR0VfVkVSU0lPTiJ9ID0gJHZlcnNpb24gaWYgKG5vdCAkbmFtZSA9fiAvXCR7P0FDX1BBQ0tBR0VfVkVSU0lPTn0/Lyk7CistCSR2YXJoYXNoeyJWRVJTSU9OIn0gPSAkdmVyc2lvbiBpZiAobm90ICRuYW1lID1+IC9cJHs/VkVSU0lPTn0/Lyk7CistICAgICAgICAkdmFyaGFzaHsiUEFDS0FHRV9CVUdSRVBPUlQifSA9ICRidWd1cmwgaWYgKGRlZmluZWQgJGJ1Z3VybCBhbmQgbm90ICRidWd1cmwgPX4gL1wkez9cdyt9Py8pOworKwkkdmFyaGFzaHsiUEFDS0FHRV9OQU1FIn0gPSAkbmFtZSBpZiAobm90ICRuYW1lID1+IC9cJFx7P0FDX1BBQ0tBR0VfTkFNRVx9Py8pOworKwkkdmFyaGFzaHsiUEFDS0FHRSJ9ID0gJG5hbWUgaWYgKG5vdCAkbmFtZSA9fiAvXCRcez9QQUNLQUdFXH0/Lyk7CisrCSR2YXJoYXNoeyJQQUNLQUdFX1ZFUlNJT04ifSA9ICR2ZXJzaW9uIGlmIChub3QgJG5hbWUgPX4gL1wkXHs/QUNfUEFDS0FHRV9WRVJTSU9OXH0/Lyk7CisrCSR2YXJoYXNoeyJWRVJTSU9OIn0gPSAkdmVyc2lvbiBpZiAobm90ICRuYW1lID1+IC9cJFx7P1ZFUlNJT05cfT8vKTsKKysgICAgICAgICR2YXJoYXNoeyJQQUNLQUdFX0JVR1JFUE9SVCJ9ID0gJGJ1Z3VybCBpZiAoZGVmaW5lZCAkYnVndXJsIGFuZCBub3QgJGJ1Z3VybCA9fiAvXCRcez9cdytcfT8vKTsKKyAgICAgfQorIAorICAgICAjIFxzIG1ha2VzIHRoaXMgbm90IHdvcmssIHdoeT8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9yZW1vdmUteG1sLWNoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvcmVtb3ZlLXhtbC1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzY5ZTM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvcmVtb3ZlLXhtbC1jaGVjay5wYXRjaApAQCAtMCwwICsxLDMzIEBACitTaWduZWQtb2ZmLWJ5OiBGbG9yaW4gU2FyYnUgPGZsb3Jpbi5zYXJidUB3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitJbmRleDogaW50bHRvb2wtMC40MC42L2ludGx0b29sLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaW50bHRvb2wtMC40MC42Lm9yaWcvaW50bHRvb2wubTQJMjAwOS0wMi0xNCAxNDoxMjoyOC4wMDAwMDAwMDAgLTA4MDAKKysrKyBpbnRsdG9vbC0wLjQwLjYvaW50bHRvb2wubTQJMjAxMS0xMS0yMyAxNTozOTozNC42ODk1NjE4NzIgLTA4MDAKK0BAIC0xMjIsMTQgKzEyMiwxNiBAQAorICAgIElUX1BFUkxfVkVSU0lPTj0iYCRJTlRMVE9PTF9QRVJMIC1lIFwicHJpbnRmICcldmQnLCAkXlZcImAiCisgICAgQUNfTVNHX1JFU1VMVChbJElUX1BFUkxfVkVSU0lPTl0pCisgZmkKKy1pZiB0ZXN0ICJ4JDIiICE9ICJ4bm8teG1sIjsgdGhlbgorLSAgIEFDX01TR19DSEVDS0lORyhbZm9yIFhNTDo6UGFyc2VyXSkKKy0gICBpZiBgJElOVExUT09MX1BFUkwgLWUgInJlcXVpcmUgWE1MOjpQYXJzZXIiIDI+L2Rldi9udWxsYDsgdGhlbgorLSAgICAgICBBQ19NU0dfUkVTVUxUKFtva10pCistICAgZWxzZQorLSAgICAgICBBQ19NU0dfRVJST1IoW1hNTDo6UGFyc2VyIHBlcmwgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBpbnRsdG9vbF0pCistICAgZmkKKy1maQorKworKyMgRGlzYWJsZSB0aGlzIGNoZWNrIHNpbmNlIHdlIGtub3cgWE1MOjpQYXJzZXIgaXMgaW5zdGFsbGVkCisrI2lmIHRlc3QgIngkMiIgIT0gInhuby14bWwiOyB0aGVuCisrIyAgIEFDX01TR19DSEVDS0lORyhbZm9yIFhNTDo6UGFyc2VyXSkKKysjICAgaWYgYCRJTlRMVE9PTF9QRVJMIC1lICJyZXF1aXJlIFhNTDo6UGFyc2VyIiAyPi9kZXYvbnVsbGA7IHRoZW4KKysjICAgICAgIEFDX01TR19SRVNVTFQoW29rXSkKKysjICAgZWxzZQorKyMgICAgICAgQUNfTVNHX0VSUk9SKFtYTUw6OlBhcnNlciBwZXJsIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgaW50bHRvb2xdKQorKyMgICBmaQorKyNmaQorIAorICMgU3Vic3RpdHV0ZSBBTExfTElOR1VBUyBzbyB3ZSBjYW4gdXNlIGl0IGluIHBvL01ha2VmaWxlCisgQUNfU1VCU1QoQUxMX0xJTkdVQVMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC91c2UtbmF0aXZlcGVybC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3VzZS1uYXRpdmVwZXJsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNWZlZDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC91c2UtbmF0aXZlcGVybC5wYXRjaApAQCAtMCwwICsxLDIwIEBACitPRSBoYXMgcGVybCBiaW5hcnkgYXMgJ25hdGl2ZXBlcmwnIGluIG5hdGl2ZSBzeXNyb290IHNvIHdlIGxvb2sgZm9yIGl0CitpbiBvcmRlciB0byBhdm9pZCBpbnRsdG9vbCBzZWFyY2hpbmcgYW5kIGZpbmRpbmcgcGVybCBmcm9tIC91c3IvYmluCitvbiBidWlsZCBzeXN0ZW0gd2hpY2ggbWF5IG5vdCBoYXZlIGFsbCB0aGUgbW9kdWxlcyB0aGF0IGl0IG5lZWRzLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorSW5kZXg6IGludGx0b29sLTAuNDAuNi9pbnRsdG9vbC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGludGx0b29sLTAuNDAuNi5vcmlnL2ludGx0b29sLm00CTIwMDktMDItMTQgMTQ6MTI6MjguMDAwMDAwMDAwIC0wODAwCisrKysgaW50bHRvb2wtMC40MC42L2ludGx0b29sLm00CTIwMTEtMDgtMDkgMDg6MDc6MTYuNDI3MzQ3ODQ2IC0wNzAwCitAQCAtMTEwLDcgKzExMCw3IEBACisgICAgIEFDX01TR19FUlJPUihbR05VIGdldHRleHQgdG9vbHMgbm90IGZvdW5kOyByZXF1aXJlZCBmb3IgaW50bHRvb2xdKQorIGZpCisgCistQUNfUEFUSF9QUk9HKElOVExUT09MX1BFUkwsIHBlcmwpCisrQUNfUEFUSF9QUk9HKElOVExUT09MX1BFUkwsIG5hdGl2ZXBlcmwpCisgaWYgdGVzdCAteiAiJElOVExUT09MX1BFUkwiOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtwZXJsIG5vdCBmb3VuZF0pCisgZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sXzAuNTEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sXzAuNTEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTIwZDQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2xfMC41MS4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgaW50bHRvb2wuaW5jCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9pbnRsdG9vbC1ub3dhcm4ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3BlcmwtNTIyLWRlcHJlY2F0aW9ucy5wYXRjaCBcCisgICAgICAgICAgICR7TkFUSVZFUEFUQ0hFU30gXAorICAgICAgICAgICAiCisKKyMKKyMgQWxsIG9mIHRoZSBpbnRsdG9vbCBzY3JpcHRzIGhhdmUgdGhlIGNvcnJlY3QgcGF0aHMgdG8gcGVybCBhbHJlYWR5CisjIGVtYmVkZGVkIGludG8gdGhlbSBhbmQgY2FuIGZpbmQgcGVybCBmaW5lLCBzbyB3ZSBhZGQgdGhlIHJlbW92ZSB4bWwtY2hlY2sKKyMgaW4gdGhlIGludGx0b29sLm00IHZpYSB0aGUgcmVtb3ZlLXhtbC1jaGVjay5wYXRjaAorTkFUSVZFUEFUQ0hFUyA9ICJmaWxlOi8vbm9wZXJsY2hlY2sucGF0Y2ggXAorICAgICAgICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXhtbC1jaGVjay5wYXRjaCIKK05BVElWRVBBVENIRVNfY2xhc3MtbmF0aXZlID0gImZpbGU6Ly91c2UtbmF0aXZlcGVybC5wYXRjaCIgCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxMmU1MTdjYWMyYjU3YTAxMjFjZGEzNTE1NzBmMWU2MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2N2M3NGQ5NDE5NmIxNTNiNzc0YWI5Zjg5YjJmYTZjNmJhNzkzNTI0MDcwMzdjOGMxNGQ1YWViMzM0ZTk1OWNkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tYy8wMDAxLWpzb25fdG9rZW5lci1yZXF1aXJlcy1JTkYtYW5kLU5BTi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2pzb24tYy9qc29uLWMvMDAwMS1qc29uX3Rva2VuZXItcmVxdWlyZXMtSU5GLWFuZC1OQU4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI5ZDkxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2pzb24tYy9qc29uLWMvMDAwMS1qc29uX3Rva2VuZXItcmVxdWlyZXMtSU5GLWFuZC1OQU4ucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSA5YmU3MTcwMGViNTgwYzgxNTY4ODU4NGE2NDYyMWEzODg2N2MzZmRkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFtZXMgTXlhdHQgPGphbWVzLm15YXR0QHRlc3NlbGxhLmNvbT4KK0RhdGU6IFRodSwgNSBGZWIgMjAxNSAxNTo1NzoxNCArMDAwMAorU3ViamVjdDogW1BBVENIXSBqc29uX3Rva2VuZXIgcmVxdWlyZXMgSU5GIGFuZCBOQU4KKworLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyBqc29uX3Rva2VuZXIuYyB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDoganNvbi1jLTAuMTIvanNvbl90b2tlbmVyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBqc29uLWMtMC4xMi5vcmlnL2pzb25fdG9rZW5lci5jCisrKysganNvbi1jLTAuMTIvanNvbl90b2tlbmVyLmMKK0BAIC0xNiw2ICsxNiw3IEBACisgI2luY2x1ZGUgImNvbmZpZy5oIgorIAorICNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgIm1hdGhfY29tcGF0LmgiCisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdGRkZWYuaD4KK0BAIC0zNTIsMTIgKzM1MywxMCBAQCBzdHJ1Y3QganNvbl9vYmplY3QqIGpzb25fdG9rZW5lcl9wYXJzZV9lCisgCisgICAgIGNhc2UganNvbl90b2tlbmVyX3N0YXRlX2luZjogLyogYWthIHN0YXJ0cyB3aXRoICdpJyAqLworICAgICAgIHsKKy0JaW50IHNpemU7CistCWludCBzaXplX2luZjsKKysJc2l6ZV90IHNpemVfaW5mOworIAlpbnQgaXNfbmVnYXRpdmUgPSAwOworIAorIAlwcmludGJ1Zl9tZW1hcHBlbmRfZmFzdCh0b2stPnBiLCAmYywgMSk7CistCXNpemUgPSBqc29uX21pbih0b2stPnN0X3BvcysxLCBqc29uX251bGxfc3RyX2xlbik7CisgCXNpemVfaW5mID0ganNvbl9taW4odG9rLT5zdF9wb3MrMSwganNvbl9pbmZfc3RyX2xlbik7CisgCWNoYXIgKmluZmJ1ZiA9IHRvay0+cGItPmJ1ZjsKKyAJaWYgKCppbmZidWYgPT0gJy0nKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tY18wLjEyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tY18wLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWYwM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jXzAuMTIuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJDIGJpbmRpbmdzIGZvciBhcHBzIHdoaWNoIHdpbGwgbWFuaXB1bGF0ZSBKU09OIGRhdGEiCitERVNDUklQVElPTiA9ICJKU09OLUMgaW1wbGVtZW50cyBhIHJlZmVyZW5jZSBjb3VudGluZyBvYmplY3QgbW9kZWwgdGhhdCBhbGxvd3MgeW91IHRvIGVhc2lseSBjb25zdHJ1Y3QgSlNPTiBvYmplY3RzIGluIEMuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2pzb24tYy9qc29uLWMvd2lraSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGU1NGI2MGZiYmMzNTEyM2JhMTkzZmVhOGVlMjE2ZjIiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2pzb24tY19yZWxlYXNlcy9yZWxlYXNlcy8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1qc29uX3Rva2VuZXItcmVxdWlyZXMtSU5GLWFuZC1OQU4ucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjNjYTRiYmI4ODFkZmM0MDE3ZTgwMjFiNWUwYThjNDkxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAwMGMwMWIyYjNmODJkY2I0MjYxNzUxZWI3MWYxYjA4NDQwNGZiN2Q2YTI4MmYwNjA3NGQzYzE3MDc4YjlmM2YiCisKK1JQUk9WSURFU18ke1BOfSA9ICJsaWJqc29uIgorCitpbmhlcml0IGF1dG90b29scworCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAjIENsZWFuIHVwIGF1dG9jb25mIGNydWZ0IHRoYXQgc2hvdWxkIG5vdCBiZSBpbiB0aGUgdGFyYmFsbAorICAgIHJtIC1mICR7U30vY29uZmlnLnN0YXR1cworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMva2NvbmZpZy1mcm9udGVuZHMva2NvbmZpZy1mcm9udGVuZHNfMy4xMi4wLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9rY29uZmlnLWZyb250ZW5kcy9rY29uZmlnLWZyb250ZW5kc18zLjEyLjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGEyZjkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMva2NvbmZpZy1mcm9udGVuZHMva2NvbmZpZy1mcm9udGVuZHNfMy4xMi4wLjAuYmIKQEAgLTAsMCArMSwzOCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTIgS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIHRoZSB0ZXJtcykKKworU1VNTUFSWSA9ICJMaW51eCBrZXJuZWwgc3R5bGUgY29uZmlndXJhdGlvbiBmcmFtZXdvcmsgZm9yIG90aGVyIHByb2plY3RzIgorREVTQ1JJUFRJT04gPSAiVGhlIGtjb25maWctZnJvbnRlbmRzIHByb2plY3QgYWltcyBhdCBjZW50cmFsaXNpbmcgXAordGhlIGVmZm9ydCBvZiBrZWVwaW5nIGFuIHVwLXRvLWRhdGUsIG91dC1vZi10cmVlLCBwYWNrYWdpbmcgb2YgdGhlIFwKK2tjb25maWcgaW5mcmFzdHJ1Y3R1cmUsIHJlYWR5IGZvciB1c2UgYnkgdGhpcmQtcGFydHkgcHJvamVjdHMuIFwKK1RoZSBrY29uZmlnLWZyb250ZW5kcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSBrY29uZmlnIHBhcnNlciwgYXMgd2VsbCBhcyBhbGwgXAordGhlIGZyb250ZW5kcyIKK0hPTUVQQUdFID0gImh0dHA6Ly95bW9yaW4uaXMtYS1nZWVrLm9yZy9wcm9qZWN0cy9rY29uZmlnLWZyb250ZW5kcyIKK0xJQ0VOU0UgPSAiR1BMLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTliOGNmNjBmZjM5NzY3ZmYwNGI2NzFmY2E4MzAyNDA4IgorU0VDVElPTiA9ICJkZXZlbCIKK0RFUEVORFMgKz0gIm5jdXJzZXMgZmxleCBiaXNvbiBncGVyZi1uYXRpdmUgcGtnY29uZmlnLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24gYmFzaCIKK1NSQ19VUkkgPSAiaHR0cDovL3ltb3Jpbi5pcy1hLWdlZWsub3JnL2Rvd25sb2FkLyR7QlBOfS8ke0JQfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiOTM5MjgwZGNjODNmOGZlYWJkODdhMWQ1ZjliMDBjMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlYTI2MTVhNjJjNzRiZWE2Y2UzYjM4NDAyZjAwYzc1MTM4NThmMzA3ZjZiYTdhYTlmZGJmMGJiYzEyYmNmNDA3IgorCitpbmhlcml0IGF1dG90b29scworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCW1rZGlyIC1wIHNjcmlwdHMvLmF1dG9zdHVmZi9tNAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlsbiAtcyBrY29uZmlnLWNvbmYgJHtEfSR7YmluZGlyfS9jb25mCisJbG4gLXMga2NvbmZpZy1tY29uZiAke0R9JHtiaW5kaXJ9L21jb25mCit9CisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWdjb25mIC0tZGlzYWJsZS1xY29uZiIKKworIyBTb21lIHBhY2thZ2VzIGhhdmUgdGhlIHZlcnNpb24gcHJlY2VlZGluZyB0aGUgLnNvIGluc3RlYWQgcHJvcGVybHkKKyMgdmVyc2lvbmVkIC5zby48dmVyc2lvbj4sIHNvIHdlIG5lZWQgdG8gcmVvcmRlciBhbmQgcmVwYWNrYWdlLgorU09MSUJTID0gIi0ke0BkLmdldFZhcignUFYnLDEpWzotMl19LnNvIgorRklMRVNfU09MSUJTREVWID0gIiR7bGliZGlyfS9saWJrY29uZmlnLXBhcnNlci5zbyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtMi40LjYuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLTIuNC42LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTc3YzczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLTIuNC42LmluYwpAQCAtMCwwICsxLDQ1IEBACitTVU1NQVJZID0gIkdlbmVyaWMgbGlicmFyeSBzdXBwb3J0IHNjcmlwdCIKK0RFU0NSSVBUSU9OID0gIlRoaXMgaXMgR05VIGxpYnRvb2wsIGEgZ2VuZXJpYyBsaWJyYXJ5IHN1cHBvcnQgc2NyaXB0LiBcCitMaWJ0b29sIGhpZGVzIHRoZSBjb21wbGV4aXR5IG9mIGdlbmVyYXRpbmcgc3BlY2lhbCBsaWJyYXJ5IHR5cGVzIFwKKyhzdWNoIGFzIHNoYXJlZCBsaWJyYXJpZXMpIGJlaGluZCBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJ0b29sL2xpYnRvb2wuaHRtbCIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgZmlsZTovL2xpYmx0ZGwvQ09QWUlORy5MSUI7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjICIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2xpYnRvb2wvbGlidG9vbC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vdHJhaWxpbmdzbGFzaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW5hbWUtd2l0aC1zeXNyb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VzZS1zeXNyb290LWluLWxpYnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWZpbmFsLXJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1ycGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub3JtLXJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1yZXNvbHZlLWx0LXN5c3Jvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9oYXJkY29kZXBhdGhzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3Vud2luZC1vcHQtcGFyc2luZy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYWRkZjQ0YjY0NmRkYjRlMzkxOTgwNWFhODhmYTdjNWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTNiZDRkNWQzZDAyNWEzNmMyMWRkNmFmN2VhODE4YTJhZmNkNGRmYzFlYTVhMTdiMzlkNzg1NGJjZDBjMDZlMyIKKworZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKwkjIFNvbWV0aW1lcyB0aGlzIGZpbGUgZG9lc24ndCBnZXQgcmVidWlsdCwgZm9yY2UgdGhlIGlzc3VlCisJcm0gLWYgJHtTfS9idWlsZC1hdXgvbHRtYWluLnNoCisJbWFrZSBidWlsZC1hdXgvbHRtYWluLnNoCisJLi9jb25maWcuc3RhdHVzCit9CisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KK0VYVFJBX0FVVE9SRUNPTkYgPSAiLS1leGNsdWRlPWxpYnRvb2xpemUiCisKK0RFUEVORFMgPSAibGlidG9vbC1uYXRpdmUiCisKK1BBQ0tBR0VTID0rICJsaWJsdGRsIgorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYWNsb2NhbCIKKworRklMRVNfJHtQTn0tZGV2X3JlbW92ZSA9ICIke2RhdGFkaXJ9L2FjbG9jYWwiCitGSUxFU19saWJsdGRsID0gIiR7bGliZGlyfS9saWJsdGRsJHtTT0xJQlN9IgorCitleHBvcnQgQ09ORklHX1NIRUxMPSIvYmluL2Jhc2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtY3Jvc3NfMi40LjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtY3Jvc3NfMi40LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ3ODgwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC1jcm9zc18yLjQuNi5iYgpAQCAtMCwwICsxLDQxIEBACityZXF1aXJlIGxpYnRvb2wtJHtQVn0uaW5jCisKK1BBQ0tBR0VTID0gIiIKK1NSQ19VUkkgKz0gImZpbGU6Ly9wcmVmaXgucGF0Y2giCitTUkNfVVJJICs9ICJmaWxlOi8vZml4aW5zdGFsbC5wYXRjaCIKKworZGF0YWRpciA9ICIke1NUQUdJTkdfRElSX1RBUkdFVH0ke3RhcmdldF9kYXRhZGlyfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgUmVtb3ZlIGFueSBleGlzdGluZyBsaWJ0b29sIG00IHNpbmNlIG9sZCBzdGFsZSB2ZXJzaW9ucyB3b3VsZCBicmVhaworCSMgYW55IHVwZ3JhZGUKKwlybSAtZiAke1NUQUdJTkdfREFUQURJUn0vYWNsb2NhbC9saWJ0b29sLm00CisJcm0gLWYgJHtTVEFHSU5HX0RBVEFESVJ9L2FjbG9jYWwvbHQqLm00Cit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vCisJaW5zdGFsbCAtbSAwNzU1ICR7SE9TVF9TWVN9LWxpYnRvb2wgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vJHtIT1NUX1NZU30tbGlidG9vbAorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vCisJR1JFUD0nL2Jpbi9ncmVwJyBTRUQ9J3NlZCcgJHtTfS9idWlsZC1hdXgvaW5saW5lLXNvdXJjZSBsaWJ0b29saXplID4gJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vbGlidG9vbGl6ZQorCWNobW9kIDA3NTUgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vbGlidG9vbGl6ZQorCWluc3RhbGwgLWQgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4LworCWluc3RhbGwgLWQgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2FjbG9jYWwvCisJaW5zdGFsbCAtYyAke1N9L2J1aWxkLWF1eC9jb21waWxlICR7RH0ke3RhcmdldF9kYXRhZGlyfS9saWJ0b29sL2J1aWxkLWF1eC8KKwlpbnN0YWxsIC1jICR7U30vYnVpbGQtYXV4L2NvbmZpZy5ndWVzcyAke0R9JHt0YXJnZXRfZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvCisJaW5zdGFsbCAtYyAke1N9L2J1aWxkLWF1eC9jb25maWcuc3ViICR7RH0ke3RhcmdldF9kYXRhZGlyfS9saWJ0b29sL2J1aWxkLWF1eC8KKwlpbnN0YWxsIC1jICR7U30vYnVpbGQtYXV4L2RlcGNvbXAgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4LworCWluc3RhbGwgLWMgJHtTfS9idWlsZC1hdXgvaW5zdGFsbC1zaCAke0R9JHt0YXJnZXRfZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvCisJaW5zdGFsbCAtYyAke1N9L2J1aWxkLWF1eC9taXNzaW5nICR7RH0ke3RhcmdldF9kYXRhZGlyfS9saWJ0b29sL2J1aWxkLWF1eC8KKwlpbnN0YWxsIC1jIC1tIDA2NDQgJHtTfS9idWlsZC1hdXgvbHRtYWluLnNoICR7RH0ke3RhcmdldF9kYXRhZGlyfS9saWJ0b29sL2J1aWxkLWF1eC8KKwlpbnN0YWxsIC1jIC1tIDA2NDQgJHtTfS9tNC8qLm00ICR7RH0ke3RhcmdldF9kYXRhZGlyfS9hY2xvY2FsLworfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImxpYnRvb2xjcm9zc19zeXNyb290X3ByZXByb2Nlc3MiCisKK2xpYnRvb2xjcm9zc19zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30KKwlzeXNyb290X3N0YWdlX2RpciAke0R9JHt0YXJnZXRfZGF0YWRpcn0gJHtTWVNST09UX0RFU1RESVJ9JHt0YXJnZXRfZGF0YWRpcn0KK30KKworU1NUQVRFX1NDQU5fRklMRVMgKz0gImxpYnRvb2xpemUgKi1saWJ0b29sIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLW5hdGl2ZV8yLjQuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC1uYXRpdmVfMi40LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM1MjE4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC1uYXRpdmVfMi40LjYuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSBsaWJ0b29sLSR7UFZ9LmluYworCitERVBFTkRTID0gIiIKKworU1JDX1VSSSArPSAiZmlsZTovL3ByZWZpeC5wYXRjaCIKKworaW5oZXJpdCBuYXRpdmUKKworRVhUUkFfT0VDT05GID0gIiAtLXdpdGgtbGlidG9vbC1zeXNyb290PSR7U1RBR0lOR19ESVJfTkFUSVZFfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgUmVtb3ZlIGFueSBleGlzdGluZyBsaWJ0b29sIG00IHNpbmNlIG9sZCBzdGFsZSB2ZXJzaW9ucyB3b3VsZCBicmVhaworCSMgYW55IHVwZ3JhZGUKKwlybSAtZiAke1NUQUdJTkdfREFUQURJUn0vYWNsb2NhbC9saWJ0b29sLm00CisJcm0gLWYgJHtTVEFHSU5HX0RBVEFESVJ9L2FjbG9jYWwvbHQqLm00Cit9CisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSAke0hPU1RfU1lTfS1saWJ0b29sICR7RH0ke2JpbmRpcn0vJHtIT1NUX1NZU30tbGlidG9vbAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNDA4NGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTQwNCwyMSArNDA0LDYgQEAgJChub3Rlc190eHQpOiAkKG5vdGVzX3RleGkpCisgCSQoQU1fVl9HRU4pJChNQUtFSU5GTykgLVAgJyQoc3JjZGlyKS9kb2MnIC0tbm8taGVhZGVycyBcCisgCSAgICAkKE1BS0VJTkZPRkxBR1MpIC1vICckQCcgJyQobm90ZXNfdGV4aSknCisgCistZGlzdF9tYW4xX01BTlMJCT0gJChsaWJ0b29sXzEpICQobGlidG9vbGl6ZV8xKQorLU1BSU5UQUlORVJDTEVBTkZJTEVTCSs9ICQoZGlzdF9tYW4xX01BTlMpCistdXBkYXRlX21hbnMgPSBcCistICBQQVRIPSIuJChQQVRIX1NFUEFSQVRPUikkJFBBVEgiOyBleHBvcnQgUEFUSDsgXAorLSAgJChIRUxQMk1BTikgLS1vdXRwdXQ9JyRAJworLQorLSMgSXQncyB3cm9uZyB0byBtYWtlIGRpc3RyaWJ1dGVkIGZpbGVzIChlLmcuICQobGlidG9vbF8xKSkgcmVseSBvbgorLSMgZmlsZXMgY3JlYXRlZCBpbiB0aGUgYnVpbGQgdHJlZSwgc28gaW5zdGVhZCB3ZSByZWdlbmVyYXRlIHRoZQorLSMgbWFudWFsIHBhZ2VzIGlmIHRoZSBzb3VyY2VzIGZvciB0aGUgYnVpbGQtdHJlZSBmaWxlcyB3ZSB3YW50IHRvCistIyBydW4gaGF2ZSBjaGFuZ2VkLgorLSQobGlidG9vbF8xKTogJChsdG1haW5fc2gpCistCSQoQU1fVl9HRU4pJCh1cGRhdGVfbWFucykgLS1oZWxwLW9wdGlvbj0tLWhlbHAtYWxsIGxpYnRvb2wKKy0kKGxpYnRvb2xpemVfMSk6ICQobGlidG9vbGl6ZV9pbikKKy0JJChBTV9WX0dFTikkKHVwZGF0ZV9tYW5zKSBsaWJ0b29saXplCistCisgCisgIyMgLS0tLS0tLS0tLS0tLSAjIworICMjIEluc3RhbGxhdGlvbi4gIyMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXgtZmluYWwtcnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4LWZpbmFsLXJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOWY4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4LWZpbmFsLXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0VuYWxiaW5nIHN5c3Jvb3Qgc3VwcG9ydCBleHBvc2VkIGEgYnVnIHdoZXJlIHRoZSBmaW5hbCBsaWJyYXJ5CitoYWQgYW4gUlBBVEggZW5jb2RlZCBpbnRvIGl0IHdoaWNoIHN0aWxsIHBvaW50ZWQgdG8gdGhlIHN5c3Jvb3QuCitUaGlzIHdvcmtzIGFyb3VuZCB0aGUgaXNzdWUgdW50aWwgaXQgZ2V0cyBzb3J0ZWQgb3V0IHVwc3RyZWFtLgorCitGaXggc3VnZ2VzdGVkIGJ5IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+CitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9sdG1haW4uaW4gYi9idWlsZC1hdXgvbHRtYWluLmluCistLS0gYS9idWlsZC1hdXgvbHRtYWluLmluCisrKysgYi9idWlsZC1hdXgvbHRtYWluLmluCitAQCAtNzU2OSw5ICs3NTY5LDExIEBAIEVPRgorIAkgIHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSIgfHwgcnBhdGg9JGNvbXBpbGVfcnBhdGgkcnBhdGgKKyAJICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KKyAJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorKwkJICBmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKysJCSAgbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKKysJCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkbGliZGlyIgorKwkJICBsaWJkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorIAkgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKy0JCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorLQkJbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKKyAJCWlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorIAkJICBoYXJkY29kZV9saWJkaXJzPSRsaWJkaXIKKyAJCWVsc2UKK0BAIC04MzAxLDYgKzgzMDMsMTAgQEAgRU9GCisgICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgICBmb3IgbGliZGlyIGluICRjb21waWxlX3JwYXRoICRmaW5hbGl6ZV9ycGF0aDsgZG8KKyAJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisrCSAgZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisrCSAgbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKKysJICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRsaWJkaXIiCisrCSAgbGliZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKyAJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorIAkgICAgICBoYXJkY29kZV9saWJkaXJzPSRsaWJkaXIKK0BAIC04MzUyLDYgKzgzNTgsMTAgQEAgRU9GCisgICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgICBmb3IgbGliZGlyIGluICRmaW5hbGl6ZV9ycGF0aDsgZG8KKyAJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisrCSAgZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisrCSAgbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKKysJICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRsaWJkaXIiCisrCSAgbGliZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKyAJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorIAkgICAgICBoYXJkY29kZV9saWJkaXJzPSRsaWJkaXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXgtcmVzb2x2ZS1sdC1zeXNyb290LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1yZXNvbHZlLWx0LXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJkOTU5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXgtcmVzb2x2ZS1sdC1zeXNyb290LnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGlzIHBhdGNoIHVwZGF0ZXMgbGlidG9vbC5tNCAoYW5kIGl0cyBvdXRwdXQpIHRvIHJlc29sdmUgYSBwcm9ibGVtCit3aXRoIHZhcmlhYmxlICdsdF9zeXNyb290JyBub3QgYmVpbmcgcHJvcGVybHkgdXBkYXRlZCBpZiB0aGUgb3B0aW9uCisnLS13aXRoWy1saWJ0b29sXS1zeXNyb290JyBpcyBub3QgcHJvdmlkZWQgd2hlbiBydW5uaW5nIHRoZSAnY29uZmlndXJlJworc2NyaXB0IGZvciBhIHBhY2thZ2UuCisKK0kgaGF2ZSBhbHNvIHJlcG9ydGVkIHRoZSBwcm9ibGVtIHRvIGxpYnRvb2wgaGVyZQorCitodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWxpYnRvb2wvMjAxMy0wOS9tc2cwMDAwNS5odG1sCisKK1NpZ25lZC1vZmYtYnk6IEhhbnMgQmVja2VydXMgPGhhbnMuYmVja2VydXMgYXQgZ21haWwuY29tPgorVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KK2RpZmYgLS1naXQgYS9tNC9saWJ0b29sLm00IGIvbTQvbGlidG9vbC5tNAorLS0tIGEvbTQvbGlidG9vbC5tNAorKysrIGIvbTQvbGlidG9vbC5tNAorQEAgLTEyMjUsMTYgKzEyMjUsMjEgQEAgZG5sIGx0X3N5c3Jvb3Qgd2lsbCBhbHdheXMgYmUgcGFzc2VkIHVucXVvdGVkLiAgV2UgcXVvdGUgaXQgaGVyZQorIGRubCBpbiBjYXNlIHRoZSB1c2VyIHBhc3NlZCBhIGRpcmVjdG9yeSBuYW1lLgorIGx0X3N5c3Jvb3Q9CisgY2FzZSAkd2l0aF9saWJ0b29sX3N5c3Jvb3QgaW4gIygKKy0geWVzKQorKyBubykKKyAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKysgICAgICMgVHJlYXQgIi8iIHRoZSBzYW1lIGEgYW4gdW5zZXQgc3lzcm9vdC4gSXQgc2VlbXMgdG8gYmUgbW9yZQorKyAgICAgIyBjb21wYXRpYmxlIGFjcm9zcyBob3N0IHBsYXRmb3JtcyB0aGF0IHdheSE/CisrICAgICBpZiB0ZXN0ICIkbHRfc3lzcm9vdCIgPSAvOyB0aGVuCisrICAgICAgIGx0X3N5c3Jvb3Q9CisrICAgICBmaQorICAgIGZpCisgICAgOzsgIygKKysgeWVzfCcnfC8pCisrICAgOzsgIygKKyAgLyopCisgICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgOzsgIygKKy0gbm98JycpCistICAgOzsgIygKKyAgKikKKyAgICBBQ19NU0dfUkVTVUxUKFskd2l0aF9saWJ0b29sX3N5c3Jvb3RdKQorICAgIEFDX01TR19FUlJPUihbVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLl0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4LXJwYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmVjOTQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDY1IEBACitXZSBkb24ndCB3YW50IHRvIGFkZCBSUEFUSFMgd2hpY2ggbWF0Y2ggZGVmYXVsdCBsaW5rZXIKK3NlYXJjaCBwYXRocywgdGhleSdyZSBhIHdhc3RlIG9mIHNwYWNlLiBUaGlzIHBhdGNoCitmaWx0ZXJzIGxpYnRvb2xzIGxpc3QgYW5kIHJlbW92ZXMgdGhlIG9uZXMgd2UgZG9uJ3QgbmVlZC4KKworUlAgMjMvOS8yMDExCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IGxpYnRvb2wtMi40LjIvYnVpbGQtYXV4L2x0bWFpbi5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnRvb2wtMi40LjIub3JpZy9idWlsZC1hdXgvbHRtYWluLmluCisrKysgbGlidG9vbC0yLjQuMi9idWlsZC1hdXgvbHRtYWluLmluCitAQCAtNzI4Niw4ICs3Mjg2LDE0IEBAIEVPRgorIAkJICBlc2FjCisgCQlmaQorIAkgICAgICBlbHNlCistCQlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCistCQlmdW5jX2FwcGVuZCBkZXBfcnBhdGggIiAkZmxhZyIKKysgICAgICAgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gaGFyZGNvZGUgaW4gYW4gcnBhdGggaWYgaXQgaXNuJ3QgaW4gdGhlCisrICAgICAgICAgICAgICAgICMgZGVmYXVsdCBkbHNlYXJjaCBwYXRoLgorKwkgICAgICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKysJICAgICAgICAqIiAkbGliZGlyICIqKSA7OworKwkgICAgICAgICopIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgZGVwX3JwYXRoICIgJGZsYWciCisrICAgICAgICAgICAgICAgICAgIDs7CisrCSAgICAgICAgZXNhYworIAkgICAgICBmaQorIAkgICAgZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisgCSAgICAgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KK0BAIC04MDE5LDggKzgwMjUsMTQgQEAgRU9GCisgCSAgICAgIGVzYWMKKyAJICAgIGZpCisgCSAgZWxzZQorLQkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorLQkgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKKysgICAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBoYXJkY29kZSBpbiBhbiBycGF0aCBpZiBpdCBpc24ndCBpbiB0aGUKKysgICAgICAgICAgICAjIGRlZmF1bHQgZGxzZWFyY2ggcGF0aC4KKysJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKysJICAgICoiICRsaWJkaXIgIiopIDs7CisrCSAgICAqKSBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICAgICAgICAgcnBhdGgrPSIgJGZsYWciCisrICAgICAgICAgICAgICAgOzsKKysJICAgIGVzYWMKKyAJICBmaQorIAllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKyAJICBjYXNlICIkcGVybV9ycGF0aCAiIGluCitAQCAtODA3MCw4ICs4MDgyLDE0IEBAIEVPRgorIAkgICAgICBlc2FjCisgCSAgICBmaQorIAkgIGVsc2UKKy0JICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKy0JICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCisrICAgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gaGFyZGNvZGUgaW4gYW4gcnBhdGggaWYgaXQgaXNuJ3QgaW4gdGhlCisrICAgICAgICAgICAgIyBkZWZhdWx0IGRsc2VhcmNoIHBhdGguCisrCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisrCSAgICAqIiAkbGliZGlyICIqKSA7OworKwkgICAgKikgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCisrICAgICAgICAgICAgICAgOzsKKysJICAgIGVzYWMgICAgCisgCSAgZmkKKyAJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisgCSAgY2FzZSAiJGZpbmFsaXplX3Blcm1fcnBhdGggIiBpbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeGluc3RhbGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4aW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjM0M2JmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeGluc3RhbGwucGF0Y2gKQEAgLTAsMCArMSwxMDIgQEAKK1RoZXJlIGlzIG5vIHBvaW50IGluIGhhdmluZyAiZXhlY3V0YWJsZSIgYmluYXJpZXMgaW4gdGhlIC5saWJzCitkaXJlY3RvcnkgbGlua2VkIHdpdGggZGlmZmVyZW50IHJwYXRocyB0byB0aGUgdGFyZ2V0IHdoaWNoIAorY291bGQgY29uY2l2YWJseSBiZSBydW4gb24gdGhlIGJ1aWxkIHN5c3RlbSB3aGVuIGNyb3NzIGNvbXBpbGluZy4KKworVGhpcyBwYXRjaCByZW1vdmVzIHRoZSBleHRyYSBycGF0aHMgKCRjb21waWxlX3JwYXRoKSBzbyB0aGF0IHRoZQorb3V0cHV0IGZyb20gdGhlICJsaW5rIiBzdGFnZSBjYW4gYmUgdXNlZCBvbiB0aGUgdGFyZ2V0LiBXZSBjYW4gdGhlbgorYXZvaWQgaGF2aW5nIHRvICJyZWxpbmsiIGR1cmluZyB0aGUgaW5zdGFsbCBzdGFnZS4KKworVGhpcyBzYXZlcyBzb21lIGJ1aWxkIHRpbWUgKGRvX2luc3RhbGwgaXMgb3ZlciAyIG1pbnV0ZXMgZmFzdGVyIGZvcgorcHVsc2VhdWRpbykuCisKK1RoaXMgcGF0Y2ggYWxzbyByZW1vdmVzIGFuIGFubm95aW5nICJzZWVtcyB0byBiZSBtb3ZlZCIgd2FybmluZword2hpY2ggaXMgdG90YWxseSBib2d1cyBpbiB0aGUgc3lzcm9vdCBjYXNlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGFyZSB1bmxpa2VseSB0byB0YWtlIGEgcGF0Y2ggbGlrZSB0aGlzXQorCitSUCAyMDExLzExLzE2CisKK1VwZGF0ZWQgYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2x0bWFpbi5pbiBiL2J1aWxkLWF1eC9sdG1haW4uaW4KKy0tLSBhL2J1aWxkLWF1eC9sdG1haW4uaW4KKysrKyBiL2J1aWxkLWF1eC9sdG1haW4uaW4KK0BAIC0yMzU1LDcgKzIzNTUsNyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorIAlkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAJZnVuY19hcHBlbmQgZGlyICIkb2JqZGlyIgorIAorLQlpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisrCWlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0gbm8gJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorICAgICAgICMgU3RyaXAgYW55IHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGRlc3RpbmF0aW9uLgorICAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGxpYmRpciIKKyAgICAgICBkZXN0bGliZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKK0BAIC0yMzk0LDcgKzIzOTQsNyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorIAkgIHNoaWZ0CisgCisgCSAgc3JjbmFtZT0kcmVhbG5hbWUKKy0JICB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiICYmIHNyY25hbWU9JHtyZWFsbmFtZX1UCisrCSAgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSBubyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiICYmIHNyY25hbWU9IiRyZWFsbmFtZSJUCisgCisgCSAgIyBJbnN0YWxsIHRoZSBzaGFyZWQgbGlicmFyeSBhbmQgYnVpbGQgdGhlIHN5bWxpbmtzLgorIAkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9zaGFyZWRfcHJvZyAkZGlyLyRzcmNuYW1lICRkZXN0ZGlyLyRyZWFsbmFtZSIgXAorQEAgLTYxNjIsMTUgKzYxNjIsMTUgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aC4KKyAJICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKKyAJICAgICMgc2VhcmNoIHBhdGguCistCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCistCSAgICAqIiAkYWJzZGlyICIqKSA7OworLQkgICAgKikKKy0JICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorLQkgICAgICAqIiAkYWJzZGlyICIqKSA7OworLQkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKKy0JICAgICAgZXNhYworLQkgICAgICA7OworLQkgICAgZXNhYworKwkgICAgI2Nhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKysJICAgICMqIiAkYWJzZGlyICIqKSA7OworKwkgICAgIyopCisrCSAgICAjICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisrCSAgICAjICAqIiAkYWJzZGlyICIqKSA7OworKwkgICAgIyAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CisrCSAgICAjICBlc2FjCisrCSAgICAjICA7OworKwkgICAgI2VzYWMKKyAJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKyAJICAgICoiICRsaWJkaXIgIiopIDs7CisgCSAgICAqKQorQEAgLTYyMzYsMTUgKzYyMzYsMTUgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aC4KKyAJICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKKyAJICAgICMgc2VhcmNoIHBhdGguCistCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCistCSAgICAqIiAkYWJzZGlyICIqKSA7OworLQkgICAgKikKKy0JICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorLQkgICAgICAqIiAkYWJzZGlyICIqKSA7OworLQkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKKy0JICAgICAgZXNhYworLQkgICAgICA7OworLQkgICAgZXNhYworKwkgICAgI2Nhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKysJICAgICMqIiAkYWJzZGlyICIqKSA7OworKwkgICAgIyopCisrCSAgICAjICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisrCSAgICAjICAqIiAkYWJzZGlyICIqKSA7OworKwkgICAgIyAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CisrCSAgICAjICBlc2FjCisrCSAgICAjICA7OworKwkgICAgI2VzYWMKKyAJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKyAJICAgICoiICRsaWJkaXIgIiopIDs7CisgCSAgICAqKQorQEAgLTY1OTAsOCArNjU5MCw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQkgIGV2YWwgbGliZGlyPWAkU0VEIC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorIAkJICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisgCQkgICAgZnVuY19mYXRhbF9lcnJvciAiJyRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKy0JCSAgdGVzdCAiJGFic2RpciIgIT0gIiRsaWJkaXIiICYmIFwKKy0JCSAgICBmdW5jX3dhcm5pbmcgIickZGVwbGliJyBzZWVtcyB0byBiZSBtb3ZlZCIKKysJCSAgI3Rlc3QgIiRhYnNkaXIiICE9ICIkbGliZGlyIiAmJiBcCisrCQkgICMgIGZ1bmNfd2FybmluZyAiJyRkZXBsaWInIHNlZW1zIHRvIGJlIG1vdmVkIgorIAorIAkJICBwYXRoPS1MJGFic2RpcgorIAkJZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9ub2hhcmRjb2RlcGF0aHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvbm9oYXJkY29kZXBhdGhzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMjM5ZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvbm9oYXJkY29kZXBhdGhzLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0lmIGZvciBleGFtcGxlIHlvdSBidWlsZCBvbiBhIG1hY2hpbmUgd2l0aCAvYmluL2dyZXAsIHRoZW4gcmVzdG9yZSB0aGF0IHNzdGF0ZQorb250byBhIG1hY2hpbmUgd2l0aCAvdXNyL2Jpbi9ncmVwLCB0aGluZ3Mgd2lsbCBmYWlsLiBTaW1wbHkgZG9uJ3QgYm90aGVyCitoYXJkY29kaW5nIHBhdGhzLgorCitSUCAyMDE1LzIvMworCitJbmRleDogbGlidG9vbC0yLjQuNS9saWJ0b29saXplLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlidG9vbC0yLjQuNS5vcmlnL2xpYnRvb2xpemUuaW4KKysrKyBsaWJ0b29sLTIuNC41L2xpYnRvb2xpemUuaW4KK0BAIC00MCwxMSArNDAsMTEgQEAKKyAKKyA6ICR7QVVUT0NPTkY9ImF1dG9jb25mIn0KKyA6ICR7QVVUT01BS0U9ImF1dG9tYWtlIn0KKy06ICR7RUdSRVA9IkBFR1JFUEAifQorLTogJHtGR1JFUD0iQEZHUkVQQCJ9CistOiAke0dSRVA9IkBHUkVQQCJ9CistOiAke0xOX1M9IkBMTl9TQCJ9CistOiAke1NFRD0iQFNFREAifQorKzogJHtFR1JFUD0iZWdyZXAifQorKzogJHtGR1JFUD0iZmdyZXAifQorKzogJHtHUkVQPSJncmVwIn0KKys6ICR7TE5fUz0ibG4gLXMifQorKzogJHtTRUQ9InNlZCJ9CisgCisgCisgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9ub3JtLXJwYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL25vcm0tcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0YzY1ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9ub3JtLXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK2xpYnRvb2w6IG5vcm1hbGl6ZSBsaW5rIHBhdGhzIGJlZm9yZSBjb25zaWRlcmluZyBmb3IgUlBBVEgKKworTGlidG9vbCBtYXkgYmUgcGFzc2VkIGxpbmsgcGF0aHMgb2YgdGhlIGZvcm0gIi91c3IvbGliLy4uL2xpYiIsIHdoaWNoCitmb29sIGl0cyBkZXRlY3Rpb24gY29kZSBpbnRvIHRoaW5raW5nIGl0IHNob3VsZCBiZSBpbmNsdWRlZCBhcyBhbgorUlBBVEggaW4gdGhlIGdlbmVyYXRlZCBiaW5hcnkuICBOb3JtYWxpemUgYmVmb3JlIGNvbXBhcmlzaW9uLgorCitTaWduZWQtb2ZmLWJ5OiBBbmR5IFJvc3MgPGFuZHkucm9zc0B3aW5kcml2ZXIuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1VwZGF0ZWQgYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC11ciBhL2J1aWxkLWF1eC9sdG1haW4uaW4gYi9idWlsZC1hdXgvbHRtYWluLmluCistLS0gYS9idWlsZC1hdXgvbHRtYWluLmluCTIwMTItMDgtMTYgMTM6NTg6NTUuMDU4OTAwMzYzIC0wNzAwCisrKysgYi9idWlsZC1hdXgvbHRtYWluLmluCTIwMTItMDgtMjIgMTE6MDE6MzQuMTkxMzQ1OTg5IC0wNzAwCitAQCAtNzI4OCw4ICs3Mjg4LDEwIEBACisgCSAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gaGFyZGNvZGUgaW4gYW4gcnBhdGggaWYgaXQgaXNuJ3QgaW4gdGhlCisgICAgICAgICAgICAgICAgICMgZGVmYXVsdCBkbHNlYXJjaCBwYXRoLgorKyAgICAgICAgICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoICIkbGliZGlyIgorKyAgICAgICAgICAgICAgICBsaWJkaXJfbm9ybT0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKKyAJICAgICAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCistCSAgICAgICAgKiIgJGxpYmRpciAiKikgOzsKKysJICAgICAgICAqIiAkbGliZGlyX25vcm0gIiopIDs7CisgCSAgICAgICAgKikgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBkZXBfcnBhdGggIiAkZmxhZyIKKyAgICAgICAgICAgICAgICAgICAgOzsKK0BAIC04MDI3LDggKzgwMjksMTAgQEAKKyAJICBlbHNlCisgICAgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gaGFyZGNvZGUgaW4gYW4gcnBhdGggaWYgaXQgaXNuJ3QgaW4gdGhlCisgICAgICAgICAgICAgIyBkZWZhdWx0IGRsc2VhcmNoIHBhdGguCisrICAgICAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJGxpYmRpciIKKysgICAgICAgICAgICBsaWJkaXJfbm9ybT0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKKyAJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKy0JICAgICoiICRsaWJkaXIgIiopIDs7CisrCSAgICAqIiAkbGliZGlyX25vcm0gIiopIDs7CisgCSAgICAqKSBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgICAgICAgICAgcnBhdGgrPSIgJGZsYWciCisgICAgICAgICAgICAgICAgOzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9wcmVmaXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvcHJlZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3M2RmMmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvcHJlZml4LnBhdGNoCkBAIC0wLDAgKzEsOTggQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1JlbmFtZXMgImxpYnRvb2wiIC0+ICIke1RBUkdFVF9QUkVGSVh9bGlidG9vbCIgd2hpY2ggbWFrZXMgc3VyZQoraXQgY2FuJ3QgYmUgY29uZnVzZWQgd2l0aCB0aGUgaG9zdCBsaWJ0b29sLgorCitPcmlnaW5hbGx5IGJ5OiBSUAorCitVcGRhdGVkOiBEYXRlOiAyMDEwLzA2LzI4CitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitJdCBhbHNvIGFkanVzdHMgbGlidG9vbCBzbyB0aGF0IHRoZSBoZWFkZXIgYXQgdGhlIHNjcmlwdCBpcyB1c2VkIGZvciAKK3NjcmlwdCBleGVjdXRpb24gYW5kIG5vdCB0aGV2YWx1ZSBvZiAkU0hFTEwuIFRoaXMgaXMgYmVjYXVzZSBtYW55IAorTWFrZWZpbGVzIGNoYW5nZSAkU0hFTEwgc28gZGFzaCBjYW4gZ2V0IHVzZWQgdG8gZXhlY3V0ZSB3aGF0IGlzIAorb3RoZXJ3aXNlIGNvbmZpZ3VyZWQgYXMgYSBiYXNoIHNoZWxsIHNjcmlwdC4gU2luY2Ugd2UgZG9uJ3QgbmVlZCB0byAKK2V4ZWN1dGUgc2NpcHRzIHRoaXMgd2F5IG9uIGFueSBzeXN0ZW0gSSdtIGF3YXJlIG9mIHVzIGJ1aWxkaW5nIHVwb24sIAordGhlIHNpbXBsZXN0IGZpeCBpcyBqdXN0IHRvIHJlbW92ZSAkU0hFTEwuCisKK1VwZGF0ZWQ6IERhdGU6IDIwMTEvMTEvMDkKK1JQCisKK1VwZGF0ZWQgYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMzEsNyArMzEsNyBAQCBTVUJESVJTCQkJPSAuCisgRElTVF9TVUJESVJTCQk9ICQoU1VCRElSUykKKyBFWFRSQV9ESVNUCQk9CisgCistQlVJTFRfU09VUkNFUwkJPSBsaWJ0b29sIGxpYnRvb2xpemUKKytCVUlMVF9TT1VSQ0VTCQk9ICQoaG9zdF9hbGlhcyktbGlidG9vbCBsaWJ0b29saXplCisgCisgQ0xFQU5GSUxFUwkJPQorIE1PU1RMWUNMRUFORklMRVMJPQorQEAgLTY3LDcgKzY3LDcgQEAgYnVpbGRfc2NyaXB0cwk9ICQoc3JjZGlyKS8kKGF1eF9kaXIpL2Fubm91bmNlLWdlbiBcCisgCisgRVhUUkFfRElTVCAgICAgKz0gYm9vdHN0cmFwIGJvb3RzdHJhcC5jb25mICQoYnVpbGRfc2NyaXB0cykgY2ZnLm1rIG1haW50Lm1rIFwKKyAJCSAgR05VbWFrZWZpbGUKKy1DTEVBTkZJTEVTICAgICArPSBsaWJ0b29sIGxpYnRvb2xpemUKKytDTEVBTkZJTEVTICAgICArPSAkKGhvc3RfYWxpYXMpLWxpYnRvb2wgbGlidG9vbGl6ZQorIAorICMjIElmIGEgZmlsZSBpcyBuYW1lZCBzZXZlcmFsIHRpbWVzIGJlbG93LCBhbmQgZXNwZWNpYWxseSBpZiBpdAorICMjIGlzIGEgZGlzdHJpYnV0ZWQgZmlsZSBjcmVhdGVkIGR1cmluZyBMaWJ0b29sIGJvb3RzdHJhcCwgd2UKK0BAIC0yNzYsNyArMjc2LDcgQEAgY29uZmlndXJlX2VkaXQgPSAkKGJvb3RzdHJhcF9lZGl0KSBcCisgCS1lICdzfEBzcmNkaXJcQHwkKHNyY2Rpcil8ZycKKyAKKyAjIFRoZSBsaWJ0b29sIGRpc3RyaWJ1dG9yIGFuZCB0aGUgc3RhbmRhbG9uZSBsaWJ0b29sIHNjcmlwdC4KKy1iaW5fU0NSSVBUUyA9IGxpYnRvb2wKKytiaW5fU0NSSVBUUyA9ICQoaG9zdF9hbGlhcyktbGlidG9vbAorIAorIGxpYnRvb2xpemU6ICQobGlidG9vbGl6ZV9pbikgJChjb25maWdfc3RhdHVzKQorIAkkKEFNX1ZfYXQpcm0gLWYgJyRAJworQEAgLTI4Nyw3ICsyODcsNyBAQCBsaWJ0b29saXplOiAkKGxpYnRvb2xpemVfaW4pICQoY29uZmlnX3N0YXR1cykKKyAjIFdlIHVzZWQgdG8gZG8gdGhpcyB3aXRoIGEgJ3N0YW1wLXZjbCcgZmlsZSwgYnV0IG5vbi1nbWFrZSBidWlsZHMKKyAjIHdvdWxkIHJlcnVuIGNvbmZpZ3VyZSBvbiBldmVyeSBpbnZvY2F0aW9uLCBzbyBub3cgd2UgbWFudWFsbHkKKyAjIGNoZWNrIHRoZSB2ZXJzaW9uIG51bWJlcnMgZnJvbSB0aGUgYnVpbGQgcnVsZSB3aGVuIG5lY2Vzc2FyeS4KKy1saWJ0b29sOiAkKGx0bWFpbl9zaCkgJChjb25maWdfc3RhdHVzKSAkKGRvdHZlcnNpb24pCisrJChob3N0X2FsaWFzKS1saWJ0b29sOiAkKGx0bWFpbl9zaCkgJChjb25maWdfc3RhdHVzKSAkKGRvdHZlcnNpb24pCisgCUAkKHJlYnVpbGQpOyBcCisgCWlmIHRlc3QgLWYgJyRAJzsgdGhlbiBcCisgCSAgZXZhbCBgJyQoU0VEKScgLW4gJy9ecGFja2FnZV9yZXZpc2lvbj0vcCcgJyRAJ2A7IFwKK0BAIC03MzEsMTIgKzczMSwxMiBAQCBURVNUU19FTlZJUk9OTUVOVCA9IE1BS0U9IiQoTUFLRSkiIENDPSIkKENDKSIgQ0ZMQUdTPSIkKENGTEFHUykiIFwKKyAKKyBCVUlMRENIRUNLX0VOVklST05NRU5UID0gX2x0X3BrZ2RhdGFkaXI9IiQoYWJzX3RvcF9zcmNkaXIpIiBcCisgCUxJQlRPT0xJWkU9IiQoYWJzX3RvcF9idWlsZGRpcikvbGlidG9vbGl6ZSIgXAorLQlMSUJUT09MPSIkKGFic190b3BfYnVpbGRkaXIpL2xpYnRvb2wiIFwKKysJTElCVE9PTD0iJChhYnNfdG9wX2J1aWxkZGlyKS8kKGhvc3RfYWxpYXMpLWxpYnRvb2wiIFwKKyAJdHN0X2FjbG9jYWxkaXI9IiQoYWJzX3RvcF9zcmNkaXIpL200IgorIAorIElOU1RBTExDSEVDS19FTlZJUk9OTUVOVCA9IFwKKyAJTElCVE9PTElaRT0iJChiaW5kaXIpL2BlY2hvIGxpYnRvb2xpemUgfCQoU0VEKSAnJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKSdgIiBcCistCUxJQlRPT0w9IiQoYmluZGlyKS9gZWNobyBsaWJ0b29sIHwkKFNFRCkgJyQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSknYCIgXAorKwlMSUJUT09MPSIkKGJpbmRpcikvYGVjaG8gJChob3N0X2FsaWFzKS1saWJ0b29sIHwkKFNFRCkgJyQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSknYCIgXAorIAlMVERMSU5DTD0iLUkkKGluY2x1ZGVkaXIpIiBcCisgCUxJQkxUREw9IiQobGliZGlyKS9saWJsdGRsLmxhIiBcCisgCXRzdF9hY2xvY2FsZGlyPSIkKGFjbG9jYWxkaXIpIgorZGlmZiAtLWdpdCBhL200L2xpYnRvb2wubTQgYi9tNC9saWJ0b29sLm00CistLS0gYS9tNC9saWJ0b29sLm00CisrKysgYi9tNC9saWJ0b29sLm00CitAQCAtODYsNyArODYsOCBAQCBfTFRfU0VUX09QVElPTlMoWyQwXSwgWyQxXSkKKyBMSUJUT09MX0RFUFM9JGx0bWFpbgorIAorICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCistTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisrTElCVE9PTD0nJCh0b3BfYnVpbGRkaXIpJworK0xJQlRPT0w9IiRMSUJUT09MLyR7aG9zdF9hbGlhc30tbGlidG9vbCIKKyBBQ19TVUJTVChMSUJUT09MKWRubAorIAorIF9MVF9TRVRVUAorQEAgLTE5OSw3ICsyMDAsNyBAQCBhaXgzKikKKyBlc2FjCisgCisgIyBHbG9iYWwgdmFyaWFibGVzOgorLW9maWxlPWxpYnRvb2wKKytvZmlsZT0ke2hvc3RfYWxpYXN9LWxpYnRvb2wKKyBjYW5fYnVpbGRfc2hhcmVkPXllcworIAorICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhICcuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3JlbmFtZS13aXRoLXN5c3Jvb3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvcmVuYW1lLXdpdGgtc3lzcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDJiMTEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3JlbmFtZS13aXRoLXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSwxNjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGlzIHBhdGNoIHJlbmFtZXMgdGhlIC0td2l0aC1zeXNyb290IG9wdGlvbiB0byAtLXdpdGgtbGlidG9vbC1zeXNyb290Cit0byBhdm9pZCBuYW1lc3BhY2UgY29uZmxpY3Qgd2l0aCBiaW51dGlscywgZ2NjIGFuZCBvdGhlciB0b29sY2hhaW4KK2NvbXBvbmVudHMuCisKK0kgYWxzbyByZXBvcnRlZCB0aGUgcHJvYmxlbSB0byBsaWJ0b29sIGhlcmUKKworaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2xpYnRvb2wvMjAxMC0xMC9tc2cwMDA0OC5odG1sCisKKy1LaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL200L2xpYnRvb2wubTQgYi9tNC9saWJ0b29sLm00CistLS0gYS9tNC9saWJ0b29sLm00CisrKysgYi9tNC9saWJ0b29sLm00CitAQCAtMTIxNSwyOCArMTIxNSwyOCBAQCBfTFRfREVDTChbXSwgW0VDSE9dLCBbMV0sIFtBbiBlY2hvIHByb2dyYW0gdGhhdCBwcm90ZWN0cyBiYWNrc2xhc2hlc10pCisgIyAtLS0tLS0tLS0tLS0tLS0tCisgQUNfREVGVU4oW19MVF9XSVRIX1NZU1JPT1RdLAorIFtBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzeXNyb290XSkKKy1BQ19BUkdfV0lUSChbc3lzcm9vdF0sCistW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtc3lzcm9vdEA8OkA9RElSQDo+QF0sCisrQUNfQVJHX1dJVEgoW2xpYnRvb2wtc3lzcm9vdF0sCisrW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtbGlidG9vbC1zeXNyb290QDw6QD1ESVJAOj5AXSwKKyAgIFtTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUiAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdAorICAgIGlmIG5vdCBzcGVjaWZpZWQpLl0pXSwKKy1bXSwgW3dpdGhfc3lzcm9vdD1ub10pCisrW10sIFt3aXRoX2xpYnRvb2xfc3lzcm9vdD1ub10pCisgCisgZG5sIGx0X3N5c3Jvb3Qgd2lsbCBhbHdheXMgYmUgcGFzc2VkIHVucXVvdGVkLiAgV2UgcXVvdGUgaXQgaGVyZQorIGRubCBpbiBjYXNlIHRoZSB1c2VyIHBhc3NlZCBhIGRpcmVjdG9yeSBuYW1lLgorIGx0X3N5c3Jvb3Q9CistY2FzZSAkd2l0aF9zeXNyb290IGluICMoCisrY2FzZSAkd2l0aF9saWJ0b29sX3N5c3Jvb3QgaW4gIygKKyAgeWVzKQorICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorICAgIGZpCisgICAgOzsgIygKKyAgLyopCistICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgIDs7ICMoCisgIG5vfCcnKQorICAgIDs7ICMoCisgICopCistICAgQUNfTVNHX1JFU1VMVChbJHdpdGhfc3lzcm9vdF0pCisrICAgQUNfTVNHX1JFU1VMVChbJHdpdGhfbGlidG9vbF9zeXNyb290XSkKKyAgICBBQ19NU0dfRVJST1IoW1RoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC5dKQorICAgIDs7CisgZXNhYworZGlmZiAtLWdpdCBhL3Rlc3RzL3N5c3Jvb3QuYXQgYi90ZXN0cy9zeXNyb290LmF0CistLS0gYS90ZXN0cy9zeXNyb290LmF0CisrKysgYi90ZXN0cy9zeXNyb290LmF0CitAQCAtNjQsNyArNjQsNyBAQCB3aGlsZSByZWFkIGZpbGU7IGRvCisgZG9uZV0pCisgCisgTERGTEFHUz0iJExERkxBR1MgLS1zeXNyb290PSRzeXNyb290IC1uby11bmRlZmluZWQiCistY29uZmlndXJlX29wdGlvbnM9IiRjb25maWd1cmVfb3B0aW9ucyAtLXdpdGgtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorK2NvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorIAorICM/Pz8KKyBpZiB0ZXN0IFBBVEggPSAiJHNobGlicGF0aF92YXIiOyB0aGVuCitAQCAtMTE0LDcgKzExNCw3IEBAIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorIEFDX1BST0dfQ0MKKyBBQ19DT05GSUdfU1JDRElSKFtsaWIyLmNdKQorIExUX0lOSVQKKy1zeXNyb290PSR3aXRoX3N5c3Jvb3QKKytzeXNyb290PSR3aXRoX2xpYnRvb2xfc3lzcm9vdAorIEFDX1NVQlNUKFtzeXNyb290XSkKKyBBQ19PVVRQVVQoTWFrZWZpbGUpCisgXV0pCitAQCAtMTU1LDcgKzE1NSw3IEBAIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorIEFDX1BST0dfQ0MKKyBBQ19DT05GSUdfU1JDRElSKFtwcm9nLmNdKQorIExUX0lOSVQKKy1zeXNyb290PSR3aXRoX3N5c3Jvb3QKKytzeXNyb290PSR3aXRoX2xpYnRvb2xfc3lzcm9vdAorIEFDX1NVQlNUKFtzeXNyb290XSkKKyBBQ19PVVRQVVQoTWFrZWZpbGUpCisgXV0pCitkaWZmIC0tZ2l0IGEvdGVzdHMvdGVzdHN1aXRlIGIvdGVzdHMvdGVzdHN1aXRlCistLS0gYS90ZXN0cy90ZXN0c3VpdGUKKysrKyBiL3Rlc3RzL3Rlc3RzdWl0ZQorQEAgLTQ4OTQ1LDcgKzQ4OTQ1LDcgQEAgJGF0X3RyYWNlb247IH0KKyAKKyAKKyBMREZMQUdTPSIkTERGTEFHUyAtLXN5c3Jvb3Q9JHN5c3Jvb3QgLW5vLXVuZGVmaW5lZCIKKy1jb25maWd1cmVfb3B0aW9ucz0iJGNvbmZpZ3VyZV9vcHRpb25zIC0td2l0aC1zeXNyb290PSRzeXNyb290IC0tcHJlZml4PSRwcmVmaXgiCisrY29uZmlndXJlX29wdGlvbnM9IiRjb25maWd1cmVfb3B0aW9ucyAtLXdpdGgtbGlidG9vbC1zeXNyb290PSRzeXNyb290IC0tcHJlZml4PSRwcmVmaXgiCisgCisgIz8/PworIGlmIHRlc3QgUEFUSCA9ICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KK0BAIC00OTE1NCw3ICs0OTE1NCw3IEBAIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorIEFDX1BST0dfQ0MKKyBBQ19DT05GSUdfU1JDRElSKFtsaWIyLmNdKQorIExUX0lOSVQKKy1zeXNyb290PSR3aXRoX3N5c3Jvb3QKKytzeXNyb290PSR3aXRoX2xpYnRvb2xfc3lzcm9vdAorIEFDX1NVQlNUKFtzeXNyb290XSkKKyBBQ19PVVRQVVQoTWFrZWZpbGUpCisgX0FURU9GCitAQCAtNDkzNDIsNyArNDkzNDIsNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBQ19QUk9HX0NDCisgQUNfQ09ORklHX1NSQ0RJUihbcHJvZy5jXSkKKyBMVF9JTklUCistc3lzcm9vdD0kd2l0aF9zeXNyb290Cisrc3lzcm9vdD0kd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBBQ19TVUJTVChbc3lzcm9vdF0pCisgQUNfT1VUUFVUKE1ha2VmaWxlKQorIF9BVEVPRgorQEAgLTQ5Njk0LDcgKzQ5Njk0LDcgQEAgJGF0X3RyYWNlb247IH0KKyAKKyAKKyBMREZMQUdTPSIkTERGTEFHUyAtLXN5c3Jvb3Q9JHN5c3Jvb3QgLW5vLXVuZGVmaW5lZCIKKy1jb25maWd1cmVfb3B0aW9ucz0iJGNvbmZpZ3VyZV9vcHRpb25zIC0td2l0aC1zeXNyb290PSRzeXNyb290IC0tcHJlZml4PSRwcmVmaXgiCisrY29uZmlndXJlX29wdGlvbnM9IiRjb25maWd1cmVfb3B0aW9ucyAtLXdpdGgtbGlidG9vbC1zeXNyb290PSRzeXNyb290IC0tcHJlZml4PSRwcmVmaXgiCisgCisgIz8/PworIGlmIHRlc3QgUEFUSCA9ICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KK0BAIC00OTkwMyw3ICs0OTkwMyw3IEBAIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorIEFDX1BST0dfQ0MKKyBBQ19DT05GSUdfU1JDRElSKFtsaWIyLmNdKQorIExUX0lOSVQKKy1zeXNyb290PSR3aXRoX3N5c3Jvb3QKKytzeXNyb290PSR3aXRoX2xpYnRvb2xfc3lzcm9vdAorIEFDX1NVQlNUKFtzeXNyb290XSkKKyBBQ19PVVRQVVQoTWFrZWZpbGUpCisgX0FURU9GCitAQCAtNTAwOTEsNyArNTAwOTEsNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBQ19QUk9HX0NDCisgQUNfQ09ORklHX1NSQ0RJUihbcHJvZy5jXSkKKyBMVF9JTklUCistc3lzcm9vdD0kd2l0aF9zeXNyb290Cisrc3lzcm9vdD0kd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBBQ19TVUJTVChbc3lzcm9vdF0pCisgQUNfT1VUUFVUKE1ha2VmaWxlKQorIF9BVEVPRgorQEAgLTUwNDQzLDcgKzUwNDQzLDcgQEAgJGF0X3RyYWNlb247IH0KKyAKKyAKKyBMREZMQUdTPSIkTERGTEFHUyAtLXN5c3Jvb3Q9JHN5c3Jvb3QgLW5vLXVuZGVmaW5lZCIKKy1jb25maWd1cmVfb3B0aW9ucz0iJGNvbmZpZ3VyZV9vcHRpb25zIC0td2l0aC1zeXNyb290PSRzeXNyb290IC0tcHJlZml4PSRwcmVmaXgiCisrY29uZmlndXJlX29wdGlvbnM9IiRjb25maWd1cmVfb3B0aW9ucyAtLXdpdGgtbGlidG9vbC1zeXNyb290PSRzeXNyb290IC0tcHJlZml4PSRwcmVmaXgiCisgCisgIz8/PworIGlmIHRlc3QgUEFUSCA9ICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KK0BAIC01MDY1Miw3ICs1MDY1Miw3IEBAIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorIEFDX1BST0dfQ0MKKyBBQ19DT05GSUdfU1JDRElSKFtsaWIyLmNdKQorIExUX0lOSVQKKy1zeXNyb290PSR3aXRoX3N5c3Jvb3QKKytzeXNyb290PSR3aXRoX2xpYnRvb2xfc3lzcm9vdAorIEFDX1NVQlNUKFtzeXNyb290XSkKKyBBQ19PVVRQVVQoTWFrZWZpbGUpCisgX0FURU9GCitAQCAtNTA4NDAsNyArNTA4NDAsNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBQ19QUk9HX0NDCisgQUNfQ09ORklHX1NSQ0RJUihbcHJvZy5jXSkKKyBMVF9JTklUCistc3lzcm9vdD0kd2l0aF9zeXNyb290Cisrc3lzcm9vdD0kd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBBQ19TVUJTVChbc3lzcm9vdF0pCisgQUNfT1VUUFVUKE1ha2VmaWxlKQorIF9BVEVPRgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3RyYWlsaW5nc2xhc2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvdHJhaWxpbmdzbGFzaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODgyNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3RyYWlsaW5nc2xhc2gucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0EgY29tbWFuZCBsaWtlIC9iaW4vc2ggLi4vLi4vaTU4Ni1wb2t5LWxpbnV4LWxpYnRvb2wgICAtLW1vZGU9aW5zdGFsbCAvdXNyL2Jpbi9pbnN0YWxsIC1jICAgZ2NrLXJvb3RzLXN0b3JlLXN0YW5kYWxvbmUubGEgJy9tZWRpYS9kYXRhMS9idWlsZHMvcG9reTEvdG1wL3dvcmsvY29yZTItcG9reS1saW51eC9nbm9tZS1rZXlyaW5nLTIuMjYuMS1yMS9pbWFnZS91c3IvbGliL2dub21lLWtleXJpbmcvc3RhbmRhbG9uZS8nIGZhaWxzIChlLmcuIGdub21lLWtleXJpbmcgb3IgcHVsc2VhdWRpbykKKworVGhpcyBpcyBiZWNhdXNlIGxpYmRpciBoYXMgYSB0cmFpbGluZyBzbGFzaCB3aGljaCBicmVha3MgdGhlIGNvbXBhcmlzaW9uLgorCitSUCAyLzEvMTAKKworTWVyZ2VkIGEgcGF0Y2ggcmVjZWl2ZWQgZnJvbSBHYXJ5IFRob21hcyA8Z2FyeUBtbGJhc3NvYy5jb20+CisKK0RhdGU6IDIwMTAvMDcvMTIKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK1VwZGF0ZWQgYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2x0bWFpbi5pbiBiL2J1aWxkLWF1eC9sdG1haW4uaW4KKy0tLSBhL2J1aWxkLWF1eC9sdG1haW4uaW4KKysrKyBiL2J1aWxkLWF1eC9sdG1haW4uaW4KK0BAIC0yMzU2LDggKzIzNTYsMTUgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAJZnVuY19hcHBlbmQgZGlyICIkb2JqZGlyIgorIAorIAlpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisrICAgICAgIyBTdHJpcCBhbnkgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgZGVzdGluYXRpb24uCisrICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkbGliZGlyIgorKyAgICAgIGRlc3RsaWJkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKworKyAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGRlc3RkaXIiCisrICAgICAgc19kZXN0ZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysKKyAJICAjIERldGVybWluZSB0aGUgcHJlZml4IHRoZSB1c2VyIGhhcyBhcHBsaWVkIHRvIG91ciBmdXR1cmUgZGlyLgorLQkgIGluc3RfcHJlZml4X2Rpcj1gJEVDSE8gIiRkZXN0ZGlyIiB8ICRTRUQgLWUgInMlJGxpYmRpclwkJSUiYAorKwkgIGluc3RfcHJlZml4X2Rpcj1gJEVDSE8gIlgkc19kZXN0ZGlyIiB8ICRYc2VkIC1lICJzJSRkZXN0bGliZGlyXCQlJSJgCisgCisgCSAgIyBEb24ndCBhbGxvdyB0aGUgdXNlciB0byBwbGFjZSB1cyBvdXRzaWRlIG9mIG91ciBleHBlY3RlZAorIAkgICMgbG9jYXRpb24gYi9jIHRoaXMgcHJldmVudHMgZmluZGluZyBkZXBlbmRlbnQgbGlicmFyaWVzIHRoYXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC91bndpbmQtb3B0LXBhcnNpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvdW53aW5kLW9wdC1wYXJzaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MzNiYzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvdW53aW5kLW9wdC1wYXJzaW5nLnBhdGNoCkBAIC0wLDAgKzEsMTc5IEBACitDdXQgYW5kIHBhc3RlIHRoZSBwaWVjZXMgb2YgYnVpbGQtYXV4L29wdGlvbnMtcGFyc2VyIGlubGluZSBpbnRvIHRoZSBtYWluCitsdG1haW4uc2ggY29kZS4gVGhpcyByZW1vdmVzIGEgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gY2F1c2VkIGJ5IHRoZSAKK3JlcGVhdGVkIGNhbGxzIHRvIGZ1bmNfcXVvdGVfZm9yX2V2YWwsIHRoZSBtZWNoYW5pc20gZnVuY2xpYiB1c2VzCit0byBjb25zdHJ1Y3QgdGhlIGZ1bmN0aW9ucyB1c2VkIGZvciBvcHRpb24gcGFyc2luZy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW0JlaW5nIGRpc2N1c3NlZCBvbiBtYWlsaW5nIGxpc3QgRmViIDIwMTVdCisKK2RpZmYgLS1naXQgYS9idWlsZC1hdXgvbHRtYWluLmluIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgoraW5kZXggZDVjZjA3YS4uMGY1NDMwMyAxMDA2NDQKKy0tLSBhL2J1aWxkLWF1eC9sdG1haW4uaW4KKysrKyBiL2J1aWxkLWF1eC9sdG1haW4uaW4KK0BAIC0zNDIsMTEgKzM0MiwxNSBAQCBfTFRfRU9GCisgIyBsaWJ0b29sX29wdGlvbnNfcHJlcCBbQVJHXS4uLgorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIFByZXBhcmF0aW9uIGZvciBvcHRpb25zIHBhcnNlZCBieSBsaWJ0b29sLgorLWxpYnRvb2xfb3B0aW9uc19wcmVwICgpCisteworKyNsaWJ0b29sX29wdGlvbnNfcHJlcCAoKQorKyN7CisgICAgICRkZWJ1Z19tb2RlCisgCisgICAgICMgT3B0aW9uIGRlZmF1bHRzOgorKyAgICBvcHRfdmVyYm9zZT1mYWxzZQorKyAgICBvcHRfd2FybmluZ190eXBlcz0KKysKKysgICAgIyBPcHRpb24gZGVmYXVsdHM6CisgICAgIG9wdF9jb25maWc9ZmFsc2UKKyAgICAgb3B0X2Rsb3Blbj0KKyAgICAgb3B0X2RyeV9ydW49ZmFsc2UKK0BAIC0zODIsMTkgKzM4NiwxNCBAQCBsaWJ0b29sX29wdGlvbnNfcHJlcCAoKQorICAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIHVuaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisgICAgICAgOzsKKyAgICAgZXNhYworLQorLSAgICAjIFBhc3MgYmFjayB0aGUgbGlzdCBvZiBvcHRpb25zLgorLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQorLSAgICBsaWJ0b29sX29wdGlvbnNfcHJlcF9yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CistfQorLWZ1bmNfYWRkX2hvb2sgZnVuY19vcHRpb25zX3ByZXAgbGlidG9vbF9vcHRpb25zX3ByZXAKKysjfQorIAorIAorICMgbGlidG9vbF9wYXJzZV9vcHRpb25zIFtBUkddLi4uCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIFByb3ZpZGUgaGFuZGxpbmcgZm9yIGxpYnRvb2wgc3BlY2lmaWMgb3B0aW9ucy4KKy1saWJ0b29sX3BhcnNlX29wdGlvbnMgKCkKKy17CisrI2xpYnRvb2xfcGFyc2Vfb3B0aW9ucyAoKQorKyN7CisgICAgICRkZWJ1Z19jbWQKKyAKKyAgICAgIyBQZXJmb3JtIG91ciBvd24gbG9vcCB0byBjb25zdW1lIGFzIG1hbnkgb3B0aW9ucyBhcyBwb3NzaWJsZSBpbgorQEAgLTQ3NCwyOSArNDczLDkwIEBAIGxpYnRvb2xfcGFyc2Vfb3B0aW9ucyAoKQorICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0IgorICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgCistCSMgQW4gb3B0aW9uIG5vdCBoYW5kbGVkIGJ5IHRoaXMgaG9vayBmdW5jdGlvbjoKKy0gICAgICAgICopCQlzZXQgZHVtbXkgIiRfR19vcHQiICR7MSsiJEAifTsJc2hpZnQ7IGJyZWFrICA7OworLSAgICAgIGVzYWMKKy0gICAgZG9uZQorKyAgICAgICAgLS1kZWJ1Z3wteCkgICBkZWJ1Z19jbWQ9J3NldCAteCcKKysgICAgICAgICAgICAgICAgICAgICAgZnVuY19lY2hvICJlbmFibGluZyBzaGVsbCB0cmFjZSBtb2RlIgorKyAgICAgICAgICAgICAgICAgICAgICAkZGVidWdfY21kCisrICAgICAgICAgICAgICAgICAgICAgIDs7CisgCisrICAgICAgICAtLW5vLXdhcm5pbmdzfC0tbm8td2FybmluZ3wtLW5vLXdhcm4pCisrICAgICAgICAgICAgICAgICAgICAgIHNldCBkdW1teSAtLXdhcm5pbmdzIG5vbmUgJHsxKyIkQCJ9CisrICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisrCQkgICAgICA7OworIAorLSAgICAjIHNhdmUgbW9kaWZpZWQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGZvciBjYWxsZXIKKy0gICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKy0gICAgbGlidG9vbF9wYXJzZV9vcHRpb25zX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKy19CistZnVuY19hZGRfaG9vayBmdW5jX3BhcnNlX29wdGlvbnMgbGlidG9vbF9wYXJzZV9vcHRpb25zCisrICAgICAgICAtLXdhcm5pbmdzfC0td2FybmluZ3wtVykKKysgICAgICAgICAgICAgICAgICAgICAgdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkX0dfb3B0ICYmIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiAkd2FybmluZ19jYXRlZ29yaWVzICQxIiBpbgorKyAgICAgICAgICAgICAgICAgICAgICAgICoiICQxICIqKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0cmFpbGluZyBzcGFjZSBwcmV2ZW50cyBtYXRjaGluZyBsYXN0ICQxIGFib3ZlCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZF91bmlxIG9wdF93YXJuaW5nX3R5cGVzICIgJDEiCisrICAgICAgICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgICAgICAgICphbGwpCisrICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfd2FybmluZ190eXBlcz0kd2FybmluZ19jYXRlZ29yaWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgICAgICAgICpub25lKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3dhcm5pbmdfdHlwZXM9bm9uZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ19mdW5jPToKKysgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgICAgICAgKmVycm9yKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3dhcm5pbmdfdHlwZXM9JHdhcm5pbmdfY2F0ZWdvcmllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ19mdW5jPWZ1bmNfZmF0YWxfZXJyb3IKKysgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgICAgICAgKikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIHdhcm5pbmcgY2F0ZWdvcnk6ICckMSciCisrICAgICAgICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisrICAgICAgICAgICAgICAgICAgICAgIDs7CisrCisrICAgICAgICAtLXZlcmJvc2V8LXYpIG9wdF92ZXJib3NlPTogOzsKKysgICAgICAgIC0tdmVyc2lvbikgICAgZnVuY192ZXJzaW9uIDs7CisrICAgICAgICAtXD98LWgpICAgICAgIGZ1bmNfdXNhZ2UgOzsKKysgICAgICAgIC0taGVscCkgICAgICAgZnVuY19oZWxwIDs7CisrCisrCSMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnMgKHBsdWdpbnMgbWF5IG5lZWQgdGhpcyk6CisrCS0tKj0qKSAgICAgICAgZnVuY19zcGxpdF9lcXVhbHMgIiRfR19vcHQiCisrCSAgICAgICAgICAgICAgc2V0IGR1bW15ICIkZnVuY19zcGxpdF9lcXVhbHNfbGhzIiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAiJGZ1bmNfc3BsaXRfZXF1YWxzX3JocyIgJHsxKyIkQCJ9CisrICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisrICAgICAgICAgICAgICAgICAgICAgIDs7CisrCisrICAgICAgICMgU2VwYXJhdGUgb3B0YXJncyB0byBzaG9ydCBvcHRpb25zOgorKyAgICAgICAgLVcqKQorKyAgICAgICAgICAgICAgICAgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKKysgICAgICAgICAgICAgICAgICAgICAgc2V0IGR1bW15ICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmciICR7MSsiJEAifQorKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorKyAgICAgICAgICAgICAgICAgICAgICA7OworKworKyAgICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9uczoKKysgICAgICAgIC1cPyp8LWgqfC12KnwteCopCisrICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkX0dfb3B0IgorKyAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAiLSRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmciICR7MSsiJEAifQorKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorKyAgICAgICAgICAgICAgICAgICAgICA7OworKworKyAgICAgICAgLS0pICAgICAgICAgICBicmVhayA7OworKyAgICAgICAgLSopICAgICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXNlZCBvcHRpb246ICckX0dfb3B0JyIgOzsKKysgICAgICAgICopICAgICAgICAgICAgc2V0IGR1bW15ICIkX0dfb3B0IiAkezErIiRAIn07IHNoaWZ0OyBicmVhayA7OworKyAgICAgIGVzYWMKKysgICAgZG9uZQorKyN9CisgCisrIyBEaXNwbGF5IGFsbCB3YXJuaW5ncyBpZiAtVyB3YXMgbm90IGdpdmVuLgorK3Rlc3QgLW4gIiRvcHRfd2FybmluZ190eXBlcyIgfHwgb3B0X3dhcm5pbmdfdHlwZXM9IiAkd2FybmluZ19jYXRlZ29yaWVzIgorIAorIAorICMgbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zIFtBUkddLi4uCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIFBlcmZvcm0gYW55IHNhbml0eSBjaGVja3Mgb24gb3B0aW9uIHNldHRpbmdzIGFuZC9vciB1bmNvbnN1bWVkCisgIyBhcmd1bWVudHMuCistbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zICgpCisteworKyNsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMgKCkKKysjeworICAgICAjIHNhdmUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudAorICAgICBpZiB0ZXN0IDAgLWx0ICQjOyB0aGVuCistICAgICAgbm9ub3B0PSQxCisrICAgICAgbm9ub3B0PSRfR19vcHQKKyAgICAgICBzaGlmdAorICAgICBmaQorIAorQEAgLTUzNywyMCArNTk3LDEwIEBAIGxpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucyAoKQorICAgICAgIGdlbmVyaWNfaGVscD0kaGVscAorICAgICAgIGhlbHA9IlRyeSAnJHByb2duYW1lIC0taGVscCAtLW1vZGU9JG9wdF9tb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgIH0KKysjfQorIAorLSAgICAjIFBhc3MgYmFjayB0aGUgdW5wYXJzZWQgYXJndW1lbnQgbGlzdAorLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQorLSAgICBsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnNfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorLX0KKy1mdW5jX2FkZF9ob29rIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyBsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMKKy0KKy0KKy0jIFByb2Nlc3Mgb3B0aW9ucyBhcyBlYXJseSBhcyBwb3NzaWJsZSBzbyB0aGF0IC0taGVscCBhbmQgLS12ZXJzaW9uCistIyBjYW4gcmV0dXJuIHF1aWNrbHkuCistZnVuY19vcHRpb25zICR7MSsiJEAifQorLWV2YWwgc2V0IGR1bW15ICIkZnVuY19vcHRpb25zX3Jlc3VsdCI7IHNoaWZ0CistCistCisrIyBCYWlsIGlmIHRoZSBvcHRpb25zIHdlcmUgc2NyZXdlZCEKKyskZXhpdF9jbWQgJEVYSVRfRkFJTFVSRQorIAorICMjIC0tLS0tLS0tLS0tICMjCisgIyMgICAgTWFpbi4gICAgIyMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC91c2Utc3lzcm9vdC1pbi1saWJwYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3VzZS1zeXNyb290LWluLWxpYnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFmOTlmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC91c2Utc3lzcm9vdC1pbi1saWJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXaGVuIHVzaW5nIHN5c3Jvb3Qgd2Ugc2hvdWxkIGFwcGVuZCBpdCB0byBsaWJkaXIsIHdoaWNoIGlzIGhlbHBmdWwgaW4KK2Nyb3NzIGJ1aWxkcyBhcyB0aGUgc3lzdGVtIGlzIHN0YWdlZCBpbiB0aGUgc3lzcm9vdC4gRm9yIG5vcm1hbCBidWlsZHMsCitpLmUuIHdoZW4gbHRfc3lzcm9vdCBpcyBub3Qgc2V0LCBpdCB3aWxsIHN0aWxsIGJlaGF2ZSB0aGUgc2FtZSBhbmQgYWRkCistTC91c3IvbGliIHRvIHRoZSByZWxpbmsgY29tbWFuZC4KKworLUtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9sdG1haW4uaW4gYi9idWlsZC1hdXgvbHRtYWluLmluCistLS0gYS9idWlsZC1hdXgvbHRtYWluLmluCisrKysgYi9idWlsZC1hdXgvbHRtYWluLmluCitAQCAtNjQyMSw3ICs2NDIxLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgZmkKKyAJICAgIGVsc2UKKyAJICAgICAgIyBXZSBjYW5ub3Qgc2VlbSB0byBoYXJkY29kZSBpdCwgZ3Vlc3Mgd2UnbGwgZmFrZSBpdC4KKy0JICAgICAgYWRkX2Rpcj0tTCRsaWJkaXIKKysJICAgICAgYWRkX2Rpcj0iLUwkbHRfc3lzcm9vdCRsaWJkaXIiCisgCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKyAJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKyAJCWNhc2UgJGxpYmRpciBpbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sXzIuNC42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sXzIuNC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZjFiMmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2xfMi40LjYuYmIKQEAgLTAsMCArMSwyNiBAQAorcmVxdWlyZSBsaWJ0b29sLSR7UFZ9LmluYworCitSREVQRU5EU18ke1BOfSArPSAiYmFzaCIKKworIworIyBXZSB3YW50IHRoZSByZXN1bHRzIG9mIGxpYnRvb2wtY3Jvc3MgcHJlc2VydmVkIC0gZG9uJ3Qgc3RhZ2UgYW55dGhpbmcgb3Vyc2VsdmVzLgorIworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJsaWJ0b29sX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgICAgICBzZWQgLWUgJ3NALS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH1AQGcnIFwKKyAgICAgICAgICAgIC1lICdzQCR7U1RBR0lOR19ESVJfSE9TVH1AQGcnIFwKKyAgICAgICAgICAgIC1lICdzQF5cKHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iXCkuKkBcMSR7bGliZGlyfSAke2Jhc2VfbGliZGlyfSJAJyBcCisgICAgICAgICAgICAtZSAnc0BeXChjb21waWxlcl9saWJfc2VhcmNoX2RpcnM9IlwpLipAXDEke2xpYmRpcn0gJHtiYXNlX2xpYmRpcn0iQCcgXAorICAgICAgICAgICAgLWUgJ3NAXlwoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSJcKS4qQFwxJHtsaWJkaXJ9ICR7YmFzZV9saWJkaXJ9IkAnIFwKKyAgICAgICAgICAgIC1lICdzQF5cKHByZWRlcF9vYmplY3RzPSJcKS4qQFwxIkAnIFwKKyAgICAgICAgICAgIC1lICdzQF5cKHBvc3RkZXBfb2JqZWN0cz0iXCkuKkBcMSJAJyBcCisgICAgICAgICAgICAtaSAke0R9JHtiaW5kaXJ9L2xpYnRvb2wKK30KKworbGlidG9vbF9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCXJtIC1yZiAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcn0vKgorCXJtIC1yZiAke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9L2FjbG9jYWwvKgorCXJtIC1yZiAke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4LyoKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9uYXRpdmVzZGstbGlidG9vbF8yLjQuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbmF0aXZlc2RrLWxpYnRvb2xfMi40LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA4ZWFkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbmF0aXZlc2RrLWxpYnRvb2xfMi40LjYuYmIKQEAgLTAsMCArMSwzMSBAQAorcmVxdWlyZSBsaWJ0b29sLSR7UFZ9LmluYworCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9saWJ0b29sOiIKKworU1JDX1VSSSArPSAiZmlsZTovL3ByZWZpeC5wYXRjaCIKK1NSQ19VUkkgKz0gImZpbGU6Ly9maXhpbnN0YWxsLnBhdGNoIgorCitpbmhlcml0IG5hdGl2ZXNkaworCitTID0gIiR7V09SS0RJUn0vbGlidG9vbC0ke1BWfSIKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2xpYnRvb2wvKiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgUmVtb3ZlIGFueSBleGlzdGluZyBsaWJ0b29sIG00IHNpbmNlIG9sZCBzdGFsZSB2ZXJzaW9ucyB3b3VsZCBicmVhaworCSMgYW55IHVwZ3JhZGUKKwlybSAtZiAke1NUQUdJTkdfREFUQURJUn0vYWNsb2NhbC9saWJ0b29sLm00CisJcm0gLWYgJHtTVEFHSU5HX0RBVEFESVJ9L2FjbG9jYWwvbHQqLm00Cit9CisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSAke0hPU1RfU1lTfS1saWJ0b29sICR7RH0ke2JpbmRpcn0vCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAibGlidG9vbG5hdGl2ZXNka19zeXNyb290X3ByZXByb2Nlc3MiCisKK2xpYnRvb2xuYXRpdmVzZGtfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vCisJaW5zdGFsbCAtbSA3NTUgJHtEfSR7YmluZGlyfS8ke0hPU1RfU1lTfS1saWJ0b29sICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vJHtIT1NUX1NZU30tbGlidG9vbAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMtbmF0aXZlXzAuOS42OS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzLW5hdGl2ZV8wLjkuNjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhOTBmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzLW5hdGl2ZV8wLjkuNjkuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJDb252ZXJ0IExpbnV4RG9jIFNHTUwgc291cmNlIGludG8gb3RoZXIgZm9ybWF0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly9wYWNrYWdlcy5kZWJpYW4ub3JnL2xpbnV4ZG9jLXRvb2xzIgorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNzdlZjY0ZWMzYWMyNTdmYjBkNzg2NTMxY2YyNjkzMSIKKworREVQRU5EUyA9ICJncm9mZi1uYXRpdmUgb3BlbmphZGUtbmF0aXZlIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9sL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzXyR7UFZ9Lm9yaWcudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfc2dtbDJydGYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZV90eHRfZG9jLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfdGV4X2RvYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX2R2aXBzX2RvYy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjFkMTNkNTAwOTE4YTdhMTQ1YjBlZGMyZjE2ZjYxZGQxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcxMDNmYWNlZTE4YTJlYTk3MTg2Y2E0NTlkNzQzZDIyZjdmODlhZDRiNWNkMWRmZDFjMzRmODNkNmJmZDQxMDEiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBuYXRpdmUKKworZG9fY29uZmlndXJlICgpIHsKKwlvZV9ydW5jb25mCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyAnVE1QRElSPSR7VH0nIGluc3RhbGwKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfZHZpcHNfZG9jLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV9kdmlwc19kb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkwYjM2NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfZHZpcHNfZG9jLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Rpc2FibGUgYnVpbGRpbmcgZG9jdW1lbnRhdGlvbiB3aGljaCByZXF1aXJlcyB0aGUgZHZpcHMgdXRpbGl0eS4KK1RoaXMgcGF0Y2ggc2hvdWxkIGJlIGRyb3BwZWQgb25jZSB3ZSBpbmNsdWRlIGEgbmF0aXZlIHZlcnNpb24gb2YKK2R2aXBzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW090aGVyXQorVGVtcG9yYXJ5IHdvcmthcm91bmQgd2hpY2ggZGlzYWJsZXMgZG9jdW1lbnRhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLXVyTiBsaW51eGRvYy10b29scy0wLjkuNjYub3JpZy9kb2MvTWFrZWRvYy5zaCBsaW51eGRvYy10b29scy0wLjkuNjYvZG9jL01ha2Vkb2Muc2gKKy0tLSBsaW51eGRvYy10b29scy0wLjkuNjYub3JpZy9kb2MvTWFrZWRvYy5zaAkyMDExLTAyLTI1IDE1OjI2OjQxLjE0MjkxNzc4MiAtMDgwMAorKysrIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni9kb2MvTWFrZWRvYy5zaAkyMDExLTAyLTI1IDE1OjI3OjI1LjE0MTkxNzQ3MiAtMDgwMAorQEAgLTUyLDEzICs1MiwxMyBAQAorICMJJFRNUERJUi9zZ21sMmxhdGV4IC0tcGFzcz0iXHVzZXBhY2thZ2V7dGltZXN9IiAtbyBkdmkgLi9ndWlkZQorICNmaQorIAorLWlmIFsgLW4gImB3aGljaCBkdmlwc2AiIF07IHRoZW4KKy0JZWNobyAiICAgKyBkdmlwcyIgPiYyCistCWR2aXBzIC10IGxldHRlciAtbyAuL2d1aWRlLnBzIC4vZ3VpZGUuZHZpCistCWlmIFsgLW4gImB3aGljaCBnemlwYCIgLWEgLWYgLi9ndWlkZS5wcyBdOyB0aGVuCistCQlnemlwIC1mTiAuL2d1aWRlLnBzCistCWZpCistZmkKKysjaWYgWyAtbiAiYHdoaWNoIGR2aXBzYCIgXTsgdGhlbgorKyMJZWNobyAiICAgKyBkdmlwcyIgPiYyCisrIwlkdmlwcyAtdCBsZXR0ZXIgLW8gLi9ndWlkZS5wcyAuL2d1aWRlLmR2aQorKyMJaWYgWyAtbiAiYHdoaWNoIGd6aXBgIiAtYSAtZiAuL2d1aWRlLnBzIF07IHRoZW4KKysjCQlnemlwIC1mTiAuL2d1aWRlLnBzCisrIwlmaQorKyNmaQorIAorIAorIGVjaG8gIi0gQnVpbGRpbmcgaW5mbyBkb2NzIiA+JjIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfc2dtbDJydGYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3NnbWwycnRmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYzhhOGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3NnbWwycnRmLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gNzU2ZjIwZTcwYTk3ZWUyZGVhOWIzMmMwOTU1ZWFiZmMyN2YyOWJlMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJlaSBEaW51IDxhbmRyZWkuYWRyaWFueC5kaW51QGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjkgTWF5IDIwMTMgMTY6NTA6MTcgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gVGhlIGJ1aWxkIG9mIHNnbWwycnRmIGlzIHByb2JsZW1hdGljIGR1ZSB0byB0aGUgd2F5IGl0IHdhbnRzCisgdG8gbGluayB0byBhIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb24gb2YgZmxleC4gRmxleCBvbmx5Cisgc2hpcHMgd2l0aCBhIHN0YXRpYyBsaWIuIFJhdGhlciB0aGFuIGRpdmVyZ2luZyBmcm9tCisgdXBzdHJlYW0gZmxleCwgc2ltcGx5IHNraXAgYnVpbGRpbmcgdGhpcyB1bi1uZWVkZWQgdXRpbGl0eS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPdGhlcl0KK1dvcmthcm91bmQgd2hpY2ggZGlzYWJsZXMgYSBmZWF0dXJlLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBEaW51IDxhbmRyZWkuYWRyaWFueC5kaW51QGludGVsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgICAxMiArKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggMzU5ZjE0ZS4uZmMwNDAyMCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTQwLDcgKzQwLDcgQEAgcGVybDVsaWJfZGRpciAgICAgID0gJChERVNURElSKSQocGVybDVsaWJkaXIpCisgcGtnZGF0YV9kZGlyICAgICAgID0gJChERVNURElSKSQocGtnZGF0YWRpcikKKyB0ZXhfZGRpciAgICAgICAgICAgPSAkKERFU1RESVIpJCh0ZXhkaXIpCisgCistcHJvZ3MgICAgOj0gc2dtbDJodG1sIHNnbWwyaW5mbyBzZ21sMmxhdGV4IHNnbWwybHl4IHNnbWwycnRmIHNnbWwydHh0IHNnbWxjaGVjaworK3Byb2dzICAgIDo9IHNnbWwyaHRtbCBzZ21sMmluZm8gc2dtbDJsYXRleCBzZ21sMmx5eCBzZ21sMnR4dCBzZ21sY2hlY2sKKyAKKyBQUk9GSUxFICA9CisgSU5DTFVERSAgPQorQEAgLTcxLDkgKzcxLDkgQEAgZW5kaWYKKyAJKCBjZCBzZ21scHJlIDsgXAorIAkgICQoTUFLRSkgIENGTEFHUz0iJChDRkxBR1MpIiBMREZMQUdTPSIkKExERkxBR1MpIiBMRVg9ZmxleCBzZ21scHJlIHx8IGV4aXQgLTEgKQorIAorLQlAZWNobyAiQ29tcGlsaW5nIFJURiBjb252ZXJzaW9uIHRvb2xzIChpbiBydGYtZml4LykuLi4iCistCSggY2QgcnRmLWZpeCA7IFwKKy0JICAkKE1BS0UpIENGTEFHUz0iJChDRkxBR1MpIiBMREZMQUdTPSIkKExERkxBR1MpIiB8fCBleGl0IC0xICkKKysjCUBlY2hvICJDb21waWxpbmcgUlRGIGNvbnZlcnNpb24gdG9vbHMgKGluIHJ0Zi1maXgvKS4uLiIKKysjCSggY2QgcnRmLWZpeCA7IFwKKysjCSAgJChNQUtFKSBDRkxBR1M9IiQoQ0ZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgfHwgZXhpdCAtMSApCisgCisgCUBlY2hvICJtYWtpbmcgbWFuIHBhZ2VzIGluIGdlbm1hbiAuLi4iCisgCWlmIFsgISAtZCBnZW5tYW4gXTsgdGhlbiBta2RpciBnZW5tYW4gOyBmaQorQEAgLTExNyw3ICsxMTcsNyBAQCBlbmRpZgorIAorICMgICAgLS0gSW5zdGFsbCBhdXhpbGlhcnkgcHJvZ3JhbXMKKyAJbWtkaXIgLXAgJChhdXhiaW5fZGRpcikKKy0JZm9yIGlpIGluIHNnbWxwcmUvc2dtbHByZSBydGYtZml4L3J0ZjJydGY7IGRvIFwKKysJZm9yIGlpIGluIHNnbWxwcmUvc2dtbHByZTsgZG8gXAorIAkgIGJuPWBiYXNlbmFtZSAkJGlpYDsgXAorIAkgICQoSU5TVEFMTF9QUk9HUkFNKSAkJGlpICQoYXV4YmluX2RkaXIpLyQkYm47IFwKKyAJZG9uZQorQEAgLTIwNiw3ICsyMDYsNyBAQCBiaW4vbGludXhkb2M6OiBNYWtlZmlsZSBiaW4vbGludXhkb2MuaW4KKyAKKyBjbGVhbjo6CisgCS1ybSAtZiAqfiBiaW4vKn4gYmluL2xpbnV4ZG9jCistCWZvciBkIGluICQoRERJUlMpICQoTURJUlMpIHJ0Zi1maXg7IGRvICQoTUFLRSkgLUMgJCRkIGNsZWFuOyBkb25lCisrCWZvciBkIGluICQoRERJUlMpICQoTURJUlMpOyBkbyAkKE1BS0UpIC1DICQkZCBjbGVhbjsgZG9uZQorIAkoY2Qgc2dtbHByZSA7IHJtIC1mIHNnbWxwcmUubyBzZ21scHJlKQorIAktcm0gLXJmIGdlbm1hbi8KKyAKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3RleF9kb2MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3RleF9kb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYyODk1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfdGV4X2RvYy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitEaXNhYmxlIGJ1aWxkaW5nIGRvY3VtZW50YXRpb24gd2hpY2ggcmVxdWlyZXMgdGhlIGxhdGV4IHV0aWxpdHkuCitUaGlzIHBhdGNoIHNob3VsZCBiZSBkcm9wcGVkIG9uY2Ugd2UgaW5jbHVkZSBhIG5hdGl2ZSB2ZXJzaW9uIG9mCitsYXRleC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPdGhlcl0KK1RlbXBvcmFyeSB3b3JrYXJvdW5kIHdoaWNoIGRpc2FibGVzIGRvY3VtZW50YXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC11ck4gbGludXhkb2MtdG9vbHMtMC45LjY2Lm9yaWcvZG9jL01ha2Vkb2Muc2ggbGludXhkb2MtdG9vbHMtMC45LjY2L2RvYy9NYWtlZG9jLnNoCistLS0gbGludXhkb2MtdG9vbHMtMC45LjY2Lm9yaWcvZG9jL01ha2Vkb2Muc2gJMjAwOS0xMS0wOSAxMTo1ODoyNS4wMDAwMDAwMDAgLTA4MDAKKysrKyBsaW51eGRvYy10b29scy0wLjkuNjYvZG9jL01ha2Vkb2Muc2gJMjAxMS0wMi0yNSAxNToyMzo1OC42MTAwMTYxMTQgLTA4MDAKK0BAIC00NiwxMSArNDYsMTEgQEAKKyAJJFRNUERJUi9zZ21sMnR4dCAtYiAxIC4vZ3VpZGUKKyBmaQorIAorLWlmIFsgLW4gImB3aGljaCBsYXRleGAiIF07IHRoZW4KKy0JbG4gLXMgJFRNUERJUi9saW51eGRvYyAkVE1QRElSL3NnbWwybGF0ZXgKKy0JZWNobyAiLSBCdWlsZGluZyBsYXRleCBkb2NzIiA+JjIKKy0JJFRNUERJUi9zZ21sMmxhdGV4IC0tcGFzcz0iXHVzZXBhY2thZ2V7dGltZXN9IiAtbyBkdmkgLi9ndWlkZQorLWZpCisrI2lmIFsgLW4gImB3aGljaCBsYXRleGAiIF07IHRoZW4KKysjCWxuIC1zICRUTVBESVIvbGludXhkb2MgJFRNUERJUi9zZ21sMmxhdGV4CisrIwllY2hvICItIEJ1aWxkaW5nIGxhdGV4IGRvY3MiID4mMgorKyMJJFRNUERJUi9zZ21sMmxhdGV4IC0tcGFzcz0iXHVzZXBhY2thZ2V7dGltZXN9IiAtbyBkdmkgLi9ndWlkZQorKyNmaQorIAorIGlmIFsgLW4gImB3aGljaCBkdmlwc2AiIF07IHRoZW4KKyAJZWNobyAiICAgKyBkdmlwcyIgPiYyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3R4dF9kb2MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3R4dF9kb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ3ODQxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfdHh0X2RvYy5wYXRjaApAQCAtMCwwICsxLDM2IEBACitEaXNhYmxlIGJ1aWxkaW5nIHR4dCBkb2N1bWVudGF0aW9uLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQsCithcyBJIGhhdmUgZm91bmQgYW4gVWJ1bnR1IDEwLjEwIHN5c3RlbSB3aGljaCB0aHJvd3MgZXJyb3JzIGR1cmluZworYnVpbGRpbmcgdGhpcyB0aGF0IEknZCBsaWtlIHRvIHVsdGltYXRlbHkgZml4LiBUaGUgZXJyb3IgbWFuaWZlc3RzCitpdHNlbGYgZnJvbSB0aGUgZW5kIG9mIExpbnV4RG9jVG9vbHMucG0gd2l0aCB0aGUgZm9sbG93aW5nIG1lc3NhZ2VzCitkdXJpbmcgZG9faW5zdGFsbDoKKworfCAtIEJ1aWxkaW5nIHR4dCBkb2NzCit8IFByb2Nlc3NpbmcgZmlsZSAuL2d1aWRlCit8IHRyb2ZmOiBmYXRhbCBlcnJvcjogY2FuJ3QgZmluZCBtYWNybyBmaWxlIHMKK3wgIGZtdF90eHQ6OnBvc3RBU1A6IEVtcHR5IG91dHB1dCBmaWxlLCBlcnJvciB3aGVuIGNhbGxpbmcgZ3JvZmYuIEFib3J0aW5nLi4uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT3RoZXJdCitUZW1wb3Jhcnkgd29ya2Fyb3VuZCB3aGljaCBkaXNhYmxlcyBkb2N1bWVudGF0aW9uLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtdXJOIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni5vcmlnLy9kb2MvTWFrZWRvYy5zaCBsaW51eGRvYy10b29scy0wLjkuNjYvZG9jL01ha2Vkb2Muc2gKKy0tLSBsaW51eGRvYy10b29scy0wLjkuNjYub3JpZy8vZG9jL01ha2Vkb2Muc2gJMjAwOS0xMS0wOSAxMTo1ODoyNS4wMDAwMDAwMDAgLTA4MDAKKysrKyBsaW51eGRvYy10b29scy0wLjkuNjYvZG9jL01ha2Vkb2Muc2gJMjAxMS0wMy0wNCAxNzozNzoyNC43ODg5MjM5OTggLTA4MDAKK0BAIC00MCwxMSArNDAsMTEgQEAKKyAKKyBjaG1vZCB1K3ggJFRNUERJUi9saW51eGRvYworIAorLWlmIFsgLW4gImB3aGljaCBncm9mZmAiIF07IHRoZW4KKy0JbG4gLXMgJFRNUERJUi9saW51eGRvYyAkVE1QRElSL3NnbWwydHh0CistCWVjaG8gIi0gQnVpbGRpbmcgdHh0IGRvY3MiID4mMgorLQkkVE1QRElSL3NnbWwydHh0IC1iIDEgLi9ndWlkZQorLWZpCisrI2lmIFsgLW4gImB3aGljaCBncm9mZmAiIF07IHRoZW4KKysjCWxuIC1zICRUTVBESVIvbGludXhkb2MgJFRNUERJUi9zZ21sMnR4dAorKyMJZWNobyAiLSBCdWlsZGluZyB0eHQgZG9jcyIgPiYyCisrIwkkVE1QRElSL3NnbWwydHh0IC1iIDEgLi9ndWlkZQorKyNmaQorIAorIGlmIFsgLW4gImB3aGljaCBsYXRleGAiIF07IHRoZW4KKyAJbG4gLXMgJFRNUERJUi9saW51eGRvYyAkVE1QRElSL3NnbWwybGF0ZXgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LTEuNC4xNy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC0xLjQuMTcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYTRlMDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC0xLjQuMTcuaW5jCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgbTQuaW5jCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWxpYnNpZ3NlZ3YtcHJlZml4IgorCitMSUNFTlNFID0gIkdQTHYzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKKwkgICAgICAgICAgICBmaWxlOi8vZXhhbXBsZXMvQ09QWUlORzttZDU9NDAzMTU5M2IyMTY2ZDZjNDdjYWUyODJkOTQ0YTdlZGUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9hY19jb25maWdfbGlua3MucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3JlbW92ZS1nZXRzLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisJICAgIgorU1JDX1VSSVttZDVzdW1dID0gImE1ZTk5NTRiMWRhZTAzNjc2MmY3YjEzNjczYTJjZjc2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNjZTcyNTEzM2VlNTUyYjhiNGJhY2E3ODM3ZmI3NzI5NDBiMjVlODFiMmE5ZGM5MjUzN2FlYWY3MzM1MzhjOWUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC0xLjQuOS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC0xLjQuOS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFiMmMxZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LTEuNC45LmluYwpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIG00LmluYworCitMSUNFTlNFID0gIkdQTHYyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZVwKKwlmaWxlOi8vZXhhbXBsZXMvQ09QWUlORzttZDU9MWQ0OWJkNjFkYzU5MGYwMTRjYWU3MTczYjQzZTNlNWMiCisKK1BSID0gInIyIgorU1JDX1VSSSArPSAiZmlsZTovL2ZpeF9mb3JfY2lyY3VsYXJfZGVwZW5kZW5jeS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjFiYThlMTQ3YWZmNWU3OWJkMmJmYjk4M2Q4NmI1M2Q1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgxNWNlNTM4NTNmYmY2NDkzNjE3ZjQ2NzM4OWI3OTkyMDhiMWVjOTgyOTZiOTViZTQ0YTY4M2Y4YmNmZDdjNDciCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LW5hdGl2ZV8xLjQuMTcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC1uYXRpdmVfMS40LjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZDhhYTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC1uYXRpdmVfMS40LjE3LmJiCkBAIC0wLDAgKzEsMTMgQEAKK3JlcXVpcmUgbTQtJHtQVn0uaW5jCisKK2luaGVyaXQgbmF0aXZlCisKK0lOSElCSVRfQVVUT1RPT0xTX0RFUFMgPSAiMSIKK0RFUEVORFMgKz0gImdudS1jb25maWctbmF0aXZlIgorCitkb19jb25maWd1cmUoKSAgeworCWluc3RhbGwgLW0gMDY0NCAke1NUQUdJTkdfREFUQURJUn0vZ251LWNvbmZpZy9jb25maWcuc3ViIC4KKwlpbnN0YWxsIC1tIDA2NDQgJHtTVEFHSU5HX0RBVEFESVJ9L2dudS1jb25maWcvY29uZmlnLmd1ZXNzIC4KKwlvZV9ydW5jb25mCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTgzOTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQuaW5jCkBAIC0wLDAgKzEsMTAgQEAKK1NVTU1BUlkgPSAiVHJhZGl0aW9uYWwgVW5peCBtYWNybyBwcm9jZXNzb3IiCitERVNDUklQVElPTiA9ICJHTlUgbTQgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHRyYWRpdGlvbmFsIFVuaXggbWFjcm8gcHJvY2Vzc29yLiAgSXQgaXMgbW9zdGx5IFNWUjQgXAorY29tcGF0aWJsZSBhbHRob3VnaCBpdCBoYXMgc29tZSBleHRlbnNpb25zIChmb3IgZXhhbXBsZSwgaGFuZGxpbmcgbW9yZSB0aGFuIDkgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHRvIG1hY3JvcykuIFwKK0dOVSBNNCBhbHNvIGhhcyBidWlsdC1pbiBmdW5jdGlvbnMgZm9yIGluY2x1ZGluZyBmaWxlcywgcnVubmluZyBzaGVsbCBjb21tYW5kcywgZG9pbmcgYXJpdGhtZXRpYywgZXRjLiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRU1BS0UgKz0gIidpbmZvZGlyPSR7aW5mb2Rpcn0nIgorTERGTEFHU19wcmVwZW5kX2xpYmMtdWNsaWJjID0gIiAtbHJ0ICIKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9tNC9tNC0ke1BWfS50YXIuZ3oiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFhNGJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZ251bGliLm1rIGIvbGliL2dudWxpYi5taworaW5kZXggZTFkNzRkYi4uYzBlOTJkZCAxMDA2NDQKKy0tLSBhL2xpYi9nbnVsaWIubWsKKysrKyBiL2xpYi9nbnVsaWIubWsKK0BAIC0xODgyLDcgKzE4ODIsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9hY19jb25maWdfbGlua3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9hY19jb25maWdfbGlua3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc1YzBiMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L2FjX2NvbmZpZ19saW5rcy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1RoaXMgcGF0Y2ggZml4ZXMgYSBidWlsZCBwcm9ibGVtIGZvciBtNC1uYXRpdmUgZXhwZXJpZW5jZWQgb24gVWJ1bnR1IDkuMTAsCit3aGVyZSBhdXRvY29uZi9hdXRvbWFrZSAoQUNfQ09ORklHX0xJTktTKSBlbmRzIHVwIG1ha2luZyBHTlVtYWtlZmlsZSBhCitzeW1saW5rIHRvIGl0c2VsZi4KKworVGhlIHBhdGNoIGNvbW1lbnRzIG91dCBhY19jb25maWdfbGlua3MgZGlyZWN0bHkgaW4gY29uZmlndXJlLAorYXMgYXV0b3JlY29uZiBpcyBub3QgYWN0dWFsbHkgcnVuIGZvciBtNC1uYXRpdmUuCisKK0kgYmVsaWV2ZSBpdCBzaG91bGQgYmUgc2FmZSwgYXMgR05VbWFrZWZpbGUgaXMgYWN0dWFsbHkgdW5wYWNrZWQgZnJvbQorc291cmNlLCBhbmQgd2hhdCB3ZSB3YW50IGlzIHRvIGlzIHRvIG5vdCB0b3VjaCBpdC4KKworVGVzdGVkIG9uIHg4Nl82NF9saW51eCAoVWJ1bnR1IDguMDQgYW5kIDkuMTApLgorCisyMDA5LTExLTEwCUVzYmVuIEhhYWJlbmRhbAkgICAgPGVoYUBkb3JlZGV2ZWxvcG1lbnQuZGs+CisKK2RpZmYgLXVyTiBtNC0xLjQuMTMub3JpZy9jb25maWd1cmUgbTQtMS40LjEzL2NvbmZpZ3VyZQorLS0tIG00LTEuNC4xMy5vcmlnL2NvbmZpZ3VyZQkyMDA5LTExLTEwIDEwOjU0OjAwLjMwMTcwNzA5NyArMDEwMAorKysrIG00LTEuNC4xMy9jb25maWd1cmUJMjAwOS0xMS0xMCAxMDo1NDoxNy4zMTQyMDYzNzkgKzAxMDAKK0BAIC0xNDg2MCw4ICsxNDg2MCw4IEBACisgICAjIG9ubHksIGl0IGRvZXMgbm90IG1hdHRlciBpZiB3ZSBza2lwIHRoZSBsaW5rIHdpdGggb2xkZXIgYXV0b2NvbmYuCisgICAjIEF1dG9tYWtlIDEuMTAuMSBhbmQgZWFybGllciB0cnkgdG8gcmVtb3ZlIEdOVW1ha2VmaWxlIGluIG5vbi1WUEFUSAorICAgIyBidWlsZHMsIHNvIHVzZSBhIHNoZWxsIHZhcmlhYmxlIHRvIGJ5cGFzcyB0aGlzLgorLSAgR05VbWFrZWZpbGU9R05VbWFrZWZpbGUKKy0gIGFjX2NvbmZpZ19saW5rcz0iJGFjX2NvbmZpZ19saW5rcyAkR05VbWFrZWZpbGU6JEdOVW1ha2VmaWxlIgorKyAjIEdOVW1ha2VmaWxlPUdOVW1ha2VmaWxlCisrICMgYWNfY29uZmlnX2xpbmtzPSIkYWNfY29uZmlnX2xpbmtzICRHTlVtYWtlZmlsZTokR05VbWFrZWZpbGUiCisgCisgCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9maXhfZm9yX2NpcmN1bGFyX2RlcGVuZGVuY3kucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9maXhfZm9yX2NpcmN1bGFyX2RlcGVuZGVuY3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg3NzQ1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L2ZpeF9mb3JfY2lyY3VsYXJfZGVwZW5kZW5jeS5wYXRjaApAQCAtMCwwICsxLDc3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworVGhlIG9sZGVyIEdQTHYyIG00IGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoIG5ld2VyIGF1dG9jb25mLiBJdCBjYXVzZXMgdGhlIAorY2lyY3VsYXIgZGVwZW5kZW5jeSBhcyBzZWVuIGJlbGxvdy4KKyAgUmVtb3ZpbmcgdGhpcyBtNCBmaWxlIHdoaWNoIHdhcyBuZWVkZWQgb25seSBmb3JsIG9sZGVyIGF1dG9jb25mCisKK3wgY29uZmlndXJlLmFjOjM0OiBlcnJvcjogQUNfUkVRVUlSRTogY2lyY3VsYXIgZGVwZW5kZW5jeSBvZiBBQ19HTlVfU09VUkNFCit8IC9idWlsZF9kaXNrL3Bva3lfYnVpbGQvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9tNC0xLjQuOS1yMC9tNC0xLjQuOS9tNC9leHRlbnNpb25zLm00OjE5OiBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCAuLi8uLi9saWIvYXV0b2NvbmYvc3BlY2lmaWMubTQ6MzEwOiBBQ19HTlVfU09VUkNFIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgL2J1aWxkX2Rpc2svcG9reV9idWlsZC9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L200LTEuNC45LXIwL200LTEuNC45L200L2dudWxpYi1jb21wLm00OjIxOiBNNF9FQVJMWSBpcyBleHBhbmRlZCBmcm9tLi4uCit8IGNvbmZpZ3VyZS5hYzozNDogdGhlIHRvcCBsZXZlbAorfCBhdXRvbTR0ZTogL2J1aWxkX2Rpc2svcG9reV9idWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvYmluL200IGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCit8IGFjbG9jYWw6IC9idWlsZF9kaXNrL3Bva3lfYnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2Jpbi9hdXRvbTR0ZSBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorfCBhdXRvcmVjb25mOiBhY2xvY2FsIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDExLzAzLzE2CisKK0luZGV4OiBtNC0xLjQuOS9tNC9leHRlbnNpb25zLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbTQtMS40Ljkub3JpZy9tNC9leHRlbnNpb25zLm00CisrKysgbTQtMS40LjkvbTQvZXh0ZW5zaW9ucy5tNAorQEAgLTYsNTMgKzYsMTAgQEAKKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisgIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCistIyBUaGlzIGRlZmluaXRpb24gb2YgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TIGlzIHN0b2xlbiBmcm9tIENWUworLSMgQXV0b2NvbmYuICBQZXJoYXBzIHdlIGNhbiByZW1vdmUgdGhpcyBvbmNlIHdlIGNhbiBhc3N1bWUgQXV0b2NvbmYKKy0jIDIuNjEgb3IgbGF0ZXIgZXZlcnl3aGVyZSwgYnV0IHNpbmNlIENWUyBBdXRvY29uZiBtdXRhdGVzIHJhcGlkbHkKKy0jIGVub3VnaCBpbiB0aGlzIGFyZWEgaXQncyBsaWtlbHkgd2UnbGwgbmVlZCB0byByZWRlZmluZQorLSMgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TIGZvciBxdWl0ZSBzb21lIHRpbWUuCistCistIyBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKKy0jIHR5cGljYWxseSBkdWUgdG8gc3RhbmRhcmRzLWNvbmZvcm1hbmNlIGlzc3Vlcy4KKy1BQ19ERUZVTihbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKy1bCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkKKy0gIEFDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pCistCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0FJWF0pCistICBBQ19SRVFVSVJFKFtBQ19NSU5JWF0pCistCistICBBSF9WRVJCQVRJTShbX19FWFRFTlNJT05TX19dLAorLVsvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKy0jaWZuZGVmIF9fRVhURU5TSU9OU19fCistIyB1bmRlZiBfX0VYVEVOU0lPTlNfXworLSNlbmRpZgorLSNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistIyB1bmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKy0jZW5kaWYKKy0jaWZuZGVmIF9UQU5ERU1fU09VUkNFCistIyB1bmRlZiBfVEFOREVNX1NPVVJDRQorLSNlbmRpZl0pCistICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfX10sCistICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfX10sCistICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKy0gICAgICAgW0FDX0xBTkdfUFJPR1JBTShbCistIwkgIGRlZmluZSBfX0VYVEVOU0lPTlNfXyAxCistCSAgQUNfSU5DTFVERVNfREVGQVVMVF0pXSwKKy0gICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPXllc10sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz1ub10pXSkKKy0gIHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fID0geWVzICYmCistICAgIEFDX0RFRklORShbX19FWFRFTlNJT05TX19dKQorLSAgQUNfREVGSU5FKFtfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1NdKQorLSAgQUNfREVGSU5FKFtfVEFOREVNX1NPVVJDRV0pCistXSkKKyAKKyAjIGdsX1VTRV9TWVNURU1fRVhURU5TSU9OUworICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorIEFDX0RFRlVOKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorLSAgW0FDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10pXSkKKysgIFtdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvbWFrZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L21ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmYjQxNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L21ha2UucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cuaG9sZ2Vyc2NodXJpZy5kZS9wYXRjaGVyLmh0bWwKKyMKKworLS0tIG00LTEuNC4yL2RvYy9NYWtlZmlsZS5pbn5tYWtlCisrKysgbTQtMS40LjIvZG9jL01ha2VmaWxlLmluCitAQCAtNTcsOSArNTcsOSBAQAorIAlkYXRlID4gJChzcmNkaXIpL3N0YW1wLXZ0aQorIAorIGluc3RhbGw6IGFsbAorLQkkKHNyY2RpcikvLi4vbWtpbnN0YWxsZGlycyAkKGluZm9kaXIpCisrCSQoc3JjZGlyKS8uLi9ta2luc3RhbGxkaXJzICQoREVTVERJUikkKGluZm9kaXIpCisgCWNkICQoc3JjZGlyKSAmJiBmb3IgZmlsZSBpbiBtNC5pbmZvKjsgZG8gXAorLQkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUgJChpbmZvZGlyKS8kJGZpbGU7IFwKKysJICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoREVTVERJUikkKGluZm9kaXIpLyQkZmlsZTsgXAorIAlkb25lCisgCisgdW5pbnN0YWxsOgorLS0tIG00LTEuNC4yL3NyYy9NYWtlZmlsZS5pbn5tYWtlCisrKysgbTQtMS40LjIvc3JjL01ha2VmaWxlLmluCitAQCAtMzUsNyArMzUsNyBAQAorIHByZWZpeCA9IEBwcmVmaXhACisgZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACisgdHJhbnNmb3JtID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACistYmluZGlyID0gJChleGVjX3ByZWZpeCkvYmluCisrYmluZGlyID0gQGJpbmRpckAKKyAKKyBDT01QSUxFID0gJChDQykgLWMgJChERUZTKSAkKElOQ0xVREVTKSAkKENQUEZMQUdTKSAkKENGTEFHUykKKyBMSU5LID0gJChDQykgJChMREZMQUdTKSAtbyAkQAorQEAgLTg0LDggKzg0LDggQEAKKyAJJChMSU5LKSBhbnNpMmtuci5vICQoTElCUykKKyAKKyBpbnN0YWxsOiBhbGwKKy0JJChzcmNkaXIpLy4uL21raW5zdGFsbGRpcnMgJChiaW5kaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSBtNCAkKGJpbmRpcikvYGVjaG8gbTQgfCBzZWQgJyQodHJhbnNmb3JtKSdgCisrCSQoc3JjZGlyKS8uLi9ta2luc3RhbGxkaXJzICQoREVTVERJUikkKGJpbmRpcikKKysJJChJTlNUQUxMX1BST0dSQU0pIG00ICQoREVTVERJUikkKGJpbmRpcikvYGVjaG8gbTQgfCBzZWQgJyQodHJhbnNmb3JtKSdgCisgCisgdW5pbnN0YWxsOgorIAlybSAtZiAkKGJpbmRpcikvYGVjaG8gbTQgfCBzZWQgJyQodHJhbnNmb3JtKSdgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9yZW1vdmUtZ2V0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L3JlbW92ZS1nZXRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZmIzNTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9yZW1vdmUtZ2V0cy5wYXRjaApAQCAtMCwwICsxLDIzIEBACitlZ2xpYmMgaGFzIHJlbW92ZSBnZXRzIHN0YXJ0aW5nIDIuMTYKK3RoZXJlZm9yZSBjaGVjayBmb3IgaXRzIGJlaW5nIHRoZXJlIGJlZm9yZSAKK3VuZGVmaW5pbmcgaXQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0luZGV4OiBtNC0xLjQuMTcvbGliL3N0ZGlvLmluLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtNC0xLjQuMTcub3JpZy9saWIvc3RkaW8uaW4uaAkyMDEzLTEwLTE2IDE0OjQxOjAxLjY3ODQ5NjIyNyArMDMwMAorKysrIG00LTEuNC4xNy9saWIvc3RkaW8uaW4uaAkyMDEzLTEwLTE2IDE0OjQxOjQ4Ljg0OTQyNzgzOSArMDMwMAorQEAgLTcxNywxMCArNzE3LDEyIEBACisgLyogSXQgaXMgdmVyeSByYXJlIHRoYXQgdGhlIGRldmVsb3BlciBldmVyIGhhcyBmdWxsIGNvbnRyb2wgb2Ygc3RkaW4sCisgICAgc28gYW55IHVzZSBvZiBnZXRzIHdhcnJhbnRzIGFuIHVuY29uZGl0aW9uYWwgd2FybmluZzsgYmVzaWRlcywgQzExCisgICAgcmVtb3ZlZCBpdC4gICovCisrI2lmIGRlZmluZWQgZ2V0cworICN1bmRlZiBnZXRzCisgI2lmIEhBVkVfUkFXX0RFQ0xfR0VUUworIF9HTF9XQVJOX09OX1VTRSAoZ2V0cywgImdldHMgaXMgYSBzZWN1cml0eSBob2xlIC0gdXNlIGZnZXRzIGluc3RlYWQiKTsKKyAjZW5kaWYKKysjZW5kaWYKKyAKKyAKKyAjaWYgQEdOVUxJQl9PQlNUQUNLX1BSSU5URkAgfHwgQEdOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWEAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200XzEuNC4xNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200XzEuNC4xNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTJjMGFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTRfMS40LjE3LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSBtNC0ke1BWfS5pbmMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNF8xLjQuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200XzEuNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMmMwYWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNF8xLjQuOS5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgbTQtJHtQVn0uaW5jCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLTMuODEvbWFrZV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UtMy44MS9tYWtlX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjJlOTY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLTMuODEvbWFrZV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2F1dG9tYWtlIDEuMTIgaGFzIGRlcHJpY2F0ZWQgYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydAorCit0aGlzIHBhdGNoIGF2b2lkcyB0aGVzZSBraW5kcyBvZiBlcnJvcnM6CisKK3wgY29uZmlndXJlLmluOjQ4OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCisuLi4KK3wgTWFrZWZpbGUuYW06MTk6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgYXV0b3JlY29uZjogYXV0b21ha2UgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKK3wgRVJST1I6IGF1dG9yZWNvbmYgZXhlY3V0aW9uIGZhaWxlZC4KKworCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wNAorCitJbmRleDogbWFrZS0zLjgxL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1ha2UtMy44MS5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIG1ha2UtMy44MS9jb25maWd1cmUuaW4KK0BAIC00NCw5ICs0NCw2IEBAIEFDX0FJWAorIEFDX0lTQ19QT1NJWAorIEFDX01JTklYCisgCistIyBOZWVkZWQgZm9yIGFuc2kya25yCistQU1fQ19QUk9UT1RZUEVTCistCisgIyBFbmFibGUgZ2V0dGV4dCwgaW4gImV4dGVybmFsIiBtb2RlLgorIAorIEFNX0dOVV9HRVRURVhUX1ZFUlNJT04oMC4xNC4xKQorSW5kZXg6IG1ha2UtMy44MS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1ha2UtMy44MS5vcmlnL01ha2VmaWxlLmFtCisrKysgbWFrZS0zLjgxL01ha2VmaWxlLmFtCitAQCAtMTYsNyArMTYsNyBAQAorICMgR05VIE1ha2U7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIAorLUFVVE9NQUtFX09QVElPTlMgPSAxLjggZGlzdC1iemlwMiBjaGVjay1uZXdzIGFuc2kya25yCisrQVVUT01BS0VfT1BUSU9OUyA9IDEuOCBkaXN0LWJ6aXAyIGNoZWNrLW5ld3MKKyBBQ0xPQ0FMX0FNRkxBR1MJPSAgLUkgY29uZmlnCisgCisgTUFLRV9IT1NUID0JQE1BS0VfSE9TVEAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS0zLjgxL21ha2VpbmZvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLTMuODEvbWFrZWluZm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRkNzYwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS0zLjgxL21ha2VpbmZvLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK0FsbG93IGRvY3MgdG8gYnVpbGQgd2l0aCBtYWtlaW5mbyA1LlgsIGZpeGluZyB0aGUgZXJyb3I6CisKK2RvYy9tYWtlLnRleGk6ODE2NTogQGl0ZW14IG11c3QgZm9sbG93IEBpdGVtCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworUlAKKzIwMTQvMDMvMjkKKworSW5kZXg6IG1ha2UtMy44MS9kb2MvbWFrZS50ZXhpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWFrZS0zLjgxLm9yaWcvZG9jL21ha2UudGV4aQkyMDA2LTA0LTAxIDA2OjM2OjQwLjAwMDAwMDAwMCArMDAwMAorKysrIG1ha2UtMy44MS9kb2MvbWFrZS50ZXhpCTIwMTQtMDMtMjkgMDk6Mzk6NTEuMDA3NzI3MDEyICswMDAwCitAQCAtODE2Miw3ICs4MTYyLDcgQEAKKyByYXJlbHkgbmVlZCB0byBzcGVjaWZ5IHRoaXMgb3B0aW9uIHNpbmNlIEBzYW1we21ha2V9IGRvZXMgaXQgZm9yIHlvdTsKKyBzZWUgQHJlZnstdyBPcHRpb24sICxUaGUgQHNhbXB7LS1wcmludC1kaXJlY3Rvcnl9IE9wdGlvbn0uKQorIAorLUBpdGVteCAtLW5vLXByaW50LWRpcmVjdG9yeQorK0BpdGVtIC0tbm8tcHJpbnQtZGlyZWN0b3J5CisgQGNpbmRleCBAY29kZXstLW5vLXByaW50LWRpcmVjdG9yeX0KKyBEaXNhYmxlIHByaW50aW5nIG9mIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB1bmRlciBAY29kZXstd30uCisgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4gQGNvZGV7LXd9IGlzIHR1cm5lZCBvbiBhdXRvbWF0aWNhbGx5LApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdlYTYwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS5pbmMKQEAgLTAsMCArMSwxMCBAQAorU1VNTUFSWSA9ICJHTlUgdG9vbCB0aGF0IGNvbnRyb2xzIHRoZSBidWlsZCBwcm9jZXNzIgorREVTQ1JJUFRJT04gPSAiTWFrZSBpcyBhIHRvb2wgd2hpY2ggY29udHJvbHMgdGhlIGdlbmVyYXRpb24gb2YgZXhlY3V0YWJsZXMgYW5kIG90aGVyIG5vbi1zb3VyY2UgZmlsZXMgb2YgYSBcCitwcm9ncmFtIGZyb20gdGhlIHByb2dyYW0ncyBzb3VyY2UgZmlsZXMuICBNYWtlIGdldHMgaXRzIGtub3dsZWRnZSBvZiBob3cgdG8gYnVpbGQgeW91ciBwcm9ncmFtIGZyb20gYSBmaWxlIFwKK2NhbGxlZCB0aGUgbWFrZWZpbGUsIHdoaWNoIGxpc3RzIGVhY2ggb2YgdGhlIG5vbi1zb3VyY2UgZmlsZXMgYW5kIGhvdyB0byBjb21wdXRlIGl0IGZyb20gb3RoZXIgZmlsZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL21ha2UvIgorU0VDVElPTiA9ICJkZXZlbCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L21ha2UvbWFrZS0ke1BWfS50YXIuYnoyIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyB0ZXhpbmZvCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2VfMy44MS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZV8zLjgxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YTc5YjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2VfMy44MS5iYgpAQCAtMCwwICsxLDE1IEBACitQUiA9ICJyMSIKKworTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTM2MWI2YjgzN2NhZDI2YzY5MDBhOTI2YjYyYWFkYTVmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL0NPUFlJTkc7bWQ1PThjYTQzY2JjODQyYzIzMzZlODM1OTI2YzIxNjZjMjhiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dsb2IvQ09QWUlORy5MSUI7bWQ1PTRhNzcwYjY3ZTZiZTBmNjBkYTI0NGJlYjJkZTBmY2U0IgorCityZXF1aXJlIG1ha2UuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9tYWtlX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCIKK1NSQ19VUkkgKz0gImZpbGU6Ly9tYWtlaW5mby5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjM1NDg1M2UwYjJkYTkwYzUyN2UzNWFhYmI4ZDZmMWU2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImYzZTY5MDIzNzcxZTIzOTA4ZjVkNTU5Mjk1NGQ4MjcxZDNkNmFmMDk2OTNjZWNmZDI5Y2VlNmZkZTg1NTBkYzgiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZV80LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2VfNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYjBkN2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2VfNC4xLmJiCkBAIC0wLDAgKzEsMTIgQEAKK0xJQ0VOU0UgPSAiR1BMdjMgJiBMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbG9iL0NPUFlJTkcuTElCO21kNT00YTc3MGI2N2U2YmUwZjYwZGEyNDRiZWIyZGUwZmNlNCIKK3JlcXVpcmUgbWFrZS5pbmMKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtZ3VpbGUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1N2E3YTIyNGE4MjJmOTQ3ODlhNTg3Y2NiY2VkZmY2OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwYmM3NjEzMzg5NjUwZWU2YTI0NTU0YjUyNTcyYTI3MmY3MzU2MTY0ZmQyYzQxMzJiMGJjZjEzMTIzZTRmY2E1IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlZGV2cy9tYWtlZGV2cy9DT1BZSU5HLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnMvQ09QWUlORy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTg5MDJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnMvQ09QWUlORy5wYXRjaApAQCAtMCwwICsxLDM0NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK2RpZmYgLXJ1TiBtYWtlZGV2cy0xLjAuMC1vcmlnL0NPUFlJTkcgbWFrZWRldnMtMS4wLjAvQ09QWUlORworLS0tIG1ha2VkZXZzLTEuMC4wLW9yaWcvQ09QWUlORwkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIG1ha2VkZXZzLTEuMC4wL0NPUFlJTkcJMjAxMC0xMi0wOSAxNjo0MjoyMC4yNzQ5ODQ2NjUgKzA4MDAKK0BAIC0wLDAgKzEsMzQwIEBACisrCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKysJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorKworKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgICAgICAgICAgICAgICAgICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisrIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKysKKysJCQkgICAgUHJlYW1ibGUKKysKKysgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKKytmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKKytzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bworK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKKyt0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KKyt5b3VyIHByb2dyYW1zLCB0b28uCisrCisrICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CisrcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQorK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKKyt0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKKytpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAorK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKysKKysgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKKythbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCisrVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKKytkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisrCisrICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCisrZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0CisreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKKytzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCisrcmlnaHRzLgorKworKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCisrZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKysKKysgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCisrdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKKytzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKKyt3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbworK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCisrYXV0aG9ycycgcmVwdXRhdGlvbnMuCisrCisrICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKKytwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCisrcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CisrcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKysKKysgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCisrbW9kaWZpY2F0aW9uIGZvbGxvdy4KKysMCisrCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKysgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKysKKysgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKKythIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAorK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKKytyZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKKyttZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgorK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCisrZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKKytsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCisrdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisrCisrQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKKytjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCisrcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQorK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KKytXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKysKKysgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKKytjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCisrbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKKythbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorKworK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAorK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisrCisrICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCisrb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisrCisrICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorKworKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKysgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisrICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisrICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKysKKysgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisrICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKysgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisrICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisrICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisrICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisrICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKysgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisrDAorK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKKytpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgorK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKKytzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKKytkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKKytvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKKyt0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKysKKytUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKKyt5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KKytleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKKytjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorKworK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KKyt3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKKythIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgorK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKKyt1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKKytTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisrCisrICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKysgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisrICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorKworKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisrICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKysgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKysgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorKworKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisrICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorKworK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKKyttYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55CisrYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCisrY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5CisrZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKKytvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAorK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKysKKytJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCisrYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisrDAorKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisrZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcworK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KKytIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgorK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCisrcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorKworKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90Cisrc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKKytkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKKytwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5CisrbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKKythbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCisrdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisrCisrICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKKytvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCisrdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKKytyZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisrWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KKyt0aGlzIExpY2Vuc2UuCisrCisrICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CisraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKKytjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCisrb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CisrZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKKyttYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CisrbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgorK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KKytyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorKworK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KKythcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorK2NpcmN1bXN0YW5jZXMuCisrCisrSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55Cisrc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQorK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKKyt0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKKyt0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKKytpbXBvc2UgdGhhdCBjaG9pY2UuCisrCisrVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCisrYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisrDAorKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KKytjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKKytvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCisrbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCisrdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcworK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKKytvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKKytiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KKythZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKysKKytFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCisrc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKKytsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCisrZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCisrdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24uCisrCisrICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCisrcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgorK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCisrb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorKworKwkJCSAgICBOTyBXQVJSQU5UWQorKworKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCisrRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCisrT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECisrT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCisrVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorKworKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKKytSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKKytUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKKytZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKysKKysJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisrDAorKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisrCisrICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CisrcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorKworKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKKyt0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CisrY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKKyt0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKysKKysgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKysgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKysKKysgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKworKworK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorKworK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKKyt3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorKworKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKysgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisrICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKysKKytUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKKytwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CisrYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCisrbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKysKKytZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCisrbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorKworKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisrCisrICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKysgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisrCisrVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCisrcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKKytjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKKytsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKKytQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzL21ha2VkZXZzLmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlZGV2cy9tYWtlZGV2cy9tYWtlZGV2cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MWYzM2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlZGV2cy9tYWtlZGV2cy9tYWtlZGV2cy5jCkBAIC0wLDAgKzEsNTg5IEBACisjZGVmaW5lIF9HTlVfU09VUkNFCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjaW5jbHVkZSA8bGliZ2VuLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2RlZmluZSBNSU5PUkJJVFMJOAorI2RlZmluZSBNS0RFVihtYSxtaSkJKCgobWEpIDw8IE1JTk9SQklUUykgfCAobWkpKQorI2RlZmluZSBNQVhfSURfTEVOICAgICAgNDAKKyNkZWZpbmUgTUFYX05BTUVfTEVOICAgIDQwCisjaWZuZGVmIFBBVEhfTUFYCisjZGVmaW5lIFBBVEhfTUFYICAgICAgICA0MDk2CisjZW5kaWYKKyNkZWZpbmUgVkVSU0lPTiAgICAgICAgICIxLjAuMSIKKworLyogVGhlc2UgYXJlIGFsbCBzdG9sZW4gZnJvbSBidXN5Ym94J3MgbGliYmIgdG8gbWFrZQorICogZXJyb3IgaGFuZGxpbmcgc2ltcGxlciAoYW5kIHNpbmNlIEkgbWFpbnRhaW4gYnVzeWJveCwKKyAqIEknbSByYXRoZXIgcGFydGlhbCB0byB0aGVzZSBmb3IgZXJyb3IgaGFuZGxpbmcpLgorICogIC1FcmlrCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBhcHBfbmFtZSA9ICJtYWtlZGV2cyI7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbWVtb3J5X2V4aGF1c3RlZCA9ICJtZW1vcnkgZXhoYXVzdGVkIjsKK3N0YXRpYyBjaGFyIGRlZmF1bHRfcm9vdGRpcltdPSIuIjsKK3N0YXRpYyBjaGFyICpyb290ZGlyID0gZGVmYXVsdF9yb290ZGlyOworc3RhdGljIGludCB0cmFjZSA9IDA7CisKK3N0cnVjdCBuYW1lX2lkIHsKKwljaGFyIG5hbWVbTUFYX05BTUVfTEVOKzFdOworCXVuc2lnbmVkIGxvbmcgaWQ7CisJc3RydWN0IG5hbWVfaWQgKm5leHQ7Cit9OworCitzdGF0aWMgc3RydWN0IG5hbWVfaWQgKnVzcl9saXN0ID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgbmFtZV9pZCAqZ3JwX2xpc3QgPSBOVUxMOworCitzdGF0aWMgdm9pZCB2ZXJyb3JfbXNnKGNvbnN0IGNoYXIgKnMsIHZhX2xpc3QgcCkKK3sKKwlmZmx1c2goc3Rkb3V0KTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiAiLCBhcHBfbmFtZSk7CisJdmZwcmludGYoc3RkZXJyLCBzLCBwKTsKK30KKworc3RhdGljIHZvaWQgZXJyb3JfbXNnX2FuZF9kaWUoY29uc3QgY2hhciAqcywgLi4uKQoreworCXZhX2xpc3QgcDsKKworCXZhX3N0YXJ0KHAsIHMpOworCXZlcnJvcl9tc2cocywgcCk7CisJdmFfZW5kKHApOworCXB1dGMoJ1xuJywgc3RkZXJyKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKK3N0YXRpYyB2b2lkIHZwZXJyb3JfbXNnKGNvbnN0IGNoYXIgKnMsIHZhX2xpc3QgcCkKK3sKKwlpbnQgZXJyID0gZXJybm87CisKKwlpZiAocyA9PSAwKQorCQlzID0gIiI7CisJdmVycm9yX21zZyhzLCBwKTsKKwlpZiAoKnMpCisJCXMgPSAiOiAiOworCWZwcmludGYoc3RkZXJyLCAiJXMlc1xuIiwgcywgc3RyZXJyb3IoZXJyKSk7Cit9CisKK3N0YXRpYyB2b2lkIHBlcnJvcl9tc2dfYW5kX2RpZShjb25zdCBjaGFyICpzLCAuLi4pCit7CisJdmFfbGlzdCBwOworCisJdmFfc3RhcnQocCwgcyk7CisJdnBlcnJvcl9tc2cocywgcCk7CisJdmFfZW5kKHApOworCWV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworc3RhdGljIEZJTEUgKnhmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQoreworCUZJTEUgKmZwOworCisJaWYgKChmcCA9IGZvcGVuKHBhdGgsIG1vZGUpKSA9PSBOVUxMKQorCQlwZXJyb3JfbXNnX2FuZF9kaWUoIiVzIiwgcGF0aCk7CisJcmV0dXJuIGZwOworfQorCitzdGF0aWMgY2hhciAqeHN0cmR1cChjb25zdCBjaGFyICpzKQoreworCWNoYXIgKnQ7CisKKwlpZiAocyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXQgPSBzdHJkdXAocyk7CisKKwlpZiAodCA9PSBOVUxMKQorCQllcnJvcl9tc2dfYW5kX2RpZShtZW1vcnlfZXhoYXVzdGVkKTsKKworCXJldHVybiB0OworfQorCitzdGF0aWMgc3RydWN0IG5hbWVfaWQqIGFsbG9jX25vZGUodm9pZCkKK3sKKwlzdHJ1Y3QgbmFtZV9pZCAqbm9kZTsKKwlub2RlID0gKHN0cnVjdCBuYW1lX2lkKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBuYW1lX2lkKSk7CisJaWYgKG5vZGUgPT0gTlVMTCkgeworCQllcnJvcl9tc2dfYW5kX2RpZShtZW1vcnlfZXhoYXVzdGVkKTsKKwl9CisJbWVtc2V0KCh2b2lkICopbm9kZS0+bmFtZSwgMCwgTUFYX05BTUVfTEVOKzEpOworCW5vZGUtPmlkID0gMHhmZmZmZmZmZjsKKwlub2RlLT5uZXh0ID0gTlVMTDsKKwlyZXR1cm4gbm9kZTsKK30KKworc3RhdGljIHN0cnVjdCBuYW1lX2lkKiBwYXJzZV9saW5lKGNoYXIgKmxpbmUpCit7CisJY2hhciAqcDsKKwlpbnQgaTsKKwljaGFyIGlkX2J1ZltNQVhfSURfTEVOKzFdOworCXN0cnVjdCBuYW1lX2lkICpub2RlOworCW5vZGUgPSBhbGxvY19ub2RlKCk7CisJcCA9IGxpbmU7CisJaSA9IDA7CisJLy8gR2V0IG5hbWUgZmllbGQKKwl3aGlsZSAoKnAgIT0gJzonKSB7CisJCWlmIChpID4gTUFYX05BTUVfTEVOKQorCQkJZXJyb3JfbXNnX2FuZF9kaWUoIk5hbWUgZmllbGQgdG9vIGxvbmciKTsKKwkJbm9kZS0+bmFtZVtpKytdID0gKnArKzsKKwl9CisJbm9kZS0+bmFtZVtpXSA9ICdcMCc7CisJcCsrOworCS8vIFNraXAgdGhlIHNlY29uZCBmaWVsZAorCXdoaWxlICgqcCAhPSAnOicpCisJCXArKzsKKwlwKys7CisJLy8gR2V0IGlkIGZpZWxkCisJaSA9IDA7CisJd2hpbGUgKCpwICE9ICc6JykgeworCQlpZiAoaSA+IE1BWF9JRF9MRU4pCisJCQllcnJvcl9tc2dfYW5kX2RpZSgiSUQgZmlsZWQgdG9vIGxvbmciKTsKKwkJaWRfYnVmW2krK10gPSAqcCsrOworCX0KKwlpZF9idWZbaV0gPSAnXDAnOworCW5vZGUtPmlkID0gYXRvbChpZF9idWYpOworCXJldHVybiBub2RlOworfQorCitzdGF0aWMgdm9pZCBnZXRfbGlzdF9mcm9tX2ZpbGUoRklMRSAqZmlsZSwgc3RydWN0IG5hbWVfaWQgKipwbGlzdCkKK3sKKwljaGFyICpsaW5lOworCWludCBsZW4gPSAwOworCXNpemVfdCBsZW5ndGggPSAyNTY7CisJc3RydWN0IG5hbWVfaWQgKm5vZGUsICpjdXI7CisKKwlpZigobGluZSA9IChjaGFyICopbWFsbG9jKGxlbmd0aCkpID09IE5VTEwpIHsKKwkJZXJyb3JfbXNnX2FuZF9kaWUobWVtb3J5X2V4aGF1c3RlZCk7CisJfQorCisJd2hpbGUgKChsZW4gPSBnZXRsaW5lKCZsaW5lLCAmbGVuZ3RoLCBmaWxlKSkgIT0gLTEpIHsKKwkJbm9kZSA9IHBhcnNlX2xpbmUobGluZSk7CisJCWlmICgqcGxpc3QgPT0gTlVMTCkgeworCQkJKnBsaXN0ID0gbm9kZTsKKwkJCWN1ciA9ICpwbGlzdDsKKwkJfSBlbHNlIHsKKwkJCWN1ci0+bmV4dCA9IG5vZGU7CisJCQljdXIgPSBjdXItPm5leHQ7CisJCX0KKwl9CisKKwlpZiAobGluZSkKKwkJZnJlZShsaW5lKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY29udmVydDJndWlkKGNoYXIgKmlkX2J1Ziwgc3RydWN0IG5hbWVfaWQgKnNlYXJjaF9saXN0KQoreworCWNoYXIgKnA7CisJaW50IGlzbnVtOworCXN0cnVjdCBuYW1lX2lkICpub2RlOworCXAgPSBpZF9idWY7CisJaXNudW0gPSAxOworCXdoaWxlICgqcCAhPSAnXDAnKSB7CisJCWlmICghaXNkaWdpdCgqcCkpIHsKKwkJCWlzbnVtID0gMDsKKwkJCWJyZWFrOworCQl9CisJCXArKzsKKwl9CisJaWYgKGlzbnVtKSB7CisJCS8vIENoZWNrIGZvciBiYWQgdXNlci9ncm91cCBuYW1lCisJCW5vZGUgPSBzZWFyY2hfbGlzdDsKKwkJd2hpbGUgKG5vZGUgIT0gTlVMTCkgeworCQkJaWYgKCFzdHJuY21wKG5vZGUtPm5hbWUsIGlkX2J1Ziwgc3RybGVuKGlkX2J1ZikpKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiBCYWQgdXNlci9ncm91cCBuYW1lICVzIGRldGVjdGVkXG4iLCBpZF9idWYpOworCQkJCWJyZWFrOworCQkJfQorCQkJbm9kZSA9IG5vZGUtPm5leHQ7CisJCX0KKwkJcmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b2woaWRfYnVmKTsKKwl9IGVsc2UgeworCQlub2RlID0gc2VhcmNoX2xpc3Q7CisJCXdoaWxlIChub2RlICE9IE5VTEwpIHsKKwkJCWlmICghc3RybmNtcChub2RlLT5uYW1lLCBpZF9idWYsIHN0cmxlbihpZF9idWYpKSkKKwkJCQlyZXR1cm4gbm9kZS0+aWQ7CisJCQlub2RlID0gbm9kZS0+bmV4dDsKKwkJfQorCQllcnJvcl9tc2dfYW5kX2RpZSgiTm8gZW50cnkgZm9yICVzIGluIHNlYXJjaCBsaXN0IiwgaWRfYnVmKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfbGlzdChzdHJ1Y3QgbmFtZV9pZCAqbGlzdCkKK3sKKwlzdHJ1Y3QgbmFtZV9pZCAqY3VyOworCWN1ciA9IGxpc3Q7CisJd2hpbGUgKGN1ciAhPSBOVUxMKSB7CisJCWxpc3QgPSBjdXI7CisJCWN1ciA9IGN1ci0+bmV4dDsKKwkJZnJlZShsaXN0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9uZXdfZGlyZWN0b3J5KGNoYXIgKm5hbWUsIGNoYXIgKnBhdGgsCisJCXVuc2lnbmVkIGxvbmcgdWlkLCB1bnNpZ25lZCBsb25nIGdpZCwgdW5zaWduZWQgbG9uZyBtb2RlKQoreworCWlmICh0cmFjZSkKKwkJZnByaW50ZihzdGRlcnIsICJEaXJlY3Rvcnk6ICVzICVzICBVSUQ6ICVsZCAgR0lEICVsZCAgTU9ERTogJTA0bG8iLCBwYXRoLCBuYW1lLCB1aWQsIGdpZCwgbW9kZSk7CisKKwlpZiAobWtkaXIocGF0aCwgbW9kZSkgPCAwKSB7CisJCWlmIChFRVhJU1QgPT0gZXJybm8pIHsKKwkJCS8qIFVuY29uZGl0aW9uYWxseSBhcHBseSB0aGUgbW9kZSBzZXR0aW5nIHRvIHRoZSBleGlzdGluZyBkaXJlY3RvcnkuCisJCQkgKiBYWFggc2hvdWxkIG91dHB1dCBzb21ldGhpbmcgd2hlbiB0cmFjZSAqLworCQkJY2htb2QocGF0aCwgbW9kZSAmIH5TX0lGTVQpOworCQl9CisJfQorCWlmICh0cmFjZSkKKwkJcHV0YygnXG4nLCBzdGRlcnIpOworCWNob3duKHBhdGgsIHVpZCwgZ2lkKTsKK30KKworc3RhdGljIHZvaWQgYWRkX25ld19kZXZpY2UoY2hhciAqbmFtZSwgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyB1aWQsCisJdW5zaWduZWQgbG9uZyBnaWQsIHVuc2lnbmVkIGxvbmcgbW9kZSwgZGV2X3QgcmRldikKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBzdGF0IHNiOworCisJaWYgKHRyYWNlKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRGV2aWNlOiAlcyAlcyAgVUlEOiAlbGQgIEdJRDogJWxkICBNT0RFOiAlMDRsbyAgTUFKT1I6ICVkICBNSU5PUjogJWQiLAorCQkJCXBhdGgsIG5hbWUsIHVpZCwgZ2lkLCBtb2RlLCAoc2hvcnQpKHJkZXYgPj4gOCksIChzaG9ydCkocmRldiAmIDB4ZmYpKTsKKwl9CisKKwltZW1zZXQoJnNiLCAwLCBzaXplb2Yoc3RydWN0IHN0YXQpKTsKKwlzdGF0dXMgPSBsc3RhdChwYXRoLCAmc2IpOworCWlmIChzdGF0dXMgPj0gMCkgeworCQkvKiBJdCBpcyBvayBmb3Igc29tZSB0eXBlcyBvZiBmaWxlcyB0byBub3QgZXhpdCBvbiBkaXNrIChzdWNoIGFzCisJCSAqIGRldmljZSBub2RlcyksIGJ1dCBpZiB0aGV5IF9kb18gZXhpc3QsIHRoZSBmaWxlIHR5cGUgYml0cyBoYWQKKwkJICogYmV0dGVyIG1hdGNoIHRob3NlIG9mIHRoZSBhY3R1YWwgZmlsZSBvciBzdHJhbmdlIHRoaW5ncyB3aWxsIGhhcHBlbi4uLiAqLworCQlpZiAoKG1vZGUgJiBTX0lGTVQpICE9IChzYi5zdF9tb2RlICYgU19JRk1UKSkgeworCQkJaWYgKHRyYWNlKQorCQkJCXB1dGMoJ1xuJywgc3RkZXJyKTsKKwkJCWVycm9yX21zZ19hbmRfZGllKCIlczogZXhpc3RpbmcgZmlsZSAoMDQlbykgdHlwZSBkb2VzIG5vdCBtYXRjaCBzcGVjaWZpZWQgZmlsZSB0eXBlICgwNCVsbykhIiwKKwkJCQkJCXBhdGgsIChzYi5zdF9tb2RlICYgU19JRk1UKSwgKG1vZGUgJiBTX0lGTVQpKTsKKwkJfQorCQlpZiAobW9kZSAhPSBzYi5zdF9tb2RlKSB7CisJCQlpZiAodHJhY2UpCisJCQkJZnByaW50ZihzdGRlcnIsICIgLS0gYXBwbHlpbmcgbmV3IG1vZGUgMDQlbG8gKG9sZCB3YXMgMDQlbylcbiIsIG1vZGUgJiB+U19JRk1ULCBzYi5zdF9tb2RlICYgflNfSUZNVCk7CisJCQkvKiBBcHBseSB0aGUgbW9kZSBzZXR0aW5nIHRvIHRoZSBleGlzdGluZyBkZXZpY2Ugbm9kZSAqLworCQkJY2htb2QocGF0aCwgbW9kZSAmIH5TX0lGTVQpOworCQl9CisJCWVsc2UgeworCQkJaWYgKHRyYWNlKQorCQkJCWZwcmludGYoc3RkZXJyLCAiIC0tIGV4dHJhbmVvdXMgZW50cnkgaW4gdGFibGVcbiIsIHBhdGgpOworCQl9CisJfQorCWVsc2UgeworCQlta25vZChwYXRoLCBtb2RlLCByZGV2KTsKKwkJaWYgKHRyYWNlKQorCQkJcHV0YygnXG4nLCBzdGRlcnIpOworCisJfQorCisJY2hvd24ocGF0aCwgdWlkLCBnaWQpOworfQorCitzdGF0aWMgdm9pZCBhZGRfbmV3X2ZpbGUoY2hhciAqbmFtZSwgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyB1aWQsCisJCQkJICB1bnNpZ25lZCBsb25nIGdpZCwgdW5zaWduZWQgbG9uZyBtb2RlKQoreworCWlmICh0cmFjZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkZpbGU6ICVzICVzICBVSUQ6ICVsZCAgR0lEOiAlbGQgIE1PREU6ICUwNGxvXG4iLAorCQkJcGF0aCwgbmFtZSwgZ2lkLCB1aWQsIG1vZGUpOworCX0KKworCWludCBmZCA9IG9wZW4ocGF0aCxPX0NSRUFUIHwgT19XUk9OTFksIG1vZGUpOworCWlmIChmZCA8IDApIHsKKwkJZXJyb3JfbXNnX2FuZF9kaWUoIiVzOiBmaWxlIGNhbiBub3QgYmUgY3JlYXRlZCEiLCBwYXRoKTsKKwl9IGVsc2UgeworCQljbG9zZShmZCk7CisJfQorCWNobW9kKHBhdGgsIG1vZGUpOworCWNob3duKHBhdGgsIHVpZCwgZ2lkKTsKK30KKworCitzdGF0aWMgdm9pZCBhZGRfbmV3X2ZpZm8oY2hhciAqbmFtZSwgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyB1aWQsCisJCQkJICB1bnNpZ25lZCBsb25nIGdpZCwgdW5zaWduZWQgbG9uZyBtb2RlKQoreworCWlmICh0cmFjZSkgeworCQlwcmludGYoIkZpZm86ICVzICVzICBVSUQ6ICVsZCAgR0lEOiAlbGQgIE1PREU6ICUwNGxvXG4iLAorCQkJcGF0aCwgbmFtZSwgZ2lkLCB1aWQsIG1vZGUpOworCX0KKworCWludCBzdGF0dXM7CisJc3RydWN0IHN0YXQgc2I7CisKKwltZW1zZXQoJnNiLCAwLCBzaXplb2Yoc3RydWN0IHN0YXQpKTsKKwlzdGF0dXMgPSBzdGF0KHBhdGgsICZzYik7CisKKworCS8qIFVwZGF0ZSB0aGUgbW9kZSBpZiB3ZSBleGlzdCBhbmQgYXJlIGEgZmlmbyBhbHJlYWR5ICovCisJaWYgKHN0YXR1cyA+PSAwICYmIFNfSVNGSUZPKHNiLnN0X21vZGUpKSB7CisJCWNobW9kKHBhdGgsIG1vZGUpOworCX0gZWxzZSB7CisJCWlmIChta25vZChwYXRoLCBtb2RlLCAwKSkKKwkJCWVycm9yX21zZ19hbmRfZGllKCIlczogZmlsZSBjYW4gbm90IGJlIGNyZWF0ZWQgd2l0aCBta25vZCEiLCBwYXRoKTsKKwl9CisJY2hvd24ocGF0aCwgdWlkLCBnaWQpOworfQorCisKKy8qICBkZXZpY2UgdGFibGUgZW50cmllcyB0YWtlIHRoZSBmb3JtIG9mOgorICAgIDxwYXRoPgk8dHlwZT4gPG1vZGU+CTx1c3I+CTxncnA+CTxtYWpvcj4JPG1pbm9yPgk8c3RhcnQ+CTxpbmM+CTxjb3VudD4KKyAgICAvZGV2L21lbSAgICBjICAgICAgNjQwICAgICAgMCAgICAgICAwICAgICAgIDEgICAgICAgMSAgICAgICAwICAgICAgICAwICAgICAgICAtCisgICAgL2Rldi96ZXJvICAgYyAgICAgIDY0NCAgICAgIHJvb3QgICAgcm9vdCAgICAxICAgICAgIDUgICAgICAgLSAgICAgICAgLSAgICAgICAgLQorCisgICAgdHlwZSBjYW4gYmUgb25lIG9mOgorCWYJQSByZWd1bGFyIGZpbGUKKwlkCURpcmVjdG9yeQorCWMJQ2hhcmFjdGVyIHNwZWNpYWwgZGV2aWNlIGZpbGUKKwliCUJsb2NrIHNwZWNpYWwgZGV2aWNlIGZpbGUKKwlwCUZpZm8gKG5hbWVkIHBpcGUpCisKKyAgICBJIGRvbid0IGJvdGhlciB3aXRoIHN5bWxpbmtzIChwZXJtaXNzaW9ucyBhcmUgaXJyZWxldmFudCksIGhhcmQKKyAgICBsaW5rcyAoc3BlY2lhbCBjYXNlcyBvZiByZWd1bGFyIGZpbGVzKSwgb3Igc29ja2V0cyAod2h5IGJvdGhlcikuCisKKyAgICBSZWd1bGFyIGZpbGVzIG11c3QgZXhpc3QgaW4gdGhlIHRhcmdldCByb290IGRpcmVjdG9yeS4gIElmIGEgY2hhciwKKyAgICBibG9jaywgZmlmbywgb3IgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuCisqLworc3RhdGljIGludCBpbnRlcnByZXRfdGFibGVfZW50cnkoY2hhciAqbGluZSkKK3sKKwljaGFyICpuYW1lOworCWNoYXIgdXNyX2J1ZltNQVhfSURfTEVOXTsKKwljaGFyIGdycF9idWZbTUFYX0lEX0xFTl07CisJY2hhciBwYXRoWzQwOTZdLCB0eXBlOworCXVuc2lnbmVkIGxvbmcgbW9kZSA9IDA3NTUsIHVpZCA9IDAsIGdpZCA9IDAsIG1ham9yID0gMCwgbWlub3IgPSAwOworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAwLCBpbmNyZW1lbnQgPSAxLCBjb3VudCA9IDA7CisKKwlpZiAoMCA+IHNzY2FuZihsaW5lLCAiJTQwcyAlYyAlbG8gJTQwcyAlNDBzICVsdSAlbHUgJWx1ICVsdSAlbHUiLCBwYXRoLAorCQkgICAgJnR5cGUsICZtb2RlLCB1c3JfYnVmLCBncnBfYnVmLCAmbWFqb3IsICZtaW5vciwgJnN0YXJ0LAorCQkgICAgJmluY3JlbWVudCwgJmNvdW50KSkKKwl7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6IHNzY2FuZiByZXR1cm5lZCA8IDAgZm9yIGxpbmUgJyVzJ1xuIiwgYXBwX25hbWUsIGxpbmUpOworCQlyZXR1cm4gMTsKKwl9CisKKwl1aWQgPSBjb252ZXJ0Mmd1aWQodXNyX2J1ZiwgdXNyX2xpc3QpOworCWdpZCA9IGNvbnZlcnQyZ3VpZChncnBfYnVmLCBncnBfbGlzdCk7CisKKwlpZiAoc3RybmNtcChwYXRoLCAiLyIsIDEpKSB7CisJCWVycm9yX21zZ19hbmRfZGllKCJEZXZpY2UgdGFibGUgZW50cmllcyByZXF1aXJlIGFic29sdXRlIHBhdGhzIik7CisJfQorCW5hbWUgPSB4c3RyZHVwKHBhdGggKyAxKTsKKwkvKiBwcmVmaXggcGF0aCB3aXRoIHJvb3RkaXIgKi8KKwlzcHJpbnRmKHBhdGgsICIlcy8lcyIsIHJvb3RkaXIsIG5hbWUpOworCisJLyogWFhYIFdoeSBpcyBuYW1lIHBhc3NlZCBpbnRvIGFsbCBvZiB0aGUgYWRkX25ld18qKCkgcm91dGluZXM/ICovCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSAnZCc6CisJCW1vZGUgfD0gU19JRkRJUjsKKwkJYWRkX25ld19kaXJlY3RvcnkobmFtZSwgcGF0aCwgdWlkLCBnaWQsIG1vZGUpOworCQlicmVhazsKKwljYXNlICdmJzoKKwkJbW9kZSB8PSBTX0lGUkVHOworCQlhZGRfbmV3X2ZpbGUobmFtZSwgcGF0aCwgdWlkLCBnaWQsIG1vZGUpOworCQlicmVhazsKKwljYXNlICdwJzoKKwkJbW9kZSB8PSBTX0lGSUZPOworCQlhZGRfbmV3X2ZpZm8obmFtZSwgcGF0aCwgdWlkLCBnaWQsIG1vZGUpOworCQlicmVhazsKKwljYXNlICdjJzoKKwljYXNlICdiJzoKKwkJbW9kZSB8PSAodHlwZSA9PSAnYycpID8gU19JRkNIUiA6IFNfSUZCTEs7CisJCWlmIChjb3VudCA+IDApIHsKKwkJCWludCBpOworCQkJZGV2X3QgcmRldjsKKwkJCWNoYXIgYnVmWzgwXTsKKworCQkJZm9yIChpID0gc3RhcnQ7IGkgPCBzdGFydCArIGNvdW50OyBpKyspIHsKKwkJCQlzcHJpbnRmKGJ1ZiwgIiVzJWQiLCBuYW1lLCBpKTsKKwkJCQlzcHJpbnRmKHBhdGgsICIlcy8lcyVkIiwgcm9vdGRpciwgbmFtZSwgaSk7CisJCQkJLyogRklYTUU6ICBNS0RFViB1c2VzIGlsbGljaXQgaW5zaWRlciBrbm93bGVkZ2Ugb2Yga2VybmVsCisJCQkJICogbWFqb3IvbWlub3IgcmVwcmVzZW50YXRpb24uLi4gICovCisJCQkJcmRldiA9IE1LREVWKG1ham9yLCBtaW5vciArIChpIC0gc3RhcnQpICogaW5jcmVtZW50KTsKKwkJCQlzcHJpbnRmKHBhdGgsICIlcy8lc1wwIiwgcm9vdGRpciwgYnVmKTsKKwkJCQlhZGRfbmV3X2RldmljZShidWYsIHBhdGgsIHVpZCwgZ2lkLCBtb2RlLCByZGV2KTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIEZJWE1FOiAgTUtERVYgdXNlcyBpbGxpY2l0IGluc2lkZXIga25vd2xlZGdlIG9mIGtlcm5lbAorCQkJICogbWFqb3IvbWlub3IgcmVwcmVzZW50YXRpb24uLi4gICovCisJCQlkZXZfdCByZGV2ID0gTUtERVYobWFqb3IsIG1pbm9yKTsKKwkJCWFkZF9uZXdfZGV2aWNlKG5hbWUsIHBhdGgsIHVpZCwgZ2lkLCBtb2RlLCByZGV2KTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnJvcl9tc2dfYW5kX2RpZSgiVW5zdXBwb3J0ZWQgZmlsZSB0eXBlIik7CisJfQorCWlmIChuYW1lKSBmcmVlKG5hbWUpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHBhcnNlX2RldmljZV90YWJsZShGSUxFICogZmlsZSkKK3sKKwljaGFyICpsaW5lOworCXNpemVfdCBsZW5ndGggPSAyNTY7CisJaW50IGxlbiA9IDA7CisKKwlpZigobGluZSA9IChjaGFyICopbWFsbG9jKGxlbmd0aCkpID09IE5VTEwpIHsKKwkJZXJyb3JfbXNnX2FuZF9kaWUobWVtb3J5X2V4aGF1c3RlZCk7CisJfQorCS8qIExvb2tzIG9rIHNvIGZhci4gIFRoZSBnZW5lcmFsIHBsYW4gbm93IGlzIHRvIHJlYWQgaW4gb25lCisJICogbGluZSBhdCBhIHRpbWUsIHRyaW0gb2ZmIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UsCisJICogY2hlY2sgZm9yIGxlYWRpbmcgY29tbWVudCBkZWxpbWl0ZXJzICgnIycpIG9yIGEgYmxhbmsgbGluZSwKKwkgKiB0aGVuIHRyeSBhbmQgcGFyc2UgdGhlIGxpbmUgYXMgYSBkZXZpY2UgdGFibGUgZW50cnkuIElmIHdlIGZhaWwKKwkgKiB0byBwYXJzZSB0aGluZ3MsIHRyeSBhbmQgaGVscCB0aGUgcG9vciBmb29sIHRvIGZpeCB0aGVpcgorCSAqIGRldmljZSB0YWJsZSB3aXRoIGEgdXNlZnVsIGVycm9yIG1zZy4uLiAqLworCisJd2hpbGUgKChsZW4gPSBnZXRsaW5lKCZsaW5lLCAmbGVuZ3RoLCBmaWxlKSkgIT0gLTEpIHsKKwkJLyogRmlyc3QgdHJpbSBvZmYgYW55IHdoaXRlc3BhY2UgKi8KKworCQkvKiB0cmltIHRyYWlsaW5nIHdoaXRlc3BhY2UgKi8KKwkJd2hpbGUgKGxlbiA+IDAgJiYgaXNzcGFjZShsaW5lW2xlbiAtIDFdKSkKKwkJCWxpbmVbLS1sZW5dID0gJ1wwJzsKKworCQkvKiB0cmltIGxlYWRpbmcgd2hpdGVzcGFjZSAqLworCQltZW1tb3ZlKGxpbmUsICZsaW5lW3N0cnNwbihsaW5lLCAiIFxuXHJcdFx2IildLCBsZW4gKyAxKTsKKworCQkvKiBJZiB0aGlzIGlzIE5PVCBhIGNvbW1lbnQgb3IgYW4gZW1wdHkgbGluZSwgdHJ5IHRvIGludGVycHJldCBpdCAqLworCQlpZiAoKmxpbmUgIT0gJyMnICYmICpsaW5lICE9ICdcMCcpIGludGVycHJldF90YWJsZV9lbnRyeShsaW5lKTsKKwl9CisKKwlpZiAobGluZSkKKwkJZnJlZShsaW5lKTsKK30KKworc3RhdGljIGludCBwYXJzZV9kZXZ0YWJsZShGSUxFICogZGV2dGFibGUpCit7CisJc3RydWN0IHN0YXQgc2I7CisKKwlpZiAobHN0YXQocm9vdGRpciwgJnNiKSkgeworCQlwZXJyb3JfbXNnX2FuZF9kaWUoIiVzIiwgcm9vdGRpcik7CisJfQorCWlmIChjaGRpcihyb290ZGlyKSkKKwkJcGVycm9yX21zZ19hbmRfZGllKCIlcyIsIHJvb3RkaXIpOworCisJaWYgKGRldnRhYmxlKQorCQlwYXJzZV9kZXZpY2VfdGFibGUoZGV2dGFibGUpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7CisJeyJyb290IiwgMSwgTlVMTCwgJ3InfSwKKwl7ImhlbHAiLCAwLCBOVUxMLCAnaCd9LAorCXsidHJhY2UiLCAwLCBOVUxMLCAndCd9LAorCXsidmVyc2lvbiIsIDAsIE5VTEwsICd2J30sCisJeyJkZXZ0YWJsZSIsIDEsIE5VTEwsICdEJ30sCisJe05VTEwsIDAsIE5VTEwsIDB9Cit9OworCitzdGF0aWMgY2hhciAqaGVscHRleHQgPQorCSJVc2FnZTogbWFrZWRldnMgW09QVElPTlNdXG4iCisJIkJ1aWxkIGVudHJpZXMgYmFzZWQgdXBvbiBkZXZpY2VfdGFibGUudHh0XG5cbiIKKwkiT3B0aW9uczpcbiIKKwkiICAtciwgLWQsIC0tcm9vdD1ESVIgICAgIEJ1aWxkIGZpbGVzeXN0ZW0gZnJvbSBkaXJlY3RvcnkgRElSIChkZWZhdWx0OiBjd2QpXG4iCisJIiAgLUQsIC0tZGV2dGFibGU9RklMRSAgICBVc2UgdGhlIG5hbWVkIEZJTEUgYXMgYSBkZXZpY2UgdGFibGUgZmlsZVxuIgorCSIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgRGlzcGxheSB0aGlzIGhlbHAgdGV4dFxuIgorCSIgIC10LCAtLXRyYWNlICAgICAgICAgICAgQmUgdmVyYm9zZVxuIgorCSIgIC12LCAtLXZlcnNpb24gICAgICAgICAgRGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uXG5cbiI7CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBjLCBvcHQ7CisJZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCWNoYXIgcGFzc3dkX3BhdGhbUEFUSF9NQVhdOworCWNoYXIgZ3JvdXBfcGF0aFtQQVRIX01BWF07CisJRklMRSAqcGFzc3dkX2ZpbGUgPSBOVUxMOworCUZJTEUgKmdyb3VwX2ZpbGUgPSBOVUxMOworCUZJTEUgKmRldnRhYmxlID0gTlVMTDsKKwlESVIgKmRpciA9IE5VTEw7CisKKwl1bWFzayAoMCk7CisKKwlpZiAoYXJnYz09MSkgeworCQlmcHJpbnRmKHN0ZGVyciwgaGVscHRleHQpOworCQlleGl0KDEpOworCX0KKworCXdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgIkQ6ZDpyOmh0diIsCisJCQlsb25nX29wdGlvbnMsICZjKSkgPj0gMCkgeworCQlzd2l0Y2ggKG9wdCkgeworCQljYXNlICdEJzoKKwkJCWRldnRhYmxlID0geGZvcGVuKG9wdGFyZywgInIiKTsKKwkJCWlmIChmc3RhdChmaWxlbm8oZGV2dGFibGUpLCAmc3RhdGJ1ZikgPCAwKQorCQkJCXBlcnJvcl9tc2dfYW5kX2RpZShvcHRhcmcpOworCQkJaWYgKHN0YXRidWYuc3Rfc2l6ZSA8IDEwKQorCQkJCWVycm9yX21zZ19hbmRfZGllKCIlczogbm90IGEgcHJvcGVyIGRldmljZSB0YWJsZSBmaWxlIiwgb3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJCXByaW50ZihoZWxwdGV4dCk7CisJCQlleGl0KDApOworCQljYXNlICdyJzoKKwkJY2FzZSAnZCc6CQkJCS8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbWtmcy5qZmZzLCBnZW5leHQyZnMsIGV0Yy4uLiAqLworCQkJaWYgKHJvb3RkaXIgIT0gZGVmYXVsdF9yb290ZGlyKSB7CisJCQkJZXJyb3JfbXNnX2FuZF9kaWUoInJvb3QgZGlyZWN0b3J5IHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSIpOworCQkJfQorCQkJaWYgKChkaXIgPSBvcGVuZGlyKG9wdGFyZykpID09IE5VTEwpIHsKKwkJCQlwZXJyb3JfbXNnX2FuZF9kaWUob3B0YXJnKTsKKwkJCX0gZWxzZSB7CisJCQkJY2xvc2VkaXIoZGlyKTsKKwkJCX0KKwkJCS8qIElmICIvIiBpcyBzcGVjaWZpZWQsIHVzZSAiIiBiZWNhdXNlIHJvb3RkaXIgaXMgYWx3YXlzIHByZXBlbmRlZCB0byBhCisJCQkgKiBzdHJpbmcgdGhhdCBzdGFydHMgd2l0aCAiLyIgKi8KKwkJCWlmICgwID09IHN0cmNtcChvcHRhcmcsICIvIikpCisJCQkJcm9vdGRpciA9IHhzdHJkdXAoIiIpOworCQkJZWxzZQorCQkJCXJvb3RkaXIgPSB4c3RyZHVwKG9wdGFyZyk7CisJCQlicmVhazsKKworCQljYXNlICd0JzoKKwkJCXRyYWNlID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ3YnOgorCQkJcHJpbnRmKCIlczogJXNcbiIsIGFwcF9uYW1lLCBWRVJTSU9OKTsKKwkJCWV4aXQoMCk7CisJCWRlZmF1bHQ6CisJCQlmcHJpbnRmKHN0ZGVyciwgaGVscHRleHQpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCWlmIChhcmd2W29wdGluZF0gIT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgaGVscHRleHQpOworCQlleGl0KDEpOworCX0KKworCS8vIEdldCBuYW1lLWlkIG1hcHBpbmcKKwlzcHJpbnRmKHBhc3N3ZF9wYXRoLCAiJXMvZXRjL3Bhc3N3ZCIsIHJvb3RkaXIpOworCXNwcmludGYoZ3JvdXBfcGF0aCwgIiVzL2V0Yy9ncm91cCIsIHJvb3RkaXIpOworCWlmICgocGFzc3dkX2ZpbGUgPSBmb3BlbihwYXNzd2RfcGF0aCwgInIiKSkgIT0gTlVMTCkgeworCQlnZXRfbGlzdF9mcm9tX2ZpbGUocGFzc3dkX2ZpbGUsICZ1c3JfbGlzdCk7CisJCWZjbG9zZShwYXNzd2RfZmlsZSk7CisJfQorCWlmICgoZ3JvdXBfZmlsZSA9IGZvcGVuKGdyb3VwX3BhdGgsICJyIikpICE9IE5VTEwpIHsKKwkJZ2V0X2xpc3RfZnJvbV9maWxlKGdyb3VwX2ZpbGUsICZncnBfbGlzdCk7CisJCWZjbG9zZShncm91cF9maWxlKTsKKwl9CisKKwkvLyBQYXJzZSBkZXZ0YWJsZQorCWlmKGRldnRhYmxlKSB7CisJCXBhcnNlX2RldnRhYmxlKGRldnRhYmxlKTsKKwkJZmNsb3NlKGRldnRhYmxlKTsKKwl9CisKKwkvLyBGcmVlIGxpc3QKKwlmcmVlX2xpc3QodXNyX2xpc3QpOworCWZyZWVfbGlzdChncnBfbGlzdCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzXzEuMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnNfMS4wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJkNTg3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzXzEuMC4xLmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiVG9vbCBmb3IgY3JlYXRpbmcgZGV2aWNlIG5vZGVzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTM5M2E1Y2E0NDVmNjk2NTg3M2VjYTAyNTlhMTdmODMzIgorU0VDVElPTiA9ICJiYXNlIgorU1JDX1VSSSA9ICJmaWxlOi8vbWFrZWRldnMuYyBcCisgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0iCisKK0ZJTEVTXyR7UE59X2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiICR7ZGF0YWRpcn0iCisKK2RvX2NvbXBpbGUoKSB7CisJJHtDQ30gJHtDRkxBR1N9ICR7TERGTEFHU30gLW8gJHtTfS9tYWtlZGV2cyAke1N9L21ha2VkZXZzLmMKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9tYWtlZGV2cyAke0R9JHtiYXNlX3NiaW5kaXJ9L21ha2VkZXZzCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9CisJaW5zdGFsbCAtbSA2NDQgJHtDT1JFQkFTRX0vbWV0YS9maWxlcy9kZXZpY2VfdGFibGUtbWluaW1hbC50eHQgJHtEfSR7ZGF0YWRpcn0vCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZS9jcm9zcy1jb21waWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlL2Nyb3NzLWNvbXBpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5MjcwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZS9jcm9zcy1jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK21ha2UgdGhlIHRvb2wgdG8gYmUgY3Jvc3MgY29tcGlsYWJsZS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogbWtlbGZJbWFnZS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBta2VsZkltYWdlLm9yaWcvY29uZmlndXJlLmFjCTIwMTItMDctMTQgMTQ6MDQ6NDguOTY0ODk4NjY3IC0wNzAwCisrKysgbWtlbGZJbWFnZS9jb25maWd1cmUuYWMJMjAxMi0wNy0xNCAxNDoxMDo0Ny44MDA5MTYwODMgLTA3MDAKK0BAIC03MCw2ICs3MCw5IEBACisgCQlBQ19NU0dfRVJST1IoW2NjIG5vdCBmb3VuZF0pCisgCWZpCisgCWV2YWwgIiR7d2l0aF9kZWZhdWx0fV9DQz0nJENDJyIKKysJaWYgdGVzdCAieCRIT1NUX0NDIiA9ICd4JzsgdGhlbgorKwkJQUNfQ0hFQ0tfUFJPRyhbSE9TVF9DQ10sIFskQ0NdLCBbJENDXSwgW2djY10sIFskUEFUSF0pCisrCWZpCisgCUFDX1BST0dfQ1BQCisgCWlmIHRlc3QgIiRDUFAiID0gbm87IHRoZW4KKyAJCUFDX01TR19FUlJPUihbY3BwIG5vdCBmb3VuZF0pCitAQCAtMTcyLDcgKzE3NSw2IEBACisgCisgZG5sIC0tLU91dHB1dCB2YXJpYWJsZXMuLi4KKyAKKy1IT1NUX0NDPSRDQworIEhPU1RfQ0ZMQUdTPSIkSE9TVF9DRkxBR1MgLU8yIC1XYWxsIFwkKEhPU1RfQ1BQRkxBR1MpIgorIAorIGRubCBUT0RPOiBmaWd1cmUgb3V0IGhvdyB0byBzZXQgdGhlc2UgYXBwcm9wcmlhdGVseSBmb3IgY29tcGlsZXJzIG90aGVyIHRoYW4gZ2NjCitJbmRleDogbWtlbGZJbWFnZS9saW51eC1pMzg2L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWtlbGZJbWFnZS5vcmlnL2xpbnV4LWkzODYvTWFrZWZpbGUJMjAxMi0wNy0xNCAxNDowNDo0OC45NjQ4OTg2NjcgLTA3MDAKKysrKyBta2VsZkltYWdlL2xpbnV4LWkzODYvTWFrZWZpbGUJMjAxMi0wNy0xNCAxNDowNDo0OS4wMzI4OTg2NzEgLTA3MDAKK0BAIC00LDcgKzQsNyBAQAorIAorICQoTEkzODZfT0JKKS9ta2VsZi1saW51eC1pMzg2Lm86ICQoTEkzODZfRElSKS9ta2VsZi1saW51eC1pMzg2LmMgJChMSTM4Nl9ESVIpL2NvbnZlcnQuYmluLmMgJChMSTM4Nl9ERVApCisgCSQoTUtESVIpIC1wICQoQEQpCistCSQoSE9TVF9DQykgJChIT1NUX0NGTEFHUykgLWMgLWcgJDwgLW8gJEAKKysJJChDQykgJChIT1NUX0NGTEFHUykgLWMgLWcgJDwgLW8gJEAKKyAKKyAKKyBpZmRlZiBJMzg2X0NDCitJbmRleDogbWtlbGZJbWFnZS9saW51eC1pYTY0L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWtlbGZJbWFnZS5vcmlnL2xpbnV4LWlhNjQvTWFrZWZpbGUJMjAxMi0wNy0xNCAxNDowNDo0OC45NjQ4OTg2NjcgLTA3MDAKKysrKyBta2VsZkltYWdlL2xpbnV4LWlhNjQvTWFrZWZpbGUJMjAxMi0wNy0xNCAxNDowNDo0OS4wMzI4OTg2NzEgLTA3MDAKK0BAIC00LDcgKzQsNyBAQAorIAorICQoTElBNjRfT0JKKS9ta2VsZi1saW51eC1pYTY0Lm86ICQoTElBNjRfRElSKS9ta2VsZi1saW51eC1pYTY0LmMgJChMSUE2NF9ESVIpL2NvbnZlcnQuYmluLmMgJChMSUE2NF9ERVApCisgCSQoTUtESVIpIC1wICQoQEQpCistCSQoSE9TVF9DQykgJChIT1NUX0NGTEFHUykgLWMgLWcgJDwgLW8gJEAKKysJJChDQykgJChIT1NUX0NGTEFHUykgLWMgLWcgJDwgLW8gJEAKKyAKKyBpZmRlZiBJQTY0X0NDCisgCitJbmRleDogbWtlbGZJbWFnZS9tYWluL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWtlbGZJbWFnZS5vcmlnL21haW4vTWFrZWZpbGUJMjAxMi0wNy0xNCAxNDowNDo0OC45NjQ4OTg2NjcgLTA3MDAKKysrKyBta2VsZkltYWdlL21haW4vTWFrZWZpbGUJMjAxMi0wNy0xNCAxNDowNDo0OS4wMzI4OTg2NzEgLTA3MDAKK0BAIC00LDExICs0LDExIEBACisgCisgJChPQkpESVIpL3NiaW4vbWtlbGZJbWFnZTogJChNS0VMRl9PQkpTKSAkKERFUFMpCisgCSQoTUtESVIpIC1wICQoQEQpCistCSQoSE9TVF9DQykgJChIT1NUX0NGTEFHUykgJChNS0VMRl9PQkpTKSAtbyAkQCAkKExJQlMpCisrCSQoQ0MpICQoSE9TVF9DRkxBR1MpICQoTUtFTEZfT0JKUykgLW8gJEAgJChMSUJTKQorIAorICQoT0JKRElSKS9tYWluL21rZWxmSW1hZ2UubzogbWFpbi9ta2VsZkltYWdlLmMgaW5jbHVkZS9ta2VsZkltYWdlLmggJChERVBTKQorIAkkKE1LRElSKSAtcCAkKEBEKQorLQkkKEhPU1RfQ0MpICQoSE9TVF9DRkxBR1MpIC1jICQ8IC1vICRACisrCSQoQ0MpICQoSE9TVF9DRkxBR1MpIC1jICQ8IC1vICRACisgCisgJChPQkpESVIpL21hbi9tYW44L21rZWxmSW1hZ2UuODogbWFpbi9ta2VsZkltYWdlLm1hbgorIAkkKE1LRElSKSAtcCAkKEBEKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlL2ZpeC1tYWtlZmlsZS10by1maW5kLWxpYnoucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2UvZml4LW1ha2VmaWxlLXRvLWZpbmQtbGliei5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTZhNjVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlL2ZpeC1tYWtlZmlsZS10by1maW5kLWxpYnoucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorTGV0IG1ha2VmaWxlIGZpbmQgbGlieiBhbmQgemxpYi5oIGJ5IENGTEFHUyBhbmQgTERGTEFHUy4KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGQxYWNjMzYuLjZmODY1YjAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTYyLDcgKzYyLDcgQEAgQUNfQ0hFQ0tfUFJPRyhbUlBNXSwgICBycG0sICAgcnBtLCAgIFtdLCBbJFBBVEhdKQorIEFDX0NIRUNLX1BST0coW1NFRF0sICAgc2VkLCAgIHNlZCwgICBbXSwgWyRQQVRIXSkKKyBBQ19DSEVDS19QUk9HKFtGSU5EXSwgIGZpbmQsICBmaW5kLCAgW10sIFskUEFUSF0pCisgCistQUNfQ0hFQ0tfSEVBREVSKHpsaWIuaCwgQUNfQ0hFQ0tfTElCKHosIGluZmxhdGVJbml0XywgW0FDX0RFRklORShIQVZFX1pMSUJfSCwgMSkgTElCUz0iJExJQlMgLWx6Il0pKQorK0FDX0NIRUNLX0hFQURFUih6bGliLmgsIEFDX0NIRUNLX0xJQih6LCBpbmZsYXRlSW5pdF8sIFtBQ19ERUZJTkUoSEFWRV9aTElCX0gsIDEpIExJQlM9IiRMSUJTICRMREZMQUdTIC1seiJdKSkKKyAKKyBkbmwgRmluZCB0aGUgZGVmYXVsdCBwcm9ncmFtcworIGlmIHRlc3QgIndpdGhfZGVmYXVsdCIgIT0gbm8gOyB0aGVuCitAQCAtMTc1LDcgKzE3NSw3IEBAIGZpCisgCisgZG5sIC0tLU91dHB1dCB2YXJpYWJsZXMuLi4KKyAKKy1IT1NUX0NGTEFHUz0iJEhPU1RfQ0ZMQUdTIC1PMiAtV2FsbCBcJChIT1NUX0NQUEZMQUdTKSIKKytIT1NUX0NGTEFHUz0iJEhPU1RfQ0ZMQUdTIC1PMiAtV2FsbCBcJChIT1NUX0NQUEZMQUdTKSAkQ0ZMQUdTIgorIAorIGRubCBUT0RPOiBmaWd1cmUgb3V0IGhvdyB0byBzZXQgdGhlc2UgYXBwcm9wcmlhdGVseSBmb3IgY29tcGlsZXJzIG90aGVyIHRoYW4gZ2NjCisgSTM4Nl9DRkxBR1M9IiRJMzg2X0NGTEFHUyAtT3MgLWZmcmVlc3RhbmRpbmcgLVdhbGwgLVcgLVduby1mb3JtYXQgXCQoSTM4Nl9DUFBGTEFHUykiCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2VfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NDViOGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2VfZ2l0LmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiVXRpbGl0eSBmb3IgY3JlYXRpbmcgRUxGIGJvb3QgaW1hZ2VzIGZvciBFTEYtYmFzZWQgTGludXgga2VybmVsIGltYWdlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuY29yZWJvb3Qub3JnL01rZWxmaW1hZ2UiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVhNWJlZDJmNjBkMzU3NjE4Y2ExNjFhZDUzOWY3YzBhIgorCitTUkNSRVYgPSAiNjg2YTQ4YTMzOWIzMjAwMTg0YzI3ZTdmOThkNGMwMzE4MGIyYmU2YyIKK1BWID0gIjQuMCtnaXQke1NSQ1BWfSIKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIm1rZWxmaW1hZ2UgaGFzIGJlZW4gcmVtb3ZlZCBpbiBjb3JlYm9vdCA0LjEgcmVsZWFzZTogXAoraHR0cDovL3Jldmlldy5jb3JlYm9vdC5vcmcvZ2l0d2ViP3A9Y29yZWJvb3QuZ2l0O2E9Y29tbWl0O2g9MzRmYzRhYjgwYjUwNzczOWUyNTgwZDQ5MGRmZjY3ZmNmZGRlMTFlYSIKKworCitERVBFTkRTICs9ICJ6bGliIgorCitTUkNfVVJJID0gImdpdDovL3Jldmlldy5jb3JlYm9vdC5vcmcvcC9jb3JlYm9vdDtwcm90b2NvbD1odHRwIFwKKyAgICAgICAgICAgZmlsZTovL2Nyb3NzLWNvbXBpbGUucGF0Y2ggICBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtbWFrZWZpbGUtdG8tZmluZC1saWJ6LnBhdGNoICAgXAorICAgICAgICAgICIKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworUyA9ICIke1dPUktESVJ9L2dpdC91dGlsL21rZWxmSW1hZ2UiCisKK0NGTEFHUyArPSAiLWZuby1zdGFjay1wcm90ZWN0b3IiCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiSE9TVF9DQz0nJHtCVUlMRF9DQ30nIgorRVhUUkFfT0VNQUtFICs9ICJIT1NUX0NQUEZMQUdTPScke0JVSUxEX0NQUEZMQUdTfSciCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybWRpciAke0R9JHtkYXRhZGlyfS9ta2VsZkltYWdlL2VsZjMyLWkzODYKKwlybWRpciAke0R9JHtkYXRhZGlyfS9ta2VsZkltYWdlCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2FjX2luaXRfZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2FjX2luaXRfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMmFmMTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvYWNfaW5pdF9maXgucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorR2V0IHRoZSB2ZXJzaW9uIG9mIG1rbGlicyBieSBzaW1wbGVyIG1lYW5zLiBUaGUgTUtMSUJTX1ZFUlNJT04gc3RyaW5nIGluIHRoZSAKK2NvbmZpZ3VyZS5hYyBmaWxlIGlzIHJlcGxhY2VkIHdpdGggcmVhbCB2ZXJzaW9uIHN0cmluZyBieSB0aGUgCitkb19jb25maWd1cmVfcHJlcGVuZCgpIGZ1bmN0aW9uIGZyb20gdGhlIHJlY2lwZSAuYmIgZmlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorRGF0ZTogMjAxMS8wMS8yNAorCitJbmRleDogbWtsaWJzL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1rbGlicy5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEwLTAyLTIxIDE3OjM0OjU2LjAwMDAwMDAwMCAtMDgwMAorKysrIG1rbGlicy9jb25maWd1cmUuYWMJMjAxMS0wMS0yNCAxODo1MjoxOS45NDMyNDIwNzkgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLUFDX0lOSVQoW21rbGlic10sbTRfZXN5c2NtZChkcGtnLXBhcnNlY2hhbmdlbG9nIHwgcGVybCAtbmUgJ3ByaW50ICQxIGlmIG0vXlZlcnNpb246ICguKikkLzsnKSkKKytBQ19JTklUKFtta2xpYnNdLCBNS0xJQlNfVkVSU0lPTikKKyBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduIG5vLWRlZmluZV0pCisgQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKKyBBTV9NQUlOVEFJTkVSX01PREUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9hdm9pZC1mYWlsdXJlLW9uLXN5bWJvbC1wcm92aWRlZC1ieS1hcHBsaWNhdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9hdm9pZC1mYWlsdXJlLW9uLXN5bWJvbC1wcm92aWRlZC1ieS1hcHBsaWNhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDZkNjJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2F2b2lkLWZhaWx1cmUtb24tc3ltYm9sLXByb3ZpZGVkLWJ5LWFwcGxpY2F0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitGcm9tIGYxNzIxMDExMzA2MDRlNGE5ZWZhNTc0NmY0ZDhkMzBkZTk5YTBmZGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBZdWFuamllIEh1YW5nIDx5dWFuamllLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDE3IEFwciAyMDE1IDE0OjQ4OjIwICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGF2b2lkIGZhaWx1cmUgb24gc3ltYm9sIHByb3ZpZGVkIGJ5IGFwcGxpY2F0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitVbmRlZmluZWQgc3ltYm9scyBpbiBhIGxpYnJhcnkgY2FuIGJlIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbgordGhhdCBsaW5rcyB0byB0aGUgbGlicmFyeSwgc3VjaCBhcyBgbG9nc2luaycgaW4gbGlibXVsdGlwYXRoLnNvLjAuCitUaGlzIGZpeCBjaGVja3MgdGhlIHR5cGUgb2Ygb2JqZWN0IGluIHdoaWNoIHRoZSBzeW1ib2wgaXMgbmVlZGVkCithbmQgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgc3ltYm9sIGluIGFwcGxpY2F0aW9uLCB3aGVuIGEgc3ltYm9sCitjYW5ub3QgYmUgcHJvdmlkZWQgYnkgbGlicmFyaWVzLiBJdCBwcmV2ZW50cyBmYWxzZSBhbGFybSBvbiBhYnNlbmNlCitvZiBzeW1ib2xzLgorCitTaWduZWQtb2ZmLWJ5OiBZdWFuamllIEh1YW5nIDx5dWFuamllLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvbWtsaWJzIHwgMjggKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL21rbGlicyBiL3NyYy9ta2xpYnMKK2luZGV4IGM1NjE0ZWEuLmIwZDkwMzQgMTAwNzU1CistLS0gYS9zcmMvbWtsaWJzCisrKysgYi9zcmMvbWtsaWJzCitAQCAtMTMzLDkgKzEzMyw5IEBAIGNsYXNzIFN5bWJvbChvYmplY3QpOgorICAgICAgICAgcmV0dXJuICdAJy5qb2luKHJldCkKKyAKKyBjbGFzcyBVbmRlZmluZWRTeW1ib2woU3ltYm9sKToKKy0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHdlYWssIHZlcnNpb24sIGxpYnJhcnkpOgorKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgd2VhaywgdmVyc2lvbiwgbGlicmFyeSwgb2JqZWN0KToKKyAgICAgICAgIHN1cGVyKFVuZGVmaW5lZFN5bWJvbCwgc2VsZikuX19pbml0X18obmFtZSwgdmVyc2lvbiwgbGlicmFyeSkKKy0gICAgICAgIHNlbGYud2Vhaywgc2VsZi5saWJyYXJ5ID0gd2VhaywgbGlicmFyeQorKyAgICAgICAgc2VsZi53ZWFrLCBzZWxmLmxpYnJhcnksIHNlbGYub2JqZWN0ID0gd2VhaywgbGlicmFyeSwgb2JqZWN0CisgCisgIyBSZXR1cm4gdW5kZWZpbmVkIHN5bWJvbHMgaW4gYW4gb2JqZWN0IGFzIGEgc2V0IG9mIHR1cGxlcyAobmFtZSwgd2Vha25lc3MpCisgZGVmIHVuZGVmaW5lZF9zeW1ib2xzKG9iaik6CitAQCAtMTQ0LDYgKzE0NCwxMSBAQCBkZWYgdW5kZWZpbmVkX3N5bWJvbHMob2JqKToKKyAKKyAgICAgb3V0cHV0ID0gY29tbWFuZCgibWtsaWJzLXJlYWRlbGYiLCAiLS1wcmludC1zeW1ib2xzLXVuZGVmaW5lZCIsIG9iaikKKyAKKysgICAgaWYgbGVuKG9iaikgPiBsZW4oZGVzdF9wYXRoKSBhbmQgb2JqWzpsZW4oZGVzdF9wYXRoKV0gPT0gZGVzdF9wYXRoOgorKyAgICAgICAgb2JqZWN0ID0gb2JqW2xlbihkZXN0X3BhdGgpICsgMTotbGVuKCctc28tc3RyaXBwZWQnKV0KKysgICAgZWxzZToKKysgICAgICAgIG9iamVjdCA9IG9iagorKworICAgICByZXN1bHQgPSBbXQorICAgICBmb3IgbGluZSBpbiBvdXRwdXQ6CisgICAgICAgICBuYW1lLCB3ZWFrX3N0cmluZywgdmVyc2lvbl9zdHJpbmcsIGxpYnJhcnlfc3RyaW5nID0gbGluZS5zcGxpdCgpWzo0XQorQEAgLTE2MCw3ICsxNjUsNyBAQCBkZWYgdW5kZWZpbmVkX3N5bWJvbHMob2JqKToKKyAgICAgICAgIGlmIGxpYnJhcnlfc3RyaW5nLmxvd2VyKCkgIT0gJ25vbmUnOgorICAgICAgICAgICAgIGxpYnJhcnkgPSBsaWJyYXJ5X3N0cmluZworIAorLSAgICAgICAgcmVzdWx0LmFwcGVuZChVbmRlZmluZWRTeW1ib2wobmFtZSwgd2VhaywgdmVyc2lvbiwgbGlicmFyeSkpCisrICAgICAgICByZXN1bHQuYXBwZW5kKFVuZGVmaW5lZFN5bWJvbChuYW1lLCB3ZWFrLCB2ZXJzaW9uLCBsaWJyYXJ5LCBvYmplY3QpKQorIAorICAgICByZXR1cm4gcmVzdWx0CisgCitAQCAtNDk1LDEyICs1MDAsMTMgQEAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICAgICAgICBhbmQgcmUuc2VhcmNoKCJecHNfIiwgc3RyKHN5bWJvbCkpKQorICAgICAgICAgICAgICAgICBhbmQgbm90IChyZS5zZWFyY2goImxkLWxpbnV4LnNvLjMkIiwgc3RyKHN5bWJvbCkpKQorICAgICAgICAgICAgICAgICBhbmQgbm90IChyZS5zZWFyY2goIl5fX2dudV9sb2NhbF9ncCIsIHN0cihzeW1ib2wpKSkpOgorLSAgICAgICAgICAgICAgICBkZWJ1ZyhERUJVR19TUEFNLCAibmVlZGVkX3N5bWJvbHMgYWRkaW5nICVzLCB3ZWFrOiAlcyIgJSAoc3ltYm9sLCBzeW1ib2wud2VhaykpCisrICAgICAgICAgICAgICAgIGRlYnVnKERFQlVHX1NQQU0sICJuZWVkZWRfc3ltYm9scyBhZGRpbmcgJXMsIHdlYWs6ICVzLCBmb3IgJXMiICUgKHN5bWJvbCwgc3ltYm9sLndlYWssIG9iaikpCisgICAgICAgICAgICAgICAgIG5lZWRlZF9zeW1ib2xzW3N0cihzeW1ib2wpXSA9IHN5bWJvbAorICAgICAgICAgbGlicmFyaWVzLnVwZGF0ZShsaWJyYXJ5X2RlcGVuZHMob2JqKSkKKyAKKyAgICAgIyBjYWxjdWxhdGUgd2hhdCBzeW1ib2xzIGFyZSBwcmVzZW50IGluIHNtYWxsX2xpYnMgYW5kIGF2YWlsYWJsZV9saWJzCisgICAgIHByZXNlbnRfc3ltYm9scyA9IHt9CisrICAgIHByZXNlbnRfc3ltYm9sX3Byb2dzID0ge30KKyAgICAgY2hlY2tlZF9saWJzID0gc21hbGxfbGlicworICAgICBjaGVja2VkX2xpYnMuZXh0ZW5kKGF2YWlsYWJsZV9saWJzKQorICAgICBjaGVja2VkX2xpYnMuYXBwZW5kKGxkbGliKQorQEAgLTUxMCw2ICs1MTYsMTIgQEAgd2hpbGUgMToKKyAgICAgICAgICAgICBuYW1lcyA9IHN5bWJvbC5iYXNlX25hbWVzKCkKKyAgICAgICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgICAgICAgcHJlc2VudF9zeW1ib2xzW25hbWVdID0gc3ltYm9sCisrICAgICAgICAgICAgaWYgbm90IHNvX3BhdHRlcm4ubWF0Y2gobGliKToKKysgICAgICAgICAgICAgICAgZGVidWcoREVCVUdfU1BBTSwgInByZXNlbnRfc3ltYm9sX3Byb2dzIGFkZGluZyAlcywgZnJvbSBleGVjdXRhYmxlICVzIiAlICgnICcuam9pbihuYW1lcyksIGxpYikpCisrICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorKyAgICAgICAgICAgICAgICAgICAgcHJvZ3MgPSBwcmVzZW50X3N5bWJvbF9wcm9ncy5nZXQobmFtZSwgc2V0KCkpCisrICAgICAgICAgICAgICAgICAgICBwcm9ncy5hZGQobGliKQorKyAgICAgICAgICAgICAgICAgICAgcHJlc2VudF9zeW1ib2xfcHJvZ3NbbmFtZV0gPSBwcm9ncworIAorICAgICAjIGFyZSB3ZSBmaW5pc2hlZD8KKyAgICAgbnVtX3VucmVzb2x2ZWQgPSAwCitAQCAtNTY1LDYgKzU3NywxNCBAQCB3aGlsZSAxOgorICAgICBmb3IgbmFtZSBpbiBuZWVkZWRfc3ltYm9sczoKKyAgICAgICAgIGlmIG5vdCBuYW1lIGluIHN5bWJvbF9wcm92aWRlcjoKKyAgICAgICAgICAgICBpZiBub3QgbmVlZGVkX3N5bWJvbHNbbmFtZV0ud2VhazoKKysgICAgICAgICAgICAgICAgIyBXT1JLQVJPVU5EOiBVbmRlZmluZWQgc3ltYm9scyBpbiBhIGxpYnJhcnkgY2FuIGJlIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbgorKyAgICAgICAgICAgICAgICAjIHRoYXQgbGlua3MgdG8gdGhlIGxpYnJhcnkuIFNvIGlmIHRoZSBvYmplY3Qgd2hpY2ggcmVxdWlyZXMgdGhlIHN5bWJvbCBpcyBhIGxpYnJhcnkKKysgICAgICAgICAgICAgICAgIyBhbmQgc29tZSBhcHBsaWNhdGlvbiBjYW4gcHJvdmlkZSB0aGUgc3ltYm9sLCB0aGUgdW5kZWZpbmVkIHN5bWJvbCBpcyBza2lwcGVkLgorKyAgICAgICAgICAgICAgICBzeW1ib2wgPSBuZWVkZWRfc3ltYm9sc1tuYW1lXQorKyAgICAgICAgICAgICAgICBpZiBzb19wYXR0ZXJuLm1hdGNoKHN5bWJvbC5vYmplY3QpIGFuZCBwcmVzZW50X3N5bWJvbF9wcm9ncy5nZXQobmFtZSwgTm9uZSk6CisrICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhERUJVR19TUEFNLCAic3ltYm9sICVzIGluIGxpYnJhcnkgJXMgaXMgcHJvdmlkZWQgYnkgZXhlY3V0YWJsZSAlcyIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobmFtZSwgc3ltYm9sLm9iamVjdCwgJyAnLmpvaW4ocHJlc2VudF9zeW1ib2xfcHJvZ3NbbmFtZV0pKSkKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTm8gbGlicmFyeSBwcm92aWRlcyBub24td2VhayAlcyIgJSBuYW1lKQorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICBsaWIgPSBzeW1ib2xfcHJvdmlkZXJbbmFtZV0KKy0tIAorMS44LjUuMi4yMzMuZzkzMmY3ZTQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2ZpeF9TVFRfR05VX0lGVU5DLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2ZpeF9TVFRfR05VX0lGVU5DLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyN2E0ODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvZml4X1NUVF9HTlVfSUZVTkMucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVGhlIGxpYmM2LWRldiBpbiBVYnVudHUgOS4wNCBpcyBzbyBvbGQgdGhhdCB0aGUgZWxmLmggZG9lc24ndAorZGVmaW5lIFNUVF9HTlVfSUZVTkMsIHNvIHdlIGhhdmUgdG8gZGVmaW5lIGl0IG91cnNlbHZlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0gLSBvbGQgcmVsZWFzZSBzcGVjaWZpYywgbWF5YmUgcmVtb3ZhYmxlCisKKy0tIERleHVhbiBDdWkgKGRleHVhbi5jdWlAaW50ZWwuY29tKSBGZWIgMTYsIDIwMTEuCisKK2RpZmYgLS1naXQgYS9zcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAgYi9zcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAKK2luZGV4IDI0NDRjMzkuLjU2ZDkzZjggMTAwNjQ0CistLS0gYS9zcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAKKysrKyBiL3NyYy9ta2xpYnMtcmVhZGVsZi9tYWluLmNwcAorQEAgLTYsNiArNiwxNCBAQAorICNpbmNsdWRlIDx2ZWN0b3I+CisgCisgI2luY2x1ZGUgPGVsZi5oPgorKy8qCisrICogVGhlIC91c3IvaW5jbHVkZS9lbGYuaCBpbiBzb21lIGRpc3RyaWJ1dGlvbnMobGlrZSBVYnVudHUgOS4wNCkgZG9lc24ndAorKyAqIGRlZmluZSB0aGUgbWFjcm8uIFdlIG5lZWQgdG8gZGVmaW5lIGl0IGhlcmUuCisrICovCisrI2lmbmRlZiBTVFRfR05VX0lGVU5DCisrI2RlZmluZSBTVFRfR05VX0lGVU5DICAgMTAgICAgICAgICAgICAgIC8qIFN5bWJvbCBpcyBpbmRpcmVjdCBjb2RlIG9iamVjdCAqLworKyNlbmRpZgorKworICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAKKyAjaW5jbHVkZSAiZWxmLmhwcCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9maXhfY3Jvc3NfY29tcGlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9maXhfY3Jvc3NfY29tcGlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2U0NjA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2ZpeF9jcm9zc19jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsODEgQEAKK1JlbW92ZSBkZXBlbmRlbmN5IG9uIGRwa2cKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworQXNraW5nIHRoZSBob3N0IE9TIHdoZXRoZXIgaXQgc3VwcG9ydHMgbXVsdGlhcmNoIGlzIG5vdCB1c2VmdWwKK2luIGEgY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnQsIG9yIGlmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQKK2EgbGliZGlyIGV4cGxpY2l0bHkuIFNvIHRoaXMgcGF0Y2gsIGJhc2VkIG9uIHRoZSB3b3JrIG9mIE1lbnRvcgorR3JhcGhpY3MsIHJlbW92ZXMgbWtsaWJzJ3MgZGVwZW5kZW5jeSBvbiBkcGtnIHBhY2thZ2UuCisKK1NpZ25lZC1vZmYtYnk6IFl1YW5qaWUgSHVhbmcgPFl1YW5qaWUuSHVhbmdAd2luZHJpdmVyLmNvbT4KKyBzcmMvbWtsaWJzIHwgMzAgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL21rbGlicyBiL3NyYy9ta2xpYnMKK2luZGV4IGQ5Yjc4NGIuLmM1NjE0ZWEgMTAwNzU1CistLS0gYS9zcmMvbWtsaWJzCisrKysgYi9zcmMvbWtsaWJzCitAQCAtMjYxLDYgKzI2MSwxMSBAQCBkZWYgZXh0cmFjdF9zb25hbWUoc29fZmlsZSk6CisgICAgIHJldHVybiAiIgorIAorIGRlZiBtdWx0aWFyY2gocGF0aHMpOgorKyAgICAjIEFza2luZyB0aGUgaG9zdCBPUyB3aGV0aGVyIGl0IHN1cHBvcnRzIG11bHRpYXJjaCBpcyBub3QgdXNlZnVsCisrICAgICMgaW4gYSBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudCwgb3IgaWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZAorKyAgICAjIGEgbGliZGlyIGV4cGxpY2l0bHkuCisrICAgIGlmIHN5c3Jvb3QgIT0gIiIgb3IgbGliZGlyICE9ICIiOgorKyAgICAgICAgcmV0dXJuIHBhdGhzCisgICAgIGRldm51bGwgPSBvcGVuKCcvZGV2L251bGwnLCAndycpCisgICAgIGRwa2dfYXJjaGl0ZWN0dXJlID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgIFsnZHBrZy1hcmNoaXRlY3R1cmUnLCAnLXFERUJfSE9TVF9NVUxUSUFSQ0gnXSwKK0BAIC0zNDAsNyArMzQ1LDcgQEAgbGliX3BhdGggPSBbXQorIGRlc3RfcGF0aCA9ICJERVNUIgorIGxkbGliID0gIkxETElCIgorIGluY2x1ZGVfZGVmYXVsdF9saWJfcGF0aCA9ICJ5ZXMiCistZGVmYXVsdF9saWJfcGF0aCA9IG11bHRpYXJjaChbIi9saWIvIiwgIi91c3IvbGliLyIsICIvdXNyL1gxMVI2L2xpYi8iXSkKKytkZWZhdWx0X2xpYl9wYXRoID0gWyIvbGliLyIsICIvdXNyL2xpYi8iLCAiL3Vzci9YMTFSNi9saWIvIl0KKyBsaWJjX2V4dHJhc19kaXIgPSAiL3Vzci9saWIvbGliY19waWMiCisgbGliY19leHRyYXNfZGlyX2RlZmF1bHQgPSBUcnVlCisgbGliZGlyID0gImxpYiIKK0BAIC0zODYsNyArMzkxLDcgQEAgZm9yIG9wdCwgYXJnIGluIG9wdGxpc3Q6CisgICAgIGVsaWYgb3B0ID09ICItLWxpYmRpciI6CisgICAgICAgICBsaWJkaXIgPSBhcmcKKyAgICAgZWxpZiBvcHQgaW4gKCItLWhlbHAiLCAiLWgiKToKKy0JdXNhZ2UoMCkKKysgICAgICAgIHVzYWdlKDApCisgICAgICAgICBzeXMuZXhpdCgwKQorICAgICBlbGlmIG9wdCBpbiAoIi0tdmVyc2lvbiIsICItViIpOgorICAgICAgICAgdmVyc2lvbih2ZXJzKQorQEAgLTM5NSw2ICs0MDAsNyBAQCBmb3Igb3B0LCBhcmcgaW4gb3B0bGlzdDoKKyAgICAgICAgIHByaW50ICJXQVJOSU5HOiB1bmtub3duIG9wdGlvbjogIiArIG9wdCArICJcdGFyZzogIiArIGFyZworIAorIGlmIGluY2x1ZGVfZGVmYXVsdF9saWJfcGF0aCA9PSAieWVzIjoKKysgICAgZGVmYXVsdF9saWJfcGF0aCA9IG11bHRpYXJjaChkZWZhdWx0X2xpYl9wYXRoKQorICAgICBsaWJfcGF0aC5leHRlbmQoW2EucmVwbGFjZSgiL2xpYi8iLCAiLyIgKyBsaWJkaXIgKyAiLyIpIGZvciBhIGluIGRlZmF1bHRfbGliX3BhdGhdKQorIAorIGlmIGxpYmNfZXh0cmFzX2Rpcl9kZWZhdWx0OgorQEAgLTY2MSwxNiArNjY5LDE2IEBAIGxkX3BhdGhfbmFtZSA9IG9zLnBhdGguZGlybmFtZShsZGxpYikKKyBsZF9mdWxsX3BhdGggPSAiLi4vIiArIGxkbGliCisgbGRfZmlsZSA9IGZpbmRfbGliKGxkX2ZpbGVfbmFtZSkKKyAKKy1pZiBsZF9wYXRoX25hbWUgIT0gIi9saWIiOgorLSAgICBpZiBvcy5hY2Nlc3MoZGVzdF9wYXRoICsgIi8iICsgbGRfZmlsZV9uYW1lLCBvcy5GX09LKToKKy0gICAgICAgIG9zLnJlbW92ZShkZXN0X3BhdGggKyAiLyIgKyBsZF9maWxlX25hbWUpCisrI2lmIGxkX3BhdGhfbmFtZSAhPSAiL2xpYiI6CisrIyAgICBpZiBvcy5hY2Nlc3MoZGVzdF9wYXRoICsgIi8iICsgbGRfZmlsZV9uYW1lLCBvcy5GX09LKToKKysjICAgICAgICBvcy5yZW1vdmUoZGVzdF9wYXRoICsgIi8iICsgbGRfZmlsZV9uYW1lKQorIAorLWlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkZXN0X3BhdGggKyAiLy4uLyIgKyBsZF9wYXRoX25hbWUpOgorLSAgICBvcy5ta2RpcihkZXN0X3BhdGggKyAiLy4uLyIgKyBsZF9wYXRoX25hbWUpCisrI2lmIG5vdCBvcy5wYXRoLmV4aXN0cyhkZXN0X3BhdGggKyAiLy4uLyIgKyBsZF9wYXRoX25hbWUpOgorKyMgICAgb3MubWtkaXIoZGVzdF9wYXRoICsgIi8uLi8iICsgbGRfcGF0aF9uYW1lKQorIAorLWlmIG5vdCBvcy5hY2Nlc3MoZGVzdF9wYXRoICsgIi8iICsgbGRfZnVsbF9wYXRoLCBvcy5GX09LKToKKy0gICAgZGVidWcoREVCVUdfTk9STUFMLCAiSTogc3RyaXBwaW5nIGFuZCBjb3B5aW5nIGR5bmFtaWMgbGlua2VyIHRvICIgKyBsZF9mdWxsX3BhdGgpCisraWYgbm90IG9zLmFjY2VzcyhkZXN0X3BhdGggKyAiLyIgKyBsZF9maWxlX25hbWUsIG9zLkZfT0spOgorKyAgICBkZWJ1ZyhERUJVR19OT1JNQUwsICJJOiBzdHJpcHBpbmcgYW5kIGNvcHlpbmcgZHluYW1pYyBsaW5rZXIgdG8gIiArIGxkX2ZpbGVfbmFtZSkKKyAgICAgY29tbWFuZCh0YXJnZXQgKyAib2JqY29weSIsICItLXN0cmlwLXVubmVlZGVkIC1SIC5ub3RlIC1SIC5jb21tZW50IiwKKy0gICAgICAgICAgICBsZF9maWxlLCBkZXN0X3BhdGggKyAiLyIgKyBsZF9mdWxsX3BhdGgpCisrICAgICAgICAgICAgbGRfZmlsZSwgZGVzdF9wYXRoICsgIi8iICsgbGRfZmlsZV9uYW1lKQorIAorLW9zLmNobW9kKGRlc3RfcGF0aCArICIvIiArIGxkX2Z1bGxfcGF0aCwgMDc1NSkKKytvcy5jaG1vZChkZXN0X3BhdGggKyAiLyIgKyBsZF9maWxlX25hbWUsIDA3NTUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvc2hvdy1HTlUtdW5pcXVlLXN5bWJvbHMtYXMtcHJvdmlkZWQtc3ltYm9scy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9zaG93LUdOVS11bmlxdWUtc3ltYm9scy1hcy1wcm92aWRlZC1zeW1ib2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNTY1OTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvc2hvdy1HTlUtdW5pcXVlLXN5bWJvbHMtYXMtcHJvdmlkZWQtc3ltYm9scy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIGVkZGYwNGM3ZjgzMTJlOWMyOWNkYjI0ZTQzMWI3ZTRmYjJjYzcwZWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBZdWFuamllIEh1YW5nIDx5dWFuamllLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDE1IEFwciAyMDE1IDE0OjAwOjA2ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIFNob3cgR05VIHVuaXF1ZSBzeW1ib2xzIGFzIHByb3ZpZGVkIHN5bWJvbHMKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworR05VIFVuaXF1ZSBzeW1ib2wgaXMgYSBHTlUgZXh0ZW5zaW9uIGVtcGxveWVkIGJ5IG5ldyB2ZXJzaW9uIG9mIEdDQworYnkgZGVmYXVsdC4gRXZlbiBTdGFuZGFyZCBDKysgbGlicmFyeSBpbiBHQ0MgNC45IHByb3ZpZGVzIHNvbWUgc3ltYm9scywKK3N1Y2ggYXMgX1pOU3M0X1JlcDIwX1NfZW1wdHlfcmVwX3N0b3JhZ2VFIGluIHRoaXMgYmluZGluZyB0eXBlIGluc3RlYWQKK29mIEVMRiBzdGFuZGFyZCB3ZWFrIGJpbmRpbmcuCitUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBvZiB0aGlzIG5ldyBiaW5kaW5nIHR5cGUgdG8gbWtsaWJzLXJlYWRlbGYuCisKK1NpZ25lZC1vZmYtYnk6IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9ta2xpYnMtcmVhZGVsZi9tYWluLmNwcCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9ta2xpYnMtcmVhZGVsZi9tYWluLmNwcCBiL3NyYy9ta2xpYnMtcmVhZGVsZi9tYWluLmNwcAoraW5kZXggNTZkOTNmOC4uMDEzNDUzMCAxMDA2NDQKKy0tLSBhL3NyYy9ta2xpYnMtcmVhZGVsZi9tYWluLmNwcAorKysrIGIvc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwCitAQCAtODgsNyArODgsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3N5bWJvbHNfcHJvdmlkZWQgKGNvbnN0IEVsZjo6c2VjdGlvbl90eXBlPEVsZjo6c2VjdGlvbl90eXBlXworICAgICB1aW50OF90IHR5cGUgPSBzeW1ib2wtPmdldF90eXBlICgpOworICAgICBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSA9IHN5bWJvbC0+Z2V0X25hbWVfc3RyaW5nICgpOworIAorLSAgICBpZiAoYmluZCAhPSBTVEJfR0xPQkFMICYmIGJpbmQgIT0gU1RCX1dFQUspCisrICAgIGlmIChiaW5kICE9IFNUQl9HTE9CQUwgJiYgYmluZCAhPSBTVEJfV0VBSyAmJiBiaW5kICE9IFNUQl9HTlVfVU5JUVVFKQorICAgICAgIGNvbnRpbnVlOworICAgICBpZiAoc2huZHggPT0gU0hOX1VOREVGIHx8IHNobmR4ID09IFNITl9BQlMpCisgICAgICAgY29udGludWU7CistLSAKKzEuOC41LjIuMjMzLmc5MzJmN2U0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9zeXNyb290ZWQtbGRzby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9zeXNyb290ZWQtbGRzby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTUwMGEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL3N5c3Jvb3RlZC1sZHNvLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK0luIGNyb3NzIGJ1aWxkcyB3ZSB3aWxsIGhhdmUgdG8gcmVzcGVjdCBzeXNyb290CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IG1rbGlicy0wLjEuMzkvc3JjL21rbGlicworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1rbGlicy0wLjEuMzkub3JpZy9zcmMvbWtsaWJzCTIwMTQtMDMtMDEgMTg6MjU6MzYuMDAwMDAwMDAwICswMDAwCisrKysgbWtsaWJzLTAuMS4zOS9zcmMvbWtsaWJzCTIwMTQtMTAtMTkgMDA6NTE6NDYuODEzNTM0NTk2ICswMDAwCitAQCAtNDk1LDcgKzQ5NSw3IEBACisgICAgIHByZXNlbnRfc3ltYm9scyA9IHt9CisgICAgIGNoZWNrZWRfbGlicyA9IHNtYWxsX2xpYnMKKyAgICAgY2hlY2tlZF9saWJzLmV4dGVuZChhdmFpbGFibGVfbGlicykKKy0gICAgY2hlY2tlZF9saWJzLmFwcGVuZChsZGxpYikKKysgICAgY2hlY2tlZF9saWJzLmFwcGVuZChzeXNyb290ICsgbGRsaWIpCisgICAgIGZvciBsaWIgaW4gY2hlY2tlZF9saWJzOgorICAgICAgICAgZm9yIHN5bWJvbCBpbiBwcm92aWRlZF9zeW1ib2xzKGxpYik6CisgICAgICAgICAgICAgZGVidWcoREVCVUdfU1BBTSwgInByZXNlbnRfc3ltYm9scyBhZGRpbmcgJXMiICUgc3ltYm9sKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL21rbGlicy1uYXRpdmVfMC4xLjQwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL21rbGlicy1uYXRpdmVfMC4xLjQwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZmVjMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvbWtsaWJzLW5hdGl2ZV8wLjEuNDAuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJTaGFyZWQgbGlicmFyeSBvcHRpbWlzYXRpb24gdG9vbCIKK0RFU0NSSVBUSU9OID0gIm1rbGlicyBwcm9kdWNlcyBjdXQtZG93biBzaGFyZWQgbGlicmFyaWVzIHRoYXQgY29udGFpbiBvbmx5IHRoZSByb3V0aW5lcyByZXF1aXJlZCBieSBhIHBhcnRpY3VsYXIgc2V0IG9mIGV4ZWN1dGFibGVzLiIKK0hPTUVQQUdFID0gImh0dHBzOi8vbGF1bmNocGFkLm5ldC9ta2xpYnMiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kZWJpYW4vY29weXJpZ2h0O21kNT05OGQzMTAzN2IxM2Q4OTZlMzM4OTA3MzhlZjAxYWY2NCIKK0RFUEVORFMgPSAicHl0aG9uLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vZnRwLmRlLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9tL21rbGlicy8ke0JQTn1fJHtQVn0udGFyLnh6IFwKKwlmaWxlOi8vYWNfaW5pdF9maXgucGF0Y2hcCisJZmlsZTovL2ZpeF9TVFRfR05VX0lGVU5DLnBhdGNoXAorCWZpbGU6Ly9zeXNyb290ZWQtbGRzby5wYXRjaCBcCisJZmlsZTovL2F2b2lkLWZhaWx1cmUtb24tc3ltYm9sLXByb3ZpZGVkLWJ5LWFwcGxpY2F0aW9uLnBhdGNoIFwKKwlmaWxlOi8vc2hvdy1HTlUtdW5pcXVlLXN5bWJvbHMtYXMtcHJvdmlkZWQtc3ltYm9scy5wYXRjaCBcCisJZmlsZTovL2ZpeF9jcm9zc19jb21waWxlLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImUxZGFmZTVmOTYyY2FhOWRjNWYyNjUxYzA3MjM4MTJhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFkYjI0YWU3NzlkMjFjY2ZlZDQ5ZjIyZTQ5YTJiN2VlNDNlYzBlOTE5N2JjMjA2ZDgxY2QwMmY5NmU5MWUxMjUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgbmF0aXZlIHB5dGhvbm5hdGl2ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbW1jL21tYy11dGlscy8wMDAxLW1tYy5oLWRvbi10LWluY2x1ZGUtYXNtLWdlbmVyaWMtaW50LWxsNjQuaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21tYy9tbWMtdXRpbHMvMDAwMS1tbWMuaC1kb24tdC1pbmNsdWRlLWFzbS1nZW5lcmljLWludC1sbDY0LmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyNGRlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21tYy9tbWMtdXRpbHMvMDAwMS1tbWMuaC1kb24tdC1pbmNsdWRlLWFzbS1nZW5lcmljLWludC1sbDY0LmgucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK21tYy5oOiBkb24ndCBpbmNsdWRlIDxhc20tZ2VuZXJpYy9pbnQtbGw2NC5oPgorCitJbmNsdWRpbmcgdGhpcyBmaWxlIGNhdXNlcyBhIGNvbXBpbGUgZmFpbHVyZSBmb3IgcWVtdW1pcHM2NC4KK1RoaXMgZmlsZSBpcyBub3QgbmVlZGVkIHRvIGJlIGV4cGxpY2l0bHkgaW5jbHVkZWQsIGJlY2F1c2UgaXQgd2lsbCBiZQoraW5jbHVkZWQgYnkgdGhlIDxsaW51eC9tbWMvaW9jdGwuaD4gZmlsZSBpZiBfTUlQU19TWkxPTkcgaXMgbm90IDY0LgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBtbWMuaCB8ICAgIDEgLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9tbWMuaCBiL21tYy5oCitpbmRleCA5ODcxZDYyLi4zZGYyY2RmIDEwMDY0NAorLS0tIGEvbW1jLmgKKysrKyBiL21tYy5oCitAQCAtMTQsNyArMTQsNiBAQAorICAqIEJvc3RvbiwgTUEgMDIxMTEwLTEzMDcsIFVTQS4KKyAgKi8KKyAKKy0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4KKyAjaW5jbHVkZSA8bGludXgvbW1jL2lvY3RsLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbW1jL21tYy11dGlsc19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTUwMzYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbW1jL21tYy11dGlsc19naXQuYmIKQEAgLTAsMCArMSwyMyBAQAorREVTQ1JJUFRJT04gPSAiVXNlcnNwYWNlIHRvb2xzIGZvciBNTUMvU0QgZGV2aWNlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXQua2VybmVsLm9yZy9jZ2l0L2xpbnV4L2tlcm5lbC9naXQvY2piL21tYy11dGlscy5naXQvIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL21tYy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PWQ3NzQ3ZmM4N2YxZWIyMmI5NDZlZjgxOTk2OTUwM2YwIgorCitCUkFOQ0ggPz0gIm1hc3RlciIKK1NSQ1JFViA9ICJmNGViMjQxNTE5ZjhkNTAwY2U2MDY4YTcwZDIzODliZTM5YWM1MTg5IgorCitQViA9ICIwLjEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2NqYi9tbWMtdXRpbHMuZ2l0O2JyYW5jaD0ke0JSQU5DSH0gXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1tbWMuaC1kb24tdC1pbmNsdWRlLWFzbS1nZW5lcmljLWludC1sbDY0LmgucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNlZCAtaSAiczotV2Vycm9yOjpnIiAke1N9L01ha2VmaWxlCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1IG1tYyAke0R9JHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzLzAwMDEtaGFzaHRhYmxlLVJlbW92ZS1kdXBsaWNhdGUtaGFzaHRhYmxlX2l0ZXJhdG9yX3ZhbHVlLS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvMDAwMS1oYXNodGFibGUtUmVtb3ZlLWR1cGxpY2F0ZS1oYXNodGFibGVfaXRlcmF0b3JfdmFsdWUtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMzYxNTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzLzAwMDEtaGFzaHRhYmxlLVJlbW92ZS1kdXBsaWNhdGUtaGFzaHRhYmxlX2l0ZXJhdG9yX3ZhbHVlLS5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIGI4NTZmZjM1YzIwMTI0Y2VhZTQwYmJjNGQzMjU4NGRmNDc2MThjOTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNSBGZWIgMjAxNSAwOToyODoyNiArMDAwMAorU3ViamVjdDogW1BBVENIXSBoYXNodGFibGU6IFJlbW92ZSBkdXBsaWNhdGUgaGFzaHRhYmxlX2l0ZXJhdG9yX3ZhbHVlL2hhc2h0YWJsZV9pdGVyYXRvcl9rZXkKKworZ2NjNSBpcyBkZWZhdWx0aW5nIHRvIGdudTExIGluc3RlYWQgb2YgZ251ODkgbGlrZSBwcmV2aW91cyB2ZXJzaW9ucworYXMgYSByZXN1bHQgdGhlIHNlbWFudGljcyBvZiAnZXh0ZXJuIGlubGluZScgY2hhbmdlcyB3aGVyZSBpbiBnbnU4OSBmb3IgJ2V4dGVybiBpbmxpbmUnIG5vIGV4dGVybmFsCit2aXNpYmxlIGZ1bmN0aW9uIGlzIGdlbmVyYXRlZCxpbiBjOTkgJ2V4dGVybmFsIGlubGluZScgZ2VuZXJhdGVzIGV4dGVybmFsbHkgdmlzaWJsZSBmdW5jdGlvbgordGhlcmUgaXMgbm8gZXF1aXZhbGVudCBpbiBjOTkrIGJlY2F1c2UgcmVkZWZpbml0aW9ucyBhcmVudCBhbGxvd2VkCitidXQgJ3N0YXRpYyBpbmxpbmUnIHJlbWFpbnMgc2FtZSBmb3IgZm9yIGM4OSBhbmQgYzk5KywgdGhhdHMgd2h5IHdlIGNoYW5nZSB0aGUgc2VtYW50aWNzCitzbyB3ZSBtYWtlIHRoZSBmdW5jdGlvbnMgc3RhdGljIGlubGluZSwgYW5kIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKKworLS0tCisgbWtmcy51Ymlmcy9oYXNodGFibGUvaGFzaHRhYmxlX2l0ci5jIHwgMTIgLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEyIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2l0L21rZnMudWJpZnMvaGFzaHRhYmxlL2hhc2h0YWJsZV9pdHIuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL21rZnMudWJpZnMvaGFzaHRhYmxlL2hhc2h0YWJsZV9pdHIuaAorKysrIGdpdC9ta2ZzLnViaWZzL2hhc2h0YWJsZS9oYXNodGFibGVfaXRyLmgKK0BAIC0yOCw3ICsyOCw3IEBAIGhhc2h0YWJsZV9pdGVyYXRvcihzdHJ1Y3QgaGFzaHRhYmxlICpoKTsKKyAvKiBoYXNodGFibGVfaXRlcmF0b3Jfa2V5CisgICogLSByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAoa2V5LHZhbHVlKSBwYWlyIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uICovCisgCistZXh0ZXJuIGlubGluZSB2b2lkICoKKytzdGF0aWMgaW5saW5lIHZvaWQgKgorIGhhc2h0YWJsZV9pdGVyYXRvcl9rZXkoc3RydWN0IGhhc2h0YWJsZV9pdHIgKmkpCisgeworICAgICByZXR1cm4gaS0+ZS0+azsKK0BAIC0zNyw3ICszNyw3IEBAIGhhc2h0YWJsZV9pdGVyYXRvcl9rZXkoc3RydWN0IGhhc2h0YWJsZV8KKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgLyogdmFsdWUgLSByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAoa2V5LHZhbHVlKSBwYWlyIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uICovCisgCistZXh0ZXJuIGlubGluZSB2b2lkICoKKytzdGF0aWMgaW5saW5lIHZvaWQgKgorIGhhc2h0YWJsZV9pdGVyYXRvcl92YWx1ZShzdHJ1Y3QgaGFzaHRhYmxlX2l0ciAqaSkKKyB7CisgICAgIHJldHVybiBpLT5lLT52OworSW5kZXg6IGdpdC9ta2ZzLnViaWZzL2hhc2h0YWJsZS9oYXNodGFibGVfaXRyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9ta2ZzLnViaWZzL2hhc2h0YWJsZS9oYXNodGFibGVfaXRyLmMKKysrKyBnaXQvbWtmcy51Ymlmcy9oYXNodGFibGUvaGFzaHRhYmxlX2l0ci5jCitAQCAtMzUsMTggKzM1LDYgQEAgaGFzaHRhYmxlX2l0ZXJhdG9yKHN0cnVjdCBoYXNodGFibGUgKmgpCisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy0vKiBrZXkgICAgICAtIHJldHVybiB0aGUga2V5IG9mIHRoZSAoa2V5LHZhbHVlKSBwYWlyIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uICovCistLyogdmFsdWUgICAgLSByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAoa2V5LHZhbHVlKSBwYWlyIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uICovCistCistdm9pZCAqCistaGFzaHRhYmxlX2l0ZXJhdG9yX2tleShzdHJ1Y3QgaGFzaHRhYmxlX2l0ciAqaSkKKy17IHJldHVybiBpLT5lLT5rOyB9CistCistdm9pZCAqCistaGFzaHRhYmxlX2l0ZXJhdG9yX3ZhbHVlKHN0cnVjdCBoYXNodGFibGVfaXRyICppKQorLXsgcmV0dXJuIGktPmUtPnY7IH0KKy0KKy0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgLyogYWR2YW5jZSAtIGFkdmFuY2UgdGhlIGl0ZXJhdG9yIHRvIHRoZSBuZXh0IGVsZW1lbnQKKyAgKiAgICAgICAgICAgcmV0dXJucyB6ZXJvIGlmIGFkdmFuY2VkIHRvIGVuZCBvZiB0YWJsZSAqLworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy9hZGQtZXhjbHVzaW9uLXRvLW1rZnMtamZmczItZ2l0LTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL2FkZC1leGNsdXNpb24tdG8tbWtmcy1qZmZzMi1naXQtMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2Q2YTMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy9hZGQtZXhjbHVzaW9uLXRvLW1rZnMtamZmczItZ2l0LTIucGF0Y2gKQEAgLTAsMCArMSwxMDMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gL3RtcC9ta2ZzLmpmZnMyLmMJMjAwOS0wMS0xMSAxNToyODo0MS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnaXQvbWtmcy5qZmZzMi5jCTIwMDktMDEtMTEgMTU6NTk6MjkuMDAwMDAwMDAwICswMTAwCitAQCAtMTAwLDYgKzEwMCwxMSBAQAorIAlzdHJ1Y3QgcmJfbm9kZSBoYXJkbGlua19yYjsKKyB9OworIAorK3N0cnVjdCBpZ25vcmVwYXRoX2VudHJ5IHsKKysJc3RydWN0IGlnbm9yZXBhdGhfZW50cnkqIG5leHQ7ICAvKiBQb2ludHMgdG8gdGhlIG5leHQgaWdub3JlcGF0aCBlbGVtZW50ICovCisrCWNoYXIgbmFtZVtQQVRIX01BWF07ICAgICAgICAvKiBOYW1lIG9mIHRoZSBlbnRyeSAqLworK307Cisrc3RhdGljIHN0cnVjdCBpZ25vcmVwYXRoX2VudHJ5KiBpZ25vcmVwYXRoID0gMDsKKyBzdHJ1Y3QgcmJfcm9vdCBoYXJkbGlua3M7Cisgc3RhdGljIGludCBvdXRfZmQgPSAtMTsKKyBzdGF0aWMgaW50IGluX2ZkID0gLTE7CitAQCAtNDA4LDcgKzQxMyw3IEBACisgCWNoYXIgKmhwYXRoLCAqdHBhdGg7CisgCXN0cnVjdCBkaXJlbnQgKmRwLCAqKm5hbWVsaXN0OworIAlzdHJ1Y3QgZmlsZXN5c3RlbV9lbnRyeSAqZW50cnk7CistCisrCXN0cnVjdCBpZ25vcmVwYXRoX2VudHJ5KiBlbGVtZW50ID0gaWdub3JlcGF0aDsKKyAKKyAJaWYgKGxzdGF0KGhvc3RwYXRoLCAmc2IpKSB7CisgCQlwZXJyb3JfbXNnX2FuZF9kaWUoIiVzIiwgaG9zdHBhdGgpOworQEAgLTQxNyw2ICs0MjIsMTUgQEAKKyAJZW50cnkgPSBhZGRfaG9zdF9maWxlc3lzdGVtX2VudHJ5KHRhcmdldHBhdGgsIGhvc3RwYXRoLAorIAkJCXNiLnN0X3VpZCwgc2Iuc3RfZ2lkLCBzYi5zdF9tb2RlLCAwLCBwYXJlbnQpOworIAorKwl3aGlsZSAoIGVsZW1lbnQgKSB7CisrCQlpZiAoIHN0cmNtcCggZWxlbWVudC0+bmFtZSwgdGFyZ2V0cGF0aCApID09IDAgKSB7CisrCQkJcHJpbnRmKCAiTm90ZTogaWdub3JpbmcgZGlyZWN0b3JpZXMgYmVsb3cgJyVzJ1xuIiwgdGFyZ2V0cGF0aCApOworKwkJCXJldHVybiBlbnRyeTsKKysJCQlicmVhazsKKysJCX0KKysJCWVsZW1lbnQgPSBlbGVtZW50LT5uZXh0OworKwl9CisrCisgCW4gPSBzY2FuZGlyKGhvc3RwYXRoLCAmbmFtZWxpc3QsIDAsIGFscGhhc29ydCk7CisgCWlmIChuIDwgMCkgeworIAkJcGVycm9yX21zZ19hbmRfZGllKCJvcGVuaW5nIGRpcmVjdG9yeSAlcyIsIGhvc3RwYXRoKTsKK0BAIC0xNDUzLDYgKzE0NjcsNyBAQAorIAl7InJvb3QiLCAxLCBOVUxMLCAncid9LAorIAl7InBhZ2VzaXplIiwgMSwgTlVMTCwgJ3MnfSwKKyAJeyJlcmFzZWJsb2NrIiwgMSwgTlVMTCwgJ2UnfSwKKysJeyJpZ25vcmUiLCAxLCBOVUxMLCAnSSd9LAorIAl7Im91dHB1dCIsIDEsIE5VTEwsICdvJ30sCisgCXsiaGVscCIsIDAsIE5VTEwsICdoJ30sCisgCXsidmVyYm9zZSIsIDAsIE5VTEwsICd2J30sCitAQCAtMTUwMCw2ICsxNTE1LDcgQEAKKyAiICAtTCwgLS1saXN0LWNvbXByZXNzb3JzICBTaG93IHRoZSBsaXN0IG9mIHRoZSBhdmFpYWJsZSBjb21wcmVzc29yc1xuIgorICIgIC10LCAtLXRlc3QtY29tcHJlc3Npb24gIENhbGwgZGVjb21wcmVzcyBhbmQgY29tcGFyZSB3aXRoIHRoZSBvcmlnaW5hbCAoZm9yIHRlc3QpXG4iCisgIiAgLW4sIC0tbm8tY2xlYW5tYXJrZXJzICAgRG9uJ3QgYWRkIGEgY2xlYW5tYXJrZXIgdG8gZXZlcnkgZXJhc2VibG9ja1xuIgorKyIgIC1JLCAtLWlnbm9yZT1QQVRIICAgICAgIElnbm9yZSBzdWIgZGlyZWN0b3J5IGFuZCBmaWxlIHRyZWUgYmVsb3cgUEFUSCB3aGVuIHJlY3Vyc2luZyBvdmVyIHRoZSBmaWxlIHN5c3RlbVxuIgorICIgIC1vLCAtLW91dHB1dD1GSUxFICAgICAgIE91dHB1dCB0byBGSUxFIChkZWZhdWx0OiBzdGRvdXQpXG4iCisgIiAgLWwsIC0tbGl0dGxlLWVuZGlhbiAgICAgQ3JlYXRlIGEgbGl0dGxlLWVuZGlhbiBmaWxlc3lzdGVtXG4iCisgIiAgLWIsIC0tYmlnLWVuZGlhbiAgICAgICAgQ3JlYXRlIGEgYmlnLWVuZGlhbiBmaWxlc3lzdGVtXG4iCitAQCAtMTY2Niw2ICsxNjgyLDcgQEAKKyAJY2hhciAqY29tcHJfbmFtZSA9IE5VTEw7CisgCWludCBjb21wcl9wcmlvciAgPSAtMTsKKyAJaW50IHdhcm5fcGFnZV9zaXplID0gMDsKKysJc3RydWN0IGlnbm9yZXBhdGhfZW50cnkqIGVsZW1lbnQgPSBpZ25vcmVwYXRoOworIAorIAlwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CisgCWlmIChwYWdlX3NpemUgPCAwKSAvKiBTeXN0ZW0gZG9lc24ndCBrbm93IHNvIC4uLiAqLworQEAgLTE2NzYsNyArMTY5Myw3IEBACisgCWpmZnMyX2NvbXByZXNzb3JzX2luaXQoKTsKKyAKKyAJd2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LAorLQkJCQkJIkQ6ZDpyOnM6bzpxVVBmaD92VmU6bGJwOjpuYzptOng6WDpMdHk6aToiLCBsb25nX29wdGlvbnMsICZjKSkgPj0gMCkKKysJCQkJCSJEOmQ6cjpzOkk6bzpxVVBmaD92VmU6bGJwOjpuYzptOng6WDpMdHk6aToiLCBsb25nX29wdGlvbnMsICZjKSkgPj0gMCkKKyAJeworIAkJc3dpdGNoIChvcHQpIHsKKyAJCQljYXNlICdEJzoKK0BAIC0xNzAwLDYgKzE3MTcsMjggQEAKKyAJCQkJd2Fybl9wYWdlX3NpemUgPSAwOyAvKiBzZXQgYnkgdXNlciwgc28gZG9uJ3QgbmVlZCB0byB3YXJuICovCisgCQkJCWJyZWFrOworIAorKwkJCWNhc2UgJ0knOgorKwkJCQlwcmludGYoICJOb3RlOiBBZGRpbmcgJyVzJyB0byBpZ25vcmUgUGF0aFxuIiwgb3B0YXJnICk7CisrCQkJCWVsZW1lbnQgPSBpZ25vcmVwYXRoOworKwkJCQlpZiAoICFpZ25vcmVwYXRoICkgeworKwkJCQkJaWdub3JlcGF0aCA9IHhtYWxsb2MoIHNpemVvZiggc3RydWN0IGlnbm9yZXBhdGhfZW50cnkgKSApOworKwkJCQkJaWdub3JlcGF0aC0+bmV4dCA9IDA7CisrCQkJCQlzdHJjcHkoICZpZ25vcmVwYXRoLT5uYW1lWzBdLCBvcHRhcmcgKTsKKysJCQkJfSBlbHNlIHsKKysJCQkJCXdoaWxlICggZWxlbWVudC0+bmV4dCApIGVsZW1lbnQgPSBlbGVtZW50LT5uZXh0OworKwkJCQkJZWxlbWVudC0+bmV4dCA9IHhtYWxsb2MoIHNpemVvZiggc3RydWN0IGlnbm9yZXBhdGhfZW50cnkgKSApOworKyAJCQkJCWVsZW1lbnQtPm5leHQtPm5leHQgPSAwOworKwkJCQkJc3RyY3B5KCAmZWxlbWVudC0+bmV4dC0+bmFtZVswXSwgb3B0YXJnICk7CisrCQkJCX0KKysJCQkJcHJpbnRmKCAiLS0tLS0tLS0tIER1bXBpbmcgaWdub3JlIHBhdGggbGlzdCAtLS0tLS0tLS0tLS0tLS0tXG4iICk7CisrCQkJCWVsZW1lbnQgPSBpZ25vcmVwYXRoOworKwkJCQl3aGlsZSAoIGVsZW1lbnQgKSB7CisrCQkJCQlwcmludGYoICIgICogJyVzJ1xuIiwgJmVsZW1lbnQtPm5hbWVbMF0gKTsKKysJCQkJCWVsZW1lbnQgPSBlbGVtZW50LT5uZXh0OworKwkJCQl9CisrCQkJCXByaW50ZiggIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIiApOworKwkJCQlicmVhazsKKysKKyAJCQljYXNlICdvJzoKKyAJCQkJaWYgKG91dF9mZCAhPSAtMSkgeworIAkJCQkJZXJyb3JfbXNnX2FuZF9kaWUoIm91dHB1dCBmaWxlbmFtZSBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UiKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvZml4LWFybXY3LW5lb24tYWxpZ25tZW50LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy9maXgtYXJtdjctbmVvbi1hbGlnbm1lbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVmMTYyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvZml4LWFybXY3LW5lb24tYWxpZ25tZW50LnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitORU9OIGluc3RydWN0aW9uIFZMRDEuNjQgd2FzIHVzZWQgdG8gY29weSA2NCBiaXRzIGRhdGEgYWZ0ZXIgdHlwZQorY2FzdGluZywgYW5kIHRoZXkgd2lsbCB0cmlnZ2VyIGFsaWdubWVudCB0cmFwLgorVGhpcyBwYXRjaCB1c2VzIG1lbWNweSB0byBhdm9pZCBhbGlnbm1lbnQgcHJvYmxlbS4KKworU2lnbmVkLW9mZi1ieTogWXVhbmppZSBIdWFuZyA8WXVhbmppZS5IdWFuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvbWtmcy51Ymlmcy9rZXkuaCBiL21rZnMudWJpZnMva2V5LmgKK2luZGV4IGQzYTAyZDQuLmU3ZTkyMTggMTAwNjQ0CistLS0gYS9ta2ZzLnViaWZzL2tleS5oCisrKysgYi9ta2ZzLnViaWZzL2tleS5oCitAQCAtMTQxLDEwICsxNDEsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGRhdGFfa2V5X2luaXQodW5pb24gdWJpZnNfa2V5ICprZXksIGlub190IGludW0sCisgICovCisgc3RhdGljIGlubGluZSB2b2lkIGtleV93cml0ZShjb25zdCB1bmlvbiB1Ymlmc19rZXkgKmZyb20sIHZvaWQgKnRvKQorIHsKKy0JdW5pb24gdWJpZnNfa2V5ICp0ID0gdG87CisrCV9fbGUzMiB4WzJdOworIAorLQl0LT5qMzJbMF0gPSBjcHVfdG9fbGUzMihmcm9tLT51MzJbMF0pOworLQl0LT5qMzJbMV0gPSBjcHVfdG9fbGUzMihmcm9tLT51MzJbMV0pOworKwl4WzBdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzBdKTsKKysJeFsxXSA9IGNwdV90b19sZTMyKGZyb20tPnUzMlsxXSk7CisrCisrCW1lbWNweSh0bywgJngsIDgpOworIAltZW1zZXQodG8gKyA4LCAwLCBVQklGU19NQVhfS0VZX0xFTiAtIDgpOworIH0KKyAKK0BAIC0xNTYsMTAgKzE1OCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQga2V5X3dyaXRlKGNvbnN0IHVuaW9uIHViaWZzX2tleSAqZnJvbSwgdm9pZCAqdG8pCisgICovCisgc3RhdGljIGlubGluZSB2b2lkIGtleV93cml0ZV9pZHgoY29uc3QgdW5pb24gdWJpZnNfa2V5ICpmcm9tLCB2b2lkICp0bykKKyB7CistCXVuaW9uIHViaWZzX2tleSAqdCA9IHRvOworKwlfX2xlMzIgeFsyXTsKKysKKysJeFswXSA9IGNwdV90b19sZTMyKGZyb20tPnUzMlswXSk7CisrCXhbMV0gPSBjcHVfdG9fbGUzMihmcm9tLT51MzJbMV0pOworIAorLQl0LT5qMzJbMF0gPSBjcHVfdG9fbGUzMihmcm9tLT51MzJbMF0pOworLQl0LT5qMzJbMV0gPSBjcHVfdG9fbGUzMihmcm9tLT51MzJbMV0pOworKwltZW1jcHkodG8sICZ4LCA4KTsKKyB9CisgCisgLyoqCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL210ZC11dGlscy1maXgtY29ycnVwdC1jbGVhbm1hcmtlci13aXRoLWZsYXNoX2VyYXNlLS1qLWNvbW1hbmQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL210ZC11dGlscy1maXgtY29ycnVwdC1jbGVhbm1hcmtlci13aXRoLWZsYXNoX2VyYXNlLS1qLWNvbW1hbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIwN2NmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvbXRkLXV0aWxzLWZpeC1jb3JydXB0LWNsZWFubWFya2VyLXdpdGgtZmxhc2hfZXJhc2UtLWotY29tbWFuZC5wYXRjaApAQCAtMCwwICsxLDEzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitGcm9tIHBhdGNod29yayBNb24gQXVnICA4IDA4OjE2OjQzIDIwMTEKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorU3ViamVjdDogbXRkLXV0aWxzOiBmaXggY29ycnVwdCBjbGVhbm1hcmtlciB3aXRoIGZsYXNoX2VyYXNlIC1qIGNvbW1hbmQKK0RhdGU6IFN1biwgMDcgQXVnIDIwMTEgMjI6MTY6NDMgLTAwMDAKK0Zyb206IGIzNTM2MkBmcmVlc2NhbGUuY29tCitYLVBhdGNod29yay1JZDogMTA4ODczCitNZXNzYWdlLUlkOiA8MTMxMjc5MTQwMy0xMzQ3My0xLWdpdC1zZW5kLWVtYWlsLWIzNTM2MkBmcmVlc2NhbGUuY29tPgorVG86IDxkd213MkBpbmZyYWRlYWQub3JnPgorQ2M6IExpdSBTaHVvIDxiMzUzNjJAZnJlZXNjYWxlLmNvbT4sIEFydGVtLkJpdHl1dHNraXlAbm9raWEuY29tLAorIExpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+LCBsaW51eC1tdGRAbGlzdHMuaW5mcmFkZWFkLm9yZworCitGcm9tOiBMaXUgU2h1byA8YjM1MzYyQGZyZWVzY2FsZS5jb20+CisKK0ZsYXNoX2VyYXNlIC1qIHNob3VsZCBmaWxsIGRpc2NyZXRlIGZyZWVvb2IgYXJlYXMgd2l0aCByZXF1aXJlZCBieXRlcworb2YgSkZGUzIgY2xlYW5tYXJrZXIgaW4gamZmczJfY2hlY2tfbmFuZF9jbGVhbm1hcmtlcigpLiBOb3QganVzdCBmaWxsCit0aGUgZmlyc3QgZnJlZW9vYiBhcmVhLgorCitUaGUgYmVsb3cgaXMgdGhlIHJlc3VsdCB3aXRob3V0IHRoaXMgd29ya2Fyb3VuZDoKKworSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMDAwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDA0MDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAwODAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMGMwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDEwMDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAxNDAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMTgwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDFjMDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAyMDAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMjQwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDI4MDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCisuLi4KKworU2lnbmVkLW9mZi1ieTogTGl1IFNodW8gPGIzNTM2MkBmcmVlc2NhbGUuY29tPgorU2lnbmVkLW9mZi1ieTogTGkgWWFuZyA8bGVvbGlAZnJlZXNjYWxlLmNvbT4KKworVXBkYXRlZCBmb3IgdGhlIG5ldyB2ZXJzaW9uCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCistLS0KK3YyIDogZ2V0IGxlbmd0aCBvZiBhdmFpbGJsZSBmcmVlb29iIGJ5dGVzIGZyb20gb29iaW5mbyBpbmZvcm1hdGlvbiwKKyAgICAgIG5vdCB1c2UgdGhlIGlvY3RsIEVDQ0dFVExBWU9VVCB3aGljaCBpcyBiZWluZyBkZXByZWNhdGVkLgorCisgZmxhc2hfZXJhc2UuYyB8ICAgNDYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMzkgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2ZsYXNoX2VyYXNlLmMgYi9mbGFzaF9lcmFzZS5jCitpbmRleCA5MzMzNzNhLi40YjlkODRiIDEwMDY0NAorLS0tIGEvZmxhc2hfZXJhc2UuYworKysrIGIvZmxhc2hfZXJhc2UuYworQEAgLTk5LDYgKzk5LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJYm9vbCBpc05BTkQ7CisgCWludCBlcnJvciA9IDA7CisgCW9mZl90IG9mZnNldCA9IDA7CisrCXZvaWQgKm9vYl9kYXRhID0gTlVMTDsKKyAKKyAJLyoKKyAJICogUHJvY2VzcyB1c2VyIGFyZ3VtZW50cworQEAgLTIwMSwxNSArMjAyLDQzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCQkJaWYgKGlvY3RsKGZkLCBNRU1HRVRPT0JTRUwsICZvb2JpbmZvKSAhPSAwKQorIAkJCQlyZXR1cm4gc3lzX2Vycm1zZygiJXM6IHVuYWJsZSB0byBnZXQgTkFORCBvb2JpbmZvIiwgbXRkX2RldmljZSk7CisgCisrCQkJY2xlYW5tYXJrZXIudG90bGVuID0gY3B1X3RvX2plMzIoOCk7CisgCQkJLyogQ2hlY2sgZm9yIGF1dG9wbGFjZW1lbnQgKi8KKyAJCQlpZiAob29iaW5mby51c2VlY2MgPT0gTVREX05BTkRFQ0NfQVVUT1BMQUNFKSB7CistCQkJCS8qIEdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGZyZWUgYnl0ZXMgKi8KKy0JCQkJaWYgKCFvb2JpbmZvLm9vYmZyZWVbMF1bMV0pCisrCQkJCXN0cnVjdCBuYW5kX2VjY2xheW91dF91c2VyIGVjY2xheW91dDsKKysJCQkJaW50IGksIG9vYmF2YWlsOworKworKwkJCQlmb3IgKGkgPSAwLCBvb2JhdmFpbCA9IDA7IG9vYmluZm8ub29iZnJlZVtpXVsxXTsgaSsrKQorKwkJCQkJb29iYXZhaWwgKz0gb29iaW5mby5vb2JmcmVlW2ldWzFdOworKworKwkJCQlpZiAoIW9vYmF2YWlsKQorIAkJCQkJcmV0dXJuIGVycm1zZygiIEVlZXAuIEF1dG9wbGFjZW1lbnQgc2VsZWN0ZWQgYW5kIG5vIGVtcHR5IHNwYWNlIGluIG9vYiIpOworKworKwkJCQkvKiBHZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBmcmVlIGJ5dGVzICovCisgCQkJCWNsbXBvcyA9IG9vYmluZm8ub29iZnJlZVswXVswXTsKKy0JCQkJY2xtbGVuID0gb29iaW5mby5vb2JmcmVlWzBdWzFdOworLQkJCQlpZiAoY2xtbGVuID4gOCkKKy0JCQkJCWNsbWxlbiA9IDg7CisrCQkJCWNsbWxlbiA9IE1JTihvb2JhdmFpbCwgOCk7CisrCisrCQkJCWlmIChvb2JpbmZvLm9vYmZyZWVbMF1bMV0gPCA4ICYmIG9vYmF2YWlsID49IDgpIHsKKysJCQkJCWludCBsZWZ0LCBuLCBsYXN0ID0gMDsKKysJCQkJCXZvaWQgKmNtOworKworKwkJCQkJb29iX2RhdGEgPSBtYWxsb2MobXRkLm9vYl9zaXplKTsKKysJCQkJCWlmICghb29iX2RhdGEpCisrCQkJCQkJcmV0dXJuIC1FTk9NRU07CisrCisrCQkJCQltZW1zZXQob29iX2RhdGEsIDB4ZmYsIG10ZC5vb2Jfc2l6ZSk7CisrCQkJCQljbSA9ICZjbGVhbm1hcmtlcjsKKysJCQkJCWZvciAoaSA9IDAsIGxlZnQgPSBjbG1sZW47IGxlZnQgOyBpKyspIHsKKysJCQkJCQluID0gTUlOKGxlZnQsIG9vYmluZm8ub29iZnJlZVtpXVsxXSk7CisrCQkJCQkJbWVtY3B5KG9vYl9kYXRhICsgb29iaW5mby5vb2JmcmVlW2ldWzBdLAorKwkJCQkJCQkJY20sIG4pOworKwkJCQkJCWxlZnQgLT0gbjsKKysJCQkJCQljbSAgICs9IG47CisrCQkJCQkJbGFzdCA9IG9vYmluZm8ub29iZnJlZVtpXVswXSArIG47CisrCQkJCQl9CisrCisrCQkJCQljbG1sZW4gPSBsYXN0IC0gY2xtcG9zOworKwkJCQl9CisgCQkJfSBlbHNlIHsKKyAJCQkJLyogTGVnYWN5IG1vZGUgKi8KKyAJCQkJc3dpdGNoIChtdGQub29iX3NpemUpIHsKK0BAIC0yMjcsNyArMjU2LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJCQkJCQlicmVhazsKKyAJCQkJfQorIAkJCX0KKy0JCQljbGVhbm1hcmtlci50b3RsZW4gPSBjcHVfdG9famUzMig4KTsKKyAJCX0KKyAJCWNsZWFubWFya2VyLmhkcl9jcmMgPSBjcHVfdG9famUzMihtdGRfY3JjMzIoMCwgJmNsZWFubWFya2VyLCBzaXplb2YoY2xlYW5tYXJrZXIpIC0gNCkpOworIAl9CitAQCAtMjc2LDcgKzMwNCw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCisgCQkvKiB3cml0ZSBjbGVhbm1hcmtlciAqLworIAkJaWYgKGlzTkFORCkgeworLQkJCWlmIChtdGRfd3JpdGVfb29iKG10ZF9kZXNjLCAmbXRkLCBmZCwgKHVpbnQ2NF90KW9mZnNldCArIGNsbXBvcywgY2xtbGVuLCAmY2xlYW5tYXJrZXIpICE9IDApIHsKKysJCQl2b2lkICpkYXRhID0gb29iX2RhdGEgPyBvb2JfZGF0YSArIGNsbXBvcyA6ICZjbGVhbm1hcmtlcjsKKysJCQlpZiAobXRkX3dyaXRlX29vYihtdGRfZGVzYywgJm10ZCwgZmQsICh1aW50NjRfdClvZmZzZXQgKyBjbG1wb3MsIGNsbWxlbiwgZGF0YSkgIT0gMCkgeworIAkJCQlzeXNfZXJybXNnKCIlczogTVREIHdyaXRlb29iIGZhaWx1cmUiLCBtdGRfZGV2aWNlKTsKKyAJCQkJY29udGludWU7CisgCQkJfQorQEAgLTI5MSw1ICszMjAsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAlzaG93X3Byb2dyZXNzKCZtdGQsIG9mZnNldCwgZWIsIGViX3N0YXJ0LCBlYl9jbnQpOworIAliYXJldmVyYm9zZSghcXVpZXQsICJcbiIpOworIAorKwlpZiAob29iX2RhdGEpCisrCQlmcmVlKG9vYl9kYXRhKTsKKysKKyAJcmV0dXJuIDA7CisgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlsc19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2RjYTc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlsc19naXQuYmIKQEAgLTAsMCArMSw0NCBAQAorU1VNTUFSWSA9ICJUb29scyBmb3IgbWFuYWdpbmcgbWVtb3J5IHRlY2hub2xvZ3kgZGV2aWNlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGludXgtbXRkLmluZnJhZGVhZC5vcmcvIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL2NvbW1vbi5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PWJhMDViMDc5MTJhNDRlYTJiZjgxY2U0MDkzODAwNDljIgorCitERVBFTkRTID0gInpsaWIgbHpvIGUyZnNwcm9ncyB1dGlsLWxpbnV4IgorCitQViA9ICIxLjUuMStnaXQke1NSQ1BWfSIKKworU1JDUkVWID0gIjlmMTA3MTMyYTZhMDczY2NlMzc0MzRjYTljZGE2OTE3ZGQ4ZDg2NmIiCitTUkNfVVJJID0gImdpdDovL2dpdC5pbmZyYWRlYWQub3JnL210ZC11dGlscy5naXQgXAorICAgICAgICAgICBmaWxlOi8vYWRkLWV4Y2x1c2lvbi10by1ta2ZzLWpmZnMyLWdpdC0yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1hcm12Ny1uZW9uLWFsaWdubWVudC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWhhc2h0YWJsZS1SZW1vdmUtZHVwbGljYXRlLWhhc2h0YWJsZV9pdGVyYXRvcl92YWx1ZS0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbXRkLXV0aWxzLWZpeC1jb3JydXB0LWNsZWFubWFya2VyLXdpdGgtZmxhc2hfZXJhc2UtLWotY29tbWFuZC5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9naXQvIgorCisjIHhhdHRyIHN1cHBvcnQgY3JlYXRlcyBhbiBhZGRpdGlvbmFsIGNvbXBpbGUtdGltZSBkZXBlbmRlbmN5IG9uIGFjbCBiZWNhdXNlCisjIHRoZSBzeXMvYWNsLmggaGVhZGVyIGlzIG5lZWRlZC4gbGliYWNsIGlzIG5vdCBuZWVkZWQgYW5kIHRodXMgZW5hYmxpbmcgeGF0dHIKKyMgcmVnYXJkbGVzcyB3aGV0aGVyIGFjbCBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGluIHRoZSBkaXN0cm8gc2hvdWxkIGJlIG9rYXkuCitQQUNLQUdFQ09ORklHID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3hhdHRyJywgJ3hhdHRyJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbeGF0dHJdID0gIiwsYWNsLCIKKworRVhUUkFfT0VNQUtFID0gIidDQz0ke0NDfScgJ1JBTkxJQj0ke1JBTkxJQn0nICdBUj0ke0FSfScgJ0NGTEFHUz0ke0NGTEFHU30gJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAneGF0dHInLCAnJywgJy1EV0lUSE9VVF9YQVRUUicsIGQpfSAtSSR7U30vaW5jbHVkZScgJ0JVSUxERElSPSR7U30nIgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9IFNCSU5ESVI9JHtzYmluZGlyfSBNQU5ESVI9JHttYW5kaXJ9IElOQ0xVREVESVI9JHtpbmNsdWRlZGlyfQorfQorCitQQUNLQUdFUyA9KyAibXRkLXV0aWxzLWpmZnMyIG10ZC11dGlscy11YmlmcyBtdGQtdXRpbHMtbWlzYyIKKworRklMRVNfbXRkLXV0aWxzLWpmZnMyID0gIiR7c2JpbmRpcn0vbWtmcy5qZmZzMiAke3NiaW5kaXJ9L2pmZnMyZHVtcCAke3NiaW5kaXJ9L2pmZnMycmVhZGVyICR7c2JpbmRpcn0vc3VtdG9vbCIKK0ZJTEVTX210ZC11dGlscy11YmlmcyA9ICIke3NiaW5kaXJ9L21rZnMudWJpZnMgJHtzYmluZGlyfS91YmkqIgorRklMRVNfbXRkLXV0aWxzLW1pc2MgPSAiJHtzYmluZGlyfS9uZnRsKiAke3NiaW5kaXJ9L2Z0bCogJHtzYmluZGlyfS9yZmQqICR7c2JpbmRpcn0vZG9jKiAke3NiaW5kaXJ9L3NlcnZlX2ltYWdlICR7c2JpbmRpcn0vcmVjdl9pbWFnZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKKyMgZ2l0Ly5jb21wci5jLmRlcDo0Njogd2FybmluZzogTlVMIGNoYXJhY3RlciBzZWVuOyByZXN0IG9mIGxpbmUgaWdub3JlZAorIyBnaXQvLmNvbXByLmMuZGVwOjQ3OiAqKiogbWlzc2luZyBzZXBhcmF0b3IuICBTdG9wLgorUEFSQUxMRUxfTUFLRSA9ICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL2ZpeC1icm9rZW4tbHoucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL2ZpeC1icm9rZW4tbHoucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I0NTQ5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvZml4LWJyb2tlbi1sei5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFdlbmxpbiBLYW5nIDx3ZW5saW4ua2FuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCA4ZjkzMDVhLi42OTRlODM3IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMjUxLDYgKzI1MSw3IEBAIGluc3RhbGwtc2NyaXB0czogJHtERVNURElSfSQoYmluZGlyKS9tdG9vbHMKKyAJQCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAke0RFU1RESVJ9JChiaW5kaXIpCisgCUBmb3IgaiBpbiAkKFNDUklQVFMpIDsgZG8gXAorIAkJJChJTlNUQUxMX1NDUklQVCkgJChzcmNkaXIpL3NjcmlwdHMvJCRqICR7REVTVERJUn0kKGJpbmRpcikvJCRqIDsgXAorKwkJJChJTlNUQUxMX1BST0dSQU0pICQoc3JjZGlyKS9zY3JpcHRzLyQkaiAke0RFU1RESVJ9JChiaW5kaXIpLyQkaiA7IFwKKyAJCWVjaG8gJHtERVNURElSfSQoYmluZGlyKS8kJGogOyBcCisgCWRvbmUKKyAJcm0gLWYgJHtERVNURElSfSQoYmluZGlyKS9segorLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL210b29scy1tYWtlaW5mby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbXRvb2xzLW1ha2VpbmZvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMjg3M2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL210b29scy1tYWtlaW5mby5wYXRjaApAQCAtMCwwICsxLDY1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworLS0tIG10b29scy0zLjkuOS9jb25maWd1cmUuaW4ub3JpZwkyMDA2LTA0LTE0IDE2OjA1OjU0LjMzNzY1NTE5MiAtMDYwMAorKysrIG10b29scy0zLjkuOS9jb25maWd1cmUuaW4JMjAwNi0wNC0xNCAxNjoxMjoyOS43MzY1NDU0MjQgLTA2MDAKK0BAIC0yMSw2ICsyMSwzMyBAQAorIEFDX0NfQ09OU1QKKyBBQ19DX0lOTElORQorIAorK0FDX0NIRUNLX1BST0coTUFLRUlORk8sIG1ha2VpbmZvLCBtYWtlaW5mbywgKQorK2lmIHRlc3QgIngkTUFLRUlORk8iID0gIngiOyB0aGVuCisrCU1BS0VJTkZPPSJAZWNobyBtYWtlaW5mbyBtaXNzaW5nOyB0cnVlIgorK2ZpCisrQUNfQ0hFQ0tfUFJPRyhURVhJMkRWSSwgdGV4aTJkdmksIHRleGkyZHZpLCApCisraWYgdGVzdCAieCRURVhJMkRWSSIgPSAieCI7IHRoZW4KKysJVEVYSTJEVkk9IkBlY2hvIHRleGkyZHZpIG1pc3Npbmc7IHRydWUiCisrZmkKKytBQ19DSEVDS19QUk9HKFRFWEkyUERGLCB0ZXhpMnBkZiwgdGV4aTJwZGYsICkKKytpZiB0ZXN0ICJ4JFRFWEkyUERGIiA9ICJ4IjsgdGhlbgorKwlURVhJMlBERj0iQGVjaG8gdGV4aTJwZGYgbWlzc2luZzsgdHJ1ZSIKKytmaQorK0FDX0NIRUNLX1BST0coVEVYSTJIVE1MLCB0ZXhpMmh0bWwsIHRleGkyaHRtbCwgKQorK2lmIHRlc3QgIngkVEVYSTJIVE1MIiA9ICJ4IjsgdGhlbgorKwlURVhJMkhUTUw9IkBlY2hvIHRleGkyaHRtbCBtaXNzaW5nOyB0cnVlIgorK2ZpICAgIAorK0FDX0NIRUNLX1BST0coRFZJMlBTLCBkdmkycHMsIGR2aTJwcywgKQorK2lmIHRlc3QgIngkRFZJMlBTIiA9ICJ4IjsgdGhlbgorKwlEVkkyUFM9IkBlY2hvIGR2aTJwcyBtaXNzaW5nOyB0cnVlIgorK2ZpCisrCisrQUNfU1VCU1QoTUFLRUlORk8pCisrQUNfU1VCU1QoVEVYSTJEVkkpCisrQUNfU1VCU1QoVEVYSTJQREYpCisrQUNfU1VCU1QoVEVYSTJIVE1MKQorK0FDX1NVQlNUKERWSTJQUykKKysKKyAKKyBkbmwgQ2hlY2sgZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworIGRubCBFbmFibGUgT1MvMiBleHRlbmRlZCBkZW5zaXR5IGZvcm1hdCBkaXNrcworLS0tIG10b29scy0zLjkuOS9NYWtlZmlsZS5pbi5zYXYJMjAwNi0wNC0xNCAxNTo1NjoxOS4wMDAwMDAwMDAgLTA2MDAKKysrKyBtdG9vbHMtMy45LjkvTWFrZWZpbGUuaW4JMjAwNi0wNC0xNCAxNjoxNToyOS4zMTUyNDUzMTIgLTA2MDAKK0BAIC0xMSwxMCArMTEsMTEgQEAKKyBVU0VSTERGTEFHUyA9CisgVVNFUkxETElCUyA9CisgCistTUFLRUlORk8gPSBtYWtlaW5mbworLVRFWEkyRFZJID0gdGV4aTJkdmkKKy1URVhJMlBERiA9IHRleGkycGRmCistVEVYSTJIVE1MID0gdGV4aTJodG1sCisrTUFLRUlORk8gPSBATUFLRUlORk9ACisrVEVYSTJEVkkgPSBAVEVYSTJEVklACisrVEVYSTJQREYgPSBAVEVYSTJQREZACisrVEVYSTJIVE1MID0gQFRFWEkySFRNTEAKKytEVkkyUFMgPSBARFZJMlBTQAorIAorIAorICMgZG8gbm90IGVkaXQgYmVsb3cgdGhpcyBsaW5lCitAQCAtMTgxLDcgKzE4Miw3IEBACisgCisgcHM6IG10b29scy5wcworICUucHM6ICUuZHZpCistCWR2aXBzIC1mIDwgJDwgPiAkQAorKwkkKERWSTJQUykgLWYgPCAkPCA+ICRACisgCisgcGRmOiBtdG9vbHMucGRmCisgJS5wZGY6ICUudGV4aQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9tdG9vbHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL210b29scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWEzMjA4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9tdG9vbHMucGF0Y2gKQEAgLTAsMCArMSwxMjkgQEAKKyROZXRCU0Q6IHBhdGNoLWFhLHYgMS4xMCAyMDA3LzA4LzE3IDIwOjU1OjM0IGpvZXJnIEV4cCAkCisKKy0tLQorIE1ha2VmaWxlLmluIHwgICA3NCArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgNDEgZGVsZXRpb25zKC0pCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitJbmRleDogbXRvb2xzLTMuOS45L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbXRvb2xzLTMuOS45Lm9yaWcvTWFrZWZpbGUuaW4JMjAwNy0xMC0xMiAxMToxODo0Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBtdG9vbHMtMy45LjkvTWFrZWZpbGUuaW4JMjAwNy0xMC0xMiAxMToyODoxNC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xOTUsMzAgKzE5NSwyMiBAQCBodG1sOiBtdG9vbHMuaHRtbCBtdG9vbHNfdG9jLmh0bWwKKyAKKyAjIERvbid0IGNkLCB0byBhdm9pZCBicmVha2luZyBpbnN0YWxsLXNoIHJlZmVyZW5jZXMuCisgaW5zdGFsbC1pbmZvOiBpbmZvCistCSQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKGluZm9kaXIpCisrCSQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAke0RFU1RESVJ9JChpbmZvZGlyKQorIAlpZiB0ZXN0IC1mIG10b29scy5pbmZvOyB0aGVuIFwKKyAJICBmb3IgaSBpbiBtdG9vbHMuaW5mbyo7IGRvIFwKKy0JICAgICQoSU5TVEFMTF9EQVRBKSAkJGkgJChpbmZvZGlyKS8kJGk7IFwKKysJICAgICQoSU5TVEFMTF9EQVRBKSAkJGkgJHtERVNURElSfSQoaW5mb2RpcikvJCRpOyBcCisgCSAgZG9uZTsgXAorIAllbHNlIFwKKyAJICBmb3IgaSBpbiAkKHNyY2RpcikvbXRvb2xzLmluZm8qOyBkbyBcCistCSAgICAkKElOU1RBTExfREFUQSkgJCRpICQoaW5mb2RpcikvYGVjaG8gJCRpIHwgc2VkICdzfF4kKHNyY2RpcikvfHwnYDsgXAorKwkgICAgJChJTlNUQUxMX0RBVEEpICQkaSAke0RFU1RESVJ9JChpbmZvZGlyKS9gZWNobyAkJGkgfCBzZWQgJ3N8XiQoc3JjZGlyKS98fCdgOyBcCisgCSAgZG9uZTsgXAorIAlmaTsgXAorLQlpZiBbIC1uICIkKElOU1RBTExfSU5GTykiIF0gOyB0aGVuIFwKKy0JCWlmIFsgLWYgJChpbmZvZGlyKS9kaXIuaW5mbyBdIDsgdGhlbiBcCistCQkJJChJTlNUQUxMX0lORk8pICQoaW5mb2RpcikvbXRvb2xzLmluZm8gJChpbmZvZGlyKS9kaXIuaW5mbzsgXAorLQkJZmk7IFwKKy0JCWlmIFsgLWYgJChpbmZvZGlyKS9kaXIgXSA7IHRoZW4gXAorLQkJCSQoSU5TVEFMTF9JTkZPKSAkKGluZm9kaXIpL210b29scy5pbmZvICQoaW5mb2RpcikvZGlyOyBcCistCQlmaTsgXAorLQlmaQorIAorIHVuaW5zdGFsbC1pbmZvOgorIAljZCAkKGluZm9kaXIpICYmIHJtIC1mIG10b29scy5pbmZvKgorIAorLWluc3RhbGw6CSQoYmluZGlyKS9tdG9vbHMgQEJJTkZMT1BQWURAIGluc3RhbGwtbWFuIGluc3RhbGwtbGlua3MgXAorLQkJJChiaW5kaXIpL21rbWFuaWZlc3QgaW5zdGFsbC1zY3JpcHRzIGluc3RhbGwtaW5mbworK2luc3RhbGw6CSR7REVTVERJUn0kKGJpbmRpcikvbXRvb2xzICR7REVTVERJUn0kKGJpbmRpcikvZmxvcHB5ZCBpbnN0YWxsLW1hbiBpbnN0YWxsLWxpbmtzIFwKKysJCSR7REVTVERJUn0kKGJpbmRpcikvbWttYW5pZmVzdCBpbnN0YWxsLXNjcmlwdHMgaW5zdGFsbC1pbmZvCisgCisgdW5pbnN0YWxsOgl1bmluc3RhbGwtYmluIHVuaW5zdGFsbC1tYW4gdW5pbnN0YWxsLWxpbmtzIFwKKyAJCXVuaW5zdGFsbC1zY3JpcHRzCitAQCAtMjI4LDUyICsyMjAsNTIgQEAgZGlzdGNsZWFuOiBjbGVhbiB0ZXhjbGVhbgorIG1haW50YWluZXItY2xlYW46IGRpc3RjbGVhbgorIAorIAorLSQoYmluZGlyKS9mbG9wcHlkOiBmbG9wcHlkCistCSQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKGJpbmRpcikKKy0JJChJTlNUQUxMX1BST0dSQU0pIGZsb3BweWQgJChiaW5kaXIpL2Zsb3BweWQKKyske0RFU1RESVJ9JChiaW5kaXIpL2Zsb3BweWQ6IGZsb3BweWQKKysJJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0kKGJpbmRpcikKKysJJChJTlNUQUxMX1BST0dSQU0pIGZsb3BweWQgJHtERVNURElSfSQoYmluZGlyKS9mbG9wcHlkCisgCistJChiaW5kaXIpL2Zsb3BweWRfaW5zdGFsbHRlc3Q6IGZsb3BweWRfaW5zdGFsbHRlc3QKKy0JJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoYmluZGlyKQorLQkkKElOU1RBTExfUFJPR1JBTSkgZmxvcHB5ZF9pbnN0YWxsdGVzdCAkKGJpbmRpcikvZmxvcHB5ZF9pbnN0YWxsdGVzdAorKyR7REVTVERJUn0kKGJpbmRpcikvZmxvcHB5ZF9pbnN0YWxsdGVzdDogZmxvcHB5ZF9pbnN0YWxsdGVzdAorKwkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoYmluZGlyKQorKwkkKElOU1RBTExfUFJPR1JBTSkgZmxvcHB5ZF9pbnN0YWxsdGVzdCAke0RFU1RESVJ9JChiaW5kaXIpL2Zsb3BweWRfaW5zdGFsbHRlc3QKKyAKKy0kKGJpbmRpcikvbXRvb2xzOiBtdG9vbHMKKy0JJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoYmluZGlyKQorLQkkKElOU1RBTExfUFJPR1JBTSkgbXRvb2xzICQoYmluZGlyKS9tdG9vbHMKKyske0RFU1RESVJ9JChiaW5kaXIpL210b29sczogbXRvb2xzCisrCSQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAke0RFU1RESVJ9JChiaW5kaXIpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSBtdG9vbHMgJHtERVNURElSfSQoYmluZGlyKS9tdG9vbHMKKyAKKy0kKGJpbmRpcikvbWttYW5pZmVzdDogbWttYW5pZmVzdAorLQkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChiaW5kaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSBta21hbmlmZXN0ICQoYmluZGlyKS9ta21hbmlmZXN0CisrJHtERVNURElSfSQoYmluZGlyKS9ta21hbmlmZXN0OiBta21hbmlmZXN0CisrCSQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAke0RFU1RESVJ9JChiaW5kaXIpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSBta21hbmlmZXN0ICR7REVTVERJUn0kKGJpbmRpcikvbWttYW5pZmVzdAorIAorICMkKEVUQ0RJUikvbXRvb2xzOiBtdG9vbHMuZXRjCisgIwljcCBtdG9vbHMuZXRjICQoRVRDRElSKS9tdG9vbHMKKyAKKy1pbnN0YWxsLWxpbmtzOiAkKGJpbmRpcikvbXRvb2xzCisraW5zdGFsbC1saW5rczogJHtERVNURElSfSQoYmluZGlyKS9tdG9vbHMKKyAJQGZvciBqIGluICQoTElOS1MpOyBkbyBcCistCQlybSAtZiAkKGJpbmRpcikvJCRqIDsgXAorLQkJJChMTl9TKSBtdG9vbHMgJChiaW5kaXIpLyQkaiA7IFwKKy0JCWVjaG8gJChiaW5kaXIpLyQkaiA7IFwKKysJCXJtIC1mICR7REVTVERJUn0kKGJpbmRpcikvJCRqIDsgXAorKwkJJChMTl9TKSBtdG9vbHMgJHtERVNURElSfSQoYmluZGlyKS8kJGogOyBcCisrCQllY2hvICR7REVTVERJUn0kKGJpbmRpcikvJCRqIDsgXAorIAlkb25lCisgCisgIyMgInoiIGlzIHRoZSBvbGRlciB2ZXJzaW9uIG9mICJneiI7IHRoZSBuYW1lIGlzIGp1c3QgKnRvbyogc2hvcnQKKy1pbnN0YWxsLXNjcmlwdHM6ICQoYmluZGlyKS9tdG9vbHMKKy0JQCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKGJpbmRpcikKKytpbnN0YWxsLXNjcmlwdHM6ICR7REVTVERJUn0kKGJpbmRpcikvbXRvb2xzCisrCUAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoYmluZGlyKQorIAlAZm9yIGogaW4gJChTQ1JJUFRTKSA7IGRvIFwKKy0JCSQoSU5TVEFMTF9QUk9HUkFNKSAkKHNyY2Rpcikvc2NyaXB0cy8kJGogJChiaW5kaXIpLyQkaiA7IFwKKy0JCWVjaG8gJChiaW5kaXIpLyQkaiA7IFwKKysJCSQoSU5TVEFMTF9TQ1JJUFQpICQoc3JjZGlyKS9zY3JpcHRzLyQkaiAke0RFU1RESVJ9JChiaW5kaXIpLyQkaiA7IFwKKysJCWVjaG8gJHtERVNURElSfSQoYmluZGlyKS8kJGogOyBcCisgCWRvbmUKKy0Jcm0gLWYgJChiaW5kaXIpL2x6CistCSQoTE5fUykgdXogJChiaW5kaXIpL2x6CisrCXJtIC1mICR7REVTVERJUn0kKGJpbmRpcikvbHoKKysJJChMTl9TKSB1eiAke0RFU1RESVJ9JChiaW5kaXIpL2x6CisgCisgaW5zdGFsbC1tYW46CistCUAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChNQU4xRElSKQorKwlAJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0kKE1BTjFESVIpCisgCUBmb3IgaiBpbiAkKE1BTjEpOyBkbyBcCistCQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkaiAkKE1BTjFESVIpLyQkaiA7IFwKKy0JCWVjaG8gJChNQU4xRElSKS8kJGogOyBcCisrCQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkaiAke0RFU1RESVJ9JChNQU4xRElSKS8kJGogOyBcCisrCQllY2hvICR7REVTVERJUn0kKE1BTjFESVIpLyQkaiA7IFwKKyAJZG9uZQorLQlAJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoTUFONURJUikKKysJQCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAke0RFU1RESVJ9JChNQU41RElSKQorIAlAZm9yIGogaW4gJChNQU41KTsgZG8gXAorLQkJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGogJChNQU41RElSKS8kJGogOyBcCistCQllY2hvICQoTUFONURJUikvJCRqIDsgXAorKwkJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGogJHtERVNURElSfSQoTUFONURJUikvJCRqIDsgXAorKwkJZWNobyAke0RFU1RESVJ9JChNQU41RElSKS8kJGogOyBcCisgCWRvbmUKKyAKKyB1bmluc3RhbGwtYmluOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9uby14MTEuZ3BsdjMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL25vLXgxMS5ncGx2My5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2IzZTM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9uby14MTEuZ3BsdjMucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorRGlzYWJsZSBidWlsZGluZyB3aXRoIFgxMSBzdXBwb3J0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLXVyTiBtdG9vbHMtNC4wLjE1Lm9yaWcvL01ha2VmaWxlLmluIG10b29scy00LjAuMTUvL01ha2VmaWxlLmluCistLS0gbXRvb2xzLTQuMC4xNS5vcmlnLy9NYWtlZmlsZS5pbgkyMDEwLTEwLTE3IDA4OjQxOjA5LjAwMDAwMDAwMCAtMDcwMAorKysrIG10b29scy00LjAuMTUvL01ha2VmaWxlLmluCTIwMTAtMTEtMjMgMTM6NTk6NDkuMjU4MjU4Mzc0IC0wODAwCitAQCAtMTQ2LDcgKzE0Niw3IEBACisgQ1hYRkxBR1MgID0gJChDUFBGTEFHUykgJChERUZTKSAkKE1ZQ1hYRkxBR1MpIC1JLiBAZXh0cmFpbmNsdWRlZGlyQCAtSUBzcmNkaXJAICQoVVNFUkNGTEFHUykKKyBMSU5LICAgICAgPSAkKENDKSAkKExERkxBR1MpICQoVVNFUkxERkxBR1MpIEBleHRyYWxpYmRpckAKKyBBTExMSUJTICAgPSAkKFVTRVJMRExJQlMpICQoTUFDSERFUExJQlMpICQoU0hMSUIpICQoTElCUykKKy1YX0xERkxBR1MgPSAkKFhfRVhUUkFfTElCUykgJChYX0xJQlMpIC1sWGF1IC1sWDExICQoTElCUykKKytYX0xERkxBR1MgPSAkKFhfRVhUUkFfTElCUykgJChYX0xJQlMpICQoTElCUykKKyBYX0NDRkxBR1MgPSAkKFhfQ0ZMQUdTKSAkKENGTEFHUykKKyAKKyBhbGw6ICAgIG10b29scyAkKExJTktTKSBta21hbmlmZXN0IEBGTE9QUFlEQCBtdG9vbHMuMSBtdG9vbHMuNQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9uby14MTEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL25vLXgxMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDViNjI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9uby14MTEucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorLS0tCisgTWFrZWZpbGUuaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCistLS0gbXRvb2xzLTMuOS45Lm9yaWcvTWFrZWZpbGUuaW4KKysrKyBtdG9vbHMtMy45LjkvTWFrZWZpbGUuaW4KK0BAIC0xMjgsMTEgKzEyOCwxMSBAQCBYX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAorIFhfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKKyBDRkxBR1MgPSAkKENQUEZMQUdTKSAkKERFRlMpICQoTVlDRkxBR1MpIC1JLiBAZXh0cmFpbmNsdWRlZGlyQCAtSUBzcmNkaXJAICQoVVNFUkNGTEFHUykgCisgQ1hYRkxBR1MgID0gJChDUFBGTEFHUykgJChERUZTKSAkKE1ZQ1hYRkxBR1MpIC1JLiBAZXh0cmFpbmNsdWRlZGlyQCAtSUBzcmNkaXJAICQoVVNFUkNGTEFHUykgCisgTElOSyAgICAgID0gJChDQykgJChMREZMQUdTKSAkKFVTRVJMREZMQUdTKSBAZXh0cmFsaWJkaXJACisgQUxMTElCUyAgID0gJChVU0VSTERMSUJTKSAkKE1BQ0hERVBMSUJTKSAkKFNITElCKSAkKExJQlMpCistWF9MREZMQUdTID0gJChYX0VYVFJBX0xJQlMpICQoWF9MSUJTKSAkKFhfUFJFX0xJQlMpIC1sWGF1IC1sWDExICQoTElCUykgCisrWF9MREZMQUdTID0gJChYX0VYVFJBX0xJQlMpICQoWF9MSUJTKSAkKFhfUFJFX0xJQlMpICQoTElCUykKKyBYX0NDRkxBR1MgPSAkKFhfQ0ZMQUdTKSAkKENGTEFHUykKKyAKKyBhbGw6ICAgIG10b29scyAkKExJTktTKSBta21hbmlmZXN0IEBGTE9QUFlEQAorIAorICUubzogJS5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzMuOS45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29sc18zLjkuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjg0YTcxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29sc18zLjkuOS5iYgpAQCAtMCwwICsxLDU2IEBACisjIG10b29scyBPRSBidWlsZCBmaWxlCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA2LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCisKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIHRvIGFjY2VzcyBNUy1ET1MgZGlza3Mgd2l0aG91dCBtb3VudGluZyB0aGVtIgorREVTQ1JJUFRJT04gPSAiTXRvb2xzIGlzIGEgY29sbGVjdGlvbiBvZiB1dGlsaXRpZXMgZm9yIGFjY2Vzc2luZyBNUy1ET1MgZGlza3MgZnJvbSBVbml4IHdpdGhvdXQgbW91bnRpbmcgdGhlbS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbXRvb2xzLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTJiNThlYzc3Njk2Nzg4Y2UyNzhiMDQ0ZDJhOGU5ZDMiCitQUiA9ICJyNiIKKworUkRFUEVORFNfJHtQTn0gPSAiZ2xpYmMtZ2NvbnYtaWJtODUwIgorUlJFQ09NTUVORFNfJHtQTn0gPSAiXAorCWdsaWJjLWdjb252LWlibTQzNyBcCisJZ2xpYmMtZ2NvbnYtaWJtNzM3IFwKKwlnbGliYy1nY29udi1pYm03NzUgXAorCWdsaWJjLWdjb252LWlibTg1MSBcCisJZ2xpYmMtZ2NvbnYtaWJtODUyIFwKKwlnbGliYy1nY29udi1pYm04NTUgXAorCWdsaWJjLWdjb252LWlibTg1NyBcCisJZ2xpYmMtZ2NvbnYtaWJtODYwIFwKKwlnbGliYy1nY29udi1pYm04NjEgXAorCWdsaWJjLWdjb252LWlibTg2MiBcCisJZ2xpYmMtZ2NvbnYtaWJtODYzIFwKKwlnbGliYy1nY29udi1pYm04NjUgXAorCWdsaWJjLWdjb252LWlibTg2NiBcCisJZ2xpYmMtZ2NvbnYtaWJtODY5IFwKKwkiCisKKyNodHRwOi8vbXRvb2xzLmxpbnV4Lmx1L210b29scy0ke1BWfS50YXIuZ3ogCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9tdG9vbHMtJHtQVn0udGFyLmd6IFwKKwlmaWxlOi8vbXRvb2xzLW1ha2VpbmZvLnBhdGNoIFwKKwlmaWxlOi8vbXRvb2xzLnBhdGNoIFwKKwlmaWxlOi8vbm8teDExLnBhdGNoIFwKKwlmaWxlOi8vZml4LWJyb2tlbi1sei5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZTY4Yjg1N2I0ZTFmM2E2NTIxZDFkZmVmYmQzMGEzNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhZjA4M2E3MzQyNWQ2NjRkNDYwN2VmNmM2NTY0ZmQ5MzE5YTBlNDdlZTdjMTA1MjU5YTQ1MzU2Y2I4MzQ2OTBlIgorCitTID0gIiR7V09SS0RJUn0vbXRvb2xzLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQteCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsaWJic2RdID0gImFjX2N2X2xpYl9ic2RfbWFpbj15ZXMsYWNfY3ZfbGliX2JzZF9tYWluPW5vLGxpYmJzZCIKKworZG9faW5zdGFsbF9wcmVwZW5kICgpIHsKKyAgICAjIENyZWF0ZSBiaW5kaXIgdG8gZml4IHBhcmFsbGVsIGluc3RhbGxhdGlvbiBpc3N1ZXMKKyAgICBta2RpciAtcCAke0R9LyR7YmluZGlyfQorICAgIG1rZGlyIC1wICR7RH0vJHtkYXRhZGlyfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29sc180LjAuMTguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzQuMC4xOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmRlY2ZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29sc180LjAuMTguYmIKQEAgLTAsMCArMSw0NyBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgdG8gYWNjZXNzIE1TLURPUyBkaXNrcyB3aXRob3V0IG1vdW50aW5nIHRoZW0iCitERVNDUklQVElPTiA9ICJNdG9vbHMgaXMgYSBjb2xsZWN0aW9uIG9mIHV0aWxpdGllcyB0byBhY2Nlc3MgTVMtRE9TIGRpc2tzIGZyb20gR05VIGFuZCBVbml4IHdpdGhvdXQgbW91bnRpbmcgdGhlbS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbXRvb2xzLyIKK1NFQ1RJT04gPSAib3B0aW9uYWwiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKKworUkRFUEVORFNfJHtQTn0gPSAiZ2xpYmMtZ2NvbnYtaWJtODUwIgorUlJFQ09NTUVORFNfJHtQTn0gPSAiXAorCWdsaWJjLWdjb252LWlibTQzNyBcCisJZ2xpYmMtZ2NvbnYtaWJtNzM3IFwKKwlnbGliYy1nY29udi1pYm03NzUgXAorCWdsaWJjLWdjb252LWlibTg1MSBcCisJZ2xpYmMtZ2NvbnYtaWJtODUyIFwKKwlnbGliYy1nY29udi1pYm04NTUgXAorCWdsaWJjLWdjb252LWlibTg1NyBcCisJZ2xpYmMtZ2NvbnYtaWJtODYwIFwKKwlnbGliYy1nY29udi1pYm04NjEgXAorCWdsaWJjLWdjb252LWlibTg2MiBcCisJZ2xpYmMtZ2NvbnYtaWJtODYzIFwKKwlnbGliYy1nY29udi1pYm04NjUgXAorCWdsaWJjLWdjb252LWlibTg2NiBcCisJZ2xpYmMtZ2NvbnYtaWJtODY5IFwKKwkiCitTUkNfVVJJW21kNXN1bV0gPSAiYTIzNjQ2NjE3NTQ2YmY2YWQ1NmYwNjFkOGIyODNjODUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTllOWNmODA4ODUzOTljNGYyMjllNWQ4N2U0OWMwYzJiZmVlYzA0NGUxMzg2ZDU5ZmNkMGIwYWVhZDZiMmY4NSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L210b29scy9tdG9vbHMtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9tdG9vbHMtbWFrZWluZm8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm8teDExLmdwbHYzLnBhdGNoIgorCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC14IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2xpYmJzZF0gPSAiYWNfY3ZfbGliX2JzZF9tYWluPXllcyxhY19jdl9saWJfYnNkX21haW49bm8sbGliYnNkIgorCitkb19pbnN0YWxsX3ByZXBlbmQgKCkgeworICAgICMgQ3JlYXRlIGJpbmRpciB0byBmaXggcGFyYWxsZWwgaW5zdGFsbGF0aW9uIGlzc3VlcworICAgIG1rZGlyIC1wICR7RH0vJHtiaW5kaXJ9CisgICAgbWtkaXIgLXAgJHtEfS8ke2RhdGFkaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9uYXNtL25hc21fMi4xMS4wOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL25hc20vbmFzbV8yLjExLjA4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNzI0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9uYXNtL25hc21fMi4xMS4wOC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkdlbmVyYWwtcHVycG9zZSB4ODYgYXNzZW1ibGVyIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9OTA5MDQ0ODZmOGZiZjE4NjFjZjQyNzUyZTFhMzllZmUiCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NHxpLjg2KS4qLShsaW51eHxmcmVlYnNkLiopJworCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5uYXNtLnVzL3B1Yi9uYXNtL3JlbGVhc2VidWlsZHMvJHtQVn0vbmFzbS0ke1BWfS50YXIuYnoyICIKKworU1JDX1VSSVttZDVzdW1dID0gIjdhYWU1Y2I4ZTAzZmFjNDgwMjljODJhNzQ3MGFiMDY2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlkYTNhMDI5MWEwYmRjMDYzMDViN2JhMTk0ZjFlMmMyYjU1YWU2ZjExMjEwYjRhZjQzNzI5ODY4MTQ5ZDU0NDUiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJaWYgWyAtZiAke1N9L2FjbG9jYWwubTQgXSAmJiBbICEgLWYgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorCQltdiAke1N9L2FjbG9jYWwubTQgJHtTfS9hY2luY2x1ZGUubTQKKwlmaQorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW4xCisKKwlvZV9ydW5tYWtlICdJTlNUQUxMUk9PVD0ke0R9JyBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitERVBFTkRTID0gImdyb2ZmLW5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL2ZpeC1yZWdleC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL2ZpeC1yZWdleC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjQwYWZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvZml4LXJlZ2V4LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gNTVmNmZkOGYxOTU4YWEzNjU4NGVlZmVlY2NlNzgyYTUwNTk2M2M4OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IGJlbnZtIDxiZW52bUB5b3ctZ21vZmZhdHQtbHgyLndycy5jb20+CitEYXRlOiBXZWQsIDkgSmFuIDIwMTMgMTI6MTQ6MDYgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IE1ha2VmaWxlIHJlZ3VsYXIgZXhwcmVzc2lvbgorCitUaGlzIHBhdGNoIG1vZGlmaWVzIGEgcmVndWxhciBleHByZXNzaW9uIHdpdGhpbiBhIE1ha2VmaWxlIHRvIHN0b3AgYnVpbGRzCitmcm9tIGZhaWxpbmcgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHBhdGggY29udGFpbnMgdGhlIGNoYXJhY3RlcnMgIi5hIi4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLQorIE1ha2VmaWxlLnByb2cuaW4gfCAgICAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5wcm9nLmluIGIvTWFrZWZpbGUucHJvZy5pbgoraW5kZXggNzYzMTBjOS4uNDRjMzUzNCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLnByb2cuaW4KKysrKyBiL01ha2VmaWxlLnByb2cuaW4KK0BAIC0xMiw3ICsxMiw3IEBAIExJTktGTEFHUyA9IEBMSU5LRkxBR1NACisgCisgQUxMX0xJQlMgPSAkKFhMSUJTKSAkKExJQlMpCisgTWFrZWZpbGUubHQ6CistCWVjaG8gJ0xUX0xJQlM9J2BlY2hvICQoQUxMX0xJQlMpfHNlZCAncy9cLmEvLmxhL2cnYCA+TWFrZWZpbGUubHQKKysJZWNobyAnTFRfTElCUz0nYGVjaG8gJChBTExfTElCUykgfCBzZWQgJ3MvXC5hXHMvXC5sYSAvZycgfCBzZWQgcy9cLmEkJC9cLmxhL2AgPiBNYWtlZmlsZS5sdAorIAorIFBST0c6PSQoc2hlbGwgZWNobyAiJChQUk9HKSIgfCBzZWQgJ0Bwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQCcpCisgCistLSAKKzEuNy4wLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvbWFrZWZpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjhiOWI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVGhpcyBwYXRjaCBmaXhlcyBsaWJ0b29sIFFBIGlzc3VlcyB3aXRoIFdPUktESVIgY3JlZXBpbmcgaW4gdG8KK2xpYm9zcGdyb3ZlLmxhIGFuZCBsaWJvc3R5bGUubGEuIFBhdGNoIG9idGFpbmVkIGZyb20gT3BlbkVtYmVkZGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW090aGVyXQorV29ya2Fyb3VuZCBpcyBzcGVjaWZpYyB0byBvdXIgYnVpbGQgc3lzdGVtLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IG9wZW5qYWRlLTEuMy4yL3NwZ3JvdmUvTWFrZWZpbGUuc3ViCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbmphZGUtMS4zLjIub3JpZy9zcGdyb3ZlL01ha2VmaWxlLnN1YgorKysrIG9wZW5qYWRlLTEuMy4yL3NwZ3JvdmUvTWFrZWZpbGUuc3ViCitAQCAtMSw4ICsxLDggQEAKKyBMVFZFUlNJT049MDoxOjAKKyBMSUI9b3NwZ3JvdmUKKyBJTkNMVURFPS1JJChzcmNkaXIpLy4uL2dyb3ZlCistREVQTElCUz0tbG0gLUwkKFRPUCkvZ3JvdmUgLUwkKFRPUCkvZ3JvdmUvLmxpYnMgXAorLQktTCQoVE9QKS9saWIgLUwkKFRPUCkvbGliLy5saWJzIFwKKytERVBMSUJTPS1sbSAkKFRPUCkvZ3JvdmUgXAorKwkkKFRPUCkvbGliIFwKKyAJJChMSUJfVEhSRUFEUykKKyBPQkpTPUdyb3ZlQXBwLm8gR3JvdmVCdWlsZGVyLm8gU2ROb2RlLm8KKyBHRU5TUkNTPWdyb3ZlX2luc3QuY3h4CitJbmRleDogb3BlbmphZGUtMS4zLjIvc3R5bGUvTWFrZWZpbGUuc3ViCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbmphZGUtMS4zLjIub3JpZy9zdHlsZS9NYWtlZmlsZS5zdWIKKysrKyBvcGVuamFkZS0xLjMuMi9zdHlsZS9NYWtlZmlsZS5zdWIKK0BAIC0xLDggKzEsOCBAQAorIExUVkVSU0lPTj0wOjE6MAorIExJQj1vc3R5bGUKKy1ERVBMSUJTPS1sbSAtTCQoVE9QKS9ncm92ZSAtTCQoVE9QKS9ncm92ZS8ubGlicyBcCistICAtTCQoVE9QKS9saWIgLUwkKFRPUCkvbGliLy5saWJzIFwKKy0gIC1MJChUT1ApL3NwZ3JvdmUgLUwkKFRPUCkvc3Bncm92ZS8ubGlicyAKKytERVBMSUJTPS1sbSAkKFRPUCkvZ3JvdmUgXAorKyAgJChUT1ApL2xpYiAgXAorKyAgJChUT1ApL3NwZ3JvdmUKKyBPQkpTPUxhbmdPYmoubyBcCisgICBDb2xsZWN0b3IubyBcCisgICBEc3NzbEFwcC5vIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL21zZ2dlbi5wbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL21zZ2dlbi5wbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDdmZDQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvbXNnZ2VuLnBsLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK2NvbW1pdCBmY2M1Yjk0ZjExODQ5NWIxYTQ2N2VkY2RhNmM2ZjYzMTY5MWMzZjY5CitBdXRob3I6IERlbm5pcyBMYW4gPGRlbm5pcy55eHVuQGdtYWlsLmNvbT4KK0RhdGU6ICAgVHVlIEp1bCAzIDA5OjI1OjQyIDIwMTIgKzA4MDAKKworICAgIG9wZW5qYWRlOiBmaXggdW5kZWZpbmVkIEdldG9wdHMgZXJyb3IsIHVzZSBzdGQgbmFtZXNwYWNlCisgICAgCisgICAgVXNpbmcgR2VudG9vIExpbnV4IGFzIHRoZSBidWlsZCBob3N0LCBpdCBmYWlscyB3aXRob3V0IHRoaXMgcGF0Y2gKKyAgICBVc2UgR2V0b3B0OjpTdGQgaW4gcGxhY2Ugb2YgZ2V0b3B0cy5wbC4KKyAgICAKKyAgICBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW25vIHVwc3RyZWFtXQorICAgIE9yaWdpbmFsLUF1dGhvci1CeTogTWlrZSBHaWxiZXJ0IDxmbG9wcHltQGdlbnRvby5vcmc+CisgICAgU2lnbmVkLW9mZi1ieTogRGVubmlzIExhbiA8ZGVubmlzLnl4dW5AZ21haWwuY29tPgorCitkaWZmIC0tZ2l0IGEvbXNnZ2VuLnBsIGIvbXNnZ2VuLnBsCitpbmRleCAwYzMzOTY4Li4yZWUzZjY2IDEwMDY0NAorLS0tIGEvbXNnZ2VuLnBsCisrKysgYi9tc2dnZW4ucGwKK0BAIC00LDYgKzQsNyBAQAorICMgU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIGNvcHlpbmcgcGVybWlzc2lvbi4KKyAKKyB1c2UgUE9TSVg7CisrdXNlIEdldG9wdDo6U3RkOworIAorICMgUGFja2FnZSBhbmQgdmVyc2lvbi4KKyAkcGFja2FnZSA9ICdvcGVuamFkZSc7CitAQCAtMTgsOCArMTksNyBAQCAkZ2VuX2MgPSAwOworIHVuZGVmICRvcHRfbDsKKyB1bmRlZiAkb3B0X3A7CisgdW5kZWYgJG9wdF90OworLWRvICdnZXRvcHRzLnBsJzsKKy0mR2V0b3B0cygnbDpwOnQ6Jyk7CisrZ2V0b3B0cygnbDpwOnQ6Jyk7CisgJG1vZHVsZSA9ICRvcHRfbDsKKyAkcG90X2ZpbGUgPSAkb3B0X3A7CisgCitAQCAtNzIsNyArNzIsNyBAQCB3aGlsZSAoPERFRj4pIHsKKyAgICAgZWxzZSB7CisgCSRmaWVsZFswXSA9fiAvXltJV1FYRV1bMC05XSQvIHx8ICZlcnJvcigiaW52YWxpZCBmaXJzdCBmaWVsZCIpOzsKKyAJJHR5cGVbJG51bV0gPSBzdWJzdHIoJGZpZWxkWzBdLCAwLCAxKTsKKy0JJGFyZ2MgPSBpbnQoc3Vic3RyKCRmaWVsZFswXSwgMSwgMSkpOworKwkkYXJnYyA9IHN1YnN0cigkZmllbGRbMF0sIDEsIDEpOworICAgICB9CisgICAgICRuYXJnc1skbnVtXSA9ICRhcmdjOworICAgICAkZmllbGRbMV0gPX4gL15bYS16QS1aX11bYS16QS1aMC05X10rJC8gfHwgJmVycm9yKCJpbnZhbGlkIHRhZyIpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvcmVhdXRvY29uZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL3JlYXV0b2NvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEyM2E0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL3JlYXV0b2NvbmYucGF0Y2gKQEAgLTAsMCArMSw4MyBAQAorRW5zdXJlIHdlIHJlYXV0b2NvbmYgdGhlIHBhY2thZworCitDdXJyZW50bHkgc2luY2UgY29uZmlndXJlLmluIGluIGlzIGluIGEgc3ViZGlyZWN0b3J5LCB3ZSBkb24ndCByZWF1dG9jb25mIHRoZSAKK3JlY2lwZS4gV2UgcmVhbGx5IG5lZWQgdG8gZG8gdGhpcywgdG8gdXBkYXRlIHRoaW5ncyBsaWtlIHRoZSBsaWJ0b29sIHNjcmlwdCB1c2VkCithbmQgZml4IHZhcmlvdXMgaXNzdWVzIHN1Y2ggYXMgdGhvc2UgdGhhdCBjb3VsZCBjcmVlcCBpbiBpZiBhIHJlYXV0b2NvbmYgaXMgCit0cmlnZ2VyZWQgZm9yIHNvbWUgcmVhc29uLiBTaW5jZSB0aGlzIHNvdXJjZSBvbmx5IGNhbGxzIEFNX0lOSVRfQVVUT01BS0UgdG8gCitnYWluIHRoZSBQQUNLQUdFIGFuZCBWRVJTSU9OIGRlZmluaXRpb25zIGFuZCB0aGF0IG1hY3JvIG5vdyBlcnJvcnMgaWYgTWFrZWZpbGUuYW0gCitkb2Vzbid0IGV4aXN0LCB3ZSBuZWVkIHRvIGFkZCB0aGVzZSBkZWZpbml0aW9ucyBtYW51YWxseS4gCisKK1RoZXNlIGNoYW5nZXMgYXZvaWQgZmFpbHVyZXMgbGlrZTogCistLS0tIAorfCAuLi4gCit8IERzc3NsQXBwLmN4eDoxMTc6MzY6IGVycm9yOiAnUEFDS0FHRScgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlIAorfCBEc3NzbEFwcC5jeHg6MTE4OjM2OiBlcnJvcjogJ1ZFUlNJT04nIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZSAKK3wgbWFrZVsyXTogKioqIFtEc3NzbEFwcC5sb10gRXJyb3IgMSAtLS0tCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSUCAyMDEyLzYvMTIKKworSW5kZXg6IG9wZW5qYWRlLTEuMy4yL2FjaW5jbHVkZS5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5qYWRlLTEuMy4yL2FjaW5jbHVkZS5tNAkyMDEyLTA2LTEyIDEyOjQ4OjU0Ljg3MTM2NTM0NCArMDAwMAorQEAgLTAsMCArMSwzOSBAQAorK2RubCBDb25maWd1cmUtdGltZSBzd2l0Y2ggd2l0aCBkZWZhdWx0CisrZG5sCisrZG5sIEVhY2ggc3dpdGNoIGRlZmluZXMgYW4gLS1lbmFibGUtRk9PIGFuZCAtLWRpc2FibGUtRk9PIG9wdGlvbiBpbgorK2RubCB0aGUgcmVzdWx0aW5nIGNvbmZpZ3VyZSBzY3JpcHQuCisrZG5sCisrZG5sIFVzYWdlOgorK2RubCBzbXJfU1dJVENIKG5hbWUsIGRlc2NyaXB0aW9uLCBkZWZhdWx0LCBwb3MtZGVmLCBuZWctZGVmKQorK2RubAorK2RubCB3aGVyZToKKytkbmwKKytkbmwgbmFtZSAgICAgICAgbmFtZSBvZiBzd2l0Y2g7IGdlbmVyYXRlcyAtLWVuYWJsZS1uYW1lICYgLS1kaXNhYmxlLW5hbWUKKytkbmwgICAgICAgICAgICAgb3B0aW9ucworK2RubCBkZXNjcmlwdGlvbiBoZWxwIHN0cmluZyBpcyBzZXQgdG8gdGhpcyBwcmVmaXhlZCBieSAiZW5hYmxlIiBvcgorK2RubCAgICAgICAgICAgICAiZGlzYWJsZSIsIHdoaWNoZXZlciBpcyB0aGUgbm9uLWRlZmF1bHQgdmFsdWUKKytkbmwgZGVmYXVsdCAgICAgZWl0aGVyICJvbiIgb3IgIm9mZiI7IHNwZWNpZmllcyBkZWZhdWx0IGlmIG5laXRoZXIKKytkbmwgICAgICAgICAgICAgLS1lbmFibGUtbmFtZSBub3IgLS1kaXNhYmxlLW5hbWUgaXMgc3BlY2lmaWVkCisrZG5sIHBvcy1kZWYgICAgIGEgc3ltYm9sIHRvIEFDX0RFRklORSBpZiBzd2l0Y2ggaXMgb24gKG9wdGlvbmFsKQorK2RubCBuZWctZGVmICAgICBhIHN5bWJvbCB0byBBQ19ERUZJTkUgaWYgc3dpdGNoIGlzIG9mZiAob3B0aW9uYWwpCisrZG5sCisrQUNfREVGVU4oc21yX1NXSVRDSCwgWworKyAgICBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciB0byBlbmFibGUgJDIpCisrICAgIEFDX0FSR19FTkFCTEUoCisrICAgICAgICAkMSwKKysgICAgICAgIGlmZWxzZSgkMywgb24sCisrICAgICAgICAgICAgWyAgLS1kaXNhYmxlLVskMV0gICAgZGlzYWJsZSBbJDJdXSwKKysgICAgICAgICAgICBbICAtLWVuYWJsZS1bJDFdICAgICBlbmFibGUgWyQyXV0pLAorKyAgICAgICAgWyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9IHllczsgdGhlbgorKyAgICAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorKyAgICAgICAgICAgIGlmZWxzZSgkNCwgLCAsIEFDX0RFRklORSgkNCkpCisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChubykKKysgICAgICAgICAgICBpZmVsc2UoJDUsICwgLCBBQ19ERUZJTkUoJDUpKQorKyAgICAgICAgZmkgXSwKKysgICAgICAgIGlmZWxzZSgkMywgb24sCisrICAgICAgICAgICBbIEFDX01TR19SRVNVTFQoeWVzKQorKyAgICAgICAgICAgICBpZmVsc2UoJDQsICwgLCBBQ19ERUZJTkUoJDQpKSBdLAorKyAgICAgICAgICAgWyBBQ19NU0dfUkVTVUxUKG5vKQorKyAgICAgICAgICAgIGlmZWxzZSgkNSwgLCAsIEFDX0RFRklORSgkNSkpXSkpXSkKKysKK0luZGV4OiBvcGVuamFkZS0xLjMuMi9jb25maWcvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbmphZGUtMS4zLjIub3JpZy9jb25maWcvY29uZmlndXJlLmluCTIwMTItMDYtMTIgMTI6NDc6MjAuNzM1MzY1NDQ1ICswMDAwCisrKysgb3BlbmphZGUtMS4zLjIvY29uZmlnL2NvbmZpZ3VyZS5pbgkyMDEyLTA2LTEyIDEyOjQ4OjE3LjUwNzM2NDA4MCArMDAwMAorQEAgLTEyLDkgKzEyLDEyIEBACisgZG5sICBDcmVkaXRzOiB0aGlzIGF1dG9jb25mIHNjcmlwdCB3YXMgbGFyZ2VseSAiaW5zcGlyZWQiIDxnPiBieSB0aGUKKyBkbmwgIGF1dG9jb25mIHNjcmlwdCBhcm91bmQgU1AgbWFkZSBieSBIZW5yeSBUaG9tcHNvbi4KKyBkbmwKKy1BQ19JTklUKGRzc3NsKQorK0FDX0lOSVQoW29wZW5qYWRlXSwgWzEuMy4yXSkKKyBBQ19DT05GSUdfQVVYX0RJUihjb25maWcpCistQU1fSU5JVF9BVVRPTUFLRSggb3BlbmphZGUsIDEuMy4yKQorK0FDX1NVQlNUKFtQQUNLQUdFXSwgW29wZW5qYWRlXSkKKytBQ19TVUJTVChbVkVSU0lPTl0sIFsxLjMuMl0pCisrQUNfREVGSU5FX1VOUVVPVEVEKFBBQ0tBR0UsICIkUEFDS0FHRSIpCisrQUNfREVGSU5FX1VOUVVPVEVEKFZFUlNJT04sICIkVkVSU0lPTiIpCisgVE9QPWBwd2RgCisgQUNfU1VCU1QoVE9QKQorIGRubApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvdXNlci1kZWNsYXJlZC1kZWZhdWx0LWNvbnN0cnVjdG9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvdXNlci1kZWNsYXJlZC1kZWZhdWx0LWNvbnN0cnVjdG9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3M2FmNDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi91c2VyLWRlY2xhcmVkLWRlZmF1bHQtY29uc3RydWN0b3IucGF0Y2gKQEAgLTAsMCArMSw5MiBAQAorSW4gR0NDIDQuNiB0aGUgY29tcGlsZXIgbm8gbG9uZ2VyIGFsbG93cyBvYmplY3RzIG9mIGNvbnN0LXF1YWxpZmllZCB0eXBlIHRvCitiZSBkZWZhdWx0IGluaXRpYWxpemVkIHVubGVzcyB0aGUgdHlwZSBoYXMgYSB1c2VyLWRlY2xhcmVkIGRlZmF1bHQKK2NvbnN0cnVjdG9yLgorCitQYXRjaCBmcm9tIEdlbnRvbyBidWd6aWxsYTogaHR0cDovL2J1Z3MuZ2VudG9vLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzU4MDIxCisKK0dlbnRvbyBCdWd6aWxsYSBkZXNjcmlwdGlvbiBmb2xsb3dzOgorIklmIGEgY2xhc3Mgb3Igc3RydWN0IGhhcyBubyB1c2VyLWRlZmluZWQgZGVmYXVsdCBjb25zdHJ1Y3RvciwgQysrIGRvZXNuJ3QKK2FsbG93IHlvdSB0byBkZWZhdWx0IGNvbnN0cnVjdCBhIGNvbnN0IGluc3RhbmNlIG9mIGl0LgorCitodHRwczovL2J1Z3MuZ2VudG9vLm9yZy8zNTgwMjEKK2h0dHA6Ly9jbGFuZy5sbHZtLm9yZy9jb21wYXRpYmlsaXR5Lmh0bWwjZGVmYXVsdF9pbml0X2NvbnN0CitodHRwOi8vZ2NjLmdudS5vcmcvUFI0NDQ5OSIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gYS9qYWRlL1RlWEZPVEJ1aWxkZXIuY3h4CisrKysgYi9qYWRlL1RlWEZPVEJ1aWxkZXIuY3h4CitAQCAtODgsNiArODgsOCBAQCBwdWJsaWM6CisgICAgICAgdmFsdWUuY29udmVydFN0cmluZyhuaWNfLnBsYWNlbWVudCk7CisgICAgICAgfQorICAgICBFeHRlbnNpb25GbG93T2JqICpjb3B5KCkgY29uc3QgeyByZXR1cm4gbmV3IFBhZ2VGbG9hdEZsb3dPYmooKnRoaXMpOyB9CisrICBwdWJsaWM6CisrICAgIFBhZ2VGbG9hdEZsb3dPYmooKSB7fQorICAgcHJpdmF0ZToKKyAgICAgUGFnZUZsb2F0TklDIG5pY187CisgICAgIFN0cmluZ0MgbmFtZV87CitAQCAtMTAxLDYgKzEwMyw4IEBAIHB1YmxpYzoKKyAgICAgICBmb3RiLmVuZFBhZ2VGb290bm90ZSgpOworICAgICB9CisgICAgIEV4dGVuc2lvbkZsb3dPYmogKmNvcHkoKSBjb25zdCB7IHJldHVybiBuZXcgUGFnZUZvb3Rub3RlRmxvd09iaigqdGhpcyk7IH0KKysgIHB1YmxpYzoKKysgICAgUGFnZUZvb3Rub3RlRmxvd09iaigpIHt9CisgICBwcml2YXRlOgorICAgfTsKKyAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy0tLSBhL2phZGUvVHJhbnNmb3JtRk9UQnVpbGRlci5jeHgKKysrKyBiL2phZGUvVHJhbnNmb3JtRk9UQnVpbGRlci5jeHgKK0BAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKKyAgIH07CisgICBjbGFzcyBFbnRpdHlSZWZGbG93T2JqIDogcHVibGljIFRyYW5zZm9ybUV4dGVuc2lvbkZsb3dPYmogeworICAgcHVibGljOgorKyAgICBFbnRpdHlSZWZGbG93T2JqKCkge30KKyAgICAgdm9pZCBhdG9taWMoVHJhbnNmb3JtRk9UQnVpbGRlciAmZm90YiwgY29uc3QgTm9kZVB0ciAmKSBjb25zdCB7CisgICAgICAgZm90Yi5lbnRpdHlSZWYobmFtZV8pOworICAgICB9CitAQCAtNTYsNiArNTcsNyBAQCBwdWJsaWM6CisgICB9OworICAgY2xhc3MgUHJvY2Vzc2luZ0luc3RydWN0aW9uRmxvd09iaiA6IHB1YmxpYyBUcmFuc2Zvcm1FeHRlbnNpb25GbG93T2JqIHsKKyAgIHB1YmxpYzoKKysgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uRmxvd09iaigpIHt9CisgICAgIHZvaWQgYXRvbWljKFRyYW5zZm9ybUZPVEJ1aWxkZXIgJmZvdGIsIGNvbnN0IE5vZGVQdHIgJikgY29uc3QgeworICAgICAgIGZvdGIucHJvY2Vzc2luZ0luc3RydWN0aW9uKGRhdGFfKTsKKyAgICAgfQorQEAgLTk4LDYgKzEwMCw4IEBAIHB1YmxpYzoKKyAgICAgICB9CisgICAgIH0KKyAgICAgRXh0ZW5zaW9uRmxvd09iaiAqY29weSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBFbXB0eUVsZW1lbnRGbG93T2JqKCp0aGlzKTsgfQorKyAgcHVibGljOgorKyAgICBFbXB0eUVsZW1lbnRGbG93T2JqKCkge30KKyAgIHByaXZhdGU6CisgICAgIEVsZW1lbnROSUMgbmljXzsKKyAgIH07CitAQCAtMTMzLDYgKzEzNyw4IEBAIHB1YmxpYzoKKyAgICAgICB9CisgICAgIH0KKyAgICAgRXh0ZW5zaW9uRmxvd09iaiAqY29weSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBFbGVtZW50Rmxvd09iaigqdGhpcyk7IH0KKysgIHB1YmxpYzoKKysgICAgRWxlbWVudEZsb3dPYmooKSB7fQorICAgcHJpdmF0ZToKKyAgICAgRWxlbWVudE5JQyBuaWNfOworICAgfTsKK0BAIC0xNTAsNiArMTU2LDggQEAgcHVibGljOgorICAgICAgIHZhbHVlLmNvbnZlcnRTdHJpbmcoc3lzdGVtSWRfKTsKKyAgICAgfQorICAgICBFeHRlbnNpb25GbG93T2JqICpjb3B5KCkgY29uc3QgeyByZXR1cm4gbmV3IEVudGl0eUZsb3dPYmooKnRoaXMpOyB9CisrICBwdWJsaWM6CisrICAgIEVudGl0eUZsb3dPYmooKSB7fQorICAgcHJpdmF0ZToKKyAgICAgU3RyaW5nQyBzeXN0ZW1JZF87CisgICB9OworQEAgLTE3NCw2ICsxODIsOCBAQCBwdWJsaWM6CisgICAgICAgfQorICAgICB9CisgICAgIEV4dGVuc2lvbkZsb3dPYmogKmNvcHkoKSBjb25zdCB7IHJldHVybiBuZXcgRG9jdW1lbnRUeXBlRmxvd09iaigqdGhpcyk7IH0KKysgIHB1YmxpYzoKKysgICAgRG9jdW1lbnRUeXBlRmxvd09iaigpIHt9CisgICBwcml2YXRlOgorICAgICBEb2N1bWVudFR5cGVOSUMgbmljXzsKKyAgIH07CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS1uYXRpdmVfMS4zLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS1uYXRpdmVfMS4zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3YWE2MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLW5hdGl2ZV8xLjMuMi5iYgpAQCAtMCwwICsxLDEwOCBAQAorU1VNTUFSWSA9ICJUb29scyBmb3Igd29ya2luZyB3aXRoIERTU1NMIHN0eWxlc2hlZXRzIGZvciBTR01MIGFuZCBYTUwgZG9jdW1lbnRzIgorREVTQ1JJUFRJT04gPSAiT3BlbkphZGUgaXMgYSBzdWl0ZSBvZiB0b29scyBmb3IgdmFsaWRhdGluZywgXAorcHJvY2Vzc2luZywgYW5kIGFwcGx5aW5nIERTU1NMIChEb2N1bWVudCBTdHlsZSBTZW1hbnRpY3MgYW5kIFwKK1NwZWNpZmljYXRpb24gTGFuZ3VhZ2UpIHN0eWxlc2hlZXRzIHRvIFNHTUwgYW5kIFhNTCBkb2N1bWVudHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL29wZW5qYWRlLnNvdXJjZWZvcmdlLm5ldCIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NjQxZmYxZTQ1MTFmMGE4NzA0NGFkNDJmODdjYjEwNDUiCisKK1BSID0gInI1IgorCitERVBFTkRTID0gIm9wZW5zcC1uYXRpdmUgc2dtbC1jb21tb24tbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAic2dtbC1jb21tb24tbmF0aXZlIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9vcGVuamFkZS9vcGVuamFkZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbWFrZWZpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbXNnZ2VuLnBsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlYXV0b2NvbmYucGF0Y2ggXAorCSAgIGZpbGU6Ly91c2VyLWRlY2xhcmVkLWRlZmF1bHQtY29uc3RydWN0b3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXJlZ2V4LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2RmNjkyZTMxODYxMDljYzAwZGI2ODI1Yjc3NzIwMWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWQyZDc5OTZjYzk0ZjliODdkMGM1MWNmMGUwMjgwNzBhYzE3N2M0MTIzZWNiZmQ3YWMxY2I4ZDBiN2QzMjJkMSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIG5hdGl2ZQorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc3BpbmNsdWRlZGlyPSR7U1RBR0lOR19JTkNESVJ9L09wZW5TUCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtc3BsaWJkaXI9JHtTVEFHSU5HX0xJQkRJUn0iCisKKyMgV2UgbmVlZCB0byBzZXQgZGF0YWRpciBleHBsaWNpdGx5LCBidXQgYWRkaW5nIGl0IHRvIEVYVFJBX09FQ09ORgorIyByZXN1bHRzIGluIGl0IGJlaW5nIHNwZWNpZmllZCB0d2ljZSB3aGVuIGNvbmZpZ3VyZSBpcyBydW4uCitDT05GSUdVUkVPUFRTIDo9ICIke0BkLmdldFZhcignQ09ORklHVVJFT1BUUycsIFRydWUpLnJlcGxhY2UoJy0tZGF0YWRpcj0ke2RhdGFkaXJ9JywgJy0tZGF0YWRpcj0ke1NUQUdJTkdfREFUQURJUn0vc2dtbC9vcGVuamFkZS0ke1BWfScpfSIKKworIyBDT05GSUdVUkVPUFRTIGhhcyBoYXJkIGNvZGVkIHBhdGhzIHNvIHdlIG5lZWQgdG8gaWdub3JlIGl0J3MgdmFyZGVwcworIyB0aGVyZSBhcmUgb3RoZXIgYml0cyBpbiB0aGVyZSB0b28gYnV0IHRoZXkgYXJlIHBpY2tlZCB1cCBieSBvdGhlciB2YXJpYWJsZQorIyBkZXBlbmRlbmNpZXMgc28gaXQgYWxsIHdvcmtzIG91dAorb2VfcnVuY29uZlt2YXJkZXBzZXhjbHVkZV0gKz0gIkNPTkZJR1VSRU9QVFMiCisKK0NGTEFHUyA9KyAiLUkke1N9L2luY2x1ZGUiCisKK1NTVEFURVBPU1RJTlNURlVOQ1MgKz0gIm9wZW5qYWRlX3NzdGF0ZV9wb3N0aW5zdCIKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAib3BlbmphZGVfc3lzcm9vdF9wcmVwcm9jZXNzIgorQ0xFQU5GVU5DUyArPSAib3BlbmphZGVfc3N0YXRlX2NsZWFuIgorCisjIGNvbmZpZ3VyZS5pbiBuZWVkcyB0byBiZSByZWxvYWN0ZWQgdG8gdHJpZ2dlciByZWF1dG9jb25mCitkb19leHRyYXVucGFjayAoKSB7CisJY3AgJHtTfS9jb25maWcvY29uZmlndXJlLmluICR7U30vCit9CithZGR0YXNrIGV4dHJhdW5wYWNrIGFmdGVyIGRvX3BhdGNoIGJlZm9yZSBkb19jb25maWd1cmUKKworIyBXZSBuZWVkIHRvIGRvIHRoaXMgZWxzZSB0aGUgc291cmNlIGludGVyZGVwZW5kZW5jaWVzIGFyZW4ndCBnZW5lcmF0ZWQgYW5kCisjIGJ1aWxkIGZhaWx1cmVzIGNhbiByZXN1bHQgKGUuZy4gemVybyBzaXplIHN0eWxlL01ha2VmaWxlLmRlcCBmaWxlKQorZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKwlvZV9ydW5tYWtlIGRlcGVuZAorfQorCitkb19pbnN0YWxsKCkgeworCSMgUmVmZXIgdG8gaHR0cDovL3d3dy5saW51eGZyb21zY3JhdGNoLm9yZy9ibGZzL3ZpZXcvc3RhYmxlL3BzdC9vcGVuamFkZS5odG1sCisJIyBmb3IgZGV0YWlscy4KKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0JCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vamFkZS8ubGlicy9vcGVuamFkZSAke0R9JHtiaW5kaXJ9L29wZW5qYWRlCisJbG4gLXNmIG9wZW5qYWRlICR7RH0ke2JpbmRpcn0vamFkZQorCisJb2VfbGliaW5zdGFsbCAtYSAtc28gLUMgc3R5bGUgbGlib3N0eWxlICR7RH0ke2xpYmRpcn0KKwlvZV9saWJpbnN0YWxsIC1hIC1zbyAtQyBzcGdyb3ZlIGxpYm9zcGdyb3ZlICR7RH0ke2xpYmRpcn0KKwlvZV9saWJpbnN0YWxsIC1hIC1zbyAtQyBncm92ZSBsaWJvZ3JvdmUgJHtEfSR7bGliZGlyfQorCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9CisJaW5zdGFsbCAtbSA2NDQgZHNzc2wvY2F0YWxvZyAke0R9JHtkYXRhZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9CisJaW5zdGFsbCAtbSA2NDQgZHNzc2wvKi5kdGQgJHtEfSR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfQorCWluc3RhbGwgLW0gNjQ0IGRzc3NsLyouZHNsICR7RH0ke2RhdGFkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0KKwlpbnN0YWxsIC1tIDY0NCBkc3NzbC8qLnNnbSAke0R9JHtkYXRhZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9CisKKwlpbnN0YWxsIC1kICR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfQorCWluc3RhbGwgLW0gNjQ0IGRzc3NsL2NhdGFsb2cgJHtkYXRhZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9L2NhdGFsb2cKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc2dtbAorCWVjaG8gIkNBVEFMT0cgJHtkYXRhZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9L2NhdGFsb2ciID4gXAorCQkke0R9JHtzeXNjb25mZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9LmNhdAorfQorCitvcGVuamFkZV9zc3RhdGVfcG9zdGluc3QoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorCXRoZW4KKwkJIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKwkJIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIGZyb20gc3N0YXRlIGNhY2hlLgorCQkke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1vcGVuamFkZSBcCisJCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmJhayBcCisJCQkke3N5c2NvbmZkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0uY2F0CisJCSR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vaW5zdGFsbC1jYXRhbG9nLW9wZW5qYWRlIFwKKwkJCS0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IFwKKwkJCSR7c3lzY29uZmRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfS5jYXQKKwlmaQorfQorCitvcGVuamFkZV9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworICAgIGluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8KKyAgICBpbnN0YWxsIC1tIDc1NSAke1NUQUdJTkdfQklORElSX05BVElWRX0vaW5zdGFsbC1jYXRhbG9nICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vaW5zdGFsbC1jYXRhbG9nLW9wZW5qYWRlCit9CisKK29wZW5qYWRlX3NzdGF0ZV9jbGVhbiAoKSB7CisJIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKwkjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyByZW1vdmVkIGZyb20gc3N0YXRlIGNhY2hlLgorCWZpbGVzPSIke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmJhayAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCIKKwlmb3IgZiBpbiAkZmlsZXM7IGRvCisJCVsgISAtZiAkZiBdIHx8IHNlZCAtaSAnL1wvc2dtbFwvb3BlbmphZGUtJHtQVn0uY2F0L2QnICRmCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbnNwL29wZW5zcC0xLjUuMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuc3Avb3BlbnNwLTEuNS4yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjIxOGE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbnNwL29wZW5zcC0xLjUuMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2Z1bmM9ZGV0YWlsJmFpZD0zNTk5MjkxJmdyb3VwX2lkPTIxMTUmYXRpZD0xMDIxMTVdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIE9wZW5TUC0xLjUuMi9jb25maWd1cmUuaW4gT3BlblNQLTEuNS4yL2NvbmZpZ3VyZS5pbgorLS0tIE9wZW5TUC0xLjUuMi9jb25maWd1cmUuaW4JMjAwNS0xMi0yMyAxNjoxNToyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBPcGVuU1AtMS41LjIvY29uZmlndXJlLmluCTIwMTMtMDEtMDMgMDk6MDQ6NTEuOTIyNjQ1Njg5ICswMjAwCitAQCAtMTYsNyArMTYsNyBAQAorIEFNX0lOSVRfQVVUT01BS0UoT3BlblNQLCAxLjUuMiwgbm8tZGVmaW5lKQorIEFNX01BSU5UQUlORVJfTU9ERQorIEFDX1BSRVJFUSgyLjUzKQorLUFNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisrQUNfQ09ORklHX0hFQURFUlMoY29uZmlnLmgpCisgQU1fU0FOSVRZX0NIRUNLCisKKyBkbmwgQXV0b2hlYWRlciBkZWZpbml0aW9ucwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbnNwL29wZW5zcF8xLjUuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5zcC9vcGVuc3BfMS41LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmMTE1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5zcC9vcGVuc3BfMS41LjIuYmIKQEAgLTAsMCArMSw1NSBAQAorU1VNTUFSWSA9ICJBbiBTR01MIHBhcnNlciIKK0RFU0NSSVBUSU9OID0gIkFuIFNHTUwgcGFyc2VyIHVzZWQgYnkgdGhlIE9wZW5KYWRlIHN1aXRlIG9mIHV0aWxpdGllcy4iCitIT01FUEFHRSA9ICJodHRwOi8vb3BlbmphZGUuc291cmNlZm9yZ2UubmV0IgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NDFmZjFlNDUxMWYwYTg3MDQ0YWQ0MmY4N2NiMTA0NSIKKworUFIgPSAicjEiCisKKyMgQXQgLU9zIGl0IGVuY291bnRlcnMgY2FsbHMgdG8gc29tZSBpbmxpbmUgZnVuY3Rpb25zIHdoaWNoIGFyZSB0aGVuCisjIG5vdCBmb3VuZCBpbiBhbnkgb3RoZXIgb2JqZWN0cyB3aXRoIGdjYyA0LjUKK0ZVTExfT1BUSU1JWkFUSU9OICs9ICItTzIiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L29wZW5qYWRlL09wZW5TUC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjY3MGIyMjNjNWQxMmNlZTQwYzkxMzdiZTg2YjZjMzliIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU3ZjQ4OTg0OThhMzY4OTE4YjBkNDljODI2YWE0MzRiYjViNzAzZDJjM2IxNjliZWIzNDgwMTZhYjI1NjE3Y2UiCisKK1MgPSAiJHtXT1JLRElSfS9PcGVuU1AtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kb2MtYnVpbGQiCisKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiXAorCS0tZGlzYWJsZS1kb2MtYnVpbGQgXAorCS0tZW5hYmxlLWRlZmF1bHQtY2F0YWxvZz0ke3N5c2NvbmZkaXJ9L3NnbWwvY2F0YWxvZyBcCisJLS1lbmFibGUtZGVmYXVsdC1zZWFyY2gtcGF0aD0ke2RhdGFkaXJ9L3NnbWwgXAorCSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBTZXQgdXAgc3ltbGlua3MgdG8gb2Z0ZW4tdXNlZCBhbHRlcm5hdGUgbmFtZXMuIFNlZQorCSMgaHR0cDovL3d3dy5saW51eGZyb21zY3JhdGNoLm9yZy9ibGZzL3ZpZXcvc3RhYmxlL3BzdC9vcGVuc3AuaHRtbAorCWNkICR7RH0ke2xpYmRpcn0KKwlsbiAtc2YgbGlib3NwLnNvIGxpYnNwLnNvCisKKwljZCAke0R9JHtiaW5kaXJ9CisJZm9yIHV0aWwgaW4gbnNnbWxzIHNnbWxub3JtIHNwYW0gc3BjYXQgc3BlbnQgc3g7IGRvCisJCWxuIC1zZiBvJHV0aWwgJHV0aWwJCisJZG9uZQorCWxuIC1zZiBvc3ggc2dtbDJ4bWwKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWZvciB1dGlsIGluIG5zZ21scyBzZ21sbm9ybSBzcGFtIHNwY2F0IHNwZW50IHN4OyBkbworCQljcmVhdGVfY21kbGluZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9LyR1dGlsIFwKKwkJICAgIC1EICR7c3lzY29uZmRpcn0vc2dtbAorCWRvbmUKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vT3BlblNQLyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHMvdGFyX2lnbm9yZV9lcnJvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlscy90YXJfaWdub3JlX2Vycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZGRiMDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHMvdGFyX2lnbm9yZV9lcnJvci5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitJZiBhIHRoZSBudW1iZXIgb2YgaGFyZCBsaW5rcyBkZWNyZWFzZXMgb3IgaW5jcmVhc2VzIHdoaWxlIGNyZWF0aW5nCit0aGUgdGFyIGZpbGVzIHVzZWQgZm9yIGFuIGlwayBwYWNrYWdlLCB0YXIgZmFpbHMgd2l0aCBlcnJvciBjb2RlIDE6CisKK3wgREVCVUc6IEV4ZWN1dGluZyBweXRob24gZnVuY3Rpb24gZG9fcGFja2FnZV9pcGsKK3wgdGFyOiAuL3Vzci9zcmMvZGVidWcvZ3BlcmYvMy4wLjQtcjAvZ3BlcmYtMy4wLjQvc3JjL21haW4uY2M6IGZpbGUgY2hhbmdlZCBhcyB3ZSByZWFkIGl0CitOT1RFOiByZWNpcGUgZ3BlcmYtMy4wLjQtcjA6IHRhc2sgZG9fcGFja2FnZV93cml0ZV9pcGs6IEZhaWxlZAorRVJST1I6IFRhc2sgNjUzOSAocmVjaXBlcy1leHRlbmRlZC9ncGVyZi9ncGVyZl8zLjAuNC5iYiwgZG9fcGFja2FnZV93cml0ZV9pcGspIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnMScKKworCitXZSBkZXRlY3QgaWYgdGhlIGVycm9yIGNvZGUgcHJvZHVjZWQgYnkgdGFyIGlzIDEgYW5kIGluIHRoaXMgY2FzZSBpZ25vcmUgaXQuCisKK1RoaXMgYSBzaW1pbGFyIGJlaGF2aW9yIHRvIHRoZSBvbmUgb24gZHBrZzoKK2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3Bva3kvY29tbWl0Lz9pZD00MDczMTk0MjUxNWVjOGQ4MGM3MjdhZDU2MTE3NDk4NmQ0ZjA1ODE4CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworCitJbmRleDogZ2l0L29wa2ctYnVpbGQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9vcGtnLWJ1aWxkCisrKysgZ2l0L29wa2ctYnVpbGQKK0BAIC0yNTAsOCArMjUwLDIxIEBAIHRtcF9kaXI9JGRlc3RfZGlyL0lQS0dfQlVJTEQuJCQKKyBta2RpciAkdG1wX2RpcgorIAorIGVjaG8gJENPTlRST0wgPiAkdG1wX2Rpci90YXJYCistKCBjZCAkcGtnX2RpciAmJiB0YXIgJG9nYXJncyAtWCAkdG1wX2Rpci90YXJYIC1jeiAkdGFyZm9ybWF0IC1mICR0bXBfZGlyL2RhdGEudGFyLmd6IC4gKQorLSggY2QgJHBrZ19kaXIvJENPTlRST0wgJiYgdGFyICRvZ2FyZ3MgLWN6ICR0YXJmb3JtYXQgLWYgJHRtcF9kaXIvY29udHJvbC50YXIuZ3ogLiApCisrCisrCisrIyBJZ25vcmUgZXJyb3IgY29kZSAxLCBjYXVzZWQgYnkgbW9kaWZ5aW5nIHRoZSBudW1iZXIgb2YgaGFyZCBsaW5rcyB3aGlsZSBjcmVhdGluZyB0aGUgdGFyIGZpbGUKKytyYz0wCisrKCBjZCAkcGtnX2RpciAmJiB0YXIgJG9nYXJncyAtWCAkdG1wX2Rpci90YXJYIC1jeiAkdGFyZm9ybWF0IC1mICR0bXBfZGlyL2RhdGEudGFyLmd6IC4gKSB8fCByYz0kPworK2lmIFsgJHJjIC1uZSAxIF0gJiYgWyAkcmMgLW5lIDAgXTsgdGhlbgorKyAgICAgICAgZXhpdCAkcmMgCisrZmkKKysKKytyYz0wCisrKCBjZCAkcGtnX2Rpci8kQ09OVFJPTCAmJiB0YXIgJG9nYXJncyAtY3ogJHRhcmZvcm1hdCAtZiAkdG1wX2Rpci9jb250cm9sLnRhci5neiAuICkgfHwgcmM9JD8KKytpZiBbICRyYyAtbmUgMSBdICYmIFsgJHJjIC1uZSAwIF07IHRoZW4KKysgICAgICAgIGV4aXQgJHJjCisrZmkKKysKKyBybSAkdG1wX2Rpci90YXJYCisgCisgZWNobyAiMi4wIiA+ICR0bXBfZGlyL2RlYmlhbi1iaW5hcnkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlsc19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNTE4ZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHNfZ2l0LmJiCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiQWRkaXRpb25hbCB1dGlsaXRpZXMgZm9yIHRoZSBvcGtnIHBhY2thZ2UgbWFuYWdlciIKK1NVTU1BUllfdXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnID0gIlV0aWxpdHkgZm9yIG1hbmFnaW5nIHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIgorU0VDVElPTiA9ICJiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL29wa2cvIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9vcGtnLnB5O2JlZ2lubGluZT0xO2VuZGxpbmU9MTg7bWQ1PTE1OTE3NDkxYWQ2YmY3YWNjNjY2Y2E1ZjdjYzFlMDgzIgorUFJPVklERVMgKz0gInZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcyIKKworU1JDUkVWID0gIjUzMjc0ZjA4NzU2NWZkNDVkODQ1MmM1MzY3OTk3YmE2YTY4MmEzN2EiCitQViA9ICIwLjEuOCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9vcGtnLXV0aWxzIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGU6Ly90YXJfaWdub3JlX2Vycm9yLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitUQVJHRVRfQ0NfQVJDSCArPSAiJHtMREZMQUdTfSIKKworUFlUSE9OUkRFUFMgPSAicHl0aG9uIHB5dGhvbi1zaGVsbCBweXRob24taW8gcHl0aG9uLW1hdGggcHl0aG9uLWNyeXB0IHB5dGhvbi1sb2dnaW5nIHB5dGhvbi1mY250bCBweXRob24tc3VicHJvY2VzcyBweXRob24tcGlja2xlIHB5dGhvbi1jb21wcmVzc2lvbiBweXRob24tdGV4dHV0aWxzIHB5dGhvbi1zdHJpbmdvbGQiCitQWVRIT05SREVQU19jbGFzcy1uYXRpdmUgPSAiIgorCitQQUNLQUdFQ09ORklHID0gInB5dGhvbiIKK1BBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICIsLCwke1BZVEhPTlJERVBTfSIKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIFBSRUZJWD0ke3ByZWZpeH0gREVTVERJUj0ke0R9IGluc3RhbGwKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworCXNlZCAtaSAke0R9JHtiaW5kaXJ9L3VwZGF0ZS1hbHRlcm5hdGl2ZXMgLWUgJ3MsL3Vzci9iaW4sJHtiaW5kaXJ9LGc7IHMsL3Vzci9saWIsJHtsaWJkaXJ9LGcnCit9CisKK1BBQ0tBR0VTID0rICJ1cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2ciCitGSUxFU191cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2cgPSAiJHtiaW5kaXJ9L3VwZGF0ZS1hbHRlcm5hdGl2ZXMiCitSUFJPVklERVNfdXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnID0gInVwZGF0ZS1hbHRlcm5hdGl2ZXMgdXBkYXRlLWFsdGVybmF0aXZlcy1jd29ydGgiCitSUkVQTEFDRVNfdXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnID0gInVwZGF0ZS1hbHRlcm5hdGl2ZXMtY3dvcnRoIgorUkNPTkZMSUNUU191cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2cgPSAidXBkYXRlLWFsdGVybmF0aXZlcy1jd29ydGgiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy1hcmNoLWNvbmZpZ18xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2ctYXJjaC1jb25maWdfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZTNkZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2ctYXJjaC1jb25maWdfMS4wLmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiQXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBjb25maWd1cmF0aW9uIGZvciBvcGtnIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitQUiA9ICJyMSIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19jb21waWxlKCkgeworCW1rZGlyIC1wICR7U30vJHtzeXNjb25mZGlyfS9vcGtnLworCisJYXJjaGNvbmY9JHtTfS8ke3N5c2NvbmZkaXJ9L29wa2cvYXJjaC5jb25mCisKKwlybSAtZiAkYXJjaGNvbmYKKwlpcGtnYXJjaHM9IiR7QUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFN9IgorCXByaW9yaXR5PTEKKwlmb3IgYXJjaCBpbiAkaXBrZ2FyY2hzOyBkbyAKKwkJZWNobyAiYXJjaCAkYXJjaCAkcHJpb3JpdHkiID4+ICRhcmNoY29uZgorCQlwcmlvcml0eT0kKGV4cHIgJHByaW9yaXR5ICsgNSkKKwlkb25lCit9CisKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9vcGtnCisJaW5zdGFsbCAtbSAwNjQ0ICAke1N9LyR7c3lzY29uZmRpcn0vb3BrZy8qICR7RH0ke3N5c2NvbmZkaXJ9L29wa2cvCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vb3BrZy8gIgorCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vb3BrZy9hcmNoLmNvbmYiCisKK1JSRVBMQUNFU18ke1BOfSA9ICJvcGtnLWNvbmZpZy1iYXNlIgorUkNPTkZMSUNUU18ke1BOfSA9ICJvcGtnLWNvbmZpZy1iYXNlIgorUlBST1ZJREVTXyR7UE59ID0gIm9wa2ctY29uZmlnLWJhc2UiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cta2V5cmluZ3NfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLWtleXJpbmdzXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGQ2YWJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLWtleXJpbmdzXzEuMC5iYgpAQCAtMCwwICsxLDQ4IEBACitTVU1NQVJZID0gIktleXJpbmdzIGZvciB2ZXJpZnlpbmcgb3BrZyBwYWNrYWdlcyBhbmQgZmVlZHMiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCisjIERpc3Ryby1zcGVjaWZpYyBrZXlzIGNhbiBiZSBhZGRlZCB0byB0aGlzIHBhY2thZ2UgaW4gdHdvIHdheXM6CisjCisjICAgMSkgSW4gYSAuYmJhcHBlbmQsIGFkZCAuZ3BnIGFuZC9vciAuYXNjIGZpbGVzIHRvIFNSQ19VUkkgYW5kIGluc3RhbGwgdGhlbSB0bworIyAgICAgICR7RH0ke2RhdGFkaXJ9L29wa2cva2V5cmluZ3MvIGluIGEgZG9faW5zdGFsbF9hcHBlbmQgZnVuY3Rpb24uIFRoZXNlCisjICAgICAgZmlsZXMgc2hvdWxkIG5vdCBiZSBuYW1lZCAna2V5LSRuYW1lLmdwZycgdG8gZW5zdXJlIHRoZXkgZG9uJ3QgY29uZmxpY3QKKyMgICAgICB3aXRoIGtleXMgZXhwb3J0ZWQgYXMgcGVyICgyKS4KKyMKKyMgICAyKSBJbiBhIC5iYmFwcGVuZCwgZGlzdHJvIGNvbmZpZyBvciBsb2NhbC5jb25mLCBvdmVycmlkZSB0aGUgdmFyaWFibGUKKyMgICAgICBPUEtHX0tFWVJJTkdfS0VZUyB0byBjb250YWluIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2Yga2V5IG5hbWVzLiBGb3IKKyMgICAgICBlYWNoIG5hbWUsICdncGcgLS1leHBvcnQgJG5hbWUnIHdpbGwgYmUgcmFuIHRvIGV4cG9ydCB0aGUgcHVibGljIGtleSB0byBhCisjICAgICAgZmlsZSBuYW1lZCAna2V5LSRuYW1lLmdwZycuIFRoZSBwdWJsaWMga2V5IG11c3QgdGhlcmVmb3JlIGJlIGluIHRoZSBncGcKKyMgICAgICBrZXlyaW5ncyBvbiB0aGUgYnVpbGQgbWFjaGluZS4KKworT1BLR19LRVlSSU5HX0tFWVMgPz0gIiIKKworZG9fY29tcGlsZSgpIHsKKyAgICBmb3IgbmFtZSBpbiAke09QS0dfS0VZUklOR19LRVlTfTsgZG8KKyAgICAgICAgZ3BnIC0tZXhwb3J0ICR7bmFtZX0gPiAke0J9L2tleS0ke25hbWV9LmdwZworICAgIGRvbmUKK30KKworZG9faW5zdGFsbCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9vcGtnL2tleXJpbmdzLworICAgIGZvciBuYW1lIGluICR7T1BLR19LRVlSSU5HX0tFWVN9OyBkbworICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtCfS9rZXktJHtuYW1lfS5ncGcgJHtEfSR7ZGF0YWRpcn0vb3BrZy9rZXlyaW5ncy8KKyAgICBkb25lCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7ZGF0YWRpcn0vb3BrZy9rZXlyaW5ncyIKKworIyBXZSBuZWVkICdvcGtnLWtleScgdG8gcnVuIHRoZSBwb3N0aW5zdCBzY3JpcHQKK1JERVBFTkRTXyR7UE59ID0gIm9wa2ciCisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisjISAvYmluL3NoCitzZXQgLWUKKworaWYgWyB4IiREIiA9ICJ4IiBdOyB0aGVuCisgICAgIyBPbiB0YXJnZXQKKyAgICBvcGtnLWtleSBwb3B1bGF0ZQorZWxzZQorICAgIGV4aXQgMQorZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy8wMDAxLW9wa2dfYXJjaGl2ZS1hZGQtc3VwcG9ydC1mb3ItZW1wdHktY29tcHJlc3NlZC1maWxlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy8wMDAxLW9wa2dfYXJjaGl2ZS1hZGQtc3VwcG9ydC1mb3ItZW1wdHktY29tcHJlc3NlZC1maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWJkMTk2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLzAwMDEtb3BrZ19hcmNoaXZlLWFkZC1zdXBwb3J0LWZvci1lbXB0eS1jb21wcmVzc2VkLWZpbGVzLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gYmQzMmJiODY0NjQ1OTUwOGJiMGIwY2U1NGExNGJkNmZlMGUxOWI3NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZWphbmRybyBkZWwgQ2FzdGlsbG8gPGFsZWphbmRyby5kZWxjYXN0aWxsb0BuaS5jb20+CitEYXRlOiBUaHUsIDI3IEF1ZyAyMDE1IDE1OjUyOjE2IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIG9wa2dfYXJjaGl2ZTogYWRkIHN1cHBvcnQgZm9yIGVtcHR5IGNvbXByZXNzZWQgZmlsZXMKKworUmVncmVzc2lvbiBmcm9tIDAuMi54OiBvcGtnIHVzZWQgdG8gc3VwcG9ydCBlbXB0eSBQYWNrYWdlLmd6IGZpbGVzLgorCitTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gZGVsIENhc3RpbGxvIDxhbGVqYW5kcm8uZGVsY2FzdGlsbG9AbmkuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkCistLS0KKyBsaWJvcGtnL29wa2dfYXJjaGl2ZS5jIHwgMTUgKysrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJvcGtnL29wa2dfYXJjaGl2ZS5jIGIvbGlib3BrZy9vcGtnX2FyY2hpdmUuYworaW5kZXggYmU5MDNlNC4uN2U5MWU0OCAxMDA2NDQKKy0tLSBhL2xpYm9wa2cvb3BrZ19hcmNoaXZlLmMKKysrKyBiL2xpYm9wa2cvb3BrZ19hcmNoaXZlLmMKK0BAIC0xMjEsNiArMTIxLDkgQEAgc3RhdGljIGludCBjb3B5X3RvX3N0cmVhbShzdHJ1Y3QgYXJjaGl2ZSAqYSwgRklMRSAqIHN0cmVhbSkKKyAgICAgaW50IGVvZjsKKyAgICAgc2l6ZV90IGxlbiA9IEVYVFJBQ1RfQlVGRkVSX0xFTjsKKyAKKysgICAgaWYgKGFyY2hpdmVfZm9ybWF0KGEpID09IEFSQ0hJVkVfRk9STUFUX0VNUFRZKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisgICAgIGJ1ZmZlciA9IHhtYWxsb2MobGVuKTsKKyAKKyAgICAgd2hpbGUgKDEpIHsKK0BAIC02NTQsNiArNjU3LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgYXJjaGl2ZSAqb3Blbl9jb21wcmVzc2VkX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUpCisgICAgICAgICBnb3RvIGVycl9jbGVhbnVwOworICAgICB9CisgCisrICAgIHIgPSBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfZW1wdHkoYXIpOworKyAgICBpZiAociAhPSBBUkNISVZFX09LKSB7CisrICAgICAgICBvcGtnX21zZyhFUlJPUiwgIkVtcHR5IGZvcm1hdCBub3Qgc3VwcG9ydGVkOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgIGFyY2hpdmVfZXJyb3Jfc3RyaW5nKGFyKSk7CisrICAgICAgICBnb3RvIGVycl9jbGVhbnVwOworKyAgICB9CisrCisgICAgIC8qIE9wZW4gaW5wdXQgZmlsZSBhbmQgcHJlcGFyZSBmb3IgcmVhZGluZy4gKi8KKyAgICAgciA9IGFyY2hpdmVfcmVhZF9vcGVuX2ZpbGVuYW1lKGFyLCBmaWxlbmFtZSwgRVhUUkFDVF9CVUZGRVJfTEVOKTsKKyAgICAgaWYgKHIgIT0gQVJDSElWRV9PSykgeworQEAgLTcyMyw2ICs3MzMsNyBAQCBzdHJ1Y3Qgb3BrZ19hciAqYXJfb3Blbl9jb21wcmVzc2VkX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUpCisgeworICAgICBzdHJ1Y3Qgb3BrZ19hciAqYXI7CisgICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICplbnRyeTsKKysgICAgaW50IGVvZjsKKyAKKyAgICAgYXIgPSAoc3RydWN0IG9wa2dfYXIgKil4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgb3BrZ19hcikpOworIAorQEAgLTczNyw4ICs3NDgsOCBAQCBzdHJ1Y3Qgb3BrZ19hciAqYXJfb3Blbl9jb21wcmVzc2VkX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUpCisgICAgICAqIGhlYWRlci4gV2Ugc2tpcCBvdmVyIHRoaXMgaGVhZGVyIGhlcmUgc28gdGhhdCB0aGUgY2FsbGVyIGRvZXNuJ3QgbmVlZAorICAgICAgKiB0byBrbm93IGFib3V0IGl0LgorICAgICAgKi8KKy0gICAgZW50cnkgPSByZWFkX2hlYWRlcihhci0+YXIsIE5VTEwpOworLSAgICBpZiAoIWVudHJ5KQorKyAgICBlbnRyeSA9IHJlYWRfaGVhZGVyKGFyLT5hciwgJmVvZik7CisrICAgIGlmICghZW50cnkgJiYgIWVvZikKKyAgICAgICAgIGdvdG8gZXJyX2NsZWFudXA7CisgCisgICAgIHJldHVybiBhcjsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnL29wa2ctY29uZmlndXJlLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvb3BrZy1jb25maWd1cmUuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTc0MDI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnL29wa2ctY29uZmlndXJlLnNlcnZpY2UKQEAgLTAsMCArMSwxNyBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1PcGtnIGZpcnN0IGJvb3QgY29uZmlndXJlCitEZWZhdWx0RGVwZW5kZW5jaWVzPW5vCitBZnRlcj1zeXN0ZW1kLXJlbW91bnQtZnMuc2VydmljZSBzeXN0ZW1kLXRtcGZpbGVzLXNldHVwLnNlcnZpY2UgdG1wLm1vdW50CitCZWZvcmU9c3lzaW5pdC50YXJnZXQKKworW1NlcnZpY2VdCitUeXBlPW9uZXNob3QKK0Vudmlyb25tZW50RmlsZT0tQFNZU0NPTkZESVJAL2RlZmF1bHQvcG9zdGluc3QKK0V4ZWNTdGFydD0tQEJBU0VfQklORElSQC9zaCAtYyAiIGlmIFsgJFBPU1RJTlNUX0xPR0dJTkcgPSAnMScgXTsgdGhlbiBAQklORElSQC9vcGtnIGNvbmZpZ3VyZSA+ICRMT0dGSUxFIDI+JjE7IGVsc2UgQEJJTkRJUkAvb3BrZyBjb25maWd1cmU7IGZpIgorRXhlY1N0YXJ0UG9zdD1AQkFTRV9CSU5ESVJAL3N5c3RlbWN0bCBkaXNhYmxlIG9wa2ctY29uZmlndXJlLnNlcnZpY2UKK1N0YW5kYXJkT3V0cHV0PXN5c2xvZworUmVtYWluQWZ0ZXJFeGl0PU5vCisKK1tJbnN0YWxsXQorV2FudGVkQnk9YmFzaWMudGFyZ2V0CitXYW50ZWRCeT1zeXNpbml0LnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnL29wa2cuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy9vcGtnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJlOWU5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy9vcGtnLmNvbmYKQEAgLTAsMCArMSwyOCBAQAorIyBNdXN0IGhhdmUgb25lIG9yIG1vcmUgc291cmNlIGVudHJpZXMgb2YgdGhlIGZvcm06CisjCisjICAgc3JjIDxzcmMtbmFtZT4gPHNvdXJjZS11cmw+CisjCisjIGFuZCBvbmUgb3IgbW9yZSBkZXN0aW5hdGlvbiBlbnRyaWVzIG9mIHRoZSBmb3JtOgorIworIyAgIGRlc3QgPGRlc3QtbmFtZT4gPHRhcmdldC1wYXRoPgorIworIyB3aGVyZSA8c3JjLW5hbWU+IGFuZCA8ZGVzdC1uYW1lcz4gYXJlIGlkZW50aWZpZXJzIHRoYXQKKyMgc2hvdWxkIG1hdGNoIFthLXpBLVowLTkuXy1dKywgPHNvdXJjZS11cmw+IHNob3VsZCBiZSBhCisjIFVSTCB0aGF0IHBvaW50cyB0byBhIGRpcmVjdG9yeSBjb250YWluaW5nIGEgRmFtaWxpYXIKKyMgUGFja2FnZXMgZmlsZSwgYW5kIDx0YXJnZXQtcGF0aD4gc2hvdWxkIGJlIGEgZGlyZWN0b3J5CisjIHRoYXQgZXhpc3RzIG9uIHRoZSB0YXJnZXQgc3lzdGVtLgorCisjIFByb3h5IFN1cHBvcnQKKyNvcHRpb24gaHR0cF9wcm94eSBodHRwOi8vcHJveHkudGxkOjMxMjgKKyNvcHRpb24gZnRwX3Byb3h5IGh0dHA6Ly9wcm94eS50bGQ6MzEyOAorI29wdGlvbiBwcm94eV91c2VybmFtZSA8dXNlcm5hbWU+Cisjb3B0aW9uIHByb3h5X3Bhc3N3b3JkIDxwYXNzd29yZD4KKworIyBFbmFibGUgR1BHTUUgc2lnbmF0dXJlCisjIG9wdGlvbiBjaGVja19zaWduYXR1cmUgMQorCisjIE9mZmxpbmUgbW9kZSAoZm9yIHVzZSBpbiBjb25zdHJ1Y3RpbmcgZmxhc2ggaW1hZ2VzIG9mZmxpbmUpCisjb3B0aW9uIG9mZmxpbmVfcm9vdCB0YXJnZXQKKworIyBEZWZhdWx0IGRlc3RpbmF0aW9uIGZvciBpbnN0YWxsZWQgcGFja2FnZXMKK2Rlc3Qgcm9vdCAvCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkYmIyZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZ18wLjMuMC5iYgpAQCAtMCwwICsxLDcyIEBACitTVU1NQVJZID0gIk9wZW4gUGFja2FnZSBNYW5hZ2VyIgorU1VNTUFSWV9saWJvcGtnID0gIk9wZW4gUGFja2FnZSBNYW5hZ2VyIGxpYnJhcnkiCitTRUNUSU9OID0gImJhc2UiCitIT01FUEFHRSA9ICJodHRwOi8vY29kZS5nb29nbGUuY29tL3Avb3BrZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9vcGtnL2lzc3Vlcy9saXN0IgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvb3BrZy5jO2JlZ2lubGluZT0yO2VuZGxpbmU9MjE7bWQ1PTkwNDM1YTUxOWM2ZWE2OWVmMjJlNGE4OGJjYzUyZmEwIgorCitERVBFTkRTID0gImxpYmFyY2hpdmUiCisKK1BFID0gIjEiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzLyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL29wa2ctY29uZmlndXJlLnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vb3BrZy5jb25mIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtb3BrZ19hcmNoaXZlLWFkZC1zdXBwb3J0LWZvci1lbXB0eS1jb21wcmVzc2VkLWZpbGVzLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjM0MTJjZGM3MWQ3OGI5OGZhY2M4NGIxOTMzMWVjNjRlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdmNzM1ZDFjZGI4ZWYzNzE4ZmIwZjlmYmE0NGNhMGQ5YTVjOTBkM2E3ZjAxNGYzN2E2ZDJmOTQ3NGY1NDk4OGYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBzeXN0ZW1kCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJvcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlIgorCit0YXJnZXRfbG9jYWxzdGF0ZWRpciA6PSAiJHtsb2NhbHN0YXRlZGlyfSIKK09QS0dMSUJESVIgPSAiJHt0YXJnZXRfbG9jYWxzdGF0ZWRpcn0vbGliIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorCitQQUNLQUdFQ09ORklHW2dwZ10gPSAiLS1lbmFibGUtZ3BnLC0tZGlzYWJsZS1ncGcsZ3BnbWUgbGliZ3BnLWVycm9yLGdudXBnIgorUEFDS0FHRUNPTkZJR1tjdXJsXSA9ICItLWVuYWJsZS1jdXJsLC0tZGlzYWJsZS1jdXJsLGN1cmwiCitQQUNLQUdFQ09ORklHW3NzbC1jdXJsXSA9ICItLWVuYWJsZS1zc2wtY3VybCwtLWRpc2FibGUtc3NsLWN1cmwsY3VybCBvcGVuc3NsIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLWVuYWJsZS1vcGVuc3NsLC0tZGlzYWJsZS1vcGVuc3NsLG9wZW5zc2wiCitQQUNLQUdFQ09ORklHW3NoYTI1Nl0gPSAiLS1lbmFibGUtc2hhMjU2LC0tZGlzYWJsZS1zaGEyNTYiCitQQUNLQUdFQ09ORklHW3BhdGhmaW5kZXJdID0gIi0tZW5hYmxlLXBhdGhmaW5kZXIsLS1kaXNhYmxlLXBhdGhmaW5kZXIscGF0aGZpbmRlciIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vb3BrZworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L29wa2cuY29uZiAke0R9JHtzeXNjb25mZGlyfS9vcGtnL29wa2cuY29uZgorCWVjaG8gIm9wdGlvbiBsaXN0c19kaXIgJHtPUEtHTElCRElSfS9vcGtnL2xpc3RzIiA+PiR7RH0ke3N5c2NvbmZkaXJ9L29wa2cvb3BrZy5jb25mCisKKwkjIFdlIG5lZWQgdG8gY3JlYXRlIHRoZSBsb2NrIGRpcmVjdG9yeQorCWluc3RhbGwgLWQgJHtEfSR7T1BLR0xJQkRJUn0vb3BrZworCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTt0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vb3BrZy1jb25maWd1cmUuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwkJc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAorCQkJLWUgJ3MsQFNZU0NPTkZESVJALCR7c3lzY29uZmRpcn0sZycgXAorCQkJLWUgJ3MsQEJJTkRJUkAsJHtiaW5kaXJ9LGcnIFwKKwkJCS1lICdzLEBTWVNURU1EX1VOSVRESVJALCR7c3lzdGVtZF91bml0ZGlyfSxnJyBcCisJCQkke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlCisJZmkKK30KKworUkRFUEVORFNfJHtQTn0gPSAiJHtWSVJUVUFMLVJVTlRJTUVfdXBkYXRlLWFsdGVybmF0aXZlc30gb3BrZy1hcmNoLWNvbmZpZyBydW4tcG9zdGluc3RzIGxpYmFyY2hpdmUiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKK1JSRVBMQUNFU18ke1BOfSA9ICJvcGtnLW5vZ3BnIG9wa2ctY29sbGF0ZXJhbCIKK1JDT05GTElDVFNfJHtQTn0gPSAib3BrZy1jb2xsYXRlcmFsIgorUlBST1ZJREVTXyR7UE59ID0gIm9wa2ctY29sbGF0ZXJhbCIKKworUEFDS0FHRVMgPSsgImxpYm9wa2ciCisKK0ZJTEVTX2xpYm9wa2cgPSAiJHtsaWJkaXJ9Lyouc28uKiAke09QS0dMSUJESVJ9L29wa2cvIgorRklMRVNfJHtQTn0gKz0gIiR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L29wa2cvb3BrZy5jb25mIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3JjL29yY18wLjQuMjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcmMvb3JjXzAuNC4yMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDI1N2MzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3JjL29yY18wLjQuMjMuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJPcHRpbWlzZWQgSW5uZXIgTG9vcCBSdW50aW1lIENvbXBpbGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL2NvZGUuZW50cm9weXdhdmUuY29tL3Byb2plY3RzL29yYy8iCitMSUNFTlNFID0gIkJTRC0yLUNsYXVzZSAmIEJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE0MDBiZDlkMDllOGFmNTZiOWVjOTgyYjNkODU3OTdlIgorCitTUkNfVVJJID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9vcmMvb3JjLSR7UFZ9LnRhci54ejtuYW1lPW9yYyIKK1NSQ19VUklbb3JjLm1kNXN1bV0gPSAiNzJlMDYxMmFjZTU0ZDc3YWEyZjdhMDA2MzQ4ZWU4MWEiCitTUkNfVVJJW29yYy5zaGEyNTZzdW1dID0gIjc2N2VhZWJjZTI5NDE3MzdiNDMzNjgyMjVlYzU0NTk4YjMwNTVjYTc4YjRkYzUwYzQwOTJmNWZjZGMwYmRmZTciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1BBQ0tBR0VTID0rICJvcmMtZXhhbXBsZXMiCitGSUxFU19vcmMtZXhhbXBsZXMgPSAiJHtsaWJkaXJ9L29yYy8qIgorRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyoiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBsaWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9JykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWJkaXIsICdebGliKC4qKVwuc29cLionLCAnbGliJXMnLCAnT1JDICVzIGxpYnJhcnknLCBleHRyYV9kZXBlbmRzPScnLCBhbGxvd19saW5rcz1UcnVlKQorfQorCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKyAgICBzZWQgLWkgLWUgJ3MjL3RtcCMuI2cnICR7U30vb3JjL29yY2NvZGVtZW0uYworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDAxLUNoYW5nZS1saWJyYXJ5LW5hbWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDEtQ2hhbmdlLWxpYnJhcnktbmFtZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDY3YzUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDAxLUNoYW5nZS1saWJyYXJ5LW5hbWUucGF0Y2gKQEAgLTAsMCArMSwxMTkgQEAKK0Zyb206IFBpb3RyIFJvc3phdHlja2kgPGRleHRlckBkZWJpYW4ub3JnPgorRGF0ZTogV2VkLCAyNyBKYW4gMjAxMCAxNjo1MzoxMSArMDEwMAorU3ViamVjdDogW1BBVENIXSBDaGFuZ2UgbGlicmFyeSBuYW1lCisKK1RoZSBzb25hbWUgd2FzIGNoYW5nZWQgdG8gb3NzcC11dWlkIHRvIHByZXZlbmQgdGhlIG5hbWUgY2xhc2ggd2l0aCBlMmZzcHJvZ3MncwordXVpZCBsaWJyYXJ5LgorLS0tCisgTWFrZWZpbGUuaW4gICAgICB8ICAgIDYgKysrLS0tCisgcGVybC9NYWtlZmlsZS5QTCB8ICAgMTIgKysrKysrLS0tLS0tCisgcGhwL2NvbmZpZy5tNCAgICB8ICAgIDIgKy0KKyB1dWlkLWNvbmZpZy5pbiAgIHwgICAgMiArLQorIHV1aWQucGMuaW4gICAgICAgfCAgICA0ICsrLS0KKyA1IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQorCistLS0tCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW25vdCBhdXRob3JdCisKK1RoaXMgcGF0Y2ggaXMgZnJvbSBkZWJpYW4gb3NzcC11dWlkIDEuNi4yIGludGVncmF0aW9uLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBkMjhmNGJlLi5jMmJhOTlkIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNjIsMTMgKzYyLDEzIEBAIFBFUkwgICAgICAgID0gQFBFUkxACisgUEhQICAgICAgICAgPSBAUEhQQAorIFBHX0NPTkZJRyAgID0gQFBHX0NPTkZJR0AKKyAKKy1MSUJfTkFNRSAgICA9IGxpYnV1aWQubGEKKytMSUJfTkFNRSAgICA9IGxpYm9zc3AtdXVpZC5sYQorIExJQl9PQkpTICAgID0gdXVpZC5sbyB1dWlkX21kNS5sbyB1dWlkX3NoYTEubG8gdXVpZF9wcm5nLmxvIHV1aWRfbWFjLmxvIHV1aWRfdGltZS5sbyB1dWlkX3VpNjQubG8gdXVpZF91aTEyOC5sbyB1dWlkX3N0ci5sbworIAorLURDRV9OQU1FICAgID0gbGlidXVpZF9kY2UubGEKKytEQ0VfTkFNRSAgICA9IGxpYm9zc3AtdXVpZF9kY2UubGEKKyBEQ0VfT0JKUyAgICA9IHV1aWRfZGNlLmxvICQoTElCX09CSlMpCisgCistQ1hYX05BTUUgICAgPSBsaWJ1dWlkKysubGEKKytDWFhfTkFNRSAgICA9IGxpYm9zc3AtdXVpZCsrLmxhCisgQ1hYX09CSlMgICAgPSB1dWlkKysubG8gJChMSUJfT0JKUykKKyAKKyBQUkdfTkFNRSAgICA9IHV1aWQKK2RpZmYgLS1naXQgYS9wZXJsL01ha2VmaWxlLlBMIGIvcGVybC9NYWtlZmlsZS5QTAoraW5kZXggOTJmNDQ5NC4uOWM2ZmVlNiAxMDA2NDQKKy0tLSBhL3BlcmwvTWFrZWZpbGUuUEwKKysrKyBiL3BlcmwvTWFrZWZpbGUuUEwKK0BAIC0zMyw5ICszMyw5IEBAIHVzZSBDb25maWc7CisgdXNlIEV4dFV0aWxzOjpNYWtlTWFrZXI7CisgCisgIyAgIGRldGVybWluZSBzb3VyY2UgZGlyZWN0b3J5CistbXkgKCRzcmNkaXIpID0gbWFwIHsgbXkgJGQgPSAkXzsgJGQgPX4gcy9cL2xpYnV1aWRcLmxhJC8vOyAkZCB9CistICAgICAgICAgICAgICAgZ3JlcCB7IC1mICRfIH0gKCIuLi9saWJ1dWlkLmxhIiwgZ2xvYigiLi4vKi9saWJ1dWlkLmxhIikpCistICAgIG9yIGRpZSAibm8gc291cmNlIGRpcmVjdG9yeSBmb3VuZCAod2hlcmUgbGlidXVpZC5sYSBpcyBsb2NhdGVkKSI7CisrbXkgKCRzcmNkaXIpID0gbWFwIHsgbXkgJGQgPSAkXzsgJGQgPX4gcy9cL2xpYm9zc3AtdXVpZFwubGEkLy87ICRkIH0KKysgICAgICAgICAgICAgICBncmVwIHsgLWYgJF8gfSAoIi4uL2xpYm9zc3AtdXVpZC5sYSIsIGdsb2IoIi4uLyovbGlib3NzcC11dWlkLmxhIikpCisrICAgIG9yIGRpZSAibm8gc291cmNlIGRpcmVjdG9yeSBmb3VuZCAod2hlcmUgbGlib3NzcC11dWlkLmxhIGlzIGxvY2F0ZWQpIjsKKyAKKyAjICAgZGV0ZXJtaW5lIGV4dHJhIGJ1aWxkIG9wdGlvbnMKKyBteSAkY29tcGF0ID0gMDsKK0BAIC00NywxNSArNDcsMTUgQEAgV3JpdGVNYWtlZmlsZSgKKyAgICAgVkVSU0lPTl9GUk9NICAgICAgPT4gJ3V1aWQucG0nLAorICAgICBBQlNUUkFDVF9GUk9NICAgICA9PiAndXVpZC5wb2QnLAorICAgICBQUkVSRVFfUE0gICAgICAgICA9PiB7fSwKKy0gICAgTElCUyAgICAgICAgICAgICAgPT4gWyAiLUwkc3JjZGlyLy5saWJzIC1MJHNyY2RpciAtbHV1aWQiIF0sCisrICAgIExJQlMgICAgICAgICAgICAgID0+IFsgIi1MJHNyY2Rpci8ubGlicyAtTCRzcmNkaXIgLWxvc3NwLXV1aWQiIF0sCisgICAgIERFRklORSAgICAgICAgICAgID0+ICcnLAorICAgICBJTkMgICAgICAgICAgICAgICA9PiAiLUkuIC1JJHNyY2RpciIsCisgICAgIFBNICAgICAgICAgICAgICAgID0+IHsgJ3V1aWQucG0nICAgPT4gJyQoSU5TVF9MSUJESVIpL3V1aWQucG0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1dWlkLnBvZCcgID0+ICckKElOU1RfTElCRElSKS91dWlkLnBvZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCRjb21wYXQgPyAoJ3V1aWRfY29tcGF0LnBtJyAgPT4gJyQoSU5TVF9MSUJESVIpLy4uL0RhdGEvVVVJRC5wbScpICA6ICgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJGNvbXBhdCA/ICgndXVpZF9jb21wYXQucG9kJyA9PiAnJChJTlNUX0xJQkRJUikvLi4vRGF0YS9VVUlELnBvZCcpIDogKCkpLCB9LAorLSAgICBNQU4zUE9EUyAgICAgICAgICA9PiB7ICd1dWlkLnBvZCcgPT4gJyQoSU5TVF9NQU4zRElSKS9PU1NQOjp1dWlkLjMnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgkY29tcGF0ID8gKCd1dWlkX2NvbXBhdC5wb2QnID0+ICckKElOU1RfTUFOM0RJUikvRGF0YTo6VVVJRC4zJykgOiAoKSksIH0sCisrICAgIE1BTjNQT0RTICAgICAgICAgID0+IHsgJ3V1aWQucG9kJyA9PiAnJChJTlNUX01BTjNESVIpL09TU1A6OnV1aWQuM3BtJywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAoJGNvbXBhdCA/ICgndXVpZF9jb21wYXQucG9kJyA9PiAnJChJTlNUX01BTjNESVIpL0RhdGE6OlVVSUQuM3BtJykgOiAoKSksIH0sCisgICAgIFRZUEVNQVBTICAgICAgICAgID0+IFsgJ3V1aWQudG0nIF0sCisgICAgIHRlc3QgICAgICAgICAgICAgID0+IHsgVEVTVFMgPT4gJ3V1aWQudHMnIC4gKCRjb21wYXQgPyAnIHV1aWRfY29tcGF0LnRzJyA6ICcnKSB9LAorICAgICBOT19NRVRBICAgICAgICAgICA9PiAxLAorZGlmZiAtLWdpdCBhL3BocC9jb25maWcubTQgYi9waHAvY29uZmlnLm00CitpbmRleCA1MDkxYjk2Li45NjliNDU3IDEwMDY0NAorLS0tIGEvcGhwL2NvbmZpZy5tNAorKysrIGIvcGhwL2NvbmZpZy5tNAorQEAgLTM0LDcgKzM0LDcgQEAgaWYgdGVzdCAiJFBIUF9VVUlEIiAhPSAibm8iOyB0aGVuCisgICAgIFBIUF9ORVdfRVhURU5TSU9OKHV1aWQsIHV1aWQuYywgJGV4dF9zaGFyZWQpCisgICAgIEFDX0RFRklORShIQVZFX1VVSUQsIDEsIFtIYXZlIE9TU1AgdXVpZCBsaWJyYXJ5XSkKKyAgICAgUEhQX0FERF9MSUJQQVRIKFsuLl0sICkKKy0gICAgUEhQX0FERF9MSUJSQVJZKFt1dWlkXSwsIFVVSURfU0hBUkVEX0xJQkFERCkKKysgICAgUEhQX0FERF9MSUJSQVJZKFtvc3NwLXV1aWRdLCwgVVVJRF9TSEFSRURfTElCQUREKQorICAgICBQSFBfQUREX0lOQ0xVREUoWy4uXSkKKyAgICAgUEhQX1NVQlNUKFVVSURfU0hBUkVEX0xJQkFERCkKKyAKK2RpZmYgLS1naXQgYS91dWlkLWNvbmZpZy5pbiBiL3V1aWQtY29uZmlnLmluCitpbmRleCA4ZDJhMDYzLi41YjU4ODEyIDEwMDY0NAorLS0tIGEvdXVpZC1jb25maWcuaW4KKysrKyBiL3V1aWQtY29uZmlnLmluCitAQCAtMTIxLDcgKzEyMSw3IEBAIGRvCisgICAgICAgICAgICAgb3V0cHV0X2V4dHJhPSIkb3V0cHV0X2V4dHJhICR1dWlkX2xkZmxhZ3MiCisgICAgICAgICAgICAgOzsKKyAgICAgICAgIC0tbGlicykKKy0gICAgICAgICAgICBvdXRwdXQ9IiRvdXRwdXQgLWx1dWlkIgorKyAgICAgICAgICAgIG91dHB1dD0iJG91dHB1dCAtbG9zc3AtdXVpZCIKKyAgICAgICAgICAgICBvdXRwdXRfZXh0cmE9IiRvdXRwdXRfZXh0cmEgJHV1aWRfbGlicyIKKyAgICAgICAgICAgICA7OworICAgICAgICAgKiApCitkaWZmIC0tZ2l0IGEvdXVpZC5wYy5pbiBiL3V1aWQucGMuaW4KK2luZGV4IGM3NmFkMWUuLmRlMDBjMmYgMTAwNjQ0CistLS0gYS91dWlkLnBjLmluCisrKysgYi91dWlkLnBjLmluCitAQCAtMzYsNyArMzYsNyBAQCBOYW1lOiBPU1NQIHV1aWQKKyBEZXNjcmlwdGlvbjogVW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXIgKFVVSUQpIExpYnJhcnkKKyBWZXJzaW9uOiBAVVVJRF9WRVJTSU9OX1JBV0AKKyBVUkw6IGh0dHA6Ly93d3cub3NzcC5vcmcvcGtnL2xpYi91dWlkLworLUNmbGFnczogLUkke2luY2x1ZGVkaXJ9CistTGliczogLUwke2xpYmRpcn0gLWx1dWlkCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0vb3NzcAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sb3NzcC11dWlkCisgTGlicy5wcml2YXRlOiBATElCU0AKKyAKKy0tIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDAyLXV1aWQtcHJlc2VydmUtbS1vcHRpb24tc3RhdHVzLWluLXYtb3B0aW9uLWhhbmRsaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDAyLXV1aWQtcHJlc2VydmUtbS1vcHRpb24tc3RhdHVzLWluLXYtb3B0aW9uLWhhbmRsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNGE2MjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDItdXVpZC1wcmVzZXJ2ZS1tLW9wdGlvbi1zdGF0dXMtaW4tdi1vcHRpb24taGFuZGxpbmcucGF0Y2gKQEAgLTAsMCArMSw2MiBAQAorRnJvbTogTWFyY28gTmVuY2lhcmluaSA8bWFyY28ubmVuY2lhcmluaUBkZXZpc2UuaXQ+CitEYXRlOiBXZWQsIDI3IEphbiAyMDEwIDE5OjQ2OjIxICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHV1aWQ6IHByZXNlcnZlIC1tIG9wdGlvbiBzdGF0dXMgaW4gLXYgb3B0aW9uIGhhbmRsaW5nCisKK0J1ZzogNTMxMzk2CistLS0KKyB1dWlkX2NsaS5jIHwgICAxOSArKysrKysrKysrLS0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCistLS0tCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW25vdCBhdXRob3JdCisKK1RoaXMgcGF0Y2ggaXMgZnJvbSBkZWJpYW4gb3NzcC11dWlkIDEuNi4yIGludGVncmF0aW9uLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS91dWlkX2NsaS5jIGIvdXVpZF9jbGkuYworaW5kZXggZDFiMGIxMS4uMTRhNjdmZSAxMDA2NDQKKy0tLSBhL3V1aWRfY2xpLmMKKysrKyBiL3V1aWRfY2xpLmMKK0BAIC0xNDAsMTEgKzE0MCwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICAgICAgICAgICAgICBpID0gc3RydG9sKG9wdGFyZywgJnAsIDEwKTsKKyAgICAgICAgICAgICAgICAgaWYgKCpwICE9ICdcMCcpCisgICAgICAgICAgICAgICAgICAgICB1c2FnZSgiaW52YWxpZCBhcmd1bWVudCB0byBvcHRpb24gJ3YnIik7CisrICAgICAgICAgICAgICAgIHZlcnNpb24gJj0gfihVVUlEX01BS0VfVjF8VVVJRF9NQUtFX1YzfFVVSURfTUFLRV9WNHxVVUlEX01BS0VfVjUpOworICAgICAgICAgICAgICAgICBzd2l0Y2ggKGkpIHsKKy0gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogdmVyc2lvbiA9IFVVSURfTUFLRV9WMTsgYnJlYWs7CistICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHZlcnNpb24gPSBVVUlEX01BS0VfVjM7IGJyZWFrOworLSAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiB2ZXJzaW9uID0gVVVJRF9NQUtFX1Y0OyBicmVhazsKKy0gICAgICAgICAgICAgICAgICAgIGNhc2UgNTogdmVyc2lvbiA9IFVVSURfTUFLRV9WNTsgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHZlcnNpb24gfD0gVVVJRF9NQUtFX1YxOyBicmVhazsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogdmVyc2lvbiB8PSBVVUlEX01BS0VfVjM7IGJyZWFrOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiB2ZXJzaW9uIHw9IFVVSURfTUFLRV9WNDsgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHZlcnNpb24gfD0gVVVJRF9NQUtFX1Y1OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UoImludmFsaWQgdmVyc2lvbiBvbiBvcHRpb24gJ3YnIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CitAQCAtMjEzLDEwICsyMTQsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgfQorICAgICBlbHNlIHsKKyAgICAgICAgIC8qIGVuY29kaW5nICovCistICAgICAgICBpZiAoICAgKHZlcnNpb24gPT0gVVVJRF9NQUtFX1YxICYmIGFyZ2MgIT0gMCkKKy0gICAgICAgICAgICB8fCAodmVyc2lvbiA9PSBVVUlEX01BS0VfVjMgJiYgYXJnYyAhPSAyKQorLSAgICAgICAgICAgIHx8ICh2ZXJzaW9uID09IFVVSURfTUFLRV9WNCAmJiBhcmdjICE9IDApCistICAgICAgICAgICAgfHwgKHZlcnNpb24gPT0gVVVJRF9NQUtFX1Y1ICYmIGFyZ2MgIT0gMikpCisrICAgICAgICBpZiAoICAgKHZlcnNpb24gJiBVVUlEX01BS0VfVjEgJiYgYXJnYyAhPSAwKQorKyAgICAgICAgICAgIHx8ICh2ZXJzaW9uICYgVVVJRF9NQUtFX1YzICYmIGFyZ2MgIT0gMikKKysgICAgICAgICAgICB8fCAodmVyc2lvbiAmIFVVSURfTUFLRV9WNCAmJiBhcmdjICE9IDApCisrICAgICAgICAgICAgfHwgKHZlcnNpb24gJiBVVUlEX01BS0VfVjUgJiYgYXJnYyAhPSAyKSkKKyAgICAgICAgICAgICB1c2FnZSgiaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIik7CisgICAgICAgICBpZiAoKHJjID0gdXVpZF9jcmVhdGUoJnV1aWQpKSAhPSBVVUlEX1JDX09LKQorICAgICAgICAgICAgIGVycm9yKDEsICJ1dWlkX2NyZWF0ZTogJXMiLCB1dWlkX2Vycm9yKHJjKSk7CitAQCAtMjMyLDcgKzIzMyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICAgICAgICAgICAgIGlmICgocmMgPSB1dWlkX2xvYWQodXVpZCwgIm5pbCIpKSAhPSBVVUlEX1JDX09LKQorICAgICAgICAgICAgICAgICAgICAgZXJyb3IoMSwgInV1aWRfbG9hZDogJXMiLCB1dWlkX2Vycm9yKHJjKSk7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGlmICh2ZXJzaW9uID09IFVVSURfTUFLRV9WMyB8fCB2ZXJzaW9uID09IFVVSURfTUFLRV9WNSkgeworKyAgICAgICAgICAgIGlmICh2ZXJzaW9uICYgVVVJRF9NQUtFX1YzIHx8IHZlcnNpb24gJiBVVUlEX01BS0VfVjUpIHsKKyAgICAgICAgICAgICAgICAgaWYgKChyYyA9IHV1aWRfY3JlYXRlKCZ1dWlkX25zKSkgIT0gVVVJRF9SQ19PSykKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yKDEsICJ1dWlkX2NyZWF0ZTogJXMiLCB1dWlkX2Vycm9yKHJjKSk7CisgICAgICAgICAgICAgICAgIGlmICgocmMgPSB1dWlkX2xvYWQodXVpZF9ucywgYXJndlswXSkpICE9IFVVSURfUkNfT0spIHsKKy0tIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDAzLUZpeC13aGF0aXMtZW50cmllcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwMy1GaXgtd2hhdGlzLWVudHJpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNjYmI1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwMy1GaXgtd2hhdGlzLWVudHJpZXMucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorRnJvbTogTWFyY28gTmVuY2lhcmluaSA8bWFyY28ubmVuY2lhcmluaUBkZXZpc2UuaXQ+CitEYXRlOiBUdWUsIDIgRmViIDIwMTAgMTI6MTY6NDkgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IHdoYXRpcyBlbnRyaWVzCisKK0ZpeCB3aGF0aXMgZW50cnkgb2YgdXVpZC4xLCB1dWlkLjNvc3NwIGFuZCB1dWlkKysuM29zc3AgbWFucGFnZXMKKy0tLQorIHV1aWQrKy5wb2QgICB8ICAgIDIgKy0KKyB1dWlkLnBvZCAgICAgfCAgICAyICstCisgdXVpZF9jbGkucG9kIHwgICAgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCistLS0tCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW25vdCBhdXRob3JdCisKK1RoaXMgcGF0Y2ggaXMgZnJvbSBkZWJpYW4gb3NzcC11dWlkIDEuNi4yIGludGVncmF0aW9uLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS91dWlkKysucG9kIGIvdXVpZCsrLnBvZAoraW5kZXggOGI1YTRiMS4uODljNWVmYiAxMDA2NDQKKy0tLSBhL3V1aWQrKy5wb2QKKysrKyBiL3V1aWQrKy5wb2QKK0BAIC0zMSw3ICszMSw3IEBACisgCisgPWhlYWQxIE5BTUUKKyAKKy1CPE9TU1AgdXVpZD4gLSBCPFVuaXZlcnNhbGx5IFVuaXF1ZSBJZGVudGlmaWVyPiAoQysrIEFQSSkKKytCPHV1aWQrKz4gLSBCPFVuaXZlcnNhbGx5IFVuaXF1ZSBJZGVudGlmaWVyPiAoQysrIEFQSSkKKyAKKyA9aGVhZDEgVkVSU0lPTgorIAorZGlmZiAtLWdpdCBhL3V1aWQucG9kIGIvdXVpZC5wb2QKK2luZGV4IDRhZDM3NDIuLjAxNzlhNDYgMTAwNjQ0CistLS0gYS91dWlkLnBvZAorKysrIGIvdXVpZC5wb2QKK0BAIC0zMSw3ICszMSw3IEBACisgCisgPWhlYWQxIE5BTUUKKyAKKy1CPE9TU1AgdXVpZD4gLSBCPFVuaXZlcnNhbGx5IFVuaXF1ZSBJZGVudGlmaWVyPgorK0I8dXVpZD4gLSBCPFVuaXZlcnNhbGx5IFVuaXF1ZSBJZGVudGlmaWVyPgorIAorID1oZWFkMSBWRVJTSU9OCisgCitkaWZmIC0tZ2l0IGEvdXVpZF9jbGkucG9kIGIvdXVpZF9jbGkucG9kCitpbmRleCBkZGVjNmJiLi5kZjlkYzgzIDEwMDY0NAorLS0tIGEvdXVpZF9jbGkucG9kCisrKysgYi91dWlkX2NsaS5wb2QKK0BAIC0zMSw3ICszMSw3IEBACisgCisgPWhlYWQxIE5BTUUKKyAKKy1CPE9TU1AgdXVpZD4gLSBCPFVuaXZlcnNhbGx5IFVuaXF1ZSBJZGVudGlmaWVyIENvbW1hbmQtTGluZSBUb29sPgorK0I8dXVpZD4gLSBCPFVuaXZlcnNhbGx5IFVuaXF1ZSBJZGVudGlmaWVyIENvbW1hbmQtTGluZSBUb29sPgorIAorID1oZWFkMSBWRVJTSU9OCisgCistLSAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwNC1maXgtZGF0YS11dWlkLWZyb20tc3RyaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDA0LWZpeC1kYXRhLXV1aWQtZnJvbS1zdHJpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM1ZTExMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwNC1maXgtZGF0YS11dWlkLWZyb20tc3RyaW5nLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Rlc2NyaXB0aW9uOiBTdXBwb3J0IGRhc2gtbGVzcyBhcmdzIHRvIGZyb21fc3RyaW5nLgorQXV0aG9yOiBUaW0gUmV0b3V0IDxkaW9jbGVzQGRlYmlhbi5vcmc+CitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzYzNTYwNworCitUaGUgbW9kdWxlIERhdGE6OkdVSUQgZGVwZW5kcyBvbiBEYXRhOjpVVUlEIHN1cHBvcnRpbmcgdGhpcyBiZWhhdmlvdXIuCisKKy0tLS0KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm90IGF1dGhvcl0KKworVGhpcyBwYXRjaCBpcyBmcm9tIGRlYmlhbiBvc3NwLXV1aWQgMS42LjIgaW50ZWdyYXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tIGEvcGVybC91dWlkX2NvbXBhdC5wbQorKysrIGIvcGVybC91dWlkX2NvbXBhdC5wbQorQEAgLTkzLDcgKzkzLDkgQEAKKyAgICAgJHV1aWQtPmltcG9ydCgnc3RyJywKKyAgICAgICAgICAgJHN0ciA9fiAvXjB4LworICAgICAgICAgPyBqb2luICctJywgdW5wYWNrKCd4MiBhOCBhNCBhNCBhNCBhMTInLCAkc3RyKQorLSAgICAgICAgOiAkc3RyCisrICAgICAgICA6ICRzdHIgPX4gLy0vCisrICAgICAgICA/ICRzdHIKKysgICAgICAgIDogam9pbiAnLScsIHVucGFjaygnQTggQTQgQTQgQTQgQTEyJywgJHN0cikKKyAgICAgKTsKKyAgICAgcmV0dXJuICR1dWlkLT5leHBvcnQoJ2JpbicpOworIH0KKy0tLSBhL3BlcmwvdXVpZF9jb21wYXQudHMKKysrKyBiL3BlcmwvdXVpZF9jb21wYXQudHMKK0BAIC0yOCw3ICsyOCw3IEBACisgIyMgIHV1aWRfY29tcGF0LnRzOiBEYXRhOjpVVUlEIEJhY2t3YXJkIENvbXBhdGliaWxpdHkgUGVybCBBUEkgKFBlcmwgdGVzdCBzdWl0ZSBwYXJ0KQorICMjCisgCistdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMTQ7CisrdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMTY7CisgCisgQkVHSU4geworICAgICB1c2Vfb2soJ0RhdGE6OlVVSUQnKTsKK0BAIC01MywzICs1Myw1IEBACisgb2soJHV1aWQ4ID0gJHVnLT5mcm9tX3N0cmluZygiNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4IikpOworIG9rKCR1Zy0+Y29tcGFyZSgkdXVpZDcsICR1dWlkOCkgPT0gMCk7CisgCisrb2soJHV1aWQ5ID0gJHVnLT5mcm9tX3N0cmluZygiNmJhN2I4MTE5ZGFkMTFkMTgwYjQwMGMwNGZkNDMwYzgiKSk7Cisrb2soJHVnLT5jb21wYXJlKCR1dWlkNywgJHV1aWQ5KSA9PSAwKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvaW5zdGFsbC1wYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvaW5zdGFsbC1wYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDIyMmNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC9pbnN0YWxsLXBjLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK3V1aWQucGMgaXMgZ2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgc28gc2hvdWxkIGJlIGluc3RhbGxlZCBmcm9tIHRoZSBjdXJyZW50CitkaXJlY3RvcnksIGFuZCBub3QgJFMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbc2hvdWxkIGJlIHN1Ym1pdHRlZF0KK1NpZ25lZC1PZmYtQnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0luZGV4OiB1dWlkLTEuNi4yL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdXVpZC0xLjYuMi5vcmlnL01ha2VmaWxlLmluCTIwMTItMTEtMTMgMTY6NTg6MjguNjI0MTU2MDAwICswMDAwCisrKysgdXVpZC0xLjYuMi9NYWtlZmlsZS5pbgkyMDEyLTExLTEzIDE3OjA1OjI0LjIyNDE1ODY3MCArMDAwMAorQEAgLTIzMiw3ICsyMzIsNyBAQAorIAkkKFNIVE9PTCkgbWtkaXIgLWYgLXAgLW0gNzU1ICQoREVTVERJUikkKG1hbmRpcikvbWFuMQorIAkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA3NTUgdXVpZC1jb25maWcgJChERVNURElSKSQoYmluZGlyKS8KKyAJJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNjQ0ICQoUykvdXVpZC1jb25maWcuMSAkKERFU1RESVIpJChtYW5kaXIpL21hbjEvCistCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKFMpL3V1aWQucGMgJChERVNURElSKSQobGliZGlyKS9wa2djb25maWcvCisrCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCB1dWlkLnBjICQoREVTVERJUikkKGxpYmRpcikvcGtnY29uZmlnLworIAkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgdXVpZC5oICQoREVTVERJUikkKGluY2x1ZGVkaXIpLworIAktQGlmIFsgIi4kKFdJVEhfRENFKSIgPSAueWVzIF07IHRoZW4gXAorIAkgICAgZWNobyAiJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNjQ0ICQoUykvdXVpZF9kY2UuaCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS8iOyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL2xkZmxhZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRmYzEzNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitPYmV5IExERkxBR1MKKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gdXVpZC0xLjYuMi5vcmlnL01ha2VmaWxlLmluCisrKysgdXVpZC0xLjYuMi9NYWtlZmlsZS5pbgorQEAgLTExMywxNSArMTEzLDE1IEBAIGFsbDogJChUQVJHRVRTKQorCUAkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ1hYKSAkKENQUEZMQUdTKSAkKENYWEZMQUdTKSAtYyAkPAorCisgJChMSUJfTkFNRSk6ICQoTElCX09CSlMpCistCUAkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpIC1vICQoTElCX05BTUUpICQoTElCX09CSlMpIC1ycGF0aCAkKGxpYmRpcikgXAorKwlAJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENDKSAkKExERkxBR1MpIC1vICQoTElCX05BTUUpICQoTElCX09CSlMpIC1ycGF0aCAkKGxpYmRpcikgXAorCSAgICAtdmVyc2lvbi1pbmZvIGAkKFNIVE9PTCkgdmVyc2lvbiAtbCBjIC1kIGxpYnRvb2wgJChTKS91dWlkX3ZlcnMuaGAKKworICQoRENFX05BTUUpOiAkKERDRV9PQkpTKQorLQlAJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENDKSAtbyAkKERDRV9OQU1FKSAkKERDRV9PQkpTKSAtcnBhdGggJChsaWJkaXIpIFwKKysJQCQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgJChMREZMQUdTKSAtbyAkKERDRV9OQU1FKSAkKERDRV9PQkpTKSAtcnBhdGggJChsaWJkaXIpIFwKKwkgICAgLXZlcnNpb24taW5mbyBgJChTSFRPT0wpIHZlcnNpb24gLWwgYyAtZCBsaWJ0b29sICQoUykvdXVpZF92ZXJzLmhgCisKKyAkKENYWF9OQU1FKTogJChDWFhfT0JKUykKKy0JQCQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDWFgpIC1vICQoQ1hYX05BTUUpICQoQ1hYX09CSlMpIC1ycGF0aCAkKGxpYmRpcikgXAorKwlAJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENYWCkgJChMREZMQUdTKSAtbyAkKENYWF9OQU1FKSAkKENYWF9PQkpTKSAtcnBhdGggJChsaWJkaXIpIFwKKwkgICAgLXZlcnNpb24taW5mbyBgJChTSFRPT0wpIHZlcnNpb24gLWwgYyAtZCBsaWJ0b29sICQoUykvdXVpZF92ZXJzLmhgCisKKyAkKFBSR19OQU1FKTogJChQUkdfT0JKUykgJChMSUJfTkFNRSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvdXVpZC1saWJ0b29sLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC91dWlkLWxpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJjOTFiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvdXVpZC1saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1JlbW92ZSBoYXJkY29kZWQgbGlidG9vbCBuYW1lLCBmYWxsIGJhY2sgdG8gZ2VuZXJhdGVkIG5hbWUKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtubyB1cHN0cmVhbV0KK1RoZSBwcm9qZWN0IGFwcGVhcnMgdG8gbm8gbG9uZ2VyIGJlIGFjY2VwdGluZyBjaGFuZ2VzLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLXVyIHV1aWQtMS42LjIub3JpZy9NYWtlZmlsZS5pbiB1dWlkLTEuNi4yL01ha2VmaWxlLmluCistLS0gdXVpZC0xLjYuMi5vcmlnL01ha2VmaWxlLmluCTIwMTItMDUtMTQgMTQ6Mzc6MTkuNTc5NjcyOTMwIC0wNTAwCisrKysgdXVpZC0xLjYuMi9NYWtlZmlsZS5pbgkyMDEyLTA1LTE0IDE0OjM3OjQ5LjExMjczMzc4NyAtMDUwMAorQEAgLTMyLDYgKzMyLDcgQEAKKyBWUEFUSCAgICAgICA9IEBzcmNkaXJACisgc3JjZGlyICAgICAgPSBAc3JjZGlyQAorIHRvcF9zcmNkaXIgID0gQHRvcF9zcmNkaXJACisrdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKKyBTICAgICAgICAgICA9ICQoc3JjZGlyKQorIEMgICAgICAgICAgID0gLgorIAorQEAgLTU1LDcgKzU2LDcgQEAKKyBDUCAgICAgICAgICA9IGNwCisgUk1ESVIgICAgICAgPSBybWRpcgorIFNIVE9PTCAgICAgID0gJChTKS9zaHRvb2wKKy1MSUJUT09MICAgICA9ICQoQykvbGlidG9vbAorK0xJQlRPT0wgICAgID0gQExJQlRPT0xACisgVFJVRSAgICAgICAgPSB0cnVlCisgUE9EMk1BTiAgICAgPSBwb2QybWFuCisgUEVSTCAgICAgICAgPSBAUEVSTEAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvdXVpZC1ub3N0cmlwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC91dWlkLW5vc3RyaXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwNmI1ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvdXVpZC1ub3N0cmlwLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1dlIGRvbid0IHdhbnQgYW55dGhpbmcgc3RyaXBwZWQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtubyB1cHN0cmVhbV0KK1RoZSBwcm9qZWN0IGFwcGVhcnMgdG8gbm8gbG9uZ2VyIGJlIGFjY2VwdGluZyBjaGFuZ2VzLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLXVyIHV1aWQtMS42LjIub3JpZy9NYWtlZmlsZS5pbiB1dWlkLTEuNi4yL01ha2VmaWxlLmluCistLS0gdXVpZC0xLjYuMi5vcmlnL01ha2VmaWxlLmluCTIwMTItMDUtMTQgMTQ6NDI6NDIuMjI1Nzg5NDU2IC0wNTAwCisrKysgdXVpZC0xLjYuMi9NYWtlZmlsZS5pbgkyMDEyLTA1LTE0IDE1OjAzOjAzLjExOTczMzQwMCAtMDUwMAorQEAgLTI1NCw3ICsyNTQsNyBAQAorIAktQGlmIFsgIi4kKFdJVEhfQ1hYKSIgPSAueWVzIF07IHRoZW4gXAorIAkgICAgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgJChDWFhfTkFNRSkgJChERVNURElSKSQobGliZGlyKS87IFwKKyAJZmkKKy0JQCQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChTSFRPT0wpIGluc3RhbGwgLWMgLXMgLW0gNzU1IHV1aWQgJChERVNURElSKSQoYmluZGlyKS8KKysJQCQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNzU1IHV1aWQgJChERVNURElSKSQoYmluZGlyKS8KKyAJJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNjQ0ICQoUykvdXVpZC4xICQoREVTVERJUikkKG1hbmRpcikvbWFuMS8KKyAJLUBpZiBbICIuJChXSVRIX1BFUkwpIiA9IC55ZXMgXTsgdGhlbiBcCisgCSAgICAoY2QgJChTKS9wZXJsICYmICQoTUFLRSkgJChNRkxBR1MpIGluc3RhbGwgREVTVERJUj0kKERFU1RESVIpKTsgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZF8xLjYuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWRfMS42LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg5MjZiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWRfMS42LjIuYmIKQEAgLTAsMCArMSw2MyBAQAorU1VNTUFSWSA9ICJVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciAoVVVJRCkgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIk9TU1AgdXVpZCBpcyBhIElTTy1DOjE5OTkgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIFwKKyhBUEkpIGFuZCBjb3JyZXNwb25kaW5nIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgKENMSSkgZm9yIHRoZSBnZW5lcmF0aW9uIG9mIFwKK0RDRSAxLjEsIElTTy9JRUMgMTE1Nzg6MTk5NiBhbmQgUkZDIDQxMjIgY29tcGxpYW50IFVuaXZlcnNhbGx5IFVuaXF1ZSBcCitJZGVudGlmaWVyIChVVUlEKS4gSXQgc3VwcG9ydHMgRENFIDEuMSB2YXJpYW50IFVVSURzIG9mIHZlcnNpb24gMSAodGltZSBcCithbmQgbm9kZSBiYXNlZCksIHZlcnNpb24gMyAobmFtZSBiYXNlZCwgTUQ1KSwgdmVyc2lvbiA0IChyYW5kb20gbnVtYmVyIFwKK2Jhc2VkKSBhbmQgdmVyc2lvbiA1IChuYW1lIGJhc2VkLCBTSEEtMSkuIgorREVTQ1JJUFRJT05fdXVpZCA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgYSB0b29sIHRvIGNyZWF0ZSBVbml2ZXJzYWxseSBcCitVbmlxdWUgSWRlbnRpZmllcnMgKFVVSUQpIGZyb20gdGhlIGNvbW1hbmQtbGluZS4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub3NzcC5vcmcvcGtnL2xpYi91dWlkLyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTMwO2VuZGxpbmU9NTU7bWQ1PWIzOTRmYWRiMDM5YmJmY2E2YWQ5ZDlkNzY5ZWU5NjBlIFwKKwkgICBmaWxlOi8vdXVpZF9tZDUuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTI4O21kNT05YzFmNGIyMjE4NTQ2ZGVhZTI0YzkxYmUxZGNmMDBkZCIKKworUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL28vJHtCUE59LyR7QlBOfV8ke1BWfS5vcmlnLnRhci5neiBcCisJICAgZmlsZTovLzAwMDEtQ2hhbmdlLWxpYnJhcnktbmFtZS5wYXRjaCBcCisJICAgZmlsZTovLzAwMDItdXVpZC1wcmVzZXJ2ZS1tLW9wdGlvbi1zdGF0dXMtaW4tdi1vcHRpb24taGFuZGxpbmcucGF0Y2ggXAorCSAgIGZpbGU6Ly8wMDAzLUZpeC13aGF0aXMtZW50cmllcy5wYXRjaCBcCisJICAgZmlsZTovLzAwMDQtZml4LWRhdGEtdXVpZC1mcm9tLXN0cmluZy5wYXRjaCBcCisJICAgZmlsZTovL3V1aWQtbGlidG9vbC5wYXRjaCBcCisJICAgZmlsZTovL3V1aWQtbm9zdHJpcC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9pbnN0YWxsLXBjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xkZmxhZ3MucGF0Y2ggXAorCSAgIgorU1JDX1VSSVttZDVzdW1dID0gIjVkYjBkNDNhOTAyMmE2ZWJiYmMyNTMzN2FlMjg5NDJmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjExYTYxNTIyNWJhYTVmOGJiNjg2ODI0NDIzZjUwZTQ0MjdhY2QzZjcwZDM5NDc2NWJkZmYzMjgwMWYwZmQ1YjAiCisKK1MgPSAiJHtXT1JLRElSfS91dWlkLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtZGNlIC0td2l0aG91dC1jeHggLS13aXRob3V0LXBlcmwgLS13aXRob3V0LXBlcmwtY29tcGF0IC0td2l0aG91dC1waHAgLS13aXRob3V0LXBnc3FsIgorRVhUUkFfT0VDT05GID0gIi0taW5jbHVkZWRpcj0ke2luY2x1ZGVkaXJ9L29zc3AiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAjIFRoaXMgcGFja2FnZSBoYXMgYSBjb21wbGV0ZWx5IGN1c3RvbSBhY2xvY2FsLm00LCB3aGljaCBzaG91bGQgYmUgYWNpbmNsdWRlLm00LgorICBpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorICAgIG12ICR7U30vYWNsb2NhbC5tNCAke1N9L2FjaW5jbHVkZS5tNAorICBmaQorCisgIHJtIC1mICR7U30vbGlidG9vbC5tNAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgbWtkaXIgLXAgICR7RH0ke2luY2x1ZGVkaXJ9L29zc3AKKyAgbXYgJHtEfSR7bGliZGlyfS9wa2djb25maWcvdXVpZC5wYyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9vc3NwLXV1aWQucGMKK30KKworUEFDS0FHRVMgPSsgInV1aWQiCitGSUxFU191dWlkID0gIiR7YmluZGlyfS91dWlkIgorRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYm9zc3AtdXVpZC5zby4xNioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS91dWlkLWNvbmZpZyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAidXVpZC4zIgorQUxURVJOQVRJVkVfUFJJT1JJVFlfJHtQTn0tZG9jID0gIjIwMCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt1dWlkLjNdID0gIiR7bWFuZGlyfS9tYW4zL3V1aWQuMyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGV2aWNlLWRldmVsLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1kZXZpY2UtZGV2ZWwuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzMTg2MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGV2aWNlLWRldmVsLmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiUHJvdmlkZXMgYSBzbWFsbCBzZXQgb2YgdG9vbHMgZm9yIGRldmVsb3BtZW50IG9uIHRoZSBkZXZpY2UiCitMSUNFTlNFID0gIk1JVCIKKworUFIgPSAicjEiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1JQUk9WSURFU18ke1BOfSA9ICJxZW11LWNvbmZpZyIKK1JSRVBMQUNFU18ke1BOfSA9ICJxZW11LWNvbmZpZyIKK1JDT05GTElDVFNfJHtQTn0gPSAicWVtdS1jb25maWciCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICBkaXN0Y2MtY29uZmlnIFwKKyAgICBvcHJvZmlsZXVpLXNlcnZlciBcCisgICAgbmZzLWV4cG9ydC1yb290IFwKKyAgICBiYXNoIFwKKyAgICAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmZiOGNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2guaW5jCkBAIC0wLDAgKzEsMTQgQEAKK1NVTU1BUlkgPSAiVG9vbCBmb3IgYXBwbHlpbmcgYSBwYXRjaCBmaWxlIgorREVTQ1JJUFRJT04gPSAicGF0Y2ggdGFrZXMgYSBwYXRjaCBmaWxlIGNvbnRhaW5pbmcgYSBkaWZmZXJlbmNlIGxpc3RpbmcgXAorcHJvZHVjZWQgYnkgdGhlIGRpZmYgcHJvZ3JhbSBhbmQgYXBwbGllcyB0aG9zZSBkaWZmZXJlbmNlcyB0byBvbmUgb3IgbW9yZSBcCitvcmlnaW5hbCBmaWxlcywgcHJvZHVjaW5nIHBhdGNoZWQgdmVyc2lvbnMuIgorU0VDVElPTiA9ICJ1dGlscyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL3Byb2plY3RzL3BhdGNoLyIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3BhdGNoL3BhdGNoLSR7UFZ9LnRhci5neiIKK1MgPSAiJHtXT1JLRElSfS9wYXRjaC0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJwYXRjaCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMWE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9nbnVsaWIubWsgYi9saWIvZ251bGliLm1rCitpbmRleCBlMWQ3NGRiLi5jMGU5MmRkIDEwMDY0NAorLS0tIGEvbGliL2dudWxpYi5taworKysrIGIvbGliL2dudWxpYi5taworQEAgLTE4ODIsNyArMTg4Miw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL2RlYmlhbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL2RlYmlhbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTA3NjQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvZGViaWFuLnBhdGNoCkBAIC0wLDAgKzEsMTA0MjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuIHBhdGNoXQorCistLS0gcGF0Y2gtMi41Ljkub3JpZy9tNC9oYXNoLm00CisrKysgcGF0Y2gtMi41LjkvbTQvaGFzaC5tNAorQEAgLTAsMCArMSwxNSBAQAorKyMgaGFzaC5tNCBzZXJpYWwgMQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytBQ19ERUZVTihbZ2xfSEFTSF0sCisrWworKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL2hhc2guYy4KKysgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdGRsaWIuaCkKKysgIEFDX0hFQURFUl9TVERCT09MCisrICBBQ19DSEVDS19ERUNMU19PTkNFKGZyZWUgbWFsbG9jKQorK10pCistLS0gcGF0Y2gtMi41Ljkub3JpZy9tNC9uYW5vc2Vjb25kX3N0YXQubTQKKysrKyBwYXRjaC0yLjUuOS9tNC9uYW5vc2Vjb25kX3N0YXQubTQKK0BAIC0wLDAgKzEsMzUgQEAKKytBQ19ERUZVTihbYWdfQ0hFQ0tfTkFOT1NFQ09ORF9TVEFUXSwKKysgIFtBQ19DQUNIRV9DSEVDSyhbZm9yIG5hbm9zZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdF0sCisrICAgICBbYWNfY3Zfc3RhdF9uc2VjXSwKKysgICAgIFtBQ19UUllfQ09NUElMRSgKKysJWworKwkgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysJICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysJICAjaW5jbHVkZSA8dW5pc3RkLmg+CisrCSAgc3RydWN0IHN0YXQgc3Q7CisrCV0sCisrCVsgcmV0dXJuIHN0LnN0X2F0aW1lbnNlYyArIHN0LnN0X210aW1lbnNlYyArIHN0LnN0X2N0aW1lbnNlYzsgXSwKKysJW2FjX2N2X3N0YXRfbnNlYz15ZXNdLAorKwlbYWNfY3Zfc3RhdF9uc2VjPW5vXSkKKysgICAgIF0pCisrICAgaWYgdGVzdCAkYWNfY3Zfc3RhdF9uc2VjID0geWVzOyB0aGVuCisrICAgICBBQ19ERUZJTkUoSEFWRV9TVEFUX05TRUMsIDEsIFtEZWZpbmUgdG8gMSBpZiBzdHJ1Y3Qgc3RhdCBoYXMgbmFub3NlY29uZCB0aW1lc3RhbXBzLl0pCisrICAgZmkKKysKKysgICBBQ19DQUNIRV9DSEVDSyhbZm9yIG5hbm9zZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdF0sCisrICAgICBbYWNfY3Zfc3RhdF90aW1ldmFsXSwKKysgICAgIFtBQ19UUllfQ09NUElMRSgKKysJWworKwkgICNpbmNsdWRlIDx0aW1lLmg+CisrCSAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKwkgICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKwkgICNpbmNsdWRlIDx1bmlzdGQuaD4KKysJICBzdHJ1Y3Qgc3RhdCBzdDsKKysJXSwKKysJWyByZXR1cm4gc3Quc3RfYXRpbS50dl9uc2VjICsgc3Quc3RfbXRpbS50dl9uc2VjICsgc3Quc3RfY3RpbS50dl9uc2VjOyBdLAorKwlbYWNfY3Zfc3RhdF90aW1ldmFsPXllc10sCisrCVthY19jdl9zdGF0X3RpbWV2YWw9bm9dKQorKyAgICAgXSkKKysgICBpZiB0ZXN0ICRhY19jdl9zdGF0X3RpbWV2YWwgPSB5ZXM7IHRoZW4KKysgICAgIEFDX0RFRklORShIQVZFX1NUQVRfVElNRVZBTCwgMSwgW0RlZmluZSB0byAxIGlmIHN0cnVjdCBzdGF0IGNvbXRhaW5zIHN0cnVjdCB0aW1ldmFsJ3MuXSkKKysgICBmaV0pCistLS0gcGF0Y2gtMi41Ljkub3JpZy9NYWtlZmlsZS5pbgorKysrIHBhdGNoLTIuNS45L01ha2VmaWxlLmluCitAQCAtNjIsNyArNjIsNyBAQAorIFNIRUxMID0gL2Jpbi9zaAorIAorIExJQlNSQ1MgPSBlcnJvci5jIG1hbGxvYy5jIG1lbWNoci5jIG1rZGlyLmMgXAorLQlyZWFsbG9jLmMgcm1kaXIuYyBzdHJjYXNlY21wLmMgc3RybmNhc2VjbXAuYworKwlyZWFsbG9jLmMgcm1kaXIuYyBzdHJjYXNlY21wLmMgc3RybmNhc2VjbXAuYyBoYXNoLmMKKyBTUkNTID0gJChMSUJTUkNTKSBcCisgCWFkZGV4dC5jIGFyZ21hdGNoLmMgYmFja3VwZmlsZS5jIFwKKyAJYmFzZW5hbWUuYyBkaXJuYW1lLmMgXAorQEAgLTc4LDEyICs3OCwxMiBAQAorIAltYWtldGltZS4kKE9CSkVYVCkgcGFydGltZS4kKE9CSkVYVCkgXAorIAlwYXRjaC4kKE9CSkVYVCkgcGNoLiQoT0JKRVhUKSBcCisgCXF1b3RlLiQoT0JKRVhUKSBxdW90ZWFyZy4kKE9CSkVYVCkgcXVvdGVzeXMuJChPQkpFWFQpIFwKKy0JdXRpbC4kKE9CSkVYVCkgdmVyc2lvbi4kKE9CSkVYVCkgeG1hbGxvYy4kKE9CSkVYVCkKKysJdXRpbC4kKE9CSkVYVCkgdmVyc2lvbi4kKE9CSkVYVCkgeG1hbGxvYy4kKE9CSkVYVCkgaGFzaC4kKE9CSkVYVCkKKyBIRFJTID0gYXJnbWF0Y2guaCBiYWNrdXBmaWxlLmggY29tbW9uLmggZGlybmFtZS5oIFwKKyAJZXJyb3IuaCBnZXRvcHQuaCBnZXR0ZXh0LmggXAorIAlpbnAuaCBtYWtldGltZS5oIHBhcnRpbWUuaCBwY2guaCBcCisgCXF1b3RlLmggcXVvdGVhcmcuaCBxdW90ZXN5cy5oIFwKKy0JdW5sb2NrZWQtaW8uaCB1dGlsLmggdmVyc2lvbi5oIHhhbGxvYy5oCisrCXVubG9ja2VkLWlvLmggdXRpbC5oIHZlcnNpb24uaCB4YWxsb2MuaCBoYXNoLmgKKyBNSVNDID0gQVVUSE9SUyBDT1BZSU5HIENoYW5nZUxvZyBJTlNUQUxMIE1ha2VmaWxlLmluIE5FV1MgUkVBRE1FIFwKKyAJYWNsb2NhbC5tNCBcCisgCWNvbmZpZy5oaW4gY29uZmlndXJlIGNvbmZpZ3VyZS5hYyBcCistLS0gcGF0Y2gtMi41Ljkub3JpZy9hY2xvY2FsLm00CisrKysgcGF0Y2gtMi41LjkvYWNsb2NhbC5tNAorQEAgLTEsMyArMSwxMDU4IEBACisrZG5sIGFjbG9jYWwubTQgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAxLjQtcDYKKysKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LTgsIDE5OTksIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisrZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisrZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKysKKytkbmwgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrZG5sIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisrZG5sIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKytkbmwgUEFSVElDVUxBUiBQVVJQT1NFLgorKworKyMgbGliLXByZWZpeC5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjEzKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytkbmwgQUNfTElCX0FSR19XSVRIIGlzIHN5bm9ueW1vdXMgdG8gQUNfQVJHX1dJVEggaW4gYXV0b2NvbmYtMi4xMywgYW5kCisrZG5sIHNpbWlsYXIgdG8gQUNfQVJHX1dJVEggaW4gYXV0b2NvbmYgMi41Mi4uLjIuNTcgZXhjZXB0IHRoYXQgaXMgZG9lc24ndAorK2RubCByZXF1aXJlIGV4Y2Vzc2l2ZSBicmFja2V0aW5nLgorK2lmZGVmKFtBQ19IRUxQX1NUUklOR10sCisrW0FDX0RFRlVOKFtBQ19MSUJfQVJHX1dJVEhdLCBbQUNfQVJHX1dJVEgoWyQxXSxbWyQyXV0sWyQzXSxbJDRdKV0pXSwKKytbQUNfREVGVU4oW0FDX11bTElCX0FSR19XSVRIXSwgW0FDX0FSR19XSVRIKFskMV0sWyQyXSxbJDNdLFskNF0pXSldKQorKworK2RubCBBQ19MSUJfUFJFRklYIGFkZHMgdG8gdGhlIENQUEZMQUdTIGFuZCBMREZMQUdTIHRoZSBmbGFncyB0aGF0IGFyZSBuZWVkZWQKKytkbmwgdG8gYWNjZXNzIHByZXZpb3VzbHkgaW5zdGFsbGVkIGxpYnJhcmllcy4gVGhlIGJhc2ljIGFzc3VtcHRpb24gaXMgdGhhdAorK2RubCBhIHVzZXIgd2lsbCB3YW50IHBhY2thZ2VzIHRvIHVzZSBvdGhlciBwYWNrYWdlcyBoZSBwcmV2aW91c2x5IGluc3RhbGxlZAorK2RubCB3aXRoIHRoZSBzYW1lIC0tcHJlZml4IG9wdGlvbi4KKytkbmwgVGhpcyBtYWNybyBpcyBub3QgbmVlZGVkIGlmIG9ubHkgQUNfTElCX0xJTktGTEFHUyBpcyB1c2VkIHRvIGxvY2F0ZQorK2RubCBsaWJyYXJpZXMsIGJ1dCBpcyBvdGhlcndpc2UgdmVyeSBjb252ZW5pZW50LgorK0FDX0RFRlVOKFtBQ19MSUJfUFJFRklYXSwKKytbCisrICBBQ19CRUZPUkUoWyQwXSwgW0FDX0xJQl9MSU5LRkxBR1NdKQorKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisrICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgZG5sIEJ5IGRlZmF1bHQsIGxvb2sgaW4gJGluY2x1ZGVkaXIgYW5kICRsaWJkaXIuCisrICB1c2VfYWRkaXRpb25hbD15ZXMKKysgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisrICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorKyAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisrICBdKQorKyAgQUNfTElCX0FSR19XSVRIKFtsaWItcHJlZml4XSwKKytbICAtLXdpdGgtbGliLXByZWZpeFs9RElSXSBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorKyAgLS13aXRob3V0LWxpYi1wcmVmaXggICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWJyYXJpZXMgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKKytbCisrICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorKyAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCisrICAgIGVsc2UKKysgICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCisrICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKysgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorKyAgICAgICAgXSkKKysgICAgICBlbHNlCisrICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiCisrICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvbGliIgorKyAgICAgIGZpCisrICAgIGZpCisrXSkKKysgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCisrICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCisrICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvaW5jbHVkZSwKKysgICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJENQUEZMQUdTLAorKyAgICBkbmwgICAzLiBpZiBpdCdzIC91c3IvbG9jYWwvaW5jbHVkZSBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKysgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgorKyAgICAgIGhhdmVpdD0KKysgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1M7IGRvCisrICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorKyAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgIGJyZWFrCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisrICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKysgICAgICAgICAgICBlc2FjCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKysgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRDUFBGTEFHUy4KKysgICAgICAgICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30ke0NQUEZMQUdTOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZmkKKysgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExERkxBR1MuCisrICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvbGliLAorKyAgICBkbmwgICAyLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkTERGTEFHUywKKysgICAgZG5sICAgMy4gaWYgaXQncyAvdXNyL2xvY2FsL2xpYiBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKysgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyL2xpYiI7IHRoZW4KKysgICAgICBoYXZlaXQ9CisrICAgICAgZm9yIHggaW4gJExERkxBR1M7IGRvCisrICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgYnJlYWsKKysgICAgICAgIGZpCisrICAgICAgZG9uZQorKyAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC9saWIiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisrICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKysgICAgICAgICAgICBlc2FjCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTERGTEFHUy4KKysgICAgICAgICAgICBMREZMQUdTPSIke0xERkxBR1N9JHtMREZMQUdTOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICBmaQorKyAgZmkKKytdKQorKworK2RubCBBQ19MSUJfUFJFUEFSRV9QUkVGSVggY3JlYXRlcyB2YXJpYWJsZXMgYWNsX2ZpbmFsX3ByZWZpeCwKKytkbmwgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4LCBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gd2hpY2ggJHByZWZpeCBhbmQKKytkbmwgJGV4ZWNfcHJlZml4IHdpbGwgZXhwYW5kIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisrQUNfREVGVU4oW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0sCisrWworKyAgZG5sIFVuZm9ydHVuYXRlbHksIHByZWZpeCBhbmQgZXhlY19wcmVmaXggZ2V0IG9ubHkgZmluYWxseSBkZXRlcm1pbmVkCisrICBkbmwgYXQgdGhlIGVuZCBvZiBjb25maWd1cmUuCisrICBpZiB0ZXN0ICJYJHByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCisrICAgIGFjbF9maW5hbF9wcmVmaXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKKysgIGVsc2UKKysgICAgYWNsX2ZpbmFsX3ByZWZpeD0iJHByZWZpeCIKKysgIGZpCisrICBpZiB0ZXN0ICJYJGV4ZWNfcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KKysgICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PScke3ByZWZpeH0nCisrICBlbHNlCisrICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorKyAgZmkKKysgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKysgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisrICBldmFsIGFjbF9maW5hbF9leGVjX3ByZWZpeD1cIiRhY2xfZmluYWxfZXhlY19wcmVmaXhcIgorKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorK10pCisrCisrZG5sIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbc3RhdGVtZW50XSkgZXZhbHVhdGVzIHN0YXRlbWVudCwgd2l0aCB0aGUKKytkbmwgdmFyaWFibGVzIHByZWZpeCBhbmQgZXhlY19wcmVmaXggYm91bmQgdG8gdGhlIHZhbHVlcyB0aGV5IHdpbGwgaGF2ZQorK2RubCBhdCB0aGUgZW5kIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgorK0FDX0RFRlVOKFtBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVhdLAorK1sKKysgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKysgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisrICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisrICAkMQorKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKysgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKytdKQorKworKyMgbGliLWxpbmsubTQgc2VyaWFsIDQgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrZG5sIEFDX0xJQl9MSU5LRkxBR1MobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKKytkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCisrZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfSBhbmQgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQKKytkbmwgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLgorK0FDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysgIGRlZmluZShbTmFtZV0sW3RyYW5zbGl0KFskMV0sWy4vLV0sIFtfX19dKV0pCisrICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKysgIEFDX0NBQ0hFX0NIRUNLKFtob3cgdG8gbGluayB3aXRoIGxpYltdJDFdLCBbYWNfY3ZfbGliW11OYW1lW11fbGlic10sIFsKKysgICAgQUNfTElCX0xJTktGTEFHU19CT0RZKFskMV0sIFskMl0pCisrICAgIGFjX2N2X2xpYltdTmFtZVtdX2xpYnM9IiRMSUJbXU5BTUUiCisrICAgIGFjX2N2X2xpYltdTmFtZVtdX2x0bGlicz0iJExUTElCW11OQU1FIgorKyAgICBhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncz0iJElOQ1tdTkFNRSIKKysgIF0pCisrICBMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9saWJzIgorKyAgTFRMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9sdGxpYnMiCisrICBJTkNbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncyIKKysgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQorKyAgQUNfU1VCU1QoW0xJQl1OQU1FKQorKyAgQUNfU1VCU1QoW0xUTElCXU5BTUUpCisrICBkbmwgQWxzbyBzZXQgSEFWRV9MSUJbXU5BTUUgc28gdGhhdCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FuIHJldXNlIHRoZQorKyAgZG5sIHJlc3VsdHMgb2YgdGhpcyBzZWFyY2ggd2hlbiB0aGlzIGxpYnJhcnkgYXBwZWFycyBhcyBhIGRlcGVuZGVuY3kuCisrICBIQVZFX0xJQltdTkFNRT15ZXMKKysgIHVuZGVmaW5lKFtOYW1lXSkKKysgIHVuZGVmaW5lKFtOQU1FXSkKKytdKQorKworK2RubCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MobmFtZSwgZGVwZW5kZW5jaWVzLCBpbmNsdWRlcywgdGVzdGNvZGUpCisrZG5sIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kCisrZG5sIGltcGxpY2l0IGRlcGVuZGVuY2llcywgdG9nZXRoZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGluY2x1ZGUgZmlsZXMgYW5kCisrZG5sIHRoZSBhYmlsaXR5IHRvIGNvbXBpbGUgYW5kIGxpbmsgdGhlIHNwZWNpZmllZCB0ZXN0Y29kZS4gSWYgZm91bmQsIGl0CisrZG5sIHNldHMgYW5kIEFDX1NVQlNUcyBIQVZFX0xJQiR7TkFNRX09eWVzIGFuZCB0aGUgTElCJHtOQU1FfSBhbmQKKytkbmwgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLCBhbmQKKytkbmwgI2RlZmluZXMgSEFWRV9MSUIke05BTUV9IHRvIDEuIE90aGVyd2lzZSwgaXQgc2V0cyBhbmQgQUNfU1VCU1RzCisrZG5sIEhBVkVfTElCJHtOQU1FfT1ubyBhbmQgTElCJHtOQU1FfSBhbmQgTFRMSUIke05BTUV9IHRvIGVtcHR5LgorK0FDX0RFRlVOKFtBQ19MSUJfSEFWRV9MSU5LRkxBR1NdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorKyAgZGVmaW5lKFtOYW1lXSxbdHJhbnNsaXQoWyQxXSxbLi8tXSwgW19fX10pXSkKKysgIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorKworKyAgZG5sIFNlYXJjaCBmb3IgbGliW11OYW1lIGFuZCBkZWZpbmUgTElCW11OQU1FLCBMVExJQltdTkFNRSBhbmQgSU5DW11OQU1FCisrICBkbmwgYWNjb3JkaW5nbHkuCisrICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoWyQxXSwgWyQyXSkKKysKKysgIGRubCBBZGQgJElOQ1tdTkFNRSB0byBDUFBGTEFHUyBiZWZvcmUgcGVyZm9ybWluZyB0aGUgZm9sbG93aW5nIGNoZWNrcywKKysgIGRubCBiZWNhdXNlIGlmIHRoZSB1c2VyIGhhcyBpbnN0YWxsZWQgbGliW11OYW1lIGFuZCBub3QgZGlzYWJsZWQgaXRzIHVzZQorKyAgZG5sIHZpYSAtLXdpdGhvdXQtbGliW11OYW1lLXByZWZpeCwgaGUgd2FudHMgdG8gdXNlIGl0LgorKyAgYWNfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorKyAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DXU5BTUUpCisrCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxpYltdJDFdLCBbYWNfY3ZfbGliW11OYW1lXSwgWworKyAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorKyAgICBMSUJTPSIkTElCUyAkTElCW11OQU1FIgorKyAgICBBQ19UUllfTElOSyhbJDNdLCBbJDRdLCBbYWNfY3ZfbGliW11OYW1lPXllc10sIFthY19jdl9saWJbXU5hbWU9bm9dKQorKyAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorKyAgXSkKKysgIGlmIHRlc3QgIiRhY19jdl9saWJbXU5hbWUiID0geWVzOyB0aGVuCisrICAgIEhBVkVfTElCW11OQU1FPXllcworKyAgICBBQ19ERUZJTkUoW0hBVkVfTElCXU5BTUUsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICQxIGxpYnJhcnkuXSkKKysgICAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gbGluayB3aXRoIGxpYltdJDFdKQorKyAgICBBQ19NU0dfUkVTVUxUKFskTElCW11OQU1FXSkKKysgIGVsc2UKKysgICAgSEFWRV9MSUJbXU5BTUU9bm8KKysgICAgZG5sIElmICRMSUJbXU5BTUUgZGlkbid0IGxlYWQgdG8gYSB1c2FibGUgbGlicmFyeSwgd2UgZG9uJ3QgbmVlZAorKyAgICBkbmwgJElOQ1tdTkFNRSBlaXRoZXIuCisrICAgIENQUEZMQUdTPSIkYWNfc2F2ZV9DUFBGTEFHUyIKKysgICAgTElCW11OQU1FPQorKyAgICBMVExJQltdTkFNRT0KKysgIGZpCisrICBBQ19TVUJTVChbSEFWRV9MSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMVExJQl1OQU1FKQorKyAgdW5kZWZpbmUoW05hbWVdKQorKyAgdW5kZWZpbmUoW05BTUVdKQorK10pCisrCisrZG5sIERldGVybWluZSB0aGUgcGxhdGZvcm0gZGVwZW5kZW50IHBhcmFtZXRlcnMgbmVlZGVkIHRvIHVzZSBycGF0aDoKKytkbmwgbGliZXh0LCBzaGxpYmV4dCwgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwKKytkbmwgaGFyZGNvZGVfZGlyZWN0LCBoYXJkY29kZV9taW51c19MLgorK0FDX0RFRlVOKFtBQ19MSUJfUlBBVEhdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKSAgICAgICAgICAgICAgICBkbmwgd2UgdXNlICRDQywgJEdDQywgJExERkxBR1MKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUk9HX0xEXSkgICAgICAgICAgICBkbmwgd2UgdXNlICRMRCwgJHdpdGhfZ251X2xkCisrICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pICAgICAgICAgZG5sIHdlIHVzZSAkaG9zdAorKyAgQUNfUkVRVUlSRShbQUNfQ09ORklHX0FVWF9ESVJfREVGQVVMVF0pIGRubCB3ZSB1c2UgJGFjX2F1eF9kaXIKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc2hhcmVkIGxpYnJhcnkgcnVuIHBhdGggb3JpZ2luXSwgYWNsX2N2X3JwYXRoLCBbCisrICAgIENDPSIkQ0MiIEdDQz0iJEdDQyIgTERGTEFHUz0iJExERkxBR1MiIExEPSIkTEQiIHdpdGhfZ251X2xkPSIkd2l0aF9nbnVfbGQiIFwKKysgICAgJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gIiRhY19hdXhfZGlyL2NvbmZpZy5ycGF0aCIgIiRob3N0IiA+IGNvbmZ0ZXN0LnNoCisrICAgIC4gLi9jb25mdGVzdC5zaAorKyAgICBybSAtZiAuL2NvbmZ0ZXN0LnNoCisrICAgIGFjbF9jdl9ycGF0aD1kb25lCisrICBdKQorKyAgd2w9IiRhY2xfY3Zfd2wiCisrICBsaWJleHQ9IiRhY2xfY3ZfbGliZXh0IgorKyAgc2hsaWJleHQ9IiRhY2xfY3Zfc2hsaWJleHQiCisrICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCisrICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisrICBoYXJkY29kZV9kaXJlY3Q9IiRhY2xfY3ZfaGFyZGNvZGVfZGlyZWN0IgorKyAgaGFyZGNvZGVfbWludXNfTD0iJGFjbF9jdl9oYXJkY29kZV9taW51c19MIgorKyAgZG5sIERldGVybWluZSB3aGV0aGVyIHRoZSB1c2VyIHdhbnRzIHJwYXRoIGhhbmRsaW5nIGF0IGFsbC4KKysgIEFDX0FSR19FTkFCTEUocnBhdGgsCisrICAgIFsgIC0tZGlzYWJsZS1ycGF0aCAgICAgICAgIGRvIG5vdCBoYXJkY29kZSBydW50aW1lIGxpYnJhcnkgcGF0aHNdLAorKyAgICA6LCBlbmFibGVfcnBhdGg9eWVzKQorK10pCisrCisrZG5sIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShuYW1lIFssIGRlcGVuZGVuY2llc10pIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZAorK2RubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KKytkbmwgU2V0cyB0aGUgTElCJHtOQU1FfSwgTFRMSUIke05BTUV9IGFuZCBJTkMke05BTUV9IHZhcmlhYmxlcy4KKytBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU19CT0RZXSwKKytbCisrICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKysgIGRubCBCeSBkZWZhdWx0LCBsb29rIGluICRpbmNsdWRlZGlyIGFuZCAkbGliZGlyLgorKyAgdXNlX2FkZGl0aW9uYWw9eWVzCisrICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworKyAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKysgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorKyAgXSkKKysgIEFDX0xJQl9BUkdfV0lUSChbbGliJDEtcHJlZml4XSwKKytbICAtLXdpdGgtbGliJDEtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYiQxIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisrICAtLXdpdGhvdXQtbGliJDEtcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYiQxIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcl0sCisrWworKyAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KKysgICAgICB1c2VfYWRkaXRpb25hbD1ubworKyAgICBlbHNlCisrICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgorKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKysgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisrICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKysgICAgICAgIF0pCisrICAgICAgZWxzZQorKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorKyAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsL2xpYiIKKysgICAgICBmaQorKyAgICBmaQorK10pCisrICBkbmwgU2VhcmNoIHRoZSBsaWJyYXJ5IGFuZCBpdHMgZGVwZW5kZW5jaWVzIGluICRhZGRpdGlvbmFsX2xpYmRpciBhbmQKKysgIGRubCAkTERGTEFHUy4gVXNpbmcgYnJlYWR0aC1maXJzdC1zZWFjaC4KKysgIExJQltdTkFNRT0KKysgIExUTElCW11OQU1FPQorKyAgSU5DW11OQU1FPQorKyAgcnBhdGhkaXJzPQorKyAgbHRycGF0aGRpcnM9CisrICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9CisrICBuYW1lc19uZXh0X3JvdW5kPSckMSAkMicKKysgIHdoaWxlIHRlc3QgLW4gIiRuYW1lc19uZXh0X3JvdW5kIjsgZG8KKysgICAgbmFtZXNfdGhpc19yb3VuZD0iJG5hbWVzX25leHRfcm91bmQiCisrICAgIG5hbWVzX25leHRfcm91bmQ9CisrICAgIGZvciBuYW1lIGluICRuYW1lc190aGlzX3JvdW5kOyBkbworKyAgICAgIGFscmVhZHlfaGFuZGxlZD0KKysgICAgICBmb3IgbiBpbiAkbmFtZXNfYWxyZWFkeV9oYW5kbGVkOyBkbworKyAgICAgICAgaWYgdGVzdCAiJG4iID0gIiRuYW1lIjsgdGhlbgorKyAgICAgICAgICBhbHJlYWR5X2hhbmRsZWQ9eWVzCisrICAgICAgICAgIGJyZWFrCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0IC16ICIkYWxyZWFkeV9oYW5kbGVkIjsgdGhlbgorKyAgICAgICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPSIkbmFtZXNfYWxyZWFkeV9oYW5kbGVkICRuYW1lIgorKyAgICAgICAgZG5sIFNlZSBpZiBpdCB3YXMgYWxyZWFkeSBsb2NhdGVkIGJ5IGFuIGVhcmxpZXIgQUNfTElCX0xJTktGTEFHUworKyAgICAgICAgZG5sIG9yIEFDX0xJQl9IQVZFX0xJTktGTEFHUyBjYWxsLgorKyAgICAgICAgdXBwZXJuYW1lPWBlY2hvICIkbmFtZSIgfCBzZWQgLWUgJ3l8YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy18QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX198J2AKKysgICAgICAgIGV2YWwgdmFsdWU9XCJcJEhBVkVfTElCJHVwcGVybmFtZVwiCisrICAgICAgICBpZiB0ZXN0IC1uICIkdmFsdWUiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgIiR2YWx1ZSIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMSUIkdXBwZXJuYW1lXCIKKysgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JHZhbHVlIgorKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExUTElCJHVwcGVybmFtZVwiCisrICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfSR2YWx1ZSIKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGRubCBBbiBlYXJsaWVyIGNhbGwgdG8gQUNfTElCX0hBVkVfTElOS0ZMQUdTIGhhcyBkZXRlcm1pbmVkCisrICAgICAgICAgICAgZG5sIHRoYXQgdGhpcyBsaWJyYXJ5IGRvZXNuJ3QgZXhpc3QuIFNvIGp1c3QgZHJvcCBpdC4KKysgICAgICAgICAgICA6CisrICAgICAgICAgIGZpCisrICAgICAgICBlbHNlCisrICAgICAgICAgIGRubCBTZWFyY2ggdGhlIGxpYnJhcnkgbGliJG5hbWUgaW4gJGFkZGl0aW9uYWxfbGliZGlyIGFuZCAkTERGTEFHUworKyAgICAgICAgICBkbmwgYW5kIHRoZSBhbHJlYWR5IGNvbnN0cnVjdGVkICRMSUJOQU1FLyRMVExJQk5BTUUuCisrICAgICAgICAgIGZvdW5kX2Rpcj0KKysgICAgICAgICAgZm91bmRfbGE9CisrICAgICAgICAgIGZvdW5kX3NvPQorKyAgICAgICAgICBmb3VuZF9hPQorKyAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYmV4dCIgJiYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICAgICAgZm91bmRfc289IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiCisrICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kbGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgICAgZm91bmRfYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRsaWJleHQiCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICBmaQorKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKysgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJbXU5BTUU7IGRvCisrICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgY2FzZSAiJHgiIGluCisrICAgICAgICAgICAgICAgIC1MKikKKysgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJleHQiICYmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJHNobGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvbGliJG5hbWUuJHNobGliZXh0IgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS5sYSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyL2xpYiRuYW1lLiRsaWJleHQiCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICBmaQorKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgZG5sIEZvdW5kIHRoZSBsaWJyYXJ5LgorKyAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCisrICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9zbyIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICBkbmwgTGlua2luZyB3aXRoIGEgc2hhcmVkIGxpYnJhcnkuIFdlIGF0dGVtcHQgdG8gaGFyZGNvZGUgaXRzCisrICAgICAgICAgICAgICBkbmwgZGlyZWN0b3J5IGludG8gdGhlIGV4ZWN1dGFibGUncyBydW5wYXRoLCB1bmxlc3MgaXQncyB0aGUKKysgICAgICAgICAgICAgIGRubCBzdGFuZGFyZCAvdXNyL2xpYi4KKysgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiID0gbm8gfHwgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyL2xpYiI7IHRoZW4KKysgICAgICAgICAgICAgICAgZG5sIE5vIGhhcmRjb2RpbmcgaXMgbmVlZGVkLgorKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKysgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworKyAgICAgICAgICAgICAgICBkbmwgYmluYXJ5LgorKyAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBsdHJwYXRoZGlycy4KKysgICAgICAgICAgICAgICAgZG5sIFRoZSBsdHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMVExJQk5BTUUgYXQgdGhlIGVuZC4KKysgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGZvdW5kX2RpciIKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZG5sIFRoZSBoYXJkY29kaW5nIGludG8gJExJQk5BTUUgaXMgc3lzdGVtIGRlcGVuZGVudC4KKysgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICAgICAgICBkbmwgVXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorKyAgICAgICAgICAgICAgICAgIGRubCByZXN1bHRpbmcgYmluYXJ5LgorKyAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBESVIgaW50byB0aGUgcmVzdWx0aW5nCisrICAgICAgICAgICAgICAgICAgICBkbmwgYmluYXJ5LgorKyAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMSUJOQU1FIGF0IHRoZSBlbmQuCisrICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRmb3VuZF9kaXIiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgIGRubCBSZWx5IG9uICItTCRmb3VuZF9kaXIiLgorKyAgICAgICAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQgaWYgaXQncyBhbHJlYWR5IGNvbnRhaW5lZCBpbiB0aGUgTERGTEFHUworKyAgICAgICAgICAgICAgICAgICAgZG5sIG9yIHRoZSBhbHJlYWR5IGNvbnN0cnVjdGVkICRMSUJOQU1FCisrICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCW11OQU1FOyBkbworKyAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRmb3VuZF9kaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIEZJWE1FOiBOb3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCB1c2UKKysgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFdlIGNhbm5vdCB1c2UgJGhhcmRjb2RlX3J1bnBhdGhfdmFyIGFuZCBMRF9SVU5fUEFUSAorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZSwgYmVjYXVzZSB0aGlzIGRvZXNuJ3QgZml0IGluIGZsYWdzIHBhc3NlZCB0byB0aGUKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIGNvbXBpbGVyLiBTbyBnaXZlIHVwLiBObyBoYXJkY29kaW5nLiBUaGlzIGFmZmVjdHMgb25seQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgdmVyeSBvbGQgc3lzdGVtcy4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIEZJWE1FOiBOb3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCB1c2UKKysgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1sJG5hbWUiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfYSIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICAgIGRubCBMaW5raW5nIHdpdGggYSBzdGF0aWMgbGlicmFyeS4KKysgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfYSIKKysgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgZG5sIFdlIHNob3VsZG4ndCBjb21lIGhlcmUsIGJ1dCBhbnl3YXkgaXQncyBnb29kIHRvIGhhdmUgYQorKyAgICAgICAgICAgICAgICBkbmwgZmFsbGJhY2suCisrICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG5sIEFzc3VtZSB0aGUgaW5jbHVkZSBmaWxlcyBhcmUgbmVhcmJ5LgorKyAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0KKysgICAgICAgICAgICBjYXNlICIkZm91bmRfZGlyIiBpbgorKyAgICAgICAgICAgICAgKi9saWIgfCAqL2xpYi8pCisrICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAncywvbGliLyokLCwnYAorKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCisrICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkSU5DTkFNRS4KKysgICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgICAgICAgICAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2luY2x1ZGUsCisrICAgICAgICAgICAgICBkbmwgICAyLiBpZiBpdCdzIC91c3IvbG9jYWwvaW5jbHVkZSBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgICAgICAgICAgIGRubCAgIDMuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRDUFBGTEFHUyBvciB0aGUgYWxyZWFkeQorKyAgICAgICAgICAgICAgZG5sICAgICAgY29uc3RydWN0ZWQgJElOQ05BTUUsCisrICAgICAgICAgICAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgorKyAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisrICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7CisrICAgICAgICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1MgJElOQ1tdTkFNRTsgZG8KKysgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRJTkNOQU1FLgorKyAgICAgICAgICAgICAgICAgICAgICBJTkNbXU5BTUU9IiR7SU5DW11OQU1FfSR7SU5DW11OQU1FOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBkbmwgTG9vayBmb3IgZGVwZW5kZW5jaWVzLgorKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmb3VuZF9sYSI7IHRoZW4KKysgICAgICAgICAgICAgIGRubCBSZWFkIHRoZSAubGEgZmlsZS4gSXQgZGVmaW5lcyB0aGUgdmFyaWFibGVzCisrICAgICAgICAgICAgICBkbmwgZGxuYW1lLCBsaWJyYXJ5X25hbWVzLCBvbGRfbGlicmFyeSwgZGVwZW5kZW5jeV9saWJzLCBjdXJyZW50LAorKyAgICAgICAgICAgICAgZG5sIGFnZSwgcmV2aXNpb24sIGluc3RhbGxlZCwgZGxvcGVuLCBkbHByZW9wZW4sIGxpYmRpci4KKysgICAgICAgICAgICAgIHNhdmVfbGliZGlyPSIkbGliZGlyIgorKyAgICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2xhIiBpbgorKyAgICAgICAgICAgICAgICAqLyogfCAqXFwqKSAuICIkZm91bmRfbGEiIDs7CisrICAgICAgICAgICAgICAgICopIC4gIi4vJGZvdW5kX2xhIiA7OworKyAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgbGliZGlyPSIkc2F2ZV9saWJkaXIiCisrICAgICAgICAgICAgICBkbmwgV2UgdXNlIG9ubHkgZGVwZW5kZW5jeV9saWJzLgorKyAgICAgICAgICAgICAgZm9yIGRlcCBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworKyAgICAgICAgICAgICAgICBjYXNlICIkZGVwIiBpbgorKyAgICAgICAgICAgICAgICAgIC1MKikKKysgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKysgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMSUJOQU1FIGFuZCAkTFRMSUJOQU1FLgorKyAgICAgICAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvbGliLAorKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMi4gaWYgaXQncyAvdXNyL2xvY2FsL2xpYiBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDMuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRMREZMQUdTIG9yIHRoZSBhbHJlYWR5CisrICAgICAgICAgICAgICAgICAgICBkbmwgICAgICBjb25zdHJ1Y3RlZCAkTElCTkFNRSwKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvbGliIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsL2xpYiI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW51eCopIGhhdmVpdD15ZXM7OworKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJbXU5BTUU7IGRvCisrICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTElCTkFNRS4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCW11OQU1FOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExUTElCTkFNRS4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgIC1SKikKKysgICAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLVIvLydgCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiAhPSBubzsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgcnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExJQk5BTUUgYXQgdGhlIGVuZC4KKysgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gbHRycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgbHRycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTFRMSUJOQU1FIGF0IHRoZSBlbmQuCisrICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAtbCopCisrICAgICAgICAgICAgICAgICAgICBkbmwgSGFuZGxlIHRoaXMgaW4gdGhlIG5leHQgcm91bmQuCisrICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1sLy8nYAorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAqLmxhKQorKyAgICAgICAgICAgICAgICAgICAgZG5sIEhhbmRsZSB0aGlzIGluIHRoZSBuZXh0IHJvdW5kLiBUaHJvdyBhd2F5IHRoZSAubGEncworKyAgICAgICAgICAgICAgICAgICAgZG5sIGRpcmVjdG9yeTsgaXQgaXMgYWxyZWFkeSBjb250YWluZWQgaW4gYSBwcmVjZWRpbmcgLUwKKysgICAgICAgICAgICAgICAgICAgIGRubCBvcHRpb24uCisrICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncyxeWC4qLywsJyAtZSAncyxebGliLCwnIC1lICdzLFwubGEkLCwnYAorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAqKQorKyAgICAgICAgICAgICAgICAgICAgZG5sIE1vc3QgbGlrZWx5IGFuIGltbWVkaWF0ZSBsaWJyYXJ5IG5hbWUuCisrICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRkZXAiCisrICAgICAgICAgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfSRkZXAiCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGRubCBEaWRuJ3QgZmluZCB0aGUgbGlicmFyeTsgYXNzdW1lIGl0IGlzIGluIHRoZSBzeXN0ZW0gZGlyZWN0b3JpZXMKKysgICAgICAgICAgICBkbmwga25vd24gdG8gdGhlIGxpbmtlciBhbmQgcnVudGltZSBsb2FkZXIuIChBbGwgdGhlIHN5c3RlbQorKyAgICAgICAgICAgIGRubCBkaXJlY3RvcmllcyBrbm93biB0byB0aGUgbGlua2VyIHNob3VsZCBhbHNvIGJlIGtub3duIHRvIHRoZQorKyAgICAgICAgICAgIGRubCBydW50aW1lIGxvYWRlciwgb3RoZXJ3aXNlIHRoZSBzeXN0ZW0gaXMgc2V2ZXJlbHkgbWlzY29uZmlndXJlZC4pCisrICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tbCRuYW1lIgorKyAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZG9uZQorKyAgZG9uZQorKyAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorKyAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKysgICAgICBkbmwgV2VpcmQgcGxhdGZvcm06IG9ubHkgdGhlIGxhc3QgLXJwYXRoIG9wdGlvbiBjb3VudHMsIHRoZSB1c2VyIG11c3QKKysgICAgICBkbmwgcGFzcyBhbGwgcGF0aCBlbGVtZW50cyBpbiBvbmUgb3B0aW9uLiBXZSBjYW4gYXJyYW5nZSB0aGF0IGZvciBhCisrICAgICAgZG5sIHNpbmdsZSBsaWJyYXJ5LCBidXQgbm90IHdoZW4gbW9yZSB0aGFuIG9uZSAkTElCTkFNRXMgYXJlIHVzZWQuCisrICAgICAgYWxsZGlycz0KKysgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisrICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRfZGlyIgorKyAgICAgIGRvbmUKKysgICAgICBkbmwgTm90ZTogaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyB1c2VzICRsaWJkaXIgYW5kICR3bC4KKysgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisrICAgICAgbGliZGlyPSIkYWxsZGlycyIKKysgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorKyAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisrICAgIGVsc2UKKysgICAgICBkbmwgVGhlIC1ycGF0aCBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorKyAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKysgICAgICAgIGxpYmRpcj0iJGZvdW5kX2RpciIKKysgICAgICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKysgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisrICAgICAgZG9uZQorKyAgICBmaQorKyAgZmkKKysgIGlmIHRlc3QgIlgkbHRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorKyAgICBkbmwgV2hlbiB1c2luZyBsaWJ0b29sLCB0aGUgb3B0aW9uIHRoYXQgd29ya3MgZm9yIGJvdGggbGlicmFyaWVzIGFuZAorKyAgICBkbmwgZXhlY3V0YWJsZXMgaXMgLVIuIFRoZSAtUiBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorKyAgICBmb3IgZm91bmRfZGlyIGluICRsdHJwYXRoZGlyczsgZG8KKysgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1SJGZvdW5kX2RpciIKKysgICAgZG9uZQorKyAgZmkKKytdKQorKworK2RubCBBQ19MSUJfQVBQRU5EVE9WQVIoVkFSLCBDT05URU5UUykgYXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgQ09OVEVOVFMgdG8gVkFSLAorK2RubCB1bmxlc3MgYWxyZWFkeSBwcmVzZW50IGluIFZBUi4KKytkbmwgV29ya3Mgb25seSBmb3IgQ1BQRkxBR1MsIG5vdCBmb3IgTElCKiB2YXJpYWJsZXMgYmVjYXVzZSB0aGF0IHNvbWV0aW1lcworK2RubCBjb250YWlucyB0d28gb3IgdGhyZWUgY29uc2VjdXRpdmUgZWxlbWVudHMgdGhhdCBiZWxvbmcgdG9nZXRoZXIuCisrQUNfREVGVU4oW0FDX0xJQl9BUFBFTkRUT1ZBUl0sCisrWworKyAgZm9yIGVsZW1lbnQgaW4gWyQyXTsgZG8KKysgICAgaGF2ZWl0PQorKyAgICBmb3IgeCBpbiAkWyQxXTsgZG8KKysgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRlbGVtZW50IjsgdGhlbgorKyAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgYnJlYWsKKysgICAgICBmaQorKyAgICBkb25lCisrICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgWyQxXT0iJHtbJDFdfSR7WyQxXTorIH0kZWxlbWVudCIKKysgICAgZmkKKysgIGRvbmUKKytdKQorKworKyMgbGliLWxkLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTMpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIFN1YnJvdXRpbmVzIG9mIGxpYnRvb2wubTQsCisrZG5sIHdpdGggcmVwbGFjZW1lbnRzIHMvQUNfL0FDX0xJQi8gYW5kIHMvbHRfY3YvYWNsX2N2LyB0byBhdm9pZCBjb2xsaXNpb24KKytkbmwgd2l0aCBsaWJ0b29sLm00LgorKworK2RubCBGcm9tIGxpYnRvb2wtMS40LiBTZXRzIHRoZSB2YXJpYWJsZSB3aXRoX2dudV9sZCB0byB5ZXMgb3Igbm8uCisrQUNfREVGVU4oW0FDX0xJQl9QUk9HX0xEX0dOVV0sCisrW0FDX0NBQ0hFX0NIRUNLKFtpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZF0sIGFjbF9jdl9wcm9nX2dudV9sZCwKKytbIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KKytjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKypHTlUqIHwgKid3aXRoIEJGRCcqKQorKyAgYWNsX2N2X3Byb2dfZ251X2xkPXllcyA7OworKyopCisrICBhY2xfY3ZfcHJvZ19nbnVfbGQ9bm8gOzsKKytlc2FjXSkKKyt3aXRoX2dudV9sZD0kYWNsX2N2X3Byb2dfZ251X2xkCisrXSkKKysKKytkbmwgRnJvbSBsaWJ0b29sLTEuNC4gU2V0cyB0aGUgdmFyaWFibGUgTEQuCisrQUNfREVGVU4oW0FDX0xJQl9QUk9HX0xEXSwKKytbQUNfQVJHX1dJVEgoZ251LWxkLAorK1sgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub11dLAorK3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcywgd2l0aF9nbnVfbGQ9bm8pCisrQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisrQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKysjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KKytpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorKyAgY2htb2QgK3ggY29uZiQkLnNoCisrICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKysgIGVsc2UKKysgICAgUEFUSF9TRVBBUkFUT1I9OgorKyAgZmkKKysgIHJtIC1mIGNvbmYkJC5zaAorK2ZpCisrYWNfcHJvZz1sZAorK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKysgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgR0NDXSkKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyopCisrICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKysgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworKyAgKikKKysgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworKyAgZXNhYworKyAgY2FzZSAkYWNfcHJvZyBpbgorKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKysgICAgW1tcXC9dKiB8IFtBLVphLXpdOltcXC9dKildCisrICAgICAgW3JlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLyddCisrICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGggb2YgbGQKKysgICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgJ3MlXFxcXCUvJWcnYAorKyAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworKwlhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgInMlJHJlX2RpcmVsdCUvJSJgCisrICAgICAgZG9uZQorKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorKyAgICAgIDs7CisrICAiIikKKysgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisrICAgIGFjX3Byb2c9bGQKKysgICAgOzsKKysgICopCisrICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKysgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorKyAgICA7OworKyAgZXNhYworK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKKytlbHNlCisrICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKKytmaQorK0FDX0NBQ0hFX1ZBTChhY2xfY3ZfcGF0aF9MRCwKKytbaWYgdGVzdCAteiAiJExEIjsgdGhlbgorKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JHtQQVRIX1NFUEFSQVRPUi06fSIKKysgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisrICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisrICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorKyAgICAgIGFjbF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKysgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkJ3Mgb25seSBhY2NlcHQgLXYuCisrICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisrICAgICAgY2FzZSBgIiRhY2xfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8IC9kZXYvbnVsbGAgaW4KKysgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKysJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhayA7OworKyAgICAgICopCisrCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrIDs7CisrICAgICAgZXNhYworKyAgICBmaQorKyAgZG9uZQorKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisrZWxzZQorKyAgYWNsX2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisrZmldKQorK0xEPSIkYWNsX2N2X3BhdGhfTEQiCisraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorKyAgQUNfTVNHX1JFU1VMVCgkTEQpCisrZWxzZQorKyAgQUNfTVNHX1JFU1VMVChubykKKytmaQorK3Rlc3QgLXogIiRMRCIgJiYgQUNfTVNHX0VSUk9SKFtubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSF0pCisrQUNfTElCX1BST0dfTERfR05VCisrXSkKKysKKysjIGlzYy1wb3NpeC5tNCBzZXJpYWwgMiAoZ2V0dGV4dC0wLjExLjIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrIyBUaGlzIGZpbGUgaXMgbm90IG5lZWRlZCB3aXRoIGF1dG9jb25mLTIuNTMgYW5kIG5ld2VyLiAgUmVtb3ZlIGl0IGluIDIwMDUuCisrCisrIyBUaGlzIHRlc3QgcmVwbGFjZXMgdGhlIG9uZSBpbiBhdXRvY29uZi4KKysjIEN1cnJlbnRseSB0aGlzIG1hY3JvIHNob3VsZCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGF1dG9jb25mIG1hY3JvCisrIyBiZWNhdXNlIGdldHRleHQncyBnZXR0ZXh0Lm00IChkaXN0cmlidXRlZCBpbiB0aGUgYXV0b21ha2UgcGFja2FnZSkKKysjIHN0aWxsIHVzZXMgaXQuICBPdGhlcndpc2UsIHRoZSB1c2UgaW4gZ2V0dGV4dC5tNCBtYWtlcyBhdXRvaGVhZGVyCisrIyBnaXZlIHRoZXNlIGRpYWdub3N0aWNzOgorKyMgICBjb25maWd1cmUuaW46NTU2OiBBQ19UUllfQ09NUElMRSB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysjICAgY29uZmlndXJlLmluOjU1NjogQUNfVFJZX1JVTiB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysKKyt1bmRlZmluZShbQUNfSVNDX1BPU0lYXSkKKysKKytBQ19ERUZVTihbQUNfSVNDX1BPU0lYXSwKKysgIFsKKysgICAgZG5sIFRoaXMgdGVzdCByZXBsYWNlcyB0aGUgb2Jzb2xlc2NlbnQgQUNfSVNDX1BPU0lYIGtsdWRnZS4KKysgICAgQUNfQ0hFQ0tfTElCKGNwb3NpeCwgc3RyZXJyb3IsIFtMSUJTPSIkTElCUyAtbGNwb3NpeCJdKQorKyAgXQorKykKKysKKysjIENoZWNrIGZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTkuCisrCisrIyBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysjIDAyMTExLTEzMDcsIFVTQS4KKysKKysjIFByZXBhcmUgZm9yIHN1YnN0aXR1dGluZyA8c3RkYm9vbC5oPiBpZiBpdCBpcyBub3Qgc3VwcG9ydGVkLgorKworK0FDX0RFRlVOKFtBTV9TVERCT09MX0hdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERCT09MXSkKKysKKysgICMgRGVmaW5lIHR3byBhZGRpdGlvbmFsIHZhcmlhYmxlcyB1c2VkIGluIHRoZSBNYWtlZmlsZSBzdWJzdGl0dXRpb24uCisrCisrICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPSB5ZXM7IHRoZW4KKysgICAgU1REQk9PTF9IPScnCisrICBlbHNlCisrICAgIFNUREJPT0xfSD0nc3RkYm9vbC5oJworKyAgZmkKKysgIEFDX1NVQlNUKFtTVERCT09MX0hdKQorKworKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfX0Jvb2wiID0geWVzOyB0aGVuCisrICAgIEhBVkVfX0JPT0w9MQorKyAgZWxzZQorKyAgICBIQVZFX19CT09MPTAKKysgIGZpCisrICBBQ19TVUJTVChbSEFWRV9fQk9PTF0pCisrXSkKKysKKysjIFRoaXMgbWFjcm8gaXMgb25seSBuZWVkZWQgaW4gYXV0b2NvbmYgPD0gMi41NC4gIE5ld2VyIHZlcnNpb25zIG9mIGF1dG9jb25mCisrIyBoYXZlIHRoaXMgbWFjcm8gYnVpbHQtaW4uCisrCisrQUNfREVGVU4oW0FDX0hFQURFUl9TVERCT09MXSwKKysgIFtBQ19DQUNIRV9DSEVDSyhbZm9yIHN0ZGJvb2wuaCB0aGF0IGNvbmZvcm1zIHRvIEM5OV0sCisrICAgICBbYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaF0sCisrICAgICBbQUNfVFJZX0NPTVBJTEUoCisrCVsKKysJICAjaW5jbHVkZSA8c3RkYm9vbC5oPgorKwkgICNpZm5kZWYgYm9vbAorKwkgICAiZXJyb3I6IGJvb2wgaXMgbm90IGRlZmluZWQiCisrCSAgI2VuZGlmCisrCSAgI2lmbmRlZiBmYWxzZQorKwkgICAiZXJyb3I6IGZhbHNlIGlzIG5vdCBkZWZpbmVkIgorKwkgICNlbmRpZgorKwkgICNpZiBmYWxzZQorKwkgICAiZXJyb3I6IGZhbHNlIGlzIG5vdCAwIgorKwkgICNlbmRpZgorKwkgICNpZm5kZWYgdHJ1ZQorKwkgICAiZXJyb3I6IGZhbHNlIGlzIG5vdCBkZWZpbmVkIgorKwkgICNlbmRpZgorKwkgICNpZiB0cnVlICE9IDEKKysJICAgImVycm9yOiB0cnVlIGlzIG5vdCAxIgorKwkgICNlbmRpZgorKwkgICNpZm5kZWYgX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQKKysJICAgImVycm9yOiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCBpcyBub3QgZGVmaW5lZCIKKysJICAjZW5kaWYKKysKKysJICBzdHJ1Y3QgcyB7IF9Cb29sIHM6IDE7IF9Cb29sIHQ7IH0gczsKKysKKysJICBjaGFyIGFbdHJ1ZSA9PSAxID8gMSA6IC0xXTsKKysJICBjaGFyIGJbZmFsc2UgPT0gMCA/IDEgOiAtMV07CisrCSAgY2hhciBjW19fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkID09IDEgPyAxIDogLTFdOworKwkgIGNoYXIgZFsoYm9vbCkgLTAuNSA9PSB0cnVlID8gMSA6IC0xXTsKKysJICBib29sIGUgPSAmczsKKysJICBjaGFyIGZbKF9Cb29sKSAtMC4wID09IGZhbHNlID8gMSA6IC0xXTsKKysJICBjaGFyIGdbdHJ1ZV07CisrCSAgY2hhciBoW3NpemVvZiAoX0Jvb2wpXTsKKysJICBjaGFyIGlbc2l6ZW9mIHMudF07CisrCV0sCisrCVsgcmV0dXJuICFhICsgIWIgKyAhYyArICFkICsgIWUgKyAhZiArICFnICsgIWggKyAhaTsgXSwKKysJW2FjX2N2X2hlYWRlcl9zdGRib29sX2g9eWVzXSwKKysJW2FjX2N2X2hlYWRlcl9zdGRib29sX2g9bm9dKV0pCisrICAgQUNfQ0hFQ0tfVFlQRVMoW19Cb29sXSkKKysgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYm9vbF9oID0geWVzOyB0aGVuCisrICAgICBBQ19ERUZJTkUoSEFWRV9TVERCT09MX0gsIDEsIFtEZWZpbmUgdG8gMSBpZiBzdGRib29sLmggY29uZm9ybXMgdG8gQzk5Ll0pCisrICAgZmldKQorKworKyNzZXJpYWwgNQorKworK2RubCBGcm9tIEppbSBNZXllcmluZworKworK2RubCBEZWZpbmUgSEFWRV9TVFJVQ1RfVVRJTUJVRiBpZiBgc3RydWN0IHV0aW1idWYnIGlzIGRlY2xhcmVkIC0tCisrZG5sIHVzdWFsbHkgaW4gPHV0aW1lLmg+LgorK2RubCBTb21lIHN5c3RlbXMgaGF2ZSB1dGltZS5oIGJ1dCBkb24ndCBkZWNsYXJlIHRoZSBzdHJ1Y3QgYW55d2hlcmUuCisrCisrQUNfREVGVU4oW2ptX0NIRUNLX1RZUEVfU1RSVUNUX1VUSU1CVUZdLAorK1sKKysgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzeXMvdGltZS5oIHV0aW1lLmgpCisrICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfVElNRV0pCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHN0cnVjdCB1dGltYnVmXSwgZnVfY3Zfc3lzX3N0cnVjdF91dGltYnVmLAorKyAgICBbQUNfVFJZX0NPTVBJTEUoCisrICAgICAgWworKyNpZmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKKysjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisrIyBpbmNsdWRlIDx0aW1lLmg+CisrI2Vsc2UKKysjIGlmZGVmIEhBVkVfU1lTX1RJTUVfSAorKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisrIyBlbHNlCisrIyAgaW5jbHVkZSA8dGltZS5oPgorKyMgZW5kaWYKKysjZW5kaWYKKysjaWZkZWYgSEFWRV9VVElNRV9ICisrIyBpbmNsdWRlIDx1dGltZS5oPgorKyNlbmRpZgorKyAgICAgIF0sCisrICAgICAgW3N0YXRpYyBzdHJ1Y3QgdXRpbWJ1ZiB4OyB4LmFjdGltZSA9IHgubW9kdGltZTtdLAorKyAgICAgIGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1Zj15ZXMsCisrICAgICAgZnVfY3Zfc3lzX3N0cnVjdF91dGltYnVmPW5vKQorKyAgICBdKQorKworKyAgaWYgdGVzdCAkZnVfY3Zfc3lzX3N0cnVjdF91dGltYnVmID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX1NUUlVDVF9VVElNQlVGLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgc3RydWN0IHV0aW1idWYgaXMgZGVjbGFyZWQgLS0gdXN1YWxseSBpbiA8dXRpbWUuaD4uCisrICAgICAgIFNvbWUgc3lzdGVtcyBoYXZlIHV0aW1lLmggYnV0IGRvbid0IGRlY2xhcmUgdGhlIHN0cnVjdCBhbnl3aGVyZS4gXSkKKysgIGZpCisrXSkKKysKKysjIG9uY2Vvbmx5Lm00IHNlcmlhbCAzCisrZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBUaGlzIGZpbGUgZGVmaW5lcyBzb21lICJvbmNlIG9ubHkiIHZhcmlhbnRzIG9mIHN0YW5kYXJkIGF1dG9jb25mIG1hY3Jvcy4KKytkbmwgICBBQ19DSEVDS19IRUFERVJTX09OQ0UgICAgICAgICBsaWtlICBBQ19DSEVDS19IRUFERVJTCisrZG5sICAgQUNfQ0hFQ0tfRlVOQ1NfT05DRSAgICAgICAgICAgbGlrZSAgQUNfQ0hFQ0tfRlVOQ1MKKytkbmwgICBBQ19DSEVDS19ERUNMU19PTkNFICAgICAgICAgICBsaWtlICBBQ19DSEVDS19ERUNMUworK2RubCAgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkgIGxpa2UgIEFDX0hFQURFUl9TVERDCisrZG5sIFRoZSBhZHZhbnRhZ2UgaXMgdGhhdCB0aGUgY2hlY2sgZm9yIGVhY2ggb2YgdGhlIGhlYWRlcnMvZnVuY3Rpb25zL2RlY2xzCisrZG5sIHdpbGwgYmUgcHV0IG9ubHkgb25jZSBpbnRvIHRoZSAnY29uZmlndXJlJyBmaWxlLiBJdCBrZWVwcyB0aGUgc2l6ZSBvZgorK2RubCB0aGUgJ2NvbmZpZ3VyZScgZmlsZSBkb3duLCBhbmQgYXZvaWRzIHJlZHVuZGFudCBvdXRwdXQgd2hlbiAnY29uZmlndXJlJworK2RubCBpcyBydW4uCisrZG5sIFRoZSBkcmF3YmFjayBpcyB0aGF0IHRoZSBjaGVja3MgY2Fubm90IGJlIGNvbmRpdGlvbmFsaXplZC4gSWYgeW91IHdyaXRlCisrZG5sICAgaWYgc29tZV9jb25kaXRpb247IHRoZW4gZ2xfQ0hFQ0tfSEVBREVSUyhzdGRsaWIuaCk7IGZpCisrZG5sIGluc2lkZSBhbiBBQ19ERUZVTmVkIGZ1bmN0aW9uLCB0aGUgZ2xfQ0hFQ0tfSEVBREVSUyBtYWNybyBjYWxsIGV4cGFuZHMgdG8KKytkbmwgZW1wdHksIGFuZCB0aGUgY2hlY2sgd2lsbCBiZSBpbnNlcnRlZCBiZWZvcmUgdGhlIGJvZHkgb2YgdGhlIEFDX0RFRlVOZWQKKytkbmwgZnVuY3Rpb24uCisrCisrZG5sIEF1dG9jb25mIHZlcnNpb24gMi41NyBvciBuZXdlciBpcyByZWNvbW1lbmRlZC4KKytBQ19QUkVSRVEoMi41NCkKKysKKysjIEFDX0NIRUNLX0hFQURFUlNfT05DRShIRUFERVIxIEhFQURFUjIgLi4uKSBpcyBhIG9uY2Utb25seSB2YXJpYW50IG9mCisrIyBBQ19DSEVDS19IRUFERVJTKEhFQURFUjEgSEVBREVSMiAuLi4pLgorK0FDX0RFRlVOKFtBQ19DSEVDS19IRUFERVJTX09OQ0VdLCBbCisrICA6CisrICBBQ19GT1JFQUNIKFtnbF9IRUFERVJfTkFNRV0sIFskMV0sIFsKKysgICAgQUNfREVGVU4oW2dsX0NIRUNLX0hFQURFUl9dbTRfcXVvdGUodHJhbnNsaXQobTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy0uL10sIFtfX19dKSksIFsKKysgICAgICBBQ19DSEVDS19IRUFERVJTKGdsX0hFQURFUl9OQU1FKQorKyAgICBdKQorKyAgICBBQ19SRVFVSVJFKFtnbF9DSEVDS19IRUFERVJfXW00X3F1b3RlKHRyYW5zbGl0KGdsX0hFQURFUl9OQU1FLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFstLi9dLCBbX19fXSkpKQorKyAgXSkKKytdKQorKworKyMgQUNfQ0hFQ0tfRlVOQ1NfT05DRShGVU5DMSBGVU5DMiAuLi4pIGlzIGEgb25jZS1vbmx5IHZhcmlhbnQgb2YKKysjIEFDX0NIRUNLX0ZVTkNTKEZVTkMxIEZVTkMyIC4uLikuCisrQUNfREVGVU4oW0FDX0NIRUNLX0ZVTkNTX09OQ0VdLCBbCisrICA6CisrICBBQ19GT1JFQUNIKFtnbF9GVU5DX05BTUVdLCBbJDFdLCBbCisrICAgIEFDX0RFRlVOKFtnbF9DSEVDS19GVU5DX11tNF9kZWZuKFtnbF9GVU5DX05BTUVdKSwgWworKyAgICAgIEFDX0NIRUNLX0ZVTkNTKG00X2RlZm4oW2dsX0ZVTkNfTkFNRV0pKQorKyAgICBdKQorKyAgICBBQ19SRVFVSVJFKFtnbF9DSEVDS19GVU5DX11tNF9kZWZuKFtnbF9GVU5DX05BTUVdKSkKKysgIF0pCisrXSkKKysKKysjIEFDX0NIRUNLX0RFQ0xTX09OQ0UoREVDTDEgREVDTDIgLi4uKSBpcyBhIG9uY2Utb25seSB2YXJpYW50IG9mCisrIyBBQ19DSEVDS19ERUNMUyhERUNMMSwgREVDTDIsIC4uLikuCisrQUNfREVGVU4oW0FDX0NIRUNLX0RFQ0xTX09OQ0VdLCBbCisrICA6CisrICBBQ19GT1JFQUNIKFtnbF9ERUNMX05BTUVdLCBbJDFdLCBbCisrICAgIEFDX0RFRlVOKFtnbF9DSEVDS19ERUNMX11tNF9kZWZuKFtnbF9ERUNMX05BTUVdKSwgWworKyAgICAgIEFDX0NIRUNLX0RFQ0xTKG00X2RlZm4oW2dsX0RFQ0xfTkFNRV0pKQorKyAgICBdKQorKyAgICBBQ19SRVFVSVJFKFtnbF9DSEVDS19ERUNMX11tNF9kZWZuKFtnbF9ERUNMX05BTUVdKSkKKysgIF0pCisrXSkKKysKKyAjIGJhY2t1cGZpbGUubTQgc2VyaWFsIDEKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK0BAIC0yMSw2ICsxMDc2LDcgQEAKKyAgIEFDX0NIRUNLX0hFQURFUlNfT05DRShsaW1pdHMuaCBzdHJpbmcuaCB1bmlzdGQuaCkKKyAgIEFDX0NIRUNLX0ZVTkNTKHBhdGhjb25mKQorIF0pCisrCisgI3NlcmlhbCA1CisgCisgZG5sIEZyb20gSmltIE1leWVyaW5nLgorQEAgLTYzLDMxICsxMTE5LDcgQEAKKyAgICBmaQorICAgXQorICkKKy0jIGRpcm5hbWUubTQgc2VyaWFsIDEKKy1kbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKy1kbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCistZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCistZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCistZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisgCistQUNfREVGVU4oW2dsX0RJUk5BTUVdLAorLVsKKy0gIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9kaXJuYW1lLmguCistICBBQ19SRVFVSVJFKFtqbV9BQ19ET1NdKQorLQorLSAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL2Rpcm5hbWUuYy4KKy0gIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKy0gIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKy0KKy0gIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9iYXNlbmFtZS5jLgorLSAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorLSAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0cmluZy5oKQorLQorLSAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL3N0cmlwc2xhc2guYy4KKy0gIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKy0gIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKy1dKQorICNzZXJpYWwgNQorIAorICMgRGVmaW5lIHNvbWUgbWFjcm9zIHJlcXVpcmVkIGZvciBwcm9wZXIgb3BlcmF0aW9uIG9mIGNvZGUgaW4gbGliLyouYworQEAgLTE0MSw2ICsxMTczLDMzIEBACisgICAgICAgW0RlZmluZSBpZiB0aGUgYmFja3NsYXNoIGNoYXJhY3RlciBtYXkgYWxzbyBzZXJ2ZSBhcyBhIGZpbGUgbmFtZQorICAgICAgICBjb21wb25lbnQgc2VwYXJhdG9yLl0pCisgICBdKQorKworKyMgZGlybmFtZS5tNCBzZXJpYWwgMQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytBQ19ERUZVTihbZ2xfRElSTkFNRV0sCisrWworKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL2Rpcm5hbWUuaC4KKysgIEFDX1JFUVVJUkUoW2ptX0FDX0RPU10pCisrCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZGlybmFtZS5jLgorKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0cmluZy5oKQorKworKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL2Jhc2VuYW1lLmMuCisrICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCisrCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc3RyaXBzbGFzaC5jLgorKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0cmluZy5oKQorK10pCisrCisgI3NlcmlhbCA3CisgCisgQUNfREVGVU4oW2dsX0VSUk9SXSwKK0BAIC0xNTksNyArMTIxOCw2NyBAQAorICAgQUNfQ0hFQ0tfREVDTFMoW3N0cmVycm9yXSkKKyAgIEFDX0ZVTkNfU1RSRVJST1JfUgorIF0pCistIyBnZXRvcHQubTQgc2VyaWFsIDEKKysKKysjIG1lbWNoci5tNCBzZXJpYWwgMQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytBQ19ERUZVTihbZ2xfRlVOQ19NRU1DSFJdLAorK1sKKysgIEFDX1JFUExBQ0VfRlVOQ1MobWVtY2hyKQorKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19tZW1jaHIgPSBubzsgdGhlbgorKyAgICBqbV9QUkVSRVFfTUVNQ0hSCisrICBmaQorK10pCisrCisrIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9tZW1jaHIuYy4KKytBQ19ERUZVTihbam1fUFJFUkVRX01FTUNIUl0sIFsKKysgIEFDX0NIRUNLX0hFQURFUlNfT05DRShsaW1pdHMuaCBzdGRsaWIuaCkKKysgIEFDX0NIRUNLX0hFQURFUlMoYnAtc3ltLmgpCisrXSkKKysKKysjIHJtZGlyLm00IHNlcmlhbCAxCisrZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK0FDX0RFRlVOKFtnbF9GVU5DX1JNRElSXSwKKytbCisrICBBQ19SRVBMQUNFX0ZVTkNTKHJtZGlyKQorKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19ybWRpciA9IG5vOyB0aGVuCisrICAgIGdsX1BSRVJFUV9STURJUgorKyAgZmkKKytdKQorKworKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvcm1kaXIuYy4KKytBQ19ERUZVTihbZ2xfUFJFUkVRX1JNRElSXSwgWworKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NUQVRdKQorKyAgOgorK10pCisrCisrCisrIyBnZXRvcHQubTQgc2VyaWFsIDEKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrQUNfREVGVU4oW2dsX0dFVE9QVF0sCisrWworKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL2dldG9wdC5jLgorKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0cmluZy5oKQorK10pCisrCisrIyB4YWxsb2MubTQgc2VyaWFsIDEKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyBkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCitAQCAtMTY3LDExICsxMjg2LDI1IEBACisgZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisgZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisgCistQUNfREVGVU4oW2dsX0dFVE9QVF0sCisrQUNfREVGVU4oW2dsX1hBTExPQ10sCisgWworLSAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL2dldG9wdC5jLgorKyAgZ2xfUFJFUkVRX1hNQUxMT0MKKysgIGdsX1BSRVJFUV9YU1RSRFVQCisrXSkKKysKKysjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3htYWxsb2MuYy4KKytBQ19ERUZVTihbZ2xfUFJFUkVRX1hNQUxMT0NdLCBbCisrICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCisrICBBQ19SRVFVSVJFKFtqbV9GVU5DX01BTExPQ10pCisrICBBQ19SRVFVSVJFKFtqbV9GVU5DX1JFQUxMT0NdKQorK10pCisrCisrIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi94c3RyZHVwLmMuCisrQUNfREVGVU4oW2dsX1BSRVJFUV9YU1RSRFVQXSwgWworKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorICAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0cmluZy5oKQorIF0pCisrCisgIyBtYWxsb2MubTQgc2VyaWFsIDcKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK0BAIC0xOTcsNjYgKzEzMzAsOCBAQAorIEFDX0RFRlVOKFtnbF9QUkVSRVFfTUFMTE9DXSwgWworICAgOgorIF0pCistIyBtYnJ0b3djLm00IHNlcmlhbCA1CistZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKy1kbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCistZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCistZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCistZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCistCistZG5sIEZyb20gUGF1bCBFZ2dlcnQKKy0KKy1kbmwgVGhpcyBmaWxlIGNhbiBiZSByZW1vdmVkLCBhbmQgam1fRlVOQ19NQlJUT1dDIHJlcGxhY2VkIHdpdGgKKy1kbmwgQUNfRlVOQ19NQlJUT1dDLCB3aGVuIGF1dG9jb25mIDIuNTcgY2FuIGJlIGFzc3VtZWQgZXZlcnl3aGVyZS4KKy0KKy1BQ19ERUZVTihbam1fRlVOQ19NQlJUT1dDXSwKKy1bCistICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBtYnJ0b3djIGFuZCBtYnN0YXRlX3QgYXJlIHByb3Blcmx5IGRlY2xhcmVkXSwKKy0gICAgam1fY3ZfZnVuY19tYnJ0b3djLAorLSAgICBbQUNfVFJZX0xJTksoCistICAgICAgIFsjaW5jbHVkZSA8d2NoYXIuaD5dLAorLSAgICAgICBbbWJzdGF0ZV90IHN0YXRlOyByZXR1cm4gISAoc2l6ZW9mIHN0YXRlICYmIG1icnRvd2MpO10sCistICAgICAgIGptX2N2X2Z1bmNfbWJydG93Yz15ZXMsCistICAgICAgIGptX2N2X2Z1bmNfbWJydG93Yz1ubyldKQorLSAgaWYgdGVzdCAkam1fY3ZfZnVuY19tYnJ0b3djID0geWVzOyB0aGVuCistICAgIEFDX0RFRklORShIQVZFX01CUlRPV0MsIDEsCistICAgICAgW0RlZmluZSB0byAxIGlmIG1icnRvd2MgYW5kIG1ic3RhdGVfdCBhcmUgcHJvcGVybHkgZGVjbGFyZWQuXSkKKy0gIGZpCistXSkKKy0jIG1ic3RhdGVfdC5tNCBzZXJpYWwgOQorLWRubCBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorLWRubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKy1kbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKy1kbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKy1kbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKy0KKy0jIEZyb20gUGF1bCBFZ2dlcnQuCistCistIyBCZU9TIDUgaGFzIDx3Y2hhci5oPiBidXQgZG9lcyBub3QgZGVmaW5lIG1ic3RhdGVfdCwKKy0jIHNvIHlvdSBjYW4ndCBkZWNsYXJlIGFuIG9iamVjdCBvZiB0aGF0IHR5cGUuCistIyBDaGVjayBmb3IgdGhpcyBpbmNvbXBhdGliaWxpdHkgd2l0aCBTdGFuZGFyZCBDLgorIAorLSMgQUNfVFlQRV9NQlNUQVRFX1QKKy0jIC0tLS0tLS0tLS0tLS0tLS0tCistQUNfREVGVU4oW0FDX1RZUEVfTUJTVEFURV9UXSwKKy0gIFtBQ19DQUNIRV9DSEVDSyhbZm9yIG1ic3RhdGVfdF0sIGFjX2N2X3R5cGVfbWJzdGF0ZV90LAorLSAgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorLQlbQUNfTEFOR19QUk9HUkFNKAorLQkgICBbQUNfSU5DTFVERVNfREVGQVVMVAorLSMJICAgIGluY2x1ZGUgPHdjaGFyLmg+XSwKKy0JICAgW21ic3RhdGVfdCB4OyByZXR1cm4gc2l6ZW9mIHg7XSldLAorLQlbYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9eWVzXSwKKy0JW2FjX2N2X3R5cGVfbWJzdGF0ZV90PW5vXSldKQorLSAgIGlmIHRlc3QgJGFjX2N2X3R5cGVfbWJzdGF0ZV90ID0geWVzOyB0aGVuCistICAgICBBQ19ERUZJTkUoW0hBVkVfTUJTVEFURV9UXSwgMSwKKy0JICAgICAgIFtEZWZpbmUgdG8gMSBpZiA8d2NoYXIuaD4gZGVjbGFyZXMgbWJzdGF0ZV90Ll0pCistICAgZWxzZQorLSAgICAgQUNfREVGSU5FKFttYnN0YXRlX3RdLCBpbnQsCistCSAgICAgICBbRGVmaW5lIHRvIGEgdHlwZSBpZiA8d2NoYXIuaD4gZG9lcyBub3QgZGVmaW5lLl0pCistICAgZmldKQorLSMgbWVtY2hyLm00IHNlcmlhbCAxCisrIyByZWFsbG9jLm00IHNlcmlhbCA3CisgZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorQEAgLTI2NCwxMTYgKzEzMzksMjQgQEAKKyBkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKyBkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyAKKy1BQ19ERUZVTihbZ2xfRlVOQ19NRU1DSFJdLAorK2RubCBGcm9tIEppbSBNZXllcmluZy4KKytkbmwgRGV0ZXJtaW5lIHdoZXRoZXIgcmVhbGxvYyB3b3JrcyB3aGVuIGJvdGggYXJndW1lbnRzIGFyZSAwLgorK2RubCBJZiBpdCBkb2Vzbid0LCBhcnJhbmdlIHRvIHVzZSB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24uCisrCisrQUNfREVGVU4oW2ptX0ZVTkNfUkVBTExPQ10sCisgWworLSAgQUNfUkVQTEFDRV9GVU5DUyhtZW1jaHIpCistICBpZiB0ZXN0ICRhY19jdl9mdW5jX21lbWNociA9IG5vOyB0aGVuCistICAgIGptX1BSRVJFUV9NRU1DSFIKKysgIEFDX1JFUVVJUkUoW0FDX0ZVTkNfUkVBTExPQ10pCisrICBkbmwgYXV0b2NvbmYgPCAyLjU3IHVzZWQgdGhlIHN5bWJvbCBhY19jdl9mdW5jX3JlYWxsb2Nfd29ya3MuCisrICBpZiB0ZXN0IFgiJGFjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGwiID0gWG5vIHx8IHRlc3QgWCIkYWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzIiA9IFhubzsgdGhlbgorKyAgICBnbF9QUkVSRVFfUkVBTExPQworICAgZmkKKyBdKQorIAorLSMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvbWVtY2hyLmMuCistQUNfREVGVU4oW2ptX1BSRVJFUV9NRU1DSFJdLCBbCistICBBQ19DSEVDS19IRUFERVJTX09OQ0UobGltaXRzLmggc3RkbGliLmgpCistICBBQ19DSEVDS19IRUFERVJTKGJwLXN5bS5oKQorLV0pCistI3NlcmlhbCAxCistCistZG5sIEZyb20gTXVtaXQgS2hhbiBhbmQgUGF1bCBFZ2dlcnQKKy1kbmwgRGV0ZXJtaW5lIHdoZXRoZXIgbWtkaXIgYWNjZXB0cyBvbmx5IG9uZSBhcmd1bWVudCBpbnN0ZWFkIG9mIHRoZSB1c3VhbCB0d28uCistCistQUNfREVGVU4oW1BBVENIX0ZVTkNfTUtESVJfVEFLRVNfT05FX0FSR10sCistICBbQUNfQ0hFQ0tfRlVOQ1MobWtkaXIpCistICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbWtkaXIgdGFrZXMgb25seSBvbmUgYXJndW1lbnRdLAorLSAgICAgcGF0Y2hfY3ZfbWtkaXJfdGFrZXNfb25lX2FyZywKKy0gICAgIFtwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnPW5vCistICAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19ta2RpciA9IHllczsgdGhlbgorLSAgICAgICAgQUNfVFJZX0NPTVBJTEUoWworLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KKy0JICBdLAorLQkgIFtta2RpciAoIi4iLCAwKTtdLAorLQkgICwKKy0JICBbQUNfVFJZX0NPTVBJTEUoWworLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KKy0JICAgICBdLAorLQkgICAgIFtta2RpciAoIi4iKTtdLAorLQkgICAgIHBhdGNoX2N2X21rZGlyX3Rha2VzX29uZV9hcmc9eWVzCistCSAgKV0KKy0JKQorLSAgICAgIGZpCistICAgICBdCistICAgKQorLSAgIGlmIHRlc3QgJHBhdGNoX2N2X21rZGlyX3Rha2VzX29uZV9hcmcgPSB5ZXM7IHRoZW4KKy0gICAgIEFDX0RFRklORShbTUtESVJfVEFLRVNfT05FX0FSR10sIDEsCistICAgICAgIFtEZWZpbmUgaWYgbWtkaXIgdGFrZXMgb25seSBvbmUgYXJndW1lbnQuXSkKKy0gICBmaQorLSAgXQorLSkKKy0jIG9uY2Vvbmx5Lm00IHNlcmlhbCAzCistZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCistZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorLWRubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorLWRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorLWRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorLQorLWRubCBUaGlzIGZpbGUgZGVmaW5lcyBzb21lICJvbmNlIG9ubHkiIHZhcmlhbnRzIG9mIHN0YW5kYXJkIGF1dG9jb25mIG1hY3Jvcy4KKy1kbmwgICBBQ19DSEVDS19IRUFERVJTX09OQ0UgICAgICAgICBsaWtlICBBQ19DSEVDS19IRUFERVJTCistZG5sICAgQUNfQ0hFQ0tfRlVOQ1NfT05DRSAgICAgICAgICAgbGlrZSAgQUNfQ0hFQ0tfRlVOQ1MKKy1kbmwgICBBQ19DSEVDS19ERUNMU19PTkNFICAgICAgICAgICBsaWtlICBBQ19DSEVDS19ERUNMUworLWRubCAgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkgIGxpa2UgIEFDX0hFQURFUl9TVERDCistZG5sIFRoZSBhZHZhbnRhZ2UgaXMgdGhhdCB0aGUgY2hlY2sgZm9yIGVhY2ggb2YgdGhlIGhlYWRlcnMvZnVuY3Rpb25zL2RlY2xzCistZG5sIHdpbGwgYmUgcHV0IG9ubHkgb25jZSBpbnRvIHRoZSAnY29uZmlndXJlJyBmaWxlLiBJdCBrZWVwcyB0aGUgc2l6ZSBvZgorLWRubCB0aGUgJ2NvbmZpZ3VyZScgZmlsZSBkb3duLCBhbmQgYXZvaWRzIHJlZHVuZGFudCBvdXRwdXQgd2hlbiAnY29uZmlndXJlJworLWRubCBpcyBydW4uCistZG5sIFRoZSBkcmF3YmFjayBpcyB0aGF0IHRoZSBjaGVja3MgY2Fubm90IGJlIGNvbmRpdGlvbmFsaXplZC4gSWYgeW91IHdyaXRlCistZG5sICAgaWYgc29tZV9jb25kaXRpb247IHRoZW4gZ2xfQ0hFQ0tfSEVBREVSUyhzdGRsaWIuaCk7IGZpCistZG5sIGluc2lkZSBhbiBBQ19ERUZVTmVkIGZ1bmN0aW9uLCB0aGUgZ2xfQ0hFQ0tfSEVBREVSUyBtYWNybyBjYWxsIGV4cGFuZHMgdG8KKy1kbmwgZW1wdHksIGFuZCB0aGUgY2hlY2sgd2lsbCBiZSBpbnNlcnRlZCBiZWZvcmUgdGhlIGJvZHkgb2YgdGhlIEFDX0RFRlVOZWQKKy1kbmwgZnVuY3Rpb24uCistCistZG5sIEF1dG9jb25mIHZlcnNpb24gMi41NyBvciBuZXdlciBpcyByZWNvbW1lbmRlZC4KKy1BQ19QUkVSRVEoMi41NCkKKy0KKy0jIEFDX0NIRUNLX0hFQURFUlNfT05DRShIRUFERVIxIEhFQURFUjIgLi4uKSBpcyBhIG9uY2Utb25seSB2YXJpYW50IG9mCistIyBBQ19DSEVDS19IRUFERVJTKEhFQURFUjEgSEVBREVSMiAuLi4pLgorLUFDX0RFRlVOKFtBQ19DSEVDS19IRUFERVJTX09OQ0VdLCBbCistICA6CistICBBQ19GT1JFQUNIKFtnbF9IRUFERVJfTkFNRV0sIFskMV0sIFsKKy0gICAgQUNfREVGVU4oW2dsX0NIRUNLX0hFQURFUl9dbTRfcXVvdGUodHJhbnNsaXQobTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy0uL10sIFtfX19dKSksIFsKKy0gICAgICBBQ19DSEVDS19IRUFERVJTKGdsX0hFQURFUl9OQU1FKQorLSAgICBdKQorLSAgICBBQ19SRVFVSVJFKFtnbF9DSEVDS19IRUFERVJfXW00X3F1b3RlKHRyYW5zbGl0KGdsX0hFQURFUl9OQU1FLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFstLi9dLCBbX19fXSkpKQorLSAgXSkKKy1dKQorLQorLSMgQUNfQ0hFQ0tfRlVOQ1NfT05DRShGVU5DMSBGVU5DMiAuLi4pIGlzIGEgb25jZS1vbmx5IHZhcmlhbnQgb2YKKy0jIEFDX0NIRUNLX0ZVTkNTKEZVTkMxIEZVTkMyIC4uLikuCistQUNfREVGVU4oW0FDX0NIRUNLX0ZVTkNTX09OQ0VdLCBbCisrIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9yZWFsbG9jLmMuCisrQUNfREVGVU4oW2dsX1BSRVJFUV9SRUFMTE9DXSwgWworICAgOgorLSAgQUNfRk9SRUFDSChbZ2xfRlVOQ19OQU1FXSwgWyQxXSwgWworLSAgICBBQ19ERUZVTihbZ2xfQ0hFQ0tfRlVOQ19dbTRfZGVmbihbZ2xfRlVOQ19OQU1FXSksIFsKKy0gICAgICBBQ19DSEVDS19GVU5DUyhtNF9kZWZuKFtnbF9GVU5DX05BTUVdKSkKKy0gICAgXSkKKy0gICAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfRlVOQ19dbTRfZGVmbihbZ2xfRlVOQ19OQU1FXSkpCistICBdKQorIF0pCisgCistIyBBQ19DSEVDS19ERUNMU19PTkNFKERFQ0wxIERFQ0wyIC4uLikgaXMgYSBvbmNlLW9ubHkgdmFyaWFudCBvZgorLSMgQUNfQ0hFQ0tfREVDTFMoREVDTDEsIERFQ0wyLCAuLi4pLgorLUFDX0RFRlVOKFtBQ19DSEVDS19ERUNMU19PTkNFXSwgWworLSAgOgorLSAgQUNfRk9SRUFDSChbZ2xfREVDTF9OQU1FXSwgWyQxXSwgWworLSAgICBBQ19ERUZVTihbZ2xfQ0hFQ0tfREVDTF9dbTRfZGVmbihbZ2xfREVDTF9OQU1FXSksIFsKKy0gICAgICBBQ19DSEVDS19ERUNMUyhtNF9kZWZuKFtnbF9ERUNMX05BTUVdKSkKKy0gICAgXSkKKy0gICAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfREVDTF9dbTRfZGVmbihbZ2xfREVDTF9OQU1FXSkpCistICBdKQorLV0pCisgIyBxdW90ZS5tNCBzZXJpYWwgMQorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorQEAgLTM4Nyw2ICsxMzcwLDcgQEAKKyAgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9xdW90ZS5jLgorICAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0ZGRlZi5oKQorIF0pCisrCisgIyBxdW90ZWFyZy5tNCBzZXJpYWwgMQorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorQEAgLTQwMywzMiArMTM4Nyw2OSBAQAorICAgQUNfVFlQRV9NQlNUQVRFX1QKKyAgIGptX0ZVTkNfTUJSVE9XQworIF0pCistIyByZWFsbG9jLm00IHNlcmlhbCA3CistZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIG1ic3RhdGVfdC5tNCBzZXJpYWwgOQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorIGRubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKyBkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKyBkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKyBkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyAKKy1kbmwgRnJvbSBKaW0gTWV5ZXJpbmcuCistZG5sIERldGVybWluZSB3aGV0aGVyIHJlYWxsb2Mgd29ya3Mgd2hlbiBib3RoIGFyZ3VtZW50cyBhcmUgMC4KKy1kbmwgSWYgaXQgZG9lc24ndCwgYXJyYW5nZSB0byB1c2UgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uLgorKyMgRnJvbSBQYXVsIEVnZ2VydC4KKyAKKy1BQ19ERUZVTihbam1fRlVOQ19SRUFMTE9DXSwKKysjIEJlT1MgNSBoYXMgPHdjaGFyLmg+IGJ1dCBkb2VzIG5vdCBkZWZpbmUgbWJzdGF0ZV90LAorKyMgc28geW91IGNhbid0IGRlY2xhcmUgYW4gb2JqZWN0IG9mIHRoYXQgdHlwZS4KKysjIENoZWNrIGZvciB0aGlzIGluY29tcGF0aWJpbGl0eSB3aXRoIFN0YW5kYXJkIEMuCisrCisrIyBBQ19UWVBFX01CU1RBVEVfVAorKyMgLS0tLS0tLS0tLS0tLS0tLS0KKytBQ19ERUZVTihbQUNfVFlQRV9NQlNUQVRFX1RdLAorKyAgW0FDX0NBQ0hFX0NIRUNLKFtmb3IgbWJzdGF0ZV90XSwgYWNfY3ZfdHlwZV9tYnN0YXRlX3QsCisrICAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisrCVtBQ19MQU5HX1BST0dSQU0oCisrCSAgIFtBQ19JTkNMVURFU19ERUZBVUxUCisrIwkgICAgaW5jbHVkZSA8d2NoYXIuaD5dLAorKwkgICBbbWJzdGF0ZV90IHg7IHJldHVybiBzaXplb2YgeDtdKV0sCisrCVthY19jdl90eXBlX21ic3RhdGVfdD15ZXNdLAorKwlbYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9bm9dKV0pCisrICAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9tYnN0YXRlX3QgPSB5ZXM7IHRoZW4KKysgICAgIEFDX0RFRklORShbSEFWRV9NQlNUQVRFX1RdLCAxLAorKwkgICAgICAgW0RlZmluZSB0byAxIGlmIDx3Y2hhci5oPiBkZWNsYXJlcyBtYnN0YXRlX3QuXSkKKysgICBlbHNlCisrICAgICBBQ19ERUZJTkUoW21ic3RhdGVfdF0sIGludCwKKysJICAgICAgIFtEZWZpbmUgdG8gYSB0eXBlIGlmIDx3Y2hhci5oPiBkb2VzIG5vdCBkZWZpbmUuXSkKKysgICBmaV0pCisrCisrIyBtYnJ0b3djLm00IHNlcmlhbCA1CisrZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQKKysKKytkbmwgVGhpcyBmaWxlIGNhbiBiZSByZW1vdmVkLCBhbmQgam1fRlVOQ19NQlJUT1dDIHJlcGxhY2VkIHdpdGgKKytkbmwgQUNfRlVOQ19NQlJUT1dDLCB3aGVuIGF1dG9jb25mIDIuNTcgY2FuIGJlIGFzc3VtZWQgZXZlcnl3aGVyZS4KKysKKytBQ19ERUZVTihbam1fRlVOQ19NQlJUT1dDXSwKKyBbCistICBBQ19SRVFVSVJFKFtBQ19GVU5DX1JFQUxMT0NdKQorLSAgZG5sIGF1dG9jb25mIDwgMi41NyB1c2VkIHRoZSBzeW1ib2wgYWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzLgorLSAgaWYgdGVzdCBYIiRhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsIiA9IFhubyB8fCB0ZXN0IFgiJGFjX2N2X2Z1bmNfcmVhbGxvY193b3JrcyIgPSBYbm87IHRoZW4KKy0gICAgZ2xfUFJFUkVRX1JFQUxMT0MKKysgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIG1icnRvd2MgYW5kIG1ic3RhdGVfdCBhcmUgcHJvcGVybHkgZGVjbGFyZWRdLAorKyAgICBqbV9jdl9mdW5jX21icnRvd2MsCisrICAgIFtBQ19UUllfTElOSygKKysgICAgICAgWyNpbmNsdWRlIDx3Y2hhci5oPl0sCisrICAgICAgIFttYnN0YXRlX3Qgc3RhdGU7IHJldHVybiAhIChzaXplb2Ygc3RhdGUgJiYgbWJydG93Yyk7XSwKKysgICAgICAgam1fY3ZfZnVuY19tYnJ0b3djPXllcywKKysgICAgICAgam1fY3ZfZnVuY19tYnJ0b3djPW5vKV0pCisrICBpZiB0ZXN0ICRqbV9jdl9mdW5jX21icnRvd2MgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTUJSVE9XQywgMSwKKysgICAgICBbRGVmaW5lIHRvIDEgaWYgbWJydG93YyBhbmQgbWJzdGF0ZV90IGFyZSBwcm9wZXJseSBkZWNsYXJlZC5dKQorICAgZmkKKyBdKQorIAorLSMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvcmVhbGxvYy5jLgorLUFDX0RFRlVOKFtnbF9QUkVSRVFfUkVBTExPQ10sIFsKKy0gIDoKKy1dKQorLSMgcm1kaXIubTQgc2VyaWFsIDEKKysjIGhhc2gubTQgc2VyaWFsIDEKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyBkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCitAQCAtNDM2LDE4ICsxNDU3LDcxIEBACisgZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisgZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisgCistQUNfREVGVU4oW2dsX0ZVTkNfUk1ESVJdLAorK0FDX0RFRlVOKFtnbF9IQVNIXSwKKyBbCistICBBQ19SRVBMQUNFX0ZVTkNTKHJtZGlyKQorLSAgaWYgdGVzdCAkYWNfY3ZfZnVuY19ybWRpciA9IG5vOyB0aGVuCistICAgIGdsX1BSRVJFUV9STURJUgorLSAgZmkKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9oYXNoLmMuCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RkbGliLmgpCisrICBBQ19IRUFERVJfU1REQk9PTAorKyAgQUNfQ0hFQ0tfREVDTFNfT05DRShmcmVlIG1hbGxvYykKKyBdKQorIAorLSMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvcm1kaXIuYy4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1JNRElSXSwgWworLSAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NUQVRdKQorLSAgOgorK0FDX0RFRlVOKFthZ19DSEVDS19OQU5PU0VDT05EX1NUQVRdLAorKyAgW0FDX0NBQ0hFX0NIRUNLKFtmb3IgbmFub3NlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0XSwKKysgICAgIFthY19jdl9zdGF0X25zZWNdLAorKyAgICAgW0FDX1RSWV9DT01QSUxFKAorKwlbCisrCSAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKwkgICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKwkgICNpbmNsdWRlIDx1bmlzdGQuaD4KKysJICBzdHJ1Y3Qgc3RhdCBzdDsKKysJXSwKKysJWyByZXR1cm4gc3Quc3RfYXRpbWVuc2VjICsgc3Quc3RfbXRpbWVuc2VjICsgc3Quc3RfY3RpbWVuc2VjOyBdLAorKwlbYWNfY3Zfc3RhdF9uc2VjPXllc10sCisrCVthY19jdl9zdGF0X25zZWM9bm9dKQorKyAgICAgXSkKKysgICBpZiB0ZXN0ICRhY19jdl9zdGF0X25zZWMgPSB5ZXM7IHRoZW4KKysgICAgIEFDX0RFRklORShIQVZFX1NUQVRfTlNFQywgMSwgW0RlZmluZSB0byAxIGlmIHN0cnVjdCBzdGF0IGhhcyBuYW5vc2Vjb25kIHRpbWVzdGFtcHMuXSkKKysgICBmaQorKworKyAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbmFub3NlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0XSwKKysgICAgIFthY19jdl9zdGF0X3RpbWV2YWxdLAorKyAgICAgW0FDX1RSWV9DT01QSUxFKAorKwlbCisrCSAgI2luY2x1ZGUgPHRpbWUuaD4KKysJICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCSAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCSAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKwkgIHN0cnVjdCBzdGF0IHN0OworKwldLAorKwlbIHJldHVybiBzdC5zdF9hdGltLnR2X25zZWMgKyBzdC5zdF9tdGltLnR2X25zZWMgKyBzdC5zdF9jdGltLnR2X25zZWM7IF0sCisrCVthY19jdl9zdGF0X3RpbWV2YWw9eWVzXSwKKysJW2FjX2N2X3N0YXRfdGltZXZhbD1ub10pCisrICAgICBdKQorKyAgIGlmIHRlc3QgJGFjX2N2X3N0YXRfdGltZXZhbCA9IHllczsgdGhlbgorKyAgICAgQUNfREVGSU5FKEhBVkVfU1RBVF9USU1FVkFMLCAxLCBbRGVmaW5lIHRvIDEgaWYgc3RydWN0IHN0YXQgY29tdGFpbnMgc3RydWN0IHRpbWV2YWwncy5dKQorKyAgIGZpXSkKKysKKysjc2VyaWFsIDcgLSotIGF1dG9jb25mIC0qLQorKworK2RubCBGcm9tIEppbSBNZXllcmluZy4KKytkbmwKKytkbmwgU2VlIGlmIHRoZSBnbGliYyAqX3VubG9ja2VkIEkvTyBtYWNyb3Mgb3IgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUuCisrZG5sIFVzZSBvbmx5IHRob3NlICpfdW5sb2NrZWQgbWFjcm9zIG9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWNsYXJlZAorK2RubCAoYmVjYXVzZSBzb21lIG9mIHRoZW0gd2VyZSBkZWNsYXJlZCBpbiBTb2xhcmlzIDIuNS4xIGJ1dCB3ZXJlIHJlbW92ZWQKKytkbmwgaW4gU29sYXJpcyAyLjYsIHdoZXJlYXMgd2Ugd2FudCBiaW5hcmllcyBidWlsdCBvbiBTb2xhcmlzIDIuNS4xIHRvIHJ1bgorK2RubCBvbiBTb2xhcmlzIDIuNikuCisrCisrQUNfREVGVU4oW2ptX0ZVTkNfR0xJQkNfVU5MT0NLRURfSU9dLAorK1sKKysgIGRubCBQZXJzdWFkZSBnbGliYyA8c3RkaW8uaD4gdG8gZGVjbGFyZSBmZ2V0c191bmxvY2tlZCgpLCBmcHV0c191bmxvY2tlZCgpCisrICBkbmwgZXRjLgorKyAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrCisrICBBQ19DSEVDS19ERUNMU19PTkNFKAorKyAgICAgW2NsZWFyZXJyX3VubG9ja2VkIGZlb2ZfdW5sb2NrZWQgZmVycm9yX3VubG9ja2VkCisrICAgICAgZmZsdXNoX3VubG9ja2VkIGZnZXRzX3VubG9ja2VkIGZwdXRjX3VubG9ja2VkIGZwdXRzX3VubG9ja2VkCisrICAgICAgZnJlYWRfdW5sb2NrZWQgZndyaXRlX3VubG9ja2VkIGdldGNfdW5sb2NrZWQKKysgICAgICBnZXRjaGFyX3VubG9ja2VkIHB1dGNfdW5sb2NrZWQgcHV0Y2hhcl91bmxvY2tlZF0pCisgXSkKKyAKKyAjIENoZWNrIGZvciBzZXRtb2RlLCBET1Mgc3R5bGUuCitAQCAtNDg4LDE4MCArMTU2MiwzOSBAQAorICAgICAgQUNfREVGSU5FKEhBVkVfU0VUTU9ERV9ET1MsIDEsCisgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgRE9TLXN0eWxlIGBzZXRtb2RlJyBmdW5jdGlvbi5dKQorICAgIGZpXSkKKy0jIENoZWNrIGZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTkuCistCistIyBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSMgYW55IGxhdGVyIHZlcnNpb24uCistCistIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKy0jIDAyMTExLTEzMDcsIFVTQS4KKy0KKy0jIFByZXBhcmUgZm9yIHN1YnN0aXR1dGluZyA8c3RkYm9vbC5oPiBpZiBpdCBpcyBub3Qgc3VwcG9ydGVkLgorLQorLUFDX0RFRlVOKFtBTV9TVERCT09MX0hdLAorLVsKKy0gIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERCT09MXSkKKy0KKy0gICMgRGVmaW5lIHR3byBhZGRpdGlvbmFsIHZhcmlhYmxlcyB1c2VkIGluIHRoZSBNYWtlZmlsZSBzdWJzdGl0dXRpb24uCistCistICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPSB5ZXM7IHRoZW4KKy0gICAgU1REQk9PTF9IPScnCistICBlbHNlCistICAgIFNUREJPT0xfSD0nc3RkYm9vbC5oJworLSAgZmkKKy0gIEFDX1NVQlNUKFtTVERCT09MX0hdKQorLQorLSAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfX0Jvb2wiID0geWVzOyB0aGVuCistICAgIEhBVkVfX0JPT0w9MQorLSAgZWxzZQorLSAgICBIQVZFX19CT09MPTAKKy0gIGZpCistICBBQ19TVUJTVChbSEFWRV9fQk9PTF0pCistXSkKKy0KKy0jIFRoaXMgbWFjcm8gaXMgb25seSBuZWVkZWQgaW4gYXV0b2NvbmYgPD0gMi41NC4gIE5ld2VyIHZlcnNpb25zIG9mIGF1dG9jb25mCistIyBoYXZlIHRoaXMgbWFjcm8gYnVpbHQtaW4uCistCistQUNfREVGVU4oW0FDX0hFQURFUl9TVERCT09MXSwKKy0gIFtBQ19DQUNIRV9DSEVDSyhbZm9yIHN0ZGJvb2wuaCB0aGF0IGNvbmZvcm1zIHRvIEM5OV0sCistICAgICBbYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaF0sCistICAgICBbQUNfVFJZX0NPTVBJTEUoCistCVsKKy0JICAjaW5jbHVkZSA8c3RkYm9vbC5oPgorLQkgICNpZm5kZWYgYm9vbAorLQkgICAiZXJyb3I6IGJvb2wgaXMgbm90IGRlZmluZWQiCistCSAgI2VuZGlmCistCSAgI2lmbmRlZiBmYWxzZQorLQkgICAiZXJyb3I6IGZhbHNlIGlzIG5vdCBkZWZpbmVkIgorLQkgICNlbmRpZgorLQkgICNpZiBmYWxzZQorLQkgICAiZXJyb3I6IGZhbHNlIGlzIG5vdCAwIgorLQkgICNlbmRpZgorLQkgICNpZm5kZWYgdHJ1ZQorLQkgICAiZXJyb3I6IGZhbHNlIGlzIG5vdCBkZWZpbmVkIgorLQkgICNlbmRpZgorLQkgICNpZiB0cnVlICE9IDEKKy0JICAgImVycm9yOiB0cnVlIGlzIG5vdCAxIgorLQkgICNlbmRpZgorLQkgICNpZm5kZWYgX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQKKy0JICAgImVycm9yOiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCBpcyBub3QgZGVmaW5lZCIKKy0JICAjZW5kaWYKKy0KKy0JICBzdHJ1Y3QgcyB7IF9Cb29sIHM6IDE7IF9Cb29sIHQ7IH0gczsKKy0KKy0JICBjaGFyIGFbdHJ1ZSA9PSAxID8gMSA6IC0xXTsKKy0JICBjaGFyIGJbZmFsc2UgPT0gMCA/IDEgOiAtMV07CistCSAgY2hhciBjW19fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkID09IDEgPyAxIDogLTFdOworLQkgIGNoYXIgZFsoYm9vbCkgLTAuNSA9PSB0cnVlID8gMSA6IC0xXTsKKy0JICBib29sIGUgPSAmczsKKy0JICBjaGFyIGZbKF9Cb29sKSAtMC4wID09IGZhbHNlID8gMSA6IC0xXTsKKy0JICBjaGFyIGdbdHJ1ZV07CistCSAgY2hhciBoW3NpemVvZiAoX0Jvb2wpXTsKKy0JICBjaGFyIGlbc2l6ZW9mIHMudF07CistCV0sCistCVsgcmV0dXJuICFhICsgIWIgKyAhYyArICFkICsgIWUgKyAhZiArICFnICsgIWggKyAhaTsgXSwKKy0JW2FjX2N2X2hlYWRlcl9zdGRib29sX2g9eWVzXSwKKy0JW2FjX2N2X2hlYWRlcl9zdGRib29sX2g9bm9dKV0pCistICAgQUNfQ0hFQ0tfVFlQRVMoW19Cb29sXSkKKy0gICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYm9vbF9oID0geWVzOyB0aGVuCistICAgICBBQ19ERUZJTkUoSEFWRV9TVERCT09MX0gsIDEsIFtEZWZpbmUgdG8gMSBpZiBzdGRib29sLmggY29uZm9ybXMgdG8gQzk5Ll0pCistICAgZmldKQorLSNzZXJpYWwgNyAtKi0gYXV0b2NvbmYgLSotCistCistZG5sIEZyb20gSmltIE1leWVyaW5nLgorLWRubAorLWRubCBTZWUgaWYgdGhlIGdsaWJjICpfdW5sb2NrZWQgSS9PIG1hY3JvcyBvciBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZS4KKy1kbmwgVXNlIG9ubHkgdGhvc2UgKl91bmxvY2tlZCBtYWNyb3Mgb3IgZnVuY3Rpb25zIHRoYXQgYXJlIGRlY2xhcmVkCistZG5sIChiZWNhdXNlIHNvbWUgb2YgdGhlbSB3ZXJlIGRlY2xhcmVkIGluIFNvbGFyaXMgMi41LjEgYnV0IHdlcmUgcmVtb3ZlZAorLWRubCBpbiBTb2xhcmlzIDIuNiwgd2hlcmVhcyB3ZSB3YW50IGJpbmFyaWVzIGJ1aWx0IG9uIFNvbGFyaXMgMi41LjEgdG8gcnVuCistZG5sIG9uIFNvbGFyaXMgMi42KS4KKy0KKy1BQ19ERUZVTihbam1fRlVOQ19HTElCQ19VTkxPQ0tFRF9JT10sCistWworLSAgZG5sIFBlcnN1YWRlIGdsaWJjIDxzdGRpby5oPiB0byBkZWNsYXJlIGZnZXRzX3VubG9ja2VkKCksIGZwdXRzX3VubG9ja2VkKCkKKy0gIGRubCBldGMuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKy0KKy0gIEFDX0NIRUNLX0RFQ0xTX09OQ0UoCistICAgICBbY2xlYXJlcnJfdW5sb2NrZWQgZmVvZl91bmxvY2tlZCBmZXJyb3JfdW5sb2NrZWQKKy0gICAgICBmZmx1c2hfdW5sb2NrZWQgZmdldHNfdW5sb2NrZWQgZnB1dGNfdW5sb2NrZWQgZnB1dHNfdW5sb2NrZWQKKy0gICAgICBmcmVhZF91bmxvY2tlZCBmd3JpdGVfdW5sb2NrZWQgZ2V0Y191bmxvY2tlZAorLSAgICAgIGdldGNoYXJfdW5sb2NrZWQgcHV0Y191bmxvY2tlZCBwdXRjaGFyX3VubG9ja2VkXSkKKy1dKQorLSNzZXJpYWwgNQorLQorLWRubCBGcm9tIEppbSBNZXllcmluZworLQorLWRubCBEZWZpbmUgSEFWRV9TVFJVQ1RfVVRJTUJVRiBpZiBgc3RydWN0IHV0aW1idWYnIGlzIGRlY2xhcmVkIC0tCistZG5sIHVzdWFsbHkgaW4gPHV0aW1lLmg+LgorLWRubCBTb21lIHN5c3RlbXMgaGF2ZSB1dGltZS5oIGJ1dCBkb24ndCBkZWNsYXJlIHRoZSBzdHJ1Y3QgYW55d2hlcmUuCistCistQUNfREVGVU4oW2ptX0NIRUNLX1RZUEVfU1RSVUNUX1VUSU1CVUZdLAorLVsKKy0gIEFDX0NIRUNLX0hFQURFUlNfT05DRShzeXMvdGltZS5oIHV0aW1lLmgpCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfVElNRV0pCistICBBQ19DQUNIRV9DSEVDSyhbZm9yIHN0cnVjdCB1dGltYnVmXSwgZnVfY3Zfc3lzX3N0cnVjdF91dGltYnVmLAorLSAgICBbQUNfVFJZX0NPTVBJTEUoCistICAgICAgWworLSNpZmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKKy0jIGluY2x1ZGUgPHN5cy90aW1lLmg+CistIyBpbmNsdWRlIDx0aW1lLmg+CistI2Vsc2UKKy0jIGlmZGVmIEhBVkVfU1lTX1RJTUVfSAorLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CistIyBlbHNlCistIyAgaW5jbHVkZSA8dGltZS5oPgorLSMgZW5kaWYKKy0jZW5kaWYKKy0jaWZkZWYgSEFWRV9VVElNRV9ICistIyBpbmNsdWRlIDx1dGltZS5oPgorLSNlbmRpZgorLSAgICAgIF0sCistICAgICAgW3N0YXRpYyBzdHJ1Y3QgdXRpbWJ1ZiB4OyB4LmFjdGltZSA9IHgubW9kdGltZTtdLAorLSAgICAgIGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1Zj15ZXMsCistICAgICAgZnVfY3Zfc3lzX3N0cnVjdF91dGltYnVmPW5vKQorLSAgICBdKQorIAorLSAgaWYgdGVzdCAkZnVfY3Zfc3lzX3N0cnVjdF91dGltYnVmID0geWVzOyB0aGVuCistICAgIEFDX0RFRklORShIQVZFX1NUUlVDVF9VVElNQlVGLCAxLAorLSAgICAgIFtEZWZpbmUgaWYgc3RydWN0IHV0aW1idWYgaXMgZGVjbGFyZWQgLS0gdXN1YWxseSBpbiA8dXRpbWUuaD4uCistICAgICAgIFNvbWUgc3lzdGVtcyBoYXZlIHV0aW1lLmggYnV0IGRvbid0IGRlY2xhcmUgdGhlIHN0cnVjdCBhbnl3aGVyZS4gXSkKKy0gIGZpCistXSkKKy0jIHhhbGxvYy5tNCBzZXJpYWwgMQorLWRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorLWRubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKy1kbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKy1kbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKy1kbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysjc2VyaWFsIDEKKyAKKy1BQ19ERUZVTihbZ2xfWEFMTE9DXSwKKy1bCistICBnbF9QUkVSRVFfWE1BTExPQworLSAgZ2xfUFJFUkVRX1hTVFJEVVAKKy1dKQorK2RubCBGcm9tIE11bWl0IEtoYW4gYW5kIFBhdWwgRWdnZXJ0CisrZG5sIERldGVybWluZSB3aGV0aGVyIG1rZGlyIGFjY2VwdHMgb25seSBvbmUgYXJndW1lbnQgaW5zdGVhZCBvZiB0aGUgdXN1YWwgdHdvLgorIAorLSMgUHJlcmVxdWlzaXRlcyBvZiBsaWIveG1hbGxvYy5jLgorLUFDX0RFRlVOKFtnbF9QUkVSRVFfWE1BTExPQ10sIFsKKy0gIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKy0gIEFDX1JFUVVJUkUoW2ptX0ZVTkNfTUFMTE9DXSkKKy0gIEFDX1JFUVVJUkUoW2ptX0ZVTkNfUkVBTExPQ10pCistXSkKKytBQ19ERUZVTihbUEFUQ0hfRlVOQ19NS0RJUl9UQUtFU19PTkVfQVJHXSwKKysgIFtBQ19DSEVDS19GVU5DUyhta2RpcikKKysgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBta2RpciB0YWtlcyBvbmx5IG9uZSBhcmd1bWVudF0sCisrICAgICBwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnLAorKyAgICAgW3BhdGNoX2N2X21rZGlyX3Rha2VzX29uZV9hcmc9bm8KKysgICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX21rZGlyID0geWVzOyB0aGVuCisrICAgICAgICBBQ19UUllfQ09NUElMRShbCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKwkgIF0sCisrCSAgW21rZGlyICgiLiIsIDApO10sCisrCSAgLAorKwkgIFtBQ19UUllfQ09NUElMRShbCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKwkgICAgIF0sCisrCSAgICAgW21rZGlyICgiLiIpO10sCisrCSAgICAgcGF0Y2hfY3ZfbWtkaXJfdGFrZXNfb25lX2FyZz15ZXMKKysJICApXQorKwkpCisrICAgICAgZmkKKysgICAgIF0KKysgICApCisrICAgaWYgdGVzdCAkcGF0Y2hfY3ZfbWtkaXJfdGFrZXNfb25lX2FyZyA9IHllczsgdGhlbgorKyAgICAgQUNfREVGSU5FKFtNS0RJUl9UQUtFU19PTkVfQVJHXSwgMSwKKysgICAgICAgW0RlZmluZSBpZiBta2RpciB0YWtlcyBvbmx5IG9uZSBhcmd1bWVudC5dKQorKyAgIGZpCisrICBdCisrKQorIAorLSMgUHJlcmVxdWlzaXRlcyBvZiBsaWIveHN0cmR1cC5jLgorLUFDX0RFRlVOKFtnbF9QUkVSRVFfWFNUUkRVUF0sIFsKKy0gIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKy0gIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKy1dKQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvY29uZmlndXJlCisrKysgcGF0Y2gtMi41LjkvY29uZmlndXJlCitAQCAtMSwxMSArMSwxMCBAQAorICMhIC9iaW4vc2gKKyAjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCistIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTcgZm9yIHBhdGNoIDIuNS45LgorKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5IGZvciBwYXRjaCAyLjUuOS4KKyAjCisgIyBSZXBvcnQgYnVncyB0byA8YnVnLXBhdGNoQGdudS5vcmc+LgorICMKKy0jIENvcHlyaWdodCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyCistIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCisgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitAQCAtMjIsOSArMjEsMTAgQEAKKyBlbGlmIHRlc3QgLW4gIiR7QkFTSF9WRVJTSU9OK3NldH0iICYmIChzZXQgLW8gcG9zaXgpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgc2V0IC1vIHBvc2l4CisgZmkKKytEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisgCisgIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCistaWYgKEZPTz1GT087IHVuc2V0IEZPTykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisraWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICBhc191bnNldD11bnNldAorIGVsc2UKKyAgIGFzX3Vuc2V0PWZhbHNlCitAQCAtNDMsNyArNDMsNyBAQAorICAgTENfTUVBU1VSRU1FTlQgTENfTUVTU0FHRVMgTENfTU9ORVRBUlkgTENfTkFNRSBMQ19OVU1FUklDIExDX1BBUEVSIFwKKyAgIExDX1RFTEVQSE9ORSBMQ19USU1FCisgZG8KKy0gIGlmIChzZXQgK3g7IHRlc3QgLW4gImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCisrICBpZiAoc2V0ICt4OyB0ZXN0IC16ICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgorICAgICBldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIKKyAgIGVsc2UKKyAgICAgJGFzX3Vuc2V0ICRhc192YXIKK0BAIC0yMjAsMTYgKzIyMCwxNyBAQAorIGlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKyAgIGFzX21rZGlyX3A9OgorIGVsc2UKKysgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgICBhc19ta2Rpcl9wPWZhbHNlCisgZmkKKyAKKyBhc19leGVjdXRhYmxlX3A9InRlc3QgLWYiCisgCisgIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorLWFzX3RyX2NwcD0ic2VkIHklKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyIKKythc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorIAorICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorLWFzX3RyX3NoPSJzZWQgeSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyIKKythc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorIAorIAorICMgSUZTCitAQCAtNjY5LDcgKzY3MCw3IEBACisgCisgIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgcGF0aHMuCisgZm9yIGFjX3ZhciBpbiBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBcCistICAgICAgICAgICAgICBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIKKysJICAgICAgbG9jYWxzdGF0ZWRpciBsaWJkaXIgaW5jbHVkZWRpciBvbGRpbmNsdWRlZGlyIGluZm9kaXIgbWFuZGlyCisgZG8KKyAgIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAorICAgY2FzZSAkYWNfdmFsIGluCitAQCAtNzA5LDEwICs3MTAsMTAgQEAKKyAgICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiBpdHMgcGFyZW50LgorICAgYWNfY29uZmRpcj1gKGRpcm5hbWUgIiQwIikgMj4vZGV2L251bGwgfHwKKyAkYXNfZXhwciBYIiQwIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorLSAgICAgICAgIFgiJDAiIDogJ1hcKC8vXClbXi9dJyBcfCBcCistICAgICAgICAgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKy0gICAgICAgICBYIiQwIiA6ICdYXCgvXCknIFx8IFwKKy0gICAgICAgICAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKysJIFgiJDAiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisrCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkMCIgOiAnWFwoL1wpJyBcfCBcCisrCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKyBlY2hvIFgiJDAiIHwKKyAgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorQEAgLTgwNCw5ICs4MDUsOSBAQAorICAgY2F0IDw8X0FDRU9GCisgSW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgorICAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCistICAgICAgICAgICAgICAgICAgICAgICAgICBbJGFjX2RlZmF1bHRfcHJlZml4XQorKwkJCSAgWyRhY19kZWZhdWx0X3ByZWZpeF0KKyAgIC0tZXhlYy1wcmVmaXg9RVBSRUZJWCAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBmaWxlcyBpbiBFUFJFRklYCistICAgICAgICAgICAgICAgICAgICAgICAgICBbUFJFRklYXQorKwkJCSAgW1BSRUZJWF0KKyAKKyBCeSBkZWZhdWx0LCBcYG1ha2UgaW5zdGFsbCcgd2lsbCBpbnN0YWxsIGFsbCB0aGUgZmlsZXMgaW4KKyBcYCRhY19kZWZhdWx0X3ByZWZpeC9iaW4nLCBcYCRhY19kZWZhdWx0X3ByZWZpeC9saWInIGV0Yy4gIFlvdSBjYW4gc3BlY2lmeQorQEAgLTg5NiwxMiArODk3LDQ1IEBACisgICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIgOzsKKyBlc2FjCistIyBEb24ndCBibGluZGx5IHBlcmZvcm0gYSBgY2QgIiRhY19kaXIiLyRhY19mb28gJiYgcHdkYCBzaW5jZSAkYWNfZm9vIGNhbiBiZQorLSMgYWJzb2x1dGUuCistYWNfYWJzX2J1aWxkZGlyPWBjZCAiJGFjX2RpciIgJiYgY2QgJGFjX2J1aWxkZGlyICYmIHB3ZGAKKy1hY19hYnNfdG9wX2J1aWxkZGlyPWBjZCAiJGFjX2RpciIgJiYgY2QgJHthY190b3BfYnVpbGRkaXJ9LiAmJiBwd2RgCistYWNfYWJzX3NyY2Rpcj1gY2QgIiRhY19kaXIiICYmIGNkICRhY19zcmNkaXIgJiYgcHdkYAorLWFjX2Fic190b3Bfc3JjZGlyPWBjZCAiJGFjX2RpciIgJiYgY2QgJGFjX3RvcF9zcmNkaXIgJiYgcHdkYAorKworKyMgRG8gbm90IHVzZSBgY2QgZm9vICYmIHB3ZGAgdG8gY29tcHV0ZSBhYnNvbHV0ZSBwYXRocywgYmVjYXVzZQorKyMgdGhlIGRpcmVjdG9yaWVzIG1heSBub3QgZXhpc3QuCisrY2FzZSBgcHdkYCBpbgorKy4pIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OworKyopCisrICBjYXNlICIkYWNfZGlyIiBpbgorKyAgLikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CisrICAqKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGAvIiRhY19kaXIiOzsKKysgIGVzYWM7OworK2VzYWMKKytjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKysuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OworKyopCisrICBjYXNlICR7YWNfdG9wX2J1aWxkZGlyfS4gaW4KKysgIC4pIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpcjs7CisrICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CisrICAqKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXIvJHthY190b3BfYnVpbGRkaXJ9Ljs7CisrICBlc2FjOzsKKytlc2FjCisrY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisrLikgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKKysqKQorKyAgY2FzZSAkYWNfc3JjZGlyIGluCisrICAuKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworKyAgKikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY19zcmNkaXI7OworKyAgZXNhYzs7CisrZXNhYworK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorKy4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKKysqKQorKyAgY2FzZSAkYWNfdG9wX3NyY2RpciBpbgorKyAgLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7CisrICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKKysgICopIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3RvcF9zcmNkaXI7OworKyAgZXNhYzs7CisrZXNhYworIAorICAgICBjZCAkYWNfZGlyCisgICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlOyBvdGhlcndpc2UgZ2V0IEN5Z251cyBzdHlsZSBjb25maWd1cmUuCitAQCAtOTEyLDEzICs5NDYsMTMgQEAKKyAgICAgICBlY2hvCisgICAgICAgJFNIRUxMICRhY19zcmNkaXIvY29uZmlndXJlICAtLWhlbHA9cmVjdXJzaXZlCisgICAgIGVsaWYgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5hYyB8fAorLSAgICAgICAgICAgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5pbjsgdGhlbgorKwkgICB0ZXN0IC1mICRhY19zcmNkaXIvY29uZmlndXJlLmluOyB0aGVuCisgICAgICAgZWNobworICAgICAgICRhY19jb25maWd1cmUgLS1oZWxwCisgICAgIGVsc2UKKyAgICAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgaW4gJGFjX2RpciIgPiYyCisgICAgIGZpCistICAgIGNkICRhY19wb3BkaXIKKysgICAgY2QgIiRhY19wb3BkaXIiCisgICBkb25lCisgZmkKKyAKK0BAIC05MjYsMTAgKzk2MCw5IEBACisgaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgorICAgY2F0IDw8XF9BQ0VPRgorIHBhdGNoIGNvbmZpZ3VyZSAyLjUuOQorLWdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41NworK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OQorIAorLUNvcHlyaWdodCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyCistRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorIF9BQ0VPRgorQEAgLTk0MSw3ICs5NzQsNyBAQAorIHJ1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCisgCisgSXQgd2FzIGNyZWF0ZWQgYnkgcGF0Y2ggJGFzX21lIDIuNS45LCB3aGljaCB3YXMKKy1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTcuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKytnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKyAKKyAgICQgJDAgJEAKKyAKK0BAIC0xMDE4LDE5ICsxMDUxLDE5IEBACisgICAgIDIpCisgICAgICAgYWNfY29uZmlndXJlX2FyZ3MxPSIkYWNfY29uZmlndXJlX2FyZ3MxICckYWNfYXJnJyIKKyAgICAgICBpZiB0ZXN0ICRhY19tdXN0X2tlZXBfbmV4dCA9IHRydWU7IHRoZW4KKy0gICAgICAgIGFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KKysJYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UgIyBHb3QgdmFsdWUsIGJhY2sgdG8gbm9ybWFsLgorICAgICAgIGVsc2UKKy0gICAgICAgIGNhc2UgJGFjX2FyZyBpbgorLSAgICAgICAgICAqPSogfCAtLWNvbmZpZy1jYWNoZSB8IC1DIHwgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qIFwKKy0gICAgICAgICAgfCAtZW5hYmxlLSogfCAtLWVuYWJsZS0qIHwgLWdhcyB8IC0tZyogfCAtbmZwIHwgLS1uZiogXAorLSAgICAgICAgICB8IC1xIHwgLXF1aWV0IHwgLS1xKiB8IC1zaWxlbnQgfCAtLXNpbCogfCAtdiB8IC12ZXJiKiBcCistICAgICAgICAgIHwgLXdpdGgtKiB8IC0td2l0aC0qIHwgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qIHwgLS14KQorLSAgICAgICAgICAgIGNhc2UgIiRhY19jb25maWd1cmVfYXJnczAgIiBpbgorLSAgICAgICAgICAgICAgIiRhY19jb25maWd1cmVfYXJnczEiKiIgJyRhY19hcmcnICIqICkgY29udGludWUgOzsKKy0gICAgICAgICAgICBlc2FjCistICAgICAgICAgICAgOzsKKy0gICAgICAgICAgLSogKSBhY19tdXN0X2tlZXBfbmV4dD10cnVlIDs7CistICAgICAgICBlc2FjCisrCWNhc2UgJGFjX2FyZyBpbgorKwkgICo9KiB8IC0tY29uZmlnLWNhY2hlIHwgLUMgfCAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSogXAorKwkgIHwgLWVuYWJsZS0qIHwgLS1lbmFibGUtKiB8IC1nYXMgfCAtLWcqIHwgLW5mcCB8IC0tbmYqIFwKKysJICB8IC1xIHwgLXF1aWV0IHwgLS1xKiB8IC1zaWxlbnQgfCAtLXNpbCogfCAtdiB8IC12ZXJiKiBcCisrCSAgfCAtd2l0aC0qIHwgLS13aXRoLSogfCAtd2l0aG91dC0qIHwgLS13aXRob3V0LSogfCAtLXgpCisrCSAgICBjYXNlICIkYWNfY29uZmlndXJlX2FyZ3MwICIgaW4KKysJICAgICAgIiRhY19jb25maWd1cmVfYXJnczEiKiIgJyRhY19hcmcnICIqICkgY29udGludWUgOzsKKysJICAgIGVzYWMKKysJICAgIDs7CisrCSAgLSogKSBhY19tdXN0X2tlZXBfbmV4dD10cnVlIDs7CisrCWVzYWMKKyAgICAgICBmaQorICAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MkYWNfc2VwJyRhY19hcmcnIgorICAgICAgICMgR2V0IHJpZCBvZiB0aGUgbGVhZGluZyBzcGFjZS4KK0BAIC0xMDY0LDEyICsxMDk3LDEyIEBACisgICAgIGNhc2UgYChhY19zcGFjZT0nIiciJyAnIiciJzsgc2V0IHwgZ3JlcCBhY19zcGFjZSkgMj4mMWAgaW4KKyAgICAgKmFjX3NwYWNlPVwgKikKKyAgICAgICBzZWQgLW4gXAorLSAgICAgICAgInMvJyInIicvJyInIidcXFxcJyInIicnIiciJy9nOworLSAgICAJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSciJyInXFwyJyInIicvcCIKKysJInMvJyInIicvJyInIidcXFxcJyInIicnIiciJy9nOworKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9JyInIidcXDInIiciJy9wIgorICAgICAgIDs7CisgICAgICopCisgICAgICAgc2VkIC1uIFwKKy0gICAgICAgICJzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPVxcMi9wIgorKwkicy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT1cXDIvcCIKKyAgICAgICA7OworICAgICBlc2FjOworIH0KK0BAIC0xMDk4LDcgKzExMzEsNyBAQAorICAgICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X2ZpbGVzCisgICAgICAgZG8KKyAJZXZhbCBhY192YWw9JGBlY2hvICRhY192YXJgCistICAgICAgICBlY2hvICIkYWNfdmFyPSciJyInJGFjX3ZhbCciJyInIgorKwllY2hvICIkYWNfdmFyPSciJyInJGFjX3ZhbCciJyInIgorICAgICAgIGRvbmUgfCBzb3J0CisgICAgICAgZWNobworICAgICBmaQorQEAgLTExMTcsNyArMTE1MCw3IEBACisgICAgICAgZWNobyAiJGFzX21lOiBjYXVnaHQgc2lnbmFsICRhY19zaWduYWwiCisgICAgIGVjaG8gIiRhc19tZTogZXhpdCAkZXhpdF9zdGF0dXMiCisgICB9ID4mNQorLSAgcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlICYmCisrICBybSAtZiBjb3JlICouY29yZSAmJgorICAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29uZiQkKiAkYWNfY2xlYW5fZmlsZXMgJiYKKyAgICAgZXhpdCAkZXhpdF9zdGF0dXMKKyAgICAgICcgMAorQEAgLTExOTcsNyArMTIzMCw3IEBACisgIyB2YWx1ZS4KKyBhY19jYWNoZV9jb3JydXB0ZWQ9ZmFsc2UKKyBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwKKy0gICAgICAgICAgICAgICBzZWQgLW4gJ3MvXmFjX2Vudl9cKFthLXpBLVpfMC05XSpcKV9zZXQ9LiovXDEvcCdgOyBkbworKwkgICAgICAgc2VkIC1uICdzL15hY19lbnZfXChbYS16QS1aXzAtOV0qXClfc2V0PS4qL1wxL3AnYDsgZG8KKyAgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0CisgICBldmFsIGFjX25ld19zZXQ9XCRhY19lbnZfJHthY192YXJ9X3NldAorICAgZXZhbCBhY19vbGRfdmFsPSJcJGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWUiCitAQCAtMTIxNCwxMyArMTI0NywxMyBAQAorICAgICAsKTs7CisgICAgICopCisgICAgICAgaWYgdGVzdCAieCRhY19vbGRfdmFsIiAhPSAieCRhY19uZXdfdmFsIjsgdGhlbgorLSAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorKwl7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CisgZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KKy0gICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgZm9ybWVyIHZhbHVlOiAgJGFjX29sZF92YWwiID4mNQorKwl7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjUKKyBlY2hvICIkYXNfbWU6ICAgZm9ybWVyIHZhbHVlOiAgJGFjX29sZF92YWwiID4mMjt9CistICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGN1cnJlbnQgdmFsdWU6ICRhY19uZXdfdmFsIiA+JjUKKysJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiY1CisgZWNobyAiJGFzX21lOiAgIGN1cnJlbnQgdmFsdWU6ICRhY19uZXdfdmFsIiA+JjI7fQorLSAgICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPToKKysJYWNfY2FjaGVfY29ycnVwdGVkPToKKyAgICAgICBmaTs7CisgICBlc2FjCisgICAjIFBhc3MgcHJlY2lvdXMgdmFyaWFibGVzIHRvIGNvbmZpZy5zdGF0dXMuCitAQCAtMTYyOSw3ICsxNjYyLDYgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9CisgCisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTE2NDksOCArMTY4MSw4IEBACisgIyBUcnkgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2l0aG91dCAtbyBmaXJzdCwgZGlzcmVnYXJkIGEub3V0LgorICMgSXQgd2lsbCBoZWxwIHVzIGRpYWdub3NlIGJyb2tlbiBjb21waWxlcnMsIGFuZCBmaW5kaW5nIG91dCBhbiBpbnR1aXRpb24KKyAjIG9mIGV4ZWV4dC4KKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQuLi4gJEVDSE9fQyIgPiY2CisrZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUuLi4gJEVDSE9fQyIgPiY2CisgYWNfbGlua19kZWZhdWx0PWBlY2hvICIkYWNfbGluayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8nYAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtfZGVmYXVsdFwiIikgPiY1CisgICAoZXZhbCAkYWNfbGlua19kZWZhdWx0KSAyPiY1CitAQCAtMTY3MCwyMyArMTcwMiwyMyBAQAorICAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisgICBjYXNlICRhY19maWxlIGluCisgICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5vIHwgKi5vYmogKQorLSAgICAgICAgOzsKKysJOzsKKyAgICAgY29uZnRlc3QuJGFjX2V4dCApCistICAgICAgICAjIFRoaXMgaXMgdGhlIHNvdXJjZSBmaWxlLgorLSAgICAgICAgOzsKKysJIyBUaGlzIGlzIHRoZSBzb3VyY2UgZmlsZS4KKysJOzsKKyAgICAgW2FiXS5vdXQgKQorLSAgICAgICAgIyBXZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKKy0gICAgICAgICMgY2VydGFpbmx5IHJpZ2h0LgorLSAgICAgICAgYnJlYWs7OworKwkjIFdlIGZvdW5kIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUsIGJ1dCBleGVleHQ9JycgaXMgbW9zdAorKwkjIGNlcnRhaW5seSByaWdodC4KKysJYnJlYWs7OworICAgICAqLiogKQorLSAgICAgICAgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCistICAgICAgICAjIEZJWE1FOiBJIGJlbGlldmUgd2UgZXhwb3J0IGFjX2N2X2V4ZWV4dCBmb3IgTGlidG9vbCwKKy0gICAgICAgICMgYnV0IGl0IHdvdWxkIGJlIGNvb2wgdG8gZmluZCBvdXQgaWYgaXQncyB0cnVlLiAgRG9lcyBhbnlib2R5CistICAgICAgICAjIG1haW50YWluIExpYnRvb2w/IC0tYWtpbS4KKy0gICAgICAgIGV4cG9ydCBhY19jdl9leGVleHQKKy0gICAgICAgIGJyZWFrOzsKKysJYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisrCSMgRklYTUU6IEkgYmVsaWV2ZSB3ZSBleHBvcnQgYWNfY3ZfZXhlZXh0IGZvciBMaWJ0b29sLAorKwkjIGJ1dCBpdCB3b3VsZCBiZSBjb29sIHRvIGZpbmQgb3V0IGlmIGl0J3MgdHJ1ZS4gIERvZXMgYW55Ym9keQorKwkjIG1haW50YWluIExpYnRvb2w/IC0tYWtpbS4KKysJZXhwb3J0IGFjX2N2X2V4ZWV4dAorKwlicmVhazs7CisgICAgICogKQorLSAgICAgICAgYnJlYWs7OworKwlicmVhazs7CisgICBlc2FjCisgZG9uZQorIGVsc2UKK0BAIC0xNzYwLDggKzE3OTIsOCBAQAorICAgY2FzZSAkYWNfZmlsZSBpbgorICAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubyB8ICoub2JqICkgOzsKKyAgICAgKi4qICkgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCistICAgICAgICAgIGV4cG9ydCBhY19jdl9leGVleHQKKy0gICAgICAgICAgYnJlYWs7OworKwkgIGV4cG9ydCBhY19jdl9leGVleHQKKysJICBicmVhazs7CisgICAgICogKSBicmVhazs7CisgICBlc2FjCisgZG9uZQorQEAgLTE3ODYsNyArMTgxOCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xODM3LDcgKzE4NjgsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTg1NywxMSArMTg4NywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTE4NzQsNyArMTkxMyw3IEBACisgCisgYWNfY29tcGlsZXJfZ251PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorIAorIGZpCitAQCAtMTg5MCw3ICsxOTI5LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTE5MDcsMTEgKzE5NDUsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xOTI0LDcgKzE5NzEsNyBAQAorIAorIGFjX2N2X3Byb2dfY2NfZz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY2NfZyIgPiY2CitAQCAtMTk1MSw3ICsxOTk4LDYgQEAKKyAgIGFjX2N2X3Byb2dfY2Nfc3RkYz1ubworIGFjX3NhdmVfQ0M9JENDCisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTE5NzksNiArMjAyNSwxNiBAQAorICAgdmFfZW5kICh2KTsKKyAgIHJldHVybiBzOworIH0KKysKKysvKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcworKyAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KKysgICBUaGVzZSBkb24ndCBwcm92b2tlIGFuIGVycm9yIHVuZm9ydHVuYXRlbHksIGluc3RlYWQgYXJlIHNpbGVudGx5IHRyZWF0ZWQKKysgICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQxIGlzIGFkZGVkIHRvIGdldAorKyAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KKysgICBhcnJheSBzaXplIGF0IGxlYXN0LiAgSXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRvIGdldCBzb21ldGhpbmcKKysgICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZDEuICAqLworK2ludCBvc2Y0X2NjX2FycmF5IFsnXHgwMCcgPT0gMCA/IDEgOiAtMV07CisrCisgaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7Cisgc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307Cisgc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307CitAQCAtMjAwNSwxMSArMjA2MSwyMCBAQAorICAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCisgICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0yMDIyLDcgKzIwODcsNyBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorIGRvbmUKKyBybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBDQz0kYWNfc2F2ZV9DQworQEAgLTIwNTAsMTkgKzIxMTUsMjcgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgICBmb3IgYWNfZGVjbGFyYXRpb24gaW4gXAorLSAgICcnXAorLSAgICcjaW5jbHVkZSA8c3RkbGliLmg+JyBcCisrICAgJycgXAorICAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpIHRocm93ICgpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCisgICAgJ2V4dGVybiAiQyIgdm9pZCBzdGQ6OmV4aXQgKGludCk7IHVzaW5nIHN0ZDo6ZXhpdDsnIFwKKyAgICAnZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCkgdGhyb3cgKCk7JyBcCitAQCAtMjA3MCwxNCArMjE0MywxMyBAQAorICAgICd2b2lkIGV4aXQgKGludCk7JworIGRvCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0jaW5jbHVkZSA8c3RkbGliLmg+CisgJGFjX2RlY2xhcmF0aW9uCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorIGludAorIG1haW4gKCkKKyB7CitAQCAtMjA4OCwxMSArMjE2MCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTIxMDUsOSArMjE4Niw4IEBACisgCisgY29udGludWUKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yMTI0LDExICsyMjA0LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMjE0MCw3ICsyMjI5LDcgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZG9uZQorIHJtIC1mIGNvbmZ0ZXN0KgorIGlmIHRlc3QgLW4gIiRhY19kZWNsYXJhdGlvbiI7IHRoZW4KK0BAIC0yMTU0LDcgKzIyNDMsNyBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBhY19leHQ9YworIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCisgYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworQEAgLTIxODksNyArMjI3OCw2IEBACisgICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjIwMCw3ICsyMjg4LDcgQEAKKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCistICAgICAgICAgICAgICAgICAgICAgU3ludGF4IGVycm9yCisrCQkgICAgIFN5bnRheCBlcnJvcgorIF9BQ0VPRgorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKK0BAIC0yMjEyLDYgKzIzMDAsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtMjIzMiw3ICsyMzIxLDYgQEAKKyAgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub24tZXhpc3RlbnQgaGVhZGVycworICAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yMjUwLDYgKzIzMzgsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtMjI5Niw3ICsyMzg1LDYgQEAKKyAgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yMzA3LDcgKzIzOTUsNyBAQAorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKy0gICAgICAgICAgICAgICAgICAgICBTeW50YXggZXJyb3IKKysJCSAgICAgU3ludGF4IGVycm9yCisgX0FDRU9GCisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorQEAgLTIzMTksNiArMjQwNyw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC0yMzM5LDcgKzI0MjgsNiBAQAorICAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbi1leGlzdGVudCBoZWFkZXJzCisgICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTIzNTcsNiArMjQ0NSw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC0yNDMxLDYgKzI1MjAsNyBAQAorICMgQUlYIDQgL3Vzci9iaW4vaW5zdGFsbGJzZCwgd2hpY2ggZG9lc24ndCB3b3JrIHdpdGhvdXQgYSAtZyBmbGFnCisgIyBBRlMgL3Vzci9hZnN3cy9iaW4vaW5zdGFsbCwgd2hpY2ggbWlzaGFuZGxlcyBub25leGlzdGVudCBhcmdzCisgIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgorKyMgT1MvMidzIHN5c3RlbSBpbnN0YWxsLCB3aGljaCBoYXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZW1hbnRpYworICMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gJEVDSE9fQyIgPiY2CitAQCAtMjQ0Nyw2ICsyNTM3LDcgQEAKKyBjYXNlICRhc19kaXIvIGluCisgICAuLyB8IC4vLyB8IC9jQy8qIHwgXAorICAgL2V0Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmluLyogfCBcCisrICA/OlxcL29zMlxcL2luc3RhbGxcXC8qIHwgPzpcXC9PUzJcXC9JTlNUQUxMXFwvKiB8IFwKKyAgIC91c3IvdWNiLyogKSA7OworICAgKikKKyAgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KK0BAIC0yNDU0LDIwICsyNTQ1LDIwIEBACisgICAgICMgYnkgZGVmYXVsdC4KKyAgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworICAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworLSAgICAgICAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KKy0gICAgICAgICAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKy0gICAgICAgICAgICBncmVwIGRzcG1zZyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICAgICAgICAgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9uLgorLSAgICAgICAgICAgIDoKKy0gICAgICAgICAgZWxpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorLSAgICAgICAgICAgIGdyZXAgcHdwbHVzICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gICAgICAgICAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KKy0gICAgICAgICAgICA6CistICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCistICAgICAgICAgICAgYnJlYWsgMworLSAgICAgICAgICBmaQorLSAgICAgICAgZmkKKysJaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KKysJICBpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorKwkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorKwkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9uLgorKwkgICAgOgorKwkgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKysJICAgIGdyZXAgcHdwbHVzICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysJICAgICMgcHJvZ3JhbS1zcGVjaWZpYyBpbnN0YWxsIHNjcmlwdCB1c2VkIGJ5IEhQIHB3cGx1cy0tZG9uJ3QgdXNlLgorKwkgICAgOgorKwkgIGVsc2UKKysJICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCAtYyIKKysJICAgIGJyZWFrIDMKKysJICBmaQorKwlmaQorICAgICAgIGRvbmUKKyAgICAgZG9uZQorICAgICA7OworQEAgLTI0OTksNyArMjU5MCw3IEBACisgCisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAkRUNIT19DIiA+JjYKKy1zZXQgZHVtbXkgJHtNQUtFLW1ha2V9OyBhY19tYWtlPWBlY2hvICIkMiIgfCBzZWQgJ3ksLi8rLSxfX3BfLCdgCisrc2V0IGR1bW15ICR7TUFLRS1tYWtlfTsgYWNfbWFrZT1gZWNobyAiJDIiIHwgc2VkICd5LDouLystLF9fX3BfLCdgCisgaWYgZXZhbCAidGVzdCBcIlwke2FjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCtzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKK0BAIC0yNTk2LDcgKzI2ODcsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQUlYIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBBSVguLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI2MjgsNyArMjcxOCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yNjQ5LDExICsyNzM4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMjY2NiwxMiArMjc2NCwxMSBAQAorIAorIGFjX2N2X2hlYWRlcl9zdGRjPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yNjkzLDcgKzI3OTAsNiBAQAorIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjcxOCw3ICsyODE0LDYgQEAKKyAgIDoKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjczMCw5ICsyODI1LDkgQEAKKyAjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCisgI2Vsc2UKKyAjIGRlZmluZSBJU0xPV0VSKGMpIFwKKy0gICAgICAgICAgICAgICAgICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKy0gICAgICAgICAgICAgICAgICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCistICAgICAgICAgICAgICAgICAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisrCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisrCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorICMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisgI2VuZGlmCisgCitAQCAtMjc0Myw3ICsyODM4LDcgQEAKKyAgIGludCBpOworICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCistICAgICAgICB8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKysJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICAgZXhpdCgyKTsKKyAgIGV4aXQgKDApOworIH0KK0BAIC0yNzY4LDcgKzI4NjMsNyBAQAorICggZXhpdCAkYWNfc3RhdHVzICkKKyBhY19jdl9oZWFkZXJfc3RkYz1ubworIGZpCistcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGZpCisgZmkKK0BAIC0yNzkzLDcgKzI4ODgsNyBAQAorIAorIAorIGZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAorLSAgICAgICAgICAgICAgICAgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKKysJCSAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAorIGRvCisgYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK0BAIC0yODAyLDcgKzI4OTcsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjgxNCwxMSArMjkwOCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTI4MzEsNyArMjkzNCw3IEBACisgCisgZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtMjg1OCw3ICsyOTYxLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgbWluaXgvY29uZmlnLmggdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nIG1pbml4L2NvbmZpZy5oIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjg2OSwxMSArMjk3MSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTI4ODYsNyArMjk5Nyw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtMjg5NCw3ICszMDA1LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgbWluaXgvY29uZmlnLmggcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgbWluaXgvY29uZmlnLmggcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI5MTIsNiArMzAyMiw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC0yOTMxLDMzICszMDQyLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC0zMDAwLDE1ICszMTEwLDE1IEBACisgZmkKKyAKKyAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBzdHJlcnJvciIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHN0cmVycm9yLi4uICRFQ0hPX0MiID4mNgorLWlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX3N0cmVycm9yK3NldH0iID0gc2V0OyB0aGVuCisrCisrICAgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0cmVycm9yIGluIC1sY3Bvc2l4IiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdHJlcnJvciBpbiAtbGNwb3NpeC4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2FjX2N2X2xpYl9jcG9zaXhfc3RyZXJyb3Irc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCistYWNfY3Zfc2VhcmNoX3N0cmVycm9yPW5vCisrICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCisrTElCUz0iLWxjcG9zaXggICRMSUJTIgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zMDMyLDc5ICszMTQyLDQzIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKy0gIGFjX2N2X3NlYXJjaF9zdHJlcnJvcj0ibm9uZSByZXF1aXJlZCIKKy1lbHNlCistICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0KKy1maQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX3N0cmVycm9yIiA9IG5vOyB0aGVuCistICBmb3IgYWNfbGliIGluIGNwb3NpeDsgZG8KKy0gICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCistLyogY29uZmRlZnMuaC4gICovCistX0FDRU9GCistY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CistY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0KKy0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLSNpZmRlZiBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIKKy0jZW5kaWYKKy0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy1jaGFyIHN0cmVycm9yICgpOworLWludAorLW1haW4gKCkKKy17Cistc3RyZXJyb3IgKCk7CistICA7CistICByZXR1cm4gMDsKKy19CistX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CistICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCistICBhY19jdl9zZWFyY2hfc3RyZXJyb3I9Ii1sJGFjX2xpYiIKKy1icmVhaworKyAgYWNfY3ZfbGliX2Nwb3NpeF9zdHJlcnJvcj15ZXMKKyBlbHNlCisgICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKythY19jdl9saWJfY3Bvc2l4X3N0cmVycm9yPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistICBkb25lCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisrTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworIGZpCistTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCisrZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9jcG9zaXhfc3RyZXJyb3IiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfY3Bvc2l4X3N0cmVycm9yIiA+JjYKKytpZiB0ZXN0ICRhY19jdl9saWJfY3Bvc2l4X3N0cmVycm9yID0geWVzOyB0aGVuCisrICBMSUJTPSIkTElCUyAtbGNwb3NpeCIKKyBmaQorLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfc3RyZXJyb3IiID4mNQorLWVjaG8gIiR7RUNIT19UfSRhY19jdl9zZWFyY2hfc3RyZXJyb3IiID4mNgorLWlmIHRlc3QgIiRhY19jdl9zZWFyY2hfc3RyZXJyb3IiICE9IG5vOyB0aGVuCistICB0ZXN0ICIkYWNfY3Zfc2VhcmNoX3N0cmVycm9yIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfY3Zfc2VhcmNoX3N0cmVycm9yICRMSUJTIgorIAorLWZpCisrCisgCisgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxhcmdlZmlsZSBvciAtLWRpc2FibGUtbGFyZ2VmaWxlIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9sYXJnZWZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4KK0BAIC0zMTI0LDggKzMxOTgsNyBAQAorICAgICAgICB3aGlsZSA6OyBkbworICAgICAgCSAjIElSSVggNi4yIGFuZCBsYXRlciBkbyBub3Qgc3VwcG9ydCBsYXJnZSBmaWxlcyBieSBkZWZhdWx0LAorICAgICAgCSAjIHNvIHVzZSB0aGUgQyBjb21waWxlcidzIC1uMzIgb3B0aW9uIGlmIHRoYXQgaGVscHMuCistICAgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzE1MCwxMSArMzIyMywyMCBAQAorIF9BQ0VPRgorICAgICAgCSBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zMTY2LDE1ICszMjQ4LDI0IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisgICAgICAJIENDPSIkQ0MgLW4zMiIKKyAgICAgIAkgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzE4Niw4ICszMjc3LDggQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CistICAgICAgICAgYnJlYWsKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorKwkgYnJlYWsKKyAgICAgICAgZG9uZQorICAgICAgICBDQz0kYWNfc2F2ZV9DQworICAgICAgICBybSAtZiBjb25mdGVzdC4kYWNfZXh0CitAQCAtMzIwNyw3ICszMjk4LDYgQEAKKyAgIHdoaWxlIDo7IGRvCisgICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz1ubworICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTMyMzIsMTEgKzMzMjIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zMjQ4LDkgKzMzNDcsOCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zMjc2LDExICszMzc0LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzI5Miw3ICszMzk5LDcgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBicmVhaworIGRvbmUKKyBmaQorQEAgLTMzMTQsNyArMzQyMSw2IEBACisgICB3aGlsZSA6OyBkbworICAgYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzPW5vCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzMzOSwxMSArMzQ0NSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTMzNTUsOSArMzQ3MCw4IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTMzODMsMTEgKzM0OTcsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zMzk5LDcgKzM1MjIsNyBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGJyZWFrCisgZG9uZQorIGZpCitAQCAtMzQ0Myw3ICszNTY2LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTM1MDYsMTEgKzM2MjgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zNTIzLDcgKzM2NTQsNyBAQAorIAorIGFjX2N2X2NfY29uc3Q9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX2NvbnN0IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfY19jb25zdCIgPiY2CitAQCAtMzU1MCw3ICszNjgxLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTM1NzAsMTEgKzM3MDAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zNTg3LDcgKzM3MjYsNyBAQAorIAorIGV2YWwgIiRhc19hY19IZWFkZXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTM2MTAsNyArMzc0OSw2IEBACisgICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKKyBhY19jdl9zZWFyY2hfb3BlbmRpcj1ubworIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zNjM0LDExICszNzcyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zNjUwLDEyICszNzk3LDEyIEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGlmIHRlc3QgIiRhY19jdl9zZWFyY2hfb3BlbmRpciIgPSBubzsgdGhlbgorICAgZm9yIGFjX2xpYiBpbiBkaXI7IGRvCisgICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKyAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTM2NzksMTEgKzM4MjYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTM2OTYsNyArMzg1Miw4IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgZG9uZQorIGZpCisgTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitAQCAtMzcxNyw3ICszODc0LDYgQEAKKyAgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworIGFjX2N2X3NlYXJjaF9vcGVuZGlyPW5vCisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTM3NDEsMTEgKzM4OTcsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTM3NTcsMTIgKzM5MjIsMTIgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9vcGVuZGlyIiA9IG5vOyB0aGVuCisgICBmb3IgYWNfbGliIGluIHg7IGRvCisgICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKyAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTM3ODYsMTEgKzM5NTEsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTM4MDMsNyArMzk3Nyw4IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgZG9uZQorIGZpCisgTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitAQCAtMzgyMyw3ICszOTk4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTM4NDQsMTEgKzQwMTgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zODYxLDEyICs0MDQ0LDExIEBACisgCisgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTM4ODgsNyArNDA3MCw2IEBACisgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zOTEzLDcgKzQwOTQsNiBAQAorICAgOgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zOTI1LDkgKzQxMDUsOSBAQAorICMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyAjZWxzZQorICMgZGVmaW5lIElTTE9XRVIoYykgXAorLSAgICAgICAgICAgICAgICAgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorLSAgICAgICAgICAgICAgICAgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKy0gICAgICAgICAgICAgICAgICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKysJCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCisrCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKysJCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisgIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKyAjZW5kaWYKKyAKK0BAIC0zOTM4LDcgKzQxMTgsNyBAQAorICAgaW50IGk7CisgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKy0gICAgICAgIHx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorKwl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKyAgICAgICBleGl0KDIpOworICAgZXhpdCAoMCk7CisgfQorQEAgLTM5NjMsNyArNDE0Myw3IEBACisgKCBleGl0ICRhY19zdGF0dXMgKQorIGFjX2N2X2hlYWRlcl9zdGRjPW5vCisgZmkKKy1ybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZmkKKyBmaQorQEAgLTM5OTksNyArNDE3OSw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00MDEwLDExICs0MTg5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDAyNyw3ICs0MjE1LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC00MDM1LDcgKzQyMjMsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQwNTMsNiArNDI0MCw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC00MDcyLDMzICs0MjYwLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisrICAgIDs7CisrICBubzp5ZXM6KiApCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCistICAgIDs7CistICBubzp5ZXMgKQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNDEwOSw3ICs0Mjk2LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC00MTMxLDcgKzQzMTgsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDE1MSwxMSArNDMzNywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQxNjgsNyArNDM2Myw3IEBACisgCisgYWNfY3ZfdHlwZV9tb2RlX3Q9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX21vZGVfdCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfbW9kZV90IiA+JjYKK0BAIC00MTg4LDcgKzQzODMsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDIwOCwxMSArNDQwMiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQyMjUsNyArNDQyOCw3IEBACisgCisgYWNfY3ZfdHlwZV9vZmZfdD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfb2ZmX3QiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX29mZl90IiA+JjYKK0BAIC00MjQ1LDcgKzQ0NDgsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDI2NSwxMSArNDQ2NywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQyODIsNyArNDQ5Myw3IEBACisgCisgYWNfY3ZfdHlwZV9waWRfdD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfcGlkX3QiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3BpZF90IiA+JjYKK0BAIC00MzAyLDcgKzQ1MTMsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDMyOSwxMSArNDUzOSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQzNDYsNyArNDU2NSw3IEBACisgCisgYWNfY3ZfdHlwZV9zaWduYWw9aW50CisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zaWduYWwiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3NpZ25hbCIgPiY2CitAQCAtNDM2Miw3ICs0NTgxLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQzODIsMTEgKzQ2MDAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00Mzk5LDcgKzQ2MjYsNyBAQAorIAorIGFjX2N2X3R5cGVfc2l6ZV90PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zaXplX3QiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3NpemVfdCIgPiY2CitAQCAtNDQxOSw3ICs0NjQ2LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQ0NjgsMTEgKzQ2OTQsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00NDg1LDcgKzQ3MjAsNyBAQAorIAorIGFjX2N2X2hlYWRlcl9zdGRib29sX2g9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYm9vbF9oIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPiY2CitAQCAtNDQ5NSw3ICs0NzMwLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQ1MTUsMTEgKzQ3NDksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00NTMyLDcgKzQ3NzUsNyBAQAorIAorIGFjX2N2X3R5cGVfX0Jvb2w9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX19Cb29sIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9fQm9vbCIgPiY2CitAQCAtNDU4OSw3ICs0ODMyLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQ2MDAsMTEgKzQ4NDIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00NjE3LDcgKzQ4NjgsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTQ2MjUsNyArNDg3Niw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDY0Myw2ICs0ODkzLDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTQ2NjIsMzMgKzQ5MTMsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC00Njk5LDcgKzQ5NDksNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTQ3MzMsNyArNDk4Myw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00NzQ0LDExICs0OTkzLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDc2MSw3ICs1MDE5LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC00NzY5LDcgKzUwMjcsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQ3ODcsNiArNTA0NCw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC00ODA2LDMzICs1MDY0LDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNDg0Myw3ICs1MTAwLDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC00ODY1LDcgKzUxMjIsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDg4NiwxMSArNTE0MiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQ5MDMsNyArNTE2OCw3IEBACisgCisgYWNfY3ZfaGVhZGVyX3RpbWU9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfdGltZSIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl90aW1lIiA+JjYKK0BAIC00OTMzLDcgKzUxOTgsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDk2NCwxMSArNTIyOCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQ5ODEsNyArNTI1NCw3IEBACisgCisgZnVfY3Zfc3lzX3N0cnVjdF91dGltYnVmPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZnVfY3Zfc3lzX3N0cnVjdF91dGltYnVmIiA+JjUKK0BAIC01MDA1LDcgKzUyNzgsNiBAQAorICAgYWNfY3ZfZnVuY19jbG9zZWRpcl92b2lkPXllcworIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01MDQ1LDcgKzUzMTcsNyBAQAorICggZXhpdCAkYWNfc3RhdHVzICkKKyBhY19jdl9mdW5jX2Nsb3NlZGlyX3ZvaWQ9eWVzCisgZmkKKy1ybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19jbG9zZWRpcl92b2lkIiA+JjUKK0BAIC01MDc2LDcgKzUzNDgsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTA4NywxMSArNTM1OCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTUxMDQsNyArNTM4NCw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNTExMiw3ICs1MzkyLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01MTMwLDYgKzU0MDksNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNTE0OSwzMyArNTQyOSwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTUxODYsNyArNTQ2NSw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNTIyMCw3ICs1NDk5LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTUyMzEsMTEgKzU1MDksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01MjQ4LDcgKzU1MzUsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTUyNTYsNyArNTU0Myw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTI3NCw2ICs1NTYwLDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTUyOTMsMzMgKzU1ODAsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC01MzMwLDcgKzU2MTYsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTUzNjQsNyArNTY1MCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01Mzc1LDExICs1NjYwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTM5Miw3ICs1Njg2LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC01NDAwLDcgKzU2OTQsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTU0MTgsNiArNTcxMSw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC01NDM3LDMzICs1NzMxLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNTQ3NCw3ICs1NzY3LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC01NDk3LDcgKzU3OTAsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTUxNywxMSArNTgwOSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTU1MzQsNyArNTgzNSw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX2dldGVudj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9nZXRlbnYiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZ2V0ZW52IiA+JjYKK0BAIC01NTYyLDcgKzU4NjMsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTU4MiwxMSArNTg4MiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTU1OTksNyArNTkwOCw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX21hbGxvYz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9tYWxsb2MiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfbWFsbG9jIiA+JjYKK0BAIC01NjI4LDcgKzU5MzcsNiBAQAorIGVsc2UKKyAKKyAgICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01NjQ3LDExICs1OTU1LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTY2NCw3ICs1OTgxLDcgQEAKKyAKKyBhY19jdl93aW5fb3JfZG9zPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfd2luX29yX2RvcyIgPiY1CitAQCAtNTcxNCw3ICs2MDMxLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTU3MjUsMTEgKzYwNDEsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01NzQyLDcgKzYwNjcsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTU3NTAsNyArNjA3NSw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTc2OCw2ICs2MDkyLDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTU3ODcsMzMgKzYxMTIsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC01ODI0LDcgKzYxNDgsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTU4NzIsNyArNjE5Niw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01OTA1LDExICs2MjI4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01OTIyLDcgKzYyNTQsOCBAQAorIAorIGptX2N2X3N0cnVjdF9kaXJlbnRfZF9pbm89bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyAKKyBmaQorQEAgLTYwMTEsMjEgKzYzNDQsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtNjA1NiwxMSArNjM5NiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjA3Myw3ICs2NDIyLDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC02MTI2LDIxICs2NDc2LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTYxNzEsMTEgKzY1MjgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTYxODgsNyArNjU1NCw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtNjIwMywyMSArNjU3MCwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgX2RvcHJudCB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIF9kb3BybnQuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSBfZG9wcm50IGlubm9jdW91c19fZG9wcm50CisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIF9kb3BybnQgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmIF9kb3BybnQKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC02MjQ4LDExICs2NjIyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02MjY1LDcgKzY2NDgsOCBAQAorIAorIGFjX2N2X2Z1bmNfX2RvcHJudD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfX2RvcHJudCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfX2RvcHJudCIgPiY2CitAQCAtNjI4OCwxMyArNjY3MiwxMiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0KKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorIGludAorIG1haW4gKCkKKyB7CitAQCAtNjMwNSwxMSArNjY4OCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjMyMiwxMiArNjcxNCwyMCBAQAorIAorIGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZXJyb3JfYXRfbGluZSIgPiY2CisgaWYgdGVzdCAkYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUgPSBubzsgdGhlbgorLSAgTElCT0JKUz0iJExJQk9CSlMgZXJyb3IuJGFjX29iamV4dCIKKysgIGNhc2UgJExJQk9CSlMgaW4KKysgICAgImVycm9yLiRhY19vYmpleHQiICAgfCBcCisrICAqIiBlcnJvci4kYWNfb2JqZXh0IiAgIHwgXAorKyAgICAiZXJyb3IuJGFjX29iamV4dCAiKiB8IFwKKysgICoiIGVycm9yLiRhY19vYmpleHQgIiogKSA7OworKyAgKikgTElCT0JKUz0iJExJQk9CSlMgZXJyb3IuJGFjX29iamV4dCIgOzsKKytlc2FjCisrCisgZmkKKyAKKyAKK0BAIC02MzQzLDIxICs2NzQzLDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTYzODgsMTEgKzY3OTUsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTY0MDUsNyArNjgyMSw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtNjQyMyw3ICs2ODQwLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTY0NDMsMTEgKzY4NTksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02NDYwLDcgKzY4ODUsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvciIgPiY2CitAQCAtNjQ4Niw3ICs2OTExLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTY1MDYsMTEgKzY5MzAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02NTIzLDcgKzY5NTYsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvcl9yPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yX3IiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3JfciIgPiY2CitAQCAtNjU1MywyMSArNjk4NiwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC02NTk4LDExICs3MDM4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02NjE1LDcgKzcwNjQsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTY2MzYsNyArNzA4Niw2IEBACisgICAgIGFjX2N2X2Z1bmNfc3RyZXJyb3Jfcl9jaGFyX3A9bm8KKyAgICAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yX3IgPSB5ZXM7IHRoZW4KKyAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNjY1NywxMSArNzEwNiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTY2NzMsNyArNzEzMSw3IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBlbHNlCisgICAgICAgIyBzdHJlcnJvcl9yIGlzIG5vdCBkZWNsYXJlZC4gIENob29zZSBiZXR3ZWVuCisgICAgICAgIyBzeXN0ZW1zIHRoYXQgaGF2ZSByZWxhdGl2ZWx5IGluYWNjZXNzaWJsZSBkZWNsYXJhdGlvbnMgZm9yIHRoZQorQEAgLTY2ODUsNyArNzE0Myw2IEBACisgICA6CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTY3MjEsNyArNzE3OCw3IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorICAgICBmaQorIAorQEAgLTY3NDksMjEgKzcyMDYsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtNjc5NCwxMSArNzI1OCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjgxMSw3ICs3Mjg0LDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC02ODIxLDcgKzcyOTUsMTQgQEAKKyBfQUNFT0YKKyAKKyBlbHNlCistICBMSUJPQkpTPSIkTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0IgorKyAgY2FzZSAkTElCT0JKUyBpbgorKyAgICAiJGFjX2Z1bmMuJGFjX29iamV4dCIgICB8IFwKKysgICoiICRhY19mdW5jLiRhY19vYmpleHQiICAgfCBcCisrICAgICIkYWNfZnVuYy4kYWNfb2JqZXh0ICIqIHwgXAorKyAgKiIgJGFjX2Z1bmMuJGFjX29iamV4dCAiKiApIDs7CisrICAqKSBMSUJPQkpTPSIkTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0IiA7OworK2VzYWMKKysKKyBmaQorIGRvbmUKKyAKK0BAIC02ODU1LDcgKzczMzYsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNjg2NiwxMSArNzM0NiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTY4ODMsNyArNzM3Miw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNjg5MSw3ICs3MzgwLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC02OTA5LDYgKzczOTcsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNjkyOCwzMyArNzQxNywzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTY5NjUsNyArNzQ1Myw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNjk4OSw3ICs3NDc3LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTcwNTMsMjEgKzc1NDAsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtNzA5OCwxMSArNzU5MiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNzExNSw3ICs3NjE4LDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC03MTI1LDcgKzc2MjksMTQgQEAKKyBfQUNFT0YKKyAKKyBlbHNlCistICBMSUJPQkpTPSIkTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0IgorKyAgY2FzZSAkTElCT0JKUyBpbgorKyAgICAiJGFjX2Z1bmMuJGFjX29iamV4dCIgICB8IFwKKysgICoiICRhY19mdW5jLiRhY19vYmpleHQiICAgfCBcCisrICAgICIkYWNfZnVuYy4kYWNfb2JqZXh0ICIqIHwgXAorKyAgKiIgJGFjX2Z1bmMuJGFjX29iamV4dCAiKiApIDs7CisrICAqKSBMSUJPQkpTPSIkTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0IiA7OworK2VzYWMKKysKKyBmaQorIGRvbmUKKyAKK0BAIC03MTYzLDcgKzc2NzQsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzE3NCwxMSArNzY4NCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTcxOTEsNyArNzcxMCw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNzE5OSw3ICs3NzE4LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03MjE3LDYgKzc3MzUsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNzIzNiwzMyArNzc1NSwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTcyNzMsNyArNzc5MSw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNzI5Nyw3ICs3ODE1LDYgQEAKKyAgIGFjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbD1ubworIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03MzM3LDcgKzc4NTQsNyBAQAorICggZXhpdCAkYWNfc3RhdHVzICkKKyBhY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9bm8KKyBmaQorLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX21hbGxvY18wX25vbm51bGwiID4mNQorQEAgLTczNTMsNyArNzg3MCwxNCBAQAorICNkZWZpbmUgSEFWRV9NQUxMT0MgMAorIF9BQ0VPRgorIAorLSAgIExJQk9CSlM9IiRMSUJPQkpTIG1hbGxvYy4kYWNfb2JqZXh0IgorKyAgIGNhc2UgJExJQk9CSlMgaW4KKysgICAgIm1hbGxvYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgKiIgbWFsbG9jLiRhY19vYmpleHQiICAgfCBcCisrICAgICJtYWxsb2MuJGFjX29iamV4dCAiKiB8IFwKKysgICoiIG1hbGxvYy4kYWNfb2JqZXh0ICIqICkgOzsKKysgICopIExJQk9CSlM9IiRMSUJPQkpTIG1hbGxvYy4kYWNfb2JqZXh0IiA7OworK2VzYWMKKysKKyAKKyBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorICNkZWZpbmUgbWFsbG9jIHJwbF9tYWxsb2MKK0BAIC03Mzg4LDcgKzc5MTIsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzM5OSwxMSArNzkyMiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTc0MTYsNyArNzk0OCw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNzQyNCw3ICs3OTU2LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03NDQyLDYgKzc5NzMsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNzQ2MSwzMyArNzk5MywzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTc0OTgsNyArODAyOSw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNzUyMiw3ICs4MDUzLDYgQEAKKyAgIGFjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9bm8KKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzU2Miw3ICs4MDkyLDcgQEAKKyAoIGV4aXQgJGFjX3N0YXR1cyApCisgYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbD1ubworIGZpCistcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGwiID4mNQorQEAgLTc1NzgsNyArODEwOCwxNCBAQAorICNkZWZpbmUgSEFWRV9SRUFMTE9DIDAKKyBfQUNFT0YKKyAKKy0gICBMSUJPQkpTPSIkTElCT0JKUyByZWFsbG9jLiRhY19vYmpleHQiCisrICAgY2FzZSAkTElCT0JKUyBpbgorKyAgICAicmVhbGxvYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgKiIgcmVhbGxvYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgICAicmVhbGxvYy4kYWNfb2JqZXh0ICIqIHwgXAorKyAgKiIgcmVhbGxvYy4kYWNfb2JqZXh0ICIqICkgOzsKKysgICopIExJQk9CSlM9IiRMSUJPQkpTIHJlYWxsb2MuJGFjX29iamV4dCIgOzsKKytlc2FjCisrCisgCisgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyAjZGVmaW5lIHJlYWxsb2MgcnBsX3JlYWxsb2MKK0BAIC03NjE5LDcgKzgxNTYsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzYzMCwxMSArODE2NiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTc2NDcsNyArODE5Miw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNzY1NSw3ICs4MjAwLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03NjczLDYgKzgyMTcsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNzY5MiwzMyArODIzNywzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTc3MjksNyArODI3Myw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNzc3Miw3ICs4MzE2LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTc3ODMsMTEgKzgzMjYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03ODAwLDcgKzgzNTIsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTc4MDgsNyArODM2MCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzgyNiw2ICs4Mzc3LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTc4NDUsMzMgKzgzOTcsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC03ODgyLDcgKzg0MzMsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTc5MTYsNyArODQ2Nyw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03OTI3LDExICs4NDc3LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNzk0NCw3ICs4NTAzLDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC03OTUyLDcgKzg1MTEsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTc5NzAsNiArODUyOCw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC03OTg5LDMzICs4NTQ4LDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtODAyNiw3ICs4NTg0LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC04MDUzLDIxICs4NjExLDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTgwOTgsMTEgKzg2NjMsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTgxMTUsNyArODY4OSw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtODEzOSwyMSArODcxNCwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC04MTg0LDExICs4NzY2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04MjAxLDcgKzg3OTIsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTgyNDEsNyArODgzMyw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC04MjU5LDExICs4ODUwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODI3Niw3ICs4ODc2LDcgQEAKKyAKKyBhY19jdl90eXBlX21ic3RhdGVfdD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfbWJzdGF0ZV90IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9tYnN0YXRlX3QiID4mNgorQEAgLTgzMDAsNyArODkwMCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC04MzE3LDExICs4OTE2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04MzM0LDcgKzg5NDIsOCBAQAorIAorIGptX2N2X2Z1bmNfbWJydG93Yz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGptX2N2X2Z1bmNfbWJydG93YyIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGptX2N2X2Z1bmNfbWJydG93YyIgPiY2CitAQCAtODM0OCw2OSArODk1Nyw0NjUgQEAKKyAKKyAKKyAKKy0KKy0KKy0KKy0KKy1mb3IgYWNfZnVuYyBpbiBwYXRoY29uZgorLWRvCistYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKKy1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCisrICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgZnJlZSBpcyBkZWNsYXJlZCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGZyZWUgaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl9oYXZlX2RlY2xfZnJlZStzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCistICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCistICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCistI2lmZGVmIF9fU1REQ19fCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+CistI2VuZGlmCistLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCisteworLSNlbmRpZgorLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKy0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLWNoYXIgJGFjX2Z1bmMgKCk7CistLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKy0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKKy1jaG9rZSBtZQorLSNlbHNlCistY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7CistI2VuZGlmCistI2lmZGVmIF9fY3BsdXNwbHVzCistfQorLSNlbmRpZgorLQorKyRhY19pbmNsdWRlc19kZWZhdWx0CisgaW50CisgbWFpbiAoKQorIHsKKy1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKKysjaWZuZGVmIGZyZWUKKysgIGNoYXIgKnAgPSAoY2hhciAqKSBmcmVlOworKyNlbmRpZgorKworICAgOworICAgcmV0dXJuIDA7CisgfQorIF9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIGFjX2N2X2hhdmVfZGVjbF9mcmVlPXllcworK2Vsc2UKKysgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworK2FjX2N2X2hhdmVfZGVjbF9mcmVlPW5vCisrZmkKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKytlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2ZyZWUiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZnJlZSIgPiY2CisraWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX2ZyZWUgPSB5ZXM7IHRoZW4KKysKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX0RFQ0xfRlJFRSAxCisrX0FDRU9GCisrCisrCisrZWxzZQorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9ERUNMX0ZSRUUgMAorK19BQ0VPRgorKworKworK2ZpCisrCisrCisrCisrCisrCisrICA6CisrCisrCisrCisrCisrCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0ZGJvb2wuaCB0aGF0IGNvbmZvcm1zIHRvIEM5OSIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5Li4uICRFQ0hPX0MiID4mNgorK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCtzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworKwkgICNpbmNsdWRlIDxzdGRib29sLmg+CisrCSAgI2lmbmRlZiBib29sCisrCSAgICJlcnJvcjogYm9vbCBpcyBub3QgZGVmaW5lZCIKKysJICAjZW5kaWYKKysJICAjaWZuZGVmIGZhbHNlCisrCSAgICJlcnJvcjogZmFsc2UgaXMgbm90IGRlZmluZWQiCisrCSAgI2VuZGlmCisrCSAgI2lmIGZhbHNlCisrCSAgICJlcnJvcjogZmFsc2UgaXMgbm90IDAiCisrCSAgI2VuZGlmCisrCSAgI2lmbmRlZiB0cnVlCisrCSAgICJlcnJvcjogZmFsc2UgaXMgbm90IGRlZmluZWQiCisrCSAgI2VuZGlmCisrCSAgI2lmIHRydWUgIT0gMQorKwkgICAiZXJyb3I6IHRydWUgaXMgbm90IDEiCisrCSAgI2VuZGlmCisrCSAgI2lmbmRlZiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZAorKwkgICAiZXJyb3I6IF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkIGlzIG5vdCBkZWZpbmVkIgorKwkgICNlbmRpZgorKworKwkgIHN0cnVjdCBzIHsgX0Jvb2wgczogMTsgX0Jvb2wgdDsgfSBzOworKworKwkgIGNoYXIgYVt0cnVlID09IDEgPyAxIDogLTFdOworKwkgIGNoYXIgYltmYWxzZSA9PSAwID8gMSA6IC0xXTsKKysJICBjaGFyIGNbX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgPT0gMSA/IDEgOiAtMV07CisrCSAgY2hhciBkWyhib29sKSAtMC41ID09IHRydWUgPyAxIDogLTFdOworKwkgIGJvb2wgZSA9ICZzOworKwkgIGNoYXIgZlsoX0Jvb2wpIC0wLjAgPT0gZmFsc2UgPyAxIDogLTFdOworKwkgIGNoYXIgZ1t0cnVlXTsKKysJICBjaGFyIGhbc2l6ZW9mIChfQm9vbCldOworKwkgIGNoYXIgaVtzaXplb2Ygcy50XTsKKysKKytpbnQKKyttYWluICgpCisreworKyByZXR1cm4gIWEgKyAhYiArICFjICsgIWQgKyAhZSArICFmICsgIWcgKyAhaCArICFpOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIGFjX2N2X2hlYWRlcl9zdGRib29sX2g9eWVzCisrZWxzZQorKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD1ubworK2ZpCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisrZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRib29sX2giID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfc3RkYm9vbF9oIiA+JjYKKysgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIF9Cb29sIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBfQm9vbC4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2FjX2N2X3R5cGVfX0Jvb2wrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorK2ludAorK21haW4gKCkKKyt7CisraWYgKChfQm9vbCAqKSAwKQorKyAgcmV0dXJuIDA7CisraWYgKHNpemVvZiAoX0Jvb2wpKQorKyAgcmV0dXJuIDA7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgYWNfY3ZfdHlwZV9fQm9vbD15ZXMKKytlbHNlCisrICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKythY19jdl90eXBlX19Cb29sPW5vCisrZmkKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKytlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9fQm9vbCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfX0Jvb2wiID4mNgorK2lmIHRlc3QgJGFjX2N2X3R5cGVfX0Jvb2wgPSB5ZXM7IHRoZW4KKysKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX19CT09MIDEKKytfQUNFT0YKKysKKysKKytmaQorKworKyAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRib29sX2ggPSB5ZXM7IHRoZW4KKysKKytjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9TVERCT09MX0ggMQorK19BQ0VPRgorKworKyAgIGZpCisrCisrICA6CisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBuYW5vc2Vjb25kIHRpbWVzdGFtcHMgaW4gc3RydWN0IHN0YXQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5hbm9zZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdC4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2FjX2N2X3N0YXRfbnNlYytzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworKwkgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysJICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysJICAjaW5jbHVkZSA8dW5pc3RkLmg+CisrCSAgc3RydWN0IHN0YXQgc3Q7CisrCisraW50CisrbWFpbiAoKQorK3sKKysgcmV0dXJuIHN0LnN0X2F0aW1lbnNlYyArIHN0LnN0X210aW1lbnNlYyArIHN0LnN0X2N0aW1lbnNlYzsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgYWNfY3Zfc3RhdF9uc2VjPXllcworK2Vsc2UKKysgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworK2FjX2N2X3N0YXRfbnNlYz1ubworK2ZpCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKworK2ZpCisrZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3N0YXRfbnNlYyIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3N0YXRfbnNlYyIgPiY2CisrICAgaWYgdGVzdCAkYWNfY3Zfc3RhdF9uc2VjID0geWVzOyB0aGVuCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKysjZGVmaW5lIEhBVkVfU1RBVF9OU0VDIDEKKytfQUNFT0YKKysKKysgICBmaQorKworKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbmFub3NlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0IiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBuYW5vc2Vjb25kIHRpbWVzdGFtcHMgaW4gc3RydWN0IHN0YXQuLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl9zdGF0X3RpbWV2YWwrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKysJICAjaW5jbHVkZSA8dGltZS5oPgorKwkgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysJICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysJICAjaW5jbHVkZSA8dW5pc3RkLmg+CisrCSAgc3RydWN0IHN0YXQgc3Q7CisrCisraW50CisrbWFpbiAoKQorK3sKKysgcmV0dXJuIHN0LnN0X2F0aW0udHZfbnNlYyArIHN0LnN0X210aW0udHZfbnNlYyArIHN0LnN0X2N0aW0udHZfbnNlYzsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICBhY19jdl9zdGF0X3RpbWV2YWw9eWVzCisrZWxzZQorKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrYWNfY3Zfc3RhdF90aW1ldmFsPW5vCisrZmkKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisrZmkKKytlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc3RhdF90aW1ldmFsIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3Zfc3RhdF90aW1ldmFsIiA+JjYKKysgICBpZiB0ZXN0ICRhY19jdl9zdGF0X3RpbWV2YWwgPSB5ZXM7IHRoZW4KKysKKytjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9TVEFUX1RJTUVWQUwgMQorK19BQ0VPRgorKworKyAgIGZpCisrCisrCisrCisrCisrCisrZm9yIGFjX2Z1bmMgaW4gcGF0aGNvbmYKKytkbworK2FzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCisrZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2CisraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisrLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKysgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworKyNpZmRlZiBfX1NURENfXworKyMgaW5jbHVkZSA8bGltaXRzLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgPGFzc2VydC5oPgorKyNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIgorK3sKKysjZW5kaWYKKysvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisrICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKytjaGFyICRhY19mdW5jICgpOworKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKysgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKysgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisrI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCisrY2hva2UgbWUKKysjZWxzZQorK2NoYXIgKCpmKSAoKSA9ICRhY19mdW5jOworKyNlbmRpZgorKyNpZmRlZiBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysKKytpbnQKKyttYWluICgpCisreworK3JldHVybiBmICE9ICRhY19mdW5jOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg0MjMsNyArOTQyOCw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtODQ1NCw3ICs5NDYwLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTg0NjUsMTEgKzk0NzAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04NDgyLDcgKzk0OTYsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTg0OTAsNyArOTUwNCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODUwOCw2ICs5NTIxLDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTg1MjcsMzMgKzk1NDEsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC04NTY0LDcgKzk1NzcsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTg1ODcsNyArOTYwMCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC04NjA3LDExICs5NjE5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODYyNCw3ICs5NjQ1LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZnJlZT1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mcmVlIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2ZyZWUiID4mNgorQEAgLTg2NDgsNyArOTY2OSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC04NjY4LDExICs5Njg4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODY4NSw3ICs5NzE0LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZ2V0ZW52PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2dldGVudiIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9nZXRlbnYiID4mNgorQEAgLTg3MDksNyArOTczOCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC04NzI5LDExICs5NzU3LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODc0Niw3ICs5NzgzLDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfbWFsbG9jPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX21hbGxvYyIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9tYWxsb2MiID4mNgorQEAgLTg3NzAsNyArOTgwNyw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC04NzkwLDExICs5ODI2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODgwNyw3ICs5ODUyLDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfbWt0ZW1wPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX21rdGVtcCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9ta3RlbXAiID4mNgorQEAgLTg4NDksMjEgKzk4OTQsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtODg5NCwxMSArOTk0NiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODkxMSw3ICs5OTcyLDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC04OTM0LDIxICs5OTk2LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTg5NzksMTEgKzEwMDQ4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04OTk2LDcgKzEwMDc0LDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC05MDA2LDcgKzEwMDg1LDE0IEBACisgX0FDRU9GCisgCisgZWxzZQorLSAgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIKKysgIGNhc2UgJExJQk9CSlMgaW4KKysgICAgIiRhY19mdW5jLiRhY19vYmpleHQiICAgfCBcCisrICAqIiAkYWNfZnVuYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgICAiJGFjX2Z1bmMuJGFjX29iamV4dCAiKiB8IFwKKysgICoiICRhY19mdW5jLiRhY19vYmpleHQgIiogKSA7OworKyAgKikgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIgOzsKKytlc2FjCisrCisgZmkKKyBkb25lCisgCitAQCAtOTAxOSw3ICsxMDEwNSw2IEBACisgICB3aGlsZSA6OyBkbworICAgYWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2U9bm8KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05MDM2LDExICsxMDEyMSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTkwNTIsOSArMTAxNDYsOCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05MDcyLDExICsxMDE2NSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTkwODgsNyArMTAxOTAsNyBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGJyZWFrCisgZG9uZQorIGZpCitAQCAtOTExMiw3ICsxMDIxNCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05MTI5LDExICsxMDIzMCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtOTE0Niw3ICsxMDI1Niw4IEBACisgCisgYWNfY3ZfZnVuY19mc2Vla289bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2ZzZWVrbyIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfZnNlZWtvIiA+JjYKK0BAIC05MTY1LDcgKzEwMjc2LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTkxODUsMTEgKzEwMjk1LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtOTIwMiw3ICsxMDMyMSw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX2NsZWFyZXJyX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2NsZWFyZXJyX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2NsZWFyZXJyX3VubG9ja2VkIiA+JjYKK0BAIC05MjMwLDcgKzEwMzQ5LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTkyNTAsMTEgKzEwMzY4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtOTI2Nyw3ICsxMDM5NCw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX2Zlb2ZfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZmVvZl91bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mZW9mX3VubG9ja2VkIiA+JjYKK0BAIC05Mjk1LDcgKzEwNDIyLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTkzMTUsMTEgKzEwNDQxLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtOTMzMiw3ICsxMDQ2Nyw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX2ZlcnJvcl91bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mZXJyb3JfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZmVycm9yX3VubG9ja2VkIiA+JjYKK0BAIC05MzYwLDcgKzEwNDk1LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTkzODAsMTEgKzEwNTE0LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtOTM5Nyw3ICsxMDU0MCw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX2ZmbHVzaF91bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mZmx1c2hfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZmZsdXNoX3VubG9ja2VkIiA+JjYKK0BAIC05NDI1LDcgKzEwNTY4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTk0NDUsMTEgKzEwNTg3LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtOTQ2Miw3ICsxMDYxMyw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX2ZnZXRzX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2ZnZXRzX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2ZnZXRzX3VubG9ja2VkIiA+JjYKK0BAIC05NDkwLDcgKzEwNjQxLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTk1MTAsMTEgKzEwNjYwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtOTUyNyw3ICsxMDY4Niw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX2ZwdXRjX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2ZwdXRjX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2ZwdXRjX3VubG9ja2VkIiA+JjYKK0BAIC05NTU1LDcgKzEwNzE0LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTk1NzUsMTEgKzEwNzMzLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtOTU5Miw3ICsxMDc1OSw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX2ZwdXRzX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2ZwdXRzX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2ZwdXRzX3VubG9ja2VkIiA+JjYKK0BAIC05NjIwLDcgKzEwNzg3LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTk2NDAsMTEgKzEwODA2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtOTY1Nyw3ICsxMDgzMiw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX2ZyZWFkX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2ZyZWFkX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2ZyZWFkX3VubG9ja2VkIiA+JjYKK0BAIC05Njg1LDcgKzEwODYwLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTk3MDUsMTEgKzEwODc5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtOTcyMiw3ICsxMDkwNSw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX2Z3cml0ZV91bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9md3JpdGVfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZndyaXRlX3VubG9ja2VkIiA+JjYKK0BAIC05NzUwLDcgKzEwOTMzLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTk3NzAsMTEgKzEwOTUyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtOTc4Nyw3ICsxMDk3OCw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX2dldGNfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZ2V0Y191bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9nZXRjX3VubG9ja2VkIiA+JjYKK0BAIC05ODE1LDcgKzExMDA2LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTk4MzUsMTEgKzExMDI1LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtOTg1Miw3ICsxMTA1MSw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX2dldGNoYXJfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZ2V0Y2hhcl91bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9nZXRjaGFyX3VubG9ja2VkIiA+JjYKK0BAIC05ODgwLDcgKzExMDc5LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTk5MDAsMTEgKzExMDk4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtOTkxNyw3ICsxMTEyNCw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX3B1dGNfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfcHV0Y191bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9wdXRjX3VubG9ja2VkIiA+JjYKK0BAIC05OTQ1LDcgKzExMTUyLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTk5NjUsMTEgKzExMTcxLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtOTk4Miw3ICsxMTE5Nyw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX3B1dGNoYXJfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfcHV0Y2hhcl91bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9wdXRjaGFyX3VubG9ja2VkIiA+JjYKK0BAIC0xMDA3NSw3ICsxMTI5MCw2IEBACisgICBhY19jdl9mdW5jX2Nsb3NlZGlyX3ZvaWQ9eWVzCisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwMTE1LDcgKzExMzI5LDcgQEAKKyAoIGV4aXQgJGFjX3N0YXR1cyApCisgYWNfY3ZfZnVuY19jbG9zZWRpcl92b2lkPXllcworIGZpCistcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZCIgPiY1CitAQCAtMTAxNDYsNyArMTEzNjAsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTAxNTcsMTEgKzExMzcwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTAxNzQsNyArMTEzOTYsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTEwMTgyLDcgKzExNDA0LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xMDIwMCw2ICsxMTQyMSw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC0xMDIxOSwzMyArMTE0NDEsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC0xMDI1Niw3ICsxMTQ3Nyw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtMTAyNzcsNyArMTE0OTgsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTAzMDAsMTEgKzExNTIwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xMDMxNyw3ICsxMTU0Niw4IEBACisgCisgYWNfY3ZfZnVuY19zZXRtb2RlX2Rvcz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfc2V0bW9kZV9kb3MiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX3NldG1vZGVfZG9zIiA+JjYKK0BAIC0xMDMzOCwyMSArMTE1NjgsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtMTAzODMsMTEgKzExNjIwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xMDQwMCw3ICsxMTY0Niw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtMTA0MTUsMjEgKzExNjYyLDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSBfZG9wcm50IHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgX2RvcHJudC4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lIF9kb3BybnQgaW5ub2N1b3VzX19kb3BybnQKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgX2RvcHJudCAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgX2RvcHJudAorKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTEwNDYwLDExICsxMTcxNCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTA0NzcsNyArMTE3NDAsOCBAQAorIAorIGFjX2N2X2Z1bmNfX2RvcHJudD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfX2RvcHJudCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfX2RvcHJudCIgPiY2CitAQCAtMTA1MDMsMjEgKzExNzY3LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTEwNTQ4LDExICsxMTgxOSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTA1NjUsNyArMTE4NDUsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTEwNTg1LDcgKzExODY2LDYgQEAKKyAgIHBhdGNoX2N2X21rZGlyX3Rha2VzX29uZV9hcmc9bm8KKyAgICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX21rZGlyID0geWVzOyB0aGVuCisgICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTA2MDUsMTEgKzExODg1LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTA2MjEsNyArMTE5MTAsNiBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTA2NDEsMTEgKzExOTI5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTA2NTgsMTAgKzExOTU1LDEwIEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgIGZpCisgCisgCitAQCAtMTA2ODYsNyArMTE5ODMsNiBAQAorIGVsc2UKKyAKKyAgICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xMDcwNSwxMSArMTIwMDEsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xMDcyMiw3ICsxMjAyNyw3IEBACisgCisgYWNfY3Zfd2luX29yX2Rvcz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3dpbl9vcl9kb3MiID4mNQorQEAgLTEwODM0LDEzICsxMjEzOSwxMyBAQAorICAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzIChkb3VibGUtcXVvdGUKKyAgICAgICAjIHN1YnN0aXR1dGlvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcKS4KKyAgICAgICBzZWQgLW4gXAorLSAgICAgICAgInMvJy8nXFxcXCcnL2c7CistICAgIAkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKysJInMvJy8nXFxcXCcnL2c7CisrCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorICAgICAgIDs7CisgICAgICopCisgICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKyAgICAgICBzZWQgLW4gXAorLSAgICAgICAgInMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9XFwyL3AiCisrCSJzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPVxcMi9wIgorICAgICAgIDs7CisgICAgIGVzYWM7CisgfSB8CitAQCAtMTA4NzAsMTMgKzEyMTc1LDEzIEBACisgIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKKyAjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCisgaWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KKy0gIGFjX3Zwc3ViPScvXlsgCV0qVlBBVEhbIAldKj0veworKyAgYWNfdnBzdWI9Jy9eWwkgXSpWUEFUSFsJIF0qPS97Cisgcy86KlwkKHNyY2Rpcik6Ki86LzsKKyBzLzoqXCR7c3JjZGlyfToqLzovOworIHMvOipAc3JjZGlyQDoqLzovOworLXMvXlwoW149XSo9WyAJXSpcKToqL1wxLzsKKytzL15cKFtePV0qPVsJIF0qXCk6Ki9cMS87Cisgcy86KiQvLzsKKy1zL15bXj1dKj1bIAldKiQvLzsKKytzL15bXj1dKj1bCSBdKiQvLzsKKyB9JworIGZpCisgCitAQCAtMTA4ODcsNyArMTIxOTIsNyBAQAorIGZvciBhY19pIGluIDogJExJQk9CSlM7IGRvIHRlc3QgIngkYWNfaSIgPSB4OiAmJiBjb250aW51ZQorICAgIyAxLiBSZW1vdmUgdGhlIGV4dGVuc2lvbiwgYW5kICRVIGlmIGFscmVhZHkgaW5zdGFsbGVkLgorICAgYWNfaT1gZWNobyAiJGFjX2kiIHwKKy0gICAgICAgICBzZWQgJ3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLydgCisrCSBzZWQgJ3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLydgCisgICAjIDIuIEFkZCB0aGVtLgorICAgYWNfbGlib2Jqcz0iJGFjX2xpYm9ianMgJGFjX2lcJFUuJGFjX29iamV4dCIKKyAgIGFjX2x0bGlib2Jqcz0iJGFjX2x0bGlib2JqcyAkYWNfaSInJFUubG8nCitAQCAtMTA5MzEsOSArMTIyMzYsMTAgQEAKKyBlbGlmIHRlc3QgLW4gIiR7QkFTSF9WRVJTSU9OK3NldH0iICYmIChzZXQgLW8gcG9zaXgpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgc2V0IC1vIHBvc2l4CisgZmkKKytEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisgCisgIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCistaWYgKEZPTz1GT087IHVuc2V0IEZPTykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisraWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICBhc191bnNldD11bnNldAorIGVsc2UKKyAgIGFzX3Vuc2V0PWZhbHNlCitAQCAtMTA5NTIsNyArMTIyNTgsNyBAQAorICAgTENfTUVBU1VSRU1FTlQgTENfTUVTU0FHRVMgTENfTU9ORVRBUlkgTENfTkFNRSBMQ19OVU1FUklDIExDX1BBUEVSIFwKKyAgIExDX1RFTEVQSE9ORSBMQ19USU1FCisgZG8KKy0gIGlmIChzZXQgK3g7IHRlc3QgLW4gImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCisrICBpZiAoc2V0ICt4OyB0ZXN0IC16ICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgorICAgICBldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIKKyAgIGVsc2UKKyAgICAgJGFzX3Vuc2V0ICRhc192YXIKK0BAIC0xMTEzMSwxNiArMTI0MzcsMTcgQEAKKyBpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgICBhc19ta2Rpcl9wPToKKyBlbHNlCisrICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorICAgYXNfbWtkaXJfcD1mYWxzZQorIGZpCisgCisgYXNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorIAorICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KKy1hc190cl9jcHA9InNlZCB5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWciCisrYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKyAKKyAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KKy1hc190cl9zaD0ic2VkIHklKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWciCisrYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKyAKKyAKKyAjIElGUworQEAgLTExMTY3LDcgKzEyNDc0LDcgQEAKKyBjYXQgPiY1IDw8X0NTRU9GCisgCisgVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBwYXRjaCAkYXNfbWUgMi41LjksIHdoaWNoIHdhcworLWdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41Ny4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworIAorICAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUworICAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCitAQCAtMTEyMTEsOSArMTI1MTgsOSBAQAorICAgLWQsIC0tZGVidWcgICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCisgICAgICAgLS1yZWNoZWNrICAgIHVwZGF0ZSAkYXNfbWUgYnkgcmVjb25maWd1cmluZyBpbiB0aGUgc2FtZSBjb25kaXRpb25zCisgICAtLWZpbGU9RklMRVs6VEVNUExBVEVdCistICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorKwkJICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBGSUxFCisgICAtLWhlYWRlcj1GSUxFWzpURU1QTEFURV0KKy0gICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKysJCSAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCisgCisgQ29uZmlndXJhdGlvbiBmaWxlczoKKyAkY29uZmlnX2ZpbGVzCitAQCAtMTEyMjcsMTEgKzEyNTM0LDEwIEBACisgY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKyBhY19jc192ZXJzaW9uPSJcXAorIHBhdGNoIGNvbmZpZy5zdGF0dXMgMi41LjkKKy1jb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTcsCisrY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5LAorICAgd2l0aCBvcHRpb25zIFxcImBlY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL1tcXCIiXGBcJF0vXFxcXCYvZydgXFwiCisgCistQ29weXJpZ2h0IDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEKKy1GcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgVGhpcyBjb25maWcuc3RhdHVzIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKyBzcmNkaXI9JHNyY2RpcgorQEAgLTExNDYzLDkgKzEyNzY5LDkgQEAKKyAgICAgICAoZWNobyAnOnQKKyAgIC9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWInICYmIGNhdCAkdG1wL3N1YnMuZnJhZykgPiR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkCisgICAgICAgaWYgdGVzdCAteiAiJGFjX3NlZF9jbWRzIjsgdGhlbgorLSAgCWFjX3NlZF9jbWRzPSJzZWQgLWYgJHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQiCisrCWFjX3NlZF9jbWRzPSJzZWQgLWYgJHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQiCisgICAgICAgZWxzZQorLSAgCWFjX3NlZF9jbWRzPSIkYWNfc2VkX2NtZHMgfCBzZWQgLWYgJHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQiCisrCWFjX3NlZF9jbWRzPSIkYWNfc2VkX2NtZHMgfCBzZWQgLWYgJHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQiCisgICAgICAgZmkKKyAgICAgICBhY19zZWRfZnJhZz1gZXhwciAkYWNfc2VkX2ZyYWcgKyAxYAorICAgICAgIGFjX2JlZz0kYWNfZW5kCitAQCAtMTE0ODMsMjEgKzEyNzg5LDIxIEBACisgICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCisgICBjYXNlICRhY19maWxlIGluCisgICAtIHwgKjotIHwgKjotOiogKSAjIGlucHV0IGZyb20gc3RkaW4KKy0gICAgICAgIGNhdCA+JHRtcC9zdGRpbgorLSAgICAgICAgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKy0gICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisrCWNhdCA+JHRtcC9zdGRpbgorKwlhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorKwlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAgKjoqICkgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKy0gICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisrCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisgICAqICkgICBhY19maWxlX2luPSRhY19maWxlLmluIDs7CisgICBlc2FjCisgCisgICAjIENvbXB1dGUgQHNyY2RpckAsIEB0b3Bfc3JjZGlyQCwgYW5kIEBJTlNUQUxMQCBmb3Igc3ViZGlyZWN0b3JpZXMuCisgICBhY19kaXI9YChkaXJuYW1lICIkYWNfZmlsZSIpIDI+L2Rldi9udWxsIHx8CisgJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKy0gICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAorLSAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCistICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCBcCistICAgICAgICAgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisrCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAorKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKysJIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAorKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisgZWNobyBYIiRhY19maWxlIiB8CisgICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KK0BAIC0xMTUxMywxMCArMTI4MTksMTAgQEAKKyAgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAorICRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKy0gICAgICAgICBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCistICAgICAgICAgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorLSAgICAgICAgIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCistICAgICAgICAgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisrCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisrCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisrCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisgZWNobyBYIiRhc19kaXIiIHwKKyAgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorQEAgLTExNTU0LDEyICsxMjg2MCw0NSBAQAorICAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyIDs7CisgZXNhYworLSMgRG9uJ3QgYmxpbmRseSBwZXJmb3JtIGEgYGNkICIkYWNfZGlyIi8kYWNfZm9vICYmIHB3ZGAgc2luY2UgJGFjX2ZvbyBjYW4gYmUKKy0jIGFic29sdXRlLgorLWFjX2Fic19idWlsZGRpcj1gY2QgIiRhY19kaXIiICYmIGNkICRhY19idWlsZGRpciAmJiBwd2RgCistYWNfYWJzX3RvcF9idWlsZGRpcj1gY2QgIiRhY19kaXIiICYmIGNkICR7YWNfdG9wX2J1aWxkZGlyfS4gJiYgcHdkYAorLWFjX2Fic19zcmNkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAkYWNfc3JjZGlyICYmIHB3ZGAKKy1hY19hYnNfdG9wX3NyY2Rpcj1gY2QgIiRhY19kaXIiICYmIGNkICRhY190b3Bfc3JjZGlyICYmIHB3ZGAKKysKKysjIERvIG5vdCB1c2UgYGNkIGZvbyAmJiBwd2RgIHRvIGNvbXB1dGUgYWJzb2x1dGUgcGF0aHMsIGJlY2F1c2UKKysjIHRoZSBkaXJlY3RvcmllcyBtYXkgbm90IGV4aXN0LgorK2Nhc2UgYHB3ZGAgaW4KKysuKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKysqKQorKyAgY2FzZSAiJGFjX2RpciIgaW4KKysgIC4pIGFjX2Fic19idWlsZGRpcj1gcHdkYDs7CisrICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OworKyAgKikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgLyIkYWNfZGlyIjs7CisrICBlc2FjOzsKKytlc2FjCisrY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisrLikgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKysqKQorKyAgY2FzZSAke2FjX3RvcF9idWlsZGRpcn0uIGluCisrICAuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXI7OworKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OworKyAgKikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyLyR7YWNfdG9wX2J1aWxkZGlyfS47OworKyAgZXNhYzs7CisrZXNhYworK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorKy4pIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CisrKikKKysgIGNhc2UgJGFjX3NyY2RpciBpbgorKyAgLikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKKysgICopIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfc3JjZGlyOzsKKysgIGVzYWM7OworK2VzYWMKKytjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKysuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CisrKikKKysgIGNhc2UgJGFjX3RvcF9zcmNkaXIgaW4KKysgIC4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CisrICAqKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY190b3Bfc3JjZGlyOzsKKysgIGVzYWM7OworK2VzYWMKKyAKKyAKKyAgIGNhc2UgJElOU1RBTEwgaW4KK0BAIC0xMTU2NywxMSArMTI5MDYsNiBAQAorICAgKikgYWNfSU5TVEFMTD0kYWNfdG9wX2J1aWxkZGlyJElOU1RBTEwgOzsKKyAgIGVzYWMKKyAKKy0gIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorLWVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CistICAgIHJtIC1mICIkYWNfZmlsZSIKKy0gIGZpCisgICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorICAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAgKi8KK0BAIC0xMTU4MSw3ICsxMjkxNSw3IEBACisgICAgIGNvbmZpZ3VyZV9pbnB1dD0iJGFjX2ZpbGUuICAiCisgICBmaQorICAgY29uZmlndXJlX2lucHV0PSRjb25maWd1cmVfaW5wdXQiR2VuZXJhdGVkIGZyb20gYGVjaG8gJGFjX2ZpbGVfaW4gfAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWQgJ3MsLiovLCwnYCBieSBjb25maWd1cmUuIgorKwkJCQkgICAgIHNlZCAncywuKi8sLCdgIGJ5IGNvbmZpZ3VyZS4iCisgCisgICAjIEZpcnN0IGxvb2sgZm9yIHRoZSBpbnB1dCBmaWxlcyBpbiB0aGUgYnVpbGQgdHJlZSwgb3RoZXJ3aXNlIGluIHRoZQorICAgIyBzcmMgdHJlZS4KK0BAIC0xMTU5MCwyNiArMTI5MjQsMzIgQEAKKyAgICAgICBjYXNlICRmIGluCisgICAgICAgLSkgZWNobyAkdG1wL3N0ZGluIDs7CisgICAgICAgW1xcLyRdKikKKy0gICAgICAgICAjIEFic29sdXRlIChjYW4ndCBiZSBET1Mtc3R5bGUsIGFzIElGUz06KQorLSAgICAgICAgIHRlc3QgLWYgIiRmIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CisrCSAjIEFic29sdXRlIChjYW4ndCBiZSBET1Mtc3R5bGUsIGFzIElGUz06KQorKwkgdGVzdCAtZiAiJGYiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKKyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy0gICAgICAgICBlY2hvICRmOzsKKysJIGVjaG8gIiRmIjs7CisgICAgICAgKikgIyBSZWxhdGl2ZQorLSAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorLSAgICAgICAgICAgIyBCdWlsZCB0cmVlCistICAgICAgICAgICBlY2hvICRmCistICAgICAgICAgZWxpZiB0ZXN0IC1mICIkc3JjZGlyLyRmIjsgdGhlbgorLSAgICAgICAgICAgIyBTb3VyY2UgdHJlZQorLSAgICAgICAgICAgZWNobyAkc3JjZGlyLyRmCistICAgICAgICAgZWxzZQorLSAgICAgICAgICAgIyAvZGV2L251bGwgdHJlZQorLSAgICAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorKwkgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCisrCSAgICMgQnVpbGQgdHJlZQorKwkgICBlY2hvICIkZiIKKysJIGVsaWYgdGVzdCAtZiAiJHNyY2Rpci8kZiI7IHRoZW4KKysJICAgIyBTb3VyY2UgdHJlZQorKwkgICBlY2hvICIkc3JjZGlyLyRmIgorKwkgZWxzZQorKwkgICAjIC9kZXYvbnVsbCB0cmVlCisrCSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKKyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy0gICAgICAgICBmaTs7CisrCSBmaTs7CisgICAgICAgZXNhYworICAgICBkb25lYCB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKysKKysgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorK2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisrICAgIHJtIC1mICIkYWNfZmlsZSIKKysgIGZpCisgX0FDRU9GCisgY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKyAgIHNlZCAiJGFjX3Zwc3ViCitAQCAtMTE2NDksMTIgKzEyOTg5LDEyIEBACisgIyBOQU1FIGlzIHRoZSBjcHAgbWFjcm8gYmVpbmcgZGVmaW5lZCBhbmQgVkFMVUUgaXMgdGhlIHZhbHVlIGl0IGlzIGJlaW5nIGdpdmVuLgorICMKKyAjIGFjX2Qgc2V0cyB0aGUgdmFsdWUgaW4gIiNkZWZpbmUgTkFNRSBWQUxVRSIgbGluZXMuCistYWNfZEE9J3MsXlwoWyAJXSpcKSNcKFsgCV0qZGVmaW5lWyAJXVsgCV0qXCknCistYWNfZEI9J1sgCV0uKiQsXDEjXDInCisrYWNfZEE9J3MsXlwoWwkgXSpcKSNcKFsJIF0qZGVmaW5lWwkgXVsJIF0qXCknCisrYWNfZEI9J1sJIF0uKiQsXDEjXDInCisgYWNfZEM9JyAnCisgYWNfZEQ9Jyw7dCcKKyAjIGFjX3UgdHVybnMgIiN1bmRlZiBOQU1FIiB3aXRob3V0IHRyYWlsaW5nIGJsYW5rcyBpbnRvICIjZGVmaW5lIE5BTUUgVkFMVUUiLgorLWFjX3VBPSdzLF5cKFsgCV0qXCkjXChbIAldKlwpdW5kZWZcKFsgCV1bIAldKlwpJworK2FjX3VBPSdzLF5cKFsJIF0qXCkjXChbCSBdKlwpdW5kZWZcKFsJIF1bCSBdKlwpJworIGFjX3VCPSckLFwxI1wyZGVmaW5lXDMnCisgYWNfdUM9JyAnCisgYWNfdUQ9Jyw7dCcKK0BAIC0xMTY2MywxMSArMTMwMDMsMTEgQEAKKyAgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4KKyAgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgIC0gfCAqOi0gfCAqOi06KiApICMgaW5wdXQgZnJvbSBzdGRpbgorLSAgICAgICAgY2F0ID4kdG1wL3N0ZGluCistICAgICAgICBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorLSAgICAgICAgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKysJY2F0ID4kdG1wL3N0ZGluCisrCWFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCisrCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisgICAqOiogKSBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorLSAgICAgICAgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKysJYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKyAgICogKSAgIGFjX2ZpbGVfaW49JGFjX2ZpbGUuaW4gOzsKKyAgIGVzYWMKKyAKK0BAIC0xMTY4MSwyOCArMTMwMjEsMjkgQEAKKyAgICAgICBjYXNlICRmIGluCisgICAgICAgLSkgZWNobyAkdG1wL3N0ZGluIDs7CisgICAgICAgW1xcLyRdKikKKy0gICAgICAgICAjIEFic29sdXRlIChjYW4ndCBiZSBET1Mtc3R5bGUsIGFzIElGUz06KQorLSAgICAgICAgIHRlc3QgLWYgIiRmIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CisrCSAjIEFic29sdXRlIChjYW4ndCBiZSBET1Mtc3R5bGUsIGFzIElGUz06KQorKwkgdGVzdCAtZiAiJGYiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKKyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy0gICAgICAgICBlY2hvICRmOzsKKysJICMgRG8gcXVvdGUgJGYsIHRvIHByZXZlbnQgRE9TIHBhdGhzIGZyb20gYmVpbmcgSUZTJ2QuCisrCSBlY2hvICIkZiI7OworICAgICAgICopICMgUmVsYXRpdmUKKy0gICAgICAgICBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KKy0gICAgICAgICAgICMgQnVpbGQgdHJlZQorLSAgICAgICAgICAgZWNobyAkZgorLSAgICAgICAgIGVsaWYgdGVzdCAtZiAiJHNyY2Rpci8kZiI7IHRoZW4KKy0gICAgICAgICAgICMgU291cmNlIHRyZWUKKy0gICAgICAgICAgIGVjaG8gJHNyY2Rpci8kZgorLSAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICMgL2Rldi9udWxsIHRyZWUKKy0gICAgICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKKysJIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorKwkgICAjIEJ1aWxkIHRyZWUKKysJICAgZWNobyAiJGYiCisrCSBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCisrCSAgICMgU291cmNlIHRyZWUKKysJICAgZWNobyAiJHNyY2Rpci8kZiIKKysJIGVsc2UKKysJICAgIyAvZGV2L251bGwgdHJlZQorKwkgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CisgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgICAgICAgZmk7OworKwkgZmk7OworICAgICAgIGVzYWMKKyAgICAgZG9uZWAgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisgICAjIFJlbW92ZSB0aGUgdHJhaWxpbmcgc3BhY2VzLgorLSAgc2VkICdzL1sgCV0qJC8vJyAkYWNfZmlsZV9pbnB1dHMgPiR0bXAvaW4KKysgIHNlZCAncy9bCSBdKiQvLycgJGFjX2ZpbGVfaW5wdXRzID4kdG1wL2luCisgCisgX0FDRU9GCisgCitAQCAtMTE3MjUsOSArMTMwNjYsOSBAQAorIHMsW1xcJGBdLFxcJixnCisgdCBjbGVhcgorIDogY2xlYXIKKy1zLF5bIAldKiNbIAldKmRlZmluZVsgCV1bIAldKlwoW14gCShdW14gCShdKlwpXCgoW14pXSopXClbIAldKlwoLipcKSQsJHthY19kQX1cMSR7YWNfZEJ9XDFcMiR7YWNfZEN9XDMke2FjX2REfSxncAorK3MsXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qXChbXgkgKF1bXgkgKF0qXClcKChbXildKilcKVsJIF0qXCguKlwpJCwke2FjX2RBfVwxJHthY19kQn1cMVwyJHthY19kQ31cMyR7YWNfZER9LGdwCisgdCBlbmQKKy1zLF5bIAldKiNbIAldKmRlZmluZVsgCV1bIAldKlwoW14gCV1bXiAJXSpcKVsgCV0qXCguKlwpJCwke2FjX2RBfVwxJHthY19kQn1cMSR7YWNfZEN9XDIke2FjX2REfSxncAorK3MsXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qXChbXgkgXVteCSBdKlwpWwkgXSpcKC4qXCkkLCR7YWNfZEF9XDEke2FjX2RCfVwxJHthY19kQ31cMiR7YWNfZER9LGdwCisgOiBlbmQKKyBfQUNFT0YKKyAjIElmIHNvbWUgbWFjcm9zIHdlcmUgY2FsbGVkIHNldmVyYWwgdGltZXMgdGhlcmUgbWlnaHQgYmUgc2V2ZXJhbCB0aW1lcworQEAgLTExNzQxLDEzICsxMzA4MiwxMyBAQAorICMgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKKyAjIG9uIHNvbWUgc3lzdGVtcyB3aGVyZSBjb25maWd1cmUgd2lsbCBub3QgZGVjaWRlIHRvIGRlZmluZSBpdC4KKyBjYXQgPj5jb25mdGVzdC51bmRlZnMgPDxcX0FDRU9GCistcyxeWyAJXSojWyAJXSp1bmRlZlsgCV1bIAldKlthLXpBLVpfXVthLXpBLVpfMC05XSosLyogJiAqLywKKytzLF5bCSBdKiNbCSBdKnVuZGVmWwkgXVsJIF0qW2EtekEtWl9dW2EtekEtWl8wLTldKiwvKiAmICovLAorIF9BQ0VPRgorIAorICMgQnJlYWsgdXAgY29uZnRlc3QuZGVmaW5lcyBiZWNhdXNlIHNvbWUgc2hlbGxzIGhhdmUgYSBsaW1pdCBvbiB0aGUgc2l6ZQorICMgb2YgaGVyZSBkb2N1bWVudHMsIGFuZCBvbGQgc2VkcyBoYXZlIHNtYWxsIGxpbWl0cyB0b28gKDEwMCBjbWRzKS4KKyBlY2hvICcgICMgSGFuZGxlIGFsbCB0aGUgI2RlZmluZSB0ZW1wbGF0ZXMgb25seSBpZiBuZWNlc3NhcnkuJyA+PiRDT05GSUdfU1RBVFVTCistZWNobyAnICBpZiBncmVwICJeWyAJXSojWyAJXSpkZWZpbmUiICR0bXAvaW4gPi9kZXYvbnVsbDsgdGhlbicgPj4kQ09ORklHX1NUQVRVUworK2VjaG8gJyAgaWYgZ3JlcCAiXlsJIF0qI1sJIF0qZGVmaW5lIiAkdG1wL2luID4vZGV2L251bGw7IHRoZW4nID4+JENPTkZJR19TVEFUVVMKKyBlY2hvICcgICMgSWYgdGhlcmUgYXJlIG5vIGRlZmluZXMsIHdlIG1heSBoYXZlIGFuIGVtcHR5IGlmL2ZpJyA+PiRDT05GSUdfU1RBVFVTCisgZWNobyAnICA6JyA+PiRDT05GSUdfU1RBVFVTCisgcm0gLWYgY29uZnRlc3QudGFpbAorQEAgLTExNzU2LDcgKzEzMDk3LDcgQEAKKyAgICMgV3JpdGUgYSBsaW1pdGVkLXNpemUgaGVyZSBkb2N1bWVudCB0byAkdG1wL2RlZmluZXMuc2VkLgorICAgZWNobyAnICBjYXQgPiR0bXAvZGVmaW5lcy5zZWQgPDxDRU9GJyA+PiRDT05GSUdfU1RBVFVTCisgICAjIFNwZWVkIHVwOiBkb24ndCBjb25zaWRlciB0aGUgbm9uIGAjZGVmaW5lJyBsaW5lcy4KKy0gIGVjaG8gJy9eWyAJXSojWyAJXSpkZWZpbmUvIWInID4+JENPTkZJR19TVEFUVVMKKysgIGVjaG8gJy9eWwkgXSojWwkgXSpkZWZpbmUvIWInID4+JENPTkZJR19TVEFUVVMKKyAgICMgV29yayBhcm91bmQgdGhlIGZvcmdldC10by1yZXNldC10aGUtZmxhZyBidWcuCisgICBlY2hvICd0IGNscicgPj4kQ09ORklHX1NUQVRVUworICAgZWNobyAnOiBjbHInID4+JENPTkZJR19TVEFUVVMKK0BAIC0xMTc4Myw3ICsxMzEyNCw3IEBACisgICAjIFdyaXRlIGEgbGltaXRlZC1zaXplIGhlcmUgZG9jdW1lbnQgdG8gJHRtcC91bmRlZnMuc2VkLgorICAgZWNobyAnICBjYXQgPiR0bXAvdW5kZWZzLnNlZCA8PENFT0YnID4+JENPTkZJR19TVEFUVVMKKyAgICMgU3BlZWQgdXA6IGRvbid0IGNvbnNpZGVyIHRoZSBub24gYCN1bmRlZicKKy0gIGVjaG8gJy9eWyAJXSojWyAJXSp1bmRlZi8hYicgPj4kQ09ORklHX1NUQVRVUworKyAgZWNobyAnL15bCSBdKiNbCSBdKnVuZGVmLyFiJyA+PiRDT05GSUdfU1RBVFVTCisgICAjIFdvcmsgYXJvdW5kIHRoZSBmb3JnZXQtdG8tcmVzZXQtdGhlLWZsYWcgYnVnLgorICAgZWNobyAndCBjbHInID4+JENPTkZJR19TVEFUVVMKKyAgIGVjaG8gJzogY2xyJyA+PiRDT05GSUdfU1RBVFVTCitAQCAtMTE4MTcsMTAgKzEzMTU4LDEwIEBACisgICAgIGVsc2UKKyAgICAgICBhY19kaXI9YChkaXJuYW1lICIkYWNfZmlsZSIpIDI+L2Rldi9udWxsIHx8CisgJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKy0gICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAorLSAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCistICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCBcCistICAgICAgICAgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisrCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAorKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKysJIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAorKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisgZWNobyBYIiRhY19maWxlIiB8CisgICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KK0BAIC0xMTgzNiwxMCArMTMxNzcsMTAgQEAKKyAgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAorICRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKy0gICAgICAgICBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCistICAgICAgICAgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorLSAgICAgICAgIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCistICAgICAgICAgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisrCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisrCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisrCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisgZWNobyBYIiRhc19kaXIiIHwKKyAgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvY29uZmlndXJlLmFjCisrKysgcGF0Y2gtMi41LjkvY29uZmlndXJlLmFjCitAQCAtNjQsNiArNjQsOSBAQAorIGdsX1BSRVJFUV9YTUFMTE9DCisgZ2xfUVVPVEUKKyBnbF9RVU9URUFSRworK2dsX0hBU0gKKysKKythZ19DSEVDS19OQU5PU0VDT05EX1NUQVQKKyAKKyBkbmwgVGhpcyBzaG91bGQgYmUgaW4gZ251bGliLCBidXQgaXNuJ3QgZm9yIHNvbWUgcmVhc29uLgorIEFDX0RFRlVOKFtqbV9QUkVSRVFfQURERVhUXSwKKy0tLSBwYXRjaC0yLjUuOS5vcmlnL3BjaC5jCisrKysgcGF0Y2gtMi41LjkvcGNoLmMKK0BAIC0xLDYgKzEsNiBAQAorIC8qIHJlYWRpbmcgcGF0Y2hlcyAqLworIAorLS8qICRJZDogcGNoLmMsdiAxLjQ0IDIwMDMvMDUvMjAgMTQ6MDM6MTcgZWdnZXJ0IEV4cCAkICovCisrLyogJElkOiBwY2guYyx2IDEuNDUgMjAwMy8wNy8wMiAyMjoxOToyMSBlZ2dlcnQgRXhwICQgKi8KKyAKKyAvKiBDb3B5cmlnaHQgKEMpIDE5ODYsIDE5ODcsIDE5ODggTGFycnkgV2FsbAorIAorQEAgLTM2NiwxMCArMzY2LDE2IEBACisgCWlmICghc3RhcnNfbGFzdF9saW5lICYmIHN0cm5FUShzLCAiKioqICIsIDQpKQorIAkgICAgbmFtZVtPTERdID0gZmV0Y2huYW1lIChzKzQsIHN0cmlwcGF0aCwgJnBfdGltZXN0YW1wW09MRF0pOworIAllbHNlIGlmIChzdHJuRVEocywgIisrKyAiLCA0KSkKKysJICB7CisgCSAgICAvKiBTd2FwIHdpdGggTkVXIGJlbG93LiAgKi8KKyAJICAgIG5hbWVbT0xEXSA9IGZldGNobmFtZSAocys0LCBzdHJpcHBhdGgsICZwX3RpbWVzdGFtcFtPTERdKTsKKysJICAgIHBfc3RyaXBfdHJhaWxpbmdfY3IgPSBzdHJpcF90cmFpbGluZ19jcjsKKysJICB9CisgCWVsc2UgaWYgKHN0cm5FUShzLCAiSW5kZXg6IiwgNikpCisrCSAgeworIAkgICAgbmFtZVtJTkRFWF0gPSBmZXRjaG5hbWUgKHMrNiwgc3RyaXBwYXRoLCAodGltZV90ICopIDApOworKwkgICAgcF9zdHJpcF90cmFpbGluZ19jciA9IHN0cmlwX3RyYWlsaW5nX2NyOworKwkgIH0KKyAJZWxzZSBpZiAoc3RybkVRKHMsICJQcmVyZXE6IiwgNykpIHsKKyAJICAgIGZvciAodCA9IHMgKyA3OyAgSVNTUEFDRSAoKHVuc2lnbmVkIGNoYXIpICp0KTsgIHQrKykKKyAJICAgICAgY29udGludWU7CitAQCAtNDA5LDYgKzQxNSw3IEBACisgCQkgICAgcF90aW1lc3RhbXBbTkVXXSA9IHRpbWVzdGFtcDsKKyAJCSAgICBwX3JmYzkzNF9uZXN0aW5nID0gKHQgLSBzKSA+PiAxOworIAkJICB9CisrCQlwX3N0cmlwX3RyYWlsaW5nX2NyID0gc3RyaXBfdHJhaWxpbmdfY3I7CisgCSAgICAgIH0KKyAJICB9CisgCWlmICgoZGlmZl90eXBlID09IE5PX0RJRkYgfHwgZGlmZl90eXBlID09IEVEX0RJRkYpICYmCistLS0gcGF0Y2gtMi41Ljkub3JpZy91dGlsLmMKKysrKyBwYXRjaC0yLjUuOS91dGlsLmMKK0BAIC00NSw5ICs0NSwxNyBAQAorICMgZGVmaW5lIHJhaXNlKHNpZykga2lsbCAoZ2V0cGlkICgpLCBzaWcpCisgI2VuZGlmCisgCisrI2lmIGRlZmluZWQoSEFWRV9TVEFUX1RJTUVWQUwpCisrI2luY2x1ZGUgPHRpbWUuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSA8c3RkYXJnLmg+CisrI2luY2x1ZGUgPGhhc2guaD4KKyAKKyBzdGF0aWMgdm9pZCBtYWtlZGlycyAoY2hhciAqKTsKKytzdGF0aWMgYm9vbCBmaWRfc2VhcmNoIChjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCBzdGF0ICosIGJvb2wpOworKyMgZGVmaW5lIGZpZF9leGlzdHMobmFtZSwgcHN0KSBmaWRfc2VhcmNoIChuYW1lLCBwc3QsIGZhbHNlKQorKyMgZGVmaW5lIGluc2VydF9maWQobmFtZSkgZmlkX3NlYXJjaCAobmFtZSwgTlVMTCwgdHJ1ZSkKKyAKKyAvKiBNb3ZlIGEgZmlsZSBGUk9NICh3aGVyZSAqRlJPTV9ORUVEU19SRU1PVkFMIGlzIG5vbnplcm8gaWYgRlJPTQorICAgIG5lZWRzIHJlbW92YWwgd2hlbiBjbGVhbmluZyB1cCBhdCB0aGUgZW5kIG9mIGV4ZWN1dGlvbikKK0BAIC02NCw3ICs3Miw3IEBACisgICBzdHJ1Y3Qgc3RhdCB0b19zdDsKKyAgIGludCB0b19lcnJubyA9ICEgYmFja3VwID8gLTEgOiBzdGF0ICh0bywgJnRvX3N0KSA9PSAwID8gMCA6IGVycm5vOworIAorLSAgaWYgKGJhY2t1cCkKKysgIGlmIChiYWNrdXAgJiYgKHRvX2Vycm5vIHx8ICEgZmlkX2V4aXN0cyAodG8sICZ0b19zdCkpKQorICAgICB7CisgICAgICAgaW50IHRyeV9tYWtlZGlyc19lcnJubyA9IDA7CisgICAgICAgY2hhciAqYmFrbmFtZTsKK0BAIC0xNjUsNiArMTczLDcgQEAKKyAJICAgICAgaWYgKCEgdG9fZGlyX2tub3duX3RvX2V4aXN0KQorIAkJbWFrZWRpcnMgKHRvKTsKKyAJICAgICAgY29weV9maWxlIChmcm9tLCB0bywgMCwgbW9kZSk7CisrCSAgICAgIGluc2VydF9maWQgKHRvKTsKKyAJICAgICAgcmV0dXJuOworIAkgICAgfQorIAorQEAgLTE3Myw2ICsxODIsNyBAQAorIAl9CisgCisgICAgIHJlbmFtZV9zdWNjZWVkZWQ6CisrICAgICAgaW5zZXJ0X2ZpZCAodG8pOworICAgICAgIC8qIERvIG5vdCBjbGVhciAqRlJPTV9ORUVEU19SRU1PVkFMIGlmIGl0J3MgcG9zc2libGUgdGhhdCB0aGUKKyAJIHJlbmFtZSByZXR1cm5lZCB6ZXJvIGJlY2F1c2UgRlJPTSBhbmQgVE8gYXJlIGhhcmQgbGlua3MgdG8KKyAJIHRoZSBzYW1lIGZpbGUuICAqLworQEAgLTEwMTEsMyArMTAyMSwxMDUgQEAKKyAgIGlmIChmaWxlX3NlZWsgKHN0cmVhbSwgb2Zmc2V0LCBwdHJuYW1lKSAhPSAwKQorICAgICBwZmF0YWwgKCJmc2VlayIpOworIH0KKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIGRldl90CQlmaWRfZGV2OworKyAgaW5vX3QJCWZpZF9pbm87CisrICB0aW1lX3QJZmlkX210aW1lOworKyAgdW5zaWduZWQgbG9uZwlmaWRfbXRpbWVuc2VjOworK30gZmlsZV9pZDsKKysKKyt1bnNpZ25lZAorK2ZpbGVfaWRfaGFzaGVyIChmaWxlX2lkICplbnRyeSwgdW5zaWduZWQgdGFibGVfc2l6ZSkKKyt7CisrICByZXR1cm4gKCh1bnNpZ25lZCBsb25nKSBlbnRyeS0+ZmlkX2lubyArCisrICAJICAodW5zaWduZWQgbG9uZykgZW50cnktPmZpZF9kZXYgKworKyAgCSAgKHVuc2lnbmVkIGxvbmcpIGVudHJ5LT5maWRfbXRpbWUgKworKwkgICh1bnNpZ25lZCBsb25nKSBlbnRyeS0+ZmlkX210aW1lbnNlYykgJSB0YWJsZV9zaXplOworK30KKysKKytib29sCisrZmlsZV9pZF9jb21wYXJhdG9yIChmaWxlX2lkICplbnRyeTEsIGZpbGVfaWQgKmVudHJ5MikKKyt7CisrICByZXR1cm4gKGVudHJ5MS0+ZmlkX2Rldgk9PSBlbnRyeTItPmZpZF9kZXYgJiYKKysJICBlbnRyeTEtPmZpZF9pbm8JPT0gZW50cnkyLT5maWRfaW5vICYmCisrCSAgZW50cnkxLT5maWRfbXRpbWUJPT0gZW50cnkyLT5maWRfbXRpbWUgJiYKKysJICBlbnRyeTEtPmZpZF9tdGltZW5zZWMgPT0gZW50cnkyLT5maWRfbXRpbWVuc2VjKTsKKyt9CisrCisrdm9pZAorK2ZpbGVfaWRfZnJlZXIgKGZpbGVfaWQgKmVudHJ5KQorK3sKKysgIGZyZWUgKGVudHJ5KTsKKyt9CisrCisrSGFzaF90YWJsZSAqZmlsZV9pZF9oYXNoOworKworKy8qIENoZWNrIGlmIHRoZSBmaWxlIGlkZW50aWZpZWQgYnkgRklMRU5BTUUgYW5kIFBTVCB3YXMgYWxyZWFkeSBzZWVuLiBJZiB0aGUKKysgICBmaWxlIHdhcyBhbHJlYWR5IHNlZW4sIHJldHVybnMgVFJVRS4gIElmIHRoZSBmaWxlIGhhcyBub3QgeWV0IGJlZW4gc2VlbgorKyAgIGFuZCBJTlNFUlQgaXMgVFJVRSwgaXQgaXMgaW5zZXJ0ZWQuICBQU1Qgb3IgRklMRU5BTUUgbWF5IGJlIE5VTEwgKGJ1dCBub3QKKysgICBib3RoIG9mIHRoZW0pLiAgKi8KKysKKytzdGF0aWMgYm9vbAorK2ZpZF9zZWFyY2ggKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBzdHJ1Y3Qgc3RhdCAqcHN0LCBib29sIGluc2VydCkKKyt7CisrICBzdHJ1Y3Qgc3RhdCBzdDsKKysKKysgIGlmICghZmlsZV9pZF9oYXNoKQorKyAgICB7CisrICAgICAgZmlsZV9pZF9oYXNoID0gaGFzaF9pbml0aWFsaXplICgwLCBOVUxMLCAoSGFzaF9oYXNoZXIpIGZpbGVfaWRfaGFzaGVyLAorKwkJCQkgICAgICAoSGFzaF9jb21wYXJhdG9yKSBmaWxlX2lkX2NvbXBhcmF0b3IsCisrCQkJCSAgICAgIChIYXNoX2RhdGFfZnJlZXIpIGZpbGVfaWRfZnJlZXIpOworKyAgICAgIGlmICghZmlsZV9pZF9oYXNoKQorKwlwZmF0YWwgKCJoYXNoX2luaXRpYWxpemUiKTsKKysgICAgfQorKworKyAgaWYgKCFwc3QpCisrICAgIHsKKysgICAgICBpZiAoc3RhdCAoZmlsZW5hbWUsICZzdCkgIT0gMCkKKysJcGZhdGFsICgiJXMiLCBxdW90ZWFyZyAoZmlsZW5hbWUpKTsKKysgICAgICBwc3QgPSAmc3Q7CisrICAgIH0KKysKKysgIGlmIChpbnNlcnQpCisrICAgIHsKKysgICAgICBmaWxlX2lkICpwZmlkID0geG1hbGxvYyAoc2l6ZW9mIChmaWxlX2lkKSksICpvbGRfcGZpZDsKKysgICAgICBwZmlkLT5maWRfZGV2CSAgPSBwc3QtPnN0X2RldjsKKysgICAgICBwZmlkLT5maWRfaW5vCSAgPSBwc3QtPnN0X2lubzsKKysgICAgICBwZmlkLT5maWRfbXRpbWUJICA9IHBzdC0+c3RfbXRpbWU7CisrI2lmIGRlZmluZWQoSEFWRV9TVEFUX05TRUMpCisrICAgICAgcGZpZC0+ZmlkX210aW1lbnNlYyA9IHBzdC0+c3RfbXRpbWVuc2VjOworKyNlbGlmIGRlZmluZWQoSEFWRV9TVEFUX1RJTUVWQUwpCisrICAgICAgcGZpZC0+ZmlkX210aW1lbnNlYyA9IHBzdC0+c3RfbXRpbS50dl9uc2VjOworKyNlbHNlCisrICAgICAgcGZpZC0+ZmlkX210aW1lbnNlYyA9IDA7CisrI2VuZGlmCisrICAgICAgb2xkX3BmaWQgPSBoYXNoX2luc2VydCAoZmlsZV9pZF9oYXNoLCBwZmlkKTsKKysgICAgICBpZiAoIW9sZF9wZmlkKQorKwlwZmF0YWwgKCJoYXNoX2luc2VydCIpOworKyAgICAgIGVsc2UgaWYgKG9sZF9wZmlkICE9IHBmaWQpCisrICAgICAgICB7CisrCSAgZnJlZSAocGZpZCk7CisrCSAgcmV0dXJuIHRydWU7CisrCX0KKysgICAgICBlbHNlCisrCXJldHVybiBmYWxzZTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgZmlsZV9pZCBmaWQ7CisrICAgICAgZmlkLmZpZF9kZXYJPSBwc3QtPnN0X2RldjsKKysgICAgICBmaWQuZmlkX2lubwk9IHBzdC0+c3RfaW5vOworKyAgICAgIGZpZC5maWRfbXRpbWUJPSBwc3QtPnN0X210aW1lOworKyNpZiBkZWZpbmVkKEhBVkVfU1RBVF9OU0VDKQorKyAgICAgIGZpZC5maWRfbXRpbWVuc2VjID0gcHN0LT5zdF9tdGltZW5zZWM7CisrI2VsaWYgZGVmaW5lZChIQVZFX1NUQVRfVElNRVZBTCkKKysgICAgICBmaWQuZmlkX210aW1lbnNlYyA9IHBzdC0+c3RfbXRpbS50dl9uc2VjOworKyNlbHNlCisrICAgICAgZmlkLmZpZF9tdGltZW5zZWMgPSAwOworKyNlbmRpZgorKyAgICAgIHJldHVybiBoYXNoX2xvb2t1cCAoZmlsZV9pZF9oYXNoLCAmZmlkKSAhPSAwOworKyAgICB9CisrfQorKworLS0tIHBhdGNoLTIuNS45Lm9yaWcvaGFzaC5jCisrKysgcGF0Y2gtMi41LjkvaGFzaC5jCitAQCAtMCwwICsxLDEwNTEgQEAKKysvKiBoYXNoIC0gaGFzaGluZyB0YWJsZSBwcm9jZXNzaW5nLgorKworKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFdyaXR0ZW4gYnkgSmltIE1leWVyaW5nLCAxOTkyLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrCisrLyogQSBnZW5lcmljIGhhc2ggdGFibGUgcGFja2FnZS4gICovCisrCisrLyogRGVmaW5lIFVTRV9PQlNUQUNLIHRvIDEgaWYgeW91IHdhbnQgdGhlIGFsbG9jYXRvciB0byB1c2Ugb2JzdGFja3MgaW5zdGVhZAorKyAgIG9mIG1hbGxvYy4gIElmIHlvdSBjaGFuZ2UgVVNFX09CU1RBQ0ssIHlvdSBoYXZlIHRvIHJlY29tcGlsZSEgICovCisrCisrI2lmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKyNpZiBIQVZFX1NURExJQl9ICisrIyBpbmNsdWRlIDxzdGRsaWIuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8bGltaXRzLmg+CisrI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysKKysjaWZuZGVmIEhBVkVfREVDTF9GUkVFCisrInRoaXMgY29uZmlndXJlLXRpbWUgZGVjbGFyYXRpb24gdGVzdCB3YXMgbm90IHJ1biIKKysjZW5kaWYKKysjaWYgIUhBVkVfREVDTF9GUkVFCisrdm9pZCBmcmVlICgpOworKyNlbmRpZgorKworKyNpZm5kZWYgSEFWRV9ERUNMX01BTExPQworKyJ0aGlzIGNvbmZpZ3VyZS10aW1lIGRlY2xhcmF0aW9uIHRlc3Qgd2FzIG5vdCBydW4iCisrI2VuZGlmCisrI2lmICFIQVZFX0RFQ0xfTUFMTE9DCisrY2hhciAqbWFsbG9jICgpOworKyNlbmRpZgorKworKyNpZiBVU0VfT0JTVEFDSworKyMgaW5jbHVkZSAib2JzdGFjay5oIgorKyMgaWZuZGVmIG9ic3RhY2tfY2h1bmtfYWxsb2MKKysjICBkZWZpbmUgb2JzdGFja19jaHVua19hbGxvYyBtYWxsb2MKKysjIGVuZGlmCisrIyBpZm5kZWYgb2JzdGFja19jaHVua19mcmVlCisrIyAgZGVmaW5lIG9ic3RhY2tfY2h1bmtfZnJlZSBmcmVlCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpbmNsdWRlICJoYXNoLmgiCisrCisrc3RydWN0IGhhc2hfdGFibGUKKysgIHsKKysgICAgLyogVGhlIGFycmF5IG9mIGJ1Y2tldHMgc3RhcnRzIGF0IEJVQ0tFVCBhbmQgZXh0ZW5kcyB0byBCVUNLRVRfTElNSVQtMSwKKysgICAgICAgZm9yIGEgcG9zc2liaWxpdHkgb2YgTl9CVUNLRVRTLiAgQW1vbmcgdGhvc2UsIE5fQlVDS0VUU19VU0VEIGJ1Y2tldHMKKysgICAgICAgYXJlIG5vdCBlbXB0eSwgdGhlcmUgYXJlIE5fRU5UUklFUyBhY3RpdmUgZW50cmllcyBpbiB0aGUgdGFibGUuICAqLworKyAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKyAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0X2xpbWl0OworKyAgICB1bnNpZ25lZCBuX2J1Y2tldHM7CisrICAgIHVuc2lnbmVkIG5fYnVja2V0c191c2VkOworKyAgICB1bnNpZ25lZCBuX2VudHJpZXM7CisrCisrICAgIC8qIFR1bmluZyBhcmd1bWVudHMsIGtlcHQgaW4gYSBwaHlzaWNhbHkgc2VwYXJhdGUgc3RydWN0dXJlLiAgKi8KKysgICAgY29uc3QgSGFzaF90dW5pbmcgKnR1bmluZzsKKysKKysgICAgLyogVGhyZWUgZnVuY3Rpb25zIGFyZSBnaXZlbiB0byBgaGFzaF9pbml0aWFsaXplJywgc2VlIHRoZSBkb2N1bWVudGF0aW9uCisrICAgICAgIGJsb2NrIGZvciB0aGlzIGZ1bmN0aW9uLiAgSW4gYSB3b3JkLCBIQVNIRVIgcmFuZG9taXplcyBhIHVzZXIgZW50cnkKKysgICAgICAgaW50byBhIG51bWJlciB1cCBmcm9tIDAgdXAgdG8gc29tZSBtYXhpbXVtIG1pbnVzIDE7IENPTVBBUkFUT1IgcmV0dXJucworKyAgICAgICB0cnVlIGlmIHR3byB1c2VyIGVudHJpZXMgY29tcGFyZSBlcXVhbGx5OyBhbmQgREFUQV9GUkVFUiBpcyB0aGUgY2xlYW51cAorKyAgICAgICBmdW5jdGlvbiBmb3IgYSB1c2VyIGVudHJ5LiAgKi8KKysgICAgSGFzaF9oYXNoZXIgaGFzaGVyOworKyAgICBIYXNoX2NvbXBhcmF0b3IgY29tcGFyYXRvcjsKKysgICAgSGFzaF9kYXRhX2ZyZWVyIGRhdGFfZnJlZXI7CisrCisrICAgIC8qIEEgbGlua2VkIGxpc3Qgb2YgZnJlZWQgc3RydWN0IGhhc2hfZW50cnkgc3RydWN0cy4gICovCisrICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpmcmVlX2VudHJ5X2xpc3Q7CisrCisrI2lmIFVTRV9PQlNUQUNLCisrICAgIC8qIFdoZW5ldmVyIG9ic3RhY2tzIGFyZSB1c2VkLCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhbGwgb3ZlcmZsb3dlZAorKyAgICAgICBlbnRyaWVzIGludG8gYSBzaW5nbGUgc3RhY2ssIHNvIHRoZXkgYWxsIGNhbiBiZSBmcmVlZCBpbiBhIHNpbmdsZQorKyAgICAgICBvcGVyYXRpb24uICBJdCBpcyBub3QgY2xlYXIgaWYgdGhlIHNwZWVkdXAgaXMgd29ydGggdGhlIHRyb3VibGUuICAqLworKyAgICBzdHJ1Y3Qgb2JzdGFjayBlbnRyeV9zdGFjazsKKysjZW5kaWYKKysgIH07CisrCisrLyogQSBoYXNoIHRhYmxlIGNvbnRhaW5zIG1hbnkgaW50ZXJuYWwgZW50cmllcywgZWFjaCBob2xkaW5nIGEgcG9pbnRlciB0bworKyAgIHNvbWUgdXNlciBwcm92aWRlZCBkYXRhIChhbHNvIGNhbGxlZCBhIHVzZXIgZW50cnkpLiAgQW4gZW50cnkgaW5kaXN0aW5jdGx5CisrICAgcmVmZXJzIHRvIGJvdGggdGhlIGludGVybmFsIGVudHJ5IGFuZCBpdHMgYXNzb2NpYXRlZCB1c2VyIGVudHJ5LiAgQSB1c2VyCisrICAgZW50cnkgY29udGVudHMgbWF5IGJlIGhhc2hlZCBieSBhIHJhbmRvbWl6YXRpb24gZnVuY3Rpb24gKHRoZSBoYXNoaW5nCisrICAgZnVuY3Rpb24sIG9yIGp1c3QgYGhhc2hlcicgZm9yIHNob3J0KSBpbnRvIGEgbnVtYmVyIChvciBgc2xvdCcpIGJldHdlZW4gMAorKyAgIGFuZCB0aGUgY3VycmVudCB0YWJsZSBzaXplLiAgQXQgZWFjaCBzbG90IHBvc2l0aW9uIGluIHRoZSBoYXNoIHRhYmxlLAorKyAgIHN0YXJ0cyBhIGxpbmtlZCBjaGFpbiBvZiBlbnRyaWVzIGZvciB3aGljaCB0aGUgdXNlciBkYXRhIGFsbCBoYXNoIHRvIHRoaXMKKysgICBzbG90LiAgQSBidWNrZXQgaXMgdGhlIGNvbGxlY3Rpb24gb2YgYWxsIGVudHJpZXMgaGFzaGluZyB0byB0aGUgc2FtZSBzbG90LgorKworKyAgIEEgZ29vZCBgaGFzaGVyJyBmdW5jdGlvbiB3aWxsIGRpc3RyaWJ1dGUgZW50cmllcyByYXRoZXIgZXZlbmx5IGluIGJ1Y2tldHMuCisrICAgSW4gdGhlIGlkZWFsIGNhc2UsIHRoZSBsZW5ndGggb2YgZWFjaCBidWNrZXQgaXMgcm91Z2hseSB0aGUgbnVtYmVyIG9mCisrICAgZW50cmllcyBkaXZpZGVkIGJ5IHRoZSB0YWJsZSBzaXplLiAgRmluZGluZyB0aGUgc2xvdCBmb3IgYSBkYXRhIGlzIHVzdWFsbHkKKysgICBkb25lIGluIGNvbnN0YW50IHRpbWUgYnkgdGhlIGBoYXNoZXInLCBhbmQgdGhlIGxhdGVyIGZpbmRpbmcgb2YgYSBwcmVjaXNlCisrICAgZW50cnkgaXMgbGluZWFyIGluIHRpbWUgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgYnVja2V0LiAgQ29uc2VxdWVudGx5LCBhCisrICAgbGFyZ2VyIGhhc2ggdGFibGUgc2l6ZSAodGhhdCBpcywgYSBsYXJnZXIgbnVtYmVyIG9mIGJ1Y2tldHMpIGlzIHByb25lIHRvCisrICAgeWllbGRpbmcgc2hvcnRlciBjaGFpbnMsICpnaXZlbiogdGhlIGBoYXNoZXInIGZ1bmN0aW9uIGJlaGF2ZXMgcHJvcGVybHkuCisrCisrICAgTG9uZyBidWNrZXRzIHNsb3cgZG93biB0aGUgbG9va3VwIGFsZ29yaXRobS4gIE9uZSBtaWdodCB1c2UgYmlnIGhhc2ggdGFibGUKKysgICBzaXplcyBpbiBob3BlIHRvIHJlZHVjZSB0aGUgYXZlcmFnZSBsZW5ndGggb2YgYnVja2V0cywgYnV0IHRoaXMgbWlnaHQKKysgICBiZWNvbWUgaW5vcmRpbmF0ZSwgYXMgdW51c2VkIHNsb3RzIGluIHRoZSBoYXNoIHRhYmxlIHRha2Ugc29tZSBzcGFjZS4gIFRoZQorKyAgIGJlc3QgYmV0IGlzIHRvIG1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIGEgZ29vZCBgaGFzaGVyJyBmdW5jdGlvbiAoYmV3YXJlCisrICAgdGhhdCB0aG9zZSBhcmUgbm90IHRoYXQgZWFzeSB0byB3cml0ZSEgOi0pLCBhbmQgdG8gdXNlIGEgdGFibGUgc2l6ZQorKyAgIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGVudHJpZXMuICAqLworKworKy8qIElmIGFuIGluc2VydGlvbiBtYWtlcyB0aGUgcmF0aW8gb2Ygbm9uZW1wdHkgYnVja2V0cyB0byB0YWJsZSBzaXplIGxhcmdlcgorKyAgIHRoYW4gdGhlIGdyb3d0aCB0aHJlc2hvbGQgKGEgbnVtYmVyIGJldHdlZW4gMC4wIGFuZCAxLjApLCB0aGVuIGluY3JlYXNlCisrICAgdGhlIHRhYmxlIHNpemUgYnkgbXVsdGlwbHlpbmcgYnkgdGhlIGdyb3d0aCBmYWN0b3IgKGEgbnVtYmVyIGdyZWF0ZXIgdGhhbgorKyAgIDEuMCkuICBUaGUgZ3Jvd3RoIHRocmVzaG9sZCBkZWZhdWx0cyB0byAwLjgsIGFuZCB0aGUgZ3Jvd3RoIGZhY3RvcgorKyAgIGRlZmF1bHRzIHRvIDEuNDE0LCBtZWFuaW5nIHRoYXQgdGhlIHRhYmxlIHdpbGwgaGF2ZSBkb3VibGVkIGl0cyBzaXplCisrICAgZXZlcnkgc2Vjb25kIHRpbWUgODAlIG9mIHRoZSBidWNrZXRzIGdldCB1c2VkLiAgKi8KKysjZGVmaW5lIERFRkFVTFRfR1JPV1RIX1RIUkVTSE9MRCAwLjgKKysjZGVmaW5lIERFRkFVTFRfR1JPV1RIX0ZBQ1RPUiAxLjQxNAorKworKy8qIElmIGEgZGVsZXRpb24gZW1wdGllcyBhIGJ1Y2tldCBhbmQgY2F1c2VzIHRoZSByYXRpbyBvZiB1c2VkIGJ1Y2tldHMgdG8KKysgICB0YWJsZSBzaXplIHRvIGJlY29tZSBzbWFsbGVyIHRoYW4gdGhlIHNocmluayB0aHJlc2hvbGQgKGEgbnVtYmVyIGJldHdlZW4KKysgICAwLjAgYW5kIDEuMCksIHRoZW4gc2hyaW5rIHRoZSB0YWJsZSBieSBtdWx0aXBseWluZyBieSB0aGUgc2hyaW5rIGZhY3RvciAoYQorKyAgIG51bWJlciBncmVhdGVyIHRoYW4gdGhlIHNocmluayB0aHJlc2hvbGQgYnV0IHNtYWxsZXIgdGhhbiAxLjApLiAgVGhlIHNocmluaworKyAgIHRocmVzaG9sZCBhbmQgZmFjdG9yIGRlZmF1bHQgdG8gMC4wIGFuZCAxLjAsIG1lYW5pbmcgdGhhdCB0aGUgdGFibGUgbmV2ZXIKKysgICBzaHJpbmtzLiAgKi8KKysjZGVmaW5lIERFRkFVTFRfU0hSSU5LX1RIUkVTSE9MRCAwLjAKKysjZGVmaW5lIERFRkFVTFRfU0hSSU5LX0ZBQ1RPUiAxLjAKKysKKysvKiBVc2UgdGhpcyB0byBpbml0aWFsaXplIG9yIHJlc2V0IGEgVFVOSU5HIHN0cnVjdHVyZSB0bworKyAgIHNvbWUgc2Vuc2libGUgdmFsdWVzLiAqLworK3N0YXRpYyBjb25zdCBIYXNoX3R1bmluZyBkZWZhdWx0X3R1bmluZyA9CisrICB7CisrICAgIERFRkFVTFRfU0hSSU5LX1RIUkVTSE9MRCwKKysgICAgREVGQVVMVF9TSFJJTktfRkFDVE9SLAorKyAgICBERUZBVUxUX0dST1dUSF9USFJFU0hPTEQsCisrICAgIERFRkFVTFRfR1JPV1RIX0ZBQ1RPUiwKKysgICAgZmFsc2UKKysgIH07CisrCisrLyogSW5mb3JtYXRpb24gYW5kIGxvb2t1cC4gICovCisrCisrLyogVGhlIGZvbGxvd2luZyBmZXcgZnVuY3Rpb25zIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG92ZXJhbGwgaGFzaAorKyAgIHRhYmxlIG9yZ2FuaXphdGlvbjogdGhlIG51bWJlciBvZiBlbnRyaWVzLCBudW1iZXIgb2YgYnVja2V0cyBhbmQgbWF4aW11bQorKyAgIGxlbmd0aCBvZiBidWNrZXRzLiAgKi8KKysKKysvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBidWNrZXRzIGluIHRoZSBoYXNoIHRhYmxlLiAgVGhlIHRhYmxlIHNpemUsIHRoZSB0b3RhbAorKyAgIG51bWJlciBvZiBidWNrZXRzICh1c2VkIHBsdXMgdW51c2VkKSwgb3IgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNsb3RzLCBhcmUKKysgICB0aGUgc2FtZSBxdWFudGl0eS4gICovCisrCisrdW5zaWduZWQKKytoYXNoX2dldF9uX2J1Y2tldHMgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHJldHVybiB0YWJsZS0+bl9idWNrZXRzOworK30KKysKKysvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBzbG90cyBpbiB1c2UgKG5vbi1lbXB0eSBidWNrZXRzKS4gICovCisrCisrdW5zaWduZWQKKytoYXNoX2dldF9uX2J1Y2tldHNfdXNlZCAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgcmV0dXJuIHRhYmxlLT5uX2J1Y2tldHNfdXNlZDsKKyt9CisrCisrLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgYWN0aXZlIGVudHJpZXMuICAqLworKworK3Vuc2lnbmVkCisraGFzaF9nZXRfbl9lbnRyaWVzIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICByZXR1cm4gdGFibGUtPm5fZW50cmllczsKKyt9CisrCisrLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGxvbmdlc3QgY2hhaW4gKGJ1Y2tldCkuICAqLworKworK3Vuc2lnbmVkCisraGFzaF9nZXRfbWF4X2J1Y2tldF9sZW5ndGggKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrICB1bnNpZ25lZCBtYXhfYnVja2V0X2xlbmd0aCA9IDA7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICB7CisrICAgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysJeworKwkgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3IgPSBidWNrZXQ7CisrCSAgdW5zaWduZWQgYnVja2V0X2xlbmd0aCA9IDE7CisrCisrCSAgd2hpbGUgKGN1cnNvciA9IGN1cnNvci0+bmV4dCwgY3Vyc29yKQorKwkgICAgYnVja2V0X2xlbmd0aCsrOworKworKwkgIGlmIChidWNrZXRfbGVuZ3RoID4gbWF4X2J1Y2tldF9sZW5ndGgpCisrCSAgICBtYXhfYnVja2V0X2xlbmd0aCA9IGJ1Y2tldF9sZW5ndGg7CisrCX0KKysgICAgfQorKworKyAgcmV0dXJuIG1heF9idWNrZXRfbGVuZ3RoOworK30KKysKKysvKiBEbyBhIG1pbGQgdmFsaWRhdGlvbiBvZiBhIGhhc2ggdGFibGUsIGJ5IHRyYXZlcnNpbmcgaXQgYW5kIGNoZWNraW5nIHR3bworKyAgIHN0YXRpc3RpY3MuICAqLworKworK2Jvb2wKKytoYXNoX3RhYmxlX29rIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKyAgdW5zaWduZWQgbl9idWNrZXRzX3VzZWQgPSAwOworKyAgdW5zaWduZWQgbl9lbnRyaWVzID0gMDsKKysKKysgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCisrICAgIHsKKysgICAgICBpZiAoYnVja2V0LT5kYXRhKQorKwl7CisrCSAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvciA9IGJ1Y2tldDsKKysKKysJICAvKiBDb3VudCBidWNrZXQgaGVhZC4gICovCisrCSAgbl9idWNrZXRzX3VzZWQrKzsKKysJICBuX2VudHJpZXMrKzsKKysKKysJICAvKiBDb3VudCBidWNrZXQgb3ZlcmZsb3cuICAqLworKwkgIHdoaWxlIChjdXJzb3IgPSBjdXJzb3ItPm5leHQsIGN1cnNvcikKKysJICAgIG5fZW50cmllcysrOworKwl9CisrICAgIH0KKysKKysgIGlmIChuX2J1Y2tldHNfdXNlZCA9PSB0YWJsZS0+bl9idWNrZXRzX3VzZWQgJiYgbl9lbnRyaWVzID09IHRhYmxlLT5uX2VudHJpZXMpCisrICAgIHJldHVybiB0cnVlOworKworKyAgcmV0dXJuIGZhbHNlOworK30KKysKKyt2b2lkCisraGFzaF9wcmludF9zdGF0aXN0aWNzIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSwgRklMRSAqc3RyZWFtKQorK3sKKysgIHVuc2lnbmVkIG5fZW50cmllcyA9IGhhc2hfZ2V0X25fZW50cmllcyAodGFibGUpOworKyAgdW5zaWduZWQgbl9idWNrZXRzID0gaGFzaF9nZXRfbl9idWNrZXRzICh0YWJsZSk7CisrICB1bnNpZ25lZCBuX2J1Y2tldHNfdXNlZCA9IGhhc2hfZ2V0X25fYnVja2V0c191c2VkICh0YWJsZSk7CisrICB1bnNpZ25lZCBtYXhfYnVja2V0X2xlbmd0aCA9IGhhc2hfZ2V0X21heF9idWNrZXRfbGVuZ3RoICh0YWJsZSk7CisrCisrICBmcHJpbnRmIChzdHJlYW0sICIjIGVudHJpZXM6ICAgICAgICAgJXVcbiIsIG5fZW50cmllcyk7CisrICBmcHJpbnRmIChzdHJlYW0sICIjIGJ1Y2tldHM6ICAgICAgICAgJXVcbiIsIG5fYnVja2V0cyk7CisrICBmcHJpbnRmIChzdHJlYW0sICIjIGJ1Y2tldHMgdXNlZDogICAgJXUgKCUuMmYlJSlcbiIsIG5fYnVja2V0c191c2VkLAorKwkgICAoMTAwLjAgKiBuX2J1Y2tldHNfdXNlZCkgLyBuX2J1Y2tldHMpOworKyAgZnByaW50ZiAoc3RyZWFtLCAibWF4IGJ1Y2tldCBsZW5ndGg6ICV1XG4iLCBtYXhfYnVja2V0X2xlbmd0aCk7CisrfQorKworKy8qIElmIEVOVFJZIG1hdGNoZXMgYW4gZW50cnkgYWxyZWFkeSBpbiB0aGUgaGFzaCB0YWJsZSwgcmV0dXJuIHRoZQorKyAgIGVudHJ5IGZyb20gdGhlIHRhYmxlLiAgT3RoZXJ3aXNlLCByZXR1cm4gTlVMTC4gICovCisrCisrdm9pZCAqCisraGFzaF9sb29rdXAgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlLCBjb25zdCB2b2lkICplbnRyeSkKKyt7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0CisrICAgID0gdGFibGUtPmJ1Y2tldCArIHRhYmxlLT5oYXNoZXIgKGVudHJ5LCB0YWJsZS0+bl9idWNrZXRzKTsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrCisrICBpZiAoISAoYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdCkpCisrICAgIGFib3J0ICgpOworKworKyAgaWYgKGJ1Y2tldC0+ZGF0YSA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3I7IGN1cnNvciA9IGN1cnNvci0+bmV4dCkKKysgICAgaWYgKHRhYmxlLT5jb21wYXJhdG9yIChlbnRyeSwgY3Vyc29yLT5kYXRhKSkKKysgICAgICByZXR1cm4gY3Vyc29yLT5kYXRhOworKworKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIFdhbGtpbmcuICAqLworKworKy8qIFRoZSBmdW5jdGlvbnMgaW4gdGhpcyBwYWdlIHRyYXZlcnNlIHRoZSBoYXNoIHRhYmxlIGFuZCBwcm9jZXNzIHRoZQorKyAgIGNvbnRhaW5lZCBlbnRyaWVzLiAgRm9yIHRoZSB0cmF2ZXJzYWwgdG8gd29yayBwcm9wZXJseSwgdGhlIGhhc2ggdGFibGUKKysgICBzaG91bGQgbm90IGJlIHJlc2l6ZWQgbm9yIG1vZGlmaWVkIHdoaWxlIGFueSBwYXJ0aWN1bGFyIGVudHJ5IGlzIGJlaW5nCisrICAgcHJvY2Vzc2VkLiAgSW4gcGFydGljdWxhciwgZW50cmllcyBzaG91bGQgbm90IGJlIGFkZGVkIG9yIHJlbW92ZWQuICAqLworKworKy8qIFJldHVybiB0aGUgZmlyc3QgZGF0YSBpbiB0aGUgdGFibGUsIG9yIE5VTEwgaWYgdGhlIHRhYmxlIGlzIGVtcHR5LiAgKi8KKysKKyt2b2lkICoKKytoYXNoX2dldF9maXJzdCAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysKKysgIGlmICh0YWJsZS0+bl9lbnRyaWVzID09IDApCisrICAgIHJldHVybiBOVUxMOworKworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyA7IGJ1Y2tldCsrKQorKyAgICBpZiAoISAoYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdCkpCisrICAgICAgYWJvcnQgKCk7CisrICAgIGVsc2UgaWYgKGJ1Y2tldC0+ZGF0YSkKKysgICAgICByZXR1cm4gYnVja2V0LT5kYXRhOworK30KKysKKysvKiBSZXR1cm4gdGhlIHVzZXIgZGF0YSBmb3IgdGhlIGVudHJ5IGZvbGxvd2luZyBFTlRSWSwgd2hlcmUgRU5UUlkgaGFzIGJlZW4KKysgICByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gZWl0aGVyIGBoYXNoX2dldF9maXJzdCcgb3IgYGhhc2hfZ2V0X25leHQnLgorKyAgIFJldHVybiBOVUxMIGlmIHRoZXJlIGFyZSBubyBtb3JlIGVudHJpZXMuICAqLworKworK3ZvaWQgKgorK2hhc2hfZ2V0X25leHQgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlLCBjb25zdCB2b2lkICplbnRyeSkKKyt7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0CisrICAgID0gdGFibGUtPmJ1Y2tldCArIHRhYmxlLT5oYXNoZXIgKGVudHJ5LCB0YWJsZS0+bl9idWNrZXRzKTsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrCisrICBpZiAoISAoYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdCkpCisrICAgIGFib3J0ICgpOworKworKyAgLyogRmluZCBuZXh0IGVudHJ5IGluIHRoZSBzYW1lIGJ1Y2tldC4gICovCisrICBmb3IgKGN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yOyBjdXJzb3IgPSBjdXJzb3ItPm5leHQpCisrICAgIGlmIChjdXJzb3ItPmRhdGEgPT0gZW50cnkgJiYgY3Vyc29yLT5uZXh0KQorKyAgICAgIHJldHVybiBjdXJzb3ItPm5leHQtPmRhdGE7CisrCisrICAvKiBGaW5kIGZpcnN0IGVudHJ5IGluIGFueSBzdWJzZXF1ZW50IGJ1Y2tldC4gICovCisrICB3aGlsZSAoKytidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0KQorKyAgICBpZiAoYnVja2V0LT5kYXRhKQorKyAgICAgIHJldHVybiBidWNrZXQtPmRhdGE7CisrCisrICAvKiBOb25lIGZvdW5kLiAgKi8KKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBGaWxsIEJVRkZFUiB3aXRoIHBvaW50ZXJzIHRvIGFjdGl2ZSB1c2VyIGVudHJpZXMgaW4gdGhlIGhhc2ggdGFibGUsIHRoZW4KKysgICByZXR1cm4gdGhlIG51bWJlciBvZiBwb2ludGVycyBjb3BpZWQuICBEbyBub3QgY29weSBtb3JlIHRoYW4gQlVGRkVSX1NJWkUKKysgICBwb2ludGVycy4gICovCisrCisrdW5zaWduZWQKKytoYXNoX2dldF9lbnRyaWVzIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSwgdm9pZCAqKmJ1ZmZlciwKKysJCSAgdW5zaWduZWQgYnVmZmVyX3NpemUpCisreworKyAgdW5zaWduZWQgY291bnRlciA9IDA7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKyAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvcjsKKysKKysgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCisrICAgIHsKKysgICAgICBpZiAoYnVja2V0LT5kYXRhKQorKwl7CisrCSAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQorKwkgICAgeworKwkgICAgICBpZiAoY291bnRlciA+PSBidWZmZXJfc2l6ZSkKKysJCXJldHVybiBjb3VudGVyOworKwkgICAgICBidWZmZXJbY291bnRlcisrXSA9IGN1cnNvci0+ZGF0YTsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrICByZXR1cm4gY291bnRlcjsKKyt9CisrCisrLyogQ2FsbCBhIFBST0NFU1NPUiBmdW5jdGlvbiBmb3IgZWFjaCBlbnRyeSBvZiBhIGhhc2ggdGFibGUsIGFuZCByZXR1cm4gdGhlCisrICAgbnVtYmVyIG9mIGVudHJpZXMgZm9yIHdoaWNoIHRoZSBwcm9jZXNzb3IgZnVuY3Rpb24gcmV0dXJuZWQgc3VjY2Vzcy4gIEEKKysgICBwb2ludGVyIHRvIHNvbWUgUFJPQ0VTU09SX0RBVEEgd2hpY2ggd2lsbCBiZSBtYWRlIGF2YWlsYWJsZSB0byBlYWNoIGNhbGwgdG8KKysgICB0aGUgcHJvY2Vzc29yIGZ1bmN0aW9uLiAgVGhlIFBST0NFU1NPUiBhY2NlcHRzIHR3byBhcmd1bWVudHM6IHRoZSBmaXJzdCBpcworKyAgIHRoZSB1c2VyIGVudHJ5IGJlaW5nIHdhbGtlZCBpbnRvLCB0aGUgc2Vjb25kIGlzIHRoZSB2YWx1ZSBvZiBQUk9DRVNTT1JfREFUQQorKyAgIGFzIHJlY2VpdmVkLiAgVGhlIHdhbGtpbmcgY29udGludWUgZm9yIGFzIGxvbmcgYXMgdGhlIFBST0NFU1NPUiBmdW5jdGlvbgorKyAgIHJldHVybnMgbm9uemVyby4gIFdoZW4gaXQgcmV0dXJucyB6ZXJvLCB0aGUgd2Fsa2luZyBpcyBpbnRlcnJ1cHRlZC4gICovCisrCisrdW5zaWduZWQKKytoYXNoX2RvX2Zvcl9lYWNoIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSwgSGFzaF9wcm9jZXNzb3IgcHJvY2Vzc29yLAorKwkJICB2b2lkICpwcm9jZXNzb3JfZGF0YSkKKyt7CisrICB1bnNpZ25lZCBjb3VudGVyID0gMDsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgeworKyAgICAgIGlmIChidWNrZXQtPmRhdGEpCisrCXsKKysJICBmb3IgKGN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yOyBjdXJzb3IgPSBjdXJzb3ItPm5leHQpCisrCSAgICB7CisrCSAgICAgIGlmICghKCpwcm9jZXNzb3IpIChjdXJzb3ItPmRhdGEsIHByb2Nlc3Nvcl9kYXRhKSkKKysJCXJldHVybiBjb3VudGVyOworKwkgICAgICBjb3VudGVyKys7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKyAgcmV0dXJuIGNvdW50ZXI7CisrfQorKworKy8qIEFsbG9jYXRpb24gYW5kIGNsZWFuLXVwLiAgKi8KKysKKysvKiBSZXR1cm4gYSBoYXNoIGluZGV4IGZvciBhIE5VTC10ZXJtaW5hdGVkIFNUUklORyBiZXR3ZWVuIDAgYW5kIE5fQlVDS0VUUy0xLgorKyAgIFRoaXMgaXMgYSBjb252ZW5pZW5jZSByb3V0aW5lIGZvciBjb25zdHJ1Y3Rpbmcgb3RoZXIgaGFzaGluZyBmdW5jdGlvbnMuICAqLworKworKyNpZiBVU0VfRElGRl9IQVNICisrCisrLyogQWJvdXQgaGFzaGluZ3MsIFBhdWwgRWdnZXJ0IHdyaXRlcyB0byBtZSAoRlApLCBvbiAxOTk0LTAxLTAxOiAiUGxlYXNlIHNlZQorKyAgIEIuIEouIE1jS2VuemllLCBSLiBIYXJyaWVzICYgVC4gQmVsbCwgU2VsZWN0aW5nIGEgaGFzaGluZyBhbGdvcml0aG0sCisrICAgU29mdHdhcmUtLXByYWN0aWNlICYgZXhwZXJpZW5jZSAyMCwgMiAoRmViIDE5OTApLCAyMDktMjI0LiAgR29vZCBoYXNoCisrICAgYWxnb3JpdGhtcyB0ZW5kIHRvIGJlIGRvbWFpbi1zcGVjaWZpYywgc28gd2hhdCdzIGdvb2QgZm9yIFtkaWZmdXRpbHMnXSBpby5jCisrICAgbWF5IG5vdCBiZSBnb29kIGZvciB5b3VyIGFwcGxpY2F0aW9uLiIgICovCisrCisrdW5zaWduZWQKKytoYXNoX3N0cmluZyAoY29uc3QgY2hhciAqc3RyaW5nLCB1bnNpZ25lZCBuX2J1Y2tldHMpCisreworKyMgZGVmaW5lIFJPVEFURV9MRUZUKFZhbHVlLCBTaGlmdCkgXAorKyAgKChWYWx1ZSkgPDwgKFNoaWZ0KSB8IChWYWx1ZSkgPj4gKChzaXplb2YgKHVuc2lnbmVkKSAqIENIQVJfQklUKSAtIChTaGlmdCkpKQorKyMgZGVmaW5lIEhBU0hfT05FX0NIQVIoVmFsdWUsIEJ5dGUpIFwKKysgICgoQnl0ZSkgKyBST1RBVEVfTEVGVCAoVmFsdWUsIDcpKQorKworKyAgdW5zaWduZWQgdmFsdWUgPSAwOworKworKyAgZm9yICg7ICpzdHJpbmc7IHN0cmluZysrKQorKyAgICB2YWx1ZSA9IEhBU0hfT05FX0NIQVIgKHZhbHVlLCAqKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc3RyaW5nKTsKKysgIHJldHVybiB2YWx1ZSAlIG5fYnVja2V0czsKKysKKysjIHVuZGVmIFJPVEFURV9MRUZUCisrIyB1bmRlZiBIQVNIX09ORV9DSEFSCisrfQorKworKyNlbHNlIC8qIG5vdCBVU0VfRElGRl9IQVNIICovCisrCisrLyogVGhpcyBvbmUgY29tZXMgZnJvbSBgcmVjb2RlJywgYW5kIHBlcmZvcm1zIGEgYml0IGJldHRlciB0aGFuIHRoZSBhYm92ZSBhcworKyAgIHBlciBhIGZldyBleHBlcmltZW50cy4gIEl0IGlzIGluc3BpcmVkIGZyb20gYSBoYXNoaW5nIHJvdXRpbmUgZm91bmQgaW4gdGhlCisrICAgdmVyeSBvbGQgQ3liZXIgYHNub29wJywgaXRzZWxmIHdyaXR0ZW4gaW4gdHlwaWNhbCBHcmVnIE1hbnNmaWVsZCBzdHlsZS4KKysgICAoQnkgdGhlIHdheSwgd2hhdCBoYXBwZW5lZCB0byB0aGlzIGV4Y2VsbGVudCBtYW4/ICBJcyBoZSBzdGlsbCBhbGl2ZT8pICAqLworKworK3Vuc2lnbmVkCisraGFzaF9zdHJpbmcgKGNvbnN0IGNoYXIgKnN0cmluZywgdW5zaWduZWQgbl9idWNrZXRzKQorK3sKKysgIHVuc2lnbmVkIHZhbHVlID0gMDsKKysKKysgIHdoaWxlICgqc3RyaW5nKQorKyAgICB2YWx1ZSA9ICgodmFsdWUgKiAzMSArIChpbnQpICooY29uc3QgdW5zaWduZWQgY2hhciAqKSBzdHJpbmcrKykKKysJICAgICAlIG5fYnVja2V0cyk7CisrICByZXR1cm4gdmFsdWU7CisrfQorKworKyNlbmRpZiAvKiBub3QgVVNFX0RJRkZfSEFTSCAqLworKworKy8qIFJldHVybiB0cnVlIGlmIENBTkRJREFURSBpcyBhIHByaW1lIG51bWJlci4gIENBTkRJREFURSBzaG91bGQgYmUgYW4gb2RkCisrICAgbnVtYmVyIGF0IGxlYXN0IGVxdWFsIHRvIDExLiAgKi8KKysKKytzdGF0aWMgYm9vbAorK2lzX3ByaW1lICh1bnNpZ25lZCBsb25nIGNhbmRpZGF0ZSkKKyt7CisrICB1bnNpZ25lZCBsb25nIGRpdmlzb3IgPSAzOworKyAgdW5zaWduZWQgbG9uZyBzcXVhcmUgPSBkaXZpc29yICogZGl2aXNvcjsKKysKKysgIHdoaWxlIChzcXVhcmUgPCBjYW5kaWRhdGUgJiYgKGNhbmRpZGF0ZSAlIGRpdmlzb3IpKQorKyAgICB7CisrICAgICAgZGl2aXNvcisrOworKyAgICAgIHNxdWFyZSArPSA0ICogZGl2aXNvcjsKKysgICAgICBkaXZpc29yKys7CisrICAgIH0KKysKKysgIHJldHVybiAoY2FuZGlkYXRlICUgZGl2aXNvciA/IHRydWUgOiBmYWxzZSk7CisrfQorKworKy8qIFJvdW5kIGEgZ2l2ZW4gQ0FORElEQVRFIG51bWJlciB1cCB0byB0aGUgbmVhcmVzdCBwcmltZSwgYW5kIHJldHVybiB0aGF0CisrICAgcHJpbWUuICBQcmltZXMgbG93ZXIgdGhhbiAxMCBhcmUgbWVyZWx5IHNraXBwZWQuICAqLworKworK3N0YXRpYyB1bnNpZ25lZCBsb25nCisrbmV4dF9wcmltZSAodW5zaWduZWQgbG9uZyBjYW5kaWRhdGUpCisreworKyAgLyogU2tpcCBzbWFsbCBwcmltZXMuICAqLworKyAgaWYgKGNhbmRpZGF0ZSA8IDEwKQorKyAgICBjYW5kaWRhdGUgPSAxMDsKKysKKysgIC8qIE1ha2UgaXQgZGVmaW5pdGVseSBvZGQuICAqLworKyAgY2FuZGlkYXRlIHw9IDE7CisrCisrICB3aGlsZSAoIWlzX3ByaW1lIChjYW5kaWRhdGUpKQorKyAgICBjYW5kaWRhdGUgKz0gMjsKKysKKysgIHJldHVybiBjYW5kaWRhdGU7CisrfQorKworK3ZvaWQKKytoYXNoX3Jlc2V0X3R1bmluZyAoSGFzaF90dW5pbmcgKnR1bmluZykKKyt7CisrICAqdHVuaW5nID0gZGVmYXVsdF90dW5pbmc7CisrfQorKworKy8qIEZvciB0aGUgZ2l2ZW4gaGFzaCBUQUJMRSwgY2hlY2sgdGhlIHVzZXIgc3VwcGxpZWQgdHVuaW5nIHN0cnVjdHVyZSBmb3IKKysgICByZWFzb25hYmxlIHZhbHVlcywgYW5kIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIG5vIGdyb3NzIGVycm9yIHdpdGggaXQuCisrICAgT3RoZXJ3aXNlLCBkZWZpbml0aXZlbHkgcmVzZXQgdGhlIFRVTklORyBmaWVsZCB0byBzb21lIGFjY2VwdGFibGUgZGVmYXVsdAorKyAgIGluIHRoZSBoYXNoIHRhYmxlICh0aGF0IGlzLCB0aGUgdXNlciBsb3NlcyB0aGUgcmlnaHQgb2YgZnVydGhlciBtb2RpZnlpbmcKKysgICB0dW5pbmcgYXJndW1lbnRzKSwgYW5kIHJldHVybiBmYWxzZS4gICovCisrCisrc3RhdGljIGJvb2wKKytjaGVja190dW5pbmcgKEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIGNvbnN0IEhhc2hfdHVuaW5nICp0dW5pbmcgPSB0YWJsZS0+dHVuaW5nOworKworKyAgaWYgKHR1bmluZy0+Z3Jvd3RoX3RocmVzaG9sZCA+IDAuMAorKyAgICAgICYmIHR1bmluZy0+Z3Jvd3RoX3RocmVzaG9sZCA8IDEuMAorKyAgICAgICYmIHR1bmluZy0+Z3Jvd3RoX2ZhY3RvciA+IDEuMAorKyAgICAgICYmIHR1bmluZy0+c2hyaW5rX3RocmVzaG9sZCA+PSAwLjAKKysgICAgICAmJiB0dW5pbmctPnNocmlua190aHJlc2hvbGQgPCAxLjAKKysgICAgICAmJiB0dW5pbmctPnNocmlua19mYWN0b3IgPiB0dW5pbmctPnNocmlua190aHJlc2hvbGQKKysgICAgICAmJiB0dW5pbmctPnNocmlua19mYWN0b3IgPD0gMS4wCisrICAgICAgJiYgdHVuaW5nLT5zaHJpbmtfdGhyZXNob2xkIDwgdHVuaW5nLT5ncm93dGhfdGhyZXNob2xkKQorKyAgICByZXR1cm4gdHJ1ZTsKKysKKysgIHRhYmxlLT50dW5pbmcgPSAmZGVmYXVsdF90dW5pbmc7CisrICByZXR1cm4gZmFsc2U7CisrfQorKworKy8qIEFsbG9jYXRlIGFuZCByZXR1cm4gYSBuZXcgaGFzaCB0YWJsZSwgb3IgTlVMTCB1cG9uIGZhaWx1cmUuICBUaGUgaW5pdGlhbAorKyAgIG51bWJlciBvZiBidWNrZXRzIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgc28gYXMgdG8gX2d1YXJhbnRlZV8gdGhhdCB5b3UKKysgICBtYXkgaW5zZXJ0IGF0IGxlYXN0IENBTkRJREFURSBkaWZmZXJlbnQgdXNlciBlbnRyaWVzIGJlZm9yZSBhbnkgZ3Jvd3RoIG9mCisrICAgdGhlIGhhc2ggdGFibGUgc2l6ZSBvY2N1cnMuICBTbywgaWYgaGF2ZSBhIHJlYXNvbmFibHkgdGlnaHQgYS1wcmlvcmkgdXBwZXIKKysgICBib3VuZCBvbiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgeW91IGludGVuZCB0byBpbnNlcnQgaW4gdGhlIGhhc2ggdGFibGUsIHlvdQorKyAgIG1heSBzYXZlIHNvbWUgdGFibGUgbWVtb3J5IGFuZCBpbnNlcnRpb24gdGltZSwgYnkgc3BlY2lmeWluZyBpdCBoZXJlLiAgSWYKKysgICB0aGUgSVNfTl9CVUNLRVRTIGZpZWxkIG9mIHRoZSBUVU5JTkcgc3RydWN0dXJlIGlzIHRydWUsIHRoZSBDQU5ESURBVEUKKysgICBhcmd1bWVudCBoYXMgaXRzIG1lYW5pbmcgY2hhbmdlZCB0byB0aGUgd2FudGVkIG51bWJlciBvZiBidWNrZXRzLgorKworKyAgIFRVTklORyBwb2ludHMgdG8gYSBzdHJ1Y3R1cmUgb2YgdXNlci1zdXBwbGllZCB2YWx1ZXMsIGluIGNhc2Ugc29tZSBmaW5lCisrICAgdHVuaW5nIGlzIHdhbnRlZCBvdmVyIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBoYXNoZXIuICBJZiBUVU5JTkcgaXMKKysgICBOVUxMLCB0aGUgZGVmYXVsdCB0dW5pbmcgcGFyYW1ldGVycyBhcmUgdXNlZCBpbnN0ZWFkLgorKworKyAgIFRoZSB1c2VyLXN1cHBsaWVkIEhBU0hFUiBmdW5jdGlvbiBzaG91bGQgYmUgcHJvdmlkZWQuICBJdCBhY2NlcHRzIHR3bworKyAgIGFyZ3VtZW50cyBFTlRSWSBhbmQgVEFCTEVfU0laRS4gIEl0IGNvbXB1dGVzLCBieSBoYXNoaW5nIEVOVFJZIGNvbnRlbnRzLCBhCisrICAgc2xvdCBudW1iZXIgZm9yIHRoYXQgZW50cnkgd2hpY2ggc2hvdWxkIGJlIGluIHRoZSByYW5nZSAwLi5UQUJMRV9TSVpFLTEuCisrICAgVGhpcyBzbG90IG51bWJlciBpcyB0aGVuIHJldHVybmVkLgorKworKyAgIFRoZSB1c2VyLXN1cHBsaWVkIENPTVBBUkFUT1IgZnVuY3Rpb24gc2hvdWxkIGJlIHByb3ZpZGVkLiAgSXQgYWNjZXB0cyB0d28KKysgICBhcmd1bWVudHMgcG9pbnRpbmcgdG8gdXNlciBkYXRhLCBpdCB0aGVuIHJldHVybnMgdHJ1ZSBmb3IgYSBwYWlyIG9mIGVudHJpZXMKKysgICB0aGF0IGNvbXBhcmUgZXF1YWwsIG9yIGZhbHNlIG90aGVyd2lzZS4gIFRoaXMgZnVuY3Rpb24gaXMgaW50ZXJuYWxseSBjYWxsZWQKKysgICBvbiBlbnRyaWVzIHdoaWNoIGFyZSBhbHJlYWR5IGtub3duIHRvIGhhc2ggdG8gdGhlIHNhbWUgYnVja2V0IGluZGV4LgorKworKyAgIFRoZSB1c2VyLXN1cHBsaWVkIERBVEFfRlJFRVIgZnVuY3Rpb24sIHdoZW4gbm90IE5VTEwsIG1heSBiZSBsYXRlciBjYWxsZWQKKysgICB3aXRoIHRoZSB1c2VyIGRhdGEgYXMgYW4gYXJndW1lbnQsIGp1c3QgYmVmb3JlIHRoZSBlbnRyeSBjb250YWluaW5nIHRoZQorKyAgIGRhdGEgZ2V0cyBmcmVlZC4gIFRoaXMgaGFwcGVucyBmcm9tIHdpdGhpbiBgaGFzaF9mcmVlJyBvciBgaGFzaF9jbGVhcicuCisrICAgWW91IHNob3VsZCBzcGVjaWZ5IHRoaXMgZnVuY3Rpb24gb25seSBpZiB5b3Ugd2FudCB0aGVzZSBmdW5jdGlvbnMgdG8gZnJlZQorKyAgIGFsbCBvZiB5b3VyIGBkYXRhJyBkYXRhLiAgVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGNhc2Ugd2hlbiB5b3VyIGRhdGEgaXMKKysgICBzaW1wbHkgYW4gYXV4aWxpYXJ5IHN0cnVjdCB0aGF0IHlvdSBoYXZlIG1hbGxvYydkIHRvIGFnZ3JlZ2F0ZSBzZXZlcmFsCisrICAgdmFsdWVzLiAgKi8KKysKKytIYXNoX3RhYmxlICoKKytoYXNoX2luaXRpYWxpemUgKHVuc2lnbmVkIGNhbmRpZGF0ZSwgY29uc3QgSGFzaF90dW5pbmcgKnR1bmluZywKKysJCSBIYXNoX2hhc2hlciBoYXNoZXIsIEhhc2hfY29tcGFyYXRvciBjb21wYXJhdG9yLAorKwkJIEhhc2hfZGF0YV9mcmVlciBkYXRhX2ZyZWVyKQorK3sKKysgIEhhc2hfdGFibGUgKnRhYmxlOworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysKKysgIGlmIChoYXNoZXIgPT0gTlVMTCB8fCBjb21wYXJhdG9yID09IE5VTEwpCisrICAgIHJldHVybiBOVUxMOworKworKyAgdGFibGUgPSAoSGFzaF90YWJsZSAqKSBtYWxsb2MgKHNpemVvZiAoSGFzaF90YWJsZSkpOworKyAgaWYgKHRhYmxlID09IE5VTEwpCisrICAgIHJldHVybiBOVUxMOworKworKyAgaWYgKCF0dW5pbmcpCisrICAgIHR1bmluZyA9ICZkZWZhdWx0X3R1bmluZzsKKysgIHRhYmxlLT50dW5pbmcgPSB0dW5pbmc7CisrICBpZiAoIWNoZWNrX3R1bmluZyAodGFibGUpKQorKyAgICB7CisrICAgICAgLyogRmFpbCBpZiB0aGUgdHVuaW5nIG9wdGlvbnMgYXJlIGludmFsaWQuICBUaGlzIGlzIHRoZSBvbmx5IG9jY2FzaW9uCisrCSB3aGVuIHRoZSB1c2VyIGdldHMgc29tZSBmZWVkYmFjayBhYm91dCBpdC4gIE9uY2UgdGhlIHRhYmxlIGlzIGNyZWF0ZWQsCisrCSBpZiB0aGUgdXNlciBwcm92aWRlcyBpbnZhbGlkIHR1bmluZyBvcHRpb25zLCB3ZSBzaWxlbnRseSByZXZlcnQgdG8KKysJIHVzaW5nIHRoZSBkZWZhdWx0cywgYW5kIGlnbm9yZSBmdXJ0aGVyIHJlcXVlc3QgdG8gY2hhbmdlIHRoZSB0dW5pbmcKKysJIG9wdGlvbnMuICAqLworKyAgICAgIGZyZWUgKHRhYmxlKTsKKysgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKworKyAgdGFibGUtPm5fYnVja2V0cworKyAgICA9IG5leHRfcHJpbWUgKHR1bmluZy0+aXNfbl9idWNrZXRzID8gY2FuZGlkYXRlCisrCQkgIDogKHVuc2lnbmVkKSAoY2FuZGlkYXRlIC8gdHVuaW5nLT5ncm93dGhfdGhyZXNob2xkKSk7CisrCisrICB0YWJsZS0+YnVja2V0ID0gKHN0cnVjdCBoYXNoX2VudHJ5ICopCisrICAgIG1hbGxvYyAodGFibGUtPm5fYnVja2V0cyAqIHNpemVvZiAoc3RydWN0IGhhc2hfZW50cnkpKTsKKysgIGlmICh0YWJsZS0+YnVja2V0ID09IE5VTEwpCisrICAgIHsKKysgICAgICBmcmVlICh0YWJsZSk7CisrICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysgIHRhYmxlLT5idWNrZXRfbGltaXQgPSB0YWJsZS0+YnVja2V0ICsgdGFibGUtPm5fYnVja2V0czsKKysKKysgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCisrICAgIHsKKysgICAgICBidWNrZXQtPmRhdGEgPSBOVUxMOworKyAgICAgIGJ1Y2tldC0+bmV4dCA9IE5VTEw7CisrICAgIH0KKysgIHRhYmxlLT5uX2J1Y2tldHNfdXNlZCA9IDA7CisrICB0YWJsZS0+bl9lbnRyaWVzID0gMDsKKysKKysgIHRhYmxlLT5oYXNoZXIgPSBoYXNoZXI7CisrICB0YWJsZS0+Y29tcGFyYXRvciA9IGNvbXBhcmF0b3I7CisrICB0YWJsZS0+ZGF0YV9mcmVlciA9IGRhdGFfZnJlZXI7CisrCisrICB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0ID0gTlVMTDsKKysjaWYgVVNFX09CU1RBQ0sKKysgIG9ic3RhY2tfaW5pdCAoJnRhYmxlLT5lbnRyeV9zdGFjayk7CisrI2VuZGlmCisrICByZXR1cm4gdGFibGU7CisrfQorKworKy8qIE1ha2UgYWxsIGJ1Y2tldHMgZW1wdHksIHBsYWNpbmcgYW55IGNoYWluZWQgZW50cmllcyBvbiB0aGUgZnJlZSBsaXN0LgorKyAgIEFwcGx5IHRoZSB1c2VyLXNwZWNpZmllZCBmdW5jdGlvbiBkYXRhX2ZyZWVyIChpZiBhbnkpIHRvIHRoZSBkYXRhcyBvZiBhbnkKKysgICBhZmZlY3RlZCBlbnRyaWVzLiAgKi8KKysKKyt2b2lkCisraGFzaF9jbGVhciAoSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysKKysgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCisrICAgIHsKKysgICAgICBpZiAoYnVja2V0LT5kYXRhKQorKwl7CisrCSAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvcjsKKysJICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV4dDsKKysKKysJICAvKiBGcmVlIHRoZSBidWNrZXQgb3ZlcmZsb3cuICAqLworKwkgIGZvciAoY3Vyc29yID0gYnVja2V0LT5uZXh0OyBjdXJzb3I7IGN1cnNvciA9IG5leHQpCisrCSAgICB7CisrCSAgICAgIGlmICh0YWJsZS0+ZGF0YV9mcmVlcikKKysJCSgqdGFibGUtPmRhdGFfZnJlZXIpIChjdXJzb3ItPmRhdGEpOworKwkgICAgICBjdXJzb3ItPmRhdGEgPSBOVUxMOworKworKwkgICAgICBuZXh0ID0gY3Vyc29yLT5uZXh0OworKwkgICAgICAvKiBSZWxpbmtpbmcgaXMgZG9uZSBvbmUgZW50cnkgYXQgYSB0aW1lLCBhcyBpdCBpcyB0byBiZSBleHBlY3RlZAorKwkJIHRoYXQgb3ZlcmZsb3dzIGFyZSBlaXRoZXIgcmFyZSBvciBzaG9ydC4gICovCisrCSAgICAgIGN1cnNvci0+bmV4dCA9IHRhYmxlLT5mcmVlX2VudHJ5X2xpc3Q7CisrCSAgICAgIHRhYmxlLT5mcmVlX2VudHJ5X2xpc3QgPSBjdXJzb3I7CisrCSAgICB9CisrCisrCSAgLyogRnJlZSB0aGUgYnVja2V0IGhlYWQuICAqLworKwkgIGlmICh0YWJsZS0+ZGF0YV9mcmVlcikKKysJICAgICgqdGFibGUtPmRhdGFfZnJlZXIpIChidWNrZXQtPmRhdGEpOworKwkgIGJ1Y2tldC0+ZGF0YSA9IE5VTEw7CisrCSAgYnVja2V0LT5uZXh0ID0gTlVMTDsKKysJfQorKyAgICB9CisrCisrICB0YWJsZS0+bl9idWNrZXRzX3VzZWQgPSAwOworKyAgdGFibGUtPm5fZW50cmllcyA9IDA7CisrfQorKworKy8qIFJlY2xhaW0gYWxsIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIGEgaGFzaCB0YWJsZS4gIElmIGEgZGF0YV9mcmVlcgorKyAgIGZ1bmN0aW9uIGhhcyBiZWVuIHN1cHBsaWVkIGJ5IHRoZSB1c2VyIHdoZW4gdGhlIGhhc2ggdGFibGUgd2FzIGNyZWF0ZWQsCisrICAgdGhpcyBmdW5jdGlvbiBhcHBsaWVzIGl0IHRvIHRoZSBkYXRhIG9mIGVhY2ggZW50cnkgYmVmb3JlIGZyZWVpbmcgdGhhdAorKyAgIGVudHJ5LiAgKi8KKysKKyt2b2lkCisraGFzaF9mcmVlIChIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKyAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvcjsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0OworKworKyAgLyogQ2FsbCB0aGUgdXNlciBkYXRhX2ZyZWVyIGZ1bmN0aW9uLiAgKi8KKysgIGlmICh0YWJsZS0+ZGF0YV9mcmVlciAmJiB0YWJsZS0+bl9lbnRyaWVzKQorKyAgICB7CisrICAgICAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysJeworKwkgIGlmIChidWNrZXQtPmRhdGEpCisrCSAgICB7CisrCSAgICAgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3I7IGN1cnNvciA9IGN1cnNvci0+bmV4dCkKKysJCXsKKysJCSAgKCp0YWJsZS0+ZGF0YV9mcmVlcikgKGN1cnNvci0+ZGF0YSk7CisrCQl9CisrCSAgICB9CisrCX0KKysgICAgfQorKworKyNpZiBVU0VfT0JTVEFDSworKworKyAgb2JzdGFja19mcmVlICgmdGFibGUtPmVudHJ5X3N0YWNrLCBOVUxMKTsKKysKKysjZWxzZQorKworKyAgLyogRnJlZSBhbGwgYnVja2V0IG92ZXJmbG93ZWQgZW50cmllcy4gICovCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICB7CisrICAgICAgZm9yIChjdXJzb3IgPSBidWNrZXQtPm5leHQ7IGN1cnNvcjsgY3Vyc29yID0gbmV4dCkKKysJeworKwkgIG5leHQgPSBjdXJzb3ItPm5leHQ7CisrCSAgZnJlZSAoY3Vyc29yKTsKKysJfQorKyAgICB9CisrCisrICAvKiBBbHNvIHJlY2xhaW0gdGhlIGludGVybmFsIGxpc3Qgb2YgcHJldmlvdXNseSBmcmVlZCBlbnRyaWVzLiAgKi8KKysgIGZvciAoY3Vyc29yID0gdGFibGUtPmZyZWVfZW50cnlfbGlzdDsgY3Vyc29yOyBjdXJzb3IgPSBuZXh0KQorKyAgICB7CisrICAgICAgbmV4dCA9IGN1cnNvci0+bmV4dDsKKysgICAgICBmcmVlIChjdXJzb3IpOworKyAgICB9CisrCisrI2VuZGlmCisrCisrICAvKiBGcmVlIHRoZSByZW1haW5kZXIgb2YgdGhlIGhhc2ggdGFibGUgc3RydWN0dXJlLiAgKi8KKysgIGZyZWUgKHRhYmxlLT5idWNrZXQpOworKyAgZnJlZSAodGFibGUpOworK30KKysKKysvKiBJbnNlcnRpb24gYW5kIGRlbGV0aW9uLiAgKi8KKysKKysvKiBHZXQgYSBuZXcgaGFzaCBlbnRyeSBmb3IgYSBidWNrZXQgb3ZlcmZsb3csIHBvc3NpYmx5IGJ5IHJlY2x5aW5nIGEKKysgICBwcmV2aW91c2x5IGZyZWVkIG9uZS4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBhbGxvY2F0ZSBhIG5ldyBvbmUuICAqLworKworK3N0YXRpYyBzdHJ1Y3QgaGFzaF9lbnRyeSAqCisrYWxsb2NhdGVfZW50cnkgKEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXc7CisrCisrICBpZiAodGFibGUtPmZyZWVfZW50cnlfbGlzdCkKKysgICAgeworKyAgICAgIG5ldyA9IHRhYmxlLT5mcmVlX2VudHJ5X2xpc3Q7CisrICAgICAgdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IG5ldy0+bmV4dDsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrI2lmIFVTRV9PQlNUQUNLCisrICAgICAgbmV3ID0gKHN0cnVjdCBoYXNoX2VudHJ5ICopCisrCW9ic3RhY2tfYWxsb2MgKCZ0YWJsZS0+ZW50cnlfc3RhY2ssIHNpemVvZiAoc3RydWN0IGhhc2hfZW50cnkpKTsKKysjZWxzZQorKyAgICAgIG5ldyA9IChzdHJ1Y3QgaGFzaF9lbnRyeSAqKSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGhhc2hfZW50cnkpKTsKKysjZW5kaWYKKysgICAgfQorKworKyAgcmV0dXJuIG5ldzsKKyt9CisrCisrLyogRnJlZSBhIGhhc2ggZW50cnkgd2hpY2ggd2FzIHBhcnQgb2Ygc29tZSBidWNrZXQgb3ZlcmZsb3csCisrICAgc2F2aW5nIGl0IGZvciBsYXRlciByZWN5Y2xpbmcuICAqLworKworK3N0YXRpYyB2b2lkCisrZnJlZV9lbnRyeSAoSGFzaF90YWJsZSAqdGFibGUsIHN0cnVjdCBoYXNoX2VudHJ5ICplbnRyeSkKKyt7CisrICBlbnRyeS0+ZGF0YSA9IE5VTEw7CisrICBlbnRyeS0+bmV4dCA9IHRhYmxlLT5mcmVlX2VudHJ5X2xpc3Q7CisrICB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0ID0gZW50cnk7CisrfQorKworKy8qIFRoaXMgcHJpdmF0ZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGhlbHAgd2l0aCBpbnNlcnRpb24gYW5kIGRlbGV0aW9uLiAgV2hlbgorKyAgIEVOVFJZIG1hdGNoZXMgYW4gZW50cnkgaW4gdGhlIHRhYmxlLCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjb3JyZXNwb25kaW5nCisrICAgdXNlciBkYXRhIGFuZCBzZXQgKkJVQ0tFVF9IRUFEIHRvIHRoZSBoZWFkIG9mIHRoZSBzZWxlY3RlZCBidWNrZXQuCisrICAgT3RoZXJ3aXNlLCByZXR1cm4gTlVMTC4gIFdoZW4gREVMRVRFIGlzIHRydWUgYW5kIEVOVFJZIG1hdGNoZXMgYW4gZW50cnkgaW4KKysgICB0aGUgdGFibGUsIHVubGluayB0aGUgbWF0Y2hpbmcgZW50cnkuICAqLworKworK3N0YXRpYyB2b2lkICoKKytoYXNoX2ZpbmRfZW50cnkgKEhhc2hfdGFibGUgKnRhYmxlLCBjb25zdCB2b2lkICplbnRyeSwKKysJCSBzdHJ1Y3QgaGFzaF9lbnRyeSAqKmJ1Y2tldF9oZWFkLCBib29sIGRlbGV0ZSkKKyt7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0CisrICAgID0gdGFibGUtPmJ1Y2tldCArIHRhYmxlLT5oYXNoZXIgKGVudHJ5LCB0YWJsZS0+bl9idWNrZXRzKTsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrCisrICBpZiAoISAoYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdCkpCisrICAgIGFib3J0ICgpOworKworKyAgKmJ1Y2tldF9oZWFkID0gYnVja2V0OworKworKyAgLyogVGVzdCBmb3IgZW1wdHkgYnVja2V0LiAgKi8KKysgIGlmIChidWNrZXQtPmRhdGEgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICAvKiBTZWUgaWYgdGhlIGVudHJ5IGlzIHRoZSBmaXJzdCBpbiB0aGUgYnVja2V0LiAgKi8KKysgIGlmICgoKnRhYmxlLT5jb21wYXJhdG9yKSAoZW50cnksIGJ1Y2tldC0+ZGF0YSkpCisrICAgIHsKKysgICAgICB2b2lkICpkYXRhID0gYnVja2V0LT5kYXRhOworKworKyAgICAgIGlmIChkZWxldGUpCisrCXsKKysJICBpZiAoYnVja2V0LT5uZXh0KQorKwkgICAgeworKwkgICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV4dCA9IGJ1Y2tldC0+bmV4dDsKKysKKysJICAgICAgLyogQnVtcCB0aGUgZmlyc3Qgb3ZlcmZsb3cgZW50cnkgaW50byB0aGUgYnVja2V0IGhlYWQsIHRoZW4gc2F2ZQorKwkJIHRoZSBwcmV2aW91cyBmaXJzdCBvdmVyZmxvdyBlbnRyeSBmb3IgbGF0ZXIgcmVjeWNsaW5nLiAgKi8KKysJICAgICAgKmJ1Y2tldCA9ICpuZXh0OworKwkgICAgICBmcmVlX2VudHJ5ICh0YWJsZSwgbmV4dCk7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBidWNrZXQtPmRhdGEgPSBOVUxMOworKwkgICAgfQorKwl9CisrCisrICAgICAgcmV0dXJuIGRhdGE7CisrICAgIH0KKysKKysgIC8qIFNjYW4gdGhlIGJ1Y2tldCBvdmVyZmxvdy4gICovCisrICBmb3IgKGN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yLT5uZXh0OyBjdXJzb3IgPSBjdXJzb3ItPm5leHQpCisrICAgIHsKKysgICAgICBpZiAoKCp0YWJsZS0+Y29tcGFyYXRvcikgKGVudHJ5LCBjdXJzb3ItPm5leHQtPmRhdGEpKQorKwl7CisrCSAgdm9pZCAqZGF0YSA9IGN1cnNvci0+bmV4dC0+ZGF0YTsKKysKKysJICBpZiAoZGVsZXRlKQorKwkgICAgeworKwkgICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV4dCA9IGN1cnNvci0+bmV4dDsKKysKKysJICAgICAgLyogVW5saW5rIHRoZSBlbnRyeSB0byBkZWxldGUsIHRoZW4gc2F2ZSB0aGUgZnJlZWQgZW50cnkgZm9yIGxhdGVyCisrCQkgcmVjeWNsaW5nLiAgKi8KKysJICAgICAgY3Vyc29yLT5uZXh0ID0gbmV4dC0+bmV4dDsKKysJICAgICAgZnJlZV9lbnRyeSAodGFibGUsIG5leHQpOworKwkgICAgfQorKworKwkgIHJldHVybiBkYXRhOworKwl9CisrICAgIH0KKysKKysgIC8qIE5vIGVudHJ5IGZvdW5kLiAgKi8KKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBGb3IgYW4gYWxyZWFkeSBleGlzdGluZyBoYXNoIHRhYmxlLCBjaGFuZ2UgdGhlIG51bWJlciBvZiBidWNrZXRzIHRocm91Z2gKKysgICBzcGVjaWZ5aW5nIENBTkRJREFURS4gIFRoZSBjb250ZW50cyBvZiB0aGUgaGFzaCB0YWJsZSBhcmUgcHJlc2VydmVkLiAgVGhlCisrICAgbmV3IG51bWJlciBvZiBidWNrZXRzIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgc28gYXMgdG8gX2d1YXJhbnRlZV8gdGhhdAorKyAgIHRoZSB0YWJsZSBtYXkgcmVjZWl2ZSBhdCBsZWFzdCBDQU5ESURBVEUgZGlmZmVyZW50IHVzZXIgZW50cmllcywgaW5jbHVkaW5nCisrICAgdGhvc2UgYWxyZWFkeSBpbiB0aGUgdGFibGUsIGJlZm9yZSBhbnkgb3RoZXIgZ3Jvd3RoIG9mIHRoZSBoYXNoIHRhYmxlIHNpemUKKysgICBvY2N1cnMuICBJZiBUVU5JTkctPklTX05fQlVDS0VUUyBpcyB0cnVlLCB0aGVuIENBTkRJREFURSBzcGVjaWZpZXMgdGhlCisrICAgZXhhY3QgbnVtYmVyIG9mIGJ1Y2tldHMgZGVzaXJlZC4gICovCisrCisrYm9vbAorK2hhc2hfcmVoYXNoIChIYXNoX3RhYmxlICp0YWJsZSwgdW5zaWduZWQgY2FuZGlkYXRlKQorK3sKKysgIEhhc2hfdGFibGUgKm5ld190YWJsZTsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKyAgc3RydWN0IGhhc2hfZW50cnkgKm5leHQ7CisrCisrICBuZXdfdGFibGUgPSBoYXNoX2luaXRpYWxpemUgKGNhbmRpZGF0ZSwgdGFibGUtPnR1bmluZywgdGFibGUtPmhhc2hlciwKKysJCQkgICAgICAgdGFibGUtPmNvbXBhcmF0b3IsIHRhYmxlLT5kYXRhX2ZyZWVyKTsKKysgIGlmIChuZXdfdGFibGUgPT0gTlVMTCkKKysgICAgcmV0dXJuIGZhbHNlOworKworKyAgLyogTWVyZWx5IHJldXNlIHRoZSBleHRyYSBvbGQgc3BhY2UgaW50byB0aGUgbmV3IHRhYmxlLiAgKi8KKysjaWYgVVNFX09CU1RBQ0sKKysgIG9ic3RhY2tfZnJlZSAoJm5ld190YWJsZS0+ZW50cnlfc3RhY2ssIE5VTEwpOworKyAgbmV3X3RhYmxlLT5lbnRyeV9zdGFjayA9IHRhYmxlLT5lbnRyeV9zdGFjazsKKysjZW5kaWYKKysgIG5ld190YWJsZS0+ZnJlZV9lbnRyeV9saXN0ID0gdGFibGUtPmZyZWVfZW50cnlfbGlzdDsKKysKKysgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCisrICAgIGlmIChidWNrZXQtPmRhdGEpCisrICAgICAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gbmV4dCkKKysJeworKwkgIHZvaWQgKmRhdGEgPSBjdXJzb3ItPmRhdGE7CisrCSAgc3RydWN0IGhhc2hfZW50cnkgKm5ld19idWNrZXQKKysJICAgID0gKG5ld190YWJsZS0+YnVja2V0CisrCSAgICAgICArIG5ld190YWJsZS0+aGFzaGVyIChkYXRhLCBuZXdfdGFibGUtPm5fYnVja2V0cykpOworKworKwkgIGlmICghIChuZXdfYnVja2V0IDwgbmV3X3RhYmxlLT5idWNrZXRfbGltaXQpKQorKwkgICAgYWJvcnQgKCk7CisrCisrCSAgbmV4dCA9IGN1cnNvci0+bmV4dDsKKysKKysJICBpZiAobmV3X2J1Y2tldC0+ZGF0YSkKKysJICAgIHsKKysJICAgICAgaWYgKGN1cnNvciA9PSBidWNrZXQpCisrCQl7CisrCQkgIC8qIEFsbG9jYXRlIG9yIHJlY3ljbGUgYW4gZW50cnksIHdoZW4gbW92aW5nIGZyb20gYSBidWNrZXQKKysJCSAgICAgaGVhZGVyIGludG8gYSBidWNrZXQgb3ZlcmZsb3cuICAqLworKwkJICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV3X2VudHJ5ID0gYWxsb2NhdGVfZW50cnkgKG5ld190YWJsZSk7CisrCisrCQkgIGlmIChuZXdfZW50cnkgPT0gTlVMTCkKKysJCSAgICByZXR1cm4gZmFsc2U7CisrCisrCQkgIG5ld19lbnRyeS0+ZGF0YSA9IGRhdGE7CisrCQkgIG5ld19lbnRyeS0+bmV4dCA9IG5ld19idWNrZXQtPm5leHQ7CisrCQkgIG5ld19idWNrZXQtPm5leHQgPSBuZXdfZW50cnk7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgLyogTWVyZWx5IHJlbGluayBhbiBleGlzdGluZyBlbnRyeSwgd2hlbiBtb3ZpbmcgZnJvbSBhCisrCQkgICAgIGJ1Y2tldCBvdmVyZmxvdyBpbnRvIGEgYnVja2V0IG92ZXJmbG93LiAgKi8KKysJCSAgY3Vyc29yLT5uZXh0ID0gbmV3X2J1Y2tldC0+bmV4dDsKKysJCSAgbmV3X2J1Y2tldC0+bmV4dCA9IGN1cnNvcjsKKysJCX0KKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIC8qIEZyZWUgYW4gZXhpc3RpbmcgZW50cnksIHdoZW4gbW92aW5nIGZyb20gYSBidWNrZXQKKysJCSBvdmVyZmxvdyBpbnRvIGEgYnVja2V0IGhlYWRlci4gIEFsc28gdGFrZSBjYXJlIG9mIHRoZQorKwkJIHNpbXBsZSBjYXNlIG9mIG1vdmluZyBmcm9tIGEgYnVja2V0IGhlYWRlciBpbnRvIGEgYnVja2V0CisrCQkgaGVhZGVyLiAgKi8KKysJICAgICAgbmV3X2J1Y2tldC0+ZGF0YSA9IGRhdGE7CisrCSAgICAgIG5ld190YWJsZS0+bl9idWNrZXRzX3VzZWQrKzsKKysJICAgICAgaWYgKGN1cnNvciAhPSBidWNrZXQpCisrCQlmcmVlX2VudHJ5IChuZXdfdGFibGUsIGN1cnNvcik7CisrCSAgICB9CisrCX0KKysKKysgIGZyZWUgKHRhYmxlLT5idWNrZXQpOworKyAgdGFibGUtPmJ1Y2tldCA9IG5ld190YWJsZS0+YnVja2V0OworKyAgdGFibGUtPmJ1Y2tldF9saW1pdCA9IG5ld190YWJsZS0+YnVja2V0X2xpbWl0OworKyAgdGFibGUtPm5fYnVja2V0cyA9IG5ld190YWJsZS0+bl9idWNrZXRzOworKyAgdGFibGUtPm5fYnVja2V0c191c2VkID0gbmV3X3RhYmxlLT5uX2J1Y2tldHNfdXNlZDsKKysgIHRhYmxlLT5mcmVlX2VudHJ5X2xpc3QgPSBuZXdfdGFibGUtPmZyZWVfZW50cnlfbGlzdDsKKysgIC8qIHRhYmxlLT5uX2VudHJpZXMgYWxyZWFkeSBob2xkcyBpdHMgdmFsdWUuICAqLworKyNpZiBVU0VfT0JTVEFDSworKyAgdGFibGUtPmVudHJ5X3N0YWNrID0gbmV3X3RhYmxlLT5lbnRyeV9zdGFjazsKKysjZW5kaWYKKysgIGZyZWUgKG5ld190YWJsZSk7CisrCisrICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrLyogSWYgRU5UUlkgbWF0Y2hlcyBhbiBlbnRyeSBhbHJlYWR5IGluIHRoZSBoYXNoIHRhYmxlLCByZXR1cm4gdGhlIHBvaW50ZXIKKysgICB0byB0aGUgZW50cnkgZnJvbSB0aGUgdGFibGUuICBPdGhlcndpc2UsIGluc2VydCBFTlRSWSBhbmQgcmV0dXJuIEVOVFJZLgorKyAgIFJldHVybiBOVUxMIGlmIHRoZSBzdG9yYWdlIHJlcXVpcmVkIGZvciBpbnNlcnRpb24gY2Fubm90IGJlIGFsbG9jYXRlZC4gICovCisrCisrdm9pZCAqCisraGFzaF9pbnNlcnQgKEhhc2hfdGFibGUgKnRhYmxlLCBjb25zdCB2b2lkICplbnRyeSkKKyt7CisrICB2b2lkICpkYXRhOworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysKKysgIC8qIFRoZSBjYWxsZXIgY2Fubm90IGluc2VydCBhIE5VTEwgZW50cnkuICAqLworKyAgaWYgKCEgZW50cnkpCisrICAgIGFib3J0ICgpOworKworKyAgLyogSWYgdGhlcmUncyBhIG1hdGNoaW5nIGVudHJ5IGFscmVhZHkgaW4gdGhlIHRhYmxlLCByZXR1cm4gdGhhdC4gICovCisrICBpZiAoKGRhdGEgPSBoYXNoX2ZpbmRfZW50cnkgKHRhYmxlLCBlbnRyeSwgJmJ1Y2tldCwgZmFsc2UpKSAhPSBOVUxMKQorKyAgICByZXR1cm4gZGF0YTsKKysKKysgIC8qIEVOVFJZIGlzIG5vdCBtYXRjaGVkLCBpdCBzaG91bGQgYmUgaW5zZXJ0ZWQuICAqLworKworKyAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysgICAgeworKyAgICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXdfZW50cnkgPSBhbGxvY2F0ZV9lbnRyeSAodGFibGUpOworKworKyAgICAgIGlmIChuZXdfZW50cnkgPT0gTlVMTCkKKysJcmV0dXJuIE5VTEw7CisrCisrICAgICAgLyogQWRkIEVOVFJZIGluIHRoZSBvdmVyZmxvdyBvZiB0aGUgYnVja2V0LiAgKi8KKysKKysgICAgICBuZXdfZW50cnktPmRhdGEgPSAodm9pZCAqKSBlbnRyeTsKKysgICAgICBuZXdfZW50cnktPm5leHQgPSBidWNrZXQtPm5leHQ7CisrICAgICAgYnVja2V0LT5uZXh0ID0gbmV3X2VudHJ5OworKyAgICAgIHRhYmxlLT5uX2VudHJpZXMrKzsKKysgICAgICByZXR1cm4gKHZvaWQgKikgZW50cnk7CisrICAgIH0KKysKKysgIC8qIEFkZCBFTlRSWSByaWdodCBpbiB0aGUgYnVja2V0IGhlYWQuICAqLworKworKyAgYnVja2V0LT5kYXRhID0gKHZvaWQgKikgZW50cnk7CisrICB0YWJsZS0+bl9lbnRyaWVzKys7CisrICB0YWJsZS0+bl9idWNrZXRzX3VzZWQrKzsKKysKKysgIC8qIElmIHRoZSBncm93dGggdGhyZXNob2xkIG9mIHRoZSBidWNrZXRzIGluIHVzZSBoYXMgYmVlbiByZWFjaGVkLCBpbmNyZWFzZQorKyAgICAgdGhlIHRhYmxlIHNpemUgYW5kIHJlaGFzaC4gIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gY2hlY2tpbmcgdGhlIG51bWJlciBvZgorKyAgICAgZW50cmllczogIGlmIHRoZSBoYXNoaW5nIGZ1bmN0aW9uIGlzIGlsbC1jb25kaXRpb25lZCwgcmVoYXNoaW5nIGlzIG5vdAorKyAgICAgbGlrZWx5IHRvIGltcHJvdmUgaXQuICAqLworKworKyAgaWYgKHRhYmxlLT5uX2J1Y2tldHNfdXNlZAorKyAgICAgID4gdGFibGUtPnR1bmluZy0+Z3Jvd3RoX3RocmVzaG9sZCAqIHRhYmxlLT5uX2J1Y2tldHMpCisrICAgIHsKKysgICAgICAvKiBDaGVjayBtb3JlIGZ1bGx5LCBiZWZvcmUgc3RhcnRpbmcgcmVhbCB3b3JrLiAgSWYgdHVuaW5nIGFyZ3VtZW50cworKwkgYmVjYW1lIGludmFsaWQsIHRoZSBzZWNvbmQgY2hlY2sgd2lsbCByZWx5IG9uIHByb3BlciBkZWZhdWx0cy4gICovCisrICAgICAgY2hlY2tfdHVuaW5nICh0YWJsZSk7CisrICAgICAgaWYgKHRhYmxlLT5uX2J1Y2tldHNfdXNlZAorKwkgID4gdGFibGUtPnR1bmluZy0+Z3Jvd3RoX3RocmVzaG9sZCAqIHRhYmxlLT5uX2J1Y2tldHMpCisrCXsKKysJICBjb25zdCBIYXNoX3R1bmluZyAqdHVuaW5nID0gdGFibGUtPnR1bmluZzsKKysJICB1bnNpZ25lZCBjYW5kaWRhdGUKKysJICAgID0gKHVuc2lnbmVkKSAodHVuaW5nLT5pc19uX2J1Y2tldHMKKysJCQkgID8gKHRhYmxlLT5uX2J1Y2tldHMgKiB0dW5pbmctPmdyb3d0aF9mYWN0b3IpCisrCQkJICA6ICh0YWJsZS0+bl9idWNrZXRzICogdHVuaW5nLT5ncm93dGhfZmFjdG9yCisrCQkJICAgICAqIHR1bmluZy0+Z3Jvd3RoX3RocmVzaG9sZCkpOworKworKwkgIC8qIElmIHRoZSByZWhhc2ggZmFpbHMsIGFycmFuZ2UgdG8gcmV0dXJuIE5VTEwuICAqLworKwkgIGlmICghaGFzaF9yZWhhc2ggKHRhYmxlLCBjYW5kaWRhdGUpKQorKwkgICAgZW50cnkgPSBOVUxMOworKwl9CisrICAgIH0KKysKKysgIHJldHVybiAodm9pZCAqKSBlbnRyeTsKKyt9CisrCisrLyogSWYgRU5UUlkgaXMgYWxyZWFkeSBpbiB0aGUgdGFibGUsIHJlbW92ZSBpdCBhbmQgcmV0dXJuIHRoZSBqdXN0LWRlbGV0ZWQKKysgICBkYXRhICh0aGUgdXNlciBtYXkgd2FudCB0byBkZWFsbG9jYXRlIGl0cyBzdG9yYWdlKS4gIElmIEVOVFJZIGlzIG5vdCBpbiB0aGUKKysgICB0YWJsZSwgZG9uJ3QgbW9kaWZ5IHRoZSB0YWJsZSBhbmQgcmV0dXJuIE5VTEwuICAqLworKworK3ZvaWQgKgorK2hhc2hfZGVsZXRlIChIYXNoX3RhYmxlICp0YWJsZSwgY29uc3Qgdm9pZCAqZW50cnkpCisreworKyAgdm9pZCAqZGF0YTsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrCisrICBkYXRhID0gaGFzaF9maW5kX2VudHJ5ICh0YWJsZSwgZW50cnksICZidWNrZXQsIHRydWUpOworKyAgaWYgKCFkYXRhKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIHRhYmxlLT5uX2VudHJpZXMtLTsKKysgIGlmICghYnVja2V0LT5kYXRhKQorKyAgICB7CisrICAgICAgdGFibGUtPm5fYnVja2V0c191c2VkLS07CisrCisrICAgICAgLyogSWYgdGhlIHNocmluayB0aHJlc2hvbGQgb2YgdGhlIGJ1Y2tldHMgaW4gdXNlIGhhcyBiZWVuIHJlYWNoZWQsCisrCSByZWhhc2ggaW50byBhIHNtYWxsZXIgdGFibGUuICAqLworKworKyAgICAgIGlmICh0YWJsZS0+bl9idWNrZXRzX3VzZWQKKysJICA8IHRhYmxlLT50dW5pbmctPnNocmlua190aHJlc2hvbGQgKiB0YWJsZS0+bl9idWNrZXRzKQorKwl7CisrCSAgLyogQ2hlY2sgbW9yZSBmdWxseSwgYmVmb3JlIHN0YXJ0aW5nIHJlYWwgd29yay4gIElmIHR1bmluZyBhcmd1bWVudHMKKysJICAgICBiZWNhbWUgaW52YWxpZCwgdGhlIHNlY29uZCBjaGVjayB3aWxsIHJlbHkgb24gcHJvcGVyIGRlZmF1bHRzLiAgKi8KKysJICBjaGVja190dW5pbmcgKHRhYmxlKTsKKysJICBpZiAodGFibGUtPm5fYnVja2V0c191c2VkCisrCSAgICAgIDwgdGFibGUtPnR1bmluZy0+c2hyaW5rX3RocmVzaG9sZCAqIHRhYmxlLT5uX2J1Y2tldHMpCisrCSAgICB7CisrCSAgICAgIGNvbnN0IEhhc2hfdHVuaW5nICp0dW5pbmcgPSB0YWJsZS0+dHVuaW5nOworKwkgICAgICB1bnNpZ25lZCBjYW5kaWRhdGUKKysJCT0gKHVuc2lnbmVkKSAodHVuaW5nLT5pc19uX2J1Y2tldHMKKysJCQkgICAgICA/IHRhYmxlLT5uX2J1Y2tldHMgKiB0dW5pbmctPnNocmlua19mYWN0b3IKKysJCQkgICAgICA6ICh0YWJsZS0+bl9idWNrZXRzICogdHVuaW5nLT5zaHJpbmtfZmFjdG9yCisrCQkJCSAqIHR1bmluZy0+Z3Jvd3RoX3RocmVzaG9sZCkpOworKworKwkgICAgICBoYXNoX3JlaGFzaCAodGFibGUsIGNhbmRpZGF0ZSk7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKyAgcmV0dXJuIGRhdGE7CisrfQorKworKy8qIFRlc3RpbmcuICAqLworKworKyNpZiBURVNUSU5HCisrCisrdm9pZAorK2hhc2hfcHJpbnQgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICB7CisrICAgICAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvcjsKKysKKysgICAgICBpZiAoYnVja2V0KQorKwlwcmludGYgKCIlZDpcbiIsIGJ1Y2tldCAtIHRhYmxlLT5idWNrZXQpOworKworKyAgICAgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3I7IGN1cnNvciA9IGN1cnNvci0+bmV4dCkKKysJeworKwkgIGNoYXIgKnMgPSAoY2hhciAqKSBjdXJzb3ItPmRhdGE7CisrCSAgLyogRklYTUUgKi8KKysJICBpZiAocykKKysJICAgIHByaW50ZiAoIiAgJXNcbiIsIHMpOworKwl9CisrICAgIH0KKyt9CisrCisrI2VuZGlmIC8qIFRFU1RJTkcgKi8KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL2hhc2guaAorKysrIHBhdGNoLTIuNS45L2hhc2guaAorQEAgLTAsMCArMSw5MyBAQAorKy8qIGhhc2ggLSBoYXNoaW5nIHRhYmxlIHByb2Nlc3NpbmcuCisrICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgSmltIE1leWVyaW5nIDxtZXllcmluZ0Bhc2NlbmQuY29tPiwgMTk5OC4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKworKy8qIEEgZ2VuZXJpYyBoYXNoIHRhYmxlIHBhY2thZ2UuICAqLworKworKy8qIE1ha2Ugc3VyZSBVU0VfT0JTVEFDSyBpcyBkZWZpbmVkIHRvIDEgaWYgeW91IHdhbnQgdGhlIGFsbG9jYXRvciB0byB1c2UKKysgICBvYnN0YWNrcyBpbnN0ZWFkIG9mIG1hbGxvYywgYW5kIHJlY29tcGlsZSBgaGFzaC5jJyB3aXRoIHNhbWUgc2V0dGluZy4gICovCisrCisrI2lmbmRlZiBIQVNIX0hfCisrIyBkZWZpbmUgSEFTSF9IXworKworKyMgaWZuZGVmIFBBUkFNUworKyMgIGlmIFBST1RPVFlQRVMgfHwgX19TVERDX18KKysjICAgZGVmaW5lIFBBUkFNUyhBcmdzKSBBcmdzCisrIyAgZWxzZQorKyMgICBkZWZpbmUgUEFSQU1TKEFyZ3MpICgpCisrIyAgZW5kaWYKKysjIGVuZGlmCisrCisrdHlwZWRlZiB1bnNpZ25lZCAoKkhhc2hfaGFzaGVyKSBQQVJBTVMgKChjb25zdCB2b2lkICosIHVuc2lnbmVkKSk7CisrdHlwZWRlZiBib29sICgqSGFzaF9jb21wYXJhdG9yKSBQQVJBTVMgKChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOworK3R5cGVkZWYgdm9pZCAoKkhhc2hfZGF0YV9mcmVlcikgUEFSQU1TICgodm9pZCAqKSk7CisrdHlwZWRlZiBib29sICgqSGFzaF9wcm9jZXNzb3IpIFBBUkFNUyAoKHZvaWQgKiwgdm9pZCAqKSk7CisrCisrc3RydWN0IGhhc2hfZW50cnkKKysgIHsKKysgICAgdm9pZCAqZGF0YTsKKysgICAgc3RydWN0IGhhc2hfZW50cnkgKm5leHQ7CisrICB9OworKworK3N0cnVjdCBoYXNoX3R1bmluZworKyAgeworKyAgICAvKiBUaGlzIHN0cnVjdHVyZSBpcyBtYWlubHkgdXNlZCBmb3IgYGhhc2hfaW5pdGlhbGl6ZScsIHNlZSB0aGUgYmxvY2sKKysgICAgICAgZG9jdW1lbnRhdGlvbiBvZiBgaGFzaF9yZXNldF90dW5pbmcnIGZvciBtb3JlIGNvbXBsZXRlIGNvbW1lbnRzLiAgKi8KKysKKysgICAgZmxvYXQgc2hyaW5rX3RocmVzaG9sZDsJLyogcmF0aW8gb2YgdXNlZCBidWNrZXRzIHRvIHRyaWdnZXIgYSBzaHJpbmsgKi8KKysgICAgZmxvYXQgc2hyaW5rX2ZhY3RvcjsJLyogcmF0aW8gb2YgbmV3IHNtYWxsZXIgc2l6ZSB0byBvcmlnaW5hbCBzaXplICovCisrICAgIGZsb2F0IGdyb3d0aF90aHJlc2hvbGQ7CS8qIHJhdGlvIG9mIHVzZWQgYnVja2V0cyB0byB0cmlnZ2VyIGEgZ3Jvd3RoICovCisrICAgIGZsb2F0IGdyb3d0aF9mYWN0b3I7CS8qIHJhdGlvIG9mIG5ldyBiaWdnZXIgc2l6ZSB0byBvcmlnaW5hbCBzaXplICovCisrICAgIGJvb2wgaXNfbl9idWNrZXRzOwkJLyogaWYgQ0FORElEQVRFIHJlYWxseSBtZWFucyB0YWJsZSBzaXplICovCisrICB9OworKworK3R5cGVkZWYgc3RydWN0IGhhc2hfdHVuaW5nIEhhc2hfdHVuaW5nOworKworK3N0cnVjdCBoYXNoX3RhYmxlOworKworK3R5cGVkZWYgc3RydWN0IGhhc2hfdGFibGUgSGFzaF90YWJsZTsKKysKKysvKiBJbmZvcm1hdGlvbiBhbmQgbG9va3VwLiAgKi8KKyt1bnNpZ25lZCBoYXNoX2dldF9uX2J1Y2tldHMgUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqKSk7CisrdW5zaWduZWQgaGFzaF9nZXRfbl9idWNrZXRzX3VzZWQgUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqKSk7CisrdW5zaWduZWQgaGFzaF9nZXRfbl9lbnRyaWVzIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKikpOworK3Vuc2lnbmVkIGhhc2hfZ2V0X21heF9idWNrZXRfbGVuZ3RoIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKikpOworK2Jvb2wgaGFzaF90YWJsZV9vayBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICopKTsKKyt2b2lkIGhhc2hfcHJpbnRfc3RhdGlzdGljcyBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICosIEZJTEUgKikpOworK3ZvaWQgKmhhc2hfbG9va3VwIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKiwgY29uc3Qgdm9pZCAqKSk7CisrCisrLyogV2Fsa2luZy4gICovCisrdm9pZCAqaGFzaF9nZXRfZmlyc3QgUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqKSk7Cisrdm9pZCAqaGFzaF9nZXRfbmV4dCBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICosIGNvbnN0IHZvaWQgKikpOworK3Vuc2lnbmVkIGhhc2hfZ2V0X2VudHJpZXMgUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqLCB2b2lkICoqLCB1bnNpZ25lZCkpOworK3Vuc2lnbmVkIGhhc2hfZG9fZm9yX2VhY2ggUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqLCBIYXNoX3Byb2Nlc3Nvciwgdm9pZCAqKSk7CisrCisrLyogQWxsb2NhdGlvbiBhbmQgY2xlYW4tdXAuICAqLworK3Vuc2lnbmVkIGhhc2hfc3RyaW5nIFBBUkFNUyAoKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQpKTsKKyt2b2lkIGhhc2hfcmVzZXRfdHVuaW5nIFBBUkFNUyAoKEhhc2hfdHVuaW5nICopKTsKKytIYXNoX3RhYmxlICpoYXNoX2luaXRpYWxpemUgUEFSQU1TICgodW5zaWduZWQsIGNvbnN0IEhhc2hfdHVuaW5nICosCisrCQkJCSAgICAgSGFzaF9oYXNoZXIsIEhhc2hfY29tcGFyYXRvciwKKysJCQkJICAgICBIYXNoX2RhdGFfZnJlZXIpKTsKKyt2b2lkIGhhc2hfY2xlYXIgUEFSQU1TICgoSGFzaF90YWJsZSAqKSk7Cisrdm9pZCBoYXNoX2ZyZWUgUEFSQU1TICgoSGFzaF90YWJsZSAqKSk7CisrCisrLyogSW5zZXJ0aW9uIGFuZCBkZWxldGlvbi4gICovCisrYm9vbCBoYXNoX3JlaGFzaCBQQVJBTVMgKChIYXNoX3RhYmxlICosIHVuc2lnbmVkKSk7Cisrdm9pZCAqaGFzaF9pbnNlcnQgUEFSQU1TICgoSGFzaF90YWJsZSAqLCBjb25zdCB2b2lkICopKTsKKyt2b2lkICpoYXNoX2RlbGV0ZSBQQVJBTVMgKChIYXNoX3RhYmxlICosIGNvbnN0IHZvaWQgKikpOworKworKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvZ2xvYmFsLXJlamVjdC1maWxlLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9nbG9iYWwtcmVqZWN0LWZpbGUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjdjYTc5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvZ2xvYmFsLXJlamVjdC1maWxlLmRpZmYKQEAgLTAsMCArMSwyMDMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuIHBhdGNoXQorCitJbmRleDogcGF0Y2gtMi41LjkvcGF0Y2gubWFuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF0Y2gtMi41Ljkub3JpZy9wYXRjaC5tYW4KKysrKyBwYXRjaC0yLjUuOS9wYXRjaC5tYW4KK0BAIC01MjAsNiArNTIwLDE1IEBAIGZpbGUuCisgXGZCXCo9cmVqZWN0XC11bmlmaWVkXGZQCisgUHJvZHVjZSB1bmlmaWVkIHJlamVjdCBmaWxlcy4gVGhlIGRlZmF1bHQgaXMgdG8gcHJvZHVjZSBjb250ZXh0IHR5cGUgcmVqZWN0IGZpbGVzLgorIC5UUAorKy5CSSBcKj1nbG9iYWxcLXJlamVjdFwtZmlsZT0gcmVqZWN0ZmlsZQorK1B1dCBhbGwgcmVqZWN0cyBpbnRvCisrLkkgcmVqZWN0ZmlsZQorK2luc3RlYWQgb2YgY3JlYXRpbmcgc2VwYXJhdGUgcmVqZWN0IGZpbGVzIGZvciBhbGwgZmlsZXMgdGhhdCBoYXZlIHJlamVjdHMuIFRoZQorKy5JIHJlamVjdGZpbGUKKyt3aWxsIGNvbnRhaW4gaGVhZGVycyB0aGF0IGlkZW50aWZ5IHdoaWNoIGZpbGUgZWFjaCByZWplY3QgcmVmZXJzIHRvLiBOb3RlIHRoYXQKKyt0aGUgZ2xvYmFsIHJlamVjdCBmaWxlIGlzIGNyZWF0ZWQgZXZlbiBpZiBcLVwtZHJ5XC1ydW4gaXMgc3BlY2lmaWVkICh3aGlsZQorK25vbi1nbG9iYWwgcmVqZWN0IGZpbGVzIHdpbGwgb25seSBiZSBjcmVhdGVkIHdpdGhvdXQgXC1cLWRyeVwtcnVuKS4KKysuVFAKKyBcZkJcLVJcZlAgIG9yICBcZkJcKj1yZXZlcnNlXGZQCisgQXNzdW1lIHRoYXQgdGhpcyBwYXRjaCB3YXMgY3JlYXRlZCB3aXRoIHRoZSBvbGQgYW5kIG5ldyBmaWxlcyBzd2FwcGVkLgorIChZZXMsIEknbSBhZnJhaWQgdGhhdCBkb2VzIGhhcHBlbiBvY2Nhc2lvbmFsbHksIGh1bWFuIG5hdHVyZSBiZWluZyB3aGF0IGl0CitJbmRleDogcGF0Y2gtMi41LjkvcGF0Y2guYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvcGF0Y2guYworKysrIHBhdGNoLTIuNS45L3BhdGNoLmMKK0BAIC02Nyw2ICs2Nyw3IEBAIHN0YXRpYyBib29sIHNpbWlsYXIgKGNoYXIgY29uc3QgKiwgc2l6ZV8KKyBzdGF0aWMgYm9vbCBzcGV3X291dHB1dCAoc3RydWN0IG91dHN0YXRlICopOworIHN0YXRpYyBjaGFyIGNvbnN0ICptYWtlX3RlbXAgKGNoYXIpOworIHN0YXRpYyBpbnQgbnVtZXJpY19zdHJpbmcgKGNoYXIgY29uc3QgKiwgYm9vbCwgY2hhciBjb25zdCAqKTsKKytzdGF0aWMgdm9pZCByZWplY3RfaGVhZGVyIChjb25zdCBjaGFyICpmaWxlbmFtZSk7Cisgc3RhdGljIHZvaWQgYWJvcnRfaHVuayAodm9pZCk7Cisgc3RhdGljIHZvaWQgY2xlYW51cCAodm9pZCk7Cisgc3RhdGljIHZvaWQgZ2V0X3NvbWVfc3dpdGNoZXMgKHZvaWQpOworQEAgLTk4LDYgKzk5LDcgQEAgc3RhdGljIGludCBBcmdjOworIHN0YXRpYyBjaGFyICogY29uc3QgKkFyZ3Y7CisgCisgc3RhdGljIEZJTEUgKnJlamZwOyAgLyogcmVqZWN0IGZpbGUgcG9pbnRlciAqLworK3N0YXRpYyBjaGFyICpnbG9iYWxfcmVqZWN0OworIAorIHN0YXRpYyBjaGFyIGNvbnN0ICpwYXRjaG5hbWU7Cisgc3RhdGljIGNoYXIgKnJlam5hbWU7CitAQCAtMTcyLDYgKzE3NCwxMCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgIC8qIE1ha2Ugc3VyZSB3ZSBjbGVhbiB1cCBpbiBjYXNlIG9mIGRpc2FzdGVyLiAgKi8KKyAgICAgc2V0X3NpZ25hbHMgKGZhbHNlKTsKKyAKKysgICAgLyogaW5pdGlhbGl6ZSBnbG9iYWwgcmVqZWN0IGZpbGUgKi8KKysgICAgaWYgKGdsb2JhbF9yZWplY3QpCisrICAgICAgaW5pdF9yZWplY3QgKCk7CisrCisgICAgIGZvciAoCisgCW9wZW5fcGF0Y2hfZmlsZSAocGF0Y2huYW1lKTsKKyAJdGhlcmVfaXNfYW5vdGhlcl9wYXRjaCgpOworQEAgLTIwOCw4ICsyMTQsOSBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCSAgICBpbml0X291dHB1dCAoVE1QT1VUTkFNRSwgZXhjbHVzaXZlLCAmb3V0c3RhdGUpOworIAkgIH0KKyAKKy0JLyogaW5pdGlhbGl6ZSByZWplY3QgZmlsZSAqLworLQlpbml0X3JlamVjdCAoKTsKKysJLyogaW5pdGlhbGl6ZSBwZXItcGF0Y2ggcmVqZWN0IGZpbGUgKi8KKysJaWYgKCFnbG9iYWxfcmVqZWN0KQorKwkgIGluaXRfcmVqZWN0ICgpOworIAorIAkvKiBmaW5kIG91dCB3aGVyZSBhbGwgdGhlIGxpbmVzIGFyZSAqLworIAlpZiAoIXNraXBfcmVzdF9vZl9wYXRjaCkKK0BAIC0yNzgsNiArMjg1LDggQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAorIAkgICAgbmV3d2hlcmUgPSBwY2hfbmV3Zmlyc3QoKSArIGxhc3Rfb2Zmc2V0OworIAkgICAgaWYgKHNraXBfcmVzdF9vZl9wYXRjaCkgeworKwkJaWYgKCFmYWlsZWQpCisrCQkgIHJlamVjdF9oZWFkZXIob3V0bmFtZSk7CisgCQlhYm9ydF9odW5rKCk7CisgCQlmYWlsZWQrKzsKKyAJCWlmICh2ZXJib3NpdHkgPT0gVkVSQk9TRSkKK0BAIC0yOTIsNiArMzAxLDggQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJICBzYXkgKCJQYXRjaCBhdHRlbXB0ZWQgdG8gY3JlYXRlIGZpbGUgJXMsIHdoaWNoIGFscmVhZHkgZXhpc3RzLlxuIiwKKyAJCSAgICAgICBxdW90ZWFyZyAoaW5uYW1lKSk7CisgCisrCQlpZiAoIWZhaWxlZCkKKysJCSAgcmVqZWN0X2hlYWRlcihvdXRuYW1lKTsKKyAJCWFib3J0X2h1bmsoKTsKKyAJCWZhaWxlZCsrOworIAkJaWYgKHZlcmJvc2l0eSAhPSBTSUxFTlQpCitAQCAtMjk5LDYgKzMxMCw4IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCSAgICAgICBmb3JtYXRfbGluZW51bSAobnVtYnVmLCBuZXd3aGVyZSkpOworIAkgICAgfQorIAkgICAgZWxzZSBpZiAoISBhcHBseV9odW5rICgmb3V0c3RhdGUsIHdoZXJlKSkgeworKwkJaWYgKCFmYWlsZWQpCisrCQkgIHJlamVjdF9oZWFkZXIob3V0bmFtZSk7CisgCQlhYm9ydF9odW5rICgpOworIAkJZmFpbGVkKys7CisgCQlpZiAodmVyYm9zaXR5ICE9IFNJTEVOVCkKK0BAIC0zMzIsNyArMzQ1LDggQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJICAgIGZjbG9zZSAob3V0c3RhdGUub2ZwKTsKKyAJCSAgICBvdXRzdGF0ZS5vZnAgPSAwOworIAkJICB9CistCQlmY2xvc2UgKHJlamZwKTsKKysJCWlmICghZ2xvYmFsX3JlamVjdCkKKysJCSAgZmNsb3NlIChyZWpmcCk7CisgCQljb250aW51ZTsKKyAJICAgICAgfQorIAorQEAgLTQxMiwxMyArNDI2LDEzIEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJICAgIH0KKyAgICAgICB9CisgICAgICAgaWYgKGRpZmZfdHlwZSAhPSBFRF9ESUZGKSB7CistCWlmIChmY2xvc2UgKHJlamZwKSAhPSAwKQorKwlpZiAoIWdsb2JhbF9yZWplY3QgJiYgZmNsb3NlIChyZWpmcCkgIT0gMCkKKyAJICAgIHdyaXRlX2ZhdGFsICgpOworIAlpZiAoZmFpbGVkKSB7CisgCSAgICBzb21lZmFpbGVkID0gdHJ1ZTsKKyAJICAgIHNheSAoIiVkIG91dCBvZiAlZCBodW5rJXMgJXMiLCBmYWlsZWQsIGh1bmssICJzIiArIChodW5rID09IDEpLAorIAkJIHNraXBfcmVzdF9vZl9wYXRjaCA/ICJpZ25vcmVkIiA6ICJGQUlMRUQiKTsKKy0JICAgIGlmIChvdXRuYW1lKSB7CisrCSAgICBpZiAoIWdsb2JhbF9yZWplY3QgJiYgb3V0bmFtZSkgeworIAkJY2hhciAqcmVqID0gcmVqbmFtZTsKKyAJCWlmICghcmVqbmFtZSkgeworIAkJICAgIHJlaiA9IHhtYWxsb2MgKHN0cmxlbiAob3V0bmFtZSkgKyA1KTsKK0BAIC00NDUsNiArNDU5LDIwIEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICB9CisgICAgICAgc2V0X3NpZ25hbHMgKHRydWUpOworICAgICB9CisrICAgIGlmIChnbG9iYWxfcmVqZWN0KQorKyAgICAgIHsKKysJaWYgKGZjbG9zZSAocmVqZnApICE9IDApCisrCSAgd3JpdGVfZmF0YWwgKCk7CisrCWlmIChzb21lZmFpbGVkKQorKwkgIHsKKysJICBzYXkgKCIgLS0gc2F2aW5nIHJlamVjdHMgdG8gZmlsZSAlc1xuIiwgcXVvdGVhcmcgKGdsb2JhbF9yZWplY3QpKTsKKysJICAvKmlmICghIGRyeV9ydW4pCisrCSAgICB7Ki8KKysJICAgICAgbW92ZV9maWxlIChUTVBSRUpOQU1FLCAmVE1QUkVKTkFNRV9uZWVkc19yZW1vdmFsLAorKwkJCSBnbG9iYWxfcmVqZWN0LCAwNjQ0LCBmYWxzZSk7CisrCSAgICAvKn0qLworKwkgIH0KKysgICAgICB9CisgICAgIGlmIChvdXRzdGF0ZS5vZnAgJiYgKGZlcnJvciAob3V0c3RhdGUub2ZwKSB8fCBmY2xvc2UgKG91dHN0YXRlLm9mcCkgIT0gMCkpCisgICAgICAgd3JpdGVfZmF0YWwgKCk7CisgICAgIGNsZWFudXAgKCk7CitAQCAtNTIzLDYgKzU1MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IGxvbmdvcHRzW10gPQorICAgeyJwb3NpeCIsIG5vX2FyZ3VtZW50LCBOVUxMLCBDSEFSX01BWCArIDd9LAorICAgeyJxdW90aW5nLXN0eWxlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIENIQVJfTUFYICsgOH0sCisgICB7InVuaWZpZWQtcmVqZWN0LWZpbGVzIiwgbm9fYXJndW1lbnQsIE5VTEwsIENIQVJfTUFYICsgOX0sCisrICB7Imdsb2JhbC1yZWplY3QtZmlsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBDSEFSX01BWCArIDEwfSwKKyAgIHtOVUxMLCBub19hcmd1bWVudCwgTlVMTCwgMH0KKyB9OworIAorQEAgLTU4Miw2ICs2MTEsNyBAQCBzdGF0aWMgY2hhciBjb25zdCAqY29uc3Qgb3B0aW9uX2hlbHBbXSA9CisgIiAgLS1kcnktcnVuICBEbyBub3QgYWN0dWFsbHkgY2hhbmdlIGFueSBmaWxlczsganVzdCBwcmludCB3aGF0IHdvdWxkIGhhcHBlbi4iLAorICIgIC0tcG9zaXggIENvbmZvcm0gdG8gdGhlIFBPU0lYIHN0YW5kYXJkLiIsCisgIiAgLS11bmlmaWVkLXJlamVjdC1maWxlcyAgQ3JlYXRlIHVuaWZpZWQgcmVqZWN0IGZpbGVzLiIsCisrIiAgLS1nbG9iYWwtcmVqZWN0LWZpbGU9ZmlsZSAgUHV0IGFsbCByZWplY3RzIGludG8gb25lIGZpbGUuIiwKKyAiIiwKKyAiICAtZCBESVIgIC0tZGlyZWN0b3J5PURJUiAgQ2hhbmdlIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0byBESVIgZmlyc3QuIiwKKyAjaWYgSEFWRV9TRVRNT0RFX0RPUworQEAgLTc4NCw2ICs4MTQsOSBAQCBnZXRfc29tZV9zd2l0Y2hlcyAodm9pZCkKKyAJICAgIGNhc2UgQ0hBUl9NQVggKyA5OgorIAkJdW5pZmllZF9yZWplY3RfZmlsZXMgPSB0cnVlOworIAkJYnJlYWs7CisrCSAgICBjYXNlIENIQVJfTUFYICsgMTA6CisrCQlnbG9iYWxfcmVqZWN0ID0gc2F2ZXN0ciAob3B0YXJnKTsKKysJCWJyZWFrOworIAkgICAgZGVmYXVsdDoKKyAJCXVzYWdlIChzdGRlcnIsIDIpOworIAl9CitAQCAtOTMzLDYgKzk2NiwzNyBAQCBsb2NhdGVfaHVuayAoTElORU5VTSBmdXp6KQorIH0KKyAKKyBzdGF0aWMgY2hhciAqCisrZm9ybWF0X3RpbWVzdGFtcCAoY2hhciB0aW1lYnVmWzM3XSwgYm9vbCB3aGljaCkKKyt7CisrICB0aW1lX3QgdHMgPSBwY2hfdGltZXN0YW1wKHdoaWNoKTsKKysgIGlmICh0cyAhPSAtMSkKKysgICAgeworKyAgICAgIHN0cnVjdCB0bSAqdG0gPSBsb2NhbHRpbWUoJnRzKTsKKysgICAgICBzdHJmdGltZSh0aW1lYnVmLCAzNywgIlx0JVktJW0tJWQgJUg6JU06JVMuMDAwMDAwMDAwICV6IiwgdG0pOworKyAgICB9CisrICBlbHNlCisrICAgIHRpbWVidWZbMF0gPSAwOworKyAgcmV0dXJuIHRpbWVidWY7CisrfQorKworKy8qIFdyaXRlIGEgaGVhZGVyIGluIGEgcmVqZWN0IGZpbGUgdGhhdCBjb21iaW5lcyBtdWx0aXBsZSBodW5rcy4gKi8KKytzdGF0aWMgdm9pZAorK3JlamVjdF9oZWFkZXIgKGNvbnN0IGNoYXIgKm91dG5hbWUpCisreworKyAgICBjaGFyIHRpbWVidWYwWzM3XSwgdGltZWJ1ZjFbMzddOworKyAgICBpZiAoIWdsb2JhbF9yZWplY3QpCisrICAgICAgcmV0dXJuOworKyAgICBpZiAoZGlmZl90eXBlID09IFVOSV9ESUZGKQorKwlmcHJpbnRmKHJlamZwLCAiLS0tICVzLm9yaWclc1xuKysrICVzJXNcbiIsCisrCQlvdXRuYW1lLCBmb3JtYXRfdGltZXN0YW1wKHRpbWVidWYwLCByZXZlcnNlKSwKKysJCW91dG5hbWUsIGZvcm1hdF90aW1lc3RhbXAodGltZWJ1ZjEsICFyZXZlcnNlKSk7CisrICAgIGVsc2UKKysJZnByaW50ZihyZWpmcCwgIioqKiAlcy5vcmlnJXNcbi0tLSAlcyVzXG4iLAorKwkJb3V0bmFtZSwgZm9ybWF0X3RpbWVzdGFtcCh0aW1lYnVmMCwgcmV2ZXJzZSksCisrCQlvdXRuYW1lLCBmb3JtYXRfdGltZXN0YW1wKHRpbWVidWYxLCAhcmV2ZXJzZSkpOworK30KKysKKytzdGF0aWMgY2hhciAqCisgZm9ybWF0X2xpbmVyYW5nZSAoY2hhciByYW5nZWJ1ZltMSU5FTlVNX0xFTkdUSF9CT1VORCoyICsgMl0sCisgCQkgIExJTkVOVU0gZmlyc3QsIExJTkVOVU0gbGluZXMpCisgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvaW5zdGFsbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL2luc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM1NGVjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL2luc3RhbGwucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IHBhdGNoLTIuNS40L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF0Y2gtMi41LjQub3JpZy9NYWtlZmlsZS5pbgkyMDA1LTAzLTA5IDA3OjIzOjU0Ljc3OTMxMTgyNCAtMDUwMAorKysrIHBhdGNoLTIuNS40L01ha2VmaWxlLmluCTIwMDUtMDMtMDkgMDc6MjY6MDkuNjE2ODEzNDA4IC0wNTAwCitAQCAtNDMsMTAgKzQzLDExIEBACisgUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKKyBQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorIAorK0RFU1RESVIgPQorIHByZWZpeCA9IEBwcmVmaXhACisgZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACisgCistYmluZGlyID0gJChleGVjX3ByZWZpeCkvYmluCisrYmluZGlyID0gQGJpbmRpckAKKyAKKyAjIFdoZXJlIHRvIHB1dCB0aGUgbWFudWFsIHBhZ2VzLgorIG1hbmRpciA9IEBtYW5kaXJACitAQCAtMTEyLDE4ICsxMTMsMTggQEAKKyAJJChDQykgLW8gJEAgJChDRkxBR1MpICQoTERGTEFHUykgJChPQkpTKSAkKExJQlMpCisgCisgaW5zdGFsbDo6IGFsbCBpbnN0YWxsZGlycworLQkkKElOU1RBTExfUFJPR1JBTSkgcGF0Y2gkKEVYRUVYVCkgJChiaW5kaXIpLyQocGF0Y2hfbmFtZSkkKEVYRUVYVCkKKy0JLSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvcGF0Y2gubWFuICQobWFuMWRpcikvJChwYXRjaF9uYW1lKSQobWFuMWV4dCkKKysJJChJTlNUQUxMX1BST0dSQU0pIHBhdGNoJChFWEVFWFQpICQoREVTVERJUikkKGJpbmRpcikvJChwYXRjaF9uYW1lKSQoRVhFRVhUKQorKwktJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9wYXRjaC5tYW4gJChERVNURElSKSQobWFuMWRpcikvJChwYXRjaF9uYW1lKSQobWFuMWV4dCkKKyAKKyBpbnN0YWxsZGlyczo6CistCSQoU0hFTEwpICQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoYmluZGlyKSAkKG1hbjFkaXIpCisrCSQoU0hFTEwpICQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoREVTVERJUikkKGJpbmRpcikgJChERVNURElSKSQobWFuMWRpcikKKyAKKyBpbnN0YWxsLXN0cmlwOjoKKyAJJChNQUtFKSBJTlNUQUxMX1BST0dSQU09JyQoSU5TVEFMTF9QUk9HUkFNKSAtcycgaW5zdGFsbAorIAorIHVuaW5zdGFsbDo6CistCXJtIC1mICQoYmluZGlyKS8kKHBhdGNoX25hbWUpJChFWEVFWFQpCistCXJtIC1mICQobWFuMWRpcikvJChwYXRjaF9uYW1lKSQobWFuMWV4dCkKKysJcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKHBhdGNoX25hbWUpJChFWEVFWFQpCisrCXJtIC1mICQoREVTVERJUikkKG1hbjFkaXIpLyQocGF0Y2hfbmFtZSkkKG1hbjFleHQpCisgCisgTWFrZWZpbGU6IE1ha2VmaWxlLmluICQoQ09ORklHX1NUQVRVUykKKyAJJChTSEVMTCkgJChDT05GSUdfU1RBVFVTKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvdW5pZmllZC1yZWplY3QtZmlsZXMuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL3VuaWZpZWQtcmVqZWN0LWZpbGVzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI1OTIxMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL3VuaWZpZWQtcmVqZWN0LWZpbGVzLmRpZmYKQEAgLTAsMCArMSwzMDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuIHBhdGNoXQorCitHZW5lcmF0ZSB1bmlmaWVkIGRpZmYgc3R5bGUgcmVqZWN0IGZpbGVzLiBBbHNvIGluY2x1ZGUgdGhlIEMgZnVuY3Rpb24gbmFtZXMKK2luIHJlamVjdCBmaWxlcyB3aGVuZXZlciBwb3NzaWJsZS4KKworCSQgY2F0ID4gZi5vcmlnCisJPCBhKCkgeworCTwgMgorCTwgMworCTwKKwk8IDUKKwk8IDYKKwk8IH0KKworCSQgc2VkIC1lICdzLzUvNWEvJyBmLm9yaWcgPiBmCisJJCBkaWZmIC1VMiAtcCBmLm9yaWcgZiA+IGYuZGlmZgorCSQgc2VkIC1lICdzLzUvNWEvJyAtZSAncy82LzZ4LycgZi5vcmlnID4gZgorCSQgLi9wYXRjaCAtRjAgLXMgLS1uby1iYWNrdXAtaWYtbWlzbWF0Y2ggZiAtLXJlamVjdC11bmlmaWVkIDwgZi5kaWZmCisJPiAxIG91dCBvZiAxIGh1bmsgRkFJTEVEIC0tIHNhdmluZyByZWplY3RzIHRvIGZpbGUgZi5yZWoKKworCSQgY2F0IGYucmVqCisJPiBAQCAtMyw1ICszLDUgQEAgYSgpIHsKKwk+ICAzCisJPiAgCisJPiAtNQorCT4gKzVhCisJPiAgNgorCT4gIH0KKworCSQgLi9wYXRjaCAtRjAgLXMgLS1uby1iYWNrdXAtaWYtbWlzbWF0Y2ggZiA8IGYuZGlmZgorCT4gMSBvdXQgb2YgMSBodW5rIEZBSUxFRCAtLSBzYXZpbmcgcmVqZWN0cyB0byBmaWxlIGYucmVqCisKKwkkIGNhdCBmLnJlagorCT4gKioqKioqKioqKioqKioqIGEoKSB7CisJPiAqKiogMyw3ICoqKioKKwk+ICAgMworCT4gICAKKwk+IC0gNQorCT4gICA2CisJPiAgIH0KKwk+IC0tLSAzLDcgLS0tLQorCT4gICAzCisJPiAgIAorCT4gKyA1YQorCT4gICA2CisJPiAgIH0KKworCSQgZGlmZiAtTnUgLXAgL2Rldi9udWxsIGYub3JpZyA+IGYyLmRpZmYKKwkkIC4vcGF0Y2ggLUYwIC1zIC0tbm8tYmFja3VwLWlmLW1pc21hdGNoIGYgLS1yZWplY3QtdW5pZmllZCA8IGYyLmRpZmYKKwk+IFBhdGNoIGF0dGVtcHRlZCB0byBjcmVhdGUgZmlsZSBmLCB3aGljaCBhbHJlYWR5IGV4aXN0cy4KKwk+IDEgb3V0IG9mIDEgaHVuayBGQUlMRUQgLS0gc2F2aW5nIHJlamVjdHMgdG8gZmlsZSBmLnJlagorCisJJCBjYXQgZi5yZWoKKwk+IEBAIC0wLDAgKzEsNyBAQAorCT4gK2EoKSB7CisJPiArMgorCT4gKzMKKwk+ICsKKwk+ICs1CisJPiArNgorCT4gK30KKworCSQgcm0gLWYgZiBmLm9yaWcgZi5yZWogZi5kaWZmIGYyLmRpZmYKKworSW5kZXg6IHBhdGNoLTIuNS45L3BjaC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF0Y2gtMi41Ljkub3JpZy9wY2guYworKysrIHBhdGNoLTIuNS45L3BjaC5jCitAQCAtNjgsNiArNjgsNyBAQCBzdGF0aWMgTElORU5VTSBwX3NsaW5lOwkJCS8qIGFuZCB0aGUgbGluCisgc3RhdGljIExJTkVOVU0gcF9odW5rX2JlZzsJCS8qIGxpbmUgbnVtYmVyIG9mIGN1cnJlbnQgaHVuayAqLworIHN0YXRpYyBMSU5FTlVNIHBfZWZha2UgPSAtMTsJCS8qIGVuZCBvZiBmYWtlZCB1cCBsaW5lcy0tZG9uJ3QgZnJlZSAqLworIHN0YXRpYyBMSU5FTlVNIHBfYmZha2UgPSAtMTsJCS8qIGJlZyBvZiBmYWtlZCB1cCBsaW5lcyAqLworK3N0YXRpYyBjaGFyICpwX2NfZnVuY3Rpb247CQkvKiB0aGUgQyBmdW5jdGlvbiBhIGh1bmsgaXMgaW4gKi8KKyAKKyBlbnVtIG5hbWV0eXBlIHsgT0xELCBORVcsIElOREVYLCBOT05FIH07CisgCitAQCAtODg4LDYgKzg4OSwxOSBAQCBhbm90aGVyX2h1bmsgKGVudW0gZGlmZiBkaWZmdHlwZSwgYm9vbCByCisgCSAgICBuZXh0X2ludHVpdF9hdChsaW5lX2JlZ2lubmluZyxwX2lucHV0X2xpbmUpOworIAkgICAgcmV0dXJuIGNoYXJzX3JlYWQgPT0gKHNpemVfdCkgLTEgPyAtMSA6IDA7CisgCX0KKysJcyA9IGJ1ZjsKKysJd2hpbGUgKCpzID09ICcqJykKKysJICAgIHMrKzsKKysJaWYgKCpzID09ICcgJykKKysJICB7CisrCSAgICBwX2NfZnVuY3Rpb24gPSBzOworKwkgICAgd2hpbGUgKCpzICE9ICdcbicpCisrCQlzKys7CisrCSAgICAqcyA9ICdcMCc7CisrCSAgICBwX2NfZnVuY3Rpb24gPSBzYXZlc3RyIChwX2NfZnVuY3Rpb24pOworKwkgIH0KKysJZWxzZQorKwkgICAgcF9jX2Z1bmN0aW9uID0gTlVMTDsKKyAJcF9odW5rX2JlZyA9IHBfaW5wdXRfbGluZSArIDE7CisgCXdoaWxlIChwX2VuZCA8IHBfbWF4KSB7CisgCSAgICBjaGFyc19yZWFkID0gZ2V0X2xpbmUgKCk7CitAQCAtMTI3Nyw4ICsxMjkxLDE4IEBAIGFub3RoZXJfaHVuayAoZW51bSBkaWZmIGRpZmZ0eXBlLCBib29sIHIKKyAJZWxzZQorIAkgICAgcF9yZXBsX2xpbmVzID0gMTsKKyAJaWYgKCpzID09ICcgJykgcysrOworLQlpZiAoKnMgIT0gJ0AnKQorKwlpZiAoKnMrKyAhPSAnQCcpCisgCSAgICBtYWxmb3JtZWQgKCk7CisrCWlmICgqcysrID09ICdAJyAmJiAqcyA9PSAnICcgJiYgKnMgIT0gJ1wwJykKKysJICB7CisrCSAgICBwX2NfZnVuY3Rpb24gPSBzOworKwkgICAgd2hpbGUgKCpzICE9ICdcbicpCisrCQlzKys7CisrCSAgICAqcyA9ICdcMCc7CisrCSAgICBwX2NfZnVuY3Rpb24gPSBzYXZlc3RyIChwX2NfZnVuY3Rpb24pOworKwkgIH0KKysJZWxzZQorKwkgICAgcF9jX2Z1bmN0aW9uID0gTlVMTDsKKyAJaWYgKCFwX3B0cm5fbGluZXMpCisgCSAgICBwX2ZpcnN0Kys7CQkJLyogZG8gYXBwZW5kIHJhdGhlciB0aGFuIGluc2VydCAqLworIAlpZiAoIXBfcmVwbF9saW5lcykKK0BAIC0xODg0LDYgKzE5MDgsMTIgQEAgcGNoX2h1bmtfYmVnICh2b2lkKQorICAgICByZXR1cm4gcF9odW5rX2JlZzsKKyB9CisgCisrY2hhciBjb25zdCAqCisrcGNoX2NfZnVuY3Rpb24gKHZvaWQpCisreworKyAgICByZXR1cm4gcF9jX2Z1bmN0aW9uOworK30KKysKKyAvKiBJcyB0aGUgbmV3bGluZS10ZXJtaW5hdGVkIGxpbmUgYSB2YWxpZCBgZWQnIGNvbW1hbmQgZm9yIHBhdGNoCisgICAgaW5wdXQ/ICBJZiBzbywgcmV0dXJuIHRoZSBjb21tYW5kIGNoYXJhY3RlcjsgaWYgbm90LCByZXR1cm4gMC4KKyAgICBUaGlzIGFjY2VwdHMgYWNjZXB0cyBqdXN0IGEgc3Vic2V0IG9mIHRoZSB2YWxpZCBjb21tYW5kcywgYnV0IGl0J3MKK0luZGV4OiBwYXRjaC0yLjUuOS9wY2guaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvcGNoLmgKKysrKyBwYXRjaC0yLjUuOS9wY2guaAorQEAgLTI1LDYgKzI1LDcgQEAKKyBMSU5FTlVNIHBjaF9lbmQgKHZvaWQpOworIExJTkVOVU0gcGNoX2ZpcnN0ICh2b2lkKTsKKyBMSU5FTlVNIHBjaF9odW5rX2JlZyAodm9pZCk7CisrY2hhciBjb25zdCAqcGNoX2NfZnVuY3Rpb24gKHZvaWQpOworIExJTkVOVU0gcGNoX25ld2ZpcnN0ICh2b2lkKTsKKyBMSU5FTlVNIHBjaF9wcmVmaXhfY29udGV4dCAodm9pZCk7CisgTElORU5VTSBwY2hfcHRybl9saW5lcyAodm9pZCk7CitJbmRleDogcGF0Y2gtMi41LjkvcGF0Y2gubWFuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF0Y2gtMi41Ljkub3JpZy9wYXRjaC5tYW4KKysrKyBwYXRjaC0yLjUuOS9wYXRjaC5tYW4KK0BAIC01MTcsNiArNTE3LDkgQEAgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdAorIC5CIFwmLnJlagorIGZpbGUuCisgLlRQCisrXGZCXCo9cmVqZWN0XC11bmlmaWVkXGZQCisrUHJvZHVjZSB1bmlmaWVkIHJlamVjdCBmaWxlcy4gVGhlIGRlZmF1bHQgaXMgdG8gcHJvZHVjZSBjb250ZXh0IHR5cGUgcmVqZWN0IGZpbGVzLgorKy5UUAorIFxmQlwtUlxmUCAgb3IgIFxmQlwqPXJldmVyc2VcZlAKKyBBc3N1bWUgdGhhdCB0aGlzIHBhdGNoIHdhcyBjcmVhdGVkIHdpdGggdGhlIG9sZCBhbmQgbmV3IGZpbGVzIHN3YXBwZWQuCisgKFllcywgSSdtIGFmcmFpZCB0aGF0IGRvZXMgaGFwcGVuIG9jY2FzaW9uYWxseSwgaHVtYW4gbmF0dXJlIGJlaW5nIHdoYXQgaXQKK0luZGV4OiBwYXRjaC0yLjUuOS9jb21tb24uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvY29tbW9uLmgKKysrKyBwYXRjaC0yLjUuOS9jb21tb24uaAorQEAgLTE0Niw2ICsxNDYsNyBAQCBYVEVSTiBpbnQgaW52YzsKKyBYVEVSTiBzdHJ1Y3Qgc3RhdCBpbnN0YXQ7CisgWFRFUk4gYm9vbCBkcnlfcnVuOworIFhURVJOIGJvb2wgcG9zaXhseV9jb3JyZWN0OworK1hURVJOIGJvb2wgdW5pZmllZF9yZWplY3RfZmlsZXM7CisgCisgWFRFUk4gY2hhciBjb25zdCAqb3JpZ3ByYWU7CisgWFRFUk4gY2hhciBjb25zdCAqb3JpZ2Jhc2U7CitJbmRleDogcGF0Y2gtMi41LjkvcGF0Y2guYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvcGF0Y2guYworKysrIHBhdGNoLTIuNS45L3BhdGNoLmMKK0BAIC01MjIsNiArNTIyLDcgQEAgc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgbG9uZ29wdHNbXSA9CisgICB7Im5vLWJhY2t1cC1pZi1taXNtYXRjaCIsIG5vX2FyZ3VtZW50LCBOVUxMLCBDSEFSX01BWCArIDZ9LAorICAgeyJwb3NpeCIsIG5vX2FyZ3VtZW50LCBOVUxMLCBDSEFSX01BWCArIDd9LAorICAgeyJxdW90aW5nLXN0eWxlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIENIQVJfTUFYICsgOH0sCisrICB7InVuaWZpZWQtcmVqZWN0LWZpbGVzIiwgbm9fYXJndW1lbnQsIE5VTEwsIENIQVJfTUFYICsgOX0sCisgICB7TlVMTCwgbm9fYXJndW1lbnQsIE5VTEwsIDB9CisgfTsKKyAKK0BAIC01ODAsNiArNTgxLDcgQEAgc3RhdGljIGNoYXIgY29uc3QgKmNvbnN0IG9wdGlvbl9oZWxwW10gPQorICIgIC0tdmVyYm9zZSAgT3V0cHV0IGV4dHJhIGluZm9ybWF0aW9uIGFib3V0IHRoZSB3b3JrIGJlaW5nIGRvbmUuIiwKKyAiICAtLWRyeS1ydW4gIERvIG5vdCBhY3R1YWxseSBjaGFuZ2UgYW55IGZpbGVzOyBqdXN0IHByaW50IHdoYXQgd291bGQgaGFwcGVuLiIsCisgIiAgLS1wb3NpeCAgQ29uZm9ybSB0byB0aGUgUE9TSVggc3RhbmRhcmQuIiwKKysiICAtLXVuaWZpZWQtcmVqZWN0LWZpbGVzICBDcmVhdGUgdW5pZmllZCByZWplY3QgZmlsZXMuIiwKKyAiIiwKKyAiICAtZCBESVIgIC0tZGlyZWN0b3J5PURJUiAgQ2hhbmdlIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0byBESVIgZmlyc3QuIiwKKyAjaWYgSEFWRV9TRVRNT0RFX0RPUworQEAgLTc3OSw2ICs3ODEsOSBAQCBnZXRfc29tZV9zd2l0Y2hlcyAodm9pZCkKKyAJCQkJICAgICAoZW51bSBxdW90aW5nX3N0eWxlKSBpKTsKKyAJCX0KKyAJCWJyZWFrOworKwkgICAgY2FzZSBDSEFSX01BWCArIDk6CisrCQl1bmlmaWVkX3JlamVjdF9maWxlcyA9IHRydWU7CisrCQlicmVhazsKKyAJICAgIGRlZmF1bHQ6CisgCQl1c2FnZSAoc3RkZXJyLCAyKTsKKyAJfQorQEAgLTkyNyw2ICs5MzIsMjQgQEAgbG9jYXRlX2h1bmsgKExJTkVOVU0gZnV6eikKKyAgICAgcmV0dXJuIDA7CisgfQorIAorK3N0YXRpYyBjaGFyICoKKytmb3JtYXRfbGluZXJhbmdlIChjaGFyIHJhbmdlYnVmW0xJTkVOVU1fTEVOR1RIX0JPVU5EKjIgKyAyXSwKKysJCSAgTElORU5VTSBmaXJzdCwgTElORU5VTSBsaW5lcykKKyt7CisrICAgIGlmIChsaW5lcyA9PSAxKQorKyAgICAgIHJhbmdlYnVmID0gZm9ybWF0X2xpbmVudW0gKHJhbmdlYnVmLCBmaXJzdCk7CisrICAgIGVsc2UKKysgICAgICB7CisrCWNoYXIgKnJiOworKwlyYW5nZWJ1ZiA9IGZvcm1hdF9saW5lbnVtIChyYW5nZWJ1ZiArIExJTkVOVU1fTEVOR1RIX0JPVU5EICsgMSwgbGluZXMpOworKwlyYiA9IHJhbmdlYnVmLTE7CisrCXJhbmdlYnVmID0gZm9ybWF0X2xpbmVudW0gKHJhbmdlYnVmIC0gTElORU5VTV9MRU5HVEhfQk9VTkQgLSAxLAorKwkJCQkgICAobGluZXMgPiAwKSA/IGZpcnN0IDogMCk7CisrCSpyYiA9ICcsJzsKKysgICAgICB9CisrICAgIHJldHVybiByYW5nZWJ1ZjsKKyt9CisrCisgLyogV2UgZGlkIG5vdCBmaW5kIHRoZSBwYXR0ZXJuLCBkdW1wIG91dCB0aGUgaHVuayBzbyB0aGV5IGNhbiBoYW5kbGUgaXQuICovCisgCisgc3RhdGljIHZvaWQKK0BAIC05NDMsOCArOTY2LDgzIEBAIGFib3J0X2h1bmsgKHZvaWQpCisgICAgICAgKGludCkgTkVXX0NPTlRFWFRfRElGRiA8PSAoaW50KSBkaWZmX3R5cGUgPyAiICoqKioiIDogIiI7CisgICAgIGNoYXIgY29uc3QgKm1pbnVzZXMgPQorICAgICAgIChpbnQpIE5FV19DT05URVhUX0RJRkYgPD0gKGludCkgZGlmZl90eXBlID8gIiAtLS0tIiA6ICIgLS0tLS0iOworKyAgICBjaGFyIGNvbnN0ICpmdW5jdGlvbiA9IHBjaF9jX2Z1bmN0aW9uKCk7CisrICAgIGlmIChmdW5jdGlvbiA9PSBOVUxMKQorKwlmdW5jdGlvbiA9ICIiOworKworKyAgICBpZiAodW5pZmllZF9yZWplY3RfZmlsZXMpCisrICAgICAgeworKwkvKiBwcm9kdWNlIHVuaWZpZWQgcmVqZWN0IGZpbGVzICovCisrCWNoYXIgcmFuZ2VidWYwW0xJTkVOVU1fTEVOR1RIX0JPVU5EKjIgKyAyXTsKKysJY2hhciByYW5nZWJ1ZjFbTElORU5VTV9MRU5HVEhfQk9VTkQqMiArIDJdOworKwlMSU5FTlVNIGo7CisrCisrCS8qIEZpbmQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVtb3ZlIGFuZCBpbnNlcnQgc2VjdGlvbi4gKi8KKysJZm9yIChqID0gMDsgaiA8PSBwYXRfZW5kOyBqKyspCisrCSAgaWYgKHBjaF9jaGFyIChqKSA9PSAnPScpCisrCSAgICBicmVhazsKKysJZm9yIChpID0gaisxOyBpIDw9IHBhdF9lbmQ7IGkrKykKKysJICBpZiAocGNoX2NoYXIgKGkpID09ICdeJykKKysJICAgIGJyZWFrOworKwlpZiAocGNoX2NoYXIgKDApICE9ICcqJyB8fCBqID4gcGF0X2VuZCB8fCBpID4gcGF0X2VuZCsxKQorKwkgIGZhdGFsICgiaW50ZXJuYWwgZXJyb3IgaW4gYWJvcnRfaHVuayIpOworKwlpID0gMTsgaisrOworKworKwkvKiBAQCAtZnJvbSxsaW5lcyArdG8sbGluZXMgQEAgKi8KKysJZnByaW50ZiAocmVqZnAsICJAQCAtJXMgKyVzIEBAJXNcbiIsCisrCQkgZm9ybWF0X2xpbmVyYW5nZSAocmFuZ2VidWYwLCBvbGRmaXJzdCwgcGNoX3B0cm5fbGluZXMoKSksCisrCQkgZm9ybWF0X2xpbmVyYW5nZSAocmFuZ2VidWYxLCBuZXdmaXJzdCwgcGNoX3JlcGxfbGluZXMoKSksCisrCQkgZnVuY3Rpb24pOworKworKwl3aGlsZSAoICAgKGkgPD0gcGF0X2VuZCAmJiBwY2hfY2hhciAoaSkgIT0gJz0nKQorKwkgICAgICAgfHwgKGogPD0gcGF0X2VuZCAmJiBwY2hfY2hhciAoaikgIT0gJ14nKSkKKysJICB7CisrCSAgICBpZiAoaSA8PSBwYXRfZW5kCisrCQkmJiAocGNoX2NoYXIgKGkpID09ICctJyB8fCBwY2hfY2hhciAoaSkgPT0gJyEnKSkKKysJICAgICAgeworKwkJZnB1dGMoJy0nLCByZWpmcCk7CisrCQlwY2hfd3JpdGVfbGluZSAoaSsrLCByZWpmcCk7CisrCSAgICAgIH0KKysJICAgIGVsc2UgaWYgKGogPD0gcGF0X2VuZAorKwkJICAgICAmJiAocGNoX2NoYXIgKGopID09ICcrJyB8fCBwY2hfY2hhciAoaikgPT0gJyEnKSkKKysJICAgICAgeworKwkJZnB1dGMoJysnLCByZWpmcCk7CisrCQlwY2hfd3JpdGVfbGluZSAoaisrLCByZWpmcCk7CisrCSAgICAgIH0KKysJICAgIGVsc2UgaWYgKChpIDw9IHBhdF9lbmQKKysJCSAgICAgICYmIChwY2hfY2hhciAoaSkgPT0gJyAnIHx8IHBjaF9jaGFyIChpKSA9PSAnXG4nKSkgJiYKKysJCSAgICAgKGogPiBwYXRfZW5kCisrCQkgICAgICB8fCAocGNoX2NoYXIgKGopID09ICcgJyB8fCBwY2hfY2hhciAoaikgPT0gJ1xuJykpKQorKwkgICAgICB7CisrCQkvKiBVbmxlc3MgaiBpcyBhbHJlYWR5IHBhc3QgdGhlIGVuZCwgbGluZXMgaSBhbmQgagorKwkJICAgbXVzdCBiZSBlcXVhbCBoZXJlLiAgKi8KKysKKysJCWlmIChwY2hfY2hhciAoaSkgPT0gJyAnKQorKwkJICBmcHV0YygnICcsIHJlamZwKTsKKysJCXBjaF93cml0ZV9saW5lIChpKyssIHJlamZwKTsKKysJCWlmIChqIDw9IHBhdF9lbmQpCisrCQkgIGorKzsKKysJICAgICAgfQorKwkgICAgZWxzZSBpZiAoKGogPD0gcGF0X2VuZCAmJgorKwkJICAgICAocGNoX2NoYXIgKGopID09ICcgJyB8fCBwY2hfY2hhciAoaikgPT0gJ1xuJykpICYmCisrCQkgICAgIChwY2hfY2hhciAoaSkgPT0gJz0nKSkKKysJICAgICAgeworKwkJaWYgKHBjaF9jaGFyIChqKSA9PSAnICcpCisrCQkgIGZwdXRjKCcgJywgcmVqZnApOworKwkJcGNoX3dyaXRlX2xpbmUgKGorKywgcmVqZnApOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIGZhdGFsICgiaW50ZXJuYWwgZXJyb3IgaW4gYWJvcnRfaHVuayIpOworKwkgIH0KKysKKysJaWYgKGZlcnJvciAocmVqZnApKQorKwkgIHdyaXRlX2ZhdGFsICgpOworKwlyZXR1cm47CisrICAgICAgfQorIAorLSAgICBmcHJpbnRmKHJlamZwLCAiKioqKioqKioqKioqKioqXG4iKTsKKysgICAgLyogcHJvZHVjZSBjb250ZXh0IHR5cGUgcmVqZWN0IGZpbGVzICovCisrICAgCisrICAgIGZwcmludGYocmVqZnAsICIqKioqKioqKioqKioqKiolc1xuIiwgZnVuY3Rpb24pOworICAgICBmb3IgKGk9MDsgaTw9cGF0X2VuZDsgaSsrKSB7CisgCWNoYXIgbnVtYnVmMFtMSU5FTlVNX0xFTkdUSF9CT1VORCArIDFdOworIAljaGFyIG51bWJ1ZjFbTElORU5VTV9MRU5HVEhfQk9VTkQgKyAxXTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoXzIuNS45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2hfMi41LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI5YjI0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoXzIuNS45LmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgcGF0Y2guaW5jCitMSUNFTlNFID0gIkdQTHYyIgorCitTUkNfVVJJICs9ICIgZmlsZTovL2RlYmlhbi5wYXRjaCBcCisJICAgZmlsZTovL2luc3RhbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdW5pZmllZC1yZWplY3QtZmlsZXMuZGlmZiBcCisgICAgICAgICAgIGZpbGU6Ly9nbG9iYWwtcmVqZWN0LWZpbGUuZGlmZiAiCitQUiA9ICJyMyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCitTUkNfVVJJW21kNXN1bV0gPSAiZGFjZmI2MTgwODJmOGQzYTIxOTQ2MDExOTNjZjg3MTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWNiNWM2NDY5ZDczMmJjZjAxZDZlYzFhZmU5ZTY0ZjE2NjhjYWJhNWJmZGIxMDNjMjhkN2Y1MzdiYTNjZGI4YSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoXzIuNy41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2hfMi43LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNmY2Y1ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoXzIuNy41LmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgcGF0Y2guaW5jCitMSUNFTlNFID0gIkdQTHYzIgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImVkNGQ1Njc0ZWY0NTQzYjRlYjQ2M2RiMTY4ODg2ZGM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc0MzZmNWExOWY5M2MzY2E4MzE1M2NlOWM1Y2JlNDg0N2U5N2M1ZDk1NmU1N2EyMjAxMjFlNzQxZjZlNzk2OGYiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCithY3BhdGhzID0gIi1JICR7U30vbTQgIgorCitQQUNLQUdFQ09ORklHID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3hhdHRyJywgJ3hhdHRyJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbeGF0dHJdID0gIi0tZW5hYmxlLXhhdHRyLC0tZGlzYWJsZS14YXR0cixhdHRyLCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGZfMC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGZfMC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYjg3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZl8wLjguYmIKQEAgLTAsMCArMSwxMiBAQAorU1JDX1VSSSA9ICJodHRwOi8vbml4b3Mub3JnL3JlbGVhc2VzLyR7QlBOfS8ke0JQTn0tJHtQVn0vJHtCUE59LSR7UFZ9LnRhci5iejIiCitMSUNFTlNFID0gIkdQTHYzIgorU1VNTUFSWSA9ICJUb29sIHRvIGFsbG93IGVkaXRpbmcgb2YgUlBBVEggYW5kIGludGVycHJldGVyIGZpZWxkcyBpbiBFTEYgYmluYXJpZXMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1YjE1MWUzYzgzYjMxZjU5MzFiNGE5ZmMwMTYzNWJmZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjOTlmODRkMTI0MzQ3MzQwYzM2NzA3MDg5ZWM4ZjcwNTMwYWJkNTZlNzgyN2M1NGQ1MDZlYjRjYzA5N2ExN2U3IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF4LXV0aWxzL3BheC11dGlsc18xLjAuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BheC11dGlscy9wYXgtdXRpbHNfMS4wLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxNmEwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BheC11dGlscy9wYXgtdXRpbHNfMS4wLjUuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJTZWN1cml0eS1mb2N1c2VkIEVMRiBmaWxlcyBjaGVja2luZyB0b29sIgorREVTQ1JJUFRJT04gPSAiVGhpcyBpcyBhIHNtYWxsIHNldCBvZiB2YXJpb3VzIFBhWCBhd2FyZSBhbmQgcmVsYXRlZCBcCit1dGlsaXRpZXMgZm9yIEVMRiBiaW5hcmllcy4gSXQgY2FuIGNoZWNrIEVMRiBiaW5hcnkgZmlsZXMgYW5kIHJ1bm5pbmcgXAorcHJvY2Vzc2VzIGZvciBpc3N1ZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCB3aGVuIHVzaW5nIEVMRiBiaW5hcmllcyBcCithbG9uZyB3aXRoIFBhWCwgc3VjaCBhcyBub24tUElDIGNvZGUgb3IgZXhlY3V0YWJsZSBzdGFjayBhbmQgaGVhcC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdlbnRvby5vcmcvcHJvai9lbi9oYXJkZW5lZC9wYXgtdXRpbHMueG1sIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSIKKworU1JDX1VSSSA9ICJodHRwOi8vZ2VudG9vLm9zdW9zbC5vcmcvZGlzdGZpbGVzL3BheC11dGlscy0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNzMxZjUzODU2ODJhN2E2MmVlMmU3YjdkYWNjMTNhNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNjlhOTkzOGU0YWY3OTEyZDI2ZDU4NTA5NGJjMDIwM2U0MzU3MWE5OTBmZGQwNDgzMTkwODhhOGI4YWQ5MDZmIgorCitSREVQRU5EU18ke1BOfSArPSAiYmFzaCBweXRob24iCisKK2RvX2luc3RhbGwoKSB7CisgICAgb2VfcnVubWFrZSBQUkVGSVg9JHtEfSR7cHJlZml4fSBERVNURElSPSR7RH0gaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGliZXJyb3ItcGVybF8wLjE3MDI0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJlcnJvci1wZXJsXzAuMTcwMjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlMGU3ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGliZXJyb3ItcGVybF8wLjE3MDI0LmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiRXJyb3IgLSBFcnJvci9leGNlcHRpb24gaGFuZGxpbmcgaW4gYW4gT08taXNoIHdheSIKK0RFU0NSSVBUSU9OID0gIlRoZSBFcnJvciBwYWNrYWdlIHByb3ZpZGVzIHR3byBpbnRlcmZhY2VzLiBGaXJzdGx5IFwKK0Vycm9yIHByb3ZpZGVzIGEgcHJvY2VkdXJhbCBpbnRlcmZhY2UgdG8gZXhjZXB0aW9uIGhhbmRsaW5nLiBcCitTZWNvbmRseSBFcnJvciBpcyBhIGJhc2UgY2xhc3MgZm9yIGVycm9ycy9leGNlcHRpb25zIHRoYXQgY2FuIFwKK2VpdGhlciBiZSB0aHJvd24sIGZvciBzdWJzZXF1ZW50IGNhdGNoLCBvciBjYW4gc2ltcGx5IGJlIHJlY29yZGVkLiIKKworU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9OGYzNDk5ZDA5ZWU3NGEwNTBjMDMxOTM5MWZmOWQxMDAiCisKK0RFUEVORFMgKz0gInBlcmwiCisKK1NSQ19VUkkgPSAiaHR0cDovL2NwYW4ubWV0YWNwYW4ub3JnL2F1dGhvcnMvaWQvUy9TSC9TSExPTUlGL0Vycm9yLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjdlMzY3NmE3ZmIxNGY2NWY1NjhmMTJkNGI0MGEyYTcyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA3NGRiN2M3ODNhNjdiMDY2N2VjYTY0YTRmNmEwYzNkZTk0OTk4YWZjOTJjMDFkNjQ1MzE2M2ViMDRiOTE1MGQiCisKK1MgPSAiJHtXT1JLRElSfS9FcnJvci0ke1BWfSIKKworaW5oZXJpdCBjcGFuCisKK2RvX2NvbXBpbGUoKSB7CisJZXhwb3J0IExJQkM9IiQoZmluZCAke1NUQUdJTkdfRElSX1RBUkdFVH0vJHtiYXNlX2xpYmRpcn0vIC1uYW1lICdsaWJjLSouc28nKSIKKwljcGFuX2RvX2NvbXBpbGUKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnVyaS1wZXJsXzEuNjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnVyaS1wZXJsXzEuNjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwOWE0NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlidXJpLXBlcmxfMS42MC5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIHRvIG1hbmlwdWxhdGUgYW5kIGFjY2VzcyBVUkkgc3RyaW5ncyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgVVJJLnBtIG1vZHVsZSB3aXRoIGZyaWVuZHMuIFwKK1RoZSBtb2R1bGUgaW1wbGVtZW50cyB0aGUgVVJJIGNsYXNzLiBVUkkgb2JqZWN0cyBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgXAorYW5kIG1hbmlwdWxhdGUgdGhlIHZhcmlvdXMgY29tcG9uZW50cyB0aGF0IG1ha2UgdXAgdGhlc2Ugc3RyaW5ncy4iCisKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MjY7ZW5kbGluZT0zMDttZDU9NmMzM2FlNWM4N2ZkMWM0ODk3NzE0ZTEyMmRkOWMyM2QiCisKK0RFUEVORFMgKz0gInBlcmwiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jcGFuLm9yZy9hdXRob3JzL2lkL0cvR0EvR0FBUy9VUkktJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzBmNzM5YmU4Y2UyOGI4YmFiYTdjNTkyMGZmZWU0ZGMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWY5MmQzZGM2NGFjYjg4NDVlOTkxN2M5NDVlMjJiOWE1Mjc1YWViOWZmOTI0ZWI3ODczYzNiN2E1YzBkMjM3NyIKKworUyA9ICIke1dPUktESVJ9L1VSSS0ke1BWfSIKKworRVhUUkFfQ1BBTkZMQUdTID0gIkVYUEFUTElCUEFUSD0ke1NUQUdJTkdfTElCRElSfSBFWFBBVElOQ1BBVEg9JHtTVEFHSU5HX0lOQ0RJUn0iCisKK2luaGVyaXQgY3BhbgorCitkb19jb21waWxlKCkgeworCWV4cG9ydCBMSUJDPSIkKGZpbmQgJHtTVEFHSU5HX0RJUl9UQVJHRVR9LyR7YmFzZV9saWJkaXJ9LyAtbmFtZSAnbGliYy0qLnNvJykiCisJY3Bhbl9kb19jb21waWxlCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtcGFyc2VyLXBlcmxfMi40NC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXBhcnNlci1wZXJsXzIuNDQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNjZDQxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXBhcnNlci1wZXJsXzIuNDQuYmIKQEAgLTAsMCArMSwzNyBAQAorU1VNTUFSWSA9ICJYTUw6OlBhcnNlciAtIEEgcGVybCBtb2R1bGUgZm9yIHBhcnNpbmcgWE1MIGRvY3VtZW50cyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTI7ZW5kbGluZT02O21kNT1jODc2N2Q3NTE2MjI5ZjA3YjI2ZTQyZDFjZjhiNTFmMSIKKworREVQRU5EUyArPSAiZXhwYXQgZXhwYXQtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuY3Bhbi5vcmcvbW9kdWxlcy9ieS1tb2R1bGUvWE1ML1hNTC1QYXJzZXItJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gImFmNDgxM2ZlMzk1MjM2MjQ1MTIwMWNlZDZmYmNlMzc5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFhZTlkMDdlZTljMzUzMjZiM2Q5YWFkNTZlYWU3MWE2NzMwYTczYTExNmI5ZmU5ZThhNDc1OGI3Y2MwMzMyMTYiCisKK1MgPSAiJHtXT1JLRElSfS9YTUwtUGFyc2VyLSR7UFZ9IgorCitFWFRSQV9DUEFORkxBR1MgPSAiRVhQQVRMSUJQQVRIPSR7U1RBR0lOR19MSUJESVJ9IEVYUEFUSU5DUEFUSD0ke1NUQUdJTkdfSU5DRElSfSBDQz0nJHtDQ30nIExEPScke0NDTER9JyBGVUxMX0FSPScke0FSfSciCisKK2luaGVyaXQgY3BhbgorCisjIGZpeCB1cCBzdWIgTWFrZU1ha2VyIHByb2plY3QgYXMgYXJndW1lbnRzIGRvbid0IGdldCBwcm9wYWdhdGVkIHRob3VnaAorIyBzZWUgaHR0cHM6Ly9ydC5jcGFuLm9yZy9QdWJsaWMvQnVnL0Rpc3BsYXkuaHRtbD9pZD0yODYzMgorZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwlzZWQgJ3M6LS1zeXNyb290PS4qXChcc1x8JFwpOi0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gOmcnIC1pIE1ha2VmaWxlIEV4cGF0L01ha2VmaWxlCisJc2VkICdzOl5GVUxMX0FSID0gLio6RlVMTF9BUiA9ICR7QVJ9OmcnIC1pIEV4cGF0L01ha2VmaWxlCit9CisKK2RvX2NvbXBpbGUoKSB7CisJZXhwb3J0IExJQkM9IiQoZmluZCAke1NUQUdJTkdfRElSX1RBUkdFVH0vJHtiYXNlX2xpYmRpcn0vIC1uYW1lICdsaWJjLSouc28nKSIKKwljcGFuX2RvX2NvbXBpbGUKK30KKworZG9fY29tcGlsZV9jbGFzcy1uYXRpdmUoKSB7CisJY3Bhbl9kb19jb21waWxlCit9CisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3BlcmwvdmVuZG9yX3BlcmwvKi9hdXRvL1hNTC9QYXJzZXIvRXhwYXQvLmRlYnVnLyIKKworQkJDTEFTU0VYVEVORD0ibmF0aXZlIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wZXJsXzAuMDguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wZXJsXzAuMDguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMwMTk3NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXBlcmxfMC4wOC5iYgpAQCAtMCwwICsxLDI3IEBACitERVNDUklQVElPTiA9ICJsaWJ4bWwtcGVybCBpcyBhIGNvbGxlY3Rpb24gb2Ygc21hbGxlciBQZXJsIG1vZHVsZXMsIHNjcmlwdHMsIGFuZCBcCitkb2N1bWVudHMgZm9yIHdvcmtpbmcgd2l0aCBYTUwgaW4gUGVybC4gIGxpYnhtbC1wZXJsIHNvZnR3YXJlIFwKK3dvcmtzIGluIGNvbWJpbmF0aW9uIHdpdGggWE1MOjpQYXJzZXIsIFBlcmxTQVgsIFhNTDo6RE9NLCBcCitYTUw6Okdyb3ZlIGFuZCBvdGhlcnMuIgorU1VNTUFSWSA9ICJDb2xsZWN0aW9uIG9mIFBlcmwgbW9kdWxlcyBmb3Igd29ya2luZyB3aXRoIFhNTCIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCitQUiA9ICJyMyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0zMztlbmRsaW5lPTM1O21kNT0xNzA1NTQ5ZWVmNzU3N2EzZDZiYTcxMTIzYTFmMGNlOCIKKworREVQRU5EUyArPSAibGlieG1sLXBhcnNlci1wZXJsIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuY3Bhbi5vcmcvbW9kdWxlcy9ieS1tb2R1bGUvWE1MLyR7QlBOfS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwZWQ1ZmJkZGE1M2QxMzAxZGRhZWQ4OGRiMTA1MDNiYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NTcxMDU5YjdiNWQ0OGI3Y2U1MmIwMTM4OWU5NWQ3OThiZjVjZjIwMjA1MjNjMTUzZmYyN2I0OTgxNTNjOWNiIgorCitFWFRSQV9DUEFORkxBR1MgPSAiRVhQQVRMSUJQQVRIPSR7U1RBR0lOR19MSUJESVJ9IEVYUEFUSU5DUEFUSD0ke1NUQUdJTkdfSU5DRElSfSIKKworaW5oZXJpdCBjcGFuCisKK2RvX2NvbXBpbGUoKSB7CisJZXhwb3J0IExJQkM9IiQoZmluZCAke1NUQUdJTkdfRElSX1RBUkdFVH0vJHtiYXNlX2xpYmRpcn0vIC1uYW1lICdsaWJjLSouc28nKSIKKwljcGFuX2RvX2NvbXBpbGUKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtc2ltcGxlLXBlcmxfMi4yMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXNpbXBsZS1wZXJsXzIuMjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcyMWI0YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXNpbXBsZS1wZXJsXzIuMjAuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJQZXJsIG1vZHVsZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBYTUwiCitERVNDUklQVElPTiA9ICJUaGUgWE1MOjpTaW1wbGUgUGVybCBtb2R1bGUgcHJvdmlkZXMgYSBzaW1wbGUgQVBJIGxheWVyIFwKK29uIHRvcCBvZiBhbiB1bmRlcmx5aW5nIFhNTCBwYXJzaW5nIG1vZHVsZSB0byBtYWludGFpbiBYTUwgZmlsZXMgXAorKGVzcGVjaWFsbHkgY29uZmlndXJhdGlvbiBmaWxlcykuIEl0IGlzIGEgYmx1bnQgcmV3cml0ZSBvZiBYTUw6OlNpbXBsZSBcCisoYnkgR3JhbnQgTWNMZWFuKSB0byB1c2UgdGhlIFhNTDo6TGliWE1MIHBhcnNlciBmb3IgWE1MIHN0cnVjdHVyZXMsIFwKK3doZXJlIHRoZSBvcmlnaW5hbCB1c2VzIHBsYWluIFBlcmwgb3IgU0FYIHBhcnNlcnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+bWFya292L1hNTC1MaWJYTUwtU2ltcGxlLTAuOTMvbGliL1hNTC9MaWJYTUwvU2ltcGxlLnBvZCIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1lN2RiYjNlMjI0MWZhYzg0NTc5NjcwNTNmYzFhMWRkYiIKK0RFUEVORFMgKz0gImxpYnhtbC1wYXJzZXItcGVybCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmNwYW4ub3JnL21vZHVsZXMvYnktbW9kdWxlL1hNTC9YTUwtU2ltcGxlLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjRkMTA5NjRlMTIzYjc2ZWNhMzY2Nzg0NjRkYWE2M2NkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVjZmYxM2QwODAyNzkyZGExZWI0NTg5NWNlMWJlNDYxOTAzZDk4ZWM5N2M5Yzk1M2JjODQwNmFmNzI5NDQzNGEiCisKK1MgPSAiJHtXT1JLRElSfS9YTUwtU2ltcGxlLSR7UFZ9IgorCitFWFRSQV9QRVJMRkxBR1MgPSAiLUkgJHtQRVJMSE9TVExJQn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1uYXRpdmVfNS4yMi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLW5hdGl2ZV81LjIyLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlhMWNhYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1uYXRpdmVfNS4yMi4wLmJiCkBAIC0wLDAgKzEsMTIzIEBACityZXF1aXJlIHBlcmwuaW5jCisKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgICAgZmlsZTovL0NvbmZpZ3VyZS1tdWx0aWxpYi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wZXJsLWNvbmZpZ3BtLXN3aXRjaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9uYXRpdmUtbm9wYWNrbGlzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9uYXRpdmUtcGVybGluYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9NTV9Vbml4LnBtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RlYmlhbi9lcnJub192ZXIuZGlmZiBcCisgICAgICAgICAgIGZpbGU6Ly9keW5hbG9hZGVyaGFjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wZXJsLVBhdGhUb29scy1kb24tdC1maWx0ZXItb3V0LWJsaWItZnJvbS1JTkMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImZmMGYwOWIxN2RlNDI2ZWZmMzIzNDI2Y2IxNDBlZTc5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJlODNlYWQwYzVjMjZjYmJlNjI2ZmE0YmFjMWE0YmVhYmUyM2E5ZWViYzE1ZDM1YmE0OWNjZGUxMTg3OGUxOTYiCisKK2luaGVyaXQgbmF0aXZlCisKK05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYID0gIi8ke1BOfSIKKworZXhwb3J0IExEPSIke0NDTER9IgorCitkb19jb25maWd1cmUgKCkgeworCS4vQ29uZmlndXJlIFwKKwkJLURjYz0iJHtDQ30iIFwKKwkJLURjZmxhZ3M9IiR7Q0ZMQUdTfSIgXAorCQktRGxkZmxhZ3M9IiR7TERGTEFHU30iIFwKKwkJLURjZl9ieT0iT3BlbiBFbWJlZGRlZCIgXAorCQktRHByZWZpeD0ke3ByZWZpeH0gXAorCQktRHZlbmRvcnByZWZpeD0ke3ByZWZpeH0gXAorCQktRHZlbmRvcnByZWZpeD0ke3ByZWZpeH0gXAorCQktRHNpdGVwcmVmaXg9JHtwcmVmaXh9IFwKKwkJXAorCQktRGJpbj0ke1NUQUdJTkdfQklORElSfS8ke1BOfSBcCisJCS1EcHJpdmxpYj0ke1NUQUdJTkdfTElCRElSfS9wZXJsLyR7UFZ9IFwKKwkJLURhcmNobGliPSR7U1RBR0lOR19MSUJESVJ9L3BlcmwvJHtQVn0gXAorCQktRHZlbmRvcmxpYj0ke1NUQUdJTkdfTElCRElSfS9wZXJsLyR7UFZ9IFwKKwkJLUR2ZW5kb3JhcmNoPSR7U1RBR0lOR19MSUJESVJ9L3BlcmwvJHtQVn0gXAorCQktRHNpdGVsaWI9JHtTVEFHSU5HX0xJQkRJUn0vcGVybC8ke1BWfSBcCisJCS1Ec2l0ZWFyY2g9JHtTVEFHSU5HX0xJQkRJUn0vcGVybC8ke1BWfSBcCisJCVwKKwkJLUR1c2VzaHJwbGliIFwKKwkJLUR1c2V0aHJlYWRzIFwKKwkJLUR1c2VpdGhyZWFkcyBcCisJCS1EdXNlbGFyZ2VmaWxlcyBcCisJCS1Ebm9leHRlbnNpb25zPU9EQk1fRmlsZSBcCisJCS1VZF9kb3N1aWQgXAorCQktVWlfZGIgXAorCQktVWlfbmRibSBcCisJCS1VaV9nZGJtIFwKKwkJLVVpX2dkYm1fbmRibSBcCisJCS1VaV9nZGJtbmRibSBcCisJCS1EaV9zaGFkb3cgXAorCQktRGlfc3lzbG9nIFwKKwkJLUR1c2VwZXJsaW8gXAorCQktRG1hbjNleHQ9M3BtIFwKKwkJLURzZWQ9L2Jpbi9zZWQgXAorCQktVWFmcyBcCisJCS1VZF9jc2ggXAorCQktVXVzZXNmaW8gXAorCQktVXVzZW5tIC1kZXMKK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisKKwkjIFdlIG5lZWQgYSBob3N0cGVybCBsaW5rIGZvciBidWlsZGluZyBwZXJsCisJbG4gLXNmIHBlcmwke1BWfSAke0R9JHtiaW5kaXJ9L2hvc3RwZXJsCisKKyAgICAgICAgbG4gLXNmIHBlcmwgJHtEfSR7bGliZGlyfS9wZXJsNQorCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ09SRSBcCisJICAgICAgICAgICAke0R9JHtkYXRhZGlyfS9wZXJsLyR7UFZ9L0V4dFV0aWxzCisKKwkjIFNhdmUgbmF0aXZlIGNvbmZpZyAKKwlpbnN0YWxsIGNvbmZpZy5zaCAke0R9JHtsaWJkaXJ9L3BlcmwKKwlpbnN0YWxsIGxpYi9Db25maWcucG0gJHtEfSR7bGliZGlyfS9wZXJsLyR7UFZ9LworCWluc3RhbGwgbGliL0V4dFV0aWxzL3R5cGVtYXAgJHtEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0V4dFV0aWxzLworCisJIyBwZXJsIHNoYXJlZCBsaWJyYXJ5IGhlYWRlcnMKKwkjIHJlZmVyZW5jZSBwZXJsIDUuMjAuMC0xIGluIGRlYmlhbjoKKwkjIGh0dHBzOi8vcGFja2FnZXMuZGViaWFuLm9yZy9leHBlcmltZW50YWwvaTM4Ni9wZXJsL2ZpbGVsaXN0CisJZm9yIGkgaW4gYXYuaCBiaXRjb3VudC5oIGNoYXJjbGFzc19pbnZsaXN0cy5oIGNvbmZpZy5oIGNvcC5oIGN2LmggZG9zaXNoLmggXAorCQllbWJlZC5oIGVtYmVkdmFyLmggRVhURVJOLmggZmFrZXNkaW8uaCBmZWF0dXJlLmggZm9ybS5oIGdpdF92ZXJzaW9uLmggXAorCQlndi5oIGhhbmR5LmggaHZfZnVuYy5oIGh2LmggaW5saW5lLmggSU5URVJOLmggaW50cnB2YXIuaCBpcGVybHN5cy5oIFwKKwkJa2V5d29yZHMuaCBsMV9jaGFyX2NsYXNzX3RhYi5oIG1hbGxvY19jdGwuaCBtZXRhY29uZmlnLmggbWdfZGF0YS5oIFwKKwkJbWcuaCBtZ19yYXcuaCBtZ192dGFibGUuaCBteWR0cmFjZS5oIG5vc3RkaW8uaCBvcGNvZGUuaCBvcC5oIFwKKwkJb3BuYW1lcy5oIG9wX3JlZ19jb21tb24uaCBvdmVybG9hZC5oIHBhZC5oIHBhcnNlci5oIHBhdGNobGV2ZWwuaCBcCisJCXBlcmxhcGkuaCBwZXJsLmggcGVybGlvLmggcGVybGlvbC5oIHBlcmxzZGlvLmggcGVybHZhcnMuaCBwZXJseS5oIFwKKwkJcHAuaCBwcF9wcm90by5oIHByb3RvLmggcmVlbnRyLmggcmVnY2hhcmNsYXNzLmggcmVnY29tcC5oIHJlZ2V4cC5oIFwKKwkJcmVnbm9kZXMuaCBzY29wZS5oIHN2LmggdGhyZWFkLmggdGltZTY0X2NvbmZpZy5oIHRpbWU2NC5oIHVjb25maWcuaCBcCisJCXVuaWNvZGVfY29uc3RhbnRzLmggdW5peGlzaC5oIHV0ZjguaCB1dGZlYmNkaWMuaCB1dGlsLmggdXVkbWFwLmggXAorCQl2dXRpbC5oIHdhcm5pbmdzLmggWFNVQi5oCisJZG8KKwkJaW5zdGFsbCAkaSAke0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ09SRQorCWRvbmUKKworCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vcGVybCBQRVJMNUxJQj0nJFBFUkw1TElCOiR7U1RBR0lOR19MSUJESVJ9L3BlcmwvJHtQVn06JHtTVEFHSU5HX0xJQkRJUn0vcGVybDoke1NUQUdJTkdfTElCRElSfS9wZXJsL3NpdGVfcGVybC8ke1BWfToke1NUQUdJTkdfTElCRElSfS9wZXJsL3ZlbmRvcl9wZXJsLyR7UFZ9JworCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vcGVybCR7UFZ9IFBFUkw1TElCPSckUEVSTDVMSUI6JHtTVEFHSU5HX0xJQkRJUn0vcGVybC8ke1BWfToke1NUQUdJTkdfTElCRElSfS9wZXJsJHtTVEFHSU5HX0xJQkRJUn0vcGVybDoke1NUQUdJTkdfTElCRElSfS9wZXJsL3NpdGVfcGVybC8ke1BWfToke1NUQUdJTkdfTElCRElSfS9wZXJsL3ZlbmRvcl9wZXJsLyR7UFZ9JworCisJIyBVc2UgL3Vzci9iaW4vZW52IG5hdGl2ZXBlcmwgZm9yIHRoZSBwZXJsIHNjcmlwdC4KKwlmb3IgZiBpbiBgZ3JlcCAtSWwgJyMhICoke2JpbmRpcn0vcGVybCcgJHtEfS8ke2JpbmRpcn0vKmA7IGRvCisJCXNlZCAtaSAtZSAnc3wke2JpbmRpcn0vcGVybHwvdXNyL2Jpbi9lbnYgbmF0aXZlcGVybHwnICRmCisJZG9uZQorfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gInBlcmxfc3lzcm9vdF9jcmVhdGVfd3JhcHBlciIKKworcGVybF9zeXNyb290X2NyZWF0ZV93cmFwcGVyICgpIHsKKwlta2RpciAtcCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcn0KKwkjIENyZWF0ZSBhIHdyYXBwZXIgdGhhdCAvdXNyL2Jpbi9lbnYgcGVybCB3aWxsIHVzZSB0byBnZXQgcGVybC1uYXRpdmUuCisJIyBUaGlzIE1VU1QgbGl2ZSBpbiB0aGUgbm9ybWFsIGJpbmRpci4KKwljYXQgPiAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcn0vLi4vbmF0aXZlcGVybCA8PCBFT0YKKyMhL2Jpbi9zaAorcmVhbHBhdGg9XGByZWFkbGluayAtZm4gXCQwXGAKK2V4ZWMgXGBkaXJuYW1lIFwkcmVhbHBhdGhcYC9wZXJsLW5hdGl2ZS9wZXJsICJcJEAiCitFT0YKKwljaG1vZCAwNzU1ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyfS8uLi9uYXRpdmVwZXJsCisJY2F0ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyfS8uLi9uYXRpdmVwZXJsCit9CisKKyMgRml4IHRoZSBwYXRoIGluIHNzdGF0ZQorU1NUQVRFX1NDQU5fRklMRVMgKz0gIioucG0gKi5wb2QgKi5oICoucGwgKi5zaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1wdGVzdC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcHRlc3QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0OGVhN2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcHRlc3QuaW5jCkBAIC0wLDAgKzEsMzcgQEAKK2luaGVyaXQgcHRlc3QKKworU1JDX1VSSSArPSAiZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgICIKKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJbWtkaXIgLXAgJHtEfSR7UFRFU1RfUEFUSH0KKwlzZWQgLWUgInM6XC9vcHQ6XC91c3I6IiAtaSBQb3J0aW5nL2FkZC1wYWNrYWdlLnBsCisJc2VkIC1lICJzOlwvbG9jYWxcL2dudVwvOlwvOiIgLWkgaGludHMvY3h1eC5zaAorCXRhciAtY2YgLSAqIC0tZXhjbHVkZSBcKi5vIC0tZXhjbHVkZSBsaWJwZXJsLnNvIC0tZXhjbHVkZSBNYWtlZmlsZSAtLWV4Y2x1ZGUgbWFrZWZpbGUgLS1leGNsdWRlIGhvc3RwZXJsIFwKKwkJLS1leGNsdWRlIG1pbmlwZXJsIC0tZXhjbHVkZSBnZW5lcmF0ZV91dWRtYXAgLS1leGNsdWRlIHBhdGNoZXMgfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCisKKwlzZWQgLWkgLWUgInMsJHtEfSwsZyIgXAorCSAgICAgICAtZSAicywtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9IT1NUfSwsZyIgXAorCSAgICAgICAtZSAicywtaXN5c3RlbSR7U1RBR0lOR19JTkNESVJ9ICwsZyIgXAorCSAgICAgICAtZSAicywke1NUQUdJTkdfTElCRElSfSwke2xpYmRpcn0sZyIgXAorCSAgICAgICAtZSAicywke1NUQUdJTkdfQklORElSfSwke2JpbmRpcn0sZyIgXAorCSAgICAgICAtZSAicywke1NUQUdJTkdfSU5DRElSfSwke2luY2x1ZGVkaXJ9LGciIFwKKwkgICAgICAgLWUgInMsJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlLywke2JpbmRpcn0vLGciIFwKKwkgICAgICAgLWUgInMsJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LywsZyIgXAorCSAgICAgICAtZSAicywke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0vJHtUQVJHRVRfUFJFRklYfSwke2JpbmRpcn0sZyIgXAorCSAgICAke0R9JHtQVEVTVF9QQVRIfS9saWIvQ29uZmlnLnBtCisKKwlsbiAtc2YgJHtiaW5kaXJ9L3BlcmwgJHtEfSR7UFRFU1RfUEFUSH0vdC9wZXJsCisKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgIyBQdXQgYWxsICoudCBmaWxlcyBmcm9tIHRoZSBsaWIgZGlyIGluIHRoZSBwdGVzdCBwYWNrYWdlCisgICAgIyBkb19zcGxpdF9wYWNrYWdlcyByZXF1aXJlcyBhIHBhaXIgb2YgKCkgaW4gdGhlIHJlZ2V4LCBidXQgd2UgaGF2ZSBub3RoaW5nCisgICAgIyB0byBtYXRjaCwgc28gdXNlIGFuIGVtcHR5IHBhaXIuCisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdGVzdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgZC5leHBhbmQoJyR7bGliZGlyfS9wZXJsLyR7UFZ9JyksICcuKlwudCgpJywKKyAgICAgICAgICAgICcke1BOfS1wdGVzdCVzJywgJyVzJywgcmVjdXJzaXZlPVRydWUsIG1hdGNoX3BhdGg9VHJ1ZSkKK30KKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiR7UE59LW1vZHVsZXMgJHtQTn0tZG9jICR7UE59LW1pc2Mgc2VkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXJkZXBlbmRzXzUuMjIuMC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcmRlcGVuZHNfNS4yMi4wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Zjg4NmYzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXJkZXBlbmRzXzUuMjIuMC5pbmMKQEAgLTAsMCArMSwyNTY3IEBACisjIFRvIGNyZWF0ZS91cGRhdGUgdGhlIHBlcmwtcmRlcGVuZHNfJHtQVn0uaW5jIHVzZSB0aGlzIHBpZWNlIG9mIHVnbHkgc2NyaXB0IChtb2RpZmllZCBmb3IgeW91ciBhcmNoL3BhdGhzIGV0Yyk6CisKKyNqaWFob25neHU6NS4yMC4wLXIxJCBwd2QKKyMvaG9tZS9qaWFob25neHUveW9jdG8vYnVpbGQtMjAxNDA2MTgtcGVybC90bXAvd29yay9pNTg2LXBva3ktbGludXgvcGVybC81LjIwLjAtcjEKKworIzEgY3AgLXIgcGFja2FnZXMtc3BsaXQgcGFja2FnZXMtc3BsaXQubmV3ICYmIGNkIHBhY2thZ2VzLXNwbGl0Lm5ldworIzIgZmluZCAuIC1uYW1lIFwqLnBtIHwgeGFyZ3Mgc2VkIC1pICcvXj1oZWFkLywvXj1jdXQvZCcKKyMzIGVncmVwIC1yICJeXHMqKFw8dXNlIC4qfFw8cmVxdWlyZSAuKik7PyIgcGVybC1tb2R1bGUtKiAtLWluY2x1ZGU9IioucG0iIAorI3wgc2VkICJzL1wvLipcLnBtOiAqLyArPSAvZztzL1tcIlwnXS8vZztzLzsuKi9cIi9nO3MvKz0gLipcKHJlcXVpcmVcfHVzZVwpXD4gKi8rPSBcInBlcmwtbW9kdWxlLS9nO3MvQ1BBTlBMVVM6Oi4qL2NwYW5wbHVzL2c7cy9DUEFOOjouKi9jcGFuL2c7cy86Oi8tL2c7cy8gW14rXCJdLiovL2c7cy9fLy0vZztzL1wucGxcIiQvXCIvO3MvXCJcP1wkL1wiLztzLygvLzsiIHwgdHIgWzp1cHBlcjpdIFs6bG93ZXI6XSAKKyN8IGdyZXAgLXYgLWUgIlwtdm1zXC0iIC1lIG1vZHVsZS01IC1lICJeJCIgLWUgIlxcJCIgLWUgeW91ciAtZSB0ayAtZSBhdXRvcGVybCAtZSBodG1sIC1lIGh0dHAgLWUgcGFyc2UtY3BhbiAtZSBwZXJsLW9zdHlwZSAtZSBuZGJtLWZpbGUgLWUgbW9kdWxlLW1hYyAtZSBmY2dpIC1lIGx3cCAtZSBkYmQgLWUgZGJpeCAKKyN8IHNvcnQgLXUgCisjfCBzZWQgJ3MvXi9SREVQRU5EU18vO3MvcGVybC1tb2R1bGUtLyR7UE59LW1vZHVsZS0vZztzL21vZHVsZS1cKG1vZHVsZS1cKS9cMS9nO3MvXChtb2R1bGUtbG9hZFwpLWNvbmRpdGlvbmFsL1wxL2c7cy9lbmNvZGUtY29uZmlnbG9jYWwvJi1wbS87JyAKKyN8IGVncmVwIC13diAnPT58bW9kdWxlLWF8bW9kdWxlLWFwYWNoZS4/fG1vZHVsZS1hcHJ8bW9kdWxlLWF1dGhlbi1zYXNsfG1vZHVsZS1iLWFzbWRhdGF8bW9kdWxlLWNvbnZlcnQtZWJjZGljfG1vZHVsZS1kZXZlbC1zaXplfG1vZHVsZS1kaWdlc3QtcGVybC1tZDV8bW9kdWxlLWR1bXB2YWx1ZXxtb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtYWFhcmdoNTZoYXNofG1vZHVsZS1leHR1dGlscy14c3N5bXNldHxtb2R1bGUtZmlsZS1ic2RnbG9ifG1vZHVsZS1mb3J8bW9kdWxlLWl0fG1vZHVsZS1pby1zdHJpbmd8bW9kdWxlLWlwYy1zeXN0ZW0tc2ltcGxlfG1vZHVsZS1sZXhpY2FsfG1vZHVsZS1sb2NhbC1saWJ8bWV0YWRhdGF8bW9kdWxlLW1vZHBlcmwtdXRpbHxtb2R1bGUtcGx1Z2dhYmxlLW9iamVjdHxtb2R1bGUtdGVzdC1idWlsZGVyLWlvLXNjYWxhcnxtb2R1bGUtdGV4dC11bmlkZWNvZGV8bW9kdWxlLXdpbjMyfG9iamVjdHNcc2xvYWR8c3lzY2FsbC5waHxzeXN0ZW1pbmZvLnBofCVzJyA+IC90bXAvcGVybC1yZGVwZW5kcworCitSREVQRU5EU19wZXJsLW1pc2MgKz0gInBlcmwiCitSREVQRU5EU18ke1BOfS1wb2QgKz0gInBlcmwiCisKKyMgU29tZSBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IHRoZSBhYm92ZSBkb2Vzbid0IG1hbmFnZSB0byBmaWd1cmUgb3V0CitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWNhbGMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXF1ZXVlICs9ICIke1BOfS1tb2R1bGUtYXR0cmlidXRlcyIKKworCisjIERlcGVuZHMgbGlzdAorIyBjb3B5IGNvbnRlbnRzIG9mIC90bXAvcGVybC1yZGVwZW5kcyBpbiB0aGlzIGZpbGUKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hbnlkYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hbnlkYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtY3BhbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1nZXRvcHQtc3RkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtaWYiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1uZXQtcGluZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXVzZXItcHdlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtZ2V0b3B0LWxvbmciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzLWVudiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlLXJlc3VsdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci15YW1saXNoLXJlYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXlhbWxpc2gtd3JpdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQgKz0gIiR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0LXRlc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlLXJlc3VsdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlLXJlc3VsdCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlLXJlc3VsdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQtdGVzdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0LXRlc3QgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iemlwMiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1maWxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1maWxlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1maWxlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1maWxlICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1maWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtaW8temxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJ5YmFzZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZS1oYW5kbGVycyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXR0cmlidXRlLWhhbmRsZXJzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZS1oYW5kbGVycyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXR0cmlidXRlLWhhbmRsZXJzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXR0cmlidXRlcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXR0cmlidXRlcyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXR0cmlidXRlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZXMgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24gKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbiArPSAiJHtQTn0tbW9kdWxlLWZhdGFsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24gKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uLXN5c3RlbSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24tc3lzdGVtICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uLXN5c3RlbSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbi1zeXN0ZW0gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWhpbnRzICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWhpbnRzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWhpbnRzICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1oaW50cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWhpbnRzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUgKz0gIiR7UE59LW1vZHVsZS1saWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZSArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BlLWd1YXJkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGUtZ3VhcmQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BlLWd1YXJkc3RhY2sgKz0gIiR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BlLWd1YXJkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGUtZ3VhcmRzdGFjayArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BlLWd1YXJkc3RhY2sgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BldXRpbCArPSAiJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGUtZ3VhcmRzdGFjayIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BldXRpbCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGV1dGlsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGV1dGlsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1za2lwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2tpcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9sb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9sb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b3NwbGl0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvc3BsaXQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b3NwbGl0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b3NwbGl0ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvc3BsaXQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b3NwbGl0ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvc3BsaXQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b3VzZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iYXNlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWNvbmNpc2UgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItY29uY2lzZSArPSAiJHtQTn0tbW9kdWxlLWItb3AtcHJpdmF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWNvbmNpc2UgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1jb25jaXNlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1jb25jaXNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItY29uY2lzZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVidWcgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVidWcgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZWJ1ZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlcGFyc2UgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtZmVhdHVyZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlcGFyc2UgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZGluZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlcGFyc2UgKz0gIiR7UE59LW1vZHVsZS1yZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlcGFyc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlcGFyc2UgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iZW5jaG1hcmsgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJlbmNobWFyayArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJlbmNobWFyayArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LXRyYWNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdudW0gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdC10cmFjZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdudW0gKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdudW0gKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC10cmFjZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdudW0gKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdudW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1iaWdpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LXRyYWNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlncmF0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJsaWIgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmxpYiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1ibGliICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1zaG93bGV4ICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXNob3dsZXggKz0gIiR7UE59LW1vZHVsZS1iLWNvbmNpc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1zaG93bGV4ICs9ICIke1BOfS1tb2R1bGUtYi10ZXJzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXNob3dsZXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi10ZXJzZSArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi10ZXJzZSArPSAiJHtQTn0tbW9kdWxlLWItY29uY2lzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXRlcnNlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXRlcnNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWIteHJlZiArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi14cmVmICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWIteHJlZiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1ieXRlcyArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzLWhlYXZ5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJ5dGVzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jYXJwLWhlYXZ5ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jYXJwICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2FycCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jYXJwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2hhcm5hbWVzICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2hhcm5hbWVzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jaGFybmFtZXMgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2hhcm5hbWVzICs9ICIke1BOfS1tb2R1bGUtcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2hhcm5hbWVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNoYXJuYW1lcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIgKz0gIiR7UE59LW1vZHVsZS1jYXJwICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliICs9ICIke1BOfS1tb2R1bGUtY2FycCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1jYXJwICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctZXh0ZW5zaW9ucyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctZXh0ZW5zaW9ucyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbmZpZy1leHRlbnNpb25zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbmZpZy1leHRlbnNpb25zICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctcGVybC12ICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbmZpZy1wZXJsLXYgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctcGVybC12ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbmZpZy1wZXJsLXYgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbmZpZy1wZXJsLXYgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb3JlbGlzdCArPSAiJHtQTn0tbW9kdWxlLWxpc3QtdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb3JlbGlzdCArPSAiJHtQTn0tbW9kdWxlLWNvcmVsaXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvcmVsaXN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvcmVsaXN0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb3JlbGlzdCArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29yZWxpc3QgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jcGFuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1kaXJoYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1hbmlmZXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZmlsZS1jb3B5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1saWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLW5ldC1waW5nIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXNhZmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXN5cy1ob3N0bmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtdGVybS1yZWFkbGluZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS10ZXh0LXdyYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWN3ZCArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3dkICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3dkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWN3ZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jd2QgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWN3ZCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyICs9ICIke1BOfS1tb2R1bGUtYi1kZXBhcnNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci1jb21wcmVzcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci1jb21wcmVzcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLWNvbXByZXNzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci1pbnQzMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLWludDMyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci1udWxsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItbnVsbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItdXRmOCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci11dGY4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItdXRmOCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRiICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRlcHJlY2F0ZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGVwcmVjYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRlcHJlY2F0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRldmVsLXBlZWsgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1wZWVrICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGV2ZWwtcHBwb3J0ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRldmVsLXBwcG9ydCArPSAiJHtQTn0tbW9kdWxlLWdldG9wdC1sb25nIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRldmVsLXBwcG9ydCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1wcHBvcnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRldmVsLXNlbGZzdHViYmVyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRldmVsLXNlbGZzdHViYmVyICs9ICIke1BOfS1tb2R1bGUtc2VsZmxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWFnbm9zdGljcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlhZ25vc3RpY3MgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlhZ25vc3RpY3MgKz0gIiR7UE59LW1vZHVsZS1nZXRvcHQtc3RkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpYWdub3N0aWNzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpYWdub3N0aWNzICs9ICIke1BOfS1tb2R1bGUtdGV4dC10YWJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1iYXNlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtYmFzZSArPSAiJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1iYXNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1iYXNlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtZmlsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWZpbGUgKz0gIiR7UE59LW1vZHVsZS1kaWdlc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWZpbGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtZmlsZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LW1kNSArPSAiJHtQTn0tbW9kdWxlLWRpZ2VzdC1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1tZDUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtbWQ1ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1tZDUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1tZDUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3Qtc2hhICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3Qtc2hhICs9ICIke1BOfS1tb2R1bGUtZGlnZXN0LWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1zaGEgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3Qtc2hhICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3Qtc2hhICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1zaGEgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1zaGEgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaXJoYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpcmhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1keW5hbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1keW5hbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1hbGlhcyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1hbGlhcyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtYWxpYXMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtYWxpYXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWFsaWFzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWJ5dGUgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWJ5dGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWJ5dGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtYnl0ZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jamtjb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jamtjb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY2prY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jamtjb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24taHogKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuLWh6ICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbi1oeiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24taHogKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbi1oeiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuLWh6ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbiArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1jbi1oeiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNvbmZpZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY29uZmlnICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWViY2RpYyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZWJjZGljICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lYmNkaWMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZWJjZGljICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGVyICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kZXIgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RlciArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGVyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWdzbTAzMzggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1nc20wMzM4ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1nc20wMzM4ICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1nc20wMzM4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1nc20wMzM4ICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3NtMDMzOCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWdzbTAzMzggKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3Vlc3MgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3Vlc3MgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ndWVzcyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ndWVzcyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3Vlc3MgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtdW5pY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3Vlc3MgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ndWVzcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1oMnogKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtY2prY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1oMnogKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWgyeiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWgyeiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1qaXM3ICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWppczcgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWppczcgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtY2prY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1qaXM3ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWgyeiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtamlzNyArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtamlzNyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtamlzNyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcCArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtanAtamlzNyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyLTIwMjIta3IgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyLTIwMjIta3IgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtY2prY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1rci0yMDIyLWtyICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1rci0yMDIyLWtyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1rci0yMDIyLWtyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1rciArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1rci0yMDIyLWtyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1rciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3IgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3IgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXItaXNvLTIwMjItanAgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXItaXNvLTIwMjItanAgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtY2prY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlci1pc28tMjAyMi1qcCArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXItaXNvLTIwMjItanAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyLWlzby0yMDIyLWpwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyICs9ICIke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXIgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLW5hbWUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtbmFtZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWFsaWFzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWNvbmZpZ2xvY2FsLXBtIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGluZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXN5bWJvbCArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtc3ltYm9sICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1zeW1ib2wgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtc3ltYm9sICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXR3ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS10dyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdHcgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdHcgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdW5pY29kZSArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdW5pY29kZSArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdW5pY29kZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdW5pY29kZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUtdXRmNyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdW5pY29kZS11dGY3ICs9ICIke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUtdXRmNyArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdW5pY29kZS11dGY3ICs9ICIke1BOfS1tb2R1bGUtcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUtdXRmNyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdW5pY29kZS11dGY3ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtaTE4bi1sYW5naW5mbyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZy13YXJuaW5ncyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2Rpbmctd2FybmluZ3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5nbGlzaCArPSAiJHtQTn0tbW9kdWxlLWNhcnAgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuZ2xpc2ggKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbnYgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW52ICs9ICIke1BOfS1tb2R1bGUtdGllLWFycmF5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVycm5vICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lcnJubyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVycm5vICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cGVyaW1lbnRhbCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwZXJpbWVudGFsICs9ICIke1BOfS1tb2R1bGUtZmVhdHVyZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHBlcmltZW50YWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwZXJpbWVudGFsICs9ICIke1BOfS1tb2R1bGUtdmVyc2lvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHBlcmltZW50YWwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHBvcnRlci1oZWF2eSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwb3J0ZXItaGVhdnkgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHBvcnRlci1oZWF2eSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHBvcnRlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyLWhlYXZ5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtzeW1saXN0cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1maWxlLXRlbXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWlwYy1jbWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlciArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tYWl4ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1haXggKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tYWl4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFpeCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tYW5kcm9pZCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1hbmRyb2lkICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1hbmRyb2lkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFuZHJvaWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tYW5kcm9pZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tY3lnd2luICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tY3lnd2luICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tZGFyd2luICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1kYXJ3aW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tZGFyd2luICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1kZWMtb3NmICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1kZWMtb3NmICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWRlYy1vc2YgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tZGVjLW9zZiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tb3MyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1vczIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tb3MyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS11bml4ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS11bml4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXZtcyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS12bXMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXZtcyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdm1zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXZtcyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0td2luZG93cyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0td2luZG93cyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0td2luZG93cyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS13aW5kb3dzICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS13aW5kb3dzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXdpbmRvd3MgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXdpbmRvd3MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kLW1tICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZC1tbSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZC1tbSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZC1tbSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kLW1tICs9ICIke1BOfS1tb2R1bGUtZ2V0b3B0LWxvbmciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZC1tbSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kLW1tICs9ICIke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtY29weSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1iYXNlICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtdXRpbHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1iYXNlICs9ICIke1BOfS1tb2R1bGUtdGV4dC13cmFwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LWJhc2UgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtcHJveHlzdWJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtdXRpbHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC14cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXByb3h5c3VicyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtcHJveHlzdWJzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtdXRpbHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtcHJveHlzdWJzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQteHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtcHJveHlzdWJzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXByb3h5c3VicyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtdXRpbHMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtdXRpbHMgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC11dGlscyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC11dGlscyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQteHMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzICs9ICIke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQteHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC14cyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQteHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC11dGlscyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC14cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC14cyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtZW1iZWQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtZW1iZWQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtZW1iZWQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtZW1iZWQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtZW1iZWQgKz0gIiR7UE59LW1vZHVsZS1nZXRvcHQtc3RkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsZWQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsZWQgKz0gIiR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsZWQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFja2xpc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsZWQgKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsZWQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1hdXRvc3BsaXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFja2xpc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtY29tcGFyZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtZmlsZS1jb3B5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0LWtpZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0LWtpZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0LWtpZCArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0LWtpZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3QgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0LWtpZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1hbGlhcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtaTE4bi1sYW5naW5mbyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1teSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS12ZXJzaW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tcmVnZXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXJlZ2V4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXJlZ2V4ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXJlZ2V4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtdW5pdmVyc2FsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1hbmlmZXN0ICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1hbmlmZXN0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1hbmlmZXN0ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1jb3B5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1hbmlmZXN0ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1hbmlmZXN0ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1hbmlmZXN0ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1hbmlmZXN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1hbmlmZXN0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWluaXBlcmwgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1taW5pcGVybCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1pbmlwZXJsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1pbmlwZXJsICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1ta2Jvb3RzdHJhcCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1ta2Jvb3RzdHJhcCArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtib290c3RyYXAgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1ta2Jvb3RzdHJhcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1ta3N5bWxpc3RzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1ta3N5bWxpc3RzICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rc3ltbGlzdHMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1ta3N5bWxpc3RzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFpeCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1haXggKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFpeCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1hdXRvc3BsaXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1jcGFuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtdmVyc2lvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1iZW9zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1iZW9zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWJlb3MgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWJlb3MgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYmVvcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tY3lnd2luICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tY3lnd2luICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1kYXJ3aW4gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWRhcndpbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1kb3MgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tZG9zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1kb3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tbWFjb3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tbnc1ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW53NSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tbnc1ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tbnc1ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1udzUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tb3MyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW9zMiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1vczIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW9zMiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1vczIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1xbnggKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXFueCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1kaXJoYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS12ZXJzaW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXV3aW4gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXV3aW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdm1zICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdm1zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdm1zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdm1zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdm1zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdm1zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZvcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdm9zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjMyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjMyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjMyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjMyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjk1ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW45NSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjMyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjk1ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW15ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbXkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFja2xpc3QgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhY2tsaXN0ICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhY2tsaXN0ICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhY2tsaXN0ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhY2tsaXN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhY2tsaXN0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtY291bnRsaW5lcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWV2YWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1ldmFsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtY291bnRsaW5lcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1ldmFsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLXV0aWxpdGllcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1yZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy11dGlsaXRpZXMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLXV0aWxpdGllcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtdXRpbGl0aWVzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy11dGlsaXRpZXMgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy11dGlsaXRpZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy11dGlsaXRpZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10ZXN0bGliICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXRlc3RsaWIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdGVzdGxpYiArPSAiJHtQTn0tbW9kdWxlLWxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10ZXN0bGliICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXRlc3RsaWIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy1jbWQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy1jbWQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy1jbWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtY21kICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtaW5wdXRtYXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtaW5wdXRtYXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy1vdXRwdXRtYXAgKz0gIiR7UE59LW1vZHVsZS1yZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy1vdXRwdXRtYXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtb3V0cHV0bWFwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy1pbnB1dG1hcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLW91dHB1dG1hcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLXR5cGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy10eXBlICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtdHlwZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy10eXBlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbi1zeXN0ZW0iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1hdXRvZGllLWhpbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1mYXRhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLXRpZS1yZWZoYXNoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmNudGwgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mY250bCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mY250bCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZlYXR1cmUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpZWxkcyArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmllbGRzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWVsZHMgKz0gIiR7UE59LW1vZHVsZS1oYXNoLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmllbGRzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpZWxkcyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUgKz0gIiR7UE59LW1vZHVsZS1yZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlY2FjaGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGVjYWNoZSArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlY2FjaGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZWNhY2hlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvbXBhcmUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29tcGFyZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29tcGFyZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvbXBhcmUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvcHkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29weSArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvcHkgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvcHkgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29weSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvcHkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb3B5ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1kb3NnbG9iICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZG9zZ2xvYiArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWRvc2dsb2IgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWRvc2dsb2IgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtZmlsZS1jb3B5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1maWxlaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtaXBjLWNtZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtbG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtcGFyYW1zLWNoZWNrIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1maW5kICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmluZCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmluZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1maW5kICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1maW5kICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1nbG9ibWFwcGVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWdsb2JtYXBwZXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLWdsb2IiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1nbG9ibWFwcGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZ2xvYm1hcHBlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZ2xvYiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZ2xvYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWdsb2IgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1wYXRoICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXBhdGggKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1wYXRoICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1wYXRoICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXBhdGggKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1wYXRoICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWVwb2MgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtZXBvYyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtZXBvYyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLW1hYyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1tYWMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLW1hYyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLW9zMiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1vczIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLW9zMiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXggKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy12bXMgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy12bXMgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdm1zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy12bXMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy13aW4zMiArPSAiJHtQTn0tbW9kdWxlLWN3ZCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXdpbjMyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXdpbjMyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy13aW4zMiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1lcnJubyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLWlvLXNlZWthYmxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsdGVyLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsdGVyLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLWZpbHRlci11dGlsLWNhbGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsdGVyLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXRleHQtYmFsYW5jZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsdGVyLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsdGVyLXV0aWwtY2FsbCArPSAiJHtQTn0tbW9kdWxlLWNhcnAgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci11dGlsLWNhbGwgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci11dGlsLWNhbGwgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci11dGlsLWNhbGwgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci11dGlsLWNhbGwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maW5kYmluICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maW5kYmluICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbmRiaW4gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maW5kYmluICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maW5kYmluICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWdldG9wdC1sb25nICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZ2V0b3B0LWxvbmcgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWdldG9wdC1sb25nICs9ICIke1BOfS1tb2R1bGUtcG9kLXVzYWdlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWdldG9wdC1sb25nICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWdldG9wdC1sb25nICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWdldG9wdC1sb25nICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtc3RkICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsLWZpZWxkaGFzaCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbC1maWVsZGhhc2ggKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwtZmllbGRoYXNoICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbC1maWVsZGhhc2ggKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwtZmllbGRoYXNoICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1oYXNoLXV0aWwtZmllbGRoYXNoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbCArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5naW5mbyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5naW5mbyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ2luZm8gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5naW5mbyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ2luZm8gKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzLWRldGVjdCArPSAiJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncy1kZXRlY3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncy1kZXRlY3QgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MtbGlzdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzLWxpc3QgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzICs9ICIke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItYnppcDIgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItYnppcDIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItYnppcDIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItaWRlbnRpdHkgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItaWRlbnRpdHkgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS1maWxlLWdsb2JtYXBwZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1iemlwMiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWRlZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1leHRyYSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItaWRlbnRpdHkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWV4dHJhIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1leHRyYSArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItZXh0cmEgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWV4dHJhICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWV4dHJhICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZGlyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1kaXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1kaXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZGlyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zdGF0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWRpciArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZGlyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWRpciArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1kaXIgKz0gIiR7UE59LW1vZHVsZS10aWUtaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1maWxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1maWxlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZmlsZSArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1pby1zZWVrYWJsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1maWxlICs9ICIke1BOfS1tb2R1bGUtc2VsZWN0c2F2ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1maWxlICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8taGFuZGxlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8taGFuZGxlICs9ICIke1BOfS1tb2R1bGUtaW8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8taGFuZGxlICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1zZWxlY3RzYXZlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8taGFuZGxlICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pbyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pbyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tcGlwZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tcGlwZSArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXBpcGUgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tcGlwZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1waXBlICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXBvbGwgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1wb2xsICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXBvbGwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2Vla2FibGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlZWthYmxlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2Vla2FibGUgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zZWVrYWJsZSArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zZWVrYWJsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zZWxlY3QgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zZWxlY3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2VsZWN0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zZWxlY3QgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaW5ldCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWluZXQgKz0gIiR7UE59LW1vZHVsZS1lcnJubyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaW5ldCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pbmV0ICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pbmV0ICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pbmV0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAgKz0gIiR7UE59LW1vZHVsZS1lcnJubyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAgKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtZXJybm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWlvLXNlbGVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQtaW5ldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC11bml4ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtdW5peCArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtdW5peCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaWRlbnRpdHkgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaWRlbnRpdHkgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaWRlbnRpdHkgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaWRlbnRpdHkgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAtY29uc3RhbnRzICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaWRlbnRpdHkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pbmZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWluZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55dW5jb21wcmVzcyArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55dW5jb21wcmVzcyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueXVuY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueXVuY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnl1bmNvbXByZXNzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55dW5jb21wcmVzcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWxpc3QtdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWJ1bnppcDIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItZXh0cmEiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaW5mbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1leHRyYSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaW5mbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8temxpYiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8temxpYiArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8temxpYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby16bGliICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXpsaWIgKz0gIiR7UE59LW1vZHVsZS10aWUtaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXpsaWIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWlvLXNlbGVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtaXBjLW9wZW4zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1sb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1wYXJhbXMtY2hlY2siCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLXRpbWUtaGlyZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW1zZyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW1zZyArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtbXNnICs9ICIke1BOfS1tb2R1bGUtaXBjLXN5c3YiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW1zZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtbXNnICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjIgKz0gIiR7UE59LW1vZHVsZS1pcGMtb3BlbjMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4yICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4zICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4zICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4zICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4zICs9ICIke1BOfS1tb2R1bGUtaW8tcGlwZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjMgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4zICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zZW1hcGhvcmUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zZW1hcGhvcmUgKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLWlwYy1zeXN2IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zZW1hcGhvcmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXNoYXJlZG1lbSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXNoYXJlZG1lbSArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2hhcmVkbWVtICs9ICIke1BOfS1tb2R1bGUtaXBjLXN5c3YiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXNoYXJlZG1lbSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2hhcmVkbWVtICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc3lzdiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXN5c3YgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXN5c3YgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zeXN2ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXN5c3YgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXN5c3YgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAtYm9vbGVhbiArPSAiJHtQTn0tbW9kdWxlLWpzb24tcHAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcC1ib29sZWFuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLXN1YnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGVzcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sZXNzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGliICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1saWIgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGliICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxpc3QtdXRpbCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxpc3QtdXRpbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1saXN0LXV0aWwgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1saXN0LXV0aWwteHMgKz0gIiR7UE59LW1vZHVsZS1saXN0LXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGlzdC11dGlsLXhzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWRlZCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZGVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWRlZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1maWxlaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLWNvcmVsaXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1sb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1wYXJhbXMtY2hlY2siCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtdmVyc2lvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktY29kZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5LXJldGlyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3ktY29kZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3ktY29kZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3ktcmV0aXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQtY29kZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQtY29kZXMgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQtY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dC1yZXRpcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dC1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dC1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0tY29kZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0tY29kZXMgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0gKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0gKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0tY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0gKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbS1yZXRpcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0tcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UtY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlLXJldGlyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3ZhciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3ZhciArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXItcmV0aXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3ZhciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3ZhciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXItcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXItcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdC1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQtY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQtcmV0aXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdC1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQtZ3V0c2xvYWRlciArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQtZ3V0cyArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dCArPSAiJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0ICs9ICIke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncy1kZXRlY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0ICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0LXRyYWNlICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0LXRyYWNlICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0LXRyYWNlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjZW11ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWNhbGNlbXUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWNhbGMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWNhbGMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWZhc3RjYWxjICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1mYXN0Y2FsYyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1mYXN0Y2FsYyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtZmFzdGNhbGMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1mYXN0Y2FsYyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LXRyYWNlICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtY29tcGxleCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWNvbXBsZXggKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWNvbXBsZXggKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWNvbXBsZXggKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWNvbXBsZXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1jb21wbGV4ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC10cmlnICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC10cmlnICs9ICIke1BOfS1tb2R1bGUtbWF0aC1jb21wbGV4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtdHJpZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplLWFueWRibS1maWxlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplLWV4cGlyZWZpbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1lbW9pemUtZXhwaXJlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1lbW9pemUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1lbW9pemUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1lbW9pemUtc2RibS1maWxlICs9ICIke1BOfS1tb2R1bGUtc2RibS1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1lbW9pemUtc3RvcmFibGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1lbW9pemUtc3RvcmFibGUgKz0gIiR7UE59LW1vZHVsZS1zdG9yYWJsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZXRhLW5vdGF0aW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1ldGEtbm90YXRpb24gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1pbWUtcXVvdGVkcHJpbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1taW1lLXF1b3RlZHByaW50ICs9ICIke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1xdW90ZWRwcmludCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1taW1lLXF1b3RlZHByaW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tcm8gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbXJvICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbXJvICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWNtZCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWNtZCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jbWQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY21kICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jbWQgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWNtZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jb25maWcgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY29uZmlnICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jb25maWcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWNvbmZpZyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1kb21haW4gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1kb21haW4gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZG9tYWluICs9ICIke1BOfS1tb2R1bGUtbmV0LWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZG9tYWluICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWRvbWFpbiArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZG9tYWluICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1kb21haW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWEgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtYSArPSAiJHtQTn0tbW9kdWxlLW5ldC1mdHAtZGF0YWNvbm4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1hICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtYSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtZGF0YWNvbm4gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtZGF0YWNvbm4gKz0gIiR7UE59LW1vZHVsZS1lcnJubyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWRhdGFjb25uICs9ICIke1BOfS1tb2R1bGUtbmV0LWNtZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWRhdGFjb25uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtZGF0YWNvbm4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWUgKz0gIiR7UE59LW1vZHVsZS1uZXQtZnRwLWkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1lICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtaSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1pICs9ICIke1BOfS1tb2R1bGUtbmV0LWZ0cC1kYXRhY29ubiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1pICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1sICs9ICIke1BOfS1tb2R1bGUtbmV0LWZ0cC1pIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtbmV0LWNtZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtbmV0LWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtbmV0LWZ0cC1hIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1uZXQtbmV0cmMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS10aW1lLWxvY2FsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtaG9zdGVudCArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtaG9zdGVudCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ob3N0ZW50ICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ob3N0ZW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ob3N0ZW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbmV0ZW50ICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1uZXRlbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbmV0ZW50ICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1uZXRlbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldGVudCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldHJjICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbmV0cmMgKz0gIiR7UE59LW1vZHVsZS1maWxlaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1uZXRyYyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbmV0cmMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbm50cCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5udHAgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5udHAgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5udHAgKz0gIiR7UE59LW1vZHVsZS1uZXQtY21kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtbmV0LWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbm50cCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbm50cCArPSAiJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5udHAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBpbmcgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBpbmcgKz0gIiR7UE59LW1vZHVsZS1maWxlaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBpbmcgKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBpbmcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBpbmcgKz0gIiR7UE59LW1vZHVsZS10aW1lLWhpcmVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBvcDMgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBvcDMgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBvcDMgKz0gIiR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLW5ldC1jbWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBvcDMgKz0gIiR7UE59LW1vZHVsZS1uZXQtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtbmV0LW5ldHJjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXByb3RvZW50ICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wcm90b2VudCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wcm90b2VudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcHJvdG9lbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zZXJ2ZW50ICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zZXJ2ZW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNlcnZlbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNlcnZlbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc210cCArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc210cCArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc210cCArPSAiJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtbmV0LWNtZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc210cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtdGltZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXRpbWUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtdGltZSArPSAiJHtQTn0tbW9kdWxlLWlvLXNlbGVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtdGltZSArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtdGltZSArPSAiJHtQTn0tbW9kdWxlLW5ldC1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXRpbWUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXRpbWUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXh0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXh0ICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV4dCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb2RibS1maWxlICs9ICIke1BOfS1tb2R1bGUtdGllLWhhc2giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb2RibS1maWxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb2RibS1maWxlICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb2sgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb2sgKz0gIiR7UE59LW1vZHVsZS10ZXN0LW1vcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3Bjb2RlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vcGNvZGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vcGNvZGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3Bjb2RlICs9ICIke1BOfS1tb2R1bGUtc3VicyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vcGNvZGUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vcGVuICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vcGVuICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wZW4gKz0gIiR7UE59LW1vZHVsZS1lbmNvZGluZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vcGVuICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbyArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3BzICs9ICIke1BOfS1tb2R1bGUtb3Bjb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW92ZXJsb2FkaW5nICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQtbnVtYmVycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vdmVybG9hZGluZyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW92ZXJsb2FkICs9ICIke1BOfS1tb2R1bGUtbXJvIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW92ZXJsb2FkICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3ZlcmxvYWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wYXJhbXMtY2hlY2sgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBhcmFtcy1jaGVjayArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBhcmFtcy1jaGVjayArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGFyYW1zLWNoZWNrICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBhcmFtcy1jaGVjayArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGFyZW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBhcmVudCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGZhcSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsZmFxICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGlvLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxpby1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxpby1tbWFwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxpby1tbWFwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGlvLW1tYXAgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tc2NhbGFyICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGlvLXZpYSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxpby12aWEtcXVvdGVkcHJpbnQgKz0gIiR7UE59LW1vZHVsZS1taW1lLXF1b3RlZHByaW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxpby12aWEtcXVvdGVkcHJpbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1wb2QtcGFyc2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLXBhcnNldXRpbHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1lc2NhcGVzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWVzY2FwZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWVzY2FwZXMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1lc2NhcGVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWZpbmQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1mdW5jdGlvbnMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZnVuY3Rpb25zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1pbnB1dG9iamVjdHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWlucHV0b2JqZWN0cyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLW1hbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLW1hbiArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtbWFuICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtbWFuICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1tYW4gKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1tYW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLW1hbiArPSAiJHtQTn0tbW9kdWxlLXN1YnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLW1hbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNlbGluayArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZWxpbmsgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNlbGluayArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1wb2QtaW5wdXRvYmplY3RzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2V1dGlscyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNldXRpbHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNldXRpbHMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLWJhc2V0byArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtYmFzZXRvICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLWJhc2V0byArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtYmFzZXRvICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLWJhc2V0byArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtYmFzZXRvICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtZ2V0b3B0c29vICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLWdldG9wdHNvbyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLWdldG9wdHNvbyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2Fuc2kgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9hbnNpICs9ICIke1BOfS1tb2R1bGUtcG9kLXRleHQtY29sb3IiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9hbnNpICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvYW5zaSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9hbnNpICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLWNoZWNrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbWFuICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbWFuICs9ICIke1BOfS1tb2R1bGUtaW8tc2VsZWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbWFuICs9ICIke1BOfS1tb2R1bGUtaXBjLW9wZW4zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbWFuICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbWFuICs9ICIke1BOfS1tb2R1bGUtcG9kLW1hbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcG9kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbWFuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbWFuICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbWFuICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbnJvZmYgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9ucm9mZiArPSAiJHtQTn0tbW9kdWxlLXBvZC1tYW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9ucm9mZiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b25yb2ZmICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b25yb2ZmICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9wb2QgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9wb2QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9wb2QgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcG9kICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9ydGYgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9ydGYgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9ydGYgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcnRmICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG90ZXJtICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGVybSArPSAiJHtQTn0tbW9kdWxlLXBvZC10ZXh0LXRlcm1jYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG90ZXJtICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGVybSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG90ZXJtICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG90ZXh0ICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGV4dCArPSAiJHtQTn0tbW9kdWxlLXBvZC10ZXh0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGV4dCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3RleHQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGV4dCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRveG1sICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRveG1sICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRveG1sICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3htbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wbGFpbnRleHQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wbGFpbnRleHQgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2VsZWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wbGFpbnRleHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBsYWludGV4dCArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGxhaW50ZXh0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2VsZWN0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2VsZWN0ICs9ICIke1BOfS1tb2R1bGUtcG9kLXBhcnNlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2VsZWN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zZWxlY3QgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtYmxhY2tib3ggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtYmxhY2tib3ggKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtYmxhY2tib3ggKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtYmxhY2tib3ggKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRyYW5zY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtYmxhY2tib3ggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLW1ldGhvZHkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXRleHQtd3JhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZGVidWcgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZGVidWcgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZGVidWcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kZWJ1ZyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kdW1wYXN0ZXh0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWR1bXBhc3RleHQgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZHVtcGFzdGV4dCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWR1bXBhc3htbCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kdW1wYXN4bWwgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZHVtcGFzeG1sICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZHVtcGFzeG1sICs9ICIke1BOfS1tb2R1bGUtdGV4dC13cmFwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtbGlua3NlY3Rpb24gKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWxpbmtzZWN0aW9uICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ibGFja2JveCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWxpbmtzZWN0aW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtbGlua3NlY3Rpb24gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtbWV0aG9keSArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1tZXRob2R5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtbWV0aG9keSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLWludGVnZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXBvZC1lc2NhcGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWxpbmtzZWN0aW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRpZWRvdXRmaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wcm9ncmVzcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJlbmR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnRva2VuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcmVuZHRva2VuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcmVuZHRva2VuICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyZW5kdG9rZW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2Vyc3RhcnR0b2tlbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJ0ZXh0dG9rZW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnN0YXJ0dG9rZW4gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnN0YXJ0dG9rZW4gKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJ0b2tlbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJzdGFydHRva2VuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnN0YXJ0dG9rZW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnRleHR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnRva2VuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnRleHR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJ0ZXh0dG9rZW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnRva2VuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcnRmICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXJ0ZiArPSAiJHtQTn0tbW9kdWxlLWludGVnZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ydGYgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ydGYgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ydGYgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2VhcmNoICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNlYXJjaCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNlYXJjaCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNlYXJjaCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zZWFyY2ggKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zZWFyY2ggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zZWFyY2ggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2ltcGxldHJlZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zaW1wbGV0cmVlICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNpbXBsZXRyZWUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zaW1wbGV0cmVlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRleHRjb250ZW50ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRleHRjb250ZW50ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRleHRjb250ZW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dGNvbnRlbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRleHQgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLW1ldGhvZHkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dCArPSAiJHtQTn0tbW9kdWxlLXRleHQtd3JhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRleHQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGllZG91dGZoICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRpZWRvdXRmaCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRpZWRvdXRmaCArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRpZWRvdXRmaCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10cmFuc2NvZGVkdW1iICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdHJhbnNjb2RlZHVtYiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10cmFuc2NvZGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdHJhbnNjb2Rlc21hcnQgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10cmFuc2NvZGVzbWFydCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10cmFuc2NvZGVzbWFydCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRyYW5zY29kZXNtYXJ0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXhtbG91dHN0cmVhbSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS14bWxvdXRzdHJlYW0gKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUteG1sb3V0c3RyZWFtICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUteG1sb3V0c3RyZWFtICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC1jb2xvciArPSAiJHtQTn0tbW9kdWxlLXBvZC10ZXh0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LWNvbG9yICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LWNvbG9yICs9ICIke1BOfS1tb2R1bGUtdGVybS1hbnNpY29sb3IiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtY29sb3IgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LW92ZXJzdHJpa2UgKz0gIiR7UE59LW1vZHVsZS1wb2QtdGV4dCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC1vdmVyc3RyaWtlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LW92ZXJzdHJpa2UgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dCArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtdGVybWNhcCArPSAiJHtQTn0tbW9kdWxlLXBvZC10ZXh0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LXRlcm1jYXAgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC10ZXJtY2FwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LXRlcm1jYXAgKz0gIiR7UE59LW1vZHVsZS10ZXJtLWNhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC10ZXJtY2FwICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdXNhZ2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC11c2FnZSArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdXNhZ2UgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdXNhZ2UgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXVzYWdlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC11c2FnZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9zaXggKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb3NpeCArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvc2l4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvc2l4ICs9ICIke1BOfS1tb2R1bGUtdGllLWhhc2giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9zaXggKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb3NpeCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXJlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1yZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXJlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXJlICs9ICIke1BOfS1tb2R1bGUtdGVybS1jYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcmUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1yZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNhZmUgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNhZmUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNhZmUgKz0gIiR7UE59LW1vZHVsZS1jYXJwLWhlYXZ5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNhZmUgKz0gIiR7UE59LW1vZHVsZS1vcGNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2FmZSArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNhZmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2FmZSArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1saXN0LXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2RibS1maWxlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2RibS1maWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNkYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXRpZS1oYXNoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNkYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNkYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNlYXJjaC1kaWN0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VhcmNoLWRpY3QgKz0gIiR7UE59LW1vZHVsZS1mZWF0dXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNlYXJjaC1kaWN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNlbGVjdHNhdmVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWxlY3RzYXZlciArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWxmbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VsZmxvYWRlciArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWxmbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNlbGZsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNpZ3RyYXAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNpZ3RyYXAgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc29ja2V0ICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc29ydCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc29ydCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zdG9yYWJsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3RvcmFibGUgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3RvcmFibGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zdG9yYWJsZSArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3RvcmFibGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3ViLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zdWItdXRpbCArPSAiJHtQTn0tbW9kdWxlLWxpc3QtdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zdWItdXRpbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zdWItdXRpbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5bWJvbCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1ob3N0bmFtZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLWhvc3RuYW1lICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLWhvc3RuYW1lICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLWhvc3RuYW1lICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1ob3N0bmFtZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtc3lzLWhvc3RuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1iYXNlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1iYXNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1iYXNlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb2xvciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbG9yICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbG9yICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb2xvciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbG9yICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlLXBhcmFsbGVsc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlLXBhcmFsbGVsc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlLXBhcmFsbGVsc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1wYXJhbGxlbHNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlLXBhcmFsbGVsc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtcGFyYWxsZWxzZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1wYXJhbGxlbHNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZSArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlLXNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlLXNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWZpbGUtc2Vzc2lvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWZpbGUtc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlLXNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlLXNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLXNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLXNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtaGFybmVzcy1lbnYgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtaGFybmVzcy1lbnYgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MtZW52ICs9ICIke1BOfS1tb2R1bGUtdGFwLW9iamVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtaGFybmVzcy1lbnYgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MtZW52ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1vYmplY3QgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1vYmplY3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLW9iamVjdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItYWdncmVnYXRvciArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1hZ2dyZWdhdG9yICs9ICIke1BOfS1tb2R1bGUtYmVuY2htYXJrIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItYWdncmVnYXRvciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1hZ2dyZWdhdG9yICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItYWdncmVnYXRvciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItZ3JhbW1hciArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1ncmFtbWFyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWdyYW1tYXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1ncmFtbWFyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItZ3JhbW1hciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC1yZWFkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1ncmFtbWFyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1hcnJheSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1hcnJheSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLWFycmF5ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3IgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3IgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItcHJvY2VzcyArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1wcm9jZXNzICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItcHJvY2VzcyArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXByb2Nlc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1wcm9jZXNzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1zdHJlYW0gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3Itc3RyZWFtICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3Itc3RyZWFtICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1tdWx0aXBsZXhlciArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1tdWx0aXBsZXhlciArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItbXVsdGlwbGV4ZXIgKz0gIiR7UE59LW1vZHVsZS1pby1zZWxlY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1tdWx0aXBsZXhlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLW11bHRpcGxleGVyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1ncmFtbWFyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1leGVjdXRhYmxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1yYXd0YXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LWJhaWxvdXQgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LWJhaWxvdXQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtYmFpbG91dCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LWNvbW1lbnQgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LWNvbW1lbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtY29tbWVudCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtYmFpbG91dCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1jb21tZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXBsYW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtcHJhZ21hIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXRlc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdW5rbm93biIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC12ZXJzaW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXlhbWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtcGxhbiArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtcGxhbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1wbGFuICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtcHJhZ21hICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1wcmFnbWEgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtcHJhZ21hICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdGVzdCArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdGVzdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC10ZXN0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdW5rbm93biArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdW5rbm93biArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC11bmtub3duICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC12ZXJzaW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQteWFtbCArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQteWFtbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC15YW1sICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXItam9iICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlci1qb2IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXItam9iICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXItam9iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXItc3Bpbm5lciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLXNwaW5uZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLXNwaW5uZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXItc3Bpbm5lciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1leGVjdXRhYmxlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZXhlY3V0YWJsZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1leGVjdXRhYmxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1leGVjdXRhYmxlICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWV4ZWN1dGFibGUgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXByb2Nlc3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWV4ZWN1dGFibGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1maWxlICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1zdHJlYW0iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3Itc3RyZWFtIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXIgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXByb2Nlc3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcmF3dGFwICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcmF3dGFwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1yYXd0YXAgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLWFycmF5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1yYXd0YXAgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcmF3dGFwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2UgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2UgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci15YW1saXNoLXJlYWRlciArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci15YW1saXNoLXJlYWRlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXlhbWxpc2gtcmVhZGVyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci15YW1saXNoLXdyaXRlciArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci15YW1saXNoLXdyaXRlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXlhbWxpc2gtd3JpdGVyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVybS1hbnNpY29sb3IgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tYW5zaWNvbG9yICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVybS1hbnNpY29sb3IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVybS1hbnNpY29sb3IgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLWNhcCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVybS1jYXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVybS1jYXAgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tY29tcGxldGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLWNvbXBsZXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tcmVhZGxpbmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVybS1yZWFkbGluZSArPSAiJHtQTn0tbW9kdWxlLXRlcm0tY2FwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci1tb2R1bGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItbW9kdWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci1tb2R1bGUgKz0gIiR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciArPSAiJHtQTn0tbW9kdWxlLXBlcmxpbyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyICs9ICIke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLXRlc3Rlci1jb2xvciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItdGVzdGVyLWNvbG9yICs9ICIke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLXRlc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItdGVzdGVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItdGVzdGVyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItdGVzdGVyICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItYWdncmVnYXRvciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1tb3JlICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1tb3JlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtbW9yZSArPSAiJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci1tb2R1bGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1tb3JlICs9ICIke1BOfS1tb2R1bGUtdGVzdC1tb3JlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtbW9yZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0ICs9ICIke1BOfS1tb2R1bGUtZmlsZS10ZW1wIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItbW9kdWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmUgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1jYXB0dXJlICs9ICIke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmUgKz0gIiR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1jYXB0dXJlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1jYXB0dXJlcnVubmVyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZXJ1bm5lciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1jYXB0dXJlcnVubmVyICs9ICIke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1kZWxlZ2F0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1kZWxlZ2F0ZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItZGVsZWdhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyICs9ICIke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyICs9ICIke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZXJ1bm5lciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWRlbGVnYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LWFiYnJldiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtYmFsYW5jZWQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtYmFsYW5jZWQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LWJhbGFuY2VkICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1iYWxhbmNlZCArPSAiJHtQTn0tbW9kdWxlLXNlbGZsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1iYWxhbmNlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LWJhbGFuY2VkICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXRhYnMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXRhYnMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC10YWJzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXdyYXAgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXdyYXAgKz0gIiR7UE59LW1vZHVsZS1yZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXdyYXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC13cmFwICs9ICIke1BOfS1tb2R1bGUtdGV4dC10YWJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtd3JhcCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC13cmFwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQgKz0gIiR7UE59LW1vZHVsZS10aHJlYWRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZCArPSAiJHtQTn0tbW9kdWxlLXRocmVhZHMtc2hhcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1xdWV1ZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXF1ZXVlICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXF1ZXVlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1xdWV1ZSArPSAiJHtQTn0tbW9kdWxlLXRocmVhZHMtc2hhcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1xdWV1ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1zZW1hcGhvcmUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1zZW1hcGhvcmUgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1zZW1hcGhvcmUgKz0gIiR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMtc2hhcmVkICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMtc2hhcmVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMtc2hhcmVkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtYXJyYXkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1hcnJheSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtYXJyYXkgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1maWxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtZmlsZSArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1maWxlICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXRpZS1zdGRoYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1oYXNoLW5hbWVkY2FwdHVyZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtaGFzaC1uYW1lZGNhcHR1cmUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtaGFzaCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWhhc2ggKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtbWVtb2l6ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtbWVtb2l6ZSArPSAiJHtQTn0tbW9kdWxlLXRpZS1oYXNoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1yZWZoYXNoICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtcmVmaGFzaCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtcmVmaGFzaCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1yZWZoYXNoICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1yZWZoYXNoICs9ICIke1BOfS1tb2R1bGUtdGllLWhhc2giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXJlZmhhc2ggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1zY2FsYXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1zY2FsYXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtc3RkaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1zdGRoYW5kbGUgKz0gIiR7UE59LW1vZHVsZS10aWUtaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1zdGRoYW5kbGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1zdWJzdHJoYXNoICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtc3Vic3RyaGFzaCArPSAiJHtQTn0tbW9kdWxlLWludGVnZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1nbXRpbWUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWdtdGltZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWdtdGltZSArPSAiJHtQTn0tbW9kdWxlLXRpbWUtdG0iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1nbXRpbWUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtaGlyZXMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtaGlyZXMgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtaGlyZXMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWhpcmVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWwgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWwgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1sb2NhbCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWwgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWwgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWx0aW1lICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1sb2NhbHRpbWUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1sb2NhbHRpbWUgKz0gIiR7UE59LW1vZHVsZS10aW1lLXRtIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWx0aW1lICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtcGllY2UgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtcGllY2UgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtcGllY2UgKz0gIiR7UE59LW1vZHVsZS10aW1lLWxvY2FsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtcGllY2UgKz0gIiR7UE59LW1vZHVsZS10aW1lLXNlY29uZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1zZWNvbmRzICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1zZWNvbmRzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1zZWNvbmRzICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtc2Vjb25kcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXNlY29uZHMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtdG0gKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS10bSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLWJpZzUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1iaWc1ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1nYjIzMTIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1nYjIzMTIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLWppc3gwMjA4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstamlzeDAyMDggKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLWtvcmVhbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLWtvcmVhbiArPSAiJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLWtvcmVhbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstcGlueWluICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstcGlueWluICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1zdHJva2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1zdHJva2UgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLXpodXlpbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLXpodXlpbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtbm9ybWFsaXplICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLW5vcm1hbGl6ZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtbm9ybWFsaXplICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1ub3JtYWxpemUgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1ub3JtYWxpemUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1ub3JtYWxpemUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS1jaGFybmFtZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLWZlYXR1cmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS1pZiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLWludGVnZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS11bmljb2RlLW5vcm1hbGl6ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLXVuaWNvcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS11dGY4LWhlYXZ5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29yZSArPSAiJHtQTn0tbW9kdWxlLWludGVnZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pdmVyc2FsICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLWdyZW50ICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItZ3JlbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLWdyZW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItZ3JlbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItcHdlbnQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItcHdlbnQgKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1wd2VudCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLXB3ZW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1wd2VudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLXB3ZW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLXB3ZW50ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXRmOCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXRmOCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgtaGVhdnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uICs9ICIke1BOfS1tb2R1bGUtdmVyc2lvbi1yZWdleCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXJlZ2V4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tcmVnZXggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLWlmIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLXVuaXZlcnNhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS12ZXJzaW9uLXJlZ2V4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXhzbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS14c2xvYWRlciArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDk3MTZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLmluYwpAQCAtMCwwICsxLDggQEAKK1NVTU1BUlkgPSAiUGVybCBzY3JpcHRpbmcgbGFuZ3VhZ2UiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnBlcmwub3JnLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ29weWluZzttZDU9NWIxMjJhMzZkMGY2ZGM1NTI3OWEwZWJjNjlmM2M2MGIgXAorCQkgICAgZmlsZTovL0FydGlzdGljO21kNT0yZTZmZDI0NzUzMzVhZjg5MjQ5NGZlMWY3MzI3YmFmMyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmNwYW4ub3JnL3NyYy81LjAvJHtCUH0udGFyLnh6IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL0NvbmZpZ3VyZS1tdWx0aWxpYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9Db25maWd1cmUtbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYyNWIwYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9Db25maWd1cmUtbXVsdGlsaWIucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOlBlbmRpbmcKKworSW5kZXg6IHBlcmwtNS4xMi4zL0NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xMi4zLm9yaWcvQ29uZmlndXJlCisrKysgcGVybC01LjEyLjMvQ29uZmlndXJlCitAQCAtMTMxNiw4ICsxMzE2LDkgQEAgbG9jbGlicHRoPSIvdXNyL2xvY2FsL2xpYiAvb3B0L2xvY2FsL2xpYgorIGxvY2xpYnB0aD0iJGxvY2xpYnB0aCAvb3B0L2dudS9saWIgL3Vzci9HTlUvbGliIC9vcHQvR05VL2xpYiIKKyAKKyA6IGdlbmVyYWwgbG9va2luZyBwYXRoIGZvciBsb2NhdGluZyBsaWJyYXJpZXMKKy1nbGlicHRoPSIvbGliIC91c3IvbGliICR4bGlicHRoIgorK2dsaWJwdGg9Ii9saWIgL3Vzci9saWIgL2xpYjY0IC91c3IvbGliNjQgJHhsaWJwdGgiCisgZ2xpYnB0aD0iJGdsaWJwdGggL3Vzci9jY3MvbGliIC91c3IvdWNibGliIC91c3IvbG9jYWwvbGliIgorK3Rlc3QgLWYgL3Vzci9saWIvKi1saW51eC1nbnUvbGliYy5zbyAmJiBnbGlicHRoPSIvdXNyL2xpYi8qLWxpbnV4LWdudSAkZ2xpYnB0aCIKKyB0ZXN0IC1mIC91c3Ivc2hsaWIvbGliYy5zbyAmJiBnbGlicHRoPSIvdXNyL3NobGliICRnbGlicHRoIgorIHRlc3QgLWYgL3NobGliL2xpYmMuc28gICAgICYmIGdsaWJwdGg9Ii9zaGxpYiAkZ2xpYnB0aCIKKyB0ZXN0IC1kIC91c3IvbGliNjQgICAgICAgICAmJiBnbGlicHRoPSIkZ2xpYnB0aCAvbGliNjQgL3Vzci9saWI2NCAvdXNyL2xvY2FsL2xpYjY0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL01NX1VuaXgucG0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvTU1fVW5peC5wbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjkyY2NiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL01NX1VuaXgucG0ucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOlBlbmRpbmcKKworVGhlIHBlcmwtbmF0aXZlIHNob3VsZCBiZSByZWxvY2F0YWJsZSB3aGlsZSByZS11c2Ugc3N0YXRlLWNhY2hlIGZyb20KK2Fub3RoZXIgYnVpbGQsIGVzcGVjaWFsbHkgdGhlIG9yaWdpbmFsIGJ1aWxkIHdhcyByZW5hbWVkL3JlbW92ZWQuCisKK1RvIGdldCB0aGUgTWFrZU1ha2VyLnBtIHdvcmtzIGluIHRoaXMgY2FzZSwgd2UgbmVlZCBwZXJsIHdyYXBwZXIgaGVyZQoraW5zdGVhZCBvZiByZWFsIHBlcmwgYmluYXJ5LgorCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTIuMy9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbS5vcmlnCTIwMTEtMDgtMTIgMTY6MDc6MzAuMDAwMDAwMDAwICswODAwCisrKysgcGVybC01LjEyLjMvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0JMjAxMS0wOC0xMiAxNjowODo1Ni4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xMDE5LDYgKzEwMTksOSBAQAorICAgICB9CisgCisgICAgIGZvcmVhY2ggbXkgJG5hbWUgKEAkbmFtZXMpeworKyAgICAgICAgIyBHZXR0aW5nIE1ha2VNYWtlci5wbSB1c2UgcGVybCB3cmFwcGVyIGluc3RlYWQgb2YgJ3BlcmwucmVhbCcgZGlyZWN0bHkKKysgICAgICAgICRuYW1lID1+IHMvcGVybFwucmVhbC9wZXJsLyBpZiAoJG5hbWUgPX4gL3BlcmxcLnJlYWwvKTsKKysKKyAgICAgICAgIGZvcmVhY2ggbXkgJGRpciAoQCRkaXJzKXsKKyAgICAgICAgICAgICBuZXh0IHVubGVzcyBkZWZpbmVkICRkaXI7ICMgJHNlbGYtPntQRVJMX1NSQ30gbWF5IGJlIHVuZGVmaW5lZAorICAgICAgICAgICAgIG15ICgkYWJzLCAkdmFsKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9NYWtlZmlsZS5TSC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9NYWtlZmlsZS5TSC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGUyMzMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL01ha2VmaWxlLlNILnBhdGNoCkBAIC0wLDAgKzEsMzc0IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLlNIIHwgIDE0NSArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2NyBpbnNlcnRpb25zKCspLCA3OCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLlNIIGIvTWFrZWZpbGUuU0gKK2luZGV4IDAzNGQ4MTIuLjY3ZTA4ZmQgMTAwNzU1CistLS0gYS9NYWtlZmlsZS5TSAorKysrIGIvTWFrZWZpbGUuU0gKK0BAIC0zOSwxMCArMzksMTAgQEAgY2FzZSAiJHVzZXNocnBsaWIiIGluCisgdHJ1ZSkKKyAJIyBQcmVmaXggYWxsIHJ1bnMgb2YgJ21pbmlwZXJsJyBhbmQgJ3BlcmwnIHdpdGgKKyAJIyAkbGRsaWJwdGggc28gdGhhdCAuL3BlcmwgZmluZHMgKnRoaXMqIHNoYXJlZCBsaWJwZXJsLgorLQljYXNlICIkTERfTElCUkFSWV9QQVRIIiBpbgorLQknJykgIGxkbGlicHRoPSJMRF9MSUJSQVJZX1BBVEg9YCBxdW90ZSAiJHB3ZCIgYCIgOzsKKy0JKikgICBsZGxpYnB0aD0iTERfTElCUkFSWV9QQVRIPWAgcXVvdGUgIiRwd2QiIGA6YCBxdW90ZSAiJExEX0xJQlJBUllfUEFUSCIgYCIgOzsKKy0JZXNhYworKwkjY2FzZSAiJExEX0xJQlJBUllfUEFUSCIgaW4KKysJIycnKSAgbGRsaWJwdGg9IkxEX0xJQlJBUllfUEFUSD1gIHF1b3RlICIkcHdkIiBgIiA7OworKwkjKikgICBsZGxpYnB0aD0iTERfTElCUkFSWV9QQVRIPWAgcXVvdGUgIiRwd2QiIGA6YCBxdW90ZSAiJExEX0xJQlJBUllfUEFUSCIgYCIgOzsKKysJI2VzYWMKKyAKKyAJcGxkbGZsYWdzPSIkY2NjZGxmbGFncyIKKyAJc3RhdGljX2xkZmxhZ3M9JycKK0BAIC0xMjIsMTAgKzEyMiwxMSBAQCB0cnVlKQorIAkgICAgKikKKyAJCWV2YWwgImxkbGlicHRodmFsPVwiXCQkbGRsaWJwdGhuYW1lXCIiCisgCistCQljYXNlICIkbGRsaWJwdGh2YWwiIGluCistCQknJykgIGxkbGlicHRoPSIkbGRsaWJwdGhuYW1lPWAgcXVvdGUgIiRwd2QiIGAiIDs7CistCQkqKSAgIGxkbGlicHRoPSIkbGRsaWJwdGhuYW1lPWAgcXVvdGUgIiRwd2QiIGA6YCBxdW90ZSAiJGxkbGlicHRodmFsIiBgIiA7OworLQkJZXNhYworKyMgV2UgY29tcGlsZSBpbiB0aGUgbGlicmFyeSBwYXRoIGluIE9FIGZyb20gY3Jvc3MtY29tcGlsZSwgc28gbGV0cyBub3QgZG8gdGhpcworKyMJCWNhc2UgIiRsZGxpYnB0aHZhbCIgaW4KKysjCQknJykgIGxkbGlicHRoPSIkbGRsaWJwdGhuYW1lPWAgcXVvdGUgIiRwd2QiIGAiIDs7CisrIwkJKikgICBsZGxpYnB0aD0iJGxkbGlicHRobmFtZT1gIHF1b3RlICIkcHdkIiBgOmAgcXVvdGUgIiRsZGxpYnB0aHZhbCIgYCIgOzsKKysjCQllc2FjCisgCisgCQk7OworIAkgICAgZXNhYworQEAgLTE0MSwxOCArMTQyLDcgQEAgdHJ1ZSkKKyAJICAgICMgSU5TVEFMTCBmaWxlLCB1bmRlciAiQnVpbGRpbmcgYSBzaGFyZWQgcGVybCBsaWJyYXJ5Ii4KKyAJICAgICMgSWYgdGhlcmUgaXMgbm8gcHJlLWV4aXN0aW5nICRsaWJwZXJsLCB3ZSBkb24ndCBuZWVkCisgCSAgICAjIHRvIGRvIGFueXRoaW5nIGZ1cnRoZXIuCistCSAgICBpZiB0ZXN0IC1mICRhcmNobGliL0NPUkUvJGxpYnBlcmw7IHRoZW4KKy0JCXJtIC1mIHByZWxvYWQKKy0JCWNhdCA8PCdFT1QnID4gcHJlbG9hZAorLSMhIC9iaW4vc2gKKy1saWI9JDEKKy1zaGlmdAorLXRlc3QgLXIgJGxpYiAmJiBleHBvcnQgTERfUFJFTE9BRD0iJGxpYiAkTERfUFJFTE9BRCIKKy1leGVjICIkQCIKKy1FT1QKKy0JCWNobW9kIDc1NSBwcmVsb2FkCistCQlsZGxpYnB0aD0iJGxkbGlicHRoIGBwd2RgL3ByZWxvYWQgYHB3ZGAvJGxpYnBlcmwiCistCSAgICBmaQorKwkgICAgZWNobyBsaW51eCBsaWJyYXJpZXMgb3ZlcndyaXR0ZW4gYnkgY3Jvc3MtY29tcGlsZSBwYXRjaGVzCisgCSAgICA7OworIAlvczM5MCkJdGVzdCAtZiAvYmluL2VudiAmJiBsZGxpYnB0aD0iL2Jpbi9lbnYgJGxkbGlicHRoIgorIAkJOzsKK0BAIC01NjYsMTMgKzU1NiwyMyBAQCBzcGxpbnRmaWxlcyA9ICQoYzEpCisgCUBlY2hvIGAkKENDQ01EU1JDKWAgLVMgJCouYworIAlAYCQoQ0NDTURTUkMpYCAtUyAkKi5jCisgCistYWxsOiAkKEZJUlNUTUFLRUZJTEUpICQoTUlOSVBFUkxfRVhFKSAkKGdlbmVyYXRlZF9wb2RzKSAkKHByaXZhdGUpICQodW5pZGF0YWZpbGVzKSAkKHB1YmxpYykgJChkeW5hbWljX2V4dCkgJChub254c19leHQpIGV4dHJhcy5tYWtlICQoTUFOSUZFU1RfU1JUKQorLQlAZWNobyAiICI7CistCUBlY2hvICIJRXZlcnl0aGluZyBpcyB1cCB0byBkYXRlLiBUeXBlICckKE1BS0UpIHRlc3QnIHRvIHJ1biB0ZXN0IHN1aXRlLiIKKysjYWxsOiAkKEZJUlNUTUFLRUZJTEUpICQoTUlOSVBFUkxfRVhFKSAkKGdlbmVyYXRlZF9wb2RzKSAkKHByaXZhdGUpICQodW5pZGF0YWZpbGVzKSAkKHB1YmxpYykgJChkeW5hbWljX2V4dCkgJChub254c19leHQpIGV4dHJhcy5tYWtlICQoTUFOSUZFU1RfU1JUKQorKyMJQGVjaG8gIiAiOworKyMJQGVjaG8gIglFdmVyeXRoaW5nIGlzIHVwIHRvIGRhdGUuIFR5cGUgJyQoTUFLRSkgdGVzdCcgdG8gcnVuIHRlc3Qgc3VpdGUuIgorKworK2FsbDogJChGSVJTVE1BS0VGSUxFKSAkKE1JTklQRVJMX0VYRSkgbWluaXBlcmwgJCh1bmlkYXRhZmlsZXMpCisrCisrbW9yZTogJChnZW5lcmF0ZWRfcG9kcykgJChwcml2YXRlKSAkKHB1YmxpYykKKysKKyttb3JlMjogJChkeW5hbWljX2V4dCkKKyAKKy0kKE1BTklGRVNUX1NSVCk6CU1BTklGRVNUICQoUEVSTF9FWEUpCistCUAkKFJVTl9QRVJMKSBQb3J0aW5nL21hbmlzb3J0IC1xIHx8IChlY2hvICJXQVJOSU5HOiByZS1zb3J0aW5nIE1BTklGRVNUIjsgXAorLQkgICAgJChSVU5fUEVSTCkgUG9ydGluZy9tYW5pc29ydCAtcSAtbyBNQU5JRkVTVDsgc2ggLWMgdHJ1ZSkKKyttb3JlMzogJChub254c19leHQpCisrCisrbW9yZTQ6IGV4dHJhcy5tYWtlICQoTUFOSUZFU1RfU1JUKQorKworKyQoTUFOSUZFU1RfU1JUKToJTUFOSUZFU1QKKysJQCQoTUlOSVBFUkwpIFBvcnRpbmcvbWFuaXNvcnQgLXEgfHwgKGVjaG8gIldBUk5JTkc6IHJlLXNvcnRpbmcgTUFOSUZFU1QiOyBcCisrCSAgICAkKE1JTklQRVJMKSBQb3J0aW5nL21hbmlzb3J0IC1xIC1vIE1BTklGRVNUOyBzaCAtYyB0cnVlKQorIAlAdG91Y2ggJChNQU5JRkVTVF9TUlQpCisgCisgLlBIT05ZOiBhbGwgdXRpbGl0aWVzCitAQCAtNTgxLDcgKzU4MSw3IEBAICQoTUFOSUZFU1RfU1JUKToJTUFOSUZFU1QgJChQRVJMX0VYRSkKKyAjIGJ5IG1ha2VfcGF0Y2hudW0ucGwuCisgZ2l0X3ZlcnNpb24uaDogbGliL0NvbmZpZ19naXQucGwKKyAKKy1saWIvQ29uZmlnX2dpdC5wbDogJChNSU5JUEVSTF9FWEUpIG1ha2VfcGF0Y2hudW0ucGwKKytsaWIvQ29uZmlnX2dpdC5wbDogbWFrZV9wYXRjaG51bS5wbAorIAkkKE1JTklQRVJMKSBtYWtlX3BhdGNobnVtLnBsCisgCisgIyBtYWtlIHN1cmUgdGhhdCB3ZSByZWNvbXBpbGUgcGVybC5jIGlmIHRoZSBnaXQgdmVyc2lvbiBjaGFuZ2VzCitAQCAtNTk0LDcgKzU5NCw3IEBAIHBlcmwkKE9CSl9FWFQpOiBnaXRfdmVyc2lvbi5oCisgIyBsb2FkaW5nLCB3ZSBuZWVkIHRvIGJ1aWxkIHBlcmwgZmlyc3QuCisgY2FzZSAiJHVzZWRsJHN0YXRpY19jd2QiIGluCisgZGVmaW5ldW5kZWYpCistICAgIHV0aWxfZGVwcz0nJChNSU5JUEVSTF9FWEUpICQoQ09ORklHUE0pIGxpYi9hdXRvL0N3ZC9Dd2QkKERMU1VGRklYKSBGT1JDRScKKysgICAgdXRpbF9kZXBzPSckKENPTkZJR1BNKSBsaWIvYXV0by9Dd2QvQ3dkJChETFNVRkZJWCkgRk9SQ0UnCisgICAgIDs7CisgZGVmaW5lZGVmaW5lKQorICAgICB1dGlsX2RlcHM9JyQoUEVSTF9FWEUpICQoQ09ORklHUE0pIEZPUkNFJworQEAgLTYwNCw3ICs2MDQsNyBAQCBkZWZpbmVkZWZpbmUpCisgZXNhYworIAorICRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwhR1JPSyFUSElTIQorLXV0aWxzL01ha2VmaWxlOiBcJChNSU5JUEVSTF9FWEUpIFwkKENPTkZJR1BNKSB1dGlscy9NYWtlZmlsZS5QTAorK3V0aWxzL01ha2VmaWxlOiBcJChDT05GSUdQTSkgdXRpbHMvTWFrZWZpbGUuUEwKKyAJXCQoTUlOSVBFUkwpIC1JbGliIHV0aWxzL01ha2VmaWxlLlBMCisgCisgdXRpbGl0aWVzOgl1dGlscy9NYWtlZmlsZSAkdXRpbF9kZXBzCitAQCAtNjk5LDcgKzY5OSw3IEBAIGVzYWMKKyAKKyAKKyAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKy1wZXJsbWFpbi5jOiAkKE1JTklQRVJMX0VYRSkgZXh0L0V4dFV0aWxzLU1pbmlwZXJsL3BtX3RvX2JsaWIKKytwZXJsbWFpbi5jOiBleHQvRXh0VXRpbHMtTWluaXBlcmwvbGliL0V4dFV0aWxzL01pbmlwZXJsLnBtCisgCSQoTUlOSVBFUkwpIC1JbGliIC1NRXh0VXRpbHM6Ok1pbmlwZXJsIC1lICd3cml0ZW1haW4oXCJwZXJsbWFpbi5jIiwgQEFSR1YpJyBEeW5hTG9hZGVyICQoc3RhdGljX2V4dCkKKyAKKyAjIFRoZSBmaWxlIGV4dC5saWJzIGlzIGEgbGlzdCBvZiBsaWJyYXJpZXMgdGhhdCBtdXN0IGJlIGxpbmtlZCBpbgorQEAgLTc2MCw3ICs3NjAsNyBAQCBQRVJMRVhQT1JUCQk9IHBlcmwuZXhwCisgCTs7CisgCWVzYWMKKyAJJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCistcGVybC5leHA6ICQoTUlOSVBFUkxFWFApIG1ha2VkZWYucGwgJChDT05GSUdQTSkgJChTWU0pICQoU1lNSCkKKytwZXJsLmV4cDogbWFrZWRlZi5wbCAkKENPTkZJR1BNKSAkKFNZTSkgJChTWU1IKQorIAkuLyQoTUlOSVBFUkxFWFApIG1ha2VkZWYucGwgLS1zb3J0LWZvbGQgUExBVEZPUk09YWl4IENDX0ZMQUdTPSIkKE9QVElNSVpFKSIgPiBwZXJsLmV4cAorIAorICFOTyFTVUJTIQorQEAgLTc2OSw3ICs3NjksNyBAQCBvczIpCisgCSRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIE1JTklQRVJMRVhQCQk9IG1pbmlwZXJsCisgCistcGVybDUuZGVmOiAkKE1JTklQRVJMRVhQKSBtYWtlZGVmLnBsICQoQ09ORklHUE0pICQoU1lNKSAkKFNZTUgpIG1pbmlwZXJsLm1hcAorK3Blcmw1LmRlZjogbWFrZWRlZi5wbCAkKENPTkZJR1BNKSAkKFNZTSkgJChTWU1IKSBtaW5pcGVybC5tYXAKKyAJLi8kKE1JTklQRVJMRVhQKSBtYWtlZGVmLnBsIFBMQVRGT1JNPW9zMiAtRFBFUkxfRExMPSQoUEVSTF9ETEwpIENDX0ZMQUdTPSIkKE9QVElNSVpFKSIgPiBwZXJsNS5kZWYKKyAKKyAhTk8hU1VCUyEKK0BAIC04MjksNyArODI5LDcgQEAgJChMSUJQRVJMKTogJCYgJChvYmopICQoRFlOQUxPQURFUikgJChMSUJQRVJMRVhQT1JUKQorIAl0cnVlKQorIAkJJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCisgCXJtIC1mICRACistCSQoTEQpIC1vICRAICQoU0hSUExERkxBR1MpICQob2JqKSAkKERZTkFMT0FERVIpICQobGlicykKKysJJChMRCkgLW8gJEAgJChTSFJQTERGTEFHUykgJChvYmopICQoRFlOQUxPQURFUikgJChsaWJzKSAtV2wsLXNvbmFtZSxsaWJwZXJsLnNvLjUKKyAhTk8hU1VCUyEKKyAJCWNhc2UgIiRvc25hbWUiIGluCisgCQlhaXgpCitAQCAtODc3LDcgKzg3Nyw5IEBAICQoTUlOSVBFUkxfRVhFKTogbGliL2J1aWxkY3VzdG9taXplLnBsCisgCQkkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyBsaWIvYnVpbGRjdXN0b21pemUucGw6ICQmICQobWluaV9vYmopCisgCSQoQ0MpIC1vICQoTUlOSVBFUkxfRVhFKSAkKENMREZMQUdTKSAkKG1pbmlfb2JqKSAkKGxpYnMpCistCSQoTERMSUJQVEgpIC4vbWluaXBlcmwkKEhPU1RfRVhFX0VYVCkgLXcgLUlsaWIgLUlkaXN0L0V4cG9ydGVyL2xpYiAtTUV4cG9ydGVyIC1lICc8Pz4nIHx8IHNoIC1jICdlY2hvID4mMiBGYWlsZWQgdG8gYnVpbGQgbWluaXBlcmwuICBQbGVhc2UgcnVuIG1ha2UgbWluaXRlc3Q7IGV4aXQgMScKKysJbXYgLWYgbWluaXBlcmwgbWluaXBlcmwtdGFyZ2V0CisrCWxuIC1zIGhvc3RwZXJsIG1pbmlwZXJsCisrCSMkKExETElCUFRIKSAuL21pbmlwZXJsJChIT1NUX0VYRV9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisgCSQoTUlOSVBFUkwpIC1mIHdyaXRlX2J1aWxkY3VzdG9taXplLnBsCisgIU5PIVNVQlMhCisgCQk7OworQEAgLTg4NSw3ICs4ODcsOSBAQCBsaWIvYnVpbGRjdXN0b21pemUucGw6ICQmICQobWluaV9vYmopCisgCQkkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyBsaWIvYnVpbGRjdXN0b21pemUucGw6ICQmICQobWluaV9vYmopIHdyaXRlICAgIGxkY3VzdG9taXplLnBsCisgCSQoQ0MpIC1vICQoTUlOSVBFUkxfRVhFKSAkKG1pbmlfb2JqICAgIGxpYnMpCistCSQoTERMSUJQVEgpIC4vbWluaXBlcmwkKEhPU1QgICAgX0VYVCkgLXcgLUlsaWIgLUlkaXN0L0V4cG9ydGVyL2xpYiAtTUV4cG9ydGVyIC1lICc8Pz4nIHx8IHNoIC1jICdlY2hvID4mMiBGYWlsZWQgdG8gYnVpbGQgbWluaXBlcmwuICBQbGVhc2UgcnVuIG1ha2UgbWluaXRlc3Q7IGV4aXQgMScKKysJbXYgLWYgbWluaXBlcmwgbWluaXBlcmwtdGFyZ2V0CisrCWxuIC1zIGhvc3RwZXJsIG1pbmlwZXJsCisrCSMkKExETElCUFRIKSAuL21pbmlwZXJsJChIT1NUICAgIF9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisgCSQoTUlOSVBFUkwpIC1mIHdyaXRlX2J1aWxkY3VzdG9taXplLnBsICAgIAorICFOTyFTVUJTIQorIAkJOzsKK0BAIC05MDcsNyArOTExLDkgQEAgbGliL2J1aWxkY3VzdG9taXplLnBsOiAkJiAkKG1pbmlfb2JqKSB3cml0ZV9idWlsZGN1c3RvbWl6ZS5wbAorIAktQHJtIC1mIG1pbmlwZXJsLnhvaworIAkkKENDKSAkKENMREZMQUdTKSAkKE5BTUVTUEFDRUZMQUdTKSAtbyAkKE1JTklQRVJMX0VYRSkgXAorIAkgICAgJChtaW5pX29iaikgJChsaWJzKQorLQkkKExETElCUFRIKSAuL21pbmlwZXJsJChIT1NUX0VYRV9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisrCW12IC1mIG1pbmlwZXJsIG1pbmlwZXJsLXRhcmdldAorKwlsbiAtcyBob3N0cGVybCBtaW5pcGVybAorKwkjJChMRExJQlBUSCkgLi9taW5pcGVybCQoSE9TVF9FWEVfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworIAkkKE1JTklQRVJMKSAtZiB3cml0ZV9idWlsZGN1c3RvbWl6ZS5wbAorICFOTyFTVUJTIQorIAkJOzsKK0BAIC05MTgsNyArOTI0LDkgQEAgbGliL2J1aWxkY3VzdG9taXplLnBsOiBcJCYgXCQobWluaV9vYmopIHdyaXRlX2J1aWxkY3VzdG9taXplLnBsCisgCS1Acm0gLWYgbWluaXBlcmwueG9rCisgCS1Acm0gXCQoTUlOSVBFUkxfRVhFKQorIAlcJChMTlMpIFwkKEhPU1RfUEVSTCkgXCQoTUlOSVBFUkxfRVhFKQorLQlcJChMRExJQlBUSCkgLi9taW5pcGVybFwkKEhPU1RfRVhFX0VYVCkgLXcgLUlsaWIgLUlkaXN0L0V4cG9ydGVyL2xpYiAtTUV4cG9ydGVyIC1lICc8Pz4nIHx8IHNoIC1jICdlY2hvID4mMiBGYWlsZWQgdG8gYnVpbGQgbWluaXBlcmwuICBQbGVhc2UgcnVuIG1ha2UgbWluaXRlc3Q7IGV4aXQgMScKKysJbXYgLWYgbWluaXBlcmwgbWluaXBlcmwtdGFyZ2V0CisrCWxuIC1zIGhvc3RwZXJsIG1pbmlwZXJsCisrCSNcJChMRExJQlBUSCkgLi9taW5pcGVybFwkKEhPU1RfRVhFX0VYVCkgLXcgLUlsaWIgLUlkaXN0L0V4cG9ydGVyL2xpYiAtTUV4cG9ydGVyIC1lICc8Pz4nIHx8IHNoIC1jICdlY2hvID4mMiBGYWlsZWQgdG8gYnVpbGQgbWluaXBlcmwuICBQbGVhc2UgcnVuIG1ha2UgbWluaXRlc3Q7IGV4aXQgMScKKyAJXCQoTUlOSVBFUkwpIC1mIHdyaXRlX2J1aWxkY3VzdG9taXplLnBsICdvc25hbWUnICIkb3NuYW1lIgorICFHUk9LIVRISVMhCisgCQllbHNlCitAQCAtOTI3LDcgKzkzNSw5IEBAIGxpYi9idWlsZGN1c3RvbWl6ZS5wbDogJCYgJChtaW5pX29iaikgd3JpdGVfYnVpbGRjdXN0b21pemUucGwKKyAJLUBybSAtZiBtaW5pcGVybC54b2sKKyAJJChDQykgJChDTERGTEFHUykgLW8gJChNSU5JUEVSTF9FWEUpIFwKKyAJICAgICQobWluaV9vYmopICQobGlicykKKy0JJChMRExJQlBUSCkgLi9taW5pcGVybCQoSE9TVF9FWEVfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworKwltdiAtZiBtaW5pcGVybCBtaW5pcGVybC10YXJnZXQKKysJbG4gLXMgaG9zdHBlcmwgbWluaXBlcmwKKysJIyQoTERMSUJQVEgpIC4vbWluaXBlcmwkKEhPU1RfRVhFX0VYVCkgLXcgLUlsaWIgLUlkaXN0L0V4cG9ydGVyL2xpYiAtTUV4cG9ydGVyIC1lICc8Pz4nIHx8IHNoIC1jICdlY2hvID4mMiBGYWlsZWQgdG8gYnVpbGQgbWluaXBlcmwuICBQbGVhc2UgcnVuIG1ha2UgbWluaXRlc3Q7IGV4aXQgMScKKyAJJChNSU5JUEVSTCkgLWYgd3JpdGVfYnVpbGRjdXN0b21pemUucGwKKyAhTk8hU1VCUyEKKyAJCWZpCitAQCAtOTcxLDcgKzk4MSw3IEBAIGNhc2UgIiR7b3NuYW1lfSIgaW4KKyBjYXRhbW91bnQpCisgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCFHUk9LIVRISVMhCisgLlBIT05ZOiBtYWtlcHBwb3J0CistbWFrZXBwcG9ydDogXCQoTUlOSVBFUkxfRVhFKSBcJChDT05GSUdQTSkKKyttYWtlcHBwb3J0OiBcJChDT05GSUdQTSkKKyAJLUBmb3IgZiBpbiBNYWtlZmlsZS5QTCBQUFBvcnRfcG0uUEwgUFBQb3J0X3hzLlBMIHBwcG9ydF9oLlBMOyBkbyBcCisgCShjZCBleHQvRGV2ZWwtUFBQb3J0ICYmIGBwd2RgL3J1bi5zaCAuLi8uLi8kKE1JTklQRVJMX0VYRSkgLUkuLi8uLi9saWIgXCRcJGYpOyBcCisgCWRvbmUKK0BAIC05ODEsNyArOTkxLDcgQEAgbWFrZXBwcG9ydDogXCQoTUlOSVBFUkxfRVhFKSBcJChDT05GSUdQTSkKKyAqKQorICRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIC5QSE9OWTogbWFrZXBwcG9ydAorLW1ha2VwcHBvcnQ6ICQoTUlOSVBFUkxfRVhFKSAkKENPTkZJR1BNKSAkKG5vbnhzX2V4dCkKKyttYWtlcHBwb3J0OiAkKENPTkZJR1BNKSAkKG5vbnhzX2V4dCkKKyAJJChNSU5JUEVSTCkgbWtwcHBvcnQKKyAKKyAhTk8hU1VCUyEKK0BAIC05OTEsMTYgKzEwMDEsMTYgQEAgZXNhYworICRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIAorIC5QSE9OWTogcHJlcGxpYnJhcnkKKy1wcmVwbGlicmFyeTogJChNSU5JUEVSTF9FWEUpICQoQ09ORklHUE0pICQoUFJFUExJQlJBUllfTElCUEVSTCkKKytwcmVwbGlicmFyeTogJChDT05GSUdQTSkgJChQUkVQTElCUkFSWV9MSUJQRVJMKQorIAorICQoQ09ORklHUE1fRlJPTV9DT05GSUdfU0gpOiAkKENPTkZJR1BPRCkKKyAKKy0kKENPTkZJR1BPRCk6IGNvbmZpZy5zaCAkKE1JTklQRVJMX0VYRSkgY29uZmlncG0gUG9ydGluZy9HbG9zc2FyeSBsaWIvQ29uZmlnX2dpdC5wbAorKyQoQ09ORklHUE9EKTogY29uZmlnLnNoIGNvbmZpZ3BtIFBvcnRpbmcvR2xvc3NhcnkgbGliL0NvbmZpZ19naXQucGwKKyAJJChNSU5JUEVSTCkgY29uZmlncG0KKyAKKyB1bmlkYXRhZmlsZXMgJCh1bmlkYXRhZmlsZXMpIHBvZC9wZXJsdW5pcHJvcHMucG9kOiB1bmkuZGF0YQorIAorLXVuaS5kYXRhOiAkKE1JTklQRVJMX0VYRSkgJChDT05GSUdQTSkgbGliL3VuaWNvcmUvbWt0YWJsZXMgJChub254c19leHQpCisrdW5pLmRhdGE6ICQoQ09ORklHUE0pIGxpYi91bmljb3JlL21rdGFibGVzICQobm9ueHNfZXh0KQorIAkkKE1JTklQRVJMKSBsaWIvdW5pY29yZS9ta3RhYmxlcyAtQyBsaWIvdW5pY29yZSAtUCBwb2QgLW1ha2V0ZXN0IC1tYWtlbGlzdCAtcAorICMJQ29tbWVudGVkIG91dCBzbyBhbHdheXMgcnVucywgbWt0YWJsZXMgbG9va3MgYXQgZmFyIG1vcmUgZmlsZXMgdGhhbiB3ZQorICMJY2FuIGluIHRoaXMgbWFrZWZpbGUgdG8gZGVjaWRlIGlmIG5lZWRzIHRvIHJ1biBvciBub3QKK0BAIC0xMDA5LDEyICsxMDE5LDEyIEBAIHVuaS5kYXRhOiAkKE1JTklQRVJMX0VYRSkgJChDT05GSUdQTSkgbGliL3VuaWNvcmUvbWt0YWJsZXMgJChub254c19leHQpCisgIyAkKFBFUkxfRVhFKSBhbmQgZXh0IGJlY2F1c2UgcG9kX2xpYi5wbCBuZWVkcyBEaWdlc3Q6Ok1ENQorICMgQnV0IGFsc28gdGhpcyBlbnN1cmVzIHRoYXQgYWxsIGV4dGVuc2lvbnMgYXJlIGJ1aWx0IGJlZm9yZSB3ZSB0cnkgdG8gc2NhbgorICMgdGhlbSwgd2hpY2ggcGlja3MgdXAgRGV2ZWw6OlBQUG9ydCdzIGRvY3VtZW50YXRpb24uCistcG9kL3Blcmx0b2MucG9kOiAkKHBlcmx0b2NfcG9kX3ByZXJlcXMpICAkKFBFUkxfRVhFKSAkKGV4dCkgcG9kL2J1aWxkdG9jCistCSQoUlVOX1BFUkwpIC1mIHBvZC9idWlsZHRvYyAtcQorK3BvZC9wZXJsdG9jLnBvZDogJChwZXJsdG9jX3BvZF9wcmVyZXFzKSAkKGV4dCkgcG9kL2J1aWxkdG9jCisrCSQoTUlOSVBFUkwpIC1mIHBvZC9idWlsZHRvYyAtcQorIAorIHBvZC9wZXJsYXBpLnBvZDogcG9kL3BlcmxpbnRlcm4ucG9kCisgCistcG9kL3BlcmxpbnRlcm4ucG9kOiAkKE1JTklQRVJMX0VYRSkgYXV0b2RvYy5wbCBlbWJlZC5mbmMKKytwb2QvcGVybGludGVybi5wb2Q6IGF1dG9kb2MucGwgZW1iZWQuZm5jCisgCSQoTUlOSVBFUkwpIGF1dG9kb2MucGwKKyAKKyBwb2QvcGVybG1vZGxpYi5wb2Q6ICQoTUlOSVBFUkxfRVhFKSBwb2QvcGVybG1vZGxpYi5QTCBNQU5JRkVTVAorQEAgLTEwMjQsNyArMTAzNCw3IEBAIHBvZC9wZXJsNTIyMGRlbHRhLnBvZDogcG9kL3BlcmxkZWx0YS5wb2QKKyAJJChSTVMpIHBvZC9wZXJsNTIyMGRlbHRhLnBvZAorIAkkKExOUykgcGVybGRlbHRhLnBvZCBwb2QvcGVybDUyMjBkZWx0YS5wb2QKKyAKKy1leHRyYS5wb2RzOiAkKE1JTklQRVJMX0VYRSkKKytleHRyYS5wb2RzOgorIAktQHRlc3QgISAtZiBleHRyYS5wb2RzIHx8IHJtIC1mIGBjYXQgZXh0cmEucG9kc2AKKyAJLUBybSAtZiBleHRyYS5wb2RzCisgCS1AZm9yIHggaW4gYGdyZXAgLWwgJ149W2Etel0nIFJFQURNRS4qIHwgZ3JlcCAtdiBSRUFETUUudm1zYCA7IGRvIFwKK0BAIC0xMDY4LDggKzEwNzgsNyBAQCBFT1QKKyAgICAgICAgICRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDxFT1QKKyAKKyBpbnN0YWxsXyRuYW1lIGluc3RhbGwtJG5hbWU6IFwkKElOU1RBTExfREVQRU5ERU5DRSkgaW5zdGFsbHBlcmwgYWxsIGluc3RhbGxtYW4KKy0JXCQoUlVOX1BFUkwpIGluc3RhbGxwZXJsIC0tZGVzdGRpcj1cJChERVNURElSKSAkZmxhZ3MgXCQoSU5TVEFMTEZMQUdTKSBcJChTVFJJUEZMQUdTKQorLQlcJChSVU5fUEVSTCkgaW5zdGFsbG1hbiAtLWRlc3RkaXI9XCQoREVTVERJUikgJGZsYWdzCisrCS4vaG9zdHBlcmwgLUlmYWtlX2NvbmZpZ19saWJyYXJ5IC1JbGliIC1NQ29uZmlnIGluc3RhbGxwZXJsIC0tZGVzdGRpcj1cJChERVNURElSKSAkZmxhZ3MgIFwkKElOU1RBTExGTEFHUykgXCQoU1RSSVBGTEFHUykKKyBFT1QKKyAgICAgZmkKKyAKK0BAIC0xMDc5LDExICsxMDg4LDcgQEAgZG9uZQorIGlmIHRlc3QgIlgkaG9zdHBlcmwiICE9IFg7IHRoZW4KKyAJJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCisgaW5zdGFsbC5wZXJsOgkkKElOU1RBTExfREVQRU5ERU5DRSkgaW5zdGFsbHBlcmwKKy0JJChIT1NUX1BFUkwpIGluc3RhbGxwZXJsIC0tZGVzdGRpcj0kKERFU1RESVIpICQoSU5TVEFMTEZMQUdTKSAkKFNUUklQRkxBR1MpCistCS1AdGVzdCAhIC1zIGV4dHJhcy5sc3QgfHwgJChNQUtFKSBleHRyYXMuaW5zdGFsbAorLQorLWluc3RhbGwubWFuOglhbGwgaW5zdGFsbG1hbgorLQkkKEhPU1RfUEVSTCkgaW5zdGFsbG1hbiAtLWRlc3RkaXI9JChERVNURElSKSAkKElOU1RBTExGTEFHUykKKysJLi9ob3N0cGVybCAtSWZha2VfY29uZmlnX2xpYnJhcnkgLUlsaWIgLU1Db25maWcgaW5zdGFsbHBlcmwgLS1kZXN0ZGlyPSQoREVTVERJUikgJChJTlNUQUxMRkxBR1MpICQoU1RSSVBGTEFHUykKKyAKKyAjIFhYWCBFeHBlcmltZW50YWwuIEhhcmR3aXJlZCB2YWx1ZXMsIGJ1dCB1c2VmdWwgZm9yIHRlc3RpbmcuCisgIyBFdmVudHVhbGx5IENvbmZpZ3VyZSBjb3VsZCBhc2sgZm9yIHNvbWUgb2YgdGhlc2UgdmFsdWVzLgorQEAgLTExMDEsMjQgKzExMDYsOCBAQCBpbnN0YWxsLmh0bWw6IGFsbCBpbnN0YWxsaHRtbAorIGVsc2UKKyAJJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCisgaW5zdGFsbC5wZXJsOgkkKElOU1RBTExfREVQRU5ERU5DRSkgaW5zdGFsbHBlcmwKKy0JJChSVU5fUEVSTCkgaW5zdGFsbHBlcmwgLS1kZXN0ZGlyPSQoREVTVERJUikgJChJTlNUQUxMRkxBR1MpICQoU1RSSVBGTEFHUykKKy0JLUB0ZXN0ICEgLXMgZXh0cmFzLmxzdCB8fCBQQVRIPSJgcHdkYDpcJHtQQVRIfSIgUEVSTDVMSUI9ImBwd2RgL2xpYiIgXCQoUlVOX1BFUkwpIC1JbGliIC1NQ1BBTiAtZSAnQEFSR1YmJmluc3RhbGwoQEFSR1YpJyBgY2F0IGV4dHJhcy5sc3RgCisrCS4vaG9zdHBlcmwgLUlmYWtlX2NvbmZpZ19saWJyYXJ5IC1JbGliIC1NQ29uZmlnIGluc3RhbGxwZXJsIC0tZGVzdGRpcj0kKERFU1RESVIpICQoSU5TVEFMTEZMQUdTKSAkKFNUUklQRkxBR1MpCisgCistaW5zdGFsbC5tYW46CWFsbCBpbnN0YWxsbWFuCistCSQoUlVOX1BFUkwpIGluc3RhbGxtYW4gLS1kZXN0ZGlyPSQoREVTVERJUikgJChJTlNUQUxMRkxBR1MpCistCistIyBYWFggRXhwZXJpbWVudGFsLiBIYXJkd2lyZWQgdmFsdWVzLCBidXQgdXNlZnVsIGZvciB0ZXN0aW5nLgorLSMgRXZlbnR1YWxseSBDb25maWd1cmUgY291bGQgYXNrIGZvciBzb21lIG9mIHRoZXNlIHZhbHVlcy4KKy1pbnN0YWxsLmh0bWw6IGFsbCBpbnN0YWxsaHRtbAorLQktQHRlc3QgLWYgUkVBRE1FLnZtcyAmJiBjZCB2bXMgJiYgJChMTlMpIC4uL1JFQURNRS52bXMgUkVBRE1FX3Ztcy5wb2QgJiYgY2QgLi4KKy0JJChSVU5fUEVSTCkgaW5zdGFsbGh0bWwgICBcCistICAgICAgLS1wb2Ryb290PS4gLS1wb2RwYXRoPS4gLS1yZWN1cnNlICBcCistICAgICAgLS1odG1sZGlyPSQocHJpdmxpYikvaHRtbCAgIFwKKy0gICAgICAtLWh0bWxyb290PSQocHJpdmxpYikvaHRtbCAgXAorLSAgICAgIC0tc3BsaXRoZWFkPXBvZC9wZXJsaXBjICAgICBcCistICAgICAgLS1zcGxpdGl0ZW09cG9kL3BlcmxmdW5jICAgIFwKKy0gICAgICAtLWlnbm9yZT1Qb3J0aW5nL01haW50YWluZXJzLnBtLFBvcnRpbmcvcHVtcGtpbi5wb2QsUG9ydGluZy9yZXBvc2l0b3J5LnBvZCBcCistICAgICAgLS12ZXJib3NlCisgIU5PIVNVQlMhCisgZmkKKyAKK0BAIC0xMjEwLDEzICsxMTk5LDEzIEBAIG1hbmljaGVjazoJRk9SQ0UKKyAjCisgIyBEeW5hTG9hZGVyIG1heSBiZSBuZWVkZWQgZm9yIGV4dGVuc2lvbnMgdGhhdCB1c2UgTWFrZWZpbGUuUEwuCisgCistJChEWU5BTE9BREVSKToJJChNSU5JUEVSTF9FWEUpIGxpYi9idWlsZGN1c3RvbWl6ZS5wbCBwcmVwbGlicmFyeSBGT1JDRSAkKG5vbnhzX2V4dCkKKyskKERZTkFMT0FERVIpOiBsaWIvYnVpbGRjdXN0b21pemUucGwgcHJlcGxpYnJhcnkgRk9SQ0UgJChub254c19leHQpCisgCSQoTUlOSVBFUkwpIG1ha2VfZXh0LnBsICRAICQoTUFLRV9FWFRfQVJHUykgTUFLRT0iJChNQUtFKSIgTElCUEVSTF9BPSQoTElCUEVSTCkgTElOS1RZUEU9c3RhdGljICQoU1RBVElDX0xERkxBR1MpCisgCistZF9kdW1teSAkKGR5bmFtaWNfZXh0KToJJChNSU5JUEVSTF9FWEUpIGxpYi9idWlsZGN1c3RvbWl6ZS5wbCBwcmVwbGlicmFyeSBtYWtlcHBwb3J0ICQoRFlOQUxPQURFUikgRk9SQ0UgJChQRVJMRVhQT1JUKSAkKExJQlBFUkwpCisrZF9kdW1teSAkKGR5bmFtaWNfZXh0KToJbGliL2J1aWxkY3VzdG9taXplLnBsIHByZXBsaWJyYXJ5IG1ha2VwcHBvcnQgJChEWU5BTE9BREVSKSBGT1JDRSAkKFBFUkxFWFBPUlQpICQoTElCUEVSTCkKKyAJJChNSU5JUEVSTCkgbWFrZV9leHQucGwgJEAgJChNQUtFX0VYVF9BUkdTKSBNQUtFPSIkKE1BS0UpIiBMSUJQRVJMX0E9JChMSUJQRVJMKSBMSU5LVFlQRT1keW5hbWljCisgCistc19kdW1teSAkKHN0YXRpY19leHQpOgkkKE1JTklQRVJMX0VYRSkgbGliL2J1aWxkY3VzdG9taXplLnBsIHByZXBsaWJyYXJ5IG1ha2VwcHBvcnQgJChEWU5BTE9BREVSKSBGT1JDRQorK3NfZHVtbXkgJChzdGF0aWNfZXh0KToJbGliL2J1aWxkY3VzdG9taXplLnBsIHByZXBsaWJyYXJ5IG1ha2VwcHBvcnQgJChEWU5BTE9BREVSKSBGT1JDRQorIAkkKE1JTklQRVJMKSBtYWtlX2V4dC5wbCAkQCAkKE1BS0VfRVhUX0FSR1MpIE1BS0U9IiQoTUFLRSkiIExJQlBFUkxfQT0kKExJQlBFUkwpIExJTktUWVBFPXN0YXRpYyAkKFNUQVRJQ19MREZMQUdTKQorIAorIG5fZHVtbXkgJChub254c19leHQpOgkkKE1JTklQRVJMX0VYRSkgbGliL2J1aWxkY3VzdG9taXplLnBsIHByZXBsaWJyYXJ5IEZPUkNFCitAQCAtMTQwNSwxNCArMTM5NCwxNCBAQCB0ZXN0X3ByZXBfcHJlOiBwcmVwbGlicmFyeSB1dGlsaXRpZXMgJChub254c19leHQpCisgCisgY2FzZSAiJHRhcmdldGhvc3QiIGluCisgJycpICRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworLXRlc3RfcHJlcCB0ZXN0LXByZXA6IHRlc3RfcHJlcF9wcmUgJChNSU5JUEVSTF9FWEUpICQodW5pZGF0YWZpbGVzKSAkKFBFUkxfRVhFKSBcCisrdGVzdF9wcmVwIHRlc3QtcHJlcDogdGVzdF9wcmVwX3ByZSAkKHVuaWRhdGFmaWxlcykgJChQRVJMX0VYRSkgXAorIAkkKGR5bmFtaWNfZXh0KSAkKFRFU1RfUEVSTF9ETEwpIHJ1bnRlc3RzICQoZ2VuZXJhdGVkX3BvZHMpCisgCWNkIHQgJiYgKHJtIC1mICQoUEVSTF9FWEUpOyAkKExOUykgLi4vJChQRVJMX0VYRSkgJChQRVJMX0VYRSkpCisgCisgIU5PIVNVQlMhCisgOzsKKyAqKSAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8IUdST0shVEhJUyEKKy10ZXN0X3ByZXAgdGVzdC1wcmVwOiB0ZXN0X3ByZXBfcHJlIFwkKE1JTklQRVJMX0VYRSkgXCQodW5pZGF0YWZpbGVzKSBcJChQRVJMX0VYRSkgXAorK3Rlc3RfcHJlcCB0ZXN0LXByZXA6IHRlc3RfcHJlcF9wcmUgXCQodW5pZGF0YWZpbGVzKSBcJChQRVJMX0VYRSkgXAorIAlcJChkeW5hbWljX2V4dCkgXCQoVEVTVF9QRVJMX0RMTCkgcnVudGVzdHMgXAorIAlcJChnZW5lcmF0ZWRfcG9kcykKKyAJJHRvIGxpYnBlcmwuKgorQEAgLTE0NjUsNyArMTQ1NCw3IEBAIHRlc3RfcHJlcCB0ZXN0LXByZXA6IHRlc3RfcHJlcF9wcmUgXCQoTUlOSVBFUkxfRVhFKSBcJCh1bmlkYXRhZmlsZXMpIFwkKFBFUkxfRVhFCisgZXNhYworIAorICRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworLXRlc3RfcHJlcF9yZW9ubHk6ICQoTUlOSVBFUkxfRVhFKSAkKFBFUkxfRVhFKSAkKGR5bmFtaWNfZXh0X3JlKSAkKFRFU1RfUEVSTF9ETEwpCisrdGVzdF9wcmVwX3Jlb25seTogJChQRVJMX0VYRSkgJChkeW5hbWljX2V4dF9yZSkgJChURVNUX1BFUkxfRExMKQorIAkkKE1JTklQRVJMKSBtYWtlX2V4dC5wbCAkKGR5bmFtaWNfZXh0X3JlKSBNQUtFPSIkKE1BS0UpIiBMSUJQRVJMX0E9JChMSUJQRVJMKSBMSU5LVFlQRT1keW5hbWljCisgCWNkIHQgJiYgKHJtIC1mICQoUEVSTF9FWEUpOyAkKExOUykgLi4vJChQRVJMX0VYRSkgJChQRVJMX0VYRSkpCisgIU5PIVNVQlMhCitAQCAtMTUxNiw3ICsxNTA1LDcgQEAgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCisgCisgIyBDYW4ndCBkZXBlbmQgb24gbGliL0NvbmZpZy5wbSBiZWNhdXNlIHRoYXQgbWlnaHQgYmUgd2hlcmUgbWluaXBlcmwKKyAjIGlzIGNyYXNoaW5nLgorLW1pbml0ZXN0OiAkKE1JTklQRVJMX0VYRSkKKyttaW5pdGVzdDoKKyAJLUB0ZXN0IC1mIGxpYi9Db25maWcucG0gfHwgJChNQUtFKSBsaWIvQ29uZmlnLnBtICQodW5pZGF0YWZpbGVzKQorIAlAZWNobyAiICIKKyAJQGVjaG8gIllvdSBtYXkgc2VlIHNvbWUgaXJyZWxldmFudCB0ZXN0IGZhaWx1cmVzIGlmIHlvdSBoYXZlIGJlZW4gdW5hYmxlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL01ha2VmaWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL01ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OGUyZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvTWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitJbmRleDogcGVybC01LjE0LjIvQ3Jvc3MvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTQuMi5vcmlnL0Nyb3NzL01ha2VmaWxlCisrKysgcGVybC01LjE0LjIvQ3Jvc3MvTWFrZWZpbGUKK0BAIC0xLDYgKzEsNyBAQAorICMjIFRvcGxldmVsIE1ha2VmaWxlIGZvciBjcm9zcy1jb21waWxhdGlvbiBvZiBwZXJsCisgCistZXhwb3J0IFRPUERJUj0ke3NoZWxsIHB3ZH0KKytvdmVycmlkZSBUT1BESVI9JHtzaGVsbCBwd2R9CisrZXhwb3J0IFRPUERJUgorIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZworIGV4cG9ydCBDRkxBR1MKKyBleHBvcnQgU1lTPSQoQVJDSCktJChPUykKK0BAIC0xMCw3ICsxMSw3IEBAIGV4cG9ydCBPUFRJTUlaQVRJT04gPSAtTzIKKyAKKyBleHBvcnQgQ0MgPSAkKENST1NTKWdjYworIGV4cG9ydCBDWFggPSAkKENST1NTKWcrKworLWV4cG9ydCBMRCA9ICQoQ1JPU1MpbGQKKytleHBvcnQgTEQgPSAkKENDKQorIGV4cG9ydCBTVFJJUCA9ICQoQ1JPU1Mpc3RyaXAKKyBleHBvcnQgQVIgPSAkKENST1NTKWFyCisgZXhwb3J0IFJBTkxJQiA9ICQoQ1JPU1MpcmFubGliCitAQCAtMzIsMTcgKzMzLDYgQEAgQ0ZMQUdTKz0kKEZVTExfT1BUSU1JWkFUSU9OKQorIGFsbDoKKyAJQGVjaG8gUGxlYXNlIHJlYWQgdGhlIFJFQURNRSBmaWxlIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLgorIAorLWdlbl9wYXRjaDoKKy0JZGlmZiAtQmJ1ciAuLi9NYWtlZmlsZS5TSCBNYWtlZmlsZS5TSCA+IE1ha2VmaWxlLlNILnBhdGNoCistCWRpZmYgLUJidXIgLi4vaW5zdGFsbHBlcmwgaW5zdGFsbHBlcmwgPiBpbnN0YWxscGVybC5wYXRjaAorLQorLXBhdGNoOgorLQljZCAuLiA7IGlmIFsgISAtZSAuL0NST1NTX1BBVENIRUQgXSA7IHRoZW4gXAorLQkJcGF0Y2ggLXAxIDwgQ3Jvc3MvTWFrZWZpbGUuU0gucGF0Y2g7IFwKKy0JCXBhdGNoIC1wMSA8IENyb3NzL2luc3RhbGxwZXJsLnBhdGNoIDsgbXYgaW5zdGFsbHBlcmwgaW5zdGFsbHBlcmwtcGF0Y2hlZDsgXAorLQkJc2VkIC1lICdzL1hYU1RSSVBYWC8kKFNZUykvJyBpbnN0YWxscGVybC1wYXRjaGVkID4gaW5zdGFsbHBlcmw7IFwKKy0JCXRvdWNoIENST1NTX1BBVENIRUQgOyBmaQorLQorIHBlcmw6CisgCUBlY2hvIFBlcmwgY3Jvc3MtYnVpbGQgZGlyZWN0b3J5IGlzICQoVE9QRElSKQorIAlAZWNobyBUYXJnZXQgYXJjaCBpcyAkKFNZUykKK0BAIC01MiwxMSArNDIsMTEgQEAgcGVybDoKKyAJJChUT1BESVIpL2dlbmVyYXRlX2NvbmZpZ19zaCBjb25maWcuc2gtJChTWVMpID4gJChUT1BESVIpLy4uL2NvbmZpZy5zaAorIAljZCAkKFRPUERJUikvLi4gOyAuL0NvbmZpZ3VyZSAtUyA7IG1ha2UgZGVwZW5kIDsgbWFrZSA7IG1ha2UgbW9yZQorIAljZCAkKFRPUERJUikvLi4gOyBta2RpciAtcCBmYWtlX2NvbmZpZ19saWJyYXJ5IDsgY3AgbGliL0NvbmZpZy5wbSBsaWIvQ29uZmlnX2hlYXZ5LnBsIGZha2VfY29uZmlnX2xpYnJhcnkKKy0JY2QgJChUT1BESVIpLy4uIDsgJChNQUtFKSBtb3JlMiAiUEVSTFJVTj0vdXNyL2Jpbi9wZXJsIC1JJChUT1BESVIpLy4uL2Zha2VfY29uZmlnX2xpYnJhcnkgLU1Db25maWciCistCWNkICQoVE9QRElSKS8uLiA7ICQoTUFLRSkgbW9yZTMgIlBFUkxSVU49L3Vzci9iaW4vcGVybCAtSSQoVE9QRElSKS8uLi9mYWtlX2NvbmZpZ19saWJyYXJ5IC1NQ29uZmlnIgorLQljZCAkKFRPUERJUikvLi4gOyAkKE1BS0UpIG1vcmU0ICJQRVJMUlVOPS91c3IvYmluL3BlcmwgLUkkKFRPUERJUikvLi4vZmFrZV9jb25maWdfbGlicmFyeSAtTUNvbmZpZyIKKysJY2QgJChUT1BESVIpLy4uIDsgJChNQUtFKSBtb3JlMiAiUEVSTFJVTj1ob3N0cGVybCAtSSQoVE9QRElSKS8uLi9mYWtlX2NvbmZpZ19saWJyYXJ5IC1NQ29uZmlnIgorKwljZCAkKFRPUERJUikvLi4gOyAkKE1BS0UpIG1vcmUzICJQRVJMUlVOPWhvc3RwZXJsIC1JJChUT1BESVIpLy4uL2Zha2VfY29uZmlnX2xpYnJhcnkgLU1Db25maWciCisrCWNkICQoVE9QRElSKS8uLiA7ICQoTUFLRSkgbW9yZTQgIlBFUkxSVU49aG9zdHBlcmwgLUkkKFRPUERJUikvLi4vZmFrZV9jb25maWdfbGlicmFyeSAtTUNvbmZpZyIKKyAJY2QgJChUT1BESVIpLy4uIDsgcm0gLXJmIGluc3RhbGxfbWVfaGVyZQorLQljZCAkKFRPUERJUikvLi4gOyBtYWtlIGluc3RhbGwtc3RyaXAKKysjCWNkICQoVE9QRElSKS8uLiA7IG1ha2UgaW5zdGFsbC1zdHJpcAorIAljZCAkKFRPUERJUikvLi4gOyBzaCAteCBDcm9zcy93YXJwCisgCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmI1MDQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaApAQCAtMCwwICsxLDEyMjEgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIGZpbGUgd2FzIHByb2R1Y2VkIGJ5IHJ1bm5pbmcgdGhlIENvbmZpZ3VyZSBzY3JpcHQuIEl0IGhvbGRzIGFsbCB0aGUKKyMgZGVmaW5pdGlvbnMgZmlndXJlZCBvdXQgYnkgQ29uZmlndXJlLiBTaG91bGQgeW91IG1vZGlmeSBvbmUgb2YgdGhlc2UgdmFsdWVzLAorIyBkbyBub3QgZm9yZ2V0IHRvIHByb3BhZ2F0ZSB5b3VyIGNoYW5nZXMgYnkgcnVubmluZyAiQ29uZmlndXJlIC1kZXIiLiBZb3UgbWF5CisjIGluc3RlYWQgY2hvb3NlIHRvIHJ1biBlYWNoIG9mIHRoZSAuU0ggZmlsZXMgYnkgeW91cnNlbGYsIG9yICJDb25maWd1cmUgLVMiLgorIworCisjIFBhY2thZ2UgbmFtZSAgICAgIDogcGVybDUKKyMgU291cmNlIGRpcmVjdG9yeSAgOiAuCisjIENvbmZpZ3VyYXRpb24gdGltZTogVGh1IEp1biAxOCAwNTozNzoyNyBVVEMgMjAxNQorIyBDb25maWd1cmVkIGJ5ICAgICA6IE9wZW4gRW1iZWRkZWQKKyMgVGFyZ2V0IHN5c3RlbSAgICAgOiBsaW51eCBxZW11eDg2LTY0IDMuMTkuNS15b2N0by1zdGFuZGFyZCAjMSBzbXAgcHJlZW1wdCB0dWUganVuIDE2IDAwOjI4OjE3IHBkdCAyMDE1IHg4Nl82NCBnbnVsaW51eAorCis6IENvbmZpZ3VyZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorY29uZmlnX2FyZzA9J0NvbmZpZ3VyZScKK2NvbmZpZ19hcmdzPSctZGVzIC1Eb3B0aW1pemU9LU8yIC1EbXlob3N0bmFtZT1sb2NhbGhvc3QgLURwZXJsYWRtaW49cm9vdEBsb2NhbGhvc3QgLURjYz1nY2MgLURjZl9ieT1PcGVuIEVtYmVkZGVkIC1EaW5zdGFsbHByZWZpeD1ARVhFQ1BSRUZJWEAgLURwcmVmaXg9QEVYRUNQUkVGSVhAIC1EdmVuZG9ycHJlZml4PUBFWEVDUFJFRklYQCAtRHNpdGVwcmVmaXg9QEVYRUNQUkVGSVhAIC1Eb3RoZXJsaWJkaXJzPUBMSUJESVJAL3BlcmwvNS4yMi4wIC1EdXNlc2hycGxpYiAtRHVzZXRocmVhZHMgLUR1c2VpdGhyZWFkcyAtRHVzZWxhcmdlZmlsZXMgLVVkX2Rvc3VpZCAtRGRfc2VtY3RsX3NlbXVuIC1VaV9kYiAtVWlfbmRibSAtVWlfZ2RibSAtRGlfc2hhZG93IC1EaV9zeXNsb2cgLURtYW4zZXh0PTNwbSAtRHVzZXBlcmxpbyAtRGluc3RhbGx1c3JiaW5wZXJsIC1VYmluY29tcGF0NTAwNSAtVXZlcnNpb25vbmx5IC1EcGFnZXI9QFVTUkJJTkAvbGVzcyAtaXNyJworY29uZmlnX2FyZ2M9MjgKK2NvbmZpZ19hcmcxPSctZGVzJworY29uZmlnX2FyZzI9Jy1Eb3B0aW1pemU9LU8yJworY29uZmlnX2FyZzM9Jy1EbXlob3N0bmFtZT1sb2NhbGhvc3QnCitjb25maWdfYXJnND0nLURwZXJsYWRtaW49cm9vdEBsb2NhbGhvc3QnCitjb25maWdfYXJnNT0nLURjYz1nY2MnCitjb25maWdfYXJnNj0nLURjZl9ieT1PcGVuIEVtYmVkZGVkJworY29uZmlnX2FyZzc9Jy1EaW5zdGFsbHByZWZpeD1ARVhFQ1BSRUZJWEAnCitjb25maWdfYXJnOD0nLURwcmVmaXg9QEVYRUNQUkVGSVhAJworY29uZmlnX2FyZzk9Jy1EdmVuZG9ycHJlZml4PUBFWEVDUFJFRklYQCcKK2NvbmZpZ19hcmcxMD0nLURzaXRlcHJlZml4PUBFWEVDUFJFRklYQCcKK2NvbmZpZ19hcmcxMT0nLURvdGhlcmxpYmRpcnM9QExJQkRJUkAvcGVybC81LjIyLjAnCitjb25maWdfYXJnMTI9Jy1EdXNlc2hycGxpYicKK2NvbmZpZ19hcmcxMz0nLUR1c2V0aHJlYWRzJworY29uZmlnX2FyZzE0PSctRHVzZWl0aHJlYWRzJworY29uZmlnX2FyZzE1PSctRHVzZWxhcmdlZmlsZXMnCitjb25maWdfYXJnMTY9Jy1VZF9kb3N1aWQnCitjb25maWdfYXJnMTc9Jy1EZF9zZW1jdGxfc2VtdW4nCitjb25maWdfYXJnMTg9Jy1VaV9kYicKK2NvbmZpZ19hcmcxOT0nLVVpX25kYm0nCitjb25maWdfYXJnMjA9Jy1VaV9nZGJtJworY29uZmlnX2FyZzIxPSctRGlfc2hhZG93JworY29uZmlnX2FyZzIyPSctRGlfc3lzbG9nJworY29uZmlnX2FyZzIzPSctRG1hbjNleHQ9M3BtJworY29uZmlnX2FyZzI0PSctRHVzZXBlcmxpbycKK2NvbmZpZ19hcmcyNT0nLURpbnN0YWxsdXNyYmlucGVybCcKK2NvbmZpZ19hcmcyNj0nLVViaW5jb21wYXQ1MDA1JworY29uZmlnX2FyZzI3PSctVXZlcnNpb25vbmx5JworY29uZmlnX2FyZzI4PSctRHBhZ2VyPUBVU1JCSU5AL2xlc3MgLWlzcicKKworQXV0aG9yPScnCitEYXRlPScnCitIZWFkZXI9JycKK0lkPScnCitMb2NrZXI9JycKK0xvZz0nJworUkNTZmlsZT0nJworUmV2aXNpb249JycKK1NvdXJjZT0nJworU3RhdGU9JycKK19hPScuYScKK19leGU9JycKK19vPScubycKK2Fmcz0nZmFsc2UnCithZnNyb290PScvYWZzJworYWxpZ25ieXRlcz0nOCcKK2Fuc2kya25yPScnCithcGhvc3RuYW1lPScnCithcGlfcmV2aXNpb249JzUnCithcGlfc3VidmVyc2lvbj0nMCcKK2FwaV92ZXJzaW9uPScyMicKK2FwaV92ZXJzaW9uc3RyaW5nPSc1LjIyLjAnCithcj0nYXInCithcmNobGliPSdATElCRElSQC9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJworYXJjaGxpYmV4cD0nQFNUQUdJTkdESVJAQExJQkRJUkAvcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aScKK2FyY2hsaWJfZXhwPSdATElCRElSQC9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJworYXJjaG5hbWU2ND0nJworYXJjaG5hbWU9J0BBUkNIQC10aHJlYWQtbXVsdGknCithcmNob2Jqcz0nJworYXNjdGltZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fQl9TQicKK2F3az0nYXdrJworYmFzZXJldj0nNS4wJworYmFzaD0nJworYmluPSdAVVNSQklOQCcKK2Jpbl9FTEY9J2RlZmluZScKK2JpbmV4cD0nQFVTUkJJTkAnCitiaXNvbj0nYmlzb24nCitieWFjYz0nYnlhY2MnCitjPScnCitjYXN0ZmxhZ3M9JzAnCitjYXQ9J2NhdCcKK2NjPSdnY2MnCitjY2NkbGZsYWdzPSctZlBJQycKK2NjZGxmbGFncz0nLVdsLC1FIC1XbCwtcnBhdGgsQExJQkRJUkAvcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aS9DT1JFJworY2NmbGFncz0nLURfUkVFTlRSQU5UIC1EX0dOVV9TT1VSQ0UgLWZ3cmFwdiAtZm5vLXN0cmljdC1hbGlhc2luZyAtcGlwZSAtRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLURfRk9SVElGWV9TT1VSQ0U9MicKK2NjZmxhZ3NfdXNlbGFyZ2VmaWxlcz0nLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0JworY2NuYW1lPSdnY2MnCitjY3N5bWJvbHM9JycKK2NjdmVyc2lvbj0nJworY2ZfYnk9J09wZW4gRW1iZWRkZWQnCitjZl9lbWFpbD0nT3BlbiBFbWJlZGRlZEBsb2NhbGhvc3QubG9jYWxkb21haW4nCitjZl90aW1lPSdUaHUgSnVuIDE4IDA1OjM3OjI3IFVUQyAyMDE1JworY2hhcmJpdHM9JzgnCitjaGFyc2l6ZT0nMScKK2NoZ3JwPScnCitjaG1vZD0nY2htb2QnCitjaG93bj0nJworY2xvY2t0eXBlPSdjbG9ja190JworY29tbT0nY29tbScKK2NvbXByZXNzPScnCitjb250YWlucz0nZ3JlcCcKK2NwPSdjcCcKK2NwaW89JycKK2NwcD0nY3BwJworY3BwX3N0dWZmPSc0MicKK2NwcGNjc3ltYm9scz0nJworY3BwZmxhZ3M9Jy1EX1JFRU5UUkFOVCAtRF9HTlVfU09VUkNFIC1md3JhcHYgLWZuby1zdHJpY3QtYWxpYXNpbmcgLXBpcGUnCitjcHBsYXN0PSctJworY3BwbWludXM9Jy0nCitjcHBydW49J2djYyAgLUUnCitjcHBzdGRpbj0nZ2NjICAtRScKK2NyeXB0X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19CX0NDUycKK2NyeXB0bGliPScnCitjc2g9J2NzaCcKK2N0ZXJtaWRfcl9wcm90bz0nMCcKK2N0aW1lX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19CX1NCJworZF9HY29udmVydD0nZ2N2dCgoeCksKG4pLChiKSknCitkX1BSSUVVbGRibD0nZGVmaW5lJworZF9QUklGVWxkYmw9J2RlZmluZScKK2RfUFJJR1VsZGJsPSdkZWZpbmUnCitkX1BSSVhVNjQ9J2RlZmluZScKK2RfUFJJZDY0PSdkZWZpbmUnCitkX1BSSWVsZGJsPSdkZWZpbmUnCitkX1BSSWZsZGJsPSdkZWZpbmUnCitkX1BSSWdsZGJsPSdkZWZpbmUnCitkX1BSSWk2ND0nZGVmaW5lJworZF9QUklvNjQ9J2RlZmluZScKK2RfUFJJdTY0PSdkZWZpbmUnCitkX1BSSXg2ND0nZGVmaW5lJworZF9TQ05mbGRibD0nZGVmaW5lJworZF9fZndhbGs9J3VuZGVmJworZF9hY2Nlc3M9J2RlZmluZScKK2RfYWNjZXNzeD0ndW5kZWYnCitkX2Fjb3NoPSdkZWZpbmUnCitkX2FpbnRsPSd1bmRlZicKK2RfYWxhcm09J2RlZmluZScKK2RfYXJjaGxpYj0nZGVmaW5lJworZF9hc2N0aW1lNjQ9J3VuZGVmJworZF9hc2N0aW1lX3I9J2RlZmluZScKK2RfYXNpbmg9J2RlZmluZScKK2RfYXRhbmg9J2RlZmluZScKK2RfYXRvbGY9J3VuZGVmJworZF9hdG9sbD0nZGVmaW5lJworZF9hdHRyaWJ1dGVfZGVwcmVjYXRlZD0nZGVmaW5lJworZF9hdHRyaWJ1dGVfZm9ybWF0PSdkZWZpbmUnCitkX2F0dHJpYnV0ZV9tYWxsb2M9J2RlZmluZScKK2RfYXR0cmlidXRlX25vbm51bGw9J2RlZmluZScKK2RfYXR0cmlidXRlX25vcmV0dXJuPSdkZWZpbmUnCitkX2F0dHJpYnV0ZV9wdXJlPSdkZWZpbmUnCitkX2F0dHJpYnV0ZV91bnVzZWQ9J2RlZmluZScKK2RfYXR0cmlidXRlX3dhcm5fdW51c2VkX3Jlc3VsdD0nZGVmaW5lJworZF9iYWNrdHJhY2U9J2RlZmluZScKK2RfYmNtcD0nZGVmaW5lJworZF9iY29weT0nZGVmaW5lJworZF9ic2Q9J3VuZGVmJworZF9ic2RnZXRwZ3JwPSd1bmRlZicKK2RfYnNkc2V0cGdycD0ndW5kZWYnCitkX2J1aWx0aW5fY2hvb3NlX2V4cHI9J2RlZmluZScKK2RfYnVpbHRpbl9leHBlY3Q9J2RlZmluZScKK2RfYnplcm89J2RlZmluZScKK2RfYzk5X3ZhcmlhZGljX21hY3Jvcz0nZGVmaW5lJworZF9jYXN0aTMyPSdkZWZpbmUnCitkX2Nhc3RuZWc9J2RlZmluZScKK2RfY2JydD0nZGVmaW5lJworZF9jaGFydnNwcj0ndW5kZWYnCitkX2Nob3duPSdkZWZpbmUnCitkX2Nocm9vdD0nZGVmaW5lJworZF9jaHNpemU9J3VuZGVmJworZF9jbGFzcz0ndW5kZWYnCitkX2NsZWFyZW52PSdkZWZpbmUnCitkX2Nsb3NlZGlyPSdkZWZpbmUnCitkX2Ntc2doZHJfcz0nZGVmaW5lJworZF9jb25zdD0nZGVmaW5lJworZF9jb3B5c2lnbj0nZGVmaW5lJworZF9jb3B5c2lnbmw9J2RlZmluZScKK2RfY3BsdXNwbHVzPSd1bmRlZicKK2RfY3J5cHQ9J2RlZmluZScKK2RfY3J5cHRfcj0nZGVmaW5lJworZF9jc2g9J3VuZGVmJworZF9jdGVybWlkPSdkZWZpbmUnCitkX2N0ZXJtaWRfcj0ndW5kZWYnCitkX2N0aW1lNjQ9J3VuZGVmJworZF9jdGltZV9yPSdkZWZpbmUnCitkX2N1c2VyaWQ9J2RlZmluZScKK2RfZGJsX2RpZz0nZGVmaW5lJworZF9kYm1pbml0cHJvdG89J2RlZmluZScKK2RfZGlmZnRpbWU2ND0ndW5kZWYnCitkX2RpZmZ0aW1lPSdkZWZpbmUnCitkX2Rpcl9kZF9mZD0ndW5kZWYnCitkX2RpcmZkPSdkZWZpbmUnCitkX2Rpcm5hbWxlbj0ndW5kZWYnCitkX2RsYWRkcj0nZGVmaW5lJworZF9kbGVycm9yPSdkZWZpbmUnCitkX2Rsb3Blbj0nZGVmaW5lJworZF9kbHN5bXVuPSd1bmRlZicKK2RfZG9zdWlkPSd1bmRlZicKK2RfZHJhbmQ0OF9yPSdkZWZpbmUnCitkX2RyYW5kNDhwcm90bz0nZGVmaW5lJworZF9kdXAyPSdkZWZpbmUnCitkX2VhY2Nlc3M9J2RlZmluZScKK2RfZW5kZ3JlbnQ9J2RlZmluZScKK2RfZW5kZ3JlbnRfcj0ndW5kZWYnCitkX2VuZGhlbnQ9J2RlZmluZScKK2RfZW5kaG9zdGVudF9yPSd1bmRlZicKK2RfZW5kbmVudD0nZGVmaW5lJworZF9lbmRuZXRlbnRfcj0ndW5kZWYnCitkX2VuZHBlbnQ9J2RlZmluZScKK2RfZW5kcHJvdG9lbnRfcj0ndW5kZWYnCitkX2VuZHB3ZW50PSdkZWZpbmUnCitkX2VuZHB3ZW50X3I9J3VuZGVmJworZF9lbmRzZW50PSdkZWZpbmUnCitkX2VuZHNlcnZlbnRfcj0ndW5kZWYnCitkX2VvZm5ibGs9J2RlZmluZScKK2RfZXJmPSdkZWZpbmUnCitkX2VyZmM9J2RlZmluZScKK2RfZXVuaWNlPSd1bmRlZicKK2RfZXhwMj0nZGVmaW5lJworZF9leHBtMT0nZGVmaW5lJworZF9mYXN0c3RkaW89J3VuZGVmJworZF9mY2hkaXI9J2RlZmluZScKK2RfZmNobW9kPSdkZWZpbmUnCitkX2ZjaG93bj0nZGVmaW5lJworZF9mY250bD0nZGVmaW5lJworZF9mY250bF9jYW5fbG9jaz0nZGVmaW5lJworZF9mZF9tYWNyb3M9J2RlZmluZScKK2RfZmRfc2V0PSdkZWZpbmUnCitkX2ZkaW09J2RlZmluZScKK2RfZmRzX2JpdHM9J2RlZmluZScKK2RfZmVnZXRyb3VuZD0nZGVmaW5lJworZF9mZ2V0cG9zPSdkZWZpbmUnCitkX2Zpbml0ZT0nZGVmaW5lJworZF9maW5pdGVsPSdkZWZpbmUnCitkX2ZsZXhmbmFtPSdkZWZpbmUnCitkX2Zsb2NrPSdkZWZpbmUnCitkX2Zsb2NrcHJvdG89J2RlZmluZScKK2RfZm1hPSdkZWZpbmUnCitkX2ZtYXg9J2RlZmluZScKK2RfZm1pbj0nZGVmaW5lJworZF9mb3JrPSdkZWZpbmUnCitkX2ZwX2NsYXNzPSd1bmRlZicKK2RfZnBfY2xhc3NpZnk9J3VuZGVmJworZF9mcF9jbGFzc2w9J3VuZGVmJworZF9mcGF0aGNvbmY9J2RlZmluZScKK2RfZnBjbGFzcz0ndW5kZWYnCitkX2ZwY2xhc3NpZnk9J2RlZmluZScKK2RfZnBjbGFzc2w9J3VuZGVmJworZF9mcGdldHJvdW5kPSd1bmRlZicKK2RfZnBvczY0X3Q9J3VuZGVmJworZF9mcmV4cGw9J2RlZmluZScKK2RfZnNfZGF0YV9zPSd1bmRlZicKK2RfZnNlZWtvPSdkZWZpbmUnCitkX2ZzZXRwb3M9J2RlZmluZScKK2RfZnN0YXRmcz0nZGVmaW5lJworZF9mc3RhdHZmcz0nZGVmaW5lJworZF9mc3luYz0nZGVmaW5lJworZF9mdGVsbG89J2RlZmluZScKK2RfZnRpbWU9J3VuZGVmJworZF9mdXRpbWVzPSdkZWZpbmUnCitkX2dkYm1fbmRibV9oX3VzZXNfcHJvdG90eXBlcz0ndW5kZWYnCitkX2dkYm1uZGJtX2hfdXNlc19wcm90b3R5cGVzPSdkZWZpbmUnCitkX2dldGFkZHJpbmZvPSdkZWZpbmUnCitkX2dldGN3ZD0nZGVmaW5lJworZF9nZXRlc3B3bmFtPSd1bmRlZicKK2RfZ2V0ZnNzdGF0PSd1bmRlZicKK2RfZ2V0Z3JlbnQ9J2RlZmluZScKK2RfZ2V0Z3JlbnRfcj0nZGVmaW5lJworZF9nZXRncmdpZF9yPSdkZWZpbmUnCitkX2dldGdybmFtX3I9J2RlZmluZScKK2RfZ2V0Z3Jwcz0nZGVmaW5lJworZF9nZXRoYnlhZGRyPSdkZWZpbmUnCitkX2dldGhieW5hbWU9J2RlZmluZScKK2RfZ2V0aGVudD0nZGVmaW5lJworZF9nZXRobmFtZT0nZGVmaW5lJworZF9nZXRob3N0YnlhZGRyX3I9J2RlZmluZScKK2RfZ2V0aG9zdGJ5bmFtZV9yPSdkZWZpbmUnCitkX2dldGhvc3RlbnRfcj0nZGVmaW5lJworZF9nZXRob3N0cHJvdG9zPSdkZWZpbmUnCitkX2dldGl0aW1lcj0nZGVmaW5lJworZF9nZXRsb2dpbj0nZGVmaW5lJworZF9nZXRsb2dpbl9yPSdkZWZpbmUnCitkX2dldG1udD0ndW5kZWYnCitkX2dldG1udGVudD0nZGVmaW5lJworZF9nZXRuYW1laW5mbz0nZGVmaW5lJworZF9nZXRuYnlhZGRyPSdkZWZpbmUnCitkX2dldG5ieW5hbWU9J2RlZmluZScKK2RfZ2V0bmVudD0nZGVmaW5lJworZF9nZXRuZXRieWFkZHJfcj0nZGVmaW5lJworZF9nZXRuZXRieW5hbWVfcj0nZGVmaW5lJworZF9nZXRuZXRlbnRfcj0nZGVmaW5lJworZF9nZXRuZXRwcm90b3M9J2RlZmluZScKK2RfZ2V0cGFnc3o9J2RlZmluZScKK2RfZ2V0cGJ5bmFtZT0nZGVmaW5lJworZF9nZXRwYnludW1iZXI9J2RlZmluZScKK2RfZ2V0cGVudD0nZGVmaW5lJworZF9nZXRwZ2lkPSdkZWZpbmUnCitkX2dldHBncnAyPSd1bmRlZicKK2RfZ2V0cGdycD0nZGVmaW5lJworZF9nZXRwcGlkPSdkZWZpbmUnCitkX2dldHByaW9yPSdkZWZpbmUnCitkX2dldHByb3RvYnluYW1lX3I9J2RlZmluZScKK2RfZ2V0cHJvdG9ieW51bWJlcl9yPSdkZWZpbmUnCitkX2dldHByb3RvZW50X3I9J2RlZmluZScKK2RfZ2V0cHJvdG9wcm90b3M9J2RlZmluZScKK2RfZ2V0cHJwd25hbT0ndW5kZWYnCitkX2dldHB3ZW50PSdkZWZpbmUnCitkX2dldHB3ZW50X3I9J2RlZmluZScKK2RfZ2V0cHduYW1fcj0nZGVmaW5lJworZF9nZXRwd3VpZF9yPSdkZWZpbmUnCitkX2dldHNieW5hbWU9J2RlZmluZScKK2RfZ2V0c2J5cG9ydD0nZGVmaW5lJworZF9nZXRzZW50PSdkZWZpbmUnCitkX2dldHNlcnZieW5hbWVfcj0nZGVmaW5lJworZF9nZXRzZXJ2Ynlwb3J0X3I9J2RlZmluZScKK2RfZ2V0c2VydmVudF9yPSdkZWZpbmUnCitkX2dldHNlcnZwcm90b3M9J2RlZmluZScKK2RfZ2V0c3BuYW09J2RlZmluZScKK2RfZ2V0c3BuYW1fcj0nZGVmaW5lJworZF9nZXR0aW1lb2Q9J2RlZmluZScKK2RfZ210aW1lNjQ9J3VuZGVmJworZF9nbXRpbWVfcj0nZGVmaW5lJworZF9nbnVsaWJjPSdkZWZpbmUnCitkX2dycGFzc3dkPSdkZWZpbmUnCitkX2hhc21udG9wdD0nZGVmaW5lJworZF9odG9ubD0nZGVmaW5lJworZF9oeXBvdD0nZGVmaW5lJworZF9pbG9nYj0nZGVmaW5lJworZF9pbG9nYmw9J2RlZmluZScKK2RfaW5jX3ZlcnNpb25fbGlzdD0ndW5kZWYnCitkX2luZGV4PSd1bmRlZicKK2RfaW5ldGF0b249J2RlZmluZScKK2RfaW5ldG50b3A9J2RlZmluZScKK2RfaW5ldHB0b249J2RlZmluZScKK2RfaW50NjRfdD0nZGVmaW5lJworZF9pcF9tcmVxPSdkZWZpbmUnCitkX2lwX21yZXFfc291cmNlPSdkZWZpbmUnCitkX2lwdjZfbXJlcT0nZGVmaW5lJworZF9pcHY2X21yZXFfc291cmNlPSd1bmRlZicKK2RfaXNhc2NpaT0nZGVmaW5lJworZF9pc2JsYW5rPSdkZWZpbmUnCitkX2lzZmluaXRlPSdkZWZpbmUnCitkX2lzZmluaXRlbD0ndW5kZWYnCitkX2lzaW5mPSdkZWZpbmUnCitkX2lzaW5mbD0nZGVmaW5lJworZF9pc2xlc3M9J3VuZGVmJworZF9pc25hbj0nZGVmaW5lJworZF9pc25hbmw9J2RlZmluZScKK2RfaXNub3JtYWw9J2RlZmluZScKK2RfajA9J2RlZmluZScKK2RfajBsPSdkZWZpbmUnCitkX2tpbGxwZz0nZGVmaW5lJworZF9sY19tb25ldGFyeV8yMDA4PSdkZWZpbmUnCitkX2xjaG93bj0nZGVmaW5lJworZF9sZGJsX2RpZz0nZGVmaW5lJworZF9sZGV4cGw9J2RlZmluZScKK2RfbGdhbW1hPSdkZWZpbmUnCitkX2xnYW1tYV9yPSdkZWZpbmUnCitkX2xpYm1fbGliX3ZlcnNpb249J2RlZmluZScKK2RfbGlibmFtZV91bmlxdWU9J3VuZGVmJworZF9saW5rPSdkZWZpbmUnCitkX2xscmludD0nZGVmaW5lJworZF9sbHJpbnRsPSdkZWZpbmUnCitkX2xscm91bmQ9J2RlZmluZScKK2RfbGxyb3VuZGw9J2RlZmluZScKK2RfbG9jYWx0aW1lNjQ9J3VuZGVmJworZF9sb2NhbHRpbWVfcj0nZGVmaW5lJworZF9sb2NhbHRpbWVfcl9uZWVkc190enNldD0nZGVmaW5lJworZF9sb2Njb252PSdkZWZpbmUnCitkX2xvY2tmPSdkZWZpbmUnCitkX2xvZzFwPSdkZWZpbmUnCitkX2xvZzI9J2RlZmluZScKK2RfbG9nYj0nZGVmaW5lJworZF9sb25nZGJsPSdkZWZpbmUnCitkX2xvbmdsb25nPSdkZWZpbmUnCitkX2xyaW50PSdkZWZpbmUnCitkX2xyaW50bD0nZGVmaW5lJworZF9scm91bmQ9J2RlZmluZScKK2RfbHJvdW5kbD0nZGVmaW5lJworZF9sc2Vla3Byb3RvPSdkZWZpbmUnCitkX2xzdGF0PSdkZWZpbmUnCitkX21hZHZpc2U9J2RlZmluZScKK2RfbWFsbG9jX2dvb2Rfc2l6ZT0ndW5kZWYnCitkX21hbGxvY19zaXplPSd1bmRlZicKK2RfbWJsZW49J2RlZmluZScKK2RfbWJzdG93Y3M9J2RlZmluZScKK2RfbWJ0b3djPSdkZWZpbmUnCitkX21lbWNocj0nZGVmaW5lJworZF9tZW1jbXA9J2RlZmluZScKK2RfbWVtY3B5PSdkZWZpbmUnCitkX21lbW1vdmU9J2RlZmluZScKK2RfbWVtc2V0PSdkZWZpbmUnCitkX21rZGlyPSdkZWZpbmUnCitkX21rZHRlbXA9J2RlZmluZScKK2RfbWtmaWZvPSdkZWZpbmUnCitkX21rc3RlbXA9J2RlZmluZScKK2RfbWtzdGVtcHM9J2RlZmluZScKK2RfbWt0aW1lNjQ9J3VuZGVmJworZF9ta3RpbWU9J2RlZmluZScKK2RfbW1hcD0nZGVmaW5lJworZF9tb2RmbD0nZGVmaW5lJworZF9tb2RmbF9wb3czMl9idWc9J3VuZGVmJworZF9tb2RmbHByb3RvPSdkZWZpbmUnCitkX21wcm90ZWN0PSdkZWZpbmUnCitkX21zZz0nZGVmaW5lJworZF9tc2dfY3RydW5jPSdkZWZpbmUnCitkX21zZ19kb250cm91dGU9J2RlZmluZScKK2RfbXNnX29vYj0nZGVmaW5lJworZF9tc2dfcGVlaz0nZGVmaW5lJworZF9tc2dfcHJveHk9J2RlZmluZScKK2RfbXNnY3RsPSdkZWZpbmUnCitkX21zZ2dldD0nZGVmaW5lJworZF9tc2doZHJfcz0nZGVmaW5lJworZF9tc2dyY3Y9J2RlZmluZScKK2RfbXNnc25kPSdkZWZpbmUnCitkX21zeW5jPSdkZWZpbmUnCitkX211bm1hcD0nZGVmaW5lJworZF9teW1hbGxvYz0ndW5kZWYnCitkX25hbj0nZGVmaW5lJworZF9uZGJtPSdkZWZpbmUnCitkX25kYm1faF91c2VzX3Byb3RvdHlwZXM9J3VuZGVmJworZF9uZWFyYnlpbnQ9J2RlZmluZScKK2RfbmV4dGFmdGVyPSdkZWZpbmUnCitkX25leHR0b3dhcmQ9J2RlZmluZScKK2RfbmljZT0nZGVmaW5lJworZF9ubF9sYW5naW5mbz0nZGVmaW5lJworZF9udl9wcmVzZXJ2ZXNfdXY9J3VuZGVmJworZF9udl96ZXJvX2lzX2FsbGJpdHNfemVybz0nZGVmaW5lJworZF9vZmY2NF90PSdkZWZpbmUnCitkX29sZF9wdGhyZWFkX2NyZWF0ZV9qb2luYWJsZT0ndW5kZWYnCitkX29sZHB0aHJlYWRzPSd1bmRlZicKK2Rfb2xkc29jaz0ndW5kZWYnCitkX29wZW4zPSdkZWZpbmUnCitkX3BhdGhjb25mPSdkZWZpbmUnCitkX3BhdXNlPSdkZWZpbmUnCitkX3Blcmxfb3RoZXJsaWJkaXJzPSdkZWZpbmUnCitkX3Bob3N0bmFtZT0ndW5kZWYnCitkX3BpcGU9J2RlZmluZScKK2RfcG9sbD0nZGVmaW5lJworZF9wb3J0YWJsZT0nZGVmaW5lJworZF9wcmN0bD0nZGVmaW5lJworZF9wcmN0bF9zZXRfbmFtZT0nZGVmaW5lJworZF9wcmludGZfZm9ybWF0X251bGw9J3VuZGVmJworZF9wcm9jc2VsZmV4ZT0nZGVmaW5lJworZF9wc2V1ZG9mb3JrPSd1bmRlZicKK2RfcHRocmVhZF9hdGZvcms9J2RlZmluZScKK2RfcHRocmVhZF9hdHRyX3NldHNjb3BlPSdkZWZpbmUnCitkX3B0aHJlYWRfeWllbGQ9J2RlZmluZScKK2RfcHRyZGlmZl90PSdkZWZpbmUnCitkX3B3YWdlPSd1bmRlZicKK2RfcHdjaGFuZ2U9J3VuZGVmJworZF9wd2NsYXNzPSd1bmRlZicKK2RfcHdjb21tZW50PSd1bmRlZicKK2RfcHdleHBpcmU9J3VuZGVmJworZF9wd2dlY29zPSdkZWZpbmUnCitkX3B3cGFzc3dkPSdkZWZpbmUnCitkX3B3cXVvdGE9J3VuZGVmJworZF9xZ2N2dD0nZGVmaW5lJworZF9xdWFkPSdkZWZpbmUnCitkX3JhbmRvbV9yPSdkZWZpbmUnCitkX3JlX2NvbXA9J3VuZGVmJworZF9yZWFkZGlyNjRfcj0nZGVmaW5lJworZF9yZWFkZGlyPSdkZWZpbmUnCitkX3JlYWRkaXJfcj0nZGVmaW5lJworZF9yZWFkbGluaz0nZGVmaW5lJworZF9yZWFkdj0nZGVmaW5lJworZF9yZWN2bXNnPSdkZWZpbmUnCitkX3JlZ2NtcD0ndW5kZWYnCitkX3JlZ2NvbXA9J2RlZmluZScKK2RfcmVtYWluZGVyPSdkZWZpbmUnCitkX3JlbXF1bz0nZGVmaW5lJworZF9yZW5hbWU9J2RlZmluZScKK2RfcmV3aW5kZGlyPSdkZWZpbmUnCitkX3JpbnQ9J2RlZmluZScKK2Rfcm1kaXI9J2RlZmluZScKK2Rfcm91bmQ9J2RlZmluZScKK2Rfc2FmZWJjcHk9J3VuZGVmJworZF9zYWZlbWNweT0ndW5kZWYnCitkX3NhbmVtY21wPSdkZWZpbmUnCitkX3Nicmtwcm90bz0nZGVmaW5lJworZF9zY2FsYm49J2RlZmluZScKK2Rfc2NhbGJubD0nZGVmaW5lJworZF9zY2hlZF95aWVsZD0nZGVmaW5lJworZF9zY21fcmlnaHRzPSdkZWZpbmUnCitkX3NlZWtkaXI9J2RlZmluZScKK2Rfc2VsZWN0PSdkZWZpbmUnCitkX3NlbT0nZGVmaW5lJworZF9zZW1jdGw9J2RlZmluZScKK2Rfc2VtY3RsX3NlbWlkX2RzPSdkZWZpbmUnCitkX3NlbWN0bF9zZW11bj0nZGVmaW5lJworZF9zZW1nZXQ9J2RlZmluZScKK2Rfc2Vtb3A9J2RlZmluZScKK2Rfc2VuZG1zZz0nZGVmaW5lJworZF9zZXRlZ2lkPSdkZWZpbmUnCitkX3NldGV1aWQ9J2RlZmluZScKK2Rfc2V0Z3JlbnQ9J2RlZmluZScKK2Rfc2V0Z3JlbnRfcj0ndW5kZWYnCitkX3NldGdycHM9J2RlZmluZScKK2Rfc2V0aGVudD0nZGVmaW5lJworZF9zZXRob3N0ZW50X3I9J3VuZGVmJworZF9zZXRpdGltZXI9J2RlZmluZScKK2Rfc2V0bGluZWJ1Zj0nZGVmaW5lJworZF9zZXRsb2NhbGU9J2RlZmluZScKK2Rfc2V0bG9jYWxlX3I9J3VuZGVmJworZF9zZXRuZW50PSdkZWZpbmUnCitkX3NldG5ldGVudF9yPSd1bmRlZicKK2Rfc2V0cGVudD0nZGVmaW5lJworZF9zZXRwZ2lkPSdkZWZpbmUnCitkX3NldHBncnAyPSd1bmRlZicKK2Rfc2V0cGdycD0nZGVmaW5lJworZF9zZXRwcmlvcj0nZGVmaW5lJworZF9zZXRwcm9jdGl0bGU9J3VuZGVmJworZF9zZXRwcm90b2VudF9yPSd1bmRlZicKK2Rfc2V0cHdlbnQ9J2RlZmluZScKK2Rfc2V0cHdlbnRfcj0ndW5kZWYnCitkX3NldHJlZ2lkPSdkZWZpbmUnCitkX3NldHJlc2dpZD0nZGVmaW5lJworZF9zZXRyZXN1aWQ9J2RlZmluZScKK2Rfc2V0cmV1aWQ9J2RlZmluZScKK2Rfc2V0cmdpZD0ndW5kZWYnCitkX3NldHJ1aWQ9J3VuZGVmJworZF9zZXRzZW50PSdkZWZpbmUnCitkX3NldHNlcnZlbnRfcj0ndW5kZWYnCitkX3NldHNpZD0nZGVmaW5lJworZF9zZXR2YnVmPSdkZWZpbmUnCitkX3NobT0nZGVmaW5lJworZF9zaG1hdD0nZGVmaW5lJworZF9zaG1hdHByb3RvdHlwZT0nZGVmaW5lJworZF9zaG1jdGw9J2RlZmluZScKK2Rfc2htZHQ9J2RlZmluZScKK2Rfc2htZ2V0PSdkZWZpbmUnCitkX3NpZ2FjdGlvbj0nZGVmaW5lJworZF9zaWduYml0PSdkZWZpbmUnCitkX3NpZ3Byb2NtYXNrPSdkZWZpbmUnCitkX3NpZ3NldGptcD0nZGVmaW5lJworZF9zaW42X3Njb3BlX2lkPSdkZWZpbmUnCitkX3NpdGVhcmNoPSdkZWZpbmUnCitkX3NucHJpbnRmPSdkZWZpbmUnCitkX3NvY2thZGRyX2luNj0nZGVmaW5lJworZF9zb2NrYWRkcl9zYV9sZW49J3VuZGVmJworZF9zb2NrYXRtYXJrPSdkZWZpbmUnCitkX3NvY2thdG1hcmtwcm90bz0nZGVmaW5lJworZF9zb2NrZXQ9J2RlZmluZScKK2Rfc29ja2xlbl90PSdkZWZpbmUnCitkX3NvY2twYWlyPSdkZWZpbmUnCitkX3NvY2tzNV9pbml0PSd1bmRlZicKK2Rfc3ByaW50Zl9yZXR1cm5zX3N0cmxlbj0nZGVmaW5lJworZF9zcXJ0bD0nZGVmaW5lJworZF9zcmFuZDQ4X3I9J2RlZmluZScKK2Rfc3JhbmRvbV9yPSdkZWZpbmUnCitkX3NyZXNncHJvdG89J2RlZmluZScKK2Rfc3Jlc3Vwcm90bz0nZGVmaW5lJworZF9zdGF0PSdkZWZpbmUnCitkX3N0YXRibGtzPSdkZWZpbmUnCitkX3N0YXRmc19mX2ZsYWdzPSdkZWZpbmUnCitkX3N0YXRmc19zPSdkZWZpbmUnCitkX3N0YXRpY19pbmxpbmU9J2RlZmluZScKK2Rfc3RhdHZmcz0nZGVmaW5lJworZF9zdGRpb19jbnRfbHZhbD0ndW5kZWYnCitkX3N0ZGlvX3B0cl9sdmFsPSd1bmRlZicKK2Rfc3RkaW9fcHRyX2x2YWxfbm9jaGFuZ2VfY250PSd1bmRlZicKK2Rfc3RkaW9fcHRyX2x2YWxfc2V0c19jbnQ9J3VuZGVmJworZF9zdGRpb19zdHJlYW1fYXJyYXk9J3VuZGVmJworZF9zdGRpb2Jhc2U9J3VuZGVmJworZF9zdGRzdGRpbz0ndW5kZWYnCitkX3N0cmNocj0nZGVmaW5lJworZF9zdHJjb2xsPSdkZWZpbmUnCitkX3N0cmN0Y3B5PSdkZWZpbmUnCitkX3N0cmVycm09J3N0cmVycm9yKGUpJworZF9zdHJlcnJvcj0nZGVmaW5lJworZF9zdHJlcnJvcl9yPSdkZWZpbmUnCitkX3N0cmZ0aW1lPSdkZWZpbmUnCitkX3N0cmxjYXQ9J3VuZGVmJworZF9zdHJsY3B5PSd1bmRlZicKK2Rfc3RydG9kPSdkZWZpbmUnCitkX3N0cnRvbD0nZGVmaW5lJworZF9zdHJ0b2xkPSdkZWZpbmUnCitkX3N0cnRvbGw9J2RlZmluZScKK2Rfc3RydG9xPSdkZWZpbmUnCitkX3N0cnRvdWw9J2RlZmluZScKK2Rfc3RydG91bGw9J2RlZmluZScKK2Rfc3RydG91cT0nZGVmaW5lJworZF9zdHJ4ZnJtPSdkZWZpbmUnCitkX3N1aWRzYWZlPSd1bmRlZicKK2Rfc3ltbGluaz0nZGVmaW5lJworZF9zeXNjYWxsPSdkZWZpbmUnCitkX3N5c2NhbGxwcm90bz0nZGVmaW5lJworZF9zeXNjb25mPSdkZWZpbmUnCitkX3N5c2VybmxzdD0nJworZF9zeXNlcnJsc3Q9J2RlZmluZScKK2Rfc3lzdGVtPSdkZWZpbmUnCitkX3RjZ2V0cGdycD0nZGVmaW5lJworZF90Y3NldHBncnA9J2RlZmluZScKK2RfdGVsbGRpcj0nZGVmaW5lJworZF90ZWxsZGlycHJvdG89J2RlZmluZScKK2RfdGdhbW1hPSdkZWZpbmUnCitkX3RpbWU9J2RlZmluZScKK2RfdGltZWdtPSdkZWZpbmUnCitkX3RpbWVzPSdkZWZpbmUnCitkX3RtX3RtX2dtdG9mZj0nZGVmaW5lJworZF90bV90bV96b25lPSdkZWZpbmUnCitkX3RtcG5hbV9yPSdkZWZpbmUnCitkX3RydW5jPSdkZWZpbmUnCitkX3RydW5jYXRlPSdkZWZpbmUnCitkX3RydW5jbD0nZGVmaW5lJworZF90dHluYW1lX3I9J2RlZmluZScKK2RfdHpuYW1lPSdkZWZpbmUnCitkX3UzMmFsaWduPSdkZWZpbmUnCitkX3VhbGFybT0nZGVmaW5lJworZF91bWFzaz0nZGVmaW5lJworZF91bmFtZT0nZGVmaW5lJworZF91bmlvbl9zZW11bj0ndW5kZWYnCitkX3Vub3JkZXJlZD0ndW5kZWYnCitkX3Vuc2V0ZW52PSdkZWZpbmUnCitkX3VzbGVlcD0nZGVmaW5lJworZF91c2xlZXBwcm90bz0nZGVmaW5lJworZF91c3RhdD0nZGVmaW5lJworZF92ZW5kb3JhcmNoPSdkZWZpbmUnCitkX3ZlbmRvcmJpbj0nZGVmaW5lJworZF92ZW5kb3JsaWI9J2RlZmluZScKK2RfdmVuZG9yc2NyaXB0PSdkZWZpbmUnCitkX3Zmb3JrPSd1bmRlZicKK2Rfdm9pZF9jbG9zZWRpcj0ndW5kZWYnCitkX3ZvaWRzaWc9J2RlZmluZScKK2Rfdm9pZHR0eT0nJworZF92b2xhdGlsZT0nZGVmaW5lJworZF92cHJpbnRmPSdkZWZpbmUnCitkX3ZzbnByaW50Zj0nZGVmaW5lJworZF93YWl0ND0nZGVmaW5lJworZF93YWl0cGlkPSdkZWZpbmUnCitkX3djc2NtcD0nZGVmaW5lJworZF93Y3N0b21icz0nZGVmaW5lJworZF93Y3N4ZnJtPSdkZWZpbmUnCitkX3djdG9tYj0nZGVmaW5lJworZF93cml0ZXY9J2RlZmluZScKK2RfeGVuaXg9J3VuZGVmJworZGF0ZT0nZGF0ZScKK2RiX2hhc2h0eXBlPSd1X2ludDMyX3QnCitkYl9wcmVmaXh0eXBlPSdzaXplX3QnCitkYl92ZXJzaW9uX21ham9yPScnCitkYl92ZXJzaW9uX21pbm9yPScnCitkYl92ZXJzaW9uX3BhdGNoPScnCitkaXJlbnRyeXR5cGU9J3N0cnVjdCBkaXJlbnQnCitkbGV4dD0nc28nCitkbHNyYz0nZGxfZGxvcGVuLnhzJworZG91Ymxla2luZD0nMycKK2RvdWJsZXNpemU9JzgnCitkcmFuZDAxPSdQZXJsX2RyYW5kNDgoKScKK2RyYW5kNDhfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfU1QnCitkdHJhY2U9JycKK2R5bmFtaWNfZXh0PSdCIENvbXByZXNzL1Jhdy9CemlwMiBDb21wcmVzcy9SYXcvWmxpYiBDd2QgRGF0YS9EdW1wZXIgRGV2ZWwvUFBQb3J0IERldmVsL1BlZWsgRGlnZXN0L01ENSBEaWdlc3QvU0hBIEVuY29kZSBGY250bCBGaWxlL0Rvc0dsb2IgRmlsZS9HbG9iIEZpbHRlci9VdGlsL0NhbGwgSGFzaC9VdGlsIEhhc2gvVXRpbC9GaWVsZEhhc2ggSTE4Ti9MYW5naW5mbyBJTyBJUEMvU3lzViBMaXN0L1V0aWwgTUlNRS9CYXNlNjQgTWF0aC9CaWdJbnQvRmFzdENhbGMgTkRCTV9GaWxlIE9EQk1fRmlsZSBPcGNvZGUgUE9TSVggUGVybElPL2VuY29kaW5nIFBlcmxJTy9tbWFwIFBlcmxJTy9zY2FsYXIgUGVybElPL3ZpYSBTREJNX0ZpbGUgU29ja2V0IFN0b3JhYmxlIFN5cy9Ib3N0bmFtZSBTeXMvU3lzbG9nIFRpZS9IYXNoL05hbWVkQ2FwdHVyZSBUaW1lL0hpUmVzIFRpbWUvUGllY2UgVW5pY29kZS9Db2xsYXRlIFhTL0FQSXRlc3QgWFMvVHlwZW1hcCBhcnliYXNlIGF0dHJpYnV0ZXMgbXJvIHJlIHRocmVhZHMgdGhyZWFkcy9zaGFyZWQnCitlYWdhaW49J0VBR0FJTicKK2ViY2RpYz0ndW5kZWYnCitlY2hvPSdlY2hvJworZWdyZXA9J2VncmVwJworZW1hY3M9JycKK2VuZGdyZW50X3JfcHJvdG89JzAnCitlbmRob3N0ZW50X3JfcHJvdG89JzAnCitlbmRuZXRlbnRfcl9wcm90bz0nMCcKK2VuZHByb3RvZW50X3JfcHJvdG89JzAnCitlbmRwd2VudF9yX3Byb3RvPScwJworZW5kc2VydmVudF9yX3Byb3RvPScwJworZXVuaWNlZml4PSc6JworZXhlX2V4dD0nJworZXhwcj0nZXhwcicKK2V4dGVuc2lvbnM9J0IgQ29tcHJlc3MvUmF3L0J6aXAyIENvbXByZXNzL1Jhdy9abGliIEN3ZCBEYXRhL0R1bXBlciBEZXZlbC9QUFBvcnQgRGV2ZWwvUGVlayBEaWdlc3QvTUQ1IERpZ2VzdC9TSEEgRW5jb2RlIEZjbnRsIEZpbGUvRG9zR2xvYiBGaWxlL0dsb2IgRmlsdGVyL1V0aWwvQ2FsbCBIYXNoL1V0aWwgSGFzaC9VdGlsL0ZpZWxkSGFzaCBJMThOL0xhbmdpbmZvIElPIElQQy9TeXNWIExpc3QvVXRpbCBNSU1FL0Jhc2U2NCBNYXRoL0JpZ0ludC9GYXN0Q2FsYyBOREJNX0ZpbGUgT0RCTV9GaWxlIE9wY29kZSBQT1NJWCBQZXJsSU8vZW5jb2RpbmcgUGVybElPL21tYXAgUGVybElPL3NjYWxhciBQZXJsSU8vdmlhIFNEQk1fRmlsZSBTb2NrZXQgU3RvcmFibGUgU3lzL0hvc3RuYW1lIFN5cy9TeXNsb2cgVGllL0hhc2gvTmFtZWRDYXB0dXJlIFRpbWUvSGlSZXMgVGltZS9QaWVjZSBVbmljb2RlL0NvbGxhdGUgWFMvQVBJdGVzdCBYUy9UeXBlbWFwIGFyeWJhc2UgYXR0cmlidXRlcyBtcm8gcmUgdGhyZWFkcyB0aHJlYWRzL3NoYXJlZCBBcmNoaXZlL1RhciBBdHRyaWJ1dGUvSGFuZGxlcnMgQXV0b0xvYWRlciBCL0RlYnVnIENQQU4gQ1BBTi9NZXRhIENQQU4vTWV0YS9SZXF1aXJlbWVudHMgQ1BBTi9NZXRhL1lBTUwgQ2FycCBDb25maWcvUGVybC9WIERldmVsL1NlbGZTdHViYmVyIERpZ2VzdCBEdW1wdmFsdWUgRW52IEVycm5vIEV4cG9ydGVyIEV4dFV0aWxzL0NCdWlsZGVyIEV4dFV0aWxzL0NvbW1hbmQgRXh0VXRpbHMvQ29uc3RhbnQgRXh0VXRpbHMvSW5zdGFsbCBFeHRVdGlscy9NYWtlTWFrZXIgRXh0VXRpbHMvTWFuaWZlc3QgRXh0VXRpbHMvTWluaXBlcmwgRXh0VXRpbHMvUGFyc2VYUyBGaWxlL0ZldGNoIEZpbGUvRmluZCBGaWxlL1BhdGggRmlsZS9UZW1wIEZpbGVDYWNoZSBGaWx0ZXIvU2ltcGxlIEdldG9wdC9Mb25nIEhUVFAvVGlueSBJMThOL0NvbGxhdGUgSTE4Ti9MYW5nVGFncyBJTy9Db21wcmVzcyBJTy9Tb2NrZXQvSVAgSU8vWmxpYiBJUEMvQ21kIElQQy9PcGVuMyBKU09OL1BQIExvY2FsZS9Db2RlcyBMb2NhbGUvTWFrZXRleHQgTG9jYWxlL01ha2V0ZXh0L1NpbXBsZSBNYXRoL0JpZ0ludCBNYXRoL0JpZ1JhdCBNYXRoL0NvbXBsZXggTWVtb2l6ZSBNb2R1bGUvQ29yZUxpc3QgTW9kdWxlL0xvYWQgTW9kdWxlL0xvYWQvQ29uZGl0aW9uYWwgTW9kdWxlL0xvYWRlZCBNb2R1bGUvTWV0YWRhdGEgTkVYVCBOZXQvUGluZyBQYXJhbXMvQ2hlY2sgUGFyc2UvQ1BBTi9NZXRhIFBlcmwvT1NUeXBlIFBlcmxJTy92aWEvUXVvdGVkUHJpbnQgUG9kL0NoZWNrZXIgUG9kL0VzY2FwZXMgUG9kL0Z1bmN0aW9ucyBQb2QvSHRtbCBQb2QvUGFyc2VyIFBvZC9QZXJsZG9jIFBvZC9TaW1wbGUgUG9kL1VzYWdlIFNhZmUgU2VhcmNoL0RpY3QgU2VsZkxvYWRlciBUZXJtL0FOU0lDb2xvciBUZXJtL0NhcCBUZXJtL0NvbXBsZXRlIFRlcm0vUmVhZExpbmUgVGVzdCBUZXN0L0hhcm5lc3MgVGVzdC9TaW1wbGUgVGV4dC9BYmJyZXYgVGV4dC9CYWxhbmNlZCBUZXh0L1BhcnNlV29yZHMgVGV4dC9UYWJzIFRocmVhZC9RdWV1ZSBUaHJlYWQvU2VtYXBob3JlIFRpZS9GaWxlIFRpZS9NZW1vaXplIFRpZS9SZWZIYXNoIFRpbWUvTG9jYWwgVW5pY29kZS9Ob3JtYWxpemUgWFNMb2FkZXIgYXV0b2RpZSBhdXRvdXNlIGJhc2UgYmlnbnVtIGNvbnN0YW50IGVuY29kaW5nL3dhcm5pbmdzIGV4cGVyaW1lbnRhbCBpZiBsaWIgbGlibmV0IHBhcmVudCBwZXJsZmFxIHBvZGxhdG9ycyB2ZXJzaW9uJworZXh0ZXJuX0M9J2V4dGVybicKK2V4dHJhcz0nJworZmZsdXNoTlVMTD0nZGVmaW5lJworZmZsdXNoYWxsPSd1bmRlZicKK2ZpbmQ9JycKK2ZpcnN0bWFrZWZpbGU9J21ha2VmaWxlJworZmxleD0nJworZnBvc3NpemU9JzE2JworZnBvc3R5cGU9J2Zwb3NfdCcKK2ZyZWV0eXBlPSd2b2lkJworZnJvbT0nOicKK2Z1bGxfYXI9J2FyJworZnVsbF9jc2g9J2NzaCcKK2Z1bGxfc2VkPSdzZWQnCitnY2NhbnNpcGVkYW50aWM9JycKK2djY29zYW5kdmVycz0nJworZ2NjdmVyc2lvbj0nNC45LjInCitnZXRncmVudF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9TQldSJworZ2V0Z3JnaWRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfVFNCV1InCitnZXRncm5hbV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9DU0JXUicKK2dldGhvc3RieWFkZHJfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfVHNJU0JXUkUnCitnZXRob3N0YnluYW1lX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0NTQldSRScKK2dldGhvc3RlbnRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfU0JXUkUnCitnZXRsb2dpbl9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9CVycKK2dldG5ldGJ5YWRkcl9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV91SVNCV1JFJworZ2V0bmV0YnluYW1lX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0NTQldSRScKK2dldG5ldGVudF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9TQldSRScKK2dldHByb3RvYnluYW1lX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0NTQldSJworZ2V0cHJvdG9ieW51bWJlcl9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9JU0JXUicKK2dldHByb3RvZW50X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1NCV1InCitnZXRwd2VudF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9TQldSJworZ2V0cHduYW1fcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfQ1NCV1InCitnZXRwd3VpZF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9UU0JXUicKK2dldHNlcnZieW5hbWVfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfQ0NTQldSJworZ2V0c2VydmJ5cG9ydF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9JQ1NCV1InCitnZXRzZXJ2ZW50X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1NCV1InCitnZXRzcG5hbV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9DU0JXUicKK2dpZGZvcm1hdD0nInUiJworZ2lkc2lnbj0nMScKK2dpZHNpemU9JzQnCitnaWR0eXBlPSdnaWRfdCcKK2dsaWJwdGg9J0BFWEVDUFJFRklYQC9zaGxpYiAgQEJBU0VMSUJESVJAIEBMSUJESVJAIEBMSUJESVJALzM4NiBAQkFTRUxJQkRJUkAzODYgQEVYRUNQUkVGSVhAL2Njc0BCQVNFTElCRElSQCBARVhFQ1BSRUZJWEAvdWNibGliIEBFWEVDUFJFRklYQC9sb2NhbEBCQVNFTElCRElSQCBAQkFTRUxJQkRJUkAgQExJQkRJUkAgQEVYRUNQUkVGSVhAL2xvY2FsQEJBU0VMSUJESVJAICcKK2dtYWtlPSdnbWFrZScKK2dtdGltZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fU19UUycKK2dudWxpYmNfdmVyc2lvbj0nMi4yMScKK2dyZXA9J2dyZXAnCitncm91cGNhdD0nY2F0IC9ldGMvZ3JvdXAnCitncm91cHN0eXBlPSdnaWRfdCcKK2d6aXA9J2d6aXAnCitoX2ZjbnRsPSdmYWxzZScKK2hfc3lzZmlsZT0ndHJ1ZScKK2hpbnQ9J3JlY29tbWVuZGVkJworaG9zdGNhdD0nY2F0IC9ldGMvaG9zdHMnCitob3N0Z2VuZXJhdGU9JycKK2hvc3Rvc25hbWU9JycKK2hvc3RwZXJsPScnCitodG1sMWRpcj0nICcKK2h0bWwxZGlyZXhwPScnCitodG1sM2Rpcj0nICcKK2h0bWwzZGlyZXhwPScnCitpMTZzaXplPScyJworaTE2dHlwZT0nc2hvcnQnCitpMzJzaXplPSc0JworaTMydHlwZT0naW50JworaTY0c2l6ZT0nOCcKK2k2NHR5cGU9J2xvbmcnCitpOHNpemU9JzEnCitpOHR5cGU9J3NpZ25lZCBjaGFyJworaV9hcnBhaW5ldD0nZGVmaW5lJworaV9hc3NlcnQ9J2RlZmluZScKK2lfYmZkPSdkZWZpbmUnCitpX2JzZGlvY3RsPScnCitpX2NyeXB0PSdkZWZpbmUnCitpX2RiPSd1bmRlZicKK2lfZGJtPSdkZWZpbmUnCitpX2RpcmVudD0nZGVmaW5lJworaV9kbGZjbj0nZGVmaW5lJworaV9leGVjaW5mbz0nZGVmaW5lJworaV9mY250bD0ndW5kZWYnCitpX2ZlbnY9J2RlZmluZScKK2lfZmxvYXQ9J2RlZmluZScKK2lfZnA9J3VuZGVmJworaV9mcF9jbGFzcz0ndW5kZWYnCitpX2dkYm09J3VuZGVmJworaV9nZGJtX25kYm09J3VuZGVmJworaV9nZGJtbmRibT0nZGVmaW5lJworaV9ncnA9J2RlZmluZScKK2lfaWVlZWZwPSd1bmRlZicKK2lfaW50dHlwZXM9J2RlZmluZScKK2lfbGFuZ2luZm89J2RlZmluZScKK2lfbGlidXRpbD0ndW5kZWYnCitpX2xpbWl0cz0nZGVmaW5lJworaV9sb2NhbGU9J2RlZmluZScKK2lfbWFjaGN0aHI9J3VuZGVmJworaV9tYWxsb2M9J2RlZmluZScKK2lfbWFsbG9jbWFsbG9jPSd1bmRlZicKK2lfbWF0aD0nZGVmaW5lJworaV9tZW1vcnk9J3VuZGVmJworaV9tbnRlbnQ9J2RlZmluZScKK2lfbmRibT0ndW5kZWYnCitpX25ldGRiPSdkZWZpbmUnCitpX25ldGVycm5vPSd1bmRlZicKK2lfbmV0aW5ldHRjcD0nZGVmaW5lJworaV9uaWluPSdkZWZpbmUnCitpX3BvbGw9J2RlZmluZScKK2lfcHJvdD0ndW5kZWYnCitpX3B0aHJlYWQ9J2RlZmluZScKK2lfcHdkPSdkZWZpbmUnCitpX3F1YWRtYXRoPSd1bmRlZicKK2lfcnBjc3ZjZGJtPSd1bmRlZicKK2lfc2d0dHk9J3VuZGVmJworaV9zaGFkb3c9J2RlZmluZScKK2lfc29ja3M9J3VuZGVmJworaV9zdGRhcmc9J2RlZmluZScKK2lfc3RkYm9vbD0nZGVmaW5lJworaV9zdGRkZWY9J2RlZmluZScKK2lfc3RkaW50PSdkZWZpbmUnCitpX3N0ZGxpYj0nZGVmaW5lJworaV9zdHJpbmc9J2RlZmluZScKK2lfc3VubWF0aD0ndW5kZWYnCitpX3N5c2FjY2Vzcz0ndW5kZWYnCitpX3N5c2Rpcj0nZGVmaW5lJworaV9zeXNmaWxlPSdkZWZpbmUnCitpX3N5c2ZpbGlvPSd1bmRlZicKK2lfc3lzaW49J3VuZGVmJworaV9zeXNpb2N0bD0nZGVmaW5lJworaV9zeXNsb2c9J2RlZmluZScKK2lfc3lzbW1hbj0nZGVmaW5lJworaV9zeXNtb2RlPSd1bmRlZicKK2lfc3lzbW91bnQ9J2RlZmluZScKK2lfc3lzbmRpcj0ndW5kZWYnCitpX3N5c3BhcmFtPSdkZWZpbmUnCitpX3N5c3BvbGw9J2RlZmluZScKK2lfc3lzcmVzcmM9J2RlZmluZScKK2lfc3lzc2VjcnQ9J3VuZGVmJworaV9zeXNzZWxjdD0nZGVmaW5lJworaV9zeXNzb2NraW89J3VuZGVmJworaV9zeXNzdGF0PSdkZWZpbmUnCitpX3N5c3N0YXRmcz0nZGVmaW5lJworaV9zeXNzdGF0dmZzPSdkZWZpbmUnCitpX3N5c3RpbWU9J2RlZmluZScKK2lfc3lzdGltZWs9J3VuZGVmJworaV9zeXN0aW1lcz0nZGVmaW5lJworaV9zeXN0eXBlcz0nZGVmaW5lJworaV9zeXN1aW89J2RlZmluZScKK2lfc3lzdW49J2RlZmluZScKK2lfc3lzdXRzbmFtZT0nZGVmaW5lJworaV9zeXN2ZnM9J2RlZmluZScKK2lfc3lzd2FpdD0nZGVmaW5lJworaV90ZXJtaW89J3VuZGVmJworaV90ZXJtaW9zPSdkZWZpbmUnCitpX3RpbWU9J2RlZmluZScKK2lfdW5pc3RkPSdkZWZpbmUnCitpX3VzdGF0PSdkZWZpbmUnCitpX3V0aW1lPSdkZWZpbmUnCitpX3ZhbHVlcz0nZGVmaW5lJworaV92YXJhcmdzPSd1bmRlZicKK2lfdmFyaGRyPSdzdGRhcmcuaCcKK2lfdmZvcms9J3VuZGVmJworaWdub3JlX3ZlcnNpb25lZF9zb2xpYnM9J3knCitpbmNfdmVyc2lvbl9saXN0PScgJworaW5jX3ZlcnNpb25fbGlzdF9pbml0PScwJworaW5jcGF0aD0nJworaW5ld3M9JycKK2luaXRpYWxpbnN0YWxsbG9jYXRpb249J0BVU1JCSU5AJworaW5zdGFsbGFyY2hsaWI9J0BMSUJESVJAL3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCitpbnN0YWxsYmluPSdAVVNSQklOQCcKK2luc3RhbGxodG1sMWRpcj0nJworaW5zdGFsbGh0bWwzZGlyPScnCitpbnN0YWxsbWFuMWRpcj0nJworaW5zdGFsbG1hbjNkaXI9JycKK2luc3RhbGxwcmVmaXg9J0BFWEVDUFJFRklYQCcKK2luc3RhbGxwcmVmaXhleHA9J0BFWEVDUFJFRklYQCcKK2luc3RhbGxwcml2bGliPSdATElCRElSQC9wZXJsLzUuMjIuMCcKK2luc3RhbGxzY3JpcHQ9J0BVU1JCSU5AJworaW5zdGFsbHNpdGVhcmNoPSdATElCRElSQC9wZXJsL3NpdGVfcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aScKK2luc3RhbGxzaXRlYmluPSdAVVNSQklOQCcKK2luc3RhbGxzaXRlaHRtbDFkaXI9JycKK2luc3RhbGxzaXRlaHRtbDNkaXI9JycKK2luc3RhbGxzaXRlbGliPSdATElCRElSQC9wZXJsL3NpdGVfcGVybC81LjIyLjAnCitpbnN0YWxsc2l0ZW1hbjFkaXI9JycKK2luc3RhbGxzaXRlbWFuM2Rpcj0nJworaW5zdGFsbHNpdGVzY3JpcHQ9J0BVU1JCSU5AJworaW5zdGFsbHN0eWxlPSdsaWIvcGVybCcKK2luc3RhbGx1c3JiaW5wZXJsPSdkZWZpbmUnCitpbnN0YWxsdmVuZG9yYXJjaD0nQExJQkRJUkAvcGVybC92ZW5kb3JfcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aScKK2luc3RhbGx2ZW5kb3JiaW49J0BVU1JCSU5AJworaW5zdGFsbHZlbmRvcmh0bWwxZGlyPScnCitpbnN0YWxsdmVuZG9yaHRtbDNkaXI9JycKK2luc3RhbGx2ZW5kb3JsaWI9J0BMSUJESVJAL3BlcmwvdmVuZG9yX3BlcmwvNS4yMi4wJworaW5zdGFsbHZlbmRvcm1hbjFkaXI9JycKK2luc3RhbGx2ZW5kb3JtYW4zZGlyPScnCitpbnN0YWxsdmVuZG9yc2NyaXB0PSdAVVNSQklOQCcKK2ludHNpemU9JzQnCitpc3N5bWxpbms9J3Rlc3QgLWgnCitpdmRmb3JtYXQ9JyJsZCInCitpdnNpemU9JzgnCitpdnR5cGU9J2xvbmcnCitrbm93bl9leHRlbnNpb25zPSdBcmNoaXZlL1RhciBBdHRyaWJ1dGUvSGFuZGxlcnMgQXV0b0xvYWRlciBCIEIvRGVidWcgQ1BBTiBDUEFOL01ldGEgQ1BBTi9NZXRhL1JlcXVpcmVtZW50cyBDUEFOL01ldGEvWUFNTCBDYXJwIENvbXByZXNzL1Jhdy9CemlwMiBDb21wcmVzcy9SYXcvWmxpYiBDb25maWcvUGVybC9WIEN3ZCBEQl9GaWxlIERhdGEvRHVtcGVyIERldmVsL1BQUG9ydCBEZXZlbC9QZWVrIERldmVsL1NlbGZTdHViYmVyIERpZ2VzdCBEaWdlc3QvTUQ1IERpZ2VzdC9TSEEgRHVtcHZhbHVlIEVuY29kZSBFbnYgRXJybm8gRXhwb3J0ZXIgRXh0VXRpbHMvQ0J1aWxkZXIgRXh0VXRpbHMvQ29tbWFuZCBFeHRVdGlscy9Db25zdGFudCBFeHRVdGlscy9JbnN0YWxsIEV4dFV0aWxzL01ha2VNYWtlciBFeHRVdGlscy9NYW5pZmVzdCBFeHRVdGlscy9NaW5pcGVybCBFeHRVdGlscy9QYXJzZVhTIEZjbnRsIEZpbGUvRG9zR2xvYiBGaWxlL0ZldGNoIEZpbGUvRmluZCBGaWxlL0dsb2IgRmlsZS9QYXRoIEZpbGUvVGVtcCBGaWxlQ2FjaGUgRmlsdGVyL1NpbXBsZSBGaWx0ZXIvVXRpbC9DYWxsIEdEQk1fRmlsZSBHZXRvcHQvTG9uZyBIVFRQL1RpbnkgSGFzaC9VdGlsIEhhc2gvVXRpbC9GaWVsZEhhc2ggSTE4Ti9Db2xsYXRlIEkxOE4vTGFuZ1RhZ3MgSTE4Ti9MYW5naW5mbyBJTyBJTy9Db21wcmVzcyBJTy9Tb2NrZXQvSVAgSU8vWmxpYiBJUEMvQ21kIElQQy9PcGVuMyBJUEMvU3lzViBKU09OL1BQIExpc3QvVXRpbCBMb2NhbGUvQ29kZXMgTG9jYWxlL01ha2V0ZXh0IExvY2FsZS9NYWtldGV4dC9TaW1wbGUgTUlNRS9CYXNlNjQgTWF0aC9CaWdJbnQgTWF0aC9CaWdJbnQvRmFzdENhbGMgTWF0aC9CaWdSYXQgTWF0aC9Db21wbGV4IE1lbW9pemUgTW9kdWxlL0NvcmVMaXN0IE1vZHVsZS9Mb2FkIE1vZHVsZS9Mb2FkL0NvbmRpdGlvbmFsIE1vZHVsZS9Mb2FkZWQgTW9kdWxlL01ldGFkYXRhIE5EQk1fRmlsZSBORVhUIE5ldC9QaW5nIE9EQk1fRmlsZSBPcGNvZGUgUE9TSVggUGFyYW1zL0NoZWNrIFBhcnNlL0NQQU4vTWV0YSBQZXJsL09TVHlwZSBQZXJsSU8vZW5jb2RpbmcgUGVybElPL21tYXAgUGVybElPL3NjYWxhciBQZXJsSU8vdmlhIFBlcmxJTy92aWEvUXVvdGVkUHJpbnQgUG9kL0NoZWNrZXIgUG9kL0VzY2FwZXMgUG9kL0Z1bmN0aW9ucyBQb2QvSHRtbCBQb2QvUGFyc2VyIFBvZC9QZXJsZG9jIFBvZC9TaW1wbGUgUG9kL1VzYWdlIFNEQk1fRmlsZSBTYWZlIFNlYXJjaC9EaWN0IFNlbGZMb2FkZXIgU29ja2V0IFN0b3JhYmxlIFN5cy9Ib3N0bmFtZSBTeXMvU3lzbG9nIFRlcm0vQU5TSUNvbG9yIFRlcm0vQ2FwIFRlcm0vQ29tcGxldGUgVGVybS9SZWFkTGluZSBUZXN0IFRlc3QvSGFybmVzcyBUZXN0L1NpbXBsZSBUZXh0L0FiYnJldiBUZXh0L0JhbGFuY2VkIFRleHQvUGFyc2VXb3JkcyBUZXh0L1RhYnMgVGhyZWFkL1F1ZXVlIFRocmVhZC9TZW1hcGhvcmUgVGllL0ZpbGUgVGllL0hhc2gvTmFtZWRDYXB0dXJlIFRpZS9NZW1vaXplIFRpZS9SZWZIYXNoIFRpbWUvSGlSZXMgVGltZS9Mb2NhbCBUaW1lL1BpZWNlIFVuaWNvZGUvQ29sbGF0ZSBVbmljb2RlL05vcm1hbGl6ZSBWTVMvRENMc3ltIFZNUy9GaWxlc3BlYyBWTVMvU3RkaW8gV2luMzIgV2luMzJBUEkvRmlsZSBXaW4zMkNPUkUgWFMvQVBJdGVzdCBYUy9UeXBlbWFwIFhTTG9hZGVyIGFyeWJhc2UgYXR0cmlidXRlcyBhdXRvZGllIGF1dG91c2UgYmFzZSBiaWdudW0gY29uc3RhbnQgZW5jb2Rpbmcvd2FybmluZ3MgZXhwZXJpbWVudGFsIGlmIGxpYiBsaWJuZXQgbXJvIHBhcmVudCBwZXJsZmFxIHBvZGxhdG9ycyByZSB0aHJlYWRzIHRocmVhZHMvc2hhcmVkIHZlcnNpb24gJwora3NoPScnCitsZD0nZ2NjJworbGRfY2FuX3NjcmlwdD0nZGVmaW5lJworbGRkbGZsYWdzPSctc2hhcmVkIC1PMicKK2xkZmxhZ3M9JycKK2xkZmxhZ3NfdXNlbGFyZ2VmaWxlcz0nJworbGRsaWJwdGhuYW1lPSdMRF9MSUJSQVJZX1BBVEgnCitsZXNzPSdsZXNzJworbGliX2V4dD0nLmEnCitsaWJjPSdsaWJjLTIuMjEuc28nCitsaWJwZXJsPSdsaWJwZXJsLnNvJworbGlicHRoPSdATElCRElSQCBAQkFTRUxJQkRJUkAnCitsaWJzPSctbHB0aHJlYWQgLWxuc2wgLWxnZGJtIC1sZGIgLWxkbCAtbG0gLWxjcnlwdCAtbHV0aWwgLWxjIC1sZ2RibV9jb21wYXQnCitsaWJzZGlycz0nIEBMSUJESVJAJworbGlic2ZpbGVzPScgbGlicHRocmVhZC5zbyBsaWJuc2wuc28gbGliZ2RibS5zbyBsaWJkYi5zbyBsaWJkbC5zbyBsaWJtLnNvIGxpYmNyeXB0LnNvIGxpYnV0aWwuc28gbGliYy5zbyBsaWJnZGJtX2NvbXBhdC5zbycKK2xpYnNmb3VuZD0nIEBMSUJESVJAL2xpYnB0aHJlYWQuc28gQExJQkRJUkAvbGlibnNsLnNvIEBMSUJESVJAL2xpYmdkYm0uc28gQExJQkRJUkAvbGliZGIuc28gQExJQkRJUkAvbGliZGwuc28gQExJQkRJUkAvbGlibS5zbyBATElCRElSQC9saWJjcnlwdC5zbyBATElCRElSQC9saWJ1dGlsLnNvIEBMSUJESVJAL2xpYmMuc28gQExJQkRJUkAvbGliZ2RibV9jb21wYXQuc28nCitsaWJzcGF0aD0nIEBMSUJESVJAIEBCQVNFTElCRElSQCcKK2xpYnN3YW50ZWQ9J2NsIHB0aHJlYWQgc29ja2V0IGluZXQgbnNsIG5tIGdkYm0gZGJtIGRiIG1hbGxvYyBkbCBsZCBzdW4gbSBjcnlwdCBzZWMgdXRpbCBjIGNwb3NpeCBwb3NpeCB1Y2IgQlNEIGdkYm1fY29tcGF0JworbGlic3dhbnRlZF91c2VsYXJnZWZpbGVzPScnCitsaW5lPScnCitsaW50PScnCitsa2ZsYWdzPScnCitsbj0nbG4nCitsbnM9Jy9iaW4vbG4gLXMnCitsb2NhbHRpbWVfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX1NfVFMnCitsb2NpbmNwdGg9J0BFWEVDUFJFRklYQC9sb2NhbC9pbmNsdWRlIC9vcHQvbG9jYWwvaW5jbHVkZSBARVhFQ1BSRUZJWEAvZ251L2luY2x1ZGUgL29wdC9nbnUvaW5jbHVkZSBARVhFQ1BSRUZJWEAvR05VL2luY2x1ZGUgL29wdC9HTlUvaW5jbHVkZScKK2xvY2xpYnB0aD0nQEVYRUNQUkVGSVhAL2xvY2FsQEJBU0VMSUJESVJAIC9vcHQvbG9jYWxAQkFTRUxJQkRJUkAgQEVYRUNQUkVGSVhAL2dudUBCQVNFTElCRElSQCAvb3B0L2dudUBCQVNFTElCRElSQCBARVhFQ1BSRUZJWEAvR05VQEJBU0VMSUJESVJAIC9vcHQvR05VQEJBU0VMSUJESVJAJworbG9uZ2RibGtpbmQ9JzMnCitsb25nZGJsc2l6ZT0nMTYnCitsb25nbG9uZ3NpemU9JzgnCitsb25nc2l6ZT0nOCcKK2xwPScnCitscHI9JycKK2xzPSdscycKK2xzZWVrc2l6ZT0nOCcKK2xzZWVrdHlwZT0nb2ZmX3QnCittYWlsPScnCittYWlseD0nJworbWFrZT0nbWFrZScKK21ha2Vfc2V0X21ha2U9JyMnCittYWxsb2NvYmo9JycKK21hbGxvY3NyYz0nJworbWFsbG9jdHlwZT0ndm9pZCAqJworbWFuMWRpcj0nICcKK21hbjFkaXJleHA9JycKK21hbjFleHQ9JzAnCittYW4zZGlyPScgJworbWFuM2RpcmV4cD0nJworbWFuM2V4dD0nMCcKK21pcHNfdHlwZT0nJworbWlzdHJ1c3RubT0nJworbWtkaXI9J21rZGlyJworbW1hcHR5cGU9J3ZvaWQgKicKK21vZGV0eXBlPSdtb2RlX3QnCittb3JlPSdtb3JlJworbXVsdGlhcmNoPSd1bmRlZicKK212PScnCitteWFyY2huYW1lPSdAQVJDSEAnCitteWRvbWFpbj0nLmxvY2FsZG9tYWluJworbXlob3N0bmFtZT0nbG9jYWxob3N0JworbXl1bmFtZT0nbGludXggcWVtdXg4Ni02NCAzLjE5LjUteW9jdG8tc3RhbmRhcmQgIzEgc21wIHByZWVtcHQgdHVlIGp1biAxNiAwMDoyODoxNyBwZHQgMjAxNSB4ODZfNjQgZ251bGludXggJworbj0nLW4nCituZWVkX3ZhX2NvcHk9J2RlZmluZScKK25ldGRiX2hsZW5fdHlwZT0nc2l6ZV90JworbmV0ZGJfaG9zdF90eXBlPSdjaGFyIConCituZXRkYl9uYW1lX3R5cGU9J2NvbnN0IGNoYXIgKicKK25ldGRiX25ldF90eXBlPSdpbl9hZGRyX3QnCitubT0nbm0nCitubV9vcHQ9JycKK25tX3NvX29wdD0nLS1keW5hbWljJworbm9ueHNfZXh0PSdBcmNoaXZlL1RhciBBdHRyaWJ1dGUvSGFuZGxlcnMgQXV0b0xvYWRlciBCL0RlYnVnIENQQU4gQ1BBTi9NZXRhIENQQU4vTWV0YS9SZXF1aXJlbWVudHMgQ1BBTi9NZXRhL1lBTUwgQ2FycCBDb25maWcvUGVybC9WIERldmVsL1NlbGZTdHViYmVyIERpZ2VzdCBEdW1wdmFsdWUgRW52IEVycm5vIEV4cG9ydGVyIEV4dFV0aWxzL0NCdWlsZGVyIEV4dFV0aWxzL0NvbW1hbmQgRXh0VXRpbHMvQ29uc3RhbnQgRXh0VXRpbHMvSW5zdGFsbCBFeHRVdGlscy9NYWtlTWFrZXIgRXh0VXRpbHMvTWFuaWZlc3QgRXh0VXRpbHMvTWluaXBlcmwgRXh0VXRpbHMvUGFyc2VYUyBGaWxlL0ZldGNoIEZpbGUvRmluZCBGaWxlL1BhdGggRmlsZS9UZW1wIEZpbGVDYWNoZSBGaWx0ZXIvU2ltcGxlIEdldG9wdC9Mb25nIEhUVFAvVGlueSBJMThOL0NvbGxhdGUgSTE4Ti9MYW5nVGFncyBJTy9Db21wcmVzcyBJTy9Tb2NrZXQvSVAgSU8vWmxpYiBJUEMvQ21kIElQQy9PcGVuMyBKU09OL1BQIExvY2FsZS9Db2RlcyBMb2NhbGUvTWFrZXRleHQgTG9jYWxlL01ha2V0ZXh0L1NpbXBsZSBNYXRoL0JpZ0ludCBNYXRoL0JpZ1JhdCBNYXRoL0NvbXBsZXggTWVtb2l6ZSBNb2R1bGUvQ29yZUxpc3QgTW9kdWxlL0xvYWQgTW9kdWxlL0xvYWQvQ29uZGl0aW9uYWwgTW9kdWxlL0xvYWRlZCBNb2R1bGUvTWV0YWRhdGEgTkVYVCBOZXQvUGluZyBQYXJhbXMvQ2hlY2sgUGFyc2UvQ1BBTi9NZXRhIFBlcmwvT1NUeXBlIFBlcmxJTy92aWEvUXVvdGVkUHJpbnQgUG9kL0NoZWNrZXIgUG9kL0VzY2FwZXMgUG9kL0Z1bmN0aW9ucyBQb2QvSHRtbCBQb2QvUGFyc2VyIFBvZC9QZXJsZG9jIFBvZC9TaW1wbGUgUG9kL1VzYWdlIFNhZmUgU2VhcmNoL0RpY3QgU2VsZkxvYWRlciBUZXJtL0FOU0lDb2xvciBUZXJtL0NhcCBUZXJtL0NvbXBsZXRlIFRlcm0vUmVhZExpbmUgVGVzdCBUZXN0L0hhcm5lc3MgVGVzdC9TaW1wbGUgVGV4dC9BYmJyZXYgVGV4dC9CYWxhbmNlZCBUZXh0L1BhcnNlV29yZHMgVGV4dC9UYWJzIFRocmVhZC9RdWV1ZSBUaHJlYWQvU2VtYXBob3JlIFRpZS9GaWxlIFRpZS9NZW1vaXplIFRpZS9SZWZIYXNoIFRpbWUvTG9jYWwgVW5pY29kZS9Ob3JtYWxpemUgWFNMb2FkZXIgYXV0b2RpZSBhdXRvdXNlIGJhc2UgYmlnbnVtIGNvbnN0YW50IGVuY29kaW5nL3dhcm5pbmdzIGV4cGVyaW1lbnRhbCBpZiBsaWIgbGlibmV0IHBhcmVudCBwZXJsZmFxIHBvZGxhdG9ycyB2ZXJzaW9uJworbnJvZmY9J25yb2ZmJworbnZFVWZvcm1hdD0nIkUiJworbnZGVWZvcm1hdD0nIkYiJworbnZHVWZvcm1hdD0nIkciJworbnZfb3ZlcmZsb3dzX2ludGVnZXJzX2F0PScyNTYuMCoyNTYuMCoyNTYuMCoyNTYuMCoyNTYuMCoyNTYuMCoyLjAqMi4wKjIuMCoyLjAqMi4wJworbnZfcHJlc2VydmVzX3V2X2JpdHM9JzUzJworbnZlZm9ybWF0PSciZSInCitudmZmb3JtYXQ9JyJmIicKK252Z2Zvcm1hdD0nImciJworbnZzaXplPSc4JworbnZ0eXBlPSdkb3VibGUnCitvX25vbmJsb2NrPSdPX05PTkJMT0NLJworb2JqX2V4dD0nLm8nCitvbGRfcHRocmVhZF9jcmVhdGVfam9pbmFibGU9JycKK29wdGltaXplPSctTzInCitvcmRlcmxpYj0nZmFsc2UnCitvc25hbWU9J2xpbnV4Jworb3N2ZXJzPSczLjE5LjUteW9jdG8tc3RhbmRhcmQnCitvdGhlcmxpYmRpcnM9J0BMSUJESVJAL3BlcmwvNS4yMi4wJworcGFja2FnZT0ncGVybCcKK3BhZ2VyPScvdXNyL2Jpbi9sZXNzIC1pc3InCitwYXNzY2F0PSdjYXQgL2V0Yy9wYXNzd2QnCitwYXRjaGxldmVsPScyMicKK3BhdGhfc2VwPSc6JworcGVybDU9J0BVU1JCSU5AL3BlcmwnCitwZXJsPSdwZXJsJworcGVybF9wYXRjaGxldmVsPScnCitwZXJsX3N0YXRpY19pbmxpbmU9J3N0YXRpYyBfX2lubGluZV9fJworcGVybGFkbWluPSdyb290QGxvY2FsaG9zdCcKK3BlcmxsaWJzPSctbHB0aHJlYWQgLWxuc2wgLWxkbCAtbG0gLWxjcnlwdCAtbHV0aWwgLWxjJworcGVybHBhdGg9J0BVU1JCSU5AL3BlcmwnCitwZz0ncGcnCitwaG9zdG5hbWU9JycKK3BpZHR5cGU9J3BpZF90JworcGxpYnB0aD0nQExJQkRJUkAgQEJBU0VMSUJESVJAJworcG1ha2U9JycKK3ByPScnCitwcmVmaXg9J0BFWEVDUFJFRklYQCcKK3ByZWZpeGV4cD0nQEVYRUNQUkVGSVhAJworcHJpdmxpYj0nQExJQkRJUkAvcGVybC81LjIyLjAnCitwcml2bGliZXhwPSdATElCRElSQC9wZXJsLzUuMjIuMCcKK3Byb2NzZWxmZXhlPSciL3Byb2Mvc2VsZi9leGUiJworcHJvdG90eXBlPSdkZWZpbmUnCitwdHJzaXplPSc4JworcXVhZGtpbmQ9JzInCitxdWFkdHlwZT0nbG9uZycKK3JhbmRiaXRzPSc0OCcKK3JhbmRmdW5jPSdQZXJsX2RyYW5kNDgnCityYW5kb21fcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfU3QnCityYW5kc2VlZHR5cGU9J1UzMicKK3JhbmxpYj0nOicKK3JkX25vZGF0YT0nLTEnCityZWFkZGlyNjRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfVFNSJworcmVhZGRpcl9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9UU1InCityZXZpc2lvbj0nNScKK3JtPSdybScKK3JtX3RyeT0nL2Jpbi9ybSAtZiB0cnkgdHJ5IGEub3V0IC5vdXQgdHJ5LltjaG9dIHRyeS4ubyBjb3JlIGNvcmUudHJ5KiB0cnkuY29yZSonCitybWFpbD0nJworcnVuPScnCitydW5ubT0nZmFsc2UnCitzR01USU1FX21heD0nNjc3NjgwMzYxOTE2NzY3OTknCitzR01USU1FX21pbj0nLTYyMTY3MjE5MjAwJworc0xPQ0FMVElNRV9tYXg9JzY3NzY4MDM2MTkxNjc2Nzk5Jworc0xPQ0FMVElNRV9taW49Jy02MjE2NzIxOTIwMCcKK3NQUklFVWxkYmw9JyJMRSInCitzUFJJRlVsZGJsPSciTEYiJworc1BSSUdVbGRibD0nIkxHIicKK3NQUklYVTY0PScibFgiJworc1BSSWQ2ND0nImxkIicKK3NQUkllbGRibD0nIkxlIicKK3NQUklmbGRibD0nIkxmIicKK3NQUklnbGRibD0nIkxnIicKK3NQUklpNjQ9JyJsaSInCitzUFJJbzY0PScibG8iJworc1BSSXU2ND0nImx1IicKK3NQUkl4NjQ9JyJseCInCitzU0NOZmxkYmw9JyJMZiInCitzY2hlZF95aWVsZD0nc2NoZWRfeWllbGQoKScKK3NjcmlwdGRpcj0nQFVTUkJJTkAnCitzY3JpcHRkaXJleHA9J0BVU1JCSU5AJworc2VkPSdzZWQnCitzZWVkZnVuYz0nUGVybF9kcmFuZDQ4X2luaXQnCitzZWxlY3RtaW5iaXRzPSc2NCcKK3NlbGVjdHR5cGU9J2ZkX3NldCAqJworc2VuZG1haWw9JycKK3NldGdyZW50X3JfcHJvdG89JzAnCitzZXRob3N0ZW50X3JfcHJvdG89JzAnCitzZXRsb2NhbGVfcl9wcm90bz0nMCcKK3NldG5ldGVudF9yX3Byb3RvPScwJworc2V0cHJvdG9lbnRfcl9wcm90bz0nMCcKK3NldHB3ZW50X3JfcHJvdG89JzAnCitzZXRzZXJ2ZW50X3JfcHJvdG89JzAnCitzaD0nL2Jpbi9zaCcKK3NoYXI9JycKK3NoYXJwYmFuZz0nIyEnCitzaG1hdHR5cGU9J3ZvaWQgKicKK3Nob3J0c2l6ZT0nMicKK3NocnBlbnY9JycKK3Noc2hhcnA9J3RydWUnCitzaWdfY291bnQ9JzY1Jworc2lnX25hbWU9J1pFUk8gSFVQIElOVCBRVUlUIElMTCBUUkFQIEFCUlQgQlVTIEZQRSBLSUxMIFVTUjEgU0VHViBVU1IyIFBJUEUgQUxSTSBURVJNIFNUS0ZMVCBDSExEIENPTlQgU1RPUCBUU1RQIFRUSU4gVFRPVSBVUkcgWENQVSBYRlNaIFZUQUxSTSBQUk9GIFdJTkNIIElPIFBXUiBTWVMgTlVNMzIgTlVNMzMgUlRNSU4gTlVNMzUgTlVNMzYgTlVNMzcgTlVNMzggTlVNMzkgTlVNNDAgTlVNNDEgTlVNNDIgTlVNNDMgTlVNNDQgTlVNNDUgTlVNNDYgTlVNNDcgTlVNNDggTlVNNDkgTlVNNTAgTlVNNTEgTlVNNTIgTlVNNTMgTlVNNTQgTlVNNTUgTlVNNTYgTlVNNTcgTlVNNTggTlVNNTkgTlVNNjAgTlVNNjEgTlVNNjIgTlVNNjMgUlRNQVggSU9UIENMRCBQT0xMIFVOVVNFRCAnCitzaWdfbmFtZV9pbml0PSciWkVSTyIsICJIVVAiLCAiSU5UIiwgIlFVSVQiLCAiSUxMIiwgIlRSQVAiLCAiQUJSVCIsICJCVVMiLCAiRlBFIiwgIktJTEwiLCAiVVNSMSIsICJTRUdWIiwgIlVTUjIiLCAiUElQRSIsICJBTFJNIiwgIlRFUk0iLCAiU1RLRkxUIiwgIkNITEQiLCAiQ09OVCIsICJTVE9QIiwgIlRTVFAiLCAiVFRJTiIsICJUVE9VIiwgIlVSRyIsICJYQ1BVIiwgIlhGU1oiLCAiVlRBTFJNIiwgIlBST0YiLCAiV0lOQ0giLCAiSU8iLCAiUFdSIiwgIlNZUyIsICJOVU0zMiIsICJOVU0zMyIsICJSVE1JTiIsICJOVU0zNSIsICJOVU0zNiIsICJOVU0zNyIsICJOVU0zOCIsICJOVU0zOSIsICJOVU00MCIsICJOVU00MSIsICJOVU00MiIsICJOVU00MyIsICJOVU00NCIsICJOVU00NSIsICJOVU00NiIsICJOVU00NyIsICJOVU00OCIsICJOVU00OSIsICJOVU01MCIsICJOVU01MSIsICJOVU01MiIsICJOVU01MyIsICJOVU01NCIsICJOVU01NSIsICJOVU01NiIsICJOVU01NyIsICJOVU01OCIsICJOVU01OSIsICJOVU02MCIsICJOVU02MSIsICJOVU02MiIsICJOVU02MyIsICJSVE1BWCIsICJJT1QiLCAiQ0xEIiwgIlBPTEwiLCAiVU5VU0VEIiwgMCcKK3NpZ19udW09JzAgMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcgMzggMzkgNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcgNDggNDkgNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcgNTggNTkgNjAgNjEgNjIgNjMgNjQgNiAxNyAyOSAzMSAnCitzaWdfbnVtX2luaXQ9JzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2LCAxNywgMjksIDMxLCAwJworc2lnX3NpemU9JzY5Jworc2lnbmFsX3Q9J3ZvaWQnCitzaXRlYXJjaD0nQExJQkRJUkAvcGVybC9zaXRlX3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCitzaXRlYXJjaGV4cD0nQExJQkRJUkAvcGVybC9zaXRlX3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCitzaXRlYmluPSdAVVNSQklOQCcKK3NpdGViaW5leHA9J0BVU1JCSU5AJworc2l0ZWh0bWwxZGlyPScnCitzaXRlaHRtbDFkaXJleHA9JycKK3NpdGVodG1sM2Rpcj0nJworc2l0ZWh0bWwzZGlyZXhwPScnCitzaXRlbGliPSdATElCRElSQC9wZXJsL3NpdGVfcGVybC81LjIyLjAnCitzaXRlbGliX3N0ZW09J0BMSUJESVJAL3Blcmwvc2l0ZV9wZXJsJworc2l0ZWxpYmV4cD0nQExJQkRJUkAvcGVybC9zaXRlX3BlcmwvNS4yMi4wJworc2l0ZW1hbjFkaXI9JycKK3NpdGVtYW4xZGlyZXhwPScnCitzaXRlbWFuM2Rpcj0nJworc2l0ZW1hbjNkaXJleHA9JycKK3NpdGVwcmVmaXg9J0BFWEVDUFJFRklYQCcKK3NpdGVwcmVmaXhleHA9J0BFWEVDUFJFRklYQCcKK3NpdGVzY3JpcHQ9J0BVU1JCSU5AJworc2l0ZXNjcmlwdGV4cD0nQFVTUkJJTkAnCitzaXplc2l6ZT0nOCcKK3NpemV0eXBlPSdzaXplX3QnCitzbGVlcD0nJworc21haWw9JycKK3NvPSdzbycKK3NvY2tldGhkcj0nJworc29ja2V0bGliPScnCitzb2Nrc2l6ZXR5cGU9J3NvY2tsZW5fdCcKK3NvcnQ9J3NvcnQnCitzcGFja2FnZT0nUGVybDUnCitzcGl0c2hlbGw9J2NhdCcKK3NyYW5kNDhfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfTFMnCitzcmFuZG9tX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1RTJworc3JjPScuJworc3NpemV0eXBlPSdzc2l6ZV90Jworc3RfaW5vX3NpZ249JzEnCitzdF9pbm9fc2l6ZT0nOCcKK3N0YXJ0cGVybD0nIyFAVVNSQklOQC9wZXJsJworc3RhcnRzaD0nIyEvYmluL3NoJworc3RhdGljX2V4dD0nICcKK3N0ZGNoYXI9J2NoYXInCitzdGRpb19iYXNlPScoKGZwKS0+X0lPX3JlYWRfYmFzZSknCitzdGRpb19idWZzaXo9JygoZnApLT5fSU9fcmVhZF9lbmQgLSAoZnApLT5fSU9fcmVhZF9iYXNlKScKK3N0ZGlvX2NudD0nKChmcCktPl9JT19yZWFkX2VuZCAtIChmcCktPl9JT19yZWFkX3B0ciknCitzdGRpb19maWxidWY9JycKK3N0ZGlvX3B0cj0nKChmcCktPl9JT19yZWFkX3B0ciknCitzdGRpb19zdHJlYW1fYXJyYXk9JycKK3N0cmVycm9yX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19CX0lCVycKK3N0cmluZ3M9J0BJTkNMVURFRElSQC9zdHJpbmcuaCcKK3N1Ym1pdD0nJworc3VidmVyc2lvbj0nMCcKK3N5c21hbj0nQEVYRUNQUkVGSVhAL3NoYXJlL21hbi9tYW4xJworc3lzcm9vdD0nJwordGFpbD0nJwordGFyPScnCit0YXJnZXRhcmNoPScnCit0YXJnZXRkaXI9JycKK3RhcmdldGVudj0nJwordGFyZ2V0aG9zdD0nJwordGFyZ2V0bWtkaXI9JycKK3RhcmdldHBvcnQ9JycKK3RhcmdldHNoPScvYmluL3NoJwordGJsPScnCit0ZWU9JycKK3Rlc3Q9J3Rlc3QnCit0aW1laW5jbD0nQElOQ0xVREVESVJAL3N5cy90aW1lLmggQElOQ0xVREVESVJAL3RpbWUuaCAnCit0aW1ldHlwZT0ndGltZV90JwordG1wbmFtX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19CX0InCit0bz0nOicKK3RvdWNoPSd0b3VjaCcKK3RyPSd0cicKK3Rybmw9J1xuJwordHJvZmY9JycKK3R0eW5hbWVfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfSUJXJwordTE2c2l6ZT0nMicKK3UxNnR5cGU9J3Vuc2lnbmVkIHNob3J0JwordTMyc2l6ZT0nNCcKK3UzMnR5cGU9J3Vuc2lnbmVkIGludCcKK3U2NHNpemU9JzgnCit1NjR0eXBlPSd1bnNpZ25lZCBsb25nJwordThzaXplPScxJwordTh0eXBlPSd1bnNpZ25lZCBjaGFyJwordWlkZm9ybWF0PScidSInCit1aWRzaWduPScxJwordWlkc2l6ZT0nNCcKK3VpZHR5cGU9J3VpZF90JwordW5hbWU9J3VuYW1lJwordW5pcT0ndW5pcScKK3VxdWFkdHlwZT0ndW5zaWduZWQgbG9uZycKK3VzZTUwMDV0aHJlYWRzPSd1bmRlZicKK3VzZTY0Yml0YWxsPSdkZWZpbmUnCit1c2U2NGJpdGludD0nZGVmaW5lJwordXNlY2JhY2t0cmFjZT0ndW5kZWYnCit1c2Vjcm9zc2NvbXBpbGU9J2RlZmluZScKK3VzZWRldmVsPSd1bmRlZicKK3VzZWRsPSdkZWZpbmUnCit1c2VkdHJhY2U9J3VuZGVmJwordXNlZmFzdHN0ZGlvPSd1bmRlZicKK3VzZWl0aHJlYWRzPSdkZWZpbmUnCit1c2VrZXJucHJvY3BhdGhuYW1lPSd1bmRlZicKK3VzZWxhcmdlZmlsZXM9J2RlZmluZScKK3VzZWxvbmdkb3VibGU9J3VuZGVmJwordXNlbWFsbG9jd3JhcD0nZGVmaW5lJwordXNlbW9yZWJpdHM9J3VuZGVmJwordXNlbXVsdGlwbGljaXR5PSdkZWZpbmUnCit1c2VteW1hbGxvYz0nbicKK3VzZW5tPSdmYWxzZScKK3VzZW5zZ2V0ZXhlY3V0YWJsZXBhdGg9J3VuZGVmJwordXNlb3Bjb2RlPSd0cnVlJwordXNlcGVybGlvPSdkZWZpbmUnCit1c2Vwb3NpeD0ndHJ1ZScKK3VzZXF1YWRtYXRoPSd1bmRlZicKK3VzZXJlZW50cmFudD0ndW5kZWYnCit1c2VyZWxvY2F0YWJsZWluYz0ndW5kZWYnCit1c2VzaHJwbGliPSd0cnVlJwordXNlc2l0ZWN1c3RvbWl6ZT0ndW5kZWYnCit1c2Vzb2Nrcz0ndW5kZWYnCit1c2V0aHJlYWRzPSdkZWZpbmUnCit1c2V2ZW5kb3JwcmVmaXg9J2RlZmluZScKK3VzZXZlcnNpb25lZGFyY2huYW1lPSd1bmRlZicKK3VzZXZmb3JrPSdmYWxzZScKK3VzcmluYz0nQElOQ0xVREVESVJAJwordXVuYW1lPScnCit1dlhVZm9ybWF0PScibFgiJwordXZvZm9ybWF0PScibG8iJwordXZzaXplPSc4JwordXZ0eXBlPSd1bnNpZ25lZCBsb25nJwordXZ1Zm9ybWF0PScibHUiJwordXZ4Zm9ybWF0PScibHgiJwordmFwcm90bz0nZGVmaW5lJwordmVuZG9yYXJjaD0nQExJQkRJUkAvcGVybC92ZW5kb3JfcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aScKK3ZlbmRvcmFyY2hleHA9J0BMSUJESVJAL3BlcmwvdmVuZG9yX3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCit2ZW5kb3JiaW49J0BVU1JCSU5AJwordmVuZG9yYmluZXhwPSdAVVNSQklOQCcKK3ZlbmRvcmh0bWwxZGlyPScgJwordmVuZG9yaHRtbDFkaXJleHA9JycKK3ZlbmRvcmh0bWwzZGlyPScgJwordmVuZG9yaHRtbDNkaXJleHA9JycKK3ZlbmRvcmxpYj0nQExJQkRJUkAvcGVybC92ZW5kb3JfcGVybC81LjIyLjAnCit2ZW5kb3JsaWJfc3RlbT0nQExJQkRJUkAvcGVybC92ZW5kb3JfcGVybCcKK3ZlbmRvcmxpYmV4cD0nQExJQkRJUkAvcGVybC92ZW5kb3JfcGVybC81LjIyLjAnCit2ZW5kb3JtYW4xZGlyPScgJwordmVuZG9ybWFuMWRpcmV4cD0nJwordmVuZG9ybWFuM2Rpcj0nICcKK3ZlbmRvcm1hbjNkaXJleHA9JycKK3ZlbmRvcnByZWZpeD0nQEVYRUNQUkVGSVhAJwordmVuZG9ycHJlZml4ZXhwPSdARVhFQ1BSRUZJWEAnCit2ZW5kb3JzY3JpcHQ9J0BVU1JCSU5AJwordmVuZG9yc2NyaXB0ZXhwPSdAVVNSQklOQCcKK3ZlcnNpb249JzUuMjIuMCcKK3ZlcnNpb25fcGF0Y2hsZXZlbF9zdHJpbmc9J3ZlcnNpb24gMjIgc3VidmVyc2lvbiAwJwordmVyc2lvbm9ubHk9J3VuZGVmJwordmk9JycKK3hsaWJwdGg9J0BMSUJESVJALzM4NiBAQkFTRUxJQkRJUkAzODYnCit5YWNjPSd5YWNjJworeWFjY2ZsYWdzPScnCit6Y2F0PScnCit6aXA9J3ppcCcKK1BFUkxfUkVWSVNJT049NQorUEVSTF9WRVJTSU9OPTIyCitQRVJMX1NVQlZFUlNJT049MAorUEVSTF9BUElfUkVWSVNJT049NQorUEVSTF9BUElfVkVSU0lPTj0yMgorUEVSTF9BUElfU1VCVkVSU0lPTj0wCitQRVJMX1BBVENITEVWRUw9JycKK1BFUkxfQ09ORklHX1NIPXRydWUKKzogVmFyaWFibGVzIHByb3BhZ2F0ZWQgZnJvbSBwcmV2aW91cyBjb25maWcuc2ggZmlsZS4KK2xpYmRiX25lZWRzX3B0aHJlYWQ9J04nCisKKyMgZm9yIFRpbWUtSGlSZXMKK2RfY2xvY2tfbmFub3NsZWVwPSdkZWZpbmUnCitkX2Nsb2NrX2dldHRpbWU9J2RlZmluZScKK2RfY2xvY2tfZ2V0cmVzPSdkZWZpbmUnCitkX2Nsb2NrPSdkZWZpbmUnCitkX25hbm9zbGVlcD0nZGVmaW5lJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtMzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI1OWEwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtMzIKQEAgLTAsMCArMSwzOCBAQAorYWxpZ25ieXRlcz0nNCcKK2NmX3RpbWU9J1RodSBEZWMgMjMgMDM6NTc6NTEgVVRDIDIwMTAnCitjcHBzeW1ib2xzPSdfRklMRV9PRkZTRVRfQklUUz02NCBfR05VX1NPVVJDRT0xIF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSBfTEFSR0VGSUxFX1NPVVJDRT0xIF9QT1NJWF9DX1NPVVJDRT0yMDA4MDlMIF9QT1NJWF9TT1VSQ0U9MSBfUkVFTlRSQU5UPTEgX1hPUEVOX1NPVVJDRT03MDAgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRD0xIF9fQklHR0VTVF9BTElHTk1FTlRfXz0xNiBfX0NIQVIxNl9UWVBFX189c2hvcnRcIHVuc2lnbmVkXCBpbnQgX19DSEFSMzJfVFlQRV9fPXVuc2lnbmVkXCBpbnQgX19DSEFSX0JJVF9fPTggX19EQkxfREVOT1JNX01JTl9fPSgoZG91YmxlKTQuOTQwNjU2NDU4NDEyNDY1NDQxNzdlLTMyNEwpIF9fREJMX0RJR19fPTE1IF9fREJMX0VQU0lMT05fXz0oKGRvdWJsZSkyLjIyMDQ0NjA0OTI1MDMxMzA4MDg1ZS0xNkwpIF9fREJMX0hBU19ERU5PUk1fXz0xIF9fREJMX0hBU19JTkZJTklUWV9fPTEgX19EQkxfSEFTX1FVSUVUX05BTl9fPTEgX19EQkxfTUFOVF9ESUdfXz01MyBfX0RCTF9NQVhfMTBfRVhQX189MzA4IF9fREJMX01BWF9FWFBfXz0xMDI0IF9fREJMX01BWF9fPSgoZG91YmxlKTEuNzk3NjkzMTM0ODYyMzE1NzA4MTVlKzMwOEwpIF9fREJMX01JTl8xMF9FWFBfXz0oLTMwNykgX19EQkxfTUlOX0VYUF9fPSgtMTAyMSkgX19EQkxfTUlOX189KChkb3VibGUpMi4yMjUwNzM4NTg1MDcyMDEzODMwOWUtMzA4TCkgX19ERUMxMjhfRVBTSUxPTl9fPTFFLTMzREwgX19ERUMxMjhfTUFOVF9ESUdfXz0zNCBfX0RFQzEyOF9NQVhfRVhQX189NjE0NSBfX0RFQzEyOF9NQVhfXz05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUU2MTQ0REwgX19ERUMxMjhfTUlOX0VYUF9fPSgtNjE0MikgX19ERUMxMjhfTUlOX189MUUtNjE0M0RMIF9fREVDMTI4X1NVQk5PUk1BTF9NSU5fXz0wLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0M0RMIF9fREVDMzJfRVBTSUxPTl9fPTFFLTZERiBfX0RFQzMyX01BTlRfRElHX189NyBfX0RFQzMyX01BWF9FWFBfXz05NyBfX0RFQzMyX01BWF9fPTkuOTk5OTk5RTk2REYgX19ERUMzMl9NSU5fRVhQX189KC05NCkgX19ERUMzMl9NSU5fXz0xRS05NURGIF9fREVDMzJfU1VCTk9STUFMX01JTl9fPTAuMDAwMDAxRS05NURGIF9fREVDNjRfRVBTSUxPTl9fPTFFLTE1REQgX19ERUM2NF9NQU5UX0RJR19fPTE2IF9fREVDNjRfTUFYX0VYUF9fPTM4NSBfX0RFQzY0X01BWF9fPTkuOTk5OTk5OTk5OTk5OTk5RTM4NEREIF9fREVDNjRfTUlOX0VYUF9fPSgtMzgyKSBfX0RFQzY0X01JTl9fPTFFLTM4M0REIF9fREVDNjRfU1VCTk9STUFMX01JTl9fPTAuMDAwMDAwMDAwMDAwMDAxRS0zODNERCBfX0RFQ0lNQUxfQklEX0ZPUk1BVF9fPTEgX19ERUNJTUFMX0RJR19fPTIxIF9fREVDX0VWQUxfTUVUSE9EX189MiBfX0VMRl9fPTEgX19GSU5JVEVfTUFUSF9PTkxZX189MCBfX0ZMVF9ERU5PUk1fTUlOX189MS40MDEyOTg0NjQzMjQ4MTcwNzA5MmUtNDVGIF9fRkxUX0RJR19fPTYgX19GTFRfRVBTSUxPTl9fPTEuMTkyMDkyODk1NTA3ODEyNTAwMDBlLTdGIF9fRkxUX0VWQUxfTUVUSE9EX189MiBfX0ZMVF9IQVNfREVOT1JNX189MSBfX0ZMVF9IQVNfSU5GSU5JVFlfXz0xIF9fRkxUX0hBU19RVUlFVF9OQU5fXz0xIF9fRkxUX01BTlRfRElHX189MjQgX19GTFRfTUFYXzEwX0VYUF9fPTM4IF9fRkxUX01BWF9FWFBfXz0xMjggX19GTFRfTUFYX189My40MDI4MjM0NjYzODUyODg1OTgxMmUrMzhGIF9fRkxUX01JTl8xMF9FWFBfXz0oLTM3KSBfX0ZMVF9NSU5fRVhQX189KC0xMjUpIF9fRkxUX01JTl9fPTEuMTc1NDk0MzUwODIyMjg3NTA3OTdlLTM4RiBfX0ZMVF9SQURJWF9fPTIgX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfMT0xIF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzI9MSBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF80PTEgX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfOD0xIF9fR0xJQkNfTUlOT1JfXz0xMiBfX0dMSUJDX189MiBfX0dOVUNfR05VX0lOTElORV9fPTEgX19HTlVDX01JTk9SX189NSBfX0dOVUNfUEFUQ0hMRVZFTF9fPTEgX19HTlVDX189NCBfX0dOVV9MSUJSQVJZX189NiBfX0dYWF9BQklfVkVSU0lPTj0xMDAyIF9fSU5UMTZfQyhjKT1jIF9fSU5UMTZfTUFYX189MzI3NjcgX19JTlQxNl9UWVBFX189c2hvcnRcIGludCBfX0lOVDMyX0MoYyk9YyBfX0lOVDMyX01BWF9fPTIxNDc0ODM2NDcgX19JTlQzMl9UWVBFX189aW50IF9fSU5UNjRfQyhjKT1jTEwgX19JTlQ2NF9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgX19JTlQ2NF9UWVBFX189bG9uZ1wgbG9uZ1wgaW50IF9fSU5UOF9DKGMpPWMgX19JTlQ4X01BWF9fPTEyNyBfX0lOVDhfVFlQRV9fPXNpZ25lZFwgY2hhciBfX0lOVE1BWF9DKGMpPWNMTCBfX0lOVE1BWF9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgX19JTlRNQVhfVFlQRV9fPWxvbmdcIGxvbmdcIGludCBfX0lOVFBUUl9NQVhfXz0yMTQ3NDgzNjQ3IF9fSU5UUFRSX1RZUEVfXz1pbnQgX19JTlRfRkFTVDE2X01BWF9fPTIxNDc0ODM2NDcgX19JTlRfRkFTVDE2X1RZUEVfXz1pbnQgX19JTlRfRkFTVDMyX01BWF9fPTIxNDc0ODM2NDcgX19JTlRfRkFTVDMyX1RZUEVfXz1pbnQgX19JTlRfRkFTVDY0X01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCBfX0lOVF9GQVNUNjRfVFlQRV9fPWxvbmdcIGxvbmdcIGludCBfX0lOVF9GQVNUOF9NQVhfXz0xMjcgX19JTlRfRkFTVDhfVFlQRV9fPXNpZ25lZFwgY2hhciBfX0lOVF9MRUFTVDE2X01BWF9fPTMyNzY3IF9fSU5UX0xFQVNUMTZfVFlQRV9fPXNob3J0XCBpbnQgX19JTlRfTEVBU1QzMl9NQVhfXz0yMTQ3NDgzNjQ3IF9fSU5UX0xFQVNUMzJfVFlQRV9fPWludCBfX0lOVF9MRUFTVDY0X01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCBfX0lOVF9MRUFTVDY0X1RZUEVfXz1sb25nXCBsb25nXCBpbnQgX19JTlRfTEVBU1Q4X01BWF9fPTEyNyBfX0lOVF9MRUFTVDhfVFlQRV9fPXNpZ25lZFwgY2hhciBfX0lOVF9NQVhfXz0yMTQ3NDgzNjQ3IF9fTERCTF9ERU5PUk1fTUlOX189My42NDUxOTk1MzE4ODI0NzQ2MDI1M2UtNDk1MUwgX19MREJMX0RJR19fPTE4IF9fTERCTF9FUFNJTE9OX189MS4wODQyMDIxNzI0ODU1MDQ0MzQwMWUtMTlMIF9fTERCTF9IQVNfREVOT1JNX189MSBfX0xEQkxfSEFTX0lORklOSVRZX189MSBfX0xEQkxfSEFTX1FVSUVUX05BTl9fPTEgX19MREJMX01BTlRfRElHX189NjQgX19MREJMX01BWF8xMF9FWFBfXz00OTMyIF9fTERCTF9NQVhfRVhQX189MTYzODQgX19MREJMX01BWF9fPTEuMTg5NzMxNDk1MzU3MjMxNzY1MDJlKzQ5MzJMIF9fTERCTF9NSU5fMTBfRVhQX189KC00OTMxKSBfX0xEQkxfTUlOX0VYUF9fPSgtMTYzODEpIF9fTERCTF9NSU5fXz0zLjM2MjEwMzE0MzExMjA5MzUwNjI2ZS00OTMyTCBfX0xPTkdfTE9OR19NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgX19MT05HX01BWF9fPTIxNDc0ODM2NDdMIF9fUFJBR01BX1JFREVGSU5FX0VYVE5BTUU9MSBfX1BUUkRJRkZfTUFYX189MjE0NzQ4MzY0NyBfX1BUUkRJRkZfVFlQRV9fPWludCBfX1JFR0lTVEVSX1BSRUZJWF9fPSBfX1NDSEFSX01BWF9fPTEyNyBfX1NIUlRfTUFYX189MzI3NjcgX19TSUdfQVRPTUlDX01BWF9fPTIxNDc0ODM2NDcgX19TSUdfQVRPTUlDX01JTl9fPSgtMjE0NzQ4MzY0N1wgLVwgMSkgX19TSUdfQVRPTUlDX1RZUEVfXz1pbnQgX19TSVpFT0ZfRE9VQkxFX189OCBfX1NJWkVPRl9GTE9BVF9fPTQgX19TSVpFT0ZfSU5UX189NCBfX1NJWkVPRl9MT05HX0RPVUJMRV9fPTEyIF9fU0laRU9GX0xPTkdfTE9OR19fPTggX19TSVpFT0ZfTE9OR19fPTQgX19TSVpFT0ZfUE9JTlRFUl9fPTQgX19TSVpFT0ZfUFRSRElGRl9UX189NCBfX1NJWkVPRl9TSE9SVF9fPTIgX19TSVpFT0ZfU0laRV9UX189NCBfX1NJWkVPRl9XQ0hBUl9UX189NCBfX1NJWkVPRl9XSU5UX1RfXz00IF9fU0laRV9NQVhfXz00Mjk0OTY3Mjk1VSBfX1NJWkVfVFlQRV9fPXVuc2lnbmVkXCBpbnQgX19TVERDX0hPU1RFRF9fPTEgX19TVERDX189MSBfX1VJTlQxNl9DKGMpPWMgX19VSU5UMTZfTUFYX189NjU1MzUgX19VSU5UMTZfVFlQRV9fPXNob3J0XCB1bnNpZ25lZFwgaW50IF9fVUlOVDMyX0MoYyk9Y1UgX19VSU5UMzJfTUFYX189NDI5NDk2NzI5NVUgX19VSU5UMzJfVFlQRV9fPXVuc2lnbmVkXCBpbnQgX19VSU5UNjRfQyhjKT1jVUxMIF9fVUlOVDY0X01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMIF9fVUlOVDY0X1RZUEVfXz1sb25nXCBsb25nXCB1bnNpZ25lZFwgaW50IF9fVUlOVDhfQyhjKT1jIF9fVUlOVDhfTUFYX189MjU1IF9fVUlOVDhfVFlQRV9fPXVuc2lnbmVkXCBjaGFyIF9fVUlOVE1BWF9DKGMpPWNVTEwgX19VSU5UTUFYX01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMIF9fVUlOVE1BWF9UWVBFX189bG9uZ1wgbG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRQVFJfTUFYX189NDI5NDk2NzI5NVUgX19VSU5UUFRSX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fVUlOVF9GQVNUMTZfTUFYX189NDI5NDk2NzI5NVUgX19VSU5UX0ZBU1QxNl9UWVBFX189dW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDMyX01BWF9fPTQyOTQ5NjcyOTVVIF9fVUlOVF9GQVNUMzJfVFlQRV9fPXVuc2lnbmVkXCBpbnQgX19VSU5UX0ZBU1Q2NF9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMTCBfX1VJTlRfRkFTVDY0X1RZUEVfXz1sb25nXCBsb25nXCB1bnNpZ25lZFwgaW50IF9fVUlOVF9GQVNUOF9NQVhfXz0yNTUgX19VSU5UX0ZBU1Q4X1RZUEVfXz11bnNpZ25lZFwgY2hhciBfX1VJTlRfTEVBU1QxNl9NQVhfXz02NTUzNSBfX1VJTlRfTEVBU1QxNl9UWVBFX189c2hvcnRcIHVuc2lnbmVkXCBpbnQgX19VSU5UX0xFQVNUMzJfTUFYX189NDI5NDk2NzI5NVUgX19VSU5UX0xFQVNUMzJfVFlQRV9fPXVuc2lnbmVkXCBpbnQgX19VSU5UX0xFQVNUNjRfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwgX19VSU5UX0xFQVNUNjRfVFlQRV9fPWxvbmdcIGxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UX0xFQVNUOF9NQVhfXz0yNTUgX19VSU5UX0xFQVNUOF9UWVBFX189dW5zaWduZWRcIGNoYXIgX19VU0VSX0xBQkVMX1BSRUZJWF9fPSBfX1VTRV9CU0Q9MSBfX1VTRV9GSUxFX09GRlNFVDY0PTEgX19VU0VfR05VPTEgX19VU0VfTEFSR0VGSUxFNjQ9MSBfX1VTRV9MQVJHRUZJTEU9MSBfX1VTRV9NSVNDPTEgX19VU0VfUE9TSVgxOTkzMDk9MSBfX1VTRV9QT1NJWDE5OTUwNj0xIF9fVVNFX1BPU0lYMj0xIF9fVVNFX1BPU0lYPTEgX19VU0VfUkVFTlRSQU5UPTEgX19VU0VfU1ZJRD0xIF9fVVNFX1VOSVg5OD0xIF9fVVNFX1hPUEVOPTEgX19VU0VfWE9QRU5fRVhURU5ERUQ9MSBfX1ZFUlNJT05fXz0iNC41LjEiIF9fV0NIQVJfTUFYX189MjE0NzQ4MzY0N0wgX19XQ0hBUl9NSU5fXz0oLTIxNDc0ODM2NDdMXCAtXCAxKSBfX1dDSEFSX1RZUEVfXz1sb25nXCBpbnQgX19XSU5UX01BWF9fPTQyOTQ5NjcyOTVVIF9fV0lOVF9NSU5fXz0wVSBfX1dJTlRfVFlQRV9fPXVuc2lnbmVkXCBpbnQgX19nbnVfbGludXhfXz0xIF9faTM4Nj0xIF9faTM4Nl9fPTEgX19pNTg2PTEgX19pNTg2X189MSBfX2xpbnV4PTEgX19saW51eF9fPTEgX19wZW50aXVtPTEgX19wZW50aXVtX189MSBfX3R1bmVfaTU4Nl9fPTEgX190dW5lX3BlbnRpdW1fXz0xIF9fdW5peD0xIF9fdW5peF9fPTEgaTM4Nj0xIGxpbnV4PTEgdW5peD0xJworZF9udl9wcmVzZXJ2ZXNfdXY9J2RlZmluZScKK2RfcHJpbnRmX2Zvcm1hdF9udWxsPSdkZWZpbmUnCitkX3UzMmFsaWduPSd1bmRlZicKK2dpZGZvcm1hdD0nImx1IicKK2kzMnR5cGU9J2xvbmcnCitpNjR0eXBlPSdsb25nIGxvbmcnCitpdnNpemU9JzQnCitsb25nZGJsc2l6ZT0nMTInCitsb25nc2l6ZT0nNCcKK215dW5hbWU9J2xpbnV4IHFlbXV4ODYgMi42LjM3LXJjNS15b2N0by1zdGFuZGFyZCsgIzEgcHJlZW1wdCBtb24gZGVjIDIwIDE0OjIxOjI3IHBzdCAyMDEwIGk2ODYgZ251bGludXggJworbmVlZF92YV9jb3B5PSd1bmRlZicKK25ldGRiX2hvc3RfdHlwZT0nY29uc3Qgdm9pZCAqJworbnZfcHJlc2VydmVzX3V2X2JpdHM9JzMyJworcHRyc2l6ZT0nNCcKK3F1YWRraW5kPSczJworcXVhZHR5cGU9J2xvbmcgbG9uZycKK3NHTVRJTUVfbWF4PScyMTQ3NDgzNjQ3Jworc0dNVElNRV9taW49Jy0yMTQ3NDgzNjQ4Jworc0xPQ0FMVElNRV9tYXg9JzIxNDc0ODM2NDcnCitzTE9DQUxUSU1FX21pbj0nLTIxNDc0ODM2NDgnCitzUFJJWFU2ND0nIkxYIicKK3NQUklkNjQ9JyJMZCInCitzUFJJaTY0PSciTGkiJworc1BSSW82ND0nIkxvIicKK3NQUkl1NjQ9JyJMdSInCitzUFJJeDY0PSciTHgiJworc2VsZWN0bWluYml0cz0nMzInCitzaXplc2l6ZT0nNCcKK3UzMnR5cGU9J3Vuc2lnbmVkIGxvbmcnCit1NjR0eXBlPSd1bnNpZ25lZCBsb25nIGxvbmcnCit1aWRmb3JtYXQ9JyJsdSInCit1cXVhZHR5cGU9J3Vuc2lnbmVkIGxvbmcgbG9uZycKK3VzZTY0Yml0YWxsPSd1bmRlZicKK3VzZTY0Yml0aW50PSd1bmRlZicKK3V2c2l6ZT0nNCcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtMzItYmUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTMyLWJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1OWE5YWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTMyLWJlCkBAIC0wLDAgKzEgQEAKK2J5dGVvcmRlcj0nNDMyMScKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtMzItbGUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTMyLWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZTQyMjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTMyLWxlCkBAIC0wLDAgKzEgQEAKK2J5dGVvcmRlcj0nMTIzNCcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtNjQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MjlkM2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTY0CkBAIC0wLDAgKzEsMzggQEAKK2FsaWduYnl0ZXM9JzgnCitjZl90aW1lPSdUaHUgRGVjIDIzIDAyOjA2OjQyIFVUQyAyMDEwJworY3Bwc3ltYm9scz0nX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgX0dOVV9TT1VSQ0U9MSBfTEFSR0VGSUxFNjRfU09VUkNFPTEgX0xBUkdFRklMRV9TT1VSQ0U9MSBfTFA2ND0xIF9QT1NJWF9DX1NPVVJDRT0yMDA4MDlMIF9QT1NJWF9TT1VSQ0U9MSBfUkVFTlRSQU5UPTEgX1hPUEVOX1NPVVJDRT03MDAgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRD0xIF9fQklHR0VTVF9BTElHTk1FTlRfXz0xNiBfX0NIQVIxNl9UWVBFX189c2hvcnRcIHVuc2lnbmVkXCBpbnQgX19DSEFSMzJfVFlQRV9fPXVuc2lnbmVkXCBpbnQgX19DSEFSX0JJVF9fPTggX19EQkxfREVOT1JNX01JTl9fPSgoZG91YmxlKTQuOTQwNjU2NDU4NDEyNDY1NDQxNzdlLTMyNEwpIF9fREJMX0RJR19fPTE1IF9fREJMX0VQU0lMT05fXz0oKGRvdWJsZSkyLjIyMDQ0NjA0OTI1MDMxMzA4MDg1ZS0xNkwpIF9fREJMX0hBU19ERU5PUk1fXz0xIF9fREJMX0hBU19JTkZJTklUWV9fPTEgX19EQkxfSEFTX1FVSUVUX05BTl9fPTEgX19EQkxfTUFOVF9ESUdfXz01MyBfX0RCTF9NQVhfMTBfRVhQX189MzA4IF9fREJMX01BWF9FWFBfXz0xMDI0IF9fREJMX01BWF9fPSgoZG91YmxlKTEuNzk3NjkzMTM0ODYyMzE1NzA4MTVlKzMwOEwpIF9fREJMX01JTl8xMF9FWFBfXz0oLTMwNykgX19EQkxfTUlOX0VYUF9fPSgtMTAyMSkgX19EQkxfTUlOX189KChkb3VibGUpMi4yMjUwNzM4NTg1MDcyMDEzODMwOWUtMzA4TCkgX19ERUMxMjhfRVBTSUxPTl9fPTFFLTMzREwgX19ERUMxMjhfTUFOVF9ESUdfXz0zNCBfX0RFQzEyOF9NQVhfRVhQX189NjE0NSBfX0RFQzEyOF9NQVhfXz05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUU2MTQ0REwgX19ERUMxMjhfTUlOX0VYUF9fPSgtNjE0MikgX19ERUMxMjhfTUlOX189MUUtNjE0M0RMIF9fREVDMTI4X1NVQk5PUk1BTF9NSU5fXz0wLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0M0RMIF9fREVDMzJfRVBTSUxPTl9fPTFFLTZERiBfX0RFQzMyX01BTlRfRElHX189NyBfX0RFQzMyX01BWF9FWFBfXz05NyBfX0RFQzMyX01BWF9fPTkuOTk5OTk5RTk2REYgX19ERUMzMl9NSU5fRVhQX189KC05NCkgX19ERUMzMl9NSU5fXz0xRS05NURGIF9fREVDMzJfU1VCTk9STUFMX01JTl9fPTAuMDAwMDAxRS05NURGIF9fREVDNjRfRVBTSUxPTl9fPTFFLTE1REQgX19ERUM2NF9NQU5UX0RJR19fPTE2IF9fREVDNjRfTUFYX0VYUF9fPTM4NSBfX0RFQzY0X01BWF9fPTkuOTk5OTk5OTk5OTk5OTk5RTM4NEREIF9fREVDNjRfTUlOX0VYUF9fPSgtMzgyKSBfX0RFQzY0X01JTl9fPTFFLTM4M0REIF9fREVDNjRfU1VCTk9STUFMX01JTl9fPTAuMDAwMDAwMDAwMDAwMDAxRS0zODNERCBfX0RFQ0lNQUxfQklEX0ZPUk1BVF9fPTEgX19ERUNJTUFMX0RJR19fPTIxIF9fREVDX0VWQUxfTUVUSE9EX189MiBfX0VMRl9fPTEgX19GSU5JVEVfTUFUSF9PTkxZX189MCBfX0ZMVF9ERU5PUk1fTUlOX189MS40MDEyOTg0NjQzMjQ4MTcwNzA5MmUtNDVGIF9fRkxUX0RJR19fPTYgX19GTFRfRVBTSUxPTl9fPTEuMTkyMDkyODk1NTA3ODEyNTAwMDBlLTdGIF9fRkxUX0VWQUxfTUVUSE9EX189MCBfX0ZMVF9IQVNfREVOT1JNX189MSBfX0ZMVF9IQVNfSU5GSU5JVFlfXz0xIF9fRkxUX0hBU19RVUlFVF9OQU5fXz0xIF9fRkxUX01BTlRfRElHX189MjQgX19GTFRfTUFYXzEwX0VYUF9fPTM4IF9fRkxUX01BWF9FWFBfXz0xMjggX19GTFRfTUFYX189My40MDI4MjM0NjYzODUyODg1OTgxMmUrMzhGIF9fRkxUX01JTl8xMF9FWFBfXz0oLTM3KSBfX0ZMVF9NSU5fRVhQX189KC0xMjUpIF9fRkxUX01JTl9fPTEuMTc1NDk0MzUwODIyMjg3NTA3OTdlLTM4RiBfX0ZMVF9SQURJWF9fPTIgX19HQ0NfSEFWRV9EV0FSRjJfQ0ZJX0FTTT0xIF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzE9MSBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF8yPTEgX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfND0xIF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzg9MSBfX0dMSUJDX01JTk9SX189MTIgX19HTElCQ19fPTIgX19HTlVDX0dOVV9JTkxJTkVfXz0xIF9fR05VQ19NSU5PUl9fPTUgX19HTlVDX1BBVENITEVWRUxfXz0xIF9fR05VQ19fPTQgX19HTlVfTElCUkFSWV9fPTYgX19HWFhfQUJJX1ZFUlNJT049MTAwMiBfX0lOVDE2X0MoYyk9YyBfX0lOVDE2X01BWF9fPTMyNzY3IF9fSU5UMTZfVFlQRV9fPXNob3J0XCBpbnQgX19JTlQzMl9DKGMpPWMgX19JTlQzMl9NQVhfXz0yMTQ3NDgzNjQ3IF9fSU5UMzJfVFlQRV9fPWludCBfX0lOVDY0X0MoYyk9Y0wgX19JTlQ2NF9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TCBfX0lOVDY0X1RZUEVfXz1sb25nXCBpbnQgX19JTlQ4X0MoYyk9YyBfX0lOVDhfTUFYX189MTI3IF9fSU5UOF9UWVBFX189c2lnbmVkXCBjaGFyIF9fSU5UTUFYX0MoYyk9Y0wgX19JTlRNQVhfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19JTlRNQVhfVFlQRV9fPWxvbmdcIGludCBfX0lOVFBUUl9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TCBfX0lOVFBUUl9UWVBFX189bG9uZ1wgaW50IF9fSU5UX0ZBU1QxNl9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TCBfX0lOVF9GQVNUMTZfVFlQRV9fPWxvbmdcIGludCBfX0lOVF9GQVNUMzJfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19JTlRfRkFTVDMyX1RZUEVfXz1sb25nXCBpbnQgX19JTlRfRkFTVDY0X01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fSU5UX0ZBU1Q2NF9UWVBFX189bG9uZ1wgaW50IF9fSU5UX0ZBU1Q4X01BWF9fPTEyNyBfX0lOVF9GQVNUOF9UWVBFX189c2lnbmVkXCBjaGFyIF9fSU5UX0xFQVNUMTZfTUFYX189MzI3NjcgX19JTlRfTEVBU1QxNl9UWVBFX189c2hvcnRcIGludCBfX0lOVF9MRUFTVDMyX01BWF9fPTIxNDc0ODM2NDcgX19JTlRfTEVBU1QzMl9UWVBFX189aW50IF9fSU5UX0xFQVNUNjRfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19JTlRfTEVBU1Q2NF9UWVBFX189bG9uZ1wgaW50IF9fSU5UX0xFQVNUOF9NQVhfXz0xMjcgX19JTlRfTEVBU1Q4X1RZUEVfXz1zaWduZWRcIGNoYXIgX19JTlRfTUFYX189MjE0NzQ4MzY0NyBfX0xEQkxfREVOT1JNX01JTl9fPTMuNjQ1MTk5NTMxODgyNDc0NjAyNTNlLTQ5NTFMIF9fTERCTF9ESUdfXz0xOCBfX0xEQkxfRVBTSUxPTl9fPTEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TCBfX0xEQkxfSEFTX0RFTk9STV9fPTEgX19MREJMX0hBU19JTkZJTklUWV9fPTEgX19MREJMX0hBU19RVUlFVF9OQU5fXz0xIF9fTERCTF9NQU5UX0RJR19fPTY0IF9fTERCTF9NQVhfMTBfRVhQX189NDkzMiBfX0xEQkxfTUFYX0VYUF9fPTE2Mzg0IF9fTERCTF9NQVhfXz0xLjE4OTczMTQ5NTM1NzIzMTc2NTAyZSs0OTMyTCBfX0xEQkxfTUlOXzEwX0VYUF9fPSgtNDkzMSkgX19MREJMX01JTl9FWFBfXz0oLTE2MzgxKSBfX0xEQkxfTUlOX189My4zNjIxMDMxNDMxMTIwOTM1MDYyNmUtNDkzMkwgX19MT05HX0xPTkdfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0xMIF9fTE9OR19NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TCBfX0xQNjRfXz0xIF9fTU1YX189MSBfX1BSQUdNQV9SRURFRklORV9FWFROQU1FPTEgX19QVFJESUZGX01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fUFRSRElGRl9UWVBFX189bG9uZ1wgaW50IF9fUkVHSVNURVJfUFJFRklYX189IF9fU0NIQVJfTUFYX189MTI3IF9fU0hSVF9NQVhfXz0zMjc2NyBfX1NJR19BVE9NSUNfTUFYX189MjE0NzQ4MzY0NyBfX1NJR19BVE9NSUNfTUlOX189KC0yMTQ3NDgzNjQ3XCAtXCAxKSBfX1NJR19BVE9NSUNfVFlQRV9fPWludCBfX1NJWkVPRl9ET1VCTEVfXz04IF9fU0laRU9GX0ZMT0FUX189NCBfX1NJWkVPRl9JTlRfXz00IF9fU0laRU9GX0xPTkdfRE9VQkxFX189MTYgX19TSVpFT0ZfTE9OR19MT05HX189OCBfX1NJWkVPRl9MT05HX189OCBfX1NJWkVPRl9QT0lOVEVSX189OCBfX1NJWkVPRl9QVFJESUZGX1RfXz04IF9fU0laRU9GX1NIT1JUX189MiBfX1NJWkVPRl9TSVpFX1RfXz04IF9fU0laRU9GX1dDSEFSX1RfXz00IF9fU0laRU9GX1dJTlRfVF9fPTQgX19TSVpFX01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19TSVpFX1RZUEVfXz1sb25nXCB1bnNpZ25lZFwgaW50IF9fU1NFMl9NQVRIX189MSBfX1NTRTJfXz0xIF9fU1NFX01BVEhfXz0xIF9fU1NFX189MSBfX1NURENfSE9TVEVEX189MSBfX1NURENfXz0xIF9fVUlOVDE2X0MoYyk9YyBfX1VJTlQxNl9NQVhfXz02NTUzNSBfX1VJTlQxNl9UWVBFX189c2hvcnRcIHVuc2lnbmVkXCBpbnQgX19VSU5UMzJfQyhjKT1jVSBfX1VJTlQzMl9NQVhfXz00Mjk0OTY3Mjk1VSBfX1VJTlQzMl9UWVBFX189dW5zaWduZWRcIGludCBfX1VJTlQ2NF9DKGMpPWNVTCBfX1VJTlQ2NF9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMIF9fVUlOVDY0X1RZUEVfXz1sb25nXCB1bnNpZ25lZFwgaW50IF9fVUlOVDhfQyhjKT1jIF9fVUlOVDhfTUFYX189MjU1IF9fVUlOVDhfVFlQRV9fPXVuc2lnbmVkXCBjaGFyIF9fVUlOVE1BWF9DKGMpPWNVTCBfX1VJTlRNQVhfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTCBfX1VJTlRNQVhfVFlQRV9fPWxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UUFRSX01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19VSU5UUFRSX1RZUEVfXz1sb25nXCB1bnNpZ25lZFwgaW50IF9fVUlOVF9GQVNUMTZfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTCBfX1VJTlRfRkFTVDE2X1RZUEVfXz1sb25nXCB1bnNpZ25lZFwgaW50IF9fVUlOVF9GQVNUMzJfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTCBfX1VJTlRfRkFTVDMyX1RZUEVfXz1sb25nXCB1bnNpZ25lZFwgaW50IF9fVUlOVF9GQVNUNjRfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTCBfX1VJTlRfRkFTVDY0X1RZUEVfXz1sb25nXCB1bnNpZ25lZFwgaW50IF9fVUlOVF9GQVNUOF9NQVhfXz0yNTUgX19VSU5UX0ZBU1Q4X1RZUEVfXz11bnNpZ25lZFwgY2hhciBfX1VJTlRfTEVBU1QxNl9NQVhfXz02NTUzNSBfX1VJTlRfTEVBU1QxNl9UWVBFX189c2hvcnRcIHVuc2lnbmVkXCBpbnQgX19VSU5UX0xFQVNUMzJfTUFYX189NDI5NDk2NzI5NVUgX19VSU5UX0xFQVNUMzJfVFlQRV9fPXVuc2lnbmVkXCBpbnQgX19VSU5UX0xFQVNUNjRfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTCBfX1VJTlRfTEVBU1Q2NF9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRfTEVBU1Q4X01BWF9fPTI1NSBfX1VJTlRfTEVBU1Q4X1RZUEVfXz11bnNpZ25lZFwgY2hhciBfX1VTRVJfTEFCRUxfUFJFRklYX189IF9fVVNFX0JTRD0xIF9fVVNFX0ZJTEVfT0ZGU0VUNjQ9MSBfX1VTRV9HTlU9MSBfX1VTRV9MQVJHRUZJTEU2ND0xIF9fVVNFX0xBUkdFRklMRT0xIF9fVVNFX01JU0M9MSBfX1VTRV9QT1NJWDE5OTMwOT0xIF9fVVNFX1BPU0lYMTk5NTA2PTEgX19VU0VfUE9TSVgyPTEgX19VU0VfUE9TSVg9MSBfX1VTRV9SRUVOVFJBTlQ9MSBfX1VTRV9TVklEPTEgX19VU0VfVU5JWDk4PTEgX19VU0VfWE9QRU49MSBfX1VTRV9YT1BFTl9FWFRFTkRFRD0xIF9fVkVSU0lPTl9fPSI0LjUuMSIgX19XQ0hBUl9NQVhfXz0yMTQ3NDgzNjQ3IF9fV0NIQVJfTUlOX189KC0yMTQ3NDgzNjQ3XCAtXCAxKSBfX1dDSEFSX1RZUEVfXz1pbnQgX19XSU5UX01BWF9fPTQyOTQ5NjcyOTVVIF9fV0lOVF9NSU5fXz0wVSBfX1dJTlRfVFlQRV9fPXVuc2lnbmVkXCBpbnQgX19hbWQ2ND0xIF9fYW1kNjRfXz0xIF9fZ251X2xpbnV4X189MSBfX2s4PTEgX19rOF9fPTEgX19saW51eD0xIF9fbGludXhfXz0xIF9fdW5peD0xIF9fdW5peF9fPTEgX194ODZfNjQ9MSBfX3g4Nl82NF9fPTEgbGludXg9MSB1bml4PTEnCitkX252X3ByZXNlcnZlc191dj0ndW5kZWYnCitkX3ByaW50Zl9mb3JtYXRfbnVsbD0ndW5kZWYnCitkX3UzMmFsaWduPSdkZWZpbmUnCitnaWRmb3JtYXQ9JyJ1IicKK2kzMnR5cGU9J2ludCcKK2k2NHR5cGU9J2xvbmcnCitpdnNpemU9JzgnCitsb25nZGJsc2l6ZT0nMTYnCitsb25nc2l6ZT0nOCcKK215dW5hbWU9J2xpbnV4IHFlbXV4ODYtNjQgMi42LjM3LXJjNS15b2N0by1zdGFuZGFyZCsgIzEgc21wIHByZWVtcHQgbW9uIGRlYyAyMCAxNzoxOTo1MCBwc3QgMjAxMCB4ODZfNjQgZ251bGludXggJworbmVlZF92YV9jb3B5PSdkZWZpbmUnCituZXRkYl9ob3N0X3R5cGU9J2NoYXIgKicKK252X3ByZXNlcnZlc191dl9iaXRzPSc1MycKK3B0cnNpemU9JzgnCitxdWFka2luZD0nMicKK3F1YWR0eXBlPSdsb25nJworc0dNVElNRV9tYXg9JzY3NzY4MDM2MTkxNjc2Nzk5Jworc0dNVElNRV9taW49Jy02MjE2NzIxOTIwMCcKK3NMT0NBTFRJTUVfbWF4PSc2Nzc2ODAzNjE5MTY3Njc5OScKK3NMT0NBTFRJTUVfbWluPSctNjIxNjcyMTkyMDAnCitzUFJJWFU2ND0nImxYIicKK3NQUklkNjQ9JyJsZCInCitzUFJJaTY0PScibGkiJworc1BSSW82ND0nImxvIicKK3NQUkl1NjQ9JyJsdSInCitzUFJJeDY0PScibHgiJworc2VsZWN0bWluYml0cz0nNjQnCitzaXplc2l6ZT0nOCcKK3UzMnR5cGU9J3Vuc2lnbmVkIGludCcKK3U2NHR5cGU9J3Vuc2lnbmVkIGxvbmcnCit1aWRmb3JtYXQ9JyJ1IicKK3VxdWFkdHlwZT0ndW5zaWduZWQgbG9uZycKK3VzZTY0Yml0YWxsPSdkZWZpbmUnCit1c2U2NGJpdGludD0nZGVmaW5lJwordXZzaXplPSc4JwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NC1iZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtNjQtYmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA4Y2UzYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtNjQtYmUKQEAgLTAsMCArMSBAQAorYnl0ZW9yZGVyPSc4NzY1NDMyMScKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtNjQtbGUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTY0LWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3N2QyYTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTY0LWxlCkBAIC0wLDAgKzEgQEAKK2J5dGVvcmRlcj0nMTIzNDU2NzgnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY3Jvc3MtZ2VuZXJhdGVfdXVkbWFwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2Nyb3NzLWdlbmVyYXRlX3V1ZG1hcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDBhZDYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2Nyb3NzLWdlbmVyYXRlX3V1ZG1hcC5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0luZGV4OiBwZXJsLTUuMTQuMi9NYWtlZmlsZS5TSAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xNC4yLm9yaWcvTWFrZWZpbGUuU0gKKysrKyBwZXJsLTUuMTQuMi9NYWtlZmlsZS5TSAorQEAgLTYyMiw3ICs2MjIsNyBAQCBiaXRjb3VudC5oOiBnZW5lcmF0ZV91dWRtYXAkKEhPU1RfRVhFX0VYCisgCSQoUlVOKSAuL2dlbmVyYXRlX3V1ZG1hcCQoSE9TVF9FWEVfRVhUKSB1dWRtYXAuaCBiaXRjb3VudC5oCisgCisgZ2VuZXJhdGVfdXVkbWFwJChIT1NUX0VYRV9FWFQpOiBnZW5lcmF0ZV91dWRtYXAkKE9CSl9FWFQpCistCSQoQ0MpIC1vIGdlbmVyYXRlX3V1ZG1hcCQoRVhFX0VYVCkgJChMREZMQUdTKSBnZW5lcmF0ZV91dWRtYXAkKE9CSl9FWFQpICQobGlicykKKysJJChCVUlMRF9DQykgLW8gZ2VuZXJhdGVfdXVkbWFwJChFWEVfRVhUKSBnZW5lcmF0ZV91dWRtYXAuYworIAorIG1pbmlwZXJsbWFpbiQoT0JKX0VYVCk6IG1pbmlwZXJsbWFpbi5jIHBhdGNobGV2ZWwuaAorIAkkKENDQ01EKSAkKFBMRExGTEFHUykgJCouYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9jcGFuLW1pc3Npbmctc2l0ZS1kaXJzLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW4tbWlzc2luZy1zaXRlLWRpcnMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjNiOTY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9jcGFuLW1pc3Npbmctc2l0ZS1kaXJzLmRpZmYKQEAgLTAsMCArMSw2MiBAQAorRnJvbSBkMzNkNDY5NjMwMzVlZjcyNjE0NGRjNjZiZTJhZTljMDBhZWMwMzMzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogVHVlLCAxNiBPY3QgMjAxMiAyMzowNzo1NiArMDMwMAorU3ViamVjdDogRml4IENQQU46OkZpcnN0VGltZSBkZWZhdWx0cyB3aXRoIG5vbmV4aXN0aW5nIHNpdGUgZGlycyBpZiBhIHBhcmVudAorIGlzIHdyaXRhYmxlCisKK1RoZSBzaXRlIGRpcmVjdG9yaWVzIGRvIG5vdCBleGlzdCBvbiBhIHR5cGljYWwgRGViaWFuIHN5c3RlbS4gIFRoZSBidWlsZAorc3lzdGVtcyB3aWxsIGNyZWF0ZSB0aGVtIHdoZW4gbmVjZXNzYXJ5LCBzbyB0aGVyZSdzIG5vIG5lZWQgZm9yIGEgcHJvbXB0CitzdWdnZXN0aW5nIGxvY2FsOjpsaWIgaWYgdGhlIGZpcnN0IGV4aXN0aW5nIHBhcmVudCBkaXJlY3RvcnkgaXMgd3JpdGFibGUuCisKK0Fsc28sIHdyaXRhYmlsaXR5IG9mIHRoZSBjb3JlIGRpcmVjdG9yaWVzIGlzIG5vdCBpbnRlcmVzdGluZyBhcyB3ZQorZXhwbGljaXRseSB0ZWxsIENQQU4gbm90IHRvIHRvdWNoIHRob3NlIHdpdGggSU5TVEFMTERJUlM9c2l0ZS4KKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy82ODg4NDIKK1BhdGNoLU5hbWU6IGRlYmlhbi9jcGFuLW1pc3Npbmctc2l0ZS1kaXJzLmRpZmYKKy0tLQorIGNwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0gfCAzMSArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtIGIvY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbQoraW5kZXggMzMwNTRjZC4uN2IwYmVjZiAxMDA2NDQKKy0tLSBhL2NwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0KKysrKyBiL2NwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0KK0BAIC0yMDU3LDExICsyMDU3LDM0IEBAIHN1YiBfcHJpbnRfdXJsbGlzdCB7CisgICAgIH07CisgfQorIAorKyMgRGViaWFuIG1vZGlmaWNhdGlvbjogcmV0dXJuIHRydWUgaWYgdGhpcyBkaXJlY3RvcnkKKysjIG9yIHRoZSBmaXJzdCBleGlzdGluZyBvbmUgdXB3YXJkcyBpcyB3cml0YWJsZQorK3N1YiBfY2FuX3dyaXRlX3RvX3RoaXNfb3JfcGFyZW50IHsKKysgICAgbXkgKCRkaXIpID0gQF87CisrICAgIG15IEBwYXJ0cyA9IEZpbGU6OlNwZWMtPnNwbGl0ZGlyKCRkaXIpOworKyAgICB3aGlsZSAoQHBhcnRzKSB7CisrICAgICAgICBteSAkY3VyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKEBwYXJ0cyk7CisrICAgICAgICByZXR1cm4gMSBpZiAtdyAkY3VyOworKyAgICAgICAgcmV0dXJuIDAgaWYgLWUgXzsKKysgICAgICAgIHBvcCBAcGFydHM7CisrICAgIH0KKysgICAgcmV0dXJuIDA7CisrfQorKworKyMgRGViaWFuIHNwZWNpZmljIG1vZGlmaWNhdGlvbjogdGhlIHNpdGUgZGlyZWN0b3JpZXMgZG9uJ3QgbmVjZXNzYXJpbHkKKysjIGV4aXN0IG9uIHRoZSBzeXN0ZW0sIGJ1dCB0aGUgYnVpbGQgc3lzdGVtcyBjcmVhdGUgdGhlbSB3aGVuIG5lY2Vzc2FyeSwKKysjIHNvIHJldHVybiB0cnVlIGlmIHRoZSBmaXJzdCBleGlzdGluZyBkaXJlY3RvcnkgdXB3YXJkcyBpcyB3cml0YWJsZQorKyMKKysjIEZ1cnRoZXJtb3JlLCBvbiBEZWJpYW4sIG9ubHkgdGVzdCB0aGUgc2l0ZSBkaXJlY3RvcmllcworKyMgKGluc3RhbGxzaXRlKiwgZXhwYW5kZWQgdG8gL3Vzci9sb2NhbC97c2hhcmUsbGlifS9wZXJsKSwKKysjIG5vdCB0aGUgY29yZSBvbmVzIAorKyMgKGluc3RhbGwqbGliLCBleHBhbmRlZCB0byAvdXNyL3tzaGFyZSxsaWJ9L3BlcmwpLgorKyMgV2UgcGFzcyBJTlNUQUxMRElSUz1zaXRlIGJ5IGRlZmF1bHQgdG8ga2VlcCBDUEFOIGZyb20gdG91Y2hpbmcKKysjIHRoZSBjb3JlIGRpcmVjdG9yaWVzLgorKworIHN1YiBfY2FuX3dyaXRlX3RvX2xpYmRpcnMgeworLSAgICByZXR1cm4gLXcgJENvbmZpZ3tpbnN0YWxscHJpdmxpYn0KKy0gICAgICAgICYmIC13ICRDb25maWd7aW5zdGFsbGFyY2hsaWJ9CistICAgICAgICAmJiAtdyAkQ29uZmlne2luc3RhbGxzaXRlbGlifQorLSAgICAgICAgJiYgLXcgJENvbmZpZ3tpbnN0YWxsc2l0ZWFyY2h9CisrICAgIHJldHVybiBfY2FuX3dyaXRlX3RvX3RoaXNfb3JfcGFyZW50KCRDb25maWd7aW5zdGFsbHNpdGVsaWJ9KQorKyAgICAgICAgJiYgX2Nhbl93cml0ZV90b190aGlzX29yX3BhcmVudCgkQ29uZmlne2luc3RhbGxzaXRlYXJjaH0pCisgfQorIAorIHN1YiBfdXNpbmdfaW5zdGFsbGJhc2UgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9jcGFuX2RlZmluc3RhbGxkaXJzLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW5fZGVmaW5zdGFsbGRpcnMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjUyOTUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9jcGFuX2RlZmluc3RhbGxkaXJzLmRpZmYKQEAgLTAsMCArMSwzNyBAQAorRnJvbSA1ZmYxZjIxNDg0YWFiNjhlZmUzMjFmZjRiYTVkMzU5MjhmNzJhZjk2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBUdWUsIDggTWFyIDIwMDUgMTk6MzA6MzggKzExMDAKK1N1YmplY3Q6IFByb3ZpZGUgYSBzZW5zaWJsZSBJTlNUQUxMRElSUyBkZWZhdWx0IGZvciBtb2R1bGVzIGluc3RhbGxlZCBmcm9tCisgQ1BBTi4KKworU29tZSBtb2R1bGVzIHdoaWNoIGFyZSBpbmNsdWRlZCBpbiBjb3JlIHNldCBJTlNUQUxMRElSUyA9PiAncGVybCcKK2V4cGxpY2l0bHkgaW4gTWFrZWZpbGUuUEwgb3IgQnVpbGQuUEwuICBUaGlzIG1ha2VzIHNlbnNlIGZvciB0aGUgbm9ybWFsIEBJTkMKK29yZGVyaW5nLCBidXQgbm90IG91cnMuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9jcGFuX2RlZmluc3RhbGxkaXJzLmRpZmYKKy0tLQorIGNwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0gfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbSBiL2NwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0KK2luZGV4IDkxOGUwMDkuLjMzMDU0Y2QgMTAwNjQ0CistLS0gYS9jcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtCisrKysgYi9jcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtCitAQCAtMTAyNCw3ICsxMDI0LDcgQEAgc3ViIGluaXQgeworICAgICBteV9wcm9tcHRfbG9vcChwcmVmZXJfaW5zdGFsbGVyID0+ICdNQicsICRtYXRjaGVyLCAnTUJ8RVVNTXxSQU5EJyk7CisgCisgICAgIGlmICghJG1hdGNoZXIgb3IgJ21ha2VwbF9hcmcgbWFrZV9hcmcnID1+IC8kbWF0Y2hlci8pIHsKKy0gICAgICAgIG15X2RmbHRfcHJvbXB0KG1ha2VwbF9hcmcgPT4gIiIsICRtYXRjaGVyKTsKKysgICAgICAgIG15X2RmbHRfcHJvbXB0KG1ha2VwbF9hcmcgPT4gIklOU1RBTExESVJTPXNpdGUiLCAkbWF0Y2hlcik7CisgICAgICAgICBteV9kZmx0X3Byb21wdChtYWtlX2FyZyA9PiAiIiwgJG1hdGNoZXIpOworICAgICAgICAgaWYgKCAkQ1BBTjo6Q29uZmlnLT57bWFrZXBsX2FyZ30gPX4gL0xJQlM9fElOQz0vICkgeworICAgICAgICAgICAgICRDUEFOOjpGcm9udGVuZC0+bXl3YXJuKAorQEAgLTEwNTYsNyArMTA1Niw3IEBAIHN1YiBpbml0IHsKKyAgICAgbXlfZGZsdF9wcm9tcHQobWFrZV9pbnN0YWxsX2FyZyA9PiAkQ1BBTjo6Q29uZmlnLT57bWFrZV9hcmd9IHx8ICIiLAorICAgICAgICAgICAgICAgICAgICAkbWF0Y2hlcik7CisgCistICAgIG15X2RmbHRfcHJvbXB0KG1idWlsZHBsX2FyZyA9PiAiIiwgJG1hdGNoZXIpOworKyAgICBteV9kZmx0X3Byb21wdChtYnVpbGRwbF9hcmcgPT4gIi0taW5zdGFsbGRpcnMgc2l0ZSIsICRtYXRjaGVyKTsKKyAgICAgbXlfZGZsdF9wcm9tcHQobWJ1aWxkX2FyZyA9PiAiIiwgJG1hdGNoZXIpOworIAorICAgICBpZiAoZXhpc3RzICRDUEFOOjpIYW5kbGVDb25maWc6OmtleXN7bWJ1aWxkX2luc3RhbGxfYnVpbGRfY29tbWFuZH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZGJfZmlsZV92ZXIuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZGJfZmlsZV92ZXIuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODBiZjExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9kYl9maWxlX3Zlci5kaWZmCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gMDE0MjFmOGE4MGQ1YzYyMzk1OTY5NWJhMmI4MTY3ZjMwMTEyZDMzMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAxNiBEZWMgMjAwNSAwMTozMjoxNCArMTEwMAorU3ViamVjdDogUmVtb3ZlIG92ZXJseSByZXN0cmljdGl2ZSBEQl9GaWxlIHZlcnNpb24gY2hlY2suCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvMzQwMDQ3CisKK1BhY2thZ2UgZGVwZW5kZW5jaWVzIGVuc3VyZSB0aGUgY29ycmVjdCBsaWJyYXJ5IGlzIGxpbmtlZCBhdCBydW4tdGltZS4KKworUGF0Y2gtTmFtZTogZGViaWFuL2RiX2ZpbGVfdmVyLmRpZmYKKy0tLQorIGNwYW4vREJfRmlsZS92ZXJzaW9uLmMgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9EQl9GaWxlL3ZlcnNpb24uYyBiL2NwYW4vREJfRmlsZS92ZXJzaW9uLmMKK2luZGV4IGUwMWY2ZjYuLjU0NGU2ZWUgMTAwNjQ0CistLS0gYS9jcGFuL0RCX0ZpbGUvdmVyc2lvbi5jCisrKysgYi9jcGFuL0RCX0ZpbGUvdmVyc2lvbi5jCitAQCAtNDgsNiArNDgsNyBAQCBfX2dldEJlcmtlbGV5REJJbmZvKCkKKyAKKyAgICAgKHZvaWQpZGJfdmVyc2lvbigmTWFqb3IsICZNaW5vciwgJlBhdGNoKSA7CisgCisrI2lmbmRlZiBERUJJQU4KKyAgICAgLyogQ2hlY2sgdGhhdCB0aGUgdmVyc2lvbnMgb2YgZGIuaCBhbmQgbGliZGIuYSBhcmUgdGhlIHNhbWUgKi8KKyAgICAgaWYgKE1ham9yICE9IERCX1ZFUlNJT05fTUFKT1IgfHwgTWlub3IgIT0gREJfVkVSU0lPTl9NSU5PUiApCisgCQkvKiB8fCBQYXRjaCAhPSBEQl9WRVJTSU9OX1BBVENIKSAqLworQEAgLTU1LDYgKzU2LDcgQEAgX19nZXRCZXJrZWxleURCSW5mbygpCisgCWNyb2FrKCJcbkRCX0ZpbGUgd2FzIGJ1aWxkIHdpdGggbGliZGIgdmVyc2lvbiAlZC4lZC4lZCxcbmJ1dCB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gcnVuIGl0IHdpdGggbGliZGIgdmVyc2lvbiAlZC4lZC4lZFxuIiwKKyAJCURCX1ZFUlNJT05fTUFKT1IsIERCX1ZFUlNJT05fTUlOT1IsIERCX1ZFUlNJT05fUEFUQ0gsIAorIAkJTWFqb3IsIE1pbm9yLCBQYXRjaCkgOworKyNlbmRpZiAvKiBERUJJQU4gKi8KKyAgICAgCisgICAgIC8qIGNoZWNrIHRoYXQgbGliZGIgaXMgcmVjZW50IGVub3VnaCAgLS0gd2UgbmVlZCAyLjMuNCBvciBncmVhdGVyICovCisgICAgIGlmIChNYWpvciA9PSAyICYmIChNaW5vciA8IDMgfHwgKE1pbm9yID09ICAzICYmIFBhdGNoIDwgNCkpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9kZXByZWNhdGUtd2l0aC1hcHQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZGVwcmVjYXRlLXdpdGgtYXB0LmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxZWU0YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZGVwcmVjYXRlLXdpdGgtYXB0LmRpZmYKQEAgLTAsMCArMSw1NiBAQAorRnJvbSBkZWY0YWEzODE3Zjk4YWFlNjI1ZTYwMWI3OTFlZjA2ODI3NmYwNWQ1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG9taW5pYyBIYXJncmVhdmVzIDxkb21AZWFydGgubGk+CitEYXRlOiBNb24sIDE3IE1heSAyMDEwIDEzOjIzOjA3ICswMzAwCitTdWJqZWN0OiBQb2ludCB1c2VycyB0byBEZWJpYW4gcGFja2FnZXMgb2YgZGVwcmVjYXRlZCBjb3JlIG1vZHVsZXMKKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy83NDc2MjgKKworU2V2ZXJhbCBtb2R1bGVzIGFyZSBiZWluZyBkZXByZWNhdGVkIHdpdGggcGVybCA1LjIwLgorVG8gZ2V0IGEgY2xlYW4gdHJhbnNpdGlvbiwgcGVybC9wZXJsLW1vZHVsZXMgaXMgZ29pbmcgdG8gcmVjb21tZW5kIHRoZQorc2VwYXJhdGUgRGViaWFuIHBhY2thZ2VzIG9mIHRoZXNlIGZvciBvbmUgcmVsZWFzZSBjeWNsZSBzbyB0aGF0IHRoZXkgd2lsbCBiZQorcHVsbGVkIGluIGJ5IGRlZmF1bHQgb24gdXBncmFkZXMuIFRoaXMgaXMgdGFraW5nIHBsYWNlIGZvciBwZXJsIDUuMjAvamVzc2llLgorCitIb3dldmVyLCBvbiBzeXN0ZW1zIGNvbmZpZ3VyZWQgdG8gaWdub3JlIHJlY29tbWVuZGF0aW9ucyB0aGUgZGVwcmVjYXRpb24KK3dhcm5pbmdzIHdpbGwgc3RpbGwgYmUgdXNlZnVsLCBzbyBtb2RpZnkgdGhlbSBzbGlnaHRseSB0byBwb2ludCB0byB0aGUKK3NlcGFyYXRlIHBhY2thZ2VzIGluc3RlYWQuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9kZXByZWNhdGUtd2l0aC1hcHQuZGlmZgorLS0tCisgbGliL2RlcHJlY2F0ZS5wbSB8IDE1ICsrKysrKysrKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZGVwcmVjYXRlLnBtIGIvbGliL2RlcHJlY2F0ZS5wbQoraW5kZXggNDdiYzExMi4uYjBjNjFkZiAxMDA2NDQKKy0tLSBhL2xpYi9kZXByZWNhdGUucG0KKysrKyBiL2xpYi9kZXByZWNhdGUucG0KK0BAIC03LDYgKzcsMTMgQEAgb3VyICRWRVJTSU9OID0gMC4wMzsKKyBvdXIgJUNvbmZpZzsKKyB1bmxlc3MgKCVDb25maWcpIHsgcmVxdWlyZSBDb25maWc7ICpDb25maWcgPSBcJUNvbmZpZzo6Q29uZmlnOyB9CisgCisrIyBEZWJpYW4tc3BlY2lmaWMgY2hhbmdlOiByZWNvbW1lbmQgdGhlIHNlcGFyYXRlIERlYmlhbiBwYWNrYWdlcyBvZgorKyMgZGVwcmVjYXRlZCBtb2R1bGVzIHdoZXJlIGF2YWlsYWJsZQorKworK291ciAlREVCSUFOX1BBQ0tBR0VTID0gKAorKyAgICAjIE5vbmUgZm9yIHRoZSBwZXJsIDUuMjIgY3ljbGUKKyspOworKworICMgVGhpcyBpc24ndCBhIHB1YmxpYyBBUEkuIEl0J3MgaW50ZXJuYWwgdG8gY29kZSBtYWludGFpbmVkIGJ5IHRoZSBwZXJsLXBvcnRlcnMKKyAjIElmIHlvdSB3b3VsZCBsaWtlIGl0IHRvIGJlIGEgcHVibGljIEFQSSwgcGxlYXNlIHNlbmQgYSBwYXRjaCB3aXRoCisgIyBkb2N1bWVudGF0aW9uIGFuZCB0ZXN0cy4gVW50aWwgdGhlbiwgaXQgbWF5IGNoYW5nZSB3aXRob3V0IHdhcm5pbmcuCitAQCAtNTgsOSArNjUsMTUgQEAgRU9NCisgCWlmIChkZWZpbmVkICRjYWxsZXJzX2JpdG1hc2sKKyAJICAgICYmICh2ZWMoJGNhbGxlcnNfYml0bWFzaywgJHdhcm5pbmdzOjpPZmZzZXRze2RlcHJlY2F0ZWR9LCAxKQorIAkJfHwgdmVjKCRjYWxsZXJzX2JpdG1hc2ssICR3YXJuaW5nczo6T2Zmc2V0c3thbGx9LCAxKSkpIHsKKy0JICAgIHdhcm4gPDwiRU9NIjsKKysJCWlmIChteSAkZGViID0gJERFQklBTl9QQUNLQUdFU3skcGFja2FnZX0pIHsKKysJCSAgICB3YXJuIDw8IkVPTSI7CisrJHBhY2thZ2Ugd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIFBlcmwgY29yZSBkaXN0cmlidXRpb24gaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS4gUGxlYXNlIGluc3RhbGwgdGhlIHNlcGFyYXRlICRkZWIgcGFja2FnZS4gSXQgaXMgYmVpbmcgdXNlZCBhdCAkY2FsbF9maWxlLCBsaW5lICRjYWxsX2xpbmUuCisrRU9NCisrCQl9IGVsc2UgeworKwkJICAgIHdhcm4gPDwiRU9NIjsKKyAkcGFja2FnZSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgUGVybCBjb3JlIGRpc3RyaWJ1dGlvbiBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLiBQbGVhc2UgaW5zdGFsbCBpdCBmcm9tIENQQU4uIEl0IGlzIGJlaW5nIHVzZWQgYXQgJGNhbGxfZmlsZSwgbGluZSAkY2FsbF9saW5lLgorIEVPTQorKwkJfQorIAl9CisgICAgIH0KKyB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RvY19pbmZvLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RvY19pbmZvLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlYTJlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZG9jX2luZm8uZGlmZgpAQCAtMCwwICsxLDM1IEBACitGcm9tIGUxOGY4MWU2OWM1NWQ2OThhYmQyOTNlNzEwNjNkNmI2YjI3NWNjMDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgMTggTWFyIDIwMDUgMjI6MjI6MjUgKzExMDAKK1N1YmplY3Q6IFJlcGxhY2UgZ2VuZXJpYyBtYW4oMSkgaW5zdHJ1Y3Rpb25zIHdpdGggRGViaWFuLXNwZWNpZmljIGluZm9ybWF0aW9uLgorCitJbmRpY2F0ZSB0aGF0IHRoZSB1c2VyIG5lZWRzIHRvIGluc3RhbGwgdGhlIHBlcmwtZG9jIHBhY2thZ2UuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9kb2NfaW5mby5kaWZmCistLS0KKyBwb2QvcGVybC5wb2QgfCAxMiArKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3BvZC9wZXJsLnBvZCBiL3BvZC9wZXJsLnBvZAoraW5kZXggMzY0ZTk1Ny4uZjk3ZTEwMyAxMDA2NDQKKy0tLSBhL3BvZC9wZXJsLnBvZAorKysrIGIvcG9kL3BlcmwucG9kCitAQCAtMjkxLDggKzI5MSwxNiBAQCBhdXggYzJwaCBoMnBoIGgyeHMgcGVybGJ1ZyBwbDJwbSBwb2QyaHRtbCBwb2QybWFuIHNwbGFpbiB4c3VicHAKKyAKKyA9Zm9yIGJ1aWxkdG9jIF9fRU5EX18KKyAKKy1PbiBhIFVuaXgtbGlrZSBzeXN0ZW0sIHRoZXNlIGRvY3VtZW50YXRpb24gZmlsZXMgd2lsbCB1c3VhbGx5IGFsc28gYmUKKy1hdmFpbGFibGUgYXMgbWFucGFnZXMgZm9yIHVzZSB3aXRoIHRoZSBGPG1hbj4gcHJvZ3JhbS4KKytPbiBEZWJpYW4gc3lzdGVtcywgeW91IG5lZWQgdG8gaW5zdGFsbCB0aGUgQjxwZXJsLWRvYz4gcGFja2FnZSB3aGljaAorK2NvbnRhaW5zIHRoZSBtYWpvcml0eSBvZiB0aGUgc3RhbmRhcmQgUGVybCBkb2N1bWVudGF0aW9uIGFuZCB0aGUKKytGPHBlcmxkb2M+IHByb2dyYW0uCisrCisrRXh0ZW5zaXZlIGFkZGl0aW9uYWwgZG9jdW1lbnRhdGlvbiBmb3IgUGVybCBtb2R1bGVzIGlzIGF2YWlsYWJsZSwgYm90aAorK3Rob3NlIGRpc3RyaWJ1dGVkIHdpdGggUGVybCBhbmQgdGhpcmQtcGFydHkgbW9kdWxlcyB3aGljaCBhcmUgcGFja2FnZWQKKytvciBsb2NhbGx5IGluc3RhbGxlZC4KKysKKytZb3Ugc2hvdWxkIGJlIGFibGUgdG8gdmlldyBQZXJsJ3MgZG9jdW1lbnRhdGlvbiB3aXRoIHlvdXIgbWFuKDEpCisrcHJvZ3JhbSBvciBwZXJsZG9jKDEpLgorIAorIFNvbWUgZG9jdW1lbnRhdGlvbiBpcyBub3QgYXZhaWxhYmxlIGFzIG1hbiBwYWdlcywgc28gaWYgYQorIGNyb3NzLXJlZmVyZW5jZSBpcyBub3QgZm91bmQgYnkgbWFuLCB0cnkgaXQgd2l0aCBMPHBlcmxkb2M+LiAgUGVybGRvYyBjYW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZW5jMnhzX2luYy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9lbmMyeHNfaW5jLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA3NGIyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZW5jMnhzX2luYy5kaWZmCkBAIC0wLDAgKzEsNzAgQEAKK0Zyb20gN2ZlNTlhM2QwNjAxYzZkODYzNGVhZTRmOTlkYWUzMDI0Y2QwMmE5MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogVHVlLCA4IE1hciAyMDA1IDE5OjMwOjM4ICsxMTAwCitTdWJqZWN0OiBUd2VhayBlbmMyeHMgdG8gZm9sbG93IHN5bWxpbmtzIGFuZCBpZ25vcmUgbWlzc2luZyBASU5DIGRpcmVjdG9yaWVzLgorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzI5MDMzNgorCistIGlnbm9yZSBtaXNzaW5nIGRpcmVjdG9yaWVzLAorLSBmb2xsb3cgc3ltbGlua3MgKC91c3Ivc2hhcmUvcGVybC81LjggLT4gNS44LjQpLgorLSBmaWx0ZXIgIi4iIG91dCB3aGVuIHJ1bm5pbmcgImVuYzJ4cyAtQyIsIGl0J3MgdW5uZWNlc3NhcnkgYW5kIGNhdXNlcworICBpc3N1ZXMgd2l0aCBmb2xsb3cgPT4gMSAoc2VlICM2MDM2ODYgYW5kIFtydC5jcGFuLm9yZyAjNjQ1ODVdKQorCitQYXRjaC1OYW1lOiBkZWJpYW4vZW5jMnhzX2luYy5kaWZmCistLS0KKyBjcGFuL0VuY29kZS9iaW4vZW5jMnhzIHwgOCArKysrLS0tLQorIHQvcG9ydGluZy9jdXN0b21pemVkLnQgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FbmNvZGUvYmluL2VuYzJ4cyBiL2NwYW4vRW5jb2RlL2Jpbi9lbmMyeHMKK2luZGV4IDE5ZjJiMmIuLjRkNjRlMzggMTAwNjQ0CistLS0gYS9jcGFuL0VuY29kZS9iaW4vZW5jMnhzCisrKysgYi9jcGFuL0VuY29kZS9iaW4vZW5jMnhzCitAQCAtOTQ0LDExICs5NDQsMTEgQEAgdXNlIHZhcnMgcXcoCisgc3ViIGZpbmRfZTJ4eworICAgICBldmFsIHsgcmVxdWlyZSBGaWxlOjpGaW5kOyB9OworICAgICBteSAoQGluYywgJWUyeF9kaXIpOworLSAgICBmb3IgbXkgJGluYyAoQElOQyl7CisrICAgIGZvciBteSAkaW5jIChncmVwIC1kLCBASU5DKXsKKyAgICAgcHVzaCBAaW5jLCAkaW5jIHVubGVzcyAkaW5jIGVxICcuJzsgI3NraXAgY3VycmVudCBkaXIKKyAgICAgfQorICAgICBGaWxlOjpGaW5kOjpmaW5kKAorLSAgICAgICAgIHN1YiB7CisrICAgICAgICAgeyB3YW50ZWQgPT4gc3ViIHsKKyAgICAgICAgICBteSAoJGRldiwkaW5vLCRtb2RlLCRubGluaywkdWlkLCRnaWQsJHJkZXYsJHNpemUsCisgICAgICAgICAgICAgICRhdGltZSwkbXRpbWUsJGN0aW1lLCRibGtzaXplLCRibG9ja3MpCisgICAgICAgICAgICAgID0gbHN0YXQoJF8pIG9yIHJldHVybjsKK0BAIC05NTgsNyArOTU4LDcgQEAgc3ViIGZpbmRfZTJ4eworICAgICAgICAgICAgICAkZTJ4X2RpcnskRmlsZTo6RmluZDo6ZGlyfSB8fD0gJG10aW1lOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm47CistICAgICAgICAgfSwgQGluYyk7CisrICAgICAgICAgfSwgZm9sbG93ID0+IDF9LCBAaW5jKTsKKyAgICAgd2FybiBqb2luKCJcbiIsIGtleXMgJWUyeF9kaXIpLCAiXG4iOworICAgICBmb3IgbXkgJGQgKHNvcnQgeyRlMnhfZGlyeyRhfSA8PT4gJGUyeF9kaXJ7JGJ9fSBrZXlzICVlMnhfZGlyKXsKKyAgICAgJF9FMlggPSAkZDsKK0BAIC0xMDI1LDcgKzEwMjUsNyBAQCBzdWIgbWFrZV9jb25maWdsb2NhbF9wbSB7CisgCSAgICAkTG9jYWxNb2R7JGVuY30gfHw9ICRtb2Q7CisgCX0KKyAgICAgfTsKKy0gICAgRmlsZTo6RmluZDo6ZmluZCh7d2FudGVkID0+ICR3YW50ZWR9LCBASU5DKTsKKysgICAgRmlsZTo6RmluZDo6ZmluZCh7d2FudGVkID0+ICR3YW50ZWQsIGZvbGxvdyA9PiAxfSwgZ3JlcCAtZCAmJiAhL15cLi8sIEBJTkMpOworICAgICAkX01vZExpbmVzID0gIiI7CisgICAgIGZvciBteSAkZW5jICggc29ydCBrZXlzICVMb2NhbE1vZCApIHsKKyAgICAgICAgICRfTW9kTGluZXMgLj0KK2RpZmYgLS1naXQgYS90L3BvcnRpbmcvY3VzdG9taXplZC50IGIvdC9wb3J0aW5nL2N1c3RvbWl6ZWQudAoraW5kZXggNDVmY2FmYi4uM2JkNmFkYiAxMDA2NDQKKy0tLSBhL3QvcG9ydGluZy9jdXN0b21pemVkLnQKKysrKyBiL3QvcG9ydGluZy9jdXN0b21pemVkLnQKK0BAIC0xMDEsOCArMTAxLDExIEBAIGZvcmVhY2ggbXkgJG1vZHVsZSAoIHNvcnQga2V5cyAlTW9kdWxlcyApIHsKKyAgICAgICBwcmludCAkZGF0YV9maCBqb2luKCcgJywgJG1vZHVsZSwgJGZpbGUsICRpZCksICJcbiI7CisgICAgICAgbmV4dDsKKyAgICAgfQorK1NLSVA6IHsKKysgICAgc2tpcCgiJGZpbGUgbW9kaWZpZWQgZm9yIERlYmlhbiIsIDEpIGlmICRmaWxlIGVxICdjcGFuL0VuY29kZS9iaW4vZW5jMnhzJzsKKyAgICAgbXkgJHNob3VsZF9iZSA9ICRjdXN0b21pc2VkeyAkbW9kdWxlIH0tPnsgJGZpbGUgfTsKKyAgICAgaXMoICRpZCwgJHNob3VsZF9iZSwgIlNIQSBmb3IgJGZpbGUgbWF0Y2hlcyBzdGFzaGVkIFNIQSIgKTsKKyt9CisgICB9CisgfQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9lcnJub192ZXIuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZXJybm9fdmVyLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNiNTljNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZXJybm9fdmVyLmRpZmYKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA4MjdlZWUyMjU4OTdjMzVlYzk3MTk0YTU5NzFiZjRiZmNmMjUwNzQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDE2IERlYyAyMDA1IDAxOjMyOjE0ICsxMTAwCitTdWJqZWN0OiBSZW1vdmUgRXJybm8gdmVyc2lvbiBjaGVjayBkdWUgdG8gdXBncmFkZSBwcm9ibGVtcyB3aXRoIGxvbmctcnVubmluZworIHByb2Nlc3Nlcy4KKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy8zNDMzNTEKKworUmVtb3ZlIHZlcnNpb24gY2hlY2sgd2hpY2ggY2FuIGNhdXNlIHByb2JsZW1zIGZvciBsb25nIHJ1bm5pbmcKK3Byb2Nlc3NlcyBlbWJlZGRpbmcgcGVybCB3aGVuIHVwZ3JhZGluZyB0byBhIG5ld2VyIHZlcnNpb24sCitjb21wYXRpYmxlLCBidXQgYnVpbHQgb24gYSBkaWZmZXJlbnQgbWFjaGluZS4KKworUGF0Y2gtTmFtZTogZGViaWFuL2Vycm5vX3Zlci5kaWZmCistLS0KKyBleHQvRXJybm8vRXJybm9fcG0uUEwgfCA1IC0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9leHQvRXJybm8vRXJybm9fcG0uUEwgYi9leHQvRXJybm8vRXJybm9fcG0uUEwKK2luZGV4IGM2YmZhMDYuLjUxOWU1YzcgMTAwNjQ0CistLS0gYS9leHQvRXJybm8vRXJybm9fcG0uUEwKKysrKyBiL2V4dC9FcnJuby9FcnJub19wbS5QTAorQEAgLTI3OCwxMyArMjc4LDggQEAgc3ViIHdyaXRlX2Vycm5vX3BtIHsKKyAKKyBwYWNrYWdlIEVycm5vOworIHJlcXVpcmUgRXhwb3J0ZXI7CistdXNlIENvbmZpZzsKKyB1c2Ugc3RyaWN0OworIAorLSJcJENvbmZpZ3snYXJjaG5hbWUnfS1cJENvbmZpZ3snb3N2ZXJzJ30iIGVxCistIiRhcmNobmFtZS0kQ29uZmlneydvc3ZlcnMnfSIgb3IKKy0JZGllICJFcnJubyBhcmNoaXRlY3R1cmUgKCRhcmNobmFtZS0kQ29uZmlneydvc3ZlcnMnfSkgZG9lcyBub3QgbWF0Y2ggZXhlY3V0YWJsZSBhcmNoaXRlY3R1cmUgKFwkQ29uZmlneydhcmNobmFtZSd9LVwkQ29uZmlneydvc3ZlcnMnfSkiOworLQorIG91ciBcJFZFUlNJT04gPSAiJFZFUlNJT04iOworIFwkVkVSU0lPTiA9IGV2YWwgXCRWRVJTSU9OOworIG91ciBcQElTQSA9ICdFeHBvcnRlcic7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2V4dHV0aWxzX3NldF9saWJwZXJsX3BhdGguZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZXh0dXRpbHNfc2V0X2xpYnBlcmxfcGF0aC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjRiZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2V4dHV0aWxzX3NldF9saWJwZXJsX3BhdGguZGlmZgpAQCAtMCwwICsxLDM3IEBACitGcm9tIDQzMTI3NTA3OGIwNDkwZDJlMDkyNDQyZDk1ODJiZTA2YmI5NWIzNTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBTYXQsIDEwIE1heSAyMDE0IDIzOjM0OjE0ICswMzAwCitTdWJqZWN0OiBFVTpNTTogc2V0IGxvY2F0aW9uIG9mIGxpYnBlcmwuYSB1bmRlciAvdXNyL2xpYgorCitUaGUgRGViaWFuIHBhY2thZ2luZyBtb3ZlcyBsaWJwZXJsLmEgYSBjb3VwbGUgb2YgbGV2ZWxzIHVwIGZyb20gdGhlCitDT1JFIGRpcmVjdG9yeSB0byBtYXRjaCBvdGhlciBzdGF0aWMgbGlicmFyaWVzLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vZXh0dXRpbHNfc2V0X2xpYnBlcmxfcGF0aC5kaWZmCistLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSB8IDIgKy0KKyBwcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK2luZGV4IDVmMWI4N2YuLjU3MGE2MzEgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK0BAIC0yNTA1LDcgKzI1MDUsNyBAQCBNQVBfUFJFTElCUyAgID0gJENvbmZpZ3twZXJsbGlic30gJENvbmZpZ3tjcnlwdGxpYn0KKyAJKCRscGVybCA9ICRsaWJwZXJsKSA9fiBzL1wkXChBXCkvJHNlbGYtPntMSUJfRVhUfS87CisgICAgIH0KKyAgICAgdW5sZXNzICgkbGlicGVybCAmJiAtZiAkbHBlcmwpIHsgIyBJbHlhJ3MgY29kZS4uLgorLQlteSAkZGlyID0gJHNlbGYtPntQRVJMX1NSQ30gfHwgIiRzZWxmLT57UEVSTF9BUkNITElCfS9DT1JFIjsKKysJbXkgJGRpciA9ICRzZWxmLT57UEVSTF9TUkN9IHx8ICIkc2VsZi0+e1BFUkxfQVJDSExJQn0vLi4vLi4iOworIAkkZGlyID0gIiRzZWxmLT57UEVSTF9BUkNITElCfS8uLiIgaWYgJHNlbGYtPntVTklOU1RBTExFRF9QRVJMfTsKKyAJJGxpYnBlcmwgfHw9ICJsaWJwZXJsJHNlbGYtPntMSUJfRVhUfSI7CisgCSRsaWJwZXJsICAgPSAiJGRpci8kbGlicGVybCI7CitkaWZmIC0tZ2l0IGEvcHAuYyBiL3BwLmMKK2luZGV4IDQyZjE1NmEuLjc3YzEyNzkgMTAwNjQ0CistLS0gYS9wcC5jCisrKysgYi9wcC5jCitAQCAtMSw0ICsxLDQgQEAKKy0vKiAgICBwcC5jCisrIC8qICAgIHBwLmMKKyAgKgorICAqICAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKyAgKiAgICAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IGJ5IExhcnJ5IFdhbGwgYW5kIG90aGVycwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9mYWtlcm9vdC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9mYWtlcm9vdC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNDYxY2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2Zha2Vyb290LmRpZmYKQEAgLTAsMCArMSw0MiBAQAorRnJvbSAyN2FlN2IxODA3OGQ4MDFhMmM5NDNhYTZkZTJmN2U5ODA4MTc3MjUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDE4IE1hciAyMDA1IDIyOjIyOjI1ICsxMTAwCitTdWJqZWN0OiBQb3N0cG9uZSBMRF9MSUJSQVJZX1BBVEggZXZhbHVhdGlvbiB0byB0aGUgYmluYXJ5IHRhcmdldHMuCisKK01vZGlmeSB0aGUgc2V0dGluZyBvZiBMRF9MSUJSQVJZX1BBVEggdG8gYXBwZW5kIHByZS1leGlzdGluZyB2YWx1ZXMgYXQgdGhlCit0aW1lIHRoZSBydWxlIGlzIGV2YWx1YXRlZCByYXRoZXIgdGhhbiB3aGVuIHRoZSBNYWtlZmlsZSBpcyBjcmVhdGVkLgorCitUaGlzIGlzIHJlcXVpcmVkIHdoZW4gYnVpbGRpbmcgcGFja2FnZXMgd2l0aCBkcGtnLWJ1aWxkcGFja2FnZSBhbmQgZmFrZXJvb3QsCitzaW5jZSBmYWtlcm9vdCAod2hpY2ggbm93IHNldHMgTERfTElCUkFSWV9QQVRIKSBpcyBub3QgdXNlZCBmb3IgdGhlICJidWlsZCIKK3J1bGUgd2hlcmUgdGhlIE1ha2VmaWxlIGlzIGNyZWF0ZWQsIGJ1dCBpcyBmb3IgdGhlIGNsZWFuL2JpbmFyeSogdGFyZ2V0cy4KKworUGF0Y2gtTmFtZTogZGViaWFuL2Zha2Vyb290LmRpZmYKKy0tLQorIE1ha2VmaWxlLlNIIHwgNyArKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLlNIIGIvTWFrZWZpbGUuU0gKK2luZGV4IDAzNGQ4MTIuLjA0ZGQ3ZDUgMTAwNzU1CistLS0gYS9NYWtlZmlsZS5TSAorKysrIGIvTWFrZWZpbGUuU0gKK0BAIC0zOSwxMCArMzksNyBAQCBjYXNlICIkdXNlc2hycGxpYiIgaW4KKyB0cnVlKQorIAkjIFByZWZpeCBhbGwgcnVucyBvZiAnbWluaXBlcmwnIGFuZCAncGVybCcgd2l0aAorIAkjICRsZGxpYnB0aCBzbyB0aGF0IC4vcGVybCBmaW5kcyAqdGhpcyogc2hhcmVkIGxpYnBlcmwuCistCWNhc2UgIiRMRF9MSUJSQVJZX1BBVEgiIGluCistCScnKSAgbGRsaWJwdGg9IkxEX0xJQlJBUllfUEFUSD1gIHF1b3RlICIkcHdkIiBgIiA7OworLQkqKSAgIGxkbGlicHRoPSJMRF9MSUJSQVJZX1BBVEg9YCBxdW90ZSAiJHB3ZCIgYDpgIHF1b3RlICIkTERfTElCUkFSWV9QQVRIIiBgIiA7OworLQllc2FjCisrCWxkbGlicHRoPSJMRF9MSUJSQVJZX1BBVEg9YCBxdW90ZSAiJHB3ZCIgYCInJCR7TERfTElCUkFSWV9QQVRIOis6fSQkTERfTElCUkFSWV9QQVRIJworIAorIAlwbGRsZmxhZ3M9IiRjY2NkbGZsYWdzIgorIAlzdGF0aWNfbGRmbGFncz0nJworQEAgLTExMyw3ICsxMTAsNyBAQCB0cnVlKQorIAkgICAgOzsKKyAJZXNhYworIAljYXNlICIkbGRsaWJwdGhuYW1lIiBpbgorLQknJykgOzsKKysJJyd8TERfTElCUkFSWV9QQVRIKSA7OworIAkqKQorIAkgICAgY2FzZSAiJG9zbmFtZSIgaW4KKyAJICAgIG9zMikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZmluZF9odG1sMnRleHQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZmluZF9odG1sMnRleHQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzE5ZTc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maW5kX2h0bWwydGV4dC5kaWZmCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gYzgxZGJkZWRmZjllOWI0ZmI3NWFjMDI4YWE3MTg4MzhjMDI5MmQyZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJlYXMgTWFyc2Noa2UgPGFuZHJlYXMubWFyc2Noa2VAZ29vZ2xlbWFpbC5jb20+CitEYXRlOiBTYXQsIDE3IFNlcCAyMDExIDExOjM4OjQyICswMTAwCitTdWJqZWN0OiBDb25maWd1cmUgQ1BBTjo6RGlzdHJpYnV0aW9uIHdpdGggY29ycmVjdCBuYW1lIG9mIGh0bWwydGV4dAorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzY0MDQ3OQorUGF0Y2gtTmFtZTogZGViaWFuL2ZpbmRfaHRtbDJ0ZXh0LmRpZmYKKworSWYgeW91IHVzZSBjcGFuIGZyb20gRGViaWFuIHlvdSB1c3VhbGx5IHdpbmQgdXAgdHJ5aW5nIHRvIHJlYWQgb25saW5lCitkb2N1bWVudGF0aW9uIHRocm91Z2ggaXQuIFVuZm9ydHVuYXRlbHkgY3BhbiBjYW4ndCBmaW5kIHRoZQoraHRtbDJ0ZXh0LnBsIHNjcmlwdCBldmVuIHRob3VnaCBpdCBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIERlYmlhbgorcGFja2FnZSAnaHRtbDJ0ZXh0Jy4KKworUGxlYXNlIHNlZSB0aGUgYXR0YWNoZWQgcGF0Y2ggZm9yIGEgcXVpY2sgZml4IG9mIHRoaXMgaXNzdWUuCisKK1tNYWludGFpbmVyJ3Mgbm90ZTogaHRtbDJ0ZXh0IGluIERlYmlhbiBpcyBub3QgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24KK2FzIHRoZSBodG1sMnRleHQucGwgd2hpY2ggaXMgZXhwZWN0ZWQsIGJ1dCBzaG91bGQgcHJvdmlkZSBzaW1pbGFyCitmdW5jdGlvbmFsaXR5XS4KKy0tLQorIGNwYW4vQ1BBTi9saWIvQ1BBTi9EaXN0cmlidXRpb24ucG0gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0NQQU4vbGliL0NQQU4vRGlzdHJpYnV0aW9uLnBtIGIvY3Bhbi9DUEFOL2xpYi9DUEFOL0Rpc3RyaWJ1dGlvbi5wbQoraW5kZXggMDkyYjc4MS4uNWMyYmFlMSAxMDA2NDQKKy0tLSBhL2NwYW4vQ1BBTi9saWIvQ1BBTi9EaXN0cmlidXRpb24ucG0KKysrKyBiL2NwYW4vQ1BBTi9saWIvQ1BBTi9EaXN0cmlidXRpb24ucG0KK0BAIC00MDk5LDcgKzQwOTksNyBAQCBzdWIgX2Rpc3BsYXlfdXJsIHsKKyAgICAgICBpZiAkQ1BBTjo6REVCVUc7CisgCisgICAgICMgc2hvdWxkIHdlIGRlZmluZSBpdCBpbiB0aGUgY29uZmlnIGluc3RlYWQ/CistICAgIG15ICRodG1sX2NvbnZlcnRlciA9ICJodG1sMnRleHQucGwiOworKyAgICBteSAkaHRtbF9jb252ZXJ0ZXIgPSAiaHRtbDJ0ZXh0IjsKKyAKKyAgICAgbXkgJHdlYl9icm93c2VyID0gJENQQU46OkNvbmZpZy0+eydseW54J30gfHwgdW5kZWY7CisgICAgIG15ICR3ZWJfYnJvd3Nlcl9vdXQgPSAkd2ViX2Jyb3dzZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvZG9jdW1lbnRfbWFrZW1ha2VyX2NjZmxhZ3MuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvZG9jdW1lbnRfbWFrZW1ha2VyX2NjZmxhZ3MuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWE5MjcxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9kb2N1bWVudF9tYWtlbWFrZXJfY2NmbGFncy5kaWZmCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gOWZhZjZkY2MzYTVjNDE1NDQ4NGQ4MTJlYjNjYzNkZDc4YjM1NTYzYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IE1vbiwgMzAgTWF5IDIwMTEgMjI6NTQ6MjQgKzAzMDAKK1N1YmplY3Q6IERvY3VtZW50IHRoYXQgQ0NGTEFHUyBzaG91bGQgaW5jbHVkZSAkQ29uZmlne2NjZmxhZ3N9CisKK0J1ZzogaHR0cHM6Ly9ydC5jcGFuLm9yZy9QdWJsaWMvQnVnL0Rpc3BsYXkuaHRtbD9pZD02ODYxMworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy82Mjg1MjIKKworQ29tcGlsaW5nIFhTIGV4dGVuc2lvbnMgd2l0aG91dCAkQ29uZmlne2NjZmxhZ3N9IGNhbiBicmVhayB0aGUKK2JpbmFyeSBpbnRlcmZhY2Ugb24gc29tZSBwbGF0Zm9ybXMuCisKK1BhdGNoLU5hbWU6IGZpeGVzL2RvY3VtZW50X21ha2VtYWtlcl9jY2ZsYWdzLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIucG0gfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbQoraW5kZXggZmU5NWIyNy4uOTA0MDNlOCAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIucG0KK0BAIC0xNzc0LDYgKzE3NzQsMTAgQEAgY3VycmVudGx5IHVzZWQgYnkgTWFrZU1ha2VyIGJ1dCBtYXkgYmUgaGFuZHkgaW4gTWFrZWZpbGUuUExzLgorIFN0cmluZyB0aGF0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGNvbXBpbGVyIGNhbGwgY29tbWFuZCBsaW5lIGJldHdlZW4KKyB0aGUgYXJndW1lbnRzIElOQyBhbmQgT1BUSU1JWkUuCisgCisrVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGFrZW4gZnJvbSAkQ29uZmlne2NjZmxhZ3N9LiBXaGVuIG92ZXJyaWRpbmcKKytDQ0ZMQUdTLCBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aGUgJENvbmZpZ3tjY2ZsYWdzfSBzZXR0aW5ncyB0byBhdm9pZAorK2JpbmFyeSBpbmNvbXBhdGliaWxpdGllcy4KKysKKyA9aXRlbSBDT05GSUcKKyAKKyBBcnJheXJlZi4gRS5nLiBbcXcoYXJjaG5hbWUgbWFuZXh0KV0gZGVmaW5lcyBBUkNITkFNRSAmIE1BTkVYVCBmcm9tCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL21lbW9pemVfc3RvcmFibGVfbnN0b3JlLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL21lbW9pemVfc3RvcmFibGVfbnN0b3JlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI1Zjk2MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvbWVtb2l6ZV9zdG9yYWJsZV9uc3RvcmUuZGlmZgpAQCAtMCwwICsxLDExMCBAQAorRnJvbSA1NWQ0MzBlYjAyZmMxMTY1ODE4NDczMDRjYTIwMzIxNjg3OTc4MjY5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm9uYXRoYW4gTmllZGVyIDxqcm5pZWRlckBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI3IEp1bCAyMDEyIDEwOjM1OjA3IC0wNTAwCitTdWJqZWN0OiBNZW1vaXplOjpTdG9yYWJsZTogcmVzcGVjdCAnbnN0b3JlJyBvcHRpb24gbm90IHJlc3BlY3RlZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitNZW1vaXplKDNwZXJsKSBzYXlzOgorCisgICAgICAgICAgICAgICAgdGllIG15ICVjYWNoZSA9PiAnTWVtb2l6ZTo6U3RvcmFibGUnLCAkZmlsZW5hbWUsICduc3RvcmUnOworICAgICAgICAgICAgICAgIG1lbW9pemUgJ2Z1bmN0aW9uJywgU0NBTEFSX0NBQ0hFID0+IFtIQVNIID0+IFwlY2FjaGVdOworCisgICAgICAgIEluY2x1ZGUgdGhlIOKAmG5zdG9yZeKAmSBvcHRpb24gdG8gaGF2ZSB0aGUgIlN0b3JhYmxlIiBkYXRhYmFzZQorICAgICAgICB3cml0dGVuIGluIOKAmG5ldHdvcmsgb3JkZXLigJkuICAoU2VlIFN0b3JhYmxlIGZvciBtb3JlIGRldGFpbHMKKyAgICAgICAgYWJvdXQgdGhpcy4pCisKK0luIGZhY3QgdGhlICJuc3RvcmUiIG9wdGlvbiBkb2VzIG5vIHN1Y2ggdGhpbmcuICBPcHRpb24gcGFyc2luZyBsb29rcworbGlrZSB0aGlzOgorCisgICAgICAgIEBvcHRpb25ze0BffSA9ICgpOworCiskc2VsZi0+e09QVElPTlN9eyduc3RvcmUnfSBpcyBhY2NvcmRpbmdseSBzZXQgdG8gdW5kZWYuICBMYXRlcgorTWVtb2l6ZTo6U3RvcmFibGUgY2hlY2tzIGlmIHRoZSBvcHRpb24gaXMgdHJ1ZSwgYW5kIHNpbmNlIHVuZGVmIGlzCitub3QgdHJ1ZSwgdGhlICJlbHNlIiBicmFuY2ggaXMgYWx3YXlzIHRha2VuLgorCisgICAgICAgIGlmICgkc2VsZi0+e09QVElPTlN9eyduc3RvcmUnfSkgeworICAgICAgICAgICAgICAgIFN0b3JhYmxlOjpuc3RvcmUoJHNlbGYtPntIfSwgJHNlbGYtPntGSUxFTkFNRX0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFN0b3JhYmxlOjpzdG9yZSgkc2VsZi0+e0h9LCAkc2VsZi0+e0ZJTEVOQU1FfSk7CisgICAgICAgIH0KKworQ29ycmVjdGluZyB0aGUgY29uZGl0aW9uIHRvIChleGlzdHMgJHNlbGYtPntPUFRJT05TfXsnbnN0b3JlJ30pIGZpeGVzCitpdC4KKworTm90aWNlZCBiZWNhdXNlIGdpdC1zdm4sIHdoaWNoIHVzZXMgdGhlICduc3RvcmUnIG9wdGlvbiBmb3IgaXRzCitvbi1kaXNrIGNhY2hlcywgd2FzIHByb2R1Y2luZworCisgICAgICAgIEJ5dGUgb3JkZXIgaXMgbm90IGNvbXBhdGlibGUgYXQgLi4vLi4vbGliL1N0b3JhYmxlLnBtCisKK3doZW4gcnVuIHVzaW5nIGEgcGVybCB3aXRoIGEgZGlmZmVyZW50IGludGVnZXIgc2l6ZSAoYW5kIGhlbmNlCitieXRlb3JkZXIpLgorCitSZXBvcnRlZCBieSBUaW0gUmV0b3V0IChSVCM3Nzc5MCkKKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy81ODc2NTAKK0J1ZzogaHR0cHM6Ly9ydC5jcGFuLm9yZy9QdWJsaWMvQnVnL0Rpc3BsYXkuaHRtbD9pZD03Nzc5MAorRm9yd2FyZGVkOiBodHRwczovL3J0LmNwYW4ub3JnL1B1YmxpYy9CdWcvRGlzcGxheS5odG1sP2lkPTc3NzkwCitQYXRjaC1OYW1lOiBmaXhlcy9tZW1vaXplX3N0b3JhYmxlX25zdG9yZS5kaWZmCistLS0KKyBjcGFuL01lbW9pemUvTWVtb2l6ZS9TdG9yYWJsZS5wbSB8ICAyICstCisgY3Bhbi9NZW1vaXplL3QvdGllX3N0b3JhYmxlLnQgICAgfCAyNCArKysrKysrKysrKysrKysrKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL01lbW9pemUvTWVtb2l6ZS9TdG9yYWJsZS5wbSBiL2NwYW4vTWVtb2l6ZS9NZW1vaXplL1N0b3JhYmxlLnBtCitpbmRleCAxMzE0Nzk3Li44Nzg3NmYyIDEwMDY0NAorLS0tIGEvY3Bhbi9NZW1vaXplL01lbW9pemUvU3RvcmFibGUucG0KKysrKyBiL2NwYW4vTWVtb2l6ZS9NZW1vaXplL1N0b3JhYmxlLnBtCitAQCAtNTUsNyArNTUsNyBAQCBzdWIgREVTVFJPWSB7CisgICByZXF1aXJlIENhcnAgaWYgJFZlcmJvc2U7CisgICBteSAkc2VsZj0gc2hpZnQ7CisgICBwcmludCBTVERFUlIgIk1lbW9pemU6OlN0b3JhYmxlOjpERVNUUk9ZKEBfKVxuIiBpZiAkVmVyYm9zZTsKKy0gIGlmICgkc2VsZi0+e09QVElPTlN9eyduc3RvcmUnfSkgeworKyAgaWYgKGV4aXN0cyAkc2VsZi0+e09QVElPTlN9eyduc3RvcmUnfSkgeworICAgICBTdG9yYWJsZTo6bnN0b3JlKCRzZWxmLT57SH0sICRzZWxmLT57RklMRU5BTUV9KTsKKyAgIH0gZWxzZSB7CisgICAgIFN0b3JhYmxlOjpzdG9yZSgkc2VsZi0+e0h9LCAkc2VsZi0+e0ZJTEVOQU1FfSk7CitkaWZmIC0tZ2l0IGEvY3Bhbi9NZW1vaXplL3QvdGllX3N0b3JhYmxlLnQgYi9jcGFuL01lbW9pemUvdC90aWVfc3RvcmFibGUudAoraW5kZXggZGUzYjhkYy4uYTYyNDIzOCAxMDA2NDQKKy0tLSBhL2NwYW4vTWVtb2l6ZS90L3RpZV9zdG9yYWJsZS50CisrKysgYi9jcGFuL01lbW9pemUvdC90aWVfc3RvcmFibGUudAorQEAgLTMxLDE4ICszMSwzNCBAQCBpZiAoJEApIHsKKyAgIGV4aXQgMDsKKyB9CisgCistcHJpbnQgIjEuLjRcbiI7CisrcHJpbnQgIjEuLjlcbiI7CisgCisgJGZpbGUgPSAic3RvcmFibGUkJCI7CisgMSB3aGlsZSB1bmxpbmsgJGZpbGU7CisgdHJ5b3V0KCdNZW1vaXplOjpTdG9yYWJsZScsICRmaWxlLCAxKTsgICMgVGVzdCAxLi40CisgMSB3aGlsZSB1bmxpbmsgJGZpbGU7CisrdHJ5b3V0KCdNZW1vaXplOjpTdG9yYWJsZScsICRmaWxlLCA1LCAnbnN0b3JlJyk7ICAjIFRlc3QgNS4uOAorK2Fzc2VydF9uZXRvcmRlcigkZmlsZSwgOSk7ICAjIFRlc3QgOQorKzEgd2hpbGUgdW5saW5rICRmaWxlOworKworKworK3N1YiBhc3NlcnRfbmV0b3JkZXIgeworKyAgbXkgKCRmaWxlLCAkdGVzdG5vKSA9IEBfOworKworKyAgbXkgJG5ldG9yZGVyID0gU3RvcmFibGU6OmZpbGVfbWFnaWMoJGZpbGUpLT57J25ldG9yZGVyJ307CisrICBwcmludCAoJG5ldG9yZGVyID8gIm9rICR0ZXN0bm9cbiIgOiAibm90IG9rICR0ZXN0bm9cbiIpOworK30KKyAKKyBzdWIgdHJ5b3V0IHsKKy0gIG15ICgkdGllcGFjaywgJGZpbGUsICR0ZXN0bm8pID0gQF87CisrICBteSAoJHRpZXBhY2ssICRmaWxlLCAkdGVzdG5vLCAkb3B0aW9uKSA9IEBfOworIAorLSAgdGllIG15ICVjYWNoZSA9PiAkdGllcGFjaywgJGZpbGUKKy0gICAgb3IgZGllICQhOworKyAgaWYgKGRlZmluZWQgJG9wdGlvbikgeworKyAgICB0aWUgbXkgJWNhY2hlID0+ICR0aWVwYWNrLCAkZmlsZSwgJG9wdGlvbgorKyAgICAgIG9yIGRpZSAkITsKKysgIH0gZWxzZSB7CisrICAgIHRpZSBteSAlY2FjaGUgPT4gJHRpZXBhY2ssICRmaWxlCisrICAgICAgb3IgZGllICQhOworKyAgfQorIAorICAgbWVtb2l6ZSAnYzUnLCAKKyAgIFNDQUxBUl9DQUNIRSA9PiBbSEFTSCA9PiBcJWNhY2hlXSwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvbmV0X3NtdHBfZG9jcy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9uZXRfc210cF9kb2NzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzMTk3MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvbmV0X3NtdHBfZG9jcy5kaWZmCkBAIC0wLDAgKzEsMjUgQEAKK0Zyb20gZmEwODVmZWRkOWM0MDZlZGNkNGExYTI1NmMwMjVkNWZmN2Y2YzZkZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogVGh1LCAyMCBTZXAgMjAwNyAxOTo0NzoxNCArMTAwMAorU3ViamVjdDogRG9jdW1lbnQgdGhlIE5ldDo6U01UUCAnUG9ydCcgb3B0aW9uCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvMTAwMTk1CitCdWc6IGh0dHA6Ly9ydC5jcGFuLm9yZy9QdWJsaWMvQnVnL0Rpc3BsYXkuaHRtbD9pZD0zNjAzOAorCitQYXRjaC1OYW1lOiBmaXhlcy9uZXRfc210cF9kb2NzLmRpZmYKKy0tLQorIGNwYW4vbGlibmV0L2xpYi9OZXQvU01UUC5wbSB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9saWJuZXQvbGliL05ldC9TTVRQLnBtIGIvY3Bhbi9saWJuZXQvbGliL05ldC9TTVRQLnBtCitpbmRleCBhZmQwMTdhLi42YWU3ZDllIDEwMDY0NAorLS0tIGEvY3Bhbi9saWJuZXQvbGliL05ldC9TTVRQLnBtCisrKysgYi9jcGFuL2xpYm5ldC9saWIvTmV0L1NNVFAucG0KK0BAIC03MzgsNiArNzM4LDcgQEAgTmV0OjpTTVRQIHdpbGwgYXR0ZW1wdCB0byBleHRyYWN0IHRoZSBhZGRyZXNzIGZyb20gdGhlIHZhbHVlIHBhc3NlZC4KKyAKKyBCPERlYnVnPiAtIEVuYWJsZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KKyAKKytCPFBvcnQ+IC0gU2VsZWN0IGEgcG9ydCBvbiB0aGUgcmVtb3RlIGhvc3QgdG8gY29ubmVjdCB0byAoZGVmYXVsdCBpcyAyNSkKKyAKKyBFeGFtcGxlOgorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wZXJsLUNubi5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wZXJsLUNubi5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NTY0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BlcmwtQ25uLmRpZmYKQEAgLTAsMCArMSw3MyBAQAorRnJvbSAwZWNmODNmMjU5ZGIwOWNiMzhjYjM3YzliMjJlNzJiZTE4NWFmYThmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSHVnbyB2YW4gZGVyIFNhbmRlbiA8aHZAY3J5cHQub3JnPgorRGF0ZTogVGh1LCAxMSBKdW4gMjAxNSAxMjoyNTo0MCArMDEwMAorU3ViamVjdDogZml4IC1Dbm4gcGFyc2luZworCitDb21taXQgMjJmZjMxMzA2OCBmb3IgW3BlcmwgIzEyMzgxNF0gaW5hZHZlcnRlbnRseSBjaGFuZ2VkIHRoZSBsb2dpYyB3aGVuCitwYXJzaW5nIGEgbnVtZXJpYyBwYXJhbWV0ZXIgdG8gdGhlIC1DIG9wdGlvbiwgc3VjaCB0aGF0IHRoZSBzdWNjZXNzZnVsbHkKK3BhcnNlZCBudW1iZXIgd2FzIG5vdCBzYXZlZCBhcyB0aGUgb3B0aW9uIHZhbHVlIGlmIGl0IHBhcnNlZCB0byB0aGUgZW5kCitvZiB0aGUgYXJndW1lbnQuCisKK0J1ZzogaHR0cHM6Ly9ydC5wZXJsLm9yZy9UaWNrZXQvRGlzcGxheS5odG1sP2lkPTEyNTM4MQorQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzg4NjM2CitPcmlnaW46IHVwc3RyZWFtLCBodHRwOi8vcGVybDUuZ2l0LnBlcmwub3JnL3BlcmwuZ2l0L2NvbW1pdC84OWQ4NGZmOTY1CitQYXRjaC1OYW1lOiBmaXhlcy9wZXJsLUNubi5kaWZmCistLS0KKyB0L3J1bi9zd2l0Y2hDLnQgfCAgNyArKysrKystCisgdXRpbC5jICAgICAgICAgIHwgMTcgKysrKysrKystLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdC9ydW4vc3dpdGNoQy50IGIvdC9ydW4vc3dpdGNoQy50CitpbmRleCBmNmFhODY4Li40ZjYzYzNiIDEwMDY0NAorLS0tIGEvdC9ydW4vc3dpdGNoQy50CisrKysgYi90L3J1bi9zd2l0Y2hDLnQKK0BAIC0xMSw3ICsxMSw3IEBAIEJFR0lOIHsKKyAgICAgc2tpcF9hbGxfaWZfbWluaXBlcmwoJy1DIGFuZCAkRU5We1BFUkxfVU5JQ09ERX0gYXJlIGRpc2FibGVkIG9uIG1pbmlwZXJsJyk7CisgfQorIAorLXBsYW4odGVzdHMgPT4gMTMpOworK3BsYW4odGVzdHMgPT4gMTQpOworIAorIG15ICRyOworIAorQEAgLTI1LDYgKzI1LDExIEBAICRyID0gcnVucGVybCggc3dpdGNoZXMgPT4gWyAnLUNPJywgJy13JyBdLAorICAgICAgICAgICAgICAgc3RkZXJyICAgPT4gMSApOworIGxpa2UoICRyLCBxci9eJGIoPzpccj9cbik/JC9zLCAnLUNPOiBubyB3YXJuaW5nIG9uIFVURi04IG91dHB1dCcgKTsKKyAKKyskciA9IHJ1bnBlcmwoIHN3aXRjaGVzID0+IFsgJy1DMicsICctdycgXSwKKysJICAgICAgcHJvZyAgICAgPT4gJ3ByaW50IGNocigyNTYpJywKKysgICAgICAgICAgICAgIHN0ZGVyciAgID0+IDEgKTsKKytsaWtlKCAkciwgcXIvXiRiKD86XHI/XG4pPyQvcywgJy1DMjogbm8gd2FybmluZyBvbiBVVEYtOCBvdXRwdXQnICk7CisrCisgU0tJUDogeworICAgICBpZiAoZXhpc3RzICRFTlZ7UEVSTF9VTklDT0RFfSAmJgorIAkoJEVOVntQRVJMX1VOSUNPREV9IGVxICIiIHx8ICRFTlZ7UEVSTF9VTklDT0RFfSA9fiAvW1NPXS8pKSB7CitkaWZmIC0tZ2l0IGEvdXRpbC5jIGIvdXRpbC5jCitpbmRleCA4Y2Y2MmY1Li5lZTIzMzE0IDEwMDY0NAorLS0tIGEvdXRpbC5jCisrKysgYi91dGlsLmMKK0BAIC00NDIwLDE2ICs0NDIwLDE1IEBAIFBlcmxfcGFyc2VfdW5pY29kZV9vcHRzKHBUSFhfIGNvbnN0IGNoYXIgKipwb3B0KQorICAgICAgICBpZiAoaXNESUdJVCgqcCkpIHsKKyAgICAgICAgICAgICBjb25zdCBjaGFyKiBlbmRwdHI7CisgICAgICAgICAgICAgVVYgdXY7CistICAgICAgICAgICAgaWYgKGdyb2tfYXRvVVYocCwgJnV2LCAmZW5kcHRyKQorLSAgICAgICAgICAgICAgICAmJiB1diA8PSBVMzJfTUFYCistICAgICAgICAgICAgICAgICYmIChwID0gZW5kcHRyKQorLSAgICAgICAgICAgICAgICAmJiAqcCAmJiAqcCAhPSAnXG4nICYmICpwICE9ICdccicKKy0gICAgICAgICAgICApIHsKKysgICAgICAgICAgICBpZiAoZ3Jva19hdG9VVihwLCAmdXYsICZlbmRwdHIpICYmIHV2IDw9IFUzMl9NQVgpIHsKKyAgICAgICAgICAgICAgICAgb3B0ID0gKFUzMil1djsKKy0gICAgICAgICAgICAgICAgaWYgKGlzU1BBQ0UoKnApKQorLSAgICAgICAgICAgICAgICAgICAgZ290byB0aGVfZW5kX29mX3RoZV9vcHRzX3BhcnNlcjsKKy0gICAgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICAgICAgUGVybF9jcm9hayhhVEhYXyAiVW5rbm93biBVbmljb2RlIG9wdGlvbiBsZXR0ZXIgJyVjJyIsICpwKTsKKysgICAgICAgICAgICAgICAgcCA9IGVuZHB0cjsKKysgICAgICAgICAgICAgICAgaWYgKHAgJiYgKnAgJiYgKnAgIT0gJ1xuJyAmJiAqcCAhPSAnXHInKSB7CisrICAgICAgICAgICAgICAgICAgICBpZiAoaXNTUEFDRSgqcCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgZ290byB0aGVfZW5kX29mX3RoZV9vcHRzX3BhcnNlcjsKKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICBQZXJsX2Nyb2FrKGFUSFhfICJVbmtub3duIFVuaWNvZGUgb3B0aW9uIGxldHRlciAnJWMnIiwgKnApOworKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgZWxzZSB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZF9tYW5fcmVwcm9kdWNpYmxlX2RhdGUuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kX21hbl9yZXByb2R1Y2libGVfZGF0ZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjOWNhODYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZF9tYW5fcmVwcm9kdWNpYmxlX2RhdGUuZGlmZgpAQCAtMCwwICsxLDE3MCBAQAorRnJvbSA5MDU3YWRjMTA2ZDZiYmVmNTNjOWU3MDY1MjNjZDk0ZjFhN2EwOGQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUnVzcyBBbGxiZXJ5IDxycmFAZGViaWFuLm9yZz4KK0RhdGU6IFNhdCwgMzAgQXVnIDIwMTQgMTU6MTA6NDEgLTA3MDAKK1N1YmplY3Q6IFN1cHBvcnQgUE9EX01BTl9EQVRFIGluIFBvZDo6TWFuIGZvciB0aGUgbGVmdC1oYW5kIGZvb3RlcgorCitIb25vciB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUE9EX01BTl9EQVRFIGFuZCB1c2UgaXRzIGNvbnRlbnRzLCBpZgorc2V0LCBhcyB0aGUgdmFsdWUgb2YgdGhlIGxlZnQtaGFuZCBmb290ZXIgaWYgdGhlIGRhdGUgb3B0aW9uIGlzIG5vdAorc2V0LCBvdmVycmlkaW5nIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGlucHV0IGZpbGUuICBUaGlzIGlzIHByaW1hcmlseQordXNlZnVsIHRvIGVuc3VyZSByZXByb2R1Y2libGUgYnVpbGRzIG9mIHRoZSBzYW1lIG91dHB1dCBmaWxlIGdpdmVuIHRoZQorc2FtZSBzb3VjZSBhbmQgUG9kOjpNYW4gdmVyc2lvbiwgZXZlbiB3aGVuIGZpbGUgdGltZXN0YW1wcyBtYXkgbm90IGJlCitjb25zaXN0ZW50LiAgVGhhbmtzLCBOaWtvIFR5bmkuCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNzU5NDA1CitPcmlnaW46IHVwc3RyZWFtCitQYXRjaC1OYW1lOiBmaXhlcy9wb2RfbWFuX3JlcHJvZHVjaWJsZV9kYXRlLmRpZmYKKy0tLQorIGNwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtICB8IDY5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQorIGNwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudCB8IDI5ICsrKysrKysrKysrKystLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNzIgaW5zZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitpbmRleCA3MmNhOWZmLi4wNTM2NjYyIDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KKysrKyBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitAQCAtODc2LDI1ICs4NzYsNDIgQEAgc3ViIGRldmlzZV90aXRsZSB7CisgfQorIAorICMgRGV0ZXJtaW5lIHRoZSBtb2RpZmljYXRpb24gZGF0ZSBhbmQgcmV0dXJuIHRoYXQsIHByb3Blcmx5IGZvcm1hdHRlZCBpbiBJU08KKy0jIGZvcm1hdC4gIElmIHdlIGNhbid0IGdldCB0aGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhlIGlucHV0LCBpbnN0ZWFkIHVzZSB0aGUKKy0jIGN1cnJlbnQgdGltZS4gIFBvZDo6U2ltcGxlIHJldHVybnMgYSBjb21wbGV0ZWx5IHVudXNlZnVsIHN0cmluZ2lmaWVkIGZpbGUKKy0jIGhhbmRsZSBhcyB0aGUgc291cmNlX2ZpbGVuYW1lIGZvciBpbnB1dCBmcm9tIGEgZmlsZSBoYW5kbGUsIHNvIHdlIGhhdmUgdG8KKy0jIGRlYWwgd2l0aCB0aGF0IGFzIHdlbGwuCisrIyBmb3JtYXQuCisrIworKyMgSWYgUE9EX01BTl9EQVRFIGlzIHNldCwgdGhhdCBvdmVycmlkZXMgYW55dGhpbmcgZWxzZS4gIFRoaXMgY2FuIGJlIHVzZWQgZm9yCisrIyByZXByb2R1Y2libGUgZ2VuZXJhdGlvbiBvZiB0aGUgc2FtZSBmaWxlIGV2ZW4gaWYgdGhlIGlucHV0IGZpbGUgdGltZXN0YW1wcworKyMgYXJlIHVucHJlZGljdGFibGUgb3IgdGhlIFBPRCBjb21zIGZyb20gc3RhbmRhcmQgaW5wdXQuCisrIworKyMgT3RoZXJ3aXNlLCB1c2UgdGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoZSBpbnB1dCBpZiB3ZSBjYW4gc3RhdCBpdC4gIEJlCisrIyBhd2FyZSB0aGF0IFBvZDo6U2ltcGxlIHJldHVybnMgdGhlIHN0cmluZ2lmaWNhdGlvbiBvZiB0aGUgZmlsZSBoYW5kbGUgYXMKKysjIHNvdXJjZV9maWxlbmFtZSBmb3IgaW5wdXQgZnJvbSBhIGZpbGUgaGFuZGxlLCBzbyB3ZSdsbCBzdGF0IHNvbWUgcmFuZG9tIHJlZgorKyMgc3RyaW5nIGluIHRoYXQgY2FzZS4gIElmIHRoYXQgZmFpbHMsIGluc3RlYWQgdXNlIHRoZSBjdXJyZW50IHRpbWUuCisrIworKyMgJHNlbGYgLSBQb2Q6Ok1hbiBvYmplY3QsIHVzZWQgdG8gZ2V0IHRoZSBzb3VyY2UgZmlsZQorKyMKKysjIFJldHVybnM6IFlZWVktTU0tREQgZGF0ZSBzdWl0YWJsZSBmb3IgdGhlIGxlZnQtaGFuZCBmb290ZXIKKyBzdWIgZGV2aXNlX2RhdGUgeworICAgICBteSAoJHNlbGYpID0gQF87CisrCisrICAgICMgSWYgUE9EX01BTl9EQVRFIGlzIHNldCwgYWx3YXlzIHVzZSBpdC4KKysgICAgaWYgKCRFTlZ7UE9EX01BTl9EQVRFfSkgeworKyAgICAgICAgcmV0dXJuICRFTlZ7UE9EX01BTl9EQVRFfTsKKysgICAgfQorKworKyAgICAjIE90aGVyd2lzZSwgZ2V0IHRoZSBpbnB1dCBmaWxlbmFtZSBhbmQgdHJ5IHRvIHN0YXQgaXQuICBJZiB0aGF0IGZhaWxzLAorKyAgICAjIHVzZSB0aGUgY3VycmVudCB0aW1lLgorICAgICBteSAkaW5wdXQgPSAkc2VsZi0+c291cmNlX2ZpbGVuYW1lOworICAgICBteSAkdGltZTsKKyAgICAgaWYgKCRpbnB1dCkgeworLSAgICAgICAgJHRpbWUgPSAoc3RhdCAkaW5wdXQpWzldIHx8IHRpbWU7CisrICAgICAgICAkdGltZSA9IChzdGF0KCRpbnB1dCkpWzldIHx8IHRpbWUoKTsKKyAgICAgfSBlbHNlIHsKKy0gICAgICAgICR0aW1lID0gdGltZTsKKysgICAgICAgICR0aW1lID0gdGltZSgpOworICAgICB9CisgCistICAgICMgQ2FuJ3QgdXNlIFBPU0lYOjpzdHJmdGltZSgpLCB3aGljaCB1c2VzIEZjbnRsLCBiZWNhdXNlIE1ha2VNYWtlcgorLSAgICAjIHVzZXMgdGhpcyBhbmQgaXQgaGFzIHRvIHdvcmsgaW4gdGhlIGNvcmUgd2hpY2ggY2FuJ3QgbG9hZCBkeW5hbWljCistICAgICMgbGlicmFyaWVzLgorLSAgICBteSAoJHllYXIsICRtb250aCwgJGRheSkgPSAobG9jYWx0aW1lICR0aW1lKVs1LDQsM107CistICAgIHJldHVybiBzcHJpbnRmICgiJTA0ZC0lMDJkLSUwMmQiLCAkeWVhciArIDE5MDAsICRtb250aCArIDEsICRkYXkpOworKyAgICAjIENhbid0IHVzZSBQT1NJWDo6c3RyZnRpbWUoKSwgd2hpY2ggdXNlcyBGY250bCwgYmVjYXVzZSBNYWtlTWFrZXIgdXNlcworKyAgICAjIHRoaXMgYW5kIGl0IGhhcyB0byB3b3JrIGluIHRoZSBjb3JlIHdoaWNoIGNhbid0IGxvYWQgZHluYW1pYyBsaWJyYXJpZXMuCisrICAgIG15ICgkeWVhciwgJG1vbnRoLCAkZGF5KSA9IChsb2NhbHRpbWUoJHRpbWUpKVs1LDQsM107CisrICAgIHJldHVybiBzcHJpbnRmKCIlMDRkLSUwMmQtJTAyZCIsICR5ZWFyICsgMTkwMCwgJG1vbnRoICsgMSwgJGRheSk7CisgfQorIAorICMgUHJpbnQgb3V0IHRoZSBwcmVhbWJsZSBhbmQgdGhlIHRpdGxlLiAgVGhlIG1lYW5pbmcgb2YgdGhlIGFyZ3VtZW50cyB0byAuVEgKK0BAIC0xNjMyLDYgKzE2NDksMTUgQEAgYXJndW1lbnQuCisgU2V0cyB0aGUgY2VudGVyZWQgcGFnZSBoZWFkZXIgdG8gdXNlIGluc3RlYWQgb2YgIlVzZXIgQ29udHJpYnV0ZWQgUGVybAorIERvY3VtZW50YXRpb24iLgorIAorKz1pdGVtIGRhdGUKKysKKytTZXRzIHRoZSBsZWZ0LWhhbmQgZm9vdGVyLiAgSWYgdGhpcyBvcHRpb24gaXMgbm90IHNldCwgdGhlIGNvbnRlbnRzIG9mIHRoZQorK2Vudmlyb25tZW50IHZhcmlhYmxlIFBPRF9NQU5fREFURSwgaWYgc2V0LCB3aWxsIGJlIHVzZWQuICBGYWlsaW5nIHRoYXQsCisrdGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoZSBpbnB1dCBmaWxlIHdpbGwgYmUgdXNlZCwgb3IgdGhlIGN1cnJlbnQgdGltZQorK2lmIHN0YXQoKSBjYW4ndCBmaW5kIHRoYXQgZmlsZSAod2hpY2ggd2lsbCBiZSB0aGUgY2FzZSBpZiB0aGUgaW5wdXQgaXMKKytmcm9tIEM8U1RESU4+KS4gIElmIG9idGFpbmVkIGZyb20gdGhlIGZpbGUgbW9kaWZpY2F0aW9uIGRhdGUgb3IgdGhlCisrY3VycmVudCB0aW1lLCBoZSBkYXRlIHdpbGwgYmUgZm9ybWF0dGVkIGFzIEM8WVlZWS1NTS1ERD4uCisrCisgPWl0ZW0gZXJyb3JzCisgCisgSG93IHRvIHJlcG9ydCBlcnJvcnMuICBDPGRpZT4gc2F5cyB0byB0aHJvdyBhbiBleGNlcHRpb24gb24gYW55IFBPRAorQEAgLTE2NDIsMTMgKzE2NjgsNiBAQCBQT0QgZXJyb3JzIGVudGlyZWx5LCBhcyBtdWNoIGFzIHBvc3NpYmxlLgorIAorIFRoZSBkZWZhdWx0IGlzIEM8cG9kPi4KKyAKKy09aXRlbSBkYXRlCistCistU2V0cyB0aGUgbGVmdC1oYW5kIGZvb3Rlci4gIEJ5IGRlZmF1bHQsIHRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGUgaW5wdXQKKy1maWxlIHdpbGwgYmUgdXNlZCwgb3IgdGhlIGN1cnJlbnQgZGF0ZSBpZiBzdGF0KCkgY2FuJ3QgZmluZCB0aGF0IGZpbGUgKHRoZQorLWNhc2UgaWYgdGhlIGlucHV0IGlzIGZyb20gQzxTVERJTj4pLCBhbmQgdGhlIGRhdGUgd2lsbCBiZSBmb3JtYXR0ZWQgYXMKKy1DPFlZWVktTU0tREQ+LgorLQorID1pdGVtIGZpeGVkCisgCisgVGhlIGZpeGVkLXdpZHRoIGZvbnQgdG8gdXNlIGZvciB2ZXJiYXRpbSB0ZXh0IGFuZCBjb2RlLiAgRGVmYXVsdHMgdG8KK0BAIC0xODEwLDYgKzE4MjksMjAgQEAgb3B0aW9uIHdhcyBzZXQgdG8gQzxkaWU+LgorIAorID1iYWNrCisgCisrPWhlYWQxIEVOVklST05NRU5UCisrCisrPW92ZXIgNAorKworKz1pdGVtIFBPRF9NQU5fREFURQorKworK0lmIHNldCwgdGhpcyB3aWxsIGJlIHVzZWQgYXMgdGhlIHZhbHVlIG9mIHRoZSBsZWZ0LWhhbmQgZm9vdGVyIHVubGVzcyB0aGUKKytDPGRhdGU+IG9wdGlvbiBpcyBleHBsaWNpdGx5IHNldCwgb3ZlcnJpZGluZyB0aGUgdGltZXN0YW1wIG9mIHRoZSBpbnB1dAorK2ZpbGUgb3IgdGhlIGN1cnJlbnQgdGltZS4gIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWZ1bCB0byBlbnN1cmUgcmVwcm9kdWNpYmxlCisrYnVpbGRzIG9mIHRoZSBzYW1lIG91dHB1dCBmaWxlIGdpdmVuIHRoZSBzYW1lIHNvdWNlIGFuZCBQb2Q6Ok1hbiB2ZXJzaW9uLAorK2V2ZW4gd2hlbiBmaWxlIHRpbWVzdGFtcHMgbWF5IG5vdCBiZSBjb25zaXN0ZW50LgorKworKz1iYWNrCisrCisgPWhlYWQxIEJVR1MKKyAKKyBFbmNvZGluZyBoYW5kbGluZyBhc3N1bWVzIHRoYXQgUGVybElPIGlzIGF2YWlsYWJsZSBhbmQgZG9lcyBub3Qgd29yaworZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudCBiL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudAoraW5kZXggM2NjZTlmNS4uYzYxMGRkOSAxMDA2NDQKKy0tLSBhL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudAorKysrIGIvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50CitAQCAtMSwxNSArMSwyOCBAQAorLSMhL3Vzci9iaW4vcGVybCAtdworLQorLSMgSW4gb3JkZXIgZm9yIE1ha2VNYWtlciB0byBidWlsZCBpbiB0aGUgY29yZSwgbm90aGluZyBjYW4gdXNlCistIyBGY250bCB3aGljaCBpbmNsdWRlcyBQT1NJWC4gIGRldmlzZV9kYXRlKCkncyB1c2Ugb2Ygc3RyZnRpbWUoKQorLSMgd2FzIHJlcGxhY2VkLiAgVGhpcyB0ZXN0cyB0aGF0IGl0J3MgaWRlbnRpY2FsLgorKyMhL3Vzci9iaW4vcGVybAorKyMKKysjIEluIG9yZGVyIGZvciBNYWtlTWFrZXIgdG8gYnVpbGQgaW4gdGhlIGNvcmUsIG5vdGhpbmcgY2FuIHVzZSBGY250bCB3aGljaAorKyMgaW5jbHVkZXMgUE9TSVguICBkZXZpc2VfZGF0ZSgpJ3MgdXNlIG9mIHN0cmZ0aW1lKCkgd2FzIHJlcGxhY2VkLiAgVGhpcyB0ZXN0cworKyMgdGhhdCBpdCdzIGlkZW50aWNhbC4gIEl0IGFsc28gdGVzdHMgc3BlY2lhbCBoYW5kbGluZyBvZiB0aGUgUE9EX01BTl9EQVRFCisrIyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAKKyt1c2UgNS4wMDY7CisgdXNlIHN0cmljdDsKKy0KKy11c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAxOworK3VzZSB3YXJuaW5nczsKKyAKKyB1c2UgUG9kOjpNYW47CisgdXNlIFBPU0lYIHF3KHN0cmZ0aW1lKTsKKyAKKyt1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAyOworKworKyMgQ2hlY2sgdGhhdCB0aGUgcmVzdWx0cyBvZiBkZXZpY2VfZGF0ZSBtYXRjaGVzIHN0cmZ0aW1lLiAgVGhlcmUgaXMgbm8gaW5wdXQKKysjIGZpbGUgbmFtZSwgc28gdGhpcyB3aWxsIHVzZSB0aGUgY3VycmVudCB0aW1lLgorIG15ICRwYXJzZXIgPSBQb2Q6Ok1hbi0+bmV3OworLWlzICRwYXJzZXItPmRldmlzZV9kYXRlLCBzdHJmdGltZSgiJVktJW0tJWQiLCBsb2NhbHRpbWUpOworK2lzKAorKyAgICAkcGFyc2VyLT5kZXZpc2VfZGF0ZSwKKysgICAgc3RyZnRpbWUoJyVZLSVtLSVkJywgbG9jYWx0aW1lKCkpLAorKyAgICAnZGV2aXNlX2RhdGUgbWF0Y2hlcyBzdHJmdGltZScKKyspOworKworKyMgU2V0IHRoZSBvdmVycmlkZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgZW5zdXJlIHRoYXQgaXQncyBob25vcmVkLgorK2xvY2FsICRFTlZ7UE9EX01BTl9EQVRFfSA9ICcyMDE0LTAxLTAxJzsKKytpcygkcGFyc2VyLT5kZXZpc2VfZGF0ZSwgJzIwMTQtMDEtMDEnLCAnZGV2aXNlX2RhdGUgaG9ub3JzIFBPRF9NQU5fREFURScpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tZW1wdHktZGF0ZS5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tZW1wdHktZGF0ZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYmJmOWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi1lbXB0eS1kYXRlLmRpZmYKQEAgLTAsMCArMSw1MSBAQAorRnJvbSAxODNiYjRhZjdhZDg2MmEyY2YzMWQwZGNiM2RkNDVjMTAwZjc2Nzc2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUnVzcyBBbGxiZXJ5IDxycmFAY3Bhbi5vcmc+CitEYXRlOiBXZWQsIDE1IEFwciAyMDE1IDIyOjIxOjI1IC0wNzAwCitTdWJqZWN0OiBTdXBwb3J0IGFuIGVtcHR5IFBPRF9NQU5fREFURSBlbnZpcm9ubWVudCB2YXJpYWJsZQorCitPbmUgbWF5IHdhbnQgdG8gc2V0IHRoaXMgdG8gYW4gZW1wdHkgc3RyaW5nLiAgSGFuZGxlIHRoYXQgY29ycmVjdGx5LgorCisoYmFja3BvcnRlZCB0byBQZXJsIDUuMjAuMiBieSBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+KQorCitPcmlnaW46IHVwc3RyZWFtLCBodHRwOi8vZ2l0LmV5cmllLm9yZy8/cD1wZXJsL3BvZGxhdG9ycy5naXQ7YT1jb21taXRkaWZmO2g9ZTBlOWZjYjUzZThmYzk1NGIyYjE5NTUzODVlZWExOGMyN2Y4NjlhZgorQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzgwMjU5CitQYXRjaC1OYW1lOiBmaXhlcy9wb2RtYW4tZW1wdHktZGF0ZS5kaWZmCistLS0KKyBjcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSAgfCAyICstCisgY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50IHwgNiArKysrKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK2luZGV4IDM2NTg5MmUuLjg5OTdhMTUgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorKysrIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK0BAIC04OTQsNyArODk0LDcgQEAgc3ViIGRldmlzZV9kYXRlIHsKKyAgICAgbXkgKCRzZWxmKSA9IEBfOworIAorICAgICAjIElmIFBPRF9NQU5fREFURSBpcyBzZXQsIGFsd2F5cyB1c2UgaXQuCistICAgIGlmICgkRU5We1BPRF9NQU5fREFURX0pIHsKKysgICAgaWYgKGRlZmluZWQoJEVOVntQT0RfTUFOX0RBVEV9KSkgeworICAgICAgICAgcmV0dXJuICRFTlZ7UE9EX01BTl9EQVRFfTsKKyAgICAgfQorIAorZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudCBiL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudAoraW5kZXggOWRhOWQxYi4uMjcyNzFkOSAxMDA2NDQKKy0tLSBhL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudAorKysrIGIvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50CitAQCAtMTIsNyArMTIsNyBAQCB1c2Ugd2FybmluZ3M7CisgdXNlIFBvZDo6TWFuOworIHVzZSBQT1NJWCBxdyhzdHJmdGltZSk7CisgCistdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMjsKKyt1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAzOworIAorICMgQ2hlY2sgdGhhdCB0aGUgcmVzdWx0cyBvZiBkZXZpY2VfZGF0ZSBtYXRjaGVzIHN0cmZ0aW1lLiAgVGhlcmUgaXMgbm8gaW5wdXQKKyAjIGZpbGUgbmFtZSwgc28gdGhpcyB3aWxsIHVzZSB0aGUgY3VycmVudCB0aW1lLgorQEAgLTI2LDMgKzI2LDcgQEAgaXMoCisgIyBTZXQgdGhlIG92ZXJyaWRlIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCBlbnN1cmUgdGhhdCBpdCdzIGhvbm9yZWQuCisgbG9jYWwgJEVOVntQT0RfTUFOX0RBVEV9ID0gJzIwMTQtMDEtMDEnOworIGlzKCRwYXJzZXItPmRldmlzZV9kYXRlLCAnMjAxNC0wMS0wMScsICdkZXZpc2VfZGF0ZSBob25vcnMgUE9EX01BTl9EQVRFJyk7CisrCisrIyBDaGVjayB0aGF0IGFuIGVtcHR5IGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGhvbm9yZWQuCisrbG9jYWwgJEVOVntQT0RfTUFOX0RBVEV9ID0gcXt9OworK2lzKCRwYXJzZXItPmRldmlzZV9kYXRlLCBxe30sICdkZXZpc2VfZGF0ZSBob25vcnMgZW1wdHkgUE9EX01BTl9EQVRFJyk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi1waXBlLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi1waXBlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE2MDM2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLXBpcGUuZGlmZgpAQCAtMCwwICsxLDEwOSBAQAorRnJvbSA3NjcxZDEwMWJhYTc1ZDdhNzliZmJkOGM3NWMxNTk1ZmJiM2Y1M2JhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUnVzcyBBbGxiZXJ5IDxycmFAY3Bhbi5vcmc+CitEYXRlOiBTYXQsIDcgRmViIDIwMTUgMTk6MDM6MzQgLTA4MDAKK1N1YmplY3Q6IEJldHRlciBlcnJvcnMgZm9yIG1hbiBwYWdlcyBmcm9tIHN0YW5kYXJkIGlucHV0CisKK1tQb2Q6Ok1hbl0gQXR0ZW1wdCB0byBkZXRlY3QgaWYgdGhlIGlucHV0IGNhbWUgZnJvbSBhIHBpcGUgYW5kCit0aGVyZWZvcmUgaGFzIGEgY29tcGxldGVseSB1bmhlbHBmdWwgKGFuZCBub25yZXByb2R1Y2libGUpIHNvdXJjZSBmaWxlCituYW1lLCBhbmQgZGlhZ25vc2UgdGhpcyBhcyBhbiBlcnJvci4gIERvY3VtZW50IHRoYXQgdGhlIG5hbWUgb3B0aW9uCisoLS1uYW1lIHRvIHBvZDJtYW4pIGlzIHJlcXVpcmVkIHdoZW4gcHJvY2Vzc2luZyBQT0Qgc291cmNlIGZyb20KK3N0YW5kYXJkIGlucHV0LiAgKERlYmlhbiBCdWcjNzc3NDA1KQorCisoYmFja3BvcnRlZCB0byBQZXJsIDUuMjAuMiBieSBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+KQorCitPcmlnaW46IHVwc3RyZWFtLCBodHRwOi8vZ2l0LmV5cmllLm9yZy8/cD1wZXJsL3BvZGxhdG9ycy5naXQ7YT1jb21taXRkaWZmO2g9ZDk4ODcyZTQ2YzkzODYxYjdhYmExNDk0OWUxMjU4NzEyMDg3ZGM1NQorQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzc3NDA1CitQYXRjaC1OYW1lOiBmaXhlcy9wb2RtYW4tcGlwZS5kaWZmCistLS0KKyBjcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSAgICAgfCAxNSArKysrKysrKysrKysrKysKKyBjcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwgfCAgNCArKysrCisgY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtdGl0bGUudCAgIHwgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDUxIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA3NTUgY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtdGl0bGUudAorCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gYi9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQoraW5kZXggODk5N2ExNS4uOTY5ZWFmZiAxMDA2NDQKKy0tLSBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCisrKysgYi9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorQEAgLTgyOCw2ICs4MjgsMTcgQEAgc3ViIGRldmlzZV90aXRsZSB7CisgICAgICRzZWN0aW9uID0gMyBpZiAoISQkc2VsZntzZWN0aW9ufSAmJiAkbmFtZSA9fiAvXC5wbVx6L2kpOworICAgICAkbmFtZSA9fiBzL1wucChvZHxbbG1dKVx6Ly9pOworIAorKyAgICAjIElmIFBvZDo6UGFyc2VyIGdhdmUgdXMgYW4gSU86OkZpbGUgcmVmZXJlbmNlIGFzIHRoZSBzb3VyY2UgZmlsZSBuYW1lLAorKyAgICAjIGNvbnZlcnQgdGhhdCB0byB0aGUgZW1wdHkgc3RyaW5nIGFzIHdlbGwuICBUaGVuLCBpZiB3ZSBkb24ndCBoYXZlIGEKKysgICAgIyB2YWxpZCBuYW1lLCBlbWl0IGEgd2FybmluZyBhbmQgY29udmVydCBpdCB0byBTVERJTi4KKysgICAgaWYgKCRuYW1lID1+IC9eSU86OkZpbGUoPzo9XHcrKVwoMHhbXGRhLWZdK1wpJC9pKSB7CisrICAgICAgICAkbmFtZSA9ICcnOworKyAgICB9CisrICAgIGlmICgkbmFtZSBlcSAnJykgeworKyAgICAgICAgJHNlbGYtPndoaW5lICgxLCAnTm8gbmFtZSBnaXZlbiBmb3IgZG9jdW1lbnQnKTsKKysgICAgICAgICRuYW1lID0gJ1NURElOJzsKKysgICAgfQorKworICAgICAjIElmIHRoZSBzZWN0aW9uIGlzbid0IDMsIHRoZW4gdGhlIG5hbWUgZGVmYXVsdHMgdG8ganVzdCB0aGUgYmFzZW5hbWUgb2YKKyAgICAgIyB0aGUgZmlsZS4gIE90aGVyd2lzZSwgYXNzdW1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG1vZHVsZS4gIFdlIHdhbnQgdG8KKyAgICAgIyBmaWd1cmUgb3V0IHRoZSBmdWxsIG1vZHVsZSBuYW1lIGZyb20gdGhlIHBhdGggdG8gdGhlIGZpbGUsIGJ1dCB3ZSBkb24ndAorQEAgLTE3MDUsNiArMTcxNiwxMCBAQCBtb2R1bGUgcGF0aC4gIElmIGl0IGlzLCBhIHBhdGggbGlrZSBDPC4uLi9saWIvUG9kL01hbi5wbT4gaXMgY29udmVydGVkIGludG8KKyBhIG5hbWUgbGlrZSBDPFBvZDo6TWFuPi4gIFRoaXMgb3B0aW9uLCBpZiBnaXZlbiwgb3ZlcnJpZGVzIGFueSBhdXRvbWF0aWMKKyBkZXRlcm1pbmF0aW9uIG9mIHRoZSBuYW1lLgorIAorK0lmIGdlbmVyYXRpbmcgYSBtYW51YWwgcGFnZSBmcm9tIHN0YW5kYXJkIGlucHV0LCB0aGlzIG9wdGlvbiBpcyByZXF1aXJlZCwKKytzaW5jZSB0aGVyZSdzIG90aGVyd2lzZSBubyB3YXkgZm9yIFBvZDo6TWFuIHRvIGtub3cgd2hhdCB0byB1c2UgZm9yIHRoZQorK21hbnVhbCBwYWdlIG5hbWUuCisrCisgPWl0ZW0gbm91cmxzCisgCisgTm9ybWFsbHksIExaPD48PiBmb3JtYXR0aW5nIGNvZGVzIHdpdGggYSBVUkwgYnV0IGFuY2hvciB0ZXh0IGFyZSBmb3JtYXR0ZWQKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwgYi9jcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwKK2luZGV4IDM4Njk1ZjguLjQzZTM1ZGYgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwKKysrKyBiL2NwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTAorQEAgLTIzNiw2ICsyMzYsMTAgQEAgTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGlzIHByb2JhYmx5IG5vdCB1c2VmdWwgd2hlbiBjb252ZXJ0aW5nIG11bHRpcGxlIFBPRAorIGZpbGVzIGF0IG9uY2UuICBUaGUgY29udmVudGlvbiBmb3IgVW5peCBtYW4gcGFnZXMgZm9yIGNvbW1hbmRzIGlzIGZvciB0aGUKKyBtYW4gcGFnZSB0aXRsZSB0byBiZSBpbiBhbGwtdXBwZXJjYXNlIGV2ZW4gaWYgdGhlIGNvbW1hbmQgaXNuJ3QuCisgCisrV2hlbiBjb252ZXJ0aW5nIFBPRCBzb3VyY2UgZnJvbSBzdGFuZGFyZCBpbnB1dCwgdGhpcyBvcHRpb24gaXMgcmVxdWlyZWQsCisrc2luY2UgdGhlcmUncyBvdGhlcndpc2Ugbm8gd2F5IHRvIGtub3cgd2hhdCB0byB1c2UgYXMgdGhlIG5hbWUgb2YgdGhlCisrbWFudWFsIHBhZ2UuCisrCisgPWl0ZW0gQjwtLW5vdXJscz4KKyAKKyBOb3JtYWxseSwgTFo8Pjw+IGZvcm1hdHRpbmcgY29kZXMgd2l0aCBhIFVSTCBidXQgYW5jaG9yIHRleHQgYXJlIGZvcm1hdHRlZAorZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLXRpdGxlLnQgYi9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS10aXRsZS50CituZXcgZmlsZSBtb2RlIDEwMDc1NQoraW5kZXggMDAwMDAwMC4uODYzOTQ0MQorLS0tIC9kZXYvbnVsbAorKysrIGIvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtdGl0bGUudAorQEAgLTAsMCArMSwzMiBAQAorKyMhL3Vzci9iaW4vcGVybAorKyMKKysjIFRlc3RzIGZvciB0aGUgYXV0b21hdGljIGRldGVybWluYXRpb24gb2YgdGhlIG1hbnVhbCBwYWdlIHRpdGxlIGlmIG5vdAorKyMgc3BlY2lmaWVkIHZpYSBvcHRpb25zIHRvIHBvZDJtYW4gb3IgdGhlIFBvZDo6TWFuIGNvbnN0cnVjdG9yLgorKworK3VzZSA1LjAwNjsKKyt1c2Ugc3RyaWN0OworK3VzZSB3YXJuaW5nczsKKysKKyt1c2UgRmlsZTo6U3BlYzsKKyt1c2UgSU86OkZpbGU7CisrdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMzsKKysKKytCRUdJTiB7CisrICAgIHVzZV9vaygnUG9kOjpNYW4nKTsKKyt9CisrCisrIyBDcmVhdGUgYSBwYXJzZXIgYW5kIHNldCBpdCB1cCB3aXRoIGFuIGlucHV0IHNvdXJjZS4gIFRoZXJlIGlzbid0IGEgd2F5IHRvIGRvCisrIyB0aGlzIGluIFBvZDo6U2ltcGxlIHdpdGhvdXQgYWN0dWFsbHkgcGFyc2luZyB0aGUgZG9jdW1lbnQsIHNvIHNlbmQgdGhlCisrIyBvdXRwdXQgdG8gYSBzdHJpbmcgdGhhdCB3ZSdsbCBpZ25vcmUuCisrbXkgJHBhdGggPSBGaWxlOjpTcGVjLT5jYXRkaXIoJ3QnLCAnZGF0YScsICdiYXNpYy5wb2QnKTsKKytteSAkaGFuZGxlID0gSU86OkZpbGUtPm5ldygkcGF0aCwgJ3InKTsKKytteSAkcGFyc2VyID0gUG9kOjpNYW4tPm5ldyhlcnJvcnMgPT4gJ3BvZCcpOworK215ICRvdXRwdXQ7CisrJHBhcnNlci0+b3V0cHV0X3N0cmluZyhcJG91dHB1dCk7CisrJHBhcnNlci0+cGFyc2VfZmlsZSgkaGFuZGxlKTsKKysKKysjIENoZWNrIHRoZSByZXN1bHRzIG9mIGRldmlzZV90aXRsZSBmb3IgdGhpcy4gIFdlIHNob3VsZCBnZXQgYmFjayBTVERJTiwgYW5kCisrIyB3ZSBzaG91bGQgaGF2ZSByZXBvcnRlZCBhbiBlcnJvci4KKytteSAoJG5hbWUsICRzZWN0aW9uKSA9ICRwYXJzZXItPmRldmlzZV90aXRsZTsKKytpcygkbmFtZSwgJ1NURElOJywgJ2RldmlzZV90aXRsZSB1c2VzIFNURElOIGZvciBmaWxlIGhhbmRsZSBpbnB1dCcpOworK29rKCRwYXJzZXItPmVycm9yc19zZWVuLCAnLi4uYW5kIGVycm9ycyB3ZXJlIHNlZW4nKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLXV0Yy1kb2NzLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi11dGMtZG9jcy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZGZlZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi11dGMtZG9jcy5kaWZmCkBAIC0wLDAgKzEsODYgQEAKK0Zyb20gNjE5ODg1NmI1MzIzZDYyMDQwOTQyOTNmMDFiODkwNDcyNjE4ZjE4MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3MgQWxsYmVyeSA8cnJhQGNwYW4ub3JnPgorRGF0ZTogV2VkLCAxNSBBcHIgMjAxNSAyMDo0OTowNyAtMDcwMAorU3ViamVjdDogRG9jdW1lbnRhdGlvbiBhbmQgdGVzdCBzdWl0ZSB1cGRhdGVzIGZvciBVVEMgZml4CisKK1VwZGF0ZSB0aGUgUG9kOjpNYW4gYW5kIHBvZDJtYW4gZG9jdW1lbnRhdGlvbiBhbmQgdGhlIHRlc3Qgc3VpdGUKK2ZvciB0aGUgbmV3IFVUQy1iYXNlZCBkZWZhdWx0IHBhZ2UgZm9vdGVyLCBhbmQgYWRkIGEgQ2hhbmdlcworZW50cnkuCisKKyhiYWNrcG9ydGVkIHRvIFBlcmwgNS4yMC4yIGJ5IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4pCisKK09yaWdpbjogdXBzdHJlYW0sIGh0dHA6Ly9naXQuZXlyaWUub3JnLz9wPXBlcmwvcG9kbGF0b3JzLmdpdDthPWNvbW1pdGRpZmY7aD01MmRiOTNiZjgwZTRhMDZmODQ5N2U0ZWJhZGUwNTA2YjZlZTBlNzBkCitCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy83ODAyNTkKK1BhdGNoLU5hbWU6IGZpeGVzL3BvZG1hbi11dGMtZG9jcy5kaWZmCistLS0KKyBjcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSAgICAgfCAgNiArKysrKy0KKyBjcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwgfCAxMSArKysrKystLS0tLQorIGNwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudCAgICB8ICAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gYi9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQoraW5kZXggYzNiYTIwMS4uMzY1ODkyZSAxMDA2NDQKKy0tLSBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCisrKysgYi9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorQEAgLTkxMCw2ICs5MTAsOCBAQCBzdWIgZGV2aXNlX2RhdGUgeworIAorICAgICAjIENhbid0IHVzZSBQT1NJWDo6c3RyZnRpbWUoKSwgd2hpY2ggdXNlcyBGY250bCwgYmVjYXVzZSBNYWtlTWFrZXIgdXNlcworICAgICAjIHRoaXMgYW5kIGl0IGhhcyB0byB3b3JrIGluIHRoZSBjb3JlIHdoaWNoIGNhbid0IGxvYWQgZHluYW1pYyBsaWJyYXJpZXMuCisrICAgICMgVXNlIGdtdGltZSBpbnN0ZWFkIG9mIGxvY2FsdGltZSBzbyB0aGF0IHRoZSBnZW5lcmF0ZWQgbWFuIHBhZ2UgZG9lcyBub3QKKysgICAgIyBkZXBlbmQgb24gdGhlIGxvY2FsIHRpbWUgem9uZSBzZXR0aW5nIGFuZCBpcyBtb3JlIHJlcHJvZHVjaWJsZQorICAgICBteSAoJHllYXIsICRtb250aCwgJGRheSkgPSAoZ210aW1lKCR0aW1lKSlbNSw0LDNdOworICAgICByZXR1cm4gc3ByaW50ZigiJTA0ZC0lMDJkLSUwMmQiLCAkeWVhciArIDE5MDAsICRtb250aCArIDEsICRkYXkpOworIH0KK0BAIC0xNjU2LDcgKzE2NTgsOSBAQCBlbnZpcm9ubWVudCB2YXJpYWJsZSBQT0RfTUFOX0RBVEUsIGlmIHNldCwgd2lsbCBiZSB1c2VkLiAgRmFpbGluZyB0aGF0LAorIHRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGUgaW5wdXQgZmlsZSB3aWxsIGJlIHVzZWQsIG9yIHRoZSBjdXJyZW50IHRpbWUKKyBpZiBzdGF0KCkgY2FuJ3QgZmluZCB0aGF0IGZpbGUgKHdoaWNoIHdpbGwgYmUgdGhlIGNhc2UgaWYgdGhlIGlucHV0IGlzCisgZnJvbSBDPFNURElOPikuICBJZiBvYnRhaW5lZCBmcm9tIHRoZSBmaWxlIG1vZGlmaWNhdGlvbiBkYXRlIG9yIHRoZQorLWN1cnJlbnQgdGltZSwgaGUgZGF0ZSB3aWxsIGJlIGZvcm1hdHRlZCBhcyBDPFlZWVktTU0tREQ+LgorK2N1cnJlbnQgdGltZSwgdGhlIGRhdGUgd2lsbCBiZSBmb3JtYXR0ZWQgYXMgQzxZWVlZLU1NLUREPiBhbmQgd2lsbCBiZSBiYXNlZAorK29uIFVUQyAoc28gdGhhdCB0aGUgb3V0cHV0IHdpbGwgYmUgcmVwcm9kdWNpYmxlIHJlZ2FyZGxlc3Mgb2YgbG9jYWwgdGltZQorK3pvbmUpLgorIAorID1pdGVtIGVycm9ycworIAorZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTCBiL2NwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTAoraW5kZXggNmFmMzQ3NC4uMzg2OTVmOCAxMDA2NDQKKy0tLSBhL2NwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTAorKysrIGIvY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMCitAQCAtMTc0LDkgKzE3NCwxMCBAQCBDb250cmlidXRlZCBQZXJsIERvY3VtZW50YXRpb24iLCBidXQgYWxzbyBzZWUgQjwtLW9mZmljaWFsPiBiZWxvdy4KKyAKKyA9aXRlbSBCPC1kPiBJPHN0cmluZz4sIEI8LS1kYXRlPj1JPHN0cmluZz4KKyAKKy1TZXQgdGhlIGxlZnQtaGFuZCBmb290ZXIgc3RyaW5nIHRvIHRoaXMgdmFsdWUuICBCeSBkZWZhdWx0LCB0aGUgbW9kaWZpY2F0aW9uCistZGF0ZSBvZiB0aGUgaW5wdXQgZmlsZSB3aWxsIGJlIHVzZWQsIG9yIHRoZSBjdXJyZW50IGRhdGUgaWYgaW5wdXQgY29tZXMgZnJvbQorLUM8U1RESU4+LgorK1NldCB0aGUgbGVmdC1oYW5kIGZvb3RlciBzdHJpbmcgdG8gdGhpcyB2YWx1ZS4gIEJ5IGRlZmF1bHQsIHRoZQorK21vZGlmaWNhdGlvbiBkYXRlIG9mIHRoZSBpbnB1dCBmaWxlIHdpbGwgYmUgdXNlZCwgb3IgdGhlIGN1cnJlbnQgZGF0ZSBpZgorK2lucHV0IGNvbWVzIGZyb20gQzxTVERJTj4sIGFuZCB3aWxsIGJlIGJhc2VkIG9uIFVUQyAoc28gdGhhdCB0aGUgb3V0cHV0Cisrd2lsbCBiZSByZXByb2R1Y2libGUgcmVnYXJkbGVzcyBvZiBsb2NhbCB0aW1lIHpvbmUpLgorIAorID1pdGVtIEI8LWVycm9ycz49STxzdHlsZT4KKyAKK0BAIC0zODMsOCArMzg0LDggQEAgQjxwb2QybWFuPiBieSBMYXJyeSBXYWxsIGFuZCBUb20gQ2hyaXN0aWFuc2VuLgorIAorID1oZWFkMSBDT1BZUklHSFQgQU5EIExJQ0VOU0UKKyAKKy1Db3B5cmlnaHQgMTk5OSwgMjAwMCwgMjAwMSwgMjAwNCwgMjAwNiwgMjAwOCwgMjAxMCwgMjAxMiwgMjAxMyBSdXNzCistQWxsYmVyeSA8cnJhQHN0YW5mb3JkLmVkdT4uCisrQ29weXJpZ2h0IDE5OTksIDIwMDAsIDIwMDEsIDIwMDQsIDIwMDYsIDIwMDgsIDIwMTAsIDIwMTIsIDIwMTMsIDIwMTQsCisrMjAxNSBSdXNzIEFsbGJlcnkgPHJyYUBjcGFuLm9yZz4uCisgCisgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBQZXJsIGl0c2VsZi4KK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQgYi9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKK2luZGV4IGM2MTBkZDkuLjlkYTlkMWIgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKKysrKyBiL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudAorQEAgLTE5LDcgKzE5LDcgQEAgdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMjsKKyBteSAkcGFyc2VyID0gUG9kOjpNYW4tPm5ldzsKKyBpcygKKyAgICAgJHBhcnNlci0+ZGV2aXNlX2RhdGUsCistICAgIHN0cmZ0aW1lKCclWS0lbS0lZCcsIGxvY2FsdGltZSgpKSwKKysgICAgc3RyZnRpbWUoJyVZLSVtLSVkJywgZ210aW1lKCkpLAorICAgICAnZGV2aXNlX2RhdGUgbWF0Y2hlcyBzdHJmdGltZScKKyApOworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tdXRjLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi11dGMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmQ3YjlkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tdXRjLmRpZmYKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBjNzk2Nzc1Y2RiZDJjY2UwNmFjYmI3YWMzNTUxODdkNDA2MzAxN2EyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hyaXMgTGFtYiA8bGFtYnlAZGViaWFuLm9yZz4KK0RhdGU6IFdlZCwgMTUgQXByIDIwMTUgMjA6NDI6NTMgLTA3MDAKK1N1YmplY3Q6IE1ha2UgdGhlIGVtYmVkZGVkIGRhdGUgZnJvbSBQb2Q6Ok1hbiByZXByb2R1Y2libGUKKworV2hpbGUgd29ya2luZyBvbiB0aGUgInJlcHJvZHVjaWJsZSBidWlsZHMiIGVmZm9ydCwgd2UgaGF2ZSBub3RpY2VkCit0aGF0IFBvZDo6TWFuIGdlbmVyYXRlcyBvdXRwdXQgdGhhdCB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50Cit0aW1lem9uZS4KKworVGhlIGF0dGFjaGVkIHBhdGNoIGZpeGVzIHRoaXMgYnkgdXNpbmcgR01UICh+VVRDKSBkYXRlcyBpbnN0ZWFkLgorCisoYmFja3BvcnRlZCB0byBQZXJsIDUuMjAuMiBieSBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+KQorCitPcmlnaW46IHVwc3RyZWFtLCBodHRwOi8vZ2l0LmV5cmllLm9yZy8/cD1wZXJsL3BvZGxhdG9ycy5naXQ7YT1jb21taXRkaWZmO2g9OTEzZmJiMmJkMmNlMDcxZTIwMTI4NjI5MzAyYWUyODUyNTU0Y2FkNAorQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzgwMjU5CitQYXRjaC1OYW1lOiBmaXhlcy9wb2RtYW4tdXRjLmRpZmYKKy0tLQorIGNwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gYi9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQoraW5kZXggMDUzNjY2Mi4uYzNiYTIwMSAxMDA2NDQKKy0tLSBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCisrKysgYi9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorQEAgLTkxMCw3ICs5MTAsNyBAQCBzdWIgZGV2aXNlX2RhdGUgeworIAorICAgICAjIENhbid0IHVzZSBQT1NJWDo6c3RyZnRpbWUoKSwgd2hpY2ggdXNlcyBGY250bCwgYmVjYXVzZSBNYWtlTWFrZXIgdXNlcworICAgICAjIHRoaXMgYW5kIGl0IGhhcyB0byB3b3JrIGluIHRoZSBjb3JlIHdoaWNoIGNhbid0IGxvYWQgZHluYW1pYyBsaWJyYXJpZXMuCistICAgIG15ICgkeWVhciwgJG1vbnRoLCAkZGF5KSA9IChsb2NhbHRpbWUoJHRpbWUpKVs1LDQsM107CisrICAgIG15ICgkeWVhciwgJG1vbnRoLCAkZGF5KSA9IChnbXRpbWUoJHRpbWUpKVs1LDQsM107CisgICAgIHJldHVybiBzcHJpbnRmKCIlMDRkLSUwMmQtJTAyZCIsICR5ZWFyICsgMTkwMCwgJG1vbnRoICsgMSwgJGRheSk7CisgfQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9yZXNwZWN0X3VtYXNrLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3Jlc3BlY3RfdW1hc2suZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWI0OThiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9yZXNwZWN0X3VtYXNrLmRpZmYKQEAgLTAsMCArMSwxNTMgQEAKK0Zyb20gZDlkNTM1ZWY5N2Y1N2FmNmU5NzI4MDc1OTQ0YzMzZjNiMGI1MzcyZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogVHVlLCA4IE1hciAyMDA1IDE5OjMwOjM4ICsxMTAwCitTdWJqZWN0OiBSZXNwZWN0IHVtYXNrIGR1cmluZyBpbnN0YWxsYXRpb24KKworVGhpcyBpcyBuZWVkZWQgdG8gc2F0aXNmeSBEZWJpYW4gcG9saWN5IHJlZ2FyZGluZyBncm91cC13cml0YWJsZQorc2l0ZSBkaXJlY3Rvcmllcy4KKworUGF0Y2gtTmFtZTogZml4ZXMvcmVzcGVjdF91bWFzay5kaWZmCistLS0KKyBjcGFuL0V4dFV0aWxzLUluc3RhbGwvbGliL0V4dFV0aWxzL0luc3RhbGwucG0gICB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIHwgMTggKysrKysrKysrLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtSW5zdGFsbC9saWIvRXh0VXRpbHMvSW5zdGFsbC5wbSBiL2NwYW4vRXh0VXRpbHMtSW5zdGFsbC9saWIvRXh0VXRpbHMvSW5zdGFsbC5wbQoraW5kZXggMWU4YWM0Yy4uM2U3OTEyMSAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtSW5zdGFsbC9saWIvRXh0VXRpbHMvSW5zdGFsbC5wbQorKysrIGIvY3Bhbi9FeHRVdGlscy1JbnN0YWxsL2xpYi9FeHRVdGlscy9JbnN0YWxsLnBtCitAQCAtNDUxLDcgKzQ1MSw3IEBAIHN1YiBfY2FuX3dyaXRlX2RpciB7CisgCisgPXBvZAorIAorLT1pdGVtIF9ta3BhdGgoJGRpciwkc2hvdywkbW9kZSwkdmVyYm9zZSwkZHJ5X3J1bikKKys9aXRlbSBfbWtwYXRoKCRkaXIsJHNob3csJHZlcmJvc2UsJGRyeV9ydW4pCisgCisgV3JhcHBlciBhcm91bmQgRmlsZTo6UGF0aDo6bWtwYXRoKCkgdG8gaGFuZGxlIGVycm9ycy4KKyAKK0BAIC00NjgsMTMgKzQ2OCwxMyBAQCB3cml0YWJsZS4KKyA9Y3V0CisgCisgc3ViIF9ta3BhdGggeworLSAgICBteSAoJGRpciwkc2hvdywkbW9kZSwkdmVyYm9zZSwkZHJ5X3J1bik9QF87CisrICAgIG15ICgkZGlyLCRzaG93LCR2ZXJib3NlLCRkcnlfcnVuKT1AXzsKKyAgICAgaWYgKCAkdmVyYm9zZSAmJiAkdmVyYm9zZSA+IDEgJiYgISAtZCAkZGlyKSB7CisgICAgICAgICAkc2hvdz0gMTsKKy0gICAgICAgIHByaW50ZiAibWtwYXRoKCVzLCVkLCUjbylcbiIsICRkaXIsICRzaG93LCAkbW9kZTsKKysgICAgICAgIHByaW50ZiAibWtwYXRoKCVzLCVkKVxuIiwgJGRpciwgJHNob3c7CisgICAgIH0KKyAgICAgaWYgKCEkZHJ5X3J1bikgeworLSAgICAgICAgaWYgKCAhIGV2YWwgeyBGaWxlOjpQYXRoOjpta3BhdGgoJGRpciwkc2hvdywkbW9kZSk7IDEgfSApIHsKKysgICAgICAgIGlmICggISBldmFsIHsgRmlsZTo6UGF0aDo6bWtwYXRoKCRkaXIsJHNob3cpOyAxIH0gKSB7CisgICAgICAgICAgICAgX2Nob2tlKCJDYW4ndCBjcmVhdGUgJyRkaXInIiwiJEAiKTsKKyAgICAgICAgIH0KKyAKK0BAIC03ODMsNyArNzgzLDcgQEAgc3ViIGluc3RhbGwgeyAjWFhYIE9TLVNQRUNJRklDCisgICAgICAgICBfY2hkaXIoJGN3ZCk7CisgICAgIH0KKyAgICAgZm9yZWFjaCBteSAkdGFyZ2V0ZGlyIChzb3J0IGtleXMgJWNoZWNrX2RpcnMpIHsKKy0gICAgICAgIF9ta3BhdGgoICR0YXJnZXRkaXIsIDAsIDA3NTUsICR2ZXJib3NlLCAkZHJ5X3J1biApOworKyAgICAgICAgX21rcGF0aCggJHRhcmdldGRpciwgMCwgJHZlcmJvc2UsICRkcnlfcnVuICk7CisgICAgIH0KKyAgICAgZm9yZWFjaCBteSAkZm91bmQgKEBmb3VuZF9maWxlcykgeworICAgICAgICAgbXkgKCRkaWZmLCAkZmZkLCAkb3JpZ2ZpbGUsICRtb2RlLCAkc2l6ZSwgJGF0aW1lLCAkbXRpbWUsCitAQCAtNzk3LDcgKzc5Nyw3IEBAIHN1YiBpbnN0YWxsIHsgI1hYWCBPUy1TUEVDSUZJQworICAgICAgICAgICAgICAgICAgICAgJHRhcmdldGZpbGU9IF91bmxpbmtfb3JfcmVuYW1lKCAkdGFyZ2V0ZmlsZSwgJ3RyeWhhcmQnLCAnaW5zdGFsbCcgKQorICAgICAgICAgICAgICAgICAgICAgICAgIHVubGVzcyAkZHJ5X3J1bjsKKyAgICAgICAgICAgICAgICAgfSBlbHNpZiAoICEgLWQgJHRhcmdldGRpciApIHsKKy0gICAgICAgICAgICAgICAgICAgIF9ta3BhdGgoICR0YXJnZXRkaXIsIDAsIDA3NTUsICR2ZXJib3NlLCAkZHJ5X3J1biApOworKyAgICAgICAgICAgICAgICAgICAgX21rcGF0aCggJHRhcmdldGRpciwgMCwgJHZlcmJvc2UsICRkcnlfcnVuICk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgcHJpbnQgIkluc3RhbGxpbmcgJHRhcmdldGZpbGVcbiI7CisgCitAQCAtODM3LDcgKzgzNyw3IEBAIHN1YiBpbnN0YWxsIHsgI1hYWCBPUy1TUEVDSUZJQworIAorICAgICBpZiAoJHBhY2t7J3dyaXRlJ30pIHsKKyAgICAgICAgICRkaXIgPSBpbnN0YWxsX3Jvb3RlZF9kaXIoZGlybmFtZSgkcGFja3snd3JpdGUnfSkpOworLSAgICAgICAgX21rcGF0aCggJGRpciwgMCwgMDc1NSwgJHZlcmJvc2UsICRkcnlfcnVuICk7CisrICAgICAgICBfbWtwYXRoKCAkZGlyLCAwLCAkdmVyYm9zZSwgJGRyeV9ydW4gKTsKKyAgICAgICAgIHByaW50ICJXcml0aW5nICRwYWNreyd3cml0ZSd9XG4iIGlmICR2ZXJib3NlOworICAgICAgICAgJHBhY2tsaXN0LT53cml0ZShpbnN0YWxsX3Jvb3RlZF9maWxlKCRwYWNreyd3cml0ZSd9KSkgdW5sZXNzICRkcnlfcnVuOworICAgICB9CitAQCAtMTE4MCw3ICsxMTgwLDcgQEAgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBzaWxlbmNlIHRoaXMgb3V0cHV0LgorIHN1YiBwbV90b19ibGliIHsKKyAgICAgbXkoJGZyb210bywkYXV0b2RpciwkcG1fZmlsdGVyKSA9IEBfOworIAorLSAgICBfbWtwYXRoKCRhdXRvZGlyLDAsMDc1NSk7CisrICAgIF9ta3BhdGgoJGF1dG9kaXIsMCk7CisgICAgIHdoaWxlKG15KCRmcm9tLCAkdG8pID0gZWFjaCAlJGZyb210bykgeworICAgICAgICAgaWYoIC1mICR0byAmJiAtcyAkZnJvbSA9PSAtcyAkdG8gJiYgLU0gJHRvIDwgLU0gJGZyb20gKSB7CisgICAgICAgICAgICAgcHJpbnQgIlNraXAgJHRvICh1bmNoYW5nZWQpXG4iIHVubGVzcyAkSU5TVEFMTF9RVUlFVDsKK0BAIC0xMjAzLDcgKzEyMDMsNyBAQCBzdWIgcG1fdG9fYmxpYiB7CisgICAgICAgICAgICAgIyB3ZSB3b250IHRyeSBoYXJkIGhlcmUuIGl0cyB0b28gbGlrZWx5IHRvIG1lc3MgdGhpbmdzIHVwLgorICAgICAgICAgICAgIGZvcmNldW5saW5rKCR0byk7CisgICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIF9ta3BhdGgoZGlybmFtZSgkdG8pLDAsMDc1NSk7CisrICAgICAgICAgICAgX21rcGF0aChkaXJuYW1lKCR0byksMCk7CisgICAgICAgICB9CisgICAgICAgICBpZiAoJG5lZWRfZmlsdGVyaW5nKSB7CisgICAgICAgICAgICAgcnVuX2ZpbHRlcigkcG1fZmlsdGVyLCAkZnJvbSwgJHRvKTsKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitpbmRleCBmNjMxNDVjLi4xOTdmMTAyIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitAQCAtMjExOCw3ICsyMTE4LDcgQEAgZG9jX19pbnN0YWxsIDogZG9jX3NpdGVfaW5zdGFsbAorIAkkKE5PRUNITykgJChFQ0hPKSBJTlNUQUxMRElSUyBub3QgZGVmaW5lZCwgZGVmYXVsdGluZyB0byBJTlNUQUxMRElSUz1zaXRlCisgCisgcHVyZV9wZXJsX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSAkKE1PRF9JTlNUQUxMKSBcCisrCSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTU9EX0lOU1RBTEwpIFwKKyB9OworIAorICAgICBwdXNoIEBtLAorQEAgLTIxMzgsNyArMjEzOCw3IEBAIHF7CQkiJChJTlNUX0xJQikiICIkKERFU1RJTlNUQUxMUFJJVkxJQikiIFwKKyAKKyAKKyBwdXJlX3NpdGVfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pICQoTU9EX0lOU1RBTEwpIFwKKysJJChOT0VDSE8pIHVtYXNrIDAyMjsgJChNT0RfSU5TVEFMTCkgXAorIH07CisgICAgIHB1c2ggQG0sCisgcXsJCXJlYWQgIn0uJHNlbGYtPmNhdGZpbGUoJyQoU0lURUFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorQEAgLTIxNTYsNyArMjE1Niw3IEBAIHF7CQkiJChJTlNUX0xJQikiICIkKERFU1RJTlNUQUxMU0lURUxJQikiIFwKKyAJCSJ9LiRzZWxmLT5jYXRkaXIoJyQoUEVSTF9BUkNITElCKScsJ2F1dG8nLCckKEZVTExFWFQpJykucXsiCisgCisgcHVyZV92ZW5kb3JfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pICQoTU9EX0lOU1RBTEwpIFwKKysJJChOT0VDSE8pIHVtYXNrIDAyMjsgJChNT0RfSU5TVEFMTCkgXAorIH07CisgICAgIHB1c2ggQG0sCisgcXsJCXJlYWQgIn0uJHNlbGYtPmNhdGZpbGUoJyQoVkVORE9SQVJDSEVYUCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCitAQCAtMjE4OCw4ICsyMTg4LDggQEAgZG9jX3ZlbmRvcl9pbnN0YWxsIDo6IGFsbAorICAgICBwdXNoIEBtLCBxeworIGRvY19wZXJsX2luc3RhbGwgOjogYWxsCisgCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCistCS0kKE5PRUNITykgJChET0NfSU5TVEFMTCkgXAorKwktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCisrCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKERPQ19JTlNUQUxMKSBcCisgCQkiTW9kdWxlIiAiJChOQU1FKSIgXAorIAkJImluc3RhbGxlZCBpbnRvIiAkKElOU1RBTExQUklWTElCKSBcCisgCQlMSU5LVFlQRSAiJChMSU5LVFlQRSkiIFwKK0BAIC0yMTk5LDggKzIxOTksOCBAQCBkb2NfcGVybF9pbnN0YWxsIDo6IGFsbAorIAorIGRvY19zaXRlX2luc3RhbGwgOjogYWxsCisgCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCistCS0kKE5PRUNITykgJChET0NfSU5TVEFMTCkgXAorKwktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCisrCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKERPQ19JTlNUQUxMKSBcCisgCQkiTW9kdWxlIiAiJChOQU1FKSIgXAorIAkJImluc3RhbGxlZCBpbnRvIiAkKElOU1RBTExTSVRFTElCKSBcCisgCQlMSU5LVFlQRSAiJChMSU5LVFlQRSkiIFwKK0BAIC0yMjEwLDggKzIyMTAsOCBAQCBkb2Nfc2l0ZV9pbnN0YWxsIDo6IGFsbAorIAorIGRvY192ZW5kb3JfaW5zdGFsbCA6OiBhbGwKKyAJJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKy0JLSQoTk9FQ0hPKSAkKERPQ19JTlNUQUxMKSBcCisrCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKysJLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoRE9DX0lOU1RBTEwpIFwKKyAJCSJNb2R1bGUiICIkKE5BTUUpIiBcCisgCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFZFTkRPUkxJQikgXAorIAkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2luc3Rtb2RzaF9kb2MuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vaW5zdG1vZHNoX2RvYy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MmM3NDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2luc3Rtb2RzaF9kb2MuZGlmZgpAQCAtMCwwICsxLDI3IEBACitGcm9tIDI2MjA5YjU1MjAxYTFiMmQyNTI1MmFjM2I0MjViYzQ5MDgxMjk5ZGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogRGViaWFuIHBvbGljeSBkb2Vzbid0IGluc3RhbGwgLnBhY2tsaXN0IGZpbGVzIGZvciBjb3JlIG9yIHZlbmRvci4KKworUGF0Y2gtTmFtZTogZGViaWFuL2luc3Rtb2RzaF9kb2MuZGlmZgorLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvYmluL2luc3Rtb2RzaCB8IDQgKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2Jpbi9pbnN0bW9kc2ggYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9iaW4vaW5zdG1vZHNoCitpbmRleCA4YjlhYTk1Li5lNTUxNDM0IDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvYmluL2luc3Rtb2RzaAorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvYmluL2luc3Rtb2RzaAorQEAgLTE4LDkgKzE4LDExIEBAIGluc3Rtb2RzaCAtIEEgc2hlbGwgdG8gZXhhbWluZSBpbnN0YWxsZWQgbW9kdWxlcworIAorID1oZWFkMSBERVNDUklQVElPTgorIAorLUEgbGl0dGxlIGludGVyZmFjZSB0byBFeHRVdGlsczo6SW5zdGFsbGVkIHRvIGV4YW1pbmUgaW5zdGFsbGVkIG1vZHVsZXMsCisrQSBsaXR0bGUgaW50ZXJmYWNlIHRvIEV4dFV0aWxzOjpJbnN0YWxsZWQgdG8gZXhhbWluZSBsb2NhbGx5KiBpbnN0YWxsZWQgbW9kdWxlcywKKyB2YWxpZGF0ZSB5b3VyIHBhY2tsaXN0cyBhbmQgZXZlbiBjcmVhdGUgYSB0YXJiYWxsIGZyb20gYW4gaW5zdGFsbGVkIG1vZHVsZS4KKyAKKysqT24gRGViaWFuIHN5c3RlbSwgQjxjb3JlPiBhbmQgQjx2ZW5kb3I+IG1vZHVsZXMgYXJlIG1hbmFnZWQgYnkgQzxkcGtnPi4KKysKKyA9aGVhZDEgU0VFIEFMU08KKyAKKyBFeHRVdGlsczo6SW5zdGFsbGVkCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xkX3J1bl9wYXRoLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xkX3J1bl9wYXRoLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwZjg2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGRfcnVuX3BhdGguZGlmZgpAQCAtMCwwICsxLDI0IEBACitGcm9tIDUzY2U2OTA4NTkxODIzMmExYjdlMjZlNzc2MmMxYjJmNzBiMWViNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgMTggTWFyIDIwMDUgMjI6MjI6MjUgKzExMDAKK1N1YmplY3Q6IFJlbW92ZSBzdGFuZGFyZCBsaWJzIGZyb20gTERfUlVOX1BBVEggYXMgcGVyIERlYmlhbiBwb2xpY3kuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9sZF9ydW5fcGF0aC5kaWZmCistLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0gfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbQoraW5kZXggMzdiY2ZkNC4uYmQ2NmU2NSAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbQorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtCitAQCAtNTYsNiArNTYsOSBAQCBzdWIgX3VuaXhfb3MyX2V4dCB7CisgICAgIG15ICggJHB3ZCApICAgPSBjd2QoKTsgICAgIyBmcm9tIEN3ZC5wbQorICAgICBteSAoICRmb3VuZCApID0gMDsKKyAKKysgICAgIyBEZWJpYW4tc3BlY2lmaWM6IGRvbid0IHVzZSBMRF9SVU5fUEFUSCBmb3Igc3RhbmRhcmQgZGlycworKyAgICAkbGRfcnVuX3BhdGhfc2VlbnskX30rKyBmb3IgQGxpYnBhdGg7CisrCisgICAgIGZvcmVhY2ggbXkgJHRoaXNsaWIgKCBzcGxpdCAnICcsICRwb3RlbnRpYWxfbGlicyApIHsKKyAgICAgICAgIG15ICggJGN1c3RvbV9uYW1lICkgPSAnJzsKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGlibmV0X2NvbmZpZ19wYXRoLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xpYm5ldF9jb25maWdfcGF0aC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZWY5NjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xpYm5ldF9jb25maWdfcGF0aC5kaWZmCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gYTdmNmQ0NTNlNjAyNTZkMzI5NDY5YTc1YjY0MmNjYTg1NGNlYmVhMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogVHVlLCA4IE1hciAyMDA1IDE5OjMwOjM4ICsxMTAwCitTdWJqZWN0OiBTZXQgbG9jYXRpb24gb2YgbGlibmV0LmNmZyB0byAvZXRjL3BlcmwvTmV0IGFzIC91c3IgbWF5IG5vdCBiZQorIHdyaXRhYmxlLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vbGlibmV0X2NvbmZpZ19wYXRoLmRpZmYKKy0tLQorIGNwYW4vbGlibmV0L2xpYi9OZXQvQ29uZmlnLnBtIHwgNyArKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vbGlibmV0L2xpYi9OZXQvQ29uZmlnLnBtIGIvY3Bhbi9saWJuZXQvbGliL05ldC9Db25maWcucG0KK2luZGV4IDk1M2E4MjYuLjYxYmExMmEgMTAwNjQ0CistLS0gYS9jcGFuL2xpYm5ldC9saWIvTmV0L0NvbmZpZy5wbQorKysrIGIvY3Bhbi9saWJuZXQvbGliL05ldC9Db25maWcucG0KK0BAIC02OCw5ICs2OCw4IEBAIG15ICVuYyA9ICgKKyBUUllfSU5URVJORVRfQ09ORklHCisgfQorIAorLW15ICRmaWxlID0gX19GSUxFX187CisrbXkgJGZpbGUgPSAnL2V0Yy9wZXJsL05ldC9saWJuZXQuY2ZnJzsKKyBteSAkcmVmOworLSRmaWxlID1+IHMvQ29uZmlnLnBtL2xpYm5ldC5jZmcvOworIGlmICgtZiAkZmlsZSkgeworICAgJHJlZiA9IGV2YWwgeyBsb2NhbCAkU0lHe19fRElFX199OyBkbyAkZmlsZSB9OworICAgaWYgKHJlZigkcmVmKSBlcSAnSEFTSCcpIHsKK0BAIC0xNDIsOCArMTQxLDggQEAgTmV0OjpDb25maWcgLSBMb2NhbCBjb25maWd1cmF0aW9uIGRhdGEgZm9yIGxpYm5ldAorIEM8TmV0OjpDb25maWc+IGhvbGRzIGNvbmZpZ3VyYXRpb24gZGF0YSBmb3IgdGhlIG1vZHVsZXMgaW4gdGhlIGxpYm5ldAorIGRpc3RyaWJ1dGlvbi4gRHVyaW5nIGluc3RhbGxhdGlvbiB5b3Ugd2lsbCBiZSBhc2tlZCBmb3IgdGhlc2UgdmFsdWVzLgorIAorLVRoZSBjb25maWd1cmF0aW9uIGRhdGEgaXMgaGVsZCBnbG9iYWxseSBpbiBhIGZpbGUgaW4gdGhlIHBlcmwgaW5zdGFsbGF0aW9uCistdHJlZSwgYnV0IGEgdXNlciBtYXkgb3ZlcnJpZGUgYW55IG9mIHRoZXNlIHZhbHVlcyBieSBwcm92aWRpbmcgdGhlaXIgb3duLiBUaGlzCisrVGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBoZWxkIGdsb2JhbGx5IGluIEM8L2V0Yy9wZXJsL05ldC9saWJuZXQuY2ZnPiwKKytidXQgYSB1c2VyIG1heSBvdmVycmlkZSBhbnkgb2YgdGhlc2UgdmFsdWVzIGJ5IHByb3ZpZGluZyB0aGVpciBvd24uIFRoaXMKKyBjYW4gYmUgZG9uZSBieSBoYXZpbmcgYSBDPC5saWJuZXRyYz4gZmlsZSBpbiB0aGVpciBob21lIGRpcmVjdG9yeS4gVGhpcyBmaWxlCisgc2hvdWxkIHJldHVybiBhIHJlZmVyZW5jZSB0byBhIEhBU0ggY29udGFpbmluZyB0aGUga2V5cyBkZXNjcmliZWQgYmVsb3cuCisgRm9yIGV4YW1wbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGlicGVybF9lbWJlZF9kb2MuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGlicGVybF9lbWJlZF9kb2MuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmI4MDU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9saWJwZXJsX2VtYmVkX2RvYy5kaWZmCkBAIC0wLDAgKzEsMjYgQEAKK0Zyb20gZmI4YmRiYjRiZjU2MzgyZGUwOTllNjJjMjU2NDI4NmI5ZGZkYTQ2ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogVHVlLCA4IE1hciAyMDA1IDE5OjMwOjM4ICsxMTAwCitTdWJqZWN0OiBOb3RlIHRoYXQgbGlicGVybC1kZXYgcGFja2FnZSBpcyByZXF1aXJlZCBmb3IgZW1iZWRkZWQgbGlua2luZworCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzE4Njc3OAorCitQYXRjaC1OYW1lOiBkZWJpYW4vbGlicGVybF9lbWJlZF9kb2MuZGlmZgorLS0tCisgbGliL0V4dFV0aWxzL0VtYmVkLnBtIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWIvRXh0VXRpbHMvRW1iZWQucG0gYi9saWIvRXh0VXRpbHMvRW1iZWQucG0KK2luZGV4IDNmOTgzYzEuLjBlYzhhNjcgMTAwNjQ0CistLS0gYS9saWIvRXh0VXRpbHMvRW1iZWQucG0KKysrKyBiL2xpYi9FeHRVdGlscy9FbWJlZC5wbQorQEAgLTI5Niw2ICsyOTYsOSBAQCBhbmQgZXh0ZW5zaW9ucyBpbiB5b3VyIEMvQysrIGFwcGxpY2F0aW9ucy4KKyBUeXBpY2FsbHksIGFuIGFwcGxpY2F0aW9uIEY8TWFrZWZpbGU+IHdpbGwgaW52b2tlIEM8RXh0VXRpbHM6OkVtYmVkPgorIGZ1bmN0aW9ucyB3aGlsZSBidWlsZGluZyB5b3VyIGFwcGxpY2F0aW9uLiAgCisgCisrTm90ZSB0aGF0IG9uIERlYmlhbiBzeXN0ZW1zIHRoZSBCPGxpYnBlcmwtZGV2PiBwYWNrYWdlIGlzIHJlcXVpcmVkIGZvcgorK2NvbXBpbGluZyBhcHBsaWNhdGlvbnMgd2hpY2ggZW1iZWQgYW4gaW50ZXJwcmV0ZXIuCisrCisgPWhlYWQxIEBFWFBPUlQKKyAKKyBDPEV4dFV0aWxzOjpFbWJlZD4gZXhwb3J0cyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbG9jYWxlLXJvYnVzdG5lc3MuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbG9jYWxlLXJvYnVzdG5lc3MuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDQ3MWVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9sb2NhbGUtcm9idXN0bmVzcy5kaWZmCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb20gMjg5ZWFmODdmOGRlNGQ5ZWJmZDY2MWQ0ZTQyOTljMjk1MjQzNTI0MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgMTAgQXByIDIwMTUgMTA6MTk6NTEgKzAzMDAKK1N1YmplY3Q6IE1ha2UgdC9ydW4vbG9jYWxlLnQgc3Vydml2ZSBtaXNzaW5nIGxvY2FsZXMgbWFza2VkIGJ5IExDX0FMTAorCitJZiBMQ19BTEwgaXMgc2V0IHRvIGEgdmFsaWQgbG9jYWxlIGJ1dCBhbm90aGVyIExDXyogc2V0dGluZyBsaWtlIExDX0NUWVBFCitpc24ndCwgdC9ydW4vbG9jYWxlLnQgd291bGQgZmFpbCBiZWNhdXNlIGl0IGV4cGxpY2l0bHkgdW5zZXRzIExDX0FMTCwKK3VubWFza2luZyB0aGUgcHJvYmxlbSB1bmRlcm5lYXRoLiBBbGwgdGhlIG90aGVyIHRlc3RzIHN1cnZpdmUgc3VjaAorYSBzY2VuYXJpby4KKworV2hpbGUgdGhpcyBpcyBjbGVhcmx5IGFuIGVycm9yIGluIHRoZSBidWlsZCBlbnZpcm9ubWVudCwgaXQncyBlYXN5IHRvIG1ha2UKK3RoZSB0ZXN0IG1vcmUgcm9idXN0IGJ5IGZpcnN0IGNsZWFyaW5nIGFsbCB0aGUgbG9jYWxlIHJlbGV2YW50IHZhcmlhYmxlcy4KKworQnVnOiBodHRwczovL3J0LnBlcmwub3JnL1RpY2tldC9EaXNwbGF5Lmh0bWw/aWQ9MTI0MzEwCitCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy83ODIwNjgKK1BhdGNoLU5hbWU6IGRlYmlhbi9sb2NhbGUtcm9idXN0bmVzcy5kaWZmCistLS0KKyB0L3J1bi9sb2NhbGUudCB8IDcgKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90L3J1bi9sb2NhbGUudCBiL3QvcnVuL2xvY2FsZS50CitpbmRleCBiZDFhMDM0Li4yMTA1MzM5IDEwMDY0NAorLS0tIGEvdC9ydW4vbG9jYWxlLnQKKysrKyBiL3QvcnVuL2xvY2FsZS50CitAQCAtMjcsNiArMjcsOSBAQCBteSBAbG9jYWxlcyA9IGV2YWwgeyBmaW5kX2xvY2FsZXMoIFsgJkxDX0FMTCwgJkxDX0NUWVBFLCAmTENfTlVNRVJJQyBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfTsKKyBza2lwX2FsbCgibm8gbG9jYWxlcyBhdmFpbGFibGUiKSB1bmxlc3MgQGxvY2FsZXM7CisgCisrIyByZXNldCB0aGUgbG9jYWxlIGVudmlyb25tZW50CisrbG9jYWwgQEVOVnsnTEFORycsIChncmVwIC9eTENfLywga2V5cyAlRU5WKX07CisrCisgcGxhbiB0ZXN0cyA9PiAmbGFzdDsKKyAKKyBteSAkbm9uX0NfbG9jYWxlOworQEAgLTU4LDkgKzYxLDYgQEAgRU9GCisgU0tJUDogeworICAgICBza2lwKCJXaW5kb3dzIHN0b3JlcyBsb2NhbGUgZGVmYXVsdHMgaW4gdGhlIHJlZ2lzdHJ5IiwgMSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgJF5PIGVxICdNU1dpbjMyJzsKKy0gICAgbG9jYWwgJEVOVntMQ19OVU1FUklDfTsgIyBTbyBub3QgdGFrZW4gYXMgYSBkZWZhdWx0CistICAgIGxvY2FsICRFTlZ7TENfQUxMfTsgIyBzbyBpdCBuZXZlciBvdmVycmlkZXMgTENfTlVNRVJJQworLSAgICBsb2NhbCAkRU5We0xBTkd9OyAgICMgU28gbm90IHRha2VuIGFzIGEgZGVmYXVsdAorICAgICBmcmVzaF9wZXJsX2lzKCJmb3IgKHF3KEBsb2NhbGVzKSkge1xuIiAuIDw8J0VPRicsCisgICAgICAgICB1c2UgUE9TSVggcXcobG9jYWxlX2gpOworICAgICAgICAgdXNlIGxvY2FsZTsKK0BAIC0zNDgsNyArMzQ4LDYgQEAgRU9GCisgCisgICAgIHsKKyAJbG9jYWwgJEVOVntMQ19OVU1FUklDfSA9ICRkaWZmZXJlbnQ7CistCWxvY2FsICRFTlZ7TENfQUxMfTsgIyBzbyBpdCBuZXZlciBvdmVycmlkZXMgTENfTlVNRVJJQworIAlmcmVzaF9wZXJsX2lzKDw8IkVPRiIsCisgCSAgICB1c2UgUE9TSVggcXcobG9jYWxlX2gpOworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tYWtlbWFrZXItcGFzdGhydS5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tYWtlbWFrZXItcGFzdGhydS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMGY5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21ha2VtYWtlci1wYXN0aHJ1LmRpZmYKQEAgLTAsMCArMSwzMCBAQAorRnJvbSA1OTNkZDUyZjUzNWIxZjQzOWRmZDBhZmU1MjIxMWFlODk2MGU5ODBhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogU3VuLCAyNCBBdWcgMjAxNCAxMjo1NjoxMSAtMDcwMAorU3ViamVjdDogUGFzcyBMRCBzZXR0aW5ncyB0aHJvdWdoIHRvIHN1YmRpcmVjdG9yaWVzCisKK1tydC5jcGFuLm9yZyAjMjg2MzJdIGZpeGVkIG1vc3QgaXNzdWVzIHdpdGggcGFzc2luZyBMRCBkb3duIHRvCitzdWJkaXJlY3RvcnkgTWFrZWZpbGUuUEwgZmlsZXMuIEhvd2V2ZXIsIHRoZXJlIGFyZSBzb21lIGRpc3RyaWJ1dGlvbnMKKyhpbmNsdWRpbmcgV3gsIFBhcjo6UGFja2VyLCBhbmQgVmVyaWxvZy1QZXJsKSB0aGF0IGV4cGxpY2l0bHkgc2V0CitMRC4gVGhvc2Ugc3RpbGwgY2FuJ3QgYmUgb3ZlcnJpZGRlbiBmcm9tIHRoZSBjb21tYW5kIGxpbmUuIEFkZGluZyBMRCB0bwordGhlIFBBU1RIUlUgbGlzdCBmaXhlcyB0aGlzLgorCitCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy83NTg0NzEKK1BhdGNoLU5hbWU6IGRlYmlhbi9tYWtlbWFrZXItcGFzdGhydS5kaWZmCistLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK2luZGV4IDRhOGUxNGMuLjU0OGQ5OGUgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK0BAIC0yNzkzLDcgKzI3OTMsNyBAQCBzdWIgcGFzdGhydSB7CisgICAgIG15KCRzZXApID0gJElze1ZNU30gPyAnLCcgOiAnJzsKKyAgICAgJHNlcCAuPSAiXFxcblx0IjsKKyAKKy0gICAgZm9yZWFjaCBteSAka2V5IChxdyhMSUIgTElCUEVSTF9BIExJTktUWVBFIE9QVElNSVpFCisrICAgIGZvcmVhY2ggbXkgJGtleSAocXcoTElCIExJQlBFUkxfQSBMSU5LVFlQRSBPUFRJTUlaRSBMRAorICAgICAgICAgICAgICAgICAgICAgIFBSRUZJWCBJTlNUQUxMX0JBU0UpCisgICAgICAgICAgICAgICAgICApCisgICAgIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyX2N1c3RvbWl6ZWQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyX2N1c3RvbWl6ZWQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWI0Y2I5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tYWtlbWFrZXJfY3VzdG9taXplZC5kaWZmCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gNjM0NDQ5MDY2YTljODEwZTgxNTA2NDI1ZDJjYTkyNWIyZmQ3MmFiMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERvbWluaWMgSGFyZ3JlYXZlcyA8ZG9tQGVhcnRoLmxpPgorRGF0ZTogU2F0LCAyMyBNYXkgMjAxNSAyMToxNTowNiArMDIwMAorU3ViamVjdDogVXBkYXRlIHQvcG9ydGluZy9jdXN0b21pemVkLmRhdCBmb3IgZmlsZXMgcGF0Y2hlZCBpbiBEZWJpYW4KKworUGF0Y2gtTmFtZTogZGViaWFuL21ha2VtYWtlcl9jdXN0b21pemVkLmRpZmYKKy0tLQorIHQvcG9ydGluZy9jdXN0b21pemVkLmRhdCB8IDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0IGIvdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0CitpbmRleCA3ZGYzOThkLi5mODU3YmQyIDEwMDY0NAorLS0tIGEvdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0CisrKysgYi90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQKK0BAIC0xLDcgKzEsNyBAQAorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0NvbW1hbmQvTU0ucG0gN2Y0ZGZkMGZlODg0YmQ0MjQxMmJjZjA0Y2E4MGVmOTdiMzljMWQ1NAorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QucG0gYmVmMDk5OTg4YjE1ZmIwYjJhMWY1YWM0OGMwMWFmMWY3ZjM2ZDMyOQorLUV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtIDgxNjhlMThmMGUzY2UzZWNlNGJiN2U3YzcyZDU3ZWMwN2M2N2M0MDIKKy1FeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIucG0gNzExNWU5N2E1MzU1OWNiM2VjMDYxZGQ2ZjdmMzQ0ZTUyMjcyNGM0YQorK0V4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtIDM0OTNhZTZmOTMyNjRlOTY3ZjU4ZGVkYWEzZGJmM2RiY2IyNDk4NTMKKytFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIucG0gM2Q3YWJkNjc0YjE1ZWQzMjNmNzQzNTk0ZWYwYmQwOWRiNzZiMWFlZQorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci9Db25maWcucG0gZjhkYjhkNDI0NWJmMDY4NGI4MjEwYzgxMWY1MGQ3Y2ZiMWEyN2Q3OAorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci9GQVEucG9kIDc1N2JmZmI0Nzg1NzUyMTMxMWY4ZjNiZGU0M2ViZTE2NWY4ZDUxOTEKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIvTG9jYWxlLnBtIDgyYmUwNjg1MWRlYjg0YzY0MTlhZDAwM2NlOWI2ZDE5NTdmMzk1ZjMKK0BAIC0xMyw3ICsxMyw3IEBAIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01rYm9vdHN0cmFwLnBtIDU4ODcyZDY2CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWtzeW1saXN0cy5wbSBhYjgwMDI5YWIxNmQzOGQ0ZjJlNDFkYzg4ZDJjZWI5ZjM3OTBlNDc3CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU0ucG0gNDUzZTBhYmJjNGJiMzhkYjRjMDgyMGFkNWM0ODQ2ZjMxM2I2NjI5MQorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0FJWC5wbSBjMWIxYmFiZGE4ZjQzYWU3YTJjYWJhMWNiNGY3MGY5MmFmNWEwZTM0CistRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQW55LnBtIDZmOTBkOTRhZDNlN2FhMDA0NWEzYjFhMTBhMWJiMTgzOTFmODlmNTcKKytFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9BbnkucG0gMjFiZGU1MzI5MGJmMWE0ZGE0NDU3MjkwYjY1YmQxYjBjYTZmMWQxNgorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0JlT1MucG0gY2FiMmIzY2UwOGI3MWE0Y2U4OWFhNjMwZjIzNmViMDhiODUyNDM5ZAorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0N5Z3dpbi5wbSA2MWZjZWQwZmFmNTE4YmY4N2MyNjVmY2I1MWVkMzMwYmEzNTQ2MjNmCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fRGFyd2luLnBtIGFlMGVmNTFhN2I2ZGQwYjA1YWE2MWM3NzlkZjcxNjdkZGE1ZjUxMTkKK0BAIC0yMiw3ICsyMiw3IEBAIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX01hY09TLnBtIDA1NDQzMDFmNzEyCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fTlc1LnBtIDQzMzEzNWVlY2I4NWI0YjFkOTBkMzAyNzQzMmYzMjk0MzZjNzg0NDcKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9PUzIucG0gMWZiYjU2MDViZmI0N2ZlZWU0MDgzZmViYThhYTg1ZTY1OTYyOGY3MAorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1FOWC5wbSA1YjY2ZDFmNDg1YTYwMzRkOTZmYzI0YmExNjY1YjFiYWQ5ZTQ0N2YxCistRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSA4Y2VmOTlhOWJkMzcwZWNmZDA3ZGRiMGVmYmRjYmI0MTAxMjU1ZTQ1CisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSBjNDU1YzkxNWZiN2RjM2VlYjEyMDBlZDFjZDE5MDQ4ZTZmMjFlNmIxCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVVdJTi5wbSA5Mzk1NzJmZGUzZDU5YmE3N2MyZTY3N2ZlMmRmMmJlZDRiZWQ1ODk4CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVk1TLnBtIDA5YzIwNDliZmQyNWI3MzVlMmE1YmNmNTZhNmNmZjdiNDgyN2Y5YzgKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9WT1MucG0gZDY1ZDYzZjgyMTdhNTVjMzZmNjJlMjQ5ODE0OTg4OTc0ZjU5M2M3OQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tb2RfcGF0aHMuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbW9kX3BhdGhzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxNTkwNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbW9kX3BhdGhzLmRpZmYKQEAgLTAsMCArMSw5OSBAQAorRnJvbSA2YzZjZjE0ZTIwNGYzYzAzMTM3MmJmZDk2MDRhZDUyNGQ1NjkxMTg2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDE4IE1hciAyMDA1IDIyOjIyOjI1ICsxMTAwCitTdWJqZWN0OiBUd2VhayBASU5DIG9yZGVyaW5nIGZvciBEZWJpYW4KKworT3VyIG9yZGVyIGlzOgorCisgICAgZXRjIChmb3IgY29uZmlnIGZpbGVzKQorICAgIHNpdGUgKDUuOC4xKQorICAgIHZlbmRvciAoYWxsKQorICAgIGNvcmUgKDUuOC4xKQorICAgIHNpdGUgKHZlcnNpb24taW5kZXApCisgICAgc2l0ZSAocHJlLTUuOC4xKQorCitUaGUgcmF0aW9uYWxlIGJlaW5nIHRoYXQgYW4gYWRtaW4gKHZpYSBzaXRlKSwgb3IgbW9kdWxlIHBhY2thZ2VyCisodmVuZG9yKSBjYW4gY2hvc2UgdG8gc2hhZG93IGNvcmUgbW9kdWxlcyB3aGVuIHRoZXJlIGlzIGEgbmV3ZXIKK3ZlcnNpb24gdGhhbiBpcyBpbmNsdWRlZCBpbiBjb3JlLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vbW9kX3BhdGhzLmRpZmYKKy0tLQorIHBlcmwuYyB8IDU4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNTggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvcGVybC5jIGIvcGVybC5jCitpbmRleCAwODY2NDViLi5lNjRmMWY0IDEwMDY0NAorLS0tIGEvcGVybC5jCisrKysgYi9wZXJsLmMKK0BAIC00MzczLDYgKzQzNzMsMTEgQEAgU19pbml0X3BlcmxsaWIocFRIWCkKKyAJCSAgICAgIElOQ1BVU0hfQUREX1NVQl9ESVJTfElOQ1BVU0hfQ0FOX1JFTE9DQVRFKTsKKyAjZW5kaWYKKyAKKysjaWZkZWYgREVCSUFOCisrICAgIC8qIGZvciBjb25maWd1cmF0aW9uIHdoZXJlIC91c3IgaXMgbW91bnRlZCBybyAoQ1BBTjo6Q29uZmlnLCBOZXQ6OkNvbmZpZykgKi8KKysgICAgU19pbmNwdXNoX3VzZV9zZXAoYVRIWF8gU1RSX1dJVEhfTEVOKCIvZXRjL3BlcmwiKSwgMHgwKTsKKysjZW5kaWYKKysKKyAjaWZkZWYgU0lURUFSQ0hfRVhQCisgICAgIC8qIHNpdGVhcmNoIGlzIGFsd2F5cyByZWxhdGl2ZSB0byBzaXRlbGliIG9uIFdpbmRvd3MgZm9yCisgICAgICAqIERMTC1iYXNlZCBwYXRoIGludHVpdGlvbiB0byB3b3JrIGNvcnJlY3RseSAqLworQEAgLTQ0OTAsNiArNDQ5NSw1OSBAQCBTX2luaXRfcGVybGxpYihwVEhYKQorIAkJICAgICAgSU5DUFVTSF9BRERfT0xEX1ZFUlN8SU5DUFVTSF9DQU5fUkVMT0NBVEUpOworICNlbmRpZgorIAorKyNpZmRlZiBERUJJQU4KKysgICAgLyogTm9uLXZlcnNpb25lZCBzaXRlIGRpcmVjdG9yeSBmb3IgbG9jYWwgbW9kdWxlcyBhbmQgZm9yCisrICAgICAgIGNvbXBhdGFiaWxpdHkgd2l0aCB0aGUgcHJldmlvdXMgcGFja2FnZXMnIHNpdGUgZGlycyAqLworKyAgICBTX2luY3B1c2hfdXNlX3NlcChhVEhYXyBTVFJfV0lUSF9MRU4oIi91c3IvbG9jYWwvbGliL3NpdGVfcGVybCIpLAorKwkJICAgICAgSU5DUFVTSF9BRERfU1VCX0RJUlMpOworKworKyNpZmRlZiBQRVJMX0lOQ19WRVJTSU9OX0xJU1QKKysgICAgeworKwlzdHJ1Y3Qgc3RhdCBzOworKworKwkvKiBhZGQgc21hbGwgYnVmZmVyIGluIGNhc2Ugb2xkIHZlcnNpb25zIGFyZSBsb25nZXIgdGhhbiB0aGUKKysJICAgY3VycmVudCB2ZXJzaW9uICovCisrCWNoYXIgc2l0ZWFyY2hbc2l6ZW9mKFNJVEVBUkNIX0VYUCkrMTZdID0gU0lURUFSQ0hfRVhQOworKwljaGFyIHNpdGVsaWJbc2l6ZW9mKFNJVEVMSUJfRVhQKSsxNl0gPSBTSVRFTElCX0VYUDsKKysJY2hhciBjb25zdCAqdmVyc1tdID0geyBQRVJMX0lOQ19WRVJTSU9OX0xJU1QgfTsKKysJY2hhciBjb25zdCAqKnA7CisrCisrCWNoYXIgKmFyY2hfdmVycyA9IHN0cnJjaHIoc2l0ZWFyY2gsICcvJyk7CisrCWNoYXIgKmxpYl92ZXJzID0gc3RycmNocihzaXRlbGliLCAnLycpOworKworKwlpZiAoYXJjaF92ZXJzICYmIGlzZGlnaXQoKisrYXJjaF92ZXJzKSkKKysJICAgICphcmNoX3ZlcnMgPSAwOworKwllbHNlCisrCSAgICBhcmNoX3ZlcnMgPSAwOworKworKwlpZiAobGliX3ZlcnMgJiYgaXNkaWdpdCgqKytsaWJfdmVycykpCisrCSAgICAqbGliX3ZlcnMgPSAwOworKwllbHNlCisrCSAgICBsaWJfdmVycyA9IDA7CisrCisrCS8qIHRoZXJlIGlzIHNvbWUgZHVwbGljYXRpb24gaGVyZSBhcyBpbmNwdXNoIGRvZXMgc29tZXRoaW5nCisrCSAgIHNpbWlsYXIgaW50ZXJuYWxseSwgYnV0IHJlcXVpcmVkIGFzIHNpdGVhcmNoIGlzIG5vdCBhCisrCSAgIHN1YmRpcmVjdG9yeSBvZiBzaXRlbGliICovCisrCWZvciAocCA9IHZlcnM7ICpwOyBwKyspCisrCXsKKysJICAgIGlmIChhcmNoX3ZlcnMpCisrCSAgICB7CisrCQlzdHJjcHkoYXJjaF92ZXJzLCAqcCk7CisrCQlpZiAoUGVybExJT19zdGF0KHNpdGVhcmNoLCAmcykgPj0gMCAmJiBTX0lTRElSKHMuc3RfbW9kZSkpCisrCQkgICAgU19pbmNwdXNoX3VzZV9zZXAoYVRIWF8gc2l0ZWFyY2gsIHN0cmxlbihzaXRlYXJjaCksIDB4MCk7CisrCSAgICB9CisrCisrCSAgICBpZiAobGliX3ZlcnMpCisrCSAgICB7CisrCQlzdHJjcHkobGliX3ZlcnMsICpwKTsKKysJCWlmIChQZXJsTElPX3N0YXQoc2l0ZWxpYiwgJnMpID49IDAgJiYgU19JU0RJUihzLnN0X21vZGUpKQorKwkJICAgIFNfaW5jcHVzaF91c2Vfc2VwKGFUSFhfIHNpdGVsaWIsIHN0cmxlbihzaXRlbGliKSwgMHgwKTsKKysJICAgIH0KKysJfQorKyAgICB9CisrI2VuZGlmCisrI2VuZGlmCisrCisgI2lmZGVmIFBFUkxfT1RIRVJMSUJESVJTCisgICAgIFNfaW5jcHVzaF91c2Vfc2VwKGFUSFhfIFNUUl9XSVRIX0xFTihQRVJMX09USEVSTElCRElSUyksCisgCQkgICAgICBJTkNQVVNIX0FERF9PTERfVkVSU3xJTkNQVVNIX0FERF9BUkNIT05MWV9TVUJfRElSUwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9ub19wYWNrbGlzdF9wZXJsbG9jYWwuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbm9fcGFja2xpc3RfcGVybGxvY2FsLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkxMWZkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbm9fcGFja2xpc3RfcGVybGxvY2FsLmRpZmYKQEAgLTAsMCArMSw5MiBAQAorRnJvbSAyNDBmMmY0YWViMzg1MGJjMGM1MzcwYjlmYmMzOTA5NTczYmVkOWIzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBUdWUsIDggTWFyIDIwMDUgMTk6MzA6MzggKzExMDAKK1N1YmplY3Q6IERvbid0IGluc3RhbGwgLnBhY2tsaXN0IG9yIHBlcmxsb2NhbC5wb2QgZm9yIHBlcmwgb3IgdmVuZG9yCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9ub19wYWNrbGlzdF9wZXJsbG9jYWwuZGlmZgorLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gfCAzNSArKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitpbmRleCA1NzBhNjMxLi4zOTFkYzIyIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitAQCAtMjEyMiwxMSArMjEyMiw2IEBAIHB1cmVfcGVybF9pbnN0YWxsIDo6IGFsbAorIH07CisgCisgICAgIHB1c2ggQG0sCistcXsJCXJlYWQgIn0uJHNlbGYtPmNhdGZpbGUoJyQoUEVSTF9BUkNITElCKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKKy0JCXdyaXRlICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMQVJDSExJQiknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCistfSB1bmxlc3MgJHNlbGYtPntOT19QQUNLTElTVH07CistCistICAgIHB1c2ggQG0sCisgcXsJCSIkKElOU1RfTElCKSIgIiQoREVTVElOU1RBTExQUklWTElCKSIgXAorIAkJIiQoSU5TVF9BUkNITElCKSIgIiQoREVTVElOU1RBTExBUkNITElCKSIgXAorIAkJIiQoSU5TVF9CSU4pIiAiJChERVNUSU5TVEFMTEJJTikiIFwKK0BAIC0yMTU4LDEwICsyMTUzLDYgQEAgcXsJCSIkKElOU1RfTElCKSIgIiQoREVTVElOU1RBTExTSVRFTElCKSIgXAorIHB1cmVfdmVuZG9yX2luc3RhbGwgOjogYWxsCisgCSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTU9EX0lOU1RBTEwpIFwKKyB9OworLSAgICBwdXNoIEBtLAorLXF7CQlyZWFkICJ9LiRzZWxmLT5jYXRmaWxlKCckKFZFTkRPUkFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorLQkJd3JpdGUgIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExWRU5ET1JBUkNIKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKKy19IHVubGVzcyAkc2VsZi0+e05PX1BBQ0tMSVNUfTsKKyAKKyAgICAgcHVzaCBAbSwKKyBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFZFTkRPUkxJQikiIFwKK0BAIC0yMTg3LDM3ICsyMTc4LDE5IEBAIGRvY192ZW5kb3JfaW5zdGFsbCA6OiBhbGwKKyAKKyAgICAgcHVzaCBAbSwgcXsKKyBkb2NfcGVybF9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCistCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKERPQ19JTlNUQUxMKSBcCistCQkiTW9kdWxlIiAiJChOQU1FKSIgXAorLQkJImluc3RhbGxlZCBpbnRvIiAkKElOU1RBTExQUklWTElCKSBcCistCQlMSU5LVFlQRSAiJChMSU5LVFlQRSkiIFwKKy0JCVZFUlNJT04gIiQoVkVSU0lPTikiIFwKKy0JCUVYRV9GSUxFUyAiJChFWEVfRklMRVMpIiBcCistCQk+PiAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTEFSQ0hMSUIpJywncGVybGxvY2FsLnBvZCcpLnF7IgorIAorIGRvY19zaXRlX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgdW1hc2sgMDI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorKwkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExTSVRFQVJDSCkvcGVybGxvY2FsLnBvZCIKKysJLSQoTk9FQ0hPKSB1bWFzayAwMjsgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMU0lURUFSQ0gpIgorIAktJChOT0VDSE8pIHVtYXNrIDAyOyAkKERPQ19JTlNUQUxMKSBcCisgCQkiTW9kdWxlIiAiJChOQU1FKSIgXAorIAkJImluc3RhbGxlZCBpbnRvIiAkKElOU1RBTExTSVRFTElCKSBcCisgCQlMSU5LVFlQRSAiJChMSU5LVFlQRSkiIFwKKyAJCVZFUlNJT04gIiQoVkVSU0lPTikiIFwKKyAJCUVYRV9GSUxFUyAiJChFWEVfRklMRVMpIiBcCistCQk+PiAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTEFSQ0hMSUIpJywncGVybGxvY2FsLnBvZCcpLnF7IgorKwkJPj4gIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExTSVRFQVJDSCknLCdwZXJsbG9jYWwucG9kJykucXsiCisgCisgZG9jX3ZlbmRvcl9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCistCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKERPQ19JTlNUQUxMKSBcCistCQkiTW9kdWxlIiAiJChOQU1FKSIgXAorLQkJImluc3RhbGxlZCBpbnRvIiAkKElOU1RBTExWRU5ET1JMSUIpIFwKKy0JCUxJTktUWVBFICIkKExJTktUWVBFKSIgXAorLQkJVkVSU0lPTiAiJChWRVJTSU9OKSIgXAorLQkJRVhFX0ZJTEVTICIkKEVYRV9GSUxFUykiIFwKKy0JCT4+ICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMQVJDSExJQiknLCdwZXJsbG9jYWwucG9kJykucXsiCisgCisgfSB1bmxlc3MgJHNlbGYtPntOT19QRVJMTE9DQUx9OworIAorQEAgLTIyMjYsMTMgKzIxOTksMTEgQEAgdW5pbnN0YWxsIDo6IHVuaW5zdGFsbF9mcm9tXyQoSU5TVEFMTERJUlMpZGlycworIAkkKE5PRUNITykgJChOT09QKQorIAorIHVuaW5zdGFsbF9mcm9tX3BlcmxkaXJzIDo6CistCSQoTk9FQ0hPKSAkKFVOSU5TVEFMTCkgIn0uJHNlbGYtPmNhdGZpbGUoJyQoUEVSTF9BUkNITElCKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiCisgCisgdW5pbnN0YWxsX2Zyb21fc2l0ZWRpcnMgOjoKKyAJJChOT0VDSE8pICQoVU5JTlNUQUxMKSAifS4kc2VsZi0+Y2F0ZmlsZSgnJChTSVRFQVJDSEVYUCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IgorIAorIHVuaW5zdGFsbF9mcm9tX3ZlbmRvcmRpcnMgOjoKKy0JJChOT0VDSE8pICQoVU5JTlNUQUxMKSAifS4kc2VsZi0+Y2F0ZmlsZSgnJChWRU5ET1JBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiCisgfTsKKyAKKyAgICAgam9pbigiIixAbSk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BhdGNobGV2ZWwuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGF0Y2hsZXZlbC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NTZiMDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BhdGNobGV2ZWwuZGlmZgpAQCAtMCwwICsxLDMwIEBACitGcm9tIGI1MTdjNWUxNWQwODcxZTM2ZDBmMTE4NzY2MWZlMWRkMjhkZGY4MjAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBTdW4sIDE1IE1heSAyMDExIDE5OjM1OjU4ICswMzAwCitTdWJqZWN0OiBMaXN0IHBhY2thZ2VkIHBhdGNoZXMgaW4gcGF0Y2hsZXZlbC5oCisKK09yaWdpbjogdmVuZG9yCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzU2NzQ4OQorCitUaGUgbGlzdCBvZiBwYWNrYWdlZCBwYXRjaGVzIGlzIGluIHBhdGNobGV2ZWwtZGViaWFuLmgsIHdoaWNoIGlzIGdlbmVyYXRlZAorZnJvbSB0aGUgZGViaWFuL3BhdGNoZXMvIGRpcmVjdG9yeSB3aGVuIGJ1aWxkaW5nIHRoZSBwYWNrYWdlLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vcGF0Y2hsZXZlbC5kaWZmCistLS0KKyBwYXRjaGxldmVsLmggfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3BhdGNobGV2ZWwuaCBiL3BhdGNobGV2ZWwuaAoraW5kZXggYTBhZDc4Yi4uMDEzNjdiNyAxMDA2NDQKKy0tLSBhL3BhdGNobGV2ZWwuaAorKysrIGIvcGF0Y2hsZXZlbC5oCitAQCAtMTM3LDYgKzEzNyw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbG9jYWxfcGF0Y2hlc1tdID0geworIAksInVuY29tbWl0dGVkLWNoYW5nZXMiCisgI2VuZGlmCisgCVBFUkxfR0lUX1VOUFVTSEVEX0NPTU1JVFMgICAgCS8qIGRvIG5vdCByZW1vdmUgdGhpcyBsaW5lICovCisrI2lmZGVmIERFQklBTgorKyNpbmNsdWRlICJwYXRjaGxldmVsLWRlYmlhbi5oIgorKyNlbmRpZgorIAksTlVMTAorIH07CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3Blcmw1ZGIteC10ZXJtaW5hbC1lbXVsYXRvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGVybDVkYi14LXRlcm1pbmFsLWVtdWxhdG9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMzk1MmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3Blcmw1ZGIteC10ZXJtaW5hbC1lbXVsYXRvci5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIGM5OWM2MWU4Zjg2M2E1MDhhMDc5MzE2ODAxMWM5OGRjNzRhYmJkMDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEb21pbmljIEhhcmdyZWF2ZXMgPGRvbUBlYXJ0aC5saT4KK0RhdGU6IFNhdCwgMTQgQXByIDIwMTIgMTE6MzQ6MDUgKzAxMDAKK1N1YmplY3Q6IEludm9rZSB4LXRlcm1pbmFsLWVtdWxhdG9yIHJhdGhlciB0aGFuIHh0ZXJtIGluIHBlcmw1ZGIucGwKKworSW4gRGViaWFuIHN5c3RlbXMsIHh0ZXJtIG1pZ2h0IG5vdCBleGlzdCBvciBtaWdodCBub3QgYmUgdGhlIHByZWZlcnJlZAordGVybWluYWwgZW11bGF0b3IuIFVzZSB4LXRlcm1pbmFsLWVtdWxhdG9yIGluc3RlYWQKKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy82Njg0OTAKK0ZvcndhcmRlZDogbm90LW5lZWRlZAorCitQYXRjaC1OYW1lOiBkZWJpYW4vcGVybDVkYi14LXRlcm1pbmFsLWVtdWxhdG9yLnBhdGNoCistLS0KKyBsaWIvcGVybDVkYi5wbCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9wZXJsNWRiLnBsIGIvbGliL3Blcmw1ZGIucGwKK2luZGV4IDdlNzE5NGUuLmM0NjZiZjMgMTAwNjQ0CistLS0gYS9saWIvcGVybDVkYi5wbAorKysrIGIvbGliL3Blcmw1ZGIucGwKK0BAIC02OTYwLDcgKzY5NjAsNyBAQCBwcm9wZXJseSBzZXQgdXAuCisgc3ViIHh0ZXJtX2dldF9mb3JrX1RUWSB7CisgICAgICggbXkgJG5hbWUgPSAkMCApID1+IHMsXi4qWy9cXF0sLHM7CisgICAgIG9wZW4gWFQsCistcXFbMz4mMSB4dGVybSAtdGl0bGUgIkRhdWdodGVyIFBlcmwgZGVidWdnZXIgJHBpZHMgJG5hbWUiIC1lIHNoIC1jICd0dHkgMT4mMztcCisrcXFbMz4mMSB4LXRlcm1pbmFsLWVtdWxhdG9yIC1UICJEYXVnaHRlciBQZXJsIGRlYnVnZ2VyICRwaWRzICRuYW1lIiAtZSBzaCAtYyAndHR5IDE+JjM7XAorICBzbGVlcCAxMDAwMDAwMCcgfF07CisgCisgICAgICMgR2V0IHRoZSBvdXRwdXQgZnJvbSAndHR5JyBhbmQgY2xlYW4gaXQgdXAgYSBsaXR0bGUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BlcmxpdnAuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGVybGl2cC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMWVhYjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BlcmxpdnAuZGlmZgpAQCAtMCwwICsxLDM5IEBACitGcm9tIGZiZmJlYjdhNjkwZDcwM2EzY2RjNTZmOTIzZTg5ZWI3Yjc5OTdkMzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDkgSmFuIDIwMDkgMTg6NTQ6NDcgKzAyMDAKK1N1YmplY3Q6IE1ha2UgcGVybGl2cCBza2lwIGluY2x1ZGUgZGlyZWN0b3JpZXMgaW4gL3Vzci9sb2NhbAorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzUxMDg5NQorCitPbiBTYXQsIEphbiAxMCwgMjAwOSBhdCAxMjozNzoxOEFNICsxMTAwLCBCcmVuZGFuIE8nRGVhIHdyb3RlOgorPiBPbiBXZWQsIEphbiA3LCAyMDA5IGF0IDEyOjIxIEFNLCBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+IHdyb3RlOgorCis+ID4gV2UgY291bGQgY3JlYXRlIHRoZSBkaXJlY3RvcmllcyBpbiBhIHBvc3RpbnN0IHNjcmlwdCwgYnV0IEknbSBub3Qgc3VyZQorPiA+IEkgc2VlIHRoZSBwb2ludC4gVGhleSB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseSB3aGVuIGluc3RhbGxpbmcKKz4gPiBDUEFOIG1vZHVsZXMuCis+Cis+IFRoZSBkaXJlY3RvcmllcyBhcmUgaW50ZW50aW9uYWxseSBub3QgY3JlYXRlZCwgYXMgdGhpcyB3YXkgdGhleSBhcmUKKz4gZXhjbHVkZWQgZnJvbSB0aGUgc2VhcmNoIHBhdGggYXQgc3RhcnQtdXAsIHNhdmluZyBhIGJ1bmNoIG9mIHdhc3RlZAorPiBzdGF0cyBhdCB1c2UvcmVxdWlyZSB0aW1lIGluIHRoZSBjb21tb24gY2FzZSB0aGF0IHRoZSB1c2VyIGhhcyBub3QKKz4gaW5zdGFsbGVkIGFueSBsb2NhbCBwYWNrYWdlcy4gIEFzIE5pa28gcG9pbnRzIG91dCwgdGhleSB3aWxsIGJlCis+IGNyZWF0ZWQgYXMgcmVxdWlyZWQuCisKK1NpZ25lZC1vZmYtYnk6IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KKworUGF0Y2gtTmFtZTogZGViaWFuL3BlcmxpdnAuZGlmZgorLS0tCisgdXRpbHMvcGVybGl2cC5QTCB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvdXRpbHMvcGVybGl2cC5QTCBiL3V0aWxzL3BlcmxpdnAuUEwKK2luZGV4IGMyZjBhMTEuLmNjNDlmOTYgMTAwNjQ0CistLS0gYS91dGlscy9wZXJsaXZwLlBMCisrKysgYi91dGlscy9wZXJsaXZwLlBMCitAQCAtMTUzLDYgKzE1Myw3IEBAIG15ICRJTkNfdG90YWwgPSAwOworIG15ICRJTkNfdGhlcmUgPSAwOworIGZvcmVhY2ggKEBJTkMpIHsKKyAgICAgbmV4dCBpZiAkXyBlcSAnLic7ICMgc2tpcCAtZCB0ZXN0IGhlcmUKKysgICAgbmV4dCBpZiBtfC91c3IvbG9jYWx8OyAjIG5vdCBzaGlwcGVkIG9uIERlYmlhbgorICAgICBpZiAoLWQgJF8pIHsKKyAgICAgICAgIHByaW50ICIjIyBQZXJsIFxASU5DIGRpcmVjdG9yeSAnJF8nIGV4aXN0cy5cbiIgaWYgJG9wdHsndid9OworICAgICAgICAgJElOQ190aGVyZSsrOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wb2QybWFuLWN1c3RvbWl6ZWQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcG9kMm1hbi1jdXN0b21pemVkLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3MGI4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcG9kMm1hbi1jdXN0b21pemVkLmRpZmYKQEAgLTAsMCArMSwyMyBAQAorRnJvbSAyN2E0OTUyYzJlNTMxOTQ3ZGM5ZjJmMDJlMjA2M2QxMTdlMmU2OTlhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogU2F0LCAxOCBBcHIgMjAxNSAxNzozOTozMiArMDMwMAorU3ViamVjdDogVXBkYXRlIHBvcnRpbmcvY3VzdG9taXplZC5kYXQgZm9yIHBvZDJtYW4gbW9kaWZpY2F0aW9ucworCitQYXRjaC1OYW1lOiBkZWJpYW4vcG9kMm1hbi1jdXN0b21pemVkLmRpZmYKKy0tLQorIHQvcG9ydGluZy9jdXN0b21pemVkLmRhdCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3QvcG9ydGluZy9jdXN0b21pemVkLmRhdCBiL3QvcG9ydGluZy9jdXN0b21pemVkLmRhdAoraW5kZXggMGVlZDlmNy4uN2RmMzk4ZCAxMDA2NDQKKy0tLSBhL3QvcG9ydGluZy9jdXN0b21pemVkLmRhdAorKysrIGIvdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0CitAQCAtNDIsNyArNDIsNyBAQCBXaW4zMkFQSTo6RmlsZSBjcGFuL1dpbjMyQVBJLUZpbGUvTWFrZWZpbGUuUEwgNjA1ZDBhZWUzMWFlYmU4NGE5OTQwOGY5YWI1ZjY0NGRiNQorIFdpbjMyQVBJOjpGaWxlIGNwYW4vV2luMzJBUEktRmlsZS90L2ZpbGUudCAxMjRlNjRhYTc3ZTc1NTIzNWViMjk3NjQ0YTg3ZmFjNTM4OGQzZDc4CisgV2luMzJBUEk6OkZpbGUgY3Bhbi9XaW4zMkFQSS1GaWxlL3QvdGllLnQgNzEyZWE3ZWRkMGNjODA1Y2UxYzBiODE3MmMwMWIwM2RkMTliNTgzZAorIFdpbjMyQVBJOjpGaWxlIGNwYW4vV2luMzJBUEktRmlsZS90eXBlbWFwIDI0YmZmMDg4YmFiZWFkYWMwODczZThkZjM5MGQxNjY2ZDlkOWRiNGEKKy1wb2RsYXRvcnMgY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMIGY4MWFjZjUzZjNmZjQ2Y2RjYzVlYmRkNjYxYzVkMTNlYjM1ZDIwZDYKKytwb2RsYXRvcnMgY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMIDc2MWYzNWQzZmNmOTFjMWJjMmY5ZTAyNGE5ZmE1YzYyZmQzZmMzMzgKKyBwb2RsYXRvcnMgY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QydGV4dC5QTCBiNDY5M2ZjZmU0YTBhMWIzOGEyMTVjZmI4OTg1YTY1ZDVkMDI1ZDY5CisgdmVyc2lvbiBjcGFuL3ZlcnNpb24vbGliL3ZlcnNpb24ucG0gZDA5MjNiODk1ZDU3ZjFkNjY5YWUzNmZjZjg1Yzg3YjE2ZGIzNDFkMQorIHZlcnNpb24gdnV0aWwuYyA2NjhmMTdjYTQzZTI1Mjc2NDU2NzRkMjliYTc3MmI4NjMzMGQ1NjYzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3ByZWZpeF9jaGFuZ2VzLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3ByZWZpeF9jaGFuZ2VzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxZWZiZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcHJlZml4X2NoYW5nZXMuZGlmZgpAQCAtMCwwICsxLDExOCBAQAorRnJvbSA5MTQ5NDhmMDI2ZWZjZTAyY2YwYWJmZjhiMDMxMmFhYWQ5NjU5MmVkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBUdWUsIDggTWFyIDIwMDUgMTk6MzA6MzggKzExMDAKK1N1YmplY3Q6IEZpZGRsZSB3aXRoICpQUkVGSVggYW5kIHZhcmlhYmxlcyB3cml0dGVuIHRvIHRoZSBtYWtlZmlsZQorCitGaWRkbGUgd2l0aCAqUFJFRklYIGFuZCB2YXJpYWJsZXMgd3JpdHRlbiB0byB0aGUgbWFrZWZpbGUgc28gdGhhdAoraW5zdGFsbCBkaXJlY3RvcmllcyBtYXkgYmUgY2hhbmdlZCB3aGVuIG1ha2UgaXMgcnVuIGJ5IHBhc3NpbmcKK1BSRUZJWD0gdG8gdGhlICJtYWtlIGluc3RhbGwiIGNvbW1hbmQgKHVzZWQgd2hlbiBwYWNrYWdpbmcKK21vZHVsZXMpLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vcHJlZml4X2NoYW5nZXMuZGlmZgorLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0FueS5wbSAgfCAxMiArKysrKystLS0tLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSB8ICAzICstLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVC50ICAgICAgICAgICAgICAgIHwgIDQgKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVF9QUkVGSVgudCAgICAgICAgIHwgMTAgKysrKystLS0tLQorIDQgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQW55LnBtIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0FueS5wbQoraW5kZXggNGMwMDEyOS4uMWVhMjAzNSAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9BbnkucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9BbnkucG0KK0BAIC05MDIsOCArOTAyLDYgQEAgYWxsIFBPRCBmaWxlcyBpbiBNQU4xUE9EUyBhbmQgTUFOM1BPRFMuCisgc3ViIG1hbmlmeXBvZHNfdGFyZ2V0IHsKKyAgICAgbXkoJHNlbGYpID0gc2hpZnQ7CisgCistICAgIG15ICRtYW4xcG9kcyAgICAgID0gJyc7CistICAgIG15ICRtYW4zcG9kcyAgICAgID0gJyc7CisgICAgIG15ICRkZXBlbmRlbmNpZXMgID0gJyc7CisgCisgICAgICMgcG9wdWxhdGUgbWFuWHBvZHMgJiBkZXBlbmRlbmNpZXM6CitAQCAtOTE5LDcgKzkxNyw3IEBAIEVORAorICAgICBmb3JlYWNoIG15ICRzZWN0aW9uIChxdygxIDMpKSB7CisgICAgICAgICBteSAkcG9kcyA9ICRzZWxmLT57Ik1BTiR7c2VjdGlvbn1QT0RTIn07CisgICAgICAgICBteSAkcDJtID0gc3ByaW50ZiA8PENNRCwgJF0gPiA1LjAwOCA/ICIgLXUiIDogIiI7CistCVwkKE5PRUNITykgXCQoUE9EMk1BTikgLS1zZWN0aW9uPSRzZWN0aW9uIC0tcGVybV9ydz1cJChQRVJNX1JXKSVzCisrCVwkKE5PRUNITykgXCQoUE9EMk1BTikgLS1zZWN0aW9uPVwkKE1BTiR7c2VjdGlvbn1FWFQpIC0tcGVybV9ydz1cJChQRVJNX1JXKSVzCisgQ01ECisgICAgICAgICBwdXNoIEBtYW5fY21kcywgJHNlbGYtPnNwbGl0X2NvbW1hbmQoJHAybSwgbWFwIHsoJF8sJHBvZHMtPnskX30pfSBzb3J0IGtleXMgJSRwb2RzKTsKKyAgICAgfQorQEAgLTE4NzUsOSArMTg3MywxMSBAQCBzdWIgaW5pdF9JTlNUQUxMX2Zyb21fUFJFRklYIHsKKyAgICAgICAgICRzZWxmLT57U0lURVBSRUZJWH0gICB8fD0gJHNwcmVmaXg7CisgICAgICAgICAkc2VsZi0+e1ZFTkRPUlBSRUZJWH0gfHw9ICR2cHJlZml4OworIAorLSAgICAgICAgIyBMb3RzIG9mIE1NIGV4dGVuc2lvbiBhdXRob3JzIGxpa2UgdG8gdXNlICQoUFJFRklYKSBzbyB3ZQorLSAgICAgICAgIyBwdXQgc29tZXRoaW5nIHNlbnNpYmxlIGluIHRoZXJlIG5vIG1hdHRlciB3aGF0LgorLSAgICAgICAgJHNlbGYtPntQUkVGSVh9ID0gJyQoJy51YyAkc2VsZi0+e0lOU1RBTExESVJTfS4nUFJFRklYKSc7CisrCW15ICRwID0gJHNlbGYtPntQUkVGSVh9ID0gJHNlbGYtPntQRVJMUFJFRklYfTsKKysJZm9yIG15ICR0IChxdy9QRVJMIFNJVEUgVkVORE9SLykKKysJeworKwkgICAgJHNlbGYtPnsiJHt0fVBSRUZJWCJ9ID1+IHMhXlxRJHBcRSg/PS98JCkhXCQoUFJFRklYKSE7CisrCX0KKyAgICAgfQorIAorICAgICBteSAkYXJjaCAgICA9ICRDb25maWd7YXJjaG5hbWV9OworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK2luZGV4IDM5MWRjMjIuLjRhOGUxNGMgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK0BAIC0zMDc3LDggKzMwNzcsNyBAQCBzdWIgcHJlZml4aWZ5IHsKKyAgICAgd2FybiAiICBwcmVmaXhpZnkgJHZhciA9PiAkcGF0aFxuIiBpZiAkVmVyYm9zZSA+PSAyOworICAgICB3YXJuICIgICAgZnJvbSAkc3ByZWZpeCB0byAkcnByZWZpeFxuIiBpZiAkVmVyYm9zZSA+PSAyOworIAorLSAgICBpZiggJHNlbGYtPntBUkdTfXtQUkVGSVh9ICYmCistICAgICAgICAkcGF0aCAhfiBze15cUSRzcHJlZml4XEVcYn17JHJwcmVmaXh9cyApCisrICAgIGlmKCAkcGF0aCAhfiBze15cUSRzcHJlZml4XEVcYn17JHJwcmVmaXh9cyAmJiAkc2VsZi0+e0FSR1N9e1BSRUZJWH0gKQorICAgICB7CisgCisgICAgICAgICB3YXJuICIgICAgY2Fubm90IHByZWZpeCwgdXNpbmcgZGVmYXVsdC5cbiIgaWYgJFZlcmJvc2UgPj0gMjsKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1QudCBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVC50CitpbmRleCA5MTA1OGJiLi5lMzk5Y2VkIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNULnQKKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVC50CitAQCAtNjUsOSArNjUsNyBAQCBpc2Ffb2soICRtbSwgJ0V4dFV0aWxzOjpNYWtlTWFrZXInICk7CisgaXMoICRtbS0+e05BTUV9LCAnQmlnOjpEdW1teScsICAnTkFNRScgKTsKKyBpcyggJG1tLT57VkVSU0lPTn0sIDAuMDEsICAgICAgICAgICAgJ1ZFUlNJT04nICk7CisgCistbXkgJGNvbmZpZ19wcmVmaXggPSAkQ29uZmlne2luc3RhbGxwcmVmaXhleHB9IHx8ICRDb25maWd7aW5zdGFsbHByZWZpeH0gfHwKKy0gICAgICAgICAgICAgICAgICAgICRDb25maWd7cHJlZml4ZXhwfSAgICAgICAgfHwgJENvbmZpZ3twcmVmaXh9OworLWlzKCAkbW0tPntQRVJMUFJFRklYfSwgJGNvbmZpZ19wcmVmaXgsICAgJ1BFUkxQUkVGSVgnICk7CisraXMoICRtbS0+e1BFUkxQUkVGSVh9LCAnJChQUkVGSVgpJywgICAnUEVSTFBSRUZJWCcgKTsKKyAKKyBpcyggISEkbW0tPntQRVJMX0NPUkV9LCAhISRFTlZ7UEVSTF9DT1JFfSwgJ1BFUkxfQ09SRScgKTsKKyAKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1RfUFJFRklYLnQgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1RfUFJFRklYLnQKK2luZGV4IGU4ZGU3YzYuLjNmYjNmMTIgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1RfUFJFRklYLnQKKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVF9QUkVGSVgudAorQEAgLTEwLDcgKzEwLDcgQEAgQkVHSU4geworIH0KKyAKKyB1c2Ugc3RyaWN0OworLXVzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDUyOworK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDQ3OworIHVzZSBNYWtlTWFrZXI6OlRlc3Q6OlV0aWxzOworIHVzZSBNYWtlTWFrZXI6OlRlc3Q6OlNldHVwOjpCRkQ7CisgdXNlIEV4dFV0aWxzOjpNYWtlTWFrZXI7CitAQCAtNjIsMTYgKzYyLDE2IEBAIGxpa2UoICRzdGRvdXQtPnJlYWQsIHFyeworICAgICAgICAgICAgICAgICAgICAgICAgICg/OldyaXRpbmdcIE1ZTUVUQS55bWxcIGFuZFwgTVlNRVRBLmpzb25cbik/CisgfXggKTsKKyAKKy1pcyggJG1tLT57UFJFRklYfSwgJyQoU0lURVBSRUZJWCknLCAnUFJFRklYIHNldCBiYXNlZCBvbiBJTlNUQUxMRElSUycgKTsKKysjaXMoICRtbS0+e1BSRUZJWH0sICckKFNJVEVQUkVGSVgpJywgJ1BSRUZJWCBzZXQgYmFzZWQgb24gSU5TVEFMTERJUlMnICk7CisgCisgaXNhX29rKCAkbW0sICdFeHRVdGlsczo6TWFrZU1ha2VyJyApOworIAorIGlzKCAkbW0tPntOQU1FfSwgJ0JpZzo6RHVtbXknLCAgJ05BTUUnICk7CisgaXMoICRtbS0+e1ZFUlNJT059LCAwLjAxLCAgICAgICAgICAgICdWRVJTSU9OJyApOworIAorLWZvcmVhY2ggbXkgJHByZWZpeCAocXcoUFJFRklYIFBFUkxQUkVGSVggU0lURVBSRUZJWCBWRU5ET1JQUkVGSVgpKSB7CistICAgIHVubGlrZSggJG1tLT57JHByZWZpeH0sIHFyL1wkXChQUkVGSVhcKS8gKTsKKy19CisrI2ZvcmVhY2ggbXkgJHByZWZpeCAocXcoUFJFRklYIFBFUkxQUkVGSVggU0lURVBSRUZJWCBWRU5ET1JQUkVGSVgpKSB7CisrIyAgICB1bmxpa2UoICRtbS0+eyRwcmVmaXh9LCBxci9cJFwoUFJFRklYXCkvICk7CisrI30KKyAKKyAKKyBteSAkUFJFRklYID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCdmb28nLCAnYmFyJyk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BydW5lX2xpYnMuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcHJ1bmVfbGlicy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDQzZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BydW5lX2xpYnMuZGlmZgpAQCAtMCwwICsxLDM4IEBACitGcm9tIDIxYmMwMzM3NTVmMGI2MDlmOWJiMmFhOWU5OGIxMGQ1ODQyNDQwNmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgMTggTWFyIDIwMDUgMjI6MjI6MjUgKzExMDAKK1N1YmplY3Q6IFBydW5lIHRoZSBsaXN0IG9mIGxpYnJhcmllcyB3YW50ZWQgdG8gd2hhdCB3ZSBhY3R1YWxseSBuZWVkLgorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzEyODM1NQorCitXZSB3YW50IHRvIGtlZXAgdGhlIGRlcGVuZGVuY2llcyBvbiBwZXJsLWJhc2UgYXMgc21hbGwgYXMgcG9zc2libGUsCithbmQgc29tZSBvZiB0aGUgb3JpZ2luYWwgbGlzdCBtYXkgYmUgcHJlc2VudCBvbiBidWlsZGRzIChzZWUgQnVnIzEyODM1NSkuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9wcnVuZV9saWJzLmRpZmYKKy0tLQorIENvbmZpZ3VyZSB8IDUgKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvQ29uZmlndXJlIGIvQ29uZmlndXJlCitpbmRleCAwYTQwNWQzLi42ZmNjM2JjIDEwMDc1NQorLS0tIGEvQ29uZmlndXJlCisrKysgYi9Db25maWd1cmUKK0BAIC0xNDU0LDggKzE0NTQsNyBAQCBsaWJzd2FudGVkX3VzZWxhcmdlZmlsZXM9JycKKyA6IHNldCB1c2Vzb2NrcyBvbiB0aGUgQ29uZmlndXJlIGNvbW1hbmQgbGluZSB0byBlbmFibGUgc29ja3MuCisgOiBMaXN0IG9mIGxpYnJhcmllcyB3ZSB3YW50LgorIDogSWYgYW55b25lIG5lZWRzIGV4dHJhIC1seHh4LCBwdXQgdGhvc2UgaW4gYSBoaW50IGZpbGUuCistbGlic3dhbnRlZD0iY2wgcHRocmVhZCBzb2NrZXQgYmluZCBpbmV0IG5zbCBubSBuZGJtIGdkYm0gZGJtIGRiIG1hbGxvYyBkbCBsZCIKKy1saWJzd2FudGVkPSIkbGlic3dhbnRlZCBzdW4gbSBjcnlwdCBzZWMgdXRpbCBjIGNwb3NpeCBwb3NpeCB1Y2IgYnNkIEJTRCIKKytsaWJzd2FudGVkPSdnZGJtIGdkYm1fY29tcGF0IGRiIGRsIG0gYyBjcnlwdCcKKyA6IFdlIHByb2JhYmx5IHdhbnQgdG8gc2VhcmNoIC91c3Ivc2hsaWIgYmVmb3JlIG1vc3Qgb3RoZXIgbGlicmFyaWVzLgorIDogVGhpcyBpcyBvbmx5IHVzZWQgYnkgdGhlIGxpYi9FeHRVdGlscy9NYWtlTWFrZXIucG0gcm91dGluZSBleHRsaWJsaXN0LgorIGdsaWJwdGg9YGVjaG8gIiAkZ2xpYnB0aCAiIHwgc2VkIC1lICdzISAvdXNyL3NobGliICEgISdgCitAQCAtMjM1OTMsNyArMjM1OTIsNyBAQCBzdW5vcypYNCopCisgICAgIDs7CisgKikgY2FzZSAiJHVzZWRsIiBpbgorICAgICAkZGVmaW5lfHRydWV8W3lZXSopCistCSAgICBzZXQgWCBgZWNobyAiICRsaWJzICIgfCBzZWQgLWUgJ3NAIC1sbmRibSBAIEAnIC1lICdzQCAtbGdkYm0gQCBAJyAtZSAnc0AgLWxnZGJtX2NvbXBhdCBAIEAnIC1lICdzQCAtbGRibSBAIEAnIC1lICdzQCAtbGRiIEAgQCdgCisrCSAgICBzZXQgWCBgZWNobyAiICRsaWJzICIgfCBzZWQgLWUgJ3NAIC1sZ2RibSBAIEAnIC1lICdzQCAtbGdkYm1fY29tcGF0IEAgQCcgLWUgJ3NAIC1sZGIgQCBAJ2AKKyAJICAgIHNoaWZ0CisgCSAgICBwZXJsbGlicz0iJCoiCisgCSAgICA7OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9yZWdlbi1za2lwLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3JlZ2VuLXNraXAuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTNmYzk5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9yZWdlbi1za2lwLmRpZmYKQEAgLTAsMCArMSwyNyBAQAorRnJvbSBjYjNlOThlMTdhNjY2ODk2MTUwYjEwOTY5NGU5ZWI5Mjc4NjIwODQ1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogU2F0LCAxNyBNYXkgMjAxNCAxNDo1NzowMSArMDMwMAorU3ViamVjdDogU2tpcCBhIHJlZ2VuZXJhdGlvbiBjaGVjayBpbiB1bnJlbGF0ZWQgZ2l0IHJlcG9zaXRvcmllcworCitJZiB0aGUgdGVzdCBpcyBydW4gaW4gYSBnaXQgcmVwb3NpdG9yeSB3aXRob3V0IGxpYi8uZ2l0aWdub3JlLAorZm9yIGluc3RhbmNlIGJlY2F1c2UgdGhlIHJlcG9zaXRvcnkgb25seSBpbXBvcnRlZCB0aGUgUGVybCB0YXJiYWxsLAordGhlIHJlZ2VuZXJhdGlvbiBjaGVjayBpcyBicm9rZW4gYmVjYXVzZSBsaWIvLmdpdGlnbm9yZSBpcyBtaXNzaW5nLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vcmVnZW4tc2tpcC5kaWZmCistLS0KKyByZWdlbi9saWJfY2xlYW51cC5wbCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3JlZ2VuL2xpYl9jbGVhbnVwLnBsIGIvcmVnZW4vbGliX2NsZWFudXAucGwKK2luZGV4IGM5ZDZlNDMuLmZlY2UxZWQgMTAwNjQ0CistLS0gYS9yZWdlbi9saWJfY2xlYW51cC5wbAorKysrIGIvcmVnZW4vbGliX2NsZWFudXAucGwKK0BAIC0xNTksNyArMTU5LDcgQEAgZm9yZWFjaCAoJ3dpbjMyL01ha2VmaWxlJywgJ3dpbjMyL21ha2VmaWxlLm1rJykgeworIH0KKyAKKyAjIFRoaXMgbXVzdCBjb21lIGxhc3QgYXMgaXQgY2FuIGV4aXQgZWFybHk6CistaWYgKCRUQVAgJiYgIS1kICcuZ2l0JyAmJiAhLWYgJ2xpYi8uZ2l0aWdub3JlJykgeworK2lmICgkVEFQICYmICEtZCAnLmdpdCcgfHwgIS1mICdsaWIvLmdpdGlnbm9yZScpIHsKKyAgICAgcHJpbnQgIm9rICMgc2tpcCBub3QgYmVpbmcgcnVuIGZyb20gYSBnaXQgY2hlY2tvdXQsIGhlbmNlIG5vIGxpYi8uZ2l0aWdub3JlXG4iOworICAgICBleGl0IDA7CisgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9za2lwLWtmcmVlYnNkLWNyYXNoLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NraXAta2ZyZWVic2QtY3Jhc2guZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2ZjMGJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9za2lwLWtmcmVlYnNkLWNyYXNoLmRpZmYKQEAgLTAsMCArMSw0MCBAQAorRnJvbSA0Mjg1M2FmNjVhMjgwNjZiMTE5ZDIzZDk2ZTk2NGU5NGI1NWE4NTQxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCA1IEF1ZyAyMDExIDEwOjUwOjE4ICswMzAwCitTdWJqZWN0OiBTa2lwIGEgY3Jhc2hpbmcgdGVzdCBjYXNlIGluIHQvb3AvdGhyZWFkcy50IG9uIEdOVS9rRnJlZUJTRAorCitCdWc6IGh0dHA6Ly9ydC5wZXJsLm9yZy9ydDMvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD05NjI3MgorQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy82Mjg0OTMKKworVGhlIGNyYXNoIGlzIG5vdCBhIHJlZ3Jlc3Npb24gaW4gNS4xNCwgaXQganVzdCBnZXRzIHRyaWdnZXJlZCB0aGVyZSBieQorYSBuZXcgdW5yZWxhdGVkIHRlc3QgY2FzZS4KKworU2tpcCB0aGUgdGVzdCB1bnRpbCB0aGUgY3VscHJpdCBpcyBmb3VuZC4KKworUGF0Y2gtTmFtZTogZGViaWFuL3NraXAta2ZyZWVic2QtY3Jhc2guZGlmZgorLS0tCisgdC9vcC90aHJlYWRzLnQgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS90L29wL3RocmVhZHMudCBiL3Qvb3AvdGhyZWFkcy50CitpbmRleCBlNzZjOTU2Li5iZWMyMTBiIDEwMDY0NAorLS0tIGEvdC9vcC90aHJlYWRzLnQKKysrKyBiL3Qvb3AvdGhyZWFkcy50CitAQCAtMzc2LDYgKzM3Niw5IEBAIEVPRgorIH0KKyAKKyAKKytTS0lQOiB7CisrICAgIHNraXAgIltwZXJsICM5NjI3Ml0gYXZvaWQgY3Jhc2ggb24gR05VL2tGcmVlQlNEIiwgMQorKyAgICAgICAgaWYgJF5PIGVxICdnbnVrZnJlZWJzZCc7CisgIyBbcGVybCAjNzg0OTRdIFBpcGVzIHNoYXJlZCBiZXR3ZWVuIHRocmVhZHMgYmxvY2sgd2hlbiBjbG9zZWQKKyB7CisgICBteSAkcGVybCA9IHdoaWNoX3Blcmw7CitAQCAtMzg0LDYgKzM4Nyw3IEBAIEVPRgorICAgdGhyZWFkcy0+Y3JlYXRlKHN1YiB7IH0pLT5qb2luOworICAgb2soMSwgIlBpcGVzIHNoYXJlZCBiZXR3ZWVuIHRocmVhZHMgZG8gbm90IGJsb2NrIHdoZW4gY2xvc2VkIik7CisgfQorK30KKyAKKyAjIFtwZXJsICMxMDUyMDhdIFR5cGVnbG9iIGNsb25lcyBzaG91bGQgbm90IGJlIGNsb25lZCBhZ2FpbiBkdXJpbmcgYSBqb2luCisgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9za2lwLXVwc3RyZWFtLWdpdC10ZXN0cy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9za2lwLXVwc3RyZWFtLWdpdC10ZXN0cy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjODcxMDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NraXAtdXBzdHJlYW0tZ2l0LXRlc3RzLmRpZmYKQEAgLTAsMCArMSwyOCBAQAorRnJvbSBhZTliNjQ1ZDZkYTI5OTBmZDA1NTM2OGVjYTJjNjdjNDQ5NDc0ZTM4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAyMiBBcHIgMjAxMSAxMToxNTozMiArMDMwMAorU3ViamVjdDogU2tpcCB0ZXN0cyBzcGVjaWZpYyB0byB0aGUgdXBzdHJlYW0gR2l0IHJlcG9zaXRvcnkKKworVGhlc2UgdGVzdHMgZmFpbCBpZiBydW4gZnJvbSBhIGRpZmZlcmVudCBnaXQgcmVwb3NpdG9yeSB0aGFuCit1cHN0cmVhbS4gVGhpcyBjb21wbGljYXRlcyB0aGluZ3MgbmVlZGxlc3NseSBmb3IgZG93bnN0cmVhbSBwYWNrYWdlcnMuCisKK1NraXAgdGhlIHRlc3RzIGFsdG9nZXRoZXIgZXZlbiBpZiB0aGUgLmdpdCBkaXJlY3RvcnkgZXhpc3RzLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vc2tpcC11cHN0cmVhbS1naXQtdGVzdHMuZGlmZgorLS0tCisgdC90ZXN0LnBsIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdC90ZXN0LnBsIGIvdC90ZXN0LnBsCitpbmRleCBjZGEzODQwLi5hZjU3OWEyIDEwMDY0NAorLS0tIGEvdC90ZXN0LnBsCisrKysgYi90L3Rlc3QucGwKK0BAIC0xNzQsNyArMTc0LDcgQEAgc3ViIHNraXBfYWxsX3dpdGhvdXRfdW5pY29kZV90YWJsZXMgeyAjIChidXQgb25seSB1bmRlciBtaW5pcGVybCkKKyAKKyBzdWIgZmluZF9naXRfb3Jfc2tpcCB7CisgICAgIG15ICgkc291cmNlX2RpciwgJHJlYXNvbik7CistICAgIGlmICgtZCAnLmdpdCcpIHsKKysgICAgaWYgKC1kICcuZ2l0JyAmJiAhIC1kICdkZWJpYW4nKSB7CisgCSRzb3VyY2VfZGlyID0gJy4nOworICAgICB9IGVsc2lmICgtbCAnTUFOSUZFU1QnICYmIC1sICdBVVRIT1JTJykgeworIAlteSAkd2hlcmUgPSByZWFkbGluayAnTUFOSUZFU1QnOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9zcXVlbGNoLWxvY2FsZS13YXJuaW5ncy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9zcXVlbGNoLWxvY2FsZS13YXJuaW5ncy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMzE0NTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NxdWVsY2gtbG9jYWxlLXdhcm5pbmdzLmRpZmYKQEAgLTAsMCArMSw1NiBAQAorRnJvbSA0ODdhNmQ2YWRhMGIwOGU2YTcyNzY1MjBlYmM2MWNkODUxMDA1ZTdjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogU3VuLCAzIE9jdCAyMDEwIDIxOjM2OjE3ICswMzAwCitTdWJqZWN0OiBTcXVlbGNoIGxvY2FsZSB3YXJuaW5ncyBpbiBEZWJpYW4gcGFja2FnZSBtYWludGFpbmVyIHNjcmlwdHMKKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy81MDg3NjQKKworVGhlIHN5c3RlbSBsb2NhbGVzIGFyZSByYXRoZXIgZnJlcXVlbnRseSBvdXQgb2Ygc3luYyB3aXRoIHRoZSBDIGxpYnJhcnkKK2R1cmluZyBwYWNrYWdlIHVwZ3JhZGVzLCBjYXVzaW5nIGEgaHVnZSBhbW91bnQgb2YgdXNlbGVzcyBQZXJsIGxvY2FsZQord2FybmluZ3MuIFNxdWVsY2ggdGhlbSB3aGVuIHJ1bm5pbmcgcGFja2FnZSBtYWludGFpbmVyIHNjcmlwdHMsIGRldGVjdGVkCitieSB0aGUgRFBLR19SVU5OSU5HX1ZFUlNJT04gZW52aXJvbm1lbnQgdmFyaWFibGUuCisKK0FueSByZWFsIGxvY2FsZSBwcm9ibGVtIHdpbGwgc2hvdyB1cCBhZnRlciB0aGUgc3lzdGVtIHVwZ3JhZGUgdG9vLCBhbmQKK3RoZSB3YXJuaW5nIHdpbGwgYmUgdHJpZ2dlcmVkIG5vcm1hbGx5IGFnYWluIGF0IHRoYXQgcG9pbnQuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9zcXVlbGNoLWxvY2FsZS13YXJuaW5ncy5kaWZmCistLS0KKyBsb2NhbGUuYyAgICAgICAgICAgfCA1ICsrKystCisgcG9kL3Blcmxsb2NhbGUucG9kIHwgOCArKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbG9jYWxlLmMgYi9sb2NhbGUuYworaW5kZXggN2E0YTQxOC4uZmRmOTExZCAxMDA2NDQKKy0tLSBhL2xvY2FsZS5jCisrKysgYi9sb2NhbGUuYworQEAgLTY3NCw3ICs2NzQsMTAgQEAgUGVybF9pbml0X2kxOG5sMTBuKHBUSFhfIGludCBwcmludHdhcm4pCisgCisgICAgIGNvbnN0IGJvb2wgbG9jd2FybiA9IChwcmludHdhcm4gPiAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAocHJpbnR3YXJuCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCEgYmFkX2xhbmdfdXNlX29uY2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlYmlhbiBzcGVjaWZpYyBjaGFuZ2UgLSBzZWUgaHR0cDovL2J1Z3MuZGViaWFuLm9yZy81MDg3NjQgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIVBlcmxFbnZfZ2V0ZW52KCJEUEtHX1JVTk5JTkdfVkVSU0lPTiIpKSAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghIGJhZF9sYW5nX3VzZV9vbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNhbGxvdyB3aXRoICIiIG9yICIwIiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpiYWRfbGFuZ191c2Vfb25jZQorZGlmZiAtLWdpdCBhL3BvZC9wZXJsbG9jYWxlLnBvZCBiL3BvZC9wZXJsbG9jYWxlLnBvZAoraW5kZXggNzAxYjQyMi4uNThjYWJhZiAxMDA2NDQKKy0tLSBhL3BvZC9wZXJsbG9jYWxlLnBvZAorKysrIGIvcG9kL3Blcmxsb2NhbGUucG9kCitAQCAtMTIxNyw2ICsxMjE3LDE0IEBAIEI8Tk9URT46IEM8UEVSTF9CQURMQU5HPiBvbmx5IGdpdmVzIHlvdSBhIHdheSB0byBoaWRlIHRoZSB3YXJuaW5nIG1lc3NhZ2UuCisgVGhlIG1lc3NhZ2UgdGVsbHMgYWJvdXQgc29tZSBwcm9ibGVtIGluIHlvdXIgc3lzdGVtJ3MgbG9jYWxlIHN1cHBvcnQsCisgYW5kIHlvdSBzaG91bGQgaW52ZXN0aWdhdGUgd2hhdCB0aGUgcHJvYmxlbSBpcy4KKyAKKys9aXRlbSBEUEtHX1JVTk5JTkdfVkVSU0lPTgorKworK09uIERlYmlhbiBzeXN0ZW1zLCBpZiB0aGUgRFBLR19SVU5OSU5HX1ZFUlNJT04gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMKKytzZXQgKHRvIGFueSB2YWx1ZSksIHRoZSBsb2NhbGUgZmFpbHVyZSB3YXJuaW5ncyB3aWxsIGJlIHN1cHByZXNzZWQganVzdAorK2xpa2Ugd2l0aCBhIHplcm8gUEVSTF9CQURMQU5HIHNldHRpbmcuIFRoaXMgaXMgZG9uZSB0byBhdm9pZCBmbG9vZHMKKytvZiBzcHVyaW91cyB3YXJuaW5ncyBkdXJpbmcgc3lzdGVtIHVwZ3JhZGVzLgorK1NlZSBMPGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNTA4NzY0Pi4KKysKKyA9YmFjaworIAorIFRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBub3Qgc3BlY2lmaWMgdG8gUGVybDogVGhleSBhcmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vd3JpdGFibGVfc2l0ZV9kaXJzLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3dyaXRhYmxlX3NpdGVfZGlycy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYWRjMmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3dyaXRhYmxlX3NpdGVfZGlycy5kaWZmCkBAIC0wLDAgKzEsMzYgQEAKK0Zyb20gNTkxYzFmOWI3ZDQ3NTViZmM1OWQ5NjY1YmFiMWYyY2E0MTBkZTc2NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogVHVlLCA4IE1hciAyMDA1IDE5OjMwOjM4ICsxMTAwCitTdWJqZWN0OiBTZXQgdW1hc2sgYXBwcm9wcm9hdGVseSBmb3Igc2l0ZSBpbnN0YWxsIGRpcmVjdG9yaWVzCisKK1BvbGljeSByZXF1aXJlcyBncm91cCB3cml0YWJsZSBzaXRlIGRpcmVjdG9yaWVzCisKK1BhdGNoLU5hbWU6IGRlYmlhbi93cml0YWJsZV9zaXRlX2RpcnMuZGlmZgorLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gfCA2ICsrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitpbmRleCAxOTdmMTAyLi41ZjFiODdmIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitAQCAtMjEzOCw3ICsyMTM4LDcgQEAgcXsJCSIkKElOU1RfTElCKSIgIiQoREVTVElOU1RBTExQUklWTElCKSIgXAorIAorIAorIHB1cmVfc2l0ZV9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgdW1hc2sgMDIyOyAkKE1PRF9JTlNUQUxMKSBcCisrCSQoTk9FQ0hPKSB1bWFzayAwMjsgJChNT0RfSU5TVEFMTCkgXAorIH07CisgICAgIHB1c2ggQG0sCisgcXsJCXJlYWQgIn0uJHNlbGYtPmNhdGZpbGUoJyQoU0lURUFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorQEAgLTIxOTksOCArMjE5OSw4IEBAIGRvY19wZXJsX2luc3RhbGwgOjogYWxsCisgCisgZG9jX3NpdGVfaW5zdGFsbCA6OiBhbGwKKyAJJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChET0NfSU5TVEFMTCkgXAorKwktJChOT0VDSE8pIHVtYXNrIDAyOyAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKysJLSQoTk9FQ0hPKSB1bWFzayAwMjsgJChET0NfSU5TVEFMTCkgXAorIAkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKyAJCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMU0lURUxJQikgXAorIAkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZHluYWxvYWRlcmhhY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZHluYWxvYWRlcmhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RmNTkzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9keW5hbG9hZGVyaGFjay5wYXRjaApAQCAtMCwwICsxLDIzIEBACitIYWNrIHRoZSBkeW5hbWljIG1vZHVsZSBsb2FkZXIgc28gdGhhdCB3ZSB1c2UgbmF0aXZlIG1vZHVsZXMgc2luY2Ugd2UgY2FuJ3QgbG9hZAordGhlIHRhcmdldCBvbmVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworUlAKKzIwMTMvMDEvMTMKKworSW5kZXg6IHBlcmwtNS4xNC4yL2V4dC9EeW5hTG9hZGVyL0R5bmFMb2FkZXJfcG0uUEwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTQuMi5vcmlnL2V4dC9EeW5hTG9hZGVyL0R5bmFMb2FkZXJfcG0uUEwJMjAxMS0wOS0xOSAxMzoxODoyMi4wMDAwMDAwMDAgKzAwMDAKKysrKyBwZXJsLTUuMTQuMi9leHQvRHluYUxvYWRlci9EeW5hTG9hZGVyX3BtLlBMCTIwMTMtMDEtMTkgMTY6MDk6NTEuMDIwNTg0OTQ1ICswMDAwCitAQCAtMzEwLDYgKzMxMCwxMCBAQAorICAgICBmb3JlYWNoIChASU5DKSB7CisgCTw8JF5PLWVxLVZNUz4+Y2hvcCgkXyA9IFZNUzo6RmlsZXNwZWM6OnVuaXhwYXRoKCRfKSk7PDwvJF5PLWVxLVZNUz4+CisgCSAgICBteSAkZGlyID0gIiRfL2F1dG8vJG1vZHBuYW1lIjsKKysKKysJaWYgKGRlZmluZWQgJEVOVntQRVJMX0xJQn0gYW5kIGRlZmluZWQgJEVOVntQRVJMSE9TVExJQn0pIHsKKysJICAgICRkaXIgPX4gcy8kRU5We1BFUkxfTElCfS8kRU5We1BFUkxIT1NUTElCfS9nOworKwl9CisgCQorIAluZXh0IHVubGVzcyAtZCAkZGlyOyAjIHNraXAgb3ZlciB1bmludGVyZXN0aW5nIGRpcmVjdG9yaWVzCisgCQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2V4dC1PREJNX0ZpbGUtaGludHMtbGludXgucGwtbGluay1saWJnZGJtX2NvbXBhdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9leHQtT0RCTV9GaWxlLWhpbnRzLWxpbnV4LnBsLWxpbmstbGliZ2RibV9jb21wYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk0ZWY3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9leHQtT0RCTV9GaWxlLWhpbnRzLWxpbnV4LnBsLWxpbmstbGliZ2RibV9jb21wYXQucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSBiYTRlZDBiNWI3YmFhZDUzNTNjMWU2NWI2NTVmNDFkNDVlMDFjOTkwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIyIEp1biAyMDE1IDIwOjAwOjExIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGV4dC9PREJNX0ZpbGUvaGludHMvbGludXgucGw6IGxpbmsgbGliZ2RibV9jb21wYXQKKworRml4ZWQgZm9yIHRlc3QgY2FzZSAuLi9leHQvT0RCTV9GaWxlL3Qvb2RibS50Ogorb2sgMSAtIHVzZSBPREJNX0ZpbGU7CitvayAyIC0gdXNlIEZjbnRsOworLi9wZXJsOiBzeW1ib2wgbG9va3VwIGVycm9yOiAvdXNyL2xpYi9wZXJsLzUuMjIuMC9hdXRvL09EQk1fRmlsZS9PREJNX0ZpbGUuc286IHVuZGVmaW5lZCBzeW1ib2w6IGRibWluaXQKKworVGhlIGNoZWNraW5nICJpZiAtZSAkXy4nL2xpYmdkYm1fY29tcGF0LnNvJyIgZG9lc24ndCB3b3JrIHdoZW4gY3Jvc3MKK2J1aWxkLCBzbyBhbHdheXMgbGluayBsaWJnZGJtX2NvbXBhdCwgc2luY2UgcGVybCBkZXBlbmRzIG9uIGdkYm0gYW5kIHdlCithbHdheXMgaGF2ZSBsaWJnZGJtX2NvbXBhdC4KKworVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGV4dC9PREJNX0ZpbGUvaGludHMvbGludXgucGwgfCAgICA2IC0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXh0L09EQk1fRmlsZS9oaW50cy9saW51eC5wbCBiL2V4dC9PREJNX0ZpbGUvaGludHMvbGludXgucGwKK2luZGV4IDIwNGJiYTAuLjkyNzFiNDUgMTAwNjQ0CistLS0gYS9leHQvT0RCTV9GaWxlL2hpbnRzL2xpbnV4LnBsCisrKysgYi9leHQvT0RCTV9GaWxlL2hpbnRzL2xpbnV4LnBsCitAQCAtMSw4ICsxLDIgQEAKKyAjIHVzZXMgR0RCTSBkYm0gY29tcGF0aWJpbGl0eSBmZWF0dXJlIC0gYXQgbGVhc3Qgb24gU3VTRSA4LjAKKy0kc2VsZi0+e0xJQlN9ID0gWyctbGdkYm0nXTsKKy0KKy0jIERlYmlhbi9VYnVudHUgaGF2ZSBsaWJnZGJtX2NvbXBhdC5zbyBidXQgbm90IHRoaXMgZmlsZSwKKy0jIHNvIGxpbmtpbmcgbWF5IGZhaWwKKy1mb3JlYWNoIChzcGxpdCAvIC8sICRDb25maWd7bGlicHRofSkgeworLSAgICAkc2VsZi0+e0xJQlN9LT5bMF0gLj0gJyAtbGdkYm1fY29tcGF0JyBpZiAtZSAkXy4nL2xpYmdkYm1fY29tcGF0LnNvJzsKKy19CisrJHNlbGYtPntMSUJTfSA9IFsnLWxnZGJtIC1sZ2RibV9jb21wYXQnXTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9leHQtT0RCTV9GaWxlLXQtb2RibS50LWZpeC10aGUtcGF0aC1vZi1kYm10X2NvbW1vbi5wLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2V4dC1PREJNX0ZpbGUtdC1vZGJtLnQtZml4LXRoZS1wYXRoLW9mLWRibXRfY29tbW9uLnAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIwNWI4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9leHQtT0RCTV9GaWxlLXQtb2RibS50LWZpeC10aGUtcGF0aC1vZi1kYm10X2NvbW1vbi5wLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gYjg0MmUxZGU3Nzk4YTFmN2RmNzcwYmIzZjE4NWFkMzM1NmU0OTBlNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMiBKdW4gMjAxNSAyMDowNjo1NiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBleHQvT0RCTV9GaWxlL3Qvb2RibS50OiBmaXggdGhlICBwYXRoIG9mIGRibXRfY29tbW9uLnBsCisKK0l0IHNob3VsZCBiZSBsaWIvZGJtdF9jb21tb24ucGwgd2hlbiBydW4gYnkgcnVuLXB0ZXN0LgorCitGaXhlZDoKK0Nhbid0IGxvY2F0ZSAuLi8uLi90L2xpYi9kYm10X2NvbW1vbi5wbCBpbiBASU5DCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZXh0L09EQk1fRmlsZS90L29kYm0udCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2V4dC9PREJNX0ZpbGUvdC9vZGJtLnQgYi9leHQvT0RCTV9GaWxlL3Qvb2RibS50CitpbmRleCAwNzliOWYxLi4yNTBiOTkxIDEwMDY0NAorLS0tIGEvZXh0L09EQk1fRmlsZS90L29kYm0udAorKysrIGIvZXh0L09EQk1fRmlsZS90L29kYm0udAorQEAgLTIsNyArMiw3IEBACisgCisgb3VyICREQk1fQ2xhc3MgPSAnT0RCTV9GaWxlJzsKKyAKKy1yZXF1aXJlICcuLi8uLi90L2xpYi9kYm10X2NvbW1vbi5wbCc7CisrcmVxdWlyZSAnbGliL2RibXRfY29tbW9uLnBsJzsKKyAKKyBpZiAoJF5PIGVxICdocHV4JykgeworICAgICBwcmludCA8PEVPTTsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZml4X2JhZF9ycGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9maXhfYmFkX3JwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YWM0MzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZml4X2JhZF9ycGF0aC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMS8wNy8wMQorCitGaXggdGhlc2UgUGFja2FnZSBRQSB3YXJuaW5ncyBiZWZvcmUgdGhleSBhcmUgY29udmVydGVkIGludG8gZmV0YWwgZXJyb3JzOgorCitXQVJOSU5HOiBRQSBJc3N1ZTogcGFja2FnZSBwZXJsLW1vZHVsZS1jb21wcmVzcyBjb250YWlucyBiYWQgUlBBVEggL2J1aWxkX2Rpc2svcG9reV9idWlsZC9idWlsZDAvdG1wL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2xpYiBpbiBmaWxlIC9idWlsZF9kaXNrL3Bva3lfYnVpbGQvYnVpbGQwL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9wZXJsLTUuMTIuMy1yMS9wYWNrYWdlcy1zcGxpdC9wZXJsLW1vZHVsZS1jb21wcmVzcy91c3IvbGliL3BlcmwvNS4xMi4zL2F1dG8vQ29tcHJlc3MvUmF3L1psaWIvWmxpYi5zbworCitUaGlzIGZpeGVzIHRoaXMgd2FybmluZyBmb3IgcGVybCByZWNpcGUgYXMgd2VsbCBhcyBsaWJ4bWwtcGFyc2VyLXBlcmwgcmVjaXBlLiAKK0l0IGlzIGEgZml4IHRvIE1ha2VNYWtlciB3aXRoaW4gcGVybCwgc28gYWxsIHN1Y2ggcGVybCByZWNpcGVzIHdpbGwgZ2V0IAorZml4ZWQgd2l0aCB0aGlzIHBlcmwgZml4LgorCitJbmRleDogcGVybC01LjE0LjIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjE0LjIub3JpZy9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0KKysrKyBwZXJsLTUuMTQuMi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0KK0BAIC01NSw2ICs1NSw3IEBAIHN1YiBfdW5peF9vczJfZXh0IHsKKyAgICAgbXkoJGZvdW5kKSA9IDA7CisgCisgICAgICMgRGViaWFuLXNwZWNpZmljOiBkb24ndCB1c2UgTERfUlVOX1BBVEggZm9yIHN0YW5kYXJkIGRpcnMKKysgICAgcHVzaChAbGlicGF0aCwgIlNZU1JPT1RMSUIiKTsKKyAgICAgJGxkX3J1bl9wYXRoX3NlZW57JF99KysgZm9yIEBsaWJwYXRoOworIAorICAgICBmb3JlYWNoIG15ICR0aGlzbGliIChzcGxpdCAnICcsICRwb3RlbnRpYWxfbGlicykgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2dlbmVyYXRlLXNoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2dlbmVyYXRlLXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZjZlNjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZ2VuZXJhdGUtc2gucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitVc2UgdGhlIGxkIGZsYWdzIGZyb20gdGhlIHN1cHBsaWVkIGNvbmZpZ3VyYXRpb24gZmlsZS4gRm9yIHNoIHdlIG5lZWQgdGhlCitmbGFncyB0aGF0IHNwZWNpZnkgdG8gYnVpbGQgUElDIGNvZGUgc28gdGhhdCB0aGUgc2hhcmVkIGxpYnJhcmllcyB3b3JrLgorCitJbmRleDogcGVybC01LjE0LjIvQ3Jvc3MvZ2VuZXJhdGVfY29uZmlnX3NoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjE0LjIub3JpZy9Dcm9zcy9nZW5lcmF0ZV9jb25maWdfc2gJMjAxMC0xMi0zMCAwNDowNzoxNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBwZXJsLTUuMTQuMi9Dcm9zcy9nZW5lcmF0ZV9jb25maWdfc2gJMjAxMi0xMS0yMiAxNTo1ODo0OS44NTI4NTI4MDUgKzAyMDAKK0BAIC0xOSwxMCArMTksMTAgQEAKKyAkY2FsbGJhY2tzLT57J2FyJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJBUiIsICJhcm0tbGludXgtYXIiXV07CisgJGNhbGxiYWNrcy0+eydhcmNobmFtZSd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiU1lTIiwgImFybXY0bC1saW51eCJdXTsKKyAkY2FsbGJhY2tzLT57J2NjJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDQyIsICJhcm0tbGludXgtZ2NjIl1dOworLSRjYWxsYmFja3MtPnsnY2NjZGxmbGFncyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiQ0ZMQUdTIiwgIiJdXTsKKy0kY2FsbGJhY2tzLT57J2NjZGxmbGFncyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiQ0ZMQUdTIiwgIiJdXTsKKy0kY2FsbGJhY2tzLT57J2NjZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNGTEFHUyIsICItZm5vLXN0cmljdC1hbGlhc2luZyAtRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiXV07CistJGNhbGxiYWNrcy0+eydjY2ZsYWdzX3VzZWxhcmdlZmlsZXMnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNGTEFHUyIsICItRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiXV07CisrIyRjYWxsYmFja3MtPnsnY2NjZGxmbGFncyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiQ0ZMQUdTIiwgIiJdXTsKKysjJGNhbGxiYWNrcy0+eydjY2RsZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNGTEFHUyIsICIiXV07CisrJGNhbGxiYWNrcy0+eydjY2ZsYWdzJ30gPSBbXCZzaW1wbGVfcHJvY2Vzc19pbnNlcnQsIFsiQ0ZMQUdTIiwgIi1mbm8tc3RyaWN0LWFsaWFzaW5nIC1EX0dOVV9TT1VSQ0UgLURUSFJFQURTX0hBVkVfUElEUyAtRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiXV07CisrJGNhbGxiYWNrcy0+eydjY2ZsYWdzX3VzZWxhcmdlZmlsZXMnfSA9IFtcJnNpbXBsZV9wcm9jZXNzX2luc2VydCwgWyJDRkxBR1MiLCAiLURfR05VX1NPVVJDRSAtRFRIUkVBRFNfSEFWRV9QSURTIC1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCJdXTsKKyAkY2FsbGJhY2tzLT57J2NjbmFtZSd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiQ0MiLCAiYXJtLWxpbnV4LWdjYyJdXTsKKyAkY2FsbGJhY2tzLT57J2NwcCd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiQ0NQIiwgImFybS1saW51eC1jcHAiXV07CisgJGNhbGxiYWNrcy0+eydjcHBmbGFncyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiQ0NQRkxBR1MiLCAiLWZuby1zdHJpY3QtYWxpYXNpbmciXV07CitAQCAtMzAsNiArMzAsNyBAQAorICRjYWxsYmFja3MtPnsnY3Bwc3RkaW4nfSA9IFtcJnNpbXBsZV9wcm9jZXNzX2FwcGVuZCwgWyJDQyIsICJhcm0tbGludXgtZ2NjIC1FIiwgIi1FIl1dOworICRjYWxsYmFja3MtPnsnZnVsbF9hcid9ID0gW1wmYmFja3RpY2ssIFsiQVIiLCAid2hpY2ggJEVOVntBUn0iLCAiL3Vzci9sb2NhbC9hcm0vMi45NS4zL2Jpbi9hcm0tbGludXgtYXIiXV07CisgJGNhbGxiYWNrcy0+eydsZCd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiTEQiLCAiYXJtLWxpbnV4LWxkIl1dOworKyRjYWxsYmFja3MtPnsnbGRkbGZsYWdzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJMRERMRkxBR1MiLCAiIl1dOworICRjYWxsYmFja3MtPnsnbGRmbGFncyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiTERGTEFHUyIsICIiXV07CisgJGNhbGxiYWNrcy0+eydsZGZsYWdzX3VzZWxhcmdlZmlsZXMnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkxERkxBR1MiLCAiIl1dOworICRjYWxsYmFja3MtPnsnbXlhcmNobmFtZSd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiU1lTIiwgImFybXY0bC1saW51eCJdXTsKK0BAIC0xMDUsNiArMTA2LDIzIEBACisgCisgfQorIAorKyMgSW5zZXJ0IGVudiB2YXIgaW50byB0aGUgdmFyaWFibGVzIHZhbHVlCisrc3ViIHNpbXBsZV9wcm9jZXNzX2luc2VydCB7CisrCW15ICRrZXkgPSBzaGlmdDsKKysJbXkgJHZhbHVlID0gc2hpZnQ7CisrCW15ICRlbnZ2YXIgPSAkY2FsbGJhY2tzLT57JGtleX0tPlsxXVswXTsKKysKKysJaWYgKCRFTlZ7JGVudnZhcn0pIHsKKysJCSMgU3RyaXAgcXVvdGVzIGZyb20gdmFsdWUKKysJCSR2YWx1ZSA9fiBzL15cJy8vOworKwkJJHZhbHVlID1+IHMvXCckLy87CisrCQkjIFJlbW92ZSAtSS91c3IvbG9jYWwvLi4uIGZyb20gdGhlIHZhbHVlCisrCQkkdmFsdWUgPX4gcyNcVy1JL3Vzci9sb2NhbC9cdytcVyMgI2c7CisrCQkjIFByZXBlbmQgZW52IHZhciAoT0Ugc2V0dGluZykgdG8gdmFsdWUKKysJCXByaW50KCIka2V5PVwnJEVOVnskZW52dmFyfSAkdmFsdWVcJ1xuIik7CisrCX0KKyt9CisrCisgc3ViIGxpYnJhcnlfbXVuZ2UgeworIAlteSAka2V5ID0gc2hpZnQ7CisgCW15ICR2YWx1ZSA9IHNoaWZ0OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2luc3RhbGxwZXJsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2luc3RhbGxwZXJsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NjAxMjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvaW5zdGFsbHBlcmwucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitJbmRleDogcGVybC01LjEyLjMvaW5zdGFsbHBlcmwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTIuMy5vcmlnL2luc3RhbGxwZXJsCisrKysgcGVybC01LjEyLjMvaW5zdGFsbHBlcmwKK0BAIC0zLDggKzMsOCBAQAorIEJFR0lOIHsKKyAgICAgcmVxdWlyZSA1LjAwNDsKKyAgICAgY2hkaXIgJy4uJyBpZiAhLWQgJ2xpYicgYW5kIC1kICcuLi9saWInOworLSAgICBASU5DID0gJ2xpYic7CistICAgICRFTlZ7UEVSTDVMSUJ9ID0gJ2xpYic7CisrIyAgICBASU5DID0gJ2xpYic7CisrIyAgICAkRU5We1BFUkw1TElCfSA9ICdsaWInOworIAorICAgICAjIFRoaXMgbmVlZHMgdG8gYmUgYXQgQkVHSU4gdGltZSwgYmVmb3JlIGFueSB1c2Ugb2YgQ29uZmlnCisgICAgIHJlcXVpcmUgJy4vaW5zdGFsbF9saWIucGwnOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2xldGdjYy1maW5kLWVycm5vLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2xldGdjYy1maW5kLWVycm5vLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNjFlNGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbGV0Z2NjLWZpbmQtZXJybm8ucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitUaGlzIHJlbW92ZXMgYWxsIHRoZSBsb2dpYyB0aGF0IHBlcmwgdXNlcyB0byBsb2NhdGUgYW4gYXBwcm9wcmlhdGUKK2Vycm5vLmggZm9yIHRoZSB0YXJnZXQuIEluc3RlYWQgd2Ugc2ltcGxlIGNyZWF0ZSBhIGZpbGUgdGhhdCBkb2VzCisKKyAgI2luY2x1ZGUgImVycm5vLmgiCisKK2FuZCB1c2UgdGhhdCBhcyB0aGUgZmlsZSB0byBwYXJzZS4gVGhpcyBpcyBuZWVkZWQgd2hlbiB1c2luZyBhbgorZXh0ZXJuYWwgdG9vbGNoYWluIHNpbmNlIHBlcmwgd2lsbCBzZWFyY2ggaW4gJHtTVEFHSU5HX0lOQ0RJUn0gZm9yCitlcnJuby5oICh3aGVuIHVzaW5nIGdjYykgYW5kIHRoYXQgaXNuJ3Qgd2hlcmUgaXQncyBsb2NhdGVkIC0gaXRzCit3aGVyZXZlciB0aGUgZXh0ZXJuYWwgdG9vbGNoYWluIGtlZXBzIGl0J3MgaGVhZGVycy4KKworSW5kZXg6IHBlcmwtNS4xMi4zL2V4dC9FcnJuby9FcnJub19wbS5QTAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xMi4zLm9yaWcvZXh0L0Vycm5vL0Vycm5vX3BtLlBMCisrKysgcGVybC01LjEyLjMvZXh0L0Vycm5vL0Vycm5vX3BtLlBMCitAQCAtMTcsOCArMTcsMTggQEAgdW5saW5rICJFcnJuby50bXAiIGlmIC1mICJFcnJuby50bXAiOworIG9wZW4gT1VULCAiPkVycm5vLnRtcCIgb3IgZGllICJDYW5ub3Qgb3BlbiBFcnJuby50bXA6ICQhIjsKKyBzZWxlY3QgT1VUOworIG15ICRmaWxlOworLW15IEBmaWxlcyA9IGdldF9maWxlcygpOworLWlmICgkQ29uZmlne2djY3ZlcnNpb259IG5lICcnICYmICReTyBlcSAnTVNXaW4zMicpIHsKKysjbXkgQGZpbGVzID0gZ2V0X2ZpbGVzKCk7CisrbXkgQGZpbGVzID0gKCJlcnJuby5oIik7CisrCisraWYgKDEpIHsKKysgICAgb3BlbiBJTkNTLCAnPmluY2x1ZGVzLmMnIG9yCisrCWRpZSAiQ2Fubm90IG9wZW4gaW5jbHVkZXMuYyI7CisrICAgIHByaW50IElOQ1MgcXFbI2luY2x1ZGUgImVycm5vLmgiXG5dOworKyAgICBjbG9zZSBJTkNTOworKyAgICBwcm9jZXNzX2ZpbGUoJ2luY2x1ZGVzLmMnKTsKKysgICAgdW5saW5rICdpbmNsdWRlcy5jJzsKKyt9CisrZWxzaWYgKCRDb25maWd7Z2NjdmVyc2lvbn0gbmUgJycgJiYgJF5PIGVxICdNU1dpbjMyJykgeworICAgICAjIE1pbkdXIGNvbXBsYWlucyAid2FybmluZzogI3ByYWdtYSBzeXN0ZW1faGVhZGVyIGlnbm9yZWQgb3V0c2lkZSBpbmNsdWRlCisgICAgICMgZmlsZSIgaWYgdGhlIGhlYWRlciBmaWxlcyBhcmUgcHJvY2Vzc2VkIGluZGl2aWR1YWxseSwgc28gaW5jbHVkZSB0aGVtCisgICAgICMgYWxsIGluIC5jIGZpbGUgYW5kIHByb2Nlc3MgdGhhdCBpbnN0ZWFkLgorQEAgLTUzLDcgKzYzLDcgQEAgc3ViIHByb2Nlc3NfZmlsZSB7CisgICAgICAgICBjaG9tcCgkZmlsZSA9IGBjeWdwYXRoIC13ICIkZmlsZSJgKTsKKyAgICAgfQorIAorLSAgICByZXR1cm4gdW5sZXNzIGRlZmluZWQgJGZpbGUgYW5kIC1mICRmaWxlOworKyMgICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkICRmaWxlIGFuZCAtZiAkZmlsZTsKKyAjICAgIHdhcm4gIlByb2Nlc3NpbmcgJGZpbGVcbiI7CisgCisgICAgIGxvY2FsICpGSDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9tYWtlX2V4dC5wbC1maXgtcmVnZW5lcmF0ZS1tYWtlZmlsZS1mYWlsZWQtd2hpbGUtY2MtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL21ha2VfZXh0LnBsLWZpeC1yZWdlbmVyYXRlLW1ha2VmaWxlLWZhaWxlZC13aGlsZS1jYy0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2ZjY1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9tYWtlX2V4dC5wbC1maXgtcmVnZW5lcmF0ZS1tYWtlZmlsZS1mYWlsZWQtd2hpbGUtY2MtLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK21ha2VfZXh0LnBsOiBmaXggcmVnZW5lcmF0ZSBtYWtlZmlsZSBmYWlsZWQgd2hpbGUgJGNjIGNoYW5nZWQKKworV2hpbGUgJGNjIGNoYW5nZWQsIHRoZSBleGlzdGFuY2Ugb2YgJ3hkZWZpbmUnIGNhdXNlZCBtYWtlZmlsZQorcmVnZW5lcmF0aW9uIGZhaWxlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIG1ha2VfZXh0LnBsIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWFrZV9leHQucGwgYi9tYWtlX2V4dC5wbAoraW5kZXggYjQzMzc2Mi4uOWZjMWEzNiAxMDA2NDQKKy0tLSBhL21ha2VfZXh0LnBsCisrKysgYi9tYWtlX2V4dC5wbAorQEAgLTMzNSw2ICszMzUsMTAgQEAgc3ViIGJ1aWxkX2V4dGVuc2lvbiB7CisgICAgICAgICAgICAgICAgIHByaW50ICJEZWxldGluZyBub24tQ3Jvc3MgbWFrZWZpbGVcbiI7CisgICAgICAgICAgICAgICAgIGNsb3NlICRtZmggb3IgZGllICJjbG9zZSAkbWFrZWZpbGU6ICQhIjsKKyAgICAgICAgICAgICAgICAgX3VubGluaygkbWFrZWZpbGUpOworKyAgICAgICAgICAgICAgICBpZigtZSAneGRlZmluZScpIHsKKysgICAgICAgICAgICAgICAgICAgIHByaW50ICJEZWxldGluZyB4ZGVmaW5lIGZvciByZWdlbmVyYXRlIG1ha2VmaWxlXG4iOworKyAgICAgICAgICAgICAgICAgICAgX3VubGluaygneGRlZmluZScpOworKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICB9CistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL25hdGl2ZS1ub3BhY2tsaXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL25hdGl2ZS1ub3BhY2tsaXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ODJkY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbmF0aXZlLW5vcGFja2xpc3QucGF0Y2gKQEAgLTAsMCArMSw5MSBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KKworUGFydCBvZiA1Ml9kZWJpYW5fZXh0dXRpbHNfaGFja3MucGF0Y2gganVzdCB0byBleGNsdWRlIHRoZSBpbnN0YWxsYXRpb24gb2YgLnBhY2tsaXN0IGZpbGVzCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIHwgICAzNSArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQoraW5kZXggZjYzMTQ1Yy4uYTU4OTcxMCAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorQEAgLTIxMjIsMTEgKzIxMjIsNiBAQCBwdXJlX3BlcmxfaW5zdGFsbCA6OiBhbGwKKyB9OworIAorICAgICBwdXNoIEBtLAorLXF7CQlyZWFkICJ9LiRzZWxmLT5jYXRmaWxlKCckKFBFUkxfQVJDSExJQiknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCistCQl3cml0ZSAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTEFSQ0hMSUIpJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorLX0gdW5sZXNzICRzZWxmLT57Tk9fUEFDS0xJU1R9OworLQorLSAgICBwdXNoIEBtLAorIHF7CQkiJChJTlNUX0xJQikiICIkKERFU1RJTlNUQUxMUFJJVkxJQikiIFwKKyAJCSIkKElOU1RfQVJDSExJQikiICIkKERFU1RJTlNUQUxMQVJDSExJQikiIFwKKyAJCSIkKElOU1RfQklOKSIgIiQoREVTVElOU1RBTExCSU4pIiBcCitAQCAtMjE1OCwxMCArMjE1Myw2IEBAIHF7CQkiJChJTlNUX0xJQikiICIkKERFU1RJTlNUQUxMU0lURUxJQikiIFwKKyBwdXJlX3ZlbmRvcl9pbnN0YWxsIDo6IGFsbAorIAkkKE5PRUNITykgJChNT0RfSU5TVEFMTCkgXAorIH07CistICAgIHB1c2ggQG0sCistcXsJCXJlYWQgIn0uJHNlbGYtPmNhdGZpbGUoJyQoVkVORE9SQVJDSEVYUCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCistCQl3cml0ZSAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTFZFTkRPUkFSQ0gpJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorLX0gdW5sZXNzICRzZWxmLT57Tk9fUEFDS0xJU1R9OworIAorICAgICBwdXNoIEBtLAorIHF7CQkiJChJTlNUX0xJQikiICIkKERFU1RJTlNUQUxMVkVORE9STElCKSIgXAorQEAgLTIxODcsMzcgKzIxNzgsMTkgQEAgZG9jX3ZlbmRvcl9pbnN0YWxsIDo6IGFsbAorIAorICAgICBwdXNoIEBtLCBxeworIGRvY19wZXJsX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCistCS0kKE5PRUNITykgJChET0NfSU5TVEFMTCkgXAorLQkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKy0JCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMUFJJVkxJQikgXAorLQkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCistCQlWRVJTSU9OICIkKFZFUlNJT04pIiBcCistCQlFWEVfRklMRVMgIiQoRVhFX0ZJTEVTKSIgXAorLQkJPj4gIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExBUkNITElCKScsJ3Blcmxsb2NhbC5wb2QnKS5xeyIKKyAKKyBkb2Nfc2l0ZV9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorKwkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExTSVRFQVJDSCkvcGVybGxvY2FsLnBvZCIKKysJLSQoTk9FQ0hPKSAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExTSVRFQVJDSCkiCisgCS0kKE5PRUNITykgJChET0NfSU5TVEFMTCkgXAorIAkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKyAJCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMU0lURUxJQikgXAorIAkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCisgCQlWRVJTSU9OICIkKFZFUlNJT04pIiBcCisgCQlFWEVfRklMRVMgIiQoRVhFX0ZJTEVTKSIgXAorLQkJPj4gIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExBUkNITElCKScsJ3Blcmxsb2NhbC5wb2QnKS5xeyIKKysJCT4+ICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMU0lURUFSQ0gpJywncGVybGxvY2FsLnBvZCcpLnF7IgorIAorIGRvY192ZW5kb3JfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKy0JLSQoTk9FQ0hPKSAkKERPQ19JTlNUQUxMKSBcCistCQkiTW9kdWxlIiAiJChOQU1FKSIgXAorLQkJImluc3RhbGxlZCBpbnRvIiAkKElOU1RBTExWRU5ET1JMSUIpIFwKKy0JCUxJTktUWVBFICIkKExJTktUWVBFKSIgXAorLQkJVkVSU0lPTiAiJChWRVJTSU9OKSIgXAorLQkJRVhFX0ZJTEVTICIkKEVYRV9GSUxFUykiIFwKKy0JCT4+ICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMQVJDSExJQiknLCdwZXJsbG9jYWwucG9kJykucXsiCisgCisgfSB1bmxlc3MgJHNlbGYtPntOT19QRVJMTE9DQUx9OworIAorQEAgLTIyMjYsMTMgKzIxOTksMTEgQEAgdW5pbnN0YWxsIDo6IHVuaW5zdGFsbF9mcm9tXyQoSU5TVEFMTERJUlMpZGlycworIAkkKE5PRUNITykgJChOT09QKQorIAorIHVuaW5zdGFsbF9mcm9tX3BlcmxkaXJzIDo6CistCSQoTk9FQ0hPKSAkKFVOSU5TVEFMTCkgIn0uJHNlbGYtPmNhdGZpbGUoJyQoUEVSTF9BUkNITElCKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiCisgCisgdW5pbnN0YWxsX2Zyb21fc2l0ZWRpcnMgOjoKKyAJJChOT0VDSE8pICQoVU5JTlNUQUxMKSAifS4kc2VsZi0+Y2F0ZmlsZSgnJChTSVRFQVJDSEVYUCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IgorIAorIHVuaW5zdGFsbF9mcm9tX3ZlbmRvcmRpcnMgOjoKKy0JJChOT0VDSE8pICQoVU5JTlNUQUxMKSAifS4kc2VsZi0+Y2F0ZmlsZSgnJChWRU5ET1JBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiCisgfTsKKyAKKyAgICAgam9pbigiIixAbSk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbmF0aXZlLXBlcmxpbmMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbmF0aXZlLXBlcmxpbmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBiYjFmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9uYXRpdmUtcGVybGluYy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0luZGV4OiBwZXJsLTUuOC44L2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjEyLjMub3JpZy9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQkyMDA4LTEwLTMxIDIyOjAxOjM1LjAwMDAwMDAwMCArMDAwMAorKysrIHBlcmwtNS4xMi4zL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCTIwMDgtMTAtMzEgMjI6MDE6MzUuMDAwMDAwMDAwICswMDAwCitAQCAtMTU5Nyw2ICsxNTk3LDE5IEBACisgCSRzZWxmLT57UEVSTF9MSUJ9ICAgICB8fD0gJENvbmZpZ3twcml2bGliZXhwfTsKKyAJJHNlbGYtPntQRVJMX0FSQ0hMSUJ9IHx8PSAkQ29uZmlne2FyY2hsaWJleHB9OworIAkkc2VsZi0+e1BFUkxfSU5DfSAgICAgPSAkc2VsZi0+Y2F0ZGlyKCIkc2VsZi0+e1BFUkxfQVJDSExJQn0iLCJDT1JFIik7ICMgd2lsZCBndWVzcyBmb3Igbm93CisrCSMgQ2hlY2sgZm9yIGVudmlyb25tZW50IG92ZXJyaWRlIHNvIHdlJ2xsIGZpbmQgdGhlIGhlYWRlcnMgaW4gdGhlIGNvcnJlY3QgcGxhY2UKKysgICAgICAgIGlmIChkZWZpbmVkICRFTlZ7UEVSTF9MSUJ9KQorKyAgICAgICAgeworKyAgICAgICAgICAgICRzZWxmLT57UEVSTF9MSUJ9ID0gJEVOVntQRVJMX0xJQn07CisrICAgICAgICB9CisrICAgICAgICBpZiAoZGVmaW5lZCAkRU5We1BFUkxfQVJDSExJQn0pCisrICAgICAgICB7CisrICAgICAgICAgICAgJHNlbGYtPntQRVJMX0FSQ0hMSUJ9ID0gJEVOVntQRVJMX0FSQ0hMSUJ9OworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGRlZmluZWQgJEVOVntQRVJMX0lOQ30pCisrICAgICAgICB7CisrICAgICAgICAgICAgJHNlbGYtPntQRVJMX0lOQ30gPSAkRU5We1BFUkxfSU5DfTsKKysgICAgICAgIH0KKyAJbXkgJHBlcmxfaDsKKyAKKyAJaWYgKG5vdCAtZiAoJHBlcmxfaCA9ICRzZWxmLT5jYXRmaWxlKCRzZWxmLT57UEVSTF9JTkN9LCJwZXJsLmgiKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLVBhdGhUb29scy1kb24tdC1maWx0ZXItb3V0LWJsaWItZnJvbS1JTkMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1QYXRoVG9vbHMtZG9uLXQtZmlsdGVyLW91dC1ibGliLWZyb20tSU5DLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZDkwNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1QYXRoVG9vbHMtZG9uLXQtZmlsdGVyLW91dC1ibGliLWZyb20tSU5DLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gOTBjMjUyY2VjYzM4YWVkNWQ1ZmFlZGIzMDQ4NWRkNmVlZTJlNTRlYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxMSBGZWIgMjAxNSAxNToxNDo0MCArMDgwMAorU3ViamVjdDogW1BBVENIXSBwZXJsIC8gUGF0aFRvb2xzOiBkb24ndCBmaWx0ZXIgb3V0IGJsaWIgZnJvbSBASU5DCisKK0lmICRUT1BESVIgaW5jbHVkZXMgdGhlIHN0cmluZyAiYmxpYiIsIGZpbHRlciBpdCBvdXQgZnJvbSBASU5DIG1heSBlbXB0eQordGhlIEBJTkMgYW5kIGNhdXNlIGJ1aWxkIGVycm9ycyBsaWtlOgorCisgIENhbid0IGxvY2F0ZSBFeHRVdGlscy9NYWtlTWFrZXIucG0gaW4gQElOQyBcCisgICh5b3UgbWF5IG5lZWQgdG8gaW5zdGFsbCB0aGUgRXh0VXRpbHM6Ok1ha2VNYWtlciBtb2R1bGUpIFwKKyAgKEBJTkMgY29udGFpbnM6IC4pIGF0IE1ha2VmaWxlLlBMCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGRpc3QvUGF0aFRvb2xzL01ha2VmaWxlLlBMIHwgMyAtLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2Rpc3QvUGF0aFRvb2xzL01ha2VmaWxlLlBMIGIvZGlzdC9QYXRoVG9vbHMvTWFrZWZpbGUuUEwKK2luZGV4IDFiMjFkZTQuLmY1NjJjYjIgMTAwNjQ0CistLS0gYS9kaXN0L1BhdGhUb29scy9NYWtlZmlsZS5QTAorKysrIGIvZGlzdC9QYXRoVG9vbHMvTWFrZWZpbGUuUEwKK0BAIC0xLDYgKzEsMyBAQAorLQorLUJFR0lOIHsgQElOQyA9IGdyZXAgeyEvYmxpYi99IEBJTkMgfQorLQorIHJlcXVpcmUgNS4wMDU7CisgdXNlIEV4dFV0aWxzOjpNYWtlTWFrZXI7CisgV3JpdGVNYWtlZmlsZQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1hcmNobGliLWV4cC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWFyY2hsaWItZXhwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MTJkMDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1hcmNobGliLWV4cC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitwZXJsOiBhZGQgYXJjaGxpYl9leHAgdmFyaWFibGUgdXNlZCB0byBnZW5lcmF0ZSBBUkNITElCX0VYUCBpbiBjb25maWcuaAorICAgIAorcGVybC5jIHVzZXMgYW4gQVJDSExJQl9FWFAgZGVmaW5lIHRvIGdlbmVyYXRlIGNvbXBpbGUtdGltZSBjb2RlIHRoYXQKK2FkZHMgdGhlIGFyY2hsaWJleHAgcGF0aCB0byBASU5DIGR1cmluZyBydW4tdGltZSBpbml0aWFsaXphdGlvbiBvZiBhCituZXcgcGVybCBpbnRlcnByZXRlci4KKyAgICAKK0JlY2F1c2Ugd2UndmUgY2hhbmdlZCB0aGlzIHZhbHVlIGluIGEgdGVtcG9yYXJ5IHdheSB0byBtYWtlIGl0Citwb3NzaWJsZSB0byB1c2UgRXh0VXRpbHM6OkVtYmVkIGluIHRoZSB0YXJnZXQgYnVpbGQgKHRoZSB0ZW1wb3JhcnkKK3ZhbHVlIGluIGNvbmZpZy5zaCBnZXRzIHJlLXN0cmlwcGVkIG91dCBkdXJpbmcgcGFja2FnaW5nKSwgdGhlCitBUkNITElCX0VYUCB2YWx1ZSB0aGF0IGdldHMgZ2VuZXJhdGVkIHN0aWxsIHVzZXMgdGhlIHRlbXBvcmFyeSB2ZXJzaW9uCitpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBleHBlY3RlZCB2ZXJzaW9uIChpLmUuIGJlY2F1c2VzIGl0J3MgaW4gdGhlCitnZW5lcmF0ZWQgY29uZmlnLmgsIGl0IGRvZXNuJ3QgZ2V0IHN0cmlwcGVkIG91dCBkdXJpbmcgcGFja2FnaW5nIGxpa2UKK3RoZSBvdGhlcnMgaW4gY29uZmlnLnNoKS4KKworVGhpcyBjcmVhdGVzIGFuIHVubW9kaWZpZWQgdmVyc2lvbiBjYWxsZWQgYXJjaGxpYl9leHAgdGhhdCBnZXRzIHVzZWQKK2J5IGEgbW9kaWZpZWQgY29uZmlnX2guU0ggdG8gZ2V0IHRoZSBjb3JyZWN0IHZhbHVlIGludG8gY29uZmlnLmgKKyAgICAKK1RoaXMgcGF0Y2ggdXNlcyBhbiB1bm1vZGlmaWVkIHZlcnNpb24gb2YgYXJjaGxpYmV4cCBjYWxsZWQKK2FyY2hsaWJfZXhwLCBpbnRyb2R1Y2VkIHRvIGNvbmZpZy5zaCwgd2hpY2ggaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUKK2NvcnJlY3QgdmFsdWUgb2YgQVJDSExJQl9FWFAgaW50byBjb25maWcuaAorICAKK1NlZSBZT0NUTyAjMzA5OSBmb3IgbW9yZSBpbmZvLgorCitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFRvbSBaYW51c3NpIDx0b20uemFudXNzaUBpbnRlbC5jb20+CisKK0luZGV4OiBwZXJsLTUuMTQuMi9jb25maWdfaC5TSAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xNC4yLm9yaWcvY29uZmlnX2guU0gKKysrKyBwZXJsLTUuMTQuMi9jb25maWdfaC5TSAorQEAgLTk5Niw3ICs5OTYsNyBAQCBzZWQgPDwhR1JPSyFUSElTISA+JENPTkZJR19IIC1lICdzIV4jdW5kCisgICoJaW4gcHJvZ3JhbXMgdGhhdCBhcmUgbm90IHByZXBhcmVkIHRvIGRlYWwgd2l0aCB+IGV4cGFuc2lvbiBhdCBydW4tdGltZS4KKyAgKi8KKyAjJGRfYXJjaGxpYiBBUkNITElCICIkYXJjaGxpYiIJCS8qKi8KKy0jJGRfYXJjaGxpYiBBUkNITElCX0VYUCAiJGFyY2hsaWJleHAiCQkvKiovCisrIyRkX2FyY2hsaWIgQVJDSExJQl9FWFAgIiRhcmNobGliX2V4cCIJCS8qKi8KKyAKKyAvKiBBUkNITkFNRToKKyAgKglUaGlzIHN5bWJvbCBob2xkcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFyY2hpdGVjdHVyZSBuYW1lLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtY29uZmlncG0tc3dpdGNoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtY29uZmlncG0tc3dpdGNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2Y2MxNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1jb25maWdwbS1zd2l0Y2gucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW25hdGl2ZV0KKworVGhpcyBwYXRjaCBpcyB1c2VkIGZvciBwZXJsLW5hdGl2ZSBvbmx5LiBJdCBlbmFibGVzIHRoZSBzd2l0Y2hpbmcgb2YKK2NvbmZpZ3VyYXRpb24gZmlsZXMgYmV0d2VlbiBDb25maWdfaGVhdnkucGwgYW5kCitDb25maWdfaGVhdnktdGFyZ2V0LnBsIGJ5IHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcworUEVSTENPTkZJR1RBUkdFVCAtIHRoZSBsYXRlciBjb250YWluaW5nIHNldHRpbmdzIGZvciB0aGUgdGFyZ2V0IHdoaWxlCit0aGUgZm9ybWVyIGNvbnRhaW5zIHRob3NlIGZvciB0aGUgaG9zdC4gVGhpcyB3aWxsIGFsbG93IGNwYW4uYmJjbGFzcwordG8gdXNlIHRoZSBzZXR0aW5ncyBhcHByb3ByaWF0ZSBmb3IgdGhlIG5hdGl2ZSBhbmQvb3IgdGFyZ2V0IGJ1aWxkcworYXMgcmVxdWlyZWQuIFRoaXMgYWxzbyBkaXNhYmxlcyB0aGUgdXNlIG9mIHRoZSBjYWNoZSBzaW5jZSB0aGUgY2FjaGVkCit2YWx1ZXMgd291bGQgYmUgdmFsaWQgZm9yIHRoZSBob3N0IG9ubHkuCisKK0luZGV4OiBwZXJsLTUuMTQuMi9jb25maWdwbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xNC4yLm9yaWcvY29uZmlncG0KKysrKyBwZXJsLTUuMTQuMi9jb25maWdwbQorQEAgLTY1OCw3ICs2NTgsNyBAQCBzdWIgRkVUQ0ggeworICAgICBteSgkc2VsZiwgJGtleSkgPSBAXzsKKyAKKyAgICAgIyBjaGVjayBmb3IgY2FjaGVkIHZhbHVlICh3aGljaCBtYXkgYmUgdW5kZWYgc28gd2UgdXNlIGV4aXN0cyBub3QgZGVmaW5lZCkKKy0gICAgcmV0dXJuIGV4aXN0cyAkc2VsZi0+eyRrZXl9ID8gJHNlbGYtPnska2V5fSA6ICRzZWxmLT5mZXRjaF9zdHJpbmcoJGtleSk7CisrICAgIHJldHVybiAkc2VsZi0+ZmV0Y2hfc3RyaW5nKCRrZXkpOworIH0KKyAKKyBFTkRPRkVORAorQEAgLTgxNiw3ICs4MTYsMjEgQEAgJGNvbmZpZ190eHQgLj0gc3ByaW50ZiA8PCdFTkRPRlRJRScsICRmYQorIHN1YiBERVNUUk9ZIHsgfQorIAorIHN1YiBBVVRPTE9BRCB7CistICAgIHJlcXVpcmUgJ0NvbmZpZ19oZWF2eS5wbCc7CisrICAgIG15ICRjZmdmaWxlID0gJ0NvbmZpZ19oZWF2eS5wbCc7CisrICAgIGlmIChkZWZpbmVkICRFTlZ7UEVSTENPTkZJR1RBUkdFVH0gYW5kICRFTlZ7UEVSTENPTkZJR1RBUkdFVH0gZXEgInllcyIpCisrICAgIHsKKysgICAgICAgICRjZmdmaWxlID0gJ0NvbmZpZ19oZWF2eS10YXJnZXQucGwnOworKyAgICB9CisrICAgIGlmIChkZWZpbmVkICRFTlZ7UEVSTF9BUkNITElCfSkKKysgICAgeworKyAgICAgICAgcHVzaCBASU5DLCAkRU5We1BFUkxfQVJDSExJQn07CisrICAgICAgICByZXF1aXJlICRjZmdmaWxlOworKyAgICAgICAgcG9wIEBJTkM7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICByZXF1aXJlICRjZmdmaWxlOworKyAgICB9CisgICAgIGdvdG8gXCZsYXVuY2hlciB1bmxlc3MgJENvbmZpZzo6QVVUT0xPQUQgPX4gL2xhdW5jaGVyJC87CisgICAgIGRpZSAiJkNvbmZpZzo6QVVUT0xPQUQgZmFpbGVkIG9uICRDb25maWc6OkFVVE9MT0FEIjsKKyB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1jb25maWd1cmUuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1jb25maWd1cmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTcyY2U0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWNvbmZpZ3VyZS5zaApAQCAtMCwwICsxLDQzIEBACisjISAvYmluL3NoCisKKyMKKyMgR2VuZXJhdGUgdGhlIGNvbW1vbiBwZXJsIGNvbmZpZ3VyYXRpb24KKyMgTmVlZHMgdG8gYmUgcnVuIG9uIGEgaG9zdCB0aGF0IG1hdGNoZXMgdGhlIGJpdHNpemUgb2YgdGhlIHRhcmdldCBwbGF0Zm9ybQorIworCitlY2hvIHNoIENvbmZpZ3VyZSAtZGVzIFwKKyAgICAgICAgLURvcHRpbWl6ZT0tTzIgXAorICAgICAgICAtRG15aG9zdG5hbWU9bG9jYWxob3N0IFwKKyAgICAgICAgLURwZXJsYWRtaW49cm9vdEBsb2NhbGhvc3QgXAorICAgICAgICAtRGNjPWdjYyBcCisgICAgICAgIC1EY2ZfYnk9J09wZW4gRW1iZWRkZWQnIFwKKyAgICAgICAgLURpbnN0YWxscHJlZml4PUBERVNURElSQCBcCisgICAgICAgIC1EcHJlZml4PS91c3IgXAorICAgICAgICAtRHZlbmRvcnByZWZpeD0vdXNyIFwKKyAgICAgICAgLURzaXRlcHJlZml4PS91c3IgXAorICAgICAgICAtRG90aGVybGliZGlycz0vdXNyL2xpYi9wZXJsNS81LjEyLjMgXAorICAgICAgICAtRHVzZXNocnBsaWIgXAorICAgICAgICAtRHVzZXRocmVhZHMgXAorICAgICAgICAtRHVzZWl0aHJlYWRzIFwKKyAgICAgICAgLUR1c2VsYXJnZWZpbGVzIFwKKyAgICAgICAgLVVkX2Rvc3VpZCBcCisgICAgICAgIC1EZF9zZW1jdGxfc2VtdW4gXAorICAgICAgICAtVWlfZGIgXAorICAgICAgICAtVWlfbmRibSBcCisgICAgICAgIC1VaV9nZGJtIFwKKyAgICAgICAgLURpX3NoYWRvdyBcCisgICAgICAgIC1EaV9zeXNsb2cgXAorICAgICAgICAtRG1hbjNleHQ9M3BtIFwKKyAgICAgICAgLUR1c2VwZXJsaW8gXAorICAgICAgICAtRGluc3RhbGx1c3JiaW5wZXJsIFwKKyAgICAgICAgLVViaW5jb21wYXQ1MDA1IFwKKyAgICAgICAgLVV2ZXJzaW9ub25seSBcCisgICAgICAgIC1EcGFnZXI9Jy91c3IvYmluL2xlc3MgLWlzcicKKworY3AgLWYgY29uZmlnLnNoIGNvbmZpZy5zaC5DT01NT04KKworVEFSR0VUT1M9JChncmVwIG15YXJjaG5hbWUgY29uZmlnLnNoLkNPTU1PTiB8IHNlZCAicyMuKidcKC4qXCknLiojXDEjIikKKworc2VkIC1yIC1pIGNvbmZpZy5zaC5DT01NT04gXAorCS1lICJzIyhpbnN0YWxsLio9JykoL3VzcikvbG9jYWwoLionKSNcMUBERVNURElSQFwyXDMjZyIgXAorCS1lICdzIyckVEFSR0VUT1MnI0BBUkNIQCNnJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZHlubG9hZGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZHlubG9hZGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNWJlYmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1keW5sb2FkZXIucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitBbGxvdyB0aGUgbG9jYXRpb24gdGhhdCAuc28gZmlsZXMgYXJlIHNlYXJjaGVkIGZvciBmb3IgZHluYW1pYworbG9hZGluZyB0byBiZSBjaGFuZ2VkIHZpYSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gVGhpcyBpcyB0byBhbGxvdwordXMgdG8gbG9hZCAuc28ncyBmcm9tIHRoZSBob3N0IHN5c3RlbSB3aGlsZSBidWlsZGluZyBmb3IgdGhlIHRhcmdldAorc3lzdGVtLgorCitVcGRhdGUgYnkgTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8wNC8yMQorCitJbmRleDogcGVybC01LjE0LjIvZGlzdC9YU0xvYWRlci9YU0xvYWRlcl9wbS5QTAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xNC4yLm9yaWcvZGlzdC9YU0xvYWRlci9YU0xvYWRlcl9wbS5QTAorKysrIHBlcmwtNS4xNC4yL2Rpc3QvWFNMb2FkZXIvWFNMb2FkZXJfcG0uUEwKK0BAIC0yOCw2ICsyOCwyMCBAQCBzdWIgbG9hZCB7CisgCisgICAgIG15ICgkbW9kdWxlLCAkbW9kbGlibmFtZSkgPSBjYWxsZXIoKTsKKyAKKysgICAgIyBPRTogQWxsb3cgZW52IHRvIGZvcm0gZHluYW1pYyBsb2FkZXIgdG8gbG9vayBpbiBhIGRpZmZlcmVudCBwbGFjZQorKyAgICAjIFRoaXMgaXMgc28gaXQgZmluZHMgdGhlIGhvc3QgLnNvIGZpbGVzLCBub3QgdGhlIHRhcmdldHMKKysgICAgaWYgKGRlZmluZWQgJEVOVntQRVJMSE9TVExJQn0pCisrICAgIHsKKysgICAgICAgIG15ICRob3N0bGliID0gJEVOVntQRVJMSE9TVExJQn07CisrICAgICAgICBwcmludCBTVERFUlIgIioqKiBNb2R1bGUgbmFtZSBJTjogJG1vZGxpYm5hbWVcbiI7CisrICAgICAgICAoJHAxLCAkcDIsICRwMywgJHA0LCAkcDUpID0gJG1vZGxpYm5hbWUgPX4gbS8oXiguKmxpYlx3KlwvKT8pKChwZXJsXC9bMC05XC5dKlwvKT8pKC4qKSQvOworKyAgICAgICAgcHJpbnQgU1RERVJSICIqKiogcDE6ICRwMSAgcDM6ICRwMyAgcDU6ICRwNVxuIjsKKysgICAgICAgIGlmICggJHAxIG5lICIiICkgeworKyAgICAgICAgICAgICRtb2RsaWJuYW1lID0gJGhvc3RsaWIuJHA1OworKyAgICAgICAgfQorKyAgICAgICAgcHJpbnQgU1RERVJSICIqKiogTW9kdWxlIG5hbWUgT1VUOiAkbW9kbGlibmFtZVxuIjsKKysgICAgfQorKworICAgICBpZiAoQF8pIHsKKyAJJG1vZHVsZSA9ICRfWzBdOworICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZW5hYmxlLWdkYm0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1lbmFibGUtZ2RibS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTgzZmNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZW5hYmxlLWdkYm0ucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitJbmRleDogcGVybC01LjguOC9jb25maWdfaC5TSAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS44Ljgub3JpZy9jb25maWdfaC5TSAkyMDA1LTExLTAxIDAyOjEzOjA1LjAwMDAwMDAwMCArMDgwMAorKysrIHBlcmwtNS44LjgvY29uZmlnX2guU0gJMjAxMC0xMS0wMSAxNzowNjowNy4yMTUyMTk3MzggKzA4MDAKK0BAIC03MDksNiArNzA5LDEyIEBACisgICovCisgIyRpX2Zsb2F0IElfRkxPQVQJCS8qKi8KKyAKKysvKiBJX0dEQk06CisrICogICAgICBUaGlzIHN5bWJvbCwgaWYgZGVmaW5lZCwgaW5kaWNhdGVzIHRoYXQgPGdkYm0uaD4gZXhpc3RzIGFuZCBzaG91bGQKKysgKiAgICAgIGJlIGluY2x1ZGVkLgorKyAqLworKyMkaV9nZGJtIElfR0RCTSAvKiovCisrCisgLyogSV9MSU1JVFM6CisgICoJVGhpcyBzeW1ib2wsIGlmIGRlZmluZWQsIGluZGljYXRlcyB0byB0aGUgQyBwcm9ncmFtIHRoYXQgaXQgc2hvdWxkCisgICoJaW5jbHVkZSA8bGltaXRzLmg+IHRvIGdldCBkZWZpbml0aW9uIG9mIHN5bWJvbHMgbGlrZSBXT1JEX0JJVCBvcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtbW9yZWNvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLW1vcmVjb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljZTg1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLW1vcmVjb25maWcucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitXZSBuZWVkIGxkIGluIHRoZSBmYWtlIGNvbmZpZyBsaWJyYXJ5LCBidXQgaXQncyBub3QgaW5jbHVkZWQgYnkgZGVmYXVsdC4gU28KK2V4cGFuZCB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluY2x1ZGVkLiBXaGlsZSB0aGlzIHdvcmtzIGl0IGluZGljYXRlcyB0aGF0IHRoZQorcmVzdCBvZiB0aGUgY29uZmlnIGl0ZW1zIGFyZSBub3QgYmVpbmcgcGlja2VkIHVwIGFuZC9vciBhcmUgYmVpbmcgcGlja2VkIHVwCitmcm9tIHRoZSBob3N0LiBNb3JlIGludmVzdGlnYXRpb24gbmVlZGVkLgorCistLS0gcGVybC01LjguOC9jb25maWdwbQkyMDA3LzA0LzIwIDA5OjQ4OjA1CTEuMQorKysrIHBlcmwtNS44LjgvY29uZmlncG0JMjAwNy8wNC8yMCAwOTo1NzoxMgorQEAgLTIsNyArMiw3IEBACisgdXNlIHN0cmljdDsKKyB1c2UgdmFycyBxdyglQ29uZmlnICRDb25maWdfU0hfZXhwYW5kZWQpOworIAorLW15ICRob3dfbWFueV9jb21tb24gPSAyMjsKKytteSAkaG93X21hbnlfY29tbW9uID0gNTA7CisgCisgIyBjb21tb25seSB1c2VkIG5hbWVzIHRvIHByZWNhY2hlIChhbmQgaGVuY2UgbG9va3VwIGZhc3Rlc3QpCisgbXkgJUNvbW1vbjsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMmRkMWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCitjZCB0ICYmIC4vVEVTVCB8IHNlZCAtdSAtZSAnc3xcKC4qXCkgLiogb2skfFBBU1M6IFwxfCcgLWUgJ3N8XCguKlwpIC4qIHNraXBwZWR8U0tJUDogXDF8JyAtZSAnc3xcKC4qXCkgXC5cKC4qXCl8RkFJTDogXDF8JwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3QtcnVuLXN3aXRjaGVzLnQtcGVybDUtcGVybC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC90LXJ1bi1zd2l0Y2hlcy50LXBlcmw1LXBlcmwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmZGY0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC90LXJ1bi1zd2l0Y2hlcy50LXBlcmw1LXBlcmwucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSAxNTYxNTQ5ZWEzNmUzN2NjMjU3MDZmMDk0YTE5NWRlNDkyOGY0MjExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDE5IEp1biAyMDE1IDAxOjIzOjQ2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHQvcnVuL3N3aXRjaGVzLnQ6IHBlcmw1IC0+IHBlcmwKKworV2UgY2FsbCBpdCBwZXJsIHJhdGhlciB0aGFuIHBlcmw1IGluIG9lLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHQvcnVuL3N3aXRjaGVzLnQgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90L3J1bi9zd2l0Y2hlcy50IGIvdC9ydW4vc3dpdGNoZXMudAoraW5kZXggNzg5MTVlMC4uZTllNGI0NSAxMDA2NDQKKy0tLSBhL3QvcnVuL3N3aXRjaGVzLnQKKysrKyBiL3QvcnVuL3N3aXRjaGVzLnQKK0BAIC0yNjksNyArMjY5LDcgQEAgaXMgcnVucGVybChzdGRlcnIgPT4gMSwgcHJvZyA9PiAnIyFwZXJsIC1NJyksCisgICAgICAgICAgICctViBnZW5lcmF0ZXMgMjArIGxpbmVzJyApOworIAorICAgICBsaWtlKCBydW5wZXJsKCBzd2l0Y2hlcyA9PiBbJy1WJ10gKSwKKy0JICBxci9cQVN1bW1hcnkgb2YgbXkgcGVybDUgLipjb25maWd1cmF0aW9uOi8sCisrCSAgcXIvXEFTdW1tYXJ5IG9mIG15IHBlcmwgLipjb25maWd1cmF0aW9uOi8sCisgICAgICAgICAgICctViBsb29rcyBva2F5JyApOworIAorICAgICAjIGxvb2t1cCBhIGtub3duIGNvbmZpZyB2YXIKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvdGVzdC9kaXN0LXRocmVhZHMtdC1qb2luLnQtYWRqdXN0LXBzLW9wdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC90ZXN0L2Rpc3QtdGhyZWFkcy10LWpvaW4udC1hZGp1c3QtcHMtb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MjkzYzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvdGVzdC9kaXN0LXRocmVhZHMtdC1qb2luLnQtYWRqdXN0LXBzLW9wdGlvbi5wYXRjaApAQCAtMCwwICsxLDM4IEBACitkaXN0L3RocmVhZHMvdC9qb2luLnQ6IGFkanVzdCBwcyBvcHRpb24KKworVGhlIHBzJ3Mgb3B0aW9uICctZicgaXMgbm90IHN1cHBvcnRlZCBieSBidXN5Ym94IGluIG9lLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRpc3QvdGhyZWFkcy90L2pvaW4udCB8IDYgKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2Rpc3QvdGhyZWFkcy90L2pvaW4udCBiL2Rpc3QvdGhyZWFkcy90L2pvaW4udAorLS0tIGEvZGlzdC90aHJlYWRzL3Qvam9pbi50CisrKysgYi9kaXN0L3RocmVhZHMvdC9qb2luLnQKK0BAIC0xMTgsNyArMTE4LDcgQEAgaWYgKCReTyBlcSAnbGludXgnKSB7CisgICAgICAgICAgICAgICAgICB9KS0+am9pbjsKKyAgICAgI3ByaW50ICIjIG1haW50aHJlYWQ6IFwkMCA9ICQwXG4iOworICAgICAjcHJpbnQgIiMgcGlkID0gJCRcbiI7CistICAgIGlmIChvcGVuIFBTLCAicHMgLWYgfCIpIHsgIyBOb3RlOiBtdXN0IHdvcmsgaW4gKGFsbCkgc3lzdGVtcy4KKysgICAgaWYgKG9wZW4gUFMsICJwcyB8IikgeyAjIE5vdGU6IG11c3Qgd29yayBpbiAoYWxsKSBzeXN0ZW1zLgorICAgICAgICAgbXkgKCRzYXdwaWQsICRzYXdleGUpOworICAgICAgICAgd2hpbGUgKDxQUz4pIHsKKyAgICAgICAgICAgICBjaG9tcDsKK0BAIC0xMzUsMTAgKzEzNSwxMCBAQCBpZiAoJF5PIGVxICdsaW51eCcpIHsKKyAgICAgICAgIGlmICgkc2F3cGlkKSB7CisgICAgICAgICAgICAgb2soJHNhd3BpZCAmJiAkc2F3ZXhlLCAnYWx0ZXJpbmcgJDAgaXMgZWZmZWN0aXZlJyk7CisgICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHNraXAoIlwkMCBjaGVjazogZGlkIG5vdCBzZWUgcGlkICQkIGluICdwcyAtZiB8JyIpOworKyAgICAgICAgICAgIHNraXAoIlwkMCBjaGVjazogZGlkIG5vdCBzZWUgcGlkICQkIGluICdwcyB8JyIpOworICAgICAgICAgfQorICAgICB9IGVsc2UgeworLSAgICAgICAgc2tpcCgiXCQwIGNoZWNrOiBvcGVuaW5nICdwcyAtZiB8JyBmYWlsZWQ6ICQhIik7CisrICAgICAgICBza2lwKCJcJDAgY2hlY2s6IG9wZW5pbmcgJ3BzIHwnIGZhaWxlZDogJCEiKTsKKyAgICAgfQorIH0gZWxzZSB7CisgICAgIHNraXAoIlwkMCBjaGVjazogb25seSBvbiBMaW51eCIpOworLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC90ZXN0L2V4dC1EeW5hTG9hZGVyLXQtRHluYUxvYWRlci50LWZpeC1jYWxsaW5nLWRsX2ZpbmRmaWwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvdGVzdC9leHQtRHluYUxvYWRlci10LUR5bmFMb2FkZXIudC1maXgtY2FsbGluZy1kbF9maW5kZmlsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNTc3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvdGVzdC9leHQtRHluYUxvYWRlci10LUR5bmFMb2FkZXIudC1maXgtY2FsbGluZy1kbF9maW5kZmlsLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK2V4dC9EeW5hTG9hZGVyL3QvRHluYUxvYWRlci50OiBmaXggY2FsbGluZyBkbF9maW5kZmlsZSgpIGZhaWxlZAorCitVc2UgJyRDb25maWd7bGliY30nIGFzIHRoZSBsaWJjIGZpbGUgbmFtZQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGV4dC9EeW5hTG9hZGVyL3QvRHluYUxvYWRlci50IHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZXh0L0R5bmFMb2FkZXIvdC9EeW5hTG9hZGVyLnQgYi9leHQvRHluYUxvYWRlci90L0R5bmFMb2FkZXIudAoraW5kZXggYWRlMWY4ZS4uMzU2N2FmZSAxMDA2NDQKKy0tLSBhL2V4dC9EeW5hTG9hZGVyL3QvRHluYUxvYWRlci50CisrKysgYi9leHQvRHluYUxvYWRlci90L0R5bmFMb2FkZXIudAorQEAgLTEwNiw3ICsxMDYsNyBAQCBvayggZGVmaW5lZCAkZGxlcnIsICJkbF9lcnJvcigpIHJldHVybmluZyBhbiBlcnJvciBtZXNzYWdlOiAnJGRsZXJyJyIgKTsKKyAjIC4uLiBkbF9maW5kZmlsZSgpCisgU0tJUDogeworICAgICBteSBAZmlsZXMgPSAoKTsKKy0gICAgZXZhbCB7IEBmaWxlcyA9IER5bmFMb2FkZXI6OmRsX2ZpbmRmaWxlKCJjIikgfTsKKysgICAgZXZhbCB7IEBmaWxlcyA9IER5bmFMb2FkZXI6OmRsX2ZpbmRmaWxlKCRDb25maWd7bGliY30pIH07CisgICAgIGlzKCAkQCwgJycsICJjYWxsaW5nIGRsX2ZpbmRmaWxlKCkiICk7CisgICAgICMgU29tZSBwbGF0Zm9ybXMgYXJlIGtub3duIHRvIG5vdCBoYXZlIGEgImxpYmMiCisgICAgICMgKG5vdCBhdCBsZWFzdCBieSB0aGF0IG5hbWUpIHRoYXQgdGhlIGRsX2ZpbmRmaWxlKCkKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmxfNS4yMi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsXzUuMjIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2U3ODQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsXzUuMjIuMC5iYgpAQCAtMCwwICsxLDM3MSBAQAorcmVxdWlyZSBwZXJsLmluYworCisjIFdlIG5lZWQgZ251Z3JlcCAoZm9yIC1JKQorREVQRU5EUyA9ICJ2aXJ0dWFsL2RiIGdyZXAtbmF0aXZlIgorREVQRU5EUyArPSAiZ2RibSB6bGliIgorCisjIFBpY2sgdXAgcGF0Y2hlcyBmcm9tIGRlYmlhbgorIyBodHRwOi8vZnRwLmRlLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9wL3BlcmwvcGVybF81LjIyLjAtMS5kZWJpYW4udGFyLnh6CitTUkNfVVJJICs9ICIgXAorCWZpbGU6Ly9kZWJpYW4vY3Bhbl9kZWZpbnN0YWxsZGlycy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2RiX2ZpbGVfdmVyLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZG9jX2luZm8uZGlmZiBcCisJZmlsZTovL2RlYmlhbi9lbmMyeHNfaW5jLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZXJybm9fdmVyLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vbGlicGVybF9lbWJlZF9kb2MuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9maXhlcy9yZXNwZWN0X3VtYXNrLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vd3JpdGFibGVfc2l0ZV9kaXJzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZXh0dXRpbHNfc2V0X2xpYnBlcmxfcGF0aC5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL25vX3BhY2tsaXN0X3Blcmxsb2NhbC5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3ByZWZpeF9jaGFuZ2VzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vaW5zdG1vZHNoX2RvYy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2xkX3J1bl9wYXRoLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vbGlibmV0X2NvbmZpZ19wYXRoLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vbW9kX3BhdGhzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vcHJ1bmVfbGlicy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2ZpeGVzL25ldF9zbXRwX2RvY3MuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9wZXJsaXZwLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vc3F1ZWxjaC1sb2NhbGUtd2FybmluZ3MuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9za2lwLXVwc3RyZWFtLWdpdC10ZXN0cy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3NraXAta2ZyZWVic2QtY3Jhc2guZGlmZiBcCisJZmlsZTovL2RlYmlhbi9maXhlcy9kb2N1bWVudF9tYWtlbWFrZXJfY2NmbGFncy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2ZpbmRfaHRtbDJ0ZXh0LmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vcGVybDVkYi14LXRlcm1pbmFsLWVtdWxhdG9yLnBhdGNoIFwKKwlmaWxlOi8vZGViaWFuL2NwYW4tbWlzc2luZy1zaXRlLWRpcnMuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9maXhlcy9tZW1vaXplX3N0b3JhYmxlX25zdG9yZS5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3JlZ2VuLXNraXAuZGlmZiBcCisiCisKK1NSQ19VUkkgKz0gIiBcCisgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5TSC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9pbnN0YWxscGVybC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9wZXJsLWR5bmxvYWRlci5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9wZXJsLW1vcmVjb25maWcucGF0Y2ggXAorICAgICAgICBmaWxlOi8vbGV0Z2NjLWZpbmQtZXJybm8ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZ2VuZXJhdGUtc2gucGF0Y2ggXAorICAgICAgICBmaWxlOi8vbmF0aXZlLXBlcmxpbmMucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcGVybC1lbmFibGUtZ2RibS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9jcm9zcy1nZW5lcmF0ZV91dWRtYXAucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZml4X2JhZF9ycGF0aC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9wZXJsLWFyY2hsaWItZXhwLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2R5bmFsb2FkZXJoYWNrLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2NvbmZpZy5zaCBcCisgICAgICAgIGZpbGU6Ly9jb25maWcuc2gtMzIgXAorICAgICAgICBmaWxlOi8vY29uZmlnLnNoLTMyLWxlIFwKKyAgICAgICAgZmlsZTovL2NvbmZpZy5zaC0zMi1iZSBcCisgICAgICAgIGZpbGU6Ly9jb25maWcuc2gtNjQgXAorICAgICAgICBmaWxlOi8vY29uZmlnLnNoLTY0LWxlIFwKKyAgICAgICAgZmlsZTovL2NvbmZpZy5zaC02NC1iZSBcCisgICAgICAgIGZpbGU6Ly9tYWtlX2V4dC5wbC1maXgtcmVnZW5lcmF0ZS1tYWtlZmlsZS1mYWlsZWQtd2hpbGUtY2MtLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3QtcnVuLXN3aXRjaGVzLnQtcGVybDUtcGVybC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9leHQtT0RCTV9GaWxlLWhpbnRzLWxpbnV4LnBsLWxpbmstbGliZ2RibV9jb21wYXQucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZXh0LU9EQk1fRmlsZS10LW9kYm0udC1maXgtdGhlLXBhdGgtb2YtZGJtdF9jb21tb24ucC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9wZXJsLVBhdGhUb29scy1kb24tdC1maWx0ZXItb3V0LWJsaWItZnJvbS1JTkMucGF0Y2ggXAorIgorCisjIEZpeCB0ZXN0IGNhc2UgaXNzdWVzCitTUkNfVVJJX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIFwKKyAgICAgICAgICAgIGZpbGU6Ly90ZXN0L2Rpc3QtdGhyZWFkcy10LWpvaW4udC1hZGp1c3QtcHMtb3B0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly90ZXN0L2V4dC1EeW5hTG9hZGVyLXQtRHluYUxvYWRlci50LWZpeC1jYWxsaW5nLWRsX2ZpbmRmaWwucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZjBmMDliMTdkZTQyNmVmZjMyMzQyNmNiMTQwZWU3OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiZTgzZWFkMGM1YzI2Y2JiZTYyNmZhNGJhYzFhNGJlYWJlMjNhOWVlYmMxNWQzNWJhNDljY2RlMTE4NzhlMTk2IgorCitpbmhlcml0IHBlcmxuYXRpdmUgc2l0ZWluZm8KKworIyBXaGVyZSB0byBmaW5kIHRoZSBuYXRpdmUgcGVybAorSE9TVFBFUkwgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3Blcmwke1BWfSIKKworIyBXaGVyZSB0byBmaW5kIC5zbyBmaWxlcyAtIHVzZSB0aGUgLW5hdGl2ZSB2ZXJzaW9ucyBub3QgdGhvc2UgZnJvbSB0aGUgdGFyZ2V0IGJ1aWxkCitleHBvcnQgUEVSTEhPU1RMSUIgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3BlcmwvJHtQVn0vIgorCisjIFdoZXJlIHRvIGZpbmQgcGVybCBASU5DLyNpbmNsdWRlIGZpbGVzCisjIC0gdXNlIHRoZSAtbmF0aXZlIHZlcnNpb25zIG5vdCB0aG9zZSBmcm9tIHRoZSB0YXJnZXQgYnVpbGQKK2V4cG9ydCBQRVJMX0xJQiA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vcGVybC1uYXRpdmUvcGVybC8ke1BWfS8iCitleHBvcnQgUEVSTF9BUkNITElCID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS9wZXJsLyR7UFZ9LyIKKworIyBMREZMQUdTIGZvciBzaGFyZWQgbGlicmFyaWVzCitleHBvcnQgTERETEZMQUdTID0gIiR7TERGTEFHU30gLXNoYXJlZCIKKworTERGTEFHU19hcHBlbmQgPSAiIC1mc3RhY2stcHJvdGVjdG9yIgorCisjIFdlJ3JlIGFsbW9zdCBEZWJpYW4sIGFyZW4ndCB3ZT8KK0NGTEFHUyArPSAiLURERUJJQU4iCisKK2RvX25vbGFyZ2VmaWxlKCkgeworCXNlZCAtaSAtZSAicyxcKHVzZWxhcmdlZmlsZXM9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorCQktZSAicyxcKGRfcmVhZGRpcjY0X3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorCQktZSAicyxcKHJlYWRkaXI2NF9yX3Byb3RvPVwpJ1x3KycsXDEnMCcsZyIgXAorCQktZSAiL2NjZmxhZ3NfdXNlbGFyZ2VmaWxlcy9kIiBcCisJCS1lICJzLy1EdXNlbGFyZ2VmaWxlcy8vIiBcCisJCS1lICJzLy1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQvLyIgXAorCQktZSAicy8tRF9MQVJHRUZJTEVfU09VUkNFLy8iIFwKKwkJJHtTfS9Dcm9zcy9jb25maWcuc2gtJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9Cit9CisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAgICAgIyBNYWtlIGhvc3RwZXJsIGluIGJ1aWxkIGRpcmVjdG9yeSBiZSB0aGUgbmF0aXZlIHBlcmwKKyAgICAgICAgbG4gLXNmICR7SE9TVFBFUkx9IGhvc3RwZXJsCisKKwlpZiBbIC1uICIke0NPTkZJR1VSRVNUQU1QRklMRX0iIC1hIC1lICIke0NPTkZJR1VSRVNUQU1QRklMRX0iIF07IHRoZW4KKwkJaWYgWyAiYGNhdCAke0NPTkZJR1VSRVNUQU1QRklMRX1gIiAhPSAiJHtCQl9UQVNLSEFTSH0iIC1hIC1lIE1ha2VmaWxlIF07IHRoZW4KKwkJCSR7TUFLRX0gY2xlYW4KKwkJZmkKKwkJZmluZCAke1N9IC1uYW1lICouc28gLWRlbGV0ZQorCWZpCisJaWYgWyAtbiAiJHtDT05GSUdVUkVTVEFNUEZJTEV9IiBdOyB0aGVuCisJCWVjaG8gJHtCQl9UQVNLSEFTSH0gPiAke0NPTkZJR1VSRVNUQU1QRklMRX0KKwlmaQorCisgICAgICAgICMgRG8gb3VyIHdvcmsgaW4gdGhlIGNyb3NzIHN1YmRpcgorICAgICAgICBjZCBDcm9zcworCisgICAgICAgICMgR2VuZXJhdGUgY29uZmlndXJhdGlvbgorICAgICAgICBybSAtZiBjb25maWcuc2gtJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9CisgICAgICAgIGZvciBpIGluICR7V09SS0RJUn0vY29uZmlnLnNoIFwKKyAgICAgICAgICAgICAgICAgJHtXT1JLRElSfS9jb25maWcuc2gtJHtTSVRFSU5GT19CSVRTfSBcCisgICAgICAgICAgICAgICAgICR7V09SS0RJUn0vY29uZmlnLnNoLSR7U0lURUlORk9fQklUU30tJHtTSVRFSU5GT19FTkRJQU5ORVNTfTsgZG8KKyAgICAgICAgICAgIGNhdCAkaSA+PiBjb25maWcuc2gtJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9CisgICAgICAgIGRvbmUKKworICAgICAgICAjIEZpeHVwcyBmb3IgdWNsaWJjCisgICAgICAgIGlmIFsgIiR7VEFSR0VUX09TfSIgPSAibGludXgtdWNsaWJjIiAtbyAiJHtUQVJHRVRfT1N9IiA9ICJsaW51eC11Y2xpYmNlYWJpIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lICJzLFwoZF9jcnlwdF9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2Z1dGltZXM9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfZmluaXRlbD1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoY3J5cHRfcl9wcm90bz1cKSdcdysnLFwxJzAnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2dldG5ldGJ5bmFtZV9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRuZXRieW5hbWVfcl9wcm90bz1cKSdcdysnLFwxJzAnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2dldG5ldGJ5YWRkcl9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRuZXRieWFkZHJfcl9wcm90bz1cKSdcdysnLFwxJzAnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2dldG5ldGVudF9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRuZXRlbnRfcl9wcm90bz1cKSdcdysnLFwxJzAnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3NvY2thdG1hcms9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc29ja2F0bWFya3Byb3RvPVwpJ1x3KycsXDEnMCcsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfZWFjY2Vzcz1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9zdGRpb19wdHJfbHZhbD1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9zdGRpb19wdHJfbHZhbF9zZXRzX2NudD1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9zdGRpb2Jhc2U9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3Rkc3RkaW89XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicywtZnN0YWNrLXByb3RlY3RvciwtZm5vLXN0YWNrLXByb3RlY3RvcixnIiBcCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaC0ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30KKyAgICAgICAgZmkKKyAgICAgICAgIyBGaXh1cHMgZm9yIG11c2wKKyAgICAgICAgaWYgWyAiJHtUQVJHRVRfT1N9IiA9ICJsaW51eC1tdXNsIiAtbyAiJHtUQVJHRVRfT1N9IiA9ICJsaW51eC1tdXNsZWFiaSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSAicyxcKGRfbGlibV9saWJfdmVyc2lvbj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9zdGRpb19wdHJfbHZhbD1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9zdGRpb19wdHJfbHZhbF9zZXRzX2NudD1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9zdGRpb2Jhc2U9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3Rkc3RkaW89XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfZ2V0bmV0YnluYW1lX3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfZmluaXRlbD1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0cHJvdG9ieW5hbWVfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0cHdlbnRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0c2VydmVudF9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRob3N0ZW50X3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldG5ldGVudF9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRuZXRieWFkZHJfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0cHJvdG9lbnRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0cHJvdG9ieW51bWJlcl9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRncmVudF9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChpX2ZjbnRsPVwpJ3VuZGVmJyxcMSdkZWZpbmUnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChoX2ZjbnRsPVwpJ2ZhbHNlJyxcMSd0cnVlJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLC1mc3RhY2stcHJvdGVjdG9yLC1mbm8tc3RhY2stcHJvdGVjdG9yLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsLWxuc2wsLGciIFwKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNoLSR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfQorICAgICAgICBmaQorCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnJywgJ2RvX25vbGFyZ2VmaWxlJywgZCl9CisKKyAgICAgICAgIyBVcGRhdGUgc29tZSBwYXRocyBpbiB0aGUgY29uZmlndXJhdGlvbgorICAgICAgICBzZWQgLWkgLWUgJ3MsQEFSQ0hALXRocmVhZC1tdWx0aSwsZycgXAorICAgICAgICAgICAgICAgLWUgJ3MsQEFSQ0hALCR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfSxnJyBcCisgICAgICAgICAgICAgICAtZSAncyxAU1RBR0lOR0RJUkAsJHtTVEFHSU5HX0RJUl9IT1NUfSxnJyBcCisgICAgICAgICAgICAgICAtZSAicyxASU5DTFVERURJUkAsJHtTVEFHSU5HX0lOQ0RJUn0sZyIgXAorICAgICAgICAgICAgICAgLWUgInMsQExJQkRJUkAsJHtsaWJkaXJ9LGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLEBCQVNFTElCRElSQCwke2Jhc2VfbGliZGlyfSxnIiBcCisgICAgICAgICAgICAgICAtZSAicyxARVhFQ1BSRUZJWEAsJHtleGVjX3ByZWZpeH0sZyIgXAorICAgICAgICAgICAgICAgLWUgJ3MsQFVTUkJJTkAsJHtiaW5kaXJ9LGcnIFwKKyAgICAgICAgICAgIGNvbmZpZy5zaC0ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30KKworCWNhc2UgIiR7VEFSR0VUX0FSQ0h9IiBpbgorCQl4ODZfNjQgfCBwb3dlcnBjIHwgczM5MCkKKwkJCXNlZCAtaSAtZSAicyxcKG5lZWRfdmFfY29weT1cKSd1bmRlZicsXDEnZGVmaW5lJyxnIiBcCisJCQkJY29uZmlnLnNoLSR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfQorCQkJOzsKKwkJYXJtKQorCQkJc2VkIC1pIC1lICJzLFwoZF91MzJhbGlnbj1cKSd1bmRlZicsXDEnZGVmaW5lJyxnIiBcCisJCQkJY29uZmlnLnNoLSR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfQorCQkJOzsKKwllc2FjCisgICAgICAgICMgVGhlc2UgYXJlIHN0cmV3biBhbGwgb3ZlciB0aGUgc291cmNlIHRyZWUKKyAgICAgICAgZm9yIGZvbyBpbiBgZ3JlcCAtSSAtLWV4Y2x1ZGU9IioucGF0Y2giIC0tZXhjbHVkZT0iKi5kaWZmIiAtLWV4Y2x1ZGU9IioucG9kIiAtLWV4Y2x1ZGU9IlJFQURNRSoiIC1tMSAiL3Vzci9pbmNsdWRlLy4qXC5oIiAke1N9LyogLXIgLWxgICR7U30vdXRpbHMvaDJ4cy5QTCA7IGRvCisgICAgICAgICAgICBlY2hvIEZpeGluZzogJGZvbworICAgICAgICAgICAgc2VkIC1lICdzfFwoWyAiXidcJydJXVwrXCkvdXNyL2luY2x1ZGUvfFwxJHtTVEFHSU5HX0lOQ0RJUn0vfGcnIC1pICRmb28KKyAgICAgICAgZG9uZQorCisgICAgICAgIHJtIC1mIGNvbmZpZworICAgICAgICBlY2hvICJBUkNIID0gJHtUQVJHRVRfQVJDSH0iID4gY29uZmlnCisgICAgICAgIGVjaG8gIk9TID0gJHtUQVJHRVRfT1N9IiA+PiBjb25maWcKK30KKworZG9fY29tcGlsZSgpIHsKKyAgICAgICAgIyBGaXggdG8gYXZvaWQgcmVjdXJzaXZlIHN1YnN0aXR1dGlvbiBvZiBwYXRoCisgICAgICAgIHNlZCAtaSAtZSAnc3woQGxpYnBhdGgsICIuKiJ8KEBsaWJwYXRoLCAiJHtTVEFHSU5HX0xJQkRJUn0ifGcnIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbQorCisgICAgICAgIGNkIENyb3NzCisgICAgICAgIG9lX3J1bm1ha2UgcGVybCBMRD0iJHtDQ0xEfSIKK30KKworZG9faW5zdGFsbCgpIHsKKwkjZXhwb3J0IGhvc3RwZXJsPSIke1NUQUdJTkdfQklORElSX05BVElWRX0vcGVybC1uYXRpdmUvcGVybCR7UFZ9IgorCW9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0KKyAgICAgICAgIyBBZGQgcGVybCBwb2ludGluZyBhdCBjdXJyZW50IHZlcnNpb24KKyAgICAgICAgbG4gLXNmIHBlcmwke1BWfSAke0R9JHtiaW5kaXJ9L3BlcmwKKworICAgICAgICBsbiAtc2YgcGVybCAke0R9LyR7bGliZGlyfS9wZXJsNQorCisgICAgICAgICMgUmVtb3ZlIHVud2FudGVkIGZpbGUgYW5kIGVtcHR5IGRpcmVjdG9yaWVzCisgICAgICAgIHJtIC1mICR7RH0vJHtsaWJkaXJ9L3BlcmwvJHtQVn0vLnBhY2tsaXN0CisJcm1kaXIgJHtEfS8ke2xpYmRpcn0vcGVybC9zaXRlX3BlcmwvJHtQVn0KKwlybWRpciAke0R9LyR7bGliZGlyfS9wZXJsL3NpdGVfcGVybAorCisgICAgICAgICMgRml4IHVwIHNoYXJlZCBsaWJyYXJ5CisgICAgICAgIG12ICR7RH0vJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ09SRS9saWJwZXJsLnNvICR7RH0vJHtsaWJkaXJ9L2xpYnBlcmwuc28uJHtQVn0KKyAgICAgICAgbG4gLXNmIGxpYnBlcmwuc28uJHtQVn0gJHtEfS8ke2xpYmRpcn0vbGlicGVybC5zby41CisgICAgICAgIGxuIC1zZiAuLi8uLi8uLi9saWJwZXJsLnNvLiR7UFZ9ICR7RH0vJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ09SRS9saWJwZXJsLnNvCisKKyAgICAgICAgIyB0YXJnZXQgY29uZmlnLCB1c2VkIGJ5IGNwYW4uYmJjbGFzcyB0byBleHRyYWN0IHZlcnNpb24gaW5mb3JtYXRpb24KKyAgICAgICAgaW5zdGFsbCBjb25maWcuc2ggJHtEfSR7bGliZGlyfS9wZXJsCisKKyAgICAgICAgbG4gLXMgQ29uZmlnX2hlYXZ5LnBsICR7RH0ke2xpYmRpcn0vcGVybC8ke1BWfS9Db25maWdfaGVhdnktdGFyZ2V0LnBsCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayAoKSB7CisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vcGVybCBcCisgICAgICAgICAgICBQRVJMNUxJQj0nJFBFUkw1TElCOiRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvJHtsaWJkaXJfbmF0aXZlc2RrfS9wZXJsOiRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvJHtsaWJkaXJfbmF0aXZlc2RrfS9wZXJsLyR7UFZ9OiRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvJHtsaWJkaXJfbmF0aXZlc2RrfS9wZXJsL3NpdGVfcGVybC8ke1BWfTokT0VDT1JFX05BVElWRV9TWVNST09ULyR7bGliZGlyX25hdGl2ZXNka30vcGVybC92ZW5kb3JfcGVybC8ke1BWfScKK30KKworUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTICs9ICJwZXJsX3BhY2thZ2VfcHJlcHJvY2VzcyIKKworcGVybF9wYWNrYWdlX3ByZXByb2Nlc3MgKCkgeworICAgICAgICAjIEZpeCB1cCBpbnN0YWxsZWQgY29uZmlndXJhdGlvbgorICAgICAgICBzZWQgLWkgLWUgInMsJHtEfSwsZyIgXAorICAgICAgICAgICAgICAgLWUgInMsLS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH0sLGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLC1pc3lzdGVtJHtTVEFHSU5HX0lOQ0RJUn0gLCxnIiBcCisgICAgICAgICAgICAgICAtZSAicywke1NUQUdJTkdfTElCRElSfSwke2xpYmRpcn0sZyIgXAorICAgICAgICAgICAgICAgLWUgInMsJHtTVEFHSU5HX0JJTkRJUn0sJHtiaW5kaXJ9LGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLCR7U1RBR0lOR19JTkNESVJ9LCR7aW5jbHVkZWRpcn0sZyIgXAorICAgICAgICAgICAgICAgLWUgInMsJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlLywke2JpbmRpcn0vLGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLCR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8sLGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLCR7U1RBR0lOR19CSU5ESVJfVE9PTENIQUlOfS8ke1RBUkdFVF9QUkVGSVh9LCR7YmluZGlyfSxnIiBcCisgICAgICAgICAgICAke1BLR0R9JHtiaW5kaXJ9L2gyeHMgXAorICAgICAgICAgICAgJHtQS0dEfSR7YmluZGlyfS9oMnBoIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2JpbmRpcn0vcG9kMm1hbiBcCisgICAgICAgICAgICAke1BLR0R9JHtiaW5kaXJ9L3BvZDJ0ZXh0IFwKKyAgICAgICAgICAgICR7UEtHRH0ke2JpbmRpcn0vcG9kMnVzYWdlIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2JpbmRpcn0vcG9kY2hlY2tlciBcCisgICAgICAgICAgICAke1BLR0R9JHtiaW5kaXJ9L3BvZHNlbGVjdCBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ09SRS9jb25maWcuaCBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ09SRS9wZXJsLmggXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUvcHAuaCBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ29uZmlnLnBtIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC8ke1BWfS9Db25maWcucG9kIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC8ke1BWfS9Db25maWdfaGVhdnkucGwgXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC8ke1BWfS9GaWxlQ2FjaGUucG0gXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L3BvZC8qLnBvZCBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvY29uZmlnLnNoCit9CisKK1BBQ0tBR0VTID0gInBlcmwtZGJnIHBlcmwgcGVybC1taXNjIHBlcmwtZGV2IHBlcmwtcG9kIHBlcmwtZG9jIHBlcmwtbGliIFwKKyAgICAgICAgICAgIHBlcmwtbW9kdWxlLWNwYW4gcGVybC1tb2R1bGUtY3BhbnBsdXMgcGVybC1tb2R1bGUtdW5pY29yZSIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9wZXJsICR7YmluZGlyfS9wZXJsJHtQVn0gXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ29uZmlnLnBtIFwKKyAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L3N0cmljdC5wbSBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS93YXJuaW5ncy5wbSBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS93YXJuaW5ncyBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS92YXJzLnBtIFwKKyAgICAgICAgICAgICAgIgorRklMRVNfJHtQTn1fYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgJHtiaW5kaXJ9L3BlcmwucmVhbCIKK1JQUk9WSURFU18ke1BOfSArPSAicGVybC1tb2R1bGUtc3RyaWN0IHBlcmwtbW9kdWxlLXZhcnMgcGVybC1tb2R1bGUtY29uZmlnIHBlcmwtbW9kdWxlLXdhcm5pbmdzIFwKKyAgICAgICAgICAgICAgICAgICAgcGVybC1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitGSUxFU18ke1BOfS1kZXYgPSAiJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ09SRSIKK0ZJTEVTXyR7UE59LWxpYiA9ICIke2xpYmRpcn0vbGlicGVybC5zbyogXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsNSBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvY29uZmlnLnNoIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9Db25maWdfaGVhdnkucGwgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0NvbmZpZ19oZWF2eS10YXJnZXQucGwiCitGSUxFU18ke1BOfS1wb2QgPSAiJHtsaWJkaXJ9L3BlcmwvJHtQVn0vcG9kIFwKKwkJICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vKi5wb2QgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9LyovKi5wb2QgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9LyovKi8qLnBvZCAiCitGSUxFU19wZXJsLW1pc2MgPSAiJHtiaW5kaXJ9LyoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9wZXJsLyR7UFZ9L2F1dG8vKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9hdXRvLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9hdXRvLyovKi8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS8qLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vKi8qLyovLmRlYnVnICIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke2xpYmRpcn0vcGVybC8ke1BWfS8qLyoudHh0IFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS8qLyovKi50eHQgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L2F1dG8vWFMvVHlwZW1hcCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQi9hc3NlbWJsZSBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQi9jY19oYXJuZXNzIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9CL2Rpc2Fzc2VtYmxlIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9CL21ha2VsaWJsaW5rcyBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ0dJL2VnIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9DUEFOL1BBVVNFMjAwMy5wdWIgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0NQQU4vU0lHTkFUVVJFIFwKKwkJICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ1BBTlBMVVMvU2hlbGwvRGVmYXVsdC9QbHVnaW5zL0hPV1RPLnBvZCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vRW5jb2RlL2VuY29kZS5oIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy9NQU5JRkVTVC5TS0lQIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy9OT1RFUyBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMvUEFUQ0hJTkcgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0V4dFV0aWxzL3R5cGVtYXAgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0V4dFV0aWxzL3hzdWJwcCBcCisJCSAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0V4dFV0aWxzL0NoYW5nZXNfRVUtSW5zdGFsbCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vTmV0LyouZWcgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L3VuaWNvcmUvbWt0YWJsZXMgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L3VuaWNvcmUvbWt0YWJsZXMubHN0IFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS91bmljb3JlL3ZlcnNpb24gIgorCitGSUxFU19wZXJsLW1vZHVsZS1jcGFuICs9ICIke2xpYmRpcn0vcGVybC8ke1BWfS9DUEFOIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0NQQU4ucG0iCitGSUxFU19wZXJsLW1vZHVsZS1jcGFucGx1cyArPSAiJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ1BBTlBMVVMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0NQQU5QTFVTLnBtIgorRklMRVNfcGVybC1tb2R1bGUtdW5pY29yZSArPSAiJHtsaWJkaXJ9L3BlcmwvJHtQVn0vdW5pY29yZSIKKworIyBDcmVhdGUgYSBwZXJsLW1vZHVsZXMgcGFja2FnZSByZWNvbW1lbmRpbmcgYWxsIHRoZSBvdGhlciBwZXJsCisjIHBhY2thZ2VzIChhY3R1YWxseSB0aGUgbm9uIG1vZHVsZXMgcGFja2FnZXMgYW5kIG5vdCBjcmVhdGVkIHRvbykKK0FMTE9XX0VNUFRZX3BlcmwtbW9kdWxlcyA9ICIxIgorUEFDS0FHRVNfYXBwZW5kID0gIiBwZXJsLW1vZHVsZXMgIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9wZXJsLyR7UFZ9JykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWJkaXIsICdhdXRvLyhbXi5dKikvW14vXSpcLihzb3xsZHxpeHxhbCknLCAncGVybC1tb2R1bGUtJXMnLCAncGVybCBtb2R1bGUgJXMnLCByZWN1cnNpdmU9VHJ1ZSwgbWF0Y2hfcGF0aD1UcnVlLCBwcmVwZW5kPUZhbHNlKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpYmRpciwgJ01vZHVsZS8oW15cL10qKVwucG0nLCAncGVybC1tb2R1bGUtJXMnLCAncGVybCBtb2R1bGUgJXMnLCByZWN1cnNpdmU9VHJ1ZSwgYWxsb3dfZGlycz1GYWxzZSwgbWF0Y2hfcGF0aD1UcnVlLCBwcmVwZW5kPUZhbHNlKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpYmRpciwgJ01vZHVsZS8oW15cL10qKS8uKicsICdwZXJsLW1vZHVsZS0lcycsICdwZXJsIG1vZHVsZSAlcycsIHJlY3Vyc2l2ZT1UcnVlLCBhbGxvd19kaXJzPUZhbHNlLCBtYXRjaF9wYXRoPVRydWUsIHByZXBlbmQ9RmFsc2UpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgbGliZGlyLCAnKF4oPyEoQ1BBTlwvfENQQU5QTFVTXC98TW9kdWxlXC98dW5pY29yZVwvfGF1dG9cLylbXlwvXSkuKilcLihwbXxwbHxlMngpJywgJ3BlcmwtbW9kdWxlLSVzJywgJ3BlcmwgbW9kdWxlICVzJywgcmVjdXJzaXZlPVRydWUsIGFsbG93X2RpcnM9RmFsc2UsIG1hdGNoX3BhdGg9VHJ1ZSwgcHJlcGVuZD1GYWxzZSkKKworICAgICMgcGVybC1tb2R1bGVzIHNob3VsZCByZWNvbW1lbmQgZXZlcnkgcGVybCBtb2R1bGUsIGFuZCBvbmx5IHRoZQorICAgICMgbW9kdWxlcy4gRG9uJ3QgYXR0ZW1wdCB0byB1c2UgdGhlIHJlc3VsdCBvZiBkb19zcGxpdF9wYWNrYWdlcygpIGFzIHNvbWUKKyAgICAjIG1vZHVsZXMgYXJlIG1hbnVhbGx5IHNwbGl0IChlZy4gcGVybC1tb2R1bGUtdW5pY29yZSkuCisgICAgcGFja2FnZXMgPSBmaWx0ZXIobGFtYmRhIHA6ICdwZXJsLW1vZHVsZS0nIGluIHAsIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkpCisgICAgZC5zZXRWYXIoIlJSRUNPTU1FTkRTXyR7UE59LW1vZHVsZXMiLCAnICcuam9pbihwYWNrYWdlcykpCit9CisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5wZXJsLW1vZHVsZS0uKiIKK1BBQ0tBR0VTX0RZTkFNSUNfY2xhc3MtbmF0aXZlc2RrICs9ICJebmF0aXZlc2RrLXBlcmwtbW9kdWxlLS4qIgorCitSUFJPVklERVNfcGVybC1saWIgPSAicGVybC1saWIiCisKK3JlcXVpcmUgcGVybC1yZGVwZW5kc18ke1BWfS5pbmMKK3JlcXVpcmUgcGVybC1wdGVzdC5pbmMKKworU1NUQVRFX1NDQU5fRklMRVMgKz0gIioucG0gKi5wb2QgKi5oICoucGwgKi5zaCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YWI1YzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnLmluYwpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIkhlbHBlciB0b29sIHVzZWQgd2hlbiBjb21waWxpbmciCitERVNDUklQVElPTiA9ICJwa2ctY29uZmlnIGlzIGEgaGVscGVyIHRvb2wgdXNlZCB3aGVuIGNvbXBpbGluZyBhcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcy4gSXQgaGVscHMgZGV0ZXJtaW5lZCBcCit0aGUgY29ycmVjdCBjb21waWxlci9saW5rIG9wdGlvbnMuICBJdCBpcyBhbHNvIGxhbmd1YWdlLWFnbm9zdGljLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9wa2ctY29uZmlnLmZyZWVkZXNrdG9wLm9yZy93aWtpLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2J1Z2xpc3QuY2dpP3Byb2R1Y3Q9cGtnLWNvbmZpZyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworREVQRU5EUyA9ICJnbGliLTIuMCIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKK0RFUEVORFNfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworU1JDUkVWID0gIjQwMzQyZGQwZWFkMDVkNDU3YTJhNGU2OTJjZjg2NWY1MDAzM2E3MDkiCitQViA9ICIwLjI4K2dpdCR7U1JDUFZ9IgorU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9wa2ctY29uZmlnIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LWludGVybmFsLWdsaWIiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0td2l0aC1pbnRlcm5hbC1nbGliIgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZXNkayA9ICItLXdpdGgtaW50ZXJuYWwtZ2xpYiIKKworYWNwYXRocyA9ICItSSAuIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKKyMgU2V0IGFuIGVtcHR5IGRldiBwYWNrYWdlIHRvIGVuc3VyZSB0aGUgYmFzZSBQTiBwYWNrYWdlIGdldHMKKyMgdGhlIHBrZy5tNCBtYWNyb3MsIHBrZ2NvbmZpZyBkb2VzIG5vdCBkZWxpdmVyIGFueSBvdGhlciAtZGV2CisjIGZpbGVzLgorRklMRVNfJHtQTn0tZGV2ID0gIiIKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FjbG9jYWwvcGtnLm00IgorCisjIFdoZW4gdXNpbmcgdGhlIFJQTSBnZW5lcmF0ZWQgYXV0b21hdGljIHBhY2thZ2UgZGVwZW5kZW5jaWVzLCBzb21lIHBhY2thZ2VzCisjIHdpbGwgZW5kIHVwIHJlcXVpcmluZyAncGtnY29uZmlnKHBrZy1jb25maWcpJy4gIEFsbG93IHRoaXMgYmVoYXZpb3IgYnkKKyMgc3BlY2lmeWluZyBhbiBhcHByb3ByaWF0ZSBwcm92aWRlLgorUlBST1ZJREVTXyR7UE59ICs9ICJwa2djb25maWcocGtnLWNvbmZpZykiCisKKyMgSW5zdGFsbCBhIHBrZy1jb25maWctbmF0aXZlIHdyYXBwZXIgdGhhdCB3aWxsIHVzZSB0aGUgbmF0aXZlIHN5c3Jvb3QgaW5zdGVhZAorIyBvZiB0aGUgTUFDSElORSBzeXNyb290LCBmb3IgdXNpbmcgcGtnLWNvbmZpZyB3aGVuIGJ1aWxkaW5nIG5hdGl2ZSB0b29scy4KK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisgICAgc2VkIC1lICJzfEBQQVRIX05BVElWRUB8JHtQS0dfQ09ORklHX1BBVEh9fCIgXAorICAgICAgICAtZSAic3xATElCRElSX05BVElWRUB8JHtQS0dfQ09ORklHX0xJQkRJUn18IiBcCisgICAgICAgIDwgJHtXT1JLRElSfS9wa2ctY29uZmlnLW5hdGl2ZS5pbiA+ICR7Qn0vcGtnLWNvbmZpZy1uYXRpdmUKKyAgICBpbnN0YWxsIC1tNzU1ICR7Qn0vcGtnLWNvbmZpZy1uYXRpdmUgJHtEfSR7YmluZGlyfS9wa2ctY29uZmlnLW5hdGl2ZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy9maXgtZ2xpYi1jb25maWd1cmUtbGlidG9vbC11c2FnZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcvZml4LWdsaWItY29uZmlndXJlLWxpYnRvb2wtdXNhZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjNjI0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcvZml4LWdsaWItY29uZmlndXJlLWxpYnRvb2wtdXNhZ2UucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKKworSW5kZXg6IHBrZy1jb25maWctMC4yOC9nbGliL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBrZy1jb25maWctMC4yOC5vcmlnL2dsaWIvY29uZmlndXJlLmFjCisrKysgcGtnLWNvbmZpZy0wLjI4L2dsaWIvY29uZmlndXJlLmFjCitAQCAtMTQzOCw3ICsxNDM4LDcgQEAgaWYgdGVzdCB4IiRnbGliX25hdGl2ZV93aW4zMiIgPSB4eWVzOyB0aAorICAgR19NT0RVTEVfTERGTEFHUz0KKyBlbHNlCisgICBleHBvcnQgU0VECistICBHX01PRFVMRV9MREZMQUdTPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisrICBHX01PRFVMRV9MREZMQUdTPWAoLi8ke2hvc3RfYWxpYXN9LWxpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKyBmaQorIGRubCBHX01PRFVMRV9JTVBMPSBkb24ndCByZXNldCwgc28gY21kLWxpbmUgY2FuIG92ZXJyaWRlCisgR19NT0RVTEVfTkVFRF9VU0NPUkU9MAorQEAgLTE1MDMsMTMgKzE1MDMsMTMgQEAgaWYgdGVzdCAiJEdfTU9EVUxFX0lNUEwiID0gIkdfTU9EVUxFX0lNUAorIAlMREZMQUdTPSIkTERGTEFHUyAkR19NT0RVTEVfTERGTEFHUyIKKyBkbmwgKioqIGNoZWNrIGZvciBPU0YxLzUuMCBSVExEX0dMT0JBTCBicm9rZW5uZXNzCisgCWVjaG8gInZvaWQgZ2xpYl9wbHVnaW5fdGVzdCh2b2lkKSB7IH0iID4gcGx1Z2luLmMKKy0JJHtTSEVMTH0gLi9saWJ0b29sIC0tbW9kZT1jb21waWxlIC0tdGFnPUNDICR7Q0N9ICR7Q0ZMQUdTfSBcCisrCSR7U0hFTEx9IC4vJHtob3N0X2FsaWFzfS1saWJ0b29sIC0tbW9kZT1jb21waWxlIC0tdGFnPUNDICR7Q0N9ICR7Q0ZMQUdTfSBcCisgCQkke0NQUEZMQUdTfSAtYyAtbyBwbHVnaW4ubG8gcGx1Z2luLmMgPi9kZXYvbnVsbCAyPiYxCistCSR7U0hFTEx9IC4vbGlidG9vbCAtLW1vZGU9bGluayAtLXRhZz1DQyAke0NDfSAke0NGTEFHU30gXAorKwkke1NIRUxMfSAuLyR7aG9zdF9hbGlhc30tbGlidG9vbCAtLW1vZGU9bGluayAtLXRhZz1DQyAke0NDfSAke0NGTEFHU30gXAorIAkJJHtMREZMQUdTfSAtbW9kdWxlIC1vIHBsdWdpbi5sYSAtZXhwb3J0LWR5bmFtaWMgXAorIAkJLXNocmV4dCAiLm8iIC1hdm9pZC12ZXJzaW9uIHBsdWdpbi5sbyBcCisgCQktcnBhdGggL2RvbnQvY2FyZSA+L2Rldi9udWxsIDI+JjEKKy0JZXZhbCBgLi9saWJ0b29sIC0tY29uZmlnIHwgZ3JlcCBeb2JqZGlyYAorKwlldmFsIGAuLyR7aG9zdF9hbGlhc30tbGlidG9vbCAtLWNvbmZpZyB8IGdyZXAgXm9iamRpcmAKKyAJQUNfQ0FDSEVfQ0hFQ0soW2ZvciBSVExEX0dMT0JBTCBicm9rZW5uZXNzXSwKKyAJCWdsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW4sWworIAkJQUNfVFJZX1JVTihbCitAQCAtMTU4Miw3ICsxNTgyLDcgQEAgZmkKKyAKKyBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHRoZSBzdWZmaXggb2YgbW9kdWxlIHNoYXJlZCBsaWJyYXJpZXMpCisgZXhwb3J0IFNFRAorLXNocmV4dF9jbWRzPWAuL2xpYnRvb2wgLS1jb25maWcgfCBncmVwICdec2hyZXh0X2NtZHM9J2AKKytzaHJleHRfY21kcz1gLi8ke2hvc3RfYWxpYXN9LWxpYnRvb2wgLS1jb25maWcgfCBncmVwICdec2hyZXh0X2NtZHM9J2AKKyBldmFsICRzaHJleHRfY21kcworIG1vZHVsZT15ZXMgZXZhbCBzdGRfc2hyZXh0PSRzaHJleHRfY21kcworICMgY2hvcCB0aGUgaW5pdGlhbCBkb3QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcvcGtnLWNvbmZpZy1uYXRpdmUuaW4gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnL3BrZy1jb25maWctbmF0aXZlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNDRiYjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnL3BrZy1jb25maWctbmF0aXZlLmluCkBAIC0wLDAgKzEsNyBAQAorIyEgL2Jpbi9zaAorCitQS0dfQ09ORklHX1BBVEg9IkBQQVRIX05BVElWRUAiCitQS0dfQ09ORklHX0xJQkRJUj0iQExJQkRJUl9OQVRJVkVAIgordW5zZXQgUEtHX0NPTkZJR19TWVNST09UX0RJUgorCitwa2ctY29uZmlnICIkQCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWdfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZ19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhNTExYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWdfZ2l0LmJiCkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZSBwa2djb25maWcuaW5jCisKK1NSQ19VUkkgKz0gIiBcCisgICAgICAgICAgICBmaWxlOi8vcGtnLWNvbmZpZy1uYXRpdmUuaW4gXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1nbGliLWNvbmZpZ3VyZS1saWJ0b29sLXVzYWdlLnBhdGNoIFwKKyAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcG9zdGluc3QtaW50ZXJjZXB0L25hdGl2ZXNkay1wb3N0aW5zdC1pbnRlcmNlcHRfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcG9zdGluc3QtaW50ZXJjZXB0L25hdGl2ZXNkay1wb3N0aW5zdC1pbnRlcmNlcHRfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYzQ1YzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wb3N0aW5zdC1pbnRlcmNlcHQvbmF0aXZlc2RrLXBvc3RpbnN0LWludGVyY2VwdF8xLjAuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJQb3N0aW5zdGFsbCBzY3JpcHRsZXRzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworRklMRVNfJHtQTn1fYXBwZW5kID0gIiAke2RhdGFkaXJ9L3Bvc3RpbnN0LWludGVyY2VwdHMvKiIKKworZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vcG9zdGluc3QtaW50ZXJjZXB0cworCWluc3RhbGwgLW0gNzU1ICR7Q09SRUJBU0V9L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy9wb3N0aW5zdF9pbnRlcmNlcHQgJHtEfSR7ZGF0YWRpcn0vcG9zdGluc3QtaW50ZXJjZXB0cy8KKwlpbnN0YWxsIC1tIDc1NSAke0NPUkVCQVNFfS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvdXBkYXRlX2ZvbnRfY2FjaGUgJHtEfSR7ZGF0YWRpcn0vcG9zdGluc3QtaW50ZXJjZXB0cy8KKwlpbnN0YWxsIC1tIDc1NSAke0NPUkVCQVNFfS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvdXBkYXRlX2ljb25fY2FjaGUgJHtEfSR7ZGF0YWRpcn0vcG9zdGluc3QtaW50ZXJjZXB0cy8KKwlpbnN0YWxsIC1tIDc1NSAke0NPUkVCQVNFfS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvdXBkYXRlX3BpeGJ1Zl9jYWNoZSAke0R9JHtkYXRhZGlyfS9wb3N0aW5zdC1pbnRlcmNlcHRzLworfQorCitpbmhlcml0IG5hdGl2ZXNkaworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9tYWNyb3MucHJlbGluayBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9tYWNyb3MucHJlbGluawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjE2Njk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL21hY3Jvcy5wcmVsaW5rCkBAIC0wLDAgKzEsNSBAQAorIyBycG0tNC4xIHZlcmlmaWVzIHByZWxpbmtlZCBsaWJyYXJpZXMgdXNpbmcgYSBwcmVsaW5rIHVuZG8gaGVscGVyLgorIyAgICAgICBOb3RlOiBUaGUgMm5kIHRva2VuIGlzIHVzZWQgYXMgYXJndlswXSBhbmQgImxpYnJhcnkiIGlzIGEKKyMgICAgICAgcGxhY2Vob2xkZXIgdGhhdCB3aWxsIGJlIGRlbGV0ZWQgYW5kIHJlcGxhY2VkIHdpdGggdGhlIGFwcHJvcHJpYXRlCisjICAgICAgIGxpYnJhcnkgZmlsZSBwYXRoLgorJV9fcHJlbGlua191bmRvX2NtZCAgICAgL3Vzci9zYmluL3ByZWxpbmsgcHJlbGluayAteSBsaWJyYXJ5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvcHJlbGluay5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL3ByZWxpbmsuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjJmMjNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL3ByZWxpbmsuY29uZgpAQCAtMCwwICsxLDE4IEBACisjIFRoaXMgY29uZmlnIGZpbGUgY29udGFpbnMgYSBsaXN0IG9mIGRpcmVjdG9yaWVzIGJvdGggd2l0aCBiaW5hcmllcworIyBhbmQgbGlicmFyaWVzIHByZWxpbmsgc2hvdWxkIGNvbnNpZGVyIGJ5IGRlZmF1bHQuCisjIElmIGEgZGlyZWN0b3J5IG5hbWUgaXMgcHJlZml4ZWQgd2l0aCBgLWwgJywgdGhlIGRpcmVjdG9yeSBoaWVyYXJjaHkKKyMgd2lsbCBiZSB3YWxrZWQgYXMgbG9uZyBhcyBmaWxlc3lzdGVtIGJvdW5kYXJpZXMgYXJlIG5vdCBjcm9zc2VkLgorIyBJZiBhIGRpcmVjdG9yeSBuYW1lIGlzIHByZWZpeGVkIHdpdGggYC1oICcsIHN5bWJvbGljIGxpbmtzIGluIGEKKyMgZGlyZWN0b3J5IGhpZXJhcmNoeSBhcmUgZm9sbG93ZWQuCistbCAvdXNyL2xvY2FsL3NiaW4KKy1sIC9zYmluCistbCAvdXNyL3NiaW4KKy1sIC91c3IvbG9jYWwvYmluCistbCAvYmluCistbCAvdXNyL2JpbgorLWwgL3Vzci9YMTFSNi9iaW4KKy1sIC91c3IvZ2FtZXMKKy1sIC91c3IvbG9jYWwvbGlieywzMiw2NCx4MzJ9CistbCAvbGlieywzMiw2NCx4MzJ9CistbCAvdXNyL2xpYnssMzIsNjQseDMyfQorLWwgL3Vzci9YMTFSNi9saWJ7LDMyLDY0LHgzMn0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9wcmVsaW5rLmNyb24uZGFpbHkgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvcHJlbGluay5jcm9uLmRhaWx5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiM2MwNzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvcHJlbGluay5jcm9uLmRhaWx5CkBAIC0wLDAgKzEsNDAgQEAKKyMhL2Jpbi9zaAorCisuIC9ldGMvZGVmYXVsdC9wcmVsaW5rCisKK3JlbmljZSArMTkgLXAgJCQgPi9kZXYvbnVsbCAyPiYxCisKK2lmIFsgIiRQUkVMSU5LSU5HIiAhPSB5ZXMgXTsgdGhlbgorICBpZiBbIC1mIC9ldGMvcHJlbGluay5jYWNoZSBdOyB0aGVuCisgICAgZWNobyAvdXNyL3NiaW4vcHJlbGluayAtdWF2ID4gL3Zhci9sb2cvcHJlbGluay5sb2cKKyAgICAvdXNyL3NiaW4vcHJlbGluayAtdWF2ID4+IC92YXIvbG9nL3ByZWxpbmsubG9nIDI+JjEKKyAgICBybSAtZiAvZXRjL3ByZWxpbmsuY2FjaGUKKyAgICAjIFJlc3RhcnQgaW5pdCBpZiBuZWVkZWQKKyAgICBbIC1uICIkKGZpbmQgYGxkZCAvc2Jpbi9pbml0IHwgYXdrICd7IHByaW50ICQzIH0nYCAvc2Jpbi9pbml0IC1jdGltZSAtMSAyPi9kZXYvbnVsbCApIiBdICYmIC9zYmluL3RlbGluaXQgdQorICBmaQorICBleGl0IDAKK2ZpCisKK2lmIFsgISAtZiAvZXRjL3ByZWxpbmsuY2FjaGUgLW8gLWYgL3Zhci9saWIvbWlzYy9wcmVsaW5rLmZvcmNlIF0gXAorICAgfHwgZ3JlcCAtcSAnXnByZWxpbmstRUxGMC5bMC0yXScgL2V0Yy9wcmVsaW5rLmNhY2hlOyB0aGVuCisgICMgSWYgY2FjaGUgZG9lcyBub3QgZXhpc3Qgb3IgaXMgZnJvbSBvbGRlciBwcmVsaW5rIHZlcnNpb25zIG9yCisgICMgaWYgd2Ugd2VyZSBhc2tlZCB0byBleHBsaWNpdGVseSwgZm9yY2UgZnVsbCBwcmVsaW5raW5nCisgIHJtIC1mIC9ldGMvcHJlbGluay5jYWNoZSAvdmFyL2xpYi9taXNjL3ByZWxpbmsuZm9yY2UKKyAgUFJFTElOS19PUFRTPSIkUFJFTElOS19PUFRTIC1mIgorICBkYXRlID4gL3Zhci9saWIvbWlzYy9wcmVsaW5rLmZ1bGwKK2VsaWYgWyAtbiAiJFBSRUxJTktfRlVMTF9USU1FX0lOVEVSVkFMIiBcCisgICAgICAgLWEgImBmaW5kIC92YXIvbGliL21pc2MvcHJlbGluay5mdWxsIC1tdGltZSAtJHtQUkVMSU5LX0ZVTExfVElNRV9JTlRFUlZBTH0gMj4vZGV2L251bGxgIiBcCisJICA9IC92YXIvbGliL21pc2MvcHJlbGluay5mdWxsIF07IHRoZW4KKyAgIyBJZiBwcmVsaW5rIHdpdGhvdXQgLXEgaGFzIGJlZW4gcnVuIGluIHRoZSBsYXN0CisgICMgUFJFTElOS19GVUxMX1RJTUVfSU5URVJWQUwgZGF5cywganVzdCB1c2UgcXVpY2sgbW9kZQorICBQUkVMSU5LX09QVFM9IiRQUkVMSU5LX09QVFMgLXEiCitlbHNlCisgIGRhdGUgPiAvdmFyL2xpYi9taXNjL3ByZWxpbmsuZnVsbAorZmkKKworZWNobyAvdXNyL3NiaW4vcHJlbGluayAtYXYgJFBSRUxJTktfT1BUUyA+IC92YXIvbG9nL3ByZWxpbmsubG9nCisvdXNyL3NiaW4vcHJlbGluayAtYXYgJFBSRUxJTktfT1BUUyA+PiAvdmFyL2xvZy9wcmVsaW5rLmxvZyAyPiYxCisjIFJlc3RhcnQgaW5pdCBpZiBuZWVkZWQKK1sgLW4gIiQoZmluZCBgbGRkIC9zYmluL2luaXQgfCBhd2sgJ3sgcHJpbnQgJDMgfSdgIC9zYmluL2luaXQgLWN0aW1lIC0xIDI+L2Rldi9udWxsICkiIF0gJiYgL3NiaW4vdGVsaW5pdCB1CisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL3ByZWxpbmsuZGVmYXVsdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9wcmVsaW5rLmRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4MDJmOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9wcmVsaW5rLmRlZmF1bHQKQEAgLTAsMCArMSwyMiBAQAorIyBTZXQgdGhpcyB0byBubyB0byBkaXNhYmxlIHByZWxpbmtpbmcgYWx0b2dldGhlcgorIyBvciB0byB5ZXMgdG8gZW5hYmxlIGl0LgorIyAoaWYgeW91IGNoYW5nZSB0aGlzIGZyb20geWVzIHRvIG5vIHByZWxpbmsgLXVhCisjIHdpbGwgYmUgcnVuIG5leHQgbmlnaHQgdG8gdW5kbyBwcmVsaW5raW5nKQorUFJFTElOS0lORz15ZXMKKworIyBPcHRpb25zIHRvIHBhc3MgdG8gcHJlbGluaworIyAtbQlUcnkgdG8gY29uc2VydmUgdmlydHVhbCBtZW1vcnkgYnkgYWxsb3dpbmcgb3ZlcmxhcHBpbmcKKyMJYXNzaWduZWQgdmlydHVhbCBtZW1vcnkgc2xvdHMgZm9yIGxpYnJhcmllcyB3aGljaAorIwluZXZlciBhcHBlYXIgdG9nZXRoZXIgaW4gb25lIGJpbmFyeQorIyAtUglSYW5kb21pemUgdmlydHVhbCBtZW1vcnkgc2xvdCBhc3NpZ25tZW50cyBmb3IgbGlicmFyaWVzLgorIwlUaGlzIG1ha2VzIGl0IHNsaWdodGx5IGhhcmRlciBmb3IgdmFyaW91cyBidWZmZXIgb3ZlcmZsb3cKKyMJYXR0YWNrcywgc2luY2UgbGlicmFyeSBhZGRyZXNzZXMgd2lsbCBiZSBkaWZmZXJlbnQgb24gZWFjaAorIwlob3N0IHVzaW5nIC1SLgorUFJFTElOS19PUFRTPS1tUgorCisjIEhvdyBvZnRlbiBzaG91bGQgZnVsbCBwcmVsaW5rIGJlIHJ1biAoaW4gZGF5cykKKyMgTm9ybWFsbHksIHByZWxpbmsgd2lsbCBiZSBydW4gaW4gcXVpY2sgbW9kZSwgZXZlcnkKKyMgJFBSRUxJTktfRlVMTF9USU1FX0lOVEVSVkFMIGRheXMgaXQgd2lsbCBiZSBydW4KKyMgaW4gbm9ybWFsIG1vZGUuICBDb21tZW50IHRoaXMgbGluZSBvdXQgaWYgcHJlbGluayAKKyMgc2hvdWxkIGJlIHJ1biBpbiBub3JtYWwgbW9kZSBhbHdheXMuCitQUkVMSU5LX0ZVTExfVElNRV9JTlRFUlZBTD0xNApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGlua19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZmNjkxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGlua19naXQuYmIKQEAgLTAsMCArMSw4MSBAQAorU0VDVElPTiA9ICJkZXZlbCIKKyMgTmVlZCBiaW51dGlscyBmb3IgbGliaWJlcnR5LmEKKyMgV291bGQgbmVlZCB0cmFuc2ZpZy1uYXRpdmUgZm9yIGRvY3VtZW50YXRpb24gaWYgaXQgd2Fzbid0IGRpc2FibGVkCitERVBFTkRTID0gImVsZnV0aWxzIGJpbnV0aWxzIgorU1VNTUFSWSA9ICJBbiBFTEYgcHJlbGlua2luZyB1dGlsaXR5IgorREVTQ1JJUFRJT04gPSAiVGhlIHByZWxpbmsgcGFja2FnZSBjb250YWlucyBhIHV0aWxpdHkgd2hpY2ggbW9kaWZpZXMgRUxGIHNoYXJlZCBsaWJyYXJpZXMgXAorYW5kIGV4ZWN1dGFibGVzLCBzbyB0aGF0IGZhciBmZXdlciByZWxvY2F0aW9ucyBuZWVkIHRvIGJlIHJlc29sdmVkIGF0IFwKK3J1bnRpbWUgYW5kIHRodXMgcHJvZ3JhbXMgY29tZSB1cCBmYXN0ZXIuIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM5M2MwNTUwYmQzMTczZjQ1MDRiMmNiZDg5OTFlNTBiIgorU1JDUkVWID0gIjQwMzI3ZmI5OTY1NGU5NmRiNmVmMTVlMmYyZDVlZjE0MGFjM2U5OTgiCitQViA9ICIxLjArZ2l0JHtTUkNQVn0iCisKKyMKKyMgVGhlIGNyb24gc2NyaXB0IGF0dGVtcHRzIHRvIHJlLXByZWxpbmsgdGhlIHN5c3RlbSBkYWlseSAtLSBvbgorIyBzeXN0ZW1zIHdoZXJlIHVzZXJzIGFyZSBhZGRpbmcgYXBwbGljYXRpb25zLCB0aGlzIG1pZ2h0IGJlIHJlYXNvbmFibGUKKyMgYnV0IGZvciBlbWJlZGRlZCwgd2Ugc2hvdWxkIGJlIHJlLXJ1bm5pbmcgcHJlbGluayAtYSBhZnRlciBhbiB1cGRhdGUuCisjCisjIERlZmF1bHQgaXMgcHJlbGlua2luZyBpcyBlbmFibGVkLgorIworU1VNTUFSWV8ke1BOfS1jcm9uID0gIkNyb24gc2NyaXB0cyB0byBjb250cm9sIGF1dG9tYXRpYyBwcmVsaW5raW5nIgorREVTQ1JJUFRJT05fJHtQTn0tY3JvbiA9ICJDcm9uIHNjcmlwdHMgdG8gY29udHJvbCBhdXRvbWF0aWMgcHJlbGlua2luZy4gIFwKK1NlZTogJHtzeXNjb25mZGlyfS9jcm9uLmRhaWx5L3ByZWxpbmsgZm9yIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uIgorCitGSUxFU18ke1BOfS1jcm9uID0gIiR7c3lzY29uZmRpcn0vY3Jvbi5kYWlseSAke3N5c2NvbmZkaXJ9L2RlZmF1bHQiCisKK1BBQ0tBR0VTID0rICIke1BOfS1jcm9uIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3ByZWxpbmstY3Jvc3MuZ2l0O2JyYW5jaD1jcm9zc19wcmVsaW5rIFwKKyAgICAgICAgICAgZmlsZTovL3ByZWxpbmsuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9wcmVsaW5rLmNyb24uZGFpbHkgXAorICAgICAgICAgICBmaWxlOi8vcHJlbGluay5kZWZhdWx0IFwKKwkgICBmaWxlOi8vbWFjcm9zLnByZWxpbmsiCisKK1RBUkdFVF9PU19PUklHIDo9ICIke1RBUkdFVF9PU30iCitPVkVSUklERVNfYXBwZW5kID0gIjoke1RBUkdFVF9PU19PUklHfSIKKworUyA9ICIke1dPUktESVJ9L2dpdC90cnVuayIKKworaW5oZXJpdCBhdXRvdG9vbHMgCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXNlbGludXggLS13aXRoLXBrZ3ZlcnNpb249JHtQVn0tJHtQUn0gXAorCS0td2l0aC1idWd1cmw9aHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICAgICAgICMgRGlzYWJsZSBkb2N1bWVudGF0aW9uIQorICAgICAgICBlY2hvICJhbGw6IiA+ICR7U30vZG9jL01ha2VmaWxlLmFtCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdCAke0R9JHtzeXNjb25mZGlyfS9ycG0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wcmVsaW5rLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcHJlbGluay5jcm9uLmRhaWx5ICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkvcHJlbGluaworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3ByZWxpbmsuZGVmYXVsdCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ByZWxpbmsKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9tYWNyb3MucHJlbGluayAke0R9JHtzeXNjb25mZGlyfS9ycG0vbWFjcm9zLnByZWxpbmsKK30KKworIyBJZiB3ZSdyZSB1c2luZyBpbWFnZS1wcmVsaW5rLCB3ZSB3YW50IHRvIHNraXAgdGhpcyBvbiB0aGUgaG9zdCBzaWRlCisjIGJ1dCBzdGlsbCBkbyBpdCBpZiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQgb24gdGhlIHRhcmdldC4uLgorcGtnX3Bvc3RpbnN0X3ByZWxpbmsoKSB7CisjIS9iaW4vc2gKKworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorICAke0BiYi51dGlscy5jb250YWlucygnVVNFUl9DTEFTU0VTJywgJ2ltYWdlLXByZWxpbmsnLCAnZXhpdCAwJywgJ2V4aXQgMScsIGQpfQorZmkKKworcHJlbGluayAtYQorfQorCitwa2dfcHJlcm1fcHJlbGluaygpIHsKKyMhL2Jpbi9zaAorCitpZiBbICJ4JEQiICE9ICJ4IiBdOyB0aGVuCisgIGV4aXQgMQorZmkKKworcHJlbGluayAtYXUKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2ZhbGxiYWNrLWdyb3VwIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2ZhbGxiYWNrLWdyb3VwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYmY3MzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stZ3JvdXAKQEAgLTAsMCArMSwyIEBACityb290Oio6MDoKK21haWw6Kjo4OgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2ZhbGxiYWNrLXBhc3N3ZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9mYWxsYmFjay1wYXNzd2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE0NThkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9mYWxsYmFjay1wYXNzd2QKQEAgLTAsMCArMSBAQAorcm9vdDo6MDowOnJvb3Q6L2hvbWUvcm9vdDovYmluL3NoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMTIyNTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvLmluYwpAQCAtMCwwICsxLDEzNSBAQAorIyBOb3RlOiBEdWUgdG8gdGhlIGJpdGJha2Ugd3JhcHBlciBzY3JpcHQsIG1ha2luZyBjaGFuZ2VzIHRvIHBzZXVkbyBjYW4gYmUKKyMgZGlmZmljdWx0LiAgVG8gd29yayBhcm91bmQgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgd3JhcHBlciB1c2U6CisjIEJCRkVUQ0gyPVRydWUgUFNFVURPX0JVSUxEPTEgLi4vYml0YmFrZS9iaW4vYml0YmFrZSBwc2V1ZG8tbmF0aXZlIFstYyBDTURdCisKK1NVTU1BUlkgPSAiUHNldWRvIGdpdmVzIGZha2Ugcm9vdCBjYXBhYmlsaXRpZXMgdG8gYSBub3JtYWwgdXNlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3BzZXVkbyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI0M2I3MjVkNzFiYjVkZjRhMWU1OTIwYjM0NGI4NmFkIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJMR1BMMi4xIgorREVQRU5EUyA9ICJzcWxpdGUzIGF0dHIiCisKK0ZJTEVTXyR7UE59ID0gIiR7cHJlZml4fS9saWIvcHNldWRvL2xpYiovbGlicHNldWRvLnNvICR7YmluZGlyfS8qICR7bG9jYWxzdGF0ZWRpcn0vcHNldWRvICR7cHJlZml4fS92YXIvcHNldWRvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke3ByZWZpeH0vbGliL3BzZXVkby9saWIqLy5kZWJ1ZyIKK0lOU0FORV9TS0lQXyR7UE59ICs9ICJsaWJkaXIiCitJTlNBTkVfU0tJUF8ke1BOfS1kYmcgKz0gImxpYmRpciIKKworUFJPVklERVMgKz0gInZpcnR1YWwvZmFrZXJvb3QiCisKK01BS0VPUFRTID0gIiIKKworaW5oZXJpdCBzaXRlaW5mbworCitkb19jb25maWd1cmUgKCkgeworCToKK30KKworTk8zMkxJQlMgPz89ICIxIgorTk8zMkxJQlNfY2xhc3MtbmF0aXZlc2RrID0gIjEiCisKKyMgQ29tcGlsZSBmb3IgdGhlIGxvY2FsIG1hY2hpbmUgYXJjaC4uLgorZG9fY29tcGlsZSAoKSB7CisJaWYgWyAiJHtTSVRFSU5GT19CSVRTfSIgPSAiNjQiIF07IHRoZW4KKwkgICR7U30vY29uZmlndXJlICR7UFNFVURPX0VYVFJBX09QVFN9IC0tcHJlZml4PSR7cHJlZml4fSAtLWxpYmRpcj0ke3ByZWZpeH0vbGliL3BzZXVkby9saWIke1NJVEVJTkZPX0JJVFN9IC0td2l0aC1zcWxpdGUtbGliPSR7YmFzZWxpYn0gLS13aXRoLXNxbGl0ZT0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke2V4ZWNfcHJlZml4fSAtLWNmbGFncz0iJHtDRkxBR1N9IiAtLWJpdHM9JHtTSVRFSU5GT19CSVRTfSAtLWVuYWJsZS1zdGF0aWMtc3FsaXRlIC0td2l0aG91dC1ycGF0aAorCWVsc2UKKwkgICR7U30vY29uZmlndXJlICR7UFNFVURPX0VYVFJBX09QVFN9IC0tcHJlZml4PSR7cHJlZml4fSAtLWxpYmRpcj0ke3ByZWZpeH0vbGliL3BzZXVkby9saWIgLS13aXRoLXNxbGl0ZS1saWI9JHtiYXNlbGlifSAtLXdpdGgtc3FsaXRlPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7ZXhlY19wcmVmaXh9IC0tY2ZsYWdzPSIke0NGTEFHU30iIC0tYml0cz0ke1NJVEVJTkZPX0JJVFN9IC0tZW5hYmxlLXN0YXRpYy1zcWxpdGUgLS13aXRob3V0LXJwYXRoCisJZmkKKwlvZV9ydW5tYWtlICR7TUFLRU9QVFN9Cit9Citkb19jb21waWxlW3ZhcmRlcHNleGNsdWRlXSA9ICJTSVRFSU5GT19CSVRTIgorCittYXliZV9tYWtlMzIoKSB7CisJIyBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGJ1aWxkIDMyLWJpdCBiaW5hcmllcy4KKwltYWtlMzI9ZmFsc2UKKwlpZiBbICIke1NJVEVJTkZPX0JJVFN9IiA9ICI2NCIgXTsgdGhlbgorCQljYXNlICIke05PMzJMSUJTfSIgaW4KKwkJMCkJbWFrZTMyPXRydWUKKwkJCTs7CisJCTEpCW1ha2UzMj1mYWxzZQorCQkJOzsKKwkJKikJIyBJZiB1bnNldCwgYnVpbGQgMzItYml0IGlmIHdlIHRoaW5rIHdlIGNhbi4KKwkJCWlmIFsgLWUgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMtMzIuaCIgXTsgdGhlbgorCQkJCW1ha2UzMj10cnVlCisJCQlmaQorCQkJOzsKKwkJZXNhYworCWZpCisJaWYgJG1ha2UzMjsgdGhlbgorCQlpZiAhIFsgLWUgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMtMzIuaCIgXTsgdGhlbgorCQkJd2Fybl8zMmJpdF9taXNzaW5nCisJCWVsc2UKKwkJCWJibm90ZSAiQXR0ZW1wdGluZyB0byBidWlsZCAzMi1iaXQgbGlicHNldWRvLnNvIGZvciAke1BOfS4iCisJCWZpCisJZWxzZQorCQliYm5vdGUgIkJ1aWxkaW5nL2luc3RhbGxpbmcgb25seSA2NC1iaXQgbGlicHNldWRvLnNvIGZvciAke1BOfS4iCisJCWJibm90ZSAiSWYgeW91IG5lZWQgdG8gcnVuIDMyLWJpdCBleGVjdXRhYmxlcywgZW5zdXJlIHRoYXQgTk8zMkxJQlMgaXMgc2V0IHRvIDAuIgorCWZpCit9CittYXliZV9tYWtlMzJbdmFyZGVwc2V4Y2x1ZGVdID0gIlNJVEVJTkZPX0JJVFMiCisKK3dhcm5fMzJiaXRfbWlzc2luZygpIHsKKwliYndhcm4gIkNhbid0IGZpbmQgc3R1YnMtMzIuaCwgYnV0IHVzdWFsbHkgbmVlZCBpdCB0byBidWlsZCAzMi1iaXQgbGlicHNldWRvLiIKKwliYndhcm4gIklmIHRoZSBidWlsZCBmYWlscywgaW5zdGFsbCAzMi1iaXQgZGV2ZWxvcGVyIHBhY2thZ2VzLiIKKwliYndhcm4gIklmIHlvdSBhcmUgdXNpbmcgMzItYml0IGJpbmFyaWVzLCB0aGUgMzItYml0IGxpYnBzZXVkbyBpcyBOT1Qgb3B0aW9uYWwuIgorfQorCisjIFR3byBiZWxvdyBhcmUgdGhlIHNhbWUKKyMgSWYgbmVjZXNzYXJ5IGNvbXBpbGUgZm9yIHRoZSBhbHRlcm5hdGl2ZSBtYWNoaW5lIGFyY2guICBUaGlzIGlzIG9ubHkgCisjIG5lY2Vzc2FyeSBpbiBhIG5hdGl2ZSBidWlsZC4KK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworCW1heWJlX21ha2UzMgorCWlmICRtYWtlMzI7IHRoZW4KKwkJIyBXZSBuZWVkIHRoZSAzMi1iaXQgbGlicHNldWRvIG9uIGEgNjQtYml0IG1hY2hpbmUuLi4KKwkJIyBOb3RlIHRoYXQgdGhpcyBpcyBub3Qgd2VsbC10ZXN0ZWQgb3V0c2lkZSBvZiB4ODYveDg2XzY0LgorCisJCSMgaWYgd2UncmUgYmVpbmcgcmVidWlsdCBkdWUgdG8gYSBkZXBlbmRlbmN5IGNoYW5nZSwgd2UgbmVlZCB0byBtYWtlIHN1cmUKKwkJIyBldmVyeXRoaW5nIGlzIGNsZWFuIGJlZm9yZSB3ZSBjb25maWd1cmUgYW5kIGJ1aWxkIC0tIGlmIHdlIGhhdmVuJ3QgcHJldmlvdXNseQorCQkjIGJ1aWx0IHRoaXMgd2lsbCBmYWlsIGFuZCBiZSBpZ25vcmVkLgorCQltYWtlICR7TUFLRU9QVFN9IGRpc3RjbGVhbiB8fCA6CisKKwkJLi9jb25maWd1cmUgJHtQU0VVRE9fRVhUUkFfT1BUU30gLS1wcmVmaXg9JHtwcmVmaXh9IC0tbGliZGlyPSR7cHJlZml4fS9saWIvcHNldWRvL2xpYiAtLXdpdGgtc3FsaXRlLWxpYj0ke2Jhc2VsaWJ9IC0td2l0aC1zcWxpdGU9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtleGVjX3ByZWZpeH0gLS1iaXRzPTMyIC0td2l0aG91dC1ycGF0aAorCQlzYXZlX3RyYXBzPSQodHJhcCkKKwkJdHJhcCAnd2Fybl8zMmJpdF9taXNzaW5nJyAwCisJCW9lX3J1bm1ha2UgJHtNQUtFT1BUU30gbGlicHNldWRvCisJCWV2YWwgIiRzYXZlX3RyYXBzIgorCQkjIHByZXZlbnQgaXQgZnJvbSByZW1vdmluZyB0aGUgbGliLCBidXQgcmVtb3ZlIGV2ZXJ5dGhpbmcgZWxzZQorCQltYWtlICdMSUI9Zm9vJyAke01BS0VPUFRTfSBkaXN0Y2xlYW4gCisJZmkKK30KKworZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZXNkayAoKSB7CisJbWF5YmVfbWFrZTMyCisJaWYgJG1ha2UzMjsgdGhlbgorCQkjIFdlIG5lZWQgdGhlIDMyLWJpdCBsaWJwc2V1ZG8gb24gYSA2NC1iaXQgbWFjaGluZS4KKwkJIyBOb3RlIHRoYXQgdGhpcyBpcyBub3Qgd2VsbC10ZXN0ZWQgb3V0c2lkZSBvZiB4ODYveDg2XzY0LgorCQkuL2NvbmZpZ3VyZSAke1BTRVVET19FWFRSQV9PUFRTfSAtLXByZWZpeD0ke3ByZWZpeH0gLS1saWJkaXI9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliIC0td2l0aC1zcWxpdGUtbGliPSR7YmFzZWxpYn0gLS13aXRoLXNxbGl0ZT0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke2V4ZWNfcHJlZml4fSAtLWJpdHM9MzIgLS13aXRob3V0LXJwYXRoCisJCW9lX3J1bm1ha2UgJHtNQUtFT1BUU30gbGlicHNldWRvCisJCSMgcHJldmVudCBpdCBmcm9tIHJlbW92aW5nIHRoZSBsaWIsIGJ1dCByZW1vdmUgZXZlcnl0aGluZyBlbHNlCisJCW1ha2UgJ0xJQj1mb28nICR7TUFLRU9QVFN9IGRpc3RjbGVhbiAKKwlmaQorfQorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nICR7TUFLRU9QVFN9ICdMSUI9bGliL3BzZXVkby9saWIkKE1BUks2NCknIGluc3RhbGwKK30KKworIyBUd28gYmVsb3cgYXJlIHRoZSBzYW1lCisjIElmIG5lY2Vzc2FyeSBpbnN0YWxsIGZvciB0aGUgYWx0ZXJuYXRpdmUgbWFjaGluZSBhcmNoLiAgVGhpcyBpcyBvbmx5IAorIyBuZWNlc3NhcnkgaW4gYSBuYXRpdmUgYnVpbGQuCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworCW1heWJlX21ha2UzMgorCWlmICRtYWtlMzI7IHRoZW4KKwkJbWtkaXIgLXAgJHtEfSR7cHJlZml4fS9saWIvcHNldWRvL2xpYgorCQljcCBsaWIvcHNldWRvL2xpYi9saWJwc2V1ZG8uc28gJHtEfSR7cHJlZml4fS9saWIvcHNldWRvL2xpYi8uCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKKwltYXliZV9tYWtlMzIKKwlpZiAkbWFrZTMyOyB0aGVuCisJCW1rZGlyIC1wICR7RH0ke3ByZWZpeH0vbGliL3BzZXVkby9saWIKKwkJY3AgbGliL3BzZXVkby9saWIvbGlicHNldWRvLnNvICR7RH0ke3ByZWZpeH0vbGliL3BzZXVkby9saWIvLgorCWZpCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS42LjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuNi43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YzIwYWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuNi43LmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgcHNldWRvLmluYworCitTUkNfVVJJID0gIiBcCisgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL3BzZXVkby8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgZmlsZTovL2ZhbGxiYWNrLXBhc3N3ZCBcCisgICAgZmlsZTovL2ZhbGxiYWNrLWdyb3VwIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjRjZDM5NTAyZjliZDBlNzM0ZGVlODBlMDhiMjhhNWYxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlmMmNhY2E1ZjE1NzlhMzc2YTUwOWNkODFhODExNTZmYzIwODY1MGFkZDlmMGFmMjc1ZGE5ZTkxMWYxOGYyOTEiCisKK1BTRVVET19FWFRSQV9PUFRTID89ICItLWVuYWJsZS1mb3JjZS1hc3luYyAtLXdpdGhvdXQtcGFzc3dkLWZhbGxiYWNrIgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwkjIFRoZSBmYWxsYmFjayBmaWxlcyBzaG91bGQgbmV2ZXIgYmUgbW9kaWZpZWQKKwlpbnN0YWxsIC1tIDQ0NCAke1dPUktESVJ9L2ZhbGxiYWNrLXBhc3N3ZCAke0R9JHtzeXNjb25mZGlyfS9wYXNzd2QKKwlpbnN0YWxsIC1tIDQ0NCAke1dPUktESVJ9L2ZhbGxiYWNrLWdyb3VwICR7RH0ke3N5c2NvbmZkaXJ9L2dyb3VwCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuNy4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjcuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTllZjNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjcuMy5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHBzZXVkby5pbmMKKworU1JDX1VSSSA9ICIgXAorICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9wc2V1ZG8vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgIGZpbGU6Ly9mYWxsYmFjay1wYXNzd2QgXAorICAgIGZpbGU6Ly9mYWxsYmFjay1ncm91cCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyYmQwYTQ0ZWFkZDQ3MTNlOTBhZDhjMTUyZWVhNzdhYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlOWZjMzkyMmY4ZmViOTc4MzliNTBkMTRlYjE5ODdhZmRjOGYyMmNkY2FjOTMxMTkzMjNjY2NkNWY4NDQ0NjUyIgorCitQU0VVRE9fRVhUUkFfT1BUUyA/PSAiLS1lbmFibGUtZm9yY2UtYXN5bmMgLS13aXRob3V0LXBhc3N3ZC1mYWxsYmFjayIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJIyBUaGUgZmFsbGJhY2sgZmlsZXMgc2hvdWxkIG5ldmVyIGJlIG1vZGlmaWVkCisJaW5zdGFsbCAtbSA0NDQgJHtXT1JLRElSfS9mYWxsYmFjay1wYXNzd2QgJHtEfSR7c3lzY29uZmRpcn0vcGFzc3dkCisJaW5zdGFsbCAtbSA0NDQgJHtXT1JLRElSfS9mYWxsYmFjay1ncm91cCAke0R9JHtzeXNjb25mZGlyfS9ncm91cAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWUxMjIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb19naXQuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSBwc2V1ZG8uaW5jCisKK1NSQ1JFViA9ICJlNzk1ZGY0NGE5MGE0MjZhNzZiNzkwZjFiMjc3NGYzMDQ2YThmYzMxIgorUFYgPSAiMS43LjIrZ2l0JHtTUkNQVn0iCisKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wc2V1ZG8iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMi43LW1hbmlmZXN0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMi43LW1hbmlmZXN0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDhkODI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi0yLjctbWFuaWZlc3QuaW5jCkBAIC0wLDAgKzEsMjg4IEBACisKKyMgV0FSTklORzogVGhpcyBmaWxlIGlzIEFVVE8gR0VORVJBVEVEOiBNYW51YWwgZWRpdHMgd2lsbCBiZSBsb3N0IG5leHQgdGltZSBJIHJlZ2VuZXJhdGUgdGhlIGZpbGUuCisjIEdlbmVyYXRvcjogJy4uLy4uLy4uL3NjcmlwdHMvY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMi43LnB5JyBWZXJzaW9uIDIwMTEwMjIyLjIgKEMpIDIwMDItMjAxMCBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtbGF1ZXJAdmFuaWxsZS1tZWRpYS5kZT4KKyMgVmlzaXQgdGhlIFB5dGhvbiBmb3IgRW1iZWRkZWQgU3lzdGVtcyBTaXRlID0+IGh0dHA6Ly93d3cuVmFuaWxsZS5kZS9wcm9qZWN0cy9weXRob24uc3B5CisKKyAKKworUFJPVklERVMrPSIke1BOfS0ydG8zICR7UE59LWFyZ3BhcnNlICR7UE59LWF1ZGlvICR7UE59LWJzZGRiICR7UE59LWNvZGVjcyAke1BOfS1jb21waWxlICR7UE59LWNvbXBpbGVyICR7UE59LWNvbXByZXNzaW9uICR7UE59LWNvbnRleHRsaWIgJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1jdHlwZXMgJHtQTn0tY3Vyc2VzICR7UE59LWRhdGV0aW1lICR7UE59LWRiICR7UE59LWRlYnVnZ2VyICR7UE59LWRldiAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscyAke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2ICR7UE59LWRvY3Rlc3QgJHtQTn0tZWxlbWVudHRyZWUgJHtQTn0tZW1haWwgJHtQTn0tZmNudGwgJHtQTn0tZ2RibSAke1BOfS1ob3RzaG90ICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlc291cmNlICR7UE59LXJvYm90cGFyc2VyICR7UE59LXNoZWxsICR7UE59LXNtdHBkICR7UE59LXNxbGl0ZTMgJHtQTn0tc3FsaXRlMy10ZXN0cyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc3VicHJvY2VzcyAke1BOfS1zeXNsb2cgJHtQTn0tdGVybWluYWwgJHtQTn0tdGVzdHMgJHtQTn0tdGV4dHV0aWxzICR7UE59LXRocmVhZGluZyAke1BOfS10a2ludGVyICR7UE59LXVuaXR0ZXN0ICR7UE59LXVuaXhhZG1pbiAke1BOfS14bWwgJHtQTn0teG1scnBjICR7UE59LXpsaWIgIgorCitQQUNLQUdFUz0iJHtQTn0tZGJnICR7UE59LTJ0bzMgJHtQTn0tYXJncGFyc2UgJHtQTn0tYXVkaW8gJHtQTn0tYnNkZGIgJHtQTn0tY29kZWNzICR7UE59LWNvbXBpbGUgJHtQTn0tY29tcGlsZXIgJHtQTn0tY29tcHJlc3Npb24gJHtQTn0tY29udGV4dGxpYiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGV2ICR7UE59LWRpZmZsaWIgJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2RldiAke1BOfS1kaXN0dXRpbHMgJHtQTn0tZG9jdGVzdCAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1lbWFpbCAke1BOfS1mY250bCAke1BOfS1nZGJtICR7UE59LWhvdHNob3QgJHtQTn0taHRtbCAke1BOfS1pZGxlICR7UE59LWltYWdlICR7UE59LWltcG9ydGxpYiAke1BOfS1pbyAke1BOfS1qc29uICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1tYWlsYm94ICR7UE59LW1hdGggJHtQTn0tbWltZSAke1BOfS1tbWFwICR7UE59LW11bHRpcHJvY2Vzc2luZyAke1BOfS1uZXRjbGllbnQgJHtQTn0tbmV0c2VydmVyICR7UE59LW51bWJlcnMgJHtQTn0tcGlja2xlICR7UE59LXBrZ3V0aWwgJHtQTn0tcHByaW50ICR7UE59LXByb2ZpbGUgJHtQTn0tcHlkb2MgJHtQTn0tcmUgJHtQTn0tcmVhZGxpbmUgJHtQTn0tcmVzb3VyY2UgJHtQTn0tcm9ib3RwYXJzZXIgJHtQTn0tc2hlbGwgJHtQTn0tc210cGQgJHtQTn0tc3FsaXRlMyAke1BOfS1zcWxpdGUzLXRlc3RzICR7UE59LXN0cmluZ29sZCAke1BOfS1zdWJwcm9jZXNzICR7UE59LXN5c2xvZyAke1BOfS10ZXJtaW5hbCAke1BOfS10ZXN0cyAke1BOfS10ZXh0dXRpbHMgJHtQTn0tdGhyZWFkaW5nICR7UE59LXRraW50ZXIgJHtQTn0tdW5pdHRlc3QgJHtQTn0tdW5peGFkbWluICR7UE59LXhtbCAke1BOfS14bWxycGMgJHtQTn0temxpYiAke1BOfS1tb2R1bGVzIgorCitTVU1NQVJZXyR7UE59LTJ0bzM9IlB5dGhvbiBhdXRvbWF0ZWQgUHl0aG9uIDIgdG8gMyBjb2RlIHRyYW5zbGF0b3IiCitSREVQRU5EU18ke1BOfS0ydG8zPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tMnRvMz0iJHtiaW5kaXJ9LzJ0bzMgJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWIydG8zICIKKworU1VNTUFSWV8ke1BOfS1hcmdwYXJzZT0iUHl0aG9uIGNvbW1hbmQgbGluZSBhcmd1bWVudCBwYXJzZXIiCitSREVQRU5EU18ke1BOfS1hcmdwYXJzZT0iJHtQTn0tY29yZSAke1BOfS1jb2RlY3MgJHtQTn0tdGV4dHV0aWxzIgorRklMRVNfJHtQTn0tYXJncGFyc2U9IiR7bGliZGlyfS9weXRob24yLjcvYXJncGFyc2UuKiAiCisKK1NVTU1BUllfJHtQTn0tYXVkaW89IlB5dGhvbiBBdWRpbyBIYW5kbGluZyIKK1JERVBFTkRTXyR7UE59LWF1ZGlvPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tYXVkaW89IiR7bGliZGlyfS9weXRob24yLjcvd2F2ZS4qICR7bGliZGlyfS9weXRob24yLjcvY2h1bmsuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NuZGhkci4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvb3NzYXVkaW9kZXYuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9hdWRpb29wLnNvICR7bGliZGlyfS9weXRob24yLjcvYXVkaW9kZXYuKiAke2xpYmRpcn0vcHl0aG9uMi43L3N1bmF1ZGlvLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zdW5hdS4qICR7bGliZGlyfS9weXRob24yLjcvdG9haWZmLiogIgorCitTVU1NQVJZXyR7UE59LWJzZGRiPSJQeXRob24gYmluZGluZ3MgZm9yIHRoZSBCZXJrZWxleSBEYXRhYmFzZSIKK1JERVBFTkRTXyR7UE59LWJzZGRiPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tYnNkZGI9IiR7bGliZGlyfS9weXRob24yLjcvYnNkZGIgJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fYnNkZGIuc28gIgorCitTVU1NQVJZXyR7UE59LWNvZGVjcz0iUHl0aG9uIGNvZGVjcywgZW5jb2RpbmdzICYgaTE4biBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY29kZWNzPSIke1BOfS1jb3JlICR7UE59LWxhbmciCitGSUxFU18ke1BOfS1jb2RlY3M9IiR7bGliZGlyfS9weXRob24yLjcvY29kZWNzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9lbmNvZGluZ3MgJHtsaWJkaXJ9L3B5dGhvbjIuNy9nZXR0ZXh0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9sb2NhbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19sb2NhbGUuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fY29kZWNzKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19tdWx0aWJ5dGVjb2RlYy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3VuaWNvZGVkYXRhLnNvICR7bGliZGlyfS9weXRob24yLjcvc3RyaW5ncHJlcC4qICR7bGliZGlyfS9weXRob24yLjcveGRybGliLiogIgorCitTVU1NQVJZXyR7UE59LWNvbXBpbGU9IlB5dGhvbiBieXRlY29kZSBjb21waWxhdGlvbiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY29tcGlsZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWNvbXBpbGU9IiR7bGliZGlyfS9weXRob24yLjcvcHlfY29tcGlsZS4qICR7bGliZGlyfS9weXRob24yLjcvY29tcGlsZWFsbC4qICIKKworU1VNTUFSWV8ke1BOfS1jb21waWxlcj0iUHl0aG9uIGNvbXBpbGVyIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jb21waWxlcj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWNvbXBpbGVyPSIke2xpYmRpcn0vcHl0aG9uMi43L2NvbXBpbGVyICIKKworU1VNTUFSWV8ke1BOfS1jb21wcmVzc2lvbj0iUHl0aG9uIGhpZ2gtbGV2ZWwgY29tcHJlc3Npb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNvbXByZXNzaW9uPSIke1BOfS1jb3JlICR7UE59LXpsaWIiCitGSUxFU18ke1BOfS1jb21wcmVzc2lvbj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9nemlwLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy96aXBmaWxlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90YXJmaWxlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9iejIuc28gIgorCitTVU1NQVJZXyR7UE59LWNvbnRleHRsaWI9IlB5dGhvbiB1dGlsaXRpZXMgZm9yIHdpdGgtc3RhdGVtZW50Y29udGV4dHMuIgorUkRFUEVORFNfJHtQTn0tY29udGV4dGxpYj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWNvbnRleHRsaWI9IiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbnRleHRsaWIuKiAiCisKK1NVTU1BUllfJHtQTn0tY29yZT0iUHl0aG9uIGludGVycHJldGVyIGFuZCBjb3JlIG1vZHVsZXMiCitSREVQRU5EU18ke1BOfS1jb3JlPSIke1BOfS1sYW5nICR7UE59LXJlIgorRklMRVNfJHtQTn0tY29yZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9fX2Z1dHVyZV9fLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9fYWJjb2xsLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9hYmMuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvcHkuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvcHlfcmVnLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9Db25maWdQYXJzZXIuKiAke2xpYmRpcn0vcHl0aG9uMi43L2dlbmVyaWNwYXRoLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9nZXRvcHQuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpbmVjYWNoZS4qICR7bGliZGlyfS9weXRob24yLjcvbmV3LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9vcy4qICR7bGliZGlyfS9weXRob24yLjcvcG9zaXhwYXRoLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zdHJ1Y3QuKiAke2xpYmRpcn0vcHl0aG9uMi43L3dhcm5pbmdzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaXRlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zdGF0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9Vc2VyRGljdC4qICR7bGliZGlyfS9weXRob24yLjcvVXNlckxpc3QuKiAke2xpYmRpcn0vcHl0aG9uMi43L1VzZXJTdHJpbmcuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2JpbmFzY2lpLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX3N0cnVjdC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3RpbWUuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC94cmVhZGxpbmVzLnNvICR7bGliZGlyfS9weXRob24yLjcvdHlwZXMuKiAke2xpYmRpcn0vcHl0aG9uMi43L3BsYXRmb3JtLiogJHtiaW5kaXJ9L3B5dGhvbiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9fd2Vha3JlZnNldC4qICR7bGliZGlyfS9weXRob24yLjcvc3lzY29uZmlnLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9fc3lzY29uZmlnZGF0YS4qICR7bGliZGlyfS9weXRob24yLjcvY29uZmlnL01ha2VmaWxlICR7aW5jbHVkZWRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9weWNvbmZpZyouaCAke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9zaXRlY3VzdG9taXplLnB5ICIKKworU1VNTUFSWV8ke1BOfS1jcnlwdD0iUHl0aG9uIGJhc2ljIGNyeXB0b2dyYXBoaWMgYW5kIGhhc2hpbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNyeXB0PSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tY3J5cHQ9IiR7bGliZGlyfS9weXRob24yLjcvaGFzaGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvbWQ1LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaGEuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2NyeXB0LnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2hhc2hsaWIuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fc2hhMjU2LnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX3NoYTUxMi5zbyAiCisKK1NVTU1BUllfJHtQTn0tY3R5cGVzPSJQeXRob24gQyB0eXBlcyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY3R5cGVzPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tY3R5cGVzPSIke2xpYmRpcn0vcHl0aG9uMi43L2N0eXBlcyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19jdHlwZXMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fY3R5cGVzX3Rlc3Quc28gIgorCitTVU1NQVJZXyR7UE59LWN1cnNlcz0iUHl0aG9uIGN1cnNlcyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY3Vyc2VzPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tY3Vyc2VzPSIke2xpYmRpcn0vcHl0aG9uMi43L2N1cnNlcyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19jdXJzZXMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fY3Vyc2VzX3BhbmVsLnNvICIKKworU1VNTUFSWV8ke1BOfS1kYXRldGltZT0iUHl0aG9uIGNhbGVuZGFyIGFuZCB0aW1lIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1kYXRldGltZT0iJHtQTn0tY29yZSAke1BOfS1jb2RlY3MiCitGSUxFU18ke1BOfS1kYXRldGltZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9fc3RycHRpbWUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NhbGVuZGFyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9kYXRldGltZS5zbyAiCisKK1NVTU1BUllfJHtQTn0tZGI9IlB5dGhvbiBmaWxlLWJhc2VkIGRhdGFiYXNlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1kYj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWRiPSIke2xpYmRpcn0vcHl0aG9uMi43L2FueWRibS4qICR7bGliZGlyfS9weXRob24yLjcvZHVtYmRibS4qICR7bGliZGlyfS9weXRob24yLjcvd2hpY2hkYi4qICIKKworU1VNTUFSWV8ke1BOfS1kZWJ1Z2dlcj0iUHl0aG9uIGRlYnVnZ2VyIgorUkRFUEVORFNfJHtQTn0tZGVidWdnZXI9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1yZSAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc2hlbGwgJHtQTn0tcHByaW50IgorRklMRVNfJHtQTn0tZGVidWdnZXI9IiR7bGliZGlyfS9weXRob24yLjcvYmRiLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9wZGIuKiAiCisKK1NVTU1BUllfJHtQTn0tZGV2PSJQeXRob24gZGV2ZWxvcG1lbnQgcGFja2FnZSIKK1JERVBFTkRTXyR7UE59LWRldj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWRldj0iJHtpbmNsdWRlZGlyfSAke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSAke2xpYmRpcn0vKi5sYSAke2xpYmRpcn0vKi5hICR7bGliZGlyfS8qLm8gJHtsaWJkaXJ9L3BrZ2NvbmZpZyAke2Jhc2VfbGliZGlyfS8qLmEgJHtiYXNlX2xpYmRpcn0vKi5vICR7ZGF0YWRpcn0vYWNsb2NhbCAke2RhdGFkaXJ9L3BrZ2NvbmZpZyAiCisKK1NVTU1BUllfJHtQTn0tZGlmZmxpYj0iUHl0aG9uIGhlbHBlcnMgZm9yIGNvbXB1dGluZyBkZWx0YXMgYmV0d2VlbiBvYmplY3RzIgorUkRFUEVORFNfJHtQTn0tZGlmZmxpYj0iJHtQTn0tbGFuZyAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LWRpZmZsaWI9IiR7bGliZGlyfS9weXRob24yLjcvZGlmZmxpYi4qICIKKworU1VNTUFSWV8ke1BOfS1kaXN0dXRpbHM9IlB5dGhvbiBEaXN0cmlidXRpb24gVXRpbGl0aWVzIgorUkRFUEVORFNfJHtQTn0tZGlzdHV0aWxzPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZGlzdHV0aWxzPSIke2xpYmRpcn0vcHl0aG9uMi43L2NvbmZpZyAke2xpYmRpcn0vcHl0aG9uMi43L2Rpc3R1dGlscyAiCisKK1NVTU1BUllfJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2Rldj0iUHl0aG9uIGRpc3RyaWJ1dGlvbiB1dGlsaXRpZXMgKHN0YXRpYyBsaWJyYXJpZXMpIgorUkRFUEVORFNfJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2Rldj0iJHtQTn0tZGlzdHV0aWxzIgorRklMRVNfJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2Rldj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb25maWcvbGliKi5hICIKKworU1VNTUFSWV8ke1BOfS1kb2N0ZXN0PSJQeXRob24gZnJhbWV3b3JrIGZvciBydW5uaW5nIGV4YW1wbGVzIGluIGRvY3N0cmluZ3MiCitSREVQRU5EU18ke1BOfS1kb2N0ZXN0PSIke1BOfS1jb3JlICR7UE59LWxhbmcgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tdW5pdHRlc3QgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGlmZmxpYiIKK0ZJTEVTXyR7UE59LWRvY3Rlc3Q9IiR7bGliZGlyfS9weXRob24yLjcvZG9jdGVzdC4qICIKKworU1VNTUFSWV8ke1BOfS1lbGVtZW50dHJlZT0iUHl0aG9uIGVsZW1lbnRyZWUiCitSREVQRU5EU18ke1BOfS1lbGVtZW50dHJlZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWVsZW1lbnR0cmVlPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19lbGVtZW50dHJlZS5zbyAiCisKK1NVTU1BUllfJHtQTn0tZW1haWw9IlB5dGhvbiBlbWFpbCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tZW1haWw9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tbWltZSAke1BOfS1hdWRpbyAke1BOfS1pbWFnZSAke1BOfS1uZXRjbGllbnQiCitGSUxFU18ke1BOfS1lbWFpbD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9pbWFwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9lbWFpbCAiCisKK1NVTU1BUllfJHtQTn0tZmNudGw9IlB5dGhvbidzIGZjbnRsIGludGVyZmFjZSIKK1JERVBFTkRTXyR7UE59LWZjbnRsPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZmNudGw9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvZmNudGwuc28gIgorCitTVU1NQVJZXyR7UE59LWdkYm09IlB5dGhvbiBHTlUgZGF0YWJhc2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWdkYm09IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1nZGJtPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2dkYm0uc28gIgorCitTVU1NQVJZXyR7UE59LWhvdHNob3Q9IlB5dGhvbiBob3RzaG90IHBlcmZvcm1hbmNlIHByb2ZpbGVyIgorUkRFUEVORFNfJHtQTn0taG90c2hvdD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWhvdHNob3Q9IiR7bGliZGlyfS9weXRob24yLjcvaG90c2hvdCAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19ob3RzaG90LnNvICIKKworU1VNTUFSWV8ke1BOfS1odG1sPSJQeXRob24gSFRNTCBwcm9jZXNzaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1odG1sPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0taHRtbD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9mb3JtYXR0ZXIuKiAke2xpYmRpcn0vcHl0aG9uMi43L2h0bWxlbnRpdHlkZWZzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9odG1sbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9tYXJrdXBiYXNlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zZ21sbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9IVE1MUGFyc2VyLiogIgorCitTVU1NQVJZXyR7UE59LWlkbGU9IlB5dGhvbiBJbnRlZ3JhdGVkIERldmVsb3BtZW50IEVudmlyb25tZW50IgorUkRFUEVORFNfJHtQTn0taWRsZT0iJHtQTn0tY29yZSAke1BOfS10a2ludGVyIgorRklMRVNfJHtQTn0taWRsZT0iJHtiaW5kaXJ9L2lkbGUgJHtsaWJkaXJ9L3B5dGhvbjIuNy9pZGxlbGliICIKKworU1VNTUFSWV8ke1BOfS1pbWFnZT0iUHl0aG9uIGdyYXBoaWNhbCBpbWFnZSBoYW5kbGluZyIKK1JERVBFTkRTXyR7UE59LWltYWdlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0taW1hZ2U9IiR7bGliZGlyfS9weXRob24yLjcvY29sb3JzeXMuKiAke2xpYmRpcn0vcHl0aG9uMi43L2ltZ2hkci4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvaW1hZ2VvcC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3JnYmltZy5zbyAiCisKK1NVTU1BUllfJHtQTn0taW1wb3J0bGliPSJQeXRob24gaW1wb3J0IGltcGxlbWVudGF0aW9uIGxpYnJhcnkiCitSREVQRU5EU18ke1BOfS1pbXBvcnRsaWI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1pbXBvcnRsaWI9IiR7bGliZGlyfS9weXRob24yLjcvaW1wb3J0bGliICIKKworU1VNTUFSWV8ke1BOfS1pbz0iUHl0aG9uIGxvdy1sZXZlbCBJL08iCitSREVQRU5EU18ke1BOfS1pbz0iJHtQTn0tY29yZSAke1BOfS1tYXRoICR7UE59LXRleHR1dGlscyAke1BOfS1uZXRjbGllbnQgJHtQTn0tY29udGV4dGxpYiIKK0ZJTEVTXyR7UE59LWlvPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19zb2NrZXQuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9faW8uc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fc3NsLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvc2VsZWN0LnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvdGVybWlvcy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2NTdHJpbmdJTy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L3BpcGVzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zb2NrZXQuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NzbC4qICR7bGliZGlyfS9weXRob24yLjcvdGVtcGZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L1N0cmluZ0lPLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9pby4qICR7bGliZGlyfS9weXRob24yLjcvX3B5aW8uKiAiCisKK1NVTU1BUllfJHtQTn0tanNvbj0iUHl0aG9uIEpTT04gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWpzb249IiR7UE59LWNvcmUgJHtQTn0tbWF0aCAke1BOfS1yZSAke1BOfS1jb2RlY3MiCitGSUxFU18ke1BOfS1qc29uPSIke2xpYmRpcn0vcHl0aG9uMi43L2pzb24gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fanNvbi5zbyAiCisKK1NVTU1BUllfJHtQTn0tbGFuZz0iUHl0aG9uIGxvdy1sZXZlbCBsYW5ndWFnZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbGFuZz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWxhbmc9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2Jpc2VjdC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19jb2xsZWN0aW9ucy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19oZWFwcS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL193ZWFrcmVmLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2Z1bmN0b29scy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2FycmF5LnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvaXRlcnRvb2xzLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvb3BlcmF0b3Iuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9wYXJzZXIuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9hdGV4aXQuKiAke2xpYmRpcn0vcHl0aG9uMi43L2Jpc2VjdC4qICR7bGliZGlyfS9weXRob24yLjcvY29kZS4qICR7bGliZGlyfS9weXRob24yLjcvY29kZW9wLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb2xsZWN0aW9ucy4qICR7bGliZGlyfS9weXRob24yLjcvZGlzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9mdW5jdG9vbHMuKiAke2xpYmRpcn0vcHl0aG9uMi43L2hlYXBxLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9pbnNwZWN0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9rZXl3b3JkLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9vcGNvZGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3N5bWJvbC4qICR7bGliZGlyfS9weXRob24yLjcvcmVwci4qICR7bGliZGlyfS9weXRob24yLjcvdG9rZW4uKiAke2xpYmRpcn0vcHl0aG9uMi43L3Rva2VuaXplLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90cmFjZWJhY2suKiAke2xpYmRpcn0vcHl0aG9uMi43L3dlYWtyZWYuKiAiCisKK1NVTU1BUllfJHtQTn0tbG9nZ2luZz0iUHl0aG9uIGxvZ2dpbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWxvZ2dpbmc9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1waWNrbGUgJHtQTn0tc3RyaW5nb2xkIgorRklMRVNfJHtQTn0tbG9nZ2luZz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9sb2dnaW5nICIKKworU1VNTUFSWV8ke1BOfS1tYWlsYm94PSJQeXRob24gbWFpbGJveCBmb3JtYXQgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW1haWxib3g9IiR7UE59LWNvcmUgJHtQTn0tbWltZSIKK0ZJTEVTXyR7UE59LW1haWxib3g9IiR7bGliZGlyfS9weXRob24yLjcvbWFpbGJveC4qICIKKworU1VNTUFSWV8ke1BOfS1tYXRoPSJQeXRob24gbWF0aCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbWF0aD0iJHtQTn0tY29yZSAke1BOfS1jcnlwdCIKK0ZJTEVTXyR7UE59LW1hdGg9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvY21hdGguc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9tYXRoLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX3JhbmRvbS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L3JhbmRvbS4qICR7bGliZGlyfS9weXRob24yLjcvc2V0cy4qICIKKworU1VNTUFSWV8ke1BOfS1taW1lPSJQeXRob24gTUlNRSBoYW5kbGluZyBBUElzIgorUkRFUEVORFNfJHtQTn0tbWltZT0iJHtQTn0tY29yZSAke1BOfS1pbyIKK0ZJTEVTXyR7UE59LW1pbWU9IiR7bGliZGlyfS9weXRob24yLjcvbWltZXRvb2xzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy91dS4qICR7bGliZGlyfS9weXRob24yLjcvcXVvcHJpLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9yZmM4MjIuKiAke2xpYmRpcn0vcHl0aG9uMi43L01pbWVXcml0ZXIuKiAiCisKK1NVTU1BUllfJHtQTn0tbW1hcD0iUHl0aG9uIG1lbW9yeS1tYXBwZWQgZmlsZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbW1hcD0iJHtQTn0tY29yZSAke1BOfS1pbyIKK0ZJTEVTXyR7UE59LW1tYXA9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvbW1hcC5zbyAiCisKK1NVTU1BUllfJHtQTn0tbXVsdGlwcm9jZXNzaW5nPSJQeXRob24gbXVsdGlwcm9jZXNzaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1tdWx0aXByb2Nlc3Npbmc9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1waWNrbGUgJHtQTn0tdGhyZWFkaW5nICR7UE59LWN0eXBlcyAke1BOfS1tbWFwIgorRklMRVNfJHtQTn0tbXVsdGlwcm9jZXNzaW5nPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19tdWx0aXByb2Nlc3Npbmcuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9tdWx0aXByb2Nlc3NpbmcgIgorCitTVU1NQVJZXyR7UE59LW5ldGNsaWVudD0iUHl0aG9uIEludGVybmV0IFByb3RvY29sIGNsaWVudHMiCitSREVQRU5EU18ke1BOfS1uZXRjbGllbnQ9IiR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tZGF0ZXRpbWUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1pbWUiCitGSUxFU18ke1BOfS1uZXRjbGllbnQ9IiR7bGliZGlyfS9weXRob24yLjcvKkNvb2tpZSouKiAke2xpYmRpcn0vcHl0aG9uMi43L2Jhc2U2NC4qICR7bGliZGlyfS9weXRob24yLjcvY29va2llbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9mdHBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L2dvcGhlcmxpYi4qICR7bGliZGlyfS9weXRob24yLjcvaG1hYy4qICR7bGliZGlyfS9weXRob24yLjcvaHR0cGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvbWltZXR5cGVzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9ubnRwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9wb3BsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NtdHBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3RlbG5ldGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvdXJsbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy91cmxsaWIyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy91cmxwYXJzZS4qICR7bGliZGlyfS9weXRob24yLjcvdXVpZC4qICR7bGliZGlyfS9weXRob24yLjcvcmZjODIyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9taW1ldG9vbHMuKiAiCisKK1NVTU1BUllfJHtQTn0tbmV0c2VydmVyPSJQeXRob24gSW50ZXJuZXQgUHJvdG9jb2wgc2VydmVycyIKK1JERVBFTkRTXyR7UE59LW5ldHNlcnZlcj0iJHtQTn0tY29yZSAke1BOfS1uZXRjbGllbnQgJHtQTn0tc2hlbGwgJHtQTn0tdGhyZWFkaW5nIgorRklMRVNfJHtQTn0tbmV0c2VydmVyPSIke2xpYmRpcn0vcHl0aG9uMi43L2NnaS4qICR7bGliZGlyfS9weXRob24yLjcvKkhUVFBTZXJ2ZXIuKiAke2xpYmRpcn0vcHl0aG9uMi43L1NvY2tldFNlcnZlci4qICIKKworU1VNTUFSWV8ke1BOfS1udW1iZXJzPSJQeXRob24gbnVtYmVyIEFQSXMiCitSREVQRU5EU18ke1BOfS1udW1iZXJzPSIke1BOfS1jb3JlICR7UE59LWxhbmcgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1udW1iZXJzPSIke2xpYmRpcn0vcHl0aG9uMi43L2RlY2ltYWwuKiAke2xpYmRpcn0vcHl0aG9uMi43L2ZyYWN0aW9ucy4qICR7bGliZGlyfS9weXRob24yLjcvbnVtYmVycy4qICIKKworU1VNTUFSWV8ke1BOfS1waWNrbGU9IlB5dGhvbiBzZXJpYWxpc2F0aW9uL3BlcnNpc3RlbmNlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1waWNrbGU9IiR7UE59LWNvcmUgJHtQTn0tY29kZWNzICR7UE59LWlvICR7UE59LXJlIgorRklMRVNfJHtQTn0tcGlja2xlPSIke2xpYmRpcn0vcHl0aG9uMi43L3BpY2tsZS4qICR7bGliZGlyfS9weXRob24yLjcvc2hlbHZlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9jUGlja2xlLnNvICR7bGliZGlyfS9weXRob24yLjcvcGlja2xldG9vbHMuKiAiCisKK1NVTU1BUllfJHtQTn0tcGtndXRpbD0iUHl0aG9uIHBhY2thZ2UgZXh0ZW5zaW9uIHV0aWxpdHkgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXBrZ3V0aWw9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1wa2d1dGlsPSIke2xpYmRpcn0vcHl0aG9uMi43L3BrZ3V0aWwuKiAiCisKK1NVTU1BUllfJHtQTn0tcHByaW50PSJQeXRob24gcHJldHR5LXByaW50IHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1wcHJpbnQ9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS1wcHJpbnQ9IiR7bGliZGlyfS9weXRob24yLjcvcHByaW50LiogIgorCitTVU1NQVJZXyR7UE59LXByb2ZpbGU9IlB5dGhvbiBiYXNpYyBwZXJmb3JtYW5jZSBwcm9maWxpbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXByb2ZpbGU9IiR7UE59LWNvcmUgJHtQTn0tdGV4dHV0aWxzIgorRklMRVNfJHtQTn0tcHJvZmlsZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9wcm9maWxlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9wc3RhdHMuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NQcm9maWxlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fbHNwcm9mLnNvICIKKworU1VNTUFSWV8ke1BOfS1weWRvYz0iUHl0aG9uIGludGVyYWN0aXZlIGhlbHAgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXB5ZG9jPSIke1BOfS1jb3JlICR7UE59LWxhbmcgJHtQTn0tc3RyaW5nb2xkICR7UE59LXJlIgorRklMRVNfJHtQTn0tcHlkb2M9IiR7YmluZGlyfS9weWRvYyAke2xpYmRpcn0vcHl0aG9uMi43L3B5ZG9jLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9weWRvY19kYXRhICIKKworU1VNTUFSWV8ke1BOfS1yZT0iUHl0aG9uIFJlZ3VsYXIgRXhwcmVzc2lvbiBBUElzIgorUkRFUEVORFNfJHtQTn0tcmU9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1yZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9yZS4qICR7bGliZGlyfS9weXRob24yLjcvc3JlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zcmVfY29tcGlsZS4qICR7bGliZGlyfS9weXRob24yLjcvc3JlX2NvbnN0YW50cyogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zcmVfcGFyc2UuKiAiCisKK1NVTU1BUllfJHtQTn0tcmVhZGxpbmU9IlB5dGhvbiByZWFkbGluZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcmVhZGxpbmU9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1yZWFkbGluZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9yZWFkbGluZS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L3JsY29tcGxldGVyLiogIgorCitTVU1NQVJZXyR7UE59LXJlc291cmNlPSJQeXRob24gcmVzb3VyY2UgY29udHJvbCBpbnRlcmZhY2UiCitSREVQRU5EU18ke1BOfS1yZXNvdXJjZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXJlc291cmNlPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3Jlc291cmNlLnNvICIKKworU1VNTUFSWV8ke1BOfS1yb2JvdHBhcnNlcj0iUHl0aG9uIHJvYm90cy50eHQgcGFyc2VyIgorUkRFUEVORFNfJHtQTn0tcm9ib3RwYXJzZXI9IiR7UE59LWNvcmUgJHtQTn0tbmV0Y2xpZW50IgorRklMRVNfJHtQTn0tcm9ib3RwYXJzZXI9IiR7bGliZGlyfS9weXRob24yLjcvcm9ib3RwYXJzZXIuKiAiCisKK1NVTU1BUllfJHtQTn0tc2hlbGw9IlB5dGhvbiBzaGVsbC1saWtlIGZ1bmN0aW9uYWxpdHkiCitSREVQRU5EU18ke1BOfS1zaGVsbD0iJHtQTn0tY29yZSAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXNoZWxsPSIke2xpYmRpcn0vcHl0aG9uMi43L2NtZC4qICR7bGliZGlyfS9weXRob24yLjcvY29tbWFuZHMuKiAke2xpYmRpcn0vcHl0aG9uMi43L2RpcmNhY2hlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9mbm1hdGNoLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9nbG9iLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9wb3BlbjIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NobGV4LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaHV0aWwuKiAiCisKK1NVTU1BUllfJHtQTn0tc210cGQ9IlB5dGhvbiBTaW1wbGUgTWFpbCBUcmFuc3BvcnQgRGFlbW9uIgorUkRFUEVORFNfJHtQTn0tc210cGQ9IiR7UE59LWNvcmUgJHtQTn0tbmV0c2VydmVyICR7UE59LWVtYWlsICR7UE59LW1pbWUiCitGSUxFU18ke1BOfS1zbXRwZD0iJHtiaW5kaXJ9L3NtdHBkLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zbXRwZC4qICIKKworU1VNTUFSWV8ke1BOfS1zcWxpdGUzPSJQeXRob24gU3FsaXRlMyBkYXRhYmFzZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tc3FsaXRlMz0iJHtQTn0tY29yZSAke1BOfS1kYXRldGltZSAke1BOfS1sYW5nICR7UE59LWNyeXB0ICR7UE59LWlvICR7UE59LXRocmVhZGluZyAke1BOfS16bGliIgorRklMRVNfJHtQTn0tc3FsaXRlMz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fc3FsaXRlMy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L3NxbGl0ZTMvZGJhcGkyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zcWxpdGUzL19faW5pdF9fLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zcWxpdGUzL2R1bXAuKiAiCisKK1NVTU1BUllfJHtQTn0tc3FsaXRlMy10ZXN0cz0iUHl0aG9uIFNxbGl0ZTMgZGF0YWJhc2Ugc3VwcG9ydCB0ZXN0cyIKK1JERVBFTkRTXyR7UE59LXNxbGl0ZTMtdGVzdHM9IiR7UE59LWNvcmUgJHtQTn0tc3FsaXRlMyIKK0ZJTEVTXyR7UE59LXNxbGl0ZTMtdGVzdHM9IiR7bGliZGlyfS9weXRob24yLjcvc3FsaXRlMy90ZXN0ICIKKworU1VNTUFSWV8ke1BOfS1zdHJpbmdvbGQ9IlB5dGhvbiBzdHJpbmcgQVBJcyBbZGVwcmVjYXRlZF0iCitSREVQRU5EU18ke1BOfS1zdHJpbmdvbGQ9IiR7UE59LWNvcmUgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1zdHJpbmdvbGQ9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvc3Ryb3Auc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9zdHJpbmcuKiAke2xpYmRpcn0vcHl0aG9uMi43L3N0cmluZ29sZC4qICIKKworU1VNTUFSWV8ke1BOfS1zdWJwcm9jZXNzPSJQeXRob24gc3VicHJvY2VzcyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tc3VicHJvY2Vzcz0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1mY250bCAke1BOfS1waWNrbGUiCitGSUxFU18ke1BOfS1zdWJwcm9jZXNzPSIke2xpYmRpcn0vcHl0aG9uMi43L3N1YnByb2Nlc3MuKiAiCisKK1NVTU1BUllfJHtQTn0tc3lzbG9nPSJQeXRob24gc3lzbG9nIGludGVyZmFjZSIKK1JERVBFTkRTXyR7UE59LXN5c2xvZz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXN5c2xvZz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9zeXNsb2cuc28gIgorCitTVU1NQVJZXyR7UE59LXRlcm1pbmFsPSJQeXRob24gdGVybWluYWwgY29udHJvbGxpbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXRlcm1pbmFsPSIke1BOfS1jb3JlICR7UE59LWlvIgorRklMRVNfJHtQTn0tdGVybWluYWw9IiR7bGliZGlyfS9weXRob24yLjcvcHR5LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90dHkuKiAiCisKK1NVTU1BUllfJHtQTn0tdGVzdHM9IlB5dGhvbiB0ZXN0cyIKK1JERVBFTkRTXyR7UE59LXRlc3RzPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tdGVzdHM9IiR7bGliZGlyfS9weXRob24yLjcvdGVzdCAiCisKK1NVTU1BUllfJHtQTn0tdGV4dHV0aWxzPSJQeXRob24gb3B0aW9uIHBhcnNpbmcsIHRleHQgd3JhcHBpbmcgYW5kIENTViBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tdGV4dHV0aWxzPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LXN0cmluZ29sZCIKK0ZJTEVTXyR7UE59LXRleHR1dGlscz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fY3N2LnNvICR7bGliZGlyfS9weXRob24yLjcvY3N2LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9vcHRwYXJzZS4qICR7bGliZGlyfS9weXRob24yLjcvdGV4dHdyYXAuKiAiCisKK1NVTU1BUllfJHtQTn0tdGhyZWFkaW5nPSJQeXRob24gdGhyZWFkaW5nICYgc3luY2hyb25pemF0aW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS10aHJlYWRpbmc9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyIKK0ZJTEVTXyR7UE59LXRocmVhZGluZz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9fdGhyZWFkaW5nX2xvY2FsLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9kdW1teV90aHJlYWQuKiAke2xpYmRpcn0vcHl0aG9uMi43L2R1bW15X3RocmVhZGluZy4qICR7bGliZGlyfS9weXRob24yLjcvbXV0ZXguKiAke2xpYmRpcn0vcHl0aG9uMi43L3RocmVhZGluZy4qICR7bGliZGlyfS9weXRob24yLjcvUXVldWUuKiAiCisKK1NVTU1BUllfJHtQTn0tdGtpbnRlcj0iUHl0aG9uIFRjbC9UayBiaW5kaW5ncyIKK1JERVBFTkRTXyR7UE59LXRraW50ZXI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS10a2ludGVyPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL190a2ludGVyLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLXRrICIKKworU1VNTUFSWV8ke1BOfS11bml0dGVzdD0iUHl0aG9uIHVuaXQgdGVzdGluZyBmcmFtZXdvcmsiCitSREVQRU5EU18ke1BOfS11bml0dGVzdD0iJHtQTn0tY29yZSAke1BOfS1zdHJpbmdvbGQgJHtQTn0tbGFuZyAke1BOfS1pbyAke1BOfS1kaWZmbGliICR7UE59LXBwcmludCAke1BOfS1zaGVsbCIKK0ZJTEVTXyR7UE59LXVuaXR0ZXN0PSIke2xpYmRpcn0vcHl0aG9uMi43L3VuaXR0ZXN0LyAiCisKK1NVTU1BUllfJHtQTn0tdW5peGFkbWluPSJQeXRob24gVW5peCBhZG1pbmlzdHJhdGlvbiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tdW5peGFkbWluPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tdW5peGFkbWluPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL25pcy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2dycC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3B3ZC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2dldHBhc3MuKiAiCisKK1NVTU1BUllfJHtQTn0teG1sPSJQeXRob24gYmFzaWMgWE1MIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS14bWw9IiR7UE59LWNvcmUgJHtQTn0tZWxlbWVudHRyZWUgJHtQTn0tcmUiCitGSUxFU18ke1BOfS14bWw9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvcHlleHBhdC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L3htbCAke2xpYmRpcn0vcHl0aG9uMi43L3htbGxpYi4qICIKKworU1VNTUFSWV8ke1BOfS14bWxycGM9IlB5dGhvbiBYTUwtUlBDIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS14bWxycGM9IiR7UE59LWNvcmUgJHtQTn0teG1sICR7UE59LW5ldHNlcnZlciAke1BOfS1sYW5nIgorRklMRVNfJHtQTn0teG1scnBjPSIke2xpYmRpcn0vcHl0aG9uMi43L3htbHJwY2xpYi4qICR7bGliZGlyfS9weXRob24yLjcvU2ltcGxlWE1MUlBDU2VydmVyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9Eb2NYTUxSUENTZXJ2ZXIuKiAiCisKK1NVTU1BUllfJHtQTn0temxpYj0iUHl0aG9uIHpsaWIgY29tcHJlc3Npb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXpsaWI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS16bGliPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3psaWIuc28gIgorCitTVU1NQVJZXyR7UE59LW1vZHVsZXM9IkFsbCBQeXRob24gbW9kdWxlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZXM9IiR7UE59LTJ0bzMgJHtQTn0tYXJncGFyc2UgJHtQTn0tYXVkaW8gJHtQTn0tYnNkZGIgJHtQTn0tY29kZWNzICR7UE59LWNvbXBpbGUgJHtQTn0tY29tcGlsZXIgJHtQTn0tY29tcHJlc3Npb24gJHtQTn0tY29udGV4dGxpYiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGlmZmxpYiAke1BOfS1kaXN0dXRpbHMgJHtQTn0tZG9jdGVzdCAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1lbWFpbCAke1BOfS1mY250bCAke1BOfS1nZGJtICR7UE59LWhvdHNob3QgJHtQTn0taHRtbCAke1BOfS1pZGxlICR7UE59LWltYWdlICR7UE59LWltcG9ydGxpYiAke1BOfS1pbyAke1BOfS1qc29uICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1tYWlsYm94ICR7UE59LW1hdGggJHtQTn0tbWltZSAke1BOfS1tbWFwICR7UE59LW11bHRpcHJvY2Vzc2luZyAke1BOfS1uZXRjbGllbnQgJHtQTn0tbmV0c2VydmVyICR7UE59LW51bWJlcnMgJHtQTn0tcGlja2xlICR7UE59LXBrZ3V0aWwgJHtQTn0tcHByaW50ICR7UE59LXByb2ZpbGUgJHtQTn0tcHlkb2MgJHtQTn0tcmUgJHtQTn0tcmVhZGxpbmUgJHtQTn0tcmVzb3VyY2UgJHtQTn0tcm9ib3RwYXJzZXIgJHtQTn0tc2hlbGwgJHtQTn0tc210cGQgJHtQTn0tc3FsaXRlMyAke1BOfS1zcWxpdGUzLXRlc3RzICR7UE59LXN0cmluZ29sZCAke1BOfS1zdWJwcm9jZXNzICR7UE59LXN5c2xvZyAke1BOfS10ZXJtaW5hbCAke1BOfS10ZXN0cyAke1BOfS10ZXh0dXRpbHMgJHtQTn0tdGhyZWFkaW5nICR7UE59LXRraW50ZXIgJHtQTn0tdW5pdHRlc3QgJHtQTn0tdW5peGFkbWluICR7UE59LXhtbCAke1BOfS14bWxycGMgJHtQTn0temxpYiAgIgorQUxMT1dfRU1QVFlfJHtQTn0tbW9kdWxlcyA9ICIxIgorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMy40LW1hbmlmZXN0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMy40LW1hbmlmZXN0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2UxNDkwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi0zLjQtbWFuaWZlc3QuaW5jCkBAIC0wLDAgKzEsMjY4IEBACisKKyMgV0FSTklORzogVGhpcyBmaWxlIGlzIEFVVE8gR0VORVJBVEVEOiBNYW51YWwgZWRpdHMgd2lsbCBiZSBsb3N0IG5leHQgdGltZSBJIHJlZ2VuZXJhdGUgdGhlIGZpbGUuCisjIEdlbmVyYXRvcjogJy4uLy4uLy4uL3NjcmlwdHMvY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMy40LnB5JyBWZXJzaW9uIDIwMTQwMTMxIChDKSAyMDAyLTIwMTAgTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWxhdWVyQHZhbmlsbGUtbWVkaWEuZGU+CisjIFZpc2l0IHRoZSBQeXRob24gZm9yIEVtYmVkZGVkIFN5c3RlbXMgU2l0ZSA9PiBodHRwOi8vd3d3LlZhbmlsbGUuZGUvcHJvamVjdHMvcHl0aG9uLnNweQorCisgCisKK1BST1ZJREVTKz0iJHtQTn0tMnRvMyAke1BOfS1hc3luY2lvICR7UE59LWF1ZGlvICR7UE59LWNvZGVjcyAke1BOfS1jb21waWxlICR7UE59LWNvbXByZXNzaW9uICR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tY3R5cGVzICR7UE59LWN1cnNlcyAke1BOfS1kYXRldGltZSAke1BOfS1kYiAke1BOfS1kZWJ1Z2dlciAke1BOfS1kZXYgJHtQTn0tZGlmZmxpYiAke1BOfS1kaXN0dXRpbHMgJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2RldiAke1BOfS1kb2N0ZXN0ICR7UE59LWVsZW1lbnR0cmVlICR7UE59LWVtYWlsICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taHRtbCAke1BOfS1pZGxlICR7UE59LWltYWdlICR7UE59LWltcG9ydGxpYiAke1BOfS1pbyAke1BOfS1qc29uICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1tYWlsYm94ICR7UE59LW1hdGggJHtQTn0tbWltZSAke1BOfS1tbWFwICR7UE59LW11bHRpcHJvY2Vzc2luZyAke1BOfS1uZXRjbGllbnQgJHtQTn0tbmV0c2VydmVyICR7UE59LW51bWJlcnMgJHtQTn0tcGlja2xlICR7UE59LXBrZ3V0aWwgJHtQTn0tcHByaW50ICR7UE59LXByb2ZpbGUgJHtQTn0tcHlkb2MgJHtQTn0tcmUgJHtQTn0tcmVhZGxpbmUgJHtQTn0tcmVwcmxpYiAke1BOfS1yZXNvdXJjZSAke1BOfS1zaGVsbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRlc3RzICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAiCisKK1BBQ0tBR0VTPSIke1BOfS1kYmcgJHtQTn0tMnRvMyAke1BOfS1hc3luY2lvICR7UE59LWF1ZGlvICR7UE59LWNvZGVjcyAke1BOfS1jb21waWxlICR7UE59LWNvbXByZXNzaW9uICR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tY3R5cGVzICR7UE59LWN1cnNlcyAke1BOfS1kYXRldGltZSAke1BOfS1kYiAke1BOfS1kZWJ1Z2dlciAke1BOfS1kZXYgJHtQTn0tZGlmZmxpYiAke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2ICR7UE59LWRpc3R1dGlscyAke1BOfS1kb2N0ZXN0ICR7UE59LWVsZW1lbnR0cmVlICR7UE59LWVtYWlsICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taHRtbCAke1BOfS1pZGxlICR7UE59LWltYWdlICR7UE59LWltcG9ydGxpYiAke1BOfS1pbyAke1BOfS1qc29uICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1tYWlsYm94ICR7UE59LW1hdGggJHtQTn0tbWltZSAke1BOfS1tbWFwICR7UE59LW11bHRpcHJvY2Vzc2luZyAke1BOfS1uZXRjbGllbnQgJHtQTn0tbmV0c2VydmVyICR7UE59LW51bWJlcnMgJHtQTn0tcGlja2xlICR7UE59LXBrZ3V0aWwgJHtQTn0tcHByaW50ICR7UE59LXByb2ZpbGUgJHtQTn0tcHlkb2MgJHtQTn0tcmUgJHtQTn0tcmVhZGxpbmUgJHtQTn0tcmVwcmxpYiAke1BOfS1yZXNvdXJjZSAke1BOfS1zaGVsbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRlc3RzICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAke1BOfS1tb2R1bGVzIgorCitTVU1NQVJZXyR7UE59LTJ0bzM9IlB5dGhvbiBhdXRvbWF0ZWQgUHl0aG9uIDIgdG8gMyBjb2RlIHRyYW5zbGF0b3IiCitSREVQRU5EU18ke1BOfS0ydG8zPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tMnRvMz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWIydG8zICIKKworU1VNTUFSWV8ke1BOfS1hc3luY2lvPSJQeXRob24gQXN5bmNocm9ub3VzIEkvTywgZXZlbnQgbG9vcCwgY29yb3V0aW5lcyBhbmQgdGFza3MiCitSREVQRU5EU18ke1BOfS1hc3luY2lvPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tYXN5bmNpbz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9hc3luY2lvICIKKworU1VNTUFSWV8ke1BOfS1hdWRpbz0iUHl0aG9uIEF1ZGlvIEhhbmRsaW5nIgorUkRFUEVORFNfJHtQTn0tYXVkaW89IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1hdWRpbz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC93YXZlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jaHVuay4qICR7bGliZGlyfS9weXRob24zLjQvc25kaGRyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9vc3NhdWRpb2Rldi4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvYXVkaW9vcC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvYXVkaW9kZXYuKiAke2xpYmRpcn0vcHl0aG9uMy40L3N1bmF1ZGlvLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zdW5hdS4qICR7bGliZGlyfS9weXRob24zLjQvdG9haWZmLiogIgorCitTVU1NQVJZXyR7UE59LWNvZGVjcz0iUHl0aG9uIGNvZGVjcywgZW5jb2RpbmdzICYgaTE4biBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY29kZWNzPSIke1BOfS1jb3JlICR7UE59LWxhbmciCitGSUxFU18ke1BOfS1jb2RlY3M9IiR7bGliZGlyfS9weXRob24zLjQvY29kZWNzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9lbmNvZGluZ3MgJHtsaWJkaXJ9L3B5dGhvbjMuNC9nZXR0ZXh0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9sb2NhbGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19sb2NhbGUuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19jb2RlY3MqICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX211bHRpYnl0ZWNvZGVjLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC91bmljb2RlZGF0YS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvc3RyaW5ncHJlcC4qICR7bGliZGlyfS9weXRob24zLjQveGRybGliLiogIgorCitTVU1NQVJZXyR7UE59LWNvbXBpbGU9IlB5dGhvbiBieXRlY29kZSBjb21waWxhdGlvbiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY29tcGlsZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWNvbXBpbGU9IiR7bGliZGlyfS9weXRob24zLjQvcHlfY29tcGlsZS4qICR7bGliZGlyfS9weXRob24zLjQvY29tcGlsZWFsbC4qICIKKworU1VNTUFSWV8ke1BOfS1jb21wcmVzc2lvbj0iUHl0aG9uIGhpZ2gtbGV2ZWwgY29tcHJlc3Npb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNvbXByZXNzaW9uPSIke1BOfS1jb3JlICR7UE59LWNvZGVjcyIKK0ZJTEVTXyR7UE59LWNvbXByZXNzaW9uPSIke2xpYmRpcn0vcHl0aG9uMy40L2d6aXAuKiAke2xpYmRpcn0vcHl0aG9uMy40L3ppcGZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3RhcmZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2J6Mi4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1jb3JlPSJQeXRob24gaW50ZXJwcmV0ZXIgYW5kIGNvcmUgbW9kdWxlcyIKK1JERVBFTkRTXyR7UE59LWNvcmU9IiR7UE59LWxhbmcgJHtQTn0tcmUgJHtQTn0tcmVwcmxpYiAke1BOfS1jb2RlY3MgJHtQTn0taW8gJHtQTn0tbWF0aCIKK0ZJTEVTXyR7UE59LWNvcmU9IiR7bGliZGlyfS9weXRob24zLjQvX19mdXR1cmVfXy4qICR7bGliZGlyfS9weXRob24zLjQvX2FiY29sbC4qICR7bGliZGlyfS9weXRob24zLjQvYWJjLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb3B5LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb3B5cmVnLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9Db25maWdQYXJzZXIuKiAke2xpYmRpcn0vcHl0aG9uMy40L2dlbmVyaWNwYXRoLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9nZXRvcHQuKiAke2xpYmRpcn0vcHl0aG9uMy40L2xpbmVjYWNoZS4qICR7bGliZGlyfS9weXRob24zLjQvbmV3LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9vcy4qICR7bGliZGlyfS9weXRob24zLjQvcG9zaXhwYXRoLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zdHJ1Y3QuKiAke2xpYmRpcn0vcHl0aG9uMy40L3dhcm5pbmdzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zaXRlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zdGF0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9Vc2VyRGljdC4qICR7bGliZGlyfS9weXRob24zLjQvVXNlckxpc3QuKiAke2xpYmRpcn0vcHl0aG9uMy40L1VzZXJTdHJpbmcuKiAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2JpbmFzY2lpLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fc3RydWN0Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC90aW1lLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC94cmVhZGxpbmVzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC90eXBlcy4qICR7bGliZGlyfS9weXRob24zLjQvcGxhdGZvcm0uKiAke2JpbmRpcn0vcHl0aG9uKiAke2xpYmRpcn0vcHl0aG9uMy40L193ZWFrcmVmc2V0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zeXNjb25maWcuKiAke2xpYmRpcn0vcHl0aG9uMy40L19zeXNjb25maWdkYXRhLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb25maWcvTWFrZWZpbGUgJHtpbmNsdWRlZGlyfS9weXRob24ke1BZVEhPTl9CSU5BQkl9L3B5Y29uZmlnKi5oICR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbGxlY3Rpb25zICR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L19jb2xsZWN0aW9uc19hYmMuKiAke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9fc2l0ZWJ1aWx0aW5zLiogJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vc2l0ZWN1c3RvbWl6ZS5weSAiCisKK1NVTU1BUllfJHtQTn0tY3J5cHQ9IlB5dGhvbiBiYXNpYyBjcnlwdG9ncmFwaGljIGFuZCBoYXNoaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jcnlwdD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWNyeXB0PSIke2xpYmRpcn0vcHl0aG9uMy40L2hhc2hsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L21kNS4qICR7bGliZGlyfS9weXRob24zLjQvc2hhLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9jcnlwdC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2hhc2hsaWIuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19zaGEyNTYuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19zaGE1MTIuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tY3R5cGVzPSJQeXRob24gQyB0eXBlcyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY3R5cGVzPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tY3R5cGVzPSIke2xpYmRpcn0vcHl0aG9uMy40L2N0eXBlcyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19jdHlwZXMuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19jdHlwZXNfdGVzdC4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1jdXJzZXM9IlB5dGhvbiBjdXJzZXMgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWN1cnNlcz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWN1cnNlcz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9jdXJzZXMgJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fY3Vyc2VzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fY3Vyc2VzX3BhbmVsLiouc28gIgorCitTVU1NQVJZXyR7UE59LWRhdGV0aW1lPSJQeXRob24gY2FsZW5kYXIgYW5kIHRpbWUgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWRhdGV0aW1lPSIke1BOfS1jb3JlICR7UE59LWNvZGVjcyIKK0ZJTEVTXyR7UE59LWRhdGV0aW1lPSIke2xpYmRpcn0vcHl0aG9uMy40L19zdHJwdGltZS4qICR7bGliZGlyfS9weXRob24zLjQvY2FsZW5kYXIuKiAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2RhdGV0aW1lLiouc28gIgorCitTVU1NQVJZXyR7UE59LWRiPSJQeXRob24gZmlsZS1iYXNlZCBkYXRhYmFzZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tZGI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1kYj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9hbnlkYm0uKiAke2xpYmRpcn0vcHl0aG9uMy40L2R1bWJkYm0uKiAke2xpYmRpcn0vcHl0aG9uMy40L3doaWNoZGIuKiAke2xpYmRpcn0vcHl0aG9uMy40L2RibSAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19kYm0uKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tZGVidWdnZXI9IlB5dGhvbiBkZWJ1Z2dlciIKK1JERVBFTkRTXyR7UE59LWRlYnVnZ2VyPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcmUgJHtQTn0tc3RyaW5nb2xkICR7UE59LXNoZWxsICR7UE59LXBwcmludCIKK0ZJTEVTXyR7UE59LWRlYnVnZ2VyPSIke2xpYmRpcn0vcHl0aG9uMy40L2JkYi4qICR7bGliZGlyfS9weXRob24zLjQvcGRiLiogIgorCitTVU1NQVJZXyR7UE59LWRldj0iUHl0aG9uIGRldmVsb3BtZW50IHBhY2thZ2UiCitSREVQRU5EU18ke1BOfS1kZXY9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1kZXY9IiR7aW5jbHVkZWRpcn0gJHtsaWJkaXJ9L2xpYioke1NPTElCU0RFVn0gJHtsaWJkaXJ9LyoubGEgJHtsaWJkaXJ9LyouYSAke2xpYmRpcn0vKi5vICR7bGliZGlyfS9wa2djb25maWcgJHtiYXNlX2xpYmRpcn0vKi5hICR7YmFzZV9saWJkaXJ9LyoubyAke2RhdGFkaXJ9L2FjbG9jYWwgJHtkYXRhZGlyfS9wa2djb25maWcgIgorCitTVU1NQVJZXyR7UE59LWRpZmZsaWI9IlB5dGhvbiBoZWxwZXJzIGZvciBjb21wdXRpbmcgZGVsdGFzIGJldHdlZW4gb2JqZWN0cyIKK1JERVBFTkRTXyR7UE59LWRpZmZsaWI9IiR7UE59LWxhbmcgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1kaWZmbGliPSIke2xpYmRpcn0vcHl0aG9uMy40L2RpZmZsaWIuKiAiCisKK1NVTU1BUllfJHtQTn0tZGlzdHV0aWxzPSJQeXRob24gRGlzdHJpYnV0aW9uIFV0aWxpdGllcyIKK1JERVBFTkRTXyR7UE59LWRpc3R1dGlscz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWRpc3R1dGlscz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb25maWcgJHtsaWJkaXJ9L3B5dGhvbjMuNC9kaXN0dXRpbHMgIgorCitTVU1NQVJZXyR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXY9IlB5dGhvbiBkaXN0cmlidXRpb24gdXRpbGl0aWVzIChzdGF0aWMgbGlicmFyaWVzKSIKK1JERVBFTkRTXyR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXY9IiR7UE59LWRpc3R1dGlscyIKK0ZJTEVTXyR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXY9IiR7bGliZGlyfS9weXRob24zLjQvY29uZmlnL2xpYiouYSAiCisKK1NVTU1BUllfJHtQTn0tZG9jdGVzdD0iUHl0aG9uIGZyYW1ld29yayBmb3IgcnVubmluZyBleGFtcGxlcyBpbiBkb2NzdHJpbmdzIgorUkRFUEVORFNfJHtQTn0tZG9jdGVzdD0iJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LWlvICR7UE59LXJlICR7UE59LXVuaXR0ZXN0ICR7UE59LWRlYnVnZ2VyICR7UE59LWRpZmZsaWIiCitGSUxFU18ke1BOfS1kb2N0ZXN0PSIke2xpYmRpcn0vcHl0aG9uMy40L2RvY3Rlc3QuKiAiCisKK1NVTU1BUllfJHtQTn0tZWxlbWVudHRyZWU9IlB5dGhvbiBlbGVtZW50cmVlIgorUkRFUEVORFNfJHtQTn0tZWxlbWVudHRyZWU9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1lbGVtZW50dHJlZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fZWxlbWVudHRyZWUuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tZW1haWw9IlB5dGhvbiBlbWFpbCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tZW1haWw9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tbWltZSAke1BOfS1hdWRpbyAke1BOfS1pbWFnZSAke1BOfS1uZXRjbGllbnQiCitGSUxFU18ke1BOfS1lbWFpbD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9pbWFwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9lbWFpbCAiCisKK1NVTU1BUllfJHtQTn0tZmNudGw9IlB5dGhvbidzIGZjbnRsIGludGVyZmFjZSIKK1JERVBFTkRTXyR7UE59LWZjbnRsPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZmNudGw9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvZmNudGwuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tZ2RibT0iUHl0aG9uIEdOVSBkYXRhYmFzZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tZ2RibT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWdkYm09IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2dkYm0uKi5zbyAiCisKK1NVTU1BUllfJHtQTn0taHRtbD0iUHl0aG9uIEhUTUwgcHJvY2Vzc2luZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0taHRtbD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWh0bWw9IiR7bGliZGlyfS9weXRob24zLjQvZm9ybWF0dGVyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9odG1sZW50aXR5ZGVmcy4qICR7bGliZGlyfS9weXRob24zLjQvaHRtbGxpYi4qICR7bGliZGlyfS9weXRob24zLjQvbWFya3VwYmFzZS4qICR7bGliZGlyfS9weXRob24zLjQvc2dtbGxpYi4qICR7bGliZGlyfS9weXRob24zLjQvSFRNTFBhcnNlci4qICIKKworU1VNTUFSWV8ke1BOfS1pZGxlPSJQeXRob24gSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCIKK1JERVBFTkRTXyR7UE59LWlkbGU9IiR7UE59LWNvcmUgJHtQTn0tdGtpbnRlciIKK0ZJTEVTXyR7UE59LWlkbGU9IiR7YmluZGlyfS9pZGxlICR7bGliZGlyfS9weXRob24zLjQvaWRsZWxpYiAiCisKK1NVTU1BUllfJHtQTn0taW1hZ2U9IlB5dGhvbiBncmFwaGljYWwgaW1hZ2UgaGFuZGxpbmciCitSREVQRU5EU18ke1BOfS1pbWFnZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWltYWdlPSIke2xpYmRpcn0vcHl0aG9uMy40L2NvbG9yc3lzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9pbWdoZHIuKiAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2ltYWdlb3AuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3JnYmltZy4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1pbXBvcnRsaWI9IlB5dGhvbiBpbXBvcnQgaW1wbGVtZW50YXRpb24gbGlicmFyeSIKK1JERVBFTkRTXyR7UE59LWltcG9ydGxpYj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWltcG9ydGxpYj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9pbXBvcnRsaWIgIgorCitTVU1NQVJZXyR7UE59LWlvPSJQeXRob24gbG93LWxldmVsIEkvTyIKK1JERVBFTkRTXyR7UE59LWlvPSIke1BOfS1jb3JlICR7UE59LW1hdGgiCitGSUxFU18ke1BOfS1pbz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fc29ja2V0Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9faW8uKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19zc2wuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3NlbGVjdC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvdGVybWlvcy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvY1N0cmluZ0lPLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9waXBlcy4qICR7bGliZGlyfS9weXRob24zLjQvc29ja2V0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zc2wuKiAke2xpYmRpcn0vcHl0aG9uMy40L3RlbXBmaWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9TdHJpbmdJTy4qICR7bGliZGlyfS9weXRob24zLjQvaW8uKiAke2xpYmRpcn0vcHl0aG9uMy40L19weWlvLiogIgorCitTVU1NQVJZXyR7UE59LWpzb249IlB5dGhvbiBKU09OIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1qc29uPSIke1BOfS1jb3JlICR7UE59LW1hdGggJHtQTn0tcmUiCitGSUxFU18ke1BOfS1qc29uPSIke2xpYmRpcn0vcHl0aG9uMy40L2pzb24gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fanNvbi4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1sYW5nPSJQeXRob24gbG93LWxldmVsIGxhbmd1YWdlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1sYW5nPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tbGFuZz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fYmlzZWN0Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fY29sbGVjdGlvbnMuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19oZWFwcS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX3dlYWtyZWYuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19mdW5jdG9vbHMuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2FycmF5Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9pdGVydG9vbHMuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL29wZXJhdG9yLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9wYXJzZXIuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2F0ZXhpdC4qICR7bGliZGlyfS9weXRob24zLjQvYmlzZWN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb2RlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb2Rlb3AuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NvbGxlY3Rpb25zLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9fY29sbGVjdGlvbnNfYWJjLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9kaXMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2Z1bmN0b29scy4qICR7bGliZGlyfS9weXRob24zLjQvaGVhcHEuKiAke2xpYmRpcn0vcHl0aG9uMy40L2luc3BlY3QuKiAke2xpYmRpcn0vcHl0aG9uMy40L2tleXdvcmQuKiAke2xpYmRpcn0vcHl0aG9uMy40L29wY29kZS4qICR7bGliZGlyfS9weXRob24zLjQvc3ltYm9sLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9yZXByLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90b2tlbi4qICR7bGliZGlyfS9weXRob24zLjQvdG9rZW5pemUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3RyYWNlYmFjay4qICR7bGliZGlyfS9weXRob24zLjQvd2Vha3JlZi4qICIKKworU1VNTUFSWV8ke1BOfS1sb2dnaW5nPSJQeXRob24gbG9nZ2luZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbG9nZ2luZz0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXBpY2tsZSAke1BOfS1zdHJpbmdvbGQiCitGSUxFU18ke1BOfS1sb2dnaW5nPSIke2xpYmRpcn0vcHl0aG9uMy40L2xvZ2dpbmcgIgorCitTVU1NQVJZXyR7UE59LW1haWxib3g9IlB5dGhvbiBtYWlsYm94IGZvcm1hdCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbWFpbGJveD0iJHtQTn0tY29yZSAke1BOfS1taW1lIgorRklMRVNfJHtQTn0tbWFpbGJveD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9tYWlsYm94LiogIgorCitTVU1NQVJZXyR7UE59LW1hdGg9IlB5dGhvbiBtYXRoIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1tYXRoPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tbWF0aD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9jbWF0aC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvbWF0aC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX3JhbmRvbS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvcmFuZG9tLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zZXRzLiogIgorCitTVU1NQVJZXyR7UE59LW1pbWU9IlB5dGhvbiBNSU1FIGhhbmRsaW5nIEFQSXMiCitSREVQRU5EU18ke1BOfS1taW1lPSIke1BOfS1jb3JlICR7UE59LWlvIgorRklMRVNfJHtQTn0tbWltZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9taW1ldG9vbHMuKiAke2xpYmRpcn0vcHl0aG9uMy40L3V1LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9xdW9wcmkuKiAke2xpYmRpcn0vcHl0aG9uMy40L3JmYzgyMi4qICR7bGliZGlyfS9weXRob24zLjQvTWltZVdyaXRlci4qICIKKworU1VNTUFSWV8ke1BOfS1tbWFwPSJQeXRob24gbWVtb3J5LW1hcHBlZCBmaWxlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1tbWFwPSIke1BOfS1jb3JlICR7UE59LWlvIgorRklMRVNfJHtQTn0tbW1hcD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9tbWFwLiouc28gIgorCitTVU1NQVJZXyR7UE59LW11bHRpcHJvY2Vzc2luZz0iUHl0aG9uIG11bHRpcHJvY2Vzc2luZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbXVsdGlwcm9jZXNzaW5nPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcGlja2xlICR7UE59LXRocmVhZGluZyAke1BOfS1jdHlwZXMgJHtQTn0tbW1hcCIKK0ZJTEVTXyR7UE59LW11bHRpcHJvY2Vzc2luZz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fbXVsdGlwcm9jZXNzaW5nLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9tdWx0aXByb2Nlc3NpbmcgIgorCitTVU1NQVJZXyR7UE59LW5ldGNsaWVudD0iUHl0aG9uIEludGVybmV0IFByb3RvY29sIGNsaWVudHMiCitSREVQRU5EU18ke1BOfS1uZXRjbGllbnQ9IiR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tZGF0ZXRpbWUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1pbWUiCitGSUxFU18ke1BOfS1uZXRjbGllbnQ9IiR7bGliZGlyfS9weXRob24zLjQvKkNvb2tpZSouKiAke2xpYmRpcn0vcHl0aG9uMy40L2Jhc2U2NC4qICR7bGliZGlyfS9weXRob24zLjQvY29va2llbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9mdHBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L2dvcGhlcmxpYi4qICR7bGliZGlyfS9weXRob24zLjQvaG1hYy4qICR7bGliZGlyfS9weXRob24zLjQvaHR0cGxpYi4qICR7bGliZGlyfS9weXRob24zLjQvbWltZXR5cGVzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9ubnRwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9wb3BsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NtdHBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L3RlbG5ldGxpYi4qICR7bGliZGlyfS9weXRob24zLjQvdXJsbGliICR7bGliZGlyfS9weXRob24zLjQvdXVpZC4qICR7bGliZGlyfS9weXRob24zLjQvcmZjODIyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9taW1ldG9vbHMuKiAiCisKK1NVTU1BUllfJHtQTn0tbmV0c2VydmVyPSJQeXRob24gSW50ZXJuZXQgUHJvdG9jb2wgc2VydmVycyIKK1JERVBFTkRTXyR7UE59LW5ldHNlcnZlcj0iJHtQTn0tY29yZSAke1BOfS1uZXRjbGllbnQgJHtQTn0tc2hlbGwgJHtQTn0tdGhyZWFkaW5nIgorRklMRVNfJHtQTn0tbmV0c2VydmVyPSIke2xpYmRpcn0vcHl0aG9uMy40L2NnaS4qICR7bGliZGlyfS9weXRob24zLjQvKkhUVFBTZXJ2ZXIuKiAke2xpYmRpcn0vcHl0aG9uMy40L1NvY2tldFNlcnZlci4qICIKKworU1VNTUFSWV8ke1BOfS1udW1iZXJzPSJQeXRob24gbnVtYmVyIEFQSXMiCitSREVQRU5EU18ke1BOfS1udW1iZXJzPSIke1BOfS1jb3JlICR7UE59LWxhbmcgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1udW1iZXJzPSIke2xpYmRpcn0vcHl0aG9uMy40L2RlY2ltYWwuKiAke2xpYmRpcn0vcHl0aG9uMy40L2ZyYWN0aW9ucy4qICR7bGliZGlyfS9weXRob24zLjQvbnVtYmVycy4qICIKKworU1VNTUFSWV8ke1BOfS1waWNrbGU9IlB5dGhvbiBzZXJpYWxpc2F0aW9uL3BlcnNpc3RlbmNlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1waWNrbGU9IiR7UE59LWNvcmUgJHtQTn0tY29kZWNzICR7UE59LWlvICR7UE59LXJlIgorRklMRVNfJHtQTn0tcGlja2xlPSIke2xpYmRpcn0vcHl0aG9uMy40L3BpY2tsZS4qICR7bGliZGlyfS9weXRob24zLjQvc2hlbHZlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9jUGlja2xlLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9waWNrbGV0b29scy4qICIKKworU1VNTUFSWV8ke1BOfS1wa2d1dGlsPSJQeXRob24gcGFja2FnZSBleHRlbnNpb24gdXRpbGl0eSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcGtndXRpbD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXBrZ3V0aWw9IiR7bGliZGlyfS9weXRob24zLjQvcGtndXRpbC4qICIKKworU1VNTUFSWV8ke1BOfS1wcHJpbnQ9IlB5dGhvbiBwcmV0dHktcHJpbnQgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXBwcmludD0iJHtQTn0tY29yZSAke1BOfS1pbyIKK0ZJTEVTXyR7UE59LXBwcmludD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9wcHJpbnQuKiAiCisKK1NVTU1BUllfJHtQTn0tcHJvZmlsZT0iUHl0aG9uIGJhc2ljIHBlcmZvcm1hbmNlIHByb2ZpbGluZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcHJvZmlsZT0iJHtQTn0tY29yZSAke1BOfS10ZXh0dXRpbHMiCitGSUxFU18ke1BOfS1wcm9maWxlPSIke2xpYmRpcn0vcHl0aG9uMy40L3Byb2ZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3BzdGF0cy4qICR7bGliZGlyfS9weXRob24zLjQvY1Byb2ZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19sc3Byb2YuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tcHlkb2M9IlB5dGhvbiBpbnRlcmFjdGl2ZSBoZWxwIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1weWRvYz0iJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LXN0cmluZ29sZCAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXB5ZG9jPSIke2JpbmRpcn0vcHlkb2MgJHtsaWJkaXJ9L3B5dGhvbjMuNC9weWRvYy4qICR7bGliZGlyfS9weXRob24zLjQvcHlkb2NfZGF0YSAiCisKK1NVTU1BUllfJHtQTn0tcmU9IlB5dGhvbiBSZWd1bGFyIEV4cHJlc3Npb24gQVBJcyIKK1JERVBFTkRTXyR7UE59LXJlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tcmU9IiR7bGliZGlyfS9weXRob24zLjQvcmUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NyZS4qICR7bGliZGlyfS9weXRob24zLjQvc3JlX2NvbXBpbGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NyZV9jb25zdGFudHMqICR7bGliZGlyfS9weXRob24zLjQvc3JlX3BhcnNlLiogIgorCitTVU1NQVJZXyR7UE59LXJlYWRsaW5lPSJQeXRob24gcmVhZGxpbmUgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXJlYWRsaW5lPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tcmVhZGxpbmU9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvcmVhZGxpbmUuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L3JsY29tcGxldGVyLiogIgorCitTVU1NQVJZXyR7UE59LXJlcHJsaWI9IlB5dGhvbiBhbHRlcm5hdGUgcmVwcigpIGltcGxlbWVudGF0aW9uIgorUkRFUEVORFNfJHtQTn0tcmVwcmxpYj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXJlcHJsaWI9IiR7bGliZGlyfS9weXRob24zLjQvcmVwcmxpYi5weSAiCisKK1NVTU1BUllfJHtQTn0tcmVzb3VyY2U9IlB5dGhvbiByZXNvdXJjZSBjb250cm9sIGludGVyZmFjZSIKK1JERVBFTkRTXyR7UE59LXJlc291cmNlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tcmVzb3VyY2U9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvcmVzb3VyY2UuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tc2hlbGw9IlB5dGhvbiBzaGVsbC1saWtlIGZ1bmN0aW9uYWxpdHkiCitSREVQRU5EU18ke1BOfS1zaGVsbD0iJHtQTn0tY29yZSAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXNoZWxsPSIke2xpYmRpcn0vcHl0aG9uMy40L2NtZC4qICR7bGliZGlyfS9weXRob24zLjQvY29tbWFuZHMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2RpcmNhY2hlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9mbm1hdGNoLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9nbG9iLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9wb3BlbjIuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NobGV4LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zaHV0aWwuKiAiCisKK1NVTU1BUllfJHtQTn0tc210cGQ9IlB5dGhvbiBTaW1wbGUgTWFpbCBUcmFuc3BvcnQgRGFlbW9uIgorUkRFUEVORFNfJHtQTn0tc210cGQ9IiR7UE59LWNvcmUgJHtQTn0tbmV0c2VydmVyICR7UE59LWVtYWlsICR7UE59LW1pbWUiCitGSUxFU18ke1BOfS1zbXRwZD0iJHtiaW5kaXJ9L3NtdHBkLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zbXRwZC4qICIKKworU1VNTUFSWV8ke1BOfS1zcWxpdGUzPSJQeXRob24gU3FsaXRlMyBkYXRhYmFzZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tc3FsaXRlMz0iJHtQTn0tY29yZSAke1BOfS1kYXRldGltZSAke1BOfS1sYW5nICR7UE59LWNyeXB0ICR7UE59LWlvICR7UE59LXRocmVhZGluZyIKK0ZJTEVTXyR7UE59LXNxbGl0ZTM9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX3NxbGl0ZTMuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L3NxbGl0ZTMvZGJhcGkyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zcWxpdGUzL19faW5pdF9fLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zcWxpdGUzL2R1bXAuKiAiCisKK1NVTU1BUllfJHtQTn0tc3FsaXRlMy10ZXN0cz0iUHl0aG9uIFNxbGl0ZTMgZGF0YWJhc2Ugc3VwcG9ydCB0ZXN0cyIKK1JERVBFTkRTXyR7UE59LXNxbGl0ZTMtdGVzdHM9IiR7UE59LWNvcmUgJHtQTn0tc3FsaXRlMyIKK0ZJTEVTXyR7UE59LXNxbGl0ZTMtdGVzdHM9IiR7bGliZGlyfS9weXRob24zLjQvc3FsaXRlMy90ZXN0ICIKKworU1VNTUFSWV8ke1BOfS1zdHJpbmdvbGQ9IlB5dGhvbiBzdHJpbmcgQVBJcyBbZGVwcmVjYXRlZF0iCitSREVQRU5EU18ke1BOfS1zdHJpbmdvbGQ9IiR7UE59LWNvcmUgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1zdHJpbmdvbGQ9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvc3Ryb3AuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L3N0cmluZy4qICR7bGliZGlyfS9weXRob24zLjQvc3RyaW5nb2xkLiogIgorCitTVU1NQVJZXyR7UE59LXN1YnByb2Nlc3M9IlB5dGhvbiBzdWJwcm9jZXNzIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1zdWJwcm9jZXNzPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LWZjbnRsICR7UE59LXBpY2tsZSIKK0ZJTEVTXyR7UE59LXN1YnByb2Nlc3M9IiR7bGliZGlyfS9weXRob24zLjQvc3VicHJvY2Vzcy4qICIKKworU1VNTUFSWV8ke1BOfS1zeXNsb2c9IlB5dGhvbiBzeXNsb2cgaW50ZXJmYWNlIgorUkRFUEVORFNfJHtQTn0tc3lzbG9nPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tc3lzbG9nPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3N5c2xvZy4qLnNvICIKKworU1VNTUFSWV8ke1BOfS10ZXJtaW5hbD0iUHl0aG9uIHRlcm1pbmFsIGNvbnRyb2xsaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS10ZXJtaW5hbD0iJHtQTn0tY29yZSAke1BOfS1pbyIKK0ZJTEVTXyR7UE59LXRlcm1pbmFsPSIke2xpYmRpcn0vcHl0aG9uMy40L3B0eS4qICR7bGliZGlyfS9weXRob24zLjQvdHR5LiogIgorCitTVU1NQVJZXyR7UE59LXRlc3RzPSJQeXRob24gdGVzdHMiCitSREVQRU5EU18ke1BOfS10ZXN0cz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXRlc3RzPSIke2xpYmRpcn0vcHl0aG9uMy40L3Rlc3QgIgorCitTVU1NQVJZXyR7UE59LXRleHR1dGlscz0iUHl0aG9uIG9wdGlvbiBwYXJzaW5nLCB0ZXh0IHdyYXBwaW5nIGFuZCBDU1Ygc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXRleHR1dGlscz0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1zdHJpbmdvbGQiCitGSUxFU18ke1BOfS10ZXh0dXRpbHM9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2Nzdi4qLnNvICR7bGliZGlyfS9weXRob24zLjQvY3N2LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9vcHRwYXJzZS4qICR7bGliZGlyfS9weXRob24zLjQvdGV4dHdyYXAuKiAiCisKK1NVTU1BUllfJHtQTn0tdGhyZWFkaW5nPSJQeXRob24gdGhyZWFkaW5nICYgc3luY2hyb25pemF0aW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS10aHJlYWRpbmc9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyIKK0ZJTEVTXyR7UE59LXRocmVhZGluZz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9fdGhyZWFkaW5nX2xvY2FsLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9kdW1teV90aHJlYWQuKiAke2xpYmRpcn0vcHl0aG9uMy40L2R1bW15X3RocmVhZGluZy4qICR7bGliZGlyfS9weXRob24zLjQvbXV0ZXguKiAke2xpYmRpcn0vcHl0aG9uMy40L3RocmVhZGluZy4qICR7bGliZGlyfS9weXRob24zLjQvUXVldWUuKiAiCisKK1NVTU1BUllfJHtQTn0tdGtpbnRlcj0iUHl0aG9uIFRjbC9UayBiaW5kaW5ncyIKK1JERVBFTkRTXyR7UE59LXRraW50ZXI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS10a2ludGVyPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL190a2ludGVyLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItdGsgJHtsaWJkaXJ9L3B5dGhvbjMuNC90a2ludGVyICIKKworU1VNTUFSWV8ke1BOfS11bml0dGVzdD0iUHl0aG9uIHVuaXQgdGVzdGluZyBmcmFtZXdvcmsiCitSREVQRU5EU18ke1BOfS11bml0dGVzdD0iJHtQTn0tY29yZSAke1BOfS1zdHJpbmdvbGQgJHtQTn0tbGFuZyAke1BOfS1pbyAke1BOfS1kaWZmbGliICR7UE59LXBwcmludCAke1BOfS1zaGVsbCIKK0ZJTEVTXyR7UE59LXVuaXR0ZXN0PSIke2xpYmRpcn0vcHl0aG9uMy40L3VuaXR0ZXN0LyAiCisKK1NVTU1BUllfJHtQTn0tdW5peGFkbWluPSJQeXRob24gVW5peCBhZG1pbmlzdHJhdGlvbiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tdW5peGFkbWluPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tdW5peGFkbWluPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL25pcy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvZ3JwLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9wd2QuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2dldHBhc3MuKiAiCisKK1NVTU1BUllfJHtQTn0teG1sPSJQeXRob24gYmFzaWMgWE1MIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS14bWw9IiR7UE59LWNvcmUgJHtQTn0tZWxlbWVudHRyZWUgJHtQTn0tcmUiCitGSUxFU18ke1BOfS14bWw9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvcHlleHBhdC4qLnNvICR7bGliZGlyfS9weXRob24zLjQveG1sICR7bGliZGlyfS9weXRob24zLjQveG1sbGliLiogIgorCitTVU1NQVJZXyR7UE59LXhtbHJwYz0iUHl0aG9uIFhNTC1SUEMgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXhtbHJwYz0iJHtQTn0tY29yZSAke1BOfS14bWwgJHtQTn0tbmV0c2VydmVyICR7UE59LWxhbmciCitGSUxFU18ke1BOfS14bWxycGM9IiR7bGliZGlyfS9weXRob24zLjQveG1scnBjbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9TaW1wbGVYTUxSUENTZXJ2ZXIuKiAke2xpYmRpcn0vcHl0aG9uMy40L0RvY1hNTFJQQ1NlcnZlci4qICR7bGliZGlyfS9weXRob24zLjQveG1scnBjICIKKworU1VNTUFSWV8ke1BOfS1tb2R1bGVzPSJBbGwgUHl0aG9uIG1vZHVsZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGVzPSIke1BOfS0ydG8zICR7UE59LWFzeW5jaW8gJHtQTn0tYXVkaW8gJHtQTn0tY29kZWNzICR7UE59LWNvbXBpbGUgJHtQTn0tY29tcHJlc3Npb24gJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1jdHlwZXMgJHtQTn0tY3Vyc2VzICR7UE59LWRhdGV0aW1lICR7UE59LWRiICR7UE59LWRlYnVnZ2VyICR7UE59LWRpZmZsaWIgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRvY3Rlc3QgJHtQTn0tZWxlbWVudHRyZWUgJHtQTn0tZW1haWwgJHtQTn0tZmNudGwgJHtQTn0tZ2RibSAke1BOfS1odG1sICR7UE59LWlkbGUgJHtQTn0taW1hZ2UgJHtQTn0taW1wb3J0bGliICR7UE59LWlvICR7UE59LWpzb24gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1haWxib3ggJHtQTn0tbWF0aCAke1BOfS1taW1lICR7UE59LW1tYXAgJHtQTn0tbXVsdGlwcm9jZXNzaW5nICR7UE59LW5ldGNsaWVudCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbnVtYmVycyAke1BOfS1waWNrbGUgJHtQTn0tcGtndXRpbCAke1BOfS1wcHJpbnQgJHtQTn0tcHJvZmlsZSAke1BOfS1weWRvYyAke1BOfS1yZSAke1BOfS1yZWFkbGluZSAke1BOfS1yZXBybGliICR7UE59LXJlc291cmNlICR7UE59LXNoZWxsICR7UE59LXNtdHBkICR7UE59LXNxbGl0ZTMgJHtQTn0tc3FsaXRlMy10ZXN0cyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc3VicHJvY2VzcyAke1BOfS1zeXNsb2cgJHtQTn0tdGVybWluYWwgJHtQTn0tdGVzdHMgJHtQTn0tdGV4dHV0aWxzICR7UE59LXRocmVhZGluZyAke1BOfS10a2ludGVyICR7UE59LXVuaXR0ZXN0ICR7UE59LXVuaXhhZG1pbiAke1BOfS14bWwgJHtQTn0teG1scnBjICAiCitBTExPV19FTVBUWV8ke1BOfS1tb2R1bGVzID0gIjEiCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1hc3luY18wLjYuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYXN5bmNfMC42LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkMGIwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYXN5bmNfMC42LjIuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJQeXRob24gZnJhbWV3b3JrIHRvIHByb2Nlc3MgaW50ZXJkZXBlbmRlbnQgdGFza3MgaW4gYSBwb29sIG9mIHdvcmtlcnMiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0aHViLmNvbS9naXRweXRob24tZGV2ZWxvcGVycy9hc3luYyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9QS0ctSU5GTztiZWdpbmxpbmU9ODtlbmRsaW5lPTg7bWQ1PTg4ZGY4ZTc4YjllZGZkNzQ0OTUzODYyMTc5ZjJkMTRlIgorCitTUkNfVVJJID0gImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL2EvYXN5bmMvYXN5bmMtJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjliMDZiNTk5N2RlMjE1NGYzYmMwMjczZjgwYmNlZjZiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFjNjg5NGQ4NzZlNDU4NzhmYWFlNDkzYjBjZjYxZDBlMjhlYzQxNzMzNDQ0OGFjMGE2ZWEyMjI5ZDgzNDMwNTEiCisKK1MgPSAiJHtXT1JLRElSfS9hc3luYy0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi10aHJlYWRpbmcgcHl0aG9uLWxhbmciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kYnVzXzEuMi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kYnVzXzEuMi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTRkY2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWRidXNfMS4yLjAuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJQeXRob24gYmluZGluZ3MgZm9yIHRoZSBEQnVzIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiBzeXN0ZW0iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL1NvZnR3YXJlL2RidXMiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTBiODMwNDdjZTllOTQ4YjY3YzBmYWNjNWYyMzM0NzZhIgorREVQRU5EUyA9ICJleHBhdCBkYnVzIGRidXMtZ2xpYiB2aXJ0dWFsL2xpYmludGwgcHl0aG9uLXB5cmV4LW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvZGJ1cy1weXRob24vZGJ1cy1weXRob24tJHtQVn0udGFyLmd6IFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImIwOWNkMmQxYTA1N2NjNDMyY2U5NDRkZTNmYzA2YmY3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUxMmM2YzhiMmJmM2E5MzAyZjc1MTY2OTUyY2JlNDFkNmIzOGMzNDQxYmJjNjc2N2RiZDQ5ODk0MjMxNmM2ZGYiCitTID0gIiR7V09SS0RJUn0vZGJ1cy1weXRob24tJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzLWJhc2UgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID89ICIiCitQQUNLQUdFQ09ORklHW2RvY3NdID0gIi0tZW5hYmxlLWh0bWwtZG9jcywtLWRpc2FibGUtaHRtbC1kb2NzLHB5dGhvbi1kb2N1dGlscy1uYXRpdmUiCitQQUNLQUdFQ09ORklHW2FwaS1kb2NzXSA9ICItLWVuYWJsZS1hcGktZG9jcywtLWRpc2FibGUtYXBpLWRvY3MscHl0aG9uLWRvY3V0aWxzLW5hdGl2ZSBweXRob24tZXB5ZG9jLW5hdGl2ZSIKKworZXhwb3J0IEJVSUxEX1NZUworZXhwb3J0IEhPU1RfU1lTCisKK2V4cG9ydCBTVEFHSU5HX0xJQkRJUgorZXhwb3J0IFNUQUdJTkdfSU5DRElSCisKK1JERVBFTkRTXyR7UE59ID0gInB5dGhvbi1pbyBweXRob24tbG9nZ2luZyBweXRob24tc3RyaW5nb2xkIHB5dGhvbi10aHJlYWRpbmcgcHl0aG9uLXhtbCIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vcGtnY29uZmlnIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kb2N1dGlsc18wLjEyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kb2N1dGlsc18wLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZGE4OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWRvY3V0aWxzXzAuMTIuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJUZXh0IHByb2Nlc3Npbmcgc3lzdGVtIGZvciBkb2N1bWVudGF0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL2RvY3V0aWxzLnNvdXJjZWZvcmdlLm5ldCIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJQU0YgJiBCU0QtMi1DbGF1c2UgJiBHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcudHh0O21kNT1hNzIyZmJkYzIwMzQ3ZGI3YjY5MjIzNTk0ZGQ1NDU3NCIKKworREVQRU5EUyA9ICJweXRob24iCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2RvY3V0aWxzL2RvY3V0aWxzLSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NjIyMjYzYjYyYzVjNzcxYzAzNTAyYWZhMzE1Nzc2OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjN2RiNzE3ODEwYWI2OTY1ZjY2YzhjZjAzOThhOThjOWQ4ZGY5ODJkYTM5YjRjZDdmMTYyOTExZWI4OTU5NmZhIgorCitTID0gIiR7V09SS0RJUn0vZG9jdXRpbHMtJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdF8xLjAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0XzEuMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3OGQ3YzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdF8xLjAuMS5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIlB5dGhvbiBsaWJyYXJ5IHVzZWQgdG8gaW50ZXJhY3Qgd2l0aCBHaXQgcmVwb3NpdG9yaWVzIgorREVTQ1JJUFRJT04gPSAiR2l0UHl0aG9uIHByb3ZpZGVzIG9iamVjdCBtb2RlbCByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gXAorYSBnaXQgcmVwb3NpdG9yeS4gQWNjZXNzIHJlcG9zaXRvcnkgaW5mb3JtYXRpb24gY29udmVuaWVudGx5LCBhbHRlciB0aGUgXAoraW5kZXggZGlyZWN0bHksIGhhbmRsZSByZW1vdGVzLCBvciBnbyBkb3duIHRvIGxvdy1sZXZlbCBvYmplY3QgZGF0YWJhc2UgXAorYWNjZXNzIHdpdGggYmlnLWZpbGVzIHN1cHBvcnQuIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdGh1Yi5jb20vZ2l0cHl0aG9uLWRldmVsb3BlcnMvR2l0UHl0aG9uIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PThiOGQyNmMzN2MxZDVhMDRmOWIwMTg2ZWRiZWJjMTgzIgorREVQRU5EUyA9ICJweXRob24tZ2l0ZGIiCisKK1NSQ19VUkkgPSAiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvRy9HaXRQeXRob24vR2l0UHl0aG9uLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ2NTk2NDRiNDJjNDFlNWU1MTcwYzBjZDgzZWQ2NDIyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjljODhjMTdiYmNhZTJhNDQ1ZmY2NDAyNGVmMTM1MjYyMjRmNzBlMzVlMzhjMzM0MTZiZTVjZWI1NmNhN2Y3NjAiCisKK1MgPSAiJHtXT1JLRElSfS9HaXRQeXRob24tJHtQVn0iCisKK2luaGVyaXQgc2V0dXB0b29scworCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLWdpdGRiIHB5dGhvbi1sYW5nIHB5dGhvbi1pbyBweXRob24tc2hlbGwgcHl0aG9uLW1hdGggcHl0aG9uLXJlIHB5dGhvbi1zdWJwcm9jZXNzIHB5dGhvbi1zdHJpbmdvbGQiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXRkYl8wLjYuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0ZGJfMC42LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAwODNiZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0ZGJfMC42LjQuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJBIHB1cmUtUHl0aG9uIGdpdCBvYmplY3QgZGF0YWJhc2UiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0aHViLmNvbS9naXRweXRob24tZGV2ZWxvcGVycy9naXRkYiIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT01OWU1ZWNiMTMzMzlhOTM2ZWVkZjgzMjgyZWFmNDUyOCIKK0RFUEVORFMgPSAicHl0aG9uLWFzeW5jIHB5dGhvbi1zbW1hcCIKKworU1JDX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvZy9naXRkYi9naXRkYi0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NGU0MzY2YjhiZGZkMzA2YjA3NWMzYTUyYzk2YWUxYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhM2ViYmMyN2JlMDM1YTJlODc0ZWQ5MDRkZjUxNmUzNWY0YTI5YTc3OGE3NjQzODVkZTA5ZGU5ZTBmMTM5NjU4IgorCitTID0gIiR7V09SS0RJUn0vZ2l0ZGItJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24tc21tYXAgcHl0aG9uLWFzeW5jIHB5dGhvbi1tbWFwIHB5dGhvbi1sYW5nIHB5dGhvbi16bGliIHB5dGhvbi1pbyBweXRob24tc2hlbGwiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nLzAwMDEtcHl0aG9uLWltYWdpbmctc2V0dXAucHktZm9yY2UtcGF0aHMtZm9yLXpsaWItZnJlZXR5cC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy8wMDAxLXB5dGhvbi1pbWFnaW5nLXNldHVwLnB5LWZvcmNlLXBhdGhzLWZvci16bGliLWZyZWV0eXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU3NTMwNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy8wMDAxLXB5dGhvbi1pbWFnaW5nLXNldHVwLnB5LWZvcmNlLXBhdGhzLWZvci16bGliLWZyZWV0eXAucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorRnJvbSAwN2Q0ZjA5NWE5ZTIyYWU2NzZhOGQ2ODA3MzEwMTEzMWU2NTAxMmRjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IFR1ZSwgMTUgTm92IDIwMTEgMTM6MTY6NTQgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gcHl0aG9uIGltYWdpbmcgc2V0dXAucHk6IGZvcmNlIHBhdGhzIGZvciB6bGliLCBmcmVldHlwZSBhbmQganBlZyBhbmQgZG9uJ3QgYWRkIGhvc3QgcGF0aHMKKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIHNldHVwLnB5IHwgICAxNCArKystLS0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKK2luZGV4IDVkNGQ1M2EuLmIxYTIyZWMgMTAwNjQ0CistLS0gYS9zZXR1cC5weQorKysrIGIvc2V0dXAucHkKK0BAIC0zNCwxMCArMzQsMTAgQEAgZGVmIGxpYmluY2x1ZGUocm9vdCk6CisgIyBUSUZGX1JPT1QgPSBsaWJpbmNsdWRlKCIvb3B0L3RpZmYiKQorIAorIFRDTF9ST09UID0gTm9uZQorLUpQRUdfUk9PVCA9IE5vbmUKKy1aTElCX1JPT1QgPSBOb25lCisrSlBFR19ST09UID0gb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXQorK1pMSUJfUk9PVCA9IG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10KKyBUSUZGX1JPT1QgPSBOb25lCistRlJFRVRZUEVfUk9PVCA9IE5vbmUKKytGUkVFVFlQRV9ST09UID0gIG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10sIG9zLmVudmlyb25bJ1NUQUdJTkdfSU5DRElSJ10KKyBMQ01TX1JPT1QgPSBOb25lCisgCisgIyBGSVhNRTogYWRkIG1lY2hhbmlzbSB0byBleHBsaWNpdGx5ICpkaXNhYmxlKiB0aGUgdXNlIG9mIGEgbGlicmFyeQorQEAgLTE0Nyw3ICsxNDcsNiBAQCBjbGFzcyBwaWxfYnVpbGRfZXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgYWRkX2RpcmVjdG9yeShsaWJyYXJ5X2RpcnMsICIvb3B0L2xvY2FsL2xpYiIpCisgICAgICAgICAgICAgYWRkX2RpcmVjdG9yeShpbmNsdWRlX2RpcnMsICIvb3B0L2xvY2FsL2luY2x1ZGUiKQorIAorLSAgICAgICAgYWRkX2RpcmVjdG9yeShsaWJyYXJ5X2RpcnMsICIvdXNyL2xvY2FsL2xpYiIpCisgICAgICAgICAjIEZJWE1FOiBjaGVjayAvb3B0L3N0dWZmIGRpcmVjdG9yaWVzIGhlcmU/CisgCisgICAgICAgICBwcmVmaXggPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoInByZWZpeCIpCitAQCAtMjA3LDEzICsyMDYsNiBAQCBjbGFzcyBwaWxfYnVpbGRfZXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHRjbF9kaXIsICJ0ay5oIikpOgorICAgICAgICAgICAgICAgICBhZGRfZGlyZWN0b3J5KGluY2x1ZGVfZGlycywgdGNsX2RpcikKKyAKKy0gICAgICAgICMgc3RhbmRhcmQgbG9jYXRpb25zCistICAgICAgICBhZGRfZGlyZWN0b3J5KGxpYnJhcnlfZGlycywgIi91c3IvbG9jYWwvbGliIikKKy0gICAgICAgIGFkZF9kaXJlY3RvcnkoaW5jbHVkZV9kaXJzLCAiL3Vzci9sb2NhbC9pbmNsdWRlIikKKy0KKy0gICAgICAgIGFkZF9kaXJlY3RvcnkobGlicmFyeV9kaXJzLCAiL3Vzci9saWIiKQorLSAgICAgICAgYWRkX2RpcmVjdG9yeShpbmNsdWRlX2RpcnMsICIvdXNyL2luY2x1ZGUiKQorLQorICAgICAgICAgIworICAgICAgICAgIyBpbnNlcnQgbmV3IGRpcnMgKmJlZm9yZSogZGVmYXVsdCBsaWJzLCB0byBhdm9pZCBjb25mbGljdHMKKyAgICAgICAgICMgYmV0d2VlbiBQeXRob24gUFlEIHN0dWIgbGlicyBhbmQgcmVhbCBsaWJyYXJpZXMKKy0tIAorMS43LjIuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvYWxsb3cudG8uZGlzYWJsZS5zb21lLmZlYXR1cmVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nL2FsbG93LnRvLmRpc2FibGUuc29tZS5mZWF0dXJlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTYwZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nL2FsbG93LnRvLmRpc2FibGUuc29tZS5mZWF0dXJlcy5wYXRjaApAQCAtMCwwICsxLDY1IEBACitBdCBsZWFzdCBsY21zIHdhc24ndCBkZXRlcm1pbmlzdGljbHkgZGV0ZWN0ZWQgZnJvbSBzeXNyb290LgorCitUaGlzIHdpbGwgYWxsb3cgdG8gZXhwb3J0IExDTVNfRU5BQkxFRD1GYWxzZSB3aGVuIGxjbXMgaXNuJ3QgaW4gUEFDS0FHRUNPTkZJRy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKK2RpZmYgLXVOciBJbWFnaW5nLTEuMS43Lm9yaWcvc2V0dXAucHkgSW1hZ2luZy0xLjEuNy9zZXR1cC5weQorLS0tIEltYWdpbmctMS4xLjcub3JpZy9zZXR1cC5weQkyMDEzLTA3LTIyIDEwOjE3OjAyLjA4MTQ1NzA3NSArMDIwMAorKysrIEltYWdpbmctMS4xLjcvc2V0dXAucHkJMjAxMy0wNy0yMiAxMzoxMDowOS4wMjk3MDc0OTIgKzAyMDAKK0BAIC0zOSw2ICszOSwxMiBAQAorIFRJRkZfUk9PVCA9IE5vbmUKKyBGUkVFVFlQRV9ST09UID0gIG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10sIG9zLmVudmlyb25bJ1NUQUdJTkdfSU5DRElSJ10KKyBMQ01TX1JPT1QgPSBOb25lCisrVENMX0VOQUJMRUQgPSBvcy5nZXRlbnYoJ1RDTF9FTkFCTEVEJywgIlRydWUiKQorK0pQRUdfRU5BQkxFRCA9IG9zLmdldGVudignSlBFR19FTkFCTEVEJywgIlRydWUiKQorK1pMSUJfRU5BQkxFRCA9IG9zLmdldGVudignWkxJQl9FTkFCTEVEJywgIlRydWUiKQorK1RJRkZfRU5BQkxFRCA9IG9zLmdldGVudignVElGRl9FTkFCTEVEJywgIlRydWUiKQorK0ZSRUVUWVBFX0VOQUJMRUQgPSBvcy5nZXRlbnYoJ0ZSRUVUWVBFX0VOQUJMRUQnLCAiVHJ1ZSIpCisrTENNU19FTkFCTEVEID0gb3MuZ2V0ZW52KCdMQ01TX0VOQUJMRUQnLCAiVHJ1ZSIpCisgCisgIyBGSVhNRTogYWRkIG1lY2hhbmlzbSB0byBleHBsaWNpdGx5ICpkaXNhYmxlKiB0aGUgdXNlIG9mIGEgbGlicmFyeQorIAorQEAgLTIyMCwyMiArMjI2LDIyIEBACisgICAgICAgICAgICAgemxpYiA9IGpwZWcgPSB0aWZmID0gZnJlZXR5cGUgPSB0Y2wgPSB0ayA9IGxjbXMgPSBOb25lCisgICAgICAgICBmZWF0dXJlID0gZmVhdHVyZSgpCisgCistICAgICAgICBpZiBmaW5kX2luY2x1ZGVfZmlsZShzZWxmLCAiemxpYi5oIik6CisrICAgICAgICBpZiBaTElCX0VOQUJMRUQgPT0gJ1RydWUnIGFuZCBmaW5kX2luY2x1ZGVfZmlsZShzZWxmLCAiemxpYi5oIik6CisgICAgICAgICAgICAgaWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgInoiKToKKyAgICAgICAgICAgICAgICAgZmVhdHVyZS56bGliID0gInoiCisgICAgICAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIiBhbmQgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgInpsaWIiKToKKyAgICAgICAgICAgICAgICAgZmVhdHVyZS56bGliID0gInpsaWIiICMgYWx0ZXJuYXRpdmUgbmFtZQorIAorLSAgICAgICAgaWYgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgImpwZWdsaWIuaCIpOgorKyAgICAgICAgaWYgSlBFR19FTkFCTEVEID09ICdUcnVlJyBhbmQgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgImpwZWdsaWIuaCIpOgorICAgICAgICAgICAgIGlmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJqcGVnIik6CisgICAgICAgICAgICAgICAgIGZlYXR1cmUuanBlZyA9ICJqcGVnIgorICAgICAgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIgYW5kIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJsaWJqcGVnIik6CisgICAgICAgICAgICAgICAgIGZlYXR1cmUuanBlZyA9ICJsaWJqcGVnIiAjIGFsdGVybmF0aXZlIG5hbWUKKyAKKy0gICAgICAgIGlmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJ0aWZmIik6CisrICAgICAgICBpZiBUSUZGX0VOQUJMRUQgPT0gJ1RydWUnIGFuZCBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAidGlmZiIpOgorICAgICAgICAgICAgIGZlYXR1cmUudGlmZiA9ICJ0aWZmIgorIAorLSAgICAgICAgaWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgImZyZWV0eXBlIik6CisrICAgICAgICBpZiBGUkVFVFlQRV9FTkFCTEVEID09ICdUcnVlJyBhbmQgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgImZyZWV0eXBlIik6CisgICAgICAgICAgICAgIyBsb29rIGZvciBmcmVldHlwZTIgaW5jbHVkZSBmaWxlcworICAgICAgICAgICAgIGZyZWV0eXBlX3ZlcnNpb24gPSAwCisgICAgICAgICAgICAgZm9yIGRpciBpbiBzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlyczoKK0BAIC0yNTYsMTEgKzI2MiwxMSBAQAorICAgICAgICAgICAgICAgICBpZiBkaXI6CisgICAgICAgICAgICAgICAgICAgICBhZGRfZGlyZWN0b3J5KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLCBkaXIsIDApCisgCistICAgICAgICBpZiBmaW5kX2luY2x1ZGVfZmlsZShzZWxmLCAibGNtcy5oIik6CisrICAgICAgICBpZiBMQ01TX0VOQUJMRUQgPT0gJ1RydWUnIGFuZCBmaW5kX2luY2x1ZGVfZmlsZShzZWxmLCAibGNtcy5oIik6CisgICAgICAgICAgICAgaWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgImxjbXMiKToKKyAgICAgICAgICAgICAgICAgZmVhdHVyZS5sY21zID0gImxjbXMiCisgCistICAgICAgICBpZiBfdGtpbnRlciBhbmQgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgInRrLmgiKToKKysgICAgICAgIGlmIFRDTF9FTkFCTEVEID09ICdUcnVlJyBhbmQgX3RraW50ZXIgYW5kIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJ0ay5oIik6CisgICAgICAgICAgICAgIyB0aGUgbGlicmFyeSBuYW1lcyBtYXkgdmFyeSBzb21ld2hhdCAoZS5nLiB0Y2w4NCBvciB0Y2w4LjQpCisgICAgICAgICAgICAgdmVyc2lvbiA9IFRDTF9WRVJTSU9OWzBdICsgVENMX1ZFUlNJT05bMl0KKyAgICAgICAgICAgICBpZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAidGNsIiArIHZlcnNpb24pOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nL2ZpeC1mcmVldHlwZS1pbmNsdWRlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy9maXgtZnJlZXR5cGUtaW5jbHVkZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVjYzYzYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy9maXgtZnJlZXR5cGUtaW5jbHVkZXMucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSBjNjA0MGY2MThkOGYyNzA2YTdiNDZkMWNkZjM3ZDFhNTg3Zjk3MDFmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmV3IFN0cm9tbm92IDxzdHJvbW5vdkBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDI4IE5vdiAyMDEzIDE2OjU4OjQzICswNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBjb21waWxpbmcgd2l0aCBGcmVlVHlwZSAyLjUuMQorCistLS0KKyBfaW1hZ2luZ2Z0LmMgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9faW1hZ2luZ2Z0LmMgYi9faW1hZ2luZ2Z0LmMKK2luZGV4IDQ3ZDUwYmQuLmYxOTU1NWIgMTAwNjQ0CistLS0gYS9faW1hZ2luZ2Z0LmMKKysrKyBiL19pbWFnaW5nZnQuYworQEAgLTU5LDcgKzU5LDExIEBAIHN0cnVjdCB7CisgICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2U7CisgfSBmdF9lcnJvcnNbXSA9CisgCisrI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBFXzJfMSkKKysjaW5jbHVkZSBGVF9FUlJPUlNfSAorKyNlbHNlCisgI2luY2x1ZGUgPGZyZWV0eXBlL2Z0ZXJyb3JzLmg+CisrI2VuZGlmCisgCisgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAvKiBmb250IG9iamVjdHMgKi8KKy0tIAorMS44LjUuMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nXzEuMS43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nXzEuMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NzgzMjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmdfMS4xLjcuYmIKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJQeXRob24gSW1hZ2luZyBMaWJyYXJ5IChQSUwpIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9OTI7ZW5kbGluZT0xMjA7bWQ1PWM0MzcxYWY0NTc5ZjFlNDg5Y2Y4ODFjMTQ0M2RkNGVjIgorREVQRU5EUyA9ICJmcmVldHlwZSBqcGVnIHRpZmYiCitTUkNOQU1FID0gIkltYWdpbmciCitQUiA9ICJyNSIKKworU1JDX1VSSSA9ICJodHRwOi8vZWZmYm90Lm9yZy9kb3dubG9hZHMvSW1hZ2luZy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1weXRob24taW1hZ2luZy1zZXR1cC5weS1mb3JjZS1wYXRocy1mb3ItemxpYi1mcmVldHlwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FsbG93LnRvLmRpc2FibGUuc29tZS5mZWF0dXJlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZnJlZXR5cGUtaW5jbHVkZXMucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYzE0YTU0ZTFjZTAyYTAyMjViZTg4NTRiZmJhNDc4ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4OTViYzdjMjQ5OGM4ZTFmOWI5OTkzOGYxYTQwZGM4NmIzZjE0OTc0MWYxMDVjZjdjN2JkMmUwNzI1NDA1MjExIgorUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCisKKyMgVGhlcmUgaXNuJ3QgZW5hYmxlL2Rpc2FibGUgb3B0aW9uLCBhbmQgbGNtcyBpcyBpbiBtZXRhLW9lLCBhdCBsZWFzdCBtYWtlIGl0IGV4cGxpY2l0IHdoZW4gZW5hYmxlZAorIyBzZXR1cC5weSBhbHJlYWR5IGhhcyBGSVhNRTogYWRkIG1lY2hhbmlzbSB0byBleHBsaWNpdGx5ICpkaXNhYmxlKiB0aGUgdXNlIG9mIGEgbGlicmFyeQorUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbGNtc10gPSAiLCxsY21zIgorCitpbmhlcml0IGRpc3R1dGlscworCitkb19jb21waWxlKCkgeworICAgIGV4cG9ydCBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfQorICAgIGV4cG9ydCBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfQorICAgIGV4cG9ydCBMQ01TX0VOQUJMRUQ9JHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnbGNtcycsICdUcnVlJywgJ0ZhbHNlJywgZCl9CisgICAgZGlzdHV0aWxzX2RvX2NvbXBpbGUKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICBleHBvcnQgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0KKyAgICBleHBvcnQgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0KKyAgICBleHBvcnQgTENNU19FTkFCTEVEPSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2xjbXMnLCAnVHJ1ZScsICdGYWxzZScsIGQpfQorICAgIGRpc3R1dGlsc19kb19pbnN0YWxsCisgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9kb2MvJHtCUE59L2h0bWwvCisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vUkVBRE1FICR7RH0ke2RhdGFkaXJ9L2RvYy8ke0JQTn0vCisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vRG9jcy8qICR7RH0ke2RhdGFkaXJ9L2RvYy8ke0JQTn0vaHRtbC8KKworICAgICMgZ2V0IHJpZCBvZiAjIS91c3IvbG9jYWwvYmluL3B5dGhvbgorICAgIHNlZCAtaSAtZSAnczovdXNyL2xvY2FsL2Jpbi86JHtiaW5kaXJ9L2VudiA6ZycgJHtEfSR7YmluZGlyfS8qCit9CisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24tbGFuZyBweXRob24tc3RyaW5nb2xkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tYWtvXzEuMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tYWtvXzEuMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNDJiMGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW1ha29fMS4wLjEuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJUZW1wbGF0aW5nIGxpYnJhcnkgZm9yIFB5dGhvbiIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1kZWIzZmY4ZTRjMTdhYWY3YjgwODg5YjZiMmJmNGM4MyIKKworU1JDX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvTS9NYWtvL01ha28tJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWYwYWFmZDE3N2IwMzllZjY3YjkwZWEzNTA0OTdhNTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDVmMDg2OWZlYmVhNTlkYWI3ZWZkMjU2ZmI0NTFjMzc3Y2JiNzk0N2JlZjM4NmZmMGJiNDQ2MjdjMzFhOGQxYyIKKworUyA9ICIke1dPUktESVJ9L01ha28tJHtQVn0iCisKK2luaGVyaXQgc2V0dXB0b29scworCitSREVQRU5EU18ke1BOfSA9ICJweXRob24tdGhyZWFkaW5nIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1uZXRjbGllbnQgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWh0bWwgXAorIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvMTAtZGlzdHV0aWxzLWZpeC1zd2lnLXBhcmFtZXRlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLzEwLWRpc3R1dGlscy1maXgtc3dpZy1wYXJhbWV0ZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM5MjQ3YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLzEwLWRpc3R1dGlscy1maXgtc3dpZy1wYXJhbWV0ZXIucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyMgU29tZSB2ZXJzaW9ucyBvZiBTV0lHIGRvIG5vdCB1c2UgdGhlIGV4dGVuc2lvbiBwYXJhbWV0ZXIuCisjIE1ha2UgaXQgb3B0aW9uYWwuCisjIFNpZ25lZC1PZmY6IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUB2YW5pbGxlLW1lZGlhLmRlPgorSW5kZXg6IFB5dGhvbi0yLjYuMS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNi4xLm9yaWcvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQorKysrIFB5dGhvbi0yLjYuMS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5CitAQCAtNTY2LDcgKzU2Niw3IEBAIGNsYXNzIGJ1aWxkX2V4dCAoQ29tbWFuZCk6CisgICAgICAgICAgICAgdGFyZ2V0X2xhbmc9bGFuZ3VhZ2UpCisgCisgCistICAgIGRlZiBzd2lnX3NvdXJjZXMgKHNlbGYsIHNvdXJjZXMsIGV4dGVuc2lvbik6CisrICAgIGRlZiBzd2lnX3NvdXJjZXMgKHNlbGYsIHNvdXJjZXMsIGV4dGVuc2lvbj1Ob25lKToKKyAKKyAgICAgICAgICIiIldhbGsgdGhlIGxpc3Qgb2Ygc291cmNlIGZpbGVzIGluICdzb3VyY2VzJywgbG9va2luZyBmb3IgU1dJRworICAgICAgICAgaW50ZXJmYWNlICguaSkgZmlsZXMuICBSdW4gU1dJRyBvbiBhbGwgdGhhdCBhcmUgZm91bmQsIGFuZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvMTEtZGlzdHV0aWxzLW5ldmVyLW1vZGlmeS1zaGViYW5nLWxpbmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMS1kaXN0dXRpbHMtbmV2ZXItbW9kaWZ5LXNoZWJhbmctbGluZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTI0NjliCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvMTEtZGlzdHV0aWxzLW5ldmVyLW1vZGlmeS1zaGViYW5nLWxpbmUucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyMgRG9uJ3QgbW9kaWZ5IHRoZSBzaGUtYmFuZyBsaW5lIGZvciBhIGNyb3NzLWJ1aWxkLgorIyBPdGhlcndpc2UgaXQgcG9pbnRzIHRvIG91ciBob3N0cHl0aG9uICh3aGljaCB3ZSBkbyBub3Qgd2FudCkKKyMKKyMgU2lnbmVkLU9mZjogTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QHZhbmlsbGUtbWVkaWEuZGU+CisKK0luZGV4OiBQeXRob24tMi42LjEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi42LjEub3JpZy9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weQorKysrIFB5dGhvbi0yLjYuMS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weQorQEAgLTg3LDcgKzg3LDcgQEAgY2xhc3MgYnVpbGRfc2NyaXB0cyAoQ29tbWFuZCk6CisgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorIAorICAgICAgICAgICAgICAgICBtYXRjaCA9IGZpcnN0X2xpbmVfcmUubWF0Y2goZmlyc3RfbGluZSkKKy0gICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisrICAgICAgICAgICAgICAgIGlmIEZhbHNlOiAjbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgICBhZGp1c3QgPSAxCisgICAgICAgICAgICAgICAgICAgICBwb3N0X2ludGVycCA9IG1hdGNoLmdyb3VwKDEpIG9yICcnCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5YWFmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaApAQCAtMCwwICsxLDY1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCisjIFRoZSBwcm9wZXIgcHJlZml4IGlzIGluc2lkZSBvdXIgc3RhZ2luZyBhcmVhLgorIyBTaWduZWQtT2ZmOiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAdmFuaWxsZS1tZWRpYS5kZT4KKyMgU2lnbmVkLW9mZi1ieTogUGhpbCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4KKworLS0tIFB5dGhvbi0yLjYuNi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weS5vcmlnCTIwMTItMDEtMDMgMTQ6MDI6MDMuMDI3MDA1Mjk2ICswMDAwCisrKysgUHl0aG9uLTIuNi42L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CTIwMTItMDEtMDMgMTQ6MDI6MzEuNTE3NjAxMDgxICswMDAwCitAQCAtMTksOCArMTksOCBAQAorIGZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcgorIAorICMgVGhlc2UgYXJlIG5lZWRlZCBpbiBhIGNvdXBsZSBvZiBzcG90cywgc28ganVzdCBjb21wdXRlIHRoZW0gb25jZS4KKy1QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpCistRVhFQ19QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5leGVjX3ByZWZpeCkKKytQUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCisrRVhFQ19QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5leGVjX3ByZWZpeCkucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKKyAKKyAjIFBhdGggdG8gdGhlIGJhc2UgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0LiBPbiBXaW5kb3dzIHRoZSBiaW5hcnkgbWF5CisgIyBsaXZlIGluIHByb2plY3QvUENCdWlsZDkuICBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4geDY0IFdpbmRvd3MgYnVpbGQsCitAQCAtNzAsNyArNzAsNyBAQAorICAgICBzeXMuZXhlY19wcmVmaXggLS0gaS5lLiwgaWdub3JlICdwbGF0X3NwZWNpZmljJy4KKyAgICAgIiIiCisgICAgIGlmIHByZWZpeCBpcyBOb25lOgorLSAgICAgICAgcHJlZml4ID0gcGxhdF9zcGVjaWZpYyBhbmQgRVhFQ19QUkVGSVggb3IgUFJFRklYCisrICAgICAgICBwcmVmaXggPSBvcy5lbnZpcm9uWydTVEFHSU5HX0lOQ0RJUiddLnJzdHJpcCgnaW5jbHVkZScpCisgCisgICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKKyAgICAgICAgIGlmIHB5dGhvbl9idWlsZDoKK0BAIC0xMTUsMTIgKzExNSwxNiBAQAorICAgICBJZiAncHJlZml4JyBpcyBzdXBwbGllZCwgdXNlIGl0IGluc3RlYWQgb2Ygc3lzLnByZWZpeCBvcgorICAgICBzeXMuZXhlY19wcmVmaXggLS0gaS5lLiwgaWdub3JlICdwbGF0X3NwZWNpZmljJy4KKyAgICAgIiIiCisrICAgIGxpYl9iYXNlbmFtZSA9IG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10uc3BsaXQoJy8nKVstMV0KKyAgICAgaWYgcHJlZml4IGlzIE5vbmU6CistICAgICAgICBwcmVmaXggPSBwbGF0X3NwZWNpZmljIGFuZCBFWEVDX1BSRUZJWCBvciBQUkVGSVgKKysgICAgICAgIGlmIHBsYXRfc3BlY2lmaWM6CisrICAgICAgICAgICAgcHJlZml4ID0gb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXS5yc3RyaXAobGliX2Jhc2VuYW1lKQorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICBwcmVmaXggPSBQUkVGSVgKKyAKKyAgICAgaWYgb3MubmFtZSA9PSAicG9zaXgiOgorICAgICAgICAgbGlicHl0aG9uID0gb3MucGF0aC5qb2luKHByZWZpeCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGliIiwgInB5dGhvbiIgKyBnZXRfcHl0aG9uX3ZlcnNpb24oKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJfYmFzZW5hbWUsICJweXRob24iICsgZ2V0X3B5dGhvbl92ZXJzaW9uKCkpCisgICAgICAgICBpZiBzdGFuZGFyZF9saWI6CisgICAgICAgICAgICAgcmV0dXJuIGxpYnB5dGhvbgorICAgICAgICAgZWxzZToKK0BAIC0yMTYsNyArMjIwLDcgQEAKKyAgICAgZWxzZToKKyAgICAgICAgICMgVGhlIG5hbWUgb2YgdGhlIGNvbmZpZy5oIGZpbGUgY2hhbmdlZCBpbiAyLjIKKyAgICAgICAgIGNvbmZpZ19oID0gJ3B5Y29uZmlnLmgnCistICAgIHJldHVybiBvcy5wYXRoLmpvaW4oaW5jX2RpciwgY29uZmlnX2gpCisrICAgIHJldHVybiBvcy5wYXRoLmpvaW4oaW5jX2RpciwgY29uZmlnX2gpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCisgCisgCisgZGVmIGdldF9tYWtlZmlsZV9maWxlbmFtZSgpOgorQEAgLTIyNSw3ICsyMjksNyBAQAorICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFrZWZpbGUiKQorICAgICBsaWJfZGlyID0gZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0xLCBzdGFuZGFyZF9saWI9MSkKKy0gICAgcmV0dXJuIG9zLnBhdGguam9pbihsaWJfZGlyLCAiY29uZmlnIiwgIk1ha2VmaWxlIikKKysgICAgcmV0dXJuIG9zLnBhdGguam9pbihsaWJfZGlyLCAiY29uZmlnIiwgIk1ha2VmaWxlIikucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKKyAKKyAKKyBkZWYgcGFyc2VfY29uZmlnX2goZnAsIGc9Tm9uZSk6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI3OWU3YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaApAQCAtMCwwICsxLDI3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQXZvaWRzIHBhcmFsbGVsIG1ha2UgcmFjZXMgbGlua2luZyBlcnJvcnMgd2hlbiBtYWtpbmcgUGFyc2VyL1BHRU4KKworLSBJbXBsZW1lbnRzIFJpY2hhcmQgUHVyZGllJ3MgaWRlYQorCitTaWduZWQtT2ZmLUJ5OiBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KK1NpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01ha2VmaWxlLnByZS5pbgorKysrIFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KK0BAIC02MTAsMTIgKzYxMCwxMCBAQCBNb2R1bGVzL2dycG1vZHVsZS5vOiAkKHNyY2RpcikvTW9kdWxlcy9nCisgCisgTW9kdWxlcy9wd2Rtb2R1bGUubzogJChzcmNkaXIpL01vZHVsZXMvcHdkbW9kdWxlLmMgJChzcmNkaXIpL01vZHVsZXMvcG9zaXhtb2R1bGUuaAorIAorLSQoR1JBTU1BUl9IKTogJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKQorKyQoR1JBTU1BUl9IKTogJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKSAkKFBHRU4pCisgCQlAJChNS0RJUl9QKSBJbmNsdWRlCistCQkkKE1BS0UpICQoUEdFTikKKyAJCSQoUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpCisgJChHUkFNTUFSX0MpOiAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKQorLQkJJChNQUtFKSAkKEdSQU1NQVJfSCkKKyAJCXRvdWNoICQoR1JBTU1BUl9DKQorIAorICQoUEdFTik6CSQoUEdFTk9CSlMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9kZWJ1Zy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2RlYnVnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYzEwZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9kZWJ1Zy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IFB5dGhvbi0yLjYuMS9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi42LjEub3JpZy9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkJMjAwOS0xMS0xMyAxNjowNDo1NC4wMDAwMDAwMDAgKzAwMDAKKysrKyBQeXRob24tMi42LjEvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CTIwMDktMTEtMTMgMTY6MDY6MjcuMDAwMDAwMDAwICswMDAwCitAQCAtMzAwLDYgKzMwMCw4IEBACisgICAgICAgICBkeWxpYl9mID0gc2VsZi5saWJyYXJ5X2ZpbGVuYW1lKGxpYiwgbGliX3R5cGU9J2R5bGliJykKKyAgICAgICAgIHN0YXRpY19mID0gc2VsZi5saWJyYXJ5X2ZpbGVuYW1lKGxpYiwgbGliX3R5cGU9J3N0YXRpYycpCisgCisrICAgICAgICBwcmludCAiTG9va2luZyBpbiAlcyBmb3IgJXMiICUgKGxpYiwgZGlycykKKysKKyAgICAgICAgIGZvciBkaXIgaW4gZGlyczoKKyAgICAgICAgICAgICBzaGFyZWQgPSBvcy5wYXRoLmpvaW4oZGlyLCBzaGFyZWRfZikKKyAgICAgICAgICAgICBkeWxpYiA9IG9zLnBhdGguam9pbihkaXIsIGR5bGliX2YpCitAQCAtMzA5LDEwICszMTEsMTMgQEAKKyAgICAgICAgICAgICAjIGFzc3VtaW5nIHRoYXQgKmFsbCogVW5peCBDIGNvbXBpbGVycyBkby4gIEFuZCBvZiBjb3Vyc2UgSSdtCisgICAgICAgICAgICAgIyBpZ25vcmluZyBldmVuIEdDQydzICItc3RhdGljIiBvcHRpb24uICBTbyBzdWUgbWUuCisgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZHlsaWIpOgorKyAgICAgICAgICAgICAgICBwcmludCAiRm91bmQgJXMiICUgKGR5bGliKQorICAgICAgICAgICAgICAgICByZXR1cm4gZHlsaWIKKyAgICAgICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKHNoYXJlZCk6CisrICAgICAgICAgICAgICAgIHByaW50ICJGb3VuZCAlcyIgJSAoc2hhcmVkKQorICAgICAgICAgICAgICAgICByZXR1cm4gc2hhcmVkCisgICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhzdGF0aWMpOgorKyAgICAgICAgICAgICAgICBwcmludCAiRm91bmQgJXMiICUgKHN0YXRpYykKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpYworIAorICAgICAgICAgIyBPb3BzLCBkaWRuJ3QgZmluZCBpdCBpbiAqYW55KiBvZiAnZGlycycKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL211bHRpbGliLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNhODllNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL211bHRpbGliLnBhdGNoCkBAIC0wLDAgKzEsMjM1IEBACitSZWJhc2VkIGZvciBQeXRob24gMi43LjkKKworU2lnbmVkLU9mZi1CeTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKKzIwMTEvMDkvMjkKK1RoZSBweXRob24gcmVjaXBlIGJ1aWxkaW5nIHdhcyBmYWlsaW5nIGJlY2F1c2UgcHl0aG9uLW5hdGl2ZSAKK2NvdWxkIG5vdCBoYW5kbGUgc3lzLmxpYiB2YXIuIHN5cy5saWIgdmFyIGlzIGRlZmluZWQgaW4gdGhlIAorbXVsdGlsaWIgcGF0Y2ggaGVuY2UgYWRkZWQgdGhpcyBtdWx0aWxpYi5wYXRjaCBmb3IgcHl0aG9uLW5hdGl2ZSAKK3JlY2lwZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZS1zcGVjaWZpY10KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuOS9JbmNsdWRlL3B5dGhvbnJ1bi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvSW5jbHVkZS9weXRob25ydW4uaAorKysrIFB5dGhvbi0yLjcuOS9JbmNsdWRlL3B5dGhvbnJ1bi5oCitAQCAtMTA4LDYgKzEwOCw3IEBAIFB5QVBJX0ZVTkMoY2hhciAqKSBQeV9HZXRQYXRoKHZvaWQpOworIC8qIEluIHRoZWlyIG93biBmaWxlcyAqLworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRWZXJzaW9uKHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRQbGF0Zm9ybSh2b2lkKTsKKytQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0TGliKHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb3B5cmlnaHQodm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldENvbXBpbGVyKHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRCdWlsZEluZm8odm9pZCk7CitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKKysrKyBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKK0BAIC0yMiw2ICsyMiw4IEBAIGZyb20gc2l0ZSBpbXBvcnQgVVNFUl9CQVNFCisgZnJvbSBzaXRlIGltcG9ydCBVU0VSX1NJVEUKKyAKKyAKKytsaWJuYW1lID0gc3lzLmxpYgorKworIGlmIHN5cy52ZXJzaW9uIDwgIjIuMiI6CisgICAgIFdJTkRPV1NfU0NIRU1FID0geworICAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UnLAorQEAgLTQyLDcgKzQ0LDcgQEAgZWxzZToKKyBJTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICd1bml4X3ByZWZpeCc6IHsKKyAgICAgICAgICdwdXJlbGliJzogJyRiYXNlL2xpYi9weXRob24kcHlfdmVyc2lvbl9zaG9ydC9zaXRlLXBhY2thZ2VzJywKKy0gICAgICAgICdwbGF0bGliJzogJyRwbGF0YmFzZS9saWIvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncGxhdGxpYic6ICckcGxhdGJhc2UvJytsaWJuYW1lKycvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaGVhZGVycyc6ICckYmFzZS9pbmNsdWRlL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0LyRkaXN0X25hbWUnLAorICAgICAgICAgJ3NjcmlwdHMnOiAnJGJhc2UvYmluJywKKyAgICAgICAgICdkYXRhJyAgIDogJyRiYXNlJywKK0luZGV4OiBQeXRob24tMi43LjkvTGliL3B5ZG9jLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3B5ZG9jLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9weWRvYy5weQorQEAgLTM4Myw3ICszODMsNyBAQCBjbGFzcyBEb2M6CisgCisgICAgICAgICBkb2Nsb2MgPSBvcy5lbnZpcm9uLmdldCgiUFlUSE9ORE9DUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5IikKKy0gICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAibGliIiwKKysgICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIitzeXMudmVyc2lvblswOjNdKQorICAgICAgICAgaWYgKGlzaW5zdGFuY2Uob2JqZWN0LCB0eXBlKG9zKSkgYW5kCisgICAgICAgICAgICAgKG9iamVjdC5fX25hbWVfXyBpbiAoJ2Vycm5vJywgJ2V4Y2VwdGlvbnMnLCAnZ2MnLCAnaW1wJywKK0luZGV4OiBQeXRob24tMi43LjkvTGliL3NpdGUucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvc2l0ZS5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvc2l0ZS5weQorQEAgLTI4OCwxMyArMjg4LDE5IEBAIGRlZiBnZXRzaXRlcGFja2FnZXMoKToKKyAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ29zMmVteCcsICdyaXNjb3MnKToKKyAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiLCAic2l0ZS1wYWNrYWdlcyIpKQorICAgICAgICAgZWxpZiBvcy5zZXAgPT0gJy8nOgorLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpdGUtcGFja2FnZXMiKSkKKy0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1weXRob24iKSkKKysgICAgICAgICAgICBpZiBzeXMubGliICE9ICJsaWIiOgorKyAgICAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpdGUtcGFja2FnZXMiKSkKKysgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsICJzaXRlLXB5dGhvbiIpKQorKyAgICAgICAgICAgIGlmIHN5cy5saWIgIT0gImxpYiI6CisrICAgICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXB5dGhvbiIpKQorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKHByZWZpeCkKKy0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1wYWNrYWdlcyIpKQorKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwgInNpdGUtcGFja2FnZXMiKSkKKyAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKKyAgICAgICAgICAgICAjIGZvciBmcmFtZXdvcmsgYnVpbGRzICpvbmx5KiB3ZSBhZGQgdGhlIHN0YW5kYXJkIEFwcGxlCisgICAgICAgICAgICAgIyBsb2NhdGlvbnMuCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi90ZXN0L3Rlc3RfZGwucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvdGVzdC90ZXN0X2RsLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi90ZXN0L3Rlc3RfZGwucHkKK0BAIC00LDEwICs0LDExIEBACisgaW1wb3J0IHVuaXR0ZXN0CisgZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgaW1wb3J0X21vZHVsZQorIGRsID0gaW1wb3J0X21vZHVsZSgnZGwnLCBkZXByZWNhdGVkPVRydWUpCisraW1wb3J0IHN5cworIAorIHNoYXJlZGxpYnMgPSBbCistICAgICgnL3Vzci9saWIvbGliYy5zbycsICdnZXRwaWQnKSwKKy0gICAgKCcvbGliL2xpYmMuc28uNicsICdnZXRwaWQnKSwKKysgICAgKCcvdXNyLycrc3lzLmxpYisnL2xpYmMuc28nLCAnZ2V0cGlkJyksCisrICAgICgnLycrc3lzLmxpYisnL2xpYmMuc28uNicsICdnZXRwaWQnKSwKKyAgICAgKCcvdXNyL2Jpbi9jeWd3aW4xLmRsbCcsICdnZXRwaWQnKSwKKyAgICAgKCcvdXNyL2xpYi9saWJjLmR5bGliJywgJ2dldHBpZCcpLAorICAgICBdCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi90cmFjZS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi90cmFjZS5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvdHJhY2UucHkKK0BAIC03NTQsMTAgKzc1NCwxMCBAQCBkZWYgbWFpbihhcmd2PU5vbmUpOgorICAgICAgICAgICAgICAgICAjIHNob3VsZCBJIGFsc28gY2FsbCBleHBhbmR1c2VyPyAoYWZ0ZXIgYWxsLCBjb3VsZCB1c2UgJEhPTUUpCisgCisgICAgICAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoIiRwcmVmaXgiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMucHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLnByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10pKQorICAgICAgICAgICAgICAgICBzID0gcy5yZXBsYWNlKCIkZXhlY19wcmVmaXgiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdKSkKKyAgICAgICAgICAgICAgICAgcyA9IG9zLnBhdGgubm9ybXBhdGgocykKKyAgICAgICAgICAgICAgICAgaWdub3JlX2RpcnMuYXBwZW5kKHMpCitJbmRleDogUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01ha2VmaWxlLnByZS5pbgorKysrIFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KK0BAIC04Nyw2ICs4Nyw3IEBAIFBZX0NGTEFHUz0JJChDRkxBR1MpICQoQ1BQRkxBR1MpICQoQ0ZMQUcKKyAKKyAjIE1hY2hpbmUtZGVwZW5kZW50IHN1YmRpcmVjdG9yaWVzCisgTUFDSERFUD0JQE1BQ0hERVBACisrTElCPQkJQExJQkAKKyAKKyAjIE11bHRpYXJjaCBkaXJlY3RvcnkgKG1heSBiZSBlbXB0eSkKKyBNVUxUSUFSQ0g9CUBNVUxUSUFSQ0hACitAQCAtMTA2LDcgKzEwNyw3IEBAIExJQkRJUj0JCUBsaWJkaXJACisgTUFORElSPQkJQG1hbmRpckAKKyBJTkNMVURFRElSPQlAaW5jbHVkZWRpckAKKyBDT05GSU5DTFVERURJUj0JJChleGVjX3ByZWZpeCkvaW5jbHVkZQorLVNDUklQVERJUj0JJChwcmVmaXgpL2xpYgorK1NDUklQVERJUj0JJChwcmVmaXgpL0BMSUJACisgCisgIyBEZXRhaWxlZCBkZXN0aW5hdGlvbiBkaXJlY3RvcmllcworIEJJTkxJQkRFU1Q9CSQoTElCRElSKS9weXRob24kKFZFUlNJT04pCitAQCAtNTk3LDYgKzU5OCw3IEBAIE1vZHVsZXMvZ2V0cGF0aC5vOiAkKHNyY2RpcikvTW9kdWxlcy9nZXQKKyAJCS1ERVhFQ19QUkVGSVg9JyIkKGV4ZWNfcHJlZml4KSInIFwKKyAJCS1EVkVSU0lPTj0nIiQoVkVSU0lPTikiJyBcCisgCQktRFZQQVRIPSciJChWUEFUSCkiJyBcCisrCQktRExJQj0nIiQoTElCKSInIFwKKyAJCS1vICRAICQoc3JjZGlyKS9Nb2R1bGVzL2dldHBhdGguYworIAorIE1vZHVsZXMvcHl0aG9uLm86ICQoc3JjZGlyKS9Nb2R1bGVzL3B5dGhvbi5jCitAQCAtNjM5LDcgKzY0MSw3IEBAICQoQVNUX0MpOiAkKEFTVF9BU0RMKSAkKEFTRExHRU5fRklMRVMpCisgUHl0aG9uL2NvbXBpbGUubyBQeXRob24vc3ltdGFibGUubyBQeXRob24vYXN0Lm86ICQoR1JBTU1BUl9IKSAkKEFTVF9IKQorIAorIFB5dGhvbi9nZXRwbGF0Zm9ybS5vOiAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKKy0JCSQoQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtRFBMQVRGT1JNPSciJChNQUNIREVQKSInIC1vICRAICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYworKwkJJChDQykgLWMgJChQWV9DRkxBR1MpIC1EUExBVEZPUk09JyIkKE1BQ0hERVApIicgLURMSUI9JyIkKExJQikiJyAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKKyAKKyBQeXRob24vaW1wb3J0ZGwubzogJChzcmNkaXIpL1B5dGhvbi9pbXBvcnRkbC5jCisgCQkkKENDKSAtYyAkKFBZX0NGTEFHUykgLUkkKERMSU5DTERJUikgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9pbXBvcnRkbC5jCitJbmRleDogUHl0aG9uLTIuNy45L01vZHVsZXMvZ2V0cGF0aC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTW9kdWxlcy9nZXRwYXRoLmMKKysrKyBQeXRob24tMi43LjkvTW9kdWxlcy9nZXRwYXRoLmMKK0BAIC0xMTYsOSArMTE2LDExIEBACisgI2RlZmluZSBFWEVDX1BSRUZJWCBQUkVGSVgKKyAjZW5kaWYKKyAKKysjZGVmaW5lIExJQl9QWVRIT04gTElCICIvcHl0aG9uIiBWRVJTSU9OCisrCisgI2lmbmRlZiBQWVRIT05QQVRICistI2RlZmluZSBQWVRIT05QQVRIIFBSRUZJWCAiL2xpYi9weXRob24iIFZFUlNJT04gIjoiIFwKKy0gICAgICAgICAgICAgIEVYRUNfUFJFRklYICIvbGliL3B5dGhvbiIgVkVSU0lPTiAiL2xpYi1keW5sb2FkIgorKyNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi8iIExJQl9QWVRIT04gIjoiIFwKKysgICAgICAgICAgICAgIEVYRUNfUFJFRklYICIvIiBMSUJfUFlUSE9OICIvbGliLWR5bmxvYWQiCisgI2VuZGlmCisgCisgI2lmbmRlZiBMQU5ETUFSSworQEAgLTEyOSw3ICsxMzEsNyBAQCBzdGF0aWMgY2hhciBwcmVmaXhbTUFYUEFUSExFTisxXTsKKyBzdGF0aWMgY2hhciBleGVjX3ByZWZpeFtNQVhQQVRITEVOKzFdOworIHN0YXRpYyBjaGFyIHByb2dwYXRoW01BWFBBVEhMRU4rMV07Cisgc3RhdGljIGNoYXIgKm1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7Cistc3RhdGljIGNoYXIgbGliX3B5dGhvbltdID0gImxpYi9weXRob24iIFZFUlNJT047Cisrc3RhdGljIGNoYXIgbGliX3B5dGhvbltdID0gTElCX1BZVEhPTjsKKyAKKyBzdGF0aWMgdm9pZAorIHJlZHVjZShjaGFyICpkaXIpCitJbmRleDogUHl0aG9uLTIuNy45L1B5dGhvbi9nZXRwbGF0Zm9ybS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvUHl0aG9uL2dldHBsYXRmb3JtLmMKKysrKyBQeXRob24tMi43LjkvUHl0aG9uL2dldHBsYXRmb3JtLmMKK0BAIC0xMCwzICsxMCwxMyBAQCBQeV9HZXRQbGF0Zm9ybSh2b2lkKQorIHsKKyAJcmV0dXJuIFBMQVRGT1JNOworIH0KKysKKysjaWZuZGVmIExJQgorKyNkZWZpbmUgTElCICJsaWIiCisrI2VuZGlmCisrCisrY29uc3QgY2hhciAqCisrUHlfR2V0TGliKHZvaWQpCisreworKwlyZXR1cm4gTElCOworK30KK0luZGV4OiBQeXRob24tMi43LjkvUHl0aG9uL3N5c21vZHVsZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvUHl0aG9uL3N5c21vZHVsZS5jCisrKysgUHl0aG9uLTIuNy45L1B5dGhvbi9zeXNtb2R1bGUuYworQEAgLTE0MzcsNiArMTQzNyw4IEBAIF9QeVN5c19Jbml0KHZvaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZyhQeV9HZXRDb3B5cmlnaHQoKSkpOworICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJwbGF0Zm9ybSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZyhQeV9HZXRQbGF0Zm9ybSgpKSk7CisrICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImxpYiIsCisrICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0TGliKCkpKTsKKyAgICAgU0VUX1NZU19GUk9NX1NUUklORygiZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZyhQeV9HZXRQcm9ncmFtRnVsbFBhdGgoKSkpOworICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJwcmVmaXgiLAorSW5kZXg6IFB5dGhvbi0yLjcuOS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9jb25maWd1cmUuYWMKKysrKyBQeXRob24tMi43LjkvY29uZmlndXJlLmFjCitAQCAtNzM2LDYgKzczNiwxMSBAQCBTdW5PUyopCisgICAgIDs7CisgZXNhYworIAorK0FDX1NVQlNUKExJQikKKytBQ19NU0dfQ0hFQ0tJTkcoTElCKQorK0xJQj1gYmFzZW5hbWUgJHtsaWJkaXJ9YAorK0FDX01TR19SRVNVTFQoJExJQikKKysKKyAKKyBBQ19TVUJTVChMSUJSQVJZKQorIEFDX01TR19DSEVDS0lORyhMSUJSQVJZKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvbm9ob3N0bGlicy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL25vaG9zdGxpYnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0NTJlOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL25vaG9zdGxpYnMucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworMjAxNC8xMi8xNQorUmViYXNlZCBmb3IgcHl0aG9uLTIuNy45CitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorU2lnbmVkLU9mZi1CeTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43Ljkvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9zZXR1cC5weQorKysrIFB5dGhvbi0yLjcuOS9zZXR1cC5weQorQEAgLTQzOSw5ICs0MzksOSBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgCisgICAgIGRlZiBkZXRlY3RfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgICMgRW5zdXJlIHRoYXQgL3Vzci9sb2NhbCBpcyBhbHdheXMgdXNlZAorLSAgICAgICAgaWYgbm90IGNyb3NzX2NvbXBpbGluZzoKKy0gICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsICcvdXNyL2xvY2FsL2xpYicpCistICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLCAnL3Vzci9sb2NhbC9pbmNsdWRlJykKKysgICAgICAgICMgaWYgbm90IGNyb3NzX2NvbXBpbGluZzoKKysgICAgICAgICAgICAjIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywgJy91c3IvbG9jYWwvbGliJykKKysgICAgICAgICAgICAjIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywgJy91c3IvbG9jYWwvaW5jbHVkZScpCisgICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CisgICAgICAgICAgICAgc2VsZi5hZGRfZ2NjX3BhdGhzKCkKKyAgICAgICAgIHNlbGYuYWRkX211bHRpYXJjaF9wYXRocygpCitAQCAtNDgwLDE1ICs0ODAsMTUgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgICAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiByZXZlcnNlZChvcHRpb25zLmRpcnMpOgorICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChkaXJfbGlzdCwgZGlyZWN0b3J5KQorIAorLSAgICAgICAgaWYgb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KSAhPSAnL3VzcicgXAorLSAgICAgICAgICAgICAgICBhbmQgbm90IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUFlUSE9ORlJBTUVXT1JLJyk6CisrICAgICAgICAjaWYgb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KSAhPSAnL3VzcicgXAorKyAgICAgICAgICAgICAgICAjYW5kIG5vdCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1BZVEhPTkZSQU1FV09SSycpOgorICAgICAgICAgICAgICMgT1NYIG5vdGU6IERvbid0IGFkZCBMSUJESVIgYW5kIElOQ0xVREVESVIgdG8gYnVpbGRpbmcgYSBmcmFtZXdvcmsKKyAgICAgICAgICAgICAjIChQWVRIT05GUkFNRVdPUksgaXMgc2V0KSB0byBhdm9pZCAjIGxpbmtpbmcgcHJvYmxlbXMgd2hlbgorICAgICAgICAgICAgICMgYnVpbGRpbmcgYSBmcmFtZXdvcmsgd2l0aCBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyB0aGFuCisgICAgICAgICAgICAgIyB0aGUgb25lIHRoYXQgaXMgY3VycmVudGx5IGluc3RhbGxlZCAoaXNzdWUgIzc0NzMpCistICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLAorKyAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkxJQkRJUiIpKQorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywKKysgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJJTkNMVURFRElSIikpCisgCisgICAgICAgICB0cnk6CitAQCAtNzYxLDggKzc2MSw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICAgICAgcGFzcyAjIElzc3VlIDczODQ6IEFscmVhZHkgbGlua2VkIGFnYWluc3QgY3Vyc2VzIG9yIHRpbmZvLgorICAgICAgICAgICAgIGVsaWYgY3Vyc2VzX2xpYnJhcnk6CisgICAgICAgICAgICAgICAgIHJlYWRsaW5lX2xpYnMuYXBwZW5kKGN1cnNlc19saWJyYXJ5KQorLSAgICAgICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycyArCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy91c3IvbGliL3Rlcm1jYXAnXSwKKysgICAgICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVybWNhcCcpOgorICAgICAgICAgICAgICAgICByZWFkbGluZV9saWJzLmFwcGVuZCgndGVybWNhcCcpCisgICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigncmVhZGxpbmUnLCBbJ3JlYWRsaW5lLmMnXSwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL3JldmVydF91c2Vfb2Zfc3lzY29uZmlnZGF0YS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL3JldmVydF91c2Vfb2Zfc3lzY29uZmlnZGF0YS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDJhYWYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvcmV2ZXJ0X3VzZV9vZl9zeXNjb25maWdkYXRhLnBhdGNoCkBAIC0wLDAgKzEsODYgQEAKK09uIG9sZGVyIHZlcnNpb25zIG9mIFB5dGhvbiwgc3lzY29uZmlnIHJlYWQgdGhlIGRhdGEgZnJvbSBib3RoIHRoZSBNYWtlZmlsZSBhbmQKK3RoZSBQeXRob24uaCBmaWxlIGdlbmVyYXRlZCBhdCBidWlsZCB0aW1lLCBjcmVhdGVkIGRpY3Rpb25hcmllcyB3aXRoIHRoZWlyIHZhcmlhYmxlcworYW5kIHVzZWQgdGhvc2Ugd2hlbiB1c2luZyBnZXRfY29uZmlnX3ZhcigpLCBub3cgaXQgdXNlcyBfc3lzY29uZmlnZGF0YS5idWlsZF90aW1lX3ZhcnNbXQord2hpY2ggY29udGFpbnMgaW5mb3JtYXRpb24gZnJvbSB0aGUgSE9TVCwgZXJyb25lb3VzIGluIG91ciBjYXNlLCB0aGlzIHBhdGNoIHJldmVydHMgdGhpcworYmVoYXZpb3IgYW5kIHVzZXMgUHl0aG9uLmggYW5kIE1ha2VmaWxlIHRvIGdldCBpbmZvcm1hdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZS1zcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorQEAgLTQwMSwxMiArNDAxLDY2IEBAIF9jb25maWdfdmFycyA9IE5vbmUKKyAKKyBkZWYgX2luaXRfcG9zaXgoKToKKyAgICAgIiIiSW5pdGlhbGl6ZSB0aGUgbW9kdWxlIGFzIGFwcHJvcHJpYXRlIGZvciBQT1NJWCBzeXN0ZW1zLiIiIgorLSAgICAjIF9zeXNjb25maWdkYXRhIGlzIGdlbmVyYXRlZCBhdCBidWlsZCB0aW1lLCBzZWUgdGhlIHN5c2NvbmZpZyBtb2R1bGUKKy0gICAgZnJvbSBfc3lzY29uZmlnZGF0YSBpbXBvcnQgYnVpbGRfdGltZV92YXJzCistICAgIGdsb2JhbCBfY29uZmlnX3ZhcnMKKy0gICAgX2NvbmZpZ192YXJzID0ge30KKy0gICAgX2NvbmZpZ192YXJzLnVwZGF0ZShidWlsZF90aW1lX3ZhcnMpCisrICAgIGcgPSB7fQorKyAgICAjIGxvYWQgdGhlIGluc3RhbGxlZCBNYWtlZmlsZToKKysgICAgdHJ5OgorKyAgICAgICAgZmlsZW5hbWUgPSBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKQorKyAgICAgICAgcGFyc2VfbWFrZWZpbGUoZmlsZW5hbWUsIGcpCisrICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisrICAgICAgICBteV9tc2cgPSAiaW52YWxpZCBQeXRob24gaW5zdGFsbGF0aW9uOiB1bmFibGUgdG8gb3BlbiAlcyIgJSBmaWxlbmFtZQorKyAgICAgICAgaWYgaGFzYXR0cihtc2csICJzdHJlcnJvciIpOgorKyAgICAgICAgICAgIG15X21zZyA9IG15X21zZyArICIgKCVzKSIgJSBtc2cuc3RyZXJyb3IKKysKKysgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IobXlfbXNnKQorKworKyAgICAjIGxvYWQgdGhlIGluc3RhbGxlZCBweWNvbmZpZy5oOgorKyAgICB0cnk6CisrICAgICAgICBmaWxlbmFtZSA9IGdldF9jb25maWdfaF9maWxlbmFtZSgpCisrICAgICAgICBwYXJzZV9jb25maWdfaChmaWxlKGZpbGVuYW1lKSwgZykKKysgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKysgICAgICAgIG15X21zZyA9ICJpbnZhbGlkIFB5dGhvbiBpbnN0YWxsYXRpb246IHVuYWJsZSB0byBvcGVuICVzIiAlIGZpbGVuYW1lCisrICAgICAgICBpZiBoYXNhdHRyKG1zZywgInN0cmVycm9yIik6CisrICAgICAgICAgICAgbXlfbXNnID0gbXlfbXNnICsgIiAoJXMpIiAlIG1zZy5zdHJlcnJvcgorKworKyAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcihteV9tc2cpCisrCisrICAgICMgT24gQUlYLCB0aGVyZSBhcmUgd3JvbmcgcGF0aHMgdG8gdGhlIGxpbmtlciBzY3JpcHRzIGluIHRoZSBNYWtlZmlsZQorKyAgICAjIC0tIHRoZXNlIHBhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgUHl0aG9uIHNvdXJjZSwgYnV0IHdoZW4gaW5zdGFsbGVkCisrICAgICMgdGhlIHNjcmlwdHMgYXJlIGluIGFub3RoZXIgZGlyZWN0b3J5LgorKyAgICBpZiBweXRob25fYnVpbGQ6CisrICAgICAgICBnWydMRFNIQVJFRCddID0gZ1snQkxEU0hBUkVEJ10KKyAKKysgICAgZWxpZiBnZXRfcHl0aG9uX3ZlcnNpb24oKSA8ICcyLjEnOgorKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIHR3byBicmFuY2hlcyBhcmUgZm9yIDEuNS4yIGNvbXBhdGliaWxpdHkuCisrICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2FpeDQnOiAgICAgICAgICAjIHdoYXQgYWJvdXQgQUlYIDMueCA/CisrICAgICAgICAgICAgIyBMaW5rZXIgc2NyaXB0IGlzIGluIHRoZSBjb25maWcgZGlyZWN0b3J5LCBub3QgaW4gTW9kdWxlcyBhcyB0aGUKKysgICAgICAgICAgICAjIE1ha2VmaWxlIHNheXMuCisrICAgICAgICAgICAgcHl0aG9uX2xpYiA9IGdldF9weXRob25fbGliKHN0YW5kYXJkX2xpYj0xKQorKyAgICAgICAgICAgIGxkX3NvX2FpeCA9IG9zLnBhdGguam9pbihweXRob25fbGliLCAnY29uZmlnJywgJ2xkX3NvX2FpeCcpCisrICAgICAgICAgICAgcHl0aG9uX2V4cCA9IG9zLnBhdGguam9pbihweXRob25fbGliLCAnY29uZmlnJywgJ3B5dGhvbi5leHAnKQorKworKyAgICAgICAgICAgIGdbJ0xEU0hBUkVEJ10gPSAiJXMgJXMgLWJJOiVzIiAlIChsZF9zb19haXgsIGdbJ0NDJ10sIHB5dGhvbl9leHApCisrCisrICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAnYmVvcyc6CisrICAgICAgICAgICAgIyBMaW5rZXIgc2NyaXB0IGlzIGluIHRoZSBjb25maWcgZGlyZWN0b3J5LiAgSW4gdGhlIE1ha2VmaWxlIGl0IGlzCisrICAgICAgICAgICAgIyByZWxhdGl2ZSB0byB0aGUgc3JjZGlyLCB3aGljaCBhZnRlciBpbnN0YWxsYXRpb24gbm8gbG9uZ2VyIG1ha2VzCisrICAgICAgICAgICAgIyBzZW5zZS4KKysgICAgICAgICAgICBweXRob25fbGliID0gZ2V0X3B5dGhvbl9saWIoc3RhbmRhcmRfbGliPTEpCisrICAgICAgICAgICAgbGlua2Vyc2NyaXB0X3BhdGggPSBzdHJpbmcuc3BsaXQoZ1snTERTSEFSRUQnXSlbMF0KKysgICAgICAgICAgICBsaW5rZXJzY3JpcHRfbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUobGlua2Vyc2NyaXB0X3BhdGgpCisrICAgICAgICAgICAgbGlua2Vyc2NyaXB0ID0gb3MucGF0aC5qb2luKHB5dGhvbl9saWIsICdjb25maWcnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJzY3JpcHRfbmFtZSkKKysKKysgICAgICAgICAgICAjIFhYWCB0aGlzIGlzbid0IHRoZSByaWdodCBwbGFjZSB0byBkbyB0aGlzOiBhZGRpbmcgdGhlIFB5dGhvbgorKyAgICAgICAgICAgICMgbGlicmFyeSB0byB0aGUgbGluaywgaWYgbmVlZGVkLCBzaG91bGQgYmUgaW4gdGhlICJidWlsZF9leHQiCisrICAgICAgICAgICAgIyBjb21tYW5kLiAgKEl0J3MgYWxzbyBuZWVkZWQgZm9yIG5vbi1NUyBjb21waWxlcnMgb24gV2luZG93cywgYW5kCisrICAgICAgICAgICAgIyBpdCdzIHRha2VuIGNhcmUgb2YgZm9yIHRoZW0gYnkgdGhlICdidWlsZF9leHQuZ2V0X2xpYnJhcmllcygpJworKyAgICAgICAgICAgICMgbWV0aG9kLikKKysgICAgICAgICAgICBnWydMRFNIQVJFRCddID0gKCIlcyAtTCVzL2xpYiAtbHB5dGhvbiVzIiAlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlua2Vyc2NyaXB0LCBQUkVGSVgsIGdldF9weXRob25fdmVyc2lvbigpKSkKKysKKysgICAgZ2xvYmFsIF9jb25maWdfdmFycworKyAgICBfY29uZmlnX3ZhcnMgPSBnCisgCisgZGVmIF9pbml0X250KCk6CisgICAgICIiIkluaXRpYWxpemUgdGhlIG1vZHVsZSBhcyBhcHByb3ByaWF0ZSBmb3IgTlQiIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL3VuaXhjY29tcGlsZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS91bml4Y2NvbXBpbGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MDI4MjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS91bml4Y2NvbXBpbGVyLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGUgQ0MgdmFyaWFibGUsc29tZXRpbWVzIGxpa2U6Ing4Nl82NC1wb2t5LWxpbnV4LWdjYyAgIC1tNjQgLS1zeXNyb290PS8ke1RNUERJUn0vc3lzcm9vdHMvcWVtdXg4Ni02NCIsIGNvbnRhaW5zIG9wdGlvbiBpbmZvcm1hdGlvbi4gCitUaGlzIHdpbGwgbGVhZCB0byB3cm9uZyBjb21waWxlciBuYW1lICJxZW11eDg2LTY0IiByYXRoZXIgdGhhbiAieDg2XzY0LXBva3ktbGludXgtZ2NjIiB3aGVuIHB5dGhvbiBmaW5kaW5nIHRoZSBjb21waWxlciBuYW1lLgorCitTaWduZWQtb2ZmLWJ5OiBNZWkgTGVpIDxsZWkubWVpQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitJbmRleDogUHl0aG9uLTIuNy4yL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMi5vcmlnL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQkyMDExLTExLTI0IDEzOjUxOjEwLjUzOTk5ODcyMiAtMDgwMAorKysrIFB5dGhvbi0yLjcuMi9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkJMjAxMS0xMS0yNCAxNTo1NDozNi44NzIxMzc3NjYgLTA4MDAKK0BAIC0yODIsNyArMjgyLDcgQEAKKyAgICAgICAgICMgdGhpcyB0aW1lLCB0aGVyZSdzIG5vIHdheSB0byBkZXRlcm1pbmUgdGhpcyBpbmZvcm1hdGlvbiBmcm9tCisgICAgICAgICAjIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgc3RvcmVkIGluIHRoZSBQeXRob24gaW5zdGFsbGF0aW9uLCBzbworICAgICAgICAgIyB3ZSB1c2UgdGhpcyBoYWNrLgorLSAgICAgICAgY29tcGlsZXIgPSBvcy5wYXRoLmJhc2VuYW1lKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiQ0MiKSkKKysgICAgICAgIGNvbXBpbGVyID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJDQyIpCisgICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjZdID09ICJkYXJ3aW4iOgorICAgICAgICAgICAgICMgTWFjT1NYJ3MgbGlua2VyIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgLVIgZmxhZyBhdCBhbGwKKyAgICAgICAgICAgICByZXR1cm4gIi1MIiArIGRpcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmVfMi43LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZV8yLjcuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGY1YzI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmVfMi43LjkuYmIKQEAgLTAsMCArMSw2MyBAQAorcmVxdWlyZSBweXRob24uaW5jCisKK0VYVFJBTkFUSVZFUEFUSCArPSAiYnppcDItbmF0aXZlIgorREVQRU5EUyA9ICJvcGVuc3NsLW5hdGl2ZSBiemlwMi1yZXBsYWNlbWVudC1uYXRpdmUgemxpYi1uYXRpdmUgcmVhZGxpbmUtbmF0aXZlIHNxbGl0ZTMtbmF0aXZlIgorUFIgPSAiJHtJTkNfUFJ9LjEiCisKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgICAgIGZpbGU6Ly8wNS1lbmFibGUtY3R5cGVzLWNyb3NzLWJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8xMC1kaXN0dXRpbHMtZml4LXN3aWctcGFyYW1ldGVyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8xMS1kaXN0dXRpbHMtbmV2ZXItbW9kaWZ5LXNoZWJhbmctbGluZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJ1Zy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdW5peGNjb21waWxlci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbm9ob3N0bGlicy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbXVsdGlsaWIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FkZC1tZDVtb2R1bGUtc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYnVpbGRkaXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3BhcmFsbGVsLW1ha2VpbnN0LWNyZWF0ZS1iaW5kaXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3JldmVydF91c2Vfb2Zfc3lzY29uZmlnZGF0YS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoIFwKKyAgICAgICAgICAgIgorUyA9ICIke1dPUktESVJ9L1B5dGhvbi0ke1BWfSIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vJHtQTn06IgorCitpbmhlcml0IG5hdGl2ZQorCitSUFJPVklERVMgKz0gInB5dGhvbi1kaXN0dXRpbHMtbmF0aXZlIHB5dGhvbi1jb21wcmVzc2lvbi1uYXRpdmUgcHl0aG9uLXRleHR1dGlscy1uYXRpdmUgcHl0aG9uLWNvZGVjcy1uYXRpdmUgcHl0aG9uLWNvcmUtbmF0aXZlIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIiAtLWJpbmRpcj0ke2JpbmRpcn0vJHtQTn0iCisKK0VYVFJBX09FTUFLRSA9ICdcCisgIEJVSUxEX1NZUz0iIiBcCisgIEhPU1RfU1lTPSIiIFwKKyAgTElCQz0iIiBcCisgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSBcCisgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJfTkFUSVZFfSBcCisnCisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJYXV0b3JlY29uZiAtLXZlcmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgLS1leGNsdWRlPWF1dG9wb2ludCAuLi9QeXRob24tJHtQVn0vTW9kdWxlcy9fY3R5cGVzL2xpYmZmaQorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8ke1BOfQorCWluc3RhbGwgLW0gMDc1NSBQYXJzZXIvcGdlbiAke0R9JHtiaW5kaXJ9LyR7UE59CisKKwkjIE1ha2Ugc3VyZSB3ZSB1c2UgL3Vzci9iaW4vZW52IHB5dGhvbgorCWZvciBQWVRIU0NSSVBUIGluIGBncmVwIC1ySWwgJHtiaW5kaXJ9LyR7UE59L3B5dGhvbiAke0R9JHtiaW5kaXJ9LyR7UE59YDsgZG8KKwkJc2VkIC1pIC1lICcxc3xeIyEuKnwjIS91c3IvYmluL2VudiBweXRob258JyAkUFlUSFNDUklQVAorCWRvbmUKKworCSMgQWRkIGEgc3ltbGluayB0byB0aGUgbmF0aXZlIFB5dGhvbiBzbyB0aGF0IHNjcmlwdHMgY2FuIGp1c3QgaW52b2tlCisJIyAibmF0aXZlcHl0aG9uIiBhbmQgZ2V0IHRoZSByaWdodCBvbmUgd2l0aG91dCBuZWVkaW5nIGFic29sdXRlIHBhdGhzCisJIyAodGhlc2Ugb2Z0ZW4gZW5kIHVwIHRvbyBsb25nIGZvciB0aGUgIyEgcGFyc2VyIGluIHRoZSBrZXJuZWwgYXMgdGhlCisJIyBidWZmZXIgaXMgMTI4IGJ5dGVzIGxvbmcpLgorCWxuIC1zIHB5dGhvbi1uYXRpdmUvcHl0aG9uICR7RH0ke2JpbmRpcn0vbmF0aXZlcHl0aG9uCisKKwkjIFdlIGRvbid0IHdhbnQgbW9kdWxlcyBpbiB+Ly5sb2NhbCBiZWluZyB1c2VkIGluIHByZWZlcmVuY2UgdG8gdGhvc2UKKwkjIGluc3RhbGxlZCBpbiB0aGUgbmF0aXZlIHN5c3Jvb3QsIHNvIGRpc2FibGUgdXNlciBzaXRlIHN1cHBvcnQuCisJc2VkIC1pIC1lICdzLF5cKEVOQUJMRV9VU0VSX1NJVEUgPSBcKS4qLFwxRmFsc2UsJyAke0R9JHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vc2l0ZS5weQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1ub3NlXzEuMy42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1ub3NlXzEuMy42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZThmYzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5vc2VfMS4zLjYuYmIKQEAgLTAsMCArMSwxNiBAQAorREVTQ1JJUFRJT04gPSAibm9zZSBleHRlbmRzIHRoZSB0ZXN0IGxvYWRpbmcgYW5kIHJ1bm5pbmcgZmVhdHVyZXMgb2YgdW5pdHRlc3QsIFwKK21ha2luZyBpdCBlYXNpZXIgdG8gd3JpdGUsIGZpbmQgYW5kIHJ1biB0ZXN0cy4iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9sZ3BsLnR4dDttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2Uvbi9ub3NlL25vc2UtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGNhNTQ2ZDgxY2E4MzA5MDgwZmM4MGNiMzg5ZTdhMTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjYxZTA5MDlhNzQzZWVkMzdiMTIwN2UzOGE4ZTdiNGEyZmUwYTgyMTg1ZTM2ZjJiZTI1MmVmMWIzZjkwMTc1OCIKKworUyA9ICIke1dPUktESVJ9L25vc2UtJHtQVn0iCisKK2luaGVyaXQgc2V0dXB0b29scworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FhcmNoNjQvX251bXB5Y29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FhcmNoNjQvX251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1N2FjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWFyY2g2NC9fbnVtcHljb25maWcuaApAQCAtMCwwICsxLDMwIEBACisjZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMzIKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4CisjZGVmaW5lIE5QWV9OT19TTVAgMAorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQorI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQorI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKKyNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKKyNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMDcKKworI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUworI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWFyY2g2NC9jb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWFyY2g2NC9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzBiODY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hYXJjaDY0L2NvbmZpZy5oCkBAIC0wLDAgKzEsMTM5IEBACisjZGVmaW5lIEhBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfU0lOIDEKKyNkZWZpbmUgSEFWRV9DT1MgMQorI2RlZmluZSBIQVZFX1RBTiAxCisjZGVmaW5lIEhBVkVfU0lOSCAxCisjZGVmaW5lIEhBVkVfQ09TSCAxCisjZGVmaW5lIEhBVkVfVEFOSCAxCisjZGVmaW5lIEhBVkVfRkFCUyAxCisjZGVmaW5lIEhBVkVfRkxPT1IgMQorI2RlZmluZSBIQVZFX0NFSUwgMQorI2RlZmluZSBIQVZFX1NRUlQgMQorI2RlZmluZSBIQVZFX0xPRzEwIDEKKyNkZWZpbmUgSEFWRV9MT0cgMQorI2RlZmluZSBIQVZFX0VYUCAxCisjZGVmaW5lIEhBVkVfQVNJTiAxCisjZGVmaW5lIEhBVkVfQUNPUyAxCisjZGVmaW5lIEhBVkVfQVRBTiAxCisjZGVmaW5lIEhBVkVfRk1PRCAxCisjZGVmaW5lIEhBVkVfTU9ERiAxCisjZGVmaW5lIEhBVkVfRlJFWFAgMQorI2RlZmluZSBIQVZFX0xERVhQIDEKKyNkZWZpbmUgSEFWRV9SSU5UIDEKKyNkZWZpbmUgSEFWRV9UUlVOQyAxCisjZGVmaW5lIEhBVkVfRVhQMiAxCisjZGVmaW5lIEhBVkVfTE9HMiAxCisjZGVmaW5lIEhBVkVfQVRBTjIgMQorI2RlZmluZSBIQVZFX1BPVyAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSIDEKKyNkZWZpbmUgSEFWRV9TSU5GIDEKKyNkZWZpbmUgSEFWRV9DT1NGIDEKKyNkZWZpbmUgSEFWRV9UQU5GIDEKKyNkZWZpbmUgSEFWRV9TSU5IRiAxCisjZGVmaW5lIEhBVkVfQ09TSEYgMQorI2RlZmluZSBIQVZFX1RBTkhGIDEKKyNkZWZpbmUgSEFWRV9GQUJTRiAxCisjZGVmaW5lIEhBVkVfRkxPT1JGIDEKKyNkZWZpbmUgSEFWRV9DRUlMRiAxCisjZGVmaW5lIEhBVkVfUklOVEYgMQorI2RlZmluZSBIQVZFX1RSVU5DRiAxCisjZGVmaW5lIEhBVkVfU1FSVEYgMQorI2RlZmluZSBIQVZFX0xPRzEwRiAxCisjZGVmaW5lIEhBVkVfTE9HRiAxCisjZGVmaW5lIEhBVkVfTE9HMVBGIDEKKyNkZWZpbmUgSEFWRV9FWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUYgMQorI2RlZmluZSBIQVZFX0FTSU5GIDEKKyNkZWZpbmUgSEFWRV9BQ09TRiAxCisjZGVmaW5lIEhBVkVfQVRBTkYgMQorI2RlZmluZSBIQVZFX0FTSU5IRiAxCisjZGVmaW5lIEhBVkVfQUNPU0hGIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEYgMQorI2RlZmluZSBIQVZFX0hZUE9URiAxCisjZGVmaW5lIEhBVkVfQVRBTjJGIDEKKyNkZWZpbmUgSEFWRV9QT1dGIDEKKyNkZWZpbmUgSEFWRV9GTU9ERiAxCisjZGVmaW5lIEhBVkVfTU9ERkYgMQorI2RlZmluZSBIQVZFX0ZSRVhQRiAxCisjZGVmaW5lIEhBVkVfTERFWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFAyRiAxCisjZGVmaW5lIEhBVkVfTE9HMkYgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdORiAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSRiAxCisjZGVmaW5lIEhBVkVfU0lOTCAxCisjZGVmaW5lIEhBVkVfQ09TTCAxCisjZGVmaW5lIEhBVkVfVEFOTCAxCisjZGVmaW5lIEhBVkVfU0lOSEwgMQorI2RlZmluZSBIQVZFX0NPU0hMIDEKKyNkZWZpbmUgSEFWRV9UQU5ITCAxCisjZGVmaW5lIEhBVkVfRkFCU0wgMQorI2RlZmluZSBIQVZFX0ZMT09STCAxCisjZGVmaW5lIEhBVkVfQ0VJTEwgMQorI2RlZmluZSBIQVZFX1JJTlRMIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0wgMQorI2RlZmluZSBIQVZFX1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEwgMQorI2RlZmluZSBIQVZFX0xPR0wgMQorI2RlZmluZSBIQVZFX0xPRzFQTCAxCisjZGVmaW5lIEhBVkVfRVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQTTFMIDEKKyNkZWZpbmUgSEFWRV9BU0lOTCAxCisjZGVmaW5lIEhBVkVfQUNPU0wgMQorI2RlZmluZSBIQVZFX0FUQU5MIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEwgMQorI2RlZmluZSBIQVZFX0FDT1NITCAxCisjZGVmaW5lIEhBVkVfQVRBTkhMIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEwgMQorI2RlZmluZSBIQVZFX0FUQU4yTCAxCisjZGVmaW5lIEhBVkVfUE9XTCAxCisjZGVmaW5lIEhBVkVfRk1PREwgMQorI2RlZmluZSBIQVZFX01PREZMIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEwgMQorI2RlZmluZSBIQVZFX0xERVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQMkwgMQorI2RlZmluZSBIQVZFX0xPRzJMIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkwgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkwgMQorI2RlZmluZSBIQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBIQVZFX0NPTVBMRVhfSCAxCisjZGVmaW5lIEhBVkVfQ1JFQUwgMQorI2RlZmluZSBIQVZFX0NJTUFHIDEKKyNkZWZpbmUgSEFWRV9DQUJTIDEKKyNkZWZpbmUgSEFWRV9DQVJHIDEKKyNkZWZpbmUgSEFWRV9DRVhQIDEKKyNkZWZpbmUgSEFWRV9DU1FSVCAxCisjZGVmaW5lIEhBVkVfQ0xPRyAxCisjZGVmaW5lIEhBVkVfQ0NPUyAxCisjZGVmaW5lIEhBVkVfQ1NJTiAxCisjZGVmaW5lIEhBVkVfQ1BPVyAxCisjZGVmaW5lIEhBVkVfQ1JFQUxGIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0YgMQorI2RlZmluZSBIQVZFX0NBQlNGIDEKKyNkZWZpbmUgSEFWRV9DQVJHRiAxCisjZGVmaW5lIEhBVkVfQ0VYUEYgMQorI2RlZmluZSBIQVZFX0NTUVJURiAxCisjZGVmaW5lIEhBVkVfQ0xPR0YgMQorI2RlZmluZSBIQVZFX0NDT1NGIDEKKyNkZWZpbmUgSEFWRV9DU0lORiAxCisjZGVmaW5lIEhBVkVfQ1BPV0YgMQorI2RlZmluZSBIQVZFX0NSRUFMTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUdMIDEKKyNkZWZpbmUgSEFWRV9DQUJTTCAxCisjZGVmaW5lIEhBVkVfQ0FSR0wgMQorI2RlZmluZSBIQVZFX0NFWFBMIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEwgMQorI2RlZmluZSBIQVZFX0NMT0dMIDEKKyNkZWZpbmUgSEFWRV9DQ09TTCAxCisjZGVmaW5lIEhBVkVfQ1NJTkwgMQorI2RlZmluZSBIQVZFX0NQT1dMIDEKKyNkZWZpbmUgSEFWRV9MRE9VQkxFX0lFRUVfUVVBRF9MRSAxCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKiAjdW5kZWYgaW5saW5lICovCisjZW5kaWYKKworI2lmbmRlZiBfTlBZX05QWV9DT05GSUdfSF8KKyNlcnJvciBjb25maWcuaCBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQgZGlyZWN0bHksIGluY2x1ZGUgbnB5X2NvbmZpZy5oIGluc3RlYWQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm0vY29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybS9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2VmMTg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm0vY29uZmlnLmgKQEAgLTAsMCArMSwyMSBAQAorLyogLi9zcmMubGludXgtaTY4Ni0yLjUvbnVtcHkvY29yZS9pbmNsdWRlL251bXB5L2NvbmZpZy5oICovCisvKiAjZGVmaW5lIFNJWkVPRl9TSE9SVCAyICovCisvKiAjZGVmaW5lIFNJWkVPRl9JTlQgNCAqLworLyogI2RlZmluZSBTSVpFT0ZfTE9ORyA0ICovCisvKiAjZGVmaW5lIFNJWkVPRl9GTE9BVCA0ICovCisvKiAjZGVmaW5lIFNJWkVPRl9ET1VCTEUgOCAqLworI2RlZmluZSBTSVpFT0ZfTE9OR19ET1VCTEUgMTIKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDQKKy8qICNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4ICovCisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorLyogI2RlZmluZSBDSEFSX0JJVCA4ICovCisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX0ZMT0FUX0ZVTkNTCisjZGVmaW5lIEhBVkVfTE9HMVAKKyNkZWZpbmUgSEFWRV9FWFBNMQorI2RlZmluZSBIQVZFX0lOVkVSU0VfSFlQRVJCT0xJQworI2RlZmluZSBIQVZFX0lOVkVSU0VfSFlQRVJCT0xJQ19GTE9BVAorI2RlZmluZSBIQVZFX0lTTkFOCisjZGVmaW5lIEhBVkVfSVNJTkYKKyNkZWZpbmUgSEFWRV9SSU5UCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtL251bXB5Y29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybS9udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YmY2NTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybS9udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qIGNhdCAuL3NyYy5saW51eC1pNjg2LTIuNS9udW1weS9jb3JlL2luY2x1ZGUvbnVtcHkvbnVtcHljb25maWcuaCAqLworLyoKKyAqICAqIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYnkgbnVtcHkvY29yZS9zZXR1cC5weWMuIERPIE5PVCBFRElUIAorICogICAqLworI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIDIgCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIDQgCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyA0IAorI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQgCisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDggCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxMiAKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA0IAorI2RlZmluZSBOUFlfTk9fU01QIDAKKworI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDggCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDggCisvKiAjZGVmaW5lIENIQVJfQklUIDggKi8KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm1lYi9jb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtZWIvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlZjE4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtZWIvY29uZmlnLmgKQEAgLTAsMCArMSwyMSBAQAorLyogLi9zcmMubGludXgtaTY4Ni0yLjUvbnVtcHkvY29yZS9pbmNsdWRlL251bXB5L2NvbmZpZy5oICovCisvKiAjZGVmaW5lIFNJWkVPRl9TSE9SVCAyICovCisvKiAjZGVmaW5lIFNJWkVPRl9JTlQgNCAqLworLyogI2RlZmluZSBTSVpFT0ZfTE9ORyA0ICovCisvKiAjZGVmaW5lIFNJWkVPRl9GTE9BVCA0ICovCisvKiAjZGVmaW5lIFNJWkVPRl9ET1VCTEUgOCAqLworI2RlZmluZSBTSVpFT0ZfTE9OR19ET1VCTEUgMTIKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDQKKy8qICNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4ICovCisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorLyogI2RlZmluZSBDSEFSX0JJVCA4ICovCisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX0ZMT0FUX0ZVTkNTCisjZGVmaW5lIEhBVkVfTE9HMVAKKyNkZWZpbmUgSEFWRV9FWFBNMQorI2RlZmluZSBIQVZFX0lOVkVSU0VfSFlQRVJCT0xJQworI2RlZmluZSBIQVZFX0lOVkVSU0VfSFlQRVJCT0xJQ19GTE9BVAorI2RlZmluZSBIQVZFX0lTTkFOCisjZGVmaW5lIEhBVkVfSVNJTkYKKyNkZWZpbmUgSEFWRV9SSU5UCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtZWIvbnVtcHljb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtZWIvbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGJmNjU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm1lYi9udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qIGNhdCAuL3NyYy5saW51eC1pNjg2LTIuNS9udW1weS9jb3JlL2luY2x1ZGUvbnVtcHkvbnVtcHljb25maWcuaCAqLworLyoKKyAqICAqIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYnkgbnVtcHkvY29yZS9zZXR1cC5weWMuIERPIE5PVCBFRElUIAorICogICAqLworI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIDIgCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIDQgCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyA0IAorI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQgCisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDggCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxMiAKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA0IAorI2RlZmluZSBOUFlfTk9fU01QIDAKKworI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDggCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDggCisvKiAjZGVmaW5lIENIQVJfQklUIDggKi8KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzL19udW1weWNvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzL19udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYzQyODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHMvX251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwzMCBAQAorI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4CisjZGVmaW5lIE5QWV9OT19TTVAgMAorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQorI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQorI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKKyNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKKyNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMDcKKworI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUworI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwcy9jb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwcy9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjYxMzVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzL2NvbmZpZy5oCkBAIC0wLDAgKzEsMTM5IEBACisjZGVmaW5lIEhBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgNAorI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfU0lOIDEKKyNkZWZpbmUgSEFWRV9DT1MgMQorI2RlZmluZSBIQVZFX1RBTiAxCisjZGVmaW5lIEhBVkVfU0lOSCAxCisjZGVmaW5lIEhBVkVfQ09TSCAxCisjZGVmaW5lIEhBVkVfVEFOSCAxCisjZGVmaW5lIEhBVkVfRkFCUyAxCisjZGVmaW5lIEhBVkVfRkxPT1IgMQorI2RlZmluZSBIQVZFX0NFSUwgMQorI2RlZmluZSBIQVZFX1NRUlQgMQorI2RlZmluZSBIQVZFX0xPRzEwIDEKKyNkZWZpbmUgSEFWRV9MT0cgMQorI2RlZmluZSBIQVZFX0VYUCAxCisjZGVmaW5lIEhBVkVfQVNJTiAxCisjZGVmaW5lIEhBVkVfQUNPUyAxCisjZGVmaW5lIEhBVkVfQVRBTiAxCisjZGVmaW5lIEhBVkVfRk1PRCAxCisjZGVmaW5lIEhBVkVfTU9ERiAxCisjZGVmaW5lIEhBVkVfRlJFWFAgMQorI2RlZmluZSBIQVZFX0xERVhQIDEKKyNkZWZpbmUgSEFWRV9SSU5UIDEKKyNkZWZpbmUgSEFWRV9UUlVOQyAxCisjZGVmaW5lIEhBVkVfRVhQMiAxCisjZGVmaW5lIEhBVkVfTE9HMiAxCisjZGVmaW5lIEhBVkVfQVRBTjIgMQorI2RlZmluZSBIQVZFX1BPVyAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSIDEKKyNkZWZpbmUgSEFWRV9TSU5GIDEKKyNkZWZpbmUgSEFWRV9DT1NGIDEKKyNkZWZpbmUgSEFWRV9UQU5GIDEKKyNkZWZpbmUgSEFWRV9TSU5IRiAxCisjZGVmaW5lIEhBVkVfQ09TSEYgMQorI2RlZmluZSBIQVZFX1RBTkhGIDEKKyNkZWZpbmUgSEFWRV9GQUJTRiAxCisjZGVmaW5lIEhBVkVfRkxPT1JGIDEKKyNkZWZpbmUgSEFWRV9DRUlMRiAxCisjZGVmaW5lIEhBVkVfUklOVEYgMQorI2RlZmluZSBIQVZFX1RSVU5DRiAxCisjZGVmaW5lIEhBVkVfU1FSVEYgMQorI2RlZmluZSBIQVZFX0xPRzEwRiAxCisjZGVmaW5lIEhBVkVfTE9HRiAxCisjZGVmaW5lIEhBVkVfTE9HMVBGIDEKKyNkZWZpbmUgSEFWRV9FWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUYgMQorI2RlZmluZSBIQVZFX0FTSU5GIDEKKyNkZWZpbmUgSEFWRV9BQ09TRiAxCisjZGVmaW5lIEhBVkVfQVRBTkYgMQorI2RlZmluZSBIQVZFX0FTSU5IRiAxCisjZGVmaW5lIEhBVkVfQUNPU0hGIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEYgMQorI2RlZmluZSBIQVZFX0hZUE9URiAxCisjZGVmaW5lIEhBVkVfQVRBTjJGIDEKKyNkZWZpbmUgSEFWRV9QT1dGIDEKKyNkZWZpbmUgSEFWRV9GTU9ERiAxCisjZGVmaW5lIEhBVkVfTU9ERkYgMQorI2RlZmluZSBIQVZFX0ZSRVhQRiAxCisjZGVmaW5lIEhBVkVfTERFWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFAyRiAxCisjZGVmaW5lIEhBVkVfTE9HMkYgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdORiAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSRiAxCisjZGVmaW5lIEhBVkVfU0lOTCAxCisjZGVmaW5lIEhBVkVfQ09TTCAxCisjZGVmaW5lIEhBVkVfVEFOTCAxCisjZGVmaW5lIEhBVkVfU0lOSEwgMQorI2RlZmluZSBIQVZFX0NPU0hMIDEKKyNkZWZpbmUgSEFWRV9UQU5ITCAxCisjZGVmaW5lIEhBVkVfRkFCU0wgMQorI2RlZmluZSBIQVZFX0ZMT09STCAxCisjZGVmaW5lIEhBVkVfQ0VJTEwgMQorI2RlZmluZSBIQVZFX1JJTlRMIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0wgMQorI2RlZmluZSBIQVZFX1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEwgMQorI2RlZmluZSBIQVZFX0xPR0wgMQorI2RlZmluZSBIQVZFX0xPRzFQTCAxCisjZGVmaW5lIEhBVkVfRVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQTTFMIDEKKyNkZWZpbmUgSEFWRV9BU0lOTCAxCisjZGVmaW5lIEhBVkVfQUNPU0wgMQorI2RlZmluZSBIQVZFX0FUQU5MIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEwgMQorI2RlZmluZSBIQVZFX0FDT1NITCAxCisjZGVmaW5lIEhBVkVfQVRBTkhMIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEwgMQorI2RlZmluZSBIQVZFX0FUQU4yTCAxCisjZGVmaW5lIEhBVkVfUE9XTCAxCisjZGVmaW5lIEhBVkVfRk1PREwgMQorI2RlZmluZSBIQVZFX01PREZMIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEwgMQorI2RlZmluZSBIQVZFX0xERVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQMkwgMQorI2RlZmluZSBIQVZFX0xPRzJMIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkwgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkwgMQorI2RlZmluZSBIQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBIQVZFX0NPTVBMRVhfSCAxCisjZGVmaW5lIEhBVkVfQ1JFQUwgMQorI2RlZmluZSBIQVZFX0NJTUFHIDEKKyNkZWZpbmUgSEFWRV9DQUJTIDEKKyNkZWZpbmUgSEFWRV9DQVJHIDEKKyNkZWZpbmUgSEFWRV9DRVhQIDEKKyNkZWZpbmUgSEFWRV9DU1FSVCAxCisjZGVmaW5lIEhBVkVfQ0xPRyAxCisjZGVmaW5lIEhBVkVfQ0NPUyAxCisjZGVmaW5lIEhBVkVfQ1NJTiAxCisjZGVmaW5lIEhBVkVfQ1BPVyAxCisjZGVmaW5lIEhBVkVfQ1JFQUxGIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0YgMQorI2RlZmluZSBIQVZFX0NBQlNGIDEKKyNkZWZpbmUgSEFWRV9DQVJHRiAxCisjZGVmaW5lIEhBVkVfQ0VYUEYgMQorI2RlZmluZSBIQVZFX0NTUVJURiAxCisjZGVmaW5lIEhBVkVfQ0xPR0YgMQorI2RlZmluZSBIQVZFX0NDT1NGIDEKKyNkZWZpbmUgSEFWRV9DU0lORiAxCisjZGVmaW5lIEhBVkVfQ1BPV0YgMQorI2RlZmluZSBIQVZFX0NSRUFMTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUdMIDEKKyNkZWZpbmUgSEFWRV9DQUJTTCAxCisjZGVmaW5lIEhBVkVfQ0FSR0wgMQorI2RlZmluZSBIQVZFX0NFWFBMIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEwgMQorI2RlZmluZSBIQVZFX0NMT0dMIDEKKyNkZWZpbmUgSEFWRV9DQ09TTCAxCisjZGVmaW5lIEhBVkVfQ1NJTkwgMQorI2RlZmluZSBIQVZFX0NQT1dMIDEKKyNkZWZpbmUgSEFWRV9MRE9VQkxFX0lFRUVfRE9VQkxFX0JFIDEKKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qICN1bmRlZiBpbmxpbmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9OUFlfTlBZX0NPTkZJR19IXworI2Vycm9yIGNvbmZpZy5oIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBkaXJlY3RseSwgaW5jbHVkZSBucHlfY29uZmlnLmggaW5zdGVhZAorI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NC9fbnVtcHljb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0L19udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTdhYzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NC9fbnVtcHljb25maWcuaApAQCAtMCwwICsxLDMwIEBACisjZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMzIKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4CisjZGVmaW5lIE5QWV9OT19TTVAgMAorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQorI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQorI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKKyNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKKyNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMDcKKworI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUworI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0L2NvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjQvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMwYjg2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0L2NvbmZpZy5oCkBAIC0wLDAgKzEsMTM5IEBACisjZGVmaW5lIEhBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfU0lOIDEKKyNkZWZpbmUgSEFWRV9DT1MgMQorI2RlZmluZSBIQVZFX1RBTiAxCisjZGVmaW5lIEhBVkVfU0lOSCAxCisjZGVmaW5lIEhBVkVfQ09TSCAxCisjZGVmaW5lIEhBVkVfVEFOSCAxCisjZGVmaW5lIEhBVkVfRkFCUyAxCisjZGVmaW5lIEhBVkVfRkxPT1IgMQorI2RlZmluZSBIQVZFX0NFSUwgMQorI2RlZmluZSBIQVZFX1NRUlQgMQorI2RlZmluZSBIQVZFX0xPRzEwIDEKKyNkZWZpbmUgSEFWRV9MT0cgMQorI2RlZmluZSBIQVZFX0VYUCAxCisjZGVmaW5lIEhBVkVfQVNJTiAxCisjZGVmaW5lIEhBVkVfQUNPUyAxCisjZGVmaW5lIEhBVkVfQVRBTiAxCisjZGVmaW5lIEhBVkVfRk1PRCAxCisjZGVmaW5lIEhBVkVfTU9ERiAxCisjZGVmaW5lIEhBVkVfRlJFWFAgMQorI2RlZmluZSBIQVZFX0xERVhQIDEKKyNkZWZpbmUgSEFWRV9SSU5UIDEKKyNkZWZpbmUgSEFWRV9UUlVOQyAxCisjZGVmaW5lIEhBVkVfRVhQMiAxCisjZGVmaW5lIEhBVkVfTE9HMiAxCisjZGVmaW5lIEhBVkVfQVRBTjIgMQorI2RlZmluZSBIQVZFX1BPVyAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSIDEKKyNkZWZpbmUgSEFWRV9TSU5GIDEKKyNkZWZpbmUgSEFWRV9DT1NGIDEKKyNkZWZpbmUgSEFWRV9UQU5GIDEKKyNkZWZpbmUgSEFWRV9TSU5IRiAxCisjZGVmaW5lIEhBVkVfQ09TSEYgMQorI2RlZmluZSBIQVZFX1RBTkhGIDEKKyNkZWZpbmUgSEFWRV9GQUJTRiAxCisjZGVmaW5lIEhBVkVfRkxPT1JGIDEKKyNkZWZpbmUgSEFWRV9DRUlMRiAxCisjZGVmaW5lIEhBVkVfUklOVEYgMQorI2RlZmluZSBIQVZFX1RSVU5DRiAxCisjZGVmaW5lIEhBVkVfU1FSVEYgMQorI2RlZmluZSBIQVZFX0xPRzEwRiAxCisjZGVmaW5lIEhBVkVfTE9HRiAxCisjZGVmaW5lIEhBVkVfTE9HMVBGIDEKKyNkZWZpbmUgSEFWRV9FWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUYgMQorI2RlZmluZSBIQVZFX0FTSU5GIDEKKyNkZWZpbmUgSEFWRV9BQ09TRiAxCisjZGVmaW5lIEhBVkVfQVRBTkYgMQorI2RlZmluZSBIQVZFX0FTSU5IRiAxCisjZGVmaW5lIEhBVkVfQUNPU0hGIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEYgMQorI2RlZmluZSBIQVZFX0hZUE9URiAxCisjZGVmaW5lIEhBVkVfQVRBTjJGIDEKKyNkZWZpbmUgSEFWRV9QT1dGIDEKKyNkZWZpbmUgSEFWRV9GTU9ERiAxCisjZGVmaW5lIEhBVkVfTU9ERkYgMQorI2RlZmluZSBIQVZFX0ZSRVhQRiAxCisjZGVmaW5lIEhBVkVfTERFWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFAyRiAxCisjZGVmaW5lIEhBVkVfTE9HMkYgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdORiAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSRiAxCisjZGVmaW5lIEhBVkVfU0lOTCAxCisjZGVmaW5lIEhBVkVfQ09TTCAxCisjZGVmaW5lIEhBVkVfVEFOTCAxCisjZGVmaW5lIEhBVkVfU0lOSEwgMQorI2RlZmluZSBIQVZFX0NPU0hMIDEKKyNkZWZpbmUgSEFWRV9UQU5ITCAxCisjZGVmaW5lIEhBVkVfRkFCU0wgMQorI2RlZmluZSBIQVZFX0ZMT09STCAxCisjZGVmaW5lIEhBVkVfQ0VJTEwgMQorI2RlZmluZSBIQVZFX1JJTlRMIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0wgMQorI2RlZmluZSBIQVZFX1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEwgMQorI2RlZmluZSBIQVZFX0xPR0wgMQorI2RlZmluZSBIQVZFX0xPRzFQTCAxCisjZGVmaW5lIEhBVkVfRVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQTTFMIDEKKyNkZWZpbmUgSEFWRV9BU0lOTCAxCisjZGVmaW5lIEhBVkVfQUNPU0wgMQorI2RlZmluZSBIQVZFX0FUQU5MIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEwgMQorI2RlZmluZSBIQVZFX0FDT1NITCAxCisjZGVmaW5lIEhBVkVfQVRBTkhMIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEwgMQorI2RlZmluZSBIQVZFX0FUQU4yTCAxCisjZGVmaW5lIEhBVkVfUE9XTCAxCisjZGVmaW5lIEhBVkVfRk1PREwgMQorI2RlZmluZSBIQVZFX01PREZMIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEwgMQorI2RlZmluZSBIQVZFX0xERVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQMkwgMQorI2RlZmluZSBIQVZFX0xPRzJMIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkwgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkwgMQorI2RlZmluZSBIQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBIQVZFX0NPTVBMRVhfSCAxCisjZGVmaW5lIEhBVkVfQ1JFQUwgMQorI2RlZmluZSBIQVZFX0NJTUFHIDEKKyNkZWZpbmUgSEFWRV9DQUJTIDEKKyNkZWZpbmUgSEFWRV9DQVJHIDEKKyNkZWZpbmUgSEFWRV9DRVhQIDEKKyNkZWZpbmUgSEFWRV9DU1FSVCAxCisjZGVmaW5lIEhBVkVfQ0xPRyAxCisjZGVmaW5lIEhBVkVfQ0NPUyAxCisjZGVmaW5lIEhBVkVfQ1NJTiAxCisjZGVmaW5lIEhBVkVfQ1BPVyAxCisjZGVmaW5lIEhBVkVfQ1JFQUxGIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0YgMQorI2RlZmluZSBIQVZFX0NBQlNGIDEKKyNkZWZpbmUgSEFWRV9DQVJHRiAxCisjZGVmaW5lIEhBVkVfQ0VYUEYgMQorI2RlZmluZSBIQVZFX0NTUVJURiAxCisjZGVmaW5lIEhBVkVfQ0xPR0YgMQorI2RlZmluZSBIQVZFX0NDT1NGIDEKKyNkZWZpbmUgSEFWRV9DU0lORiAxCisjZGVmaW5lIEhBVkVfQ1BPV0YgMQorI2RlZmluZSBIQVZFX0NSRUFMTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUdMIDEKKyNkZWZpbmUgSEFWRV9DQUJTTCAxCisjZGVmaW5lIEhBVkVfQ0FSR0wgMQorI2RlZmluZSBIQVZFX0NFWFBMIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEwgMQorI2RlZmluZSBIQVZFX0NMT0dMIDEKKyNkZWZpbmUgSEFWRV9DQ09TTCAxCisjZGVmaW5lIEhBVkVfQ1NJTkwgMQorI2RlZmluZSBIQVZFX0NQT1dMIDEKKyNkZWZpbmUgSEFWRV9MRE9VQkxFX0lFRUVfUVVBRF9MRSAxCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKiAjdW5kZWYgaW5saW5lICovCisjZW5kaWYKKworI2lmbmRlZiBfTlBZX05QWV9DT05GSUdfSF8KKyNlcnJvciBjb25maWcuaCBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQgZGlyZWN0bHksIGluY2x1ZGUgbnB5X2NvbmZpZy5oIGluc3RlYWQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjRuMzIvX251bXB5Y29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NG4zMi9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTU3YWMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjRuMzIvX251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwzMCBAQAorI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDMyCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAorI2RlZmluZSBOUFlfTk9fU01QIDAKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCisjZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5CisjZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDA3CisKKyNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NG4zMi9jb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0bjMyL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMGI4NjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NG4zMi9jb25maWcuaApAQCAtMCwwICsxLDEzOSBAQAorI2RlZmluZSBIQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX1NJTiAxCisjZGVmaW5lIEhBVkVfQ09TIDEKKyNkZWZpbmUgSEFWRV9UQU4gMQorI2RlZmluZSBIQVZFX1NJTkggMQorI2RlZmluZSBIQVZFX0NPU0ggMQorI2RlZmluZSBIQVZFX1RBTkggMQorI2RlZmluZSBIQVZFX0ZBQlMgMQorI2RlZmluZSBIQVZFX0ZMT09SIDEKKyNkZWZpbmUgSEFWRV9DRUlMIDEKKyNkZWZpbmUgSEFWRV9TUVJUIDEKKyNkZWZpbmUgSEFWRV9MT0cxMCAxCisjZGVmaW5lIEhBVkVfTE9HIDEKKyNkZWZpbmUgSEFWRV9FWFAgMQorI2RlZmluZSBIQVZFX0FTSU4gMQorI2RlZmluZSBIQVZFX0FDT1MgMQorI2RlZmluZSBIQVZFX0FUQU4gMQorI2RlZmluZSBIQVZFX0ZNT0QgMQorI2RlZmluZSBIQVZFX01PREYgMQorI2RlZmluZSBIQVZFX0ZSRVhQIDEKKyNkZWZpbmUgSEFWRV9MREVYUCAxCisjZGVmaW5lIEhBVkVfUklOVCAxCisjZGVmaW5lIEhBVkVfVFJVTkMgMQorI2RlZmluZSBIQVZFX0VYUDIgMQorI2RlZmluZSBIQVZFX0xPRzIgMQorI2RlZmluZSBIQVZFX0FUQU4yIDEKKyNkZWZpbmUgSEFWRV9QT1cgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUiAxCisjZGVmaW5lIEhBVkVfU0lORiAxCisjZGVmaW5lIEhBVkVfQ09TRiAxCisjZGVmaW5lIEhBVkVfVEFORiAxCisjZGVmaW5lIEhBVkVfU0lOSEYgMQorI2RlZmluZSBIQVZFX0NPU0hGIDEKKyNkZWZpbmUgSEFWRV9UQU5IRiAxCisjZGVmaW5lIEhBVkVfRkFCU0YgMQorI2RlZmluZSBIQVZFX0ZMT09SRiAxCisjZGVmaW5lIEhBVkVfQ0VJTEYgMQorI2RlZmluZSBIQVZFX1JJTlRGIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0YgMQorI2RlZmluZSBIQVZFX1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEYgMQorI2RlZmluZSBIQVZFX0xPR0YgMQorI2RlZmluZSBIQVZFX0xPRzFQRiAxCisjZGVmaW5lIEhBVkVfRVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQTTFGIDEKKyNkZWZpbmUgSEFWRV9BU0lORiAxCisjZGVmaW5lIEhBVkVfQUNPU0YgMQorI2RlZmluZSBIQVZFX0FUQU5GIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEYgMQorI2RlZmluZSBIQVZFX0FDT1NIRiAxCisjZGVmaW5lIEhBVkVfQVRBTkhGIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEYgMQorI2RlZmluZSBIQVZFX0FUQU4yRiAxCisjZGVmaW5lIEhBVkVfUE9XRiAxCisjZGVmaW5lIEhBVkVfRk1PREYgMQorI2RlZmluZSBIQVZFX01PREZGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEYgMQorI2RlZmluZSBIQVZFX0xERVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQMkYgMQorI2RlZmluZSBIQVZFX0xPRzJGIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkYgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkYgMQorI2RlZmluZSBIQVZFX1NJTkwgMQorI2RlZmluZSBIQVZFX0NPU0wgMQorI2RlZmluZSBIQVZFX1RBTkwgMQorI2RlZmluZSBIQVZFX1NJTkhMIDEKKyNkZWZpbmUgSEFWRV9DT1NITCAxCisjZGVmaW5lIEhBVkVfVEFOSEwgMQorI2RlZmluZSBIQVZFX0ZBQlNMIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkwgMQorI2RlZmluZSBIQVZFX0NFSUxMIDEKKyNkZWZpbmUgSEFWRV9SSU5UTCAxCisjZGVmaW5lIEhBVkVfVFJVTkNMIDEKKyNkZWZpbmUgSEFWRV9TUVJUTCAxCisjZGVmaW5lIEhBVkVfTE9HMTBMIDEKKyNkZWZpbmUgSEFWRV9MT0dMIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEwgMQorI2RlZmluZSBIQVZFX0VYUEwgMQorI2RlZmluZSBIQVZFX0VYUE0xTCAxCisjZGVmaW5lIEhBVkVfQVNJTkwgMQorI2RlZmluZSBIQVZFX0FDT1NMIDEKKyNkZWZpbmUgSEFWRV9BVEFOTCAxCisjZGVmaW5lIEhBVkVfQVNJTkhMIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEwgMQorI2RlZmluZSBIQVZFX0FUQU5ITCAxCisjZGVmaW5lIEhBVkVfSFlQT1RMIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkwgMQorI2RlZmluZSBIQVZFX1BPV0wgMQorI2RlZmluZSBIQVZFX0ZNT0RMIDEKKyNkZWZpbmUgSEFWRV9NT0RGTCAxCisjZGVmaW5lIEhBVkVfRlJFWFBMIDEKKyNkZWZpbmUgSEFWRV9MREVYUEwgMQorI2RlZmluZSBIQVZFX0VYUDJMIDEKKyNkZWZpbmUgSEFWRV9MT0cyTCAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05MIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJMIDEKKyNkZWZpbmUgSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgSEFWRV9DT01QTEVYX0ggMQorI2RlZmluZSBIQVZFX0NSRUFMIDEKKyNkZWZpbmUgSEFWRV9DSU1BRyAxCisjZGVmaW5lIEhBVkVfQ0FCUyAxCisjZGVmaW5lIEhBVkVfQ0FSRyAxCisjZGVmaW5lIEhBVkVfQ0VYUCAxCisjZGVmaW5lIEhBVkVfQ1NRUlQgMQorI2RlZmluZSBIQVZFX0NMT0cgMQorI2RlZmluZSBIQVZFX0NDT1MgMQorI2RlZmluZSBIQVZFX0NTSU4gMQorI2RlZmluZSBIQVZFX0NQT1cgMQorI2RlZmluZSBIQVZFX0NSRUFMRiAxCisjZGVmaW5lIEhBVkVfQ0lNQUdGIDEKKyNkZWZpbmUgSEFWRV9DQUJTRiAxCisjZGVmaW5lIEhBVkVfQ0FSR0YgMQorI2RlZmluZSBIQVZFX0NFWFBGIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEYgMQorI2RlZmluZSBIQVZFX0NMT0dGIDEKKyNkZWZpbmUgSEFWRV9DQ09TRiAxCisjZGVmaW5lIEhBVkVfQ1NJTkYgMQorI2RlZmluZSBIQVZFX0NQT1dGIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEwgMQorI2RlZmluZSBIQVZFX0NJTUFHTCAxCisjZGVmaW5lIEhBVkVfQ0FCU0wgMQorI2RlZmluZSBIQVZFX0NBUkdMIDEKKyNkZWZpbmUgSEFWRV9DRVhQTCAxCisjZGVmaW5lIEhBVkVfQ1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9DTE9HTCAxCisjZGVmaW5lIEhBVkVfQ0NPU0wgMQorI2RlZmluZSBIQVZFX0NTSU5MIDEKKyNkZWZpbmUgSEFWRV9DUE9XTCAxCisjZGVmaW5lIEhBVkVfTERPVUJMRV9JRUVFX1FVQURfTEUgMQorI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX05QWV9OUFlfQ09ORklHX0hfCisjZXJyb3IgY29uZmlnLmggc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkIGRpcmVjdGx5LCBpbmNsdWRlIG5weV9jb25maWcuaCBpbnN0ZWFkCisjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwc2VsL2NvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzZWwvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlZjE4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwc2VsL2NvbmZpZy5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qIC4vc3JjLmxpbnV4LWk2ODYtMi41L251bXB5L2NvcmUvaW5jbHVkZS9udW1weS9jb25maWcuaCAqLworLyogI2RlZmluZSBTSVpFT0ZfU0hPUlQgMiAqLworLyogI2RlZmluZSBTSVpFT0ZfSU5UIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0xPTkcgNCAqLworLyogI2RlZmluZSBTSVpFT0ZfRkxPQVQgNCAqLworLyogI2RlZmluZSBTSVpFT0ZfRE9VQkxFIDggKi8KKyNkZWZpbmUgU0laRU9GX0xPTkdfRE9VQkxFIDEyCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA0CisvKiAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOCAqLworI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKy8qICNkZWZpbmUgQ0hBUl9CSVQgOCAqLworI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9GTE9BVF9GVU5DUworI2RlZmluZSBIQVZFX0xPRzFQCisjZGVmaW5lIEhBVkVfRVhQTTEKKyNkZWZpbmUgSEFWRV9JTlZFUlNFX0hZUEVSQk9MSUMKKyNkZWZpbmUgSEFWRV9JTlZFUlNFX0hZUEVSQk9MSUNfRkxPQVQKKyNkZWZpbmUgSEFWRV9JU05BTgorI2RlZmluZSBIQVZFX0lTSU5GCisjZGVmaW5lIEhBVkVfUklOVAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHNlbC9udW1weWNvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzZWwvbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGJmNjU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzZWwvbnVtcHljb25maWcuaApAQCAtMCwwICsxLDE3IEBACisvKiBjYXQgLi9zcmMubGludXgtaTY4Ni0yLjUvbnVtcHkvY29yZS9pbmNsdWRlL251bXB5L251bXB5Y29uZmlnLmggKi8KKy8qCisgKiAgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IG51bXB5L2NvcmUvc2V0dXAucHljLiBETyBOT1QgRURJVCAKKyAqICAgKi8KKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCAyIAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCA0IAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0IAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4IAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTIgCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgNCAKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4IAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4IAorLyogI2RlZmluZSBDSEFSX0JJVCA4ICovCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbm8taG9zdC1wYXRocy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbm8taG9zdC1wYXRocy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQ1MDM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9uby1ob3N0LXBhdGhzLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0Rvbid0IHNlYXJjaCAvdXNyIGFuZCBzbyBvbiBmb3IgbGlicmFyaWVzIGJ5IGRlZmF1bHQgdG8gYXZvaWQgaG9zdCBjb250YW1pbmF0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgKEFzIHRoZSBjb2RlIHN0YW5kcywgdGhpcyBpcyBhIGhhY2spCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvbnVtcHkvZGlzdHV0aWxzL3N5c3RlbV9pbmZvLnB5IGIvbnVtcHkvZGlzdHV0aWxzL3N5c3RlbV9pbmZvLnB5CitpbmRleCBiYWM5MGZiLi5hNjNkNzk2IDEwMDY0NAorLS0tIGEvbnVtcHkvZGlzdHV0aWxzL3N5c3RlbV9pbmZvLnB5CisrKysgYi9udW1weS9kaXN0dXRpbHMvc3lzdGVtX2luZm8ucHkKK0BAIC0xOTEsNDEgKzE5MSwxMiBAQCBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgZGVmYXVsdF94MTFfbGliX2RpcnMgPSBbXQorICAgICBkZWZhdWx0X3gxMV9pbmNsdWRlX2RpcnMgPSBbXQorIGVsc2U6CistICAgIGRlZmF1bHRfbGliX2RpcnMgPSBsaWJwYXRocyhbJy91c3IvbG9jYWwvbGliJywgJy9vcHQvbGliJywgJy91c3IvbGliJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL29wdC9sb2NhbC9saWInLCAnL3N3L2xpYiddLCBwbGF0Zm9ybV9iaXRzKQorLSAgICBkZWZhdWx0X2luY2x1ZGVfZGlycyA9IFsnL3Vzci9sb2NhbC9pbmNsdWRlJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9vcHQvaW5jbHVkZScsICcvdXNyL2luY2x1ZGUnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBhdGggb2YgdW1mcGFjayB1bmRlciBtYWNwb3J0cworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL29wdC9sb2NhbC9pbmNsdWRlL3Vmc3BhcnNlJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9vcHQvbG9jYWwvaW5jbHVkZScsICcvc3cvaW5jbHVkZScsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2luY2x1ZGUvc3VpdGVzcGFyc2UnXQorLSAgICBkZWZhdWx0X3NyY19kaXJzID0gWycuJywgJy91c3IvbG9jYWwvc3JjJywgJy9vcHQvc3JjJywgJy9zdy9zcmMnXQorLQorLSAgICBkZWZhdWx0X3gxMV9saWJfZGlycyA9IGxpYnBhdGhzKFsnL3Vzci9YMTFSNi9saWInLCAnL3Vzci9YMTEvbGliJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvbGliJ10sIHBsYXRmb3JtX2JpdHMpCistICAgIGRlZmF1bHRfeDExX2luY2x1ZGVfZGlycyA9IFsnL3Vzci9YMTFSNi9pbmNsdWRlJywgJy91c3IvWDExL2luY2x1ZGUnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvaW5jbHVkZSddCistCistICAgIGlmIG9zLnBhdGguZXhpc3RzKCcvdXNyL2xpYi9YMTEnKToKKy0gICAgICAgIGdsb2JiZWRfeDExX2RpciA9IGdsb2IoJy91c3IvbGliLyovbGliWDExLnNvJykKKy0gICAgICAgIGlmIGdsb2JiZWRfeDExX2RpcjoKKy0gICAgICAgICAgICB4MTFfc29fZGlyID0gb3MucGF0aC5zcGxpdChnbG9iYmVkX3gxMV9kaXJbMF0pWzBdCistICAgICAgICAgICAgZGVmYXVsdF94MTFfbGliX2RpcnMuZXh0ZW5kKFt4MTFfc29fZGlyLCAnL3Vzci9saWIvWDExJ10pCistICAgICAgICAgICAgZGVmYXVsdF94MTFfaW5jbHVkZV9kaXJzLmV4dGVuZChbJy91c3IvbGliL1gxMS9pbmNsdWRlJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Vzci9pbmNsdWRlL1gxMSddKQorLQorLSAgICBpbXBvcnQgc3VicHJvY2VzcyBhcyBzcAorLSAgICB0cnk6CistICAgICAgICBwID0gc3AuUG9wZW4oWyJnY2MiLCAiLXByaW50LW11bHRpYXJjaCJdLCBzdGRvdXQ9c3AuUElQRSwKKy0gICAgICAgICAgICAgICAgc3RkZXJyPW9wZW4ob3MuZGV2bnVsbCwgJ3cnKSkKKy0gICAgZXhjZXB0IE9TRXJyb3I6CistICAgICAgICBwYXNzICMgZ2NjIGlzIG5vdCBpbnN0YWxsZWQKKy0gICAgZWxzZToKKy0gICAgICAgIHRyaXBsZXQgPSBzdHIocC5jb21tdW5pY2F0ZSgpWzBdLmRlY29kZSgpLnN0cmlwKCkpCistICAgICAgICBpZiBwLnJldHVybmNvZGUgPT0gMDoKKy0gICAgICAgICAgICAjIGdjYyBzdXBwb3J0cyB0aGUgIi1wcmludC1tdWx0aWFyY2giIG9wdGlvbgorLSAgICAgICAgICAgIGRlZmF1bHRfeDExX2xpYl9kaXJzICs9IFtvcy5wYXRoLmpvaW4oIi91c3IvbGliLyIsIHRyaXBsZXQpXQorLSAgICAgICAgICAgIGRlZmF1bHRfbGliX2RpcnMgKz0gW29zLnBhdGguam9pbigiL3Vzci9saWIvIiwgdHJpcGxldCldCisrICAgIGRlZmF1bHRfbGliX2RpcnMgPSBsaWJwYXRocyhbJy9kZWFkaXIvbGliJ10sIHBsYXRmb3JtX2JpdHMpCisrICAgIGRlZmF1bHRfaW5jbHVkZV9kaXJzID0gWycvZGVhZGRpci9pbmNsdWRlJ10KKysgICAgZGVmYXVsdF9zcmNfZGlycyA9IFsnLicsICcvZGVhZGRpci9zcmMnXQorKworKyAgICBkZWZhdWx0X3gxMV9saWJfZGlycyA9IGxpYnBhdGhzKFsnL2RlYWRkaXIvbGliJ10sIHBsYXRmb3JtX2JpdHMpCisrICAgIGRlZmF1bHRfeDExX2luY2x1ZGVfZGlycyA9IFsnL2RlYWRkaXIvaW5jbHVkZSddCisgCisgaWYgb3MucGF0aC5qb2luKHN5cy5wcmVmaXgsICdsaWInKSBub3QgaW4gZGVmYXVsdF9saWJfZGlyczoKKyAgICAgZGVmYXVsdF9saWJfZGlycy5pbnNlcnQoMCwgb3MucGF0aC5qb2luKHN5cy5wcmVmaXgsICdsaWInKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYy9fbnVtcHljb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYy9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2NiZmIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjL19udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMzAgQEAKKyNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORworI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAzMgorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQorI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQorI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwNworCisjaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjL2NvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NWQzOWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGMvY29uZmlnLmgKQEAgLTAsMCArMSwxMzkgQEAKKyNkZWZpbmUgSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA0CisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9TSU4gMQorI2RlZmluZSBIQVZFX0NPUyAxCisjZGVmaW5lIEhBVkVfVEFOIDEKKyNkZWZpbmUgSEFWRV9TSU5IIDEKKyNkZWZpbmUgSEFWRV9DT1NIIDEKKyNkZWZpbmUgSEFWRV9UQU5IIDEKKyNkZWZpbmUgSEFWRV9GQUJTIDEKKyNkZWZpbmUgSEFWRV9GTE9PUiAxCisjZGVmaW5lIEhBVkVfQ0VJTCAxCisjZGVmaW5lIEhBVkVfU1FSVCAxCisjZGVmaW5lIEhBVkVfTE9HMTAgMQorI2RlZmluZSBIQVZFX0xPRyAxCisjZGVmaW5lIEhBVkVfRVhQIDEKKyNkZWZpbmUgSEFWRV9BU0lOIDEKKyNkZWZpbmUgSEFWRV9BQ09TIDEKKyNkZWZpbmUgSEFWRV9BVEFOIDEKKyNkZWZpbmUgSEFWRV9GTU9EIDEKKyNkZWZpbmUgSEFWRV9NT0RGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUCAxCisjZGVmaW5lIEhBVkVfTERFWFAgMQorI2RlZmluZSBIQVZFX1JJTlQgMQorI2RlZmluZSBIQVZFX1RSVU5DIDEKKyNkZWZpbmUgSEFWRV9FWFAyIDEKKyNkZWZpbmUgSEFWRV9MT0cyIDEKKyNkZWZpbmUgSEFWRV9BVEFOMiAxCisjZGVmaW5lIEhBVkVfUE9XIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVIgMQorI2RlZmluZSBIQVZFX1NJTkYgMQorI2RlZmluZSBIQVZFX0NPU0YgMQorI2RlZmluZSBIQVZFX1RBTkYgMQorI2RlZmluZSBIQVZFX1NJTkhGIDEKKyNkZWZpbmUgSEFWRV9DT1NIRiAxCisjZGVmaW5lIEhBVkVfVEFOSEYgMQorI2RlZmluZSBIQVZFX0ZBQlNGIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkYgMQorI2RlZmluZSBIQVZFX0NFSUxGIDEKKyNkZWZpbmUgSEFWRV9SSU5URiAxCisjZGVmaW5lIEhBVkVfVFJVTkNGIDEKKyNkZWZpbmUgSEFWRV9TUVJURiAxCisjZGVmaW5lIEhBVkVfTE9HMTBGIDEKKyNkZWZpbmUgSEFWRV9MT0dGIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEYgMQorI2RlZmluZSBIQVZFX0VYUEYgMQorI2RlZmluZSBIQVZFX0VYUE0xRiAxCisjZGVmaW5lIEhBVkVfQVNJTkYgMQorI2RlZmluZSBIQVZFX0FDT1NGIDEKKyNkZWZpbmUgSEFWRV9BVEFORiAxCisjZGVmaW5lIEhBVkVfQVNJTkhGIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEYgMQorI2RlZmluZSBIQVZFX0FUQU5IRiAxCisjZGVmaW5lIEhBVkVfSFlQT1RGIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkYgMQorI2RlZmluZSBIQVZFX1BPV0YgMQorI2RlZmluZSBIQVZFX0ZNT0RGIDEKKyNkZWZpbmUgSEFWRV9NT0RGRiAxCisjZGVmaW5lIEhBVkVfRlJFWFBGIDEKKyNkZWZpbmUgSEFWRV9MREVYUEYgMQorI2RlZmluZSBIQVZFX0VYUDJGIDEKKyNkZWZpbmUgSEFWRV9MT0cyRiAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05GIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJGIDEKKyNkZWZpbmUgSEFWRV9TSU5MIDEKKyNkZWZpbmUgSEFWRV9DT1NMIDEKKyNkZWZpbmUgSEFWRV9UQU5MIDEKKyNkZWZpbmUgSEFWRV9TSU5ITCAxCisjZGVmaW5lIEhBVkVfQ09TSEwgMQorI2RlZmluZSBIQVZFX1RBTkhMIDEKKyNkZWZpbmUgSEFWRV9GQUJTTCAxCisjZGVmaW5lIEhBVkVfRkxPT1JMIDEKKyNkZWZpbmUgSEFWRV9DRUlMTCAxCisjZGVmaW5lIEhBVkVfUklOVEwgMQorI2RlZmluZSBIQVZFX1RSVU5DTCAxCisjZGVmaW5lIEhBVkVfU1FSVEwgMQorI2RlZmluZSBIQVZFX0xPRzEwTCAxCisjZGVmaW5lIEhBVkVfTE9HTCAxCisjZGVmaW5lIEhBVkVfTE9HMVBMIDEKKyNkZWZpbmUgSEFWRV9FWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUwgMQorI2RlZmluZSBIQVZFX0FTSU5MIDEKKyNkZWZpbmUgSEFWRV9BQ09TTCAxCisjZGVmaW5lIEhBVkVfQVRBTkwgMQorI2RlZmluZSBIQVZFX0FTSU5ITCAxCisjZGVmaW5lIEhBVkVfQUNPU0hMIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEwgMQorI2RlZmluZSBIQVZFX0hZUE9UTCAxCisjZGVmaW5lIEhBVkVfQVRBTjJMIDEKKyNkZWZpbmUgSEFWRV9QT1dMIDEKKyNkZWZpbmUgSEFWRV9GTU9ETCAxCisjZGVmaW5lIEhBVkVfTU9ERkwgMQorI2RlZmluZSBIQVZFX0ZSRVhQTCAxCisjZGVmaW5lIEhBVkVfTERFWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFAyTCAxCisjZGVmaW5lIEhBVkVfTE9HMkwgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdOTCAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSTCAxCisjZGVmaW5lIEhBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIEhBVkVfQ09NUExFWF9IIDEKKyNkZWZpbmUgSEFWRV9DUkVBTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUcgMQorI2RlZmluZSBIQVZFX0NBQlMgMQorI2RlZmluZSBIQVZFX0NBUkcgMQorI2RlZmluZSBIQVZFX0NFWFAgMQorI2RlZmluZSBIQVZFX0NTUVJUIDEKKyNkZWZpbmUgSEFWRV9DTE9HIDEKKyNkZWZpbmUgSEFWRV9DQ09TIDEKKyNkZWZpbmUgSEFWRV9DU0lOIDEKKyNkZWZpbmUgSEFWRV9DUE9XIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEYgMQorI2RlZmluZSBIQVZFX0NJTUFHRiAxCisjZGVmaW5lIEhBVkVfQ0FCU0YgMQorI2RlZmluZSBIQVZFX0NBUkdGIDEKKyNkZWZpbmUgSEFWRV9DRVhQRiAxCisjZGVmaW5lIEhBVkVfQ1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9DTE9HRiAxCisjZGVmaW5lIEhBVkVfQ0NPU0YgMQorI2RlZmluZSBIQVZFX0NTSU5GIDEKKyNkZWZpbmUgSEFWRV9DUE9XRiAxCisjZGVmaW5lIEhBVkVfQ1JFQUxMIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0wgMQorI2RlZmluZSBIQVZFX0NBQlNMIDEKKyNkZWZpbmUgSEFWRV9DQVJHTCAxCisjZGVmaW5lIEhBVkVfQ0VYUEwgMQorI2RlZmluZSBIQVZFX0NTUVJUTCAxCisjZGVmaW5lIEhBVkVfQ0xPR0wgMQorI2RlZmluZSBIQVZFX0NDT1NMIDEKKyNkZWZpbmUgSEFWRV9DU0lOTCAxCisjZGVmaW5lIEhBVkVfQ1BPV0wgMQorI2RlZmluZSBIQVZFX0xET1VCTEVfRE9VQkxFX0RPVUJMRV9CRSAxCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKiAjdW5kZWYgaW5saW5lICovCisjZW5kaWYKKworI2lmbmRlZiBfTlBZX05QWV9DT05GSUdfSF8KKyNlcnJvciBjb25maWcuaCBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQgZGlyZWN0bHksIGluY2x1ZGUgbnB5X2NvbmZpZy5oIGluc3RlYWQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjNjQvX251bXB5Y29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGM2NC9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTU3YWMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjNjQvX251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwzMCBAQAorI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDMyCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAorI2RlZmluZSBOUFlfTk9fU01QIDAKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCisjZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5CisjZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDA3CisKKyNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGM2NC9jb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYzY0L2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMGI4NjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGM2NC9jb25maWcuaApAQCAtMCwwICsxLDEzOSBAQAorI2RlZmluZSBIQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX1NJTiAxCisjZGVmaW5lIEhBVkVfQ09TIDEKKyNkZWZpbmUgSEFWRV9UQU4gMQorI2RlZmluZSBIQVZFX1NJTkggMQorI2RlZmluZSBIQVZFX0NPU0ggMQorI2RlZmluZSBIQVZFX1RBTkggMQorI2RlZmluZSBIQVZFX0ZBQlMgMQorI2RlZmluZSBIQVZFX0ZMT09SIDEKKyNkZWZpbmUgSEFWRV9DRUlMIDEKKyNkZWZpbmUgSEFWRV9TUVJUIDEKKyNkZWZpbmUgSEFWRV9MT0cxMCAxCisjZGVmaW5lIEhBVkVfTE9HIDEKKyNkZWZpbmUgSEFWRV9FWFAgMQorI2RlZmluZSBIQVZFX0FTSU4gMQorI2RlZmluZSBIQVZFX0FDT1MgMQorI2RlZmluZSBIQVZFX0FUQU4gMQorI2RlZmluZSBIQVZFX0ZNT0QgMQorI2RlZmluZSBIQVZFX01PREYgMQorI2RlZmluZSBIQVZFX0ZSRVhQIDEKKyNkZWZpbmUgSEFWRV9MREVYUCAxCisjZGVmaW5lIEhBVkVfUklOVCAxCisjZGVmaW5lIEhBVkVfVFJVTkMgMQorI2RlZmluZSBIQVZFX0VYUDIgMQorI2RlZmluZSBIQVZFX0xPRzIgMQorI2RlZmluZSBIQVZFX0FUQU4yIDEKKyNkZWZpbmUgSEFWRV9QT1cgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUiAxCisjZGVmaW5lIEhBVkVfU0lORiAxCisjZGVmaW5lIEhBVkVfQ09TRiAxCisjZGVmaW5lIEhBVkVfVEFORiAxCisjZGVmaW5lIEhBVkVfU0lOSEYgMQorI2RlZmluZSBIQVZFX0NPU0hGIDEKKyNkZWZpbmUgSEFWRV9UQU5IRiAxCisjZGVmaW5lIEhBVkVfRkFCU0YgMQorI2RlZmluZSBIQVZFX0ZMT09SRiAxCisjZGVmaW5lIEhBVkVfQ0VJTEYgMQorI2RlZmluZSBIQVZFX1JJTlRGIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0YgMQorI2RlZmluZSBIQVZFX1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEYgMQorI2RlZmluZSBIQVZFX0xPR0YgMQorI2RlZmluZSBIQVZFX0xPRzFQRiAxCisjZGVmaW5lIEhBVkVfRVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQTTFGIDEKKyNkZWZpbmUgSEFWRV9BU0lORiAxCisjZGVmaW5lIEhBVkVfQUNPU0YgMQorI2RlZmluZSBIQVZFX0FUQU5GIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEYgMQorI2RlZmluZSBIQVZFX0FDT1NIRiAxCisjZGVmaW5lIEhBVkVfQVRBTkhGIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEYgMQorI2RlZmluZSBIQVZFX0FUQU4yRiAxCisjZGVmaW5lIEhBVkVfUE9XRiAxCisjZGVmaW5lIEhBVkVfRk1PREYgMQorI2RlZmluZSBIQVZFX01PREZGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEYgMQorI2RlZmluZSBIQVZFX0xERVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQMkYgMQorI2RlZmluZSBIQVZFX0xPRzJGIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkYgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkYgMQorI2RlZmluZSBIQVZFX1NJTkwgMQorI2RlZmluZSBIQVZFX0NPU0wgMQorI2RlZmluZSBIQVZFX1RBTkwgMQorI2RlZmluZSBIQVZFX1NJTkhMIDEKKyNkZWZpbmUgSEFWRV9DT1NITCAxCisjZGVmaW5lIEhBVkVfVEFOSEwgMQorI2RlZmluZSBIQVZFX0ZBQlNMIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkwgMQorI2RlZmluZSBIQVZFX0NFSUxMIDEKKyNkZWZpbmUgSEFWRV9SSU5UTCAxCisjZGVmaW5lIEhBVkVfVFJVTkNMIDEKKyNkZWZpbmUgSEFWRV9TUVJUTCAxCisjZGVmaW5lIEhBVkVfTE9HMTBMIDEKKyNkZWZpbmUgSEFWRV9MT0dMIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEwgMQorI2RlZmluZSBIQVZFX0VYUEwgMQorI2RlZmluZSBIQVZFX0VYUE0xTCAxCisjZGVmaW5lIEhBVkVfQVNJTkwgMQorI2RlZmluZSBIQVZFX0FDT1NMIDEKKyNkZWZpbmUgSEFWRV9BVEFOTCAxCisjZGVmaW5lIEhBVkVfQVNJTkhMIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEwgMQorI2RlZmluZSBIQVZFX0FUQU5ITCAxCisjZGVmaW5lIEhBVkVfSFlQT1RMIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkwgMQorI2RlZmluZSBIQVZFX1BPV0wgMQorI2RlZmluZSBIQVZFX0ZNT0RMIDEKKyNkZWZpbmUgSEFWRV9NT0RGTCAxCisjZGVmaW5lIEhBVkVfRlJFWFBMIDEKKyNkZWZpbmUgSEFWRV9MREVYUEwgMQorI2RlZmluZSBIQVZFX0VYUDJMIDEKKyNkZWZpbmUgSEFWRV9MT0cyTCAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05MIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJMIDEKKyNkZWZpbmUgSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgSEFWRV9DT01QTEVYX0ggMQorI2RlZmluZSBIQVZFX0NSRUFMIDEKKyNkZWZpbmUgSEFWRV9DSU1BRyAxCisjZGVmaW5lIEhBVkVfQ0FCUyAxCisjZGVmaW5lIEhBVkVfQ0FSRyAxCisjZGVmaW5lIEhBVkVfQ0VYUCAxCisjZGVmaW5lIEhBVkVfQ1NRUlQgMQorI2RlZmluZSBIQVZFX0NMT0cgMQorI2RlZmluZSBIQVZFX0NDT1MgMQorI2RlZmluZSBIQVZFX0NTSU4gMQorI2RlZmluZSBIQVZFX0NQT1cgMQorI2RlZmluZSBIQVZFX0NSRUFMRiAxCisjZGVmaW5lIEhBVkVfQ0lNQUdGIDEKKyNkZWZpbmUgSEFWRV9DQUJTRiAxCisjZGVmaW5lIEhBVkVfQ0FSR0YgMQorI2RlZmluZSBIQVZFX0NFWFBGIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEYgMQorI2RlZmluZSBIQVZFX0NMT0dGIDEKKyNkZWZpbmUgSEFWRV9DQ09TRiAxCisjZGVmaW5lIEhBVkVfQ1NJTkYgMQorI2RlZmluZSBIQVZFX0NQT1dGIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEwgMQorI2RlZmluZSBIQVZFX0NJTUFHTCAxCisjZGVmaW5lIEhBVkVfQ0FCU0wgMQorI2RlZmluZSBIQVZFX0NBUkdMIDEKKyNkZWZpbmUgSEFWRV9DRVhQTCAxCisjZGVmaW5lIEhBVkVfQ1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9DTE9HTCAxCisjZGVmaW5lIEhBVkVfQ0NPU0wgMQorI2RlZmluZSBIQVZFX0NTSU5MIDEKKyNkZWZpbmUgSEFWRV9DUE9XTCAxCisjZGVmaW5lIEhBVkVfTERPVUJMRV9JRUVFX1FVQURfTEUgMQorI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX05QWV9OUFlfQ09ORklHX0hfCisjZXJyb3IgY29uZmlnLmggc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkIGRpcmVjdGx5LCBpbmNsdWRlIG5weV9jb25maWcuaCBpbnN0ZWFkCisjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2LTY0L19udW1weWNvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYtNjQvX251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1N2FjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2LTY0L19udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMzAgQEAKKyNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORworI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAzMgorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQorI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQorI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwNworCisjaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYtNjQvY29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni02NC9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2U2M2I3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYtNjQvY29uZmlnLmgKQEAgLTAsMCArMSwxMzkgQEAKKyNkZWZpbmUgSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9TSU4gMQorI2RlZmluZSBIQVZFX0NPUyAxCisjZGVmaW5lIEhBVkVfVEFOIDEKKyNkZWZpbmUgSEFWRV9TSU5IIDEKKyNkZWZpbmUgSEFWRV9DT1NIIDEKKyNkZWZpbmUgSEFWRV9UQU5IIDEKKyNkZWZpbmUgSEFWRV9GQUJTIDEKKyNkZWZpbmUgSEFWRV9GTE9PUiAxCisjZGVmaW5lIEhBVkVfQ0VJTCAxCisjZGVmaW5lIEhBVkVfU1FSVCAxCisjZGVmaW5lIEhBVkVfTE9HMTAgMQorI2RlZmluZSBIQVZFX0xPRyAxCisjZGVmaW5lIEhBVkVfRVhQIDEKKyNkZWZpbmUgSEFWRV9BU0lOIDEKKyNkZWZpbmUgSEFWRV9BQ09TIDEKKyNkZWZpbmUgSEFWRV9BVEFOIDEKKyNkZWZpbmUgSEFWRV9GTU9EIDEKKyNkZWZpbmUgSEFWRV9NT0RGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUCAxCisjZGVmaW5lIEhBVkVfTERFWFAgMQorI2RlZmluZSBIQVZFX1JJTlQgMQorI2RlZmluZSBIQVZFX1RSVU5DIDEKKyNkZWZpbmUgSEFWRV9FWFAyIDEKKyNkZWZpbmUgSEFWRV9MT0cyIDEKKyNkZWZpbmUgSEFWRV9BVEFOMiAxCisjZGVmaW5lIEhBVkVfUE9XIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVIgMQorI2RlZmluZSBIQVZFX1NJTkYgMQorI2RlZmluZSBIQVZFX0NPU0YgMQorI2RlZmluZSBIQVZFX1RBTkYgMQorI2RlZmluZSBIQVZFX1NJTkhGIDEKKyNkZWZpbmUgSEFWRV9DT1NIRiAxCisjZGVmaW5lIEhBVkVfVEFOSEYgMQorI2RlZmluZSBIQVZFX0ZBQlNGIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkYgMQorI2RlZmluZSBIQVZFX0NFSUxGIDEKKyNkZWZpbmUgSEFWRV9SSU5URiAxCisjZGVmaW5lIEhBVkVfVFJVTkNGIDEKKyNkZWZpbmUgSEFWRV9TUVJURiAxCisjZGVmaW5lIEhBVkVfTE9HMTBGIDEKKyNkZWZpbmUgSEFWRV9MT0dGIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEYgMQorI2RlZmluZSBIQVZFX0VYUEYgMQorI2RlZmluZSBIQVZFX0VYUE0xRiAxCisjZGVmaW5lIEhBVkVfQVNJTkYgMQorI2RlZmluZSBIQVZFX0FDT1NGIDEKKyNkZWZpbmUgSEFWRV9BVEFORiAxCisjZGVmaW5lIEhBVkVfQVNJTkhGIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEYgMQorI2RlZmluZSBIQVZFX0FUQU5IRiAxCisjZGVmaW5lIEhBVkVfSFlQT1RGIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkYgMQorI2RlZmluZSBIQVZFX1BPV0YgMQorI2RlZmluZSBIQVZFX0ZNT0RGIDEKKyNkZWZpbmUgSEFWRV9NT0RGRiAxCisjZGVmaW5lIEhBVkVfRlJFWFBGIDEKKyNkZWZpbmUgSEFWRV9MREVYUEYgMQorI2RlZmluZSBIQVZFX0VYUDJGIDEKKyNkZWZpbmUgSEFWRV9MT0cyRiAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05GIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJGIDEKKyNkZWZpbmUgSEFWRV9TSU5MIDEKKyNkZWZpbmUgSEFWRV9DT1NMIDEKKyNkZWZpbmUgSEFWRV9UQU5MIDEKKyNkZWZpbmUgSEFWRV9TSU5ITCAxCisjZGVmaW5lIEhBVkVfQ09TSEwgMQorI2RlZmluZSBIQVZFX1RBTkhMIDEKKyNkZWZpbmUgSEFWRV9GQUJTTCAxCisjZGVmaW5lIEhBVkVfRkxPT1JMIDEKKyNkZWZpbmUgSEFWRV9DRUlMTCAxCisjZGVmaW5lIEhBVkVfUklOVEwgMQorI2RlZmluZSBIQVZFX1RSVU5DTCAxCisjZGVmaW5lIEhBVkVfU1FSVEwgMQorI2RlZmluZSBIQVZFX0xPRzEwTCAxCisjZGVmaW5lIEhBVkVfTE9HTCAxCisjZGVmaW5lIEhBVkVfTE9HMVBMIDEKKyNkZWZpbmUgSEFWRV9FWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUwgMQorI2RlZmluZSBIQVZFX0FTSU5MIDEKKyNkZWZpbmUgSEFWRV9BQ09TTCAxCisjZGVmaW5lIEhBVkVfQVRBTkwgMQorI2RlZmluZSBIQVZFX0FTSU5ITCAxCisjZGVmaW5lIEhBVkVfQUNPU0hMIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEwgMQorI2RlZmluZSBIQVZFX0hZUE9UTCAxCisjZGVmaW5lIEhBVkVfQVRBTjJMIDEKKyNkZWZpbmUgSEFWRV9QT1dMIDEKKyNkZWZpbmUgSEFWRV9GTU9ETCAxCisjZGVmaW5lIEhBVkVfTU9ERkwgMQorI2RlZmluZSBIQVZFX0ZSRVhQTCAxCisjZGVmaW5lIEhBVkVfTERFWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFAyTCAxCisjZGVmaW5lIEhBVkVfTE9HMkwgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdOTCAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSTCAxCisjZGVmaW5lIEhBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIEhBVkVfQ09NUExFWF9IIDEKKyNkZWZpbmUgSEFWRV9DUkVBTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUcgMQorI2RlZmluZSBIQVZFX0NBQlMgMQorI2RlZmluZSBIQVZFX0NBUkcgMQorI2RlZmluZSBIQVZFX0NFWFAgMQorI2RlZmluZSBIQVZFX0NTUVJUIDEKKyNkZWZpbmUgSEFWRV9DTE9HIDEKKyNkZWZpbmUgSEFWRV9DQ09TIDEKKyNkZWZpbmUgSEFWRV9DU0lOIDEKKyNkZWZpbmUgSEFWRV9DUE9XIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEYgMQorI2RlZmluZSBIQVZFX0NJTUFHRiAxCisjZGVmaW5lIEhBVkVfQ0FCU0YgMQorI2RlZmluZSBIQVZFX0NBUkdGIDEKKyNkZWZpbmUgSEFWRV9DRVhQRiAxCisjZGVmaW5lIEhBVkVfQ1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9DTE9HRiAxCisjZGVmaW5lIEhBVkVfQ0NPU0YgMQorI2RlZmluZSBIQVZFX0NTSU5GIDEKKyNkZWZpbmUgSEFWRV9DUE9XRiAxCisjZGVmaW5lIEhBVkVfQ1JFQUxMIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0wgMQorI2RlZmluZSBIQVZFX0NBQlNMIDEKKyNkZWZpbmUgSEFWRV9DQVJHTCAxCisjZGVmaW5lIEhBVkVfQ0VYUEwgMQorI2RlZmluZSBIQVZFX0NTUVJUTCAxCisjZGVmaW5lIEhBVkVfQ0xPR0wgMQorI2RlZmluZSBIQVZFX0NDT1NMIDEKKyNkZWZpbmUgSEFWRV9DU0lOTCAxCisjZGVmaW5lIEhBVkVfQ1BPV0wgMQorI2RlZmluZSBIQVZFX0xET1VCTEVfSU5URUxfRVhURU5ERURfMTZfQllURVNfTEUgMQorI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX05QWV9OUFlfQ09ORklHX0hfCisjZXJyb3IgY29uZmlnLmggc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkIGRpcmVjdGx5LCBpbmNsdWRlIG5weV9jb25maWcuaCBpbnN0ZWFkCisjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2L2NvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlNDFlMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2L2NvbmZpZy5oCkBAIC0wLDAgKzEsMTA4IEBACisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA0CisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9TSU4KKyNkZWZpbmUgSEFWRV9DT1MKKyNkZWZpbmUgSEFWRV9UQU4KKyNkZWZpbmUgSEFWRV9TSU5ICisjZGVmaW5lIEhBVkVfQ09TSAorI2RlZmluZSBIQVZFX1RBTkgKKyNkZWZpbmUgSEFWRV9GQUJTCisjZGVmaW5lIEhBVkVfRkxPT1IKKyNkZWZpbmUgSEFWRV9DRUlMCisjZGVmaW5lIEhBVkVfU1FSVAorI2RlZmluZSBIQVZFX0xPRzEwCisjZGVmaW5lIEhBVkVfTE9HCisjZGVmaW5lIEhBVkVfRVhQCisjZGVmaW5lIEhBVkVfQVNJTgorI2RlZmluZSBIQVZFX0FDT1MKKyNkZWZpbmUgSEFWRV9BVEFOCisjZGVmaW5lIEhBVkVfRk1PRAorI2RlZmluZSBIQVZFX01PREYKKyNkZWZpbmUgSEFWRV9GUkVYUAorI2RlZmluZSBIQVZFX0xERVhQCisjZGVmaW5lIEhBVkVfUklOVAorI2RlZmluZSBIQVZFX1RSVU5DCisjZGVmaW5lIEhBVkVfRVhQMgorI2RlZmluZSBIQVZFX0xPRzIKKyNkZWZpbmUgSEFWRV9BVEFOMgorI2RlZmluZSBIQVZFX1BPVworI2RlZmluZSBIQVZFX05FWFRBRlRFUgorI2RlZmluZSBIQVZFX1NJTkYKKyNkZWZpbmUgSEFWRV9DT1NGCisjZGVmaW5lIEhBVkVfVEFORgorI2RlZmluZSBIQVZFX1NJTkhGCisjZGVmaW5lIEhBVkVfQ09TSEYKKyNkZWZpbmUgSEFWRV9UQU5IRgorI2RlZmluZSBIQVZFX0ZBQlNGCisjZGVmaW5lIEhBVkVfRkxPT1JGCisjZGVmaW5lIEhBVkVfQ0VJTEYKKyNkZWZpbmUgSEFWRV9SSU5URgorI2RlZmluZSBIQVZFX1RSVU5DRgorI2RlZmluZSBIQVZFX1NRUlRGCisjZGVmaW5lIEhBVkVfTE9HMTBGCisjZGVmaW5lIEhBVkVfTE9HRgorI2RlZmluZSBIQVZFX0xPRzFQRgorI2RlZmluZSBIQVZFX0VYUEYKKyNkZWZpbmUgSEFWRV9FWFBNMUYKKyNkZWZpbmUgSEFWRV9BU0lORgorI2RlZmluZSBIQVZFX0FDT1NGCisjZGVmaW5lIEhBVkVfQVRBTkYKKyNkZWZpbmUgSEFWRV9BU0lOSEYKKyNkZWZpbmUgSEFWRV9BQ09TSEYKKyNkZWZpbmUgSEFWRV9BVEFOSEYKKyNkZWZpbmUgSEFWRV9IWVBPVEYKKyNkZWZpbmUgSEFWRV9BVEFOMkYKKyNkZWZpbmUgSEFWRV9QT1dGCisjZGVmaW5lIEhBVkVfRk1PREYKKyNkZWZpbmUgSEFWRV9NT0RGRgorI2RlZmluZSBIQVZFX0ZSRVhQRgorI2RlZmluZSBIQVZFX0xERVhQRgorI2RlZmluZSBIQVZFX0VYUDJGCisjZGVmaW5lIEhBVkVfTE9HMkYKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkYKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJGCisjZGVmaW5lIEhBVkVfU0lOTAorI2RlZmluZSBIQVZFX0NPU0wKKyNkZWZpbmUgSEFWRV9UQU5MCisjZGVmaW5lIEhBVkVfU0lOSEwKKyNkZWZpbmUgSEFWRV9DT1NITAorI2RlZmluZSBIQVZFX1RBTkhMCisjZGVmaW5lIEhBVkVfRkFCU0wKKyNkZWZpbmUgSEFWRV9GTE9PUkwKKyNkZWZpbmUgSEFWRV9DRUlMTAorI2RlZmluZSBIQVZFX1JJTlRMCisjZGVmaW5lIEhBVkVfVFJVTkNMCisjZGVmaW5lIEhBVkVfU1FSVEwKKyNkZWZpbmUgSEFWRV9MT0cxMEwKKyNkZWZpbmUgSEFWRV9MT0dMCisjZGVmaW5lIEhBVkVfTE9HMVBMCisjZGVmaW5lIEhBVkVfRVhQTAorI2RlZmluZSBIQVZFX0VYUE0xTAorI2RlZmluZSBIQVZFX0FTSU5MCisjZGVmaW5lIEhBVkVfQUNPU0wKKyNkZWZpbmUgSEFWRV9BVEFOTAorI2RlZmluZSBIQVZFX0FTSU5ITAorI2RlZmluZSBIQVZFX0FDT1NITAorI2RlZmluZSBIQVZFX0FUQU5ITAorI2RlZmluZSBIQVZFX0hZUE9UTAorI2RlZmluZSBIQVZFX0FUQU4yTAorI2RlZmluZSBIQVZFX1BPV0wKKyNkZWZpbmUgSEFWRV9GTU9ETAorI2RlZmluZSBIQVZFX01PREZMCisjZGVmaW5lIEhBVkVfRlJFWFBMCisjZGVmaW5lIEhBVkVfTERFWFBMCisjZGVmaW5lIEhBVkVfRVhQMkwKKyNkZWZpbmUgSEFWRV9MT0cyTAorI2RlZmluZSBIQVZFX0NPUFlTSUdOTAorI2RlZmluZSBIQVZFX05FWFRBRlRFUkwKKyNkZWZpbmUgSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgSEFWRV9DT01QTEVYX0gKKyNkZWZpbmUgSEFWRV9MRE9VQkxFX0lOVEVMX0VYVEVOREVEXzEyX0JZVEVTX0xFIDEKKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qICN1bmRlZiBpbmxpbmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9OUFlfTlBZX0NPTkZJR19IXworI2Vycm9yIGNvbmZpZy5oIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBkaXJlY3RseSwgaW5jbHVkZSBucHlfY29uZmlnLmggaW5zdGVhZAorI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni9udW1weWNvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYvbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjc5MzhjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYvbnVtcHljb25maWcuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9OUFlfTlVNUFlDT05GSUdfSF8KKyNkZWZpbmUgX05QWV9OVU1QWUNPTkZJR19IXworCisjaW5jbHVkZSAiX251bXB5Y29uZmlnLmgiCisKKy8qIAorICogT24gTWFjIE9TIFgsIGJlY2F1c2UgdGhlcmUgaXMgb25seSBvbmUgY29uZmlndXJhdGlvbiBzdGFnZSBmb3IgYWxsIHRoZSBhcmNocworICogaW4gdW5pdmVyc2FsIGJ1aWxkcywgYW55IG1hY3JvIHdoaWNoIGRlcGVuZHMgb24gdGhlIGFyY2ggbmVlZHMgdG8gYmUKKyAqIGhhcmNvZGVkCisgKi8KKyNpZmRlZiBfX0FQUExFX18KKwkjdW5kZWYgTlBZX1NJWkVPRl9MT05HCisJI3VuZGVmIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QKKworCSNpZmRlZiBfX0xQNjRfXworCQkjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyAJCTgKKwkJI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIAk4CisJI2Vsc2UKKwkJI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgCQk0CisJCSNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCAJNAorCSNlbmRpZgorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weV8xLjcuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHlfMS43LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjZGZkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHlfMS43LjAuYmIKQEAgLTAsMCArMSw5OSBAQAorU1VNTUFSWSA9ICJBIHNvcGhpc3RpY2F0ZWQgTnVtZXJpYyBQcm9jZXNzaW5nIFBhY2thZ2UgZm9yIFB5dGhvbiIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJQU0YiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9Zjg3ODMyZDg1NGFjYmFkZTZlOWY1YzYwMWM4YjMwYjEiCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbnVtcHkvbnVtcHktJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL25vLWhvc3QtcGF0aHMucGF0Y2ggXAorICAgICAgICAgICAke0NPTkZJR0ZJTEVTVVJJfSAiCisKK0NPTkZJR0ZJTEVTVVJJID89ICIiCisKK0NPTkZJR0ZJTEVTVVJJX2FhcmNoNjQgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9hcm0gPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX2FybWViID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9taXBzZWwgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX3g4NiA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfeDg2LTY0ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfbWlwcyA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX3Bvd2VycGMgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9wb3dlcnBjNjQgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9taXBzNjQgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9taXBzNjRuMzIgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9udW1weS0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworIyBNYWtlIHRoZSBidWlsZCBmYWlsIGFuZCByZXBsYWNlICpjb25maWcuaCB3aXRoIHByb3BlciBvbmUKKyMgVGhpcyBpcyBhIHVnbHksIHVnbHkgaGFjayAtIEtvZW4KK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy10YXJnZXQoKSB7CisgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIHNldHVwLnB5IGJ1aWxkICR7RElTVFVUSUxTX0JVSUxEX0FSR1N9IHx8IFwKKyAgICB0cnVlCisgICAgY3AgJHtXT1JLRElSfS8qY29uZmlnLmggJHtTfS9idWlsZC8kKGxzICR7U30vYnVpbGQgfCBncmVwIHNyYykvbnVtcHkvY29yZS9pbmNsdWRlL251bXB5LworfQorCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L251bXB5L2NvcmUvbGliLyouYSIKKworU1JDX1VSSVttZDVzdW1dID0gIjRmYTU0ZTQwYjZhMjQzNDE2ZjAyNDgxMjNiNmVjMzMyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY0ZmE3MGI3ZWRiYWI2NWVlNjQzMmViNjM3NDNmNTQ4OWYxOTE5YzYxNDYzMmIyMGIyZmI0NWFhN2U2ODJhYzYiCisKKyMgaW5zdGFsbCB3aGF0IGlzIG5lZWRlZCBmb3IgbnVtcHkudGVzdCgpCitSREVQRU5EU18ke1BOfSA9ICJweXRob24tdW5pdHRlc3QgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWRpZmZsaWIgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXBwcmludCBcCisgICAgICAgICAgICAgICAgICBweXRob24tcGlja2xlIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1zaGVsbCBcCisgICAgICAgICAgICAgICAgICBweXRob24tbm9zZSBcCisgICAgICAgICAgICAgICAgICBweXRob24tZG9jdGVzdCBcCisgICAgICAgICAgICAgICAgICBweXRob24tZGF0ZXRpbWUgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWRpc3R1dGlscyBcCisgICAgICAgICAgICAgICAgICBweXRob24tbWlzYyBcCisgICAgICAgICAgICAgICAgICBweXRob24tbW1hcCBcCisgICAgICAgICAgICAgICAgICBweXRob24tbmV0Y2xpZW50IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1udW1iZXJzIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1weWRvYyBcCisgICAgICAgICAgICAgICAgICBweXRob24tcGtndXRpbCBcCisgICAgICAgICAgICAgICAgICBweXRob24tZW1haWwgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXN1YnByb2Nlc3MgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWNvbXByZXNzaW9uIFwKKyIKKworUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wZXhwZWN0XzMuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGV4cGVjdF8zLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4MGFlYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGV4cGVjdF8zLjMuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJBIFB1cmUgUHl0aG9uIEV4cGVjdCBsaWtlIE1vZHVsZSBmb3IgUHl0aG9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3BleHBlY3QucmVhZHRoZWRvY3Mub3JnLyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJJU0MiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1jMjVkOWEwNzcwYmE2OWE5OTY1YWNjODk0ZTlmMzY0NCIKKworU1JDX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvcC9wZXhwZWN0L3BleHBlY3QtJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjBkZTcyNTQxZDNmMTM3NGI3OTU0NzJmZWQ4NDFkY2U4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImRmZWE2MThkNDNlODNjZmZmMjE1MDRmMThmOTgwMTliYTUyMGYzMzBlNDE0MmU1MTg1ZWY3YzczNTI3ZGU1YmEiCisKK1MgPSAiJHtXT1JLRElSfS9wZXhwZWN0LSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscworCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgcHl0aG9uLWNvcmUgXAorICAgIHB5dGhvbi1pbyBcCisgICAgcHl0aG9uLXRlcm1pbmFsIFwKKyAgICBweXRob24tcmVzb3VyY2UgXAorICAgIHB5dGhvbi1mY250bCBcCisiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWNhaXJvXzEuMTAuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljYWlyb18xLjEwLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBmZTI1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljYWlyb18xLjEwLjAuYmIKQEAgLTAsMCArMSw0MSBAQAorU1VNTUFSWSA9ICJQeXRob24gYmluZGluZ3MgZm9yIHRoZSBDYWlybyBjYW52YXMgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly9jYWlyb2dyYXBoaWNzLm9yZy9weWNhaXJvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gInB5dGhvbi1kZXZlbCIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgJiBNUEwtMS4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjJlMDcxYWI3Mjk3ODQzMWIyOTRhMGQ2OTYzMjc0MjEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy1MR1BMLTIuMTttZDU9ZmFkOWIzMzMyYmU4OTRiYWI5YmM1MDE1NzI4NjRiMjkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy1NUEwtMS4xO21kNT1iZmUxZjc1ZDYwNjkxMmE0MTExYzkwNzQzZDZjNzMyNSIKKworIyBjYWlybyA+PSAxLjguOAorREVQRU5EUyA9ICJjYWlybyIKK1BSID0gInIyIgorCitTUkNfVVJJID0gImh0dHA6Ly9jYWlyb2dyYXBoaWNzLm9yZy9yZWxlYXNlcy9weTJjYWlyby0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjAzMzcxMzJjNGFiMDZjMTE0NmFkMzg0ZDU1MzcyYzUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDMwNDM5ZjA2YzJlYzFhMzllMjc0NjRjNmM4MjhiNmVmYWNlM2IyMmVlMTdiMmRlMDVkYzQwOWU0MjlhNzQzMSIKKworUyA9ICIke1dPUktESVJ9L3B5MmNhaXJvLSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscyBwa2djb25maWcKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IC4vd2FmIGNvbmZpZ3VyZSAtLXByZWZpeD0ke0R9JHtwcmVmaXh9IC0tbGliZGlyPSR7RH0ke2xpYmRpcn0KK30KKworZG9fY29tcGlsZSgpIHsKKwkuL3dhZiBidWlsZCAke1BBUkFMTEVMX01BS0V9Cit9CisKK2RvX2luc3RhbGwoKSB7CisJLi93YWYgaW5zdGFsbAorCXNlZCBcCisJCS1lICdzOkBwcmVmaXhAOiR7cHJlZml4fTonIFwKKwkJLWUgJ3M6QFZFUlNJT05AOiR7UFZ9OicgXAorCQktZSAnczpAaW5jbHVkZWRpckA6JHtpbmNsdWRlZGlyfTonIFwKKwkJcHljYWlyby5wYy5pbiA+IHB5Y2Fpcm8ucGMKKwlpbnN0YWxsIC1tIDA2NDQgcHljYWlyby5wYyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljdXJsL25vLXN0YXRpYy1saW5rLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmwvbm8tc3RhdGljLWxpbmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzNDllZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljdXJsL25vLXN0YXRpYy1saW5rLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CisKK0luZGV4OiBweWN1cmwtNy4xOS4zLjEvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBweWN1cmwtNy4xOS4zLjEub3JpZy9zZXR1cC5weQkyMDE0LTA3LTE2IDEyOjU3OjI0LjA2NTM0Njg4NyArMDAwMAorKysrIHB5Y3VybC03LjE5LjMuMS9zZXR1cC5weQkyMDE0LTA3LTE2IDEyOjU3OjUzLjA1NzM0NzY3OCArMDAwMAorQEAgLTE0Nyw3ICsxNDcsNyBAQAorICAgICAgICAgb3B0YnVmID0gJycKKyAgICAgICAgIHNzbGhpbnRidWYgPSAnJworICAgICAgICAgZXJydGV4dCA9ICcnCistICAgICAgICBmb3Igb3B0aW9uIGluIFsiLS1saWJzIiwgIi0tc3RhdGljLWxpYnMiXToKKysgICAgICAgIGZvciBvcHRpb24gaW4gWyItLWxpYnMiXToKKyAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbigoQ1VSTF9DT05GSUcsIG9wdGlvbiksCisgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljdXJsXzcuMTkuNS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmxfNy4xOS41LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQwZWZmZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljdXJsXzcuMTkuNS4xLmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIGJpbmRpbmdzIGZvciBsaWJjdXJsIgorSE9NRVBBR0UgPSAiaHR0cDovL3B5Y3VybC5zb3VyY2Vmb3JnZS5uZXQvIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkxHUEx2Mi4xKyB8IE1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRS5yc3Q7YmVnaW5saW5lPTE2NjtlbmRsaW5lPTE4MTttZDU9NTdlNWFiMGMwZjk2NDUzM2ZjNTlkOTNkZWM1Njk1YmIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy1MR1BMO21kNT0zNTc5YTlmZDAyMjFkNDlhMjM3YWFhMzM0OTJmOTg4YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLU1JVDttZDU9ZTgyMDA5NTVjNzczYjJhMGZkNmNlYTM2ZWE1ZTg3YmUiCisKK0RFUEVORFMgPSAiY3VybCBweXRob24iCitSREVQRU5EU18ke1BOfSA9ICJweXRob24tY29yZSBjdXJsIgorU1JDTkFNRSA9ICJweWN1cmwiCisKK1NSQ19VUkkgPSAiXAorICBodHRwOi8vJHtTUkNOQU1FfS5zb3VyY2Vmb3JnZS5uZXQvZG93bmxvYWQvJHtTUkNOQU1FfS0ke1BWfS50YXIuZ3o7bmFtZT1hcmNoaXZlIFwKKyAgZmlsZTovL25vLXN0YXRpYy1saW5rLnBhdGNoIFwKKyIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZjQ0Y2Q1NDI1NmQ3YTY0M2FiN2IxNmUzZjQwOWIyNmIiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI2ZTk3NzBmODA0NTk3NTdmNzNiZDcxYWY4MmZiYjI5Y2QzOThiMzgzODhjZGYxYmVhYjMxZWE5MWEzMzFiYzZjIgorUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzCisKKyMgbmVlZCB0byBleHBvcnQgdGhlc2UgdmFyaWFibGVzIGZvciBweXRob24tY29uZmlnIHRvIHdvcmsKK2V4cG9ydCBCVUlMRF9TWVMKK2V4cG9ydCBIT1NUX1NZUworZXhwb3J0IFNUQUdJTkdfSU5DRElSCitleHBvcnQgU1RBR0lOR19MSUJESVIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKKyMgRW5zdXJlIHRoZSBkb2NzdHJpbmdzIGFyZSBnZW5lcmF0ZWQgYXMgbWFrZSBjbGVhbiB3aWxsIHJlbW92ZSB0aGVtCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGRvY3N0cmluZ3MKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gLXJmICR7RH0ke2RhdGFkaXJ9L3NoYXJlCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1OTExMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlnb2JqZWN0L29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxMTAxXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBweWdvYmplY3QtMi4yNy45MS9jb25maWd1cmUuYWMgcHlnb2JqZWN0LTIuMjcuOTEvY29uZmlndXJlLmFjCistLS0gcHlnb2JqZWN0LTIuMjcuOTEvY29uZmlndXJlLmFjCTIwMTEtMDItMjMgMjI6MTQ6MzcuMDAwMDAwMDAwICswMjAwCisrKysgcHlnb2JqZWN0LTIuMjcuOTEvY29uZmlndXJlLmFjCTIwMTMtMDEtMDMgMDU6MTM6NDQuMDM0OTQ5OTU0ICswMjAwCitAQCAtMzUsNyArMzUsNyBAQAorIEFDX0RFRklORShQWUdPQkpFQ1RfTUlDUk9fVkVSU0lPTiwgcHlnb2JqZWN0X21pY3JvX3ZlcnNpb24sIFtweWdvYmplY3QgbWljcm8gdmVyc2lvbl0pCisgQUNfU1VCU1QoUFlHT0JKRUNUX01JQ1JPX1ZFUlNJT04sIHB5Z29iamVjdF9taWNyb192ZXJzaW9uKQorCistQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKKytBQ19DT05GSUdfSEVBREVSUyhjb25maWcuaCkKKyBtNF9pZmRlZihbQU1fU0lMRU5UX1JVTEVTXSwgW0FNX1NJTEVOVF9SVUxFUyh5ZXMpXSkKKyBBTV9JTklUX0FVVE9NQUtFKGZvcmVpZ24pCisgQU1fTUFJTlRBSU5FUl9NT0RFCitAQCAtODIsNyArODIsNiBAQAorIG00X2lmZGVmKFtMVF9PVVRQVVRdLCBbTFRfT1VUUFVUXSkKKyBBQ19JU0NfUE9TSVgKKyBBQ19QUk9HX0NDCistQU1fUFJPR19DQ19TVERDCisgQU1fUFJPR19DQ19DX08KKworICMgY2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBtaW5pbXVtIHZlcnNpb24gb2YgcHl0aG9uIG5lY2lzYXJ5IHRvIGJ1aWxkCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdF8yLjI4LjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdF8yLjI4LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFkMzdiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlnb2JqZWN0XzIuMjguMy5iYgpAQCAtMCwwICsxLDUzIEBACitTVU1NQVJZID0gIlB5dGhvbiBHT2JqZWN0IGJpbmRpbmdzIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICJOZXdlciB2ZXJzaW9ucyBvZiBweXRob24tcHlnb2JqZWN0IGRlcGVuZCBvbiBnb2JqZWN0LWludHJvc3BlY3Rpb24gd2hpY2ggZG9lc24ndCBjcm9zcy1jb21waWxlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hOTE2NDY3YjkxMDc2ZTYzMWRkOGVkYjc0MjQ3NjljNyIKK0RFUEVORFMgPSAicHl0aG9uIHB5dGhvbi1weWdvYmplY3QtbmF0aXZlIGxpYmZmaSBnbGliLTIuMCIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInB5dGhvbi1uYXRpdmUgbGliZmZpLW5hdGl2ZSBnbGliLTIuMC1uYXRpdmUiCitSREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorCitNQUpfVkVSID0gIiR7QGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy4nKVswXX0uJHtAZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLicpWzFdfSIKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vcHlnb2JqZWN0LyR7TUFKX1ZFUn0vcHlnb2JqZWN0LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKKyIKKworIyBsaWJ0b29sLW5hdGl2ZSBkb2Vzbid0IGhhdmUgZml4aW5zdGFsbC5wYXRjaCBhcHBsaWVkIHdoaWNoIG1lYW5zCisjIHRoYXQgbGlicyBnZXQgcmVsaW5rZWQgYXQgaW5zdGFsbGF0aW9uIHRpbWUuIFRoaXMgdHJpZ2dlcnMgYSAKKyMgcmVsaW5raW5nIGFsb25nIHRoZSBsaW5lcyBvZjoKKyMgZ2NjIC1ML3RtcC9mb28vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliIC1scHlnbGliLTIuMC1weXRob24gLW8gLmxpYnMvX2dsaWIuc28KKyMgd2hlcmUgL3RtcC9mb28gaXMgREVTVERJUiBhbmQgcHlnbGliLTIuMC1weXRob24gbWF5IGJlIGluc3RhbGxlZC9yZWluc3RhbGxlZAorIyBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSBnY2MgY29tbWFuZCBydW5zLgorIyBJZiB0aGlzIGhhcHBlbnMgYmV0d2VlbiB0aGUgaGFuZG9mZiBiZXR3ZWVuIGdjYyBhbmQgbGQsIHlvdSBjYW4gc2VlOgorIyAvYmluL2xkOiBjYW5ub3QgZmluZCAtbHB5Z2xpYi0yLjAtcHl0aG9uCisjIEFkZGluZyBhIGRlcGVuZGVuY3kgcnVsZSBsaWtlICBpbnN0YWxsLXB5Z2xpYkxUTElCUkFSSUVTOiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTCisjIHdvdWxkIGJlIGlkZWFsIGJ1dCBhdXRvbWFrZSBjYW4ndCBjb3BlIHdpdGggdGhhdCB3aXRob3V0IG1hbnVhbGx5IAorIyBkZWZpbmluZyB0aGUgd2hvbGUgZnVuY3Rpb24uIEdpdmUgdXAgYW5kIGRpc2FibGUgcGFyYWxsZWwgbWFrZSBpbiBuYXRpdmUgYnVpbGRzLgorUEFSQUxMRUxfTUFLRUlOU1RfY2xhc3MtbmF0aXZlID0gIiIKKworU1JDX1VSSVttZDVzdW1dID0gImFhNjQ5MDBiMjc0YzQ2NjFhNWMzMmU1MjkyMjk3N2Y5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdkYTg4YzE2OWE1NmVmY2NjNTE2Y2ViZDkyMzdkYTNmZTUxOGEzNDMwOTVhNjY0NjA3YjM2OGZlMjFkZjk1YjYiCitTID0gIiR7V09SS0RJUn0vcHlnb2JqZWN0LSR7UFZ9IgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIgorCitpbmhlcml0IGF1dG90b29scyBkaXN0dXRpbHMtYmFzZSBwa2djb25maWcKKworIyBuZWNlc3NhcnkgdG8gbGV0IHRoZSBjYWxsIGZvciBweXRob24tY29uZmlnIHN1Y2NlZWQKK2V4cG9ydCBCVUlMRF9TWVMKK2V4cG9ydCBIT1NUX1NZUworZXhwb3J0IFNUQUdJTkdfSU5DRElSCitleHBvcnQgU1RBR0lOR19MSUJESVIKKworUEFDS0FHRVMgKz0gIiR7UE59LWxpYiIKKworUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi10ZXh0dXRpbHMiCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9weXRob24qIgorRklMRVNfJHtQTn0tbGliID0gIiR7bGliZGlyfS9saWIqLnNvLioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfSAke2RhdGFkaXJ9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvYWNpbmNsdWRlLm00IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9hY2luY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1MThmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsOTAgQEAKKyMjIHRoaXMgb25lIGlzIGNvbW1vbmx5IHVzZWQgd2l0aCBBTV9QQVRIX1BZVEhPTkRJUiAuLi4KK2RubCBBTV9DSEVDS19QWU1PRChNT0ROQU1FIFssU1lNQk9MIFssQUNUSU9OLUlGLUZPVU5EIFssQUNUSU9OLUlGLU5PVC1GT1VORF1dXSkKK2RubCBDaGVjayBpZiBhIG1vZHVsZSBjb250YWluaW5nIGEgZ2l2ZW4gc3ltYm9sIGlzIHZpc2libGUgdG8gcHl0aG9uLgorQUNfREVGVU4oQU1fQ0hFQ0tfUFlNT0QsCitbQUNfUkVRVUlSRShbQU1fUEFUSF9QWVRIT05dKQorcHlfbW9kX3Zhcj1gZWNobyAkMVsnXyddJDIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGlmZWxzZShbJDJdLFtdLCxbJDIgaW4gXSlweXRob24gbW9kdWxlICQxKQorQUNfQ0FDSEVfVkFMKHB5X2N2X21vZF8kcHlfbW9kX3ZhciwgWworaWZlbHNlKFskMl0sW10sIFtwcm9nPSIKK2ltcG9ydCBzeXMKK3RyeToKKyAgICAgICAgaW1wb3J0ICQxCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHN5cy5leGl0KDEpCitleGNlcHQ6CisgICAgICAgIHN5cy5leGl0KDApCitzeXMuZXhpdCgwKSJdLCBbcHJvZz0iCitpbXBvcnQgJDEKKyQxLiQyIl0pCitpZiAkUFlUSE9OIC1jICIkcHJvZyIgMT4mQUNfRkRfQ0MgMj4mQUNfRkRfQ0MKKyAgdGhlbgorICAgIGV2YWwgInB5X2N2X21vZF8kcHlfbW9kX3Zhcj15ZXMiCisgIGVsc2UKKyAgICBldmFsICJweV9jdl9tb2RfJHB5X21vZF92YXI9bm8iCisgIGZpCitdKQorcHlfdmFsPWBldmFsICJlY2hvIFxgZWNobyAnJHB5X2N2X21vZF8nJHB5X21vZF92YXJcYCJgCitpZiB0ZXN0ICJ4JHB5X3ZhbCIgIT0geG5vOyB0aGVuCisgIEFDX01TR19SRVNVTFQoeWVzKQorICBpZmVsc2UoWyQzXSwgW10sLCBbJDMKK10pZG5sCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCisgIGlmZWxzZShbJDRdLCBbXSwsIFskNAorXSlkbmwKK2ZpCitdKQorCitkbmwgYSBtYWNybyB0byBjaGVjayBmb3IgYWJpbGl0eSB0byBjcmVhdGUgcHl0aG9uIGV4dGVuc2lvbnMKK2RubCAgQU1fQ0hFQ0tfUFlUSE9OX0hFQURFUlMoW0FDVElPTi1JRi1QT1NTSUJMRV0sIFtBQ1RJT04tSUYtTk9ULVBPU1NJQkxFXSkKK2RubCBmdW5jdGlvbiBhbHNvIGRlZmluZXMgUFlUSE9OX0lOQ0xVREVTCitBQ19ERUZVTihbQU1fQ0hFQ0tfUFlUSE9OX0hFQURFUlNdLAorW0FDX1JFUVVJUkUoW0FNX1BBVEhfUFlUSE9OXSkKK0FDX01TR19DSEVDS0lORyhmb3IgaGVhZGVycyByZXF1aXJlZCB0byBjb21waWxlIHB5dGhvbiBleHRlbnNpb25zKQorZG5sIGRlZHVjZSBQWVRIT05fSU5DTFVERVMKK0FDX0FSR19XSVRIKHB5dGhvbi1pbmNsdWRlcywKKwlbICAtLXdpdGgtcHl0aG9uLWluY2x1ZGVzPURJUiAgcGF0aCB0byBQeXRob24gaW5jbHVkZXNdLCBweV9leGVjX3ByZWZpeD0kd2l0aHZhbCkKK2lmIHRlc3QgeCRweV9leGVjX3ByZWZpeCAhPSB4OyB0aGVuCitQWVRIT05fSU5DTFVERVM9Ii1JJHtweV9leGVjX3ByZWZpeH0vaW5jbHVkZS9weXRob24ke1BZVEhPTl9WRVJTSU9OfSIKK2Vsc2UKK3B5X3ByZWZpeD1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgcHJpbnQgc3lzLnByZWZpeCJgCitweV9leGVjX3ByZWZpeD1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgcHJpbnQgc3lzLmV4ZWNfcHJlZml4ImAKK1BZVEhPTl9JTkNMVURFUz0iLUkke3B5X3ByZWZpeH0vaW5jbHVkZS9weXRob24ke1BZVEhPTl9WRVJTSU9OfSIKK2lmIHRlc3QgIiRweV9wcmVmaXgiICE9ICIkcHlfZXhlY19wcmVmaXgiOyB0aGVuCisgIFBZVEhPTl9JTkNMVURFUz0iJFBZVEhPTl9JTkNMVURFUyAtSSR7cHlfZXhlY19wcmVmaXh9L2luY2x1ZGUvcHl0aG9uJHtQWVRIT05fVkVSU0lPTn0iCitmaQorZmkKK0FDX1NVQlNUKFBZVEhPTl9JTkNMVURFUykKK2RubCBjaGVjayBpZiB0aGUgaGVhZGVycyBleGlzdDoKK3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKK0NQUEZMQUdTPSIkQ1BQRkxBR1MgJFBZVEhPTl9JTkNMVURFUyIKK0FDX1RSWV9DUFAoWyNpbmNsdWRlIDxQeXRob24uaD5dLGRubAorW0FDX01TR19SRVNVTFQoZm91bmQpCiskMV0sZG5sCitbQUNfTVNHX1JFU1VMVChub3QgZm91bmQpCiskMl0pCitDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCitdKQorCitkbmwKK2RubCBKSF9BRERfQ0ZMQUcoRkxBRykKK2RubCBjaGVja3Mgd2hldGhlciB0aGUgQyBjb21waWxlciBzdXBwb3J0cyB0aGUgZ2l2ZW4gZmxhZywgYW5kIGlmIHNvLCBhZGRzCitkbmwgaXQgdG8gJENGTEFHUy4gIElmIHRoZSBmbGFnIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgbGlzdCwgdGhlbiB0aGUKK2RubCBjaGVjayBpcyBub3QgcGVyZm9ybWVkLgorQUNfREVGVU4oW0pIX0FERF9DRkxBR10sCitbCitjYXNlICIgJENGTEFHUyAiIGluCisqQDw6QFwJXCBAOj5AJDFAPDpAXAlcIEA6PkAqKQorICA7OworKikKKyAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAkMSIKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIFskXUNDIHVuZGVyc3RhbmRzICQxXSkKKyAgQUNfVFJZX0NPTVBJTEUoW10sIFtdLCBbamhfaGFzX29wdGlvbj15ZXNdLCBbamhfaGFzX29wdGlvbj1ub10pCisgIEFDX01TR19SRVNVTFQoJGpoX2hhc19vcHRpb24pCisgIGlmIHRlc3QgJGpoX2hhc19vcHRpb24gPSBubzsgdGhlbgorICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorICBmaQorICA7OworZXNhY10pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2FkZC1ndGstdHlwZXMuZGVmcy1pbnRvLWdkay5jLWRlcGVuZGVuY2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2FkZC1ndGstdHlwZXMuZGVmcy1pbnRvLWdkay5jLWRlcGVuZGVuY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYwZjljZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvYWRkLWd0ay10eXBlcy5kZWZzLWludG8tZ2RrLmMtZGVwZW5kZW5jZS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCithZGQgZ3RrLXR5cGVzLmRlZnMgaW50byBnZGsuYyBkZXBlbmRlbmNlCisKK2dkay5jIGRlcGVuZHMgb24gZ3RrLXR5cGVzLmRlZnMgYnV0CitnZGsvTWFrZWZpbGUuYW0gbWlzcyB0aGlzLiBUaGlzIHdpbGwgY2F1c2UKK2J1aWxkIGVycm9yIHNvbWV0aW1lcyB3aGVuIGJ1aWx0Cit3aXRoIG11bHRpLWpvYmJpbmcsIHNvIGFkZCBndGstdHlwZXMuZGVmcyBpbnRvCitnZGsuYyBkZXBlbmRlbmNlLgorCitTaWduZWQtb2ZmLWJ5OiBTb25nLkxpIDxTb25nLkxpQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZ3RrL01ha2VmaWxlLmFtIHwgICAgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3RrL01ha2VmaWxlLmFtIGIvZ3RrL01ha2VmaWxlLmFtCitpbmRleCA3YmI1ZDBjLi40YTg4MzUxIDEwMDY0NAorLS0tIGEvZ3RrL01ha2VmaWxlLmFtCisrKysgYi9ndGsvTWFrZWZpbGUuYW0KK0BAIC0yMTQsNyArMjE0LDcgQEAgZ3RrdW5peHByaW50LmRlZnM6ICQoR1RLVU5JWFBSSU5UX0RFRlMpIE1ha2VmaWxlCisgZ3RrdW5peHByaW50LXR5cGVzLmRlZnM6ICQoR1RLVU5JWFBSSU5UX1RZUEVTX0RFRlMpIE1ha2VmaWxlCisgCSQoQ1JFQVRFREVGUykgJEAgJChHVEtVTklYUFJJTlRfVFlQRVNfREVGUykKKyAKKy1nZGsuYzogZ2RrLXR5cGVzLmRlZnMgZ2RrLmRlZnMgJChHREtfT1ZFUlJJREVTKQorK2dkay5jOiBnZGstdHlwZXMuZGVmcyBndGstdHlwZXMuZGVmcyBnZGsuZGVmcyAkKEdES19PVkVSUklERVMpCisgZ3RrLmM6IGdkay10eXBlcy5kZWZzIGd0ay10eXBlcy5kZWZzIGd0ay5kZWZzIGdkay10eXBlcy5kZWZzICQoR1RLX09WRVJSSURFUykKKyBfZ3RrX2xhX0NGTEFHUyA9ICQoUFlDQUlST19DRkxBR1MpICQoR1RLX0NGTEFHUykKKyBfZ3RrX2xhX0xERkxBR1MgPSAkKGNvbW1vbl9sZGZsYWdzKSAtZXhwb3J0LXN5bWJvbHMtcmVnZXggaW5pdF9ndGsKKy0tIAorMS43LjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9maXgtZ3RrdW5peHByaW50LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9maXgtZ3RrdW5peHByaW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YzBlOGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2ZpeC1ndGt1bml4cHJpbnQucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBweWd0ay0yLjI0LjAvZ3RrL2d0a3VuaXhwcmludC5vdmVycmlkZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHB5Z3RrLTIuMjQuMC5vcmlnL2d0ay9ndGt1bml4cHJpbnQub3ZlcnJpZGUKKysrKyBweWd0ay0yLjI0LjAvZ3RrL2d0a3VuaXhwcmludC5vdmVycmlkZQorQEAgLTEwMiwxMSArMTAyLDYgQEAgX3dyYXBfZ3RrX3ByaW50X2pvYl9nZXRfc3VyZmFjZShQeUdPYmplYworICAgICBpZiAocHlnX2Vycm9yX2NoZWNrKCZlcnJvcikpCisgICAgICAgICByZXR1cm4gTlVMTDsKKyAKKy0jaWYgUFlDQUlST19WRVJTSU9OX0hFWCA+PSAweDEwMTA2MDAKKy0gICAgcmV0dXJuIFB5Y2Fpcm9TdXJmYWNlX0Zyb21TdXJmYWNlKGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKHN1cmZhY2UpLCBOVUxMKTsKKy0jZWxzZQorLSAgICByZXR1cm4gUHljYWlyb1N1cmZhY2VfRnJvbVN1cmZhY2UoY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2Uoc3VyZmFjZSksIE5VTEwsIE5VTEwpOworLSNlbmRpZgorIH0KKyAlJQorIG92ZXJyaWRlIGd0a19wcmludF9qb2Jfc2VuZCBrd2FyZ3MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvZml4LXB5Z3RrLTIuMC5wYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvZml4LXB5Z3RrLTIuMC5wYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjE1NjU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9maXgtcHlndGstMi4wLnBjLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IHB5Z3RrLTIuMjQuMC9weWd0ay0yLjAucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBweWd0ay0yLjI0LjAub3JpZy9weWd0ay0yLjAucGMuaW4KKysrKyBweWd0ay0yLjI0LjAvcHlndGstMi4wLnBjLmluCitAQCAtMSw1ICsxLDYgQEAKKyBwcmVmaXg9QHByZWZpeEAKKyBleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisgaW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKyBkYXRhcm9vdGRpcj1AZGF0YXJvb3RkaXJACisgZGF0YWRpcj1AZGF0YWRpckAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvbm9kb2NzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9ub2RvY3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA3MzA5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvbm9kb2NzLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IHB5Z3RrLTIuMTcuMC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHB5Z3RrLTIuMTcuMC5vcmlnL01ha2VmaWxlLmFtCisrKysgcHlndGstMi4xNy4wL01ha2VmaWxlLmFtCitAQCAtNCw3ICs0LDcgQEAgaWYgQlVJTERfR1RLCisgICBHVEtfU1VCRElSID0gZ3RrCisgZW5kaWYKKyAKKy1TVUJESVJTID0gLiAkKEdUS19TVUJESVIpIGV4YW1wbGVzIHRlc3RzIGRvY3MKKytTVUJESVJTID0gLiAkKEdUS19TVUJESVIpIGV4YW1wbGVzIHRlc3RzCisgCisgUExBVEZPUk1fVkVSU0lPTiA9IDIuMAorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9wcmV2ZW50X3RvX2dldF9kaXNwbGF5X2R1cmluZ19pbXBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL3ByZXZlbnRfdG9fZ2V0X2Rpc3BsYXlfZHVyaW5nX2ltcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzMwMzhlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9wcmV2ZW50X3RvX2dldF9kaXNwbGF5X2R1cmluZ19pbXBvcnQucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBweWd0ay0yLjEwLjQvZ3RrL19faW5pdF9fLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcHlndGstMi4xMC40Lm9yaWcvZ3RrL19faW5pdF9fLnB5CTIwMDctMTEtMjcgMTk6Mjc6MDUuMDAwMDAwMDAwIC0wMzAwCisrKysgcHlndGstMi4xMC40L2d0ay9fX2luaXRfXy5weQkyMDA3LTExLTI3IDE5OjI4OjIyLjAwMDAwMDAwMCAtMDMwMAorQEAgLTc4LDcgKzc4LDggQEAKKyAKKyBrZXlzeW1zID0gTGF6eU1vZHVsZSgna2V5c3ltcycsIGxvY2FscygpKQorIAorLV9pbml0KCkKKytpZiBub3QgaGFzYXR0cihzeXMubW9kdWxlc1snX19tYWluX18nXSwgJ3B5dGhvbl9sYXVuY2hlcl9lbmFibGVkJyk6CisrICAgIF9pbml0KCkKKyAKKyAjIENBUEkKKyBfUHlHdGtfQVBJID0gX2d0ay5fUHlHdGtfQVBJCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL3B5dGhvbi1weWd0azIvYWNpbmNsdWRlLm00IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9weXRob24tcHlndGsyL2FjaW5jbHVkZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzUxOGZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9weXRob24tcHlndGsyL2FjaW5jbHVkZS5tNApAQCAtMCwwICsxLDkwIEBACisjIyB0aGlzIG9uZSBpcyBjb21tb25seSB1c2VkIHdpdGggQU1fUEFUSF9QWVRIT05ESVIgLi4uCitkbmwgQU1fQ0hFQ0tfUFlNT0QoTU9ETkFNRSBbLFNZTUJPTCBbLEFDVElPTi1JRi1GT1VORCBbLEFDVElPTi1JRi1OT1QtRk9VTkRdXV0pCitkbmwgQ2hlY2sgaWYgYSBtb2R1bGUgY29udGFpbmluZyBhIGdpdmVuIHN5bWJvbCBpcyB2aXNpYmxlIHRvIHB5dGhvbi4KK0FDX0RFRlVOKEFNX0NIRUNLX1BZTU9ELAorW0FDX1JFUVVJUkUoW0FNX1BBVEhfUFlUSE9OXSkKK3B5X21vZF92YXI9YGVjaG8gJDFbJ18nXSQyIHwgc2VkICd5JS4vKy0lX19wXyUnYAorQUNfTVNHX0NIRUNLSU5HKGZvciBpZmVsc2UoWyQyXSxbXSwsWyQyIGluIF0pcHl0aG9uIG1vZHVsZSAkMSkKK0FDX0NBQ0hFX1ZBTChweV9jdl9tb2RfJHB5X21vZF92YXIsIFsKK2lmZWxzZShbJDJdLFtdLCBbcHJvZz0iCitpbXBvcnQgc3lzCit0cnk6CisgICAgICAgIGltcG9ydCAkMQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBzeXMuZXhpdCgxKQorZXhjZXB0OgorICAgICAgICBzeXMuZXhpdCgwKQorc3lzLmV4aXQoMCkiXSwgW3Byb2c9IgoraW1wb3J0ICQxCiskMS4kMiJdKQoraWYgJFBZVEhPTiAtYyAiJHByb2ciIDE+JkFDX0ZEX0NDIDI+JkFDX0ZEX0NDCisgIHRoZW4KKyAgICBldmFsICJweV9jdl9tb2RfJHB5X21vZF92YXI9eWVzIgorICBlbHNlCisgICAgZXZhbCAicHlfY3ZfbW9kXyRweV9tb2RfdmFyPW5vIgorICBmaQorXSkKK3B5X3ZhbD1gZXZhbCAiZWNobyBcYGVjaG8gJyRweV9jdl9tb2RfJyRweV9tb2RfdmFyXGAiYAoraWYgdGVzdCAieCRweV92YWwiICE9IHhubzsgdGhlbgorICBBQ19NU0dfUkVTVUxUKHllcykKKyAgaWZlbHNlKFskM10sIFtdLCwgWyQzCitdKWRubAorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorICBpZmVsc2UoWyQ0XSwgW10sLCBbJDQKK10pZG5sCitmaQorXSkKKworZG5sIGEgbWFjcm8gdG8gY2hlY2sgZm9yIGFiaWxpdHkgdG8gY3JlYXRlIHB5dGhvbiBleHRlbnNpb25zCitkbmwgIEFNX0NIRUNLX1BZVEhPTl9IRUFERVJTKFtBQ1RJT04tSUYtUE9TU0lCTEVdLCBbQUNUSU9OLUlGLU5PVC1QT1NTSUJMRV0pCitkbmwgZnVuY3Rpb24gYWxzbyBkZWZpbmVzIFBZVEhPTl9JTkNMVURFUworQUNfREVGVU4oW0FNX0NIRUNLX1BZVEhPTl9IRUFERVJTXSwKK1tBQ19SRVFVSVJFKFtBTV9QQVRIX1BZVEhPTl0pCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGhlYWRlcnMgcmVxdWlyZWQgdG8gY29tcGlsZSBweXRob24gZXh0ZW5zaW9ucykKK2RubCBkZWR1Y2UgUFlUSE9OX0lOQ0xVREVTCitBQ19BUkdfV0lUSChweXRob24taW5jbHVkZXMsCisJWyAgLS13aXRoLXB5dGhvbi1pbmNsdWRlcz1ESVIgIHBhdGggdG8gUHl0aG9uIGluY2x1ZGVzXSwgcHlfZXhlY19wcmVmaXg9JHdpdGh2YWwpCitpZiB0ZXN0IHgkcHlfZXhlY19wcmVmaXggIT0geDsgdGhlbgorUFlUSE9OX0lOQ0xVREVTPSItSSR7cHlfZXhlY19wcmVmaXh9L2luY2x1ZGUvcHl0aG9uJHtQWVRIT05fVkVSU0lPTn0iCitlbHNlCitweV9wcmVmaXg9YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IHByaW50IHN5cy5wcmVmaXgiYAorcHlfZXhlY19wcmVmaXg9YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IHByaW50IHN5cy5leGVjX3ByZWZpeCJgCitQWVRIT05fSU5DTFVERVM9Ii1JJHtweV9wcmVmaXh9L2luY2x1ZGUvcHl0aG9uJHtQWVRIT05fVkVSU0lPTn0iCitpZiB0ZXN0ICIkcHlfcHJlZml4IiAhPSAiJHB5X2V4ZWNfcHJlZml4IjsgdGhlbgorICBQWVRIT05fSU5DTFVERVM9IiRQWVRIT05fSU5DTFVERVMgLUkke3B5X2V4ZWNfcHJlZml4fS9pbmNsdWRlL3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059IgorZmkKK2ZpCitBQ19TVUJTVChQWVRIT05fSU5DTFVERVMpCitkbmwgY2hlY2sgaWYgdGhlIGhlYWRlcnMgZXhpc3Q6CitzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCitDUFBGTEFHUz0iJENQUEZMQUdTICRQWVRIT05fSU5DTFVERVMiCitBQ19UUllfQ1BQKFsjaW5jbHVkZSA8UHl0aG9uLmg+XSxkbmwKK1tBQ19NU0dfUkVTVUxUKGZvdW5kKQorJDFdLGRubAorW0FDX01TR19SRVNVTFQobm90IGZvdW5kKQorJDJdKQorQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorXSkKKworZG5sCitkbmwgSkhfQUREX0NGTEFHKEZMQUcpCitkbmwgY2hlY2tzIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgc3VwcG9ydHMgdGhlIGdpdmVuIGZsYWcsIGFuZCBpZiBzbywgYWRkcworZG5sIGl0IHRvICRDRkxBR1MuICBJZiB0aGUgZmxhZyBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGxpc3QsIHRoZW4gdGhlCitkbmwgY2hlY2sgaXMgbm90IHBlcmZvcm1lZC4KK0FDX0RFRlVOKFtKSF9BRERfQ0ZMQUddLAorWworY2FzZSAiICRDRkxBR1MgIiBpbgorKkA8OkBcCVwgQDo+QCQxQDw6QFwJXCBAOj5AKikKKyAgOzsKKyopCisgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgJDEiCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBbJF1DQyB1bmRlcnN0YW5kcyAkMV0pCisgIEFDX1RSWV9DT01QSUxFKFtdLCBbXSwgW2poX2hhc19vcHRpb249eWVzXSwgW2poX2hhc19vcHRpb249bm9dKQorICBBQ19NU0dfUkVTVUxUKCRqaF9oYXNfb3B0aW9uKQorICBpZiB0ZXN0ICRqaF9oYXNfb3B0aW9uID0gbm87IHRoZW4KKyAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAgZmkKKyAgOzsKK2VzYWNdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay91cGRhdGUtZGVwZW5kZW5jZXMtb2YtZGVmcy5jLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay91cGRhdGUtZGVwZW5kZW5jZXMtb2YtZGVmcy5jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZDk1NGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL3VwZGF0ZS1kZXBlbmRlbmNlcy1vZi1kZWZzLmMucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSBkYzAyNGU5MDc5YmJmZmJiNDQ0MzZiYTNlNzBhNzU4ZWJhZDU1MjBmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIlNvbmcuTGkiIDxTb25nLkxpQHdpbmRyaXZlci5jb20+CitEYXRlOiBTYXQsIDUgSmFuIDIwMTMgMTQ6NTU6NTkgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gdXBkYXRlIGRlcGVuZGVuY2VzIG9mIGRlZnMuYyBpbiBNYWtlZmlsZS5hbQorCitJbiBndGsvTWFrZWZpbGUuYW0sIGRlZnMuYyBzaG91bGQgZGVwZW5kZXMgb24gZ2RrLXR5cGVzLmRlZnMgYW5kCitndGstdHlwZXMuZGVmcywgb3RoZXJ3aXNlIGl0IGZhaWxzIG9jY2FzaW9uYWxseSB3aGVuIHBhcmFsbGVsIGNvbXBpbGUuCitUaGUgZXJyb3IgbWVzc2FnZToKKyJJT0Vycm9yOiBbRXJybm8gMl0gTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeTogJ2d0ay10eXBlcy5kZWZzJyIKKworQWRkIHRoZW0gdG8gZGVwZW5kZW5jZXMgb2YgZGVmcy5jIHRvIGZpeCB0aGlzIGlzc3VlLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAoraHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMjcwNgorCitTaWduZWQtb2ZmLWJ5OiBTb25nLkxpIDxTb25nLkxpQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworLS0tCisgZ3RrL01ha2VmaWxlLmFtIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ3RrL01ha2VmaWxlLmFtIGIvZ3RrL01ha2VmaWxlLmFtCitpbmRleCA3YmI1ZDBjLi45MTgyNmNiIDEwMDY0NAorLS0tIGEvZ3RrL01ha2VmaWxlLmFtCisrKysgYi9ndGsvTWFrZWZpbGUuYW0KK0BAIC0yODksNyArMjg5LDcgQEAgaWYgSEFWRV9HSU9fVFlQRVNfREVGUworIGV4dHJhX2NvZGVnZW5fYXJncyArPSAtLXJlZ2lzdGVyICQoUFlHT0JKRUNUX0RFRlNESVIpL2dpby10eXBlcy5kZWZzCisgZW5kaWYKKyAKKy0uZGVmcy5jOiAKKysuZGVmcy5jOiBnZGstdHlwZXMuZGVmcyBndGstdHlwZXMuZGVmcworIAkoJChQWVRIT04pICQoQ09ERUdFTkRJUikvY29kZWdlbi5weSBcCisgCSAgICQoUFlHVEtfQ09ERUdFTl9ERUZJTkVTKSBcCisgCSAgICAtSSAkKHNyY2RpcikgXAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGtfMi4yNC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0a18yLjI0LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjMzNhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGtfMi4yNC4wLmJiCkBAIC0wLDAgKzEsNTMgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIGJpbmRpbmdzIGZvciB0aGUgR1RLKyBVSSB0b29sa2l0IgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCisjIG5lZWRzIGd0aysgMi4xNy54CitERVBFTkRTID0gImd0aysgbGliZ2xhZGUgcHl0aG9uLXB5Y2Fpcm8gcHl0aG9uLXB5Z29iamVjdCIKK1JERVBFTkRTXyR7UE59ID0gInB5dGhvbi1zaGVsbCBweXRob24tcHljYWlybyBweXRob24tcHlnb2JqZWN0IgorUFJPVklERVMgPSAicHl0aG9uLXB5Z3RrMiIKK1NSQ05BTUUgPSAicHlndGsiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTkxNjQ2N2I5MTA3NmU2MzFkZDhlZGI3NDI0NzY5YzciCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbm9tZS5vcmcvcHViL2dub21lL3NvdXJjZXMvcHlndGsvMi4yNC8ke1NSQ05BTUV9LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vYWRkLWd0ay10eXBlcy5kZWZzLWludG8tZ2RrLmMtZGVwZW5kZW5jZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZ3RrdW5peHByaW50LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3ByZXZlbnRfdG9fZ2V0X2Rpc3BsYXlfZHVyaW5nX2ltcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub2RvY3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9maXgtcHlndGstMi4wLnBjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FjaW5jbHVkZS5tNCBcCisgICAgICAgICAgIGZpbGU6Ly91cGRhdGUtZGVwZW5kZW5jZXMtb2YtZGVmcy5jLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTEwNTFkNTc5NGZkNzY5NmQzYzFhZjY0MjJkMTdhNDkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2QxYzFlYTI2NWJkNjNmZjY2OWU5MmEyZDNjMmE4OGViMjZiY2Q5ZTUzNjNlMGY4MmM4OTZlNjQ5ZjIwNjkxMiIKKworUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZG9jcyAtLXdpdGgtcHl0aG9uLWluY2x1ZGVzPSR7U1RBR0lOR19JTkNESVJ9Ly4uLyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3R1dGlscy1iYXNlCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2FjaW5jbHVkZS5tNCAke1N9LworCXNlZCAtaSBcCisJCS1lIHM6J2AkUEtHX0NPTkZJRyAtLXZhcmlhYmxlIGRlZnNkaXIgcHlnb2JqZWN0LTIuMGAnOlwiJHtTVEFHSU5HX0RBVEFESVJ9L3B5Z29iamVjdC8yLjAvZGVmc1wiOmcgXAorCQktZSBzOidgJFBLR19DT05GSUcgLS12YXJpYWJsZT1weWd0a2luY2x1ZGVkaXIgcHlnb2JqZWN0LTIuMGAnOlwiJHtTVEFHSU5HX0lOQ0RJUn0vcHlndGstMi4wXCI6ZyBcCisJCS1lIHM6J2AkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWRhdGFkaXIgcHlnb2JqZWN0LTIuMGAnOlwiJHtTVEFHSU5HX0RBVEFESVJ9XCI6ZyBcCisJCS1lIHM6J2AkUEtHX0NPTkZJRyAtLXZhcmlhYmxlIGNvZGVnZW5kaXIgcHlnb2JqZWN0LTIuMGAnOlwiJHtTVEFHSU5HX0RBVEFESVJ9L3B5Z29iamVjdC8yLjAvY29kZWdlblwiOmcgXAorCQktZSBzOidgJFBLR19DT05GSUcgLS12YXJpYWJsZT1maXh4cmVmIHB5Z29iamVjdC0yLjBgJzpcIiR7U1RBR0lOR19EQVRBRElSfS9weWdvYmplY3QveHNsL2ZpeHhyZWYucHlcIjpnIFwKKwkJJHtTfS9jb25maWd1cmUuYWMKK30KKworIyBkaXJ0eSBmaXggIzI6IGZpeCBidWlsZCBzeXN0ZW0gcGF0aHMgbGVha2luZyBpbgorZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJc2VkIC1pIC1lICcxc3xeIyEuKnB5dGhvbnwjIS91c3IvYmluL2VudiBweXRob258JyAke0R9JHtiaW5kaXJ9L3B5Z3RrLWRlbW8KK30KKworUEFDS0FHRVMgPSsgIiR7UE59LWRlbW8iCitGSUxFU18ke1BOfS1kZW1vID0gIiAke2JpbmRpcn0vcHlndGstZGVtbyAke2xpYmRpcn0vcHlndGsgIgorUkRFUEVORFNfJHtQTn0tZGVtbyA9ICJweXRob24tcHlndGsgcHl0aG9uLXN0cmluZ29sZCBweXRob24tbGFuZyIKKworIyB0b2RvOiByZXZhbXAgcGFja2FnaW5nLCBwYWNrYWdlIGRlbW8gc2VwZXJhdGx5CitGSUxFU18ke1BOfS1kZXYgKz0gIiAke2xpYmRpcn0vcHlndGsvMi4wICR7YmluZGlyfS9weWd0ay0qICR7ZGF0YWRpcn0vcHlndGsvMi4wIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4LW5hdGl2ZV8wLjkuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXgtbmF0aXZlXzAuOS45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZWYxYWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4LW5hdGl2ZV8wLjkuOS5iYgpAQCAtMCwwICsxLDUgQEAKK3JlcXVpcmUgcHl0aG9uLXB5cmV4XyR7UFZ9LmJiCitpbmhlcml0IG5hdGl2ZSBweXRob25uYXRpdmUKK0RFUEVORFMgPSAicHl0aG9uLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gIiIKK1BSID0gInIzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleC9weXJleC1maXgtb3B0aW1pemVkLW1vZGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4L3B5cmV4LWZpeC1vcHRpbWl6ZWQtbW9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNThjMzI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleC9weXJleC1maXgtb3B0aW1pemVkLW1vZGUucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBQeXJleC0wLjkuOC40L1B5cmV4L0Rpc3R1dGlscy9leHRlbnNpb24ucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXJleC0wLjkuOC40Lm9yaWcvUHlyZXgvRGlzdHV0aWxzL2V4dGVuc2lvbi5weQorKysrIFB5cmV4LTAuOS44LjQvUHlyZXgvRGlzdHV0aWxzL2V4dGVuc2lvbi5weQorQEAgLTE1LDcgKzE1LDcgQEAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICB3YXJuaW5ncyA9IE5vbmUKKyAKKyBjbGFzcyBFeHRlbnNpb24oX0V4dGVuc2lvbi5FeHRlbnNpb24pOgorLSAgICBfRXh0ZW5zaW9uLkV4dGVuc2lvbi5fX2RvY19fICsgXAorKyAgICBfRXh0ZW5zaW9uLkV4dGVuc2lvbi5fX2RvY19fIG9yICIiICsgXAorICAgICAiIiJweXJleF9pbmNsdWRlX2RpcnMgOiBbc3RyaW5nXQorICAgICAgICAgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIFB5cmV4IGhlYWRlciBmaWxlcyAoLnB4ZCkgKGluCisgICAgICAgICBVbml4IGZvcm0gZm9yIHBvcnRhYmlsaXR5KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleF8wLjkuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXhfMC45LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRkZDJlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXhfMC45LjkuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJMYW5ndWFnZSBmb3Igd3JpdGluZyBQeXRob24gZXh0ZW5zaW9uIG1vZHVsZXMiCitERVNDUklQVElPTiA9ICJQeXJleCBpcyBhIGxhbmd1YWdlIHNwZWNpYWxseSBkZXNpZ25lZCBmb3Igd3JpdGluZyBQeXRob24gZXh0ZW5zaW9uIG1vZHVsZXMuIFwKK0l0J3MgZGVzaWduZWQgdG8gYnJpZGdlIHRoZSBnYXAgYmV0d2VlbiB0aGUgbmljZSwgaGlnaC1sZXZlbCwgZWFzeS10by11c2Ugd29ybGQgb2YgUHl0aG9uIFwKK2FuZCB0aGUgbWVzc3ksIGxvdy1sZXZlbCB3b3JsZCBvZiBDLiIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJBcGFjaGUtMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTc3MWQ0NzJmNTNmOTMzMDMzZjU3ZWVlZTc4MDhlNWJkIgorU1JDTkFNRSA9ICJQeXJleCIKK1BSID0gInI0IgorCitTUkNfVVJJID0gIlwKKyAgaHR0cDovL3d3dy5jb3NjLmNhbnRlcmJ1cnkuYWMubnovZ3JlZy5ld2luZy9weXRob24vJHtTUkNOQU1FfS8ke1NSQ05BTUV9LSR7UFZ9LnRhci5neiBcCisgIGZpbGU6Ly9weXJleC1maXgtb3B0aW1pemVkLW1vZGUucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTE1ZGVlNjdkMTVkNDM5Mzg0MWUyZDYwZTgzNDE5NDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWY4N2RmMDY4MzFkMGIzNDEyZWI0YmM5ZDNmYzJlZTdiZmFlMWI5MTNkN2RhOGMyM2FiMmJmNTY5OWZiNmI1MCIKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfSR7YmFzZV9saWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcy9QeXJleC9Db21waWxlci9MZXhpY29uLnBpY2tsZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2NvbnMtbmF0aXZlXzIuMy42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29ucy1uYXRpdmVfMi4zLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFlODlhYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2NvbnMtbmF0aXZlXzIuMy42LmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSBweXRob24tc2NvbnNfJHtQVn0uYmIKK2luaGVyaXQgbmF0aXZlIHB5dGhvbm5hdGl2ZQorREVQRU5EUyA9ICJweXRob24tbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAiIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBjcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3Njb25zIFNDT05TX0xJQl9ESVI9JyR7U1RBR0lOR19ESVJfSE9TVH0vJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0nCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zXzIuMy42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29uc18yLjMuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGFkN2QzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29uc18yLjMuNi5iYgpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIlNvZnR3YXJlIENvbnN0cnVjdGlvbiB0b29sIChtYWtlL2F1dG90b29scyByZXBsYWNlbWVudCkiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTIzYmMxNTMwYzU1ZTlmMGQxYjcwOTA1NmJjZWEyMzdkIgorU1JDTkFNRSA9ICJzY29ucyIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vc2NvbnMvc2NvbnMtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWM2YTFjM2M3MTZjYmU1ZjE2NTE1ZjE2M2M5MWQ5MjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOThhZGFhMzUxZDhmNGU0MDY4YTViZjE4OTRiZGQ3Zjg1YjM5MGM4YzNmODBkNDM3Y2Y4YmIyNjYwMTI0MDRkZiIKKworUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNldHVwdG9vbHNfMTguMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29sc18xOC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZTJiMmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNldHVwdG9vbHNfMTguMi5iYgpAQCAtMCwwICsxLDQ2IEBACitTVU1NQVJZID0gIkRvd25sb2FkcywgYnVpbGRzLCBpbnN0YWxscywgdXBncmFkZXMsIGFuZCB1bmluc3RhbGxzIFB5dGhvbiBwYWNrYWdlcyIKK0hPTUVQQUdFID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvc2V0dXB0b29scyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJQeXRob24tMi4wIHwgWlBMLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NldHVwLnB5O2JlZ2lubGluZT03ODtlbmRsaW5lPTc4O21kNT04YTMxNDI3MGRkN2E4ZGJjYTc0MTc3NTQxNWYxNzE2ZSIKKworU1JDTkFNRSA9ICJzZXR1cHRvb2xzIgorCitQUk9WSURFUyA9ICJweXRob24tZGlzdHJpYnV0ZSIKKworREVQRU5EUyArPSAicHl0aG9uIgorREVQRU5EU19jbGFzcy1uYXRpdmUgKz0gInB5dGhvbi1uYXRpdmUiCisKK2luaGVyaXQgZGlzdHV0aWxzCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3Mvc2V0dXB0b29scy9zZXR1cHRvb2xzLSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MmI0ZTQ4OTM5ZWYzMTFkNzIwNGY4ZmU5NDA3NjRmNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwOTk0YTU4ZGYyN2VhNWRjNTIzNzgyYTYwMTM1N2EyMTk4Yjc0OTNkY2M5OWEzMGQ1MTgyN2EyMzU4NWI1YjFkIgorCitTID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKKworCitESVNUVVRJTFNfSU5TVEFMTF9BUkdTICs9ICItLWluc3RhbGwtbGliPSR7RH0ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzIgorCitkb19pbnN0YWxsX3ByZXBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9LyR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMKK30KKworUkRFUEVORFNfJHtQTn0gPSAiXAorICBweXRob24tc3RyaW5nb2xkIFwKKyAgcHl0aG9uLWVtYWlsIFwKKyAgcHl0aG9uLXNoZWxsIFwKKyAgcHl0aG9uLWRpc3R1dGlscyBcCisgIHB5dGhvbi1jb21wcmVzc2lvbiBcCisiCisKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJcCisgIHB5dGhvbi1kaXN0dXRpbHMgXAorICBweXRob24tY29tcHJlc3Npb24gXAorIgorCitSUkVQTEFDRVNfJHtQTn0gPSAicHl0aG9uLWRpc3RyaWJ1dGUiCitSUFJPVklERVNfJHtQTn0gPSAicHl0aG9uLWRpc3RyaWJ1dGUiCitSQ09ORkxJQ1RTXyR7UE59ID0gInB5dGhvbi1kaXN0cmlidXRlIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYWRkLWZvci1ycG0taWdub3Jlc2l6ZS1jaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hZGQtZm9yLXJwbS1pZ25vcmVzaXplLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMjdmMjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYWRkLWZvci1ycG0taWdub3Jlc2l6ZS1jaGVjay5wYXRjaApAQCAtMCwwICsxLDM3IEBACitweXRob24tc21hcnRwbTogQWRkIGNoZWNraW5nIGZvciAicnBtLWlnbm9yZXNpemUiIG9wdGlvbgorCitUaGUgZG9fcm9vdGZzIHRha2VzIGEgdmVyeSBsb25nIHRpbWUgd2hlbiBidWlsZCBob3N0IGhhcyBtb3VudGVkIG1hbnkgTkZTCitkZXZpY2VzLiBzeXNjYWxsIGxzdGF0KCkgd2FzIGJlaW5nIGNhbGxlZCBvbiBldmVyeSBmaWxlc3lzdGVtIG1vdW50ZWQgb24gdGhlCitidWlsZCBob3N0IGR1cmluZyBidWlsZGluZy4KK1RoZSByZWFzb24gZm9yIHRoZSBsc3RhdCgpIGlzIHRoYXQgcnBtIGlzIHZlcmlmeWluZyB0aGF0IGVub3VnaCBmcmVlIGRpc2sgc3BhY2UKK2lzIGF2YWlsYWJsZSB0byBkbyB0aGUgaW5zdGFsbC4gSG93ZXZlciwgc2luY2UgdGhlIGluc3RhbGwgaXMgaW50byB0aGUgdGFyZ2V0Cityb290ZnMgaXQgc2hvdWxkIG5vdCBtYXR0ZXIgaG93IG11Y2ggZnJlZSBzcGFjZSB0aGVyZSBpcyBpbiB0aGUgaG9zdCBtb3VudHMuCitBZGQgY2hlY2tpbmcgZm9yICJycG0taWdub3Jlc2l6ZSIsIGJ5IGl0LCBzbWFydCBjYW4gbWFrZSB3aGV0aGVyIFJQTSBza2lwCitjaGVja2luZyBmb3IgZGlza3NwYWNlIHdoZW4gaW5zdGFsbCBhIHJwbSBwYWNrYWdlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogd2VubGluLmthbmcgPHdlbmxpbi5rYW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weSB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weSBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQoraW5kZXggNWRhOWVlNi4uZjA0ODhlYyAxMDA2NDQKKy0tLSBhL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQorKysrIGIvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CitAQCAtMjQxLDYgKzI0MSwxMCBAQCBjbGFzcyBSUE1QYWNrYWdlTWFuYWdlcihQYWNrYWdlTWFuYWdlcik6CisgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgcHJvYmZpbHRlciB8PSBycG0uUlBNUFJPQl9GSUxURVJfSUdOT1JFQVJDSAorIAorKyAgICAgICAgaWYgc3lzY29uZi5nZXQoInJwbS1pZ25vcmVzaXplIiwgRmFsc2UpOgorKyAgICAgICAgICAgIHByb2JmaWx0ZXIgfD0gcnBtLlJQTVBST0JfRklMVEVSX0RJU0tOT0RFUworKyAgICAgICAgICAgIHByb2JmaWx0ZXIgfD0gcnBtLlJQTVBST0JfRklMVEVSX0RJU0tTUEFDRQorKworICAgICAgICAgaWYgZm9yY2Ugb3IgcmVpbnN0YWxsOgorICAgICAgICAgICAgIHByb2JmaWx0ZXIgfD0gcnBtLlJQTVBST0JfRklMVEVSX1JFUExBQ0VQS0cKKyAgICAgICAgICAgICBwcm9iZmlsdGVyIHw9IHJwbS5SUE1QUk9CX0ZJTFRFUl9SRVBMQUNFT0xERklMRVMKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWFscmVhZHktaW5zdGFsbGVkLW1lc3NhZ2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYWxyZWFkeS1pbnN0YWxsZWQtbWVzc2FnZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDU1NTU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWFscmVhZHktaW5zdGFsbGVkLW1lc3NhZ2UucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSBhNzRhOWE5ZWI5ZDc1OTY0YTBlOTc4OTUwZThiMTkxZDdhMThkNzYzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBGcmksIDUgSnVuIDIwMTUgMTc6MDc6MTYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gc21hcnQ6IGNoYW5nZSAiaXMgYWxyZWFkeSBpbnN0YWxsZWQiIG1lc3NhZ2UgZnJvbSB3YXJuaW5nIHRvCisgaW5mbworCitUaGlzIGRvZXNuJ3QgbmVlZCB0byBiZSBhIHdhcm5pbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIHNtYXJ0L2NvbW1hbmRzL2luc3RhbGwucHkgICAgICAgICAgICB8IDQgKystLQorIHNtYXJ0L2ludGVyZmFjZXMvdGV4dC9pbnRlcmFjdGl2ZS5weSB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NtYXJ0L2NvbW1hbmRzL2luc3RhbGwucHkgYi9zbWFydC9jb21tYW5kcy9pbnN0YWxsLnB5CitpbmRleCA2ZWY5NjgyLi44MGQ0NTZiIDEwMDY0NAorLS0tIGEvc21hcnQvY29tbWFuZHMvaW5zdGFsbC5weQorKysrIGIvc21hcnQvY29tbWFuZHMvaW5zdGFsbC5weQorQEAgLTE1Miw3ICsxNTIsNyBAQCBkZWYgbWFpbihjdHJsLCBvcHRzKToKKyAgICAgICAgICAgICBmb3Igb2JqIGluIHJlc3VsdHM6CisgICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gb2JqLnBhY2thZ2VzOgorICAgICAgICAgICAgICAgICAgICAgaWYgcGtnLmluc3RhbGxlZDoKKy0gICAgICAgICAgICAgICAgICAgICAgICBpZmFjZS53YXJuaW5nKF8oIiVzIChmb3IgJXMpIGlzIGFscmVhZHkgaW5zdGFsbGVkIikKKysgICAgICAgICAgICAgICAgICAgICAgICBpZmFjZS5pbmZvKF8oIiVzIChmb3IgJXMpIGlzIGFscmVhZHkgaW5zdGFsbGVkIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBrZywgYXJnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKK0BAIC0xODQsNyArMTg0LDcgQEAgZGVmIG1haW4oY3RybCwgb3B0cyk6CisgICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgICBwa2cgPSBuYW1lc1tuYW1lXVswXQorICAgICAgICAgICAgIGlmIHBrZy5pbnN0YWxsZWQ6CistICAgICAgICAgICAgICAgIGlmYWNlLndhcm5pbmcoXygiJXMgaXMgYWxyZWFkeSBpbnN0YWxsZWQiKSAlIHBrZykKKysgICAgICAgICAgICAgICAgaWZhY2UuaW5mbyhfKCIlcyBpcyBhbHJlYWR5IGluc3RhbGxlZCIpICUgcGtnKQorICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIHRyYW5zLmVucXVldWUocGtnLCBJTlNUQUxMKQorIAorZGlmZiAtLWdpdCBhL3NtYXJ0L2ludGVyZmFjZXMvdGV4dC9pbnRlcmFjdGl2ZS5weSBiL3NtYXJ0L2ludGVyZmFjZXMvdGV4dC9pbnRlcmFjdGl2ZS5weQoraW5kZXggOTg2NTU4NC4uMTkwODY3YiAxMDA2NDQKKy0tLSBhL3NtYXJ0L2ludGVyZmFjZXMvdGV4dC9pbnRlcmFjdGl2ZS5weQorKysrIGIvc21hcnQvaW50ZXJmYWNlcy90ZXh0L2ludGVyYWN0aXZlLnB5CitAQCAtMjc4LDcgKzI3OCw3IEBAIGNsYXNzIEludGVycHJldGVyKENtZCk6CisgICAgICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICAgICAgIHBrZyA9IG5hbWVzW25hbWVdWzBdCisgICAgICAgICAgICAgICAgIGlmIHBrZy5pbnN0YWxsZWQ6CistICAgICAgICAgICAgICAgICAgICBpZmFjZS53YXJuaW5nKF8oIiVzIGlzIGFscmVhZHkgaW5zdGFsbGVkIikgJSBwa2cpCisrICAgICAgICAgICAgICAgICAgICBpZmFjZS5pbmZvKF8oIiVzIGlzIGFscmVhZHkgaW5zdGFsbGVkIikgJSBwa2cpCisgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLmVucXVldWUocGtnLCBJTlNUQUxMKQorLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYXR0ZW1wdC1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYXR0ZW1wdC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU2NzJiMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hdHRlbXB0LWZpeC5wYXRjaApAQCAtMCwwICsxLDE1OCBAQAorU2FkbHksIHNtYXJ0IGlzIG5vdCBkZXRlcm1pbmlzdGljIHNvIHRoZSBzYW1lIGJ1aWxkIGNhbiBnbyBkb3duIG11bHRpcGxlIGRpZmZlcmVudAorcGF0aHdheXMuIFdlJ2QgZXhwZWN0IHRvIHNlZSB0aGUgc2FtZSB3YXJuaW5ncyBob3dldmVyIGRlcGVuZGluZyBvbiB0aGUgcGF0aHdheQordGFrZW4sIGl0IG1heSBvciBtYXkgbm90IHdhcm4sIHBhcnRpY3VsYXJseSB3aXRoIFJlY29tbWVuZHMgc2luY2UgdGhleSdyZSBvcHRpb25hbC4KKworRm9yIGV4YW1wbGUsIHdoZXJlIGEgUmVjb21tZW5kZWQgcGFja2FnZSBpcyBhdmFpbGFibGUgYnV0IGhhcyBDb25mbGljdHMsIHdlJ2QgZXhwZWN0Cit0byBzZWUgYW4gd2FybmluZyB0aGF0IHdlIGNvdWxkbid0IGluc3RhbGwgaXQuIFNvbWUgY29kZSBwYXRocyBzaWxlbnRseSBoaWRlIHRoaXMKKyhpdHMgYSBMT0NLRURfQ09ORkxJQ1QpLiBXZSBhZGQgcHJpbnRpbmcgb2Ygd2FybmluZ3MgZm9yIHRoaXMgY2FzZS4KKworQWxzbywgaWYgdGhlcmUgYXJlIHR3byBjb21wYXRpYmxlIGZlZWRzIGF2YWlsYWJsZSAoZS5nLiBpNTg2IGFuZCBjb3JlMl8zMiksIHRoaXMgCitjaGFuZ2VzIHRoZSBjb2RlIHBhdGggZnJvbSBkaXJlY3QgX2luc3RhbGwoKSB0byBfcGVuZGluZygpIHNpbmNlIHRoZXJlIGFyZSBtdWx0aXBsZQorcHJvdmlkZXJzLiBUaGlzIHBhdGNoIGFkZHMgd2FybmluZyBoYW5kbGluZyB0byBfcGVuZGluZygpIHNvIHdlIGRvbid0IGhpdCBoYXJkIAorZmFpbHVyZXMgdGhlcmUuIFRoaXMgaXMgYXMgc2VlbiB3aXRoIHRoZSBteXN0ZXJpb3VzIGxpYnNwZWV4ZHNwIGZhaWx1cmVzIGZvciB4ODYtbHNiCitvbiB0aGUgYXV0b2J1aWxkZXIuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworUlAKKzIwMTUvNy8xNgorCitJbmRleDogZ2l0L3NtYXJ0L3RyYW5zYWN0aW9uLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc21hcnQvdHJhbnNhY3Rpb24ucHkKKysrKyBnaXQvc21hcnQvdHJhbnNhY3Rpb24ucHkKK0BAIC02NTEsMTMgKzY1MSwxNCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorIAorICAgICAgICAgICAgIGlmIG5vdCBwcnZwa2dzOgorICAgICAgICAgICAgICAgICAjIE5vIHBhY2thZ2VzIHByb3ZpZGUgaXQgYXQgYWxsLiBHaXZlIHVwLgorKworKyAgICAgICAgICAgICAgICByZWFzb25zID0gW10KKysgICAgICAgICAgICAgICAgZm9yIHBydiBpbiByZXEucHJvdmlkZWRieToKKysgICAgICAgICAgICAgICAgICAgIGZvciBwcnZwa2cgaW4gcHJ2LnBhY2thZ2VzOgorKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlZHJlcyA9IGxvY2tlZHBrZ3MuZ2V0KHBydnBrZywgTm9uZSkKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiBsb2NrZWRyZXM6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbnMuYXBwZW5kKGxvY2tfcmVhc29uKHBydnBrZywgbG9ja2VkcmVzKSkKKyAgICAgICAgICAgICAgICAgaWYgcmVxcmVxdWlyZWQ6CistICAgICAgICAgICAgICAgICAgICByZWFzb25zID0gW10KKy0gICAgICAgICAgICAgICAgICAgIGZvciBwcnYgaW4gcmVxLnByb3ZpZGVkYnk6CistICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBydnBrZyBpbiBwcnYucGFja2FnZXM6CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlZHJlcyA9IGxvY2tlZHBrZ3MuZ2V0KHBydnBrZywgTm9uZSkKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbG9ja2VkcmVzOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29ucy5hcHBlbmQobG9ja19yZWFzb24ocHJ2cGtnLCBsb2NrZWRyZXMpKQorICAgICAgICAgICAgICAgICAgICAgaWYgcmVhc29uczoKKyAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IHVuYWJsZSB0byBpbnN0YWxsIHByb3ZpZGVyIGZvciAlczpcbiAgICAlcyIpICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZywgcmVxLCAnXG4gICAgJy5qb2luKHJlYXNvbnMpKQorQEAgLTY2NSw3ICs2NjYsMTEgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IG5vIHBhY2thZ2UgcHJvdmlkZXMgJXMiKSAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2csIHJlcSkKKyAgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIGlmIHJlYXNvbnM6CisrICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2Uud2FybmluZyhfKCJDYW4ndCBpbnN0YWxsICVzOiB1bmFibGUgdG8gaW5zdGFsbCBwcm92aWRlciBmb3IgJXM6XG4gICAgJXMiKSAlIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2csIHJlcSwgJ1xuICAgICcuam9pbihyZWFzb25zKSkpCisrCisgICAgICAgICAgICAgICAgICAgICAjIEl0J3Mgb25seSBhIHJlY29tbWVuZCwgc2tpcAorICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAKKyAgICAgICAgICAgICBpZiBsZW4ocHJ2cGtncykgPT0gMToKK0BAIC04NDYsNiArODUyLDE0IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICBpc2luc3QgPSBjaGFuZ2VzZXQuaW5zdGFsbGVkCisgICAgICAgICBnZXR3ZWlnaHQgPSBzZWxmLl9wb2xpY3kuZ2V0V2VpZ2h0CisgCisrICAgICAgICBhdHRlbXB0ID0gc3lzY29uZi5oYXMoImF0dGVtcHQtaW5zdGFsbCIsIHNvZnQ9VHJ1ZSkKKysKKysgICAgICAgIGRlZiBoYW5kbGVfZmFpbHVyZShtc2cpOgorKyAgICAgICAgICAgIGlmIGF0dGVtcHQ6CisrICAgICAgICAgICAgICAgIGlmYWNlLndhcm5pbmcobXNnKQorKyAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgbXNnCisrCisgICAgICAgICB1cGRvd24gPSBbXQorICAgICAgICAgd2hpbGUgcGVuZGluZzoKKyAgICAgICAgICAgICBpdGVtID0gcGVuZGluZy5wb3AoMCkKK0BAIC04NzAsOCArODg0LDkgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAKKyAgICAgICAgICAgICAgICAgaWYgbm90IHBydnBrZ3M6CisgICAgICAgICAgICAgICAgICAgICAjIE5vIHBhY2thZ2VzIHByb3ZpZGUgaXQgYXQgYWxsLiBHaXZlIHVwLgorLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBubyBwYWNrYWdlICIKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvdmlkZXMgJXMiKSAlIChwa2csIHJlcSkKKysgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9mYWlsdXJlKF8oIkNhbid0IGluc3RhbGwgJXM6IG5vIHBhY2thZ2UgIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm92aWRlcyAlcyIpICUgKHBrZywgcmVxKSkKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgCisgICAgICAgICAgICAgICAgIGlmIGxlbihwcnZwa2dzKSA+IDE6CisgICAgICAgICAgICAgICAgICAgICAjIE1vcmUgdGhhbiBvbmUgcGFja2FnZSBwcm92aWRlIGl0LiBXZSB1c2UgX3BlbmRpbmcgaGVyZSwKK0BAIC04OTQsOSArOTA5LDEwIEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXBvcmRlciwgY3MsIGxrKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VlcG9yZGVyICs9IDAuMDAwMDAxCisgICAgICAgICAgICAgICAgICAgICBpZiBub3QgYWx0ZXJuYXRpdmVzOgorLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogYWxsIHBhY2thZ2VzICIKKysgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZmFpbHVyZShfKCJDYW4ndCBpbnN0YWxsICVzOiBhbGwgcGFja2FnZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvdmlkaW5nICVzIGZhaWxlZCB0byBpbnN0YWxsOlxuJXMiKVwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBrZywgcmVxLCAgIlxuIi5qb2luKGZhaWx1cmVzKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBrZywgcmVxLCAgIlxuIi5qb2luKGZhaWx1cmVzKSkpCisrICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlcy5zb3J0KCkKKyAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXNldC5zZXRTdGF0ZShhbHRlcm5hdGl2ZXNbMF1bMV0pCisgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oYWx0ZXJuYXRpdmVzKSA9PSAxOgorQEAgLTk1NCwxOCArOTcwLDIwIEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgCisgICAgICAgICAgICAgICAgICAgICBmb3IgcmVxcGtnIGluIHJlcXBrZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVxcGtnIGluIGxvY2tlZCBhbmQgaXNpbnN0KHJlcXBrZyk6CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgcmVtb3ZlICVzOiByZXF1aXJpbmcgIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZmFpbHVyZShfKCJDYW4ndCByZW1vdmUgJXM6IHJlcXVpcmluZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFja2FnZSAlcyBpcyBsb2NrZWQiKSAlIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCByZXFwa2cpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZywgcmVxcGtnKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgIGZvciByZXFwa2cgaW4gcmVxcGtnczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGNoZWNrIGFnYWluLCBzaW5jZSBvdGhlciBhY3Rpb25zIG1heSBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGFuZ2VkIHRoZWlyIHN0YXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3QocmVxcGtnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXFwa2cgaW4gbG9ja2VkOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IHJlbW92ZSAlczogcmVxdWlyaW5nICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2ZhaWx1cmUoXygiQ2FuJ3QgcmVtb3ZlICVzOiByZXF1aXJpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhY2thZ2UgJXMgaXMgbG9ja2VkIikgJSBcCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZywgcmVxcGtnKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2csIHJlcXBrZykpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlKHJlcXBrZywgY2hhbmdlc2V0LCBsb2NrZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmcsIGRlcHRoKQorICAgICAgICAgICAgICAgICAgICAgY29udGludWUKK0BAIC05NzgsMTIgKzk5NiwxNCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICBmb3IgcmVxcGtnIGluIHJlcXBrZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVxcGtnIGluIGxvY2tlZCBhbmQgaXNpbnN0KHJlcXBrZyk6CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiJXMgaXMgbG9ja2VkIikgJSByZXFwa2cKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2ZhaWx1cmUoXygiJXMgaXMgbG9ja2VkIikgJSByZXFwa2cpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICBmb3IgcmVxcGtnIGluIHJlcXBrZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNzLmluc3RhbGxlZChyZXFwa2cpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlcXBrZyBpbiBsazoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCIlcyBpcyBsb2NrZWQiKSAlIHJlcXBrZworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZmFpbHVyZShfKCIlcyBpcyBsb2NrZWQiKSAlIHJlcXBrZykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUocmVxcGtnLCBjcywgbGssIE5vbmUsIGRlcHRoKQorICAgICAgICAgICAgICAgICBleGNlcHQgRmFpbGVkLCBlOgorICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHVuaWNvZGUoZSkpCitAQCAtOTkxLDkgKzEwMTEsMTAgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlcy5hcHBlbmQoKGdldHdlaWdodChjcyksIGNzLCBsaykpCisgCisgICAgICAgICAgICAgICAgIGlmIG5vdCBhbHRlcm5hdGl2ZXM6CistICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGFsbCBwYWNrYWdlcyBwcm92aWRpbmcgIgorKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2ZhaWx1cmUoXygiQ2FuJ3QgaW5zdGFsbCAlczogYWxsIHBhY2thZ2VzIHByb3ZpZGluZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGZhaWxlZCB0byBpbnN0YWxsOlxuJXMiKSBcCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBrZywgcHJ2LCAgIlxuIi5qb2luKGZhaWx1cmVzKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGtnLCBwcnYsICAiXG4iLmpvaW4oZmFpbHVyZXMpKSkKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgCisgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlcy5zb3J0KCkKKyAgICAgICAgICAgICAgICAgY2hhbmdlc2V0LnNldFN0YXRlKGFsdGVybmF0aXZlc1swXVsxXSkKK0BAIC0xMjQ2LDYgKzEyNjcsNyBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzZXQuc2V0UmVxdWVzdGVkKHBrZywgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBGYWlsZWQsIGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3lzY29uZi5oYXMoImF0dGVtcHQtaW5zdGFsbCIsIHNvZnQ9VHJ1ZSk6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLndhcm5pbmcoXygiQ2FuJ3QgaW5zdGFsbCAlczogJXMiKSAlIChwa2csIHN0cihlKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBrZyBpbiBjaGFuZ2VzZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgY2hhbmdlc2V0W3BrZ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hdHRlbXB0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWF0dGVtcHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5OGUwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hdHRlbXB0LnBhdGNoCkBAIC0wLDAgKzEsMTc3IEBACitGcm9tIGIxMDVlN2ZlODEyZGEzY2NhZjcxNTVjMGZlMTRjODcyOGIwZDM5YTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIwIEphbiAyMDE0IDE0OjMwOjUyICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCBtZWNoYW5pc20gdG8gYXR0ZW1wdCBpbnN0YWxsIHdpdGhvdXQgZmFpbGluZworCitJbiBPcGVuRW1iZWRkZWQsIGZvciBjb21wbGVtZW50YXJ5IGFuZCAnYXR0ZW1wdG9ubHknIHBhY2thZ2UgcHJvY2Vzc2luZywKK3dlIG5lZWQgYSB3YXkgdG8gaW5zdHJ1Y3Qgc21hcnQgdG8gdHJ5IHRvIGluc3RhbGwsIGJ1dCBpZ25vcmUgYW55CitmYWlsdXJlcyAodXN1YWxseSBjb25mbGljdHMpLgorCitUaGlzIG9wdGlvbiBvbmx5IHdvcmtzIGZvciB0aGUgaW5zdGFsbCBvcGVyYXRpb24uCisKK0lmIGEgY29tcGxlbWVudGFyeSBpbnN0YWxsIGZhaWxzLCBhbiBhY3R1YWwgZXJyb3Igb2NjdXJyZWQsIG9uZSB0aGF0Cit3ZSBjYW4ndCBpZ25vcmUgd2l0aG91dCBsb3NpbmcgdGhlIGVudGlyZSBhdHRlbXB0ZWQgdHJhbnNhY3Rpb24uICBLZWVwCit0aGlzIGFzIGFuIGVycm9yIHNvIHRoYXQgd2UgY2FuIGNhdGNoIHRoZXNlIGNhc2VzIGluIHRoZSBmdXRyZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorLS0tCisgYmFja2VuZHMvcnBtL3BtLnB5IHwgICAzNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQorIHRyYW5zYWN0aW9uLnB5ICAgICB8ICAgNTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDcxIGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5IGIvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CitpbmRleCA5YmJkOTUyLi5iYTY0MDVhIDEwMDY0NAorLS0tIGEvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CisrKysgYi9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKK0BAIC0yNDEsMTUgKzI0MSw0OCBAQCBjbGFzcyBSUE1QYWNrYWdlTWFuYWdlcihQYWNrYWdlTWFuYWdlcik6CisgICAgICAgICBjYiA9IFJQTUNhbGxiYWNrKHByb2csIHVwZ3JhZGVkbmFtZXMpCisgICAgICAgICBjYi5ncmFiT3V0cHV0KFRydWUpCisgICAgICAgICBwcm9icyA9IE5vbmUKKysgICAgICAgIHJldHJ5ID0gMAorICAgICAgICAgdHJ5OgorICAgICAgICAgICAgIHByb2JzID0gdHMucnVuKGNiLCBOb25lKQorICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICBkZWwgZ2V0VFMudHMKKyAgICAgICAgICAgICBjYi5ncmFiT3V0cHV0KEZhbHNlKQorKyAgICAgICAgICAgIGlmIHByb2JzIGFuZCBzeXNjb25mLmhhcygiYXR0ZW1wdC1pbnN0YWxsIiwgc29mdD1UcnVlKToKKysgICAgICAgICAgICAgICAgZGVmIHJlbW92ZV9jb25mbGljdChwa2dORVZSKToKKysgICAgICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gY2hhbmdlc2V0LmtleXMoKToKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiBwa2dORVZSID09IHN0cihrZXkpOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgY2hhbmdlc2V0W2tleV0KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHBrZ3BhdGhzW2tleV0KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2Uud2FybmluZygiUmVtb3ZpbmcgJXMgZHVlIHRvIGZpbGUgJXMgY29uZmxpY3Rpbmcgd2l0aCAlcyIgJSAocGtnTkVWUiwgZm5hbWUsIGFsdE5FVlIpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKworKyAgICAgICAgICAgICAgICByZXRyeSA9IDEKKysgICAgICAgICAgICAgICAgZm9yIHByb2IgaW4gcHJvYnM6CisrICAgICAgICAgICAgICAgICAgICBpZiBwcm9iWzFdWzBdID09IHJwbS5SUE1QUk9CX05FV19GSUxFX0NPTkZMSUNUOgorKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IHByb2JbMF0uc3BsaXQoKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZuYW1lID0gbXNnWzFdCisrICAgICAgICAgICAgICAgICAgICAgICAgcGtnTkVWUiA9IG1zZ1s3XQorKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5FVlIgPSBtc2dbOV0KKysgICAgICAgICAgICAgICAgICAgICAgICBwa2dORVZSID0gcGtnTkVWUi5yc3BsaXQoJy4nLCAxKVswXSArICdAJyArIHBrZ05FVlIucnNwbGl0KCcuJywgMSlbMV0KKysgICAgICAgICAgICAgICAgICAgICAgICBhbHRORVZSID0gYWx0TkVWUi5yc3BsaXQoJy4nLCAxKVswXSArICdAJyArIGFsdE5FVlIucnNwbGl0KCcuJywgMSlbMV0KKysgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfY29uZmxpY3QocGtnTkVWUikKKysgICAgICAgICAgICAgICAgICAgIGVsaWYgcHJvYlsxXVswXSA9PSBycG0uUlBNUFJPQl9GSUxFX0NPTkZMSUNUOgorKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IHByb2JbMF0uc3BsaXQoKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZuYW1lID0gbXNnWzFdCisrICAgICAgICAgICAgICAgICAgICAgICAgcGtnTkVWUiA9IG1zZ1s1XQorKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5FVlIgPSBtc2dbMTFdCisrICAgICAgICAgICAgICAgICAgICAgICAgcGtnTkVWUiA9IHBrZ05FVlIucnNwbGl0KCcuJywgMSlbMF0gKyAnQCcgKyBwa2dORVZSLnJzcGxpdCgnLicsIDEpWzFdCisrICAgICAgICAgICAgICAgICAgICAgICAgYWx0TkVWUiA9IGFsdE5FVlIucnNwbGl0KCcuJywgMSlbMF0gKyAnQCcgKyBhbHRORVZSLnJzcGxpdCgnLicsIDEpWzFdCisrICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlX2NvbmZsaWN0KHBrZ05FVlIpCisrICAgICAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5ID0gMAorKworICAgICAgICAgICAgIHByb2cuc2V0RG9uZSgpCistICAgICAgICAgICAgaWYgcHJvYnM6CisrICAgICAgICAgICAgaWYgcHJvYnMgYW5kIChub3QgcmV0cnkpOgorICAgICAgICAgICAgICAgICByYWlzZSBFcnJvciwgIlxuIi5qb2luKFt4WzBdIGZvciB4IGluIHByb2JzXSkKKyAgICAgICAgICAgICBwcm9nLnN0b3AoKQorKyAgICAgICAgICAgIGlmIHJldHJ5IGFuZCBsZW4oY2hhbmdlc2V0KToKKysgICAgICAgICAgICAgICAgc2VsZi5jb21taXQoY2hhbmdlc2V0LCBwa2dwYXRocykKKyAKKyBjbGFzcyBSUE1DYWxsYmFjazoKKyAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2csIHVwZ3JhZGVkbmFtZXMpOgorZGlmZiAtLWdpdCBhL3NtYXJ0L3RyYW5zYWN0aW9uLnB5IGIvc21hcnQvdHJhbnNhY3Rpb24ucHkKK2luZGV4IDRiOTBjYjcuLjNlMDQzZTkgMTAwNjQ0CistLS0gYS9zbWFydC90cmFuc2FjdGlvbi5weQorKysrIGIvc21hcnQvdHJhbnNhY3Rpb24ucHkKK0BAIC01NTUsNiArNTU1LDggQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAgICAgICAgIGNoYW5nZXNldC5zZXQocGtnLCBJTlNUQUxMKQorICAgICAgICAgaXNpbnN0ID0gY2hhbmdlc2V0Lmluc3RhbGxlZAorIAorKyAgICAgICAgYXR0ZW1wdCA9IHN5c2NvbmYuaGFzKCJhdHRlbXB0LWluc3RhbGwiLCBzb2Z0PVRydWUpCisrCisgICAgICAgICAjIFJlbW92ZSBwYWNrYWdlcyBjb25mbGljdGVkIGJ5IHRoaXMgb25lLgorICAgICAgICAgZm9yIGNuZiBpbiBwa2cuY29uZmxpY3RzOgorICAgICAgICAgICAgIGZvciBwcnYgaW4gY25mLnByb3ZpZGVkYnk6CitAQCAtNTY0LDExICs1NjYsMTYgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3QocHJ2cGtnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZWRbcHJ2cGtnXSA9IChMT0NLRURfQ09ORkxJQ1RfQlksIHBrZykKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorLSAgICAgICAgICAgICAgICAgICAgaWYgcHJ2cGtnIGluIGxvY2tlZDoKKy0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGNvbmZsaWN0ZWQgcGFja2FnZSAiCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyBpcyBsb2NrZWQiKSAlIChwa2csIHBydnBrZykKKy0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZShwcnZwa2csIGNoYW5nZXNldCwgbG9ja2VkLCBwZW5kaW5nLCBkZXB0aCkKKy0gICAgICAgICAgICAgICAgICAgIHBlbmRpbmcuYXBwZW5kKChQRU5ESU5HX1VQRE9XTiwgcHJ2cGtnKSkKKysgICAgICAgICAgICAgICAgICAgIGlmIGF0dGVtcHQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGNoYW5nZXNldFtwa2ddCisrICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBpdCBjb25mbGljdHMgd2l0aCBwYWNrYWdlICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIikgJSAocGtnLCBwcnZwa2cpCisrICAgICAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBydnBrZyBpbiBsb2NrZWQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogY29uZmxpY3RlZCBwYWNrYWdlICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyBpcyBsb2NrZWQiKSAlIChwa2csIHBydnBrZykKKysgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUocHJ2cGtnLCBjaGFuZ2VzZXQsIGxvY2tlZCwgcGVuZGluZywgZGVwdGgpCisrICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZy5hcHBlbmQoKFBFTkRJTkdfVVBET1dOLCBwcnZwa2cpKQorIAorICAgICAgICAgIyBSZW1vdmUgcGFja2FnZXMgY29uZmxpY3Rpbmcgd2l0aCB0aGlzIG9uZS4KKyAgICAgICAgIGZvciBwcnYgaW4gcGtnLnByb3ZpZGVzOgorQEAgLTU3OSwxMiArNTg2LDE4IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0KGNuZnBrZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VkW2NuZnBrZ10gPSAoTE9DS0VEX0NPTkZMSUNULCBwa2cpCisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKy0gICAgICAgICAgICAgICAgICAgIGlmIGNuZnBrZyBpbiBsb2NrZWQ6CisrICAgICAgICAgICAgICAgICAgICBpZiBhdHRlbXB0OgorKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBjaGFuZ2VzZXRbcGtnXQorICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogaXQncyBjb25mbGljdGVkIGJ5ICIKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBsb2NrZWQgcGFja2FnZSAlcyIpIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBrZywgY25mcGtnKQorLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlKGNuZnBrZywgY2hhbmdlc2V0LCBsb2NrZWQsIHBlbmRpbmcsIGRlcHRoKQorLSAgICAgICAgICAgICAgICAgICAgcGVuZGluZy5hcHBlbmQoKFBFTkRJTkdfVVBET1dOLCBjbmZwa2cpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIHBhY2thZ2UgJXMiKSBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGtnLCBjbmZwa2cpCisrICAgICAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNuZnBrZyBpbiBsb2NrZWQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogaXQncyBjb25mbGljdGVkIGJ5ICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgbG9ja2VkIHBhY2thZ2UgJXMiKSBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBrZywgY25mcGtnKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZShjbmZwa2csIGNoYW5nZXNldCwgbG9ja2VkLCBwZW5kaW5nLCBkZXB0aCkKKysgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nLmFwcGVuZCgoUEVORElOR19VUERPV04sIGNuZnBrZykpCisgCisgICAgICAgICAjIFJlbW92ZSBwYWNrYWdlcyB3aXRoIHRoZSBzYW1lIG5hbWUgdGhhdCBjYW4ndAorICAgICAgICAgIyBjb2V4aXN0IHdpdGggdGhpcyBvbmUuCitAQCAtNTk0LDEwICs2MDcsMTUgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdChuYW1lcGtnKToKKyAgICAgICAgICAgICAgICAgICAgIGxvY2tlZFtuYW1lcGtnXSA9IChMT0NLRURfTk9fQ09FWElTVCwgcGtnKQorICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKy0gICAgICAgICAgICAgICAgaWYgbmFtZXBrZyBpbiBsb2NrZWQ6CisrICAgICAgICAgICAgICAgIGlmIGF0dGVtcHQ6CisrICAgICAgICAgICAgICAgICAgICBkZWwgY2hhbmdlc2V0W3BrZ10KKyAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogaXQgY2FuJ3QgY29leGlzdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggJXMiKSAlIChwa2csIG5hbWVwa2cpCistICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZShuYW1lcGtnLCBjaGFuZ2VzZXQsIGxvY2tlZCwgcGVuZGluZywgZGVwdGgpCisrICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICBpZiBuYW1lcGtnIGluIGxvY2tlZDoKKysgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGl0IGNhbid0IGNvZXhpc3QgIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2l0aCAlcyIpICUgKHBrZywgbmFtZXBrZykKKysgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZShuYW1lcGtnLCBjaGFuZ2VzZXQsIGxvY2tlZCwgcGVuZGluZywgZGVwdGgpCisgCisgICAgICAgICAjIEluc3RhbGwgcGFja2FnZXMgcmVxdWlyZWQgYnkgdGhpcyBvbmUuCisgICAgICAgICBmb3IgcmVxIGluIHBrZy5yZXF1aXJlcyArIHBrZy5yZWNvbW1lbmRzOgorQEAgLTExNzYsNiArMTE5NCw4IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgCisgICAgICAgICBzZWxmLl9wb2xpY3kucnVuU3RhcnRpbmcoKQorIAorKyAgICAgICAgYXR0ZW1wdCA9IHN5c2NvbmYuaGFzKCJhdHRlbXB0LWluc3RhbGwiLCBzb2Z0PVRydWUpCisrCisgICAgICAgICB0cnk6CisgICAgICAgICAgICAgY2hhbmdlc2V0ID0gc2VsZi5fY2hhbmdlc2V0LmNvcHkoKQorICAgICAgICAgICAgIGlzaW5zdCA9IGNoYW5nZXNldC5pbnN0YWxsZWQKK0BAIC0xMTkwLDcgKzEyMTAsMTEgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgIGxvY2tlZFtwa2ddID0gKExPQ0tFRF9LRUVQLCBOb25lKQorICAgICAgICAgICAgICAgICBlbGlmIG9wIGlzIElOU1RBTEw6CisgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0KHBrZykgYW5kIHBrZyBpbiBsb2NrZWQ6CistICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBpdCdzIGxvY2tlZCIpICUgcGtnCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgYXR0ZW1wdDoKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2Uud2FybmluZyhfKCJDYW4ndCBpbnN0YWxsICVzOiBpdCdzIGxvY2tlZCIpICUgcGtnKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgY2hhbmdlc2V0W3BrZ10KKysgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGl0J3MgbG9ja2VkIikgJSBwa2cKKyAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXNldC5zZXQocGtnLCBJTlNUQUxMKQorICAgICAgICAgICAgICAgICAgICAgbG9ja2VkW3BrZ10gPSAoTE9DS0VEX0lOU1RBTEwsIE5vbmUpCisgICAgICAgICAgICAgICAgIGVsaWYgb3AgaXMgUkVNT1ZFOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWNoYW5uZWxzZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWNoYW5uZWxzZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MjFiMzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtY2hhbm5lbHNkaXIucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorTWFrZSBDSEFOTkVMU0RJUiBpbiBzbWFydCBlbXB0eSwgc2luY2UgdGhpcyBjYXVzZXMgaG9zdCBjb250YW1pbmF0aW9uIGlzc3Vlcworb24gc29tZSBSUE0tYmFzZWQgaG9zdHMgb24gd2hpY2ggc21hcnQgaXMgYWxyZWFkeSBpbnN0YWxsZWQuCisKK1tZT0NUTyAjMzg4MV0KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworZGlmZiAtLWdpdCBhL3NtYXJ0L3BsdWdpbnMvY2hhbm5lbHN5bmMucHkgYi9zbWFydC9wbHVnaW5zL2NoYW5uZWxzeW5jLnB5CitpbmRleCAzYmE5NWZmLi42NDZkNjk2IDEwMDY0NAorLS0tIGEvc21hcnQvcGx1Z2lucy9jaGFubmVsc3luYy5weQorKysrIGIvc21hcnQvcGx1Z2lucy9jaGFubmVsc3luYy5weQorQEAgLTIzLDcgKzIzLDExIEBAIGZyb20gc21hcnQuY2hhbm5lbCBpbXBvcnQgKgorIGZyb20gc21hcnQgaW1wb3J0ICoKKyBpbXBvcnQgb3MKKyAKKy1DSEFOTkVMU0RJUiA9ICIvZXRjL3NtYXJ0L2NoYW5uZWxzLyIKKysjIEZvciBub3csIHdlIGxlYXZlIHRoZSBkZWZpbml0aW9uIG9mIENIQU5ORUxTRElSIGVtcHR5LiBUaGlzIHByZXZlbnRzIHNtYXJ0CisrIyBmcm9tIGVycm9uZW91c2x5IGNvbnNpZGVyIHRoZSAgYnVpbGQgaG9zdCdzIGNoYW5uZWxzIHdoaWxlIHNldHRpbmcgdXAgaXRzCisrIyBjaGFubmVscyBbWU9DVE8gIzM4ODFdLiBJZiB0aGlzIGZlYXR1cmUgd2lsbCBiZSB1c2VkIGluIHRoZSBmdXR1cmUsIENIQU5ORUxTRElSCisrIyBzaG91bGQgYmUgc2V0IHRvIGEgcHJvcGVyIHZhbHVlLgorK0NIQU5ORUxTRElSID0gIiIKKyAKKyBkZWYgc3luY0NoYW5uZWxzKGNoYW5uZWxzZGlyLCBmb3JjZT1Ob25lKToKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1pbXByb3ZlLWVycm9yLXJlcG9ydGluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1pbXByb3ZlLWVycm9yLXJlcG9ydGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODIyNjViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWltcHJvdmUtZXJyb3ItcmVwb3J0aW5nLnBhdGNoCkBAIC0wLDAgKzEsOTEgQEAKK0ltcHJvdmUgZXJyb3IgcmVwb3J0aW5nIGluIHNtYXJ0CisKK0FkZCBjb2RlIHRvIGNoZWNrIHByb3BlciBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGZvciB2YXJpb3VzCitzbWFydCBjb21tYW5kcy4gRXhpdCB3aXRoIGVycm9yIGlmIGVycm9uZW91cy9hZGRpdGlvbmFsIGFyZ3VtZW50cworYXJlIGdpdmVuIGluIHRoZSBjb21tYW5kIGxpbmUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBCb2dkYW4gTWFyaW5lc2N1IDxib2dkYW4uYS5tYXJpbmVzY3VAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvc21hcnQvdXRpbC9vcHRwYXJzZS5weSBiL3NtYXJ0L3V0aWwvb3B0cGFyc2UucHkKK2luZGV4IDZmZmYxYmMuLmY0NDVhM2IgMTAwNjQ0CistLS0gYS9zbWFydC91dGlsL29wdHBhcnNlLnB5CisrKysgYi9zbWFydC91dGlsL29wdHBhcnNlLnB5CitAQCAtNzAsNiArNzAsOCBAQCBpbXBvcnQgc3lzLCBvcworIGltcG9ydCB0eXBlcworIGltcG9ydCB0ZXh0d3JhcAorIGZyb20gZ2V0dGV4dCBpbXBvcnQgZ2V0dGV4dCBhcyBfCisrZnJvbSBzbWFydCBpbXBvcnQgRXJyb3IKKytpbXBvcnQgcmUKKyAKKyBkZWYgX3JlcHIoc2VsZik6CisgICAgIHJldHVybiAiPCVzIGF0IDB4JXg6ICVzPiIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGlkKHNlbGYpLCBzZWxmKQorQEAgLTcxMCw2ICs3MTIsMTIgQEAgY2xhc3MgT3B0aW9uOgorICAgICAgICAgICAgIHNlbGYuYWN0aW9uLCBzZWxmLmRlc3QsIG9wdCwgdmFsdWUsIHZhbHVlcywgcGFyc2VyKQorIAorICAgICBkZWYgdGFrZV9hY3Rpb24oc2VsZiwgYWN0aW9uLCBkZXN0LCBvcHQsIHZhbHVlLCB2YWx1ZXMsIHBhcnNlcik6CisrICAgICAgICAjIEtlZXAgYWxsIHRoZSBvcHRpb25zIGluIHRoZSBjb21tYW5kIGxpbmUgaW4gdGhlICdfZ2l2ZW5fb3B0cycgYXJyYXkKKysgICAgICAgICMgVGhpcyB3aWxsIGJlIHVzZWQgbGF0ZXIgdG8gdmFsaWRhdGUgdGhlIGNvbW1hbmQgbGluZQorKyAgICAgICAgZ2l2ZW5fb3B0cyA9IGdldGF0dHIocGFyc2VyLnZhbHVlcywgIl9naXZlbl9vcHRzIiwgW10pCisrICAgICAgICB1c2VyX29wdCA9IHJlLnN1YihyIl5cLSoiLCAiIiwgb3B0KS5yZXBsYWNlKCItIiwgIl8iKQorKyAgICAgICAgZ2l2ZW5fb3B0cy5hcHBlbmQodXNlcl9vcHQpCisrICAgICAgICBzZXRhdHRyKHBhcnNlci52YWx1ZXMsICJfZ2l2ZW5fb3B0cyIsIGdpdmVuX29wdHMpCisgICAgICAgICBpZiBhY3Rpb24gPT0gInN0b3JlIjoKKyAgICAgICAgICAgICBzZXRhdHRyKHZhbHVlcywgZGVzdCwgdmFsdWUpCisgICAgICAgICBlbGlmIGFjdGlvbiA9PSAic3RvcmVfY29uc3QiOgorQEAgLTgyMSw2ICs4MjksNTQgQEAgY2xhc3MgVmFsdWVzOgorICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgYXR0ciwgdmFsdWUpCisgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBhdHRyKQorIAorKyAgICAjIENoZWNrIGlmIHRoZSBnaXZlbiBvcHRpb24gaGFzIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGFyZ3VtZW50cworKyAgICAjIFJhaXNlIGFuIGVycm9yIGlmIHRoZSBvcHRpb24gaGFzIGFuIGludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cworKyAgICAjIEEgbmVnYXRpdmUgbnVtYmVyIGZvciAnbmFyZ3MnIG1lYW5zICJhdCBsZWFzdCB8bmFyZ3N8IGFyZ3VtZW50cyBhcmUgbmVlZGVkIgorKyAgICBkZWYgY2hlY2tfYXJnc19vZl9vcHRpb24oc2VsZiwgb3B0LCBuYXJncywgZXJyPU5vbmUpOgorKyAgICAgICAgZ2l2ZW5fb3B0cyA9IGdldGF0dHIoc2VsZiwgIl9naXZlbl9vcHRzIiwgW10pCisrICAgICAgICBpZiBub3Qgb3B0IGluIGdpdmVuX29wdHM6CisrICAgICAgICAgICAgcmV0dXJuCisrICAgICAgICB2YWx1ZXMgPSBnZXRhdHRyKHNlbGYsIG9wdCwgW10pCisrICAgICAgICBpZiB0eXBlKHZhbHVlcykgIT0gdHlwZShbXSk6CisrICAgICAgICAgICAgcmV0dXJuCisrICAgICAgICBpZiBuYXJncyA8IDA6CisrICAgICAgICAgICAgbmFyZ3MgPSAtbmFyZ3MKKysgICAgICAgICAgICBpZiBsZW4odmFsdWVzKSA+PSBuYXJnczoKKysgICAgICAgICAgICAgICAgcmV0dXJuCisrICAgICAgICAgICAgaWYgbm90IGVycjoKKysgICAgICAgICAgICAgICAgaWYgbmFyZ3MgPT0gMToKKysgICAgICAgICAgICAgICAgICAgIGVyciA9IF8oIk9wdGlvbiAnJXMnIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIpICUgb3B0CisrICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICBlcnIgPSBfKCJPcHRpb24gJyVzJyByZXF1aXJlcyBhdCBsZWFzdCAlZCBhcmd1bWVudHMiKSAlIChvcHQsIG5hcmdzKQorKyAgICAgICAgICAgIHJhaXNlIEVycm9yLCBlcnIKKysgICAgICAgIGVsaWYgbmFyZ3MgPT0gMDoKKysgICAgICAgICAgICBpZiBsZW4oIHZhbHVlcyApID09IDA6CisrICAgICAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgICAgIHJhaXNlIEVycm9yLCBlcnIKKysgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgaWYgbGVuKHZhbHVlcykgPT0gbmFyZ3M6CisrICAgICAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgICAgIGlmIG5vdCBlcnI6CisrICAgICAgICAgICAgICAgIGlmIG5hcmdzID09IDE6CisrICAgICAgICAgICAgICAgICAgICBlcnIgPSBfKCJPcHRpb24gJyVzJyByZXF1aXJlcyBvbmUgYXJndW1lbnQiKSAlIG9wdAorKyAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgZXJyID0gXygiT3B0aW9uICclcycgcmVxdWlyZXMgJWQgYXJndW1lbnRzIikgJSAob3B0LCBuYXJncykKKysgICAgICAgICAgICByYWlzZSBFcnJvciwgZXJyCisrCisrICAgICMgQ2hlY2sgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIG9wdGlvbnMgaW4gJ2FjdGxpc3QnIHdhcyBnaXZlbiBhcyBhbiBhcmd1bWVudAorKyAgICAjIHRvIHRoZSBjb21tYW5kICdjbWRuYW1lJworKyAgICBkZWYgZW5zdXJlX2FjdGlvbihzZWxmLCBjbWRuYW1lLCBhY3RsaXN0KToKKysgICAgICAgIGdpdmVuX29wdHMgPSBnZXRhdHRyKHNlbGYsICJfZ2l2ZW5fb3B0cyIsIFtdKQorKyAgICAgICAgZm9yIGFjdGlvbiBpbiBhY3RsaXN0OgorKyAgICAgICAgICAgIGlmIGFjdGlvbiBpbiBnaXZlbl9vcHRzOgorKyAgICAgICAgICAgICAgICByZXR1cm4KKysgICAgICAgIHJhaXNlIEVycm9yLCBfKCJObyBhY3Rpb24gc3BlY2lmaWVkIGZvciBjb21tYW5kICclcyciKSAlIGNtZG5hbWUKKysKKysgICAgIyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGFyZ3VtZW50cyBsZWZ0IGFmdGVyIHBhcnNpbmcgdGhlIGNvbW1hbmQgbGluZSBhbmQKKysgICAgIyByYWlzZSBhbiBlcnJvciBpZiBzdWNoIGFyZ3VtZW50cyBhcmUgZm91bmQKKysgICAgZGVmIGNoZWNrX3JlbWFpbmluZ19hcmdzKHNlbGYpOgorKyAgICAgICAgaWYgc2VsZi5hcmdzOgorKyAgICAgICAgICAgIHJhaXNlIEVycm9yLCBfKCJJbnZhbGlkIGFyZ3VtZW50KHMpICclcyciICUgc3RyKHNlbGYuYXJncykpCisgCisgY2xhc3MgT3B0aW9uQ29udGFpbmVyOgorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LXJlY29tbWVuZHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcmVjb21tZW5kcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjA3ZmM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LXJlY29tbWVuZHMucGF0Y2gKQEAgLTAsMCArMSwzODEgQEAKK0hhbmRsZSByZWNvbW1lbmRlZCBwYWNrYWdlcyBpbiBjb3JlIGFuZCBycG0gYmFja2VuZHMKKworSWRlbnRpZnkgYW5kIHN0b3JlIHJlY29tbWVuZGVkIHBhY2thZ2VzIGluIHRoZSBjYWNoZSwgYWRkIGEgcXVlcnkgb3B0aW9uCit0byByZWFkIHRoZW0gYW5kIGlnbm9yZSB0aGVtIGlmIHRoZXkgYXJlIG5vdCBwcmVzZW50IHdoZW4gaW5zdGFsbGluZy4KKworSW5pdGlhbCBpZGVudGlmaWNhdGlvbiBjb2RlIGZyb20gTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkgYi9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQoraW5kZXggOTMzMmVhMC4uNGZjZmJlZSAxMDA2NDQKKy0tLSBhL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5CisrKysgYi9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQorQEAgLTIyNSw2ICsyMjUsNTIgQEAgY2xhc3MgUlBNUGFja2FnZShQYWNrYWdlKToKKyAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisrICAgICAgICBzcmVjcyA9IGZrKHNlbGYucmVjb21tZW5kcykKKysgICAgICAgIG9yZWNzID0gZmsob3RoZXIucmVjb21tZW5kcykKKysgICAgICAgIGlmIHNyZWNzICE9IG9yZWNzOgorKyAgICAgICAgICAgIGZvciBzcmVjIGluIHNyZWNzOgorKyAgICAgICAgICAgICAgICBpZiBzcmVjLm5hbWVbMF0gPT0gIi8iIG9yIHNyZWMgaW4gb3JlY3M6CisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorKyAgICAgICAgICAgICAgICBmb3Igb3JlYyBpbiBvcmVjczoKKysgICAgICAgICAgICAgICAgICAgIGlmIChzcmVjLm5hbWUgPT0gb3JlYy5uYW1lIGFuZAorKyAgICAgICAgICAgICAgICAgICAgICAgIHNyZWMucmVsYXRpb24gPT0gb3JlYy5yZWxhdGlvbiBhbmQKKysgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3ZlcihzcmVjLnZlcnNpb24sIG9yZWMudmVyc2lvbikpOgorKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKysgICAgICAgICAgICBmb3Igb3JlYyBpbiBvcmVjczoKKysgICAgICAgICAgICAgICAgaWYgb3JlYy5uYW1lWzBdID09ICIvIiBvciBvcmVjIGluIHNyZWNzOgorKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKysgICAgICAgICAgICAgICAgZm9yIHNyZWMgaW4gc3JlY3M6CisrICAgICAgICAgICAgICAgICAgICBpZiAoc3JlYy5uYW1lID09IG9yZWMubmFtZSBhbmQKKysgICAgICAgICAgICAgICAgICAgICAgICBzcmVjLnJlbGF0aW9uID09IG9yZWMucmVsYXRpb24gYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2t2ZXIoc3JlYy52ZXJzaW9uLCBvcmVjLnZlcnNpb24pKToKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisrICAgICAgICBzcmVjcyA9IGZrKHNlbGYucmVjb21tZW5kcykKKysgICAgICAgIG9yZWNzID0gZmsob3RoZXIucmVjb21tZW5kcykKKysgICAgICAgIGlmIHNyZWNzICE9IG9yZWNzOgorKyAgICAgICAgICAgIGZvciBzcmVjIGluIHNyZWNzOgorKyAgICAgICAgICAgICAgICBpZiBzcmVjLm5hbWVbMF0gPT0gIi8iIG9yIHNyZWMgaW4gb3JlY3M6CisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorKyAgICAgICAgICAgICAgICBmb3Igb3JlYyBpbiBvcmVjczoKKysgICAgICAgICAgICAgICAgICAgIGlmIChzcmVjLm5hbWUgPT0gb3JlYy5uYW1lIGFuZAorKyAgICAgICAgICAgICAgICAgICAgICAgIHNyZWMucmVsYXRpb24gPT0gb3JlYy5yZWxhdGlvbiBhbmQKKysgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3ZlcihzcmVjLnZlcnNpb24sIG9yZWMudmVyc2lvbikpOgorKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKysgICAgICAgICAgICBmb3Igb3JlYyBpbiBvcmVjczoKKysgICAgICAgICAgICAgICAgaWYgb3JlYy5uYW1lWzBdID09ICIvIiBvciBvcmVjIGluIHNyZWNzOgorKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKysgICAgICAgICAgICAgICAgZm9yIHNyZWMgaW4gc3JlY3M6CisrICAgICAgICAgICAgICAgICAgICBpZiAoc3JlYy5uYW1lID09IG9yZWMubmFtZSBhbmQKKysgICAgICAgICAgICAgICAgICAgICAgICBzcmVjLnJlbGF0aW9uID09IG9yZWMucmVsYXRpb24gYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2t2ZXIoc3JlYy52ZXJzaW9uLCBvcmVjLnZlcnNpb24pKToKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICByZXR1cm4gVHJ1ZQorIAorICAgICBkZWYgY29leGlzdHMoc2VsZiwgb3RoZXIpOgorZGlmZiAtLWdpdCBhL3NtYXJ0L2NjYWNoZS5jIGIvc21hcnQvY2NhY2hlLmMKK2luZGV4IDcxOTMxODUuLjhiNjY1MTUgMTAwNjQ0CistLS0gYS9zbWFydC9jY2FjaGUuYworKysrIGIvc21hcnQvY2NhY2hlLmMKK0BAIC01MDAsNiArNTAwLDQ2IEBAIFBhY2thZ2VfZXF1YWxzKFBhY2thZ2VPYmplY3QgKnNlbGYsIFBhY2thZ2VPYmplY3QgKm90aGVyKQorICAgICAgICAgfQorICAgICB9CisgCisrICAgIGlsZW4gPSAwOworKyAgICBqbGVuID0gMDsKKysgICAgZm9yIChpID0gMDsgaSAhPSBQeUxpc3RfR0VUX1NJWkUoc2VsZi0+cmVjb21tZW5kcyk7IGkrKykgeworKyAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQeUxpc3RfR0VUX0lURU0oc2VsZi0+cmVjb21tZW5kcywgaSk7CisrICAgICAgICBpZiAoIVB5T2JqZWN0X0lzSW5zdGFuY2UoaXRlbSwgKFB5T2JqZWN0ICopJkRlcGVuZHNfVHlwZSkpIHsKKysgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiRGVwZW5kcyBpbnN0YW5jZSBleHBlY3RlZCIpOworKyAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKFNUUigoKERlcGVuZHNPYmplY3QgKilpdGVtKS0+bmFtZSlbMF0gIT0gJy8nKQorKyAgICAgICAgICAgIGlsZW4gKz0gMTsKKysgICAgfQorKyAgICBmb3IgKGogPSAwOyBqICE9IFB5TGlzdF9HRVRfU0laRShvdGhlci0+cmVjb21tZW5kcyk7IGorKykgeworKyAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQeUxpc3RfR0VUX0lURU0ob3RoZXItPnJlY29tbWVuZHMsIGopOworKyAgICAgICAgaWYgKCFQeU9iamVjdF9Jc0luc3RhbmNlKGl0ZW0sIChQeU9iamVjdCAqKSZEZXBlbmRzX1R5cGUpKSB7CisrICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIkRlcGVuZHMgaW5zdGFuY2UgZXhwZWN0ZWQiKTsKKysgICAgICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChTVFIoKChEZXBlbmRzT2JqZWN0ICopaXRlbSktPm5hbWUpWzBdICE9ICcvJykKKysgICAgICAgICAgICBqbGVuICs9IDE7CisrICAgIH0KKysgICAgaWYgKGlsZW4gIT0gamxlbikgeworKyAgICAgICAgcmV0ID0gUHlfRmFsc2U7CisrICAgICAgICBnb3RvIGV4aXQ7CisrICAgIH0KKysKKysgICAgaWxlbiA9IFB5TGlzdF9HRVRfU0laRShzZWxmLT5yZWNvbW1lbmRzKTsKKysgICAgamxlbiA9IFB5TGlzdF9HRVRfU0laRShvdGhlci0+cmVjb21tZW5kcyk7CisrICAgIGZvciAoaSA9IDA7IGkgIT0gaWxlbjsgaSsrKSB7CisrICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFB5TGlzdF9HRVRfSVRFTShzZWxmLT5yZWNvbW1lbmRzLCBpKTsKKysgICAgICAgIGlmIChTVFIoKChEZXBlbmRzT2JqZWN0ICopaXRlbSktPm5hbWUpWzBdICE9ICcvJykgeworKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogIT0gamxlbjsgaisrKQorKyAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PSBQeUxpc3RfR0VUX0lURU0ob3RoZXItPnJlY29tbWVuZHMsIGopKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgaWYgKGogPT0gamxlbikgeworKyAgICAgICAgICAgICAgICByZXQgPSBQeV9GYWxzZTsKKysgICAgICAgICAgICAgICAgZ290byBleGl0OworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorKworIGV4aXQ6CisgICAgIFB5X0lOQ1JFRihyZXQpOworICAgICByZXR1cm4gcmV0OworQEAgLTE4MTMsNiArMTg1Myw1OSBAQCBMb2FkZXJfYnVpbGRQYWNrYWdlKExvYWRlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisgICAgICAgICB9CisgICAgIH0KKyAKKysgICAgLyogaWYgcmVjYXJnczogKi8KKysgICAgaWYgKHJlY2FyZ3MpIHsKKysgICAgICAgIGludCBpID0gMDsKKysgICAgICAgIGludCBsZW4gPSBQeUxpc3RfR0VUX1NJWkUocmVjYXJncyk7CisrICAgICAgICAvKiBwa2cucmVjb21tZW5kcyA9IFtdICovCisrICAgICAgICBQeV9ERUNSRUYocGtnb2JqLT5yZWNvbW1lbmRzKTsKKysgICAgICAgIHBrZ29iai0+cmVjb21tZW5kcyA9IFB5TGlzdF9OZXcobGVuKTsKKysgICAgICAgIC8qIGZvciBhcmdzIGluIHJlY2FyZ3M6ICovCisrICAgICAgICBmb3IgKDsgaSAhPSBsZW47IGkrKykgeworKyAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzID0gUHlMaXN0X0dFVF9JVEVNKHJlY2FyZ3MsIGkpOworKyAgICAgICAgICAgIERlcGVuZHNPYmplY3QgKnJlY29iajsKKysgICAgICAgICAgICBQeU9iamVjdCAqcmVjOworKyAgICAgICAgICAgIAorKyAgICAgICAgICAgIGlmICghUHlUdXBsZV9DaGVjayhhcmdzKSkgeworKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkl0ZW0gaW4gcmVjYXJncyBpcyBub3QgYSB0dXBsZSIpOworKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgLyogcmVjID0gY2FjaGUuX29iam1hcC5nZXQoYXJncykgKi8KKysgICAgICAgICAgICByZWMgPSBQeURpY3RfR2V0SXRlbShjYWNoZS0+X29iam1hcCwgYXJncyk7CisrICAgICAgICAgICAgcmVjb2JqID0gKERlcGVuZHNPYmplY3QgKilyZWM7CisrCisrICAgICAgICAgICAgLyogaWYgbm90IHJlYzogKi8KKysgICAgICAgICAgICBpZiAoIXJlYykgeworKyAgICAgICAgICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soYXJncykgfHwgUHlUdXBsZV9HRVRfU0laRShhcmdzKSA8IDIpIHsKKysgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiSW52YWxpZCByZWNhcmdzIHR1cGxlIik7CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAvKiByZWMgPSBhcmdzWzBdKCphcmdzWzE6XSkgKi8KKysgICAgICAgICAgICAgICAgY2FsbGFyZ3MgPSBQeVR1cGxlX0dldFNsaWNlKGFyZ3MsIDEsIFB5VHVwbGVfR0VUX1NJWkUoYXJncykpOworKyAgICAgICAgICAgICAgICByZWMgPSBQeU9iamVjdF9DYWxsT2JqZWN0KFB5VHVwbGVfR0VUX0lURU0oYXJncywgMCksIGNhbGxhcmdzKTsKKysgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNhbGxhcmdzKTsKKysgICAgICAgICAgICAgICAgaWYgKCFyZWMpIHJldHVybiBOVUxMOworKyAgICAgICAgICAgICAgICByZWNvYmogPSAoRGVwZW5kc09iamVjdCAqKXJlYzsKKysKKysgICAgICAgICAgICAgICAgLyogY2FjaGUuX29iam1hcFthcmdzXSA9IHJlYyAqLworKyAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShjYWNoZS0+X29iam1hcCwgYXJncywgcmVjKTsKKysgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlYyk7CisrCisrICAgICAgICAgICAgICAgIC8qIGNhY2hlLl9yZWNvbW1lbmRzLmFwcGVuZChyZWMpICovCisrICAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQoY2FjaGUtPl9yZWNvbW1lbmRzLCByZWMpOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAvKiByZWxwa2dzLmFwcGVuZChyZWMucGFja2FnZXMpICovCisrICAgICAgICAgICAgUHlMaXN0X0FwcGVuZChyZWxwa2dzLCByZWNvYmotPnBhY2thZ2VzKTsKKysKKysgICAgICAgICAgICAvKiBwa2cucmVjb21tZW5kcy5hcHBlbmQocmVjKSAqLworKyAgICAgICAgICAgIFB5X0lOQ1JFRihyZWMpOworKyAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShwa2dvYmotPnJlY29tbWVuZHMsIGksIHJlYyk7CisrICAgICAgICB9CisrICAgIH0KKysKKyAgICAgLyogaWYgdXBnYXJnczogKi8KKyAgICAgaWYgKHVwZ2FyZ3MpIHsKKyAgICAgICAgIGludCBpID0gMDsKK0BAIC0yNTkyLDYgKzI2ODUsMTYgQEAgQ2FjaGVfcmVzZXQoQ2FjaGVPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorICAgICAgICAgaWYgKFB5TGlzdF9DaGVjayhyZXFvYmotPnByb3ZpZGVkYnkpKQorICAgICAgICAgICAgIExJU1RfQ0xFQVIocmVxb2JqLT5wcm92aWRlZGJ5KTsKKyAgICAgfQorKyAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUoc2VsZi0+X3JlY29tbWVuZHMpOworKyAgICBmb3IgKGkgPSAwOyBpICE9IGxlbjsgaSsrKSB7CisrICAgICAgICBEZXBlbmRzT2JqZWN0ICpyZXFvYmo7CisrICAgICAgICBQeU9iamVjdCAqcmVxOworKyAgICAgICAgcmVxID0gUHlMaXN0X0dFVF9JVEVNKHNlbGYtPl9yZWNvbW1lbmRzLCBpKTsKKysgICAgICAgIHJlcW9iaiA9IChEZXBlbmRzT2JqZWN0ICopcmVxOworKyAgICAgICAgTElTVF9DTEVBUihyZXFvYmotPnBhY2thZ2VzKTsKKysgICAgICAgIGlmIChQeUxpc3RfQ2hlY2socmVxb2JqLT5wcm92aWRlZGJ5KSkKKysgICAgICAgICAgICBMSVNUX0NMRUFSKHJlcW9iai0+cHJvdmlkZWRieSk7CisrICAgIH0KKyAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHNlbGYtPl91cGdyYWRlcyk7CisgICAgIGZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKKyAgICAgICAgIERlcGVuZHNPYmplY3QgKnVwZ29iajsKK0BAIC0yODM0LDYgKzI5MzcsMzAgQEAgQ2FjaGVfX3JlbG9hZChDYWNoZU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisgICAgICAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICAgICAgLyoKKysgICAgICAgICAgICAgICAgICAgZm9yIHJlYyBpbiBwa2cucmVjb21tZW5kczoKKysgICAgICAgICAgICAgICAgICAgICAgIHJlYy5wYWNrYWdlcy5hcHBlbmQocGtnKQorKyAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVjIG5vdCBpbiByZWNvbW1lbmRzOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29tbWVuZHNbcmVjXSA9IFRydWUKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmptYXBbcmVjLmdldEluaXRBcmdzKCldID0gcmVjCisrICAgICAgICAgICAgICAgICovCisrICAgICAgICAgICAgICAgIGlmIChQeUxpc3RfQ2hlY2socGtnLT5yZWNvbW1lbmRzKSkgeworKyAgICAgICAgICAgICAgICAgICAga2xlbiA9IFB5TGlzdF9HRVRfU0laRShwa2ctPnJlY29tbWVuZHMpOworKyAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayAhPSBrbGVuOyBrKyspIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcmVjID0gUHlMaXN0X0dFVF9JVEVNKHBrZy0+cmVjb21tZW5kcywgayk7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlMaXN0X0FwcGVuZCgoKERlcGVuZHNPYmplY3QgKilyZWMpLT5wYWNrYWdlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKXBrZyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFQeURpY3RfR2V0SXRlbShyZWNvbW1lbmRzLCByZWMpKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKHJlY29tbWVuZHMsIHJlYywgUHlfVHJ1ZSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHJlYywgImdldEluaXRBcmdzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJncykgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKG9iam1hcCwgYXJncywgcmVjKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICBmb3IgdXBnIGluIHBrZy51cGdyYWRlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZy5wYWNrYWdlcy5hcHBlbmQocGtnKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdXBnIG5vdCBpbiB1cGdyYWRlczoKK0BAIC0zMDk3LDYgKzMyMjQsNDcgQEAgQ2FjaGVfbGlua0RlcHMoQ2FjaGVPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorICAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgIH0KKyAKKysgICAgLyogcmVjbmFtZXMgPSB7fSAqLworKyAgICByZWNuYW1lcyA9IFB5RGljdF9OZXcoKTsKKysgICAgLyogZm9yIHJlYyBpbiBzZWxmLl9yZWNvbW1lbmRzOiAqLworKyAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUoc2VsZi0+X3JlY29tbWVuZHMpOworKyAgICBmb3IgKGkgPSAwOyBpICE9IGxlbjsgaSsrKSB7CisrICAgICAgICBQeU9iamVjdCAqcmVjID0gUHlMaXN0X0dFVF9JVEVNKHNlbGYtPl9yZWNvbW1lbmRzLCBpKTsKKysKKysgICAgICAgIC8qIGZvciBuYW1lIGluIHJlYy5nZXRNYXRjaE5hbWVzKCk6ICovCisrICAgICAgICBQeU9iamVjdCAqbmFtZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHJlYywgImdldE1hdGNoTmFtZXMiLCBOVUxMKTsKKysgICAgICAgIFB5T2JqZWN0ICpzZXEgPSBQeVNlcXVlbmNlX0Zhc3QobmFtZXMsICJnZXRNYXRjaE5hbWVzKCkgcmV0dXJuZWQgIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbi1zZXF1ZW5jZSBvYmplY3QiKTsKKysgICAgICAgIGludCBuYW1lc2xlbjsKKysgICAgICAgIGlmICghc2VxKSByZXR1cm4gTlVMTDsKKysgICAgICAgIG5hbWVzbGVuID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9TSVpFKHNlcSk7CisrICAgICAgICBmb3IgKGogPSAwOyBqICE9IG5hbWVzbGVuOyBqKyspIHsKKysgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShzZXEsIGopOworKyAgICAgICAgICAgIAorKyAgICAgICAgICAgIC8qIGxzdCA9IHJlY25hbWVzLmdldChuYW1lKSAqLworKyAgICAgICAgICAgIGxzdCA9IFB5RGljdF9HZXRJdGVtKHJlY25hbWVzLCBuYW1lKTsKKysKKysgICAgICAgICAgICAvKiAKKysgICAgICAgICAgICAgICBpZiBsc3Q6CisrICAgICAgICAgICAgICAgICAgIGxzdC5hcHBlbmQocmVjKQorKyAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgIHJlY25hbWVzW25hbWVdID0gW3JlY10KKysgICAgICAgICAgICAqLworKyAgICAgICAgICAgIGlmIChsc3QpIHsKKysgICAgICAgICAgICAgICAgUHlMaXN0X0FwcGVuZChsc3QsIHJlYyk7CisrICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgbHN0ID0gUHlMaXN0X05ldygxKTsKKysgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHJlYyk7CisrICAgICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsc3QsIDAsIHJlYyk7CisrICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKHJlY25hbWVzLCBuYW1lLCBsc3QpOworKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobHN0KTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICBQeV9ERUNSRUYobmFtZXMpOworKyAgICAgICAgUHlfREVDUkVGKHNlcSk7CisrICAgIH0KKysKKyAgICAgLyogdXBnbmFtZXMgPSB7fSAqLworICAgICB1cGduYW1lcyA9IFB5RGljdF9OZXcoKTsKKyAgICAgLyogZm9yIHVwZyBpbiBzZWxmLl91cGdyYWRlczogKi8KK0BAIC0zMjg2LDYgKzM0NTQsNTYgQEAgQ2FjaGVfbGlua0RlcHMoQ2FjaGVPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAKKysgICAgICAgIC8qIGxzdCA9IHJlY25hbWVzLmdldChwcnYubmFtZSkgKi8KKysgICAgICAgIGxzdCA9IFB5RGljdF9HZXRJdGVtKHJlY25hbWVzLCBwcnYtPm5hbWUpOworKworKyAgICAgICAgLyogaWYgbHN0OiAqLworKyAgICAgICAgaWYgKGxzdCkgeworKyAgICAgICAgICAgIC8qIGZvciByZWMgaW4gbHN0OiAqLworKyAgICAgICAgICAgIGludCByZWNsZW4gPSBQeUxpc3RfR0VUX1NJWkUobHN0KTsKKysgICAgICAgICAgICBmb3IgKGogPSAwOyBqICE9IHJlY2xlbjsgaisrKSB7CisrICAgICAgICAgICAgICAgIERlcGVuZHNPYmplY3QgKnJlYyA9IChEZXBlbmRzT2JqZWN0ICopUHlMaXN0X0dFVF9JVEVNKGxzdCwgaik7CisrICAgICAgICAgICAgICAgIC8qIGlmIHJlYy5tYXRjaGVzKHBydik6ICovCisrICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpyZXQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKChQeU9iamVjdCAqKXJlYywgIm1hdGNoZXMiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTyIsIChQeU9iamVjdCAqKXBydik7CisrICAgICAgICAgICAgICAgIGlmICghcmV0KSByZXR1cm4gTlVMTDsKKysgICAgICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0lzVHJ1ZShyZXQpKSB7CisrICAgICAgICAgICAgICAgICAgICAvKgorKyAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVjLnByb3ZpZGVkYnk6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjLnByb3ZpZGVkYnkuYXBwZW5kKHBydikKKysgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjLnByb3ZpZGVkYnkgPSBbcHJ2XQorKyAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgIGlmIChQeUxpc3RfQ2hlY2socmVjLT5wcm92aWRlZGJ5KSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQocmVjLT5wcm92aWRlZGJ5LCAoUHlPYmplY3QgKilwcnYpOworKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqX2xzdCA9IFB5TGlzdF9OZXcoMSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHBydik7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKF9sc3QsIDAsIChQeU9iamVjdCAqKXBydik7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlYy0+cHJvdmlkZWRieSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmVjLT5wcm92aWRlZGJ5ID0gX2xzdDsKKysgICAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgICAgIC8qCisrICAgICAgICAgICAgICAgICAgICAgICBpZiBwcnYucmVjb21tZW5kZWRieToKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnYucmVjb21tZW5kZWRieS5hcHBlbmQocHJ2KQorKyAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnYucmVjb21tZW5kZWRieSA9IFtwcnZdCisrICAgICAgICAgICAgICAgICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgaWYgKFB5TGlzdF9DaGVjayhwcnYtPnJlY29tbWVuZGVkYnkpKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlMaXN0X0FwcGVuZChwcnYtPnJlY29tbWVuZGVkYnksIChQeU9iamVjdCAqKXJlYyk7CisrICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpfbHN0ID0gUHlMaXN0X05ldygxKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYocmVjKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0oX2xzdCwgMCwgKFB5T2JqZWN0ICopcmVjKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocHJ2LT5yZWNvbW1lbmRlZGJ5KTsKKysgICAgICAgICAgICAgICAgICAgICAgICBwcnYtPnJlY29tbWVuZGVkYnkgPSBfbHN0OworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXQpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKyAgICAgICAgIC8qIGxzdCA9IHVwZ25hbWVzLmdldChwcnYubmFtZSkgKi8KKyAgICAgICAgIGxzdCA9IFB5RGljdF9HZXRJdGVtKHVwZ25hbWVzLCBwcnYtPm5hbWUpOworIAorQEAgLTM4MjEsNiArNDA5NCwyMSBAQCBDYWNoZV9fc2V0c3RhdGVfXyhDYWNoZU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0YXRlKQorICAgICAgICAgfQorIAorICAgICAgICAgLyoKKysgICAgICAgICAgIGZvciByZWMgaW4gcGtnLnJlY29tbWVuZHM6CisrICAgICAgICAgICAgICAgcmVjLnBhY2thZ2VzLmFwcGVuZChwa2cpCisrICAgICAgICAgICAgICAgcmVjb21tZW5kc1tyZWNdID0gVHJ1ZQorKyAgICAgICAgKi8KKysgICAgICAgIGlmIChQeUxpc3RfQ2hlY2socGtnb2JqLT5yZWNvbW1lbmRzKSkgeworKyAgICAgICAgICAgIGpsZW4gPSBQeUxpc3RfR0VUX1NJWkUocGtnb2JqLT5yZWNvbW1lbmRzKTsKKysgICAgICAgICAgICBmb3IgKGogPSAwOyBqICE9IGpsZW47IGorKykgeworKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqcmVjID0gUHlMaXN0X0dFVF9JVEVNKHBrZ29iai0+cmVjb21tZW5kcywgaik7CisrICAgICAgICAgICAgICAgIERlcGVuZHNPYmplY3QgKnJlY29iaiA9IChEZXBlbmRzT2JqZWN0ICopcmVjOworKyAgICAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKHJlY29iai0+cGFja2FnZXMsIHBrZyk7CisrICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKHJlY29tbWVuZHMsIHJlYywgUHlfVHJ1ZSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgLyoKKyAgICAgICAgICAgIGZvciB1cGcgaW4gcGtnLnVwZ3JhZGVzOgorICAgICAgICAgICAgICAgIHVwZy5wYWNrYWdlcy5hcHBlbmQocGtnKQorICAgICAgICAgICAgICAgIHVwZ3JhZGVzW3VwZ10gPSBUcnVlCitkaWZmIC0tZ2l0IGEvc21hcnQvY29tbWFuZHMvcXVlcnkucHkgYi9zbWFydC9jb21tYW5kcy9xdWVyeS5weQoraW5kZXggOTI2NWNkOS4uYjZmNTY5NyAxMDA2NDQKKy0tLSBhL3NtYXJ0L2NvbW1hbmRzL3F1ZXJ5LnB5CisrKysgYi9zbWFydC9jb21tYW5kcy9xdWVyeS5weQorQEAgLTc1MCw2ICs3NTAsMjIgQEAgY2xhc3MgVGV4dE91dHB1dChOdWxsT3V0cHV0KToKKyAgICAgICAgICAgICBuYW1lID0gc3RyKHBydnBrZykKKyAgICAgICAgIHByaW50ICIgICAgICAgIiwgIiVzICglcykiICUgKG5hbWUsIHBydikKKyAKKysgICAgZGVmIHNob3dSZWNvbW1lbmRzKHNlbGYsIHBrZywgcmVjKToKKysgICAgICAgIGlmIHNlbGYuX2ZpcnN0cmVjb21tZW5kczoKKysgICAgICAgICAgICBzZWxmLl9maXJzdHJlY29tbWVuZHMgPSBGYWxzZQorKyAgICAgICAgICAgIHByaW50ICIgIiwgXygiUmVjb21tZW5kczoiKQorKyAgICAgICAgcHJpbnQgIiAgICIsIHJlYworKworKyAgICBkZWYgc2hvd1JlY29tbWVuZHNQcm92aWRlZEJ5KHNlbGYsIHBrZywgcmVxLCBwcnYsIHBydnBrZyk6CisrICAgICAgICBpZiBzZWxmLl9maXJzdHJlY29tbWVuZHNwcm92aWRlZGJ5OgorKyAgICAgICAgICAgIHNlbGYuX2ZpcnN0cmVjb21tZW5kc3Byb3ZpZGVkYnkgPSBGYWxzZQorKyAgICAgICAgICAgIHByaW50ICIgICAgICIsIF8oIlByb3ZpZGVkIEJ5OiIpCisrICAgICAgICBpZiBzZWxmLm9wdHMuaGlkZV92ZXJzaW9uOgorKyAgICAgICAgICAgIG5hbWUgPSBwcnZwa2cubmFtZQorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICBuYW1lID0gc3RyKHBydnBrZykKKysgICAgICAgIHByaW50ICIgICAgICAgIiwgIiVzICglcykiICUgKG5hbWUsIHBydikKKysKKyAgICAgZGVmIHNob3dVcGdyYWRlcyhzZWxmLCBwa2csIHVwZyk6CisgICAgICAgICBpZiBzZWxmLl9maXJzdHVwZ3JhZGVzOgorICAgICAgICAgICAgIHNlbGYuX2ZpcnN0dXBncmFkZXMgPSBGYWxzZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LXJwbTQtZml4ZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcnBtNC1maXhlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDhmZmU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LXJwbTQtZml4ZXMucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorCitUaGlzIHBhdGNoIGNoZWNrcyBmb3IgcnBtNSByZWxhdGVkIGZ1bmN0aW9ucyBpbiBvcmRlciB0byBhbGxvdyBycG00IAordG8gd29yayBjb3JyZWN0bHkuIEN1cnJlbnRseSB0aGUgcnBtNCBhcmNoc2NvcmUgYW5kIGZpbHRlciB3b3JrCitkaWZmZXJlbnRseSBlbm91Z2ggdGhhdCB0aGV5IG5lZWQgdG8gYmUgY2hhbmdlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1Db3JlIFNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBzbWFydC0xLjQuMS9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNtYXJ0LTEuNC4xLm9yaWcvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKKysrKyBzbWFydC0xLjQuMS9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQorQEAgLTMzOCwxMCArMzM4LDE0IEBAIGNsYXNzIFJQTU9ic29sZXRlcyhEZXBlbmRzKToKKyAKKyBfU0NPUkVNQVAgPSB7fQorIGRlZiBnZXRBcmNoU2NvcmUoYXJjaCwgX3NtPV9TQ09SRU1BUCk6CistICAgIGlmIGFyY2ggbm90IGluIF9zbToKKy0gICAgICAgIHNjb3JlID0gcnBtLmFyY2hzY29yZShhcmNoKQorLSAgICAgICAgX3NtW2FyY2hdID0gc2NvcmUKKy0gICAgcmV0dXJuIF9zbS5nZXQoYXJjaCwgMCkKKysgICAgdHJ5OgorKyAgICAgICAgcnBtLnBsYXRmb3Jtc2NvcmUoYXJjaCkKKysgICAgICAgIGlmIGFyY2ggbm90IGluIF9zbToKKysgICAgICAgICAgICBzY29yZSA9IHJwbS5hcmNoc2NvcmUoYXJjaCkKKysgICAgICAgICAgICBfc21bYXJjaF0gPSBzY29yZQorKyAgICAgICAgcmV0dXJuIF9zbS5nZXQoYXJjaCwgMCkKKysgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorKyAgICAgICAgcmV0dXJuIDEKKyAKKyAjIFRPRE86IEVtYmVkIGNvbG9yIGludG8gbmFtZXByb3ZpZGVzIGFuZCBvYnNvbGV0ZXMgcmVsYXRpb25zLgorIF9DT0xPUk1BUCA9IHsibm9hcmNoIjogMCwgIng4Nl82NCI6IDIsICJwcGM2NCI6IDIsICJzMzkweCI6IDIsICJzcGFyYzY0IjogMn0KK0luZGV4OiBzbWFydC0xLjQuMS9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzbWFydC0xLjQuMS5vcmlnL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQorKysrIHNtYXJ0LTEuNC4xL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQorQEAgLTIzNSw2ICsyMzUsMTIgQEAgY2xhc3MgUlBNUGFja2FnZU1hbmFnZXIoUGFja2FnZU1hbmFnZXIpOgorICAgICAgICAgaWYgc3lzY29uZi5nZXQoInJwbS1vcmRlciIpOgorICAgICAgICAgICAgIHRzLm9yZGVyKCkKKyAgICAgICAgIHByb2JmaWx0ZXIgPSBycG0uUlBNUFJPQl9GSUxURVJfT0xEUEFDS0FHRQorKyAgICAgICAgdHJ5OgorKyAgICAgICAgICAgICMgVGVzdCBmb3IgUlBNNSBmdW5jdGlvbgorKyAgICAgICAgICAgIHJwbS5wbGF0Zm9ybXNjb3JlKCIiKQorKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorKyAgICAgICAgICAgIHByb2JmaWx0ZXIgfD0gcnBtLlJQTVBST0JfRklMVEVSX0lHTk9SRUFSQ0gKKysKKyAgICAgICAgIGlmIGZvcmNlIG9yIHJlaW5zdGFsbDoKKyAgICAgICAgICAgICBwcm9iZmlsdGVyIHw9IHJwbS5SUE1QUk9CX0ZJTFRFUl9SRVBMQUNFUEtHCisgICAgICAgICAgICAgcHJvYmZpbHRlciB8PSBycG0uUlBNUFJPQl9GSUxURVJfUkVQTEFDRU9MREZJTEVTCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtc2V0LW5vcHJvZ3Jlc3MtZm9yLXB5Y3VybC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1zZXQtbm9wcm9ncmVzcy1mb3ItcHljdXJsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ODU5OTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtc2V0LW5vcHJvZ3Jlc3MtZm9yLXB5Y3VybC5wYXRjaApAQCAtMCwwICsxLDIwIEBACitTZXQgTk9QUk9HUkVTUyBmb3IgcHljdXJsIGp1c3QgYXMgc2FtZSBhcyBkZWZhdWx0IG9wZXJhdGlvbiBpbiBweWN1cmwgbW9kdWxlIGl0c2VsZi4KK0lmIHNldCBOT1BST0dSRVNTIHdpdGggMCBmb3IgcHljdXJsLCBpdCBjYXVzZXMgZGVhZCBsb2NrIGlzc3VlIG9mIFB5dGhvbiBHSUwgd2hlbgorY2FsbCBzbWFydCBsaWJyYXJ5IGJ5IHB5dGhvbiBndWkganVzdCBsaWtlIHB5Z3RrLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KK2RpZmYgLXUgc21hcnQtMS40LjEvc21hcnQub3JpZy9mZXRjaGVyLnB5IHNtYXJ0LTEuNC4xL3NtYXJ0L2ZldGNoZXIucHkKKy0tLSBzbWFydC0xLjQuMS9zbWFydC5vcmlnL2ZldGNoZXIucHkJMjAxNC0wNy0xNSAxNjo0MjoxOS4yNDA0MzcwODAgKzA4MDAKKysrKyBzbWFydC0xLjQuMS9zbWFydC9mZXRjaGVyLnB5CTIwMTQtMDctMTUgMTc6MDI6MzcuODEyNDcwMjg5ICswODAwCitAQCAtMTcyMCw3ICsxNzIwLDcgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuc2V0b3B0KHB5Y3VybC5PUFRfRklMRVRJTUUsIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLnNldG9wdChweWN1cmwuTE9XX1NQRUVEX0xJTUlULCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5zZXRvcHQocHljdXJsLkxPV19TUEVFRF9USU1FLCBTT0NLRVRUSU1FT1VUKQorLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5zZXRvcHQocHljdXJsLk5PUFJPR1JFU1MsIDApCisrICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLnNldG9wdChweWN1cmwuTk9QUk9HUkVTUywgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuc2V0b3B0KHB5Y3VybC5QUk9HUkVTU0ZVTkNUSU9OLCBwcm9ncmVzcykKKyAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuc2V0b3B0KHB5Y3VybC5XUklURURBVEEsIGxvY2FsKQorICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5zZXRvcHQocHljdXJsLkZPTExPV0xPQ0FUSU9OLCAxKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0cG0tcnBtNS1ub2RpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydHBtLXJwbTUtbm9kaWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVmYjI5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydHBtLXJwbTUtbm9kaWcucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorUlBNNSBoYXMgcmVtb3ZlZCBzdXBwb3J0IGZvciBSUE1WU0ZfTk9TSUdOQVRVUkVTCisKK1BhdGNoIHNtYXJ0IHRvIG5vIGxvbmdlciB1c2UgdGhpcyBmbGFnCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weSBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5CistLS0gYS9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQorKysrIGIvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKK0BAIC02MywxMSArNjMsMTEgQEAgZGVmIGdldFRTKG5ldz1GYWxzZSk6CisgICAgICAgICBpZiBzeXNjb25mLmdldCgicnBtLWRicGF0aCIpOgorICAgICAgICAgICAgIHJwbS5hZGRNYWNybygnX2RicGF0aCcsICIvIiArIHN5c2NvbmYuZ2V0KCJycG0tZGJwYXRoIikpCisgICAgICAgICBnZXRUUy50cyA9IHJwbS50cyhnZXRUUy5yb290KQorLSAgICAgICAgaWYgbm90IHN5c2NvbmYuZ2V0KCJycG0tY2hlY2stc2lnbmF0dXJlcyIsIEZhbHNlKToKKy0gICAgICAgICAgICBpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJyk6CistICAgICAgICAgICAgICAgIGdldFRTLnRzLnNldFZTRmxhZ3MocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTKQorLSAgICAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yLCBfKCJycG0gcmVxdWlyZXMgY2hlY2tpbmcgc2lnbmF0dXJlcyIpCisrICAgICAgICAjaWYgbm90IHN5c2NvbmYuZ2V0KCJycG0tY2hlY2stc2lnbmF0dXJlcyIsIEZhbHNlKToKKysgICAgICAgICMgICAgaWYgaGFzYXR0cihycG0sICdfUlBNVlNGX05PU0lHTkFUVVJFUycpOgorKyAgICAgICAgIyAgICAgICAgZ2V0VFMudHMuc2V0VlNGbGFncyhycG0uX1JQTVZTRl9OT1NJR05BVFVSRVMpCisrICAgICAgICAjICAgIGVsc2U6CisrICAgICAgICAjICAgICAgICByYWlzZSBFcnJvciwgXygicnBtIHJlcXVpcmVzIGNoZWNraW5nIHNpZ25hdHVyZXMiKQorICAgICAgICAgcnBtX2RicGF0aCA9IHN5c2NvbmYuZ2V0KCJycG0tZGJwYXRoIiwgInZhci9saWIvcnBtIikKKyAgICAgICAgIGRiZGlyID0gcnBtX2pvaW5fZGJwYXRoKGdldFRTLnJvb3QsIHJwbV9kYnBhdGgpCisgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihkYmRpcik6CitAQCAtODksMTEgKzg5LDExIEBAIGRlZiBnZXRUUyhuZXc9RmFsc2UpOgorICAgICAgICAgaWYgc3lzY29uZi5nZXQoInJwbS1kYnBhdGgiKToKKyAgICAgICAgICAgICBycG0uYWRkTWFjcm8oJ19kYnBhdGgnLCAiLyIgKyBzeXNjb25mLmdldCgicnBtLWRicGF0aCIpKQorICAgICAgICAgdHMgPSBycG0udHMoZ2V0VFMucm9vdCkKKy0gICAgICAgIGlmIG5vdCBzeXNjb25mLmdldCgicnBtLWNoZWNrLXNpZ25hdHVyZXMiLCBGYWxzZSk6CistICAgICAgICAgICAgaWYgaGFzYXR0cihycG0sICdfUlBNVlNGX05PU0lHTkFUVVJFUycpOgorLSAgICAgICAgICAgICAgICB0cy5zZXRWU0ZsYWdzKHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFUykKKy0gICAgICAgICAgICBlbHNlOgorLSAgICAgICAgICAgICAgICByYWlzZSBFcnJvciwgXygicnBtIHJlcXVpcmVzIGNoZWNraW5nIHNpZ25hdHVyZXMiKQorKyAgICAgICAgI2lmIG5vdCBzeXNjb25mLmdldCgicnBtLWNoZWNrLXNpZ25hdHVyZXMiLCBGYWxzZSk6CisrICAgICAgICAjICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKToKKysgICAgICAgICMgICAgICAgIHRzLnNldFZTRmxhZ3MocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTKQorKyAgICAgICAgIyAgICBlbHNlOgorKyAgICAgICAgIyAgICAgICAgcmFpc2UgRXJyb3IsIF8oInJwbSByZXF1aXJlcyBjaGVja2luZyBzaWduYXR1cmVzIikKKyAgICAgICAgIHJldHVybiB0cworICAgICBlbHNlOgorICAgICAgICAgcmV0dXJuIGdldFRTLnRzCitkaWZmIC0tZ2l0IGEvc21hcnQvcGx1Z2lucy95dW1jaGFubmVsc3luYy5weSBiL3NtYXJ0L3BsdWdpbnMveXVtY2hhbm5lbHN5bmMucHkKKy0tLSBhL3NtYXJ0L3BsdWdpbnMveXVtY2hhbm5lbHN5bmMucHkKKysrKyBiL3NtYXJ0L3BsdWdpbnMveXVtY2hhbm5lbHN5bmMucHkKK0BAIC01Niw4ICs1Niw4IEBAIGRlZiBfZ2V0cmVsZWFzZXZlcigpOgorIAorICAgICBycG1yb290ID0gc3lzY29uZi5nZXQoInJwbS1yb290IiwgIi8iKQorICAgICB0cyA9IHJwbVV0aWxzLnRyYW5zYWN0aW9uLmluaXRSZWFkT25seVRyYW5zYWN0aW9uKHJvb3Q9cnBtcm9vdCkKKy0gICAgaWYgaGFzYXR0cihycG0sICdfUlBNVlNGX05PU0lHTkFUVVJFUycpIGFuZCBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9ESUdFU1RTJyk6CistICAgICAgICB0cy5wdXNoVlNGbGFncyh+KHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFU3xycG0uX1JQTVZTRl9OT0RJR0VTVFMpKQorKyAgICAjaWYgaGFzYXR0cihycG0sICdfUlBNVlNGX05PU0lHTkFUVVJFUycpIGFuZCBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9ESUdFU1RTJyk6CisrICAgICMgICAgdHMucHVzaFZTRmxhZ3MofihycG0uX1JQTVZTRl9OT1NJR05BVFVSRVN8cnBtLl9SUE1WU0ZfTk9ESUdFU1RTKSkKKyAgICAgcmVsZWFzZXZlciA9IE5vbmUKKyAgICAgIyBIQUNLOiB3ZSdyZSBoYXJkLWNvZGluZyB0aGUgbW9zdCB1c2VkIGRpc3Ryb3MsIHdpbGwgYWRkIG1vcmUgaWYgbmVlZGVkCisgICAgIGlkeCA9IHRzLmRiTWF0Y2goJ3Byb3ZpZGVzJywgJ2ZlZG9yYS1yZWxlYXNlJykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG1fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOTc0YjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG1fZ2l0LmJiCkBAIC0wLDAgKzEsMTM5IEBACitTVU1NQVJZID0gIlRoZSBTbWFydCBQYWNrYWdlIE1hbmFnZXIiCitERVNDUklQVElPTiA9ICJUaGUgU21hcnQgUGFja2FnZSBNYW5hZ2VyIHByb2plY3QgaGFzIHRoZSBhbWJpdGlvdXMgb2JqZWN0aXZlIG9mIGNyZWF0aW5nIFwKK3NtYXJ0IGFuZCBwb3J0YWJsZSBhbGdvcml0aG1zIGZvciBzb2x2aW5nIGFkZXF1YXRlbHkgdGhlIHByb2JsZW0gb2YgbWFuYWdpbmcgc29mdHdhcmUgXAordXBncmFkZXMgYW5kIGluc3RhbGxhdGlvbi4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9sYWJpeC5vcmcvc21hcnQvIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MzkzYTVjYTQ0NWY2OTY1ODczZWNhMDI1OWExN2Y4MzMiCisKK0RFUEVORFMgPSAicHl0aG9uIHJwbSBnZXR0ZXh0LW5hdGl2ZSBweXRob24tcnBtIgorU1JDTkFNRSA9ICJzbWFydCIKKworU1JDX1VSSSA9ICJcCisgICAgICAgICAgZ2l0Oi8vZ2l0aHViLmNvbS9zbWFydHBtL3NtYXJ0LmdpdCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0cG0tcnBtNS1ub2RpZy5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LXJlY29tbWVuZHMucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1pbXByb3ZlLWVycm9yLXJlcG9ydGluZy5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LWNoYW5uZWxzZGlyLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtYXR0ZW1wdC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LWF0dGVtcHQtZml4LnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtcnBtNC1maXhlcy5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LWFkZC1mb3ItcnBtLWlnbm9yZXNpemUtY2hlY2sucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1hbHJlYWR5LWluc3RhbGxlZC1tZXNzYWdlLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtc2V0LW5vcHJvZ3Jlc3MtZm9yLXB5Y3VybC5wYXRjaCBcCisgICAgICAgICAiCisKK1NSQ1JFViA9ICI0MDdhN2VjYTc2NjQzMTI1N2RjZDFkYTE1MTc1Y2MzNmExYmIyMmQwIgorUFYgPSAiMS41K2dpdCR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCisjIE9wdGlvbnMgLSBycG0sIHF0NCwgZ3RrCitQQUNLQUdFQ09ORklHID8/PSAicnBtIgorCitSUE1fUkRFUCA9ICIke1BOfS1iYWNrZW5kLXJwbSIKK1FUX1JERVAgPSAiJHtQTn0taW50ZXJmYWNlLXF0NCIKK0dUS19SREVQID0gIiR7UE59LWludGVyZmFjZS1ndGsiCisKK1JQTV9SREVQX2NsYXNzLW5hdGl2ZSA9ICIiCitRVF9SREVQX2NsYXNzLW5hdGl2ZSA9ICIiCitHVEtfUkRFUF9jbGFzcy1uYXRpdmUgPSAiIgorCitSUE1fUkRFUF9jbGFzcy1uYXRpdmVzZGsgPSAiIgorUVRfUkRFUF9jbGFzcy1uYXRpdmVzZGsgPSAiIgorR1RLX1JERVBfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworUEFDS0FHRUNPTkZJR1tycG1dID0gIiwscnBtLCR7UlBNX1JERVB9IgorUEFDS0FHRUNPTkZJR1txdDRdID0gIiwscXQ0LXgxMSwke1FUX1JERVB9IgorUEFDS0FHRUNPTkZJR1tndGtdID0gIiwsZ3RrKywke0dUS19SREVQfSIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAjIFdlIGRvbid0IHN1cHBvcnQgdGhlIGZvbGxvd2luZyBpdGVtcworICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2JhY2tlbmRzL3NsYWNrCisgICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvYmFja2VuZHMvYXJjaAorICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2ludGVyZmFjZXMvcXQKKworICAgIyBUZW1wb3JhcnksIGRlYmlhbiBzdXBwb3J0IGluIE9FIGlzIG1pc3NpbmcgdGhlIHB5dGhvbiBtb2R1bGUKKyAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMvYXB0Y2hhbm5lbHN5bmMucHkqCisgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL2RlYmRpci5weSoKKyAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9iYWNrZW5kcy9kZWIKKworICAgIyBEaXNhYmxlIGF1dG9tYXRpYyBjaGFubmVsIGRldGVjdGlvbgorICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy9kZXRlY3RzeXMucHkqCisKKyAgICMgRGlzYWJsZSBsYW5kc2NhcGUgc3VwcG9ydAorICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy9sYW5kc2NhcGUucHkqCisKKyAgICMgRGlzYWJsZSB1cnBtaSBjaGFubmVsIHN1cHBvcnQKKyAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMvdXJwbWljaGFubmVsc3luYy5weSoKKworICAgIyBEaXNhYmxlIHl1bSBjaGFubmVsIHN1cHBvcnQKKyAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMveXVtY2hhbm5lbHN5bmMucHkqCisKKyAgICMgRGlzYWJsZSB6eXBwZXIgY2hhbm5lbCBzdXBwb3J0CisgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL3p5cHBjaGFubmVsc3luYy5weSoKKworICAgaWYgWyAteiAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncnBtJywgJ3JwbScsICcnLCBkKX0iIF07IHRoZW4KKyAgICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMvcnBtZGlyLnB5KgorICAgICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2JhY2tlbmRzL3JwbQorICAgZmkKKworICAgaWYgWyAteiAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncXQ0JywgJ3F0NCcsICcnLCBkKX0iIF07IHRoZW4KKyAgICAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9pbnRlcmZhY2VzL3F0NAorICAgZmkKKworICAgaWYgWyAteiAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ3RrKycsICdndGsnLCAnJywgZCl9IiBdOyB0aGVuCisgICAgICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9ndGsKKyAgIGZpCit9CisKK2FkZF9uYXRpdmVfd3JhcHBlcigpIHsKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vc21hcnQgXAorCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworICAgICAgICBzZWQgLWkgLWUgJ3N8XiMhLiovdXNyL2Jpbi9lbnYgcHl0aG9ufCMhIC91c3IvYmluL2VudiBuYXRpdmVweXRob258JyAke0R9JHtiaW5kaXJ9L3NtYXJ0CisgICAgICAgIGFkZF9uYXRpdmVfd3JhcHBlcgorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisgICAgICAgIGFkZF9uYXRpdmVfd3JhcHBlcgorfQorCitQQUNLQUdFUyA9ICIke1BOfS1kZXYgJHtQTn0tZGJnICR7UE59LWRvYyBzbWFydHBtIFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3JwbScsICcke1BOfS1iYWNrZW5kLXJwbScsICcnLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncXQ0JywgJyR7UE59LWludGVyZmFjZS1xdDQnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2d0aycsICcke1BOfS1pbnRlcmZhY2UtZ3RrJywgJycsIGQpfSBcCisgICAgICAgICAgICAke1BOfS1pbnRlcmZhY2UtaW1hZ2VzICR7UE59IgorCitSREVQRU5EU19zbWFydHBtID0gIiR7UE59IgorCitSREVQRU5EU18ke1BOfSArPSAiJHtQTn0tYmFja2VuZC1ycG0gcHl0aG9uLWNvZGVjcyBweXRob24tdGV4dHV0aWxzIHB5dGhvbi14bWwgcHl0aG9uLWZjbnRsIFwKKyAgICAgICAgICAgICAgICAgICBweXRob24tcGlja2xlIHB5dGhvbi1jcnlwdCBweXRob24tY29tcHJlc3Npb24gcHl0aG9uLXNoZWxsIFwKKyAgICAgICAgICAgICAgICAgICBweXRob24tcmVzb3VyY2UgcHl0aG9uLW5ldGNsaWVudCBweXRob24tdGhyZWFkaW5nIHB5dGhvbi11bml4YWRtaW4gcHl0aG9uLXBwcmludCIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK1JERVBFTkRTXyR7UE59LWJhY2tlbmQtcnBtID0gInB5dGhvbi1ycG0iCisKK1JERVBFTkRTXyR7UE59LWludGVyZmFjZS1xdDQgPSAicXQ0LXgxMSAke1BOfS1pbnRlcmZhY2UtaW1hZ2VzIgorUkRFUEVORFNfJHtQTn0taW50ZXJmYWNlLWd0ayA9ICJndGsrICR7UE59LWludGVyZmFjZS1pbWFnZXMiCisKK0ZJTEVTX3NtYXJ0cG0gPSAiJHtiaW5kaXJ9L3NtYXJ0IgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvYmFja2VuZHMvcnBtLy5kZWJ1ZyIKKworRklMRVNfJHtQTn0tYmFja2VuZC1ycG0gPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9iYWNrZW5kcy9ycG0iCisKK0ZJTEVTXyR7UE59LWludGVyZmFjZS1xdDQgPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9pbnRlcmZhY2VzL3F0NCIKK0ZJTEVTXyR7UE59LWludGVyZmFjZS1ndGsgPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9pbnRlcmZhY2VzL2d0ayIKK0ZJTEVTXyR7UE59LWludGVyZmFjZS1pbWFnZXMgPSAiJHtkYXRhZGlyfS8ke2Jhc2VsaWJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9pbnRlcmZhY2VzL2ltYWdlcyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtbWFwXzAuOS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbW1hcF8wLjkuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjU4YmU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbW1hcF8wLjkuMC5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIlB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBhIHNsaWRpbmcgd2luZG93IG1lbW9yeSBtYXAgbWFuYWdlciIKK0RFU0NSSVBUSU9OID0gIkEgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgYSBzbGlkaW5nIG1lbW9yeSBtYXAgdG8gXAoraGVscCB1bmlmeWluZyBtZW1vcnkgbWFwcGVkIGFjY2VzcyBvbiAzMiBhbmQgNjQgYml0IHN5c3RlbXMgYW5kIHRvIGhlbHAgXAorbWFuYWdpbmcgcmVzb3VyY2VzIG1vcmUgZWZmaWNpZW50bHkuIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdGh1Yi5jb20vZ2l0cHl0aG9uLWRldmVsb3BlcnMvR2l0UHl0aG9uIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1BLRy1JTkZPO2JlZ2lubGluZT04O2VuZGxpbmU9ODttZDU9ZTkxMGIzNWIwZWY0ZTFmNjY1YjlhNzVkNmFmYjc3MDkiCisKK1NSQ19VUkkgPSAiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2Uvcy9zbW1hcC9zbW1hcC0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiZDc5MzJkNWFjZTIwNmJmNGFlMTUxOThjZjM2ZmI2YWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGUyYjYyYjQ5N2JkNWYwYWZlYmMwMDJlZGE0ZDkwZGY5ZDIwOWMzMGVmMjU3ZTg2NzNjOTBhNmI1YzExOWQ2MiIKKworUyA9ICIke1dPUktESVJ9L3NtbWFwLSR7UFZ9IgorCitpbmhlcml0IHNldHVwdG9vbHMKKworUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi1jb2RlY3MgcHl0aG9uLW1tYXAgcHl0aG9uLWxhbmciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMThhYjhlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi5pbmMKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJUaGUgUHl0aG9uIFByb2dyYW1taW5nIExhbmd1YWdlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5weXRob24ub3JnIgorTElDRU5TRSA9ICJQU0Z2MiIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorIyBidW1wIHRoaXMgb24gZXZlcnkgY2hhbmdlIGluIGNvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTIuNy5weQorSU5DX1BSID0gInIxIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1kZmYzZDAwZjA0OTU0NTg2Mjk5MmQyZDA5NzgzMWExMyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi8ke1BWfS9QeXRob24tJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzhkNTMwZjdlZmMzNzNkNjRhOGZiMTYzN2UzYmFhYTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTBkMjdlMTRlYTdlMDM1NzAwMjY4NTBlMmU1MGJhNzFhZDIwYjdlYjMxMDM1YWFkYTFjZjNkZWY4ZjhkNDkxNiIKKworUFlUSE9OX01BSk1JTiA9ICIyLjciCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1BZVEhPTkxTQk9QVFMgPSAiLS13aXRoLXdjdHlwZS1mdW5jdGlvbnMiCitQWVRIT05MU0JPUFRTX2xpbnV4c3RkYmFzZSA9ICJhY19jdl9zaXplb2Zfb2ZmX3Q9OCIKKworRVhUUkFfT0VDT05GID0gIlwKKyAgLS13aXRoLXRocmVhZHMgXAorICAtLXdpdGgtcHltYWxsb2MgXAorICAtLXdpdGhvdXQtY3h4LW1haW4gXAorICAtLXdpdGgtc2lnbmFsLW1vZHVsZSBcCisgIC0tZW5hYmxlLXNoYXJlZCBcCisgIC0tZW5hYmxlLWlwdjY9JHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgJ3llcycsICdubycsIGQpfSBcCisgIGFjX2N2X2hlYWRlcl9ibHVldG9vdGhfYmx1ZXRvb3RoX2g9bm8gYWNfY3ZfaGVhZGVyX2JsdWV0b290aF9oPW5vIFwKKyAgJHtQWVRIT05MU0JPUFRTfSBcCisiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzAxLXVzZS1wcm9wZXItdG9vbHMtZm9yLWNyb3NzLWJ1aWxkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wMS11c2UtcHJvcGVyLXRvb2xzLWZvci1jcm9zcy1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjU3Y2E2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wMS11c2UtcHJvcGVyLXRvb2xzLWZvci1jcm9zcy1idWlsZC5wYXRjaApAQCAtMCwwICsxLDk3IEBACitXZSBuZWVkIHRvIGVuc3VyZSBvdXIgaG9zdCB0b29scyBnZXQgcnVuIGR1cmluZyBidWlsZCwgbm90IHRoZSBmcmVzaGx5CitidWlsdCBjcm9zcy10b29scyAodGhpcyB3aWxsIG5vdCB3b3JrKSwgc28gd2UgaW50cm9kdWNlIEhPU1RQWVRIT04gYW5kIEhPU1RQR0VOLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAdmFuaWxsZS1tZWRpYS5kZT4KK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCitSZWJhc2VkIGZvciBweXRob24tMi43LjkKK1NpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01ha2VmaWxlLnByZS5pbgorKysrIFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KK0BAIC0yMzQsNiArMjM0LDcgQEAgTElCRkZJX0lOQ0xVREVESVI9CUBMSUJGRklfSU5DTFVERURJUkAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMgUGFyc2VyCisgUEdFTj0JCVBhcnNlci9wZ2VuJChFWEUpCisrSE9TVFBHRU49CSQoUEdFTikkKEVYRSkKKyAKKyBQU1JDUz0JCVwKKyAJCVBhcnNlci9hY2NlbGVyLmMgXAorQEAgLTQ0NSw3ICs0NDYsNyBAQCAkKEJVSUxEUFlUSE9OKToJTW9kdWxlcy9weXRob24ubyAkKExJQlJBCisgCQkJJChCTERMSUJSQVJZKSAkKExJQlMpICQoTU9ETElCUykgJChTWVNMSUJTKSAkKExETEFTVCkKKyAKKyBwbGF0Zm9ybTogJChCVUlMRFBZVEhPTikgcHlidWlsZGRpci50eHQKKy0JJChSVU5TSEFSRUQpICQoUFlUSE9OX0ZPUl9CVUlMRCkgLWMgJ2ltcG9ydCBzeXMgOyBmcm9tIHN5c2NvbmZpZyBpbXBvcnQgZ2V0X3BsYXRmb3JtIDsgcHJpbnQgZ2V0X3BsYXRmb3JtKCkrIi0iK3N5cy52ZXJzaW9uWzA6M10nID5wbGF0Zm9ybQorKwkkKFJVTlNIQVJFRCkgJChQWVRIT05fRk9SX0JVSUxEKSAtYyAnaW1wb3J0IHN5cyA7IGZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGdldF9wbGF0Zm9ybSA7IHByaW50IGdldF9wbGF0Zm9ybSgpKyItIitzeXMudmVyc2lvblswOjNdJyA+cGxhdGZvcm0KKyAKKyAjIENyZWF0ZSBidWlsZCBkaXJlY3RvcnkgYW5kIGdlbmVyYXRlIHRoZSBzeXNjb25maWcgYnVpbGQtdGltZSBkYXRhIHRoZXJlLgorICMgcHlidWlsZGRpci50eHQgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGJ1aWxkIGRpciBhbmQgaXMgdXNlZCBmb3IKK0BAIC02MTEsNyArNjEyLDcgQEAgTW9kdWxlcy9wd2Rtb2R1bGUubzogJChzcmNkaXIpL01vZHVsZXMvcAorICQoR1JBTU1BUl9IKTogJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKQorIAkJQCQoTUtESVJfUCkgSW5jbHVkZQorIAkJJChNQUtFKSAkKFBHRU4pCistCQkkKFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQorKwkJJChIT1NUUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpCisgJChHUkFNTUFSX0MpOiAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKQorIAkJJChNQUtFKSAkKEdSQU1NQVJfSCkKKyAJCXRvdWNoICQoR1JBTU1BUl9DKQorQEAgLTEwNDMsMjcgKzEwNDQsMjcgQEAgbGliaW5zdGFsbDoJYnVpbGRfYWxsICQoc3JjZGlyKS9MaWIvJChQTAorIAkJCSQoREVTVERJUikkKExJQkRFU1QpL2Rpc3R1dGlscy90ZXN0cyA7IFwKKyAJZmkKKyAJUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLVdpIC10dCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKysJCSQoSE9TVFBZVEhPTikgLVdpIC10dCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKyAJCS1kICQoTElCREVTVCkgLWYgXAorIAkJLXggJ2JhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8bGliMnRvMy90ZXN0cy9kYXRhJyBcCisgCQkkKERFU1RESVIpJChMSUJERVNUKQorIAlQWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1XaSAtdHQgLU8gJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisrCQkkKEhPU1RQWVRIT04pIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisgCQktZCAkKExJQkRFU1QpIC1mIFwKKyAJCS14ICdiYWRfY29kaW5nfGJhZHN5bnRheHxzaXRlLXBhY2thZ2VzfGxpYjJ0bzMvdGVzdHMvZGF0YScgXAorIAkJJChERVNURElSKSQoTElCREVTVCkKKyAJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1XaSAtdCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKysJCSQoSE9TVFBZVEhPTikgLVdpIC10dCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKyAJCS1kICQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcyAtZiBcCisgCQkteCBiYWRzeW50YXggJChERVNURElSKSQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcworIAktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtV2kgLXQgLU8gJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisrCQkkKEhPU1RQWVRIT04pIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisgCQktZCAkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMgLWYgXAorIAkJLXggYmFkc3ludGF4ICQoREVTVERJUikkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMKKyAJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLW0gbGliMnRvMy5wZ2VuMi5kcml2ZXIgJChERVNURElSKSQoTElCREVTVCkvbGliMnRvMy9HcmFtbWFyLnR4dAorKwkJJChIT1NUUFlUSE9OKSAtbSBsaWIydG8zLnBnZW4yLmRyaXZlciAkKERFU1RESVIpJChMSUJERVNUKS9saWIydG8zL0dyYW1tYXIudHh0CisgCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvUGF0dGVybkdyYW1tYXIudHh0CisrCQkkKEhPU1RQWVRIT04pIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvUGF0dGVybkdyYW1tYXIudHh0CisgCisgIyBDcmVhdGUgdGhlIFBMQVRESVIgc291cmNlIGRpcmVjdG9yeSwgaWYgb25lIHdhc24ndCBkaXN0cmlidXRlZC4uCisgJChzcmNkaXIpL0xpYi8kKFBMQVRESVIpOgorSW5kZXg6IFB5dGhvbi0yLjcuOS9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL3NldHVwLnB5CisrKysgUHl0aG9uLTIuNy45L3NldHVwLnB5CitAQCAtMzM0LDYgKzMzNCw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICBzZWxmLmZhaWxlZC5hcHBlbmQoZXh0Lm5hbWUpCisgICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnKioqIFdBUk5JTkc6IHJlbmFtaW5nICIlcyIgc2luY2UgaW1wb3J0aW5nIGl0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBmYWlsZWQ6ICVzJyAlIChleHQubmFtZSwgd2h5KSwgbGV2ZWw9MykKKysgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICBhc3NlcnQgbm90IHNlbGYuaW5wbGFjZQorICAgICAgICAgICAgIGJhc2VuYW1lLCB0YWlsID0gb3MucGF0aC5zcGxpdGV4dChleHRfZmlsZW5hbWUpCisgICAgICAgICAgICAgbmV3bmFtZSA9IGJhc2VuYW1lICsgIl9mYWlsZWQiICsgdGFpbAorQEAgLTU1OCw2ICs1NTksOSBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgCisgICAgICAgICAjIFhYWCBPbWl0dGVkIG1vZHVsZXM6IGdsLCBwdXJlLCBkbCwgU0dJLXNwZWNpZmljIG1vZHVsZXMKKyAKKysgICAgICAgIGxpYl9kaXJzID0gWyBvcy5nZXRlbnYoIlNUQUdJTkdfTElCRElSIiksICBvcy5nZXRlbnYoIlNUQUdJTkdfQkFTRUxJQkRJUiIpIF0KKysgICAgICAgIGluY19kaXJzID0gWyBvcy5nZXRlbnYoIlNUQUdJTkdfSU5DRElSIikgXQorKworICAgICAgICAgIworICAgICAgICAgIyBUaGUgZm9sbG93aW5nIG1vZHVsZXMgYXJlIGFsbCBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhbmQgY29tcGlsZQorICAgICAgICAgIyBvbiBwcmV0dHkgbXVjaCBhbnkgUE9TSVhpc2ggcGxhdGZvcm0uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MGNlYjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitXZSBuZWVkIHRvIHN1cHBseSBTVEFHSU5HX0lOQ0RJUiBoZXJlLCBvdGhlcndpc2UgdGhlIFRrIGhlYWRlcnMKK3dpbGwgbm90IGJlIGZvdW5kLgorCitTaWduZWQtb2ZmLWJ5OiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAdmFuaWxsZS5kZT4KK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCitSZWJhc2VkIGZvciBweXRob24tMi43LjkKKworZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKK2luZGV4IDhmZTFmYjguLjY3ZWRhNzQgMTAwNjQ0CistLS0gYS9zZXR1cC5weQorKysrIGIvc2V0dXAucHkKK0BAIC0xODkyLDcgKzE4OTIsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgICAgIGRvdHZlcnNpb24gPSBkb3R2ZXJzaW9uWzotMV0gKyAnLicgKyBkb3R2ZXJzaW9uWy0xXQorICAgICAgICAgICAgIHRjbF9pbmNsdWRlX3N1YiA9IFtdCisgICAgICAgICAgICAgdGtfaW5jbHVkZV9zdWIgPSBbXQorLSAgICAgICAgICAgIGZvciBkaXIgaW4gaW5jX2RpcnM6CisrICAgICAgICAgICAgZm9yIGRpciBpbiBbb3MuZ2V0ZW52KCJTVEFHSU5HX0lOQ0RJUiIpXToKKyAgICAgICAgICAgICAgICAgdGNsX2luY2x1ZGVfc3ViICs9IFtkaXIgKyBvcy5zZXAgKyAidGNsIiArIGRvdHZlcnNpb25dCisgICAgICAgICAgICAgICAgIHRrX2luY2x1ZGVfc3ViICs9IFtkaXIgKyBvcy5zZXAgKyAidGsiICsgZG90dmVyc2lvbl0KKyAgICAgICAgICAgICB0a19pbmNsdWRlX3N1YiArPSB0Y2xfaW5jbHVkZV9zdWIKK0BAIC0xOTExLDIyICsxOTExLDYgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgIGlmIGRpciBub3QgaW4gaW5jbHVkZV9kaXJzOgorICAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKGRpcikKKyAKKy0gICAgICAgICMgQ2hlY2sgZm9yIHZhcmlvdXMgcGxhdGZvcm0tc3BlY2lmaWMgZGlyZWN0b3JpZXMKKy0gICAgICAgIGlmIGhvc3RfcGxhdGZvcm0gPT0gJ3N1bm9zNSc6CistICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZCgnL3Vzci9vcGVud2luL2luY2x1ZGUnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9vcGVud2luL2xpYicpCistICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKCcvdXNyL1gxMVI2L2luY2x1ZGUnKToKKy0gICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI2L2luY2x1ZGUnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNi9saWI2NCcpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI2L2xpYicpCistICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKCcvdXNyL1gxMVI1L2luY2x1ZGUnKToKKy0gICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI1L2luY2x1ZGUnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNS9saWInKQorLSAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAjIEFzc3VtZSBkZWZhdWx0IGxvY2F0aW9uIGZvciBYMTEKKy0gICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKCcvdXNyL1gxMS9pbmNsdWRlJykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3IvWDExL2xpYicpCistCisgICAgICAgICAjIElmIEN5Z3dpbiwgdGhlbiB2ZXJpZnkgdGhhdCBYIGlzIGluc3RhbGxlZCBiZWZvcmUgcHJvY2VlZGluZworICAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnY3lnd2luJzoKKyAgICAgICAgICAgICB4MTFfaW5jID0gZmluZF9maWxlKCdYMTEvWGxpYi5oJywgW10sIGluY2x1ZGVfZGlycykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDUtZW5hYmxlLWN0eXBlcy1jcm9zcy1idWlsZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDUtZW5hYmxlLWN0eXBlcy1jcm9zcy1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2M4NzQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wNS1lbmFibGUtY3R5cGVzLWNyb3NzLWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1JlYmFzZWQgZm9yIHB5dGhvbiAyLjcuOQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCisjIENUeXBlcyBuZWVkIHRvIGtub3cgdGhlIGFjdHVhbCBob3N0IHdlIGFyZSBidWlsZGluZyBvbi4KKyMgU2lnbmVkLU9mZjogTWljaGFlbCBEaWV0cmljaCA8bWR0QGVtZGV0ZS5kZT4KKworSW5kZXg6IFB5dGhvbi0yLjcuOS9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL3NldHVwLnB5CisrKysgUHl0aG9uLTIuNy45L3NldHVwLnB5CitAQCAtMjAyOCwxMiArMjAyOCwxMiBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgCisgICAgICAgICAgICAgICAgICMgUGFzcyBlbXB0eSBDRkxBR1MgYmVjYXVzZSB3ZSdsbCBqdXN0IGFwcGVuZCB0aGUgcmVzdWx0aW5nCisgICAgICAgICAgICAgICAgICMgQ0ZMQUdTIHRvIFB5dGhvbidzOyAtZyBvciAtTzIgaXMgdG8gYmUgYXZvaWRlZC4KKy0gICAgICAgICAgICAgICAgY21kID0gImNkICVzICYmIGVudiBDRkxBR1M9JycgJyVzL2NvbmZpZ3VyZScgJXMiIFwKKy0gICAgICAgICAgICAgICAgICAgICAgJSAoZmZpX2J1aWxkZGlyLCBmZmlfc3JjZGlyLCAiICIuam9pbihjb25maWdfYXJncykpCisrICAgICAgICAgICAgICAgIGNtZCA9ICIoY2QgJXMgJiYgYXV0b2NvbmYgLVcgY3Jvc3MpICYmIChjZCAlcyAmJiBlbnYgQ0ZMQUdTPScnICclcy9jb25maWd1cmUnICVzKSIgXAorKyAgICAgICAgICAgICAgICAgICAgJSAoZmZpX3NyY2RpciwgZmZpX2J1aWxkZGlyLCBmZmlfc3JjZGlyLCAiICIuam9pbihjb25maWdfYXJncykpCisgCisgICAgICAgICAgICAgICAgIHJlcyA9IG9zLnN5c3RlbShjbWQpCisgICAgICAgICAgICAgICAgIGlmIHJlcyBvciBub3Qgb3MucGF0aC5leGlzdHMoZmZpX2NvbmZpZ2ZpbGUpOgorLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkZhaWxlZCB0byBjb25maWd1cmUgX2N0eXBlcyBtb2R1bGUiCisrICAgICAgICAgICAgICAgICAgICBwcmludCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBfY3R5cGVzIG1vZHVsZSAocmVzPSVkKSBvciBtaXNzaW5nIGNvbmZmaWxlPSVzIiAlICggcmVzLCBmZmlfY29uZmlnZmlsZSApCisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAKKyAgICAgICAgICAgICBmZmljb25maWcgPSB7fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wNi1hdm9pZF91c3JfbGliX3Rlcm1jYXBfcGF0aF9pbl9saW5raW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wNi1hdm9pZF91c3JfbGliX3Rlcm1jYXBfcGF0aF9pbl9saW5raW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NTJjYjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzA2LWF2b2lkX3Vzcl9saWJfdGVybWNhcF9wYXRoX2luX2xpbmtpbmcucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZSBwb2lzb24gZGlyZWN0b3JpZXMgcGF0Y2ggaGFzIGRldGVjdGVkIGxpYnJhcnkgcGF0aCBpc3N1ZSB3aGlsZSAKK2NvbXBpbGluZyB0aGUgcHl0aG9uIGluIGNyb3NzIGVudmlyb25tZW50LCBhcyBzZWVuIGJlbGxvdy4KKword2FybmluZzogbGlicmFyeSBzZWFyY2ggcGF0aCAiL3Vzci9saWIvdGVybWNhcCIgaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbgorCitUaGlzIFBhdGNoIGZpeGVzIHRoaXMgaXNzdWUgaW4gdGhlIHB5dGhvbiBidWlsZCBlbnZpcm9ubWVudC4KKzExIE9jdCAyMDEwCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCisyMDExLzA5LzI5CitSZWJhc2VkIGZvciBweXRob24gMi43LjIKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQoraW5kZXggNjdlZGE3NC4uNTljNTM3ZSAxMDA2NDQKKy0tLSBhL3NldHVwLnB5CisrKysgYi9zZXR1cC5weQorQEAgLTc2MSwxMiArNzYxLDEwIEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICAgICAgcGFzcyAjIElzc3VlIDczODQ6IEFscmVhZHkgbGlua2VkIGFnYWluc3QgY3Vyc2VzIG9yIHRpbmZvLgorICAgICAgICAgICAgIGVsaWYgY3Vyc2VzX2xpYnJhcnk6CisgICAgICAgICAgICAgICAgIHJlYWRsaW5lX2xpYnMuYXBwZW5kKGN1cnNlc19saWJyYXJ5KQorLSAgICAgICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycyArCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy91c3IvbGliL3Rlcm1jYXAnXSwKKysgICAgICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVybWNhcCcpOgorICAgICAgICAgICAgICAgICByZWFkbGluZV9saWJzLmFwcGVuZCgndGVybWNhcCcpCisgICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigncmVhZGxpbmUnLCBbJ3JlYWRsaW5lLmMnXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1bJy91c3IvbGliL3Rlcm1jYXAnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xpbmtfYXJncz1yZWFkbGluZV9leHRyYV9saW5rX2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9cmVhZGxpbmVfbGlicykgKQorICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYWRkLW1kNW1vZHVsZS1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hZGQtbWQ1bW9kdWxlLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmZWE3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYWRkLW1kNW1vZHVsZS1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43LjIvTW9kdWxlcy9TZXR1cC5kaXN0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4yLm9yaWcvTW9kdWxlcy9TZXR1cC5kaXN0CTIwMTEtMDYtMTEgMDg6NDY6MjYuMDAwMDAwMDAwIC0wNzAwCisrKysgUHl0aG9uLTIuNy4yL01vZHVsZXMvU2V0dXAuZGlzdAkyMDExLTEyLTI3IDE1OjUxOjQxLjI0NDYyMzIxOSAtMDgwMAorQEAgLTI0OCw3ICsyNDgsNyBAQAorICMgTWVzc2FnZS1EaWdlc3QgQWxnb3JpdGhtLCBkZXNjcmliZWQgaW4gUkZDIDEzMjEuICBUaGUgbmVjZXNzYXJ5IGZpbGVzCisgIyBtZDUuYyBhbmQgbWQ1LmggYXJlIGluY2x1ZGVkIGhlcmUuCisgCistI19tZDUgbWQ1bW9kdWxlLmMgbWQ1LmMKKytfbWQ1IG1kNW1vZHVsZS5jIG1kNS5jCisgCisgCisgIyBUaGUgX3NoYSBtb2R1bGUgaW1wbGVtZW50cyB0aGUgU0hBIGNoZWNrc3VtIGFsZ29yaXRobXMuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YmFlMzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaApAQCAtMCwwICsxLDI3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQXZvaWRzIHBhcmFsbGVsIG1ha2UgcmFjZXMgbGlua2luZyBlcnJvcnMgd2hlbiBtYWtpbmcgUGFyc2VyL1BHRU4KKworLSBJbXBsZW1lbnRzIFJpY2hhcmQgUHVyZGllJ3MgaWRlYQorCitTaWduZWQtT2ZmLUJ5OiBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KK1NpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01ha2VmaWxlLnByZS5pbgorKysrIFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KK0BAIC02MTEsMTIgKzYxMSwxMCBAQCBNb2R1bGVzL2dycG1vZHVsZS5vOiAkKHNyY2RpcikvTW9kdWxlcy9nCisgCisgTW9kdWxlcy9wd2Rtb2R1bGUubzogJChzcmNkaXIpL01vZHVsZXMvcHdkbW9kdWxlLmMgJChzcmNkaXIpL01vZHVsZXMvcG9zaXhtb2R1bGUuaAorIAorLSQoR1JBTU1BUl9IKTogJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKQorKyQoR1JBTU1BUl9IKTogJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKSAkKFBHRU4pCisgCQlAJChNS0RJUl9QKSBJbmNsdWRlCistCQkkKE1BS0UpICQoUEdFTikKKyAJCSQoSE9TVFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQorICQoR1JBTU1BUl9DKTogJChHUkFNTUFSX0gpICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKy0JCSQoTUFLRSkgJChHUkFNTUFSX0gpCisgCQl0b3VjaCAkKEdSQU1NQVJfQykKKyAKKyAkKFBHRU4pOgkkKFBHRU5PQkpTKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDhjNTdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorX3RraW50ZXIgbW9kdWxlIG5lZWRzIHRrIG1vZHVsZSBhbG9uZyB3aXRoIHRjbC4gdGsgaXMgbm90IHlldCBpbnRlZ3JhdGVkCitpbiB5b2N0byBzbyB3ZSBza2lwIHRoZSBjaGVjayBmb3IgdGhpcyBtb2R1bGUuCitBdm9pZCBhIHdhcm5pbmcgYnkgbm90IGFkZGluZyB0aGlzIG1vZHVsZSB0byBtaXNzaW5nIHZhcmlhYmxlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbl0KKworU2lnbmVkLW9mZi1ieTogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorCitJbmRleDogUHl0aG9uLTIuNy4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4yLm9yaWcvc2V0dXAucHkJMjAxMi0wNC0wNSAyMzoxODozOC41MDAxMzY2NDcgKzAzMDAKKysrKyBQeXRob24tMi43LjIvc2V0dXAucHkJMjAxMi0wNC0wNSAyMzoxOTozNS44ODgxMzQ5NjkgKzAzMDAKK0BAIC0xNjM0LDggKzE2MzQsMTAgQEAKKyAgICAgICAgICMgQ2FsbCB0aGUgbWV0aG9kIGZvciBkZXRlY3Rpbmcgd2hldGhlciBfdGtpbnRlciBjYW4gYmUgY29tcGlsZWQKKyAgICAgICAgIHNlbGYuZGV0ZWN0X3RraW50ZXIoaW5jX2RpcnMsIGxpYl9kaXJzKQorIAorLSAgICAgICAgaWYgJ190a2ludGVyJyBub3QgaW4gW2UubmFtZSBmb3IgZSBpbiBzZWxmLmV4dGVuc2lvbnNdOgorLSAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdfdGtpbnRlcicpCisrICAgICAgICAjIHRraW50ZXIgbW9kdWxlIHdpbGwgbm90IGJlIGF2YWxhaWJsZSBhcyB5b2N0bworKyAgICAgICAgIyBkb2Vzbid0IGhhdmUgdGsgaW50ZWdyYXRlZCAoeWV0KQorKyAgICAgICAgI2lmICdfdGtpbnRlcicgbm90IGluIFtlLm5hbWUgZm9yIGUgaW4gc2VsZi5leHRlbnNpb25zXToKKysgICAgICAgICMgICAgbWlzc2luZy5hcHBlbmQoJ190a2ludGVyJykKKyAKKyAgICAgICAgIHJldHVybiBtaXNzaW5nCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3dhcm5pbmdfZm9yX3N1bm9zX3NwZWNpZmljX21vZHVsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfd2FybmluZ19mb3Jfc3Vub3Nfc3BlY2lmaWNfbW9kdWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzN2UwZTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3dhcm5pbmdfZm9yX3N1bm9zX3NwZWNpZmljX21vZHVsZS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitzdW5hdWRpb2RldiBtb2R1bGUgaXMgc3Vub3Mgc3BlY2lmaWMgc28gd2UgYXZvaWQgYSB3YXJuaW5nIGJ5IG5vdCAKK2FkZGluZyB0aGlzIG1vZHVsZSB0byBtaXNzaW5nIHZhcmlhYmxlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbl0KKworU2lnbmVkLW9mZi1ieTogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorCitJbmRleDogUHl0aG9uLTIuNy4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4yLm9yaWcvc2V0dXAucHkJMjAxMi0wNC0wNSAyMjoyOToxOC4wNDkxOTY2MDggKzAzMDAKKysrKyBQeXRob24tMi43LjIvc2V0dXAucHkJMjAxMi0wNC0wNSAyMjoyOTo1Ny41MDUxOTU0NTMgKzAzMDAKK0BAIC0xNTIyLDggKzE1MjIsOSBAQAorICAgICAgICAgaWYgcGxhdGZvcm0gPT0gJ3N1bm9zNSc6CisgICAgICAgICAgICAgIyBTdW5PUyBzcGVjaWZpYyBtb2R1bGVzCisgICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignc3VuYXVkaW9kZXYnLCBbJ3N1bmF1ZGlvZGV2LmMnXSkgKQorLSAgICAgICAgZWxzZToKKy0gICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnc3VuYXVkaW9kZXYnKQorKyAgICAgICAgIyBJZiBwbGF0Zm9ybSBpcyBub3Qgc3Vub3Mgd2FybmluZyBpcyB1c2VsZXNzCisrICAgICAgICAjZWxzZToKKysgICAgICAgICMgICAgbWlzc2luZy5hcHBlbmQoJ3N1bmF1ZGlvZGV2JykKKyAKKyAgICAgICAgIGlmIHBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgICMgX3NjcHJveHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYnVpbGRkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2J1aWxkZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNjI5YTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2J1aWxkZGlyLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1doZW4gY3Jvc3MgY29tcGlsaW5nIHB5dGhvbiwgd2UgdXNlZCB0byBuZWVkIHRvIGluc3RhbGwgdGhlIE1ha2VmaWxlLCBweWNvbmZpZy5oIAorYW5kIHRoZSBweXRob24gbGlicmFyeSB0byB0aGVpciBmaW5hbCBsb2NhdGlvbiBiZWZvcmUgYmVpbmcgYWJsZSB0byBjb21waWxlIHRoZSAKK3Jlc3Qgb2YgcHl0aG9uLiBUaGlzIGNoYW5nZSBhbGxvd3MgdXMgdG8gcG9pbnQgcHl0aG9uIGF0IGl0cyBvd24gc291cmNlIHdoZW4KK2J1aWxkaW5nLCBhdm9pZGluZyBhIHZhcmlldHkgb2Ygc3lzcm9vdCBzdGFnaW5nIGlzc3VlcyBhbmQgc2ltcGxpZnlpbmcgdGhlIG1haW4KK3B5dGhvbiByZWNpcGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorUlAgMjAxMi8xMS8xMworCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9zeXNjb25maWcucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9zeXNjb25maWcucHkKK0BAIC05Myw2ICs5Myw3IEBAIF9QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpCisgX0VYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY19wcmVmaXgpCisgX0NPTkZJR19WQVJTID0gTm9uZQorIF9VU0VSX0JBU0UgPSBOb25lCisrX1BZVEhPTkJVSUxERElSID0gb3MuZW52aXJvbi5nZXQoIlBZVEhPTkJVSUxERElSIiwgTm9uZSkKKyAKKyBkZWYgX3NhZmVfcmVhbHBhdGgocGF0aCk6CisgICAgIHRyeToKK0BAIC0xMDAsNyArMTAxLDkgQEAgZGVmIF9zYWZlX3JlYWxwYXRoKHBhdGgpOgorICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgIHJldHVybiBwYXRoCisgCistaWYgc3lzLmV4ZWN1dGFibGU6CisraWYgX1BZVEhPTkJVSUxERElSOgorKyAgICBfUFJPSkVDVF9CQVNFID0gX1BZVEhPTkJVSUxERElSCisrZWxpZiBzeXMuZXhlY3V0YWJsZToKKyAgICAgX1BST0pFQ1RfQkFTRSA9IG9zLnBhdGguZGlybmFtZShfc2FmZV9yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkpCisgZWxzZToKKyAgICAgIyBzeXMuZXhlY3V0YWJsZSBjYW4gYmUgZW1wdHkgaWYgYXJndlswXSBoYXMgYmVlbiBjaGFuZ2VkIGFuZCBQeXRob24gaXMKK0luZGV4OiBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorQEAgLTI2LDYgKzI2LDkgQEAgRVhFQ19QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5leGVjXworICMgbGl2ZSBpbiBwcm9qZWN0L1BDQnVpbGQ5LiAgSWYgd2UncmUgZGVhbGluZyB3aXRoIGFuIHg2NCBXaW5kb3dzIGJ1aWxkLAorICMgaXQnbGwgbGl2ZSBpbiBwcm9qZWN0L1BDYnVpbGQvYW1kNjQuCisgcHJvamVjdF9iYXNlID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuZXhlY3V0YWJsZSkpCisrX1BZVEhPTkJVSUxERElSID0gb3MuZW52aXJvbi5nZXQoIlBZVEhPTkJVSUxERElSIiwgTm9uZSkKKytpZiBfUFlUSE9OQlVJTERESVI6CisrICAgIHByb2plY3RfYmFzZSA9IF9QWVRIT05CVUlMRERJUgorIGlmIG9zLm5hbWUgPT0gIm50IiBhbmQgInBjYnVpbGQiIGluIHByb2plY3RfYmFzZVstODpdLmxvd2VyKCk6CisgICAgIHByb2plY3RfYmFzZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocHJvamVjdF9iYXNlLCBvcy5wYXRoLnBhcmRpcikpCisgIyBQQy9WUzcuMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9jZ2lfcHkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2NnaV9weS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTUwNGY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9jZ2lfcHkucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorTGliL2NnaS5weTogVXBkYXRlIHRoZSBzY3JpcHQgYXMgbWVudGlvbmVkIGluIHRoZSBjb21tZW50CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKKy0tLSBQeXRob24tMi42LjYvTGliL2NnaS5weS5vcmlnCTIwMTAtMDgtMDEgMjI6MTQ6MjcuMDAwMDAwMDAwIC0wNTAwCisrKysgUHl0aG9uLTIuNi42L0xpYi9jZ2kucHkJMjAxMS0wOS0yMSAxNToyODo0MC40NzgyMDg2MzEgLTA1MDAKK0BAIC0xLDEzICsxLDQgQEAKKy0jISAvdXNyL2xvY2FsL2Jpbi9weXRob24KKy0KKy0jIE5PVEU6IHRoZSBhYm92ZSAiL3Vzci9sb2NhbC9iaW4vcHl0aG9uIiBpcyBOT1QgYSBtaXN0YWtlLiAgSXQgaXMKKy0jIGludGVudGlvbmFsbHkgTk9UICIvdXNyL2Jpbi9lbnYgcHl0aG9uIi4gIE9uIG1hbnkgc3lzdGVtcworLSMgKGUuZy4gU29sYXJpcyksIC91c3IvbG9jYWwvYmluIGlzIG5vdCBpbiAkUEFUSCBhcyBwYXNzZWQgdG8gQ0dJCistIyBzY3JpcHRzLCBhbmQgL3Vzci9sb2NhbC9iaW4gaXMgdGhlIGRlZmF1bHQgZGlyZWN0b3J5IHdoZXJlIFB5dGhvbiBpcworLSMgaW5zdGFsbGVkLCBzbyAvdXNyL2Jpbi9lbnYgd291bGQgYmUgdW5hYmxlIHRvIGZpbmQgcHl0aG9uLiAgR3JhbnRlZCwKKy0jIGJpbmFyeSBpbnN0YWxsYXRpb25zIGJ5IExpbnV4IHZlbmRvcnMgb2Z0ZW4gaW5zdGFsbCBQeXRob24gaW4KKy0jIC91c3IvYmluLiAgU28gbGV0IHRob3NlIHZlbmRvcnMgcGF0Y2ggY2dpLnB5IHRvIG1hdGNoIHRoZWlyIGNob2ljZQorLSMgb2YgaW5zdGFsbGF0aW9uLgorKyMhIC91c3IvYmluL2VudiBweXRob24KKyAKKyAiIiJTdXBwb3J0IG1vZHVsZSBmb3IgQ0dJIChDb21tb24gR2F0ZXdheSBJbnRlcmZhY2UpIHNjcmlwdHMuCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2NoZWNrLWlmLXRhcmdldC1pcy02NGItbm90LWhvc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2NoZWNrLWlmLXRhcmdldC1pcy02NGItbm90LWhvc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI2MmRiMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vY2hlY2staWYtdGFyZ2V0LWlzLTY0Yi1ub3QtaG9zdC5wYXRjaApAQCAtMCwwICsxLDU3IEBACitBdXRob3I6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KK0RhdGU6ICAgU3VuIE1hciAyNSAwMjowMjoyNyAyMDEyICswMjAwCisKK1RoaXMgcGF0Y2ggd2FzIGFkZGVkIGZvciA2NGJpdCBob3N0IG1hY2hpbmVzLiBJbiB0aGUgY29tcGlsZSBwcm9jZXNzIHB5dGhvbgoraXMgY2hlY2tpbmcgaWYgcGxhdGZvcm0gaXMgYSA2NGJpdCBwbGF0Zm9ybSB1c2luZyBzeXMubWF4aW50IHdoaWNoIGlzIHRoZSBob3N0J3MKK3ZhbHVlLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBpc3N1ZSBzbyB0aGF0IHB5dGhvbiB3b3VsZCBjaGVjayBpZiBUQVJHRVQgbWFjaGluZQoraXMgNjRiaXQgbm90IHRoZSBIT1NUIG1hY2hpbmUuIEluIHRoaXMgd2F5IHdpbGwgaGF2ZSAiZGwiIGFuZCAiaW1hZ2VvcCIgbW9kdWxlcworYnVpbHQgaWYgSE9TVCBtYWNoaW5lIGlzIDY0Yml0IGJ1dCB0aGUgdGFyZ2V0IG1hY2hpbmUgaXMgMzJiaXQuCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBQeXRob24tMi43LjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9zZXR1cC5weQkyMDEyLTAzLTI1IDAxOjEwOjQxLjU0MDE2MzE4NyArMDIwMAorKysrIFB5dGhvbi0yLjcuMi9zZXR1cC5weQkyMDEyLTAzLTI1IDAxOjI2OjA2LjA5MjUzOTk5MCArMDIwMAorQEAgLTIzLDYgKzIzLDIxIEBACisgIyBUaGlzIGdsb2JhbCB2YXJpYWJsZSBpcyB1c2VkIHRvIGhvbGQgdGhlIGxpc3Qgb2YgbW9kdWxlcyB0byBiZSBkaXNhYmxlZC4KKyBkaXNhYmxlZF9tb2R1bGVfbGlzdCA9IFtdCisgCisrZGVmIHRhcmdldF9pc182NGJpdF9wbGF0Zm9ybSAoKToKKysgICAgIiIiCisrICAgIEluIGNhc2Ugb2YgY3Jvc3MtY29tcGlsZSwgc29tZSBtb2R1bGVzIGFyZSBub3QgYnVpbGQgYXMgc2V0dXAgY2hlY2tzIGlmIEhPU1QKKysgICAgaXMgNjRiaXQgYW5kIG5vdCBUQVJHRVQuCisrICAgIEFzIHB5dGhvbiB3YXMgYnVpbHQgZm9yIFRBUkdFVCB3ZSBjYW4gY2hlY2sgdGhpcyBpbiBweWNvbmZpZy5oIGluIHRoaXMgd2F5OgorKwlTaXplb2YgTE9ORyBvbiBhIDMyIGJpdCBwbGF0Zm9ybSBpcyA0IGJ5dGVzCisrCVNpemVvZiBMT05HIG9uIGEgNjQgYml0IHBsYXRmb3JtIGlzIDggYnl0ZXMKKysgICAgIiIiCisrICAgIHB5Y29uZiA9IG9wZW4oInB5Y29uZmlnLmgiKS5yZWFkKCkKKysgICAgYXV4ID0gcmUuc2VhcmNoKHIiI3MqZGVmaW5lXHMrU0laRU9GX0xPTkdccys4XHMqIiwgcHljb25mKQorKyAgICBpZiBhdXggaXMgbm90IE5vbmU6CisrCXJldHVybiBUcnVlCisrICAgIGVsc2U6CisrCXJldHVybiBGYWxzZQorKworIGRlZiBhZGRfZGlyX3RvX2xpc3QoZGlybGlzdCwgZGlyKToKKyAgICAgIiIiQWRkIHRoZSBkaXJlY3RvcnkgJ2RpcicgdG8gdGhlIGxpc3QgJ2Rpcmxpc3QnIChhdCB0aGUgZnJvbnQpIGlmCisgICAgIDEpICdkaXInIGlzIG5vdCBhbHJlYWR5IGluICdkaXJsaXN0JworQEAgLTYyOCw3ICs2NDMsNyBAQAorICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignYXVkaW9vcCcsIFsnYXVkaW9vcC5jJ10pICkKKyAKKyAgICAgICAgICMgRGlzYWJsZWQgb24gNjQtYml0IHBsYXRmb3JtcworLSAgICAgICAgaWYgc3lzLm1heGludCAhPSA5MjIzMzcyMDM2ODU0Nzc1ODA3TDoKKysgICAgICAgIGlmIG5vdCB0YXJnZXRfaXNfNjRiaXRfcGxhdGZvcm0oKToKKyAgICAgICAgICAgICAjIE9wZXJhdGlvbnMgb24gaW1hZ2VzCisgICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignaW1hZ2VvcCcsIFsnaW1hZ2VvcC5jJ10pICkKKyAgICAgICAgIGVsc2U6CitAQCAtMTQxOCw3ICsxNDMzLDcgQEAKKyAgICAgICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ19jb2RlY3NfJXMnICUgbG9jKQorIAorICAgICAgICAgIyBEeW5hbWljIGxvYWRpbmcgbW9kdWxlCistICAgICAgICBpZiBzeXMubWF4aW50ID09IDB4N2ZmZmZmZmY6CisrICAgICAgICBpZiBub3QgdGFyZ2V0X2lzXzY0Yml0X3BsYXRmb3JtKCk6CisgICAgICAgICAgICAgIyBUaGlzIHJlcXVpcmVzIHNpemVvZihpbnQpID09IHNpemVvZihsb25nKSA9PSBzaXplb2YoY2hhciopCisgICAgICAgICAgICAgZGxfaW5jID0gZmluZF9maWxlKCdkbGZjbi5oJywgW10sIGluY19kaXJzKQorICAgICAgICAgICAgIGlmIChkbF9pbmMgaXMgbm90IE5vbmUpIGFuZCAocGxhdGZvcm0gbm90IGluIFsnYXRoZW9zJ10pOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXgtbWFrZWZpbGUtZm9yLXB0ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXgtbWFrZWZpbGUtZm9yLXB0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2OTExMmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2ZpeC1tYWtlZmlsZS1mb3ItcHRlc3QucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorQWRkICdidWlsZC10ZXN0JyBhbmQgJ3J1bnRlc3QtVEVTVFMnIHRhcmdldHMgdG8gTWFrZWZpbGUsIHRvIGJ1aWxkIGFuZCBydW4gdGVzdHMKK2Nyb3NzLWNvbXBpbGVkLgorCitTaWduZWQtb2ZmLWJ5OiBUdWRvciBGbG9yZWEgPHR1ZG9yLmZsb3JlYUBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitkaWZmIC1ydU4gYS9NYWtlZmlsZS5wcmUuaW4gYi9NYWtlZmlsZS5wcmUuaW4KKy0tLSBhL01ha2VmaWxlLnByZS5pbgkyMDEzLTA2LTI3IDEwOjQ0OjExLjAzMzg0MDUzMiArMDIwMAorKysrIGIvTWFrZWZpbGUucHJlLmluCTIwMTMtMDYtMjcgMTA6NDQ6MzkuNTcyNjM1MjczICswMjAwCitAQCAtNzA5LDE0ICs3MDksMTkgQEAKKyAjIGdlbmVyYXRlZCBieXRlY29kZS4gIFRoaXMgaXMgc29tZXRpbWVzIGEgdmVyeSBzaHkgYnVnIG5lZWRpbmcgYSBsb3Qgb2YKKyAjIHNhbXBsZSBkYXRhLgorIAorLVRFU1RPUFRTPQktbCAkKEVYVFJBVEVTVE9QVFMpCisrVEVTVE9QVFM9CS1sIC12ICQoRVhUUkFURVNUT1BUUykKKyBURVNUUFJPRz0JJChzcmNkaXIpL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CistVEVTVFBZVEhPTj0JJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgLVdkIC0zIC1FIC10dCAkKFRFU1RQWVRIT05PUFRTKQorLXRlc3Q6CQlhbGwgcGxhdGZvcm0KKy0JCS1maW5kICQoc3JjZGlyKS9MaWIgLW5hbWUgJyoucHlbY29dJyAtcHJpbnQgfCB4YXJncyBybSAtZgorK1RFU1RQWVRIT049CSQoUlVOU0hBUkVEKSAkKEJVSUxEUFlUSE9OKSAtV2QgLTMgLUUgLXR0ICQoVEVTVFBZVEhPTk9QVFMpCisrdGVzdDoJCWJ1aWxkLXRlc3QKKysJCSQoTUFLRSkgcnVudGVzdC1URVNUUworKworK3J1bnRlc3QtVEVTVFM6CisrCQktZmluZCAkKHNyY2RpcikgLW5hbWUgJyoucHlbY29dJyAtcHJpbnQgfCB4YXJncyBybSAtZgorIAkJLSQoVEVTVFBZVEhPTikgJChURVNUUFJPRykgJChURVNUT1BUUykKKyAJCSQoVEVTVFBZVEhPTikgJChURVNUUFJPRykgJChURVNUT1BUUykKKyAKKytidWlsZC10ZXN0OglhbGwgcGxhdGZvcm0KKysKKyB0ZXN0YWxsOglhbGwgcGxhdGZvcm0KKyAJCS1maW5kICQoc3JjZGlyKS9MaWIgLW5hbWUgJyoucHlbY29dJyAtcHJpbnQgfCB4YXJncyBybSAtZgorIAkJJChURVNUUFlUSE9OKSAkKHNyY2RpcikvTGliL2NvbXBpbGVhbGwucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyNjJkOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoCkBAIC0wLDAgKzEsNzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbRW1iZWRkZWQgc3BlY2lmaWNdCisKK1RoaXMgcGF0Y2ggZml4ZXMgaXNzdWluZyB3aXRoIGRpZmZlcmVudCBsaWJkaXIgbGlrZSBsaWI2NC4KK1RoaXMgcGF0Y2ggbWFrZXMgdGhlIG5hdGl2ZSBweXRob24gYmluYXJ5IG1vZHVsZXMgZmluZGFibGUKK2luIHRoZSBpbnN0YWxsIHByb2Nlc3Mgb2YgdGhlIGhvc3QgcHl0aG9uLgorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorRGF0ZTogMjAxMi8wMy8xNAorCitVcGRhdGVkIGZvciBweXRob24gMi43LjMKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitEYXRlOiAyMDEyLzA1LzAxCisKK1JlYmFzZWQgZm9yIHB5dGhvbi0yLjcuOQorU2lnbmVkLU9mZi1CeTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKKworSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3N5c2NvbmZpZy5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvc3lzY29uZmlnLnB5CitAQCAtOSw3ICs5LDcgQEAgX0lOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgJ3Bvc2l4X3ByZWZpeCc6IHsKKyAgICAgICAgICdzdGRsaWInOiAne2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncGxhdHN0ZGxpYic6ICd7cGxhdGJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCistICAgICAgICAncHVyZWxpYic6ICd7YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAncGxhdGxpYic6ICd7cGxhdGJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdpbmNsdWRlJzogJ3tiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncGxhdGluY2x1ZGUnOiAne3BsYXRiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCitAQCAtNjcsNyArNjcsNyBAQCBfSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAncG9zaXhfdXNlcic6IHsKKyAgICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3BsYXRzdGRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorLSAgICAgICAgJ3B1cmVsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3B1cmVsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAncGxhdGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdpbmNsdWRlJzogJ3t1c2VyYmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3NjcmlwdHMnOiAne3VzZXJiYXNlfS9iaW4nLAorSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCitAQCAtMTA0NiwyNyArMTA0NiwyNyBAQCBsaWJpbnN0YWxsOglidWlsZF9hbGwgJChzcmNkaXIpL0xpYi8kKFBMCisgCQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL01vZHVsZXMveHhtb2R1bGUuYyBcCisgCQkJJChERVNURElSKSQoTElCREVTVCkvZGlzdHV0aWxzL3Rlc3RzIDsgXAorIAlmaQorLQlQWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICAkKFJVTlNIQVJFRCkgXAorKwlQWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpOiR7Q1JPU1NQWVRIT05QQVRIfSAkKFJVTlNIQVJFRCkgXAorIAkJJChIT1NUUFlUSE9OKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorIAkJLWQgJChMSUJERVNUKSAtZiBcCisgCQkteCAnYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xsaWIydG8zL3Rlc3RzL2RhdGEnIFwKKyAJCSQoREVTVERJUikkKExJQkRFU1QpCistCVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKysJUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKToke0NST1NTUFlUSE9OUEFUSH0kKFJVTlNIQVJFRCkgXAorIAkJJChIT1NUUFlUSE9OKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorIAkJLWQgJChMSUJERVNUKSAtZiBcCisgCQkteCAnYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xsaWIydG8zL3Rlc3RzL2RhdGEnIFwKKyAJCSQoREVTVERJUikkKExJQkRFU1QpCistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICAkKFJVTlNIQVJFRCkgXAorKwktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKToke0NST1NTUFlUSE9OUEFUSH0gJChSVU5TSEFSRUQpIFwKKyAJCSQoSE9TVFBZVEhPTikgLVdpIC10dCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKyAJCS1kICQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcyAtZiBcCisgCQkteCBiYWRzeW50YXggJChERVNURElSKSQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcworLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorKwktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKToke0NST1NTUFlUSE9OUEFUSH0gJChSVU5TSEFSRUQpIFwKKyAJCSQoSE9TVFBZVEhPTikgLVdpIC10dCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKyAJCS1kICQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcyAtZiBcCisgCQkteCBiYWRzeW50YXggJChERVNURElSKSQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcworLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorKwktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKToke0NST1NTUFlUSE9OUEFUSH0gJChSVU5TSEFSRUQpIFwKKyAJCSQoSE9TVFBZVEhPTikgLW0gbGliMnRvMy5wZ2VuMi5kcml2ZXIgJChERVNURElSKSQoTElCREVTVCkvbGliMnRvMy9HcmFtbWFyLnR4dAorLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorKwktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKToke0NST1NTUFlUSE9OUEFUSH0gJChSVU5TSEFSRUQpIFwKKyAJCSQoSE9TVFBZVEhPTikgLW0gbGliMnRvMy5wZ2VuMi5kcml2ZXIgJChERVNURElSKSQoTElCREVTVCkvbGliMnRvMy9QYXR0ZXJuR3JhbW1hci50eHQKKyAKKyAjIENyZWF0ZSB0aGUgUExBVERJUiBzb3VyY2UgZGlyZWN0b3J5LCBpZiBvbmUgd2Fzbid0IGRpc3RyaWJ1dGVkLi4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vaG9zdF9pbmNsdWRlX2NvbnRhbWluYXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2hvc3RfaW5jbHVkZV9jb250YW1pbmF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYWFmYjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2hvc3RfaW5jbHVkZV9jb250YW1pbmF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK3doZW4gYnVpbGRpbmcgcHl0aG9uIGZvciBxZW11eDg2LTY0IG9uIHVidW50dSAxMS4xMC82NGJpdAoraXQgZ3JvcGVzIGludG8gaG9zdCBpbmNsdWRlcyBhbmQgdGhlbiBtaXhlcyB0aGVtIHdpdGggY3Jvc3MKK2luY2x1ZGVzIGFuZCBhcyBhIHJlc3VsdCBzb21lIG1vZHVsZXMgZmFpbCB0byBjb21waWxlIGFuZCBsaW5rCitvbmUgb2YgdGhlIG1vZHVsZXMgaXMgcHl0aG9uLWVsZW1lbnR0cmVlIHdoaWNoIGlzIHRoZW4gbm90Citmb3VuZCBkdXJpbmcgaW1hZ2UgY3JlYXRpb24KKworUHJvYmxlIGlzIHRoYXQgc2V0dXAucHkgdHJpZXMgdG8gYWRkIG5hdGl2ZSBpbmNsdWRlcyB0aGF0IG5ld2VyCit1YnVudHUgaGFzIGludHJvZHVjZWQgZm9yIG11bHRpYXJjaCBzdXBwb3J0LiBCdXQgdGhhdCBzaG91bGQKK29ubHkgaGFwcGVuIGZvciBuYXRpdmUgYnVpbGRzIGFuZCBub3QgY3Jvc3MgYnVpbGRpbmcgcHl0aG9uCitzbyB3ZSBhZGQgYSBjaGVjayBoZXJlLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKworZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKK2luZGV4IGJhMmQyNDIuLmJmODU5YmUgMTAwNjQ0CistLS0gYS9zZXR1cC5weQorKysrIGIvc2V0dXAucHkKK0BAIC0zOTMsNiArMzkzLDggQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorIAorICAgICAgICAgaWYgbm90IGZpbmRfZXhlY3V0YWJsZSgnZHBrZy1hcmNoaXRlY3R1cmUnKToKKyAgICAgICAgICAgICByZXR1cm4KKysgICAgICAgIGlmIG9zLmVudmlyb24uZ2V0KCdDUk9TU19DT01QSUxFJykgaXMgbm90IE5vbmU6CisrICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICBvcHQgPSAnJworICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorICAgICAgICAgICAgIG9wdCA9ICctdCcgKyBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0hPU1RfR05VX1RZUEUnKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9tdWx0aWxpYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJmYTBkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vbXVsdGlsaWIucGF0Y2gKQEAgLTAsMCArMSwyOTYgQEAKK1JlYmFzZWQgZm9yIHB5dGhvbi0yLjcuOQorU2lnbmVkLU9mZi1CeTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43LjkvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvY29uZmlndXJlLmFjCisrKysgUHl0aG9uLTIuNy45L2NvbmZpZ3VyZS5hYworQEAgLTczNiw2ICs3MzYsMTAgQEAgU3VuT1MqKQorICAgICA7OworIGVzYWMKKyAKKytBQ19TVUJTVChMSUIpCisrQUNfTVNHX0NIRUNLSU5HKExJQikKKytMSUI9YGJhc2VuYW1lICR7bGliZGlyfWAKKytBQ19NU0dfUkVTVUxUKCRMSUIpCisgCisgQUNfU1VCU1QoTElCUkFSWSkKKyBBQ19NU0dfQ0hFQ0tJTkcoTElCUkFSWSkKK0luZGV4OiBQeXRob24tMi43LjkvSW5jbHVkZS9weXRob25ydW4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0luY2x1ZGUvcHl0aG9ucnVuLmgKKysrKyBQeXRob24tMi43LjkvSW5jbHVkZS9weXRob25ydW4uaAorQEAgLTEwOCw2ICsxMDgsNyBAQCBQeUFQSV9GVU5DKGNoYXIgKikgUHlfR2V0UGF0aCh2b2lkKTsKKyAvKiBJbiB0aGVpciBvd24gZmlsZXMgKi8KKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0VmVyc2lvbih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0UGxhdGZvcm0odm9pZCk7CisrUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldExpYih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0Q29weXJpZ2h0KHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb21waWxlcih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0QnVpbGRJbmZvKHZvaWQpOworSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CitAQCAtMjIsNiArMjIsOCBAQCBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfQkFTRQorIGZyb20gc2l0ZSBpbXBvcnQgVVNFUl9TSVRFCisgCisgCisrbGlibmFtZSA9IHN5cy5saWIKKysKKyBpZiBzeXMudmVyc2lvbiA8ICIyLjIiOgorICAgICBXSU5ET1dTX1NDSEVNRSA9IHsKKyAgICAgICAgICdwdXJlbGliJzogJyRiYXNlJywKK0BAIC00Miw3ICs0NCw3IEBAIGVsc2U6CisgSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAndW5peF9wcmVmaXgnOiB7CisgICAgICAgICAncHVyZWxpYic6ICckYmFzZS9saWIvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvc2l0ZS1wYWNrYWdlcycsCistICAgICAgICAncGxhdGxpYic6ICckcGxhdGJhc2UvbGliL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3BsYXRsaWInOiAnJHBsYXRiYXNlLycrbGlibmFtZSsnL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2hlYWRlcnMnOiAnJGJhc2UvaW5jbHVkZS9weXRob24kcHlfdmVyc2lvbl9zaG9ydC8kZGlzdF9uYW1lJywKKyAgICAgICAgICdzY3JpcHRzJzogJyRiYXNlL2JpbicsCisgICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKysrKyBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKK0BAIC0xMTksOCArMTE5LDExIEBAIGRlZiBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTAsIHN0YW4KKyAgICAgICAgIHByZWZpeCA9IHBsYXRfc3BlY2lmaWMgYW5kIEVYRUNfUFJFRklYIG9yIFBSRUZJWAorIAorICAgICBpZiBvcy5uYW1lID09ICJwb3NpeCI6CistICAgICAgICBsaWJweXRob24gPSBvcy5wYXRoLmpvaW4ocHJlZml4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWIiLCAicHl0aG9uIiArIGdldF9weXRob25fdmVyc2lvbigpKQorKyAgICAgICAgaWYgcGxhdF9zcGVjaWZpYyBvciBzdGFuZGFyZF9saWI6CisrICAgICAgICAgICAgbGliID0gc3lzLmxpYgorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICBsaWIgPSAibGliIgorKyAgICAgICAgbGlicHl0aG9uID0gb3MucGF0aC5qb2luKHByZWZpeCwgbGliLCAicHl0aG9uIiArIGdldF9weXRob25fdmVyc2lvbigpKQorICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgorICAgICAgICAgICAgIHJldHVybiBsaWJweXRob24KKyAgICAgICAgIGVsc2U6CitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9weWRvYy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9weWRvYy5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvcHlkb2MucHkKK0BAIC0zODMsNyArMzgzLDcgQEAgY2xhc3MgRG9jOgorIAorICAgICAgICAgZG9jbG9jID0gb3MuZW52aXJvbi5nZXQoIlBZVEhPTkRPQ1MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeSIpCistICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgImxpYiIsCisrICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIrc3lzLnZlcnNpb25bMDozXSkKKyAgICAgICAgIGlmIChpc2luc3RhbmNlKG9iamVjdCwgdHlwZShvcykpIGFuZAorICAgICAgICAgICAgIChvYmplY3QuX19uYW1lX18gaW4gKCdlcnJubycsICdleGNlcHRpb25zJywgJ2djJywgJ2ltcCcsCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9zaXRlLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3NpdGUucHkKKysrKyBQeXRob24tMi43LjkvTGliL3NpdGUucHkKK0BAIC0yODgsMTMgKzI4OCwxOCBAQCBkZWYgZ2V0c2l0ZXBhY2thZ2VzKCk6CisgICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdvczJlbXgnLCAncmlzY29zJyk6CisgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKSkKKyAgICAgICAgIGVsaWYgb3Muc2VwID09ICcvJzoKKy0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikpCistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcHl0aG9uIikpCisrICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLCAic2l0ZS1weXRob24iKSkKKysgICAgICAgICAgICBpZiBzeXMubGliICE9ICJsaWIiOgorKyAgICAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZS1wYWNrYWdlcyIpKQorKyAgICAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1weXRob24iKSkKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChwcmVmaXgpCistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcGFja2FnZXMiKSkKKysgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsICJzaXRlLXBhY2thZ2VzIikpCisgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6CisgICAgICAgICAgICAgIyBmb3IgZnJhbWV3b3JrIGJ1aWxkcyAqb25seSogd2UgYWRkIHRoZSBzdGFuZGFyZCBBcHBsZQorICAgICAgICAgICAgICMgbG9jYXRpb25zLgorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3N5c2NvbmZpZy5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvc3lzY29uZmlnLnB5CitAQCAtNywxMCArNywxMCBAQCBmcm9tIG9zLnBhdGggaW1wb3J0IHBhcmRpciwgcmVhbHBhdGgKKyAKKyBfSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAncG9zaXhfcHJlZml4JzogeworLSAgICAgICAgJ3N0ZGxpYic6ICd7YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCistICAgICAgICAncGxhdHN0ZGxpYic6ICd7cGxhdGJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorKyAgICAgICAgJ3N0ZGxpYic6ICd7YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKysgICAgICAgICdwbGF0c3RkbGliJzogJ3twbGF0YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorLSAgICAgICAgJ3BsYXRsaWInOiAne3BsYXRiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3BsYXRsaWInOiAne3BsYXRiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaW5jbHVkZSc6ICd7YmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3BsYXRpbmNsdWRlJzogJ3twbGF0YmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3NjcmlwdHMnOiAne2Jhc2V9L2JpbicsCitAQCAtNjUsMTAgKzY1LDEwIEBAIF9JTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICAgICAnZGF0YScgICA6ICd7dXNlcmJhc2V9JywKKyAgICAgICAgIH0sCisgICAgICdwb3NpeF91c2VyJzogeworLSAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorLSAgICAgICAgJ3BsYXRzdGRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKysgICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorKyAgICAgICAgJ3BsYXRzdGRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3B1cmVsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorLSAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdzY3JpcHRzJzogJ3t1c2VyYmFzZX0vYmluJywKKyAgICAgICAgICdkYXRhJyAgIDogJ3t1c2VyYmFzZX0nLAorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvdGVzdC90ZXN0X2RsLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3Rlc3QvdGVzdF9kbC5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvdGVzdC90ZXN0X2RsLnB5CitAQCAtNCwxMCArNCwxMSBAQAorIGltcG9ydCB1bml0dGVzdAorIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIGltcG9ydF9tb2R1bGUKKyBkbCA9IGltcG9ydF9tb2R1bGUoJ2RsJywgZGVwcmVjYXRlZD1UcnVlKQorK2ltcG9ydCBzeXMKKyAKKyBzaGFyZWRsaWJzID0gWworLSAgICAoJy91c3IvbGliL2xpYmMuc28nLCAnZ2V0cGlkJyksCistICAgICgnL2xpYi9saWJjLnNvLjYnLCAnZ2V0cGlkJyksCisrICAgICgnL3Vzci8nK3N5cy5saWIrJy9saWJjLnNvJywgJ2dldHBpZCcpLAorKyAgICAoJy8nK3N5cy5saWIrJy9saWJjLnNvLjYnLCAnZ2V0cGlkJyksCisgICAgICgnL3Vzci9iaW4vY3lnd2luMS5kbGwnLCAnZ2V0cGlkJyksCisgICAgICgnL3Vzci9saWIvbGliYy5keWxpYicsICdnZXRwaWQnKSwKKyAgICAgXQorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvdGVzdC90ZXN0X3NpdGUucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvdGVzdC90ZXN0X3NpdGUucHkKKysrKyBQeXRob24tMi43LjkvTGliL3Rlc3QvdGVzdF9zaXRlLnB5CitAQCAtMjQxLDEyICsyNDEsMTYgQEAgY2xhc3MgSGVscGVyRnVuY3Rpb25zVGVzdHModW5pdHRlc3QuVGVzdAorICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1syXSwgd2FudGVkKQorICAgICAgICAgZWxpZiBvcy5zZXAgPT0gJy8nOgorICAgICAgICAgICAgICMgT1MgWCBub24tZnJhbXdld29yayBidWlsZHMsIExpbnV4LCBGcmVlQlNELCBldGMKKy0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaXJzKSwgMikKKyAgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnbGliJywgJ3B5dGhvbicgKyBzeXMudmVyc2lvbls6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaXRlLXBhY2thZ2VzJykKKy0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMF0sIHdhbnRlZCkKKysgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2FudGVkIGluIGRpcnMpCisgICAgICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKCd4b3hvJywgJ2xpYicsICdzaXRlLXB5dGhvbicpCistICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzFdLCB3YW50ZWQpCisrICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhbnRlZCBpbiBkaXJzKQorKyAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbigneG94bycsIHN5cy5saWIsICdweXRob24nICsgc3lzLnZlcnNpb25bOjNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2l0ZS1wYWNrYWdlcycpCisrICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhbnRlZCBpbiBkaXJzKQorKyAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbigneG94bycsIHN5cy5saWIsICdzaXRlLXB5dGhvbicpCisrICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhbnRlZCBpbiBkaXJzKQorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAjIG90aGVyIHBsYXRmb3JtcworICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcnMpLCAyKQorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvdHJhY2UucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvdHJhY2UucHkKKysrKyBQeXRob24tMi43LjkvTGliL3RyYWNlLnB5CitAQCAtNzU0LDEwICs3NTQsMTAgQEAgZGVmIG1haW4oYXJndj1Ob25lKToKKyAgICAgICAgICAgICAgICAgIyBzaG91bGQgSSBhbHNvIGNhbGwgZXhwYW5kdXNlcj8gKGFmdGVyIGFsbCwgY291bGQgdXNlICRIT01FKQorIAorICAgICAgICAgICAgICAgICBzID0gcy5yZXBsYWNlKCIkcHJlZml4IiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLnByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdKSkKKyAgICAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgiJGV4ZWNfcHJlZml4IiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSkpCisgICAgICAgICAgICAgICAgIHMgPSBvcy5wYXRoLm5vcm1wYXRoKHMpCisgICAgICAgICAgICAgICAgIGlnbm9yZV9kaXJzLmFwcGVuZChzKQorSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCitAQCAtODcsNiArODcsNyBAQCBQWV9DRkxBR1M9CSQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKENGTEFHCisgCisgIyBNYWNoaW5lLWRlcGVuZGVudCBzdWJkaXJlY3RvcmllcworIE1BQ0hERVA9CUBNQUNIREVQQAorK0xJQj0JCUBMSUJACisgCisgIyBNdWx0aWFyY2ggZGlyZWN0b3J5IChtYXkgYmUgZW1wdHkpCisgTVVMVElBUkNIPQlATVVMVElBUkNIQAorQEAgLTEwNiw3ICsxMDcsNyBAQCBMSUJESVI9CQlAbGliZGlyQAorIE1BTkRJUj0JCUBtYW5kaXJACisgSU5DTFVERURJUj0JQGluY2x1ZGVkaXJACisgQ09ORklOQ0xVREVESVI9CSQoZXhlY19wcmVmaXgpL2luY2x1ZGUKKy1TQ1JJUFRESVI9CSQocHJlZml4KS9saWIKKytTQ1JJUFRESVI9CSQocHJlZml4KS9ATElCQAorIAorICMgRGV0YWlsZWQgZGVzdGluYXRpb24gZGlyZWN0b3JpZXMKKyBCSU5MSUJERVNUPQkkKExJQkRJUikvcHl0aG9uJChWRVJTSU9OKQorQEAgLTU5OCw2ICs1OTksNyBAQCBNb2R1bGVzL2dldHBhdGgubzogJChzcmNkaXIpL01vZHVsZXMvZ2V0CisgCQktREVYRUNfUFJFRklYPSciJChleGVjX3ByZWZpeCkiJyBcCisgCQktRFZFUlNJT049JyIkKFZFUlNJT04pIicgXAorIAkJLURWUEFUSD0nIiQoVlBBVEgpIicgXAorKwkJLURMSUI9JyIkKExJQikiJyBcCisgCQktbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9nZXRwYXRoLmMKKyAKKyBNb2R1bGVzL3B5dGhvbi5vOiAkKHNyY2RpcikvTW9kdWxlcy9weXRob24uYworQEAgLTY0MCw3ICs2NDIsNyBAQCAkKEFTVF9DKTogJChBU1RfQVNETCkgJChBU0RMR0VOX0ZJTEVTKQorIFB5dGhvbi9jb21waWxlLm8gUHl0aG9uL3N5bXRhYmxlLm8gUHl0aG9uL2FzdC5vOiAkKEdSQU1NQVJfSCkgJChBU1RfSCkKKyAKKyBQeXRob24vZ2V0cGxhdGZvcm0ubzogJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCistCQkkKENDKSAtYyAkKFBZX0NGTEFHUykgLURQTEFURk9STT0nIiQoTUFDSERFUCkiJyAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKKysJCSQoQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtRFBMQVRGT1JNPSciJChNQUNIREVQKSInIC1ETElCPSciJChMSUIpIicgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisgCisgUHl0aG9uL2ltcG9ydGRsLm86ICQoc3JjZGlyKS9QeXRob24vaW1wb3J0ZGwuYworIAkJJChDQykgLWMgJChQWV9DRkxBR1MpIC1JJChETElOQ0xESVIpIC1vICRAICQoc3JjZGlyKS9QeXRob24vaW1wb3J0ZGwuYworSW5kZXg6IFB5dGhvbi0yLjcuOS9Nb2R1bGVzL2dldHBhdGguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01vZHVsZXMvZ2V0cGF0aC5jCisrKysgUHl0aG9uLTIuNy45L01vZHVsZXMvZ2V0cGF0aC5jCitAQCAtMTE2LDkgKzExNiwxMSBAQAorICNkZWZpbmUgRVhFQ19QUkVGSVggUFJFRklYCisgI2VuZGlmCisgCisrI2RlZmluZSBMSUJfUFlUSE9OIExJQiAiL3B5dGhvbiIgVkVSU0lPTgorKworICNpZm5kZWYgUFlUSE9OUEFUSAorLSNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi9saWIvcHl0aG9uIiBWRVJTSU9OICI6IiBcCistICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiL2xpYi9weXRob24iIFZFUlNJT04gIi9saWItZHlubG9hZCIKKysjZGVmaW5lIFBZVEhPTlBBVEggUFJFRklYICIvIiBMSUJfUFlUSE9OICI6IiBcCisrICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiLyIgTElCX1BZVEhPTiAiL2xpYi1keW5sb2FkIgorICNlbmRpZgorIAorICNpZm5kZWYgTEFORE1BUksKK0BAIC0xMjksNyArMTMxLDcgQEAgc3RhdGljIGNoYXIgcHJlZml4W01BWFBBVEhMRU4rMV07Cisgc3RhdGljIGNoYXIgZXhlY19wcmVmaXhbTUFYUEFUSExFTisxXTsKKyBzdGF0aWMgY2hhciBwcm9ncGF0aFtNQVhQQVRITEVOKzFdOworIHN0YXRpYyBjaGFyICptb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOworLXN0YXRpYyBjaGFyIGxpYl9weXRob25bXSA9ICJsaWIvcHl0aG9uIiBWRVJTSU9OOworK3N0YXRpYyBjaGFyIGxpYl9weXRob25bXSA9IExJQl9QWVRIT047CisgCisgc3RhdGljIHZvaWQKKyByZWR1Y2UoY2hhciAqZGlyKQorSW5kZXg6IFB5dGhvbi0yLjcuOS9QeXRob24vZ2V0cGxhdGZvcm0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisrKysgUHl0aG9uLTIuNy45L1B5dGhvbi9nZXRwbGF0Zm9ybS5jCitAQCAtMTAsMyArMTAsMTMgQEAgUHlfR2V0UGxhdGZvcm0odm9pZCkKKyB7CisgCXJldHVybiBQTEFURk9STTsKKyB9CisrCisrI2lmbmRlZiBMSUIKKysjZGVmaW5lIExJQiAibGliIgorKyNlbmRpZgorKworK2NvbnN0IGNoYXIgKgorK1B5X0dldExpYih2b2lkKQorK3sKKysJcmV0dXJuIExJQjsKKyt9CitJbmRleDogUHl0aG9uLTIuNy45L1B5dGhvbi9zeXNtb2R1bGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL1B5dGhvbi9zeXNtb2R1bGUuYworKysrIFB5dGhvbi0yLjcuOS9QeXRob24vc3lzbW9kdWxlLmMKK0BAIC0xNDM3LDYgKzE0MzcsOCBAQCBfUHlTeXNfSW5pdCh2b2lkKQorICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0Q29weXJpZ2h0KCkpKTsKKyAgICAgU0VUX1NZU19GUk9NX1NUUklORygicGxhdGZvcm0iLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0UGxhdGZvcm0oKSkpOworKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0TGliKCkpKTsKKyAgICAgU0VUX1NZU19GUk9NX1NUUklORygiZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZyhQeV9HZXRQcm9ncmFtRnVsbFBhdGgoKSkpOworICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJwcmVmaXgiLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9wYXJhbGxlbC1tYWtlaW5zdC1jcmVhdGUtYmluZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9wYXJhbGxlbC1tYWtlaW5zdC1jcmVhdGUtYmluZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MWNiNDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3BhcmFsbGVsLW1ha2VpbnN0LWNyZWF0ZS1iaW5kaXIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorV2hlbiB1c2luZyBtYWtlIC1qIHdpdGggdGhlICdpbnN0YWxsJyB0YXJnZXQsIGl0J3MgcG9zc2libGUgZm9yIGFsdGJpbmluc3RhbGwKKyh3aGljaCBub3JtYWxseSBjcmVhdGVzIEJJTkRJUikgYW5kIGxpYmFpbnN0YWxsICh3aGljaCBkb2Vzbid0LCB0aG91Z2ggaXQKK2luc3RhbGxzIHB5dGhvbi1jb25maWcgdGhlcmUpIHRvIHJhY2UsIHJlc3VsdGluZyBpbiBhIGZhaWx1cmUgZHVlIHRvCithdHRlbXB0aW5nIHRvIGluc3RhbGwgcHl0aG9uLWNvbmZpZyBpbnRvIGEgbm9uZXhpc3RlbnQgQklORElSLiBFbnN1cmUgaXQgYWxzbworZXhpc3RzIGluIHRoZSBsaWJhaW5zdGFsbCB0YXJnZXQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gUHl0aG9uLTIuNy4zLm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTIuNy4zL01ha2VmaWxlLnByZS5pbgorQEAgLTEwMDgsNyArMTAwOCw3IEBAIExJQlBMPQkJJChMSUJQKS9jb25maWcKKyBMSUJQQz0JCSQoTElCRElSKS9wa2djb25maWcKKworIGxpYmFpbnN0YWxsOglhbGwgcHl0aG9uLWNvbmZpZworLQlAZm9yIGkgaW4gJChMSUJESVIpICQoTElCUCkgJChMSUJQTCkgJChMSUJQQyk7IFwKKysJQGZvciBpIGluICQoTElCRElSKSAkKExJQlApICQoTElCUEwpICQoTElCUEMpICQoQklORElSKTsgXAorCWRvIFwKKwkJaWYgdGVzdCAhIC1kICQoREVTVERJUikkJGk7IHRoZW4gXAorCQkJZWNobyAiQ3JlYXRpbmcgZGlyZWN0b3J5ICQkaSI7IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vcHl0aG9uLTIuNy4zLXJlbW92ZS1ic2RiLXJwYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9weXRob24tMi43LjMtcmVtb3ZlLWJzZGItcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE2YmUwYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vcHl0aG9uLTIuNy4zLXJlbW92ZS1ic2RiLXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1JlbW92ZSB0aGUgUlBBVEggdG8gYXZvaWQgUUEgaXNzdWUgd2FybmluZy4KKworUlA6IEFkZGVkIHNlY29uZGFyeSB1bm5lY2Vzc2FyeSBycGF0aCB0byB0aGUgbGlzdCAyMDEyLzgvNworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKworCitJbmRleDogUHl0aG9uLTIuNy4zL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4zLm9yaWcvc2V0dXAucHkJMjAxMi0wOC0wNyAxMDo0MTo1OC41NjAxMzI1MjkgKzAwMDAKKysrKyBQeXRob24tMi43LjMvc2V0dXAucHkJMjAxMi0wOC0wNyAxMTowOTo0Ny44NTIwOTQ1MTUgKzAwMDAKK0BAIC0xMDQyLDcgKzEwNDIsNiBAQAorICAgICAgICAgICAgIGV4dHMuYXBwZW5kKEV4dGVuc2lvbignX2JzZGRiJywgWydfYnNkZGIuYyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzID0gWydic2RkYi5oJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1kYmxpYl9kaXIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVfbGlicmFyeV9kaXJzPWRibGliX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzPWRiX2luY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1kYmxpYnMpKQorICAgICAgICAgZWxzZToKK0BAIC0xMjUyLDcgKzEyNTEsNiBAQAorICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJidWlsZGluZyBkYm0gdXNpbmcgYmRiIgorICAgICAgICAgICAgICAgICAgICAgICAgIGRibWV4dCA9IEV4dGVuc2lvbignZGJtJywgWydkYm1tb2R1bGUuYyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9ZGJsaWJfZGlyLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycz1kYmxpYl9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycz1kYl9pbmNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbWFjcm9zPVsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnSEFWRV9CRVJLREJfSCcsIE5vbmUpLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmY5ZWVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9ydW4tcHRlc3QKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKyMKKyNUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIHJ1biBweXRob24gdGVzdCBzdWl0ZXMKKworbWFrZSAtZiBMSUJESVIvcHl0aG9uL3B0ZXN0L01ha2VmaWxlIC1rIHJ1bnRlc3QtVEVTVFMgc3JjZGlyPUxJQkRJUi9weXRob24yLjcgVEVTVFBST0c9TElCRElSL3B5dGhvbjIuNy90ZXN0L3JlZ3J0ZXN0LnB5IHwgc2VkIC1lICcvXC5cLlwuIG9rLyBzL14vUEFTUzogL2cnIC1lICcvXC5cLlwuIFtFUlJPUnxGQUlMXS8gcy9eL0ZBSUw6IC9nJyAtZSAnL1wuXC5cLiBza2lwcGVkLyBzL14vU0tJUDogL2cnIC1lICdzLyBcLlwuXC4gb2svL2cnIC1lICdzLyBcLlwuXC4gRVJST1IvL2cnIC1lICdzLyBcLlwuXC4gRkFJTC8vZycgLWUgJ3MvIFwuXC5cLiBza2lwcGVkLy9nJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zZWFyY2hfZGJfaF9pbl9pbmNfZGlyc19hbmRfYXZvaWRfd2FybmluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2VhcmNoX2RiX2hfaW5faW5jX2RpcnNfYW5kX2F2b2lkX3dhcm5pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFjYjU1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2VhcmNoX2RiX2hfaW5faW5jX2RpcnNfYW5kX2F2b2lkX3dhcm5pbmcucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorcHl0aG9uIHNob3VsZCBzZWFyY2ggZm9yIGRiLmggaW4gaW5jX2RpcnMgYW5kIG5vdCBpbiBhIGhhcmRjb2RlZCBwYXRoLgorSWYgZGIuaCBpcyBmb3VuZCBidXQgSEFTSFZFUlNJT04gaXMgbm90IDIgd2UgYXZvaWQgYSB3YXJuaW5nIGJ5IG5vdCAKK2FkZGluZyB0aGlzIG1vZHVsZSB0byBtaXNzaW5nIHZhcmlhYmxlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbl0KKworU2lnbmVkLW9mZi1ieTogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorCisKK2RpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CitpbmRleCBiODg3ODA4Li5hZTUxNjA3IDEwMDY0NAorLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtMTIzNyw2ICsxMjM3LDggQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgIyB0aGUgbW9yZSByZWNlbnQgYmVya2VsZXlkYidzIGRiLmggZmlsZSBmaXJzdCBpbiB0aGUgaW5jbHVkZSBwYXRoCisgICAgICAgICAjIHdoZW4gYXR0ZW1wdGluZyB0byBjb21waWxlIGFuZCBpdCB3aWxsIGZhaWwuCisgICAgICAgICBmID0gIi91c3IvaW5jbHVkZS9kYi5oIgorKyAgICAgICAgaWYgbGVuKGluY19kaXJzKSAhPSAwOgorKyAgICAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4oaW5jX2RpcnNbMF0sICJkYi5oIikKKyAKKyAgICAgICAgIGlmIGhvc3RfcGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICAgaWYgaXNfbWFjb3N4X3Nka19wYXRoKGYpOgorQEAgLTEyNTcsOCArMTI1OSwxMCBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPWxpYnJhcmllcykpCisgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICBleHRzLmFwcGVuZChFeHRlbnNpb24oJ2JzZGRiMTg1JywgWydic2RkYm1vZHVsZS5jJ10pKQorLSAgICAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdic2RkYjE4NScpCisrICAgICAgICAgICAgIyBJZiBhIG5ld2VyIHZlcnNpb24gaXMgZGV0ZWN0ZWQgZG9uJ3QgcmVwb3J0IGFuIHVzZWxlc3MKKysgICAgICAgICAgICAjIHdhcm5pbmcKKysgICAgICAgICAgICAjZWxzZToKKysgICAgICAgICAgICAjICAgIG1pc3NpbmcuYXBwZW5kKCdic2RkYjE4NScpCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdic2RkYjE4NScpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NldHVwX3B5X3NraXBfY3Jvc3NfaW1wb3J0X2NoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zZXR1cF9weV9za2lwX2Nyb3NzX2ltcG9ydF9jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2NkYjk0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zZXR1cF9weV9za2lwX2Nyb3NzX2ltcG9ydF9jaGVjay5wYXRjaApAQCAtMCwwICsxLDI3IEBACitUaGlzIHBhdGNoIHNraXBzIG92ZXIgdGhlICdpbXBvcnQgY2hlY2snIHNldHVwLnB5IGRvZXMgd2hlbiBidWlsZGluZworZXh0ZW5zaW9ucy4gIFRoaXMgZ2VuZXJhbGx5IHdvbid0IHdvcmsgd2hlbiBjcm9zcy1jb21waWxpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQtc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFRvbSBaYW51c3NpIDx0b20uemFudXNzaUBpbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43LjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9zZXR1cC5weQkyMDExLTExLTA0IDE2OjQ2OjM0LjU1Mzc5NjQxMCAtMDUwMAorKysrIFB5dGhvbi0yLjcuMi9zZXR1cC5weQkyMDExLTExLTA0IDE2OjU5OjQ5LjY5MjgwMjMxMyAtMDUwMAorQEAgLTI4Nyw2ICsyODcsMTUgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHQubmFtZSwgc3lzLmV4Y19pbmZvKClbMV0pKQorICAgICAgICAgICAgIHNlbGYuZmFpbGVkLmFwcGVuZChleHQubmFtZSkKKyAgICAgICAgICAgICByZXR1cm4KKysKKysgICAgICAgICMgSWYgd2UncmUgY3Jvc3MtY29tcGlsaW5nLCB3ZSB3YW50IHRvIHNraXAgdGhlIGltcG9ydCBjaGVjaworKyAgICAgICAgIyBpLmUuIHdlIHNob3VsZG4ndCBiZSBkeW5hbWljYWxseSBsb2FkaW5nIHRhcmdldCBzaGFyZWQgbGlicworKyAgICAgICAgaWYgb3MuZW52aXJvbi5nZXQoJ0NST1NTX0NPTVBJTEUnKSBpcyBub3QgTm9uZToKKysgICAgICAgICAgICBzZWxmLmFubm91bmNlKAorKyAgICAgICAgICAgICAgICAnV0FSTklORzogc2tpcHBpbmcgaW1wb3J0IGNoZWNrIGZvciBjcm9zcy1jb21waWxlZCAiJXMiJyAlCisrICAgICAgICAgICAgICAgIGV4dC5uYW1lKQorKyAgICAgICAgICAgIHJldHVybgorKworICAgICAgICAgIyBXb3JrYXJvdW5kIGZvciBNYWMgT1MgWDogVGhlIENhcmJvbi1iYXNlZCBtb2R1bGVzIGNhbm5vdCBiZQorICAgICAgICAgIyByZWxpYWJseSBpbXBvcnRlZCBpbnRvIGEgY29tbWFuZC1saW5lIFB5dGhvbgorICAgICAgICAgaWYgJ0NhcmJvbicgaW4gZXh0LmV4dHJhX2xpbmtfYXJnczoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2V0dXB0d2Vha3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NldHVwdHdlYWtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOTFiMTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NldHVwdHdlYWtzLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK1RoaXMgcGF0Y2ggcmVtb3ZlcyB2YXJpb3VzIHdheXMgbmF0aXZlIHN5c3RlbSBvcHRpb25zIGNhbiBwYXNzIGludG8gdGhlIHB5dGhvbiAKK2NvbXBpbGF0aW9uIGFuZCBzb21laG93IGJyZWFrIEMgbW9kdWxlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBTcGVjaWZpY10KKworUlAgMjAxMi8wNC8yMworCitJbmRleDogUHl0aG9uLTIuNy4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4yLm9yaWcvc2V0dXAucHkJMjAxMi0wNC0yMyAyMDowMzo0Ny4yOTU1ODI1NTMgKzAwMDAKKysrKyBQeXRob24tMi43LjIvc2V0dXAucHkJMjAxMi0wNC0yMyAyMDowMzoxNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMzEsNyArMjMxLDEzIEBACisgICAgICAgICAjIGNvbXBpbGVycworICAgICAgICAgaWYgY29tcGlsZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgKGNjc2hhcmVkLGNmbGFncykgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKCdDQ1NIQVJFRCcsJ0NGTEFHUycpCistICAgICAgICAgICAgYXJnc1snY29tcGlsZXJfc28nXSA9IGNvbXBpbGVyICsgJyAnICsgY2NzaGFyZWQgKyAnICcgKyBjZmxhZ3MKKysgICAgICAgICAgICAjIE5lZWQgdG8gZmlsdGVyIG91dCAtaXN5c3Jvb3QgZnJvbSB0aGUgZmxhZ3MuIElkZWFsbHkgc2hvdWxkIAorKyAgICAgICAgICAgICMgZmlndXJlIG91dCB0YXJnZXQgZmxhZ3MgaGVyZS4KKysgICAgICAgICAgICBmbGFncyA9IFtdCisrICAgICAgICAgICAgZm9yIGYgaW4gY2ZsYWdzLnNwbGl0KCk6CisrICAgICAgICAgICAgICAgIGlmIG5vdCBmLnN0YXJ0c3dpdGgoIi1pc3lzdGVtIik6CisrICAgICAgICAgICAgICAgICAgICBmbGFncy5hcHBlbmQoZikKKysgICAgICAgICAgICBhcmdzWydjb21waWxlcl9zbyddID0gY29tcGlsZXIgKyAnICcgKyBjY3NoYXJlZCArICcgJyArICcgJy5qb2luKGZsYWdzKQorICAgICAgICAgc2VsZi5jb21waWxlci5zZXRfZXhlY3V0YWJsZXMoKiphcmdzKQorIAorICAgICAgICAgYnVpbGRfZXh0LmJ1aWxkX2V4dGVuc2lvbnMoc2VsZikKK0BAIC0zOTMsNyArMzk5LDYgQEAKKyAgICAgICAgICMgaW50byBjb25maWd1cmUgYW5kIHN0b3JlZCBpbiB0aGUgTWFrZWZpbGUgKGlzc3VlIGZvdW5kIG9uIE9TIFggMTAuMykuCisgICAgICAgICBmb3IgZW52X3ZhciwgYXJnX25hbWUsIGRpcl9saXN0IGluICgKKyAgICAgICAgICAgICAgICAgKCdMREZMQUdTJywgJy1SJywgc2VsZi5jb21waWxlci5ydW50aW1lX2xpYnJhcnlfZGlycyksCistICAgICAgICAgICAgICAgICgnTERGTEFHUycsICctTCcsIHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzKSwKKyAgICAgICAgICAgICAgICAgKCdDUFBGTEFHUycsICctSScsIHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzKSk6CisgICAgICAgICAgICAgZW52X3ZhbCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcihlbnZfdmFyKQorICAgICAgICAgICAgIGlmIGVudl92YWw6CitAQCAtNDE5LDE2ICs0MjQsMTYgQEAKKyAgICAgICAgICAgICAgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gcmV2ZXJzZWQob3B0aW9ucy5kaXJzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3QoZGlyX2xpc3QsIGRpcmVjdG9yeSkKKyAKKy0gICAgICAgIGlmIG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkgIT0gJy91c3InIFwKKy0gICAgICAgICAgICAgICAgYW5kIG5vdCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1BZVEhPTkZSQU1FV09SSycpOgorKyMgICAgICAgIGlmIG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkgIT0gJy91c3InIFwKKysjICAgICAgICAgICAgICAgIGFuZCBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQWVRIT05GUkFNRVdPUksnKToKKyAgICAgICAgICAgICAjIE9TWCBub3RlOiBEb24ndCBhZGQgTElCRElSIGFuZCBJTkNMVURFRElSIHRvIGJ1aWxkaW5nIGEgZnJhbWV3b3JrCisgICAgICAgICAgICAgIyAoUFlUSE9ORlJBTUVXT1JLIGlzIHNldCkgdG8gYXZvaWQgIyBsaW5raW5nIHByb2JsZW1zIHdoZW4KKyAgICAgICAgICAgICAjIGJ1aWxkaW5nIGEgZnJhbWV3b3JrIHdpdGggZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgdGhhbgorICAgICAgICAgICAgICMgdGhlIG9uZSB0aGF0IGlzIGN1cnJlbnRseSBpbnN0YWxsZWQgKGlzc3VlICM3NDczKQorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJMSUJESVIiKSkKKy0gICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiSU5DTFVERURJUiIpKQorKyMgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsCisrIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkxJQkRJUiIpKQorKyMgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsCisrIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIklOQ0xVREVESVIiKSkKKyAKKyAgICAgICAgIHRyeToKKyAgICAgICAgICAgICBoYXZlX3VuaWNvZGUgPSB1bmljb2RlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NpdGVjdXN0b21pemUucHkgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NpdGVjdXN0b21pemUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjczOTAxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2l0ZWN1c3RvbWl6ZS5weQpAQCAtMCwwICsxLDQ1IEBACisjIE9wZW5FbWJlZGRlZCBzaXRlY3VzdG9taXplLnB5IChDKSAyMDAyLTIwMDggTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWxhdWVyQHZhbmlsbGUtbWVkaWEuZGU+CisjIEdQTHYyIG9yIGxhdGVyCisjIFZlcnNpb246IDIwMDgxMTIzCisjIEZlYXR1cmVzOgorIyAqIHNldCBwcm9wZXIgZGVmYXVsdCBlbmNvZGluZworIyAqIGVuYWJsZSByZWFkbGluZSBjb21wbGV0aW9uIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcgorIyAqIGxvYWQgY29tbWFuZCBsaW5lIGhpc3Rvcnkgb24gc3RhcnR1cAorIyAqIHNhdmUgY29tbWFuZCBsaW5lIGhpc3Rvcnkgb24gZXhpdCAKKworaW1wb3J0IG9zCisKK2RlZiBfX2V4aXRoYW5kbGVyKCk6CisgICAgdHJ5OgorICAgICAgICByZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUoICIlcy8ucHl0aG9uLWhpc3RvcnkiICUgb3MuZ2V0ZW52KCAiSE9NRSIsICIvdG1wIiApICkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcGFzcworCitkZWYgX19yZWdpc3RlckV4aXRIYW5kbGVyKCk6CisgICAgaW1wb3J0IGF0ZXhpdAorICAgIGF0ZXhpdC5yZWdpc3RlciggX19leGl0aGFuZGxlciApCisKK2RlZiBfX2VuYWJsZVJlYWRsaW5lU3VwcG9ydCgpOgorICAgIHJlYWRsaW5lLnNldF9oaXN0b3J5X2xlbmd0aCggMTAwMCApCisgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoICJ0YWI6IGNvbXBsZXRlIiApCisgICAgdHJ5OgorICAgICAgICByZWFkbGluZS5yZWFkX2hpc3RvcnlfZmlsZSggIiVzLy5weXRob24taGlzdG9yeSIgJSBvcy5nZXRlbnYoICJIT01FIiwgIi90bXAiICkgKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBwYXNzCisKK2RlZiBfX2VuYWJsZURlZmF1bHRFbmNvZGluZygpOgorICAgIGltcG9ydCBzeXMKKyAgICB0cnk6CisgICAgICAgIHN5cy5zZXRkZWZhdWx0ZW5jb2RpbmcoICJ1dGY4IiApCisgICAgZXhjZXB0IExvb2t1cEVycm9yOgorICAgICAgICBwYXNzCisKK2ltcG9ydCBzeXMKK3RyeToKKyAgICBpbXBvcnQgcmxjb21wbGV0ZXIsIHJlYWRsaW5lCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBfX2VuYWJsZURlZmF1bHRFbmNvZGluZygpCisgICAgX19yZWdpc3RlckV4aXRIYW5kbGVyKCkKKyAgICBfX2VuYWJsZVJlYWRsaW5lU3VwcG9ydCgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3VzZV9zeXNyb290X25jdXJzZXNfaW5zdGVhZF9vZl9ob3N0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi91c2Vfc3lzcm9vdF9uY3Vyc2VzX2luc3RlYWRfb2ZfaG9zdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzY1Nzg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi91c2Vfc3lzcm9vdF9uY3Vyc2VzX2luc3RlYWRfb2ZfaG9zdC5wYXRjaApAQCAtMCwwICsxLDIwIEBACitQeXRob24gdHJpZXMgdG8gdXNlIG5jdXJzZXN3IGZyb20gdGhlIGhvc3QsCitpZiBpdCBpcyBub3QgZm91bmQgY2F1c2VzIGFuIGVycm9yIG9uIGNvbmZpZ3VyZSwKK3dlIHNob3VsZCB1c2UgbmN1cnNlc3cgZnJvbSBzeXNyb290IGluc3RlYWQKKworCitTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuOS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9jb25maWd1cmUuYWMKKysrKyBQeXRob24tMi43LjkvY29uZmlndXJlLmFjCitAQCAtNDMxMSw3ICs0MzExLDcgQEAgZmkKKyAKKyAjIGZpcnN0IGN1cnNlcyBjb25maWd1cmUgY2hlY2sKKyBhY19zYXZlX2NwcGZsYWdzPSIkQ1BQRkxBR1MiCistQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSS91c3IvaW5jbHVkZS9uY3Vyc2VzdyIKKytDUFBGTEFHUz0iJENQUEZMQUdTIC1JPS91c3IvaW5jbHVkZS9uY3Vyc2VzdyIKKyAKKyBBQ19DSEVDS19IRUFERVJTKGN1cnNlcy5oIG5jdXJzZXMuaCkKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5hdGl2ZV8zLjQuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5hdGl2ZV8zLjQuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjRmZjA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtbmF0aXZlXzMuNC4zLmJiCkBAIC0wLDAgKzEsNzYgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYworCitQUiA9ICIke0lOQ19QUn0uMCIKK1BZVEhPTl9NQUpNSU4gPSAiMy40IgorRElTVFJPX1NSQ19VUkkgPz0gImZpbGU6Ly9zaXRlY3VzdG9taXplLnB5IgorRElTVFJPX1NSQ19VUklfbGludXhzdGRiYXNlID0gIiIKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQVn0vUHl0aG9uLSR7UFZ9LnRhci54eiBcCitmaWxlOi8vMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoIFwKK2ZpbGU6Ly9weXRob24tY29uZmlnLnBhdGNoIFwKK2ZpbGU6Ly8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaCBcCitmaWxlOi8vMDIwLWRvbnQtY29tcGlsZS1weXRob24tZmlsZXMucGF0Y2ggXAorZmlsZTovLzAzMC1maXh1cC1pbmNsdWRlLWRpcnMucGF0Y2ggXAorZmlsZTovLzA3MC1kb250LWNsZWFuLWlwa2ctaW5zdGFsbC5wYXRjaCBcCitmaWxlOi8vMDgwLWRpc3R1dGlscy1kb250X2FkanVzdF9maWxlcy5wYXRjaCBcCitmaWxlOi8vMTEwLWVuYWJsZS16bGliLnBhdGNoIFwKK2ZpbGU6Ly8xMzAtcmVhZGxpbmUtc2V0dXAucGF0Y2ggXAorZmlsZTovLzE1MC1maXgtc2V0dXB0ZXJtLnBhdGNoIFwKK2ZpbGU6Ly9weXRob24tMy4zLW11bHRpbGliLnBhdGNoIFwKK2ZpbGU6Ly8wMy1maXgtdGtpbnRlci1kZXRlY3Rpb24ucGF0Y2ggXAorZmlsZTovL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaCBcCitmaWxlOi8vc2h1dGlsLWZvbGxvdy1zeW1saW5rLWZpeC5wYXRjaCBcCitmaWxlOi8vMDAwMS1oMnB5LUZpeC1pc3N1ZS0xMzAzMi13aGVyZS1pdC1mYWlscy13aXRoLVVuaWNvZGVEZWNvLnBhdGNoIFwKK2ZpbGU6Ly9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaCBcCitmaWxlOi8vdW5peGNjb21waWxlci5wYXRjaCBcCitmaWxlOi8vbWFrZXJhY2UucGF0Y2ggXAorJHtESVNUUk9fU1JDX1VSSX0gXAorZmlsZTovL3N5c2NvbmZpZy5weS1hZGQtX1BZVEhPTl9QUk9KRUNUX1NSQy5wYXRjaCBcCitmaWxlOi8vc2V0dXAucHktY2hlY2stY3Jvc3NfY29tcGlsaW5nLXdoZW4tZ2V0LUZMQUdTLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ZDA5MmQxYmJhNmUxN2YwZDliZDIxYjQ5ZTQ0MWRkNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNWIzOTYzNTMzNzY4ZDVmYzMyNWE0ZDdhNmJkNmY2NjY3MjYwMDJkNjk2ZjFkMzk5ZWMwNmIwNDNlYTk5NmI4IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1kZDk4ZDAxZDQ3MWZhYzhkOGRiZGQ5NzUyMjlkYmEwMyIKKworUyA9ICIke1dPUktESVJ9L1B5dGhvbi0ke1BWfSIKKworRVhUUkFOQVRJVkVQQVRIICs9ICJiemlwMi1uYXRpdmUiCitERVBFTkRTID0gIm9wZW5zc2wtbmF0aXZlIGJ6aXAyLXJlcGxhY2VtZW50LW5hdGl2ZSB6bGliLW5hdGl2ZSByZWFkbGluZS1uYXRpdmUgc3FsaXRlMy1uYXRpdmUiCisKK2luaGVyaXQgbmF0aXZlCisKK1JQUk9WSURFUyArPSAicHl0aG9uMy1kaXN0dXRpbHMtbmF0aXZlIHB5dGhvbjMtY29tcHJlc3Npb24tbmF0aXZlIHB5dGhvbjMtdGV4dHV0aWxzLW5hdGl2ZSBweXRob24zLWNvcmUtbmF0aXZlIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIiAtLWJpbmRpcj0ke2JpbmRpcn0vJHtQTn0gLS13aXRob3V0LWVuc3VyZXBpcCIKKworRVhUUkFfT0VNQUtFID0gJ1wKKyAgQlVJTERfU1lTPSIiIFwKKyAgSE9TVF9TWVM9IiIgXAorICBMSUJDPSIiIFwKKyAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IFwKKyAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IFwKKyAgTElCPSR7YmFzZWxpYn0gXAorICBBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKKycKKworIyBObyBjdHlwZXMgb3B0aW9uIGZvciBweXRob24gMworUFlUSE9OTFNCT1BUUyA9ICIiCisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJYXV0b3JlY29uZiAtLXZlcmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgLS1leGNsdWRlPWF1dG9wb2ludCAuLi9QeXRob24tJHtQVn0vTW9kdWxlcy9fY3R5cGVzL2xpYmZmaQorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wa2djb25maWcKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKwlpZiBbIC1lICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfQorCWZpCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LyR7UE59CisJaW5zdGFsbCAtbSAwNzU1IFBhcnNlci9wZ2VuICR7RH0ke2JpbmRpcn0vJHtQTn0KKworCSMgTWFrZSBzdXJlIHdlIHVzZSAvdXNyL2Jpbi9lbnYgcHl0aG9uCisJZm9yIFBZVEhTQ1JJUFQgaW4gYGdyZXAgLXJJbCAke2JpbmRpcn0vJHtQTn0vcHl0aG9uICR7RH0ke2JpbmRpcn0vJHtQTn1gOyBkbworCQlzZWQgLWkgLWUgJzFzfF4jIS4qfCMhL3Vzci9iaW4vZW52IHB5dGhvbjN8JyAkUFlUSFNDUklQVAorCWRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBpcF82LjEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBpcF82LjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmZjMzBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGlwXzYuMS4xLmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiVGhlIFB5UEEgcmVjb21tZW5kZWQgdG9vbCBmb3IgaW5zdGFsbGluZyBQeXRob24gcGFja2FnZXMiCitzSE9NRVBBR0Vzc3MgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9waXAiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTQ1NjY1YjUzMDMyYzAyYjM1ZTI5ZGRhYjhlNjFmYTkxIgorCitTUkNOQU1FID0gInBpcCIKK0RFUEVORFMgKz0gInB5dGhvbjMgcHl0aG9uMy1zZXR1cHRvb2xzLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIgXAorICBodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9wLyR7U1JDTkFNRX0vJHtTUkNOQU1FfS0ke1BWfS50YXIuZ3ogXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjZiMTllMGE5MzRkOTgyYTVhNGI3OThlOTU3Y2I2ZDQ1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg5ZjNiNjI2ZDIyNWUwOGU3ZjIwZDg1MDQ0YWZhNDBmNjEyZWIzMjg0NDg0MTY5ODEzZGMyZDA2MzFmMmE1NTYiCisKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlsczMKKworRElTVFVUSUxTX0lOU1RBTExfQVJHUyArPSAiLS1pbnN0YWxsLWxpYj0ke0R9JHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcyIKKworZG9faW5zdGFsbF9wcmVwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzCit9CisKKyMgVXNlIHNldHVwdG9vbHMgc2l0ZS5weSBpbnN0ZWFkLCBhdm9pZCBzaGFyZWQgc3RhdGUgaXNzdWUKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIHJtICR7RH0vJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcy9zaXRlLnB5CisgICAgcm0gJHtEfS8ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzL19fcHljYWNoZV9fL3NpdGUuY3B5dGhvbi0zNC5weWMKK30KKworUkRFUEVORFNfJHtQTn0gPSAiXAorICBweXRob24zLWNvbXBpbGUgXAorICBweXRob24zLWlvIFwKKyAgcHl0aG9uMy1qc29uIFwKKyAgcHl0aG9uMy1uZXRzZXJ2ZXIgXAorICBweXRob24zLXNldHVwdG9vbHMgXAorICBweXRob24zLXVuaXhhZG1pbiBcCisgIHB5dGhvbjMteG1scnBjIFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNldHVwdG9vbHNfMTguMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNldHVwdG9vbHNfMTguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzBhYzgwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtc2V0dXB0b29sc18xOC4yLmJiCkBAIC0wLDAgKzEsNTUgQEAKK1NVTU1BUlkgPSAiRG93bmxvYWQsIGJ1aWxkLCBpbnN0YWxsLCB1cGdyYWRlLCBhbmQgdW5pbnN0YWxsIFB5dGhvbiBwYWNrYWdlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9wYWNrYWdlcy5weXRob24ub3JnL3NldHVwdG9vbHMiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiUFNGIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc2V0dXAucHk7YmVnaW5saW5lPTc4O2VuZGxpbmU9Nzg7bWQ1PThhMzE0MjcwZGQ3YThkYmNhNzQxNzc1NDE1ZjE3MTZlIgorCitTUkNOQU1FID0gInNldHVwdG9vbHMiCitERVBFTkRTICs9ICJweXRob24zIgorREVQRU5EU19jbGFzcy1uYXRpdmUgKz0gInB5dGhvbjMtbmF0aXZlIgorCitTUkNfVVJJID0gIiBcCisgIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3MvJHtTUkNOQU1FfS8ke1NSQ05BTUV9LSR7UFZ9LnRhci5neiBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiNTJiNGU0ODkzOWVmMzExZDcyMDRmOGZlOTQwNzY0ZjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDk5NGE1OGRmMjdlYTVkYzUyMzc4MmE2MDEzNTdhMjE5OGI3NDkzZGNjOTlhMzBkNTE4MjdhMjM1ODViNWIxZCIKKworUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzMworCitESVNUVVRJTFNfSU5TVEFMTF9BUkdTICs9ICItLWluc3RhbGwtbGliPSR7RH0ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzIgorCitkb19pbnN0YWxsX3ByZXBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9LyR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMKK30KKyMKKyMgIFRoZSBpbnN0YWxsZXIgcHV0cyB0aGUgd3JvbmcgcGF0aCBpbiB0aGUgc2V0dXB0b29scy5wdGggZmlsZS4gIENvcnJlY3QgaXQuCisjCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBybSAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc2V0dXB0b29scy5wdGgKKyAgICBtdiAke0R9JHtiaW5kaXJ9L2Vhc3lfaW5zdGFsbCAke0R9JHtiaW5kaXJ9L2Vhc3kzX2luc3RhbGwKKyAgICBlY2hvICIuLyR7U1JDTkFNRX0tJHtQVn0tcHkke1BZVEhPTl9CQVNFVkVSU0lPTn0uZWdnIiA+ICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zZXR1cHRvb2xzLnB0aAorfQorCitSREVQRU5EU18ke1BOfSA9ICJcCisgIHB5dGhvbjMtZGlzdHV0aWxzIFwKKyAgcHl0aG9uMy1jb21wcmVzc2lvbiBcCisiCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgPSAiXAorICBweXRob24zLWN0eXBlcyBcCisgIHB5dGhvbjMtZGlzdHV0aWxzIFwKKyAgcHl0aG9uMy1lbWFpbCBcCisgIHB5dGhvbjMtaW1wb3J0bGliIFwKKyAgcHl0aG9uMy1udW1iZXJzIFwKKyAgcHl0aG9uMy1jb21wcmVzc2lvbiBcCisgIHB5dGhvbjMtc2hlbGwgXAorICBweXRob24zLXN1YnByb2Nlc3MgXAorICBweXRob24zLXRleHR1dGlscyBcCisgIHB5dGhvbjMtcGtndXRpbCBcCisgIHB5dGhvbjMtdGhyZWFkaW5nIFwKKyAgcHl0aG9uMy1taXNjIFwKKyAgcHl0aG9uMy11bml0dGVzdCBcCisgIHB5dGhvbjMteG1sIFwKKyIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTA2YTU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2gKQEAgLTAsMCArMSw4MyBAQAorV2UgY3Jvc3MgY29tcGlsZSBweXRob24uIFRoaXMgcGF0Y2ggdXNlcyB0b29scyBmcm9tIGhvc3QvbmF0aXZlCitweXRob24gaW5zdGVhZCBvZiBpbi10cmVlIHRvb2xzCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZVtDb25maWd1cmF0aW9uIFNwZWNpZmljXQorCistLS0KKyBNYWtlZmlsZS5wcmUuaW4gfCAgIDI1ICsrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKKy0tLSBhL01ha2VmaWxlLnByZS5pbgorKysrIGIvTWFrZWZpbGUucHJlLmluCitAQCAtMTkzLDYgKzE5Myw3IEBAIExJQk9CSlM9CUBMSUJPQkpTQAorIAorIFBZVEhPTj0JCXB5dGhvbiQoRVhFKQorIEJVSUxEUFlUSE9OPQlweXRob24kKEJVSUxERVhFKQorK0hPU1RQWVRIT049CSQoQlVJTERQWVRIT04pCisgCisgUFlUSE9OX0ZPUl9CVUlMRD1AUFlUSE9OX0ZPUl9CVUlMREAKKyBfUFlUSE9OX0hPU1RfUExBVEZPUk09QF9QWVRIT05fSE9TVF9QTEFURk9STUAKK0BAIC0yMzksNiArMjQwLDcgQEAgTElCRkZJX0lOQ0xVREVESVI9CUBMSUJGRklfSU5DTFVERURJUkAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMgUGFyc2VyCisgUEdFTj0JCVBhcnNlci9wZ2VuJChFWEUpCisrSE9TVFBHRU49CSQoUEdFTikkKEVYRSkKKyAKKyBQU1JDUz0JCVwKKyAJCVBhcnNlci9hY2NlbGVyLmMgXAorQEAgLTQ1MSw3ICs0NTMsNyBAQCBidWlsZF9hbGxfZ2VuZXJhdGVfcHJvZmlsZToKKyAKKyBydW5fcHJvZmlsZV90YXNrOgorIAk6ICMgRklYTUU6IGNhbid0IHJ1biBmb3IgYSBjcm9zcyBidWlsZAorLQkkKFJVTlNIQVJFRCkgLi8kKEJVSUxEUFlUSE9OKSAkKFBST0ZJTEVfVEFTSykKKysJJChSVU5TSEFSRUQpICQoSE9TVFBZVEhPTikgJChQUk9GSUxFX1RBU0spCisgCisgYnVpbGRfYWxsX3VzZV9wcm9maWxlOgorIAkkKE1BS0UpIGFsbCBDRkxBR1M9IiQoQ0ZMQUdTKSAtZnByb2ZpbGUtdXNlIC1mcHJvZmlsZS1jb3JyZWN0aW9uIgorQEAgLTY0MCw3ICs2NDIsNyBAQCAkKElPX09CSlMpOiAkKElPX0gpCisgJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCisgCQlAJChNS0RJUl9QKSBJbmNsdWRlCisgCQkkKE1BS0UpICQoUEdFTikKKy0JCSQoUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpCisrCQkkKEhPU1RQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKKyAkKEdSQU1NQVJfQyk6ICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCisgCQkkKE1BS0UpICQoR1JBTU1BUl9IKQorIAkJdG91Y2ggJChHUkFNTUFSX0MpCitAQCAtODIwLDcgKzgyMiw3IEBAICQoTElCUkFSWV9PQkpTKSAkKE1PRE9CSlMpIE1vZHVsZXMvcHl0aG8KKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgCisgVEVTVE9QVFM9CSQoRVhUUkFURVNUT1BUUykKKy1URVNUUFlUSE9OPQkkKFJVTlNIQVJFRCkgLi8kKEJVSUxEUFlUSE9OKSAkKFRFU1RQWVRIT05PUFRTKQorK1RFU1RQWVRIT049CSQoUlVOU0hBUkVEKSAkKEhPU1RQWVRIT04pICQoVEVTVFBZVEhPTk9QVFMpCisgVEVTVFJVTk5FUj0JJChURVNUUFlUSE9OKSAkKHNyY2RpcikvVG9vbHMvc2NyaXB0cy9ydW5fdGVzdHMucHkKKyBURVNUVElNRU9VVD0JMzYwMAorIAorQEAgLTEyMjksNyArMTIzMSw3IEBAIGZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmU6CSQoTERMSUJSQVJZKQorIAkJZmk7IFwKKyAJZG9uZQorIAkkKExOKSAtZnNuIGluY2x1ZGUvcHl0aG9uJChMRFZFUlNJT04pICQoREVTVERJUikkKHByZWZpeCkvSGVhZGVycworLQlzZWQgJ3MvJVZFUlNJT04lLyciYCQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pIC1jICdpbXBvcnQgcGxhdGZvcm07IHByaW50KHBsYXRmb3JtLnB5dGhvbl92ZXJzaW9uKCkpJ2AiJy9nJyA8ICQoUkVTU1JDRElSKS9JbmZvLnBsaXN0ID4gJChERVNURElSKSQocHJlZml4KS9SZXNvdXJjZXMvSW5mby5wbGlzdAorKwlzZWQgJ3MvJVZFUlNJT04lLyciYCQoUlVOU0hBUkVEKSAkKEhPU1RQWVRIT04pIC1jICdpbXBvcnQgcGxhdGZvcm07IHByaW50KHBsYXRmb3JtLnB5dGhvbl92ZXJzaW9uKCkpJ2AiJy9nJyA8ICQoUkVTU1JDRElSKS9JbmZvLnBsaXN0ID4gJChERVNURElSKSQocHJlZml4KS9SZXNvdXJjZXMvSW5mby5wbGlzdAorIAkkKExOKSAtZnNuICQoVkVSU0lPTikgJChERVNURElSKSQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvVmVyc2lvbnMvQ3VycmVudAorIAkkKExOKSAtZnNuIFZlcnNpb25zL0N1cnJlbnQvJChQWVRIT05GUkFNRVdPUkspICQoREVTVERJUikkKFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIpLyQoUFlUSE9ORlJBTUVXT1JLKQorIAkkKExOKSAtZnNuIFZlcnNpb25zL0N1cnJlbnQvSGVhZGVycyAkKERFU1RESVIpJChQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSKS9IZWFkZXJzCitAQCAtMTI4OCw3ICsxMjkwLDcgQEAgY29uZmlnLnN0YXR1czoJJChzcmNkaXIpL2NvbmZpZ3VyZQorIAorICMgUnVuIHJlaW5kZW50IG9uIHRoZSBsaWJyYXJ5CisgcmVpbmRlbnQ6CistCS4vJChCVUlMRFBZVEhPTikgJChzcmNkaXIpL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQucHkgLXIgJChzcmNkaXIpL0xpYgorKwkkKEhPU1RQWVRIT04pICQoc3JjZGlyKS9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5IC1yICQoc3JjZGlyKS9MaWIKKyAKKyAjIFJlcnVuIGNvbmZpZ3VyZSB3aXRoIHRoZSBzYW1lIG9wdGlvbnMgYXMgaXQgd2FzIHJ1biBsYXN0IHRpbWUsCisgIyBwcm92aWRlZCB0aGUgY29uZmlnLnN0YXR1cyBzY3JpcHQgZXhpc3RzCitAQCAtMTQxNCw3ICsxNDE2LDcgQEAgZnVubnk6CisgCisgIyBQZXJmb3JtIHNvbWUgdmVyaWZpY2F0aW9uIGNoZWNrcyBvbiBhbnkgbW9kaWZpZWQgZmlsZXMuCisgcGF0Y2hjaGVjazoKKy0JJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgJChzcmNkaXIpL1Rvb2xzL3NjcmlwdHMvcGF0Y2hjaGVjay5weQorKwkkKFJVTlNIQVJFRCkgJChIT1NUUFlUSE9OKSAkKHNyY2RpcikvVG9vbHMvc2NyaXB0cy9wYXRjaGNoZWNrLnB5CisgCisgIyBEZXBlbmRlbmNpZXMKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAwMDEtaDJweS1GaXgtaXNzdWUtMTMwMzItd2hlcmUtaXQtZmFpbHMtd2l0aC1Vbmljb2RlRGVjby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAwMDEtaDJweS1GaXgtaXNzdWUtMTMwMzItd2hlcmUtaXQtZmFpbHMtd2l0aC1Vbmljb2RlRGVjby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDZiMjRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwMS1oMnB5LUZpeC1pc3N1ZS0xMzAzMi13aGVyZS1pdC1mYWlscy13aXRoLVVuaWNvZGVEZWNvLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gMmY1YTRjNzA4ZDkwZmE4ZGIyMWY0NDZhZTg3OWNmZjc5Mzg3NDQ4ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIwIE1heSAyMDEzIDIxOjAzOjE2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGgycHk6IEZpeCBpc3N1ZSAxMzAzMiB3aGVyZSBpdCBmYWlscyB3aXRoIFVuaWNvZGVEZWNvZGVFcnJvcgorCit1c2UgdXRmLTggdG8gb3BlbiB0aGUgZmlsZXMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBUb29scy9zY3JpcHRzL2gycHkucHkgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9oMnB5LnB5IGIvVG9vbHMvc2NyaXB0cy9oMnB5LnB5CitpbmRleCA0Zjg3MWQ5Li5hNTNmYmUwIDEwMDc1NQorLS0tIGEvVG9vbHMvc2NyaXB0cy9oMnB5LnB5CisrKysgYi9Ub29scy9zY3JpcHRzL2gycHkucHkKK0BAIC02OSwxMyArNjksMTMgQEAgZGVmIG1haW4oKToKKyAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcjIEdlbmVyYXRlZCBieSBoMnB5IGZyb20gc3RkaW5cbicpCisgICAgICAgICAgICAgcHJvY2VzcyhzeXMuc3RkaW4sIHN5cy5zdGRvdXQpCisgICAgICAgICBlbHNlOgorLSAgICAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgJ3InKQorKyAgICAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgJ3InLCBlbmNvZGluZz0ndXRmLTgnKQorICAgICAgICAgICAgIG91dGZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKQorICAgICAgICAgICAgIGkgPSBvdXRmaWxlLnJmaW5kKCcuJykKKyAgICAgICAgICAgICBpZiBpID4gMDogb3V0ZmlsZSA9IG91dGZpbGVbOmldCisgICAgICAgICAgICAgbW9kbmFtZSA9IG91dGZpbGUudXBwZXIoKQorICAgICAgICAgICAgIG91dGZpbGUgPSBtb2RuYW1lICsgJy5weScKKy0gICAgICAgICAgICBvdXRmcCA9IG9wZW4ob3V0ZmlsZSwgJ3cnKQorKyAgICAgICAgICAgIG91dGZwID0gb3BlbihvdXRmaWxlLCAndycsIGVuY29kaW5nPSd1dGYtOCcpCisgICAgICAgICAgICAgb3V0ZnAud3JpdGUoJyMgR2VuZXJhdGVkIGJ5IGgycHkgZnJvbSAlc1xuJyAlIGZpbGVuYW1lKQorICAgICAgICAgICAgIGZpbGVkaWN0ID0ge30KKyAgICAgICAgICAgICBmb3IgZGlyIGluIHNlYXJjaGRpcnM6CistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDIwLWRvbnQtY29tcGlsZS1weXRob24tZmlsZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMjAtZG9udC1jb21waWxlLXB5dGhvbi1maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2VmMjg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDIwLWRvbnQtY29tcGlsZS1weXRob24tZmlsZXMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRG9udCBjcm9zcyBjb21waWxlIHNpdGUgcGFja2FnZXMKKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlW0VtYmVkZGVkLVNwZWNpZmljXQorCistLS0KKyBNYWtlZmlsZS5wcmUuaW4gfCAgIDE2IC0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTYgZGVsZXRpb25zKC0pCisKKy0tLSBhL01ha2VmaWxlLnByZS5pbgorKysrIGIvTWFrZWZpbGUucHJlLmluCitAQCAtMTA3OCwyNCArMTA3OCw2IEBAIGxpYmluc3RhbGw6CWJ1aWxkX2FsbCAkKHNyY2RpcikvTGliLyQoUEwKKyAJCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvTW9kdWxlcy94eG1vZHVsZS5jIFwKKyAJCQkkKERFU1RESVIpJChMSUJERVNUKS9kaXN0dXRpbHMvdGVzdHMgOyBcCisgCWZpCistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtV2kgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCistCQktZCAkKExJQkRFU1QpIC1mIFwKKy0JCS14ICdiYWRfY29kaW5nfGJhZHN5bnRheHxzaXRlLXBhY2thZ2VzfGxpYjJ0bzMvdGVzdHMvZGF0YScgXAorLQkJJChERVNURElSKSQoTElCREVTVCkKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLVdpIC1PICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorLQkJLWQgJChMSUJERVNUKSAtZiBcCistCQkteCAnYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xsaWIydG8zL3Rlc3RzL2RhdGEnIFwKKy0JCSQoREVTVERJUikkKExJQkRFU1QpCistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtV2kgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCistCQktZCAkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMgLWYgXAorLQkJLXggYmFkc3ludGF4ICQoREVTVERJUikkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLVdpIC1PICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorLQkJLWQgJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzIC1mIFwKKy0JCS14IGJhZHN5bnRheCAkKERFU1RESVIpJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzCisgCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCisgCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvR3JhbW1hci50eHQKKyAJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGRmZDJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKyMgV2UgbmVlZCB0byBzdXBwbHkgU1RBR0lOR19JTkNESVIgaGVyZSwgb3RoZXJ3aXNlIHRoZSBUayBoZWFkZXJzCisjIHdpbGwgbm90IGJlIGZvdW5kLgorIyBTaWduZWQtT2ZmOiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAdmFuaWxsZS5kZT4KKworSW5kZXg6IFB5dGhvbi0zLjMuMHJjMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjMuMHJjMi5vcmlnL3NldHVwLnB5CTIwMTItMDktMjAgMTU6MjQ6MTQuMDA5MTI0MDAzIC0wNzAwCisrKysgUHl0aG9uLTMuMy4wcmMyL3NldHVwLnB5CTIwMTItMDktMjAgMTU6MjU6MDguNDQ5MTI0OTYzIC0wNzAwCitAQCAtMTYyMCw3ICsxNjIwLDcgQEAKKyAgICAgICAgICAgICAgICAgZG90dmVyc2lvbiA9IGRvdHZlcnNpb25bOi0xXSArICcuJyArIGRvdHZlcnNpb25bLTFdCisgICAgICAgICAgICAgdGNsX2luY2x1ZGVfc3ViID0gW10KKyAgICAgICAgICAgICB0a19pbmNsdWRlX3N1YiA9IFtdCistICAgICAgICAgICAgZm9yIGRpciBpbiBpbmNfZGlyczoKKysgICAgICAgICAgICBmb3IgZGlyIGluIFtvcy5nZXRlbnYoIlNUQUdJTkdfSU5DRElSIildOgorICAgICAgICAgICAgICAgICB0Y2xfaW5jbHVkZV9zdWIgKz0gW2RpciArIG9zLnNlcCArICJ0Y2wiICsgZG90dmVyc2lvbl0KKyAgICAgICAgICAgICAgICAgdGtfaW5jbHVkZV9zdWIgKz0gW2RpciArIG9zLnNlcCArICJ0ayIgKyBkb3R2ZXJzaW9uXQorICAgICAgICAgICAgIHRrX2luY2x1ZGVfc3ViICs9IHRjbF9pbmNsdWRlX3N1YgorQEAgLTE2MzksMjIgKzE2MzksNiBAQAorICAgICAgICAgICAgIGlmIGRpciBub3QgaW4gaW5jbHVkZV9kaXJzOgorICAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKGRpcikKKyAKKy0gICAgICAgICMgQ2hlY2sgZm9yIHZhcmlvdXMgcGxhdGZvcm0tc3BlY2lmaWMgZGlyZWN0b3JpZXMKKy0gICAgICAgIGlmIGhvc3RfcGxhdGZvcm0gPT0gJ3N1bm9zNSc6CistICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZCgnL3Vzci9vcGVud2luL2luY2x1ZGUnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9vcGVud2luL2xpYicpCistICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKCcvdXNyL1gxMVI2L2luY2x1ZGUnKToKKy0gICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI2L2luY2x1ZGUnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNi9saWI2NCcpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI2L2xpYicpCistICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKCcvdXNyL1gxMVI1L2luY2x1ZGUnKToKKy0gICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI1L2luY2x1ZGUnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNS9saWInKQorLSAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAjIEFzc3VtZSBkZWZhdWx0IGxvY2F0aW9uIGZvciBYMTEKKy0gICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKCcvdXNyL1gxMS9pbmNsdWRlJykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3IvWDExL2xpYicpCistCisgICAgICAgICAjIElmIEN5Z3dpbiwgdGhlbiB2ZXJpZnkgdGhhdCBYIGlzIGluc3RhbGxlZCBiZWZvcmUgcHJvY2VlZGluZworICAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnY3lnd2luJzoKKyAgICAgICAgICAgICB4MTFfaW5jID0gZmluZF9maWxlKCdYMTEvWGxpYi5oJywgW10sIGluY2x1ZGVfZGlycykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAzMC1maXh1cC1pbmNsdWRlLWRpcnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMzAtZml4dXAtaW5jbHVkZS1kaXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZWFjN2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMzAtZml4dXAtaW5jbHVkZS1kaXJzLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0RvIG5vdCBoYXJkY29kZSAvdXNyIGludG8gaW5jbHVkZSBwYXRocyB3aGVuIGNyb3NzIGNvbXBpbGluZworCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKyAKKy0tLQorIHNldHVwLnB5IHwgICAxNSArKy0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKKworSW5kZXg6IFB5dGhvbi0zLjMuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjMuMi5vcmlnL3NldHVwLnB5CisrKysgUHl0aG9uLTMuMy4yL3NldHVwLnB5CitAQCAtNDQ0LDcgKzQ0NCw4IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICMgb25seSBjaGFuZ2UgdGhpcyBmb3IgY3Jvc3MgYnVpbGRzIGZvciAzLjMsIGlzc3VlcyBvbiBNYWdlaWEKKyAgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKKyAgICAgICAgICAgICBzZWxmLmFkZF9nY2NfcGF0aHMoKQorLSAgICAgICAgc2VsZi5hZGRfbXVsdGlhcmNoX3BhdGhzKCkKKysgICAgICAgIGlmIG5vdCBjcm9zc19jb21waWxpbmc6CisrICAgICAgICAgICAgc2VsZi5hZGRfbXVsdGlhcmNoX3BhdGhzKCkKKyAKKyAgICAgICAgICMgQWRkIHBhdGhzIHNwZWNpZmllZCBpbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIExERkxBR1MgYW5kCisgICAgICAgICAjIENQUEZMQUdTIGZvciBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMuCitAQCAtNDgwLDcgKzQ4MSw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICAgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gcmV2ZXJzZWQob3B0aW9ucy5kaXJzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3QoZGlyX2xpc3QsIGRpcmVjdG9yeSkKKyAKKy0gICAgICAgIGlmIG9zLnBhdGgubm9ybXBhdGgoc3lzLmJhc2VfcHJlZml4KSAhPSAnL3VzcicgXAorKyAgICAgICAgaWYgbm90IGNyb3NzX2NvbXBpbGluZyBhbmQgb3MucGF0aC5ub3JtcGF0aChzeXMuYmFzZV9wcmVmaXgpICE9ICcvdXNyJyBcCisgICAgICAgICAgICAgICAgIGFuZCBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQWVRIT05GUkFNRVdPUksnKToKKyAgICAgICAgICAgICAjIE9TWCBub3RlOiBEb24ndCBhZGQgTElCRElSIGFuZCBJTkNMVURFRElSIHRvIGJ1aWxkaW5nIGEgZnJhbWV3b3JrCisgICAgICAgICAgICAgIyAoUFlUSE9ORlJBTUVXT1JLIGlzIHNldCkgdG8gYXZvaWQgIyBsaW5raW5nIHByb2JsZW1zIHdoZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzA0LWRlZmF1bHQtaXMtb3B0aW1pemVkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDQtZGVmYXVsdC1pcy1vcHRpbWl6ZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4ZjI2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzA0LWRlZmF1bHQtaXMtb3B0aW1pemVkLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKyMgd2hlbiBjb21waWxpbmcgZm9yIGFuIGVtYmVkZGVkIHN5c3RlbSwgd2UgbmVlZCBldmVyeSBiaXQgb2YKKyMgcGVyZm9ybWFuY2Ugd2UgY2FuIGdldC4gZGVmYXVsdCB0byBvcHRpbWl6ZWQgd2l0aCB0aGUgb3B0aW9uCisjIG9mIG9wdC1vdXQuCisjIFNpZ25lZC1PZmY6IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUB2YW5pbGxlLW1lZGlhLmRlPgorCisKKzIwMTIvMDUvMDEKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK1JlYmFzZWQgZm9yIDMuNC4yIDAyLzIwMTUKK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTMuNC4yL1B5dGhvbi9jb21waWxlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9QeXRob24vY29tcGlsZS5jCisrKysgUHl0aG9uLTMuNC4yL1B5dGhvbi9jb21waWxlLmMKK0BAIC0zMCw3ICszMCw3IEBACisgI2luY2x1ZGUgInN5bXRhYmxlLmgiCisgI2luY2x1ZGUgIm9wY29kZS5oIgorIAorLWludCBQeV9PcHRpbWl6ZUZsYWcgPSAwOworK2ludCBQeV9PcHRpbWl6ZUZsYWcgPSAxOworIAorICNkZWZpbmUgREVGQVVMVF9CTE9DS19TSVpFIDE2CisgI2RlZmluZSBERUZBVUxUX0JMT0NLUyA4CitJbmRleDogUHl0aG9uLTMuNC4yL01vZHVsZXMvbWFpbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvTW9kdWxlcy9tYWluLmMKKysrKyBQeXRob24tMy40LjIvTW9kdWxlcy9tYWluLmMKK0BAIC0zOCw3ICszOCw3IEBAIHN0YXRpYyB3Y2hhcl90ICoqb3JpZ19hcmd2OworIHN0YXRpYyBpbnQgIG9yaWdfYXJnYzsKKyAKKyAvKiBjb21tYW5kIGxpbmUgb3B0aW9ucyAqLworLSNkZWZpbmUgQkFTRV9PUFRTIEwiYkJjOmRFaGlJSm06T3FSc1N0dXZWVzp4WDo/IgorKyNkZWZpbmUgQkFTRV9PUFRTIEwiYkJjOmRFaGlJSm06Tk9xUnNTdHV2Vlc6eFg6PyIKKyAKKyAjZGVmaW5lIFBST0dSQU1fT1BUUyBCQVNFX09QVFMKKyAKK0BAIC02NCw2ICs2NCw3IEBAIHN0YXRpYyBjaGFyICp1c2FnZV8yID0gIlwKKyAtbSBtb2QgOiBydW4gbGlicmFyeSBtb2R1bGUgYXMgYSBzY3JpcHQgKHRlcm1pbmF0ZXMgb3B0aW9uIGxpc3QpXG5cCisgLU8gICAgIDogb3B0aW1pemUgZ2VuZXJhdGVkIGJ5dGVjb2RlIHNsaWdodGx5OyBhbHNvIFBZVEhPTk9QVElNSVpFPXhcblwKKyAtT08gICAgOiByZW1vdmUgZG9jLXN0cmluZ3MgaW4gYWRkaXRpb24gdG8gdGhlIC1PIG9wdGltaXphdGlvbnNcblwKKystTiAgICAgOiBkbyBOT1Qgb3B0aW1pemUgZ2VuZXJhdGVkIGJ5dGVjb2RlXG5cCisgLXEgICAgIDogZG9uJ3QgcHJpbnQgdmVyc2lvbiBhbmQgY29weXJpZ2h0IG1lc3NhZ2VzIG9uIGludGVyYWN0aXZlIHN0YXJ0dXBcblwKKyAtcyAgICAgOiBkb24ndCBhZGQgdXNlciBzaXRlIGRpcmVjdG9yeSB0byBzeXMucGF0aDsgYWxzbyBQWVRIT05OT1VTRVJTSVRFXG5cCisgLVMgICAgIDogZG9uJ3QgaW1wbHkgJ2ltcG9ydCBzaXRlJyBvbiBpbml0aWFsaXphdGlvblxuXAorQEAgLTQxOCw4ICs0MTksOCBAQCBQeV9NYWluKGludCBhcmdjLCB3Y2hhcl90ICoqYXJndikKKyAKKyAgICAgICAgIC8qIGNhc2UgJ0onOiByZXNlcnZlZCBmb3IgSnl0aG9uICovCisgCistICAgICAgICBjYXNlICdPJzoKKy0gICAgICAgICAgICBQeV9PcHRpbWl6ZUZsYWcrKzsKKysgICAgICAgIGNhc2UgJ04nOgorKyAgICAgICAgICAgIFB5X09wdGltaXplRmxhZz0wOworICAgICAgICAgICAgIGJyZWFrOworIAorICAgICAgICAgY2FzZSAnQic6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wNzAtZG9udC1jbGVhbi1pcGtnLWluc3RhbGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wNzAtZG9udC1jbGVhbi1pcGtnLWluc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5OTI5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzA3MC1kb250LWNsZWFuLWlwa2ctaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitjb25zaWRlciBvcGtnIGRpcmVjdG9yaWVzIHdoZW4gY2xlYW5pbmcgdXAKKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworLS0tCisgTWFrZWZpbGUucHJlLmluIHwgICAgNiArKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCistLS0gYS9NYWtlZmlsZS5wcmUuaW4KKysrKyBiL01ha2VmaWxlLnByZS5pbgorQEAgLTEzMDYsOCArMTMwNiw4IEBAIHRvdWNoOgorICMgU2FuaXRhdGlvbiB0YXJnZXRzIC0tIGNsZWFuIGxlYXZlcyBsaWJyYXJpZXMsIGV4ZWN1dGFibGVzIGFuZCB0YWdzCisgIyBmaWxlcywgd2hpY2ggY2xvYmJlciByZW1vdmVzIGFzIHdlbGwKKyBweWNyZW1vdmFsOgorLQktZmluZCAkKHNyY2RpcikgLWRlcHRoIC1uYW1lICdfX3B5Y2FjaGVfXycgLWV4ZWMgcm0gLXJmIHt9ICc7JworLQktZmluZCAkKHNyY2RpcikgLW5hbWUgJyoucHlbY29dJyAtZXhlYyBybSAtZiB7fSAnOycKKysJLWZpbmQgJChzcmNkaXIpICEgLXBhdGggJy4vaXBrZy1pbnN0YWxsLyonIC1kZXB0aCAtbmFtZSAnX19weWNhY2hlX18nIC1leGVjIHJtIC1yZiB7fSAnOycKKysJLWZpbmQgJChzcmNkaXIpICEgLXBhdGggJy4vaXBrZy1pbnN0YWxsLyonIC1uYW1lICcqLnB5W2NvXScgLWV4ZWMgcm0gLWYge30gJzsnCisgCisgcm10ZXN0dHVyZHM6CisgCS1ybSAtZiAqQkFEICpHT09EICpTS0lQUEVECitAQCAtMTMyMSw5ICsxMzIxLDkgQEAgZG9jY2xlYW46CisgCS1ybSAtcmYgRG9jL3Rvb2xzL3NwaGlueCBEb2MvdG9vbHMvcHlnbWVudHMgRG9jL3Rvb2xzL2RvY3V0aWxzCisgCisgY2xlYW46IHB5Y3JlbW92YWwKKy0JZmluZCAuIC1uYW1lICcqLltvYV0nIC1leGVjIHJtIC1mIHt9ICc7JworLQlmaW5kIC4gLW5hbWUgJyouc1tvbF0nIC1leGVjIHJtIC1mIHt9ICc7JworLQlmaW5kIC4gLW5hbWUgJyouc28uWzAtOV0qLlswLTldKicgLWV4ZWMgcm0gLWYge30gJzsnCisrCWZpbmQgLiAhIC1wYXRoICcuL2lwa2ctaW5zdGFsbC8qJyAtbmFtZSAnKi5bb2FdJyAtZXhlYyBybSAtZiB7fSAnOycKKysJZmluZCAuICEgLXBhdGggJy4vaXBrZy1pbnN0YWxsLyonIC1uYW1lICcqLnNbb2xdJyAtZXhlYyBybSAtZiB7fSAnOycKKysJZmluZCAuICEgLXBhdGggJy4vaXBrZy1pbnN0YWxsLyonIC1uYW1lICcqLnNvLlswLTldKi5bMC05XSonIC1leGVjIHJtIC1mIHt9ICc7JworIAlmaW5kIGJ1aWxkIC1uYW1lICdmZmljb25maWcuaCcgLWV4ZWMgcm0gLWYge30gJzsnIHx8IHRydWUKKyAJZmluZCBidWlsZCAtbmFtZSAnZmZpY29uZmlnLnB5JyAtZXhlYyBybSAtZiB7fSAnOycgfHwgdHJ1ZQorIAktcm0gLWYgTGliL2xpYjJ0bzMvKkdyYW1tYXIqLnBpY2tsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDgwLWRpc3R1dGlscy1kb250X2FkanVzdF9maWxlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzA4MC1kaXN0dXRpbHMtZG9udF9hZGp1c3RfZmlsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk2NDE5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzA4MC1kaXN0dXRpbHMtZG9udF9hZGp1c3RfZmlsZXMucGF0Y2gKQEAgLTAsMCArMSw5MiBAQAorZG8gbm90ICJhZGp1c3QiIHB5dGhvbiBmaWxlcyBiZWZvcmUgY29weWluZworCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0VtYmVkZGVkLVNwZWNpZmljXQorCistLS0KKyBMaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weSB8ICAgNDMgKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMzkgZGVsZXRpb25zKC0pCisKKy0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CisrKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weQorQEAgLTUxLDEwICs1MSw3IEBAIGNsYXNzIGJ1aWxkX3NjcmlwdHMoQ29tbWFuZCk6CisgCisgCisgICAgIGRlZiBjb3B5X3NjcmlwdHMoc2VsZik6CistICAgICAgICAiIiJDb3B5IGVhY2ggc2NyaXB0IGxpc3RlZCBpbiAnc2VsZi5zY3JpcHRzJzsgaWYgaXQncyBtYXJrZWQgYXMgYQorLSAgICAgICAgUHl0aG9uIHNjcmlwdCBpbiB0aGUgVW5peCB3YXkgKGZpcnN0IGxpbmUgbWF0Y2hlcyAnZmlyc3RfbGluZV9yZScsCistICAgICAgICBpZS4gc3RhcnRzIHdpdGggIlwjISIgYW5kIGNvbnRhaW5zICJweXRob24iKSwgdGhlbiBhZGp1c3QgdGhlIGZpcnN0CistICAgICAgICBsaW5lIHRvIHJlZmVyIHRvIHRoZSBjdXJyZW50IFB5dGhvbiBpbnRlcnByZXRlciBhcyB3ZSBjb3B5LgorKyAgICAgICAgIiIiQ29weSBlYWNoIHNjcmlwdCBsaXN0ZWQgaW4gJ3NlbGYuc2NyaXB0cycKKyAgICAgICAgICIiIgorICAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9kaXIpCisgICAgICAgICBvdXRmaWxlcyA9IFtdCitAQCAtNzgsNjQgKzc1LDEwIEBAIGNsYXNzIGJ1aWxkX3NjcmlwdHMoQ29tbWFuZCk6CisgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRyeV9ydW46CisgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICBmID0gTm9uZQorLSAgICAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgICAgIGVuY29kaW5nLCBsaW5lcyA9IHRva2VuaXplLmRldGVjdF9lbmNvZGluZyhmLnJlYWRsaW5lKQorLSAgICAgICAgICAgICAgICBmLnNlZWsoMCkKKy0gICAgICAgICAgICAgICAgZmlyc3RfbGluZSA9IGYucmVhZGxpbmUoKQorLSAgICAgICAgICAgICAgICBpZiBub3QgZmlyc3RfbGluZToKKy0gICAgICAgICAgICAgICAgICAgIHNlbGYud2FybigiJXMgaXMgYW4gZW1wdHkgZmlsZSAoc2tpcHBpbmcpIiAlIHNjcmlwdCkKKy0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCistCistICAgICAgICAgICAgICAgIG1hdGNoID0gZmlyc3RfbGluZV9yZS5tYXRjaChmaXJzdF9saW5lKQorLSAgICAgICAgICAgICAgICBpZiBtYXRjaDoKKy0gICAgICAgICAgICAgICAgICAgIGFkanVzdCA9IFRydWUKKy0gICAgICAgICAgICAgICAgICAgIHBvc3RfaW50ZXJwID0gbWF0Y2guZ3JvdXAoMSkgb3IgYicnCistCistICAgICAgICAgICAgaWYgYWRqdXN0OgorLSAgICAgICAgICAgICAgICBsb2cuaW5mbygiY29weWluZyBhbmQgYWRqdXN0aW5nICVzIC0+ICVzIiwgc2NyaXB0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkX2RpcikKKy0gICAgICAgICAgICAgICAgdXBkYXRlZF9maWxlcy5hcHBlbmQob3V0ZmlsZSkKKy0gICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuZHJ5X3J1bjoKKy0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzeXNjb25maWcucHl0aG9uX2J1aWxkOgorLSAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBzZWxmLmV4ZWN1dGFibGUKKy0gICAgICAgICAgICAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG9zLnBhdGguam9pbigKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJCSU5ESVIiKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uJXMlcyIgJSAoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJWRVJTSU9OIiksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiRVhFIikpKQorLSAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG9zLmZzZW5jb2RlKGV4ZWN1dGFibGUpCistICAgICAgICAgICAgICAgICAgICBzaGViYW5nID0gYiIjISIgKyBleGVjdXRhYmxlICsgcG9zdF9pbnRlcnAgKyBiIlxuIgorLSAgICAgICAgICAgICAgICAgICAgIyBQeXRob24gcGFyc2VyIHN0YXJ0cyB0byByZWFkIGEgc2NyaXB0IHVzaW5nIFVURi04IHVudGlsCistICAgICAgICAgICAgICAgICAgICAjIGl0IGdldHMgYSAjY29kaW5nOnh4eCBjb29raWUuIFRoZSBzaGViYW5nIGhhcyB0byBiZSB0aGUKKy0gICAgICAgICAgICAgICAgICAgICMgZmlyc3QgbGluZSBvZiBhIGZpbGUsIHRoZSAjY29kaW5nOnh4eCBjb29raWUgY2Fubm90IGJlCistICAgICAgICAgICAgICAgICAgICAjIHdyaXR0ZW4gYmVmb3JlLiBTbyB0aGUgc2hlYmFuZyBoYXMgdG8gYmUgZGVjb2RhYmxlIGZyb20KKy0gICAgICAgICAgICAgICAgICAgICMgVVRGLTguCistICAgICAgICAgICAgICAgICAgICB0cnk6CistICAgICAgICAgICAgICAgICAgICAgICAgc2hlYmFuZy5kZWNvZGUoJ3V0Zi04JykKKy0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CistICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzaGViYW5nICh7IXJ9KSBpcyBub3QgZGVjb2RhYmxlICIKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyb20gdXRmLTgiLmZvcm1hdChzaGViYW5nKSkKKy0gICAgICAgICAgICAgICAgICAgICMgSWYgdGhlIHNjcmlwdCBpcyBlbmNvZGVkIHRvIGEgY3VzdG9tIGVuY29kaW5nICh1c2UgYQorLSAgICAgICAgICAgICAgICAgICAgIyAjY29kaW5nOnh4eCBjb29raWUpLCB0aGUgc2hlYmFuZyBoYXMgdG8gYmUgZGVjb2RhYmxlIGZyb20KKy0gICAgICAgICAgICAgICAgICAgICMgdGhlIHNjcmlwdCBlbmNvZGluZyB0b28uCistICAgICAgICAgICAgICAgICAgICB0cnk6CistICAgICAgICAgICAgICAgICAgICAgICAgc2hlYmFuZy5kZWNvZGUoZW5jb2RpbmcpCistICAgICAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc2hlYmFuZyAoeyFyfSkgaXMgbm90IGRlY29kYWJsZSAiCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcm9tIHRoZSBzY3JpcHQgZW5jb2RpbmcgKHt9KSIKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzaGViYW5nLCBlbmNvZGluZykpCistICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3V0ZmlsZSwgIndiIikgYXMgb3V0ZjoKKy0gICAgICAgICAgICAgICAgICAgICAgICBvdXRmLndyaXRlKHNoZWJhbmcpCistICAgICAgICAgICAgICAgICAgICAgICAgb3V0Zi53cml0ZWxpbmVzKGYucmVhZGxpbmVzKCkpCistICAgICAgICAgICAgICAgIGlmIGY6CistICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKy0gICAgICAgICAgICBlbHNlOgorLSAgICAgICAgICAgICAgICBpZiBmOgorKyAgICAgICAgICAgIGlmIGY6CisgICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKy0gICAgICAgICAgICAgICAgdXBkYXRlZF9maWxlcy5hcHBlbmQob3V0ZmlsZSkKKy0gICAgICAgICAgICAgICAgc2VsZi5jb3B5X2ZpbGUoc2NyaXB0LCBvdXRmaWxlKQorKyAgICAgICAgICAgIHVwZGF0ZWRfZmlsZXMuYXBwZW5kKG91dGZpbGUpCisrICAgICAgICAgICAgc2VsZi5jb3B5X2ZpbGUoc2NyaXB0LCBvdXRmaWxlKQorIAorICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgorICAgICAgICAgICAgIGZvciBmaWxlIGluIG91dGZpbGVzOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTEwLWVuYWJsZS16bGliLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTEwLWVuYWJsZS16bGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOTJhMTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMTAtZW5hYmxlLXpsaWIucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorRW5hYmxlIHpsaWIgaW4gcHl0aG9uCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtU3BlY2lmaWNdCisKKy0tLQorIE1vZHVsZXMvU2V0dXAuZGlzdCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvTW9kdWxlcy9TZXR1cC5kaXN0CisrKysgYi9Nb2R1bGVzL1NldHVwLmRpc3QKK0BAIC0zNTQsNyArMzU0LDcgQEAgX3N5bXRhYmxlIHN5bXRhYmxlbW9kdWxlLmMKKyAjIEFuZHJldyBLdWNobGluZydzIHpsaWIgbW9kdWxlLgorICMgVGhpcyByZXF1aXJlIHpsaWIgMS4xLjMgKG9yIGxhdGVyKS4KKyAjIFNlZSBodHRwOi8vd3d3Lmd6aXAub3JnL3psaWIvCistI3psaWIgemxpYm1vZHVsZS5jIC1JJChwcmVmaXgpL2luY2x1ZGUgLUwkKGV4ZWNfcHJlZml4KS9saWIgLWx6CisremxpYiB6bGlibW9kdWxlLmMgLWx6CisgCisgIyBJbnRlcmZhY2UgdG8gdGhlIEV4cGF0IFhNTCBwYXJzZXIKKyAjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwMmRmMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaApAQCAtMCwwICsxLDgxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCiswMi8yMDE1IFJlYmFzZWQgZm9yIFB5dGhvbiAzLjQuMgorCisjIFRoZSBwcm9wZXIgcHJlZml4IGlzIGluc2lkZSBvdXIgc3RhZ2luZyBhcmVhLgorIyBTaWduZWQtT2ZmOiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAdmFuaWxsZS1tZWRpYS5kZT4KKyMgU2lnbmVkLW9mZi1ieTogUGhpbCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4KKyMgU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKyMgU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMy40LjIvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorKysrIFB5dGhvbi0zLjQuMi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorQEAgLTE2LDEwICsxNiwxMSBAQCBpbXBvcnQgc3lzCisgZnJvbSAuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yCisgCisgIyBUaGVzZSBhcmUgbmVlZGVkIGluIGEgY291cGxlIG9mIHNwb3RzLCBzbyBqdXN0IGNvbXB1dGUgdGhlbSBvbmNlLgorLVBSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkKKy1FWEVDX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWNfcHJlZml4KQorLUJBU0VfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuYmFzZV9wcmVmaXgpCistQkFTRV9FWEVDX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmJhc2VfZXhlY19wcmVmaXgpCisrUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorK0VYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY19wcmVmaXgpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCisrQkFTRV9QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5iYXNlX3ByZWZpeCkucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKKytCQVNFX0VYRUNfUFJFRklYPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5iYXNlX2V4ZWNfcHJlZml4KS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorKworIAorICMgUGF0aCB0byB0aGUgYmFzZSBkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QuIE9uIFdpbmRvd3MgdGhlIGJpbmFyeSBtYXkKKyAjIGxpdmUgaW4gcHJvamVjdC9QQ0J1aWxkOS4gIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiB4NjQgV2luZG93cyBidWlsZCwKK0BAIC05Myw3ICs5NCw5IEBAIGRlZiBnZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPTAsIHByZWYKKyAgICAgSWYgJ3ByZWZpeCcgaXMgc3VwcGxpZWQsIHVzZSBpdCBpbnN0ZWFkIG9mIHN5cy5iYXNlX3ByZWZpeCBvcgorICAgICBzeXMuYmFzZV9leGVjX3ByZWZpeCAtLSBpLmUuLCBpZ25vcmUgJ3BsYXRfc3BlY2lmaWMnLgorICAgICAiIiIKKy0gICAgaWYgcHJlZml4IGlzIE5vbmU6CisrICAgIGlmIHByZWZpeCBpcyBOb25lIGFuZCBvcy5lbnZpcm9uWydTVEFHSU5HX0lOQ0RJUiddICE9ICIiOgorKyAgICAgICAgcHJlZml4ID0gb3MuZW52aXJvblsnU1RBR0lOR19JTkNESVInXS5yc3RyaXAoJ2luY2x1ZGUnKQorKyAgICBlbGlmIHByZWZpeCBpcyBOb25lOgorICAgICAgICAgcHJlZml4ID0gcGxhdF9zcGVjaWZpYyBhbmQgQkFTRV9FWEVDX1BSRUZJWCBvciBCQVNFX1BSRUZJWAorICAgICBpZiBvcy5uYW1lID09ICJwb3NpeCI6CisgICAgICAgICBpZiBweXRob25fYnVpbGQ6CitAQCAtMTM0LDYgKzEzNywxMiBAQCBkZWYgZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0wLCBzdGFuCisgICAgIElmICdwcmVmaXgnIGlzIHN1cHBsaWVkLCB1c2UgaXQgaW5zdGVhZCBvZiBzeXMuYmFzZV9wcmVmaXggb3IKKyAgICAgc3lzLmJhc2VfZXhlY19wcmVmaXggLS0gaS5lLiwgaWdub3JlICdwbGF0X3NwZWNpZmljJy4KKyAgICAgIiIiCisrICAgIGlmIHByZWZpeCBpcyBOb25lIGFuZCBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddICE9ICIiOgorKyAgICAgICAgbGliX2Jhc2VuYW1lID0gb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXS5zcGxpdCgnLycpWy0xXQorKyAgICAgICAgcHJlZml4ID0gb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXS5yc3RyaXAobGliX2Jhc2VuYW1lKQorKyAgICBlbHNlOgorKyAgICAgICAgbGliX2Jhc2VuYW1lID0gc3lzLmxpYgorKworICAgICBpZiBwcmVmaXggaXMgTm9uZToKKyAgICAgICAgIGlmIHN0YW5kYXJkX2xpYjoKKyAgICAgICAgICAgICBwcmVmaXggPSBwbGF0X3NwZWNpZmljIGFuZCBCQVNFX0VYRUNfUFJFRklYIG9yIEJBU0VfUFJFRklYCitAQCAtMTQyLDcgKzE1MSw3IEBAIGRlZiBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTAsIHN0YW4KKyAKKyAgICAgaWYgb3MubmFtZSA9PSAicG9zaXgiOgorICAgICAgICAgbGlicHl0aG9uID0gb3MucGF0aC5qb2luKHByZWZpeCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGliIiwgInB5dGhvbiIgKyBnZXRfcHl0aG9uX3ZlcnNpb24oKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJfYmFzZW5hbWUsICJweXRob24iICsgZ2V0X3B5dGhvbl92ZXJzaW9uKCkpCisgICAgICAgICBpZiBzdGFuZGFyZF9saWI6CisgICAgICAgICAgICAgcmV0dXJuIGxpYnB5dGhvbgorICAgICAgICAgZWxzZToKK0BAIC0yNDIsNyArMjUxLDcgQEAgZGVmIGdldF9jb25maWdfaF9maWxlbmFtZSgpOgorICAgICBlbHNlOgorICAgICAgICAgaW5jX2RpciA9IGdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9MSkKKyAKKy0gICAgcmV0dXJuIG9zLnBhdGguam9pbihpbmNfZGlyLCAncHljb25maWcuaCcpCisrICAgIHJldHVybiBvcy5wYXRoLmpvaW4oaW5jX2RpciwgJ3B5Y29uZmlnLmgnLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApKQorIAorIAorIGRlZiBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKToKK0BAIC0yNTEsNyArMjYwLDcgQEAgZGVmIGdldF9tYWtlZmlsZV9maWxlbmFtZSgpOgorICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihfc3lzX2hvbWUgb3IgcHJvamVjdF9iYXNlLCAiTWFrZWZpbGUiKQorICAgICBsaWJfZGlyID0gZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0wLCBzdGFuZGFyZF9saWI9MSkKKyAgICAgY29uZmlnX2ZpbGUgPSAnY29uZmlnLXt9e30nLmZvcm1hdChnZXRfcHl0aG9uX3ZlcnNpb24oKSwgYnVpbGRfZmxhZ3MpCistICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGliX2RpciwgY29uZmlnX2ZpbGUsICdNYWtlZmlsZScpCisrICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGliX2RpciwgY29uZmlnX2ZpbGUsICdNYWtlZmlsZScpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCisgCisgCisgZGVmIHBhcnNlX2NvbmZpZ19oKGZwLCBnPU5vbmUpOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MDU2NTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMzAtcmVhZGxpbmUtc2V0dXAucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorcGFja2FnZSBweXRob24tcmVhZGxpbmUKKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtFbWJlZGRlZCBTcGVjaWZpY10KKworLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtNjY2LDQ1ICs2NjYsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAjIHJlYWRsaW5lCisgICAgICAgICBkb19yZWFkbGluZSA9IHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICdyZWFkbGluZScpCisgICAgICAgICByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnkgPSAiIgorLSAgICAgICAgY3Vyc2VzX2xpYnJhcnkgPSAiIgorLSAgICAgICAgIyBDYW5ub3QgdXNlIG9zLnBvcGVuIGhlcmUgaW4gcHkzay4KKy0gICAgICAgIHRtcGZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF90ZW1wLCAncmVhZGxpbmVfdGVybWNhcF9saWInKQorLSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuYnVpbGRfdGVtcCk6CistICAgICAgICAgICAgb3MubWFrZWRpcnMoc2VsZi5idWlsZF90ZW1wKQorLSAgICAgICAgIyBEZXRlcm1pbmUgaWYgcmVhZGxpbmUgaXMgYWxyZWFkeSBsaW5rZWQgYWdhaW5zdCBjdXJzZXMgb3IgdGluZm8uCistICAgICAgICBpZiBkb19yZWFkbGluZToKKy0gICAgICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CistICAgICAgICAgICAgICAgIHJldCA9IG9zLnN5c3RlbSgiJXMgLWQgJXMgfCBncmVwICcoTkVFREVEKScgPiAlcyIgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdSRUFERUxGJyksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19yZWFkbGluZSwgdG1wZmlsZSkpCistICAgICAgICAgICAgZWxpZiBmaW5kX2V4ZWN1dGFibGUoJ2xkZCcpOgorLSAgICAgICAgICAgICAgICByZXQgPSBvcy5zeXN0ZW0oImxkZCAlcyA+ICVzIiAlIChkb19yZWFkbGluZSwgdG1wZmlsZSkpCistICAgICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAgICAgcmV0ID0gMjU2CistICAgICAgICAgICAgaWYgcmV0ID4+IDggPT0gMDoKKy0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKHRtcGZpbGUpIGFzIGZwOgorLSAgICAgICAgICAgICAgICAgICAgZm9yIGxuIGluIGZwOgorLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICdjdXJzZXMnIGluIGxuOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnkgPSByZS5zdWIoCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByJy4qbGliKG4/Y3Vyc2Vzdz8pXC5zby4qJywgcidcMScsIGxuCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICkucnN0cmlwKCkKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKy0gICAgICAgICAgICAgICAgICAgICAgICAjIHRlcm1jYXAgaW50ZXJmYWNlIHNwbGl0IG91dCBmcm9tIG5jdXJzZXMKKy0gICAgICAgICAgICAgICAgICAgICAgICBpZiAndGluZm8nIGluIGxuOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnkgPSAndGluZm8nCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCistICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModG1wZmlsZSk6CistICAgICAgICAgICAgICAgIG9zLnVubGluayh0bXBmaWxlKQorLSAgICAgICAgIyBJc3N1ZSA3Mzg0OiBJZiByZWFkbGluZSBpcyBhbHJlYWR5IGxpbmtlZCBhZ2FpbnN0IGN1cnNlcywKKy0gICAgICAgICMgdXNlIHRoZSBzYW1lIGxpYnJhcnkgZm9yIHRoZSByZWFkbGluZSBhbmQgY3Vyc2VzIG1vZHVsZXMuCistICAgICAgICBpZiAnY3Vyc2VzJyBpbiByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnk6CistICAgICAgICAgICAgY3Vyc2VzX2xpYnJhcnkgPSByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnkKKy0gICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywgJ25jdXJzZXN3Jyk6CistICAgICAgICAgICAgY3Vyc2VzX2xpYnJhcnkgPSAnbmN1cnNlc3cnCistICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICduY3Vyc2VzJyk6CistICAgICAgICAgICAgY3Vyc2VzX2xpYnJhcnkgPSAnbmN1cnNlcycKKy0gICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywgJ2N1cnNlcycpOgorLSAgICAgICAgICAgIGN1cnNlc19saWJyYXJ5ID0gJ2N1cnNlcycKKysgICAgICAgIGN1cnNlc19saWJyYXJ5ID0gIm5jdXJzZXMiCisgCisgICAgICAgICBpZiBob3N0X3BsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgIG9zX3JlbGVhc2UgPSBpbnQob3MudW5hbWUoKVsyXS5zcGxpdCgnLicpWzBdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTUwLWZpeC1zZXR1cHRlcm0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xNTAtZml4LXNldHVwdGVybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGQ3Yzc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTUwLWZpeC1zZXR1cHRlcm0ucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorRml4IHdhcm5pbmcgd2l0aCBuZXdlciBjb21waWxlcgorCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGEvTW9kdWxlcy9fY3Vyc2VzbW9kdWxlLmMKKysrKyBiL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCitAQCAtMTE2LDcgKzExNiw3IEBAIGNoYXIgKlB5Q3Vyc2VzVmVyc2lvbiA9ICIyLjIiOworICAgICAjZGVmaW5lcyBtYW55IGNvbW1vbiBzeW1ib2xzIChzdWNoIGFzICJsaW5lcyIpIHdoaWNoIGJyZWFrcyB0aGUKKyAgICAgY3Vyc2VzIG1vZHVsZSBpbiBvdGhlciB3YXlzLiAgU28gdGhlIGNvZGUgd2lsbCBqdXN0IHNwZWNpZnkKKyAgICAgZXhwbGljaXQgcHJvdG90eXBlcyBoZXJlLiAqLworLWV4dGVybiBpbnQgc2V0dXB0ZXJtKGNoYXIgKixpbnQsaW50ICopOworKy8vZXh0ZXJuIGludCBzZXR1cHRlcm0oY2hhciAqLGludCxpbnQgKik7CisgI2lmZGVmIF9fc2dpCisgI2luY2x1ZGUgPHRlcm0uaD4KKyAjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2F2b2lkLW5jdXJzZXN3LWluY2x1ZGUtcGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2F2b2lkLW5jdXJzZXN3LWluY2x1ZGUtcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjlhZTUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvYXZvaWQtbmN1cnNlc3ctaW5jbHVkZS1wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgc3lzcm9vdCBpcyB1c2VkIGJ5IGdjYyBpbnN0ZWFkIG9mIGFzc3VtaW5nCitoYXJkY29kZWQgbG9jYXRpb25zIGZvciBpbmNsdWRlIHBhdGhzCisKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0zLjQuMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9jb25maWd1cmUuYWMKKysrKyBQeXRob24tMy40LjIvY29uZmlndXJlLmFjCitAQCAtNDQzNCw3ICs0NDM0LDcgQEAgZmkKKyAKKyAjIGZpcnN0IGN1cnNlcyBoZWFkZXIgY2hlY2sKKyBhY19zYXZlX2NwcGZsYWdzPSIkQ1BQRkxBR1MiCistQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSS91c3IvaW5jbHVkZS9uY3Vyc2VzdyIKKytDUFBGTEFHUz0iJENQUEZMQUdTIC1JPS91c3IvaW5jbHVkZS9uY3Vyc2VzdyIKKyAKKyBBQ19DSEVDS19IRUFERVJTKGN1cnNlcy5oIG5jdXJzZXMuaCkKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDhjNTdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK190a2ludGVyIG1vZHVsZSBuZWVkcyB0ayBtb2R1bGUgYWxvbmcgd2l0aCB0Y2wuIHRrIGlzIG5vdCB5ZXQgaW50ZWdyYXRlZAoraW4geW9jdG8gc28gd2Ugc2tpcCB0aGUgY2hlY2sgZm9yIHRoaXMgbW9kdWxlLgorQXZvaWQgYSB3YXJuaW5nIGJ5IG5vdCBhZGRpbmcgdGhpcyBtb2R1bGUgdG8gbWlzc2luZyB2YXJpYWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KKworSW5kZXg6IFB5dGhvbi0yLjcuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMi5vcmlnL3NldHVwLnB5CTIwMTItMDQtMDUgMjM6MTg6MzguNTAwMTM2NjQ3ICswMzAwCisrKysgUHl0aG9uLTIuNy4yL3NldHVwLnB5CTIwMTItMDQtMDUgMjM6MTk6MzUuODg4MTM0OTY5ICswMzAwCitAQCAtMTYzNCw4ICsxNjM0LDEwIEBACisgICAgICAgICAjIENhbGwgdGhlIG1ldGhvZCBmb3IgZGV0ZWN0aW5nIHdoZXRoZXIgX3RraW50ZXIgY2FuIGJlIGNvbXBpbGVkCisgICAgICAgICBzZWxmLmRldGVjdF90a2ludGVyKGluY19kaXJzLCBsaWJfZGlycykKKyAKKy0gICAgICAgIGlmICdfdGtpbnRlcicgbm90IGluIFtlLm5hbWUgZm9yIGUgaW4gc2VsZi5leHRlbnNpb25zXToKKy0gICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnX3RraW50ZXInKQorKyAgICAgICAgIyB0a2ludGVyIG1vZHVsZSB3aWxsIG5vdCBiZSBhdmFsYWlibGUgYXMgeW9jdG8KKysgICAgICAgICMgZG9lc24ndCBoYXZlIHRrIGludGVncmF0ZWQgKHlldCkKKysgICAgICAgICNpZiAnX3RraW50ZXInIG5vdCBpbiBbZS5uYW1lIGZvciBlIGluIHNlbGYuZXh0ZW5zaW9uc106CisrICAgICAgICAjICAgIG1pc3NpbmcuYXBwZW5kKCdfdGtpbnRlcicpCisgCisgICAgICAgICByZXR1cm4gbWlzc2luZworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvY2dpX3B5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvY2dpX3B5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNTA0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9jZ2lfcHkucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorTGliL2NnaS5weTogVXBkYXRlIHRoZSBzY3JpcHQgYXMgbWVudGlvbmVkIGluIHRoZSBjb21tZW50CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKKy0tLSBQeXRob24tMi42LjYvTGliL2NnaS5weS5vcmlnCTIwMTAtMDgtMDEgMjI6MTQ6MjcuMDAwMDAwMDAwIC0wNTAwCisrKysgUHl0aG9uLTIuNi42L0xpYi9jZ2kucHkJMjAxMS0wOS0yMSAxNToyODo0MC40NzgyMDg2MzEgLTA1MDAKK0BAIC0xLDEzICsxLDQgQEAKKy0jISAvdXNyL2xvY2FsL2Jpbi9weXRob24KKy0KKy0jIE5PVEU6IHRoZSBhYm92ZSAiL3Vzci9sb2NhbC9iaW4vcHl0aG9uIiBpcyBOT1QgYSBtaXN0YWtlLiAgSXQgaXMKKy0jIGludGVudGlvbmFsbHkgTk9UICIvdXNyL2Jpbi9lbnYgcHl0aG9uIi4gIE9uIG1hbnkgc3lzdGVtcworLSMgKGUuZy4gU29sYXJpcyksIC91c3IvbG9jYWwvYmluIGlzIG5vdCBpbiAkUEFUSCBhcyBwYXNzZWQgdG8gQ0dJCistIyBzY3JpcHRzLCBhbmQgL3Vzci9sb2NhbC9iaW4gaXMgdGhlIGRlZmF1bHQgZGlyZWN0b3J5IHdoZXJlIFB5dGhvbiBpcworLSMgaW5zdGFsbGVkLCBzbyAvdXNyL2Jpbi9lbnYgd291bGQgYmUgdW5hYmxlIHRvIGZpbmQgcHl0aG9uLiAgR3JhbnRlZCwKKy0jIGJpbmFyeSBpbnN0YWxsYXRpb25zIGJ5IExpbnV4IHZlbmRvcnMgb2Z0ZW4gaW5zdGFsbCBQeXRob24gaW4KKy0jIC91c3IvYmluLiAgU28gbGV0IHRob3NlIHZlbmRvcnMgcGF0Y2ggY2dpLnB5IHRvIG1hdGNoIHRoZWlyIGNob2ljZQorLSMgb2YgaW5zdGFsbGF0aW9uLgorKyMhIC91c3IvYmluL2VudiBweXRob24KKyAKKyAiIiJTdXBwb3J0IG1vZHVsZSBmb3IgQ0dJIChDb21tb24gR2F0ZXdheSBJbnRlcmZhY2UpIHNjcmlwdHMuCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxYTk3OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2ZpeF9mb3JfdXNpbmdfZGlmZmVyZW50X2xpYmRpci5wYXRjaApAQCAtMCwwICsxLDU0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0VtYmVkZGVkIHNwZWNpZmljXQorCitUaGlzIHBhdGNoIGZpeGVzIGlzc3Vpbmcgd2l0aCBkaWZmZXJlbnQgbGliZGlyIGxpa2UgbGliNjQuCitUaGlzIHBhdGNoIG1ha2VzIHRoZSBuYXRpdmUgcHl0aG9uIGJpbmFyeSBtb2R1bGVzIGZpbmRhYmxlCitpbiB0aGUgaW5zdGFsbCBwcm9jZXNzIG9mIHRoZSBob3N0IHB5dGhvbi4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK0RhdGU6IDIwMTIvMDMvMTQKKworVXBkYXRlZCBmb3IgcHl0aG9uIDIuNy4zCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorRGF0ZTogMjAxMi8wNS8wMQorCitJbmRleDogUHl0aG9uLTMuMy4wcmMyL0xpYi9zeXNjb25maWcucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy4zLjByYzIub3JpZy9MaWIvc3lzY29uZmlnLnB5CTIwMTItMDktMjAgMjI6NTA6MTEuMDAwMDAwMDAwIC0wNzAwCisrKysgUHl0aG9uLTMuMy4wcmMyL0xpYi9zeXNjb25maWcucHkJMjAxMi0wOS0yMCAyMjo1MzowMS41NjExMjMzOTYgLTA3MDAKK0BAIC0yMSw5ICsyMSw5IEBACisgCisgX0lOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgJ3Bvc2l4X3ByZWZpeCc6IHsKKy0gICAgICAgICdzdGRsaWInOiAne2luc3RhbGxlZF9iYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorKyAgICAgICAgJ3N0ZGxpYic6ICd7YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwbGF0c3RkbGliJzogJ3twbGF0YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKy0gICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdwbGF0bGliJzogJ3twbGF0YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2luY2x1ZGUnOgorICAgICAgICAgICAgICd7aW5zdGFsbGVkX2Jhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9e2FiaWZsYWdzfScsCitAQCAtODMsNyArODMsNyBAQAorICAgICAncG9zaXhfdXNlcic6IHsKKyAgICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3BsYXRzdGRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorLSAgICAgICAgJ3B1cmVsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3B1cmVsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAncGxhdGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdpbmNsdWRlJzogJ3t1c2VyYmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3NjcmlwdHMnOiAne3VzZXJiYXNlfS9iaW4nLAorSW5kZXg6IFB5dGhvbi0zLjMuMHJjMi9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy4zLjByYzIub3JpZy9NYWtlZmlsZS5wcmUuaW4JMjAxMi0wOS0yMCAyMjo1MDoxMS4wMDAwMDAwMDAgLTA3MDAKKysrKyBQeXRob24tMy4zLjByYzIvTWFrZWZpbGUucHJlLmluCTIwMTItMDktMjAgMjI6NTA6NTQuMjQ1MTIzOTk3IC0wNzAwCitAQCAtMTA4MCw5ICsxMDgwLDkgQEAKKyAJCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvTW9kdWxlcy94eG1vZHVsZS5jIFwKKyAJCQkkKERFU1RESVIpJChMSUJERVNUKS9kaXN0dXRpbHMvdGVzdHMgOyBcCisgCWZpCistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCisrCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpOiR7Q1JPU1NQWVRIT05QQVRIfSAkKFJVTlNIQVJFRCkgXAorIAkJJChQWVRIT05fRk9SX0JVSUxEKSAtbSBsaWIydG8zLnBnZW4yLmRyaXZlciAkKERFU1RESVIpJChMSUJERVNUKS9saWIydG8zL0dyYW1tYXIudHh0CistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCisrCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpOiR7Q1JPU1NQWVRIT05QQVRIfSAkKFJVTlNIQVJFRCkgXAorIAkJJChQWVRIT05fRk9SX0JVSUxEKSAtbSBsaWIydG8zLnBnZW4yLmRyaXZlciAkKERFU1RESVIpJChMSUJERVNUKS9saWIydG8zL1BhdHRlcm5HcmFtbWFyLnR4dAorIAorICMgQ3JlYXRlIHRoZSBQTEFURElSIHNvdXJjZSBkaXJlY3RvcnksIGlmIG9uZSB3YXNuJ3QgZGlzdHJpYnV0ZWQuLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvaG9zdF9pbmNsdWRlX2NvbnRhbWluYXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjIwNTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvaG9zdF9pbmNsdWRlX2NvbnRhbWluYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAord2hlbiBidWlsZGluZyBweXRob24gZm9yIHFlbXV4ODYtNjQgb24gdWJ1bnR1IDExLjEwLzY0Yml0CitpdCBncm9wZXMgaW50byBob3N0IGluY2x1ZGVzIGFuZCB0aGVuIG1peGVzIHRoZW0gd2l0aCBjcm9zcworaW5jbHVkZXMgYW5kIGFzIGEgcmVzdWx0IHNvbWUgbW9kdWxlcyBmYWlsIHRvIGNvbXBpbGUgYW5kIGxpbmsKK29uZSBvZiB0aGUgbW9kdWxlcyBpcyBweXRob24tZWxlbWVudHRyZWUgd2hpY2ggaXMgdGhlbiBub3QKK2ZvdW5kIGR1cmluZyBpbWFnZSBjcmVhdGlvbgorCitQcm9ibGUgaXMgdGhhdCBzZXR1cC5weSB0cmllcyB0byBhZGQgbmF0aXZlIGluY2x1ZGVzIHRoYXQgbmV3ZXIKK3VidW50dSBoYXMgaW50cm9kdWNlZCBmb3IgbXVsdGlhcmNoIHN1cHBvcnQuIEJ1dCB0aGF0IHNob3VsZAorb25seSBoYXBwZW4gZm9yIG5hdGl2ZSBidWlsZHMgYW5kIG5vdCBjcm9zcyBidWlsZGluZyBweXRob24KK3NvIHdlIGFkZCBhIGNoZWNrIGhlcmUuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IFB5dGhvbi0zLjMuMHJjMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjMuMHJjMi5vcmlnL3NldHVwLnB5CTIwMTItMDktMjAgMjE6NTQ6NTAuMDAwMDAwMDAwIC0wNzAwCisrKysgUHl0aG9uLTMuMy4wcmMyL3NldHVwLnB5CTIwMTItMDktMjAgMjE6NTc6MzUuMDI5MTIzODU4IC0wNzAwCitAQCAtNDAyLDYgKzQwMiw5IEBACisgCisgICAgICAgICBpZiBub3QgZmluZF9leGVjdXRhYmxlKCdkcGtnLWFyY2hpdGVjdHVyZScpOgorICAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorKyAgICAgICAgICAgIHJldHVybgorKworICAgICAgICAgb3B0ID0gJycKKyAgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKKyAgICAgICAgICAgICBvcHQgPSAnLXQnICsgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdIT1NUX0dOVV9UWVBFJykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL21ha2VyYWNlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvbWFrZXJhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhhNjg5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL21ha2VyYWNlLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1RoZXJlIGlzIGEgcmFjZSBkdWUgdG8gdGhlIGV4ZWN1dGlvbiBvZiBtYWtlIGluc2lkZSB0aGUgbWFrZWZpbGU6CisKK3wgZ2NjICAtcHRocmVhZCAtYyAtV25vLXVudXNlZC1yZXN1bHQgLUROREVCVUcgLWcgIC1PMyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlICAgLUkuIC1JSW5jbHVkZSAtSS4vSW5jbHVkZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLWZQSUMgLURQeV9CVUlMRF9DT1JFIC1vIE9iamVjdHMvb2JtYWxsb2MubyBPYmplY3RzL29ibWFsbG9jLmMKK3wgZ2NjICAtcHRocmVhZCAtYyAtV25vLXVudXNlZC1yZXN1bHQgLUROREVCVUcgLWcgIC1PMyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlICAgLUkuIC1JSW5jbHVkZSAtSS4vSW5jbHVkZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLWZQSUMgLURQeV9CVUlMRF9DT1JFIC1vIFBhcnNlci9wZ2VuLm8gUGFyc2VyL3BnZW4uY3wgZ2NjICAtcHRocmVhZCAtYyAtV25vLXVudXNlZC1yZXN1bHQgLUROREVCVUcgLWcgIC1PMyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlICAgLUkuIC1JSW5jbHVkZSAtSS4vSW5jbHVkZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLWZQSUMgLURQeV9CVUlMRF9DT1JFIC1vIE9iamVjdHMvb2JtYWxsb2MubyBPYmplY3RzL29ibWFsbG9jLmMKK3wgZ2NjICAtcHRocmVhZCAtYyAtV25vLXVudXNlZC1yZXN1bHQgLUROREVCVUcgLWcgIC1PMyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlICAgLUkuIC1JSW5jbHVkZSAtSS4vSW5jbHVkZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLWZQSUMgLURQeV9CVUlMRF9DT1JFIC1vIE9iamVjdHMvb2JtYWxsb2MubyBPYmplY3RzL29ibWFsbG9jLmMKK3wgT2JqZWN0cy9vYm1hbGxvYy5vOiBmaWxlIG5vdCByZWNvZ25pemVkOiBGaWxlIHRydW5jYXRlZAorfCBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKK3wgbWFrZVsxXTogKioqIFtQYXJzZXIvcGdlbl0gRXJyb3IgMQorCitUaGUgZWFzaWVzdCB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBsaXN0IHRoZSBkZXBlbmRlbmNpZXMgZXhwbGljdGx5LgorCitSUCAyOC8yLzIwMTQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBQeXRob24tMy4zLjMvTWFrZWZpbGUucHJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuMy4zLm9yaWcvTWFrZWZpbGUucHJlLmluCTIwMTQtMDItMjcgMTQ6MDQ6MzguMjY4MzM5NTMzICswMDAwCisrKysgUHl0aG9uLTMuMy4zL01ha2VmaWxlLnByZS5pbgkyMDE0LTAyLTI4IDEwOjQwOjU5LjE2NjM2MTEyNSArMDAwMAorQEAgLTY3Niw3ICs2NzYsNyBAQAorIAorICQoSU9fT0JKUyk6ICQoSU9fSCkKKyAKKy0kKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKyskKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykgJChQR0VOKQorIAkJQCQoTUtESVJfUCkgSW5jbHVkZQorIAkJJChNQUtFKSAkKFBHRU4pCisgCQkkKEhPU1RQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbi0zLjMtbXVsdGlsaWIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24tMy4zLW11bHRpbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZTk4NjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24tMy4zLW11bHRpbGliLnBhdGNoCkBAIC0wLDAgKzEsMzM4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZ2V0IHRoZSBzeXMubGliIGZyb20gcHl0aG9uIGl0c2VsZiBhbmQgZG8gbm90IHVzZSBoYXJkY29kZWQgdmFsdWUgb2YgJ2xpYicKKworMDIvMjAxNSBSZWJhc2VkIGZvciAzLjQuMgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMy40LjIvSW5jbHVkZS9weXRob25ydW4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL0luY2x1ZGUvcHl0aG9ucnVuLmgKKysrKyBQeXRob24tMy40LjIvSW5jbHVkZS9weXRob25ydW4uaAorQEAgLTIyMCw2ICsyMjAsOCBAQCBpbnQgX1B5X0NoZWNrUHl0aG9uMygpOworIC8qIEluIHRoZWlyIG93biBmaWxlcyAqLworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRWZXJzaW9uKHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRQbGF0Zm9ybSh2b2lkKTsKKytQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0QXJjaCh2b2lkKTsKKytQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0TGliKHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb3B5cmlnaHQodm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldENvbXBpbGVyKHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRCdWlsZEluZm8odm9pZCk7CitJbmRleDogUHl0aG9uLTMuNC4yL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKKysrKyBQeXRob24tMy40LjIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKK0BAIC0xOSw2ICsxOSw4IEBAIGZyb20gc2l0ZSBpbXBvcnQgVVNFUl9CQVNFCisgZnJvbSBzaXRlIGltcG9ydCBVU0VSX1NJVEUKKyBIQVNfVVNFUl9TSVRFID0gVHJ1ZQorIAorK2xpYm5hbWUgPSBzeXMubGliCisrCisgV0lORE9XU19TQ0hFTUUgPSB7CisgICAgICdwdXJlbGliJzogJyRiYXNlL0xpYi9zaXRlLXBhY2thZ2VzJywKKyAgICAgJ3BsYXRsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAorQEAgLTMwLDcgKzMyLDcgQEAgV0lORE9XU19TQ0hFTUUgPSB7CisgSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAndW5peF9wcmVmaXgnOiB7CisgICAgICAgICAncHVyZWxpYic6ICckYmFzZS9saWIvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvc2l0ZS1wYWNrYWdlcycsCistICAgICAgICAncGxhdGxpYic6ICckcGxhdGJhc2UvbGliL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3BsYXRsaWInOiAnJHBsYXRiYXNlLycrbGlibmFtZSsnL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2hlYWRlcnMnOiAnJGJhc2UvaW5jbHVkZS9weXRob24kcHlfdmVyc2lvbl9zaG9ydCRhYmlmbGFncy8kZGlzdF9uYW1lJywKKyAgICAgICAgICdzY3JpcHRzJzogJyRiYXNlL2JpbicsCisgICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCitJbmRleDogUHl0aG9uLTMuNC4yL0xpYi9weWRvYy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL0xpYi9weWRvYy5weQorKysrIFB5dGhvbi0zLjQuMi9MaWIvcHlkb2MucHkKK0BAIC0zOTQsNyArMzk0LDcgQEAgY2xhc3MgRG9jOgorIAorICAgICAgICAgZG9jbG9jID0gb3MuZW52aXJvbi5nZXQoIlBZVEhPTkRPQ1MiLCBzZWxmLlBZVEhPTkRPQ1MpCisgCistICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKHN5cy5iYXNlX2V4ZWNfcHJlZml4LCAibGliIiwKKysgICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfZXhlY19wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24lZC4lZCIgJSAgc3lzLnZlcnNpb25faW5mb1s6Ml0pCisgICAgICAgICBpZiAoaXNpbnN0YW5jZShvYmplY3QsIHR5cGUob3MpKSBhbmQKKyAgICAgICAgICAgICAob2JqZWN0Ll9fbmFtZV9fIGluICgnZXJybm8nLCAnZXhjZXB0aW9ucycsICdnYycsICdpbXAnLAorSW5kZXg6IFB5dGhvbi0zLjQuMi9MaWIvdHJhY2UucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9MaWIvdHJhY2UucHkKKysrKyBQeXRob24tMy40LjIvTGliL3RyYWNlLnB5CitAQCAtNzUxLDEwICs3NTEsMTAgQEAgZGVmIG1haW4oYXJndj1Ob25lKToKKyAgICAgICAgICAgICAgICAgIyBzaG91bGQgSSBhbHNvIGNhbGwgZXhwYW5kdXNlcj8gKGFmdGVyIGFsbCwgY291bGQgdXNlICRIT01FKQorIAorICAgICAgICAgICAgICAgICBzID0gcy5yZXBsYWNlKCIkcHJlZml4IiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfcHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfcHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSkpCisgICAgICAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoIiRleGVjX3ByZWZpeCIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5iYXNlX2V4ZWNfcHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfZXhlY19wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdKSkKKyAgICAgICAgICAgICAgICAgcyA9IG9zLnBhdGgubm9ybXBhdGgocykKKyAgICAgICAgICAgICAgICAgaWdub3JlX2RpcnMuYXBwZW5kKHMpCitJbmRleDogUHl0aG9uLTMuNC4yL01ha2VmaWxlLnByZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL01ha2VmaWxlLnByZS5pbgorKysrIFB5dGhvbi0zLjQuMi9NYWtlZmlsZS5wcmUuaW4KK0BAIC0xMDEsNiArMTAxLDggQEAgUFlfQ09SRV9DRkxBR1M9CSQoUFlfQ0ZMQUdTKSAkKFBZX0NGTEFHUworIAorICMgTWFjaGluZS1kZXBlbmRlbnQgc3ViZGlyZWN0b3JpZXMKKyBNQUNIREVQPQlATUFDSERFUEAKKytMSUI9CQlATElCQAorK0FSQ0g9CQlAQVJDSEAKKyAKKyAjIE11bHRpYXJjaCBkaXJlY3RvcnkgKG1heSBiZSBlbXB0eSkKKyBNVUxUSUFSQ0g9CUBNVUxUSUFSQ0hACitAQCAtMTIwLDcgKzEyMiw3IEBAIExJQkRJUj0JCUBsaWJkaXJACisgTUFORElSPQkJQG1hbmRpckAKKyBJTkNMVURFRElSPQlAaW5jbHVkZWRpckAKKyBDT05GSU5DTFVERURJUj0JJChleGVjX3ByZWZpeCkvaW5jbHVkZQorLVNDUklQVERJUj0JJChwcmVmaXgpL2xpYgorK1NDUklQVERJUj0JQGxpYmRpckAKKyBBQklGTEFHUz0JQEFCSUZMQUdTQAorIAorICMgRGV0YWlsZWQgZGVzdGluYXRpb24gZGlyZWN0b3JpZXMKK0BAIC03MTIsNiArNzE0LDcgQEAgTW9kdWxlcy9nZXRwYXRoLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2dldAorIAkJLURFWEVDX1BSRUZJWD0nIiQoZXhlY19wcmVmaXgpIicgXAorIAkJLURWRVJTSU9OPSciJChWRVJTSU9OKSInIFwKKyAJCS1EVlBBVEg9JyIkKFZQQVRIKSInIFwKKysJCS1EQVJDSD0nIiQoQVJDSCkiJyAtRExJQj0nIiQoTElCKSInIFwKKyAJCS1vICRAICQoc3JjZGlyKS9Nb2R1bGVzL2dldHBhdGguYworIAorIE1vZHVsZXMvcHl0aG9uLm86ICQoc3JjZGlyKS9Nb2R1bGVzL3B5dGhvbi5jCitAQCAtNzgwLDcgKzc4Myw3IEBAICQoQVNUX0MpOiAkKEFTVF9IKSAkKEFTVF9BU0RMKSAkKEFTRExHRU4KKyBQeXRob24vY29tcGlsZS5vIFB5dGhvbi9zeW10YWJsZS5vIFB5dGhvbi9hc3QubzogJChHUkFNTUFSX0gpICQoQVNUX0gpCisgCisgUHl0aG9uL2dldHBsYXRmb3JtLm86ICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYworLQkJJChDQykgLWMgJChQWV9DT1JFX0NGTEFHUykgLURQTEFURk9STT0nIiQoTUFDSERFUCkiJyAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKKysJCSQoQ0MpIC1jICQoUFlfQ09SRV9DRkxBR1MpIC1EUExBVEZPUk09JyIkKE1BQ0hERVApIicgLURBUkNIPSciJChBUkNIKSInIC1ETElCPSciJChMSUIpIicgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisgCisgUHl0aG9uL2ltcG9ydGRsLm86ICQoc3JjZGlyKS9QeXRob24vaW1wb3J0ZGwuYworIAkJJChDQykgLWMgJChQWV9DT1JFX0NGTEFHUykgLUkkKERMSU5DTERJUikgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9pbXBvcnRkbC5jCitJbmRleDogUHl0aG9uLTMuNC4yL01vZHVsZXMvZ2V0cGF0aC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvTW9kdWxlcy9nZXRwYXRoLmMKKysrKyBQeXRob24tMy40LjIvTW9kdWxlcy9nZXRwYXRoLmMKK0BAIC0xMTcsOSArMTE3LDExIEBACisgI2RlZmluZSBFWEVDX1BSRUZJWCBQUkVGSVgKKyAjZW5kaWYKKyAKKysjZGVmaW5lIExJQl9QWVRIT04gTElCICIvcHl0aG9uIiBWRVJTSU9OCisrCisgI2lmbmRlZiBQWVRIT05QQVRICistI2RlZmluZSBQWVRIT05QQVRIIFBSRUZJWCAiL2xpYi9weXRob24iIFZFUlNJT04gIjoiIFwKKy0gICAgICAgICAgICAgIEVYRUNfUFJFRklYICIvbGliL3B5dGhvbiIgVkVSU0lPTiAiL2xpYi1keW5sb2FkIgorKyNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi8iIExJQl9QWVRIT04gIjoiIFwKKysgICAgICAgICAgICAgIEVYRUNfUFJFRklYICIvIiBMSUJfUFlUSE9OICIvbGliLWR5bmxvYWQiCisgI2VuZGlmCisgCisgI2lmbmRlZiBMQU5ETUFSSworQEAgLTEzMCw2ICsxMzIsNyBAQCBzdGF0aWMgd2NoYXJfdCBwcmVmaXhbTUFYUEFUSExFTisxXTsKKyBzdGF0aWMgd2NoYXJfdCBleGVjX3ByZWZpeFtNQVhQQVRITEVOKzFdOworIHN0YXRpYyB3Y2hhcl90IHByb2dwYXRoW01BWFBBVEhMRU4rMV07Cisgc3RhdGljIHdjaGFyX3QgKm1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7Cisrc3RhdGljIHdjaGFyX3QgKmxpYl9weXRob24gPSBMIiIgTElCX1BZVEhPTjsKKyAKKyBzdGF0aWMgdm9pZAorIHJlZHVjZSh3Y2hhcl90ICpkaXIpCitJbmRleDogUHl0aG9uLTMuNC4yL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvUHl0aG9uL2dldHBsYXRmb3JtLmMKKysrKyBQeXRob24tMy40LjIvUHl0aG9uL2dldHBsYXRmb3JtLmMKK0BAIC0xMCwzICsxMCwyMyBAQCBQeV9HZXRQbGF0Zm9ybSh2b2lkKQorIHsKKyAJcmV0dXJuIFBMQVRGT1JNOworIH0KKysKKysjaWZuZGVmIEFSQ0gKKysjZGVmaW5lIEFSQ0ggInVua25vd24iCisrI2VuZGlmCisrCisrY29uc3QgY2hhciAqCisrUHlfR2V0QXJjaCh2b2lkKQorK3sKKysJcmV0dXJuIEFSQ0g7CisrfQorKworKyNpZm5kZWYgTElCCisrI2RlZmluZSBMSUIgImxpYiIKKysjZW5kaWYKKysKKytjb25zdCBjaGFyICoKKytQeV9HZXRMaWIodm9pZCkKKyt7CisrCXJldHVybiBMSUI7CisrfQorSW5kZXg6IFB5dGhvbi0zLjQuMi9QeXRob24vc3lzbW9kdWxlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9QeXRob24vc3lzbW9kdWxlLmMKKysrKyBQeXRob24tMy40LjIvUHl0aG9uL3N5c21vZHVsZS5jCitAQCAtMTY5Nyw2ICsxNjk3LDEwIEBAIF9QeVN5c19Jbml0KHZvaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoUHlfR2V0Q29weXJpZ2h0KCkpKTsKKyAgICAgU0VUX1NZU19GUk9NX1NUUklORygicGxhdGZvcm0iLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFB5X0dldFBsYXRmb3JtKCkpKTsKKysgICAgU0VUX1NZU19GUk9NX1NUUklORygiYXJjaCIsCisrICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoUHlfR2V0QXJjaCgpKSk7CisrICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoUHlfR2V0TGliKCkpKTsKKyAgICAgU0VUX1NZU19GUk9NX1NUUklORygiZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21XaWRlQ2hhcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKCksIC0xKSk7CitJbmRleDogUHl0aG9uLTMuNC4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvc2V0dXAucHkKKysrKyBQeXRob24tMy40LjIvc2V0dXAucHkKK0BAIC00NTQsNyArNDU0LDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgIyBkaXJlY3RvcmllcyAoaS5lLiAnLicgYW5kICdJbmNsdWRlJykgbXVzdCBiZSBmaXJzdC4gIFNlZSBpc3N1ZQorICAgICAgICAgIyAxMDUyMC4KKyAgICAgICAgIGlmIG5vdCBjcm9zc19jb21waWxpbmc6CistICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLCAnL3Vzci9sb2NhbC9saWInKQorKyAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywgb3MucGF0aC5qb2luKCcvdXNyL2xvY2FsJywgc3lzLmxpYikpCisgICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLCAnL3Vzci9sb2NhbC9pbmNsdWRlJykKKyAgICAgICAgICMgb25seSBjaGFuZ2UgdGhpcyBmb3IgY3Jvc3MgYnVpbGRzIGZvciAzLjMsIGlzc3VlcyBvbiBNYWdlaWEKKyAgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKK0BAIC01MTIsOCArNTEyLDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgIyBiZSBhc3N1bWVkIHRoYXQgbm8gYWRkaXRpb25hbCAtSSwtTCBkaXJlY3RpdmVzIGFyZSBuZWVkZWQuCisgICAgICAgICBpZiBub3QgY3Jvc3NfY29tcGlsaW5nOgorICAgICAgICAgICAgIGxpYl9kaXJzID0gc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMgKyBbCistICAgICAgICAgICAgICAgICcvbGliNjQnLCAnL3Vzci9saWI2NCcsCistICAgICAgICAgICAgICAgICcvbGliJywgJy91c3IvbGliJywKKysgICAgICAgICAgICAgICAgJy8nICsgc3lzLmxpYiwgJy91c3IvJyArIHN5cy5saWIsCisgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICBpbmNfZGlycyA9IHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzICsgWycvdXNyL2luY2x1ZGUnXQorICAgICAgICAgZWxzZToKK0BAIC02OTYsMTEgKzY5NSwxMSBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgZWxpZiBjdXJzZXNfbGlicmFyeToKKyAgICAgICAgICAgICAgICAgcmVhZGxpbmVfbGlicy5hcHBlbmQoY3Vyc2VzX2xpYnJhcnkpCisgICAgICAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzICsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnL3Vzci9saWIvdGVybWNhcCddLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycvdXNyLycrc3lzLmxpYisnL3Rlcm1jYXAnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXJtY2FwJyk6CisgICAgICAgICAgICAgICAgIHJlYWRsaW5lX2xpYnMuYXBwZW5kKCd0ZXJtY2FwJykKKyAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdyZWFkbGluZScsIFsncmVhZGxpbmUuYyddLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPVsnL3Vzci9saWIvdGVybWNhcCddLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPVsnL3Vzci8nK3N5cy5saWIrJy90ZXJtY2FwJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9saW5rX2FyZ3M9cmVhZGxpbmVfZXh0cmFfbGlua19hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPXJlYWRsaW5lX2xpYnMpICkKKyAgICAgICAgIGVsc2U6CitJbmRleDogUHl0aG9uLTMuNC4yL0xpYi9zeXNjb25maWcucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9MaWIvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTMuNC4yL0xpYi9zeXNjb25maWcucHkKK0BAIC0yMCwxMCArMjAsMTAgQEAgX19hbGxfXyA9IFsKKyAKKyBfSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAncG9zaXhfcHJlZml4JzogeworLSAgICAgICAgJ3N0ZGxpYic6ICd7aW5zdGFsbGVkX2Jhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorLSAgICAgICAgJ3BsYXRzdGRsaWInOiAne3BsYXRiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKysgICAgICAgICdzdGRsaWInOiAne2luc3RhbGxlZF9iYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorKyAgICAgICAgJ3BsYXRzdGRsaWInOiAne3BsYXRiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCistICAgICAgICAncGxhdGxpYic6ICd7cGxhdGJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncGxhdGxpYic6ICd7cGxhdGJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdpbmNsdWRlJzoKKyAgICAgICAgICAgICAne2luc3RhbGxlZF9iYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fXthYmlmbGFnc30nLAorICAgICAgICAgJ3BsYXRpbmNsdWRlJzoKK0BAIC0zMiwxMCArMzIsMTAgQEAgX0lOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgICAgICdkYXRhJzogJ3tiYXNlfScsCisgICAgICAgICB9LAorICAgICAncG9zaXhfaG9tZSc6IHsKKy0gICAgICAgICdzdGRsaWInOiAne2luc3RhbGxlZF9iYXNlfS9saWIvcHl0aG9uJywKKy0gICAgICAgICdwbGF0c3RkbGliJzogJ3tiYXNlfS9saWIvcHl0aG9uJywKKysgICAgICAgICdzdGRsaWInOiAne2luc3RhbGxlZF9iYXNlfS8nK3N5cy5saWIrJy9weXRob24nLAorKyAgICAgICAgJ3BsYXRzdGRsaWInOiAne2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbicsCisgICAgICAgICAncHVyZWxpYic6ICd7YmFzZX0vbGliL3B5dGhvbicsCistICAgICAgICAncGxhdGxpYic6ICd7YmFzZX0vbGliL3B5dGhvbicsCisrICAgICAgICAncGxhdGxpYic6ICd7YmFzZX0vJytzeXMubGliKycvcHl0aG9uJywKKyAgICAgICAgICdpbmNsdWRlJzogJ3tpbnN0YWxsZWRfYmFzZX0vaW5jbHVkZS9weXRob24nLAorICAgICAgICAgJ3BsYXRpbmNsdWRlJzogJ3tpbnN0YWxsZWRfYmFzZX0vaW5jbHVkZS9weXRob24nLAorICAgICAgICAgJ3NjcmlwdHMnOiAne2Jhc2V9L2JpbicsCitAQCAtNjEsMTAgKzYxLDEwIEBAIF9JTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICAgICAnZGF0YSc6ICd7dXNlcmJhc2V9JywKKyAgICAgICAgIH0sCisgICAgICdwb3NpeF91c2VyJzogeworLSAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorLSAgICAgICAgJ3BsYXRzdGRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKysgICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorKyAgICAgICAgJ3BsYXRzdGRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3B1cmVsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorLSAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdzY3JpcHRzJzogJ3t1c2VyYmFzZX0vYmluJywKKyAgICAgICAgICdkYXRhJzogJ3t1c2VyYmFzZX0nLAorSW5kZXg6IFB5dGhvbi0zLjQuMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9jb25maWd1cmUuYWMKKysrKyBQeXRob24tMy40LjIvY29uZmlndXJlLmFjCitAQCAtNzkxLDYgKzc5MSw0MSBAQCBlc2FjCisgTVVMVElBUkNIPSQoJENDIC0tcHJpbnQtbXVsdGlhcmNoIDI+L2Rldi9udWxsKQorIEFDX1NVQlNUKE1VTFRJQVJDSCkKKyAKKytBQ19TVUJTVChBUkNIKQorK0FDX01TR19DSEVDS0lORyhBUkNIKQorK0FSQ0g9YHVuYW1lIC1tYAorK2Nhc2UgJEFSQ0ggaW4KKytpPzg2KSBBUkNIPWkzODY7OworK2VzYWMKKytBQ19NU0dfUkVTVUxUKCRBUkNIKQorKworK0FDX1NVQlNUKExJQikKKytBQ19NU0dfQ0hFQ0tJTkcoTElCKQorK2Nhc2UgJGFjX3N5c19zeXN0ZW0gaW4KKytMaW51eCopCisrICAjIFRlc3QgaWYgdGhlIGNvbXBpbGVyIGlzIDY0Yml0CisrICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorKyAgcHl0aG9uX2N2X2NjXzY0Yml0X291dHB1dD1ubworKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKysgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorKyAgICAqIkVMRiA2NCIqKQorKyAgICAgIHB5dGhvbl9jdl9jY182NGJpdF9vdXRwdXQ9eWVzCisrICAgICAgOzsKKysgICAgZXNhYworKyAgZmkKKysgIHJtIC1yZiBjb25mdGVzdCoKKysgIDs7CisrZXNhYworKworK2Nhc2UgJEFSQ0g6JHB5dGhvbl9jdl9jY182NGJpdF9vdXRwdXQgaW4KKytwcGM2NDp5ZXMgfCBwb3dlcnBjNjQ6eWVzIHwgczM5MHg6eWVzIHwgc3BhcmM2NDp5ZXMgfCB4ODZfNjQ6eWVzKQorKyAgTElCPSJsaWI2NCIKKysgIDs7CisrKjoqKQorKyAgTElCPSJsaWIiCisrICA7OworK2VzYWMKKytBQ19NU0dfUkVTVUxUKCRMSUIpCisgCisgQUNfU1VCU1QoTElCUkFSWSkKKyBBQ19NU0dfQ0hFQ0tJTkcoTElCUkFSWSkKK0luZGV4OiBQeXRob24tMy40LjIvTGliL3NpdGUucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9MaWIvc2l0ZS5weQorKysrIFB5dGhvbi0zLjQuMi9MaWIvc2l0ZS5weQorQEAgLTMwNCwxMyArMzA0LDE5IEBAIGRlZiBnZXRzaXRlcGFja2FnZXMocHJlZml4ZXM9Tm9uZSk6CisgICAgICAgICBzZWVuLmFkZChwcmVmaXgpCisgCisgICAgICAgICBpZiBvcy5zZXAgPT0gJy8nOgorLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpdGUtcGFja2FnZXMiKSkKKy0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1weXRob24iKSkKKysgICAgICAgICAgICBpZiBzeXMubGliICE9ICJsaWIiOgorKyAgICAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpdGUtcGFja2FnZXMiKSkKKysgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsICJzaXRlLXB5dGhvbiIpKQorKyAgICAgICAgICAgIGlmIHN5cy5saWIgIT0gImxpYiI6CisrICAgICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwgInNpdGUtcHl0aG9uIikpCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQocHJlZml4KQorLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXBhY2thZ2VzIikpCisrICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLCAic2l0ZS1wYWNrYWdlcyIpKQorICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgorICAgICAgICAgICAgICMgZm9yIGZyYW1ld29yayBidWlsZHMgKm9ubHkqIHdlIGFkZCB0aGUgc3RhbmRhcmQgQXBwbGUKKyAgICAgICAgICAgICAjIGxvY2F0aW9ucy4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbi1jb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24tY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyM2I4YjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24tY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK3B5dGhvbi1jb25maWc6IFJldmVydCB0byB1c2luZyBkaXN0dXRpbHMuc3lzY29uZmlnCisKK1RoZSBuZXdlciBzeXNjb25maWcgbW9kdWxlIHNoYXJlcyBzb21lIGNvZGUgd2l0aCBkaXN0dXRpbHMuc3lzY29uZmlnLCBidXQgdGhlIHNhbWUgbW9kaWZpY2F0aW9ucyBhcyBpbgorCisxMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2ggbWFrZXMgZGlzdHV0aWxzLnN5c2NvbmZpZworCithZmZlY3QgdGhlIG5hdGl2ZSBydW50aW1lIGFzIHdlbGwgYXMgY3Jvc3MgYnVpbGRpbmcuIFVzZSB0aGUgb2xkLCBwYXRjaGVkCitpbXBsZW1lbnRhdGlvbiB3aGljaCByZXR1cm5zIHBhdGhzIGluIHRoZSBzdGFnaW5nIGRpcmVjdG9yeSBhbmQgZm9yIHRoZSB0YXJnZXQsCithcyBhcHByb3ByaWF0ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtFbWJlZGRlZCBTcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogVHlsZXIgSGFsbCA8dHlsZXJ3aGFsbEBnbWFpbC5jb20+Cis6CitJbmRleDogUHl0aG9uLTMuMy4zL01pc2MvcHl0aG9uLWNvbmZpZy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjMuMy5vcmlnL01pc2MvcHl0aG9uLWNvbmZpZy5pbgorKysrIFB5dGhvbi0zLjMuMy9NaXNjL3B5dGhvbi1jb25maWcuaW4KK0BAIC00LDcgKzQsNyBAQAorIGltcG9ydCBnZXRvcHQKKyBpbXBvcnQgb3MKKyBpbXBvcnQgc3lzCistaW1wb3J0IHN5c2NvbmZpZworK2Zyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKKyAKKyB2YWxpZF9vcHRzID0gWydwcmVmaXgnLCAnZXhlYy1wcmVmaXgnLCAnaW5jbHVkZXMnLCAnbGlicycsICdjZmxhZ3MnLAorICAgICAgICAgICAgICAgJ2xkZmxhZ3MnLCAnZXh0ZW5zaW9uLXN1ZmZpeCcsICdoZWxwJywgJ2FiaWZsYWdzJywgJ2NvbmZpZ2RpciddCitAQCAtMzIsMTQgKzMyLDE0IEBAIGlmICctLWhlbHAnIGluIG9wdF9mbGFnczoKKyAKKyBmb3Igb3B0IGluIG9wdF9mbGFnczoKKyAgICAgaWYgb3B0ID09ICctLXByZWZpeCc6CistICAgICAgICBwcmludChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3ByZWZpeCcpKQorKyAgICAgICAgcHJpbnQoc3lzY29uZmlnLlBSRUZJWCkKKyAKKyAgICAgZWxpZiBvcHQgPT0gJy0tZXhlYy1wcmVmaXgnOgorLSAgICAgICAgcHJpbnQoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdleGVjX3ByZWZpeCcpKQorKyAgICAgICAgcHJpbnQoc3lzY29uZmlnLkVYRUNfUFJFRklYKQorIAorICAgICBlbGlmIG9wdCBpbiAoJy0taW5jbHVkZXMnLCAnLS1jZmxhZ3MnKToKKy0gICAgICAgIGZsYWdzID0gWyctSScgKyBzeXNjb25maWcuZ2V0X3BhdGgoJ2luY2x1ZGUnKSwKKy0gICAgICAgICAgICAgICAgICctSScgKyBzeXNjb25maWcuZ2V0X3BhdGgoJ3BsYXRpbmNsdWRlJyldCisrICAgICAgICBmbGFncyA9IFsnLUknICsgc3lzY29uZmlnLmdldF9weXRob25faW5jKCksCisrICAgICAgICAgICAgICAgICAnLUknICsgc3lzY29uZmlnLmdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9VHJ1ZSldCisgICAgICAgICBpZiBvcHQgPT0gJy0tY2ZsYWdzJzoKKyAgICAgICAgICAgICBmbGFncy5leHRlbmQoZ2V0dmFyKCdDRkxBR1MnKS5zcGxpdCgpKQorICAgICAgICAgcHJpbnQoJyAnLmpvaW4oZmxhZ3MpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uMy1zZXR1cC5weS1uby1ob3N0LWhlYWRlcnMtbGlicy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbjMtc2V0dXAucHktbm8taG9zdC1oZWFkZXJzLWxpYnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJjOGI4YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbjMtc2V0dXAucHktbm8taG9zdC1oZWFkZXJzLWxpYnMucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA0MzIzOGUxYWMxM2UzMjk4NGQwMTVjOTJhNTg0MWYzZGUxZmUxZDE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTggTm92IDIwMTQgMDA6MDc6MDcgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gc2V0dXAucHk6IG5vIGhvc3QgaGVhZGVycyBsaWJzCisKK1doZW4gd2UgYXJlIGNyb3NzLWNvbXBpbGluZywgc2V0dXAucHkgc2hvdWxkIG5ldmVyIGxvb2sgaW4gL3Vzcgorb3IgL3Vzci9sb2NhbCB0byBmaW5kIGhlYWRlcnMgb3IgbGlicmFyaWVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0Nyb3NzIGNvbXBpbGUgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBzZXR1cC5weSB8IDMgLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CitpbmRleCBmMDIwYjI4Li5lODMzOWNkIDEwMDY0NAorLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtNDQ0LDEwICs0NDQsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICBpZiBub3QgY3Jvc3NfY29tcGlsaW5nOgorICAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywgb3MucGF0aC5qb2luKCcvdXNyL2xvY2FsJywgc3lzLmxpYikpCisgICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLCAnL3Vzci9sb2NhbC9pbmNsdWRlJykKKy0gICAgICAgICMgb25seSBjaGFuZ2UgdGhpcyBmb3IgY3Jvc3MgYnVpbGRzIGZvciAzLjMsIGlzc3VlcyBvbiBNYWdlaWEKKy0gICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKKyAgICAgICAgICAgICBzZWxmLmFkZF9nY2NfcGF0aHMoKQorLSAgICAgICAgaWYgbm90IGNyb3NzX2NvbXBpbGluZzoKKyAgICAgICAgICAgICBzZWxmLmFkZF9tdWx0aWFyY2hfcGF0aHMoKQorIAorICAgICAgICAgIyBBZGQgcGF0aHMgc3BlY2lmaWVkIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgTERGTEFHUyBhbmQKKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uMy11c2UtQ1JPU1NQWVRIT05QQVRILWZvci1QWVRIT05fRk9SX0JVSUxELnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uMy11c2UtQ1JPU1NQWVRIT05QQVRILWZvci1QWVRIT05fRk9SX0JVSUxELnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NDkwZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24zLXVzZS1DUk9TU1BZVEhPTlBBVEgtZm9yLVBZVEhPTl9GT1JfQlVJTEQucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA1M2VkMjE2ZDdiZjcwZGQyYTkyNTQzMmI2ODA1YTcwMWU1ZmMzZTBlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMTcgTm92IDIwMTQgMDY6NDQ6NDcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gcHl0aG9uMyB1c2UgQ1JPU1NQWVRIT05QQVRIIGZvciBQWVRIT05fRk9SX0JVSUxECisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbQ3Jvc3MgY29tcGlsZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOTg5YmFmOS4uMjg5MGM5NiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjcsNyArNjcsNyBAQCBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorIAkgICAgQUNfTVNHX0VSUk9SKFtweXRob24kUEFDS0FHRV9WRVJTSU9OIGludGVycHJldGVyIG5vdCBmb3VuZF0pCisgCWZpCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCRpbnRlcnApCistCVBZVEhPTl9GT1JfQlVJTEQ9J19QWVRIT05fUFJPSkVDVF9CQVNFPSQoYWJzX2J1aWxkZGlyKSBfUFlUSE9OX0hPU1RfUExBVEZPUk09JChfUFlUSE9OX0hPU1RfUExBVEZPUk0pIFBZVEhPTlBBVEg9JChzaGVsbCB0ZXN0IC1mIHB5YnVpbGRkaXIudHh0ICYmIGVjaG8gJChhYnNfYnVpbGRkaXIpL2BjYXQgcHlidWlsZGRpci50eHRgOikkKHNyY2RpcikvTGliOiQoc3JjZGlyKS9MaWIvJChQTEFURElSKSAnJGludGVycAorKwlQWVRIT05fRk9SX0JVSUxEPSdfUFlUSE9OX1BST0pFQ1RfQkFTRT0kKGFic19idWlsZGRpcikgX1BZVEhPTl9IT1NUX1BMQVRGT1JNPSQoX1BZVEhPTl9IT1NUX1BMQVRGT1JNKSBQWVRIT05QQVRIPSQoQ1JPU1NQWVRIT05QQVRIKSAnJGludGVycAorICAgICBmaQorIGVsaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbgorICAgICBBQ19NU0dfRVJST1IoW0Nyb3NzIGNvbXBpbGluZyByZXF1aXJlZCAtLWhvc3Q9SE9TVC1UVVBMRSBhbmQgLS1idWlsZD1BUkNIXSkKKy0tIAorMi4wLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXAucHktY2hlY2stY3Jvc3NfY29tcGlsaW5nLXdoZW4tZ2V0LUZMQUdTLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXAucHktY2hlY2stY3Jvc3NfY29tcGlsaW5nLXdoZW4tZ2V0LUZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMmUxMmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zZXR1cC5weS1jaGVjay1jcm9zc19jb21waWxpbmctd2hlbi1nZXQtRkxBR1MucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorRnJvbSA4ZGFkODEwZjNhM2QwNzNmMDlhZDcyZTFhM2VlMGE4OTVlYWIyY2ExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBTdW4sIDE4IEphbiAyMDE1IDE5OjA1OjM2IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIHNldHVwLnB5OmNoZWNrIGNyb3NzX2NvbXBpbGluZyB3aGVuIGdldCBGTEFHUworCitGaXhlZCB3aGVuIGNvbXBpbGUgdGFyZ2V0IHB5dGhub24zOgorZ2NjIC1pc3lzdGVtL3BhdGgvdG8vc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIFwKKyAgICAtTD0vcGF0aC90by9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYgorCitUaGlzIGlzIGluY29ycmVjdCwgdGhlIG5hdGl2ZSBzeXNyb290IHNob3VsZCBub3QgYmUgdXNlZCBieSB0YXJnZXQKK3B5dGhvbjMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNldHVwLnB5IHwgICAxMCArKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKK2luZGV4IGU4MzM5Y2QuLjgzZmQzMWYgMTAwNjQ0CistLS0gYS9zZXR1cC5weQorKysrIGIvc2V0dXAucHkKK0BAIC0yMzgsNyArMjM4LDEwIEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICMgdW5mb3J0dW5hdGVseSwgZGlzdHV0aWxzIGRvZXNuJ3QgbGV0IHVzIHByb3ZpZGUgc2VwYXJhdGUgQyBhbmQgQysrCisgICAgICAgICAjIGNvbXBpbGVycworICAgICAgICAgaWYgY29tcGlsZXIgaXMgbm90IE5vbmU6CistICAgICAgICAgICAgKGNjc2hhcmVkLGNmbGFncykgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKCdDQ1NIQVJFRCcsJ0NGTEFHUycpCisrICAgICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorKyAgICAgICAgICAgICAgICAoY2NzaGFyZWQsY2ZsYWdzKSA9IChvcy5lbnZpcm9uLmdldCgnQ0NTSEFSRUQnKSBvciAnJywgb3MuZW52aXJvbi5nZXQoJ0NGTEFHUycpIG9yICcnKQorKyAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgIChjY3NoYXJlZCxjZmxhZ3MpID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygnQ0NTSEFSRUQnLCdDRkxBR1MnKQorICAgICAgICAgICAgIGFyZ3NbJ2NvbXBpbGVyX3NvJ10gPSBjb21waWxlciArICcgJyArIGNjc2hhcmVkICsgJyAnICsgY2ZsYWdzCisgICAgICAgICBzZWxmLmNvbXBpbGVyLnNldF9leGVjdXRhYmxlcygqKmFyZ3MpCisgCitAQCAtNDU3LDcgKzQ2MCwxMCBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgICAgICgnTERGTEFHUycsICctUicsIHNlbGYuY29tcGlsZXIucnVudGltZV9saWJyYXJ5X2RpcnMpLAorICAgICAgICAgICAgICAgICAoJ0xERkxBR1MnLCAnLUwnLCBzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycyksCisgICAgICAgICAgICAgICAgICgnQ1BQRkxBR1MnLCAnLUknLCBzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycykpOgorLSAgICAgICAgICAgIGVudl92YWwgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoZW52X3ZhcikKKysgICAgICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CisrICAgICAgICAgICAgICAgIGVudl92YWwgPSBvcy5lbnZpcm9uLmdldChlbnZfdmFyKQorKyAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgIGVudl92YWwgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoZW52X3ZhcikKKyAgICAgICAgICAgICBpZiBlbnZfdmFsOgorICAgICAgICAgICAgICAgICAjIFRvIHByZXZlbnQgb3B0cGFyc2UgZnJvbSByYWlzaW5nIGFuIGV4Y2VwdGlvbiBhYm91dCBhbnkKKyAgICAgICAgICAgICAgICAgIyBvcHRpb25zIGluIGVudl92YWwgdGhhdCBpdCBkb2Vzbid0IGtub3cgYWJvdXQgd2Ugc3RyaXAgb3V0CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXAucHktZmluZC1saWJyYXJpZXMtaW4tc3RhZ2luZy1kaXJzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXAucHktZmluZC1saWJyYXJpZXMtaW4tc3RhZ2luZy1kaXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNmJkMzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zZXR1cC5weS1maW5kLWxpYnJhcmllcy1pbi1zdGFnaW5nLWRpcnMucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorUGF0Y2ggc2V0dXAucHkgc28gdGhhdCB0aGUgZGV0ZWN0X21vZHVsZXMoKSBmdW5jdGlvbiBsb29rcyBmb3IgcmVxdWlyZWQKK2xpYnJhcmllcyBhbmQgaGVhZGVycyBpbiBTVEFHSU5HX0xJQkRJUiAvIFNUQUdJTkdfSU5DRElSLgorCitXaXRob3V0IHRoaXMgcGF0Y2gsIHNldmVyYWwgZXh0ZW5zaW9uIG1vZHVsZXMgYXJlIG5vdCBidWlsdCwgZXZlbiB0aG91Z2gKK3RoZWlyIGRlcGVuZGVuY2llcyBhcmUgcHJlc2VudCBpbiB0aGUgY29tcGlsZXIncyBzZWFyY2ggcGF0aHMuCitUaGUgcmVzdWx0IGlzIHRoZSBmb2xsb3dpbmcgd2FybmluZywgYW5kIHVsdGltYXRlbHkgaW5jb21wbGV0ZSBwYWNrYWdlczoKKworfCBUaGUgbmVjZXNzYXJ5IGJpdHMgdG8gYnVpbGQgdGhlc2Ugb3B0aW9uYWwgbW9kdWxlcyB3ZXJlIG5vdCBmb3VuZDoKK3wgX2J6MiAgICAgICAgICAgICAgICAgIF9jdXJzZXNfcGFuZWwgICAgICAgICBfZGJtCit8IF9nZGJtICAgICAgICAgICAgICAgICBfbHptYSAgICAgICAgICAgICAgICAgX3NxbGl0ZTMKK3wgbmlzICAgICAgICAgICAgICAgICAgIHJlYWRsaW5lICAgICAgICAgICAgICB6bGliCit8IFRvIGZpbmQgdGhlIG5lY2Vzc2FyeSBiaXRzLCBsb29rIGluIHNldHVwLnB5IGluIGRldGVjdF9tb2R1bGVzKCkgZm9yIHRoZSBtb2R1bGUncyBuYW1lLgorCitVcHN0cmVhbS1TdGF0dXM6ICBJbmFwcHJvcHJpYXRlIFtDcm9zcyBjb21waWxlIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBEb21pbmljIFNhY3LDqSA8ZG9taW5pYy5zYWNyZUBnbXguZGU+CisKK0luZGV4OiBQeXRob24tMy40LjMvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjMub3JpZy9zZXR1cC5weQorKysrIFB5dGhvbi0zLjQuMy9zZXR1cC5weQorQEAgLTUyMSw2ICs1MjEsOCBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIGxpYl9kaXJzID0gc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnNbOl0KKyAgICAgICAgICAgICBpbmNfZGlycyA9IHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzWzpdCisrICAgICAgICAgICAgbGliX2RpcnMuYXBwZW5kKG9zLmVudmlyb24uZ2V0KCdTVEFHSU5HX0xJQkRJUicpKQorKyAgICAgICAgICAgIGluY19kaXJzLmFwcGVuZChvcy5lbnZpcm9uLmdldCgnU1RBR0lOR19JTkNESVInKSkKKyAgICAgICAgIGV4dHMgPSBbXQorICAgICAgICAgbWlzc2luZyA9IFtdCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zZXR1cHR3ZWFrcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NldHVwdHdlYWtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOTFiMTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zZXR1cHR3ZWFrcy5wYXRjaApAQCAtMCwwICsxLDU3IEBACitUaGlzIHBhdGNoIHJlbW92ZXMgdmFyaW91cyB3YXlzIG5hdGl2ZSBzeXN0ZW0gb3B0aW9ucyBjYW4gcGFzcyBpbnRvIHRoZSBweXRob24gCitjb21waWxhdGlvbiBhbmQgc29tZWhvdyBicmVhayBDIG1vZHVsZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgU3BlY2lmaWNdCisKK1JQIDIwMTIvMDQvMjMKKworSW5kZXg6IFB5dGhvbi0yLjcuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMi5vcmlnL3NldHVwLnB5CTIwMTItMDQtMjMgMjA6MDM6NDcuMjk1NTgyNTUzICswMDAwCisrKysgUHl0aG9uLTIuNy4yL3NldHVwLnB5CTIwMTItMDQtMjMgMjA6MDM6MTUuMDAwMDAwMDAwICswMDAwCitAQCAtMjMxLDcgKzIzMSwxMyBAQAorICAgICAgICAgIyBjb21waWxlcnMKKyAgICAgICAgIGlmIGNvbXBpbGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIChjY3NoYXJlZCxjZmxhZ3MpID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygnQ0NTSEFSRUQnLCdDRkxBR1MnKQorLSAgICAgICAgICAgIGFyZ3NbJ2NvbXBpbGVyX3NvJ10gPSBjb21waWxlciArICcgJyArIGNjc2hhcmVkICsgJyAnICsgY2ZsYWdzCisrICAgICAgICAgICAgIyBOZWVkIHRvIGZpbHRlciBvdXQgLWlzeXNyb290IGZyb20gdGhlIGZsYWdzLiBJZGVhbGx5IHNob3VsZCAKKysgICAgICAgICAgICAjIGZpZ3VyZSBvdXQgdGFyZ2V0IGZsYWdzIGhlcmUuCisrICAgICAgICAgICAgZmxhZ3MgPSBbXQorKyAgICAgICAgICAgIGZvciBmIGluIGNmbGFncy5zcGxpdCgpOgorKyAgICAgICAgICAgICAgICBpZiBub3QgZi5zdGFydHN3aXRoKCItaXN5c3RlbSIpOgorKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYXBwZW5kKGYpCisrICAgICAgICAgICAgYXJnc1snY29tcGlsZXJfc28nXSA9IGNvbXBpbGVyICsgJyAnICsgY2NzaGFyZWQgKyAnICcgKyAnICcuam9pbihmbGFncykKKyAgICAgICAgIHNlbGYuY29tcGlsZXIuc2V0X2V4ZWN1dGFibGVzKCoqYXJncykKKyAKKyAgICAgICAgIGJ1aWxkX2V4dC5idWlsZF9leHRlbnNpb25zKHNlbGYpCitAQCAtMzkzLDcgKzM5OSw2IEBACisgICAgICAgICAjIGludG8gY29uZmlndXJlIGFuZCBzdG9yZWQgaW4gdGhlIE1ha2VmaWxlIChpc3N1ZSBmb3VuZCBvbiBPUyBYIDEwLjMpLgorICAgICAgICAgZm9yIGVudl92YXIsIGFyZ19uYW1lLCBkaXJfbGlzdCBpbiAoCisgICAgICAgICAgICAgICAgICgnTERGTEFHUycsICctUicsIHNlbGYuY29tcGlsZXIucnVudGltZV9saWJyYXJ5X2RpcnMpLAorLSAgICAgICAgICAgICAgICAoJ0xERkxBR1MnLCAnLUwnLCBzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycyksCisgICAgICAgICAgICAgICAgICgnQ1BQRkxBR1MnLCAnLUknLCBzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycykpOgorICAgICAgICAgICAgIGVudl92YWwgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoZW52X3ZhcikKKyAgICAgICAgICAgICBpZiBlbnZfdmFsOgorQEAgLTQxOSwxNiArNDI0LDE2IEBACisgICAgICAgICAgICAgICAgICAgICBmb3IgZGlyZWN0b3J5IGluIHJldmVyc2VkKG9wdGlvbnMuZGlycyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KGRpcl9saXN0LCBkaXJlY3RvcnkpCisgCistICAgICAgICBpZiBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpICE9ICcvdXNyJyBcCistICAgICAgICAgICAgICAgIGFuZCBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQWVRIT05GUkFNRVdPUksnKToKKysjICAgICAgICBpZiBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpICE9ICcvdXNyJyBcCisrIyAgICAgICAgICAgICAgICBhbmQgbm90IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUFlUSE9ORlJBTUVXT1JLJyk6CisgICAgICAgICAgICAgIyBPU1ggbm90ZTogRG9uJ3QgYWRkIExJQkRJUiBhbmQgSU5DTFVERURJUiB0byBidWlsZGluZyBhIGZyYW1ld29yaworICAgICAgICAgICAgICMgKFBZVEhPTkZSQU1FV09SSyBpcyBzZXQpIHRvIGF2b2lkICMgbGlua2luZyBwcm9ibGVtcyB3aGVuCisgICAgICAgICAgICAgIyBidWlsZGluZyBhIGZyYW1ld29yayB3aXRoIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIHRoYW4KKyAgICAgICAgICAgICAjIHRoZSBvbmUgdGhhdCBpcyBjdXJyZW50bHkgaW5zdGFsbGVkIChpc3N1ZSAjNzQ3MykKKy0gICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiTElCRElSIikpCistICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIklOQ0xVREVESVIiKSkKKysjICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLAorKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJMSUJESVIiKSkKKysjICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLAorKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJJTkNMVURFRElSIikpCisgCisgICAgICAgICB0cnk6CisgICAgICAgICAgICAgaGF2ZV91bmljb2RlID0gdW5pY29kZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2h1dGlsLWZvbGxvdy1zeW1saW5rLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NodXRpbC1mb2xsb3ctc3ltbGluay1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyYjFjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NodXRpbC1mb2xsb3ctc3ltbGluay1maXgucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorc2h1dGlscyBzaG91bGQgY29uc2lkZXIgc3ltbGlua3MKKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBhL0xpYi9zaHV0aWwucHkJMjAxMy0wMS0yOSAxMjozMTowNi45MjY1NTU3NzkgLTA4MDAKKysrKyBiL0xpYi9zaHV0aWwucHkJMjAxMy0wMS0yOSAxNjozMTozOS4wOTc1NTQxODIgLTA4MDAKK0BAIC0xMzIsNyArMTMyLDcgQEAgZGVmIGNvcHltb2RlKHNyYywgZHN0LCAqLCBmb2xsb3dfc3ltbGluaworICAgICBzdCA9IHN0YXRfZnVuYyhzcmMpCisgICAgIGNobW9kX2Z1bmMoZHN0LCBzdGF0LlNfSU1PREUoc3Quc3RfbW9kZSkpCisgCistaWYgaGFzYXR0cihvcywgJ2xpc3R4YXR0cicpOgorK2lmIGhhc2F0dHIob3MsICdsaXN0eGF0dHInKSBhbmQgb3MubGlzdHhhdHRyIGluIG9zLnN1cHBvcnRzX2ZvbGxvd19zeW1saW5rczoKKyAgICAgZGVmIF9jb3B5eGF0dHIoc3JjLCBkc3QsICosIGZvbGxvd19zeW1saW5rcz1UcnVlKToKKyAgICAgICAgICIiIkNvcHkgZXh0ZW5kZWQgZmlsZXN5c3RlbSBhdHRyaWJ1dGVzIGZyb20gYHNyY2AgdG8gYGRzdGAuCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zaXRlY3VzdG9taXplLnB5IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2l0ZWN1c3RvbWl6ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzhiNWUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2l0ZWN1c3RvbWl6ZS5weQpAQCAtMCwwICsxLDM3IEBACisjIE9wZW5FbWJlZGRlZCBzaXRlY3VzdG9taXplLnB5IChDKSAyMDAyLTIwMDggTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWxhdWVyQHZhbmlsbGUtbWVkaWEuZGU+CisjIEdQTHYyIG9yIGxhdGVyCisjIFZlcnNpb246IDIwMDgxMTIzCisjIEZlYXR1cmVzOgorIyAqIHNldCBwcm9wZXIgZGVmYXVsdCBlbmNvZGluZworIyAqIGVuYWJsZSByZWFkbGluZSBjb21wbGV0aW9uIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcgorIyAqIGxvYWQgY29tbWFuZCBsaW5lIGhpc3Rvcnkgb24gc3RhcnR1cAorIyAqIHNhdmUgY29tbWFuZCBsaW5lIGhpc3Rvcnkgb24gZXhpdCAKKworaW1wb3J0IG9zCisKK2RlZiBfX2V4aXRoYW5kbGVyKCk6CisgICAgdHJ5OgorICAgICAgICByZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUoICIlcy8ucHl0aG9uLWhpc3RvcnkiICUgb3MuZ2V0ZW52KCAiSE9NRSIsICIvdG1wIiApICkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcGFzcworCitkZWYgX19yZWdpc3RlckV4aXRIYW5kbGVyKCk6CisgICAgaW1wb3J0IGF0ZXhpdAorICAgIGF0ZXhpdC5yZWdpc3RlciggX19leGl0aGFuZGxlciApCisKK2RlZiBfX2VuYWJsZVJlYWRsaW5lU3VwcG9ydCgpOgorICAgIHJlYWRsaW5lLnNldF9oaXN0b3J5X2xlbmd0aCggMTAwMCApCisgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoICJ0YWI6IGNvbXBsZXRlIiApCisgICAgdHJ5OgorICAgICAgICByZWFkbGluZS5yZWFkX2hpc3RvcnlfZmlsZSggIiVzLy5weXRob24taGlzdG9yeSIgJSBvcy5nZXRlbnYoICJIT01FIiwgIi90bXAiICkgKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBwYXNzCisKK2ltcG9ydCBzeXMKK3RyeToKKyAgICBpbXBvcnQgcmxjb21wbGV0ZXIsIHJlYWRsaW5lCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBfX3JlZ2lzdGVyRXhpdEhhbmRsZXIoKQorICAgIF9fZW5hYmxlUmVhZGxpbmVTdXBwb3J0KCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3N5c2NvbmZpZy5weS1hZGQtX1BZVEhPTl9QUk9KRUNUX1NSQy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3N5c2NvbmZpZy5weS1hZGQtX1BZVEhPTl9QUk9KRUNUX1NSQy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTA3NjQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc3lzY29uZmlnLnB5LWFkZC1fUFlUSE9OX1BST0pFQ1RfU1JDLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gZmM5M2IzY2MyM2I0Zjk2OThhZTkyYTQyOTg2ZGJiMDJiNmYxOTU4OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogU3VuLCAxOCBKYW4gMjAxNSAwNjoyOTo1MCAtMDgwMAorU3ViamVjdDogW1BBVENIXSBzeXNjb25maWcucHk6IGFkZCBfUFlUSE9OX1BST0pFQ1RfU1JDCisKK3B5dGhvbjMgaGFzIGludHJvZHVjZWQgX1BZVEhPTl9QUk9KRUNUX0JBU0Ugd2hpY2ggaXMgdXNlZCBmb3Igc2VwYXJhdGUgQgorYW5kIFMsIGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2hlbiBjb21waWxlIE1vZHVsZXMsIHRoZSB0YXJnZXQgcHl0aG9uMyBydW5zCitweXRob24zLW5hdGl2ZSdzIHN5c2NvbmZpZyB0byBnZXQgc3JjZGlyIHdoaWNoIGlzIHRoZSBuYXRpdmUncywgdGhlcmUKK3dvdWxkIGJlIGVycm9ycyB3aGVuIG5hdGl2ZSdzIHNyY2RpciBoYXMgYmVlbiByZW1vdmVkLCBhZGQKK19QWVRIT05fUFJPSkVDVF9TUkMgdG8gZml4IHRoZSBwcm9ibGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBMaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weSB8ICAgIDUgKysrKy0KKyBMaWIvc3lzY29uZmlnLnB5ICAgICAgICAgICB8ICAgIDUgKysrKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5IGIvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKK2luZGV4IGE1NDVhYjkuLjc0MzE3ZDEgMTAwNjQ0CistLS0gYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorKysrIGIvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKK0BAIC01NTQsNyArNTU0LDEwIEBAIGRlZiBnZXRfY29uZmlnX3ZhcnMoKmFyZ3MpOgorICAgICAgICAgX2NvbmZpZ192YXJzWydleGVjX3ByZWZpeCddID0gRVhFQ19QUkVGSVgKKyAKKyAgICAgICAgICMgQWx3YXlzIGNvbnZlcnQgc3JjZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKKy0gICAgICAgIHNyY2RpciA9IF9jb25maWdfdmFycy5nZXQoJ3NyY2RpcicsIHByb2plY3RfYmFzZSkKKysgICAgICAgIGlmICJfUFlUSE9OX1BST0pFQ1RfU1JDIiBpbiBvcy5lbnZpcm9uOgorKyAgICAgICAgICAgIHNyY2RpciA9IG9zLnBhdGguYWJzcGF0aChvcy5lbnZpcm9uWyJfUFlUSE9OX1BST0pFQ1RfU1JDIl0pCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIHNyY2RpciA9IF9jb25maWdfdmFycy5nZXQoJ3NyY2RpcicsIHByb2plY3RfYmFzZSkKKyAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKKyAgICAgICAgICAgICBpZiBweXRob25fYnVpbGQ6CisgICAgICAgICAgICAgICAgICMgSWYgc3JjZGlyIGlzIGEgcmVsYXRpdmUgcGF0aCAodHlwaWNhbGx5ICcuJyBvciAnLi4nKQorZGlmZiAtLWdpdCBhL0xpYi9zeXNjb25maWcucHkgYi9MaWIvc3lzY29uZmlnLnB5CitpbmRleCA3Mjg3ZjExLi5jYzkyOTk4IDEwMDY0NAorLS0tIGEvTGliL3N5c2NvbmZpZy5weQorKysrIGIvTGliL3N5c2NvbmZpZy5weQorQEAgLTU2Miw3ICs1NjIsMTAgQEAgZGVmIGdldF9jb25maWdfdmFycygqYXJncyk6CisgICAgICAgICBfQ09ORklHX1ZBUlNbJ3VzZXJiYXNlJ10gPSBfZ2V0dXNlcmJhc2UoKQorIAorICAgICAgICAgIyBBbHdheXMgY29udmVydCBzcmNkaXIgdG8gYW4gYWJzb2x1dGUgcGF0aAorLSAgICAgICAgc3JjZGlyID0gX0NPTkZJR19WQVJTLmdldCgnc3JjZGlyJywgX1BST0pFQ1RfQkFTRSkKKysgICAgICAgIGlmICJfUFlUSE9OX1BST0pFQ1RfU1JDIiBpbiBvcy5lbnZpcm9uOgorKyAgICAgICAgICAgIHNyY2RpciA9IG9zLnBhdGguYWJzcGF0aChvcy5lbnZpcm9uWyJfUFlUSE9OX1BST0pFQ1RfU1JDIl0pCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIHNyY2RpciA9IF9DT05GSUdfVkFSUy5nZXQoJ3NyY2RpcicsIF9QUk9KRUNUX0JBU0UpCisgICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CisgICAgICAgICAgICAgaWYgX1BZVEhPTl9CVUlMRDoKKyAgICAgICAgICAgICAgICAgIyBJZiBzcmNkaXIgaXMgYSByZWxhdGl2ZSBwYXRoICh0eXBpY2FsbHkgJy4nIG9yICcuLicpCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc3lzcm9vdC1pbmNsdWRlLWhlYWRlcnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODViNTU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc3lzcm9vdC1pbmNsdWRlLWhlYWRlcnMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRG9udCBzZWFyY2ggaGFyZGNvZGVkIHBhdGhzLCB3ZSBtaWdodCBiZSBkb2luZyBhIGNyb3NzLWJ1aWxkCitVc2UgJz0nIGluLWZyb250IHRvIGxldCBjb21waWxlciBhcHBlbmQgc3lzcm9vdCwgaWYgaXQgY2FuCisKK1Nob3VsZCBmaXggdGhpbmdzIGxpa2UKKworY29uZmlndXJlOjY5NzI6IGFybS1hbmdzdHJvbS1saW51eC1nbnVlYWJpLWdjYyAgLW1hcmNoPWFybXY3LWEgLW10aHVtYi1pbnRlcndvcmsgLW1mbG9hdC1hYmk9aGFyZCAtbWZwdT1uZW9uIC1tdHVuZT1jb3J0ZXgtYTggLUROREVCVUcgLWZuby1pbmxpbmUgLURfX1NPRlRGUF9fIC0tc3lzcm9vdD0vYnVpbGQvdjIwMTMuMDYvYnVpbGQvdG1wLWFuZ3N0cm9tX3YyMDEzXzA2LWVnbGliYy9zeXNyb290cy9iZWFnbGVib25lIC1jIC1PMiAtcGlwZSAtZyAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3IGNvbmZ0ZXN0LmMgPiY1CitjYzE6IHdhcm5pbmc6IGluY2x1ZGUgbG9jYXRpb24gIi91c3IvaW5jbHVkZS9uY3Vyc2VzdyIgaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbiBbLVdwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXQorCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworCitJbmRleDogUHl0aG9uLTMuMy4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuMy4yLm9yaWcvc2V0dXAucHkJMjAxMy0wNy0zMCAwMTozMDo0OC4wMDAwMDAwMDAgLTA3MDAKKysrKyBQeXRob24tMy4zLjIvc2V0dXAucHkJMjAxMy0wNy0zMCAwMTo0MToxMS42OTc4NjI3MjMgLTA3MDAKK0BAIC0xMjEwLDcgKzEyMTAsNyBAQAorICAgICAgICAgcGFuZWxfbGlicmFyeSA9ICdwYW5lbCcKKyAgICAgICAgIGlmIGN1cnNlc19saWJyYXJ5ID09ICduY3Vyc2Vzdyc6CisgICAgICAgICAgICAgY3Vyc2VzX2RlZmluZXMuYXBwZW5kKCgnSEFWRV9OQ1VSU0VTVycsICcxJykpCistICAgICAgICAgICAgY3Vyc2VzX2luY2x1ZGVzLmFwcGVuZCgnL3Vzci9pbmNsdWRlL25jdXJzZXN3JykKKysgICAgICAgICAgICBjdXJzZXNfaW5jbHVkZXMuYXBwZW5kKCc9L3Vzci9pbmNsdWRlL25jdXJzZXN3JykKKyAgICAgICAgICAgICAjIEJ1ZyAxNDY0MDU2OiBJZiBfY3Vyc2VzLnNvIGxpbmtzIHdpdGggbmN1cnNlc3csCisgICAgICAgICAgICAgIyBfY3Vyc2VzX3BhbmVsLnNvIG11c3QgbGluayB3aXRoIHBhbmVsdy4KKyAgICAgICAgICAgICBwYW5lbF9saWJyYXJ5ID0gJ3BhbmVsdycKK0BAIC0xODE5LDcgKzE4MTksNyBAQAorICAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICAjIE9TIFggMTAuNSBjb21lcyB3aXRoIGxpYmZmaS5keWxpYjsgdGhlIGluY2x1ZGUgZmlsZXMgYXJlCisgICAgICAgICAgICAgIyBpbiAvdXNyL2luY2x1ZGUvZmZpCistICAgICAgICAgICAgaW5jX2RpcnMuYXBwZW5kKCcvdXNyL2luY2x1ZGUvZmZpJykKKysgICAgICAgICAgICBpbmNfZGlycy5hcHBlbmQoJz0vdXNyL2luY2x1ZGUvZmZpJykKKyAKKyAgICAgICAgIGZmaV9pbmMgPSBbc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJMSUJGRklfSU5DTFVERURJUiIpXQorICAgICAgICAgaWYgbm90IGZmaV9pbmMgb3IgZmZpX2luY1swXSA9PSAnJzoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3VuaXhjY29tcGlsZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy91bml4Y2NvbXBpbGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOTBmMTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy91bml4Y2NvbXBpbGVyLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGUgQ0MgdmFyaWFibGUsc29tZXRpbWVzIGxpa2U6Ing4Nl82NC1wb2t5LWxpbnV4LWdjYyAgIC1tNjQgLS1zeXNyb290PS8ke1RNUERJUn0vc3lzcm9vdHMvcWVtdXg4Ni02NCIsIGNvbnRhaW5zIG9wdGlvbiBpbmZvcm1hdGlvbi4gCitUaGlzIHdpbGwgbGVhZCB0byB3cm9uZyBjb21waWxlciBuYW1lICJxZW11eDg2LTY0IiByYXRoZXIgdGhhbiAieDg2XzY0LXBva3ktbGludXgtZ2NjIiB3aGVuIHB5dGhvbiBmaW5kaW5nIHRoZSBjb21waWxlciBuYW1lLgorCitTZWNvbmRseSBhZGQgLUw9PHBhdGg+IHRoaXMgd2F5IGxpbmtlciB3aWxsIGJlIGFibGUgdG8gcmVzb2x2ZSAvdXNyL2xpYiB3LnIudCBzeXNyb290IGFuZCBub3QKK3VzZSBoYXJkY29kZWQgL3Vzci9saWIgdG8gbG9vayBmb3IgbGlicyB3aGljaCBpcyB3cm9uZyBpbiBjcm9zcyBjb21waWxlIGVudmlyb25tZW50IGFuZCB0aGlzIHdpbGwgd29yaworb2sgb24gbmF0aXZlIHN5c3RlbXMgdG9vIHNpbmNlIHN5c3Jvb3QgZm9yIG5hdGl2ZSBjb21waWxlcnMgaXMgLworCitTaWduZWQtb2ZmLWJ5OiBNZWkgTGVpIDxsZWkubWVpQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitJbmRleDogUHl0aG9uLTMuMy4yL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjMuMi5vcmlnL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQkyMDEzLTA1LTE1IDA5OjMyOjU0LjAwMDAwMDAwMCAtMDcwMAorKysrIFB5dGhvbi0zLjMuMi9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkJMjAxMy0wOC0wMSAwMDo1ODoxOC42MjkwNTYyODYgLTA3MDAKK0BAIC0yMDIsNyArMjAyLDkgQEAKKyAgICAgIyBjY29tcGlsZXIucHkuCisgCisgICAgIGRlZiBsaWJyYXJ5X2Rpcl9vcHRpb24oc2VsZiwgZGlyKToKKy0gICAgICAgIHJldHVybiAiLUwiICsgZGlyCisrICAgICAgICBpZiBkaXIuc3RhcnRzd2l0aCgiLiIpOgorKyAgICAgICAgICAgIHJldHVybiAiLUwiICsgZGlyCisrICAgICAgICByZXR1cm4gIi1MPSIgKyBkaXIKKyAKKyAgICAgZGVmIF9pc19nY2Moc2VsZiwgY29tcGlsZXJfbmFtZSk6CisgICAgICAgICByZXR1cm4gImdjYyIgaW4gY29tcGlsZXJfbmFtZSBvciAiZysrIiBpbiBjb21waWxlcl9uYW1lCitAQCAtMjIxLDcgKzIyMSw3IEBACisgICAgICAgICAjIHRoaXMgdGltZSwgdGhlcmUncyBubyB3YXkgdG8gZGV0ZXJtaW5lIHRoaXMgaW5mb3JtYXRpb24gZnJvbQorICAgICAgICAgIyB0aGUgY29uZmlndXJhdGlvbiBkYXRhIHN0b3JlZCBpbiB0aGUgUHl0aG9uIGluc3RhbGxhdGlvbiwgc28KKyAgICAgICAgICMgd2UgdXNlIHRoaXMgaGFjay4KKy0gICAgICAgIGNvbXBpbGVyID0gb3MucGF0aC5iYXNlbmFtZShzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkNDIikpCisrICAgICAgICBjb21waWxlciA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiQ0MiKQorICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzo2XSA9PSAiZGFyd2luIjoKKyAgICAgICAgICAgICAjIE1hY09TWCdzIGxpbmtlciBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIC1SIGZsYWcgYXQgYWxsCisgICAgICAgICAgICAgcmV0dXJuICItTCIgKyBkaXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zXzMuNC4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjNfMy40LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxZDI3OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zXzMuNC4zLmJiCkBAIC0wLDAgKzEsMjI1IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi5pbmMKKworREVQRU5EUyA9ICJweXRob24zLW5hdGl2ZSBsaWJmZmkgYnppcDIgZGIgZ2RibSBvcGVuc3NsIHJlYWRsaW5lIHNxbGl0ZTMgemxpYiB2aXJ0dWFsL2xpYmludGwgeHoiCitQUiA9ICIke0lOQ19QUn0uMCIKK1BZVEhPTl9NQUpNSU4gPSAiMy40IgorUFlUSE9OX0JJTkFCST0gIiR7UFlUSE9OX01BSk1JTn1tIgorRElTVFJPX1NSQ19VUkkgPz0gImZpbGU6Ly9zaXRlY3VzdG9taXplLnB5IgorRElTVFJPX1NSQ19VUklfbGludXhzdGRiYXNlID0gIiIKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQVn0vUHl0aG9uLSR7UFZ9LnRhci54eiBcCitmaWxlOi8vcHl0aG9uLWNvbmZpZy5wYXRjaCBcCitmaWxlOi8vMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2ggXAorZmlsZTovLzAyMC1kb250LWNvbXBpbGUtcHl0aG9uLWZpbGVzLnBhdGNoIFwKK2ZpbGU6Ly8wMzAtZml4dXAtaW5jbHVkZS1kaXJzLnBhdGNoIFwKK2ZpbGU6Ly8wNzAtZG9udC1jbGVhbi1pcGtnLWluc3RhbGwucGF0Y2ggXAorZmlsZTovLzA4MC1kaXN0dXRpbHMtZG9udF9hZGp1c3RfZmlsZXMucGF0Y2ggXAorZmlsZTovLzExMC1lbmFibGUtemxpYi5wYXRjaCBcCitmaWxlOi8vMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoIFwKK2ZpbGU6Ly8xNTAtZml4LXNldHVwdGVybS5wYXRjaCBcCitmaWxlOi8vMDAwMS1oMnB5LUZpeC1pc3N1ZS0xMzAzMi13aGVyZS1pdC1mYWlscy13aXRoLVVuaWNvZGVEZWNvLnBhdGNoIFwKK2ZpbGU6Ly9tYWtlcmFjZS5wYXRjaCBcCiske0RJU1RST19TUkNfVVJJfSBcCisiCisKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgICAgIGZpbGU6Ly8wMy1maXgtdGtpbnRlci1kZXRlY3Rpb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzA0LWRlZmF1bHQtaXMtb3B0aW1pemVkLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2NnaV9weS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vaG9zdF9pbmNsdWRlX2NvbnRhbWluYXRpb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3B5dGhvbi0zLjMtbXVsdGlsaWIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3NodXRpbC1mb2xsb3ctc3ltbGluay1maXgucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3N5c3Jvb3QtaW5jbHVkZS1oZWFkZXJzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly91bml4Y2NvbXBpbGVyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hdm9pZC1uY3Vyc2Vzdy1pbmNsdWRlLXBhdGgucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3B5dGhvbjMtdXNlLUNST1NTUFlUSE9OUEFUSC1mb3ItUFlUSE9OX0ZPUl9CVUlMRC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcHl0aG9uMy1zZXR1cC5weS1uby1ob3N0LWhlYWRlcnMtbGlicy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc3lzY29uZmlnLnB5LWFkZC1fUFlUSE9OX1BST0pFQ1RfU1JDLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zZXR1cC5weS1jaGVjay1jcm9zc19jb21waWxpbmctd2hlbi1nZXQtRkxBR1MucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3NldHVwLnB5LWZpbmQtbGlicmFyaWVzLWluLXN0YWdpbmctZGlycy5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ZDA5MmQxYmJhNmUxN2YwZDliZDIxYjQ5ZTQ0MWRkNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNWIzOTYzNTMzNzY4ZDVmYzMyNWE0ZDdhNmJkNmY2NjY3MjYwMDJkNjk2ZjFkMzk5ZWMwNmIwNDNlYTk5NmI4IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1kZDk4ZDAxZDQ3MWZhYzhkOGRiZGQ5NzUyMjlkYmEwMyIKKworUyA9ICIke1dPUktESVJ9L1B5dGhvbi0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgbXVsdGlsaWJfaGVhZGVyIHB5dGhvbjNuYXRpdmUgcGtnY29uZmlnCisKK0NPTkZJR1VSRU9QVFMgKz0gIiAtLXdpdGgtc3lzdGVtLWZmaSAiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTID0gImFjX2N2X2hhdmVfY2hmbGFncz1ubyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfaGF2ZV9sY2hmbGFncz1ubyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0PXllcyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfYnVnZ3lfZ2V0YWRkcmluZm89bm8gXAorICAgICAgICAgICAgICAgIGFjX2N2X2ZpbGVfX2Rldl9wdG14PXllcyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfZmlsZV9fZGV2X3B0Yz1ubyBcCisiCisjIFRoZSAzIGxpbmVzIGJlbG93IGFyZSBjb3BpZWQgZnJvbSB0aGUgbGliZmZpIHJlY2lwZSwgY3R5cGVzIHNoaXBzIGl0cyBvd24gY29weSBvZiB0aGUgbGliZmZpIHNvdXJjZXMKKyNTb21laG93IGdjYyBkb2Vzbid0IHNldCBfX1NPRlRGUF9fIHdoZW4gcGFzc2luZyAtbWZsb2F0YWJpPXNvZnRwIDooCitUQVJHRVRfQ0NfQVJDSF9hcHBlbmRfYXJtdjYgPSAiIC1EX19TT0ZURlBfXyIKK1RBUkdFVF9DQ19BUkNIX2FwcGVuZF9hcm12N2EgPSAiIC1EX19TT0ZURlBfXyIKK1RBUkdFVF9DQ19BUkNIICs9ICItRE5ERUJVRyAtZm5vLWlubGluZSIKK0VYVFJBX09FTUFLRSArPSAiQ1JPU1NfQ09NUElMRT15ZXMiCitFWFRSQV9PRUNPTkYgKz0gIkNST1NTUFlUSE9OUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9saWItZHlubG9hZC8gLS13aXRob3V0LWVuc3VyZXBpcCIKKworZXhwb3J0IENST1NTX0NPTVBJTEUgPSAiJHtUQVJHRVRfUFJFRklYfSIKK2V4cG9ydCBfUFlUSE9OX1BST0pFQ1RfQkFTRSA9ICIke0J9IgorZXhwb3J0IF9QWVRIT05fUFJPSkVDVF9TUkMgPSAiJHtTfSIKK2V4cG9ydCBDQ1NIQVJFRCA9ICItZlBJQyIKKworIyBGaXggY3R5cGVzIGNyb3NzIGNvbXBpbGF0aW9uCitleHBvcnQgQ1JPU1NQWVRIT05QQVRIID0gIiR7Qn0vYnVpbGQvbGliLmxpbnV4LSR7VEFSR0VUX0FSQ0h9LSR7UFlUSE9OX01BSk1JTn06JHtTfS9MaWI6JHtTfS9MaWIvcGxhdC1saW51eCIKKworIyBObyBjdHlwZXMgb3B0aW9uIGZvciBweXRob24gMworUFlUSE9OTFNCT1BUUyA9ICIiCisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJcm0gLWYgJHtTfS9NYWtlZmlsZS5vcmlnCisJYXV0b3JlY29uZiAtV2Nyb3NzIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAtLWV4Y2x1ZGU9YXV0b3BvaW50IC4uL1B5dGhvbi0ke1BWfS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpCit9CisKK2RvX2NvbXBpbGUoKSB7CisgICAgICAgICMgcmVnZW5lcmF0ZSBwbGF0Zm9ybSBzcGVjaWZpYyBmaWxlcywgYmVjYXVzZSB0aGV5IGRlcGVuZCBvbiBzeXN0ZW0gaGVhZGVycworICAgICAgICBjZCAke1N9L0xpYi9wbGF0LWxpbnV4KgorICAgICAgICBpbmNsdWRlPSR7U1RBR0lOR19JTkNESVJ9ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKKyAgICAgICAgICAgICAgICAke1N9L1Rvb2xzL3NjcmlwdHMvaDJweS5weSAtaSAnKHVfbG9uZyknIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9kbGZjbi5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9saW51eC9jZHJvbS5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9uZXRpbmV0L2luLmggXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L3N5cy90eXBlcy5oCisgICAgICAgIHNlZCAtZSAncywke1NUQUdJTkdfRElSX0hPU1R9LCxnJyAtaSAqLnB5CisgICAgICAgIGNkIC0KKworCisJIyByZW1vdmUgYW55IGJvZ3VzIExEX0xJQlJBUllfUEFUSAorCXNlZCAtaSAtZSBzLFJVTlNIQVJFRD0uKixSVU5TSEFSRUQ9LCBNYWtlZmlsZQorCisJaWYgWyAhIC1mIE1ha2VmaWxlLm9yaWcgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUgTWFrZWZpbGUub3JpZworCWZpCisJc2VkIC1pIC1lICdzLF5DT05GSUdVUkVfTERGTEFHUz0uKixDT05GSUdVUkVfTERGTEFHUz0tTC4gLUwke1NUQUdJTkdfTElCRElSfSxnJyBcCisJCS1lICdzLGxpYmRpcj0ke2xpYmRpcn0sbGliZGlyPSR7U1RBR0lOR19MSUJESVJ9LGcnIFwKKwkJLWUgJ3MsbGliZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9LGxpYmV4ZWNkaXI9JHtTVEFHSU5HX0RJUl9IT1NUfSR7bGliZXhlY2Rpcn0sZycgXAorCQktZSAncyxeTElCRElSPS4qLExJQkRJUj0ke1NUQUdJTkdfTElCRElSfSxnJyBcCisJCS1lICdzLGluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfSxpbmNsdWRlZGlyPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKKwkJLWUgJ3MsXklOQ0xVREVESVI9LiosSU5DTFVERT0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCS1lICdzLF5DT05GSU5DTFVERURJUj0uKixDT05GSU5DTFVERT0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCU1ha2VmaWxlCisJIyBzYXZlIGNvcHkgb2YgaXQgbm93LCBiZWNhdXNlIGlmIHdlIGRvIGl0IGluIGRvX2luc3RhbGwgYW5kIAorCSMgdGhlbiBjYWxsIGRvX2luc3RhbGwgdHdpY2Ugd2UgZ2V0IE1ha2VmaWxlLm9yaWcgPT0gTWFrZWZpbGUuc3lzcm9vdAorCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZSBNYWtlZmlsZS5zeXNyb290CisKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCisJCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisJCUxJQj0ke2Jhc2VsaWJ9IFwKKwkJQVJDSD0ke1RBUkdFVF9BUkNIfSBcCisJCU9QVD0iJHtDRkxBR1N9IiBsaWJweXRob24zLnNvCisKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisJCUxJQj0ke2Jhc2VsaWJ9IFwKKwkJQVJDSD0ke1RBUkdFVF9BUkNIfSBcCisJCU9QVD0iJHtDRkxBR1N9IgorfQorCitkb19pbnN0YWxsKCkgeworCSMgbWFrZSBpbnN0YWxsIG5lZWRzIHRoZSBvcmlnaW5hbCBNYWtlZmlsZSwgb3Igb3RoZXJ3aXNlIHRoZSBpbmNsdWVzIHdvdWxkCisJIyBnbyB0byAke0R9JHtTVEFHSU5HLi4ufS8uLi4KKwlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUub3JpZyBNYWtlZmlsZQorCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZworCisJIyByZXJ1biB0aGUgYnVpbGQgb25jZSBhZ2FpbiB3aXRoIG9yaWdpbmFsIG1ha2VmaWxlIHRoaXMgdGltZQorCSMgcnVuIGluc3RhbGwgaW4gYSBzZXBhcmF0ZSBzdGVwIHRvIGF2b2lkIGNvbXBpbGUvaW5zdGFsbCByYWNlCisJb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcGdlbiBcCisJCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAorCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisJCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCisJCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorCQlMSUI9JHtiYXNlbGlifSBcCisJCUFSQ0g9JHtUQVJHRVRfQVJDSH0gXAorCQlERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfQorCQorCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKwkJTElCPSR7YmFzZWxpYn0gXAorCQlBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKKwkJREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0gaW5zdGFsbAorCisJIyBhdm9pZCBjb25mbGljdCB3aXRoIDJ0bzMgZnJvbSBQeXRob24gMgorCXJtIC1mICR7RH0vJHtiaW5kaXJ9LzJ0bzMKKworCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZS5zeXNyb290ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlCisKKwlpZiBbIC1lICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfQorCWZpCisKKwlvZV9tdWx0aWxpYl9oZWFkZXIgcHl0aG9uJHtQWVRIT05fQklOQUJJfS9weWNvbmZpZy5oCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayAoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59IFRFUk1JTkZPX0RJUlM9JyR7c3lzY29uZmRpcn0vdGVybWluZm86L2V0Yy90ZXJtaW5mbzovdXNyL3NoYXJlL3Rlcm1pbmZvOi91c3Ivc2hhcmUvbWlzYy90ZXJtaW5mbzovbGliL3Rlcm1pbmZvJworfQorCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiTWFrZWZpbGUiCitQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgKz0gInB5X3BhY2thZ2VfcHJlcHJvY2VzcyIKKworcHlfcGFja2FnZV9wcmVwcm9jZXNzICgpIHsKKwkjIGNvcHkgYmFjayB0aGUgb2xkIE1ha2VmaWxlIHRvIGZpeCB0YXJnZXQgcGFja2FnZQorCWluc3RhbGwgLW0gMDY0NCAke0J9L01ha2VmaWxlLm9yaWcgJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUKKwkjIFJlbW92ZSByZWZlcmVuY2VzIHRvIGJ1aWxkbWFjaGluZSBwYXRocyBpbiB0YXJnZXQgTWFrZWZpbGUgYW5kIF9zeXNjb25maWdkYXRhCisJc2VkIC1pIC1lICdzOi0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH06OmcnIC1lIHM6Jy0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9Jzo6ZyBcCisJCSR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlIFwKKwkJJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9fc3lzY29uZmlnZGF0YS5weQorfQorCityZXF1aXJlIHB5dGhvbi0ke1BZVEhPTl9NQUpNSU59LW1hbmlmZXN0LmluYworCisjIG1hbnVhbCBkZXBlbmRlbmN5IGFkZGl0aW9ucworUlBST1ZJREVTXyR7UE59LWNvcmUgPSAiJHtQTn0iCitSUkVDT01NRU5EU18ke1BOfS1jb3JlID0gIiR7UE59LXJlYWRsaW5lIgorUlJFQ09NTUVORFNfJHtQTn0tY3J5cHQgPSAib3BlbnNzbCIKK1JSRUNPTU1FTkRTXyR7UE59LWNyeXB0X2NsYXNzLW5hdGl2ZXNkayA9ICJuYXRpdmVzZGstb3BlbnNzbCIKKworRklMRVNfJHtQTn0tMnRvMyArPSAiJHtiaW5kaXJ9LzJ0bzMtJHtQWVRIT05fTUFKTUlOfSIKK0ZJTEVTXyR7UE59LXB5ZG9jICs9ICIke2JpbmRpcn0vcHlkb2Mke1BZVEhPTl9NQUpNSU59ICR7YmluZGlyfS9weWRvYzMiCitGSUxFU18ke1BOfS1pZGxlICs9ICIke2JpbmRpcn0vaWRsZTMgJHtiaW5kaXJ9L2lkbGUke1BZVEhPTl9NQUpNSU59IgorCitQQUNLQUdFUyA9KyAiJHtQTn0tcHl2ZW52IgorRklMRVNfJHtQTn0tcHl2ZW52ICs9ICIke2JpbmRpcn0vcHl2ZW52LSR7UFlUSE9OX01BSk1JTn0gJHtiaW5kaXJ9L3B5dmVudiIKKworIyBwYWNrYWdlIGxpYnB5dGhvbjMKK1BBQ0tBR0VTID0rICJsaWJweXRob24zIGxpYnB5dGhvbjMtc3RhdGljZGV2IgorRklMRVNfbGlicHl0aG9uMyA9ICIke2xpYmRpcn0vbGlicHl0aG9uKi5zby4qIgorRklMRVNfbGlicHl0aG9uMy1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy0ke1BZVEhPTl9CSU5BQkl9L2xpYnB5dGhvbiR7UFlUSE9OX0JJTkFCSX0uYSIKKworIyBjYXRjaCBkZWJ1ZyBleHRlbnNpb25zIChpc24ndCB0aGF0IGFscmVhZHkgaW4gcHl0aG9uLWNvcmUtZGJnPykKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vbGliLWR5bmxvYWQvLmRlYnVnIgorCisjIGNhdGNoIGFsbCB0aGUgcmVzdCAodW5zb3J0ZWQpCitQQUNLQUdFUyArPSAiJHtQTn0tbWlzYyIKK1JERVBFTkRTXyR7UE59LW1pc2MgKz0gIiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1taXNjID0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59IgorCisjIGNhdGNoIG1hbnBhZ2UKK1BBQ0tBR0VTICs9ICIke1BOfS1tYW4iCitGSUxFU18ke1BOfS1tYW4gPSAiJHtkYXRhZGlyfS9tYW4iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbl8yLjcuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob25fMi43LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0NTU3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob25fMi43LjkuYmIKQEAgLTAsMCArMSwxODAgQEAKK3JlcXVpcmUgcHl0aG9uLmluYworREVQRU5EUyA9ICJweXRob24tbmF0aXZlIGxpYmZmaSBiemlwMiBkYiBnZGJtIG9wZW5zc2wgcmVhZGxpbmUgc3FsaXRlMyB6bGliIgorUFIgPSAiJHtJTkNfUFJ9IgorCitESVNUUk9fU1JDX1VSSSA/PSAiZmlsZTovL3NpdGVjdXN0b21pemUucHkiCitESVNUUk9fU1JDX1VSSV9saW51eHN0ZGJhc2UgPSAiIgorU1JDX1VSSSArPSAiXAorICBmaWxlOi8vMDEtdXNlLXByb3Blci10b29scy1mb3ItY3Jvc3MtYnVpbGQucGF0Y2ggXAorICBmaWxlOi8vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoIFwKKyAgZmlsZTovLzA2LWF2b2lkX3Vzcl9saWJfdGVybWNhcF9wYXRoX2luX2xpbmtpbmcucGF0Y2ggXAorICAke0RJU1RST19TUkNfVVJJfSBcCisgIGZpbGU6Ly9tdWx0aWxpYi5wYXRjaCBcCisgIGZpbGU6Ly9jZ2lfcHkucGF0Y2ggXAorICBmaWxlOi8vc2V0dXBfcHlfc2tpcF9jcm9zc19pbXBvcnRfY2hlY2sucGF0Y2ggXAorICBmaWxlOi8vYWRkLW1kNW1vZHVsZS1zdXBwb3J0LnBhdGNoIFwKKyAgZmlsZTovL2hvc3RfaW5jbHVkZV9jb250YW1pbmF0aW9uLnBhdGNoIFwKKyAgZmlsZTovL2ZpeF9mb3JfdXNpbmdfZGlmZmVyZW50X2xpYmRpci5wYXRjaCBcCisgIGZpbGU6Ly9zZXR1cHR3ZWFrcy5wYXRjaCBcCisgIGZpbGU6Ly9jaGVjay1pZi10YXJnZXQtaXMtNjRiLW5vdC1ob3N0LnBhdGNoIFwKKyAgZmlsZTovL3NlYXJjaF9kYl9oX2luX2luY19kaXJzX2FuZF9hdm9pZF93YXJuaW5nLnBhdGNoIFwKKyAgZmlsZTovL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaCBcCisgIGZpbGU6Ly9hdm9pZF93YXJuaW5nX2Zvcl9zdW5vc19zcGVjaWZpY19tb2R1bGUucGF0Y2ggXAorICBmaWxlOi8vcHl0aG9uLTIuNy4zLXJlbW92ZS1ic2RiLXJwYXRoLnBhdGNoIFwKKyAgZmlsZTovL2ZpeC1tYWtlZmlsZS1mb3ItcHRlc3QucGF0Y2ggXAorICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgZmlsZTovL3BhcmFsbGVsLW1ha2VpbnN0LWNyZWF0ZS1iaW5kaXIucGF0Y2ggXAorICBmaWxlOi8vdXNlX3N5c3Jvb3RfbmN1cnNlc19pbnN0ZWFkX29mX2hvc3QucGF0Y2ggXAorICBmaWxlOi8vYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L1B5dGhvbi0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgbXVsdGlsaWJfaGVhZGVyIHB5dGhvbi1kaXIgcHl0aG9ubmF0aXZlCisKK0NPTkZJR1VSRU9QVFMgKz0gIiAtLXdpdGgtc3lzdGVtLWZmaSAiCisKKyMgVGhlIDMgbGluZXMgYmVsb3cgYXJlIGNvcGllZCBmcm9tIHRoZSBsaWJmZmkgcmVjaXBlLCBjdHlwZXMgc2hpcHMgaXRzIG93biBjb3B5IG9mIHRoZSBsaWJmZmkgc291cmNlcworI1NvbWVob3cgZ2NjIGRvZXNuJ3Qgc2V0IF9fU09GVEZQX18gd2hlbiBwYXNzaW5nIC1tZmxvYXRhYmk9c29mdHAgOigKK1RBUkdFVF9DQ19BUkNIX2FwcGVuZF9hcm12NiA9ICIgLURfX1NPRlRGUF9fIgorVEFSR0VUX0NDX0FSQ0hfYXBwZW5kX2FybXY3YSA9ICIgLURfX1NPRlRGUF9fIgorCisjIFRoZSBmb2xsb3dpbmcgaXMgYSBoYWNrIHVudGlsIHdlIGRyb3AgYWNfY3Zfc2l6ZW9mX29mZl90IGZyb20gc2l0ZSBmaWxlcworRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xhcmdlZmlsZScsICdhY19jdl9zaXplb2Zfb2ZmX3Q9OCcsICcnLCBkKX0gYWNfY3ZfZmlsZV9fZGV2X3B0bXg9eWVzIGFjX2N2X2ZpbGVfX2Rldl9wdGM9bm8iCisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJcm0gLWYgJHtTfS9NYWtlZmlsZS5vcmlnCisgICAgICAgIGF1dG9yZWNvbmYgLVdjcm9zcyAtLXZlcmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgLS1leGNsdWRlPWF1dG9wb2ludCAuLi9QeXRob24tJHtQVn0vTW9kdWxlcy9fY3R5cGVzL2xpYmZmaQorfQorCitkb19jb21waWxlKCkgeworICAgICAgICAjIHJlZ2VuZXJhdGUgcGxhdGZvcm0gc3BlY2lmaWMgZmlsZXMsIGJlY2F1c2UgdGhleSBkZXBlbmQgb24gc3lzdGVtIGhlYWRlcnMKKyAgICAgICAgY2QgJHtTfS9MaWIvcGxhdC1saW51eDIKKyAgICAgICAgaW5jbHVkZT0ke1NUQUdJTkdfSU5DRElSfSAke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24gXAorICAgICAgICAgICAgICAgICR7U30vVG9vbHMvc2NyaXB0cy9oMnB5LnB5IC1pICcodV9sb25nKScgXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L2RsZmNuLmggXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L2xpbnV4L2Nkcm9tLmggXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L25ldGluZXQvaW4uaCBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vc3lzL3R5cGVzLmgKKyAgICAgICAgc2VkIC1lICdzLCR7U1RBR0lOR19ESVJfSE9TVH0sLGcnIC1pICoucHkKKyAgICAgICAgY2QgLQorCisJIyByZW1vdmUgYW55IGJvZ3VzIExEX0xJQlJBUllfUEFUSAorCXNlZCAtaSAtZSBzLFJVTlNIQVJFRD0uKixSVU5TSEFSRUQ9LCBNYWtlZmlsZQorCisJaWYgWyAhIC1mIE1ha2VmaWxlLm9yaWcgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUgTWFrZWZpbGUub3JpZworCWZpCisJc2VkIC1pIC1lICdzI15MREZMQUdTPS4qI0xERkxBR1M9JHtMREZMQUdTfSAtTC4gLUwke1NUQUdJTkdfTElCRElSfSNnJyBcCisJCS1lICdzLGxpYmRpcj0ke2xpYmRpcn0sbGliZGlyPSR7U1RBR0lOR19MSUJESVJ9LGcnIFwKKwkJLWUgJ3MsbGliZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9LGxpYmV4ZWNkaXI9JHtTVEFHSU5HX0RJUl9IT1NUfSR7bGliZXhlY2Rpcn0sZycgXAorCQktZSAncyxeTElCRElSPS4qLExJQkRJUj0ke1NUQUdJTkdfTElCRElSfSxnJyBcCisJCS1lICdzLGluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfSxpbmNsdWRlZGlyPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKKwkJLWUgJ3MsXklOQ0xVREVESVI9LiosSU5DTFVERT0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCS1lICdzLF5DT05GSU5DTFVERURJUj0uKixDT05GSU5DTFVERT0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCU1ha2VmaWxlCisJIyBzYXZlIGNvcHkgb2YgaXQgbm93LCBiZWNhdXNlIGlmIHdlIGRvIGl0IGluIGRvX2luc3RhbGwgYW5kIAorCSMgdGhlbiBjYWxsIGRvX2luc3RhbGwgdHdpY2Ugd2UgZ2V0IE1ha2VmaWxlLm9yaWcgPT0gTWFrZWZpbGUuc3lzcm9vdAorCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZSBNYWtlZmlsZS5zeXNyb290CisKKwlleHBvcnQgQ1JPU1NfQ09NUElMRT0iJHtUQVJHRVRfUFJFRklYfSIKKwlleHBvcnQgUFlUSE9OQlVJTERESVI9IiR7Qn0iCisKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisJCU9QVD0iJHtDRkxBR1N9IgorfQorCitkb19pbnN0YWxsKCkgeworCSMgbWFrZSBpbnN0YWxsIG5lZWRzIHRoZSBvcmlnaW5hbCBNYWtlZmlsZSwgb3Igb3RoZXJ3aXNlIHRoZSBpbmNsdWVzIHdvdWxkCisJIyBnbyB0byAke0R9JHtTVEFHSU5HLi4ufS8uLi4KKwlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUub3JpZyBNYWtlZmlsZQorCisJZXhwb3J0IENST1NTX0NPTVBJTEU9IiR7VEFSR0VUX1BSRUZJWH0iCisJZXhwb3J0IFBZVEhPTkJVSUxERElSPSIke0J9IgorCisJIyBBZnRlciBzd2l6emxpbmcgdGhlIG1ha2VmaWxlLCB3ZSBuZWVkIHRvIHJ1biB0aGUgYnVpbGQgYWdhaW4uCisJIyBpbnN0YWxsIGNhbiByYWNlIHdpdGggdGhlIGJ1aWxkIHNvIHdlIGhhdmUgdG8gcnVuIHRoaXMgZmlyc3QsIHRoZW4gaW5zdGFsbAorCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcGdlbiBcCisJCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIFwKKwkJQ1JPU1NQWVRIT05QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2xpYi1keW5sb2FkLyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisJCURFU1RESVI9JHtEfSBMSUJESVI9JHtsaWJkaXJ9CisJCisJb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24gXAorCQlDUk9TU1BZVEhPTlBBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vbGliLWR5bmxvYWQvIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKwkJREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0gaW5zdGFsbAorCisJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlLnN5c3Jvb3QgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUKKworCWlmIFsgLWUgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5IF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59CisJZmkKKworCW9lX211bHRpbGliX2hlYWRlciBweXRob24ke1BZVEhPTl9NQUpNSU59L3B5Y29uZmlnLmgKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3B5dGhvbjIuNyBURVJNSU5GT19ESVJTPScke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvOi9ldGMvdGVybWluZm86L3Vzci9zaGFyZS90ZXJtaW5mbzovdXNyL3NoYXJlL21pc2MvdGVybWluZm86L2xpYi90ZXJtaW5mbycKK30KKworU1NUQVRFX1NDQU5fRklMRVMgKz0gIk1ha2VmaWxlIgorUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTICs9ICJweV9wYWNrYWdlX3ByZXByb2Nlc3MiCisKK3B5X3BhY2thZ2VfcHJlcHJvY2VzcyAoKSB7CisJIyBjb3B5IGJhY2sgdGhlIG9sZCBNYWtlZmlsZSB0byBmaXggdGFyZ2V0IHBhY2thZ2UKKwlpbnN0YWxsIC1tIDA2NDQgJHtCfS9NYWtlZmlsZS5vcmlnICR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlCisKKwkjIFJlbW92ZSByZWZlcmVuY2VzIHRvIGJ1aWxkbWFjaGluZSBwYXRocyBpbiB0YXJnZXQgTWFrZWZpbGUgYW5kIF9zeXNjb25maWdkYXRhCisJc2VkIC1pIC1lICdzOi0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH06OmcnIC1lIHM6Jy0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9Jzo6ZyBcCisJCSR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlIFwKKwkJJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9fc3lzY29uZmlnZGF0YS5weQorfQorCityZXF1aXJlIHB5dGhvbi0ke1BZVEhPTl9NQUpNSU59LW1hbmlmZXN0LmluYworCisjIG1hbnVhbCBkZXBlbmRlbmN5IGFkZGl0aW9ucworUlBST1ZJREVTXyR7UE59LWNvcmUgPSAiJHtQTn0iCitSUkVDT01NRU5EU18ke1BOfS1jb3JlID0gIiR7UE59LXJlYWRsaW5lIgorUlJFQ09NTUVORFNfJHtQTn0tY29yZV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiBuYXRpdmVzZGstcHl0aG9uLW1vZHVsZXMiCitSUkVDT01NRU5EU18ke1BOfS1jcnlwdCA9ICJvcGVuc3NsIgorCisjIHBhY2thZ2UgbGlicHl0aG9uMgorUEFDS0FHRVMgPSsgImxpYiR7QlBOfTIiCitGSUxFU19saWIke0JQTn0yID0gIiR7bGliZGlyfS9saWJweXRob24qLnNvLioiCisKKyMgY2F0Y2ggZGVidWcgZXh0ZW5zaW9ucyAoaXNuJ3QgdGhhdCBhbHJlYWR5IGluIHB5dGhvbi1jb3JlLWRiZz8pCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2xpYi1keW5sb2FkLy5kZWJ1ZyIKKworIyBjYXRjaCBhbGwgdGhlIHJlc3QgKHVuc29ydGVkKQorUEFDS0FHRVMgKz0gIiR7UE59LW1pc2MiCitGSUxFU18ke1BOfS1taXNjID0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59IgorUkRFUEVORFNfJHtQTn0tcHRlc3QgPSAiJHtQTn0tbW9kdWxlcyAke1BOfS1taXNjIgorI2luaGVyaXQgcHRlc3QgYWZ0ZXIgInJlcXVpcmUgcHl0aG9uLSR7UFlUSE9OX01BSk1JTn0tbWFuaWZlc3QuaW5jIiBzbyBQQUNLQUdFUyBkb2Vzbid0IGdldCBvdmVyd3JpdHRlbgoraW5oZXJpdCBwdGVzdAorCisjIFRoaXMgbXVzdCBjb21lIGFmdGVyIGluaGVyaXQgcHRlc3QgZm9yIHRoZSBvdmVycmlkZSB0byB0YWtlIGVmZmVjdAorZG9faW5zdGFsbF9wdGVzdCgpIHsKKwljcCAke0J9L01ha2VmaWxlICR7RH0ke1BURVNUX1BBVEh9CisJc2VkIC1lIHM6TElCRElSL3B5dGhvbi9wdGVzdDoke1BURVNUX1BBVEh9OmcgXAorCSAtZSBzOkxJQkRJUjoke2xpYmRpcn06ZyBcCisJIC1pICR7RH0ke1BURVNUX1BBVEh9L3J1bi1wdGVzdAorfQorCisjIGNhdGNoIG1hbnBhZ2UKK1BBQ0tBR0VTICs9ICIke1BOfS1tYW4iCitGSUxFU18ke1BOfS1tYW4gPSAiJHtkYXRhZGlyfS9tYW4iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9uYXRpdmVzZGstcWVtdS1oZWxwZXJfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9uYXRpdmVzZGstcWVtdS1oZWxwZXJfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZDFjNTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L25hdGl2ZXNkay1xZW11LWhlbHBlcl8xLjAuYmIKQEAgLTAsMCArMSw0NyBAQAorU1VNTUFSWSA9ICJRZW11IGhlbHBlciBzY3JpcHRzIgorTElDRU5TRSA9ICJHUEx2MiIKK1JERVBFTkRTXyR7UE59ID0gIm5hdGl2ZXNkay1xZW11IgorUFIgPSAicjkiCisKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtXT1JLRElSfS90dW5jdGwuYztlbmRsaW5lPTQ7bWQ1PWZmM2EwOTk5NmJjNWZmZjZiYzVkNGUwYjRjMjhmOTk5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdTtlbmRsaW5lPTE4O21kNT03N2ZiZTQ0MmE4OGIxYmNkYzI5YzNiYTY3NzMzYjIxYiIKKworCitTUkNfVVJJID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUgXAorICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWludGVybmFsIFwKKyAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdS1hZGRwdGFibGUyaW1hZ2UgXAorICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWdlbi10YXBkZXZzIFwKKyAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdS1pZnVwIFwKKyAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdS1pZmRvd24gXAorICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9vZS1maW5kLW5hdGl2ZS1zeXNyb290IFwKKyAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdS1leHRyYWN0LXNkayBcCisgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUtZXhwb3J0LXJvb3RmcyBcCisgICAgICAgICAgIGZpbGU6Ly90dW5jdGwuYyBcCisgICAgICAgICAgIGZpbGU6Ly9yYXcyZmxhc2guYyBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0iCisKK2luaGVyaXQgbmF0aXZlc2RrCisKK2RvX2NvbXBpbGUoKSB7CisJJHtDQ30gdHVuY3RsLmMgLW8gdHVuY3RsCisJJHtDQ30gcmF3MmZsYXNoLmMgLW8gcmF3MmZsYXNoLnNwaXR6CisJJHtDQ30gcmF3MmZsYXNoLmMgLW8gZmxhc2gycmF3LnNwaXR6IC1EZmxhc2gycmF3Cit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0ke0NPUkVCQVNFfS9zY3JpcHRzL29lLSogJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfSR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdSogJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIHR1bmN0bCAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgcmF3MmZsYXNoLnNwaXR6ICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCBmbGFzaDJyYXcuc3BpdHogJHtEfSR7YmluZGlyfS8KKwlsbiAtZnMgcmF3MmZsYXNoLnNwaXR6ICR7RH0ke2JpbmRpcn0vcmF3MmZsYXNoLmFraXRhCisJbG4gLWZzIHJhdzJmbGFzaC5zcGl0eiAke0R9JHtiaW5kaXJ9L3JhdzJmbGFzaC5ib3J6b2kKKwlsbiAtZnMgcmF3MmZsYXNoLnNwaXR6ICR7RH0ke2JpbmRpcn0vcmF3MmZsYXNoLnRlcnJpZXIKKwlsbiAtZnMgZmxhc2gycmF3LnNwaXR6ICR7RH0ke2JpbmRpcn0vZmxhc2gycmF3LmFraXRhCisJbG4gLWZzIGZsYXNoMnJhdy5zcGl0eiAke0R9JHtiaW5kaXJ9L2ZsYXNoMnJhdy5ib3J6b2kKKwlsbiAtZnMgZmxhc2gycmF3LnNwaXR6ICR7RH0ke2JpbmRpcn0vZmxhc2gycmF3LnRlcnJpZXIKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS1oZWxwZXItbmF0aXZlXzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS1oZWxwZXItbmF0aXZlXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDI3YzRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci1uYXRpdmVfMS4wLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiSGVscGVyIHV0aWxpdGllcyBuZWVkZWQgYnkgdGhlIHJ1bnFlbXUgc2NyaXB0IgorTElDRU5TRSA9ICJHUEx2MiIKK1JERVBFTkRTXyR7UE59ID0gInFlbXUtbmF0aXZlIgorUFIgPSAicjEiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vdHVuY3RsLmM7ZW5kbGluZT00O21kNT1mZjNhMDk5OTZiYzVmZmY2YmM1ZDRlMGI0YzI4Zjk5OSIKKworU1JDX1VSSSA9ICJmaWxlOi8vdHVuY3RsLmMiCisKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBuYXRpdmUKKworZG9fY29tcGlsZSgpIHsKKwkke0NDfSB0dW5jdGwuYyAtbyB0dW5jdGwKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIHR1bmN0bCAke0R9JHtiaW5kaXJ9LworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci9yYXcyZmxhc2guYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS1oZWxwZXIvcmF3MmZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmYWY2MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS1oZWxwZXIvcmF3MmZsYXNoLmMKQEAgLTAsMCArMSwzNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3BlbmVkSGFuZCBMdGQuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIEdOVSBHUEwgdjIuCisgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIFRGUihfKQkJXworI2RlZmluZSBWRVJCT1NFCisjZGVmaW5lIFBCQVJfTEVOCTQwCisKKyNkZWZpbmUgUEFSVElUSU9OX1NUQVJUCTB4MDA3MDAwMDAKKworc3RhdGljIGNvbnN0IGludCBlY2NfcG9zOFtdID0geworCTB4MCwgMHgxLCAweDIsCit9OworCitzdGF0aWMgY29uc3QgaW50IGVjY19wb3MxNltdID0geworCTB4MCwgMHgxLCAweDIsIDB4MywgMHg2LCAweDcsCit9OworCitzdGF0aWMgY29uc3QgaW50IGVjY19wb3M2NFtdID0geworCTB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsCisJMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKKwkweDM4LCAweDM5LCAweDNhLCAweDNiLCAweDNjLCAweDNkLCAweDNlLCAweDNmLAorfTsKKworc3RhdGljIGNvbnN0IGludCBlY2NfYWtpdGFbXSA9IHsKKwkweDA1LCAweDAxLCAweDAyLCAweDAzLCAweDA2LCAweDA3LCAweDE1LCAweDExLAorCTB4MTIsIDB4MTMsIDB4MTYsIDB4MTcsIDB4MjUsIDB4MjEsIDB4MjIsIDB4MjMsCisJMHgyNiwgMHgyNywgMHgzNSwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNiwgMHgzNywKK307CisKK3N0cnVjdCBqZmZzX21hcmtlcl9zIHsKKwlpbnQgcG9zOworCXVpbnQ4X3QgdmFsdWU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGpmZnNfbWFya2VyX3MgZnJlZV9wb3M4W10gPSB7CisJeyAweDAzLCAweGZmIH0sIHsgMHgwNCwgMHhmZiB9LCB7IDB4MDYsIDB4ODUgfSwgeyAweDA3LCAweDE5IH0sCisJeyAtMSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBqZmZzX21hcmtlcl9zIGZyZWVfcG9zMTZbXSA9IHsKKwl7IDB4MDgsIDB4ODUgfSwgeyAweDA5LCAweDE5IH0sIHsgMHgwYSwgMHgwMyB9LCB7IDB4MGIsIDB4MjAgfSwKKwl7IDB4MGMsIDB4MDggfSwgeyAweDBkLCAweDAwIH0sIHsgMHgwZSwgMHgwMCB9LCB7IDB4MGYsIDB4MDAgfSwKKwl7IC0xIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGpmZnNfbWFya2VyX3MgZnJlZV9wb3M2NFtdID0geworCXsgMHgwMiwgMHhmZiB9LCB7IDB4MDMsIDB4ZmYgfSwgeyAweDA0LCAweGZmIH0sIHsgMHgwNSwgMHhmZiB9LAorCXsgMHgwNiwgMHhmZiB9LCB7IDB4MDcsIDB4ZmYgfSwgeyAweDA4LCAweGZmIH0sIHsgMHgwOSwgMHhmZiB9LAorCXsgMHgwYSwgMHhmZiB9LCB7IDB4MGIsIDB4ZmYgfSwgeyAweDBjLCAweGZmIH0sIHsgMHgwZCwgMHhmZiB9LAorCXsgMHgwZSwgMHhmZiB9LCB7IDB4MGYsIDB4ZmYgfSwgeyAweDEwLCAweDg1IH0sIHsgMHgxMSwgMHgxOSB9LAorCXsgMHgxMiwgMHgwMyB9LCB7IDB4MTMsIDB4MjAgfSwgeyAweDE0LCAweDA4IH0sIHsgMHgxNSwgMHgwMCB9LAorCXsgMHgxNiwgMHgwMCB9LCB7IDB4MTcsIDB4MDAgfSwgeyAweDE4LCAweGZmIH0sIHsgMHgxOSwgMHhmZiB9LAorCXsgMHgxYSwgMHhmZiB9LCB7IDB4MWIsIDB4ZmYgfSwgeyAweDFjLCAweGZmIH0sIHsgMHgxZCwgMHhmZiB9LAorCXsgMHgxZSwgMHhmZiB9LCB7IDB4MWYsIDB4ZmYgfSwgeyAweDIwLCAweGZmIH0sIHsgMHgyMSwgMHhmZiB9LAorCXsgMHgyMiwgMHhmZiB9LCB7IDB4MjMsIDB4ZmYgfSwgeyAweDI0LCAweGZmIH0sIHsgMHgyNSwgMHhmZiB9LAorCXsgMHgyNiwgMHhmZiB9LCB7IDB4MjcsIDB4ZmYgfSwKKwl7IC0xIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGpmZnNfbWFya2VyX3MgZnJlZV9ha2l0YVtdID0geworCXsgMHgwOCwgMHg4NSB9LCB7IDB4MDksIDB4MTkgfSwgeyAweDBhLCAweDAzIH0sIHsgMHgwYiwgMHgyMCB9LAorCXsgMHgwYywgMHgwOCB9LCB7IDB4MGQsIDB4MDAgfSwgeyAweDBlLCAweDAwIH0sIHsgMHgwZiwgMHgwMCB9LAorCXsgMHgxMCwgMHhmZiB9LAorCXsgLTEgfSwKK307CisKKyNkZWZpbmUgTEVOKGFycmF5KQkoc2l6ZW9mKGFycmF5KSAvIHNpemVvZigqYXJyYXkpKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGVjY19zdHlsZV9zIHsKKwlpbnQgcGFnZV9zaXplOworCWludCBvb2Jfc2l6ZTsKKwlpbnQgZWNjYnl0ZXM7CisJaW50IGVjY3NpemU7CisJY29uc3QgaW50ICplY2Nwb3M7CisJaW50IHJvbXNpemU7CisJY29uc3Qgc3RydWN0IGpmZnNfbWFya2VyX3MgKmZyZWVwb3M7Cit9IHNwaXR6ID0geworCTB4MjAwLCAweDEwLCAweDEwMCwgTEVOKGVjY19wb3MxNiksIGVjY19wb3MxNiwgMHgwMTAwMDAwMCwgZnJlZV9wb3MxNgorfSwgYWtpdGEgPSB7CisJMHg4MDAsIDB4NDAsIDB4MTAwLCBMRU4oZWNjX2FraXRhKSwgZWNjX2FraXRhLCAweDA4MDAwMDAwLCBmcmVlX2FraXRhCit9LCBib3J6b2kgPSB7CisJMHg4MDAsIDB4NDAsIDB4MTAwLCBMRU4oZWNjX2FraXRhKSwgZWNjX2FraXRhLCAweDA4MDAwMDAwLCBmcmVlX2FraXRhCit9LCB0ZXJyaWVyID0geworCTB4ODAwLCAweDQwLCAweDEwMCwgTEVOKGVjY19ha2l0YSksIGVjY19ha2l0YSwgMHgwODAwMDAwMCwgZnJlZV9ha2l0YQorfTsKKworc3RydWN0IGVjY19zdGF0ZV9zIHsKKwlpbnQgY291bnQ7CisJdWludDhfdCBjcDsKKwl1aW50OF90IGxwWzJdOworCWNvbnN0IHN0cnVjdCBlY2Nfc3R5bGVfcyAqc3R5bGU7Cit9OworCisjaWZuZGVmIGZsYXNoMnJhdworLyoKKyAqIFByZS1jYWxjdWxhdGVkIDI1Ni13YXkgMSBieXRlIGNvbHVtbiBwYXJpdHkuICBUYWJsZSBib3Jyb3dlZCBmcm9tIExpbnV4LgorICovCitzdGF0aWMgY29uc3QgdWludDhfdCBlY2NfcHJlY2FsY190YWJsZVtdID0geworCTB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsCisJMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwgMHgwMywgMHg1NiwgMHg1NSwgMHgwMCwKKwkweDY1LCAweDMwLCAweDMzLCAweDY2LCAweDNjLCAweDY5LCAweDZhLCAweDNmLAorCTB4M2YsIDB4NmEsIDB4NjksIDB4M2MsIDB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsCisJMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwgMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywKKwkweDNjLCAweDY5LCAweDZhLCAweDNmLCAweDY1LCAweDMwLCAweDMzLCAweDY2LAorCTB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsIDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksCisJMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwgMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywKKwkweDY5LCAweDNjLCAweDNmLCAweDZhLCAweDMwLCAweDY1LCAweDY2LCAweDMzLAorCTB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsIDB4NmEsIDB4M2YsIDB4M2MsIDB4NjksCisJMHgwYywgMHg1OSwgMHg1YSwgMHgwZiwgMHg1NSwgMHgwMCwgMHgwMywgMHg1NiwKKwkweDU2LCAweDAzLCAweDAwLCAweDU1LCAweDBmLCAweDVhLCAweDU5LCAweDBjLAorCTB4MGYsIDB4NWEsIDB4NTksIDB4MGMsIDB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsCisJMHg1NSwgMHgwMCwgMHgwMywgMHg1NiwgMHgwYywgMHg1OSwgMHg1YSwgMHgwZiwKKwkweDZhLCAweDNmLCAweDNjLCAweDY5LCAweDMzLCAweDY2LCAweDY1LCAweDMwLAorCTB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsIDB4NjksIDB4M2MsIDB4M2YsIDB4NmEsCisJMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwgMHgzMywgMHg2NiwgMHg2NSwgMHgzMCwKKwkweDMwLCAweDY1LCAweDY2LCAweDMzLCAweDY5LCAweDNjLCAweDNmLCAweDZhLAorCTB4MGYsIDB4NWEsIDB4NTksIDB4MGMsIDB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsCisJMHg1NSwgMHgwMCwgMHgwMywgMHg1NiwgMHgwYywgMHg1OSwgMHg1YSwgMHgwZiwKKwkweDBjLCAweDU5LCAweDVhLCAweDBmLCAweDU1LCAweDAwLCAweDAzLCAweDU2LAorCTB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsIDB4MGYsIDB4NWEsIDB4NTksIDB4MGMsCisJMHg2OSwgMHgzYywgMHgzZiwgMHg2YSwgMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywKKwkweDMzLCAweDY2LCAweDY1LCAweDMwLCAweDZhLCAweDNmLCAweDNjLCAweDY5LAorCTB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsIDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksCisJMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwgMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywKKwkweDY2LCAweDMzLCAweDMwLCAweDY1LCAweDNmLCAweDZhLCAweDY5LCAweDNjLAorCTB4M2MsIDB4NjksIDB4NmEsIDB4M2YsIDB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsCisJMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwgMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwKKwkweDNmLCAweDZhLCAweDY5LCAweDNjLCAweDY2LCAweDMzLCAweDMwLCAweDY1LAorCTB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsCisJMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwgMHgwMywgMHg1NiwgMHg1NSwgMHgwMCwKK307CisKKy8qIFVwZGF0ZSBFQ0MgcGFyaXR5IGNvdW50ICovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgZWNjX2RpZ2VzdChzdHJ1Y3QgZWNjX3N0YXRlX3MgKnMsIHVpbnQ4X3Qgc2FtcGxlKSB7CisJdWludDhfdCBpZHggPSBlY2NfcHJlY2FsY190YWJsZVtzYW1wbGVdOworCisJcy0+Y3AgXj0gaWR4ICYgMHgzZjsKKwlpZiAoaWR4ICYgMHg0MCkgeworCQlzLT5scFswXSBePSB+KHMtPmNvdW50ICYgMHhmZik7CisJCXMtPmxwWzFdIF49IHMtPmNvdW50ICYgMHhmZjsKKwl9CisJcy0+Y291bnQgKys7CisKKwlyZXR1cm4gc2FtcGxlOworfQorCitzdGF0aWMgdm9pZCBidWZmZXJfZGlnZXN0KHN0cnVjdCBlY2Nfc3RhdGVfcyAqZWNjLAorCQljb25zdCB1aW50OF90ICpidWYsIHVpbnQ4X3QgKm91dCkgeworCWludCBpLCBscF9hWzJdOworCisJZWNjLT5scFswXSA9IDB4MDA7CisJZWNjLT5scFsxXSA9IDB4MDA7CisJZWNjLT5jcCA9IDB4MDA7CisJZWNjLT5jb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGVjYy0+c3R5bGUtPmVjY2J5dGVzOyBpICsrKQorCQllY2NfZGlnZXN0KGVjYywgYnVmW2ldKTsKKworIyBkZWZpbmUgQlNIUihieXRlLCBmcm9tLCB0bykJKChlY2MtPmxwW2J5dGVdID4+IChmcm9tIC0gdG8pKSAmICgxIDw8IHRvKSkKKwlscF9hWzBdID0KKwkJQlNIUigwLCA0LCAwKSB8IEJTSFIoMCwgNSwgMikgfAorCQlCU0hSKDAsIDYsIDQpIHwgQlNIUigwLCA3LCA2KSB8CisJCUJTSFIoMSwgNCwgMSkgfCBCU0hSKDEsIDUsIDMpIHwKKwkJQlNIUigxLCA2LCA1KSB8IEJTSFIoMSwgNywgNyk7CisKKyMgZGVmaW5lIEJTSEwoYnl0ZSwgZnJvbSwgdG8pCSgoZWNjLT5scFtieXRlXSA8PCAodG8gLSBmcm9tKSkgJiAoMSA8PCB0bykpCisJbHBfYVsxXSA9CisJCUJTSEwoMCwgMCwgMCkgfCBCU0hMKDAsIDEsIDIpIHwKKwkJQlNITCgwLCAyLCA0KSB8IEJTSEwoMCwgMywgNikgfAorCQlCU0hMKDEsIDAsIDEpIHwgQlNITCgxLCAxLCAzKSB8CisJCUJTSEwoMSwgMiwgNSkgfCBCU0hMKDEsIDMsIDcpOworCisJb3V0WzBdID0gfmxwX2FbMV07CisJb3V0WzFdID0gfmxwX2FbMF07CisJb3V0WzJdID0gKH5lY2MtPmNwIDw8IDIpIHwgMHgwMzsKK30KKworc3RhdGljIHZvaWQgamZmczJfZm9ybWF0KGNvbnN0IHN0cnVjdCBlY2Nfc3RhdGVfcyAqZWNjLCB1aW50OF90IG9vYltdKSB7CisJY29uc3Qgc3RydWN0IGpmZnNfbWFya2VyX3MgKmJ5dGU7CisJZm9yIChieXRlID0gZWNjLT5zdHlsZS0+ZnJlZXBvczsgYnl0ZS0+cG9zID49IDA7IGJ5dGUgKyspCisJCW9vYltieXRlLT5wb3NdID0gYnl0ZS0+dmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9maWxsKGNvbnN0IHN0cnVjdCBlY2Nfc3RhdGVfcyAqZWNjLCB1aW50OF90IGJ1ZmZlcltdLAorCQlpbnQgKmxlbiwgaW50ICpwYXJ0aXRpb24sIGludCBjb3VudCwgdWludDhfdCBqZmZzX2J1ZmZlcltdKSB7CisJaW50IHJldDsKKworCXN3aXRjaCAoKnBhcnRpdGlvbikgeworCWNhc2UgMDoKKwkJaWYgKGNvdW50IDwgUEFSVElUSU9OX1NUQVJUKSB7CisJCQltZW1jcHkoYnVmZmVyLCBqZmZzX2J1ZmZlciArIGNvdW50LAorCQkJCQllY2MtPnN0eWxlLT5lY2NieXRlcyk7CisJCQkqbGVuID0gZWNjLT5zdHlsZS0+ZWNjYnl0ZXM7CisJCQlicmVhazsKKwkJfQorCQkqcGFydGl0aW9uID0gMTsKKwljYXNlIDE6CisJCWlmIChjb3VudCAtIFBBUlRJVElPTl9TVEFSVCA8IFBBUlRJVElPTl9TVEFSVCkgeworCQkJbWVtY3B5KGJ1ZmZlciwgamZmc19idWZmZXIgKyBjb3VudCAtIFBBUlRJVElPTl9TVEFSVCwKKwkJCQkJZWNjLT5zdHlsZS0+ZWNjYnl0ZXMpOworCQkJKmxlbiA9IGVjYy0+c3R5bGUtPmVjY2J5dGVzOworCQkJYnJlYWs7CisJCX0KKworCQl3aGlsZSAoKmxlbiA8IGVjYy0+c3R5bGUtPmVjY2J5dGVzKSB7CisJCQlyZXQgPSBURlIocmVhZCgwLCBidWZmZXIgKyAqbGVuLCAweDgwMCAtICpsZW4pKTsKKwkJCWlmIChyZXQgPD0gMCkKKwkJCQlicmVhazsKKwkJCSpsZW4gKz0gcmV0OworCQl9CisKKwkJaWYgKCpsZW4gPT0gMCkKKwkJCSpwYXJ0aXRpb24gPSAyOworCQllbHNlIGlmICgqbGVuIDwgZWNjLT5zdHlsZS0+ZWNjYnl0ZXMpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiXG5XYXJuaW5nOiAlaSBzdHJheSBieXRlc1xuIiwgKmxlbik7CisJCQltZW1zZXQoYnVmZmVyICsgKmxlbiwgMHhmZiwKKwkJCQkJZWNjLT5zdHlsZS0+ZWNjYnl0ZXMgLSAqbGVuKTsKKwkJCSpsZW4gPSBlY2MtPnN0eWxlLT5lY2NieXRlczsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWJyZWFrOworCWNhc2UgMjoKKwkJbWVtc2V0KGJ1ZmZlciwgMHhmZiwgZWNjLT5zdHlsZS0+ZWNjYnl0ZXMpOworCQkqbGVuID0gZWNjLT5zdHlsZS0+ZWNjYnl0ZXM7CisJCWJyZWFrOworCX0KK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqZW52cFtdKSB7CisJc3RydWN0IGVjY19zdGF0ZV9zIGVjYzsKKwl1aW50OF90IGJ1ZmZlclsweDEwMDBdLCBlY2NfcGF5bG9hZFsweDQwXSwgcmVnc1szXSwgKmpmZnM7CisJaW50IHJldCwgbGVuLCBlY2NieXRlLCBjb3VudCwgcGFydGl0aW9uOworCisJLyogQ2hlY2sgaWYgd2UncmUgY2FsbGVkIGJ5ICJyYXcyZmxhc2guc3BpdHoiIG9yIHNpbWlsYXIgKi8KKwlsZW4gPSBzdHJsZW4oYXJndlswXSk7CisJaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0gKyBsZW4gLSA1LCAiYWtpdGEiKSkKKwkJZWNjLnN0eWxlID0gJmFraXRhOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0gKyBsZW4gLSA2LCAiYm9yem9pIikpCisJCWVjYy5zdHlsZSA9ICZib3J6b2k7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDcsICJ0ZXJyaWVyIikpCisJCWVjYy5zdHlsZSA9ICZ0ZXJyaWVyOworCWVsc2UKKwkJZWNjLnN0eWxlID0gJnNwaXR6OworCisjIGlmZGVmIFZFUkJPU0UKKwlmcHJpbnRmKHN0ZGVyciwgIlsiKTsKKyMgZW5kaWYKKworCS8qIFNraXAgZmlyc3QgMTAgYnl0ZXMgKi8KKwlURlIocmVhZCgwLCBidWZmZXIsIDB4MTApKTsKKworCWxlbiA9IDA7CisJamZmcyA9ICh1aW50OF90ICopIG1hbGxvYyhQQVJUSVRJT05fU1RBUlQpOworCXdoaWxlIChsZW4gPCBQQVJUSVRJT05fU1RBUlQpIHsKKwkJcmV0ID0gVEZSKHJlYWQoMCwgamZmcyArIGxlbiwgUEFSVElUSU9OX1NUQVJUIC0gbGVuKSk7CisJCWlmIChyZXQgPD0gMCkKKwkJCWJyZWFrOworCQlsZW4gKz0gcmV0OworCX0KKworCS8qIENvbnZlcnQgZGF0YSBmcm9tIHN0ZGluICovCisJcGFydGl0aW9uID0gbGVuID0gZWNjYnl0ZSA9IGNvdW50ID0gMDsKKwltZW1zZXQoZWNjX3BheWxvYWQsIDB4ZmYsIGVjYy5zdHlsZS0+b29iX3NpemUpOworCWpmZnMyX2Zvcm1hdCgmZWNjLCBlY2NfcGF5bG9hZCk7CisJd2hpbGUgKGNvdW50IDwgZWNjLnN0eWxlLT5yb21zaXplKSB7CisJCWJ1ZmZlcl9maWxsKCZlY2MsIGJ1ZmZlciwgJmxlbiwgJnBhcnRpdGlvbiwgY291bnQsIGpmZnMpOworCQlidWZmZXJfZGlnZXN0KCZlY2MsIGJ1ZmZlciwgcmVncyk7CisKKwkJZWNjX3BheWxvYWRbZWNjLnN0eWxlLT5lY2Nwb3NbZWNjYnl0ZSArK11dID0gcmVnc1swXTsKKwkJZWNjX3BheWxvYWRbZWNjLnN0eWxlLT5lY2Nwb3NbZWNjYnl0ZSArK11dID0gcmVnc1sxXTsKKwkJZWNjX3BheWxvYWRbZWNjLnN0eWxlLT5lY2Nwb3NbZWNjYnl0ZSArK11dID0gcmVnc1syXTsKKworCQlURlIod3JpdGUoMSwgYnVmZmVyLCBlY2Muc3R5bGUtPmVjY2J5dGVzKSk7CisJCWNvdW50ICs9IGVjYy5zdHlsZS0+ZWNjYnl0ZXM7CisJCWxlbiAtPSBlY2Muc3R5bGUtPmVjY2J5dGVzOworCQltZW1tb3ZlKGJ1ZmZlciwgYnVmZmVyICsgZWNjLnN0eWxlLT5lY2NieXRlcywgbGVuKTsKKworCQlpZiAoZWNjYnl0ZSA+PSBlY2Muc3R5bGUtPmVjY3NpemUpIHsKKwkJCVRGUih3cml0ZSgxLCBlY2NfcGF5bG9hZCwgZWNjLnN0eWxlLT5vb2Jfc2l6ZSkpOworCQkJZWNjYnl0ZSA9IDA7CisJCQltZW1zZXQoZWNjX3BheWxvYWQsIDB4ZmYsIGVjYy5zdHlsZS0+b29iX3NpemUpOworCQkJaWYgKHBhcnRpdGlvbiA8IDIpCisJCQkJamZmczJfZm9ybWF0KCZlY2MsIGVjY19wYXlsb2FkKTsKKwkJfQorCisjIGlmZGVmIFZFUkJPU0UKKwkJaWYgKGNvdW50ICogUEJBUl9MRU4gLyBlY2Muc3R5bGUtPnJvbXNpemUgPgorCQkJCShjb3VudCAtIGVjYy5zdHlsZS0+ZWNjYnl0ZXMpICoKKwkJCQlQQkFSX0xFTiAvIGVjYy5zdHlsZS0+cm9tc2l6ZSkKKwkJCWZwcmludGYoc3RkZXJyLCAiIyIpOworIyBlbmRpZgorCX0KKworIyBpZmRlZiBWRVJCT1NFCisJZnByaW50ZihzdGRlcnIsICJdXG4iKTsKKyMgZW5kaWYKKwlmcmVlKGpmZnMpOworCXJldHVybiAwOworfQorI2Vsc2UKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmVudnBbXSkgeworCXN0cnVjdCBlY2Nfc3RhdGVfcyBlY2M7CisJdWludDhfdCBidWZmZXJbMHgxMDAwXTsKKwlpbnQgcmV0LCBsZW4sIGNvdW50OworCisJLyogQ2hlY2sgaWYgd2UncmUgY2FsbGVkIGJ5ICJmbGFzaDJyYXcuc3BpdHoiIG9yIHNpbWlsYXIgKi8KKwlsZW4gPSBzdHJsZW4oYXJndlswXSk7CisJaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0gKyBsZW4gLSA1LCAiYWtpdGEiKSkKKwkJZWNjLnN0eWxlID0gJmFraXRhOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0gKyBsZW4gLSA2LCAiYm9yem9pIikpCisJCWVjYy5zdHlsZSA9ICZib3J6b2k7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDcsICJ0ZXJyaWVyIikpCisJCWVjYy5zdHlsZSA9ICZ0ZXJyaWVyOworCWVsc2UKKwkJZWNjLnN0eWxlID0gJnNwaXR6OworCisjIGlmZGVmIFZFUkJPU0UKKwlmcHJpbnRmKHN0ZGVyciwgIlsiKTsKKyMgZW5kaWYKKworCS8qIENvbnZlcnQgZGF0YSBmcm9tIHN0ZGluICovCisJY291bnQgPSAwOworCXdoaWxlIChjb3VudCA8IGVjYy5zdHlsZS0+cm9tc2l6ZSkgeworCQlsZW4gPSAwOworCQl3aGlsZSAobGVuIDwgZWNjLnN0eWxlLT5wYWdlX3NpemUpIHsKKwkJCXJldCA9IFRGUihyZWFkKDAsIGJ1ZmZlciArIGxlbiwKKwkJCQkJCWVjYy5zdHlsZS0+cGFnZV9zaXplIC0gbGVuKSk7CisJCQlpZiAocmV0IDw9IDApCisJCQkJYnJlYWs7CisJCQlsZW4gKz0gcmV0OworCQl9CisJCWlmIChsZW4gPT0gMCkKKwkJCWJyZWFrOworCQlpZiAobGVuIDwgZWNjLnN0eWxlLT5wYWdlX3NpemUpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiXG5XYXJuaW5nOiAlaSBzdHJheSBieXRlc1xuIiwgbGVuKTsKKwkJfQorCisJCVRGUih3cml0ZSgxLCBidWZmZXIsIGVjYy5zdHlsZS0+cGFnZV9zaXplKSk7CisKKwkJY291bnQgKz0gbGVuOworCQlsZW4gPSAwOworCQl3aGlsZSAobGVuIDwgZWNjLnN0eWxlLT5vb2Jfc2l6ZSkgeworCQkJcmV0ID0gVEZSKHJlYWQoMCwgYnVmZmVyLCBlY2Muc3R5bGUtPm9vYl9zaXplIC0gbGVuKSk7CisJCQlpZiAocmV0IDw9IDApCisJCQkJYnJlYWs7CisJCQlsZW4gKz0gcmV0OworCQl9CisKKyMgaWZkZWYgVkVSQk9TRQorCQlpZiAoY291bnQgKiBQQkFSX0xFTiAvIGVjYy5zdHlsZS0+cm9tc2l6ZSA+CisJCQkJKGNvdW50IC0gZWNjLnN0eWxlLT5wYWdlX3NpemUpICoKKwkJCQlQQkFSX0xFTiAvIGVjYy5zdHlsZS0+cm9tc2l6ZSkKKwkJCWZwcmludGYoc3RkZXJyLCAiIyIpOworIyBlbmRpZgorCX0KKworIyBpZmRlZiBWRVJCT1NFCisJZnByaW50ZihzdGRlcnIsICJdXG4iKTsKKyMgZW5kaWYKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci90dW5jdGwuYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS1oZWxwZXIvdHVuY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZlMjRhMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS1oZWxwZXIvdHVuY3RsLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qIENvcHlyaWdodCAyMDAyIEplZmYgRGlrZQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxwd2QuaD4KKyNpbmNsdWRlIDxncnAuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl90dW4uaD4KKworLyogVFVOU0VUR1JPVVAgYXBwZWFyZWQgaW4gMi42LjIzICovCisjaWZuZGVmIFRVTlNFVEdST1VQCisjZGVmaW5lIFRVTlNFVEdST1VQICAgX0lPVygnVCcsIDIwNiwgaW50KQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIFVzYWdlKGNoYXIgKm5hbWUpCit7CisgIGZwcmludGYoc3RkZXJyLCAiQ3JlYXRlOiAlcyBbLWJdIFstdSBvd25lcl0gWy1nIGdyb3VwXSBbLXQgZGV2aWNlLW5hbWVdICIKKwkgICJbLWYgdHVuLWNsb25lLWRldmljZV1cbiIsIG5hbWUpOworICBmcHJpbnRmKHN0ZGVyciwgIkRlbGV0ZTogJXMgLWQgZGV2aWNlLW5hbWUgWy1mIHR1bi1jbG9uZS1kZXZpY2VdXG5cbiIsCisJICBuYW1lKTsKKyAgZnByaW50ZihzdGRlcnIsICJUaGUgZGVmYXVsdCB0dW4gY2xvbmUgZGV2aWNlIGlzIC9kZXYvbmV0L3R1biAtIHNvbWUgc3lzdGVtcyIKKwkgICIgdXNlXG4vZGV2L21pc2MvbmV0L3R1biBpbnN0ZWFkXG5cbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIi1iIHdpbGwgcmVzdWx0IGluIGJyaWVmIG91dHB1dCAoanVzdCB0aGUgZGV2aWNlIG5hbWUpXG4iKTsKKyAgZXhpdCgxKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBzdHJ1Y3QgaWZyZXEgaWZyOworICBzdHJ1Y3QgcGFzc3dkICpwdzsKKyAgc3RydWN0IGdyb3VwICpncjsKKyAgdWlkX3Qgb3duZXIgPSAtMTsKKyAgZ2lkX3QgZ3JvdXAgPSAtMTsKKyAgaW50IHRhcF9mZCwgb3B0LCBkZWxldGUgPSAwLCBicmllZiA9IDA7CisgIGNoYXIgKnR1biA9ICIiLCAqZmlsZSA9ICIvZGV2L25ldC90dW4iLCAqbmFtZSA9IGFyZ3ZbMF0sICplbmQ7CisKKyAgd2hpbGUoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAiYmQ6Zjp0OnU6ZzoiKSkgPiAwKXsKKyAgICBzd2l0Y2gob3B0KSB7CisgICAgICBjYXNlICdiJzoKKyAgICAgICAgYnJpZWYgPSAxOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2QnOgorICAgICAgICBkZWxldGUgPSAxOworCXR1biA9IG9wdGFyZzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdmJzoKKwlmaWxlID0gb3B0YXJnOworCWJyZWFrOworICAgICAgY2FzZSAndSc6CisJcHcgPSBnZXRwd25hbShvcHRhcmcpOworCWlmKHB3ICE9IE5VTEwpeworCSAgb3duZXIgPSBwdy0+cHdfdWlkOworCSAgYnJlYWs7CisJfQorICAgICAgICBvd25lciA9IHN0cnRvbChvcHRhcmcsICZlbmQsIDApOworCWlmKCplbmQgIT0gJ1wwJyl7CisJICBmcHJpbnRmKHN0ZGVyciwgIiclcycgaXMgbmVpdGhlciBhIHVzZXJuYW1lIG5vciBhIG51bWVyaWMgdWlkLlxuIiwKKwkJICBvcHRhcmcpOworCSAgVXNhZ2UobmFtZSk7CisJfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2cnOgorCWdyID0gZ2V0Z3JuYW0ob3B0YXJnKTsKKwlpZihnciAhPSBOVUxMKXsKKwkgIGdyb3VwID0gZ3ItPmdyX2dpZDsKKwkgIGJyZWFrOworCX0KKyAgICAgICAgZ3JvdXAgPSBzdHJ0b2wob3B0YXJnLCAmZW5kLCAwKTsKKwlpZigqZW5kICE9ICdcMCcpeworCSAgZnByaW50ZihzdGRlcnIsICInJXMnIGlzIG5laXRoZXIgYSBncm91cG5hbWUgbm9yIGEgbnVtZXJpYyBncm91cC5cbiIsCisJCSAgb3B0YXJnKTsKKwkgIFVzYWdlKG5hbWUpOworCX0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgJ3QnOgorICAgICAgICB0dW4gPSBvcHRhcmc7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnaCc6CisgICAgICBkZWZhdWx0OgorICAgICAgICBVc2FnZShuYW1lKTsKKyAgICB9CisgIH0KKworICBhcmd2ICs9IG9wdGluZDsKKyAgYXJnYyAtPSBvcHRpbmQ7CisKKyAgaWYoYXJnYyA+IDApCisgICAgVXNhZ2UobmFtZSk7CisKKyAgaWYoKHRhcF9mZCA9IG9wZW4oZmlsZSwgT19SRFdSKSkgPCAwKXsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBvcGVuICclcycgOiAiLCBmaWxlKTsKKyAgICBwZXJyb3IoIiIpOworICAgIGV4aXQoMSk7CisgIH0KKworICBtZW1zZXQoJmlmciwgMCwgc2l6ZW9mKGlmcikpOworCisgIGlmci5pZnJfZmxhZ3MgPSBJRkZfVEFQIHwgSUZGX05PX1BJOworICBzdHJuY3B5KGlmci5pZnJfbmFtZSwgdHVuLCBzaXplb2YoaWZyLmlmcl9uYW1lKSAtIDEpOworICBpZihpb2N0bCh0YXBfZmQsIFRVTlNFVElGRiwgKHZvaWQgKikgJmlmcikgPCAwKXsKKyAgICBwZXJyb3IoIlRVTlNFVElGRiIpOworICAgIGV4aXQoMSk7CisgIH0KKworICBpZihkZWxldGUpeworICAgIGlmKGlvY3RsKHRhcF9mZCwgVFVOU0VUUEVSU0lTVCwgMCkgPCAwKXsKKyAgICAgIHBlcnJvcigiZGlzYWJsaW5nIFRVTlNFVFBFUlNJU1QiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIHByaW50ZigiU2V0ICclcycgbm9ucGVyc2lzdGVudFxuIiwgaWZyLmlmcl9uYW1lKTsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBlbXVsYXRlIGJlaGF2aW91ciBwcmlvciB0byBUVU5TRVRHUk9VUCAqLworICAgIGlmKG93bmVyID09IC0xICYmIGdyb3VwID09IC0xKSB7CisgICAgICBvd25lciA9IGdldGV1aWQoKTsKKyAgICB9CisKKyAgICBpZihvd25lciAhPSAtMSkgeworICAgICAgaWYoaW9jdGwodGFwX2ZkLCBUVU5TRVRPV05FUiwgb3duZXIpIDwgMCl7CisgICAgICAJcGVycm9yKCJUVU5TRVRPV05FUiIpOworICAgICAgCWV4aXQoMSk7CisgICAgICB9CisgICAgfQorICAgIGlmKGdyb3VwICE9IC0xKSB7CisgICAgICBpZihpb2N0bCh0YXBfZmQsIFRVTlNFVEdST1VQLCBncm91cCkgPCAwKXsKKyAgICAgIAlwZXJyb3IoIlRVTlNFVEdST1VQIik7CisgICAgICAJZXhpdCgxKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZihpb2N0bCh0YXBfZmQsIFRVTlNFVFBFUlNJU1QsIDEpIDwgMCl7CisgICAgICBwZXJyb3IoImVuYWJsaW5nIFRVTlNFVFBFUlNJU1QiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgaWYoYnJpZWYpCisgICAgICBwcmludGYoIiVzXG4iLCBpZnIuaWZyX25hbWUpOworICAgIGVsc2UgeworICAgICAgcHJpbnRmKCJTZXQgJyVzJyBwZXJzaXN0ZW50IGFuZCBvd25lZCBieSIsIGlmci5pZnJfbmFtZSk7CisgICAgICBpZihvd25lciAhPSAtMSkKKyAgICAgICAgICBwcmludGYoIiB1aWQgJWQiLCBvd25lcik7CisgICAgICBpZihncm91cCAhPSAtMSkKKyAgICAgICAgICBwcmludGYoIiBnaWQgJWQiLCBncm91cCk7CisgICAgICBwcmludGYoIlxuIik7CisgICAgfQorICB9CisgIHJldHVybigwKTsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS10YXJnZXRzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS10YXJnZXRzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzM1NjU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LXRhcmdldHMuaW5jCkBAIC0wLDAgKzEsMjIgQEAKKyMgcG9zc2libGUgYXJjaCB2YWx1ZXMgYXJlIGFybSBhYXJjaDY0IG1pcHMgbWlwc2VsIG1pcHM2NCBtaXBzNjRlbCBwcGMgcHBjNjQgcHBjNjRhYmkzMgorIyBwcGNlbWIgYXJtZWIgYWxwaGEgc3BhcmMzMnBsdXMgaTM4NiB4ODZfNjQgY3JpcyBtNjhrIG1pY3JvYmxhemUgc3BhcmMgc3BhcmMzMgorIyBzcGFyYzMycGx1cworCitkZWYgZ2V0X3FlbXVfdGFyZ2V0X2xpc3QoZCk6CisgICAgaW1wb3J0IGJiCisgICAgYXJjaHMgPSBkLmdldFZhcignUUVNVV9UQVJHRVRTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHRvcyA9IGQuZ2V0VmFyKCdIT1NUX09TJywgVHJ1ZSkKKyAgICBzb2Z0bW11b25seSA9ICIiCisgICAgZm9yIGFyY2ggaW4gWydtaXBzNjQnLCAnbWlwczY0ZWwnLCAncHBjZW1iJ106CisgICAgICAgIGlmIGFyY2ggaW4gYXJjaHM6CisgICAgICAgICAgICBzb2Z0bW11b25seSArPSBhcmNoICsgIi1zb2Z0bW11LCIKKyAgICAgICAgICAgIGFyY2hzLnJlbW92ZShhcmNoKQorICAgIGxpbnV4dXNlcm9ubHkgPSAiIgorICAgIGZvciBhcmNoIGluIFsnYXJtZWInLCAnYWxwaGEnLCAncHBjNjRhYmkzMicsICdzcGFyYzMycGx1cyddOgorICAgICAgICBpZiBhcmNoIGluIGFyY2hzOgorICAgICAgICAgICAgbGludXh1c2Vyb25seSArPSBhcmNoICsgIi1saW51eC11c2VyLCIKKyAgICAgICAgICAgIGFyY2hzLnJlbW92ZShhcmNoKQorICAgIGlmICdsaW51eCcgbm90IGluIHRvczoKKyAgICAgICAgcmV0dXJuIHNvZnRtbXVvbmx5ICsgJycuam9pbihbYXJjaCArICItc29mdG1tdSIgKyAiLCIgZm9yIGFyY2ggaW4gYXJjaHNdKS5yc3RyaXAoJywnKQorICAgIHJldHVybiBzb2Z0bW11b25seSArIGxpbnV4dXNlcm9ubHkgKyAnJy5qb2luKFthcmNoICsgIi1saW51eC11c2VyIiArICIsIiArIGFyY2ggKyAiLXNvZnRtbXUiICsgIiwiIGZvciBhcmNoIGluIGFyY2hzXSkucnN0cmlwKCcsJykKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM4YmYyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS5pbmMKQEAgLTAsMCArMSwxMzcgQEAKK1NVTU1BUlkgPSAiRmFzdCBvcGVuIHNvdXJjZSBwcm9jZXNzb3IgZW11bGF0b3IiCitIT01FUEFHRSA9ICJodHRwOi8vcWVtdS5vcmciCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitERVBFTkRTID0gImdsaWItMi4wIHpsaWIgcGl4bWFuIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtdGFyZ2V0ICs9ICJiYXNoIHB5dGhvbiIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gImJhc2ggbWFrZSIKKworcmVxdWlyZSBxZW11LXRhcmdldHMuaW5jCitpbmhlcml0IGF1dG90b29scyBwdGVzdAorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitQUiA9ICJyMSIKKworIyBRRU1VX1RBUkdFVFMgaXMgb3ZlcnJpZGFibGUgdmFyaWFibGUKK1FFTVVfVEFSR0VUUyA/PSAiYXJtIGFhcmNoNjQgaTM4NiBtaXBzIG1pcHNlbCBtaXBzNjQgbWlwczY0ZWwgcHBjIHNoNCB4ODZfNjQiCisKK1NSQ19VUkkgPSAiXAorICAgIGZpbGU6Ly9wb3dlcnBjX3JvbS5iaW4gXAorICAgIGZpbGU6Ly9kaXNhYmxlLWdyYWJzLnBhdGNoIFwKKyAgICBmaWxlOi8vZXhjbHVkZS1zb21lLWFybS1FQUJJLW9ic29sZXRlLXN5c2NhbGxzLnBhdGNoIFwKKyAgICBmaWxlOi8vd2Fjb20ucGF0Y2ggXAorICAgIGZpbGU6Ly9hZGQtcHRlc3QtaW4tbWFrZWZpbGUucGF0Y2ggXAorICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgIGZpbGU6Ly9jcHVzLmMtcWVtdV9tdXRleF9sb2NrX2lvdGhyZWFkLWZpeC1yYWNlLWNvbmRpdGlvbi1hLnBhdGNoIFwKKyAgICAiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICJcCisgICAgZmlsZTovL2ZpeC1saWJjYXAtaGVhZGVyLWlzc3VlLW9uLXNvbWUtZGlzdHJvLnBhdGNoIFwKKyAgICBmaWxlOi8vY3B1cy5jLXFlbXVfY3B1X2tpY2tfdGhyZWFkX2RlYnVnZ2luZy5wYXRjaCBcCisgICAgIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tdGFyZ2V0LWxpc3Q9JHtAZ2V0X3FlbXVfdGFyZ2V0X2xpc3QoZCl9IC0tZGlzYWJsZS13ZXJyb3IgIC0tZGlzYWJsZS1ibHVleiAtLWRpc2FibGUtbGliaXNjc2kgLS13aXRoLXN5c3RlbS1waXhtYW4gLS1leHRyYS1jZmxhZ3M9JyR7Q0ZMQUdTfSciCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLWVuYWJsZS1kZWJ1ZyAtLWVuYWJsZS1kZWJ1Zy1pbmZvIgorSU5ISUJJVF9TWVNST09UX1NUUklQID0gIjEiCisKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiLS10YXJnZXQtbGlzdD0ke0BnZXRfcWVtdV90YXJnZXRfbGlzdChkKX0gLS1kaXNhYmxlLXdlcnJvciBcCisJCQkJIgorZXhwb3J0IExJQlRPT0w9IiR7SE9TVF9TWVN9LWxpYnRvb2wiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwkjIEFwcGVuZCBidWlsZCBob3N0IHBrZy1jb25maWcgcGF0aHMgZm9yIG5hdGl2ZSB0YXJnZXQgc2luY2UgdGhlIGhvc3QgbWF5IHByb3ZpZGUgc2RsCisJQkhPU1RfUEtHQ09ORklHX1BBVEg9JChQQVRIPS91c3IvYmluOi9iaW4gcGtnLWNvbmZpZyAtLXZhcmlhYmxlIHBjX3BhdGggcGtnLWNvbmZpZyB8fCBlY2hvICIiKQorCWlmIFsgISAteiAiJEJIT1NUX1BLR0NPTkZJR19QQVRIIiBdOyB0aGVuCisJCWV4cG9ydCBQS0dfQ09ORklHX1BBVEg9JFBLR19DT05GSUdfUEFUSDokQkhPU1RfUEtHQ09ORklHX1BBVEgKKwlmaQorfQorCitLVk1FTkFCTEUgPSAiLS1lbmFibGUta3ZtIgorS1ZNRU5BQkxFX2RhcndpbiA9ICItLWRpc2FibGUta3ZtIgorS1ZNRU5BQkxFX21pbmd3MzIgPSAiLS1kaXNhYmxlLWt2bSIKKworZG9fY29uZmlndXJlKCkgeworICAgICMgSGFuZGxlIGRpc3Ryb3Mgc3VjaCBhcyBDZW50T1MgNSAzMi1iaXQgdGhhdCBkbyBub3QgaGF2ZSBrdm0gc3VwcG9ydAorICAgIEtWTU9QVFM9Ii0tZGlzYWJsZS1rdm0iCisgICAgaWYgWyAiJHtQTn0iICE9ICJxZW11LW5hdGl2ZSIgLWEgIiR7UE59IiAhPSAibmF0aXZlc2RrLXFlbXUiIF0gXAorICAgICAgIHx8IFsgLWYgL3Vzci9pbmNsdWRlL2xpbnV4L2t2bS5oIF0gOyB0aGVuCisgICAgICAgS1ZNT1BUUz0iJHtLVk1FTkFCTEV9IgorICAgIGZpCisKKyAgICAke1N9L2NvbmZpZ3VyZSAtLXByZWZpeD0ke3ByZWZpeH0gLS1zeXNjb25mZGlyPSR7c3lzY29uZmRpcn0gLS1saWJleGVjZGlyPSR7bGliZXhlY2Rpcn0gLS1sb2NhbHN0YXRlZGlyPSR7bG9jYWxzdGF0ZWRpcn0gLS1kaXNhYmxlLXN0cmlwICR7RVhUUkFfT0VDT05GfSAkS1ZNT1BUUworICAgIHRlc3QgISAtZSAke1N9L3RhcmdldC1pMzg2L2JlZ2luZW5kX2Z1bmNzLnNoIHx8IGNobW9kIGEreCAke1N9L3RhcmdldC1pMzg2L2JlZ2luZW5kX2Z1bmNzLnNoCit9CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJbWFrZSBidWlsZHRlc3QtVEVTVFMKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwljcCAtckwgJHtCfS90ZXN0cyAke0R9JHtQVEVTVF9QQVRIfQorCWZpbmQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMgLXR5cGUgZiAtbmFtZSAiKi5bU3NoY29kXSIgfCB4YXJncyAtaSBybSAtcmYge30KKworCWNwICR7U30vdGVzdHMvTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMKK30KKworZG9faW5zdGFsbCAoKSB7CisJZXhwb3J0IFNUUklQPSJ0cnVlIgorCWF1dG90b29sc19kb19pbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9xZW11CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcG93ZXJwY19yb20uYmluICR7RH0ke2RhdGFkaXJ9L3FlbXUKK30KKworIyBUaGUgZm9sbG93aW5nIGZyYWdtZW50IHdpbGwgY3JlYXRlIGEgd3JhcHBlciBmb3IgcWVtdS1taXBzIHVzZXIgZW11bGF0aW9uCisjIGJpbmFyeSBpbiBvcmRlciB0byB3b3JrIGFyb3VuZCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBpc3N1ZS4gQmFzaWNhbGx5LCBieQorIyBkZWZhdWx0LCB0aGUgcmVzZXJ2ZWQgdmlydHVhbCBhZGRyZXNzIHNwYWNlIGZvciAzMi1vbi02NCBiaXQgaXMgc2V0IHRvIDRHQi4KKyMgVGhpcyB3aWxsIHRyaWdnZXIgYSBNTVUgYWNjZXNzIGZhdWx0IGluIHRoZSB2aXJ0dWFsIENQVS4gV2l0aCB0aGlzIGNoYW5nZSwKKyMgdGhlIHFlbXUtbWlwcyB3b3JrcyBmaW5lLgorIyBJTVBPUlRBTlQ6IFRoaXMgcGllY2UgbmVlZHMgdG8gYmUgcmVtb3ZlZCBvbmNlIHRoZSByb290IGNhdXNlIGlzIGZpeGVkIQorZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaWYgWyAtZSAiJHtEfS8ke2JpbmRpcn0vcWVtdS1taXBzIiBdOyB0aGVuCisJCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3FlbXUtbWlwcyBcCisJCQlRRU1VX1JFU0VSVkVEX1ZBPTB4MAorCWZpCit9CisjIEVORCBvZiBxZW11LW1pcHMgd29ya2Fyb3VuZAorCitQQUNLQUdFQ09ORklHID8/PSAiIFwKKwlmZHQgc2RsIFwKKwkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2Fsc2EnLCAnYWxzYScsICcnLCBkKX0gXAorCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneGVuJywgJ3hlbicsICcnLCBkKX0gXAorCSIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID8/PSAiZmR0IGFsc2EgdXVpZCIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlc2RrID8/PSAiZmR0IHNkbCIKK05BVElWRURFUFMgPSAiIgorTkFUSVZFREVQU19jbGFzcy1uYXRpdmUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnbGlieGV4dC1uYXRpdmUnLCAnJyxkKX0iCitQQUNLQUdFQ09ORklHW3NkbF0gPSAiLS1lbmFibGUtc2RsLC0tZGlzYWJsZS1zZGwsbGlic2RsICR7TkFUSVZFREVQU30sIgorUEFDS0FHRUNPTkZJR1t2aXJ0ZnNdID0gIi0tZW5hYmxlLXZpcnRmcyAtLWVuYWJsZS1hdHRyLC0tZGlzYWJsZS12aXJ0ZnMsbGliY2FwIGF0dHIsIgorUEFDS0FHRUNPTkZJR1thaW9dID0gIi0tZW5hYmxlLWxpbnV4LWFpbywtLWRpc2FibGUtbGludXgtYWlvLGxpYmFpbywiCitQQUNLQUdFQ09ORklHW3hmc10gPSAiLS1lbmFibGUteGZzY3RsLC0tZGlzYWJsZS14ZnNjdGwseGZzcHJvZ3MsIgorUEFDS0FHRUNPTkZJR1t4ZW5dID0gIi0tZW5hYmxlLXhlbiwtLWRpc2FibGUteGVuLHhlbix4ZW4tbGlieGVuc3RvcmUgeGVuLWxpYnhlbmN0cmwgeGVuLWxpYnhlbmd1ZXN0IgorUEFDS0FHRUNPTkZJR1t2bmMtdGxzXSA9ICItLWVuYWJsZS12bmMgLS1lbmFibGUtdm5jLXRscywtLWRpc2FibGUtdm5jLXRscywgZ251dGxzLCIKK1BBQ0tBR0VDT05GSUdbdm5jLXNhc2xdID0gIi0tZW5hYmxlLXZuYyAtLWVuYWJsZS12bmMtc2FzbCwtLWRpc2FibGUtdm5jLXNhc2wsY3lydXMtc2FzbCwiCitQQUNLQUdFQ09ORklHW3ZuYy1qcGVnXSA9ICItLWVuYWJsZS12bmMgLS1lbmFibGUtdm5jLWpwZWcsLS1kaXNhYmxlLXZuYy1qcGVnLGpwZWcsIgorUEFDS0FHRUNPTkZJR1t2bmMtcG5nXSA9ICItLWVuYWJsZS12bmMgLS1lbmFibGUtdm5jLXBuZywtLWRpc2FibGUtdm5jLXBuZyxsaWJwbmcsIgorUEFDS0FHRUNPTkZJR1tsaWJjdXJsXSA9ICItLWVuYWJsZS1jdXJsLC0tZGlzYWJsZS1jdXJsLGxpYmN1cmwsIgorUEFDS0FHRUNPTkZJR1tuc3NdID0gIi0tZW5hYmxlLXNtYXJ0Y2FyZC1uc3MsLS1kaXNhYmxlLXNtYXJ0Y2FyZC1uc3MsbnNzLCIKK1BBQ0tBR0VDT05GSUdbdXVpZF0gPSAiLS1lbmFibGUtdXVpZCwtLWRpc2FibGUtdXVpZCx1dGlsLWxpbnV4LCIKK1BBQ0tBR0VDT05GSUdbY3Vyc2VzXSA9ICItLWVuYWJsZS1jdXJzZXMsLS1kaXNhYmxlLWN1cnNlcyxuY3Vyc2VzLCIKK1BBQ0tBR0VDT05GSUdbZ3RrK10gPSAiLS1lbmFibGUtZ3RrIC0tZW5hYmxlLXZ0ZSwtLWRpc2FibGUtZ3RrIC0tZGlzYWJsZS12dGUsZ3RrKyBsaWJ2dGUsIgorUEFDS0FHRUNPTkZJR1tsaWJjYXAtbmddID0gIi0tZW5hYmxlLWNhcC1uZywtLWRpc2FibGUtY2FwLW5nLGxpYmNhcC1uZywiCitQQUNLQUdFQ09ORklHW3NzaDJdID0gIi0tZW5hYmxlLWxpYnNzaDIsLS1kaXNhYmxlLWxpYnNzaDIsbGlic3NoMiwiCitQQUNLQUdFQ09ORklHW2xpYnVzYl0gPSAiLS1lbmFibGUtbGlidXNiLC0tZGlzYWJsZS1saWJ1c2IsbGlidXNiMSIKK1BBQ0tBR0VDT05GSUdbZmR0XSA9ICItLWVuYWJsZS1mZHQsLS1kaXNhYmxlLWZkdCxkdGMiCitQQUNLQUdFQ09ORklHW2Fsc2FdID0gIiwsYWxzYS1saWIiCitQQUNLQUdFQ09ORklHW2dseF0gPSAiLS1lbmFibGUtb3BlbmdsLC0tZGlzYWJsZS1vcGVuZ2wsbWVzYSIKK1BBQ0tBR0VDT05GSUdbbHpvXSA9ICItLWVuYWJsZS1sem8sLS1kaXNhYmxlLWx6byxsem8iCitQQUNLQUdFQ09ORklHW251bWFdID0gIi0tZW5hYmxlLW51bWEsLS1kaXNhYmxlLW51bWEsbnVtYWN0bCIKK1BBQ0tBR0VDT05GSUdbZ251dGxzXSA9ICItLWVuYWJsZS1nbnV0bHMsLS1kaXNhYmxlLWdudXRscyxnbnV0bHMiCisKK0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnYWxzYScsICctLWF1ZGlvLWRydi1saXN0PW9zcyxhbHNhJywgJycsIGQpfSIKKworIyBRZW11IHRhcmdldCB3aWxsIG5vdCBidWlsZCBpbiB3b3JsZCBidWlsZCBmb3IgQVJNIG9yIE1pcHMKK0JST0tFTl9xZW11YXJtID0gIjEiCitCUk9LRU5fcWVtdW1pcHM2NCA9ICIxIgorQlJPS0VOX3FlbXVtaXBzID0gIjEiCisKK0lOU0FORV9TS0lQXyR7UE59ID0gImFyY2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvUWVtdS1Bcm0tdmVyc2F0aWxlcGItQWRkLW1lbW9yeS1zaXplLWNoZWNraW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L1FlbXUtQXJtLXZlcnNhdGlsZXBiLUFkZC1tZW1vcnktc2l6ZS1jaGVja2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTZjZjUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L1FlbXUtQXJtLXZlcnNhdGlsZXBiLUFkZC1tZW1vcnktc2l6ZS1jaGVja2luZy5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDg5NmZhMDJjMjQzNDdlNmU5MjU5ODEyY2ZkYTE4N2IxZDZjYTYxOTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKaWFuZyBMdSA8bHUuamlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTMgTm92IDIwMTMgMTA6Mzg6MDggKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gUWVtdTpBcm06dmVyc2F0aWxlcGI6IEFkZCBtZW1vcnkgc2l6ZSBjaGVja2luZworCitUaGUgbWFjaGluZSBjYW4gbm90IHdvcmsgd2l0aCBtZW1vcnkgb3ZlciAyNTZNLCBzbyBhZGQgYSBjaGVja2luZworYXQgc3RhcnR1cC4gSWYgdGhlIG1lbW9yeSBzaXplIGV4Y2VlZCAyNTZNLCBqdXN0IHN0b3AgZW11bGF0aW9uIHRoZW4KK3Rocm93IG91dCB3YXJuaW5nIGFib3V0IG1lbW9yeSBsaW1pdGF0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSmlhbmcgTHUgPGx1LmppYW5nQHdpbmRyaXZlci5jb20+CisKK1VwZGF0ZWQgaXQgb24gMjAxNC0wMS0xNSBmb3IgcmViYXNpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK1VwZGF0ZSBpdCB3aGVuIHVwZ3JhZGUgcWVtdSB0byAyLjIuMAorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+CistLS0KKyBody9hcm0vdmVyc2F0aWxlcGIuYyB8IDcgKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2h3L2FybS92ZXJzYXRpbGVwYi5jIGIvaHcvYXJtL3ZlcnNhdGlsZXBiLmMKK2luZGV4IDZjNjlmNGUuLjkyNzhkOTAgMTAwNjQ0CistLS0gYS9ody9hcm0vdmVyc2F0aWxlcGIuYworKysrIGIvaHcvYXJtL3ZlcnNhdGlsZXBiLmMKK0BAIC0yMDQsNiArMjA0LDEzIEBAIHN0YXRpYyB2b2lkIHZlcnNhdGlsZV9pbml0KE1hY2hpbmVTdGF0ZSAqbWFjaGluZSwgaW50IGJvYXJkX2lkKQorICAgICAgICAgZXhpdCgxKTsKKyAgICAgfQorCisrICAgIGlmIChtYWNoaW5lLT5yYW1fc2l6ZSA+ICgyNTYgPDwgMjApKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKysgICAgICAgICAgICAgICAgInFlbXU6IFRvbyBtdWNoIG1lbW9yeSBmb3IgdGhpcyBtYWNoaW5lOiAlZCBNQiwgbWF4aW11bSAyNTYgTUJcbiIsCisrICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KXJhbV9zaXplIC8gKDEgPDwgMjApKSk7CisrICAgICAgICBleGl0KDEpOworKyAgICB9CisrCisgICAgIGNwdW9iaiA9IG9iamVjdF9uZXcob2JqZWN0X2NsYXNzX2dldF9uYW1lKGNwdV9vYykpOworCisgICAgIC8qIEJ5IGRlZmF1bHQgQVJNMTE3NiBDUFVzIGhhdmUgRUwzIGVuYWJsZWQuICBUaGlzIGJvYXJkIGRvZXMgbm90CistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9hZGQtcHRlc3QtaW4tbWFrZWZpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvYWRkLXB0ZXN0LWluLW1ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OWY3MjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvYWRkLXB0ZXN0LWluLW1ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBZGQgc3VicGFja2FnZSAtcHRlc3Qgd2hpY2ggcnVucyBhbGwgdW5pdCB0ZXN0IGNhc2VzIGZvciBxZW11LgorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRlc3RzL01ha2VmaWxlIHwgICAxMCArKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlIGIvdGVzdHMvTWFrZWZpbGUKK2luZGV4IDg4ZjcxMDUuLjNmNDBiNGIgMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZQorKysrIGIvdGVzdHMvTWFrZWZpbGUKK0BAIC00MDUsMyArNDA1LDEyIEBAIGFsbDogJChRRU1VX0lPVEVTVFNfSEVMUEVSUy15KQorIAorIC1pbmNsdWRlICQod2lsZGNhcmQgdGVzdHMvKi5kKQorIC1pbmNsdWRlICQod2lsZGNhcmQgdGVzdHMvbGlicW9zLyouZCkKKysKKytidWlsZHRlc3QtVEVTVFM6ICQoY2hlY2stdW5pdC15KQorKworK3J1bnRlc3QtVEVTVFM6CisrCWZvciBmIGluICQoY2hlY2stdW5pdC15KTsgZG8gXAorKwkJbmY9JCQoZWNobyAkJGYgfCBzZWQgJ3MvdGVzdHNcLy9cLlwvL2cnKTsgXAorKwkJJCRuZjsgXAorKwlkb25lCisrCistLQorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvY29uZmlndXJlLWZpeC1EYXJ3aW4tdGFyZ2V0LWRldGVjdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jb25maWd1cmUtZml4LURhcndpbi10YXJnZXQtZGV0ZWN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5Y2RjMWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvY29uZmlndXJlLWZpeC1EYXJ3aW4tdGFyZ2V0LWRldGVjdGlvbi5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IENyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+CisKK0Zyb20gOWFjMDk2ZDhlY2NmMmQ1NmVjZTY0NjMyMGMyODJjODM2OWY4MzM3YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+CitEYXRlOiBUdWUsIDI5IEp1bCAyMDE0IDE4OjM1OjU5ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZTogZml4IERhcndpbiB0YXJnZXQgZGV0ZWN0aW9uCisKK2ZpeCBEYXJ3aW4gdGFyZ2V0IGRldGVjdGlvbiBmb3IgcWVtdQorY3Jvc3MtY29tcGlsYXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IENyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCAyODNjNzFjLi4xYzY2YTExIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC00NDQsNiArNDQ0LDggQEAgZWxpZiBjaGVja19kZWZpbmUgX19zdW5fXyA7IHRoZW4KKyAgIHRhcmdldG9zPSdTdW5PUycKKyBlbGlmIGNoZWNrX2RlZmluZSBfX0hBSUtVX18gOyB0aGVuCisgICB0YXJnZXRvcz0nSGFpa3UnCisrZWxpZiBjaGVja19kZWZpbmUgX19BUFBMRV9fIDsgdGhlbgorKyAgdGFyZ2V0b3M9J0RhcndpbicKKyBlbHNlCisgICB0YXJnZXRvcz1gdW5hbWUgLXNgCisgZmkKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NwdXMuYy1xZW11X2NwdV9raWNrX3RocmVhZF9kZWJ1Z2dpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvY3B1cy5jLXFlbXVfY3B1X2tpY2tfdGhyZWFkX2RlYnVnZ2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODIyMTMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NwdXMuYy1xZW11X2NwdV9raWNrX3RocmVhZF9kZWJ1Z2dpbmcucGF0Y2gKQEAgLTAsMCArMSw3NiBAQAorRnJvbSA2OTdhODM0YzM1ZDE5NDQ3YjdkY2RiOWUxZDk0MzRiYzZjZTE3YzIxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuPUMzPUFEYmFsPTIwTGltPUMzPUIzbj89IDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAxMiBBdWcgMjAxNSAxNToxMTozMCAtMDUwMAorU3ViamVjdDogW1BBVENIXSBjcHVzLmM6IEFkZCBlcnJvciBtZXNzYWdlcyB3aGVuIHFlbWlfY3B1X2tpY2tfdGhyZWFkIGZhaWxzLgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitBZGQgY3VzdG9tX2RlYnVnLmggd2l0aCBmdW5jdGlvbiBmb3IgcHJpbnQgYmFja3RyYWNlIGluZm9ybWF0aW9uLgorV2hlbiBwdGhyZWFkX2tpbGwgZmFpbHMgaW4gcWVtdV9jcHVfa2lja190aHJlYWQgZGlzcGxheSBiYWNrdHJhY2UgYW5kCitjdXJyZW50IGNwdSBpbmZvcm1hdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGNwdXMuYyAgICAgICAgIHwgIDUgKysrKysKKyBjdXN0b21fZGVidWcuaCB8IDI0ICsrKysrKysrKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBjdXN0b21fZGVidWcuaAorCitkaWZmIC0tZ2l0IGEvY3B1cy5jIGIvY3B1cy5jCitpbmRleCBhODIyY2UzLi43ZTQ3ODZlIDEwMDY0NAorLS0tIGEvY3B1cy5jCisrKysgYi9jcHVzLmMKK0BAIC0xMDgwLDYgKzEwODAsOCBAQCBzdGF0aWMgdm9pZCAqcWVtdV90Y2dfY3B1X3RocmVhZF9mbih2b2lkICphcmcpCisgICAgIHJldHVybiBOVUxMOworIH0KKyAKKysjaW5jbHVkZSAiY3VzdG9tX2RlYnVnLmgiCisrCisgc3RhdGljIHZvaWQgcWVtdV9jcHVfa2lja190aHJlYWQoQ1BVU3RhdGUgKmNwdSkKKyB7CisgI2lmbmRlZiBfV0lOMzIKK0BAIC0xMDg4LDYgKzEwOTAsOSBAQCBzdGF0aWMgdm9pZCBxZW11X2NwdV9raWNrX3RocmVhZChDUFVTdGF0ZSAqY3B1KQorICAgICBlcnIgPSBwdGhyZWFkX2tpbGwoY3B1LT50aHJlYWQtPnRocmVhZCwgU0lHX0lQSSk7CisgICAgIGlmIChlcnIpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTolczogJXMiLCBfX2Z1bmNfXywgc3RyZXJyb3IoZXJyKSk7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNQVSAjJWQ6XG4iLCBjcHUtPmNwdV9pbmRleCk7CisrICAgICAgICBjcHVfZHVtcF9zdGF0ZShjcHUsIHN0ZGVyciwgZnByaW50ZiwgMCk7CisrICAgICAgICBiYWNrdHJhY2VfcHJpbnQoKTsKKyAgICAgICAgIGV4aXQoMSk7CisgICAgIH0KKyAjZWxzZSAvKiBfV0lOMzIgKi8KK2RpZmYgLS1naXQgYS9jdXN0b21fZGVidWcuaCBiL2N1c3RvbV9kZWJ1Zy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZjAyOWU0NQorLS0tIC9kZXYvbnVsbAorKysrIGIvY3VzdG9tX2RlYnVnLmgKK0BAIC0wLDAgKzEsMjQgQEAKKysjaW5jbHVkZSA8ZXhlY2luZm8uaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjZGVmaW5lIEJBQ0tUUkFDRV9NQVggMTI4Cisrc3RhdGljIHZvaWQgYmFja3RyYWNlX3ByaW50KHZvaWQpCisreworKwlpbnQgbmZ1bmNzID0gMDsKKysJdm9pZCAqYnVmW0JBQ0tUUkFDRV9NQVhdOworKwljaGFyICoqc3ltYm9sczsKKysJaW50IGk7CisrCisrCW5mdW5jcyA9IGJhY2t0cmFjZShidWYsIEJBQ0tUUkFDRV9NQVgpOworKworKwlzeW1ib2xzID0gYmFja3RyYWNlX3N5bWJvbHMoYnVmLCBuZnVuY3MpOworKwlpZiAoc3ltYm9scyA9PSBOVUxMKSB7CisrCQlmcHJpbnRmKHN0ZGVyciwgImJhY2t0cmFjZV9wcmludCBmYWlsZWQgdG8gZ2V0IHN5bWJvbHMiKTsKKysJCXJldHVybjsKKysJfQorKworKwlmcHJpbnRmKHN0ZGVyciwgIkJhY2t0cmFjZSAuLi5cbiIpOworKwlmb3IgKGkgPSAwOyBpIDwgbmZ1bmNzOyBpKyspCisrCQlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBzeW1ib2xzW2ldKTsKKysKKysJZnJlZShzeW1ib2xzKTsKKyt9CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jcHVzLmMtcWVtdV9tdXRleF9sb2NrX2lvdGhyZWFkLWZpeC1yYWNlLWNvbmRpdGlvbi1hLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NwdXMuYy1xZW11X211dGV4X2xvY2tfaW90aHJlYWQtZml4LXJhY2UtY29uZGl0aW9uLWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkZmZhYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jcHVzLmMtcWVtdV9tdXRleF9sb2NrX2lvdGhyZWFkLWZpeC1yYWNlLWNvbmRpdGlvbi1hLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK0Zyb20gZjM1NGI5MzMzNDA4ZDQxMTg1NGFmMDU4Y2M0NGNjZWRhNjBiNDQ3MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9Bbj1DMz1BRGJhbD0yMExpbT1DMz1CM24/PSA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFRodSwgMyBTZXAgMjAxNSAxNDowNzozNCAtMDUwMAorU3ViamVjdDogW1BBVENIXSBjcHVzLmM6IHFlbXVfbXV0ZXhfbG9ja19pb3RocmVhZCBmaXggcmFjZSBjb25kaXRpb24gYXQgY3B1CisgdGhyZWFkIGluaXQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworV2hlbiBRRU1VIHN0YXJ0cyB0aGUgUkNVIHRocmVhZCBleGVjdXRlcyBxZW11X211dGV4X2xvY2tfdGhyZWFkCitjYXVzaW5nIGVycm9yICJxZW11OnFlbXVfY3B1X2tpY2tfdGhyZWFkOiBObyBzdWNoIHByb2Nlc3MiIGFuZCBleGl0cy4KKworVGhpcyBpc24ndCBvY2N1ciBmcmVxdWVudGx5IGJ1dCBpbiBnbGliYyB0aGUgdGhyZWFkIGlkIGNhbiBleGlzdCBhbmQKK3RoaXMgbm90IGd1YXJhbnRlZSB0aGF0IHRoZSB0aHJlYWQgaXMgb24gYWN0aXZlL3J1bm5pbmcgc3RhdGUuIElmIGlzCitpbnNlcnRlZCBhIHNsZWVwKDEpIGFmdGVyIG5ld3RocmVhZCBhc3NpZ25tZW50IFsxXSB0aGUgaXNzdWUgYXBwZWFycy4KKworU28gbm90IG1ha2UgYXNzdW1wdGlvbiB0aGF0IHRocmVhZCBleGlzdCBpZiBmaXJzdF9jcHUtPnRocmVhZCBpcyBzZXQKK3RoZW4gY2hhbmdlIHRoZSB2YWxpZGF0aW9uIG9mIGNwdSB0byBjcmVhdGVkIHRoYXQgaXMgc2V0IGludG8gY3B1Cit0aHJlYWRzIChrdm0sIHRjZywgZHVtbXkpLgorCitbMV0gaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9naXQvP3A9Z2xpYmMuZ2l0O2E9YmxvYjtmPW5wdGwvcHRocmVhZF9jcmVhdGUuYztoPWQxMGY0ZWE4MDA0ZTFkOGYzYTI2OGI5NWNjMGY4ZDkzYjhkODk4Njc7aGI9SEVBRCNsNjIxCisKK1NpZ25lZC1vZmYtYnk6IEFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorLS0tCisgY3B1cy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY3B1cy5jIGIvY3B1cy5jCitpbmRleCA3ZTQ3ODZlLi4wNWU1NDAwIDEwMDY0NAorLS0tIGEvY3B1cy5jCisrKysgYi9jcHVzLmMKK0BAIC0xMTcxLDcgKzExNzEsNyBAQCB2b2lkIHFlbXVfbXV0ZXhfbG9ja19pb3RocmVhZCh2b2lkKQorICAgICAgKiBUQ0cgY29kZSBleGVjdXRpb24uCisgICAgICAqLworICAgICBpZiAoIXRjZ19lbmFibGVkKCkgfHwgcWVtdV9pbl92Y3B1X3RocmVhZCgpIHx8CistICAgICAgICAhZmlyc3RfY3B1IHx8ICFmaXJzdF9jcHUtPnRocmVhZCkgeworKyAgICAgICAgIWZpcnN0X2NwdSB8fCAhZmlyc3RfY3B1LT5jcmVhdGVkKSB7CisgICAgICAgICBxZW11X211dGV4X2xvY2soJnFlbXVfZ2xvYmFsX211dGV4KTsKKyAgICAgICAgIGF0b21pY19kZWMoJmlvdGhyZWFkX3JlcXVlc3RpbmdfbXV0ZXgpOworICAgICB9IGVsc2UgeworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZGlzYWJsZS1ncmFicy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9kaXNhYmxlLWdyYWJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNzI2YjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZGlzYWJsZS1ncmFicy5wYXRjaApAQCAtMCwwICsxLDcyIEBACitXaGVuIHRoZSBwb2ludGVyIGVudGVycyB0aGUgUWVtdSB3aW5kb3cgaXQgY2FsbHMgU0RMX1dNX0dyYWJJbnB1dCwgd2hpY2ggY2FsbHMKK1hHcmFiUG9pbnRlciBpbiBhIGJ1c3lsb29wIHVudGlsIGl0IHJldHVybnMgR3JhYlN1Y2Nlc3MuIEhvd2V2ZXIgaWYgdGhlcmUncyBhbHJlYWR5CithIHBvaW50ZXIgZ3JhYiAoc2NyZWVuIGlzIGxvY2tlZCwgYSBtZW51IGlzIG9wZW4pIHRoZW4gcWVtdSB3aWxsIGhhbmcgdW50aWwgdGhlCitncmFiIGNhbiBiZSB0YWtlbi4gIEluIHRoZSBzcGVjaWZpYyBjYXNlIG9mIGEgaGVhZGxlc3MgWCBzZXJ2ZXIgb24gYW4gYXV0b2J1aWxkZXIsIG9uY2UKK3RoZSBzY3JlZW5zYXZlciBoYXMga2lja2VkIGluIGFueSBxZW11IGluc3RhbmNlIHRoYXQgYXBwZWFycyB1bmRlcm5lYXRoIHRoZQorcG9pbnRlciB3aWxsIGhhbmcuCisKK0knbSBub3QgZW50aXJlbHkgc3VyZSB3aHkgcG9pbnRlciBncmFicyBhcmUgcmVxdWlyZWQgKHRoZSBkb2N1bWVudGF0aW9uCitleHBsaWNpdGx5IHNheXMgaXQgZG9lc24ndCBkbyBncmFicyB3aGVuIHVzaW5nIGEgdGFibGV0LCB3aGljaCB3ZSBhcmUpIHNvIHdyYXAKK3RoZW0gaW4gYSBjb25kaXRpb25hbCB0aGF0IGNhbiBiZSBzZXQgYnkgdGhlIGF1dG9idWlsZGVyIGVudmlyb25tZW50LCBwcmVzZXJ2aW5nCit0aGUgY3VycmVudCBncmFiYmluZyBiZWhhdmlvdXIgZm9yIGV2ZXJ5b25lIGVsc2UuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSA0YjE5ODhlY2IwMWExNzgyNjllYzA1MTNhNzVmMmVjNjIwYzdlZjZhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMTggU2VwIDIwMTMgMTQ6MDQ6NTQgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gc2RsLmM6IGFsbG93IHVzZXIgdG8gZGlzYWJsZSBwb2ludGVyIGdyYWJzCisKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBFcmljIELDqW5hcmQgPGVyaWNAZXVrcmVhLmNvbT4KKy0tLQorIHVpL3NkbC5jIHwgMTIgKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS91aS9zZGwuYyBiL3VpL3NkbC5jCitpbmRleCAzOWE0MmQ2Li45YjhhYmU1IDEwMDY0NAorLS0tIGEvdWkvc2RsLmMKKysrKyBiL3VpL3NkbC5jCitAQCAtNTksNiArNTksMTAgQEAgc3RhdGljIFNETF9DdXJzb3IgKmd1ZXN0X3Nwcml0ZSA9IE5VTEw7Cisgc3RhdGljIFNETF9QaXhlbEZvcm1hdCBob3N0X2Zvcm1hdDsKKyBzdGF0aWMgaW50IHNjYWxpbmdfYWN0aXZlID0gMDsKKyBzdGF0aWMgTm90aWZpZXIgbW91c2VfbW9kZV9ub3RpZmllcjsKKysjaWZuZGVmIFRydWUKKysjZGVmaW5lIFRydWUgMQorKyNlbmRpZgorK3N0YXRpYyBkb2luZ19ncmFicyA9IFRydWU7CisgCisgc3RhdGljIHZvaWQgc2RsX3VwZGF0ZShEaXNwbGF5Q2hhbmdlTGlzdGVuZXIgKmRjbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKQorQEAgLTM4NCwxNCArMzg4LDE2IEBAIHN0YXRpYyB2b2lkIHNkbF9ncmFiX3N0YXJ0KHZvaWQpCisgICAgICAgICAgICAgU0RMX1dhcnBNb3VzZShndWVzdF94LCBndWVzdF95KTsKKyAgICAgfSBlbHNlCisgICAgICAgICBzZGxfaGlkZV9jdXJzb3IoKTsKKy0gICAgU0RMX1dNX0dyYWJJbnB1dChTRExfR1JBQl9PTik7CisrICAgIGlmIChkb2luZ19ncmFicykKKysgICAgICBTRExfV01fR3JhYklucHV0KFNETF9HUkFCX09OKTsKKyAgICAgZ3VpX2dyYWIgPSAxOworICAgICBzZGxfdXBkYXRlX2NhcHRpb24oKTsKKyB9CisgCisgc3RhdGljIHZvaWQgc2RsX2dyYWJfZW5kKHZvaWQpCisgeworLSAgICBTRExfV01fR3JhYklucHV0KFNETF9HUkFCX09GRik7CisrICAgIGlmIChkb2luZ19ncmFicykKKysgICAgICBTRExfV01fR3JhYklucHV0KFNETF9HUkFCX09GRik7CisgICAgIGd1aV9ncmFiID0gMDsKKyAgICAgc2RsX3Nob3dfY3Vyc29yKCk7CisgICAgIHNkbF91cGRhdGVfY2FwdGlvbigpOworQEAgLTkwOSw2ICs5MTUsOCBAQCB2b2lkIHNkbF9kaXNwbGF5X2luaXQoRGlzcGxheVN0YXRlICpkcywgaW50IGZ1bGxfc2NyZWVuLCBpbnQgbm9fZnJhbWUpCisgICAgICAqIFRoaXMgcmVxdWlyZXMgU0RMID49IDEuMi4xNC4gKi8KKyAgICAgc2V0ZW52KCJTRExfRElTQUJMRV9MT0NLX0tFWVMiLCAiMSIsIDEpOworIAorKyAgICBkb2luZ19ncmFicyA9IChnZXRlbnYoIlFFTVVfRE9OVF9HUkFCIikgPT0gTlVMTCk7CisrCisgICAgIGZsYWdzID0gU0RMX0lOSVRfVklERU8gfCBTRExfSU5JVF9OT1BBUkFDSFVURTsKKyAgICAgaWYgKFNETF9Jbml0IChmbGFncykpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGluaXRpYWxpemUgU0RMKCVzKSAtIGV4aXRpbmdcbiIsCistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2V4Y2x1ZGUtc29tZS1hcm0tRUFCSS1vYnNvbGV0ZS1zeXNjYWxscy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9leGNsdWRlLXNvbWUtYXJtLUVBQkktb2Jzb2xldGUtc3lzY2FsbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxYmRhNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9leGNsdWRlLXNvbWUtYXJtLUVBQkktb2Jzb2xldGUtc3lzY2FsbHMucGF0Y2gKQEAgLTAsMCArMSw5MyBAQAorW1BBVENIXSBleGNsdWRlIHNvbWUgYXJtIEVBQkkgb2Jzb2xldGUgc3lzY2FsbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3NvbWUgc3lzY2FsbHMgYXJlIG9ic29sZXRlIGFuZCBubyBsb25nZXIgYXZhaWxhYmxlIGZvciBFQUJJLCBleGNsdWRlIHRoZW0gdG8KK2ZpeCB0aGUgYmVsb3cgZXJyb3I6CisJSW4gZmlsZSBpbmNsdWRlZCBmcm9tIHFlbXUtc2VjY29tcC5jOjE2OjA6CisJcWVtdS1zZWNjb21wLmM6Mjg6NzogZXJyb3I6ICdfX05SX3NlbGVjdCcgdW5kZWNsYXJlZCBoZXJlIChub3QgaW4gYSBmdW5jdGlvbikKKwkgICAgICB7IFNDTVBfU1lTKHNlbGVjdCksIDI1MiB9LAorCSAgICAgICAgXgorCXFlbXUtc2VjY29tcC5jOjM2Ojc6IGVycm9yOiAnX19OUl9tbWFwJyB1bmRlY2xhcmVkIGhlcmUgKG5vdCBpbiBhIGZ1bmN0aW9uKQorCSAgICAgIHsgU0NNUF9TWVMobW1hcCksIDI0NyB9LAorCSAgICAgICAgXgorCXFlbXUtc2VjY29tcC5jOjU3Ojc6IGVycm9yOiAnX19OUl9nZXRybGltaXQnIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pCisJICAgICAgeyBTQ01QX1NZUyhnZXRybGltaXQpLCAyNDUgfSwKKwkgICAgICAgIF4KKwlxZW11LXNlY2NvbXAuYzo5Njo3OiBlcnJvcjogJ19fTlJfdGltZScgdW5kZWNsYXJlZCBoZXJlIChub3QgaW4gYSBmdW5jdGlvbikKKwkgICAgICB7IFNDTVBfU1lTKHRpbWUpLCAyNDUgfSwKKwkgICAgICAgIF4KKwlxZW11LXNlY2NvbXAuYzoxODU6NzogZXJyb3I6ICdfX05SX2FsYXJtJyB1bmRlY2xhcmVkIGhlcmUgKG5vdCBpbiBhIGZ1bmN0aW9uKQorCSAgICAgIHsgU0NNUF9TWVMoYWxhcm0pLCAyNDEgfSwKKworcGxlYXNlIHJlZmVyIHNvdXJjZSBmaWxlczoKKwlhcmNoL2FybS9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCitvciBrZXJuZWwgaGVhZGVyOgorCS91c3IvaW5jbHVkZS9hc20vdW5pc3RkLmgKKworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgcWVtdS1zZWNjb21wLmMgfCAxNCArKysrKysrKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9xZW11LXNlY2NvbXAuYyBiL3FlbXUtc2VjY29tcC5jCitpbmRleCBjYWE5MjZlLi41YTc4NTAyIDEwMDY0NAorLS0tIGEvcWVtdS1zZWNjb21wLmMKKysrKyBiL3FlbXUtc2VjY29tcC5jCitAQCAtMjUsMTUgKzI1LDIxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgUWVtdVNlY2NvbXBTeXNjYWxsIHNlY2NvbXBfd2hpdGVsaXN0W10gPSB7CisgICAgIHsgU0NNUF9TWVModGltZXJfc2V0dGltZSksIDI1NSB9LAorICAgICB7IFNDTVBfU1lTKHRpbWVyX2dldHRpbWUpLCAyNTQgfSwKKyAgICAgeyBTQ01QX1NZUyhmdXRleCksIDI1MyB9LAorKyNpZiAhZGVmaW5lZChfX0FSTV9FQUJJX18pCisgICAgIHsgU0NNUF9TWVMoc2VsZWN0KSwgMjUyIH0sCisrICAgIHsgU0NNUF9TWVModGltZSksIDI0NSB9LAorKyAgICB7IFNDTVBfU1lTKGFsYXJtKSwgMjQxIH0sCisrICAgIHsgU0NNUF9TWVMoZ2V0cmxpbWl0KSwgMjQ1IH0sCisrICAgIHsgU0NNUF9TWVMobW1hcCksIDI0NyB9LAorKyAgICB7IFNDTVBfU1lTKHNvY2tldGNhbGwpLCAyNTAgfSwKKysgICAgeyBTQ01QX1NZUyhpcGMpLCAyNDUgfSwKKysjZW5kaWYKKyAgICAgeyBTQ01QX1NZUyhyZWN2ZnJvbSksIDI1MSB9LAorICAgICB7IFNDTVBfU1lTKHNlbmR0byksIDI1MCB9LAorLSAgICB7IFNDTVBfU1lTKHNvY2tldGNhbGwpLCAyNTAgfSwKKyAgICAgeyBTQ01QX1NZUyhyZWFkKSwgMjQ5IH0sCisgICAgIHsgU0NNUF9TWVMoaW9fc3VibWl0KSwgMjQ5IH0sCisgICAgIHsgU0NNUF9TWVMoYnJrKSwgMjQ4IH0sCisgICAgIHsgU0NNUF9TWVMoY2xvbmUpLCAyNDcgfSwKKy0gICAgeyBTQ01QX1NZUyhtbWFwKSwgMjQ3IH0sCisgICAgIHsgU0NNUF9TWVMobXByb3RlY3QpLCAyNDYgfSwKKyAgICAgeyBTQ01QX1NZUyhleGVjdmUpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhvcGVuKSwgMjQ1IH0sCitAQCAtNDgsMTMgKzU0LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgUWVtdVNlY2NvbXBTeXNjYWxsIHNlY2NvbXBfd2hpdGVsaXN0W10gPSB7CisgICAgIHsgU0NNUF9TWVMoYmluZCksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKGxpc3RlbiksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKHNlbWdldCksIDI0NSB9LAorLSAgICB7IFNDTVBfU1lTKGlwYyksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKGdldHRpbWVvZmRheSksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKHJlYWRsaW5rKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoYWNjZXNzKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMocHJjdGwpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhzaWduYWxmZCksIDI0NSB9LAorLSAgICB7IFNDTVBfU1lTKGdldHJsaW1pdCksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKHNldF90aWRfYWRkcmVzcyksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKHN0YXRmcyksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKHVubGluayksIDI0NSB9LAorQEAgLTkzLDcgKzk3LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBRZW11U2VjY29tcFN5c2NhbGwgc2VjY29tcF93aGl0ZWxpc3RbXSA9IHsKKyAgICAgeyBTQ01QX1NZUyh0aW1lcyksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKGV4aXQpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhjbG9ja19nZXR0aW1lKSwgMjQ1IH0sCistICAgIHsgU0NNUF9TWVModGltZSksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKHJlc3RhcnRfc3lzY2FsbCksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKHB3cml0ZTY0KSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMobmFub3NsZWVwKSwgMjQ1IH0sCitAQCAtMTgyLDcgKzE4NSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgUWVtdVNlY2NvbXBTeXNjYWxsIHNlY2NvbXBfd2hpdGVsaXN0W10gPSB7CisgICAgIHsgU0NNUF9TWVMobHN0YXQ2NCksIDI0MSB9LAorICAgICB7IFNDTVBfU1lTKHNlbmRmaWxlNjQpLCAyNDEgfSwKKyAgICAgeyBTQ01QX1NZUyh1Z2V0cmxpbWl0KSwgMjQxIH0sCistICAgIHsgU0NNUF9TWVMoYWxhcm0pLCAyNDEgfSwKKyAgICAgeyBTQ01QX1NZUyhydF9zaWdzdXNwZW5kKSwgMjQxIH0sCisgICAgIHsgU0NNUF9TWVMocnRfc2lncXVldWVpbmZvKSwgMjQxIH0sCisgICAgIHsgU0NNUF9TWVMocnRfdGdzaWdxdWV1ZWluZm8pLCAyNDEgfSwKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2ZpeC1saWJjYXAtaGVhZGVyLWlzc3VlLW9uLXNvbWUtZGlzdHJvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2ZpeC1saWJjYXAtaGVhZGVyLWlzc3VlLW9uLXNvbWUtZGlzdHJvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYTZlYTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZml4LWxpYmNhcC1oZWFkZXItaXNzdWUtb24tc29tZS1kaXN0cm8ucGF0Y2gKQEAgLTAsMCArMSw4NCBAQAorZml4IGxpYmNhcCBoZWFkZXIgaXNzdWUgb24gc29tZSBkaXN0cm8KKworMSwgV2hlbiBidWlsZCBxZW11LW5hdGl2ZSBvbiBTTEVEIDExLjIsIHRoZXJlIGlzIGFuIGVycm9yOgorLi4uCit8IEluIGZpbGUgaW5jbHVkZWQgZnJvbSAvdXNyL2luY2x1ZGUvYml0cy9zaWdjb250ZXh0Lmg6MjgsCit8ICBmcm9tIC91c3IvaW5jbHVkZS9zaWduYWwuaDozMzksCit8ICBmcm9tIC9idWlsZGFyZWEyL3RtcC93b3JrL2k2ODYtbGludXgvcWVtdS1uYXRpdmUvMS40LjAtcjAvCitxZW11LTEuNC4wL2luY2x1ZGUvcWVtdS1jb21tb24uaDo0MiwKK3wgIGZyb20gZnNkZXYvdmlydGZzLXByb3h5LWhlbHBlci5jOjIzOgorfCAgL3Vzci9pbmNsdWRlL2FzbS9zaWdjb250ZXh0Lmg6Mjg6IGVycm9yOiBleHBlY3RlZCBzcGVjaWZpZXItCitxdWFsaWZpZXItbGlzdCBiZWZvcmUgJ19fdTY0JworfCAgL3Vzci9pbmNsdWRlL2FzbS9zaWdjb250ZXh0Lmg6MTkxOiBlcnJvcjogZXhwZWN0ZWQgc3BlY2lmaWVyLQorcXVhbGlmaWVyLWxpc3QgYmVmb3JlICdfX3U2NCcKKy4uLgorCisyLCBUaGUgdmlydGZzLXByb3h5LWhlbHBlci5jIGluY2x1ZGVzIDxzeXMvY2FwYWJpbGl0eS5oPiBhbmQKK3FlbXUtY29tbW9uLmggaW4gc2VxdWVuY2UuIFRoZSBoZWFkZXIgaW5jbHVkZSBtYXAgaXM6CisoYC0tPicgcHJlc2VudHMgYGluY2x1ZGUnKQorLi4uCisidmlydGZzLXByb3h5LWhlbHBlci5jIiAtLT4gPHN5cy9jYXBhYmlsaXR5Lmg+CisuLi4KKyJ2aXJ0ZnMtcHJveHktaGVscGVyLmMiIC0tPiAicWVtdS1jb21tb24uaCIgLS0+IDxzaWduYWwuaD4gLS0+Cis8Yml0cy9zaWdjb250ZXh0Lmg+IC0tPiA8YXNtL3NpZ2NvbnRleHQuaD4gLS0+IDxsaW51eC90eXBlcy5oPiAtLT4KKzxhc20vdHlwZXMuaD4gLS0+IDxhc20tZ2VuZXJpYy90eXBlcy5oPiAtLT4gPGFzbS1nZW5lcmljL2ludC1sbDY0Lmg+CisuLi4KKworMywgVGhlIGJ1ZyBpcyBmb3VuZCBvbiBTTEVEIDExLjIgeDg2LiBJbiBsaWJjYXAgaGVhZGVyIGZpbGUKKy91c3IvaW5jbHVkZS9zeXMvY2FwYWJpbGl0eS5oLCBpdCBkb2VzIGV2aWwgc3R1ZmYgbGlrZSB0aGlzOgorLi4uCisgIDI1IC8qCisgIDI2ICAqIE1ha2Ugc3VyZSB3ZSBjYW4gYmUgaW5jbHVkZWQgZnJvbSB1c2VybGFuZCBieSBwcmV2ZW50aW5nCisgIDI3ICAqIGNhcGFiaWxpdHkuaCBmcm9tIGluY2x1ZGluZyBvdGhlciBrZXJuZWwgaGVhZGVycworICAyOCAgKi8KKyAgMjkgI2RlZmluZSBfTElOVVhfVFlQRVNfSAorICAzMCAjZGVmaW5lIF9MSU5VWF9GU19ICisgIDMxICNkZWZpbmUgX19MSU5VWF9DT01QSUxFUl9ICisgIDMyICNkZWZpbmUgX191c2VyCisgIDMzCisgIDM0IHR5cGVkZWYgdW5zaWduZWQgaW50IF9fdTMyOworICAzNSB0eXBlZGVmIF9fdTMyIF9fbGUzMjsKKy4uLgorVGhpcyBjb21wbGV0ZWx5IHByZXZlbnRzIGluY2x1ZGluZyAvdXNyL2luY2x1ZGUvbGludXgvdHlwZXMuaC4KK1RoZSBhYm92ZSBgPGFzbS9zaWdjb250ZXh0Lmg+IC0tPiA8bGludXgvdHlwZXMuaD4nIGlzIHByZXZlbnRlZCwKK2FuZCAnX191NjQnIGlzIGRlZmluZWQgaW4gPGFzbS1nZW5lcmljL2ludC1sbDY0Lmg+LgorCis0LCBNb2RpZnkgdmlydGZzLXByb3h5LWhlbHBlci5jIHRvIGluY2x1ZGUgPHN5cy9jYXBhYmlsaXR5Lmg+CitsYXN0IHRvIHdvcmthcm91bmQgdGhlIGlzc3VlLgorCitodHRwOi8vd3d3LmxpbnV4dHYub3JnL3BpcGVybWFpbC92ZHIvMjAwOS1BdWd1c3QvMDIxMTk0Lmh0bWwKK2h0dHA6Ly9wYXRjaHdvcmsubGludXh0di5vcmcvcGF0Y2gvMTI3NDgvCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgZnNkZXYvdmlydGZzLXByb3h5LWhlbHBlci5jIHwgICAgNyArKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2ZzZGV2L3ZpcnRmcy1wcm94eS1oZWxwZXIuYyBiL2ZzZGV2L3ZpcnRmcy1wcm94eS1oZWxwZXIuYworLS0tIGEvZnNkZXYvdmlydGZzLXByb3h5LWhlbHBlci5jCisrKysgYi9mc2Rldi92aXJ0ZnMtcHJveHktaGVscGVyLmMKK0BAIC0xMiw3ICsxMiw2IEBACisgI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAjaW5jbHVkZSA8c3lzbG9nLmg+CistI2luY2x1ZGUgPHN5cy9jYXBhYmlsaXR5Lmg+CisgI2luY2x1ZGUgPHN5cy9mc3VpZC5oPgorICNpbmNsdWRlIDxzeXMvdmZzLmg+CisgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorQEAgLTI2LDcgKzI1LDExIEBACisgI2luY2x1ZGUgInZpcnRpby05cC1tYXJzaGFsLmgiCisgI2luY2x1ZGUgImh3LzlwZnMvdmlydGlvLTlwLXByb3h5LmgiCisgI2luY2x1ZGUgImZzZGV2L3ZpcnRpby05cC1tYXJzaGFsLmgiCistCisrLyoKKysgKiBJbmNsdWRlIHRoaXMgb25lIGxhc3QgZHVlIHRvIHNvbWUgdmVyc2lvbnMgb2YgaXQgYmVpbmcgYnVnZ3k6CisrICogaHR0cDovL3d3dy5saW51eHR2Lm9yZy9waXBlcm1haWwvdmRyLzIwMDktQXVndXN0LzAyMTE5NC5odG1sCisrICovCisrI2luY2x1ZGUgPHN5cy9jYXBhYmlsaXR5Lmg+CisgI2RlZmluZSBQUk9HTkFNRSAidmlydGZzLXByb3h5LWhlbHBlciIKKyAKKyAjaWZuZGVmIFhGU19TVVBFUl9NQUdJQworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcG93ZXJwY19yb20uYmluIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3Bvd2VycGNfcm9tLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDA0NDI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3Bvd2VycGNfcm9tLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcWVtdS1lbmxhcmdlLWVudi1lbnRyeS1zaXplLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3FlbXUtZW5sYXJnZS1lbnYtZW50cnktc2l6ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzQyNWFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3FlbXUtZW5sYXJnZS1lbnYtZW50cnktc2l6ZS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitxZW11OiBBZGQgYWRkaXRpb24gZW52aXJvbm1lbnQgc3BhY2UgdG8gYm9vdCBsb2FkZXIgcWVtdS1zeXN0ZW0tbWlwcyAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIC0gT0UgdXNlcyBkZWVwIHBhdGhzCisKK0lmIHlvdSBjcmVhdGUgYSBwcm9qZWN0IHdpdGggdmVyeSBsb25nIGRpcmVjdG9yeSBuYW1lcyBsaWtlIDEyOCBjaGFyYWN0ZXJzCitkZWVwIGFuZCB1c2UgTkZTLCB0aGUga2VybmVsIGFyZ3VtZW50cyB3aWxsIGJlIHRydW5jYXRlZC4gVGhlIGtlcm5lbCB3aWxsCithY2NlcHQgbG9uZ2VyIHN0cmluZ3Mgc3VjaCBhcyAxMDI0IGJ5dGVzLCBidXQgdGhlIHFlbXUgYm9vdCBsb2FkZXIgZGVmYXVsdGVkCit0byBvbmx5IDI1NiBieXRlcy4gVGhpcyBwYXRjaCBleHBhbmRzIHRoZSBsaW1pdC4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGh3L21pcHMvbWlwc19tYWx0YS5jICAgIHwgICAgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvaHcvbWlwcy9taXBzX21hbHRhLmMgYi9ody9taXBzL21pcHNfbWFsdGEuYworaW5kZXggOWQ1MjFjYy4uMTdjMDM5MSAxMDA2NDQKKy0tLSBhL2h3L21pcHMvbWlwc19tYWx0YS5jCisrKysgYi9ody9taXBzL21pcHNfbWFsdGEuYworQEAgLTUzLDcgKzUzLDcgQEAKKyAKKyAjZGVmaW5lIEVOVlBfQUREUgkJMHg4MDAwMjAwMGwKKyAjZGVmaW5lIEVOVlBfTkJfRU5UUklFUwkgCTE2CistI2RlZmluZSBFTlZQX0VOVFJZX1NJWkUJIAkyNTYKKysjZGVmaW5lIEVOVlBfRU5UUllfU0laRQkgCTEwMjQKKyAKKyAvKiBIYXJkd2FyZSBhZGRyZXNzZXMgKi8KKyAjZGVmaW5lIEZMQVNIX0FERFJFU1MgMHgxZTAwMDAwMFVMTAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGI4ZTk3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3J1bi1wdGVzdApAQCAtMCwwICsxLDggQEAKKyMhL2Jpbi9zaAorIworI1RoaXMgc2NyaXB0IGlzIHVzZWQgdG8gcnVuIHFlbXUgdGVzdCBzdWl0ZXMKK3B0ZXN0ZGlyPSQocHdkKQorY2QgdGVzdHMKKworZXhwb3J0IFNSQ19QQVRIPSRwdGVzdGRpcgorbWFrZSAtayBydW50ZXN0LVRFU1RTIHwgc2VkICcvOiBPSy8gcy9eL1BBU1M6IC9nJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzdlNzc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgucGF0Y2gKQEAgLTAsMCArMSw3NCBAQAorVGhlIHNtYzkxYzExMS5jIGRyaXZlciBhcHBlYXJzIHRvIGhhdmUgc2V2ZXJhbCBpc3N1ZXMuIFRoZSBjYW5fcmVjZWl2ZSgpCitmdW5jdGlvbiBjYW4gcmV0dXJuIHRoYXQgdGhlIGRyaXZlciBpcyByZWFkeSB3aGVuIHJ4X2ZpZm8gaGFzIG5vdCBiZWVuIAorZnJlZWQgeWV0LiBUaGVyZSBpcyBhbHNvIG5vIHNhbml0eSBjaGVjayBvZiByeF9maWZvKCkgaW4gX3JlY2VpdmUoKSB3aGljaAorY2FuIGxlYWQgdG8gY29ycnVwdGlvbiBvZiB0aGUgcnhfZmlmbyBhcnJheS4KKworcmVsZWFzZV9wYWNrZXQoKSBjYW4gYWxzbyBjYWxsIHFlbXVfZmx1c2hfcXVldWVkX3BhY2tldHMoKSBiZWZvcmUgcnhfZmlmbyAKK2hhcyBiZWVuIGNsZWFuZWQgdXAsIHJlc3VsdGluZyBpbiBjYXNlcyB3aGVyZSBwYWNrZXRzIGFyZSBzdWJtaXR0ZWQKK2ZvciB3aGljaCB0aGVyZSBpcyBub3QgeWV0IGFueSBzcGFjZS4KKworVGhpcyBwYXRjaCB0aGVyZWZvcmU6CisKKyogZml4ZXMgdGhlIGxvZ2ljIGluIGNhbl9yZWNlaXZlKCkKKyogYWRkcyBsb2dpYyB0byByZWNlaXZlKCkgYXMgYSBzYW5pdHkgY2hlY2sKKyogbW92ZXMgdGhlIGZsdXNoKCkgY2FsbHMgdG8gdGhlIGNvcnJlY3QgcGxhY2VzIHdoZXJlIGRhdGEgaXMgcmVhZHkKKyAgdG8gYmUgcmVjZWl2ZWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtkaXNjdXNzaW9uIGluIHByb2dyZXNzIG9uIG1haWxpbmcgbGlzdF0KK1JQIDIwMTUvOS83CisKK0luZGV4OiBxZW11LTIuNC4wL2h3L25ldC9zbWM5MWMxMTEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHFlbXUtMi40LjAub3JpZy9ody9uZXQvc21jOTFjMTExLmMKKysrKyBxZW11LTIuNC4wL2h3L25ldC9zbWM5MWMxMTEuYworQEAgLTE4NSw3ICsxODUsNiBAQCBzdGF0aWMgdm9pZCBzbWM5MWMxMTFfcmVsZWFzZV9wYWNrZXQoc21jCisgICAgIHMtPmFsbG9jYXRlZCAmPSB+KDEgPDwgcGFja2V0KTsKKyAgICAgaWYgKHMtPnR4X2FsbG9jID09IDB4ODApCisgICAgICAgICBzbWM5MWMxMTFfdHhfYWxsb2Mocyk7CistICAgIHFlbXVfZmx1c2hfcXVldWVkX3BhY2tldHMocWVtdV9nZXRfcXVldWUocy0+bmljKSk7CisgfQorIAorIC8qIEZsdXNoIHRoZSBUWCBGSUZPLiAgKi8KK0BAIC0yMzcsOSArMjM2LDExIEBAIHN0YXRpYyB2b2lkIHNtYzkxYzExMV9kb190eChzbWM5MWMxMTFfc3QKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgI2VuZGlmCistICAgICAgICBpZiAocy0+Y3RyICYgQ1RSX0FVVE9fUkVMRUFTRSkKKysgICAgICAgIGlmIChzLT5jdHIgJiBDVFJfQVVUT19SRUxFQVNFKSB7CisgICAgICAgICAgICAgLyogUmFjZT8gICovCisgICAgICAgICAgICAgc21jOTFjMTExX3JlbGVhc2VfcGFja2V0KHMsIHBhY2tldG51bSk7CisrICAgICAgICAgICAgcWVtdV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhxZW11X2dldF9xdWV1ZShzLT5uaWMpKTsKKysgICAgICAgIH0KKyAgICAgICAgIGVsc2UgaWYgKHMtPnR4X2ZpZm9fZG9uZV9sZW4gPCBOVU1fUEFDS0VUUykKKyAgICAgICAgICAgICBzLT50eF9maWZvX2RvbmVbcy0+dHhfZmlmb19kb25lX2xlbisrXSA9IHBhY2tldG51bTsKKyAgICAgICAgIHFlbXVfc2VuZF9wYWNrZXQocWVtdV9nZXRfcXVldWUocy0+bmljKSwgcCwgbGVuKTsKK0BAIC0zNzksOSArMzgwLDExIEBAIHN0YXRpYyB2b2lkIHNtYzkxYzExMV93cml0ZWIodm9pZCAqb3BhcXUKKyAgICAgICAgICAgICAgICAgICAgIHNtYzkxYzExMV9yZWxlYXNlX3BhY2tldChzLCBzLT5yeF9maWZvWzBdKTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBzbWM5MWMxMTFfcG9wX3J4X2ZpZm8ocyk7CisrICAgICAgICAgICAgICAgIHFlbXVfZmx1c2hfcXVldWVkX3BhY2tldHMocWVtdV9nZXRfcXVldWUocy0+bmljKSk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIGNhc2UgNTogLyogUmVsZWFzZS4gICovCisgICAgICAgICAgICAgICAgIHNtYzkxYzExMV9yZWxlYXNlX3BhY2tldChzLCBzLT5wYWNrZXRfbnVtKTsKKysgICAgICAgICAgICAgICAgcWVtdV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhxZW11X2dldF9xdWV1ZShzLT5uaWMpKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgY2FzZSA2OiAvKiBBZGQgdG8gVFggRklGTy4gICovCisgICAgICAgICAgICAgICAgIHNtYzkxYzExMV9xdWV1ZV90eChzLCBzLT5wYWNrZXRfbnVtKTsKK0BAIC02NDIsNyArNjQyLDcgQEAgc3RhdGljIGludCBzbWM5MWMxMTFfY2FuX3JlY2VpdmUoTmV0Q2xpZQorIAorICAgICBpZiAoKHMtPnJjciAmIFJDUl9SWEVOKSA9PSAwIHx8IChzLT5yY3IgJiBSQ1JfU09GVF9SU1QpKQorICAgICAgICAgcmV0dXJuIDE7CistICAgIGlmIChzLT5hbGxvY2F0ZWQgPT0gKDEgPDwgTlVNX1BBQ0tFVFMpIC0gMSkKKysgICAgaWYgKChzLT5hbGxvY2F0ZWQgPT0gKDEgPDwgTlVNX1BBQ0tFVFMpIC0gMSkgfHwgKHMtPnJ4X2ZpZm9fbGVuID09IE5VTV9QQUNLRVRTKSkKKyAgICAgICAgIHJldHVybiAwOworICAgICByZXR1cm4gMTsKKyB9CitAQCAtNjcxLDYgKzY3MSw4IEBAIHN0YXRpYyBzc2l6ZV90IHNtYzkxYzExMV9yZWNlaXZlKE5ldENsaWUKKyAgICAgLyogVE9ETzogRmxhZyBvdmVycnVuIGFuZCByZWNlaXZlIGVycm9ycy4gICovCisgICAgIGlmIChwYWNrZXRzaXplID4gMjA0OCkKKyAgICAgICAgIHJldHVybiAtMTsKKysgICAgaWYgIChzLT5yeF9maWZvX2xlbiA9PSBOVU1fUEFDS0VUUykKKysgICAgICAgIHJldHVybiAtMTsgICAgCisgICAgIHBhY2tldG51bSA9IHNtYzkxYzExMV9hbGxvY2F0ZV9wYWNrZXQocyk7CisgICAgIGlmIChwYWNrZXRudW0gPT0gMHg4MCkKKyAgICAgICAgIHJldHVybiAtMTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4MS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDEyMjNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgxLnBhdGNoCkBAIC0wLDAgKzEsODUgQEAKK0Zyb206IFBldGVyIENyb3N0aHdhaXRlIDxjcm9zdGh3YWl0ZXBldGVyQGdtYWlsLmNvbT4KK1N1YmplY3Q6IFtSRlQgUEFUQ0ggdjEgMS8zXSBuZXQ6IHNtYzkxYzExMTogZ3VhcmQgZmx1c2hfcXVldWVkX3BhY2tldHMoKSBvbgorIGNhbl9yeCgpCitEYXRlOiBUaHUsIDEwIFNlcCAyMDE1IDIxOjIzOjQzIC0wNzAwCisKK0NoZWNrIHRoYXQgdGhlIGNvcmUgY2FuIG9uY2UgYWdhaW4gcmVjZWl2ZSBwYWNrZXRzIGJlZm9yZSBhc2tpbmcgdGhlCituZXQgbGF5ZXIgdG8gZG8gYSBmbHVzaC4gVGhpcyB3aWxsIG1ha2UgaXQgbW9yZSBjb252ZW5pZW50IHRvIGZsdXNoCitwYWNrZXRzIHdoZW4gYWRkaW5nIG5ldyBjb25kaXRpb25zIHRvIGNhbl9yZWNlaXZlLgorCitBZGQgbWlzc2luZyBpZiBicmFjZXMgd2hpbGUgbW92aW5nIHRoZSBjYW5fcmVjZWl2ZSgpIGNvcmUgY29kZS4KKworU2lnbmVkLW9mZi1ieTogUGV0ZXIgQ3Jvc3Rod2FpdGUgPGNyb3N0aHdhaXRlLnBldGVyQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworLS0tCisKKyBody9uZXQvc21jOTFjMTExLmMgfCAzMCArKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworSW5kZXg6IHFlbXUtMi40LjAvaHcvbmV0L3NtYzkxYzExMS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcWVtdS0yLjQuMC5vcmlnL2h3L25ldC9zbWM5MWMxMTEuYworKysrIHFlbXUtMi40LjAvaHcvbmV0L3NtYzkxYzExMS5jCitAQCAtMTI0LDYgKzEyNCwyNCBAQCBzdGF0aWMgdm9pZCBzbWM5MWMxMTFfdXBkYXRlKHNtYzkxYzExMV9zCisgICAgIHFlbXVfc2V0X2lycShzLT5pcnEsIGxldmVsKTsKKyB9CisgCisrc3RhdGljIGludCBzbWM5MWMxMTFfY2FuX3JlY2VpdmUoc21jOTFjMTExX3N0YXRlICpzKQorK3sKKysgICAgaWYgKChzLT5yY3IgJiBSQ1JfUlhFTikgPT0gMCB8fCAocy0+cmNyICYgUkNSX1NPRlRfUlNUKSkgeworKyAgICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysgICAgaWYgKHMtPmFsbG9jYXRlZCA9PSAoMSA8PCBOVU1fUEFDS0VUUykgLSAxKSB7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyAgICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGlubGluZSB2b2lkIHNtYzkxYzExMV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhzbWM5MWMxMTFfc3RhdGUgKnMpCisreworKyAgICBpZiAoc21jOTFjMTExX2Nhbl9yZWNlaXZlKHMpKSB7CisrICAgICAgICBxZW11X2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHFlbXVfZ2V0X3F1ZXVlKHMtPm5pYykpOworKyAgICB9CisrfQorKworIC8qIFRyeSB0byBhbGxvY2F0ZSBhIHBhY2tldC4gIFJldHVybnMgMHg4MCBvbiBmYWlsdXJlLiAgKi8KKyBzdGF0aWMgaW50IHNtYzkxYzExMV9hbGxvY2F0ZV9wYWNrZXQoc21jOTFjMTExX3N0YXRlICpzKQorIHsKK0BAIC0xODUsNyArMjAzLDcgQEAgc3RhdGljIHZvaWQgc21jOTFjMTExX3JlbGVhc2VfcGFja2V0KHNtYworICAgICBzLT5hbGxvY2F0ZWQgJj0gfigxIDw8IHBhY2tldCk7CisgICAgIGlmIChzLT50eF9hbGxvYyA9PSAweDgwKQorICAgICAgICAgc21jOTFjMTExX3R4X2FsbG9jKHMpOworLSAgICBxZW11X2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHFlbXVfZ2V0X3F1ZXVlKHMtPm5pYykpOworKyAgICBzbWM5MWMxMTFfZmx1c2hfcXVldWVkX3BhY2tldHMocyk7CisgfQorIAorIC8qIEZsdXNoIHRoZSBUWCBGSUZPLiAgKi8KK0BAIC02MzYsMTUgKzY1NCwxMSBAQCBzdGF0aWMgdWludDMyX3Qgc21jOTFjMTExX3JlYWRsKHZvaWQgKm9wCisgICAgIHJldHVybiB2YWw7CisgfQorIAorLXN0YXRpYyBpbnQgc21jOTFjMTExX2Nhbl9yZWNlaXZlKE5ldENsaWVudFN0YXRlICpuYykKKytzdGF0aWMgaW50IHNtYzkxYzExMV9jYW5fcmVjZWl2ZV9uYyhOZXRDbGllbnRTdGF0ZSAqbmMpCisgeworICAgICBzbWM5MWMxMTFfc3RhdGUgKnMgPSBxZW11X2dldF9uaWNfb3BhcXVlKG5jKTsKKyAKKy0gICAgaWYgKChzLT5yY3IgJiBSQ1JfUlhFTikgPT0gMCB8fCAocy0+cmNyICYgUkNSX1NPRlRfUlNUKSkKKy0gICAgICAgIHJldHVybiAxOworLSAgICBpZiAocy0+YWxsb2NhdGVkID09ICgxIDw8IE5VTV9QQUNLRVRTKSAtIDEpCistICAgICAgICByZXR1cm4gMDsKKy0gICAgcmV0dXJuIDE7CisrICAgIHJldHVybiBzbWM5MWMxMTFfY2FuX3JlY2VpdmUocyk7CisgfQorIAorIHN0YXRpYyBzc2l6ZV90IHNtYzkxYzExMV9yZWNlaXZlKE5ldENsaWVudFN0YXRlICpuYywgY29uc3QgdWludDhfdCAqYnVmLCBzaXplX3Qgc2l6ZSkKK0BAIC03MzksNyArNzUzLDcgQEAgc3RhdGljIGNvbnN0IE1lbW9yeVJlZ2lvbk9wcyBzbWM5MWMxMTFfbQorIHN0YXRpYyBOZXRDbGllbnRJbmZvIG5ldF9zbWM5MWMxMTFfaW5mbyA9IHsKKyAgICAgLnR5cGUgPSBORVRfQ0xJRU5UX09QVElPTlNfS0lORF9OSUMsCisgICAgIC5zaXplID0gc2l6ZW9mKE5JQ1N0YXRlKSwKKy0gICAgLmNhbl9yZWNlaXZlID0gc21jOTFjMTExX2Nhbl9yZWNlaXZlLAorKyAgICAuY2FuX3JlY2VpdmUgPSBzbWM5MWMxMTFfY2FuX3JlY2VpdmVfbmMsCisgICAgIC5yZWNlaXZlID0gc21jOTFjMTExX3JlY2VpdmUsCisgfTsKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4Mi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMThhZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgyLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb206IFBldGVyIENyb3N0aHdhaXRlIDxjcm9zdGh3YWl0ZXBldGVyQGdtYWlsLmNvbT4KK1gtR29vZ2xlLU9yaWdpbmFsLUZyb206IFBldGVyIENyb3N0aHdhaXRlIDxjcm9zdGh3YWl0ZS5wZXRlckBnbWFpbC5jb20+CitUbzogcWVtdS1kZXZlbEBub25nbnUub3JnCitDYzogcGV0ZXIubWF5ZGVsbEBsaW5hcm8ub3JnLCByaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnCitTdWJqZWN0OiBbUkZUIFBBVENIIHYxIDIvM10gbmV0OiBzbWM5MWMxMTE6IGdhdGUgY2FuX3JlY2VpdmUoKSBvbiByeCBGSUZPCisgaGF2aW5nIGEgc2xvdAorRGF0ZTogVGh1LCAxMCBTZXAgMjAxNSAyMToyMzo1NyAtMDcwMAorCitSZXR1cm4gZmFsc2UgZnJvbSBjYW5fcmVjZWl2ZSgpIHdoZW4gdGhlIEZJRk8gZG9lc24ndCBoYXZlIGEgZnJlZSBSWAorc2xvdC4gVGhpcyBmaXhlcyBhIGJ1ZyBpbiB0aGUgY3VycmVudCBjb2RlIHdoZXJlIHRoZSBhbGxvY2F0ZWQgYnVmZmVyCitpcyBmcmVlZCBiZWZvcmUgdGhlIGZpZm8gcG9wLCB0cmlnZ2VyaW5nIGEgcHJlbWF0dXJlIGZsdXNoIG9mIHF1ZXVlZCBSWAorcGFja2V0cy4gSXQgYWxzbyB3aWxsIGhhbmRsZSBhIGNvcm5lciBjYXNlLCB3aGVyZSB0aGUgZ3Vlc3QgbWFudWFsbHkKK2ZyZWVzIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIGJlZm9yZSBwb3BwaW5nIHRoZSByeCBGSUZPIChoZW5jZSBpdCBpcyBub3QKK2Vub3VnaCB0byBqdXN0IGRlbGF5IHRoZSBmbHVzaF9xdWV1ZWRfcGFja2V0cygpKS4KKworUmVwb3J0ZWQtYnk6IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgorU2lnbmVkLW9mZi1ieTogUGV0ZXIgQ3Jvc3Rod2FpdGUgPGNyb3N0aHdhaXRlLnBldGVyQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKy0tLQorCisgaHcvbmV0L3NtYzkxYzExMS5jIHwgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogcWVtdS0yLjQuMC9ody9uZXQvc21jOTFjMTExLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxZW11LTIuNC4wLm9yaWcvaHcvbmV0L3NtYzkxYzExMS5jCisrKysgcWVtdS0yLjQuMC9ody9uZXQvc21jOTFjMTExLmMKK0BAIC0xMjksNyArMTI5LDggQEAgc3RhdGljIGludCBzbWM5MWMxMTFfY2FuX3JlY2VpdmUoc21jOTFjMQorICAgICBpZiAoKHMtPnJjciAmIFJDUl9SWEVOKSA9PSAwIHx8IChzLT5yY3IgJiBSQ1JfU09GVF9SU1QpKSB7CisgICAgICAgICByZXR1cm4gMTsKKyAgICAgfQorLSAgICBpZiAocy0+YWxsb2NhdGVkID09ICgxIDw8IE5VTV9QQUNLRVRTKSAtIDEpIHsKKysgICAgaWYgKHMtPmFsbG9jYXRlZCA9PSAoMSA8PCBOVU1fUEFDS0VUUykgLSAxIHx8CisrICAgICAgICBzLT5yeF9maWZvX2xlbiA9PSBOVU1fUEFDS0VUUykgeworICAgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAgICAgcmV0dXJuIDE7CitAQCAtMTgyLDYgKzE4Myw3IEBAIHN0YXRpYyB2b2lkIHNtYzkxYzExMV9wb3BfcnhfZmlmbyhzbWM5MWMKKyAgICAgfSBlbHNlIHsKKyAgICAgICAgIHMtPmludF9sZXZlbCAmPSB+SU5UX1JDVjsKKyAgICAgfQorKyAgICBzbWM5MWMxMTFfZmx1c2hfcXVldWVkX3BhY2tldHMocyk7CisgICAgIHNtYzkxYzExMV91cGRhdGUocyk7CisgfQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllODY1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeDMucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbTogUGV0ZXIgQ3Jvc3Rod2FpdGUgPGNyb3N0aHdhaXRlcGV0ZXJAZ21haWwuY29tPgorVG86IHFlbXUtZGV2ZWxAbm9uZ251Lm9yZworQ2M6IHBldGVyLm1heWRlbGxAbGluYXJvLm9yZywgcmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZworU3ViamVjdDogW1JGVCBQQVRDSCB2MSAzLzNdIG5ldDogc21jOTFjMTExOiBmbHVzaCBwYWNrZXRzIG9uIFJDUiByZWdpc3RlcgorIGNoYW5nZXMKK0RhdGU6IFRodSwgMTAgU2VwIDIwMTUgMjE6MjQ6MTIgLTA3MDAKKworVGhlIFNPRlRfUlNUIG9yIFJYRU4gaW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgY2FuIGJlIHVzZWQgYXMgYSBjb25kaXRpb24KK3RvIHVuYmxvY2sgdGhlIG5ldCBsYXllciB2aWEgY2FuX3JlY2VpdmUoKS4gU28gY2hlY2sgZm9yIHBvc3NpYmxlCitmbHVzaGVzIG9uIFJDUiBjaGFuZ2VzLiBUaGlzIHdpbGwgZHJvcCBhbGwgcGVuZGluZyBwYWNrZXRzIG9uIHNvZnQKK3Jlc2V0IG9yIGRpc2FibGUgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uYWwgaW50ZW50IG9mIHRoZSBjYW5fcmVjZWl2ZSgpCitsb2dpYy4KKworU2lnbmVkLW9mZi1ieTogUGV0ZXIgQ3Jvc3Rod2FpdGUgPGNyb3N0aHdhaXRlLnBldGVyQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKy0tLQorCisgaHcvbmV0L3NtYzkxYzExMS5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK0luZGV4OiBxZW11LTIuNC4wL2h3L25ldC9zbWM5MWMxMTEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHFlbXUtMi40LjAub3JpZy9ody9uZXQvc21jOTFjMTExLmMKKysrKyBxZW11LTIuNC4wL2h3L25ldC9zbWM5MWMxMTEuYworQEAgLTMzMSw2ICszMzEsNyBAQCBzdGF0aWMgdm9pZCBzbWM5MWMxMTFfd3JpdGViKHZvaWQgKm9wYXF1CisgICAgICAgICAgICAgaWYgKHMtPnJjciAmIFJDUl9TT0ZUX1JTVCkgeworICAgICAgICAgICAgICAgICBzbWM5MWMxMTFfcmVzZXQoREVWSUNFKHMpKTsKKyAgICAgICAgICAgICB9CisrICAgICAgICAgICAgc21jOTFjMTExX2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHMpOworICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgIGNhc2UgMTA6IGNhc2UgMTE6IC8qIFJQQ1IgKi8KKyAgICAgICAgICAgICAvKiBJZ25vcmVkICovCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvd2Fjb20ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvd2Fjb20ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QwNmFhNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS93YWNvbS5wYXRjaApAQCAtMCwwICsxLDEzMCBAQAorVGhlIFVTQiB3YWNvbSBkZXZpY2UgaXMgbWlzc2luZyBhIEhJRCBkZXNjcmlwdG9yIHdoaWNoIGNhdXNlcyBpdAordG8gZmFpbCB0byBvcGVyYXRlIHdpdGggcmVjZW50IGtlcm5lbHMgKGUuZy4gMy4xNykuCisKK1RoaXMgcGF0Y2ggYWRkcyBhIEhJRCBkZXNyaXB0b3IgdG8gdGhlIGRldmljZSwgYmFzZWQgdXBvbiBvbmUgZnJvbSAKK3JlYWwgd2NvbSBkZXZpY2UuCisKK1NpZ25lZC1vZmYtYnk6IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorMjAxNC8xMS8yNworCitJbmRleDogcWVtdS0yLjEuMC9ody91c2IvZGV2LXdhY29tLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxZW11LTIuMS4wLm9yaWcvaHcvdXNiL2Rldi13YWNvbS5jCTIwMTQtMDgtMDEgMTU6MTI6MTcuMDAwMDAwMDAwICswMTAwCisrKysgcWVtdS0yLjEuMC9ody91c2IvZGV2LXdhY29tLmMJMjAxNC0xMC0xMiAxMjoxMzozMC41NDAzMDYwNDIgKzAxMDAKK0BAIC02OCw2ICs2OCw4OSBAQAorICAgICBbU1RSX1NFUklBTE5VTUJFUl0gICAgID0gIjEiLAorIH07CisgCisrc3RhdGljIGNvbnN0IHVpbnQ4X3QgcWVtdV90YWJsZXRfaGlkX3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisrICAgIDB4MDUsIDB4MDEsCQkvKiBVc2FnZSBQYWdlIChHZW5lcmljIERlc2t0b3ApICovCisrICAgIDB4MDksIDB4MDIsCQkvKiBVc2FnZSAoTW91c2UpICovCisrICAgIDB4YTEsIDB4MDEsCQkvKiBDb2xsZWN0aW9uIChBcHBsaWNhdGlvbikgKi8KKysgICAgMHg4NSwgMHgwMSwJCS8qICAgUmVwb3J0IElEICgxKSAqLyAKKysgICAgMHgwOSwgMHgwMSwJCS8qICAgVXNhZ2UgKFBvaW50ZXIpICovCisrICAgIDB4YTEsIDB4MDAsCQkvKiAgIENvbGxlY3Rpb24gKFBoeXNpY2FsKSAqLworKyAgICAweDA1LCAweDA5LAkJLyogICAgIFVzYWdlIFBhZ2UgKEJ1dHRvbikgKi8KKysgICAgMHgxOSwgMHgwMSwJCS8qICAgICBVc2FnZSBNaW5pbXVtICgxKSAqLworKyAgICAweDI5LCAweDA1LAkJLyogICAgIFVzYWdlIE1heGltdW0gKDUpICovCisrICAgIDB4MTUsIDB4MDAsCQkvKiAgICAgTG9naWNhbCBNaW5pbXVtICgwKSAqLworKyAgICAweDI1LCAweDAxLAkJLyogICAgIExvZ2ljYWwgTWF4aW11bSAoMSkgKi8KKysgICAgMHg5NSwgMHgwNSwJCS8qICAgICBSZXBvcnQgQ291bnQgKDUpICovCisrICAgIDB4NzUsIDB4MDEsCQkvKiAgICAgUmVwb3J0IFNpemUgKDEpICovCisrICAgIDB4ODEsIDB4MDIsCQkvKiAgICAgSW5wdXQgKERhdGEsIFZhcmlhYmxlLCBBYnNvbHV0ZSkgKi8KKysgICAgMHg5NSwgMHgwMSwJCS8qICAgICBSZXBvcnQgQ291bnQgKDEpICovCisrICAgIDB4NzUsIDB4MDMsCQkvKiAgICAgUmVwb3J0IFNpemUgKDMpICovCisrICAgIDB4ODEsIDB4MDEsCQkvKiAgICAgSW5wdXQgKENvbnN0YW50KSAqLworKyAgICAweDA1LCAweDAxLAkJLyogICAgIFVzYWdlIFBhZ2UgKEdlbmVyaWMgRGVza3RvcCkgKi8KKysgICAgMHgwOSwgMHgzMCwJCS8qICAgICBVc2FnZSAoWCkgKi8KKysgICAgMHgwOSwgMHgzMSwJCS8qICAgICBVc2FnZSAoWSkgKi8KKysgICAgMHgxNSwgMHg4MSwJCS8qICAgICBMb2dpY2FsIE1pbmltdW0gKC0xMjcpICovCisrICAgIDB4MjUsIDB4N2YsCQkvKiAgICAgTG9naWNhbCBNYXhpbXVtICgxMjcpICovCisrICAgIDB4NzUsIDB4MDgsCQkvKiAgICAgUmVwb3J0IFNpemUgKDgpICovCisrICAgIDB4OTUsIDB4MDIsCQkvKiAgICAgUmVwb3J0IENvdW50ICgyKSAqLworKyAgICAweDgxLCAweDA2LAkJLyogICAgIElucHV0IChEYXRhLCBWYXJpYWJsZSwgUmVsYXRpdmUpICovCisrICAgIDB4YzAsCQkvKiAgIEVuZCBDb2xsZWN0aW9uICovCisrICAgIDB4YzAsCQkvKiBFbmQgQ29sbGVjdGlvbiAqLworKyAgICAweDA1LCAweDBkLAkJLyogVXNhZ2UgUGFnZSAoRGlnaXRpemVyKSAqLworKyAgICAweDA5LCAweDAxLAkJLyogVXNhZ2UgKERpZ2l0aXplcikgKi8KKysgICAgMHhhMSwgMHgwMSwJCS8qIENvbGxlY3Rpb24gKEFwcGxpY2F0aW9uKSAqLworKyAgICAweDg1LCAweDAyLAkJLyogICBSZXBvcnQgSUQgKDIpICovIAorKyAgICAweGExLCAweDAwLAkJLyogICBDb2xsZWN0aW9uIChQaHlzaWNhbCkgKi8KKysgICAgMHgwNiwgMHgwMCwgMHhmZiwgICAvKiAgIFVzYWdlIFBhZ2UgKFZlbmRvciAweGZmMDApICovCisrICAgIDB4MDksIDB4MDEsIAkvKiAgIFVzYWdlIChEaWdpdGl6ZXIpICovCisrICAgIDB4MTUsIDB4MDAsIAkvKiAgICAgTG9naWNhbCBNaW5pbXVtICgwKSAqLworKyAgICAweDI2LCAweGZmLCAweDAwLAkvKiAgICAgTG9naWNhbCBNYXhpbXVtICgyNTUpICovCisrICAgIDB4NzUsIDB4MDgsCQkvKiAgICAgUmVwb3J0IFNpemUgKDgpICovCisrICAgIDB4OTUsIDB4MDgsCQkvKiAgICAgUmVwb3J0IENvdW50ICg4KSAqLworKyAgICAweDgxLCAweDAyLAkJLyogICAgIElucHV0IChEYXRhLCBWYXJpYWJsZSwgQWJzb2x1dGUpICovCisrICAgIDB4YzAsIAkJLyogICBFbmQgQ29sbGVjdGlvbiAqLworKyAgICAweDA5LCAweDAxLAkJLyogICBVc2FnZSAoRGlnaXRpemVyKSAqLworKyAgICAweDg1LCAweDAyLCAJLyogICBSZXBvcnQgSUQgKDIpICovIAorKyAgICAweDk1LCAweDAxLAkJLyogICBSZXBvcnQgQ291bnQgKDEpICovCisrICAgIDB4YjEsIDB4MDIsCQkvKiAgIEZFQVRVUkUgKDIpICovCisrICAgIDB4YzAsCQkvKiBFbmQgQ29sbGVjdGlvbiAqLworKyAgICAweDA2LCAweDAwLCAweGZmLAkvKiBVc2FnZSBQYWdlIChWZW5kb3IgMHhmZjAwKSAqLworKyAgICAweDA5LCAweDAxLAkJLyogVXNhZ2UgKERpZ2l0aXplcikgKi8KKysgICAgMHhhMSwgMHgwMSwJCS8qIENvbGxlY3Rpb24gKEFwcGxpY2F0aW9uKSAqLworKyAgICAweDg1LCAweDAyLCAgIAkvKiAgIFJlcG9ydCBJRCAoMikgKi8gCisrICAgIDB4MDUsIDB4MGQsCQkvKiAgIFVzYWdlIFBhZ2UgKERpZ2l0aXplcikgICovCisrICAgIDB4MDksIDB4MjIsIAkvKiAgIFVzYWdlIChGaW5nZXIpICovCisrICAgIDB4YTEsIDB4MDAsICAJLyogICBDb2xsZWN0aW9uIChQaHlzaWNhbCkgKi8KKysgICAgMHgwNiwgMHgwMCwgMHhmZiwJLyogICBVc2FnZSBQYWdlIChWZW5kb3IgMHhmZjAwKSAqLworKyAgICAweDA5LCAweDAxLAkJLyogICAgIFVzYWdlIChEaWdpdGl6ZXIpICovCisrICAgIDB4MTUsIDB4MDAsIAkvKiAgICAgTG9naWNhbCBNaW5pbXVtICgwKSAqLworKyAgICAweDI2LCAweGZmLCAweDAwLCAgCS8qICAgICBMb2dpY2FsIE1heGltdW0gKi8KKysgICAgMHg3NSwgMHgwOCwJCS8qICAgICBSZXBvcnQgU2l6ZSAoOCkgKi8KKysgICAgMHg5NSwgMHgwMiwJCS8qICAgICBSZXBvcnQgQ291bnQgKDIpICovCisrICAgIDB4ODEsIDB4MDIsIAkvKiAgICAgSW5wdXQgKERhdGEsIFZhcmlhYmxlLCBBYnNvbHV0ZSkgKi8KKysgICAgMHgwNSwgMHgwMSwJCS8qICAgICBVc2FnZSBQYWdlIChHZW5lcmljIERlc2t0b3ApICovCisrICAgIDB4MDksIDB4MzAsCQkvKiAgICAgVXNhZ2UgKFgpICovCisrICAgIDB4MzUsIDB4MDAsIAkvKiAgICAgUGh5c2ljYWwgTWluaW11bSAqLworKyAgICAweDQ2LCAweGUwLCAweDJlLAkvKiAgICAgUGh5c2ljYWwgTWF4aW11bSAqLworKyAgICAweDI2LCAweGUwLCAweDAxLCAgIC8qICAgICBMb2dpY2FsIE1heGltdW0gKi8KKysgICAgMHg3NSwgMHgxMCwJCS8qICAgICBSZXBvcnQgU2l6ZSAoMTYpICovCisrICAgIDB4OTUsIDB4MDEsCQkvKiAgICAgUmVwb3J0IENvdW50ICgxKSAqLworKyAgICAweDgxLCAweDAyLAkJLyogICAgIElucHV0IChEYXRhLCBWYXJpYWJsZSwgQWJzb2x1dGUpICovCisrICAgIDB4MDksIDB4MzEsCQkvKiAgICAgVXNhZ2UgKFkpICovCisrICAgIDB4NDYsIDB4NDAsIDB4MWYsIAkvKiAgICAgUGh5c2ljYWwgTWF4aW11bSAqLworKyAgICAweDI2LCAweDQwLCAweDAxLCAJLyogICAgIExvZ2ljYWwgTWF4aW11bSAqLworKyAgICAweDgxLCAweDAyLCAJLyogICAgIElucHV0IChEYXRhLCBWYXJpYWJsZSwgQWJzb2x1dGUpICovCisrICAgIDB4MDYsIDB4MDAsIDB4ZmYsCS8qICAgICBVc2FnZSBQYWdlIChWZW5kb3IgMHhmZjAwKSAqLworKyAgICAweDA5LCAweDAxLCAJLyogICAgIFVzYWdlIChEaWdpdGl6ZXIpICovCisrICAgIDB4MjYsIDB4ZmYsIDB4MDAsICAJLyogICAgIExvZ2ljYWwgTWF4aW11bSAqLworKyAgICAweDc1LCAweDA4LAkJLyogICAgIFJlcG9ydCBTaXplICg4KSAqLworKyAgICAweDk1LCAweDBkLAkJLyogICAgIFJlcG9ydCBDb3VudCAoMTMpICovCisrICAgIDB4ODEsIDB4MDIsCQkvKiAgICAgSW5wdXQgKERhdGEsIFZhcmlhYmxlLCBBYnNvbHV0ZSkgKi8KKysgICAgMHhjMCwJCS8qICAgRW5kIENvbGxlY3Rpb24gKi8gCisrICAgIDB4YzAsCQkvKiBFbmQgQ29sbGVjdGlvbiAqLworK307CisrCisrCisgc3RhdGljIGNvbnN0IFVTQkRlc2NJZmFjZSBkZXNjX2lmYWNlX3dhY29tID0geworICAgICAuYkludGVyZmFjZU51bWJlciAgICAgICAgICAgICAgPSAwLAorICAgICAuYk51bUVuZHBvaW50cyAgICAgICAgICAgICAgICAgPSAxLAorQEAgLTg1LDcgKzE2OCw3IEBACisgICAgICAgICAgICAgICAgIDB4MDAsICAgICAgICAgIC8qICB1OCAgY291bnRyeV9jb2RlICovCisgICAgICAgICAgICAgICAgIDB4MDEsICAgICAgICAgIC8qICB1OCAgbnVtX2Rlc2NyaXB0b3JzICovCisgICAgICAgICAgICAgICAgIDB4MjIsICAgICAgICAgIC8qICB1OCAgdHlwZTogUmVwb3J0ICovCistICAgICAgICAgICAgICAgIDB4NmUsIDAsICAgICAgIC8qICB1MTYgbGVuICovCisrICAgICAgICAgICAgICAgIHNpemVvZihxZW11X3RhYmxldF9oaWRfcmVwb3J0X2Rlc2NyaXB0b3IpLCAwLCAvKiAgdTE2IGxlbiAqLworICAgICAgICAgICAgIH0sCisgICAgICAgICB9LAorICAgICB9LAorQEAgLTI2NSw2ICszNTAsMTUgQEAKKyAgICAgfQorIAorICAgICBzd2l0Y2ggKHJlcXVlc3QpIHsKKysgICAgY2FzZSBJbnRlcmZhY2VSZXF1ZXN0IHwgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUjoKKysgICAgICAgIHN3aXRjaCAodmFsdWUgPj4gOCkgeworKyAgICAgICAgY2FzZSAweDIyOgorKyAgICAgICAgICAgICAgICBtZW1jcHkoZGF0YSwgcWVtdV90YWJsZXRfaGlkX3JlcG9ydF9kZXNjcmlwdG9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHFlbXVfdGFibGV0X2hpZF9yZXBvcnRfZGVzY3JpcHRvcikpOworKyAgICAgICAgICAgICAgICBwLT5hY3R1YWxfbGVuZ3RoID0gc2l6ZW9mKHFlbXVfdGFibGV0X2hpZF9yZXBvcnRfZGVzY3JpcHRvcik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSBXQUNPTV9TRVRfUkVQT1JUOgorICAgICAgICAgaWYgKHMtPm1vdXNlX2dyYWJiZWQpIHsKKyAgICAgICAgICAgICBxZW11X3JlbW92ZV9tb3VzZV9ldmVudF9oYW5kbGVyKHMtPmVoX2VudHJ5KTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdV8yLjQuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdV8yLjQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWIxNzg4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11XzIuNC4wLmJiCkBAIC0wLDAgKzEsMjIgQEAKK3JlcXVpcmUgcWVtdS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDQxYzI4ZDJjZjg2ZTE1YTM3ZmE0N2UxNWE3MmZiYWMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7ZW5kbGluZT0yNDttZDU9YzA0ZGVmN2FlMzg4NTBlN2QzZWY1NDg1ODgxNTk5MTMiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9jb25maWd1cmUtZml4LURhcndpbi10YXJnZXQtZGV0ZWN0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9xZW11LWVubGFyZ2UtZW52LWVudHJ5LXNpemUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL1FlbXUtQXJtLXZlcnNhdGlsZXBiLUFkZC1tZW1vcnktc2l6ZS1jaGVja2luZy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc21jOTFjMTExX2ZpeDEucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3NtYzkxYzExMV9maXgyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zbWM5MWMxMTFfZml4My5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklfcHJlcGVuZCA9ICJodHRwOi8vd2lraS5xZW11LXByb2plY3Qub3JnL2Rvd25sb2FkLyR7QlB9LnRhci5iejIiCitTUkNfVVJJW21kNXN1bV0gPSAiMTg2ZWU4MTk0MTQwYTQ4NGE0NTVmOGUzYzc0NTg5ZjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzJiMGI5OTFiYmNjNTQwNjYzYTAxOWUxZThjNGY3MTQwNTNiNjkxZGRhMzJjOWI5ZWU4MGIyNWYzNjdlNjYyMCIKKworQ09NUEFUSUJMRV9IT1NUX2NsYXNzLXRhcmdldF9taXBzNjQgPSAibnVsbCIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgIyBQcmV2ZW50IFFBIHdhcm5pbmdzIGFib3V0IGluc3RhbGxlZCAke2xvY2Fsc3RhdGVkaXJ9L3J1bgorICAgIGlmIFsgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuIF07IHRoZW4gcm1kaXIgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuOyBmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11d3JhcHBlci1jcm9zc18xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXV3cmFwcGVyLWNyb3NzXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjRjNmQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11d3JhcHBlci1jcm9zc18xLjAuYmIKQEAgLTAsMCArMSw1MCBAQAorU1VNTUFSWSA9ICJRRU1VIHdyYXBwZXIgc2NyaXB0IgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IHFlbXUKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8KKworCWVjaG8gIiMhL2Jpbi9zaCIgPiAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9xZW11d3JhcHBlcgorCXFlbXVfYmluYXJ5PSR7QHFlbXVfdGFyZ2V0X2JpbmFyeShkKX0KKwlxZW11X29wdGlvbnM9JyR7UUVNVV9PUFRJT05TfScKKwllY2hvICIkcWVtdV9iaW5hcnkgJHFlbXVfb3B0aW9ucyBcIlwkQFwiIiA+PiAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9xZW11d3JhcHBlcgorCWZhbGxiYWNrX3FlbXVfYmluPQorCWNhc2UgJHFlbXVfYmluYXJ5IGluCisJCSJxZW11LWkzODYiKQorCQkJZmFsbGJhY2tfcWVtdV9iaW49cWVtdS14ODZfNjQKKwkJCTs7CisJCSJxZW11LXg4Nl82NCIpCisJCQlmYWxsYmFja19xZW11X2Jpbj1xZW11LWkzODYKKwkJCTs7CisJCSopCisJCQk7OworCWVzYWMKKworCWlmIFsgLW4gIiRmYWxsYmFja19xZW11X2JpbiIgXTsgdGhlbgorCisJCWNhdCA+PiAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9xZW11d3JhcHBlciA8PCBFT0YKK3JjPVwkPworaWYgWyBcJHJjID0gMjU1IF07IHRoZW4KKwkkZmFsbGJhY2tfcWVtdV9iaW4gIlwkQCIKKwlyYz1cJD8KK2ZpCitleGl0IFwkcmMKK0VPRgorCisJZmkKKworCWNobW9kICt4ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L3FlbXV3cmFwcGVyCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAicWVtdXdyYXBwZXJfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitxZW11d3JhcHBlcl9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30KK30KKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC1uYXRpdmUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNGIwYTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC1uYXRpdmUuaW5jCkBAIC0wLDAgKzEsMTggQEAKK1JERVBFTkRTXyR7UE59ID0gImRpZmZzdGF0LW5hdGl2ZSBwYXRjaC1uYXRpdmUgYnppcDItbmF0aXZlIHV0aWwtbGludXgtbmF0aXZlIgorCitJTkhJQklUX0FVVE9UT09MU19ERVBTID0gIjEiCisKK2luaGVyaXQgbmF0aXZlCisKK1BBVENIVE9PTCA9ICJwYXRjaCIKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtbmxzIgorCitkb19jb25maWd1cmUgKCkgeworCW9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCSMgRHVtbXkgcXVpbHRyYyBmaWxlIGZvciBwYXRjaC5iYmNsYXNzCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS8KKwl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9xdWlsdHJjCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC1uYXRpdmVfMC42NC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjY0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYzdkY2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC1uYXRpdmVfMC42NC5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcXVpbHQuaW5jCityZXF1aXJlIHF1aWx0LW5hdGl2ZS5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzdiMzZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQuaW5jCkBAIC0wLDAgKzEsNjIgQEAKK1NVTU1BUlkgPSAiVG9vbCBmb3Igd29ya2luZyB3aXRoIHNlcmllcyBvZiBwYXRjaGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvcHJvamVjdHMvcXVpbHQvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworU1JDX1VSSSA9ICIke1NBVkFOTkFIX0dOVV9NSVJST1J9L3F1aWx0L3F1aWx0LSR7UFZ9LnRhci5neiBcCisgICAgICAgIGZpbGU6Ly9pbnN0YWxsLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgIGZpbGU6Ly9NYWtlZmlsZSBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYzAzMTBkYjU4NjhhMDg3M2Q2MDJkNDMzMmE3NmQ0MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNGJmZDMyODIyMTRhMjg4ZThkM2U5MjFhZTRkNTJlNzNlMjRjNGZlYWQ3MmI1NDQ2NzUyYWRlZTk5YTdhZmZkIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcHRlc3QKKworRVhUUkFfT0VDT05GX2RhcndpbiArPSAiLS13aXRob3V0LWRhdGUgXAorICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRob3V0LWdldG9wdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAiCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK1BBQ0tBR0VTICs9ICJndWFyZHMgZ3VhcmRzLWRvYyIKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0gJHtkYXRhZGlyfS9xdWlsdCBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vcXVpbHQgJHtsaWJkaXJ9L3F1aWx0IgorRklMRVNfZ3VhcmRzID0gIiR7YmluZGlyfS9ndWFyZHMiCitGSUxFU18ke1BOfS1kb2MgPSAiJHttYW5kaXJ9L21hbjEvcXVpbHQuMSAke2RvY2Rpcn0vJHtCUE59IgorRklMRVNfZ3VhcmRzLWRvYyA9ICIke21hbmRpcn0vbWFuMS9ndWFyZHMuMSIKKworUkRFUEVORFNfJHtQTn0gPSAiYmFzaCIKKworRVhUUkFfT0VfTUFLRV9BUkdTX2RhcndpbiA/PSAiIgorRVhUUkFfT0VfTUFLRV9BUkdTID89ICJCVUlMRF9ST09UPSR7RH0iCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX0JBU0g9L2Jpbi9iYXNoIgorCisjIHF1aWx0IGlnbm9yZXMgREVTVERJUgorZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAke0VYVFJBX09FX01BS0VfQVJHU30gaW5zdGFsbAorCSMgY2xlYW51cCB1bnBhY2thZ2VkIGZpbGVzCisJcm0gLXJmICR7RH0vJHtkYXRhZGlyfS9lbWFjcworfQorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgYmluL3BhdGNoLXdyYXBwZXIgdGVzdC8uZGVwZW5kCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdGFyIC1jZiAtIGJpbi8gLS1leGNsdWRlIFwqLmluIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCXRhciAtY2YgLSBjb21wYXQvIC0tZXhjbHVkZSBcKi5pbiB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKKwl0YXIgLWNmIC0gcXVpbHQvIC0tZXhjbHVkZSBcKi5pbiB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKKwl0YXIgLWNmIC0gdGVzdC8gLS1leGNsdWRlIG1haWwudGVzdCAtLWV4Y2x1ZGUgZGVsZXRlLnRlc3QgfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCisJY3AgJHtXT1JLRElSfS9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfQorfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCA9ICJtYWtlIGZpbGUgc2VkIGdhd2sgZGlmZnV0aWxzIGZpbmR1dGlscyBlZCBwZXJsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcmwtbW9kdWxlLWZpbGVoYW5kbGUgcGVybC1tb2R1bGUtZ2V0b3B0LXN0ZCBcCisgICAgICAgICAgICAgICAgICAgICAgICBwZXJsLW1vZHVsZS1wb3NpeCBwZXJsLW1vZHVsZS1maWxlLXRlbXAgXAorICAgICAgICAgICAgICAgICAgICAgICAgcGVybC1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIHBlcmwtbW9kdWxlLW92ZXJsb2FkaW5nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ggdXRpbC1saW51eC1nZXRvcHQgXAorICAgICAgICAgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9NYWtlZmlsZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiM2FjOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9NYWtlZmlsZQpAQCAtMCwwICsxLDEzIEBACitQQVRIIDo9ICAgICAgICAgJChDVVJESVIpL2JpbjokKENVUkRJUikvY29tcGF0OiQoUEFUSCkKK1FVSUxUX0RJUiA6PSAgICAkKENVUkRJUikvcXVpbHQKK1FVSUxUUkMgOj0gICAgICAkKENVUkRJUikvdGVzdC90ZXN0LnF1aWx0cmMKK2V4cG9ydCBRVUlMVF9ESVIgUVVJTFRSQworQ0hFQ0tfRU5WIDo9IFA9cGF0Y2hlcy87IF9QPS4uL3BhdGNoZXMvOyBleHBvcnQgUCBfUAorLWluY2x1ZGUgdGVzdC8uZGVwZW5kCisKK2NoZWNrLSUgOiB0ZXN0LyUudGVzdAorCUBMQU5HPUM7IExDX0FMTD1DOyBcCisJZXhwb3J0IExBTkcgTENfQUxMOyBcCisJJChDSEVDS19FTlYpOyBcCisJY2QgJCg8RCk7IFwKKwkuL3J1biAtcSAkKDxGKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvYWNsb2NhbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L2FjbG9jYWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmNDQyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L2FjbG9jYWwucGF0Y2gKQEAgLTAsMCArMSwxMjggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBZGQgdGhlIGFjbG9jYWwubTQgYXMgYWNpbmNsdWRlLm00CisKK0luZGV4OiBxdWlsdC0wLjQ3L2FjaW5jbHVkZS5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIHF1aWx0LTAuNDcvYWNpbmNsdWRlLm00CTIwMDYtMTAtMTAgMTc6MDU6NTYuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDExOSBAQAorK2RubCBBbGxvdyBjb25maWd1cmUgdG8gc3BlY2lmeSBhIHNwZWNpZmljIGJpbmFyeQorK2RubCAxOiBFbnZpcm9ubWVudCB2YXJpYWJsZQorK2RubCAyOiBiaW5hcnkgbmFtZQorK2RubCAzOiBvcHRpb25hbCBsaXN0IG9mIGFsdGVybmF0aXZlIGJpbmFyeSBuYW1lcworK2RubCA0OiBvcHRpb25hbCBsaXN0IG9mIGFkZGl0aW9uYWwgc2VhcmNoIGRpcmVjdG9yaWVzCisrQUNfREVGVU4oW1FVSUxUX0NPTVBBVF9QUk9HX1BBVEhdLFsKKysgIG00X2RlZmluZShbaW50ZXJuYWxfJDJfY21kXSxbZXN5c2NtZChscyBjb21wYXQvJDIuaW4gMj4vZGV2L251bGwpXSkKKysKKysgIEFDX0FSR19XSVRIKCQyLCBBQ19IRUxQX1NUUklORygKKysgICAgWy0td2l0aC0kMl0sIFtuYW1lIG9mIHRoZSAkMiBleGVjdXRhYmxlIHRvIHVzZV0KKysgICAgICAgICAgICAgICAgIG00X2lmKGludGVybmFsXyQyX2NtZCxbXSxbXSxbICh1c2UgLS13aXRob3V0LSQyCisrICAgICAgICAgICAgICAgICAgICAgICAgICB0byB1c2UgYW4gaW50ZXJuYWwgbWVjaGFuaXNtKV0pKSwKKysgIFsKKysgICAgaWYgdGVzdCB4IiR3aXRodmFsIiA9IHhub25lOyB0aGVuCisrICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIGNvbmZpZ3VyZSBhcmd1bWVudC4gIHVzZSAtLXdpdGhvdXQtJDJdKQorKyAgICBmaQorKyAgICBpZiB0ZXN0IHgiJHdpdGh2YWwiICE9IHhubzsgdGhlbgorKyAgICAgIEFDX01TR19DSEVDS0lORyhmb3IgJDIpCisrICAgICAgJDE9IiR3aXRodmFsIgorKyAgICAgIGlmIHRlc3QgLWUgIiQkMSI7IHRoZW4KKysJaWYgdGVzdCAhIC1mICIkJDEiIC1hICEgLWggIiQkMSIgfHwgdGVzdCAhIC14ICIkJDEiOyB0aGVuCisrCSAgQUNfTVNHX0VSUk9SKFskJDEgaXMgbm90IGFuIGV4ZWN1dGFibGUgZmlsZV0pCisrCWZpCisrICAgICAgZmkKKysgICAgICBBQ19NU0dfUkVTVUxUKFskJDFdKQorKyAgICAgIGlmIHRlc3QgISAtZSAiJCQxIjsgdGhlbgorKyAgICAgICAgQUNfTVNHX1dBUk4oWyQkMSBkb2VzIG5vdCBleGlzdF0pCisrICAgICAgZmkKKysgICAgICBDT01QQVRfU1lNTElOS1M9IiRDT01QQVRfU1lNTElOS1MgJDIiCisrICAgIGZpCisrICBdLFsKKysgICAgbTRfaWYoWyQzXSxbXSxbCisrICAgICAgQUNfUEFUSF9QUk9HKCQxLCQyLCwkUEFUSDokNCkKKysgICAgXSxbCisrICAgICAgQUNfUEFUSF9QUk9HUygkMSwkMywsJFBBVEg6JDQpCisrICAgICAgaWYgdGVzdCAtbiAiJCQxIiAtYSAiYGV4cHIgIiQkMSIgOiAnLiovXChbW14vXV0qXCkkJ2AiICE9ICIkMiI7IHRoZW4KKysJQ09NUEFUX1NZTUxJTktTPSIkQ09NUEFUX1NZTUxJTktTICQyIgorKyAgICAgIGZpCisrICAgIF0pCisrICAgIG00X2lmKFskNF0sW10sW10sWworKyAgICAgIGlmIHRlc3QgLW4gIiQkMSI7IHRoZW4KKysJYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorKyAgICAgICAgZm9yIGRpciBpbiAiJDQiOyBkbworKyAgICAgICAgICBpZiB0ZXN0ICJgZGlybmFtZSAkJDFgIiA9ICIkZGlyIjsgdGhlbgorKyAgICAgICAgICAgIENPTVBBVF9TWU1MSU5LUz0iJENPTVBBVF9TWU1MSU5LUyAkMiIKKysJICAgIGJyZWFrCisrCSAgZmkKKysgICAgICAgIGRvbmUKKysJSUZTPSIkYXNfc2F2ZV9JRlMiCisrICAgICAgZmkKKysgICAgXSkKKysgIF0pCisrICBpZiB0ZXN0IC16ICIkJDEiOyB0aGVuCisrICAgIG00X2lmKGludGVybmFsXyQyX2NtZCxbXSxbCisrICAgICAgQUNfTVNHX0VSUk9SKFtQbGVhc2Ugc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgJDIgd2l0aCB0aGUgb3B0aW9uICctLXdpdGgtJDInXSkKKysgICAgXSxbCisrICAgICAgQUNfTVNHX1dBUk4oW1VzaW5nIGludGVybmFsICQyIG1lY2hhbmlzbS4gIFVzZSBvcHRpb24gJy0td2l0aC0kMicgdG8gb3ZlcnJpZGVdKQorKyAgICAgIENPTVBBVF9QUk9HUkFNUz0iJENPTVBBVF9QUk9HUkFNUyAkMiIKKysgICAgICAkMT0kMgorKyAgICAgIElOVEVSTkFMXyQxPTEKKysgICAgXSkKKysgIGZpCisrICBBQ19TVUJTVCgkMSkKKytdKQorKworK2RubCBBbGxvdyBjb25maWd1cmUgdG8gc3BlY2lmeSBhIHNwZWNpZmljIGJpbmFyeQorK2RubCBUaGlzIHZhcmlhbnQgaXMgZm9yIG9wdGlvbmFsIGJpbmFyaWVzLgorK2RubCAxOiBFbnZpcm9ubWVudCB2YXJpYWJsZQorK2RubCAyOiBiaW5hcnkgbmFtZQorK2RubCAzOiBvcHRpb25hbCBsaXN0IG9mIGFsdGVybmF0aXZlIGJpbmFyeSBuYW1lcworK2RubCA0OiBvcHRpb25hbCBsaXN0IG9mIGFkZGl0aW9uYWwgc2VhcmNoIGRpcmVjdG9yaWVzCisrQUNfREVGVU4oW1FVSUxUX0NPTVBBVF9QUk9HX1BBVEhfT1BUXSxbCisrICBBQ19BUkdfV0lUSCgkMiwgQUNfSEVMUF9TVFJJTkcoCisrICAgIFstLXdpdGgtJDJdLCBbbmFtZSBvZiB0aGUgJDIgZXhlY3V0YWJsZSB0byB1c2VdKSwKKysgIFsKKysgICAgaWYgdGVzdCB4IiR3aXRodmFsIiAhPSB4bm87IHRoZW4KKysgICAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yICQyKQorKyAgICAgICQxPSIkd2l0aHZhbCIKKysgICAgICBpZiB0ZXN0IC1lICIkJDEiOyB0aGVuCisrCWlmIHRlc3QgISAtZiAiJCQxIiAtYSAhIC1oICIkJDEiIHx8IHRlc3QgISAteCAiJCQxIjsgdGhlbgorKwkgIEFDX01TR19FUlJPUihbJCQxIGlzIG5vdCBhbiBleGVjdXRhYmxlIGZpbGVdKQorKwlmaQorKyAgICAgIGZpCisrICAgICAgQUNfTVNHX1JFU1VMVChbJCQxXSkKKysgICAgICBpZiB0ZXN0ICEgLWUgIiQkMSI7IHRoZW4KKysgICAgICAgIEFDX01TR19XQVJOKFskJDEgZG9lcyBub3QgZXhpc3RdKQorKyAgICAgIGZpCisrICAgICAgQ09NUEFUX1NZTUxJTktTPSIkQ09NUEFUX1NZTUxJTktTICQyIgorKyAgICBmaQorKyAgXSxbCisrICAgIG00X2lmKFskM10sW10sWworKyAgICAgIEFDX1BBVEhfUFJPRygkMSwkMiwsJFBBVEg6JDQpCisrICAgIF0sWworKyAgICAgIEFDX1BBVEhfUFJPR1MoJDEsJDMsLCRQQVRIOiQ0KQorKyAgICAgIGlmIHRlc3QgLW4gIiQkMSIgLWEgImBleHByICIkJDEiIDogJy4qL1woW1teL11dKlwpJCdgIiAhPSAiJDIiOyB0aGVuCisrCUNPTVBBVF9TWU1MSU5LUz0iJENPTVBBVF9TWU1MSU5LUyAkMiIKKysgICAgICBmaQorKyAgICBdKQorKyAgICBtNF9pZihbJDRdLFtdLFtdLFsKKysgICAgICBpZiB0ZXN0IC1uICIkJDEiOyB0aGVuCisrCWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKysgICAgICAgIGZvciBkaXIgaW4gIiQ0IjsgZG8KKysgICAgICAgICAgaWYgdGVzdCAiYGRpcm5hbWUgJCQxYCIgPSAiJGRpciI7IHRoZW4KKysgICAgICAgICAgICBDT01QQVRfU1lNTElOS1M9IiRDT01QQVRfU1lNTElOS1MgJDIiCisrCSAgICBicmVhaworKwkgIGZpCisrICAgICAgICBkb25lCisrCUlGUz0iJGFzX3NhdmVfSUZTIgorKyAgICAgIGZpCisrICAgIF0pCisrICAgIGlmIHRlc3QgLXogIiQkMSI7IHRoZW4KKysgICAgICBBQ19NU0dfV0FSTihbJDIgbm90IGZvdW5kLCBzb21lIG9wdGlvbmFsIGZ1bmN0aW9uYWxpdGllcyB3aWxsIGJlIG1pc3NpbmddKQorKyAgICBmaQorKyAgXSkKKysgIGlmIHRlc3QgLXogIiQkMSI7IHRoZW4KKysgICAgJDE9JDIKKysgIGZpCisrICBBQ19TVUJTVCgkMSkKKytdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvZ251X3BhdGNoX3Rlc3RfZml4X3RhcmdldC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L2dudV9wYXRjaF90ZXN0X2ZpeF90YXJnZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcyMTU1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L2dudV9wYXRjaF90ZXN0X2ZpeF90YXJnZXQucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3RoZSB0ZXN0IHNob3VsZCBiZSBza2lwcGVkIGZvciBjcm9zcyBjb21waWxpbmcuCisKK1NpZ25lZC1vZmYtYnk6IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAwMjZhMzZjLi44YWY1OTFiIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yNDUsNiArMjQ1LDcgQEAgZmkKKyBRVUlMVF9DT01QQVRfUFJPR19QQVRIKERJRkYsIGRpZmYpCisgUVVJTFRfQ09NUEFUX1BST0dfUEFUSChQQVRDSCwgcGF0Y2gpCisgCisraWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIjsgdGhlbgorICMgU3VuIGRpZmYgYW5kIG90aGVycyB3aWxsIG5vdCB3b3JrIGJlY2F1c2UgR05VIHBhdGNoIG9wdGlvbnMgYXJlIHVzZWQuCisgQUNfTVNHX0NIRUNLSU5HKFt0aGUgdmVyc2lvbiBvZiAkRElGRl0pCisgaWYgJERJRkYgLS12ZXJzaW9uIDI+L2Rldi9udWxsIHwgZ3JlcCBHTlUgPi9kZXYvbnVsbDsgdGhlbgorQEAgLTI5Myw2ICsyOTQsNyBAQCBjdXJyZW50IHZlcnNpb24gb2YgcGF0Y2ggZnJvbSBmdHAuZ251Lm9yZywgb3IgaWYgeW91IGFscmVhZHkgaGF2ZSBHTlUgcGF0Y2gKKyB0aGVuIHlvdSBjYW4gc3VwcGx5IGl0cyBwYXRoIHdpdGggdGhlICctLXdpdGgtcGF0Y2g9JyBvcHRpb24uCisgXSkKKyBmaQorK2ZpCisgCisgUVVJTFRfQ09NUEFUX1BST0dfUEFUSChGSU5ELCBmaW5kKQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvaW5zdGFsbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L2luc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhN2FmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L2luc3RhbGwucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBxdWlsdC0wLjQ3L01ha2VmaWxlLmluCTIwMDgtMTItMzEgMTk6MDk6MTMuMDAwMDAwMDAwICswMDAwCisrKysgcXVpbHQtMC40Ny9NYWtlZmlsZS5pbi5vcmlnCTIwMDgtMDgtMjEgMTM6MjE6MzIuMDAwMDAwMDAwICswMTAwCitAQCAtMTMsNyArMTMsNyBAQAorIG1hbmRpciA6PQlAbWFuZGlyQAorIGxvY2FsZWRpciA6PQkkKGRhdGFkaXIpL2xvY2FsZQorIGVtYWNzZGlyIDo9CSQoZGF0YWRpcikvZW1hY3Mvc2l0ZS1saXNwCistZXRjZGlyIDo9CSQoc3Vic3QgL3Vzci9ldGMsL2V0YywkKHByZWZpeCkvZXRjKQorK2V0Y2RpciA6PQlAc3lzY29uZmRpckAKKyAKKyBJTlNUQUxMIDo9CUBJTlNUQUxMQAorIFBPRDJNQU4gOj0JQFBPRDJNQU5ACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTU4YTlkZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L3J1bi1wdGVzdApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCitsbiAtc2YgL2Jpbi9lZCAvdXNyL2Jpbi9lZAorZm9yIGkgaW4gYGxzIHRlc3QvKi50ZXN0IHxhd2sgLUYuICd7cHJpbnQgJDF9JyB8YXdrIC1GLyAne3ByaW50ICQyfSdgOyBkbyBtYWtlIGNoZWNrLSRpOyBpZiBbICQ/IC1lcSAwIF07IHRoZW4gZWNobyBQQVNTOiAkaS50ZXN0OyBlbHNlIGVjaG8gRkFJTDogJGkudGVzdDsgZmk7IGRvbmUKK3JtIC1mIC91c3IvYmluL2VkCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdF8wLjY0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHRfMC42NC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGY5MDBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHRfMC42NC5iYgpAQCAtMCwwICsxLDE2IEBACityZXF1aXJlIHF1aWx0LmluYworaW5oZXJpdCBnZXR0ZXh0CitSREVQRU5EU18ke1BOfSArPSAicGF0Y2ggZGlmZnN0YXQgYnppcDIgdXRpbC1saW51eCIKK1NSQ19VUkkgKz0gImZpbGU6Ly9hY2xvY2FsLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9nbnVfcGF0Y2hfdGVzdF9maXhfdGFyZ2V0LnBhdGNoIFwKKyAgICAgICAgICAgIgorCisjIGZpeCBidWlsZC1kaXN0cm8gc3BlY2lmaWMgcGVybCBwYXRoIGluIHRoZSB0YXJnZXQgcGVybCBzY3JpcHRzCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlmb3IgcGVybHNjcmlwdCBpbiAke0R9JHtkYXRhZGlyfS9xdWlsdC9zY3JpcHRzL3JlbW92ZS10cmFpbGluZy13cyAke0R9JHtkYXRhZGlyfS9xdWlsdC9zY3JpcHRzL2RlcGVuZGVuY3ktZ3JhcGggJHtEfSR7ZGF0YWRpcn0vcXVpbHQvc2NyaXB0cy9lZG1haWwgJHtEfSR7YmluZGlyfS9ndWFyZHMKKwlkbworCQlpZiBbIC1mICRwZXJsc2NyaXB0IF07IHRoZW4KKwkJCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEgJHtVU1JCSU5QQVRIfS9lbnYgcGVybCwnICRwZXJsc2NyaXB0CisJCWZpCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjg4OWZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZS5pbmMKQEAgLTAsMCArMSwxNiBAQAorU1VNTUFSWSA9ICJNYWtlZmlsZSBkZWJ1Z2dlciB3aGljaCBpcyBnbnVtYWtlIGNvbXBhdGlibGUiCitERVNDUklQVElPTiA9ICJyZW1ha2UgaXMgYSBwYXRjaGVkIGFuZCBtb2Rlcm5pemVkIHZlcnNpb24gb2YgR05VIG1ha2UgXAordXRpbGl0eSB0aGF0IGFkZHMgaW1wcm92ZWQgZXJyb3IgcmVwb3J0aW5nLCB0aGUgYWJpbGl0eSB0byB0cmFjZSBcCitleGVjdXRpb24gaW4gYSBjb21wcmVoZW5zaWJsZSB3YXksIGFuZCBhIGRlYnVnZ2VyLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL2Jhc2hkYi5zb3VyY2Vmb3JnZS5uZXQvcmVtYWtlLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9yb2NreS9yZW1ha2UuZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcGtnY29uZmlnCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gIm1ha2UiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWFrZV0gPSAiJHtiaW5kaXJ9L21ha2UiCitBTFRFUk5BVElWRV9UQVJHRVRbbWFrZV0gPSAiJHtiaW5kaXJ9L3JlbWFrZSIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JlbWFrZS9yZW1ha2UvdmVyc2lvbi1yZW1ha2UudGV4aS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JlbWFrZS9yZW1ha2UvdmVyc2lvbi1yZW1ha2UudGV4aS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTYzMjllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZS92ZXJzaW9uLXJlbWFrZS50ZXhpLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCit2ZXJzaW9uLXJlbWFrZS50ZXhpIGlzIG5vdCB0aGVyZSBidXQgaXQgaXMgcmVxdWlyZWQgYnkgcmVtYWtlLnRleGksCitqdXN0IGFkZCBpdCBmb3IgZ2V0dGluZyB0aGUgJ21ha2UgcmVtYWtlLmluZm8nIHdvcmtzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZGlmZiAtLWdpdCBhL2RvYy92ZXJzaW9uLXJlbWFrZS50ZXhpIGIvZG9jL3ZlcnNpb24tcmVtYWtlLnRleGkKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yYTNiNzJiCistLS0gL2Rldi9udWxsCisrKysgYi9kb2MvdmVyc2lvbi1yZW1ha2UudGV4aQorQEAgLTAsMCArMSw0IEBACisrQHNldCBVUERBVEVEIDEwIEp1bmUgMjAxMgorK0BzZXQgVVBEQVRFRC1NT05USCBKdW5lIDIwMTIKKytAc2V0IEVESVRJT04gMy44MitkYmctMC45Z2l0CisrQHNldCBWRVJTSU9OIDMuODIrZGJnLTAuOWdpdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZV80LjErZGJnLTEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JlbWFrZS9yZW1ha2VfNC4xK2RiZy0xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYxOTEzZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JlbWFrZS9yZW1ha2VfNC4xK2RiZy0xLjEuYmIKQEAgLTAsMCArMSwyNyBAQAorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dsb2IvQ09QWUlORy5MSUI7bWQ1PTRhNzcwYjY3ZTZiZTBmNjBkYTI0NGJlYjJkZTBmY2U0IgorcmVxdWlyZSByZW1ha2UuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly92ZXJzaW9uLXJlbWFrZS50ZXhpLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDUkVWID0gImNmNTQ2NDFkNTBhMDE2NWJiMTc2MjJiM2U5NzcwZjQyNmNjYmM1NjEiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitERVBFTkRTICs9ICJyZWFkbGluZSBndWlsZSIKKyMgTmVlZCB0byBhZGQgImdldHRleHQtbmF0aXZlIiBkZXBlbmRlbmN5IHRvIHJlbWFrZS1uYXRpdmUuCisjIEJ5IGRlZmF1bHQgb25seSAiZ2V0dGV4dC1taW5pbWFsLW5hdGl2ZSIgaXMgYWRkZWQKKyMgd2hlbiBpbmhlcml0IGdldHRleHQuCitERVBFTkRTX2NsYXNzLW5hdGl2ZSArPSAiZ2V0dGV4dC1uYXRpdmUiCitQUk9WSURFUyArPSAibWFrZSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgIyByZW1vdmUgdGhlIGRlZmF1bHQgTElOR1VBUyBzaW5jZSB3ZSBhcmUgbm90IGdvaW5nIHRvIGdlbmVyYXRlIGxhbmd1YWdlcworICAgIHJtICR7U30vcG8vTElOR1VBUworICAgIHRvdWNoICR7U30vcG8vTElOR1VBUworICAgICMgY3JlYXRlIGNvbmZpZy5ycGF0aCB3aGljaCByZXF1aXJlZCBieSBjb25maWd1cmUuYWMKKyAgICAoIGNkICR7U307IGF1dG9wb2ludCB8fCB0b3VjaCBjb25maWcucnBhdGggKQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL2FkZF9SUE1TRU5TRV9NSVNTSU5HT0tfdG9fcnBtbW9kdWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvYWRkX1JQTVNFTlNFX01JU1NJTkdPS190b19ycG1tb2R1bGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg3Nzg3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL2FkZF9SUE1TRU5TRV9NSVNTSU5HT0tfdG9fcnBtbW9kdWxlLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtU3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvbmFuIExlIE1hcnRyZXQgPHJvbmFuLmxlbWFydHJldEBvcGVuLmV1cm9naWNpZWwub3JnPiAKKworZGlmZiAtLWdpdCBhL3B5dGhvbi9ycG1tb2R1bGUuYyBiL3B5dGhvbi9ycG1tb2R1bGUuYworaW5kZXggYTRmZTIxNy4uNzI4YzY2YyAxMDA2NDQKKy0tLSBhL3B5dGhvbi9ycG1tb2R1bGUuYworKysrIGIvcHl0aG9uL3JwbW1vZHVsZS5jCitAQCAtMzk2LDYgKzM5NiwxMCBAQCBzdGF0aWMgaW50IGluaXRNb2R1bGUoUHlPYmplY3QgKm0pCisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfU1RST05HKTsKKyAgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9DT05GSUcpOworIAorKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisrICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfTUlTU0lOR09LKTsKKysjZW5kaWYKKysKKyAgICAgUkVHSVNURVJfRU5VTShSUE1UUkFOU19GTEFHX1RFU1QpOworICAgICBSRUdJU1RFUl9FTlVNKFJQTVRSQU5TX0ZMQUdfQlVJTERfUFJPQlMpOworICAgICBSRUdJU1RFUl9FTlVNKFJQTVRSQU5TX0ZMQUdfTk9TQ1JJUFRTKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL2Rpc2FibGVfc2hvcnRjaXJjdWl0ZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9kaXNhYmxlX3Nob3J0Y2lyY3VpdGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNjQ2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9kaXNhYmxlX3Nob3J0Y2lyY3VpdGVkLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb25hbiBMZSBNYXJ0cmV0IDxyb25hbi5sZW1hcnRyZXRAb3Blbi5ldXJvZ2ljaWVsLm9yZz4KKworCitJbmRleDogcnBtLTQuMTEuMi9idWlsZC9wYWNrLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNC4xMS4yLm9yaWcvYnVpbGQvcGFjay5jCisrKysgcnBtLTQuMTEuMi9idWlsZC9wYWNrLmMKK0BAIC01NzEsOSArNTcxLDkgQEAgcnBtUkMgcGFja2FnZUJpbmFyaWVzKHJwbVNwZWMgc3BlYywgY29ucworIAkgICAgaGVhZGVyUHV0QmluKHBrZy0+aGVhZGVyLCBSUE1UQUdfU09VUkNFUEtHSUQsIHNwZWMtPnNvdXJjZVBrZ0lkLDE2KTsKKyAJfQorIAorLQlpZiAoY2hlYXRpbmcpIHsKKy0JICAgICh2b2lkKSBycG1saWJOZWVkc0ZlYXR1cmUocGtnLCAiU2hvcnRDaXJjdWl0ZWQiLCAiNC45LjAtMSIpOworLQl9CisrLy8JaWYgKGNoZWF0aW5nKSB7CisrLy8JICAgICh2b2lkKSBycG1saWJOZWVkc0ZlYXR1cmUocGtnLCAiU2hvcnRDaXJjdWl0ZWQiLCAiNC45LjAtMSIpOworKy8vCX0KKyAJCisgCXsgICBjaGFyICpiaW5Gb3JtYXQgPSBycG1HZXRQYXRoKCIle19ycG1maWxlbmFtZX0iLCBOVUxMKTsKKyAJICAgIGNoYXIgKmJpblJwbSwgKmJpbkRpcjsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL2ZpeF9saWJkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9maXhfbGliZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMDYyNmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9maXhfbGliZGlyLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUm9uYW4gTGUgTWFydHJldCA8cm9uYW4ubGVtYXJ0cmV0QG9wZW4uZXVyb2dpY2llbC5vcmc+CisKKworZGlmZiAtLWdpdCBhL2luc3RhbGxwbGF0Zm9ybSBiL2luc3RhbGxwbGF0Zm9ybQoraW5kZXggOGMzZWJhMC4uZmExNWU5MSAxMDA3NTUKKy0tLSBhL2luc3RhbGxwbGF0Zm9ybQorKysrIGIvaW5zdGFsbHBsYXRmb3JtCitAQCAtMTEyLDcgKzExMiw3IEBAIGZvciBBUkNIIGluIG5vYXJjaCBgZ3JlcCBeYXJjaF9jYW5vbiAkUlBNUkMgfCBjdXQgLWQ6IC1mMmA7IGRvCisgICBbIC16ICIkQ0FOT05BUkNIIiBdICYmIGNvbnRpbnVlCisgCisgICBpZiBbICIkT1MiID0gImxpbnV4IiBdICYmIFsgIiRDQU5PTkNPTE9SIiA9IDMgXTsgdGhlbgorLSAgICAgIExJQj0ke0xJQn02NAorKyAgICAgIExJQj0ke0xJQn0KKyAgIGZpCisgCisgICBQUEQ9IiR7REVTVERJUn0vJHtwbGF0Zm9ybWRpcn0vJHtBUkNIfS0ke09TfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3B5dGhvbmRlcHMuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9weXRob25kZXBzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA4M2IxNzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9weXRob25kZXBzLnNoCkBAIC0wLDAgKzEsMTYgQEAKKyMhL2Jpbi9zaAorCitbICQjIC1nZSAxIF0gfHwgeworICAgIGNhdCA+IC9kZXYvbnVsbAorICAgIGV4aXQgMAorfQorCitjYXNlICQxIGluCistUnwtLXJlcXVpcmVzKQorICAgIHNoaWZ0CisgICAgZ3JlcCAiL3Vzci9cKGxpYlteL10qXHxzaGFyZVwpL3B5dGhvblteL10qLyIgPi9kZXYvbnVsbCAmJiBlY2hvICJweXRob24iCisgICAgZXhpdCAwCisgICAgOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9yZW1vdmUtZGIzLWZyb20tY29uZmlndXJlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcmVtb3ZlLWRiMy1mcm9tLWNvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjQwZTU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcmVtb3ZlLWRiMy1mcm9tLWNvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDI2IEBACisKK0Rpc2FibGUgY29uZmlndXJpbmcgdGhlIGRiMyBkaXJlY3Rvcnkgc2luY2Ugd2Ugd2lsbCBiZSB1c2luZyB0aGUKK2V4dGVybmFsIERCIHByb3ZpZGVkIGFzIHBhcnQgb2YgT0UtQ29yZSBhbHJlYWR5LCBubyBuZWVkIHRvIGhhdmUKK2R1cGxpY2F0ZSBkYXRhYmFzZSBjb2RlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLUNvcmUgU3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHJwbS00LjExLjIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTQuMTEuMi5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHJwbS00LjExLjIvY29uZmlndXJlLmFjCitAQCAtODI1LDkgKzgyNSw5IEBAIEFDX1NVQlNUKFJQTUNPTkZJR0RJUikKKyAKKyBBQ19TVUJTVChPQkpEVU1QKQorIAorLWlmIHRlc3QgIiR3aXRoX2V4dGVybmFsX2RiIiA9IG5vOyB0aGVuCistICAgIEFDX0NPTkZJR19TVUJESVJTKGRiMykKKy1maQorKyNpZiB0ZXN0ICIkd2l0aF9leHRlcm5hbF9kYiIgPSBubzsgdGhlbgorKyMgICAgQUNfQ09ORklHX1NVQkRJUlMoZGIzKQorKyNmaQorIAorIEFNX0NPTkRJVElPTkFMKFtXSVRIX0lOVEVSTkFMX0RCXSxbdGVzdCAiJHdpdGhfZXh0ZXJuYWxfZGIiID0gbm9dKQorIEFNX0NPTkRJVElPTkFMKFtET1hZR0VOXSxbdGVzdCAiJERPWFlHRU4iICE9IG5vXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JlbW92ZS1kaXItY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9yZW1vdmUtZGlyLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZWNhYjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9yZW1vdmUtZGlyLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb25hbiBMZSBNYXJ0cmV0IDxyb25hbi5sZW1hcnRyZXRAb3Blbi5ldXJvZ2ljaWVsLm9yZz4KKworCitJbmRleDogcnBtLTQuMTEuMi9idWlsZC9maWxlcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTQuMTEuMi5vcmlnL2J1aWxkL2ZpbGVzLmMKKysrKyBycG0tNC4xMS4yL2J1aWxkL2ZpbGVzLmMKK0BAIC0xMzIxLDEyICsxMzIxLDYgQEAgc3RhdGljIHJwbVJDIGFkZEZpbGUoRmlsZUxpc3QgZmwsIGNvbnN0CisgCX0KKyAgICAgfQorIAorLSAgICAvKiBFcnJvciBvdXQgd2hlbiBhIG5vbi1kaXJlY3RvcnkgaXMgc3BlY2lmaWVkIGFzIG9uZSBpbiBzcGVjICovCistICAgIGlmIChmbC0+Y3VyLmlzRGlyICYmIChzdGF0cCA9PSAmc3RhdGJ1ZikgJiYgIVNfSVNESVIoc3RhdHAtPnN0X21vZGUpKSB7CistCXJwbWxvZyhSUE1MT0dfRVJSLCBfKCJOb3QgYSBkaXJlY3Rvcnk6ICVzXG4iKSwgZGlza1BhdGgpOworLQlnb3RvIGV4aXQ7CistICAgIH0KKy0KKyAgICAgLyogRG9uJ3QgcmVjdXJzZSBpbnRvIGV4cGxpY2l0ICVkaXIsIGRvbid0IGRvdWJsZS1yZWN1cnNlIGZyb20gZnRzICovCisgICAgIGlmICgoZmwtPmN1ci5pc0RpciAhPSAxKSAmJiAoc3RhdHAgPT0gJnN0YXRidWYpICYmIFNfSVNESVIoc3RhdHAtPnN0X21vZGUpKSB7CisgCXJldHVybiByZWN1cnNlRGlyKGZsLCBkaXNrUGF0aCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9ycG0tc2NyaXB0ZXRleGVjaGVscC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JwbS1zY3JpcHRldGV4ZWNoZWxwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMzNkZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9ycG0tc2NyaXB0ZXRleGVjaGVscC5wYXRjaApAQCAtMCwwICsxLDE5NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1Db3JlXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb25hbiBMZSBNYXJ0cmV0IDxyb25hbi5sZW1hcnRyZXRAb3Blbi5ldXJvZ2ljaWVsLm9yZz4KKworCitJbmRleDogcnBtLTQuMTEuMi9saWIvcHNtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNC4xMS4yLm9yaWcvbGliL3BzbS5jCisrKysgcnBtLTQuMTEuMi9saWIvcHNtLmMKK0BAIC00MjEsNyArNDIxLDggQEAgc3RhdGljIHJwbVJDIHJ1blNjcmlwdChycG1wc20gcHNtLCBBUkdWXworIAorICAgICBycG1zd0VudGVyKHJwbXRzT3AocHNtLT50cywgUlBNVFNfT1BfU0NSSVBUTEVUUyksIDApOworICAgICByYyA9IHJwbVNjcmlwdFJ1bihzY3JpcHQsIGFyZzEsIGFyZzIsIHNmZCwKKy0JCSAgICAgIHByZWZpeGVzLCB3YXJuX29ubHksIHNlbGludXgpOworKwkJICAgICAgcHJlZml4ZXMsIHdhcm5fb25seSwgc2VsaW51eCwgcnBtdHNSb290RGlyKHBzbS0+dHMpICk7CisrCisgICAgIHJwbXN3RXhpdChycG10c09wKHBzbS0+dHMsIFJQTVRTX09QX1NDUklQVExFVFMpLCAwKTsKKyAKKyAgICAgLyogTWFwIHdhcm4tb25seSBlcnJvcnMgdG8gIm5vdGZvdW5kIiBmb3Igc2NyaXB0IHN0b3AgY2FsbGJhY2sgKi8KK0BAIC05NTgsMTUgKzk1OSw0OSBAQCBzdGF0aWMgcnBtUkMgcnBtcHNtU3RhZ2UocnBtcHNtIHBzbSwgcGtnCisgICAgIGNhc2UgUFNNX0RFU1RST1k6CisgCWJyZWFrOworICAgICBjYXNlIFBTTV9TQ1JJUFQ6CS8qIFJ1biBjdXJyZW50IHBhY2thZ2Ugc2NyaXB0bGV0cy4gKi8KKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKyAgICAgICAgeworKyAgICAgICAgY29uc3QgY2hhciAqIHNjcmlwdGxldFdyYXBwZXIgPSBycG1FeHBhbmQoIiV7P19jcm9zc19zY3JpcHRsZXRfd3JhcHBlcn0iLCBOVUxMKTsKKysJaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgKHZvaWQpIHJwbUNocm9vdE91dCgpOworKyNlbmRpZgorKworIAlyYyA9IHJ1bkluc3RTY3JpcHQocHNtKTsKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwlpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICAodm9pZCkgcnBtQ2hyb290SW4oKTsKKysgICAgICAgIH0KKysjZW5kaWYKKyAJYnJlYWs7CisgICAgIGNhc2UgUFNNX1RSSUdHRVJTOgorIAkvKiBSdW4gdHJpZ2dlcnMgaW4gb3RoZXIgcGFja2FnZShzKSB0aGlzIHBhY2thZ2Ugc2V0cyBvZmYuICovCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgICAgIHsKKysgICAgICAgIGNvbnN0IGNoYXIgKiBzY3JpcHRsZXRXcmFwcGVyID0gcnBtRXhwYW5kKCIlez9fY3Jvc3Nfc2NyaXB0bGV0X3dyYXBwZXJ9IiwgTlVMTCk7CisrCWlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgICh2b2lkKSBycG1DaHJvb3RPdXQoKTsKKysjZW5kaWYKKyAJcmMgPSBydW5UcmlnZ2Vycyhwc20pOworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCWlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgICh2b2lkKSBycG1DaHJvb3RJbigpOworKyAgICAgICAgfQorKyNlbmRpZgorIAlicmVhazsKKyAgICAgY2FzZSBQU01fSU1NRURfVFJJR0dFUlM6CisgCS8qIFJ1biB0cmlnZ2VycyBpbiB0aGlzIHBhY2thZ2Ugb3RoZXIgcGFja2FnZShzKSBzZXQgb2ZmLiAqLworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCXsKKysgICAgICAgICAgICBjb25zdCBjaGFyICogc2NyaXB0bGV0V3JhcHBlciA9IHJwbUV4cGFuZCgiJXs/X2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyfSIsIE5VTEwpOworKwkgICAgaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgKHZvaWQpIHJwbUNocm9vdE91dCgpOworKyNlbmRpZgorIAlyYyA9IHJ1bkltbWVkVHJpZ2dlcnMocHNtKTsKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwkgICAgaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgKHZvaWQpIHJwbUNocm9vdEluKCk7CisrCX0KKysjZW5kaWYKKyAJYnJlYWs7CisgCisgICAgIGNhc2UgUFNNX1JQTURCX0FERDogeworSW5kZXg6IHJwbS00LjExLjIvbGliL3JwbXNjcmlwdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTQuMTEuMi5vcmlnL2xpYi9ycG1zY3JpcHQuYworKysrIHJwbS00LjExLjIvbGliL3JwbXNjcmlwdC5jCitAQCAtOTIsNyArOTIsNyBAQCBzdGF0aWMgcnBtUkMgcnVuTHVhU2NyaXB0KGludCBzZWxpbnV4LCBBCisgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBTQ1JJUFRfUEFUSCA9ICJQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluOi91c3IvWDExUjYvYmluIjsKKyAKKyBzdGF0aWMgdm9pZCBkb1NjcmlwdEV4ZWMoaW50IHNlbGludXgsIEFSR1ZfY29uc3RfdCBhcmd2LCBBUkdWX2NvbnN0X3QgcHJlZml4ZXMsCistCQkJRkRfdCBzY3JpcHRGZCwgRkRfdCBvdXQpCisrCQkJRkRfdCBzY3JpcHRGZCwgRkRfdCBvdXQsIGNoYXIgKiByb290RGlyICkKKyB7CisgICAgIGludCBwaXBlc1syXTsKKyAgICAgaW50IGZsYWc7CitAQCAtMTU4LDEzICsxNTgsMTIgQEAgc3RhdGljIHZvaWQgZG9TY3JpcHRFeGVjKGludCBzZWxpbnV4LCBBUgorIAkgICAgc2V0ZW52KCJSUE1fSU5TVEFMTF9QUkVGSVgiLCAqcGYsIDEpOworIAl9CisgICAgIH0KKy0JCistICAgIGlmIChjaGRpcigiLyIpID09IDApIHsKKysgICAgaWYgKGNoZGlyKHJvb3REaXIpID09IDApIHsKKyAJLyogWFhYIERvbid0IG10cmFjZSBpbnRvIGNoaWxkcmVuLiAqLworIAl1bnNldGVudigiTUFMTE9DX0NIRUNLXyIpOworIAorIAkvKiBQZXJtaXQgbGlic2VsaW51eCB0byBkbyB0aGUgc2NyaXB0bGV0IGV4ZWMuICovCistCWlmIChzZWxpbnV4ID09IDEpIHsJCisrCWlmIChzZWxpbnV4ID09IDEpIHsKKyAJICAgIHh4ID0gcnBtX2V4ZWNjb24oMCwgYXJndlswXSwgYXJndiwgZW52aXJvbik7CisgCX0KKyAKK0BAIC0xNzUsMTIgKzE3NCwxMiBAQCBzdGF0aWMgdm9pZCBkb1NjcmlwdEV4ZWMoaW50IHNlbGludXgsIEFSCisgICAgIF9leGl0KDEyNyk7IC8qIGV4aXQgMTI3IGZvciBjb21wYXRpYmlsaXR5IHdpdGggYmFzaCgxKSAqLworIH0KKyAKKy1zdGF0aWMgY2hhciAqIHdyaXRlU2NyaXB0KGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqc2NyaXB0KQorK3N0YXRpYyBjaGFyICogd3JpdGVTY3JpcHQoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICpzY3JpcHQsIGNoYXIgKiByb290RGlyKQorIHsKKyAgICAgY2hhciAqZm4gPSBOVUxMOworICAgICBzaXplX3Qgc2xlbiA9IHN0cmxlbihzY3JpcHQpOworICAgICBpbnQgb2sgPSAwOworLSAgICBGRF90IGZkID0gcnBtTWtUZW1wRmlsZSgiLyIsICZmbik7CisrICAgIEZEX3QgZmQgPSBycG1Na1RlbXBGaWxlKHJvb3REaXIsICZmbik7CisgCisgICAgIGlmIChGZXJyb3IoZmQpKQorIAlnb3RvIGV4aXQ7CitAQCAtMjA0LDcgKzIwMyw3IEBAIGV4aXQ6CisgICovCisgc3RhdGljIHJwbVJDIHJ1bkV4dFNjcmlwdChpbnQgc2VsaW51eCwgQVJHVl9jb25zdF90IHByZWZpeGVzLAorIAkJICAgY29uc3QgY2hhciAqc25hbWUsIHJwbWxvZ0x2bCBsdmwsIEZEX3Qgc2NyaXB0RmQsCistCQkgICBBUkdWX3QgKiBhcmd2cCwgY29uc3QgY2hhciAqc2NyaXB0LCBpbnQgYXJnMSwgaW50IGFyZzIpCisrCQkgICBBUkdWX3QgKiBhcmd2cCwgY29uc3QgY2hhciAqc2NyaXB0LCBpbnQgYXJnMSwgaW50IGFyZzIsY2hhciAqIHJvb3REaXIpCisgeworICAgICBGRF90IG91dCA9IE5VTEw7CisgICAgIGNoYXIgKiBmbiA9IE5VTEw7CitAQCAtMjE1LDcgKzIxNCw3IEBAIHN0YXRpYyBycG1SQyBydW5FeHRTY3JpcHQoaW50IHNlbGludXgsIEEKKyAgICAgcnBtbG9nKFJQTUxPR19ERUJVRywgIiVzOiBzY3JpcHRsZXQgc3RhcnRcbiIsIHNuYW1lKTsKKyAKKyAgICAgaWYgKHNjcmlwdCkgeworLQlmbiA9IHdyaXRlU2NyaXB0KCphcmd2cFswXSwgc2NyaXB0KTsKKysJZm4gPSB3cml0ZVNjcmlwdCgqYXJndnBbMF0sIHNjcmlwdCwgcm9vdERpcik7CisgCWlmIChmbiA9PSBOVUxMKSB7CisgCSAgICBycG1sb2coUlBNTE9HX0VSUiwKKyAJCSAgIF8oIkNvdWxkbid0IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSBmb3IgJXM6ICVzXG4iKSwKK0BAIC0yNTgsNyArMjU3LDcgQEAgc3RhdGljIHJwbVJDIHJ1bkV4dFNjcmlwdChpbnQgc2VsaW51eCwgQQorICAgICB9IGVsc2UgaWYgKHBpZCA9PSAwKSB7LyogQ2hpbGQgKi8KKyAJcnBtbG9nKFJQTUxPR19ERUJVRywgIiVzOiBleGVjdiglcykgcGlkICVkXG4iLAorIAkgICAgICAgc25hbWUsICphcmd2cFswXSwgKHVuc2lnbmVkKWdldHBpZCgpKTsKKy0JZG9TY3JpcHRFeGVjKHNlbGludXgsICphcmd2cCwgcHJlZml4ZXMsIHNjcmlwdEZkLCBvdXQpOworKwlkb1NjcmlwdEV4ZWMoc2VsaW51eCwgKmFyZ3ZwLCBwcmVmaXhlcywgc2NyaXB0RmQsIG91dCwgcm9vdERpcik7CisgICAgIH0KKyAKKyAgICAgZG8geworQEAgLTI5NywxMyArMjk2LDI3IEBAIGV4aXQ6CisgfQorIAorIHJwbVJDIHJwbVNjcmlwdFJ1bihycG1TY3JpcHQgc2NyaXB0LCBpbnQgYXJnMSwgaW50IGFyZzIsIEZEX3Qgc2NyaXB0RmQsCistCQkgICBBUkdWX2NvbnN0X3QgcHJlZml4ZXMsIGludCB3YXJuX29ubHksIGludCBzZWxpbnV4KQorKwkJICAgQVJHVl9jb25zdF90IHByZWZpeGVzLCBpbnQgd2Fybl9vbmx5LCBpbnQgc2VsaW51eCwgY2hhciAqIHJvb3REaXIpCisgeworICAgICBBUkdWX3QgYXJncyA9IE5VTEw7CisgICAgIHJwbWxvZ0x2bCBsdmwgPSB3YXJuX29ubHkgPyBSUE1MT0dfV0FSTklORyA6IFJQTUxPR19FUlI7CisgICAgIHJwbVJDIHJjOworLQorLSAgICBpZiAoc2NyaXB0ID09IE5VTEwpIHJldHVybiBSUE1SQ19PSzsKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKyAgICBjb25zdCBjaGFyICogc2NyaXB0bGV0V3JhcHBlciA9IHJwbUV4cGFuZCgiJXs/X2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyfSIsIE5VTEwpOworKyNlbmRpZgorKyAKKysgICAgIGlmIChzY3JpcHQgPT0gTlVMTCkgcmV0dXJuIFJQTVJDX09LOworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrICAgIGlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKSB7CisrICAgICAgIGFyZ3ZBZGQoJmFyZ3MsIHNjcmlwdGxldFdyYXBwZXIpOworKworKyAgICAgICBpZiAoIHJvb3REaXIgKSB7CisrICAgICAgICAgYXJndkFkZCgmYXJncywgcm9vdERpcik7CisrICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgYXJndkFkZCgmYXJncywgIi8iKTsKKysgICAgICAgfQorKyAgICB9CisrI2VuZGlmCisgCisgICAgIC8qIGNvbnN0cnVjdCBhIG5ldyBhcmd2IGFzIHdlIGNhbid0IG1vZGlmeSB0aGUgb25lIGZyb20gaGVhZGVyICovCisgICAgIGlmIChzY3JpcHQtPmFyZ3MpIHsKK0BAIC0zMTUsNyArMzI4LDcgQEAgcnBtUkMgcnBtU2NyaXB0UnVuKHJwbVNjcmlwdCBzY3JpcHQsIGludAorICAgICBpZiAocnN0cmVxKGFyZ3NbMF0sICI8bHVhPiIpKSB7CisgCXJjID0gcnVuTHVhU2NyaXB0KHNlbGludXgsIHByZWZpeGVzLCBzY3JpcHQtPmRlc2NyLCBsdmwsIHNjcmlwdEZkLCAmYXJncywgc2NyaXB0LT5ib2R5LCBhcmcxLCBhcmcyKTsKKyAgICAgfSBlbHNlIHsKKy0JcmMgPSBydW5FeHRTY3JpcHQoc2VsaW51eCwgcHJlZml4ZXMsIHNjcmlwdC0+ZGVzY3IsIGx2bCwgc2NyaXB0RmQsICZhcmdzLCBzY3JpcHQtPmJvZHksIGFyZzEsIGFyZzIpOworKwlyYyA9IHJ1bkV4dFNjcmlwdChzZWxpbnV4LCBwcmVmaXhlcywgc2NyaXB0LT5kZXNjciwgbHZsLCBzY3JpcHRGZCwgJmFyZ3MsIHNjcmlwdC0+Ym9keSwgYXJnMSwgYXJnMiwgcm9vdERpcik7CisgICAgIH0KKyAgICAgYXJndkZyZWUoYXJncyk7CisgCitJbmRleDogcnBtLTQuMTEuMi9saWIvcnBtc2NyaXB0LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNC4xMS4yLm9yaWcvbGliL3JwbXNjcmlwdC5oCisrKysgcnBtLTQuMTEuMi9saWIvcnBtc2NyaXB0LmgKK0BAIC0yOSw3ICsyOSw3IEBAIHJwbVNjcmlwdCBycG1TY3JpcHRGcmVlKHJwbVNjcmlwdCBzY3JpcHQKKyAKKyBSUE1fR05VQ19JTlRFUk5BTAorIHJwbVJDIHJwbVNjcmlwdFJ1bihycG1TY3JpcHQgc2NyaXB0LCBpbnQgYXJnMSwgaW50IGFyZzIsIEZEX3Qgc2NyaXB0RmQsCistICAgICAgICAgICAgICAgICAgIEFSR1ZfY29uc3RfdCBwcmVmaXhlcywgaW50IHdhcm5fb25seSwgaW50IHNlbGludXgpOworKyAgICAgICAgICAgICAgICAgICBBUkdWX2NvbnN0X3QgcHJlZml4ZXMsIGludCB3YXJuX29ubHksIGludCBzZWxpbnV4LCBjaGFyICogcm9vdERpcik7CisgCisgUlBNX0dOVUNfSU5URVJOQUwKKyBycG1UYWdWYWwgcnBtU2NyaXB0VGFnKHJwbVNjcmlwdCBzY3JpcHQpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvc3VwcG9ydC1zdWdnZXN0cy10YWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9zdXBwb3J0LXN1Z2dlc3RzLXRhZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGE2MDg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvc3VwcG9ydC1zdWdnZXN0cy10YWcucGF0Y2gKQEAgLTAsMCArMSwzODQgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvbmFuIExlIE1hcnRyZXQgPHJvbmFuLmxlbWFydHJldEBvcGVuLmV1cm9naWNpZWwub3JnPgorCitkaWZmIC0tZ2l0IGEvYnVpbGQvcGFjay5jIGIvYnVpbGQvcGFjay5jCitpbmRleCBiNmIyYmVhLi41YzNkOGRmIDEwMDY0NAorLS0tIGEvYnVpbGQvcGFjay5jCisrKysgYi9idWlsZC9wYWNrLmMKK0BAIC0yNzMsOCArMjczLDEwIEBAIHN0YXRpYyBycG1UYWdWYWwgZGVwZXZydGFnc1tdID0geworICAgICBSUE1UQUdfQ09ORkxJQ1RWRVJTSU9OLAorICAgICBSUE1UQUdfT1JERVJWRVJTSU9OLAorICAgICBSUE1UQUdfVFJJR0dFUlZFUlNJT04sCistICAgIFJQTVRBR19TVUdHRVNUU1ZFUlNJT04sCistICAgIFJQTVRBR19FTkhBTkNFU1ZFUlNJT04sCisrICAgIFJQTVRBR19TVUdHRVNUVkVSU0lPTiwKKysgICAgUlBNVEFHX0VOSEFOQ0VWRVJTSU9OLAorKyAgICBSUE1UQUdfUkVDT01NRU5EVkVSU0lPTiwKKysgICAgUlBNVEFHX1NVUFBMRU1FTlRWRVJTSU9OLAorICAgICAwCisgfTsKKyAKK2RpZmYgLS1naXQgYS9idWlsZC9wYXJzZVByZWFtYmxlLmMgYi9idWlsZC9wYXJzZVByZWFtYmxlLmMKK2luZGV4IDU3NzJiZWYuLmNiYmJlZTMgMTAwNjQ0CistLS0gYS9idWlsZC9wYXJzZVByZWFtYmxlLmMKKysrKyBiL2J1aWxkL3BhcnNlUHJlYW1ibGUuYworQEAgLTgyMSw2ICs4MjEsMTAgQEAgc3RhdGljIHJwbVJDIGhhbmRsZVByZWFtYmxlVGFnKHJwbVNwZWMgc3BlYywgUGFja2FnZSBwa2csIHJwbVRhZ1ZhbCB0YWcsCisgCX0KKyAJLyogZmFsbHRocm91Z2ggKi8KKyAgICAgY2FzZSBSUE1UQUdfUFJFUkVROgorKyAgICBjYXNlIFJQTVRBR19SRUNPTU1FTkRGTEFHUzoKKysgICAgY2FzZSBSUE1UQUdfU1VHR0VTVEZMQUdTOgorKyAgICBjYXNlIFJQTVRBR19TVVBQTEVNRU5URkxBR1M6CisrICAgIGNhc2UgUlBNVEFHX0VOSEFOQ0VGTEFHUzoKKyAgICAgY2FzZSBSUE1UQUdfQ09ORkxJQ1RGTEFHUzoKKyAgICAgY2FzZSBSUE1UQUdfT0JTT0xFVEVGTEFHUzoKKyAgICAgY2FzZSBSUE1UQUdfUFJPVklERUZMQUdTOgorQEAgLTkyMiw2ICs5MjYsMTAgQEAgc3RhdGljIHN0cnVjdCBQcmVhbWJsZVJlY19zIGNvbnN0IHByZWFtYmxlTGlzdFtdID0geworICAgICB7UlBNVEFHX0lDT04sCQkwLCAwLCBMRU5fQU5EX1NUUigiaWNvbiIpfSwKKyAgICAge1JQTVRBR19QUk9WSURFRkxBR1MsCTAsIDAsIExFTl9BTkRfU1RSKCJwcm92aWRlcyIpfSwKKyAgICAge1JQTVRBR19SRVFVSVJFRkxBR1MsCTIsIDAsIExFTl9BTkRfU1RSKCJyZXF1aXJlcyIpfSwKKysgICAge1JQTVRBR19SRUNPTU1FTkRGTEFHUywJMCwgMCwgTEVOX0FORF9TVFIoInJlY29tbWVuZHMiKX0sCisrICAgIHtSUE1UQUdfU1VHR0VTVEZMQUdTLAkwLCAwLCBMRU5fQU5EX1NUUigic3VnZ2VzdHMiKX0sCisrICAgIHtSUE1UQUdfU1VQUExFTUVOVEZMQUdTLAkwLCAwLCBMRU5fQU5EX1NUUigic3VwcGxlbWVudHMiKX0sCisrICAgIHtSUE1UQUdfRU5IQU5DRUZMQUdTLAkwLCAwLCBMRU5fQU5EX1NUUigiZW5oYW5jZXMiKX0sCisgICAgIHtSUE1UQUdfUFJFUkVRLAkJMiwgMSwgTEVOX0FORF9TVFIoInByZXJlcSIpfSwKKyAgICAge1JQTVRBR19DT05GTElDVEZMQUdTLAkwLCAwLCBMRU5fQU5EX1NUUigiY29uZmxpY3RzIil9LAorICAgICB7UlBNVEFHX09CU09MRVRFRkxBR1MsCTAsIDAsIExFTl9BTkRfU1RSKCJvYnNvbGV0ZXMiKX0sCitkaWZmIC0tZ2l0IGEvYnVpbGQvcGFyc2VSZXFzLmMgYi9idWlsZC9wYXJzZVJlcXMuYworaW5kZXggYmEwODBhMS4uMTQyNzExMSAxMDA2NDQKKy0tLSBhL2J1aWxkL3BhcnNlUmVxcy5jCisrKysgYi9idWlsZC9wYXJzZVJlcXMuYworQEAgLTYxLDYgKzYxLDE4IEBAIHJwbVJDIHBhcnNlUkNQT1QocnBtU3BlYyBzcGVjLCBQYWNrYWdlIHBrZywgY29uc3QgY2hhciAqZmllbGQsIHJwbVRhZ1ZhbCB0YWdOLAorIAluYW1ldGFnID0gUlBNVEFHX1JFUVVJUkVOQU1FOworIAl0YWdmbGFncyB8PSBSUE1TRU5TRV9BTlk7CisgCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19SRUNPTU1FTkRGTEFHUzoKKysJbmFtZXRhZyA9IFJQTVRBR19SRUNPTU1FTkROQU1FOworKwlicmVhazsKKysgICAgY2FzZSBSUE1UQUdfU1VHR0VTVEZMQUdTOgorKwluYW1ldGFnID0gUlBNVEFHX1NVR0dFU1ROQU1FOworKwlicmVhazsKKysgICAgY2FzZSBSUE1UQUdfU1VQUExFTUVOVEZMQUdTOgorKwluYW1ldGFnID0gUlBNVEFHX1NVUFBMRU1FTlROQU1FOworKwlicmVhazsKKysgICAgY2FzZSBSUE1UQUdfRU5IQU5DRUZMQUdTOgorKwluYW1ldGFnID0gUlBNVEFHX0VOSEFOQ0VOQU1FOworKwlicmVhazsKKyAgICAgY2FzZSBSUE1UQUdfUFJPVklERUZMQUdTOgorIAluYW1ldGFnID0gUlBNVEFHX1BST1ZJREVOQU1FOworIAlicmVhazsKK2RpZmYgLS1naXQgYS9idWlsZC9yZXFwcm92LmMgYi9idWlsZC9yZXFwcm92LmMKK2luZGV4IGEzNjhmNDIuLmMyNzBhZjYgMTAwNjQ0CistLS0gYS9idWlsZC9yZXFwcm92LmMKKysrKyBiL2J1aWxkL3JlcXByb3YuYworQEAgLTgxLDYgKzgxLDMwIEBAIGludCBhZGRSZXFQcm92KFBhY2thZ2UgcGtnLCBycG1UYWdWYWwgdGFnTiwKKyAJZXh0cmEgPSBGbGFncyAmIFJQTVNFTlNFX1RSSUdHRVI7CisgCWRzcCA9ICZwa2ctPnRyaWdnZXJzOworIAlicmVhazsKKysgICAgY2FzZSBSUE1UQUdfUkVDT01NRU5ETkFNRToKKysJdmVyc2lvbnRhZyA9IFJQTVRBR19SRUNPTU1FTkRWRVJTSU9OOworKwlmbGFndGFnID0gUlBNVEFHX1JFQ09NTUVOREZMQUdTOworKwlleHRyYSA9IEZsYWdzICYgX0FMTF9SRVFVSVJFU19NQVNLOworKwlkc3AgPSAmcGtnLT5yZWNvbW1lbmRzOworKwlicmVhazsKKysgICAgY2FzZSBSUE1UQUdfU1VHR0VTVE5BTUU6CisrCXZlcnNpb250YWcgPSBSUE1UQUdfU1VHR0VTVFZFUlNJT047CisrCWZsYWd0YWcgPSBSUE1UQUdfU1VHR0VTVEZMQUdTOworKwlleHRyYSA9IEZsYWdzICYgX0FMTF9SRVFVSVJFU19NQVNLOworKwlkc3AgPSAmcGtnLT5zdWdnZXN0czsKKysJYnJlYWs7CisrICAgIGNhc2UgUlBNVEFHX1NVUFBMRU1FTlROQU1FOgorKwl2ZXJzaW9udGFnID0gUlBNVEFHX1NVUFBMRU1FTlRWRVJTSU9OOworKwlmbGFndGFnID0gUlBNVEFHX1NVUFBMRU1FTlRGTEFHUzsKKysJZXh0cmEgPSBGbGFncyAmIF9BTExfUkVRVUlSRVNfTUFTSzsKKysJZHNwID0gJnBrZy0+c3VwcGxlbWVudHM7CisrCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19FTkhBTkNFTkFNRToKKysJdmVyc2lvbnRhZyA9IFJQTVRBR19FTkhBTkNFVkVSU0lPTjsKKysJZmxhZ3RhZyA9IFJQTVRBR19FTkhBTkNFRkxBR1M7CisrCWV4dHJhID0gRmxhZ3MgJiBfQUxMX1JFUVVJUkVTX01BU0s7CisrCWRzcCA9ICZwa2ctPmVuaGFuY2VzOworKwlicmVhazsKKyAgICAgY2FzZSBSUE1UQUdfUkVRVUlSRU5BTUU6CisgICAgIGRlZmF1bHQ6CisgCXRhZ04gPSBSUE1UQUdfUkVRVUlSRU5BTUU7CitkaWZmIC0tZ2l0IGEvYnVpbGQvcnBtYnVpbGRfaW50ZXJuYWwuaCBiL2J1aWxkL3JwbWJ1aWxkX2ludGVybmFsLmgKK2luZGV4IGE5ZTRjN2MuLjBhMTk3N2YgMTAwNjQ0CistLS0gYS9idWlsZC9ycG1idWlsZF9pbnRlcm5hbC5oCisrKysgYi9idWlsZC9ycG1idWlsZF9pbnRlcm5hbC5oCitAQCAtOTMsNiArOTMsMTAgQEAgc3RydWN0IFBhY2thZ2VfcyB7CisgICAgIHJwbWRzIGRzOwkJCS8qITwgUmVxdWlyZXM6IE4gPSBFVlIgKi8KKyAgICAgcnBtZHMgcmVxdWlyZXM7CisgICAgIHJwbWRzIHByb3ZpZGVzOworKyAgICBycG1kcyByZWNvbW1lbmRzOworKyAgICBycG1kcyBzdWdnZXN0czsKKysgICAgcnBtZHMgc3VwcGxlbWVudHM7CisrICAgIHJwbWRzIGVuaGFuY2VzOworICAgICBycG1kcyBjb25mbGljdHM7CisgICAgIHJwbWRzIG9ic29sZXRlczsKKyAgICAgcnBtZHMgdHJpZ2dlcnM7CitkaWZmIC0tZ2l0IGEvYnVpbGQvc3BlYy5jIGIvYnVpbGQvc3BlYy5jCitpbmRleCA3MDNlYzc4Li43YWUyMTIwIDEwMDY0NAorLS0tIGEvYnVpbGQvc3BlYy5jCisrKysgYi9idWlsZC9zcGVjLmMKK0BAIC0xMzksNiArMTM5LDExIEBAIHN0YXRpYyBQYWNrYWdlIGZyZWVQYWNrYWdlKFBhY2thZ2UgcGtnKQorICAgICBwa2ctPmRzID0gcnBtZHNGcmVlKHBrZy0+ZHMpOworICAgICBwa2ctPnJlcXVpcmVzID0gcnBtZHNGcmVlKHBrZy0+cmVxdWlyZXMpOworICAgICBwa2ctPnByb3ZpZGVzID0gcnBtZHNGcmVlKHBrZy0+cHJvdmlkZXMpOworKyAgICBwa2ctPnJlY29tbWVuZHMgPSBycG1kc0ZyZWUocGtnLT5yZWNvbW1lbmRzKTsKKysgICAgcGtnLT5zdWdnZXN0cyA9IHJwbWRzRnJlZShwa2ctPnN1Z2dlc3RzKTsKKysgICAgcGtnLT5zdXBwbGVtZW50cyA9IHJwbWRzRnJlZShwa2ctPnN1cHBsZW1lbnRzKTsKKysgICAgcGtnLT5lbmhhbmNlcyA9IHJwbWRzRnJlZShwa2ctPmVuaGFuY2VzKTsKKysKKyAgICAgcGtnLT5jb25mbGljdHMgPSBycG1kc0ZyZWUocGtnLT5jb25mbGljdHMpOworICAgICBwa2ctPm9ic29sZXRlcyA9IHJwbWRzRnJlZShwa2ctPm9ic29sZXRlcyk7CisgICAgIHBrZy0+dHJpZ2dlcnMgPSBycG1kc0ZyZWUocGtnLT50cmlnZ2Vycyk7CitkaWZmIC0tZ2l0IGEvbGliL3JwbWRzLmMgYi9saWIvcnBtZHMuYworaW5kZXggN2E1MTE2Ny4uMWU1ZGRhMCAxMDA2NDQKKy0tLSBhL2xpYi9ycG1kcy5jCisrKysgYi9saWIvcnBtZHMuYworQEAgLTUyLDYgKzUyLDIyIEBAIHN0YXRpYyBpbnQgZHNUeXBlKHJwbVRhZ1ZhbCB0YWcsCisgCXQgPSAiUmVxdWlyZXMiOworIAlldnIgPSBSUE1UQUdfUkVRVUlSRVZFUlNJT047CisgCWYgPSBSUE1UQUdfUkVRVUlSRUZMQUdTOworKyAgICB9IGVsc2UgaWYgKHRhZyA9PSBSUE1UQUdfU1VQUExFTUVOVE5BTUUpIHsKKysJdCA9ICJTdXBwbGVtZW50cyI7CisrCWV2ciA9IFJQTVRBR19TVVBQTEVNRU5UVkVSU0lPTjsKKysJZiA9IFJQTVRBR19TVVBQTEVNRU5URkxBR1M7CisrICAgIH0gZWxzZSBpZiAodGFnID09IFJQTVRBR19FTkhBTkNFTkFNRSkgeworKwl0ID0gIkVuaGFuY2VzIjsKKysJZXZyID0gUlBNVEFHX0VOSEFOQ0VWRVJTSU9OOworKwlmID0gUlBNVEFHX0VOSEFOQ0VGTEFHUzsKKysgICAgfSBlbHNlIGlmICh0YWcgPT0gUlBNVEFHX1JFQ09NTUVORE5BTUUpIHsKKysJdCA9ICJSZWNvbW1lbmRzIjsKKysJZXZyID0gUlBNVEFHX1JFQ09NTUVORFZFUlNJT047CisrCWYgPSBSUE1UQUdfUkVDT01NRU5ERkxBR1M7CisrICAgIH0gZWxzZSBpZiAodGFnID09IFJQTVRBR19TVUdHRVNUTkFNRSkgeworKwl0ID0gIlN1Z2dlc3RzIjsKKysJZXZyID0gUlBNVEFHX1NVR0dFU1RWRVJTSU9OOworKwlmID0gUlBNVEFHX1NVR0dFU1RGTEFHUzsKKyAgICAgfSBlbHNlIGlmICh0YWcgPT0gUlBNVEFHX0NPTkZMSUNUTkFNRSkgeworIAl0ID0gIkNvbmZsaWN0cyI7CisgCWV2ciA9IFJQTVRBR19DT05GTElDVFZFUlNJT047CitkaWZmIC0tZ2l0IGEvbGliL3JwbXRhZy5oIGIvbGliL3JwbXRhZy5oCitpbmRleCA2NGIwM2YxLi5iOTQzMjI5IDEwMDY0NAorLS0tIGEvbGliL3JwbXRhZy5oCisrKysgYi9saWIvcnBtdGFnLmgKK0BAIC0yMTcsMTQgKzIxNywxNCBAQCB0eXBlZGVmIGVudW0gcnBtVGFnX2UgeworICAgICBSUE1UQUdfUFJFVFJBTlNQUk9HCQk9IDExNTMsCS8qIHNbXSAqLworICAgICBSUE1UQUdfUE9TVFRSQU5TUFJPRwk9IDExNTQsCS8qIHNbXSAqLworICAgICBSUE1UQUdfRElTVFRBRwkJPSAxMTU1LAkvKiBzICovCistICAgIFJQTVRBR19TVUdHRVNUU05BTUUJCT0gMTE1NiwJLyogc1tdIGV4dGVuc2lvbiAodW5pbXBsZW1lbnRlZCkgKi8KKy0jZGVmaW5lCVJQTVRBR19TVUdHRVNUUyBSUE1UQUdfU1VHR0VTVFNOQU1FCS8qIHNbXSAodW5pbXBsZW1lbnRlZCkgKi8KKy0gICAgUlBNVEFHX1NVR0dFU1RTVkVSU0lPTgk9IDExNTcsCS8qIHNbXSBleHRlbnNpb24gKHVuaW1wbGVtZW50ZWQpICovCistICAgIFJQTVRBR19TVUdHRVNUU0ZMQUdTCT0gMTE1OCwJLyogaVtdIGV4dGVuc2lvbiAodW5pbXBsZW1lbnRlZCkgKi8KKy0gICAgUlBNVEFHX0VOSEFOQ0VTTkFNRQkJPSAxMTU5LAkvKiBzW10gZXh0ZW5zaW9uIHBsYWNlaG9sZGVyICh1bmltcGxlbWVudGVkKSAqLworLSNkZWZpbmUJUlBNVEFHX0VOSEFOQ0VTIFJQTVRBR19FTkhBTkNFU05BTUUJLyogc1tdICh1bmltcGxlbWVudGVkKSAqLworLSAgICBSUE1UQUdfRU5IQU5DRVNWRVJTSU9OCT0gMTE2MCwJLyogc1tdIGV4dGVuc2lvbiBwbGFjZWhvbGRlciAodW5pbXBsZW1lbnRlZCkgKi8KKy0gICAgUlBNVEFHX0VOSEFOQ0VTRkxBR1MJPSAxMTYxLAkvKiBpW10gZXh0ZW5zaW9uIHBsYWNlaG9sZGVyICh1bmltcGxlbWVudGVkKSAqLworKyAgICBSUE1UQUdfT0xEU1VHR0VTVFNOQU1FCT0gMTE1NiwJLyogc1tdICh1bmltcGxlbWVudGVkKSAqLworKyNkZWZpbmUJUlBNVEFHX09MRFNVR0dFU1RTIFJQTVRBR19PTERTVUdHRVNUU05BTUUgLyogc1tdICh1bmltcGxlbWVudGVkKSAqLworKyAgICBSUE1UQUdfT0xEU1VHR0VTVFNWRVJTSU9OCT0gMTE1NywJLyogc1tdICh1bmltcGxlbWVudGVkKSAqLworKyAgICBSUE1UQUdfT0xEU1VHR0VTVFNGTEFHUwk9IDExNTgsCS8qIGlbXSAodW5pbXBsZW1lbnRlZCkgKi8KKysgICAgUlBNVEFHX09MREVOSEFOQ0VTTkFNRQkJPSAxMTU5LAkvKiBzW10gKHVuaW1wbGVtZW50ZWQpICovCisrI2RlZmluZQlSUE1UQUdfT0xERU5IQU5DRVMgUlBNVEFHX09MREVOSEFOQ0VTTkFNRSAvKiBzW10gKHVuaW1wbGVtZW50ZWQpICovCisrICAgIFJQTVRBR19PTERFTkhBTkNFU1ZFUlNJT04JPSAxMTYwLAkvKiBzW10gKHVuaW1wbGVtZW50ZWQpICovCisrICAgIFJQTVRBR19PTERFTkhBTkNFU0ZMQUdTCT0gMTE2MSwJLyogaVtdICh1bmltcGxlbWVudGVkKSAqLworICAgICBSUE1UQUdfUFJJT1JJVFkJCT0gMTE2MiwgLyogaVtdIGV4dGVuc2lvbiBwbGFjZWhvbGRlciAodW5pbXBsZW1lbnRlZCkgKi8KKyAgICAgUlBNVEFHX0NWU0lECQk9IDExNjMsIC8qIHMgKHVuaW1wbGVtZW50ZWQpICovCisgI2RlZmluZQlSUE1UQUdfU1ZOSUQJUlBNVEFHX0NWU0lECS8qIHMgKHVuaW1wbGVtZW50ZWQpICovCitAQCAtMjYxLDYgKzI2MSw3IEBAIHR5cGVkZWYgZW51bSBycG1UYWdfZSB7CisgICAgIFJQTVRBR19CVUlMRE9CU09MRVRFUwk9IDExOTQsIC8qIGludGVybmFsICh1bmltcGxlbWVudGVkKSAqLworICAgICBSUE1UQUdfREJJTlNUQU5DRQkJPSAxMTk1LCAvKiBpIGV4dGVuc2lvbiAqLworICAgICBSUE1UQUdfTlZSQQkJCT0gMTE5NiwgLyogcyBleHRlbnNpb24gKi8KKysKKyAgICAgLyogdGFncyAxOTk3LTQ5OTkgcmVzZXJ2ZWQgKi8KKyAgICAgUlBNVEFHX0ZJTEVOQU1FUwkJPSA1MDAwLCAvKiBzW10gZXh0ZW5zaW9uICovCisgICAgIFJQTVRBR19GSUxFUFJPVklERQkJPSA1MDAxLCAvKiBzW10gZXh0ZW5zaW9uICovCitAQCAtMzA3LDYgKzMwOCwyNiBAQCB0eXBlZGVmIGVudW0gcnBtVGFnX2UgeworICAgICBSUE1UQUdfT0JTT0xFVEVORVZSUwk9IDUwNDMsIC8qIHNbXSBleHRlbnNpb24gKi8KKyAgICAgUlBNVEFHX0NPTkZMSUNUTkVWUlMJPSA1MDQ0LCAvKiBzW10gZXh0ZW5zaW9uICovCisgICAgIFJQTVRBR19GSUxFTkxJTktTCQk9IDUwNDUsCS8qIGlbXSBleHRlbnNpb24gKi8KKysgICAgUlBNVEFHX1JFQ09NTUVORE5BTUUJPSA1MDQ2LAkvKiBzW10gKi8KKysjZGVmaW5lCVJQTVRBR19SRUNPTU1FTkRTIFJQTVRBR19SRUNPTU1FTkROQU1FCS8qIHNbXSAqLworKyAgICBSUE1UQUdfUkVDT01NRU5EVkVSU0lPTgk9IDUwNDcsCS8qIHNbXSAqLworKyAgICBSUE1UQUdfUkVDT01NRU5ERkxBR1MJPSA1MDQ4LAkvKiBpW10gKi8KKysgICAgUlBNVEFHX1NVR0dFU1ROQU1FCQk9IDUwNDksCS8qIHNbXSAqLworKyNkZWZpbmUJUlBNVEFHX1NVR0dFU1RTIFJQTVRBR19TVUdHRVNUTkFNRQkvKiBzW10gKi8KKysgICAgUlBNVEFHX1NVR0dFU1RWRVJTSU9OCT0gNTA1MCwJLyogc1tdIGV4dGVuc2lvbiAqLworKyAgICBSUE1UQUdfU1VHR0VTVEZMQUdTCQk9IDUwNTEsCS8qIGlbXSBleHRlbnNpb24gKi8KKysgICAgUlBNVEFHX1NVUFBMRU1FTlROQU1FCT0gNTA1MiwJLyogc1tdICovCisrI2RlZmluZQlSUE1UQUdfU1VQUExFTUVOVFMgUlBNVEFHX1NVUFBMRU1FTlROQU1FIC8qIHNbXSAqLworKyAgICBSUE1UQUdfU1VQUExFTUVOVFZFUlNJT04JPSA1MDUzLAkvKiBzW10gKi8KKysgICAgUlBNVEFHX1NVUFBMRU1FTlRGTEFHUwk9IDUwNTQsCS8qIGlbXSAqLworKyAgICBSUE1UQUdfRU5IQU5DRU5BTUUJCT0gNTA1NSwJLyogc1tdICovCisrI2RlZmluZQlSUE1UQUdfRU5IQU5DRVMgUlBNVEFHX0VOSEFOQ0VOQU1FCS8qIHNbXSAqLworKyAgICBSUE1UQUdfRU5IQU5DRVZFUlNJT04JPSA1MDU2LAkvKiBzW10gKi8KKysgICAgUlBNVEFHX0VOSEFOQ0VGTEFHUwkJPSA1MDU3LAkvKiBpW10gKi8KKysgICAgUlBNVEFHX1JFQ09NTUVORE5FVlJTCT0gNTA1OCwgLyogc1tdIGV4dGVuc2lvbiAqLworKyAgICBSUE1UQUdfU1VHR0VTVE5FVlJTCQk9IDUwNTksIC8qIHNbXSBleHRlbnNpb24gKi8KKysgICAgUlBNVEFHX1NVUFBMRU1FTlRORVZSUwk9IDUwNjAsIC8qIHNbXSBleHRlbnNpb24gKi8KKysgICAgUlBNVEFHX0VOSEFOQ0VORVZSUwkJPSA1MDYxLCAvKiBzW10gZXh0ZW5zaW9uICovCisgCisgICAgIFJQTVRBR19GSVJTVEZSRUVfVEFHCS8qITwgaW50ZXJuYWwgKi8KKyB9IHJwbVRhZzsKK2RpZmYgLS1naXQgYS9saWIvdGFnZXh0cy5jIGIvbGliL3RhZ2V4dHMuYworaW5kZXggMjliMmJhZS4uZTk0MDMxMCAxMDA2NDQKKy0tLSBhL2xpYi90YWdleHRzLmMKKysrKyBiL2xpYi90YWdleHRzLmMKK0BAIC03NjEsNiArNzYxLDI2IEBAIHN0YXRpYyBpbnQgcmVxdWlyZW5ldnJzVGFnKEhlYWRlciBoLCBycG10ZCB0ZCwgaGVhZGVyR2V0RmxhZ3MgaGdmbGFncykKKyAgICAgcmV0dXJuIGRlcG5ldnJzVGFnKGgsIHRkLCBoZ2ZsYWdzLCBSUE1UQUdfUkVRVUlSRU5BTUUpOworIH0KKyAKKytzdGF0aWMgaW50IHJlY29tbWVuZG5ldnJzVGFnKEhlYWRlciBoLCBycG10ZCB0ZCwgaGVhZGVyR2V0RmxhZ3MgaGdmbGFncykKKyt7CisrICAgIHJldHVybiBkZXBuZXZyc1RhZyhoLCB0ZCwgaGdmbGFncywgUlBNVEFHX1JFQ09NTUVORE5BTUUpOworK30KKysKKytzdGF0aWMgaW50IHN1Z2dlc3RuZXZyc1RhZyhIZWFkZXIgaCwgcnBtdGQgdGQsIGhlYWRlckdldEZsYWdzIGhnZmxhZ3MpCisreworKyAgICByZXR1cm4gZGVwbmV2cnNUYWcoaCwgdGQsIGhnZmxhZ3MsIFJQTVRBR19TVUdHRVNUTkFNRSk7CisrfQorKworK3N0YXRpYyBpbnQgc3VwcGxlbWVudG5ldnJzVGFnKEhlYWRlciBoLCBycG10ZCB0ZCwgaGVhZGVyR2V0RmxhZ3MgaGdmbGFncykKKyt7CisrICAgIHJldHVybiBkZXBuZXZyc1RhZyhoLCB0ZCwgaGdmbGFncywgUlBNVEFHX1NVUFBMRU1FTlROQU1FKTsKKyt9CisrCisrc3RhdGljIGludCBlbmhhbmNlbmV2cnNUYWcoSGVhZGVyIGgsIHJwbXRkIHRkLCBoZWFkZXJHZXRGbGFncyBoZ2ZsYWdzKQorK3sKKysgICAgcmV0dXJuIGRlcG5ldnJzVGFnKGgsIHRkLCBoZ2ZsYWdzLCBSUE1UQUdfRU5IQU5DRU5BTUUpOworK30KKysKKyBzdGF0aWMgaW50IHByb3ZpZGVuZXZyc1RhZyhIZWFkZXIgaCwgcnBtdGQgdGQsIGhlYWRlckdldEZsYWdzIGhnZmxhZ3MpCisgeworICAgICByZXR1cm4gZGVwbmV2cnNUYWcoaCwgdGQsIGhnZmxhZ3MsIFJQTVRBR19QUk9WSURFTkFNRSk7CitAQCAtODIzLDYgKzg0MywxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGhlYWRlclRhZ0Z1bmNfcyBycG1IZWFkZXJUYWdFeHRlbnNpb25zW10gPSB7CisgICAgIHsgUlBNVEFHX0VQT0NITlVNLAkJZXBvY2hudW1UYWcgfSwKKyAgICAgeyBSUE1UQUdfSU5TVEZJTEVOQU1FUywJaW5zdGZpbGVuYW1lc1RhZyB9LAorICAgICB7IFJQTVRBR19SRVFVSVJFTkVWUlMsCXJlcXVpcmVuZXZyc1RhZyB9LAorKyAgICB7IFJQTVRBR19SRUNPTU1FTkRORVZSUywJcmVjb21tZW5kbmV2cnNUYWd9LAorKyAgICB7IFJQTVRBR19TVUdHRVNUTkVWUlMsCXN1Z2dlc3RuZXZyc1RhZ30sCisrICAgIHsgUlBNVEFHX1NVUFBMRU1FTlRORVZSUywJc3VwcGxlbWVudG5ldnJzVGFnfSwKKysgICAgeyBSUE1UQUdfRU5IQU5DRU5FVlJTLAllbmhhbmNlbmV2cnNUYWd9LAorICAgICB7IFJQTVRBR19QUk9WSURFTkVWUlMsCXByb3ZpZGVuZXZyc1RhZyB9LAorICAgICB7IFJQTVRBR19PQlNPTEVURU5FVlJTLAlvYnNvbGV0ZW5ldnJzVGFnIH0sCisgICAgIHsgUlBNVEFHX0NPTkZMSUNUTkVWUlMsCWNvbmZsaWN0bmV2cnNUYWcgfSwKK2RpZmYgLS1naXQgYS9ycG1wb3B0LmluIGIvcnBtcG9wdC5pbgoraW5kZXggODA1NTk5ZS4uMDM2YWI0ZSAxMDA2NDQKKy0tLSBhL3JwbXBvcHQuaW4KKysrKyBiL3JwbXBvcHQuaW4KK0BAIC02Nyw2ICs2NywxOSBAQCBycG0JYWxpYXMgLS1yZXF1aXJlcwktLXFmIFwKKyAJLS1QT1BUZGVzYz0kImxpc3QgY2FwYWJpbGl0aWVzIHJlcXVpcmVkIGJ5IHBhY2thZ2UocykiCisgcnBtCWFsaWFzIC1SIC0tcmVxdWlyZXMKKyAKKytycG0JYWxpYXMgLS1yZWNvbW1lbmRzCS0tcWYgXAorKyAgIlslfFZFUkJPU0U/eyV7UkVDT01NRU5ERkxBR1M6ZGVwdHlwZX06IH06e318JXtSRUNPTU1FTkRORVZSU31cbl0iIFwKKysJLS1QT1BUZGVzYz0kImxpc3QgY2FwYWJpbGl0aWVzIHJlY29tbWVuZGVkIGJ5IHBhY2thZ2UocykiCisrcnBtCWFsaWFzIC0tc3VnZ2VzdHMJLS1xZiBcCisrICAiWyV8VkVSQk9TRT97JXtTVUdHRVNURkxBR1M6ZGVwdHlwZX06IH06e318JXtTVUdHRVNUTkVWUlN9XG5dIiBcCisrCS0tUE9QVGRlc2M9JCJsaXN0IGNhcGFiaWxpdGllcyBzdWdnZXN0ZWQgYnkgcGFja2FnZShzKSIKKytycG0JYWxpYXMgLS1zdXBwbGVtZW50cwktLXFmIFwKKysgICJbJXxWRVJCT1NFP3sle1NVUFBMRU1FTlRGTEFHUzpkZXB0eXBlfTogfTp7fXwle1NVUFBMRU1FTlRORVZSU31cbl0iIFwKKysJLS1QT1BUZGVzYz0kImxpc3QgY2FwYWJpbGl0aWVzIHN1cHBsZW1lbnRlZCBieSBwYWNrYWdlKHMpIgorK3JwbQlhbGlhcyAtLWVuaGFuY2VzCS0tcWYgXAorKyAgIlslfFZFUkJPU0U/eyV7RU5IQU5DRUZMQUdTOmRlcHR5cGV9OiB9Ont9fCV7RU5IQU5DRU5FVlJTfVxuXSIgXAorKwktLVBPUFRkZXNjPSQibGlzdCBjYXBhYmlsaXRpZXMgZW5oYW5jZWQgYnkgcGFja2FnZShzKSIKKysKKyBycG0JYWxpYXMgLS1pbmZvIC0tcWYgJ1wKKyBOYW1lICAgICAgICA6ICV7TkFNRX1cblwKKyAlfEVQT0NIP3tFcG9jaCAgICAgICA6ICV7RVBPQ0h9XG59fFwKK2RpZmYgLS1naXQgYS90ZXN0cy9kYXRhL1NQRUNTL2RlcHRlc3Quc3BlYyBiL3Rlc3RzL2RhdGEvU1BFQ1MvZGVwdGVzdC5zcGVjCitpbmRleCBjYjRjYmJkLi43YzQ3ZjZkIDEwMDY0NAorLS0tIGEvdGVzdHMvZGF0YS9TUEVDUy9kZXB0ZXN0LnNwZWMKKysrKyBiL3Rlc3RzL2RhdGEvU1BFQ1MvZGVwdGVzdC5zcGVjCitAQCAtMTAsNiArMTAsMTAgQEAgQnVpbGRBcmNoOglub2FyY2gKKyAlez9wcm92czpQcm92aWRlczogJXtwcm92c319CisgJXs/Y2ZsczpDb25mbGljdHM6ICV7Y2Zsc319CisgJXs/b2JzOk9ic29sZXRlczogJXtvYnN9fQorKyV7P3JlY3M6UmVjb21tZW5kczogJXtyZWNzfX0KKyslez9zdWdzOlN1Z2dlc3RzOiAle3N1Z3N9fQorKyV7P3N1cHM6U3VwcGxlbWVudHM6ICV7c3Vwc319CisrJXs/ZW5zOkVuaGFuY2VzOiAle2Vuc319CisgCisgJWRlc2NyaXB0aW9uCisgJXtzdW1tYXJ5fQorZGlmZiAtLWdpdCBhL3Rlc3RzL3JwbWJ1aWxkLmF0IGIvdGVzdHMvcnBtYnVpbGQuYXQKK2luZGV4IDYyMzA5MDMuLmM0Yzk1NGMgMTAwNjQ0CistLS0gYS90ZXN0cy9ycG1idWlsZC5hdAorKysrIGIvdGVzdHMvcnBtYnVpbGQuYXQKK0BAIC0xODUsMyArMTg1LDI1IEBAIGxyd3hyd3hyd3ggL29wdC9nbG9idGVzdC9saW5rZ29vZAorIF0sCisgW10pCisgQVRfQ0xFQU5VUAorKworKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBDaGVjayBpZiB3ZWFrIGFuZCByZXZlcnNlIHJlcXVpcmVzIGNhbiBiZSBidWlsdAorK0FUX1NFVFVQKFtXZWFrIGFuZCByZXZlcnNlIHJlcXVpcmVzXSkKKytBVF9LRVlXT1JEUyhbYnVpbGRdKQorK0FUX0NIRUNLKFsKKysKKytydW5yb290IHJwbWJ1aWxkIC1iYiAtLXF1aWV0IFwKKysJLS1kZWZpbmUgInBrZyB3ZWFrZGVwcyIgXAorKwktLWRlZmluZSAicmVjcyBmb28gPiAxLjIuMyIgXAorKwktLWRlZmluZSAic3VncyBiYXIgPj0gMC4xLjIiIFwKKysJLS1kZWZpbmUgInN1cHMgYmF6IiBcCisrCS0tZGVmaW5lICJlbnMgemFwID0gMyIgXAorKwkgIC9kYXRhL1NQRUNTL2RlcHRlc3Quc3BlYworKworK3J1bnJvb3QgcnBtIC1xcCAtLXFmICJbJXtzdXBwbGVtZW50bmFtZX1cbl0iIC9idWlsZC9SUE1TL25vYXJjaC9kZXB0ZXN0LXdlYWtkZXBzLTEuMC0xLm5vYXJjaC5ycG0KKytdLAorK1swXSwKKytbYmF6CisrXSwKKytbaWdub3JlXSkKKytBVF9DTEVBTlVQCitkaWZmIC0tZ2l0IGEvdGVzdHMvcnBtZ2VuZXJhbC5hdCBiL3Rlc3RzL3JwbWdlbmVyYWwuYXQKK2luZGV4IDEzMTMxZTIuLjgwY2NhNjMgMTAwNjQ0CistLS0gYS90ZXN0cy9ycG1nZW5lcmFsLmF0CisrKysgYi90ZXN0cy9ycG1nZW5lcmFsLmF0CitAQCAtNzksNiArNzksMTEgQEAgRElTVFRBRworIERJU1RVUkwKKyBEU0FIRUFERVIKKyBFCisrRU5IQU5DRUZMQUdTCisrRU5IQU5DRU5BTUUKKytFTkhBTkNFTkVWUlMKKytFTkhBTkNFUworK0VOSEFOQ0VWRVJTSU9OCisgRVBPQ0gKKyBFUE9DSE5VTQorIEVWUgorQEAgLTE5OSw2ICsyMDQsMTEgQEAgUFJPVklERVMKKyBQUk9WSURFVkVSU0lPTgorIFBVQktFWVMKKyBSCisrUkVDT01NRU5ERkxBR1MKKytSRUNPTU1FTkROQU1FCisrUkVDT01NRU5ETkVWUlMKKytSRUNPTU1FTkRTCisrUkVDT01NRU5EVkVSU0lPTgorIFJFQ09OVEVYVFMKKyBSRUxFQVNFCisgUkVNT1ZFVElECitAQCAtMjE5LDcgKzIyOSwxNyBAQCBTT1VSQ0UKKyBTT1VSQ0VQQUNLQUdFCisgU09VUkNFUEtHSUQKKyBTT1VSQ0VSUE0KKytTVUdHRVNURkxBR1MKKytTVUdHRVNUTkFNRQorK1NVR0dFU1RORVZSUworK1NVR0dFU1RTCisrU1VHR0VTVFZFUlNJT04KKyBTVU1NQVJZCisrU1VQUExFTUVOVEZMQUdTCisrU1VQUExFTUVOVE5BTUUKKytTVVBQTEVNRU5UTkVWUlMKKytTVVBQTEVNRU5UUworK1NVUFBMRU1FTlRWRVJTSU9OCisgVFJJR0dFUkNPTkRTCisgVFJJR0dFUkZMQUdTCisgVFJJR0dFUklOREVYCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi91c2UtcGtnY29uZmlnLWZvci1weXRob24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi91c2UtcGtnY29uZmlnLWZvci1weXRob24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ4NGNmOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3VzZS1wa2djb25maWctZm9yLXB5dGhvbi5wYXRjaApAQCAtMCwwICsxLDM4IEBACisKK1VzZSBwa2djb25maWcgdG8gZ2V0IHRoZSBjb3JyZWN0IGluY2x1ZGUgcGF0aHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvbmFuIExlIE1hcnRyZXQgPHJvbmFuLmxlbWFydHJldEBvcGVuLmV1cm9naWNpZWwub3JnPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBlOTdmNzI3Li44MTc5ZjQ0IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01NDAsMTAgKzU0MCwxMCBAQCBlc2FjXSwKKyAKKyBBU19JRihbdGVzdCAiJGVuYWJsZV9weXRob24iID0geWVzXSxbCisgICBBTV9QQVRIX1BZVEhPTihbMi42XSxbCistICAgIFdJVEhfUFlUSE9OX0lOQ0xVREU9YCR7UFlUSE9OfSAtYyAnZnJvbSBkaXN0dXRpbHMuc3lzY29uZmlnIGltcG9ydCAqOyBpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKGdldF9weXRob25faW5jKCkpJ2AKKysgICAgV0lUSF9QWVRIT05fSU5DTFVERT0kKCR7UEtHX0NPTkZJR30gLS1jZmxhZ3Mtb25seS1JICBweXRob24pCisgICAgIFdJVEhfUFlUSE9OX1NVQlBBQ0tBR0U9MQorICAgICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCistICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkV0lUSF9QWVRIT05fSU5DTFVERSIKKysgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkV0lUSF9QWVRIT05fSU5DTFVERSIKKyAgICAgQUNfQ0hFQ0tfSEVBREVSKFtQeXRob24uaF0sW10sCisgICAgICAgW0FDX01TR19FUlJPUihbbWlzc2luZyBQeXRob24uaF0pCisgICAgICAgXSkKK2RpZmYgLS1naXQgYS9weXRob24vTWFrZWZpbGUuYW0gYi9weXRob24vTWFrZWZpbGUuYW0KK2luZGV4IGZmZjUxYWUuLmYzN2NiOWQgMTAwNjQ0CistLS0gYS9weXRob24vTWFrZWZpbGUuYW0KKysrKyBiL3B5dGhvbi9NYWtlZmlsZS5hbQorQEAgLTQsNyArNCw3IEBAIEVYVFJBX0RJU1QgPSBycG0vX19pbml0X18ucHkgcnBtL3RyYW5zYWN0aW9uLnB5CisgCisgQU1fQ1BQRkxBR1MgPSAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlLworIEFNX0NQUEZMQUdTICs9IC1JJCh0b3Bfc3JjZGlyKS9weXRob24KKy1BTV9DUFBGTEFHUyArPSAtSUBXSVRIX1BZVEhPTl9JTkNMVURFQAorK0FNX0NQUEZMQUdTICs9IEBXSVRIX1BZVEhPTl9JTkNMVURFQAorIAorIHBrZ3B5ZXhlY19MVExJQlJBUklFUyA9IF9ycG1tb2R1bGUubGEgX3JwbWJtb2R1bGUubGEgX3JwbXNtb2R1bGUubGEKKyBwa2dweWV4ZWNfREFUQSA9IHJwbS9fX2luaXRfXy5weSBycG0vdHJhbnNhY3Rpb24ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vMDAwMS11c2luZy1wb3B0UGFyc2VBcmd2U3RyaW5nLXRvLXBhcnNlLXRoZS1fZ3BnX2NoZWNrX3BhLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS8wMDAxLXVzaW5nLXBvcHRQYXJzZUFyZ3ZTdHJpbmctdG8tcGFyc2UtdGhlLV9ncGdfY2hlY2tfcGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiYzMzNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vMDAwMS11c2luZy1wb3B0UGFyc2VBcmd2U3RyaW5nLXRvLXBhcnNlLXRoZS1fZ3BnX2NoZWNrX3BhLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK0Zyb20gNjQ4NTFjNjYyMmFmZjY0Nzg3YTlmY2VhMjZjY2NkZTE4M2I3Yzc0MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJSb3kuTGkiIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxMSBOb3YgMjAxNCAxNjoyODoyMiArMDgwMAorU3ViamVjdDogW1BBVENIXSB1c2luZyBwb3B0UGFyc2VBcmd2U3RyaW5nIHRvIHBhcnNlIHRoZQorIF9ncGdfY2hlY2tfcGFzc3dvcmRfY21kCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitCb3RoIF9fZ3BnX2NoZWNrX3Bhc3N3b3JkX2NtZCBhbmQgX19ncGdfc2lnbl9jbWQgaW5jbHVkZSAiJXtfZ3BnX25hbWV9IiwgYnV0CitzdHJhY2Ugc2hvd3MgdGhhdCBncGdfbmFtZSBoYXMgYSBxdW90ZSB3aGVuIHJ1biBfZ3BnX2NoZWNrX3Bhc3N3b3JkLAorYnV0IG5vdCB3aGVuIHJ1biBfX2dwZ19zaWduX2NtZDsgZm9yIGV4YW1wbGUsIGlmIGdwZ19uYW1lIGlzICJ0ZXN0ZXIiCisKKyAgICBleGVjdmUoIi91c3IvYmluL2dwZyIsIFsiZ3BnIiwgIi0tYmF0Y2giLCAiLS1uby12ZXJib3NlIiwKKyAgICAiLS1wYXNzcGhyYXNlLWZkIiwgIjMiLCAiLXUiLCAiXCJ0ZXN0ZXJcIiIsICItc28iLCAiLSJdLCBbLyogMjAgdmFycyAqL10pID0gMAorCisgICAgZXhlY3ZlKCIvdXNyL2Jpbi9ncGciLCBbImdwZyIsICItLWJhdGNoIiwgIi0tbm8tdmVyYm9zZSIsICItLW5vLWFybW9yIiwKKyAgICAiLS1wYXNzcGhyYXNlLWZkIiwgIjMiLCAiLS1uby1zZWNtZW0td2FybmluZyIsICItdSIsICJ0ZXN0ZXIiLCAiLXNibyIuLiwpID0gMAorCitpdCBjYW4gYmUgZml4ZWQgYnkgcmVtb3ZpbmcgdGhlIHF1b3RlIGFyb3VuZCAle2dwZ19uYW1lfSB3aGVuIGRlZmluZQorX19ncGdfY2hlY2tfcGFzc3dvcmRfY21kIGluIG1hY3Jvcy9tYWNyb3MsIGxpa2UgYmVsb3csIGJ1dCBpZiBncGdfbmFtZSBpbmNsdWRlcworc3BhY2UsIGl0IHdpbGwgbm90IHdvcmsuCisKKyAgICAgJV9fZ3BnX2NoZWNrX3Bhc3N3b3JkX2NtZCAgICAgICAle19fZ3BnfSBcCisgICAgICAgIGdwZyAtLWJhdGNoIC0tbm8tdmVyYm9zZSAtLXBhc3NwaHJhc2UtZmQgMyAtdSAle19ncGdfbmFtZX0gLXNvIC0KKworVGhlIHBvcHRQYXJzZUFyZ3ZTdHJpbmcgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBfZ3BnX3NpZ25fY21kLCBzbyB1c2luZworcG9wdFBhcnNlQXJndlN0cmluZyB0byBwYXJzZSBfX2dwZ19jaGVja19wYXNzd29yZF9jbWQgdG8gZml4IHRoaXMgaXNzdWUuCisKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIHJwbWRiL3NpZ25hdHVyZS5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvcnBtZGIvc2lnbmF0dXJlLmMgYi9ycG1kYi9zaWduYXR1cmUuYworaW5kZXggYzM1ZTBhYi4uMDE2ZThkMSAxMDA2NDQKKy0tLSBhL3JwbWRiL3NpZ25hdHVyZS5jCisrKysgYi9ycG1kYi9zaWduYXR1cmUuYworQEAgLTUyOSw3ICs1MjksNyBAQCBpbnQgcnBtQ2hlY2tQYXNzUGhyYXNlKGNvbnN0IGNoYXIgKiBwYXNzUGhyYXNlKQorICAgCQkodm9pZCkgc2V0ZW52KCJHTlVQR0hPTUUiLCBncGdfcGF0aCwgMSk7CisgCisgCSAgICBjbWQgPSBycG1FeHBhbmQoIiV7P19fZ3BnX2NoZWNrX3Bhc3N3b3JkX2NtZH0iLCBOVUxMKTsKKy0JICAgIHJjID0gYXJndlNwbGl0KCZhdiwgY21kLCBOVUxMKTsKKysJICAgIHJjID0gcG9wdFBhcnNlQXJndlN0cmluZyhjbWQsIE5VTEwsIChjb25zdCBjaGFyICoqKikmYXYpOworIAkgICAgaWYgKCFyYykKKyAJCXJjID0gZXhlY3ZlKGF2WzBdLCAoY2hhciAqY29uc3QgKilhdisxLCBlbnZpcm9uKTsKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9kYmNvbnZlcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2RiY29udmVydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmRiZjA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9kYmNvbnZlcnQucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK0hhY2sgdG8gcHJldmVudCB1bm5lZWRlZCBkZW1vIGFwcCBmcm9tIGJ1aWxkaW5nIG9uIG9sZGVyIGxpYmMKK3doZXJlIGl0IHdpbGwgYnJlYWsgdGhlIGJ1aWxkCisKK0luZGV4OiBycG0tNS40LjE0L3Rvb2xzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3Rvb2xzL01ha2VmaWxlLmFtCisrKysgcnBtLTUuNC4xNC90b29scy9NYWtlZmlsZS5hbQorQEAgLTI5LDcgKzI5LDcgQEAgRVhUUkFfUFJPR1JBTVMgPSBuaXgtY29weS1jbG9zdXJlIG5peC1lbgorIAl4aXUtaW5zdGFudGlhdGUgeGl1LXN0b3JlCisgbm9pbnN0X1BST0dSQU1TID0KKyAKKy1FWFRSQV9QUk9HUkFNUyArPSBhdWd0b29sIGN1ZGZ0b29sIGRiY29udmVydCBkZWJ1Z2VkaXQgXAorK0VYVFJBX1BST0dSQU1TICs9IGF1Z3Rvb2wgY3VkZnRvb2wgZGVidWdlZGl0IFwKKyAJbml4LWJ1aWxkIG5peC1jaGFubmVsIG5peC1jb2xsZWN0LWdhcmJhZ2UgXAorIAluaXgtbG9nMnhtbCBuaXgtcHJlZmV0Y2gtdXJsIG5peC1wdWxsIG5peC1wdXNoIFwKKyAJeGl1LWVjaG8geGl1LWhhc2ggXAorQEAgLTY0LDcgKzY0LDcgQEAgcGtnYmluX1BST0dSQU1TID0JXAorIAlycG1jYWNoZSBycG1kaWdlc3QgcnBtcmVwbyBycG1zcGVjZHVtcCBcCisgCXJwbWNtcCBycG1kZXBzIHJwbWRlcHMtb2Vjb3JlIHNxbGl0ZTMgQFdJVEhfS0VZVVRJTFNfUlBNS0VZQCBAV0lUSF9MSUJFTEZfREVCVUdFRElUQAorIGlmIFdJVEhfREIKKy1wa2diaW5fUFJPR1JBTVMgKz0JZGJjb252ZXJ0CisrcGtnYmluX1BST0dSQU1TICs9CQorIGVuZGlmCisgZGlzdF9tYW5fTUFOUyA9CQlycG1ncmVwLjEKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZGVidWdlZGl0LXNlZ3YucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2RlYnVnZWRpdC1zZWd2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZWY1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2RlYnVnZWRpdC1zZWd2LnBhdGNoCkBAIC0wLDAgKzEsOTggQEAKK0R1cmluZyB0aGUgcmVjYWxjdWxhdGlvbiBvZiB0aGUgYnVpbGRpZCwgaXQncyBuZWNlc3NhcnkgdG8gY2hhbmdlIHRoZSB3b3JkCitiYWNrIHRvIHRoZSBvcmlnaW5hbCBlbmRpYW4uICBIb3dldmVyLCBpZiB3ZSBkbyB0aGlzIGluLXBsYWNlLCB3ZSd2ZSBhbHNvCithZmZlY3RlZCB0aGUgaGVhZGVycyB0aGF0IHdlJ3JlIGFsc28gd29ya2luZyBvbi4gIFRoZSBzaWRlIGVmZmVjdCBvZiB0aGlzIGlzCit3ZSBjYW4gbm8gbG9uZ2VyIHJlbHkgb24gJ3NoX3R5cGUnIGFzIGl0IG1heSBoYXZlIGJlZW4gY2hhbmdlZC4KKworVGhpcyBwYXRjaCBlbnN1cmVzIHRoYXQgYW55IHRpbWUgd2UgdHJhbnNsYXRlIHRoZSBsb2FkZWQgZGF0YSB0byB0aGUgbWFjaGluZQorZm9ybWF0LCB3ZSBvbmx5IGRvIGl0IGluIGEgYmFja3VwIGNvcHkgYW5kIG5ldmVyIHRoZSBvcmlnaW5hbCBjb3B5LgorCitOb3RlOiBpbiBhbGwgb3RoZXIgcGxhY2VzIGEgYmFja3VwIGNvcHkgd2FzIHVzZWQsIGp1c3Qgbm90IGJ1aWxkaWQgcHJvY2Vzc2luZy4KKworQWxzbyB0aGUgcHJvY2VzcyAoLi4uKSBmdW5jdGlvbiB3YXMgbW9kaWZpZWQgdG8gdmVyaWZ5IHRoZSBkYXRhIGlzIG5vdAorTlVMTCBhcyB3ZWxsLiAgVGhpcyBpcyBhbiBleHRyYSBjaGVjayBhbmQgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvdG9vbHMvZGVidWdlZGl0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvdG9vbHMvZGVidWdlZGl0LmMKKysrKyBycG0tNS40LjE0L3Rvb2xzL2RlYnVnZWRpdC5jCitAQCAtMTQ0NSwyMSArMTQ0NSwyNCBAQCBoYW5kbGVfYnVpbGRfaWQgKERTTyAqZHNvLCBFbGZfRGF0YSAqYnVpCisgICAgIGF1dG8gaW5saW5lIHZvaWQgcHJvY2VzcyAoY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpCisgICAgIHsKKyAgICAgICBtZW1jaHVuayBjaHVuayA9IHsgLmRhdGEgPSAodm9pZCAqKSBkYXRhLCAuc2l6ZSA9IHNpemUgfTsKKy0gICAgICBoYXNoRnVuY3Rpb25Db250ZXh0VXBkYXRlTUMgKCZjdHgsICZjaHVuayk7CisrICAgICAgaWYgKGRhdGEgIT0gTlVMTCAmJiBzaXplICE9IDApCisrICAgICAgICBoYXNoRnVuY3Rpb25Db250ZXh0VXBkYXRlTUMgKCZjdHgsICZjaHVuayk7CisgICAgIH0KKyAgICAgdW5pb24KKyAgICAgeworICAgICAgIEdFbGZfRWhkciBlaGRyOworICAgICAgIEdFbGZfUGhkciBwaGRyOworICAgICAgIEdFbGZfU2hkciBzaGRyOworLSAgICB9IHU7CistICAgIEVsZl9EYXRhIHggPSB7IC5kX3ZlcnNpb24gPSBFVl9DVVJSRU5ULCAuZF9idWYgPSAmdSB9OworKyAgICB9IHUxLCB1MjsKKysgICAgRWxmX0RhdGEgc3JjICA9IHsgLmRfdmVyc2lvbiA9IEVWX0NVUlJFTlQsIC5kX2J1ZiA9ICZ1MSB9OworKyAgICBFbGZfRGF0YSBkZXN0ID0geyAuZF92ZXJzaW9uID0gRVZfQ1VSUkVOVCwgLmRfYnVmID0gJnUyIH07CisgCistICAgIHguZF90eXBlID0gRUxGX1RfRUhEUjsKKy0gICAgeC5kX3NpemUgPSBzaXplb2YgdS5laGRyOworLSAgICB1LmVoZHIgPSBkc28tPmVoZHI7CistICAgIHUuZWhkci5lX3Bob2ZmID0gdS5laGRyLmVfc2hvZmYgPSAwOworLSAgICBpZiAoZWxmNjRfeGxhdGV0b20gKCZ4LCAmeCwgZHNvLT5laGRyLmVfaWRlbnRbRUlfREFUQV0pID09IE5VTEwpCisrICAgIHNyYy5kX3R5cGUgPSBFTEZfVF9FSERSOworKyAgICBzcmMuZF9zaXplID0gc2l6ZW9mIHUxLmVoZHI7CisrICAgIGRlc3QuZF9zaXplID0gc2l6ZW9mIHUyLmVoZHI7CisrICAgIHUxLmVoZHIgPSBkc28tPmVoZHI7CisrICAgIHUxLmVoZHIuZV9waG9mZiA9IHUxLmVoZHIuZV9zaG9mZiA9IDA7CisrICAgIGlmIChlbGY2NF94bGF0ZXRvbSAoJmRlc3QsICZzcmMsIGRzby0+ZWhkci5lX2lkZW50W0VJX0RBVEFdKSA9PSBOVUxMKQorICAgICAgIHsKKyAgICAgICBiYWQ6CisgCWZwcmludGYgKHN0ZGVyciwgIkZhaWxlZCB0byBjb21wdXRlIGhlYWRlciBjaGVja3N1bTogJXNcbiIsCitAQCAtMTQ2NywyOSArMTQ3MCwzMSBAQCBoYW5kbGVfYnVpbGRfaWQgKERTTyAqZHNvLCBFbGZfRGF0YSAqYnVpCisgCWV4aXQgKDEpOworICAgICAgIH0KKyAKKy0gICAgeC5kX3R5cGUgPSBFTEZfVF9QSERSOworLSAgICB4LmRfc2l6ZSA9IHNpemVvZiB1LnBoZHI7CisrICAgIHNyYy5kX3R5cGUgPSBFTEZfVF9QSERSOworKyAgICBzcmMuZF9zaXplID0gc2l6ZW9mIHUxLnBoZHI7CisrICAgIGRlc3QuZF9zaXplID0gc2l6ZW9mIHUyLnBoZHI7CisgICAgIGZvciAoaSA9IDA7IGkgPCBkc28tPmVoZHIuZV9waG51bTsgKytpKQorICAgICAgIHsKKy0JaWYgKGdlbGZfZ2V0cGhkciAoZHNvLT5lbGYsIGksICZ1LnBoZHIpID09IE5VTEwpCisrCWlmIChnZWxmX2dldHBoZHIgKGRzby0+ZWxmLCBpLCAmdTEucGhkcikgPT0gTlVMTCkKKyAJICBnb3RvIGJhZDsKKy0JaWYgKGVsZjY0X3hsYXRldG9tICgmeCwgJngsIGRzby0+ZWhkci5lX2lkZW50W0VJX0RBVEFdKSA9PSBOVUxMKQorKwlpZiAoZWxmNjRfeGxhdGV0b20gKCZkZXN0LCAmc3JjLCBkc28tPmVoZHIuZV9pZGVudFtFSV9EQVRBXSkgPT0gTlVMTCkKKyAJICBnb3RvIGJhZDsKKy0JcHJvY2VzcyAoeC5kX2J1ZiwgeC5kX3NpemUpOworKwlwcm9jZXNzIChkZXN0LmRfYnVmLCBkZXN0LmRfc2l6ZSk7CisgICAgICAgfQorIAorLSAgICB4LmRfdHlwZSA9IEVMRl9UX1NIRFI7CistICAgIHguZF9zaXplID0gc2l6ZW9mIHUuc2hkcjsKKysgICAgc3JjLmRfdHlwZSA9IEVMRl9UX1NIRFI7CisrICAgIHNyYy5kX3NpemUgPSBzaXplb2YgdTEuc2hkcjsKKysgICAgZGVzdC5kX3NpemUgPSBzaXplb2YgdTIuc2hkcjsKKyAgICAgZm9yIChpID0gMDsgaSA8IGRzby0+ZWhkci5lX3NobnVtOyArK2kpCisgICAgICAgaWYgKGRzby0+c2NuW2ldICE9IE5VTEwpCisgCXsKKy0JICB1LnNoZHIgPSBkc28tPnNoZHJbaV07CistCSAgdS5zaGRyLnNoX29mZnNldCA9IDA7CistCSAgaWYgKGVsZjY0X3hsYXRldG9tICgmeCwgJngsIGRzby0+ZWhkci5lX2lkZW50W0VJX0RBVEFdKSA9PSBOVUxMKQorKwkgIHUxLnNoZHIgPSBkc28tPnNoZHJbaV07CisrCSAgdTEuc2hkci5zaF9vZmZzZXQgPSAwOworKwkgIGlmIChlbGY2NF94bGF0ZXRvbSAoJmRlc3QsICZzcmMsIGRzby0+ZWhkci5lX2lkZW50W0VJX0RBVEFdKSA9PSBOVUxMKQorIAkgICAgZ290byBiYWQ7CistCSAgcHJvY2VzcyAoeC5kX2J1ZiwgeC5kX3NpemUpOworKwkgIHByb2Nlc3MgKGRlc3QuZF9idWYsIGRlc3QuZF9zaXplKTsKKyAKKy0JICBpZiAodS5zaGRyLnNoX3R5cGUgIT0gU0hUX05PQklUUykKKysJICBpZiAodTEuc2hkci5zaF90eXBlICE9IFNIVF9OT0JJVFMpCisgCSAgICB7CisgCSAgICAgIEVsZl9EYXRhICpkID0gZWxmX3Jhd2RhdGEgKGRzby0+c2NuW2ldLCBOVUxMKTsKKyAJICAgICAgaWYgKGQgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZGVidWdlZGl0LXZhbGlkLWZpbGUtdG8tZml4LXNlZ21lbnQtZmF1bHQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2RlYnVnZWRpdC12YWxpZC1maWxlLXRvLWZpeC1zZWdtZW50LWZhdWx0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YzMxMDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2RlYnVnZWRpdC12YWxpZC1maWxlLXRvLWZpeC1zZWdtZW50LWZhdWx0LnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK2RlYnVnZWRpdDogZml4IHNlZ21lbnQgZmF1bHQgd2hpbGUgZmlsZSdzIGJzcyBvZmZzZXQgaGF2ZSBhIGxhcmdlIG51bWJlcgorCitXaGlsZSBFTEZfQ19SRFdSX01NQVAgd2FzIHVzZWQsIGVsZl9iZWdpbiBpbnZva2VkIG1tYXAoKSB0byBtYXAgZmlsZQoraW50byBtZW1vcnkuIFdoaWxlIHRoZSBmaWxlJ3MgYnNzIE9mZnNldCBoYXMgYSBsYXJnZSBudW1iZXIsIGVsZl91cGRhdGUKK2NhY3VsYXRlZCBmaWxlIHNpemUgYnkgX19lbGY2NF91cGRhdGVudWxsX3dybG9jayBhbmQgdGhlIHNpemUgd2FzCitlbmxhcmdlZC4KKworSW4gdGhpcyBzaXR1YXRpb24sIGVsZl91cGRhdGUgaW52b2tlZCBmdHJ1bmNhdGUgdG8gZW5sYXJnZSB0aGUgZmlsZSwKK2FuZCBtZW1vcnkgc2l6ZSAoZWxmLT5tYXhpbXVtX3NpemUpIGFsc28gd2FzIGluY29ycmVjdGx5IHVwZGF0ZWQuCitUaGVyZSB3YXMgc2VnbWVudCBmYXVsdCBpbiBlbGZfZW5kIHdoaWNoIGludm9rZWQgbXVubWFwIHdpdGggdGhlCitsZW5ndGggaXMgdGhlIGVubGFyZ2VkIGZpbGUgc2l6ZSwgbm90IHRoZSBtbWFwJ3MgbGVuZ3RoLgorCitCZWZvcmUgdGhlIGFib3ZlIG9wZXJhdGlvbnMsIGludm9rZSBlbGZfYmVnaW4vZWxmX3VwZGF0ZS9lbGZfZW5kCit3aXRoIEVMRl9DX1JEV1IgYW5kIEVMRl9GX0xBWU9VVCBzZXQgdG8gZW5sYXJnZSB0aGUgYWJvdmUgZmlsZSwgaXQKK2NvdWxkIG1ha2Ugc3VyZSB0aGUgZmlsZSBpcyBzYWZlIGZvciB0aGUgZm9sbG93aW5nIGVsZiBvcGVyYXRpb25zLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRvb2xzL2RlYnVnZWRpdC5jIHwgMjUgKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAyNSBpbnNlcnRpb25zKCspCisKK0luZGV4OiBycG0tNS40LjE0L3Rvb2xzL2RlYnVnZWRpdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3Rvb2xzL2RlYnVnZWRpdC5jCisrKysgcnBtLTUuNC4xNC90b29scy9kZWJ1Z2VkaXQuYworQEAgLTE1MjUsNiArMTUyNSwyOCBAQCBoYW5kbGVfYnVpbGRfaWQgKERTTyAqZHNvLCBFbGZfRGF0YSAqYnVpCisgICB9CisgfQorIAorKy8qIEl0IGF2b2lkZWQgdGhlIHNlZ21lbnQgZmF1bHQgd2hpbGUgZmlsZSdzIGJzcyBvZmZzZXQgaGF2ZSBhIGxhcmdlIG51bWJlci4KKysgICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0xMDE5NzA3CisrICAgICAgIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MTAyMDg0MiBmb3IgZGV0YWlsLiAqLworK3ZvaWQgdmFsaWRfZmlsZShpbnQgZmQpCisreworKyAgRWxmICplbGYgPSBlbGZfYmVnaW4gKGZkLCBFTEZfQ19SRFdSLCBOVUxMKTsKKysgIGlmIChlbGYgPT0gTlVMTCkKKysgIHsKKysgICAgZXJyb3IgKDEsIDAsICJlbGZfYmVnaW46ICVzIiwgZWxmX2Vycm1zZyAoLTEpKTsKKysgICAgcmV0dXJuOworKyAgfQorKworKyAgZWxmX2ZsYWdlbGYgKGVsZiwgRUxGX0NfU0VULCBFTEZfRl9MQVlPVVQpOworKworKyAgaWYgKGVsZl91cGRhdGUgKGVsZiwgRUxGX0NfV1JJVEUpIDwgMCkKKysgICAgZXJyb3IgKDEsIDAsICJlbGZfdXBkYXRlOiAlcyIsIGVsZl9lcnJtc2cgKC0xKSk7CisrCisrICBlbGZfZW5kIChlbGYpOworKworKyAgcmV0dXJuOworK30KKysKKyBpbnQKKyBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKK0BAIC0xNjIxLDYgKzE2NDMsOSBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICAgIGV4aXQgKDEpOworICAgICB9CisgCisrICAvKiBNYWtlIHN1cmUgdGhlIGZpbGUgaXMgdmFsaWQuICovCisrICB2YWxpZF9maWxlKGZkKTsKKysKKyAgIGRzbyA9IGZkb3Blbl9kc28gKGZkLCBmaWxlKTsKKyAgIGlmIChkc28gPT0gTlVMTCkKKyAgICAgZXhpdCAoMSk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2ZzdGFjay1wcm90ZWN0b3ItY29uZmlndXJlLWNoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9mc3RhY2stcHJvdGVjdG9yLWNvbmZpZ3VyZS1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzZhZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9mc3RhY2stcHJvdGVjdG9yLWNvbmZpZ3VyZS1jaGVjay5wYXRjaApAQCAtMCwwICsxLDIxIEBACitTb21lIG9wdGlvbnMgY2hlY2tlZCBpbiB0aGlzIGxvb3AgYXJlIG5lZWRpbmcgbGlua2luZyB0byBmaW5kIG91dAoraWYgdGhlIG9wdGlvbiBjYW4gYmUgdXNlZCBvciBub3QgZS5nLiAtZnN0YWNrLXByb3RlY3RvciB3aGljaCBuZWVkcworbGlic3NwIHRvIGJlIHN0YWdlZCBhbmQgYXZhaWxhYmxlIGZvciBjb21waWxlciB0byBsaW5rIGFnYWluc3QKK1RoZXJlZm9yZSB3ZSBjaGFuZ2UgdGhlIGNvbXBpbGUgb25seSBjaGVjayB0byBjb21waWxlIGFuZCBsaW5rIGNoZWNrCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHJwbS01LjQuMTQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHJwbS01LjQuMTQvY29uZmlndXJlLmFjCitAQCAtMjAxLDcgKzIwMSw3IEBAIGRubCAjIEdOVSBHQ0MgKHVzdWFsbHkgImdjYyIpCisgIG15X3NhdmVfY2ZsYWdzPSIkQ0ZMQUdTIgorICBDRkxBR1M9JGMKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIEdDQyBzdXBwb3J0cyAkY10pCistIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10pXSwKKysgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSldLAorICAgICBbQUNfTVNHX1JFU1VMVChbeWVzXSldCisgICAgIFtteV9jZmxhZ3M9JGNdLAorICAgICBbQUNfTVNHX1JFU1VMVChbbm9dKV0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vaGVhZGVyLWluY2x1ZGUtZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9oZWFkZXItaW5jbHVkZS1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZmYjE4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vaGVhZGVyLWluY2x1ZGUtZml4LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogcnBtLTUuNC4xNC9ycG1kYi9ycG1kYi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWRiL3JwbWRiLmgKKysrKyBycG0tNS40LjE0L3JwbWRiL3JwbWRiLmgKK0BAIC05LDYgKzksNyBAQAorIAorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8bWlyZS5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorIAorICNpbmNsdWRlIDxycG10eXBlcy5oPgorICNpbmNsdWRlIDxycG10YWcuaD4JLyogWFhYIEhlYWRlciB0eXBlZGVmICovCitJbmRleDogcnBtLTUuNC4xNC9ycG1kYi9ycG10YWcuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1kYi9ycG10YWcuaAorKysrIHJwbS01LjQuMTQvcnBtZGIvcnBtdGFnLmgKK0BAIC03LDYgKzcsNyBAQAorIAorICNpbmNsdWRlIDxycG1pb3R5cGVzLmg+CisgI2luY2x1ZGUgPHJwbXN3Lmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPgorIAorICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9tYWtlZmlsZS1hbS1leGVjLWhvb2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL21ha2VmaWxlLWFtLWV4ZWMtaG9vay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmFiOWViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9tYWtlZmlsZS1hbS1leGVjLWhvb2sucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorcnBtOiBSZXNvbHZlIHBhcmFsbGVsIGluc3RhbGwgaXNzdWUgd2hlbiBpbnN0YWxsaW5nIGx1YQorCitXaGVuIGx1YSBpcyBiZWluZyBpbnN0YWxsZWQgb24gc29tZSBzeXN0ZW1zIHRoYXQgYXJlIGJlaW5nIHJ1biB3aXRoIGhpZ2ggbGV2ZWxzCitvZiBwYXJhbGxlbGl6YXRpb24gdGhlcmUgYXJlIGNhc2VzIHdoZXJlIGluc3RhbGwtZGF0YS1hbSBhbmQgaW5zdGFsbC1leGVjLWhvb2sKK2FyZSBwcm9jZXNzZWQgYXQgdGhlIHNhbWUgb3IgYSB2ZXJ5IHNob3J0IHRpbWUgYXBhcnQuIFRoaXMgY2F1c2VzCitpbnN0YWxsLXBrZ2JpblBST0dSQU1TLCB3aGljaCBpcyBhIGRlcGVuZGVuY3kgb2YgYm90aCwgdG8gYmUgcnVuIGF0IGFyb3VuZCB0aGUKK3NhbWUgdGltZSBUaGlzIHNvbWV0aW1lcyBjYXVzZXMgZmlsZSBjb250ZW50aW9uIGFuZCB3aWxsIHNvbWV0aW1lcyBiZSBpbiBhIHN0YXRlCit3aGVyZSBpbnN0YWxsLWV4ZWMtaG9vayBpcyBsb29raW5nIGZvciBhIGZpbGUgdGhhdCBpcyBiZWluZyBpbnN0YWxsZWQgb3IgYm90aAoraW5zdGFsbC1wa2diaW5QUk9HUkFNUyBiZWluZyBydW4gYXJlIGluc3RhbGxpbmcgdGhlIHNhbWUgZmlsZSBhbmQgZmFpbCBiZWNhdXNlCitpdCBjYW5ub24gY3JlYXRlIGEgbmV3IGZpbGUuCisKK1RoaXMgcGF0Y2ggYWxsb3dzIGluc3RhbGwtZXhlYy1ob29rIHRvIGJlIGNhbGxlZCBieSBpbnN0YWxsLWRhdGEtYW0gaW5zdGVhZCBvZgoraW5zdGFsbC1leGVjLWFtLiBJdCBhbHNvIHJlbW92ZWQgdGhlIGRlcGVuZGVuY3kgaW4gaW5zdGFsbC1kYXRhLWhvb2sgb24KK2luc3RhbGwtcGtnYmluUFJPR1JBTVMuIFRoaXMgbWVhbnMgaW5zdGFsbC1wa2diaW5QUk9HUkFNUyB3aWxsIG9ubHkgYmUgcnVuIG9uY2UKK3NvIHRoZXJlIHdob3VsZCBiZSBhbnkgZmlsZSBjb250ZW50aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTW9yZ2FuIExpdHRsZSA8bW9yZ2FuLmxpdHRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9sdWEvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbHVhL01ha2VmaWxlLmFtCisrKysgcnBtLTUuNC4xNC9sdWEvTWFrZWZpbGUuYW0KK0BAIC0zMjYsNyArMzI2LDcgQEAgY2xlYW4tbG9jYWw6CisgIyBYWFggQnVpbGQgJiBpbnN0YWxsIGFzIHJwbWx1YS9ycG1sdWFjIHdpdGggaGFyZGxpbmtzIHRvIGx1YS9sdWFjIHBvc3QgaW5zdGFsbC4KKyAjIFhYWCBDVlMgaGFzIGx1YS9sdWFjIHN1Yi1kaXJlY3RvcmllcyBpbiB0aGUgQXR0aWMgdGhhdCBjb2xsaWRlIHdpdGggdGhlCisgIyBYWFggbHVhL2x1YWMgZXhlY3V0YWJsZSBuYW1lcyB3aGVuIHVzaW5nIGN2cyB1cGRhdGUuCistaW5zdGFsbC1leGVjLWhvb2s6CWluc3RhbGwtcGtnYmluUFJPR1JBTVMKKytpbnN0YWxsLWRhdGEtaG9vazoJCisgCW1rZGlyIC1wICQoREVTVERJUikkKHBrZ2JpbmRpcikKKyAJJChfX1JNKSAtZiAkKERFU1RESVIpJChwa2diaW5kaXIpL2x1YQorIAkkKF9fTE4pICQoREVTVERJUikkKHBrZ2JpbmRpcikvcnBtbHVhICQoREVTVERJUikkKHBrZ2JpbmRpcikvbHVhCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL25vLWxkZmxhZ3MtaW4tcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9uby1sZGZsYWdzLWluLXBrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTA2MjNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9uby1sZGZsYWdzLWluLXBrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDE0IEBACitEb24ndCBwdXQgTERGTEFHUyBpbnRvIHRoZSBMaWJzLnByaXZhdGUsIGFsbCBpdCBnZW5lcmFsbHkgY29udGFpbnMgaXMgYSBsaW5rZXIKK2hhc2ggc2VsZWN0aW9uIChoYXJtbGVzcykgYW5kIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsaWJkaXIgaW4gdGhlIHN5c3Jvb3QKKyhhY3RpdmVseSBoYXJtZnVsKS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvc2NyaXB0cy9ycG0ucGMuaW4gYi9zY3JpcHRzL3JwbS5wYy5pbgoraW5kZXggODI5MzQ3MS4uMmVhNDY5YyAxMDA2NDQKKy0tLSBhL3NjcmlwdHMvcnBtLnBjLmluCisrKysgYi9zY3JpcHRzL3JwbS5wYy5pbgorQEAgLTE3ICsxNyBAQCBMaWJzOiAtTCR7bGliZGlyfSAtbHJwbWJ1aWxkJHtzdWZmaXh9IC1scnBtJHtzdWZmaXh9IC1scnBtZGIke3N1ZmZpeH0gLWxycG1pbyR7cworLUxpYnMucHJpdmF0ZTogQExERkxBR1NAIEBMSUJTQAorK0xpYnMucHJpdmF0ZTogQExJQlNACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3BlcmZpbGVfcnBtZGVwcy5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3MmM5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3BlcmZpbGVfcnBtZGVwcy5zaApAQCAtMCwwICsxLDUwIEBACisjIS9iaW4vYmFzaAorCis6ICR7UlBNREVQUzo9cnBtZGVwc30KKworcHJvY2VzcygpIHsKKwl3aGlsZSByZWFkIGZpbGVfbmFtZSA7IGRvCisJCXByaW50ZiAiJXNcdCIgJHtmaWxlX25hbWV9CisJCWlmIFsgISAtZCAkZmlsZV9uYW1lIF07IHRoZW4KKwkJCXByaW50ZiAiJXMgIiAkKCRSUE1ERVBTICQxICRmaWxlX25hbWUgfCBzZWQgLWUgJ3MscnBtbGliKC4qLCwnIC1lICdzLFwoWzw+XD1dXCsgXCtbXiBdKlwpLChcMSksZycpCisJCWZpCisJCXByaW50ZiAiXG4iCisJZG9uZQorfQorCit1c2FnZSgpIHsKKwllY2hvICIkMCB7LVB8LS1wcm92aWRlc30gey1SfC0tcmVxdWlyZXN9IEZJTEUgLi4uIgorfQorCit3aGlsZSBbICQjIC1ndCAwIF07IGRvCisgICBjYXNlICIkMSIgaW4KKwktLXJwbWRlcHMpCisJCVJQTURFUFM9JDIKKwkJc2hpZnQKKwkJc2hpZnQKKwkJOzsKKwktUnwtLXJlcXVpcmVzKQorCQlwcm9jZXNzX3R5cGU9LS1yZXF1aXJlcworCQlzaGlmdAorCQk7OworCS1QfC0tcHJvdmlkZXMpCisJCXByb2Nlc3NfdHlwZT0tLXByb3ZpZGVzCisJCXNoaWZ0CisJCTs7CisJKikKKwkJYnJlYWs7CisJCTs7CisgICBlc2FjCitkb25lCisKK2lmIFsgLXogIiRwcm9jZXNzX3R5cGUiIF07IHRoZW4KKwl1c2FnZQorCWV4aXQgMQorZmkKKworaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisJZmluZCAiJEAiIHwgcHJvY2VzcyAkcHJvY2Vzc190eXBlCisJZXhpdCAkPworZmkKKworcHJvY2VzcyAkcHJvY2Vzc190eXBlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3B5dGhvbi1ycG0tcnBtc2Vuc2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3B5dGhvbi1ycG0tcnBtc2Vuc2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUzOGE2MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcHl0aG9uLXJwbS1ycG1zZW5zZS5wYXRjaApAQCAtMCwwICsxLDMzIEBACitycG1tb2R1bGUuYzogRXhwb3J0IGEgZmV3IGFkZGl0aW9uYWwgUlBNU0VOU0UgdmFsdWVzCisKK1dlIHdhbnQgdG8gc2VlIHRoZSBSUE1TRU5TRV9TQ1JJUFQgdmFsdWVzIGZvciB1c2Ugd2l0aCBTTUFSVC4gIFdlIGFsc28KK3dhbnQgdG8gc2VlIHRoZSBNSVNTSU5HT0sgdmFsdWUgc28gd2UgY2FuIGF2b2lkIHJlY29tbWVuZGVkIHBhY2thZ2VzIGNhdXNpbmcKK2ZhaWx1cmVzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9weXRob24vcnBtbW9kdWxlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcHl0aG9uL3JwbW1vZHVsZS5jCisrKysgcnBtLTUuNC4xNC9weXRob24vcnBtbW9kdWxlLmMKK0BAIC00OTQsMTIgKzQ5NCwxNiBAQCB2b2lkIGluaXRfcnBtKHZvaWQpCisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfRVFVQUwpOworICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX05PVEVRVUFMKTsKKyAgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9GSU5EX1JFUVVJUkVTKTsKKy0jaWYgZGVmaW5lZChSUE1fVkVORE9SX01BTkRSSVZBKQorKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfTUFORFJJVkEpIHx8IGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpIHx8IGRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKyAgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9QUkVSRVEpOworICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX1NDUklQVF9QUkUpOworICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX1NDUklQVF9QT1NUKTsKKyAgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9TQ1JJUFRfUFJFVU4pOworLSAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX1NDUklQVF9QT1NUVU4pCisrICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfU0NSSVBUX1BPU1RVTik7CisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpIHx8IGRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKysgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9NSVNTSU5HT0spOworICNlbmRpZgorIAorICAgICBSRUdJU1RFUl9FTlVNKFJQTURFUFNfRkxBR19OT1VQR1JBREUpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9weXRob25kZXBzLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9weXRob25kZXBzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA4M2IxNzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3B5dGhvbmRlcHMuc2gKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL3NoCisKK1sgJCMgLWdlIDEgXSB8fCB7CisgICAgY2F0ID4gL2Rldi9udWxsCisgICAgZXhpdCAwCit9CisKK2Nhc2UgJDEgaW4KKy1SfC0tcmVxdWlyZXMpCisgICAgc2hpZnQKKyAgICBncmVwICIvdXNyL1wobGliW14vXSpcfHNoYXJlXCkvcHl0aG9uW14vXSovIiA+L2Rldi9udWxsICYmIGVjaG8gInB5dGhvbiIKKyAgICBleGl0IDAKKyAgICA7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLUNWRS0yMDEzLTY0MzUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1DVkUtMjAxMy02NDM1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMDdlOGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1DVkUtMjAxMy02NDM1LnBhdGNoCkBAIC0wLDAgKzEsMTA5IEBACitGcm9tIDA4MTA1YWNkYTFkYTYzZDMyZmJiMTg1OTZhM2Q2YzNlMGFhMTA2ZDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAxMCBKdW4gMjAxNSAxNDozNjo1NiArMDAwMAorU3ViamVjdDogW1BBVENIIDIvMl0gcnBtOiBDVkUtMjAxMy02NDM1CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworUmVmZXJlbmNlOgoraHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD1DVkUtMjAxMy02NDM1CisKK0Rlc2NyaXB0aW9uOgorSXQgd2FzIGZvdW5kIHRoYXQgUlBNIHdyb3RlIGZpbGUgY29udGVudHMgdG8gdGhlIHRhcmdldCBpbnN0YWxsYXRpb24KK2RpcmVjdG9yeSB1bmRlciBhIHRlbXBvcmFyeSBuYW1lLCBhbmQgdmVyaWZpZWQgaXRzIGNyeXB0b2dyYXBoaWMgc2lnbmF0dXJlCitvbmx5IGFmdGVyIHRoZSB0ZW1wb3JhcnkgZmlsZSBoYXMgYmVlbiB3cml0dGVuIGNvbXBsZXRlbHkuIFVuZGVyIGNlcnRhaW4KK2NvbmRpdGlvbnMsIHRoZSBzeXN0ZW0gaW50ZXJwcmV0cyB0aGUgdW52ZXJpZmllZCB0ZW1wb3JhcnkgZmlsZSBjb250ZW50cworYW5kIGV4dHJhY3RzIGNvbW1hbmRzIGZyb20gaXQuIFRoaXMgY291bGQgYWxsb3cgYW4gYXR0YWNrZXIgdG8gbW9kaWZ5CitzaWduZWQgUlBNIGZpbGVzIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGV5IHdvdWxkIGV4ZWN1dGUgY29kZSBjaG9zZW4KK2J5IHRoZSBhdHRhY2tlciBkdXJpbmcgcGFja2FnZSBpbnN0YWxsYXRpb24uCisKK09yaWdpbmFsIFBhdGNoOgoraHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL2F0dGFjaG1lbnQuY2dpP2lkPTk1NjIwNworCitTaWduZWQtb2ZmLWJ5OiBMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPgorLS0tCisgbGliL2ZzbS5jICAgICB8ICAyICstCisgcnBtaW8vcnBtaW8uYyB8IDE4ICsrKysrKysrKysrKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9mc20uYyBiL2xpYi9mc20uYworaW5kZXggMWVlN2U2Ny4uMDk0ZWIxZCAxMDA2NDQKKy0tLSBhL2xpYi9mc20uYworKysrIGIvbGliL2ZzbS5jCitAQCAtNzI2LDcgKzcyNiw3IEBAIHN0YXRpYyBpbnQgZXhwYW5kUmVndWxhcihGU01fdCBmc20sIHJwbXBzbSBwc20sIHJwbWNwaW9fdCBhcmNoaXZlLCBpbnQgbm9kaWdlc3QpCisgeworICAgICBGRF90IHdmZCA9IE5VTEw7CisgICAgIGNvbnN0IHN0cnVjdCBzdGF0ICogc3QgPSAmZnNtLT5zYjsKKy0gICAgcnBtX2xvZmZfdCBsZWZ0ID0gc3QtPnN0X3NpemU7CisrICAgIHJwbV9sb2ZmX3QgbGVmdCA9IHJwbWZpRlNpemVJbmRleChmc21HZXRGaShmc20pLCBmc20tPml4KTsKKyAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqIGZpZGlnZXN0ID0gTlVMTDsKKyAgICAgcGdwSGFzaEFsZ28gZGlnZXN0YWxnbyA9IDA7CisgICAgIGludCByYyA9IDA7CitkaWZmIC0tZ2l0IGEvcnBtaW8vcnBtaW8uYyBiL3JwbWlvL3JwbWlvLmMKK2luZGV4IGNkMjIzZTguLjBiMTJlMzEgMTAwNjQ0CistLS0gYS9ycG1pby9ycG1pby5jCisrKysgYi9ycG1pby9ycG1pby5jCitAQCAtMTMwOSwxNSArMTMwOSwxOSBAQCBpbnQgRmNsb3NlKEZEX3QgZmQpCisgICogLSBiem9wZW46CVsxLTldIGlzIGJsb2NrIHNpemUgKG1vZHVsbyAxMDBLKQorICAqIC0gYnpvcGVuOgkncycgaXMgc21hbGxtb2RlCisgICogLSBIQUNLOgknLicgdGVybWluYXRlcywgcmVzdCBpcyB0eXBlIG9mIEkvTworKyAqIC0gICAgICAgICAgICAnVScgc2V0cyAqbW9kZSB0byB6ZXJvIChubyBwZXJtaXNzaW9ucykgaW5zdGVhZCBvZiAwNjY2CisgICovCisgc3RhdGljIHZvaWQgY3Z0Zm1vZGUgKGNvbnN0IGNoYXIgKm0sCisgCQkJCWNoYXIgKnN0ZGlvLCBzaXplX3QgbnN0ZGlvLAorIAkJCQljaGFyICpvdGhlciwgc2l6ZV90IG5vdGhlciwKKy0JCQkJY29uc3QgY2hhciAqKmVuZCwgaW50ICogZikKKysJCQkJY29uc3QgY2hhciAqKmVuZCwgaW50ICpmLCBtb2RlX3QgKm1vZGUpCisgeworICAgICBpbnQgZmxhZ3MgPSAwOworICAgICBjaGFyIGM7CisgCisrICAgIGlmIChtb2RlKQorKyAgICAqbW9kZSA9IDA2NjY7CisrCisgICAgIHN3aXRjaCAoKm0pIHsKKyAgICAgY2FzZSAnYSc6CisgCWZsYWdzIHw9IE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fQVBQRU5EOworQEAgLTEzNTcsNiArMTM2MSwxMCBAQCBzdGF0aWMgdm9pZCBjdnRmbW9kZSAoY29uc3QgY2hhciAqbSwKKyAJICAgIGlmICgtLW5zdGRpbyA+IDApICpzdGRpbysrID0gYzsKKyAJICAgIGNvbnRpbnVlOworIAkgICAgYnJlYWs7CisrCWNhc2UgJ1UnOgorKwkgICAgaWYgKG1vZGUpCisrCQkqbW9kZSA9IDA7CisrCSAgICBicmVhazsKKyAJZGVmYXVsdDoKKyAJICAgIGlmICgtLW5vdGhlciA+IDApICpvdGhlcisrID0gYzsKKyAJICAgIGNvbnRpbnVlOworQEAgLTEzODUsNyArMTM5Myw4IEBAIGZwcmludGYoc3RkZXJyLCAiKioqIEZkb3BlbiglcCwlcykgJXNcbiIsIGZkLCBmbW9kZSwgZmRiZyhmZCkpOworICAgICBpZiAoZmQgPT0gTlVMTCB8fCBmbW9kZSA9PSBOVUxMKQorIAlyZXR1cm4gTlVMTDsKKyAKKy0gICAgY3Z0Zm1vZGUoZm1vZGUsIHN0ZGlvLCBzaXplb2Yoc3RkaW8pLCBvdGhlciwgc2l6ZW9mKG90aGVyKSwgJmVuZCwgTlVMTCk7CisrICAgIGN2dGZtb2RlKGZtb2RlLCBzdGRpbywgc2l6ZW9mKHN0ZGlvKSwgb3RoZXIsIHNpemVvZihvdGhlciksICZlbmQsIE5VTEwsCisrICAgICAgICBOVUxMKTsKKyAgICAgaWYgKHN0ZGlvWzBdID09ICdcMCcpCisgCXJldHVybiBOVUxMOworICAgICB6c3RkaW9bMF0gPSAnXDAnOworQEAgLTE0MzYsNyArMTQ0NSw3IEBAIEZEX3QgRm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZm1vZGUpCisgeworICAgICBjaGFyIHN0ZGlvWzIwXSwgb3RoZXJbMjBdOworICAgICBjb25zdCBjaGFyICplbmQgPSBOVUxMOworLSAgICBtb2RlX3QgcGVybXMgPSAwNjY2OworKyAgICBtb2RlX3QgcGVybXM7CisgICAgIGludCBmbGFncyA9IDA7CisgICAgIEZEX3QgZmQ7CisgCitAQCAtMTQ0NCw3ICsxNDUzLDggQEAgRkRfdCBGb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpmbW9kZSkKKyAJcmV0dXJuIE5VTEw7CisgCisgICAgIHN0ZGlvWzBdID0gJ1wwJzsKKy0gICAgY3Z0Zm1vZGUoZm1vZGUsIHN0ZGlvLCBzaXplb2Yoc3RkaW8pLCBvdGhlciwgc2l6ZW9mKG90aGVyKSwgJmVuZCwgJmZsYWdzKTsKKysgICAgY3Z0Zm1vZGUoZm1vZGUsIHN0ZGlvLCBzaXplb2Yoc3RkaW8pLCBvdGhlciwgc2l6ZW9mKG90aGVyKSwgJmVuZCwgJmZsYWdzLAorKyAgICAgICAgJnBlcm1zKTsKKyAgICAgaWYgKHN0ZGlvWzBdID09ICdcMCcpCisgCXJldHVybiBOVUxMOworIAorLS0gCisxLjguNC41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLUNWRS0yMDE0LTgxMTgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1DVkUtMjAxNC04MTE4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMTc5NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1DVkUtMjAxNC04MTE4LnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gNzFjODEyZWRmMTQzMWE5OTY3YmQ5OWJhNmZmYTZhYjg5ZWI3ZWM3YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBXZWQsIDEwIEp1biAyMDE1IDEyOjU2OjU1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBycG06IENWRS0yMDE0LTgxMTgKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitSZWZlcmVuY2U6CitodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTExNjg3MTUKKworRGVzY3JpcHRpb246CitJdCB3YXMgZm91bmQgdGhhdCBSUE0gY291bGQgZW5jb3VudGVyIGFuIGludGVnZXIgb3ZlcmZsb3csCitsZWFkaW5nIHRvIGEgc3RhY2stYmFzZWQgb3ZlcmZsb3csIHdoaWxlIHBhcnNpbmcgYSBjcmFmdGVkCitDUElPIGhlYWRlciBpbiB0aGUgcGF5bG9hZCBzZWN0aW9uIG9mIGFuIFJQTSBmaWxlLiAgVGhpcyBjb3VsZAorYWxsb3cgYW4gYXR0YWNrZXIgdG8gbW9kaWZ5IHNpZ25lZCBSUE0gZmlsZXMgaW4gc3VjaCBhIHdheSB0aGF0Cit0aGV5IHdvdWxkIGV4ZWN1dGUgY29kZSBjaG9zZW4gYnkgdGhlIGF0dGFja2VyIGR1cmluZyBwYWNrYWdlCitpbnN0YWxsYXRpb24uCisKK09yaWdpbmFsIFBhdGNoOgoraHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL2F0dGFjaG1lbnQuY2dpP2lkPTk2MjE1OQorCitTaWduZWQtb2ZmLWJ5OiBMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPgorLS0tCisgbGliL2NwaW8uYyB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGliL2NwaW8uYyBiL2xpYi9jcGlvLmMKK2luZGV4IDM4MmVlYjYuLjc0ZGRkOWMgMTAwNjQ0CistLS0gYS9saWIvY3Bpby5jCisrKysgYi9saWIvY3Bpby5jCitAQCAtMjk2LDYgKzI5Niw5IEBAIGludCBycG1jcGlvSGVhZGVyUmVhZChycG1jcGlvX3QgY3BpbywgY2hhciAqKiBwYXRoLCBzdHJ1Y3Qgc3RhdCAqIHN0KQorICAgICBzdC0+c3RfcmRldiA9IG1ha2VkZXYobWFqb3IsIG1pbm9yKTsKKyAKKyAgICAgR0VUX05VTV9GSUVMRChoZHIubmFtZXNpemUsIG5hbWVTaXplKTsKKysgICAgaWYgKG5hbWVTaXplIDw9IDAgfHwgbmFtZVNpemUgPiA0MDk2KSB7CisrICAgICAgICByZXR1cm4gQ1BJT0VSUl9CQURfSEVBREVSOworKyAgICB9CisgCisgICAgICpwYXRoID0geG1hbGxvYyhuYW1lU2l6ZSArIDEpOworICAgICByZWFkID0gRnJlYWQoKnBhdGgsIG5hbWVTaXplLCAxLCBjcGlvLT5mZCk7CistLSAKKzEuOC40LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tYXV0b2dlbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWF1dG9nZW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc3MTIzNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWF1dG9nZW4ucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorUmVtb3ZlIHRoZSBzYW5pdHkgY2hlY2tpbmcgZnJvbSB0aGUgcnBtIGF1dG9nZW4uc2guICBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UKK3dlIG1heSBoYXZlIHNsaWdodGx5IGRpZmZlcmVudCwgYnV0IHlldCBjb21wYXRpYmxlIHZlcnNpb25zLiAgSWYgd2UgZG8gZW5kCit1cCBicmVha2luZyB0aGluZ3MsIHdlJ2xsIGRlYWwgd2l0aCBpdCBhdCB0aGF0IHRpbWUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9zeWNrL2F1dG9nZW4uc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvc3ljay9hdXRvZ2VuLnNoCisrKysgcnBtLTUuNC4xNC9zeWNrL2F1dG9nZW4uc2gKK0BAIC0zNCwxMiArMzQsNiBAQCBsaWJ0b29saXplICgpIHsKKyAgICAgZXZhbCAkX2xpYnRvb2xpemUgJF9saWJ0b29saXplX2FyZ3MKKyB9CisgCistIyAgIHJlcXVpcmVtZW50cyBzYW5pdHkgY2hlY2sKKy1bICJgYXV0b21ha2UgICAtLXZlcnNpb24gfCBoZWFkIC0xYCIgIT0gIiRBTVYiIF0gJiYgZWNobyAiJFVTQUdFIiAjICYmIGV4aXQgMQorLVsgImBhdXRvY29uZiAgIC0tdmVyc2lvbiB8IGhlYWQgLTFgIiAhPSAiJEFDViIgXSAmJiBlY2hvICIkVVNBR0UiICMgJiYgZXhpdCAxCistWyAiYGxpYnRvb2xpemUgLS12ZXJzaW9uIHwgaGVhZCAtMWAiICE9ICIkTFRWIiBdICYmIGVjaG8gIiRVU0FHRSIgIyAmJiBleGl0IDEKKy1bICJgZ2V0dGV4dGl6ZSAtLXZlcnNpb24gfCBoZWFkIC0xIHwgc2VkIC1lICdzO14uKi9cXChnZXR0ZXh0aXplXFwpO1xcMTsnYCIgIT0gIiRHVFQiIF0gJiYgZWNobyAiJFVTQUdFIiAjICYmIGV4aXQgMQorLQorIGVjaG8gIi0tLT4gZ2VuZXJhdGUgZmlsZXMgdmlhIEdOVSBsaWJ0b29sIChsaWJ0b29saXplKSIKKyBsaWJ0b29saXplIC0tcXVpZXQgLS1jb3B5IC0tZm9yY2UgLS1pbnN0YWxsCisgZWNobyAiLS0tPiBnZW5lcmF0ZSBmaWxlcyB2aWEgR05VIGF1dG9jb25mIChhY2xvY2FsLCBhdXRvaGVhZGVyKSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWNhbm9uYXJjaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWNhbm9uYXJjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWFiNDk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tY2Fub25hcmNoLnBhdGNoCkBAIC0wLDAgKzEsMTM2IEBACitsaWIvcnBtcmMuYzogVXBkYXRlIC0tdGFyZ2V0IHByb2Nlc3NpbmcgdG8gc3VwcG9ydCBmdWxsIEdOVSBjYW5vbmljYWwgYXJjaAorCitQcmlvciB0byB0aGlzIHBhdGNoLCB3aGVuIHVzaW5nIC0tdGFyZ2V0LCBSUE0gc3VwcG9ydGVkIHRoZSBmb3JtYXQ6CisgIDxhcmNoPgorICA8YXJjaD4tPG9zPgorICA8YXJjaD4tPG9zPi1nbnUKKyAgPGFyY2g+LTxhcmJpdHJhcnkgaXRlbXM+LTxvcz4KKyAgPGFyY2g+LTxhcmJpdHJhcnkgaXRlbXM+LTxvcz4tZ251CisKK1RoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgaXRlbXMgdG86CisgIDxhcmNoPgorICA8YXJjaD4tPG9zPgorICA8YXJjaD4tPG9zPi1nbnUKKyAgPGFyY2g+LTx2ZW5kb3I+LTxvcz4KKyAgPGFyY2g+LTx2ZW5kb3I+LTxvcz4tPGV4dGVuc2lvbj4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL3JwbXJjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3JwbXJjLmMKKysrKyBycG0tNS40LjE0L2xpYi9ycG1yYy5jCitAQCAtOTI1LDggKzkyNSw4IEBAIHN0YXRpYyB2b2lkIGdldE1hY2hpbmVJbmZvKGludCB0eXBlLCAvKkAKKyAKKyBzdGF0aWMgdm9pZCBycG1SZWJ1aWxkVGFyZ2V0VmFycyhjb25zdCBjaGFyICoqIHRhcmdldCwgY29uc3QgY2hhciAqKiBjYW5vbnRhcmdldCkKKyB7CistCistICAgIGNoYXIgKmNhID0gTlVMTCwgKmNvID0gTlVMTCwgKmN0ID0gTlVMTDsKKysgICAgLyogY2EgPSBhcmNoLCBjdiA9IHZlbmRvciwgY28gPSBvcywgY2UgPSBleHRlbnNpb24sIGN0ID0gY2Fub24gdGFyZ2V0ICovCisrICAgIGNoYXIgKmNhID0gTlVMTCwgKmN2ID0gTlVMTCwgKmNvID0gTlVMTCwgKmNlID0gTlVMTCwgKmN0ID0gTlVMTDsKKyAgICAgaW50IHg7CisgCisgICAgIC8qIFJlYnVpbGQgdGhlIGNvbXBhdCB0YWJsZSB0byByZWNhbGN1bGF0ZSB0aGUgY3VycmVudCB0YXJnZXQgYXJjaC4gICovCitAQCAtOTM2LDIzICs5MzYsNjAgQEAgc3RhdGljIHZvaWQgcnBtUmVidWlsZFRhcmdldFZhcnMoY29uc3QgYworICAgICBycG1TZXRUYWJsZXMoUlBNX01BQ0hUQUJMRV9CVUlMREFSQ0gsIFJQTV9NQUNIVEFCTEVfQlVJTERPUyk7CisgCisgICAgIGlmICh0YXJnZXQgJiYgKnRhcmdldCkgeworKwkvKiBHTlUgY2Fub25pY2FsIGZvcm1hdCBpczoKKysJICogIDxhcmNoPi08dmVuZG9yPi08b3M+Wy1leHRlbnNpb25dCisrCSAqCisrCSAqIFdlIHN1cHBvcnQgdGhlIGJvdGggdGhlIEdOVSBjYW5vbmljYWwgZm9ybWF0CisrCSAqIGFzIHdlbGwgYXMgdGhlIHRyYWRpdGlvbmFsIFJQTSBmb3JtYXRzOiAKKysJICogIDxhcmNoPgorKwkgKiAgPGFyY2g+LTxvcz5bLWdudV0KKysJICovCisgCWNoYXIgKmM7CisgCS8qIFNldCBhcmNoIGFuZCBvcyBmcm9tIHNwZWNpZmllZCBidWlsZCB0YXJnZXQgKi8KKyAJY2EgPSB4c3RyZHVwKCp0YXJnZXQpOworLQlpZiAoKGMgPSBzdHJjaHIoY2EsICctJykpICE9IE5VTEwpIHsKKysJaWYgKChjID0gc3RyY2hyKGNhLCAnLScpKSA9PSBOVUxMKSB7CisrCSAgICAvKiBGb3JtYXQgaXMgPGFyY2g+ICovCisrCSAgICA7CisrCX0gZWxzZSB7CisgCSAgICAqYysrID0gJ1wwJzsKKy0JICAgIAorLQkgICAgaWYgKChjbyA9IHN0cnJjaHIoYywgJy0nKSkgPT0gTlVMTCkgeworLQkJY28gPSBjOworKwkgICAgY3YgPSBjOworKworKwkgICAgaWYgKChjID0gc3RyY2hyKGMsICctJykpID09IE5VTEwpIHsKKysJCS8qIEZvcm1hdCBpcyA8YXJjaD4tPG9zPiAqLworKwkJY28gPSBjdjsKKysJCWN2ID0gTlVMTDsKKyAJICAgIH0gZWxzZSB7CistCQlpZiAoIXhzdHJjYXNlY21wKGNvLCAiLWdudSIpKQorLQkJICAgICpjbyA9ICdcMCc7CistCQlpZiAoKGNvID0gc3RycmNocihjLCAnLScpKSA9PSBOVUxMKQorLQkJICAgIGNvID0gYzsKKy0JCWVsc2UKKy0JCSAgICBjbysrOworKwkJKmMrKyA9ICdcMCc7CisrCQljbyA9IGM7CisrCisrCQlpZiAoKGMgPSBzdHJjaHIoYywgJy0nKSkgPT0gTlVMTCkgeworKwkJICAgIC8qIE1pZ2h0IGJlOgorKwkJICAgICAqICA8YXJjaD4tPHZlbmRvcj4tPG9zPgorKwkJICAgICAqICA8YXJjaD4tPG9zPi1nbnUKKysJCSAgICAgKi8KKysJCSAgICBpZiAoIXhzdHJjYXNlY21wKGNvLCAiZ251IikpIHsKKysJCQkvKiBGb3JtYXQgd2FzIDxhcmNoPi08b3M+LWdudSAqLworKwkJCWNlID0gY287CisrCQkJY28gPSBjdjsKKysJCQljdiA9IE5VTEw7CisrCQkgICAgfQorKwkJfSBlbHNlIHsKKysJCSAgICAvKiBGb3JtYXQgd2FzIDxhcmNoPi08dmVuZG9yPi08b3M+LTxleHRlbnNpb24+ICovCisrCQkgICAgKmMrKyA9ICdcMCc7CisrCQkgICAgY2UgPSBjOworKwkJfQorIAkgICAgfQorKwkgICAgaWYgKGN2ICE9IE5VTEwpIGN2ID0geHN0cmR1cChjdik7CisgCSAgICBpZiAoY28gIT0gTlVMTCkgY28gPSB4c3RyZHVwKGNvKTsKKysJICAgIGlmIChjZSAhPSBOVUxMKSB7CisrCQkvKiBXZSBuZWVkIHRvIHByZWZpeCBpdCB3aXRoIGEgIi0iICovCisrCQljaGFyICogbGNlID0gTlVMTDsKKysKKysJCWxjZSA9IHhtYWxsb2Moc3RybGVuKGNlKSArIHNpemVvZigiLSIpKTsKKysJCXNwcmludGYobGNlLCAiLSVzIiwgY2UpOworKworKwkJY2UgPSBsY2U7CisrCSAgICB9CisgCX0KKyAgICAgfSBlbHNlIHsKKyAJY29uc3QgY2hhciAqYSA9IE5VTEw7CitAQCAtOTk1LDggKzEwMzIsMTYgQEAgc3RhdGljIHZvaWQgcnBtUmVidWlsZFRhcmdldFZhcnMoY29uc3QgYworICAgICBhZGRNYWNybyhOVUxMLCAiX3RhcmdldCIsIE5VTEwsIGN0LCBSTUlMX1JQTVJDKTsKKyAgICAgZGVsTWFjcm8oTlVMTCwgIl90YXJnZXRfY3B1Iik7CisgICAgIGFkZE1hY3JvKE5VTEwsICJfdGFyZ2V0X2NwdSIsIE5VTEwsIGNhLCBSTUlMX1JQTVJDKTsKKysgICAgaWYgKGN2KSB7CisrCWRlbE1hY3JvKE5VTEwsICJfdGFyZ2V0X3ZlbmRvciIpOworKwlhZGRNYWNybyhOVUxMLCAiX3RhcmdldF92ZW5kb3IiLCBOVUxMLCBjdiwgUk1JTF9SUE1SQyk7CisrICAgIH0KKyAgICAgZGVsTWFjcm8oTlVMTCwgIl90YXJnZXRfb3MiKTsKKyAgICAgYWRkTWFjcm8oTlVMTCwgIl90YXJnZXRfb3MiLCBOVUxMLCBjbywgUk1JTF9SUE1SQyk7CisrICAgIGlmIChjZSkgeworKwlkZWxNYWNybyhOVUxMLCAiX2dudSIpOworKwlhZGRNYWNybyhOVUxMLCAiX2dudSIsIE5VTEwsIGNlLCBSTUlMX1JQTVJDKTsKKysgICAgfQorIAorICAgICBpZiAoY2Fub250YXJnZXQpCisgCSpjYW5vbnRhcmdldCA9IGN0OworQEAgLTEwMDQsOCArMTA0OSwxMiBAQCBzdGF0aWMgdm9pZCBycG1SZWJ1aWxkVGFyZ2V0VmFycyhjb25zdCBjCisgCWN0ID0gX2ZyZWUoY3QpOworICAgICBjYSA9IF9mcmVlKGNhKTsKKyAgICAgLypALXVzZXJlbGVhc2VkQCovCisrICAgIGN2ID0gX2ZyZWUoY3YpOworKyAgICAvKkAtdXNlcmVsZWFzZWRAKi8KKyAgICAgY28gPSBfZnJlZShjbyk7CisgICAgIC8qQD11c2VyZWxlYXNlZEAqLworKyAgICBjZSA9IF9mcmVlKGNlKTsKKysgICAgLypALXVzZXJlbGVhc2VkQCovCisgfQorIAorIHZvaWQgcnBtRnJlZVJwbXJjKHZvaWQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1jaGVjay1yb290cGF0aC1yZWFzb25hYmxlbmVzcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWNoZWNrLXJvb3RwYXRoLXJlYXNvbmFibGVuZXNzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ODYwMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1jaGVjay1yb290cGF0aC1yZWFzb25hYmxlbmVzcy5wYXRjaApAQCAtMCwwICsxLDk2IEBACitycG06IGNoZWNrIGlmIHRoZSBhcmd1bWVudChyb290cGF0aCkgZXhpc3RzIG9yIGJlIHdyaXRhYmxlCisKK1doZW4gdXNlciBleGVjdXRlIHRoZSBjb21tYW5kICJycG0gLXFhaSAtLXJvb3Q9JGRpciIsaWYgJGRpciBkb2Vzbid0CitleGlzdCBvciBpcyB1bndyaXRhYmxlIGFzIHJlc3VsdCBvZiBtYWtpbmcgYSB0eXBvIGluIHJvb3RwYXRoLHRoZW4KK2l0IHdpbGwgY3JlYXRlIGRpcmVudCAkZGlyIGFuZCBzdWJkaXJlY3RvcnkuCitTbyB3ZSBzaG91bGQgYWRkIHRoZSBjaGVjayBmdW5jdGlvbiB0byBmaXggaXQgYmVmb3JlIGNyZWF0aW5nIHJlbGF0aW9uYWwKK3N1YmRpcmVjdG9yeSxhbmQgd2FybiB0aGUgaW5jb3JyZWN0IHJvb3RwYXRoIHRvIHVzZXIuIEl0IGp1c3QgY2hlY2tzIHRoZQorcm9vdHBhdGggcmVhc29uYWJsZW5lc3Mgd2hlbiB0aGUgdXNlciBpbnB1dCB0aGUgYXJndW1lbnQoLS1yb290PS8tcj0pLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWmhpeGlvbmcgQ2hpIDx6Y2hpQHdpbmRyaXZlci5jb20+CistLS0KKyBycG1xdi5jIHwgNDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDQ1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3JwbXF2LmMgYi9ycG1xdi5jCitpbmRleCA0MGM0MmJkLi44OGQ4NWFiIDEwMDY0NAorLS0tIGEvcnBtcXYuYworKysrIGIvcnBtcXYuYworQEAgLTIwNiw2ICsyMDYsOCBAQCBzdGF0aWMgc3RydWN0IHBvcHRPcHRpb24gb3B0aW9uc1RhYmxlW10gPSB7CisgICAgUE9QVF9UQUJMRUVORAorIH07CisgCisrc3RhdGljIGludCBfcnBtcXZfcm9vdHBhdGhfc3RhdGUgPSAwOworKworICNpZmRlZiBfX01JTlRfXworIC8qIE1pTlQgY2Fubm90IGR5bmFtaWNhbGx5IGluY3JlYXNlIHRoZSBzdGFjay4gICovCisgbG9uZyBfc3Rrc2l6ZSA9IDY0ICogMTAyNEw7CitAQCAtNDI3LDYgKzQyOSw0MSBAQCBzdGF0aWMgdm9pZCBpbnRlZ3JpdHlfY2hlY2soY29uc3QgY2hhciAqcHJvZ25hbWUsIGVudW0gbW9kZXMgcHJvZ21vZGVfbnVtKQorIH0KKyAjZW5kaWYKKyAKKysvKmNoZWNrIGlmIHRoZSByb290ZGlyIGlzIHdyaXRhYmxlIG9yIGV4aXN0cyAqLworK2ludCBhY2Nlc3NfZmlsZShjb25zdCBjaGFyICpyb290ZGlyKQorK3sKKysgICAgaW50IHJldCxyb290ZGlyX2xlbjsKKysKKysgICAgaWYocm9vdGRpciA9PSBOVUxMKSB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAgcm9vdGRpcl9sZW4gPSBzdHJsZW4ocm9vdGRpcik7CisrICAgIC8qbWFrZSBzdXJlIHRoYXQgZGlyZW50IGFyZ3VtZW50IHRyYWlsaW5nIGlzICIvIiAqLworKyAgICBpZighKHJvb3RkaXJfbGVuICYmIHJvb3RkaXJbcm9vdGRpcl9sZW4gLSAxXSA9PSAnLycpKXsKKysgICAgICAgIGNoYXIgKnQgPSAoY2hhciAqKW1hbGxvYyhyb290ZGlyX2xlbiArIDIpOworKyAgICAgICAgKnQgPSAnXDAnOworKyAgICAgICAgKHZvaWQpc3RwY3B5KHN0cGNweSh0LHJvb3RkaXIpLCIvIik7CisrICAgICAgICByZXQgPSBhY2Nlc3ModCxGX09LfFdfT0spOworKyAgICAgICAgZnJlZSh0KTsKKysgICAgfWVsc2V7CisrICAgICAgICByZXQgPSBhY2Nlc3Mocm9vdGRpcixGX09LfFdfT0spOworKyAgICB9CisrICAgIHJldHVybiByZXQ7CisrfQorKworKy8qY2hlY2sgaWYgaW5wdXQgdGhlIGFyZ3VtZW50ICItLXJvb3QvLXIiICAqLworK3ZvaWQgY2hlY2tfYXJndW1lbnRfcm9vdChpbnQgYXJnYyxjaGFyICogY29uc3QgYXJndltdKQorK3sKKysgICAgaW50IGk7CisrICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKysgICAgICAgIGlmKHN0cm5jbXAoYXJndltpXSwiLS1yb290PSIsNykgPT0gMCB8fCBzdHJuY21wKGFyZ3ZbaV0sIi1yPSIsMykgPT0gMCkgeworKyAgICAgICAgICAgIF9ycG1xdl9yb290cGF0aF9zdGF0ZSA9IDE7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgIH0KKyt9CisrCisgLypALWJvdW5kc0AqLyAvKiBMQ0w6IHNlZ2ZhdWx0ICovCisgLypALW1vZHNAKi8gLyogRklYOiBzaHJ1ZyAqLworICNpZiAhZGVmaW5lZChfX0dMSUJDX18pICYmICFkZWZpbmVkKF9fTENMSU5UX18pCitAQCAtNDc2LDYgKzUxMyw4IEBAIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqIGFyZ3YpCisgICAgIGludCB4eDsKKyAjZW5kaWYKKyAJCisrICAgIGNoZWNrX2FyZ3VtZW50X3Jvb3QoYXJnYywoY2hhciAqY29uc3QgKilhcmd2KTsKKysKKyAjaWYgIWRlZmluZWQoX19HTElCQ19fKSAmJiAhZGVmaW5lZChfX0xDTElOVF9fKQorICAgICBlbnZpcm9uID0gZW52cDsKKyAjZWxzZQorQEAgLTcxNSw2ICs3NTQsMTIgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiogYXJndikKKyAJCWFyZ2Vycm9yKF8oImFyZ3VtZW50cyB0byAtLXJvb3QgKC1yKSBtdXN0IGJlZ2luIHdpdGggYSAvIikpOworIAkgICAgYnJlYWs7CisgCX0KKysgICAgICAgIGlmIChfcnBtcXZfcm9vdHBhdGhfc3RhdGUpIHsKKysgICAgICAgICAgICBpZiAoYWNjZXNzX2ZpbGUocnBtaW9Sb290RGlyKSkgeworKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiSW52YWxpZCBkaXJlY3Rvcnk6JXMsIGVuc3VyZSBpdCBleGlzdHMgb3IgYmUgd3JpdGFibGVcbiIpLHJwbWlvUm9vdERpcik7CisrICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisgICAgIH0KKyAKKyAjaWYgZGVmaW5lZChSUE1fVkVORE9SX09QRU5QS0cpIC8qIGludGVncml0eS1jaGVja2luZyAqLworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kYi1yZWR1Y2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kYi1yZWR1Y2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg2OTM3NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRiLXJlZHVjZS5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0NoYW5nZSBjYWNoZSBzaXplIHRvIHJlZHVjZSB0aGUgdXNhZ2Ugb2YgZGlzayBzcGFjZSBmcm9tIDYyTUIgdG8gMjZNQi4gCisKK1NpZ25lZC1vZmYtYnk6IE1laSBMZWkgPGxlaS5tZWlAaW50ZWwuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9ycG1kYi9EQl9DT05GSUcuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtZGIvREJfQ09ORklHLmluCisrKysgcnBtLTUuNC4xNC9ycG1kYi9EQl9DT05GSUcuaW4KK0BAIC0yOSw3ICsyOSw3IEBAIHNldF90aHJlYWRfY291bnQgNjQKKyAKKyAjID09PT09PT09PT09PT09PT0gTWVtb3J5IFBvb2wKKyAjWFhYIGluaXRpYWxpemluZyBkYmVudiB3aXRoIHNldF9jYWNoZXNpemUgaGFzIHVuaW1wbGVtZW50ZWQgcHJlcmVxdXNpdGVzCistI3NldF9jYWNoZXNpemUgMCAxMDQ4NTc2IDAgCisrc2V0X2NhY2hlc2l6ZSAwIDEwNDg1NzYgMCAKKyBzZXRfbXBfbW1hcHNpemUgMjY4NDM1NDU2CisgCisgIyA9PT09PT09PT09PT09PT09IExvY2tpbmcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRiNS1vci1kYjYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kYjUtb3ItZGI2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MDIwYTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kYjUtb3ItZGI2LnBhdGNoCkBAIC0wLDAgKzEsMTYyIEBACitTdXBwb3J0IGJvdGggZGI1IGFuZCBkYjYuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHJwbS9jb25maWd1cmUuYWMKK0BAIC01NDcsOCArNTQ3LDYgQEAgZWxzZQorICAgICBNWVBBVEg9JFBBVEgKKyBmaQorIAorLURCWFk9ZGI2MAorLQorIEFDX1BBVEhfUFJPRyhfX0JBU0gsIGJhc2gsICV7X2JpbmRpcn0vYmFzaCwgJE1ZUEFUSCkKKyBBQ19QQVRIX1BST0coX19CWklQMiwgYnppcDIsICV7X2JpbmRpcn0vYnppcDIsICRNWVBBVEgpCisgQUNfUEFUSF9QUk9HKF9fQ0FULCBjYXQsIC9iaW4vY2F0LCAkTVlQQVRIKQorQEAgLTU2MCwyMiArNTU4LDYgQEAgQUNfUEFUSF9QUk9HKF9fQ01BS0UsIGNtYWtlLCAle19iaW5kaXJ9LworIEFDX1BBVEhfUFJPRyhfX0NQSU8sIGNwaW8sIC9iaW4vY3BpbywgJE1ZUEFUSCkKKyBBQ19QQVRIX1BST0coX19DVVJMLCBjdXJsLCAle19iaW5kaXJ9L2N1cmwsICRNWVBBVEgpCisgQUNfUEFUSF9QUk9HKF9fQ1ZTLCBjdnMsICV7X2JpbmRpcn0vY3ZzLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX0FSQ0hJVkUsICR7REJYWX1fYXJjaGl2ZSwgJXtfYmluZGlyfS8ke0RCWFl9X2FyY2hpdmUsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfQ0hFQ0tQT0lOVCwgJHtEQlhZfV9jaGVja3BvaW50LCAle19iaW5kaXJ9LyR7REJYWX1fY2hlY2twb2ludCwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9ERUFETE9DSywgJHtEQlhZfV9kZWFkbG9jaywgJXtfYmluZGlyfS8ke0RCWFl9X2RlYWRsb2NrLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX0RVTVAsICR7REJYWX1fZHVtcCwgJXtfYmluZGlyfS8ke0RCWFl9X2R1bXAsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfSE9UQkFDS1VQLCAke0RCWFl9X2hvdGJhY2t1cCwgJXtfYmluZGlyfS8ke0RCWFl9X2hvdGJhY2t1cCwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9MT0FELCAke0RCWFl9X2xvYWQsICV7X2JpbmRpcn0vJHtEQlhZfV9sb2FkLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX0xPR19WRVJJRlksICR7REJYWX1fbG9nX3ZlcmlmeSwgJXtfYmluZGlyfS8ke0RCWFl9X2xvZ192ZXJpZnksICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfUFJJTlRMT0csICR7REJYWX1fcHJpbnRsb2csICV7X2JpbmRpcn0vJHtEQlhZfV9wcmludGxvZywgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9SRUNPVkVSLCAke0RCWFl9X3JlY292ZXIsICV7X2JpbmRpcn0vJHtEQlhZfV9yZWNvdmVyLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX1JFUExJQ0FURSwgJHtEQlhZfV9yZXBsaWNhdGUsICV7X2JpbmRpcn0vJHtEQlhZfV9yZXBsaWNhdGUsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJTUUwsICR7REJYWX1zcWwsICV7X2JpbmRpcn0vJHtEQlhZfXNxbCwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9TUUxfQ09ERUdFTiwgJHtEQlhZfV9zcWxfY29kZWdlbiwgJXtfYmluZGlyfS8ke0RCWFl9X3NxbF9jb2RlZ2VuLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX1NUQVQsICR7REJYWX1fc3RhdCwgJXtfYmluZGlyfS8ke0RCWFl9X3N0YXQsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfVFVORVIsICR7REJYWX1fdHVuZXIsICV7X2JpbmRpcn0vJHtEQlhZfV90dW5lciwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9VUEdSQURFLCAke0RCWFl9X3VwZ3JhZGUsICV7X2JpbmRpcn0vJHtEQlhZfV91cGdyYWRlLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX1ZFUklGWSwgJHtEQlhZfV92ZXJpZnksICV7X2JpbmRpcn0vJHtEQlhZfV92ZXJpZnksICRNWVBBVEgpCisgQUNfUEFUSF9QUk9HKF9fRElGRiwgZGlmZiwgL2Jpbi9kaWZmLCAkTVlQQVRIKQorIEFDX1BBVEhfUFJPRyhfX0RJVFRPLCBkaXR0bywgJXtfYmluZGlyfS9kaXR0bywgJE1ZUEFUSCkKKyBBQ19QQVRIX1BST0coX19GSUxFLCBmaWxlLCAle19iaW5kaXJ9L2ZpbGUsICRNWVBBVEgpCitAQCAtMTYwNCwxMyArMTU4NiwxOCBAQCBSUE1fQ0hFQ0tfTElCKAorIAorIGRubCAjIEJlcmtlbGV5LURCICYgU1FMaXRlCisgREJMSUJTUkNTPSIiCisrREJYWT1kYgorKworICMgWFhYIHdvbid0IGhhbmRsZSAtLWluY2x1ZGVkaXIgb3ZlcnJpZGUKKy1DUFBGTEFHUz0iJHtDUFBGTEFHU30gLUkke3ByZWZpeH0vaW5jbHVkZS8ke0RCWFl9IgorK0NQUEZMQUdTX3NhdmU9IiR7Q1BQRkxBR1N9IgorK0NQUEZMQUdTPSIke0NQUEZMQUdTX3NhdmV9IC1JJHtwcmVmaXh9L2luY2x1ZGUvZGItNi4wIgorK3dpdGhfZGJfc2F2ZT0iJHt3aXRoX2RifSIKKyBSUE1fQ0hFQ0tfTElCKAorICAgICBbQmVya2VsZXktREJdLCBbZGJdLAorICAgICBbZGItNi4wXSwgW2RiX2NyZWF0ZV0sIFtkYi5oXSwKKy0gICAgW3llcyxleHRlcm5hbF0sIFtkYjNdLAorKyAgICBbeWVzLGV4dGVybmFsXSwgW2RiNl0sCisgICAgIFsgREJMSUJTUkNTPSIkREJMSUJTUkNTIGRiMy5jIgorKyAgICAgIERCWFk9ZGI2MAorICAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREIsIFsgdHJ1ZSBdKQorICAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREJfSU5URVJOQUwsIFsgdGVzdCAiLiRSUE1fQ0hFQ0tfTElCX0xPQ0FUSU9OIiA9IC5pbnRlcm5hbCBdKQorICAgICAgIGlmIHRlc3QgIi4kUlBNX0NIRUNLX0xJQl9MT0NBVElPTiIgPSAuaW50ZXJuYWw7IHRoZW4KK0BAIC0xNjE5LDEwICsxNjA2LDMyIEBAIFJQTV9DSEVDS19MSUIoCisgICAgICAgICAgIFdJVEhfREJfU1VCRElSPSIiCisgICAgICAgZmkKKyAgICAgXSwKKy0gICAgWyBBTV9DT05ESVRJT05BTChXSVRIX0RCLCBbIGZhbHNlIF0pCistICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQl9JTlRFUk5BTCwgWyBmYWxzZSBdKQorKyAgICBbICMgUmVzZXQgYSBmZXcgdmFyaWFibGVzIHRvIGZyZXNoCisrICAgICAgd2l0aF9kYj0iJHt3aXRoX2RiX3NhdmV9IgorKyAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTX3NhdmV9IC1JJHtwcmVmaXh9L2luY2x1ZGUvZGItNS4zIgorKyAgICAgIFJQTV9DSEVDS19MSUIoCisrICAgICAgICBbQmVya2VsZXktREJdLCBbZGJdLAorKyAgICAgICAgW2RiLTUuM10sIFtkYl9jcmVhdGVdLCBbZGIuaF0sCisrICAgICAgICBbeWVzLGV4dGVybmFsXSwgW2RiNTNdLAorKyAgICAgICAgWyBEQkxJQlNSQ1M9IiREQkxJQlNSQ1MgZGIzLmMiCisrICAgICAgICAgIERCWFk9ZGI1MworKyAgICAgICAgICBBTV9DT05ESVRJT05BTChXSVRIX0RCLCBbIHRydWUgXSkKKysgICAgICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQl9JTlRFUk5BTCwgWyB0ZXN0ICIuJFJQTV9DSEVDS19MSUJfTE9DQVRJT04iID0gLmludGVybmFsIF0pCisrICAgICAgICAgIGlmIHRlc3QgIi4kUlBNX0NIRUNLX0xJQl9MT0NBVElPTiIgPSAuaW50ZXJuYWw7IHRoZW4KKysgICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0RCX0gsIDEsIFtIYXZlIDxkYi5oPiBoZWFkZXJdKQorKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICBXSVRIX0RCX1NVQkRJUj0iIgorKyAgICAgICAgICBmaQorKyAgICAgICAgXSwKKysgICAgICAgIFsgQU1fQ09ORElUSU9OQUwoV0lUSF9EQiwgWyBmYWxzZSBdKQorKyAgICAgICAgICBBTV9DT05ESVRJT05BTChXSVRIX0RCX0lOVEVSTkFMLCBbIGZhbHNlIF0pCisrICAgICAgICBdKQorICAgICBdKQorIAorK2lmIHRlc3QgIi4kYWNfY3ZfbGliX2RiXzZfMF9kYl9jcmVhdGUiICE9IC55ZXMgLWEgIi4kYWNfY3ZfbGliX2RiXzVfM19kYl9jcmVhdGUiICE9IC55ZXM7IHRoZW4KKysgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1Nfc2F2ZX0iCisrZmkKKysKKyBkbmwgIyBTcWxpdGUgZXh0ZXJuYWwKKyBSUE1fQ0hFQ0tfTElCKAorICAgICBbU1FMaXRlXSwgW3NxbGl0ZV0sCitAQCAtMTYzMywxMCArMTY0MiwxMSBAQCBSUE1fQ0hFQ0tfTElCKAorIAorIGRubCAjIFNxbGl0ZSAzLjcuMC4xIGZyb20gZGItNS4xLjE5CisgZG5sIFhYWCBlcnJvcjogYGRiMycgaXMgYWxyZWFkeSByZWdpc3RlcmVkIHdpdGggQUNfQ09ORklHX1NVQkRJUlMuCisraWYgdGVzdCAiLiRhY19jdl9saWJfZGJfNl8wX2RiX2NyZWF0ZSIgPSAueWVzOyB0aGVuCisgUlBNX0NIRUNLX0xJQigKKyAgICAgW0JlcmtlbGV5LURCICgrU1FMaXRlMyldLCBbZGJzcWxdLAorICAgICBbZGJfc3FsLTYuMF0sIFtzcWxpdGUzX29wZW5dLCBbZGJzcWwuaF0sCistICAgIFt5ZXMsZXh0ZXJuYWxdLCBbZGIzL3NxbF0sCisrICAgIFt5ZXMsZXh0ZXJuYWxdLCBbZGI2L3NxbF0sCisgICAgIFsKKyAgICAgICBBTV9DT05ESVRJT05BTChXSVRIX0RCU1FMLCBbIHRydWUgXSkKKyAgICAgICBBQ19ERUZJTkUoV0lUSF9TUUxJVEUsIDEsIFtEZWZpbmUgYXMgMSBpZiBidWlsZGluZyB3aXRoIFNRTGl0ZSBsaWJyYXJ5XSkKK0BAIC0xNjUwLDEyICsxNjYwLDUwIEBAIFJQTV9DSEVDS19MSUIoCisgICAgIF0sIFsKKyAgICAgICBBTV9DT05ESVRJT05BTChXSVRIX0RCU1FMLCBbIGZhbHNlIF0pCisgICAgIF0pCisrZWxpZiB0ZXN0ICIuJGFjX2N2X2xpYl9kYl81XzNfZGJfY3JlYXRlIiA9IC55ZXM7IHRoZW4KKytSUE1fQ0hFQ0tfTElCKAorKyAgICBbQmVya2VsZXktREIgKCtTUUxpdGUzKV0sIFtkYnNxbF0sCisrICAgIFtkYl9zcWwtNS4zXSwgW3NxbGl0ZTNfb3Blbl0sIFtkYnNxbC5oXSwKKysgICAgW3llcyxleHRlcm5hbF0sIFtkYjUzL3NxbF0sCisrICAgIFsKKysgICAgICBBTV9DT05ESVRJT05BTChXSVRIX0RCU1FMLCBbIHRydWUgXSkKKysgICAgICBBQ19ERUZJTkUoV0lUSF9TUUxJVEUsIDEsIFtEZWZpbmUgYXMgMSBpZiBidWlsZGluZyB3aXRoIFNRTGl0ZSBsaWJyYXJ5XSkKKysgICAgICBpZiB0ZXN0ICIuJFJQTV9DSEVDS19MSUJfTE9DQVRJT04iID0gLmludGVybmFsOyB0aGVuCisrICAgICAgICBXSVRIX0RCX0NQUEZMQUdTPSIke1dJVEhfREJfQ1BQRkxBR1N9IC1JXCQodG9wX3NyY2RpcikvZGIvc3FsL2dlbmVyYXRlZCIKKysgICAgICAgIFdJVEhfREJfTElCUz0iJHtXSVRIX0RCU1FMX0xJQlN9IgorKyAgICAgICAgREJMSUJTUkNTPSIkREJMSUJTUkNTIHNxbGl0ZS5jIgorKyAgICAgIGVsc2UKKysgICAgICAgIFdJVEhfREJTUUxfU1VCRElSPSIiCisrICAgICAgZmkKKysgICAgXSwgWworKyAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREJTUUwsIFsgZmFsc2UgXSkKKysgICAgXSkKKytlbHNlCisrQU1fQ09ORElUSU9OQUwoV0lUSF9EQlNRTCwgWyBmYWxzZSBdKQorK2ZpCisgCisgREJMSUJPQkpTPWBlY2hvICREQkxJQlNSQ1MgfCBzZWQgLWUgInMvXC5jL1wubG8vZyJgCisgCisgQUNfU1VCU1QoREJMSUJTUkNTKQorIEFDX1NVQlNUKERCTElCT0JKUykKKyAKKytBQ19QQVRIX1BST0coX19EQl9BUkNISVZFLCAke0RCWFl9X2FyY2hpdmUsICV7X2JpbmRpcn0vJHtEQlhZfV9hcmNoaXZlLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX0NIRUNLUE9JTlQsICR7REJYWX1fY2hlY2twb2ludCwgJXtfYmluZGlyfS8ke0RCWFl9X2NoZWNrcG9pbnQsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfREVBRExPQ0ssICR7REJYWX1fZGVhZGxvY2ssICV7X2JpbmRpcn0vJHtEQlhZfV9kZWFkbG9jaywgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9EVU1QLCAke0RCWFl9X2R1bXAsICV7X2JpbmRpcn0vJHtEQlhZfV9kdW1wLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX0hPVEJBQ0tVUCwgJHtEQlhZfV9ob3RiYWNrdXAsICV7X2JpbmRpcn0vJHtEQlhZfV9ob3RiYWNrdXAsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfTE9BRCwgJHtEQlhZfV9sb2FkLCAle19iaW5kaXJ9LyR7REJYWX1fbG9hZCwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9MT0dfVkVSSUZZLCAke0RCWFl9X2xvZ192ZXJpZnksICV7X2JpbmRpcn0vJHtEQlhZfV9sb2dfdmVyaWZ5LCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX1BSSU5UTE9HLCAke0RCWFl9X3ByaW50bG9nLCAle19iaW5kaXJ9LyR7REJYWX1fcHJpbnRsb2csICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfUkVDT1ZFUiwgJHtEQlhZfV9yZWNvdmVyLCAle19iaW5kaXJ9LyR7REJYWX1fcmVjb3ZlciwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9SRVBMSUNBVEUsICR7REJYWX1fcmVwbGljYXRlLCAle19iaW5kaXJ9LyR7REJYWX1fcmVwbGljYXRlLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCU1FMLCAke0RCWFl9c3FsLCAle19iaW5kaXJ9LyR7REJYWX1zcWwsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfU1FMX0NPREVHRU4sICR7REJYWX1fc3FsX2NvZGVnZW4sICV7X2JpbmRpcn0vJHtEQlhZfV9zcWxfY29kZWdlbiwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9TVEFULCAke0RCWFl9X3N0YXQsICV7X2JpbmRpcn0vJHtEQlhZfV9zdGF0LCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX1RVTkVSLCAke0RCWFl9X3R1bmVyLCAle19iaW5kaXJ9LyR7REJYWX1fdHVuZXIsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfVVBHUkFERSwgJHtEQlhZfV91cGdyYWRlLCAle19iaW5kaXJ9LyR7REJYWX1fdXBncmFkZSwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9WRVJJRlksICR7REJYWX1fdmVyaWZ5LCAle19iaW5kaXJ9LyR7REJYWX1fdmVyaWZ5LCAkTVlQQVRIKQorKworIEFDX0FSR19XSVRIKGRiLWxhcmdlZmlsZSwgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1kYi1sYXJnZWZpbGVdLCBbYnVpbGQgQmVya2VsZXktREIgd2l0aCBMQVJHRUZJTEUgc3VwcG9ydF0pKQorIEFDX0FSR19XSVRIKGRiLW11dGV4LCAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1kYi1tdXRleD1BUkddLCBbYnVpbGQgQmVya2VsZXktREIgd2l0aCBNVVRFWCB0eXBlIEFSR10pKQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGJfYnVmZmVyX3NtYWxsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGJfYnVmZmVyX3NtYWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YjhlMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kYl9idWZmZXJfc21hbGwucGF0Y2gKQEAgLTAsMCArMSw3NyBAQAorSW4gY2VydGFpbiBjYXNlcyB3aXRoIEJlcmtsZXlEQiA1LjMueCB3ZSBhcmUgZ2V0dGluZyB0aGUgZXJyb3I6CisKK2RiMy5jOjE0NDM6IGRiY3Vyc29yLT5wZ2V0KC0zMDk5OSk6IEJEQjAwNjMgREJfQlVGRkVSX1NNQUxMOiBVc2VyIG1lbW9yeSB0b28gc21hbGwgZm9yIHJldHVybiB2YWx1ZQorCitTZWUgaHR0cHM6Ly9idWdzLmxhdW5jaHBhZC5uZXQvcnBtLytidWcvOTM0NDIwIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitJdCBhcHBlYXJzIHRvIGJlIHNvbWUgdHlwZSBvZiBhIGJ1ZyBpbiB0aGUgQmVya2xleURCIDUuMy54LiAgSW4gYW4gYXR0ZW1wdAordG8gd29ya2Fyb3VuZCB0aGUgcHJvYmxlbSwgd2hlbiB3ZSBlbmNvdW50ZXIgdGhpcyBzaXR1YXRpb24gd2UgYXR0ZW1wdAordG8gYWRqdXN0IHRoZSBzaXplIG9mIHRoZSBtbWFwIGJ1ZmZlciB1bnRpbCB0aGUgY2FsbCB3b3Jrcywgb3Igd2UKK2VuZCB1cCB0cnlpbmcgMTAgdGltZXMuICBUaGUgbmV3IHNpemUgaXMgZWl0aGVyIHRoZSB1cGRhdGVkIHZwLT5zaXplCitmcm9tIHRoZSBmYWlsZWQgcGdldCBjYWxsLCBvciB0aGUgcHJldmlvdXMgc2l6ZSArIDEwMjQuCisKK0lmIERCSSBkZWJ1Z2dpbmcgaXMgZW5hYmxlZCwgYWRkaXRpb25hbCBkaWFnbm9zdGljcyBhcmUgcHJpbnRlZCwgb3RoZXJ3aXNlCithIGJhc2ljIHJldHJ5IGFuZCBzdWNjZXNzIG1lc3NhZ2UgaXMgYWRkZWQgdG8gc2hvdyB0aGF0IHRoZSBmYWlsdXJlIHdhcworcmVzb2x2ZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSAod29ya2Fyb3VuZCkKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9ycG1kYi9ycG1kYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWRiL3JwbWRiLmMKKysrKyBycG0tNS40LjE0L3JwbWRiL3JwbWRiLmMKK0BAIC0yMjEyLDggKzIyMTIsMTIgQEAgc3RhdGljIGludCBycG1taUdldChkYmlJbmRleCBkYmksIERCQyAqCisgCXZwLT5mbGFncyB8PSBEQl9EQlRfVVNFUk1FTTsKKyAJcmMgPSBkYmlHZXQoZGJpLCBkYmN1cnNvciwga3AsIHZwLCBmbGFncyk7CisgCWlmIChyYyA9PSBEQl9CVUZGRVJfU01BTEwpIHsKKysJICAgIGludCByZXRyeSA9IDA7CisrCSAgICBzaXplX3Qgb3JpZ2xlbiA9IHZwLT5zaXplOworIAkgICAgc2l6ZV90IHVobGVuID0gdnAtPnNpemU7CistCSAgICB2b2lkICogdWggPSBtbWFwKE5VTEwsIHVobGVuLCBfcHJvdCwgX2ZsYWdzLCBfZmRubywgX29mZik7CisrCSAgICB2b2lkICogdWg7CisrcmV0cnlfZ2V0OgorKwkgICAgdWggPSBtbWFwKE5VTEwsIHVobGVuLCBfcHJvdCwgX2ZsYWdzLCBfZmRubywgX29mZik7CisgCSAgICBpZiAodWggPT0gTlVMTCB8fCB1aCA9PSAodm9pZCAqKS0xKQorIAkJZnByaW50ZihzdGRlcnIsCisgCQkgICAgIj09PiBtbWFwKCVwWyV1XSwgMHgleCwgMHgleCwgJWQsIDB4JXgpIGVycm9yKCVkKTogJXNcbiIsCitAQCAtMjIzNSw2ICsyMjM5LDI1IEBAIHN0YXRpYyBpbnQgcnBtbWlHZXQoZGJpSW5kZXggZGJpLCBEQkMgKgorIAkJaWYgKG11bm1hcCh1aCwgdWhsZW4pICE9IDApCisgCQkgICAgZnByaW50ZihzdGRlcnIsICI9PT4gbXVubWFwKCVwWyV1XSkgZXJyb3IoJWQpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgCXVoLCAodW5zaWduZWQpdWhsZW4sIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworKwkgICAgICAgIC8qIFdlIHdhbnQgdG8gYmUgc3VyZSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHJldHJ5IGF0dGVtcHRzIHRvIGF2b2lkIGEgbG9vcCEgKi8KKysJICAgICAgICBpZiAocmMgPT0gREJfQlVGRkVSX1NNQUxMICYmIHJldHJ5IDwgMTApIHsKKysJCSAgIC8qIElmIHdlIGdvdCBhIGxhcmdyIHZwLXNpemUgYmFjaywgdXNlIHRoYXQsIG90aGVyd2lzZSBpbmNyZW1lbnQgdGhlIHNpemUgYnkgMWsgKi8KKysJICAgICAgICAgICB1aGxlbiA9IHZwLT5zaXplID4gdWhsZW4gPyB2cC0+c2l6ZSA6IHVobGVuICsgMTAyNDsKKysJCSAgIHJldHJ5Kys7CisrCSAgICAgICAgICAgaWYgKChkYmkpLT5kYmlfZGVidWcpCisrCSAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiPT0+IERCX0JVRkZFUl9TTUFMTCBvcmlnIHJlcXVlc3RlZCAoJWQpLCBjb25maWd1cmVkICglZCksIGZvcmNpbmcgbGFyZ2VyIGJ1ZmZlciAoJWQpLCBuZXcgc2l6ZSAoJWQpXG4iLAorKwkgICAgICAgICAgICAgICAgICAgIG9yaWdsZW4sIHZwLT51bGVuLCB1aGxlbiwgdnAtPnNpemUpOworKwkgICAgICAgICAgIGVsc2UKKysJICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI9PT4gcmV0cnkgKCVkKSBkYjNjcGdldCAoJWQpXG4iLCByZXRyeSwgdWhsZW4pOworKwkgICAgICAgICAgIGdvdG8gcmV0cnlfZ2V0OworKwkgICAgICAgIH0KKysJICAgIH0KKysJICAgIGlmIChyZXRyeSkgeworKwkgICAgICAgIGlmICgoZGJpKS0+ZGJpX2RlYnVnKQorKwkgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiPT0+IHN1Y2Nlc3Mgb3JpZyByZXF1ZXN0ZWQgKCVkKSwgY29uZmlndXJlZCBidWZmZXIgKCVkKSwgYnVmZmVyICglZCksIHNpemUgYWZ0ZXIgZGJpR2V0ICglZClcbiIsCisrCQkJb3JpZ2xlbiwgdnAtPnVsZW4sIHVobGVuLCB2cC0+c2l6ZSk7CisrCSAgICAgICAgZWxzZQorKwkgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiPT0+IHN1Y2Nlc3NcbiIpOworIAkgICAgfQorIAl9CisgICAgIH0gZWxzZQorSW5kZXg6IHJwbS01LjQuMTQvcnBtZGIvZGIzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtZGIvZGIzLmMKKysrKyBycG0tNS40LjE0L3JwbWRiL2RiMy5jCitAQCAtMTUwOSw3ICsxNTA5LDcgQEAgYXNzZXJ0KGRiICE9IE5VTEwpOworICNlbmRpZgorICAgICB9CisgCistREJJREVCVUcoZGJpLCAoc3RkZXJyLCAiPC0tICVzKCVwLCVwLCVwLCVwLCVwLDB4JXgpIHJjICVkICVzJXNcbiIsIF9fRlVOQ1RJT05fXywgZGJpLCBkYmN1cnNvciwga2V5LCBwa2V5LCBkYXRhLCBmbGFncywgcmMsIF9EQkNGTEFHUyhmbGFncyksIF9LRVlEQVRBKGtleSwgcGtleSwgZGF0YSwgTlVMTCkpKTsKKytEQklERUJVRyhkYmksIChzdGRlcnIsICI8LS0gJXMoJXAsJXAsJXAsJXAsJXAsMHgleCkgcmMgJWQgJXMlc1xuIiwgX19GVU5DVElPTl9fLCBkYmksIGRiY3Vyc29yLCBrZXksIHBrZXksIGRhdGEsIGZsYWdzLCByYywgX0RCQ0ZMQUdTKGZsYWdzKSwgX0tFWURBVEEoa2V5LCBwa2V5LCByYyA9PSBEQl9CVUZGRVJfU01BTEwgPyBOVUxMIDogZGF0YSwgTlVMTCkpKTsKKyAgICAgcmV0dXJuIHJjOworIH0KKyAvKkA9bXVzdG1vZEAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGVidWctcGxhdGZvcm0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kZWJ1Zy1wbGF0Zm9ybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWI2ZTBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGVidWctcGxhdGZvcm0ucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorRGVidWcgdGhlIHBsYXRmb3JtIHNjb3JlIGdlbmVyYXRpb24uLi4KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL3JwbXJjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3JwbXJjLmMKKysrKyBycG0tNS40LjE0L2xpYi9ycG1yYy5jCitAQCAtNDY1LDYgKzQ2NSw4IEBAIHN0YXRpYyBycG1SQyBycG1QbGF0Zm9ybShjb25zdCBjaGFyICogcGwKKyAKKyAgICAgcmMgPSAocnBtUkMpIHJwbWlvYlNsdXJwKHBsYXRmb3JtLCAmaW9iKTsKKyAKKysgICAgZnByaW50ZihzdGRlcnIsICJEOiBycG1QbGF0Zm9ybSBmaWxlICVzXG4iLCBwbGF0Zm9ybSk7CisrCisgICAgIGlmIChyYyB8fCBpb2IgPT0gTlVMTCkgeworIAlyYyA9IFJQTVJDX0ZBSUw7CisgCWdvdG8gZXhpdDsKK0BAIC00ODYsNiArNDg4LDcgQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorIAkgICAgd2hpbGUgKC0tdCA+IHAgJiYgeGlzc3BhY2UoKnQpKQorIAkJKnQgPSAnXDAnOworIAkgICAgaWYgKHQgPiBwKSB7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkQ6IHJwbVBsYXRmb3JtIG1pcmVBcHBlbmQgUkVHRVggJXNcbiIsIHApOworIAkJeHggPSBtaXJlQXBwZW5kKFJQTU1JUkVfUkVHRVgsIDAsIHAsIE5VTEwsICZtaV9yZSwgJm1pX25yZSk7CisgCSAgICB9CisgCSAgICBjb250aW51ZTsKK0BAIC01MDMsNiArNTA2LDExIEBAIHN0YXRpYyBycG1SQyBycG1QbGF0Zm9ybShjb25zdCBjaGFyICogcGwKKyAJCV9nbnUgPSBycG1FeHBhbmQoIi0iLCBjdm9nLT5nbnUsIE5VTEwpOworIAorIAkgICAgYWRkTWFjcm8oTlVMTCwgIl9wbGF0Zm9ybV9nbnUiLCBOVUxMLCAoX2dudSA/IF9nbnUgOiAiIiksIC0xKTsKKysJICAgIGZwcmludGYoc3RkZXJyLCAiRDogcnBtUGxhdGZvcm0gYWRkTWFjcm8gJXMtJXMtJXMoJXMpXG4iLAorKwkgICAgCXJwbUV4cGFuZCgiJXtfcGxhdGZvcm1fY3B1fSIsIE5VTEwpLAorKwkJcnBtRXhwYW5kKCIle19wbGF0Zm9ybV92ZW5kb3J9IiwgTlVMTCksCisrCQlycG1FeHBhbmQoIiV7X3BsYXRmb3JtX29zfSIsIE5VTEwpLAorKwkJcnBtRXhwYW5kKCIle19wbGF0Zm9ybV9nbnV9IiwgTlVMTCkpOworICNlbHNlCisgCSAgICBhZGRNYWNybyhOVUxMLCAiX2hvc3RfY3B1IiwgTlVMTCwgY3ZvZy0+Y3B1LCAtMSk7CisgCSAgICBhZGRNYWNybyhOVUxMLCAiX2hvc3RfdmVuZG9yIiwgTlVMTCwgY3ZvZy0+dmVuZG9yLCAtMSk7CitAQCAtNTEwLDYgKzUxOCw3IEBAIHN0YXRpYyBycG1SQyBycG1QbGF0Zm9ybShjb25zdCBjaGFyICogcGwKKyAjZW5kaWYKKyAJfQorIAorKwlmcHJpbnRmKHN0ZGVyciwgIkQ6IHJwbVBsYXRmb3JtIG1pcmVBcHBlbmQgU1RSQ01QICVzIC0tICIsIHApOworICNpZiAhZGVmaW5lZChSUE1fVkVORE9SX09FKSAvKiBTa2lwIHRoZSBleHBsaWNpdC1wbGF0Zm9ybSAqLworICNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfT1BFTlBLRykgLyogZXhwbGljaXQtcGxhdGZvcm0gKi8KKyAJLyogZG8gbm90IHVzZSB2ZW5kb3IgYW5kIEdOVSBhdHRyaWJ1dGlvbiAqLworQEAgLTUxOSw2ICs1MjgsNyBAQCBzdGF0aWMgcnBtUkMgcnBtUGxhdGZvcm0oY29uc3QgY2hhciAqIHBsCisgCQkoY3ZvZyAmJiAqY3ZvZy0+Z251ID8gIi0iIDogTlVMTCksCisgCQkoY3ZvZyA/IGN2b2ctPmdudSA6IE5VTEwpLCBOVUxMKTsKKyAjZW5kaWYKKysJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgcCk7CisgCXh4ID0gbWlyZUFwcGVuZChSUE1NSVJFX1NUUkNNUCwgMCwgcCwgTlVMTCwgJm1pX3JlLCAmbWlfbnJlKTsKKyAJcCA9IF9mcmVlKHApOworICNlbmRpZgorQEAgLTY4OCw5ICs2OTgsMTIgQEAgaW50IHJwbVBsYXRmb3JtU2NvcmUoY29uc3QgY2hhciAqIHBsYXRmbworIAorICAgICBpZiAoKG1pcmUgPSAobWlSRSkgbWlfcmUpICE9IE5VTEwpCisgICAgIGZvciAoaSA9IDA7IGkgPCBtaV9ucmU7IGkrKykgeworLQlpZiAobWlyZVJlZ2V4ZWMobWlyZSArIGksIHBsYXRmb3JtLCAwKSA+PSAwKQorKwlpZiAobWlyZVJlZ2V4ZWMobWlyZSArIGksIHBsYXRmb3JtLCAwKSA+PSAwKSB7CisrCSAgICBmcHJpbnRmKHN0ZGVyciwgIkQ6IHJwbVBsYXRmb3JtU2NvcmUgJXMgKCVkKVxuIiwgcGxhdGZvcm0sIGkgKyAxKTsKKyAJICAgIHJldHVybiAoaSArIDEpOworKwl9CisgICAgIH0KKysgICAgZnByaW50ZihzdGRlcnIsICJEOiBycG1QbGF0Zm9ybVNjb3JlICVzICglZClcbiIsIHBsYXRmb3JtLCAwKTsKKyAgICAgcmV0dXJuIDA7CisgfQorIC8qQD1vbmx5dHJhbnNAKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRpc2FibGUtV25vLW92ZXJyaWRlLWluaXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kaXNhYmxlLVduby1vdmVycmlkZS1pbml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNWY4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kaXNhYmxlLVduby1vdmVycmlkZS1pbml0LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gNzBkODgxODczYjQ0M2M5YmFkNTAyZGI5NjY1NTk1NDU1ZDRmMGFjOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCA4IEp1bCAyMDE0IDA3OjQxOjEwICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZS5hYzogZGlzYWJsZSAtV25vLW92ZXJyaWRlLWluaXQKKworRml4ZWQgcnBtLW5hdGl2ZS5kb19jb25maWd1cmUgZXJyb3Igb24gQ2VudE9TIDUueDoKKworY2MxOiBlcnJvcjogdW5yZWNvZ25pemVkIGNvbW1hbmQgbGluZSBvcHRpb24gIi1Xbm8tb3ZlcnJpZGUtaW5pdCIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBhZGVmZmUwLi42NzQ2YjRjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNjMsNyArMTYzLDcgQEAgQUNfQVJHX0VOQUJMRShidWlsZC13YXJuaW5ncywKKyAjIFhYWCBnY2MtNC4yIG9uIE1hYyBPUyBYIGhhc24ndAorICMgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLVduby11bnVzZWQtYnV0LXNldC12YXJpYWJsZSIKKyAjIFhYWCBycG1pby9zZXQuYyBuZWVkcyB0aGlzCistICAgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1Xbm8tb3ZlcnJpZGUtaW5pdCIKKysjICAgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1Xbm8tb3ZlcnJpZGUtaW5pdCIKKyAgICAgICAgIGVsaWYgdGVzdCAiLmAkQ0MgLVYgMj4mMSB8IGdyZXAgJ1N1biBDJ2AiICE9IC47IHRoZW4KKyAgICAgICAgICAgICBkbmwgIyBTdW4gU3R1ZGlvICh1c3VhbGx5ICJjYyIpCisgICAgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC12IgorLS0KKzEuOC4yLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZmlsZWNsYXNzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZmlsZWNsYXNzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZGI2ZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1maWxlY2xhc3MucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorcnBtZmMuYzogIEFsd2F5cyBnZW5lcmF0ZSBwZXItZmlsZSBpbmZvcm1hdGlvbgorCitFdmVuIHdoZW4gdGhlIHBlci1maWxlIGRlcGVuZGVuY3kgZ2VuZXJhdGUgaXMgZGlzYWJsZWQsIHdlIHdhbnQgdG8gZ2VuZXJhdGUKK3BlciBmaWxlIGNsYXNzaWZpY2F0aW9uIGFuZCBvdGhlciBhc3NvY2lhdGVkIGRhdGEuCisKK05vdGU6IHRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZC4gIEV2ZW50dWFsbHkgd2Ugd2lsbCB3YW50IHRvIGhhdmUgYSB3YXkKK3RvIHNlZWQgcGVyLWZpbGUgZGVwZW5kZW5jeSBhbmQgb3RoZXIgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gZ2VuZXJhdGUgYQorcGFja2FnZSBmcm9tIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBpbmZvcm1hdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL3JwbWZjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3JwbWZjLmMKKysrKyBycG0tNS40LjE0L2xpYi9ycG1mYy5jCitAQCAtMTczNCw3ICsxNzM0LDYgQEAgcnBtUkMgcnBtZmNHZW5lcmF0ZURlcGVuZHModm9pZCAqIF9zcGVjLAorIAkvKiAuLi4gdGhlbiBnZW5lcmF0ZSBkZXBlbmRlbmNpZXMgdXNpbmcgJXtfX2ZpbmRfcmVxdWlyZXN9IGV0IGFsLiAqLworIAlyYyA9IHJwbWZjR2VuZXJhdGVEZXBlbmRzSGVscGVyKHNwZWMsIHBrZywgZmkpOworIAlwcmludERlcHMocGtnLT5oZWFkZXIpOworLQlyZXR1cm4gcmM7CisgICAgIH0KKyAKKyAgICAgLyogR2VuZXJhdGUgc2NyaXB0bGV0IERlcGVuZGVuY2llcy4gKi8KK0BAIC0xNzYyLDggKzE3NjEsOCBAQCBycG1SQyBycG1mY0dlbmVyYXRlRGVwZW5kcyh2b2lkICogX3NwZWMsCisgICAgIGF2W2FjXSA9IE5VTEw7CisgCisgICAgIGZjID0gcnBtZmNOZXcoKTsKKy0gICAgZmMtPnNraXBQcm92ID0gIXBrZy0+YXV0b1Byb3Y7CistICAgIGZjLT5za2lwUmVxID0gIXBrZy0+YXV0b1JlcTsKKysgICAgZmMtPnNraXBQcm92ID0gIXBrZy0+YXV0b1Byb3YgfHwgIWludGVybmFsZGVwczsKKysgICAgZmMtPnNraXBSZXEgPSAhcGtnLT5hdXRvUmVxIHx8ICFpbnRlcm5hbGRlcHM7CisgICAgIGZjLT50cmFja2VkID0gMDsKKyAKKyAgICAgewljb25zdCBjaGFyICogYnVpbGRSb290VVJMOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZml4LWxvZ2lvLWNwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZml4LWxvZ2lvLWNwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YTBhOGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1maXgtbG9naW8tY3AucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorT2NjYXNpb25hbGx5IHRoZSBjcCAtcCBmYWlscyB3aXRoIGEgbm9uLXplcm8gcmV0dXJuIGNvZGUuICBUaGlzIHdpbGwgY2F1c2UKK3RoZSBzeXN0ZW0gYWJvcnQgdGhlIGJ1aWxkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtL3JwbWRiL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLm9yaWcvcnBtZGIvTWFrZWZpbGUuYW0KKysrKyBycG0vcnBtZGIvTWFrZWZpbGUuYW0KK0BAIC0yMzQsMTEgKzIzNCwxNCBAQCBsY292LXJlcG9ydDoKKyAjbGNvdi11cGxvYWQ6IGxjb3YKKyAjCXJzeW5jIC1ydnogLWUgc3NoIC0tZGVsZXRlIGxjb3YvKiA/Pz8KKyAKKyskKGJ1aWxkZGlyKS9sb2dpb19yZWNvdmVyX3RlbXBsYXRlOiAkKHNyY2RpcikvbG9naW9fcmVjb3Zlcl90ZW1wbGF0ZQorKwlAaWYgdGVzdCAiLiQoYnVpbGRkaXIpIiAhPSAiLiQoc3JjZGlyKSI7IHRoZW4gXAorKwkJY3AgLWZwICQoc3JjZGlyKS9sb2dpb19yZWNvdmVyX3RlbXBsYXRlIFwKKysJCSAgICAgICQoYnVpbGRkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGUgOyBcCisrCSBmaQorKworIGxvZ2lvX0JVSUxUID0gbG9naW9fYXV0by5jIGxvZ2lvX2F1dG9wLmMgbG9naW9fYXV0by5oIGxvZ2lvX3RlbXBsYXRlCistJChsb2dpb19CVUlMVCk6CWxvZ2lvLmF3ayBsb2dpby5zcmMgbG9naW9fcmVjb3Zlcl90ZW1wbGF0ZQorLQlAdGVzdCAtZSAkKGJ1aWxkZGlyKS9sb2dpb19yZWNvdmVyX3RlbXBsYXRlIHx8IFwKKy0JCWNwIC1wICQoc3JjZGlyKS9sb2dpb19yZWNvdmVyX3RlbXBsYXRlIFwKKy0JCSAgICAgICQoYnVpbGRkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGUKKyskKGxvZ2lvX0JVSUxUKToJbG9naW8uYXdrIGxvZ2lvLnNyYyAkKGJ1aWxkZGlyKS9sb2dpb19yZWNvdmVyX3RlbXBsYXRlCisgCUBybSAtZiAkKGxvZ2lvX0JVSUxUKQorIAlAJChBV0spIC1mICQoc3JjZGlyKS9sb2dpby5hd2sgXAorIAkJLXYgaGVhZGVyX2ZpbGU9bG9naW9fYXV0by5oIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWhhcmRsaW5rLXNlZ2ZhdWx0LWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWhhcmRsaW5rLXNlZ2ZhdWx0LWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGViMjMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0taGFyZGxpbmstc2VnZmF1bHQtZml4LnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK1dlIG5lZWQgdG8gc2FuaXR5IGNoZWNrIHRoYXQgdGhlIG5saW5rIHNpemUgYW5kIG91ciBsaW5rc0xlZnQgY291bnRlcgorZG8gbWF0Y2guIElmIGFuIHJwbSBpcyBiYWRseSBjb25zdHJ1Y3RlZCB3aXRoIGlkZW50aWNhbCBpbm9kZSB2YWx1ZXMKK2ZvciBtdWx0aXBsZSBoYXJkbGlua2VkIGZpbGVzLCBzdWNoIGFuIHJwbSB3aWxsIG90aGVyd2lzZSBhY2Nlc3MgbWVtb3J5CitvdXQgb2YgYXJyYXkgYm91bmRzIGFuZCBjYXVzZSBtZW1vcnkgY29ycnVwdGlvbiBhbmQgY3Jhc2hlcy4KKworVGhlIGZpeCBpcyB0byBhZGQgaW4gdGhlIHNhbml0eSBjaGVjayBhbmQgZXhpdCBpZiBiYWQgY2lyY3Vtc3RhbmNlcworYXJlIGZvdW5kLiBXZSBuZWVkIHRvIGZpeCB0aGUgY2FsbGVyIHRvIGNoZWNrIHRoZSByZXR1cm4gY29kZSB0b28uCisKK1JQIDIwMTQvNi8xMAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHJwbS01LjQuMTQvbGliL2ZzbS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9mc20uYworKysrIHJwbS01LjQuMTQvbGliL2ZzbS5jCitAQCAtNDk1LDYgKzQ5NSwxMSBAQCBzdGF0aWMgaW50IHNhdmVIYXJkTGluaygvKkBzcGVjaWFsQCovIC8qCisgICAgIH0KKyAKKyAgICAgaWYgKGZzbS0+Z29hbCA9PSBJT1NNX1BLR0JVSUxEKSAtLWZzbS0+bGktPmxpbmtzTGVmdDsKKysgICAgaWYgKGZzbS0+bGktPmxpbmtzTGVmdCA+IHN0LT5zdF9ubGluaykgeworKwlycG1sb2coUlBNTE9HX0VSUiwgXygiQ29ycnVwdGVkIGhhcmRsaW5rcyBmb3VuZCAoY291bnQgJWQgZG9lcyBub3QgbWF0Y2ggJWQpLCBleGl0aW5nLlxuIiksIGZzbS0+bGktPmxpbmtzTGVmdCwgc3QtPnN0X25saW5rKTsKKysJcmV0dXJuIC0xOworKyAgICB9CisrCisgICAgIGZzbS0+bGktPmZpbGV4W2ZzbS0+bGktPmxpbmtzTGVmdF0gPSBmc20tPml4OworICAgICAvKkAtb2JzZXJ2ZXJ0cmFucyAtZGVwZW5kZW50dHJhbnNAKi8KKyAgICAgZnNtLT5saS0+bnN1ZmZpeFtmc20tPmxpLT5saW5rc0xlZnRdID0gZnNtLT5uc3VmZml4OworQEAgLTE4NzgsOCArMTg4MywxMyBAQCBpZiAoIShmc21HZXRGaShmc20pLT5tYXBmbGFncyAmIElPU01fUEFZCisgCWZzbS0+cG9zdHBvbmUgPSBpb3NtRmlsZUFjdGlvblNraXBwZWQoZnNtLT5hY3Rpb24pOworIAlpZiAoZnNtLT5nb2FsID09IElPU01fUEtHSU5TVEFMTCB8fCBmc20tPmdvYWwgPT0gSU9TTV9QS0dCVUlMRCkgeworIAkgICAgLypALWV2YWxvcmRlckAqLyAvKiBGSVg6IHNhdmVIYXJkTGluayBjYW4gbW9kaWZ5IGZzbSAqLworLQkgICAgaWYgKFNfSVNSRUcoc3QtPnN0X21vZGUpICYmIHN0LT5zdF9ubGluayA+IDEpCisrCSAgICBpZiAoU19JU1JFRyhzdC0+c3RfbW9kZSkgJiYgc3QtPnN0X25saW5rID4gMSkgeworIAkJZnNtLT5wb3N0cG9uZSA9IHNhdmVIYXJkTGluayhmc20pOworKwkJaWYgKGZzbS0+cG9zdHBvbmUgPCAwKSB7CisrCQkgICAgcmMgPSBSUE1SQ19GQUlMOworKwkJICAgIGJyZWFrOworKwkJfQorKwkgICAgfQorIAkgICAgLypAPWV2YWxvcmRlckAqLworIAl9CisgaWYgKGZzbUdldEZpKGZzbSktPm1hcGZsYWdzICYgSU9TTV9QQVlMT0FEX0xJU1QpIGZzbS0+cG9zdHBvbmUgPSAxOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbGlic3FsLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWxpYnNxbC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyZTQxMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWxpYnNxbC1maXgucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorRHVyaW5nIGluc3RhbGxhdGlvbiwgdGhlIGxpYnRvb2wgcmVsaW5rIGF0dGVtcHRzIHRvIGxpbmsgdG8gLWxycG0uLi4KK1RoZSBwcm9ibGVtIGlzIHRoYXQgaXQgaGFzbid0IGJlZW4gaW5zdGFsbGVkIHlldCEgIFNvIHNtYWxsIGNoYW5nZSBjYXVzZXMKK3RoZSBsaWJ0b29sIHRvIGluc3RlYWQgdXNlIHRoZSBidWlsZCB2ZXJzaW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL01ha2VmaWxlLmFtCisrKysgcnBtLTUuNC4xNC9saWIvTWFrZWZpbGUuYW0KK0BAIC0xMjAsNiArMTIwLDkgQEAgbGlicnBtLmxhOiAkKGxpYnJwbV9sYV9PQkpFQ1RTKSAkKGxpYnJwbQorICNsaWJzcWxfbGFfU09VUkNFUwk9IGxpYnNxbC5jCisgI2xpYnNxbF9sYV9MSUJBREQJPSBsaWJycG0ubGEgJChSUE1EQl9MREFERF9DT01NT04pCisgCisrIyBwa2dsaWIgbGlicmFyaWVzIG5lZWRzIHRvIGhhdmUgdXNybGliIGxpYnJhcmllcyBhbHJlYWR5IGluc3RhbGxlZCEKKytpbnN0YWxsLXBrZ2xpYkxUTElCUkFSSUVTOiBpbnN0YWxsLXVzcmxpYkxUTElCUkFSSUVTCisrCisgaW5zdGFsbC1kYXRhLWhvb2s6CisgaWYgIUVOQUJMRV9CVUlMRF9MQUZJTEVTCisgCS1mb3IgbCBpbiAkKHVzcmxpYl9MVExJQlJBUklFUyk7IGRvIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWxvZy1hdXRvLXJtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbG9nLWF1dG8tcm0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE1M2Y3YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWxvZy1hdXRvLXJtLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogcnBtLTUuNC4xNC9ycG1kYi9EQl9DT05GSUcuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtZGIvREJfQ09ORklHLmluCisrKysgcnBtLTUuNC4xNC9ycG1kYi9EQl9DT05GSUcuaW4KK0BAIC00LDYgKzQsNyBAQCBzZXRfZGF0YV9kaXIgLgorIHNldF9jcmVhdGVfZGlyIC4KKyBzZXRfbGdfZGlyIC4vbG9nCisgc2V0X3RtcF9kaXIgLi90bXAKKytzZXRfZmxhZ3MgZGJfbG9nX2F1dG9yZW1vdmUgb24KKyAKKyAjIC0tIHRocmVhZF9jb3VudCBtdXN0IGJlID49IDgKKyBzZXRfdGhyZWFkX2NvdW50IDY0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sc2ItY29tcGF0aWJpbGl0eS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWxzYi1jb21wYXRpYmlsaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MGE2NjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sc2ItY29tcGF0aWJpbGl0eS5wYXRjaApAQCAtMCwwICsxLDI0IEBACitFbmFibGUgcGxhdGZvcm0gdGFnIG1hdGNoaW5nIHdvcmthcm91bmQgaW4gT0UuCisKK1doZW4gaW5zdGFsbGluZyBzb21lIExTQiBwYWNrYWdlcyB0aGUgJ3BsYXRmb3JtJyBmaWVsZCBpbiB0aGUgcGFja2FnZQorYXBwZWFycyB0byBiZSBpbnZhbGlkLiAgSW5zdGVhZCBvZiByZWx5aW5nIHNvbGVseSBvbiB0aGUgcGxhdGZvcm0gY29tcGFyaXNvbgord2UgYWxzbyB3YW50IHRvIGdlbmVyYXRlIGEgcGVyY2VpdmVkIHBsYXRmb3JtIGJhc2VkIG9uIHRoZSB2YWxpZCBycG0gY29udGVudHMKK29mIGFyY2ggYW5kIG9zLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvZGVwZW5kcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9kZXBlbmRzLmMKKysrKyBycG0tNS40LjE0L2xpYi9kZXBlbmRzLmMKK0BAIC01OTUsNyArNTk1LDcgQEAgaW50IHJwbXRzQWRkSW5zdGFsbEVsZW1lbnQocnBtdHMgdHMsIEhlYQorIAkgICAgcGxhdGZvcm0gPSBycG1FeHBhbmQoYXJjaCwgIi11bmtub3duLSIsIG9zLCBOVUxMKTsKKyAKKyAJcmMgPSBycG1QbGF0Zm9ybVNjb3JlKHBsYXRmb3JtLCBwbGF0cGF0LCBucGxhdHBhdCk7CistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9NQU5EUklWQSkKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX01BTkRSSVZBKSB8fCBkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisgCS8qCisgCSAqIElmIG5vIG1hdGNoIG9uIHBsYXRmb3JtIHRhZywgd2UnbGwgdHJ5IGFnYWluIHdpdGggYXJjaCB0YWcKKyAJICogaW4gY2FzZSBwbGF0Zm9ybSB0YWcgaXMgaW5jb25zaXN0ZW50IHdpdGggaXQsIHdoaWNoIGlzIHRoZSBjYXNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sdWEtZml4LXByaW50LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbHVhLWZpeC1wcmludC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWI0OWU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbHVhLWZpeC1wcmludC5wYXRjaApAQCAtMCwwICsxLDEwNCBAQAorTHVhICdwcmludCcgc3RhdGVtZW50IGlzIG5vdCB3b3JraW5nIHByb3Blcmx5IGluc2lkZSBvZiBSUE0gNQorCitUaGUgcHJpbnQgc3RhdGVtZW50IHNob3VsZCBjYXB0dXJlIHRoZSBvdXRwdXQgYW5kIHNlbmQgaXQgdG8gdGhlIHNjcmlwdAorcHJvY2Vzc2luZyBlbmdpbmUsIGFuZCBub3QgZGlzcGxheSBpdCBkaXJlY3RseSB0byB0aGUgc2NyZWVuLgorCitUaGlzIHBhdGNoIGlzIGZyb206IGh0dHA6Ly9ycG01Lm9yZy9jdnMvcGF0Y2hzZXQ/Y249MTc2NzEKKworVXBzdHJlYW0tU3RhdHVzOiBiYWNrcG9ydCAocGF0Y2hzZXQgMTc2NzEgZnJvbSBycG01Lm9yZykKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9DSEFOR0VTCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL0NIQU5HRVMKKysrKyBycG0tNS40LjE0L0NIQU5HRVMKK0BAIC0xLDMgKzEsNCBAQAorKyAgICAtIGpiajogbHVhOiBmaXg6IHJlc3VycmVjdCBvdXRwdXQgY2FwdHVyZSB3aXRoIGx1YS01LjIuCisgICAgIC0gamJqOiB2ZXJpZnk6IGZpeDogYnJva2VuIGxvZ2ljIGZvciAlZ2hvc3QgYXZvaWRhbmNlIChNYXJrIEhhdGxlKS4KKyAKKyA1LjQuMTMgLT4gNS40LjE0OgorSW5kZXg6IHJwbS01LjQuMTQvcnBtaW8vcnBtbHVhLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtaW8vcnBtbHVhLmMKKysrKyBycG0tNS40LjE0L3JwbWlvL3JwbWx1YS5jCitAQCAtMTc1LDcgKzE3NSw3IEBAIHJwbWx1YSBycG1sdWFOZXcodm9pZCkKKyAgICAgfTsKKyAgICAgLypAPXJlYWRvbmx5dHJhbnMgPW51bGxhc3NpZ24gQCovCisgICAgIC8qQG9ic2VydmVyQCovIC8qQHVuY2hlY2tlZEAqLworLSAgICBjb25zdCBsdWFMX1JlZyAqbGliID0gbHVhbGliczsKKysgICAgY29uc3QgbHVhTF9SZWcgKmxpYjsKKyAgICAgY2hhciAqcGF0aF9idWY7CisgICAgIGNoYXIgKnBhdGhfbmV4dDsKKyAgICAgY2hhciAqcGF0aDsKK0BAIC0xOTAsMzEgKzE5MCwzNCBAQCBycG1sdWEgcnBtbHVhTmV3KHZvaWQpCisgCisgICAgIGx1YUxfb3BlbmxpYnMoTCk7CisgCistICAgIGZvciAoOyBsaWItPm5hbWU7IGxpYisrKSB7CisrICAgIGZvciAobGliID0gbHVhbGliczsgbGliLT5uYW1lOyBsaWIrKykgeworIAlsdWFMX3JlcXVpcmVmKEwsIGxpYi0+bmFtZSwgbGliLT5mdW5jLCAxKTsKKysJbHVhX3BvcChMLCAxKTsKKyAgICAgfQorIAorICAgICB7CWNvbnN0IGNoYXIgKiBfbHVhX3BhdGggPSBycG1HZXRQYXRoKHJwbWx1YVBhdGgsIE5VTEwpOworICAJaWYgKF9sdWFfcGF0aCAhPSBOVUxMKSB7CisrI2lmIGRlZmluZWQoTFVBX0dMT0JBTFNJTkRFWCkKKyAJICAgIGx1YV9wdXNobGl0ZXJhbChMLCAiTFVBX1BBVEgiKTsKKyAJICAgIGx1YV9wdXNoc3RyaW5nKEwsIF9sdWFfcGF0aCk7CisrCSAgICBsdWFfcmF3c2V0KEwsIExVQV9HTE9CQUxTSU5ERVgpOworKyNlbHNlCisrCSAgICBsdWFfcHVzaHN0cmluZyhMLCBfbHVhX3BhdGgpOworKwkgICAgbHVhX3NldGdsb2JhbChMLCAiTFVBX1BBVEgiKTsKKysjZW5kaWYKKyAJICAgIF9sdWFfcGF0aCA9IF9mcmVlKF9sdWFfcGF0aCk7CisgCX0KKyAgICAgfQorIAorICNpZiBkZWZpbmVkKExVQV9HTE9CQUxTSU5ERVgpCistICAgIGx1YV9yYXdzZXQoTCwgTFVBX0dMT0JBTFNJTkRFWCk7CistI2Vsc2UKKy0gICAgbHVhX3B1c2hnbG9iYWx0YWJsZShMKTsKKy0jZW5kaWYKKyAgICAgbHVhX3B1c2hsaXRlcmFsKEwsICJwcmludCIpOworICAgICBsdWFfcHVzaGNmdW5jdGlvbihMLCBycG1fcHJpbnQpOworLQorLSNpZiBkZWZpbmVkKExVQV9HTE9CQUxTSU5ERVgpCisgICAgIGx1YV9yYXdzZXQoTCwgTFVBX0dMT0JBTFNJTkRFWCk7CisgI2Vsc2UKKy0gICAgbHVhX3B1c2hnbG9iYWx0YWJsZShMKTsKKysgICAgbHVhX3B1c2hjZnVuY3Rpb24oTCwgcnBtX3ByaW50KTsKKysgICAgbHVhX3NldGdsb2JhbChMLCAicHJpbnQiKTsKKyAjZW5kaWYKKysKKyAgICAgcnBtbHVhU2V0RGF0YShsdWEsICJsdWEiLCBsdWEpOworIAorICAgICAvKiBsb2FkIGFsbCBzdGFuZGFyZCBSUE0gTHVhIHNjcmlwdCBmaWxlcyAqLworQEAgLTM1MSw2ICszNTQsOSBAQCB2b2lkIHJwbWx1YVNldFZhcihycG1sdWEgX2x1YSwgcnBtbHVhdiB2CisgI2lmIGRlZmluZWQoTFVBX0dMT0JBTFNJTkRFWCkKKyAJaWYgKGx1YS0+cHVzaHNpemUgPT0gMCkKKyAJICAgIGx1YV9wdXNodmFsdWUoTCwgTFVBX0dMT0JBTFNJTkRFWCk7CisrI2Vsc2UKKysJaWYgKGx1YS0+cHVzaHNpemUgPT0gMCkKKysJICAgIGx1YV9wdXNoZ2xvYmFsdGFibGUoTCk7CisgI2VuZGlmCisgCWlmIChwdXNodmFyKEwsIHZhci0+a2V5VHlwZSwgJnZhci0+a2V5KSAhPSAtMSkgeworIAkgICAgaWYgKHB1c2h2YXIoTCwgdmFyLT52YWx1ZVR5cGUsICZ2YXItPnZhbHVlKSAhPSAtMSkKK0BAIC0xMDM5LDE0ICsxMDQ1LDE1IEBAIHN0YXRpYyBpbnQgcnBtX3ByaW50IChsdWFfU3RhdGUgKkwpCisgICAgIGx1YV9nZXRnbG9iYWwoTCwgInRvc3RyaW5nIik7CisgICAgIGZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKSB7CisgCWNvbnN0IGNoYXIgKnM7CisrCXNpemVfdCBsOworIAlsdWFfcHVzaHZhbHVlKEwsIC0xKTsgIC8qIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCAqLworIAlsdWFfcHVzaHZhbHVlKEwsIGkpOyAgIC8qIHZhbHVlIHRvIHByaW50ICovCisgCWx1YV9jYWxsKEwsIDEsIDEpOworLQlzID0gbHVhX3Rvc3RyaW5nKEwsIC0xKTsgIC8qIGdldCByZXN1bHQgKi8KKysJcyA9IGx1YV90b2xzdHJpbmcoTCwgLTEsICZsKTsgIC8qIGdldCByZXN1bHQgKi8KKyAJaWYgKHMgPT0gTlVMTCkKKyAJICAgIHJldHVybiBsdWFMX2Vycm9yKEwsICJgdG9zdHJpbmcnIG11c3QgcmV0dXJuIGEgc3RyaW5nIHRvIGBwcmludCciKTsKKyAJaWYgKGx1YS0+c3RvcmVwcmludCkgeworLQkgICAgc2l6ZV90IHNsID0gbHVhX3Jhd2xlbihMLCAtMSk7CisrCSAgICBzaXplX3Qgc2wgPSBsOworIAkgICAgaWYgKChzaXplX3QpKGx1YS0+cHJpbnRidWZ1c2VkK3NsKzEpID4gbHVhLT5wcmludGJ1ZnNpemUpIHsKKyAJCWx1YS0+cHJpbnRidWZzaXplICs9IHNsKzUxMjsKKyAJCWx1YS0+cHJpbnRidWYgPSAoY2hhciAqKSB4cmVhbGxvYyhsdWEtPnByaW50YnVmLCBsdWEtPnByaW50YnVmc2l6ZSk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sdWEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sdWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk5MzBkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWx1YS5wYXRjaApAQCAtMCwwICsxLDMzIEBACitBZGQgc3VwcG9ydCBmb3IgY3Jvc3MgY29tcGlsaW5nIGx1YQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgcnBtLTUuNC4xNC9jb25maWd1cmUuYWMKK0BAIC0xMjEsNiArMTIxLDkgQEAgQUNfUFJPR19ZQUNDCisgCisgQUNfUEFUSF9QUk9HKEFTLCBhcywgYXMpCisgCisrQ0NfRk9SX0JVSUxEPSR7Q0NfRk9SX0JVSUxELVwkKENDKX0KKytBQ19TVUJTVChDQ19GT1JfQlVJTEQpCisrCisgZG5sICMgR0NDIHNwZWNpZmljcworIEFDX1BST0dfR0NDX1RSQURJVElPTkFMCisgQUNfQVJHX0VOQUJMRShidWlsZC1waWMsCitJbmRleDogcnBtLTUuNC4xNC9sdWEvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbHVhL01ha2VmaWxlLmFtCisrKysgcnBtLTUuNC4xNC9sdWEvTWFrZWZpbGUuYW0KK0BAIC00MSw3ICs0MSw3IEBAIHJwbWx1YWNfTERBREQgPSBsaWJsdWEubGEKKyAKKyAjIC0tLSBiaW4yYyBkb2Vzbid0IG5lZWQgYW55dGhpbmcgYnV0IGEgY29tcGlsZXIKKyBiaW4yYyQoRVhFRVhUKTogIGJpbjJjLmMKKy0JJChDQykgLW8gJEAgJDwKKysJJChDQ19GT1JfQlVJTEQpIC1vICRAICQ8CisgCisgbGlibHVhX2xhX1NPVVJDRVMgPQorIGxpYmx1YV9sYV9DRkxBR1MgPSBAV0lUSF9MVUFfU1VCRElSX0RFRkAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW1hY3Jvcy5pbi1kaXNhYmxlLWV4dGVybmFsLWtleS1zZXJ2ZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1tYWNyb3MuaW4tZGlzYWJsZS1leHRlcm5hbC1rZXktc2VydmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YTBjZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1tYWNyb3MuaW4tZGlzYWJsZS1leHRlcm5hbC1rZXktc2VydmVyLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK2Rpc2FibGUgZXh0ZXJuYWwga2V5IHNlcnZlcgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2hlbiBSUE0gZXhwZXJpZW5jZXMgYSBzaWduZWQgcGFja2FnZSwgd2l0aCBhIHNpZ25hdHVyZSB0aGF0IGl0IGRvZXMgTk9UIGtub3cuCitCeSBkZWZhdWx0IGl0IHdpbGwgc2VuZCB0aGUgLWZpbmdlcnByaW50LSAoYW5kIG9ubHkgdGhlIDE2IGRpZ2l0IGZpbmdlcnByaW50KSB0bworYW4gZXh0ZXJuYWwgSEtQIHNlcnZlciwgdHJ5aW5nIHRvIGdldCB0aGUga2V5IGRvd24uCisKK1RoaXMgaXMgcHJvYmFibHkgbm90IGEgcmVhc29uYWJsZSBkZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgc3lzdGVtIHRvIGRvLCBpbnN0ZWFkCitpdCBzaG91bGQgc2ltcGx5IGZhaWwgdGhlIGtleSBsb29rdXAuICBJZiBzb21lb25lIHdhbnRzIHRvIGVuYWJsZSB0aGUgSEtQIHNlcnZlcgoraXQncyBlYXN5IGVub3VnaCB0byBkbyBieSBlbmFibGluZyB0aGUgbmVjZXNzYXJ5IG1hY3Jvcy4KKworU2lnbmVkLW9mZi1ieTogeXpodTEgPHlhbmp1bi56aHVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKy0tLSBhL21hY3Jvcy9tYWNyb3MuaW4KKysrKyBiL21hY3Jvcy9tYWNyb3MuaW4KK0BAIC01NDYsOCArNTQ2LDggQEAgJF9hcmJpdHJhcnlfdGFnc190ZXN0cwlGb286QmFyCisgIyBIb3Jvd2l0eiBLZXkgUHJvdG9jb2wgc2VydmVyIGNvbmZpZ3VyYXRpb24KKyAjCisgIyVfaGtwX2tleXNlcnZlciAgICAgICAgIGhrcDovL2tleXMubjNucHEubmV0CistJV9oa3Bfa2V5c2VydmVyICAgICAgICAgaGtwOi8vcG9vbC5za3Mta2V5c2VydmVycy5uZXQKKy0lX2hrcF9rZXlzZXJ2ZXJfcXVlcnkgICAle19oa3Bfa2V5c2VydmVyfS9wa3MvbG9va3VwP29wPWdldCZzZWFyY2g9CisrIyVfaGtwX2tleXNlcnZlciAgICAgICAgIGhrcDovL3Bvb2wuc2tzLWtleXNlcnZlcnMubmV0CisrIyVfaGtwX2tleXNlcnZlcl9xdWVyeSAgICV7X2hrcF9rZXlzZXJ2ZXJ9L3Brcy9sb29rdXA/b3A9Z2V0JnNlYXJjaD0KKyAKKyAKKyAlX25zc2RiX3BhdGgJL2V0Yy9wa2kvbnNzZGIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW1hY3Jvcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW1hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2FiMmQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK21hY3Jvcy9tYWNyb3MuaW46IFJldmVydCBzZXR0aW5ncyB0byB0aGUgc2FtZSBhcyBSUE0gNS40LjAKKworRW5hYmxlIGEgcmVhc29uYWJsZSBzZXQgb2YgcnBtZGVwcyBkZXBlbmRlbmN5IGhlbHBlciBtYWNyb3MuICBUaGVzZSBzZXRzCit3ZXJlIHVzZWQgYnkgUlBNIDUuNC4wLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbWFjcm9zL21hY3Jvcy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9tYWNyb3MvbWFjcm9zLmluCisrKysgcnBtLTUuNC4xNC9tYWNyb3MvbWFjcm9zLmluCitAQCAtMTAyMiw3ICsxMDIyLDcgQEAgJF9hcmJpdHJhcnlfdGFnc190ZXN0cwlGb286QmFyCisgCisgIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICMgLS0tLSBycG1idWlsZCBtYWNyb3MuCistIyUle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MucnBtYnVpbGR9CisrJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLnJwbWJ1aWxkfQorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIGNtYWtlKC4uLikgY29uZmlndXJhdGlvbgorQEAgLTEwMzgsMTUgKzEwMzgsMTUgQEAgJF9hcmJpdHJhcnlfdGFnc190ZXN0cwlGb286QmFyCisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgcGVybCguLi4pIGNvbmZpZ3VyYXRpb24KKy0jJSV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3Blcmx9CisrJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvcGVybH0KKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBweXRob24oLi4uKSBjb25maWd1cmF0aW9uLgorLSMlJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvcHl0aG9ufQorKyV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3B5dGhvbn0KKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBwaHAoLi4uKSBjb25maWd1cmF0aW9uLgorLSMlJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvcGhwfQorKyV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3BocH0KKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBqYXZhKC4uLikgY29uZmlndXJhdGlvbi4KK0BAIC0xMDU0LDExICsxMDU0LDExIEBAICRfYXJiaXRyYXJ5X3RhZ3NfdGVzdHMJRm9vOkJhcgorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIGxpYnRvb2woLi4uKSBjb25maWd1cmF0aW9uLgorLSMlJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvbGlidG9vbH0KKysle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9saWJ0b29sfQorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIHBrZ2NvbmZpZyguLi4pIGNvbmZpZ3VyYXRpb24uCistIyUle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9wa2djb25maWd9CisrJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvcGtnY29uZmlnfQorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIG1vbm8oLi4uKSBjb25maWd1cmF0aW9uLgorQEAgLTEwNzAsNyArMTA3MCw3IEBAICRfYXJiaXRyYXJ5X3RhZ3NfdGVzdHMJRm9vOkJhcgorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIHRjbCguLi4pIGNvbmZpZ3VyYXRpb24uCistIyUle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC90Y2x9CisrJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvdGNsfQorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIHR5cGVsaWIoLi4uKSBjb25maWd1cmF0aW9uLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbm8tbG9vcG1zZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW5vLWxvb3Btc2cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI2ZWQyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW5vLWxvb3Btc2cucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorbGliL29yZGVyLmM6IE1ha2UgdGhlIGRlcGVuZGVuY3kgbG9vcCBtZXNzYWdlcyBpbnRvIGRlYnVnIG1zZ3MKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL29yZGVyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL29yZGVyLmMKKysrKyBycG0tNS40LjE0L2xpYi9vcmRlci5jCitAQCAtMjE3NSw3ICsyMTc1LDcgQEAgcmVzY2FuOgorIAkJY29uc3QgY2hhciAqIGRwOworIAkJcnBtbG9nTHZsIG1zZ2x2bCA9IChhbmFjb25kYSB8fCAocnBtdHNERmxhZ3ModHMpICYgUlBNREVQU19GTEFHX0RFUExPT1BTKSkKKyAJCQk/IFJQTUxPR19XQVJOSU5HIDogUlBNTE9HX0VSUjsKKy0jaWYgZGVmaW5lZChSUE1fVkVORE9SX01BTkRSSVZBKSAvKiBsb29wLWRldGVjdGlvbi1vcHRpb25hbC1sb2dsZXZlbCAqLworKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfTUFORFJJVkEpIHx8IGRlZmluZWQoUlBNX1ZFTkRPUl9PRSkgLyogbG9vcC1kZXRlY3Rpb24tb3B0aW9uYWwtbG9nbGV2ZWwgKi8KKyAJCS8vIFJlcG9ydCBsb29wcyBhcyBkZWJ1Zy1sZXZlbCBtZXNzYWdlIGJ5IGRlZmF1bHQgKDcgPSBSUE1MT0dfREVCVUcpLCBvdmVycmlkYWJsZQorIAkJbXNnbHZsID0gcnBtRXhwYW5kTnVtZXJpYygiJXs/X2xvb3BfZGV0ZWN0aW9uX2xvZ2xldmVsfSV7PyFfbG9vcF9kZXRlY3Rpb25fbG9nbGV2ZWw6N30iKTsKKyAjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW5vLXBlcmwtdXJwbS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW5vLXBlcmwtdXJwbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODE4MjI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbm8tcGVybC11cnBtLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Rpc2FibGUgcGVybC1VUlBNIHN1cHBvcnQKKworVGhpcyBjYXVzZXMgYSBjb25maWd1cmUgZmFpbHVyZSB3aGVuIHBlcmwtVVJQTSBpcyBub3QgdXNlZC4KKworfCBjb25maWd1cmUuYWM6MTE1OTogcmVxdWlyZWQgZmlsZSBgcGVybC1VUlBNL01ha2VmaWxlLlBMLmluJyBub3QgZm91bmQKK3wgY29uZmlndXJlLmFjOjExNTk6IHJlcXVpcmVkIGZpbGUgYHBlcmwtVVJQTS9NYWtlZmlsZS5pbicgbm90IGZvdW5kCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9jb25maWd1cmUuYWMKKysrKyBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworQEAgLTExODYsMzAgKzExODYsMTAgQEAgQUNfU1VCU1QoV0lUSF9QRVJMX1NVQkRJUikKKyBBQ19TVUJTVChXSVRIX1BFUkxfU1VCUEFDS0FHRSkKKyBBQ19TVUJTVChXSVRIX1BFUkxfTElCUykKKyAKKy1kbmwgIyBvcHRpb25hbCBQZXJsLVVSUE0gbGFuZ3VhZ2UgYmluZGluZ3MKKytkbmwgIyBkaXNhYmxlIFBlcmwtVVJQTSBsYW5ndWFnZSBiaW5kaW5ncworIFdJVEhfUEVSTF9VUlBNX1NVQkRJUj0iIgorIFdJVEhfUEVSTF9VUlBNX1NVQlBBQ0tBR0U9MAorIFdJVEhfUEVSTF9VUlBNX0xJQlM9IiIKKy1pZiB0ZXN0ICIuJFdJVEhfUFRIUkVBRFMiID0gLnllczsgdGhlbgorLSAgICBXSVRIX1BFUkxfVVJQTV9MSUJTPSIkTElCUyIKKy1maQorLUFDX0FSR19XSVRIKHBlcmwtdXJwbSwgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1wZXJsLXVycG1dLCBbYnVpbGQgd2l0aCBQZXJsIFVSUE0gbGFuZ3VhZ2UgYmluZGluZ3NdKSwgWworLSAgICBpZiB0ZXN0ICIuJHdpdGh2YWwiICE9IC5ubzsgdGhlbgorLQlQRVJMX1VSUE1fSU5TVEFMTERJUlM9IiIKKy0JICAgaWYgdGVzdCAiJHdpdGh2YWwiID09ICJ2ZW5kb3IiOyB0aGVuCistCQkgICAgUEVSTF9VUlBNX0lOU1RBTExESVJTPSInSU5TVEFMTERJUlMnCT0+ICd2ZW5kb3InLCIKKy0JICAgIGZpCistCSAgICBpZiB0ZXN0ICIkd2l0aHZhbCIgPT0gInNpdGUiOyB0aGVuCistCQkgICAgUEVSTF9VUlBNX0lOU1RBTExESVJTPSInSU5TVEFMTERJUlMnICAgICA9PiAnc2l0ZScsIgorLQkgICAgZmkKKy0JICAgIEFDX0RFRklORV9VTlFVT1RFRChbUEVSTF9VUlBNX0lOU1RBTExESVJTXSwgWyRQRVJMX1VSUE1fSU5TVEFMTERJUlNdLCBbUGVybCBpbnN0YWxsIGRpcmVjdG9yeSAodmVuZG9yL3NpdGUpXSkKKy0JICAgIEFDX1NVQlNUKFBFUkxfVVJQTV9JTlNUQUxMRElSUykKKy0gICAgICAgIFdJVEhfUEVSTF9VUlBNX1NVQkRJUj1wZXJsLVVSUE0KKy0gICAgICAgIFdJVEhfUEVSTF9VUlBNX1NVQlBBQ0tBR0U9MQorLSAgICAgICAgQUNfQ09ORklHX0ZJTEVTKFtwZXJsLVVSUE0vTWFrZWZpbGUuUExdKQorLSAgICAgICAgQUNfQ09ORklHX0ZJTEVTKFtwZXJsLVVSUE0vTWFrZWZpbGVdKQorLSAgICBmaQorLV0pCisgQUNfU1VCU1QoV0lUSF9QRVJMX1VSUE1fU1VCRElSKQorIEFDX1NVQlNUKFdJVEhfUEVSTF9VUlBNX1NVQlBBQ0tBR0UpCisgQUNfU1VCU1QoV0lUSF9QRVJMX1VSUE1fTElCUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW9wZW5kYi1iZWZvcmUtdmVyaWZ5c2NyaXB0LXRvLWF2b2lkLW51bGwtcG9pbnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1vcGVuZGItYmVmb3JlLXZlcmlmeXNjcmlwdC10by1hdm9pZC1udWxsLXBvaW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZDU4NmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1vcGVuZGItYmVmb3JlLXZlcmlmeXNjcmlwdC10by1hdm9pZC1udWxsLXBvaW50LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK3JwbTogb3BlbmRiIGJlZm9yZSBycG12ZXJpZnlzY3JpcHQgdG8gYXZvaWQgbnVsbCBwb2ludCBpbnB1dAorCitJZiB0aGUgY29tbWFuZCBpcyAicnBtIC1WIiBhbmQgdGhlIHJldHVybiB2YWx1ZSBvZiAoaGVhZGVySXNFbnRyeShoLCBSUE1UQUdfVkVSSUZZU0NSSVBUKSAKK3x8IGhlYWRlcklzRW50cnkoaCwgUlBNVEFHX1NBTklUWUNIRUNLKSkgbG9jYXRlZCBpbiAvbGliL3ZlcmlmeS5jIGlzIHRydWUsIGl0IHdpbGwgY2FsbAorcnBtcHNtU3RhZ2UgZnVuY3Rpb24ocnBtVmVyaWZ5U2NyaXB0LT5ycG1wc21TY3JpcHRTdGFnZS0+cnBtcHNtU3RhZ2UpIGFuZCBvY2N1ciBzZWdtZW50CitmYXVsdCBiZWNhdXNlIG9mIG51bGwgcG9pbnQocnBtdHNHZXRSZGIodHMpID09IE5VTEwgYW5kIHJwbXRzR2V0UmRiKHRzKS0+ZGJfdHhuKS4KK1NvIHdlIG9wZW4gcnBtZGIgdG8gYXZvaWQgYmFkIGlucHV0IHdoZW4gZmluZCBoZWFkZXJJc0VudHJ5IHRydWUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBaaGl4aW9uZyBDaGkgPHpoaXhpb25nLmNoaUB3aW5kcml2ZXIuY29tPgorSW5kZXg6IHJwbS01LjQuMTQvbGliL3ZlcmlmeS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi92ZXJpZnkuYwkyMDE1LTA3LTIyIDIyOjA5OjU5Ljk5Mjg5NTM1NSArMDgwMAorKysrIHJwbS01LjQuMTQvbGliL3ZlcmlmeS5jCTIwMTUtMDgtMTMgMTA6MjA6MzMuNzUyMTc3OTA2ICswODAwCitAQCAtNjEzLDYgKzYxMyw4IEBACisgCXsKKyAJICAgIEZEX3QgZmRvID0gZmREdXAoU1RET1VUX0ZJTEVOTyk7CisgCisrCSAgICBycG10c09wZW5EQih0cywgT19SRE9OTFkpOyAgICAgICAgICAgIC8qT3BlbiB0aGUgREIgdG8gYXZvaWQgbnVsbCBwb2ludCBpbnB1dCBpbiBmdW5jdGlvbiBycG1wc21TdGFnZSgpKi8KKysKKyAJICAgIHJjID0gcnBtZmlTZXRIZWFkZXIoZmksIGgpOworIAkgICAgaWYgKChyYyA9IHJwbVZlcmlmeVNjcmlwdChxdmEsIHRzLCBmaSwgZmRvKSkgIT0gMCkKKyAJCWVjICs9IHJjOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tb3NzcC11dWlkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tb3NzcC11dWlkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MWFiYTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1vc3NwLXV1aWQucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorRml4IGludGVncmF0aW9uIG9mIG9zc3AtdXVpZAorCitXZSBuZWVkIHRvIGF2b2lkIGluY2x1ZGluZyB0aGUgdXRpbC1saW51eCB1dWlkIGxpYnJhcnksIGluc3RlYWQKK3dlIG5lZWQgb3NzcC11dWlkLiAgVGhlcmUgaXMgYSByZWxhdGVkIGhhY2sgaW4gZG9fY29uZmlndXJlIHRvCittYWtlIHN1cmUgdGhhdCB3ZSB1c2UgdGhlIHJpZ2h0IC5wYyBmaWxlIGFzIHdlbGwuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9jb25maWd1cmUuYWMKKysrKyBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworQEAgLTE5NTEsNyArMTk1MSw3IEBAIGdyZXAgLXYgJ2RlZmluZSBIQVZFX1VOSVNURF9IJyBjb25mZGVmcy4KKyBlc2FjCisgUlBNX0NIRUNLX0xJQigKKyAgICAgW09TU1AgdXVpZF0sIFt1dWlkXSwKKy0gICAgW29zc3AtdXVpZCB1dWlkXSwgW3V1aWRfaW1wb3J0XSwgW3V1aWQuaF0sCisrICAgIFtvc3NwLXV1aWRdLCBbdXVpZF9pbXBvcnRdLCBbdXVpZC5oXSwKKyAgICAgW25vLGV4dGVybmFsOm5vbmVdLCBbXSwKKyAgICAgWyBkbmwgIyBlbmFibGUgT1NTUCB1dWlkIG5hdGl2ZSBBUEkgc3VwcG9ydCBmb3IgZW1iZWRkZWQgTHVhCisgICAgICAgaWYgdGVzdCAiLiRXSVRIX0xVQSIgPSAueWVzOyB0aGVuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wYWNrYWdlb3JpZ2luLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGFja2FnZW9yaWdpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTVlMTI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGFja2FnZW9yaWdpbi5wYXRjaApAQCAtMCwwICsxLDI1IEBACitBZGQgdGhlIGFiaWxpdHkgdG8gcXVlcnkgdGhlIHBhY2thZ2VvcmlnaW4KKworV3JpdHRlbiBieSBqYmogYXQgcnBtNS5vcmcKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtub3QgYXV0aG9yXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL2hkcmZtdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWRiL2hkcmZtdC5jCisrKysgcnBtLTUuNC4xNC9ycG1kYi9oZHJmbXQuYworQEAgLTI0MDksOCArMjQwOSwxMCBAQCBzdGF0aWMgaW50IHBrZ29yaWdpblRhZyhIZWFkZXIgaCwgSEVfdCBoCisgICAgIGludCByYyA9IDE7CisgCisgICAgIGhlLT50YWcgPSBSUE1UQUdfUEFDS0FHRU9SSUdJTjsKKy0gICAgaWYgKCFoZWFkZXJHZXQoaCwgaGUsIEhFQURFUkdFVF9OT0VYVEVOU0lPTikKKy0gICAgICYmIChvcmlnaW4gPSBoZWFkZXJHZXRPcmlnaW4oaCkpICE9IE5VTEwpCisrICAgIC8qIFhYWCB0d28gc291cmNlcyBmb3IgdGFnIGRhdGE6IHdoYXQgc2VhcmNoIHByZWNlZGVuY2U/ICovCisrICAgIGlmIChoZWFkZXJHZXQoaCwgaGUsIEhFQURFUkdFVF9OT0VYVEVOU0lPTikpCisrCXJjID0gMDsKKysgICAgZWxzZSBpZiAoKG9yaWdpbiA9IGhlYWRlckdldE9yaWdpbihoKSkgIT0gTlVMTCkKKyAgICAgeworIAloZS0+dCA9IFJQTV9TVFJJTkdfVFlQRTsKKyAJaGUtPnAuc3RyID0geHN0cmR1cChvcmlnaW4pOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGF5bG9hZC11c2UtaGFzaGVkLWlub2RlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGF5bG9hZC11c2UtaGFzaGVkLWlub2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZDAyYTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wYXlsb2FkLXVzZS1oYXNoZWQtaW5vZGUucGF0Y2gKQEAgLTAsMCArMSwxNDYgQEAKK0lmIHdlIHJ1biBidWlsZHMgb24gYSBmaWxlc3lzdGVtIHdpdGggNjQgYml0IGlub2RlcyBsaWtlIFhGUywgd2UgbmVlZCB0bworbWFwIHRoZSBpbm9kZSBudW1iZXJzIHRvIHNvbWV0aGluZyAzMiBiaXQgc2luY2UgdGhlIGNwaW8gaGVhZGVyIG9ubHkgYWxsb3dzCitmb3IgMzIgYml0IGlub2RlIHZhbHVlcy4gSWYgd2UgZG9uJ3QgZG8gdGhpczoKKworI2RlZmluZSBTRVRfTlVNX0ZJRUxEKHBoeXMsIHZhbCwgc3BhY2UpIFwKKyAgICAgICAgc3ByaW50ZihzcGFjZSwgIiU4LjhseCIsICh1bnNpZ25lZCBsb25nKSAodmFsKSk7IFwKKyAgICAgICAgbWVtY3B5KHBoeXMsIHNwYWNlLCA4KQorCitmcm9tIGNwaW8uYyB3aWxsIHByaW50IGxhcmdlciB0aGF0IDggY2hhcmFjdGVyIHZhbHVlcyBhbmQgdGhlbiB0cnVuY2F0ZSB0aGUgCitMU0JzLiBUaGlzIGdlbmVyYXRlcyBjcGlvIGZpbGVzIHdoZXJlIGhhcmRsaW5rZWQgZmlsZXMgbWF5IGhhdmUgdGhlIHNhbWUKK2lub2RlIG51bWJlci4gVGhlIHJlc3VsdGluZyBycG1zIGFyZSB0aGVuIGNvcnJ1cHRlZC4KKworVGhlcmUgaXMgYSBzZXBhcmF0ZSBwYXRjaCBmb3IgdGhlIGNyYXNoIHRoZSBpZGVudGljYWwgaW5vZGUgbnVtYmVycyBjYXVzZXMKK3doZW4gZXh0cmFjdGluZyB0aGUgcnBtLgorCitQYXRjaCB0YWtlbiBmcm9tIGh0dHA6Ly9naXQucGxkLWxpbnV4Lm9yZy8/cD1wYWNrYWdlcy9ycG0uZ2l0O2E9Y29tbWl0ZGlmZjtoPTEwNTI2YzIzYWFjNjBiN2I2MzZlNGM5Mzg2Mjg4N2RiZWY4ZThmMTUKKworUlAgMjAxNC82LzEwCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogcnBtLTUuNC4xNC9idWlsZC9maWxlcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2J1aWxkL2ZpbGVzLmMKKysrKyBycG0tNS40LjE0L2J1aWxkL2ZpbGVzLmMKK0BAIC0xMzI4LDYgKzEzMjgsMjYgQEAgc3RhdGljIHJwbXVpbnQzMl90IGdldERpZ2VzdEFsZ28oSGVhZGVyCisgICAgIHJldHVybiBkYWxnbzsKKyB9CisgCisrc3RhdGljIGludCBpc0hhcmRMaW5rKEZpbGVMaXN0UmVjIGZscCwgRmlsZUxpc3RSZWMgdGxwKQorK3sKKysgICAgcmV0dXJuICgoU19JU1JFRyhmbHAtPmZsX21vZGUpICYmIFNfSVNSRUcodGxwLT5mbF9tb2RlKSkgJiYKKysgICAgICAgICAgICAoKGZscC0+ZmxfbmxpbmsgPiAxKSAmJiAoZmxwLT5mbF9ubGluayA9PSB0bHAtPmZsX25saW5rKSkgJiYKKysgICAgICAgICAgICAoZmxwLT5mbF9pbm8gPT0gdGxwLT5mbF9pbm8pICYmCisrICAgICAgICAgICAgKGZscC0+ZmxfZGV2ID09IHRscC0+ZmxfZGV2KSk7CisrfQorKworK3N0YXRpYyBpbnQgc2VlbkhhcmRMaW5rKEZpbGVMaXN0IGZsLCBGaWxlTGlzdFJlYyBmbHAsIGlub190ICpmaWxlaWQpCisreworKyAgICBGaWxlTGlzdFJlYyBpbHA7CisrICAgIGZvciAoaWxwID0gZmwtPmZpbGVMaXN0OyBpbHAgPCBmbHA7IGlscCsrKSB7CisrICAgICAgICBpZiAoaXNIYXJkTGluayhmbHAsIGlscCkpIHsKKysgICAgICAgICAgICAqZmlsZWlkID0gaWxwIC0gZmwtPmZpbGVMaXN0OworKyAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiAwOworK30KKysKKyAvKioKKyAgKiBBZGQgZmlsZSBlbnRyaWVzIHRvIGhlYWRlci4KKyAgKiBAdG9kbyBTaG91bGQgZGlyZWN0b3JpZXMgaGF2ZSAlZG9jLyVjb25maWcgYXR0cmlidXRlcz8gKCMxNDUzMSkKK0BAIC0xMzc0LDYgKzEzOTQsNyBAQCBtZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CS8qIFhYWCB2YWxnCisgCisgICAgIGZvciAoaSA9IDAsIGZscCA9IGZsLT5maWxlTGlzdDsgaSA8IGZsLT5maWxlTGlzdFJlY3NVc2VkOyBpKyssIGZscCsrKSB7CisgCWNvbnN0IGNoYXIgKnM7CisrCWlub190IGZpbGVpZCA9IGZscCAtIGZsLT5maWxlTGlzdDsKKyAKKyAgCS8qIE1lcmdlIGR1cGxpY2F0ZSBlbnRyaWVzLiAqLworIAl3aGlsZSAoaSA8IChmbC0+ZmlsZUxpc3RSZWNzVXNlZCAtIDEpICYmCitAQCAtMTQzNiw2ICsxNDU3LDEzIEBAIG1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsJLyogWFhYIHZhbGcKKyAJLyogTGVhdmUgcm9vbSBmb3IgYm90aCBkaXJuYW1lIGFuZCBiYXNlbmFtZSBOVUwncyAqLworIAlkcGF0aGxlbiArPSAoc3RybGVuKGZscC0+ZGlza1VSTCkgKyAyKTsKKyAKKysJLyogRXhjbHVkZXMgYW5kIGR1cGVzIGhhdmUgYmVlbiBmaWx0ZXJlZCBvdXQgYnkgbm93LiAqLworKwlpZiAoU19JU1JFRyhmbHAtPmZsX21vZGUpKSB7CisrCSAgICBpZiAoZmxwLT5mbF9ubGluayA9PSAxIHx8ICFzZWVuSGFyZExpbmsoZmwsIGZscCwgJmZpbGVpZCkpIHsKKysJCWZsLT50b3RhbEZpbGVTaXplICs9IGZscC0+Zmxfc2l6ZTsKKysJICAgIH0KKysJfQorKworIAkvKgorIAkgKiBNYWtlIHRoZSBoZWFkZXIsIHRoZSBPTERGSUxFTkFNRVMgd2lsbCBnZXQgY29udmVydGVkIHRvIGEgCisgCSAqIGNvbXByZXNzZWQgZmlsZSBsaXN0IHdyaXRlIGJlZm9yZSB3ZSB3cml0ZSB0aGUgYWN0dWFsIHBhY2thZ2UgdG8KK0BAIC0xNTE4LDcgKzE1NDYsMTEgQEAgbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwkvKiBYWFggdmFsZworIAorIAkvKiBYWFggSGFzaCBpbnN0ZWFkIG9mIDY0Yi0+MzJiIHRydW5jYXRlIHRvIHByZXZlbnQgYWxpYXNpbmcuICovCisgCXsgICBpbm9fdCBfaW5vID0gZmxwLT5mbF9pbm87CisrCS8qIGRvbid0IHVzZSBoYXNoIGhlcmUsIGFzIGhhc2ggY29sbGlzaW9ucyB3aGljaCBoYXBwZW4gb24gbGFyZ2UgcGFja2FnZXMKKysJICAgY2F1c2UgYnVzIGVycm9ycyBpbiBycG1idWlsZAorIAkgICAgdWkzMiA9IGhhc2hGdW5jdGlvblN0cmluZygwLCAmX2lubywgc2l6ZW9mKF9pbm8pKTsKKysJKi8KKysJICAgIHVpMzIgPSBmaWxlaWQgKyAxOworIAl9CisgCWhlLT50YWcgPSBSUE1UQUdfRklMRUlOT0RFUzsKKyAJaGUtPnQgPSBSUE1fVUlOVDMyX1RZUEU7CitAQCAtMTc1MSwzOSArMTc4Myw2IEBAIGlmIChfcnBtYnVpbGRGbGFncyAmIDQpIHsKKyAJCUlPU01fTUFQX1RZUEUgfCBJT1NNX01BUF9NT0RFIHwgSU9TTV9NQVBfVUlEIHwgSU9TTV9NQVBfR0lEOworIAlpZiAoaXNTcmMpCisgCSAgICBmaS0+Zm1hcGZsYWdzW2ldIHw9IElPU01fRk9MTE9XX1NZTUxJTktTOworLQorLQlpZiAoU19JU1JFRyhmbHAtPmZsX21vZGUpKSB7CistCSAgICBpbnQgYmluZ28gPSAxOworLQkgICAgLyogSGFyZCBsaW5rcyBuZWVkIGJlIHRhbGxpZWQgb25seSBvbmNlLiAqLworLQkgICAgaWYgKGZscC0+ZmxfbmxpbmsgPiAxKSB7CistCQlGaWxlTGlzdFJlYyBqbHAgPSBmbHAgKyAxOworLQkJaW50IGogPSBpICsgMTsKKy0JCWZvciAoOyAodW5zaWduZWQpaiA8IGZpLT5mYzsgaisrLCBqbHArKykgeworLQkJICAgIC8qIGZvbGxvdyBvdXRlciBsb29wIGxvZ2ljICovCistCQkgICAgd2hpbGUgKCgoamxwIC0gZmwtPmZpbGVMaXN0KSA8IChmbC0+ZmlsZUxpc3RSZWNzVXNlZCAtIDEpKSAmJgorLQkJCSAgICAhc3RyY21wKGpscC0+ZmlsZVVSTCwgamxwWzFdLmZpbGVVUkwpKQorLQkJCWpscCsrOworLQkJICAgIGlmIChqbHAtPmZsYWdzICYgUlBNRklMRV9FWENMVURFKSB7CistCQkJai0tOworLQkJCS8qQGlubmVyY29udGludWVAKi8gY29udGludWU7CistCQkgICAgfQorLQkJICAgIGlmIChqbHAtPmZsYWdzICYgUlBNRklMRV9HSE9TVCkKKy0JCSAgICAgICAgLypAaW5uZXJjb250aW51ZUAqLyBjb250aW51ZTsKKy0JCSAgICBpZiAoIVNfSVNSRUcoamxwLT5mbF9tb2RlKSkKKy0JCQkvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworLQkJICAgIGlmIChmbHAtPmZsX25saW5rICE9IGpscC0+ZmxfbmxpbmspCistCQkJLypAaW5uZXJjb250aW51ZUAqLyBjb250aW51ZTsKKy0JCSAgICBpZiAoZmxwLT5mbF9pbm8gIT0gamxwLT5mbF9pbm8pCistCQkJLypAaW5uZXJjb250aW51ZUAqLyBjb250aW51ZTsKKy0JCSAgICBpZiAoZmxwLT5mbF9kZXYgIT0gamxwLT5mbF9kZXYpCistCQkJLypAaW5uZXJjb250aW51ZUAqLyBjb250aW51ZTsKKy0JCSAgICBiaW5nbyA9IDA7CS8qIGRvbid0IHRhbGx5IGhhcmRsaW5rIHlldC4gKi8KKy0JCSAgICAvKkBpbm5lcmJyZWFrQCovIGJyZWFrOworLQkJfQorLQkgICAgfQorLQkgICAgaWYgKGJpbmdvKQorLQkJZmwtPnRvdGFsRmlsZVNpemUgKz0gZmxwLT5mbF9zaXplOworLQl9CisgICAgIH0KKyAKKyAgICAgdWkzMiA9IGZsLT50b3RhbEZpbGVTaXplOworSW5kZXg6IHJwbS01LjQuMTQvbGliL2ZzbS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9mc20uYworKysrIHJwbS01LjQuMTQvbGliL2ZzbS5jCitAQCAtOTA0LDYgKzkwNCw3IEBAIGludCBmc21NYXBBdHRycyhJT1NNX3QgZnNtKQorIAorICAgICBpZiAoZmkgJiYgaSA+PSAwICYmIGkgPCAoaW50KSBmaS0+ZmMpIHsKKyAJbW9kZV90IHBlcm1zID0gKFNfSVNESVIoc3QtPnN0X21vZGUpID8gZmktPmRwZXJtcyA6IGZpLT5mcGVybXMpOworKwlpbm9fdCBmaW5hbElub2RlID0gKGZpLT5maW5vZGVzID8gKGlub190KWZpLT5maW5vZGVzW2ldIDogMCk7CisgCW1vZGVfdCBmaW5hbE1vZGUgPSAoZmktPmZtb2RlcyA/IChtb2RlX3QpZmktPmZtb2Rlc1tpXSA6IHBlcm1zKTsKKyAJZGV2X3QgZmluYWxSZGV2ID0gKGRldl90KShmaS0+ZnJkZXZzID8gZmktPmZyZGV2c1tpXSA6IDApOworIAlycG11aW50MzJfdCBmaW5hbE10aW1lID0gKGZpLT5mbXRpbWVzID8gZmktPmZtdGltZXNbaV0gOiAwKTsKK0BAIC05NDMsNiArOTQ0LDcgQEAgaW50IGZzbU1hcEF0dHJzKElPU01fdCBmc20pCisgCSAgICBpZiAoKFNfSVNDSFIoc3QtPnN0X21vZGUpIHx8IFNfSVNCTEsoc3QtPnN0X21vZGUpKQorIAkgICAgJiYgc3QtPnN0X25saW5rID09IDApCisgCQlzdC0+c3RfbmxpbmsgPSAxOworKwkgICAgc3QtPnN0X2lubyA9IGZpbmFsSW5vZGU7CisgCSAgICBzdC0+c3RfcmRldiA9IGZpbmFsUmRldjsKKyAJICAgIHN0LT5zdF9tdGltZSA9IGZpbmFsTXRpbWU7CisgCX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBrZ2NvbmZpZ2RlcHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wa2djb25maWdkZXBzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMTgyYWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wa2djb25maWdkZXBzLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK3BrZ2NvbmZpZ2RlcHMuc2g6IENoYW5nZSB0byByZXN0cmljdGluZyBwa2djb25maWcgdG8gdGhlIGxvY2FsIGRpcmVjdG9yeQorCitVc2luZyBQS0dfQ09ORklHX1BBVEggd2lsbCBhbGxvdyBwa2ctY29uZmlnIHRvIGZhbGwgYmFjayB0byB0aGUgc3lzdGVtIHBhdGhzLAord2UgZG9uJ3Qgd2FudCB0aGlzIGFzIGl0IG1heSBsZWFkIHRvIGluYWNjdXJhdGUgcmVzdWx0cyBpbiBzb21lIGNvcm5lciBjYXNlcy4KKworUEtHX0NPTkZJR19MSUJESVIgd2lsbCBlbnN1cmUgcGtnLWNvbmZpZyBzdGF5cyB3aXRoaW4gdGhlIGluc3RhbGwgZGlyZWN0b3J5LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvc2NyaXB0cy9wa2djb25maWdkZXBzLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3NjcmlwdHMvcGtnY29uZmlnZGVwcy5zaAorKysrIHJwbS01LjQuMTQvc2NyaXB0cy9wa2djb25maWdkZXBzLnNoCitAQCAtMTgsOCArMTgsOCBAQCBjYXNlICQxIGluCisgICAgICoucGMpCisgCSMgUXVlcnkgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgcGFja2FnZS4KKyAJRElSPWBkaXJuYW1lICR7ZmlsZW5hbWV9YAorLQlQS0dfQ09ORklHX1BBVEg9IiRESVI6JERJUi8uLi8uLi9zaGFyZS9wa2djb25maWciCistCWV4cG9ydCBQS0dfQ09ORklHX1BBVEgKKysJUEtHX0NPTkZJR19MSUJESVI9IiRESVI6JERJUi8uLi8uLi9zaGFyZS9wa2djb25maWciCisrCWV4cG9ydCBQS0dfQ09ORklHX0xJQkRJUgorIAkkcGtnY29uZmlnIC0tcHJpbnQtcHJvdmlkZXMgIiRmaWxlbmFtZSIgMj4gL2Rldi9udWxsIHwgd2hpbGUgcmVhZCBuIHIgdiA7IGRvCisgCSAgICBbIC1uICIkbiIgXSB8fCBjb250aW51ZQorIAkgICAgIyBXZSBoYXZlIGEgZGVwZW5kZW5jeS4gIE1ha2UgYSBub3RlIHRoYXQgd2UgbmVlZCB0aGUgcGtnY29uZmlnCitAQCAtNDIsOCArNDIsOCBAQCBjYXNlICQxIGluCisgCVsgLW4gIiRvbmVzaG90IiBdICYmIGVjaG8gIiRvbmVzaG90Ijsgb25lc2hvdD0iIgorIAkjIFF1ZXJ5IHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIHBhY2thZ2UuCisgCURJUj1gZGlybmFtZSAke2ZpbGVuYW1lfWAKKy0JUEtHX0NPTkZJR19QQVRIPSIkRElSOiRESVIvLi4vLi4vc2hhcmUvcGtnY29uZmlnIgorLQlleHBvcnQgUEtHX0NPTkZJR19QQVRICisrCVBLR19DT05GSUdfTElCRElSPSIkRElSOiRESVIvLi4vLi4vc2hhcmUvcGtnY29uZmlnIgorKwlleHBvcnQgUEtHX0NPTkZJR19MSUJESVIKKyAJJHBrZ2NvbmZpZyAtLXByaW50LXJlcXVpcmVzICIkZmlsZW5hbWUiIDI+IC9kZXYvbnVsbCB8IHdoaWxlIHJlYWQgbiByIHYgOyBkbworIAkgICAgWyAtbiAiJG4iIF0gfHwgY29udGludWUKKyAJICAgIGlmICBbIC1uICIkciIgXSAmJiBbIC1uICIkdiIgXTsgdGhlbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGxhdGZvcm0tZmlsZS1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wbGF0Zm9ybS1maWxlLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjZhNmU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGxhdGZvcm0tZmlsZS1maXgucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRG9uJ3QgYWRkIHRoZSBmaXJzdCBsaW5lIG9mIC9ldGMvcnBtL3BsYXRmb3JtIHRvIHRoZSBsaXN0IG9mIHBhdHRlcm5zCit0byBtYXRjaCB3aGVuIGNvbXB1dGluZyBhbiBhcmNoIHNjb3JlLCB1c2UgaXQganVzdCBmb3IgZ2V0dGluZworaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBsYXRmb3JtIChjcHUvdmVuZG9yL29zKS4gRml4ZXMgIzM4NjQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9ycG1yYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9ycG1yYy5jCisrKysgcnBtLTUuNC4xNC9saWIvcnBtcmMuYworQEAgLTUxMCw2ICs1MTAsNyBAQCBzdGF0aWMgcnBtUkMgcnBtUGxhdGZvcm0oY29uc3QgY2hhciAqIHBsCisgI2VuZGlmCisgCX0KKyAKKysjaWYgIWRlZmluZWQoUlBNX1ZFTkRPUl9PRSkgLyogU2tpcCB0aGUgZXhwbGljaXQtcGxhdGZvcm0gKi8KKyAjaWYgZGVmaW5lZChSUE1fVkVORE9SX09QRU5QS0cpIC8qIGV4cGxpY2l0LXBsYXRmb3JtICovCisgCS8qIGRvIG5vdCB1c2UgdmVuZG9yIGFuZCBHTlUgYXR0cmlidXRpb24gKi8KKyAJcCA9IHJwbUV4cGFuZCgiJXtfaG9zdF9jcHV9LSV7X2hvc3Rfb3N9IiwgTlVMTCk7CitAQCAtNTIwLDcgKzUyMSw4IEBAIHN0YXRpYyBycG1SQyBycG1QbGF0Zm9ybShjb25zdCBjaGFyICogcGwKKyAjZW5kaWYKKyAJeHggPSBtaXJlQXBwZW5kKFJQTU1JUkVfU1RSQ01QLCAwLCBwLCBOVUxMLCAmbWlfcmUsICZtaV9ucmUpOworIAlwID0gX2ZyZWUocCk7CistCQorKyNlbmRpZgorKworIAlpbml0X3BsYXRmb3JtKys7CisgICAgIH0KKyAgICAgcmMgPSAoaW5pdF9wbGF0Zm9ybSA/IFJQTVJDX09LIDogUlBNUkNfRkFJTCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wbGF0Zm9ybS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZmQwMzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wbGF0Zm9ybS5wYXRjaApAQCAtMCwwICsxLDEzNyBAQAorRml4IHVwIHBsYXRmb3JtIGFuZCByZWxhdGVkIHN5c2luZm8gZmlsZSBsb2FkaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBlbnN1cmVzIHRoYXQgUlBNIGtub3dzIHRoZSBjb21wYXRpYmxlIHNldCBvZiBwYWNrYWdlIHR5cGVzIGF0IGFsbCB0aW1lcy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvZGVwZW5kcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9kZXBlbmRzLmMKKysrKyBycG0tNS40LjE0L2xpYi9kZXBlbmRzLmMKK0BAIC0yNTAsNyArMjUwLDcgQEAgc3RhdGljIGludCBycG10c0FkZFVwZ3JhZGVzKHJwbXRzIHRzLCBycAorIAkgICAgaGUtPnAucHRyID0gX2ZyZWUoaGUtPnAucHRyKTsKKyAJfQorIAorLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKQorKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKSAmJiAhZGVmaW5lZChSUE1fVkVORE9SX09FKQorIAkvKgorIAkgKiBJZiB3ZSdyZSBjYXBhYmxlIG9mIGluc3RhbGxpbmcgbXVsdGlwbGUgY29sb3JzCisgCSAqIGJ1dCBhdCBsZWFzdCBvbmUgb2YgdGhlIHBhY2thZ2VzIGFyZSB3aGl0ZSAoMCksIHdlCitAQCAtNTA3LDcgKzUwNyw3IEBAIGFzc2VydChsYXN0eCA+PSAwICYmIGxhc3R4IDwgdHMtPm9yZGVyQ28KKyAgICAgcmV0dXJuIDA7CisgfQorIAorLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKQorKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKSAmJiAhZGVmaW5lZChSUE1fVkVORE9SX09FKQorIC8qIElzICJjb21wYXQiIGNvbXBhdGlibGUgdy8gYXJjaD8gKi8KKyBpbnQgX2lzQ29tcGF0aWJsZUFyY2goY29uc3QgY2hhciAqIGFyY2gsIGNvbnN0IGNoYXIgKiBjb21wYXQpCisgeworQEAgLTY2Myw3ICs2NjMsNyBAQCBhc3NlcnQoaGUtPnAuc3RyICE9IE5VTEwpOworIAorIAkgICAgaWYgKGFyY2ggPT0gTlVMTCB8fCAocGFyY2ggPSBycG10ZUEocCkpID09IE5VTEwpCisgCQljb250aW51ZTsKKy0jaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikgJiYgIWRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKyAJICAgIC8qIFhYWCBoYWNrZXJ5IGZvciBhbGlhcyBtYXRjaGluZy4gKi8KKyAJICAgIGlmICghX2lzQ29tcGF0aWJsZUFyY2goYXJjaCwgcGFyY2gpKQorIAkJY29udGludWU7CitAQCAtODI5LDYgKzgyOSwxMiBAQCBpbnQgcnBtdHNBZGRFcmFzZUVsZW1lbnQocnBtdHMgdHMsIEhlYWRlCisgICAgIHJldHVybiByYzsKKyB9CisgCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpIHx8IGRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKysjZGVmaW5lIF9FVENfUlBNX1NZU0lORk8gICAgICAgICIle19ldGNycG19L3N5c2luZm8iCisrI2Vsc2UKKysjZGVmaW5lIF9FVENfUlBNX1NZU0lORk8gICAgICAgIFNZU0NPTkZJR0RJUiAiL3N5c2luZm8iCisrI2VuZGlmCisrCisgLypAb25seUAqLyAvKkBudWxsQCovIC8qQHVuY2hlY2tlZEAqLworIHN0YXRpYyBjaGFyICpzeXNpbmZvX3BhdGggPSBOVUxMOworIAorQEAgLTEzMTEsNyArMTMxNyw3IEBAIHJldHJ5OgorIAlzeXNpbmZvX3BhdGggPSBycG1FeHBhbmQoIiV7P19ycG1kc19zeXNpbmZvX3BhdGh9IiwgTlVMTCk7CisgCWlmICghKHN5c2luZm9fcGF0aCAhPSBOVUxMICYmICpzeXNpbmZvX3BhdGggPT0gJy8nKSkgeworIAkgICAgc3lzaW5mb19wYXRoID0gX2ZyZWUoc3lzaW5mb19wYXRoKTsKKy0JICAgIHN5c2luZm9fcGF0aCA9IHhzdHJkdXAoU1lTQ09ORklHRElSICIvc3lzaW5mbyIpOworKwkgICAgc3lzaW5mb19wYXRoID0gcnBtRXhwYW5kKF9FVENfUlBNX1NZU0lORk8sIE5VTEwpOworIAl9CisgICAgIH0KKyAKK0luZGV4OiBycG0tNS40LjE0L2xpYi9ycG1kcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9ycG1kcy5jCisrKysgcnBtLTUuNC4xNC9saWIvcnBtZHMuYworQEAgLTE3NTksNyArMTc1OSw3IEBAIGludCBycG1kc1N5c2luZm8ocnBtUFJDTyBQUkNPLCBjb25zdCBjaGEKKyAvKkAtb2JzZXJ2ZXJ0cmFucyBAKi8KKyAJICAgIF9zeXNpbmZvX3BhdGggPSBfZnJlZShfc3lzaW5mb19wYXRoKTsKKyAvKkA9b2JzZXJ2ZXJ0cmFucyBAKi8KKy0JICAgIF9zeXNpbmZvX3BhdGggPSB4c3RyZHVwKF9FVENfUlBNX1NZU0lORk8pOworKwkgICAgX3N5c2luZm9fcGF0aCA9IHJwbUV4cGFuZChfRVRDX1JQTV9TWVNJTkZPLCBOVUxMKTsKKyAJfQorICAgICB9CisgLypAPW1vZG9ic2VydmVyQCovCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtcmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtcmMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbXJjLmMKK0BAIC0zOCw3ICszOCwxMyBAQAorIHN0YXRpYyBjb25zdCBjaGFyICogY29uZmlnVGFyZ2V0ID0gTlVMTDsKKyAKKyAvKkBvYnNlcnZlckAqLyAvKkB1bmNoZWNrZWRAKi8KKy1zdGF0aWMgY29uc3QgY2hhciAqIHBsYXRmb3JtID0gU1lTQ09ORklHRElSICIvcGxhdGZvcm0iOworKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKQorKyNkZWZpbmUgX0VUQ19SUE1fUExBVEZPUk0gICAgICAgICIle19ldGNycG19L3BsYXRmb3JtIgorKyNlbHNlCisrI2RlZmluZSBfRVRDX1JQTV9QTEFURk9STSAgICAgICAgU1lTQ09ORklHRElSICIvcGxhdGZvcm0iCisrI2VuZGlmCisrCisrc3RhdGljIGNvbnN0IGNoYXIgKiBfcGxhdGZvcm0gPSBOVUxMOworIAorIC8qQG9ubHlAKi8gLypAcmVsbnVsbEAqLyAvKkB1bmNoZWNrZWRAKi8KKyB2b2lkICogcGxhdHBhdCA9IE5VTEw7CitAQCAtNjk0LDE2ICs3MDAsMTcgQEAgc3RhdGljIHZvaWQgZGVmYXVsdE1hY2hpbmUoLypAb3V0QCovIGNvbgorICAgICBpbnQgcmM7CisgCisgICAgIHdoaWxlICghZ290RGVmYXVsdHMpIHsKKy0jaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikKKy0JY29uc3QgY2hhciAqIF9wbGF0Zm9ybSA9IHJwbUdldFBhdGgoX19ldGNycG0sICIvcGxhdGZvcm0iLCBOVUxMKTsKKy0jZWxzZQorLQljb25zdCBjaGFyICogX3BsYXRmb3JtID0gcGxhdGZvcm07CistI2VuZGlmCisrCWlmIChfcGxhdGZvcm0gPT0gTlVMTCkgeworKwkgICAgX3BsYXRmb3JtID0gcnBtRXhwYW5kKCIlez9fcnBtcmNfcGxhdGZvcm1fcGF0aH0iLCBOVUxMKTsKKysJICAgIC8qIFhYWCBtYXkgbmVlZCB0byB2YWxpZGF0ZSBwYXRoIGV4aXN0ZW5jZSBzb21ld2hlbi4gKi8KKysJICAgIGlmICghKF9wbGF0Zm9ybSAhPSBOVUxMICYmICpfcGxhdGZvcm0gPT0gJy8nKSkgeworKwkJX3BsYXRmb3JtID0gX2ZyZWUoX3BsYXRmb3JtKTsKKysJCV9wbGF0Zm9ybSA9IHJwbUV4cGFuZChfRVRDX1JQTV9QTEFURk9STSwgTlVMTCk7CisrCSAgICB9CisrCX0KKyAJQ1ZPR190IGN2b2cgPSBOVUxMOworICNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfT1BFTlBLRykgLyogbGFyZ2VyLXV0c25hbWUgKi8KKyAJY29uc3QgY2hhciAqY3A7CistI2VuZGlmCistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PUEVOUEtHKSAvKiBsYXJnZXItdXRzbmFtZSAqLworIAkvKiB1dHNuYW1lIGZpZWxkcyBvbiBzb21lIHBsYXRmb3JtcyAobGlrZSBIUC1VWCkgYXJlIHZlcnkgc21hbGwKKyAJICAgKGp1c3QgYWJvdXQgOCBjaGFyYWN0ZXJzKS4gVGhpcyBpcyB0b28gc21hbGwgZm9yIE9wZW5QS0csIHNvIGNoZWF0ISAqLworIAlyYyA9IHVuYW1lKCZ1bl9yZWFsKTsKK0BAIC03ODAsOSArNzg3LDcgQEAgc3RhdGljIHZvaWQgZGVmYXVsdE1hY2hpbmUoLypAb3V0QCovIGNvbgorIAlpZiAoY3AgIT0gTlVMTCAmJiBjcCAhPSBfcGxhdGZvcm0pCisgCSAgICBjcCA9IF9mcmVlKGNwKTsKKyAjZW5kaWYKKy0jaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikKKyAJX3BsYXRmb3JtID0gX2ZyZWUoX3BsYXRmb3JtKTsKKy0jZW5kaWYKKyAKKyAJaWYgKGNvbmZpZ1RhcmdldCAmJiAhcGFyc2VDVk9HKGNvbmZpZ1RhcmdldCwgJmN2b2cpICYmIGN2b2cgIT0gTlVMTCkgeworIAkgICAgZ290RGVmYXVsdHMgPSAxOworQEAgLTExMDEsNiArMTEwNiw4IEBAIGludCBycG1SZWFkQ29uZmlnRmlsZXMoLypAdW51c2VkQCovIGNvbnMKKyAKKyAjaWZkZWYgUFJFTUFDUk9GSUxFUworICAgICBpZiAocnBtUmVhZFJDKFBSRU1BQ1JPRklMRVMpKSByZXR1cm4gLTE7CisrI2Vsc2UKKysgICAgaWYgKHJwbVJlYWRSQyhOVUxMKSkgcmV0dXJuIC0xOworICNlbmRpZgorIAorICAgICAvKiBSZXNldCB1bWFzayB0byBpdHMgZGVmYXVsdCB1bWFzaygyKSB2YWx1ZS4gKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWQ1NGU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGxhdGZvcm0yLnBhdGNoCkBAIC0wLDAgKzEsMTA1IEBACitGaXggdXAgcGxhdGZvcm0gYW5kIHJlbGF0ZWQgc3lzaW5mbyBmaWxlIGxvYWRpbmcgKHBhcnQgMikuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHNldCB0aGUgX2dudSBmbGFnIHNvbWVob3cuICBXZSBkbyB0aGlzIGJ5IHJlYWRpbmcKK2Zyb20gdGhlIHBsYXRmb3JtIGZpbGUsIGFuZCBzZXR0aW5nIGEgbmV3IF9wbGF0Zm9ybV9nbnUgYW5kIHJlbGF0ZWQgdmFycy4KKworVGhlIGRlZmF1bHQgdmFsdWVzIG9mIF9ob3N0X2NwdSwgX2hvc3RfdmVuZG9yIGFuZCBfaG9zdF9vcyBhcmUgY2hhbmdlZCB0bworcmVmZXJlbmNlIGVpdGhlciB0aGUgYXV0b21hdGljYWxseSBkZXRlcm1pbmVkIF90YXJnZXRfLi4uIG9yIF9wbGF0Zm9ybV8uLi4KK3ZhbHVlcy4gIFRoZSBtYWNyb3MgZmlsZSB1c2VzIHRoZSBjb25maWd1cmUgdGltZSBkZWZhdWx0cyBpbiBfcGxhdGZvcm1fLi4uCit2ZXJzaW9ucyBoYXZlIG5vdCBiZWVuIGRlZmluZWQuICBUaGlzIHByZXNlcnZlcyBleGlzdGluZyBiZWhhdmlvciwgYnV0CitlbnN1cmVzIHJlYXNvbmFibGUgZGVmYXVsdHMgYXJlIGFsd2F5cyBhdmFpbGFibGUuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL3JwbXJjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3JwbXJjLmMKKysrKyBycG0tNS40LjE0L2xpYi9ycG1yYy5jCitAQCAtMzI4LDEwICszMjgsMTUgQEAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdHModm9pZCkKKyAJLypAbW9kaWZpZXMgcnBtR2xvYmFsTWFjcm9Db250ZXh0LCBpbnRlcm5hbFN0YXRlIEAqLworIHsKKyAKKy0jaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikgfHwgZGVmaW5lZChSUE1fVkVORE9SX09FKQorICAgICBhZGRNYWNybyhOVUxMLCAiX3VzcmxpYnJwbSIsIE5VTEwsIF9fdXNybGlicnBtLCBSTUlMX0RFRkFVTFQpOworICAgICBhZGRNYWNybyhOVUxMLCAiX2V0Y3JwbSIsIE5VTEwsIF9fZXRjcnBtLCBSTUlMX0RFRkFVTFQpOworICAgICBhZGRNYWNybyhOVUxMLCAiX3ZlbmRvciIsIE5VTEwsICIlez9faG9zdF92ZW5kb3J9JXshP19ob3N0X3ZlbmRvcjp3cnN9IiwgUk1JTF9ERUZBVUxUKTsKKysKKysgICAgYWRkTWFjcm8oTlVMTCwgIl9ob3N0X2NwdSIsIE5VTEwsICIlez9fcGxhdGZvcm1fY3B1fSV7IT9fcGxhdGZvcm1fY3B1OiV7P190YXJnZXRfY3B1fX0iLCBSTUlMX0RFRkFVTFQpOworKyAgICBhZGRNYWNybyhOVUxMLCAiX2hvc3RfdmVuZG9yIiwgTlVMTCwgIiV7P19wbGF0Zm9ybV92ZW5kb3J9JXshP19wbGF0Zm9ybV9jcHU6JXs/X3RhcmdldF92ZW5kb3J9fSIsIFJNSUxfREVGQVVMVCk7CisrICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF9vcyIsIE5VTEwsICIlez9fcGxhdGZvcm1fb3N9JXshP19wbGF0Zm9ybV9vczolez9fdGFyZ2V0X29zfX0iLCBSTUlMX0RFRkFVTFQpOworKyAgICBhZGRNYWNybyhOVUxMLCAiX2hvc3RfZ251IiwgTlVMTCwgIiV7P19wbGF0Zm9ybV9nbnV9JXshP19wbGF0Zm9ybV9nbnU6JXs/X2dudX19IiwgUk1JTF9ERUZBVUxUKTsKKyAjZW5kaWYKKyAKKyAgICAgYWRkTWFjcm8oTlVMTCwgIl91c3IiLCBOVUxMLCBVU1JQUkVGSVgsIFJNSUxfREVGQVVMVCk7CitAQCAtNDg3LDkgKzQ5MiwyMiBAQCBzdGF0aWMgcnBtUkMgcnBtUGxhdGZvcm0oY29uc3QgY2hhciAqIHBsCisgCX0KKyAKKyAJaWYgKCFwYXJzZUNWT0cocCwgJmN2b2cpICYmIGN2b2cgIT0gTlVMTCkgeworKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisrCSAgICBjaGFyICogX2dudSA9IE5VTEw7CisrCisrCSAgICBhZGRNYWNybyhOVUxMLCAiX3BsYXRmb3JtX2NwdSIsIE5VTEwsIGN2b2ctPmNwdSwgLTEpOworKwkgICAgYWRkTWFjcm8oTlVMTCwgIl9wbGF0Zm9ybV92ZW5kb3IiLCBOVUxMLCBjdm9nLT52ZW5kb3IsIC0xKTsKKysJICAgIGFkZE1hY3JvKE5VTEwsICJfcGxhdGZvcm1fb3MiLCBOVUxMLCBjdm9nLT5vcywgLTEpOworKworKwkgICAgaWYgKGN2b2ctPmdudSAmJiBjdm9nLT5nbnVbMF0gIT0gJ1wwJykKKysJCV9nbnUgPSBycG1FeHBhbmQoIi0iLCBjdm9nLT5nbnUsIE5VTEwpOworKworKwkgICAgYWRkTWFjcm8oTlVMTCwgIl9wbGF0Zm9ybV9nbnUiLCBOVUxMLCAoX2dudSA/IF9nbnUgOiAiIiksIC0xKTsKKysjZWxzZQorIAkgICAgYWRkTWFjcm8oTlVMTCwgIl9ob3N0X2NwdSIsIE5VTEwsIGN2b2ctPmNwdSwgLTEpOworIAkgICAgYWRkTWFjcm8oTlVMTCwgIl9ob3N0X3ZlbmRvciIsIE5VTEwsIGN2b2ctPnZlbmRvciwgLTEpOworIAkgICAgYWRkTWFjcm8oTlVMTCwgIl9ob3N0X29zIiwgTlVMTCwgY3ZvZy0+b3MsIC0xKTsKKysjZW5kaWYKKyAJfQorIAorICNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfT1BFTlBLRykgLyogZXhwbGljaXQtcGxhdGZvcm0gKi8KK0luZGV4OiBycG0tNS40LjE0L21hY3Jvcy9tYWNyb3MuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbWFjcm9zL21hY3Jvcy5pbgorKysrIHJwbS01LjQuMTQvbWFjcm9zL21hY3Jvcy5pbgorQEAgLTkwMCw5ICs5MDAsOSBAQCAkX2FyYml0cmFyeV90YWdzX3Rlc3RzCUZvbzpCYXIKKyAlX29zCQkJQFJQTUNBTk9OT1NACisgJV9nbnUJCQlAUlBNQ0FOT05HTlVACisgCistJV9ob3N0X3BsYXRmb3JtCQkle19ob3N0X2NwdX0tJXtfaG9zdF92ZW5kb3J9LSV7X2hvc3Rfb3N9JXs/X2dudX0KKy0lX2J1aWxkX3BsYXRmb3JtCSV7X2J1aWxkX2NwdX0tJXtfYnVpbGRfdmVuZG9yfS0le19idWlsZF9vc30lez9fZ251fQorLSVfdGFyZ2V0X3BsYXRmb3JtCSV7X3RhcmdldF9jcHV9LSV7X3RhcmdldF92ZW5kb3J9LSV7X3RhcmdldF9vc30lez9fZ251fQorKyVfaG9zdF9wbGF0Zm9ybQkJJXtfaG9zdF9jcHV9LSV7X2hvc3RfdmVuZG9yfS0le19ob3N0X29zfSV7P19ob3N0X2dudX0leyE/X2hvc3RfZ251OiV7P19nbnV9fQorKyVfYnVpbGRfcGxhdGZvcm0JJXtfYnVpbGRfY3B1fS0le19idWlsZF92ZW5kb3J9LSV7X2J1aWxkX29zfSV7P19ob3N0X2dudX0leyE/X2hvc3RfZ251OiV7P19nbnV9fQorKyVfdGFyZ2V0X3BsYXRmb3JtCSV7X3RhcmdldF9jcHV9LSV7X3RhcmdldF92ZW5kb3J9LSV7X3RhcmdldF9vc30lez9faG9zdF9nbnV9JXshP19ob3N0X2dudTolez9fZ251fX0KKyAKKyAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIyAtLS0tIGNvbmZpZ3VyZSBtYWNyb3MuCitAQCAtOTQ1LDkgKzk0NSwxMCBAQCAkX2FyYml0cmFyeV90YWdzX3Rlc3RzCUZvbzpCYXIKKyAlX2J1aWxkX29zCQkle19ob3N0X29zfQorICVfaG9zdAkJCUBob3N0QAorICVfaG9zdF9hbGlhcwkJQGhvc3RfYWxpYXNAJXtuaWx9CistJV9ob3N0X2NwdQkJQGhvc3RfY3B1QAorLSVfaG9zdF92ZW5kb3IJCUBob3N0X3ZlbmRvckAKKy0lX2hvc3Rfb3MJCUBob3N0X29zQAorKyVfaG9zdF9jcHUJCSV7P19wbGF0Zm9ybV9jcHV9JXshP19wbGF0Zm9ybV9jcHU6JXtfYXJjaH19CisrJV9ob3N0X3ZlbmRvcgkJJXs/X3BsYXRmb3JtX3ZlbmRvcn0leyE/X3BsYXRmb3JtX3ZlbmRvcjole192ZW5kb3J9fQorKyVfaG9zdF9vcwkJJXs/X3BsYXRmb3JtX29zfSV7IT9fcGxhdGZvcm1fb3M6JXtfb3N9fQorKyVfaG9zdF9nbnUJCSV7P19wbGF0Zm9ybV9nbnV9JXshP19wbGF0Zm9ybV9nbnU6JXtfZ251fX0KKyAlX3RhcmdldAkJJXtfaG9zdH0KKyAlX3RhcmdldF9hbGlhcwkJJXtfaG9zdF9hbGlhc30KKyAlX3RhcmdldF9jcHUJCSV7X2hvc3RfY3B1fQorSW5kZXg6IHJwbS01LjQuMTQvcHl0aG9uL3JwbW1vZHVsZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3B5dGhvbi9ycG1tb2R1bGUuYworKysrIHJwbS01LjQuMTQvcHl0aG9uL3JwbW1vZHVsZS5jCitAQCAtNjUsOCArNjUsOCBAQCBzdGF0aWMgUHlPYmplY3QgKiBhcmNoU2NvcmUoUHlPYmplY3QgKiBzCisgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJzIiwga3dsaXN0LCAmYXJjaCkpCisgCXJldHVybiBOVUxMOworIAorLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKQorLSAgICBwbGF0Zm9ybSA9IHJwbUV4cGFuZChhcmNoLCAiLSV7X2hvc3RfdmVuZG9yfSIsICItJXtfaG9zdF9vc30lez9fZ251fSIsIE5VTEwpOworKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKSB8fCBkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisrICAgIHBsYXRmb3JtID0gcnBtRXhwYW5kKGFyY2gsICItJXtfaG9zdF92ZW5kb3J9IiwgIi0le19ob3N0X29zfSV7P19ob3N0X2dudX0leyE/X2hvc3RfZ251OiV7P19nbnV9fSIsIE5VTEwpOworICNlbHNlCisgICAgIHBsYXRmb3JtID0gcnBtRXhwYW5kKGFyY2gsICItIiwgIiV7X3ZlbmRvcn0iLCAiLSIsICIle19vc30iLCBOVUxMKTsKKyAjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXB5LWluaXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1weS1pbml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZDQwN2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1weS1pbml0LnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK3B5dGhvbi9ycG1tb2R1bGVzLmM6IENoYW5nZSB0aGUgd2F5IHRoZSBweXRob24gbW9kdWxlIGxvYWRzIHRoZSBSUE0gY29uZmlnCisKK0luIG9yZGVyIHRvIHN1cHBvcnQgdGhlIFJQTV9WRU5ET1JfV0lORFJJVkVSIGVuaGFuY2VtZW50IG9mIGR5bmFtaWMKK3J1bnRpbWUgcmVsb2NhdGlvbiBwYXRocywgd2UgbmVlZCB0byBjYWxsIHJwbWNsaUluaXQgaW5zdGVhZCBvZiAKK3JwbVJlYWRDb25maWdGaWxlcy4gIFRoZSBycG1jbGlJbml0IHdpbGwgZW5kIHVwIGNhbGxpbmcgcnBtUmVhZENvbmZpZ0ZpbGVzCithZnRlciB0aGUgbmVjZXNzYXJ5IHJlbG9jYXRpb24gcHJvY2Vzc2luZyAoaWYgZW5hYmxlZCkuCisKK0NvZGUgZGVyaXZlZCBmcm9tIGNoYW5nZXMgc3VnZ2VzdGVkIGJ5IFBhdWwgRWdnbGV0b24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3B5dGhvbi9ycG1tb2R1bGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9weXRob24vcnBtbW9kdWxlLmMKKysrKyBycG0tNS40LjE0L3B5dGhvbi9ycG1tb2R1bGUuYworQEAgLTM5Miw3ICszOTIsOCBAQCB2b2lkIGluaXRfcnBtKHZvaWQpCisgICAgIGlmIChQeV9BdEV4aXQocnBtX2V4aXRob29rKSA9PSAtMSkKKyAJcmV0dXJuOworIAorLSAgICBycG1SZWFkQ29uZmlnRmlsZXMoTlVMTCwgTlVMTCk7CisrICAgIGNvbnN0IGNoYXIgKmFyZ3ZbMV0gPSB7InJwbW1vZHVsZSIsIDB9OworKyAgICBycG1jbGlJbml0KDEsIGFyZ3YsIE5VTEwpOworIAorICAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlYWxwYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVhbHBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgxMDEyMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlYWxwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2Nocm9vdDogcmVhbHBhdGggaXMgcmVxdWlyZWQgYmVmb3JlIGV4cGFuZGluZyBfZGJwYXRoCisKK191c3IgdHVybmVkIG91dCB0byBiZSBhIHJlbGF0aXZlIHBhdGggdG8gc3VwcG9ydCBkeWFubWljIGNvbmZpZywgYnV0IGl0J3MKK2JlaW5nIHVzZWQgc29tZXdoZXJlIGFzIGEgaW5kaWNhdG9yIHRvIGxvY2F0ZSBzdWJzdHJpbmdzLCBzbyB3ZSBtdXN0IGdldAordGhlIHJlYWwgcGF0aCBvZiBpdCBpbiBhZHZhbmNlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgKE9wZW5FbWJlZGRlZCBzcGVjaWZpYykKKworU2lnbmVkLW9mZi1ieTogTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+CisKK2RpZmYgLXVycE4gYS9ycG1pby9ycG1ycGMuYyBiL3JwbWlvL3JwbXJwYy5jCistLS0gYS9ycG1pby9ycG1ycGMuYworKysrIGIvcnBtaW8vcnBtcnBjLmMKK0BAIC0yNTcsNyArMjU3LDkgQEAgaW50IE9wZW4oY29uc3QgY2hhciAqIHBhdGgsIGludCBmbGFncywgbQorICAgICAvKiBYWFggaWYgdGhlIG9wZW4oMikgZmFpbHMsIHRyeSB0byBzdHJpcCBhIHBvc3NpYmxlIGNocm9vdCgyKSBwcmVmaXguICovCisgICAgIGlmIChmZG5vIDwgMCAmJiBlcnJubyA9PSBFTk9FTlQpIHsKKyAJY29uc3QgY2hhciAqZGJwYXRoID0gcnBtRXhwYW5kKCIlez9fZGJwYXRofS8iLCBOVUxMKTsKKy0JY29uc3QgY2hhciAqIGZuID0gc3Ryc3RyKHBhdGggKyAxLCBkYnBhdGgpOworKwljaGFyIHJlc29sdmVkX2RicGF0aFtQQVRIX01BWF07CisrCXJlYWxwYXRoKGRicGF0aCwgcmVzb2x2ZWRfZGJwYXRoKTsKKysJY29uc3QgY2hhciAqIGZuID0gc3Ryc3RyKHBhdGggKyAxLCByZXNvbHZlZF9kYnBhdGgpOworIAlpZiAoZm4pCisgCSAgICBmZG5vID0gb3BlbihmbiwgZmxhZ3MsIG1vZGUpOworIAlkYnBhdGggPSBfZnJlZShkYnBhdGgpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVsb2MtbWFjcm9zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVsb2MtbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZmU1MjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZWxvYy1tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorbWFjcm9zOiBVc2UgZHlhbm1pYyBjb25maWcgdnMgaGFyZCBjb2RlZCBzZXR0aW5ncworCitXaGVuIHRoZSBkeW5hbWljLCBydW50aW1lIHJlbG9jYXRpb24gaXMgZW5hYmxlcyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSAKK1JQTSBtYWNybyBmaWxlIGRvZXMgbm90IG92ZXJyaWRlIHRoZSBkeW5hbWljIHNldHRpbmdzLiAgRml4IHRoaXMgYnkgZm9yY2luZyB0aGUKK2R5bmFtaWMgdmVyc2lvbiB0byBiZSB1c2VkIGluIGFsbCBjYXNlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIChPcGVuRW1iZWRkZWQgc3BlY2lmaWMpCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbWFjcm9zL21hY3Jvcy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9tYWNyb3MvbWFjcm9zLmluCisrKysgcnBtLTUuNC4xNC9tYWNyb3MvbWFjcm9zLmluCitAQCAtMjcsMTEgKzI3LDEyIEBACisgIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICMgLS0tLSBmaWxlc3lzdGVtIG1hY3Jvcy4KKyAjCistJV91c3IJCQlAdXNycHJlZml4QAorKyVfdXNyCQkJJXtfdXNybGlicnBtfS8uLi8uLgorICVfdXNyc3JjCQkle191c3J9L3NyYworLSVfdmFyCQkJQHZhcnByZWZpeEAKKy0lX3VzcmxpYnJwbQkJQFVTUkxJQlJQTUAKKy0lX2V0Y3JwbQkJQFNZU0NPTkZJR0RJUkAKKyslX3ZhcgkJCSV7X3Vzcn0vLi4vdmFyCisrIyBUaGUgZHluYW1pYyByZWxvY2F0aW9uIGNvZGUgc2V0cyB0aGUgZm9sbG93aW5nIHR3byBpdGVtcworKyMlX3VzcmxpYnJwbQkJQFVTUkxJQlJQTUAKKysjJV9ldGNycG0JCUBTWVNDT05GSUdESVJACisgCisgJV9fb2JqZXh0CQlAb2JqZXh0QAorICVfX2xpYmV4dAkJQGxpYmV4dEAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlbW92ZS1zeWtjcGFyc2UtZGVjbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlbW92ZS1zeWtjcGFyc2UtZGVjbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjkwMTZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVtb3ZlLXN5a2NwYXJzZS1kZWNsLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK0luZGV4OiBycG0tNS40LjE0L3N5Y2svbGliL3N5Y2suaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9zeWNrL2xpYi9zeWNrLmgKKysrKyBycG0tNS40LjE0L3N5Y2svbGliL3N5Y2suaAorQEAgLTYyMSw5ICs2MjEsNiBAQCBsb25nIHN5Y2tfc2VxX2NvdW50KCBTeWNrTm9kZSAqc2VxICkKKyAgKi8KKyB2b2lkIHN5Y2tlcnJvciggY2hhciAqbXNnICkKKyAJLypAKi87CistaW50IHN5Y2twYXJzZSggdm9pZCAqICkKKy0JLypAZ2xvYmFscyBmaWxlU3lzdGVtIEAqLworLQkvKkBtb2RpZmllcyBmaWxlU3lzdGVtIEAqLzsKKyAvKiBYWFggdW5pb24gWVlTVFlQRSAqc3lja2x2YWwgaGFzIGlzc3VlcyBvbiBNYWMgT1MgWC4gKi8KKyBpbnQgc3lja2xleCggdm9pZCAqX3N5Y2tsdmFsLCBTeWNrUGFyc2VyICpwYXJzZXIgKQorIAkvKkBtb2RpZmllcyBfc3lja2x2YWwsIHBhcnNlciBAKi87CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZXNvbHZlZGVwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVzb2x2ZWRlcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmEyNDNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVzb2x2ZWRlcC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitsaWIvcnBtdHMuYzogRW5zdXJlIHRoYXQgd2UgY2hlY2sgYm90aCBwcm92aWRlbmFtZSBhbmQgZmlsZXBhdGhzCisKK1doZW4gbG9va2luZyB1cCBhIG1pc3NpbmcgZGVwZW5kZW5jaWVzLCBzdWNoIGFzIC9iaW4vc2gsIHdlIG5lZWQgdG8gbG9va3VwCitpbiBib3RoIHRoZSBwcm92aWRlbmFtZSBhbmQgZmlsZXBhdGhzIERCLCBub3QganVzdCB0aGUgZmlsZXBhdGhzIERCLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtdHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtdHMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbXRzLmMKK0BAIC00MTAsOCArNDEwLDggQEAgZnByaW50ZihzdGRlcnIsICItLT4gJXMoJXAsJXAsJXApXG4iLCBfXworIAlpZiAoc2RiID09IE5VTEwpCisgCSAgICBjb250aW51ZTsKKyAKKy0JLyogTG9vayBmb3IgYSBtYXRjaGluZyBQcm92aWRlczogaW4gc3VnZ2VzdGVkIHVuaXZlcnNlLiAqLworLQlycG10YWcgPSAoKmtleXAgPT0gJy8nID8gUlBNVEFHX0ZJTEVQQVRIUyA6IFJQTVRBR19QUk9WSURFTkFNRSk7CisrCXJwbXRhZyA9IFJQTVRBR19QUk9WSURFTkFNRTsKKysgICAgICAgZG8geworIAltaSA9IHJwbW1pSW5pdChzZGIsIHJwbXRhZywga2V5cCwga2V5bGVuKTsKKyAJd2hpbGUgKChoID0gcnBtbWlOZXh0KG1pKSkgIT0gTlVMTCkgeworIAkgICAgc2l6ZV90IGhuYW1lbGVuOworQEAgLTQ0Niw2ICs0NDYsMTUgQEAgZnByaW50ZihzdGRlcnIsICItLT4gJXMoJXAsJXAsJXApXG4iLCBfXworIAkgICAgYmhuYW1lbGVuID0gaG5hbWVsZW47CisgCX0KKyAJbWkgPSBycG1taUZyZWUobWkpOworKworKwlpZiAoYmggPT0gTlVMTCAmJiAqa2V5cCA9PSAnLycgJiYgcnBtdGFnID09IFJQTVRBR19QUk9WSURFTkFNRSkgeworKwkgICBycG10YWcgPSBSUE1UQUdfRklMRVBBVEhTOworKwkgICBjb250aW51ZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0gd2hpbGUgKDEpOworKworICAgICB9CisgCisgICAgIC8qIElzIHRoZXJlIGEgc3VnZ2VzdGVkIHJlc29sdXRpb24/ICovCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1ycG1wZ3AtZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcnBtcGdwLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGZlZWQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcnBtcGdwLWZpeC5wYXRjaApAQCAtMCwwICsxLDY3IEBACitycG1wZ3AuYzogQWRkIG1pc3NpbmcgaWYgZGVmcyBhcm91bmQgY3J5cHRvIGltcGxlbWVudGF0aW9ucworCitXaXRob3V0IHRoZXNlLCB0aGUgc3lzdGVtIHdpbGwgZXJyb3IgdHJ5aW5nIHRvIGZpbmQgdGhlIGNvcnJlY3QgY3J5cHRvIAorbGlicmFyeSB0byB1c2UuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0vcnBtaW8vcnBtcGdwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0ub3JpZy9ycG1pby9ycG1wZ3AuYworKysrIHJwbS9ycG1pby9ycG1wZ3AuYworQEAgLTEzMzksMTYgKzEzMzksMjYgQEAgaW50IHBncEV4cG9ydFB1YmtleShwZ3BEaWcgZGlnKQorIHsKKyAgICAgaW50IHJjID0gMDsJCS8qIGFzc3VtZSBmYWlsdXJlICovCisgCisrI2lmIGRlZmluZWQoV0lUSF9CRUVDUllQVCkKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1iY0ltcGxWZWNzKQorIAlyYyA9IHJwbWJjRXhwb3J0UHVia2V5KGRpZyk7CisrI2VuZGlmCisrI2lmIGRlZmluZWQoV0lUSF9TU0wpCisgICAgIGlmIChwZ3BJbXBsVmVjcyA9PSAmcnBtc3NsSW1wbFZlY3MpCisgCXJjID0gcnBtc3NsRXhwb3J0UHVia2V5KGRpZyk7CisrI2VuZGlmCisrI2lmIGRlZmluZWQoV0lUSF9OU1MpCisgICAgIGlmIChwZ3BJbXBsVmVjcyA9PSAmcnBtbnNzSW1wbFZlY3MpCisgCXJjID0gcnBtbnNzRXhwb3J0UHVia2V5KGRpZyk7CisrI2VuZGlmCisrI2lmIGRlZmluZWQoV0lUSF9HQ1JZUFQpCisgICAgIGlmIChwZ3BJbXBsVmVjcyA9PSAmcnBtZ2NJbXBsVmVjcykKKyAJcmMgPSBycG1nY0V4cG9ydFB1YmtleShkaWcpOworKyNlbmRpZgorKyNpZiBkZWZpbmVkKFdJVEhfVE9NQ1JZUFQpCisgICAgIGlmIChwZ3BJbXBsVmVjcyA9PSAmcnBtbHRjSW1wbFZlY3MpCisgCXJjID0gcnBtbHRjRXhwb3J0UHVia2V5KGRpZyk7CisrI2VuZGlmCisgICAgIHJldHVybiByYzsKKyB9CisgCitAQCAtMTM1NiwxNiArMTM2NiwyNiBAQCBpbnQgcGdwRXhwb3J0U2lnbmF0dXJlKHBncERpZyBkaWcsIERJR0VTCisgeworICAgICBpbnQgcmMgPSAwOwkJLyogYXNzdW1lIGZhaWx1cmUgKi8KKyAKKysjaWYgZGVmaW5lZChXSVRIX0JFRUNSWVBUKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbWJjSW1wbFZlY3MpCisgCXJjID0gcnBtYmNFeHBvcnRTaWduYXR1cmUoZGlnLCBjdHgpOworKyNlbmRpZgorKyNpZiBkZWZpbmVkKFdJVEhfU1NMKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbXNzbEltcGxWZWNzKQorIAlyYyA9IHJwbXNzbEV4cG9ydFNpZ25hdHVyZShkaWcsIGN0eCk7CisrI2VuZGlmCisrI2lmIGRlZmluZWQoV0lUSF9OU1MpCisgICAgIGlmIChwZ3BJbXBsVmVjcyA9PSAmcnBtbnNzSW1wbFZlY3MpCisgCXJjID0gcnBtbnNzRXhwb3J0U2lnbmF0dXJlKGRpZywgY3R4KTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChXSVRIX0dDUllQVCkKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1nY0ltcGxWZWNzKQorIAlyYyA9IHJwbWdjRXhwb3J0U2lnbmF0dXJlKGRpZywgY3R4KTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChXSVRIX1RPTUNSWVBUKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbWx0Y0ltcGxWZWNzKQorIAlyYyA9IHJwbWx0Y0V4cG9ydFNpZ25hdHVyZShkaWcsIGN0eCk7CisrI2VuZGlmCisgICAgIHJldHVybiByYzsKKyB9CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1zY3JpcHRsZXRleGVjaGVscGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tc2NyaXB0bGV0ZXhlY2hlbHBlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODI1MzcyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tc2NyaXB0bGV0ZXhlY2hlbHBlci5wYXRjaApAQCAtMCwwICsxLDE2MCBAQAorRW5hYmxlIGEgY3Jvc3MtaW5zdGFsbCBzY3JpcHRsZXQgaGVscGVyLgorCitUaGUgaGVscGVyIGlzIGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhlIGNocm9vdCB3aXRoIHRoZSBhcmd1bWVudHM6CisKKzxyb290PiA8cHJvZz4gPHNjcmlwdD4gPGFyZzE+IFs8YXJnMj4gLi4uIDxhcmdOPl0KKworVGhlIGhlbHBlciBzY3JpcHQgaXMgdXNlZCBieSBvZS1jb3JlIHRvIGZhY2lsaXRhdGUgc2hlbGwgc2NyaXB0IGFjdGlvbnMgdGhhdAorY2FuIG5vdCBiZSBydW4gZnJvbSB3aXRoaW4gYSBjaHJvb3Qgb24gYSBmb3JlaWduIHRhcmdldCBzeXN0ZW0gZHVyaW5nIGEKK2Nyb3NzIGluc3RhbGwuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9wc20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcHNtLmMKKysrKyBycG0tNS40LjE0L2xpYi9wc20uYworQEAgLTgwNiw2ICs4MDYsMTAgQEAgc3RhdGljIHJwbVJDIHJ1blNjcmlwdChycG1wc20gcHNtLCBIZWFkZQorICAgICBpbnQgeHg7CisgICAgIGludCBpOworIAorKyNpZmRlZiBSUE1fVkVORE9SX09FCisrICAgIGNvbnN0IGNoYXIgKiBzY3JpcHRsZXRXcmFwcGVyID0gcnBtRXhwYW5kKCIlez9fY3Jvc3Nfc2NyaXB0bGV0X3dyYXBwZXJ9IiwgTlVMTCk7CisrI2VuZGlmCisrICAgIAorICAgICBpZiAocHNtLT5zc3RhdGVzICE9IE5VTEwgJiYgaXggPj0gMCAmJiBpeCA8IFJQTVNDUklQVF9NQVgpCisgCXNzcCA9IHBzbS0+c3N0YXRlcyArIGl4OworICAgICBpZiAoc3NwICE9IE5VTEwpCitAQCAtODcyLDE0ICs4NzYsMjkgQEAgYXNzZXJ0KGhlLT5wLnN0ciAhPSBOVUxMKTsKKyAJCShGX0lTU0VUKHBzbSwgVU5PUkRFUkVEKSA/ICJhIiA6ICIiKSk7CisgCisgICAgIGlmIChQaGUtPnAuYXJndiA9PSBOVUxMKSB7CistCWFyZ3YgPSAoY29uc3QgY2hhciAqKikgYWxsb2NhKDUgKiBzaXplb2YoKmFyZ3YpKTsKKy0JYXJndlswXSA9ICIvYmluL3NoIjsKKy0JYXJnYyA9IDE7CisrCWFyZ3YgPSAoY29uc3QgY2hhciAqKikgYWxsb2NhKDcgKiBzaXplb2YoKmFyZ3YpKTsKKysJYXJnYyA9IDA7CisrICAgIH0gZWxzZSB7CisrCWFyZ3YgPSAoY29uc3QgY2hhciAqKikgYWxsb2NhKChQaGUtPmMgKyA2KSAqIHNpemVvZigqYXJndikpOworKwlhcmdjID0gMDsKKysgICAgfQorKworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrICAgIGlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKSB7CisrCWFyZ3ZbYXJnYysrXSA9IHNjcmlwdGxldFdyYXBwZXI7CisrCWFyZ3ZbYXJnY10gPSBycG10c1Jvb3REaXIodHMpOworKwlpZiAoIWFyZ3ZbYXJnY10gfHwgISphcmd2W2FyZ2NdKQorKwkgICBhcmd2W2FyZ2NdID0gIi8iOworKwlhcmdjKys7CisrICAgIH0KKysjZW5kaWYKKysKKysgICAgaWYgKFBoZS0+cC5hcmd2ID09IE5VTEwpIHsKKysJYXJndlthcmdjKytdID0gIi9iaW4vc2giOworIAlsZGNvbmZpZ19kb25lID0gMDsKKyAgICAgfSBlbHNlIHsKKy0JYXJndiA9IChjb25zdCBjaGFyICoqKSBhbGxvY2EoKFBoZS0+YyArIDQpICogc2l6ZW9mKCphcmd2KSk7CistCW1lbWNweShhcmd2LCBQaGUtPnAuYXJndiwgUGhlLT5jICogc2l6ZW9mKCphcmd2KSk7CistCWFyZ2MgPSBQaGUtPmM7CisrCW1lbWNweSgoYXJndiArIGFyZ2MpLCBQaGUtPnAuYXJndiwgUGhlLT5jICogc2l6ZW9mKCphcmd2KSk7CisrCWFyZ2MgKz0gUGhlLT5jOworIAlsZGNvbmZpZ19kb25lID0gKGxkY29uZmlnX3BhdGggJiYgIXN0cmNtcChhcmd2WzBdLCBsZGNvbmZpZ19wYXRoKQorIAkJPyAxIDogMCk7CisgICAgIH0KK0BAIC05MzAsNyArOTQ5LDEyIEBAIGFzc2VydChoZS0+cC5zdHIgIT0gTlVMTCk7CisgCSAgICBnb3RvIGV4aXQ7CisgCisgCWlmIChycG1Jc0RlYnVnKCkgJiYKKy0JICAgICghc3RyY21wKGFyZ3ZbMF0sICIvYmluL3NoIikgfHwgIXN0cmNtcChhcmd2WzBdLCAiL2Jpbi9iYXNoIikpKQorKwkgICAgKCFzdHJjbXAoYXJndlswXSwgIi9iaW4vc2giKSB8fCAhc3RyY21wKGFyZ3ZbMF0sICIvYmluL2Jhc2giKSkKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwkgICAgfHwgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIgJiYgIXN0cmNtcChhcmd2WzFdLCAiL2Jpbi9zaCIpKQorKwkgICAgfHwgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIgJiYgIXN0cmNtcChhcmd2WzFdLCAiL2Jpbi9iYXNoIikpCisrI2VuZGlmCisrCSAgICkKKyAJeworIAkgICAgc3RhdGljIGNvbnN0IGNoYXIgc2V0X3hbXSA9ICJzZXQgLXhcbiI7CisgCSAgICBudyA9IEZ3cml0ZShzZXRfeCwgc2l6ZW9mKHNldF94WzBdKSwgc2l6ZW9mKHNldF94KS0xLCBmZCk7CitAQCAtMTA2NSwxMiArMTA4OSwyMiBAQCBhc3NlcnQoaGUtPnAuc3RyICE9IE5VTEwpOworIAorIAl7ICAgY29uc3QgY2hhciAqIHJvb3REaXIgPSBycG10c1Jvb3REaXIodHMpOworIAkgICAgaWYgKCFycG10c0Nocm9vdERvbmUodHMpICYmIHJvb3REaXIgIT0gTlVMTCAmJgorKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCQkhKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpICYmCisrI2VuZGlmCisgCQkhKHJvb3REaXJbMF0gPT0gJy8nICYmIHJvb3REaXJbMV0gPT0gJ1wwJykpCisgCSAgICB7CisgCQkvKkAtbW9kb2JzZXJ2ZXJAKi8KKyAJCXh4ID0gQ2hyb290KHJvb3REaXIpOworIAkJLypAPW1vZG9ic2VydmVyQCovCisgCSAgICB9CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJICAgIGlmICghcnBtdHNDaHJvb3REb25lKHRzKSAmJiByb290RGlyICE9IE5VTEwgJiYKKysJCShzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKSAmJgorKwkJIShyb290RGlyWzBdID09ICcvJyAmJiByb290RGlyWzFdID09ICdcMCcpKQorKwkJeHggPSBDaGRpcihyb290RGlyKTsKKysJICAgIGVsc2UgCisrI2VuZGlmCisgCSAgICB4eCA9IENoZGlyKCIvIik7CisgCSAgICBycG1sb2coUlBNTE9HX0RFQlVHLCBEXygiJXM6ICVzKCVzKVx0ZXhlY3YoJXMpIHBpZCAlZFxuIiksCisgCQkJcHNtLT5zdGVwTmFtZSwgc2xuLCBOVlJBLAorQEAgLTI5ODUsNiArMzAxOSwxMyBAQCBhc3NlcnQocHNtLT50ZSAhPSBOVUxMKTsKKyAgICAgY2FzZSBQU01fU0NSSVBUOgkvKiBSdW4gY3VycmVudCBwYWNrYWdlIHNjcmlwdGxldHMuICovCisgCS8qIFhYWCBydW5uaW5nICV2ZXJpZnlzY3JpcHQvJXNhbml0eWNoZWNrIGRvZXNuJ3QgaGF2ZSBwc20tPnRlICovCisgICAgIHsJcnBtdHhuIF9wYXJlbnQgPSAocHNtICYmIHBzbS0+dGUgPyBwc20tPnRlLT50eG4gOiBOVUxMKTsKKysKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKyAgICAgICAgY29uc3QgY2hhciAqIHNjcmlwdGxldFdyYXBwZXIgPSBycG1FeHBhbmQoIiV7P19jcm9zc19zY3JpcHRsZXRfd3JhcHBlcn0iLCBOVUxMKTsKKysJaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgcmMgPSBycG1wc21OZXh0KHBzbSwgUFNNX0NIUk9PVF9PVVQpOworKyNlbmRpZgorKworIAl4eCA9IHJwbXR4bkJlZ2luKHJwbXRzR2V0UmRiKHRzKSwgX3BhcmVudCwgTlVMTCk7CisgCXJjID0gcnVuSW5zdFNjcmlwdChwc20pOworIAlpZiAocmMpCitAQCAtMjk5MiwxMSArMzAzMywyNCBAQCBhc3NlcnQocHNtLT50ZSAhPSBOVUxMKTsKKyAJZWxzZQorIAkgICAgIHh4ID0gcnBtdHhuQ29tbWl0KHJwbXRzR2V0UmRiKHRzKS0+ZGJfdHhuKTsKKyAJcnBtdHNHZXRSZGIodHMpLT5kYl90eG4gPSBOVUxMOworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCWlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgIHJjID0gcnBtcHNtTmV4dChwc20sIFBTTV9DSFJPT1RfSU4pOworKyNlbmRpZgorICAgICB9CWJyZWFrOworICAgICBjYXNlIFBTTV9UUklHR0VSUzoKKyAJLyogUnVuIHRyaWdnZXJzIGluIG90aGVyIHBhY2thZ2UocykgdGhpcyBwYWNrYWdlIHNldHMgb2ZmLiAqLworIAlpZiAocnBtdHNGbGFncyh0cykgJiBSUE1UUkFOU19GTEFHX1RFU1QpCWJyZWFrOworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrICAgICAgICBjb25zdCBjaGFyICogc2NyaXB0bGV0V3JhcHBlciA9IHJwbUV4cGFuZCgiJXs/X2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyfSIsIE5VTEwpOworKwlpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICByYyA9IHJwbXBzbU5leHQocHNtLCBQU01fQ0hST09UX09VVCk7CisrI2VuZGlmCisgCXJjID0gcnVuVHJpZ2dlcnMocHNtKTsKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwlpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICByYyA9IHJwbXBzbU5leHQocHNtLCBQU01fQ0hST09UX0lOKTsKKysjZW5kaWYKKyAJYnJlYWs7CisgICAgIGNhc2UgUFNNX0lNTUVEX1RSSUdHRVJTOgorIAkvKiBSdW4gdHJpZ2dlcnMgaW4gdGhpcyBwYWNrYWdlIG90aGVyIHBhY2thZ2Uocykgc2V0IG9mZi4gKi8KK0BAIC0zMDA2LDcgKzMwNjAsMTggQEAgYXNzZXJ0KHBzbS0+dGUgIT0gTlVMTCk7CisgCSAgICBGX1NFVChwc20sIEdPVFRSSUdHRVJTKTsKKyAJfQorIAlpZiAocHNtLT50cmlnZ2VycyAhPSBOVUxMKQorKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCXsKKysgICAgICAgICAgICBjb25zdCBjaGFyICogc2NyaXB0bGV0V3JhcHBlciA9IHJwbUV4cGFuZCgiJXs/X2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyfSIsIE5VTEwpOworKwkgICAgaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgICAgIHJjID0gcnBtcHNtTmV4dChwc20sIFBTTV9DSFJPT1RfT1VUKTsKKysjZW5kaWYKKyAJICAgIHJjID0gcnVuSW1tZWRUcmlnZ2Vycyhwc20pOworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCSAgICBpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICAgICAgcmMgPSBycG1wc21OZXh0KHBzbSwgUFNNX0NIUk9PVF9JTik7CisrCX0KKysjZW5kaWYKKyAJYnJlYWs7CisgCisgICAgIGNhc2UgUFNNX1JQTUlPX0ZMQUdTOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tc2hvd3JjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tc2hvd3JjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMzhiOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1zaG93cmMucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorV29ya2Fyb3VuZCBmb3IgYSBtZW1vcnkgbGVhayBpbiAtLXNob3dyYy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL3JwbXJjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3JwbXJjLmMKKysrKyBycG0tNS40LjE0L2xpYi9ycG1yYy5jCitAQCAtMTIyOCwxMSArMTIyOCwxNSBAQCBpbnQgcnBtU2hvd1JDKEZJTEUgKiBmcCkKKyAJCWlmIChETkVWUiAhPSBOVUxMKQorIAkJICAgIGZwcmludGYoZnAsICIgICAgJXNcbiIsIERORVZSKzIpOworIAkgICAgfQorKyNpZiAwCisgCSAgICAodm9pZClycG1kc0ZyZWUoZHMpOworIAkgICAgZHMgPSBOVUxMOworKyNlbmRpZgorIAkgICAgZnByaW50ZihmcCwgIlxuIik7CisgCX0KKysjaWYgMAorIAlQUkNPID0gcnBtZHNGcmVlUFJDTyhQUkNPKTsKKysjZW5kaWYKKyAgICAgfQorIAorICAgICBpZiAocnBtSXNWZXJib3NlKCkpIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXRhZy1nZW5lcmF0ZS1lbmRpYW4tY29udmVyc2lvbi1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS10YWctZ2VuZXJhdGUtZW5kaWFuLWNvbnZlcnNpb24tZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MzI3NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS10YWctZ2VuZXJhdGUtZW5kaWFuLWNvbnZlcnNpb24tZml4LnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK2ZpeCBhIGVuZGlhbiBpbmNvbXBhdGlibGUgZXJyb3IgaW4gZ2VuZXJhdGluZyBycG0gdGFnCisKK0EgZmxhdyB3YXMgZm91bmQgaW4gdGhlIHdheSBycG0gZ2VuZXJhdGluZyBhcmJpdHJhcnkgdGFncywgd2hpY2ggbGVhZHMgdG8gYQoraW5jb3JyZWN0IHF1ZXJ5IHJlc3VsdCwgdGhpcyBpc3N1ZSBpcyBpbnRyb2R1Y2VkIGJ5IGEgaW5jb21wYXRpYmxlIGVuZGlhbmVzcword2hlbiB0aGUgZ2VuZXJhdGluZyBwcm9jZXNzIGlzIGV4ZWN1dGVkIG9uIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLgorCitUaGlzIHBhdGNoIHJlc29sdmVzIGl0IGJ5IHRha2luZyB0aGUgYnl0ZSBvcmRlciB0aGF0IGhvc3QgdXNlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1pbmcgTGl1IDxtaW5nLmxpdUB3aW5kcml2ZXIuY29tPgorLS0tCisgdGFnbmFtZS5jIHwgICAxNiArKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKykKKworSW5kZXg6IHJwbS01LjQuMTQvcnBtZGIvdGFnbmFtZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWRiL3RhZ25hbWUuYworKysrIHJwbS01LjQuMTQvcnBtZGIvdGFnbmFtZS5jCitAQCAtMyw2ICszLDE5IEBACisgICovCisgCisgI2luY2x1ZGUgInN5c3RlbS5oIgorKyNpbmNsdWRlIDxlbmRpYW4uaD4KKysKKysvKiBEb24ndCByZWRlZmluZSB0aGlzIG1hY3JvIGlmIGl0IGFscmVhZHkgZXhpc3RzICovCisrI2lmbmRlZiBsZTMydG9oCisrI2lmZGVmIF9fVVNFX0JTRAorKyNpbmNsdWRlIDxieXRlc3dhcC5oPgorKyNpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCisrI2RlZmluZSBsZTMydG9oKHgpICh4KQorKyNlbHNlCisrI2RlZmluZSBsZTMydG9oKHgpIF9fYnN3YXBfMzIoeCkKKysjZW5kaWYKKysjZW5kaWYgLyogX19VU0VfQlNEICovCisrI2VuZGlmIC8qIGxlMzJ0b2ggKi8KKyAKKyAjaW5jbHVkZSA8cnBtaW9faW50ZXJuYWwuaD4JLyogWFhYIERJR0VTVF9DVFgsIHh0b2xvd2VyLCB4c3RyY2FzZWNtcCAqLworICNpbmNsdWRlIDxycG1tYWNyby5oPgorQEAgLTE1Miw3ICsxNjUsMTAgQEAgc3RhdGljIHJwbVRhZyBfdGFnR2VuZXJhdGUoY29uc3QgY2hhciAqcworICAgICB4eCA9IHJwbURpZ2VzdFVwZGF0ZShjdHgsIHMsIG5iKTsKKyAgICAgeHggPSBycG1EaWdlc3RGaW5hbChjdHgsICZkaWdlc3QsICZkaWdlc3RsZW4sIDApOworICAgICBpZiAoZGlnZXN0ICYmIGRpZ2VzdGxlbiA+IDQpIHsKKysJLyogVGhlIHRhZyBpcyBzdG9yZWQgaW4gYSB1bmlmb3JtIGJ5dGUgb3JkZXIgZm9yIGNyb3NzLWVuZGlhbiBjb21wYXRpYmlsaXR5LgorKwkgICBTd2FwIHRvIHRoZSBob3N0IHVzZXMuICovCisgCW1lbWNweSgmdGFnLCBkaWdlc3QgKyAoZGlnZXN0bGVuIC0gNCksIDQpOworKwl0YWcgPSBsZTMydG9oKHRhZyk7CisgCXRhZyA9IChycG1UYWcpICh0YWcgJiAweDNmZmZmZmZmKTsKKyAJdGFnID0gKHJwbVRhZykgKHRhZyB8IDB4NDAwMDAwMDApOworICAgICB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS10b29scy1tdHJlZS1MREZMQUdTLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tdG9vbHMtbXRyZWUtTERGTEFHUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjg1YmViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tdG9vbHMtbXRyZWUtTERGTEFHUy5wYXRjaApAQCAtMCwwICsxLDI0IEBACitTb3VyY2U6IE5vbmUKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworQXV0aG9yOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogMjAxMS0wMy0wMworRGVzY3JpcHRpb246CitUaGlzIHBhdGNoIGZpeGVzIGJ1aWxkIGlzc3VlIGZvdW5kIHdoZW4gY29tcGlsaW5nIHJwbS1uYXRpdmUgb24gdWJ1bnR1CisxMS4wNC1hbHBoYS4gUHJvYmxlbSBpcyB0aGF0IGxpbmtlciBkb2VzIG5vdCBnZXQgY29ycmVjdCBzZXQgb2YgZGVwZW5kZW50CitsaWJyYXJpZXMgd2hlbiBsaW5raW5nIG10cmVlIGJpbmFyeSB3aGljaCByZXN1bHRzIGluIHVuZGVmaW5lZCBzeW1ib2xzCitpbiBsaWJycG1pby5zby4gVGhpcyBwYXRjaCBhZGRzIGNvcnJlY3QgZmxhZ3MgdG8gbXRyZWVfTERBREQgdG8gYWNjb3VudAorZm9yIHJwbWlvIGRlcHMKKworSW5kZXg6IHJwbS01LjQuMTQvdG9vbHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvdG9vbHMvTWFrZWZpbGUuYW0KKysrKyBycG0tNS40LjE0L3Rvb2xzL01ha2VmaWxlLmFtCitAQCAtMTg2LDcgKzE4Niw3IEBAIGdyZXBfTERBREQgPQkJJChSUE1JT19MREFERF9DT01NT04pCisgCisgbXRyZWVfU09VUkNFUyA9CQlycG1tdHJlZS5jCisgbXRyZWVfTERGTEFHUyA9CQlATERGTEFHU19TVEFUSUNAICQoTERGTEFHUykKKy1tdHJlZV9MREFERCA9CQkkKFJQTV9MREFERF9DT01NT04pCisrbXRyZWVfTERBREQgPQkJJChSUE1JT19MREFERF9DT01NT04pCisgCisgcnBtcmVwb19TT1VSQ0VTID0JcnBtcmVwby5jCisgcnBtcmVwb19DUFBGTEFHUyA9CSQoQU1fQ1BQRkxBR1MpIC1JJCh0b3Bfc3JjZGlyKS9zY3JpcHRzIC1JJCh0b3BfYnVpbGRkaXIpL3NjcmlwdHMgJChDUFBGTEFHUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXV1aWQtaW5jbHVkZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXV1aWQtaW5jbHVkZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTNmODRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tdXVpZC1pbmNsdWRlLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0EgcGF0Y2ggdG8gZml4IGEgcHJvYmxlbSB3aGVuIGNvbXBpbGluZyB3aXRoIHV1aWQuCisKK1doZW4gYXR0ZW1wdGluZyB0byBidWlsZCB3aXRoIHV1aWQgYW5kIGFsbCB0ZXN0cyBjb21waWxpbmcgd2lsbCBlcnJvciBiZWNhdXNlCit1dWlkLmggZG9lc24ndCBleGlzdCBpbiB0aGUgcnBtIHRhcmJhbGwuIEZpeCB0aGlzIGJ5IGNoYW5naW5nIHRoZSBpbmNsdWRlIHRvCit1c2UgdGhlIG9uZSBpbiBvc3NwIHdoaWNoIHNvbHZlcyB0aGUgaXNzdWUuIAorCitUaGUgcmVjaXBlIGFscmVhZHkgZGVwZW5kcyBvbiBvc3NwIHNvIG9zc3AvdXVpZC5oIHdpbGwgYmUgdGhlcmUgd2hlbiBycG0tbmF0aXZlCitpcyBidWlsdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1vcmdhbiBMaXR0bGUgPG1vcmdhbi5saXR0bGVAd2luZHJpdmVyLmNvbT4KKworCitJbmRleDogcnBtLTUuNC4xNC9sdWEvbG9jYWwvbHV1aWQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9sdWEvbG9jYWwvbHV1aWQuYworKysrIHJwbS01LjQuMTQvbHVhL2xvY2FsL2x1dWlkLmMKK0BAIC0yMSw3ICsyMSw3IEBACisgCisgI2lmZGVmIExVQV9VU0VfVVVJRAorIAorLSNpbmNsdWRlICJ1dWlkLmgiCisrI2luY2x1ZGUgPG9zc3AvdXVpZC5oPgorIAorIC8qICBMdWEgbWV0aG9kOiA8dXVpZD4gPSB1dWlkLmdlbmVyYXRlKDx2ZXJzaW9uPlssIDx1dWlkLW5hbWVzcGFjZT4sIDxkYXRhPl0pICAqLworIHN0YXRpYyBpbnQgbHV1aWRfZ2VuZXJhdGUobHVhX1N0YXRlICpMKQorSW5kZXg6IHJwbS01LjQuMTQvcnBtaW8vcnBtdXVpZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWlvL3JwbXV1aWQuYworKysrIHJwbS01LjQuMTQvcnBtaW8vcnBtdXVpZC5jCitAQCAtMTYsNyArMTYsNyBAQAorICNpbmNsdWRlICJycG1sb2cuaCIKKyAjaW5jbHVkZSAicnBtdXVpZC5oIgorICNpZmRlZiBXSVRIX1VVSUQKKy0jaW5jbHVkZSAidXVpZC5oIgorKyNpbmNsdWRlIDxvc3NwL3V1aWQuaD4KKyAjZW5kaWYKKyAjaW5jbHVkZSAiZGVidWcuaCIKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtMmNwaW8gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbTJjcGlvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZiY2VmNmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbTJjcGlvCkBAIC0wLDAgKzEsMzkgQEAKKyMhL2Jpbi9zaAorCisjIFByZXZlbnQgZ2F3ayA+PSA0LjAueCBmcm9tIGdldHRpbmcgZnVubnkgaWRlYXMgd3J0IFVURiBpbiBwcmludGYoKQorTEFORz1DCisKK3BrZz0kMQoraWYgWyAiJHBrZyIgPSAiIiAtbyAhIC1lICIkcGtnIiBdOyB0aGVuCisgICAgZWNobyAibm8gcGFja2FnZSBzdXBwbGllZCIgMT4mMgorICAgZXhpdCAxCitmaQorCitsZWFkc2l6ZT05Ngorbz1gZXhwciAkbGVhZHNpemUgKyA4YAorc2V0IGBvZCAtaiAkbyAtTiA4IC10IHUxICRwa2dgCitpbD1gZXhwciAyNTYgXCogXCggMjU2IFwqIFwoIDI1NiBcKiAkMiArICQzIFwpICsgJDQgXCkgKyAkNWAKK2RsPWBleHByIDI1NiBcKiBcKCAyNTYgXCogXCggMjU2IFwqICQ2ICsgJDcgXCkgKyAkOCBcKSArICQ5YAorIyBlY2hvICJzaWcgaWw6ICRpbCBkbDogJGRsIgorCitzaWdzaXplPWBleHByIDggKyAxNiBcKiAkaWwgKyAkZGxgCitvPWBleHByICRvICsgJHNpZ3NpemUgKyBcKCA4IC0gXCggJHNpZ3NpemUgXCUgOCBcKSBcKSBcJSA4ICsgOGAKK3NldCBgb2QgLWogJG8gLU4gOCAtdCB1MSAkcGtnYAoraWw9YGV4cHIgMjU2IFwqIFwoIDI1NiBcKiBcKCAyNTYgXCogJDIgKyAkMyBcKSArICQ0IFwpICsgJDVgCitkbD1gZXhwciAyNTYgXCogXCggMjU2IFwqIFwoIDI1NiBcKiAkNiArICQ3IFwpICsgJDggXCkgKyAkOWAKKyMgZWNobyAiaGRyIGlsOiAkaWwgZGw6ICRkbCIKKworaGRyc2l6ZT1gZXhwciA4ICsgMTYgXCogJGlsICsgJGRsYAorbz1gZXhwciAkbyArICRoZHJzaXplYAorY29tcD1gZGQgaWY9JHBrZyBpYnM9JG8gc2tpcD0xIGNvdW50PTEgMj4vZGV2L251bGwgfCBkZCBicz0zIGNvdW50PTEgMj4gL2Rldi9udWxsYAorCitnej0iYGVjaG8gLiB8IGF3ayAneyBwcmludGYoIiVjJWMiLCAweDFmLCAweDhiKTsgfSdgIgorbHptYT0iYGVjaG8gLiB8IGF3ayAneyBwcmludGYoIiVjTFoiLCAweGZmKTsgfSdgIgoreHo9ImBlY2hvIC4gfCBhd2sgJ3sgcHJpbnRmKCIlYzd6IiwgMHhmZCk7IH0nYCIKK2Nhc2UgIiRjb21wIiBpbgorICAgIEJaaCkgICAgICBkZCBpZj0iJHBrZyIgaWJzPSRvIHNraXA9MSAyPi9kZXYvbnVsbCB8IGJ1bnppcDIgOzsKKyAgICAiJGd6IiopICAgZGQgaWY9IiRwa2ciIGlicz0kbyBza2lwPTEgMj4vZGV2L251bGwgfCBndW56aXAgOzsKKyAgICAiJHh6IiopICAgZGQgaWY9IiRwa2ciIGlicz0kbyBza2lwPTEgMj4vZGV2L251bGwgfCB4emNhdCA7OworICAgICIkbHptYSIqKSBkZCBpZj0iJHBrZyIgaWJzPSRvIHNraXA9MSAyPi9kZXYvbnVsbCB8IHVubHptYSA7OworICAgICopICAgICAgICBlY2hvICJVbnJlY29nbml6ZWQgcnBtIGZpbGU6ICRwa2ciOyBleGl0IDEgOzsKK2VzYWMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtYXRjaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtYXRjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGQxM2FhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1hdGNoLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0FkZCBjb25maWd1cmUgY2hlY2sgZm9yIHJwbWF0Y2goKSBhbmQgCitjcmVhdGVzIGEgY29tcGF0YWJsZSBtYWNybyBpZiBpdCBpcyBub3QgcHJvdmlkZWQgYnkgdGhlIEMgbGlicmFyeS4KKworVGhpcyBpcyBuZWVkZWQgZm9yIHVjbGliYyBzaW5jZSBpdCBkb2VzIG5vdCBoYXZlIHRoZSBhYm92ZSBmdW5jdGlvbgoraW1wbGVtZW50ZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgcnBtLTUuNC4xNC9jb25maWd1cmUuYWMKK0BAIC05NDMsNyArOTQzLDcgQEAgQUNfQ0hFQ0tfRlVOQ1MoW2RubAorICAgICBmdG9rIGdldGFkZHJpbmZvIGdldGF0dHJsaXN0IGdldGN3ZCBnZXRkZWxpbSBnZXRsaW5lIGdldG1vZGUgZ2V0bmFtZWluZm8gZG5sCisgICAgIGdldHBhc3NwaHJhc2UgZ2V0eGF0dHIgZ2V0d2QgaWNvbnYgaW5ldF9hdG9uIGxjaGZsYWdzIGxjaG1vZCBsY2hvd24gZG5sCisgICAgIGxnZXR4YXR0ciBsc2V0eGF0dHIgbHV0aW1lcyBtYWR2aXNlIG1lbXBjcHkgbWtkdGVtcCBta3N0ZW1wIG10cmFjZSBkbmwKKy0gICAgcG9zaXhfZmFkdmlzZSBwb3NpeF9mYWxsb2NhdGUgcHV0ZW52IHJlYWxwYXRoIHJlZ2NvbXAgc2VjdXJlX2dldGVudiBfX3NlY3VyZV9nZXRlbnYgZG5sCisrICAgIHBvc2l4X2ZhZHZpc2UgcG9zaXhfZmFsbG9jYXRlIHB1dGVudiByZWFscGF0aCByZWdjb21wIHJwbWF0Y2ggc2VjdXJlX2dldGVudiBfX3NlY3VyZV9nZXRlbnYgZG5sCisgICAgIHNldGF0dHJsaXN0IHNldGVudiBzZXRsb2NhbGUgc2V0bW9kZSBzZXR4YXR0ciBkbmwKKyAgICAgc2lnYWRkc2V0IHNpZ2RlbHNldCBzaWdlbXB0eXNldCBzaWdob2xkIHNpZ3JlbHNlIHNpZ3BhdXNlIGRubAorICAgICBzaWdwcm9jbWFzayBzaWdzdXNwZW5kIHNpZ2FjdGlvbiBkbmwKK0luZGV4OiBycG0tNS40LjE0L3N5c3RlbS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3N5c3RlbS5oCisrKysgcnBtLTUuNC4xNC9zeXN0ZW0uaAorQEAgLTM1Myw2ICszNTMsMTQgQEAgZXh0ZXJuIGludCBfdG9sb3dlcihpbnQpIF9fVEhST1cJLypAKi87CisgI2luY2x1ZGUgPGxpYmdlbi5oPgorICNlbmRpZgorIAorKyNpZm5kZWYgSEFWRV9SUE1BVENICisrI2RlZmluZSBycG1hdGNoKGxpbmUpIFwKKysJKCAobGluZSA9PSBOVUxMKT8gLTEgOiBcCisrCSAgKCpsaW5lID09ICd5JyB8fCAqbGluZSA9PSAnWScpPyAxIDogXAorKwkgICgqbGluZSA9PSAnbicgfHwgKmxpbmUgPT0gJ04nKT8gMCA6IFwKKysJICAtMSApCisrI2VuZGlmCisrCisgLyogLS0gUmV0cm9maXQgZ2xpYmMgX19wcm9nbmFtZSAqLworICNpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBfX0dMSUJDX18gPj0gMgorICNpZiBfX0dMSUJDX01JTk9SX18gPj0gMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1kZXBzLW9lY29yZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtZGVwcy1vZWNvcmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkZDFkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtZGVwcy1vZWNvcmUucGF0Y2gKQEAgLTAsMCArMSwxOTQgQEAKK0FkZCBhbiAicnBtZGVwcy1vZWNvcmUiIGJpbmFyeSB3aGljaCBhbGxvd3MgYmF0Y2ggcHJvY2Vzc2luZyBvZiBpbmRpdmlkdWFsIGZpbGUKK2RlcGVuZGVuY2llcyBpbiBhIHNpbWlsYXIgbWFubmVyIHRvIHJwbWRlcHMgLS1wcm92aWRlcyAtLXJlcXVpcmVzIC12LCBwcmVmaXhpbmcKK2VhY2ggbGluZSBvZiBvdXRwdXQgd2l0aCB0aGUgZmlsZW5hbWUgdGhhdCBoYXMgdGhlIGRlcGVuZGVuY3kuCisKK1RoaXMgaXMgbXVjaCBmYXN0ZXIgdGhhbiBpbmRpdmlkdWFsbHkgY2FsbGluZyBycG1kZXBzIG9uIGVhY2ggZmlsZS4KKworVGhpcyBiaW5hcnkgaXMgdXNlZCBieSBwYWNrYWdlLmJiY2xhc3MuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgU3BlY2lmaWNdCisKK1JQIDIwMTIvMi83CisKKy0tLQorIHRvb2xzL01ha2VmaWxlLmFtICAgICAgfCAgICA2ICsrLQorIHRvb2xzL3JwbWRlcHMtb2Vjb3JlLmMgfCAgMTQ3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTUyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3JwbWRlcHMtb2Vjb3JlLmMKKworSW5kZXg6IHJwbS01LjQuMTQvdG9vbHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvdG9vbHMvTWFrZWZpbGUuYW0KKysrKyBycG0tNS40LjE0L3Rvb2xzL01ha2VmaWxlLmFtCitAQCAtNjIsNyArNjIsNyBAQCBwa2diaW5fUFJPR1JBTVMgPQlcCisgCUBXSVRIX0FVR0VBU19BVUdUT09MQCBjaHJvb3QgY3AgQFdJVEhfQ1VERl9DVURGVE9PTEAgZmluZCBtdHJlZSBcCisgCUBXSVRIX1NFTUFOQUdFX1NFTU9EVUxFQCB3Z2V0IFwKKyAJcnBtY2FjaGUgcnBtZGlnZXN0IHJwbXJlcG8gcnBtc3BlY2R1bXAgXAorLQlycG1jbXAgcnBtZGVwcyBzcWxpdGUzIEBXSVRIX0tFWVVUSUxTX1JQTUtFWUAgQFdJVEhfTElCRUxGX0RFQlVHRURJVEAKKysJcnBtY21wIHJwbWRlcHMgcnBtZGVwcy1vZWNvcmUgc3FsaXRlMyBAV0lUSF9LRVlVVElMU19SUE1LRVlAIEBXSVRIX0xJQkVMRl9ERUJVR0VESVRACisgaWYgV0lUSF9EQgorIHBrZ2Jpbl9QUk9HUkFNUyArPQlkYmNvbnZlcnQKKyBlbmRpZgorQEAgLTE3Miw2ICsxNzIsMTAgQEAgcnBtZGVwc19TT1VSQ0VTID0JcnBtZGVwcy5jCisgcnBtZGVwc19MREZMQUdTID0JQExERkxBR1NfU1RBVElDQCAkKExERkxBR1MpCisgcnBtZGVwc19MREFERCA9CQkkKFJQTV9MREFERF9DT01NT04pCisgCisrcnBtZGVwc19vZWNvcmVfU09VUkNFUyA9ICBycG1kZXBzLW9lY29yZS5jCisrcnBtZGVwc19vZWNvcmVfTERGTEFHUyA9ICBATERGTEFHU19TVEFUSUNAICQoTERGTEFHUykKKytycG1kZXBzX29lY29yZV9MREFERCA9ICAgICQoUlBNX0xEQUREX0NPTU1PTikKKysKKyBycG1kaWdlc3RfU09VUkNFUyA9CXJwbWRpZ2VzdC5jCisgcnBtZGlnZXN0X0xERkxBR1MgPQlATERGTEFHU19TVEFUSUNAICQoTERGTEFHUykKKyBycG1kaWdlc3RfTERBREQgPQkkKFJQTUlPX0xEQUREX0NPTU1PTikKK0luZGV4OiBycG0tNS40LjE0L3Rvb2xzL3JwbWRlcHMtb2Vjb3JlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBycG0tNS40LjE0L3Rvb2xzL3JwbWRlcHMtb2Vjb3JlLmMKK0BAIC0wLDAgKzEsMTQ3IEBACisrI2luY2x1ZGUgInN5c3RlbS5oIgorK2NvbnN0IGNoYXIgKl9fcHJvZ25hbWU7CisrCisrI2luY2x1ZGUgPHJwbWlvLmg+CisrI2luY2x1ZGUgPHJwbWlvdHlwZXMuaD4KKysjaW5jbHVkZSA8cnBtY2IuaD4KKysjaW5jbHVkZSA8YXJndi5oPgorKyNpbmNsdWRlIDxycG10eXBlcy5oPgorKyNpbmNsdWRlIDxycG10YWcuaD4KKysKKysjaW5jbHVkZSA8cnBtZHMuaD4KKysjZGVmaW5lICAgX1JQTUZDX0lOVEVSTkFMICAgICAvKiBYWFggZm9yIGRlYnVnZ2luZyAqLworKyNpbmNsdWRlIDxycG1mYy5oPgorKworKyNpbmNsdWRlIDxycG1jbGkuaD4KKysKKysjaW5jbHVkZSAiZGVidWcuaCIKKysKKysvKkB1bmNoZWNrZWRAKi8KKytjaGFyICpwcm9nbmFtZTsKKysKKysjZGVmaW5lICAgUlBNREVQX1JQTUZDICAgICAgICAxCisrCisrc3RhdGljIGludCBycG1kZXBQcmludChjaGFyICpmaWxlbmFtZSwgcnBtZHMgZHMsIEZJTEUgKiBmcCkKKyt7CisrICAgIGlmIChmcCA9PSBOVUxMKSBmcCA9IHN0ZGVycjsKKysKKysgICAgZHMgPSBycG1kc0luaXQoZHMpOworKyAgICB3aGlsZSAocnBtZHNOZXh0KGRzKSA+PSAwKSB7CisrICBmcHJpbnRmKGZwLCAiJXMgJXM6ICVzXG4iLCBmaWxlbmFtZSwgcnBtZHNUeXBlKGRzKSwgcnBtZHNETkVWUihkcykrMik7CisrICAgIH0KKysgICAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBzdHJ1Y3QgcG9wdE9wdGlvbiBvcHRpb25zVGFibGVbXSA9IHsKKysKKysgeyBOVUxMLCAnXDAnLCBQT1BUX0FSR19JTkNMVURFX1RBQkxFLCBycG1jbGlBbGxQb3B0VGFibGUsIDAsCisrICBOXygiQ29tbW9uIG9wdGlvbnM6IiksCisrICBOVUxMIH0sIAorKworKyAgIFBPUFRfQVVUT0FMSUFTCisrICAgUE9QVF9BVVRPSEVMUAorKyAgIFBPUFRfVEFCTEVFTkQKKyt9OworKworKworK2ludAorK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHBvcHRDb250ZXh0IG9wdENvbjsKKysgICAgQVJHVl90IGF2ID0gTlVMTDsKKysgICAgcnBtZmMgZmMgPSBOVUxMOworKyAgICBGSUxFICogZnAgPSBOVUxMOworKyAgICBpbnQgZmxhZ3MgPSAwOworKyAgICBpbnQgYWMgPSAwOworKyAgICBpbnQgZWMgPSAxOworKyAgICBpbnQgeHg7CisrICAgIGludCBpOworKyAgICBjaGFyIGJ1ZltCVUZTSVpdOworKyAgICBpbnQgbmRkaWN0OworKyAgICBjb25zdCBjaGFyICogczsKKysgICAgY2hhciAqIHNlOworKyAgICBjb25zdCBjaGFyICogZm47CisrICAgIGNvbnN0IGNoYXIgKiBOOworKyAgICBjb25zdCBjaGFyICogRVZSOworKyAgICBldnJGbGFncyBGbGFnczsKKysgICAgdW5zaWduZWQgY2hhciBkZXB0eXBlOworKyAgICBpbnQgaXg7CisrICAgIHJwbWRzIGRzOworKworKy8qQC1tb2RvYnNlcnZlckAqLworKyAgICBpZiAoKHByb2duYW1lID0gc3RycmNocihhcmd2WzBdLCAnLycpKSAhPSBOVUxMKQorKyAgcHJvZ25hbWUrKzsKKysgICAgZWxzZQorKyAgcHJvZ25hbWUgPSBhcmd2WzBdOworKy8qQD1tb2RvYnNlcnZlckAqLworKworKyAgICBvcHRDb24gPSBycG1jbGlJbml0KGFyZ2MsIGFyZ3YsIG9wdGlvbnNUYWJsZSk7CisrICAgIGlmIChvcHRDb24gPT0gTlVMTCkKKysgIGdvdG8gZXhpdDsKKysKKysgICAgYXYgPSBwb3B0R2V0QXJncyhvcHRDb24pOworKyAgICBhYyA9IGFyZ3ZDb3VudChhdik7CisrCisrICAgIGlmIChhYyA9PSAwKSB7CisrICBhdiA9IE5VTEw7CisrICB4eCA9IGFyZ3ZGZ2V0cygmYXYsIE5VTEwpOworKyAgYWMgPSBhcmd2Q291bnQoYXYpOworKyAgICB9CisrCisrICAgIC8qIE1ha2Ugc3VyZSBmaWxlIG5hbWVzIGFyZSBzb3J0ZWQuICovCisrICAgIHh4ID0gYXJndlNvcnQoYXYsIE5VTEwpOworKworKyAgICAvKiBCdWlsZCBmaWxlIGNsYXNzIGRpY3Rpb25hcnkuICovCisrICAgIGZjID0gcnBtZmNOZXcoKTsKKysgICAgeHggPSBycG1mY0NsYXNzaWZ5KGZjLCBhdiwgTlVMTCk7CisrCisrICAgIC8qIEJ1aWxkIGZpbGUvcGFja2FnZSBkZXBlbmRlbmN5IGRpY3Rpb25hcnkuICovCisrICAgIHh4ID0gcnBtZmNBcHBseShmYyk7CisrCisrICAgIC8qIEdlbmVyYXRlIHBlci1maWxlIGluZGljZXMgaW50byBwYWNrYWdlIGRlcGVuZGVuY2llcy4gKi8KKysgICAgbmRkaWN0ID0gYXJndkNvdW50KGZjLT5kZGljdCk7CisrCisrICAgIGZvciAoaSA9IDA7IGkgPCBuZGRpY3Q7IGkrKykgeworKyAgcyA9IGZjLT5kZGljdFtpXTsKKysKKysgIC8qIFBhcnNlIG91dCAoZmlsZSMsZGVwdHlwZSxOLEVWUixGbGFncykgKi8KKysgIGl4ID0gc3RydG9sKHMsICZzZSwgMTApOworKyAgYXNzZXJ0KHNlICE9IE5VTEwpOworKyAgZGVwdHlwZSA9ICpzZSsrOworKyAgc2UrKzsKKysgIE4gPSBzZTsKKysgIHdoaWxlICgqc2UgJiYgKnNlICE9ICcgJykKKysgICAgICBzZSsrOworKyAgKnNlKysgPSAnXDAnOworKyAgRVZSID0gc2U7CisrICB3aGlsZSAoKnNlICYmICpzZSAhPSAnICcpCisrICAgICAgc2UrKzsKKysgICpzZSsrID0gJ1wwJzsKKysgIEZsYWdzID0gc3RydG9sKHNlLCBOVUxMLCAxNik7CisrCisrICBzd2l0Y2ggKGRlcHR5cGUpIHsKKysgIGRlZmF1bHQ6CisrICAgICAgLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisrICBjYXNlICdQJzogICAKKysgICAgICBkcyA9IHJwbWRzU2luZ2xlKFJQTVRBR19QUk9WSURFTkFNRSwgTiwgRVZSLCBGbGFncyk7CisrICAgICAgcnBtZGVwUHJpbnQoKGNoYXIgKilmYy0+Zm5baXhdLCBkcywgc3Rkb3V0KTsKKysgICAgICAodm9pZClycG1kc0ZyZWUoZHMpOworKyAgICAgIGRzID0gTlVMTDsKKysgICAgICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKysgIGNhc2UgJ1InOgorKyAgICAgIGRzID0gcnBtZHNTaW5nbGUoUlBNVEFHX1JFUVVJUkVOQU1FLCBOLCBFVlIsIEZsYWdzKTsKKysgICAgICBycG1kZXBQcmludCgoY2hhciAqKWZjLT5mbltpeF0sIGRzLCBzdGRvdXQpOworKyAgICAgICh2b2lkKXJwbWRzRnJlZShkcyk7CisrICAgICAgZHMgPSBOVUxMOworKyAgICAgIC8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworKyAgfQorKyAgICB9CisrCisrICAgIGZjID0gcnBtZmNGcmVlKGZjKTsKKysKKysgICAgZWMgPSAwOworKworK2V4aXQ6CisrICAgIG9wdENvbiA9IHJwbWNsaUZpbmkob3B0Q29uKTsKKysgICAgcmV0dXJuIGVjOworK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtcXZfY2NfYl9nb25lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1xdl9jY19iX2dvbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA4YmQ2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtcXZfY2NfYl9nb25lLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK3JwbTogY29tcGlsZSBycG1xdi5jIGluc3RlYWQgb2YgcnBtcXYuY2MKKworU29tZSB2ZXJzaW9ucyBvZiBnY2MsIDQuNC41IGZvciBleGFtcGxlLCB3aWxsIHB1dCBhIHJlZmVyZW5jZSB0byBfX2d4eF9wZXJzb25hbGl0eV92MAoraW50byBycG0ubyBhbmQgcnBtYnVpbGQuby4gIFRoaXMgbWVhbnMgd2UgbXVzdCBsaW5rIHdpdGggZysrLCBhbmQgdGhlIE1ha2VmaWxlIHdlCitnZW5lcmF0ZSBkb2VzIG5vdC4KKworU28sIGdvIGJhY2sgdG8gdXNpbmcgcnBtcXYuYyAod2hpY2ggaXMgY3VycmVudGx5IGlkZW50aWNhbCB0byBycG1xdi5jYykuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCisKKyAgIFdoZW4gbGlua2luZyB3aXRoIGcrKyBpcyByZWFsbHkgbmVjZXNzYXJ5LCB0aGUgdXBzdHJlYW0gcGFja2FnZSB3aWxsIGRvIHRoYXQuCisKK1NpZ25lZC1vZmYtYnk6IEpvZSBTbGF0ZXIgPGpvZS5zbGF0ZXJAd2luZHJpdmVyLmNvbT4KKworLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMTI3LDEzICsxMjcsMTMgQEAgcnBtX1NPVVJDRVMgPQkJYnVpbGQuYworIHJwbV9MREZMQUdTID0JCUBMREZMQUdTX1NUQVRJQ0AgJChMREZMQUdTKQorIHJwbV9MREFERCA9CQlycG0ubyAkKG15TERBREQpCisgcnBtLm86CSQodG9wX3NyY2RpcikvcnBtcXYuYworLQkkKENPTVBJTEUpIC1ESUFNX1JQTUJUIC1ESUFNX1JQTURCIC1ESUFNX1JQTUVJVSAtRElBTV9SUE1LIC1ESUFNX1JQTVFWIC1vICRAIC1jICQodG9wX3NyY2RpcikvcnBtcXYuY2MKKysJJChDT01QSUxFKSAtRElBTV9SUE1CVCAtRElBTV9SUE1EQiAtRElBTV9SUE1FSVUgLURJQU1fUlBNSyAtRElBTV9SUE1RViAtbyAkQCAtYyAkKHRvcF9zcmNkaXIpL3JwbXF2LmMKKyAKKyBycG1idWlsZF9TT1VSQ0VTID0JYnVpbGQuYworIHJwbWJ1aWxkX0xERkxBR1MgPQlATERGTEFHU19TVEFUSUNAICQoTERGTEFHUykKKyBycG1idWlsZF9MREFERCA9CXJwbWJ1aWxkLm8gJChteUxEQUREKQorIHJwbWJ1aWxkLm86ICQodG9wX3NyY2RpcikvcnBtcXYuYworLQkkKENPTVBJTEUpIC1ESUFNX1JQTUJUIC1vICRAIC1jICQodG9wX3NyY2RpcikvcnBtcXYuY2MKKysJJChDT01QSUxFKSAtRElBTV9SUE1CVCAtbyAkQCAtYyAkKHRvcF9zcmNkaXIpL3JwbXF2LmMKKyAKKyAuUEhPTlk6CXNwbGludAorIHNwbGludDoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vdWNsaWJjLXN1cHBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3VjbGliYy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NzBhZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3VjbGliYy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK0RlZmluZSB0aGUgeCogd3JhcHBlcnMgZm9yIHVjbGliYyBhcyB3ZWxsCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9ycG1pby9ycG1pby5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWlvL3JwbWlvLmgKKysrKyBycG0tNS40LjE0L3JwbWlvL3JwbWlvLmgKK0BAIC0yMyw3ICsyMyw4IEBACisgICovCisgLypAeyovCisgI2lmICFkZWZpbmVkKF9fTENMSU5UX18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pICYmIGRlZmluZWQoX19HTElCQ19fKSAmJiBcCistCShfX0dMSUJDX18gPiAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMikpCisrCShfX0dMSUJDX18gPiAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMikpICYmIFwKKysJIWRlZmluZWQoX19VQ0xJQkNfXykKKyAjZGVmaW5lIFVTRV9DT09LSUVfU0VFS19QT0lOVEVSIDEKKyB0eXBlZGVmIF9JT19vZmY2NF90IAlfbGliaW9fb2ZmX3Q7CisgdHlwZWRlZiBfbGliaW9fb2ZmX3QgKglfbGliaW9fcG9zX3Q7CitJbmRleDogcnBtLTUuNC4xNC9zeXN0ZW0uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9zeXN0ZW0uaAorKysrIHJwbS01LjQuMTQvc3lzdGVtLmgKK0BAIC00ODEsNyArNDgxLDcgQEAgZXh0ZXJuIHZvaWQgbXVudHJhY2UgKHZvaWQpCisgI2VuZGlmIC8qIGRlZmluZWQoX19MQ0xJTlRfXykgKi8KKyAKKyAvKiBNZW1vcnkgYWxsb2NhdGlvbiB2aWEgbWFjcm8gZGVmcyB0byBnZXQgbWVhbmluZ2Z1bCBsb2NhdGlvbnMgZnJvbSBtdHJhY2UoKSAqLworLSNpZiBkZWZpbmVkKF9fR05VQ19fKQorKyNpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fVUNMSUJDX18pCisgI2RlZmluZQl4bWFsbG9jKF9zaXplKSAJCShtYWxsb2MoX3NpemUpID8gOiB2bWVmYWlsKF9zaXplKSkKKyAjZGVmaW5lCXhjYWxsb2MoX25tZW1iLCBfc2l6ZSkJKGNhbGxvYygoX25tZW1iKSwgKF9zaXplKSkgPyA6IHZtZWZhaWwoX3NpemUpKQorICNkZWZpbmUJeHJlYWxsb2MoX3B0ciwgX3NpemUpCShyZWFsbG9jKChfcHRyKSwgKF9zaXplKSkgPyA6IHZtZWZhaWwoX3NpemUpKQorSW5kZXg6IHJwbS01LjQuMTQvbGliL2xpYnJwbS52ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9saWJycG0udmVycworKysrIHJwbS01LjQuMTQvbGliL2xpYnJwbS52ZXJzCitAQCAtNDA1LDYgKzQwNSwxMCBAQCBMSUJSUE1fMAorICAgICBzcGVjZWRpdDsKKyAgICAgc3RyaWN0X2VyYXN1cmVzOworICAgICBYcnBtdHNpSW5pdDsKKysgICAgeG1hbGxvYzsKKysgICAgeHJlYWxsb2M7CisrICAgIHhjYWxsb2M7CisrICAgIHhzdHJkdXA7CisgICBsb2NhbDoKKyAgICAgKjsKKyB9OworSW5kZXg6IHJwbS01LjQuMTQvcnBtaW8vbGlicnBtaW8udmVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1pby9saWJycG1pby52ZXJzCisrKysgcnBtLTUuNC4xNC9ycG1pby9saWJycG1pby52ZXJzCitAQCAtMTA1Niw2ICsxMDU2LDEwIEBAIExJQlJQTUlPXzAKKyAgICAgbW9uZ29fd3JpdGVfY29uY2Vybl9zZXRfbW9kZTsKKyAgICAgbW9uZ29fd3JpdGVfY29uY2Vybl9zZXRfdzsKKyAgICAgbW9uZ29fd3JpdGVfY29uY2Vybl9zZXRfd3RpbWVvdXQ7CisrICAgIHhtYWxsb2M7CisrICAgIHhyZWFsbG9jOworKyAgICB4Y2FsbG9jOworKyAgICB4c3RyZHVwOworICAgbG9jYWw6CisgICAgICo7CisgfTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vdmVyaWZ5LWZpeC1icm9rZW4tbG9naWMtZm9yLWdob3N0LWF2b2lkYW5jZS1NYXJrLUhhdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vdmVyaWZ5LWZpeC1icm9rZW4tbG9naWMtZm9yLWdob3N0LWF2b2lkYW5jZS1NYXJrLUhhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTA0NWFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS92ZXJpZnktZml4LWJyb2tlbi1sb2dpYy1mb3ItZ2hvc3QtYXZvaWRhbmNlLU1hcmstSGF0LnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gOWU3YjcyZWUwYzk5NDYwOTk3NTk4MWUxMzVmYzE4ZDAzODdhZWZiNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IGpiaiA8amJqPgorRGF0ZTogV2VkLCAxNCBNYXkgMjAxNCAyMToxOTo0MSArMDAwMAorU3ViamVjdDogW1BBVENIXSAtIHZlcmlmeTogZml4OiBicm9rZW4gbG9naWMgZm9yICVnaG9zdCBhdm9pZGFuY2UgKE1hcmsKKyBIYXRsZSkuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorLS0tCisgQ0hBTkdFUyAgICAgIHwgMSArCisgbGliL3ZlcmlmeS5jIHwgMyArLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IHJwbS01LjQuMTQvQ0hBTkdFUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9DSEFOR0VTCisrKysgcnBtLTUuNC4xNC9DSEFOR0VTCitAQCAtMSwzICsxLDUgQEAKKysgICAgLSBqYmo6IHZlcmlmeTogZml4OiBicm9rZW4gbG9naWMgZm9yICVnaG9zdCBhdm9pZGFuY2UgKE1hcmsgSGF0bGUpLgorKworIDUuNC4xMyAtPiA1LjQuMTQ6CisgICAgIC0gbW9vbmV5OiB1c2UgX19zdW4gaW5zdGVhZCBvZiBfX3N1bl9fIGluICNkZWZpbmUgKGxwIzEyNDM0NzIpLgorICAgICAtIG1vb25leTogcnBtY29uc3RhbnQ6IGVuc3VyZSBsaW5rYWdlIHcgT3JhY2xlIFN0dWRpbyAxMi4zIChscCMxMjQzNDY5KS4KK0luZGV4OiBycG0tNS40LjE0L2xpYi92ZXJpZnkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvdmVyaWZ5LmMKKysrKyBycG0tNS40LjE0L2xpYi92ZXJpZnkuYworQEAgLTU4OCw4ICs1ODgsNyBAQCB1aW50MzJfdCBmYyA9IHJwbWZpRkMoZmkpOworIAkgICAgY29udGludWU7CisgCisgCS8qIElmIG5vdCB2ZXJpZnlpbmcgJWdob3N0LCBza2lwIGdob3N0IGZpbGVzLiAqLworLQkvKiBYWFggdGhlIGJyb2tlbiEhISBsb2dpYyBkaXNhYmxlcyAlZ2hvc3QgcXVlcmllcyBhbHdheXMuICovCistCWlmICghKEZGX0lTU0VUKHF2YS0+cXZhX2ZmbGFncywgR0hPU1QpICYmIEZGX0lTU0VUKGZmbGFncywgR0hPU1QpKSkKKysJaWYgKCFGRl9JU1NFVChxdmEtPnF2YV9mZmxhZ3MsIEdIT1NUKSAmJiBGRl9JU1NFVChmZmxhZ3MsIEdIT1NUKSkKKyAJICAgIGNvbnRpbnVlOworIAorIAkvKiBHYXRoZXIgcGVyLWZpbGUgZGF0YSBpbnRvIGEgY2Fycmllci4gKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNC4xMS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV80LjExLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEwYzk0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNC4xMS4yLmJiCkBAIC0wLDAgKzEsMTM3IEBACitTVU1NQVJZID0gIlRoZSBSUE0gcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbSIKK0RFU0NSSVBUSU9OID0gIlRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIChSUE0pIGlzIGEgcG93ZXJmdWwgY29tbWFuZCBsaW5lIGRyaXZlbiBcCitwYWNrYWdlIG1hbmFnZW1lbnQgc3lzdGVtIGNhcGFibGUgb2YgaW5zdGFsbGluZywgdW5pbnN0YWxsaW5nLCBcCit2ZXJpZnlpbmcsIHF1ZXJ5aW5nLCBhbmQgdXBkYXRpbmcgc29mdHdhcmUgcGFja2FnZXMuIEVhY2ggc29mdHdhcmUgXAorcGFja2FnZSBjb25zaXN0cyBvZiBhbiBhcmNoaXZlIG9mIGZpbGVzIGFsb25nIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgXAordGhlIHBhY2thZ2UgbGlrZSBpdHMgdmVyc2lvbiwgYSBkZXNjcmlwdGlvbiwgZXRjLiIKKworU1VNTUFSWV8ke1BOfS1kZXYgPSAiRGV2ZWxvcG1lbnQgZmlsZXMgZm9yIG1hbmlwdWxhdGluZyBSUE0gcGFja2FnZXMiCitERVNDUklQVElPTl8ke1BOfS1kZXYgPSAiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBSUE0gQyBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMuIFRoZXNlIFwKK2RldmVsb3BtZW50IGZpbGVzIHdpbGwgc2ltcGxpZnkgdGhlIHByb2Nlc3Mgb2Ygd3JpdGluZyBwcm9ncmFtcyB0aGF0IFwKK21hbmlwdWxhdGUgUlBNIHBhY2thZ2VzIGFuZCBkYXRhYmFzZXMuIFRoZXNlIGZpbGVzIGFyZSBpbnRlbmRlZCB0byBcCitzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBncmFwaGljYWwgcGFja2FnZSBtYW5hZ2VycyBvciBhbnkgXAorb3RoZXIgdG9vbHMgdGhhdCBuZWVkIGFuIGludGltYXRlIGtub3dsZWRnZSBvZiBSUE0gcGFja2FnZXMgaW4gb3JkZXIgXAordG8gZnVuY3Rpb24uIgorCitTVU1NQVJZX3B5dGhvbi1ycG0gPSAiUHl0aG9uIGJpbmRpbmdzIGZvciBhcHBzIHdoaWNoIHdpbGwgbWFudXB1bGF0ZSBSUE0gcGFja2FnZXMiCitERVNDUklQVElPTl9weXRob24tcnBtID0gIlRoZSBycG0tcHl0aG9uIHBhY2thZ2UgY29udGFpbnMgYSBtb2R1bGUgdGhhdCBwZXJtaXRzIGFwcGxpY2F0aW9ucyBcCit3cml0dGVuIGluIHRoZSBQeXRob24gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdG8gdXNlIHRoZSBpbnRlcmZhY2UgXAorc3VwcGxpZWQgYnkgdGhlIFJQTSBQYWNrYWdlIE1hbmFnZXIgbGlicmFyaWVzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ycG0ub3JnIgorTElDRU5TRSA9ICJHUEwtMi4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPz89ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L0dQTC0yLjA7bWQ1PTgwMWY4MDk4MGQxNzFkZDY0MjU2MTA4MzNhMjJkYmU2IgorCitERVBFTkRTID0gImRiIGxpYnhtbDIgeHogZmluZHV0aWxzIGZpbGUgcG9wdCBuc3MgYnppcDIgZWxmdXRpbHMgcGF0Y2ggYXR0ciB6bGliIGFjbCBnemlwIG1ha2UgYmludXRpbHMgcHl0aG9uIgorCitTUkNfVVJJICs9ICJodHRwOi8vcnBtLm9yZy9yZWxlYXNlcy9ycG0tNC4xMS54LyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICAgZmlsZTovL3VzZS1wa2djb25maWctZm9yLXB5dGhvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLWRiMy1mcm9tLWNvbmZpZ3VyZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYWRkX1JQTVNFTlNFX01JU1NJTkdPS190b19ycG1tb2R1bGUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3N1cHBvcnQtc3VnZ2VzdHMtdGFnLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtZGlyLWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX3Nob3J0Y2lyY3VpdGVkLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXhfbGliZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ycG0tc2NyaXB0ZXRleGVjaGVscC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcHl0aG9uZGVwcy5zaCBcCisgICAgICAgICAgICBmaWxlOi8vcnBtLUNWRS0yMDE0LTgxMTgucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3JwbS1DVkUtMjAxMy02NDM1LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODc2YWM5OTQ4YTg4MzY3MDU0ZjhkZGI1YzBlODcxNzMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDAzZjhkZTYzMmIzMzg0NmNlNTc0NmY0MjljMjFhNjBmNDBkZmY5ZGNiNTZmMWI0MTE4ZjM3YTA2NTJhNDhkNCIKKworUFIgPSAicjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzCitpbmhlcml0IHB5dGhvbm5hdGl2ZQoraW5oZXJpdCBwa2djb25maWcKK2luaGVyaXQgZ2V0dGV4dAorCitFWFRSQV9PRUNPTkYgKz0gIi0taG9zdD0ke0hPU1RfU1lTfSBcCisgICAgICAgICAgICAgICAgIC0tcHJvZ3JhbS1wcmVmaXg9IFwKKyAgICAgICAgICAgICAgICAgLS1wcmVmaXg9JHtwcmVmaXh9IFwKKyAgICAgICAgICAgICAgICAgLS1leGVjLXByZWZpeD0ke3ByZWZpeH0gXAorICAgICAgICAgICAgICAgICAtLWJpbmRpcj0ke3ByZWZpeH0vYmluIFwKKyAgICAgICAgICAgICAgICAgLS1zYmluZGlyPSR7cHJlZml4fS9zYmluIFwKKyAgICAgICAgICAgICAgICAgLS1zeXNjb25mZGlyPSR7c3lzY29uZmRpcn0gXAorICAgICAgICAgICAgICAgICAtLWRhdGFkaXI9JHtwcmVmaXh9L3NoYXJlIFwKKyAgICAgICAgICAgICAgICAgLS1pbmNsdWRlZGlyPSR7cHJlZml4fS9pbmNsdWRlIFwKKyAgICAgICAgICAgICAgICAgLS1saWJkaXI9JHtwcmVmaXh9L2xpYiBcCisgICAgICAgICAgICAgICAgIC0tbGliZXhlY2Rpcj0ke3ByZWZpeH0vbGliZXhlYyBcCisgICAgICAgICAgICAgICAgIC0tbG9jYWxzdGF0ZWRpcj0ke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAgICAgICAgICAgICAgLS1zaGFyZWRzdGF0ZWRpcj0ke3ByZWZpeH0vY29tIFwKKyAgICAgICAgICAgICAgICAgLS1tYW5kaXI9JHttYW5kaXJ9IFwKKyAgICAgICAgICAgICAgICAgLS1pbmZvZGlyPSR7aW5mb2Rpcn0gXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1hY2wgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtbHVhIFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LWNhcCBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXB5dGhvbiBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1leHRlcm5hbC1kYiBcCisgICAgICAgICAgICAgICAgIgorCitDUFBGTEFHU19hcHBlbmQgPSAiIGBwa2ctY29uZmlnIC0tY2ZsYWdzIG5zc2AiCitMREZMQUdTX2FwcGVuZCA9ICIgLVdsLC1Cc3ltYm9saWMtZnVuY3Rpb25zIC1mZnVuY3Rpb24tc2VjdGlvbnMiCitDQ0ZMQUdTX2FwcGVuZCA9ICIgLWZQSUMgIgorQ1hYRkxBR1NfYXBwZW5kID0gIiAtZlBJQyAiCitDRkxBR1NfYXBwZW5kID0gIiAtZlBJQyAtRFJQTV9WRU5ET1JfV0lORFJJVkVSIC1EUlBNX1ZFTkRPUl9QT0tZIC1EUlBNX1ZFTkRPUl9PRSAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHJtIC1yZiBzcWxpdGUKKyAgICBybSAtZiBtNC9saWJ0b29sLm00CisgICAgcm0gLWYgbTQvbHQqLm00CisgICAgcm0gLXJmIGRiMy9jb25maWd1cmUqCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIG12ICR7RH0vJHtiYXNlX2JpbmRpcn0vcnBtICR7RH0vJHtiaW5kaXJ9LworICAgIHJtZGlyICR7RH0vJHtiYXNlX2JpbmRpcn0KKyAgICBybSAtZiAke0R9JHtwcmVmaXh9L2xpYi8qLmxhCisgICAgcm0gLWYgJHtEfSR7cHJlZml4fS9saWIvcnBtLXBsdWdpbnMvKi5sYQorICAgIHJtIC1mICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiV7d2l0aF9weXRob25fdmVyc2lvbn0vc2l0ZS1wYWNrYWdlcy8qLnthLGxhfQorICAgIHJtIC1mICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiV7d2l0aF9weXRob25fdmVyc2lvbn0vc2l0ZS1wYWNrYWdlcy9ycG0vKi57YSxsYX0KKyAgICBybSAtZnIgJHtEfS92YXIKKyAgICBpbnN0YWxsIC1kICR7RH0ke3ByZWZpeH0vbGliL3JwbS9iaW4KKyAgICBsbiAtcyAuLi9kZWJ1Z2VkaXQgJHtEfSR7cHJlZml4fS9saWIvcnBtL2Jpbi9kZWJ1Z2VkaXQKKyAgICBsbiAtcyAuLi9ycG1kZXBzICR7RH0ke3ByZWZpeH0vbGliL3JwbS9iaW4vcnBtZGVwcy1vZWNvcmUKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9weXRob25kZXBzLnNoICR7RH0vJHtsaWJkaXJ9L3JwbS9weXRob25kZXBzLnNoCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSgpIHsKKworICAgIFsgInhcJEQiID09ICJ4IiBdICYmIGxkY29uZmlnCisgICAgdGVzdCAtZiAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9ycG0vUGFja2FnZXMgfHwgcnBtIC0taW5pdGRiCisgICAgcm0gLWYgJHtsb2NhbHN0YXRlZGlyfS9saWIvcnBtL0ZpbGVtZDVzIFwKKyAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9ycG0vRmlsZWRpZ2VzdHMgXAorICAgICAgICAgICR7bG9jYWxzdGF0ZWRpcn0vbGliL3JwbS9SZXF1aXJldmVyc2lvbiBcCisgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvcnBtL1Byb3ZpZGV2ZXJzaW9uCisKK30KKworcGtnX3Bvc3RybV8ke1BOfSgpIHsKKyAgICBbICJ4XCREIiA9PSAieCIgXSAmJiBsZGNvbmZpZworCit9CisKK1BBQ0tBR0VTICs9ICJweXRob24tJHtQTn0iCitQUk9WSURFUyArPSAicHl0aG9uLXJwbSIKKworRklMRVNfJHtQTn0gKz0gICIke2xpYmRpcn0vcnBtIFwKKyAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3JwbS1wbHVnaW5zL2V4ZWMuc28gXAorICAgICAgICAgICAgICAgICIKK1JERVBFTkRTXyR7UE59ID0gImJhc2UtZmlsZXMgcnVuLXBvc3RpbnN0cyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3JwbS8uZGVidWcvKiBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ycG0tcGx1Z2lucy8uZGVidWcvKiBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy9ycG0vLmRlYnVnLyogXAorICAgICAgICAgICAgICAgICAgICIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvcnBtLyoubGEiCisKK0ZJTEVTX3B5dGhvbi0ke1BOfSA9ICIke2xpYmRpcn0vcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvcnBtLyoiCitSREVQRU5EU19weXRob24tJHtQTn0gPSAiJHtQTn0gcHl0aG9uIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNS40K2N2cy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNS40K2N2cy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTAzZjNiYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNS40K2N2cy5iYgpAQCAtMCwwICsxLDUyOCBAQAorU1VNTUFSWSA9ICJUaGUgUlBNIHBhY2thZ2UgbWFuYWdlbWVudCBzeXN0ZW0iCitERVNDUklQVElPTiA9ICJUaGUgUlBNIFBhY2thZ2UgTWFuYWdlciAoUlBNKSBpcyBhIHBvd2VyZnVsIGNvbW1hbmQgbGluZSBkcml2ZW4gXAorcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbSBjYXBhYmxlIG9mIGluc3RhbGxpbmcsIHVuaW5zdGFsbGluZywgXAordmVyaWZ5aW5nLCBxdWVyeWluZywgYW5kIHVwZGF0aW5nIHNvZnR3YXJlIHBhY2thZ2VzLiBFYWNoIHNvZnR3YXJlIFwKK3BhY2thZ2UgY29uc2lzdHMgb2YgYW4gYXJjaGl2ZSBvZiBmaWxlcyBhbG9uZyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IFwKK3RoZSBwYWNrYWdlIGxpa2UgaXRzIHZlcnNpb24sIGEgZGVzY3JpcHRpb24sIGV0Yy4iCisKK1NVTU1BUllfJHtQTn0tbGlicyA9ICJMaWJyYXJpZXMgZm9yIG1hbmlwdWxhdGluZyBSUE0gcGFja2FnZXMiCitERVNDUklQVElPTl8ke1BOfS1saWJzID0gIlRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgUlBNIHNoYXJlZCBsaWJyYXJpZXMuIgorCitTVU1NQVJZXyR7UE59LWRldiA9ICJEZXZlbG9wbWVudCBmaWxlcyBmb3IgbWFuaXB1bGF0aW5nIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWRldiA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIFJQTSBDIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcy4gVGhlc2UgXAorZGV2ZWxvcG1lbnQgZmlsZXMgd2lsbCBzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiB3cml0aW5nIHByb2dyYW1zIHRoYXQgXAorbWFuaXB1bGF0ZSBSUE0gcGFja2FnZXMgYW5kIGRhdGFiYXNlcy4gVGhlc2UgZmlsZXMgYXJlIGludGVuZGVkIHRvIFwKK3NpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIGdyYXBoaWNhbCBwYWNrYWdlIG1hbmFnZXJzIG9yIGFueSBcCitvdGhlciB0b29scyB0aGF0IG5lZWQgYW4gaW50aW1hdGUga25vd2xlZGdlIG9mIFJQTSBwYWNrYWdlcyBpbiBvcmRlciBcCit0byBmdW5jdGlvbi4iCisKK1NVTU1BUllfJHtQTn0tY29tbW9uID0gIkNvbW1vbiBSUE0gcGF0aHMsIHNjcmlwdHMsIGRvY3VtZW50YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24iCitERVNDUklQVElPTl8ke1BOfS1jb21tb24gPSAiVGhlIHJwbS1jb21tb24gcGFja2FnZSBjb250YWlucyBwYXRocywgc2NyaXB0cywgZG9jdW1lbnRhdGlvbiBcCithbmQgY29uZmlndXJhdGlvbiBjb21tb24gYmV0d2VlbiBSUE0gUGFja2FnZSBNYW5hZ2VyLiIKKworU1VNTUFSWV8ke1BOfS1idWlsZCA9ICJTY3JpcHRzIGFuZCBleGVjdXRhYmxlIHByb2dyYW1zIHVzZWQgdG8gYnVpbGQgcGFja2FnZXMiCitERVNDUklQVElPTl8ke1BOfS1idWlsZCA9ICJUaGUgcnBtLWJ1aWxkIHBhY2thZ2VjIG9udGFpbnMgdGhlIHNjcmlwdHMgYW5kIGV4ZWN1dGFibGUgcHJvZ3JhbXMgXAordGhhdCBhcmUgdXNlZCB0byBidWlsZCBwYWNrYWdlcyB1c2luZyB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlci4iCisKK1NVTU1BUllfcHl0aG9uLXJwbSA9ICJQeXRob24gYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW51cHVsYXRlIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OX3B5dGhvbi1ycG0gPSAiVGhlIHJwbS1weXRob24gcGFja2FnZSBjb250YWlucyBhIG1vZHVsZSB0aGF0IHBlcm1pdHMgYXBwbGljYXRpb25zIFwKK3dyaXR0ZW4gaW4gdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSB0byB1c2UgdGhlIGludGVyZmFjZSBcCitzdXBwbGllZCBieSB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlciBsaWJyYXJpZXMuIgorCitTVU1NQVJZX3BlcmwtbW9kdWxlLXJwbSA9ICJQZXJsIGJpbmRpbmdzIGZvciBhcHBzIHdoaWNoIHdpbGwgbWFuaXB1bGF0ZSBSUE0gcGFja2FnZXMiCitERVNDUklQVElPTl9wZXJsLW1vZHVsZXMtcnBtID0gIlRoZSBwZXJsLW1vZHVsZXMtcnBtIHBhY2thZ2UgY29udGFpbnMgYSBtb2R1bGUgdGhhdCBwZXJtaXRzIGFwcGxpY2F0aW9ucyBcCit3cml0dGVuIGluIHRoZSBQZXJsIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIHVzZSB0aGUgaW50ZXJmYWNlIFwKK3N1cHBsaWVkIGJ5IHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIGxpYnJhcmllcy4iCisKK1NVTU1BUllfcGVybC1tb2R1bGUtcnBtLWRldiA9ICJEZXZlbG9wbWVudCBjb21wb25lbnRzIGZvciBwZXJsIGJpbmRpbmdzIgorREVTQ1JJUFRJT05fcGVybC1tb2R1bGVzLXJwbS1kZXYgPSAiRGV2ZWxvcG1lbnQgaXRlbXMgc3VjaCBhcyBtYW4gcGFnZXMgZm9yIHVzZSB3aXRoIHRoZSBQZXJsIFwKK2xhbmd1YWdlIGJpbmRpbmdzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3JwbTUub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEiCisKK0RFUEVORFMgPSAibGlicGNyZSBhdHRyIGFjbCBwb3B0IG9zc3AtdXVpZCBmaWxlIGJ5YWNjLW5hdGl2ZSIKKworUyA9ICIke1dPUktESVJ9L3JwbSIKKworIyBBcHBseSB2YXJpb3VzIGZpeHVwcyB0aGF0IGFyZSB1bmlxdWUgdG8gdGhlIENWUyBlbnZpcm9ubWVudAorZG9fZml4dXBfdW5wYWNrICgpIHsKKwlsbiAtc2YgLi4vc3ljayAke1N9L3N5Y2sgfHwgOgorCWxuIC1zZiAuLi9sdWEgJHtTfS9sdWEgfHwgOgorCWxuICR7U30vcnBtcXYuYyAke1N9L3JwbXF2LmNjIHx8IDoKK30KKworYWRkdGFzayBmaXh1cF91bnBhY2sgYWZ0ZXIgZG9fdW5wYWNrIGJlZm9yZSBkb19wYXRjaAorCisjIFRoaXMgcmVjaXBlIGlzIHJlYWxseSBkZXNpZ25lZCBmb3IgZGV2ZWxvcG1lbnQuLi4gdG8gVHJ5IG91dCB0aGUgbGF0ZXN0CisjIGNvbW11bml0eSB3b3JrIGluIHByb2dyZXNzLgorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCisjIHJwbTJjcGlvIGlzIGEgc2hlbGwgc2NyaXB0LCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBycG0gc3JjLnJwbS4gIEl0IGlzIG5lZWRlZAorIyBpbiBvcmRlciB0byBleHRyYWN0IHRoZSBkaXN0cmlidXRpb24gU1JQTSBpbnRvIGEgZm9ybWF0IHdlIGNhbiBleHRyYWN0Li4uCitTUkNfVVJJID0gImN2czovL2Fub255bW91c0BycG01Lm9yZy9jdnM7dGFnPXJwbS01XzQ7bW9kdWxlPXJwbSBcCisJICAgY3ZzOi8vYW5vbnltb3VzQHJwbTUub3JnL2N2czt0YWc9cnBtLTVfNDttb2R1bGU9c3ljayBcCisJICAgY3ZzOi8vYW5vbnltb3VzQHJwbTUub3JnL2N2czt0YWc9cnBtLTVfNDttb2R1bGU9bHVhIFwKKwkgICBmaWxlOi8vcnBtLWxvZy1hdXRvLXJtLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWRiLXJlZHVjZS5wYXRjaCBcCisJICAgZmlsZTovL3BlcmZpbGVfcnBtZGVwcy5zaCBcCisJICAgZmlsZTovL3JwbS1hdXRvZ2VuLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWxpYnNxbC1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9oZWFkZXItaW5jbHVkZS1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGxhdGZvcm0ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tc2hvd3JjLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXRvb2xzLW10cmVlLUxERkxBR1MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZmlsZWNsYXNzLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWNhbm9uYXJjaC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1uby1sb29wbXNnLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXNjcmlwdGxldGV4ZWNoZWxwZXIucGF0Y2ggXAorCSAgIGZpbGU6Ly9weXRob25kZXBzLnNoIFwKKwkgICBmaWxlOi8vcnBtZGVwcy1vZWNvcmUucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcmVzb2x2ZWRlcC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1uby1wZXJsLXVycG0ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbWFjcm9zLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWx1YS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1vc3NwLXV1aWQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGFja2FnZW9yaWdpbi5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wa2djb25maWdkZXBzLnBhdGNoIFwKKwkgICBmaWxlOi8vdWNsaWJjLXN1cHBvcnQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG1hdGNoLnBhdGNoIFwKKwkgICBmaWxlOi8vZnN0YWNrLXByb3RlY3Rvci1jb25maWd1cmUtY2hlY2sucGF0Y2ggXAorCSAgIGZpbGU6Ly9kYmNvbnZlcnQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tdXVpZC1pbmNsdWRlLnBhdGNoIFwKKwkgICBmaWxlOi8vbWFrZWZpbGUtYW0tZXhlYy1ob29rLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWRiX2J1ZmZlcl9zbWFsbC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1weS1pbml0LnBhdGNoIFwKKwkgICBmaWxlOi8vcHl0aG9uLXJwbS1ycG1zZW5zZS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1yZWxvYy1tYWNyb3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGxhdGZvcm0yLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJlbW92ZS1zeWtjcGFyc2UtZGVjbC5wYXRjaCBcCisJICAgZmlsZTovL2RlYnVnZWRpdC1zZWd2LnBhdGNoIFwKKwkgICBmaWxlOi8vZGVidWdlZGl0LXZhbGlkLWZpbGUtdG8tZml4LXNlZ21lbnQtZmF1bHQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGxhdGZvcm0tZmlsZS1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbHNiLWNvbXBhdGliaWxpdHkucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tdGFnLWdlbmVyYXRlLWVuZGlhbi1jb252ZXJzaW9uLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1oYXJkbGluay1zZWdmYXVsdC1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGF5bG9hZC11c2UtaGFzaGVkLWlub2RlLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWZpeC1sb2dpby1jcC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1kYjUtb3ItZGI2LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJwbXBncC1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZGlzYWJsZS1Xbm8tb3ZlcnJpZGUtaW5pdC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1yZWFscGF0aC5wYXRjaCBcCisJICAiCisKKyMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBlbmFibGUgcGxhdGZvcm0gc2NvcmUgZGVidWdnaW5nCisjIFRoaXMgaXMgdXNlZnVsIHdoZW4gaWRlbnRpZnlpbmcgaXNzdWVzIHdpdGggU21hcnQgYmVpbmcgdW5hYmxlCisjIHRvIHByb2Nlc3MgY2VydGFpbiBwYWNrYWdlIGZlZWRzLgorI1NSQ19VUkkgKz0gImZpbGU6Ly9ycG0tZGVidWctcGxhdGZvcm0ucGF0Y2giCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworYWNwYXRocyA9ICItSSAke1N9L2RiL2Rpc3QvYWNsb2NhbCAtSSAke1N9L2RiL2Rpc3QvYWNsb2NhbF9qYXZhIgorCisjIFNwZWNpZnkgdGhlIGRlZmF1bHQgcnBtIG1hY3JvcyBpbiB0ZXJtcyBvZiBhZGp1c3RhYmxlIHZhcmlhYmxlcworcnBtX21hY3JvcyA9ICIle191c3JsaWJycG19L21hY3Jvczole191c3JsaWJycG19L3Bva3kvbWFjcm9zOiV7X3VzcmxpYnJwbX0vcG9reS8le190YXJnZXR9L21hY3Jvczole19ldGNycG19L21hY3Jvcy4qOiV7X2V0Y3JwbX0vbWFjcm9zOiV7X2V0Y3JwbX0vJXtfdGFyZ2V0fS9tYWNyb3M6fi8ub2VycG1tYWNyb3MiCitycG1fbWFjcm9zX2NsYXNzLW5hdGl2ZSA9ICIle191c3JsaWJycG19L21hY3Jvczole191c3JsaWJycG19L3Bva3kvbWFjcm9zOiV7X3VzcmxpYnJwbX0vcG9reS8le190YXJnZXR9L21hY3Jvczp+Ly5vZXJwbW1hY3JvcyIKK3JwbV9tYWNyb3NfY2xhc3MtbmF0aXZlc2RrID0gIiV7X3VzcmxpYnJwbX0vbWFjcm9zOiV7X3VzcmxpYnJwbX0vcG9reS9tYWNyb3M6JXtfdXNybGlicnBtfS9wb2t5LyV7X3RhcmdldH0vbWFjcm9zOn4vLm9lcnBtbWFjcm9zIgorCisjIHNxbGl0ZSBsdWEgdGNsIGF1Z2VhcyBuc3MgZ2NyeXB0IG5lb24geHogeGFyIGtleXV0aWxzIHBlcmwgc2VsaW51eAorCisjIE5vdGU6IHBlcmwgYW5kIHNxbGl0ZSB3L28gZGIgc3BlY2lmaWVkIGRvZXMgbm90IGN1cnJlbnRseSB3b3JrLgorIyAgICAgICB0Y2wsIGF1Z2VhcywgbnNzLCBnY3J5cHQsIHhhciBhbmQga2V5dXRpbHMgc3VwcG9ydCBpcyB1bnRlc3RlZC4KK1BBQ0tBR0VDT05GSUcgPz89ICJkYiBiemlwMiB6bGliIGJlZWNyeXB0IG9wZW5zc2wgbGliZWxmIHB5dGhvbiIKKworUEFDS0FHRUNPTkZJR1tiemlwMl0gPSAiLS13aXRoLWJ6aXAyLC0td2l0aG91dC1iemlwMixiemlwMiwiCitQQUNLQUdFQ09ORklHW3h6XSA9ICItLXdpdGgteHosLS13aXRob3V0LXh6LHh6LCIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS13aXRoLXpsaWIsLS13aXRob3V0LXpsaWIsemxpYiwiCitQQUNLQUdFQ09ORklHW3hhcl0gPSAiLS13aXRoLXhhciwtLXdpdGhvdXQteGFyLHhhciwiCisKK1dJVEhfUFlUSE9OID0gIiAtLXdpdGgtcHl0aG9uPSR7UFlUSE9OX0JBU0VWRVJTSU9OfSBcCisJCS0td2l0aC1weXRob24taW5jLWRpcj0ke1NUQUdJTkdfSU5DRElSfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0gXAorCQktLXdpdGgtcHl0aG9uLWxpYi1kaXI9JHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9zaXRlLXBhY2thZ2VzIFwKKwkJLS13aXRob3V0LXB5dGhvbmVtYmVkIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIiR7V0lUSF9QWVRIT059LC0td2l0aG91dC1weXRob24scHl0aG9uLCIKKworIyBQZXJsIG1vZHVsZXMgYXJlIG5vdCBidWlsdCwgYnV0IHRoZXkgY291bGQgYmUgZW5hYmxlZCBmYWlybHkgZWFzaWx5CisjIHRoZSBwZXJsIG1vZHVsZSBjcmVhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIHdvdWxkIG5lZWQgdG8gYmUgcGF0Y2hlZC4KKyMgKGN1cnJlbnRseSBoYXMgaG9zdCBwZXJsIGNvbnRhbWluYXRpb24gaXNzdWVzKQorV0lUSF9QRVJMID0gIi0td2l0aC1wZXJsIC0td2l0aG91dC1wZXJsZW1iZWQgLS13aXRob3V0LXBlcmwtdXJwbSIKK1dJVEhPVVRfUEVSTCA9ICItLXdpdGhvdXQtcGVybCAtLXdpdGhvdXQtcGVybC11cnBtIgorUEFDS0FHRUNPTkZJR1twZXJsXSA9ICIke1dJVEhfUEVSTH0sJHtXSVRIT1VUX1BFUkx9LHBlcmwsIgorCisjIFRoZSAtLXdpdGgtZGJzcWwgd2lsbCBvbmx5IHRlbGwgUlBNIHRvIGNoZWNrIGZvciBzdXBwb3J0LCBkYgorIyBtYXkgb3IgbWF5IG5vdCBiZSBidWlsdCB3LyB0aGUgZGJzcWwgc3VwcG9ydC4KK1dJVEhfREIgPSAiLS13aXRoLWRiIC0td2l0aC1kYnNxbCAtLXdpdGhvdXQtZGItdG9vbHMtaW50ZWdyYXRlZCIKK1BBQ0tBR0VDT05GSUdbZGJdID0gIiR7V0lUSF9EQn0sLS13aXRob3V0LWRiLGRiLCIKKworUEFDS0FHRUNPTkZJR1tzcWxpdGVdID0gIi0td2l0aC1zcWxpdGUsLS13aXRob3V0LXNxbGl0ZSxzcWxpdGUzLCIKKworUEFDS0FHRUNPTkZJR1tiZWVjcnlwdF0gPSAiLS13aXRoLWJlZWNyeXB0PWV4dGVybmFsLC0td2l0aG91dC1iZWVjcnlwdCxiZWVjcnlwdCwiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0td2l0aC1vcGVuc3NsLC0td2l0aG91dC1vcGVuc3NsLG9wZW5zc2wsIgorUEFDS0FHRUNPTkZJR1tuc3NdID0gIi0td2l0aC1uc3MsLS13aXRob3V0LW5zcyxuc3MsIgorUEFDS0FHRUNPTkZJR1tnY3J5cHRdID0gIi0td2l0aC1nY3J5cHQsLS13aXRob3V0LWdjcnlwdCxnY3J5cHQsIgorUEFDS0FHRUNPTkZJR1trZXl1dGlsc10gPSAiLS13aXRoLWtleXV0aWxzLC0td2l0aG91dC1rZXl1dGlscyxrZXl1dGlscywiCitQQUNLQUdFQ09ORklHW2xpYmVsZl0gPSAiLS13aXRoLWxpYmVsZiwtLXdpdGhvdXQtbGliZWxmLGVsZnV0aWxzLCIKKworV0lUSF9TRUxJTlVYID0gIi0td2l0aC1zZWxpbnV4IC0td2l0aC1zZXBvbCAtLXdpdGgtc2VtYW5hZ2UiCitXSVRIT1VUX1NFTElOVVggPSAiLS13aXRob3V0LXNlbGludXggLS13aXRob3V0LXNlcG9sIC0td2l0aG91dC1zZW1hbmFnZSIKK1BBQ0tBR0VDT05GSUdbc2VsaW51eF0gPSAiJHtXSVRIX1NFTElOVVh9LCR7V0lUSE9VVF9TRUxJTlVYfSxsaWJzZWxpbnV4LCIKKworV0lUSF9ORU9OID0gIi0td2l0aC1uZW9uIC0td2l0aC1saWJwcm94eSAtLXdpdGgtZXhwYXQgLS13aXRob3V0LWdzc2FwaSIKK1dJVEhPVVRfTkVPTiA9ICItLXdpdGhvdXQtbmVvbiAtLXdpdGhvdXQtbGlicHJveHkgLS13aXRob3V0LWV4cGF0IC0td2l0aG91dC1nc3NhcGkiCitQQUNLQUdFQ09ORklHW25lb25dID0gIiR7V0lUSF9ORU9OfSwke1dJVEhPVVRfTkVPTn0sbmVvbiBleHBhdCwiCisKK1BBQ0tBR0VDT05GSUdbbHVhXSA9ICItLXdpdGgtbHVhLC0td2l0aG91dC1sdWEsZXhwYXQsIgorUEFDS0FHRUNPTkZJR1t0Y2xdID0gIi0td2l0aC10Y2wsLS13aXRob3V0LXRjbCx0Y2wsIgorCitQQUNLQUdFQ09ORklHW2F1Z2Vhc10gPSAiLS13aXRoLWF1Z2VhcywtLXdpdGhvdXQtYXVnZWFzLGF1Z2VhcywiCisKK0VYVFJBX09FQ09ORiArPSAiLS12ZXJib3NlIFwKKwkJLS1zeXNjb25mZGlyPSR7c3lzY29uZmRpcn0gXAorCQktLXdpdGgtZmlsZSBcCisJCS0td2l0aC1wYXRoLW1hZ2ljPSV7X3VzcmxpYnJwbX0vLi4vLi4vc2hhcmUvbWlzYy9tYWdpYy5tZ2MgXAorCQktLXdpdGgtc3ljaz1pbnRlcm5hbCBcCisJCS0td2l0aG91dC1yZWFkbGluZSBcCisJCS0td2l0aG91dC1saWJ0YXNuMSBcCisJCS0td2l0aG91dC1wYWtjaG9pcyBcCisJCS0td2l0aG91dC1nbnV0bHMgXAorCQktLXdpdGgtcGNyZSBcCisJCS0tZW5hYmxlLXV0ZjggXAorCQktLXdpdGgtdXVpZCBcCisJCS0td2l0aC1hdHRyIFwKKwkJLS13aXRoLWFjbCBcCisJCS0td2l0aC1wb3B0PWV4dGVybmFsIFwKKwkJLS13aXRoLXB0aHJlYWRzIFwKKwkJLS13aXRob3V0LWN1ZGYgXAorCQktLXdpdGhvdXQtZmljbCBcCisJCS0td2l0aG91dC1hdGVybSBcCisJCS0td2l0aG91dC1uaXggXAorCQktLXdpdGhvdXQtYmFzaCBcCisJCS0td2l0aG91dC1yYyBcCisJCS0td2l0aG91dC1qcyBcCisJCS0td2l0aG91dC1ncHNlZSBcCisJCS0td2l0aG91dC1ydWJ5IFwKKwkJLS13aXRob3V0LXNxdWlycmVsIFwKKwkJLS13aXRoLWJ1aWxkLWV4dGxpYmRlcCBcCisJCS0td2l0aC1idWlsZC1tYXhleHRsaWJkZXAgXAorCQktLXdpdGhvdXQtdmFsZ3JpbmQgXAorCQktLWRpc2FibGUtb3Blbm1wIFwKKwkJLS1lbmFibGUtYnVpbGQtcGljIFwKKwkJLS1lbmFibGUtYnVpbGQtdmVyc2lvbnNjcmlwdCBcCisJCS0tZW5hYmxlLWJ1aWxkLXdhcm5pbmdzIFwKKwkJLS1lbmFibGUtYnVpbGQtZGVidWcgXAorCQktLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgXAorCQktLXdpdGgtcGF0aC1tYWNyb3M9JHtycG1fbWFjcm9zfSBcCisJCS0td2l0aC1wYXRoLWxpYj0ke2xpYmRpcn0vcnBtIFwKKwkJLS13aXRoLWJ1Z3JlcG9ydD1odHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZyBcCisJCS0tcHJvZ3JhbS1wcmVmaXg9IFwKKwkJWUFDQz1ieWFjYyIKKworQ0ZMQUdTX2FwcGVuZCA9ICIgLURSUE1fVkVORE9SX1dJTkRSSVZFUiAtRFJQTV9WRU5ET1JfUE9LWSAtRFJQTV9WRU5ET1JfT0UiCisKK0xERkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIi1scnQgLWxwdGhyZWFkIgorCitQQUNLQUdFUyA9ICIke1BOfS1kYmcgJHtQTn0gJHtQTn0tZG9jICR7UE59LWxpYnMgJHtQTn0tZGV2ICR7UE59LXN0YXRpY2RldiAke1BOfS1jb21tb24gJHtQTn0tYnVpbGQgcHl0aG9uLXJwbS1kYmcgcHl0aG9uLXJwbS1zdGF0aWNkZXYgcHl0aG9uLXJwbS1kZXYgcHl0aG9uLXJwbSBwZXJsLW1vZHVsZS1ycG0gcGVybC1tb2R1bGUtcnBtLWRldiAke1BOfS1sb2NhbGUiCisKK1NPTElCUyA9ICI1LjQuc28iCisKKyMgQmFzZWQgb24gJWZpbGVzIHNlY3Rpb24gaW4gdGhlIHJwbS5zcGVjCisKK0ZJTEVTXyR7UE59ID0gICIke2JpbmRpcn0vcnBtIFwKKwkJJHtiaW5kaXJ9L3JwbWNvbnN0YW50IFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG0uKiBcCisJCSR7bGliZGlyfS9ycG0vdGdwZyBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zIFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG1wb3B0IFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG0yY3BpbyBcCisJCSR7bGliZGlyfS9ycG0vdmNoZWNrIFwKKwkJJHtsaWJkaXJ9L3JwbS9oZWxwZXJzIFwKKwkJJHtsaWJkaXJ9L3JwbS9xZiBcCisJCSR7bGliZGlyfS9ycG0vY3B1aW5mby55YW1sIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vbXRyZWUgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1rZXkgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1yZXBvIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtcmVwby5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtc3BlY2R1bXAgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1zcGVjZHVtcC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vd2dldCBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUgXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL3JwbSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvd2RqIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9saWIgXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2xpYi9ycG0gXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2xpYi93ZGogXAorCQkke2JpbmRpcn0vcnBtLnJlYWwgXAorCQkke2JpbmRpcn0vcnBtY29uc3RhbnQucmVhbCBcCisJCSR7YmluZGlyfS9ycG0yY3Bpby5yZWFsIFwKKwkJIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9ycG0vLmRlYnVnIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vLmRlYnVnIFwKKwkJIgorCitGSUxFU18ke1BOfS1jb21tb24gPSAiJHtiaW5kaXJ9L3JwbTJjcGlvIFwKKwkJJHtiaW5kaXJ9L2dlbmRpZmYgXAorCQkke3N5c2NvbmZkaXJ9L3JwbSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvcmVwYWNrYWdlIFwKKwkJIgorCitGSUxFU18ke1BOfS1saWJzID0gIiR7bGliZGlyfS9saWJycG0tKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1jb25zdGFudC0qLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtaW8tKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1taXNjLSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtYnVpbGQtKi5zbyBcCisJCSIKKworRklMRVNfJHtQTn0tYnVpbGQgPSAiJHtwcmVmaXh9L3NyYy9ycG0gXAorCQkke2JpbmRpcn0vcnBtYnVpbGQgXAorCQkke2JpbmRpcn0vcnBtYnVpbGQucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYnJwLSogXAorCQkke2xpYmRpcn0vcnBtL2NoZWNrLWZpbGVzIFwKKwkJJHtsaWJkaXJ9L3JwbS9jcm9zcy1idWlsZCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1kZWJ1Z2luZm8uc2ggXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtbGFuZy5zaCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1wcm92LnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLXByb3ZpZGVzLnBlcmwgXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtcmVxLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLXJlcXVpcmVzLnBlcmwgXAorCQkke2xpYmRpcn0vcnBtL2dldHBvLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9odHRwLnJlcSBcCisJCSR7bGliZGlyfS9ycG0vamF2YWRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL21vbm8tZmluZC1wcm92aWRlcyBcCisJCSR7bGliZGlyfS9ycG0vbW9uby1maW5kLXJlcXVpcmVzIFwKKwkJJHtsaWJkaXJ9L3JwbS9leGVjdXRhYmxlZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vbGlidG9vbGRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL29zZ2lkZXBzLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9wZXJsZGVwcy5wbCBcCisJCSR7bGliZGlyfS9ycG0vcGVybC5wcm92IFwKKwkJJHtsaWJkaXJ9L3JwbS9wZXJsLnJlcSBcCisJCSR7bGliZGlyfS9ycG0vcGhwLnByb3YgXAorCQkke2xpYmRpcn0vcnBtL3BocC5yZXEgXAorCQkke2xpYmRpcn0vcnBtL3BrZ2NvbmZpZ2RlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL3B5dGhvbmRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9kZWJ1Z2VkaXQgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9kZWJ1Z2VkaXQucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNhY2hlIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY2FjaGUucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNtcCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNtcC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcyBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMtb2Vjb3JlIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcy1vZWNvcmUucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRpZ2VzdCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRpZ2VzdC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vYWJpLWNvbXBsaWFuY2UtY2hlY2tlci5wbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2FwaS1zYW5pdHktYXV0b3Rlc3QucGwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9jaHJvb3QgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9jcCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2Ric3FsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vZmluZCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2luc3RhbGwtc2ggXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9sdWEgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9sdWFjIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vbWtpbnN0YWxsZGlycyBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWx1YSBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWx1YWMgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9zcWxpdGUzIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9jbWFrZSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvamF2YSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvbGlidG9vbCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvbWFuZHJpdmEgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL21vbm8gXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3BlcmwgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3BocCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcGtnY29uZmlnIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9weXRob24gXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3J1YnkgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3NlbGludXggXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3RjbCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLnJwbWJ1aWxkIFwKKwkJJHtsaWJkaXJ9L3JwbS91X3BrZy5zaCBcCisJCSR7bGliZGlyfS9ycG0vdnBrZy1wcm92aWRlcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vdnBrZy1wcm92aWRlczIuc2ggXAorCQkke2xpYmRpcn0vcnBtL3BlcmZpbGVfcnBtZGVwcy5zaCBcCisJCSIKK1JERVBFTkRTXyR7UE59ID0gImJhc2UtZmlsZXMgcnVuLXBvc3RpbnN0cyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorUkRFUEVORFNfJHtQTn0tYnVpbGQgPSAiZmlsZSBiYXNoIHBlcmwiCisKK1JERVBFTkRTX3B5dGhvbi1ycG0gPSAiJHtQTn0iCisKK0ZJTEVTX3B5dGhvbi1ycG0tZGJnID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcnBtLy5kZWJ1Zy9fKiIKK0ZJTEVTX3B5dGhvbi1ycG0tZGV2ID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcnBtLyoubGEiCitGSUxFU19weXRob24tcnBtLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3JwbS8qLmEiCitGSUxFU19weXRob24tcnBtID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcnBtIgorCitGSUxFU19wZXJsLW1vZHVsZS1ycG0gPSAiJHtsaWJkaXJ9L3BlcmwvKi8qIFwKKwkJIgorCitGSUxFU19wZXJsLW1vZHVsZS1ycG0tZGV2ID0gIiR7cHJlZml4fS9zaGFyZS9tYW4vbWFuMy9SUE0qIFwKKwkJIgorCitSREVQRU5EU18ke1BOfS1kZXYgKz0gImJhc2giCisKK0ZJTEVTXyR7UE59LWRldiA9ICIke2luY2x1ZGVkaXJ9L3JwbSBcCisJCSR7bGliZGlyfS9saWJycG0ubGEgXAorCQkke2xpYmRpcn0vbGlicnBtLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWlvLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWlvLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbW1pc2MubGEgXAorCQkke2xpYmRpcn0vbGlicnBtbWlzYy5zbyBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC5sYSBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC5zbyBcCisJCSR7bGliZGlyfS9ycG0vbGliL2xpYmx1YS5sYSBcCisJCSR7bGliZGlyfS9wa2djb25maWcvcnBtLnBjIFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG1kYl9sb2FkY3Z0IFwKKwkJIgorCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgPSAiIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbS5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LmEgXAorCQkke2xpYmRpcn0vbGlicnBtZGIuYSBcCisJCSR7bGliZGlyfS9saWJycG1pby5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbW1pc2MuYSBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC5hIFwKKwkJJHtsaWJkaXJ9L3JwbS9saWIvbGlibHVhLmEgXAorCQkiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIERpc2FibGUgdGVzdHMhCisJZWNobyAiYWxsOiIgPiAke1N9L3Rlc3RzL01ha2VmaWxlLmFtCisJc2VkIC1lICdzL0BfX01LRElSX1BALyV7X19ta2Rpcn0gLXAvJyAtaSAke1N9L21hY3Jvcy9tYWNyb3MuaW4KKworCSggY2QgJHtTfTsgJHtTfS9hdXRvZ2VuLnNoICkKKworCSMgTkFTVFkgaGFjayB0byBtYWtlIHN1cmUgY29uZmlndXJlIGZpbGVzIHRoZSByaWdodCBwa2ctY29uZmlnIGZpbGUuLi4KKwlzZWQgLWUgJ3MvcGtnLWNvbmZpZyAtLWV4aXN0cyB1dWlkL3BrZy1jb25maWcgLS1leGlzdHMgb3NzcC11dWlkL2cnIFwKKwkgICAgLWUgJ3MvcGtnLWNvbmZpZyB1dWlkL3BrZy1jb25maWcgb3NzcC11dWlkL2cnIC1pICR7U30vY29uZmlndXJlCisKKwkoIGNkICR7U30vc3ljayA7IHNldCArZSA7IHJtIC0tIC1sKiA7IG1ha2UgZGlzdGNsZWFuICkgfHwgOgorCisJZXhwb3J0IHZhcnByZWZpeD0ke2xvY2Fsc3RhdGVkaXJ9CisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlzZWQgLWkgLWUgJ3MsJV9fc2NyaXB0bGV0X3JlcXVpcmVzLCMlJV9fc2NyaXB0bGV0X3JlcXVpcmVzLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcworCXNlZCAtaSAtZSAncywlX19wZXJsX3Byb3ZpZGVzLCMlJV9fcGVybF9wcm92aWRlcywnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kLyoKKwlzZWQgLWkgLWUgJ3MsJV9fcGVybF9yZXF1aXJlcywjJSVfX3BlcmxfcmVxdWlyZXMsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC8qCisJc2VkIC1pIC1lICdzLCVfcmVwYWNrYWdlX2FsbF9lcmFzdXJlc1teX10uKiwlX3JlcGFja2FnZV9hbGxfZXJhc3VyZXMgMCwnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKKwlzZWQgLWkgLWUgJ3MsXiMlX29wZW5hbGxfYmVmb3JlX2Nocm9vdC4qLCVfb3BlbmFsbF9iZWZvcmVfY2hyb290XHQxLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcworCisJIyBFbmFibGUgRGViaWFuIHN0eWxlIGFyYml0cmFyeSB0YWdzLi4uCisJc2VkIC1pIC1lICdzLCVfYXJiaXRyYXJ5X3RhZ3NbXl9dLiosJV9hcmJpdHJhcnlfdGFncyAle19hcmJpdHJhcnlfdGFnc19kZWJpYW59LCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcworCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcHl0aG9uZGVwcy5zaCAke0R9LyR7bGliZGlyfS9ycG0vcHl0aG9uZGVwcy5zaAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BlcmZpbGVfcnBtZGVwcy5zaCAke0R9LyR7bGliZGlyfS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoCisKKwkjIFJlbW92ZSB1bnBhY2thZ2VkIGZpbGVzIChiYXNlZCBvbiBsaXN0IGluIHJwbS5zcGVjKQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS97U3BlY2ZpbGUucG0sY3BhbmZsdXRlLGNwYW5mbHV0ZTIscnBtZGlmZixycG1kaWZmLmNnaSxzcWwucHJvdixzcWwucmVxLHRjbC5yZXEsdHJwbX0KKworCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjgvcnBtY2FjaGUuOCoKKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW44L3JwbWdyYXBoLjgqCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vKi9tYW44L3JwbWNhY2hlLjgqCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vKi9tYW44L3JwbWdyYXBoLjgqCisJcm0gLXJmICR7RH0vJHttYW5kaXJ9L3tmcixrb30KKworCXJtIC1mICR7RH0vJHtpbmNsdWRlZGlyfS9wb3B0LmgKKwlybSAtZiAke0R9LyR7bGliZGlyfS9saWJwb3B0LioKKwlybSAtZiAke0R9LyR7bGliZGlyfS9wa2djb25maWcvcG9wdC5wYworCXJtIC1mICR7RH0vJHtkYXRhZGlyfS9sb2NhbGUvKi9MQ19NRVNTQUdFUy9wb3B0Lm1vCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuMy9wb3B0LjMKKworCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjEveGFyLjEqCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0veGFyCisJcm0gLXJmICR7RH0vJHtpbmNsdWRlZGlyfS94YXIKKwlybSAtZiAke0R9LyR7bGliZGlyfS9saWJ4YXIqCisKKwlybSAtZiAke0R9LyR7YmluZGlyfS9seioKKwlybSAtZiAke0R9LyR7YmluZGlyfS91bmx6bWEKKwlybSAtZiAke0R9LyR7YmluZGlyfS91bnh6CisJcm0gLWYgJHtEfS8ke2JpbmRpcn0veHoqCisJcm0gLXJmICR7RH0vJHtpbmNsdWRlZGlyfS9sem1hKgorCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjEvbHoqLjEKKwlybSAtZiAke0R9LyR7bGliZGlyfS9wa2djb25maWcvbGlibHptYSoKKworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiV7d2l0aF9weXRob25fdmVyc2lvbn0vc2l0ZS1wYWNrYWdlcy8qLnthLGxhfQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiV7d2l0aF9weXRob25fdmVyc2lvbn0vc2l0ZS1wYWNrYWdlcy9ycG0vKi57YSxsYX0KKworCSNmaW5kICR7RH0vJHtsaWJkaXJ9L3Blcmw1IC10eXBlIGYgLWEgXCggLW5hbWUgcGVybGxvY2FsLnBvZCAtbyAtbmFtZSAucGFja2xpc3QgXAorCSMJLW8gXCggLW5hbWUgJyouYnMnIC1hIC1lbXB0eSBcKSBcKSAtZXhlYyBybSAtZiB7fSAnOycKKwkjZmluZCAke0R9LyR7bGliZGlyfS9wZXJsNSAtdHlwZSBkIC1kZXB0aCAtZXhlYyBybWRpciB7fSAyPi9kZXYvbnVsbCAnOycKKworCSMgV2UgZG9uJ3Qgd2FudCB0aGUgZGVmYXVsdCBtYWNybyBzZXQKKwlybSAtcmYgJHtEfS8ke2xpYmRpcn0vcnBtL3tpWzM0NTZdODYqLGF0aGxvbioscGVudGl1bSoseDg2XzY0KixhbHBoYSosc3BhcmMqLGlhNjQqLHBwYyosczM5MCosYXJtdlszNF1bbGJdKixhcm12WzM0NV0qLG1pcHMqLG5vYXJjaCp9CisKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vZGJjb252ZXJ0LnNoCisKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbGlic3FsZGIuKgorCisJIyBXZSBkb24ndCB3YW50LCBub3IgbmVlZCB0aGUgTWFuZHJpdmEgbXVsdGlhcmNoIGl0ZW1zCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vbXVsdGlhcmNoLWRpc3BhdGNoCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vbXVsdGlhcmNoLXBsYXRmb3JtCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2NoZWNrLW11bHRpYXJjaC1maWxlcworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9ta211bHRpYXJjaAorCXJtIC1mICR7RH0vJHtpbmNsdWRlZGlyfS9tdWx0aWFyY2gtZGlzcGF0Y2guaAorCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2dzdHJlYW1lci5zaAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9nZW1faGVscGVyLnJiCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL3J1YnlnZW1zLnJiCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2ttb2QtZGVwcy5zaAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9weXRob25lZ2dzLnB5CisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2tlcm5lbAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9nc3RyZWFtZXIKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL21nbworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vZGJjb252ZXJ0CisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9wb20yc3BlYworCisJcm0gLXJmICR7RH0vdmFyL2xpYi93ZGogJHtEfS92YXIvY2FjaGUvd2RqCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9hcGktc2FuaXR5LWNoZWNrZXIucGwKKworfQorCithZGRfbmF0aXZlX3dyYXBwZXIoKSB7CisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbSBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbTJjcGlvIFwKKwkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtYnVpbGQgXAorCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG1jb25zdGFudCBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCisJZm9yIHJwbV9iaW5hcnkgaW4gJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9ycG0qICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vZGVidWdlZGl0OyBkbworICAgICAgICAJY3JlYXRlX3dyYXBwZXIgJHJwbV9iaW5hcnkgXAorCQkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKwlkb25lCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlhZGRfbmF0aXZlX3dyYXBwZXIKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCWFkZF9uYXRpdmVfd3JhcHBlcgorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzUuNC4xNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNS40LjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOWE0YmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzUuNC4xNC5iYgpAQCAtMCwwICsxLDUxNiBAQAorU1VNTUFSWSA9ICJUaGUgUlBNIHBhY2thZ2UgbWFuYWdlbWVudCBzeXN0ZW0iCitERVNDUklQVElPTiA9ICJUaGUgUlBNIFBhY2thZ2UgTWFuYWdlciAoUlBNKSBpcyBhIHBvd2VyZnVsIGNvbW1hbmQgbGluZSBkcml2ZW4gXAorcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbSBjYXBhYmxlIG9mIGluc3RhbGxpbmcsIHVuaW5zdGFsbGluZywgXAordmVyaWZ5aW5nLCBxdWVyeWluZywgYW5kIHVwZGF0aW5nIHNvZnR3YXJlIHBhY2thZ2VzLiBFYWNoIHNvZnR3YXJlIFwKK3BhY2thZ2UgY29uc2lzdHMgb2YgYW4gYXJjaGl2ZSBvZiBmaWxlcyBhbG9uZyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IFwKK3RoZSBwYWNrYWdlIGxpa2UgaXRzIHZlcnNpb24sIGEgZGVzY3JpcHRpb24sIGV0Yy4iCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIjUuNC4xNSBoYXMgYSBwYWNrYWdlIGRhdGFiYXNlIGlzc3VlOiBodHRwOi8vbGlzdHMub3BlbmVtYmVkZGVkLm9yZy9waXBlcm1haWwvb3BlbmVtYmVkZGVkLWNvcmUvMjAxNS1BdWd1c3QvMTA5MTg3Lmh0bWwiCisKK1NVTU1BUllfJHtQTn0tbGlicyA9ICJMaWJyYXJpZXMgZm9yIG1hbmlwdWxhdGluZyBSUE0gcGFja2FnZXMiCitERVNDUklQVElPTl8ke1BOfS1saWJzID0gIlRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgUlBNIHNoYXJlZCBsaWJyYXJpZXMuIgorCitTVU1NQVJZXyR7UE59LWRldiA9ICJEZXZlbG9wbWVudCBmaWxlcyBmb3IgbWFuaXB1bGF0aW5nIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWRldiA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIFJQTSBDIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcy4gVGhlc2UgXAorZGV2ZWxvcG1lbnQgZmlsZXMgd2lsbCBzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiB3cml0aW5nIHByb2dyYW1zIHRoYXQgXAorbWFuaXB1bGF0ZSBSUE0gcGFja2FnZXMgYW5kIGRhdGFiYXNlcy4gVGhlc2UgZmlsZXMgYXJlIGludGVuZGVkIHRvIFwKK3NpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIGdyYXBoaWNhbCBwYWNrYWdlIG1hbmFnZXJzIG9yIGFueSBcCitvdGhlciB0b29scyB0aGF0IG5lZWQgYW4gaW50aW1hdGUga25vd2xlZGdlIG9mIFJQTSBwYWNrYWdlcyBpbiBvcmRlciBcCit0byBmdW5jdGlvbi4iCisKK1NVTU1BUllfJHtQTn0tY29tbW9uID0gIkNvbW1vbiBSUE0gcGF0aHMsIHNjcmlwdHMsIGRvY3VtZW50YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24iCitERVNDUklQVElPTl8ke1BOfS1jb21tb24gPSAiVGhlIHJwbS1jb21tb24gcGFja2FnZSBjb250YWlucyBwYXRocywgc2NyaXB0cywgZG9jdW1lbnRhdGlvbiBcCithbmQgY29uZmlndXJhdGlvbiBjb21tb24gYmV0d2VlbiBSUE0gUGFja2FnZSBNYW5hZ2VyLiIKKworU1VNTUFSWV8ke1BOfS1idWlsZCA9ICJTY3JpcHRzIGFuZCBleGVjdXRhYmxlIHByb2dyYW1zIHVzZWQgdG8gYnVpbGQgcGFja2FnZXMiCitERVNDUklQVElPTl8ke1BOfS1idWlsZCA9ICJUaGUgcnBtLWJ1aWxkIHBhY2thZ2VjIG9udGFpbnMgdGhlIHNjcmlwdHMgYW5kIGV4ZWN1dGFibGUgcHJvZ3JhbXMgXAordGhhdCBhcmUgdXNlZCB0byBidWlsZCBwYWNrYWdlcyB1c2luZyB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlci4iCisKK1NVTU1BUllfcHl0aG9uLXJwbSA9ICJQeXRob24gYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW51cHVsYXRlIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OX3B5dGhvbi1ycG0gPSAiVGhlIHJwbS1weXRob24gcGFja2FnZSBjb250YWlucyBhIG1vZHVsZSB0aGF0IHBlcm1pdHMgYXBwbGljYXRpb25zIFwKK3dyaXR0ZW4gaW4gdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSB0byB1c2UgdGhlIGludGVyZmFjZSBcCitzdXBwbGllZCBieSB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlciBsaWJyYXJpZXMuIgorCitTVU1NQVJZX3BlcmwtbW9kdWxlLXJwbSA9ICJQZXJsIGJpbmRpbmdzIGZvciBhcHBzIHdoaWNoIHdpbGwgbWFuaXB1bGF0ZSBSUE0gcGFja2FnZXMiCitERVNDUklQVElPTl9wZXJsLW1vZHVsZXMtcnBtID0gIlRoZSBwZXJsLW1vZHVsZXMtcnBtIHBhY2thZ2UgY29udGFpbnMgYSBtb2R1bGUgdGhhdCBwZXJtaXRzIGFwcGxpY2F0aW9ucyBcCit3cml0dGVuIGluIHRoZSBQZXJsIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIHVzZSB0aGUgaW50ZXJmYWNlIFwKK3N1cHBsaWVkIGJ5IHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIGxpYnJhcmllcy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9ycG01Lm9yZy8iCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitERVBFTkRTID0gImxpYnBjcmUgYXR0ciBhY2wgcG9wdCBvc3NwLXV1aWQgZmlsZSBieWFjYy1uYXRpdmUiCisKKyMgcnBtMmNwaW8gaXMgYSBzaGVsbCBzY3JpcHQsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHJwbSBzcmMucnBtLiAgSXQgaXMgbmVlZGVkCisjIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIGRpc3RyaWJ1dGlvbiBTUlBNIGludG8gYSBmb3JtYXQgd2UgY2FuIGV4dHJhY3QuLi4KK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5ycG01Lm9yZy9maWxlcy9ycG0vcnBtLTUuNC9ycG0tNS40LjE0LTAuMjAxMzEwMjQuc3JjLnJwbTtleHRyYWN0PXJwbS01LjQuMTQudGFyLmd6IFwKKwkgICBmaWxlOi8vcnBtLWxvZy1hdXRvLXJtLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWRiLXJlZHVjZS5wYXRjaCBcCisJICAgZmlsZTovL3BlcmZpbGVfcnBtZGVwcy5zaCBcCisJICAgZmlsZTovL3JwbS1hdXRvZ2VuLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWxpYnNxbC1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9oZWFkZXItaW5jbHVkZS1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGxhdGZvcm0ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tc2hvd3JjLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXRvb2xzLW10cmVlLUxERkxBR1MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZmlsZWNsYXNzLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWNhbm9uYXJjaC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1uby1sb29wbXNnLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXNjcmlwdGxldGV4ZWNoZWxwZXIucGF0Y2ggXAorCSAgIGZpbGU6Ly9weXRob25kZXBzLnNoIFwKKwkgICBmaWxlOi8vcnBtZGVwcy1vZWNvcmUucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcmVzb2x2ZWRlcC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1uby1wZXJsLXVycG0ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbWFjcm9zLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWx1YS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1vc3NwLXV1aWQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGFja2FnZW9yaWdpbi5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wa2djb25maWdkZXBzLnBhdGNoIFwKKwkgICBmaWxlOi8vdWNsaWJjLXN1cHBvcnQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG1hdGNoLnBhdGNoIFwKKwkgICBmaWxlOi8vZnN0YWNrLXByb3RlY3Rvci1jb25maWd1cmUtY2hlY2sucGF0Y2ggXAorCSAgIGZpbGU6Ly9kYmNvbnZlcnQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tdXVpZC1pbmNsdWRlLnBhdGNoIFwKKwkgICBmaWxlOi8vbWFrZWZpbGUtYW0tZXhlYy1ob29rLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWRiX2J1ZmZlcl9zbWFsbC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1weS1pbml0LnBhdGNoIFwKKwkgICBmaWxlOi8vcHl0aG9uLXJwbS1ycG1zZW5zZS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1yZWxvYy1tYWNyb3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGxhdGZvcm0yLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJlbW92ZS1zeWtjcGFyc2UtZGVjbC5wYXRjaCBcCisJICAgZmlsZTovL2RlYnVnZWRpdC1zZWd2LnBhdGNoIFwKKwkgICBmaWxlOi8vZGVidWdlZGl0LXZhbGlkLWZpbGUtdG8tZml4LXNlZ21lbnQtZmF1bHQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGxhdGZvcm0tZmlsZS1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbHNiLWNvbXBhdGliaWxpdHkucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tdGFnLWdlbmVyYXRlLWVuZGlhbi1jb252ZXJzaW9uLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3ZlcmlmeS1maXgtYnJva2VuLWxvZ2ljLWZvci1naG9zdC1hdm9pZGFuY2UtTWFyay1IYXQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0taGFyZGxpbmstc2VnZmF1bHQtZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXBheWxvYWQtdXNlLWhhc2hlZC1pbm9kZS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1maXgtbG9naW8tY3AucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZGI1LW9yLWRiNi5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1kaXNhYmxlLVduby1vdmVycmlkZS1pbml0LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtcXZfY2NfYl9nb25lLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJlYWxwYXRoLnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwMS11c2luZy1wb3B0UGFyc2VBcmd2U3RyaW5nLXRvLXBhcnNlLXRoZS1fZ3BnX2NoZWNrX3BhLnBhdGNoIFwKKwkgICBmaWxlOi8vbm8tbGRmbGFncy1pbi1wa2djb25maWcucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbHVhLWZpeC1wcmludC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1jaGVjay1yb290cGF0aC1yZWFzb25hYmxlbmVzcy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1tYWNyb3MuaW4tZGlzYWJsZS1leHRlcm5hbC1rZXktc2VydmVyLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW9wZW5kYi1iZWZvcmUtdmVyaWZ5c2NyaXB0LXRvLWF2b2lkLW51bGwtcG9pbnQucGF0Y2ggXAorCSAgIgorCisjIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gZW5hYmxlIHBsYXRmb3JtIHNjb3JlIGRlYnVnZ2luZworIyBUaGlzIGlzIHVzZWZ1bCB3aGVuIGlkZW50aWZ5aW5nIGlzc3VlcyB3aXRoIFNtYXJ0IGJlaW5nIHVuYWJsZQorIyB0byBwcm9jZXNzIGNlcnRhaW4gcGFja2FnZSBmZWVkcy4KKyNTUkNfVVJJICs9ICJmaWxlOi8vcnBtLWRlYnVnLXBsYXRmb3JtLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjUwOTNkMzk5YTBiNWQxMzQyZDI0OTAwYTkxYjM0N2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjc2ZTNhYjQxZjcyZTNiNTA0ZTA0MTA5Y2ZiNTY1YTMwMDc0MmY1NmE3ZGEwODRmMjAyMDEzYjMwZWVhZTQ2NyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCithY3BhdGhzID0gIi1JICR7U30vZGIvZGlzdC9hY2xvY2FsIC1JICR7U30vZGIvZGlzdC9hY2xvY2FsX2phdmEiCisKKyMgU3BlY2lmeSB0aGUgZGVmYXVsdCBycG0gbWFjcm9zIGluIHRlcm1zIG9mIGFkanVzdGFibGUgdmFyaWFibGVzCitycG1fbWFjcm9zID0gIiV7X3VzcmxpYnJwbX0vbWFjcm9zOiV7X3VzcmxpYnJwbX0vJHtESVNUUk99L21hY3Jvczole191c3JsaWJycG19LyR7RElTVFJPfS8le190YXJnZXR9L21hY3Jvczole19ldGNycG19L21hY3Jvcy4qOiV7X2V0Y3JwbX0vbWFjcm9zOiV7X2V0Y3JwbX0vJXtfdGFyZ2V0fS9tYWNyb3M6fi8ub2VycG1tYWNyb3MiCitycG1fbWFjcm9zX2NsYXNzLW5hdGl2ZSA9ICIle191c3JsaWJycG19L21hY3Jvczole191c3JsaWJycG19LyR7RElTVFJPfS9tYWNyb3M6JXtfdXNybGlicnBtfS8ke0RJU1RST30vJXtfdGFyZ2V0fS9tYWNyb3M6fi8ub2VycG1tYWNyb3MiCitycG1fbWFjcm9zX2NsYXNzLW5hdGl2ZXNkayA9ICIle191c3JsaWJycG19L21hY3Jvczole191c3JsaWJycG19LyR7RElTVFJPfS9tYWNyb3M6JXtfdXNybGlicnBtfS8ke0RJU1RST30vJXtfdGFyZ2V0fS9tYWNyb3M6fi8ub2VycG1tYWNyb3MiCisKKyMgc3FsaXRlIGx1YSB0Y2wgYXVnZWFzIG5zcyBnY3J5cHQgbmVvbiB4eiB4YXIga2V5dXRpbHMgcGVybCBzZWxpbnV4CisKKyMgTm90ZTogcGVybCBhbmQgc3FsaXRlIHcvbyBkYiBzcGVjaWZpZWQgZG9lcyBub3QgY3VycmVudGx5IHdvcmsuCisjICAgICAgIHRjbCwgYXVnZWFzLCBuc3MsIGdjcnlwdCwgeGFyIGFuZCBrZXl1dGlscyBzdXBwb3J0IGlzIHVudGVzdGVkLgorUEFDS0FHRUNPTkZJRyA/Pz0gImRiIGJ6aXAyIHpsaWIgYmVlY3J5cHQgb3BlbnNzbCBsaWJlbGYgcHl0aG9uIgorCitQQUNLQUdFQ09ORklHW2J6aXAyXSA9ICItLXdpdGgtYnppcDIsLS13aXRob3V0LWJ6aXAyLGJ6aXAyLCIKK1BBQ0tBR0VDT05GSUdbeHpdID0gIi0td2l0aC14eiwtLXdpdGhvdXQteHoseHosIgorUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYiwtLXdpdGhvdXQtemxpYix6bGliLCIKK1BBQ0tBR0VDT05GSUdbeGFyXSA9ICItLXdpdGgteGFyLC0td2l0aG91dC14YXIseGFyLCIKKworV0lUSF9QWVRIT04gPSAiIC0td2l0aC1weXRob249JHtQWVRIT05fQkFTRVZFUlNJT059IFwKKwkJLS13aXRoLXB5dGhvbi1pbmMtZGlyPSR7U1RBR0lOR19JTkNESVJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSBcCisJCS0td2l0aC1weXRob24tbGliLWRpcj0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMgXAorCQktLXdpdGhvdXQtcHl0aG9uZW1iZWQiCitQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiJHtXSVRIX1BZVEhPTn0sLS13aXRob3V0LXB5dGhvbixweXRob24sIgorCisjIFBlcmwgbW9kdWxlcyBhcmUgbm90IGJ1aWx0LCBidXQgdGhleSBjb3VsZCBiZSBlbmFibGVkIGZhaXJseSBlYXNpbHkKKyMgdGhlIHBlcmwgbW9kdWxlIGNyZWF0aW9uIGFuZCBpbnN0YWxsYXRpb24gd291bGQgbmVlZCB0byBiZSBwYXRjaGVkLgorIyAoY3VycmVudGx5IGhhcyBob3N0IHBlcmwgY29udGFtaW5hdGlvbiBpc3N1ZXMpCitXSVRIX1BFUkwgPSAiLS13aXRoLXBlcmwgLS13aXRob3V0LXBlcmxlbWJlZCAtLXdpdGhvdXQtcGVybC11cnBtIgorV0lUSE9VVF9QRVJMID0gIi0td2l0aG91dC1wZXJsIC0td2l0aG91dC1wZXJsLXVycG0iCitQQUNLQUdFQ09ORklHW3BlcmxdID0gIiR7V0lUSF9QRVJMfSwke1dJVEhPVVRfUEVSTH0scGVybCwiCisKKyMgVGhlIC0td2l0aC1kYnNxbCB3aWxsIG9ubHkgdGVsbCBSUE0gdG8gY2hlY2sgZm9yIHN1cHBvcnQsIGRiCisjIG1heSBvciBtYXkgbm90IGJlIGJ1aWx0IHcvIHRoZSBkYnNxbCBzdXBwb3J0LgorV0lUSF9EQiA9ICItLXdpdGgtZGIgLS13aXRoLWRic3FsIC0td2l0aG91dC1kYi10b29scy1pbnRlZ3JhdGVkIgorUEFDS0FHRUNPTkZJR1tkYl0gPSAiJHtXSVRIX0RCfSwtLXdpdGhvdXQtZGIsZGIsIgorCitQQUNLQUdFQ09ORklHW3NxbGl0ZV0gPSAiLS13aXRoLXNxbGl0ZSwtLXdpdGhvdXQtc3FsaXRlLHNxbGl0ZTMsIgorCitQQUNLQUdFQ09ORklHW2JlZWNyeXB0XSA9ICItLXdpdGgtYmVlY3J5cHQ9ZXh0ZXJuYWwsLS13aXRob3V0LWJlZWNyeXB0LGJlZWNyeXB0LCIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS13aXRoLW9wZW5zc2wsLS13aXRob3V0LW9wZW5zc2wsb3BlbnNzbCwiCitQQUNLQUdFQ09ORklHW25zc10gPSAiLS13aXRoLW5zcywtLXdpdGhvdXQtbnNzLG5zcywiCitQQUNLQUdFQ09ORklHW2djcnlwdF0gPSAiLS13aXRoLWdjcnlwdCwtLXdpdGhvdXQtZ2NyeXB0LGdjcnlwdCwiCitQQUNLQUdFQ09ORklHW2tleXV0aWxzXSA9ICItLXdpdGgta2V5dXRpbHMsLS13aXRob3V0LWtleXV0aWxzLGtleXV0aWxzLCIKK1BBQ0tBR0VDT05GSUdbbGliZWxmXSA9ICItLXdpdGgtbGliZWxmLC0td2l0aG91dC1saWJlbGYsZWxmdXRpbHMsIgorCitXSVRIX1NFTElOVVggPSAiLS13aXRoLXNlbGludXggLS13aXRoLXNlcG9sIC0td2l0aC1zZW1hbmFnZSIKK1dJVEhPVVRfU0VMSU5VWCA9ICItLXdpdGhvdXQtc2VsaW51eCAtLXdpdGhvdXQtc2Vwb2wgLS13aXRob3V0LXNlbWFuYWdlIgorUEFDS0FHRUNPTkZJR1tzZWxpbnV4XSA9ICIke1dJVEhfU0VMSU5VWH0sJHtXSVRIT1VUX1NFTElOVVh9LGxpYnNlbGludXgsIgorCitXSVRIX05FT04gPSAiLS13aXRoLW5lb24gLS13aXRoLWxpYnByb3h5IC0td2l0aC1leHBhdCAtLXdpdGhvdXQtZ3NzYXBpIgorV0lUSE9VVF9ORU9OID0gIi0td2l0aG91dC1uZW9uIC0td2l0aG91dC1saWJwcm94eSAtLXdpdGhvdXQtZXhwYXQgLS13aXRob3V0LWdzc2FwaSIKK1BBQ0tBR0VDT05GSUdbbmVvbl0gPSAiJHtXSVRIX05FT059LCR7V0lUSE9VVF9ORU9OfSxuZW9uIGV4cGF0LCIKKworUEFDS0FHRUNPTkZJR1tsdWFdID0gIi0td2l0aC1sdWEsLS13aXRob3V0LWx1YSxleHBhdCwiCitQQUNLQUdFQ09ORklHW3RjbF0gPSAiLS13aXRoLXRjbCwtLXdpdGhvdXQtdGNsLHRjbCwiCisKK1BBQ0tBR0VDT05GSUdbYXVnZWFzXSA9ICItLXdpdGgtYXVnZWFzLC0td2l0aG91dC1hdWdlYXMsYXVnZWFzLCIKKworRVhUUkFfT0VDT05GICs9ICItLXZlcmJvc2UgXAorCQktLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfSBcCisJCS0td2l0aC1maWxlIFwKKwkJLS13aXRoLXBhdGgtbWFnaWM9JXtfdXNybGlicnBtfS8uLi8uLi9zaGFyZS9taXNjL21hZ2ljLm1nYyBcCisJCS0td2l0aC1zeWNrPWludGVybmFsIFwKKwkJLS13aXRob3V0LXJlYWRsaW5lIFwKKwkJLS13aXRob3V0LWxpYnRhc24xIFwKKwkJLS13aXRob3V0LXBha2Nob2lzIFwKKwkJLS13aXRob3V0LWdudXRscyBcCisJCS0td2l0aC1wY3JlIFwKKwkJLS1lbmFibGUtdXRmOCBcCisJCS0td2l0aC11dWlkIFwKKwkJLS13aXRoLWF0dHIgXAorCQktLXdpdGgtYWNsIFwKKwkJLS13aXRoLXBvcHQ9ZXh0ZXJuYWwgXAorCQktLXdpdGgtcHRocmVhZHMgXAorCQktLXdpdGhvdXQtY3VkZiBcCisJCS0td2l0aG91dC1maWNsIFwKKwkJLS13aXRob3V0LWF0ZXJtIFwKKwkJLS13aXRob3V0LW5peCBcCisJCS0td2l0aG91dC1iYXNoIFwKKwkJLS13aXRob3V0LXJjIFwKKwkJLS13aXRob3V0LWpzIFwKKwkJLS13aXRob3V0LWdwc2VlIFwKKwkJLS13aXRob3V0LXJ1YnkgXAorCQktLXdpdGhvdXQtc3F1aXJyZWwgXAorCQktLXdpdGgtYnVpbGQtZXh0bGliZGVwIFwKKwkJLS13aXRoLWJ1aWxkLW1heGV4dGxpYmRlcCBcCisJCS0td2l0aG91dC12YWxncmluZCBcCisJCS0tZGlzYWJsZS1vcGVubXAgXAorCQktLWVuYWJsZS1idWlsZC1waWMgXAorCQktLWVuYWJsZS1idWlsZC12ZXJzaW9uc2NyaXB0IFwKKwkJLS1lbmFibGUtYnVpbGQtd2FybmluZ3MgXAorCQktLWVuYWJsZS1idWlsZC1kZWJ1ZyBcCisJCS0tZW5hYmxlLW1haW50YWluZXItbW9kZSBcCisJCS0td2l0aC1wYXRoLW1hY3Jvcz0ke3JwbV9tYWNyb3N9IFwKKwkJLS13aXRoLXBhdGgtbGliPSR7bGliZGlyfS9ycG0gXAorCQktLXdpdGgtYnVncmVwb3J0PWh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnIFwKKwkJLS1wcm9ncmFtLXByZWZpeD0gXAorCQlZQUNDPWJ5YWNjIgorCitDRkxBR1NfYXBwZW5kID0gIiAtRFJQTV9WRU5ET1JfV0lORFJJVkVSIC1EUlBNX1ZFTkRPUl9QT0tZIC1EUlBNX1ZFTkRPUl9PRSIKKworTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiLWxydCAtbHB0aHJlYWQiCisKK1BBQ0tBR0VTID0gIiR7UE59LWRiZyAke1BOfSAke1BOfS1kb2MgJHtQTn0tbGlicyAke1BOfS1kZXYgJHtQTn0tc3RhdGljZGV2ICR7UE59LWNvbW1vbiAke1BOfS1idWlsZCBweXRob24tcnBtIHBlcmwtbW9kdWxlLXJwbSAke1BOfS1sb2NhbGUiCisKK1NPTElCUyA9ICI1LjQuc28iCisKKyMgQmFzZWQgb24gJWZpbGVzIHNlY3Rpb24gaW4gdGhlIHJwbS5zcGVjCisKK0ZJTEVTXyR7UE59ID0gICIke2JpbmRpcn0vcnBtIFwKKwkJJHtiaW5kaXJ9L3JwbWNvbnN0YW50IFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG0uKiBcCisJCSR7bGliZGlyfS9ycG0vdGdwZyBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zIFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG1wb3B0IFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG0yY3BpbyBcCisJCSR7bGliZGlyfS9ycG0vdmNoZWNrIFwKKwkJJHtsaWJkaXJ9L3JwbS9oZWxwZXJzIFwKKwkJJHtsaWJkaXJ9L3JwbS9xZiBcCisJCSR7bGliZGlyfS9ycG0vY3B1aW5mby55YW1sIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vbXRyZWUgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1rZXkgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1yZXBvIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtcmVwby5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtc3BlY2R1bXAgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1zcGVjZHVtcC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vd2dldCBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUgXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL3JwbSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvd2RqIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9saWIgXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2xpYi9ycG0gXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2xpYi93ZGogXAorCQkke2JpbmRpcn0vcnBtLnJlYWwgXAorCQkke2JpbmRpcn0vcnBtY29uc3RhbnQucmVhbCBcCisJCSR7YmluZGlyfS9ycG0yY3Bpby5yZWFsIFwKKwkJIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9ycG0vLmRlYnVnIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vLmRlYnVnIFwKKwkJJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0vLmRlYnVnL18qIFwKKwkJIgorCitGSUxFU18ke1BOfS1jb21tb24gPSAiJHtiaW5kaXJ9L3JwbTJjcGlvIFwKKwkJJHtiaW5kaXJ9L2dlbmRpZmYgXAorCQkke3N5c2NvbmZkaXJ9L3JwbSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvcmVwYWNrYWdlIFwKKwkJIgorCitGSUxFU18ke1BOfS1saWJzID0gIiR7bGliZGlyfS9saWJycG0tKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1jb25zdGFudC0qLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtaW8tKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1taXNjLSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtYnVpbGQtKi5zbyBcCisJCSIKKworRklMRVNfJHtQTn0tYnVpbGQgPSAiJHtwcmVmaXh9L3NyYy9ycG0gXAorCQkke2JpbmRpcn0vcnBtYnVpbGQgXAorCQkke2JpbmRpcn0vcnBtYnVpbGQucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYnJwLSogXAorCQkke2xpYmRpcn0vcnBtL2NoZWNrLWZpbGVzIFwKKwkJJHtsaWJkaXJ9L3JwbS9jcm9zcy1idWlsZCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1kZWJ1Z2luZm8uc2ggXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtbGFuZy5zaCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1wcm92LnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLXByb3ZpZGVzLnBlcmwgXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtcmVxLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLXJlcXVpcmVzLnBlcmwgXAorCQkke2xpYmRpcn0vcnBtL2dldHBvLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9odHRwLnJlcSBcCisJCSR7bGliZGlyfS9ycG0vamF2YWRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL21vbm8tZmluZC1wcm92aWRlcyBcCisJCSR7bGliZGlyfS9ycG0vbW9uby1maW5kLXJlcXVpcmVzIFwKKwkJJHtsaWJkaXJ9L3JwbS9leGVjdXRhYmxlZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vbGlidG9vbGRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL29zZ2lkZXBzLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9wZXJsZGVwcy5wbCBcCisJCSR7bGliZGlyfS9ycG0vcGVybC5wcm92IFwKKwkJJHtsaWJkaXJ9L3JwbS9wZXJsLnJlcSBcCisJCSR7bGliZGlyfS9ycG0vcGhwLnByb3YgXAorCQkke2xpYmRpcn0vcnBtL3BocC5yZXEgXAorCQkke2xpYmRpcn0vcnBtL3BrZ2NvbmZpZ2RlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL3B5dGhvbmRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9kZWJ1Z2VkaXQgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9kZWJ1Z2VkaXQucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNhY2hlIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY2FjaGUucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNtcCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNtcC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcyBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMtb2Vjb3JlIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcy1vZWNvcmUucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRpZ2VzdCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRpZ2VzdC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vYWJpLWNvbXBsaWFuY2UtY2hlY2tlci5wbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2FwaS1zYW5pdHktYXV0b3Rlc3QucGwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9jaHJvb3QgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9jcCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2Ric3FsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vZmluZCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2luc3RhbGwtc2ggXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9sdWEgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9sdWFjIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vbWtpbnN0YWxsZGlycyBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWx1YSBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWx1YWMgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9zcWxpdGUzIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9jbWFrZSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvamF2YSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvbGlidG9vbCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvbWFuZHJpdmEgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL21vbm8gXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3BlcmwgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3BocCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcGtnY29uZmlnIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9weXRob24gXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3J1YnkgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3NlbGludXggXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3RjbCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLnJwbWJ1aWxkIFwKKwkJJHtsaWJkaXJ9L3JwbS91X3BrZy5zaCBcCisJCSR7bGliZGlyfS9ycG0vdnBrZy1wcm92aWRlcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vdnBrZy1wcm92aWRlczIuc2ggXAorCQkke2xpYmRpcn0vcnBtL3BlcmZpbGVfcnBtZGVwcy5zaCBcCisJCSIKK1JERVBFTkRTXyR7UE59ID0gImJhc2UtZmlsZXMgcnVuLXBvc3RpbnN0cyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorUkRFUEVORFNfJHtQTn0tYnVpbGQgPSAiZmlsZSBiYXNoIHBlcmwiCisKK1JERVBFTkRTX3B5dGhvbi1ycG0gPSAiJHtQTn0iCisKK0ZJTEVTX3B5dGhvbi1ycG0gPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0iCitQUk9WSURFUyArPSAicHl0aG9uLXJwbSIKKworRklMRVNfcGVybC1tb2R1bGUtcnBtID0gIiR7bGliZGlyfS9wZXJsLyovKiBcCisJCSIKKworUkRFUEVORFNfJHtQTn0tZGV2ICs9ICJiYXNoIgorCitGSUxFU18ke1BOfS1kZXYgPSAiJHtpbmNsdWRlZGlyfS9ycG0gXAorCQkke2xpYmRpcn0vbGlicnBtLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbS5zbyBcCisJCSR7bGliZGlyfS9saWJycG1jb25zdGFudC5sYSBcCisJCSR7bGliZGlyfS9saWJycG1jb25zdGFudC5zbyBcCisJCSR7bGliZGlyfS9saWJycG1kYi5sYSBcCisJCSR7bGliZGlyfS9saWJycG1kYi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1pby5sYSBcCisJCSR7bGliZGlyfS9saWJycG1pby5zbyBcCisJCSR7bGliZGlyfS9saWJycG1taXNjLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbW1pc2Muc28gXAorCQkke2xpYmRpcn0vbGlicnBtYnVpbGQubGEgXAorCQkke2xpYmRpcn0vbGlicnBtYnVpbGQuc28gXAorCQkke2xpYmRpcn0vcnBtL2xpYi9saWJsdWEubGEgXAorCQkke2xpYmRpcn0vcGtnY29uZmlnL3JwbS5wYyBcCisJCSR7bGliZGlyfS9ycG0vcnBtZGJfbG9hZGN2dCBcCisJCSIKKworRklMRVNfJHtQTn0tc3RhdGljZGV2ID0gIiBcCisJCSR7bGliZGlyfS9saWJycG0uYSBcCisJCSR7bGliZGlyfS9saWJycG1jb25zdGFudC5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLmEgXAorCQkke2xpYmRpcn0vbGlicnBtaW8uYSBcCisJCSR7bGliZGlyfS9saWJycG1taXNjLmEgXAorCQkke2xpYmRpcn0vbGlicnBtYnVpbGQuYSBcCisJCSR7bGliZGlyfS9ycG0vbGliL2xpYmx1YS5hIFwKKwkJJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0vKi5hIFwKKwkJIgorCitkb19jb25maWd1cmUoKSB7CisJIyBEaXNhYmxlIHRlc3RzIQorCWVjaG8gImFsbDoiID4gJHtTfS90ZXN0cy9NYWtlZmlsZS5hbQorCXNlZCAtZSAncy9AX19NS0RJUl9QQC8le19fbWtkaXJ9IC1wLycgLWkgJHtTfS9tYWNyb3MvbWFjcm9zLmluCisKKwkoIGNkICR7U307ICR7U30vYXV0b2dlbi5zaCApCisKKwkjIE5BU1RZIGhhY2sgdG8gbWFrZSBzdXJlIGNvbmZpZ3VyZSBmaWxlcyB0aGUgcmlnaHQgcGtnLWNvbmZpZyBmaWxlLi4uCisJc2VkIC1lICdzL3BrZy1jb25maWcgLS1leGlzdHMgdXVpZC9wa2ctY29uZmlnIC0tZXhpc3RzIG9zc3AtdXVpZC9nJyBcCisJICAgIC1lICdzL3BrZy1jb25maWcgdXVpZC9wa2ctY29uZmlnIG9zc3AtdXVpZC9nJyAtaSAke1N9L2NvbmZpZ3VyZQorCisJKCBjZCAke1N9L3N5Y2sgOyBzZXQgK2UgOyBybSAtLSAtbCogOyBtYWtlIGRpc3RjbGVhbiApIHx8IDoKKworCWV4cG9ydCB2YXJwcmVmaXg9JHtsb2NhbHN0YXRlZGlyfQorCW9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJc2VkIC1pIC1lICdzLCVfX3NjcmlwdGxldF9yZXF1aXJlcywjJSVfX3NjcmlwdGxldF9yZXF1aXJlcywnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKKwlzZWQgLWkgLWUgJ3MsJV9fcGVybF9wcm92aWRlcywjJSVfX3BlcmxfcHJvdmlkZXMsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC8qCisJc2VkIC1pIC1lICdzLCVfX3BlcmxfcmVxdWlyZXMsIyUlX19wZXJsX3JlcXVpcmVzLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQvKgorCXNlZCAtaSAtZSAncywlX3JlcGFja2FnZV9hbGxfZXJhc3VyZXNbXl9dLiosJV9yZXBhY2thZ2VfYWxsX2VyYXN1cmVzIDAsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCisJc2VkIC1pIC1lICdzLF4jJV9vcGVuYWxsX2JlZm9yZV9jaHJvb3QuKiwlX29wZW5hbGxfYmVmb3JlX2Nocm9vdFx0MSwnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKKworCSMgRW5hYmxlIERlYmlhbiBzdHlsZSBhcmJpdHJhcnkgdGFncy4uLgorCXNlZCAtaSAtZSAncywlX2FyYml0cmFyeV90YWdzW15fXS4qLCVfYXJiaXRyYXJ5X3RhZ3MgJXtfYXJiaXRyYXJ5X3RhZ3NfZGViaWFufSwnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKKworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3B5dGhvbmRlcHMuc2ggJHtEfS8ke2xpYmRpcn0vcnBtL3B5dGhvbmRlcHMuc2gKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wZXJmaWxlX3JwbWRlcHMuc2ggJHtEfS8ke2xpYmRpcn0vcnBtL3BlcmZpbGVfcnBtZGVwcy5zaAorCisJIyBSZW1vdmUgdW5wYWNrYWdlZCBmaWxlcyAoYmFzZWQgb24gbGlzdCBpbiBycG0uc3BlYykKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0ve1NwZWNmaWxlLnBtLGNwYW5mbHV0ZSxjcGFuZmx1dGUyLHJwbWRpZmYscnBtZGlmZi5jZ2ksc3FsLnByb3Ysc3FsLnJlcSx0Y2wucmVxLHRycG19CisKKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW44L3JwbWNhY2hlLjgqCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuOC9ycG1ncmFwaC44KgorCXJtIC1mICR7RH0vJHttYW5kaXJ9LyovbWFuOC9ycG1jYWNoZS44KgorCXJtIC1mICR7RH0vJHttYW5kaXJ9LyovbWFuOC9ycG1ncmFwaC44KgorCXJtIC1yZiAke0R9LyR7bWFuZGlyfS97ZnIsa299CisKKwlybSAtZiAke0R9LyR7aW5jbHVkZWRpcn0vcG9wdC5oCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vbGlicG9wdC4qCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnL3BvcHQucGMKKwlybSAtZiAke0R9LyR7ZGF0YWRpcn0vbG9jYWxlLyovTENfTUVTU0FHRVMvcG9wdC5tbworCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjMvcG9wdC4zCisKKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW4xL3hhci4xKgorCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3hhcgorCXJtIC1yZiAke0R9LyR7aW5jbHVkZWRpcn0veGFyCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vbGlieGFyKgorCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vbHoqCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vdW5sem1hCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vdW54egorCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3h6KgorCXJtIC1yZiAke0R9LyR7aW5jbHVkZWRpcn0vbHptYSoKKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW4xL2x6Ki4xCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnL2xpYmx6bWEqCisKKwlybSAtZiAke0R9LyR7bGliZGlyfS9weXRob24le3dpdGhfcHl0aG9uX3ZlcnNpb259L3NpdGUtcGFja2FnZXMvKi57YSxsYX0KKwlybSAtZiAke0R9LyR7bGliZGlyfS9weXRob24le3dpdGhfcHl0aG9uX3ZlcnNpb259L3NpdGUtcGFja2FnZXMvcnBtLyoue2EsbGF9CisKKwkjZmluZCAke0R9LyR7bGliZGlyfS9wZXJsNSAtdHlwZSBmIC1hIFwoIC1uYW1lIHBlcmxsb2NhbC5wb2QgLW8gLW5hbWUgLnBhY2tsaXN0IFwKKwkjCS1vIFwoIC1uYW1lICcqLmJzJyAtYSAtZW1wdHkgXCkgXCkgLWV4ZWMgcm0gLWYge30gJzsnCisJI2ZpbmQgJHtEfS8ke2xpYmRpcn0vcGVybDUgLXR5cGUgZCAtZGVwdGggLWV4ZWMgcm1kaXIge30gMj4vZGV2L251bGwgJzsnCisKKwkjIFdlIGRvbid0IHdhbnQgdGhlIGRlZmF1bHQgbWFjcm8gc2V0CisJcm0gLXJmICR7RH0vJHtsaWJkaXJ9L3JwbS97aVszNDU2XTg2KixhdGhsb24qLHBlbnRpdW0qLHg4Nl82NCosYWxwaGEqLHNwYXJjKixpYTY0KixwcGMqLHMzOTAqLGFybXZbMzRdW2xiXSosYXJtdlszNDVdKixtaXBzKixub2FyY2gqfQorCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2RiY29udmVydC5zaAorCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2xpYnNxbGRiLioKKworCSMgV2UgZG9uJ3Qgd2FudCwgbm9yIG5lZWQgdGhlIE1hbmRyaXZhIG11bHRpYXJjaCBpdGVtcworCXJtIC1mICR7RH0vJHtiaW5kaXJ9L211bHRpYXJjaC1kaXNwYXRjaAorCXJtIC1mICR7RH0vJHtiaW5kaXJ9L211bHRpYXJjaC1wbGF0Zm9ybQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9jaGVjay1tdWx0aWFyY2gtZmlsZXMKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbWttdWx0aWFyY2gKKwlybSAtZiAke0R9LyR7aW5jbHVkZWRpcn0vbXVsdGlhcmNoLWRpc3BhdGNoLmgKKworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9nc3RyZWFtZXIuc2gKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vZ2VtX2hlbHBlci5yYgorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9ydWJ5Z2Vtcy5yYgorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9rbW9kLWRlcHMuc2gKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vcHl0aG9uZWdncy5weQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9rZXJuZWwKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQvZ3N0cmVhbWVyCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9tZ28KKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL2RiY29udmVydAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vcG9tMnNwZWMKKworCXJtIC1yZiAke0R9L3Zhci9saWIvd2RqICR7RH0vdmFyL2NhY2hlL3dkagorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vYXBpLXNhbml0eS1jaGVja2VyLnBsCisKK30KKworYWRkX25hdGl2ZV93cmFwcGVyKCkgeworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG0gXAorCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG0yY3BpbyBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbWJ1aWxkIFwKKwkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtY29uc3RhbnQgXAorCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKworCWZvciBycG1fYmluYXJ5IGluICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vcnBtKiAke0R9LyR7bGliZGlyfS9ycG0vYmluL2RlYnVnZWRpdDsgZG8KKyAgICAgICAgCWNyZWF0ZV93cmFwcGVyICRycG1fYmluYXJ5IFwKKwkJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisJZG9uZQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJYWRkX25hdGl2ZV93cmFwcGVyCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwlhZGRfbmF0aXZlX3dyYXBwZXIKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbXJlc29sdmUvcnBtcmVzb2x2ZS5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbXJlc29sdmUvcnBtcmVzb2x2ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNGNhZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtcmVzb2x2ZS9ycG1yZXNvbHZlLmMKQEAgLTAsMCArMSw0MjQgQEAKKy8qIE9wZW5FbWJlZGRlZCBSUE0gcmVzb2x2ZXIgdXRpbGl0eQorCisgIFdyaXR0ZW4gYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCisgIENvcHlyaWdodCAyMDEyIEludGVsIENvcnBvcmF0aW9uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgPHJwbWRiLmg+CisjaW5jbHVkZSA8cnBtdHlwZXMuaD4KKyNpbmNsdWRlIDxycG10YWcuaD4KKyNpbmNsdWRlIDxycG10cy5oPgorI2luY2x1ZGUgPHJwbW1hY3JvLmg+CisjaW5jbHVkZSA8cnBtY2IuaD4KKyNpbmNsdWRlIDxycG1sb2cuaD4KKyNpbmNsdWRlIDxhcmd2Lmg+CisjaW5jbHVkZSA8bWlyZS5oPgorCitpbnQgZGVidWdtb2RlOworRklMRSAqb3V0ZjsKKworaW50IGdldFBhY2thZ2VTdHIocnBtdHMgdHMsIGNvbnN0IGNoYXIgKk5WUkEsIHJwbVRhZyB0YWcsIGNoYXIgKip2YWx1ZSkKK3sKKyAgICBpbnQgcmMgPSAtMTsKKyAgICBycG1taSBtaSA9IHJwbXRzSW5pdEl0ZXJhdG9yKHRzLCBSUE1UQUdfTlZSQSwgTlZSQSwgMCk7CisgICAgSGVhZGVyIGg7CisgICAgaWYgKChoID0gcnBtbWlOZXh0KG1pKSkgIT0gTlVMTCkgeworICAgICAgICBIRV90IGhlID0gKEhFX3QpIG1lbXNldChhbGxvY2Eoc2l6ZW9mKCpoZSkpLCAwLCBzaXplb2YoKmhlKSk7CisgICAgICAgIGhlLT50YWcgPSB0YWc7CisgICAgICAgIHJjID0gKGhlYWRlckdldChoLCBoZSwgMCkgIT0gMSk7CisgICAgICAgIGlmKHJjPT0wKQorICAgICAgICAgICAgKnZhbHVlID0gc3RyZHVwKChjaGFyICopaGUtPnAucHRyKTsKKyAgICB9CisgICAgKHZvaWQpcnBtbWlGcmVlKG1pKTsKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBsb2FkVHMocnBtdHMgKip0cywgaW50ICp0c2N0LCBjb25zdCBjaGFyICpkYmxpc3RmbikKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIGludCBzeiA9IDU7CisgICAgaW50IHJjID0gMDsKKyAgICBpbnQgbGlzdGZpbGUgPSAxOworICAgIHN0cnVjdCBzdGF0IHN0X2J1ZjsKKworICAgIHJjID0gc3RhdChkYmxpc3RmbiwgJnN0X2J1Zik7CisgICAgaWYocmMgIT0gMCkgeworICAgICAgICBwZXJyb3IoInN0YXQiKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmKFNfSVNESVIoc3RfYnVmLnN0X21vZGUpKQorICAgICAgICBsaXN0ZmlsZSA9IDA7CisKKyAgICBpZihsaXN0ZmlsZSkgeworICAgICAgICBpZihkZWJ1Z21vZGUpCisgICAgICAgICAgICBwcmludGYoIkRFQlVHOiByZWFkaW5nIGRhdGFiYXNlIGxpc3QgZmlsZSAnJXMnXG4iLCBkYmxpc3Rmbik7CisgICAgICAgICp0cyA9IG1hbGxvYyhzeiAqIHNpemVvZihycG10cykpOworICAgICAgICBGSUxFICpmID0gZm9wZW4oZGJsaXN0Zm4sICJyIiApOworICAgICAgICBpZihmKSB7CisgICAgICAgICAgICBjaGFyIGxpbmVbMjA0OF07CisgICAgICAgICAgICB3aGlsZShmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbihsaW5lKSAtIDE7CisgICAgICAgICAgICAgICAgaWYobGVuID4gMCkKKyAgICAgICAgICAgICAgICAgICAgLy8gVHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlCisgICAgICAgICAgICAgICAgICAgIHdoaWxlKGxlbiA+IDAgJiYgaXNzcGFjZShsaW5lW2xlbl0pKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZVtsZW4tLV0gPSAnXDAnOworCisgICAgICAgICAgICAgICAgaWYobGVuID4gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBFeHBhbmQgYXJyYXkgaWYgbmVlZGVkCisgICAgICAgICAgICAgICAgICAgIGlmKGNvdW50ID09IHN6KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzeiArPSA1OworICAgICAgICAgICAgICAgICAgICAgICAgKnRzID0gKHJwbXRzICopcmVhbGxvYygqdHMsIHN6KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmKGRlYnVnbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiREVCVUc6IG9wZW5pbmcgZGF0YWJhc2UgJyVzJ1xuIiwgbGluZSk7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRicGF0aG0gPSBtYWxsb2Moc3RybGVuKGxpbmUpICsgMTApOworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGRicGF0aG0sICJfZGJwYXRoICVzIiwgbGluZSk7CisgICAgICAgICAgICAgICAgICAgIHJwbURlZmluZU1hY3JvKE5VTEwsIGRicGF0aG0sIFJNSUxfQ01ETElORSk7CisgICAgICAgICAgICAgICAgICAgIGZyZWUoZGJwYXRobSk7CisKKyAgICAgICAgICAgICAgICAgICAgcnBtdHMgdHNpID0gcnBtdHNDcmVhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgKCp0cylbY291bnRdID0gdHNpOworICAgICAgICAgICAgICAgICAgICByYyA9IHJwbXRzT3BlbkRCKHRzaSwgT19SRE9OTFkpOworICAgICAgICAgICAgICAgICAgICBpZiggcmMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlICVzXG4iLCBsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmNsb3NlKGYpOworICAgICAgICAgICAgKnRzY3QgPSBjb3VudDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBlcnJvcihkYmxpc3Rmbik7CisgICAgICAgICAgICByYyA9IC0xOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZihkZWJ1Z21vZGUpCisgICAgICAgICAgICBwcmludGYoIkRFQlVHOiBvcGVuaW5nIGRhdGFiYXNlICclcydcbiIsIGRibGlzdGZuKTsKKyAgICAgICAgLy8gTG9hZCBmcm9tIHNpbmdsZSBkYXRhYmFzZQorICAgICAgICAqdHMgPSBtYWxsb2Moc2l6ZW9mKHJwbXRzKSk7CisgICAgICAgIGNoYXIgKmRicGF0aG0gPSBtYWxsb2Moc3RybGVuKGRibGlzdGZuKSArIDEwKTsKKyAgICAgICAgc3ByaW50ZihkYnBhdGhtLCAiX2RicGF0aCAlcyIsIGRibGlzdGZuKTsKKyAgICAgICAgcnBtRGVmaW5lTWFjcm8oTlVMTCwgZGJwYXRobSwgUk1JTF9DTURMSU5FKTsKKyAgICAgICAgZnJlZShkYnBhdGhtKTsKKworICAgICAgICBycG10cyB0c2kgPSBycG10c0NyZWF0ZSgpOworICAgICAgICAoKnRzKVswXSA9IHRzaTsKKyAgICAgICAgcmMgPSBycG10c09wZW5EQih0c2ksIE9fUkRPTkxZKTsKKyAgICAgICAgaWYoIHJjICkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZSAlc1xuIiwgZGJsaXN0Zm4pOworICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgfQorICAgICAgICAqdHNjdCA9IDE7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQorCitpbnQgcHJvY2Vzc1BhY2thZ2VzKHJwbXRzICp0cywgaW50IHRzY291bnQsIGNvbnN0IGNoYXIgKnBhY2thZ2VsaXN0Zm4sIGludCBpZ25vcmVtaXNzaW5nKQoreworICAgIGludCByYyA9IDA7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBpbnQgc3ogPSAxMDA7CisgICAgaW50IGkgPSAwOworICAgIGludCBtaXNzaW5nID0gMDsKKworICAgIEZJTEUgKmYgPSBmb3BlbihwYWNrYWdlbGlzdGZuLCAiciIgKTsKKyAgICBpZihmKSB7CisgICAgICAgIGNoYXIgbGluZVsyNTVdOworICAgICAgICB3aGlsZShmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7CisgICAgICAgICAgICBpbnQgbGVuID0gc3RybGVuKGxpbmUpIC0gMTsKKyAgICAgICAgICAgIGlmKGxlbiA+IDApCisgICAgICAgICAgICAgICAgLy8gVHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlCisgICAgICAgICAgICAgICAgd2hpbGUobGVuID4gMCAmJiBpc3NwYWNlKGxpbmVbbGVuXSkpCisgICAgICAgICAgICAgICAgICAgIGxpbmVbbGVuLS1dID0gJ1wwJzsKKworICAgICAgICAgICAgaWYobGVuID4gMCkgeworICAgICAgICAgICAgICAgIGludCBmb3VuZCA9IDA7CisgICAgICAgICAgICAgICAgZm9yKGk9MDsgaTx0c2NvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQVJHVl90IGtleXMgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBycG1kYiBkYiA9IHJwbXRzR2V0UmRiKHRzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBycG1kYk1pcmVBcHBseShkYiwgUlBNVEFHX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJQTU1JUkVfU1RSQ01QLCBsaW5lLCAma2V5cyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChrZXlzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmtleXMgPSBhcmd2Q291bnQoa2V5cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiggbmtleXMgPT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp2YWx1ZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBnZXRQYWNrYWdlU3RyKHRzW2ldLCBrZXlzWzBdLCBSUE1UQUdfUEFDS0FHRU9SSUdJTiwgJnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyYyA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dGYsICIlc1xuIiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugb3JpZ2luIGZvciAlc1xuIiwgbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiggbmtleXMgPiAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlpbmRleCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJNdWx0aXBsZSBtYXRjaGVzIGZvciAlczpcbiIsIGxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcigga2V5aW5kZXg9MDsga2V5aW5kZXg8bmtleXM7IGtleWluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdmFsdWUgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IGdldFBhY2thZ2VTdHIodHNbaV0sIGtleXNba2V5aW5kZXhdLCBSUE1UQUdfUEFDS0FHRU9SSUdJTiwgJnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmMgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAlc1xuIiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgKCVzKVxuIiwga2V5c1trZXlpbmRleF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZihmb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmKCAhZm91bmQgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmKCBpZ25vcmVtaXNzaW5nICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gcmVzb2x2ZSBwYWNrYWdlICVzIC0gaWdub3JpbmdcbiIsIGxpbmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gcmVzb2x2ZSBwYWNrYWdlICVzXG4iLCBsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmcgPSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgICAgICBmY2xvc2UoZik7CisKKyAgICAgICAgaWYoIG1pc3NpbmcgKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBzb21lIHBhY2thZ2VzIHdlcmUgbWlzc2luZ1xuIik7CisgICAgICAgICAgICByYyA9IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHBlcnJvcihwYWNrYWdlbGlzdGZuKTsKKyAgICAgICAgcmMgPSAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBsb29rdXBQcm92aWRlcihycG10cyB0cywgY29uc3QgY2hhciAqcmVxLCBjaGFyICoqcHJvdmlkZXIpCit7CisgICAgaW50IHJjID0gMDsKKyAgICBycG1taSBwcm92bWkgPSBycG10c0luaXRJdGVyYXRvcih0cywgUlBNVEFHX1BST1ZJREVOQU1FLCByZXEsIDApOworICAgIGlmKHByb3ZtaSkgeworICAgICAgICBIZWFkZXIgaDsKKyAgICAgICAgaWYgKChoID0gcnBtbWlOZXh0KHByb3ZtaSkpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIEhFX3QgaGUgPSAoSEVfdCkgbWVtc2V0KGFsbG9jYShzaXplb2YoKmhlKSksIDAsIHNpemVvZigqaGUpKTsKKyAgICAgICAgICAgIGhlLT50YWcgPSBSUE1UQUdfTkFNRTsKKyAgICAgICAgICAgIHJjID0gKGhlYWRlckdldChoLCBoZSwgMCkgIT0gMSk7CisgICAgICAgICAgICBpZihyYz09MCkKKyAgICAgICAgICAgICAgICAqcHJvdmlkZXIgPSBzdHJkdXAoKGNoYXIgKiloZS0+cC5wdHIpOworICAgICAgICB9CisgICAgICAgICh2b2lkKXJwbW1pRnJlZShwcm92bWkpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmMgPSAtMTsKKyAgICB9CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgcHJpbnREZXBMaXN0KHJwbXRzICp0cywgaW50IHRzY291bnQpCit7CisgICAgaW50IHJjID0gMDsKKworICAgIGlmKCB0c2NvdW50ID4gMSApCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiPjEgZGF0YWJhc2Ugc3BlY2lmaWVkIHdpdGggZGVwZW5kZW5jeSBsaXN0LCB1c2luZyBmaXJzdCBvbmx5XG4iKTsKKworICAgIC8qIEdldCBsaXN0IG9mIG5hbWVzICovCisgICAgcnBtZGIgZGIgPSBycG10c0dldFJkYih0c1swXSk7CisgICAgQVJHVl90IG5hbWVzID0gTlVMTDsKKyAgICByYyA9IHJwbWRiTWlyZUFwcGx5KGRiLCBSUE1UQUdfTkFNRSwKKyAgICAgICAgICAgICAgICBSUE1NSVJFX1NUUkNNUCwgTlVMTCwgJm5hbWVzKTsKKyAgICBpbnQgbm5hbWVzID0gYXJndkNvdW50KG5hbWVzKTsKKworICAgIC8qIEdldCBsaXN0IG9mIE5WUkFzICovCisgICAgQVJHVl90IGtleXMgPSBOVUxMOworICAgIHJjID0gcnBtZGJNaXJlQXBwbHkoZGIsIFJQTVRBR19OVlJBLAorICAgICAgICAgICAgICAgIFJQTU1JUkVfU1RSQ01QLCBOVUxMLCAma2V5cyk7CisgICAgaWYgKGtleXMpIHsKKyAgICAgICAgaW50IGksIGo7CisgICAgICAgIEhFX3QgaGUgPSAoSEVfdCkgbWVtc2V0KGFsbG9jYShzaXplb2YoKmhlKSksIDAsIHNpemVvZigqaGUpKTsKKyAgICAgICAgaW50IG5rZXlzID0gYXJndkNvdW50KGtleXMpOworICAgICAgICBmb3IoaT0wOyBpPG5rZXlzOyBpKyspIHsKKyAgICAgICAgICAgIHJwbW1pIG1pID0gcnBtdHNJbml0SXRlcmF0b3IodHNbMF0sIFJQTVRBR19OVlJBLCBrZXlzW2ldLCAwKTsKKyAgICAgICAgICAgIEhlYWRlciBoOworICAgICAgICAgICAgaWYgKChoID0gcnBtbWlOZXh0KG1pKSkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIC8qIEdldCBuYW1lIG9mIHBhY2thZ2UgKi8KKyAgICAgICAgICAgICAgICBoZS0+dGFnID0gUlBNVEFHX05BTUU7CisgICAgICAgICAgICAgICAgcmMgPSAoaGVhZGVyR2V0KGgsIGhlLCAwKSAhPSAxKTsKKyAgICAgICAgICAgICAgICBjaGFyICpuYW1lID0gc3RyZHVwKChjaGFyICopaGUtPnAucHRyKTsKKyAgICAgICAgICAgICAgICAvKiBHZXQgaXRzIHJlcXVpcmVzICovCisgICAgICAgICAgICAgICAgaGUtPnRhZyA9IFJQTVRBR19SRVFVSVJFTkFNRTsKKyAgICAgICAgICAgICAgICBpZiAocmMgPSAoaGVhZGVyR2V0KGgsIGhlLCAwKSAhPSAxKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZGVidWdtb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkRFQlVHOiAlcyByZXF1aXJlcyBudWxsXG4iLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBUkdWX3QgcmVxcyA9IChBUkdWX3QpaGUtPnAucHRyOworICAgICAgICAgICAgICAgIC8qIEdldCBpdHMgcmVxdWlyZWZsYWdzICovCisgICAgICAgICAgICAgICAgaGUtPnRhZyA9IFJQTVRBR19SRVFVSVJFRkxBR1M7CisgICAgICAgICAgICAgICAgcmMgPSAoaGVhZGVyR2V0KGgsIGhlLCAwKSAhPSAxKTsKKyAgICAgICAgICAgICAgICBycG11aW50MzJfdCAqcmVxZmxhZ3MgPSAocnBtdWludDMyX3QgKiloZS0+cC51aTMycDsKKyAgICAgICAgICAgICAgICBmb3Ioaj0wOyBqPGhlLT5jOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGs7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgKnByb3YgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBmb3Ioaz0wOyBrPG5uYW1lczsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihzdHJjbXAobmFtZXNba10sIHJlcXNbal0pID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92ID0gbmFtZXNba107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYocHJvdikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKGludClyZXFmbGFnc1tqXSAmIDB4ODAwMDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihvdXRmLCAiJXN8JXMgW1JFQ11cbiIsIG5hbWUsIHByb3YpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYob3V0ZiwgIiVzfCVzXG4iLCBuYW1lLCBwcm92KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gbG9va3VwUHJvdmlkZXIodHNbMF0sIHJlcXNbal0sICZwcm92KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJjPT0wICYmIHByb3YpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigoaW50KXJlcWZsYWdzW2pdICYgMHg4MDAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihvdXRmLCAiJXN8JXMgW1JFQ11cbiIsIG5hbWUsIHByb3YpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihvdXRmLCAiJXN8JXNcbiIsIG5hbWUsIHByb3YpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUocHJvdik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZnJlZShuYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICh2b2lkKXJwbW1pRnJlZShtaSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3ZvaWQgdXNhZ2UoKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiT3BlbkVtYmVkZGVkIHJwbSByZXNvbHZlciB1dGlsaXR5XG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInN5bnRheDogcnBtcmVzb2x2ZSBbLWldIFstZF0gWy10XSA8ZGJsaXN0ZmlsZT4gPHBhY2thZ2VsaXN0ZmlsZT5cbiIpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgcnBtdHMgKnRzID0gTlVMTDsKKyAgICBpbnQgdHNjb3VudCA9IDA7CisgICAgaW50IHJjID0gMDsKKyAgICBpbnQgaTsKKyAgICBpbnQgYzsKKyAgICBpbnQgaWdub3JlbWlzc2luZyA9IDA7CisgICAgaW50IGRlcGxpc3Rtb2RlID0gMDsKKyAgICBjaGFyICpvdXRmaWxlID0gTlVMTDsKKworICAgIGRlYnVnbW9kZSA9IDA7CisgICAgb3V0ZiA9IHN0ZG91dDsKKworICAgIG9wdGVyciA9IDA7CisgICAgd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiaXRkbzoiKSkgIT0gLTEpIHsKKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgICBjYXNlICdpJzoKKyAgICAgICAgICAgICAgICBpZ25vcmVtaXNzaW5nID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgICAgIGRlcGxpc3Rtb2RlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgICAgIGRlYnVnbW9kZSA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgICAgICBvdXRmaWxlID0gc3RyZHVwKG9wdGFyZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICc/JzoKKyAgICAgICAgICAgICAgICBpZihpc3ByaW50KG9wdG9wdCkpCisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBvcHRpb24gYC0lYycuXG4iLCBvcHRvcHQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbiBjaGFyYWN0ZXIgYFxceCV4Jy5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRvcHQpOworICAgICAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGFib3J0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggYXJnYyAtIG9wdGluZCA8IDEgKSB7CisgICAgICAgIHVzYWdlKCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmKCBvdXRmaWxlICkgeworICAgICAgICBpZihkZWJ1Z21vZGUpCisgICAgICAgICAgICBwcmludGYoIkRFQlVHOiBVc2luZyBvdXRwdXQgZmlsZSAlc1xuIiwgb3V0ZmlsZSk7CisgICAgICAgIG91dGYgPSBmb3BlbihvdXRmaWxlLCAidyIpOworICAgIH0KKworICAgIGNvbnN0IGNoYXIgKmRibGlzdGZuID0gYXJndltvcHRpbmRdOworCisgICAgcnBtY2xpSW5pdChhcmdjLCBhcmd2LCBOVUxMKTsKKworICAgIGlmKGRlYnVnbW9kZSkKKyAgICAgICAgcnBtU2V0VmVyYm9zaXR5KFJQTUxPR19ERUJVRyk7CisKKyAgICBycG1EZWZpbmVNYWNybyhOVUxMLCAiX19kYmlfdHhuIGNyZWF0ZSBub2ZzeW5jIiwgUk1JTF9DTURMSU5FKTsKKworICAgIHJjID0gbG9hZFRzKCZ0cywgJnRzY291bnQsIGRibGlzdGZuKTsKKyAgICBpZiggcmMgKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiggdHNjb3VudCA9PSAwICkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBsZWFzZSBzcGVjaWZ5IGRhdGFiYXNlIGxpc3QgZmlsZSBvciBkYXRhYmFzZSBsb2NhdGlvblxuIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmKGRlcGxpc3Rtb2RlKSB7CisgICAgICAgIHJjID0gcHJpbnREZXBMaXN0KHRzLCB0c2NvdW50KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmKCBhcmdjIC0gb3B0aW5kIDwgMiApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUGxlYXNlIHNwZWNpZnkgcGFja2FnZSBsaXN0IGZpbGVcbiIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29uc3QgY2hhciAqcGtnbGlzdGZuID0gYXJndltvcHRpbmQrMV07CisgICAgICAgICAgICByYyA9IHByb2Nlc3NQYWNrYWdlcyh0cywgdHNjb3VudCwgcGtnbGlzdGZuLCBpZ25vcmVtaXNzaW5nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvcihpPTA7IGk8dHNjb3VudDsgaSsrKQorICAgICAgICAodm9pZCkgcnBtdHNDbG9zZURCKHRzW2ldKTsKKyAgICBmcmVlKHRzKTsKKworICAgIGlmKCBvdXRmaWxlICkgeworICAgICAgICBmY2xvc2Uob3V0Zik7CisgICAgICAgIGZyZWUob3V0ZmlsZSk7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbXJlc29sdmVfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbXJlc29sdmVfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YTU1ZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtcmVzb2x2ZV8xLjAuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJPcGVuRW1iZWRkZWQgUlBNIHJlc29sdmVyIHV0aWxpdHkiCitERVNDUklQVElPTiA9ICJPcGVuRW1iZWRkZWQgUlBNIHJlc29sdmVyIC0gcGVyZm9ybXMgUlBNIGRhdGFiYXNlIGxvb2t1cHMgaW4gYmF0Y2hlcyB0byBhdm9pZCBcCisgcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2YgcnBtIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorREVQRU5EUyA9ICJycG0iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L0dQTC0yLjA7bWQ1PTgwMWY4MDk4MGQxNzFkZDY0MjU2MTA4MzNhMjJkYmU2IgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiZmlsZTovL3JwbXJlc29sdmUuYyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19jb21waWxlKCkgeworCSR7Q0N9ICR7Q0ZMQUdTfSAtZ2dkYiAtSSR7U1RBR0lOR19JTkNESVJ9L3JwbSAke0xERkxBR1N9IHJwbXJlc29sdmUuYyAtbyBycG1yZXNvbHZlIC1scnBtYnVpbGQgLWxycG0gLWxycG1pbyAtbHJwbWRiIC1scG9wdAorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSBycG1yZXNvbHZlICR7RH0ke2JpbmRpcn0KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbXJlc29sdmUgXAorCQkJUlBNX1VTUkxJQlJQTT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vcnBtIFwKKwkJCVJQTV9FVENSUE09JHtTVEFHSU5HX0VUQ0RJUl9OQVRJVkV9L3JwbSBcCisJCQlSUE1fTE9DQUxFRElSUlBNPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vbG9jYWxlCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL2ZpbGVzL2FjaW5jbHVkZS5tNCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL2ZpbGVzL2FjaW5jbHVkZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzViNDFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvZmlsZXMvYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsOTUgQEAKK2RubCB2ZXJiYXRpbSByZW5hbWVkIGZyb20gYWNsb2NhbC5tNCBpbiByc3luY18zLjAuNworZG5sIDA3LzA2LzIwMTAgLSBxaGUKKworZG5sIEFDX1ZBTElEQVRFX0NBQ0hFX1NZU1RFTV9UWVBFWyhjbWQpXQorZG5sIGlmIHRoZSBjYWNoZSBmaWxlIGlzIGluY29uc2lzdGVudCB3aXRoIHRoZSBjdXJyZW50IGhvc3QsCitkbmwgdGFyZ2V0IGFuZCBidWlsZCBzeXN0ZW0gdHlwZXMsIGV4ZWN1dGUgQ01EIG9yIHByaW50IGEgZGVmYXVsdAorZG5sIGVycm9yIG1lc3NhZ2UuCitBQ19ERUZVTihBQ19WQUxJREFURV9DQUNIRV9TWVNURU1fVFlQRSwgWworICAgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9TWVNURU1dKQorICAgIEFDX01TR19DSEVDS0lORyhbY29uZmlnLmNhY2hlIHN5c3RlbSB0eXBlXSkKKyAgICBpZiB7IHRlc3QgeCIke2FjX2N2X2hvc3Rfc3lzdGVtX3R5cGUrc2V0fSIgPSB4InNldCIgJiYKKyAgICAgICAgIHRlc3QgeCIkYWNfY3ZfaG9zdF9zeXN0ZW1fdHlwZSIgIT0geCIkaG9zdCI7IH0gfHwKKyAgICAgICB7IHRlc3QgeCIke2FjX2N2X2J1aWxkX3N5c3RlbV90eXBlK3NldH0iID0geCJzZXQiICYmCisgICAgICAgICB0ZXN0IHgiJGFjX2N2X2J1aWxkX3N5c3RlbV90eXBlIiAhPSB4IiRidWlsZCI7IH0gfHwKKyAgICAgICB7IHRlc3QgeCIke2FjX2N2X3RhcmdldF9zeXN0ZW1fdHlwZStzZXR9IiA9IHgic2V0IiAmJgorICAgICAgICAgdGVzdCB4IiRhY19jdl90YXJnZXRfc3lzdGVtX3R5cGUiICE9IHgiJHRhcmdldCI7IH07IHRoZW4KKwlBQ19NU0dfUkVTVUxUKFtkaWZmZXJlbnRdKQorCWlmZWxzZSgkIywgMSwgWyQxXSwKKwkJW0FDX01TR19FUlJPUihbInlvdSBtdXN0IHJlbW92ZSBjb25maWcuY2FjaGUgYW5kIHJlc3RhcnQgY29uZmlndXJlIl0pXSkKKyAgICBlbHNlCisJQUNfTVNHX1JFU1VMVChbc2FtZV0pCisgICAgZmkKKyAgICBhY19jdl9ob3N0X3N5c3RlbV90eXBlPSIkaG9zdCIKKyAgICBhY19jdl9idWlsZF9zeXN0ZW1fdHlwZT0iJGJ1aWxkIgorICAgIGFjX2N2X3RhcmdldF9zeXN0ZW1fdHlwZT0iJHRhcmdldCIKK10pCisKK2RubCBDaGVjayBmb3Igc29ja2xlbl90OiBoaXN0b3JpY2FsbHkgb24gQlNEIGl0IGlzIGFuIGludCwgYW5kIGluCitkbmwgUE9TSVggMWcgaXQgaXMgYSB0eXBlIG9mIGl0cyBvd24sIGJ1dCBzb21lIHBsYXRmb3JtcyB1c2UgZGlmZmVyZW50CitkbmwgdHlwZXMgZm9yIHRoZSBhcmd1bWVudCB0byBnZXRzb2Nrb3B0LCBnZXRwZWVybmFtZSwgZXRjLiAgU28gd2UKK2RubCBoYXZlIHRvIHRlc3QgdG8gZmluZCBzb21ldGhpbmcgdGhhdCB3aWxsIHdvcmsuCisKK2RubCBUaGlzIGlzIG5vIGdvb2QsIGJlY2F1c2UgcGFzc2luZyB0aGUgd3JvbmcgcG9pbnRlciBvbiBDIGNvbXBpbGVycyBpcworZG5sIGxpa2VseSB0byBvbmx5IGdlbmVyYXRlIGEgd2FybmluZywgbm90IGFuIGVycm9yLiAgV2UgZG9uJ3QgY2FsbCB0aGlzIGF0CitkbmwgdGhlIG1vbWVudC4KKworQUNfREVGVU4oW1RZUEVfU09DS0xFTl9UXSwKK1sKKyAgIEFDX0NIRUNLX1RZUEUoW3NvY2tsZW5fdF0sICxbCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzb2NrbGVuX3QgZXF1aXZhbGVudF0pCisgICAgICBBQ19DQUNIRV9WQUwoW3JzeW5jX2N2X3NvY2tsZW5fdF9lcXVpdl0sCisgICAgICBbCisgICAgICAgICAjIFN5c3RlbXMgaGF2ZSBlaXRoZXIgInN0cnVjdCBzb2NrYWRkciAqIiBvcgorICAgICAgICAgIyAidm9pZCAqIiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGdldHBlZXJuYW1lCisgICAgICAgICByc3luY19jdl9zb2NrbGVuX3RfZXF1aXY9CisgICAgICAgICBmb3IgYXJnMiBpbiAic3RydWN0IHNvY2thZGRyIiB2b2lkOyBkbworICAgICAgICAgICAgZm9yIHQgaW4gaW50IHNpemVfdCB1bnNpZ25lZCBsb25nICJ1bnNpZ25lZCBsb25nIjsgZG8KKyAgICAgICAgICAgICAgIEFDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKyAgICAgICAgICAgICAgICAgIGludCBnZXRwZWVybmFtZSAoaW50LCAkYXJnMiAqLCAkdCAqKTsKKyAgICAgICAgICAgICAgIF0sWworICAgICAgICAgICAgICAgICAgJHQgbGVuOworICAgICAgICAgICAgICAgICAgZ2V0cGVlcm5hbWUoMCwwLCZsZW4pOworICAgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgICAgICByc3luY19jdl9zb2NrbGVuX3RfZXF1aXY9IiR0IgorICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICBkb25lCisgICAgICAgICBkb25lCisKKyAgICAgICAgIGlmIHRlc3QgIngkcnN5bmNfY3Zfc29ja2xlbl90X2VxdWl2IiA9IHg7IHRoZW4KKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbQ2Fubm90IGZpbmQgYSB0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBzb2NrbGVuX3RdKQorICAgICAgICAgZmkKKyAgICAgIF0pCisgICAgICBBQ19NU0dfUkVTVUxUKCRyc3luY19jdl9zb2NrbGVuX3RfZXF1aXYpCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoc29ja2xlbl90LCAkcnN5bmNfY3Zfc29ja2xlbl90X2VxdWl2LAorCQkJW3R5cGUgdG8gdXNlIGluIHBsYWNlIG9mIHNvY2tsZW5fdCBpZiBub3QgZGVmaW5lZF0pXSwKKyAgICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl0pCitdKQorCitkbmwgQUNfSEFWRV9UWVBFKFRZUEUsSU5DTFVERVMpCitBQ19ERUZVTihbQUNfSEFWRV9UWVBFXSwgWworQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorY3Y9YGVjaG8gIiQxIiB8IHNlZCAneSUuLystICVfX3BfXyUnYAorQUNfTVNHX0NIRUNLSU5HKGZvciAkMSkKK0FDX0NBQ0hFX1ZBTChbYWNfY3ZfdHlwZV8kY3ZdLAorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworQUNfSU5DTFVERVNfREVGQVVMVAorJDJdXSwKK1tbJDEgZm9vO11dKV0sCitbZXZhbCAiYWNfY3ZfdHlwZV8kY3Y9eWVzIl0sCitbZXZhbCAiYWNfY3ZfdHlwZV8kY3Y9bm8iXSkpZG5sCithY19mb289YGV2YWwgZWNobyBcXCRhY19jdl90eXBlXyRjdmAKK0FDX01TR19SRVNVTFQoJGFjX2ZvbykKK2lmIHRlc3QgIiRhY19mb28iID0geWVzOyB0aGVuCisgIGFjX3RyX2hkcj1IQVZFX2BlY2hvICQxIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tICVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX18lJ2AKK2lmIGZhbHNlOyB0aGVuCisJQUNfQ0hFQ0tfVFlQRVMoJDEpCitmaQorICBBQ19ERUZJTkVfVU5RVU9URUQoJGFjX3RyX2hkciwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0eXBlIGAkMSddKQorZmkKK10pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9maWxlcy9yc3luY2QuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL2ZpbGVzL3JzeW5jZC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NWY1YjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9maWxlcy9yc3luY2QuY29uZgpAQCAtMCwwICsxLDE1IEBACisjIC9ldGMvcnN5bmNkLmNvbmYKKworIyBNaW5pbWFsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgcnN5bmMgZGFlbW9uCisjIFNlZSByc3luYygxKSBhbmQgcnN5bmNkLmNvbmYoNSkgbWFuIHBhZ2VzIGZvciBoZWxwCisKKyMgVGhpcyBmaWxlIGlzIHJlcXVpcmVkIGJ5IHJzeW5jIC0tZGFlbW9uCitwaWQgZmlsZSA9IC92YXIvcnVuL3JzeW5jZC5waWQKK3VzZSBjaHJvb3QgPSB5ZXMKK3JlYWQgb25seSA9IHllcworCisjIFNpbXBsZSBleGFtcGxlIGZvciBlbmFibGluZyB5b3VyIG93biBsb2NhbCByc3luYyBzZXJ2ZXIKKyNbZXZlcnl0aGluZ10KKyMJcGF0aCA9IC8KKyMJY29tbWVudCA9IEV2ZXJ5dGhpbmcgZXhjZXB0IC9ldGMgZXhwb3NlZAorIwlleGNsdWRlID0gL2V0YwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMi42LjkvcnN5bmMtMi42LjktZm5hbWUtb2JvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMi42LjkvcnN5bmMtMi42LjktZm5hbWUtb2JvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNTQ0NTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0yLjYuOS9yc3luYy0yLjYuOS1mbmFtZS1vYm8ucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbIFRoZSBwYXRjaCBpcyByc3luYy0yLjYuOSBzcGVjaWZpYyBdCisKK1RoZSBwYXRjaCBpcyBmcm9tIGh0dHBzOi8vaXNzdWVzLnJwYXRoLmNvbS9icm93c2UvUlBMLTE2NDcgYW5kIGlzIHVzZWQgdG8KK2FkZHJlc3MgaHR0cDovL3dlYi5udmQubmlzdC5nb3Yvdmlldy92dWxuL2RldGFpbD92dWxuSWQ9Q1ZFLTIwMDctNDA5MQorCitEYXRlOiAgIFR1ZSBNYXkgMTAgMTA6MDc6MzYgMjAxMSArMDgwMAorRGV4dWFuIEN1aSA8ZGV4dWFuLmN1aUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9zZW5kZXIuYyBiL3NlbmRlci5jCitpbmRleCA2ZmNhYTY1Li4wNTNhOGYxIDEwMDY0NAorLS0tIGEvc2VuZGVyLmMKKysrKyBiL3NlbmRlci5jCitAQCAtMTIzLDYgKzEyMyw3IEBAIHZvaWQgc3VjY2Vzc2Z1bF9zZW5kKGludCBuZHgpCisgCWNoYXIgZm5hbWVbTUFYUEFUSExFTl07CisgCXN0cnVjdCBmaWxlX3N0cnVjdCAqZmlsZTsKKyAJdW5zaWduZWQgaW50IG9mZnNldDsKKysJc2l6ZV90IGwgPSAwOworIAorIAlpZiAobmR4IDwgMCB8fCBuZHggPj0gdGhlX2ZpbGVfbGlzdC0+Y291bnQpCisgCQlyZXR1cm47CitAQCAtMTMzLDYgKzEzNCwyMCBAQCB2b2lkIHN1Y2Nlc3NmdWxfc2VuZChpbnQgbmR4KQorIAkJCQkgICAgZmlsZS0+ZGlyLnJvb3QsICIvIiwgTlVMTCk7CisgCX0gZWxzZQorIAkJb2Zmc2V0ID0gMDsKKysKKysJbCA9IG9mZnNldCArIDE7CisrCWlmIChmaWxlKSB7CisrCQlpZiAoZmlsZS0+ZGlybmFtZSkKKysJCQlsICs9IHN0cmxlbihmaWxlLT5kaXJuYW1lKTsKKysJCWlmIChmaWxlLT5iYXNlbmFtZSkKKysJCQlsICs9IHN0cmxlbihmaWxlLT5iYXNlbmFtZSk7CisrCX0KKysKKysJaWYgKGwgPj0gc2l6ZW9mKGZuYW1lKSkgeworKwkJcnByaW50ZihGRVJST1IsICJPdmVybG9uZyBwYXRobmFtZVxuIik7CisrCQlleGl0X2NsZWFudXAoUkVSUl9GSUxFU0VMRUNUKTsKKysJfQorKworIAlmX25hbWUoZmlsZSwgZm5hbWUgKyBvZmZzZXQpOworIAlpZiAocmVtb3ZlX3NvdXJjZV9maWxlcykgeworIAkJaWYgKGRvX3VubGluayhmbmFtZSkgPT0gMCkgeworQEAgLTIyNCw2ICsyMzksNyBAQCB2b2lkIHNlbmRfZmlsZXMoc3RydWN0IGZpbGVfbGlzdCAqZmxpc3QsIGludCBmX291dCwgaW50IGZfaW4pCisgCWVudW0gbG9nY29kZSBsb2dfY29kZSA9IGxvZ19iZWZvcmVfdHJhbnNmZXIgPyBGTE9HIDogRklORk87CisgCWludCBmX3hmZXIgPSB3cml0ZV9iYXRjaCA8IDAgPyBiYXRjaF9mZCA6IGZfb3V0OworIAlpbnQgaSwgajsKKysJc2l6ZV90IGwgPSAwOworIAorIAlpZiAodmVyYm9zZSA+IDIpCisgCQlycHJpbnRmKEZJTkZPLCAic2VuZF9maWxlcyBzdGFydGluZ1xuIik7CitAQCAtMjU5LDYgKzI3NSwyMCBAQCB2b2lkIHNlbmRfZmlsZXMoc3RydWN0IGZpbGVfbGlzdCAqZmxpc3QsIGludCBmX291dCwgaW50IGZfaW4pCisgCQkJCWZuYW1lW29mZnNldCsrXSA9ICcvJzsKKyAJCX0gZWxzZQorIAkJCW9mZnNldCA9IDA7CisrCisrCQlsID0gb2Zmc2V0ICsgMTsKKysJCWlmIChmaWxlKSB7CisrCQkJaWYgKGZpbGUtPmRpcm5hbWUpCisrCQkJCWwgKz0gc3RybGVuKGZpbGUtPmRpcm5hbWUpOworKwkJCWlmIChmaWxlLT5iYXNlbmFtZSkKKysJCQkJbCArPSBzdHJsZW4oZmlsZS0+YmFzZW5hbWUpOworKwkJfQorKworKwkJaWYgKGwgPj0gc2l6ZW9mKGZuYW1lKSkgeworKwkJCXJwcmludGYoRkVSUk9SLCAiT3ZlcmxvbmcgcGF0aG5hbWVcbiIpOworKwkJCWV4aXRfY2xlYW51cChSRVJSX0ZJTEVTRUxFQ1QpOworKwkJfQorKworIAkJZm5hbWUyID0gZl9uYW1lKGZpbGUsIGZuYW1lICsgb2Zmc2V0KTsKKyAKKyAJCWlmICh2ZXJib3NlID4gMikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTIuNi45L3JzeW5jZC5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMi42LjkvcnN5bmNkLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1ZjViMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTIuNi45L3JzeW5jZC5jb25mCkBAIC0wLDAgKzEsMTUgQEAKKyMgL2V0Yy9yc3luY2QuY29uZgorCisjIE1pbmltYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciByc3luYyBkYWVtb24KKyMgU2VlIHJzeW5jKDEpIGFuZCByc3luY2QuY29uZig1KSBtYW4gcGFnZXMgZm9yIGhlbHAKKworIyBUaGlzIGZpbGUgaXMgcmVxdWlyZWQgYnkgcnN5bmMgLS1kYWVtb24KK3BpZCBmaWxlID0gL3Zhci9ydW4vcnN5bmNkLnBpZAordXNlIGNocm9vdCA9IHllcworcmVhZCBvbmx5ID0geWVzCisKKyMgU2ltcGxlIGV4YW1wbGUgZm9yIGVuYWJsaW5nIHlvdXIgb3duIGxvY2FsIHJzeW5jIHNlcnZlcgorI1tldmVyeXRoaW5nXQorIwlwYXRoID0gLworIwljb21tZW50ID0gRXZlcnl0aGluZyBleGNlcHQgL2V0YyBleHBvc2VkCisjCWV4Y2x1ZGUgPSAvZXRjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0zLjEuMS8wMDAxLUNvbXBsYWluLWlmLWFuLWluYy1yZWN1cnNpdmUtcGF0aC1pcy1ub3QtcmlnaHQtZm9yLWkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0zLjEuMS8wMDAxLUNvbXBsYWluLWlmLWFuLWluYy1yZWN1cnNpdmUtcGF0aC1pcy1ub3QtcmlnaHQtZm9yLWkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVjZTU0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTMuMS4xLzAwMDEtQ29tcGxhaW4taWYtYW4taW5jLXJlY3Vyc2l2ZS1wYXRoLWlzLW5vdC1yaWdodC1mb3ItaS5wYXRjaApAQCAtMCwwICsxLDEzNSBAQAorRnJvbSA5NjJmOGI5MDA0NWFiMzMxZmMwNGM5ZTY1ZjgwZjFhNTNlNjgyNDNiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2F5bmUgRGF2aXNvbiA8d2F5bmVkQHNhbWJhLm9yZz4KK0RhdGU6IFdlZCwgMzEgRGVjIDIwMTQgMTI6NDE6MDMgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gQ29tcGxhaW4gaWYgYW4gaW5jLXJlY3Vyc2l2ZSBwYXRoIGlzIG5vdCByaWdodCBmb3IgaXRzIGRpci4KKyBUaGlzIGVuc3VyZXMgdGhhdCBhIG1hbGljaW91cyBzZW5kZXIgY2FuJ3QgdXNlIGEganVzdC1zZW50IHN5bWxpbmsgYXMgYQorIHRyYXNuZmVyIHBhdGguCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja1BvcnQKKworRml4IHRoZSBDVkUtMjAxNC05NTEyLCByc3luYyAzLjEuMSBhbGxvd3MgcmVtb3RlIGF0dGFja2VycyB0byB3cml0ZSB0byBhcmJpdHJhcnkKK2ZpbGVzIHZpYSBhIHN5bWxpbmsgYXR0YWNrIG9uIGEgZmlsZSBpbiB0aGUgc3luY2hyb25pemF0aW9uIHBhdGguCisKK0JhY2tQb3J0IGFuZCBmaXggdGhpcyBwYXRjaCB0byBtYWtlIGl0IGFibGUgdG8gYXBwbHkgdG8gc291cmNlIGNvZGUKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgZmxpc3QuYyB8IDIyICsrKysrKysrKysrKysrKysrKysrLS0KKyBpby5jICAgIHwgIDIgKy0KKyBtYWluLmMgIHwgIDQgKystLQorIHJzeW5jLmMgfCAgMiArLQorIHByb3RvLmggfCAyICstCisgNiBmaWxlcyBjaGFuZ2VkLCAzMSBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZmxpc3QuYyBiL2ZsaXN0LmMKK2luZGV4IGMyNDY3MmUuLjkyZTRiNjUgMTAwNjQ0CistLS0gYS9mbGlzdC5jCisrKysgYi9mbGlzdC5jCitAQCAtMjQzNSw4ICsyNDM1LDkgQEAgc3RydWN0IGZpbGVfbGlzdCAqc2VuZF9maWxlX2xpc3QoaW50IGYsIGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCXJldHVybiBmbGlzdDsKKyB9CisgCistc3RydWN0IGZpbGVfbGlzdCAqcmVjdl9maWxlX2xpc3QoaW50IGYpCisrc3RydWN0IGZpbGVfbGlzdCAqcmVjdl9maWxlX2xpc3QoaW50IGYsIGludCBkaXJfbmR4KQorIHsKKysJY29uc3QgY2hhciAqZ29vZF9kaXJuYW1lID0gTlVMTDsKKyAJc3RydWN0IGZpbGVfbGlzdCAqZmxpc3Q7CisgCWludCBkc3RhcnQsIGZsYWdzOworIAlpbnQ2NCBzdGFydF9yZWFkOworQEAgLTI0OTIsNiArMjQ5MywyMyBAQCBzdHJ1Y3QgZmlsZV9saXN0ICpyZWN2X2ZpbGVfbGlzdChpbnQgZikKKyAJCWZsaXN0X2V4cGFuZChmbGlzdCwgMSk7CisgCQlmaWxlID0gcmVjdl9maWxlX2VudHJ5KGYsIGZsaXN0LCBmbGFncyk7CisgCisrCQlpZiAoaW5jX3JlY3Vyc2UpIHsKKysJCQlzdGF0aWMgY29uc3QgY2hhciBlbXB0eV9kaXJbXSA9ICJcMCI7CisrCQkJY29uc3QgY2hhciAqY3VyX2RpciA9IGZpbGUtPmRpcm5hbWUgPyBmaWxlLT5kaXJuYW1lIDogZW1wdHlfZGlyOworKwkJCWlmIChyZWxhdGl2ZV9wYXRocyAmJiAqY3VyX2RpciA9PSAnLycpCisrCQkJCWN1cl9kaXIrKzsKKysJCQlpZiAoY3VyX2RpciAhPSBnb29kX2Rpcm5hbWUpIHsKKysJCQkJY29uc3QgY2hhciAqZCA9IGRpcl9uZHggPj0gMCA/IGZfbmFtZShkaXJfZmxpc3QtPmZpbGVzW2Rpcl9uZHhdLCBOVUxMKSA6IGVtcHR5X2RpcjsKKysJCQkJaWYgKHN0cmNtcChjdXJfZGlyLCBkKSAhPSAwKSB7CisrCQkJCQlycHJpbnRmKEZFUlJPUiwKKysJCQkJCQkiQUJPUlRJTkcgZHVlIHRvIGludmFsaWQgZGlyIHByZWZpeCBmcm9tIHNlbmRlcjogJXMgKHNob3VsZCBiZTogJXMpXG4iLAorKwkJCQkJCWN1cl9kaXIsIGQpOworKwkJCQkJZXhpdF9jbGVhbnVwKFJFUlJfUFJPVE9DT0wpOworKwkJCQl9CisrCQkJCWdvb2RfZGlybmFtZSA9IGN1cl9kaXI7CisrCQkJfQorKwkJfQorKworIAkJaWYgKFNfSVNSRUcoZmlsZS0+bW9kZSkpIHsKKyAJCQkvKiBBbHJlYWR5IGNvdW50ZWQgKi8KKyAJCX0gZWxzZSBpZiAoU19JU0RJUihmaWxlLT5tb2RlKSkgeworQEAgLTI2MTUsNyArMjYzMyw3IEBAIHZvaWQgcmVjdl9hZGRpdGlvbmFsX2ZpbGVfbGlzdChpbnQgZikKKyAJCQlycHJpbnRmKEZJTkZPLCAiWyVzXSByZWNlaXZpbmcgZmxpc3QgZm9yIGRpciAlZFxuIiwKKyAJCQkJd2hvX2FtX2koKSwgbmR4KTsKKyAJCX0KKy0JCWZsaXN0ID0gcmVjdl9maWxlX2xpc3QoZik7CisrCQlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGYsIG5keCk7CisgCQlmbGlzdC0+cGFyZW50X25keCA9IG5keDsKKyAJfQorIH0KK2RpZmYgLS1naXQgYS9pby5jIGIvaW8uYworaW5kZXggYjlhOWJkMC4uYTg2OGZhOSAxMDA2NDQKKy0tLSBhL2lvLmMKKysrKyBiL2lvLmMKK0BAIC0xNjg1LDcgKzE2ODUsNyBAQCB2b2lkIHdhaXRfZm9yX3JlY2VpdmVyKHZvaWQpCisgCQkJCXJwcmludGYoRklORk8sICJbJXNdIHJlY2VpdmluZyBmbGlzdCBmb3IgZGlyICVkXG4iLAorIAkJCQkJd2hvX2FtX2koKSwgbmR4KTsKKyAJCQl9CistCQkJZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChpb2J1Zi5pbl9mZCk7CisrCQkJZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChpb2J1Zi5pbl9mZCwgbmR4KTsKKyAJCQlmbGlzdC0+cGFyZW50X25keCA9IG5keDsKKyAjaWZkZWYgU1VQUE9SVF9IQVJEX0xJTktTCisgCQkJaWYgKHByZXNlcnZlX2hhcmRfbGlua3MpCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCitpbmRleCBlN2ExM2Y3Li43MTNiODE4IDEwMDY0NAorLS0tIGEvbWFpbi5jCisrKysgYi9tYWluLmMKK0BAIC0xMDA5LDcgKzEwMDksNyBAQCBzdGF0aWMgdm9pZCBkb19zZXJ2ZXJfcmVjdihpbnQgZl9pbiwgaW50IGZfb3V0LCBpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJZmlsZXNmcm9tX2ZkID0gLTE7CisgCX0KKyAKKy0JZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChmX2luKTsKKysJZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChmX2luLCAtMSk7CisgCWlmICghZmxpc3QpIHsKKyAJCXJwcmludGYoRkVSUk9SLCJzZXJ2ZXJfcmVjdjogcmVjdl9maWxlX2xpc3QgZXJyb3JcbiIpOworIAkJZXhpdF9jbGVhbnVwKFJFUlJfRklMRVNFTEVDVCk7CitAQCAtMTE4Myw3ICsxMTgzLDcgQEAgaW50IGNsaWVudF9ydW4oaW50IGZfaW4sIGludCBmX291dCwgcGlkX3QgcGlkLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAorIAlpZiAod3JpdGVfYmF0Y2ggJiYgIWFtX3NlcnZlcikKKyAJCXN0YXJ0X3dyaXRlX2JhdGNoKGZfaW4pOworLQlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGZfaW4pOworKwlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGZfaW4sIC0xKTsKKyAJaWYgKGluY19yZWN1cnNlICYmIGZpbGVfdG90YWwgPT0gMSkKKyAJCXJlY3ZfYWRkaXRpb25hbF9maWxlX2xpc3QoZl9pbik7CisgCitkaWZmIC0tZ2l0IGEvcnN5bmMuYyBiL3JzeW5jLmMKK2luZGV4IDY4ZmY2YjEuLmMzZWNjNTEgMTAwNjQ0CistLS0gYS9yc3luYy5jCisrKysgYi9yc3luYy5jCitAQCAtMzY0LDcgKzM2NCw3IEBAIGludCByZWFkX25keF9hbmRfYXR0cnMoaW50IGZfaW4sIGludCBmX291dCwgaW50ICppZmxhZ19wdHIsIHVjaGFyICp0eXBlX3B0ciwKKyAJCX0KKyAJCS8qIFNlbmQgYWxsIHRoZSBkYXRhIHdlIHJlYWQgZm9yIHRoaXMgZmxpc3QgdG8gdGhlIGdlbmVyYXRvci4gKi8KKyAJCXN0YXJ0X2ZsaXN0X2ZvcndhcmQobmR4KTsKKy0JCWZsaXN0ID0gcmVjdl9maWxlX2xpc3QoZl9pbik7CisrCQlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGZfaW4sIG5keCk7CisgCQlmbGlzdC0+cGFyZW50X25keCA9IG5keDsKKyAJCXN0b3BfZmxpc3RfZm9yd2FyZCgpOworIAl9CitkaWZmIC0tZ2l0IGEvcHJvdG8uaCBiL3Byb3RvLmgKK2luZGV4IDIyZmM1MzkuLjI0N2M1NTggMTAwNjQ0CistLS0gYS9wcm90by5oCisrKysgYi9wcm90by5oCitAQCAtODksNyArODksNyBAQCBzdHJ1Y3QgZmlsZV9zdHJ1Y3QgKm1ha2VfZmlsZShjb25zdCBjaGFyICpmbmFtZSwgc3RydWN0IGZpbGVfbGlzdCAqZmxpc3QsCisgdm9pZCB1bm1ha2VfZmlsZShzdHJ1Y3QgZmlsZV9zdHJ1Y3QgKmZpbGUpOworIHZvaWQgc2VuZF9leHRyYV9maWxlX2xpc3QoaW50IGYsIGludCBhdF9sZWFzdCk7Cisgc3RydWN0IGZpbGVfbGlzdCAqc2VuZF9maWxlX2xpc3QoaW50IGYsIGludCBhcmdjLCBjaGFyICphcmd2W10pOworLXN0cnVjdCBmaWxlX2xpc3QgKnJlY3ZfZmlsZV9saXN0KGludCBmKTsKKytzdHJ1Y3QgZmlsZV9saXN0ICpyZWN2X2ZpbGVfbGlzdChpbnQgZiwgaW50IGRpcl9uZHgpOworIHZvaWQgcmVjdl9hZGRpdGlvbmFsX2ZpbGVfbGlzdChpbnQgZik7CisgaW50IGZsaXN0X2ZpbmQoc3RydWN0IGZpbGVfbGlzdCAqZmxpc3QsIHN0cnVjdCBmaWxlX3N0cnVjdCAqZik7CisgaW50IGZsaXN0X2ZpbmRfaWdub3JlX2Rpcm5lc3Moc3RydWN0IGZpbGVfbGlzdCAqZmxpc3QsIHN0cnVjdCBmaWxlX3N0cnVjdCAqZik7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTMuMS4xL3JzeW5jLmdpdC1lYWM4NTgwODUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0zLjEuMS9yc3luYy5naXQtZWFjODU4MDg1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmY2FjNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0zLjEuMS9yc3luYy5naXQtZWFjODU4MDg1LnBhdGNoCkBAIC0wLDAgKzEsMTAxIEBACitGcm9tIGVhYzg1ODA4NWUzYWM5NGVjMGFiNTA2MWQxMWY1MjY1MmM5MGE4NjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXYXluZSBEYXZpc29uIDx3YXluZWRAc2FtYmEub3JnPgorRGF0ZTogTW9uLCAxMSBNYXkgMjAxNSAxMjozNjoyMCAtMDcwMAorU3ViamVjdDogW1BBVENIIDEvMV0gQWRkIGNvbXBhdCBmbGFnIHRvIGFsbG93IHByb3BlciBzZWVkIGNoZWNrc3VtIG9yZGVyLgorIEZpeGVzIHRoZSBlcXVpdmFsZW50IG9mIGxpYnJzeW5jJ3MgQ1ZFLTIwMTQtODI0MiBpc3N1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBjaGVja3N1bS5jIHwgMTcgKysrKysrKysrKysrKy0tLS0KKyBjb21wYXQuYyAgIHwgIDUgKysrKysKKyBvcHRpb25zLmMgIHwgIDEgKworIDMgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NoZWNrc3VtLmMgYi9jaGVja3N1bS5jCitpbmRleCBhMWMyYWEyLi45MzNiNTE0IDEwMDY0NAorLS0tIGEvY2hlY2tzdW0uYworKysrIGIvY2hlY2tzdW0uYworQEAgLTIzLDYgKzIzLDcgQEAKKyAKKyBleHRlcm4gaW50IGNoZWNrc3VtX3NlZWQ7CisgZXh0ZXJuIGludCBwcm90b2NvbF92ZXJzaW9uOworK2V4dGVybiBpbnQgcHJvcGVyX3NlZWRfb3JkZXI7CisgCisgLyoKKyAgIGEgc2ltcGxlIDMyIGJpdCBjaGVja3N1bSB0aGF0IGNhbiBiZSB1cGFkdGVkIGZyb20gZWl0aGVyIGVuZAorQEAgLTU0LDEwICs1NSwxOCBAQCB2b2lkIGdldF9jaGVja3N1bTIoY2hhciAqYnVmLCBpbnQzMiBsZW4sIGNoYXIgKnN1bSkKKyAJaWYgKHByb3RvY29sX3ZlcnNpb24gPj0gMzApIHsKKyAJCXVjaGFyIHNlZWRidWZbNF07CisgCQltZDVfYmVnaW4oJm0pOworLQkJbWQ1X3VwZGF0ZSgmbSwgKHVjaGFyICopYnVmLCBsZW4pOworLQkJaWYgKGNoZWNrc3VtX3NlZWQpIHsKKy0JCQlTSVZBTHUoc2VlZGJ1ZiwgMCwgY2hlY2tzdW1fc2VlZCk7CistCQkJbWQ1X3VwZGF0ZSgmbSwgc2VlZGJ1ZiwgNCk7CisrCQlpZiAocHJvcGVyX3NlZWRfb3JkZXIpIHsKKysJCQlpZiAoY2hlY2tzdW1fc2VlZCkgeworKwkJCQlTSVZBTHUoc2VlZGJ1ZiwgMCwgY2hlY2tzdW1fc2VlZCk7CisrCQkJCW1kNV91cGRhdGUoJm0sIHNlZWRidWYsIDQpOworKwkJCX0KKysJCQltZDVfdXBkYXRlKCZtLCAodWNoYXIgKilidWYsIGxlbik7CisrCQl9IGVsc2UgeworKwkJCW1kNV91cGRhdGUoJm0sICh1Y2hhciAqKWJ1ZiwgbGVuKTsKKysJCQlpZiAoY2hlY2tzdW1fc2VlZCkgeworKwkJCQlTSVZBTHUoc2VlZGJ1ZiwgMCwgY2hlY2tzdW1fc2VlZCk7CisrCQkJCW1kNV91cGRhdGUoJm0sIHNlZWRidWYsIDQpOworKwkJCX0KKyAJCX0KKyAJCW1kNV9yZXN1bHQoJm0sICh1Y2hhciAqKXN1bSk7CisgCX0gZWxzZSB7CitkaWZmIC0tZ2l0IGEvY29tcGF0LmMgYi9jb21wYXQuYworaW5kZXggMjQ1NDkzNy4uZjg5ZDQ2NiAxMDA2NDQKKy0tLSBhL2NvbXBhdC5jCisrKysgYi9jb21wYXQuYworQEAgLTI3LDYgKzI3LDcgQEAgaW50IGluY19yZWN1cnNlID0gMDsKKyBpbnQgY29tcGF0X2ZsYWdzID0gMDsKKyBpbnQgdXNlX3NhZmVfaW5jX2ZsaXN0ID0gMDsKKyBpbnQgd2FudF94YXR0cl9vcHRpbSA9IDA7CisraW50IHByb3Blcl9zZWVkX29yZGVyID0gMDsKKyAKKyBleHRlcm4gaW50IGFtX3NlcnZlcjsKKyBleHRlcm4gaW50IGFtX3NlbmRlcjsKK0BAIC03OCw2ICs3OSw3IEBAIGludCBmaWxlc2Zyb21fY29udmVydCA9IDA7CisgI2RlZmluZSBDRl9TWU1MSU5LX0lDT05WICgxPDwyKQorICNkZWZpbmUgQ0ZfU0FGRV9GTElTVAkgKDE8PDMpCisgI2RlZmluZSBDRl9BVk9JRF9YQVRUUl9PUFRJTSAoMTw8NCkKKysjZGVmaW5lIENGX0NIS1NVTV9TRUVEX0ZJWCAoMTw8NSkKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqY2xpZW50X2luZm87CisgCitAQCAtMjcxLDEyICsyNzMsMTUgQEAgdm9pZCBzZXR1cF9wcm90b2NvbChpbnQgZl9vdXQsaW50IGZfaW4pCisgCQkJCWNvbXBhdF9mbGFncyB8PSBDRl9TQUZFX0ZMSVNUOworIAkJCWlmIChsb2NhbF9zZXJ2ZXIgfHwgc3RyY2hyKGNsaWVudF9pbmZvLCAneCcpICE9IE5VTEwpCisgCQkJCWNvbXBhdF9mbGFncyB8PSBDRl9BVk9JRF9YQVRUUl9PUFRJTTsKKysJCQlpZiAobG9jYWxfc2VydmVyIHx8IHN0cmNocihjbGllbnRfaW5mbywgJ0MnKSAhPSBOVUxMKQorKwkJCQljb21wYXRfZmxhZ3MgfD0gQ0ZfQ0hLU1VNX1NFRURfRklYOworIAkJCXdyaXRlX2J5dGUoZl9vdXQsIGNvbXBhdF9mbGFncyk7CisgCQl9IGVsc2UKKyAJCQljb21wYXRfZmxhZ3MgPSByZWFkX2J5dGUoZl9pbik7CisgCQkvKiBUaGUgaW5jX3JlY3Vyc2UgdmFyIE1VU1QgYmUgc2V0IHRvIDAgb3IgMS4gKi8KKyAJCWluY19yZWN1cnNlID0gY29tcGF0X2ZsYWdzICYgQ0ZfSU5DX1JFQ1VSU0UgPyAxIDogMDsKKyAJCXdhbnRfeGF0dHJfb3B0aW0gPSBwcm90b2NvbF92ZXJzaW9uID49IDMxICYmICEoY29tcGF0X2ZsYWdzICYgQ0ZfQVZPSURfWEFUVFJfT1BUSU0pOworKwkJcHJvcGVyX3NlZWRfb3JkZXIgPSBjb21wYXRfZmxhZ3MgJiBDRl9DSEtTVU1fU0VFRF9GSVggPyAxIDogMDsKKyAJCWlmIChhbV9zZW5kZXIpIHsKKyAJCQlyZWNlaXZlcl9zeW1saW5rX3RpbWVzID0gYW1fc2VydmVyCisgCQkJICAgID8gc3RyY2hyKGNsaWVudF9pbmZvLCAnTCcpICE9IE5VTEwKK2RpZmYgLS1naXQgYS9vcHRpb25zLmMgYi9vcHRpb25zLmMKK2luZGV4IDE5YzJiN2QuLjQxMjhiNTkgMTAwNjQ0CistLS0gYS9vcHRpb25zLmMKKysrKyBiL29wdGlvbnMuYworQEAgLTI1MDMsNiArMjUwMyw3IEBAIHZvaWQgc2VydmVyX29wdGlvbnMoY2hhciAqKmFyZ3MsIGludCAqYXJnY19wKQorICNlbmRpZgorIAkJYXJnc3RyW3grK10gPSAnZic7IC8qIGZsaXN0IEkvTy1lcnJvciBzYWZldHkgc3VwcG9ydCAqLworIAkJYXJnc3RyW3grK10gPSAneCc7IC8qIHhhdHRyIGhhcmRsaW5rIG9wdGltaXphdGlvbiBub3QgZGVzaXJlZCAqLworKwkJYXJnc3RyW3grK10gPSAnQyc7IC8qIHN1cHBvcnQgY2hlY2tzdW0gc2VlZCBvcmRlciBmaXggKi8KKyAJfQorIAorIAlpZiAoeCA+PSAoaW50KXNpemVvZiBhcmdzdHIpIHsgLyogTm90IHBvc3NpYmxlLi4uICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjVmMjcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMuaW5jCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiRmlsZSBzeW5jaHJvbml6YXRpb24gdG9vbCIKK0hPTUVQQUdFID0gImh0dHA6Ly9yc3luYy5zYW1iYS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vcnN5bmMuc2FtYmEub3JnL2J1Z3ppbGxhLmh0bWwiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworIyBHUEx2MisgKDw8IDMuMC4wKSwgR1BMdjMrICg+PSAzLjAuMCkKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKKyMgbmVlZHMgdG8gYWRkIGFjbCBhbmQgYXR0cgorREVQRU5EUyA9ICJwb3B0IgorCitTUkNfVVJJID0gImh0dHA6Ly9yc3luYy5zYW1iYS5vcmcvZnRwL3JzeW5jL3NyYy9yc3luYy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcnN5bmNkLmNvbmYiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9yc3luY2QuY29uZiAke0R9JHtzeXNjb25mZGlyfQorfQorCitFWFRSQV9PRU1BS0U9J1NUUklQPSIiJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmNfMi42LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luY18yLjYuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODU0Yzc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmNfMi42LjkuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJGaWxlIHN5bmNocm9uaXphdGlvbiB0b29sIgorSE9NRVBBR0UgPSAiaHR0cDovL3JzeW5jLnNhbWJhLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9yc3luYy5zYW1iYS5vcmcvYnVnemlsbGEuaHRtbCIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorCisjIG5lZWRzIHRvIGFkZCBhY2wgYW5kIGF0dHIKK0RFUEVORFMgPSAicG9wdCIKKworU1JDX1VSSSA9ICJodHRwOi8vcnN5bmMuc2FtYmEub3JnL2Z0cC9yc3luYy9zcmMvcnN5bmMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3JzeW5jLTIuNi45LWZuYW1lLW9iby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yc3luY2QuY29uZiIKKworU1JDX1VSSVttZDVzdW1dID0gIjk5NmQ4ZDg4MzFkYmNhMTc5MTAwOTRlNTZkY2I1OTQyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNhNDM3MzAxYmVjZDg5MGU3MzMwMGJjNjlhMzkxODlmZjE1NjRiYWE3NjE5NDhmZjE0OWIzZGQ3YmRlNjMzZjkiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9yc3luY2QuY29uZiAke0R9JHtzeXNjb25mZGlyfQorfQorCitFWFRSQV9PRU1BS0U9J1NUUklQPSIiJworCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTZkNWE5ZDRjNGQzYWYyNWNkNjhmZDgzZThhOGNiMDljIgorCitQUiA9ICJyNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzMuMS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmNfMy4xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc0Y2RkYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzMuMS4xLmJiCkBAIC0wLDAgKzEsMzAgQEAKK3JlcXVpcmUgcnN5bmMuaW5jCisKKworU1JDX1VSSSArPSAiZmlsZTovL2FjaW5jbHVkZS5tNCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1Db21wbGFpbi1pZi1hbi1pbmMtcmVjdXJzaXZlLXBhdGgtaXMtbm90LXJpZ2h0LWZvci1pLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yc3luYy5naXQtZWFjODU4MDg1LnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjQzYmQ2Njc2ZjBiNDA0MzI2ZWVlMmQ2M2JlM2NkY2ZlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdkZTQzNjRmY2Y1ZmU0MmYzYmRiNTE0NDE3ZjFjNDBkMTBiYmNhODk2YWJlN2U3ZjJjNTgxYzZlYTA4YTI2MjEiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJhY2wgYXR0ciIKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLWVuYWJsZS1hY2wtc3VwcG9ydCwtLWRpc2FibGUtYWNsLXN1cHBvcnQsYWNsLCIKK1BBQ0tBR0VDT05GSUdbYXR0cl0gPSAiLS1lbmFibGUteGF0dHItc3VwcG9ydCwtLWRpc2FibGUteGF0dHItc3VwcG9ydCxhdHRyLCIKKworIyByc3luYyAzLjAgdXNlcyBjb25maWd1cmUuc2ggaW5zdGVhZCBvZiBjb25maWd1cmUsIGFuZAorIyBtYWtlZmlsZSBjaGVja3MgdGhlIGV4aXN0ZW5jZSBvZiBjb25maWd1cmUuc2gKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L2NvbmZpZ3VyZSAke1N9L2NvbmZpZ3VyZS5zaAorCWNwIC1mICR7V09SS0RJUn0vYWNpbmNsdWRlLm00ICR7U30vCisKKwkjIEJ5IGRlZmF1bHQsIGlmIGNyb3NzY29tcGlsaW5nLCByc3luYyBkaXNhYmxlcyBhIG51bWJlciBvZgorCSMgY2FwYWJpbGl0aWVzLCBoYXJkbGlua2luZyBzeW1saW5rcyBhbmQgc3BlY2lhbCBmaWxlcyAoaS5lLiBkZXZpY2VzKQorCWV4cG9ydCByc3luY19jdl9jYW5faGFyZGxpbmtfc3BlY2lhbD15ZXMKKwlleHBvcnQgcnN5bmNfY3ZfY2FuX2hhcmRsaW5rX3N5bWxpbms9eWVzCit9CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQgKCkgeworCWNwIC1mICR7U30vY29uZmlndXJlICR7U30vY29uZmlndXJlLnNoCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnkuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2FhNzg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5LmluYwpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIkFuIGludGVycHJldGVyIG9mIG9iamVjdC1vcmllbnRlZCBzY3JpcHRpbmcgbGFuZ3VhZ2UiCitERVNDUklQVElPTiA9ICJSdWJ5IGlzIGFuIGludGVycHJldGVkIHNjcmlwdGluZyBsYW5ndWFnZSBmb3IgcXVpY2sgXAorYW5kIGVhc3kgb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nLiBJdCBoYXMgbWFueSBmZWF0dXJlcyB0byBwcm9jZXNzIFwKK3RleHQgZmlsZXMgYW5kIHRvIGRvIHN5c3RlbSBtYW5hZ2VtZW50IHRhc2tzIChhcyBpbiBQZXJsKS4gXAorSXQgaXMgc2ltcGxlLCBzdHJhaWdodC1mb3J3YXJkLCBhbmQgZXh0ZW5zaWJsZS4gXAorIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ydWJ5LWxhbmcub3JnLyIKK1NFQ1RJT04gPSAiZGV2ZWwvcnVieSIKK0xJQ0VOU0UgPSAiUnVieSB8IEJTRCB8IEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTgzN2IzMjU5MzUxN2FlNDhiOWMzYjVjODdhNWQyODhjIFwKKyAgICBmaWxlOi8vQlNETDttZDU9MTlhYWY2NWM4OGE0MGI1MDhkMTdhZTRiZTUzOWM0YjVcCisgICAgZmlsZTovL0dQTDttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjNcCisgICAgZmlsZTovL0xFR0FMO21kNT1jNDQwYWRiNTc1YmE0ZTZlMjM0NGMyNjMwYjZhNTU4NFwKKyIKKworREVQRU5EUyA9ICJydWJ5LW5hdGl2ZSB6bGliIG9wZW5zc2wgdGNsIGxpYnlhbWwgZGIgZ2RibSByZWFkbGluZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImxpYnlhbWwtbmF0aXZlIgorCitTSFJUX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorU1JDX1VSSSA9ICJodHRwOi8vY2FjaGUucnVieS1sYW5nLm9yZy9wdWIvcnVieS8ke1NIUlRfVkVSfS9ydWJ5LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9leHRtay5wYXRjaCBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKworIyBUaGlzIHNuaXBwZXQgbGV0cyBjb21waWxlZCBleHRlbnNpb25zIHdoaWNoIHJlbHkgb24gZXh0ZXJuYWwgbGlicmFyaWVzLAorIyBzdWNoIGFzIHpsaWIsIGNvbXBpbGUgcHJvcGVybHkuICBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHdoZW4gZXh0bWsucmIKKyMgcnVucywgaXQgdXNlcyB0aGUgbmF0aXZlIGxpYnJhcmllcyBpbnN0ZWFkIG9mIHRoZSB0YXJnZXQgbGlicmFyaWVzLCBhbmQgc28KKyMgbm9uZSBvZiB0aGUgbGlua2luZyBvcGVyYXRpb25zIHN1Y2NlZWQgLS0gd2hpY2ggbWFrZXMgZXh0Y29uZi5yYiB0aGluaworIyB0aGF0IHRoZSBsaWJyYXJpZXMgYXJlbid0IGF2YWlsYWJsZSBhbmQgaGVuY2UgdGhhdCB0aGUgZXh0ZW5zaW9uIGNhbid0IGJlCisjIGJ1aWx0LgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzZWQgLWkgInMjJSVUQVJHRVRfQ0ZMQUdTJSUjJFRBUkdFVF9DRkxBR1MjOyBzIyUlVEFSR0VUX0xERkxBR1MlJSMkVEFSR0VUX0xERkxBR1MjIiAke1N9L2NvbW1vbi5taworICAgIHJtIC1yZiAke1N9L3J1YnkvCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnkvZXh0bWsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnkvZXh0bWsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI2ODQ1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS9leHRtay5wYXRjaApAQCAtMCwwICsxLDEzIEBACitkaWZmIC1ydSBydWJ5LTEuOC43LXAyNDgub3JpZy9leHQvZXh0bWsucmIgcnVieS0xLjguNy1wMjQ4L2V4dC9leHRtay5yYgorLS0tIHJ1YnktMS44LjctcDI0OC5vcmlnL2V4dC9leHRtay5yYgkyMDA5LTEyLTI0IDAzOjAxOjU4LjAwMDAwMDAwMCAtMDYwMAorKysrIHJ1YnktMS44LjctcDI0OC9leHQvZXh0bWsucmIJMjAxMC0wMi0xMiAxNTo1NToyNy4zNzAwNjE1NTggLTA2MDAKK0BAIC0zNTQsOCArMzU0LDggQEAKKyAgICRydWJ5ID0gJyQodG9wZGlyKS9taW5pcnVieScgKyBFWEVFWFQKKyBlbmQKKyAkcnVieSA8PCAiIC1JJyQodG9wZGlyKSciCisrJHJ1YnkgPDwgIiAtSSckKHRvcF9zcmNkaXIpL2xpYiciCisgdW5sZXNzIENST1NTX0NPTVBJTElORworLSAgJHJ1YnkgPDwgIiAtSSckKHRvcF9zcmNkaXIpL2xpYiciCisgICAkcnVieSA8PCAiIC1JJyQoZXh0b3V0KS8kKGFyY2gpJyAtSSckKGV4dG91dCkvY29tbW9uJyIgaWYgJGV4dG91dAorICAgJHJ1YnkgPDwgIiAtSS4vLSAtSSckKHRvcF9zcmNkaXIpL2V4dCcgLXJwdXJlbGliLnJiIgorICAgRU5WWyJSVUJZTElCIl0gPSAiLSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieV8yLjIuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieV8yLjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGM5NDNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5XzIuMi4yLmJiCkBAIC0wLDAgKzEsNDIgQEAKK3JlcXVpcmUgcnVieS5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gIjMyNmU5OWRkYzc1MzgxYzdiNTBjODVmNzA4OWYzMjYwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVmZmMwZjMxN2U0MjllNmIyOWQ0YTk4YWM1MjFjM2NlNjU0ODFiZmQyMmE4Y2Y4NDVmYTAyYTdiMTEzZDliNDQiCisKKyMgaXQncyB1bmtub3duIHRvIGNvbmZpZ3VyZSBzY3JpcHQsIGJ1dCB0aGVuIHBhc3NlZCB0byBleHRjb25mLnJiCisjIG1heWJlIGl0J3Mgbm90IHJlYWxseSBuZWVkZWQgYXMgd2UncmUgaGFyZGNvZGluZyB0aGUgcmVzdWx0IHdpdGgKKyMgMDAwMS1zb2NrZXQtZXh0Y29uZi1oYXJkY29kZS13aWRlLWdldGFkZHItaW5mby10ZXN0LW91dGNvLnBhdGNoCitVTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1QgKz0gIi0tZW5hYmxlLXdpZGUtZ2V0YWRkcmluZm8iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbdmFsZ3JpbmRdID0gIi0td2l0aC12YWxncmluZD15ZXMsIC0td2l0aC12YWxncmluZD1ubywgdmFsZ3JpbmQiCitQQUNLQUdFQ09ORklHW2dwbV0gPSAiLS13aXRoLWdtcD15ZXMsIC0td2l0aC1nbXA9bm8sIGdtcCIKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLC0tZW5hYmxlLXdpZGUtZ2V0YWRkcmluZm8sIgorCitFWFRSQV9PRUNPTkYgPSAiXAorICAgIC0tZGlzYWJsZS12ZXJzaW9uZWQtcGF0aHMgXAorICAgIC0tZGlzYWJsZS1ycGF0aCBcCisgICAgLS1kaXNhYmxlLWR0cmFjZSBcCisgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAtLWVuYWJsZS1sb2FkLXJlbGF0aXZlIFwKKyIKKworRVhUUkFfT0VNQUtFID0gIiBcCisgICAgTElCUlVCWUFSRz0nLWxydWJ5LXN0YXRpYycgXAorIgorCitkb19pbnN0YWxsKCkgeworICAgIG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9ydWJ5Z2VtcyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9yaSIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcnVieS8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ydWJ5LyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcnVieS8qLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcnVieS8qLyovKi8qLy5kZWJ1ZyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUzYThlMWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cwpAQCAtMCwwICsxLDkyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IDIwMDcgT3BlbmVkaGFuZCBMdGQuCisjCisjIEF1dGhvcjogUmljaGFyZCBQdXJkaWUgPHJwdXJkaWVAb3BlbmVkaGFuZC5jb20+CisjCisKKyMgVGhlIGZvbGxvd2luZyBzY3JpcHQgd2lsbCBydW4gYWxsIHRoZSBzY3JpcHRsZXRzIGZvdW5kIGluICNTWVNDT05GRElSIy9kZWItcG9zdGluc3RzLAorIyAjU1lTQ09ORkRJUiMvaXBrLXBvc3RpbnN0cyBvciAjU1lTQ09ORkRJUiMvcnBtLXBvc2luc3RzLgorCisjIHRoZSBvcmRlciBvZiB0aGlzIGxpc3QgaXMgaW1wb3J0YW50LCBkbyBub3QgY2hhbmdlIQorYmFja2VuZF9saXN0PSJycG0gZGViIGlwayIKKworcG1faW5zdGFsbGVkPWZhbHNlCisKK2ZvciBwbSBpbiAkYmFja2VuZF9saXN0OyBkbworCXBpX2Rpcj0iI1NZU0NPTkZESVIjLyRwbS1wb3N0aW5zdHMiCisKKwlbIC1kICRwaV9kaXIgXSAmJiBicmVhaworCisJY2FzZSAkcG0gaW4KKwkJImRlYiIpCisJCQlpZiBbIC1zICIjTE9DQUxTVEFURURJUiMvbGliL2Rwa2cvc3RhdHVzIiBdOyB0aGVuCisJCQkJcG1faW5zdGFsbGVkPXRydWUKKwkJCQlicmVhaworCQkJZmkKKwkJCTs7CisKKwkJImlwayIpCisJCQlpZiBbIC1zICIvdmFyL2xpYi9vcGtnL3N0YXR1cyIgXTsgdGhlbgorCQkJCXBtX2luc3RhbGxlZD10cnVlCisJCQkJYnJlYWsKKwkJCWZpCisJCQk7OworCWVzYWMKK2RvbmUKKworcmVtb3ZlX3Jjc2RfbGluayAoKSB7CisJaWYgWyAtbiAiYHdoaWNoIHVwZGF0ZS1yYy5kYCIgXTsgdGhlbgorCQl1cGRhdGUtcmMuZCAtZiBydW4tcG9zdGluc3RzIHJlbW92ZQorCWZpCit9CisKK2lmIFsgLXogIiRwaV9kaXIiIF07IHRoZW4KKwlyZW1vdmVfcmNzZF9saW5rCisJZXhpdCAwCitmaQorCitbIC1lICNTWVNDT05GRElSIy9kZWZhdWx0L3Bvc3RpbnN0IF0gJiYgLiAjU1lTQ09ORkRJUiMvZGVmYXVsdC9wb3N0aW5zdAorCitpZiBbICIkUE9TVElOU1RfTE9HR0lORyIgPSAiMSIgXTsgdGhlbgorCXJtIC1mICRMT0dGSUxFCisJYXBwZW5kX2xvZz0iPj4kTE9HRklMRSAyPiYxIgorZmkKKworZXhlY19wb3N0aW5zdF9zY3JpcHRsZXRzKCkgeworCWZvciBpIGluIGBscyAkcGlfZGlyYDsgZG8KKwkJaT0kcGlfZGlyLyRpCisJCWVjaG8gIlJ1bm5pbmcgcG9zdGluc3QgJGkuLi4iCisJCVsgIiRQT1NUSU5TVF9MT0dHSU5HIiA9ICIxIiBdICYmIGV2YWwgZWNobyAiUnVubmluZyBwb3N0aW5zdCAkaS4uLiIgJGFwcGVuZF9sb2cKKwkJaWYgWyAteCAkaSBdOyB0aGVuCisJCQlldmFsIHNoIC1jICRpICRhcHBlbmRfbG9nCisJCQlybSAkaQorCQllbHNlCisJCQllY2hvICJFUlJPUjogcG9zdGluc3QgJGkgZmFpbGVkLiIKKwkJCVsgIiRQT1NUSU5TVF9MT0dHSU5HIiA9ICIxIiBdICYmIGV2YWwgZWNobyAiRVJST1I6IHBvc3RpbnN0ICRpIGZhaWxlZC4iICRhcHBlbmRfbG9nCisJCQlyZW1vdmVfcGlfZGlyPTAKKwkJZmkKKwlkb25lCit9CisKK3JlbW92ZV9waV9kaXI9MQoraWYgJHBtX2luc3RhbGxlZDsgdGhlbgorCWNhc2UgJHBtIGluCisJCSJpcGsiKQorCQkJZXZhbCBvcGtnIGNvbmZpZ3VyZSAkYXBwZW5kX2xvZworCQkJOzsKKworCQkiZGViIikKKwkJCWV2YWwgZHBrZyAtLWNvbmZpZ3VyZSAtYSAkYXBwZW5kX2xvZworCQkJOzsKKwllc2FjCitlbHNlCisJZXhlY19wb3N0aW5zdF9zY3JpcHRsZXRzCitmaQorCisjIHNpbmNlIGFsbCBwb3N0aW5zdGFsbHMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LCByZW1vdmUgdGhlIHBvc3RpbnN0YWxscyBkaXJlY3RvcnkKKyMgYW5kIHRoZSByY1MuZCBsaW5rCitpZiBbICRyZW1vdmVfcGlfZGlyID0gMSBdOyB0aGVuCisJcm0gLXJmICRwaV9kaXIKKwlyZW1vdmVfcmNzZF9saW5rCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMuaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzLmluaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczYTFmNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzLmluaXQKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworcnVuLXBvc3RpbnN0cwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhMDQzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzLnNlcnZpY2UKQEAgLTAsMCArMSwxNiBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1SdW4gcGVuZGluZyBwb3N0aW5zdHMKK0RlZmF1bHREZXBlbmRlbmNpZXM9bm8KK0FmdGVyPXN5c3RlbWQtcmVtb3VudC1mcy5zZXJ2aWNlIHN5c3RlbWQtdG1wZmlsZXMtc2V0dXAuc2VydmljZSB0bXAubW91bnQKK0JlZm9yZT1zeXNpbml0LnRhcmdldAorQ29uZGl0aW9uUGF0aEV4aXN0c0dsb2I9I1NZU0NPTkZESVIjLyotcG9zdGluc3RzCisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitFeGVjU3RhcnQ9I1NCSU5ESVIjL3J1bi1wb3N0aW5zdHMKK0V4ZWNTdGFydFBvc3Q9I0JBU0VfQklORElSIy9zeXN0ZW1jdGwgZGlzYWJsZSBydW4tcG9zdGluc3RzLnNlcnZpY2UKK1JlbWFpbkFmdGVyRXhpdD1ObworVGltZW91dFNlYz0wCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c3lzaW5pdC50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0c18xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHNfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYzk0ZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHNfMS4wLmJiCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiUnVucyBwb3N0aW5zdGFsbCBzY3JpcHRzIG9uIGZpcnN0IGJvb3Qgb2YgdGhlIHRhcmdldCBkZXZpY2UiCitTRUNUSU9OID0gImRldmVsIgorUFIgPSAicjkiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTUkNfVVJJID0gImZpbGU6Ly9ydW4tcG9zdGluc3RzIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wb3N0aW5zdHMuaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcG9zdGluc3RzLnNlcnZpY2UiCisKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBhbGxhcmNoIHN5c3RlbWQgdXBkYXRlLXJjLmQKKworSU5JVFNDUklQVF9OQU1FID0gInJ1bi1wb3N0aW5zdHMiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5OSBTIC4iCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJydW4tcG9zdGluc3RzLnNlcnZpY2UiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwk6Cit9CisKK2RvX2NvbXBpbGUgKCkgeworCToKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcnVuLXBvc3RpbnN0cyAke0R9JHtzYmluZGlyfS8KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3J1bi1wb3N0aW5zdHMuaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvcnVuLXBvc3RpbnN0cworCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ydW4tcG9zdGluc3RzLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisKKwlzZWQgLWkgLWUgJ3M6I1NZU0NPTkZESVIjOiR7c3lzY29uZmRpcn06ZycgXAorICAgICAgICAgICAgICAgLWUgJ3M6I1NCSU5ESVIjOiR7c2JpbmRpcn06ZycgXAorICAgICAgICAgICAgICAgLWUgJ3M6I0JBU0VfQklORElSIzoke2Jhc2VfYmluZGlyfTpnJyBcCisgICAgICAgICAgICAgICAtZSAnczojTE9DQUxTVEFURURJUiM6JHtsb2NhbHN0YXRlZGlyfTpnJyBcCisgICAgICAgICAgICAgICAke0R9JHtzYmluZGlyfS9ydW4tcG9zdGluc3RzIFwKKyAgICAgICAgICAgICAgICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3J1bi1wb3N0aW5zdHMuc2VydmljZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tMC42LjMvYXV0b2hlbGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi0wLjYuMy9hdXRvaGVsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjM5YjAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tMC42LjMvYXV0b2hlbGwucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorUGF0Y2ggb2J0YWluZWQgZnJvbSBPcGVuRW1iZWRkZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIHNnbWwtY29tbW9uLTAuNi4zL2Jpbi9NYWtlZmlsZS5hbX5hdXRvaGVsbC5wYXRjaAkyMDAxLTAxLTMwIDE1OjQyOjIxLjAwMDAwMDAwMCArMDEwMAorKysrIHNnbWwtY29tbW9uLTAuNi4zL2Jpbi9NYWtlZmlsZS5hbQkyMDA0LTA2LTE3IDExOjUxOjExLjAwMDAwMDAwMCArMDIwMAorQEAgLTEsNiArMSw1IEBACisgcHJpbWl0aXZlX3NjcmlwdHMgPSBzZ21sd2hpY2gKKyAKKy1iaW5kaXIgPSAkKHByZWZpeCkvYmluCisgYmluX1NDUklQVFMgPSBpbnN0YWxsLWNhdGFsb2cgJChwcmltaXRpdmVfc2NyaXB0cykKKyAKKyBFWFRSQV9ESVNUID0gIGluc3RhbGwtY2F0YWxvZy5pbiAkKHByaW1pdGl2ZV9zY3JpcHRzKQorLS0tIC9kZXYvbnVsbAkyMDAzLTA5LTIzIDE5OjU5OjIyLjAwMDAwMDAwMCArMDIwMAorKysrIHNnbWwtY29tbW9uLTAuNi4zL2Jpbi9zZ21sd2hpY2guaW4JMjAwNC0wNi0xNyAxMTo1MToxMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNyBAQAorKyMhL2Jpbi9zaAorKyMgTG9jYXRpb24gb2YgdGhlIG1haW4gY29uZmlndXJhdGlvbiBmaWxlIGZvciBjb25zaXN0ZW5jeSB3aXRoIG5vbi1MU0IgcGxhdGZvcm1zCisrIyBTZW5kIGFueSBjb21tZW50cyB0byBFcmljIEJpc2Nob2ZmIDxlcmljQGNhbGRlcmEuZGU+CisrIyBUaGlzIHByb2dyYW0gaXMgdW5kZXIgR1BMIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCisrCisrZWNobyAiQHN5c2NvbmZkaXJAL3NnbWwvc2dtbC5jb25mIgorKyMgU2ltcGxlLCBpc24ndCBpdD8gOy0pCistLS0gL2Rldi9udWxsCTIwMDMtMDktMjMgMTk6NTk6MjIuMDAwMDAwMDAwICswMjAwCisrKysgc2dtbC1jb21tb24tMC42LjMvY29uZmlnL3NnbWwuY29uZi5pbgkyMDA0LTA2LTE3IDExOjUxOjExLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwyIEBACisrU0dNTF9CQVNFX0RJUj1AZGF0YWRpckAvc2dtbAorK1NHTUxfQ0FUQUxPR1NfRElSPUBzeXNjb25mZGlyQC9zZ21sCistLS0gc2dtbC1jb21tb24tMC42LjMvY29uZmlndXJlLmlufmF1dG9oZWxsLnBhdGNoCTIwMDEtMDUtMjUgMTg6NDA6NTQuMDAwMDAwMDAwICswMjAwCisrKysgc2dtbC1jb21tb24tMC42LjMvY29uZmlndXJlLmluCTIwMDQtMDYtMTcgMTE6NTM6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtMywxMSArMyw2IEBACisgCisgQU1fSU5JVF9BVVRPTUFLRShzZ21sLWNvbW1vbiwgMC42LjMpCisgCistZG9jZGlyPSckKHByZWZpeCkvZG9jJworLUFDX1NVQlNUKGRvY2RpcikKKy0KKy1kbmwgQ2hlY2tzIGZvciBwcm9ncmFtcy4KKy0KKyBkbmwgQ2hlY2tzIGZvciBsaWJyYXJpZXMuCisgCisgZG5sIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorQEAgLTE4LDYgKzEzLDUgQEAKKyAKKyBBQ19PVVRQVVQoTWFrZWZpbGUgXAorICAgICAgICAgICBiaW4vTWFrZWZpbGUgYmluL2luc3RhbGwtY2F0YWxvZyBcCistICAgICAgICAgIGNvbmZpZy9NYWtlZmlsZSBcCistICAgICAgICAgIGRvYy9NYWtlZmlsZSBkb2MvSFRNTC9NYWtlZmlsZSBkb2MvbWFuL01ha2VmaWxlIGRvYy9yZWZlbnRyeS9NYWtlZmlsZSBcCisrICAgICAgICAgIGNvbmZpZy9NYWtlZmlsZSBjb25maWcvc2dtbC5jb25mIGJpbi9zZ21sd2hpY2ggXAorICAgICAgICAgICBzZ21sLWlzby1lbnRpdGllcy9NYWtlZmlsZSB4bWwtaXNvLWVudGl0aWVzL01ha2VmaWxlKQorCistLS0gc2dtbC1jb21tb24tMC42LjMvTWFrZWZpbGUuYW1+bm8tZG9jcwkyMDAxLTA1LTI1IDE4OjIyOjAxLjAwMDAwMDAwMCArMDIwMAorKysrIHNnbWwtY29tbW9uLTAuNi4zL01ha2VmaWxlLmFtCTIwMDQtMDYtMTcgMTE6NDk6MDkuMDAwMDAwMDAwICswMjAwCitAQCAtMSw0ICsxLDQgQEAKKy1TVUJESVJTID0gYmluIGNvbmZpZyBkb2Mgc2dtbC1pc28tZW50aXRpZXMgeG1sLWlzby1lbnRpdGllcworK1NVQkRJUlMgPSBiaW4gY29uZmlnIHNnbWwtaXNvLWVudGl0aWVzIHhtbC1pc28tZW50aXRpZXMKKyAKKyBzZ21sY29kaXIgPSAkKHByZWZpeCkvc2hhcmUvc2dtbAorIHNnbWxjb19EQVRBID0geG1sLmRjbApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tMC42LjMvbGljZW5zZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLTAuNi4zL2xpY2Vuc2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRiM2Y1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLTAuNi4zL2xpY2Vuc2UucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVGhlIENPUFlJTkcgZmlsZSBzZ21sLWNvbW1vbiBzaGlwcyB3aXRoIGlzIGp1c3QgYSBzeW1saW5rIHRvCisvdXNyL3NoYXJlL2F1dG9tYWtlL0NPUFlJTkcsIHdoaWNoIG1lYW5zIHdlIGNhbid0IHZlcmlmeSBpdAordXNpbmcgb3VyIG5vcm1hbCBtZWFucy4gV2Ugd29ya2Fyb3VuZCB0aGlzIGJ5IHVzaW5nIHRoaXMgcGF0Y2gKK3RvIGNyZWF0ZSBvdXIgb3duIGxpY2Vuc2UgZmlsZS4gCisKK1Vwc3RyZWFtIHdhcyBub3RpZmllZCBhYm91dCB0aGlzIG9uIDIwMTEtMDEtMjQuIFdoZW4gdXBncmFkaW5nCit0aGlzIHJlY2lwZSwgdGhpcyBzaG91bGQgYmUgZml4ZWQgYW5kIHlvdSBzaG91bGQgcmVtb3ZlIHRoaXMKK3BhdGNoLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLXVyTiBzZ21sLWNvbW1vbi0wLjYuMy5vcmlnL0xJQ0VOU0UtR1BMdjIgc2dtbC1jb21tb24tMC42LjMvTElDRU5TRS1HUEx2MgorLS0tIHNnbWwtY29tbW9uLTAuNi4zLm9yaWcvTElDRU5TRS1HUEx2MgkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysrIHNnbWwtY29tbW9uLTAuNi4zL0xJQ0VOU0UtR1BMdjIJMjAxMS0wMS0yOCAxNzowNToxNy4yOTk1MjgwMDEgLTA4MDAKK0BAIC0wLDAgKzEsMTIgQEAKKytDb3B5cmlnaHQgKEMpIDE5OTcgQ2hyaXN0aWFuIFNjaHdhcnogPHNjaHdhcnpAZGViaWFuLm9yZz4uCisrQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgQXJkbyB2YW4gUmFuZ2Vscm9vaWogPGFyZG9AZGViaWFuLm9yZz4KKysKKytUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyt0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisrdmVyc2lvbi4KKysKKytUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCB3aXRob3V0CisrYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgbWVyY2hhbnRhYmlsaXR5IG9yCisrZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrZm9yIG1vcmUgZGV0YWlscy4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLW5hdGl2ZV8wLjYuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLW5hdGl2ZV8wLjYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTc1MzY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tbmF0aXZlXzAuNi4zLmJiCkBAIC0wLDAgKzEsNzEgQEAKK1NVTU1BUlkgPSAiQmFzZSB1dGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCBTR01MIGFuZCBYTUwiCitERVNDUklQVElPTiA9ICJUaGUgc2dtbC1jb21tb24gcGFja2FnZSBnYXRoZXJzIHZlcnkgYmFzaWMgXAorc3R1ZmYgbmVjZXNzYXJ5IHRvIHdvcmsgd2l0aCBTR01MIGFuZCBYTUwsIHN1Y2ggYXMgeG1sLmRjbCwgXAorYSBTR01MIGRlY2xhcmF0aW9uIG9mIFhNTDsgaXNvLWVudGl0aWVzLCBhIGxpc3Qgb2YgdGhlIGJhc2ljIFwKK1NHTUwgSVNPIGVudGl0aWVzOyBhbmQgaW5zdGFsbC1jYXRhbG9nLCBhIHNjcmlwdCB1c2VkIHRvIFwKK2FkZCBlbnRyaWVzIHRvIChvciByZW1vdmUgZW50cmllcyBmcm9tKSBjZW50cmFsaXplZCBjYXRhbG9ncyBcCit3aG9zZSBlbnRyaWVzIGFyZSBwb2ludGVycyB0byBTR01MIG9wZW4gY2F0YWxvZ3MsIFwKK2FzIGRlZmluZWQgYnkgT0FTSVMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9kb2Nib29rLXRvb2xzLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorIyBTZWUgdGhlIGNvbW1lbnRzIGluIGxpY2Vuc2UucGF0Y2ggd2hlbiB1cGdyYWRpbmcgdGhpcyByZWNpcGUuCisjIFRoaXMgaXMgaW50ZWRlZCB0byBiZSBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS1HUEx2MjttZDU9YWI4YTUwYWJlODZkZmM4NTllMTQ4YmFhZTA0M2M4OWIiCitTRUNUSU9OID0gImJhc2UiCisKK1BSID0gInIxIgorCityZXF1aXJlIHNnbWwtY29tbW9uXyR7UFZ9LmJiCitpbmhlcml0IG5hdGl2ZQorCitTID0gIiR7V09SS0RJUn0vc2dtbC1jb21tb24tJHtQVn0iCisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAic2dtbF9jb21tb25fbmF0aXZlX21hbmdsZSIKK1NTVEFURVBPU1RJTlNURlVOQ1MgKz0gInNnbWxfY29tbW9uX3NzdGF0ZV9wb3N0aW5zdCIKK0NMRUFORlVOQ1MgKz0gInNnbWxfY29tbW9uX3NzdGF0ZV9jbGVhbiIKKworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIGluc3RhbGwtY2F0YWxvZyBzY3JpcHQgY29udGFpbnMgaGFyZC1jb2RlZCByZWZlcmVuY2VzIHRvCisJIyB7c3lzY29uZmRpcn0uIENoYW5nZSBpdCB0byAke0R9JHtzeXNjb25mZGlyfS4KKwlzZWQgLWkgLWUgInN8JHtzeXNjb25mZGlyfS9zZ21sfCR7RH0ke3N5c2NvbmZkaXJ9L3NnbWx8ZyIgJHtEfSR7YmluZGlyfS9pbnN0YWxsLWNhdGFsb2cKKworCSR7RH0ke2JpbmRpcn0vaW5zdGFsbC1jYXRhbG9nIFwKKwkJLS1hZGQgJHtEfSR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQgXAorCQkke0R9JHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nCisKKwkjIFRoZSBzZ21sLWRvY2Jvb2suY2F0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgYnkgc3N0YXRlX3Bvc3RpbnN0CisJcm0gLWYgJHtEfSR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0Cit9CisKK3NnbWxfY29tbW9uX25hdGl2ZV9tYW5nbGUgKCkgeworCSMgUmV2ZXJ0IGJhY2sgdG8gJHtzeXNjb25mZGlyfSBwYXRoIGluIGluc3RhbGwtY2F0YWxvZworCXNlZCAtaSAtZSAic3wke0R9JHtzeXNjb25mZGlyfS9zZ21sfCR7c3lzY29uZmRpcn0vc2dtbHxnIiAke1NZU1JPT1RfREVTVERJUn0ke1NUQUdJTkdfQklORElSfS9pbnN0YWxsLWNhdGFsb2cKKwkjIENoYW5nZSBwYXRoIGZyb20gJHtEfSR7ZGF0YWRpcn0vc2dtbC9zZ21sLWlzby1lbnRpdGllcy04ODc5LjE5ODYvY2F0YWxvZyB0byAke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2cgaW4gc2dtbC1lbnQuY2F0CisJc2VkIC1pIC1lICJzfCR7RH0ke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2d8JHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nfGciICR7U1lTUk9PVF9ERVNURElSfSR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQKKwkjIFJlbW92ZSAke0R9IHBhdGggZnJvbSBjYXRhbG9nIGZpbGUgY3JlYXRlZCBieSBpbnN0YWxsLWNhdGFsb2cgc2NyaXB0CisJc2VkIC1pIC1lICJzfCR7RH18fGciICR7U1lTUk9PVF9ERVNURElSfSR7c3lzY29uZmRpcn0vc2dtbC9jYXRhbG9nCit9CisKK3NnbWxfY29tbW9uX3NzdGF0ZV9wb3N0aW5zdCgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorCQkke2JpbmRpcn0vaW5zdGFsbC1jYXRhbG9nIC0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0ICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQKKwkJaWYgWyAtZSAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmJhayBdOyB0aGVuCisJCQlmb3IgY2F0YWxvZyBpbiBgYXdrICd7cHJpbnQgJDJ9JyAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmJha2A7IGRvCisJCQkJaWYgWyAhIGBncmVwICRjYXRhbG9nICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IDE+IC9kZXYvbnVsbCAyPiYxYCBdOyB0aGVuCisJCQkJCSR7YmluZGlyfS9pbnN0YWxsLWNhdGFsb2cgXAorCQkJCQkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgJGNhdGFsb2cKKwkJCQlmaQorCQkJZG9uZQorCQlmaQorCWZpCit9CisKK3NnbWxfY29tbW9uX3NzdGF0ZV9jbGVhbiAoKSB7CisJIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKwkjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyByZW1vdmVkIGZyb20gc3N0YXRlIGNhY2hlLgorCWlmIFsgLWYgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgXTsgdGhlbgorCQlzZWQgLWkgJy9cL3NnbWxcL3NnbWwtZW50LmNhdC9kJyAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdAorCWZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbl8wLjYuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uXzAuNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOTg2NzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbl8wLjYuMy5iYgpAQCAtMCwwICsxLDY4IEBACitTVU1NQVJZID0gIkJhc2UgdXRpbGl0aWVzIGZvciB3b3JraW5nIHdpdGggU0dNTCBhbmQgWE1MIgorREVTQ1JJUFRJT04gPSAiVGhlIHNnbWwtY29tbW9uIHBhY2thZ2UgZ2F0aGVycyB2ZXJ5IGJhc2ljIFwKK3N0dWZmIG5lY2Vzc2FyeSB0byB3b3JrIHdpdGggU0dNTCBhbmQgWE1MLCBzdWNoIGFzIHhtbC5kY2wsIFwKK2EgU0dNTCBkZWNsYXJhdGlvbiBvZiBYTUw7IGlzby1lbnRpdGllcywgYSBsaXN0IG9mIHRoZSBiYXNpYyBcCitTR01MIElTTyBlbnRpdGllczsgYW5kIGluc3RhbGwtY2F0YWxvZywgYSBzY3JpcHQgdXNlZCB0byBcCithZGQgZW50cmllcyB0byAob3IgcmVtb3ZlIGVudHJpZXMgZnJvbSkgY2VudHJhbGl6ZWQgY2F0YWxvZ3MgXAord2hvc2UgZW50cmllcyBhcmUgcG9pbnRlcnMgdG8gU0dNTCBvcGVuIGNhdGFsb2dzLCBcCithcyBkZWZpbmVkIGJ5IE9BU0lTLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vZG9jYm9vay10b29scy8iCitMSUNFTlNFID0gIkdQTHYyKyIKKyMgU2VlIHRoZSBjb21tZW50cyBpbiBsaWNlbnNlLnBhdGNoIHdoZW4gdXBncmFkaW5nIHRoaXMgcmVjaXBlLgorIyBUaGlzIGlzIGludGVkZWQgdG8gYmUgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZC4KK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UtR1BMdjI7bWQ1PWFiOGE1MGFiZTg2ZGZjODU5ZTE0OGJhYWUwNDNjODliIgorU0VDVElPTiA9ICJiYXNlIgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJmdHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vcHViL2RvY2Jvb2stdG9vbHMvbmV3LXRyaWFscy9TT1VSQ0VTL3NnbWwtY29tbW9uLSR7UFZ9LnRneiBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvaGVsbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWNlbnNlLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTAzYzk4MjhmMjQ4MjBkZjg2ZTU1ZTc4NjJlMjg5NzQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2RjNDE4YzFkMzYxMTIzZmZjNWU0NWQ2MWYxYjk3MjU3OTQwYThlYjM1ZDBiZmJiYzQ5MzM4MWNjNWIxZjk1OSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9fY29tcGlsZV9hcHBlbmQoKSB7CisJIyBpbnN0YWxsLWNhdGFsb2cgc2NyaXB0IGNvbnRhaW5zIGhhcmRjb2RlZCByZWZlcmVuY2VzIHRvIC9ldGMvc2dtbAorCXNlZCAtaSAtZSAnc3xcKFsgIl1cK1wpL2V0Yy9zZ21sfFwxJHtzeXNjb25mZGlyfS9zZ21sfGcnIGJpbi9pbnN0YWxsLWNhdGFsb2cKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vc2dtbCIKKworcGtnX3Bvc3RpbnN0XyR7UE59KCkgeworICAgIGlmIFsgIngkRCIgPSAieCIgXTsgdGhlbgorCWluc3RhbGwtY2F0YWxvZyBcCisJCS0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQgXAorCQkke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2cKKworCWluc3RhbGwtY2F0YWxvZyBcCisJCS0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IFwKKwkJJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdAorICAgIGVsc2UKKwlpZiAhIGdyZXAgLXEgJHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nICREJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdDsgdGhlbgorCSAgICBlY2hvICJDQVRBTE9HICR7ZGF0YWRpcn0vc2dtbC9zZ21sLWlzby1lbnRpdGllcy04ODc5LjE5ODYvY2F0YWxvZyIgPj4gJEQke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0CisJZmkKKwlpZiAhIGdyZXAgLXEgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdCAkRCR7c3lzY29uZmRpcn0vc2dtbC9jYXRhbG9nOyB0aGVuCisJICAgIGVjaG8gIkNBVEFMT0cgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdCIgPj4gJEQke3N5c2NvbmZkaXJ9L3NnbWwvY2F0YWxvZworCWZpCisKKwlpZiAhIGdyZXAgLXEgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdCAkRCR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0OyB0aGVuCisJICAgIGVjaG8gIkNBVEFMT0cgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdCIgPj4gJEQke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdAorCWZpCisJaWYgISBncmVwIC1xICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0ICREJHtzeXNjb25mZGlyfS9zZ21sL2NhdGFsb2c7IHRoZW4KKwkgICAgZWNobyAiQ0FUQUxPRyAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCIgPj4gJEQke3N5c2NvbmZkaXJ9L3NnbWwvY2F0YWxvZworCWZpCisgICAgZmkKK30KKworcGtnX3Bvc3RybV8ke1BOfSgpIHsKKwlpbnN0YWxsLWNhdGFsb2cgXAorCQktLXJlbW92ZSAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0IFwKKwkJJHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nCisKKwlpbnN0YWxsLWNhdGFsb2cgXAorCQktLXJlbW92ZSAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCBcCisJCSR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWxzcGwvc2dtbHNwbC1uYXRpdmVfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbHNwbC9zZ21sc3BsLW5hdGl2ZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUzNDYwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWxzcGwvc2dtbHNwbC1uYXRpdmVfZ2l0LmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiQSBzaW1wbGUgcG9zdC1wcm9jZXNzb3IgZm9yIFNHTUxTIGFuZCBOU0dNTFMiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vZ2l0cGFuL1NHTUxTcG0iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE4ODEwNjY5ZjEzYjg3MzQ4NDU5ZTYxMWQzMWFiNzYwIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vZ2l0cGFuL1NHTUxTcG0gXAorICAgICAgICAgICIKKworU1JDUkVWID0gIjcxNTk1YjliNWUzNmJmYzAwMDQ2OTk1ZTA1ODkyNmJkMjc3OTNmZWYiCisKK1BWID0gIjEuMStnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBuYXRpdmUgY3BhbgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBsbiAtcyBzZ21sc3BsLnBsICR7RH0ke2JpbmRpcn0vc2dtbHNwbAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3F1YXNoZnMtdG9vbHMvc3F1YXNoZnMtdG9vbHNfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3F1YXNoZnMtdG9vbHMvc3F1YXNoZnMtdG9vbHNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5N2IyODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zcXVhc2hmcy10b29scy9zcXVhc2hmcy10b29sc19naXQuYmIKQEAgLTAsMCArMSwzNyBAQAorIyBOb3RlLCB3ZSBjYW4gcHJvYmFibHkgcmVtb3ZlIHRoZSBsem1hIG9wdGlvbiBhcyBpdCBoYXMgYmUgcmVwbGFjZWQgd2l0aCB4eiwKKyMgYW5kIEkgZG9uJ3QgdGhpbmsgdGhlIGtlcm5lbCBzdXBwb3J0cyBpdCBhbnkgbW9yZS4KK1NVTU1BUlkgPSAiVG9vbHMgZm9yIG1hbmlwdWxhdGluZyBTcXVhc2hGUyBmaWxlc3lzdGVtcyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMLTIgJiBQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLy4uLy4uLzd6Qy50eHQ7YmVnaW5saW5lPTEyO2VuZGxpbmU9MTY7bWQ1PTIwNTZjZDZkOTE5ZWJjMzgwNzYwMjE0M2M3NDQ5YTdjIFwKKyIKK0RFUEVORFMgPSAiYXR0ciB6bGliIHh6IGx6byBsejQiCisKK1BWID0gIjQuMytnaXRyJHtTUkNQVn0iCitTUkNSRVYgPSAiOWMxZGI2ZDEzYTUxYTJlMDA5ZjAwMjdlZjMzNmNlMDM2MjRlYWMwZCIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9wbG91Z2hlci9zcXVhc2hmcy10b29scy5naXQ7cHJvdG9jb2w9aHR0cHMgXAorICAgICAgICAgICBodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9zZXZlbnppcC9sem1hNDY1LnRhci5iejI7bmFtZT1sem1hIFwKKyIKK1NSQ19VUklbbHptYS5tZDVzdW1dID0gIjI5ZDVmZmQwM2E1YTNlNTFhZWY2YTc0ZTllYWZiNzU5IgorU1JDX1VSSVtsem1hLnNoYTI1NnN1bV0gPSAiYzkzNWZkMDRkZDhlMGU4YzY4OGEzMDc4ZjM2NzVkNjk5Njc5YTkwYmU4MWMxMjY4NjgzN2UwODgwYWEwZmExZSIKKworUyA9ICIke1dPUktESVJ9L2dpdC9zcXVhc2hmcy10b29scyIKKworIyBFWFRSQV9PRU1BS0UgaXMgdHlwaWNhbGx5OiAtZSBNQUtFRkxBR1M9CisjIHRoZSAtZSBjYXVzZXMgcHJvYmxlbXMgYXMgQ0ZMQUdTIGlzIG1vZGlmaWVkIGluIHRoZSBNYWtlZmlsZSwgc28KKyMgd2UgcmVkZWZpbmUgRVhUUkFfT0VNQUtFIGhlcmUKK0VYVFJBX09FTUFLRSA9ICJNQUtFRkxBR1M9IExaTUFfU1VQUE9SVD0xIExaTUFfRElSPS4uLy4uIFhaX1NVUFBPUlQ9MSBMWk9fU1VQUE9SVD0xIExaNF9TVVBQT1JUPTEiCisKK2RvX2NvbXBpbGUoKSB7CisJb2VfcnVubWFrZSBta3NxdWFzaGZzIHVuc3F1YXNoZnMKK30KK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgbWtzcXVhc2hmcyAke0R9JHtzYmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgdW5zcXVhc2hmcyAke0R9JHtzYmluZGlyfS8KK30KKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvMDAwMS1BZGQtbGludXgtYWFyY2g2NC1hcmNoX3JlZ3MuaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvMDAwMS1BZGQtbGludXgtYWFyY2g2NC1hcmNoX3JlZ3MuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODUzOTU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLUFkZC1saW51eC1hYXJjaDY0LWFyY2hfcmVncy5oLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0Zyb20gZjg1ODU0MTMxYzgyNjVmMmViNTljNzE0ZGNlYTVjNGIzZGMwOWJlZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbi5rb29pQGxpbmFyby5vcmc+CitEYXRlOiBXZWQsIDE1IEFwciAyMDE1IDE0OjI5OjM3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCBsaW51eC9hYXJjaDY0L2FyY2hfcmVncy5oCisKK0l0IGlzIG1pc3NpbmcgZnJvbSB0aGUgdGFyYmFsbCwgYnV0IGl0IGlzIHByZXNlbnQgaW4gZ2l0IGZvciB2NC4xMAorCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW4ua29vaUBsaW5hcm8ub3JnPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaW51eC9hYXJjaDY0L2FyY2hfcmVncy5oIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGludXgvYWFyY2g2NC9hcmNoX3JlZ3MuaAorCitkaWZmIC0tZ2l0IGEvbGludXgvYWFyY2g2NC9hcmNoX3JlZ3MuaCBiL2xpbnV4L2FhcmNoNjQvYXJjaF9yZWdzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45YTVlMzNlCistLS0gL2Rldi9udWxsCisrKysgYi9saW51eC9hYXJjaDY0L2FyY2hfcmVncy5oCitAQCAtMCwwICsxLDIgQEAKKytleHRlcm4gdWludDY0X3QgKmNvbnN0IGFhcmNoNjRfc3BfcHRyOworK2V4dGVybiB1aW50MzJfdCAqY29uc3QgYXJtX3NwX3B0cjsKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9JbmNsdWRlLWxpbnV4LWlvY3RsLmgtZm9yLV9JT0NfLW1hY3Jvcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvSW5jbHVkZS1saW51eC1pb2N0bC5oLWZvci1fSU9DXy1tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkzNDZhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvSW5jbHVkZS1saW51eC1pb2N0bC5oLWZvci1fSU9DXy1tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9zdHJhY2UvY29kZS9jaS8zNDYwZGM0ODZkMzMzMjMxOTk4ZGUwZjE5OTE4MjA0YWFjZWU5YWUzCisKK0V4cGVjdGVkIHRvIGJlIHJlbGVhc2VkIG9mZmljaWFsbHkgYXMgcGFydCBvZiBzdHJhY2UgNC4xMQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorCitGcm9tIDM0NjBkYzQ4NmQzMzMyMzE5OThkZTBmMTk5MTgyMDRhYWNlZTlhZTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGZWxpeCBKYW5kYSA8ZmVsaXguamFuZGFAcG9zdGVvLmRlPgorRGF0ZTogU2F0LCAyOCBNYXIgMjAxNSAxODo0MDoxMyArMDEwMAorU3ViamVjdDogW1BBVENIXSBJbmNsdWRlIDxsaW51eC9pb2N0bC5oPiBmb3IgX0lPQ18qIG1hY3JvcworCitGaXggYSBjb21waWxhdGlvbiBmYWlsdXJlIHdpdGggbXVzbCBsaWJjLgorCisqIGV2ZGV2LmM6IEluY2x1ZGUgPGxpbnV4L2lvY3RsLmg+LgorKiBpb2N0bC5jOiBJbmNsdWRlIDxsaW51eC9pb2N0bC5oPiBpbnN0ZWFkIG9mIDxhc20vaW9jdGwuaD4uCisqIGlvY3Rsc29ydC5jOiBMaWtld2lzZS4KKworUmVwb3J0ZWQtYnk6IERpbWEgS3Jhc25lciA8ZGltYUBkaW1ha3Jhc25lci5jb20+CitBY2tlZC1ieTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorLS0tCisgZXZkZXYuYyAgICAgfCAyICsrCisgaW9jdGwuYyAgICAgfCAyICstCisgaW9jdGxzb3J0LmMgfCAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ldmRldi5jIGIvZXZkZXYuYworaW5kZXggOWE3NDMwZC4uZTA2ZjljMSAxMDA2NDQKKy0tLSBhL2V2ZGV2LmMKKysrKyBiL2V2ZGV2LmMKK0BAIC0yOCw2ICsyOCw4IEBACisgCisgI2luY2x1ZGUgImRlZnMuaCIKKyAKKysjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKysKKyAjaWZkZWYgSEFWRV9MSU5VWF9JTlBVVF9ICisgI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisgI2luY2x1ZGUgInhsYXQvZXZkZXZfYWJzLmgiCitkaWZmIC0tZ2l0IGEvaW9jdGwuYyBiL2lvY3RsLmMKK2luZGV4IDQ2ZjgzMzQuLmM2N2QwNDggMTAwNjQ0CistLS0gYS9pb2N0bC5jCisrKysgYi9pb2N0bC5jCitAQCAtMjksNyArMjksNyBAQAorICAqLworIAorICNpbmNsdWRlICJkZWZzLmgiCistI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorICNpbmNsdWRlICJ4bGF0L2lvY3RsX2RpcnMuaCIKKyAKKyAjaWZkZWYgSEFWRV9MSU5VWF9JTlBVVF9ICitkaWZmIC0tZ2l0IGEvaW9jdGxzb3J0LmMgYi9pb2N0bHNvcnQuYworaW5kZXggMzMzNTU2Yy4uOWMzMTY5MSAxMDA2NDQKKy0tLSBhL2lvY3Rsc29ydC5jCisrKysgYi9pb2N0bHNvcnQuYworQEAgLTMzLDcgKzMzLDcgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorLSNpbmNsdWRlIDxhc20vaW9jdGwuaD4KKysjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyAKKyBzdHJ1Y3QgaW9jdGxlbnQgeworIAljb25zdCBjaGFyICppbmZvOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL0luY2x1ZGUtc3lzLXN0YXQuaC1mb3ItU19JLW1hY3Jvcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvSW5jbHVkZS1zeXMtc3RhdC5oLWZvci1TX0ktbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMDcyZmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL0luY2x1ZGUtc3lzLXN0YXQuaC1mb3ItU19JLW1hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDUyIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3N0cmFjZS9jb2RlL2NpL2QzNGUwMGIyOTM5NDJiMTAxMmRkYzQ5ZWQzYWIzNzlhMzIzMzc2MTEKKworRXhwZWN0ZWQgdG8gYmUgcmVsZWFzZWQgb2ZmaWNpYWxseSBhcyBwYXJ0IG9mIHN0cmFjZSA0LjExCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CisKK0Zyb20gZDM0ZTAwYjI5Mzk0MmIxMDEyZGRjNDllZDNhYjM3OWEzMjMzNzYxMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZlbGl4IEphbmRhIDxmZWxpeC5qYW5kYUBwb3N0ZW8uZGU+CitEYXRlOiBTYXQsIDI4IE1hciAyMDE1IDE4OjIxOjA5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIEluY2x1ZGUgPHN5cy9zdGF0Lmg+IGZvciBTX0kqIG1hY3JvcworCitGaXggYSBjb21waWxhdGlvbiBmYWlsdXJlIHdpdGggbXVzbCBsaWJjLgorCisqIG1rbm9kLmM6IEluY2x1ZGUgPHN5cy9zdGF0Lmg+LgorKiBwcmludG1vZGUuYzogTGlrZXdpc2UuCisKK1JlcG9ydGVkLWJ5OiBEaW1hIEtyYXNuZXIgPGRpbWFAZGltYWtyYXNuZXIuY29tPgorQWNrZWQtYnk6IE1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KKy0tLQorIG1rbm9kLmMgICAgIHwgMSArCisgcHJpbnRtb2RlLmMgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWtub2QuYyBiL21rbm9kLmMKK2luZGV4IDA3ZTlhNDUuLjE0NjMyMzIgMTAwNjQ0CistLS0gYS9ta25vZC5jCisrKysgYi9ta25vZC5jCitAQCAtMSw2ICsxLDcgQEAKKyAjaW5jbHVkZSAiZGVmcy5oIgorIAorICNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorIAorICNpZmRlZiBNQUpPUl9JTl9TWVNNQUNST1MKKyAjIGluY2x1ZGUgPHN5cy9zeXNtYWNyb3MuaD4KK2RpZmYgLS1naXQgYS9wcmludG1vZGUuYyBiL3ByaW50bW9kZS5jCitpbmRleCA0ZGYxYjlmLi5hNzIxOTM2IDEwMDY0NAorLS0tIGEvcHJpbnRtb2RlLmMKKysrKyBiL3ByaW50bW9kZS5jCitAQCAtMSw2ICsxLDcgQEAKKyAjaW5jbHVkZSAiZGVmcy5oIgorIAorICNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorIAorICNpbmNsdWRlICJ4bGF0L21vZGV0eXBlcy5oIgorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL01ha2VmaWxlLXB0ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9NYWtlZmlsZS1wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzYwMzAxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9NYWtlZmlsZS1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDUzIEBACitzdHJhY2U6IEFkZCBwdGVzdAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogR2FicmllbCBCYXJidSA8Z2FicmllbC5iYXJidUBlbmVhLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgfCAgMiArLQorIHRlc3RzL01ha2VmaWxlLmFtIHwgMTggKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGU3Mzk1OGMuLjVmMGRmZWUgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTYsNyArNiw3IEBAIEFDX0lOSVQoW3N0cmFjZV0sCisgQUNfQ09ORklHX1NSQ0RJUihbc3RyYWNlLmNdKQorIEFDX0NPTkZJR19BVVhfRElSKFsuXSkKKyBBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQorLUFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gZGlzdC14eiBuby1kaXN0LWd6aXAgc2lsZW50LXJ1bGVzIHBhcmFsbGVsLXRlc3RzXSkKKytBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduIGRpc3QteHogbm8tZGlzdC1nemlwIHNpbGVudC1ydWxlcyBzZXJpYWwtdGVzdHNdKQorIEFNX01BSU5UQUlORVJfTU9ERQorIEFDX0NBTk9OSUNBTF9IT1NUCisgCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggZmY1ZTEzNi4uOTg0YmRiNiAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEwMSwzICsxMDEsMjEgQEAgRVhUUkFfRElTVCA9IGluaXQuc2ggcnVuLnNoIFwKKyAJICAgICAkKFRFU1RTKQorIAorIENMRUFORklMRVMgPSAkKFRFU1RTOj0udG1wKQorKworK2J1aWxkdGVzdC1URVNUUzogJChjaGVja19QUk9HUkFNUykgJChURVNUUykKKysKKytpbnN0YWxsLXB0ZXN0OgorKwlpbnN0YWxsICQoQlVJTERESVIpL3N0cmFjZSAkKERFU1RESVIpCisrCWluc3RhbGwgIiQoc3JjZGlyKS8uLiIvc3RyYWNlLWxvZy1tZXJnZSAkKERFU1RESVIpCisrCWluc3RhbGwgLWQgJChERVNURElSKS8kKFRFU1RESVIpCisrCWNwICQoQlVJTERESVIpLyQoVEVTVERJUikvTWFrZWZpbGUgJChERVNURElSKS8kKFRFU1RESVIpCisrCXNlZCAtaSAtZSAncy9eTWFrZWZpbGU6L19NYWtlZmlsZTovJyAkKERFU1RESVIpLyQoVEVTVERJUikvTWFrZWZpbGUKKysJc2VkIC1pIC1lICdzL2Jhc2gvc2gvJyAkKERFU1RESVIpLyQoVEVTVERJUikvTWFrZWZpbGUKKysJZm9yIGZpbGUgaW4gJChjaGVja19QUk9HUkFNUyk7IGRvIFwKKysJCWluc3RhbGwgJChCVUlMRERJUikvJChURVNURElSKS8kJGZpbGUgJChERVNURElSKS8kKFRFU1RESVIpOyBcCisrCWRvbmUKKysJZm9yIGZpbGUgaW4gJChFWFRSQV9ESVNUKTsgZG8gXAorKwkJaW5zdGFsbCAkKHNyY2RpcikvJCRmaWxlICQoREVTVERJUikvJChURVNURElSKTsgXAorKwkJc2VkIC1pIC1lICdzLyQke3NyY2Rpcj0ufS8uL2cnICQoREVTVERJUikvJChURVNURElSKS8kJGZpbGU7IFwKKysJZG9uZQorKwlmb3IgaSBpbiBuZXQgbmV0LWZkIHNjbV9yaWdodHMtZmQgc2lnYWN0aW9uOyBkbyBzZWQgLWkgLWUgJ3MvJCRzcmNkaXIvLi9nJyAkKERFU1RESVIpLyQoVEVTVERJUikvJCRpLnRlc3Q7IGRvbmUKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9naXQtdmVyc2lvbi1nZW4gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL2dpdC12ZXJzaW9uLWdlbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZmVlNzRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9naXQtdmVyc2lvbi1nZW4KQEAgLTAsMCArMSwyMjUgQEAKKyMhL2Jpbi9zaAorIyBQcmludCBhIHZlcnNpb24gc3RyaW5nLgorc2NyaXB0dmVyc2lvbj0yMDEyLTEyLTMxLjIzOyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIHNjcmlwdCBpcyBkZXJpdmVkIGZyb20gR0lULVZFUlNJT04tR0VOIGZyb20gR0lUOiBodHRwOi8vZ2l0Lm9yLmN6Ly4KKyMgSXQgbWF5IGJlIHJ1biB0d28gd2F5czoKKyMgLSBmcm9tIGEgZ2l0IHJlcG9zaXRvcnkgaW4gd2hpY2ggdGhlICJnaXQgZGVzY3JpYmUiIGNvbW1hbmQgYmVsb3cKKyMgICBwcm9kdWNlcyB1c2VmdWwgb3V0cHV0ICh0aHVzIHJlcXVpcmluZyBhdCBsZWFzdCBvbmUgc2lnbmVkIHRhZykKKyMgLSBmcm9tIGEgbm9uLWdpdC1yZXBvIGRpcmVjdG9yeSBjb250YWluaW5nIGEgLnRhcmJhbGwtdmVyc2lvbiBmaWxlLCB3aGljaAorIyAgIHByZXN1bWVzIHRoaXMgc2NyaXB0IGlzIGludm9rZWQgbGlrZSAiLi9naXQtdmVyc2lvbi1nZW4gLnRhcmJhbGwtdmVyc2lvbiIuCisKKyMgSW4gb3JkZXIgdG8gdXNlIGludHJhLXZlcnNpb24gc3RyaW5ncyBpbiB5b3VyIHByb2plY3QsIHlvdSB3aWxsIG5lZWQgdHdvCisjIHNlcGFyYXRlIGdlbmVyYXRlZCB2ZXJzaW9uIHN0cmluZyBmaWxlczoKKyMKKyMgLnRhcmJhbGwtdmVyc2lvbiAtIHByZXNlbnQgb25seSBpbiBhIGRpc3RyaWJ1dGlvbiB0YXJiYWxsLCBhbmQgbm90IGluCisjICAgYSBjaGVja2VkLW91dCByZXBvc2l0b3J5LiAgQ3JlYXRlZCB3aXRoIGNvbnRlbnRzIHRoYXQgd2VyZSBsZWFybmVkIGF0CisjICAgdGhlIGxhc3QgdGltZSBhdXRvY29uZiB3YXMgcnVuLCBhbmQgdXNlZCBieSBnaXQtdmVyc2lvbi1nZW4uICBNdXN0IG5vdAorIyAgIGJlIHByZXNlbnQgaW4gZWl0aGVyICQoc3JjZGlyKSBvciAkKGJ1aWxkZGlyKSBmb3IgZ2l0LXZlcnNpb24tZ2VuIHRvCisjICAgZ2l2ZSBhY2N1cmF0ZSBhbnN3ZXJzIGR1cmluZyBub3JtYWwgZGV2ZWxvcG1lbnQgd2l0aCBhIGNoZWNrZWQgb3V0IHRyZWUsCisjICAgYnV0IG11c3QgYmUgcHJlc2VudCBpbiBhIHRhcmJhbGwgd2hlbiB0aGVyZSBpcyBubyB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtLgorIyAgIFRoZXJlZm9yZSwgaXQgY2Fubm90IGJlIHVzZWQgaW4gYW55IGRlcGVuZGVuY2llcy4gIEdOVW1ha2VmaWxlIGhhcworIyAgIGhvb2tzIHRvIGZvcmNlIGEgcmVjb25maWd1cmUgYXQgZGlzdHJpYnV0aW9uIHRpbWUgdG8gZ2V0IHRoZSB2YWx1ZQorIyAgIGNvcnJlY3QsIHdpdGhvdXQgcGVuYWxpemluZyBub3JtYWwgZGV2ZWxvcG1lbnQgd2l0aCBleHRyYSByZWNvbmZpZ3VyZXMuCisjCisjIC52ZXJzaW9uIC0gcHJlc2VudCBpbiBhIGNoZWNrZWQtb3V0IHJlcG9zaXRvcnkgYW5kIGluIGEgZGlzdHJpYnV0aW9uCisjICAgdGFyYmFsbC4gIFVzYWJsZSBpbiBkZXBlbmRlbmNpZXMsIHBhcnRpY3VsYXJseSBmb3IgZmlsZXMgdGhhdCBkb24ndAorIyAgIHdhbnQgdG8gZGVwZW5kIG9uIGNvbmZpZy5oIGJ1dCBkbyB3YW50IHRvIHRyYWNrIHZlcnNpb24gY2hhbmdlcy4KKyMgICBEZWxldGUgdGhpcyBmaWxlIHByaW9yIHRvIGFueSBhdXRvY29uZiBydW4gd2hlcmUgeW91IHdhbnQgdG8gcmVidWlsZAorIyAgIGZpbGVzIHRvIHBpY2sgdXAgYSB2ZXJzaW9uIHN0cmluZyBjaGFuZ2U7IGFuZCBsZWF2ZSBpdCBzdGFsZSB0bworIyAgIG1pbmltaXplIHJlYnVpbGQgdGltZSBhZnRlciB1bnJlbGF0ZWQgY2hhbmdlcyB0byBjb25maWd1cmUgc291cmNlcy4KKyMKKyMgQXMgd2l0aCBhbnkgZ2VuZXJhdGVkIGZpbGUgaW4gYSBWQydkIGRpcmVjdG9yeSwgeW91IHNob3VsZCBhZGQKKyMgLy52ZXJzaW9uIHRvIC5naXRpZ25vcmUsIHNvIHRoYXQgeW91IGRvbid0IGFjY2lkZW50YWxseSBjb21taXQgaXQuCisjIC50YXJiYWxsLXZlcnNpb24gaXMgbmV2ZXIgZ2VuZXJhdGVkIGluIGEgVkMnZCBkaXJlY3RvcnksIHNvIG5lZWRuJ3QKKyMgYmUgbGlzdGVkIHRoZXJlLgorIworIyBVc2UgdGhlIGZvbGxvd2luZyBsaW5lIGluIHlvdXIgY29uZmlndXJlLmFjLCBzbyB0aGF0ICQoVkVSU0lPTikgd2lsbAorIyBhdXRvbWF0aWNhbGx5IGJlIHVwLXRvLWRhdGUgZWFjaCB0aW1lIGNvbmZpZ3VyZSBpcyBydW4gKGFuZCBub3RlIHRoYXQKKyMgc2luY2UgY29uZmlndXJlLmFjIG5vIGxvbmdlciBpbmNsdWRlcyBhIHZlcnNpb24gc3RyaW5nLCBNYWtlZmlsZSBydWxlcworIyBzaG91bGQgbm90IGRlcGVuZCBvbiBjb25maWd1cmUuYWMgZm9yIHZlcnNpb24gdXBkYXRlcykuCisjCisjIEFDX0lOSVQoW0dOVSBwcm9qZWN0XSwKKyMgICAgICAgICBtNF9lc3lzY21kKFtidWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuIC50YXJiYWxsLXZlcnNpb25dKSwKKyMgICAgICAgICBbYnVnLXByb2plY3RAZXhhbXBsZV0pCisjCisjIFRoZW4gdXNlIHRoZSBmb2xsb3dpbmcgbGluZXMgaW4geW91ciBNYWtlZmlsZS5hbSwgc28gdGhhdCAudmVyc2lvbgorIyB3aWxsIGJlIHByZXNlbnQgZm9yIGRlcGVuZGVuY2llcywgYW5kIHNvIHRoYXQgLnZlcnNpb24gYW5kCisjIC50YXJiYWxsLXZlcnNpb24gd2lsbCBleGlzdCBpbiBkaXN0cmlidXRpb24gdGFyYmFsbHMuCisjCisjIEVYVFJBX0RJU1QgPSAkKHRvcF9zcmNkaXIpLy52ZXJzaW9uCisjIEJVSUxUX1NPVVJDRVMgPSAkKHRvcF9zcmNkaXIpLy52ZXJzaW9uCisjICQodG9wX3NyY2RpcikvLnZlcnNpb246CisjCWVjaG8gJChWRVJTSU9OKSA+ICRALXQgJiYgbXYgJEAtdCAkQAorIyBkaXN0LWhvb2s6CisjCWVjaG8gJChWRVJTSU9OKSA+ICQoZGlzdGRpcikvLnRhcmJhbGwtdmVyc2lvbgorCisKK21lPSQwCisKK3ZlcnNpb249ImdpdC12ZXJzaW9uLWdlbiAkc2NyaXB0dmVyc2lvbgorCitDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoZXJlIGlzIE5PIHdhcnJhbnR5LiAgWW91IG1heSByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIG1hdHRlcnMsIHNlZSB0aGUgZmlsZXMgbmFtZWQgQ09QWUlORy4iCisKK3VzYWdlPSJcCitVc2FnZTogJG1lIFtPUFRJT05dLi4uIFwkc3JjZGlyLy50YXJiYWxsLXZlcnNpb24gW1RBRy1OT1JNQUxJWkFUSU9OLVNFRC1TQ1JJUFRdCitQcmludCBhIHZlcnNpb24gc3RyaW5nLgorCitPcHRpb25zOgorCisgICAtLXByZWZpeCAgICAgICAgICAgcHJlZml4IG9mIGdpdCB0YWdzIChkZWZhdWx0ICd2JykKKyAgIC0tZmFsbGJhY2sgICAgICAgICBmYWxsYmFjayB2ZXJzaW9uIHRvIHVzZSBpZiBcImdpdCAtLXZlcnNpb25cIiBmYWlscworCisgICAtLWhlbHAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKyAgIC0tdmVyc2lvbiAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorCitSdW5uaW5nIHdpdGhvdXQgYXJndW1lbnRzIHdpbGwgc3VmZmljZSBpbiBtb3N0IGNhc2VzLiIKKworcHJlZml4PXYKK2ZhbGxiYWNrPQorCit3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbworICBjYXNlICQxIGluCisgICAgLS1oZWxwKSBlY2hvICIkdXNhZ2UiOyBleGl0IDA7OworICAgIC0tdmVyc2lvbikgZWNobyAiJHZlcnNpb24iOyBleGl0IDA7OworICAgIC0tcHJlZml4KSBzaGlmdDsgcHJlZml4PSIkMSI7OworICAgIC0tZmFsbGJhY2spIHNoaWZ0OyBmYWxsYmFjaz0iJDEiOzsKKyAgICAtKikKKyAgICAgIGVjaG8gIiQwOiBVbmtub3duIG9wdGlvbiAnJDEnLiIgPiYyCisgICAgICBlY2hvICIkMDogVHJ5ICctLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCisgICAgICBleGl0IDE7OworICAgICopCisgICAgICBpZiB0ZXN0ICJ4JHRhcmJhbGxfdmVyc2lvbl9maWxlIiA9IHg7IHRoZW4KKyAgICAgICAgdGFyYmFsbF92ZXJzaW9uX2ZpbGU9IiQxIgorICAgICAgZWxpZiB0ZXN0ICJ4JHRhZ19zZWRfc2NyaXB0IiA9IHg7IHRoZW4KKyAgICAgICAgdGFnX3NlZF9zY3JpcHQ9IiQxIgorICAgICAgZWxzZQorICAgICAgICBlY2hvICIkMDogZXh0cmEgbm9uLW9wdGlvbiBhcmd1bWVudCAnJDEnLiIgPiYyCisgICAgICAgIGV4aXQgMQorICAgICAgZmk7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2lmIHRlc3QgIngkdGFyYmFsbF92ZXJzaW9uX2ZpbGUiID0geDsgdGhlbgorICAgIGVjaG8gIiR1c2FnZSIKKyAgICBleGl0IDEKK2ZpCisKK3RhZ19zZWRfc2NyaXB0PSIke3RhZ19zZWRfc2NyaXB0Oi1zL3gveC99IgorCitubD0nCisnCisKKyMgQXZvaWQgbWVkZGxpbmcgYnkgZW52aXJvbm1lbnQgdmFyaWFibGUgb2YgdGhlIHNhbWUgbmFtZS4KK3Y9Cit2X2Zyb21fZ2l0PQorCisjIEZpcnN0IHNlZSBpZiB0aGVyZSBpcyBhIHRhcmJhbGwtb25seSB2ZXJzaW9uIGZpbGUuCisjIHRoZW4gdHJ5ICJnaXQgZGVzY3JpYmUiLCB0aGVuIGRlZmF1bHQuCitpZiB0ZXN0IC1mICR0YXJiYWxsX3ZlcnNpb25fZmlsZQordGhlbgorICAgIHY9YGNhdCAkdGFyYmFsbF92ZXJzaW9uX2ZpbGVgIHx8IHY9CisgICAgY2FzZSAkdiBpbgorICAgICAgICAqJG5sKikgdj0gOzsgIyByZWplY3QgbXVsdGktbGluZSBvdXRwdXQKKyAgICAgICAgWzAtOV0qKSA7OworICAgICAgICAqKSB2PSA7OworICAgIGVzYWMKKyAgICB0ZXN0ICJ4JHYiID0geCBcCisgICAgICAgICYmIGVjaG8gIiQwOiBXQVJOSU5HOiAkdGFyYmFsbF92ZXJzaW9uX2ZpbGUgaXMgbWlzc2luZyBvciBkYW1hZ2VkIiAxPiYyCitmaQorCitpZiB0ZXN0ICJ4JHYiICE9IHgKK3RoZW4KKyAgICA6ICMgdXNlICR2CisjIE90aGVyd2lzZSwgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdpdCBjb21taXQgaW52b2x2aW5nIHRoZSB3b3JraW5nCisjIGRpcmVjdG9yeSwgYW5kICJnaXQgZGVzY3JpYmUiIG91dHB1dCBsb29rcyBzZW5zaWJsZSwgdXNlIHRoYXQgdG8KKyMgZGVyaXZlIGEgdmVyc2lvbiBzdHJpbmcuCitlbGlmIHRlc3QgImBnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDp4IC4gMj4mMWAiID0geCBcCisgICAgJiYgdj1gZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTQgLS1tYXRjaD0iJHByZWZpeCoiIEhFQUQgMj4vZGV2L251bGwgXAorICAgICAgICAgIHx8IGdpdCBkZXNjcmliZSAtLWFiYnJldj00IEhFQUQgMj4vZGV2L251bGxgIFwKKyAgICAmJiB2PWBwcmludGYgJyVzXG4nICIkdiIgfCBzZWQgIiR0YWdfc2VkX3NjcmlwdCJgIFwKKyAgICAmJiBjYXNlICR2IGluCisgICAgICAgICAkcHJlZml4WzAtOV0qKSA7OworICAgICAgICAgKikgKGV4aXQgMSkgOzsKKyAgICAgICBlc2FjCit0aGVuCisgICAgIyBJcyB0aGlzIGEgbmV3IGdpdCB0aGF0IGxpc3RzIG51bWJlciBvZiBjb21taXRzIHNpbmNlIHRoZSBsYXN0CisgICAgIyB0YWcgb3IgdGhlIHByZXZpb3VzIG9sZGVyIHZlcnNpb24gdGhhdCBkaWQgbm90PworICAgICMgICBOZXdlcjogdjYuMTAtNzctZzBmOGZhZWIKKyAgICAjICAgT2xkZXI6IHY2LjEwLWcwZjhmYWViCisgICAgY2FzZSAkdiBpbgorICAgICAgICAqLSotKikgOiBnaXQgZGVzY3JpYmUgaXMgb2theSB0aHJlZSBwYXJ0IGZsYXZvciA7OworICAgICAgICAqLSopCisgICAgICAgICAgICA6IGdpdCBkZXNjcmliZSBpcyBvbGRlciB0d28gcGFydCBmbGF2b3IKKyAgICAgICAgICAgICMgUmVjcmVhdGUgdGhlIG51bWJlciBvZiBjb21taXRzIGFuZCByZXdyaXRlIHN1Y2ggdGhhdCB0aGUKKyAgICAgICAgICAgICMgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIGlmIHdlIHdlcmUgdXNpbmcgdGhlIG5ld2VyIHZlcnNpb24KKyAgICAgICAgICAgICMgb2YgZ2l0IGRlc2NyaWJlLgorICAgICAgICAgICAgdnRhZz1gZWNobyAiJHYiIHwgc2VkICdzLy0uKi8vJ2AKKyAgICAgICAgICAgIGNvbW1pdF9saXN0PWBnaXQgcmV2LWxpc3QgIiR2dGFnIi4uSEVBRCAyPi9kZXYvbnVsbGAgXAorICAgICAgICAgICAgICAgIHx8IHsgY29tbWl0X2xpc3Q9ZmFpbGVkOworICAgICAgICAgICAgICAgICAgICAgZWNobyAiJDA6IFdBUk5JTkc6IGdpdCByZXYtbGlzdCBmYWlsZWQiIDE+JjI7IH0KKyAgICAgICAgICAgIG51bWNvbW1pdHM9YGVjaG8gIiRjb21taXRfbGlzdCIgfCB3YyAtbGAKKyAgICAgICAgICAgIHY9YGVjaG8gIiR2IiB8IHNlZCAicy9cKC4qXCktXCguKlwpL1wxLSRudW1jb21taXRzLVwyLyJgOworICAgICAgICAgICAgdGVzdCAiJGNvbW1pdF9saXN0IiA9IGZhaWxlZCAmJiB2PVVOS05PV04KKyAgICAgICAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBDaGFuZ2UgdGhlIGZpcnN0ICctJyB0byBhICcuJywgc28gdmVyc2lvbi1jb21wYXJpbmcgdG9vbHMgd29yayBwcm9wZXJseS4KKyAgICAjIFJlbW92ZSB0aGUgImciIGluIGdpdCBkZXNjcmliZSdzIG91dHB1dCBzdHJpbmcsIHRvIHNhdmUgYSBieXRlLgorICAgIHY9YGVjaG8gIiR2IiB8IHNlZCAncy8tLy4wLi87cy9cKC4qXCktZy9cMS0vJ2A7CisgICAgdl9mcm9tX2dpdD0xCitlbGlmIHRlc3QgIngkZmFsbGJhY2siID0geCB8fCBnaXQgLS12ZXJzaW9uID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIHY9VU5LTk9XTgorZWxzZQorICAgIHY9JGZhbGxiYWNrCitmaQorCit2PWBlY2hvICIkdiIgfHNlZCAicy9eJHByZWZpeC8vImAKKworIyBUZXN0IHdoZXRoZXIgdG8gYXBwZW5kIHRoZSAiLWRpcnR5IiBzdWZmaXggb25seSBpZiB0aGUgdmVyc2lvbgorIyBzdHJpbmcgd2UncmUgdXNpbmcgY2FtZSBmcm9tIGdpdC4gIEkuZS4sIHNraXAgdGhlIHRlc3QgaWYgaXQncyAiVU5LTk9XTiIKKyMgb3IgaWYgaXQgY2FtZSBmcm9tIC50YXJiYWxsLXZlcnNpb24uCitpZiB0ZXN0ICJ4JHZfZnJvbV9naXQiICE9IHg7IHRoZW4KKyAgIyBEb24ndCBkZWNsYXJlIGEgdmVyc2lvbiAiZGlydHkiIG1lcmVseSBiZWNhdXNlIGEgdGltZSBzdGFtcCBoYXMgY2hhbmdlZC4KKyAgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggPiAvZGV2L251bGwgMj4mMQorCisgIGRpcnR5PWBleGVjIDI+L2Rldi9udWxsO2dpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQURgIHx8IGRpcnR5PQorICBjYXNlICIkZGlydHkiIGluCisgICAgICAnJykgOzsKKyAgICAgICopICMgQXBwZW5kIHRoZSBzdWZmaXggb25seSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeS4KKyAgICAgICAgICBjYXNlICR2IGluCisgICAgICAgICAgICAqLWRpcnR5KSA7OworICAgICAgICAgICAgKikgdj0iJHYtZGlydHkiIDs7CisgICAgICAgICAgZXNhYyA7OworICBlc2FjCitmaQorCisjIE9taXQgdGhlIHRyYWlsaW5nIG5ld2xpbmUsIHNvIHRoYXQgbTRfZXN5c2NtZCBjYW4gdXNlIHRoZSByZXN1bHQgZGlyZWN0bHkuCitlY2hvICIkdiIgfCB0ciAtZCAiJG5sIgorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEzM2NmOTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL3J1bi1wdGVzdApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorbWFrZSAtQyB0ZXN0cyAtayBydW50ZXN0LVRFU1RTCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL3N0cmFjZS1hZGQtY29uZmlndXJlLW9wdGlvbnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL3N0cmFjZS1hZGQtY29uZmlndXJlLW9wdGlvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4ZTRiMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2Uvc3RyYWNlLWFkZC1jb25maWd1cmUtb3B0aW9ucy5wYXRjaApAQCAtMCwwICsxLDU3IEBACitBZGQgb3B0aW9ucyAiYWlvIiBhbmQgImFjbCIgdG8gZW5hYmxlL2Rpc2FibGUgbGliYWlvIGFuZCBhY2wgc3VwcG9ydC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAgIDI2ICsrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZTczOTU4Yy4uOTA5OTM3MCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjcwLDYgKzI3MCwxOCBAQCBBQ19DSEVDS19IRUFERVJTKG00X25vcm1hbGl6ZShbCisgCXN5cy92ZnMuaAorIAlzeXMveGF0dHIuaAorIF0pKQorKworK0FDX0FSR19FTkFCTEUoW2FjbF0sCisrCVtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtYWNsXSwgW3R1cm4gb24gYWNsIHN1cHBvcnRdKV0sCisrCVtjYXNlICRlbmFibGV2YWwgaW4KKysJeWVzKQorKwkJQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL2FjbC5oXSkKKysJCTs7CisrCW5vKSAgOzsKKysJKikgICBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAkZW5hYmxldmFsIGZvciBhaW8gb3B0aW9uXSkgOzsKKysJZXNhY10KKyspCisrCisgQUNfQ0hFQ0tfSEVBREVSUyhbbGludXgvaWNtcC5oIGxpbnV4L2luNi5oIGxpbnV4L25ldGxpbmsuaCBsaW51eC9pZl9wYWNrZXQuaF0sCisgICAgICAgICAgICAgICAgICBbXSwgW10sIFsjaW5jbHVkZSA8c3RkZGVmLmg+CisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KK0BAIC03NDUsNiArNzU3LDIwIEBAIGlmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2RsYWRkciIgPSB4eWVzOyB0aGVuCisgZmkKKyBBQ19TVUJTVChkbF9MSUJTKQorIAorK0FDX0FSR19FTkFCTEUoW2Fpb10sCisrCVtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtYWlvXSwgW3R1cm4gb24gbGliYWlvIHN1cHBvcnRdKV0sCisrCVtjYXNlICRlbmFibGV2YWwgaW4KKysJeWVzKQorKwlBQ19DSEVDS19IRUFERVJTKFtsaWJhaW8uaF0sIFsKKysJCUFDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBpb2NiLnUuYy5mbGFnc10sLCwgWyNpbmNsdWRlIDxsaWJhaW8uaD5dKQorKwkJQUNfQ0hFQ0tfREVDTFMoW0lPX0NNRF9QV1JJVEUsIElPX0NNRF9QV1JJVEVWXSwsLCBbI2luY2x1ZGUgPGxpYmFpby5oPl0pCisrCV0pCisrCTs7CisrCW5vKSAgOzsKKysJKikgICBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAkZW5hYmxldmFsIGZvciBhaW8gb3B0aW9uXSkgOzsKKysJZXNhY10KKyspCisrCisgQUNfUEFUSF9QUk9HKFtQRVJMXSwgW3BlcmxdKQorIAorIGRubCBzdGFjayB0cmFjZSB3aXRoIGxpYnVud2luZAorLS0KKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2VfNC4xMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2VfNC4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGI3ZTNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZV80LjEwLmJiCkBAIC0wLDAgKzEsNTIgQEAKK1NVTU1BUlkgPSAiU3lzdGVtIGNhbGwgdHJhY2luZyB0b29sIgorSE9NRVBBR0UgPSAiaHR0cDovL3N0cmFjZS5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEyNDUwMGMyMWU4NTZmMDkxMmRmMjkyOTViYTEwNGM3IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9zdHJhY2Uvc3RyYWNlLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1saW51eC1hYXJjaDY0LWFyY2hfcmVncy5oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dpdC12ZXJzaW9uLWdlbiBcCisgICAgICAgICAgIGZpbGU6Ly9zdHJhY2UtYWRkLWNvbmZpZ3VyZS1vcHRpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLXB0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9JbmNsdWRlLXN5cy1zdGF0LmgtZm9yLVNfSS1tYWNyb3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vSW5jbHVkZS1saW51eC1pb2N0bC5oLWZvci1fSU9DXy1tYWNyb3MucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjEwN2E1YmU0NTU0OTM4NjExODllOWI1N2EzYTUxOTEyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU2MTgwZDg2NmVmOWU3NjU4NmI5NmUyZWNlMmJmZWViM2FhMjNmNWNjODgxNTNmNzZlOWNhZWRkNjVlNDBlZTIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0IGJsdWV0b290aAorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIm1ha2UgY29yZXV0aWxzIGdyZXAgZ2F3ayIKKworUEFDS0FHRUNPTkZJR19jbGFzcy10YXJnZXQgPz89ICJcCisgICAgbGliYWlvICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWNsJywgJ2FjbCcsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJ2JsdWV6JywgJycsIGQpfSBcCisiCisKK1BBQ0tBR0VDT05GSUdbbGliYWlvXSA9ICItLWVuYWJsZS1haW8sLS1kaXNhYmxlLWFpbyxsaWJhaW8iCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLS1lbmFibGUtYWNsLC0tZGlzYWJsZS1hY2wsYWNsIgorUEFDS0FHRUNPTkZJR1tsaWJ1bndpbmRdID0gIi0td2l0aC1saWJ1bndpbmQsIC0td2l0aG91dC1saWJ1bndpbmQsIGxpYnVud2luZCIKK1BBQ0tBR0VDT05GSUdbYmx1ZXpdID0gImFjX2N2X2hlYWRlcl9ibHVldG9vdGhfYmx1ZXRvb3RoX2g9eWVzLGFjX2N2X2hlYWRlcl9ibHVldG9vdGhfYmx1ZXRvb3RoX2g9bm8sJHtCTFVFWn0iCisKK1RFU1RESVIgPSAidGVzdHMiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWNwICR7V09SS0RJUn0vZ2l0LXZlcnNpb24tZ2VuICR7U30KK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBXZSBkb24ndCBzaGlwIHN0cmFjZS1ncmFwaCBoZXJlIGJlY2F1c2UgaXQgbmVlZHMgcGVybAorCXJtICR7RH0ke2JpbmRpcn0vc3RyYWNlLWdyYXBoCit9CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSAtQyAke1RFU1RESVJ9IGJ1aWxkdGVzdC1URVNUUyBPUz1saW51eCBBUkNIPSIke1RBUkdFVF9BUkNIfSIKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIC1DICR7VEVTVERJUn0gaW5zdGFsbC1wdGVzdCBCVUlMRERJUj0ke0J9IERFU1RESVI9JHtEfSR7UFRFU1RfUEFUSH0gVEVTVERJUj0ke1RFU1RESVJ9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uLTEuOC4xMy9kaXNhYmxlX21hY29zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uLTEuOC4xMy9kaXNhYmxlX21hY29zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjM2JlNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL2Rpc2FibGVfbWFjb3MucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorVGhlc2UgdGVzdHMgZG9uJ3Qgd29yayBpbiBjcm9zcyBjb21waWxpbmcsIGp1c3QgZGlzYWJsZSB0aGVtIGZvciBub3csIHdlIGRvbid0CitidWlsZCBzdWJ2ZXJzaW9uIG9uIE9TLVggYXQgdGhpcyB0aW1lLgorCitSUCAxMDE0LzcvMTYKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtuZWVkcyBhIHJld3JpdGUgdG8gc3VwcG9ydCBhIGNhY2hlIHZhbHVlXQorCitJbmRleDogc3VidmVyc2lvbi0xLjguOS9idWlsZC9hYy1tYWNyb3MvbWFjb3N4Lm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3VidmVyc2lvbi0xLjguOS5vcmlnL2J1aWxkL2FjLW1hY3Jvcy9tYWNvc3gubTQJMjAxMi0xMS0yNiAwMzowNDoyNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBzdWJ2ZXJzaW9uLTEuOC45L2J1aWxkL2FjLW1hY3Jvcy9tYWNvc3gubTQJMjAxNC0wNy0xNiAxMjoyODo1OC4zNTczMDA0MDMgKzAwMDAKK0BAIC0yNCwyMSArMjQsNyBAQAorIEFDX0RFRlVOKFNWTl9MSUJfTUFDSE9fSVRFUkFURSwKKyBbCisgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBNYWNoLU8gZHluYW1pYyBtb2R1bGUgaXRlcmF0aW9uIGZ1bmN0aW9uc10pCistICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKy0gICAgI2luY2x1ZGUgPG1hY2gtby9keWxkLmg+CistICAgICNpbmNsdWRlIDxtYWNoLW8vbG9hZGVyLmg+CistICBdXSxbWworLSAgICBjb25zdCBzdHJ1Y3QgbWFjaF9oZWFkZXIgKmhlYWRlciA9IF9keWxkX2dldF9pbWFnZV9oZWFkZXIoMCk7CistICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBfZHlsZF9nZXRfaW1hZ2VfbmFtZSgwKTsKKy0gICAgaWYgKG5hbWUgJiYgaGVhZGVyKSByZXR1cm4gMDsKKy0gICAgcmV0dXJuIDE7CistICBdXSldLFsKKy0gICAgQUNfREVGSU5FKFtTVk5fSEFWRV9NQUNIT19JVEVSQVRFXSwgWzFdLAorLSAgICAgICAgICAgICAgW0lzIE1hY2gtTyBsb3ctbGV2ZWwgX2R5bGQgQVBJIGF2YWlsYWJsZT9dKQorLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorLSAgXSxbCisgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKy0gIF0pCisgXSkKKyAKKyBkbmwgU1ZOX0xJQl9NQUNPU19QTElTVAorQEAgLTQ2LDM0ICszMiw3IEBACisgQUNfREVGVU4oU1ZOX0xJQl9NQUNPU19QTElTVCwKKyBbCisgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBNYWMgT1MgcHJvcGVydHkgbGlzdCB1dGlsaXRpZXNdKQorLQorLSAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworLSAgICAjaW5jbHVkZSA8QXZhaWxhYmlsaXR5TWFjcm9zLmg+CistICAgICNpZiAhZGVmaW5lZChNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEKSBcCistICAgICB8fCAhZGVmaW5lZChNQUNfT1NfWF9WRVJTSU9OXzEwXzApIFwKKy0gICAgIHx8IChNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEIDw9IE1BQ19PU19YX1ZFUlNJT05fMTBfMCkKKy0gICAgI2Vycm9yIFByb3BlcnlMaXN0IEFQSSB1bmF2YWlsYWJsZS4KKy0gICAgI2VuZGlmCistICBdXSxbW11dKV0sWworLSAgICBkbmwgIyMjIEhhY2suICBXZSBzaG91bGQgb25seSBuZWVkIHRvIHBhc3MgdGhlIC1mcmFtZXdvcmsgb3B0aW9ucyB3aGVuCistICAgIGRubCBsaW5raW5nIGxpYnN2bl9zdWJyLCBzaW5jZSBpdCBpcyB0aGUgb25seSBsaWJyYXJ5IHRoYXQgdXNlcyBLZXljaGFpbi4KKy0gICAgZG5sCistICAgIGRubCBVbmZvcnR1bmF0ZWx5LCBsaWJ0b29sIDEuNS54IGRvZXNuJ3QgdHJhY2sgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMgZm9yCistICAgIGRubCBPUyBYIGZyYW1ld29ya3MgbGlrZSBpdCBkb2VzIGZvciBub3JtYWwgbGlicmFyaWVzLCBzbyB3ZSBuZWVkIHRvCistICAgIGRubCBleHBsaWNpdGx5IHBhc3MgdGhlIG9wdGlvbiB0byBhbGwgdGhlIHVzZXJzIG9mIGxpYnN2bl9zdWJyIHRvIGFsbG93CistICAgIGRubCBzdGF0aWMgYnVpbGRzIHRvIGxpbmsgc3VjY2Vzc2Z1bGx5LgorLSAgICBkbmwKKy0gICAgZG5sIFRoaXMgZG9lcyBtZWFuIHRoYXQgYWxsIGV4ZWN1dGFibGVzIHdlIGxpbmsgd2lsbCBiZSBsaW5rZWQgZGlyZWN0bHkKKy0gICAgZG5sIHRvIHRoZXNlIGZyYW1ld29ya3MgLSBldmVuIHdoZW4gYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcyAtIGJ1dCB0aGF0CistICAgIGRubCBzaG91bGRuJ3QgY2F1c2UgYW55IHByb2JsZW1zLgorLQorLSAgICBMSUJTPSIkTElCUyAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIgorLSAgICBBQ19ERUZJTkUoW1NWTl9IQVZFX01BQ09TX1BMSVNUXSwgWzFdLAorLSAgICAgICAgICAgICAgW0lzIE1hYyBPUyBwcm9wZXJ0eSBsaXN0IEFQSSBhdmFpbGFibGU/XSkKKy0gICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKy0gIF0sWworICAgICBBQ19NU0dfUkVTVUxUKFtub10pCistICBdKQorIF0pCisgCisgZG5sIFNWTl9MSUJfTUFDT1NfS0VZQ0hBSU4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvbGlidG9vbDIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL2xpYnRvb2wyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZDU3MmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL2xpYnRvb2wyLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKy0tLSBhL2NvbmZpZ3VyZS5hYwkyMDExLTEwLTIwIDIxOjU2OjAyLjIzMDY2Mzk4NyArMDIwMAorKysrIGIvY29uZmlndXJlLmFjCTIwMTEtMDgtMTcgMTU6MDE6MzAuMDAwMDAwMDAwICswMjAwCitAQCAtMjI3LDggKzIyNyw4IEBACisgICBMSUJUT09MPSIkc2hfbGlidG9vbCIKKyAgIFNWTl9MSUJUT09MPSIkc2hfbGlidG9vbCIKKyBlbHNlCistICBzaF9saWJ0b29sPSIkYWJzX2J1aWxkZGlyL2xpYnRvb2wiCistICBTVk5fTElCVE9PTD0iXCQoU0hFTEwpICRzaF9saWJ0b29sIgorKyAgc2hfbGlidG9vbD0iJGFic19idWlsZGRpci8kaG9zdF9hbGlhcy1saWJ0b29sIgorKyAgU1ZOX0xJQlRPT0w9IlwkKFNIRUxMKSBcJChhYnNfYnVpbGRkaXIpLyRob3N0X2FsaWFzLWxpYnRvb2wiCisgZmkKKyBBQ19TVUJTVChTVk5fTElCVE9PTCkKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvc2VyZi5tNC1SZWdleC1tb2RpZmllZC10by1hbGxvdy1ELWluLXBhdGhzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uLTEuOC4xMy9zZXJmLm00LVJlZ2V4LW1vZGlmaWVkLXRvLWFsbG93LUQtaW4tcGF0aHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwZTUyMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvc2VyZi5tNC1SZWdleC1tb2RpZmllZC10by1hbGxvdy1ELWluLXBhdGhzLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gZjFiNmU0OWYxMmExOGVhYmU4OGViNzMyYjU3OGExNjI4MWQwOTQ5OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFRodSwgMiBKdWwgMjAxNSAxMTozNzo0MyArMDAwMAorU3ViamVjdDogW1BBVENIXSBzZXJmLm00OiBSZWdleCBtb2RpZmllZCB0byBhbGxvdyAnLUQnIGluIHBhdGhzCisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQKKworVGhlIHBhdGNoIGlzIG1lcmdlZCBieSBzdWJ2ZXJzaW9uIHVwc3RyZWFtIHdpdGggcmVwbGFjaW5nICdbWzpzcGFjZTpdXScgd2l0aCAnICcuCisKK2h0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3dmMvc3VidmVyc2lvbi90cnVuay9idWlsZC9hYy1tYWNyb3Mvc2VyZi5tND9yMT0xNTk0MTU2JnIyPTE2ODk4MjQgIAorCitTaWduZWQtb2ZmLWJ5OiBKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+CistLS0KKyBidWlsZC9hYy1tYWNyb3Mvc2VyZi5tNCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2J1aWxkL2FjLW1hY3Jvcy9zZXJmLm00IGIvYnVpbGQvYWMtbWFjcm9zL3NlcmYubTQKK2luZGV4IGFlMTFlNzUuLmZmOGNiYWUgMTAwNjQ0CistLS0gYS9idWlsZC9hYy1tYWNyb3Mvc2VyZi5tNAorKysrIGIvYnVpbGQvYWMtbWFjcm9zL3NlcmYubTQKK0BAIC0xNDMsNyArMTQzLDcgQEAgQUNfREVGVU4oU1ZOX1NFUkZfUEtHX0NPTkZJRywKKyAgICAgICAgIGlmICRQS0dfQ09ORklHICRzZXJmX21ham9yIC0tYXRsZWFzdC12ZXJzaW9uPSRzZXJmX2NoZWNrX3ZlcnNpb247IHRoZW4KKyAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgICAgc2VyZl9mb3VuZD15ZXMKKy0gICAgICAgICAgU1ZOX1NFUkZfSU5DTFVERVM9W2AkUEtHX0NPTkZJRyAkc2VyZl9tYWpvciAtLWNmbGFncyB8ICRTRUQgLWUgJ3MvLURbXiBdKi8vZydgXQorKyAgICAgICAgICBTVk5fU0VSRl9JTkNMVURFUz1bYCRQS0dfQ09ORklHICRzZXJmX21ham9yIC0tY2ZsYWdzIHwgJFNFRCAtZSAncy9bWzpzcGFjZTpdXS1EW14gXSovL2cnIC1lICdzL14tRFteIF0qLy9nJ2BdCisgICAgICAgICAgIFNWTl9TRVJGX0xJQlM9YCRQS0dfQ09ORklHICRzZXJmX21ham9yIC0tbGlic2AgCisgICAgICAgICAgIGJyZWFrCisgICAgICAgICBlbHNlCistLSAKKzEuOC40LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uXzEuOC4xMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbl8xLjguMTMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg0M2I5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbl8xLjguMTMuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJTdWJ2ZXJzaW9uIChzdm4pIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gY2xpZW50IgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitERVBFTkRTID0gImFwci11dGlsIHNlcmYgc3FsaXRlMyBmaWxlIgorUkRFUEVORFNfJHtQTn0gPSAic2VyZiIKK0xJQ0VOU0UgPSAiQXBhY2hlLTIiCitIT01FUEFHRSA9ICJodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworaW5oZXJpdCBnZXR0ZXh0IHB5dGhvbm5hdGl2ZQorCitTUkNfVVJJID0gIiR7QVBBQ0hFX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnRvb2wyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfbWFjb3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2VyZi5tNC1SZWdleC1tb2RpZmllZC10by1hbGxvdy1ELWluLXBhdGhzLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NDEzNDE3YjUyOWQ3YmRmODJmNzRlNTBkZjAyZTg4YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxMDk5Y2M2ODg0MDc1M2I0OGFlZGIzYTI3ZWJkMWUyYWZiY2M4NGRkYjg3MTQxMmU1ZDUwMGU4NDNkNjA3NTc5IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0xYzJmMDExOWU0Nzg3MDBiNTQyOGUyNjM4NmNmZjkyMyIKKworUEFDS0FHRUNPTkZJR1tzYXNsXSA9ICItLXdpdGgtc2FzbCwtLXdpdGhvdXQtc2FzbCxjeXJ1cy1zYXNsIgorUEFDS0FHRUNPTkZJR1tnbm9tZS1rZXlyaW5nXSA9ICItLXdpdGgtZ25vbWUta2V5cmluZywtLXdpdGhvdXQtZ25vbWUta2V5cmluZyxnbGliLTIuMCBnbm9tZS1rZXlyaW5nIgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtYmVya2VsZXktZGIgLS13aXRob3V0LWFweHMgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1zd2lnIC0td2l0aC1hcHI9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30gXAorICAgICAgICAgICAgICAgIC0td2l0aC1hcHItdXRpbD0ke1NUQUdJTkdfQklORElSX0NST1NTfSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWtleWNoYWluIFwKKyAgICAgICAgICAgICAgICBhY19jdl9wYXRoX1JVQlk9bm9uZSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZXhwb3J0IExERkxBR1MgKz0gIiAtTCR7U1RBR0lOR19MSUJESVJ9ICIKK0NQUEZMQUdTICs9ICItUCIKK0JVSUxEX0NQUEZMQUdTICs9ICItUCIKKworYWNwYXRocyA9ICItSSBidWlsZC8gLUkgYnVpbGQvYWMtbWFjcm9zLyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vbGlidG9vbAorCXJtIC1mICR7U30vYnVpbGQvbGlidG9vbC5tNCAke1N9L2J1aWxkL2x0bWFpbi5zaCAke1N9L2J1aWxkL2x0b3B0aW9ucy5tNCAke1N9L2J1aWxkL2x0c3VnYXIubTQgJHtTfS9idWlsZC9sdHZlcnNpb24ubTQgJHtTfS9idWlsZC9sdH5vYnNvbGV0ZS5tNAorCXJtIC1mICR7U30vYWNsb2NhbC5tNAorCXNlZCAtaSAtZSAnczp3aXRoX3Nhc2w9Ii91c3IvbG9jYWwiOndpdGhfc2FzbD0iJHtTVEFHSU5HX0RJUn0iOicgJHtTfS9idWlsZC9hYy1tYWNyb3Mvc2FzbC5tNAorfQorCisjfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL2J1aWxkL3N1YnZlcnNpb24vbGlic3ZuX3JhX2xvY2FsL2xpYnN2bl9yYV9sb2NhbC0xLmxhJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYid8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvYnVpbGQvc3VidmVyc2lvbi9saWJzdm5fcmVwb3MvbGlic3ZuX3JlcG9zLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJ3wgL3Vzci9iaW4vbGQ6IGNhbm5vdCBmaW5kIC1sc3ZuX2RlbHRhLTF8IGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL2J1aWxkL3N1YnZlcnNpb24vbGlic3ZuX3JhX3N2bi9saWJzdm5fcmFfc3ZuLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJ3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9idWlsZC9zdWJ2ZXJzaW9uL2xpYnN2bl9yYV9zZXJmL2xpYnN2bl9yYV9zZXJmLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJworI3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IGVycm9yOiByZWxpbmsgYGxpYnN2bl9yYV9zZXJmLTEubGEnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQKKyN8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgLi4vLi4vc3VidmVyc2lvbi9saWJzdm5fcmVwb3MvbGlic3ZuX3JlcG9zLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJworI3wgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvc3VidmVyc2lvbi0xLjguOS9idWlsZC1vdXRwdXRzLm1rOjEwOTA6IHJlY2lwZSBmb3IgdGFyZ2V0ICdpbnN0YWxsLXNlcmYtbGliJyBmYWlsZWQKKyN8IG1ha2U6ICoqKiBbaW5zdGFsbC1zZXJmLWxpYl0gRXJyb3IgMQorUEFSQUxMRUxfTUFLRUlOU1QgPSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dhYmJlci9zd2FiYmVyLW5hdGl2ZV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2FiYmVyL3N3YWJiZXItbmF0aXZlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjMxM2JiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dhYmJlci9zd2FiYmVyLW5hdGl2ZV9naXQuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJUb29sIHRvIG1vbml0b3IgYW5kIHJlcG9ydCBvbiBob3N0IHN5c3RlbSBmaWxlIHVzYWdlIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvc3dhYmJlciIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKKworU1JDUkVWID0gIjJkMWZlMzZmYjBhNGZkYWFlODgyM2E5ODE4YTY3ODUxODJkNzVlNjYiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvc3dhYmJlciIKKworaW5oZXJpdCBuYXRpdmUKKworZG9fY29uZmlndXJlICgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisgIG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgyMWZhNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy5pbmMKQEAgLTAsMCArMSw2MyBAQAorREVTQ1JJUFRJT04gPSAiU1dJRyAtIFNpbXBsaWZpZWQgV3JhcHBlciBhbmQgSW50ZXJmYWNlIEdlbmVyYXRvciIKK0hPTUVQQUdFID0gImh0dHA6Ly9zd2lnLnNvdXJjZWZvcmdlLm5ldC8iCitMSUNFTlNFID0gIkJTRCAmIEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZTc4MDdhNjI4Mjc4NGE3ZGRlNGM4NDY2MjZiMDhmYzYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS1HUEw7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UtVU5JVkVSU0lUSUVTO21kNT04Y2U5ZGNjOGY3Yzk5NGRlNGE0MDhiMjA1YzcyYmEwOCIKKworU0VDVElPTiA9ICJkZXZlbCIKKworREVQRU5EUyA9ICJsaWJwY3JlIHB5dGhvbiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3oiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB5dGhvbm5hdGl2ZQorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAtLXdpdGgtcHl0aG9uPSR7UFlUSE9OfSBcCisgICAgLS13aXRob3V0LWFsbGVncm9jbCBcCisgICAgLS13aXRob3V0LWFuZHJvaWQgXAorICAgIC0td2l0aG91dC1ib29zdCBcCisgICAgLS13aXRob3V0LWNoaWNrZW4gXAorICAgIC0td2l0aG91dC1jbGlzcCBcCisgICAgLS13aXRob3V0LWNzaGFycCBcCisgICAgLS13aXRob3V0LWQgXAorICAgIC0td2l0aG91dC1nY2ogXAorICAgIC0td2l0aG91dC1nbyBcCisgICAgLS13aXRob3V0LWd1aWxlIFwKKyAgICAtLXdpdGhvdXQtamF2YSBcCisgICAgLS13aXRob3V0LWx1YSBcCisgICAgLS13aXRob3V0LW16c2NoZW1lIFwKKyAgICAtLXdpdGhvdXQtb2NhbWwgXAorICAgIC0td2l0aG91dC1vY3RhdmUgXAorICAgIC0td2l0aG91dC1wZXJsNSBcCisgICAgLS13aXRob3V0LXBpa2UgXAorICAgIC0td2l0aG91dC1waHAgXAorICAgIC0td2l0aG91dC1weXRob24zIFwKKyAgICAtLXdpdGhvdXQtciBcCisgICAgLS13aXRob3V0LXJ1YnkgXAorICAgIC0td2l0aG91dC10Y2wgXAorIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nbnUtY29uZmlnL2NvbmZpZy5ndWVzcyAke1N9L1Rvb2xzL2NvbmZpZworICAgIGluc3RhbGwgLW0gMDc1NSAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dudS1jb25maWcvY29uZmlnLnN1YiAke1N9L1Rvb2xzL2NvbmZpZworICAgIGluc3RhbGwgLW0gMDc1NSAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dudS1jb25maWcvY29uZmlnLmd1ZXNzICR7U30KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nbnUtY29uZmlnL2NvbmZpZy5zdWIgJHtTfQorICAgIG9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworICAgIGNkICR7RH0ke2JpbmRpcn0KKyAgICBsbiAtcyBzd2lnIHN3aWcyLjAKK30KKworZGVmIHN3aWdsaWJfcmVscGF0aChkKToKKyAgICBzd2lnbGliID0gZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSArICIvIiArIGQuZ2V0VmFyKCdCUE4nLCBUcnVlKSArICIvIiArIGQuZ2V0VmFyKCdQVicsIFRydWUpCisgICAgcmV0dXJuIG9zLnBhdGgucmVscGF0aChzd2lnbGliLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKyAgICBjcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3N3aWcgU1dJR19MSUI9J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAc3dpZ2xpYl9yZWxwYXRoKGQpfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLzAwMDEtVXNlLXByb2Mtc2VsZi1leGUtZm9yLXN3aWctc3dpZ2xpYi1vbi1ub24tV2luMzItcGxhdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy8wMDAxLVVzZS1wcm9jLXNlbGYtZXhlLWZvci1zd2lnLXN3aWdsaWItb24tbm9uLVdpbjMyLXBsYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFkZjNlMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy8wMDAxLVVzZS1wcm9jLXNlbGYtZXhlLWZvci1zd2lnLXN3aWdsaWItb24tbm9uLVdpbjMyLXBsYXQucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorRnJvbSBhNGEwNDQwYTY0NGM2YzVlNWRhMDk2ZWZlM2NmMDViYTMwOWEyODRmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIk5PREEsIEthaSIgPG5vZGFrYWlAZ21haWwuY29tPgorRGF0ZTogU3VuLCAyMiBBcHIgMjAxMiAxNzowMTowMiArMDkwMAorU3ViamVjdDogW1BBVENIXSBVc2UgL3Byb2Mvc2VsZi9leGUgZm9yICJzd2lnIC1zd2lnbGliIiBvbiBub24tV2luMzIKKyBwbGF0Zm9ybXMuCisKK0lmIGl0IHdhc24ndCBmb3VuZCwgdGhlbiBmYWxsIGJhY2sgdG8gYSBmaXhlZCBzdHJpbmcganVzdCBhcyBiZWZvcmUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCitodHRwOi8vc291cmNlZm9yZ2UubmV0L21haWxhcmNoaXZlL21lc3NhZ2UucGhwP21zZ19pZD0yOTE3OTczMworCistLS0KKyBTb3VyY2UvTW9kdWxlcy9tYWluLmN4eCB8ICAgMjQgKysrKysrKysrKysrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9Tb3VyY2UvTW9kdWxlcy9tYWluLmN4eCBiL1NvdXJjZS9Nb2R1bGVzL21haW4uY3h4CitpbmRleCBkMmY1ZDNiLi5jYmIwYTEyIDEwMDY0NAorLS0tIGEvU291cmNlL01vZHVsZXMvbWFpbi5jeHgKKysrKyBiL1NvdXJjZS9Nb2R1bGVzL21haW4uY3h4CitAQCAtMjYsNiArMjYsMTEgQEAgY2hhciBjdnNyb290X21haW5fY3h4W10gPSAiJElkJCI7CisgI2luY2x1ZGUgImNwYXJzZS5oIgorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxsaW1pdHMuaD4JCS8vIGZvciBJTlRfTUFYCisrI2lmbmRlZiBfV0lOMzIKKysjaW5jbHVkZSA8Y3N0ZGRlZj4KKysjaW5jbHVkZSA8dW5pc3RkLmg+CQkvLyBmb3IgcmVhZGxpbmsKKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4JCS8vIGZvciBzdGF0CisrI2VuZGlmCisgCisgLy8gR2xvYmFsIHZhcmlhYmxlcworIAorQEAgLTkwMiw5ICs5MDcsOSBAQCBpbnQgU1dJR19tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10sIExhbmd1YWdlICpsKSB7CisgCisgICAvLyBDaGVjayBmb3IgU1dJR19MSUIgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIGlmICgoYyA9IGdldGVudigiU1dJR19MSUIiKSkgPT0gKGNoYXIgKikgMCkgeworKyAgICBjaGFyICpwOworICNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgY2hhciBidWZbTUFYX1BBVEhdOworLSAgICBjaGFyICpwOworICAgICBpZiAoIShHZXRNb2R1bGVGaWxlTmFtZSgwLCBidWYsIE1BWF9QQVRIKSA9PSAwIHx8IChwID0gc3RycmNocihidWYsICdcXCcpKSA9PSAwKSkgeworICAgICAgICoocCArIDEpID0gJ1wwJzsKKyAgICAgICBTd2lnTGliID0gTmV3U3RyaW5nZigiJXNMaWIiLCBidWYpOyAvLyBOYXRpdmUgd2luZG93cyBpbnN0YWxsYXRpb24gcGF0aAorQEAgLTkxNCw3ICs5MTksMjIgQEAgaW50IFNXSUdfbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdLCBMYW5ndWFnZSAqbCkgeworICAgICBpZiAoTGVuKFNXSUdfTElCX1dJTl9VTklYKSA+IDApCisgICAgICAgU3dpZ0xpYldpblVuaXggPSBOZXdTdHJpbmcoU1dJR19MSUJfV0lOX1VOSVgpOyAvLyBVbml4IGluc3RhbGxhdGlvbiBwYXRoIHVzaW5nIGEgZHJpdmUgbGV0dGVyIChmb3IgbXN5cy9taW5ndykKKyAjZWxzZQorLSAgICBTd2lnTGliID0gTmV3U3RyaW5nKFNXSUdfTElCKTsKKysgICAgY2hhciBidWZbUEFUSF9NQVhdOworKyAgICBpZiAoMCA8IDo6cmVhZGxpbmsoIi9wcm9jL3NlbGYvZXhlIiwgYnVmLCBzaXplb2YoYnVmKSkgJiYKKysgICAgICAgIChwID0gOjpzdHJzdHIoYnVmLCAiL2Jpbi9zd2lnIikpKSB7CisrICAgICAgICBpbnQgbWFqb3IsIG1pbm9yLCBwYXRjaDsKKysgICAgICAgIGNvbnN0IGludCByZXQgPSA6OnNzY2FuZihWRVJTSU9OLCAiJWQuJWQuJWQiLCAmbWFqb3IsICZtaW5vciwgJnBhdGNoKTsKKysgICAgICAgIGlmICgzID09IHJldCkgeworKyAgICAgICAgICAgIGNvbnN0IDo6cHRyZGlmZl90IGRpcl9wYXJ0X2xlbiA9IHAgLSBidWY7CisrICAgICAgICAgICAgOjpzbnByaW50ZihwLCBQQVRIX01BWCAtIGRpcl9wYXJ0X2xlbiwgIi9zaGFyZS9zd2lnLyVkLiVkLiVkIiwgbWFqb3IsIG1pbm9yLCBwYXRjaCk7CisrICAgICAgICAgICAgc3RydWN0IDo6c3RhdCBzdGF0X3JlczsKKysgICAgICAgICAgICBpZiAoMCA9PSA6OnN0YXQoYnVmLCAmc3RhdF9yZXMpICYmIFNfSVNESVIoc3RhdF9yZXMuc3RfbW9kZSkpIHsKKysgICAgICAgICAgICAgICAgU3dpZ0xpYiA9IE5ld1N0cmluZyhidWYpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorKyAgICBpZiAoTlVMTCA9PSBTd2lnTGliKQorKyAgICAgICAgU3dpZ0xpYiA9IE5ld1N0cmluZyhTV0lHX0xJQik7CisgI2VuZGlmCisgICB9IGVsc2UgeworICAgICBTd2lnTGliID0gTmV3U3RyaW5nKGMpOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy8wMDAxLWNvbmZpZ3VyZS11c2UtcGtnLWNvbmZpZy1mb3ItcGNyZS1kZXRlY3Rpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWcvMDAwMS1jb25maWd1cmUtdXNlLXBrZy1jb25maWctZm9yLXBjcmUtZGV0ZWN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMTEyOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWcvMDAwMS1jb25maWd1cmUtdXNlLXBrZy1jb25maWctZm9yLXBjcmUtZGV0ZWN0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gNWM0ZDZkODUzODk5NGQ1ZmU5YjNiNDZiZmFmYWYwYTYwNWUzYmRhNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbi5rb29pQGxpbmFyby5vcmc+CitEYXRlOiBUdWUsIDE3IEp1biAyMDE0IDA4OjE4OjE3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZTogdXNlIHBrZy1jb25maWcgZm9yIHBjcmUgZGV0ZWN0aW9uCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbi5rb29pQGxpbmFyby5vcmc+CitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDM4ICsrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMzEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDBjOTg0YjcuLjZlZGNlYzEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTcwLDM4ICs3MCwxNCBAQCBBQ19NU0dfUkVTVUxUKFskd2l0aF9wY3JlXSkKKyAKKyBkbmwgVG8gbWFrZSBjb25maWd1cmluZyBlYXNpZXIsIGNoZWNrIGZvciBhIGxvY2FsbHkgYnVpbHQgUENSRSB1c2luZyB0aGUgVG9vbHMvcGNyZS1idWlsZC5zaCBzY3JpcHQKKyBpZiB0ZXN0IHgiJHt3aXRoX3BjcmV9IiA9IHh5ZXMgOyB0aGVuCistICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gdXNlIGxvY2FsIFBDUkVdKQorLSAgbG9jYWxfcGNyZV9jb25maWc9bm8KKy0gIGlmIHRlc3QgLXogJFBDUkVfQ09ORklHOyB0aGVuCistICAgIGlmIHRlc3QgLWYgYHB3ZGAvcGNyZS9wY3JlLXN3aWctaW5zdGFsbC9iaW4vcGNyZS1jb25maWc7IHRoZW4KKy0gICAgICBQQ1JFX0NPTkZJRz1gcHdkYC9wY3JlL3BjcmUtc3dpZy1pbnN0YWxsL2Jpbi9wY3JlLWNvbmZpZworLSAgICAgIGxvY2FsX3BjcmVfY29uZmlnPSRQQ1JFX0NPTkZJRworLSAgICBmaQorLSAgZmkKKy0gIEFDX01TR19SRVNVTFQoWyRsb2NhbF9wY3JlX2NvbmZpZ10pCistZmkKKy1BU19JRihbdGVzdCAieCR3aXRoX3BjcmUiICE9IHhub10sCistICBbQVhfUEFUSF9HRU5FUklDKFtwY3JlXSwKKy0gICAgW10sIGRubCBNaW5pbWFsIHZlcnNpb24gb2YgUENSRSB3ZSBuZWVkIC0tIGFjY2VwdCBhbnkKKy0gICAgW10sIGRubCBjdXN0b20gc2VkIHNjcmlwdCBmb3IgdmVyc2lvbiBwYXJzaW5nIGlzIG5vdCBuZWVkZWQKKy0gICAgW0FDX0RFRklORShbSEFWRV9QQ1JFXSwgWzFdLCBbRGVmaW5lIGlmIHlvdSBoYXZlIFBDUkUgbGlicmFyeV0pCistICAgICBMSUJTPSIkTElCUyAkUENSRV9MSUJTIgorLSAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkUENSRV9DRkxBR1MiCistICAgIF0sCistICAgIFtBQ19NU0dfRkFJTFVSRShbCistICAgICAgICBDYW5ub3QgZmluZCBwY3JlLWNvbmZpZyBzY3JpcHQgZnJvbSBQQ1JFIChQZXJsIENvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucykKKy0gICAgICAgIGxpYnJhcnkgcGFja2FnZS4gVGhpcyBkZXBlbmRlbmN5IGlzIG5lZWRlZCBmb3IgY29uZmlndXJlIHRvIGNvbXBsZXRlLAorLSAgICAgICAgRWl0aGVyOgorLSAgICAgICAgLSBJbnN0YWxsIHRoZSBQQ1JFIGRldmVsb3BlciBwYWNrYWdlIG9uIHlvdXIgc3lzdGVtIChwcmVmZXJyZWQgYXBwcm9hY2gpLgorLSAgICAgICAgLSBEb3dubG9hZCB0aGUgUENSRSBzb3VyY2UgdGFyYmFsbCwgYnVpbGQgYW5kIGluc3RhbGwgb24geW91ciBzeXN0ZW0KKy0gICAgICAgICAgYXMgeW91IHdvdWxkIGZvciBhbnkgcGFja2FnZSBidWlsdCBmcm9tIHNvdXJjZSBkaXN0cmlidXRpb24uCistICAgICAgICAtIFVzZSB0aGUgVG9vbHMvcGNyZS1idWlsZC5zaCBzY3JpcHQgdG8gYnVpbGQgUENSRSBqdXN0IGZvciBTV0lHIHRvIHN0YXRpY2FsbHkKKy0gICAgICAgICAgbGluayBhZ2FpbnN0LiBSdW4gJ1Rvb2xzL3BjcmUtYnVpbGQuc2ggLS1oZWxwJyBmb3IgaW5zdHJ1Y3Rpb25zLgorLSAgICAgICAgICAocXVpdGUgZWFzeSBhbmQgZG9lcyBub3QgcmVxdWlyZSBwcml2aWxlZ2VzIHRvIGluc3RhbGwgUENSRSBvbiB5b3VyIHN5c3RlbSkKKy0gICAgICAgIC0gVXNlIGNvbmZpZ3VyZSAtLXdpdGhvdXQtcGNyZSB0byBkaXNhYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgc3VwcG9ydCBpbiBTV0lHCistICAgICAgICAgIChub3QgcmVjb21tZW5kZWQpLl0pCistICAgIF0pCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhbUENSRV0sIFtsaWJwY3JlXSwgWworKyAgICBBQ19ERUZJTkUoW0hBVkVfUENSRV0sIFsxXSwgW0RlZmluZSBpZiB5b3UgaGF2ZSBQQ1JFIGxpYnJhcnldKQorKyAgICBMSUJTPSIkTElCUyAkUENSRV9MSUJTIgorKyAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRQQ1JFX0NGTEFHUyIKKysgIF0sIFsKKysgICAgQUNfTVNHX1dBUk4oWyRQQ1JFX1BLR19FUlJPUlNdKQorICAgXSkKKytmaQorIAorIAorIGRubCBDQ2FjaGUKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnXzMuMC42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnXzMuMC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMDkxN2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWdfMy4wLjYuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlICR7QlBOfS5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtVXNlLXByb2Mtc2VsZi1leGUtZm9yLXN3aWctc3dpZ2xpYi1vbi1ub24tV2luMzItcGxhdC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtdXNlLXBrZy1jb25maWctZm9yLXBjcmUtZGV0ZWN0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gImRmNDNhZTI3MTY0MmJjZmE2MWMxZTU5Zjk3MGY5OTYzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM2N2Y2M2VhMTE5NTYxMDZlNGNkYTY2NDE2ZDUwMjAzMzBkYzRjZTJlZTQ1MDU3ZDM5YTk0OTRjZTMzZWNhMDUiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDEtbGludXgtc3lzbGludXgtc3VwcG9ydC1leHQyLTMtNC1kZXZpY2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDAxLWxpbnV4LXN5c2xpbnV4LXN1cHBvcnQtZXh0Mi0zLTQtZGV2aWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYjc4NzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDAxLWxpbnV4LXN5c2xpbnV4LXN1cHBvcnQtZXh0Mi0zLTQtZGV2aWNlLnBhdGNoCkBAIC0wLDAgKzEsODQgQEAKK0Zyb20gNjBmMzgzM2FiMmI1ODk5NzcxYjRlYWI2NTRlODhmOTg4OGI5OTUwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAzMSBEZWMgMjAxNCAxNjowMTo1NSArMDgwMAorU3ViamVjdDogW1BBVENIIDEvOV0gbGludXgvc3lzbGludXg6IHN1cHBvcnQgZXh0Mi8zLzQgZGV2aWNlCisKKyogU3VwcG9ydCBleHQyLzMvNCBkZWl2Y2UuCisqIFRoZSBvcGVuX2V4dDJfZnMoKSBjaGVja3Mgd2hldGhlciBpdCBpcyBhbiBleHQyLzMvNCBkZXZpY2UsCisgIGRvIHRoZSBleHQyLzMvNCBpbnN0YWxsYXRpb24gKGluc3RhbGxfdG9fZXh0MigpKSBpZiB5ZXMsIG90aGVyd2lzZSBnbworICBvbiB0byB0aGUgZmF0L250ZnMuCisqIFRoZSBleHQyLzMvNCBzdXBwb3J0IGRvZXNuJ3QgcmVxdWlyZSByb290IHByaXZpbGVnZXMgc2luY2UgaXQgZG9lc24ndCBuZWVkCisgIG1vdW50IChidXQgd3JpdGUgcGVybWlzc2lvbiBpcyByZXF1aXJlZCkuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGxpbnV4L3N5c2xpbnV4LmMgfCAzNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IDkxMmRlNzEuLjM2ZmMyMDIgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtMjU2LDYgKzI1NiwyMyBAQCBpbnQgZG9fb3Blbl9maWxlKGNoYXIgKm5hbWUpCisgICAgIHJldHVybiBmZDsKKyB9CisgCisrLyoKKysgKiBDaGVjayB3aGV0aGVyIHRoZSBkZXZpY2UgY29udGFpbnMgYW4gZXh0MiwgZXh0MyBvciBleHQ0IGZzIGFuZCBvcGVuIGl0IGlmCisrICogdHJ1ZS4KKysgKiByZXR1cm4gdmFsdWU6CisrICogMDogRXZlcnl0aGluZyBpcyBPSworKyAqIDE6IE5vdCBhbiBleHQyLCBleHQzIG9yIGV4dDQKKysgKiAtMTogdW5leHBlY3RlZCBlcnJvcgorKyAqLworK3N0YXRpYyBpbnQgb3Blbl9leHQyX2ZzKGNvbnN0IGNoYXIgKmRldmljZSwgY29uc3QgY2hhciAqc3ViZGlyKQorK3sKKyt9CisrCisrLyogVGhlIGluc3RhbGwgZnVuYyBmb3IgZXh0MiwgZXh0MyBhbmQgZXh0NCAqLworK3N0YXRpYyBpbnQgaW5zdGFsbF90b19leHQyKGNvbnN0IGNoYXIgKmRldmljZSwgaW50IGRldl9mZCwgY29uc3QgY2hhciAqc3ViZGlyKQorK3sKKyt9CisrCisgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CisgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNlY3RidWZbU0VDVE9SX1NJWkVdOworQEAgLTMxMyw2ICszMzAsMjQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJZGllKCJjYW4ndCBjb21iaW5lIGFuIG9mZnNldCB3aXRoIGEgYmxvY2sgZGV2aWNlIik7CisgICAgIH0KKyAKKysgICAgLyoKKysgICAgICogQ2hlY2sgaWYgaXQgaXMgYW4gZXh0MiwgZXh0MyBvciBleHQ0CisrICAgICAqLworKyAgICBydiA9IG9wZW5fZXh0Ml9mcyhvcHQuZGV2aWNlLCBzdWJkaXIpOworKyAgICBpZiAocnYgPT0gMCkgeworKyAgICAgICAgaWYgKGluc3RhbGxfdG9fZXh0MihvcHQuZGV2aWNlLCBkZXZfZmQsIHN1YmRpcikpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbnN0YWxsYXRpb24gZmFpbGVkXG4iLCBvcHQuZGV2aWNlKTsKKysgICAgICAgICAgICBleGl0KDEpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIC8qIFVuZXhwZWN0ZWQgZXJyb3JzICovCisrICAgIH0gZWxzZSBpZiAocnYgPT0gLTEpIHsKKysgICAgICAgIGV4aXQoMSk7CisrICAgIH0KKysKKysgICAgLyogUmVzZXQgcnYgKi8KKysgICAgcnYgPSAwOworKworICAgICB4cHJlYWQoZGV2X2ZkLCBzZWN0YnVmLCBTRUNUT1JfU0laRSwgb3B0Lm9mZnNldCk7CisgICAgIGZzeW5jKGRldl9mZCk7CisgCitAQCAtMzIyLDYgKzM1Nyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICAqLworICAgICBpZiAoKGVycm1zZyA9IHN5c2xpbnV4X2NoZWNrX2Jvb3RzZWN0KHNlY3RidWYsICZmc190eXBlKSkpIHsKKyAJZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIG9wdC5kZXZpY2UsIGVycm1zZyk7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6IHN1cHBvcnRlZCBmczogZmF0L250ZnMvZXh0Mi9leDMvZXh0NFxuIiwgcHJvZ3JhbSk7CisgCWV4aXQoMSk7CisgICAgIH0KKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwMi1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtb3Blbl9leHQyX2ZzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwMi1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtb3Blbl9leHQyX2ZzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3Y2YwNjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDAyLWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1vcGVuX2V4dDJfZnMucGF0Y2gKQEAgLTAsMCArMSwxNDEgQEAKK0Zyb20gMDdmYjczN2ZiNjBjMDhlYWFhNDE5ODlkNTMxZmMyMzAwOTUyMzU0NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAzMSBEZWMgMjAxNCAxNjowOToxOCArMDgwMAorU3ViamVjdDogW1BBVENIIDIvOV0gbGludXgvc3lzbGludXg6IGltcGxlbWVudCBvcGVuX2V4dDJfZnMoKQorCitUaGUgb3Blbl9leHQyX2ZzKCkgY2hlY2tzIHdoZXRoZXIgaXQgaXMgYW4gZXh0Mi9leHQzL2V4dDQgZGV2aWNlLCBhbmQKK3JldHVybjoKKzA6IEl0IGlzIGFuIGV4dDIsIGV4dDMgb3IgZXh0NC4KKzE6IE5vdCBhbiBleHQyLCBleHQzIG9yIGV4dDQuCistMTogdW5leHBlY3RlZCBlcnJvci4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitUZXN0ZWQtYnk6IER1IERvbHBoZXIgPGRvbHBoZXIuZHVAaW50ZWwuY29tPgorLS0tCisgbGludXgvTWFrZWZpbGUgICB8ICAyICstCisgbGludXgvc3lzbGludXguYyB8IDgwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA4MSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saW51eC9NYWtlZmlsZSBiL2xpbnV4L01ha2VmaWxlCitpbmRleCAxMTY2N2UxLi5hYzFhYzU4IDEwMDY0NAorLS0tIGEvbGludXgvTWFrZWZpbGUKKysrKyBiL2xpbnV4L01ha2VmaWxlCitAQCAtNTEsNyArNTEsNyBAQCBzcG90bGVzczogY2xlYW4KKyBpbnN0YWxsZXI6IHN5c2xpbnV4IHN5c2xpbnV4LW5vbXRvb2xzCisgCisgc3lzbGludXg6ICQoT0JKUykKKy0JJChDQykgJChMREZMQUdTKSAtbyAkQCAkXgorKwkkKENDKSAkKExERkxBR1MpIC1vICRAICReIC1sZXh0MmZzCisgCisgc3lzbGludXgtbm9tdG9vbHM6IHN5c2xpbnV4CisgCWxuIC1mICQ8ICRACitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IDM2ZmMyMDIuLmNjNGU3ZGEgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtNzIsNiArNzIsNyBAQAorICNpbmNsdWRlICJzeXNseGZzLmgiCisgI2luY2x1ZGUgInNldGFkdi5oIgorICNpbmNsdWRlICJzeXNseG9wdC5oIiAvKiB1bmlmaWVkIG9wdGlvbnMgKi8KKysjaW5jbHVkZSA8ZXh0MmZzL2V4dDJmcy5oPgorIAorIGV4dGVybiBjb25zdCBjaGFyICpwcm9ncmFtOwkvKiBOYW1lIG9mIHByb2dyYW0gKi8KKyAKK0BAIC04Miw2ICs4Myw5IEBAIGNoYXIgKm1udHBhdGggPSBOVUxMOwkJLyogUGF0aCBvbiB3aGljaCB0byBtb3VudCAqLworIGludCBsb29wX2ZkID0gLTE7CQkvKiBMb29wIGRldmljZSAqLworICNlbmRpZgorIAorK2V4dDJfZmlsc3lzICAgICBlMmZzID0gTlVMTDsgICAgLyogRXh0Mi8zLzQgZmlsZXN5c3RlbSAqLworK2V4dDJfaW5vX3QgICAgICByb290LCBjd2Q7ICAgICAgLyogVGhlIHJvb3QgYW5kIGN3ZCBvZiBlMmZzICovCisrCisgdm9pZCBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKSBkaWUoY29uc3QgY2hhciAqbXNnKQorIHsKKyAgICAgZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIHByb2dyYW0sIG1zZyk7CitAQCAtMjY2LDYgKzI3MCw4MiBAQCBpbnQgZG9fb3Blbl9maWxlKGNoYXIgKm5hbWUpCisgICovCisgc3RhdGljIGludCBvcGVuX2V4dDJfZnMoY29uc3QgY2hhciAqZGV2aWNlLCBjb25zdCBjaGFyICpzdWJkaXIpCisgeworKyAgICBpbnQgICAgICAgICByZXR2YWw7CisrICAgIGludCAgICAgICAgIG9wZW5fZmxhZyA9IEVYVDJfRkxBR19SVywgbW91bnRfZmxhZ3M7CisrICAgIGV4dDJfaW5vX3QgIGRpcmlubzsKKysgICAgY2hhciAgICAgICAgb3B0X3N0cmluZ1s0MF07CisrCisrICAgIGlmIChvcHQub2Zmc2V0KSB7CisrICAgICAgICBzcHJpbnRmKG9wdF9zdHJpbmcsICJvZmZzZXQ9JWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpb3B0Lm9mZnNldCk7CisrICAgICAgICByZXR2YWwgPSBleHQyZnNfb3BlbjIoZGV2aWNlLCBvcHRfc3RyaW5nLCBvcGVuX2ZsYWcsIDAsIDAsIHVuaXhfaW9fbWFuYWdlciwgJmUyZnMpOworKyAgICB9IGVsc2UKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19vcGVuKGRldmljZSwgb3Blbl9mbGFnLCAwLCAwLCB1bml4X2lvX21hbmFnZXIsICZlMmZzKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgLyogSXQgbWlnaHQgbm90IGJlIGFuIGV4dE4gZnMsIHNvIHdlIG5lZWQgY2hlY2sgbWFnaWMgZmlyc3RseSAqLworKyAgICAgICAgaWYgKHJldHZhbCA9PSBFWFQyX0VUX0JBRF9NQUdJQykgeworKyAgICAgICAgICAgIC8qIERvIG5vdGhpbmcsIHJldHVybiBzaWxlbnRseSAqLworKyAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciB3aGlsZSB0cnlpbmcgdG8gb3BlbjogJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGRldmljZSk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIC8qIFN0b3AgaWYgaXQgaXMgbW91bnRlZCAqLworKyAgICByZXR2YWwgPSBleHQyZnNfY2hlY2tfaWZfbW91bnRlZChkZXZpY2UsICZtb3VudF9mbGFncyk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGV4dDJmc19jaGVja19pZl9tb3VudCgpIGVycm9yIG9uICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBkZXZpY2UpOworKyAgICAgICAgZ290byBmYWlsOworKyAgICB9CisrCisrICAgIGlmIChtb3VudF9mbGFncyAmIEVYVDJfTUZfTU9VTlRFRCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogJXMgaXMgbW91bnRlZFxuIiwgcHJvZ3JhbSwgZGV2aWNlKTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICBlMmZzLT5kZWZhdWx0X2JpdG1hcF90eXBlID0gRVhUMkZTX0JNQVA2NF9SQlRSRUU7CisrCisrICAgIC8qIFJlYWQgdGhlIGlub2RlIG1hcCAqLworKyAgICByZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZV9iaXRtYXAoZTJmcyk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHdoaWxlIHJlYWRpbmcgaW5vZGUgYml0bWFwOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZGV2aWNlKTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICAvKiBSZWFkIHRoZSBibG9jayBtYXAgKi8KKysgICAgcmV0dmFsID0gZXh0MmZzX3JlYWRfYmxvY2tfYml0bWFwKGUyZnMpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB3aGlsZSByZWFkaW5nIGJsb2NrIGJpdG1hcDogJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGRldmljZSk7CisrICAgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysKKysgICAgcm9vdCA9IGN3ZCA9IEVYVDJfUk9PVF9JTk87CisrICAgIC8qIENoZWNrIHRoZSBzdWJkaXIgKi8KKysgICAgaWYgKHN0cmNtcChzdWJkaXIsICIvIikpIHsKKysJcmV0dmFsID0gZXh0MmZzX25hbWVpKGUyZnMsIHJvb3QsIGN3ZCwgc3ViZGlyLCAmZGlyaW5vKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBmYWlsZWQgdG8gZmluZCBkaXIgJXMgb24gJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIHN1YmRpciwgZGV2aWNlKTsKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR2YWwgPSBleHQyZnNfY2hlY2tfZGlyZWN0b3J5KGUyZnMsIGRpcmlubyk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZmFpbGVkIHRvIGNkIHRvOiAlc1xuIiwgcHJvZ3JhbSwgc3ViZGlyKTsKKysgICAgICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgfQorKyAgICAgICAgY3dkID0gZGlyaW5vOworKyAgICB9CisrCisrICAgIHJldHVybiAwOworKworK2ZhaWw6CisrICAgICh2b2lkKSBleHQyZnNfY2xvc2UoZTJmcyk7CisrICAgIHJldHVybiAtMTsKKyB9CisgCisgLyogVGhlIGluc3RhbGwgZnVuYyBmb3IgZXh0MiwgZXh0MyBhbmQgZXh0NCAqLworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDAzLWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1pbnN0YWxsX3RvX2V4dDIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDAzLWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1pbnN0YWxsX3RvX2V4dDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRiYTEwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDMtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWluc3RhbGxfdG9fZXh0Mi5wYXRjaApAQCAtMCwwICsxLDExNiBAQAorRnJvbSA2NGQ4NTZiMjQzODEyOTA3MDY4Nzc2YjIwNGEwMDNhM2E4ZmExMjJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDMxIERlYyAyMDE0IDE2OjE3OjQyICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMy85XSBsaW51eC9zeXNsaW51eDogaW1wbGVtZW50IGluc3RhbGxfdG9fZXh0MigpCisKKyogVGhlIGhhbmRsZV9hZHZfb25fZXh0KCkgY2hlY2tzIHdoZXRoZXIgd2Ugb25seSBuZWVkIHVwZGF0ZSBhZHYuCisqIFRoZSB3cml0ZV90b19leHQoKSBpbnN0YWxscyBmaWxlcyAobGRsaW51eC5zeXMgb3IgbGRsaW51eC5jMzIpIHRvIHRoZQorICBkZXZpY2UuCisqIFRoZSBpbnN0YWxsX2Jvb3RibG9jaygpIGluc3RhbGxzIHRoZSBib290IGJsb2NrLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaW51eC9zeXNsaW51eC5jIHwgNzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNzkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IGNjNGU3ZGEuLjQ1ZjA4MGQgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtMzQ2LDExICszNDYsOTAgQEAgc3RhdGljIGludCBvcGVuX2V4dDJfZnMoY29uc3QgY2hhciAqZGV2aWNlLCBjb25zdCBjaGFyICpzdWJkaXIpCisgZmFpbDoKKyAgICAgKHZvaWQpIGV4dDJmc19jbG9zZShlMmZzKTsKKyAgICAgcmV0dXJuIC0xOworKworK30KKysKKysvKgorKyAqIEluc3RhbGwgdGhlIGJvb3QgYmxvY2sgb24gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisrICogTXVzdCBiZSBydW4gQUZURVIgZmlsZSBpbnN0YWxsZWQuCisrICovCisraW50IGluc3RhbGxfYm9vdGJsb2NrKGludCBmZCwgY29uc3QgY2hhciAqZGV2aWNlKQorK3sKKyt9CisrCisrc3RhdGljIGludCBoYW5kbGVfYWR2X29uX2V4dCh2b2lkKQorK3sKKyt9CisrCisrLyogV3JpdGUgZmlsZXMsIGFkdiwgYm9vdCBzZWN0b3IgKi8KKytzdGF0aWMgaW50IHdyaXRlX3RvX2V4dChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuZ3RoLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBpX2ZsYWdzLCBpbnQgZGV2X2ZkLCBjb25zdCBjaGFyICpzdWJkaXIpCisreworIH0KKyAKKyAvKiBUaGUgaW5zdGFsbCBmdW5jIGZvciBleHQyLCBleHQzIGFuZCBleHQ0ICovCisgc3RhdGljIGludCBpbnN0YWxsX3RvX2V4dDIoY29uc3QgY2hhciAqZGV2aWNlLCBpbnQgZGV2X2ZkLCBjb25zdCBjaGFyICpzdWJkaXIpCisgeworKyAgICBpbnQgICAgICAgICByZXR2YWw7CisrICAgIGV4dDJfaW5vX3QgIG9sZGlubzsKKysKKysgICAgY29uc3QgY2hhciAqZmlsZSA9ICJsZGxpbnV4LnN5cyI7CisrICAgIGNvbnN0IGNoYXIgKm9sZGZpbGUgPSAiZXh0bGludXguc3lzIjsKKysgICAgY29uc3QgY2hhciAqYzMyZmlsZSA9ICJsZGxpbnV4LmMzMiI7CisrCisrICAgIC8qIEhhbmRsZSB0aGUgYWR2ICovCisrICAgIGlmIChoYW5kbGVfYWR2X29uX2V4dCgpIDwgMCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXJyb3Igd2hpbGUgaGFuZGxpbmcgQURWIG9uICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBkZXZpY2UpOworKyAgICAgICAgcmV0dmFsID0gMTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICAvKiBSZXR1cm4gaWYgb25seSBuZWVkIHVwZGF0ZSB0aGUgYWR2ICovCisrICAgIGlmIChvcHQudXBkYXRlX29ubHkgPT0gLTEpIHsKKysgICAgICAgIHJldHVybiBleHQyZnNfY2xvc2UoZTJmcyk7CisrICAgIH0KKysKKysgICAgLyogV3JpdGUgbGRsaW51eC5zeXMsIGFkdiwgYm9vdCBzZWN0b3IgKi8KKysgICAgcmV0dmFsID0gd3JpdGVfdG9fZXh0KGZpbGUsIChjb25zdCBjaGFyIF9mb3JjZSAqKWJvb3RfaW1hZ2UsCisrICAgICAgICAgICAgICAgIGJvb3RfaW1hZ2VfbGVuLCBFWFQyX0lNTVVUQUJMRV9GTCwgZGV2X2ZkLCBzdWJkaXIpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogd2hpbGUgd3JpdGluZzogJXMuXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBmaWxlKTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICAvKiBXcml0ZSBsZGxpbnV4LmMzMiAqLworKyAgICByZXR2YWwgPSB3cml0ZV90b19leHQoYzMyZmlsZSwKKysgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgX2ZvcmNlICopc3lzbGludXhfbGRsaW51eGMzMiwKKysgICAgICAgICAgICAgICAgc3lzbGludXhfbGRsaW51eGMzMl9sZW4sIDAsIGRldl9mZCwgc3ViZGlyKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IHdoaWxlIHdyaXRpbmc6ICVzLlxuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgYzMyZmlsZSk7CisrICAgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysKKysgICAgLyogTG9vayBpZiB3ZSBoYXZlIHRoZSBleHRsaW51eC5zeXMgYW5kIHJlbW92ZSBpdCovCisrICAgIHJldHZhbCA9IGV4dDJmc19uYW1laShlMmZzLCByb290LCBjd2QsIG9sZGZpbGUsICZvbGRpbm8pOworKyAgICBpZiAocmV0dmFsID09IDApIHsKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc191bmxpbmsoZTJmcywgY3dkLCBvbGRmaWxlLCBvbGRpbm8sIDApOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiBmYWlsZWQgdG8gdW5saW5rOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgb2xkZmlsZSk7CisrICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAgICAgcmV0dmFsID0gMDsKKysgICAgfQorKworKyAgICBzeW5jKCk7CisrICAgIHJldHZhbCA9IGluc3RhbGxfYm9vdGJsb2NrKGRldl9mZCwgZGV2aWNlKTsKKysgICAgY2xvc2UoZGV2X2ZkKTsKKysgICAgc3luYygpOworKworK2ZhaWw6CisrICAgICh2b2lkKSBleHQyZnNfY2xvc2UoZTJmcyk7CisrICAgIHJldHVybiByZXR2YWw7CisgfQorIAorIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDQtbGludXgtc3lzbGludXgtYWRkLWV4dF9maWxlX3JlYWQtYW5kLWV4dF9maWxlX3dyaXRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNC1saW51eC1zeXNsaW51eC1hZGQtZXh0X2ZpbGVfcmVhZC1hbmQtZXh0X2ZpbGVfd3JpdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRiNTZkOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDQtbGludXgtc3lzbGludXgtYWRkLWV4dF9maWxlX3JlYWQtYW5kLWV4dF9maWxlX3dyaXRlLnBhdGNoCkBAIC0wLDAgKzEsOTEgQEAKK0Zyb20gMzVkMzg0MmNjNGI5MzBjNTEwMmVlZDI5MjFlMDE4OWI3ZjRmZDA2OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAzMSBEZWMgMjAxNCAxNjo0MzozNyArMDgwMAorU3ViamVjdDogW1BBVENIIDQvOV0gbGludXgvc3lzbGludXg6IGFkZCBleHRfZmlsZV9yZWFkKCkgYW5kIGV4dF9maWxlX3dyaXRlKCkKKworV2lsbCB1c2UgdGhlbSB0byByZWFkIGFuZCB3cml0ZSBvbiB0aGUgZXh0WCBkZXZpY2UuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGxpbnV4L3N5c2xpbnV4LmMgfCA2MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA2MiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saW51eC9zeXNsaW51eC5jIGIvbGludXgvc3lzbGludXguYworaW5kZXggNDVmMDgwZC4uMjQ3Yzg2YSAxMDA3NTUKKy0tLSBhL2xpbnV4L3N5c2xpbnV4LmMKKysrKyBiL2xpbnV4L3N5c2xpbnV4LmMKK0BAIC0zNDksNiArMzQ5LDY4IEBAIGZhaWw6CisgCisgfQorIAorKy8qIFJlYWQgZnJvbSBhbiBleHQyX2ZpbGUgKi8KKytzdGF0aWMgaW50IGV4dF9maWxlX3JlYWQoZXh0Ml9maWxlX3QgZTJfZmlsZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3Qgb2Zmc2V0LCBjb25zdCBjaGFyICptc2cpCisreworKyAgICBpbnQgICAgICAgICAgICAgICAgIHJldHZhbDsKKysgICAgY2hhciAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKikgYnVmOworKyAgICB1bnNpZ25lZCBpbnQgICAgICAgIGdvdCA9IDA7CisrICAgIHNpemVfdCAgICAgICAgICAgICAgZG9uZSA9IDA7CisrCisrICAgIC8qIEFsd2F5cyBsc2VlayBzaW5jZSBlMl9maWxlIGlzIHVuY29udHJvbGxlZCBieSB0aGlzIGZ1bmMgKi8KKysgICAgaWYgKGV4dDJmc19maWxlX2xzZWVrKGUyX2ZpbGUsIG9mZnNldCwgRVhUMl9TRUVLX1NFVCwgTlVMTCkpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGV4dDJmc19maWxlX2xzZWVrKCkgZmFpbGVkLlxuIiwKKysgICAgICAgICAgICBwcm9ncmFtKTsKKysgICAgICAgIHJldHVybiAtMTsKKysgICAgfQorKworKyAgICB3aGlsZSAoMSkgeworKyAgICAgICAgcmV0dmFsID0gZXh0MmZzX2ZpbGVfcmVhZChlMl9maWxlLCBwdHIsIGNvdW50LCAmZ290KTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciB3aGlsZSByZWFkaW5nICVzXG4iLAorKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbSwgbXNnKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9CisrICAgICAgICBjb3VudCAtPSBnb3Q7CisrICAgICAgICBwdHIgKz0gZ290OworKyAgICAgICAgZG9uZSArPSBnb3Q7CisrICAgICAgICBpZiAoZ290ID09IDAgfHwgY291bnQgPT0gMCkKKysgICAgICAgICAgICBicmVhazsKKysgICAgfQorKworKyAgICByZXR1cm4gZG9uZTsKKyt9CisrCisrLyogV3JpdGUgdG8gYW4gZXh0Ml9maWxlICovCisrc3RhdGljIGludCBleHRfZmlsZV93cml0ZShleHQyX2ZpbGVfdCBlMl9maWxlLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBvZmZzZXQpCisreworKyAgICBjb25zdCBjaGFyICAgICAgICAgICpwdHIgPSAoY29uc3QgY2hhciAqKSBidWY7CisrICAgIHVuc2lnbmVkIGludCAgICAgICAgd3JpdHRlbiA9IDA7CisrICAgIHNpemVfdCAgICAgICAgICAgICAgZG9uZSA9IDA7CisrCisrICAgIC8qIEFsd2F5cyBsc2VlayBzaW5jZSBlMl9maWxlIGlzIHVuY29udHJvbGxlZCBieSB0aGlzIGZ1bmMgKi8KKysgICAgaWYgKGV4dDJmc19maWxlX2xzZWVrKGUyX2ZpbGUsIG9mZnNldCwgRVhUMl9TRUVLX1NFVCwgTlVMTCkpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBleHQyZnNfZmlsZV9sc2VlaygpIGZhaWxlZC5cbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0pOworKyAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgfQorKworKyAgICB3aGlsZSAoY291bnQgPiAwKSB7CisrICAgICAgICBpZiAoZXh0MmZzX2ZpbGVfd3JpdGUoZTJfZmlsZSwgcHRyLCBjb3VudCwgJndyaXR0ZW4pKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZmFpbGVkIHRvIHdyaXRlIHN5c2xpbnV4IGFkdi5cbiIsCisrICAgICAgICAgICAgICAgICAgICBwcm9ncmFtKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9CisrICAgICAgICBjb3VudCAtPSB3cml0dGVuOworKyAgICAgICAgcHRyICs9IHdyaXR0ZW47CisrICAgICAgICBkb25lICs9IHdyaXR0ZW47CisrICAgIH0KKysKKysgICAgcmV0dXJuIGRvbmU7CisrfQorKworIC8qCisgICogSW5zdGFsbCB0aGUgYm9vdCBibG9jayBvbiB0aGUgc3BlY2lmaWVkIGRldmljZS4KKyAgKiBNdXN0IGJlIHJ1biBBRlRFUiBmaWxlIGluc3RhbGxlZC4KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNS1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaGFuZGxlX2Fkdl9vbl9leHQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA1LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1oYW5kbGVfYWR2X29uX2V4dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjllN2M0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNS1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaGFuZGxlX2Fkdl9vbl9leHQucGF0Y2gKQEAgLTAsMCArMSwxMjcgQEAKK0Zyb20gY2RiOTgwYjM3ZjQwZGMyYzQxODkxNDM0Yzc3MzZlNDlkYTUzNzU2ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAzMSBEZWMgMjAxNCAxNjo0Nzo1MiArMDgwMAorU3ViamVjdDogW1BBVENIIDUvOV0gbGludXgvc3lzbGludXg6IGltcGxlbWVudCBoYW5kbGVfYWR2X29uX2V4dCgpCisKK0l0IHJlYWRzIGFkdiBpZiBmb3VuZCBvbiB0aGUgZGV2aWNlLCBvciByZXNldHMgc3lzbGludXhfYWR2LCBvciB1cGRhdGUKK3RoZSBhZHYgaWYgdXBkYXRlIGFkdiBvbmx5LgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaW51eC9zeXNsaW51eC5jIHwgOTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgOTcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IDI0N2M4NmEuLmRlNWQyNzIgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtNDIxLDYgKzQyMSwxMDMgQEAgaW50IGluc3RhbGxfYm9vdGJsb2NrKGludCBmZCwgY29uc3QgY2hhciAqZGV2aWNlKQorIAorIHN0YXRpYyBpbnQgaGFuZGxlX2Fkdl9vbl9leHQodm9pZCkKKyB7CisrICAgIGludCAgICAgICAgICAgICAgICAgaSwgcmV0dmFsLCBmb3VuZF9maWxlOworKyAgICBpbnQgICAgICAgICAgICAgICAgIG5lZWRfY2xvc2UgPSAyOyAvKiAyIG1lYW5zIG5vIG5lZWQgZXh0cmEgY2xvc2UgKi8KKysgICAgY2hhciAgICAgICAgICAgICAgICAqZmlsZW5hbWVzWzJdID0geyJsZGxpbnV4LnN5cyIsICJleHRsaW51eC5zeXMifTsKKysgICAgY2hhciAgICAgICAgICAgICAgICAqZmlsZW5hbWU7CisrICAgIGV4dDJfaW5vX3QgICAgICAgICAgbmV3aW5vOworKyAgICBleHQyX2ZpbGVfdCAgICAgICAgIGUyX2ZpbGU7CisrICAgIHN0cnVjdCBleHQyX2lub2RlICAgaW5vZGU7CisrCisrICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKysgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVzW2ldOworKyAgICAgICAgZm91bmRfZmlsZSA9IDA7CisrICAgICAgICByZXR2YWwgPSBleHQyZnNfbmFtZWkoZTJmcywgcm9vdCwgY3dkLCBmaWxlbmFtZSwgJm5ld2lubyk7CisrICAgICAgICBpZiAocmV0dmFsID09IDApIHsKKysgICAgICAgICAgICBmb3VuZF9maWxlID0gMTsKKysgICAgICAgIH0gZWxzZQorKyAgICAgICAgICAgIGNvbnRpbnVlOworKworKyAgICAgICAgbmVlZF9jbG9zZSA9IGk7CisrCisrICAgICAgICByZXR2YWwgPSBleHQyZnNfZmlsZV9vcGVuKGUyZnMsIG5ld2lubywgRVhUMl9GTEFHX1JXLCAmZTJfZmlsZSk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZmFpbGVkIHRvIG9wZW4gJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGZpbGVuYW1lKTsKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShlMmZzLCBuZXdpbm8sICZpbm9kZSk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXJyb3Igd2hpbGUgcmVhZGluZyBpbm9kZTogJXUsIGZpbGU6ICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBuZXdpbm8sIGZpbGVuYW1lKTsKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICB9CisrCisrICAgICAgICAvKiBDaGVjayB0aGUgc2l6ZSB0byBzZWUgaWYgdG9vIHNtYWxsIHRvIHJlYWQgKi8KKysgICAgICAgIGlmIChpbm9kZS5pX3NpemUgPCAyICogQURWX1NJWkUpIHsKKysgICAgICAgICAgICBpZiAob3B0LnVwZGF0ZV9vbmx5ID09IC0xKSB7CisrICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGZhaWxlZCB0byB3cml0ZSBhdXhpbGxpYXJ5IGRhdGFcblwKKysgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2l6ZSBvZiAlcyBpcyB0b28gc21hbGwgKG5lZWQgLS11cGRhdGUpP1xuIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLCBmaWxlbmFtZSk7CisrICAgICAgICAgICAgICAgIHJldHZhbCA9IC0xOworKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIHN5c2xpbnV4X3Jlc2V0X2FkdihzeXNsaW51eF9hZHYpOworKyAgICAgICAgICAgIGZvdW5kX2ZpbGUgPSAwOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKworKyAgICAgICAgLyogUmVhZCB0aGUgYWR2ICovCisrICAgICAgICByZXR2YWwgPSBleHRfZmlsZV9yZWFkKGUyX2ZpbGUsIHN5c2xpbnV4X2FkdiwgMiAqIEFEVl9TSVpFLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlub2RlLmlfc2l6ZSAtIDIgKiBBRFZfU0laRSwgIkFEViIpOworKyAgICAgICAgaWYgKHJldHZhbCA9PSAtMSkKKysgICAgICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgaWYgKHJldHZhbCA9PSAyICogQURWX1NJWkUpIHsKKysgICAgICAgICAgICByZXR2YWwgPSBzeXNsaW51eF92YWxpZGF0ZV9hZHYoc3lzbGludXhfYWR2KTsKKysgICAgICAgICAgICAvKiBSZWFkIHRoZSBhZHYgc3VjY2Vzc2Z1bGx5ICovCisrICAgICAgICAgICAgaWYgKHJldHZhbCA9PSAwKQorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysKKysgICAgICAgIC8qIENsb3NlIHRoZSBmaWxlIGlmIHJlYWNoZXMgaGVyZSwgb3RoZXJ3aXNlIHdlIGxlYXZlIHRoZSBmaWxlCisrICAgICAgICAgKiBvcGVuIGluIGNhc2Ugd2UgbmVlZCB3cml0ZSBpdCAqLworKyAgICAgICAgbmVlZF9jbG9zZSA9IDI7CisrICAgICAgICByZXR2YWwgPSBleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciB3aGlsZSBjbG9zaW5nICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBmaWxlbmFtZSk7CisrICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBpZiAoIWZvdW5kX2ZpbGUpIHsKKysgICAgICAgIGlmIChvcHQudXBkYXRlX29ubHkgPT0gLTEpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBubyBsZGxpbnV4LnN5cyBvciBleHRsaW51eC5zeXMgZm91bmQgb24gdGhlIGRldmljZVxuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKyAgICAgICAgc3lzbGludXhfcmVzZXRfYWR2KHN5c2xpbnV4X2Fkdik7CisrICAgIH0KKysKKysgICAgLyogVGhlIG1vZGlmeV9hZHYgd2lsbCByZXNldCB0aGUgYWR2IGlmIG9wdC5yZXNldF9hZHYgKi8KKysgICAgaWYgKG1vZGlmeV9hZHYoKSA8IDApIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGVycm9yIHdoaWxlIG1vZGlmeWluZyBhZHZcbiIsIHByb2dyYW0pOworKyAgICAgICAgcmV0dmFsID0gLTE7CisrICAgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysKKysgICAgLyogV3JpdGUgYWR2IGlmIHVwZGF0ZV9vbmx5ID09IC0xIGFuZCBmb3VuZCBmaWxlICovCisrICAgIGlmIChvcHQudXBkYXRlX29ubHkgPT0gLTEgJiYgZm91bmRfZmlsZSkgeworKyAgICAgICAgaWYgKGV4dF9maWxlX3dyaXRlKGUyX2ZpbGUsIHN5c2xpbnV4X2FkdiwgMiAqIEFEVl9TSVpFICwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbm9kZS5pX3NpemUgLSAyICogQURWX1NJWkUpID09IC0xKQorKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysKKytmYWlsOgorKyAgICBpZiAobmVlZF9jbG9zZSAhPSAyKQorKyAgICAgICAgKHZvaWQpIGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworKyAgICByZXR1cm4gcmV0dmFsOworIH0KKyAKKyAvKiBXcml0ZSBmaWxlcywgYWR2LCBib290IHNlY3RvciAqLworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA2LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC13cml0ZV90b19leHQtYW5kLWFkZC1zeXNsaW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA2LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC13cml0ZV90b19leHQtYW5kLWFkZC1zeXNsaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhODcyNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDYtbGludXgtc3lzbGludXgtaW1wbGVtZW50LXdyaXRlX3RvX2V4dC1hbmQtYWRkLXN5c2xpbi5wYXRjaApAQCAtMCwwICsxLDIxNSBAQAorRnJvbSA5MjJlNTZjMTBlMzZkODc2Nzc3NTgwYzg0ZGFlZjlhNjZiZWE2NTI1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDMxIERlYyAyMDE0IDE3OjIwOjQzICswODAwCitTdWJqZWN0OiBbUEFUQ0ggNi85XSBsaW51eC9zeXNsaW51eDogaW1wbGVtZW50IHdyaXRlX3RvX2V4dCgpIGFuZCBhZGQKKyBzeXNsaW51eGV4dC5jCisKKyogVGhlIHdyaXRlX3RvX2V4dCgpIHdyaXRlIGZpbGUgdG8gdGhlIGV4dFggZGV2aWNlLCBhbmQgaGFuZGxlIHRoZSBib290CisgIHNlY3Rvci4KKyogVGhlIHN5c2xpbnV4ZXh0LmMgaXMgdXNlZCBmb3IgcGxhY2luZyB0aGUgY29kZSB3aGljaCBhcmUgdXNlZCBieQorICBleHRsaW51eCBhbmQgc3lzbGludXggKHdoaWNoIGlzIHN5c2xpbnV4X3BhdGNoX2Jvb3RzZWN0KCkpLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQuYyB8ICAgNyArKysKKyBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQuaCB8ICAgNSArKworIGxpbnV4L01ha2VmaWxlICAgICAgICAgICAgIHwgICAzICstCisgbGludXgvc3lzbGludXguYyAgICAgICAgICAgfCAxMTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAxMzIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQuaAorCitkaWZmIC0tZ2l0IGEvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMgYi9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmJiNTRjZWYKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jCitAQCAtMCwwICsxLDcgQEAKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisrLyogUGF0Y2ggc3lzbGludXhfYm9vdHNlY3QgKi8KKyt2b2lkIHN5c2xpbnV4X3BhdGNoX2Jvb3RzZWN0KGludCBkZXZfZmQpCisreworK30KKysKK2RpZmYgLS1naXQgYS9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuaCBiL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOGFiZDhiOQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmgKK0BAIC0wLDAgKzEsNSBAQAorKyNpZm5kZWYgRVhUMl9TVVBFUl9PRkZTRVQKKysjZGVmaW5lIEVYVDJfU1VQRVJfT0ZGU0VUIDEwMjQKKysjZW5kaWYKKysKKyt2b2lkIHN5c2xpbnV4X3BhdGNoX2Jvb3RzZWN0KGludCBkZXZfZmQpOworZGlmZiAtLWdpdCBhL2xpbnV4L01ha2VmaWxlIGIvbGludXgvTWFrZWZpbGUKK2luZGV4IGFjMWFjNTguLjNiMjM4NjcgMTAwNjQ0CistLS0gYS9saW51eC9NYWtlZmlsZQorKysrIGIvbGludXgvTWFrZWZpbGUKK0BAIC0zMCw3ICszMCw4IEBAIFNSQ1MgICAgID0gc3lzbGludXguYyBcCisgICAgICAgICAgICAuLi9saWJpbnN0YWxsZXIvc3lzbHhtb2QuYyBcCisgCSAgIC4uL2xpYmluc3RhbGxlci9ib290c2VjdF9iaW4uYyBcCisgCSAgIC4uL2xpYmluc3RhbGxlci9sZGxpbnV4YzMyX2Jpbi5jIFwKKy0JICAgLi4vbGliaW5zdGFsbGVyL2xkbGludXhfYmluLmMKKysJICAgLi4vbGliaW5zdGFsbGVyL2xkbGludXhfYmluLmMgXAorKwkgICAuLi9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuYworIE9CSlMJID0gJChwYXRzdWJzdCAlLmMsJS5vLCQobm90ZGlyICQoU1JDUykpKQorIAorIC5TVUZGSVhFUzogLmMgLm8gLmkgLnMgLlMKK2RpZmYgLS1naXQgYS9saW51eC9zeXNsaW51eC5jIGIvbGludXgvc3lzbGludXguYworaW5kZXggZGU1ZDI3Mi4uZjBjOTdhOCAxMDA3NTUKKy0tLSBhL2xpbnV4L3N5c2xpbnV4LmMKKysrKyBiL2xpbnV4L3N5c2xpbnV4LmMKK0BAIC00Niw2ICs0Niw3IEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvd2FpdC5oPgorICNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKysjaW5jbHVkZSA8dGltZS5oPgorIAorICNpbmNsdWRlICJsaW51eGlvY3RsLmgiCisgCitAQCAtNzIsNiArNzMsNyBAQAorICNpbmNsdWRlICJzeXNseGZzLmgiCisgI2luY2x1ZGUgInNldGFkdi5oIgorICNpbmNsdWRlICJzeXNseG9wdC5oIiAvKiB1bmlmaWVkIG9wdGlvbnMgKi8KKysjaW5jbHVkZSAic3lzbGludXhleHQuaCIKKyAjaW5jbHVkZSA8ZXh0MmZzL2V4dDJmcy5oPgorIAorIGV4dGVybiBjb25zdCBjaGFyICpwcm9ncmFtOwkvKiBOYW1lIG9mIHByb2dyYW0gKi8KK0BAIC00MTksNiArNDIxLDEyIEBAIGludCBpbnN0YWxsX2Jvb3RibG9jayhpbnQgZmQsIGNvbnN0IGNoYXIgKmRldmljZSkKKyB7CisgfQorIAorKy8qIENvbnN0cnVjdCB0aGUgYm9vdCBmaWxlIG1hcCAqLworK2ludCBleHRfY29uc3RydWN0X3NlY3RtYXBfZnMoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgbmV3aW5vLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdG9yX3QgKnNlY3RvcnMsIGludCBuc2VjdCkKKyt7CisrfQorKworIHN0YXRpYyBpbnQgaGFuZGxlX2Fkdl9vbl9leHQodm9pZCkKKyB7CisgICAgIGludCAgICAgICAgICAgICAgICAgaSwgcmV0dmFsLCBmb3VuZF9maWxlOworQEAgLTUyNCw2ICs1MzIsMTE2IEBAIGZhaWw6Cisgc3RhdGljIGludCB3cml0ZV90b19leHQoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaV9mbGFncywgaW50IGRldl9mZCwgY29uc3QgY2hhciAqc3ViZGlyKQorIHsKKysgICAgZXh0Ml9pbm9fdCAgICAgICAgICBuZXdpbm87CisrICAgIHN0cnVjdCBleHQyX2lub2RlICAgaW5vZGU7CisrICAgIGludCAgICAgICAgICAgICAgICAgcmV0dmFsLCBpLCBtb2RieXRlcywgbnNlY3Q7CisrICAgIGV4dDJfZmlsZV90ICAgICAgICAgZTJfZmlsZTsKKysgICAgc2VjdG9yX3QgICAgICAgICAgICAqc2VjdG9yczsKKysKKysgICAgLyogUmVtb3ZlIGl0IGlmIGl0IGlzIGFscmVhZHkgZXhpc3RzICovCisrICAgIHJldHZhbCA9IGV4dDJmc19uYW1laShlMmZzLCByb290LCBjd2QsIGZpbGVuYW1lLCAmbmV3aW5vKTsKKysgICAgaWYgKHJldHZhbCA9PSAwKSB7CisrICAgICAgICByZXR2YWwgPSBleHQyZnNfdW5saW5rKGUyZnMsIGN3ZCwgZmlsZW5hbWUsIG5ld2lubywgMCk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZmFpbGVkIHRvIHVubGluazogJXNcbiIsIHByb2dyYW0sIGZpbGVuYW1lKTsKKysgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIC8qIENyZWF0ZSBuZXcgaW5vZGUgKi8KKysgICAgcmV0dmFsID0gZXh0MmZzX25ld19pbm9kZShlMmZzLCBjd2QsIDAxMDc1NSwgMCwgJm5ld2lubyk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiBmYWlsZWQgdG8gY3JlYXRlIGlub2RlIGZvcjogJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGZpbGVuYW1lKTsKKysgICAgICAgIHJldHVybiByZXR2YWw7CisrICAgIH0KKysKKysgICAgLyogTGluayB0aGUgaW5vZGUgYW5kIHRoZSBmaWxlbmFtZSAqLworKyAgICByZXR2YWwgPSBleHQyZnNfbGluayhlMmZzLCBjd2QsIGZpbGVuYW1lLCBuZXdpbm8sIEVYVDJfRlRfUkVHX0ZJTEUpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogZmFpbGVkIHRvIGxpbmsgaW5vZGUgZm9yOiAlcy5cbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGZpbGVuYW1lKTsKKysgICAgICAgIHJldHVybiByZXR2YWw7CisrICAgIH0KKysKKysgICAgaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoZTJmcy0+aW5vZGVfbWFwLCBuZXdpbm8pKQorKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB3YXJuaW5nOiBpbm9kZSBhbHJlYWR5IHNldCAlcy5cbiIsCisrICAgICAgICAgICAgcHJvZ3JhbSwgZmlsZW5hbWUpOworKworKyAgICAgICAgZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihlMmZzLCBuZXdpbm8sICsxLCAwKTsKKysgICAgICAgIG1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihpbm9kZSkpOworKwlpbm9kZS5pX21vZGUgPSBMSU5VWF9TX0lGUkVHIHwgTElOVVhfU19JUlVTUiB8IExJTlVYX1NfSVJHUlAKKysgICAgICAgICAgICAgICAgICAgICAgICB8IExJTlVYX1NfSVJPVEg7CisrCWlub2RlLmlfZmxhZ3MgfD0gaV9mbGFnczsKKysgICAgICAgIGlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX2N0aW1lID0gaW5vZGUuaV9tdGltZSA9CisrICAgICAgICAgICAgZTJmcy0+bm93ID8gZTJmcy0+bm93IDogdGltZSgwKTsKKysgICAgICAgIGlub2RlLmlfbGlua3NfY291bnQgPSAxOworKyAgICAgICAgaWYgKGUyZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorKyAgICAgICAgICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKSB7CisrICAgICAgICAgICAgc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlciAqZWg7CisrCisrICAgICAgICAgICAgZWggPSAoc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlciAqKSAmaW5vZGUuaV9ibG9ja1swXTsKKysgICAgICAgICAgICBlaC0+ZWhfZGVwdGggPSAwOworKyAgICAgICAgICAgIGVoLT5laF9lbnRyaWVzID0gMDsKKysgICAgICAgICAgICBlaC0+ZWhfbWFnaWMgPSBleHQyZnNfY3B1X3RvX2xlMTYoRVhUM19FWFRfTUFHSUMpOworKyAgICAgICAgICAgIGkgPSAoc2l6ZW9mKGlub2RlLmlfYmxvY2spIC0gc2l6ZW9mKCplaCkpIC8KKysgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudCk7CisrICAgICAgICAgICAgZWgtPmVoX21heCA9IGV4dDJmc19jcHVfdG9fbGUxNihpKTsKKysgICAgICAgICAgICBpbm9kZS5pX2ZsYWdzIHw9IEVYVDRfRVhURU5UU19GTDsKKysgICAgfQorKworKyAgICByZXR2YWwgPSBleHQyZnNfd3JpdGVfbmV3X2lub2RlKGUyZnMsIG5ld2lubywgJmlub2RlKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IHdoaWxlIHdyaXR0aW5nIGlub2RlICVkLlxuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgbmV3aW5vKTsKKysgICAgICAgIHJldHVybiAxOworKyAgICB9CisrCisrICAgIHJldHZhbCA9IGV4dDJmc19maWxlX29wZW4oZTJmcywgbmV3aW5vLCBFWFQyX0ZJTEVfV1JJVEUsICZlMl9maWxlKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IGZhaWxlZCB0byBvcGVuICVzLlxuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZmlsZW5hbWUpOworKyAgICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgICAgLyogV3JpdGUgdG8gZmlsZSAqLworKyAgICBpZiAoZXh0X2ZpbGVfd3JpdGUoZTJfZmlsZSwgc3RyLCBsZW5ndGgsIDApID09IC0xKQorKyAgICAgICAgZ290byBmYWlsOworKworKyAgICBpZiAoc3RyY21wKGZpbGVuYW1lLCAibGRsaW51eC5zeXMiKSA9PSAwKSB7CisrICAgICAgICAvKiBXcml0ZSBBRFYgKi8KKysgICAgICAgIGlmIChleHRfZmlsZV93cml0ZShlMl9maWxlLCBzeXNsaW51eF9hZHYsIDIgKiBBRFZfU0laRSwKKysgICAgICAgICAgICAgICAgYm9vdF9pbWFnZV9sZW4pID09IC0xKQorKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysgICAgICAgIC8qIFBhdGNoIHN5c2xpbnV4X2Jvb3RzZWN0ICovCisrICAgICAgICBzeXNsaW51eF9wYXRjaF9ib290c2VjdChkZXZfZmQpOworKworKyAgICAgICAgLyogUGF0Y2ggbGRsaW51eC5zeXMgKi8KKysgICAgICAgIG5zZWN0ID0gKGJvb3RfaW1hZ2VfbGVuICsgU0VDVE9SX1NJWkUgLSAxKSA+PiBTRUNUT1JfU0hJRlQ7CisrICAgICAgICBuc2VjdCArPSAyOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR3byBzZWN0b3JzIGZvciB0aGUgQURWICovCisrICAgICAgICBzZWN0b3JzID0gYWxsb2NhKHNpemVvZihzZWN0b3JfdCkgKiBuc2VjdCk7CisrICAgICAgICBtZW1zZXQoc2VjdG9ycywgMCwgbnNlY3QgKiBzaXplb2YgKnNlY3RvcnMpOworKyAgICAgICAgLyogVGhlIHNlY3RvcnMgd2lsbCBiZSBtb2RpZmllZCBhbmQgdXNlZCBieSBzeXNsaW51eF9wYXRjaCgpICovCisrICAgICAgICByZXR2YWwgPSBleHRfY29uc3RydWN0X3NlY3RtYXBfZnMoZTJmcywgbmV3aW5vLCBzZWN0b3JzLCBuc2VjdCk7CisrICAgICAgICBpZiAocmV0dmFsKQorKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysgICAgICAgIC8qIENyZWF0ZSB0aGUgbW9kaWZpZWQgaW1hZ2UgaW4gbWVtb3J5ICovCisrICAgICAgICBtb2RieXRlcyA9IHN5c2xpbnV4X3BhdGNoKHNlY3RvcnMsIG5zZWN0LCBvcHQuc3R1cGlkX21vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5yYWlkX21vZGUsIHN1YmRpciwgTlVMTCk7CisrCisrICAgICAgICAvKiBSZXdyaXRlIHRoZSBmaXJzdCBtb2RieXRlcyBvZiBsZGxpbnV4LnN5cyAqLworKyAgICAgICAgaWYgKGV4dF9maWxlX3dyaXRlKGUyX2ZpbGUsIHN0ciwgbW9kYnl0ZXMsIDApID09IC0xKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IGZhaWxlZCB0byBwYXRjaCAlcy5cbiIsIHByb2dyYW0sCisrICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSk7CisrICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgfQorKyAgICB9CisrCisrZmFpbDoKKysgICAgKHZvaWQpIGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworKyAgICByZXR1cm4gcmV0dmFsOworIH0KKyAKKyAvKiBUaGUgaW5zdGFsbCBmdW5jIGZvciBleHQyLCBleHQzIGFuZCBleHQ0ICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDctbGludXgtc3lzbGludXgtaW1wbGVtZW50LWV4dF9jb25zdHJ1Y3Rfc2VjdG1hcF9mcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDctbGludXgtc3lzbGludXgtaW1wbGVtZW50LWV4dF9jb25zdHJ1Y3Rfc2VjdG1hcF9mcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTEzODExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtZXh0X2NvbnN0cnVjdF9zZWN0bWFwX2ZzLnBhdGNoCkBAIC0wLDAgKzEsODQgQEAKK0Zyb20gYTk1YjgzMWUxOGRkMTIzZjg1OWJjNWU2YzRjZWNkY2MwMTg0ZWUzNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAyIEphbiAyMDE1IDEyOjE4OjAyICswODAwCitTdWJqZWN0OiBbUEFUQ0ggNy85XSBsaW51eC9zeXNsaW51eDogaW1wbGVtZW50IGV4dF9jb25zdHJ1Y3Rfc2VjdG1hcF9mcygpCisKK1RoZSBleHRfY29uc3RydWN0X3NlY3RtYXBfZnMoKSBjb25zdHVjdHMgdGhlIHNlY3RvciBhY2NvcmRpbmcgdG8gdGhlCitibWFwLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaW51eC9zeXNsaW51eC5jIHwgNTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNTAgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IGYwYzk3YTguLmM3NDE3NTAgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtNDIxLDEwICs0MjEsNjAgQEAgaW50IGluc3RhbGxfYm9vdGJsb2NrKGludCBmZCwgY29uc3QgY2hhciAqZGV2aWNlKQorIHsKKyB9CisgCisrLyogVGhlIGZpbGUncyBibG9jayBjb3VudCAqLworK2ludCBibG9ja19jb3VudCA9IDA7Cisrc3RhdGljIGludCBnZXRfYmxvY2tfY291bnQoZXh0Ml9maWxzeXMgZnMgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorKwkJCSAgICAgYmxrNjRfdCAqYmxvY2tuciBFWFQyRlNfQVRUUigodW51c2VkKSksCisrCQkJICAgICBlMl9ibGtjbnRfdCBibG9ja2NudCBFWFQyRlNfQVRUUigodW51c2VkKSksCisrCQkJICAgICBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisrCQkJICAgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisrCQkJICAgICB2b2lkICpwcml2YXRlIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKKyt7CisrICAgIGJsb2NrX2NvdW50Kys7CisrICAgIHJldHVybiAwOworK30KKysKKyAvKiBDb25zdHJ1Y3QgdGhlIGJvb3QgZmlsZSBtYXAgKi8KKyBpbnQgZXh0X2NvbnN0cnVjdF9zZWN0bWFwX2ZzKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IG5ld2lubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rvcl90ICpzZWN0b3JzLCBpbnQgbnNlY3QpCisgeworKyAgICBibGs2NF90ICAgICAgICAgICAgIHBibGssIGJsa3NpemUsIGJsayA9IDA7CisrICAgIHNlY3Rvcl90ICAgICAgICAgICAgc2VjOworKyAgICB1bnNpZ25lZCBpbnQgICAgICAgIGk7CisrICAgIGludCAgICAgICAgICAgICAgICAgcmV0dmFsOworKworKyAgICBibGtzaXplID0gZnMtPmJsb2Nrc2l6ZTsKKysgICAgYmxrc2l6ZSA+Pj0gU0VDVE9SX1NISUZUOworKworKyAgICAvKiBHZXQgdGhlIHRvdGFsIGJsb2NrcyBuby4gKi8KKysgICAgcmV0dmFsID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLCBuZXdpbm8sIEJMT0NLX0ZMQUdfUkVBRF9PTkxZLAorKyAgICAgICAgICAgIE5VTEwsIGdldF9ibG9ja19jb3VudCwgTlVMTCk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoKSBmYWlsZWQuXG4iLCBwcm9ncmFtKTsKKysgICAgICAgIHJldHVybiAtMTsKKysgICAgfQorKworKyAgICB3aGlsZSAobnNlY3QpIHsKKysgICAgICAgIGlmIChibG9ja19jb3VudC0tID09IDApCisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAvKiBHZXQgdGhlIHBoeXNpY2FsIGJsb2NrIG5vLiAoYm1hcCkgKi8KKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19ibWFwMihmcywgbmV3aW5vLCAwLCAwLCAwLCBibGssIDAsICZwYmxrKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogZXh0MmZzX2JtYXAyKCkgZmFpbGVkLlxuIiwgcHJvZ3JhbSk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKworKyAgICAgICAgYmxrKys7CisrICAgICAgICBzZWMgPSAoc2VjdG9yX3QpcGJsayAqIGJsa3NpemU7CisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmxrc2l6ZTsgaSsrKSB7CisrICAgICAgICAgICAgKnNlY3RvcnMrKyA9IHNlYysrOworKyAgICAgICAgICAgIGlmICghIC0tbnNlY3QpCisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHJldHVybiAwOworIH0KKyAKKyBzdGF0aWMgaW50IGhhbmRsZV9hZHZfb25fZXh0KHZvaWQpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDgtbGliaW5zdGFsbGVyLXN5c2xpbnV4ZXh0LWltcGxlbWVudC1zeXNsaW51eF9wYXRjaF9iby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDgtbGliaW5zdGFsbGVyLXN5c2xpbnV4ZXh0LWltcGxlbWVudC1zeXNsaW51eF9wYXRjaF9iby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDAwYzk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwOC1saWJpbnN0YWxsZXItc3lzbGludXhleHQtaW1wbGVtZW50LXN5c2xpbnV4X3BhdGNoX2JvLnBhdGNoCkBAIC0wLDAgKzEsNDI3IEBACitGcm9tIDc4ZDc2Yjg3YTRiODU1ZTZiNjYxYWU0NTcyODNhNjNmMzg1YzA0YzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMiBKYW4gMjAxNSAxMjoyNjo0NiArMDgwMAorU3ViamVjdDogW1BBVENIIDgvOV0gbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0OiBpbXBsZW1lbnQKKyBzeXNsaW51eF9wYXRjaF9ib290c2VjdCgpCisKK01vdmUgdGhlIHJlbGF0ZWQgZnJvbSBleHRsaW51eC9tYWluLmMgdG8gbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMsIHRoZQorc3lzbGludXhfcGF0Y2hfYm9vdHNlY3QoKSBhcmUgdXNlZCBieSBib3RoIGV4dGxpbnV4L21haW4uYyBhbmQKK2xpbnV4L3N5c2xpbnV4LmMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGV4dGxpbnV4L01ha2VmaWxlICAgICAgICAgIHwgICAzICstCisgZXh0bGludXgvbWFpbi5jICAgICAgICAgICAgfCAxNjcgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQuYyB8IDE3MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDE3NSBpbnNlcnRpb25zKCspLCAxNjUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9leHRsaW51eC9NYWtlZmlsZSBiL2V4dGxpbnV4L01ha2VmaWxlCitpbmRleCAwMmQxZGI1Li45MGRkOTJmIDEwMDY0NAorLS0tIGEvZXh0bGludXgvTWFrZWZpbGUKKysrKyBiL2V4dGxpbnV4L01ha2VmaWxlCitAQCAtMzEsNyArMzEsOCBAQCBTUkNTICAgICA9IG1haW4uYyBcCisgCSAgIC4uL2xpYmluc3RhbGxlci9hZHZpby5jIFwKKyAJICAgLi4vbGliaW5zdGFsbGVyL2Jvb3RzZWN0X2Jpbi5jIFwKKyAJICAgLi4vbGliaW5zdGFsbGVyL2xkbGludXhjMzJfYmluLmMgXAorLQkgICAuLi9saWJpbnN0YWxsZXIvbGRsaW51eF9iaW4uYworKwkgICAuLi9saWJpbnN0YWxsZXIvbGRsaW51eF9iaW4uYyBcCisrCSAgIC4uL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jCisgT0JKUwkgPSAkKHBhdHN1YnN0ICUuYywlLm8sJChub3RkaXIgJChTUkNTKSkpCisgCisgLlNVRkZJWEVTOiAuYyAubyAuaSAucyAuUworZGlmZiAtLWdpdCBhL2V4dGxpbnV4L21haW4uYyBiL2V4dGxpbnV4L21haW4uYworaW5kZXggMDk3NDBiZC4uNmZlMDI2ZSAxMDA2NDQKKy0tLSBhL2V4dGxpbnV4L21haW4uYworKysrIGIvZXh0bGludXgvbWFpbi5jCitAQCAtNjAsNiArNjAsNyBAQAorICNpbmNsdWRlICJzZXRhZHYuaCIKKyAjaW5jbHVkZSAic3lzbHhvcHQuaCIgLyogdW5pZmllZCBvcHRpb25zICovCisgI2luY2x1ZGUgIm1vdW50aW5mby5oIgorKyNpbmNsdWRlICJzeXNsaW51eGV4dC5oIgorIAorICNpZmRlZiBERUJVRworICMgZGVmaW5lIGRwcmludGYgcHJpbnRmCitAQCAtNjcsMTAgKzY4LDYgQEAKKyAjIGRlZmluZSBkcHJpbnRmKC4uLikgKCh2b2lkKTApCisgI2VuZGlmCisgCistI2lmbmRlZiBFWFQyX1NVUEVSX09GRlNFVAorLSNkZWZpbmUgRVhUMl9TVVBFUl9PRkZTRVQgMTAyNAorLSNlbmRpZgorLQorIC8qIFNpbmNlIHdlIGhhdmUgdW51c2VkIDIwNDggYnl0ZXMgaW4gdGhlIHByaW1hcnkgQUcgb2YgYW4gWEZTIHBhcnRpdGlvbiwKKyAgKiB3ZSB3aWxsIHVzZSB0aGUgZmlyc3QgMH41MTIgYnl0ZXMgc3RhcnRpbmcgZnJvbSAyMDQ4IGZvciB0aGUgU3lzbGludXgKKyAgKiBib290IHNlY3Rvci4KK0BAIC05MiwxMzYgKzg5LDYgQEAgc3RhdGljIGNoYXIgc3Vidm9sW0JUUkZTX1NVQlZPTF9NQVhdOworIAkJCSAgLSAyKkFEVl9TSVpFKQorIAorIC8qCistICogR2V0IHRoZSBzaXplIG9mIGEgYmxvY2sgZGV2aWNlCistICovCistc3RhdGljIHVpbnQ2NF90IGdldF9zaXplKGludCBkZXZmZCkKKy17CistICAgIHVpbnQ2NF90IGJ5dGVzOworLSAgICB1aW50MzJfdCBzZWN0czsKKy0gICAgc3RydWN0IHN0YXQgc3Q7CistCistI2lmZGVmIEJMS0dFVFNJWkU2NAorLSAgICBpZiAoIWlvY3RsKGRldmZkLCBCTEtHRVRTSVpFNjQsICZieXRlcykpCistCXJldHVybiBieXRlczsKKy0jZW5kaWYKKy0gICAgaWYgKCFpb2N0bChkZXZmZCwgQkxLR0VUU0laRSwgJnNlY3RzKSkKKy0JcmV0dXJuICh1aW50NjRfdCkgc2VjdHMgPDwgOTsKKy0gICAgZWxzZSBpZiAoIWZzdGF0KGRldmZkLCAmc3QpICYmIHN0LnN0X3NpemUpCistCXJldHVybiBzdC5zdF9zaXplOworLSAgICBlbHNlCistCXJldHVybiAwOworLX0KKy0KKy0vKgorLSAqIEdldCBkZXZpY2UgZ2VvbWV0cnkgYW5kIHBhcnRpdGlvbiBvZmZzZXQKKy0gKi8KKy1zdHJ1Y3QgZ2VvbWV0cnlfdGFibGUgeworLSAgICB1aW50NjRfdCBieXRlczsKKy0gICAgc3RydWN0IGhkX2dlb21ldHJ5IGc7CistfTsKKy0KKy1zdGF0aWMgaW50IHN5c2ZzX2dldF9vZmZzZXQoaW50IGRldmZkLCB1bnNpZ25lZCBsb25nICpzdGFydCkKKy17CistICAgIHN0cnVjdCBzdGF0IHN0OworLSAgICBjaGFyIHN5c2ZzX25hbWVbMTI4XTsKKy0gICAgRklMRSAqZjsKKy0gICAgaW50IHJ2OworLQorLSAgICBpZiAoZnN0YXQoZGV2ZmQsICZzdCkpCistCXJldHVybiAtMTsKKy0KKy0gICAgaWYgKChzaXplX3Qpc25wcmludGYoc3lzZnNfbmFtZSwgc2l6ZW9mIHN5c2ZzX25hbWUsCistCQkJICIvc3lzL2Rldi9ibG9jay8ldToldS9zdGFydCIsCistCQkJIG1ham9yKHN0LnN0X3JkZXYpLCBtaW5vcihzdC5zdF9yZGV2KSkKKy0JPj0gc2l6ZW9mIHN5c2ZzX25hbWUpCistCXJldHVybiAtMTsKKy0KKy0gICAgZiA9IGZvcGVuKHN5c2ZzX25hbWUsICJyIik7CistICAgIGlmICghZikKKy0JcmV0dXJuIC0xOworLQorLSAgICBydiA9IGZzY2FuZihmLCAiJWx1Iiwgc3RhcnQpOworLSAgICBmY2xvc2UoZik7CistCistICAgIHJldHVybiAocnYgPT0gMSkgPyAwIDogLTE7CistfQorLQorLS8qIFN0YW5kYXJkIGZsb3BweSBkaXNrIGdlb21ldHJpZXMsIHBsdXMgTFMtMTIwLiAgWmlwZGlzayBnZW9tZXRyeQorLSAgICh4LzY0LzMyKSBpcyB0aGUgZmluYWwgZmFsbGJhY2suICBJIGRvbid0IGtub3cgd2hhdCBMUy0yNDAgaGFzCistICAgYXMgaXRzIGdlb21ldHJ5LCBzaW5jZSBJIGRvbid0IGhhdmUgb25lIGFuZCBkb24ndCBrbm93IGFueW9uZSB0aGF0IGRvZXMsCistICAgYW5kIEdvb2dsZSB3YXNuJ3QgaGVscGZ1bC4uLiAqLworLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VvbWV0cnlfdGFibGUgc3RhbmRhcmRfZ2VvbWV0cmllc1tdID0geworLSAgICB7MzYwICogMTAyNCwgezIsIDksIDQwLCAwfX0sCistICAgIHs3MjAgKiAxMDI0LCB7MiwgOSwgODAsIDB9fSwKKy0gICAgezEyMDAgKiAxMDI0LCB7MiwgMTUsIDgwLCAwfX0sCistICAgIHsxNDQwICogMTAyNCwgezIsIDE4LCA4MCwgMH19LAorLSAgICB7MTY4MCAqIDEwMjQsIHsyLCAyMSwgODAsIDB9fSwKKy0gICAgezE3MjIgKiAxMDI0LCB7MiwgMjEsIDgwLCAwfX0sCistICAgIHsyODgwICogMTAyNCwgezIsIDM2LCA4MCwgMH19LAorLSAgICB7Mzg0MCAqIDEwMjQsIHsyLCA0OCwgODAsIDB9fSwKKy0gICAgezEyMzI2NCAqIDEwMjQsIHs4LCAzMiwgOTYzLCAwfX0sCS8qIExTMTIwICovCistICAgIHswLCB7MCwgMCwgMCwgMH19CistfTsKKy0KKy1pbnQgZ2V0X2dlb21ldHJ5KGludCBkZXZmZCwgdWludDY0X3QgdG90YWxieXRlcywgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCisteworLSAgICBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCBmZF9zdHI7CistICAgIHN0cnVjdCBsb29wX2luZm8gbGk7CistICAgIHN0cnVjdCBsb29wX2luZm82NCBsaTY0OworLSAgICBjb25zdCBzdHJ1Y3QgZ2VvbWV0cnlfdGFibGUgKmdwOworLSAgICBpbnQgcnYgPSAwOworLQorLSAgICBtZW1zZXQoZ2VvLCAwLCBzaXplb2YgKmdlbyk7CistCistICAgIGlmICghaW9jdGwoZGV2ZmQsIEhESU9fR0VUR0VPLCBnZW8pKSB7CistCWdvdG8gb2s7CistICAgIH0gZWxzZSBpZiAoIWlvY3RsKGRldmZkLCBGREdFVFBSTSwgJmZkX3N0cikpIHsKKy0JZ2VvLT5oZWFkcyA9IGZkX3N0ci5oZWFkOworLQlnZW8tPnNlY3RvcnMgPSBmZF9zdHIuc2VjdDsKKy0JZ2VvLT5jeWxpbmRlcnMgPSBmZF9zdHIudHJhY2s7CistCWdlby0+c3RhcnQgPSAwOworLQlnb3RvIG9rOworLSAgICB9CistCistICAgIC8qIERpZG4ndCB3b3JrLiAgTGV0J3Mgc2VlIGlmIHRoaXMgaXMgb25lIG9mIHRoZSBzdGFuZGFyZCBnZW9tZXRyaWVzICovCistICAgIGZvciAoZ3AgPSBzdGFuZGFyZF9nZW9tZXRyaWVzOyBncC0+Ynl0ZXM7IGdwKyspIHsKKy0JaWYgKGdwLT5ieXRlcyA9PSB0b3RhbGJ5dGVzKSB7CistCSAgICBtZW1jcHkoZ2VvLCAmZ3AtPmcsIHNpemVvZiAqZ2VvKTsKKy0JICAgIGdvdG8gb2s7CistCX0KKy0gICAgfQorLQorLSAgICAvKiBEaWRuJ3Qgd29yayBlaXRoZXIuLi4gYXNzaWduIGEgZ2VvbWV0cnkgb2YgNjQgaGVhZHMsIDMyIHNlY3RvcnM7IHRoaXMgaXMKKy0gICAgICAgd2hhdCB6aXBkaXNrcyB1c2UsIHNvIHRoaXMgd291bGQgaGVscCBpZiBzb21lb25lIGhhcyBhIFVTQiBrZXkgdGhhdAorLSAgICAgICB0aGV5J3JlIGJvb3RpbmcgaW4gVVNCLVpJUCBtb2RlLiAqLworLQorLSAgICBnZW8tPmhlYWRzID0gb3B0LmhlYWRzID8gOiA2NDsKKy0gICAgZ2VvLT5zZWN0b3JzID0gb3B0LnNlY3RvcnMgPyA6IDMyOworLSAgICBnZW8tPmN5bGluZGVycyA9IHRvdGFsYnl0ZXMgLyAoZ2VvLT5oZWFkcyAqIGdlby0+c2VjdG9ycyA8PCBTRUNUT1JfU0hJRlQpOworLSAgICBnZW8tPnN0YXJ0ID0gMDsKKy0KKy0gICAgaWYgKCFvcHQuc2VjdG9ycyAmJiAhb3B0LmhlYWRzKSB7CistCWZwcmludGYoc3RkZXJyLAorLQkJIldhcm5pbmc6IHVuYWJsZSB0byBvYnRhaW4gZGV2aWNlIGdlb21ldHJ5IChkZWZhdWx0aW5nIHRvICVkIGhlYWRzLCAlZCBzZWN0b3JzKVxuIgorLQkJIiAgICAgICAgIChvbiBoYXJkIGRpc2tzLCB0aGlzIGlzIHVzdWFsbHkgaGFybWxlc3MuKVxuIiwKKy0JCWdlby0+aGVhZHMsIGdlby0+c2VjdG9ycyk7CistCXJ2ID0gMTsJCQkvKiBTdWJvcHRpbWFsIHJlc3VsdCAqLworLSAgICB9CistCistb2s6CistICAgIC8qIElmIHRoaXMgaXMgYSBsb29wYmFjayBkZXZpY2UsIHRyeSB0byBzZXQgdGhlIHN0YXJ0ICovCistICAgIGlmICghaW9jdGwoZGV2ZmQsIExPT1BfR0VUX1NUQVRVUzY0LCAmbGk2NCkpCistCWdlby0+c3RhcnQgPSBsaTY0LmxvX29mZnNldCA+PiBTRUNUT1JfU0hJRlQ7CistICAgIGVsc2UgaWYgKCFpb2N0bChkZXZmZCwgTE9PUF9HRVRfU1RBVFVTLCAmbGkpKQorLQlnZW8tPnN0YXJ0ID0gKHVuc2lnbmVkIGludClsaS5sb19vZmZzZXQgPj4gU0VDVE9SX1NISUZUOworLSAgICBlbHNlIGlmICghc3lzZnNfZ2V0X29mZnNldChkZXZmZCwgJmdlby0+c3RhcnQpKSB7CistCS8qIE9LICovCistICAgIH0KKy0KKy0gICAgcmV0dXJuIHJ2OworLX0KKy0KKy0vKgorICAqIFF1ZXJ5IHRoZSBkZXZpY2UgZ2VvbWV0cnkgYW5kIHB1dCBpdCBpbnRvIHRoZSBib290IHNlY3Rvci4KKyAgKiBNYXAgdGhlIGZpbGUgYW5kIHB1dCB0aGUgbWFwIGluIHRoZSBib290IHNlY3RvciBhbmQgZmlsZS4KKyAgKiBTdGljayB0aGUgImN1cnJlbnQgZGlyZWN0b3J5IiBpbm9kZSBudW1iZXIgaW50byB0aGUgZmlsZS4KK0BAIC0yMzEsMTEgKzk4LDggQEAgb2s6Cisgc3RhdGljIGludCBwYXRjaF9maWxlX2FuZF9ib290YmxvY2soaW50IGZkLCBjb25zdCBjaGFyICpkaXIsIGludCBkZXZmZCkKKyB7CisgICAgIHN0cnVjdCBzdGF0IGRpcnN0LCB4ZHN0OworLSAgICBzdHJ1Y3QgaGRfZ2VvbWV0cnkgZ2VvOworICAgICBzZWN0b3JfdCAqc2VjdHA7CistICAgIHVpbnQ2NF90IHRvdGFsYnl0ZXMsIHRvdGFsc2VjdG9yczsKKyAgICAgaW50IG5zZWN0OworLSAgICBzdHJ1Y3QgZmF0X2Jvb3Rfc2VjdG9yICpzYnM7CisgICAgIGNoYXIgKmRpcnBhdGgsICpzdWJwYXRoLCAqeGRpcnBhdGg7CisgICAgIGludCBydjsKKyAKK0BAIC0yNzksMzMgKzE0Myw4IEBAIHN0YXRpYyBpbnQgcGF0Y2hfZmlsZV9hbmRfYm9vdGJsb2NrKGludCBmZCwgY29uc3QgY2hhciAqZGlyLCBpbnQgZGV2ZmQpCisgICAgIC8qIE5vdyBzdWJwYXRoIHNob3VsZCBjb250YWluIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBmcyBiYXNlICovCisgICAgIGRwcmludGYoInN1YnBhdGggPSAlc1xuIiwgc3VicGF0aCk7CisgCistICAgIHRvdGFsYnl0ZXMgPSBnZXRfc2l6ZShkZXZmZCk7CistICAgIGdldF9nZW9tZXRyeShkZXZmZCwgdG90YWxieXRlcywgJmdlbyk7CistCistICAgIGlmIChvcHQuaGVhZHMpCistCWdlby5oZWFkcyA9IG9wdC5oZWFkczsKKy0gICAgaWYgKG9wdC5zZWN0b3JzKQorLQlnZW8uc2VjdG9ycyA9IG9wdC5zZWN0b3JzOworLQorLSAgICAvKiBQYXRjaCB0aGlzIGludG8gYSBmYWtlIEZBVCBzdXBlcmJsb2NrLiAgVGhpcyBpc24ndCBiZWNhdXNlCistICAgICAgIEZBVCBpcyBhIGdvb2QgZm9ybWF0IGluIGFueSB3YXksIGl0J3MgYmVjYXVzZSBpdCBsZXRzIHRoZQorLSAgICAgICBlYXJseSBib290c3RyYXAgc2hhcmUgY29kZSB3aXRoIHRoZSBGQVQgdmVyc2lvbi4gKi8KKy0gICAgZHByaW50ZigiaGVhZHMgPSAldSwgc2VjdCA9ICV1XG4iLCBnZW8uaGVhZHMsIGdlby5zZWN0b3JzKTsKKy0KKy0gICAgc2JzID0gKHN0cnVjdCBmYXRfYm9vdF9zZWN0b3IgKilzeXNsaW51eF9ib290c2VjdDsKKy0KKy0gICAgdG90YWxzZWN0b3JzID0gdG90YWxieXRlcyA+PiBTRUNUT1JfU0hJRlQ7CistICAgIGlmICh0b3RhbHNlY3RvcnMgPj0gNjU1MzYpIHsKKy0Jc2V0XzE2KCZzYnMtPmJzU2VjdG9ycywgMCk7CistICAgIH0gZWxzZSB7CistCXNldF8xNigmc2JzLT5ic1NlY3RvcnMsIHRvdGFsc2VjdG9ycyk7CistICAgIH0KKy0gICAgc2V0XzMyKCZzYnMtPmJzSHVnZVNlY3RvcnMsIHRvdGFsc2VjdG9ycyk7CistCistICAgIHNldF8xNigmc2JzLT5ic0J5dGVzUGVyU2VjLCBTRUNUT1JfU0laRSk7CistICAgIHNldF8xNigmc2JzLT5ic1NlY1BlclRyYWNrLCBnZW8uc2VjdG9ycyk7CistICAgIHNldF8xNigmc2JzLT5ic0hlYWRzLCBnZW8uaGVhZHMpOworLSAgICBzZXRfMzIoJnNicy0+YnNIaWRkZW5TZWNzLCBnZW8uc3RhcnQpOworKyAgICAvKiBQYXRjaCBzeXNsaW51eF9ib290c2VjdCAqLworKyAgICBzeXNsaW51eF9wYXRjaF9ib290c2VjdChkZXZmZCk7CisgCisgICAgIC8qIENvbnN0cnVjdCB0aGUgYm9vdCBmaWxlIG1hcCAqLworIAorZGlmZiAtLWdpdCBhL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jIGIvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMKK2luZGV4IGJiNTRjZWYuLjVhNDQyM2IgMTAwNjQ0CistLS0gYS9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuYworKysrIGIvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMKK0BAIC0xLDcgKzEsMTc3IEBACisgI2RlZmluZSBfR05VX1NPVVJDRQorIAorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8Z2V0b3B0Lmg+CisrI2luY2x1ZGUgPGV4dDJmcy9leHQyZnMuaD4KKysKKysjaW5jbHVkZSAibGludXhpb2N0bC5oIgorKyNpbmNsdWRlICJzeXNsaW51eC5oIgorKyNpbmNsdWRlICJzeXNseGludC5oIgorKyNpbmNsdWRlICJzeXNseG9wdC5oIgorKworKy8qCisrICogR2V0IHRoZSBzaXplIG9mIGEgYmxvY2sgZGV2aWNlCisrICovCisrc3RhdGljIHVpbnQ2NF90IGdldF9zaXplKGludCBkZXZfZmQpCisreworKyAgICB1aW50NjRfdCBieXRlczsKKysgICAgdWludDMyX3Qgc2VjdHM7CisrICAgIHN0cnVjdCBzdGF0IHN0OworKworKyNpZmRlZiBCTEtHRVRTSVpFNjQKKysgICAgaWYgKCFpb2N0bChkZXZfZmQsIEJMS0dFVFNJWkU2NCwgJmJ5dGVzKSkKKysJcmV0dXJuIGJ5dGVzOworKyNlbmRpZgorKyAgICBpZiAoIWlvY3RsKGRldl9mZCwgQkxLR0VUU0laRSwgJnNlY3RzKSkKKysJcmV0dXJuICh1aW50NjRfdCkgc2VjdHMgPDwgOTsKKysgICAgZWxzZSBpZiAoIWZzdGF0KGRldl9mZCwgJnN0KSAmJiBzdC5zdF9zaXplKQorKwlyZXR1cm4gc3Quc3Rfc2l6ZTsKKysgICAgZWxzZQorKwlyZXR1cm4gMDsKKyt9CisrCisrLyoKKysgKiBHZXQgZGV2aWNlIGdlb21ldHJ5IGFuZCBwYXJ0aXRpb24gb2Zmc2V0CisrICovCisrc3RhdGljIHN0cnVjdCBnZW9tZXRyeV90YWJsZSB7CisrICAgIHVpbnQ2NF90IGJ5dGVzOworKyAgICBzdHJ1Y3QgaGRfZ2VvbWV0cnkgZzsKKyt9OworKworK3N0YXRpYyBpbnQgc3lzZnNfZ2V0X29mZnNldChpbnQgZGV2X2ZkLCB1bnNpZ25lZCBsb25nICpzdGFydCkKKyt7CisrICAgIHN0cnVjdCBzdGF0IHN0OworKyAgICBjaGFyIHN5c2ZzX25hbWVbMTI4XTsKKysgICAgRklMRSAqZjsKKysgICAgaW50IHJ2OworKworKyAgICBpZiAoZnN0YXQoZGV2X2ZkLCAmc3QpKQorKwlyZXR1cm4gLTE7CisrCisrICAgIGlmICgoc2l6ZV90KXNucHJpbnRmKHN5c2ZzX25hbWUsIHNpemVvZiBzeXNmc19uYW1lLAorKwkJCSAiL3N5cy9kZXYvYmxvY2svJXU6JXUvc3RhcnQiLAorKwkJCSBtYWpvcihzdC5zdF9yZGV2KSwgbWlub3Ioc3Quc3RfcmRldikpCisrCT49IHNpemVvZiBzeXNmc19uYW1lKQorKwlyZXR1cm4gLTE7CisrCisrICAgIGYgPSBmb3BlbihzeXNmc19uYW1lLCAiciIpOworKyAgICBpZiAoIWYpCisrCXJldHVybiAtMTsKKysKKysgICAgcnYgPSBmc2NhbmYoZiwgIiVsdSIsIHN0YXJ0KTsKKysgICAgZmNsb3NlKGYpOworKworKyAgICByZXR1cm4gKHJ2ID09IDEpID8gMCA6IC0xOworK30KKysKKysvKiBTdGFuZGFyZCBmbG9wcHkgZGlzayBnZW9tZXRyaWVzLCBwbHVzIExTLTEyMC4gIFppcGRpc2sgZ2VvbWV0cnkKKysgICAoeC82NC8zMikgaXMgdGhlIGZpbmFsIGZhbGxiYWNrLiAgSSBkb24ndCBrbm93IHdoYXQgTFMtMjQwIGhhcworKyAgIGFzIGl0cyBnZW9tZXRyeSwgc2luY2UgSSBkb24ndCBoYXZlIG9uZSBhbmQgZG9uJ3Qga25vdyBhbnlvbmUgdGhhdCBkb2VzLAorKyAgIGFuZCBHb29nbGUgd2Fzbid0IGhlbHBmdWwuLi4gKi8KKytzdGF0aWMgY29uc3Qgc3RydWN0IGdlb21ldHJ5X3RhYmxlIHN0YW5kYXJkX2dlb21ldHJpZXNbXSA9IHsKKysgICAgezM2MCAqIDEwMjQsIHsyLCA5LCA0MCwgMH19LAorKyAgICB7NzIwICogMTAyNCwgezIsIDksIDgwLCAwfX0sCisrICAgIHsxMjAwICogMTAyNCwgezIsIDE1LCA4MCwgMH19LAorKyAgICB7MTQ0MCAqIDEwMjQsIHsyLCAxOCwgODAsIDB9fSwKKysgICAgezE2ODAgKiAxMDI0LCB7MiwgMjEsIDgwLCAwfX0sCisrICAgIHsxNzIyICogMTAyNCwgezIsIDIxLCA4MCwgMH19LAorKyAgICB7Mjg4MCAqIDEwMjQsIHsyLCAzNiwgODAsIDB9fSwKKysgICAgezM4NDAgKiAxMDI0LCB7MiwgNDgsIDgwLCAwfX0sCisrICAgIHsxMjMyNjQgKiAxMDI0LCB7OCwgMzIsIDk2MywgMH19LAkvKiBMUzEyMCAqLworKyAgICB7MCwgezAsIDAsIDAsIDB9fQorK307CisrCisrc3RhdGljIGludCBnZXRfZ2VvbWV0cnkoaW50IGRldl9mZCwgdWludDY0X3QgdG90YWxieXRlcywgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCisreworKyAgICBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCBmZF9zdHI7CisrICAgIHN0cnVjdCBsb29wX2luZm8gbGk7CisrICAgIHN0cnVjdCBsb29wX2luZm82NCBsaTY0OworKyAgICBjb25zdCBzdHJ1Y3QgZ2VvbWV0cnlfdGFibGUgKmdwOworKyAgICBpbnQgcnYgPSAwOworKworKyAgICBtZW1zZXQoZ2VvLCAwLCBzaXplb2YgKmdlbyk7CisrCisrICAgIGlmICghaW9jdGwoZGV2X2ZkLCBIRElPX0dFVEdFTywgZ2VvKSkgeworKwlnb3RvIG9rOworKyAgICB9IGVsc2UgaWYgKCFpb2N0bChkZXZfZmQsIEZER0VUUFJNLCAmZmRfc3RyKSkgeworKwlnZW8tPmhlYWRzID0gZmRfc3RyLmhlYWQ7CisrCWdlby0+c2VjdG9ycyA9IGZkX3N0ci5zZWN0OworKwlnZW8tPmN5bGluZGVycyA9IGZkX3N0ci50cmFjazsKKysJZ2VvLT5zdGFydCA9IDA7CisrCWdvdG8gb2s7CisrICAgIH0KKysKKysgICAgLyogRGlkbid0IHdvcmsuICBMZXQncyBzZWUgaWYgdGhpcyBpcyBvbmUgb2YgdGhlIHN0YW5kYXJkIGdlb21ldHJpZXMgKi8KKysgICAgZm9yIChncCA9IHN0YW5kYXJkX2dlb21ldHJpZXM7IGdwLT5ieXRlczsgZ3ArKykgeworKwlpZiAoZ3AtPmJ5dGVzID09IHRvdGFsYnl0ZXMpIHsKKysJICAgIG1lbWNweShnZW8sICZncC0+Zywgc2l6ZW9mICpnZW8pOworKwkgICAgZ290byBvazsKKysJfQorKyAgICB9CisrCisrICAgIC8qIERpZG4ndCB3b3JrIGVpdGhlci4uLiBhc3NpZ24gYSBnZW9tZXRyeSBvZiA2NCBoZWFkcywgMzIgc2VjdG9yczsgdGhpcyBpcworKyAgICAgICB3aGF0IHppcGRpc2tzIHVzZSwgc28gdGhpcyB3b3VsZCBoZWxwIGlmIHNvbWVvbmUgaGFzIGEgVVNCIGtleSB0aGF0CisrICAgICAgIHRoZXkncmUgYm9vdGluZyBpbiBVU0ItWklQIG1vZGUuICovCisrCisrICAgIGdlby0+aGVhZHMgPSBvcHQuaGVhZHMgPyA6IDY0OworKyAgICBnZW8tPnNlY3RvcnMgPSBvcHQuc2VjdG9ycyA/IDogMzI7CisrICAgIGdlby0+Y3lsaW5kZXJzID0gdG90YWxieXRlcyAvIChnZW8tPmhlYWRzICogZ2VvLT5zZWN0b3JzIDw8IFNFQ1RPUl9TSElGVCk7CisrICAgIGdlby0+c3RhcnQgPSAwOworKworKyAgICBpZiAoIW9wdC5zZWN0b3JzICYmICFvcHQuaGVhZHMpIHsKKysJZnByaW50ZihzdGRlcnIsCisrCQkiV2FybmluZzogdW5hYmxlIHRvIG9idGFpbiBkZXZpY2UgZ2VvbWV0cnkgKGRlZmF1bHRpbmcgdG8gJWQgaGVhZHMsICVkIHNlY3RvcnMpXG4iCisrCQkiICAgICAgICAgKG9uIGhhcmQgZGlza3MsIHRoaXMgaXMgdXN1YWxseSBoYXJtbGVzcy4pXG4iLAorKwkJZ2VvLT5oZWFkcywgZ2VvLT5zZWN0b3JzKTsKKysJcnYgPSAxOwkJCS8qIFN1Ym9wdGltYWwgcmVzdWx0ICovCisrICAgIH0KKysKKytvazoKKysgICAgLyogSWYgdGhpcyBpcyBhIGxvb3BiYWNrIGRldmljZSwgdHJ5IHRvIHNldCB0aGUgc3RhcnQgKi8KKysgICAgaWYgKCFpb2N0bChkZXZfZmQsIExPT1BfR0VUX1NUQVRVUzY0LCAmbGk2NCkpCisrCWdlby0+c3RhcnQgPSBsaTY0LmxvX29mZnNldCA+PiBTRUNUT1JfU0hJRlQ7CisrICAgIGVsc2UgaWYgKCFpb2N0bChkZXZfZmQsIExPT1BfR0VUX1NUQVRVUywgJmxpKSkKKysJZ2VvLT5zdGFydCA9ICh1bnNpZ25lZCBpbnQpbGkubG9fb2Zmc2V0ID4+IFNFQ1RPUl9TSElGVDsKKysgICAgZWxzZSBpZiAoIXN5c2ZzX2dldF9vZmZzZXQoZGV2X2ZkLCAmZ2VvLT5zdGFydCkpIHsKKysJLyogT0sgKi8KKysgICAgfQorKworKyAgICByZXR1cm4gcnY7CisrfQorKworKworIC8qIFBhdGNoIHN5c2xpbnV4X2Jvb3RzZWN0ICovCisgdm9pZCBzeXNsaW51eF9wYXRjaF9ib290c2VjdChpbnQgZGV2X2ZkKQorIHsKKysgICAgdWludDY0X3QgdG90YWxieXRlcywgdG90YWxzZWN0b3JzOworKyAgICBzdHJ1Y3QgaGRfZ2VvbWV0cnkgZ2VvOworKyAgICBzdHJ1Y3QgZmF0X2Jvb3Rfc2VjdG9yICpzYnM7CisrCisrICAgIHRvdGFsYnl0ZXMgPSBnZXRfc2l6ZShkZXZfZmQpOworKyAgICBnZXRfZ2VvbWV0cnkoZGV2X2ZkLCB0b3RhbGJ5dGVzLCAmZ2VvKTsKKysKKysgICAgaWYgKG9wdC5oZWFkcykKKysJZ2VvLmhlYWRzID0gb3B0LmhlYWRzOworKyAgICBpZiAob3B0LnNlY3RvcnMpCisrCWdlby5zZWN0b3JzID0gb3B0LnNlY3RvcnM7CisrCisrICAgIC8qIFBhdGNoIHRoaXMgaW50byBhIGZha2UgRkFUIHN1cGVyYmxvY2suICBUaGlzIGlzbid0IGJlY2F1c2UKKysgICAgICAgRkFUIGlzIGEgZ29vZCBmb3JtYXQgaW4gYW55IHdheSwgaXQncyBiZWNhdXNlIGl0IGxldHMgdGhlCisrICAgICAgIGVhcmx5IGJvb3RzdHJhcCBzaGFyZSBjb2RlIHdpdGggdGhlIEZBVCB2ZXJzaW9uLiAqLworKyAgICBzYnMgPSAoc3RydWN0IGZhdF9ib290X3NlY3RvciAqKXN5c2xpbnV4X2Jvb3RzZWN0OworKworKyAgICB0b3RhbHNlY3RvcnMgPSB0b3RhbGJ5dGVzID4+IFNFQ1RPUl9TSElGVDsKKysgICAgaWYgKHRvdGFsc2VjdG9ycyA+PSA2NTUzNikgeworKwlzZXRfMTYoJnNicy0+YnNTZWN0b3JzLCAwKTsKKysgICAgfSBlbHNlIHsKKysJc2V0XzE2KCZzYnMtPmJzU2VjdG9ycywgdG90YWxzZWN0b3JzKTsKKysgICAgfQorKyAgICBzZXRfMzIoJnNicy0+YnNIdWdlU2VjdG9ycywgdG90YWxzZWN0b3JzKTsKKysKKysgICAgc2V0XzE2KCZzYnMtPmJzQnl0ZXNQZXJTZWMsIFNFQ1RPUl9TSVpFKTsKKysgICAgc2V0XzE2KCZzYnMtPmJzU2VjUGVyVHJhY2ssIGdlby5zZWN0b3JzKTsKKysgICAgc2V0XzE2KCZzYnMtPmJzSGVhZHMsIGdlby5oZWFkcyk7CisrICAgIHNldF8zMigmc2JzLT5ic0hpZGRlblNlY3MsIGdlby5zdGFydCk7CisgfQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA5LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1pbnN0YWxsX2Jvb3RibG9jay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDktbGludXgtc3lzbGludXgtaW1wbGVtZW50LWluc3RhbGxfYm9vdGJsb2NrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkODlkOTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA5LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1pbnN0YWxsX2Jvb3RibG9jay5wYXRjaApAQCAtMCwwICsxLDUwIEBACitGcm9tIDc2YzQ2NWU4NzMxMmRiYzZjZmZkMDU0MjdmMWY0ZDJlYmRlZTRmMTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMiBKYW4gMjAxNSAxMjoyODozNSArMDgwMAorU3ViamVjdDogW1BBVENIIDkvOV0gbGludXgvc3lzbGludXg6IGltcGxlbWVudCBpbnN0YWxsX2Jvb3RibG9jaygpCisKK1JlZmVyIHRvIHRoZSBpbnN0YWxsX2Jvb3RibG9jaygpIGluIGV4dGxpbnV4L21haW4uYyB0byBtYWtlCitsaW51eC9zeXNsaW51eC5jJ3MgaW5zdGFsbF9ib290YmxvY2soKSB3aGljaCBvbmx5IHN1cHBvcnRzIGV4dDIvMy80LgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaW51eC9zeXNsaW51eC5jIHwgMjAgKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IGM3NDE3NTAuLjkxN2Y4M2EgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtNDE5LDYgKzQxOSwyNiBAQCBzdGF0aWMgaW50IGV4dF9maWxlX3dyaXRlKGV4dDJfZmlsZV90IGUyX2ZpbGUsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LAorICAqLworIGludCBpbnN0YWxsX2Jvb3RibG9jayhpbnQgZmQsIGNvbnN0IGNoYXIgKmRldmljZSkKKyB7CisrICAgIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHNiOworKworKyAgICBpZiAoeHByZWFkKGZkLCAmc2IsIHNpemVvZiBzYiwgRVhUMl9TVVBFUl9PRkZTRVQgKyBvcHQub2Zmc2V0KSAhPSBzaXplb2Ygc2IpIHsKKysgICAgICAgIHBlcnJvcigicmVhZGluZyBzdXBlcmJsb2NrIik7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgICBpZiAoc2Iuc19tYWdpYyAhPSBFWFQyX1NVUEVSX01BR0lDKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKysgICAgICAgICAgICAgICAgIm5vIGV4dDIvMy80IHN1cGVyYmxvY2sgZm91bmQgb24gJXNcbiIsIGRldmljZSk7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgICBpZiAoeHB3cml0ZShmZCwgc3lzbGludXhfYm9vdHNlY3QsIHN5c2xpbnV4X2Jvb3RzZWN0X2xlbiwgMCkKKysgICAgICAgICE9IChzaWduZWQpc3lzbGludXhfYm9vdHNlY3RfbGVuKSB7CisrICAgICAgICBwZXJyb3IoIndyaXRpbmcgYm9vdGJsb2NrIik7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgICByZXR1cm4gMDsKKyB9CisgCisgLyogVGhlIGZpbGUncyBibG9jayBjb3VudCAqLworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC9zeXNsaW51eC1maXgtcGFyYWxsZWwtYnVpbGRpbmctaXNzdWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC9zeXNsaW51eC1maXgtcGFyYWxsZWwtYnVpbGRpbmctaXNzdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEyYjFlOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LWZpeC1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaApAQCAtMCwwICsxLDM1IEBACitzeXNsaW51eC1uYXRpdmU6IGZpeCBwYXJhbGxlbCBidWlsZGluZyBpc3N1ZQorCitUaGVyZSBtaWdodCBiZSBhbiBlcnJvciB3aGVuIHBhcmFsbGVsIGJ1aWxkOgorCitbc25pcF0KK2NwOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBgdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvCitzeXNsaW51eC9jb20zMi9pbmNsdWRlL2dwbGluY2x1ZGUnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CittYWtlWzRdOiAqKiogW2luc3RhbGxdIEVycm9yIDEKK21ha2VbM106ICoqKiBbZ3BsbGliXSBFcnJvciAyCitbc25pcF0KKworVGhpcyBpcyBhIHBvdGVudGlhbCBpc3N1ZS4gSW4gJHtTfS9jb20zMi9ncGxsaWIvTWFrZWZpbGUgZmlsZSwKK2luc3RhbGwgdGFyZ2V0IHdhbnRzIHRvIGNvcHkgJChTUkMpLy4uL2dwbGluY2x1ZGUgdG8KKyQoSU5TVEFMTFJPT1QpJChDT00zMkRJUikvaW5jbHVkZS8gZGlyZWN0b3J5LCBidXQgaW4gJHtTfS9jb20zMi9saWIvTWFrZWZpbGUKK2ZpbGUsIHRoZSBpbnN0YWxsIHRhcmdldCB3aWxsIHJlbW92ZSAkKElOU1RBTExST09UKSQoQ09NMzJESVIpL2luY2x1ZGUKK2RpcmVjdG9yeS4gV2UgbmVlZCB0byBkbyBjb20zMi9saWIgZmlyc3QuCisKK1RoZSBwYXRjaCBtYWtlIGNvbTMyL2dwbGxpYiBkZXBlbmRzIG9uIGNvbTMyL2xpYiB0byBmaXggdGhpcyBpc3N1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29tMzIvTWFrZWZpbGUgfCAgICAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworSW5kZXg6IHN5c2xpbnV4LTYuMDMvY29tMzIvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNsaW51eC02LjAzLm9yaWcvY29tMzIvTWFrZWZpbGUKKysrKyBzeXNsaW51eC02LjAzL2NvbTMyL01ha2VmaWxlCitAQCAtMjEsMyArMjEsNCBAQCByb3NoOiBsaWIgbGlidXRpbAorIHNhbXBsZXM6IGxpYnV0aWwgZWxmbGluay9sZGxpbnV4Cisgc3lzZHVtcDogbGliIGxpYnV0aWwgbGlidXBsb2FkIGdwbGxpYgorIGx1YS9zcmM6IGNtZW51IG1vZHVsZXMKKytncGxsaWI6IGxpYgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtbGlidXBsb2FkLWRlcGVuZC1saWIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC9zeXNsaW51eC1saWJ1cGxvYWQtZGVwZW5kLWxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDcxNGI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtbGlidXBsb2FkLWRlcGVuZC1saWIucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSA0OTBmYzNiYmQ2NWMyYzI1MmMxZmRmM2RhMGZhYzk4OThhYTllZWE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDE1IEF1ZyAyMDE0IDIxOjA5OjE2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbTMyL01ha2VmaWxlOiBmaXggcGFyYWxsZWwgaXNzdWUKKworRml4ZWQ6CitjcCAtciBzeXNsaW51eC02LjAxL2NvbTMyL2xpYnVwbG9hZC8qLmggaW1hZ2UvdXNyL3NoYXJlL3N5c2xpbnV4L2NvbTMyL2luY2x1ZGUvCitbc25pcF0KK3JtIC1yZiBpbWFnZS91c3Ivc2hhcmUvc3lzbGludXgvY29tMzIvaW5jbHVkZQorW3NuaXBdCitjcDogY2Fubm90IGNyZWF0ZSByZWd1bGFyIGZpbGUgYGltYWdlL3Vzci9zaGFyZS9zeXNsaW51eC9jb20zMi9pbmNsdWRlL3NlcmlhbC5oJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitUaGUgY3AgaXMgaGFwcGVuZWQgaW4gdGhlICJsaWJ1cGxvYWQiIGRpciwgd2hpbGUgInJtIC1mciIgaXMgaGFwcGVuZCBpbgorImxpYiIgZGlyLCBsZXQgImxpYnVwbG9hZCIgZGVwZW5kICJsaWIiIHdpbGwgZml4IHRoZSBwcm9ibGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb20zMi9NYWtlZmlsZSB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvY29tMzIvTWFrZWZpbGUgYi9jb20zMi9NYWtlZmlsZQoraW5kZXggOWExNzIxYi4uZjE3MmRiMiAxMDA2NDQKKy0tLSBhL2NvbTMyL01ha2VmaWxlCisrKysgYi9jb20zMi9NYWtlZmlsZQorQEAgLTIxLDMgKzIxLDQgQEAgcm9zaDogbGliIGxpYnV0aWwKKyBzYW1wbGVzOiBsaWJ1dGlsIGVsZmxpbmsvbGRsaW51eAorIHN5c2R1bXA6IGxpYnVwbG9hZCBncGxsaWIKKyBncGxsaWI6IGxpYgorK2xpYnVwbG9hZDogbGliCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtcmVtb3ZlLWNsZWFuLXNjcmlwdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LXJlbW92ZS1jbGVhbi1zY3JpcHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MwMDNlMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LXJlbW92ZS1jbGVhbi1zY3JpcHQucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVGhpcyBzY3JpcHQgdHJ5IHRvIGNhbGwgZ2l0IHN1Ym1vZHVsZSwgc2luY2Ugd2UgYXJlIGRvd25sb2FkaW5nCit0aGUgdGFyYmFsbCBpdCBzZWVtcyBpbi1jb3JyZWN0IHRvIGRvIHRoaXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtU3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitJbmRleDogc3lzbGludXgtNi4wMy9lZmkvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNsaW51eC02LjAzLm9yaWcvZWZpL01ha2VmaWxlCisrKysgc3lzbGludXgtNi4wMy9lZmkvTWFrZWZpbGUKK0BAIC0xMDEsNyArMTAxLDYgQEAgdGlkeSBkaXN0OgorIAlybSAtZiAqLnNvICoubyB3cmFwcGVyCisgCWZpbmQgLiBcKCAtbmFtZSBcKi5vIC1vIC1uYW1lIFwqLmEgLW8gLW5hbWUgLlwqLmQgLW8gLW5hbWUgXCoudG1wIFwpIC1wcmludDAgfCBcCisgCQl4YXJncyAtMHIgcm0gLWYKKy0JJCh0b3BkaXIpL2VmaS9jbGVhbi1nbnUtZWZpLnNoICQoRUZJX1NVQkFSQ0gpICQob2JqZGlyKQorIAorIGNsZWFuOiB0aWR5CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eF82LjAzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXhfNi4wMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjlhZTJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXhfNi4wMy5iYgpAQCAtMCwwICsxLDg5IEBACitTVU1NQVJZID0gIk11bHRpLXB1cnBvc2UgbGludXggYm9vdGxvYWRlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9zeXNsaW51eC56eXRvci5jb20vIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTM1O2VuZGxpbmU9NDE7bWQ1PTU1OGYyYzcxY2IxZmI5YmE1MTFjY2Q0ODU4ZTQ4ZThhIgorCisjIElmIHlvdSByZWFsbHkgd2FudCB0byBydW4gc3lzbGludXgsIHlvdSBuZWVkIG10b29scy4gIFdlIGp1c3Qgd2FudCB0aGUKKyMgbGRsaW51eC4qIHN0dWZmIGZvciBub3csIHNvIHNraXAgbXRvb2xzLW5hdGl2ZQorREVQRU5EUyA9ICJuYXNtLW5hdGl2ZSB1dGlsLWxpbnV4IGUyZnNwcm9ncyIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL2Jvb3Qvc3lzbGludXgvc3lzbGludXgtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xpbnV4LWZpeC1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNsaW51eC1saWJ1cGxvYWQtZGVwZW5kLWxpYi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNsaW51eC1yZW1vdmUtY2xlYW4tc2NyaXB0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbGludXgtc3lzbGludXgtc3VwcG9ydC1leHQyLTMtNC1kZXZpY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtb3Blbl9leHQyX2ZzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWluc3RhbGxfdG9fZXh0Mi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LWxpbnV4LXN5c2xpbnV4LWFkZC1leHRfZmlsZV9yZWFkLWFuZC1leHRfZmlsZV93cml0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1oYW5kbGVfYWR2X29uX2V4dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA2LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC13cml0ZV90b19leHQtYW5kLWFkZC1zeXNsaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtZXh0X2NvbnN0cnVjdF9zZWN0bWFwX2ZzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDgtbGliaW5zdGFsbGVyLXN5c2xpbnV4ZXh0LWltcGxlbWVudC1zeXNsaW51eF9wYXRjaF9iby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA5LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1pbnN0YWxsX2Jvb3RibG9jay5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjkyYTI1M2RmOTIxMWU5YzIwMTcyNzk2ZWNmMzg4ZjEzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI2ZDM5ODZkMmJlYTEwOWQ1ZGMwZTRmOGM0ODIyYTQ1OTI3NmNmMDIxMTI1ZThjOWYyM2MzY2NhNWQ4Yzg1MGUiCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODYpLiotKGxpbnV4fGZyZWVic2QuKiknCisjIERvbid0IGxldCB0aGUgc2FuaXR5IGNoZWNrZXIgdHJpcCBvbiB0aGUgMzIgYml0IHJlYWwgbW9kZSBCSU9TIGJpbmFyaWVzCitJTlNBTkVfU0tJUF8ke1BOfS1taXNjID0gImFyY2giCitJTlNBTkVfU0tJUF8ke1BOfS1jaGFpbiA9ICJhcmNoIgorCitFWFRSQV9PRU1BS0UgPSAiIFwKKwlCSU5ESVI9JHtiaW5kaXJ9IFNCSU5ESVI9JHtzYmluZGlyfSBMSUJESVI9JHtsaWJkaXJ9IFwKKwlEQVRBRElSPSR7ZGF0YWRpcn0gTUFORElSPSR7bWFuZGlyfSBJTkNESVI9JHtpbmNsdWRlZGlyfSBcCisiCisjIHN5c2xpbnV4IHVzZXMgJExEIGZvciBsaW5raW5nLCBzdHJpcCBgLVdsLCcgc28gaXQgY2FuIHdvcmsKK2V4cG9ydCBMREZMQUdTID0gImBlY2hvICRMREZMQUdTIHwgc2VkICdzLy1XbCwvL2cnYCIKKworZG9fY29uZmlndXJlKCkgeworCSMgZHJvcCB3aW4zMiB0YXJnZXRzIG9yIGJ1aWxkIGZhaWxzCisJc2VkIC1lICdzLHdpbjMyL1xTKiwsZycgLWkgTWFrZWZpbGUKKworCSMgY2xlYW4gaW5zdGFsbGVyIGV4ZWN1dGFibGVzIGluY2x1ZGVkIGluIHNvdXJjZSB0YXJiYWxsCisJb2VfcnVubWFrZSBjbGVhbiBmaXJtd2FyZT0iZWZpMzIiIEVGSUlOQz0iJHtpbmNsdWRlZGlyfSIKKwkjIE5PVEU6IFRoZXJlIGlzIGEgdGVtcG9yYXJ5IHdvcmsgYXJvdW5kIGFib3ZlIHRvIHNwZWNpZnkKKwkjCXRoZSBlZmkzMiBhcyB0aGUgZmlybXdhcmUgZWxzZSB0aGUgcHJlLWJ1aWx0IGJpb3MKKwkjCWZpbGVzIGdldCBlcmFzZWQgY29udHJhcnkgdG8gdGhlIGRvYy9kaXN0aWIudHh0CisJIwlJbiB0aGUgZnV0dXJlIHRoaXMgc2hvdWxkIGJlICJiaW9zIiBhbmQgbm90ICJlZmkzMiIuCit9CisKK2RvX2NvbXBpbGUoKSB7CisJIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSy4KKwkjIFRob3VnaCB0aGUgJHtCfSBzaG91bGQgYWx3YXlzIGV4aXN0LCBzdGlsbCBjaGVjayBpdCBiZWZvcmUgZmluZCBhbmQgcm0uCisJWyAtZCAiJHtCfSIgXSAmJiBmaW5kICR7Qn0gLW5hbWUgJy4qLmQnIC10eXBlIGYgLWV4ZWMgcm0gLWYge30gXDsKKworCSMgUmVidWlsZCBvbmx5IHRoZSBpbnN0YWxsZXI7IGtlZXAgcHJlY29tcGlsZWQgYm9vdGxvYWRlcnMKKwkjIGFzIHBlciBhdXRob3IncyByZXF1ZXN0IChkb2MvZGlzdHJpYi50eHQpCisJb2VfcnVubWFrZSBDQz0iJHtDQ30gJHtDRkxBR1N9IiBMREZMQUdTPSIke0xERkxBR1N9IiBmaXJtd2FyZT0iYmlvcyIgaW5zdGFsbGVyCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBDQz0iJHtDQ30gJHtDRkxBR1N9IiBpbnN0YWxsIElOU1RBTExST09UPSIke0R9IiBmaXJtd2FyZT0iYmlvcyIKKworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vc3lzbGludXgvCisJaW5zdGFsbCAtbSA2NDQgJHtTfS9iaW9zL2NvcmUvbGRsaW51eC5zeXMgJHtEfSR7ZGF0YWRpcn0vc3lzbGludXgvCisJaW5zdGFsbCAtbSA2NDQgJHtTfS9iaW9zL2NvcmUvbGRsaW51eC5ic3MgJHtEfSR7ZGF0YWRpcn0vc3lzbGludXgvCisJaW5zdGFsbCAtbSA3NTUgJHtTfS9iaW9zL2xpbnV4L3N5c2xpbnV4LW5vbXRvb2xzICR7RH0ke2JpbmRpcn0vCit9CisKK1BBQ0tBR0VTICs9ICIke1BOfS1ub210b29scyAke1BOfS1leHRsaW51eCAke1BOfS1tYnIgJHtQTn0tY2hhaW4gJHtQTn0tcHhlbGludXggJHtQTn0taXNvbGludXggJHtQTn0tbWlzYyIKKworUkRFUEVORFNfJHtQTn0gKz0gIm10b29scyIKK1JERVBFTkRTXyR7UE59LW5vbXRvb2xzICs9ICJsaWJleHQyZnMiCitSREVQRU5EU18ke1BOfS1taXNjICs9ICJwZXJsIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vc3lzbGludXgiCitGSUxFU18ke1BOfS1ub210b29scyA9ICIke2JpbmRpcn0vc3lzbGludXgtbm9tdG9vbHMiCitGSUxFU18ke1BOfS1leHRsaW51eCA9ICIke3NiaW5kaXJ9L2V4dGxpbnV4IgorRklMRVNfJHtQTn0tbWJyID0gIiR7ZGF0YWRpcn0vJHtCUE59L21ici5iaW4iCitGSUxFU18ke1BOfS1jaGFpbiA9ICIke2RhdGFkaXJ9LyR7QlBOfS9jaGFpbi5jMzIiCitGSUxFU18ke1BOfS1pc29saW51eCA9ICIke2RhdGFkaXJ9LyR7QlBOfS9pc29saW51eC5iaW4iCitGSUxFU18ke1BOfS1weGVsaW51eCA9ICIke2RhdGFkaXJ9LyR7QlBOfS9weGVsaW51eC4wIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9LyR7QlBOfS9jb20zMi9saWIqJHtTT0xJQlN9ICR7ZGF0YWRpcn0vJHtCUE59L2NvbTMyL2luY2x1ZGUgJHtkYXRhZGlyfS8ke0JQTn0vY29tMzIvY29tMzIubGQiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7ZGF0YWRpcn0vJHtCUE59L2NvbTMyL2xpYiouYSAke2xpYmRpcn0vJHtCUE59L2NvbTMyL2xpYiouYSIKK0ZJTEVTXyR7UE59LW1pc2MgPSAiJHtkYXRhZGlyfS8ke0JQTn0vKiAke2xpYmRpcn0vJHtCUE59LyogJHtiaW5kaXJ9LyoiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnQvZml4X3JhbmxpYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnQvZml4X3JhbmxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDcwNDU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC9maXhfcmFubGliLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbcG9reS1zcGVjaWZpYyBmaXhdCisKKy0tLSBhL01ha2VmaWxlLmluYworKysrIGIvTWFrZWZpbGUuaW5jCitAQCAtNTcsNiArNTcsOSBAQAorICAgaWZlcSAoJChOT19VVUlEKSwpCisgICAgIExJQlMgKz0gLWx1dWlkCisgICBlbmRpZgorKyAgaWZuZXEgKCQoUkFOTElCKSwpCisrICAgIFJBTkxJQiArPSAkQAorKyAgZW5kaWYKKyBlbmRpZgorIAorIGlmbmVxICgkKE9QU1lTKSxXaW5kb3dzKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC90Y2YtYWdlbnQuaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnQvdGNmLWFnZW50LmluaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjMwMzI4MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnQvdGNmLWFnZW50LmluaXQKQEAgLTAsMCArMSw3NSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICB0Y2YtYWdlbnQKKyMgRGVmYXVsdC1TdGFydDogICAgIDMgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDIgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogVGFyZ2V0IENvbW11bmljYXRpb24gRnJhbWV3b3JrIGFnZW50CisjIyMgRU5EIElOSVQgSU5GTworCitEQUVNT05fUEFUSD0vdXNyL3NiaW4vdGNmLWFnZW50CitEQUVNT05fTkFNRT1gYmFzZW5hbWUgJERBRU1PTl9QQVRIYAorCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCit0ZXN0IC14ICREQUVNT05fUEFUSCB8fCBleGl0IDAKKworUEFUSD0vc2JpbjovdXNyL3NiaW46L2JpbjovdXNyL2JpbgorZXhwb3J0IFBBVEgKKworUkVUVkFMPTAKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisgICAgICAgIGVjaG8gLW4gIlN0YXJ0aW5nICREQUVNT05fTkFNRTogIgorICAgICAgICAkREFFTU9OX1BBVEggLWQgLUwtIC1sMAorICAgICAgICBSRVRWQUw9JD8KKyAgICAgICAgaWYgWyAkUkVUVkFMIC1lcSAwIF0gOyB0aGVuCisgICAgICAgICAgICBlY2hvICJPSyIKKyAgICAgICAgICAgIHRvdWNoIC92YXIvbG9jay9zdWJzeXMvJERBRU1PTl9OQU1FCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVjaG8gIkZBSUwiCisgICAgICAgIGZpCisgICAgICAgIDs7CisKKyAgICBzdG9wKQorICAgICAgICBlY2hvIC1uICJTdG9wcGluZyAkREFFTU9OX05BTUU6ICIKKyAgICAgICAgY291bnQ9MAorICAgICAgICB3aGlsZSBbIC1uICJgL2Jpbi9waWRvZiAkREFFTU9OX1BBVEhgIiAtYSAkY291bnQgLWx0IDEwIF0gOyBkbworICAgICAgICAgICAga2lsbHByb2MgJERBRU1PTl9QQVRIID4mIC9kZXYvbnVsbAorICAgICAgICAgICAgc2xlZXAgMQorICAgICAgICAgICAgUkVUVkFMPSQ/CisgICAgICAgICAgICBpZiBbICRSRVRWQUwgIT0gMCAtbyAtbiAiYC9iaW4vcGlkb2YgJERBRU1PTl9QQVRIYCIgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICBzbGVlcCAzCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgY291bnQ9YGV4cHIgJGNvdW50ICsgMWAKKyAgICAgICAgZG9uZQorICAgICAgICBybSAtZiAvdmFyL2xvY2svc3Vic3lzLyREQUVNT05fTkFNRQorICAgICAgICBpZiBbIC1uICJgL2Jpbi9waWRvZiAkREFFTU9OX1BBVEhgIiBdIDsgdGhlbgorICAgICAgICAgICAgZWNobyAiRkFJTCIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyAiT0siCisgICAgICAgIGZpCisgICAgICAgIDs7CisKKyAgICByZXN0YXJ0KQorICAgICAgICAkMCBzdG9wCisgICAgICAgIHNsZWVwIDEKKyAgICAgICAgJDAgc3RhcnQKKyAgICAgICAgOzsKKworICAgIHN0YXR1cykKKyAgICAgICAgc3RhdHVzICREQUVNT05fTkFNRQorICAgICAgICBSRVRWQUw9JD8KKyAgICAgICAgOzsKKworICAgIGNvbmRyZXN0YXJ0KQorICAgICAgICBbIC1mIC92YXIvbG9jay9zdWJzeXMvJERBRU1PTl9OQU1FIF0gJiYgJDAgcmVzdGFydAorICAgICAgICA7OworCisgICAgKikKKyAgICAgICAgZWNobyAidXNhZ2U6ICQwIHsgc3RhcnQgfCBzdG9wIHwgc3RhdHVzIHwgcmVzdGFydCB8IGNvbmRyZXN0YXJ0IHwgc3RhdHVzIH0iCisgICAgICAgIDs7Citlc2FjCisKK2V4aXQgJFJFVFZBTAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50L3RjZi1hZ2VudC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC90Y2YtYWdlbnQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDlhNmM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC90Y2YtYWdlbnQuc2VydmljZQpAQCAtMCwwICsxLDEwIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVRhcmdldCBDb21tdW5pY2F0aW9uIEZyYW1ld29yayBhZ2VudAorQWZ0ZXI9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitUeXBlPWZvcmtpbmcKK0V4ZWNTdGFydD1AU0JJTkRJUkAvdGNmLWFnZW50IC1kIC1MLSAtbDAKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGZkMzkwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudF9naXQuYmIKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJUYXJnZXQgQ29tbXVuaWNhdGlvbiBGcmFtZXdvcmsgZm9yIHRoZSBFY2xpcHNlIElERSIKK0hPTUVQQUdFID0gImh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL1RDRiIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3MvIgorCitMSUNFTlNFID0gIkVQTC0xLjAgfCBFREwtMS4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZWRsLXYxMC5odG1sO21kNT01MjJhMzkwYTgzZGMxODY1MTNmMDUwMDU0M2FkMzY3OSIKKworU1JDUkVWID0gImI5YTczNWU5YzdjZjgyZjgwZDQxMmI3YWIxNWQwOGI4OWQ1YTRjY2MiCitQViA9ICIxLjMuMCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZWNsaXBzZS5vcmcvZ2l0cm9vdC90Y2Yvb3JnLmVjbGlwc2UudGNmLmFnZW50LmdpdDticmFuY2g9MS4zX21hcnNfYnVnZml4IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9yYW5saWIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGNmLWFnZW50LmluaXQgXAorICAgICAgICAgICBmaWxlOi8vdGNmLWFnZW50LnNlcnZpY2UgXAorICAgICAgICAgICIKKworREVQRU5EUyA9ICJ1dGlsLWxpbnV4IG9wZW5zc2wiCitSREVQRU5EU18ke1BOfSA9ICJiYXNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0L2FnZW50IgorCitpbmhlcml0IHVwZGF0ZS1yYy5kIHN5c3RlbWQKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gInRjZi1hZ2VudC5zZXJ2aWNlIgorCitJTklUU0NSSVBUX05BTUUgPSAidGNmLWFnZW50IgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTkgMyA1IC4gc3RvcCAyMCAwIDEgMiA2IC4iCisKKyMgbWFuZ2xpbmcgbmVlZGVkIGZvciBtYWtlCitNQUtFX0FSQ0ggPSAiYGVjaG8gJHtUQVJHRVRfQVJDSH0gfCBzZWQgcyxpLjg2LGk2ODYsYCIKK01BS0VfT1MgPSAiYGVjaG8gJHtUQVJHRVRfT1N9IHwgc2VkIHMsXmxpbnV4LiosR05VL0xpbnV4LGAiCisKK0VYVFJBX09FTUFLRSA9ICJNQUNISU5FPSR7TUFLRV9BUkNIfSBPUFNZUz0ke01BS0VfT1N9ICdDQz0ke0NDfScgJ0FSPSR7QVJ9JyIKKworIyBUaGV5IGRvbid0IGJ1aWxkIG9uIEFSTSBhbmQgd2UgZG9uJ3QgbmVlZCB0aGVtIGFjdHVhbGx5LgorQ0ZMQUdTICs9ICItRFNFUlZJQ0VfUnVuQ29udHJvbD0wIC1EU0VSVklDRV9CcmVha3BvaW50cz0wIFwKKyAgICAtRFNFUlZJQ0VfTWVtb3J5PTAgLURTRVJWSUNFX1JlZ2lzdGVycz0wIC1EU0VSVklDRV9NZW1vcnlNYXA9MCBcCisgICAgLURTRVJWSUNFX1N0YWNrVHJhY2U9MCAtRFNFUlZJQ0VfU3ltYm9scz0wIC1EU0VSVklDRV9MaW5lTnVtYmVycz0wIFwKKyAgICAtRFNFUlZJQ0VfRXhwcmVzc2lvbnM9MCIKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwgSU5TVEFMTFJPT1Q9JHtEfQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3RjZi1hZ2VudC5pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC90Y2YtYWdlbnQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdGNmLWFnZW50LnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vdGNmLWFnZW50LnNlcnZpY2UKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2FsdGVyLWluY2x1ZGVkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvYWx0ZXItaW5jbHVkZWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODUzMGUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2FsdGVyLWluY2x1ZGVkaXIucGF0Y2gKQEAgLTAsMCArMSw3NiBAQAorTGV0cyBpbnN0YWxsIHRoZSBpbmNsdWRlIGhlYWRlciBhbmQgcHJpdmF0ZSBoZWFkZXIgZmlsZXMgaW50byAKK3Vzci9pbmNsdWRlL3RjbDguNiB3aGVuIHZlcnNpb24gb2YgdGNsIGlzIDguNi54CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbQ29uZmlndXJhdGlvbiBTcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWkuY29tPgorCitGaXhlZCB0aGUgVENMX0lOQ0xVREVfU1BFQworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluICB8ICAgIDIgKy0KKyBjb25maWd1cmUgICAgfCAgICA0ICsrLS0KKyBjb25maWd1cmUuaW4gfCAgICA0ICsrLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDk3Yjk4M2IuLmRjMmE0ZGYgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC01Myw3ICs1Myw3IEBAIERMTF9JTlNUQUxMX0RJUgkJPSBARExMX0lOU1RBTExfRElSQAorIFNDUklQVF9JTlNUQUxMX0RJUgk9ICQoSU5TVEFMTF9ST09UKSQoVENMX0xJQlJBUlkpCisgCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggdG8gaW5zdGFsbCB0aGUgaW5jbHVkZSBmaWxlIHRjbC5oOgorLUlOQ0xVREVfSU5TVEFMTF9ESVIJPSAkKElOU1RBTExfUk9PVCkkKGluY2x1ZGVkaXIpCisrSU5DTFVERV9JTlNUQUxMX0RJUgk9ICQoSU5TVEFMTF9ST09UKSQoaW5jbHVkZWRpcikvdGNsJChWRVJTSU9OKQorIAorICMgUGF0aCB0byB0aGUgcHJpdmF0ZSB0Y2wgaGVhZGVyIGRpcjoKKyBQUklWQVRFX0lOQ0xVREVfRElSCT0gQFBSSVZBVEVfSU5DTFVERV9ESVJACitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCAzZTc4YjQ5Li4yNGIzZjkyIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0xOTEzNCw3ICsxOTEzNCw3IEBAIGV2YWwgIlRDTF9MSUJfRklMRT1saWJ0Y2wke0xJQl9TVUZGSVh9IgorIGV2YWwgIlRDTF9MSUJfRklMRT0ke1RDTF9MSUJfRklMRX0iCisgCisgVENMX0xJQlJBUlk9JyQobGliZGlyKS90Y2wkKFZFUlNJT04pJworLVBSSVZBVEVfSU5DTFVERV9ESVI9JyQoaW5jbHVkZWRpciknCisrUFJJVkFURV9JTkNMVURFX0RJUj0nJChpbmNsdWRlZGlyKS90Y2wkKFZFUlNJT04pJworIEhUTUxfRElSPSckKERJU1RESVIpL2h0bWwnCisgCisgIyBOb3RlOiAgaW4gdGhlIGZvbGxvd2luZyB2YXJpYWJsZSwgaXQncyBpbXBvcnRhbnQgdG8gdXNlIHRoZSBhYnNvbHV0ZQorQEAgLTE5MjkzLDcgKzE5MjkzLDcgQEAgVENMX0JVSUxEX1NUVUJfTElCX1BBVEg9ImBwd2RgLyR7VENMX1NUVUJfTElCX0ZJTEV9IgorIFRDTF9TVFVCX0xJQl9QQVRIPSIke1RDTF9TVFVCX0xJQl9ESVJ9LyR7VENMX1NUVUJfTElCX0ZJTEV9IgorIAorICMgSW5zdGFsbCB0aW1lIGhlYWRlciBkaXIgY2FuIGJlIHNldCB2aWEgLS1pbmNsdWRlZGlyCistZXZhbCAiVENMX0lOQ0xVREVfU1BFQz1cIi1JJHtpbmNsdWRlZGlyfVwiIgorK2V2YWwgIlRDTF9JTkNMVURFX1NQRUM9XCItSSR7aW5jbHVkZWRpcn0vdGNsJHtWRVJTSU9OfVwiIgorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIHRjbENvbmZpZy5zaCByZWZlcnMgdG8gdGhpcyBieSBhIGRpZmZlcmVudCBuYW1lCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCAwZTI4YjE0Li42MmQ5YjQxIDEwMDc1NQorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC03OTEsNyArNzkxLDcgQEAgZXZhbCAiVENMX0xJQl9GSUxFPWxpYnRjbCR7TElCX1NVRkZJWH0iCisgZXZhbCAiVENMX0xJQl9GSUxFPSR7VENMX0xJQl9GSUxFfSIKKyAKKyBUQ0xfTElCUkFSWT0nJChsaWJkaXIpL3RjbCQoVkVSU0lPTiknCistUFJJVkFURV9JTkNMVURFX0RJUj0nJChpbmNsdWRlZGlyKScKKytQUklWQVRFX0lOQ0xVREVfRElSPSckKGluY2x1ZGVkaXIpL3RjbCQoVkVSU0lPTiknCisgSFRNTF9ESVI9JyQoRElTVERJUikvaHRtbCcKKyAKKyAjIE5vdGU6ICBpbiB0aGUgZm9sbG93aW5nIHZhcmlhYmxlLCBpdCdzIGltcG9ydGFudCB0byB1c2UgdGhlIGFic29sdXRlCitAQCAtOTEyLDcgKzkxMiw3IEBAIFRDTF9CVUlMRF9TVFVCX0xJQl9QQVRIPSJgcHdkYC8ke1RDTF9TVFVCX0xJQl9GSUxFfSIKKyBUQ0xfU1RVQl9MSUJfUEFUSD0iJHtUQ0xfU1RVQl9MSUJfRElSfS8ke1RDTF9TVFVCX0xJQl9GSUxFfSIKKyAKKyAjIEluc3RhbGwgdGltZSBoZWFkZXIgZGlyIGNhbiBiZSBzZXQgdmlhIC0taW5jbHVkZWRpcgorLWV2YWwgIlRDTF9JTkNMVURFX1NQRUM9XCItSSR7aW5jbHVkZWRpcn1cIiIKKytldmFsICJUQ0xfSU5DTFVERV9TUEVDPVwiLUkke2luY2x1ZGVkaXJ9L3RjbCR7VkVSU0lPTn1cIiIKKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyB0Y2xDb25maWcuc2ggcmVmZXJzIHRvIHRoaXMgYnkgYSBkaWZmZXJlbnQgbmFtZQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4LWNvbmZpZ3VyZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9maXgtY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OTJhMGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4LWNvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHVuaXgvdGNsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGNsOC40LjExL3VuaXgub3JpZy90Y2wubTQKKysrKyB0Y2w4LjQuMTEvdW5peC90Y2wubTQKK0BAIC04NDUsNyArODQ1LDcgQEAgQUNfREVGVU4oU0NfQ09ORklHX0NGTEFHUywgWworIAkgICAgIyByZXN1bHRzLCBhbmQgdGhlIHZlcnNpb24gaXMga2VwdCBpbiBzcGVjaWFsIGZpbGUpLgorIAkKKyAJICAgIGlmIHRlc3QgLXIgL2V0Yy8ucmVsaWQgLWEgIlhgdW5hbWUgLW5gIiA9ICJYYHVuYW1lIC1zYCIgOyB0aGVuCistCQlzeXN0ZW09TVAtUkFTLWBhd2sgJ3twcmludCAkM30nIC9ldGMvLnJlbGlkJ2AKKysJCXN5c3RlbT1NUC1SQVMtYGF3ayAne3ByaW50ICQzfScgL2V0Yy8ucmVsaWRgCisgCSAgICBmaQorIAkgICAgaWYgdGVzdCAiYHVuYW1lIC1zYCIgPSAiQUlYIiA7IHRoZW4KKyAJCXN5c3RlbT1BSVgtYHVuYW1lIC12YC5gdW5hbWUgLXJgCitAQCAtMjI1MCw3ICsyMjUwLDcgQEAgQUNfREVGVU4oU0NfQkxPQ0tJTkdfU1RZTEUsIFsKKyAJICAgICMgcmVzdWx0cywgYW5kIHRoZSB2ZXJzaW9uIGlzIGtlcHQgaW4gc3BlY2lhbCBmaWxlKS4KKyAJCisgCSAgICBpZiB0ZXN0IC1yIC9ldGMvLnJlbGlkIC1hICJYYHVuYW1lIC1uYCIgPSAiWGB1bmFtZSAtc2AiIDsgdGhlbgorLQkJc3lzdGVtPU1QLVJBUy1gYXdrICd7cHJpbnQgJDN9JyAvZXRjLy5yZWxpZCdgCisrCQlzeXN0ZW09TVAtUkFTLWBhd2sgJ3twcmludCAkM30nIC9ldGMvLnJlbGlkYAorIAkgICAgZmkKKyAJICAgIGlmIHRlc3QgImB1bmFtZSAtc2AiID0gIkFJWCIgOyB0aGVuCisgCQlzeXN0ZW09QUlYLWB1bmFtZSAtdmAuYHVuYW1lIC1yYAorSW5kZXg6IHVuaXgvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGNsOC40LjExL3VuaXgub3JpZy9jb25maWd1cmUKKysrKyB0Y2w4LjQuMTEvdW5peC9jb25maWd1cmUKK0BAIC0yMTMwLDcgKzIxMzAsNyBAQCBlY2hvICJjb25maWd1cmU6MjEyMTogY2hlY2tpbmcgc3lzdGVtIHZlCisgCSAgICAjIHJlc3VsdHMsIGFuZCB0aGUgdmVyc2lvbiBpcyBrZXB0IGluIHNwZWNpYWwgZmlsZSkuCisgCQorIAkgICAgaWYgdGVzdCAtciAvZXRjLy5yZWxpZCAtYSAiWGB1bmFtZSAtbmAiID0gIlhgdW5hbWUgLXNgIiA7IHRoZW4KKy0JCXN5c3RlbT1NUC1SQVMtYGF3ayAne3ByaW50IH0nIC9ldGMvLnJlbGlkJ2AKKysJCXN5c3RlbT1NUC1SQVMtYGF3ayAne3ByaW50IH0nIC9ldGMvLnJlbGlkYAorIAkgICAgZmkKKyAJICAgIGlmIHRlc3QgImB1bmFtZSAtc2AiID0gIkFJWCIgOyB0aGVuCisgCQlzeXN0ZW09QUlYLWB1bmFtZSAtdmAuYHVuYW1lIC1yYAorQEAgLTc2MDgsNyArNzYwOCw3IEBAIGVjaG8gImNvbmZpZ3VyZTo3NjAwOiBjaGVja2luZyBGSU9OQklPIHYKKyAJICAgICMgcmVzdWx0cywgYW5kIHRoZSB2ZXJzaW9uIGlzIGtlcHQgaW4gc3BlY2lhbCBmaWxlKS4KKyAJCisgCSAgICBpZiB0ZXN0IC1yIC9ldGMvLnJlbGlkIC1hICJYYHVuYW1lIC1uYCIgPSAiWGB1bmFtZSAtc2AiIDsgdGhlbgorLQkJc3lzdGVtPU1QLVJBUy1gYXdrICd7cHJpbnQgfScgL2V0Yy8ucmVsaWQnYAorKwkJc3lzdGVtPU1QLVJBUy1gYXdrICd7cHJpbnQgfScgL2V0Yy8ucmVsaWRgCisgCSAgICBmaQorIAkgICAgaWYgdGVzdCAiYHVuYW1lIC1zYCIgPSAiQUlYIiA7IHRoZW4KKyAJCXN5c3RlbT1BSVgtYHVuYW1lIC12YC5gdW5hbWUgLXJgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4X2lzc3VlX3dpdGhfb2xkX2Rpc3Ryb19nbGliYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9maXhfaXNzdWVfd2l0aF9vbGRfZGlzdHJvX2dsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjczNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4X2lzc3VlX3dpdGhfb2xkX2Rpc3Ryb19nbGliYy5wYXRjaApAQCAtMCwwICsxLDM5IEBACitVcHN0cmVhbS1TdGF0dXM6IGluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitGaXhlcyB0Y2wgdGFyZ2V0IHJlY2lwZSBidWlsZCBvbiBvbGQgZGlzdHJvcyB3aGljaCBoYXZlIGdsaWJjIG9sZGVyIHRoYW4gMi4xNAorCit8ICsgZWNobyAnTk9URTogbWFrZSAgREVTVERJUj0vc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvaW1hZ2UgaW5zdGFsbCcKK3wgTk9URTogbWFrZSAgREVTVERJUj0vc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvaW1hZ2UgaW5zdGFsbAorfCArIG1ha2UgIERFU1RESVI9L3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvd29yay94ODZfNjQtcG9reS1saW51eC90Y2wtOC41LjExLXI1L2ltYWdlIGluc3RhbGwKK3wgTWFraW5nIGRpcmVjdG9yeSAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvaW1hZ2UvdXNyL2xpYgorfCBJbnN0YWxsaW5nIG1lc3NhZ2UgY2F0YWxvZ3MKK3wgTWFraW5nIGRpcmVjdG9yeSAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvaW1hZ2UvdXNyL3NoYXJlL21hbgorfCB0Y2xzaDogL2xpYjY0L2xpYmMuc28uNjogdmVyc2lvbiBgR0xJQkNfMi4xNCcgbm90IGZvdW5kIChyZXF1aXJlZCBieSAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvdGNsOC41LjExL3VuaXgvbGlidGNsOC41LnNvKQorfCBNYWtpbmcgZGlyZWN0b3J5IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LXBva3ktbGludXgvdGNsLTguNS4xMS1yNS9pbWFnZS91c3IvYmluCit8IG1ha2U6ICoqKiBbaW5zdGFsbC1tc2dzXSBFcnJvciAxCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA0LzI2CisKK0luZGV4OiB1bml4L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL01ha2VmaWxlLmluCTIwMTMtMTEtMTAgMjM6Mzg6MDEuNzg3NDI1NjI4IC0wODAwCisrKysgdW5peC9NYWtlZmlsZS5pbgkyMDEzLTExLTEwIDIzOjM3OjU5LjgwNzQyNTU3OCAtMDgwMAorQEAgLTY4Niw3ICs2ODYsNyBAQAorICMgdGNsdGVzdCBleGVjdXRhYmxlIGdldHMgdGhlIGJ1aWxkIGRpcmVjdG9yeSBidXJuZWQgaW50byBpdHMgbGQgc2VhcmNoIHBhdGguCisgIyBUaGlzIGtlZXBzIHRjbHRlc3QgZnJvbSBwaWNraW5nIHVwIGFuIGFscmVhZHkgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIFRjbAorICMgbGlicmFyeS4KKy1TSEVMTF9FTlYgPQlATERfTElCUkFSWV9QQVRIX1ZBUkA9YHB3ZGA6JHtATERfTElCUkFSWV9QQVRIX1ZBUkB9IFwKKytTSEVMTF9FTlYgPQlATERfTElCUkFSWV9QQVRIX1ZBUkA9JHtATERfTElCUkFSWV9QQVRIX1ZBUkB9IFwKKyAJCVRDTExJQlBBVEg9IkBhYnNfYnVpbGRkaXJAL3BrZ3MiIFwKKyAJCVRDTF9MSUJSQVJZPSIke1RDTF9CVUlMRFRJTUVfTElCUkFSWX0iCisgCitAQCAtNzEyLDcgKzcxMiw3IEBACisgCSQoU0hFTExfRU5WKSAke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgJChURVNURkxBR1MpCisgCisgZ2RiLXRlc3Q6ICR7VENMVEVTVF9FWEV9CistCUBlY2hvICJzZXQgZW52IEBMRF9MSUJSQVJZX1BBVEhfVkFSQD1gcHdkYDokJHtATERfTElCUkFSWV9QQVRIX1ZBUkB9IiA+IGdkYi5ydW4KKysJQGVjaG8gInNldCBlbnYgQExEX0xJQlJBUllfUEFUSF9WQVJAPSQke0BMRF9MSUJSQVJZX1BBVEhfVkFSQH0iID4gZ2RiLnJ1bgorIAlAZWNobyAic2V0IGVudiBUQ0xfTElCUkFSWT0ke1RDTF9CVUlMRFRJTUVfTElCUkFSWX0iID4+IGdkYi5ydW4KKyAJQGVjaG8gInNldCBhcmdzICQoVE9QX0RJUikvdGVzdHMvYWxsLnRjbCAkKFRFU1RGTEFHUykgLXNpbmdsZXByb2MgMSIgPj4gZ2RiLnJ1bgorIAkkKEdEQikgJHtUQ0xURVNUX0VYRX0gLS1jb21tYW5kPWdkYi5ydW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9maXhfbm9uX25hdGl2ZV9idWlsZF9pc3N1ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9maXhfbm9uX25hdGl2ZV9idWlsZF9pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjBlYjc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeF9ub25fbmF0aXZlX2J1aWxkX2lzc3VlLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogdW5peC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuaXgub3JpZy9NYWtlZmlsZS5pbgkyMDEzLTExLTEwIDIzOjM3OjM0LjI0MzQyNDkzNCAtMDgwMAorKysrIHVuaXgvTWFrZWZpbGUuaW4JMjAxMy0xMS0xMCAyMzozNzozNC4yNDM0MjQ5MzQgLTA4MDAKK0BAIC03MDksMjMgKzcwOSwyMyBAQAorIHRlc3Q6IHRlc3QtdGNsIHRlc3QtcGFja2FnZXMKKyAKKyB0ZXN0LXRjbDogJHtUQ0xURVNUX0VYRX0KKy0JJChTSEVMTF9FTlYpIC4vJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsICQoVEVTVEZMQUdTKQorKwkkKFNIRUxMX0VOVikgJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsICQoVEVTVEZMQUdTKQorIAorIGdkYi10ZXN0OiAke1RDTFRFU1RfRVhFfQorIAlAZWNobyAic2V0IGVudiBATERfTElCUkFSWV9QQVRIX1ZBUkA9YHB3ZGA6JCR7QExEX0xJQlJBUllfUEFUSF9WQVJAfSIgPiBnZGIucnVuCisgCUBlY2hvICJzZXQgZW52IFRDTF9MSUJSQVJZPSR7VENMX0JVSUxEVElNRV9MSUJSQVJZfSIgPj4gZ2RiLnJ1bgorIAlAZWNobyAic2V0IGFyZ3MgJChUT1BfRElSKS90ZXN0cy9hbGwudGNsICQoVEVTVEZMQUdTKSAtc2luZ2xlcHJvYyAxIiA+PiBnZGIucnVuCistCSQoR0RCKSAuLyR7VENMVEVTVF9FWEV9IC0tY29tbWFuZD1nZGIucnVuCisrCSQoR0RCKSAke1RDTFRFU1RfRVhFfSAtLWNvbW1hbmQ9Z2RiLnJ1bgorIAlybSBnZGIucnVuCisgCisgIyBVc2VmdWwgdGFyZ2V0IHRvIGxhdW5jaCBhIGJ1aWx0IHRjbHRlc3Qgd2l0aCB0aGUgcHJvcGVyIHBhdGgsLi4uCisgcnVudGVzdDogJHtUQ0xURVNUX0VYRX0KKy0JJChTSEVMTF9FTlYpIC4vJHtUQ0xURVNUX0VYRX0KKysJJChTSEVMTF9FTlYpICR7VENMVEVTVF9FWEV9CisgCisgIyBVc2VmdWwgdGFyZ2V0IGZvciBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlIHdpdGggYW4gdW53cml0YWJsZSBjdXJyZW50CisgIyBkaXJlY3RvcnkuLi4KKyByby10ZXN0OiAke1RDTFRFU1RfRVhFfQorLQllY2hvICdleGVjIGNobW9kIC13IC47cGFja2FnZSByZXF1aXJlIHRjbHRlc3Q7dGNsdGVzdDo6dGVtcG9yYXJ5RGlyZWN0b3J5IC90bXA7c291cmNlIC4uL3Rlc3RzL2FsbC50Y2w7ZXhlYyBjaG1vZCArdyAuJyB8ICQoU0hFTExfRU5WKSAuLyR7VENMVEVTVF9FWEV9CisrCWVjaG8gJ2V4ZWMgY2htb2QgLXcgLjtwYWNrYWdlIHJlcXVpcmUgdGNsdGVzdDt0Y2x0ZXN0Ojp0ZW1wb3JhcnlEaXJlY3RvcnkgL3RtcDtzb3VyY2UgLi4vdGVzdHMvYWxsLnRjbDtleGVjIGNobW9kICt3IC4nIHwgJChTSEVMTF9FTlYpICR7VENMVEVTVF9FWEV9CisgCisgIyBUaGUgZm9sbG93aW5nIHRhcmdldCBnZW5lcmF0ZXMgdGhlIHNoYXJlZCBsaWJyYXJpZXMgaW4gZGx0ZXN0LyB0aGF0IGFyZSB1c2VkCisgIyBmb3IgdGVzdGluZzsgdGhleSBhcmUgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgInRjbHRlc3QiIHRhcmdldCAodmlhIHRoZQorQEAgLTc0MywyMyArNzQzLDIzIEBACisgIyBUaGlzIHRhcmdldCBjYW4gYmUgdXNlZCB0byBydW4gdGNsc2ggZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5CisgIyB2aWEgYG1ha2Ugc2hlbGwgU0NSSVBUPS90bXAvZm9vLnRjbGAKKyBzaGVsbDogJHtUQ0xfRVhFfQorLQkkKFNIRUxMX0VOVikgLi8ke1RDTF9FWEV9ICQoU0NSSVBUKQorKwkkKFNIRUxMX0VOVikgJHtUQ0xfRVhFfSAkKFNDUklQVCkKKyAKKyAjIFRoaXMgdGFyZ2V0IGNhbiBiZSB1c2VkIHRvIHJ1biB0Y2xzaCBpbnNpZGUgZWl0aGVyIGdkYiBvciBpbnNpZ2h0CisgZ2RiOiAke1RDTF9FWEV9CistCSQoU0hFTExfRU5WKSAkKEdEQikgLi8ke1RDTF9FWEV9CisrCSQoU0hFTExfRU5WKSAkKEdEQikgJHtUQ0xfRVhFfQorIAorIHZhbGdyaW5kOiAke1RDTF9FWEV9ICR7VENMVEVTVF9FWEV9CistCSQoU0hFTExfRU5WKSAkKFZBTEdSSU5EKSAkKFZBTEdSSU5EQVJHUykgLi8ke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgLXNpbmdsZXByb2MgMSAtY29uc3RyYWludHMgdmFsZ3JpbmQgJChURVNURkxBR1MpCisrCSQoU0hFTExfRU5WKSAkKFZBTEdSSU5EKSAkKFZBTEdSSU5EQVJHUykgJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsIC1zaW5nbGVwcm9jIDEgLWNvbnN0cmFpbnRzIHZhbGdyaW5kICQoVEVTVEZMQUdTKQorIAorIHZhbGdyaW5kc2hlbGw6ICR7VENMX0VYRX0KKy0JJChTSEVMTF9FTlYpICQoVkFMR1JJTkQpICQoVkFMR1JJTkRBUkdTKSAuLyR7VENMX0VYRX0gJChTQ1JJUFQpCisrCSQoU0hFTExfRU5WKSAkKFZBTEdSSU5EKSAkKFZBTEdSSU5EQVJHUykgJHtUQ0xfRVhFfSAkKFNDUklQVCkKKyAKKyB0cmFjZS1zaGVsbDogJHtUQ0xfRVhFfQorLQkkKFNIRUxMX0VOVikgJHtUUkFDRX0gJChUUkFDRV9PUFRTKSAuLyR7VENMX0VYRX0gJChTQ1JJUFQpCisrCSQoU0hFTExfRU5WKSAke1RSQUNFfSAkKFRSQUNFX09QVFMpICR7VENMX0VYRX0gJChTQ1JJUFQpCisgCisgdHJhY2UtdGVzdDogJHtUQ0xURVNUX0VYRX0KKy0JJChTSEVMTF9FTlYpICR7VFJBQ0V9ICQoVFJBQ0VfT1BUUykgLi8ke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgLXNpbmdsZXByb2MgMSAkKFRFU1RGTEFHUykKKysJJChTSEVMTF9FTlYpICR7VFJBQ0V9ICQoVFJBQ0VfT1BUUykgJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsIC1zaW5nbGVwcm9jIDEgJChURVNURkxBR1MpCisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBJbnN0YWxsYXRpb24gcnVsZXMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9ub19wYWNrYWdlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9ub19wYWNrYWdlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjZjYzQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL25vX3BhY2thZ2VzLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK3RjbCA4LjYuMCBidWlsZHMgYnkgZGVmYXVsdCBhIG51bWJlciBvZiBwYWNrYWdlcyB0aGF0IGFyZSBub3QgbmVlZGVkIGluIFlvY3RvLgorVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBtYWtlZmlsZSBzbyB0aGF0IHRoZXNlIHBhY2thZ2VzIGFyZSBub3QgYnVpbHQgYnkgZGVmYXVsdC4KKworVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBCb2dkYW4gTWFyaW5lc2N1IDxib2dkYW4uYS5tYXJpbmVzY3VAaW50ZWwuY29tPgorCitJbmRleDogdW5peC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuaXgub3JpZy9NYWtlZmlsZS5pbgkyMDEzLTExLTEwIDIzOjM4OjEyLjIzNTQyNTg5MSAtMDgwMAorKysrIHVuaXgvTWFrZWZpbGUuaW4JMjAxMy0xMS0xMCAyMzozODoxMi4yMzE0MjU4OTEgLTA4MDAKK0BAIC02MTEsNyArNjExLDcgQEAKKyAjIFN0YXJ0IG9mIHJ1bGVzCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCistYWxsOiBiaW5hcmllcyBsaWJyYXJpZXMgZG9jIHBhY2thZ2VzCisrYWxsOiBiaW5hcmllcyBsaWJyYXJpZXMgZG9jCisgCisgYmluYXJpZXM6ICR7TElCX0ZJTEV9ICQoU1RVQl9MSUJfRklMRSkgJHtUQ0xfRVhFfQorIAorQEAgLTY1MywxMiArNjUzLDEyIEBACisgI3RjbENvbmZpZy5oOiAkKFVOSVhfRElSKS90Y2xDb25maWcuaC5pbgorICMJJChTSEVMTCkgY29uZmlnLnN0YXR1cworIAorLWNsZWFuOiBjbGVhbi1wYWNrYWdlcworK2NsZWFuOgorIAlybSAtZiAqLmEgKi5vIGxpYnRjbCogY29yZSBlcnJzICp+IFwjKiBUQUdTICouRSBhLm91dCBcCisgCQllcnJvcnMgJHtUQ0xfRVhFfSAke1RDTFRFU1RfRVhFfSBsaWIuZXhwIFRjbCBARFRSQUNFX0hEUkAKKyAJY2QgZGx0ZXN0IDsgJChNQUtFKSBjbGVhbgorIAorLWRpc3RjbGVhbjogZGlzdGNsZWFuLXBhY2thZ2VzIGNsZWFuCisrZGlzdGNsZWFuOiBjbGVhbgorIAlybSAtcmYgTWFrZWZpbGUgY29uZmlnLnN0YXR1cyBjb25maWcuY2FjaGUgY29uZmlnLmxvZyB0Y2xDb25maWcuc2ggXAorIAkJdGNsQ29uZmlnLmggKi5wbGlzdCBUY2wuZnJhbWV3b3JrIHRjbC5wYworIAljZCBkbHRlc3QgOyAkKE1BS0UpIGRpc3RjbGVhbgorQEAgLTcwNiw3ICs3MDYsNyBAQAorICMgdGNsdGVzdCwgaWU6CisgIwklIG1ha2UgdGVzdCBURVNURkxBR1M9Ii12ZXJib3NlIGJwcyAtZmlsZSBmaWxlTmFtZS50ZXN0IgorIAorLXRlc3Q6IHRlc3QtdGNsIHRlc3QtcGFja2FnZXMKKyt0ZXN0OiB0ZXN0LXRjbAorIAorIHRlc3QtdGNsOiAke1RDTFRFU1RfRVhFfQorIAkkKFNIRUxMX0VOVikgJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsICQoVEVTVEZMQUdTKQorQEAgLTc3MSw3ICs3NzEsNyBAQAorIElOU1RBTExfREVWX1RBUkdFVFMgPSBpbnN0YWxsLWhlYWRlcnMKKyBJTlNUQUxMX0VYVFJBX1RBUkdFVFMgPSBARVhUUkFfSU5TVEFMTEAKKyBJTlNUQUxMX1RBUkdFVFMgPSAkKElOU1RBTExfQkFTRV9UQVJHRVRTKSAkKElOU1RBTExfRE9DX1RBUkdFVFMpICQoSU5TVEFMTF9ERVZfVEFSR0VUUykgXAorLQkJICAkKElOU1RBTExfUEFDS0FHRV9UQVJHRVRTKSAkKElOU1RBTExfRVhUUkFfVEFSR0VUUykKKysJCSAgJChJTlNUQUxMX0VYVFJBX1RBUkdFVFMpCisgCisgaW5zdGFsbDogJChJTlNUQUxMX1RBUkdFVFMpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWRiYTY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3J1bi1wdGVzdApAQCAtMCwwICsxLDggQEAKKyMhL2Jpbi9zaAorCitmb3IgaSBpbiBgbHMgdGVzdHMvKi50ZXN0IHxhd2sgLUYvICd7cHJpbnQgJDJ9J2A7IFwKKyAgICBkbyBUQ0xfTElCUkFSWT1saWJyYXJ5IC4vdGNsdGVzdCB0ZXN0cy9hbGwudGNsIC1maWxlICRpID4kaS50bXAgMj4mMTsgXAorICAgIGdyZXAgLXEgIl5GaWxlcyB3aXRoIGZhaWxpbmcgdGVzdHM6IiAkaS50bXA7IFwKKyAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4gZWNobyAiRkFJTDogJGkiOyBcCisgICAgZWxzZSBlY2hvICJQQVNTOiAkaSI7IHJtIC1mICRpLnRtcDsgZmk7IFwKK2RvbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC90Y2wtYWRkLXNvbmFtZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC90Y2wtYWRkLXNvbmFtZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjI3NmVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3RjbC1hZGQtc29uYW1lLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogdW5peC9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bml4Lm9yaWcvY29uZmlndXJlCTIwMTMtMDktMTkgMTM6MTc6MTMuMDAwMDAwMDAwIC0wNzAwCisrKysgdW5peC9jb25maWd1cmUJMjAxMy0xMS0xMSAwMDoyMDo1MS41MTk0OTAzNDIgLTA4MDAKK0BAIC03NTk5LDYgKzc1OTksOSBAQAorIAkgICAgIyBnZXQgcmlkIG9mIHRoZSB3YXJuaW5ncy4KKyAJICAgICNDRkxBR1NfT1BUSU1JWkU9IiR7Q0ZMQUdTX09QVElNSVpFfSAtRF9fTk9fU1RSSU5HX0lOTElORVMgLURfX05PX01BVEhfSU5MSU5FUyIKKyAKKysJICAgICMgZm9sbG93aW5nIGxpbmUgYWRkZWQgYnkgQ1cgZm9yIERlYmlhbiBHTlUvTGludXgKKysJICAgIFRDTF9TSExJQl9MRF9FWFRSQVM9Ii1XbCwtc29uYW1lLFwke1RDTF9MSUJfRklMRX0uMCIKKysKKyAJICAgIFNITElCX0xEPScke0NDfSAtc2hhcmVkICR7Q0ZMQUdTfSAke0xERkxBR1N9JworIAkgICAgRExfT0JKUz0idGNsTG9hZERsLm8iCisgCSAgICBETF9MSUJTPSItbGRsIgorSW5kZXg6IHVuaXgvdGNsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL3RjbC5tNAkyMDEzLTA5LTE5IDEzOjE3OjEzLjAwMDAwMDAwMCAtMDcwMAorKysrIHVuaXgvdGNsLm00CTIwMTMtMTEtMTEgMDA6MTc6MjQuMjYzNDg1MTIzIC0wODAwCitAQCAtMTQxNSw2ICsxNDE1LDkgQEAKKyAJICAgICMgZ2V0IHJpZCBvZiB0aGUgd2FybmluZ3MuCisgCSAgICAjQ0ZMQUdTX09QVElNSVpFPSIke0NGTEFHU19PUFRJTUlaRX0gLURfX05PX1NUUklOR19JTkxJTkVTIC1EX19OT19NQVRIX0lOTElORVMiCisgCisrCSAgICAjIGZvbGxvd2luZyBsaW5lIGFkZGVkIGJ5IENXIGZvciBEZWJpYW4gR05VL0xpbnV4CisrCSAgICBUQ0xfU0hMSUJfTERfRVhUUkFTPSItV2wsLXNvbmFtZSxcJHtUQ0xfTElCX0ZJTEV9LjAiCisrCisgCSAgICBTSExJQl9MRD0nJHtDQ30gLXNoYXJlZCAke0NGTEFHU30gJHtMREZMQUdTfScKKyAJICAgIERMX09CSlM9InRjbExvYWREbC5vIgorIAkgICAgRExfTElCUz0iLWxkbCIKK0luZGV4OiB1bml4L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL01ha2VmaWxlLmluCTIwMTMtMDktMTkgMTM6MTc6MTMuMDAwMDAwMDAwIC0wNzAwCisrKysgdW5peC9NYWtlZmlsZS5pbgkyMDEzLTExLTExIDAwOjIwOjMyLjQyMzQ4OTg2MSAtMDgwMAorQEAgLTc5Niw3ICs3OTYsMTAgQEAKKyAJICAgIGRvbmU7CisgCUBlY2hvICJJbnN0YWxsaW5nICQoTElCX0ZJTEUpIHRvICQoRExMX0lOU1RBTExfRElSKS8iCisgCUBASU5TVEFMTF9MSUJACistCUBjaG1vZCA1NTUgIiQoRExMX0lOU1RBTExfRElSKS8kKExJQl9GSUxFKSIKKysJbXYgIiQoRExMX0lOU1RBTExfRElSKSIvJChMSUJfRklMRSkgIiQoRExMX0lOU1RBTExfRElSKSIvJChMSUJfRklMRSkuMAorKwlsbiAtc2YgJChMSUJfRklMRSkuMCAiJChETExfSU5TVEFMTF9ESVIpIi8kKExJQl9GSUxFKQorKwlsbiAtc2YgIiQoRExMX0lOU1RBTExfRElSKSIvJChMSUJfRklMRSkuMCAuLworKwlAY2htb2QgNTU1ICIkKERMTF9JTlNUQUxMX0RJUikiLyQoTElCX0ZJTEUpLjAKKyAJQGVjaG8gIkluc3RhbGxpbmcgJHtUQ0xfRVhFfSBhcyAkKEJJTl9JTlNUQUxMX0RJUikvdGNsc2gkKFZFUlNJT04pJHtFWEVfU1VGRklYfSIKKyAJQCQoSU5TVEFMTF9QUk9HUkFNKSAke1RDTF9FWEV9ICIkKEJJTl9JTlNUQUxMX0RJUikvdGNsc2gkKFZFUlNJT04pJHtFWEVfU1VGRklYfSIKKyAJQGVjaG8gIkluc3RhbGxpbmcgdGNsQ29uZmlnLnNoIHRvICQoQ09ORklHX0lOU1RBTExfRElSKS8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvdGNsLXJlbW92ZS1oYXJkY29kZWQtaW5zdGFsbC1wYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3RjbC1yZW1vdmUtaGFyZGNvZGVkLWluc3RhbGwtcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmY3YzgwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3RjbC1yZW1vdmUtaGFyZGNvZGVkLWluc3RhbGwtcGF0aC5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIDZlZmM5ODc3NDY4MTc5NTcxMjA3M2MyYjkxZTVlOWQxNzYzMjM5YjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiU29uZy5MaSIgPFNvbmcuTGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMSBBdWcgMjAxMiAxOTowNTo1MSArMDgwMAorU3ViamVjdDogW1BBVENIXSB0Y2w6aW5zdGFsbCB0Y2wgdG8gbGliNjQgaW5zdGVhZCBvZiBsaWIgb24gNjRiaXQgdGFyZ2V0CisKK1JlbW92ZSBoYXJkY29kZWQgbGlicmFyeSBpbnN0YWxsIHBhdGguIENoYW5nZSAkKHByZWZpeCkvbGliLyB0byAke2xpYmRpcn0uCisKK1tZT0NUTyAjMjg3Nl0KKworVGhpcyBpcyBub3QgYSBidWcsIGJ1dCBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZCBpbnRvIGRpcmVjdG9yeSAuLi4vbGliLy4KK09uIDY0Yml0IHRhcmdldCB0aGF0IHNob3VsZCBiZSBsaWI2NC8uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU29uZy5MaSA8U29uZy5MaUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLQorIGNvbmZpZ3VyZSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IHVuaXgvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL2NvbmZpZ3VyZQkyMDEzLTExLTEwIDIzOjM4OjMzLjY0MzQyNjQzMCAtMDgwMAorKysrIHVuaXgvY29uZmlndXJlCTIwMTMtMTEtMTAgMjM6Mzk6NTEuMzQ3NDI4Mzg3IC0wODAwCitAQCAtMTkxMzQsNyArMTkxMzQsNyBAQAorIAorIGV2YWwgIlRDTF9MSUJfRklMRT0ke1RDTF9MSUJfRklMRX0iCisgCistVENMX0xJQlJBUlk9JyQocHJlZml4KS9saWIvdGNsJChWRVJTSU9OKScKKytUQ0xfTElCUkFSWT0nJChsaWJkaXIpL3RjbCQoVkVSU0lPTiknCisgUFJJVkFURV9JTkNMVURFX0RJUj0nJChpbmNsdWRlZGlyKScKKyBIVE1MX0RJUj0nJChESVNURElSKS9odG1sJworIAorSW5kZXg6IHVuaXgvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL2NvbmZpZ3VyZS5pbgkyMDEzLTExLTEwIDIzOjIwOjUwLjAwMDAwMDAwMCAtMDgwMAorKysrIHVuaXgvY29uZmlndXJlLmluCTIwMTMtMTEtMTAgMjM6Mzk6NDEuMTk5NDI4MTMxIC0wODAwCitAQCAtNzkwLDcgKzc5MCw3IEBACisgCisgZXZhbCAiVENMX0xJQl9GSUxFPSR7VENMX0xJQl9GSUxFfSIKKyAKKy1UQ0xfTElCUkFSWT0nJChwcmVmaXgpL2xpYi90Y2wkKFZFUlNJT04pJworK1RDTF9MSUJSQVJZPSckKGxpYmRpcikvdGNsJChWRVJTSU9OKScKKyBQUklWQVRFX0lOQ0xVREVfRElSPSckKGluY2x1ZGVkaXIpJworIEhUTUxfRElSPSckKERJU1RESVIpL2h0bWwnCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2xfOC42LjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2xfOC42LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU5MmIzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbF84LjYuNC5iYgpAQCAtMCwwICsxLDEwMiBAQAorU1VNTUFSWSA9ICJUb29sIENvbW1hbmQgTGFuZ3VhZ2UiCitIT01FUEFHRSA9ICJodHRwOi8vdGNsLnNvdXJjZWZvcmdlLm5ldCIKK1NFQ1RJT04gPSAiZGV2ZWwvdGNsdGsiCisKKyMgaHR0cDovL3d3dy50Y2wudGsvc29mdHdhcmUvdGNsdGsvbGljZW5zZS5odG1sCitMSUNFTlNFID0gInRjbCAmIEJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyAgICBmaWxlOi8vLi4vY29tcGF0L2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyAgICBmaWxlOi8vLi4vbGlicmFyeS9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCisgICAgZmlsZTovLy4uL21hY29zeC9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCisgICAgZmlsZTovLy4uL3Rlc3RzL2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyAgICBmaWxlOi8vLi4vd2luL2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyIKKworREVQRU5EUyA9ICJ0Y2wtbmF0aXZlIHpsaWIiCisKK0JBU0VfU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vdGNsLyR7QlBOfSR7UFZ9LXNyYy50YXIuZ3ogXAorICAgICAgICAgICAgICAgIGZpbGU6Ly90Y2wtYWRkLXNvbmFtZS5wYXRjaCIKK1NSQ19VUkkgPSAiJHtCQVNFX1NSQ19VUkl9IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9ub25fbmF0aXZlX2J1aWxkX2lzc3VlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9pc3N1ZV93aXRoX29sZF9kaXN0cm9fZ2xpYmMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9fcGFja2FnZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGNsLXJlbW92ZS1oYXJkY29kZWQtaW5zdGFsbC1wYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FsdGVyLWluY2x1ZGVkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkN2NiYjkxZjFkZWQxOTE5MzcwYTMwZWRkMTUzNDMwNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZTZlZDk0Yzk4MWMxZDBjNWY1ZmVmYjgxMTJkMDZjNmJmNGQwNTBhNzMyN2U5NWU3MWQ0MTdjNDE2NTE5YzhkIgorCitTUkNfVVJJX2NsYXNzLW5hdGl2ZSA9ICIke0JBU0VfU1JDX1VSSX0iCisKK1MgPSAiJHtXT1JLRElSfS8ke0JQTn0ke1BWfS91bml4IgorCitWRVIgPSAiJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0IGJpbmNvbmZpZworCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ6bGliLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXRocmVhZHMgLS1kaXNhYmxlLXJwYXRoIC0tbGliZGlyPSR7bGliZGlyfSIKKworZG9fY29uZmlndXJlKCkgeworCWNkICR7U30KKwlnbnUtY29uZmlnaXplCisJY2QgJHtCfQorCW9lX3J1bmNvbmYKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCWVjaG8gPiAke1N9Ly4uL2NvbXBhdC9maXhzdHJ0b2QuYworfQorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsIGluc3RhbGwtcHJpdmF0ZS1oZWFkZXJzCisJbG4gLXNmIC4vdGNsc2gke1ZFUn0gJHtEfSR7YmluZGlyfS90Y2xzaAorCWxuIC1zZiB0Y2xzaDguNiAke0R9JHtiaW5kaXJ9L3RjbHNoJHtWRVJ9CisJc2VkIC1pICJzKy1MJHtCfSstTCR7U1RBR0lOR19MSUJESVJ9K2ciIHRjbENvbmZpZy5zaAorCXNlZCAtaSAicyske1dPUktESVJ9KyR7U1RBR0lOR19JTkNESVJ9K2ciIHRjbENvbmZpZy5zaAorCXNlZCAtaSAicywtTCR7bGliZGlyfSwtTD0ke2xpYmRpcn0sZyIgdGNsQ29uZmlnLnNoCisJc2VkIC1pICJzLC1JJHtpbmNsdWRlZGlyfSwtST0ke2luY2x1ZGVkaXJ9LGciIHRjbENvbmZpZy5zaAorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30KKwlpbnN0YWxsIC1tIDA3NTUgdGNsQ29uZmlnLnNoICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9CisJaW5zdGFsbCAtbSAwNzU1IHRjbENvbmZpZy5zaCAke0R9JHtsaWJkaXJ9CisJY2QgLi4KKwlmb3IgZGlyIGluIGNvbXBhdCBnZW5lcmljIHVuaXg7IGRvCisJCWluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0vJHtCUE59JHtWRVJ9LyRkaXIKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7U30vLi4vJGRpci8qLmggJHtEfSR7aW5jbHVkZWRpcn0vJHtCUE59JHtWRVJ9LyRkaXIvCisJZG9uZQorfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gInRjbF9zeXNyb290X3ByZXByb2Nlc3MiCit0Y2xfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlzeXNyb290X3N0YWdlX2RpciAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9Cit9CisKK1BBQ0tBR0VTID0rICJ0Y2wtbGliIgorRklMRVNfdGNsLWxpYiA9ICIke2xpYmRpcn0vbGlidGNsOC42LnNvLioiCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3RjbCR7VkVSfSAke2xpYmRpcn0vdGNsOC42ICR7bGliZGlyfS90Y2w4IgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vdGNsQ29uZmlnLnNoICR7bGliZGlyfS90Y2xvb0NvbmZpZy5zaCIKKworIyBpc24ndCBnZXR0aW5nIHBpY2tlZCB1cCBieSBzaGxpYnMgY29kZQorUkRFUEVORFNfJHtQTn0gKz0gInRjbC1saWIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImxpYmdjYyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSB0Y2x0ZXN0Cit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJY3AgJHtCfS90Y2x0ZXN0ICR7RH0ke1BURVNUX1BBVEh9CisJY3AgLXIgJHtTfS8uLi9saWJyYXJ5ICR7RH0ke1BURVNUX1BBVEh9CisJY3AgLXIgJHtTfS8uLi90ZXN0cyAke0R9JHtQVEVTVF9QQVRIfQorfQorCisjIEZpeCBzb21lIHBhdGhzIHRoYXQgbWlnaHQgYmUgdXNlZCBieSBUY2wgZXh0ZW5zaW9ucworQklOQ09ORklHX0dMT0IgPSAiKkNvbmZpZy5zaCIKKworIyBGaXggdGhlIHBhdGggaW4gc3N0YXRlCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiKkNvbmZpZy5zaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2FsdGVybmF0ZV9ycGNfcG9ydHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9hbHRlcm5hdGVfcnBjX3BvcnRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNzQ1ZDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9hbHRlcm5hdGVfcnBjX3BvcnRzLnBhdGNoCkBAIC0wLDAgKzEsMTU4IEBACitBZGQgYWJpbGl0eSB0byBzcGVjaWZ5IHJjcCBwb3J0IG51bWJlcnMKKworSW4gb3JkZXIgdG8gcnVuIG1vcmUgdGhhbiBvbmUgdW5mcyBzZXJ2ZXIgb24gYSBob3N0IHN5c3RlbSwgeW91IG11c3QKK2JlIGFibGUgdG8gc3BlY2lmeSBhbHRlcm5hdGUgcnBjIHBvcnQgbnVtYmVycy4KKworSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3VuZnMzL2J1Z3MvNS8KKworLS0tCisgZGFlbW9uLmMgfCAgIDQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCisgbW91bnQuYyAgfCAgICA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQorCistLS0gYS9kYWVtb24uYworKysrIGIvZGFlbW9uLmMKK0BAIC03OCw2ICs3OCw4IEBAIGludCBvcHRfdGVzdGNvbmZpZyA9IEZBTFNFOworIHN0cnVjdCBpbl9hZGRyIG9wdF9iaW5kX2FkZHI7CisgaW50IG9wdF9yZWFkYWJsZV9leGVjdXRhYmxlcyA9IEZBTFNFOworIGNoYXIgKm9wdF9waWRfZmlsZSA9IE5VTEw7CisraW50IG5mc19wcm9nID0gTkZTM19QUk9HUkFNOworK2ludCBtb3VudF9wcm9nID0gTU9VTlRQUk9HOworIAorIC8qIFJlZ2lzdGVyIHdpdGggcG9ydG1hcHBlcj8gKi8KKyBpbnQgb3B0X3BvcnRtYXBwZXIgPSBUUlVFOworQEAgLTIwNiw3ICsyMDgsNyBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjaGFyCisgeworIAorICAgICBpbnQgb3B0ID0gMDsKKy0gICAgY2hhciAqb3B0c3RyaW5nID0gImJjQzpkZTpobDptOm46cHJzdFR1d2k6IjsKKysgICAgY2hhciAqb3B0c3RyaW5nID0gImJjQzpkZTpobDptOm46cHJzdFR1d2k6eDp5OiI7CisgCisgICAgIHdoaWxlIChvcHQgIT0gLTEpIHsKKyAJb3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIG9wdHN0cmluZyk7CitAQCAtMjYxLDggKzI2MywyNCBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjaGFyCisgCQlwcmludGYKKyAJCSAgICAoIlx0LXIgICAgICAgICAgcmVwb3J0IHVucmVhZGFibGUgZXhlY3V0YWJsZXMgYXMgcmVhZGFibGVcbiIpOworIAkJcHJpbnRmKCJcdC1UICAgICAgICAgIHRlc3QgZXhwb3J0cyBmaWxlIGFuZCBleGl0XG4iKTsKKysJCXByaW50ZigiXHQteCA8cG9ydD4gICBhbHRlcm5hdGUgTkZTIFJQQyBwb3J0XG4iKTsKKysJCXByaW50ZigiXHQteSA8cG9ydD4gICBhbHRlcm5hdGUgTU9VTlREIFJQQyBwb3J0XG4iKTsKKyAJCWV4aXQoMCk7CisgCQlicmVhazsKKysJICAgIGNhc2UgJ3gnOgorKwkJbmZzX3Byb2cgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAxMCk7CisrCQlpZiAobmZzX3Byb2cgPT0gMCkgeworKwkJICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBORlMgUlBDIHBvcnRcbiIpOworKwkJICAgIGV4aXQoMSk7CisrCQl9CisrCQlicmVhazsKKysJICAgIGNhc2UgJ3knOgorKwkJbW91bnRfcHJvZyA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDEwKTsKKysJCWlmIChtb3VudF9wcm9nID09IDApIHsKKysJCSAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgTU9VTlREIFJQQyBwb3J0XG4iKTsKKysJCSAgICBleGl0KDEpOworKwkJfQorKwkJYnJlYWs7CisgCSAgICBjYXNlICdsJzoKKyAJCW9wdF9iaW5kX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKG9wdGFyZyk7CisgCQlpZiAob3B0X2JpbmRfYWRkci5zX2FkZHIgPT0gKHVuc2lnbmVkKSAtMSkgeworQEAgLTM0NywxMiArMzY1LDEyIEBAIHZvaWQgZGFlbW9uX2V4aXQoaW50IGVycm9yKQorICNlbmRpZgkJCQkgICAgICAgLyogV0lOMzIgKi8KKyAKKyAgICAgaWYgKG9wdF9wb3J0bWFwcGVyKSB7CistCXN2Y191bnJlZ2lzdGVyKE1PVU5UUFJPRywgTU9VTlRWRVJTMSk7CistCXN2Y191bnJlZ2lzdGVyKE1PVU5UUFJPRywgTU9VTlRWRVJTMyk7CisrCXN2Y191bnJlZ2lzdGVyKG1vdW50X3Byb2csIE1PVU5UVkVSUzEpOworKwlzdmNfdW5yZWdpc3Rlcihtb3VudF9wcm9nLCBNT1VOVFZFUlMzKTsKKyAgICAgfQorIAorICAgICBpZiAob3B0X3BvcnRtYXBwZXIpIHsKKy0Jc3ZjX3VucmVnaXN0ZXIoTkZTM19QUk9HUkFNLCBORlNfVjMpOworKwlzdmNfdW5yZWdpc3RlcihuZnNfcHJvZywgTkZTX1YzKTsKKyAgICAgfQorIAorICAgICBpZiAoZXJyb3IgPT0gU0lHU0VHVikKK0BAIC02NTcsMTMgKzY3NSwxMyBAQCBzdGF0aWMgdm9pZCBtb3VudHByb2dfMyhzdHJ1Y3Qgc3ZjX3JlcSAqCisgc3RhdGljIHZvaWQgcmVnaXN0ZXJfbmZzX3NlcnZpY2UoU1ZDWFBSVCAqIHVkcHRyYW5zcCwgU1ZDWFBSVCAqIHRjcHRyYW5zcCkKKyB7CisgICAgIGlmIChvcHRfcG9ydG1hcHBlcikgeworLQlwbWFwX3Vuc2V0KE5GUzNfUFJPR1JBTSwgTkZTX1YzKTsKKysJcG1hcF91bnNldChuZnNfcHJvZywgTkZTX1YzKTsKKyAgICAgfQorIAorICAgICBpZiAodWRwdHJhbnNwICE9IE5VTEwpIHsKKyAJLyogUmVnaXN0ZXIgTkZTIHNlcnZpY2UgZm9yIFVEUCAqLworIAlpZiAoIXN2Y19yZWdpc3RlcgorLQkgICAgKHVkcHRyYW5zcCwgTkZTM19QUk9HUkFNLCBORlNfVjMsIG5mczNfcHJvZ3JhbV8zLAorKwkgICAgKHVkcHRyYW5zcCwgbmZzX3Byb2csIE5GU19WMywgbmZzM19wcm9ncmFtXzMsCisgCSAgICAgb3B0X3BvcnRtYXBwZXIgPyBJUFBST1RPX1VEUCA6IDApKSB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLAorIAkJICAgICJ1bmFibGUgdG8gcmVnaXN0ZXIgKE5GUzNfUFJPR1JBTSwgTkZTX1YzLCB1ZHApLiIpOworQEAgLTY3NCw3ICs2OTIsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3Rlcl9uZnNfc2VydmljZShTVkNYUFJUCisgICAgIGlmICh0Y3B0cmFuc3AgIT0gTlVMTCkgeworIAkvKiBSZWdpc3RlciBORlMgc2VydmljZSBmb3IgVENQICovCisgCWlmICghc3ZjX3JlZ2lzdGVyCistCSAgICAodGNwdHJhbnNwLCBORlMzX1BST0dSQU0sIE5GU19WMywgbmZzM19wcm9ncmFtXzMsCisrCSAgICAodGNwdHJhbnNwLCBuZnNfcHJvZywgTkZTX1YzLCBuZnMzX3Byb2dyYW1fMywKKyAJICAgICBvcHRfcG9ydG1hcHBlciA/IElQUFJPVE9fVENQIDogMCkpIHsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsCisgCQkgICAgInVuYWJsZSB0byByZWdpc3RlciAoTkZTM19QUk9HUkFNLCBORlNfVjMsIHRjcCkuIik7CitAQCAtNjg2LDE0ICs3MDQsMTQgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJfbmZzX3NlcnZpY2UoU1ZDWFBSVAorIHN0YXRpYyB2b2lkIHJlZ2lzdGVyX21vdW50X3NlcnZpY2UoU1ZDWFBSVCAqIHVkcHRyYW5zcCwgU1ZDWFBSVCAqIHRjcHRyYW5zcCkKKyB7CisgICAgIGlmIChvcHRfcG9ydG1hcHBlcikgeworLQlwbWFwX3Vuc2V0KE1PVU5UUFJPRywgTU9VTlRWRVJTMSk7CistCXBtYXBfdW5zZXQoTU9VTlRQUk9HLCBNT1VOVFZFUlMzKTsKKysJcG1hcF91bnNldChtb3VudF9wcm9nLCBNT1VOVFZFUlMxKTsKKysJcG1hcF91bnNldChtb3VudF9wcm9nLCBNT1VOVFZFUlMzKTsKKyAgICAgfQorIAorICAgICBpZiAodWRwdHJhbnNwICE9IE5VTEwpIHsKKyAJLyogUmVnaXN0ZXIgTU9VTlQgc2VydmljZSAodjEpIGZvciBVRFAgKi8KKyAJaWYgKCFzdmNfcmVnaXN0ZXIKKy0JICAgICh1ZHB0cmFuc3AsIE1PVU5UUFJPRywgTU9VTlRWRVJTMSwgbW91bnRwcm9nXzMsCisrCSAgICAodWRwdHJhbnNwLCBtb3VudF9wcm9nLCBNT1VOVFZFUlMxLCBtb3VudHByb2dfMywKKyAJICAgICBvcHRfcG9ydG1hcHBlciA/IElQUFJPVE9fVURQIDogMCkpIHsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsCisgCQkgICAgInVuYWJsZSB0byByZWdpc3RlciAoTU9VTlRQUk9HLCBNT1VOVFZFUlMxLCB1ZHApLiIpOworQEAgLTcwMiw3ICs3MjAsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3Rlcl9tb3VudF9zZXJ2aWNlKFNWQ1hQCisgCisgCS8qIFJlZ2lzdGVyIE1PVU5UIHNlcnZpY2UgKHYzKSBmb3IgVURQICovCisgCWlmICghc3ZjX3JlZ2lzdGVyCistCSAgICAodWRwdHJhbnNwLCBNT1VOVFBST0csIE1PVU5UVkVSUzMsIG1vdW50cHJvZ18zLAorKwkgICAgKHVkcHRyYW5zcCwgbW91bnRfcHJvZywgTU9VTlRWRVJTMywgbW91bnRwcm9nXzMsCisgCSAgICAgb3B0X3BvcnRtYXBwZXIgPyBJUFBST1RPX1VEUCA6IDApKSB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLAorIAkJICAgICJ1bmFibGUgdG8gcmVnaXN0ZXIgKE1PVU5UUFJPRywgTU9VTlRWRVJTMywgdWRwKS4iKTsKK0BAIC03MTMsNyArNzMxLDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJfbW91bnRfc2VydmljZShTVkNYUAorICAgICBpZiAodGNwdHJhbnNwICE9IE5VTEwpIHsKKyAJLyogUmVnaXN0ZXIgTU9VTlQgc2VydmljZSAodjEpIGZvciBUQ1AgKi8KKyAJaWYgKCFzdmNfcmVnaXN0ZXIKKy0JICAgICh0Y3B0cmFuc3AsIE1PVU5UUFJPRywgTU9VTlRWRVJTMSwgbW91bnRwcm9nXzMsCisrCSAgICAodGNwdHJhbnNwLCBtb3VudF9wcm9nLCBNT1VOVFZFUlMxLCBtb3VudHByb2dfMywKKyAJICAgICBvcHRfcG9ydG1hcHBlciA/IElQUFJPVE9fVENQIDogMCkpIHsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsCisgCQkgICAgInVuYWJsZSB0byByZWdpc3RlciAoTU9VTlRQUk9HLCBNT1VOVFZFUlMxLCB0Y3ApLiIpOworQEAgLTcyMiw3ICs3NDAsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3Rlcl9tb3VudF9zZXJ2aWNlKFNWQ1hQCisgCisgCS8qIFJlZ2lzdGVyIE1PVU5UIHNlcnZpY2UgKHYzKSBmb3IgVENQICovCisgCWlmICghc3ZjX3JlZ2lzdGVyCistCSAgICAodGNwdHJhbnNwLCBNT1VOVFBST0csIE1PVU5UVkVSUzMsIG1vdW50cHJvZ18zLAorKwkgICAgKHRjcHRyYW5zcCwgbW91bnRfcHJvZywgTU9VTlRWRVJTMywgbW91bnRwcm9nXzMsCisgCSAgICAgb3B0X3BvcnRtYXBwZXIgPyBJUFBST1RPX1RDUCA6IDApKSB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLAorIAkJICAgICJ1bmFibGUgdG8gcmVnaXN0ZXIgKE1PVU5UUFJPRywgTU9VTlRWRVJTMywgdGNwKS4iKTsKKy0tLSBhL21vdW50LmMKKysrKyBiL21vdW50LmMKK0BAIC0xNTUsOCArMTU1LDggQEAgbW91bnRyZXMzICptb3VudHByb2NfbW50XzNfc3ZjKGRpcnBhdGggKgorICAgICAvKiBlcnJvciBvdXQgaWYgbm90IHZlcnNpb24gMyAqLworICAgICBpZiAocnFzdHAtPnJxX3ZlcnMgIT0gMykgeworIAlsb2dtc2coTE9HX0lORk8sCistCSAgICAgICAiJXMgYXR0ZW1wdGVkIG1vdW50IHdpdGggdW5zdXBwb3J0ZWQgcHJvdG9jb2wgdmVyc2lvbiIsCistCSAgICAgICBpbmV0X250b2EoZ2V0X3JlbW90ZShycXN0cCkpKTsKKysJICAgICAgICIlcyBhdHRlbXB0ZWQgbW91bnQgd2l0aCB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uOiAlaSIsCisrCSAgICAgICBpbmV0X250b2EoZ2V0X3JlbW90ZShycXN0cCkpLCBycXN0cC0+cnFfdmVycyk7CisgCXJlc3VsdC5maHNfc3RhdHVzID0gTU5UM0VSUl9JTlZBTDsKKyAJcmV0dXJuICZyZXN1bHQ7CisgICAgIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2ZpeF9jb21waWxlX3dhcm5pbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9maXhfY29tcGlsZV93YXJuaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZGEwMTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9maXhfY29tcGlsZV93YXJuaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK2RhZW1vbi5jOiBDaGVjayBleGl0IGNvZGUgb2YgY2hkaXIoKQorCitTdG9wIHRoZSBjb21waWxlIHdhcm5pbmcgYW5kIGZpeCB0aGUgY29kZSB0byBhY3Qgb24gYSBjaGRpcigpIGZhaWx1cmUuCitJZiB0aGlzIG9uZSBkb2VzIGZhaWwgc29tZXRoaW5nIGlzIHZlcnksIHZlcnkgd3JvbmcuCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC91bmZzMy9idWdzLzUvCisKKy0tLQorIGRhZW1vbi5jIHwgICAgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL2RhZW1vbi5jCisrKysgYi9kYWVtb24uYworQEAgLTk2NCw3ICs5NjQsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCXNpZ2FjdGlvbihTSUdBTFJNLCAmYWN0LCBOVUxMKTsKKyAKKyAJLyogZG9uJ3QgbWFrZSBkaXJlY3Rvcnkgd2Ugc3RhcnRlZCBpbiBidXN5ICovCistCWNoZGlyKCIvIik7CisrCWlmKGNoZGlyKCIvIikgPCAwKQorKwkgICAgZGFlbW9uX2V4aXQoMCk7CisgCisgCS8qIGRldGFjaCBmcm9tIHRlcm1pbmFsICovCisgCWlmIChvcHRfZGV0YWNoKSB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9maXhfcGlkX3JhY2VfcGFyZW50X3dyaXRlc19jaGlsZF9waWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9maXhfcGlkX3JhY2VfcGFyZW50X3dyaXRlc19jaGlsZF9waWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiMTg3ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2ZpeF9waWRfcmFjZV9wYXJlbnRfd3JpdGVzX2NoaWxkX3BpZC5wYXRjaApAQCAtMCwwICsxLDYxIEBACitkYWVtb24uYzogRml4IHJhY2Ugd2luZG93IGZvciB3cml0aW5nIG9mIHRoZSBwaWQgZmlsZQorCitUaGUgcGFyZW50IHByb2Nlc3Mgc2hvdWxkIHdyaXRlIHRoZSBwaWQgZmlsZSBzdWNoIHRoYXQgdGhlIHBpZCBmaWxlCit3aWxsIGNhbiBiZSBjaGVja2VkIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBleGl0IG9mIHRoZSBmb3JrIGZyb20gdGhlCitwYXJlbnQuCisKK1RoaXMgYWxsb3dzIGV4dGVybmFsIG1vbml0b3JpbmcgYXBwbGljYXRpb25zIHRvIHdhdGNoIHRoZSBkYWVtb24KK3dpdGhvdXQgaGF2aW5nIHRvIGFkZCBzbGVlcCBjYWxscyB0byB3YWl0IGZvciB0aGUgcGlkIGZpbGUgYmUgd3JpdHRlbgorb24gYSBidXN5IHN5c3RlbS4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3VuZnMzL2J1Z3MvNS8KKworLS0tCisgZGFlbW9uLmMgfCAgIDEyICsrKysrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RhZW1vbi5jCisrKysgYi9kYWVtb24uYworQEAgLTE1Myw3ICsxNTMsNyBAQCBpbnQgZ2V0X3NvY2tldF90eXBlKHN0cnVjdCBzdmNfcmVxICpycXN0CisgLyoKKyAgKiB3cml0ZSBjdXJyZW50IHBpZCB0byBhIGZpbGUKKyAgKi8KKy1zdGF0aWMgdm9pZCBjcmVhdGVfcGlkX2ZpbGUodm9pZCkKKytzdGF0aWMgdm9pZCBjcmVhdGVfcGlkX2ZpbGUoaW50IHBpZCkKKyB7CisgICAgIGNoYXIgYnVmWzE2XTsKKyAgICAgaW50IGZkLCByZXMsIGxlbjsKK0BAIC0xNzUsNyArMTc1LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlX3BpZF9maWxlKHZvaWQpCisgICAgIH0KKyAjZW5kaWYKKyAKKy0gICAgc3ByaW50ZihidWYsICIlaVxuIiwgYmFja2VuZF9nZXRwaWQoKSk7CisrICAgIHNwcmludGYoYnVmLCAiJWlcbiIsIHBpZCk7CisgICAgIGxlbiA9IHN0cmxlbihidWYpOworIAorICAgICByZXMgPSBiYWNrZW5kX3B3cml0ZShmZCwgYnVmLCBsZW4sIDApOworQEAgLTk3MCw2ICs5NzAsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkgICAgZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3QgZm9yayBpbnRvIGJhY2tncm91bmRcbiIpOworIAkgICAgZGFlbW9uX2V4aXQoMCk7CisgCX0KKysJaWYgKHBpZCkKKysJICAgIGNyZWF0ZV9waWRfZmlsZShwaWQpOworKyAgICB9IGVsc2UgeworKwljcmVhdGVfcGlkX2ZpbGUoYmFja2VuZF9nZXRwaWQoKSk7CisgICAgIH0KKyAjZW5kaWYJCQkJICAgICAgIC8qIFdJTjMyICovCisgCitAQCAtMTAwNiw4ICsxMDEwLDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJLyogbm8gdW1hc2sgdG8gbm90IHNjcmV3IHVwIGNyZWF0ZSBtb2RlcyAqLworIAl1bWFzaygwKTsKKyAKKysjaWZkZWYgV0lOMzIKKyAJLyogY3JlYXRlIHBpZCBmaWxlIGlmIHdhbnRlZCAqLworLQljcmVhdGVfcGlkX2ZpbGUoKTsKKysJY3JlYXRlX3BpZF9maWxlKGJhY2tlbmRfZ2V0cGlkKCkpOworKyNlbmRpZgorIAorIAkvKiBpbml0aWFsaXplIGludGVybmFsIHN0dWZmICovCisgCWZoX2NhY2hlX2luaXQoKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2ZpeF93YXJuaW5ncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2ZpeF93YXJuaW5ncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGE4NjU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvZml4X3dhcm5pbmdzLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK2V4cG9ydHMuKjogZml4IHdhcm5pbmdzLgorCitGaXggdGhlc2Ugd2FybmluZ3M6CitsZXgueXkuYzoxMjA3OiB3YXJuaW5nOiAneXl1bnB1dCcgZGVmaW5lZCBidXQgbm90IHVzZWQKK2xleC55eS5jOjEyNDg6IHdhcm5pbmc6ICdpbnB1dCcgZGVmaW5lZCBidXQgbm90IHVzZWQKK2V4cG9ydHMueTogSW4gZnVuY3Rpb24gJ3NldF9ob3N0bmFtZSc6CitleHBvcnRzLnk6MzM0OiB3YXJuaW5nOiBsYXJnZSBpbnRlZ2VyIGltcGxpY2l0bHkgdHJ1bmNhdGVkIHRvIHVuc2lnbmVkIHR5cGUKK2V4cG9ydHMueTogSW4gZnVuY3Rpb24gJ3NldF9pcGFkZHInOgorZXhwb3J0cy55OjM1MDogd2FybmluZzogbGFyZ2UgaW50ZWdlciBpbXBsaWNpdGx5IHRydW5jYXRlZCB0byB1bnNpZ25lZCB0eXBlCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC91bmZzMy9idWdzLzUvCisKKy0tLQorIENvbmZpZy9leHBvcnRzLmwgfCAgICAzICsrKworIENvbmZpZy9leHBvcnRzLnkgfCAgICA2ICsrKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCistLS0gYS9Db25maWcvZXhwb3J0cy5sCisrKysgYi9Db25maWcvZXhwb3J0cy5sCitAQCAtNDgsNiArNDgsOSBAQCBORVRDT01QIFswLTldezEsMn0KKyBORVQge0lQfSIvIntORVRDT01QfQorIE9MRE5FVCB7SVB9Ii8ie0lQfQorIAorKyVvcHRpb24gbm91bnB1dAorKyVvcHRpb24gbm9pbnB1dAorKworICUlCisgCisgXntXSElURX0qXG4JCXsgLyogZWF0IGVtcHR5IGxpbmUgKi8gfQorLS0tIGEvQ29uZmlnL2V4cG9ydHMueQorKysrIGIvQ29uZmlnL2V4cG9ydHMueQorQEAgLTMzMSw3ICszMzEsOCBAQCBzdGF0aWMgdm9pZCBzZXRfaG9zdG5hbWUoY29uc3QgY2hhciAqbmFtCisgCWlmIChlbnQpIHsKKyAJCW1lbWNweSgmY3VyX2hvc3QuYWRkciwgZW50LT5oX2FkZHJfbGlzdFswXSwKKyAJCSAgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKy0JCWN1cl9ob3N0Lm1hc2suc19hZGRyID0gfjBVTDsKKysJCWN1cl9ob3N0Lm1hc2suc19hZGRyID0gMDsKKysJCWN1cl9ob3N0Lm1hc2suc19hZGRyID0gfmN1cl9ob3N0Lm1hc2suc19hZGRyOworIAl9IGVsc2UgeworIAkJbG9nbXNnKExPR19DUklULCAiY291bGQgbm90IHJlc29sdmUgaG9zdG5hbWUgJyVzJyIsIG5hbWUpOworIAkJZV9lcnJvciA9IFRSVUU7CitAQCAtMzQ3LDcgKzM0OCw4IEBAIHN0YXRpYyB2b2lkIHNldF9pcGFkZHIoY29uc3QgY2hhciAqYWRkcikKKyAJCisgCWlmICghaW5ldF9hdG9uKGFkZHIsICZjdXJfaG9zdC5hZGRyKSkKKyAJCWVfZXJyb3IgPSBUUlVFOworLQljdXJfaG9zdC5tYXNrLnNfYWRkciA9IH4wVUw7CisrCWN1cl9ob3N0Lm1hc2suc19hZGRyID0gMDsKKysJY3VyX2hvc3QubWFzay5zX2FkZHIgPSB+Y3VyX2hvc3QubWFzay5zX2FkZHI7CisgfQorIAorIC8qCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9yZWxhdGl2ZV9tYXhfc29ja2V0X3BhdGhfbGVuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvcmVsYXRpdmVfbWF4X3NvY2tldF9wYXRoX2xlbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTlkZDM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvcmVsYXRpdmVfbWF4X3NvY2tldF9wYXRoX2xlbi5wYXRjaApAQCAtMCwwICsxLDc0IEBACituZnMuYzogQWxsb3cgbWF4IHNhLnN1bl9wYXRoIGZvciBhIGxvY2FsZG9tYWluIHNvY2tldCB3aXRoIHRoZSB1c2VyIG5mcy1zZXJ2ZXIKKworVGhlcmUgaXMgYSBoYXJkIGxpbWl0IGZvciB0aGUga2VybmVsIG9mIDEwOCBjaGFyYWN0ZXJzIGZvciBhCitsb2NhbGRvbWFpbiBzb2NrZXQgbmFtZS4gIFRvIGF2b2lkIHByb2JsZW1zIHdpdGggdGhlIHVzZXIgbmZzCitzZXJ2ZXIgaXQgc2hvdWxkIG1heGltaXplIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBieSB1c2luZworYSByZWxhdGl2ZSBwYXRoIG9uIHRoZSBzZXJ2ZXIgc2lkZS4KKworUHJldmlvdXNseSB0aGUgbmZzLXNlcnZlciB1c2VkIHRoZSBhYnNvbHV0ZSBwYXRoIG5hbWUgcGFzc2VkIHRvCit0aGUgc2Euc3VucGF0aCBhcmcgZm9yIGJpbmRpbmcgdGhlIHNvY2tldCBhbmQgdGhpcyBoYXMgY2F1c2VkCitwcm9ibGVtcyBmb3IgYm90aCB0aGUgWCBzZXJ2ZXIgYW5kIFVTVCBiaW5hcmllcyB3aGljaCBtYWtlCitoZWF2eSB1c2Ugb2YgbmFtZWQgc29ja2V0cyB3aXRoIGxvbmcgbmFtZXMuCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC91bmZzMy9idWdzLzUvCisKKy0tLQorIG5mcy5jIHwgICAyOSArKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCistLS0gYS9uZnMuYworKysrIGIvbmZzLmMKK0BAIC02NzIsNiArNjcyLDcgQEAgU1lNTElOSzNyZXMgKm5mc3Byb2MzX3N5bWxpbmtfM19zdmMoU1lNTAorIH0KKyAKKyAjaWZuZGVmIFdJTjMyCisrc3RhdGljIGNoYXIgcGF0aGJ1Zl90bXBbTkZTX01BWFBBVEhMRU4gKyBORlNfTUFYTkFNTEVOICsgMV07CisgCisgLyoKKyAgKiBjcmVhdGUgVW5peCBzb2NrZXQKK0BAIC02ODAsMTcgKzY4MSw0MSBAQCBzdGF0aWMgaW50IG1rc29ja2V0KGNvbnN0IGNoYXIgKnBhdGgsIG1vCisgeworICAgICBpbnQgcmVzLCBzb2NrOworICAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4gYWRkcjsKKysgICAgdW5zaWduZWQgaW50IGxlbiA9IHN0cmxlbihwYXRoKTsKKyAKKyAgICAgc29jayA9IHNvY2tldChQRl9VTklYLCBTT0NLX1NUUkVBTSwgMCk7CistICAgIGFkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7CistICAgIHN0cmNweShhZGRyLnN1bl9wYXRoLCBwYXRoKTsKKyAgICAgcmVzID0gc29jazsKKyAgICAgaWYgKHJlcyAhPSAtMSkgeworKwlhZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOworKwlpZiAobGVuIDwgc2l6ZW9mKGFkZHIuc3VuX3BhdGgpIC0xKSB7CisrCSAgICBzdHJjcHkoYWRkci5zdW5fcGF0aCwgcGF0aCk7CisrCX0gZWxzZSB7CisrCSAgICBjaGFyICpwdHI7CisrCSAgICByZXMgPSAtMTsKKysJICAgIGlmIChsZW4gPj0gc2l6ZW9mKHBhdGgpKQorKwkJZ290byBvdXQ7CisrCSAgICBzdHJjcHkocGF0aGJ1Zl90bXAsIHBhdGgpOworKwkgICAgcHRyID0gc3RycmNocihwYXRoYnVmX3RtcCwnLycpOworKwkgICAgaWYgKHB0cikgeworKwkJKnB0ciA9ICdcMCc7CisrCQlwdHIrKzsKKysJCWlmIChjaGRpcihwYXRoYnVmX3RtcCkpCisrCQkgICAgZ290byBvdXQ7CisrCSAgICB9IGVsc2UgeworKwkJcHRyID0gcGF0aGJ1Zl90bXA7CisrCSAgICB9CisrCSAgICBpZiAoc3RybGVuKHB0cikgPj0gc2l6ZW9mKGFkZHIuc3VuX3BhdGgpKQorKwkJZ290byBvdXQ7CisrCSAgICBzdHJjcHkoYWRkci5zdW5fcGF0aCwgcHRyKTsKKysJfQorIAl1bWFzayh+bW9kZSk7CisgCXJlcyA9CisgCSAgICBiaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsCisgCQkgc2l6ZW9mKGFkZHIuc3VuX2ZhbWlseSkgKyBzdHJsZW4oYWRkci5zdW5fcGF0aCkpOworIAl1bWFzaygwKTsKKytvdXQ6CisrCWlmIChjaGRpcigiLyIpKQorKwkgICAgZnByaW50ZihzdGRlcnIsICJJbnRlcm5hbCBmYWlsdXJlIHRvIGNoZGlyIC9cbiIpOworIAljbG9zZShzb2NrKTsKKyAgICAgfQorICAgICByZXR1cm4gcmVzOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvcmVuYW1lX2ZoX2NhY2hlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvcmVuYW1lX2ZoX2NhY2hlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZDg5NTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9yZW5hbWVfZmhfY2FjaGUucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFNhdCwgMjMgRmViIDIwMTMgMDg6NDk6MDggLTA2MDAKK1N1YmplY3Q6IFtQQVRDSF0gZmhfY2FjaGU6IGZpeCBzdGF0bGUgbmZzIGhhbmRsZSBvbiByZW5hbWUgcHJvYmxlbQorCitUaGUgZm9sbG93aW5nIHRlc3QgY2FzZSBmYWlscyB3aXRoIG1vZGVybiBsaW51bngga2VybmVscyB3aGljaCBjYWNoZQordGhlIHJlbmFtZWQgaW5vZGUuCisKKyAgJSBta2RpciBhO21rZGlyIGI7bXYgYiBhLztscyAtbCBhCisgIGxzOiBhL2I6IFN0YWxlIE5GUyBmaWxlIGhhbmRsZQorCitUaGUgaXNzdWUgaXMgdGhhdCBuZnNlcnZlciB3YXMgbm90IHVwZGF0aW5nIHRoZSBmaF9jYWNoZSB3aXRoIHRoZSBuZXcKK2xvY2F0aW9uIG9mIHRoZSBpbm9kZSwgd2hlbiBpdCBtb3ZlcyBkaXJlY3Rvcmllcy4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3VuZnMzL2J1Z3MvNS8KKworLS0tCisgZmhfY2FjaGUuYyB8ICAgMTIgKysrKysrKysrKysrCisgZmhfY2FjaGUuaCB8ICAgIDEgKworIG5mcy5jICAgICAgfCAgICAyICsrCisgMyBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspCisKKy0tLSBhL2ZoX2NhY2hlLmMKKysrKyBiL2ZoX2NhY2hlLmMKK0BAIC0xOTksNiArMTk5LDE4IEBAIHN0YXRpYyBjaGFyICpmaF9jYWNoZV9sb29rdXAodWludDMyIGRldiwKKyB9CisgCisgLyoKKysgKiB1cGRhdGUgYSBmaCBpbm9kZSBjYWNoZSBmb3IgYW4gb3BlcmF0aW9uIGxpa2UgcmVuYW1lCisrICovCisrdm9pZCBmaF9jYWNoZV91cGRhdGUobmZzX2ZoMyBmaCwgY2hhciAqcGF0aCkKKyt7CisrICAgIHVuZnMzX2ZoX3QgKm9iaiA9ICh2b2lkICopIGZoLmRhdGEuZGF0YV92YWw7CisrICAgIGJhY2tlbmRfc3RhdHN0cnVjdCBidWY7CisrCisrICAgIGlmIChiYWNrZW5kX2xzdGF0KHBhdGgsICZidWYpICE9IC0xKSB7CisrCWZoX2NhY2hlX2FkZChvYmotPmRldiwgYnVmLnN0X2lubywgcGF0aCk7CisrICAgIH0KKyt9CisrLyoKKyAgKiByZXNvbHZlIGEgZmlsZW5hbWUgaW50byBhIHBhdGgKKyAgKiBjYWNoZS11c2luZyB3cmFwcGVyIGZvciBmaF9kZWNvbXBfcmF3CisgICovCistLS0gYS9maF9jYWNoZS5oCisrKysgYi9maF9jYWNoZS5oCitAQCAtMTksNSArMTksNiBAQCB1bmZzM19maF90IGZoX2NvbXAoY29uc3QgY2hhciAqcGF0aCwgc3RyCisgdW5mczNfZmhfdCAqZmhfY29tcF9wdHIoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN2Y19yZXEgKnJxc3RwLCBpbnQgbmVlZF9kaXIpOworIAorIGNoYXIgKmZoX2NhY2hlX2FkZCh1aW50MzIgZGV2LCB1aW50NjQgaW5vLCBjb25zdCBjaGFyICpwYXRoKTsKKyt2b2lkIGZoX2NhY2hlX3VwZGF0ZShuZnNfZmgzIGZoLCBjaGFyICpwYXRoKTsKKyAKKyAjZW5kaWYKKy0tLSBhL25mcy5jCisrKysgYi9uZnMuYworQEAgLTg3Niw2ICs4NzYsOCBAQCBSRU5BTUUzcmVzICpuZnNwcm9jM19yZW5hbWVfM19zdmMoUkVOQU1FCisgCSAgICByZXMgPSBiYWNrZW5kX3JlbmFtZShmcm9tX29iaiwgdG9fb2JqKTsKKyAJICAgIGlmIChyZXMgPT0gLTEpCisgCQlyZXN1bHQuc3RhdHVzID0gcmVuYW1lX2VycigpOworKwkgICAgLyogVXBkYXRlIHRoZSBmaF9jYWNoZSB3aXRoIG1vdmVkIGlub2RlIHZhbHVlICovCisrCSAgICBmaF9jYWNoZV91cGRhdGUoYXJncC0+dG8uZGlyLCB0b19vYmopOworIAl9CisgICAgIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3RjcF9ub19kZWxheS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3RjcF9ub19kZWxheS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzUyMWM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvdGNwX25vX2RlbGF5LnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK2RhZW1vbi5jOiBBZGQgb3B0aW9uIGZvciB0Y3Agbm8gZGVsYXkKKworQWxsb3cgdGhlIE5GUyB0Y3Agc29ja2V0cyB0byBjb25kaXRpb25hbGx5IHVzZSBUQ1BfTk9ERUxBWQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvdW5mczMvYnVncy81LworCistLS0KKyBkYWVtb24uYyB8ICAgIDkgKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9kYWVtb24uYworKysrIGIvZGFlbW9uLmMKK0BAIC0xNyw2ICsxNyw3IEBACisgI2lmbmRlZiBXSU4zMgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKysjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KKyAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisgI2luY2x1ZGUgPHN5c2xvZy5oPgorICNlbHNlCQkJCSAgICAgICAvKiBXSU4zMiAqLworQEAgLTc1LDYgKzc2LDcgQEAgdW5zaWduZWQgaW50IG9wdF9tb3VudF9wb3J0ID0gTkZTX1BPUlQ7CisgaW50IG9wdF9zaW5nbGV1c2VyID0gRkFMU0U7CisgaW50IG9wdF9icnV0ZV9mb3JjZSA9IEZBTFNFOworIGludCBvcHRfdGVzdGNvbmZpZyA9IEZBTFNFOworK2ludCBvcHRfdGNwX25vZGVsYXkgPSBGQUxTRTsKKyBzdHJ1Y3QgaW5fYWRkciBvcHRfYmluZF9hZGRyOworIGludCBvcHRfcmVhZGFibGVfZXhlY3V0YWJsZXMgPSBGQUxTRTsKKyBjaGFyICpvcHRfcGlkX2ZpbGUgPSBOVUxMOworQEAgLTIwOCw3ICsyMTAsNyBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjaGFyCisgeworIAorICAgICBpbnQgb3B0ID0gMDsKKy0gICAgY2hhciAqb3B0c3RyaW5nID0gImJjQzpkZTpobDptOm46cHJzdFR1d2k6eDp5OiI7CisrICAgIGNoYXIgKm9wdHN0cmluZyA9ICJiY0M6ZGU6aGw6bTpObjpwcnN0VHV3aTp4Onk6IjsKKyAKKyAgICAgd2hpbGUgKG9wdCAhPSAtMSkgeworIAlvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgb3B0c3RyaW5nKTsKK0BAIC0yOTUsNiArMjk3LDkgQEAgc3RhdGljIHZvaWQgcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY2hhcgorIAkJICAgIGV4aXQoMSk7CisgCQl9CisgCQlicmVhazsKKysJICAgIGNhc2UgJ04nOgorKwkJb3B0X3RjcF9ub2RlbGF5ID0gVFJVRTsKKysJCWJyZWFrOworIAkgICAgY2FzZSAnbic6CisgCQlvcHRfbmZzX3BvcnQgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAxMCk7CisgCQlpZiAob3B0X25mc19wb3J0ID09IDApIHsKK0BAIC04MDIsNiArODA3LDggQEAgc3RhdGljIFNWQ1hQUlQgKmNyZWF0ZV90Y3BfdHJhbnNwb3J0KHVucworIAlzaW4uc2luX2FkZHIuc19hZGRyID0gb3B0X2JpbmRfYWRkci5zX2FkZHI7CisgCXNvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIDApOworIAlzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgKGNvbnN0IGNoYXIgKikgJm9uLCBzaXplb2Yob24pKTsKKysJaWYgKG9wdF90Y3Bfbm9kZWxheSkKKysJICAgIHNldHNvY2tvcHQoc29jaywgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAmb24sIHNpemVvZihvbikpOworIAlpZiAoYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSkgeworIAkgICAgcGVycm9yKCJiaW5kIik7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGJpbmQgdG8gdGNwIHBvcnQgJWRcbiIsIHBvcnQpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvdW5mczNfcGFyYWxsZWxfYnVpbGQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy91bmZzM19wYXJhbGxlbF9idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjY0ZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvdW5mczNfcGFyYWxsZWxfYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRml4IHBhcmFsbGVsIGJ1aWxkIGRlcGVuZGVuY3kgaXNzdWUKKworSWYgYnVpbGRpbmcgd2l0aCBtYWtlIC1qMiB0aGUgbGliLmEgd2lsbCBub3QgZ2V0IGJ1aWx0IGluIHRpbWUuCisKK0phc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC91bmZzMy9idWdzLzUvCisKKy0tLQorIENvbmZpZy9NYWtlZmlsZS5pbiB8ICAgIDMgKysrCisgTWFrZWZpbGUuaW4gICAgICAgIHwgICAgMyArKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0yOSw3ICsyOSw4IEBAIERFU1RESVIgPQorIAorIFZQQVRIID0gJChzcmNkaXIpCisgCistYWxsOiBzdWJkaXJzIHVuZnNkJChFWEVFWFQpCisrYWxsOiBzdWJkaXJzCisrCSQoTUFLRSkgdW5mc2QkKEVYRUVYVCkKKyAKKyB1bmZzZCQoRVhFRVhUKTogJChPQkpTKSAkKENPTkZPQkopICQoRVhUUkFPQkopCisgCSQoQ0MpIC1vICRAICQoT0JKUykgJChDT05GT0JKKSAkKEVYVFJBT0JKKSAkKExERkxBR1MpCistLS0gYS9Db25maWcvTWFrZWZpbGUuaW4KKysrKyBiL0NvbmZpZy9NYWtlZmlsZS5pbgorQEAgLTE2LDYgKzE2LDkgQEAgbGliLmE6ICQoT0JKUykKKyAJJChBUikgY3JzIGxpYi5hICQoT0JKUykKKyAKKyB5LnRhYi5oIHkudGFiLmM6ICQoc3JjZGlyKS9leHBvcnRzLnkKKyt5LnRhYi5oOiB5LnRhYi5jCisrCisreS50YWIuYzogJChzcmNkaXIpL2V4cG9ydHMueQorIAkkKFlBQ0MpIC1kICQoc3JjZGlyKS9leHBvcnRzLnkKKyAKKyB5LnRhYi5vOiB5LnRhYi5jICQoc3JjZGlyKS9leHBvcnRzLmggJCh0b3Bfc3JjZGlyKS9uZnMuaCAkKHRvcF9zcmNkaXIpL21vdW50LmggJCh0b3Bfc3JjZGlyKS9kYWVtb24uaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczNfMC45LjIyLnI0OTAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzM18wLjkuMjIucjQ5MC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWNmNTQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczNfMC45LjIyLnI0OTAuYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJVc2Vyc3BhY2UgTkZTIHNlcnZlciB2MyBwcm90b2NvbCIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorTElDRU5TRSA9ICJ1bmZzMyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTk0NzU4ODUyOTRlMTdjMGNjMDA2NzgyMGQwNDI3OTJlIgorCisjIFNWTiBzdXBwb3J0IGZvciB1cHN0cmVhbSB2ZXJzaW9uIGNoZWNrIGlzbid0IGltcGxlbWVudGVkIHlldAorUkVDSVBFX1VQU1RSRUFNX1ZFUlNJT04gPSAiMC45LjIyLnI0OTUiCitSRUNJUEVfVVBTVFJFQU1fREFURSA9ICJGZWIgMDUsIDIwMTUiCitDSEVDS19EQVRFID0gIkp1biAxMCwgMjAxNSIKKworREVQRU5EUyA9ICJmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUgZmxleCIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayArPSAiZmxleC1uYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNjg3YWNjNGVlOTkyZTUzNjQ3MjM2NWRkOTk3MTJhNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNzRiNDNhZGE5YzZlZWExZGEyNmViNzAxMGQ3Mjg4OWM1Mjc4OTg0YmEwYjUwZGZmNGUwOTMwNTdkNGQ2NGY4IgorCitNT0RfUFYgPSAiNDkwIgorUyA9ICIke1dPUktESVJ9L3RydW5rIgorU1JDX1VSSSA9ICJzdm46Ly9zdm4uY29kZS5zZi5uZXQvcC91bmZzMy9jb2RlO21vZHVsZT10cnVuaztyZXY9JHtNT0RfUFZ9IFwKKyAgICAgICAgICAgZmlsZTovL3VuZnMzX3BhcmFsbGVsX2J1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FsdGVybmF0ZV9ycGNfcG9ydHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X3BpZF9yYWNlX3BhcmVudF93cml0ZXNfY2hpbGRfcGlkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9jb21waWxlX3dhcm5pbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVuYW1lX2ZoX2NhY2hlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbGF0aXZlX21heF9zb2NrZXRfcGF0aF9sZW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X3dhcm5pbmdzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3RjcF9ub19kZWxheS5wYXRjaCBcCisgICAgICAgICAgIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitpbmhlcml0IGF1dG90b29scworCisjIFR1cm4gb2ZmIHRoZXNlIGhlYWRlciBkZXRlY3RzIGVsc2UgdGhlIGlub2RlIHNlYXJjaAorIyB3aWxsIHdhbGsgZW50aXJlIGZpbGUgc3lzdGVtcyBhbmQgdGhpcyBpcyBhIHJlYWwgcHJvYmxlbQorIyBpZiB5b3UgaGF2ZSAyIFRCIG9mIGZpbGVzIHRvIHdhbGsgaW4geW91ciBmaWxlIHN5c3RlbQorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgPSAiYWNfY3ZfaGVhZGVyX21udGVudF9oPW5vIGFjX2N2X2hlYWRlcl9zeXNfbW50dGFiX2g9bm8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmlmZGVmL3VuaWZkZWZfMi4xMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuaWZkZWYvdW5pZmRlZl8yLjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YTAwNzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmlmZGVmL3VuaWZkZWZfMi4xMC5iYgpAQCAtMCwwICsxLDE1IEBACitTVU1NQVJZID0gIlNlbGVjdGl2ZWx5IHJlbW92ZSAjaWZkZWYgc3RhdGVtZW50cyBmcm9tIHNvdXJjZXMiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJCU0QtMi1DbGF1c2UiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3VuaWZkZWYuYztlbmRsaW5lPTMyO21kNT0yY2MyM2YwMzgyYTZmNTYwZjZhOWVjZjRlMDQwYzBkYSIKKworU1JDX1VSSSA9ICJodHRwOi8vZG90YXQuYXQvcHJvZy8ke0JQTn0vJHtCUH0udGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gImJiNWQ4OTVlNWViYmJhNWM1Y2MwYzI3NzFjZjk3ZWJlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNiOWIyYjZiMTk1MmU5YjljMWI5ZjczNGVkZWMyNzA2ODlhMzViZGJmMzNhZTY2YjUwZTE5YjJlZDBkMmRmMDYiCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBwcmVmaXg9JHtwcmVmaXh9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMwNTZmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYS5pbmMKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJDIy1saWtlIHByb2dyYW1taW5nIGxhbmd1YWdlIGZvciBlYXNpbmcgR09iamVjdCBwcm9ncmFtbWluZyIKK0RFU0NSSVBUSU9OID0gIlZhbGEgaXMgYSBDIy1saWtlIGxhbmd1YWdlIGRlZGljYXRlZCB0byBlYXNlIEdPYmplY3QgcHJvZ3JhbW1pbmcuIFwKK1ZhbGEgY29tcGlsZXMgdG8gcGxhaW4gQyBhbmQgaGFzIG5vIHJ1bnRpbWUgZW52aXJvbm1lbnQgbm9yIHBlbmFsaXRpZXMgd2hhdHNvZXZlci4iCitTRUNUSU9OID0gImRldmVsIgorREVQRU5EUyA9ICJiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUgbGlieHNsdC1uYXRpdmUgZ2xpYi0yLjAiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKK0hPTUVQQUdFID0gImh0dHA6Ly92YWxhLXByb2plY3Qub3JnIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IgorCitTSFJUX1ZFUiA9ICIke0BkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMF19LiR7QGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy4nKVsxXX0iCisKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMvJHtCUE59LyR7U0hSVF9WRVJ9LyR7QlB9LnRhci54eiIKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS8ke0JQTn0tJHtTSFJUX1ZFUn0vdmFwaSAke2xpYmRpcn0vJHtCUE59LSR7U0hSVF9WRVJ9LyIKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkYXRhZGlyfS9kZXZoZWxwIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59LSR7U0hSVF9WRVJ9Ly5kZWJ1ZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYS8wMDAxLWdpdC12ZXJzaW9uLWdlbi1kb24tdC1hcHBlbmQtZGlydHktaWYtd2UtcmUtbm90LWluLWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGEvMDAwMS1naXQtdmVyc2lvbi1nZW4tZG9uLXQtYXBwZW5kLWRpcnR5LWlmLXdlLXJlLW5vdC1pbi1nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOWRjOGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGEvMDAwMS1naXQtdmVyc2lvbi1nZW4tZG9uLXQtYXBwZW5kLWRpcnR5LWlmLXdlLXJlLW5vdC1pbi1nLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0Zyb20gMjQ2MGQ3Yjc5ZjdlOTBkY2ZlZWJkZTVlOWM1M2Q5YjY3OThhMWYzYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMjEgRmViIDIwMTIgMTc6MTI6NTAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gZ2l0LXZlcnNpb24tZ2VuOiBkb24ndCBhcHBlbmQgLWRpcnR5IGlmIHdlJ3JlIG5vdCBpbiBnaXQKKyByZXBvCisKKyogZm9yIGV4YW1wbGUgaWYgd2UgaGF2ZSBzb21lIGRpcnR5IGRpcmVjdG9yeSBhbmQgd2UgdW5wYWNrIGNsZWFuIHZhbGEgdGFyYmFsbCBpbiBpdCwgdGhlbiBpdCB3aWxsIGFwcGVuZCAtZGlydHkKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLVNwZWNpZmljXQorLS0tCisgYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbiB8ICAgMjUgKysrKysrKysrKysrKystLS0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9idWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuIGIvYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbgoraW5kZXggMGZhNmZhYS4uMWQxZjlkMiAxMDA3NTUKKy0tLSBhL2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KKysrKyBiL2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KK0BAIC0xMjYsMTggKzEyNiwyMSBAQCBmaQorIAorIHY9YGVjaG8gIiR2IiB8c2VkICdzL152Ly8nYAorIAorLSMgRG9uJ3QgZGVjbGFyZSBhIHZlcnNpb24gImRpcnR5IiBtZXJlbHkgYmVjYXVzZSBhIHRpbWUgc3RhbXAgaGFzIGNoYW5nZWQuCistZ2l0IHN0YXR1cyA+IC9kZXYvbnVsbCAyPiYxCisraWYgdGVzdCAtZCAuZ2l0CisrdGhlbgorKwkjIERvbid0IGRlY2xhcmUgYSB2ZXJzaW9uICJkaXJ0eSIgbWVyZWx5IGJlY2F1c2UgYSB0aW1lIHN0YW1wIGhhcyBjaGFuZ2VkLgorKwlnaXQgc3RhdHVzID4gL2Rldi9udWxsIDI+JjEKKyAKKy1kaXJ0eT1gc2ggLWMgJ2dpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQnIDI+L2Rldi9udWxsYCB8fCBkaXJ0eT0KKy1jYXNlICIkZGlydHkiIGluCistICAgICcnKSA7OworLSAgICAqKSAjIEFwcGVuZCB0aGUgc3VmZml4IG9ubHkgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHkuCistCWNhc2UgJHYgaW4KKy0JICAqLWRpcnR5KSA7OworLQkgICopIHY9IiR2LWRpcnR5IiA7OworLQllc2FjIDs7CistZXNhYworKwlkaXJ0eT1gc2ggLWMgJ2dpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQnIDI+L2Rldi9udWxsYCB8fCBkaXJ0eT0KKysJY2FzZSAiJGRpcnR5IiBpbgorKwkgICAgJycpIDs7CisrCSAgICAqKSAjIEFwcGVuZCB0aGUgc3VmZml4IG9ubHkgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHkuCisrCQljYXNlICR2IGluCisrCQkgICotZGlydHkpIDs7CisrCQkgICopIHY9IiR2LWRpcnR5IiA7OworKwkJZXNhYyA7OworKwllc2FjCisrZmkKKyAKKyAjIE9taXQgdGhlIHRyYWlsaW5nIG5ld2xpbmUsIHNvIHRoYXQgbTRfZXN5c2NtZCBjYW4gdXNlIHRoZSByZXN1bHQgZGlyZWN0bHkuCisgZWNobyAiJHYiIHwgdHIgLWQgJ1wwMTInCistLSAKKzEuNy44LjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhXzAuMjguMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYV8wLjI4LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIwOTA2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYV8wLjI4LjAuYmIKQEAgLTAsMCArMSw2IEBACityZXF1aXJlICR7QlBOfS5pbmMKKworU1JDX1VSSSArPSAiIGZpbGU6Ly8wMDAxLWdpdC12ZXJzaW9uLWdlbi1kb24tdC1hcHBlbmQtZGlydHktaWYtd2UtcmUtbm90LWluLWcucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ZDRjZWFjMzQ1MWEwZDU0OTdlN2JlMzhlNWU0YzJhZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZDllM2JkM2Y4MjE0NTY2NDg3NWY3YzI5YjJmNTQ0YmE5MmQyODE0Zjc1NDEyOTQ4Zjc3NGMwNzI3ZmM5NzdmIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvMDAwMS12YWxncmluZC1FbmFibGUtcnRfc2lncGVuZGluZy1zeXNjYWxsLW9uLXBwYzY0LWxpbnV4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvMDAwMS12YWxncmluZC1FbmFibGUtcnRfc2lncGVuZGluZy1zeXNjYWxsLW9uLXBwYzY0LWxpbnV4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YmI1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAxLXZhbGdyaW5kLUVuYWJsZS1ydF9zaWdwZW5kaW5nLXN5c2NhbGwtb24tcHBjNjQtbGludXgucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSAxYTgwMDZmNTYzNDJkYWU5ZjcxMDBhM2MzM2Q4MDg3MzY3NmUwNDA0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGkgWmhvdSA8bGkuemhvdUB3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyNCBBdWcgMjAxNSAwMzo1NToxOCAtMDQwMAorU3ViamVjdDogW1BBVENIXSB2YWxncmluZDogRW5hYmxlIHJ0X3NpZ3BlbmRpbmcgc3lzY2FsbCBvbiBwcGM2NCBsaW51eAorCitOZXcgUmV2aXNpb246IDE1MTMzCitFbmFibGUgcnRfc2lncGVuZGluZyBzeXNjYWxsIG9uIHBwYzY0IGxpbnV4LgorUGF0Y2ggZnJvbSBUaG9tYXMgSHV0aCA8dGh1dGhAcmVkaGF0LmNvbT4KKworR2V0IHRoZSBwYXRjaCBmcm9tIHZhbGdyaW5kIHVwc3RyZWFtOgoraHR0cDovL3ZhbGdyaW5kLjEwOTA4Lm43Lm5hYmJsZS5jb20vVmFsZ3JpbmQtcjE1MTMzLWluLXRydW5rLU5FV1MtY29yZWdyaW5kLW0tc3lzd3JhcC1zeXN3cmFwLXBwYzY0LWxpbnV4LWMtdGQ1NDU4OS5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTGkgWmhvdSA8bGkuemhvdUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29yZWdyaW5kL21fc3lzd3JhcC9zeXN3cmFwLXBwYzY0LWxpbnV4LmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb3JlZ3JpbmQvbV9zeXN3cmFwL3N5c3dyYXAtcHBjNjQtbGludXguYyBiL2NvcmVncmluZC9tX3N5c3dyYXAvc3lzd3JhcC1wcGM2NC1saW51eC5jCitpbmRleCA1OTQ2ZWUxLi44YWFhMWQ3IDEwMDY0NAorLS0tIGEvY29yZWdyaW5kL21fc3lzd3JhcC9zeXN3cmFwLXBwYzY0LWxpbnV4LmMKKysrKyBiL2NvcmVncmluZC9tX3N5c3dyYXAvc3lzd3JhcC1wcGM2NC1saW51eC5jCitAQCAtODg3LDcgKzg4Nyw3IEBAIHN0YXRpYyBTeXNjYWxsVGFibGVFbnRyeSBzeXNjYWxsX3RhYmxlW10gPSB7CisgICAgTElOWFkoX19OUl9ydF9zaWdhY3Rpb24sICAgICAgc3lzX3J0X3NpZ2FjdGlvbiksICAgICAgIC8vIDE3MworICAgIExJTlhZKF9fTlJfcnRfc2lncHJvY21hc2ssICAgIHN5c19ydF9zaWdwcm9jbWFzayksICAgICAvLyAxNzQKKyAKKy0vLyBfX19fXyhfX05SX3J0X3NpZ3BlbmRpbmcsICAgICBzeXNfcnRfc2lncGVuZGluZyksICAgICAgLy8gMTc1CisrICAgTElOWFkoX19OUl9ydF9zaWdwZW5kaW5nLCAgICAgc3lzX3J0X3NpZ3BlbmRpbmcpLCAgICAgIC8vIDE3NQorICAgIExJTlhZKF9fTlJfcnRfc2lndGltZWR3YWl0LCAgIHN5c19ydF9zaWd0aW1lZHdhaXQpLCAgICAvLyAxNzYKKyAgICBMSU5YWShfX05SX3J0X3NpZ3F1ZXVlaW5mbywgICBzeXNfcnRfc2lncXVldWVpbmZvKSwgICAgLy8gMTc3CisgICAgTElOWF8oX19OUl9ydF9zaWdzdXNwZW5kLCAgICAgc3lzX3J0X3NpZ3N1c3BlbmQpLCAgICAgIC8vIDE3OAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9BZGRlZC1zdXBwb3J0LWZvci1QUEMtaW5zdHJ1Y3Rpb25zLW1mYXRidS1tZmF0YmwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9BZGRlZC1zdXBwb3J0LWZvci1QUEMtaW5zdHJ1Y3Rpb25zLW1mYXRidS1tZmF0YmwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc3NzRmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL0FkZGVkLXN1cHBvcnQtZm9yLVBQQy1pbnN0cnVjdGlvbnMtbWZhdGJ1LW1mYXRibC5wYXRjaApAQCAtMCwwICsxLDk2IEBACitGcm9tIDBiZjRiMGFjMThkMWVhNDFiMzJhZDc4MWQyMTRiMjk1Y2ExOTk4ZjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmVlc2ggQmFuc2FsIDxhbmVlc2guYmFuc2FsQGZyZWVzY2FsZS5jb20+CitEYXRlOiBNb24sIDIxIE5vdiAyMDExIDE3OjMxOjM5ICswNTMwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZGVkIHN1cHBvcnQgZm9yIFBQQyBpbnN0cnVjdGlvbnMgbWZhdGJ1LCBtZmF0YmwuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBBbmVlc2ggQmFuc2FsIDxhbmVlc2guYmFuc2FsQGZyZWVzY2FsZS5jb20+CistLS0KK0N1cnJlbnRseSBWYWxncmluZCAzLjcuMCBkb2VzIG5vdCBoYXZlIHN1cHBvcnQgZm9yIFBQQyBpbnN0cnVjdGlvbnMgbWZhdGJ1IGFuZCBtZmF0YmwuIFdoZW4gd2UgcnVuIGEgVVNEUEFBIGFwcGxpY2F0aW9uIHdpdGggVkFMR1JJTkQsIHRoZSBmb2xsb3dpbmcgZXJyb3IgaXMgZ2l2ZW4gYnkgdmFsZ3JpbmQgOgorZGlzX3Byb2NfY3RsKHBwYykobWZzcHIsU1BSKSgweDIwRikKK2Rpc0luc3RyKHBwYyk6IHVuaGFuZGxlZCBpbnN0cnVjdGlvbjogMHg3QzBGODJBNgorCisKKyBWRVgvcHJpdi9ndWVzdF9wcGNfZGVmcy5oICAgIHwgICAgMiArKworIFZFWC9wcml2L2d1ZXN0X3BwY19oZWxwZXJzLmMgfCAgIDE4ICsrKysrKysrKysrKysrKysrKworIFZFWC9wcml2L2d1ZXN0X3BwY190b0lSLmMgICAgfCAgIDIyICsrKysrKysrKysrKysrKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDQyIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9WRVgvcHJpdi9ndWVzdF9wcGNfZGVmcy5oIGIvVkVYL3ByaXYvZ3Vlc3RfcHBjX2RlZnMuaAoraW5kZXggZGQzYzYyZS4uMTFhMzRhYSAxMDA2NDQKKy0tLSBhL1ZFWC9wcml2L2d1ZXN0X3BwY19kZWZzLmgKKysrKyBiL1ZFWC9wcml2L2d1ZXN0X3BwY19kZWZzLmgKK0BAIC0xNDYsNiArMTQ2LDggQEAgZXh0ZXJuIFVJbnQgcHBjMzJnX2RpcnR5aGVscGVyX01GU1BSXzI2OF8yNjkgKCBVSW50ICk7CisgCisgZXh0ZXJuIFVJbnQgcHBjMzJnX2RpcnR5aGVscGVyX01GU1BSXzI4NyAoIHZvaWQgKTsKKyAKKytleHRlcm4gVUludCBwcGMzMmdfZGlydHloZWxwZXJfTUZTUFJfNTI2XzUyNyAoIFVJbnQgKTsKKysKKyBleHRlcm4gdm9pZCBwcGMzMmdfZGlydHloZWxwZXJfTFZTICggVmV4R3Vlc3RQUEMzMlN0YXRlKiBnc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJbnQgdkRfaWR4LCBVSW50IHNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSW50IHNoaWZ0X3JpZ2h0ICk7CitkaWZmIC0tZ2l0IGEvVkVYL3ByaXYvZ3Vlc3RfcHBjX2hlbHBlcnMuYyBiL1ZFWC9wcml2L2d1ZXN0X3BwY19oZWxwZXJzLmMKK2luZGV4IDExYWE0MjguLmI0OWVhM2YgMTAwNjQ0CistLS0gYS9WRVgvcHJpdi9ndWVzdF9wcGNfaGVscGVycy5jCisrKysgYi9WRVgvcHJpdi9ndWVzdF9wcGNfaGVscGVycy5jCitAQCAtMTE5LDYgKzExOSwyNCBAQCBVSW50IHBwYzMyZ19kaXJ0eWhlbHBlcl9NRlNQUl8yODcgKCB2b2lkICkKKyAjICBlbmRpZgorIH0KKyAKKysvKiBDQUxMRUQgRlJPTSBHRU5FUkFURUQgQ09ERSAqLworKy8qIERJUlRZIEhFTFBFUiAobm9uLXJlZmVyZW50aWFsbHkgdHJhbnNwYXJlbnQpICovCisrVUludCBwcGMzMmdfZGlydHloZWxwZXJfTUZTUFJfNTI2XzUyNyAoIFVJbnQgcjUyNyApCisreworKyMgIGlmIGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmluZWQoX0FJWCkKKysgICBVSW50IHNwcjsKKysgICBpZiAocjUyNykgeworKyAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJtZnNwciAlMCw1MjciIDogIj1iIihzcHIpKTsKKysgICB9IGVsc2UgeworKyAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJtZnNwciAlMCw1MjYiIDogIj1iIihzcHIpKTsKKysgICB9CisrICAgcmV0dXJuIHNwcjsKKysjICBlbHNlCisrICAgcmV0dXJuIDA7CisrIyAgZW5kaWYKKyt9CisrCisrCisgCisgLyogQ0FMTEVEIEZST00gR0VORVJBVEVEIENPREUgKi8KKyAvKiBESVJUWSBIRUxQRVIgKHJlYWRzIGd1ZXN0IHN0YXRlLCB3cml0ZXMgZ3Vlc3QgbWVtKSAqLworZGlmZiAtLWdpdCBhL1ZFWC9wcml2L2d1ZXN0X3BwY190b0lSLmMgYi9WRVgvcHJpdi9ndWVzdF9wcGNfdG9JUi5jCitpbmRleCBmOGQyMjBkLi4zN2M4OTc0IDEwMDY0NAorLS0tIGEvVkVYL3ByaXYvZ3Vlc3RfcHBjX3RvSVIuYworKysrIGIvVkVYL3ByaXYvZ3Vlc3RfcHBjX3RvSVIuYworQEAgLTU2NTcsNiArNTY1NywyOCBAQCBzdGF0aWMgQm9vbCBkaXNfcHJvY19jdGwgKCBWZXhBYmlJbmZvKiB2YmksIFVJbnQgdGhlSW5zdHIgKQorICAgICAgICAgIGJyZWFrOworICAgICAgIH0KKyAKKysKKysgICAgICBjYXNlIDUyNiAvKiAweDIwRSAqLzoKKysgICAgICBjYXNlIDUyNyAvKiAweDIwRiAqLzogeworKyAgICAgICAgIFVJbnQgICAgIGFyZyAgPSBTUFI9PTUyNiA/IDAgOiAxOworKyAgICAgICAgIElSVGVtcCAgIHZhbCAgPSBuZXdUZW1wKEl0eV9JMzIpOworKyAgICAgICAgIElSRXhwcioqIGFyZ3MgPSBta0lSRXhwclZlY18xKCBta1UzMihhcmcpICk7CisrICAgICAgICAgSVJEaXJ0eSogZCAgICA9IHVuc2FmZUlSRGlydHlfMV9OKAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAvKnJlZ3Bhcm1zKi8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcGMzMmdfZGlydHloZWxwZXJfTUZTUFJfNTI2XzUyNyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZucHRyX3RvX2ZuZW50cnkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZiaSwgJnBwYzMyZ19kaXJ0eWhlbHBlcl9NRlNQUl81MjZfNTI3KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncworKyAgICAgICAgICAgICAgICAgICAgICAgICApOworKyAgICAgICAgIC8qIGV4ZWN1dGUgdGhlIGRpcnR5IGNhbGwsIGR1bXBpbmcgdGhlIHJlc3VsdCBpbiB2YWwuICovCisrICAgICAgICAgc3RtdCggSVJTdG10X0RpcnR5KGQpICk7CisrICAgICAgICAgcHV0SVJlZyggckRfYWRkciwKKysgICAgICAgICAgICAgICAgICBta1dpZGVuRnJvbTMyKHR5LCBta2V4cHIodmFsKSwgRmFsc2UvKnVuc2lnbmVkKi8pICk7CisrICAgICAgICAgRElQKCJtZnNwciByJXUsJXUiLCByRF9hZGRyLCAoVUludClTUFIpOworKyAgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysKKyAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHZleF9wcmludGYoImRpc19wcm9jX2N0bChwcGMpKG1mc3ByLFNQUikoMHgleClcbiIsIFNQUik7CisgICAgICAgICAgcmV0dXJuIEZhbHNlOworLS0gCisxLjcuMC40CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9hZGQtcHRlc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9hZGQtcHRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI1Zjg0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2FkZC1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDI0MyBAQAorTW9kaWZ5IHZnX3Rlc3Qgd3JhcHBlciB0byBzdXBwb3J0IFBURVNUIGZvcm1hdHMKKworQ2hhbmdlIHRoZSB2YWxncmluZCByZWdyZXNzaW9uIHRlc3Qgc2NyaXB0IHZnX3JlZ3Rlc3QgdG8KK3N1cHBvcnQgdGhlIHlvY3RvIHB0ZXN0IHN0ZG91dCByZXBvcnRpbmcgZm9ybWF0LiAgVGhlIGNvbW1pdCBhZGRzCisnLS15b2N0by1wdGVzdCcgYXMgYW4gb3B0aW9uYWwgYXJndW1lbnQgdG8gdmdfcmVndGVzdCwgd2hpY2ggYWx0ZXJzCit0aGUgb3V0cHV0IHRvIHVzZSB0aGUgcHRlc3QgaW5mcmFzdHJ1Y3R1cmUgcmVwb3J0aW5nIGZvcm1hdDoKKyAgICAiW1BBU1N8U0tJUHxGQUlMXTogdGVzdG5hbWUiCitpbnN0ZWFkIG9mIHZhbGdyaW5kJ3MgaW50ZXJuYWwgdGVzdCByZXBvcnRpbmcgZm9ybWF0LiAgV2l0aG91dCB0aGUgYWRkZWQKK29wdGlvbiwgLS15b2N0by1wdGVzdCwgdGhlIHZhbGdyaW5kIHJlZ3Jlc3Npb24gdGVzdCBvdXRwdXQgaXMgdW5jaGFuZ2VkLgorCitFbmZvcmNlIDMwIHNlY29uZHMgbGltaXQgZm9yIHRoZSB0ZXN0LgorVGhpcyByZXN1bWUgZXhlY3V0aW9uIG9mIHRoZSByZW1haW5pbmcgdGVzdHMgd2hlbiB2YWxncmluZCBoYW5ncy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IERhdmUgTGVybmVyIDxkYXZlLmxlcm5lckB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+CisKK2RpZmYgLS1naXQgYS90ZXN0cy92Z19yZWd0ZXN0LmluIGIvdGVzdHMvdmdfcmVndGVzdC5pbgoraW5kZXggMjI0Mzg1Zi4uM2UwMzgzYiAxMDA3NTUKKy0tLSBhL3Rlc3RzL3ZnX3JlZ3Rlc3QuaW4KKysrKyBiL3Rlc3RzL3ZnX3JlZ3Rlc3QuaW4KK0BAIC0zOSwxMSArMzksMTEgQEAKKyAjICAgICAgICAgICAgICAgLS12YWxncmluZC4pCisgIyAgIC0ta2VlcC11bmZpbHRlcmVkOiBrZWVwIGEgY29weSBvZiB0aGUgdW5maWx0ZXJlZCBvdXRwdXQvZXJyb3Igb3V0cHV0CisgIyAgICAgb2YgZWFjaCB0ZXN0IGJ5IGFkZGluZyBhbiBleHRlbnNpb24gLnVuZmlsdGVyZWQub3V0CistIworICMgICAtLW91dGVyLXZhbGdyaW5kOiBydW4gdGhpcyB2YWxncmluZCB1bmRlciB0aGUgZ2l2ZW4gb3V0ZXIgdmFsZ3JpbmQuCisgIyAgICAgVGhpcyB2YWxncmluZCBtdXN0IGJlIGNvbmZpZ3VyZWQgd2l0aCAtLWVuYWJsZS1pbm5lci4KKyAjICAgLS1vdXRlci10b29sOiB0b29sIHRvIHVzZSBieSB0aGUgb3V0ZXIgdmFsZ3JpbmQgKGRlZmF1bHQgbWVtY2hlY2spLgorICMgICAtLW91dGVyLWFyZ3M6IHVzZSB0aGlzIGFzIG91dGVyIHRvb2wgYXJncy4KKysjICAgLS15b2N0by1wdGVzdDogb3V0cHV0IGluIHlvY3RvIHB0ZXN0IGZvcm1hdAorICMKKyAjIFRoZSBlYXNpZXN0IHdheSBpcyB0byBydW4gYWxsIHRlc3RzIGluIHZhbGdyaW5kLyB3aXRoIChhc3N1bWluZyB5b3UgaW5zdGFsbGVkCisgIyBpbiAkUFJFRklYKToKK0BAIC0xMjYsNyArMTI2LDcgQEAgdXNlIHN0cmljdDsKKyBteSAkdXNhZ2U9IlxuIgorICAgICAgLiAiVXNhZ2U6XG4iCisgICAgICAuICIgICB2Z19yZWd0ZXN0IFstLWFsbCwgLS12YWxncmluZCwgLS12YWxncmluZC1saWIsIC0ta2VlcC11bmZpbHRlcmVkXG4iCistICAgICAuICIgICAgICAgICAgICAgICAgIC0tb3V0ZXItdmFsZ3JpbmQsIC0tb3V0ZXItdG9vbCwgLS1vdXRlci1hcmdzXVxuIgorKyAgICAgLiAiICAgICAgICAgICAgICAgICAtLW91dGVyLXZhbGdyaW5kLCAtLW91dGVyLXRvb2wsIC0tb3V0ZXItYXJncywgLS15b2N0by1wdGVzdF1cbiIKKyAgICAgIC4gIiAgIFVzZSBFWFRSQV9SRUdURVNUX09QVFMgdG8gc3VwcGx5IGV4dHJhIGFyZ3MgZm9yIGFsbCB0ZXN0c1xuIgorICAgICAgLiAiXG4iOworIAorQEAgLTE3MCw2ICsxNzAsNyBAQCBteSAkb3V0ZXJfYXJnczsKKyAKKyBteSAkdmFsZ3JpbmRfbGliID0gIiR0ZXN0c19kaXIvLmluX3BsYWNlIjsKKyBteSAka2VlcHVuZmlsdGVyZWQgPSAwOworK215ICR5b2N0b3B0ZXN0ID0gMDsKKyAKKyAjIGRlZmF1bHQgZmlsdGVyIGlzIHRoZSBvbmUgbmFtZWQgImZpbHRlcl9zdGRlcnIiIGluIHRoZSB0ZXN0J3MgZGlyZWN0b3J5CisgbXkgJGRlZmF1bHRfc3RkZXJyX2ZpbHRlciA9ICJmaWx0ZXJfc3RkZXJyIjsKK0BAIC0yMjYsNiArMjI3LDggQEAgc3ViIHByb2Nlc3NfY29tbWFuZF9saW5lKCkKKyAgICAgICAgICAgICAgICAgJHZhbGdyaW5kX2xpYiA9ICQxOworICAgICAgICAgICAgIH0gZWxzaWYgKCRhcmcgPX4gL14tLWtlZXAtdW5maWx0ZXJlZCQvKSB7CisgICAgICAgICAgICAgICAgICRrZWVwdW5maWx0ZXJlZCA9IDE7CisrICAgICAgICAgICAgfSBlbHNpZiAoJGFyZyA9fiAvXi0teW9jdG8tcHRlc3QkLykgeworKyAgICAgICAgICAgICAgICAkeW9jdG9wdGVzdCA9IDE7CisgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgZGllICR1c2FnZTsKKyAgICAgICAgICAgICB9CitAQCAtMzQwLDEzICszNDMsMjggQEAgc3ViIHJlYWRfdmd0ZXN0X2ZpbGUoJCkKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgU2luY2UgbW9zdCBvZiB0aGUgcHJvZ3JhbSB0aW1lIGlzIHNwZW50IGluIHN5c3RlbSgpIGNhbGxzLCBuZWVkIHRoaXMgdG8KKyAjIHByb3BhZ2F0ZSBhIEN0cmwtQyBlbmFibGluZyB1cyB0byBxdWl0LgorLXN1YiBteXN5c3RlbSgkKSAKKysjIEVuZm9yY2UgMzAgc2Vjb25kcyBsaW1pdCBmb3IgdGhlIHRlc3QuCisrIyBUaGlzIHJlc3VtZSBleGVjdXRpb24gb2YgdGhlIHJlbWFpbmluZyB0ZXN0cyBpZiB2YWxncmluZCBoYW5ncy4KKytzdWIgbXlzeXN0ZW0oJCkKKyB7CistICAgIG15ICRleGl0X2NvZGUgPSBzeXN0ZW0oJF9bMF0pOworLSAgICAoJGV4aXRfY29kZSA9PSAyKSBhbmQgZXhpdCAxOyAgICAgICMgMiBpcyBTSUdJTlQKKy0gICAgcmV0dXJuICRleGl0X2NvZGU7CisrICAgIG15ICRleGl0X2NvZGU9MDsKKysgICAgZXZhbCB7CisrICAgICAgICBsb2NhbCAkU0lHeydBTFJNJ30gPSBzdWIgeyBkaWUgInRpbWVkIG91dFxuIiB9OworKyAgICAgICAgYWxhcm0oMzApOworKyAgICAgICAgJGV4aXRfY29kZSA9IHN5c3RlbSgkX1swXSk7CisrICAgICAgICBhbGFybSAoMCk7CisrICAgICAgICAoJGV4aXRfY29kZSA9PSAyKSBhbmQgZGllICJTSUdJTlRcbiI7ICAgIyAyIGlzIFNJR0lOVAorKyAgICB9OworKyAgICBpZiAoJEApIHsKKysgICAgICAgIGlmICgkQCBlcSAidGltZWQgb3V0XG4iKSB7CisrICAgICAgICAgICAgcHJpbnQgInRpbWVkIG91dFxuIjsKKysgICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIH0KKysgICAgICAgIGlmICgkQCBlcSAiU0lHSU5UXG4iKSB7CisrICAgICAgICAgICAgZXhpdCAxOworKyAgICAgICAgfQorKyAgICB9CisgfQorLQorICMgaWYgJGtlZXB1bmZpbHRlcmVkLCBjb3BpZXMgJDEgdG8gJDEudW5maWx0ZXJlZC5vdXQKKyAjIHJlbmFtZXMgJDAgdHAgJDEKKyBzdWIgZmlsdGVyZWRfcmVuYW1lKCQkKSAKK0BAIC0zOTQsMTkgKzQxMiwyMSBAQCBzdWIgZG9fZGlmZnMoJCQkJCkKKyAgICAgICAgICAgICAgICAgIyBBIG1hdGNoOyAgcmVtb3ZlIC5vdXQgYW5kIGFueSBwcmV2aW91c2x5IGNyZWF0ZWQgLmRpZmYgZmlsZXMuCisgICAgICAgICAgICAgICAgIHVubGluaygiJG5hbWUuJG1pZC5vdXQiKTsKKyAgICAgICAgICAgICAgICAgdW5saW5rKDwkbmFtZS4kbWlkLmRpZmYqPik7CistICAgICAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICB9CisgICAgICMgSWYgd2UgcmVhY2ggaGVyZSwgbm9uZSBvZiB0aGUgLmV4cCBmaWxlcyBtYXRjaGVkLgorLSAgICBwcmludCAiKioqICRuYW1lIGZhaWxlZCAoJG1pZCkgKioqXG4iOworKyAgICBwcmludCAiKioqICRuYW1lIGZhaWxlZCAoJG1pZCkgKioqXG4iIGlmICgkeW9jdG9wdGVzdCA9PSAwKSA7CisgICAgIHB1c2goQGZhaWx1cmVzLCBzcHJpbnRmKCIlLTQwcyAoJG1pZCkiLCAiJGZ1bGxuYW1lIikpOworICAgICAkbnVtX2ZhaWx1cmVzeyRtaWR9Kys7CisrICAgIHJldHVybiAxOworIH0KKyAKKyBzdWIgZG9fb25lX3Rlc3QoJCQpIAorIHsKKyAgICAgbXkgKCRkaXIsICR2Z3Rlc3QpID0gQF87CisrICAgIG15ICRkaWZmU3RhdHVzID0gMDsKKyAgICAgJHZndGVzdCA9fiAvXiguKilcLnZndGVzdC87CisgICAgIG15ICRuYW1lID0gJDE7CisgICAgIG15ICRmdWxsbmFtZSA9ICIkZGlyLyRuYW1lIjsgCitAQCAtNDI1LDcgKzQ0NSwxMSBAQCBzdWIgZG9fb25lX3Rlc3QoJCQpCisgICAgICAgICB9IGVsc2lmICgyNTYgPT0gJHByZXJlcV9yZXMpIHsKKyAgICAgICAgICAgICAjIE5iOiB3ZWlyZCBQZXJsLWlzbSAtLSBleGl0IGNvZGUgb2YgJzEnIGlzIHNlZW4gYnkgUGVybCBhcyAyNTYuLi4KKyAgICAgICAgICAgICAjIFByZXJlcSBmYWlsZWQsIHNraXAuCistICAgICAgICAgICAgcHJpbnRmKCIlLTE2cyAoc2tpcHBpbmcsIHByZXJlcSBmYWlsZWQ6ICRwcmVyZXEpXG4iLCAiJG5hbWU6Iik7CisrICAgICAgICAgICAgaWYgKCR5b2N0b3B0ZXN0ID09IDApIHsKKysgICAgICAgICAgICAgICAgcHJpbnRmKCIlLTE2cyAoc2tpcHBpbmcsIHByZXJlcSBmYWlsZWQ6ICRwcmVyZXEpXG4iLCAiJG5hbWU6Iik7CisrICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgcHJpbnRmKCJTS0lQOiAkZnVsbG5hbWVcbiIpOworKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICMgQmFkIHByZXJlcTsgYWJvcnQuCitAQCAtNDM4LDcgKzQ2Miw3IEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAgICAgaWYgKGRlZmluZWQgJHByb2dCKSB7CisgICAgICAgICAjIElmIHRoZXJlIGlzIGEgcHJvZ0IsIGxldCdzIHN0YXJ0IGl0IGluIGJhY2tncm91bmQ6CisgICAgICAgICBwcmludGYoIiUtMTZzIHZhbGdyaW5kICRleHRyYW9wdHMgJHZnb3B0cyAkcHJvZyAkYXJncyAocHJvZ0I6ICRwcm9nQiAkYXJnc0IpXG4iLAorLSAgICAgICAgICAgICAgICIkbmFtZToiKTsKKysgICAgICAgICAgICAgICAiJG5hbWU6IikgaWYgKCR5b2N0b3B0ZXN0ID09IDApOworICAgICAgICAgIyBwcm9nQi5kb25lIHVzZWQgdG8gZGV0ZWN0IGNoaWxkIGhhcyBmaW5pc2hlZC4gU2VlIGJlbG93LgorICAgICAgICAgIyBOb3RlOiByZWRpcmVjdGlvbiBvZiBzdGRvdXQgYW5kIHN0ZGVyciBpcyBiZWZvcmUgJHByb2dCIHRvIGFsbG93IGFyZ3NCCisgICAgICAgICAjIHRvIGUuZy4gcmVkaXJlY3Qgc3Rkb3V0QiB0byBzdGRlcnJCCitAQCAtNDUyLDcgKzQ3Niw4IEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAgICAgICAgICAgICAgICAgICAgICAuICJ0b3VjaCBwcm9nQi5kb25lKSAgJiIpOworICAgICAgICAgfQorICAgICB9IGVsc2UgeworLSAgICAgICAgcHJpbnRmKCIlLTE2cyB2YWxncmluZCAkZXh0cmFvcHRzICR2Z29wdHMgJHByb2cgJGFyZ3NcbiIsICIkbmFtZToiKTsKKysgICAgICAgIHByaW50ZigiJS0xNnMgdmFsZ3JpbmQgJGV4dHJhb3B0cyAkdmdvcHRzICRwcm9nICRhcmdzXG4iLCAiJG5hbWU6IikKKysgICAgICAgICAgICBpZiAoJHlvY3RvcHRlc3QgPT0gMCk7CisgICAgIH0KKyAgCisgICAgICMgUGFzcyB0aGUgYXBwcm9wcmlhdGUgLS10b29sIG9wdGlvbiBmb3IgdGhlIGRpcmVjdG9yeSAoY2FuIGJlIG92ZXJyaWRkZW4KK0BAIC00ODcsNyArNTEyLDcgQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorICAgICAjIEZpbmQgYWxsIHRoZSAuc3Rkb3V0LmV4cCBmaWxlcy4gIElmIG5vbmUsIHVzZSAvZGV2L251bGwuCisgICAgIG15IEBzdGRvdXRfZXhwcyA9IDwkbmFtZS5zdGRvdXQuZXhwKj47CisgICAgIEBzdGRvdXRfZXhwcyA9ICggIi9kZXYvbnVsbCIgKSBpZiAoMCA9PSBzY2FsYXIgQHN0ZG91dF9leHBzKTsKKy0gICAgZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInN0ZG91dCIsIFxAc3Rkb3V0X2V4cHMpOyAKKysgICAgJGRpZmZTdGF0dXMgfD0gZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInN0ZG91dCIsIFxAc3Rkb3V0X2V4cHMpOworIAorICAgICAjIEZpbHRlciBzdGRlcnIKKyAgICAgJHN0ZGVycl9maWx0ZXJfYXJncyA9ICRuYW1lIGlmICghIGRlZmluZWQgJHN0ZGVycl9maWx0ZXJfYXJncyk7CitAQCAtNDk2LDcgKzUyMSw3IEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAgICAgIyBGaW5kIGFsbCB0aGUgLnN0ZGVyci5leHAgZmlsZXMuICBBdCBsZWFzdCBvbmUgbXVzdCBleGlzdC4KKyAgICAgbXkgQHN0ZGVycl9leHBzID0gPCRuYW1lLnN0ZGVyci5leHAqPjsKKyAgICAgKDAgIT0gc2NhbGFyIEBzdGRlcnJfZXhwcykgb3IgZGllICJDb3VsZCBub3QgZmluZCBgJG5hbWUuc3RkZXJyLmV4cConXG4iOworLSAgICBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAic3RkZXJyIiwgXEBzdGRlcnJfZXhwcyk7IAorKyAgICAkZGlmZlN0YXR1cyB8PSBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAic3RkZXJyIiwgXEBzdGRlcnJfZXhwcyk7CisgCisgICAgIGlmIChkZWZpbmVkICRwcm9nQikgeworICAgICAgICAgIyB3YWl0IGZvciB0aGUgY2hpbGQgdG8gYmUgZmluaXNoZWQKK0BAIC01MjAsNyArNTQ1LDcgQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorICAgICAgICAgIyBGaW5kIGFsbCB0aGUgLnN0ZG91dEIuZXhwIGZpbGVzLiAgSWYgbm9uZSwgdXNlIC9kZXYvbnVsbC4KKyAgICAgICAgIG15IEBzdGRvdXRCX2V4cHMgPSA8JG5hbWUuc3Rkb3V0Qi5leHAqPjsKKyAgICAgICAgIEBzdGRvdXRCX2V4cHMgPSAoICIvZGV2L251bGwiICkgaWYgKDAgPT0gc2NhbGFyIEBzdGRvdXRCX2V4cHMpOworLSAgICAgICAgZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInN0ZG91dEIiLCBcQHN0ZG91dEJfZXhwcyk7IAorKyAgICAgICAgJGRpZmZTdGF0dXMgfD0gZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInN0ZG91dEIiLCBcQHN0ZG91dEJfZXhwcyk7CisgICAgICAgICAKKyAgICAgICAgICMgRmlsdGVyIHN0ZGVycgorICAgICAgICAgJHN0ZGVyckJfZmlsdGVyX2FyZ3MgPSAkbmFtZSBpZiAoISBkZWZpbmVkICRzdGRlcnJCX2ZpbHRlcl9hcmdzKTsKK0BAIC01MjksNyArNTU0LDcgQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorICAgICAgICAgIyBGaW5kIGFsbCB0aGUgLnN0ZGVyckIuZXhwIGZpbGVzLiAgQXQgbGVhc3Qgb25lIG11c3QgZXhpc3QuCisgICAgICAgICBteSBAc3RkZXJyQl9leHBzID0gPCRuYW1lLnN0ZGVyckIuZXhwKj47CisgICAgICAgICAoMCAhPSBzY2FsYXIgQHN0ZGVyckJfZXhwcykgb3IgZGllICJDb3VsZCBub3QgZmluZCBgJG5hbWUuc3RkZXJyQi5leHAqJ1xuIjsKKy0gICAgICAgIGRvX2RpZmZzKCRmdWxsbmFtZSwgJG5hbWUsICJzdGRlcnJCIiwgXEBzdGRlcnJCX2V4cHMpOyAKKysgICAgICAgICRkaWZmU3RhdHVzIHw9IGRvX2RpZmZzKCRmdWxsbmFtZSwgJG5hbWUsICJzdGRlcnJCIiwgXEBzdGRlcnJCX2V4cHMpOworICAgICB9CisgCisgICAgICMgTWF5YmUgZG8gcG9zdC10ZXN0IGNoZWNrCitAQCAtNTQxLDcgKzU2Niw3IEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAJICAgICMgRmluZCBhbGwgdGhlIC5wb3N0LmV4cCBmaWxlcy4gIElmIG5vbmUsIHVzZSAvZGV2L251bGwuCisgCSAgICBteSBAcG9zdF9leHBzID0gPCRuYW1lLnBvc3QuZXhwKj47CisgCSAgICBAcG9zdF9leHBzID0gKCAiL2Rldi9udWxsIiApIGlmICgwID09IHNjYWxhciBAcG9zdF9leHBzKTsKKy0JICAgIGRvX2RpZmZzKCRmdWxsbmFtZSwgJG5hbWUsICJwb3N0IiwgXEBwb3N0X2V4cHMpOworKwkgICAgJGRpZmZTdGF0dXMgfD0gZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInBvc3QiLCBcQHBvc3RfZXhwcyk7CisgCX0KKyAgICAgfQorICAKK0BAIC01NTAsNiArNTc1LDEzIEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAgICAgICAgICAgICBwcmludCgiKGNsZWFudXAgb3BlcmF0aW9uIGZhaWxlZDogJGNsZWFudXApXG4iKTsKKyAgICAgfQorIAorKyAgICBpZiAoJHlvY3RvcHRlc3QgPT0gMSkgeworKyAgICAgICAgaWYgKCRkaWZmU3RhdHVzID09IDApIHsKKysgICAgICAgICAgICBwcmludCgiUEFTUzogJGZ1bGxuYW1lXG4iKTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgcHJpbnQoIkZBSUw6ICRmdWxsbmFtZVxuIik7CisrICAgICAgICB9CisrICAgIH0KKyAgICAgJG51bV90ZXN0c19kb25lKys7CisgfQorIAorQEAgLTU4OSw3ICs2MjEsNyBAQCBzdWIgdGVzdF9vbmVfZGlyKCQkKQorICAgICBteSAkZm91bmRfdGVzdHMgPSAoMCAhPSAoZ3JlcCB7ICRfID1+IC9cLnZndGVzdCQvIH0gQGZzKSk7CisgCisgICAgIGlmICgkZm91bmRfdGVzdHMpIHsKKy0gICAgICAgIHByaW50ICItLSBSdW5uaW5nICB0ZXN0cyBpbiAkZnVsbF9kaXIgJGRhc2hlc1xuIjsKKysgICAgICAgIHByaW50ICItLSBSdW5uaW5nICB0ZXN0cyBpbiAkZnVsbF9kaXIgJGRhc2hlc1xuIiBpZiAoJHlvY3RvcHRlc3QgPT0gMCk7CisgICAgIH0KKyAgICAgZm9yZWFjaCBteSAkZiAoQGZzKSB7CisgICAgICAgICBpZiAoLWQgJGYpIHsKK0BAIC01OTksNyArNjMxLDcgQEAgc3ViIHRlc3Rfb25lX2RpcigkJCkKKyAgICAgICAgIH0KKyAgICAgfQorICAgICBpZiAoJGZvdW5kX3Rlc3RzKSB7CistICAgICAgICBwcmludCAiLS0gRmluaXNoZWQgdGVzdHMgaW4gJGZ1bGxfZGlyICRkYXNoZXNcbiI7CisrICAgICAgICBwcmludCAiLS0gRmluaXNoZWQgdGVzdHMgaW4gJGZ1bGxfZGlyICRkYXNoZXNcbiIgaWYgKCR5b2N0b3B0ZXN0ID09IDApOworICAgICB9CisgCisgICAgIGNoZGlyKCIuLiIpOworQEAgLTYyNSwxMCArNjU3LDEyIEBAIHN1YiBzdW1tYXJpc2VfcmVzdWx0cworICAgICAgICAgICAgJG51bV9mYWlsdXJlc3sic3Rkb3V0In0sICAgcGx1cmFsKCRudW1fZmFpbHVyZXN7InN0ZG91dCJ9KSwKKyAgICAgICAgICAgICRudW1fZmFpbHVyZXN7InN0ZGVyckIifSwgIHBsdXJhbCgkbnVtX2ZhaWx1cmVzeyJzdGRlcnJCIn0pLAorICAgICAgICAgICAgJG51bV9mYWlsdXJlc3sic3Rkb3V0QiJ9LCAgcGx1cmFsKCRudW1fZmFpbHVyZXN7InN0ZG91dEIifSksCistICAgICAgICAgICAkbnVtX2ZhaWx1cmVzeyJwb3N0In0sICAgICBwbHVyYWwoJG51bV9mYWlsdXJlc3sicG9zdCJ9KSk7CisrICAgICAgICAgICAkbnVtX2ZhaWx1cmVzeyJwb3N0In0sICAgICBwbHVyYWwoJG51bV9mYWlsdXJlc3sicG9zdCJ9KSkKKysgICAgICAgICAgICAgICBpZiAoJHlvY3RvcHRlc3QgPT0gMCk7CisgCisgICAgIGZvcmVhY2ggbXkgJGZhaWx1cmUgKEBmYWlsdXJlcykgeworLSAgICAgICAgcHJpbnQgIiRmYWlsdXJlXG4iOworKyAgICAgICAgcHJpbnQgIiRmYWlsdXJlXG4iCisrICAgICAgICAgICBpZiAoJHlvY3RvcHRlc3QgPT0gMCk7CisgICAgIH0KKyAgICAgcHJpbnQgIlxuIjsKKyB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9lbmFibGUuYnVpbGRpbmcub24uNC54Lmtlcm5lbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2VuYWJsZS5idWlsZGluZy5vbi40Lngua2VybmVsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMGYyZjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9lbmFibGUuYnVpbGRpbmcub24uNC54Lmtlcm5lbC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitFbmFibGUgYnVpbGRpbmcgdmFsZ3JpbmQgb24gaG9zdCB3aXRoIDQueCBrZXJuZWwuCisKK0ZvciBPcGVuRW1iZWRkZWQgYnVpbGRzIHdlIHNob3VsZCBiZSBjaGVja2luZyBzb21ldGhpbmcgbGlrZQorT0xERVNUX0tFUk5FTCBpbnN0ZWFkIG9mIGB1bmFtZSAtcmAsIGJ1dCB0aGlzIGlzIGdvb2QgZW5vdWdoIGZvciBub3cuCisKK0J1aWxkaW5nIG9uIDQueCogY3VycmVudGx5IGZhaWxzIHdpdGg6CisgIGNvbmZpZ3VyZTo1NTU2OiBjaGVja2luZyBmb3IgdGhlIGtlcm5lbCB2ZXJzaW9uCisgIGNvbmZpZ3VyZTo1NTc5OiByZXN1bHQ6IHVuc3VwcG9ydGVkICg0LjAuMC1yYzMtMDAxMTEtZ2FmZmI4MTcpCisgIGNvbmZpZ3VyZTo1NTgxOiBlcnJvcjogVmFsZ3JpbmQgd29ya3Mgb24ga2VybmVscyAyLjQsIDIuNgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworLS0tIHZhbGdyaW5kLTMuOS4wL2NvbmZpZ3VyZS5hYy5vcmlnCTIwMTUtMDMtMTMgMTk6MTc6MDEuMjQ3MzEwODY4ICswMTAwCisrKysgdmFsZ3JpbmQtMy45LjAvY29uZmlndXJlLmFjCTIwMTUtMDMtMTMgMTk6MTk6MjcuMzg4MzE2MTA4ICswMTAwCitAQCAtMjc2LDkgKzI3Niw5IEBACisgICAgICAgICBrZXJuZWw9YHVuYW1lIC1yYAorIAorICAgICAgICAgY2FzZSAiJHtrZXJuZWx9IiBpbgorLSAgICAgICAgICAgICAyLjYuKnwzLiopIAorLSAgICAgICAgCSAgICBBQ19NU0dfUkVTVUxUKFsyLjYueC8zLnggZmFtaWx5ICgke2tlcm5lbH0pXSkKKy0gICAgICAgIAkgICAgQUNfREVGSU5FKFtLRVJORUxfMl82XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBMaW51eCAyLjYueCBvciBMaW51eCAzLnhdKQorKyAgICAgICAgICAgICAyLjYuKnwzLip8NC4qKSAKKysgICAgICAgIAkgICAgQUNfTVNHX1JFU1VMVChbMi42LngvMy54LzQueCBmYW1pbHkgKCR7a2VybmVsfSldKQorKyAgICAgICAgCSAgICBBQ19ERUZJTkUoW0tFUk5FTF8yXzZdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIExpbnV4IDIuNi54IG9yIExpbnV4IDMueCBvciBMaW51eCA0LnhdKQorICAgICAgICAgCSAgICA7OworIAorICAgICAgICAgICAgICAyLjQuKikgCitAQCAtMjg4LDcgKzI4OCw3IEBACisgCisgICAgICAgICAgICAgICopIAorICAgICAgICAgCSAgICBBQ19NU0dfUkVTVUxUKFt1bnN1cHBvcnRlZCAoJHtrZXJuZWx9KV0pCistICAgICAgICAJICAgIEFDX01TR19FUlJPUihbVmFsZ3JpbmQgd29ya3Mgb24ga2VybmVscyAyLjQsIDIuNl0pCisrICAgICAgICAJICAgIEFDX01TR19FUlJPUihbVmFsZ3JpbmQgd29ya3Mgb24ga2VybmVscyAyLjQsIDIuNiwgMy54LCA0LnhdKQorICAgICAgICAgCSAgICA7OworICAgICAgICAgZXNhYworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZml4ZWQtcGVybC1wYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZml4ZWQtcGVybC1wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNTRkMDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9maXhlZC1wZXJsLXBhdGgucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAordGhpcyBpcyBhIHRlbXBvcmFyeSBwYXRjaCB0byB3b3JrYXJvdW5kIGNyb3NzIGNvbXBpbGF0aW9uLgorb3RoZXJ3aXNlIEBQRVJMQCB3aWxsIGJlIHJlcGxhY2VkIHRvIHBlcmwtbmF0aXZlIGJpbmFyeSwKK3RoaXMgY3JlYXRlcyB1bnVzYWJsZSBzY3JpcHRzIGFuZCBmYWlscyBGSUxFUkRFUEVORFMgbWVjaGFuaXNtCisoZXNwLiBycG0pCisKK2EgYmV0dGVyIGZpeCB3b3VsZCBuZWVkOgorIDEuIGNvbmZpZ3VyZS5hYyBzaG91bGQgZGlmZmVyZW50aWF0ZSBQRVJMIGFuZCBIT1NUUEVSTAorIDIuIG9wdGlvbmFsbHkgcmVtb3ZlICR7U1RBR0lOR19ESVJ9IGluICMhIGxpbmUgYmVmb3JlIGRvX2luc3RhbGwKKworOC8zMS8yMDEwIC0gY3JlYXRlZCBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC0tZ2l0IGEvY2FjaGVncmluZC9jZ19hbm5vdGF0ZS5pbiBiL2NhY2hlZ3JpbmQvY2dfYW5ub3RhdGUuaW4KK2luZGV4IDlkYzk1NjUuLmNjNGVmMDUgMTAwNjQ0CistLS0gYS9jYWNoZWdyaW5kL2NnX2Fubm90YXRlLmluCisrKysgYi9jYWNoZWdyaW5kL2NnX2Fubm90YXRlLmluCitAQCAtMSw0ICsxLDQgQEAKKy0jISBAUEVSTEAKKysjISAvdXNyL2Jpbi9wZXJsCisgCisgIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisgIyMtLS0gQ2FjaGVncmluZCdzIGFubm90YXRvci4gICAgICAgICAgICAgICAgICAgICAgIGNnX2Fubm90YXRlLmluIC0tLSMjCitkaWZmIC0tZ2l0IGEvY2FjaGVncmluZC9jZ19kaWZmLmluIGIvY2FjaGVncmluZC9jZ19kaWZmLmluCitpbmRleCA5NTEwNjZlLi44NGMyZGRlIDEwMDY0NAorLS0tIGEvY2FjaGVncmluZC9jZ19kaWZmLmluCisrKysgYi9jYWNoZWdyaW5kL2NnX2RpZmYuaW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhIEBQRVJMQAorKyMhIC91c3IvYmluL3BlcmwKKyAKKyAjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyAjIy0tLSBDYWNoZWdyaW5kJ3MgZGlmZmVyZW5jZXIuICAgICAgICAgICAgICAgICAgICAgICAgIGNnX2RpZmYuaW4gLS0tIyMKK2RpZmYgLS1naXQgYS9tYXNzaWYvbXNfcHJpbnQuaW4gYi9tYXNzaWYvbXNfcHJpbnQuaW4KK2luZGV4IGU2ZmZkYmYuLmZiNDU5MDYgMTAwNzU1CistLS0gYS9tYXNzaWYvbXNfcHJpbnQuaW4KKysrKyBiL21hc3NpZi9tc19wcmludC5pbgorQEAgLTEsNCArMSw0IEBACistIyEgQFBFUkxACisrIyEgL3Vzci9iaW4vcGVybAorIAorICMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworICMjLS0tIE1hc3NpZidzIHJlc3VsdHMgcHJpbnRlciAgICAgICAgICAgICAgICAgICAgICAgICBtc19wcmludC5pbiAtLS0jIworZGlmZiAtLWdpdCBhL3BlcmYvdmdfcGVyZi5pbiBiL3BlcmYvdmdfcGVyZi5pbgoraW5kZXggMjE4OGEzMS4uODNhZDAyNCAxMDA2NDQKKy0tLSBhL3BlcmYvdmdfcGVyZi5pbgorKysrIGIvcGVyZi92Z19wZXJmLmluCitAQCAtMSw0ICsxLDQgQEAKKy0jISBAUEVSTEAKKysjISAvdXNyL2Jpbi9wZXJsCisgIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisgIyMtLS0gVmFsZ3JpbmQgcGVyZm9ybWFuY2UgdGVzdGluZyBzY3JpcHQgICAgICAgICAgICAgICAgICB2Z19wZXJmIC0tLSMjCisgIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9mb3JjZS1ub3N0YWJzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZm9yY2Utbm9zdGFicy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDlkZmM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZm9yY2Utbm9zdGFicy5wYXRjaApAQCAtMCwwICsxLDQyIEBACitTdXBwcmVzcyBidWlsZGluZyBwdGVzdCBhcHBzIHdpdGggdGhlIC1nc3RhYnMgb3B0aW9uCisKK0ZvcmNlIHRoZSBjb25maWd1cmUgdGVzdHMgZm9yIC1nc3RhYnMgY29tcGlsZXIgc3VwcG9ydCB0byBmYWlsIHNvIHRoYXQKK3RoZSByZWdyZXNzaW9uIHRlc3RzIGRvbid0IHRyeSB0byBidWlsZCB3aXRoIHRoZSAtZ3N0YWJzIG9wdGlvbi4KK090aGVyd2lzZSwgdGhlIHZhbGdyaW5kIGJ1aWxkIHdoZW4gcHRlc3QgaXMgZW5hYmxlZCBmYWlscyB3aXRoIHRoZQorZXJyb3I6CisgICAgU3RhYnMgZGVidWdpbmZvIG5vdCBzdXBwb3J0ZWQ6CisgICAgLi4vcGFja2FnZS91c3IvbGliL3ZhbGdyaW5kL3B0ZXN0L21lbWNoZWNrL3Rlc3RzL2RlZXBfdGVtcGxhdGVzCisgICAgRVJST1I6IEZ1bmN0aW9uIGZhaWxlZDogc3BsaXRfYW5kX3N0cmlwX2ZpbGVzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZ3N0YWJzIHN1cHBvcnQgaXMgYXBwcm9wcmlhdGUgdXBzdHJlYW0sCisgICAgICAgIGJ1dCBub3QgZm9yIHRoaXMgZGlzdHJvXQorCitTaWduZWQtb2ZmLWJ5OiBEYXZlIExlcm5lciA8ZGF2ZS5sZXJuZXJAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNzU1ZGZiOS4uY2M4YjVlMSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTc0MywyMiArMTc0Myw3IEBAIEFNX0NPTkRJVElPTkFMKERXQVJGNCwgdGVzdCB4JGFjX2hhdmVfZHdhcmY0ID0geHllcykKKyBDRkxBR1M9JHNhZmVfQ0ZMQUdTCisgCisgCistIyBkb2VzIHRoaXMgY29tcGlsZXIgc3VwcG9ydCAtZ3N0YWJzID8KKy0KKy1BQ19NU0dfQ0hFQ0tJTkcoW2lmIGdjYyBhY2NlcHRzIC1nc3RhYnNdKQorLQorLXNhZmVfQ0ZMQUdTPSRDRkxBR1MKKy1DRkxBR1M9Ii1nc3RhYnMiCistQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbWworLSAgcmV0dXJuIDA7CistXV0pXSwgWworLWFjX2hhdmVfZ3N0YWJzPXllcworLUFDX01TR19SRVNVTFQoW3llc10pCistXSwgWworIGFjX2hhdmVfZ3N0YWJzPW5vCistQUNfTVNHX1JFU1VMVChbbm9dKQorLV0pCistQ0ZMQUdTPSRzYWZlX0NGTEFHUworIEFNX0NPTkRJVElPTkFMKFtIQVZFX0dTVEFCU10sIFt0ZXN0IHgkYWNfaGF2ZV9nc3RhYnMgPSB4eWVzXSkKKyAKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2dsaWJjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZ2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYzNDk5ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2dsaWJjLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0JhY2twb3J0IG9mIGdsaWJjIDIuMTkgYW5kIDIuMjAgYW5kIDIuMjEgc3VwcG9ydC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworSW5kZXg6IHZhbGdyaW5kLTMuMTAuMS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB2YWxncmluZC0zLjEwLjEub3JpZy9jb25maWd1cmUuYWMKKysrKyB2YWxncmluZC0zLjEwLjEvY29uZmlndXJlLmFjCitAQCAtMTAxOCw2ICsxMDE4LDM0IEBAIGNhc2UgIiR7R0xJQkNfVkVSU0lPTn0iIGluCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisrICAgICAyLjE5KQorKwlBQ19NU0dfUkVTVUxUKDIuMTkgZmFtaWx5KQorKwlBQ19ERUZJTkUoW0dMSUJDXzJfMTldLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTkueF0pCisrCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJOzsKKysgICAgIDIuMjApCisrCUFDX01TR19SRVNVTFQoMi4yMCBmYW1pbHkpCisrCUFDX0RFRklORShbR0xJQkNfMl8yMF0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4yMC54XSkKKysJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwk7OworKyAgICAgMi4yMSkKKysJQUNfTVNHX1JFU1VMVCgyLjIxIGZhbWlseSkKKysJQUNfREVGSU5FKFtHTElCQ18yXzIxXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjIxLnhdKQorKwlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCTs7CisrICAgICAyLjIyKQorKwlBQ19NU0dfUkVTVUxUKDIuMjIgZmFtaWx5KQorKwlBQ19ERUZJTkUoW0dMSUJDXzJfMjJdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMjIueF0pCisrCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJOzsKKyAgICAgIGRhcndpbikKKyAJQUNfTVNHX1JFU1VMVChEYXJ3aW4pCisgCUFDX0RFRklORShbREFSV0lOX0xJQkNdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIERhcndpbl0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9wYXNzLW1hbHRpdmVjLW9ubHktaWYtaXQtc3VwcG9ydGVkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcGFzcy1tYWx0aXZlYy1vbmx5LWlmLWl0LXN1cHBvcnRlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODE2N2NiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcGFzcy1tYWx0aXZlYy1vbmx5LWlmLWl0LXN1cHBvcnRlZC5wYXRjaApAQCAtMCwwICsxLDY4IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK3IxNDU2NiB8IGZsb3JpYW4gfCAyMDE0LTA5LTI0IDE3OjAyOjU0IC0wNTAwIChXZWQsIDI0IFNlcCAyMDE0KSB8IDQgbGluZXMKKworVGhlIHRlc3RidWNrZXRzIG5vbmUvdGVzdHMvcHBjezMyLDY0fSBkaWQgbm90IGJ1aWxkIGluIGNhc2UgdGhlCit0b29sY2hhaW4gZGlkIG5vdCBzdXBwb3J0IC1tYWx0aXZlYyAtbWFiaT1hbHRpdmVjLgorVGhpcyBzaG91bGQgd29yayBub3cuIEZpeGVzIEJaICMzMzg3MzEKKworSW5kZXg6IG5vbmUvdGVzdHMvcHBjMzIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL25vbmUvdGVzdHMvcHBjMzIvTWFrZWZpbGUuYW0JKHJldmlzaW9uIDE0NTY1KQorKysrIGIvbm9uZS90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQkocmV2aXNpb24gMTQ1NjYpCitAQCAtNzIsOCArNzIsMTIgQEAKKyBhbGxleGVjX0NGTEFHUwkJPSAkKEFNX0NGTEFHUykgQEZMQUdfV19OT19OT05OVUxMQAorIAorIGlmIEhBU19BTFRJVkVDCisrQlVJTERfRkxBR19BTFRJVkVDID0gLW1hbHRpdmVjCisrQlVJTERfRkxBR19BQklfQUxUSVZFQyA9IC1tYWJpPWFsdGl2ZWMKKyBBTFRJVkVDX0ZMQUcgPSAtREhBU19BTFRJVkVDCisgZWxzZQorK0JVSUxEX0ZMQUdfQUxUSVZFQyA9CisrQlVJTERfRkxBR19BQklfQUxUSVZFQyA9CisgQUxUSVZFQ19GTEFHID0KKyBlbmRpZgorIAorQEAgLTEwMSwxMSArMTA1LDEyIEBACisgSVNBXzJfMDdfRkxBRyA9CisgZW5kaWYKKyAKKy1qbV9pbnNuc19DRkxBR1MgPSAkKEFNX0NGTEFHUykgLVdpbmxpbmUgLVdhbGwgLU8gLWcgLW1yZWduYW1lcyAtbWFsdGl2ZWMgXAorLQkJCUBGTEFHX00zMkAgJChBTFRJVkVDX0ZMQUcpCisram1faW5zbnNfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIC1XaW5saW5lIC1XYWxsIC1PIC1nIC1tcmVnbmFtZXMgXAorKwkJCUBGTEFHX00zMkAgJChBTFRJVkVDX0ZMQUcpICQoQlVJTERfRkxBR19BTFRJVkVDKQorIAorLXRlc3RWTVhfQ0ZMQUdTICA9ICQoQU1fQ0ZMQUdTKSAtTyAtZyAtV2FsbCAtbWFsdGl2ZWMgLW1hYmk9YWx0aXZlYyAtREFMVElWRUMgXAorLQkJCS1ER0NDX0NPTVBJTEVSIEBGTEFHX00zMkAKKyt0ZXN0Vk1YX0NGTEFHUyAgPSAkKEFNX0NGTEFHUykgLU8gLWcgLVdhbGwgLURBTFRJVkVDIFwKKysJCQktREdDQ19DT01QSUxFUiBARkxBR19NMzJAICAkKEJVSUxEX0ZMQUdfQUxUSVZFQykgXAorKwkJCSQoQlVJTERfRkxBR19BQklfQUxUSVZFQykKKyAKKyB0ZXN0X2lzYV8yXzA2X3BhcnQxX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAtV2lubGluZSAtV2FsbCAtTyAtZyAtbXJlZ25hbWVzICQoVlNYX0ZMQUcpIFwKKyAJCQlARkxBR19NMzJAICQoQUxUSVZFQ19GTEFHKSAkKEJVSUxEX0ZMQUdfVlNYKQorSW5kZXg6IG5vbmUvdGVzdHMvcHBjNjQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL25vbmUvdGVzdHMvcHBjNjQvTWFrZWZpbGUuYW0JKHJldmlzaW9uIDE0NTY1KQorKysrIGIvbm9uZS90ZXN0cy9wcGM2NC9NYWtlZmlsZS5hbQkocmV2aXNpb24gMTQ1NjYpCitAQCAtNTAsOCArNTAsMTAgQEAKKyBhbGxleGVjX0NGTEFHUwkJPSAkKEFNX0NGTEFHUykgQEZMQUdfV19OT19OT05OVUxMQAorIAorIGlmIEhBU19BTFRJVkVDCisrQlVJTERfRkxBR19BTFRJVkVDID0gLW1hbHRpdmVjCisgQUxUSVZFQ19GTEFHID0gLURIQVNfQUxUSVZFQworIGVsc2UKKytCVUlMRF9GTEFHX0FMVElWRUMgPQorIEFMVElWRUNfRkxBRyA9CisgZW5kaWYKKyAKK0BAIC04OCw4ICs5MCw4IEBACisgdGVzdF9pc2FfMl8wNl9wYXJ0M19DRkxBR1MgPSAkKEFNX0NGTEFHUykgLVdpbmxpbmUgLVdhbGwgLU8gLWcgLW1yZWduYW1lcyAkKFZTWF9GTEFHKSBcCisgCQkJQEZMQUdfTTY0QCAkKEFMVElWRUNfRkxBRykgJChCVUlMRF9GTEFHX1ZTWCkKKyAKKy1qbV9pbnNuc19DRkxBR1MgPSAkKEFNX0NGTEFHUykgLVdpbmxpbmUgLVdhbGwgLU8gLWcgLW1yZWduYW1lcyAtbWFsdGl2ZWMgXAorLQkJCUBGTEFHX002NEAgJChBTFRJVkVDX0ZMQUcpCisram1faW5zbnNfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIC1XaW5saW5lIC1XYWxsIC1PIC1nIC1tcmVnbmFtZXMgXAorKwkJCUBGTEFHX002NEAgJChBTFRJVkVDX0ZMQUcpICQoQlVJTERfRkxBR19BTFRJVkVDKQorIAorIHRlc3RfZGZwMV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgLVdpbmxpbmUgLVdhbGwgLU8gLWcgLW1yZWduYW1lcyAkKERGUF9GTEFHKSBcCisgCQkJQEZMQUdfTTY0QCAkKEJVSUxEX0ZMQUdTX0RGUCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3JlbW92ZS1hcm0tdmFyaWFudC1zcGVjaWZpYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3JlbW92ZS1hcm0tdmFyaWFudC1zcGVjaWZpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzE5YWI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcmVtb3ZlLWFybS12YXJpYW50LXNwZWNpZmljLnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK1JlbW92ZSBhcm0gdGVzdHMgdGhhdCBkb24ndCBjb21waWxlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitDb3JyZWN0cyB0aGUgb3JpZ2luYWwgY29tbWl0IGZvciB0aGUgcGF0Y2ggdGhhdCByZW1vdmVkIEFSTSBwdGVzdCBDRkxBR1MKK3NldHRpbmdzLiBTaW5jZSB0aGUgZmxhZ3MgY291bGQgYmUgc2V0IGJ5IGEgdXNlciwgdGhlIGZsYWdzIHNob3VsZAorYmUga2VwdCBpbiBwbGFjZSBkdXJpbmcgY29tcGlsYXRpb24uICBCeSBrZWVwaW5nIHRoZSBvcmlnaW5hbCB1cC1zdHJlYW0KK0NGTEFHUyBmb3IgdGhlIHRlc3RzLCB0aGVuIGFkZGl0aW9uYWwgdGVzdHMgc3VjY2Vzc2Z1bGx5IGNvbXBpbGUKK2ZvciBhbGwgdGVzdGVkIEFSTSB0dW5pbmdzLgorCitIb3dldmVyLCB0aGVyZSB3ZXJlIHN0aWxsIHR3byB0ZXN0cyBsaXN0ZWQgYmVsb3cgdGhhdCBkaWQgbm90IGNvbXBpbGUKK2ZvciBhbnkgYmVhZ2xlYm9uZSB0dW5pbmcgdGhhdCBpcyB2YWxpZCBmb3IgdmFsZ3JpbmQuIFdpdGggdGhlIHVwZGF0ZWQKK3BhdGNoLCB0aGUgc2V0IG9mIGV4Y2x1ZGVkIEFSTSBwdGVzdHMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgYnVpbGQKK2ZhaWx1cmVzIGFyZToKKyAgaW50ZGl2IC0gZmFpbHMgZm9yIGFsbCBiZWFnbGVib25lIHR1bmluZ3Mgd2l0aCAyIGVycm9yczoKKyAge3N0YW5kYXJkIGlucHV0fTooNDAgb3IgNDEpOiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90CisgICAgICAgc3VwcG9ydCBUaHVtYiBtb2RlIGB1ZGl2IHIzLHI5LHIxMCcKKyAge3N0YW5kYXJkIGlucHV0fTooNzIgb3IgNzMpOiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90CisgICAgICAgc3VwcG9ydCBUaHVtYiBtb2RlIGBzZGl2IHIzLHI5LHIxMCcKKworICB2Y3Z0X2ZpeGVkX2Zsb2F0X1ZGUCAtIGZhaWxzIGZvciBhbGwgYmVhZ2xlYm9uZSB0dW5pbmdzIGluIG9uZSBvZgorICB0d28gd2F5czoKKyAgICB3aXRoIG5lb24gdHVuaW5nICgtbWZwdT1uZW9uKSBmYWlscyB3aXRoIEludGVybmFsIENvbXBpbGVyIEVycm9yCisgICAgd2l0aG91dCBuZW9uIHR1bmluZyBmYWlscyB3aXRoIDMgZXJyb3JzOgorICAgIHtzdGFuZGFyZCBpbnB1dH06MzM6IEVycm9yOiBzZWxlY3RlZCBGUFUgZG9lcyBub3Qgc3VwcG9ydAorICAgICAgaW5zdHJ1Y3Rpb24gLS0gYHZjdnQuZjMyLnMzMiBzMTUsczE1LCMxJworICAgIHtzdGFuZGFyZCBpbnB1dH06NTg6IEVycm9yOiBzZWxlY3RlZCBGUFUgZG9lcyBub3Qgc3VwcG9ydAorICAgICAgaW5zdHJ1Y3Rpb24gLS0gYHZjdnQuZjMyLnMzMiBzMTUsczE1LCMzMicKKyAgICB7c3RhbmRhcmQgaW5wdXR9OjEzNjogRXJyb3I6IHNlbGVjdGVkIEZQVSBkb2VzIG5vdCBzdXBwb3J0CisgICAgICBpbnN0cnVjdGlvbiAtLSBgdmN2dC5mMzIudTMyIHMxNSxzMTUsIzEnCisKK0FmdGVyIGFwcGx5aW5nIHRoaXMgY29tbWl0LCB0aGUgdmFsZ3JpbmQgQVJNIHB0ZXN0cyBjb21waWxlIHdpdGhvdXQKK2Vycm9ycyBmb3IgdHVuaW5nczoKKyAgYXJtdjdbdF1baGZdW2JdWy1uZW9uXSBjb3J0ZXhhOFt0XVtoZl1bLW5lb25dCit3aGVyZSB0aGUgdHVuaW5nIFtvcHRpb25dIHdhcyBzdWNjZXNzZnVsbHkgY29tcGlsZWQsIGJvdGggd2l0aAorYW5kIHdpdGhvdXQgdGhlICdvcHRpb24nLCBhbmQgaW4gY29tYmluYXRpb24gd2l0aCBhbGwgb3RoZXIgb3B0aW9ucy4KKworU2lnbmVkLW9mZi1ieTogRGF2ZSBMZXJuZXIgPGRhdmUubGVybmVyQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiB2YWxncmluZC0zLjEwLjEvbm9uZS90ZXN0cy9hcm0vTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB2YWxncmluZC0zLjEwLjEub3JpZy9ub25lL3Rlc3RzL2FybS9NYWtlZmlsZS5hbQkyMDE1LTA1LTE5IDE1OjExOjU5LjIyNDg0MjkyNyAtMDUwMAorKysrIHZhbGdyaW5kLTMuMTAuMS9ub25lL3Rlc3RzL2FybS9NYWtlZmlsZS5hbQkyMDE1LTA1LTE5IDE1OjE0OjIwLjgwODg0NzAyOCAtMDUwMAorQEAgLTE3LDkgKzE3LDEzIEBACisgCXZmcC5zdGRvdXQuZXhwIHZmcC5zdGRlcnIuZXhwIHZmcC52Z3Rlc3QgXAorIAl2ZnB2NF9mbWEuc3Rkb3V0LmV4cCB2ZnB2NF9mbWEuc3RkZXJyLmV4cCB2ZnB2NF9mbWEudmd0ZXN0CisgCisrIyBSZW1vdmUgdGhlIGZvbGxvd2luZyB0ZXN0cyB3aGljaCBjYXVzZSBjb21waWxlciBlcnJvcnMgZm9yIGFsbCB0dW5pbmdzCisrIyAgYXZhaWxhYmxlIGZvciBiZWFnbGUgYm9uZSAoc2VlIHJlbW92ZS1hcm0tdmFyaWFudC1zcGVjaWZpYy5wYXRjaCk6CisrIwlpbnRkaXYKKysjCXZjdnRfZml4ZWRfZmxvYXRfVkZQCisrCisgY2hlY2tfUFJPR1JBTVMgPSBcCisgCWFsbGV4ZWMgXAorLQlpbnRkaXYgXAorIAlsZHJ0IFwKKyAJbGRydF9hcm0gXAorIAluZW9uMTI4IFwKK0BAIC0yNyw3ICszMSw2IEBACisgCXY2aW50QVJNIFwKKyAJdjZpbnRUaHVtYiBcCisgCXY2bWVkaWEgXAorLQl2Y3Z0X2ZpeGVkX2Zsb2F0X1ZGUCBcCisgCXZmcCBcCisgCXZmcHY0X2ZtYQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcmVtb3ZlLXBwYy10ZXN0cy1mYWlsaW5nLWJ1aWxkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcmVtb3ZlLXBwYy10ZXN0cy1mYWlsaW5nLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNjQwZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9yZW1vdmUtcHBjLXRlc3RzLWZhaWxpbmctYnVpbGQucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorUmVtb3ZlIHRlc3QgYXBwcyBub3QgYnVpbGRpbmcgd2l0aCBwcGMgYW5kIFBURVNUCisKK0ZvciBtcGM4MzE2LXJkYiBpbiBub25lL3Rlc3RzL3BwYzMyLCB0aGUgb2UgY29tcGlsZXIgb3B0aW9ucyBhcmUKK2luY29uc2lzdGVudCB3aXRoIHRoZSBpbXBvc2VkIHRlc3QgY29tcGlsZXIgb3B0aW9ucyBnZW5lcmF0aW5nIGVycm9ycworYXMgZm9sbG93czoKK3Rlc3RfaXNhXzJfMDdfcGFydDEKK3Rlc3RfaXNhXzJfMDdfcGFydDIKK3Rlc3RfdG0KK3Rlc3RfdG91Y2hfdG0KKyAgICA6IHVucmVjb2duaXplZCBjb21tYW5kIGxpbmUgb3B0aW9uICctbWh0bScKKworam0taW5zbnMKK3Rlc3RWTVgKKyAgICA6IEFsdGlWZWMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHRhcmdldAorCitGb3IgdGhlIGZvbGxvd2luZyB0ZXN0cywgdGhlaXIgaW5saW5lIGFzc2VtYmxlciBpcyBpbmNvbnNpc3RlbnQgd2l0aAordGhlIHBwY2UzMDBjMyB2YXJpYW50Ogorcm91bmQuYzozOTMKK3Bvd2VyNStfcm91bmQuYzo5OAorICAgIDogaW1wb3NzaWJsZSBjb25zdHJhaW50IGluICdhc20nCisKK0ZvciB0aGUgZm9sbG93aW5nIHRlc3RzLCB3aXRoIGJvdGggbXBjODMxNi1yZGIgYW5kIHdpdGggcWVtdXBwYyBic3AsCit0aGUgaW5saW5lIGFzc2VtYmVyIGlzIGluY29uc2lzdGVudCB3aXRoIHRoZSBvZSBjb21waWxlciBtYWNoaW5lCit0dW5pbmc6CitJbiBtZW1jaGVjay90ZXN0cy9wcGMzMgorIHBvd2VyX0lTQTJfMDUuYzo1NgorSW4gbm9uZS90ZXN0cy9wcGMzMgorIHRlc3RfZGZwMS5jOjg1CisgdGVzdF9kZnAyLmM6MTYwCisgdGVzdF9kZnAzLmM6MTU3CisgdGVzdF9kZnA0LmM6NzMKKyB0ZXN0X2RmcDUuYzo3MworICAgIDogaW1wb3NzaWJsZSBjb25zdHJhaW50IGluICdhc20nCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBEYXZlIExlcm5lciA8ZGF2ZS5sZXJuZXJAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHZhbGdyaW5kLTMuMTAuMC9tZW1jaGVjay90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHZhbGdyaW5kLTMuMTAuMC5vcmlnL21lbWNoZWNrL3Rlc3RzL3BwYzMyL01ha2VmaWxlLmFtCisrKysgdmFsZ3JpbmQtMy4xMC4wL21lbWNoZWNrL3Rlc3RzL3BwYzMyL01ha2VmaWxlLmFtCitAQCAtNyw4ICs3LDcgQEAgRVhUUkFfRElTVCA9ICQobm9pbnN0X1NDUklQVFMpIFwKKyAJcG93ZXJfSVNBMl8wNS5zdGRlcnIuZXhwIHBvd2VyX0lTQTJfMDUuc3Rkb3V0LmV4cCBwb3dlcl9JU0EyXzA1LnZndGVzdCBcCisgCXBvd2VyX0lTQTJfMDUuc3Rkb3V0LmV4cF9XaXRob3V0X0ZQUE8KKyAKKy1jaGVja19QUk9HUkFNUyA9IFwKKy0JcG93ZXJfSVNBMl8wNQorK2NoZWNrX1BST0dSQU1TID0gCisgCisgcG93ZXJfSVNBMl8wNV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChXRVJST1IpIC1XaW5saW5lIC1XYWxsIC1Xc2hhZG93IC1nIFwKKyAJCS1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIEBGTEFHX00zMkAKK0luZGV4OiB2YWxncmluZC0zLjEwLjAvbm9uZS90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHZhbGdyaW5kLTMuMTAuMC5vcmlnL25vbmUvdGVzdHMvcHBjMzIvTWFrZWZpbGUuYW0KKysrKyB2YWxncmluZC0zLjEwLjAvbm9uZS90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQorQEAgLTUyLDE2ICs1Miw4IEBAIGNoZWNrX1BST0dSQU1TID0gXAorIAlhbGxleGVjIFwKKyAJYnVnMTI5MzkwLXBwYzMyIFwKKyAJYnVnMTM5MDUwLXBwYzMyIFwKKy0JbGRzdHJldiBsc3cgam0taW5zbnMgbWZ0b2NyZiBtY3JmcyByb3VuZCB0ZXN0X2Z4IHRlc3RfZ3ggXAorLQl0ZXN0Vk1YIHR3aSB0dyB4bGNfZGJsX3UzMiBwb3dlcjUrX3JvdW5kIHBvd2VyNl9iY21wIFwKKy0JdGVzdF9pc2FfMl8wNl9wYXJ0MSBcCistCXRlc3RfaXNhXzJfMDZfcGFydDIgXAorLQl0ZXN0X2lzYV8yXzA2X3BhcnQzIFwKKy0JdGVzdF9kZnAxIHRlc3RfZGZwMiB0ZXN0X2RmcDMgdGVzdF9kZnA0IHRlc3RfZGZwNSBcCistCXRlc3RfaXNhXzJfMDdfcGFydDEgXAorLQl0ZXN0X2lzYV8yXzA3X3BhcnQyIFwKKy0JdGVzdF90bSBcCistCXRlc3RfdG91Y2hfdG0gXAorKwlsZHN0cmV2IGxzdyBtZnRvY3JmIG1jcmZzIHRlc3RfZnggdGVzdF9neCBcCisrCXR3aSB0dyB4bGNfZGJsX3UzMiBwb3dlcjZfYmNtcCBcCisgCWxkc3RfbXVsdGlwbGUgXAorIAlkYXRhLWNhY2hlLWluc3RydWN0aW9ucworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY5YTcyZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9ydW4tcHRlc3QKQEAgLTAsMCArMSwxMiBAQAorIyEvYmluL3NoCisKKyMgcnVuLXB0ZXN0IC0gJ3B0ZXN0JyB0ZXN0IGluZnJhc3RydWN0dXJlIHNoZWxsIHNjcmlwdCB0aGF0CisjICAgd3JhcHMgdGhlIHZhbGdyaW5kIHJlZ3Jlc3Npb24gc2NyaXB0IHZnX3JlZ3Rlc3QuIAorIyAgIE11c3QgYmUgcnVuIGluIHRoZSAvdXNyL2xpYi92YWxncmluZC9wdGVzdCBkaXJlY3RvcnkuIAorIworIyBEYXZlIExlcm5lciA8ZGF2ZS5sZXJuZXJAd2luZHJpdmVyLmNvbT4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworVkFMR1JJTkRMSUI9QGxpYmRpckAvdmFsZ3JpbmQKK3Rlc3RzL3ZnX3JlZ3Rlc3QgLS1hbGwgXAorICAgIC0tdmFsZ3JpbmQ9L3Vzci9iaW4vdmFsZ3JpbmQgLS12YWxncmluZC1saWI9JFZBTEdSSU5ETElCIFwKKwktLXlvY3RvLXB0ZXN0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9zZXBidWlsZGZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3NlcGJ1aWxkZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYjBlZjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9zZXBidWlsZGZpeC5wYXRjaApAQCAtMCwwICsxLDIzNSBAQAorRml4IG91dCBvZiB0cmVlIGJ1aWxkcy4gVGhlIHBhdGhzIHRvIHRoZXNlIGZpbGVzIG5lZWQgdG8gYmUgZnVsbHkgc3BlY2lmaWVkIGluCit0aGUgb3V0IG9mIHRyZWUgYnVpbGQgY2FzZS4gZ2xpYmMtMi5YLnN1cHAgaXMgYSBnZW5lcmF0ZWQgZmlsZSBzbyB0aGUgZnVsbCBwYXRoCitpcyBkZWxpYmVyYXRlbHkgbm90IHNwZWNpZmllZCBpbiB0aGF0IGNhc2UuCisKK1JQIDIwMTMvMDMvMjMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB2YWxncmluZC0zLjkuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB2YWxncmluZC0zLjkuMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHZhbGdyaW5kLTMuOS4wL2NvbmZpZ3VyZS5hYworQEAgLTMyNSwyNiArMzI1LDI2IEBAIGNhc2UgIiR7aG9zdF9vc30iIGluCisgCSAgICAgOS4qKQorIAkJICBBQ19NU0dfUkVTVUxUKFtEYXJ3aW4gOS54ICgke2tlcm5lbH0pIC8gTWFjIE9TIFggMTAuNSBMZW9wYXJkXSkKKyAJCSAgQUNfREVGSU5FKFtEQVJXSU5fVkVSU10sIERBUldJTl8xMF81LCBbRGFyd2luIC8gTWFjIE9TIFggdmVyc2lvbl0pCistCQkgIERFRkFVTFRfU1VQUD0iZGFyd2luOS5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW45LWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2Rhcndpbjkuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW45LWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJCSAgOzsKKyAJICAgICAxMC4qKQorIAkJICBBQ19NU0dfUkVTVUxUKFtEYXJ3aW4gMTAueCAoJHtrZXJuZWx9KSAvIE1hYyBPUyBYIDEwLjYgU25vdyBMZW9wYXJkXSkKKyAJCSAgQUNfREVGSU5FKFtEQVJXSU5fVkVSU10sIERBUldJTl8xMF82LCBbRGFyd2luIC8gTWFjIE9TIFggdmVyc2lvbl0pCistCQkgIERFRkFVTFRfU1VQUD0iZGFyd2luMTAuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCQkgIERFRkFVTFRfU1VQUD0iZGFyd2luMTAtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwkJICBERUZBVUxUX1NVUFA9IiRzcmNkaXIvZGFyd2luMTAuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW4xMC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCQkgIDs7CisgCSAgICAgMTEuKikKKyAJCSAgQUNfTVNHX1JFU1VMVChbRGFyd2luIDExLnggKCR7a2VybmVsfSkgLyBNYWMgT1MgWCAxMC43IExpb25dKQorIAkJICBBQ19ERUZJTkUoW0RBUldJTl9WRVJTXSwgREFSV0lOXzEwXzcsIFtEYXJ3aW4gLyBNYWMgT1MgWCB2ZXJzaW9uXSkKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW4xMS5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW4xMC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW4xMS5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2RhcndpbjEwLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJCSAgOzsKKyAJICAgICAxMi4qKQorIAkJICBBQ19NU0dfUkVTVUxUKFtEYXJ3aW4gMTIueCAoJHtrZXJuZWx9KSAvIE1hYyBPUyBYIDEwLjggTW91bnRhaW4gTGlvbl0pCisgCQkgIEFDX0RFRklORShbREFSV0lOX1ZFUlNdLCBEQVJXSU5fMTBfOCwgW0RhcndpbiAvIE1hYyBPUyBYIHZlcnNpb25dKQorLQkJICBERUZBVUxUX1NVUFA9ImRhcndpbjEyLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQkJICBERUZBVUxUX1NVUFA9ImRhcndpbjEwLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2RhcndpbjEyLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwkJICBERUZBVUxUX1NVUFA9IiRzcmNkaXIvZGFyd2luMTAtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAkJICA7OworICAgICAgICAgICAgICAqKSAKKyAJCSAgQUNfTVNHX1JFU1VMVChbdW5zdXBwb3J0ZWQgKCR7a2VybmVsfSldKQorQEAgLTc5OSwxMjQgKzc5OSwxMjQgQEAgY2FzZSAiJHtHTElCQ19WRVJTSU9OfSIgaW4KKyAgICAgIDIuMikKKyAJQUNfTVNHX1JFU1VMVCgyLjIgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMl0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4yLnhdKQorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMi5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjItTGludXhUaHJlYWRzLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjIuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjItTGludXhUaHJlYWRzLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAKKyAgICAgIDIuMykKKyAJQUNfTVNHX1JFU1VMVCgyLjMgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfM10sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4zLnhdKQorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMy5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMy5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgCisgICAgICAyLjQpCisgCUFDX01TR19SRVNVTFQoMi40IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzRdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuNC54XSkKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworIAorICAgICAgMi41KQorIAlBQ19NU0dfUkVTVUxUKDIuNSBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl81XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjUueF0pCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi41LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi41LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuNikKKyAJQUNfTVNHX1JFU1VMVCgyLjYgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfNl0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi42LnhdKQorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuNi5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuNi5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjcpCisgCUFDX01TR19SRVNVTFQoMi43IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzddLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuNy54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi44KQorIAlBQ19NU0dfUkVTVUxUKDIuOCBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl84XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjgueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuOSkKKyAJQUNfTVNHX1JFU1VMVCgyLjkgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfOV0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi45LnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjEwKQorIAlBQ19NU0dfUkVTVUxUKDIuMTAgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMTBdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTAueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuMTEpCisgCUFDX01TR19SRVNVTFQoMi4xMSBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xMV0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xMS54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorICAgICAgICAgOzsKKyAgICAgIDIuMTIpCisgCUFDX01TR19SRVNVTFQoMi4xMiBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xMl0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xMi54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi4xMykKKyAJQUNfTVNHX1JFU1VMVCgyLjEzIGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzEzXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjEzLnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjE0KQorIAlBQ19NU0dfUkVTVUxUKDIuMTQgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMTRdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTQueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuMTUpCisgCUFDX01TR19SRVNVTFQoMi4xNSBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xNV0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xNS54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi4xNikKKyAJQUNfTVNHX1JFU1VMVCgyLjE2IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzE2XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjE2LnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjE3KQorIAlBQ19NU0dfUkVTVUxUKDIuMTcgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMTddLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTcueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuMTgpCisgCUFDX01TR19SRVNVTFQoMi4xOCBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xOF0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xOC54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgZGFyd2luKQorIAlBQ19NU0dfUkVTVUxUKERhcndpbikKK0BAIC05MjYsNyArOTI2LDcgQEAgY2FzZSAiJHtHTElCQ19WRVJTSU9OfSIgaW4KKyAgICAgIGJpb25pYykKKyAJQUNfTVNHX1JFU1VMVChCaW9uaWMpCisgCUFDX0RFRklORShbQklPTklDX0xJQkNdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIEJpb25pY10pCistCURFRkFVTFRfU1VQUD0iYmlvbmljLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvYmlvbmljLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworIAorICAgICAgKikKK0BAIC05NDMsMTEgKzk0MywxMSBAQCBBQ19TVUJTVChHTElCQ19WRVJTSU9OKQorICMgYXR0ZW1wdCB0byBkZXRlY3Qgd2hldGhlciBzdWNoIGxpYnJhcmllcyBhcmUgaW5zdGFsbGVkIG9uIHRoZQorICMgYnVpbGQgbWFjaGluZSAob3IgZXZlbiBpZiBhbnkgWCBmYWNpbGl0aWVzIGFyZSBwcmVzZW50KTsganVzdAorICMgYWRkIHRoZSBzdXBwcmVzc2lvbnMgYW50aWRpc2lycmVnYXJkbGVzcy4KKy1ERUZBVUxUX1NVUFA9InhmcmVlLTQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistREVGQVVMVF9TVVBQPSJ4ZnJlZS0zLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorK0RFRkFVTFRfU1VQUD0iJHNyY2Rpci94ZnJlZS00LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorK0RFRkFVTFRfU1VQUD0iJHNyY2Rpci94ZnJlZS0zLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAorICMgQWRkIGdsaWJjIGFuZCBYMTEgc3VwcHJlc3Npb25zIGZvciBleHAtc2djaGVjaworLURFRkFVTFRfU1VQUD0iZXhwLXNnY2hlY2suc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrREVGQVVMVF9TVVBQPSIkc3JjZGlyL2V4cC1zZ2NoZWNrLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC92YWxncmluZC1yZW1vdmUtcnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC92YWxncmluZC1yZW1vdmUtcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcyZTljYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3ZhbGdyaW5kLXJlbW92ZS1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDI1IEBACisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgY29uZmlnXQorU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogdmFsZ3JpbmQtMy4xMC4wL25vbmUvdGVzdHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB2YWxncmluZC0zLjEwLjAub3JpZy9ub25lL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgdmFsZ3JpbmQtMy4xMC4wL25vbmUvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0yODAsNyArMjgwLDYgQEAgdGhyZWFkZWRfZm9ya19MREFERAk9IC1scHRocmVhZAorIHRocmVhZGVkZXJybm9fTERBREQJPSAtbHB0aHJlYWQKKyB0bHNfU09VUkNFUwkJPSB0bHMuYyB0bHMyLmMKKyB0bHNfREVQRU5ERU5DSUVTCT0gdGxzLnNvIHRsczIuc28KKy10bHNfTERGTEFHUwkJPSAtV2wsLXJwYXRoLCQoYWJzX3RvcF9idWlsZGRpcikvbm9uZS90ZXN0cworIHRsc19MREFERAkJPSB0bHMuc28gdGxzMi5zbyAtbHB0aHJlYWQKKyB0bHNfc29fU09VUkNFUwkJPSB0bHNfc28uYworIHRsc19zb19ERVBFTkRFTkNJRVMJPSB0bHMyLnNvCitAQCAtMjg4LDcgKzI4Nyw3IEBAIGlmIFZHQ09ORl9PU19JU19EQVJXSU4KKyAgdGxzX3NvX0xERkxBR1MJCT0gLWR5bmFtaWMgLWR5bmFtaWNsaWIgLWFsbF9sb2FkIC1mcGljCisgIHRsc19zb19MREFERAkJPSBgcHdkYC90bHMyLnNvCisgZWxzZQorLSB0bHNfc29fTERGTEFHUwkJPSAtV2wsLXJwYXRoLCQoYWJzX3RvcF9idWlsZGRpcikvbm9uZS90ZXN0cyAtc2hhcmVkIC1mUElDCisrIHRsc19zb19MREZMQUdTCQk9IC1zaGFyZWQgLWZQSUMKKyAgdGxzX3NvX0xEQURECQk9IHRsczIuc28KKyBlbmRpZgorIHRsc19zb19DRkxBR1MJCT0gJChBTV9DRkxBR1MpIC1mUElDCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZF8zLjEwLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZF8zLjEwLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZiYTk3OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kXzMuMTAuMS5iYgpAQCAtMCwwICsxLDEwNSBAQAorU1VNTUFSWSA9ICJWYWxncmluZCBtZW1vcnkgZGVidWdnZXIgYW5kIGluc3RydW1lbnRhdGlvbiBmcmFtZXdvcmsiCitIT01FUEFHRSA9ICJodHRwOi8vdmFsZ3JpbmQub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3ZhbGdyaW5kLm9yZy9zdXBwb3J0L2J1Z19yZXBvcnRzLmh0bWwiCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrICYgQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzQ2MDgyMTY3YTMxNGQ3ODVkMDEyYTI0NDc0OGQ4MDMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9wdWJfdG9vbF9iYXNpY3MuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI5O21kNT1lNzA3MTkyOWE1MGQ0YjBmYzI3YTMwMTRiMzE1YjBmNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3ZhbGdyaW5kLmg7YmVnaW5saW5lPTE7ZW5kbGluZT01NjttZDU9OTJkZjhhMWJkZTU2ZmUyYWY3MDkzMWZmNTVmNjYyMmYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5ET0NTO21kNT04ZmRlYjVhYmRiMjM1YTA4ZTc2ODM1ZjhmMzI2MDIxNSIKKworWDExREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSIKK0RFUEVORFMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnJHtYMTFERVBFTkRTfScsICcnLCBkKX0gXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJ2Jvb3N0JywgJycsIGQpfSBcCisgICAgICAgICIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LnZhbGdyaW5kLm9yZy9kb3dubG9hZHMvdmFsZ3JpbmQtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9maXhlZC1wZXJsLXBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQWRkZWQtc3VwcG9ydC1mb3ItUFBDLWluc3RydWN0aW9ucy1tZmF0YnUtbWZhdGJsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NlcGJ1aWxkZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dsaWJjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZvcmNlLW5vc3RhYnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLWFybS12YXJpYW50LXNwZWNpZmljLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS1wcGMtdGVzdHMtZmFpbGluZy1idWlsZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly92YWxncmluZC1yZW1vdmUtcnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZW5hYmxlLmJ1aWxkaW5nLm9uLjQueC5rZXJuZWwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWRkLXB0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3Bhc3MtbWFsdGl2ZWMtb25seS1pZi1pdC1zdXBwb3J0ZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdmFsZ3JpbmQtRW5hYmxlLXJ0X3NpZ3BlbmRpbmctc3lzY2FsbC1vbi1wcGM2NC1saW51eC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjBkZGFlOTYyYmM3OWU3Yzk1Y2ZjNDY2NzI0NTcwN2YiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmEyNTNkYzI2ZGRiNjYxYjYyNjlkZjU4MTQ0ZWZmNjA3ZWEzZjc2YTliY2ZlNTc0YjBjNzcyNmUxZGZjYjk5NyIKKworQ09NUEFUSUJMRV9IT1NUID0gJyhpLjg2fHg4Nl82NHxtaXBzfHBvd2VycGN8cG93ZXJwYzY0KS4qLWxpbnV4JworQ09NUEFUSUJMRV9IT1NUX2FybXY3YSA9ICdhcm0uKi1saW51eCcKKworUFIgPSAicjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0CisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS10bHMgLS13aXRob3V0LW1waWNjIgorRVhUUkFfT0VDT05GX2FybXY3YSA9ICItLWVuYWJsZS10bHMgLWhvc3Q9YXJtdjctbm9uZS1saW51eC1nbnVlYWJpIC0td2l0aG91dC1tcGljYyIKK0VYVFJBX09FQ09ORiArPSAiJHtAWyctLWVuYWJsZS1vbmx5MzJiaXQnLCctLWVuYWJsZS1vbmx5NjRiaXQnXVtkLmdldFZhcignU0lURUlORk9fQklUUycsIFRydWUpICE9ICczMiddfSIKK0VYVFJBX09FTUFLRSA9ICItdyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgIGluc3RhbGwgLW0gNjQ0ICR7Qn0vZGVmYXVsdC5zdXBwICR7RH0vJHtsaWJkaXJ9L3ZhbGdyaW5kLworfQorCitSREVQRU5EU18ke1BOfSArPSAicGVybCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtQTn0vKi8uZGVidWcvKiIKKworIyB2YWxncmluZCBuZWVkcyBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3IgbGQuc28gYXQgcnVudGltZSBpbiBvcmRlciB0bworIyByZWRpcmVjdCBmdW5jdGlvbnMgbGlrZSBzdHJsZW4uCitSUkVDT01NRU5EU18ke1BOfSArPSAiJHtUQ0xJQkN9LWRiZyIKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiBzZWQgcGVybCBnbGliYy11dGlscyBwZXJsLW1vZHVsZS1maWxlLWdsb2IiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisgICAgb2VfcnVubWFrZSBjaGVjayBDRkxBR1M9IiR7Q0ZMQUdTfSAtTzAiIENYWEZMQUdTPSIke0NYWEZMQUdTfSAtTzAiCit9CisKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKyAgICBjaG1vZCAreCAke0J9L3Rlc3RzL3ZnX3JlZ3Rlc3QKKworICAgICMgVGhlIHRlc3QgYXBwbGljYXRpb24gYmluYXJpZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZC4KKyAgICAjIEdyYWIgdGhlbSBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCisgICAgIworICAgICMgVGhlIHJlZ3Jlc3Npb24gdGVzdHMgcmVxdWlyZSBzY3JpcHRzIGFuZCBkYXRhIGZpbGVzIHRoYXQgYXJlIG5vdAorICAgICMgY29waWVkIHRvIHRoZSBidWlsZCBkaXJlY3RvcnkuICBUaGV5IG11c3QgYmUgY29waWVkIGZyb20gdGhlCisgICAgIyBzb3VyY2UgZGlyZWN0b3J5LiAKKyAgICBzYXZlZF9kaXI9JFBXRAorICAgIGZvciBwYXJlbnRfZGlyIGluICR7U30gJHtCfSA7IGRvCisgICAgICAgIGNkICRwYXJlbnRfZGlyCisKKyAgICAgICAgIyBleGNsdWRlIHNoZWxsIG9yIHRoZSBwYWNrYWdlIHdvbid0IGluc3RhbGwKKyAgICAgICAgcm0gLXJmIG5vbmUvdGVzdHMvc2hlbGwqIDI+L2Rldi9udWxsCisKKyAgICAgICAgc3ViZGlycz0idGVzdHMgY2FjaGVncmluZC90ZXN0cyBjYWxsZ3JpbmQvdGVzdHMgZHJkL3Rlc3RzIGhlbGdyaW5kL3Rlc3RzIG1hc3NpZi90ZXN0cyBtZW1jaGVjay90ZXN0cyBub25lL3Rlc3RzIgorCisgICAgICAgICMgR2V0IHRoZSB2ZyB0ZXN0IHNjcmlwdHMsIGZpbHRlcnMsIGFuZCBleHBlY3RlZCBmaWxlcworICAgICAgICBmb3IgZGlyIGluICRzdWJkaXJzIDsgZG8KKyAgICAgICAgICAgIGZpbmQgJGRpciB8IGNwaW8gLXB2ZHUgJHtEfSR7UFRFU1RfUEFUSH0KKyAgICAgICAgZG9uZQorICAgICAgICBjZCAkc2F2ZWRfZGlyCisgICAgZG9uZQorCisgICAgIyBjbGVhbiBvdXQgYnVpbGQgYXJ0aWZhY3RzIGJlZm9yZSBidWlsZGluZyB0aGUgcnBtCisgICAgZmluZCAke0R9JHtQVEVTVF9QQVRIfSBcCisgICAgICAgICBcKCAtbmFtZSAiTWFrZWZpbGUqIiBcCisgICAgICAgIC1vIC1uYW1lICIqLm8iIFwKKyAgICAgICAgLW8gLW5hbWUgIiouYyIgXAorICAgICAgICAtbyAtbmFtZSAiKi5TIiBcCisgICAgICAgIC1vIC1uYW1lICIqLmgiIFwpIFwKKyAgICAgICAgLWV4ZWMgcm0ge30gXDsKKworICAgICMgbmVlZGVkIGJ5IG1hc3NpZiB0ZXN0cworICAgIGNwICR7Qn0vbWFzc2lmL21zX3ByaW50ICR7RH0ke1BURVNUX1BBVEh9L21hc3NpZi9tc19wcmludAorCisgICAgIyBoYW5kbGUgbXVsdGlsaWIKKyAgICBzZWQgLWkgczpAbGliZGlyQDoke2xpYmRpcn06ZyAke0R9JHtQVEVTVF9QQVRIfS9ydW4tcHRlc3QKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8vZmlsZXMvY2F0YWxvZy54bWwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy94bWx0by9maWxlcy9jYXRhbG9nLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yjg4MzNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8vZmlsZXMvY2F0YWxvZy54bWwKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKzxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKzxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5vcmcveG1sLyIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgWE1MIEV4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTkwMzE1IiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRFREIENBTFMgVGFibGUgTW9kZWwgWE1MIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRUxFTUVOVFMgRG9jQmsgWE1MIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRFREIERvY0Jvb2sgWE1MIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRU5USVRJRVMgRG9jQmsgWE1MIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRFREIERvY0JrIFhNTCIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYWwgV2Fsc2gvL0V4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTYwNDMwIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBDQUxTIFRhYmxlIE1vZGVsIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlVVJJIHVyaVN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvIiBjYXRhbG9nPSIuL2RvY2Jvb2steHNsLnhtbCIvPgorPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8iIGNhdGFsb2c9Ii4vZG9jYm9vay14c2wueG1sIi8+Cis8L2NhdGFsb2c+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy94bWx0by94bWx0by0wLjAuMjYvY29uZmlndXJlLmluLWRyb3AtdGhlLXRlc3Qtb2YteG1sbGludC1hbmQteHNsdHByb2MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy94bWx0by94bWx0by0wLjAuMjYvY29uZmlndXJlLmluLWRyb3AtdGhlLXRlc3Qtb2YteG1sbGludC1hbmQteHNsdHByb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ1NDdhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL3htbHRvLTAuMC4yNi9jb25maWd1cmUuaW4tZHJvcC10aGUtdGVzdC1vZi14bWxsaW50LWFuZC14c2x0cHJvYy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitjb25maWd1cmUuaW46IGRyb3AgdGhlIHRlc3Qgb2YgeG1sbGludCBhbmQgeHNsdHByb2MKKworVGhlIHRlc3QgaXMgdW5uZWNlc3NhcnksIHRoZSB4bWxsaW50IGFuZCB4c2x0cHJvYyB3ZXJlIGV4cGxpY2l0bHkKK2FkZGVkIHRvIFJERVBFTkRTLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5pbiB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtNDIsMTAgKzQyLDEwIEBAIEFDX0FSR19WQVIoW0xPQ0FMRV0sIFtOYW1lIGFuZCBwYXRoIG9mIHRoZSBgbG9jYWxlJyBwcm9ncmFtLl0pCisgQUNfUEFUSF9QUk9HKFtMT0NBTEVdLCBbbG9jYWxlXSwgW2xvY2FsZV0pCisgCisgQUNfQVJHX1ZBUihbWE1MTElOVF0sIFtOYW1lIGFuZCBwYXRoIG9mIHRoZSBgeG1sbGludCcgcHJvZ3JhbS5dKQorLUFDX1BBVEhfUFJPRyhbWE1MTElOVF0sIFt4bWxsaW50XSwgW3htbGxpbnRdKQorK2RubCBBQ19QQVRIX1BST0coW1hNTExJTlRdLCBbeG1sbGludF0sIFt4bWxsaW50XSkKKyAKKyBBQ19BUkdfVkFSKFtYU0xUUFJPQ10sIFtOYW1lIGFuZCBwYXRoIG9mIHRoZSBgeHNsdHByb2MnIHByb2dyYW0uXSkKKy1BQ19QQVRIX1BST0coW1hTTFRQUk9DXSwgW3hzbHRwcm9jXSwgW3hzbHRwcm9jXSkKKytkbmwgQUNfUEFUSF9QUk9HKFtYU0xUUFJPQ10sIFt4c2x0cHJvY10sIFt4c2x0cHJvY10pCisgCisgZG5sCisgZG5sIHRvb2xjaGFpbnMKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy94bWx0by94bWx0b18wLjAuMjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy94bWx0by94bWx0b18wLjAuMjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdhMDE4MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL3htbHRvXzAuMC4yNi5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIkEgc2hlbGwtc2NyaXB0IHRvb2wgZm9yIGNvbnZlcnRpbmcgWE1MIGZpbGVzIHRvIHZhcmlvdXMgZm9ybWF0cyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy94bWx0by8iCitTRUNUSU9OID0gImRvY3MveG1sdG8iCitMSUNFTlNFID0gIkdQTHYyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMveC9tL3htbHRvL3htbHRvLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUuaW4tZHJvcC10aGUtdGVzdC1vZi14bWxsaW50LWFuZC14c2x0cHJvYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jYXRhbG9nLnhtbCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiMGNjYThiZTc4N2JhMDFlMDBjNjE4Y2IzOTBjOTg4YjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2ZkOGQyYTI2MDc3YmUxZDU1NjZkZmUyMmRkNjYwOTlhZTRmNDYwMGRlYTk3ZDZlMTEzYTJjYzViODcwODk3NyIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworIyB4bWx0byBuZWVkcyBnZXRvcHQveG1sbGludC94c2x0cHJvYy9iYXNoIGF0IHJ1bnRpbWUKK1JERVBFTkRTXyR7UE59ID0gImRvY2Jvb2steG1sLWR0ZDQgXAorICAgICAgICAgICAgICAgICAgZG9jYm9vay14c2wtc3R5bGVzaGVldHMgXAorICAgICAgICAgICAgICAgICAgdXRpbC1saW51eCBcCisgICAgICAgICAgICAgICAgICBsaWJ4bWwyIFwKKyAgICAgICAgICAgICAgICAgIGJhc2ggXAorIgorUkRFUEVORFNfJHtQTn1fYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgXAorICAgICAgICAgICAgICAgICAgbGlieHNsdC1iaW4gXAorIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgWE1MTElOVD14bWxsaW50IFhTTFRQUk9DPXhzbHRwcm9jIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3htbC8KKyAgICBpbnN0YWxsIC1tIDc1NSAgJHtXT1JLRElSfS9jYXRhbG9nLnhtbCAke0R9JHtzeXNjb25mZGlyfS94bWwvY2F0YWxvZy54bWwKKyAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS94bWx0byBYTUxfQ0FUQUxPR19GSUxFUz0ke3N5c2NvbmZkaXJ9L3htbC9jYXRhbG9nLnhtbAorfQorCitkb19wb3B1bGF0ZV9zeXNyb290W3JkZXB0YXNrXSA9ICJkb19wb3B1bGF0ZV9zeXNyb290IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveWFzbS95YXNtXzEuMy4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveWFzbS95YXNtXzEuMy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NzAyZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy95YXNtL3lhc21fMS4zLjAuYmIKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJ4ODYgKFNTRSkgYXNzZW1ibGVyIHN1cHBvcnRpbmcgTkFTTSBhbmQgR0FTLXN5bnRheGVzIgorTElDRU5TRSA9ICJCU0QiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnRvcnRhbGwubmV0L3Byb2plY3RzL3lhc20vIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hMTJkODkwMzUwOGZiNmJmZDQ5ZDhkODJjNjE3MGRkOSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LnRvcnRhbGwubmV0L3Byb2plY3RzL3lhc20vcmVsZWFzZXMvJHtCUH0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmM5ZTU4Njc1MWZmNzg5YjM0YjFmMjFkNTcyZDk2YWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2RjZTY2MDFiNDk1ZjViM2Q0NWI1OWY3ZDI0OTJhMzQwZWU3ZTg0YjViZWNhMTdlNDhmODYyNTAyYmQ1NjAzZiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ppc29mcy10b29scy96aXNvZnMtdG9vbHMtbmF0aXZlXzEuMC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvemlzb2ZzLXRvb2xzL3ppc29mcy10b29scy1uYXRpdmVfMS4wLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIxYzA1OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ppc29mcy10b29scy96aXNvZnMtdG9vbHMtbmF0aXZlXzEuMC44LmJiCkBAIC0wLDAgKzEsMjAgQEAKKyMgemlzb2ZzLXRvb2xzLW5hdGl2ZSBPRSBidWlsZCBmaWxlCisjIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBjcmVhdGluZyBjb21wcmVzc2VkIENELVJPTSBmaWxlc3lzdGVtcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9mcmVlY29kZS5jb20vcHJvamVjdHMvemlzb2ZzLXRvb2xzIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitERVBFTkRTID0gInpsaWItbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL3JlcG8vcGtncy96aXNvZnMtdG9vbHMvemlzb2ZzLXRvb2xzLSR7UFZ9LnRhci5iejIvMmQwZWQ4YzlhMWY2MGI0NWY5NDliMTM2ZjliZTFmNmMvemlzb2ZzLXRvb2xzLSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyZDBlZDhjOWExZjYwYjQ1Zjk0OWIxMzZmOWJlMWY2YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhZTRlNTNlNDkxNDkzNGQ0MTY2MDI0OGZiNTlkM2M4NzYxZjFmMWZkMTgwZDVlYzk5M2MxN2RkYjNhZmQwNGYzIgorCitpbmhlcml0IG5hdGl2ZQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBJTlNUQUxMUk9PVD0ke0R9IGJpbmRpcj0ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0LzAwMDEtcmVtb3ZlLWdsaWJjLWFzc3VtcHRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC8wMDAxLXJlbW92ZS1nbGliYy1hc3N1bXB0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYWUyOGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC8wMDAxLXJlbW92ZS1nbGliYy1hc3N1bXB0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0Zyb20gN2Y4MTFkOWM0ZWJjOTQ0NGU2MTNlMjUxYzMxZDZiZjUzN2EyNGRjMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE2OjM1OjMwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHJlbW92ZSBnbGliYyBhc3N1bXB0aW9uCisKK2dsaWJjIHRpbWUuaCBoZWFkZXIgaGFzIGFuIHVuZG9jdW1lbnRlZCBfX2lzbGVhcCBtYWNybwordGhhdCB3ZSBhcmUgdXNpbmcgYW5mIG11c2wgaXMgbWlzc2luZyBpdC4KK1NpbmNlIGl0IGlzIHVuZG9jdW1lbnRlZCAmIGRvZXMgbm90IGFwcGVhcgorb24gYW55IG90aGVyIGxpYmMsIHN0b3AgdXNpbmcgaXQgYW5kIGp1c3QgZGVmaW5lIHRoZSBtYWNybyBpbgorbG9jYWxseSAgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBwYXJzZXRpbWUueSB8IDExICsrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3BhcnNldGltZS55IGIvcGFyc2V0aW1lLnkKK2luZGV4IDcwMDVlODguLjMyNGU2ZDMgMTAwNjQ0CistLS0gYS9wYXJzZXRpbWUueQorKysrIGIvcGFyc2V0aW1lLnkKK0BAIC04LDYgKzgsOSBAQAorIAorICNkZWZpbmUgWVlERUJVRyAxCisgCisrI2RlZmluZSBpc19sZWFwX3llYXIoeSkgXAorKyAgICAoKHkpICUgNCA9PSAwICYmICgoeSkgJSAxMDAgIT0gMCB8fCAoeSkgJSA0MDAgPT0gMCkpCisrCisgc3RydWN0IHRtIGV4ZWN0bTsKKyBzdGF0aWMgaW50IGlzZ210OworIHN0YXRpYyBpbnQgeWVhcnNwZWM7CitAQCAtMjE3LDggKzIyMCw4IEBAIGRhdGUgICAgICAgICAgICA6IG1vbnRoX25hbWUgZGF5X251bWJlcgorIAkJCQkgbW51bSA9PSAxMikgJiYgZG51bSA+IDMxKQorIAkJCSAgICB8fCAoKG1udW0gPT0gIDQgfHwgbW51bSA9PSAgNiB8fCBtbnVtID09ICA5IHx8CisgCQkJICAgICAgICAgbW51bSA9PSAxMSkgJiYgZG51bSA+IDMwKQorLQkJCSAgICB8fCAobW51bSA9PSAgMiAmJiBkbnVtID4gMjkgJiYgIF9faXNsZWFwKHludW0rMTkwMCkpCistCQkJICAgIHx8IChtbnVtID09ICAyICYmIGRudW0gPiAyOCAmJiAhX19pc2xlYXAoeW51bSsxOTAwKSkKKysJCQkgICAgfHwgKG1udW0gPT0gIDIgJiYgZG51bSA+IDI5ICYmICBpc19sZWFwX3llYXIoeW51bSsxOTAwKSkKKysJCQkgICAgfHwgKG1udW0gPT0gIDIgJiYgZG51bSA+IDI4ICYmICFpc19sZWFwX3llYXIoeW51bSsxOTAwKSkKKyAJCQkgICApCisgCQkJeworIAkJCSAgICB5eWVycm9yKCJFcnJvciBpbiBkYXkgb2YgbW9udGgiKTsKK0BAIC0yNjEsOCArMjY0LDggQEAgZGF0ZSAgICAgICAgICAgIDogbW9udGhfbmFtZSBkYXlfbnVtYmVyCisgCQkJCSBtbnVtID09IDEyKSAmJiBkbnVtID4gMzEpCisgCQkJICAgIHx8ICgobW51bSA9PSAgNCB8fCBtbnVtID09ICA2IHx8IG1udW0gPT0gIDkgfHwKKyAJCQkgICAgICAgICBtbnVtID09IDExKSAmJiBkbnVtID4gMzApCistCQkJICAgIHx8IChtbnVtID09ICAyICYmIGRudW0gPiAyOSAmJiAgX19pc2xlYXAoeW51bSsxOTAwKSkKKy0JCQkgICAgfHwgKG1udW0gPT0gIDIgJiYgZG51bSA+IDI4ICYmICFfX2lzbGVhcCh5bnVtKzE5MDApKQorKwkJCSAgICB8fCAobW51bSA9PSAgMiAmJiBkbnVtID4gMjkgJiYgIGlzX2xlYXBfeWVhcih5bnVtKzE5MDApKQorKwkJCSAgICB8fCAobW51bSA9PSAgMiAmJiBkbnVtID4gMjggJiYgIWlzX2xlYXBfeWVhcih5bnVtKzE5MDApKQorIAkJCSAgICkKKyAJCQl7CisgCQkJICAgIHl5ZXJyb3IoIkVycm9yIGluIGRheSBvZiBtb250aCIpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9hdGQuaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2F0ZC5pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYTM3OWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9hdGQuaW5pdApAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKyMKKyMgU3RhcnRzIGF0IGRhZW1vbgorIworCit1bWFzayAwNzcKKworIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK3N0YXJ0KCkgeworCWVjaG8gLW4gIlN0YXJ0aW5nIGF0ZDogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vYXRkLnBpZCAtLWJhY2tncm91bmQgLS1leGVjIC91c3Ivc2Jpbi9hdGQgLS0gLWYKKwllY2hvICJPSyIKK30KK3N0b3AoKSB7CisJZWNobyAtbiAiU3RvcHBpbmcgYXRkOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuL2F0ZC5waWQKKwllY2hvICJPSyIKK30KK3Jlc3RhcnQoKSB7CisJc3RvcAorCXN0YXJ0Cit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwlzdGFydAorCTs7CisgIHN0b3ApCisJc3RvcAorCTs7CisgIHJlc3RhcnR8cmVsb2FkKQorCXJlc3RhcnQKKwk7OworICBzdGF0dXMpCisJc3RhdHVzIC91c3Ivc2Jpbi9hdGQKKwk7OworICAqKQorCWVjaG8gJCJVc2FnZTogJDAge3N0YXJ0fHN0b3B8cmVzdGFydHxzdGF0dXN9IgorCWV4aXQgMQorZXNhYworCitleGl0ICQ/CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2F0ZC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvYXRkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRjODQ0NTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9hdGQuc2VydmljZQpAQCAtMCwwICsxLDkgQEAKK1tVbml0XQorRGVzY3JpcHRpb249Sm9iIHNwb29saW5nIHRvb2xzCitBZnRlcj1zeXNsb2cudGFyZ2V0CisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0PUBTQklORElSQC9hdGQgLWYKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvY29uZmlndXJlLWFkZC1lbmFibGUtcGFtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvY29uZmlndXJlLWFkZC1lbmFibGUtcGFtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNWVmZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9jb25maWd1cmUtYWRkLWVuYWJsZS1wYW0ucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBhdC0zLjEuMTIvY29uZmlndXJlLmFjCTIwMTEtMDYtMjMgMTQ6NTE6MDMuNjUzNTcyOTQ1ICswODAwCisrKysgYXQtMy4xLjEyL2NvbmZpZ3VyZS5hYy5uZXcJMjAxMS0wNi0yNyAxNjoxMjoxNC45MDM1NzI5NDUgKzA4MDAKK0BAIC04MSwxMCArODEsMTggQEAKKyBBQ19GVU5DX1ZQUklOVEYKKyBBQ19GVU5DX0dFVExPQURBVkcKKyBBQ19DSEVDS19GVU5DUyhnZXRjd2QgbWt0aW1lIHN0cmZ0aW1lIHNldHJldWlkIHNldHJlc3VpZCBzaWdhY3Rpb24gd2FpdHBpZCkKKysKKytBQ19BUkdfV0lUSChbcGFtXSwKKysgIFtBU19IRUxQX1NUUklORyhbLS13aXRob3V0LXBhbV0sIFt3aXRob3V0IFBBTSBzdXBwb3J0XSldKQorKworK2lmIHRlc3QgIngkd2l0aF9wYW0iICE9IHhubzsgdGhlbgorIEFDX0NIRUNLX0hFQURFUlMoc2VjdXJpdHkvcGFtX2FwcGwuaCwgWworICAgUEFNTElCPSItbHBhbSIKKy0gIEFDX0RFRklORShIQVZFX1BBTSwgMSwgW0RlZmluZSB0byAxIGZvciBQQU0gc3VwcG9ydF0pCistXSkKKysgIEFDX0RFRklORShIQVZFX1BBTSwgMSwgW0RlZmluZSB0byAxIGZvciBQQU0gc3VwcG9ydF0pXSwKKysgICBbaWYgdGVzdCAieCR3aXRoX3BhbSIgPSB4eWVzOyB0aGVuCisrICAgQUNfTVNHX0VSUk9SKFtQQU0gc2VsZWN0ZWQgYnV0IHNlY3VyaXR5L3BhbV9taXNjLmggbm90IGZvdW5kXSkKKysgICBmaV0pCisrZmkKKworIGRubCBDaGVja2luZyBmb3IgcHJvZ3JhbXMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvZmlsZV9yZXBsYWNlbWVudF93aXRoX2dwbHYyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvZmlsZV9yZXBsYWNlbWVudF93aXRoX2dwbHYyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZWYwMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9maWxlX3JlcGxhY2VtZW50X3dpdGhfZ3BsdjIucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK3Bvc2l4dG0uW2NoXSBmaWxlcyBhcmUgcmVwbGFjZWQgd2l0aCBncGx2MiB2ZXJzaW9uIGZyb20gdGhlc2UgbG9jYXRpb25zOgorCitodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWdudWxpYi5naXQ7YT1ibG9iO2Y9bGliL3Bvc2l4dG0uYztoYj01NjYxYWI5ZDQ5NTEyYjRjZjNjMTljYWExMWJiNTgxZDhjZTU2MWJhCitodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWdudWxpYi5naXQ7YT1ibG9iO2Y9bGliL3Bvc2l4dG0uaDtoYj01NjYxYWI5ZDQ5NTEyYjRjZjNjMTljYWExMWJiNTgxZDhjZTU2MWJhIAorCit1cGRhdGUgdGhlIENvcHlyaWdodCBmaWxlIGluZm9ybWF0aW9uIHRvIHJlZmxlY3QgdGhlIHJlcGxhY2VkIGZpbGVzLgorCitEYXRlOiAyMDEwLzA4LzMxCitOaXRpbiBBIEthbWJsZSBuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20KKworSW5kZXg6IGF0LTMuMS4xMi9Db3B5cmlnaHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdC0zLjEuMTIub3JpZy9Db3B5cmlnaHQKKysrKyBhdC0zLjEuMTIvQ29weXJpZ2h0CitAQCAtMzEsMTAgKzMxLDEwIEBAIFRoZSBmaWxlcyBwb3NpeHRtLmMgYW5kIHBvc2l4dG0uaCBoYXZlIHQKKyAgICBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTAsIDE5OTEsIDE5OTgsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCisgICAgMjAwNSwgMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCistICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2ZpeF9wYXJhbGxlbF9idWlsZF9lcnJvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2ZpeF9wYXJhbGxlbF9idWlsZF9lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmZmM2UxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvZml4X3BhcmFsbGVsX2J1aWxkX2Vycm9yLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK21ha2UgLWogd2FzIGZhaWxpbmcgc29tZXRpbWVzYSBsaWtlIHRoaXMKK3wgY2NhY2hlIGk1ODYtcG9reS1saW51eC1nY2MgLW1hcmNoPWk1ODYgLS1zeXNyb290PS9ob21lL25pdGluL2J1aWxkL2J1aWxkMC90bXAvc3lzcm9vdHMvaTU4Ni1wb2t5LWxpbnV4IC1JLiAtZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mcmVuYW1lLXJlZ2lzdGVycyAtTzIgLWdnZGIgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzIC1vIGF0ZCBhdGQubyBkYWVtb24ubyAgLWxmbCAgLWxwYW0gLVdsLC1PMSAtV2wsLS1hcy1uZWVkZWQKK3wgcGFyc2V0aW1lLmw6NToxOTogZmF0YWwgZXJyb3I6IHkudGFiLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK3wgY29tcGlsYXRpb24gdGVybWluYXRlZC4KK3wgbWFrZTogKioqIFtsZXgueXkub10gRXJyb3IgMQorfCBtYWtlOiAqKiogV2FpdGluZyBmb3IgdW5maW5pc2hlZCBqb2JzLi4uLgorCitGaXhlZCB0aGUgaXNzdWUgYnkgYWRkaW5nIGEgZGVwZW5kZW5jeSBpbiB0aGUgbWFrZWZpbGUuCitOaXRpbiA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMC8wOS8wMgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBhdC0zLjEuMTIvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdC0zLjEuMTIub3JpZy9NYWtlZmlsZS5pbgorKysrIGF0LTMuMS4xMi9NYWtlZmlsZS5pbgorQEAgLTgzLDYgKzgzLDggQEAgeS50YWIuYyB5LnRhYi5oOiBwYXJzZXRpbWUueQorIGxleC55eS5jOiBwYXJzZXRpbWUubAorIAkkKExFWCkgLWkgcGFyc2V0aW1lLmwKKyAKKytwYXJzZXRpbWUubDogeS50YWIuaAorKworIGF0cnVuOiBhdHJ1bi5pbgorIAljb25maWd1cmUKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L21ha2VmaWxlLWZpeC1wYXJhbGxlbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L21ha2VmaWxlLWZpeC1wYXJhbGxlbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzJhNGMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvbWFrZWZpbGUtZml4LXBhcmFsbGVsLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gMTUwYjYzYTkzNmFmNzFiOTkyYTNhN2IwZmMyZDI0OTdlNTFmYzgwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAyOCBKYW4gMjAxNSAyMzo1MjowMCAtMDgwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZTogZml4IGZvciBwYXJhbGxlbCBidWlsZAorCitGaXhlZDoKK3kudGFiLmM6MTAwMTowOiBlcnJvcjogdW50ZXJtaW5hdGVkICNpZgorCitMZXQgIiQoWUFDQykgLWQgcGFyc2V0aW1lLnkiIG9ubHkgcnVuIG9uY2Ugd2lsbCBmaXggdGhlIHByb2JsZW0uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlIHwgICAgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggMmE5YjkxOC4uYWE3YzA0YSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTc1LDcgKzc1LDkgQEAgYXQ6ICQoQVRPQkpFQ1RTKQorIGF0ZDogJChSVU5PQkpFQ1RTKQorIAkkKENDKSAkKExERkxBR1MpIC1vIGF0ZCAkKFJVTk9CSkVDVFMpICQoTElCUykgJChQQU1MSUIpCisgCisteS50YWIuYyB5LnRhYi5oOiBwYXJzZXRpbWUueQorK3kudGFiLmg6IHkudGFiLmMKKysKKyt5LnRhYi5jOiBwYXJzZXRpbWUueQorIAkkKFlBQ0MpIC1kIHBhcnNldGltZS55CisgCisgbGV4Lnl5LmM6IHBhcnNldGltZS5sCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcGFtLmNvbmYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9wYW0uY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWNlYjlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcGFtLmNvbmYucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorb2UgZG9lc24ndCBzdXBwb3J0ICJAaW5jbHVkZSIsIHVzZSB0aGUgY29uY3JldGUgZGlyZWN0aXZlIGluc3RlYWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0luZGV4OiBhdC0zLjEuMTUvcGFtLmNvbmYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdC0zLjEuMTUub3JpZy9wYW0uY29uZgorKysrIGF0LTMuMS4xNS9wYW0uY29uZgorQEAgLTEsMTAgKzEsMTEgQEAKKyAjCisgIyBUaGUgUEFNIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIGF0IGRhZW1vbgorICMKKysgCisrYXV0aCAgICByZXF1aXJlZCAgICBwYW1fZW52LnNvCisrYXV0aCAgICBpbmNsdWRlICAgICBjb21tb24tYXV0aAorK2FjY291bnQgaW5jbHVkZSAgICAgY29tbW9uLWFjY291bnQKKytzZXNzaW9uIGluY2x1ZGUgICAgIGNvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlCisrc2Vzc2lvbiByZXF1aXJlZCAgICBwYW1fbGltaXRzLnNvCisrc2Vzc2lvbiByZXF1aXJlZCAgICBwYW1fbG9naW51aWQuc28KKyAKKy1hdXRoCXJlcXVpcmVkCXBhbV9lbnYuc28KKy1AaW5jbHVkZSBjb21tb24tYXV0aAorLUBpbmNsdWRlIGNvbW1vbi1hY2NvdW50Cistc2Vzc2lvbiAgICByZXF1aXJlZCAgIHBhbV9sb2dpbnVpZC5zbworLUBpbmNsdWRlIGNvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlCistc2Vzc2lvbiAgICByZXF1aXJlZCAgIHBhbV9saW1pdHMuc28KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L3Bvc2l4dG0uYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L3Bvc2l4dG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTE0YmE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcG9zaXh0bS5jCkBAIC0wLDAgKzEsMzI4IEBACisvKiBQYXJzZSBkYXRlcyBmb3IgdG91Y2ggYW5kIGRhdGUuCisKKyAgIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MCwgMTk5MSwgMTk5OCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKKyAgIDIwMDUsIDIwMDYsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIFlhY2MtYmFzZWQgdmVyc2lvbiB3cml0dGVuIGJ5IEppbSBLaW5nZG9uIGFuZCBEYXZpZCBNYWNLZW56aWUuCisgICBSZXdyaXR0ZW4gYnkgSmltIE1leWVyaW5nLiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSAicG9zaXh0bS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIFVTRV9VTkxPQ0tFRF9JTworIyBpbmNsdWRlICJ1bmxvY2tlZC1pby5oIgorI2VuZGlmCisKKy8qIElTRElHSVQgZGlmZmVycyBmcm9tIGlzZGlnaXQsIGFzIGZvbGxvd3M6CisgICAtIEl0cyBhcmcgbWF5IGJlIGFueSBpbnQgb3IgdW5zaWduZWQgaW50OyBpdCBuZWVkIG5vdCBiZSBhbiB1bnNpZ25lZCBjaGFyCisgICAgIG9yIEVPRi4KKyAgIC0gSXQncyB0eXBpY2FsbHkgZmFzdGVyLgorICAgUE9TSVggc2F5cyB0aGF0IG9ubHkgJzAnIHRocm91Z2ggJzknIGFyZSBkaWdpdHMuICBQcmVmZXIgSVNESUdJVCB0bworICAgaXNkaWdpdCB1bmxlc3MgaXQncyBpbXBvcnRhbnQgdG8gdXNlIHRoZSBsb2NhbGUncyBkZWZpbml0aW9uCisgICBvZiBgZGlnaXQnIGV2ZW4gd2hlbiB0aGUgaG9zdCBkb2VzIG5vdCBjb25mb3JtIHRvIFBPU0lYLiAgKi8KKyNkZWZpbmUgSVNESUdJVChjKSAoKHVuc2lnbmVkIGludCkgKGMpIC0gJzAnIDw9IDkpCisKK3RpbWVfdCBta3RpbWUgKCk7CisKKy8qCisgIFBPU0lYIHJlcXVpcmVzOgorCisgIHRvdWNoIC10IFtbQ0NdWVldbW1kZGhobW1bLnNzXSBGSUxFLi4uCisgICAgOCwgMTAsIG9yIDEyIGRpZ2l0cywgZm9sbG93ZWQgYnkgb3B0aW9uYWwgLnNzCisgICAgKFBEU19MRUFESU5HX1lFQVIgfCBQRFNfQ0VOVFVSWSB8IFBEU19TRUNPTkRTKQorCisgIHRvdWNoIG1tZGRoaG1tW1lZXSBGSUxFLi4uIChvYnNvbGV0ZWQgYnkgUE9TSVggMTAwMy4xLTIwMDEpCisgICAgOCBvciAxMCBkaWdpdHMsIFlZIChpZiBwcmVzZW50KSBtdXN0IGJlIGluIHRoZSByYW5nZSA2OS05OQorICAgIChQRFNfVFJBSUxJTkdfWUVBUiB8IFBEU19QUkVfMjAwMCkKKworICBkYXRlIG1tZGRoaG1tW1tDQ11ZWV0KKyAgICA4LCAxMCwgb3IgMTIgZGlnaXRzCisgICAgKFBEU19UUkFJTElOR19ZRUFSIHwgUERTX0NFTlRVUlkpCisKKyovCisKK3N0YXRpYyBpbnQKK3llYXIgKHN0cnVjdCB0bSAqdG0sIGNvbnN0IGludCAqZGlnaXRfcGFpciwgc2l6ZV90IG4sIHVuc2lnbmVkIGludCBzeW50YXhfYml0cykKK3sKKyAgc3dpdGNoIChuKQorICAgIHsKKyAgICBjYXNlIDE6CisgICAgICB0bS0+dG1feWVhciA9ICpkaWdpdF9wYWlyOworICAgICAgLyogRGVkdWNlIHRoZSBjZW50dXJ5IGJhc2VkIG9uIHRoZSB5ZWFyLgorCSBQT1NJWCByZXF1aXJlcyB0aGF0IDAwLTY4IGJlIGludGVycHJldGVkIGFzIDIwMDAtMjA2OCwKKwkgYW5kIHRoYXQgNjktOTkgYmUgaW50ZXJwcmV0ZWQgYXMgMTk2OS0xOTk5LiAgKi8KKyAgICAgIGlmIChkaWdpdF9wYWlyWzBdIDw9IDY4KQorCXsKKwkgIGlmIChzeW50YXhfYml0cyAmIFBEU19QUkVfMjAwMCkKKwkgICAgcmV0dXJuIDE7CisJICB0bS0+dG1feWVhciArPSAxMDA7CisJfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6CisgICAgICBpZiAoISAoc3ludGF4X2JpdHMgJiBQRFNfQ0VOVFVSWSkpCisJcmV0dXJuIDE7CisgICAgICB0bS0+dG1feWVhciA9IGRpZ2l0X3BhaXJbMF0gKiAxMDAgKyBkaWdpdF9wYWlyWzFdIC0gMTkwMDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAwOgorICAgICAgeworCXRpbWVfdCBub3c7CisJc3RydWN0IHRtICp0bXA7CisKKwkvKiBVc2UgY3VycmVudCB5ZWFyLiAgKi8KKwl0aW1lICgmbm93KTsKKwl0bXAgPSBsb2NhbHRpbWUgKCZub3cpOworCWlmICghIHRtcCkKKwkgIHJldHVybiAxOworCXRtLT50bV95ZWFyID0gdG1wLT50bV95ZWFyOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgYWJvcnQgKCk7CisgICAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citwb3NpeF90aW1lX3BhcnNlIChzdHJ1Y3QgdG0gKnRtLCBjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgc3ludGF4X2JpdHMpCit7CisgIGNvbnN0IGNoYXIgKmRvdCA9IE5VTEw7CisgIGludCBwYWlyWzZdOworICBpbnQgKnA7CisgIHNpemVfdCBpOworCisgIHNpemVfdCBzX2xlbiA9IHN0cmxlbiAocyk7CisgIHNpemVfdCBsZW4gPSAoKChzeW50YXhfYml0cyAmIFBEU19TRUNPTkRTKSAmJiAoZG90ID0gc3RyY2hyIChzLCAnLicpKSkKKwkJPyAoc2l6ZV90KSAoZG90IC0gcykKKwkJOiBzX2xlbik7CisKKyAgaWYgKGxlbiAhPSA4ICYmIGxlbiAhPSAxMCAmJiBsZW4gIT0gMTIpCisgICAgcmV0dXJuIDE7CisKKyAgaWYgKGRvdCkKKyAgICB7CisgICAgICBpZiAoIShzeW50YXhfYml0cyAmIFBEU19TRUNPTkRTKSkKKwlyZXR1cm4gMTsKKworICAgICAgaWYgKHNfbGVuIC0gbGVuICE9IDMpCisJcmV0dXJuIDE7CisgICAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICBpZiAoIUlTRElHSVQgKHNbaV0pKQorICAgICAgcmV0dXJuIDE7CisKKyAgbGVuIC89IDI7CisgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICBwYWlyW2ldID0gMTAgKiAoc1syKmldIC0gJzAnKSArIHNbMippICsgMV0gLSAnMCc7CisKKyAgcCA9IHBhaXI7CisgIGlmIChzeW50YXhfYml0cyAmIFBEU19MRUFESU5HX1lFQVIpCisgICAgeworICAgICAgaWYgKHllYXIgKHRtLCBwLCBsZW4gLSA0LCBzeW50YXhfYml0cykpCisJcmV0dXJuIDE7CisgICAgICBwICs9IGxlbiAtIDQ7CisgICAgICBsZW4gPSA0OworICAgIH0KKworICAvKiBIYW5kbGUgOCBkaWdpdHMgd29ydGggb2YgYE1NRERoaG1tJy4gICovCisgIHRtLT50bV9tb24gPSAqcCsrIC0gMTsKKyAgdG0tPnRtX21kYXkgPSAqcCsrOworICB0bS0+dG1faG91ciA9ICpwKys7CisgIHRtLT50bV9taW4gPSAqcCsrOworICBsZW4gLT0gNDsKKworICAvKiBIYW5kbGUgYW55IHRyYWlsaW5nIHllYXIuICAqLworICBpZiAoc3ludGF4X2JpdHMgJiBQRFNfVFJBSUxJTkdfWUVBUikKKyAgICB7CisgICAgICBpZiAoeWVhciAodG0sIHAsIGxlbiwgc3ludGF4X2JpdHMpKQorCXJldHVybiAxOworICAgIH0KKworICAvKiBIYW5kbGUgc2Vjb25kcy4gICovCisgIGlmICghZG90KQorICAgIHsKKyAgICAgIHRtLT50bV9zZWMgPSAwOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGludCBzZWNvbmRzOworCisgICAgICArK2RvdDsKKyAgICAgIGlmICghSVNESUdJVCAoZG90WzBdKSB8fCAhSVNESUdJVCAoZG90WzFdKSkKKwlyZXR1cm4gMTsKKyAgICAgIHNlY29uZHMgPSAxMCAqIChkb3RbMF0gLSAnMCcpICsgZG90WzFdIC0gJzAnOworCisgICAgICB0bS0+dG1fc2VjID0gc2Vjb25kczsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFBhcnNlIGEgUE9TSVgtc3R5bGUgZGF0ZSwgcmV0dXJuaW5nIHRydWUgaWYgc3VjY2Vzc2Z1bC4gICovCisKK2Jvb2wKK3Bvc2l4dGltZSAodGltZV90ICpwLCBjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgc3ludGF4X2JpdHMpCit7CisgIHN0cnVjdCB0bSB0bTAKKyNpZmRlZiBsaW50CisgIC8qIFBsYWNhdGUgZ2NjLTQncyAtV3VuaW5pdGlhbGl6ZWQuCisgICAgIHBvc2l4X3RpbWVfcGFyc2UgZmFpbHMgdG8gc2V0IGFsbCBvZiB0bTAgb25seSB3aGVuIGl0IHJldHVybnMKKyAgICAgbm9uemVybyAoZHVlIHRvIHllYXIoKSByZXR1cm5pbmcgbm9uemVybyksIGFuZCBpbiB0aGF0IGNhc2UsCisgICAgIHRoaXMgY29kZSBkb2Vzbid0IHVzZSB0aGUgdG0wIGF0IGFsbC4gICovCisgICAgPSB7IDAsIH0KKyNlbmRpZgorICAgIDsKKyAgc3RydWN0IHRtIHRtMTsKKyAgc3RydWN0IHRtIGNvbnN0ICp0bTsKKyAgdGltZV90IHQ7CisKKyAgaWYgKHBvc2l4X3RpbWVfcGFyc2UgKCZ0bTAsIHMsIHN5bnRheF9iaXRzKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgdG0xID0gdG0wOworICB0bTEudG1faXNkc3QgPSAtMTsKKyAgdCA9IG1rdGltZSAoJnRtMSk7CisKKyAgaWYgKHQgIT0gKHRpbWVfdCkgLTEpCisgICAgdG0gPSAmdG0xOworICBlbHNlCisgICAgeworICAgICAgLyogbWt0aW1lIHJldHVybnMgLTEgZm9yIGVycm9ycywgYnV0IC0xIGlzIGFsc28gYSB2YWxpZCB0aW1lX3QKKwkgdmFsdWUuICBDaGVjayB3aGV0aGVyIGFuIGVycm9yIHJlYWxseSBvY2N1cnJlZC4gICovCisgICAgICB0bSA9IGxvY2FsdGltZSAoJnQpOworICAgICAgaWYgKCEgdG0pCisJcmV0dXJuIGZhbHNlOworICAgIH0KKworICAvKiBSZWplY3QgZGF0ZXMgbGlrZSAiU2VwdGVtYmVyIDMxIiBhbmQgdGltZXMgbGlrZSAiMjU6NjEiLiAgKi8KKyAgaWYgKCh0bTAudG1feWVhciBeIHRtLT50bV95ZWFyKQorICAgICAgfCAodG0wLnRtX21vbiBeIHRtLT50bV9tb24pCisgICAgICB8ICh0bTAudG1fbWRheSBeIHRtLT50bV9tZGF5KQorICAgICAgfCAodG0wLnRtX2hvdXIgXiB0bS0+dG1faG91cikKKyAgICAgIHwgKHRtMC50bV9taW4gXiB0bS0+dG1fbWluKQorICAgICAgfCAodG0wLnRtX3NlYyBeIHRtLT50bV9zZWMpKQorICAgIHJldHVybiBmYWxzZTsKKworICAqcCA9IHQ7CisgIHJldHVybiB0cnVlOworfQorCisjaWZkZWYgVEVTVF9QT1NJWFRJTUUKKy8qCisgICAgVGVzdCBtYWlubHkgd2l0aCBzeW50YXhfYml0cyA9PSAxMworICAgIChha2E6IChQRFNfTEVBRElOR19ZRUFSIHwgUERTX0NFTlRVUlkgfCBQRFNfU0VDT05EUykpCisKKyAgICBUaGlzIHRlc3QgZGF0YSBhc3N1bWVzIFVuaXZlcnNhbCBUaW1lLCBlLmcuLCBUWj0iVVRDMCIuCisKKyAgICBUaGlzIHRlc3QgZGF0YSBhbHNvIGFzc3VtZXMgdGhhdCB0aW1lX3QgaXMgc2lnbmVkIGFuZCBpcyBhdCBsZWFzdAorICAgIDM5IGJpdHMgd2lkZSwgc28gdGhhdCBpdCBjYW4gcmVwcmVzZW50IGFsbCB5ZWFycyBmcm9tIDAwMDAgdGhyb3VnaAorICAgIDk5OTkuICBBIGhvc3Qgd2l0aCAzMi1iaXQgc2lnbmVkIHRpbWVfdCBjYW4gcmVwcmVzZW50IG9ubHkgdGltZQorICAgIHN0YW1wcyBpbiB0aGUgcmFuZ2UgMTkwMS0xMi0xMyAyMDo0NTo1MiB0aHJvdWdoIDIwMzgtMDEtMTgKKyAgICAwMzoxNDowNyBVVEMsIGFzc3VtaW5nIFBPU0lYIHRpbWVfdCB3aXRoIG5vIGxlYXAgc2Vjb25kcywgc28gdGVzdAorICAgIGNhc2VzIG91dHNpZGUgdGhpcyByYW5nZSB3aWxsIG5vdCB3b3JrIG9uIHN1Y2ggYSBob3N0LgorCisgICAgQWxzbywgdGhlIGZpcnN0IHR3byBsaW5lcyBvZiB0ZXN0IGRhdGEgYXNzdW1lIHRoYXQgdGhlIGN1cnJlbnQKKyAgICB5ZWFyIGlzIDIwMDIuCisKK0JFR0lOLURBVEEKKzEyMTMxNDE1LjE2ICAgICAxMyAgIDEwMzk3ODg5MTYgRnJpIERlYyAxMyAxNDoxNToxNiAyMDAyCisxMjEzMTQxNS4xNiAgICAgMTMgICAxMDM5Nzg4OTE2IEZyaSBEZWMgMTMgMTQ6MTU6MTYgMjAwMgorMDAwMDAxMDEwMDAwLjAwIDEzIC02MjE2NzEzMjgwMCBTdW4gSmFuICAxIDAwOjAwOjAwIDAwMDAKKzE5MDExMjEzMjA0NS41MiAxMyAgLTIxNDc0ODM2NDggRnJpIERlYyAxMyAyMDo0NTo1MiAxOTAxCisxOTAxMTIxMzIwNDUuNTMgMTMgIC0yMTQ3NDgzNjQ3IEZyaSBEZWMgMTMgMjA6NDU6NTMgMTkwMQorMTkwMTEyMTMyMDQ2LjUyIDEzICAtMjE0NzQ4MzU4OCBGcmkgRGVjIDEzIDIwOjQ2OjUyIDE5MDEKKzE5MDExMjEzMjE0NS41MiAxMyAgLTIxNDc0ODAwNDggRnJpIERlYyAxMyAyMTo0NTo1MiAxOTAxCisxOTAxMTIxNDIwNDUuNTIgMTMgIC0yMTQ3Mzk3MjQ4IFNhdCBEZWMgMTQgMjA6NDU6NTIgMTkwMQorMTkwMjAxMTMyMDQ1LjUyIDEzICAtMjE0NDgwNTI0OCBNb24gSmFuIDEzIDIwOjQ1OjUyIDE5MDIKKzE5NjkxMjMxMjM1OS41OSAxMyAgICAgICAgICAgLTEgV2VkIERlYyAzMSAyMzo1OTo1OSAxOTY5CisxOTcwMDEwMTAwMDAuMDAgMTMgICAgICAgICAgICAwIFRodSBKYW4gIDEgMDA6MDA6MDAgMTk3MAorMTk3MDAxMDEwMDAwLjAxIDEzICAgICAgICAgICAgMSBUaHUgSmFuICAxIDAwOjAwOjAxIDE5NzAKKzE5NzAwMTAxMDAwMS4wMCAxMyAgICAgICAgICAgNjAgVGh1IEphbiAgMSAwMDowMTowMCAxOTcwCisxOTcwMDEwMTAxMDAuMDAgMTMgICAgICAgICAzNjAwIFRodSBKYW4gIDEgMDE6MDA6MDAgMTk3MAorMTk3MDAxMDIwMDAwLjAwIDEzICAgICAgICA4NjQwMCBGcmkgSmFuICAyIDAwOjAwOjAwIDE5NzAKKzE5NzAwMjAxMDAwMC4wMCAxMyAgICAgIDI2Nzg0MDAgU3VuIEZlYiAgMSAwMDowMDowMCAxOTcwCisxOTcxMDEwMTAwMDAuMDAgMTMgICAgIDMxNTM2MDAwIEZyaSBKYW4gIDEgMDA6MDA6MDAgMTk3MQorMTk3MDAxMDAwMDAwLjAwIDEzICAgICAgICAgICAgKiAqCisxOTcwMDAwMTAwMDAuMDAgMTMgICAgICAgICAgICAqICoKKzE5NzAwMTAxMDAwMC42MCAxMyAgICAgICAgICAgICogKgorMTk3MDAxMDEwMDYwLjAwIDEzICAgICAgICAgICAgKiAqCisxOTcwMDEwMTI0MDAuMDAgMTMgICAgICAgICAgICAqICoKKzE5NzAwMTMyMDAwMC4wMCAxMyAgICAgICAgICAgICogKgorMTk3MDEzMDEwMDAwLjAwIDEzICAgICAgICAgICAgKiAqCisyMDM4MDExOTAzMTQuMDYgMTMgICAyMTQ3NDgzNjQ2IFR1ZSBKYW4gMTkgMDM6MTQ6MDYgMjAzOAorMjAzODAxMTkwMzE0LjA3IDEzICAgMjE0NzQ4MzY0NyBUdWUgSmFuIDE5IDAzOjE0OjA3IDIwMzgKKzIwMzgwMTE5MDMxNC4wOCAxMyAgIDIxNDc0ODM2NDggVHVlIEphbiAxOSAwMzoxNDowOCAyMDM4Cis5OTk5MTIzMTIzNTkuNTkgMTMgMjUzNDAyMzAwNzk5IEZyaSBEZWMgMzEgMjM6NTk6NTkgOTk5OQorMTExMjEzMTQxNSAgICAgIDEzICAgMTMyMzc4NTcwMCBUdWUgRGVjIDEzIDE0OjE1OjAwIDIwMTEKKzExMTIxMzE0MTUuMTYgICAxMyAgIDEzMjM3ODU3MTYgVHVlIERlYyAxMyAxNDoxNToxNiAyMDExCisyMDExMTIxMzE0MTUuMTYgMTMgICAxMzIzNzg1NzE2IFR1ZSBEZWMgMTMgMTQ6MTU6MTYgMjAxMQorMTkxMTEyMTMxNDE1LjE2IDEzICAtMTgzMTk3NDI4NCBXZWQgRGVjIDEzIDE0OjE1OjE2IDE5MTEKKzIwMzcxMjEzMTQxNS4xNiAxMyAgIDIxNDQzMjY1MTYgU3VuIERlYyAxMyAxNDoxNToxNiAyMDM3CiszNzEyMTMxNDE1LjE2ICAgMTMgICAyMTQ0MzI2NTE2IFN1biBEZWMgMTMgMTQ6MTU6MTYgMjAzNworNjgxMjEzMTQxNS4xNiAgIDEzICAgMzEyMjYzMzcxNiBUaHUgRGVjIDEzIDE0OjE1OjE2IDIwNjgKKzY5MTIxMzE0MTUuMTYgICAxMyAgICAgLTE1OTAyODQgU2F0IERlYyAxMyAxNDoxNToxNiAxOTY5Cis3MDEyMTMxNDE1LjE2ICAgMTMgICAgIDI5OTQ1NzE2IFN1biBEZWMgMTMgMTQ6MTU6MTYgMTk3MAorMTIxMzE0MTU5OSAgICAgICAyICAgIDk0NTA5NDUwMCBNb24gRGVjIDEzIDE0OjE1OjAwIDE5OTkKKzEyMTMxNDE1MDAgICAgICAgMiAgICA5NzY3MTY5MDAgV2VkIERlYyAxMyAxNDoxNTowMCAyMDAwCitFTkQtREFUQQorCisqLworCisjIGRlZmluZSBNQVhfQlVGRl9MRU4gMTAyNAorCitpbnQKK21haW4gKHZvaWQpCit7CisgIGNoYXIgYnVmZltNQVhfQlVGRl9MRU4gKyAxXTsKKworICBidWZmW01BWF9CVUZGX0xFTl0gPSAwOworICB3aGlsZSAoZmdldHMgKGJ1ZmYsIE1BWF9CVUZGX0xFTiwgc3RkaW4pICYmIGJ1ZmZbMF0pCisgICAgeworICAgICAgY2hhciB0aW1lX3N0cltNQVhfQlVGRl9MRU5dOworICAgICAgdW5zaWduZWQgaW50IHN5bnRheF9iaXRzOworICAgICAgdGltZV90IHQ7CisgICAgICBpZiAoc3NjYW5mIChidWZmLCAiJXMgJXUiLCB0aW1lX3N0ciwgJnN5bnRheF9iaXRzKSAhPSAyKQorCXByaW50ZiAoIipcbiIpOworICAgICAgZWxzZQorCXsKKwkgIHByaW50ZiAoIiUtMTVzICUydSAiLCB0aW1lX3N0ciwgc3ludGF4X2JpdHMpOworCSAgaWYgKHBvc2l4dGltZSAoJnQsIHRpbWVfc3RyLCBzeW50YXhfYml0cykpCisJICAgIHByaW50ZiAoIiUxMmxkICVzIiwgKGxvbmcgaW50KSB0LCBjdGltZSAoJnQpKTsKKwkgIGVsc2UKKwkgICAgcHJpbnRmICgiJTEycyAlcyIsICIqIiwgIipcbiIpOworCX0KKyAgICB9CisgIGV4aXQgKDApOworCit9CisjZW5kaWYKKwwKKy8qCitMb2NhbCBWYXJpYWJsZXM6Citjb21waWxlLWNvbW1hbmQ6ICJnY2MgLURURVNUX1BPU0lYVElNRSAtZyAtTyAtV2FsbCAtVyBwb3NpeHRtLmMiCitFbmQ6CisqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcG9zaXh0bS5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcG9zaXh0bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTc0OWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9wb3NpeHRtLmgKQEAgLTAsMCArMSwzNyBAQAorLyogUGFyc2UgZGF0ZXMgZm9yIHRvdWNoIGFuZCBkYXRlLgorCisgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDMsIDIwMDUsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIFlhY2MtYmFzZWQgdmVyc2lvbiB3cml0dGVuIGJ5IEppbSBLaW5nZG9uIGFuZCBEYXZpZCBNYWNLZW56aWUuCisgICBSZXdyaXR0ZW4gYnkgSmltIE1leWVyaW5nLiAgKi8KKworI2lmbmRlZiBQT1NJWFRNX0hfCisjIGRlZmluZSBQT1NJWFRNX0hfCisKKyMgaW5jbHVkZSA8c3RkYm9vbC5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisKKy8qIFBPU0lYIERhdGUgU3ludGF4IGZsYWdzLiAgKi8KKyMgZGVmaW5lIFBEU19MRUFESU5HX1lFQVIgMQorIyBkZWZpbmUgUERTX1RSQUlMSU5HX1lFQVIgMgorIyBkZWZpbmUgUERTX0NFTlRVUlkgNAorIyBkZWZpbmUgUERTX1NFQ09ORFMgOAorIyBkZWZpbmUgUERTX1BSRV8yMDAwIDE2CisKK2Jvb2wgcG9zaXh0aW1lICh0aW1lX3QgKnAsIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBzeW50YXhfYml0cyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXRfMy4xLjE2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXRfMy4xLjE2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MTJiY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdF8zLjEuMTYuYmIKQEAgLTAsMCArMSw2OSBAQAorU1VNTUFSWSA9ICJEZWxheWVkIGpvYiBleGVjdXRpb24gYW5kIGJhdGNoIHByb2Nlc3NpbmciCitERVNDUklQVElPTiA9ICJBdCBhbGxvd3MgZm9yIGNvbW1hbmRzIHRvIGJlIHJ1biBhdCBhIHBhcnRpY3VsYXIgdGltZS4gIEJhdGNoIHdpbGwgZXhlY3V0ZSBjb21tYW5kcyB3aGVuIFwKK3RoZSBzeXN0ZW0gbG9hZCBsZXZlbHMgZHJvcCB0byBhIHBhcnRpY3VsYXIgbGV2ZWwuIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00MzI1YWZkMzk2ZmViY2I2NTljMzZiNDk1MzMxMzVkNCIKK0RFUEVORFMgPSAiZmxleCBmbGV4LW5hdGl2ZSBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnBhbScsICcnLCBkKX0iCisKK1JERVBFTkRTXyR7UE59ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJyR7UEFNX0RFUFN9JywgJycsIGQpfSBcCisiCisKK1BBTV9ERVBTID0gImxpYnBhbSBsaWJwYW0tcnVudGltZSBwYW0tcGx1Z2luLWVudiBwYW0tcGx1Z2luLWxpbWl0cyIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJhdGQiCitSUkVQTEFDRVNfJHtQTn0gPSAiYXRkIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9hL2F0L2F0XyR7UFZ9Lm9yaWcudGFyLmd6IFwKKyAgICBmaWxlOi8vZml4X3BhcmFsbGVsX2J1aWxkX2Vycm9yLnBhdGNoIFwKKyAgICBmaWxlOi8vcG9zaXh0bS5jIFwKKyAgICBmaWxlOi8vcG9zaXh0bS5oIFwKKyAgICBmaWxlOi8vZmlsZV9yZXBsYWNlbWVudF93aXRoX2dwbHYyLnBhdGNoIFwKKyAgICBmaWxlOi8vYXRkLmluaXQgXAorICAgIGZpbGU6Ly9hdGQuc2VydmljZSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IFwKKyAgICBmaWxlOi8vbWFrZWZpbGUtZml4LXBhcmFsbGVsLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMS1yZW1vdmUtZ2xpYmMtYXNzdW1wdGlvbi5wYXRjaCBcCisgICAgIgorCitQQU1fU1JDX1VSSSA9ICJmaWxlOi8vcGFtLmNvbmYucGF0Y2ggXAorICAgICAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1hZGQtZW5hYmxlLXBhbS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImQwNWRhNzVkOWI3NWQ5MzkxN2ZmYjE2YWI0OGIxZTE5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNiOWFmNTljNmE1NGVkY2U5NTM2YmE2Mjk4NDEwNTU0MDlkMWY4OWQ4YWUyNjQ5NDcyN2E5NzE0MWZiNGQ1YzEiCisKK0VYVFJBX09FQ09ORiArPSAiYWNfY3ZfcGF0aF9TRU5ETUFJTD0vYmluL3RydWUgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZGFlbW9uX3VzZXJuYW1lPXJvb3QgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZGFlbW9uX2dyb3VwbmFtZT1yb290IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWpvYmRpcj0vdmFyL3Nwb29sL2F0L2pvYnMgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtYXRzcG9vbD0vdmFyL3Nwb29sL2F0L3Nwb29sIFwKKyAgICAgICAgICAgICAgICAgYWNfY3ZfaGVhZGVyX3NlY3VyaXR5X3BhbV9hcHBsX2g9JHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAneWVzJywgJ25vJywgZCl9ICIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHN5c3RlbWQgdXBkYXRlLXJjLmQKKworSU5JVFNDUklQVF9OQU1FID0gImF0ZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiYXRkLnNlcnZpY2UiCisKKworZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKwljcCAtZiAke1dPUktESVJ9L3Bvc2l4dG0uW2NoXSAke1N9Cit9CisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgLWUgIklST09UPSR7RH0iIGluc3RhbGwKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vYXRkLmluaXQJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hdGQKKworCSMgaW5zdGFsbCBzeXN0ZW1kIHVuaXQgZmlsZXMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYXRkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vYXRkLnNlcnZpY2UKKworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iID0gInBhbSIgXTsgdGhlbgorCQlpbnN0YWxsIC1EIC1tIDA2NDQgJHtXT1JLRElSfS8ke0JQfS9wYW0uY29uZiAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC9hdGQKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2QxMmNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy5pbmMKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJBdWdlYXMgY29uZmlndXJhdGlvbiBBUEkiCitIT01FUEFHRSA9ICJodHRwOi8vYXVnZWFzLm5ldC8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9hdWdlYXMvcmVwb3J0LzEiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YmJiNDYxMjExYTMzYjEzNGQ0MmVkNWVlODAyYjM3ZmYiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLmF1Z2Vhcy5uZXQvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1taXNzaW5nLWFyZ3otY29uZGl0aW9uYWwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2VwYnVpbGRmaXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIgorCitERVBFTkRTID0gInJlYWRsaW5lIGxpYnhtbDIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFUyA9KyAiJHtQTn0tbGVuc2VzIGxpYiR7QlBOfSIKKworRklMRVNfJHtQTn0tbGVuc2VzID0gIiR7ZGF0YWRpcn0vYXVnZWFzL2xlbnNlcyIKK0ZJTEVTX2xpYiR7QlBOfSA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTfSIKKworUkRFUEVORFNfbGliJHtCUE59ICs9ICIke1BOfS1sZW5zZXMiCitSUkVDT01NRU5EU19saWIke0JQTn0gKz0gIiR7UE59IgorCitMRUFEX1NPTkFNRSA9ICJsaWJhdWdlYXMuc28iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1mciAke0R9JHtkYXRhZGlyfS92aW0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTE5ODc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGF1Z2Vhcy0xLjIuMC9nbnVsaWIvbGliL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXVnZWFzLTEuMi4wLm9yaWcvZ251bGliL2xpYi9NYWtlZmlsZS5hbQorKysrIGF1Z2Vhcy0xLjIuMC9nbnVsaWIvbGliL01ha2VmaWxlLmFtCitAQCAtNDYzLDcgKzQ2Myw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL2FkZC1taXNzaW5nLWFyZ3otY29uZGl0aW9uYWwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL2FkZC1taXNzaW5nLWFyZ3otY29uZGl0aW9uYWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJiZGJhYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvYWRkLW1pc3NpbmctYXJnei1jb25kaXRpb25hbC5wYXRjaApAQCAtMCwwICsxLDIwIEBACitBZGQgbWlzc2luZyBHTF9HRU5FUkFURV9BUkdaX0ggY29uZGl0aW9uYWwKKworLSBHTF9HRU5FUkFURV9BUkdaX0ggaXMgdXNlZCBpbiBnbnVsaWIvbGliL01ha2VmaWxlLmFtCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogYXVnZWFzLTEuMC4wL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF1Z2Vhcy0xLjAuMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGF1Z2Vhcy0xLjAuMC9jb25maWd1cmUuYWMKK0BAIC01NSw2ICs1NSw4IEBAIEFDX0FSR19XSVRIKFtmYWlsbWFsbG9jXSwKKyAKKyBBTV9DT05ESVRJT05BTChbV0lUSF9GQUlMTUFMTE9DXSwgW3Rlc3QgeCR3aXRoX2ZhaWxtYWxsb2MgIT0geG5vXSkKKyAKKytBTV9DT05ESVRJT05BTChbR0xfR0VORVJBVEVfQVJHWl9IXSwgW3Rlc3QgLW4gIiRBUkdaX0giXSkKKysKKyBkbmwgLS1lbmFibGUtZGVidWc9KHllc3xubykKKyBBQ19BUkdfRU5BQkxFKFtkZWJ1Z10sCisgICAgICAgICAgICAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWRlYnVnPW5vL3llc10sCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL3NlcGJ1aWxkZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy9zZXBidWlsZGZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODJhM2VlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy9zZXBidWlsZGZpeC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitFbnN1cmUgdGhhdCBidWlsZHMgaW4gc2VwYXJhdGUgYnVpbGRkaXJzICgke0J9ICE9ICR7U30pIGNvcnJlY3RseSBpbnN0YWxsIHRoZSAKK2xlbnNlcyBmaWxlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTMvNC8xNworCitJbmRleDogYXVnZWFzLTEuMC4wL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXVnZWFzLTEuMC4wLm9yaWcvTWFrZWZpbGUuYW0JMjAxMi0xMS0wMiAxNToyMDoxMS4wMDAwMDAwMDAgKzAwMDAKKysrKyBhdWdlYXMtMS4wLjAvTWFrZWZpbGUuYW0JMjAxMy0wNC0xNyAxMDozNjoyNC4wMzM0MDAxMjUgKzAwMDAKK0BAIC01LDggKzUsOCBAQAorIGxlbnNkaXI9JChkYXRhZGlyKS9hdWdlYXMvbGVuc2VzL2Rpc3QKKyBsZW5zdGVzdGRpcj0kKGRhdGFkaXIpL2F1Z2Vhcy9sZW5zZXMvZGlzdC90ZXN0cworIAorLWRpc3RfbGVuc19EQVRBPSQod2lsZGNhcmQgbGVuc2VzLyouYXVnKQorLWRpc3RfbGVuc3Rlc3RfREFUQT0kKHdpbGRjYXJkIGxlbnNlcy90ZXN0cy8qLmF1ZykKKytkaXN0X2xlbnNfREFUQT0kKHdpbGRjYXJkICQodG9wX3NyY2RpcikvbGVuc2VzLyouYXVnKQorK2Rpc3RfbGVuc3Rlc3RfREFUQT0kKHdpbGRjYXJkICQodG9wX3NyY2RpcilsZW5zZXMvdGVzdHMvKi5hdWcpCisgCisgRVhUUkFfRElTVD1hdWdlYXMuc3BlYyBidWlsZC9hdXgvbW92ZS1pZi1jaGFuZ2UgTWFrZWZpbGUuYW0gSEFDS0lORworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhc18xLjQuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXNfMS40LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA2NGFkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXNfMS40LjAuYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIGF1Z2Vhcy5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gImEyNTM2YTljM2Q3NDRkYzA5ZDIzNDIyOGZlNGIwYzkzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY1OWZhZTdhYzIyOTAyOWU2MGE4NjlhM2I4OGM2MTZjZmQ1MWNmMmZiYTI4NmNkZmUzYWYzYTA1MmNiMzViMzAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2J1aWxkLXRlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9idWlsZC10ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTM0MWVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9idWlsZC10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitBZGQgJ3B0ZXN0JyB0YXJnZXQgdG8gTWFrZWZpbGUsIHRvIHJ1biB0ZXN0cyB3aXRob3V0IGNoZWNraW5nIGRlcGVuZGVuY2llcy4KKworU2lnbmVkLW9mZi1ieTogQW5kZXJzIFJveGVsbCA8YW5kZXJzLnJveGVsbEBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitkaWZmIC1kTmF1ciBiYXNoLTMuMi40OC9NYWtlZmlsZS5pbi5vcmlnIGJhc2gtMy4yLjQ4L01ha2VmaWxlLmluCistLS0gYmFzaC0zLjIuNDgvTWFrZWZpbGUuaW4ub3JpZwkyMDA2LTA4LTE3IDIzOjAzOjM1LjAwMDAwMDAwMCArMDUwMAorKysrIGJhc2gtMy4yLjQ4L01ha2VmaWxlLmluCTIwMTMtMDctMDIgMjA6MjA6MDcuNTEyNzA5MzI3ICswNTAwCitAQCAtODAzLDE3ICs4MDMsMzEgQEAKKyAJZmkKKyAKKyByZWNobyQoRVhFRVhUKToJCSQoU1VQUE9SVF9TUkMpcmVjaG8uYworLQlAJChDQ19GT1JfQlVJTEQpICQoQ0NGTEFHU19GT1JfQlVJTEQpIC1vICRAICQoU1VQUE9SVF9TUkMpcmVjaG8uYyAke0xJQlNfRk9SX0JVSUxEfQorKwlAJChDQykgJChDQ0ZMQUdTKSAtbyAkQCAkPAorIAorIHplY2hvJChFWEVFWFQpOgkJJChTVVBQT1JUX1NSQyl6ZWNoby5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgJChTVVBQT1JUX1NSQyl6ZWNoby5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpIC1vICRAICQ8CisgCisgcHJpbnRlbnYkKEVYRUVYVCk6CSQoU1VQUE9SVF9TUkMpcHJpbnRlbnYuYworLQlAJChDQ19GT1JfQlVJTEQpICQoQ0NGTEFHU19GT1JfQlVJTEQpIC1vICRAICQoU1VQUE9SVF9TUkMpcHJpbnRlbnYuYyAke0xJQlNfRk9SX0JVSUxEfQorKwlAJChDQykgJChDQ0ZMQUdTKSAtbyAkQCAkPAorIAorLXRlc3QgdGVzdHMgY2hlY2s6CWZvcmNlICQoUHJvZ3JhbSkgJChURVNUU19TVVBQT1JUKQorK3Rlc3QgdGVzdHMgY2hlY2s6CisrCUAkKE1BS0UpIGluc3RhbGwtdGVzdAorKwlAJChNQUtFKSBydW50ZXN0CisrCisraW5zdGFsbC10ZXN0OiBidWlsZHRlc3QKKytpZmVxICgkKG9yaWdpbiBJTlNUQUxMX1RFU1RfRElSKSwgdW5kZWZpbmVkKQorIAlALXRlc3QgLWQgdGVzdHMgfHwgbWtkaXIgdGVzdHMKKyAJQGNwICQoVEVTVFNfU1VQUE9SVCkgdGVzdHMKKytlbHNlCisrCUAtdGVzdCAtZCAkKElOU1RBTExfVEVTVF9ESVIpIHx8IG1rZGlyIC1wICQoSU5TVEFMTF9URVNUX0RJUikKKysJQGNwIC1yICQoc3JjZGlyKS90ZXN0cy8qICQoSU5TVEFMTF9URVNUX0RJUikvCisrCUBjcCAkKFRFU1RTX1NVUFBPUlQpICQoSU5TVEFMTF9URVNUX0RJUikKKytlbmRpZgorKworK2J1aWxkdGVzdDogZm9yY2UgJChQcm9ncmFtKSAkKFRFU1RTX1NVUFBPUlQpCisrCisrcnVudGVzdDoKKyAJQCggY2QgJChzcmNkaXIpL3Rlc3RzICYmIFwKKyAJCVBBVEg9JChCVUlMRF9ESVIpL3Rlc3RzOiQkUEFUSCBUSElTX1NIPSQoVEhJU19TSCkgJChTSEVMTCkgJHtURVNUU0NSSVBUfSApCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2RvbnQtaW5jbHVkZS10YXJnZXQtQ0ZMQUdTLWluLWhvc3QtTERGTEFHUy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvZG9udC1pbmNsdWRlLXRhcmdldC1DRkxBR1MtaW4taG9zdC1MREZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNzU2ZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2RvbnQtaW5jbHVkZS10YXJnZXQtQ0ZMQUdTLWluLWhvc3QtTERGTEFHUy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDkzM2JkODg2YWY0OTY2N2U4OGUyMzg1NDA5NDQ5YWI1OTg4MTNkYWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorRGF0ZTogV2VkLCAxNSBKdWwgMjAxNSAwMDo1NDozMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBkb250IGluY2x1ZGUgdGFyZ2V0IENGTEFHUyBpbiBob3N0IExERkxBR1MKKworQnVpbGRpbmcgdGhlIGhvc3QgdG9vbCAnbWtidWlsdGlucycgd2lsbCBmYWlsIGlmIHRoZSB0YXJnZXQgQ0ZMQUdTCitjb250YWlucyBhbiBvcHRpb24gd2hpY2ggaXNuJ3Qgc3VwcG9ydGVkIGJ5IHRoZSBob3N0J3MgZ2NjLiBUbyBwcmV2ZW50Cit0aGUgaXNzdWUsIGRlZmluZSBMREZMQUdTX0ZPUl9CVUlMRCBiYXNlZCBvbiBDRkxBR1NfRk9SX0JVSUxEIGluc3RlYWQKK29mIENGTEFHUy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtyZXF1aXJlZCBmb3IgYmFzaCAzLjIuNTcgKEdQTHYyKSByZWNpcGUgb25seV0KKworU2lnbmVkLW9mZi1ieTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KKy0tLQorIGJ1aWx0aW5zL01ha2VmaWxlLmluIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYnVpbHRpbnMvTWFrZWZpbGUuaW4gYi9idWlsdGlucy9NYWtlZmlsZS5pbgoraW5kZXggZTAyN2Y3YS4uZWJmZGRmMyAxMDA2NDQKKy0tLSBhL2J1aWx0aW5zL01ha2VmaWxlLmluCisrKysgYi9idWlsdGlucy9NYWtlZmlsZS5pbgorQEAgLTYzLDcgKzYzLDcgQEAgTE9DQUxfREVGUyA9IEBMT0NBTF9ERUZTQAorIAorIExJQlMgPSBATElCU0AKKyBMREZMQUdTID0gQExERkxBR1NAICQoTE9DQUxfTERGTEFHUykgJChDRkxBR1MpCistTERGTEFHU19GT1JfQlVJTEQgPSAkKExERkxBR1MpCisrTERGTEFHU19GT1JfQlVJTEQgPSBATERGTEFHU19GT1JfQlVJTERAICQoTE9DQUxfTERGTEFHUykgJChDRkxBR1NfRk9SX0JVSUxEKQorIExPQ0FMX0xERkxBR1MgPSBATE9DQUxfTERGTEFHU0AKKyAjTElCU19GT1JfQlVJTEQgPSBATElCU19GT1JfQlVJTERACisgTElCU19GT1JfQlVJTEQgPSAkKExJQlMpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDIyOWE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9ta2J1aWx0aW5zX2hhdmVfc3RyaW5naXplLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK09uIGhvc3RzIHdpdGggRk9SVElGWV9TT1VSQ0VTLCBzdHJpbmdpemUgc3VwcG9ydCBpcyByZXF1aXJlZCwgYXMgaXQncyB1c2VkIGJ5Cit0aGUgbWFjcm9zIHRvIHdyYXAgZnVuY3Rpb25zIChlLmcuIHJlYWQgYW5kIG9wZW4gaW4gdW5pc3RkLmgpLiBUaG9zZSB3cmFwcGVycwordXNlIHRoZSBTVFJJTkcoKSBtYWNybyBmcm9tIHVuaXN0ZC5oLiBBIGhlYWRlciBpbiB0aGUgYmFzaCBzb3VyY2VzIG92ZXJyaWRlcwordGhlIHVuaXN0ZC5oIG1hY3JvIHRvICd4JyB3aGVuIEhBVkVfU1RSSU5HSVpFIGlzIG5vdCBkZWZpbmVkLCBjYXVzaW5nIHRoZQord3JhcHBlcnMgdG8gZ2VuZXJhdGUgY2FsbHMgdG8gJ3hyZWFkJyBhbmQgJ3hvcGVuJywgd2hpY2ggZG8gbm90IGV4aXN0LAorcmVzdWx0aW5nIGluIGEgZmFpbHVyZSB0byBsaW5rLgorCitBc3N1bWUgd2UgaGF2ZSBzdHJpbmdpemUgc3VwcG9ydCB3aGVuIGNyb3NzLWNvbXBpbGluZywgd2hpY2ggd29ya3MgYXJvdW5kIHRoZQoraXNzdWUuCisKK0l0IG1heSBiZSBiZXN0IGZvciB1cHN0cmVhbSB0byBlaXRoZXIgZ2l2ZSB1cCBvbiBzdXBwb3J0aW5nIGNvbXBpbGVycyB3aXRob3V0CitzdHJpbmdpemUgc3VwcG9ydCwgb3IgdG8gbm90IGRlZmluZSBTVFJJTkcoKSBhdCBhbGwgd2hlbiBGT1JUSUZZX1NPVVJDRVMgaXMKK2RlZmluZWQsIGxldHRpbmcgdGhlIHVuaXN0ZC5oIG9uZSBiZSB1c2VkLCBpbnN0ZWFkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworLS0tIGJhc2gtNC4yLm9yaWcvYnVpbHRpbnMvbWtidWlsdGlucy5jCisrKysgYmFzaC00LjIvYnVpbHRpbnMvbWtidWlsdGlucy5jCitAQCAtMjgsNiArMjgsNyBAQAorICMgIGRlZmluZSBIQVZFX1NURExJQl9ICisKKyAjICBkZWZpbmUgSEFWRV9SRU5BTUUKKysjICBkZWZpbmUgSEFWRV9TVFJJTkdJWkUKKyAjZW5kaWYgLyogQ1JPU1NfQ09NUElMSU5HICovCisKKyAjaWYgZGVmaW5lZCAoSEFWRV9VTklTVERfSCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkM2I5OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCittYWtlIC1rIFRISVNfU0g9L2Jpbi9iYXNoIEJVSUxEX0RJUj0uIHJ1bnRlc3QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvdGVzdC1vdXRwdXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L3Rlc3Qtb3V0cHV0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMDliN2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L3Rlc3Qtb3V0cHV0LnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0FkZCBGQUlML1BBU1Mgb3V0cHV0IHRvIHRlc3Qgb3V0cHV0LgorCitTaWduZWQtb2ZmLWJ5OiBCasO2cm4gU3RlbmJlcmcgPGJqc3RAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorZGlmZiAtdU5yIGEvdGVzdHMvcnVuLWFsbCBiL3Rlc3RzL3J1bi1hbGwKKy0tLSBhL3Rlc3RzL3J1bi1hbGwJMTk5OS0xMC0wOCAxNzowNzo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBiL3Rlc3RzL3J1bi1hbGwJMjAxMi0xMC0yNyAyMTowNDoxOC42NjMzMzE4ODcgKzAyMDAKK0BAIC0yMiw3ICsyMiwxNSBAQAorIAljYXNlICR4IGluCisgCSQwfHJ1bi1taW5pbWFsfHJ1bi1ncHJvZikJOzsKKyAJKi5vcmlnfCp+KSA7OworLQkqKQllY2hvICR4IDsgc2ggJHggOzsKKysgICAgKikgIGVjaG8gJHgKKysgICAgICAgICBvdXRwdXQ9YHNoICR4YAorKyAgICAgICAgIGlmIFsgLW4gIiRvdXRwdXQiIF07IHRoZW4KKysgICAgICAgICAgICAgZWNobyAiJG91dHB1dCIKKysgICAgICAgICAgICAgZWNobyAiRkFJTDogJHgiCisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICBlY2hvICJQQVNTOiAkeCIKKysgICAgICAgICBmaQorKyAgICAgICAgIDs7CisgCWVzYWMKKyBkb25lCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2guaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDZmMTU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLmluYwpAQCAtMCwwICsxLDYwIEBACitTVU1NQVJZID0gIkFuIHNoLWNvbXBhdGlibGUgY29tbWFuZCBsYW5ndWFnZSBpbnRlcnByZXRlciIKK0hPTUVQQUdFID0gImh0dHA6Ly90aXN3d3cuY2FzZS5lZHUvcGhwL2NoZXQvYmFzaC9iYXNodG9wLmh0bWwiCitTRUNUSU9OID0gImJhc2Uvc2hlbGwiCisKK0RFUEVORFMgPSAibmN1cnNlcyBiaXNvbi1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyB1cGRhdGUtYWx0ZXJuYXRpdmVzIHB0ZXN0CisKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0tZXhjbHVkZT1hdXRvaGVhZGVyIgorRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLWpvYi1jb250cm9sIgorCisjIElmIE5PTl9JTlRFUkFDVElWRV9MT0dJTl9TSEVMTFMgaXMgZGVmaW5lZCwgYWxsIGxvZ2luIHNoZWxscyByZWFkIHRoZQorIyBzdGFydHVwIGZpbGVzLCBldmVuIGlmIHRoZXkgYXJlIG5vdCBpbnRlcmFjdGl2ZS4KKyMgVGhpcyBpcyB3aGF0IG90aGVyIG1ham9yIGRpc3Ryb3MgZG8uIEFuZCB0aGlzIGlzIHdoYXQgd2Ugd2FudGVkLiBTZWUgYnVnIzUzNTkgYW5kIGJ1ZyM3MTM3LgorQ0ZMQUdTICs9ICItRE5PTl9JTlRFUkFDVElWRV9MT0dJTl9TSEVMTFMiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInNoIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3NoXSA9ICIke2Jhc2VfYmluZGlyfS9zaCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtzaF0gPSAiJHtiYXNlX2JpbmRpcn0vYmFzaCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworUkRFUEVORFNfJHtQTn0gKz0gImJhc2UtZmlsZXMiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIm1ha2UiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorCQljYXQgJHtTfS9hY2xvY2FsLm00ID4gJHtTfS9hY2luY2x1ZGUubTQKKwlmaQorfQorCitkb19jb21waWxlX3B0ZXN0ICgpIHsKKwlvZV9ydW5tYWtlIGJ1aWxkdGVzdAorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBNb3ZlIC91c3IvYmluL2Jhc2ggdG8gL2Jpbi9iYXNoLCBpZiBuZWVkCisJaWYgWyAiJHtiYXNlX2JpbmRpcn0iICE9ICIke2JpbmRpcn0iIF07IHRoZW4KKwkJbWtkaXIgLXAgJHtEfSR7YmFzZV9iaW5kaXJ9CisJCW12ICR7RH0ke2JpbmRpcn0vYmFzaCAke0R9JHtiYXNlX2JpbmRpcn0KKwlmaQorfQorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0ICgpIHsKKwkjIENsZWFuIGhvc3QgcGF0aCBpbiBiYXNoYnVnCisJc2VkIC1pIC1lICJzLCR7U1RBR0lOR19ESVJfVEFSR0VUfSwsZyIgJHtEfSR7YmluZGlyfS9iYXNoYnVnCit9CisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworCW1ha2UgSU5TVEFMTF9URVNUX0RJUj0ke0R9JHtQVEVTVF9QQVRIfS90ZXN0cyBpbnN0YWxsLXRlc3QKKwljcCAke0J9L01ha2VmaWxlICR7RH0ke1BURVNUX1BBVEh9CisgICAgICAgIHNlZCAtaSAncy9eTWFrZWZpbGUvX01ha2VmaWxlLycgJHtEfSR7UFRFU1RfUEFUSH0vTWFrZWZpbGUKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlncmVwIC1xICJeJHtiYXNlX2JpbmRpcn0vYmFzaCQiICREJHtzeXNjb25mZGlyfS9zaGVsbHMgfHwgZWNobyAke2Jhc2VfYmluZGlyfS9iYXNoID4+ICREJHtzeXNjb25mZGlyfS9zaGVsbHMKK30KKworcGtnX3Bvc3RybV8ke1BOfSAoKSB7CisJcHJpbnRmICIkKGdyZXAgLXYgIl4ke2Jhc2VfYmluZGlyfS9iYXNoJCIgJEQke3N5c2NvbmZkaXJ9L3NoZWxscylcbiIgPiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvYnVpbGQtdGVzdHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvYnVpbGQtdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNhODFiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9idWlsZC10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDU1IEBACitBZGQgJ3B0ZXN0JyB0YXJnZXQgdG8gTWFrZWZpbGUsIHRvIHJ1biB0ZXN0cyB3aXRob3V0IGNoZWNraW5nIGRlcGVuZGVuY2llcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBBbmRlcnMgUm94ZWxsIDxhbmRlcnMucm94ZWxsQGVuZWEuY29tPgorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAyNCArKysrKysrKysrKysrKysrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTg0OCwyMCArODQ4LDM0IEBAIG1heWJlLWNsZWFuOgorIAlmaQorIAorIHJlY2hvJChFWEVFWFQpOgkJJChTVVBQT1JUX1NSQylyZWNoby5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgJHtMREZMQUdTX0ZPUl9CVUlMRH0gLW8gJEAgJChTVVBQT1JUX1NSQylyZWNoby5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpICR7TERGTEFHU30gLW8gJEAgJDwKKyAKKyB6ZWNobyQoRVhFRVhUKToJCSQoU1VQUE9SVF9TUkMpemVjaG8uYworLQlAJChDQ19GT1JfQlVJTEQpICQoQ0NGTEFHU19GT1JfQlVJTEQpICR7TERGTEFHU19GT1JfQlVJTER9IC1vICRAICQoU1VQUE9SVF9TUkMpemVjaG8uYyAke0xJQlNfRk9SX0JVSUxEfQorKwlAJChDQykgJChDQ0ZMQUdTKSAke0xERkxBR1N9IC1vICRAICQ8CisgCisgcHJpbnRlbnYkKEVYRUVYVCk6CSQoU1VQUE9SVF9TUkMpcHJpbnRlbnYuYworLQlAJChDQ19GT1JfQlVJTEQpICQoQ0NGTEFHU19GT1JfQlVJTEQpICR7TERGTEFHU19GT1JfQlVJTER9IC1vICRAICQoU1VQUE9SVF9TUkMpcHJpbnRlbnYuYyAke0xJQlNfRk9SX0JVSUxEfQorKwlAJChDQykgJChDQ0ZMQUdTKSAke0xERkxBR1N9IC1vICRAICQ8CisgCisgeGNhc2UkKEVYRUVYVCk6CSQoU1VQUE9SVF9TUkMpeGNhc2UuYworLQlAJChDQ19GT1JfQlVJTEQpICQoQ0NGTEFHU19GT1JfQlVJTEQpICR7TERGTEFHU19GT1JfQlVJTER9IC1vICRAICQoU1VQUE9SVF9TUkMpeGNhc2UuYyAke0xJQlNfRk9SX0JVSUxEfQorKwlAJChDQykgJChDQ0ZMQUdTKSAke0xERkxBR1N9IC1vICRAICQ8CisgCistdGVzdCB0ZXN0cyBjaGVjazoJZm9yY2UgJChQcm9ncmFtKSAkKFRFU1RTX1NVUFBPUlQpCisrdGVzdCB0ZXN0cyBjaGVjazoKKysJQCQoTUFLRSkgaW5zdGFsbC10ZXN0CisrCUAkKE1BS0UpIHJ1bnRlc3QKKysKKytpbnN0YWxsLXRlc3Q6IGJ1aWxkdGVzdAorK2lmZXEgKCQob3JpZ2luIElOU1RBTExfVEVTVF9ESVIpLCB1bmRlZmluZWQpCisgCUAtdGVzdCAtZCB0ZXN0cyB8fCBta2RpciB0ZXN0cworIAlAY3AgJChURVNUU19TVVBQT1JUKSB0ZXN0cworK2Vsc2UKKysJQC10ZXN0IC1kICQoSU5TVEFMTF9URVNUX0RJUikgfHwgbWtkaXIgLXAgJChJTlNUQUxMX1RFU1RfRElSKQorKwlAY3AgLXIgJChzcmNkaXIpL3Rlc3RzLyogJChJTlNUQUxMX1RFU1RfRElSKS8KKysJQGNwICQoVEVTVFNfU1VQUE9SVCkgJChJTlNUQUxMX1RFU1RfRElSKQorK2VuZGlmCisrCisrYnVpbGR0ZXN0OiBmb3JjZSAkKFByb2dyYW0pICQoVEVTVFNfU1VQUE9SVCkKKysKKytydW50ZXN0OgorIAlAKCBjZCAkKHNyY2RpcikvdGVzdHMgJiYgXAorIAkJUEFUSD0kKEJVSUxEX0RJUikvdGVzdHM6JCRQQVRIIFRISVNfU0g9JChUSElTX1NIKSAkKFNIRUxMKSAke1RFU1RTQ1JJUFR9ICkKKyAKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvZXhlY3V0ZV9jbWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvZXhlY3V0ZV9jbWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFmOGYwYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9leGVjdXRlX2NtZC5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCistLS0gZXhlY3V0ZV9jbWQuYy5vcmlnCUZyaSBKdW4gIDMgMTM6MzQ6NDIgMjAxMQorKysrIGV4ZWN1dGVfY21kLmMJRnJpIEp1biAgMyAxMzozNjo0MSAyMDExCitAQCAtMjIwMiw3ICsyMjAyLDExIEBACisgICAvKiBJZiB0aGUgYGxhc3RwaXBlJyBvcHRpb24gaXMgc2V0IHdpdGggc2hvcHQsIGFuZCBqb2IgY29udHJvbCBpcyBub3QKKyAgICAgIGVuYWJsZWQsIGV4ZWN1dGUgdGhlIGxhc3QgZWxlbWVudCBvZiBub24tYXN5bmMgcGlwZWxpbmVzIGluIHRoZQorICAgICAgY3VycmVudCBzaGVsbCBlbnZpcm9ubWVudC4gKi8KKy0gIGlmIChsYXN0cGlwZV9vcHQgJiYgam9iX2NvbnRyb2wgPT0gMCAmJiBhc3luY2hyb25vdXMgPT0gMCAmJiBwaXBlX291dCA9PSBOT19QSVBFICYmIHByZXYgPiAwKQorKyAgaWYgKGxhc3RwaXBlX29wdCAmJiAKKysjaWYgZGVmaW5lZChKT0JfQ09OVFJPTCkKKysJCWpvYl9jb250cm9sID09IDAgJiYgCisrI2VuZGlmCisrCQlhc3luY2hyb25vdXMgPT0gMCAmJiBwaXBlX291dCA9PSBOT19QSVBFICYmIHByZXYgPiAwKQorICAgICB7CisgICAgICAgbHN0ZGluID0gbW92ZV90b19oaWdoX2ZkICgwLCAwLCAyNTUpOworICAgICAgIGlmIChsc3RkaW4gPiAwKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTM5MWQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorT24gaG9zdHMgd2l0aCBGT1JUSUZZX1NPVVJDRVMsIHN0cmluZ2l6ZSBzdXBwb3J0IGlzIHJlcXVpcmVkLCBhcyBpdCdzIHVzZWQgYnkKK3RoZSBtYWNyb3MgdG8gd3JhcCBmdW5jdGlvbnMgKGUuZy4gcmVhZCBhbmQgb3BlbiBpbiB1bmlzdGQuaCkuIFRob3NlIHdyYXBwZXJzCit1c2UgdGhlIFNUUklORygpIG1hY3JvIGZyb20gdW5pc3RkLmguIEEgaGVhZGVyIGluIHRoZSBiYXNoIHNvdXJjZXMgb3ZlcnJpZGVzCit0aGUgdW5pc3RkLmggbWFjcm8gdG8gJ3gnIHdoZW4gSEFWRV9TVFJJTkdJWkUgaXMgbm90IGRlZmluZWQsIGNhdXNpbmcgdGhlCit3cmFwcGVycyB0byBnZW5lcmF0ZSBjYWxscyB0byAneHJlYWQnIGFuZCAneG9wZW4nLCB3aGljaCBkbyBub3QgZXhpc3QsCityZXN1bHRpbmcgaW4gYSBmYWlsdXJlIHRvIGxpbmsuCisKK0Fzc3VtZSB3ZSBoYXZlIHN0cmluZ2l6ZSBzdXBwb3J0IHdoZW4gY3Jvc3MtY29tcGlsaW5nLCB3aGljaCB3b3JrcyBhcm91bmQgdGhlCitpc3N1ZS4KKworSXQgbWF5IGJlIGJlc3QgZm9yIHVwc3RyZWFtIHRvIGVpdGhlciBnaXZlIHVwIG9uIHN1cHBvcnRpbmcgY29tcGlsZXJzIHdpdGhvdXQKK3N0cmluZ2l6ZSBzdXBwb3J0LCBvciB0byBub3QgZGVmaW5lIFNUUklORygpIGF0IGFsbCB3aGVuIEZPUlRJRllfU09VUkNFUyBpcworZGVmaW5lZCwgbGV0dGluZyB0aGUgdW5pc3RkLmggb25lIGJlIHVzZWQsIGluc3RlYWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gYmFzaC00LjIub3JpZy9idWlsdGlucy9ta2J1aWx0aW5zLmMKKysrKyBiYXNoLTQuMi9idWlsdGlucy9ta2J1aWx0aW5zLmMKK0BAIC0yOCw2ICsyOCw3IEBACisgIyAgZGVmaW5lIEhBVkVfU1RETElCX0gKKworICMgIGRlZmluZSBIQVZFX1JFTkFNRQorKyMgIGRlZmluZSBIQVZFX1NUUklOR0laRQorICNlbmRpZiAvKiBDUk9TU19DT01QSUxJTkcgKi8KKworICNpZiBkZWZpbmVkIChIQVZFX1VOSVNURF9IKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNmODEzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9ydW4tcHRlc3QKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK21ha2UgLWsgVEhJU19TSD0vYmluL2Jhc2ggQlVJTERfRElSPS4gc3JjZGlyPS4gIHJ1bnRlc3QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC90ZXN0LW91dHB1dC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC90ZXN0LW91dHB1dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjA5YjdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3Rlc3Qtb3V0cHV0LnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0FkZCBGQUlML1BBU1Mgb3V0cHV0IHRvIHRlc3Qgb3V0cHV0LgorCitTaWduZWQtb2ZmLWJ5OiBCasO2cm4gU3RlbmJlcmcgPGJqc3RAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorZGlmZiAtdU5yIGEvdGVzdHMvcnVuLWFsbCBiL3Rlc3RzL3J1bi1hbGwKKy0tLSBhL3Rlc3RzL3J1bi1hbGwJMTk5OS0xMC0wOCAxNzowNzo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBiL3Rlc3RzL3J1bi1hbGwJMjAxMi0xMC0yNyAyMTowNDoxOC42NjMzMzE4ODcgKzAyMDAKK0BAIC0yMiw3ICsyMiwxNSBAQAorIAljYXNlICR4IGluCisgCSQwfHJ1bi1taW5pbWFsfHJ1bi1ncHJvZikJOzsKKyAJKi5vcmlnfCp+KSA7OworLQkqKQllY2hvICR4IDsgc2ggJHggOzsKKysgICAgKikgIGVjaG8gJHgKKysgICAgICAgICBvdXRwdXQ9YHNoICR4YAorKyAgICAgICAgIGlmIFsgLW4gIiRvdXRwdXQiIF07IHRoZW4KKysgICAgICAgICAgICAgZWNobyAiJG91dHB1dCIKKysgICAgICAgICAgICAgZWNobyAiRkFJTDogJHgiCisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICBlY2hvICJQQVNTOiAkeCIKKysgICAgICAgICBmaQorKyAgICAgICAgIDs7CisgCWVzYWMKKyBkb25lCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfMy4yLjQ4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzMuMi40OC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDJiMjkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzMuMi40OC5iYgpAQCAtMCwwICsxLDQ2IEBACityZXF1aXJlIGJhc2guaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZmQ1ZDliY2FiZDhlZDVhNTRhMDFjZThkMTgzZDU5MmEiCisKK1BSID0gInIxMSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0ke1BWfS50YXIuZ3o7bmFtZT10YXJiYWxsIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtMy4yLXBhdGNoZXMvYmFzaDMyLTA0OTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNDkgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0zLjItcGF0Y2hlcy9iYXNoMzItMDUwO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA1MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTMuMi1wYXRjaGVzL2Jhc2gzMi0wNTE7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDUxIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtMy4yLXBhdGNoZXMvYmFzaDMyLTA1MjthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNTIgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0zLjItcGF0Y2hlcy9iYXNoMzItMDUzO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA1MyBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTMuMi1wYXRjaGVzL2Jhc2gzMi0wNTQ7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDU0IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtMy4yLXBhdGNoZXMvYmFzaDMyLTA1NTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNTUgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0zLjItcGF0Y2hlcy9iYXNoMzItMDU2O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA1NiBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTMuMi1wYXRjaGVzL2Jhc2gzMi0wNTc7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDU3IFwKKyAgICAgICAgICAgZmlsZTovL21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYnVpbGQtdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGVzdC1vdXRwdXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2RvbnQtaW5jbHVkZS10YXJnZXQtQ0ZMQUdTLWluLWhvc3QtTERGTEFHUy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICIzMzhkY2Y5NzVhOTM2NDBiYjNlYWE4NDNjYTQyZTNmOCIKK1NSQ19VUklbdGFyYmFsbC5zaGEyNTZzdW1dID0gIjEyOGQyODFiZDU2ODJiYTVmNjk1MzEyMjkxNWRhNzE5NzYzNTdkN2E3NjQ5MGQyNjZjOTE3M2IxZDA0MjYzNDgiCitTUkNfVVJJW3BhdGNoMDQ5Lm1kNXN1bV0gPSAiYWY1NzFhMmQxNjRkNWFiZGNhZTQ0OTllOTRlODg5MmMiCitTUkNfVVJJW3BhdGNoMDQ5LnNoYTI1NnN1bV0gPSAiYjEyMTdlZDk0YmRiOTVkYzg3OGZhNWNhYmJmOGExNjQ0MzVlYjBkOWRhMjNhMzkyMTk4ZjQ4NTY2ZWUzNGEyZiIKK1NSQ19VUklbcGF0Y2gwNTAubWQ1c3VtXSA9ICI4NDQzZDQzODVkNzNlYzgzNWFiZTQwMWQ5MDU5MTM3NyIKK1NSQ19VUklbcGF0Y2gwNTAuc2hhMjU2c3VtXSA9ICIwODFiYjAzYzU4MGVjZWU2M2JhMDNiNDBiZWIzY2FmNTA5ZWNhMjk1MTViMmU4ZGQzYzA3ODUwMzYwOWExNjQyIgorU1JDX1VSSVtwYXRjaDA1MS5tZDVzdW1dID0gIjE1YzY2NTMwNDJlOTgxNGFhODcxMjAwOThmYzdhODQ5IgorU1JDX1VSSVtwYXRjaDA1MS5zaGEyNTZzdW1dID0gIjM1NDg4NjA5N2NkOTViNGRlZjc3MDI4ZjMyZWUwMWUyZTA4OGQ1OGE5ODE4NGZlZGU5ZDNjZTkzMjBlMjE4ZWYiCitTUkNfVVJJW3BhdGNoMDUyLm1kNXN1bV0gPSAiNjkxMDIzYTk0NGJiYjkwMDNjYzkyYWQ0NjJkOTFmYTEiCitTUkNfVVJJW3BhdGNoMDUyLnNoYTI1NnN1bV0gPSAiYTBlY2NmOWNlZGE1MDg3MWRiMTBkMjFlZmRkNzRiOTllMzVlZmJkNTVjOTcwYzQwMGVlYWRlMDEyODE2YmI2MSIKK1NSQ19VUklbcGF0Y2gwNTMubWQ1c3VtXSA9ICJlYjk3ZDFjOTIzMGE1NTI4M2Q5ZGFjNjlkM2RlMmU0NiIKK1NSQ19VUklbcGF0Y2gwNTMuc2hhMjU2c3VtXSA9ICJmZTZmMGU5NmUwYjk2NmVhZWQ5ZmI1ZTkzMGNhMTI4OTFmNDM4MGYzMGY5ZTBhNzczZDIwMGZmMjA2M2E4NjRlIgorU1JDX1VSSVtwYXRjaDA1NC5tZDVzdW1dID0gIjExMDc3NDQwNThjNDNiMjQ3ZjU5NzU4NGI4OGJhMGE2IgorU1JDX1VSSVtwYXRjaDA1NC5zaGEyNTZzdW1dID0gImM2ZGFiOTExZTg1Njg4YzU0MmNlNzVhZmMxNzVkYmI0ZTUwMTFkZTUxMDI3NThlMTlhNGE4MGRhYzFlNzkzNTkiCitTUkNfVVJJW3BhdGNoMDU1Lm1kNXN1bV0gPSAiMDVkMjAxMTc2ZDM0OTllMmRmYTRhNzNkMDlkNDJmMDUiCitTUkNfVVJJW3BhdGNoMDU1LnNoYTI1NnN1bV0gPSAiYzBlODE2NzAwODM3OTQyZWQ1NDhkYTc0ZTU5MTdmNzRiNzBjYmJiYjEwYzlmMmNhZjczZThlMDZhMDcxM2QwYSIKK1NSQ19VUklbcGF0Y2gwNTYubWQ1c3VtXSA9ICIyMjJlYWEzYTJjMjZmNTRhMTVhYTVlMDg4MTdhNTM0YSIKK1NSQ19VUklbcGF0Y2gwNTYuc2hhMjU2c3VtXSA9ICIwNjNhOGQ4ZDc0ZTQ0MDdiZjA3YTMyYjk2NWI4ZWY2ZDIxM2E2NmFiZGI2YWYyNmNjMzU4NGE0MzdhNTZiYmI0IgorU1JDX1VSSVtwYXRjaDA1Ny5tZDVzdW1dID0gIjQ3ZDk4ZTNlMDQyODkyNDk1YzVlZmU1NGVjNmU1OTEzIgorU1JDX1VSSVtwYXRjaDA1Ny5zaGEyNTZzdW1dID0gIjVmYzY4OTM5NGQ1MTU5OTBmNWVhNzRlMmRmNzY1ZmM2ZTVlNDJjYTQ0YjQ1OTFiMmM2ZjliZTRiMGNhZGYwZjAiCisKK1BBUkFMTEVMX01BS0UgPSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzQuMy4zMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaF80LjMuMzAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExZTYxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaF80LjMuMzAuYmIKQEAgLTAsMCArMSw0NiBAQAorcmVxdWlyZSBiYXNoLmluYworCisjIEdQTHYyKyAoPCA0LjApLCBHUEx2MysgKD49IDQuMCkKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9iYXNoLyR7QlB9LnRhci5nejtuYW1lPXRhcmJhbGwgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDMxO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzMSBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzI7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDMyIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzMzthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzMgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDM0O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzNCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzU7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDM1IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzNjthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzYgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDM3O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzNyBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzg7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDM4IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzOTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzkgXAorICAgICAgICAgICBmaWxlOi8vZXhlY3V0ZV9jbWQucGF0Y2g7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgZmlsZTovL21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYnVpbGQtdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGVzdC1vdXRwdXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICJhMjdiM2VlOWJlODNiZDNiYTQ0OGMwZmY1MmIyODQ0NyIKK1NSQ19VUklbdGFyYmFsbC5zaGEyNTZzdW1dID0gIjMxNzg4MTAxOWJiZjIyNjJmYjgxNGI3ZGQ4ZTQwNjMyZDEzYzM2MDhkMmYyMzc4MDBhODgyOGZiYjhhNjQwZGQiCisKK1NSQ19VUklbcGF0Y2gwMzEubWQ1c3VtXSA9ICIyMzZkZjFhYzExMzBhMDMzZWQwZGJlMmQyMTE1ZjI4ZiIKK1NSQ19VUklbcGF0Y2gwMzEuc2hhMjU2c3VtXSA9ICJjZDUyOWY1OWRkMGYyZmRkNDlkNjE5ZmUzNDY5MWRhNmYwYWZmZWRmODdjYzM3Y2Q0NjBhOWYzZmU4MTJhNjFkIgorU1JDX1VSSVtwYXRjaDAzMi5tZDVzdW1dID0gIjIzNjBmN2U3OWNmYjI4NTI2ZjgwMDIxMDI1ZWE1OTA5IgorU1JDX1VSSVtwYXRjaDAzMi5zaGEyNTZzdW1dID0gIjg4OTM1N2QyOWE2MDA1YjJjMzMwOGNhNWI2Mjg2Y2IyMjNiNWU5YzA4MzIxOWU1ZGIzMTU2MjgyZGQ1NTRmNGEiCitTUkNfVVJJW3BhdGNoMDMzLm1kNXN1bV0gPSAiYjU1MWM0ZWU3Yjg3MTM3NTllNDE0MzQ5OWQwYmJkNDgiCitTUkNfVVJJW3BhdGNoMDMzLnNoYTI1NnN1bV0gPSAiZmIyYTc3ODdhMTNmYmUwMjdhNzMzNWFjYTZlYjNjMjFjZGJkODEzZTllZGMyMjEyNzRiNmE5ZDg2OTJlYWExNiIKK1NSQ19VUklbcGF0Y2gwMzQubWQ1c3VtXSA9ICJjOWE1NmZiZTAzNDhlMDVhODg2ZGZmOTdmMjg3MmI3NCIKK1NSQ19VUklbcGF0Y2gwMzQuc2hhMjU2c3VtXSA9ICJmMTY5NGYwNGYxMTBkZWZlMTMzMGE4NTFjYzI3NjhlN2U1N2RkZDJkZmRiMGUzZTM1MGNhMGUzYzIxNGZmODg5IgorU1JDX1VSSVtwYXRjaDAzNS5tZDVzdW1dID0gImU1NjRlOGFiNDRlZDFjYTNhNGUzMTVhOWY2Y2FiZGM5IgorU1JDX1VSSVtwYXRjaDAzNS5zaGEyNTZzdW1dID0gIjM3MGQ4NWU1MTc4MDAzNmYyMzg2ZGMxOGM1ZWZlOTk2ZWJhOGU2NTJmYzE5NzNmMGY0ZjJhYjU1YTk5M2MxZTMiCitTUkNfVVJJW3BhdGNoMDM2Lm1kNXN1bV0gPSAiYjAwZmY2NmM0MWE3YzBmMDZlMTkxMjAwOTgxOTgwYjAiCitTUkNfVVJJW3BhdGNoMDM2LnNoYTI1NnN1bV0gPSAiYWM1ZjgyNDQ1YjM2ZWZkYjU0M2RiZmFlNjRhZmVkNjNmNTg2ZDc1NzRiODMzZTlhYTljZDUxNzBiYzVmZDI3YyIKK1NSQ19VUklbcGF0Y2gwMzcubWQ1c3VtXSA9ICJiZTJhN2IwNWY2YWU1NjAzMTNmM2M5ZDVmNzEyN2JkYSIKK1NSQ19VUklbcGF0Y2gwMzcuc2hhMjU2c3VtXSA9ICIzM2YxNzBkZDc0MDBhYjM0MThkNzQ5YzU1YzYzOTFiMWQxNjFlZjJkZTdhY2VkMTg3MzQ1MWIzYTNmY2E1ODEzIgorU1JDX1VSSVtwYXRjaDAzOC5tZDVzdW1dID0gIjYxZTA1MjI4MzBiMjRmYmU4YzBkMWIwMTBmMTMyNDcwIgorU1JDX1VSSVtwYXRjaDAzOC5zaGEyNTZzdW1dID0gImFkYmVhYTUwMGNhN2E4MjUzNWYwZTg4ZDY3MzY2MTk2M2Y4YTVmY2RjN2FkNjM0NDVlNjhiZjViNDk3ODYzNjciCitTUkNfVVJJW3BhdGNoMDM5Lm1kNXN1bV0gPSAiYTQ3NzU0ODdhYmU5NTg1MzY3NTFjOGNlNTNjZGY2ZjkiCitTUkNfVVJJW3BhdGNoMDM5LnNoYTI1NnN1bV0gPSAiYWI5NGRjZWQyMjE1NTQxMDk3NjkxZjYwYzNlYjMyM2NjMjhlZjI1NDk0NjNlNmE1MzM0YmJjYzFlNjFlNzRlYyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYy9iY18xLjA2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmMvYmNfMS4wNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGM4YTg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmMvYmNfMS4wNi5iYgpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIkFyYml0cmFyeSBwcmVjaXNpb24gY2FsY3VsYXRvciBsYW5ndWFnZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYy9iYy5odG1sIgorCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWQ4MDQ1ZjNiOGY5MjljMWNiMjlhMWUzZmQ3MzdiNDk5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2JjL2JjZGVmcy5oO2VuZGxpbmU9MzE7bWQ1PTQ2ZGZmZGFmMTBhOTk3MjhkZDhjZTM1OGU0NWQ0NmQ4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RjL2RjLmg7ZW5kbGluZT0yNTttZDU9MmY5YzU1OGNkZDgwZTMxYjRkOTA0ZTQ4YzIzNzQzMjggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL251bWJlci5jO2VuZGxpbmU9MzE7bWQ1PTk5NDM0YTA4OThhYmNhNzc4NGFjZmQzNmI4MTkxMTk5IgorCitTRUNUSU9OID0gImJhc2UiCitERVBFTkRTID0gImZsZXgiCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2JjL2JjLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtc2VnbWVudC1mYXVsdC5wYXRjaCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNDRiNWRkZGViZDhhN2E3MzA5YWVhNmMzNmZkYTExNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0ZWY2ZDlmMTdjM2MwZDkyZDg3OThlMzU2NjYxNzVlY2QzZDhlZmFjNDAwOWQ2NDU3YjVjOTljZWE3MmMwZTMzIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiZGMiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmMvZmlsZXMvZml4LXNlZ21lbnQtZmF1bHQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYy9maWxlcy9maXgtc2VnbWVudC1mYXVsdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGMwZGEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmMvZmlsZXMvZml4LXNlZ21lbnQtZmF1bHQucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3doZW4gcnVuIGNvbW1hbmQgc3VjaCBhcyAnZWNobyAiYSA9IDEzIiB8IGJjIC1sJywgaXQgc2VnbWVudGF0aW9uIGZhdWx0cy4KK1RoaXMgcGF0Y2ggaXMgZnJvbSBodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vYmxmcy1zdXBwb3J0QGxpbnV4ZnJvbXNjcmF0Y2gub3JnL21zZzA0NjAyLmh0bWwuCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCistLS0gYmMtMS4wNi9saWIvbnVtYmVyLmMub3JpZwkyMDAzLTA5LTI2IDIxOjE0OjAyLjAwMDAwMDAwMCArMDAwMAorKysrIGJjLTEuMDYvbGliL251bWJlci5jCTIwMDMtMDktMjYgMjE6MTQ6MjYuMDAwMDAwMDAwICswMDAwCitAQCAtMzQsNiArMzQsNyBAQAorICNpbmNsdWRlIDxudW1iZXIuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8Y3R5cGUuaD4vKiBQcm90b3R5cGVzIG5lZWRlZCBmb3IgZXh0ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4gKi8KKyAKKyAjZGVmaW5lIGJjX3J0X3dhcm4gcnRfd2FybgorLS0tIGJjLTEuMDYvYmMvbG9hZC5jLm9yaWcJMjAwMy0wOS0yNiAyMToxNDoxNC4wMDAwMDAwMDAgKzAwMDAKKysrKyBiYy0xLjA2L2JjL2xvYWQuYwkyMDAzLTA5LTI2IDIxOjE0OjI2LjAwMDAwMDAwMCArMDAwMAorQEAgLTE1Niw3ICsxNTYsNyBAQAorICAgbG9uZyAgbGFiZWxfbm87CisgICBsb25nICB2YWZfbmFtZTsJLyogdmFyaWFibGUsIGFycmF5IG9yIGZ1bmN0aW9uIG51bWJlci4gKi8KKyAgIGxvbmcgIGZ1bmM7CistICBwcm9ncmFtX2NvdW50ZXIgc2F2ZV9hZHI7CisrICBzdGF0aWMgcHJvZ3JhbV9jb3VudGVyIHNhdmVfYWRyOworIAorICAgLyogSW5pdGlhbGl6ZS4gKi8KKyAgIHN0ciA9IGNvZGU7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMS1maXgtdHlwb3MtaW4tbWFucGFnZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAxLWZpeC10eXBvcy1pbi1tYW5wYWdlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZTM2OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMS1maXgtdHlwb3MtaW4tbWFucGFnZS5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIDljYjE2NjdmOWQzYTliY2ZjM2I4MzQ2NmNkOGQzYjc5ZjA1NTRmZjAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBemF0IEtodXpoaW4gPGEzYXQubWFpbEBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDggSnVsIDIwMTUgMDE6Mzc6MDkgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzNdIGZpeCB0eXBvcyBpbiBtYW5wYWdlCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9iL2Jsa3Rvb2wvYmxrdG9vbF80LTcuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AbGludXguaW50ZWwuY29tPgorCistLS0KKyBibGt0b29sLjggfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmxrdG9vbC44IGIvYmxrdG9vbC44CitpbmRleCBhMWY1Yzk2Li40NWI3NzI0IDEwMDY0NAorLS0tIGEvYmxrdG9vbC44CisrKysgYi9ibGt0b29sLjgKK0BAIC0xOTEsNyArMTkxLDcgQEAgUXVlcnkgb3Igc2V0IGRldmljZSBidXMgc3RhdGUgKDAgb2ZmLCAxIG9uLCAyIHRyaXN0YXRlKQorIFF1ZXJ5IHRoZSBkZXRlY3RlZCAob3Igb3ZlcnJpZGRlbiwgdmlhIC10KSBkZXZpY2UgY2xhc3MuCisgVHlwaWNhbGx5IHRoaXMgd2lsbCByZXN1bHQgaW4gJ0FUQScgb3IgJ1NDU0knIGZvciBtb3N0IGRldmljZXMuCisgRGV0ZWN0aW9uIGlzIGJhc2VkIG9uIGRldmljZSBtYWpvcjsgdGh1cyB5b3VyIFNBVEEgZGV2aWNlIG1heSBhcHBlYXIgYXMKKy0nU0NTSScuCisrXCYnU0NTSScuCisgCisgLlRQCisgLkIgY2Qtc3BlZWQKK0BAIC0yMzcsNyArMjM3LDcgQEAgT21pdHRpbmcgdGhlIG9uL29mZiBhcmd1bWVudCB3aWxsIHByaW50IHRoZSBjdXJyZW50IHN0YXRlLgorIAorIC5UUAorIC5CIG1lZGlhCistTG9jayBpbiAob3IgdW5sb2NrKSBhIHJlbW92ZWFibGUgZGV2aWNlLgorK0xvY2sgaW4gKG9yIHVubG9jaykgYSByZW1vdmFibGUgZGV2aWNlLgorIAorIC5UUAorIC5CIG11bHRpcGxlLWNvdW50CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAyLWZpeC1zdHJpbmctZXJyb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMi1maXgtc3RyaW5nLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOGFiYTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMi1maXgtc3RyaW5nLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gZGRiMTA3MWRhMmM3OGQ4MTU1YWFiNjJlOWYwZDQ2ZjY5NTAwMjAwZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEF6YXQgS2h1emhpbiA8YTNhdC5tYWlsQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgOCBKdWwgMjAxNSAwMTo0MjoyNCArMDMwMAorU3ViamVjdDogW1BBVENIIDIvM10gZml4IHN0cmluZyBlcnJvcgorCitUaGlzIHBhdGNoIGlzIHRha2VuIGZyb20KK2Z0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vYi9ibGt0b29sL2Jsa3Rvb2xfNC03LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGxpbnV4LmludGVsLmNvbT4KKworLS0tCisgdXRpbC5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdXRpbC5jIGIvdXRpbC5jCitpbmRleCAxZjNhOWNhLi4yY2NmNTZhIDEwMDY0NAorLS0tIGEvdXRpbC5jCisrKysgYi91dGlsLmMKK0BAIC0yOCw3ICsyOCw3IEBAIHZvaWQgcGRpZShjb25zdCBjaGFyICptc2csIGludCBwZXJyKQorIAlpZiAocGVycikKKyAJCXBlcnJvcihtc2cpOworIAllbHNlCistCQlmcHJpbnRmKHN0ZGVyciwgbXNnKTsKKysJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBtc2cpOworIAlpZiAoYmxrZGV2ID49IDApCisgCQljbG9zZShibGtkZXYpOworIAlleGl0KDEpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMy1GaXgtMy1kLWFyZ3VtZW50LWZvci1CTEtST1NFVC1pdC1tdXN0LWJlLWNvbnN0LWludC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAzLUZpeC0zLWQtYXJndW1lbnQtZm9yLUJMS1JPU0VULWl0LW11c3QtYmUtY29uc3QtaW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZWQwYjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMy1GaXgtMy1kLWFyZ3VtZW50LWZvci1CTEtST1NFVC1pdC1tdXN0LWJlLWNvbnN0LWludC5wYXRjaApAQCAtMCwwICsxLDc4IEBACitGcm9tIDY4ZmFhNjNhYWFkODFmNGEyODllNGEwMzE3M2FiNGNmNzk4ZGViNTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBemF0IEtodXpoaW4gPGEzYXQubWFpbEBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDEgTm92IDIwMTQgMjI6MjQ6MzIgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIEZpeCAzLWQgYXJndW1lbnQgZm9yIEJMS1JPU0VUIGl0IG11c3QgYmUgJ2NvbnN0IGludCAqJworCitNb3N0IG9mICpTRVQgaW9jdGxzIGhhdmUgaW50IHR5cGUgZm9yIDMtZCBhcmd1bWVudCwgZXhjZXB0IEJMS1JPU0VULgorU28gYWRkIGJjX2FyZ190eXBlIGVudW0sIGJ1aWxkIGl0IGludG8gYm9vbF9jb21hbmQgYW5kIGluc3RhbGwgYXJnX3R5cGUKK3RvIGJjX2FyZ19pbnRfcHRyIGZvciBCTEtST1NFVCBvbmx5LgorCitEZWJpYW4tYnVnLWlkOiA2NDExNjQKK0xpbms6IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzY0MTE2NAorCitUaGlzIHBhdGNoIGlzIHRha2VuIGZyb20KK2Z0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vYi9ibGt0b29sL2Jsa3Rvb2xfNC03LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGxpbnV4LmludGVsLmNvbT4KKworLS0tCisgYmxrdG9vbC5jIHwgMTEgKysrKysrKysrLS0KKyBibGt0b29sLmggfCAgNyArKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmxrdG9vbC5jIGIvYmxrdG9vbC5jCitpbmRleCBmYmVmZWNkLi4yMjFhMTk1IDEwMDY0NAorLS0tIGEvYmxrdG9vbC5jCisrKysgYi9ibGt0b29sLmMKK0BAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYm9vbF9jb21tYW5kIGJvb2xfY21kX3RibFtdID0geworIAl7IHsgREVGX0JPT0woInBpby1kYXRhIiksIGRjX2F0YSwgREVGX0hESU8oMzJCSVQpIH0sCisgCSAgIjE2LWJpdCIsICIzMi1iaXQiIH0sCisgCXsgeyBERUZfQk9PTCgicmVhZG9ubHkiKSwgZGNfYW55LCBJT0NOQU1FKEJMS1JPR0VUKSwgSU9DTkFNRShCTEtST1NFVCkgfSwKKy0JICBERUZfQk9PTFNUUiB9LAorKwkgIERFRl9CT09MU1RSLCBiY19hcmdfaW50X3B0ciB9LAorIAl7IHsgREVGX0JPT0woInVubWFzay1pcnEiKSwgZGNfYXRhLCBERUZfSERJTyhVTk1BU0tJTlRSKSB9LAorIAkgIERFRl9CT09MU1RSIH0sCisgCXsgeyAid2NhY2hlIiwgY3RfYm9vbCwgaGFuZGxlX3djYWNoZSwgZGNfYW55LAorQEAgLTE3MSw3ICsxNzEsMTQgQEAgc3RhdGljIHZvaWQgaGFuZGxlX2Jvb2woaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBzdHJ1Y3QgY29tbWFuZCAqY21kKQorIAorIAl9IGVsc2UgaWYgKChhcmdjID09IDQpICYmIChjbWQtPndyaXRlX2lvY3RsX25hbWUgIT0gTlVMTCkpIHsKKyAJCWRvXzMyID0gcGFyc2VfYm9vbChhcmdjLCBhcmd2LCBiY20pOworLQkJaWYgKGlvY3RsKGJsa2RldiwgY21kLT53cml0ZV9pb2N0bCwgZG9fMzIpKQorKwkJCisrCQlpbnQgcmV0OworKwkJaWYgKGJjbS0+YXJnX3R5cGUgPT0gYmNfYXJnX2ludF9wdHIpIHsKKysJCQlyZXQgPSBpb2N0bChibGtkZXYsIGNtZC0+d3JpdGVfaW9jdGwsICZkb18zMik7CisrCQl9IGVsc2UgeworKwkJCXJldCA9IGlvY3RsKGJsa2RldiwgY21kLT53cml0ZV9pb2N0bCwgZG9fMzIpOworKwkJfQorKwkJaWYgKHJldCkKKyAJCQlwZGllKGNtZC0+d3JpdGVfaW9jdGxfbmFtZSwgMSk7CisgCX0KKyAJZWxzZSB7CitkaWZmIC0tZ2l0IGEvYmxrdG9vbC5oIGIvYmxrdG9vbC5oCitpbmRleCBmY2U0Mzg3Li44NWFkZDgzIDEwMDY0NAorLS0tIGEvYmxrdG9vbC5oCisrKysgYi9ibGt0b29sLmgKK0BAIC04NSwxMSArODUsMTggQEAgc3RydWN0IGNvbW1hbmQgeworIAljb25zdCBjaGFyCQkqd3JpdGVfaW9jdGxfbmFtZTsKKyB9OworIAorK2VudW0gYmNfYXJnX3R5cGUgeworKwliY19hcmdfaW50LAorKwliY19hcmdfaW50X3B0ciwKKyt9OworKworIHN0cnVjdCBib29sX2NvbW1hbmQgeworIAlzdHJ1Y3QgY29tbWFuZAkJY21kOworIAorIAljb25zdCBjaGFyCQkqc3RyX2ZhbHNlOworIAljb25zdCBjaGFyCQkqc3RyX3RydWU7CisrCisrCWVudW0gYmNfYXJnX3R5cGUgYXJnX3R5cGU7CisgfTsKKyAKKyBzdHJ1Y3QgY2xhc3Nfb3BlcmF0aW9ucyB7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbF80LTcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2xfNC03LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OTE5NmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2xfNC03LmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiVHVuZSBsb3ctbGV2ZWwgYmxvY2sgZGV2aWNlIHBhcmFtZXRlcnMiCitERVNDUklQVElPTiA9ICJibGt0b29sIGlzIHVzZWQgZm9yIHF1ZXJ5aW5nIGFuZC9vciBjaGFuZ2luZyBzZXR0aW5ncyBcCitvZiBhIGJsb2NrIGRldmljZS4gSXQgaXMgbGlrZSBoZHBhcm0gYnV0IGEgbW9yZSBnZW5lcmFsIHRvb2wsIGFzIGl0IFwKK3dvcmtzIG9uIFNDU0ksIElERSBhbmQgU0FUQSBkZXZpY2VzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9wYWNrYWdlcy5kZWJpYW4ub3JnL3Vuc3RhYmxlL2FkbWluL2Jsa3Rvb2wiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2Jsa3Rvb2wuYztiZWdpbmxpbmU9NztlbmRsaW5lPTg7bWQ1PWE1ZTc5OGVhOThmZDUwOTcyMDg4OTY4YTE1ZTVmMzczIgorCitERVBFTkRTID0gImdsaWItMi4wIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9iL2Jsa3Rvb2wvYmxrdG9vbF80Lm9yaWcudGFyLmd6O25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC10eXBvcy1pbi1tYW5wYWdlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItZml4LXN0cmluZy1lcnJvci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLUZpeC0zLWQtYXJndW1lbnQtZm9yLUJMS1JPU0VULWl0LW11c3QtYmUtY29uc3QtaW50LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gIjYyZWRjMDljOTkwODEwN2U2OTM5MWM4N2Y0ZjNmZDQwIgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiYjFlNmQ1OTEyNTQ2ZDJhNGI3MDRlYzY1YzJiOTY2NGFhM2I0NjYzZTdkODAwZTA2ODAzMzMwMzM1YTJjYjc2NCIKKworUyA9ICIke1dPUktESVJ9LyR7QlBOfS00Lm9yaWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2MuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2MuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZjhkNmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjYy5pbmMKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJCZXJrZWxleSBMQUxSIFlhY2MgcGFyc2VyIGdlbmVyYXRvciIKK0RFU0NSSVBUSU9OID0gIkEgcGFyc2VyIGdlbmVyYXRvciB1dGlsaXR5IHRoYXQgcmVhZHMgYSBncmFtbWFyIHNwZWNpZmljYXRpb24gZnJvbSBhIGZpbGUgYW5kIGdlbmVyYXRlcyBhbiBMUigxKSBcCitwYXJzZXIgZm9yIGl0LiAgVGhlIHBhcnNlcnMgY29uc2lzdCBvZiBhIHNldCBvZiBMQUxSKDEpIHBhcnNpbmcgdGFibGVzIGFuZCBhIGRyaXZlciByb3V0aW5lIHdyaXR0ZW4gaW4gdGhlIEMgXAorcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiUEQiCisKK1NSQ19VUkkgPSAiZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvYnlhY2MvYnlhY2MtJHtQVn0udGd6IFwKKyAgICAgICAgICAgZmlsZTovL2J5YWNjLW9wZW4ucGF0Y2giCisKK0VYVFJBX09FQ09ORiArPSAiLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSdzLF4sYiwnIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9fY29uZmlndXJlKCkgeworCWluc3RhbGwgLW0gMDc1NSAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dudS1jb25maWcvY29uZmlnLmd1ZXNzICR7U30KKwlpbnN0YWxsIC1tIDA3NTUgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nbnUtY29uZmlnL2NvbmZpZy5zdWIgJHtTfQorCW9lX3J1bmNvbmYKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjL2J5YWNjLW9wZW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjYy9ieWFjYy1vcGVuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjA1NDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjYy9ieWFjYy1vcGVuLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK2RpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmMKK2luZGV4IDYyMGNlM2YuLjgyMDcxYTQgMTAwNjQ0CistLS0gYS9tYWluLmMKKysrKyBiL21haW4uYworQEAgLTUyNiw3ICs1MjYsNyBAQCBteV9ta3N0ZW1wKGNoYXIgKnRlbXApCisgICAgIH0KKyAgICAgaWYgKChuYW1lID0gdGVtcG5hbShkbmFtZSwgZm5hbWUpKSAhPSAwKQorICAgICB7CistCWZkID0gb3BlbihuYW1lLCBPX0NSRUFUIHwgT19FWENMIHwgT19SRFdSKTsKKysgICAgICBmZCA9IG9wZW4obmFtZSwgT19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUiwgMDY2Nik7CisgCXN0cmNweSh0ZW1wLCBuYW1lKTsKKyAgICAgfQorICAgICBlbHNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjY18yMDE1MDcxMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjXzIwMTUwNzExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YjU0NTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjY18yMDE1MDcxMS5iYgpAQCAtMCwwICsxLDExIEBACisjIFNpZ2guIFRoaXMgaXMgb25lIG9mIHRob3NlIHBsYWNlcyB3aGVyZSBldmVyeW9uZSBsaWNlbnNlcyBpdCBkaWZmZXJlbnRseS4gU29tZW9uZQorIyBldmVuIGFwcGx5IFVDQiB0byBpdCAoRnJlZS9OZXQvT3BlbkJTRCkuIFRoZSBtYWludGFpbmVyIHN0YXRlcyB0aGF0OgorIyAiSSd2ZSBmb3VuZCBubyByZWxpYWJsZSBzb3VyY2Ugd2hpY2ggc3RhdGVzIHRoYXQgYnlhY2MgbXVzdCBiZWFyIGEgVUNCIGNvcHlyaWdodC4iCisjIFNldHRpbmcgdG8gUEQgYXMgdGhpcyBpcyB3aGF0IHRoZSB1cHN0cmVhbSBoYXMgaXQgYXMuCisKK0xJQ0VOU0UgPSAiUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9wYWNrYWdlL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PWM1MmZiMmQxYjNmNzViM2I3NTM0OTI3ODA3YTFiNzE0IgorcmVxdWlyZSBieWFjYy5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gIjI3MDA0MDEwMzA1ODNjNGU5MTY5YWM3ZWE3ZDA4ZGU4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMzNTRlNGVlMTRjNGExYmYxMWU1NWRkZTkyNzUwMTFkMTQ4ODdlZjA2NjQwNmEwODhiNmZhNTZjYWYwMzkyNDgiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9NYWtlZmlsZS5hbSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMTYzYjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDcxIEBACisKK2xpYl9MVExJQlJBUklFUyA9IGxpYmJ6Mi5sYQorCitsaWJiejJfbGFfU09VUkNFUyA9IGJsb2Nrc29ydC5jICBcCisgICAgICAgICAgICAgICAgICAgIGh1ZmZtYW4uYyAgICBcCisgICAgICAgICAgICAgICAgICAgIGNyY3RhYmxlLmMgICBcCisgICAgICAgICAgICAgICAgICAgIHJhbmR0YWJsZS5jICBcCisgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzLmMgICBcCisgICAgICAgICAgICAgICAgICAgIGRlY29tcHJlc3MuYyBcCisgICAgICAgICAgICAgICAgICAgIGJ6bGliLmMKKworYmluX1BST0dSQU1TID0gYnppcDIgYnppcDJyZWNvdmVyCisKK2J6aXAyX1NPVVJDRVMgPSBiemlwMi5jCitiemlwMl9MREFERCA9IGxpYmJ6Mi5sYQorYnppcDJfREVQRU5ERU5DSUVTID0gbGliYnoyLmxhCisKK2luY2x1ZGVfSEVBREVSUyA9IGJ6bGliLmgKKworYnppcDJyZWNvdmVyX1NPVVJDRVMgPSBiemlwMnJlY292ZXIuYworYnppcDJyZWNvdmVyX0xEQUREID0gbGliYnoyLmxhCitiemlwMnJlY292ZXJfREVQRU5ERU5DSUVTID0gbGliYnoyLmxhCisKK2Jpbl9TQ1JJUFRTID0gYnpncmVwIGJ6bW9yZSBiemRpZmYKKworbWFuX01BTlMgPSBiemlwMi4xIGJ6Z3JlcC4xIGJ6bW9yZS4xIGJ6ZGlmZi4xCitFWFRSQV9ESVNUID0gJChtYW5fTUFOUykKKworcnVudGVzdDoKKwkuL2J6aXAyIC0xICA8IHNhbXBsZTEucmVmID4gc2FtcGxlMS5yYjIKKwkuL2J6aXAyIC0yICA8IHNhbXBsZTIucmVmID4gc2FtcGxlMi5yYjIKKwkuL2J6aXAyIC0zICA8IHNhbXBsZTMucmVmID4gc2FtcGxlMy5yYjIKKwkuL2J6aXAyIC1kICA8IHNhbXBsZTEuYnoyID4gc2FtcGxlMS50c3QKKwkuL2J6aXAyIC1kICA8IHNhbXBsZTIuYnoyID4gc2FtcGxlMi50c3QKKwkuL2J6aXAyIC1kcyA8IHNhbXBsZTMuYnoyID4gc2FtcGxlMy50c3QKKwlAaWYgY21wIHNhbXBsZTEuYnoyIHNhbXBsZTEucmIyOyB0aGVuIGVjaG8gIlBBU1M6IHNhbXBsZTEgY29tcHJlc3MiO1wKKwllbHNlIGVjaG8gIkZBSUw6IHNhbXBsZTEgY29tcHJlc3MiOyBmaQorCUBpZiBjbXAgc2FtcGxlMi5iejIgc2FtcGxlMi5yYjI7IHRoZW4gZWNobyAiUEFTUzogc2FtcGxlMiBjb21wcmVzcyI7XAorCWVsc2UgZWNobyAiRkFJTDogc2FtcGxlMiBjb21wcmVzcyI7IGZpCisJQGlmIGNtcCBzYW1wbGUzLmJ6MiBzYW1wbGUzLnJiMjsgdGhlbiBlY2hvICJQQVNTOiBzYW1wbGUzIGNvbXByZXNzIjtcCisJZWxzZSBlY2hvICJGQUlMOiBzYW1wbGUzIGNvbXByZXNzIjsgZmkKKwlAaWYgY21wIHNhbXBsZTEudHN0IHNhbXBsZTEucmVmOyB0aGVuIGVjaG8gIlBBU1M6IHNhbXBsZTEgZGVjb21wcmVzcyI7XAorCWVsc2UgZWNobyAiRkFJTDogc2FtcGxlMSBkZWNvbXByZXNzIjsgZmkKKwlAaWYgY21wIHNhbXBsZTIudHN0IHNhbXBsZTIucmVmOyB0aGVuIGVjaG8gIlBBU1M6IHNhbXBsZTIgZGVjb21wcmVzcyI7XAorCWVsc2UgZWNobyAiRkFJTDogc2FtcGxlMiBkZWNvbXByZXNzIjsgZmkKKwlAaWYgY21wIHNhbXBsZTMudHN0IHNhbXBsZTMucmVmOyB0aGVuIGVjaG8gIlBBU1M6IHNhbXBsZTMgZGVjb21wcmVzcyI7XAorCWVsc2UgZWNobyAiRkFJTDogc2FtcGxlMyBkZWNvbXByZXNzIjsgZmkKKworaW5zdGFsbC1wdGVzdDoKKwljcCAkKHNyY2RpcikvTWFrZWZpbGUJCSQoREVTVERJUikvCisJY3AgJChzcmNkaXIpL3NhbXBsZTEucmVmCSQoREVTVERJUikvCisJY3AgJChzcmNkaXIpL3NhbXBsZTIucmVmCSQoREVTVERJUikvCisJY3AgJChzcmNkaXIpL3NhbXBsZTMucmVmCSQoREVTVERJUikvCisJY3AgJChzcmNkaXIpL3NhbXBsZTEuYnoyCSQoREVTVERJUikvCisJY3AgJChzcmNkaXIpL3NhbXBsZTIuYnoyCSQoREVTVERJUikvCisJY3AgJChzcmNkaXIpL3NhbXBsZTMuYnoyCSQoREVTVERJUikvCisJbG4gLXMgJChiaW5kaXIpL2J6aXAyCQkkKERFU1RESVIpL2J6aXAyCisKK2luc3RhbGwtZXhlYy1ob29rOgorCWxuIC1zICQoYmluZGlyKS9iemlwMiQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpL2J1bnppcDIkKEVYRUVYVCkKKwlsbiAtcyAkKGJpbmRpcikvYnppcDIkKEVYRUVYVCkgJChERVNURElSKSQoYmluZGlyKS9iemNhdCQoRVhFRVhUKQorCWxuIC1zICQoYmluZGlyKS9iemdyZXAkKEVYRUVYVCkgJChERVNURElSKSQoYmluZGlyKS9iemVncmVwJChFWEVFWFQpCisJbG4gLXMgJChiaW5kaXIpL2J6Z3JlcCQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpL2J6ZmdyZXAkKEVYRUVYVCkKKwlsbiAtcyAkKGJpbmRpcikvYnptb3JlJChFWEVFWFQpICQoREVTVERJUikkKGJpbmRpcikvYnpsZXNzJChFWEVFWFQpCisJbG4gLXMgJChiaW5kaXIpL2J6ZGlmZiQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpL2J6Y21wJChFWEVFWFQpCisKK2luc3RhbGwtZGF0YS1ob29rOgorCWVjaG8gIi5zbyBtYW4xL2J6Z3JlcC4xIiA+ICQoREVTVERJUikkKG1hbmRpcikvbWFuMS9iemVncmVwLjEKKwllY2hvICIuc28gbWFuMS9iemdyZXAuMSIgPiAkKERFU1RESVIpJChtYW5kaXIpL21hbjEvYnpmZ3JlcC4xCisJZWNobyAiLnNvIG1hbjEvYnptb3JlLjEiID4gJChERVNURElSKSQobWFuZGlyKS9tYW4xL2J6bGVzcy4xCisJZWNobyAiLnNvIG1hbjEvYnpkaWZmLjEiID4gJChERVNURElSKSQobWFuZGlyKS9tYW4xL2J6Y21wLjEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L2NvbmZpZ3VyZS5hYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L2NvbmZpZ3VyZS5hYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2VlNTc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDItMS4wLjYvY29uZmlndXJlLmFjCkBAIC0wLDAgKzEsMTQgQEAKK0FDX1BSRVJFUShbMi41N10pCisKK0FDX0lOSVQoYnppcDIsIDIuMC41LCAsIGxpYlhyZW5kZXIpCitBTV9JTklUX0FVVE9NQUtFKGZvcmVpZ24pCitBTV9NQUlOVEFJTkVSX01PREUKKworI0FNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisKKyMgQ2hlY2sgZm9yIHByb2dzCitBQ19QUk9HX0NDCitBQ19QUk9HX0xJQlRPT0wKKworQUNfT1VUUFVUKFtNYWtlZmlsZV0pCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjIwZmNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDItMS4wLjYvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCittYWtlIC1rIHJ1bnRlc3QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyXzEuMC42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDJfMS4wLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMzZmU0YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyXzEuMC42LmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiVmVyeSBoaWdoLXF1YWxpdHkgZGF0YSBjb21wcmVzc2lvbiBwcm9ncmFtIgorREVTQ1JJUFRJT04gPSAiYnppcDIgY29tcHJlc3NlcyBmaWxlcyB1c2luZyB0aGUgQnVycm93cy1XaGVlbGVyIGJsb2NrLXNvcnRpbmcgdGV4dCBjb21wcmVzc2lvbiBhbGdvcml0aG0sIGFuZCBcCitIdWZmbWFuIGNvZGluZy4gQ29tcHJlc3Npb24gaXMgZ2VuZXJhbGx5IGNvbnNpZGVyYWJseSBiZXR0ZXIgdGhhbiB0aGF0IGFjaGlldmVkIGJ5IG1vcmUgY29udmVudGlvbmFsIFwKK0xaNzcvTFo3OC1iYXNlZCBjb21wcmVzc29ycywgYW5kIGFwcHJvYWNoZXMgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBQUE0gZmFtaWx5IG9mIHN0YXRpc3RpY2FsIGNvbXByZXNzb3JzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYnppcC5vcmcvIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJiemlwMiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7YmVnaW5saW5lPTg7ZW5kbGluZT0zNzttZDU9NDBkOWQxZWIwNTczNmQxYmZjODZjZmRkOTEwNmU2YjIiCitQUiA9ICJyNSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmJ6aXAub3JnLyR7UFZ9LyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUuYWM7c3ViZGlyPSR7QlB9IFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLmFtO3N1YmRpcj0ke0JQfSBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMGI1MTZmNDcwNGQ0YTdjYjUwYTFkOTdlNmU4ZTE1YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMjg0OGYzNGZjZDVkNmNmNDdkZWYwMDQ2MWZjYjUyOGEwNDg0ZDhlZGVmODIwOGQ2ZDJlMjkwOWRjNjFkOWNkIgorCitQQUNLQUdFUyA9KyAibGliYnoyIgorCitDRkxBR1NfYXBwZW5kID0gIiAtZlBJQyAtZnBpYyAtV2lubGluZSAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzIHB0ZXN0CisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImJ1bnppcDIgYnpjYXQiCisKKyNpbnN0YWxsIGJpbmFyaWVzIHRvIGJ6aXAyLW5hdGl2ZSB1bmRlciBzeXNyb290IGZvciByZXBsYWNlbWVudC1uYXRpdmUKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLWJpbmRpcj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQTn0iCisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworCWNwIC1mICR7Qn0vTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0vTWFrZWZpbGUKKwlzZWQgLWkgLWUgInN8Xk1ha2VmaWxlOnxfTWFrZWZpbGU6fCIgJHtEfSR7UFRFU1RfUEFUSH0vTWFrZWZpbGUKK30KKworRklMRVNfbGliYnoyID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlN9IgorCitQUk9WSURFU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBiemlwMi1yZXBsYWNlbWVudC1uYXRpdmUiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWctYWx0ZXJuYXRpdmVzLW5hdGl2ZV8xLjMuNTkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jaGtjb25maWcvY2hrY29uZmlnLWFsdGVybmF0aXZlcy1uYXRpdmVfMS4zLjU5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZDM0YWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jaGtjb25maWcvY2hrY29uZmlnLWFsdGVybmF0aXZlcy1uYXRpdmVfMS4zLjU5LmJiCkBAIC0wLDAgKzEsNDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1leHRlbmRlZC9jaGtjb25maWcvY2hrY29uZmlnXzEuMy41OC5iYgorCitTVU1NQVJZID0gIiR7U1VNTUFSWV9jaGtjb25maWctYWx0ZXJuYXRpdmVzfSIKK0RFU0NSSVBUSU9OID0gIiR7REVTQ1JJUFRJT05fY2hrY29uZmlnLWFsdGVybmF0aXZlc30iCitERVBFTkRTID0gIiIKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMtbmF0aXZlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKKyMgVGhlIHN5c3Jvb3QgYnJhbmNoIGlzIDEuMy41OSArIHNvbWUgZ2l0IGNvbW1pdHMgZnJvbSBtYXN0ZXIgKyAtLXN5c3Jvb3QKKyMgc3VwcG9ydCBmb3IgYWx0ZXJuYXRpdmVzLgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2tlcmdvdGgvY2hrY29uZmlnO2JyYW5jaD1zeXNyb290IgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDUkVWID0gImNkNDM3ZWNiZDg5ODZjODk0NDQyZjhmY2UxZTAwNjFlMjBmMDRkZWUiCitQViA9ICIxLjMuNTkrJHtTUkNQVn0iCisKK2luaGVyaXQgbmF0aXZlCisKKyMgV2Ugd2FudCBvdXIgbmF0aXZlIHJlY2lwZXMgdG8gYnVpbGQgdXNpbmcgdGhlIHRhcmdldCBwYXRocyByYXRoZXIgdGhhbiBwYXRocworIyBpbnRvIHRoZSBzeXNyb290LCBhcyB3ZSBtYXkgdXNlIHRoZW0gdG8gY29uc3RydWN0IHRoZSByb290ZnMuIEFzIHN1Y2gsIHdlCisjIG9ubHkgYWRqdXN0IHRoZSBwYXRocyB0byBtYXRjaCB0aGUgbWV0YWRhdGEgZm9yIHRoZSB0YXJnZXQsIG5vdCBuYXRpdmUuCitvYmV5X3ZhcmlhYmxlcyAoKSB7CisJc2VkIC1pICdzLEFMVEVSTkFUSVZFU19ST09ULE9QS0dfT0ZGTElORV9ST09ULCcgYWx0ZXJuYXRpdmVzLmMKK30KKworZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSBhbHRlcm5hdGl2ZXMKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hbHRlcm5hdGl2ZXMgXAorCSAgICAgICAgICAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2FsdGVybmF0aXZlcworCisJaW5zdGFsbCAtRCAtbSAwNzU1IGFsdGVybmF0aXZlcyAke0R9JHtiaW5kaXJ9L2FsdGVybmF0aXZlcworCWluc3RhbGwgLUQgLW0gMDY0NCBhbHRlcm5hdGl2ZXMuOCAke0R9JHttYW5kaXJ9L21hbjgvYWx0ZXJuYXRpdmVzLjgKKworCWxuIC1zIGFsdGVybmF0aXZlcyAke0R9JHtiaW5kaXJ9L3VwZGF0ZS1hbHRlcm5hdGl2ZXMKKwlsbiAtcyBhbHRlcm5hdGl2ZXMuOCAke0R9JHttYW5kaXJ9L21hbjgvdXBkYXRlLWFsdGVybmF0aXZlcy44Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2xpbnV4c3RkYmFzZSgpIHsKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9sc2IKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWdfMS4zLjU4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY2hrY29uZmlnL2Noa2NvbmZpZ18xLjMuNTguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg4ODQ3YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWdfMS4zLjU4LmJiCkBAIC0wLDAgKzEsNjUgQEAKK1NVTU1BUlkgPSAiQSBzeXN0ZW0gdG9vbCBmb3IgbWFpbnRhaW5pbmcgdGhlIC9ldGMvcmMqLmQgaGllcmFyY2h5IgorREVTQ1JJUFRJT04gPSAiQ2hrY29uZmlnIGlzIGEgYmFzaWMgc3lzdGVtIHV0aWxpdHkuICBJdCB1cGRhdGVzIGFuZCBxdWVyaWVzIHJ1bmxldmVsIFwKK2luZm9ybWF0aW9uIGZvciBzeXN0ZW0gc2VydmljZXMuICBDaGtjb25maWcgbWFuaXB1bGF0ZXMgdGhlIG51bWVyb3VzIFwKK3N5bWJvbGljIGxpbmtzIGluIC9ldGMvcmMuZCwgdG8gcmVsaWV2ZSBzeXN0ZW0gYWRtaW5pc3RyYXRvcnMgb2Ygc29tZSBcCitvZiB0aGUgZHJ1ZGdlcnkgb2YgbWFudWFsbHkgZWRpdGluZyB0aGUgc3ltYm9saWMgbGlua3MuIgorCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICJWZXJzaW9uIDEuNSByZXF1aXJlcyBzZWxpbnV4IgorCitIT01FUEFHRSA9ICJodHRwOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9jL2gvY2hrY29uZmlnIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTU3NGM2OTY1YWU1ZjU4M2U1NTg4MGUzOTdmYmIwMTgiCisKK0RFUEVORFMgPSAibGlibmV3dCBwb3B0IgorUFJPVklERVMgKz0gInZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcyIKKworUFIgPSAicjciCisKK1NSQ19VUkkgPSAiaHR0cDovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvYy9oL2Noa2NvbmZpZy8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gImMyMDM5Y2E2N2YyNzQ5ZmUwYzA2ZWY3YzZmOGVlMjQ2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE4YjQ5N2QyNWIyY2FkYTk1NWM3MjgxMGU0NWZjYWQ4MjgwZDEwNWYxN2NmNDVlMjk3MGYxODI3MTIxMWRlNjgiCisKK2luaGVyaXQgZ2V0dGV4dAorCisjIE1ha2VmaWxlIHVzZXMgUlBNX09QVF9GTEFHUyB0byBjb25zdHJ1Y3QgQ0ZMQUdTCisjCitFWFRSQV9PRU1BS0UgPSAiXAorICAgICdSUE1fT1BUX0ZMQUdTPSR7Q0ZMQUdTfScgXAorICAgICdMREZMQUdTPSR7TERGTEFHU30nIFwKKyAgICAnQklORElSPSR7YmFzZV9zYmluZGlyfScgXAorICAgICdTQklORElSPSR7c2JpbmRpcn0nIFwKKyAgICAnTUFORElSPSR7bWFuZGlyfScgXAorICAgICdBTFRESVI9JHtsb2NhbHN0YXRlZGlyfS9saWIvYWx0ZXJuYXRpdmVzJyBcCisgICAgJ0FMVERBVEFESVI9JHtzeXNjb25mZGlyfS9hbHRlcm5hdGl2ZXMnIFwKKyIKKworZG9fdW5wYWNrW3Bvc3RmdW5jc10gKz0gIm9iZXlfdmFyaWFibGVzIgorZG9fdW5wYWNrW3ZhcmRlcHNdICs9ICJvYmV5X3ZhcmlhYmxlcyIKK29iZXlfdmFyaWFibGVzICgpIHsKKwlzZWQgLWkgLWUgJ3MsL2V0Yywke3N5c2NvbmZkaXJ9LDsgcywvbGliL3N5c3RlbWQsJHtiYXNlX2xpYmRpcn0vc3lzdGVtZCwnICR7U30vbGV2ZWxkYi5oCisJc2VkIC1pIC1lICdzLC9ldGMvYWx0ZXJuYXRpdmVzLCR7c3lzY29uZmRpcn0vYWx0ZXJuYXRpdmVzLCcgXAorCSAgICAgICAtZSAncywvdmFyL2xpYi9hbHRlcm5hdGl2ZXMsJHtsb2NhbHN0YXRlZGlyfS9saWIvYWx0ZXJuYXRpdmVzLCcgXAorCSAgICAgICAtZSAncywvdXNyL3NoYXJlL2xvY2FsZSwke2RhdGFkaXJ9L2xvY2FsZSwnICR7U30vYWx0ZXJuYXRpdmVzLmMKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nICdJTlNUQUxMTkxTRElSPSR7RH0ke2RhdGFkaXJ9L2xvY2FsZScgXAorCQknQklORElSPSR7c2JpbmRpcn0nIGluc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2Noa2NvbmZpZy5kCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1hbHRlcm5hdGl2ZXMgJHtQTn0tYWx0ZXJuYXRpdmVzLWRvYyIKK1NVTU1BUllfJHtQTn0tYWx0ZXJuYXRpdmVzID0gIk1haW50YWluIHN5bWJvbGljIGxpbmtzIGRldGVybWluaW5nIGRlZmF1bHQgY29tbWFuZHMiCitERVNDUklQVElPTl8ke1BOfS1hbHRlcm5hdGl2ZXMgPSAiYWx0ZXJuYXRpdmVzIGNyZWF0ZXMsIHJlbW92ZXMsIG1haW50YWlucyBhbmQgZGlzcGxheXMgXAoraW5mb3JtYXRpb24gYWJvdXQgdGhlIHN5bWJvbGljIGxpbmtzIGNvbXByaXNpbmcgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0uIgorU1VNTUFSWV8ke1BOfS1hbHRlcm5hdGl2ZXMtZG9jID0gIiR7U1VNTUFSWV8ke1BOfS1hbHRlcm5hdGl2ZXN9IC0gRG9jdW1lbnRhdGlvbiBmaWxlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWFsdGVybmF0aXZlcy1kb2MgPSAiJHtERVNDUklQVElPTl8ke1BOfS1hbHRlcm5hdGl2ZXN9ICBcCitUaGlzIHBhY2thZ2UgY29udGFpbnMgZG9jdW1lbnRhdGlvbi4iCitSUFJPVklERVNfJHtQTn0tYWx0ZXJuYXRpdmVzICs9ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzIgorUkNPTkZMSUNUU18ke1BOfS1hbHRlcm5hdGl2ZXMgPSAidXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnIHVwZGF0ZS1hbHRlcm5hdGl2ZXMtZHBrZyIKK0ZJTEVTXyR7UE59LWFsdGVybmF0aXZlcyA9ICIke3NiaW5kaXJ9L2FsdGVybmF0aXZlcyAke3NiaW5kaXJ9L3VwZGF0ZS1hbHRlcm5hdGl2ZXMgXAorCQkJICAgICR7c3lzY29uZmRpcn0vYWx0ZXJuYXRpdmVzICR7bG9jYWxzdGF0ZWRpcn0vbGliL2FsdGVybmF0aXZlcyIKK0ZJTEVTXyR7UE59LWFsdGVybmF0aXZlcy1kb2MgPSAiJHttYW5kaXJ9L21hbjgvYWx0ZXJuYXRpdmVzLjggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuOC91cGRhdGUtYWx0ZXJuYXRpdmVzLjgiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWUyMTM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBjcGlvLTIuMTEvZ251L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY3Bpby0yLjExLm9yaWcvZ251L01ha2VmaWxlLmFtCisrKysgY3Bpby0yLjExL2dudS9NYWtlZmlsZS5hbQorQEAgLTczNCw3ICs3MzQsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvY3Bpby1DVkUtMjAxNS0xMTk3LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvY3Bpby1DVkUtMjAxNS0xMTk3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NGFmYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9jcGlvLUNWRS0yMDE1LTExOTcucGF0Y2gKQEAgLTAsMCArMSwxNTQgQEAKK0Rlc2NyaXB0aW9uOiBDVkUtMjAxNS0xMTk3CisgQXBwbHkgcGF0Y2ggYnkgVml0ZXpzbGF2IENpemVrIG9mIFN1U0UgdG8gZml4IENWRS0yMDE1LTExOTcuCisgVXBzdHJlYW0gaXMgZG9ybWFudCBvciBubyBsb25nZXIgZXhpc3RpbmcuIFRvIHJlc3RvcmUgdGhlIG9sZAorIGJlaGF2aW91ciB1c2UgLS1leHRyYWN0LW92ZXItc3ltbGlua3MgKENsb3NlczogIzc3NDY2OSkKKyBUaGlzIGlzc3VlIGhhcyBiZWVuIGRpc2NvdmVyZWQgYnkgQWxleGFuZGVyIENoZXJlcGFub3YuCitBdXRob3I6IFZpdGV6c2xhdiBDaXplayA8dmNpemVrQHN1c2UuY3o+CitCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy83NzQ2NjkKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworLS0tIGNwaW8tMi4xMStkZnNnLm9yaWcvZG9jL2NwaW8uMQorKysrIGNwaW8tMi4xMStkZnNnL2RvYy9jcGlvLjEKK0BAIC0yMiw2ICsyMiw3IEBAIGNwaW8gXC0gY29weSBmaWxlcyB0byBhbmQgZnJvbSBhcmNoaXZlcworIFtcLVwtb3duZXI9W3VzZXJdWzouXVtncm91cF1dIFtcLVwtbm8tcHJlc2VydmUtb3duZXJdIFtcLVwtbWVzc2FnZT1tZXNzYWdlXQorIFtcLVwtZm9yY2VcLWxvY2FsXSBbXC1cLW5vXC1hYnNvbHV0ZVwtZmlsZW5hbWVzXSBbXC1cLXNwYXJzZV0KKyBbXC1cLW9ubHlcLXZlcmlmeVwtY3JjXSBbXC1cLXRvXC1zdGRvdXRdIFtcLVwtcXVpZXRdIFtcLVwtcnNoLWNvbW1hbmQ9Y29tbWFuZF0KKytbXC1cLWV4dHJhY3RcLW92ZXJcLXN5bWxpbmtzXQorIFtcLVwtaGVscF0gW1wtXC12ZXJzaW9uXSBbcGF0dGVybi4uLl0gWzwgYXJjaGl2ZV0KKyAKKyAuQiBjcGlvCistLS0gY3Bpby0yLjExK2Rmc2cub3JpZy9zcmMvY29weWluLmMKKysrKyBjcGlvLTIuMTErZGZzZy9zcmMvY29weWluLmMKK0BAIC03MDAsNiArNzAwLDUxIEBAIGNvcHlpbl9saW5rIChzdHJ1Y3QgY3Bpb19maWxlX3N0YXQgKmZpbGUKKyAgIGZyZWUgKGxpbmtfbmFtZSk7CisgfQorIAwKKysKKytzdGF0aWMgaW50CisrcGF0aF9jb250YWluc19zeW1saW5rKGNoYXIgKnBhdGgpCisreworKyAgc3RydWN0IHN0YXQgc3Q7CisrICBjaGFyICpzbGFzaDsKKysgIGNoYXIgKm5leHRzbGFzaDsKKysKKysgIC8qIHdlIGdvdCBOVUxMIHBvaW50ZXIgb3IgZW1wdHkgc3RyaW5nICovCisrICBpZiAoIXBhdGggfHwgISpwYXRoKSB7CisrICAgIHJldHVybiBmYWxzZTsKKysgIH0KKysKKysgIHNsYXNoID0gcGF0aDsKKysKKysgIHdoaWxlICgobmV4dHNsYXNoID0gc3RyY2hyKHNsYXNoICsgMSwgJy8nKSkgIT0gTlVMTCkgeworKyAgICBzbGFzaCA9IG5leHRzbGFzaDsKKysgICAgKnNsYXNoID0gJ1wwJzsKKysKKysgICAgaWYgKGxzdGF0KHBhdGgsICZzdCkgIT0gMCkgeworKyAgICAgIGlmIChlcnJubyA9PSBFTE9PUCkgeworKyAgICAgICAgLyogRUxPT1AgLSB0b28gbWFueSBzeW1saW5rcyAqLworKyAgICAgICAgKnNsYXNoID0gJy8nOworKyAgICAgICAgcmV0dXJuIHRydWU7CisrICAgICAgfSBlbHNlIGlmIChlcnJubyA9PSBFTk9NRU0pIHsKKysgICAgICAgIC8qIE5vIG1lbW9yeSBmb3IgbHN0YXQgLSB0ZXJtaW5hdGUgKi8KKysgICAgICAgIHhhbGxvY19kaWUoKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgLyogY2Fubm90IGxzdGF0IHBhdGggLSBnaXZlIHVwICovCisrICAgICAgICAqc2xhc2ggPSAnLyc7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgfQorKyAgICB9CisrCisrICAgIGlmIChTX0lTTE5LKHN0LnN0X21vZGUpKSB7CisrICAgICAgKnNsYXNoID0gJy8nOworKyAgICAgIHJldHVybiB0cnVlOworKyAgICB9CisrCisrICAgICpzbGFzaCA9ICcvJzsKKysgIH0KKysKKysgIHJldHVybiBmYWxzZTsKKyt9CisrCisgc3RhdGljIHZvaWQKKyBjb3B5aW5fZmlsZSAoc3RydWN0IGNwaW9fZmlsZV9zdGF0ICpmaWxlX2hkciwgaW50IGluX2ZpbGVfZGVzKQorIHsKK0BAIC0xNDcxLDYgKzE1MTYsMjMgQEAgcHJvY2Vzc19jb3B5X2luICgpCisgCXsKKyAJICAvKiBDb3B5IHRoZSBpbnB1dCBmaWxlIGludG8gdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuICAqLworIAorKyAgICAgICAgICAvKiBDYW4gd2Ugd3JpdGUgZmlsZXMgb3ZlciBzeW1saW5rcz8gKi8KKysgICAgICAgICAgaWYgKCFleHRyYWN0X292ZXJfc3ltbGlua3MpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgaWYgKHBhdGhfY29udGFpbnNfc3ltbGluayhmaWxlX2hkci5jX25hbWUpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgLyogc2tpcCB0aGUgZmlsZSAqLworKyAgICAgICAgICAgICAgICAgIC8qCisrICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCB3cml0ZSBvdmVyIHN5bWxpbmtzLiBTa2lwcGluZyAlc1xuIiwgZmlsZV9oZHIuY19uYW1lKTsKKysgICAgICAgICAgICAgICAgICB0YXBlX3Rvc3NfaW5wdXQgKGluX2ZpbGVfZGVzLCBmaWxlX2hkci5jX2ZpbGVzaXplKTsKKysgICAgICAgICAgICAgICAgICB0YXBlX3NraXBfcGFkZGluZyAoaW5fZmlsZV9kZXMsIGZpbGVfaGRyLmNfZmlsZXNpemUpOworKyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICAgICovCisrICAgICAgICAgICAgICAgICAgLyogdGVybWluYXRlICovCisrCSAgICAgICAgICBlcnJvciAoMSwgMCwgXygiQ2FuJ3Qgd3JpdGUgb3ZlciBzeW1saW5rczogJXNcbiIpLCBmaWxlX2hkci5jX25hbWUpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKworIAkgIC8qIERvIHdlIG5lZWQgdG8gcmVuYW1lIHRoZSBmaWxlPyAqLworIAkgIGlmIChyZW5hbWVfZmxhZyB8fCByZW5hbWVfYmF0Y2hfZmlsZSkKKyAJICAgIHsKKy0tLSBjcGlvLTIuMTErZGZzZy5vcmlnL3NyYy9leHRlcm4uaAorKysrIGNwaW8tMi4xMStkZnNnL3NyYy9leHRlcm4uaAorQEAgLTk1LDYgKzk1LDcgQEAgZXh0ZXJuIGNoYXIgaW5wdXRfaXNfc3BlY2lhbDsKKyBleHRlcm4gY2hhciBvdXRwdXRfaXNfc3BlY2lhbDsKKyBleHRlcm4gY2hhciBpbnB1dF9pc19zZWVrYWJsZTsKKyBleHRlcm4gY2hhciBvdXRwdXRfaXNfc2Vla2FibGU7CisrZXh0ZXJuIGJvb2wgZXh0cmFjdF9vdmVyX3N5bWxpbmtzOworIGV4dGVybiBpbnQgKCp4c3RhdCkgKCk7CisgZXh0ZXJuIHZvaWQgKCpjb3B5X2Z1bmN0aW9uKSAoKTsKKyAMCistLS0gY3Bpby0yLjExK2Rmc2cub3JpZy9zcmMvZ2xvYmFsLmMKKysrKyBjcGlvLTIuMTErZGZzZy9zcmMvZ2xvYmFsLmMKK0BAIC0xODcsNiArMTg3LDkgQEAgYm9vbCB0b19zdGRvdXRfb3B0aW9uID0gZmFsc2U7CisgLyogVGhlIG5hbWUgdGhpcyBwcm9ncmFtIHdhcyBydW4gd2l0aC4gICovCisgY2hhciAqcHJvZ3JhbV9uYW1lOworIAorKy8qIEV4dHJhY3QgZmlsZXMgb3ZlciBzeW1ib2xpYyBsaW5rcyAqLworK2Jvb2wgZXh0cmFjdF9vdmVyX3N5bWxpbmtzOworKworIC8qIEEgcG9pbnRlciB0byBlaXRoZXIgbHN0YXQgb3Igc3RhdCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIKKyAgICBkZXJlZmVyZW5jaW5nIG9mIHN5bWxpbmtzIGlzIGRvbmUgZm9yIGlucHV0IGZpbGVzLiAgKi8KKyBpbnQgKCp4c3RhdCkgKCk7CistLS0gY3Bpby0yLjExK2Rmc2cub3JpZy9zcmMvbWFpbi5jCisrKysgY3Bpby0yLjExK2Rmc2cvc3JjL21haW4uYworQEAgLTU3LDcgKzU3LDggQEAgZW51bSBjcGlvX29wdGlvbnMgeworICAgRk9SQ0VfTE9DQUxfT1BUSU9OLCAgICAgICAgICAgIAorICAgREVCVUdfT1BUSU9OLCAgICAgICAgICAgICAgICAgIAorICAgQkxPQ0tfU0laRV9PUFRJT04sICAgICAgICAgICAgIAorLSAgVE9fU1RET1VUX09QVElPTgorKyAgVE9fU1RET1VUX09QVElPTiwKKysgIEVYVFJBQ1RfT1ZFUl9TWU1MSU5LUworIH07CisgCisgY29uc3QgY2hhciAqcHJvZ3JhbV9hdXRob3JzW10gPQorQEAgLTIyMiw2ICsyMjMsOCBAQCBzdGF0aWMgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdGlvbnNbXSA9IHsKKyAgICBOXygiQ3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgd2hlcmUgbmVlZGVkIiksIEdSSUQrMSB9LAorICAgeyJuby1wcmVzZXJ2ZS1vd25lciIsIE5PX1BSRVNFUlZFX09XTkVSX09QVElPTiwgMCwgMCwKKyAgICBOXygiRG8gbm90IGNoYW5nZSB0aGUgb3duZXJzaGlwIG9mIHRoZSBmaWxlcyIpLCBHUklEKzEgfSwKKysgIHsiZXh0cmFjdC1vdmVyLXN5bWxpbmtzIiwgRVhUUkFDVF9PVkVSX1NZTUxJTktTLCAwLCAwLAorKyAgIE5fKCJGb3JjZSB3cml0aW5nIG92ZXIgc3ltYm9saWMgbGlua3MiKSwgR1JJRCsxIH0sCisgICB7InVuY29uZGl0aW9uYWwiLCAndScsIE5VTEwsIDAsCisgICAgTl8oIlJlcGxhY2UgYWxsIGZpbGVzIHVuY29uZGl0aW9uYWxseSIpLCBHUklEKzEgfSwKKyAgIHsic3BhcnNlIiwgU1BBUlNFX09QVElPTiwgTlVMTCwgMCwKK0BAIC00MTIsNiArNDE1LDEwIEBAIGNyYyBuZXdjIG9kYyBiaW4gdXN0YXIgdGFyIChhbGwtY2FwcyBhbHMKKyAgICAgICBub19jaG93bl9mbGFnID0gdHJ1ZTsKKyAgICAgICBicmVhazsKKyAKKysgICAgY2FzZSBFWFRSQUNUX09WRVJfU1lNTElOS1M6CQkgICAgICAgIC8qIC0tZXh0cmFjdC1vdmVyLXN5bWxpbmtzICovCisrICAgICAgZXh0cmFjdF9vdmVyX3N5bWxpbmtzID0gdHJ1ZTsKKysgICAgICBicmVhazsKKysKKyAgICAgY2FzZSAnbyc6CQkvKiBDb3B5LW91dCBtb2RlLiAgKi8KKyAgICAgICBpZiAoY29weV9mdW5jdGlvbiAhPSAwKQorIAllcnJvciAoUEFYRVhJVF9GQUlMVVJFLCAwLCBfKCJNb2RlIGFscmVhZHkgZGVmaW5lZCIpKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL2ZpeC1tZW1vcnktb3ZlcnJ1bi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL2ZpeC1tZW1vcnktb3ZlcnJ1bi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWNkM2NmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvZml4LW1lbW9yeS1vdmVycnVuLnBhdGNoCkBAIC0wLDAgKzEsMjIwIEBACitjcGlvOiBGaXggbWVtb3J5IG92ZXJydW4gb24gcmVhZGluZyBpbXByb3Blcmx5IGNyZWF0ZWQgbGluayByZWNvcmRzCisKK1NpZ25lZC1vZmYtYnk6IEJpYW4gTmFpbWVuZyA8Ymlhbm5tQGNuLmZ1aml0c3UuY29tPgorCitodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9jcGlvLmdpdC9jb21taXQvP2lkPTc0NmYzZmY2NzBkY2ZjZGQyOGZjYzk5MGU3OWNkNmZjY2M3YWU0OGQKKworICAqIHNyYy9jb3B5aW4uYyAoZ2V0X2xpbmtfbmFtZSk6IE5ldyBmdW5jdGlvbi4KKyAgKGxpc3RfZmlsZSwgY29weWluX2xpbmspOiB1c2UgZ2V0X2xpbmtfbmFtZQorCisgICogdGVzdHMvc3ltbGluay1iYWQtbGVuZ3RoLmF0OiBOZXcgZmlsZS4KKyAgKiB0ZXN0cy9zeW1saW5rLWxvbmcuYXQ6IE5ldyBmaWxlLgorICAqIHRlc3RzL01ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzLgorICAqIHRlc3RzL3Rlc3RzdWl0ZS5hdDogTGlrZXdpc2UuCisKKyAgU2VlIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY3Bpby8yMDE0LTExL21zZzAwMDA3Lmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBTZXJnZXkgUG96bnlha29mZiA8Z3JheUBnbnUub3JnLnVhPgorCitkaWZmIC1OdXJwIGNwaW8tMi4xMS5vcmlnL3NyYy9jb3B5aW4uYyBjcGlvLTIuMTEvc3JjL2NvcHlpbi5jCistLS0gY3Bpby0yLjExLm9yaWcvc3JjL2NvcHlpbi5jCTIwMTAtMDItMTUgMTg6MDI6MjMuMDAwMDAwMDAwICswODAwCisrKysgY3Bpby0yLjExL3NyYy9jb3B5aW4uYwkyMDE0LTEyLTA4IDEzOjE0OjA0LjM1NTU0NzUwOCArMDgwMAorQEAgLTEyNiw2ICsxMjYsMjggQEAgdGFwZV9za2lwX3BhZGRpbmcgKGludCBpbl9maWxlX2Rlcywgb2ZmXworIH0KKyAKKyAMCisrc3RhdGljIGNoYXIgKgorK2dldF9saW5rX25hbWUgKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCAqZmlsZV9oZHIsIGludCBpbl9maWxlX2RlcykKKyt7CisrICBvZmZfdCBuID0gZmlsZV9oZHItPmNfZmlsZXNpemUgKyAxOworKyAgY2hhciAqbGlua19uYW1lOworKworKyAgaWYgKG4gPT0gMCB8fCBuID4gU0laRV9NQVgpCisrICAgIHsKKysgICAgICBlcnJvciAoMCwgMCwgXygiJXM6IHN0b3JlZCBmaWxlbmFtZSBsZW5ndGggdG9vIGJpZyIpLCBmaWxlX2hkci0+Y19uYW1lKTsKKysgICAgICBsaW5rX25hbWUgPSBOVUxMOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBsaW5rX25hbWUgPSB4bWFsbG9jIChuKTsKKysgICAgICB0YXBlX2J1ZmZlcmVkX3JlYWQgKGxpbmtfbmFtZSwgaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKysgICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKysgICAgICB0YXBlX3NraXBfcGFkZGluZyAoaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKysgICAgfQorKyAgcmV0dXJuIGxpbmtfbmFtZTsKKyt9CisrCisrDAorIHN0YXRpYyB2b2lkCisgbGlzdF9maWxlKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCogZmlsZV9oZHIsIGludCBpbl9maWxlX2RlcykKKyB7CitAQCAtMTM2LDIxICsxNTgsMTYgQEAgbGlzdF9maWxlKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCogZmlsZV9oZAorIAl7CisgCSAgaWYgKGFyY2hpdmVfZm9ybWF0ICE9IGFyZl90YXIgJiYgYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3VzdGFyKQorIAkgICAgeworLQkgICAgICBjaGFyICpsaW5rX25hbWUgPSBOVUxMOwkvKiBOYW1lIG9mIGhhcmQgYW5kIHN5bWJvbGljIGxpbmtzLiAgKi8KKy0KKy0JICAgICAgbGlua19uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoKHVuc2lnbmVkIGludCkgZmlsZV9oZHItPmNfZmlsZXNpemUgKyAxKTsKKy0JICAgICAgbGlua19uYW1lW2ZpbGVfaGRyLT5jX2ZpbGVzaXplXSA9ICdcMCc7CistCSAgICAgIHRhcGVfYnVmZmVyZWRfcmVhZCAobGlua19uYW1lLCBpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworLQkgICAgICBsb25nX2Zvcm1hdCAoZmlsZV9oZHIsIGxpbmtfbmFtZSk7CistCSAgICAgIGZyZWUgKGxpbmtfbmFtZSk7CistCSAgICAgIHRhcGVfc2tpcF9wYWRkaW5nIChpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworLQkgICAgICByZXR1cm47CisrCSAgICAgIGNoYXIgKmxpbmtfbmFtZSA9IGdldF9saW5rX25hbWUgKGZpbGVfaGRyLCBpbl9maWxlX2Rlcyk7CisrCSAgICAgIGlmIChsaW5rX25hbWUpCisrCQl7CisrCQkgIGxvbmdfZm9ybWF0IChmaWxlX2hkciwgbGlua19uYW1lKTsKKysJCSAgZnJlZSAobGlua19uYW1lKTsKKysJCX0KKyAJICAgIH0KKyAJICBlbHNlCistCSAgICB7CisgCSAgICAgIGxvbmdfZm9ybWF0IChmaWxlX2hkciwgZmlsZV9oZHItPmNfdGFyX2xpbmtuYW1lKTsKKy0JICAgICAgcmV0dXJuOworLQkgICAgfQorKwkgIHJldHVybjsKKyAJfQorICAgICAgIGVsc2UKKyAjZW5kaWYKK0BAIC02NTAsMTAgKzY2Nyw3IEBAIGNvcHlpbl9saW5rKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCAqZmlsZV8KKyAKKyAgIGlmIChhcmNoaXZlX2Zvcm1hdCAhPSBhcmZfdGFyICYmIGFyY2hpdmVfZm9ybWF0ICE9IGFyZl91c3RhcikKKyAgICAgeworLSAgICAgIGxpbmtfbmFtZSA9IChjaGFyICopIHhtYWxsb2MgKCh1bnNpZ25lZCBpbnQpIGZpbGVfaGRyLT5jX2ZpbGVzaXplICsgMSk7CistICAgICAgbGlua19uYW1lW2ZpbGVfaGRyLT5jX2ZpbGVzaXplXSA9ICdcMCc7CistICAgICAgdGFwZV9idWZmZXJlZF9yZWFkIChsaW5rX25hbWUsIGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistICAgICAgdGFwZV9za2lwX3BhZGRpbmcgKGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CisrICAgICAgbGlua19uYW1lID0gZ2V0X2xpbmtfbmFtZSAoZmlsZV9oZHIsIGluX2ZpbGVfZGVzKTsKKyAgICAgfQorICAgZWxzZQorICAgICB7CitkaWZmIC1OdXJwIGNwaW8tMi4xMS5vcmlnL3Rlc3RzL01ha2VmaWxlLmFtIGNwaW8tMi4xMS90ZXN0cy9NYWtlZmlsZS5hbQorLS0tIGNwaW8tMi4xMS5vcmlnL3Rlc3RzL01ha2VmaWxlLmFtCTIwMTAtMDItMTUgMTg6MDI6MjMuMDAwMDAwMDAwICswODAwCisrKysgY3Bpby0yLjExL3Rlc3RzL01ha2VmaWxlLmFtCTIwMTQtMTItMDggMTM6MTQ6NDkuOTMxNTQ1NzI3ICswODAwCitAQCAtNTIsNiArNTIsOCBAQCBURVNUU1VJVEVfQVQgPSBcCisgIHNldHN0YXQwNC5hdFwKKyAgc2V0c3RhdDA1LmF0XAorICBzeW1saW5rLmF0XAorKyBzeW1saW5rLWJhZC1sZW5ndGguYXRcCisrIHN5bWxpbmstbG9uZy5hdFwKKyAgdmVyc2lvbi5hdAorIAorIFRFU1RTVUlURSA9ICQoc3JjZGlyKS90ZXN0c3VpdGUKK2RpZmYgLU51cnAgY3Bpby0yLjExLm9yaWcvdGVzdHMvc3ltbGluay1iYWQtbGVuZ3RoLmF0IGNwaW8tMi4xMS90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQKKy0tLSBjcGlvLTIuMTEub3JpZy90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuMTEvdGVzdHMvc3ltbGluay1iYWQtbGVuZ3RoLmF0CTIwMTQtMTItMDggMTM6MTc6NDUuOTc5NTM4ODQ3ICswODAwCitAQCAtMCwwICsxLDQ5IEBACisrIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tNHRlIHRvIGNyZWF0ZSB0ZXN0c3VpdGUuICAtKi0gQXV0b3Rlc3QgLSotCisrIyBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKysjIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorKyMgMDIxMTAtMTMwMSBVU0EuCisrCisrIyBDcGlvIHYyLjExIGRpZCBzZWdmYXVsdCB3aXRoIGJhZGx5IHNldCBzeW1saW5rIGxlbmd0aC4KKysjIFJlZmVyZW5jZXM6CisrIyBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNwaW8vMjAxNC0xMS9tc2cwMDAwNy5odG1sCisrCisrQVRfU0VUVVAoW3N5bWxpbmstYmFkLWxlbmd0aF0pCisrQVRfS0VZV09SRFMoW3N5bWxpbmstbG9uZyBjb3B5b3V0XSkKKysKKytBVF9EQVRBKFtBUkNISVZFLmJhc2U2NF0sCisrW3gzRWpBSUJBdElFdEp5OG5BUUFBQUhSVVlXMEZBQUFBRFFCR1NVeEZBQUJ6YjIxbElHTnZiblJsYm5RS0FNZHhJd0JnUS8raExTY3YKKytKd0VBQUFCMFZFaHVCUUQvLy8vL1RFbE9Td0FBUmtsTVJjZHhBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFDd0FBQUFBQVZGSkJTVXhGCisrVWlFaElRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQorK10pCisrCisrQVRfQ0hFQ0soWworK2Jhc2U2NCAtZCBBUkNISVZFLmJhc2U2NCA+IEFSQ0hJVkUgfHwgQVRfU0tJUF9URVNUCisrY3BpbyAtbnR2IDwgQVJDSElWRQorK3Rlc3QgJD8gLWVxIDIKKytdLAorK1swXSwKKytbLXJ3LXJ3LXItLSAgIDEgMTAwMjkgICAgMTAwMzEgICAgICAgICAgMTMgTm92IDI1IDEzOjUyIEZJTEUKKytdLFtjcGlvOiBMSU5LOiBzdG9yZWQgZmlsZW5hbWUgbGVuZ3RoIHRvbyBiaWcKKytjcGlvOiBwcmVtYXR1cmUgZW5kIG9mIGZpbGUKKytdKQorKworK0FUX0NMRUFOVVAKK2RpZmYgLU51cnAgY3Bpby0yLjExLm9yaWcvdGVzdHMvc3ltbGluay1sb25nLmF0IGNwaW8tMi4xMS90ZXN0cy9zeW1saW5rLWxvbmcuYXQKKy0tLSBjcGlvLTIuMTEub3JpZy90ZXN0cy9zeW1saW5rLWxvbmcuYXQJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuMTEvdGVzdHMvc3ltbGluay1sb25nLmF0CTIwMTQtMTItMDggMTM6MTc6NTcuMjE5NTM4NDA4ICswODAwCitAQCAtMCwwICsxLDQ2IEBACisrIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tNHRlIHRvIGNyZWF0ZSB0ZXN0c3VpdGUuICAtKi0gQXV0b3Rlc3QgLSotCisrIyBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKysjIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorKyMgMDIxMTAtMTMwMSBVU0EuCisrCisrIyBDcGlvIHYyLjExLjkwIGNoYW5nZWQgdGhlIHdheSBzeW1saW5rIG5hbWUgaXMgcmVhZCBmcm9tIGFyY2hpdmUuCisrIyBSZWZlcmVuY2VzOgorKyMgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1jcGlvLzIwMTQtMTEvbXNnMDAwMDcuaHRtbAorKworK0FUX1NFVFVQKFtzeW1saW5rLWxvbmddKQorK0FUX0tFWVdPUkRTKFtzeW1saW5rLWxvbmcgY29weW91dF0pCisrCisrQVRfQ0hFQ0soWworKworKyMgbGVuKGRpcm5hbWUpID4gUkVBREJVRlNJWkUKKytkaXJuYW1lPQorK2ZvciBpIGluIHsxLi41Mn07IGRvCisrICAgIGRpcm5hbWU9Inh4eHh4eHh4eC8kZGlybmFtZSIKKysgICAgbWtkaXIgIiRkaXJuYW1lIgorK2RvbmUKKytsbiAtcyAiJGRpcm5hbWUiIHggfHwgQVRfU0tJUF9URVNUCisrCisrZWNobyB4IHwgY3BpbyAtbyA+IGFyCisrbGlzdD1gY3BpbyAtdHYgPCBhciB8IHNlZCAnc3wuKi0+IHx8J2AKKyt0ZXN0ICIkbGlzdCIgPSAiJGRpcm5hbWUiICYmIGVjaG8gc3VjY2VzcyB8fCBlY2hvIGZhaWwKKytdLAorK1swXSwKKytbc3VjY2VzcworK10sWzIgYmxvY2tzCisrMiBibG9ja3MKKytdKQorKworK0FUX0NMRUFOVVAKK2RpZmYgLU51cnAgY3Bpby0yLjExLm9yaWcvdGVzdHMvdGVzdHN1aXRlLmF0IGNwaW8tMi4xMS90ZXN0cy90ZXN0c3VpdGUuYXQKKy0tLSBjcGlvLTIuMTEub3JpZy90ZXN0cy90ZXN0c3VpdGUuYXQJMjAxMC0wMi0xNSAxODowMjoyMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuMTEvdGVzdHMvdGVzdHN1aXRlLmF0CTIwMTQtMTItMDggMTM6MTU6MTMuNTE1NTQ0ODA1ICswODAwCitAQCAtMzEsNiArMzEsOCBAQCBtNF9pbmNsdWRlKFt2ZXJzaW9uLmF0XSkKKyAKKyBtNF9pbmNsdWRlKFtpbm91dC5hdF0pCisgbTRfaW5jbHVkZShbc3ltbGluay5hdF0pCisrbTRfaW5jbHVkZShbc3ltbGluay1iYWQtbGVuZ3RoLmF0XSkKKyttNF9pbmNsdWRlKFtzeW1saW5rLWxvbmcuYXRdKQorIG00X2luY2x1ZGUoW2ludGVyZGlyLmF0XSkKKyAKKyBtNF9pbmNsdWRlKFtzZXRzdGF0MDEuYXRdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvcmVtb3ZlLWdldHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9yZW1vdmUtZ2V0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGQxMTNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvcmVtb3ZlLWdldHMucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorSVNPIEMxMSByZW1vdmVzIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGdldHMoKSBmcm9tIHRoZSBDIGxhbmd1YWdlLCBlZ2xpYmMgMi4xNisgcmVtb3ZlZCBpdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK0luZGV4OiBjcGlvLTIuMTEvZ251L3N0ZGlvLmluLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjcGlvLTIuMTEub3JpZy9nbnUvc3RkaW8uaW4uaAkyMDEyLTA3LTA0IDEyOjEzOjQzLjEzMzA2NjI0NyAtMDcwMAorKysrIGNwaW8tMi4xMS9nbnUvc3RkaW8uaW4uaAkyMDEyLTA3LTA0IDEyOjE0OjEwLjE4OTA2NzU2NCAtMDcwMAorQEAgLTEzOCw4ICsxMzgsMTAgQEAKKyAvKiBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCB0aGUgZGV2ZWxvcGVyIGV2ZXIgaGFzIGZ1bGwgY29udHJvbCBvZiBzdGRpbiwKKyAgICBzbyBhbnkgdXNlIG9mIGdldHMgd2FycmFudHMgYW4gdW5jb25kaXRpb25hbCB3YXJuaW5nLiAgQXNzdW1lIGl0IGlzCisgICAgYWx3YXlzIGRlY2xhcmVkLCBzaW5jZSBpdCBpcyByZXF1aXJlZCBieSBDODkuICAqLworKyNpZiBkZWZpbmVkIGdldHMKKyAjdW5kZWYgZ2V0cworIF9HTF9XQVJOX09OX1VTRSAoZ2V0cywgImdldHMgaXMgYSBzZWN1cml0eSBob2xlIC0gdXNlIGZnZXRzIGluc3RlYWQiKTsKKysjZW5kaWYKKyAKKyAjaWYgQEdOVUxJQl9GT1BFTkAKKyAjIGlmIEBSRVBMQUNFX0ZPUEVOQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvc3RhdGRlZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL3N0YXRkZWYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZiOGU4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL3N0YXRkZWYucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorQXZvaWQgbXVsdGlwbGUgc3RhdCBkZWZpbml0aW9ucworUGF0Y2ggdGFrZW4gZnJvbSBjcGlvIG1haWxpbmcgbGlzdCBwb3N0aW5nIDIwMTAtMDMtMTkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC11ck4gY3Bpby0yLjExLm9yaWcvc3JjL2ZpbGV0eXBlcy5oIGNwaW8tMi4xMS9zcmMvZmlsZXR5cGVzLmgKKy0tLSBjcGlvLTIuMTEub3JpZy9zcmMvZmlsZXR5cGVzLmgJMjAxMC0wMi0xMiAwMjoxOToyMy4wMDAwMDAwMDAgLTA4MDAKKysrKyBjcGlvLTIuMTEvc3JjL2ZpbGV0eXBlcy5oCTIwMTAtMDctMjMgMTM6MTc6MjUuMDAwMDAwMDAwIC0wNzAwCitAQCAtODIsNCArODIsNiBAQAorICNkZWZpbmUgbHN0YXQgc3RhdAorICNlbmRpZgorIGludCBsc3RhdCAoKTsKKysjaWZuZGVmIHN0YXQKKyBpbnQgc3RhdCAoKTsKKysjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvYXZvaWRfaGVhcF9vdmVyZmxvdy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvYXZvaWRfaGVhcF9vdmVyZmxvdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWE3Y2Y1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9hdm9pZF9oZWFwX292ZXJmbG93LnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbYnVnZml4OiBodHRwOi8vd2ViLm52ZC5uaXN0Lmdvdi92aWV3L3Z1bG4vZGV0YWlsP3Z1bG5JZD1DVkUtMjAxMC0wNjI0XQorCitUaGlzIHBhdGNoIGF2b2lkcyBoZWFwIG92ZXJmbG93IHJlcG9ydGVkIGJ5IDoKK2h0dHA6Ly93ZWIubnZkLm5pc3QuZ292L3ZpZXcvdnVsbi9kZXRhaWw/dnVsbklkPUNWRS0yMDEwLTA2MjQKKworVGhpcyBpcyBhIGNsZWFuIHBhdGNoIGZvciB0aGUgR1BMdjIgdGFyIHJlY2lwZS4KKwordGhlIEdQTHYyIHRhciByZWNpcGUgcGF0Y2ggaXMgYWxzbyBhcHBsaWNhYmxlIHRvIHRoaXMgR1BMdjIgY3BpbyAKK3JlY2lwZSwgYXMgdGhleSBzaGFyZSBjb2RlLgorCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzA0LzI1CisKK0luZGV4OiB0YXItMS4xNy9saWIvcnRhcGVsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRhci0xLjE3Lm9yaWcvbGliL3J0YXBlbGliLmMKKysrKyB0YXItMS4xNy9saWIvcnRhcGVsaWIuYworQEAgLTU3MCw3ICs1NzAsNyBAQCBybXRfcmVhZF9fIChpbnQgaGFuZGxlLCBjaGFyICpidWZmZXIsIHNpCisgCisgICBzcHJpbnRmIChjb21tYW5kX2J1ZmZlciwgIlIlbHVcbiIsICh1bnNpZ25lZCBsb25nKSBsZW5ndGgpOworICAgaWYgKGRvX2NvbW1hbmQgKGhhbmRsZSwgY29tbWFuZF9idWZmZXIpID09IC0xCistICAgICAgfHwgKHN0YXR1cyA9IGdldF9zdGF0dXMgKGhhbmRsZSkpID09IFNBRkVfUkVBRF9FUlJPUikKKysgICAgICB8fCAoKHN0YXR1cyA9IGdldF9zdGF0dXMgKGhhbmRsZSkpID09IFNBRkVfUkVBRF9FUlJPUikgfHwgKHN0YXR1cyA+IGxlbmd0aCkpCisgICAgIHJldHVybiBTQUZFX1JFQURfRVJST1I7CisgCisgICBmb3IgKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgc3RhdHVzOyBjb3VudGVyICs9IHJsZW4sIGJ1ZmZlciArPSBybGVuKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L2ZpeC1tZW1vcnktb3ZlcnJ1bi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTQ4ZTcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2gKQEAgLTAsMCArMSwyMTcgQEAKK2NwaW86IEZpeCBtZW1vcnkgb3ZlcnJ1biBvbiByZWFkaW5nIGltcHJvcGVybHkgY3JlYXRlZCBsaW5rIHJlY29yZHMKKworU2lnbmVkLW9mZi1ieTogQmlhbiBOYWltZW5nIDxiaWFubm1AY24uZnVqaXRzdS5jb20+CisKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2NwaW8uZ2l0L2NvbW1pdC8/aWQ9NzQ2ZjNmZjY3MGRjZmNkZDI4ZmNjOTkwZTc5Y2Q2ZmNjYzdhZTQ4ZAorCisgICogc3JjL2NvcHlpbi5jIChnZXRfbGlua19uYW1lKTogTmV3IGZ1bmN0aW9uLgorICAobGlzdF9maWxlLCBjb3B5aW5fbGluayk6IHVzZSBnZXRfbGlua19uYW1lCisKKyAgKiB0ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQ6IE5ldyBmaWxlLgorICAqIHRlc3RzL3N5bWxpbmstbG9uZy5hdDogTmV3IGZpbGUuCisgICogdGVzdHMvTWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMuCisgICogdGVzdHMvdGVzdHN1aXRlLmF0OiBMaWtld2lzZS4KKworICBTZWUgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1jcGlvLzIwMTQtMTEvbXNnMDAwMDcuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFNlcmdleSBQb3pueWFrb2ZmIDxncmF5QGdudS5vcmcudWE+CisKK2RpZmYgLU51cnAgY3Bpby0yLjgub3JpZy9zcmMvY29weWluLmMgY3Bpby0yLjgvc3JjL2NvcHlpbi5jCistLS0gY3Bpby0yLjgub3JpZy9zcmMvY29weWluLmMJMjAwNy0wNi0wNyAxOTo1ODowMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuOC9zcmMvY29weWluLmMJMjAxNC0xMi0wOCAxMTozMDowMS4xNTk3OTE0ODQgKzA4MDAKK0BAIC0xMjYsNiArMTI2LDI4IEBAIHRhcGVfc2tpcF9wYWRkaW5nIChpbnQgaW5fZmlsZV9kZXMsIGludAorIH0KKyAKKyAMCisrc3RhdGljIGNoYXIgKgorK2dldF9saW5rX25hbWUgKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCAqZmlsZV9oZHIsIGludCBpbl9maWxlX2RlcykKKyt7CisrICBvZmZfdCBuID0gZmlsZV9oZHItPmNfZmlsZXNpemUgKyAxOworKyAgY2hhciAqbGlua19uYW1lOworKworKyAgaWYgKG4gPT0gMCB8fCBuID4gU0laRV9NQVgpCisrICAgIHsKKysgICAgICBlcnJvciAoMCwgMCwgXygiJXM6IHN0b3JlZCBmaWxlbmFtZSBsZW5ndGggdG9vIGJpZyIpLCBmaWxlX2hkci0+Y19uYW1lKTsKKysgICAgICBsaW5rX25hbWUgPSBOVUxMOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBsaW5rX25hbWUgPSB4bWFsbG9jIChuKTsKKysgICAgICB0YXBlX2J1ZmZlcmVkX3JlYWQgKGxpbmtfbmFtZSwgaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKysgICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKysgICAgICB0YXBlX3NraXBfcGFkZGluZyAoaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKysgICAgfQorKyAgcmV0dXJuIGxpbmtfbmFtZTsKKyt9CisrCisrDAorIHN0YXRpYyB2b2lkCisgbGlzdF9maWxlKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCogZmlsZV9oZHIsIGludCBpbl9maWxlX2RlcykKKyB7CitAQCAtMTM2LDIxICsxNTgsMTYgQEAgbGlzdF9maWxlKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCogZmlsZV9oZAorIAl7CisgCSAgaWYgKGFyY2hpdmVfZm9ybWF0ICE9IGFyZl90YXIgJiYgYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3VzdGFyKQorIAkgICAgeworLQkgICAgICBjaGFyICpsaW5rX25hbWUgPSBOVUxMOwkvKiBOYW1lIG9mIGhhcmQgYW5kIHN5bWJvbGljIGxpbmtzLiAgKi8KKy0KKy0JICAgICAgbGlua19uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoKHVuc2lnbmVkIGludCkgZmlsZV9oZHItPmNfZmlsZXNpemUgKyAxKTsKKy0JICAgICAgbGlua19uYW1lW2ZpbGVfaGRyLT5jX2ZpbGVzaXplXSA9ICdcMCc7CistCSAgICAgIHRhcGVfYnVmZmVyZWRfcmVhZCAobGlua19uYW1lLCBpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworLQkgICAgICBsb25nX2Zvcm1hdCAoZmlsZV9oZHIsIGxpbmtfbmFtZSk7CistCSAgICAgIGZyZWUgKGxpbmtfbmFtZSk7CistCSAgICAgIHRhcGVfc2tpcF9wYWRkaW5nIChpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworLQkgICAgICByZXR1cm47CisrCSAgICAgIGNoYXIgKmxpbmtfbmFtZSA9IGdldF9saW5rX25hbWUgKGZpbGVfaGRyLCBpbl9maWxlX2Rlcyk7CisrCSAgICAgIGlmIChsaW5rX25hbWUpCisrCQl7CisrCQkgIGxvbmdfZm9ybWF0IChmaWxlX2hkciwgbGlua19uYW1lKTsKKysJCSAgZnJlZSAobGlua19uYW1lKTsKKysJCX0KKyAJICAgIH0KKyAJICBlbHNlCistCSAgICB7CisgCSAgICAgIGxvbmdfZm9ybWF0IChmaWxlX2hkciwgZmlsZV9oZHItPmNfdGFyX2xpbmtuYW1lKTsKKy0JICAgICAgcmV0dXJuOworLQkgICAgfQorKwkgIHJldHVybjsKKyAJfQorICAgICAgIGVsc2UKKyAjZW5kaWYKK0BAIC03MzIsMTAgKzc0OSw3IEBAIGNvcHlpbl9saW5rKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCAqZmlsZV8KKyAKKyAgIGlmIChhcmNoaXZlX2Zvcm1hdCAhPSBhcmZfdGFyICYmIGFyY2hpdmVfZm9ybWF0ICE9IGFyZl91c3RhcikKKyAgICAgeworLSAgICAgIGxpbmtfbmFtZSA9IChjaGFyICopIHhtYWxsb2MgKCh1bnNpZ25lZCBpbnQpIGZpbGVfaGRyLT5jX2ZpbGVzaXplICsgMSk7CistICAgICAgbGlua19uYW1lW2ZpbGVfaGRyLT5jX2ZpbGVzaXplXSA9ICdcMCc7CistICAgICAgdGFwZV9idWZmZXJlZF9yZWFkIChsaW5rX25hbWUsIGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistICAgICAgdGFwZV9za2lwX3BhZGRpbmcgKGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CisrICAgICAgbGlua19uYW1lID0gZ2V0X2xpbmtfbmFtZSAoZmlsZV9oZHIsIGluX2ZpbGVfZGVzKTsKKyAgICAgfQorICAgZWxzZQorICAgICB7CitkaWZmIC1OdXJwIGNwaW8tMi44Lm9yaWcvdGVzdHMvTWFrZWZpbGUuYW0gY3Bpby0yLjgvdGVzdHMvTWFrZWZpbGUuYW0KKy0tLSBjcGlvLTIuOC5vcmlnL3Rlc3RzL01ha2VmaWxlLmFtCTIwMDYtMTAtMjQgMTg6MzI6MTMuMDAwMDAwMDAwICswODAwCisrKysgY3Bpby0yLjgvdGVzdHMvTWFrZWZpbGUuYW0JMjAxNC0xMi0wOCAxMTozMDo1Mi4zODc3ODk0ODIgKzA4MDAKK0BAIC00NSw2ICs0NSw4IEBAIFRFU1RTVUlURV9BVCA9IFwKKyAgdGVzdHN1aXRlLmF0XAorICBpbm91dC5hdFwKKyAgc3ltbGluay5hdFwKKysgc3ltbGluay1iYWQtbGVuZ3RoLmF0XAorKyBzeW1saW5rLWxvbmcuYXRcCisgIHZlcnNpb24uYXQKKyAKKyBURVNUU1VJVEUgPSAkKHNyY2RpcikvdGVzdHN1aXRlCitkaWZmIC1OdXJwIGNwaW8tMi44Lm9yaWcvdGVzdHMvc3ltbGluay1iYWQtbGVuZ3RoLmF0IGNwaW8tMi44L3Rlc3RzL3N5bWxpbmstYmFkLWxlbmd0aC5hdAorLS0tIGNwaW8tMi44Lm9yaWcvdGVzdHMvc3ltbGluay1iYWQtbGVuZ3RoLmF0CTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgY3Bpby0yLjgvdGVzdHMvc3ltbGluay1iYWQtbGVuZ3RoLmF0CTIwMTQtMTItMDggMTE6MzM6MjUuMjgzNzgzNTA3ICswODAwCitAQCAtMCwwICsxLDQ5IEBACisrIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tNHRlIHRvIGNyZWF0ZSB0ZXN0c3VpdGUuICAtKi0gQXV0b3Rlc3QgLSotCisrIyBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKysjIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorKyMgMDIxMTAtMTMwMSBVU0EuCisrCisrIyBDcGlvIHYyLjExIGRpZCBzZWdmYXVsdCB3aXRoIGJhZGx5IHNldCBzeW1saW5rIGxlbmd0aC4KKysjIFJlZmVyZW5jZXM6CisrIyBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNwaW8vMjAxNC0xMS9tc2cwMDAwNy5odG1sCisrCisrQVRfU0VUVVAoW3N5bWxpbmstYmFkLWxlbmd0aF0pCisrQVRfS0VZV09SRFMoW3N5bWxpbmstbG9uZyBjb3B5b3V0XSkKKysKKytBVF9EQVRBKFtBUkNISVZFLmJhc2U2NF0sCisrW3gzRWpBSUJBdElFdEp5OG5BUUFBQUhSVVlXMEZBQUFBRFFCR1NVeEZBQUJ6YjIxbElHTnZiblJsYm5RS0FNZHhJd0JnUS8raExTY3YKKytKd0VBQUFCMFZFaHVCUUQvLy8vL1RFbE9Td0FBUmtsTVJjZHhBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFDd0FBQUFBQVZGSkJTVXhGCisrVWlFaElRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQorK10pCisrCisrQVRfQ0hFQ0soWworK2Jhc2U2NCAtZCBBUkNISVZFLmJhc2U2NCA+IEFSQ0hJVkUgfHwgQVRfU0tJUF9URVNUCisrY3BpbyAtbnR2IDwgQVJDSElWRQorK3Rlc3QgJD8gLWVxIDIKKytdLAorK1swXSwKKytbLXJ3LXJ3LXItLSAgIDEgMTAwMjkgICAgMTAwMzEgICAgICAgICAgMTMgTm92IDI1IDEzOjUyIEZJTEUKKytdLFtjcGlvOiBMSU5LOiBzdG9yZWQgZmlsZW5hbWUgbGVuZ3RoIHRvbyBiaWcKKytjcGlvOiBwcmVtYXR1cmUgZW5kIG9mIGZpbGUKKytdKQorKworK0FUX0NMRUFOVVAKK2RpZmYgLU51cnAgY3Bpby0yLjgub3JpZy90ZXN0cy9zeW1saW5rLWxvbmcuYXQgY3Bpby0yLjgvdGVzdHMvc3ltbGluay1sb25nLmF0CistLS0gY3Bpby0yLjgub3JpZy90ZXN0cy9zeW1saW5rLWxvbmcuYXQJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuOC90ZXN0cy9zeW1saW5rLWxvbmcuYXQJMjAxNC0xMi0wOCAxMTozNDoyOC44MDc3ODEwMjQgKzA4MDAKK0BAIC0wLDAgKzEsNDYgQEAKKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b200dGUgdG8gY3JlYXRlIHRlc3RzdWl0ZS4gIC0qLSBBdXRvdGVzdCAtKi0KKysjIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisrIyAwMjExMC0xMzAxIFVTQS4KKysKKysjIENwaW8gdjIuMTEuOTAgY2hhbmdlZCB0aGUgd2F5IHN5bWxpbmsgbmFtZSBpcyByZWFkIGZyb20gYXJjaGl2ZS4KKysjIFJlZmVyZW5jZXM6CisrIyBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNwaW8vMjAxNC0xMS9tc2cwMDAwNy5odG1sCisrCisrQVRfU0VUVVAoW3N5bWxpbmstbG9uZ10pCisrQVRfS0VZV09SRFMoW3N5bWxpbmstbG9uZyBjb3B5b3V0XSkKKysKKytBVF9DSEVDSyhbCisrCisrIyBsZW4oZGlybmFtZSkgPiBSRUFEQlVGU0laRQorK2Rpcm5hbWU9CisrZm9yIGkgaW4gezEuLjUyfTsgZG8KKysgICAgZGlybmFtZT0ieHh4eHh4eHh4LyRkaXJuYW1lIgorKyAgICBta2RpciAiJGRpcm5hbWUiCisrZG9uZQorK2xuIC1zICIkZGlybmFtZSIgeCB8fCBBVF9TS0lQX1RFU1QKKysKKytlY2hvIHggfCBjcGlvIC1vID4gYXIKKytsaXN0PWBjcGlvIC10diA8IGFyIHwgc2VkICdzfC4qLT4gfHwnYAorK3Rlc3QgIiRsaXN0IiA9ICIkZGlybmFtZSIgJiYgZWNobyBzdWNjZXNzIHx8IGVjaG8gZmFpbAorK10sCisrWzBdLAorK1tzdWNjZXNzCisrXSxbMiBibG9ja3MKKysyIGJsb2NrcworK10pCisrCisrQVRfQ0xFQU5VUAorZGlmZiAtTnVycCBjcGlvLTIuOC5vcmlnL3Rlc3RzL3Rlc3RzdWl0ZS5hdCBjcGlvLTIuOC90ZXN0cy90ZXN0c3VpdGUuYXQKKy0tLSBjcGlvLTIuOC5vcmlnL3Rlc3RzL3Rlc3RzdWl0ZS5hdAkyMDA2LTEwLTI0IDE4OjMyOjEzLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi44L3Rlc3RzL3Rlc3RzdWl0ZS5hdAkyMDE0LTEyLTA4IDExOjM0OjU2LjUxNTc3OTk0MiArMDgwMAorQEAgLTMxLDMgKzMxLDUgQEAgbTRfaW5jbHVkZShbdmVyc2lvbi5hdF0pCisgCisgbTRfaW5jbHVkZShbaW5vdXQuYXRdKQorIG00X2luY2x1ZGUoW3N5bWxpbmsuYXRdKQorK200X2luY2x1ZGUoW3N5bWxpbmstYmFkLWxlbmd0aC5hdF0pCisrbTRfaW5jbHVkZShbc3ltbGluay1sb25nLmF0XSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvbTRleHRlbnNpb25zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9tNGV4dGVuc2lvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2NTg1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvbTRleHRlbnNpb25zLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCisjIERlZmluZSBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgb25seSBpZiBpdCB3YXMgcHJldmlvdXNseSB1bmRlZmluZWQuCisjIFRoaXMgaXMgbmVlZGVkIHRvIGNvbmZpZ3VyZSBjb3JyZWN0bHkgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBhdXRvY29uZi4KKworZGlmZiAtdXJOIGNwaW8tMi44Lm9yaWcvbTQvZXh0ZW5zaW9ucy5tNCBjcGlvLTIuOC9tNC9leHRlbnNpb25zLm00CistLS0gY3Bpby0yLjgub3JpZy9tNC9leHRlbnNpb25zLm00CTIwMDYtMTAtMTIgMDQ6MzQ6NDUuMDAwMDAwMDAwIC0wNzAwCisrKysgY3Bpby0yLjgvbTQvZXh0ZW5zaW9ucy5tNAkyMDEwLTA3LTIzIDE0OjM3OjM2LjAwMDAwMDAwMCAtMDcwMAorQEAgLTEsNCArMSw0IEBACistIyBzZXJpYWwgNCAgLSotIEF1dG9jb25mIC0qLQorKyMgc2VyaWFsIDUgIC0qLSBBdXRvY29uZiAtKi0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0uCisgCisgIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitAQCAtMTYsNiArMTYsNyBAQAorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorK200X2lmZGVmKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLCBbXSwgWworIEFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorIFsKKyAgIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorQEAgLTQ4LDcgKzQ5LDcgQEAKKyAgICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCisgICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCisgICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKy1dKQorK10pXSkKKyAKKyAjIGdsX1VTRV9TWVNURU1fRVhURU5TSU9OUworICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L3N0YXRkZWYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L3N0YXRkZWYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwNzk5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvc3RhdGRlZi5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworIyBBdm9pZCBtdWx0aXBsZSBzdGF0IGRlZmluaXRpb25zCisjIFBhdGNoIHRha2VuIGZyb20gY3BpbyBtYWlsaW5nIGxpc3QgcG9zdGluZyAyMDEwLTAzLTE5CisKK2RpZmYgLXVyTiBjcGlvLTIuMTEub3JpZy9zcmMvZmlsZXR5cGVzLmggY3Bpby0yLjExL3NyYy9maWxldHlwZXMuaAorLS0tIGNwaW8tMi4xMS5vcmlnL3NyYy9maWxldHlwZXMuaAkyMDEwLTAyLTEyIDAyOjE5OjIzLjAwMDAwMDAwMCAtMDgwMAorKysrIGNwaW8tMi4xMS9zcmMvZmlsZXR5cGVzLmgJMjAxMC0wNy0yMyAxMzoxNzoyNS4wMDAwMDAwMDAgLTA3MDAKK0BAIC04Miw0ICs4Miw2IEBACisgI2RlZmluZSBsc3RhdCBzdGF0CisgI2VuZGlmCisgaW50IGxzdGF0ICgpOworKyNpZm5kZWYgc3RhdAorIGludCBzdGF0ICgpOworKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvXzIuMTEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW9fMi4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWQ5MmJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvXzIuMTEuYmIKQEAgLTAsMCArMSwxNSBAQAoraW5jbHVkZSBjcGlvX3YyLmluYworCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkiCisKK1BSID0gInI1IgorCitTUkNfVVJJICs9ICJmaWxlOi8vcmVtb3ZlLWdldHMucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZml4LW1lbW9yeS1vdmVycnVuLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2NwaW8tQ1ZFLTIwMTUtMTE5Ny5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTExMmJiNmM0NTg2MzQ2OGI1NDk2YmExMjg3OTJmNmMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjAxYjFkNzc0Y2Q2ZTRjZDM5NDE2MjAzYzkxZWM1OWRiZDY1ZGQyN2Q3OWQ3NWUxYTliODk0OTdlYTY0Mzk3OCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb18yLjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW9fMi44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOTdkYmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW9fMi44LmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgY3Bpb192Mi5pbmMKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI3Zjc3MmVhM2EyNDg5MjMxY2I0ODcyNjU2Y2FjMzRiIgorCitQUiA9ICJyNCIKKworU1JDX1VSSSArPSAiZmlsZTovL200ZXh0ZW5zaW9ucy5wYXRjaCBcCisJICAgIGZpbGU6Ly9hdm9pZF9oZWFwX292ZXJmbG93LnBhdGNoIFwKKwkgICAgZmlsZTovL2ZpeC1tZW1vcnktb3ZlcnJ1bi5wYXRjaCBcCisJICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGNhYTM1NmU2OWUxNDlmYjQ5Yjc2YmFjYzY0NjE1YTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWIyMDMyNDg4NzRjM2I1YTcyOGIzNTFmMDY1MTNlNTI4MmY3M2UwMTcwYjdmMjA3ZmJmOGMzOWYyOGY2YjRhZCIKKworIyBSZXF1aXJlZCB0byBidWlsZCB3aXRoIGdjYyA0LjMgYW5kIGxhdGVyOgorQ0ZMQUdTICs9ICItZmdudTg5LWlubGluZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb192Mi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW9fdjIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZGU0YmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW9fdjIuaW5jCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiR05VIGNwaW8gaXMgYSBwcm9ncmFtIHRvIG1hbmFnZSBhcmNoaXZlcyBvZiBmaWxlcyIKK0RFU0NSSVBUSU9OID0gIkdOVSBjcGlvIGlzIGEgdG9vbCBmb3IgY3JlYXRpbmcgYW5kIGV4dHJhY3RpbmcgYXJjaGl2ZXMsIG9yIGNvcHlpbmcgZmlsZXMgZnJvbSBvbmUgcGxhY2UgdG8gXAorYW5vdGhlci4gSXQgaGFuZGxlcyBhIG51bWJlciBvZiBjcGlvIGZvcm1hdHMgYXMgd2VsbCBhcyByZWFkaW5nIGFuZCB3cml0aW5nIHRhciBmaWxlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY3Bpby8iCitTRUNUSU9OID0gImJhc2UiCisKK0RFUEVORFMgPSAidGV4aW5mby1uYXRpdmUiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9jcGlvL2NwaW8tJHtQVn0udGFyLmd6IFwKKyAgICBmaWxlOi8vc3RhdGRlZi5wYXRjaCBcCisgICAgIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworUyA9ICIke1dPUktESVJ9L2NwaW8tJHtQVn0iCisKK0VYVFJBX09FQ09ORiArPSAiREVGQVVMVF9STVRfRElSPSR7YmFzZV9zYmluZGlyfSIKKworZG9faW5zdGFsbCAoKSB7CisgICAgYXV0b3Rvb2xzX2RvX2luc3RhbGwKKyAgICBpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfS8KKyAgICBtdiAiJHtEfSR7YmluZGlyfS9jcGlvIiAiJHtEfSR7YmFzZV9iaW5kaXJ9L2NwaW8iCisgICAgcm1kaXIgJHtEfSR7YmluZGlyfS8KK30KKworUEFDS0FHRVMgPSsgIiR7UE59LXJtdCIKKworRklMRVNfJHtQTn0tcm10ID0gIiR7YmFzZV9zYmluZGlyfS9ybXQqIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJjcGlvIgorQUxURVJOQVRJVkVfJHtQTn0tcm10ID0gInJtdCIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2NwaW9dID0gIiR7YmFzZV9iaW5kaXJ9L2NwaW8iCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW3JtdF0gPSAiNTAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcm10XSA9ICIke2Jhc2Vfc2JpbmRpcn0vcm10IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMS1wYWNrbGliLmMtc3VwcG9ydC1kaWN0aW9uYXJ5LWJ5dGUtb3JkZXItZGVwZW5kZW50LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMS1wYWNrbGliLmMtc3VwcG9ydC1kaWN0aW9uYXJ5LWJ5dGUtb3JkZXItZGVwZW5kZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYmU3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcmFja2xpYi9jcmFja2xpYi8wMDAxLXBhY2tsaWIuYy1zdXBwb3J0LWRpY3Rpb25hcnktYnl0ZS1vcmRlci1kZXBlbmRlbnQucGF0Y2gKQEAgLTAsMCArMSwzMzkgQEAKK0Zyb20gOGE2ZTQzNzI2YWQwYWU0MWJkMWNjMmMyNDhkOTFkZWIzMTQ1OTM1NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExlaSBNYW9odWkgPGxlaW1hb2h1aUBjbi5mdWppdHN1LmNvbT4KK0RhdGU6IFR1ZSwgOSBKdW4gMjAxNSAxMToxMTo0OCArMDkwMAorU3ViamVjdDogW1BBVENIXSBwYWNrbGliLmM6IHN1cHBvcnQgZGljdGlvbmFyeSBieXRlIG9yZGVyIGRlcGVuZGVudAorCitUaGUgcHJldmlvdXMgZGljdCBmaWxlcyBhcmUgTk9UIGJ5dGUtb3JkZXIgaW5kZXBlbmRlbnQsIGluIGZhY3QgdGhleSBhcmUKK3Byb2JhYmx5IEFSQ0hJVEVDVFVSRSBTUEVDSUZJQy4KK0NyZWF0ZSB0aGUgZGljdCBmaWxlcyBpbiBiaWcgZW5kaWFuLCBhbmQgY29udmVydCB0byBob3N0IGVuZGlhbiB3aGlsZQorbG9hZCB0aGVtLiBUaGlzIGNvdWxkIGZpeCB0aGUgZW5kaWFuIGlzc3VlIG9uIG11bHRpcGxlIHBsYXRmb3JtLgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2UgY2FuJ3QgdXNlIHRoZSBlbmRpYW4uaCwgaHRvYmUqIGFuZCBiZSp0b2ggZnVuY3Rpb25zIGJlY2F1c2UgdGhleSBhcmUKK25vdCBhdmFpbGFibGUgb24gb2xkZXIgdmVyc2lvbnMgb2YgZ2xpYmMsIHN1Y2ggYXMgdGhhdCBmb3VuZCBpbiBSSEVMCis1LjkuCisKK0NoYW5nZSB0byBjaGVja2luZyBlbmRpYW4gYW5kIGRpcmVjdGx5IGNhbGxpbmcgYnN3YXBfKiBhcyBkZWZpbmVkIGluCitieXRlc3dhcC5oLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK1NpZ25lZC1vZmYtYnk6IExlaSBNYW9odWkgPGxlaW1hb2h1aUBjbi5mdWppdHN1LmNvbT4KKy0tLQorIGxpYi9wYWNrbGliLmMgfCAyMTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyMTAgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9wYWNrbGliLmMgYi9saWIvcGFja2xpYi5jCitpbmRleCBmODUxNDI0Li4zYWFjODA1IDEwMDY0NAorLS0tIGEvbGliL3BhY2tsaWIuYworKysrIGIvbGliL3BhY2tsaWIuYworQEAgLTE2LDYgKzE2LDEyIEBACisgI2lmZGVmIEhBVkVfU1RESU5UX0gKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2VuZGlmCisrCisrI2lmbmRlZiBfQlNEX1NPVVJDRQorKyNkZWZpbmUgX0JTRF9TT1VSQ0UgICAgICAgICAgICAgLyogU2VlIGZlYXR1cmVfdGVzdF9tYWNyb3MoNykgKi8KKysjZW5kaWYKKysjaW5jbHVkZSA8ZW5kaWFuLmg+CisrI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CisgI2luY2x1ZGUgInBhY2tlci5oIgorIAorIHN0YXRpYyBjb25zdCBjaGFyIHZlcnNfaWRbXSA9ICJwYWNrbGliLmMgOiB2Mi4zcDIgQWxlYyBNdWZmZXR0IDE4IE1heSAxOTkzIjsKK0BAIC00NSw2ICs1MSwxODUgQEAgdHlwZWRlZiBzdHJ1Y3QKKyAgICAgY2hhciBkYXRhX2dldFtOVU1XT1JEU11bTUFYV09SRExFTl07CisgfSBQV0RJQ1Q2NDsKKyAKKytlbnVteworKyAgICBlbl9pczMyLAorKyAgICBlbl9pczY0CisrfTsKKysKKytzdGF0aWMgaW50CisrSWhlYWRlckhvc3RUb0JpZ0VuZGlhbihjaGFyICpwSGVhZGVyLCBpbnQgbkJpdFR5cGUpCisreworKyAgICBpZiAobkJpdFR5cGUgPT0gZW5faXM2NCAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBzdHJ1Y3QgcGlfaGVhZGVyNjQgKnBIZWFkZXI2NCA9IChzdHJ1Y3QgcGlfaGVhZGVyNjQqKXBIZWFkZXI7CisrCisrICAgICAgICBwSGVhZGVyNjQtPnBpaF9tYWdpYyA9IGJzd2FwXzY0KHBIZWFkZXI2NC0+cGloX21hZ2ljKTsKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX251bXdvcmRzID0gYnN3YXBfNjQocEhlYWRlcjY0LT5waWhfbnVtd29yZHMpOworKyAgICAgICAgcEhlYWRlcjY0LT5waWhfYmxvY2tsZW4gPSBic3dhcF8xNihwSGVhZGVyNjQtPnBpaF9ibG9ja2xlbik7CisrICAgICAgICBwSGVhZGVyNjQtPnBpaF9wYWQgPSBic3dhcF8xNihwSGVhZGVyNjQtPnBpaF9wYWQpOworKworKyNpZiBERUJVRworKyAgICAgICAgcHJpbnRmKCJIZWFkZXI2NDogbWFnaWMgJXgsIG51bXdvcmRzICV4LCBibG9ja2xlbiAleCwgcGFkICV4XG4iLAorKyAgICAgICAgICBwSGVhZGVyNjQtPnBpaF9tYWdpYywgcEhlYWRlcjY0LT5waWhfbnVtd29yZHMsCisrICAgICAgICAgIHBIZWFkZXI2NC0+cGloX2Jsb2NrbGVuLCBwSGVhZGVyNjQtPnBpaF9wYWQpOworKyNlbmRpZgorKyAgICB9CisrICAgIGVsc2UgaWYgKG5CaXRUeXBlID09IGVuX2lzMzIgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgc3RydWN0IHBpX2hlYWRlciAqcEhlYWRlcjMyID0gKHN0cnVjdCBwaV9oZWFkZXIqKXBIZWFkZXI7CisrCisrICAgICAgICBwSGVhZGVyMzItPnBpaF9tYWdpYyA9IGJzd2FwXzMyKHBIZWFkZXIzMi0+cGloX21hZ2ljKTsKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX251bXdvcmRzID0gYnN3YXBfMzIocEhlYWRlcjMyLT5waWhfbnVtd29yZHMpOworKyAgICAgICAgcEhlYWRlcjMyLT5waWhfYmxvY2tsZW4gPSBic3dhcF8xNihwSGVhZGVyMzItPnBpaF9ibG9ja2xlbik7CisrICAgICAgICBwSGVhZGVyMzItPnBpaF9wYWQgPSBic3dhcF8xNihwSGVhZGVyMzItPnBpaF9wYWQpOworKworKyNpZiBERUJVRworKyAgICAgICAgcHJpbnRmKCJIZWFkZXIzMjogbWFnaWMgJXgsIG51bXdvcmRzICV4LCBibG9ja2xlbiAleCwgcGFkICV4XG4iLAorKyAgICAgICAgICBwSGVhZGVyMzItPnBpaF9tYWdpYywgcEhlYWRlcjMyLT5waWhfbnVtd29yZHMsCisrICAgICAgICAgIHBIZWFkZXIzMi0+cGloX2Jsb2NrbGVuLCBwSGVhZGVyMzItPnBpaF9wYWQpOworKyNlbmRpZgorKyAgICB9CisrICAgIGVsc2UgaWYgKF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTmVpdGhlciAzMiBvciA2NDogJWRcbiIsIG5CaXRUeXBlKTsKKysgICAgICAgIHJldHVybiAoLTEpOworKyAgICB9CisrCisrICAgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50CisrSWhlYWRlckJpZ0VuZGlhblRvSG9zdChjaGFyICpwSGVhZGVyLCBpbnQgbkJpdFR5cGUpCisreworKyAgICBpZiAobkJpdFR5cGUgPT0gZW5faXM2NCAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBzdHJ1Y3QgcGlfaGVhZGVyNjQgKnBIZWFkZXI2NCA9IChzdHJ1Y3QgcGlfaGVhZGVyNjQqKXBIZWFkZXI7CisrCisrICAgICAgICBwSGVhZGVyNjQtPnBpaF9tYWdpYyA9IGJzd2FwXzY0KHBIZWFkZXI2NC0+cGloX21hZ2ljKTsKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX251bXdvcmRzID0gYnN3YXBfNjQocEhlYWRlcjY0LT5waWhfbnVtd29yZHMpOworKyAgICAgICAgcEhlYWRlcjY0LT5waWhfYmxvY2tsZW4gPSBic3dhcF8xNihwSGVhZGVyNjQtPnBpaF9ibG9ja2xlbik7CisrICAgICAgICBwSGVhZGVyNjQtPnBpaF9wYWQgPSBic3dhcF8xNihwSGVhZGVyNjQtPnBpaF9wYWQpOworKworKyNpZiBERUJVRworKyAgICAgICAgcHJpbnRmKCJIZWFkZXI2NDogbWFnaWMgJXgsIG51bXdvcmRzICV4LCBibG9ja2xlbiAleCwgcGFkICV4XG4iLAorKyAgICAgICAgICBwSGVhZGVyNjQtPnBpaF9tYWdpYywgcEhlYWRlcjY0LT5waWhfbnVtd29yZHMsCisrICAgICAgICAgIHBIZWFkZXI2NC0+cGloX2Jsb2NrbGVuLCBwSGVhZGVyNjQtPnBpaF9wYWQpOworKyNlbmRpZgorKyAgICB9CisrICAgIGVsc2UgaWYgKG5CaXRUeXBlID09IGVuX2lzMzIgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgc3RydWN0IHBpX2hlYWRlciAqcEhlYWRlcjMyID0gKHN0cnVjdCBwaV9oZWFkZXIqKXBIZWFkZXI7CisrCisrICAgICAgICBwSGVhZGVyMzItPnBpaF9tYWdpYyA9IGJzd2FwXzMyKHBIZWFkZXIzMi0+cGloX21hZ2ljKTsKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX251bXdvcmRzID0gYnN3YXBfMzIocEhlYWRlcjMyLT5waWhfbnVtd29yZHMpOworKyAgICAgICAgcEhlYWRlcjMyLT5waWhfYmxvY2tsZW4gPSBic3dhcF8xNihwSGVhZGVyMzItPnBpaF9ibG9ja2xlbik7CisrICAgICAgICBwSGVhZGVyMzItPnBpaF9wYWQgPSBic3dhcF8xNihwSGVhZGVyMzItPnBpaF9wYWQpOworKworKyNpZiBERUJVRworKyAgICAgICAgcHJpbnRmKCJIZWFkZXIzMjogbWFnaWMgJXgsIG51bXdvcmRzICV4LCBibG9ja2xlbiAleCwgcGFkICV4XG4iLAorKyAgICAgICAgICAgIHBIZWFkZXIzMi0+cGloX21hZ2ljLCBwSGVhZGVyMzItPnBpaF9udW13b3JkcywKKysgICAgICAgICAgICBwSGVhZGVyMzItPnBpaF9ibG9ja2xlbiwgcEhlYWRlcjMyLT5waWhfcGFkKTsKKysjZW5kaWYKKysgICAgfQorKyAgICBlbHNlIGlmIChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5laXRoZXIgMzIgb3IgNjQ6ICVkXG4iLCBuQml0VHlwZSk7CisrICAgICAgICByZXR1cm4gKC0xKTsKKysgICAgfQorKworKyAgICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludAorK0h3bXNIb3N0VG9CaWdFbmRpYW4oY2hhciAqcEh3bXMsIGludCBuTGVuLGludCBuQml0VHlwZSkKKyt7CisrICAgIGludCBpID0gMDsKKysKKysgICAgaWYgKG5CaXRUeXBlID09IGVuX2lzNjQgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgdWludDY0X3QgKnBId21zNjQgPSAodWludDY0X3QqKXBId21zOworKworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5MZW4gLyBzaXplb2YodWludDY0X3QpOyBpKyspCisrICAgICAgICB7CisrICAgICAgICAgICAgKnBId21zNjQgPSBic3dhcF82NCgqcEh3bXM2NCk7CisrICAgICAgICAgICAgKnBId21zNjQrKzsKKysgICAgICAgIH0KKysKKysgICAgfQorKyAgICBlbHNlIGlmIChuQml0VHlwZSA9PSBlbl9pczMyICYmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIHsKKysgICAgICAgIHVpbnQzMl90ICpwSHdtczMyID0gKHVpbnQzMl90KilwSHdtczsKKysKKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuTGVuIC8gc2l6ZW9mKHVpbnQzMl90KTsgaSsrKQorKyAgICAgICAgeworKyAgICAgICAgICAgICpwSHdtczMyID0gYnN3YXBfMzIoKnBId21zMzIpOworKyAgICAgICAgICAgICpwSHdtczMyKys7CisrICAgICAgICB9CisrCisrICAgIH0KKysgICAgZWxzZSBpZiAoX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJOZWl0aGVyIDMyIG9yIDY0OiAlZFxuIiwgbkJpdFR5cGUpOworKyAgICAgICAgcmV0dXJuICgtMSk7CisrICAgIH0KKysKKysjaWYgREVCVUcKKysgICAgZm9yIChpID0gMDsgaSA8IG5MZW47IGkrPTgpCisrICAgIHsKKysgICAgICAgIHByaW50ZigiaHdtcyVzOiAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlhcbiIsCisrICAgICAgICAgICAgbkJpdFR5cGU9PWVuX2lzNjQ/IjY0IjoiMzIiLCBwSHdtc1tpKzBdJjB4RkYsIHBId21zW2krMV0mMHhGRiwKKysgICAgICAgICAgICBwSHdtc1tpKzJdJjB4RkYsIHBId21zW2krM10mMHhGRiwgcEh3bXNbaSs0XSYweEZGLAorKyAgICAgICAgICAgIHBId21zW2krNV0mMHhGRiwgcEh3bXNbaSs2XSYweEZGLCBwSHdtc1tpKzddJjB4RkYpOworKyAgICB9CisrI2VuZGlmCisrCisrICAgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50CisrSHdtc0JpZ0VuZGlhblRvSG9zdChjaGFyICpwSHdtcywgaW50IG5MZW4sIGludCBuQml0VHlwZSkKKyt7CisrICAgIGludCBpID0gMDsKKysKKysgICAgaWYgKG5CaXRUeXBlID09IGVuX2lzNjQgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgdWludDY0X3QgKnBId21zNjQgPSAodWludDY0X3QqKXBId21zOworKworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5MZW4gLyBzaXplb2YodWludDY0X3QpOyBpKyspCisrICAgICAgICB7CisrICAgICAgICAgICAgKnBId21zNjQrKyA9IGJzd2FwXzY0KCpwSHdtczY0KTsKKysgICAgICAgIH0KKysKKysgICAgfQorKyAgICBlbHNlIGlmIChuQml0VHlwZSA9PSBlbl9pczMyICYmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIHsKKysgICAgICAgIHVpbnQzMl90ICpwSHdtczMyID0gKHVpbnQzMl90KilwSHdtczsKKysKKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuTGVuIC8gc2l6ZW9mKHVpbnQzMl90KTsgaSsrKQorKyAgICAgICAgeworKyAgICAgICAgICAgICpwSHdtczMyID0gYnN3YXBfMzIoKnBId21zMzIpOworKyAgICAgICAgICAgICpwSHdtczMyKys7CisrICAgICAgICB9CisrCisrICAgIH0KKysgICAgZWxzZSBpZiAoX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJOZWl0aGVyIDMyIG9yIDY0OiAlZFxuIiwgbkJpdFR5cGUpOworKyAgICAgICAgcmV0dXJuICgtMSk7CisrICAgIH0KKysKKysjaWYgREVCVUcKKysgICAgZm9yIChpID0gMDsgaSA8IG5MZW47IGkrPTgpCisrICAgIHsKKysgICAgICAgIHByaW50ZigiaHdtcyVzOiAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlhcbiIsCisrICAgICAgICAgICAgbkJpdFR5cGU9PWVuX2lzNjQ/IjY0IjoiMzIiLCBwSHdtc1tpKzBdJjB4RkYsIHBId21zW2krMV0mMHhGRiwKKysgICAgICAgICAgICBwSHdtc1tpKzJdJjB4RkYsIHBId21zW2krM10mMHhGRiwgcEh3bXNbaSs0XSYweEZGLAorKyAgICAgICAgICAgIHBId21zW2krNV0mMHhGRiwgcEh3bXNbaSs2XSYweEZGLCBwSHdtc1tpKzddJjB4RkYpOworKyAgICB9CisrI2VuZGlmCisrCisrICAgIHJldHVybiAwOworK30KKyAKKyBzdGF0aWMgaW50CisgX1BXSXNCcm9rZW42NChGSUxFICppZnApCitAQCAtNTcsNiArMjQyLDcgQEAgX1BXSXNCcm9rZW42NChGSUxFICppZnApCisgICAgICAgIHJldHVybiAwOworICAgICB9CisgCisrICAgIEloZWFkZXJCaWdFbmRpYW5Ub0hvc3QoKGNoYXIgKikgJnBkZXNjNjQuaGVhZGVyLCBlbl9pczY0KTsKKyAgICAgcmV0dXJuIChwZGVzYzY0LmhlYWRlci5waWhfbWFnaWMgPT0gUElIX01BR0lDKTsKKyB9CisgCitAQCAtMTQ5LDcgKzMzNSwxMSBAQCBQV09wZW4ocHJlZml4LCBtb2RlKQorIAlwZGVzYy5oZWFkZXIucGloX2Jsb2NrbGVuID0gTlVNV09SRFM7CisgCXBkZXNjLmhlYWRlci5waWhfbnVtd29yZHMgPSAwOworIAorLQlmd3JpdGUoKGNoYXIgKikgJnBkZXNjLmhlYWRlciwgc2l6ZW9mKHBkZXNjLmhlYWRlciksIDEsIGlmcCk7CisrCXN0cnVjdCBwaV9oZWFkZXIgdG1waGVhZGVyMzI7CisrCisrCW1lbWNweSgmdG1waGVhZGVyMzIsICAmcGRlc2MuaGVhZGVyLCBzaXplb2YocGRlc2MuaGVhZGVyKSk7CisrCUloZWFkZXJIb3N0VG9CaWdFbmRpYW4oKGNoYXIgKikgJnRtcGhlYWRlcjMyLCBlbl9pczMyKTsKKysJZndyaXRlKChjaGFyICopICZ0bXBoZWFkZXIzMiwgc2l6ZW9mKHRtcGhlYWRlcjMyKSwgMSwgaWZwKTsKKyAgICAgfSBlbHNlCisgICAgIHsKKyAJcGRlc2MuZmxhZ3MgJj0gflBGT1JfV1JJVEU7CitAQCAtMTczLDYgKzM2Myw3IEBAIFBXT3BlbihwcmVmaXgsIG1vZGUpCisgCSAgICByZXR1cm4gTlVMTDsKKyAJfQorIAorKyAgICAgICAgSWhlYWRlckJpZ0VuZGlhblRvSG9zdCgoY2hhciAqKSAmcGRlc2MuaGVhZGVyLCBlbl9pczMyKTsKKyAgICAgICAgIGlmICgocGRlc2MuaGVhZGVyLnBpaF9tYWdpYyA9PSAwKSB8fCAocGRlc2MuaGVhZGVyLnBpaF9udW13b3JkcyA9PSAwKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAvKiB1aC1vaC4gZWl0aGVyIGEgYnJva2VuICI2NC1iaXQiIGZpbGUgb3IgYSBnYXJiYWdlIGZpbGUuICovCitAQCAtMTk1LDYgKzM4Niw3IEBAIFBXT3BlbihwcmVmaXgsIG1vZGUpCisgCQl9CisgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgIH0KKysgICAgICAgICAgICBJaGVhZGVyQmlnRW5kaWFuVG9Ib3N0KChjaGFyICopICZwZGVzYzY0LmhlYWRlciwgZW5faXM2NCk7CisgICAgICAgICAgICAgaWYgKHBkZXNjNjQuaGVhZGVyLnBpaF9tYWdpYyAhPSBQSUhfTUFHSUMpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAvKiBub3BlLCBub3QgIjY0LWJpdCIgYWZ0ZXIgYWxsICovCitAQCAtMjkwLDYgKzQ4Miw3IEBAIFBXT3BlbihwcmVmaXgsIG1vZGUpCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIHBkZXNjLmZsYWdzICY9IH5QRk9SX1VTRUhXTVM7CisgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgSHdtc0JpZ0VuZGlhblRvSG9zdCgoY2hhciopcGRlc2M2NC5od21zLCBzaXplb2YocGRlc2M2NC5od21zKSwgZW5faXM2NCk7CisgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YocGRlc2MuaHdtcykgLyBzaXplb2YocGRlc2MuaHdtc1swXSk7IGkrKykKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgcGRlc2MuaHdtc1tpXSA9IHBkZXNjNjQuaHdtc1tpXTsKK0BAIC0yOTksNiArNDkyLDcgQEAgUFdPcGVuKHByZWZpeCwgbW9kZSkKKyAJICAgIHsKKyAJCXBkZXNjLmZsYWdzICY9IH5QRk9SX1VTRUhXTVM7CisgCSAgICB9CisrCSAgICBId21zQmlnRW5kaWFuVG9Ib3N0KChjaGFyKilwZGVzYy5od21zLCBzaXplb2YocGRlc2MuaHdtcyksIGVuX2lzMzIpOworICNpZiBERUJVRworICAgICAgICAgICAgIGZvciAoaT0xOyBpPD0weGZmOyBpKyspCisgICAgICAgICAgICAgeworQEAgLTMzMiw3ICs1MjYsMTEgQEAgUFdDbG9zZShwd3ApCisgCSAgICByZXR1cm4gKC0xKTsKKyAJfQorIAorLQlpZiAoIWZ3cml0ZSgoY2hhciAqKSAmcHdwLT5oZWFkZXIsIHNpemVvZihwd3AtPmhlYWRlciksIDEsIHB3cC0+aWZwKSkKKysJc3RydWN0IHBpX2hlYWRlciB0bXBoZWFkZXIzMjsKKysKKysJbWVtY3B5KCZ0bXBoZWFkZXIzMiwgICZwd3AtPmhlYWRlciwgc2l6ZW9mKHB3cC0+aGVhZGVyKSk7CisrCUloZWFkZXJIb3N0VG9CaWdFbmRpYW4oKGNoYXIgKikgJnRtcGhlYWRlcjMyLCBlbl9pczMyKTsKKysJaWYgKCFmd3JpdGUoKGNoYXIgKikgJnRtcGhlYWRlcjMyLCBzaXplb2YodG1waGVhZGVyMzIpLCAxLCBwd3AtPmlmcCkpCisgCXsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiaW5kZXggbWFnaWMgZndyaXRlIGZhaWxlZFxuIik7CisgCSAgICByZXR1cm4gKC0xKTsKK0BAIC0zNTEsNyArNTQ5LDEyIEBAIFBXQ2xvc2UocHdwKQorIAkgICAgCXByaW50ZigiaHdtWyUwMnhdID0gJWRcbiIsIGksIHB3cC0+aHdtc1tpXSk7CisgI2VuZGlmCisgCSAgICB9CistCSAgICBmd3JpdGUocHdwLT5od21zLCAxLCBzaXplb2YocHdwLT5od21zKSwgcHdwLT53ZnApOworKworKwkgICAgUFdESUNUIHRtcF9wd3A7CisrCisrCSAgICBtZW1jcHkoJnRtcF9wd3AsIHB3cCwgc2l6ZW9mKFBXRElDVCkpOworKwkgICAgSHdtc0hvc3RUb0JpZ0VuZGlhbih0bXBfcHdwLmh3bXMsIHNpemVvZih0bXBfcHdwLmh3bXMpLCBlbl9pczMyKTsKKysJICAgIGZ3cml0ZSh0bXBfcHdwLmh3bXMsIDEsIHNpemVvZih0bXBfcHdwLmh3bXMpLCBwd3AtPndmcCk7CisgCX0KKyAgICAgfQorIAorQEAgLTQwNSw3ICs2MDgsOCBAQCBQdXRQVyhwd3AsIHN0cmluZykKKyAKKyAJZGF0dW0gPSAodWludDMyX3QpIGZ0ZWxsKHB3cC0+ZGZwKTsKKyAKKy0JZndyaXRlKChjaGFyICopICZkYXR1bSwgc2l6ZW9mKGRhdHVtKSwgMSwgcHdwLT5pZnApOworKwl1aW50MzJfdCB0bXBkYXR1bSA9IChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKSA/IGJzd2FwXzMyKGRhdHVtKSA6IGRhdHVtOworKwlmd3JpdGUoKGNoYXIgKikgJnRtcGRhdHVtLCBzaXplb2YodG1wZGF0dW0pLCAxLCBwd3AtPmlmcCk7CisgCisgCWZwdXRzKHB3cC0+ZGF0YV9wdXRbMF0sIHB3cC0+ZGZwKTsKKyAJcHV0YygwLCBwd3AtPmRmcCk7CitAQCAtNDY0LDYgKzY2OCw3IEBAIEdldFBXKHB3cCwgbnVtYmVyKQorICAgICAgICAgICAgcGVycm9yKCIoaW5kZXggZnJlYWQgZmFpbGVkKSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKysgICAgICAgZGF0dW02NCA9IChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKSA/IGJzd2FwXzY0KGRhdHVtNjQpIDogZGF0dW02NDsKKyAgICAgICAgZGF0dW0gPSBkYXR1bTY0OworICAgICB9IGVsc2UgeworICAgICAgICBpZiAoZnNlZWsocHdwLT5pZnAsIHNpemVvZihzdHJ1Y3QgcGlfaGVhZGVyKSArICh0aGlzYmxvY2sgKiBzaXplb2YodWludDMyX3QpKSwgMCkpCitAQCAtNDc3LDYgKzY4Miw3IEBAIEdldFBXKHB3cCwgbnVtYmVyKQorICAgICAgICAgICAgcGVycm9yKCIoaW5kZXggZnJlYWQgZmFpbGVkKSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKysgICAgICAgZGF0dW0gPSAoX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikgPyBic3dhcF8zMihkYXR1bSkgOiBkYXR1bTsKKyAgICAgfQorIAorIAlpbnQgciA9IDE7CistLSAKKzEuOC40LjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMi1jcmFrbGliLWZpeC10ZXN0bnVtLWFuZC10ZXN0c3RyLWZhaWxlZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliLzAwMDItY3Jha2xpYi1maXgtdGVzdG51bS1hbmQtdGVzdHN0ci1mYWlsZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIxMGU4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliLzAwMDItY3Jha2xpYi1maXgtdGVzdG51bS1hbmQtdGVzdHN0ci1mYWlsZWQucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSAwNmY5YTg4YjVkZDU1OTdmOTE5OGVhMGNiMzRmNWU5NmYxODBlNmUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogU2F0LCAyNyBBcHIgMjAxMyAxNjowMjozMCArMDgwMAorU3ViamVjdDogW1BBVENIXSBjcmFrbGliOmZpeCB0ZXN0bnVtIGFuZCB0ZXN0c3RyIGZhaWxlZAorCitFcnJvciBsb2c6CisuLi4KKyQgLi90ZXN0bnVtCisobnVsbCkucHdkLmd6OiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitQV09wZW46IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworJCAuL3V0aWwvdGVzdHN0cgorKG51bGwpLnB3ZC5nejogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorUFdPcGVuOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisuLi4KK1NldCBERUZBVUxUX0NSQUNLTElCX0RJQ1QgYXMgdGhlIHBhdGggb2YgIFBXT3BlbgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIHV0aWwvdGVzdG51bS5jIHwgICAgMiArLQorIHV0aWwvdGVzdHN0ci5jIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdXRpbC90ZXN0bnVtLmMgYi91dGlsL3Rlc3RudW0uYworaW5kZXggYWUyMjQ2ZC4uY2EyMTBmZiAxMDA2NDQKKy0tLSBhL3V0aWwvdGVzdG51bS5jCisrKysgYi91dGlsL3Rlc3RudW0uYworQEAgLTIwLDcgKzIwLDcgQEAgbWFpbiAoKQorICAgICBQV0RJQ1QgKnB3cDsKKyAgICAgY2hhciBidWZmZXJbU1RSSU5HU0laRV07CisgCistICAgIGlmICghKHB3cCA9IFBXT3BlbiAoTlVMTCwgInIiKSkpCisrICAgIGlmICghKHB3cCA9IFBXT3BlbiAoREVGQVVMVF9DUkFDS0xJQl9ESUNULCAiciIpKSkKKyAgICAgeworIAlwZXJyb3IgKCJQV09wZW4iKTsKKyAJcmV0dXJuICgtMSk7CitkaWZmIC0tZ2l0IGEvdXRpbC90ZXN0c3RyLmMgYi91dGlsL3Rlc3RzdHIuYworaW5kZXggMmEzMWZhNC4uOWZiOWNkYSAxMDA2NDQKKy0tLSBhL3V0aWwvdGVzdHN0ci5jCisrKysgYi91dGlsL3Rlc3RzdHIuYworQEAgLTE1LDcgKzE1LDcgQEAgbWFpbiAoKQorICAgICBQV0RJQ1QgKnB3cDsKKyAgICAgY2hhciBidWZmZXJbU1RSSU5HU0laRV07CisgCistICAgIGlmICghKHB3cCA9IFBXT3BlbiAoTlVMTCwgInIiKSkpCisrICAgIGlmICghKHB3cCA9IFBXT3BlbiAoREVGQVVMVF9DUkFDS0xJQl9ESUNULCAiciIpKSkKKyAgICAgeworIAlwZXJyb3IgKCJQV09wZW4iKTsKKyAJcmV0dXJuICgtMSk7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliXzIuOS41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWJfMi45LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmZmUzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliXzIuOS41LmJiCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiUGFzc3dvcmQgc3RyZW5ndGggY2hlY2tlciBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9jcmFja2xpYiIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZTNlZGEwMWQ5ODE1ZjhkMjRhYWUyZGJkODliNjhiMDYiCisKK0RFUEVORFMgPSAiY3JhY2tsaWItbmF0aXZlIHpsaWIgcHl0aG9uIgorUkRFUEVORF8ke1BOfS1weXRob24gKz0gInB5dGhvbiIKKworUEFDS0FHRVMgKz0gIiR7UE59LXB5dGhvbiIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1weXRob24gLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0iCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2NyYWNrbGliL2NyYWNrbGliLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBhY2tsaWIuYy1zdXBwb3J0LWRpY3Rpb25hcnktYnl0ZS1vcmRlci1kZXBlbmRlbnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1jcmFrbGliLWZpeC10ZXN0bnVtLWFuZC10ZXN0c3RyLWZhaWxlZC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjM3Njc5MGE5NWMxZmI2NDVlNTllNmU5ODAzYzc4NTgyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU5YWIwMTM4YmM4Y2Y5MGNjY2I4NTA5YjY5NjlhMDI0ZDVlNThkMmQwMmJjYmRjY2JiOWJhOWI4OGJlM2ZhMzMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcHl0aG9ubmF0aXZlIHB5dGhvbi1kaXIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworCWNyZWF0ZS1jcmFja2xpYi1kaWN0IC1vICR7RH0ke2RhdGFkaXJ9L2NyYWNrbGliL3B3X2RpY3QgJHtEfSR7ZGF0YWRpcn0vY3JhY2tsaWIvY3JhY2tsaWItc21hbGwKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJc3JjX2Rpcj0iJHtEfSR7YmFzZV9saWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcyIKKwlybSAtZiAkc3JjX2Rpci8qLnB5bworCXJtIC1mICRzcmNfZGlyL3Rlc3RfY3JhY2tsaWIucHkKKwkjIE1vdmUgcHl0aG9uIGZpbGVzIGZyb20gJHtiYXNlX2xpYmRpcn0gdG8gJHtsaWJkaXJ9IHNpbmNlIHVzZWQgLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0KKwlpbnN0YWxsIC1kIC1tIDA3NTUgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LworCW12ICRzcmNfZGlyLyogJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisJcm0gLWZyICR7RH0ke2Jhc2VfbGliZGlyfS8ke1BZVEhPTl9ESVJ9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworRklMRVNfJHtQTn0tcHl0aG9uID0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2NyYWNrbGliLnB5IFwKKwkke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9fY3JhY2tsaWIuc28gXAorICAgICIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vLmRlYnVnL19jcmFja2xpYi5zbyIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vX2NyYWNrbGliLmEgXAorCSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L19jcmFja2xpYi5sYSBcCisgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZC5pbml0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZC5pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUzYjg1MTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb25kLmluaXQKQEAgLTAsMCArMSw1OCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiBjcm9uZCBjcm9udGFiCisjIERlZmF1bHQtU3RhcnQ6ICAyMzQ1CisjIERlZmF1bHQtU3RvcDogICAwMTYKKyMgU2hvcnQtRGVzY3JpcHRpb246IHJ1biBjcm9uIGRhZW1vbgorIyBEZXNjcmlwdGlvbjogY3JvbiBpcyBhIHN0YW5kYXJkIFVOSVggcHJvZ3JhbSB0aGF0IHJ1bnMgdXNlci1zcGVjaWZpZWQKKyMgICAgICAgICAgICAgIHByb2dyYW1zIGF0IHBlcmlvZGljIHNjaGVkdWxlZCB0aW1lcy4gdml4aWUgY3JvbiBhZGRzIGEKKyMgICAgICAgICAgICAgIG51bWJlciBvZiBmZWF0dXJlcyB0byB0aGUgYmFzaWMgVU5JWCBjcm9uLCBpbmNsdWRpbmcgYmV0dGVyCisjICAgICAgICAgICAgICBzZWN1cml0eSBhbmQgbW9yZSBwb3dlcmZ1bCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCisjIyMgRU5EIElOSVQgSU5GTworCitDUk9ORD0vdXNyL3NiaW4vY3JvbmQKK0NPTkZJRz0vZXRjL3N5c2NvbmZpZy9jcm9uZAorCitbIC1mICRDT05GSUcgXSB8fCBleGl0IDEKK1sgLXggJENST05EIF0gfHwgZXhpdCAxCisKKy4gJENPTkZJRworCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgIGVjaG8gLW4gIlN0YXJ0aW5nIGNyb25kOiAiCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tZXhlYyAkQ1JPTkQgLS0gJENST05EQVJHUworICAgIFJFVFZBTD0kPworICAgIGlmIFsgJFJFVFZBTCAtZXEgMCBdIDsgdGhlbgorICAgICAgICBlY2hvICJPSyIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIkZBSUwiCisgICAgZmkKKyAgICA7OworICBzdG9wKQorICAgIGVjaG8gLW4gIlN0b3BwaW5nIGNyb25kOiAiCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuL2Nyb25kLnBpZAorICAgIFJFVFZBTD0kPworICAgIGlmIFsgJFJFVFZBTCAtZXEgMCBdIDsgdGhlbgorICAgICAgICBlY2hvICJPSyIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIkZBSUwiCisgICAgZmkKKyAgICA7OworICBzdGF0dXMpCisgICAgc3RhdHVzIGNyb25kCisgICAgZXhpdCAkPworICAgIDs7CisgIHJlc3RhcnQpCisgICAgJDAgc3RvcCAmJiBzbGVlcCAxICYmICQwIHN0YXJ0CisgICAgOzsKKyAgKikKKyAgICBlY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvY3JvbmQge3N0YXJ0fHN0b3B8c3RhdHVzfHJlc3RhcnR9IgorICAgIGV4aXQgMQorZXNhYworCitleGl0IDAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MzVhNmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb25kLnNlcnZpY2UKQEAgLTAsMCArMSwxMSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1QZXJpb2RpYyBDb21tYW5kIFNjaGVkdWxlcgorCitbU2VydmljZV0KK0Vudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9jcm9uZAorRXhlY1N0YXJ0PUBTQklORElSQC9jcm9uZCAtbiAkQ1JPTkRBUkdTCitFeGVjUmVsb2FkPUBCQVNFX0JJTkRJUkAva2lsbCAtSFVQICRNQUlOUElECitSZXN0YXJ0PWFsd2F5cworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb25kX3BhbV9jb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb25kX3BhbV9jb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1ODcyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmRfcGFtX2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDE5IEBACitwYXNzd29yZC1hdXRoIGlzIHRoZSBGZWRvcmEncyBjb21tb24gcGFtIGNvbmZpZ3VyZSBmaWxlLCB1c2Ugb2UgY29tbW9uIHBhbQorY29uZmlndXJlIGZpbGVzIGluc3RlYWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLSBjcm9uaWUtMS40LjcvcGFtL2Nyb25kLm9yaWcJMjAxMC0xMi0xNiAxNjo1OTowMi4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcm9uaWUtMS40LjcvcGFtL2Nyb25kCTIwMTEtMDctMjAgMDk6NDc6MTYuMDgwODE5MjAzICswODAwCitAQCAtNCw3ICs0LDcgQEAKKyAjCisgIyBObyBQQU0gYXV0aGVudGljYXRpb24gY2FsbGVkLCBhdXRoIG1vZHVsZXMgbm90IG5lZWRlZAorIGFjY291bnQgICAgcmVxdWlyZWQgICBwYW1fYWNjZXNzLnNvCistYWNjb3VudCAgICBpbmNsdWRlICAgIHBhc3N3b3JkLWF1dGgKKythY2NvdW50ICAgIGluY2x1ZGUgICAgY29tbW9uLWFjY291bnQKKyBzZXNzaW9uICAgIHJlcXVpcmVkICAgcGFtX2xvZ2ludWlkLnNvCistc2Vzc2lvbiAgICBpbmNsdWRlICAgIHBhc3N3b3JkLWF1dGgKKy1hdXRoICAgICAgIGluY2x1ZGUgICAgcGFzc3dvcmQtYXV0aAorK3Nlc3Npb24gICAgaW5jbHVkZSAgICBjb21tb24tc2Vzc2lvbi1ub25pbnRlcmFjdGl2ZQorK2F1dGggICAgICAgaW5jbHVkZSAgICBjb21tb24tYXV0aApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9udGFiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9udGFiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYzRmZWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb250YWIKQEAgLTAsMCArMSwxNCBAQAorIyAvZXRjL2Nyb250YWI6IHN5c3RlbS13aWRlIGNyb250YWIKKyMgVW5saWtlIGFueSBvdGhlciBjcm9udGFiIHlvdSBkb24ndCBoYXZlIHRvIHJ1biB0aGUgYGNyb250YWInCisjIGNvbW1hbmQgdG8gaW5zdGFsbCB0aGUgbmV3IHZlcnNpb24gd2hlbiB5b3UgZWRpdCB0aGlzIGZpbGUKKyMgYW5kIGZpbGVzIGluIC9ldGMvY3Jvbi5kLiBUaGVzZSBmaWxlcyBhbHNvIGhhdmUgdXNlcm5hbWUgZmllbGRzLAorIyB0aGF0IG5vbmUgb2YgdGhlIG90aGVyIGNyb250YWJzIGRvLgorCitTSEVMTD0vYmluL3NoCitQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorCisjICBtICBoICBkb20gbW9uIGRvdyB1c2VyCWNvbW1hbmQKKyMgIDEgICogICAgICogKiAqICAgIHJvb3QgICAgICAgIGNkIC8gJiYgcnVuLXBhcnRzIC9ldGMvY3Jvbi5ob3VybHkKKyMgMzAgIDcgICAgICogKiAqICAgIHJvb3QgICAgICAgIGNkIC8gJiYgcnVuLXBhcnRzIC9ldGMvY3Jvbi5kYWlseQorIyA0MiAgNyAgICAgKiAqIDcgICAgcm9vdCAgICAgICAgY2QgLyAmJiBydW4tcGFydHMgL2V0Yy9jcm9uLndlZWtseQorIyA1NSAgNyAgICAgMSAqICogICAgcm9vdCAgICAgICAgY2QgLyAmJiBydW4tcGFydHMgL2V0Yy9jcm9uLm1vbnRobHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWVfMS41LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllXzEuNS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YmQ1OTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllXzEuNS4wLmJiCkBAIC0wLDAgKzEsODEgQEAKK1NVTU1BUlkgPSAiQ3JvbiBkYWVtb24gZm9yIGV4ZWN1dGluZyBwcm9ncmFtcyBhdCBzZXQgdGltZXMiCitERVNDUklQVElPTiA9ICJDcm9uaWUgY29udGFpbnMgdGhlIHN0YW5kYXJkIFVOSVggZGFlbW9uIGNyb25kIHRoYXQgcnVucyBcCitzcGVjaWZpZWQgcHJvZ3JhbXMgYXQgc2NoZWR1bGVkIHRpbWVzIGFuZCByZWxhdGVkIHRvb2xzLiBJdCBpcyBiYXNlZCBvbiB0aGUgXAorb3JpZ2luYWwgY3JvbiBhbmQgaGFzIHNlY3VyaXR5IGFuZCBjb25maWd1cmF0aW9uIGVuaGFuY2VtZW50cyBsaWtlIHRoZSBcCithYmlsaXR5IHRvIHVzZSBwYW0gYW5kIFNFTGludXguIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2Nyb25pZS8iCitCVUdUUkFDS0VSID0gIm1tYXNsYW5vQHJlZGhhdC5jb20iCisKKyMgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtIExpY2Vuc2UKK0xJQ0VOU0UgPSAiSVNDICYgQlNELTMtQ2xhdXNlICYgQlNELTItQ2xhdXNlICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGQyYTU5MjE3MDc2MGUxMzg2Yzc2OWUxMDQzYjM3MjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2Nyb24uYztlbmRsaW5lPTIwO21kNT1iNDI1YzMzNDI2NTAyNjE3NzEyODM1M2ExNDI2MzNiNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcG9wZW4uYztiZWdpbmxpbmU9MztlbmRsaW5lPTMxO21kNT1lZGQ1MDc0MmQ4ZGVmNzEyZTk0NzJkYmEzNTM2NjhhOSIKKworU0VDVElPTiA9ICJ1dGlscyIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvYy9yL2Nyb25pZS9jcm9uaWUtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2Nyb25kLmluaXQgXAorICAgICAgICAgICBmaWxlOi8vY3JvbnRhYiBcCisgICAgICAgICAgIGZpbGU6Ly9jcm9uZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IgorCitQQU1fU1JDX1VSSSA9ICJmaWxlOi8vY3JvbmRfcGFtX2NvbmZpZy5wYXRjaCIKK1BBTV9ERVBTID0gImxpYnBhbSBsaWJwYW0tcnVudGltZSBwYW0tcGx1Z2luLWFjY2VzcyBwYW0tcGx1Z2luLWxvZ2ludWlkIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWRiNzVlMTg4NGQ4M2E0NWUwMDJkMTQ1YzZjNTRkNDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWNmMGUzZjRmNTA0MmE5YzA5NDEzZDYyYzhlMGMwNTVlMTI0MDFmNzBiMTEyNDY1ZjBmODFmMmM4NGViZmIzZiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLXJjLmQgdXNlcmFkZCBzeXN0ZW1kCisKK1BBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbYXVkaXRdID0gIi0td2l0aC1hdWRpdCwtLXdpdGhvdXQtYXVkaXQsYXVkaXQsIgorUEFDS0FHRUNPTkZJR1twYW1dID0gIi0td2l0aC1wYW0sLS13aXRob3V0LXBhbSxsaWJwYW0sJHtQQU1fREVQU30iCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJjcm9uZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDkwIDIgMyA0IDUgLiBzdG9wIDYwIDAgMSA2IC4iCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitHUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSBjcm9udGFiIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiY3JvbmQuc2VydmljZSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc3lzY29uZmlnLworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDY0NCAke1N9L2Nyb25kLnN5c2NvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9zeXNjb25maWcvY3JvbmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9jcm9uZC5pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9jcm9uZAorCisJIyBpbnN0YWxsIHN5c3RlbWQgdW5pdCBmaWxlcworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9jcm9uZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAorCSAgICAgICAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJICAgICAgICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2Nyb25kLnNlcnZpY2UKKworCSMgYmVsb3cgYXJlIG5lY2Vzc2FyeSBmb3IgYSBjb21wbGV0ZSBjcm9uIGVudmlyb25tZW50CisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9zcG9vbC9jcm9uCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vY3JvbnRhYiAke0R9JHtzeXNjb25mZGlyfS8KKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmQKKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmhvdXJseQorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkKKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jcm9uLndlZWtseQorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24ubW9udGhseQorCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZGVueQorCisJIyBiZWxvdyBzZXR0aW5nIGlzIG5lY2Vzc2FyeSB0byBhbGxvdyBub3JtYWwgdXNlciB1c2luZyBjcm9udGFiCisKKwkjIHNldGdpZCBmb3IgY3JvbnRhYiBiaW5hcnkKKwljaG93biByb290OmNyb250YWIgJHtEfSR7YmluZGlyfS9jcm9udGFiCisJY2htb2QgMjc1NSAke0R9JHtiaW5kaXJ9L2Nyb250YWIKKworCSMgYWxsb3cgJ2Nyb250YWInIGdyb3VwIHdyaXRlIHRvIC92YXIvc3Bvb2wvY3JvbgorCWNob3duIHJvb3Q6Y3JvbnRhYiAke0R9JHtsb2NhbHN0YXRlZGlyfS9zcG9vbC9jcm9uCisJY2htb2QgNzcwICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL2Nyb24KKworCWNobW9kIDYwMCAke0R9JHtzeXNjb25mZGlyfS9jcm9udGFiCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2Nyb24qIgorQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2Nyb250YWIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2NkZjI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzLmluYwpAQCAtMCwwICsxLDEyMyBAQAorU1VNTUFSWSA9ICJBbiBJbnRlcm5ldCBwcmludGluZyBzeXN0ZW0gZm9yIFVuaXgiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyIgorREVQRU5EUyA9ICJnbnV0bHMgbGlicG5nIGpwZWcgZGJ1cyBkYnVzLWdsaWIgemxpYiBsaWJ1c2IiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jdXBzLm9yZy9zb2Z0d2FyZS8ke1BWfS8ke0JQfS1zb3VyY2UudGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly91c2VfZWNob19vbmx5X2luX2luaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1kb24tdC10cnktdG8tcnVuLWdlbmVyYXRlZC1iaW5hcmllcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jdXBzX3NlcnZlcmJpbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jdXBzLnNvY2tldCBcCisgICAgICAgICAgIGZpbGU6Ly9jdXBzLnBhdGggXAorICAgICAgICAgICBmaWxlOi8vY3Vwcy5zZXJ2aWNlIFwKKwkgICIKKworTEVBRF9TT05BTUUgPSAibGliY3Vwc2RyaXZlci5zbyIKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGJpbmNvbmZpZyB1c2VyYWRkIHN5c3RlbWQKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIGxwYWRtaW4iCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJjdXBzLnNvY2tldCBjdXBzLnBhdGggY3Vwcy5zZXJ2aWNlIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd6ZXJvY29uZicsICdhdmFoaScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2F2YWhpXSA9ICItLWVuYWJsZS1hdmFoaSwtLWRpc2FibGUtYXZhaGksYXZhaGkiCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLS1lbmFibGUtYWNsLC0tZGlzYWJsZS1hY2wsYWNsIgorUEFDS0FHRUNPTkZJR1twYW1dID0gIi0tZW5hYmxlLXBhbSwgLS1kaXNhYmxlLXBhbSwgbGlicGFtIgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAgICAgICAgICAgIC0tZW5hYmxlLWdudXRscyBcCisgICAgICAgICAgICAgICAtLWVuYWJsZS1kYnVzIFwKKyAgICAgICAgICAgICAgIC0tZW5hYmxlLWJyb3dzaW5nIFwKKyAgICAgICAgICAgICAgIC0tZGlzYWJsZS1nc3NhcGkgXAorICAgICAgICAgICAgICAgLS1lbmFibGUtZGVidWcgXAorICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJlbHJvIFwKKyAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYnVzYiBcCisgICAgICAgICAgICAgICAtLXdpdGhvdXQtcGhwIFwKKyAgICAgICAgICAgICAgIC0td2l0aG91dC1wZXJsIFwKKyAgICAgICAgICAgICAgIC0td2l0aG91dC1weXRob24gXAorICAgICAgICAgICAgICAgLS13aXRob3V0LWphdmEgXAorICAgICAgICAgICAgICAgIgorCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWV4Y2x1ZGU9YXV0b2hlYWRlciIKKworZG9fY29tcGlsZSAoKSB7CisJZWNobyAiYWxsOiIgICAgPiAgbWFuL01ha2VmaWxlCisJZWNobyAibGliczoiID4+IG1hbi9NYWtlZmlsZQorCWVjaG8gImluc3RhbGw6IiA+PiBtYW4vTWFrZWZpbGUKKwllY2hvICJpbnN0YWxsLWRhdGE6IiA+PiBtYW4vTWFrZWZpbGUKKwllY2hvICJpbnN0YWxsLWV4ZWM6IiA+PiBtYW4vTWFrZWZpbGUKKwllY2hvICJpbnN0YWxsLWhlYWRlcnM6IiA+PiBtYW4vTWFrZWZpbGUKKwllY2hvICJpbnN0YWxsLWxpYnM6IiA+PiBtYW4vTWFrZWZpbGUKKworCW9lX3J1bm1ha2UKK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAiRFNUUk9PVD0ke0R9IiBpbnN0YWxsCisKKwkjIFJlbW92ZSAvdmFyL3J1biBmcm9tIHBhY2thZ2UgYXMgY3Vwc2Qgd2lsbCBwb3B1bGF0ZSBpdCBvbiBzdGFydHVwCisJcm0gLWZyICR7RH0vJHtsb2NhbHN0YXRlZGlyfS9ydW4KKwlybWRpciAke0R9LyR7bGliZGlyfS8ke0JQTn0vZHJpdmVyCisKKwkjIFJlbW92ZSBzeXNpbml0IHNjcmlwdCBhbmQgc3ltbGlua3MgaWYgc3lzdmluaXQgaXMgbm90IGluIERJU1RST19GRUFUVVJFUworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJ2ZhbHNlJywndHJ1ZScsZCl9OyB0aGVuCisJICAgIHJtIC1yZiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJICAgIHJtIC1yZiAke0R9JHtzeXNjb25mZGlyfS9yYyoKKwlmaQorCisJIyBJbnN0YWxsIHN5c3RlbWQgdW5pdCBmaWxlcworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9jdXBzLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2N1cHMucGF0aCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2N1cHMuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9jdXBzLnNlcnZpY2UKK30KKworcHl0aG9uIGRvX3BhY2thZ2VfYXBwZW5kKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgIyBDaGFuZ2UgcGVybWlzc2lvbnMgYmFjayB0aGUgd2F5IHRoZXkgd2VyZSwgdGhleSBwcm9iYWJseSBoYWQgYSByZWFzb24uLi4KKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIHN1YnByb2Nlc3MuY2FsbCgnY2htb2QgMDUxMSAlcy9pbnN0YWxsL2N1cHMvdmFyL3J1bi9jdXBzL2NlcnRzJyAlIHdvcmtkaXIsIHNoZWxsPVRydWUpCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1saWIgJHtQTn0tbGliaW1hZ2UiCisKK1JERVBFTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgJ3Byb2NwcycsICcnLCBkKX0iCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2N1cHMvYmFja2VuZCBcCisJCSR7bGliZGlyfS9jdXBzL2NnaS1iaW4gXAorCQkke2xpYmRpcn0vY3Vwcy9maWx0ZXIgXAorCQkke2xpYmRpcn0vY3Vwcy9tb25pdG9yIFwKKwkJJHtsaWJkaXJ9L2N1cHMvbm90aWZpZXIgXAorCQkke2xpYmRpcn0vY3Vwcy9kYWVtb24gXAorCSAgICAgICAiCisKK0ZJTEVTXyR7UE59LWxpYiA9ICIke2xpYmRpcn0vbGliY3Vwcy5zby4qIgorCitGSUxFU18ke1BOfS1saWJpbWFnZSA9ICIke2xpYmRpcn0vbGliY3Vwc2ltYWdlLnNvLioiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2N1cHMvYmFja2VuZC8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY3Vwcy9jZ2ktYmluLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jdXBzL2ZpbHRlci8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY3Vwcy9tb25pdG9yLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jdXBzL25vdGlmaWVyLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jdXBzL2RhZW1vbi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICIKKworI3BhY2thZ2UgdGhlIGh0bWwgZm9yIHRoZSB3ZWJndWkgaW5zaWRlIHRoZSBtYWluIHBhY2thZ2VzICh+MU1CIHVuY29tcHJlc3NlZCkKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vZG9jL2N1cHMvaW1hZ2VzIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RvYy9jdXBzLypodG1sIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RvYy9jdXBzLyouY3NzIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2ljb25zLyBcCisgICAgICAgICAgICAgICAiCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vY3Vwcy9jdXBzZC5jb25mIgorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImN1cHNfc3lzcm9vdF9wcmVwcm9jZXNzIgorY3Vwc19zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCXNlZCAtaSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2N1cHMtY29uZmlnIC1lICdzOmN1cHNfZGF0YWRpcj0uKjpjdXBzX2RhdGFkaXI9JHtkYXRhZGlyfS9jdXBzOicgLWUgJ3M6Y3Vwc19zZXJ2ZXJiaW49Lio6Y3Vwc19zZXJ2ZXJiaW49JHtsaWJkaXJ9L2N1cHM6JworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzLzAwMDEtZG9uLXQtdHJ5LXRvLXJ1bi1nZW5lcmF0ZWQtYmluYXJpZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvMDAwMS1kb24tdC10cnktdG8tcnVuLWdlbmVyYXRlZC1iaW5hcmllcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mzc5ZWI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzLzAwMDEtZG9uLXQtdHJ5LXRvLXJ1bi1nZW5lcmF0ZWQtYmluYXJpZXMucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworRnJvbSA5MDA2OTU4NjE2N2I5MzBiZWZjZTczMDNhZWE1NzA3OGYwNGI0ZWQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IFN1biwgMzAgSmFuIDIwMTEgMTY6Mzc6MjcgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gZG9uJ3QgdHJ5IHRvIHJ1biBnZW5lcmF0ZWQgYmluYXJpZXMKKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KKy0tLQorIHBwZGMvTWFrZWZpbGUgfCAgIDMwICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCisKK0luZGV4OiBjdXBzLTIuMC4wL3BwZGMvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjdXBzLTIuMC4wLm9yaWcvcHBkYy9NYWtlZmlsZQorKysrIGN1cHMtMi4wLjAvcHBkYy9NYWtlZmlsZQorQEAgLTI0Miw4ICsyNDIsOCBAQCBnZW5zdHJpbmdzOgkJZ2Vuc3RyaW5ncy5vIGxpYmN1cHNwcGRjLmEKKyAJJChDWFgpICQoQVJDSEZMQUdTKSAkKExERkxBR1MpIC1vIGdlbnN0cmluZ3MgZ2Vuc3RyaW5ncy5vIFwKKyAJCWxpYmN1cHNwcGRjLmEgLi4vY3Vwcy8kKExJQkNVUFNTVEFUSUMpICQoTElCR1NTQVBJKSAkKFNTTExJQlMpIFwKKyAJCSQoRE5TU0RMSUJTKSAkKENPTU1PTkxJQlMpICQoTElCWikKKy0JZWNobyBHZW5lcmF0aW5nIGxvY2FsaXphdGlvbiBzdHJpbmdzLi4uCistCS4vZ2Vuc3RyaW5ncyA+c2FtcGxlLmMKKysjCWVjaG8gR2VuZXJhdGluZyBsb2NhbGl6YXRpb24gc3RyaW5ncy4uLgorKyMJLi9nZW5zdHJpbmdzID5zYW1wbGUuYworIAorIAorICMKK0BAIC0yNjAsOSArMjYwLDkgQEAgcHBkYy1zdGF0aWM6CQlwcGRjLm8gbGliY3Vwc3BwZGMuYSAuLi9jdQorIAkkKENYWCkgJChBUkNIRkxBR1MpICQoTERGTEFHUykgLW8gcHBkYy1zdGF0aWMgcHBkYy5vIGxpYmN1cHNwcGRjLmEgXAorIAkJLi4vY3Vwcy8kKExJQkNVUFNTVEFUSUMpICQoTElCR1NTQVBJKSAkKFNTTExJQlMpICQoRE5TU0RMSUJTKSBcCisgCQkkKENPTU1PTkxJQlMpICQoTElCWikKKy0JZWNobyBUZXN0aW5nIFBQRCBjb21waWxlci4uLgorLQkuL3BwZGMtc3RhdGljIC1sIGVuLGZyIC1JIC4uL2RhdGEgZm9vLmRydgorLQkuL3BwZGMtc3RhdGljIC1sIGVuLGZyIC16IC1JIC4uL2RhdGEgZm9vLmRydgorKyMJZWNobyBUZXN0aW5nIFBQRCBjb21waWxlci4uLgorKyMJLi9wcGRjLXN0YXRpYyAtbCBlbixmciAtSSAuLi9kYXRhIGZvby5kcnYKKysjCS4vcHBkYy1zdGF0aWMgLWwgZW4sZnIgLXogLUkgLi4vZGF0YSBmb28uZHJ2CisgCisgCisgIworQEAgLTI4OCwxNyArMjg4LDE3IEBAIHBwZGktc3RhdGljOgkJcHBkYy1zdGF0aWMgcHBkaS5vIGxpYmN1cHMKKyAJJChDWFgpICQoQVJDSEZMQUdTKSAkKExERkxBR1MpIC1vIHBwZGktc3RhdGljIHBwZGkubyBsaWJjdXBzcHBkYy5hIFwKKyAJCS4uL2N1cHMvJChMSUJDVVBTU1RBVElDKSAkKExJQkdTU0FQSSkgJChTU0xMSUJTKSAkKEROU1NETElCUykgXAorIAkJJChDT01NT05MSUJTKSAkKExJQlopCistCWVjaG8gVGVzdGluZyBQUEQgaW1wb3J0ZXIuLi4KKy0JJChSTSkgLXIgcHBkIHBwZDIgc2FtcGxlLWltcG9ydC5kcnYKKy0JLi9wcGRjLXN0YXRpYyAtbCBlbiAtSSAuLi9kYXRhIHNhbXBsZS5kcnYKKy0JLi9wcGRpLXN0YXRpYyAtSSAuLi9kYXRhIC1vIHNhbXBsZS1pbXBvcnQuZHJ2IHBwZC8qCistCS4vcHBkYy1zdGF0aWMgLWwgZW4gLUkgLi4vZGF0YSAtZCBwcGQyIHNhbXBsZS1pbXBvcnQuZHJ2CistCWlmIGRpZmYgLXIgcHBkIHBwZDIgPi9kZXYvbnVsbDsgdGhlbiBcCistCQllY2hvIFBQRCBpbXBvcnQgT0s7IFwKKy0JZWxzZSBcCistCQllY2hvIFBQRCBpbXBvcnQgRkFJTEVEOyBcCistCQlleGl0IDE7IFwKKy0JZmkKKysjCWVjaG8gVGVzdGluZyBQUEQgaW1wb3J0ZXIuLi4KKysjCSQoUk0pIC1yIHBwZCBwcGQyIHNhbXBsZS1pbXBvcnQuZHJ2CisrIwkuL3BwZGMtc3RhdGljIC1sIGVuIC1JIC4uL2RhdGEgc2FtcGxlLmRydgorKyMJLi9wcGRpLXN0YXRpYyAtSSAuLi9kYXRhIC1vIHNhbXBsZS1pbXBvcnQuZHJ2IHBwZC8qCisrIwkuL3BwZGMtc3RhdGljIC1sIGVuIC1JIC4uL2RhdGEgLWQgcHBkMiBzYW1wbGUtaW1wb3J0LmRydgorKyMJaWYgZGlmZiAtciBwcGQgcHBkMiA+L2Rldi9udWxsOyB0aGVuIFwKKysjCQllY2hvIFBQRCBpbXBvcnQgT0s7IFwKKysjCWVsc2UgXAorKyMJCWVjaG8gUFBEIGltcG9ydCBGQUlMRUQ7IFwKKysjCQlleGl0IDE7IFwKKysjCWZpCisgCisgCisgIwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMucGF0aCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzLnBhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU4Y2M1NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzLnBhdGgKQEAgLTAsMCArMSw4IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPUNVUFMgUHJpbnRlciBTZXJ2aWNlIFNwb29sCisKK1tQYXRoXQorUGF0aEV4aXN0c0dsb2I9L3Zhci9zcG9vbC9jdXBzL2QqCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwcy5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkM2U4MzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwcy5zZXJ2aWNlCkBAIC0wLDAgKzEsMTAgQEAKK1tVbml0XQorRGVzY3JpcHRpb249Q1VQUyBQcmludGluZyBTZXJ2aWNlCisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0PUBTQklORElSQC9jdXBzZCAtZgorUHJpdmF0ZVRtcD10cnVlCisKK1tJbnN0YWxsXQorQWxzbz1jdXBzLnNvY2tldCBjdXBzLnBhdGgKK1dhbnRlZEJ5PXByaW50ZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwcy5zb2NrZXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwcy5zb2NrZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxNDg3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzLnNvY2tldApAQCAtMCwwICsxLDggQEAKK1tVbml0XQorRGVzY3JpcHRpb249Q1VQUyBQcmludGluZyBTZXJ2aWNlIFNvY2tldHMKKworW1NvY2tldF0KK0xpc3RlblN0cmVhbT0vdmFyL3J1bi9jdXBzL2N1cHMuc29jaworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PXNvY2tldHMudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwc19zZXJ2ZXJiaW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwc19zZXJ2ZXJiaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdiNDRhNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzX3NlcnZlcmJpbi5wYXRjaApAQCAtMCwwICsxLDMyIEBACitNYWtlIENVUFNfU0VSVkVSQklOIHJlbGF0aXZlIHRvIGxpYmRpciBvdGhlcndpc2Ugb24gNjRiaXQgYXJjaGVzCitlLmcuIHBwYzY0IHdoZXJlIGJhc2UgbGliZGlyIGlzIGxpYjY0IHRoaXMgZG9lcyBub3QgZ28gd2VsbAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWcgc3BlY2lmaWNdCisKK0luZGV4OiBjdXBzLTEuNC42L2NvbmZpZy1zY3JpcHRzL2N1cHMtZGlyZWN0b3JpZXMubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjdXBzLTEuNC42Lm9yaWcvY29uZmlnLXNjcmlwdHMvY3Vwcy1kaXJlY3Rvcmllcy5tNAkyMDA5LTA0LTEyIDE2OjA0OjUxLjAwMDAwMDAwMCAtMDcwMAorKysrIGN1cHMtMS40LjYvY29uZmlnLXNjcmlwdHMvY3Vwcy1kaXJlY3Rvcmllcy5tNAkyMDEyLTA3LTIxIDEyOjEyOjA1Ljg5NjQwNTkyMyAtMDcwMAorQEAgLTM5Nyw3ICszOTcsNyBAQAorIAkqKQorIAkJIyBBbGwgb3RoZXJzCisgCQlJTlNUQUxMX1NZU1Y9Imluc3RhbGwtc3lzdiIKKy0JCUNVUFNfU0VSVkVSQklOPSIkZXhlY19wcmVmaXgvbGliL2N1cHMiCisrCQlDVVBTX1NFUlZFUkJJTj0iJGxpYmRpci9jdXBzIgorIAkJOzsKKyBlc2FjCisgCitJbmRleDogY3Vwcy0xLjQuNi9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjdXBzLTEuNC42Lm9yaWcvY29uZmlndXJlCTIwMTItMDctMjEgMTI6MTM6MzQuNTEyNDA1OTUwIC0wNzAwCisrKysgY3Vwcy0xLjQuNi9jb25maWd1cmUJMjAxMi0wNy0yMSAxMjoxNDowNS43MjQ0MDYwMTcgLTA3MDAKK0BAIC0xMTE4MSw3ICsxMTE4MSw3IEBACisgCSopCisgCQkjIEFsbCBvdGhlcnMKKyAJCUlOU1RBTExfU1lTVj0iaW5zdGFsbC1zeXN2IgorLQkJQ1VQU19TRVJWRVJCSU49IiRleGVjX3ByZWZpeC9saWIvY3VwcyIKKysJCUNVUFNfU0VSVkVSQklOPSIkbGliZGlyL2N1cHMiCisgCQk7OworIGVzYWMKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy91c2VfZWNob19vbmx5X2luX2luaXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvdXNlX2VjaG9fb25seV9pbl9pbml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NmYxMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvdXNlX2VjaG9fb25seV9pbl9pbml0LnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0luZGV4OiBjdXBzLTEuNi4xL3NjaGVkdWxlci9jdXBzLnNoLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY3Vwcy0xLjYuMS5vcmlnL3NjaGVkdWxlci9jdXBzLnNoLmluCisrKysgY3Vwcy0xLjYuMS9zY2hlZHVsZXIvY3Vwcy5zaC5pbgorQEAgLTY3LDcgKzY3LDcgQEAgY2FzZSAiYHVuYW1lYCIgaW4KKyAJCUVDSE9fRVJST1I9OgorIAkJOzsKKyAKKy0JTGludXgqKQorKwlEaXNhYmxlTGludXgqKQorIAkJSVNfT049L2Jpbi90cnVlCisgCQlpZiB0ZXN0IC1mIC9ldGMvaW5pdC5kL2Z1bmN0aW9uczsgdGhlbgorIAkJCS4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHNfMi4wLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHNfMi4wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkNzNiMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwc18yLjAuNC5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgY3Vwcy5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTZjNWEzNTA1OTZmYmEwMjc1NGJkOTZlYjZkZjNhZmQwIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjVjODQ3ZDlhNGZhYzZjNGM2NmZiMDUyNmE3YWZhYWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTFkNWU2OGQ5ZjI0ZmFjYTMxN2FlYWViYzE2NGMzNDEwMjgxM2JjMGYxZDY5YzAwYjNhNTliNDljNDlmNGFiZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N3YXV0b21hY3Jvcy9jd2F1dG9tYWNyb3NfMjAxMTAyMDEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jd2F1dG9tYWNyb3MvY3dhdXRvbWFjcm9zXzIwMTEwMjAxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZWEzY2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jd2F1dG9tYWNyb3MvY3dhdXRvbWFjcm9zXzIwMTEwMjAxLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiQ29sbGVjdGlvbiBvZiBhdXRvY29uZiBtNCBtYWNyb3MiCitTRUNUSU9OID0gImJhc2UiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2N3YXV0b21hY3Jvcy5iZXJsaW9zLyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LmJlcmxpb3MvJHtCUH0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIwNzRhZmNiNTBkMGE4YmZmMTA3ODZhMjk1NGIyYjAyZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzMTE1NjAzYjg5MWYzYTE2M2MwYmJiNWZlYTJmMzc0MjExM2ExODNmYTY3NDVlZTVlODllNWY2ZDBlOWY2MTIxIgorCitkb19jb25maWd1cmUoKSB7CisJOgorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgQ1dBVVRPTUFDUk9TUFJFRklYPSR7RH0ke3ByZWZpeH0gaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMi44LjEvZGlmZnV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMi44LjEvZGlmZnV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzA1ZDFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0yLjguMS9kaWZmdXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5hYzo5MDogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2FjbG9jYWwtMS4xMi9wcm90b3MubTQ6MTI6IEFNX0NfUFJPVE9UWVBFUyBpcyBleHBhbmRlZCBmcm9tLi4uCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpZmZ1dGlscy0yLjguMS1yNC9kaWZmdXRpbHMtMi44LjEvbTQvcHJlcmVxLm00OjExMDogam1fUFJFUkVRX1FVT1RFQVJHIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgY29uZmlndXJlLmFjOjkwOiB0aGUgdG9wIGxldmVsCit8IGF1dG9tNHRlOiBtNCBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wNAorCitJbmRleDogZGlmZnV0aWxzLTIuOC4xL200L3ByZXJlcS5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRpZmZ1dGlscy0yLjguMS5vcmlnL200L3ByZXJlcS5tNAorKysrIGRpZmZ1dGlscy0yLjguMS9tNC9wcmVyZXEubTQKK0BAIC0xMTUsNyArMTE1LDYgQEAgQUNfREVGVU4oW2ptX1BSRVJFUV9RVU9URUFSR10sCisgICBBQ19IRUFERVJfU1REQworICAgQUNfQ19CQUNLU0xBU0hfQQorICAgQUNfTUJTVEFURV9UCistICBBTV9DX1BST1RPVFlQRVMKKyBdKQorIAorIEFDX0RFRlVOKFtqbV9QUkVSRVFfUkVHRVhdLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy4zLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExYTRiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy4zLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2dudWxpYi5tayBiL2xpYi9nbnVsaWIubWsKK2luZGV4IGUxZDc0ZGIuLmMwZTkyZGQgMTAwNjQ0CistLS0gYS9saWIvZ251bGliLm1rCisrKysgYi9saWIvZ251bGliLm1rCitAQCAtMTg4Miw3ICsxODgyLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NWM1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTMuMy9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworbWFrZSAtQyB0ZXN0cyBjaGVjay1URVNUUwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDMzNDFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy5pbmMKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJEaWZmdXRpbHMgY29udGFpbnMgdG9vbHMgdXNlZCBmb3IgZmluZGluZyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGZpbGVzIgorREVTQ1JJUFRJT04gPSAiRGlmZnV0aWxzIGNvbnRhaW5zIHRoZSBHTlUgZGlmZiwgZGlmZjMsIFwKK3NkaWZmLCBhbmQgY21wIHV0aWxpdGllcy4gVGhlc2UgcHJvZ3JhbXMgYXJlIHVzdWFsbHkgXAordXNlZCBmb3IgY3JlYXRpbmcgcGF0Y2ggZmlsZXMuIgorU0VDVElPTiA9ICJiYXNlIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgZ2V0dGV4dAorCisjIGRpZmZ1dGlscyBhc3N1bWVzIG5vbi1nbGliYyBjb21waWxhdGlvbiB3aXRoIHVjbGliYyBhbmQKKyMgdGhpcyBjYXVzZXMgaXQgdG8gZ2VuZXJhdGUgaXRzIG93biBpbXBsZW1lbnRhdGlvbnMgb2YKKyMgc3RhbmRhcmQgZnVuY3Rpb25hbGl0eS4gIHJlZ2V4LmMgYWN0dWFsbHkgYnJlYWtzIGNvbXBpbGF0aW9uCisjIGJlY2F1c2UgaXQgdXNlcyBfX21lbXBjcHksIHRoZXJlIGFyZSBvdGhlciB0aGluZ3MgKFRCRDoKKyMgc2VlIGRpZmZ1dGlscy5tayBpbiBidWlsZHJvb3QpCitFWFRSQV9PRUNPTkZfbGliYy11Y2xpYmMgPSAiLS13aXRob3V0LWluY2x1ZGVkLXJlZ2V4IgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJkaWZmIGNtcCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18yLjguMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMi44LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0MjViYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMi44LjEuYmIKQEAgLTAsMCArMSwxNiBAQAorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworcmVxdWlyZSBkaWZmdXRpbHMuaW5jCisKK1BSID0gInI3LjAiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9kaWZmdXRpbHMvZGlmZnV0aWxzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9kaWZmdXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzFmOWM1YWUxOWI2MDYwOGY2YzdmMTYyZGE4NmE0MjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzUwMDE3NDhiMDY5MjI0ZGQ5OGJmMWJiOWVlODc3MzIxYzdkZThiMzMyYzhhYWQ1YWYzZTJhNzM3MmQyM2Y1YSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWNobW9kIHUrdyAke1N9L3BvL01ha2VmaWxlLmluLmluCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzMuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMy4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMDg2OTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzMuMy5iYgpAQCAtMCwwICsxLDM3IEBACitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCityZXF1aXJlIGRpZmZ1dGlscy5pbmMKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2RpZmZ1dGlscy9kaWZmdXRpbHMtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlic2lnc2Vndi1wcmVmaXgiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIE5lZWQgdG8gcmVtb3ZlIGdldHRleHQgbWFjcm9zIHdpdGggd2VpcmQgbWl4IG9mIHZlcnNpb25zCisJZm9yIGkgaW4gY29kZXNldC5tNCBnZXR0ZXh0X2dsLm00IGludGxtYWNvc3gubTQgaW50dHlwZXMtcHJpLm00IGxpYi1sZF9nbC5tNCBsaWItcHJlZml4X2dsLm00IHBvX2dsLm00IHNzaXplX3QubTQgd2NoYXJfdC5tNCB3aW50X3QubTQ7IGRvCisJCXJtIC1mICR7U30vbTQvJGkKKwlkb25lCit9CisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5OTE4MDIwOGVjMmE4MmNlNzFmNTViMGQ3Mzg5ZjFiMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMjVlODlhOGFiNjVmZGVkMTczMWU0MTg2YmUxYmIyNWNkYTk2NzgzNGI2ZGY5NzM1OTljZGNkNWFiZGZjMTljIgorCitpbmhlcml0IHB0ZXN0CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdD0ke0R9JHtQVEVTVF9QQVRIfQorCWluc3RhbGwgLUQgJHtTfS9idWlsZC1hdXgvdGVzdC1kcml2ZXIgJHQvYnVpbGQtYXV4L3Rlc3QtZHJpdmVyCisJY3AgLXIgJHtTfS90ZXN0cyAkdC8KKwlpbnN0YWxsICR7Qn0vdGVzdHMvTWFrZWZpbGUgJHQvdGVzdHMvCisJc2VkIC1lICdzfF5NYWtlZmlsZTp8X01ha2VmaWxlOnwnIFwKKwkgICAgLWUgJ3N8YmFzaHxzaHwnIFwKKwkgICAgLWUgJ3N8XnRvcF9zcmNkaXIgPSBcKC4qXCl8dG9wX3NyY2RpciA9IC4uXC98JyBcCisJICAgIC1lICdzfF5zcmNkaXIgPSBcKC4qXCl8c3JjZGlyID0gLnwnIFwKKwkgICAgLWUgJ3N8ImAkKGJ1aWx0X3Byb2dyYW1zKWAifGRpZmZ8JyBcCisJICAgIC1lICdzfGdhd2t8YXdrfGcnIFwKKwkgICAgLWkgJHQvdGVzdHMvTWFrZWZpbGUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2VkL2VkXzAuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2VkL2VkXzAuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDNlNjM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZWQvZWRfMC41LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiTGluZS1vcmllbnRlZCB0ZXh0IGVkaXRvciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9lZC8iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTZkZGQ1MzM1ZWY5NmZiODU4YTEzODIzMGFmNzczNzEwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21haW4uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTE3O21kNT0zNmQ0Yjg1ZTVhZTkwMjhlOTE4ZDFjYzc3NWMyNDc1ZSIKKworUFIgPSAicjIiCitTUkNfVVJJID0gIiR7U0FWQU5OQUhfR05VX01JUlJPUn0vZWQvZWQtJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gIjRlZTIxZTlkY2M5YjViNjAxMmMyMzAzODczNGUxNjMyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVkZWYyYmJkZTBmYmYwZDg4MjMyNzgyYTBlZGVkMzIzZjQ4M2EwNTE5ZDZmZGU5YTNiMTgwOTA1NmZkMzVmM2UiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VDT05GID0gIidDQz0ke0NDfScgJ0NYWD0ke0NYWH0nICdDRkxBR1M9JHtDRkxBR1N9JyAnQ1hYRkxBR1M9JHtDWFhGTEFHU30nICdDUFBGTEFHUz0ke0NQUEZMQUdTfScgJ0xERkxBR1M9JHtMREZMQUdTfSciCisKK0NPTkZJR1VSRU9QVFMgOj0gIiR7QGQuZ2V0VmFyKCdDT05GSUdVUkVPUFRTJywgVHJ1ZSkucmVwbGFjZSgnLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcnLCAnICcpfSIKK0NPTkZJR1VSRU9QVFMgOj0gIiR7QGQuZ2V0VmFyKCdDT05GSUdVUkVPUFRTJywgVHJ1ZSkucmVwbGFjZSgnLS1kaXNhYmxlLXNpbGVudC1ydWxlcycsICcgJyl9IgorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2VkL2VkXzEuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2VkL2VkXzEuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTk0ZWVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZWQvZWRfMS45LmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiTGluZS1vcmllbnRlZCB0ZXh0IGVkaXRvciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9lZC8iCisKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZWQuaDtlbmRsaW5lPTIwO21kNT0zNzVhMjBjYzI1NDVhYzExMTVlZWI3YjMyM2M2MGFlMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tYWluLmM7ZW5kbGluZT0xNzttZDU9MTRkYmIzMjVjMWYyZDRkYWY1MGUwYWE1YzUwMzhlOTYiCisKK1NFQ1RJT04gPSAiYmFzZSIKKworIyBMU0Igc3RhdGVzIHRoYXQgZWQgc2hvdWxkIGJlIGluIC9iaW4vCitiaW5kaXIgPSAiJHtiYXNlX2JpbmRpcn0iCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9lZC9lZC0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1NjViNmQxZDVhOWE4ODE2YjliMzA0ZmM0ZWQ5NDA1ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkNWIzNzJjZmFkZjA3MzAwMTgyMzc3MjI3MmZjZWFjMmNmYTg3NTUyYzVjZDVhOGVmYzFjOGFhZTYxZjQ1YTg4IgorCitpbmhlcml0IHRleGluZm8KKworZG9fY29uZmlndXJlKCkgeworCSR7U30vY29uZmlndXJlCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisJIyBJbmZvIGRpciBsaXN0aW5nIGlzbid0IGludGVyZXN0aW5nIGF0IHRoaXMgcG9pbnQgc28gcmVtb3ZlIGl0IGlmIGl0IGV4aXN0cy4KKwlpZiBbIC1lICIke0R9JHtpbmZvZGlyfS9kaXIiIF07IHRoZW4KKwkJcm0gLWYgJHtEfSR7aW5mb2Rpcn0vZGlyCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbC9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbC9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjY2MjY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZXRodG9vbC9ldGh0b29sL2F2b2lkX3BhcmFsbGVsX3Rlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK3B0ZXN0IG5lZWRzIGJ1aWxkdGVzdC1URVNUUyBhbmQgcnVudGVzdC1URVNUUyB0YXJnZXRzLgorc2VyaWFsLXRlc3RzIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRob3NlIHRhcmdldHMuCisKK1NpZ25lZC1vZmYtYnk6IFR1ZG9yIEZsb3JlYSA8dHVkb3IuZmxvcmVhQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisoZGVmYXVsdCBhdXRvbWFrZSBiZWhhdmlvciBpbmNvbXBhdGlibGUgd2l0aCBwdGVzdCkKKworZGlmZiAtcnVOIGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCistLS0gYS9jb25maWd1cmUuYWMJMjAxNC0wNS0yOCAxODoxOToxMy41MTM5ODA5NzcgKzAyMDAKKysrKyBiL2NvbmZpZ3VyZS5hYwkyMDE0LTA1LTI4IDE4OjE5OjIxLjEyOTY2MDIxNSArMDIwMAorQEAgLTIsNyArMiw3IEBACisgQUNfSU5JVChldGh0b29sLCAzLjE0LCBuZXRkZXZAdmdlci5rZXJuZWwub3JnKQorIEFDX1BSRVJFUSgyLjUyKQorIEFDX0NPTkZJR19TUkNESVIoW2V0aHRvb2wuY10pCistQU1fSU5JVF9BVVRPTUFLRShbZ251XSkKKytBTV9JTklUX0FVVE9NQUtFKFtnbnUgc2VyaWFsLXRlc3RzXSkKKyBBQ19DT05GSUdfSEVBREVSUyhbZXRodG9vbC1jb25maWcuaF0pCisgCisgQU1fTUFJTlRBSU5FUl9NT0RFCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2wvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZXRodG9vbC9ldGh0b29sL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTI0NWRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZXRodG9vbC9ldGh0b29sL3J1bi1wdGVzdApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorbWFrZSAtayBydW50ZXN0LVRFU1RTCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2xfNC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZXRodG9vbC9ldGh0b29sXzQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2YyYjFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZXRodG9vbC9ldGh0b29sXzQuMC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkRpc3BsYXkgb3IgY2hhbmdlIGV0aGVybmV0IGNhcmQgc2V0dGluZ3MiCitERVNDUklQVElPTiA9ICJBIHNtYWxsIHV0aWxpdHkgZm9yIGV4YW1pbmluZyBhbmQgdHVuaW5nIHRoZSBzZXR0aW5ncyBvZiB5b3VyIGV0aGVybmV0LWJhc2VkIG5ldHdvcmsgaW50ZXJmYWNlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL25ldHdvcmsvZXRodG9vbC8iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZXRodG9vbC5jO2JlZ2lubGluZT00O2VuZGxpbmU9MTc7bWQ1PWMxOWIzMDU0OGM1ODI1NzdmYzZiNDQzNjI2ZmMxMjE2IgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vc29mdHdhcmUvbmV0d29yay9ldGh0b29sL2V0aHRvb2wtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjBhMWM3ODc4N2M3ZGNmMDc3MDE2ZWQ4NjM3MmE0NzJmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUyMDA1MTY3MjdjYzk1ODNlOGI2M2ZkNmU3MmY2NjdmOWVkNDFiYjRmMDU3N2ZmNDgwM2I2MGM2NGNmZDFkYmMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0CitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSIKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgIG9lX3J1bm1ha2UgYnVpbGR0ZXN0LVRFU1RTCit9CisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworICAgY3AgJHtCfS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0KKyAgIGluc3RhbGwgJHtCfS90ZXN0LWNtZGxpbmUgICAgICAgICR7RH0ke1BURVNUX1BBVEh9CisgICBpbnN0YWxsICR7Qn0vdGVzdC1mZWF0dXJlcyAgICAgICAke0R9JHtQVEVTVF9QQVRIfQorICAgaW5zdGFsbCAke0J9L2V0aHRvb2wgICAgICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vZXRodG9vbAorICAgc2VkIC1pICdzL15NYWtlZmlsZS9fTWFrZWZpbGUvJyAgJHtEfSR7UFRFU1RfUEFUSH0vTWFrZWZpbGUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlscy1maXgtZG9jLWJ1aWxkLWVycm9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZmluZHV0aWxzLWZpeC1kb2MtYnVpbGQtZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA3NmU0NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlscy1maXgtZG9jLWJ1aWxkLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gMzNjYmEyNGNiYTdiMDk3M2E3MDJlOTYyN2JkNWI5Mzk2Mjk0OGFlNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE3IFNlcCAyMDEzIDE2OjExOjE2ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpbmR1dGlsczogZml4IGRvYyBidWlsZCBlcnJvcgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBkb2MvZmluZC50ZXhpIHwgICAgNiArKystLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RvYy9maW5kLnRleGkgYi9kb2MvZmluZC50ZXhpCitpbmRleCA1YjVmMGNmLi5iM2Q5YzZiIDEwMDY0NAorLS0tIGEvZG9jL2ZpbmQudGV4aQorKysrIGIvZG9jL2ZpbmQudGV4aQorQEAgLTYzLDcgKzYzLDcgQEAgdHJhbnNsYXRpb24gYXBwcm92ZWQgYnkgdGhlIEZvdW5kYXRpb24uCisKKyBAcGFnZQorIEB2c2tpcCAwcHQgcGx1cyAxZmlsbGwKKy1AaW5zZXJ0Y29weWluZ3t9CisrQGluc2VydGNvcHlpbmcKKyBAZW5kIHRpdGxlcGFnZQorCisgQGNvbnRlbnRzCitAQCAtMTQ2Niw2ICsxNDY2LDcgQEAgbm8gb3V0cHV0IGlzIGV2ZXIgc2VudCB0byBpdC4KKyAqIEVzY2FwZXM6OgorICogRm9ybWF0IERpcmVjdGl2ZXM6OgorICogVGltZSBGb3JtYXRzOjoKKysqIEZvcm1hdHRpbmcgRmxhZ3M6OgorIEBlbmQgbWVudQorCisgQG5vZGUgRXNjYXBlcworQEAgLTE1MzQsNyArMTUzNSw2IEBAIGZyb20gdGhlIG5vdmVsIHlvdSBhcmUgcmVhZGluZy4KKyAqIFNpemUgRGlyZWN0aXZlczo6CisgKiBMb2NhdGlvbiBEaXJlY3RpdmVzOjoKKyAqIFRpbWUgRGlyZWN0aXZlczo6CistKiBGb3JtYXR0aW5nIEZsYWdzOjoKKyBAZW5kIG1lbnUKKworIEBub2RlIE5hbWUgRGlyZWN0aXZlcworQEAgLTE3ODAsNyArMTc4MCw3IEBAIHNldHRpbmcgdGhlIFRaIGVudmlyb25tZW50IHZhcmlhYmxlKS4gIFRoaXMgaXMgYSBHTlUgZXh0ZW5zaW9uLgorIEBlbmQgdGFibGUKKworIEBub2RlIEZvcm1hdHRpbmcgRmxhZ3MKKy1Ac3Vic3Vic2VjdGlvbiBGb3JtYXR0aW5nIEZsYWdzCisrQHN1YnNlY3Rpb24gRm9ybWF0dGluZyBGbGFncworCisgVGhlIEBzYW1weyVtfSBhbmQgQHNhbXB7JWR9IGRpcmVjdGl2ZXMgc3VwcG9ydCB0aGUgQHNhbXB7I30sIEBzYW1wezB9CisgYW5kIEBzYW1weyt9IGZsYWdzLCBidXQgdGhlIG90aGVyIGRpcmVjdGl2ZXMgZG8gbm90LCBldmVuIGlmIHRoZXkKKy0tCisxLjcuNC4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLTQuMi4zMS9maW5kdXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMGRkYjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLTQuMi4zMS9maW5kdXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5pbjo3NTogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wNAorCitJbmRleDogZmluZHV0aWxzLTQuMi4zMS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBmaW5kdXRpbHMtNC4yLjMxLm9yaWcvY29uZmlndXJlLmluCisrKysgZmluZHV0aWxzLTQuMi4zMS9jb25maWd1cmUuaW4KK0BAIC03Miw3ICs3Miw2IEBAIGRubCBnbF9FQVJMWSBjYWxscyBBQ19HTlVfU09VUkNFIGFueXdheS4KKyAKKyAKKyBBQ19JU0NfUE9TSVgKKy1BTV9DX1BST1RPVFlQRVMKKyAKKyBBQ19QUk9HX0lOU1RBTEwKKyBBQ19QUk9HX1JBTkxJQgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZ251bGliLWV4dGVuc2lvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2dudWxpYi1leHRlbnNpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjViZDY0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2dudWxpYi1leHRlbnNpb24ucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKwordGhlIG9sZCBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgd29uJ3Qgd29yayB3aXRoIEFDX0dOVV9TT1VSQ0UKKworYWdhaW5zdCA0LjIuMzEKKzA3LzA4LzIwMTAgLSBxaGUKKworZGlmZiAtLWdpdCBhL2dudWxpYi9tNC9leHRlbnNpb25zLm00IGIvZ251bGliL200L2V4dGVuc2lvbnMubTQKK2luZGV4IDE0M2E5ZTUuLjBmMjdjZWIgMTAwNjQ0CistLS0gYS9nbnVsaWIvbTQvZXh0ZW5zaW9ucy5tNAorKysrIGIvZ251bGliL200L2V4dGVuc2lvbnMubTQKK0BAIC0xMiw0NCArMTIsNiBAQAorICMgZW5vdWdoIGluIHRoaXMgYXJlYSBpdCdzIGxpa2VseSB3ZSdsbCBuZWVkIHRvIHJlZGVmaW5lCisgIyBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgZm9yIHF1aXRlIHNvbWUgdGltZS4KKyAKKy0jIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorLSMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorLUFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorLVsKKy0gIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSkKKy0KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorLSAgQUNfUkVRVUlSRShbQUNfQUlYXSkKKy0gIEFDX1JFUVVJUkUoW0FDX01JTklYXSkKKy0KKy0gIEFIX1ZFUkJBVElNKFtfX0VYVEVOU0lPTlNfX10sCistWy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworLSNpZm5kZWYgX19FWFRFTlNJT05TX18KKy0jIHVuZGVmIF9fRVhURU5TSU9OU19fCistI2VuZGlmCistI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKy0jIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSNlbmRpZgorLSNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jIHVuZGVmIF9UQU5ERU1fU09VUkNFCistI2VuZGlmXSkKKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fXSwKKy0gICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fXSwKKy0gICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorLSAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKy0jCSAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKy0JICBBQ19JTkNMVURFU19ERUZBVUxUXSldLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzXSwKKy0gICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPW5vXSldKQorLSAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKy0gICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCistICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCistICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKy1dKQorLQorICMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3Yzg0Y2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLmluYwpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gImZpbmQsIGxvY2F0ZSwgYW5kIHhhcmdzIGJpbmFyaWVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSBGaW5kIFV0aWxpdGllcyBhcmUgdGhlIGJhc2ljIGRpcmVjdG9yeSBzZWFyY2hpbmcgdXRpbGl0aWVzIG9mIHRoZSBHTlUgb3BlcmF0aW5nIHN5c3RlbS4gXAorVGhlc2UgcHJvZ3JhbXMgYXJlIHR5cGljYWxseSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgcHJvZ3JhbXMgdG8gcHJvdmlkZSBtb2R1bGFyIGFuZCBwb3dlcmZ1bCBkaXJlY3RvcnkgXAorc2VhcmNoIGFuZCBmaWxlIGxvY2F0aW5nIGNhcGFiaWxpdGllcyB0byBvdGhlciBjb21tYW5kcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZmluZHV0aWxzLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NhdmFubmFoLmdudS5vcmcvYnVncy8/Z3JvdXA9ZmluZHV0aWxzIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCisKK1NSQ19VUkkgPSAiZnRwOi8vYWxwaGEuZ251Lm9yZy9nbnUvJHtCUE59LyR7QlB9LnRhci5neiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiZmluZCB4YXJncyIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworIyBkaWZmdXRpbHMgYXNzdW1lcyBub24tZ2xpYmMgY29tcGlsYXRpb24gd2l0aCB1Y2xpYmMgYW5kCisjIHRoaXMgY2F1c2VzIGl0IHRvIGdlbmVyYXRlIGl0cyBvd24gaW1wbGVtZW50YXRpb25zIG9mCisjIHN0YW5kYXJkIGZ1bmN0aW9uYWxpdHkuICByZWdleC5jIGFjdHVhbGx5IGJyZWFrcyBjb21waWxhdGlvbgorIyBiZWNhdXNlIGl0IHVzZXMgX19tZW1wY3B5LCB0aGVyZSBhcmUgb3RoZXIgdGhpbmdzIChUQkQ6CisjIHNlZSBkaWZmdXRpbHMubWsgaW4gYnVpbGRyb290KQorRVhUUkFfT0VDT05GX2xpYmMtdWNsaWJjID0gIi0td2l0aG91dC1pbmNsdWRlZC1yZWdleCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MjllMWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZmluZHV0aWxzLTQuNS4xNC9nbC9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBmaW5kdXRpbHMtNC41LjE0Lm9yaWcvZ2wvbGliL01ha2VmaWxlLmFtCisrKysgZmluZHV0aWxzLTQuNS4xNC9nbC9saWIvTWFrZWZpbGUuYW0KK0BAIC0xMjIwLDcgKzEyMjAsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlsc180LjIuMzEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzXzQuMi4zMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGVlMDE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlsc180LjIuMzEuYmIKQEAgLTAsMCArMSwxNCBAQAorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiIKK1BSID0gInI0IgorCityZXF1aXJlIGZpbmR1dGlscy5pbmMKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9LyR7QlBOfS8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZ251bGliLWV4dGVuc2lvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maW5kdXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbmR1dGlscy1maXgtZG9jLWJ1aWxkLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTBlMzFhMGYxOGE0OTcwOWJmNWE0NDk4NjdjODA0OWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTBkMzRiOGZhY2EwYjNjY2EwNzAzZjZjNmI0OThhZmJlNzJmMGJhMTZjMzU5ODBjMTBlYzllZjc3MjRkNjIwNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHNfNC41LjE0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlsc180LjUuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU4YTgyZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHNfNC41LjE0LmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgZmluZHV0aWxzLmluYworCisjIEdQTHYyKyAoPDwgNC4yLjMyKSwgR1BMdjMrICg+PSA0LjIuMzIpCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYyN2RlZmUxZTk2YzJlMWVjZDRlMGM5YmU4OTY3OTQ5IgorIAorREVQRU5EUyA9ICJiaXNvbi1uYXRpdmUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYThhODE3NjI4MmZkMjhlOGQxMjM0Yzg0ZDg0N2ZhNjYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGRlM2NmNjI1YTVjOWYxNTRlZWUzMTcxZTA3MjUxNWZmZGRlNDA1MjQ0ZGQwMDUwMmFmNjE3YWM1N2I3M2FlMiIKKworIyBodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz8yNzI5OQorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1wb3NpeC1jbGFuZy13Y2hhcicsICdnbF9jdl9mdW5jX3djd2lkdGhfd29ya3M9eWVzJywgJycsIGQpfSIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9wYXRoX1NPUlQ9JHtiaW5kaXJ9L3NvcnQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9mb29tYXRpYy9mb29tYXRpYy1maWx0ZXJzXzQuMC4xNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnNfNC4wLjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MGM5ODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9mb29tYXRpYy9mb29tYXRpYy1maWx0ZXJzXzQuMC4xNy5iYgpAQCAtMCwwICsxLDM3IEBACitTVU1NQVJZID0gIk9wZW5QcmludGluZyBwcmludGVyIHN1cHBvcnQgLSBmaWx0ZXJzIgorREVTQ1JJUFRJT04gPSAiRm9vbWF0aWMgaXMgYSBwcmludGVyIGRhdGFiYXNlIGRlc2lnbmVkIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNldCB1cCBcCitjb21tb24gcHJpbnRlcnMgZm9yIHVzZSB3aXRoIFVOSVgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtcy5cCitJdCBwcm92aWRlcyB0aGUgImdsdWUiIGJldHdlZW4gYSBwcmludCBzcG9vbGVyIChsaWtlIENVUFMgb3IgbHByKSBhbmQgXAordGhlIHByaW50ZXIsIGJ5IHByb2Nlc3NpbmcgZmlsZXMgc2VudCB0byB0aGUgcHJpbnRlci4gXAorIFwKK1RoaXMgcGFja2FnZSBjb25zaXN0cyBvZiBmaWx0ZXJzIHVzZWQgYnkgdGhlIHByaW50ZXIgc3Bvb2xlcnMgXAordG8gY29udmVydCB0aGUgaW5jb21pbmcgUG9zdFNjcmlwdCBkYXRhIGludG8gdGhlIHByaW50ZXIncyBuYXRpdmUgXAorZm9ybWF0IHVzaW5nIGEgcHJpbnRlci1zcGVjaWZpYywgYnV0IHNwb29sZXItaW5kZXBlbmRlbnQgUFBEIGZpbGUuIFwKKyIKKworREVQRU5EUyArPSAiY3VwcyBwZXJsIGxpYnhtbDIiCitQUiA9ICJyMSIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L2Zvb21hdGljLWZpbHRlcnMtJHtQVn0vQ09QWUlORzttZDU9MzkzYTVjYTQ0NWY2OTY1ODczZWNhMDI1OWExN2Y4MzMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5vcGVucHJpbnRpbmcub3JnL2Rvd25sb2FkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnMtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjA1ZjVkY2JmZTM1OWYxOThlZWYzZGY1YjI4M2Q4OTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTJlMmU1M2U1MDI1NzFlODhlZWI5MDEwYzQ1YTBkNTQ2NzFmMTU3MDdlZTEwNGY1YzljMjJiNTllYTdhMzNlMyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWZpbGUtY29udmVydGVyLWNoZWNrIC0td2l0aC1maWxlLWNvbnZlcnRlcj10ZXh0dG9wcyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgZXhwb3J0IFBFUkw9IiR7YmluZGlyfS9lbnYgcGVybCIKKyAgICBleHBvcnQgQ1VQU19TRVJWRVJCSU49JHtleGVjX3ByZWZpeH0vbGliL2N1cHMgICAgICAgIyAvdXNyL2xpYiBOT1QgbGliZGlyCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2xpbnV4c3RkYmFzZSgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2V4ZWNfcHJlZml4fS9saWIvY3Vwcy9maWx0ZXIKKyAgICBsbiAtc2YgJHtiaW5kaXJ9L2Zvb21hdGljLXJpcCAke0R9JHtleGVjX3ByZWZpeH0vbGliL2N1cHMvZmlsdGVyCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2V4ZWNfcHJlZml4fS9saWIvY3Vwcy8gJHtleGVjX3ByZWZpeH0vbGliL3Bwci8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stMy4xLjUvZ2F3ay0zLjEuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stMy4xLjUvZ2F3ay0zLjEuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNlNzk4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3ay0zLjEuNS9nYXdrLTMuMS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworYXV0b21ha2UgMS4xMiBoYXMgZGVwcmljYXRlZCBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0CisKK3RoaXMgcGF0Y2ggYXZvaWRzIHRoZXNlIGtpbmRzIG9mIGVycm9yczoKKworfCBjb25maWd1cmUuYWM6MTI3OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvYWNsb2NhbC0xLjEyL3Byb3Rvcy5tNDoxMjogQU1fQ19QUk9UT1RZUEVTIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgY29uZmlndXJlLmFjOjEyNzogdGhlIHRvcCBsZXZlbAorfCBhdXRvbTR0ZTogbTQgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKKy4uLgorfCBNYWtlZmlsZS5hbToyNzogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wNAorCitJbmRleDogZ2F3ay0zLjEuNS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnYXdrLTMuMS41Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZ2F3ay0zLjEuNS9jb25maWd1cmUuYWMKK0BAIC0xMjQsNyArMTI0LDYgQEAgZmkKKyAKKyBkbmwgY2hlY2sgZm9yIEMgY29tcGlsZXIgZm9yIGF1dG9tYWtlCisgQU1fUFJPR19DQ19TVERDCistQU1fQ19QUk9UT1RZUEVTCisgCisgZG5sIEN5Z3dpbiBkb2Vzbid0IGxpa2UgdG8gZ2V0IGxpYnMgd2l0aCBmdWxsIHBhdGhzCisgZG5sIHNpbmNlIHRoYXQgb3ZlcnJpZGVzIGxpbmtpbmcgYWdhaW5zdCBETExzLgorSW5kZXg6IGdhd2stMy4xLjUvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnYXdrLTMuMS41Lm9yaWcvTWFrZWZpbGUuYW0KKysrKyBnYXdrLTMuMS41L01ha2VmaWxlLmFtCitAQCAtMjQsNyArMjQsNyBAQAorICMjIHByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorIAorICMgQXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gaWYgbmVlZGVkLCBtYWtlIC5iejIgZmlsZXMgYWxzby4KKy1BVVRPTUFLRV9PUFRJT05TID0gYW5zaTJrbnIgZGlzdC1iemlwMgorK0FVVE9NQUtFX09QVElPTlMgPSBkaXN0LWJ6aXAyCisgCisgIyBUaGlzIHVuZG9jdW1lbnRlZCB2YXJpYWJsZSBpbnN1cmVzIHRoYXQgYWNsb2NhbCBydW5zCisgIyBjb3JyZWN0bHkgYWZ0ZXIgY2hhbmdpbmcgY29uZmlndXJlLmFjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stNC4xLjMvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrLTQuMS4zL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjNmMGJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrLTQuMS4zL3J1bi1wdGVzdApAQCAtMCwwICsxLDEwIEBACisjIS9iaW4vc2gKKworY2QgdGVzdAorZm9yIGkgaW4gYGdyZXAgLXZFICJAfF4kfCN8R3QtZHVtbXkiIE1ha2V0ZXN0cyB8YXdrIC1GOiAne3ByaW50ICQxfSdgOyBcCisgIGRvIExDX0FMTD0ke0dBV0tMT0NBTEU6LUN9IExBTkc9JHtHQVdLTE9DQUxFOi1DfSBzcmNkaXI9YHB3ZGAgQVdLPWdhd2sgQ01QPWNtcCBcCisgIG1ha2UgLWYgTWFrZXRlc3RzICRpID4kaS50bXAgMj4mMTsgXAorICBncmVwIC1xICJFcnJvciIgJGkudG1wOyBcCisgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbiBlY2hvICJGQUlMOiAkaSI7IFwKKyAgZWxzZSBlY2hvICJQQVNTOiAkaSI7IHJtIC1mICRpLnRtcDsgZmk7IFwKK2RvbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3a18zLjEuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3a18zLjEuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2FmNGE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrXzMuMS41LmJiCkBAIC0wLDAgKzEsNDIgQEAKK1NVTU1BUlkgPSAiR05VIGF3ayB0ZXh0IHByb2Nlc3NpbmcgdXRpbGl0eSIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgdmVyc2lvbiBvZiBhd2ssIGEgdGV4dCBwcm9jZXNzaW5nIHV0aWxpdHkuIFwKK0F3ayBpbnRlcnByZXRzIGEgc3BlY2lhbC1wdXJwb3NlIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIGRvIFwKK3F1aWNrIGFuZCBlYXN5IHRleHQgcGF0dGVybiBtYXRjaGluZyBhbmQgcmVmb3JtYXR0aW5nIGpvYnMuIgorSE9NRVBBR0UgPSAid3d3LmdudS5vcmcvc29mdHdhcmUvZ2F3ayIKK0JVR1RSQUNLRVIgID0gImJ1Zy1nYXdrQGdudS5vcmciCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKKyMgZ2F3ayA8PSAzLjEuNTogR1BMdjIKKyMgZ2F3ayA+PSAzLjEuNjogR1BMdjMKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiIKKworUkRFUEVORFNfZ2F3ayArPSAiZ2F3ay1jb21tb24iCitSREVQRU5EU19wZ2F3ayArPSAiZ2F3ay1jb21tb24iCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dhd2svZ2F3ay0ke1BWfS50YXIuZ3ogXAorCWZpbGU6Ly9nYXdrLTMuMS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ3NjAzMjU0ODk0NzljYWMxN2ZlMDExNGI4ZjYyZjMwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ2M2RjYjlkMGNhMzk4YjFkNGY1YTMzMmY2Y2Q5Y2VjNTY0NDEyNjVmY2E2MTZmMmVhMWI0NGQ0NTllOWYwZjgiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK1BBQ0tBR0VTICs9ICJnYXdrLWNvbW1vbiBwZ2F3ayIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L2dhd2sqICR7YmluZGlyfS9pZ2F3ayIKK0ZJTEVTX2dhd2stY29tbW9uICs9ICIke2RhdGFkaXJ9L2F3ay8qICR7bGliZGlyfS9nYXdrL2F3ay8qIgorRklMRVNfcGdhd2sgPSAiJHtiaW5kaXJ9L3BnYXdrKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2dhd2svYXdrLy5kZWJ1ZyIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiYXdrIgorQUxURVJOQVRJVkVfVEFSR0VUW2F3a10gPSAiJHtiaW5kaXJ9L2dhd2siCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0NGTEFHUyArPSAiLUQgUFJPVE9UWVBFUyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyByZW1vdmUgdGhlIGxpbmsgc2luY2Ugd2UgZG9uJ3QgcGFja2FnZSBpdAorCXJtICR7RH0ke2JpbmRpcn0vYXdrCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2tfNC4xLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2tfNC4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhODhlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3a180LjEuMy5iYgpAQCAtMCwwICsxLDQ3IEBACitTVU1NQVJZID0gIkdOVSBhd2sgdGV4dCBwcm9jZXNzaW5nIHV0aWxpdHkiCitERVNDUklQVElPTiA9ICJUaGUgR05VIHZlcnNpb24gb2YgYXdrLCBhIHRleHQgcHJvY2Vzc2luZyB1dGlsaXR5LiBcCitBd2sgaW50ZXJwcmV0cyBhIHNwZWNpYWwtcHVycG9zZSBwcm9ncmFtbWluZyBsYW5ndWFnZSB0byBkbyBcCitxdWljayBhbmQgZWFzeSB0ZXh0IHBhdHRlcm4gbWF0Y2hpbmcgYW5kIHJlZm9ybWF0dGluZyBqb2JzLiIKK0hPTUVQQUdFID0gImh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2F3ay8iCitCVUdUUkFDS0VSICA9ICJidWctZ2F3a0BnbnUub3JnIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCisjIGdhd2sgPD0gMy4xLjU6IEdQTHYyCisjIGdhd2sgPj0gMy4xLjY6IEdQTHYzCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK0RFUEVORFMgKz0gInJlYWRsaW5lIgorCitQQUNLQUdFQ09ORklHW21wZnJdID0gIi0td2l0aC1tcGZyLC0td2l0aG91dC1tcGZyLCBtcGZyIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2F3ay9nYXdrLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTVkMzdmNDA2OTUwMjY3N2YyNWQxMzQwZGY4ZWVjOTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTI0ZWZmYTViOWVjZDRlZDk0MGYyNTgxYzVkM2MxZGY0ZTRiZDdlNmY3NjhhYTAzM2MxOTE2ZjQ3ZGZjNmUyOSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYXdrIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59LyoubGEiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vYXdrLy5kZWJ1ZyIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiYXdrIgorQUxURVJOQVRJVkVfVEFSR0VUW2F3a10gPSAiJHtiaW5kaXJ9L2dhd2siCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgcmVtb3ZlIHRoZSBsaW5rIHNpbmNlIHdlIGRvbid0IHBhY2thZ2UgaXQKKwlybSAke0R9JHtiaW5kaXJ9L2F3aworfQorCitpbmhlcml0IHB0ZXN0CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJbWtkaXIgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCWZvciBpIGluIGBncmVwIC12RSAiQHxeJHwjfEd0LWR1bW15IiAke1N9L3Rlc3QvTWFrZXRlc3RzIHxhd2sgLUY6ICd7cHJpbnQgJDF9J2AgTWFrZXRlc3RzOyBcCisJICBkbyBjcCAke1N9L3Rlc3QvJGkqICR7RH0ke1BURVNUX1BBVEh9L3Rlc3Q7IFwKKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hYXJjaDY0L29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2FhcmNoNjQvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hYXJjaDY0L29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hcm0vb2JqYXJjaC5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvYXJtL29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODc3MmNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvYXJtL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hcm1lYi9vYmphcmNoLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hcm1lYi9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5MDk3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2FybWViL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9iYXNlLWdlbmh0LmMtYWRkLWEtcHJlcHJvY2Vzc29yLWRlZmluZS10by1hbGxvdy1mb3BlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvYmFzZS1nZW5odC5jLWFkZC1hLXByZXByb2Nlc3Nvci1kZWZpbmUtdG8tYWxsb3ctZm9wZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTdkNGVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvYmFzZS1nZW5odC5jLWFkZC1hLXByZXByb2Nlc3Nvci1kZWZpbmUtdG8tYWxsb3ctZm9wZS5wYXRjaApAQCAtMCwwICsxLDM2IEBACitiYXNlL2dlbmh0LmM6IGFkZCBhIHByZXByb2Nlc3NvciBkZWZpbmUgdG8gYWxsb3cgZm9wZW4gY2FsbGluZworCitUaGUgY29tbWl0IGluIHVwc3RyZWFtOgoraHR0cDovL2dpdC5naG9zdHNjcmlwdC5jb20vP3A9Z2hvc3RwZGwuZ2l0O2E9Y29tbWl0ZGlmZjtoPTc3M2M2OWU0NmU3MGJkZDU0ODI2NzY0MzdkYWZkMmNhODMzOTc2NDMKKworUmVwbGFjZSBhbGwgZm9wZW4gY2FsbHMgd2l0aCBncF9mb3BlbiBhbmQgYWRkIGEgcHJlcHJvY2Vzc29yIGRlZmluZSBzbwordGhhdCBhbnkgdW5pbnRlbnRpYWwgY2FsbHMgZGlyZWN0bHkgdG8gZm9wZW4gd2lsbCBjYXVzZSBhbiBlcnJvci4KKworT25seSBleGNlcHRpb25zIGFyZSB0aG9zZSBpbiB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgY29kZSwgYW5kIG1rcm9tZnMuYy4KK1RoaXMgcGF0Y2ggYWRkIGEgcHJlcHJvY2Vzc29yIGRlZmluZSB0byBhbGxvdyBmb3BlbiBjYWxsaW5nIGluIGJhc2UvZ2VuaHQuYy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJhc2UvZ2VuaHQuYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Jhc2UvZ2VuaHQuYyBiL2Jhc2UvZ2VuaHQuYworaW5kZXggNGIwNDA4NS4uY2M4MmZmZiAxMDA2NDQKKy0tLSBhL2Jhc2UvZ2VuaHQuYworKysrIGIvYmFzZS9nZW5odC5jCitAQCAtMTYsNiArMTYsMTAgQEAKKyAKKyAvKiBHZW5lcmF0ZSBDIGNvZGUgZm9yIGNvbXBpbGluZyBoYWxmdG9uZXMgaW50byBST00uICovCisgI2luY2x1ZGUgIm1hbGxvY18uaCIKKysKKysvKiBwcmV2ZW50IGdwLmggZnJvbSBkZWZpbmluZyBmb3BlbiAqLworKyNkZWZpbmUgZm9wZW4gZm9wZW4KKysKKyAjaW5jbHVkZSAic3RkaW9fLmgiCisgI2luY2x1ZGUgInN0cmluZ18uaCIKKyAjaW5jbHVkZSAiZ3NjZGVmcy5oIgorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2N1cHMtbm8tZ2NyeXB0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvY3Vwcy1uby1nY3J5cHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjOTM2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2N1cHMtbm8tZ2NyeXB0LnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1N1YmplY3Q6IFtQQVRDSF0gRG9uJ3QgYnVpbGQtZGVwZW5kIG9uIGxpYmdjcnlwdCwgYXMgbm90aGluZyBpcyB1c2VkIGZyb20gaXQKKworQmFja3BvcnRlZCBmcm9tIGh0dHA6Ly93d3cuY3Vwcy5vcmcvc3RyZmlsZXMucGhwLzMzMDgvY3Vwcy1uby1nY3J5cHQucGF0Y2gKKworVGhpcyBhZGRyZXNzZXMgdGhlIGNyeXRvIGRlcGVuZGVuY3kgc2VlbiBkdXJpbmcgYnVpbGQuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKworUmViYXNlIHRoZSBwYXRjaCB0byBnaG9zdHNjcmlwdC05LjE1CitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjdXBzL2xpYnMvY3Vwcy9odHRwLXByaXZhdGUuaCB8IDEgLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jdXBzL2xpYnMvY3Vwcy9odHRwLXByaXZhdGUuaCBiL2N1cHMvbGlicy9jdXBzL2h0dHAtcHJpdmF0ZS5oCitpbmRleCA5OWE4NWMzLi5hNjc0ODUyIDEwMDY0NAorLS0tIGEvY3Vwcy9saWJzL2N1cHMvaHR0cC1wcml2YXRlLmgKKysrKyBiL2N1cHMvbGlicy9jdXBzL2h0dHAtcHJpdmF0ZS5oCitAQCAtODAsNyArODAsNiBAQCB0eXBlZGVmIGludCBzb2NrbGVuX3Q7CisgIyAgZWxpZiBkZWZpbmVkIEhBVkVfR05VVExTCisgIyAgICBpbmNsdWRlIDxnbnV0bHMvZ251dGxzLmg+CisgIyAgICBpbmNsdWRlIDxnbnV0bHMveDUwOS5oPgorLSMgICAgaW5jbHVkZSA8Z2NyeXB0Lmg+CisgIyAgZWxpZiBkZWZpbmVkKEhBVkVfQ0RTQVNTTCkKKyAjICAgIGluY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisgIyAgICBpbmNsdWRlIDxTZWN1cml0eS9TZWN1cml0eS5oPgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjAyLWdlbmFyY2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjAyLWdlbmFyY2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI4YTk0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMDItZ2VuYXJjaC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitJbXBvcnQgcGF0Y2ggZnJvbSB3aW5kcml2ZXIgbGludXggZm9yIGNyb3NzIGNvbXBpbGF0aW9uLCBhbmQgc3BsaXQgcGF0Y2hlcworaW50byBvZSB3YXkgdW5kZXIgZGlmZmVyZW50IGRpcmVjdG9yaWVzIHN1Y2ggYXMgaTU4NiwgcG93ZXJwYyBldGMgYWNjb3JkaW5nIAordG8gUmljaGFyZCdzIG9waW5pb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYW5nIEthaSA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorCisjIEF1dGhvcjogQ2hpIFh1IDxjaGkueHVAd2luZHJpdmVyLmNvbT4KKyMgRGF0ZTogRmViIDI2IDIwMTAKKyMgU3VtbWFyeTogR2VuZXJhdGUgYXJjaC5oIGZvciBwcGMzMgorIworCitkaWZmIC1OcnUgZ2hvc3RzY3JpcHQtOC42NC5vcmlnL2Jhc2UvbGliLm1hayBnaG9zdHNjcmlwdC04LjY0L2Jhc2UvbGliLm1haworLS0tIGdob3N0c2NyaXB0LTguNjQub3JpZy9iYXNlL2xpYi5tYWsJMjAxMC0wMi0xMCAxMDozMDowMi4wMDAwMDAwMDAgKzA4MDAKKysrKyBnaG9zdHNjcmlwdC04LjY0L2Jhc2UvbGliLm1hawkyMDEwLTAyLTEwIDEwOjU2OjIxLjAwMDAwMDAwMCArMDgwMAorQEAgLTY3LDggKzY3LDggQEAKKyBzdGRwcmVfaD0kKEdMU1JDKXN0ZHByZS5oICQoc3RkcG5faCkKKyBzdGRpbnRfX2g9JChHTFNSQylzdGRpbnRfLmggJChzdGRfaCkKKyAKKy0kKEdMR0VOKWFyY2guaCA6ICQoR0VOQVJDSF9YRSkKKy0JJChFWFApJChHRU5BUkNIX1hFKSAkKEdMR0VOKWFyY2guaCAkKFRBUkdFVF9BUkNIX0ZJTEUpCisrIyMkKEdMR0VOKWFyY2guaCA6ICQoR0VOQVJDSF9YRSkKKysjIwkkKEVYUCkkKEdFTkFSQ0hfWEUpICQoR0xHRU4pYXJjaC5oICQoVEFSR0VUX0FSQ0hfRklMRSkKKyAKKyAjIFBsYXRmb3JtIGludGVyZmFjZXMKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMDItcHJldmVudF9yZWNvbXBpbGluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMDItcHJldmVudF9yZWNvbXBpbGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzI5YmU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4wMi1wcmV2ZW50X3JlY29tcGlsaW5nLnBhdGNoCkBAIC0wLDAgKzEsMTAwIEBACit1c3QgdXNlIGNvbW1hbmRzIHByb3ZpZGVkIGJ5IGdob3N0c2NyaXB0LW5hdGl2ZSwgcHJldmVudGluZyByZWNvbXBpbGUgdGhlbSB3aGVuCitjb21waWxlIGdob3N0c2NyaXB0LgorV2F5IHRvIGVuYWJsZSBjcm9zcyBjb21waWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FuZyBLYWkgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2Jhc2UvdW5peC1hdXgubWFrIGIvYmFzZS91bml4LWF1eC5tYWsKK2luZGV4IGE5MWZiMjYuLmM5OTFkMTEgMTAwNjQ0CistLS0gYS9iYXNlL3VuaXgtYXV4Lm1haworKysrIGIvYmFzZS91bml4LWF1eC5tYWsKK0BAIC02OSw0NiArNjksNDYgQEAgJChHTE9CSilncF9zeXN2LiQoT0JKKTogJChHTFNSQylncF9zeXN2LmMgJChzdGRpb19faCkgJCh0aW1lX19oKSAkKEFLKVwKKyAgJChNQUtFRElSUykKKyAJJChHTENDKSAkKEdMT18pZ3Bfc3lzdi4kKE9CSikgJChDXykgJChHTFNSQylncF9zeXN2LmMKKyAKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEF1eGlsaWFyeSBwcm9ncmFtcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworLQorLSQoRUNIT0dTX1hFKTogJChHTFNSQyllY2hvZ3MuYyAkKEFLKSAkKHN0ZHByZV9oKSAkKE1BS0VESVJTKQorLQkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChFQ0hPR1NfWEUpICQoR0xTUkMpZWNob2dzLmMgJChBVVhFWFRSQUxJQlMpCistCistIyBPbiB0aGUgUlMvNjAwMCAoYXQgbGVhc3QpLCBjb21waWxpbmcgZ2VuYXJjaC5jIHdpdGggZ2NjIHdpdGggLU8KKy0jIHByb2R1Y2VzIGEgYnVnZ3kgZXhlY3V0YWJsZS4KKy0kKEdFTkFSQ0hfWEUpOiAkKEdMU1JDKWdlbmFyY2guYyAkKEFLKSAkKEdFTkFSQ0hfREVQUykgJChNQUtFRElSUykKKy0JJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOQVJDSF9YRSkgJChHTFNSQylnZW5hcmNoLmMgJChBVVhFWFRSQUxJQlMpCistCistJChHRU5DT05GX1hFKTogJChHTFNSQylnZW5jb25mLmMgJChBSykgJChHRU5DT05GX0RFUFMpICQoTUFLRURJUlMpCistCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkNPTkZfWEUpICQoR0xTUkMpZ2VuY29uZi5jICQoQVVYRVhUUkFMSUJTKQorLQorLSQoR0VOREVWX1hFKTogJChHTFNSQylnZW5kZXYuYyAkKEFLKSAkKEdFTkRFVl9ERVBTKSAkKE1BS0VESVJTKQorLQkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5ERVZfWEUpICQoR0xTUkMpZ2VuZGV2LmMgJChBVVhFWFRSQUxJQlMpCistCistJChHRU5IVF9YRSk6ICQoR0xTUkMpZ2VuaHQuYyAkKEFLKSAkKEdFTkhUX0RFUFMpICQoTUFLRURJUlMpCistCSQoQ0NBVVhfKSAkKEdFTkhUX0NGTEFHUykgJChPXykkKEdFTkhUX1hFKSAkKEdMU1JDKWdlbmh0LmMgJChBVVhFWFRSQUxJQlMpCistCistIyBUbyBnZXQgR1MgdG8gdXNlIHRoZSBzeXN0ZW0gemxpYiwgeW91IHJlbW92ZS9oaWRlIHRoZSBncy96bGliIGRpcmVjdG9yeQorLSMgd2hpY2ggbWVhbnMgdGhhdCB0aGUgbWtyb21mcyBidWlsZCBjYW4ndCBmaW5kIHRoZSB6bGliIHNvdXJjZSBpdCBuZWVkcy4KKy0jIFNvIGl0J3Mgc3BsaXQgaW50byB0d28gdGFyZ2V0cywgb25lIHVzaW5nIHRoZSB6bGliIHNvdXJjZSBkaXJlY3RseS4uLi4uCistTUtST01GU19PQkpTXzA9JChNS1JPTUZTX1pMSUJfT0JKUykgJChBVVgpZ3BtaXNjLiQoT0JKKSAkKEFVWClncF9nZXRudi4kKE9CSikgXAorLSAkKEFVWClnc2NkZWZzLiQoT0JKKSAkKEFVWClncF91bml4LiQoT0JKKSAkKEFVWClncF91bmlmcy4kKE9CSikgJChBVVgpZ3BfdW5pZm4uJChPQkopIFwKKy0gJChBVVgpZ3Bfc3RkaWEuJChPQkopICQoQVVYKWdzdXRpbC4kKE9CSikgJChBVVgpbWVtZW50by4kKE9CSikKKy0KKy0kKE1LUk9NRlNfWEUpXzA6ICQoR0xTUkMpbWtyb21mcy5jICQoTUtST01GU19DT01NT05fREVQUykgJChNS1JPTUZTX09CSlNfMCkgJChNQUtFRElSUykKKy0JJChDQ0FVWF8pICQoR0VOT1BUKSAkKENGTEFHUykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoSV8pJChHTE9CSikkKF9JKSAkKElfKSQoWlNSQ0RJUikkKF9JKSAkKEdMU1JDKW1rcm9tZnMuYyAkKE9fKSQoTUtST01GU19YRSlfMCAkKE1LUk9NRlNfT0JKU18wKSAkKEFVWEVYVFJBTElCUykKKy0KKy0jIC4uLi4gYW5kIG9uZSB1c2luZyB0aGUgemxpYiBsaWJyYXJ5IGxpbmtlZCB2aWEgdGhlIGNvbW1hbmQgbGluZQorLU1LUk9NRlNfT0JKU18xPSQoQVVYKWdzY2RlZnMuJChPQkopIFwKKy0gJChBVVgpZ3BtaXNjLiQoT0JKKSAkKEFVWClncF9nZXRudi4kKE9CSikgXAorLSAkKEFVWClncF91bml4LiQoT0JKKSAkKEFVWClncF91bmlmcy4kKE9CSikgJChBVVgpZ3BfdW5pZm4uJChPQkopIFwKKy0gJChBVVgpZ3Bfc3RkaWEuJChPQkopICQoQVVYKWdzdXRpbC4kKE9CSikKKy0KKy0kKE1LUk9NRlNfWEUpXzE6ICQoR0xTUkMpbWtyb21mcy5jICQoTUtST01GU19DT01NT05fREVQUykgJChNS1JPTUZTX09CSlNfMSkgJChNQUtFRElSUykKKy0JJChDQ0FVWF8pICQoR0VOT1BUKSAkKENGTEFHUykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoSV8pJChHTE9CSikkKF9JKSAkKElfKSQoWlNSQ0RJUikkKF9JKSAkKEdMU1JDKW1rcm9tZnMuYyAkKE9fKSQoTUtST01GU19YRSlfMSAkKE1LUk9NRlNfT0JKU18xKSAkKEFVWEVYVFJBTElCUykKKy0KKy0kKE1LUk9NRlNfWEUpOiAkKE1LUk9NRlNfWEUpXyQoU0hBUkVfWkxJQikgJChNQUtFRElSUykKKy0JJChDUF8pICQoTUtST01GU19YRSlfJChTSEFSRV9aTElCKSAkKE1LUk9NRlNfWEUpCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXV4aWxpYXJ5IHByb2dyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisrIworKyMkKEVDSE9HU19YRSk6ICQoR0xTUkMpZWNob2dzLmMgJChBSykgJChzdGRwcmVfaCkgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEVDSE9HU19YRSkgJChHTFNSQyllY2hvZ3MuYyAkKEFVWEVYVFJBTElCUykKKysjCisrIyMgT24gdGhlIFJTLzYwMDAgKGF0IGxlYXN0KSwgY29tcGlsaW5nIGdlbmFyY2guYyB3aXRoIGdjYyB3aXRoIC1PCisrIyMgcHJvZHVjZXMgYSBidWdneSBleGVjdXRhYmxlLgorKyMkKEdFTkFSQ0hfWEUpOiAkKEdMU1JDKWdlbmFyY2guYyAkKEFLKSAkKEdFTkFSQ0hfREVQUykgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkFSQ0hfWEUpICQoR0xTUkMpZ2VuYXJjaC5jICQoQVVYRVhUUkFMSUJTKQorKyMKKysjJChHRU5DT05GX1hFKTogJChHTFNSQylnZW5jb25mLmMgJChBSykgJChHRU5DT05GX0RFUFMpICQoTUFLRURJUlMpCisrIwkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5DT05GX1hFKSAkKEdMU1JDKWdlbmNvbmYuYyAkKEFVWEVYVFJBTElCUykKKysjCisrIyQoR0VOREVWX1hFKTogJChHTFNSQylnZW5kZXYuYyAkKEFLKSAkKEdFTkRFVl9ERVBTKSAkKE1BS0VESVJTKQorKyMJJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOREVWX1hFKSAkKEdMU1JDKWdlbmRldi5jICQoQVVYRVhUUkFMSUJTKQorKyMKKysjJChHRU5IVF9YRSk6ICQoR0xTUkMpZ2VuaHQuYyAkKEFLKSAkKEdFTkhUX0RFUFMpICQoTUFLRURJUlMpCisrIwkkKENDQVVYXykgJChHRU5IVF9DRkxBR1MpICQoT18pJChHRU5IVF9YRSkgJChHTFNSQylnZW5odC5jICQoQVVYRVhUUkFMSUJTKQorKyMKKysjIyBUbyBnZXQgR1MgdG8gdXNlIHRoZSBzeXN0ZW0gemxpYiwgeW91IHJlbW92ZS9oaWRlIHRoZSBncy96bGliIGRpcmVjdG9yeQorKyMjIHdoaWNoIG1lYW5zIHRoYXQgdGhlIG1rcm9tZnMgYnVpbGQgY2FuJ3QgZmluZCB0aGUgemxpYiBzb3VyY2UgaXQgbmVlZHMuCisrIyMgU28gaXQncyBzcGxpdCBpbnRvIHR3byB0YXJnZXRzLCBvbmUgdXNpbmcgdGhlIHpsaWIgc291cmNlIGRpcmVjdGx5Li4uLi4KKysjTUtST01GU19PQkpTXzA9JChNS1JPTUZTX1pMSUJfT0JKUykgJChBVVgpZ3BtaXNjLiQoT0JKKSAkKEFVWClncF9nZXRudi4kKE9CSikgXAorKyMgJChBVVgpZ3NjZGVmcy4kKE9CSikgJChBVVgpZ3BfdW5peC4kKE9CSikgJChBVVgpZ3BfdW5pZnMuJChPQkopICQoQVVYKWdwX3VuaWZuLiQoT0JKKSBcCisrIyAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKSAkKEFVWCltZW1lbnRvLiQoT0JKKQorKyMKKysjJChNS1JPTUZTX1hFKV8wOiAkKEdMU1JDKW1rcm9tZnMuYyAkKE1LUk9NRlNfQ09NTU9OX0RFUFMpICQoTUtST01GU19PQkpTXzApICQoTUFLRURJUlMpCisrIwkkKENDQVVYXykgJChHRU5PUFQpICQoQ0ZMQUdTKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8wICQoTUtST01GU19PQkpTXzApICQoQVVYRVhUUkFMSUJTKQorKyMKKysjIyAuLi4uIGFuZCBvbmUgdXNpbmcgdGhlIHpsaWIgbGlicmFyeSBsaW5rZWQgdmlhIHRoZSBjb21tYW5kIGxpbmUKKysjTUtST01GU19PQkpTXzE9JChBVVgpZ3NjZGVmcy4kKE9CSikgXAorKyMgJChBVVgpZ3BtaXNjLiQoT0JKKSAkKEFVWClncF9nZXRudi4kKE9CSikgXAorKyMgJChBVVgpZ3BfdW5peC4kKE9CSikgJChBVVgpZ3BfdW5pZnMuJChPQkopICQoQVVYKWdwX3VuaWZuLiQoT0JKKSBcCisrIyAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKQorKyMKKysjJChNS1JPTUZTX1hFKV8xOiAkKEdMU1JDKW1rcm9tZnMuYyAkKE1LUk9NRlNfQ09NTU9OX0RFUFMpICQoTUtST01GU19PQkpTXzEpICQoTUFLRURJUlMpCisrIwkkKENDQVVYXykgJChHRU5PUFQpICQoQ0ZMQUdTKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8xICQoTUtST01GU19PQkpTXzEpICQoQVVYRVhUUkFMSUJTKQorKyMKKysjJChNS1JPTUZTX1hFKTogJChNS1JPTUZTX1hFKV8kKFNIQVJFX1pMSUIpICQoTUFLRURJUlMpCisrIwkkKENQXykgJChNS1JPTUZTX1hFKV8kKFNIQVJFX1pMSUIpICQoTUtST01GU19YRSkKKyAKKyAjIFF1ZXJ5IHRoZSBlbnZpcm9ubWVudCB0byBjb25zdHJ1Y3QgZ2NvbmZpZ18uaC4KKyAjIFRoZXNlIGFyZSBhbGwgZGVmaW5lZCBjb25kaXRpb25hbGx5IChleGNlcHQgdGhlIEphc1BFUiBvbmUpLCBzbyB0aGF0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjE1LXBhcmFsbGVsLW1ha2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjE1LXBhcmFsbGVsLW1ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk3Yjg5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMTUtcGFyYWxsZWwtbWFrZS5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIGJlMWUxYjMzMTkxYWZkY2ZlM2MyZWNjNGZmM2UzNjFhNTg1OWU5YzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMzAgSmFuIDIwMTUgMDA6NDA6MjIgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29udHJpYi5tYWs6IGZpeCBmb3IgcGFyYWxsZWwgYnVpbGQKKworRml4ZWQ6CitybTogY2Fubm90IHJlbW92ZSBgL3Vzci9zaGFyZS9naG9zdHNjcmlwdC85LjE1L2xpYic6IElzIGEgZGlyZWN0b3J5CisKK0NyZWF0ZSBsaWIgYmVmb3JlIGluc3RhbGwgdG8gZml4IHRoZSByYWNlIGlzc3VlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb250cmliL2NvbnRyaWIubWFrIHwgICAgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29udHJpYi5tYWsgYi9jb250cmliL2NvbnRyaWIubWFrCitpbmRleCAwOGE4MGQxLi5kZTJlMjBkIDEwMDY0NAorLS0tIGEvY29udHJpYi9jb250cmliLm1haworKysrIGIvY29udHJpYi9jb250cmliLm1haworQEAgLTk0Nyw2ICs5NDcsNyBAQCAkKERFVk9CSilkdmlwcmxpYi4kKE9CSikgOiAkKEpBUFNSQylkdmlwcmxpYi5jICQoSkFQU1JDKWR2aXBybGliLmgKKyAJJChERVZDQykgJChPXykkQCAkKENfKSAkKEpBUFNSQylkdmlwcmxpYi5jCisgCisgZXh0cmEtZG1wcnQtaW5zdGFsbDoKKysJbWtkaXIgLXAgJChERVNURElSKSQoZ3NkYXRhZGlyKSQoRClsaWIKKyAJJChJTlNUQUxMX0RBVEEpICQoSkFQU1JDKWRtcF9pbml0LnBzICQoREVTVERJUikkKGdzZGF0YWRpcikkKEQpbGliIHx8IGV4aXQgMQorIAkkKElOU1RBTExfREFUQSkgJChKQVBTUkMpZG1wX3NpdGUucHMgJChERVNURElSKSQoZ3NkYXRhZGlyKSQoRClsaWIgfHwgZXhpdCAxCisgCSQoSU5TVEFMTF9EQVRBKSAkKEpBUFNSQyllc2NwXzI0LnNyYyAkKERFU1RESVIpJChnc2RhdGFkaXIpJChEKWxpYiB8fCBleGl0IDEKK0BAIC0xMDg4LDYgKzEwODksNyBAQCAkKERFVk9CSilnZGV2YWxwcy4kKE9CSikgOiAkKEpBUFNSQylnZGV2YWxwcy5jICQoUERFVkgpCisgIyMjIC0tLS0tLS0tLS0tLS0tLS0tIEFkZGl0aW9uYWwgLnVwcCBmaWxlcyAtLS0tLS0tLS0tLS0tLS0tICMjIworIAorIGV4dHJhLXVwcC1pbnN0YWxsOgorKwlta2RpciAtcCAkKERFU1RESVIpJChnc2RhdGFkaXIpJChEKWxpYgorIAlmb3IgZiBpbiAkKENPTlRSSUJTUkMpdW5pcHJpbnQkKEQpKi51cHA7IGRvIFwKKyAJICAgICQoSU5TVEFMTF9EQVRBKSAkJGYgJChERVNURElSKSQoZ3NkYXRhZGlyKSQoRClsaWIgfHwgZXhpdCAxOyBcCisgCWRvbmUKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjE2LVdlcnJvci1yZXR1cm4tdHlwZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMTYtV2Vycm9yLXJldHVybi10eXBlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ODY0ODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjE2LVdlcnJvci1yZXR1cm4tdHlwZS5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDVkNWM4M2M4OWJlMGNmZjI5ZGRlMjI2N2ZhMTY4ZTZmNzE0NmJlOGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgNCBNYXkgMjAxNSAyMjozMTo0OCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBiYXNlL2dlbmRldi5jOiBmaXggZm9yIC1XZXJyb3I9cmV0dXJuLXR5cGUKKworRml4ZWQ6CitiYXNlL2dlbmRldi5jOjgwOjE6IGVycm9yOiByZXR1cm4gdHlwZSBkZWZhdWx0cyB0byAnaW50JyBbLVdlcnJvcj1yZXR1cm4tdHlwZV0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgYmFzZS9nZW5kZXYuYyB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvYmFzZS9nZW5kZXYuYyBiL2Jhc2UvZ2VuZGV2LmMKK2luZGV4IDY4YTc0NWYuLjgwNThiNWEgMTAwNjQ0CistLS0gYS9iYXNlL2dlbmRldi5jCisrKysgYi9iYXNlL2dlbmRldi5jCitAQCAtNzcsNiArNzcsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqaW5kZW50X2l0ZW0gPSAiIjsKKyAvKiBGb3J3YXJkIGRlZmluaXRpb25zICovCisgdm9pZCBhZGRfZW50cnkoY29uZmlnICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBib29sKTsKKyAKKytpbnQKKyBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworICAgICBjb25maWcgY29uZjsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC1uYXRpdmUtZml4LWRpc2FibGUtc3lzdGVtLWxpYnRpZmYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC1uYXRpdmUtZml4LWRpc2FibGUtc3lzdGVtLWxpYnRpZmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE1ODExNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LW5hdGl2ZS1maXgtZGlzYWJsZS1zeXN0ZW0tbGlidGlmZi5wYXRjaApAQCAtMCwwICsxLDM3IEBACitnaG9zdHNjcmlwdC1uYXRpdmU6Zml4IGRpc2FibGUtc3lzdGVtLWxpYnRpZmYKKworTW9kaWZ5IGNvbmZpZ3VyZSB0byBhZGQgdGhlIGNoZWNrIHRvIG1ha2Ugc3VyZQorZ2hvc3RzY3JpcCBjb3VsZCB3b3JrIHdoaWxlIHN5c3RlbS1saWJ0aWZmIGlzCitkaXNhYmxlZC4KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUuYWMgfCA1ICsrKysrCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEwNTUsNiArMTA1NSw3IEBAIERpc2FibGluZyB0aWZmIG91dHB1dCBkZXZpY2VzLl0pCisgZXNhYworIAorIGlmIHRlc3QgJFNIQVJFX0xJQlRJRkYgLWVxIDA7IHRoZW4KKysgICAgaWYgdGVzdCAtZSAkTElCVElGRkRJUi9jb25maWd1cmU7IHRoZW4KKyAgICAgICBlY2hvCisgICAgICAgZWNobyAiUnVubmluZyBsaWJ0aWZmIGNvbmZpZ3VyZSBzY3JpcHQuLi4iCisgICAgICAgb2xkZGlyPWBwd2RgCitAQCAtMTA2OSw2ICsxMDcwLDEwIEBAIGlmIHRlc3QgJFNIQVJFX0xJQlRJRkYgLWVxIDA7IHRoZW4KKyAgICAgICBjZCAiJG9sZGRpciIKKyAgICAgICBlY2hvCisgICAgICAgZWNobyAiQ29udGludWluZyB3aXRoIEdob3N0c2NyaXB0IGNvbmZpZ3VyYXRpb24uLi4iCisrICAgIGVsc2UKKysgICAgICBBQ19NU0dfTk9USUNFKFtDb3VsZCBub3QgZmluZCBsb2NhbCBjb3B5IG9mIGxpYnRpZmYuCisrRGlzYWJsaW5nIHRpZmYgb3V0cHV0IGRldmljZXMuXSkKKysgICAgZmkKKyBmaQorIAorIEFDX1NVQlNUKFNIQVJFX0xJQlRJRkYpCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvaTU4Ni9vYmphcmNoLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9pNTg2L29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODE3YjdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvaTU4Ni9vYmphcmNoLmgKQEAgLTAsMCArMSw0MSBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDQKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDAKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9pNjg2IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvaTY4NgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi44N2FhY2E1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvaTY4NgpAQCAtMCwwICsxIEBACitpNTg2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWViL29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pY3JvYmxhemVlYi9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMyMzJmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pY3JvYmxhemVlYi9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDQKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDEKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWVsL29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pY3JvYmxhemVlbC9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjODEwMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pY3JvYmxhemVlbC9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDQKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDAKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwcy9vYmphcmNoLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzL29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGI2MzdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwcy9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDgKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDEKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0L29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NC9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQwYTE2YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NC9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDgKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDMKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDEKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0ZWwvb2JqYXJjaC5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0ZWwvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzNjRlbC9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDgKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDMKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDAKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0ZWxuMzIvb2JqYXJjaC5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0ZWxuMzIvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzNjRlbG4zMi9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDgKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDMKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDAKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0bjMyL29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NG4zMi9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQwYTE2YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NG4zMi9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDgKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDMKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDEKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwc2VsL29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHNlbC9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlmOTBkZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHNlbC9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDgKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDAKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYy9vYmphcmNoLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9wb3dlcnBjL29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTkwOTdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYy9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDgKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDEKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYzY0L29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L3Bvd2VycGM2NC9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQwYTE2YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L3Bvd2VycGM2NC9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDgKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDMKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDEKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQveDg2LTY0L29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L3g4Ni02NC9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA1ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L3g4Ni02NC9vYmphcmNoLmgKQEAgLTAsMCArMSw0MCBAQAorLyogUGFyYW1ldGVycyBkZXJpdmVkIGZyb20gbWFjaGluZSBhbmQgY29tcGlsZXIgYXJjaGl0ZWN0dXJlLiAqLworLyogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkgZ2VuYXJjaC5jLiAqLworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfQUxJR05fU0hPUlRfTU9EIDIKKyNkZWZpbmUgQVJDSF9BTElHTl9JTlRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9MT05HX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fUFRSX01PRCA4CisjZGVmaW5lIEFSQ0hfQUxJR05fRkxPQVRfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9ET1VCTEVfTU9EIDgKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9DSEFSIDAKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9TSE9SVCAxCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfSU5UIDIKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HIDMKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9MT05HX0xPTkcgMworI2RlZmluZSBBUkNIX1NJWkVPRl9HWF9DT0xPUl9JTkRFWCA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX1BUUiA4CisjZGVmaW5lIEFSQ0hfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgQVJDSF9GTE9BVF9NQU5USVNTQV9CSVRTIDI0CisjZGVmaW5lIEFSQ0hfRE9VQkxFX01BTlRJU1NBX0JJVFMgNTMKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFVuc2lnbmVkIG1heCB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTUFYX1VDSEFSICgodW5zaWduZWQgY2hhcikweGZmICsgKHVuc2lnbmVkIGNoYXIpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVVNIT1JUICgodW5zaWduZWQgc2hvcnQpMHhmZmZmICsgKHVuc2lnbmVkIHNob3J0KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VJTlQgKCh1bnNpZ25lZCBpbnQpfjAgKyAodW5zaWduZWQgaW50KTApCisjZGVmaW5lIEFSQ0hfTUFYX1VMT05HICgodW5zaWduZWQgbG9uZyl+MEwgKyAodW5zaWduZWQgbG9uZykwKQorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gTWlzY2VsbGFuZW91cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9JU19CSUdfRU5ESUFOIDAKKyNkZWZpbmUgQVJDSF9QVFJTX0FSRV9TSUdORUQgMAorI2RlZmluZSBBUkNIX0ZMT0FUU19BUkVfSUVFRSAxCisjZGVmaW5lIEFSQ0hfQVJJVEhfUlNISUZUIDIKKyNkZWZpbmUgQVJDSF9ESVZfTkVHX1BPU19UUlVOQ0FURVMgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHRfOS4xNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0XzkuMTYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM0YWNjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0XzkuMTYuYmIKQEAgLTAsMCArMSwxMDMgQEAKK1NVTU1BUlkgPSAiVGhlIEdQTCBHaG9zdHNjcmlwdCBQb3N0U2NyaXB0L1BERiBpbnRlcnByZXRlciIKK0RFU0NSSVBUSU9OID0gIkdob3N0c2NyaXB0IGlzIHVzZWQgZm9yIFBvc3RTY3JpcHQvUERGIHByZXZpZXcgYW5kIHByaW50aW5nLiAgVXN1YWxseSBhcyBcCithIGJhY2stZW5kIHRvIGEgcHJvZ3JhbSBzdWNoIGFzIGdob3N0dmlldywgaXQgY2FuIGRpc3BsYXkgUG9zdFNjcmlwdCBhbmQgUERGIFwKK2RvY3VtZW50cyBpbiBhbiBYMTEgZW52aXJvbm1lbnQuIFwKK1wKK0Z1cnRoZXJtb3JlLCBpdCBjYW4gcmVuZGVyIFBvc3RTY3JpcHQgYW5kIFBERiBmaWxlcyBhcyBncmFwaGljcyB0byBiZSBwcmludGVkIFwKK29uIG5vbi1Qb3N0U2NyaXB0IHByaW50ZXJzLiBTdXBwb3J0ZWQgcHJpbnRlcnMgaW5jbHVkZSBjb21tb24gXAorZG90LW1hdHJpeCwgaW5ramV0IGFuZCBsYXNlciBtb2RlbHMuIFwKKyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ2hvc3RzY3JpcHQuY29tIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YjE3Y2VhNTQ3NDM0MzVhYjJhNTgxYzIzN2JlYTI5NGEiCisKK0RFUEVORFMgPSAiZ2hvc3RzY3JpcHQtbmF0aXZlIHRpZmYganBlZyBmb250Y29uZmlnIGN1cHMiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCisKK1NSQ19VUklfQkFTRSA9ICJodHRwOi8vZG93bmxvYWRzLmdob3N0c2NyaXB0LmNvbS9wdWJsaWMvZ2hvc3RzY3JpcHQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgICAgICBmaWxlOi8vZ2hvc3RzY3JpcHQtOS4xNS1wYXJhbGxlbC1tYWtlLnBhdGNoIFwKKyAgICAgICAgICAgICAgICBmaWxlOi8vZ2hvc3RzY3JpcHQtOS4xNi1XZXJyb3ItcmV0dXJuLXR5cGUucGF0Y2ggXAorIgorCitTUkNfVVJJID0gIiR7U1JDX1VSSV9CQVNFfSBcCisgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjAyLXByZXZlbnRfcmVjb21waWxpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2hvc3RzY3JpcHQtOS4wMi1nZW5hcmNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL29iamFyY2guaCBcCisgICAgICAgICAgIGZpbGU6Ly9jdXBzLW5vLWdjcnlwdC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSV9jbGFzcy1uYXRpdmUgPSAiJHtTUkNfVVJJX0JBU0V9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC1uYXRpdmUtZml4LWRpc2FibGUtc3lzdGVtLWxpYnRpZmYucGF0Y2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2Jhc2UtZ2VuaHQuYy1hZGQtYS1wcmVwcm9jZXNzb3ItZGVmaW5lLXRvLWFsbG93LWZvcGUucGF0Y2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODI5MzE5MzI1YmJkYjgzZjVjODEzNzlhOGY4NmYzOGYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzQ2ZDc3MjgwY2NhOGFmZGQzZDRjMmMxMzg5ZTMzMmVkOWIwNjA1YmQxMDdiY2FhZTFkNzYxYjA2MWQxYTY4ZCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC14IC0td2l0aC1zeXN0ZW0tbGlidGlmZiAtLXdpdGhvdXQtamJpZzJkZWMgXAorICAgICAgICAgICAgICAgIC0td2l0aC1mb250cGF0aD0ke2RhdGFkaXJ9L2ZvbnRzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtbGliaWRuIC0td2l0aC1jdXBzLXNlcnZlcmJpbj0ke2V4ZWNfcHJlZml4fS9saWIvY3VwcyBcCisgICAgICAgICAgICAgICAgLS13aXRoLWN1cHMtZGF0YWRpcj0ke2RhdGFkaXJ9L2N1cHMgXAorICAgICAgICAgICAgICAgICR7QGJhc2VfY29uZGl0aW9uYWwoJ1NJVEVJTkZPX0VORElBTk5FU1MnLCAnbGUnLCAnLS1lbmFibGUtbGl0dGxlLWVuZGlhbicsICctLWVuYWJsZS1iaWctZW5kaWFuJywgZCl9IFwKKyAgICAgICAgICAgICAgICAiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwcyA9ICIgLS13aXRoLWxhcmdlX2NvbG9yX2luZGV4PTAiCitFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHNlbCA9ICIgLS13aXRoLWxhcmdlX2NvbG9yX2luZGV4PTAiCisKKyMgRXhwbGljaXR5IGRpc2FibGUgbGlidGlmZiwgZm9udGNvbmZpZywKKyMgZnJlZXR5cGUsIGN1cHMgZm9yIGdob3N0c2NyaXB0LW5hdGl2ZQorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLXdpdGhvdXQteCAtLXdpdGgtc3lzdGVtLWxpYnRpZmY9bm8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtamJpZzJkZWMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtZm9udHBhdGg9JHtkYXRhZGlyfS9mb250cyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC1saWJpZG4gLS1kaXNhYmxlLWZvbnRjb25maWcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZnJlZXR5cGUgLS1kaXNhYmxlLWN1cHMiCisKKyMgVGhpcyBoYXMgYmVlbiBmaXhlZCB1cHN0cmVhbSBidXQgZm9yIG5vdyB3ZSBuZWVkIHRvIHN1YnZlcnQgdGhlIGNoZWNrIGZvciB0aW1lLmgKKyMgaHR0cDovL2J1Z3MuZ2hvc3RzY3JpcHQuY29tL3Nob3dfYnVnLmNnaT9pZD02OTI0NDMKKyMgaHR0cDovL2J1Z3MuZ2hvc3RzY3JpcHQuY29tL3Nob3dfYnVnLmNnaT9pZD02OTI0MjYKK0NGTEFHUyArPSAiLURIQVZFX1NZU19USU1FX0g9MSIKK0JVSUxEX0NGTEFHUyArPSAiLURIQVZFX1NZU19USU1FX0g9MSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCW1rZGlyIC1wIG9iagorCW1rZGlyIC1wIHNvb2JqCisJaWYgWyAtZSAke1dPUktESVJ9L29iamFyY2guaCBdOyB0aGVuCisJCWNwICR7V09SS0RJUn0vb2JqYXJjaC5oIG9iai9hcmNoLmgKKwlmaQorfQorCitkb19jb25maWd1cmVfYXBwZW5kICgpIHsKKwkjIGNvcHkgdG9vbHMgZnJvbSB0aGUgbmF0aXZlIGdob3N0c2NyaXB0IGJ1aWxkCisJaWYgWyAiJHtQTn0iICE9ICJnaG9zdHNjcmlwdC1uYXRpdmUiIF07IHRoZW4KKwkJbWtkaXIgLXAgb2JqL2F1eCBzb29iagorCQlmb3IgaSBpbiBnZW5hcmNoIGdlbmNvbmYgbWtyb21mcyBlY2hvZ3MgZ2VuZGV2IGdlbmh0OyBkbworCQkJY3AgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2dob3N0c2NyaXB0LSR7UFZ9LyRpIG9iai9hdXgvJGkKKwkJZG9uZQorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBta2RpciAtcCAke0R9JHtkYXRhZGlyfS9naG9zdHNjcmlwdC8ke1BWfS8KKyAgICBjcCAtciAke1N9L1Jlc291cmNlICR7RH0ke2RhdGFkaXJ9L2dob3N0c2NyaXB0LyR7UFZ9LworICAgIGNwIC1yICR7U30vaWNjcHJvZmlsZXMgJHtEfSR7ZGF0YWRpcn0vZ2hvc3RzY3JpcHQvJHtQVn0vCit9CisKK2RvX2NvbXBpbGVfY2xhc3MtbmF0aXZlICgpIHsKKyAgICBta2RpciAtcCBvYmoKKyAgICBmb3IgaSBpbiBnZW5hcmNoIGdlbmNvbmYgbWtyb21mcyBlY2hvZ3MgZ2VuZGV2IGdlbmh0OyBkbworICAgICAgICBvZV9ydW5tYWtlIG9iai9hdXgvJGkKKyAgICBkb25lCit9CisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vZ2hvc3RzY3JpcHQtJHtQVn0KKyAgICBmb3IgaSBpbiBnZW5hcmNoIGdlbmNvbmYgbWtyb21mcyBlY2hvZ3MgZ2VuZGV2IGdlbmh0OyBkbworICAgICAgICBpbnN0YWxsIC1tIDc1NSBvYmovYXV4LyRpICR7RH0ke2JpbmRpcn0vZ2hvc3RzY3JpcHQtJHtQVn0vJGkKKyAgICBkb25lCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmYuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmYuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4Y2UyMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncGVyZi9ncGVyZi5pbmMKQEAgLTAsMCArMSwyMiBAQAorREVTQ1JJUFRJT04gPSAiR05VIGdwZXJmIGlzIGEgcGVyZmVjdCBoYXNoIGZ1bmN0aW9uIGdlbmVyYXRvciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ncGVyZiIKK1NVTU1BUlkgID0gIkdlbmVyYXRlIGEgcGVyZmVjdCBoYXNoIGZ1bmN0aW9uIGZyb20gYSBzZXQgb2Yga2V5d29yZHMiCitMSUNFTlNFICA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5jYztiZWdpbmxpbmU9ODtlbmRsaW5lPTE5O21kNT1kZWM4ZjYxMTg0NWQwNDczODdlZDU2YjViODVmYTk5YiIKKworU1JDX1VSSSAgPSAiJHtHTlVfTUlSUk9SfS9ncGVyZi9ncGVyZi0ke1BWfS50YXIuZ3oiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgYXV0b3JlY29uZiBjb3VsZG4ndCBmaW5kIGFjaW5jbHVkZS5tNCB3aGVuIHN0ZXBwaW5nIGludG8gc3ViZGlyZWN0b3J5LiBJbnN0ZWFkIG9mCisjIGR1cGxpY2F0aW5nIGFjaW5jbHVkZS5tNCBpbiBldmVyeSBzdWJkaXJlY3RvcnksIHVzZSBhYnNvbHV0ZSBpbmNsdWRlIHBhdGggdG8gYWNsb2NhbAorRVhUUkFfQVVUT1JFQ09ORiArPSAiIC1JICR7U30iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICAgICBpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorICAgICAgICAgICAgICAgIGNhdCAke1N9L2FjbG9jYWwubTQgPiAke1N9L2FjaW5jbHVkZS5tNAorICAgICAgICBmaQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmZfMy4wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcyODg2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC4zLmJiCkBAIC0wLDAgKzEsMTAgQEAKK3JlcXVpcmUgZ3BlcmYuaW5jCisKK0xJQ0VOU0UgID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE1Zjg0YWJiMDA3MGFkZjhhMDkyNWQ3ZDUzNGI2ZTBhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLmNjO2JlZ2lubGluZT04O2VuZGxpbmU9MTk7bWQ1PTcyYTMwMzRhMTllNzJmMDhlZTQ4ZWY4MjQ0YTEyMWZkIgorCitQUiA9ICJyMSIKKworU1JDX1VSSVttZDVzdW1dID0gImNjMjBlNTg5NzVhMzgwNzU0NDA0MjNjOGZiODVmZDAwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzMjg3NTI3YzhkOWUyN2U4MDFjZjA4MDQ0MzZmMzQ5NGJkNTY5ZGIwNWQ0OWRjZGQyYTk0MmFlNzJmYTkwNTUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncGVyZi9ncGVyZl8zLjAuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MDAzZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncGVyZi9ncGVyZl8zLjAuNC5iYgpAQCAtMCwwICsxLDUgQEAKK3JlcXVpcmUgZ3BlcmYuaW5jCisKKworU1JDX1VSSVttZDVzdW1dID0gImMxZjFkYjMyZmI2NTk4ZDZhOTNlNmU4ODc5NmE4NjMyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc2NzExMmEyMDQ0MDdlNjJkYmMzMTA2NjQ3Y2Y4MzllZDU0NGYzY2Y1ZDBmMDUyM2FhYTI1MDg2MjNhYWQ2M2UiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL01ha2V2YXJzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9NYWtldmFycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjA5ZjUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9NYWtldmFycwpAQCAtMCwwICsxLDI1IEBACisjIE1ha2VmaWxlIHZhcmlhYmxlcyBmb3IgUE8gZGlyZWN0b3J5IGluIGFueSBwYWNrYWdlIHVzaW5nIEdOVSBnZXR0ZXh0LgorCisjIFVzdWFsbHkgdGhlIG1lc3NhZ2UgZG9tYWluIGlzIHRoZSBzYW1lIGFzIHRoZSBwYWNrYWdlIG5hbWUuCitET01BSU4gPSAkKFBBQ0tBR0UpCisKKyMgVGhlc2UgdHdvIHZhcmlhYmxlcyBkZXBlbmQgb24gdGhlIGxvY2F0aW9uIG9mIHRoaXMgZGlyZWN0b3J5Lgorc3ViZGlyID0gcG8KK3RvcF9idWlsZGRpciA9IC4uCisKKyMgVGhlc2Ugb3B0aW9ucyBnZXQgcGFzc2VkIHRvIHhnZXR0ZXh0LgorWEdFVFRFWFRfT1BUSU9OUyA9IC0ta2V5d29yZD1fIC0ta2V5d29yZD1OXworCisjIFRoaXMgaXMgdGhlIGNvcHlyaWdodCBob2xkZXIgdGhhdCBnZXRzIGluc2VydGVkIGludG8gdGhlIGhlYWRlciBvZiB0aGUKKyMgJChET01BSU4pLnBvdCBmaWxlLiAgU2V0IHRoaXMgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHN1cnJvdW5kaW5nCisjIHBhY2thZ2UuICAoTm90ZSB0aGF0IHRoZSBtc2dzdHIgc3RyaW5ncywgZXh0cmFjdGVkIGZyb20gdGhlIHBhY2thZ2UncworIyBzb3VyY2VzLCBiZWxvbmcgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHBhY2thZ2UuKSAgVHJhbnNsYXRvcnMgYXJlCisjIGV4cGVjdGVkIHRvIHRyYW5zZmVyIHRoZSBjb3B5cmlnaHQgZm9yIHRoZWlyIHRyYW5zbGF0aW9ucyB0byB0aGlzIHBlcnNvbgorIyBvciBlbnRpdHksIG9yIHRvIGRpc2NsYWltIHRoZWlyIGNvcHlyaWdodC4gIFRoZSBlbXB0eSBzdHJpbmcgc3RhbmRzIGZvcgorIyB0aGUgcHVibGljIGRvbWFpbjsgaW4gdGhpcyBjYXNlIHRoZSB0cmFuc2xhdG9ycyBhcmUgZXhwZWN0ZWQgdG8gZGlzY2xhaW0KKyMgdGhlaXIgY29weXJpZ2h0LgorQ09QWVJJR0hUX0hPTERFUiA9IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgaXMgdGhlIGxpc3Qgb2YgbG9jYWxlIGNhdGVnb3JpZXMsIGJleW9uZCBMQ19NRVNTQUdFUywgZm9yIHdoaWNoIHRoZQorIyBtZXNzYWdlIGNhdGFsb2dzIHNoYWxsIGJlIHVzZWQuICBJdCBpcyB1c3VhbGx5IGVtcHR5LgorRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMgPQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9maXgtZm9yLXRleGluZm8tNS4xLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9maXgtZm9yLXRleGluZm8tNS4xLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNDE0OWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2ZpeC1mb3ItdGV4aW5mby01LjEucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtQb2t5IFNwZWNpZmljIHRoaXMgaXMgZ3BsdjIgdmVyc2lvbl0KKworU2lnbmVkLW9mZi1ieSBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBncmVwLTIuNS4xYS9kb2MvZ3JlcC50ZXhpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3JlcC0yLjUuMWEub3JpZy9kb2MvZ3JlcC50ZXhpCisrKysgZ3JlcC0yLjUuMWEvZG9jL2dyZXAudGV4aQorQEAgLTI4OCw3ICsyODgsNyBAQCBUaGlzIHZlcnNpb24gbnVtYmVyIHNob3VsZCBiZSBpbmNsdWRlZCBpCisgUHJpbnQgYSB1c2FnZSBtZXNzYWdlIGJyaWVmbHkgc3VtbWFyaXppbmcgdGhlc2UgY29tbWFuZC1saW5lIG9wdGlvbnMKKyBhbmQgdGhlIGJ1Zy1yZXBvcnRpbmcgYWRkcmVzcywgdGhlbiBleGl0LgorIAorLUBpdGVteCAtLWJpbmFyeS1maWxlcz1AdmFye3R5cGV9CisrQGl0ZW0gLS1iaW5hcnktZmlsZXM9QHZhcnt0eXBlfQorIEBvcGluZGV4IC0tYmluYXJ5LWZpbGVzCisgQGNpbmRleCBiaW5hcnkgZmlsZXMKKyBJZiB0aGUgZmlyc3QgZmV3IGJ5dGVzIG9mIGEgZmlsZSBpbmRpY2F0ZSB0aGF0IHRoZSBmaWxlIGNvbnRhaW5zIGJpbmFyeQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9maXg2NC1pbnQtdG8tcG9pbnRlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZml4NjQtaW50LXRvLXBvaW50ZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I5MTUyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZml4NjQtaW50LXRvLXBvaW50ZXIucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorQWx3YXlzIHVzZSBsb2NhbGUuaCBhcyBIQVZFX0xPQ0FMRV9IIGlzIG5vIGxvbmdlciBoYW5kbGVkIGJ5IC4vY29uZmlndXJlCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgWyBvbGQgdmVyc2lvbiB0aGF0IHdpbGwgbm90IGJlIG1haW50YWluZWQgXQorU2lnbmVkLW9mZi1ieTogQWxleCBEQU1JQU4gPGFsZXhhbmRydS5kYW1pYW5AaW50ZWwuY29tPgorCitkaWZmIC0tcmVjdXJzaXZlIC0tdW5pZmllZCBncmVwLTIuNS4xYS1vcmlnL2xpYi9oYXJkLWxvY2FsZS5jIGdyZXAtMi41LjFhL2xpYi9oYXJkLWxvY2FsZS5jCistLS0gZ3JlcC0yLjUuMWEtb3JpZy9saWIvaGFyZC1sb2NhbGUuYwkyMDAxLTAzLTA0IDA3OjMzOjEyLjAwMDAwMDAwMCArMDIwMAorKysrIGdyZXAtMi41LjFhL2xpYi9oYXJkLWxvY2FsZS5jCTIwMTMtMDMtMTEgMTc6MDU6NTIuMDg2NDQ0ODkxICswMjAwCitAQCAtMzgsOSArMzgsNyBAQAorICMgZW5kaWYKKyAjZW5kaWYKKyAKKy0jaWYgSEFWRV9MT0NBTEVfSAorICMgaW5jbHVkZSA8bG9jYWxlLmg+CistI2VuZGlmCisgCisgI2lmIEhBVkVfU1RSSU5HX0gKKyAjIGluY2x1ZGUgPHN0cmluZy5oPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9nZXR0ZXh0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9nZXR0ZXh0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NDYzMzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dldHRleHQucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorRW5hYmxlIG9wZXJhdGlvbiB3aXRoIGxhdGVyIHZlcnNpb25zIG9mIGdldHRleHQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorUlAgMjAxMi8xMC8xOQorCitJbmRleDogZ3JlcC0yLjUuMWEvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3JlcC0yLjUuMWEub3JpZy9jb25maWd1cmUuaW4JMjAxMi0xMC0xOSAxMjo1Nzo1MS42NDY5NzAyMDQgKzAwMDAKKysrKyBncmVwLTIuNS4xYS9jb25maWd1cmUuaW4JMjAxMi0xMC0xOSAxMjo1OTo0OS45NDY5Njg4MDMgKzAwMDAKK0BAIC0xNDAsNCArMTQwLDQgQEAKKyAJQUNfQ0hFQ0tfTElCKHBjcmUsIHBjcmVfZXhlYykKKyBmaQorIAorLUFDX09VVFBVVChNYWtlZmlsZSBsaWIvTWFrZWZpbGUgbGliL3Bvc2l4L01ha2VmaWxlIHNyYy9NYWtlZmlsZSB0ZXN0cy9NYWtlZmlsZSBwby9NYWtlZmlsZS5pbiBpbnRsL01ha2VmaWxlIGRvYy9NYWtlZmlsZSBtNC9NYWtlZmlsZSB2bXMvTWFrZWZpbGUgYm9vdHN0cmFwL01ha2VmaWxlLCBbc2VkIC1lICIvUE9URklMRVMgPS9yIHBvL1BPVEZJTEVTIiBwby9NYWtlZmlsZS5pbiA+IHBvL01ha2VmaWxlOyBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLWhdKQorK0FDX09VVFBVVChNYWtlZmlsZSBsaWIvTWFrZWZpbGUgbGliL3Bvc2l4L01ha2VmaWxlIHNyYy9NYWtlZmlsZSB0ZXN0cy9NYWtlZmlsZSBwby9NYWtlZmlsZS5pbiBpbnRsL01ha2VmaWxlIGRvYy9NYWtlZmlsZSBtNC9NYWtlZmlsZSB2bXMvTWFrZWZpbGUgYm9vdHN0cmFwL01ha2VmaWxlLCBbZWNobyB0aW1lc3RhbXAgPiBzdGFtcC1oXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1DVkUtMjAxMi01NjY3LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwLUNWRS0yMDEyLTU2NjcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU5ZDA2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1DVkUtMjAxMi01NjY3LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1RoZSBwYXRjaCB0byBmaXggQ1ZFLTIwMTItNTY2NworUmVmZXJlbmNlOiBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYXR0YWNobWVudC5jZ2k/aWQ9Njg2NjA1JmFjdGlvbj1kaWZmCisKK011bHRpcGxlIGludGVnZXIgb3ZlcmZsb3dzIGluIEdOVSBHcmVwIGJlZm9yZSAyLjExIG1pZ2h0IGFsbG93Citjb250ZXh0LWRlcGVuZGVudCBhdHRhY2tlcnMgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSB2aWEgdmVjdG9ycworaW52b2x2aW5nIGEgbG9uZyBpbnB1dCBsaW5lIHRoYXQgdHJpZ2dlcnMgYSBoZWFwLWJhc2VkIGJ1ZmZlciBvdmVyZmxvdy4KKworaHR0cDovL3dlYi5udmQubmlzdC5nb3Yvdmlldy92dWxuL2RldGFpbD92dWxuSWQ9Q1ZFLTIwMTItNTY2NworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorVGhpcyB2ZXJzaW9uIG9mIEdOVSBHcmVwIGhhcyBiZWVuIGFiYW5kb25lZCB1cHN0cmVhbSBhbmQgdGhleSBhcmUgbm8gbG9uZ2VyCithY2NlcHRpbmcgcGF0Y2hlcy4gIFRoaXMgaXMgbm90IGEgYmFja3BvcnQuCisKK1NpZ25lZC1vZmYtYnkgTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+CistLS0KKyBncmVwLmMgfCAgICA3ICsrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCistLS0gYS9zcmMvZ3JlcC5jCTIwMTMtMDUtMTUgMTM6Mzk6MzMuMzU5MTkxNzY5ICswODAwCisrKysgYS9zcmMvZ3JlcC5jCTIwMTMtMDUtMTUgMTM6NTA6MjIuNjA5MTkxODgyICswODAwCitAQCAtMzA2LDYgKzMwNiwxMSBAQCBmaWxsYnVmIChzaXplX3Qgc2F2ZSwgc3RydWN0IHN0YXRzIGNvbnN0CisgICBpbnQgY2MgPSAxOworICAgY2hhciAqcmVhZGJ1ZjsKKyAgIHNpemVfdCByZWFkc2l6ZTsKKysgIGNvbnN0IHNpemVfdCBtYXhfc2F2ZSA9IElOVF9NQVggLyAyOworKworKyAgLyogTGltaXQgdGhlIGFtb3VudCBvZiBzYXZlZCBkYXRhIHRvIElOVF9NQVggdG8gZml4IENWRS0yMDEyLTU2NjcgKi8KKysgIGlmIChzYXZlID4gbWF4X3NhdmUpCisrICAgICBlcnJvciAoMiwgMCwgXygibGluZSB0b28gbG9uZyIpKTsKKyAKKyAgIC8qIE9mZnNldCBmcm9tIHN0YXJ0IG9mIGJ1ZmZlciB0byBzdGFydCBvZiBvbGQgc3R1ZmYKKyAgICAgIHRoYXQgd2Ugd2FudCB0byBzYXZlLiAgKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1lZ3JlcC1mZ3JlcC1GaXgtTFNCLU5HLWNhc2VzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwLWVncmVwLWZncmVwLUZpeC1MU0ItTkctY2FzZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI3ZWU1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1lZ3JlcC1mZ3JlcC1GaXgtTFNCLU5HLWNhc2VzLnBhdGNoCkBAIC0wLDAgKzEsMTM0MiBAQAorRnJvbSBjODg0ZGQxMmVjMDYyNTY5MzM1NzAyODQ4ZmM1ZjI5ZjQzNmMyOGZhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGkgeGluIDxsaXhpbi5mbnN0QGNuLmZ1aml0c3UuY29tPgorRGF0ZTogTW9uLCAyNSBNYXkgMjAxNSAxMDoxNTo1NyArMDkwMAorU3ViamVjdDogW1BBVENIXSBncmVwIGVncmVwIGZncmVwOiBGaXggTFNCIE5HIGNhc2VzLgorCitUaGUgTFNCIGNvcmUgdGVzdCByZXF1aXJlcyBncmVwIGVncmVwIGFuZCBmZ3JlcCBjYW4KK3BlcmZvcm0gcGF0dGVybiBtYXRjaGluZyBpbiBzZWFyY2hlcyB3aXRob3V0IHJlZ2FyZAordG8gY2FzZSBpZiAtaSBvcHRpb24gaXMgc3BlY2lmaWVkLgorCitVcHN0cmVhbS1TdGF0dXM6IGJhY2twb3J0LgorCitTaWduZWQtb2ZmLWJ5OiBMaSBYaW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CistLS0KKyBsaWIvcG9zaXgvcmVnZXguaCB8ICAgNCArCisgc3JjL2RmYS5jICAgICAgICAgfCAgMjIgKy0KKyBzcmMvZ3JlcC5jICAgICAgICB8ICA5NiArKysrLS0tCisgc3JjL3NlYXJjaC5jICAgICAgfCA4MzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCisgNCBmaWxlcyBjaGFuZ2VkLCA3NjggaW5zZXJ0aW9ucygrKSwgMTg3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL3Bvc2l4L3JlZ2V4LmggYi9saWIvcG9zaXgvcmVnZXguaAoraW5kZXggNjNjMmZlZi4uN2JiMmIwZSAxMDA2NDQKKy0tLSBhL2xpYi9wb3NpeC9yZWdleC5oCisrKysgYi9saWIvcG9zaXgvcmVnZXguaAorQEAgLTEwOSw2ICsxMDksMTAgQEAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCByZWdfc3ludGF4X3Q7CisgICAgSWYgbm90IHNldCwgXHssIFx9LCB7LCBhbmQgfSBhcmUgbGl0ZXJhbHMuICAqLworICNkZWZpbmUgUkVfSU5URVJWQUxTIChSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUgPDwgMSkKKyAKKysvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gaWdub3JlIGNhc2Ugd2hlbiBtYXRjaGluZy4KKysgICBJZiBub3Qgc2V0LCB0aGVuIGNhc2UgaXMgc2lnbmlmaWNhbnQuICAqLworKyNkZWZpbmUgUkVfSUNBU0UgKFJFX0lOVkFMSURfSU5URVJWQUxfT1JEIDw8IDEpCisrCisgLyogSWYgdGhpcyBiaXQgaXMgc2V0LCArLCA/IGFuZCB8IGFyZW4ndCByZWNvZ25pemVkIGFzIG9wZXJhdG9ycy4KKyAgICBJZiBub3Qgc2V0LCB0aGV5IGFyZS4gICovCisgI2RlZmluZSBSRV9MSU1JVEVEX09QUyAoUkVfSU5URVJWQUxTIDw8IDEpCitkaWZmIC0tZ2l0IGEvc3JjL2RmYS5jIGIvc3JjL2RmYS5jCitpbmRleCA1OTBiZmE3Li4yN2M4NzZhIDEwMDY0NAorLS0tIGEvc3JjL2RmYS5jCisrKysgYi9zcmMvZGZhLmMKK0BAIC00MTQsNyArNDE0LDcgQEAgdXBkYXRlX21iX2xlbl9pbmRleCAodW5zaWduZWQgY2hhciBjb25zdCAqcCwgaW50IGxlbikKKyAKKyAvKiBUaGlzIGZ1bmN0aW9uIGZldGNoIGEgd2lkZSBjaGFyYWN0ZXIsIGFuZCB1cGRhdGUgY3VyX21iX2xlbiwKKyAgICB1c2VkIG9ubHkgaWYgdGhlIGN1cnJlbnQgbG9jYWxlIGlzIGEgbXVsdGlieXRlIGVudmlyb25tZW50LiAgKi8KKy1zdGF0aWMgd2NoYXJfdAorK3N0YXRpYyB3aW50X3QKKyBmZXRjaF93YyAoY2hhciBjb25zdCAqZW9mZXJyKQorIHsKKyAgIHdjaGFyX3Qgd2M7CitAQCAtNDIzLDcgKzQyMyw3IEBAIGZldGNoX3djIChjaGFyIGNvbnN0ICplb2ZlcnIpCisgICAgICAgaWYgKGVvZmVyciAhPSAwKQorIAlkZmFlcnJvciAoZW9mZXJyKTsKKyAgICAgICBlbHNlCistCXJldHVybiAtMTsKKysJcmV0dXJuIFdFT0Y7CisgICAgIH0KKyAKKyAgIGN1cl9tYl9sZW4gPSBtYnJ0b3djKCZ3YywgbGV4cHRyLCBsZXhsZWZ0LCAmbWJzKTsKK0BAIC00NTksNyArNDU5LDcgQEAgZmV0Y2hfd2MgKGNoYXIgY29uc3QgKmVvZmVycikKKyBzdGF0aWMgdm9pZAorIHBhcnNlX2JyYWNrZXRfZXhwX21iICgpCisgeworLSAgd2NoYXJfdCB3Yywgd2MxLCB3YzI7CisrICB3aW50X3Qgd2MsIHdjMSwgd2MyOworIAorICAgLyogV29yayBhcmVhIHRvIGJ1aWxkIGEgbWJfY2hhcl9jbGFzc2VzLiAgKi8KKyAgIHN0cnVjdCBtYl9jaGFyX2NsYXNzZXMgKndvcmtfbWJjOworQEAgLTQ5Niw3ICs0OTYsNyBAQCBwYXJzZV9icmFja2V0X2V4cF9tYiAoKQorICAgICB3b3JrX21iYy0+aW52ZXJ0ID0gMDsKKyAgIGRvCisgICAgIHsKKy0gICAgICB3YzEgPSAtMTsgLyogbWFyayB3YzEgaXMgbm90IGluaXRpYWxpemVkIi4gICovCisrICAgICAgd2MxID0gV0VPRjsgLyogbWFyayB3YzEgaXMgbm90IGluaXRpYWxpemVkIi4gICovCisgCisgICAgICAgLyogTm90ZSB0aGF0IGlmIHdlJ3JlIGxvb2tpbmcgYXQgc29tZSBvdGhlciBbOi4uLjpdIGNvbnN0cnVjdCwKKyAJIHdlIGp1c3QgdHJlYXQgaXQgYXMgYSBidW5jaCBvZiBvcmRpbmFyeSBjaGFyYWN0ZXJzLiAgV2UgY2FuIGRvCitAQCAtNTg2LDcgKzU4Niw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwX21iICgpCisgCQkgICAgICB3b3JrX21iYy0+Y29sbF9lbGVtc1t3b3JrX21iYy0+bmNvbGxfZWxlbXMrK10gPSBlbGVtOworIAkJICAgIH0KKyAgCQl9CistCSAgICAgIHdjID0gLTE7CisrCSAgICAgIHdjMSA9IHdjID0gV0VPRjsKKyAJICAgIH0KKyAJICBlbHNlCisgCSAgICAvKiBXZSB0cmVhdCAnWycgYXMgYSBub3JtYWwgY2hhcmFjdGVyIGhlcmUuICAqLworQEAgLTYwMCw3ICs2MDAsNyBAQCBwYXJzZV9icmFja2V0X2V4cF9tYiAoKQorIAkgICAgd2MgPSBmZXRjaF93YygoIlVuYmFsYW5jZWQgWyIpKTsKKyAJfQorIAorLSAgICAgIGlmICh3YzEgPT0gLTEpCisrICAgICAgaWYgKHdjMSA9PSBXRU9GKQorIAl3YzEgPSBmZXRjaF93YyhfKCJVbmJhbGFuY2VkIFsiKSk7CisgCisgICAgICAgaWYgKHdjMSA9PSBMJy0nKQorQEAgLTYzMCwxNyArNjMwLDE3IEBAIHBhcnNlX2JyYWNrZXRfZXhwX21iICgpCisgCSAgICB9CisgCSAgUkVBTExPQ19JRl9ORUNFU1NBUlkod29ya19tYmMtPnJhbmdlX3N0cywgd2NoYXJfdCwKKyAJCQkgICAgICAgcmFuZ2Vfc3RzX2FsLCB3b3JrX21iYy0+bnJhbmdlcyArIDEpOworLQkgIHdvcmtfbWJjLT5yYW5nZV9zdHNbd29ya19tYmMtPm5yYW5nZXNdID0gd2M7CisrCSAgd29ya19tYmMtPnJhbmdlX3N0c1t3b3JrX21iYy0+bnJhbmdlc10gPSAod2NoYXJfdCl3YzsKKyAJICBSRUFMTE9DX0lGX05FQ0VTU0FSWSh3b3JrX21iYy0+cmFuZ2VfZW5kcywgd2NoYXJfdCwKKyAJCQkgICAgICAgcmFuZ2VfZW5kc19hbCwgd29ya19tYmMtPm5yYW5nZXMgKyAxKTsKKy0JICB3b3JrX21iYy0+cmFuZ2VfZW5kc1t3b3JrX21iYy0+bnJhbmdlcysrXSA9IHdjMjsKKysJICB3b3JrX21iYy0+cmFuZ2VfZW5kc1t3b3JrX21iYy0+bnJhbmdlcysrXSA9ICh3Y2hhcl90KXdjMjsKKyAJfQorLSAgICAgIGVsc2UgaWYgKHdjICE9IC0xKQorKyAgICAgIGVsc2UgaWYgKHdjICE9IFdFT0YpCisgCS8qIGJ1aWxkIG5vcm1hbCBjaGFyYWN0ZXJzLiAgKi8KKyAJeworIAkgIFJFQUxMT0NfSUZfTkVDRVNTQVJZKHdvcmtfbWJjLT5jaGFycywgd2NoYXJfdCwgY2hhcnNfYWwsCisgCQkJICAgICAgIHdvcmtfbWJjLT5uY2hhcnMgKyAxKTsKKy0JICB3b3JrX21iYy0+Y2hhcnNbd29ya19tYmMtPm5jaGFycysrXSA9IHdjOworKwkgIHdvcmtfbWJjLT5jaGFyc1t3b3JrX21iYy0+bmNoYXJzKytdID0gKHdjaGFyX3Qpd2M7CisgCX0KKyAgICAgfQorICAgd2hpbGUgKCh3YyA9IHdjMSkgIT0gTCddJyk7CitAQCAtMjU1Miw2ICsyNTUyLDggQEAgbWF0Y2hfbWJfY2hhcnNldCAoc3RydWN0IGRmYSAqZCwgaW50IHMsIHBvc2l0aW9uIHBvcywgaW50IGluZGV4KQorICAgICB9CisgCisgICAvKiBtYXRjaCB3aXRoIGEgY2hhcmFjdGVyPyAgKi8KKysgIGlmIChjYXNlX2ZvbGQpCisrICAgIHdjID0gdG93bG93ZXIgKHdjKTsKKyAgIGZvciAoaSA9IDA7IGk8d29ya19tYmMtPm5jaGFyczsgaSsrKQorICAgICB7CisgICAgICAgaWYgKHdjID09IHdvcmtfbWJjLT5jaGFyc1tpXSkKK2RpZmYgLS1naXQgYS9zcmMvZ3JlcC5jIGIvc3JjL2dyZXAuYworaW5kZXggMmZiMmZhYy4uM2ZkNGI0NyAxMDA2NDQKKy0tLSBhL3NyYy9ncmVwLmMKKysrKyBiL3NyYy9ncmVwLmMKK0BAIC0zMCw2ICszMCwxMiBAQAorICMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyAjIGluY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorICNlbmRpZgorKyNpZiBkZWZpbmVkIEhBVkVfV0NUWVBFX0ggJiYgZGVmaW5lZCBIQVZFX1dDSEFSX0ggJiYgZGVmaW5lZCBIQVZFX01CUlRPV0MKKysvKiBXZSBjYW4gaGFuZGxlIG11bHRpYnl0ZSBzdHJpbmcuICAqLworKyMgZGVmaW5lIE1CU19TVVBQT1JUCisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyMgaW5jbHVkZSA8d2N0eXBlLmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlICJnZXRvcHQuaCIKK0BAIC0yNTUsMTkgKzI2MSw2IEBAIHJlc2V0IChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIHN0cnVjdCBzdGF0cyAqc3RhdHMpCisgICBidWZiZWdbLTFdID0gZW9sYnl0ZTsKKyAgIGJ1ZmRlc2MgPSBmZDsKKyAKKy0gIGlmIChmc3RhdCAoZmQsICZzdGF0cy0+c3RhdCkgIT0gMCkKKy0gICAgeworLSAgICAgIGVycm9yICgwLCBlcnJubywgImZzdGF0Iik7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0gIGlmIChkaXJlY3RvcmllcyA9PSBTS0lQX0RJUkVDVE9SSUVTICYmIFNfSVNESVIgKHN0YXRzLT5zdGF0LnN0X21vZGUpKQorLSAgICByZXR1cm4gMDsKKy0jaWZuZGVmIERKR1BQCistICBpZiAoZGV2aWNlcyA9PSBTS0lQX0RFVklDRVMgJiYgKFNfSVNDSFIoc3RhdHMtPnN0YXQuc3RfbW9kZSkgfHwgU19JU0JMSyhzdGF0cy0+c3RhdC5zdF9tb2RlKSB8fCBTX0lTU09DSyhzdGF0cy0+c3RhdC5zdF9tb2RlKSkpCistI2Vsc2UKKy0gIGlmIChkZXZpY2VzID09IFNLSVBfREVWSUNFUyAmJiAoU19JU0NIUihzdGF0cy0+c3RhdC5zdF9tb2RlKSB8fCBTX0lTQkxLKHN0YXRzLT5zdGF0LnN0X21vZGUpKSkKKy0jZW5kaWYKKy0gICAgcmV0dXJuIDA7CisgICBpZiAoU19JU1JFRyAoc3RhdHMtPnN0YXQuc3RfbW9kZSkpCisgICAgIHsKKyAgICAgICBpZiAoZmlsZSkKK0BAIC01NTgsMzMgKzU1MSw2IEBAIHBybGluZSAoY2hhciBjb25zdCAqYmVnLCBjaGFyIGNvbnN0ICpsaW0sIGludCBzZXApCisgICAgIHsKKyAgICAgICBzaXplX3QgbWF0Y2hfc2l6ZTsKKyAgICAgICBzaXplX3QgbWF0Y2hfb2Zmc2V0OworLSAgICAgIGlmKG1hdGNoX2ljYXNlKQorLSAgICAgICAgeworLQkgIC8qIFl1Y2ssIHRoaXMgaXMgdHJpY2t5ICovCistICAgICAgICAgIGNoYXIgKmJ1ZiA9IChjaGFyKikgeG1hbGxvYyAobGltIC0gYmVnKTsKKy0JICBjaGFyICppYmVnID0gYnVmOworLQkgIGNoYXIgKmlsaW0gPSBpYmVnICsgKGxpbSAtIGJlZyk7CistCSAgaW50IGk7CistCSAgZm9yIChpID0gMDsgaSA8IGxpbSAtIGJlZzsgaSsrKQorLQkgICAgaWJlZ1tpXSA9IHRvbG93ZXIgKGJlZ1tpXSk7CistCSAgd2hpbGUgKChtYXRjaF9vZmZzZXQgPSAoKmV4ZWN1dGUpIChpYmVnLCBpbGltLWliZWcsICZtYXRjaF9zaXplLCAxKSkKKy0JCSAhPSAoc2l6ZV90KSAtMSkKKy0JICAgIHsKKy0JICAgICAgY2hhciBjb25zdCAqYiA9IGJlZyArIG1hdGNoX29mZnNldDsKKy0JICAgICAgaWYgKGIgPT0gbGltKQorLQkJYnJlYWs7CistCSAgICAgIGZ3cml0ZSAoYmVnLCBzaXplb2YgKGNoYXIpLCBtYXRjaF9vZmZzZXQsIHN0ZG91dCk7CistCSAgICAgIHByaW50ZiAoIlwzM1slc20iLCBncmVwX2NvbG9yKTsKKy0JICAgICAgZndyaXRlIChiLCBzaXplb2YgKGNoYXIpLCBtYXRjaF9zaXplLCBzdGRvdXQpOworLQkgICAgICBmcHV0cyAoIlwzM1swMG0iLCBzdGRvdXQpOworLQkgICAgICBiZWcgPSBiICsgbWF0Y2hfc2l6ZTsKKy0JICAgICAgaWJlZyA9IGliZWcgKyBtYXRjaF9vZmZzZXQgKyBtYXRjaF9zaXplOworLQkgICAgfQorLQkgIGZ3cml0ZSAoYmVnLCAxLCBsaW0gLSBiZWcsIHN0ZG91dCk7CistCSAgZnJlZSAoYnVmKTsKKy0JICBsYXN0b3V0ID0gbGltOworLQkgIHJldHVybjsKKy0JfQorICAgICAgIHdoaWxlIChsaW0tYmVnICYmIChtYXRjaF9vZmZzZXQgPSAoKmV4ZWN1dGUpIChiZWcsIGxpbSAtIGJlZywgJm1hdGNoX3NpemUsIDEpKQorIAkgICAgICE9IChzaXplX3QpIC0xKQorIAl7CitAQCAtNjAxLDYgKzU2Nyw3IEBAIHBybGluZSAoY2hhciBjb25zdCAqYmVnLCBjaGFyIGNvbnN0ICpsaW0sIGludCBzZXApCisgCSAgZnB1dHMgKCJcMzNbMDBtIiwgc3Rkb3V0KTsKKyAJICBiZWcgPSBiICsgbWF0Y2hfc2l6ZTsKKyAJfQorKyAgICAgIGZwdXRzICgiXDMzW0siLCBzdGRvdXQpOworICAgICB9CisgICBmd3JpdGUgKGJlZywgMSwgbGltIC0gYmVnLCBzdGRvdXQpOworICAgaWYgKGZlcnJvciAoc3Rkb3V0KSkKK0BAIC02MjMsNyArNTkwLDcgQEAgcHJwZW5kaW5nIChjaGFyIGNvbnN0ICpsaW0pCisgICAgICAgc2l6ZV90IG1hdGNoX3NpemU7CisgICAgICAgLS1wZW5kaW5nOworICAgICAgIGlmIChvdXRsZWZ0CistCSAgfHwgKCgoKmV4ZWN1dGUpIChsYXN0b3V0LCBubCAtIGxhc3RvdXQsICZtYXRjaF9zaXplLCAwKSA9PSAoc2l6ZV90KSAtMSkKKysJICB8fCAoKCgqZXhlY3V0ZSkgKGxhc3RvdXQsIG5sICsgMSAtIGxhc3RvdXQsICZtYXRjaF9zaXplLCAwKSA9PSAoc2l6ZV90KSAtMSkKKyAJICAgICAgPT0gIW91dF9pbnZlcnQpKQorIAlwcmxpbmUgKGxhc3RvdXQsIG5sICsgMSwgJy0nKTsKKyAgICAgICBlbHNlCitAQCAtODk1LDYgKzg2MiwxOSBAQCBncmVwZmlsZSAoY2hhciBjb25zdCAqZmlsZSwgc3RydWN0IHN0YXRzICpzdGF0cykKKyAgICAgfQorICAgZWxzZQorICAgICB7CisrICAgICAgaWYgKHN0YXQgKGZpbGUsICZzdGF0cy0+c3RhdCkgIT0gMCkKKysgICAgICAgIHsKKysgICAgICAgICAgc3VwcHJlc3NpYmxlX2Vycm9yIChmaWxlLCBlcnJubyk7CisrICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgfQorKyAgICAgIGlmIChkaXJlY3RvcmllcyA9PSBTS0lQX0RJUkVDVE9SSUVTICYmIFNfSVNESVIgKHN0YXRzLT5zdGF0LnN0X21vZGUpKQorKyAgICAgICAgcmV0dXJuIDE7CisrI2lmbmRlZiBESkdQUAorKyAgICAgIGlmIChkZXZpY2VzID09IFNLSVBfREVWSUNFUyAmJiAoU19JU0NIUihzdGF0cy0+c3RhdC5zdF9tb2RlKSB8fCBTX0lTQkxLKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNTT0NLKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNGSUZPKHN0YXRzLT5zdGF0LnN0X21vZGUpKSkKKysjZWxzZQorKyAgICAgIGlmIChkZXZpY2VzID09IFNLSVBfREVWSUNFUyAmJiAoU19JU0NIUihzdGF0cy0+c3RhdC5zdF9tb2RlKSB8fCBTX0lTQkxLKHN0YXRzLT5zdGF0LnN0X21vZGUpKSkKKysjZW5kaWYKKysgICAgICAgIHJldHVybiAxOworICAgICAgIHdoaWxlICgoZGVzYyA9IG9wZW4gKGZpbGUsIE9fUkRPTkxZKSkgPCAwICYmIGVycm5vID09IEVJTlRSKQorIAljb250aW51ZTsKKyAKK0BAIC0xNjgxLDkgKzE2NjEsNiBAQCB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiIpKQorIAkgIG91dF9pbnZlcnQgXj0gMTsKKyAJICBtYXRjaF9saW5lcyA9IG1hdGNoX3dvcmRzID0gMDsKKyAJfQorLSAgICAgIGVsc2UKKy0JLyogU3RyaXAgdHJhaWxpbmcgbmV3bGluZS4gKi8KKy0gICAgICAgIC0ta2V5Y2M7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgaWYgKG9wdGluZCA8IGFyZ2MpCitAQCAtMTY5Nyw2ICsxNjc0LDM3IEBAIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuIikpCisgICBpZiAoIWluc3RhbGxfbWF0Y2hlciAobWF0Y2hlcikgJiYgIWluc3RhbGxfbWF0Y2hlciAoImRlZmF1bHQiKSkKKyAgICAgYWJvcnQgKCk7CisgCisrI2lmZGVmIE1CU19TVVBQT1JUCisrICBpZiAoTUJfQ1VSX01BWCAhPSAxICYmIG1hdGNoX2ljYXNlKQorKyAgICB7CisrICAgICAgd2NoYXJfdCB3YzsKKysgICAgICBtYnN0YXRlX3QgY3VyX3N0YXRlLCBwcmV2X3N0YXRlOworKyAgICAgIGludCBpLCBsZW4gPSBzdHJsZW4oa2V5cyk7CisrCisrICAgICAgbWVtc2V0KCZjdXJfc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysgICAgICBmb3IgKGkgPSAwOyBpIDw9IGxlbiA7KQorKwl7CisrCSAgc2l6ZV90IG1iY2xlbjsKKysJICBtYmNsZW4gPSBtYnJ0b3djKCZ3Yywga2V5cyArIGksIGxlbiAtIGksICZjdXJfc3RhdGUpOworKwkgIGlmIChtYmNsZW4gPT0gKHNpemVfdCkgLTEgfHwgbWJjbGVuID09IChzaXplX3QpIC0yIHx8IG1iY2xlbiA9PSAwKQorKwkgICAgeworKwkgICAgICAvKiBBbiBpbnZhbGlkIHNlcXVlbmNlLCBvciBhIHRydW5jYXRlZCBtdWx0aWJ5dGUgY2hhcmFjdGVyLgorKwkJIFdlIHRyZWF0IGl0IGFzIGEgc2luZ2xlYnl0ZSBjaGFyYWN0ZXIuICAqLworKwkgICAgICBtYmNsZW4gPSAxOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgaWYgKGlzd3VwcGVyKCh3aW50X3Qpd2MpKQorKwkJeworKwkJICB3YyA9IHRvd2xvd2VyKCh3aW50X3Qpd2MpOworKwkJICB3Y3J0b21iKGtleXMgKyBpLCB3YywgJmN1cl9zdGF0ZSk7CisrCQl9CisrCSAgICB9CisrCSAgaSArPSBtYmNsZW47CisrCX0KKysgICAgfQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKworICAgKCpjb21waWxlKShrZXlzLCBrZXljYyk7CisgCisgICBpZiAoKGFyZ2MgLSBvcHRpbmQgPiAxICYmICFub19maWxlbmFtZXMpIHx8IHdpdGhfZmlsZW5hbWVzKQorZGlmZiAtLWdpdCBhL3NyYy9zZWFyY2guYyBiL3NyYy9zZWFyY2guYworaW5kZXggN2JkMjMzZi4uM2M2YTQ4NSAxMDA2NDQKKy0tLSBhL3NyYy9zZWFyY2guYworKysrIGIvc3JjL3NlYXJjaC5jCitAQCAtMTgsOSArMTgsMTMgQEAKKyAKKyAvKiBXcml0dGVuIEF1Z3VzdCAxOTkyIGJ5IE1pa2UgSGFlcnRlbC4gKi8KKyAKKysjaWZuZGVmIF9HTlVfU09VUkNFCisrIyBkZWZpbmUgX0dOVV9TT1VSQ0UgMQorKyNlbmRpZgorICNpZmRlZiBIQVZFX0NPTkZJR19ICisgIyBpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpZiBkZWZpbmVkIEhBVkVfV0NUWVBFX0ggJiYgZGVmaW5lZCBIQVZFX1dDSEFSX0ggJiYgZGVmaW5lZCBIQVZFX01CUlRPV0MKKyAvKiBXZSBjYW4gaGFuZGxlIG11bHRpYnl0ZSBzdHJpbmcuICAqLworQEAgLTMxLDcgKzM1LDcgQEAKKyAKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImdyZXAuaCIKKy0jaW5jbHVkZSAicmVnZXguaCIKKysjaW5jbHVkZSA8cmVnZXguaD4KKyAjaW5jbHVkZSAiZGZhLmgiCisgI2luY2x1ZGUgImt3c2V0LmgiCisgI2luY2x1ZGUgImVycm9yLmgiCitAQCAtMzksNiArNDMsOSBAQAorICNpZmRlZiBIQVZFX0xJQlBDUkUKKyAjIGluY2x1ZGUgPHBjcmUuaD4KKyAjZW5kaWYKKysjaWZkZWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisrIyBpbmNsdWRlIDxsYW5naW5mby5oPgorKyNlbmRpZgorIAorICNkZWZpbmUgTkNIQVIgKFVDSEFSX01BWCArIDEpCisgCitAQCAtNzAsOSArNzcsMTAgQEAgc3RhdGljIGt3c2V0X3Qga3dzZXQ7CisgICAgY2FsbCB0aGUgcmVnZXhwIG1hdGNoZXIgYXQgYWxsLiAqLworIHN0YXRpYyBpbnQga3dzZXRfZXhhY3RfbWF0Y2hlczsKKyAKKy0jaWYgZGVmaW5lZChNQlNfU1VQUE9SVCkKKy1zdGF0aWMgY2hhciogY2hlY2tfbXVsdGlieXRlX3N0cmluZyBQQVJBTVMgKChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplKSk7CistI2VuZGlmCisrLyogVVRGLTggZW5jb2RpbmcgYWxsb3dzIHNvbWUgb3B0aW1pemF0aW9ucyB0aGF0IHdlIGNhbid0IG90aGVyd2lzZQorKyAgIGFzc3VtZSBpbiBhIG11bHRpYnl0ZSBlbmNvZGluZy4gKi8KKytzdGF0aWMgaW50IHVzaW5nX3V0Zjg7CisrCisgc3RhdGljIHZvaWQga3dzaW5pdCBQQVJBTVMgKCh2b2lkKSk7Cisgc3RhdGljIHZvaWQga3dzbXVzdHMgUEFSQU1TICgodm9pZCkpOworIHN0YXRpYyB2b2lkIEdjb21waWxlIFBBUkFNUyAoKGNoYXIgY29uc3QgKiwgc2l6ZV90KSk7CitAQCAtODQsNiArOTIsMTUgQEAgc3RhdGljIHZvaWQgUGNvbXBpbGUgUEFSQU1TICgoY2hhciBjb25zdCAqLCBzaXplX3QgKSk7Cisgc3RhdGljIHNpemVfdCBQZXhlY3V0ZSBQQVJBTVMgKChjaGFyIGNvbnN0ICosIHNpemVfdCwgc2l6ZV90ICosIGludCkpOworIAorIHZvaWQKKytjaGVja191dGY4ICh2b2lkKQorK3sKKysjaWZkZWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisrICBpZiAoc3RyY21wIChubF9sYW5naW5mbyAoQ09ERVNFVCksICJVVEYtOCIpID09IDApCisrICAgIHVzaW5nX3V0ZjggPSAxOworKyNlbmRpZgorK30KKysKKyt2b2lkCisgZGZhZXJyb3IgKGNoYXIgY29uc3QgKm1lc2cpCisgeworICAgZXJyb3IgKDIsIDAsIG1lc2cpOworQEAgLTE0MSwzOCArMTU4LDYgQEAga3dzbXVzdHMgKHZvaWQpCisgICAgIH0KKyB9CisgCistI2lmZGVmIE1CU19TVVBQT1JUCistLyogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZSB0aGUgYXJyYXkgd2hpY2ggY29ycmVzcG9uZCB0byAiYnVmIi4KKy0gICBUaGVuIHRoaXMgY2hlY2sgbXVsdGlieXRlIHN0cmluZyBhbmQgbWFyayBvbiB0aGUgcG9zaXRpb25zIHdoaWNoCistICAgYXJlIG5vdCBzaW5nbGVieXRlIGNoYXJhY3RlciBub3IgdGhlIGZpcnN0IGJ5dGUgb2YgYSBtdWx0aWJ5dGUKKy0gICBjaGFyYWN0ZXIuICBDYWxsZXIgbXVzdCBmcmVlIHRoZSBhcnJheS4gICovCistc3RhdGljIGNoYXIqCistY2hlY2tfbXVsdGlieXRlX3N0cmluZyhjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplKQorLXsKKy0gIGNoYXIgKm1iX3Byb3BlcnRpZXMgPSBtYWxsb2Moc2l6ZSk7CistICBtYnN0YXRlX3QgY3VyX3N0YXRlOworLSAgaW50IGk7CistICBtZW1zZXQoJmN1cl9zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworLSAgbWVtc2V0KG1iX3Byb3BlcnRpZXMsIDAsIHNpemVvZihjaGFyKSpzaXplKTsKKy0gIGZvciAoaSA9IDA7IGkgPCBzaXplIDspCistICAgIHsKKy0gICAgICBzaXplX3QgbWJjbGVuOworLSAgICAgIG1iY2xlbiA9IG1icmxlbihidWYgKyBpLCBzaXplIC0gaSwgJmN1cl9zdGF0ZSk7CistCistICAgICAgaWYgKG1iY2xlbiA9PSAoc2l6ZV90KSAtMSB8fCBtYmNsZW4gPT0gKHNpemVfdCkgLTIgfHwgbWJjbGVuID09IDApCistCXsKKy0JICAvKiBBbiBpbnZhbGlkIHNlcXVlbmNlLCBvciBhIHRydW5jYXRlZCBtdWx0aWJ5dGUgY2hhcmFjdGVyLgorLQkgICAgIFdlIHRyZWF0IGl0IGFzIGEgc2luZ2xlYnl0ZSBjaGFyYWN0ZXIuICAqLworLQkgIG1iY2xlbiA9IDE7CistCX0KKy0gICAgICBtYl9wcm9wZXJ0aWVzW2ldID0gbWJjbGVuOworLSAgICAgIGkgKz0gbWJjbGVuOworLSAgICB9CistCistICByZXR1cm4gbWJfcHJvcGVydGllczsKKy19CistI2VuZGlmCistCisgc3RhdGljIHZvaWQKKyBHY29tcGlsZSAoY2hhciBjb25zdCAqcGF0dGVybiwgc2l6ZV90IHNpemUpCisgeworQEAgLTE4MSw3ICsxNjYsOCBAQCBHY29tcGlsZSAoY2hhciBjb25zdCAqcGF0dGVybiwgc2l6ZV90IHNpemUpCisgICBzaXplX3QgdG90YWwgPSBzaXplOworICAgY2hhciBjb25zdCAqbW90aWYgPSBwYXR0ZXJuOworIAorLSAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX0dSRVAgfCBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUpOworKyAgY2hlY2tfdXRmOCAoKTsKKysgIHJlX3NldF9zeW50YXggKFJFX1NZTlRBWF9HUkVQIHwgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FIHwgKG1hdGNoX2ljYXNlID8gUkVfSUNBU0UgOiAwKSk7CisgICBkZmFzeW50YXggKFJFX1NZTlRBWF9HUkVQIHwgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FLCBtYXRjaF9pY2FzZSwgZW9sYnl0ZSk7CisgCisgICAvKiBGb3IgR05VIHJlZ2V4IGNvbXBpbGVyIHdlIGhhdmUgdG8gcGFzcyB0aGUgcGF0dGVybnMgc2VwYXJhdGVseSB0byBkZXRlY3QKK0BAIC0yMTgsNiArMjA0LDEwIEBAIEdjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyAgICAgICBtb3RpZiA9IHNlcDsKKyAgICAgfSB3aGlsZSAoc2VwICYmIHRvdGFsICE9IDApOworIAorKyAgLyogU3RyaXAgdHJhaWxpbmcgbmV3bGluZS4gKi8KKysgIGlmIChzaXplICYmIHBhdHRlcm5bc2l6ZSAtIDFdID09ICdcbicpCisrICAgIHNpemUtLTsKKysKKyAgIC8qIEluIHRoZSBtYXRjaF93b3JkcyBhbmQgbWF0Y2hfbGluZXMgY2FzZXMsIHdlIHVzZSBhIGRpZmZlcmVudCBwYXR0ZXJuCisgICAgICBmb3IgdGhlIERGQSBtYXRjaGVyIHRoYXQgd2lsbCBxdWlja2x5IHRocm93IG91dCBjYXNlcyB0aGF0IHdvbid0IHdvcmsuCisgICAgICBUaGVuIGlmIERGQSBzdWNjZWVkcyB3ZSBkbyBzb21lIGhhaXJ5IHN0dWZmIHVzaW5nIHRoZSByZWdleCBtYXRjaGVyCitAQCAtMjMzLDcgKzIyMyw3IEBAIEdjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyAgICAgICBzdGF0aWMgY2hhciBjb25zdCBsaW5lX2VuZFtdID0gIlxcKSQiOworICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHdvcmRfYmVnW10gPSAiXFwoXlxcfFteWzphbG51bTpdX11cXClcXCgiOworICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHdvcmRfZW5kW10gPSAiXFwpXFwoW15bOmFsbnVtOl1fXVxcfCRcXCkiOworLSAgICAgIGNoYXIgKm4gPSBtYWxsb2MgKHNpemVvZiB3b3JkX2JlZyAtIDEgKyBzaXplICsgc2l6ZW9mIHdvcmRfZW5kKTsKKysgICAgICBjaGFyICpuID0geG1hbGxvYyAoc2l6ZW9mIHdvcmRfYmVnIC0gMSArIHNpemUgKyBzaXplb2Ygd29yZF9lbmQpOworICAgICAgIHNpemVfdCBpOworICAgICAgIHN0cmNweSAobiwgbWF0Y2hfbGluZXMgPyBsaW5lX2JlZyA6IHdvcmRfYmVnKTsKKyAgICAgICBpID0gc3RybGVuIChuKTsKK0BAIC0yNTcsMTQgKzI0NywxNSBAQCBFY29tcGlsZSAoY2hhciBjb25zdCAqcGF0dGVybiwgc2l6ZV90IHNpemUpCisgICBzaXplX3QgdG90YWwgPSBzaXplOworICAgY2hhciBjb25zdCAqbW90aWYgPSBwYXR0ZXJuOworIAorKyAgY2hlY2tfdXRmOCAoKTsKKyAgIGlmIChzdHJjbXAgKG1hdGNoZXIsICJhd2siKSA9PSAwKQorICAgICB7CistICAgICAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX0FXSyk7CisrICAgICAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX0FXSyB8IChtYXRjaF9pY2FzZSA/IFJFX0lDQVNFIDogMCkpOworICAgICAgIGRmYXN5bnRheCAoUkVfU1lOVEFYX0FXSywgbWF0Y2hfaWNhc2UsIGVvbGJ5dGUpOworICAgICB9CisgICBlbHNlCisgICAgIHsKKy0gICAgICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfUE9TSVhfRUdSRVApOworKyAgICAgIHJlX3NldF9zeW50YXggKFJFX1NZTlRBWF9QT1NJWF9FR1JFUCB8IChtYXRjaF9pY2FzZSA/IFJFX0lDQVNFIDogMCkpOworICAgICAgIGRmYXN5bnRheCAoUkVfU1lOVEFYX1BPU0lYX0VHUkVQLCBtYXRjaF9pY2FzZSwgZW9sYnl0ZSk7CisgICAgIH0KKyAKK0BAIC0zMDEsNiArMjkyLDEwIEBAIEVjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyAgICAgICBtb3RpZiA9IHNlcDsKKyAgICAgfSB3aGlsZSAoc2VwICYmIHRvdGFsICE9IDApOworIAorKyAgLyogU3RyaXAgdHJhaWxpbmcgbmV3bGluZS4gKi8KKysgIGlmIChzaXplICYmIHBhdHRlcm5bc2l6ZSAtIDFdID09ICdcbicpCisrICAgIHNpemUtLTsKKysKKyAgIC8qIEluIHRoZSBtYXRjaF93b3JkcyBhbmQgbWF0Y2hfbGluZXMgY2FzZXMsIHdlIHVzZSBhIGRpZmZlcmVudCBwYXR0ZXJuCisgICAgICBmb3IgdGhlIERGQSBtYXRjaGVyIHRoYXQgd2lsbCBxdWlja2x5IHRocm93IG91dCBjYXNlcyB0aGF0IHdvbid0IHdvcmsuCisgICAgICBUaGVuIGlmIERGQSBzdWNjZWVkcyB3ZSBkbyBzb21lIGhhaXJ5IHN0dWZmIHVzaW5nIHRoZSByZWdleCBtYXRjaGVyCitAQCAtMzE2LDcgKzMxMSw3IEBAIEVjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyAgICAgICBzdGF0aWMgY2hhciBjb25zdCBsaW5lX2VuZFtdID0gIikkIjsKKyAgICAgICBzdGF0aWMgY2hhciBjb25zdCB3b3JkX2JlZ1tdID0gIihefFteWzphbG51bTpdX10pKCI7CisgICAgICAgc3RhdGljIGNoYXIgY29uc3Qgd29yZF9lbmRbXSA9ICIpKFteWzphbG51bTpdX118JCkiOworLSAgICAgIGNoYXIgKm4gPSBtYWxsb2MgKHNpemVvZiB3b3JkX2JlZyAtIDEgKyBzaXplICsgc2l6ZW9mIHdvcmRfZW5kKTsKKysgICAgICBjaGFyICpuID0geG1hbGxvYyAoc2l6ZW9mIHdvcmRfYmVnIC0gMSArIHNpemUgKyBzaXplb2Ygd29yZF9lbmQpOworICAgICAgIHNpemVfdCBpOworICAgICAgIHN0cmNweSAobiwgbWF0Y2hfbGluZXMgPyBsaW5lX2JlZyA6IHdvcmRfYmVnKTsKKyAgICAgICBpID0gc3RybGVuKG4pOworQEAgLTMzOSwxNSArMzM0LDM0IEBAIEVHZXhlY3V0ZSAoY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICptYXRjaF9zaXplLCBpbnQgZXhhY3QpCisgICBjaGFyIGVvbCA9IGVvbGJ5dGU7CisgICBpbnQgYmFja3JlZiwgc3RhcnQsIGxlbjsKKyAgIHN0cnVjdCBrd3NtYXRjaCBrd3NtOworLSAgc2l6ZV90IGk7CisrICBzaXplX3QgaSwgcmV0X3ZhbDsKKysgIHN0YXRpYyBpbnQgdXNlX2RmYTsKKysgIHN0YXRpYyBpbnQgdXNlX2RmYV9jaGVja2VkID0gMDsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0gIGNoYXIgKm1iX3Byb3BlcnRpZXMgPSBOVUxMOworKyAgaW50IG1iX2N1cl9tYXggPSBNQl9DVVJfTUFYOworKyAgbWJzdGF0ZV90IG1iczsKKysgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyAjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKyAKKysgIGlmICghdXNlX2RmYV9jaGVja2VkKQorKyAgICB7CisrICAgICAgY2hhciAqZ3JlcF91c2VfZGZhID0gZ2V0ZW52ICgiR1JFUF9VU0VfREZBIik7CisrICAgICAgaWYgKCFncmVwX3VzZV9kZmEpCisrCXsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0gIGlmIChNQl9DVVJfTUFYID4gMSAmJiBrd3NldCkKKy0gICAgbWJfcHJvcGVydGllcyA9IGNoZWNrX211bHRpYnl0ZV9zdHJpbmcoYnVmLCBzaXplKTsKKysJICAvKiBUdXJuIG9mZiBERkEgd2hlbiBwcm9jZXNzaW5nIG11bHRpYnl0ZSBpbnB1dC4gKi8KKysJICB1c2VfZGZhID0gKE1CX0NVUl9NQVggPT0gMSk7CisrI2Vsc2UKKysJICB1c2VfZGZhID0gMTsKKyAjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIHVzZV9kZmEgPSBhdG9pIChncmVwX3VzZV9kZmEpOworKwl9CisrCisrICAgICAgdXNlX2RmYV9jaGVja2VkID0gMTsKKysgICAgfQorIAorICAgYnVmbGltID0gYnVmICsgc2l6ZTsKKyAKK0BAIC0zNTgsNDcgKzM3MiwxMjAgQEAgRUdleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsIGludCBleGFjdCkKKyAJICBpZiAoa3dzZXQpCisgCSAgICB7CisgCSAgICAgIC8qIEZpbmQgYSBwb3NzaWJsZSBtYXRjaCB1c2luZyB0aGUgS1dzZXQgbWF0Y2hlci4gKi8KKy0JICAgICAgc2l6ZV90IG9mZnNldCA9IGt3c2V4ZWMgKGt3c2V0LCBiZWcsIGJ1ZmxpbSAtIGJlZywgJmt3c20pOworKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkgICAgICBzaXplX3QgYnl0ZXNfbGVmdCA9IDA7CisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCSAgICAgIHNpemVfdCBvZmZzZXQ7CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCSAgICAgIC8qIGt3c2V4ZWMgZG9lc24ndCB3b3JrIHdpdGggbWF0Y2hfaWNhc2UgYW5kIG11bHRpYnl0ZSBpbnB1dC4gKi8KKysJICAgICAgaWYgKG1hdGNoX2ljYXNlICYmIG1iX2N1cl9tYXggPiAxKQorKwkJLyogQXZvaWQga3dzZXQgKi8KKysJCW9mZnNldCA9IDA7CisrCSAgICAgIGVsc2UKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJICAgICAgb2Zmc2V0ID0ga3dzZXhlYyAoa3dzZXQsIGJlZywgYnVmbGltIC0gYmVnLCAma3dzbSk7CisgCSAgICAgIGlmIChvZmZzZXQgPT0gKHNpemVfdCkgLTEpCistCQl7CisrCSAgICAgICAgZ290byBmYWlsdXJlOworICNpZmRlZiBNQlNfU1VQUE9SVAorLQkJICBpZiAoTUJfQ1VSX01BWCA+IDEpCistCQkgICAgZnJlZShtYl9wcm9wZXJ0aWVzKTsKKy0jZW5kaWYKKy0JCSAgcmV0dXJuIChzaXplX3QpLTE7CisrCSAgICAgIGlmIChtYl9jdXJfbWF4ID4gMSAmJiAhdXNpbmdfdXRmOCkKKysJCXsKKysJCSAgYnl0ZXNfbGVmdCA9IG9mZnNldDsKKysJCSAgd2hpbGUgKGJ5dGVzX2xlZnQpCisrCQkgICAgeworKwkJICAgICAgc2l6ZV90IG1sZW4gPSBtYnJsZW4gKGJlZywgYnl0ZXNfbGVmdCwgJm1icyk7CisrCQkgICAgICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMSB8fCBtbGVuID09IDApCisrCQkJeworKwkJCSAgLyogSW5jb21wbGV0ZSBjaGFyYWN0ZXI6IHRyZWF0IGFzIHNpbmdsZS1ieXRlLiAqLworKwkJCSAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJCSAgYmVnKys7CisrCQkJICBieXRlc19sZWZ0LS07CisrCQkJICBjb250aW51ZTsKKysJCQl9CisrCisrCQkgICAgICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMikKKysJCQkvKiBPZmZzZXQgcG9pbnRzIGluc2lkZSBtdWx0aWJ5dGUgY2hhcmFjdGVyOgorKwkJCSAqIG5vIGdvb2QuICovCisrCQkJYnJlYWs7CisrCisrCQkgICAgICBiZWcgKz0gbWxlbjsKKysJCSAgICAgIGJ5dGVzX2xlZnQgLT0gbWxlbjsKKysJCSAgICB9CisgCQl9CisrCSAgICAgIGVsc2UKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKyAJICAgICAgYmVnICs9IG9mZnNldDsKKyAJICAgICAgLyogTmFycm93IGRvd24gdG8gdGhlIGxpbmUgY29udGFpbmluZyB0aGUgY2FuZGlkYXRlLCBhbmQKKyAJCSBydW4gaXQgdGhyb3VnaCBERkEuICovCisgCSAgICAgIGVuZCA9IG1lbWNocihiZWcsIGVvbCwgYnVmbGltIC0gYmVnKTsKKyAJICAgICAgZW5kKys7CisgI2lmZGVmIE1CU19TVVBQT1JUCistCSAgICAgIGlmIChNQl9DVVJfTUFYID4gMSAmJiBtYl9wcm9wZXJ0aWVzW2JlZyAtIGJ1Zl0gPT0gMCkKKysJICAgICAgaWYgKG1iX2N1cl9tYXggPiAxICYmIGJ5dGVzX2xlZnQpCisgCQljb250aW51ZTsKKy0jZW5kaWYKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKyAJICAgICAgd2hpbGUgKGJlZyA+IGJ1ZiAmJiBiZWdbLTFdICE9IGVvbCkKKyAJCS0tYmVnOworLQkgICAgICBpZiAoa3dzbS5pbmRleCA8IGt3c2V0X2V4YWN0X21hdGNoZXMpCistCQlnb3RvIHN1Y2Nlc3M7CistCSAgICAgIGlmIChkZmFleGVjICgmZGZhLCBiZWcsIGVuZCAtIGJlZywgJmJhY2tyZWYpID09IChzaXplX3QpIC0xKQorKwkgICAgICBpZiAoCisrI2lmZGVmIE1CU19TVVBQT1JUCisrCQkgICEobWF0Y2hfaWNhc2UgJiYgbWJfY3VyX21heCA+IDEpICYmCisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCQkgIChrd3NtLmluZGV4IDwga3dzZXRfZXhhY3RfbWF0Y2hlcykpCisrCQlnb3RvIHN1Y2Nlc3NfaW5fYmVnX2FuZF9lbmQ7CisrCSAgICAgIGlmICh1c2VfZGZhICYmCisrCQkgIGRmYWV4ZWMgKCZkZmEsIGJlZywgZW5kIC0gYmVnLCAmYmFja3JlZikgPT0gKHNpemVfdCkgLTEpCisgCQljb250aW51ZTsKKyAJICAgIH0KKyAJICBlbHNlCisgCSAgICB7CisgCSAgICAgIC8qIE5vIGdvb2QgZml4ZWQgc3RyaW5nczsgc3RhcnQgd2l0aCBERkEuICovCistCSAgICAgIHNpemVfdCBvZmZzZXQgPSBkZmFleGVjICgmZGZhLCBiZWcsIGJ1ZmxpbSAtIGJlZywgJmJhY2tyZWYpOworKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkgICAgICBzaXplX3QgYnl0ZXNfbGVmdCA9IDA7CisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCSAgICAgIHNpemVfdCBvZmZzZXQgPSAwOworKwkgICAgICBpZiAodXNlX2RmYSkKKysJCW9mZnNldCA9IGRmYWV4ZWMgKCZkZmEsIGJlZywgYnVmbGltIC0gYmVnLCAmYmFja3JlZik7CisgCSAgICAgIGlmIChvZmZzZXQgPT0gKHNpemVfdCkgLTEpCisgCQlicmVhazsKKyAJICAgICAgLyogTmFycm93IGRvd24gdG8gdGhlIGxpbmUgd2UndmUgZm91bmQuICovCisrI2lmZGVmIE1CU19TVVBQT1JUCisrCSAgICAgIGlmIChtYl9jdXJfbWF4ID4gMSAmJiAhdXNpbmdfdXRmOCkKKysJCXsKKysJCSAgYnl0ZXNfbGVmdCA9IG9mZnNldDsKKysJCSAgd2hpbGUgKGJ5dGVzX2xlZnQpCisrCQkgICAgeworKwkJICAgICAgc2l6ZV90IG1sZW4gPSBtYnJsZW4gKGJlZywgYnl0ZXNfbGVmdCwgJm1icyk7CisrCQkgICAgICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMSB8fCBtbGVuID09IDApCisrCQkJeworKwkJCSAgLyogSW5jb21wbGV0ZSBjaGFyYWN0ZXI6IHRyZWF0IGFzIHNpbmdsZS1ieXRlLiAqLworKwkJCSAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJCSAgYmVnKys7CisrCQkJICBieXRlc19sZWZ0LS07CisrCQkJICBjb250aW51ZTsKKysJCQl9CisrCisrCQkgICAgICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMikKKysJCQkvKiBPZmZzZXQgcG9pbnRzIGluc2lkZSBtdWx0aWJ5dGUgY2hhcmFjdGVyOgorKwkJCSAqIG5vIGdvb2QuICovCisrCQkJYnJlYWs7CisrCisrCQkgICAgICBiZWcgKz0gbWxlbjsKKysJCSAgICAgIGJ5dGVzX2xlZnQgLT0gbWxlbjsKKysJCSAgICB9CisrCQl9CisrCSAgICAgIGVsc2UKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKyAJICAgICAgYmVnICs9IG9mZnNldDsKKyAJICAgICAgZW5kID0gbWVtY2hyIChiZWcsIGVvbCwgYnVmbGltIC0gYmVnKTsKKyAJICAgICAgZW5kKys7CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCSAgICAgIGlmIChtYl9jdXJfbWF4ID4gMSAmJiBieXRlc19sZWZ0KQorKwkJY29udGludWU7CisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisgCSAgICAgIHdoaWxlIChiZWcgPiBidWYgJiYgYmVnWy0xXSAhPSBlb2wpCisgCQktLWJlZzsKKyAJICAgIH0KKyAJICAvKiBTdWNjZXNzZnVsLCBubyBiYWNrcmVmZXJlbmNlcyBlbmNvdW50ZXJlZCEgKi8KKy0JICBpZiAoIWJhY2tyZWYpCistCSAgICBnb3RvIHN1Y2Nlc3M7CisrCSAgaWYgKHVzZV9kZmEgJiYgIWJhY2tyZWYpCisrCSAgICBnb3RvIHN1Y2Nlc3NfaW5fYmVnX2FuZF9lbmQ7CisgCX0KKyAgICAgICBlbHNlCisgCWVuZCA9IGJlZyArIHNpemU7CitAQCAtNDEzLDE0ICs1MDAsMTEgQEAgRUdleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsIGludCBleGFjdCkKKyAJCQkJICAgICAgIGVuZCAtIGJlZyAtIDEsICYocGF0dGVybnNbaV0ucmVncykpKSkKKyAJICAgIHsKKyAJICAgICAgbGVuID0gcGF0dGVybnNbaV0ucmVncy5lbmRbMF0gLSBzdGFydDsKKy0JICAgICAgaWYgKGV4YWN0KQorLQkJeworLQkJICAqbWF0Y2hfc2l6ZSA9IGxlbjsKKy0JCSAgcmV0dXJuIHN0YXJ0OworLQkJfQorKwkgICAgICBpZiAoZXhhY3QgJiYgIW1hdGNoX3dvcmRzKQorKwkgICAgICAgIGdvdG8gc3VjY2Vzc19pbl9zdGFydF9hbmRfbGVuOworIAkgICAgICBpZiAoKCFtYXRjaF9saW5lcyAmJiAhbWF0Y2hfd29yZHMpCisgCQkgIHx8IChtYXRjaF9saW5lcyAmJiBsZW4gPT0gZW5kIC0gYmVnIC0gMSkpCistCQlnb3RvIHN1Y2Nlc3M7CisrCQlnb3RvIHN1Y2Nlc3NfaW5fYmVnX2FuZF9lbmQ7CisgCSAgICAgIC8qIElmIC13LCBjaGVjayBpZiB0aGUgbWF0Y2ggYWxpZ25zIHdpdGggd29yZCBib3VuZGFyaWVzLgorIAkJIFdlIGRvIHRoaXMgaXRlcmF0aXZlbHkgYmVjYXVzZToKKyAJCSAoYSkgdGhlIGxpbmUgbWF5IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBvY2N1cmVuY2Ugb2YgdGhlCitAQCAtNDMxLDEwICs1MTUsMTE0IEBAIEVHZXhlY3V0ZSAoY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICptYXRjaF9zaXplLCBpbnQgZXhhY3QpCisgCSAgICAgIGlmIChtYXRjaF93b3JkcykKKyAJCXdoaWxlIChzdGFydCA+PSAwKQorIAkJICB7CistCQkgICAgaWYgKChzdGFydCA9PSAwIHx8ICFXQ0hBUiAoKHVuc2lnbmVkIGNoYXIpIGJlZ1tzdGFydCAtIDFdKSkKKy0JCQkmJiAobGVuID09IGVuZCAtIGJlZyAtIDEKKy0JCQkgICAgfHwgIVdDSEFSICgodW5zaWduZWQgY2hhcikgYmVnW3N0YXJ0ICsgbGVuXSkpKQorLQkJICAgICAgZ290byBzdWNjZXNzOworKwkJICAgIGludCBsd29yZF9tYXRjaCA9IDA7CisrCQkgICAgaWYgKHN0YXJ0ID09IDApCisrCQkgICAgICBsd29yZF9tYXRjaCA9IDE7CisrCQkgICAgZWxzZQorKwkJICAgICAgeworKwkJCWFzc2VydCAoc3RhcnQgPiAwKTsKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJCQlpZiAobWJfY3VyX21heCA+IDEpCisrCQkJICB7CisrCQkJICAgIGNvbnN0IGNoYXIgKnM7CisrCQkJICAgIHNpemVfdCBtcjsKKysJCQkgICAgd2NoYXJfdCBwd2M7CisrCisrCQkJICAgIC8qIExvY2F0ZSB0aGUgc3RhcnQgb2YgdGhlIG11bHRpYnl0ZSBjaGFyYWN0ZXIKKysJCQkgICAgICAgYmVmb3JlIHRoZSBtYXRjaCBwb3NpdGlvbiAoPT0gYmVnICsgc3RhcnQpLiAqLworKwkJCSAgICBpZiAodXNpbmdfdXRmOCkKKysJCQkgICAgICB7CisrCQkJCS8qIFVURi04IGlzIGEgc3BlY2lhbCBjYXNlOiBzY2FuIGJhY2t3YXJkcworKwkJCQkgICB1bnRpbCB3ZSBmaW5kIGEgNy1iaXQgY2hhcmFjdGVyIG9yIGEKKysJCQkJICAgbGVhZCBieXRlLiAqLworKwkJCQlzID0gYmVnICsgc3RhcnQgLSAxOworKwkJCQl3aGlsZSAocyA+IGJ1ZgorKwkJCQkgICAgICAgJiYgKHVuc2lnbmVkIGNoYXIpICpzID49IDB4ODAKKysJCQkJICAgICAgICYmICh1bnNpZ25lZCBjaGFyKSAqcyA8PSAweGJmKQorKwkJCQkgIC0tczsKKysJCQkgICAgICB9CisrCQkJICAgIGVsc2UKKysJCQkgICAgICB7CisrCQkJCS8qIFNjYW4gZm9yd2FyZHMgdG8gZmluZCB0aGUgc3RhcnQgb2YgdGhlCisrCQkJCSAgIGxhc3QgY29tcGxldGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUKKysJCQkJICAgbWF0Y2ggcG9zaXRpb24uICAqLworKwkJCQlzaXplX3QgYnl0ZXNfbGVmdCA9IHN0YXJ0IC0gMTsKKysJCQkJcyA9IGJlZzsKKysJCQkJd2hpbGUgKGJ5dGVzX2xlZnQgPiAwKQorKwkJCQkgIHsKKysJCQkJICAgIG1yID0gbWJybGVuIChzLCBieXRlc19sZWZ0LCAmbWJzKTsKKysJCQkJICAgIGlmIChtciA9PSAoc2l6ZV90KSAtMSB8fCBtciA9PSAwKQorKwkJCQkgICAgICB7CisrCQkJCQltZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzKSk7CisrCQkJCQlzKys7CisrCQkJCQlieXRlc19sZWZ0LS07CisrCQkJCQljb250aW51ZTsKKysJCQkJICAgICAgfQorKwkJCQkgICAgaWYgKG1yID09IChzaXplX3QpIC0yKQorKwkJCQkgICAgICB7CisrCQkJCQltZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzKSk7CisrCQkJCQlicmVhazsKKysJCQkJICAgICAgfQorKwkJCQkgICAgcyArPSBtcjsKKysJCQkJICAgIGJ5dGVzX2xlZnQgLT0gbXI7CisrCQkJCSAgfQorKwkJCSAgICAgIH0KKysJCQkgICAgbXIgPSBtYnJ0b3djICgmcHdjLCBzLCBiZWcgKyBzdGFydCAtIHMsICZtYnMpOworKwkJCSAgICBpZiAobXIgPT0gKHNpemVfdCkgLTIgfHwgbXIgPT0gKHNpemVfdCkgLTEgfHwKKysJCQkJbXIgPT0gMCkKKysJCQkgICAgICB7CisrCQkJCW1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJCQkJbHdvcmRfbWF0Y2ggPSAxOworKwkJCSAgICAgIH0KKysJCQkgICAgZWxzZSBpZiAoIShpc3dhbG51bSAocHdjKSB8fCBwd2MgPT0gTCdfJykKKysJCQkJICAgICAmJiBtciA9PSBiZWcgKyBzdGFydCAtIHMpCisrCQkJICAgICAgbHdvcmRfbWF0Y2ggPSAxOworKwkJCSAgfQorKwkJCWVsc2UKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJCQlpZiAoIVdDSEFSICgodW5zaWduZWQgY2hhcikgYmVnW3N0YXJ0IC0gMV0pKQorKwkJCSAgbHdvcmRfbWF0Y2ggPSAxOworKwkJICAgICAgfQorKworKwkJICAgIGlmIChsd29yZF9tYXRjaCkKKysJCSAgICAgIHsKKysJCQlpbnQgcndvcmRfbWF0Y2ggPSAwOworKwkJCWlmIChzdGFydCArIGxlbiA9PSBlbmQgLSBiZWcgLSAxKQorKwkJCSAgcndvcmRfbWF0Y2ggPSAxOworKwkJCWVsc2UKKysJCQkgIHsKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJCQkgICAgaWYgKG1iX2N1cl9tYXggPiAxKQorKwkJCSAgICAgIHsKKysJCQkJd2NoYXJfdCBud2M7CisrCQkJCWludCBtcjsKKysKKysJCQkJbXIgPSBtYnRvd2MgKCZud2MsIGJlZyArIHN0YXJ0ICsgbGVuLAorKwkJCQkJICAgICBlbmQgLSBiZWcgLSBzdGFydCAtIGxlbiAtIDEpOworKwkJCQlpZiAobXIgPD0gMCkKKysJCQkJICB7CisrCQkJCSAgICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkJCSAgICByd29yZF9tYXRjaCA9IDE7CisrCQkJCSAgfQorKwkJCQllbHNlIGlmICghaXN3YWxudW0gKG53YykgJiYgbndjICE9IEwnXycpCisrCQkJCSAgcndvcmRfbWF0Y2ggPSAxOworKwkJCSAgICAgIH0KKysJCQkgICAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwkJCSAgICBpZiAoIVdDSEFSICgodW5zaWduZWQgY2hhcikgYmVnW3N0YXJ0ICsgbGVuXSkpCisrCQkJICAgICAgcndvcmRfbWF0Y2ggPSAxOworKwkJCSAgfQorKworKwkJCWlmIChyd29yZF9tYXRjaCkKKysJCQkgIHsKKysJCQkgICAgaWYgKCFleGFjdCkKKysJCQkgICAgICAvKiBSZXR1cm5zIHRoZSB3aG9sZSBsaW5lLiAqLworKwkJCSAgICAgIGdvdG8gc3VjY2Vzc19pbl9iZWdfYW5kX2VuZDsKKysJCQkgICAgZWxzZQorKwkJCSAgICAgIC8qIFJldHVybnMganVzdCB0aGlzIHdvcmQgbWF0Y2guICovCisrCQkJICAgICAgZ290byBzdWNjZXNzX2luX3N0YXJ0X2FuZF9sZW47CisrCQkJICB9CisrCQkgICAgICB9CisgCQkgICAgaWYgKGxlbiA+IDApCisgCQkgICAgICB7CisgCQkJLyogVHJ5IGEgc2hvcnRlciBsZW5ndGggYW5jaG9yZWQgYXQgdGhlIHNhbWUgcGxhY2UuICovCitAQCAtNDYxLDI2ICs2NDksMTU0IEBAIEVHZXhlY3V0ZSAoY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICptYXRjaF9zaXplLCBpbnQgZXhhY3QpCisgCSAgICB9CisgCX0gLyogZm9yIFJlZ2V4IHBhdHRlcm5zLiAgKi8KKyAgICAgfSAvKiBmb3IgKGJlZyA9IGVuZCAuLikgKi8KKy0jaWZkZWYgTUJTX1NVUFBPUlQKKy0gIGlmIChNQl9DVVJfTUFYID4gMSAmJiBtYl9wcm9wZXJ0aWVzKQorLSAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKy0jZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysKKysgZmFpbHVyZToKKyAgIHJldHVybiAoc2l6ZV90KSAtMTsKKyAKKy0gc3VjY2VzczoKKy0jaWZkZWYgTUJTX1NVUFBPUlQKKy0gIGlmIChNQl9DVVJfTUFYID4gMSAmJiBtYl9wcm9wZXJ0aWVzKQorLSAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKy0jZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKy0gICptYXRjaF9zaXplID0gZW5kIC0gYmVnOworLSAgcmV0dXJuIGJlZyAtIGJ1ZjsKKysgc3VjY2Vzc19pbl9iZWdfYW5kX2VuZDoKKysgIGxlbiA9IGVuZCAtIGJlZzsKKysgIHN0YXJ0ID0gYmVnIC0gYnVmOworKyAgLyogRkFMTFRIUk9VR0ggKi8KKysKKysgc3VjY2Vzc19pbl9zdGFydF9hbmRfbGVuOgorKyAgKm1hdGNoX3NpemUgPSBsZW47CisrICByZXR1cm4gc3RhcnQ7CisgfQorIAorKyNpZmRlZiBNQlNfU1VQUE9SVAorK3N0YXRpYyBpbnQgZl9pX211bHRpYnl0ZTsgLyogd2hldGhlciB3ZSdyZSB1c2luZyB0aGUgbmV3IC1GaSBNQiBtZXRob2QgKi8KKytzdGF0aWMgc3RydWN0CisreworKyAgd2NoYXJfdCAqKnBhdHRlcm5zOworKyAgc2l6ZV90IGNvdW50LCBtYXhsZW47CisrICB1bnNpZ25lZCBjaGFyICptYXRjaDsKKyt9IEZpbWI7CisrI2VuZGlmCisrCisgc3RhdGljIHZvaWQKKyBGY29tcGlsZSAoY2hhciBjb25zdCAqcGF0dGVybiwgc2l6ZV90IHNpemUpCisgeworKyAgaW50IG1iX2N1cl9tYXggPSBNQl9DVVJfTUFYOworICAgY2hhciBjb25zdCAqYmVnLCAqbGltLCAqZXJyOworIAorKyAgY2hlY2tfdXRmOCAoKTsKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysgIC8qIFN1cHBvcnQgLUYgLWkgZm9yIFVURi04IGlucHV0LiAqLworKyAgaWYgKG1hdGNoX2ljYXNlICYmIG1iX2N1cl9tYXggPiAxKQorKyAgICB7CisrICAgICAgbWJzdGF0ZV90IG1iczsKKysgICAgICB3Y2hhcl90ICp3Y3BhdHRlcm4gPSB4bWFsbG9jICgoc2l6ZSArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CisrICAgICAgY29uc3QgY2hhciAqcGF0dGVybmVuZCA9IHBhdHRlcm47CisrICAgICAgc2l6ZV90IHdjc2l6ZTsKKysgICAgICBrd3NldF90IGZpbWJfa3dzZXQgPSBOVUxMOworKyAgICAgIGNoYXIgKnN0YXJ0cyA9IE5VTEw7CisrICAgICAgd2NoYXJfdCAqd2NiZWcsICp3Y2xpbTsKKysgICAgICBzaXplX3QgYWxsb2NhdGVkID0gMDsKKysKKysgICAgICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzKSk7CisrIyBpZmRlZiBfX0dOVV9MSUJSQVJZX18KKysgICAgICB3Y3NpemUgPSBtYnNucnRvd2NzICh3Y3BhdHRlcm4sICZwYXR0ZXJuZW5kLCBzaXplLCBzaXplLCAmbWJzKTsKKysgICAgICBpZiAocGF0dGVybmVuZCAhPSBwYXR0ZXJuICsgc2l6ZSkKKysJd2NzaXplID0gKHNpemVfdCkgLTE7CisrIyBlbHNlCisrICAgICAgeworKwljaGFyICpwYXR0ZXJuY29weSA9IHhtYWxsb2MgKHNpemUgKyAxKTsKKysKKysJbWVtY3B5IChwYXR0ZXJuY29weSwgcGF0dGVybiwgc2l6ZSk7CisrCXBhdHRlcm5jb3B5W3NpemVdID0gJ1wwJzsKKysJcGF0dGVybmVuZCA9IHBhdHRlcm5jb3B5OworKwl3Y3NpemUgPSBtYnNydG93Y3MgKHdjcGF0dGVybiwgJnBhdHRlcm5lbmQsIHNpemUsICZtYnMpOworKwlpZiAocGF0dGVybmVuZCAhPSBwYXR0ZXJuY29weSArIHNpemUpCisrCSAgd2NzaXplID0gKHNpemVfdCkgLTE7CisrCWZyZWUgKHBhdHRlcm5jb3B5KTsKKysgICAgICB9CisrIyBlbmRpZgorKyAgICAgIGlmICh3Y3NpemUgKyAyIDw9IDIpCisrCXsKKytmaW1iX2ZhaWw6CisrCSAgZnJlZSAod2NwYXR0ZXJuKTsKKysJICBmcmVlIChzdGFydHMpOworKwkgIGlmIChmaW1iX2t3c2V0KQorKwkgICAga3dzZnJlZSAoZmltYl9rd3NldCk7CisrCSAgZnJlZSAoRmltYi5wYXR0ZXJucyk7CisrCSAgRmltYi5wYXR0ZXJucyA9IE5VTEw7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBpZiAoIShmaW1iX2t3c2V0ID0ga3dzYWxsb2MgKE5VTEwpKSkKKysJICAgIGVycm9yICgyLCAwLCBfKCJtZW1vcnkgZXhoYXVzdGVkIikpOworKworKwkgIHN0YXJ0cyA9IHhtYWxsb2MgKG1iX2N1cl9tYXggKiAzKTsKKysJICB3Y2JlZyA9IHdjcGF0dGVybjsKKysJICBkbworKwkgICAgeworKwkgICAgICBpbnQgaTsKKysJICAgICAgc2l6ZV90IHdjbGVuOworKworKwkgICAgICBpZiAoRmltYi5jb3VudCA+PSBhbGxvY2F0ZWQpCisrCQl7CisrCQkgIGlmIChhbGxvY2F0ZWQgPT0gMCkKKysJCSAgICBhbGxvY2F0ZWQgPSAxMjg7CisrCQkgIGVsc2UKKysJCSAgICBhbGxvY2F0ZWQgKj0gMjsKKysJCSAgRmltYi5wYXR0ZXJucyA9IHhyZWFsbG9jIChGaW1iLnBhdHRlcm5zLAorKwkJCQkJICAgIHNpemVvZiAod2NoYXJfdCAqKSAqIGFsbG9jYXRlZCk7CisrCQl9CisrCSAgICAgIEZpbWIucGF0dGVybnNbRmltYi5jb3VudCsrXSA9IHdjYmVnOworKwkgICAgICBmb3IgKHdjbGltID0gd2NiZWc7CisrCQkgICB3Y2xpbSA8IHdjcGF0dGVybiArIHdjc2l6ZSAmJiAqd2NsaW0gIT0gTCdcbic7ICsrd2NsaW0pCisrCQkqd2NsaW0gPSB0b3dsb3dlciAoKndjbGltKTsKKysJICAgICAgKndjbGltID0gTCdcMCc7CisrCSAgICAgIHdjbGVuID0gd2NsaW0gLSB3Y2JlZzsKKysJICAgICAgaWYgKHdjbGVuID4gRmltYi5tYXhsZW4pCisrCQlGaW1iLm1heGxlbiA9IHdjbGVuOworKwkgICAgICBpZiAod2NsZW4gPiAzKQorKwkJd2NsZW4gPSAzOworKwkgICAgICBpZiAod2NsZW4gPT0gMCkKKysJCXsKKysJCSAgaWYgKChlcnIgPSBrd3NpbmNyIChmaW1iX2t3c2V0LCAiIiwgMCkpICE9IDApCisrCQkgICAgZXJyb3IgKDIsIDAsIGVycik7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCWZvciAoaSA9IDA7IGkgPCAoMSA8PCB3Y2xlbik7IGkrKykKKysJCSAgeworKwkJICAgIGNoYXIgKnAgPSBzdGFydHM7CisrCQkgICAgaW50IGosIGs7CisrCisrCQkgICAgZm9yIChqID0gMDsgaiA8IHdjbGVuOyArK2opCisrCQkgICAgICB7CisrCQkJd2NoYXJfdCB3YyA9IHdjYmVnW2pdOworKwkJCWlmIChpICYgKDEgPDwgaikpCisrCQkJICB7CisrCQkJICAgIHdjID0gdG93dXBwZXIgKHdjKTsKKysJCQkgICAgaWYgKHdjID09IHdjYmVnW2pdKQorKwkJCSAgICAgIGNvbnRpbnVlOworKwkJCSAgfQorKwkJCWsgPSB3Y3RvbWIgKHAsIHdjKTsKKysJCQlpZiAoayA8PSAwKQorKwkJCSAgZ290byBmaW1iX2ZhaWw7CisrCQkJcCArPSBrOworKwkJICAgICAgfQorKwkJICAgIGlmICgoZXJyID0ga3dzaW5jciAoZmltYl9rd3NldCwgc3RhcnRzLCBwIC0gc3RhcnRzKSkgIT0gMCkKKysJCSAgICAgIGVycm9yICgyLCAwLCBlcnIpOworKwkJICB9CisrCSAgICAgIGlmICh3Y2xpbSA8IHdjcGF0dGVybiArIHdjc2l6ZSkKKysJCSsrd2NsaW07CisrCSAgICAgIHdjYmVnID0gd2NsaW07CisrCSAgICB9CisrCSAgd2hpbGUgKHdjYmVnIDwgd2NwYXR0ZXJuICsgd2NzaXplKTsKKysJICBmX2lfbXVsdGlieXRlID0gMTsKKysJICBrd3NldCA9IGZpbWJfa3dzZXQ7CisrCSAgZnJlZSAoc3RhcnRzKTsKKysJICBGaW1iLm1hdGNoID0geG1hbGxvYyAoRmltYi5jb3VudCk7CisrCSAgaWYgKChlcnIgPSBrd3NwcmVwIChrd3NldCkpICE9IDApCisrCSAgICBlcnJvciAoMiwgMCwgZXJyKTsKKysJICByZXR1cm47CisrCX0KKysgICAgfQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKworKworICAga3dzaW5pdCAoKTsKKyAgIGJlZyA9IHBhdHRlcm47CisgICBkbworQEAgLTQ5OSw2ICs4MTUsNzYgQEAgRmNvbXBpbGUgKGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBzaXplKQorICAgICBlcnJvciAoMiwgMCwgZXJyKTsKKyB9CisgCisrI2lmZGVmIE1CU19TVVBQT1JUCisrc3RhdGljIGludAorK0ZpbWJleGVjIChjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKnBsZW4sIGludCBleGFjdCkKKyt7CisrICBzaXplX3QgbGVuLCBsZXR0ZXIsIGk7CisrICBpbnQgcmV0ID0gLTE7CisrICBtYnN0YXRlX3QgbWJzOworKyAgd2NoYXJfdCB3YzsKKysgIGludCBwYXR0ZXJuc19sZWZ0OworKworKyAgYXNzZXJ0IChtYXRjaF9pY2FzZSAmJiBmX2lfbXVsdGlieXRlID09IDEpOworKyAgYXNzZXJ0IChNQl9DVVJfTUFYID4gMSk7CisrCisrICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzKSk7CisrICBtZW1zZXQgKEZpbWIubWF0Y2gsICdcMScsIEZpbWIuY291bnQpOworKyAgbGV0dGVyID0gbGVuID0gMDsKKysgIHBhdHRlcm5zX2xlZnQgPSAxOworKyAgd2hpbGUgKHBhdHRlcm5zX2xlZnQgJiYgbGVuIDw9IHNpemUpCisrICAgIHsKKysgICAgICBzaXplX3QgYzsKKysKKysgICAgICBwYXR0ZXJuc19sZWZ0ID0gMDsKKysgICAgICBpZiAobGVuIDwgc2l6ZSkKKysJeworKwkgIGMgPSBtYnJ0b3djICgmd2MsIGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgJm1icyk7CisrCSAgaWYgKGMgKyAyIDw9IDIpCisrCSAgICByZXR1cm4gcmV0OworKworKwkgIHdjID0gdG93bG93ZXIgKHdjKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGMgPSAxOworKwkgIHdjID0gTCdcMCc7CisrCX0KKysKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgRmltYi5jb3VudDsgaSsrKQorKwl7CisrCSAgaWYgKEZpbWIubWF0Y2hbaV0pCisrCSAgICB7CisrCSAgICAgIGlmIChGaW1iLnBhdHRlcm5zW2ldW2xldHRlcl0gPT0gTCdcMCcpCisrCQl7CisrCQkgIC8qIEZvdW5kIGEgbWF0Y2guICovCisrCQkgICpwbGVuID0gbGVuOworKwkJICBpZiAoIWV4YWN0ICYmICFtYXRjaF93b3JkcykKKysJCSAgICByZXR1cm4gMDsKKysJCSAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIC8qIEZvciAtdyBvciBleGFjdCBsb29rIGZvciBsb25nZXN0IG1hdGNoLiAgKi8KKysJCSAgICAgIHJldCA9IDA7CisrCQkgICAgICBGaW1iLm1hdGNoW2ldID0gJ1wwJzsKKysJCSAgICAgIGNvbnRpbnVlOworKwkJICAgIH0KKysJCX0KKysKKysJICAgICAgaWYgKEZpbWIucGF0dGVybnNbaV1bbGV0dGVyXSA9PSB3YykKKysJCXBhdHRlcm5zX2xlZnQgPSAxOworKwkgICAgICBlbHNlCisrCQlGaW1iLm1hdGNoW2ldID0gJ1wwJzsKKysJICAgIH0KKysJfQorKworKyAgICAgIGxlbiArPSBjOworKyAgICAgIGxldHRlcisrOworKyAgICB9CisrCisrICByZXR1cm4gcmV0OworK30KKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysKKyBzdGF0aWMgc2l6ZV90CisgRmV4ZWN1dGUgKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwgaW50IGV4YWN0KQorIHsKK0BAIC01MDYsODggKzg5MiwyNjggQEAgRmV4ZWN1dGUgKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwgaW50IGV4YWN0KQorICAgcmVnaXN0ZXIgc2l6ZV90IGxlbjsKKyAgIGNoYXIgZW9sID0gZW9sYnl0ZTsKKyAgIHN0cnVjdCBrd3NtYXRjaCBrd3NtYXRjaDsKKysgIHNpemVfdCByZXRfdmFsOworICNpZmRlZiBNQlNfU1VQUE9SVAorLSAgY2hhciAqbWJfcHJvcGVydGllczsKKy0gIGlmIChNQl9DVVJfTUFYID4gMSkKKy0gICAgbWJfcHJvcGVydGllcyA9IGNoZWNrX211bHRpYnl0ZV9zdHJpbmcgKGJ1Ziwgc2l6ZSk7CisrICBpbnQgbWJfY3VyX21heCA9IE1CX0NVUl9NQVg7CisrICBtYnN0YXRlX3QgbWJzOworKyAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKyAgY29uc3QgY2hhciAqbGFzdF9jaGFyID0gTlVMTDsKKyAjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKyAKKy0gIGZvciAoYmVnID0gYnVmOyBiZWcgPD0gYnVmICsgc2l6ZTsgKytiZWcpCisrICBmb3IgKGJlZyA9IGJ1ZjsgYmVnIDwgYnVmICsgc2l6ZTsgKytiZWcpCisgICAgIHsKKy0gICAgICBzaXplX3Qgb2Zmc2V0ID0ga3dzZXhlYyAoa3dzZXQsIGJlZywgYnVmICsgc2l6ZSAtIGJlZywgJmt3c21hdGNoKTsKKysgICAgICBzaXplX3Qgb2Zmc2V0OworKyAgICAgIG9mZnNldCA9IGt3c2V4ZWMgKGt3c2V0LCBiZWcsIGJ1ZiArIHNpemUgLSBiZWcsICZrd3NtYXRjaCk7CisrCisgICAgICAgaWYgKG9mZnNldCA9PSAoc2l6ZV90KSAtMSkKKy0JeworKwlnb3RvIGZhaWx1cmU7CisgI2lmZGVmIE1CU19TVVBQT1JUCistCSAgaWYgKE1CX0NVUl9NQVggPiAxKQorLQkgICAgZnJlZShtYl9wcm9wZXJ0aWVzKTsKKy0jZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKy0JICByZXR1cm4gb2Zmc2V0OworKyAgICAgIGlmIChtYl9jdXJfbWF4ID4gMSAmJiAhdXNpbmdfdXRmOCkKKysJeworKwkgIHNpemVfdCBieXRlc19sZWZ0ID0gb2Zmc2V0OworKwkgIHdoaWxlIChieXRlc19sZWZ0KQorKwkgICAgeworKwkgICAgICBzaXplX3QgbWxlbiA9IG1icmxlbiAoYmVnLCBieXRlc19sZWZ0LCAmbWJzKTsKKysKKysJICAgICAgbGFzdF9jaGFyID0gYmVnOworKwkgICAgICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMSB8fCBtbGVuID09IDApCisrCQl7CisrCQkgIC8qIEluY29tcGxldGUgY2hhcmFjdGVyOiB0cmVhdCBhcyBzaW5nbGUtYnl0ZS4gKi8KKysJCSAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJICBiZWcrKzsKKysJCSAgYnl0ZXNfbGVmdC0tOworKwkJICBjb250aW51ZTsKKysJCX0KKysKKysJICAgICAgaWYgKG1sZW4gPT0gKHNpemVfdCkgLTIpCisrCQkvKiBPZmZzZXQgcG9pbnRzIGluc2lkZSBtdWx0aWJ5dGUgY2hhcmFjdGVyOiBubyBnb29kLiAqLworKwkJYnJlYWs7CisrCisrCSAgICAgIGJlZyArPSBtbGVuOworKwkgICAgICBieXRlc19sZWZ0IC09IG1sZW47CisrCSAgICB9CisrCisrCSAgaWYgKGJ5dGVzX2xlZnQpCisrCSAgICBjb250aW51ZTsKKyAJfQorLSNpZmRlZiBNQlNfU1VQUE9SVAorLSAgICAgIGlmIChNQl9DVVJfTUFYID4gMSAmJiBtYl9wcm9wZXJ0aWVzW29mZnNldCtiZWctYnVmXSA9PSAwKQorLQljb250aW51ZTsgLyogSXQgaXMgYSBwYXJ0IG9mIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICAqLworKyAgICAgIGVsc2UKKyAjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKyAgICAgICBiZWcgKz0gb2Zmc2V0OworLSAgICAgIGxlbiA9IGt3c21hdGNoLnNpemVbMF07CistICAgICAgaWYgKGV4YWN0KQorLQl7CistCSAgKm1hdGNoX3NpemUgPSBsZW47CisgI2lmZGVmIE1CU19TVVBQT1JUCistCSAgaWYgKE1CX0NVUl9NQVggPiAxKQorLQkgICAgZnJlZSAobWJfcHJvcGVydGllcyk7CisrICAgICAgLyogRm9yIGZfaV9tdWx0aWJ5dGUsIHRoZSBzdHJpbmcgYXQgYmVnIG5vdyBtYXRjaGVzIGZpcnN0IDMgY2hhcnMgb2YKKysJIG9uZSBvZiB0aGUgc2VhcmNoIHN0cmluZ3MgKGxlc3MgaWYgdGhlcmUgYXJlIHNob3J0ZXIgc2VhcmNoIHN0cmluZ3MpLgorKwkgU2VlIGlmIHRoaXMgaXMgYSByZWFsIG1hdGNoLiAgKi8KKysgICAgICBpZiAoZl9pX211bHRpYnl0ZQorKwkgICYmIEZpbWJleGVjIChiZWcsIGJ1ZiArIHNpemUgLSBiZWcsICZrd3NtYXRjaC5zaXplWzBdLCBleGFjdCkpCisrCWdvdG8gbmV4dF9jaGFyOworICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworLQkgIHJldHVybiBiZWcgLSBidWY7CistCX0KKysgICAgICBsZW4gPSBrd3NtYXRjaC5zaXplWzBdOworKyAgICAgIGlmIChleGFjdCAmJiAhbWF0Y2hfd29yZHMpCisrCWdvdG8gc3VjY2Vzc19pbl9iZWdfYW5kX2xlbjsKKyAgICAgICBpZiAobWF0Y2hfbGluZXMpCisgCXsKKyAJICBpZiAoYmVnID4gYnVmICYmIGJlZ1stMV0gIT0gZW9sKQorLQkgICAgY29udGludWU7CisrCSAgICBnb3RvIG5leHRfY2hhcjsKKyAJICBpZiAoYmVnICsgbGVuIDwgYnVmICsgc2l6ZSAmJiBiZWdbbGVuXSAhPSBlb2wpCistCSAgICBjb250aW51ZTsKKysJICAgIGdvdG8gbmV4dF9jaGFyOworIAkgIGdvdG8gc3VjY2VzczsKKyAJfQorICAgICAgIGVsc2UgaWYgKG1hdGNoX3dvcmRzKQorLQlmb3IgKHRyeSA9IGJlZzsgbGVuOyApCistCSAgeworLQkgICAgaWYgKHRyeSA+IGJ1ZiAmJiBXQ0hBUigodW5zaWduZWQgY2hhcikgdHJ5Wy0xXSkpCistCSAgICAgIGJyZWFrOworLQkgICAgaWYgKHRyeSArIGxlbiA8IGJ1ZiArIHNpemUgJiYgV0NIQVIoKHVuc2lnbmVkIGNoYXIpIHRyeVtsZW5dKSkKKy0JICAgICAgeworLQkJb2Zmc2V0ID0ga3dzZXhlYyAoa3dzZXQsIGJlZywgLS1sZW4sICZrd3NtYXRjaCk7CistCQlpZiAob2Zmc2V0ID09IChzaXplX3QpIC0xKQorLQkJICB7CisrCXsKKysJICB3aGlsZSAobGVuKQorKwkgICAgeworKwkgICAgICBpbnQgd29yZF9tYXRjaCA9IDA7CisrCSAgICAgIGlmIChiZWcgPiBidWYpCisrCQl7CisgI2lmZGVmIE1CU19TVVBQT1JUCistCQkgICAgaWYgKE1CX0NVUl9NQVggPiAxKQorLQkJICAgICAgZnJlZSAobWJfcHJvcGVydGllcyk7CisrCQkgIGlmIChtYl9jdXJfbWF4ID4gMSkKKysJCSAgICB7CisrCQkgICAgICBjb25zdCBjaGFyICpzOworKwkJICAgICAgaW50IG1yOworKwkJICAgICAgd2NoYXJfdCBwd2M7CisrCisrCQkgICAgICBpZiAodXNpbmdfdXRmOCkKKysJCQl7CisrCQkJICBzID0gYmVnIC0gMTsKKysJCQkgIHdoaWxlIChzID4gYnVmCisrCQkJCSAmJiAodW5zaWduZWQgY2hhcikgKnMgPj0gMHg4MAorKwkJCQkgJiYgKHVuc2lnbmVkIGNoYXIpICpzIDw9IDB4YmYpCisrCQkJICAgIC0tczsKKysJCQl9CisrCQkgICAgICBlbHNlCisrCQkJcyA9IGxhc3RfY2hhcjsKKysJCSAgICAgIG1yID0gbWJ0b3djICgmcHdjLCBzLCBiZWcgLSBzKTsKKysJCSAgICAgIGlmIChtciA8PSAwKQorKwkJCW1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJCSAgICAgIGVsc2UgaWYgKChpc3dhbG51bSAocHdjKSB8fCBwd2MgPT0gTCdfJykKKysJCQkgICAgICAgJiYgbXIgPT0gKGludCkgKGJlZyAtIHMpKQorKwkJCWdvdG8gbmV4dF9jaGFyOworKwkJICAgIH0KKysJCSAgZWxzZQorICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworLQkJICAgIHJldHVybiBvZmZzZXQ7CistCQkgIH0KKy0JCXRyeSA9IGJlZyArIG9mZnNldDsKKy0JCWxlbiA9IGt3c21hdGNoLnNpemVbMF07CistCSAgICAgIH0KKy0JICAgIGVsc2UKKy0JICAgICAgZ290byBzdWNjZXNzOworLQkgIH0KKysJCSAgaWYgKFdDSEFSICgodW5zaWduZWQgY2hhcikgYmVnWy0xXSkpCisrCQkgICAgZ290byBuZXh0X2NoYXI7CisrCQl9CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCSAgICAgIGlmIChtYl9jdXJfbWF4ID4gMSkKKysJCXsKKysJCSAgd2NoYXJfdCBud2M7CisrCQkgIGludCBtcjsKKysKKysJCSAgbXIgPSBtYnRvd2MgKCZud2MsIGJlZyArIGxlbiwgYnVmICsgc2l6ZSAtIGJlZyAtIGxlbik7CisrCQkgIGlmIChtciA8PSAwKQorKwkJICAgIHsKKysJCSAgICAgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJCSAgICAgIHdvcmRfbWF0Y2ggPSAxOworKwkJICAgIH0KKysJCSAgZWxzZSBpZiAoIWlzd2FsbnVtIChud2MpICYmIG53YyAhPSBMJ18nKQorKwkJICAgIHdvcmRfbWF0Y2ggPSAxOworKwkJfQorKwkgICAgICBlbHNlCisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCQlpZiAoYmVnICsgbGVuID49IGJ1ZiArIHNpemUgfHwgIVdDSEFSICgodW5zaWduZWQgY2hhcikgYmVnW2xlbl0pKQorKwkJICB3b3JkX21hdGNoID0gMTsKKysJICAgICAgaWYgKHdvcmRfbWF0Y2gpCisrCQl7CisrCQkgIGlmICghZXhhY3QpCisrCQkgICAgLyogUmV0dXJucyB0aGUgd2hvbGUgbGluZSBub3cgd2Uga25vdyB0aGVyZSdzIGEgd29yZCBtYXRjaC4gKi8KKysJCSAgICBnb3RvIHN1Y2Nlc3M7CisrCQkgIGVsc2UKKysJCSAgICAvKiBSZXR1cm5zIGp1c3QgdGhpcyB3b3JkIG1hdGNoLiAqLworKwkJICAgIGdvdG8gc3VjY2Vzc19pbl9iZWdfYW5kX2xlbjsKKysJCX0KKysJICAgICAgaWYgKGxlbiA+IDApCisrCQl7CisrCQkgIC8qIFRyeSBhIHNob3J0ZXIgbGVuZ3RoIGFuY2hvcmVkIGF0IHRoZSBzYW1lIHBsYWNlLiAqLworKwkJICAtLWxlbjsKKysJCSAgb2Zmc2V0ID0ga3dzZXhlYyAoa3dzZXQsIGJlZywgbGVuLCAma3dzbWF0Y2gpOworKworKwkJICBpZiAob2Zmc2V0ID09IC0xKQorKwkJICAgIGdvdG8gbmV4dF9jaGFyOyAvKiBUcnkgYSBkaWZmZXJlbnQgYW5jaG9yLiAqLworKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkJICBpZiAobWJfY3VyX21heCA+IDEgJiYgIXVzaW5nX3V0ZjgpCisrCQkgICAgeworKwkJICAgICAgc2l6ZV90IGJ5dGVzX2xlZnQgPSBvZmZzZXQ7CisrCQkgICAgICB3aGlsZSAoYnl0ZXNfbGVmdCkKKysJCQl7CisrCQkJICBzaXplX3QgbWxlbiA9IG1icmxlbiAoYmVnLCBieXRlc19sZWZ0LCAmbWJzKTsKKysKKysJCQkgIGxhc3RfY2hhciA9IGJlZzsKKysJCQkgIGlmIChtbGVuID09IChzaXplX3QpIC0xIHx8IG1sZW4gPT0gMCkKKysJCQkgICAgeworKwkJCSAgICAgIC8qIEluY29tcGxldGUgY2hhcmFjdGVyOiB0cmVhdCBhcyBzaW5nbGUtYnl0ZS4gKi8KKysJCQkgICAgICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkJICAgICAgYmVnKys7CisrCQkJICAgICAgYnl0ZXNfbGVmdC0tOworKwkJCSAgICAgIGNvbnRpbnVlOworKwkJCSAgICB9CisrCisrCQkJICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMikKKysJCQkgICAgeworKwkJCSAgICAgIC8qIE9mZnNldCBwb2ludHMgaW5zaWRlIG11bHRpYnl0ZSBjaGFyYWN0ZXI6CisrCQkJICAgICAgICogbm8gZ29vZC4gKi8KKysJCQkgICAgICBicmVhazsKKysJCQkgICAgfQorKworKwkJCSAgYmVnICs9IG1sZW47CisrCQkJICBieXRlc19sZWZ0IC09IG1sZW47CisrCQkJfQorKworKwkJICAgICAgaWYgKGJ5dGVzX2xlZnQpCisrCQkJeworKwkJCSAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJCSAgZ290byBuZXh0X2NoYXI7IC8qIFRyeSBhIGRpZmZlcmVudCBhbmNob3IuICovCisrCQkJfQorKwkJICAgIH0KKysJCSAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwkJICBiZWcgKz0gb2Zmc2V0OworKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkJICAvKiBUaGUgc3RyaW5nIGF0IGJlZyBub3cgbWF0Y2hlcyBmaXJzdCAzIGNoYXJzIG9mIG9uZSBvZgorKwkJICAgICB0aGUgc2VhcmNoIHN0cmluZ3MgKGxlc3MgaWYgdGhlcmUgYXJlIHNob3J0ZXIgc2VhcmNoCisrCQkgICAgIHN0cmluZ3MpLiAgU2VlIGlmIHRoaXMgaXMgYSByZWFsIG1hdGNoLiAgKi8KKysJCSAgaWYgKGZfaV9tdWx0aWJ5dGUKKysJCSAgICAgICYmIEZpbWJleGVjIChiZWcsIGxlbiAtIG9mZnNldCwgJmt3c21hdGNoLnNpemVbMF0sCisrCQkJCSAgIGV4YWN0KSkKKysJCSAgICBnb3RvIG5leHRfY2hhcjsKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJCSAgbGVuID0ga3dzbWF0Y2guc2l6ZVswXTsKKysJCX0KKysJICAgIH0KKysJfQorICAgICAgIGVsc2UKKyAJZ290byBzdWNjZXNzOworLSAgICB9CistCisrbmV4dF9jaGFyOjsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0gIGlmIChNQl9DVVJfTUFYID4gMSkKKy0gICAgZnJlZSAobWJfcHJvcGVydGllcyk7CisrICAgICAgLyogQWR2YW5jZSB0byBuZXh0IGNoYXJhY3Rlci4gIEZvciBNQl9DVVJfTUFYID09IDEgY2FzZSB0aGlzIGlzIGhhbmRsZWQKKysJIGJ5ICsrYmVnIGFib3ZlLiAgKi8KKysgICAgICBpZiAobWJfY3VyX21heCA+IDEpCisrCXsKKysJICBpZiAodXNpbmdfdXRmOCkKKysJICAgIHsKKysJICAgICAgdW5zaWduZWQgY2hhciBjID0gKmJlZzsKKysJICAgICAgaWYgKGMgPj0gMHhjMikKKysJCXsKKysJCSAgaWYgKGMgPCAweGUwKQorKwkJICAgICsrYmVnOworKwkJICBlbHNlIGlmIChjIDwgMHhmMCkKKysJCSAgICBiZWcgKz0gMjsKKysJCSAgZWxzZSBpZiAoYyA8IDB4ZjgpCisrCQkgICAgYmVnICs9IDM7CisrCQkgIGVsc2UgaWYgKGMgPCAweGZjKQorKwkJICAgIGJlZyArPSA0OworKwkJICBlbHNlIGlmIChjIDwgMHhmZSkKKysJCSAgICBiZWcgKz0gNTsKKysJCX0KKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIHNpemVfdCBsID0gbWJybGVuIChiZWcsIGJ1ZiArIHNpemUgLSBiZWcsICZtYnMpOworKworKwkgICAgICBsYXN0X2NoYXIgPSBiZWc7CisrCSAgICAgIGlmIChsICsgMiA+PSAyKQorKwkJYmVnICs9IGwgLSAxOworKwkgICAgICBlbHNlCisrCQltZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCSAgICB9CisrCX0KKyAjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysgICAgfQorKworKyBmYWlsdXJlOgorICAgcmV0dXJuIC0xOworIAorICBzdWNjZXNzOgorKyNpZmRlZiBNQlNfU1VQUE9SVAorKyAgaWYgKG1iX2N1cl9tYXggPiAxICYmICF1c2luZ191dGY4KQorKyAgICB7CisrICAgICAgZW5kID0gYmVnICsgbGVuOworKyAgICAgIHdoaWxlIChlbmQgPCBidWYgKyBzaXplKQorKwl7CisrCSAgc2l6ZV90IG1sZW4gPSBtYnJsZW4gKGVuZCwgYnVmICsgc2l6ZSAtIGVuZCwgJm1icyk7CisrCSAgaWYgKG1sZW4gPT0gKHNpemVfdCkgLTEgfHwgbWxlbiA9PSAoc2l6ZV90KSAtMiB8fCBtbGVuID09IDApCisrCSAgICB7CisrCSAgICAgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJICAgICAgbWxlbiA9IDE7CisrCSAgICB9CisrCSAgaWYgKG1sZW4gPT0gMSAmJiAqZW5kID09IGVvbCkKKysJICAgIGJyZWFrOworKworKwkgIGVuZCArPSBtbGVuOworKwl9CisrICAgIH0KKysgIGVsc2UKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKyAgIGVuZCA9IG1lbWNociAoYmVnICsgbGVuLCBlb2wsIChidWYgKyBzaXplKSAtIChiZWcgKyBsZW4pKTsKKysKKyAgIGVuZCsrOworICAgd2hpbGUgKGJ1ZiA8IGJlZyAmJiBiZWdbLTFdICE9IGVvbCkKKyAgICAgLS1iZWc7CistICAqbWF0Y2hfc2l6ZSA9IGVuZCAtIGJlZzsKKy0jaWZkZWYgTUJTX1NVUFBPUlQKKy0gIGlmIChNQl9DVVJfTUFYID4gMSkKKy0gICAgZnJlZSAobWJfcHJvcGVydGllcyk7CistI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrICBsZW4gPSBlbmQgLSBiZWc7CisrICAvKiBGQUxMVEhST1VHSCAqLworKworKyBzdWNjZXNzX2luX2JlZ19hbmRfbGVuOgorKyAgKm1hdGNoX3NpemUgPSBsZW47CisgICByZXR1cm4gYmVnIC0gYnVmOworIH0KKyAKK0BAIC03MDEsOCArMTI2Nyw5IEBAIFBleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsIGludCBleGFjdCkKKyAgICAgICBjaGFyIGVvbCA9IGVvbGJ5dGU7CisgICAgICAgaWYgKCFleGFjdCkKKyAJeworLQkgIGVuZCA9IG1lbWNociAoZW5kLCBlb2wsIGJ1ZmxpbSAtIGVuZCk7CistCSAgZW5kKys7CisrCSAgd2hpbGUgKGVuZCA8IGJ1ZmxpbSkKKysJICAgIGlmICgqZW5kKysgPT0gZW9sKQorKwkgICAgICBicmVhazsKKyAJICB3aGlsZSAoYnVmIDwgYmVnICYmIGJlZ1stMV0gIT0gZW9sKQorIAkgICAgLS1iZWc7CisgCX0KKy0tIAorMS44LjQuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dyZXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2NjZTVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDUyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworYXV0b21ha2UgMS4xMiBoYXMgZGVwcmljYXRlZCBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0CisKK3RoaXMgcGF0Y2ggYXZvaWRzIHRoZXNlIGtpbmRzIG9mIGVycm9yczoKKworfCBjb25maWd1cmUuaW46MzM6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9hY2xvY2FsLTEuMTIvcHJvdG9zLm00OjEyOiBBTV9DX1BST1RPVFlQRVMgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCBjb25maWd1cmUuaW46MzM6IHRoZSB0b3AgbGV2ZWwKK3wgYXV0b200dGU6IG00IGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCisuLi4KK3wgbGliL01ha2VmaWxlLmFtOjI6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgc3JjL01ha2VmaWxlLmFtOjI6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgYXV0b3JlY29uZjogYXV0b21ha2UgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDQKKworSW5kZXg6IGdyZXAtMi41LjFhL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdyZXAtMi41LjFhLm9yaWcvY29uZmlndXJlLmluCisrKysgZ3JlcC0yLjUuMWEvY29uZmlndXJlLmluCitAQCAtMzAsNyArMzAsNiBAQCBBQ19QUk9HX1JBTkxJQgorIAorIGRubCBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorIEFDX1NZU19MQVJHRUZJTEUKKy1BTV9DX1BST1RPVFlQRVMKKyBBQ19UWVBFX1NJWkVfVAorIEFDX0NIRUNLX1RZUEUoc3NpemVfdCwgaW50KQorIEFDX0NfQ09OU1QKK0luZGV4OiBncmVwLTIuNS4xYS9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xYS5vcmlnL2xpYi9NYWtlZmlsZS5hbQorKysrIGdyZXAtMi41LjFhL2xpYi9NYWtlZmlsZS5hbQorQEAgLTEsNSArMSw1IEBACisgIworLUFVVE9NQUtFX09QVElPTlMgPSAuLi9zcmMvYW5zaTJrbnIKKytBVVRPTUFLRV9PUFRJT05TID0gCisgCisgU1VCRElSUyA9IHBvc2l4CisgCitJbmRleDogZ3JlcC0yLjUuMWEvc3JjL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3JlcC0yLjUuMWEub3JpZy9zcmMvTWFrZWZpbGUuYW0KKysrKyBncmVwLTIuNS4xYS9zcmMvTWFrZWZpbGUuYW0KK0BAIC0xLDUgKzEsNSBAQAorICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gY3JlYXRlIE1ha2VmaWxlLmluCistQVVUT01BS0VfT1BUSU9OUyA9IGFuc2kya25yIG5vLWRlcGVuZGVuY2llcworK0FVVE9NQUtFX09QVElPTlMgPSBuby1kZXBlbmRlbmNpZXMKKyAKKyBMTiA9IGxuCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL3VjbGliYy1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL3VjbGliYy1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUwNTRmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvdWNsaWJjLWZpeC5wYXRjaApAQCAtMCwwICsxLDU1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworIyBGaXggdG8gdXNlIG1lbXBjcHkgaW5zdGVhZCBvZiBfX21lbXBjcHkuIFRoaXMgaXMgbmVlZGVkIGZvciB1Y2xpYmMgd2hpY2gKKyMgZG9lc24ndCBkZWZpbmUgX19tZW1wY3B5LCBvbmx5IG1lbXBjcHkuIFNpbmNlIGJvdGggdWNsaWJjIGFuZCBnbGliYyBoYXZlCisjIG1lbXBjcHksIHdlJ2xsIGp1c3QgdXNlIHRoYXQgaW5zdGVhZC4KKyMgUGF0Y2ggc291cmNlOiBPcGVuRW1iZWRkZWQKKworSW5kZXg6IGdyZXAtMi41LjEvaW50bC9sb2NhbGVhbGlhcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3JlcC0yLjUuMS5vcmlnL2ludGwvbG9jYWxlYWxpYXMuYwkyMDAyLTAzLTE0IDAwOjM5OjA2LjAwMDAwMDAwMCArMTEwMAorKysrIGdyZXAtMi41LjEvaW50bC9sb2NhbGVhbGlhcy5jCTIwMDctMDUtMTcgMTM6NTM6NTguMDAwMDAwMDAwICsxMDAwCitAQCAtNjUsNyArNjUsNyBAQAorICMgZGVmaW5lIHN0cmNhc2VjbXAgX19zdHJjYXNlY21wCisgCisgIyBpZm5kZWYgbWVtcGNweQorLSMgIGRlZmluZSBtZW1wY3B5IF9fbWVtcGNweQorKyMgIGVycm9yICJtZW1wY3B5IG5vdCBkZXRlY3RlZCIKKyAjIGVuZGlmCisgIyBkZWZpbmUgSEFWRV9NRU1QQ1BZCTEKKyAjIGRlZmluZSBIQVZFX19fRlNFVExPQ0tJTkcJMQorSW5kZXg6IGdyZXAtMi41LjEvbGliL2dldG9wdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3JlcC0yLjUuMS5vcmlnL2xpYi9nZXRvcHQuYwkyMDAxLTAzLTA0IDE2OjMzOjEyLjAwMDAwMDAwMCArMTEwMAorKysrIGdyZXAtMi41LjEvbGliL2dldG9wdC5jCTIwMDctMDUtMTcgMTM6NTE6NDQuMDAwMDAwMDAwICsxMDAwCitAQCAtMzI2LDcgKzMyNiw3IEBACisgCW5vbm9wdGlvbl9mbGFnc19sZW4gPSBub25vcHRpb25fZmxhZ3NfbWF4X2xlbiA9IDA7CisgICAgICAgZWxzZQorIAl7CistCSAgbWVtc2V0IChfX21lbXBjcHkgKG5ld19zdHIsIF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncywKKysJICBtZW1zZXQgKG1lbXBjcHkgKG5ld19zdHIsIF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncywKKyAJCQkgICAgIG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuKSwKKyAJCSAgJ1wwJywgdG9wICsgMSAtIG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuKTsKKyAJICBub25vcHRpb25fZmxhZ3NfbWF4X2xlbiA9IHRvcCArIDE7CitAQCAtNDM3LDcgKzQzNyw3IEBACisgCSAgICAgIGlmIChfX2dldG9wdF9ub25vcHRpb25fZmxhZ3MgPT0gTlVMTCkKKyAJCW5vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gLTE7CisgCSAgICAgIGVsc2UKKy0JCW1lbXNldCAoX19tZW1wY3B5IChfX2dldG9wdF9ub25vcHRpb25fZmxhZ3MsIG9yaWdfc3RyLCBsZW4pLAorKwkJbWVtc2V0IChtZW1wY3B5IChfX2dldG9wdF9ub25vcHRpb25fZmxhZ3MsIG9yaWdfc3RyLCBsZW4pLAorIAkJCSdcMCcsIG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuIC0gbGVuKTsKKyAJICAgIH0KKyAJfQorSW5kZXg6IGdyZXAtMi41LjEvbGliL3JlZ2V4LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xLm9yaWcvbGliL3JlZ2V4LmMJMjAwMS0wNC0wMyAwNDowNDo0NS4wMDAwMDAwMDAgKzEwMDAKKysrKyBncmVwLTIuNS4xL2xpYi9yZWdleC5jCTIwMDctMDUtMTcgMTM6NTE6NDguMDAwMDAwMDAwICsxMDAwCitAQCAtNzg0Miw3ICs3ODQyLDcgQEAKKyAgICAgICBpZiAobXNnX3NpemUgPiBlcnJidWZfc2l6ZSkKKyAgICAgICAgIHsKKyAjaWYgZGVmaW5lZCBIQVZFX01FTVBDUFkgfHwgZGVmaW5lZCBfTElCQworLQkgICooKGNoYXIgKikgX19tZW1wY3B5IChlcnJidWYsIG1zZywgZXJyYnVmX3NpemUgLSAxKSkgPSAnXDAnOworKwkgICooKGNoYXIgKikgbWVtcGNweSAoZXJyYnVmLCBtc2csIGVycmJ1Zl9zaXplIC0gMSkpID0gJ1wwJzsKKyAjZWxzZQorICAgICAgICAgICBtZW1jcHkgKGVycmJ1ZiwgbXNnLCBlcnJidWZfc2l6ZSAtIDEpOworICAgICAgICAgICBlcnJidWZbZXJyYnVmX3NpemUgLSAxXSA9IDA7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMWE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZ251bGliLm1rIGIvbGliL2dudWxpYi5taworaW5kZXggZTFkNzRkYi4uYzBlOTJkZCAxMDA2NDQKKy0tLSBhL2xpYi9nbnVsaWIubWsKKysrKyBiL2xpYi9nbnVsaWIubWsKK0BAIC0xODgyLDcgKzE4ODIsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvZ3JlcC1maXgtQ1ZFLTIwMTUtMTM0NS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC9ncmVwLWZpeC1DVkUtMjAxNS0xMzQ1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4OGE5ODgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvZ3JlcC1maXgtQ1ZFLTIwMTUtMTM0NS5wYXRjaApAQCAtMCwwICsxLDE1NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitCYWNrcG9ydCBwYXRjaCB0byBmaXggQ1ZFLTIwMTUtMTM0NS4KK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2dyZXAuZ2l0L2NvbW1pdC8/aWQ9ODNhOTViZAorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorRnJvbSA4M2E5NWJkOGM4NTYxODc1Yjk0OGNhZGQ0MTdjNjUzZGJlN2VmMmUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWXVsaXkgUGlzZXRza3kgPHlwaXNldHNreUBmYi5jb20+CitEYXRlOiBUaHUsIDEgSmFuIDIwMTUgMTU6MzY6NTUgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZ3JlcCAtRjogZml4IGEgaGVhcCBidWZmZXIgKHJlYWQpIG92ZXJydW4KKworZ3JlcCdzIHJlYWQgYnVmZmVyIGlzIG9mdGVuIGZpbGxlZCB0byBpdHMgZnVsbCBzaXplLCBleGNlcHQgd2hlbgorcmVhZGluZyB0aGUgZmluYWwgYnVmZmVyIG9mIGEgZmlsZS4gIEluIHRoYXQgY2FzZSwgdGhlIG51bWJlciBvZgorYnl0ZXMgcmVhZCBtYXkgYmUgZmFyIGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLiAgSG93ZXZlciwgZm9yCitjZXJ0YWluIHVudXN1YWwgcGF0dGVybi90ZXh0IGNvbWJpbmF0aW9ucywgZ3JlcCAtRiB3b3VsZCBtaXN0YWtlbmx5CitleGFtaW5lIGJ5dGVzIGluIHRoYXQgdW5pbml0aWFsaXplZCByZWdpb24gb2YgbWVtb3J5IHdoZW4gc2VhcmNoaW5nCitmb3IgYSBtYXRjaC4gIFdpdGggY2FyZWZ1bGx5IGNob3NlbiBpbnB1dHMsIG9uZSBjYW4gY2F1c2UgZ3JlcCAtRiB0bworcmVhZCBiZXlvbmQgdGhlIGVuZCBvZiB0aGF0IGJ1ZmZlciBhbHRvZ2V0aGVyLiAgVGhpcyBwcm9ibGVtIGFyb3NlIHZpYQorY29tbWl0IHYyLjE4LTkwLWc3Mzg5M2ZmIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBhIG1vcmUgZWZmaWNpZW50CitoZXVyaXN0aWMgdXNpbmcgd2hhdCBpcyBub3cgdGhlIG1lbWNocl9rd3NldCBmdW5jdGlvbi4gVGhlIHVzZSBvZgordGhhdCBmdW5jdGlvbiBpbiBibWV4ZWNfdHJhbnMgY291bGQgbGVhdmUgVFAgbXVjaCBsYXJnZXIgdGhhbiBFUCwKK2FuZCB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGJtX2RlbHRhMl9zZWFyY2ggd291bGQgbWlzdGFrZW5seSBhY2Nlc3MKK2JleW9uZCBlbmQgb2YgdGhlIG1haW4gaW5wdXQgcmVhZCBidWZmZXIuCisKKyogc3JjL2t3c2V0LmMgKGJtZXhlY190cmFucyk6IFdoZW4gVFAgcmVhY2hlcyBvciBleGNlZWRzIEVQLAorZG8gbm90IGNhbGwgYm1fZGVsdGEyX3NlYXJjaC4KKyogdGVzdHMva3dzZXQtYWJ1c2U6IE5ldyBmaWxlLgorKiB0ZXN0cy9NYWtlZmlsZS5hbSAoVEVTVFMpOiBBZGQgaXQuCisqIFRIQU5LUy5pbjogVXBkYXRlLgorKiBORVdTIChCdWcgZml4ZXMpOiBNZW50aW9uIGl0LgorCitQcmlvciB0byB0aGlzIHBhdGNoLCB0aGlzIGNvbW1hbmQgd291bGQgdHJpZ2dlciBhIFVNUjoKKworICBwcmludGYgJTAzNjBkYiAwIHwgdmFsZ3JpbmQgc3JjL2dyZXAgLUYgJChwcmludGYgJTAxOWRYYiAwKQorCisgIFVzZSBvZiB1bmluaXRpYWxpc2VkIHZhbHVlIG9mIHNpemUgOAorICAgICBhdCAweDQxNDJCRTogYm1leGVjX3RyYW5zIChrd3NldC5jOjY1NykKKyAgICAgYnkgMHg0MTQzQ0E6IGJtZXhlYyAoa3dzZXQuYzo2NzgpCisgICAgIGJ5IDB4NDE0OTczOiBrd3NleGVjIChrd3NldC5jOjg0OCkKKyAgICAgYnkgMHg0MTREQzQ6IEZleGVjdXRlIChrd3NlYXJjaC5jOjEyOCkKKyAgICAgYnkgMHg0MDRFMkU6IGdyZXBidWYgKGdyZXAuYzoxMjM4KQorICAgICBieSAweDQwNTRCRjogZ3JlcCAoZ3JlcC5jOjE0MTcpCisgICAgIGJ5IDB4NDA1Q0VCOiBncmVwZGVzYyAoZ3JlcC5jOjE2NDUpCisgICAgIGJ5IDB4NDA1RUMxOiBncmVwX2NvbW1hbmRfbGluZV9hcmcgKGdyZXAuYzoxNjkyKQorICAgICBieSAweDQwNzdENDogbWFpbiAoZ3JlcC5jOjI1NzApCisKK1NlZSB0aGUgYWNjb21wYW55aW5nIHRlc3QgZm9yIGhvdyB0byB0cmlnZ2VyIHRoZSBoZWFwIGJ1ZmZlciBvdmVycnVuLgorCitUaGFua3MgdG8gTmltYSBBZ2hkYWlpIGZvciB0ZXN0aW5nIGFuZCBmaW5kaW5nIG51bWVyb3VzCit3YXlzIHRvIGJyZWFrIGVhcmx5IGl0ZXJhdGlvbnMgb2YgdGhpcyBwYXRjaC4KKy0tLQorIE5FV1MgICAgICAgICAgICAgIHwgIDUgKysrKysKKyBUSEFOS1MuaW4gICAgICAgICB8ICAxICsKKyBzcmMva3dzZXQuYyAgICAgICB8ICAyICsrCisgdGVzdHMvTWFrZWZpbGUuYW0gfCAgMSArCisgdGVzdHMva3dzZXQtYWJ1c2UgfCAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDUgZmlsZXMgY2hhbmdlZCwgNDEgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDc1NSB0ZXN0cy9rd3NldC1hYnVzZQorCitkaWZmIC0tZ2l0IGEvTkVXUyBiL05FV1MKK2luZGV4IDk3NTQ0MGQuLjM4MzVkOGQgMTAwNjQ0CistLS0gYS9ORVdTCisrKysgYi9ORVdTCitAQCAtMiw2ICsyLDExIEBAIEdOVSBncmVwIE5FV1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gb3V0bGluZSAtKi0KKyAKKyAqIE5vdGV3b3J0aHkgY2hhbmdlcyBpbiByZWxlYXNlID8uPyAoPz8/Py0/Py0/PykgWz9dCisgCisrKiogQnVnIGZpeGVzCisrCisrICBncmVwIG5vIGxvbmdlciByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGZyb20gYmV5b25kIHRoZSBlbmQKKysgIG9mIHRoZSBoZWFwLWFsbG9jYXRlZCBpbnB1dCBidWZmZXIuCisrCisgCisgKiBOb3Rld29ydGh5IGNoYW5nZXMgaW4gcmVsZWFzZSAyLjIxICgyMDE0LTExLTIzKSBbc3RhYmxlXQorIAorZGlmZiAtLWdpdCBhL1RIQU5LUy5pbiBiL1RIQU5LUy5pbgoraW5kZXggYWVhZjUxNi4uNjI0NDc4ZCAxMDA2NDQKKy0tLSBhL1RIQU5LUy5pbgorKysrIGIvVEhBTktTLmluCitAQCAtNjIsNiArNjIsNyBAQCBNaWNoYWVsIEFpY2hsbWF5ciAgICAgICAgICAgICAgICAgICBtaWtsYUBueC5jb20KKyBNaWxlcyBCYWRlciAgICAgICAgICAgICAgICAgICAgICAgICBtaWxlc0BjY3MubXQubmVjLmNvLmpwCisgTWlycmF6IE1pcnJheiAgICAgICAgICAgICAgICAgICAgICAgbWlycmF6MUByYW1ibGVyLnJ1CisgTmVsc29uIEguIEYuIEJlZWJlICAgICAgICAgICAgICAgICAgYmVlYmVAbWF0aC51dGFoLmVkdQorK05pbWEgQWdoZGFpaSAgICAgICAgICAgICAgICAgICAgICAgIG5hZ2hkYWlpQGZiLmNvbQorIE9sYWYgS2lyY2ggICAgICAgICAgICAgICAgICAgICAgICAgIG9raXJAbnMubHN0LmRlCisgUGF1bCBLaW1vdG8gICAgICAgICAgICAgICAgICAgICAgICAga2ltb3RvQHNwYWNlbmV0LnRuLmNvcm5lbGwuZWR1CisgUMOpdGVyIFJhZGljcyAgICAgICAgICAgICAgICAgICAgICAgIG1pdGNobnVsbEBnbWFpbC5jb20KK2RpZmYgLS1naXQgYS9zcmMva3dzZXQuYyBiL3NyYy9rd3NldC5jCitpbmRleCA0MDAzYzhkLi4zNzZmN2MzIDEwMDY0NAorLS0tIGEvc3JjL2t3c2V0LmMKKysrKyBiL3NyYy9rd3NldC5jCitAQCAtNjQzLDYgKzY0Myw4IEBAIGJtZXhlY190cmFucyAoa3dzZXRfdCBrd3NldCwgY2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IHNpemUpCisgICAgICAgICAgICAgICAgICAgICBpZiAoISB0cCkKKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgdHArKzsKKysgICAgICAgICAgICAgICAgICAgIGlmIChlcCA8PSB0cCkKKysgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQorICAgICAgICAgICB9CitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggMmNiYTJjZC4uMDUwOGNkMiAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTc1LDYgKzc1LDcgQEAgVEVTVFMgPQkJCQkJCVwKKyAgIGluY29uc2lzdGVudC1yYW5nZQkJCQlcCisgICBpbnZhbGlkLW11bHRpYnl0ZS1pbmZsb29wCQkJXAorICAga2hhZGFmeQkJCQkJXAorKyAga3dzZXQtYWJ1c2UJCQkJCVwKKyAgIGxvbmctbGluZS12cy0yR2lCLXJlYWQJCQlcCisgICBtYXRjaC1saW5lcwkJCQkJXAorICAgbWF4LWNvdW50LW92ZXJyZWFkCQkJCVwKK2RpZmYgLS1naXQgYS90ZXN0cy9rd3NldC1hYnVzZSBiL3Rlc3RzL2t3c2V0LWFidXNlCituZXcgZmlsZSBtb2RlIDEwMDc1NQoraW5kZXggMDAwMDAwMC4uNmQ4ZWMwYworLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdHMva3dzZXQtYWJ1c2UKK0BAIC0wLDAgKzEsMzIgQEAKKysjISAvYmluL3NoCisrIyBFdm9rZSBhIHNlZ2ZhdWx0IGluIGEgaGFyZC10by1yZWFjaCBjb2RlIHBhdGggb2Yga3dzZXQuYy4KKysjIFRoaXMgYnVnIGFmZmVjdGVkIGdyZXAgdmVyc2lvbnMgMi4xOSB0aHJvdWdoIDIuMjEuCisrIworKyMgQ29weXJpZ2h0IChDKSAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKworKy4gIiR7c3JjZGlyPS59L2luaXQuc2giOyBwYXRoX3ByZXBlbmRfIC4uL3NyYworKworK2ZhaWw9MAorKworKyMgVGhpcyB0ZXN0IGNhc2UgY2hvb3NlcyBhIGhheXN0YWNrIG9mIHNpemUgMjYwLDAwMCwgc2luY2UgcHJvZGRpbmcKKysjIHdpdGggZ2RiIHNob3dlZCBhIHJlYWxsb2NhdGlvbiBzbGlnaHRseSBsYXJnZXIgdGhhbiB0aGF0IGluIGZpbGxidWYuCisrIyBUbyByZWFjaCB0aGUgYnVnZ3kgY29kZSwgdGhlIG5lZWRsZSBtdXN0IGhhdmUgbGVuZ3RoIDwgMS8xMSB0aGF0IG9mCisrIyB0aGUgaGF5c3RhY2ssIGFuZCAxMCwwMDAgaXMgYSBuaWNlIHJvdW5kIG51bWJlciB0aGF0IGZpdHMgdGhlIGJpbGwuCisrcHJpbnRmICclMDI2MDAwMGRYeVxuJyAwIHwgZ3JlcCAtRiAkKHByaW50ZiAlMDEwMDAwZHkgMCkKKysKKyt0ZXN0ICQ/ID0gMSB8fCBmYWlsPTEKKysKKytFeGl0ICRmYWlsCistLSAKKzIuNC4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8yLjIxLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwXzIuMjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY2MTA5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8yLjIxLmJiCkBAIC0wLDAgKzEsNDIgQEAKK1NVTU1BUlkgPSAiR05VIGdyZXAgdXRpbGl0eSIKK0hPTUVQQUdFID0gImh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL3Byb2plY3RzL2dyZXAvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz9ncm91cD1ncmVwIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTgwMDZkOWM4MTQyNzdjMWJmYzRjYTIyYWY5NGI1OWVlIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3JlcC9ncmVwLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dyZXAtZml4LUNWRS0yMDE1LTEzNDUucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjQzYzQ4MDY0ZDY0MDk4NjJiOGE4NTBkYjgzYzgwMzhhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUyNDRhMTFjMDBkZWU4ZTdlNWU3MTRiOWFhYTA1M2FjNmNiZmEyN2UxMDRhYmVlMjBkM2M3NzhlNGJiMGU1ZGUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXBlcmwtcmVnZXhwIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9tNC9pbml0Lm00Cit9CisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwltdiAke0R9JHtiaW5kaXJ9L2dyZXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2dyZXAKKwltdiAke0R9JHtiaW5kaXJ9L2VncmVwICR7RH0ke2Jhc2VfYmluZGlyfS9lZ3JlcAorCW12ICR7RH0ke2JpbmRpcn0vZmdyZXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2ZncmVwCisJcm1kaXIgJHtEfSR7YmluZGlyfS8KK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiZ3JlcCBlZ3JlcCBmZ3JlcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtncmVwXSA9ICIke2Jhc2VfYmluZGlyfS9ncmVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2VncmVwXSA9ICIke2Jhc2VfYmluZGlyfS9lZ3JlcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmZ3JlcF0gPSAiJHtiYXNlX2JpbmRpcn0vZmdyZXAiCisKK2V4cG9ydCBDT05GSUdfU0hFTEw9Ii9iaW4vc2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMi41LjFhLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwXzIuNS4xYS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTJkYTI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwXzIuNS4xYS5iYgpAQCAtMCwwICsxLDU2IEBACitTVU1NQVJZID0gIlBhdHRlcm4gbWF0Y2hpbmcgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSB2ZXJzaW9ucyBvZiBjb21tb25seSB1c2VkIGdyZXAgdXRpbGl0aWVzLiAgVGhlIGdyZXAgY29tbWFuZCBzZWFyY2hlcyBvbmUgb3IgbW9yZSBpbnB1dCBcCitmaWxlcyBmb3IgbGluZXMgY29udGFpbmluZyBhIG1hdGNoIHRvIGEgc3BlY2lmaWVkIHBhdHRlcm4uIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIgorCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dyZXAvZ3JlcC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3VjbGliYy1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3JlcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2V0dGV4dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXg2NC1pbnQtdG8tcG9pbnRlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtldmFycyBcCisgICAgICAgICAgIGZpbGU6Ly9ncmVwLUNWRS0yMDEyLTU2NjcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWZvci10ZXhpbmZvLTUuMS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncmVwLWVncmVwLWZncmVwLUZpeC1MU0ItTkctY2FzZXMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjUyMjAyZmU0NjI3NzBmYTZiZTFiYjY2N2JkNmNmMzBjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM4YzhhMmJiOTIyM2QxZmIxYjEwYmRkNjA3Y2Y0NDgzMGFmYzkyZmQ0NTFhYzRjZDA3NjE5YmY5MmJkZDMxMzIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitFWFRSQV9PRUNPTkZfSU5DTFVERURfUkVHRVggPSAiLS13aXRob3V0LWluY2x1ZGVkLXJlZ2V4IgorRVhUUkFfT0VDT05GX0lOQ0xVREVEX1JFR0VYX2xpYmMtbXVzbCA9ICItLXdpdGgtaW5jbHVkZWQtcmVnZXgiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtcGVybC1yZWdleHAgXAorICAgICAgICAgICAgICAgICR7RVhUUkFfT0VDT05GX0lOQ0xVREVEX1JFR0VYfSIKKworQ0ZMQUdTICs9ICItRCBQUk9UT1RZUEVTIgorZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vbTQvaW5pdC5tNAorCWNwIC1mICR7V09SS0RJUn0vTWFrZXZhcnMgJHtTfS9wby8KK30KKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCW12ICR7RH0ke2JpbmRpcn0vZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZ3JlcAorCW12ICR7RH0ke2JpbmRpcn0vZWdyZXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2VncmVwCisJbXYgJHtEfSR7YmluZGlyfS9mZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZmdyZXAKKwlybWRpciAke0R9JHtiaW5kaXJ9LworfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJncmVwIGVncmVwIGZncmVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2dyZXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZWdyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2VncmVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2ZncmVwXSA9ICIke2Jhc2VfYmluZGlyfS9mZ3JlcCIKKworZXhwb3J0IENPTkZJR19TSEVMTD0iL2Jpbi9zaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LWZpeC1iaW5kaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjE4LjEuNC9ncm9mZi0xLjE4LjEuNC1maXgtYmluZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OWFlNzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjE4LjEuNC9ncm9mZi0xLjE4LjEuNC1maXgtYmluZGlyLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWRdCisKK1NpZ25lZC1vZmYtYnk6IE1pbmcgTGl1IDxtaW5nLmxpdUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuc3ViIHwgICAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworLS0tIGEvY29udHJpYi9ncm9mZmVyL01ha2VmaWxlLnN1YgorKysrIGIvY29udHJpYi9ncm9mZmVyL01ha2VmaWxlLnN1YgorQEAgLTM4LDE2ICszOCwxNiBAQCBncm9mZmVyOiBncm9mZmVyLnNoIGdyb2ZmZXIyLnNoIHZlcnNpb24uCisgCSQoUk0pICRAOworIAlzZWQgXAorICAgICAgICAgICAgIC1lICJzfEBnQHwkKGcpfGciIFwKKy0JICAgIC1lICJzfEBCSU5ESVJAfCQoREVTVERJUikkKGJpbmRpcil8ZyIgXAorKwkgICAgLWUgInN8QEJJTkRJUkB8JChiaW5kaXIpfGciIFwKKyAJICAgIC1lICJzfEBsaWJkaXJAfCQoREVTVERJUikkKGxpYmRpcil8ZyIgXAorIAkgICAgLWUgInN8QFZFUlNJT05AfCQodmVyc2lvbikkKHJldmlzaW9uKXxnIiBcCisgCSAgICAkKHNyY2RpcikvZ3JvZmZlci5zaCA+JEA7CisgCWNobW9kICt4ICRACisgCisgaW5zdGFsbF9kYXRhOiBncm9mZmVyCistCS10ZXN0IC1kICQoREVTVERJUikkKGJpbmRpcikgfHwgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChiaW5kaXIpCistCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2dyb2ZmZXIKKy0JJChJTlNUQUxMX1NDUklQVCkgZ3JvZmZlciAkKERFU1RESVIpJChiaW5kaXIpL2dyb2ZmZXIKKysJLXRlc3QgLWQgJChiaW5kaXIpIHx8ICQobWtpbnN0YWxsZGlycykgJChiaW5kaXIpCisrCS0kKFJNKSAkKGJpbmRpcikvZ3JvZmZlcgorKwkkKElOU1RBTExfU0NSSVBUKSBncm9mZmVyICQoYmluZGlyKS9ncm9mZmVyCisgCS10ZXN0IC1kICQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlciB8fCBcCisgICAgICAgICAgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKS9ncm9mZi9ncm9mZmVyCisgCS0kKFJNKSAkKERFU1RESVIpJChsaWJkaXIpL2dyb2ZmL2dyb2ZmZXIvZ3JvZmZlcjIuc2gKK0BAIC01OCw3ICs1OCw3IEBAIGluc3RhbGxfZGF0YTogZ3JvZmZlcgorIAkkKERFU1RESVIpJChsaWJkaXIpL2dyb2ZmL2dyb2ZmZXIvdmVyc2lvbi5zaAorIAorIHVuaW5zdGFsbF9zdWI6CistCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2dyb2ZmZXIKKysJLSQoUk0pICQoYmluZGlyKS9ncm9mZmVyCisgCS0kKFJNKSAkKERFU1RESVIpJChsaWJkaXIpL2dyb2ZmL2dyb2ZmZXIvZ3JvZmZlcjIuc2gKKyAJLSQoUk0pICQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlci92ZXJzaW9uLnNoCisgCS1ybWRpciAkKERFU1RESVIpJChsaWJkaXIpL2dyb2ZmL2dyb2ZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LXJlbW92ZS1tb20ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjE4LjEuNC9ncm9mZi0xLjE4LjEuNC1yZW1vdmUtbW9tLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNGVmZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjE4LjEuNC9ncm9mZi0xLjE4LjEuNC1yZW1vdmUtbW9tLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZF0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorLS0tCisgZ3JvZmYtMS4xOC4xLjQvTWFrZWZpbGUuaW4gfCAgICA3ICstLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDYgZGVsZXRpb25zKC0pCisKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTQ2MCwyNyArNDYwLDIyIEBAIE9USEVSRElSUz1cCisgICBzcmMvcm9mZi9ncm9nIFwKKyAgIHNyYy9yb2ZmL25yb2ZmIFwKKyAgIGNvbnRyaWIvbW0gXAorICAgY29udHJpYi9waWMyZ3JhcGggXAorICAgY29udHJpYi9lcW4yZ3JhcGggXAorLSAgY29udHJpYi9ncm9mZmVyIFwKKy0gIGNvbnRyaWIvbW9tIFwKKy0gIGRvYworKyAgY29udHJpYi9ncm9mZmVyCisgQUxMRElSUz0kKElOQ0RJUlMpICQoTElCRElSUykgJChQUk9HRElSUykgXAorICAgJChERVZESVJTKSAkKE9USEVSREVWRElSUykgJChUVFlERVZESVJTKSAkKE9USEVSRElSUykKKyBFWFRSQURJUlM9XAorICAgZm9udC9kZXZwcy9nZW5lcmF0ZSBcCisgICBmb250L2RldmR2aS9nZW5lcmF0ZSBcCisgICBmb250L2RldmxqNC9nZW5lcmF0ZSBcCistICBzcmMveGRpdHZpZXcgXAorICAgZG9jCisgTk9NQUtFRElSUz1cCisgICBhcmNoL2RqZ3BwIFwKKyAgIGNvbnRyaWIvbW0vZXhhbXBsZXMgXAorICAgY29udHJpYi9tbS9tbSBcCistICBjb250cmliL21vbS9leGFtcGxlcyBcCistICBjb250cmliL21vbS9tb21kb2MgXAorICAgc3JjL2xpYnMvc25wcmludGYKKyBESVNURElSUz1cCisgICAkKElOQ0RJUlMpICQoTElCRElSUykgJChQUk9HRElSUykgJChERVZESVJTKSAkKE9USEVSREVWRElSUykgXAorICAgJChBTExUVFlERVZESVJTKSAkKE9USEVSRElSUykgJChFWFRSQURJUlMpICQoTk9NQUtFRElSUykKKyBUQVJHRVRTPWFsbCBpbnN0YWxsIGluc3RhbGxfYmluIGluc3RhbGxfZGF0YSBjbGVhbiBkaXN0Y2xlYW4gbW9zdGx5Y2xlYW4gXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvbWFuLWxvY2FsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvbWFuLWxvY2FsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZjFhYTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjE4LjEuNC9tYW4tbG9jYWwucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZF0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogZ3JvZmYtMS4xOC4xLjQvdG1hYy9tYW4ubG9jYWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncm9mZi0xLjE4LjEuNC5vcmlnL3RtYWMvbWFuLmxvY2FsCTIwMDAtMTAtMjYgMjI6MTU6MTcuMDAwMDAwMDAwICswODAwCisrKysgZ3JvZmYtMS4xOC4xLjQvdG1hYy9tYW4ubG9jYWwJMjAxMC0wOC0yNCAxNDoxNzo1Mi4wNzAwMDY2NjQgKzA4MDAKK0BAIC0xLDIgKzEsMjcgQEAKKyAuXCIgVGhpcyBmaWxlIGlzIGxvYWRlZCBhZnRlciBhbi1vbGQudG1hYy4KKyAuXCIgUHV0IGFueSBsb2NhbCBtb2RpZmljYXRpb25zIHRvIGFuLW9sZC50bWFjIGhlcmUuCisrLgorKy5pZiBuIFx7XAorKy4gIFwiIERlYmlhbjogTWFwIFwob3EgdG8gJyByYXRoZXIgdGhhbiBgIGluIG5yb2ZmIG1vZGUgZm9yIGRldmljZXMgb3RoZXIKKysuICBcIiB0aGFuIHV0ZjguCisrLiAgaWYgISdcKlsuVF0ndXRmOCcgXAorKy4gICAgdHIgXFtvcV0nCisrLgorKy4gIFwiIERlYmlhbjogRGlzYWJsZSB0aGUgdXNlIG9mIFNHUiAoQU5TSSBjb2xvdXIpIGVzY2FwZSBzZXF1ZW5jZXMgYnkKKysuICBcIiBncm90dHkuCisrLiAgaWYgJ1xWW0dST0ZGX1NHUl0nJyBcCisrLiAgICBvdXRwdXQgeCBYIHR0eTogc2dyIDAKKysuCisrLiAgXCIgRGViaWFuOiBNYXAgXC0gdG8gdGhlIFVuaWNvZGUgSFlQSEVOLU1JTlVTIGNoYXJhY3RlciwgdG8gbWFrZQorKy4gIFwiIHNlYXJjaGluZyBpbiBtYW4gcGFnZXMgZWFzaWVyLgorKy4gIGlmICdcKlsuVF0ndXRmOCcgXAorKy4gICAgY2hhciBcLSBcTic0NScKKysuCisrLiAgXCIgRGViaWFuOiBNYW55IFVURi04IG1hbiBwYWdlcyB1c2UgIi0iIGluc3RlYWQgb2YgIlwtIiBmb3IgZGFzaGVzIHN1Y2gKKysuICBcIiBhcyB0aG9zZSBpbiBjb21tYW5kLWxpbmUgb3B0aW9ucy4gVGhpcyBpcyBhIGJ1ZyBpbiB0aG9zZSBwYWdlcywgYnV0CisrLiAgXCIgdG9vIG1hbnkgZm9udHMgYXJlIG1pc3NpbmcgdGhlIFVuaWNvZGUgSFlQSEVOIGNoYXJhY3Rlciwgc28gd2UgcmVuZGVyCisrLiAgXCIgdGhpcyBhcyB0aGUgQVNDSUktY29tcGF0aWJsZSBIWVBIRU4tTUlOVVMgaW5zdGVhZC4KKysuICBpZiAnXCpbLlRdJ3V0ZjgnIFwKKysuICAgIGNoYXIgLSBcTic0NScKKysuXH0KKysKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L21kb2MtbG9jYWwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjE4LjEuNC9tZG9jLWxvY2FsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOWMxYTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjE4LjEuNC9tZG9jLWxvY2FsLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZF0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogZ3JvZmYtMS4xOC4xLjQvdG1hYy9tZG9jLmxvY2FsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3JvZmYtMS4xOC4xLjQub3JpZy90bWFjL21kb2MubG9jYWwJMjAwMS0wMy0yMyAwODoxNzo1MS4wMDAwMDAwMDAgKzA4MDAKKysrKyBncm9mZi0xLjE4LjEuNC90bWFjL21kb2MubG9jYWwJMjAxMC0wOC0yNCAxNDoyMDoyMi4wMTQwMDY4NDYgKzA4MDAKK0BAIC0xLDIgKzEsMjYgQEAKKyAuXCIgVGhpcyBmaWxlIGlzIGxvYWRlZCBhZnRlciBkb2MudG1hYy4KKyAuXCIgUHV0IGFueSBsb2NhbCBtb2RpZmljYXRpb25zIHRvIGRvYy50bWFjIGhlcmUuCisrLgorKy5pZiBuIFx7XAorKy4gIFwiIERlYmlhbjogTWFwIFwob3EgdG8gJyByYXRoZXIgdGhhbiBgIGluIG5yb2ZmIG1vZGUgZm9yIGRldmljZXMgb3RoZXIKKysuICBcIiB0aGFuIHV0ZjguCisrLiAgaWYgISdcKlsuVF0ndXRmOCcgXAorKy4gICAgdHIgXFtvcV0nCisrLgorKy4gIFwiIERlYmlhbjogRGlzYWJsZSB0aGUgdXNlIG9mIFNHUiAoQU5TSSBjb2xvdXIpIGVzY2FwZSBzZXF1ZW5jZXMgYnkKKysuICBcIiBncm90dHkuCisrLiAgaWYgJ1xWW0dST0ZGX1NHUl0nJyBcCisrLiAgICBvdXRwdXQgeCBYIHR0eTogc2dyIDAKKysuCisrLiAgXCIgRGViaWFuOiBNYXAgXC0gdG8gdGhlIFVuaWNvZGUgSFlQSEVOLU1JTlVTIGNoYXJhY3RlciwgdG8gbWFrZQorKy4gIFwiIHNlYXJjaGluZyBpbiBtYW4gcGFnZXMgZWFzaWVyLgorKy4gIGlmICdcKlsuVF0ndXRmOCcgXAorKy4gICAgY2hhciBcLSBcTic0NScKKysuCisrLiAgXCIgRGViaWFuOiBNYW55IFVURi04IG1hbiBwYWdlcyB1c2UgIi0iIGluc3RlYWQgb2YgIlwtIiBmb3IgZGFzaGVzIHN1Y2gKKysuICBcIiBhcyB0aG9zZSBpbiBjb21tYW5kLWxpbmUgb3B0aW9ucy4gVGhpcyBpcyBhIGJ1ZyBpbiB0aG9zZSBwYWdlcywgYnV0CisrLiAgXCIgdG9vIG1hbnkgZm9udHMgYXJlIG1pc3NpbmcgdGhlIFVuaWNvZGUgSFlQSEVOIGNoYXJhY3Rlciwgc28gd2UgcmVuZGVyCisrLiAgXCIgdGhpcyBhcyB0aGUgQVNDSUktY29tcGF0aWJsZSBIWVBIRU4tTUlOVVMgaW5zdGVhZC4KKysuICBpZiAnXCpbLlRdJ3V0ZjgnIFwKKysuICAgIGNoYXIgLSBcTic0NScKKysuXH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMjIuMy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4yMi4zLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxYjQzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMjIuMy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGdyb2ZmLTEuMjIuMy9zcmMvbGlicy9nbnVsaWIvbGliL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3JvZmYtMS4yMi4zLm9yaWcvc3JjL2xpYnMvZ251bGliL2xpYi9NYWtlZmlsZS5hbQorKysrIGdyb2ZmLTEuMjIuMy9zcmMvbGlicy9nbnVsaWIvbGliL01ha2VmaWxlLmFtCitAQCAtMTEzLDcgKzExMyw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjIyLjMvZ3JvZmYtMS4yMi4yLWNvcnJlY3QtbWFuLmxvY2FsLWluc3RhbGwtcGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMjIuMy9ncm9mZi0xLjIyLjItY29ycmVjdC1tYW4ubG9jYWwtaW5zdGFsbC1wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MzMyOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjIyLjMvZ3JvZmYtMS4yMi4yLWNvcnJlY3QtbWFuLmxvY2FsLWluc3RhbGwtcGF0aC5wYXRjaApAQCAtMCwwICsxLDM0IEBACitDb3JyZWN0IHRoZSBpbnN0YWxsIHBhdGggb2YgbWFuLmxvY2FsIHRvIGZpeCBmb2xsb3dpbmcgZXJyb3I6CisgICAgL3lvY3RvL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2dyb2ZmLzEuMjIuMi90bWFjL2FuLW9sZC50bWFjOjY5MDogd2FybmluZzogY2FuJ3QgZmluZCBtYWNybyBmaWxlIGBtYW4ubG9jYWwnCisKK1NpZ25lZC1vZmYtYnk6IFpoZW5odWEgTHVvIDx6aGVuaHVhLmx1b0BmcmVlc2NhbGUuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLS1naXQgYS90bWFjL01ha2VmaWxlLnN1YiBiL3RtYWMvTWFrZWZpbGUuc3ViCitpbmRleCAxNTA2MjMyLi5mMTQ2OGM1IDEwMDY0NAorLS0tIGEvdG1hYy9NYWtlZmlsZS5zdWIKKysrKyBiL3RtYWMvTWFrZWZpbGUuc3ViCitAQCAtMTIxLDkgKzEyMSw5IEBAIGluc3RhbGxfZGF0YTogJChOT1JNQUxGSUxFUykgJChTUEVDSUFMRklMRVMpIG1hbi5sb2NhbCBcCisgCSAgJChSTSkgJChERVNURElSKSQobWRvY2RpcikvJCRmOyBcCisgCSAgJChJTlNUQUxMX0RBVEEpICQkZi1zICQoREVTVERJUikkKG1kb2NkaXIpLyQkZjsgXAorIAlkb25lCistCS10ZXN0IC1mICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWFuLmxvY2FsIFwKKysJLXRlc3QgLWYgJChERVNURElSKSQodG1hY2RpcikvbWFuLmxvY2FsIFwKKyAJICB8fCAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL21hbi5sb2NhbCBcCistCSAgICAgICAkKERFU1RESVIpJChsb2NhbHRtYWNkaXIpL21hbi5sb2NhbAorKwkgICAgICAgJChERVNURElSKSQodG1hY2RpcikvbWFuLmxvY2FsCisgCS10ZXN0IC1mICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWRvYy5sb2NhbCBcCisgCSAgfHwgJChJTlNUQUxMX0RBVEEpIG1kb2MubG9jYWwtcyAkKERFU1RESVIpJChsb2NhbHRtYWNkaXIpL21kb2MubG9jYWwKKyAKK0BAIC0xNjQsOSArMTY0LDkgQEAgdW5pbnN0YWxsX3N1YjoKKyAJJChSTSkgJChERVNURElSKSQodG1hY2RpcikvJCh0bWFjX3NfcHJlZml4KXMudG1hYworIAkkKFJNKSAkKERFU1RESVIpJCh0bWFjZGlyKS8kKHRtYWNfYW5fcHJlZml4KWFuLnRtYWMKKyAJJChSTSkgJChERVNURElSKSQodG1hY2Rpcikvd3d3LnRtYWMKKy0JLWlmIGNtcCAtcyAkKERFU1RESVIpJChsb2NhbHRtYWNkaXIpL21hbi5sb2NhbCBcCisrCS1pZiBjbXAgLXMgJChERVNURElSKSQodG1hY2RpcikvbWFuLmxvY2FsIFwKKyAJICAgICAgICAgICAkKHNyY2RpcikvbWFuLmxvY2FsOyB0aGVuIFwKKy0JICAkKFJNKSAkKERFU1RESVIpJChsb2NhbHRtYWNkaXIpL21hbi5sb2NhbDsgXAorKwkgICQoUk0pICQoREVTVERJUikkKHRtYWNkaXIpL21hbi5sb2NhbDsgXAorIAlmaQorIAktaWYgY21wIC1zICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWRvYy5sb2NhbCBcCisgCSAgICAgICAgICAgJChzcmNkaXIpL21kb2MubG9jYWw7IHRoZW4gXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4xOC4xLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZl8xLjE4LjEuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDc4NmEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4xOC4xLjQuYmIKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJHTlUgVHJvZmYgc29mdHdhcmUiCitERVNDUklQVElPTiA9ICJUaGUgZ3JvZmYgKEdOVSB0cm9mZikgc29mdHdhcmUgaXMgYSB0eXBlc2V0dGluZyBwYWNrYWdlIHdoaWNoIHJlYWRzIHBsYWluIHRleHQgbWl4ZWQgd2l0aCBcCitmb3JtYXR0aW5nIGNvbW1hbmRzIGFuZCBwcm9kdWNlcyBmb3JtYXR0ZWQgb3V0cHV0LiIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ncm9mZi8iCitMSUNFTlNFID0gIkdQTHYyIgorUFIgPSAicjEiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU0M2ZjMTZmY2NkODUxOWZiYTQwNWYwYTBmZjZlOGEzIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vJHtCUE59L29sZC8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgIGZpbGU6Ly9ncm9mZi0xLjE4LjEuNC1yZW1vdmUtbW9tLnBhdGNoO3N0cmlwbGV2ZWw9MSBcCisgICAgICAgICAgZmlsZTovL21hbi1sb2NhbC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL21kb2MtbG9jYWwucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9ncm9mZi0xLjE4LjEuNC1maXgtYmluZGlyLnBhdGNoIFwKKyIgCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VDT05GPSItLXdpdGhvdXQteCAtLXByZWZpeD0ke0R9IC0tZXhlYy1wcmVmaXg9JHtEfSAtLWJpbmRpcj0ke0R9JHtiaW5kaXJ9IC0tZGF0YWRpcj0ke0R9JHtkYXRhZGlyfSAtLW1hbmRpcj0ke0R9JHtkYXRhZGlyfS9tYW4gLS1pbmZvZGlyPSR7RH0ke2RhdGFkaXJ9aW5mbyAtLXdpdGgtYXBwcmVzZGlyPSR7RH0ke2RhdGFkaXJ9IgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2VlY2I4MTUzMzkzNmQyNTFlZDAxNWY0MGU1ZjcyODciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmYzYzdjM2I2Y2FlNWU4Y2M1MDYyYTE0NGRlNWVmZjAwMjJlOGU5NzBlMTc3NDUyOWNjMmQ1ZGRlNDZjZTUwZCIKK1BBUkFMTEVMX01BS0UgPSAiIgorCitkb19jb25maWd1cmUgKCl7CisgICAgb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIFNvbWUgZGlzdHJvcyBoYXZlIGJvdGggL2Jpbi9wZXJsIGFuZCAvdXNyL2Jpbi9wZXJsLCBidXQgd2Ugc2V0IHBlcmwgbG9jYXRpb24KKwkjIGZvciB0YXJnZXQgYXMgL3Vzci9iaW4vcGVybCwgc28gZml4IGl0IHRvIC91c3IvYmluL3BlcmwuCisJZm9yIGkgaW4gYWZtdG9kaXQgbW1yb2ZmOyBkbworCQlpZiBbIC1mICR7RH0ke2JpbmRpcn0vJGkgXTsgdGhlbgorCQkJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISAke1VTUkJJTlBBVEh9L2VudiBwZXJsLCcgJHtEfSR7YmluZGlyfS8kaQorCQlmaQorCWRvbmUKKworCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2dyb2ZmCisJY3AgLXJmICR7RH0ke2RhdGFkaXJ9L2dyb2ZmL3NpdGUtdG1hYy8qICR7RH0ke3N5c2NvbmZkaXJ9L2dyb2ZmLworCWNwIC1yZiAke0R9JHtkYXRhZGlyfS9ncm9mZi9zaXRlLXRtYWMvKiAke0R9JHtkYXRhZGlyfS9ncm9mZi8ke1BWfS90bWFjLworfQorCitwa2dfcG9zdGluc3RfJHtQTn0oKSB7CisJbG4gLXMgdGJsICREJHtiaW5kaXJ9L2d0YmwKKwllY2hvICJleHBvcnQgR1JPRkZfRk9OVF9QQVRIPS91c3Ivc2hhcmUvZ3JvZmYvJHtQVn0vZm9udCIgPj4gJEQke3N5c2NvbmZkaXJ9L3Byb2ZpbGUKKwllY2hvICJleHBvcnQgR1JPRkZfVE1BQ19QQVRIPS91c3Ivc2hhcmUvZ3JvZmYvJHtQVn0vdG1hYyIgPj4gJEQke3N5c2NvbmZkaXJ9L3Byb2ZpbGUKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4yMi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4yMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZmZhODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZl8xLjIyLjMuYmIKQEAgLTAsMCArMSw3MCBAQAorU1VNTUFSWSA9ICJHTlUgVHJvZmYgc29mdHdhcmUiCitERVNDUklQVElPTiA9ICJUaGUgZ3JvZmYgKEdOVSB0cm9mZikgc29mdHdhcmUgaXMgYSB0eXBlc2V0dGluZyBwYWNrYWdlIHdoaWNoIHJlYWRzIHBsYWluIHRleHQgbWl4ZWQgd2l0aCBcCitmb3JtYXR0aW5nIGNvbW1hbmRzIGFuZCBwcm9kdWNlcyBmb3JtYXR0ZWQgb3V0cHV0LiIKK1NFQ1RJT04gPSAiYmFzZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ncm9mZi8iCitMSUNFTlNFID0gIkdQTHYzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dyb2ZmL2dyb2ZmLSR7UFZ9LnRhci5neiBcCisJZmlsZTovL2dyb2ZmLTEuMjIuMi1jb3JyZWN0LW1hbi5sb2NhbC1pbnN0YWxsLXBhdGgucGF0Y2ggXAorCWZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImNjODI1ZmE2NGJjNzMwNmE4ODVmMmZiMjI2OGQzZWM1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNhNDhhOWQ2Yzk3NzUwYmZiZDUzNWZlZWI1YmUwMTExZGI2NDA2ZGRiN2JiNzlmYzY4MDgwOWNkYTZkODI4YTUiCisKK0RFUEVORFMgPSAiZ3JvZmYtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorUkRFUEVORFNfJHtQTn0gKz0gInBlcmwgc2VkIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQteCIKK1BBUkFMTEVMX01BS0UgPSAiIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlpZiBbICIke0JVSUxEX1NZU30iICE9ICIke0hPU1RfU1lTfSIgXTsgdGhlbgorCQlzZWQgLWkgXAorCQkgICAgLWUgJy9eR1JPRkZCSU49L3M6PS4qOj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vZ3JvZmY6JyBcCisJCSAgICAtZSAnL15UUk9GRkJJTj0vczo9Lio6PSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS90cm9mZjonIFwKKwkJICAgIC1lICcvXkdST0ZGX0JJTl9QQVRIPS9zOj0uKjo9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OicgXAorCQkgICAgLWUgJy9eR1JPRkZfQklOX0RJUj0vczo9Lio6PSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfTonIFwKKwkJICAgICR7U30vY29udHJpYi8qL01ha2VmaWxlLnN1YiBcCisJCSAgICAke1N9L2RvYy9NYWtlZmlsZS5pbiBcCisJCSAgICAke1N9L2RvYy9NYWtlZmlsZS5zdWIKKwlmaQorfQorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworICAgICMgZ2VuZXJhdGUgZ251bGliIGNvbmZpZ3VyZSBzY3JpcHQKKyAgICBvbGRkaXI9YHB3ZGAKKyAgICBjZCAke1N9L3NyYy9saWJzL2dudWxpYi8KKyAgICBBQ0xPQ0FMPSIkQUNMT0NBTCIgYXV0b3JlY29uZiAtV2Nyb3NzIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAke0VYVFJBX0FVVE9SRUNPTkZ9ICRhY3BhdGhzIHx8IGRpZSAiYXV0b3JlY29uZiBleGVjdXRpb24gZmFpbGVkLiIKKyAgICBjZCAke29sZGRpcn0KK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBTb21lIGRpc3Ryb3MgaGF2ZSBib3RoIC9iaW4vcGVybCBhbmQgL3Vzci9iaW4vcGVybCwgYnV0IHdlIHNldCBwZXJsIGxvY2F0aW9uCisJIyBmb3IgdGFyZ2V0IGFzIC91c3IvYmluL3BlcmwsIHNvIGZpeCBpdCB0byAvdXNyL2Jpbi9wZXJsLgorCWZvciBpIGluIGFmbXRvZGl0IG1tcm9mZiBncm9wZGYgcGRmbW9tIGdyb2c7IGRvCisJCWlmIFsgLWYgJHtEfSR7YmluZGlyfS8kaSBdOyB0aGVuCisJCQlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhICR7VVNSQklOUEFUSH0vZW52IHBlcmwsJyAke0R9JHtiaW5kaXJ9LyRpCisJCWZpCisJZG9uZQorCWlmIFsgLWUgJHtEfSR7bGliZGlyfS9jaGFyc2V0LmFsaWFzIF07IHRoZW4KKwkJcm0gLXJmICR7RH0ke2xpYmRpcn0vY2hhcnNldC5hbGlhcworCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfY21kbGluZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2dyb2ZmIFwKKwkJLUYke1NUQUdJTkdfRElSX05BVElWRX0ke2RhdGFkaXJfbmF0aXZlfS9ncm9mZi8ke1BWfS9mb250IFwKKwkJLU0ke1NUQUdJTkdfRElSX05BVElWRX0ke2RhdGFkaXJfbmF0aXZlfS9ncm9mZi8ke1BWfS90bWFjCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vJHtCUE59L3NpdGUtdG1hYyBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9LyR7QlBOfS9ncm9mZmVyLyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS4zLjEyL2R1cC1kZWYtZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLTEuMy4xMi9kdXAtZGVmLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWU4ZDIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLTEuMy4xMi9kdXAtZGVmLWZpeC5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitnemlwIHVzZXMgZ251bGliLCB3aG9zZSBoZWFkZXIgY29uZmxpY3Qgd2l0aCBnbGliYy4gVGhpcyBwYXRjaCByZW5hbWUgc29tZSBmdW5jdGlvbiB0byBhdm9pZCBjb25mbGljdC4KKworU2lnbmVkLW9mZi1ieTogWmhhaSBFZHdpbiA8ZWR3aW4uemhhaUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitJbmRleDogZ3ppcC0xLjMuMTIvZ3ppcC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3ppcC0xLjMuMTIub3JpZy9nemlwLmMJMjAxMC0wOC0xMyAxMDoyOTozOC4wMDAwMDAwMDAgKzA4MDAKKysrKyBnemlwLTEuMy4xMi9nemlwLmMJMjAxMC0wOC0xMyAxMDoyOTo0NC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xNjM3LDcgKzE2MzcsNyBAQAorIAl9CisgICAgICAgfQorIAorLSAgICBpZiAoZnV0aW1lbnMgKG9mZCwgb2ZuYW1lLCB0aW1lc3BlYykgIT0gMCkKKysgICAgaWYgKGZ1dGltZW5zX2dudWxpYiAob2ZkLCBvZm5hbWUsIHRpbWVzcGVjKSAhPSAwKQorICAgICAgIHsKKyAJaW50IGUgPSBlcnJubzsKKyAJV0FSTiAoKHN0ZGVyciwgIiVzOiAiLCBwcm9ncmFtX25hbWUpKTsKK0luZGV4OiBnemlwLTEuMy4xMi9saWIvdXRpbWVucy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3ppcC0xLjMuMTIub3JpZy9saWIvdXRpbWVucy5jCTIwMTAtMDgtMTMgMTA6MzM6NDcuMDAwMDAwMDAwICswODAwCisrKysgZ3ppcC0xLjMuMTIvbGliL3V0aW1lbnMuYwkyMDEwLTA4LTEzIDEwOjM0OjAyLjAwMDAwMDAwMCArMDgwMAorQEAgLTc1LDcgKzc1LDcgQEAKKyAgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSAoc2V0dGluZyBlcnJubykgb24gZmFpbHVyZS4gICovCisgCisgaW50CistZnV0aW1lbnMgKGludCBmZCBBVFRSSUJVVEVfVU5VU0VELAorK2Z1dGltZW5zX2dudWxpYiAoaW50IGZkIEFUVFJJQlVURV9VTlVTRUQsCisgCSAgY2hhciBjb25zdCAqZmlsZSwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IHRpbWVzcGVjWzJdKQorIHsKKyAgIC8qIFNvbWUgTGludXgtYmFzZWQgTkZTIGNsaWVudHMgYXJlIGJ1Z2d5LCBhbmQgbWlzaGFuZGxlIHRpbWUgc3RhbXBzCitAQCAtMTg1LDUgKzE4NSw1IEBACisgaW50CisgdXRpbWVucyAoY2hhciBjb25zdCAqZmlsZSwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IHRpbWVzcGVjWzJdKQorIHsKKy0gIHJldHVybiBmdXRpbWVucyAoLTEsIGZpbGUsIHRpbWVzcGVjKTsKKysgIHJldHVybiBmdXRpbWVuc19nbnVsaWIgKC0xLCBmaWxlLCB0aW1lc3BlYyk7CisgfQorSW5kZXg6IGd6aXAtMS4zLjEyL2xpYi91dGltZW5zLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnemlwLTEuMy4xMi5vcmlnL2xpYi91dGltZW5zLmgJMjAxMC0wOC0xMyAxMDoxNDo1Ny4wMDAwMDAwMDAgKzA4MDAKKysrKyBnemlwLTEuMy4xMi9saWIvdXRpbWVucy5oCTIwMTAtMDgtMTMgMTA6MjE6NDUuMDAwMDAwMDAwICswODAwCitAQCAtMSwzICsxLDMgQEAKKyAjaW5jbHVkZSA8dGltZS5oPgorLWludCBmdXRpbWVucyAoaW50LCBjaGFyIGNvbnN0ICosIHN0cnVjdCB0aW1lc3BlYyBjb25zdCBbMl0pOworK2ludCBmdXRpbWVuc19nbnVsaWIgKGludCwgY2hhciBjb25zdCAqLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgWzJdKTsKKyBpbnQgdXRpbWVucyAoY2hhciBjb25zdCAqLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgWzJdKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjMuMTIvbTQtZXh0ZW5zaW9ucy1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS4zLjEyL200LWV4dGVuc2lvbnMtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMmY2OTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS4zLjEyL200LWV4dGVuc2lvbnMtZml4LnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK3JlbW92ZSBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgdG8gZml4IHRoZSBhdXRvY29uZiBlcnJvciAiQUNfUkVRVUlSRTogY2lyY3VsYXIKK2RlcGVuZGVuY3kgb2YgQUNfR05VX1NPVVJDRSIKKworU2lnbmVkLW9mZi1ieTogWmhhaSBFZHdpbiA8ZWR3aW4uemhhaUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitJbmRleDogZ3ppcC0xLjMuMTIvbTQvZXh0ZW5zaW9ucy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd6aXAtMS4zLjEyLm9yaWcvbTQvZXh0ZW5zaW9ucy5tNAkyMDEwLTA4LTE2IDE0OjE4OjE2LjAwMDAwMDAwMCArMDgwMAorKysrIGd6aXAtMS4zLjEyL200L2V4dGVuc2lvbnMubTQJMjAxMC0wOC0xNiAxNDoyMTo1NC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xMiw0NCArMTIsNiBAQAorICMgZW5vdWdoIGluIHRoaXMgYXJlYSBpdCdzIGxpa2VseSB3ZSdsbCBuZWVkIHRvIHJlZGVmaW5lCisgIyBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgZm9yIHF1aXRlIHNvbWUgdGltZS4KKyAKKy0jIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorLSMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorLUFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorLVsKKy0gIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSkKKy0KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorLSAgQUNfUkVRVUlSRShbQUNfQUlYXSkKKy0gIEFDX1JFUVVJUkUoW0FDX01JTklYXSkKKy0KKy0gIEFIX1ZFUkJBVElNKFtfX0VYVEVOU0lPTlNfX10sCistWy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworLSNpZm5kZWYgX19FWFRFTlNJT05TX18KKy0jIHVuZGVmIF9fRVhURU5TSU9OU19fCistI2VuZGlmCistI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKy0jIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSNlbmRpZgorLSNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jIHVuZGVmIF9UQU5ERU1fU09VUkNFCistI2VuZGlmXSkKKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fXSwKKy0gICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fXSwKKy0gICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorLSAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKy0jCSAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKy0JICBBQ19JTkNMVURFU19ERUZBVUxUXSldLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzXSwKKy0gICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPW5vXSldKQorLSAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKy0gICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCistICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCistICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKy1dKQorLQorICMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS42L3dyb25nLXBhdGgtZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLTEuNi93cm9uZy1wYXRoLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mjg2M2Q2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLTEuNi93cm9uZy1wYXRoLWZpeC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitmaXggTWFrZU1ha2VyIGlzc3VlcyB3aXRoIHVzaW5nIHdyb25nIFNIRUxML0dSRVAKKworQSBzZXQgb2Ygc3Vic3RpdHV0aW9uIGlzIGJlaW5nIHByb2Nlc3NlZCB0byBhbGwgdGFyZ2V0IHNjcmlwdHMgd2l0aCBzZWQgYnkKK3JlcGxhY2luZyBzb21lIGtleSB3b3JkcyB3aXRoIHRoZSBkZXRlY3RlZCB2YWx1ZXMgYXQgY29uZmlndXJlIHRpbWUsIHRoaXMKK2lzIGV4YWN0bHkgbm90IGNvbXBsaWFudCB3aXRoIGNyb3NzIGNvbXBsaW5nLCBhbmQgd2lsbCBjYXVzZSBtaXNzaW5nIHBhdGgKK2Vycm9ycyBhdCBydW4gdGltZSBsaWtlOgorIi91c3IvYmluL3pncmVwOiBsaW5lIDIzMDogL3Vzci9iaW4vZ3JlcDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKKworRml4ZWQgYnkgcmVtb3ZpbmcgdW5uZWVkZWQgc3Vic3RpdHV0aW9uIGFuZCB1c2luZyByZWFsIHJ1bnRpbWUgcGF0aHMKK2luc3RlYWQuCisKK1NpZ25lZC1vZmYtYnk6IE1pbmcgTGl1IDxtaW5nLmxpdUB3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGd6aXAtMS4zLjEyL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkaWZmIC11cnBOIGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQorLS0tIGEvTWFrZWZpbGUuYW0JMjAxMy0xMS0zMCAxMDowNjowOS40MDIyMzQ4NzEgKzA4MDAKKysrKyBiL01ha2VmaWxlLmFtCTIwMTMtMTEtMzAgMTA6MTM6NDIuOTUyMjM2MDI1ICswODAwCitAQCAtODEsOSArODEsOCBAQCBnemlwLmRvYy5nejogZ3ppcC5kb2MgJChiaW5fUFJPR1JBTVMpCisgU1VGRklYRVMgPSAuaW4KKyAuaW46CisgCSQoQU1fVl9HRU4pc2VkIFwKKy0JCS1lICdzfC9iaW4vc2h8JChTSEVMTCl8ZycgXAorIAkJLWUgJ3N8W0BdYmluZGlyQHwnXCcnJChiaW5kaXIpJ1wnJ3xnJyBcCistCQktZSAnc3xbQF1HUkVQQHwkKEdSRVApfGcnIFwKKysJCS1lICdzfFtAXUdSRVBAfCQoYmFzZV9iaW5kaXIpL2dyZXB8ZycgXAorIAkJLWUgJ3N8W0BdVkVSU0lPTkB8JChWRVJTSU9OKXxnJyBcCisgCQkkKHNyY2RpcikvJEAuaW4gPiRALXQgXAorIAkgICYmIGNobW9kIGEreCAkQC10IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NDgwZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAuaW5jCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiU3RhbmRhcmQgR05VIGNvbXByZXNzb3IiCitERVNDUklQVElPTiA9ICJHTlUgR3ppcCBpcyBhIHBvcHVsYXIgZGF0YSBjb21wcmVzc2lvbiBwcm9ncmFtIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBKZWFuLWxvdXAgR2FpbGx5IGZvciB0aGUgR05VIFwKK3Byb2plY3QuIE1hcmsgQWRsZXIgd3JvdGUgdGhlIGRlY29tcHJlc3Npb24gcGFydCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nemlwLyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKyMgY2hhbmdlIHRvIEdQTHYzKyBpbiAyMDA3LzA3LiBQcmV2aW91cyBHUEx2MiB2ZXJzaW9uIGlzIDEuMy4xMgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0VYVFJBX09FTUFLRV9jbGFzcy10YXJnZXQgPSAiR1JFUD0ke2Jhc2VfYmluZGlyfS9ncmVwIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBSZW5hbWUgYW5kIG1vdmUgZmlsZXMgaW50byAvYmluIChGSFMpLCB3aGljaCBpcyB0eXBpY2FsIHBsYWNlIGZvciBnemlwCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwltdiAke0R9JHtiaW5kaXJ9L2d1bnppcCAke0R9JHtiYXNlX2JpbmRpcn0vZ3VuemlwCisJbXYgJHtEfSR7YmluZGlyfS9nemlwICR7RH0ke2Jhc2VfYmluZGlyfS9nemlwCisJbXYgJHtEfSR7YmluZGlyfS96Y2F0ICR7RH0ke2Jhc2VfYmluZGlyfS96Y2F0CisJbXYgJHtEfSR7YmluZGlyfS91bmNvbXByZXNzICR7RH0ke2Jhc2VfYmluZGlyfS91bmNvbXByZXNzCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJndW56aXAgZ3ppcCB6Y2F0IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2d1bnppcF0gPSAiJHtiYXNlX2JpbmRpcn0vZ3VuemlwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2d6aXBdID0gIiR7YmFzZV9iaW5kaXJ9L2d6aXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbemNhdF0gPSAiJHtiYXNlX2JpbmRpcn0vemNhdCIKKworZXhwb3J0IENPTkZJR19TSEVMTD0iL2Jpbi9zaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjMuMTIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXBfMS4zLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MDYyODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXBfMS4zLjEyLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgZ3ppcC5pbmMKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nemlwLmg7ZW5kbGluZT0yMjttZDU9YzA5MzRhZDE5MDBkOTI3Zjg2NTU2MTUzZDRjNzZkMjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbHp3Lmg7ZW5kbGluZT0xOTttZDU9YzI3M2UwOWEwMmVkZDk4MDFjYzc0ZDM5NjgzMDQ5ZTkgIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3ppcC9nemlwLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9tNC1leHRlbnNpb25zLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kdXAtZGVmLWZpeC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImI1YmFjMmQyMTg0MGFlMDc3ZTAyMTdiYzVlNDg0NWIxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNmNTY1YmUwNWY3ZjNkMWFmZjExN2MwMzBlYjdjNzM4MzAwNTEwYjdkMDk4Y2VkZWE3OTZjYThlNGNkNTg3YWYiCisKK1BSID0gInIyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM0N2YwYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjYuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSBnemlwLmluYworCitMSUNFTlNFID0gIkdQTHYzKyIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2d6aXAvJHtCUH0udGFyLmd6IgorU1JDX1VSSV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBmaWxlOi8vd3JvbmctcGF0aC1maXgucGF0Y2giCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d6aXAuaDtiZWdpbmxpbmU9ODtlbmRsaW5lPTIwO21kNT02ZTQ3Y2FhYTYzMGUwYzhiZjlmMWJjOGQ5NGE4ZWQwZSIKKworUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZ3ppcC1yZXBsYWNlbWVudC1uYXRpdmUiCitOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWCA9ICIvJHtQTn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzg2MDNjYjI4NDNiZjU2ODFmZjQxYWFiM2JjZDZhMjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTdlYjgzYjc2M2Q5ZTVhZDM1ZjM1MWZlNTUxN2U2YjcxNTIxZDdhYWM3YWNmM2UzY2FjZGI2YjE0OTZkOGY3ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2hkcGFybS9oZHBhcm1fOS40OC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2hkcGFybS9oZHBhcm1fOS40OC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjY3ZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaGRwYXJtL2hkcGFybV85LjQ4LmJiCkBAIC0wLDAgKzEsMzYgQEAKK1NVTU1BUlkgPSAiVXRpbGl0eSBmb3Igdmlld2luZy9tYW5pcHVsYXRpbmcgSURFIGRpc2sgZHJpdmUvZHJpdmVyIHBhcmFtZXRlcnMiCitERVNDUklQVElPTiA9ICJoZHBhcm0gaXMgYSBMaW51eCBzaGVsbCB1dGlsaXR5IGZvciB2aWV3aW5nIFwKK2FuZCBtYW5pcHVsYXRpbmcgdmFyaW91cyBJREUgZHJpdmUgYW5kIGRyaXZlciBwYXJhbWV0ZXJzLiIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDRU5TRV93aXBlciA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuVFhUO21kNT05MTBhOGE0MmM5NjJkMjM4NjE5Yzc1ZmRiNzhiZGIyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vY29weXJpZ2h0O21kNT1hODJkN2JhM2FkZTllOGVjOTAyNzQ5ZGI5OGM1OTJmMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly93aXBlci9HUEx2Mi50eHQ7bWQ1PWZjYjAyZGM1NTJhMDQxZGVlMjdlNGI4NWM3Mzk2MDY3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3dpcGVyL3dpcGVyLnNoO2JlZ2lubGluZT03O2VuZGxpbmU9MzE7bWQ1PWI3YmM2NDJhZGRjMTUyZWEzMDc1MDViZjFhMjk2ZjA5IgorCisKK1BBQ0tBR0VTID0rICJ3aXBlciIKKworRklMRVNfd2lwZXIgPSAiJHtiaW5kaXJ9L3dpcGVyLnNoIgorCitSREVQRU5EU193aXBlciA9ICJiYXNoIGdhd2sgc3RhdCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vaGRwYXJtLyR7QlB9LnRhci5neiAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyMTNlZmRiZTc0NzFmYWQzNDA4MTk4OTE4ZTE2NDM1NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZTk3YjRhNzFjYjA0MTQ2ZjU0Y2Y2ZjY5Nzg3ZTdmOTdkZGZkYTk4MzZkYzgwM2I0NTlkM2IzZGYzYTRmYmVlIgorCitFWFRSQV9PRU1BS0UgKz0gJ1NUUklQPSJlY2hvIicKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImhkcGFybSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtoZHBhcm1dID0gIiR7YmFzZV9zYmluZGlyfS9oZHBhcm0iCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke2Jhc2Vfc2JpbmRpcn0gJHtEfS8ke21hbmRpcn0vbWFuOCAke0R9LyR7YmluZGlyfQorCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgJ3NiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9JyBpbnN0YWxsCisJY3AgJHtTfS93aXBlci93aXBlci5zaCAke0R9LyR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNjkwNzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1mdWxsLWNtZGxpbmUuYmIKQEAgLTAsMCArMSwxMiBAQAorREVTQ1JJUFRJT04gPSAiQSBjb25zb2xlLW9ubHkgaW1hZ2Ugd2l0aCBtb3JlIGZ1bGwtZmVhdHVyZWQgTGludXggc3lzdGVtIFwKK2Z1bmN0aW9uYWxpdHkgaW5zdGFsbGVkLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNwbGFzaCBzc2gtc2VydmVyLW9wZW5zc2giCisKK0lNQUdFX0lOU1RBTEwgPSAiXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWJvb3QgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZSBcCisgICAgJHtDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEx9IFwKKyAgICAiCisKK2luaGVyaXQgY29yZS1pbWFnZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2Uta2VybmVsLWRldi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWtlcm5lbC1kZXYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2MzZlZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWtlcm5lbC1kZXYuYmIKQEAgLTAsMCArMSwyMCBAQAorREVTQ1JJUFRJT04gPSAiQSBkZXZlbG9wbWVudCBpbWFnZSB0aGF0IGJ1aWxkcyB0aGUga2VybmVsIGFuZCBwYWNrYWdlcyB0aGF0IGFyZSBcCitzZW5zaXRpdmUgdG8ga2VybmVsIHVwZGF0ZXMgYW5kIHZlcnNpb24gY2hhbmdlcyIKKworIyBDb3VsZCBhbHNvIGJlIGNvcmUtaW1hZ2UtYmFzaWMsIGJ1dCB3ZSdsbCBrZWVwIHRoaXMgc21hbGwgZm9yIG5vdworcmVxdWlyZSByZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC5iYgorCitLRVJORUxfREVWX1VUSUxTID89ICJkcm9wYmVhciBjb25ubWFuIgorS0VSTkVMX0RFVl9UT09MUyA/PSAicGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZSBwYWNrYWdlZ3JvdXAtY29yZS1idWlsZGVzc2VudGlhbCBrZXJuZWwtZGV2c3JjIgorS0VSTkVMX0RFVl9NT0RVTEUgPz0gImtlcm5lbC1tb2R1bGVzIgorCitDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEwgKz0gIiR7S0VSTkVMX0RFVl9NT0RVTEV9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtLRVJORUxfREVWX1VUSUxTfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7S0VSTkVMX0RFVl9UT09MU30gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKKworIyBXZSBuZWVkIGV4dHJhIHNwYWNlIGZvciB0aGluZ3MgbGlrZSBrZXJuZWwgYnVpbGRzLCBldGMuCitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0VfYXBwZW5kICs9ICIrIDMwMDAwMDAiCisKKyMgTGV0J3MgZGVmaW5lIG91ciBvd24gc3Vic2V0IHRvIHRlc3QsIHdlIGNhbiBsYXRlciBhZGQgYSBvbi10YXJnZXQga2VybmVsIGJ1aWxkIGV2ZW4hCitERUZBVUxUX1RFU1RfU1VJVEVTID0gInBpbmcgc3NoIGRmIGNvbm5tYW4gc3lzbG9nIHNjcCBkYXRlIGRtZXNnIHBhcnNlbG9ncyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1kZXYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1sc2ItZGV2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZGM5ZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1sc2ItZGV2LmJiCkBAIC0wLDAgKzEsNyBAQAorcmVxdWlyZSBjb3JlLWltYWdlLWxzYi5iYgorCitERVNDUklQVElPTiA9ICJCYXNpYyBpbWFnZSB3aXRob3V0IFggc3VwcG9ydCBzdWl0YWJsZSBmb3IgZGV2ZWxvcG1lbnQgd29yay4gSXQgXAorY2FuIGJlIHVzZWQgZm9yIGN1c3RvbWl6YXRpb24gYW5kIGltcGxlbWVudGF0aW9ucyB0aGF0IGNvbmZvcm0gdG8gTGludXggXAorU3RhbmRhcmQgQmFzZSAoTFNCKS4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJkZXYtcGtncyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1zZGsuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1sc2Itc2RrLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYjZlN2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1sc2Itc2RrLmJiCkBAIC0wLDAgKzEsOSBAQAorcmVxdWlyZSBjb3JlLWltYWdlLWxzYi5iYgorCitERVNDUklQVElPTiA9ICJCYXNpYyBpbWFnZSB3aXRob3V0IFggc3VwcG9ydCBzdWl0YWJsZSBmb3IgTGludXggU3RhbmRhcmQgQmFzZSBcCisoTFNCKSBpbXBsZW1lbnRhdGlvbnMuIEl0IGluY2x1ZGVzIHRoZSBmdWxsIG1ldGEtdG9vbGNoYWluLCBwbHVzIGRldmVsb3BtZW50IFwKK2hlYWRlcnMgYW5kIGxpYnJhcmllcyB0byBmb3JtIGEgc3RhbmRhbG9uZSBTREsuIgorCitJTUFHRV9GRUFUVVJFUyArPSAidG9vbHMtc2RrIGRldi1wa2dzIHRvb2xzLWRlYnVnIGVjbGlwc2UtZGVidWcgdG9vbHMtcHJvZmlsZSB0b29scy10ZXN0YXBwcyBkZWJ1Zy10d2Vha3MiCisKK0lNQUdFX0lOU1RBTEwgKz0gImtlcm5lbC1kZXZzcmMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1sc2IuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1sc2IuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI2MWM2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi5iYgpAQCAtMCwwICsxLDE0IEBACitERVNDUklQVElPTiA9ICJBbiBpbWFnZSBjb250YWluaW5nIHBhY2thZ2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGNvbmZvcm0gXAordG8gdGhlIExpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikgc3BlY2lmaWNhdGlvbi4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJzcGxhc2ggc3NoLXNlcnZlci1vcGVuc3NoIGh3Y29kZWNzIHBhY2thZ2UtbWFuYWdlbWVudCIKKworSU1BR0VfSU5TVEFMTCA9ICJcCisgICAgJHtDT1JFX0lNQUdFX0JBU0VfSU5TVEFMTH0gXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZSBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiIFwKKyAgICAiCisKK2luaGVyaXQgY29yZS1pbWFnZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gInBhbSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtdGVzdG1hc3Rlci1pbml0cmFtZnMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzMjYwZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzLmJiCkBAIC0wLDAgKzEsMTkgQEAKK0RFU0NSSVBUSU9OID0gIlNtYWxsIGltYWdlIGNhcGFibGUgb2YgYm9vdGluZyBhIGRldmljZSB3aXRoIGN1c3RvbSBpbnN0YWxsIHNjcmlwdHMsIFwKK2FkZGluZyBhIHNlY29uZCByb290ZnMsIHVzZWQgZm9yIHRlc3RpbmcuIgorCisjIHVzZSAtdGVzdGZzIGxpdmUtaW5zdGFsbCBzY3JpcHRzCitQQUNLQUdFX0lOU1RBTEwgPSAiaW5pdHJhbWZzLWxpdmUtYm9vdCBpbml0cmFtZnMtbGl2ZS1pbnN0YWxsLXRlc3RmcyBpbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaS10ZXN0ZnMgYnVzeWJveCB1ZGV2IGJhc2UtcGFzc3dkICR7Uk9PVEZTX0JPT1RTVFJBUF9JTlNUQUxMfSIKKworIyBEbyBub3QgcG9sbHV0ZSB0aGUgaW5pdHJkIGltYWdlIHdpdGggcm9vdGZzIGZlYXR1cmVzCitJTUFHRV9GRUFUVVJFUyA9ICIiCisKK2V4cG9ydCBJTUFHRV9CQVNFTkFNRSA9ICJjb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzIgorSU1BR0VfTElOR1VBUyA9ICIiCisKK0xJQ0VOU0UgPSAiTUlUIgorCitJTUFHRV9GU1RZUEVTID0gIiR7SU5JVFJBTUZTX0ZTVFlQRVN9IgoraW5oZXJpdCBjb3JlLWltYWdlCisKK0lNQUdFX1JPT1RGU19TSVpFID0gIjgxOTIiCitCQURfUkVDT01NRU5EQVRJT05TICs9ICJidXN5Ym94LXN5c2xvZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS10ZXN0bWFzdGVyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Mjk1YzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS10ZXN0bWFzdGVyLmJiCkBAIC0wLDAgKzEsMTggQEAKK0RFU0NSSVBUSU9OID0gIkEgbWFzdGVyIGltYWdlIHRvIGJlIGRlcGxveWVkIG9uIGEgdGFyZ2V0IHVzZWZ1bCBmb3IgdGVzdGluZyBvdGhlciBpbWFnZXMiCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJzc2gtc2VydmVyLW9wZW5zc2ggcGFja2FnZS1tYW5hZ2VtZW50IgorCitpbmhlcml0IGNvcmUtaW1hZ2UKKworIyB0aGUgZGVwbG95IGNvZGUgcmVxdWlyZXMgYmFzaCBhbmQKKyMgbm9ybWFsIGxpbnV4IHV0aWxpdGllcyBub3QgYnVzeWJveCBvbmVzCitJTUFHRV9JTlNUQUxMICs9ICJcCisgICAgYmFzaCBjb3JldXRpbHMgdXRpbC1saW51eCB0YXIgZ3ppcCBiemlwMiBrbW9kIFwKKyAgICBweXRob24tbW9kdWxlcyBweXRob24tbWlzYyBcCisgICAgZTJmc3Byb2dzIGUyZnNwcm9ncy1ta2UyZnMgcGFydGVkIFwKKyAgICAiCisjIHdlIG5lZWQgYSBwYXJ0aWN1bGFyIGluaXRyYW1mcyBmb3IgbGl2ZSBpbWFnZXMKKyMgdGhhdCBwdWxscyBjdXN0b20gaW5zdGFsbCBzY3JpcHRzIHdoaWNoIHRha2UKKyMgY2FyZSBvZiBwYXJ0aXRpb25pbmcgZm9yIHVzCitJTklUUkRfSU1BR0UgPSAiY29yZS1pbWFnZS10ZXN0bWFzdGVyLWluaXRyYW1mcyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL3dpYy1pbWFnZS1taW5pbWFsLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL3dpYy1pbWFnZS1taW5pbWFsLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3M2M1NjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwuYmIKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJBbiBleGFtcGxlIG9mIHBhcnRpdGlvbmVkIGltYWdlLiIKKworSU1BR0VfSU5TVEFMTCA9ICJwYWNrYWdlZ3JvdXAtY29yZS1ib290ICR7Uk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVB9IgorCitJTUFHRV9GU1RZUEVTID0gIndpYy5iejIiCitSTV9PTERfSU1BR0UgPSAiMSIKKworIyBjb3JlLWltYWdlLW1pbmltYWwgaXMgcmVmZXJlbmNlZCBpbiAud2tzLCBzbyB3ZSBuZWVkIGl0cyByb290ZnMKKyMgdG8gYmUgcmVhZHkgYmVmb3JlIG91ciByb290ZnMKK2RvX3Jvb3Rmc1tkZXBlbmRzXSArPSAiY29yZS1pbWFnZS1taW5pbWFsOmRvX3Jvb3RmcyIKKworSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFID0gIjIwMDAiCisKK2luaGVyaXQgaW1hZ2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC53a3MgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwud2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5Y2Q4ZjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwud2tzCkBAIC0wLDAgKzEsMTAgQEAKKyMgc2hvcnQtZGVzY3JpcHRpb246IEV4YW1wbGUgb2YgcGFydGl0aW9uZWQgaW1hZ2Ugd2l0aCBjb21wbGV4IGxheW91dAorIyBsb25nLWRlc2NyaXB0aW9uOiBUaGlzIGltYWdlIGNvbnRhaW5zIGJvb3QgcGFydGl0aW9uIGFuZCAzIHJvb3RmcyBwYXJ0aXRpb25zCisjIGNyZWF0ZWQgZnJvbSBjb3JlLWltYWdlLW1pbmltYWwgYW5kIHdpYy1pbWFnZS1taW5pbWFsIGltYWdlIHJlY2lwZXMuCisKK3BhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1wY2Jpb3MgLS1vbmRpc2sgc2RhIC0tbGFiZWwgYm9vdCAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKK3BhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDIgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKK3BhcnQgL2NvcmUgLS1zb3VyY2Ugcm9vdGZzIC0tcm9vdGZzLWRpcj1jb3JlLWltYWdlLW1pbmltYWwgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDIgLS1sYWJlbCBjb3JlIC0tYWxpZ24gMTAyNAorcGFydCAvYmFja3VwIC0tc291cmNlIHJvb3RmcyAtLXJvb3Rmcy1kaXI9d2ljLWltYWdlLW1pbmltYWwgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDIgLS1sYWJlbCBiYWNrdXAgLS1hbGlnbiAxMDI0CisKK2Jvb3Rsb2FkZXIgIC0tdGltZW91dD0wICAtLWFwcGVuZD0icm9vdHdhaXQgY29uc29sZT10dHkwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvMDAwMS1jb25maWd1cmUtQWRkLW9wdGlvbi10by1lbmFibGUtZGlzYWJsZS1saWJuZm5ldGxpbmsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlcy8wMDAxLWNvbmZpZ3VyZS1BZGQtb3B0aW9uLXRvLWVuYWJsZS1kaXNhYmxlLWxpYm5mbmV0bGluay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjYwOWUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvMDAwMS1jb25maWd1cmUtQWRkLW9wdGlvbi10by1lbmFibGUtZGlzYWJsZS1saWJuZm5ldGxpbmsucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRnJvbSA1YzQ3Y2Y1MDYxYjg1MmMwMjE3OGYwMWUyMzY5MGJmZTM4YTk5ZDkzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTcgTWFyIDIwMTMgMTE6MjE6MzUgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiBBZGQgb3B0aW9uIHRvIGVuYWJsZS9kaXNhYmxlIGxpYm5mbmV0bGluaworCitUaGlzIGNoYW5nZXMgdGhlIGNvbmZpZ3VyZSBiZWhhdmlvdXIgZnJvbSBhdXRvZGV0ZWN0aW5nCitmb3IgbGlibmZuZXRsaW5rIHRvIGhhdmluZyBhbiBvcHRpb24gdG8gZGlzYWJsZSBpdCBleHBsaWNpdGx5CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgY29uZmlndXJlLmFjIHwgICAxMSArKysrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGJhNjE2YWIuLmNlMmQzMTUgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTUzLDYgKzUzLDkgQEAgQUNfQVJHX0VOQUJMRShbbGliaXBxXSwKKyBBQ19BUkdfV0lUSChbcGtnY29uZmlnZGlyXSwgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1wa2djb25maWdkaXI9UEFUSF0sCisgCVtQYXRoIHRvIHRoZSBwa2djb25maWcgZGlyZWN0b3J5IFtbTElCRElSL3BrZ2NvbmZpZ11dXSksCisgCVtwa2djb25maWdkaXI9IiR3aXRodmFsIl0sIFtwa2djb25maWdkaXI9JyR7bGliZGlyfS9wa2djb25maWcnXSkKKytBQ19BUkdfRU5BQkxFKFtsaWJuZm5ldGxpbmtdLAorKwlBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYm5mbmV0bGlua10sIFtEbyBub3QgdXNlIG5ldGZpbHRlciBuZXRsaW5rIGxpYnJhcnldKSwKKysJW2VuYWJsZV9saWJuZm5ldGxpbms9IiRlbmFibGV2YWwiXSwgW2VuYWJsZV9saWJuZm5ldGxpbms9InllcyJdKQorIAorIGxpYmlwdGNfTERGTEFHUzI9IiI7CisgQVhfQ0hFQ0tfTElOS0VSX0ZMQUdTKFstV2wsLS1uby1hcy1uZWVkZWRdLAorQEAgLTg5LDkgKzkyLDExIEBAIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfTEFSR0VGSUxFXSwgW3Rlc3QgIiRlbmFibGVfbGFyZ2VmaWxlIiA9ICJ5ZXMiXSkKKyBBTV9DT05ESVRJT05BTChbRU5BQkxFX0RFVkVMXSwgW3Rlc3QgIiRlbmFibGVfZGV2ZWwiID0gInllcyJdKQorIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfTElCSVBRXSwgW3Rlc3QgIiRlbmFibGVfbGliaXBxIiA9ICJ5ZXMiXSkKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhbbGlibmZuZXRsaW5rXSwgW2xpYm5mbmV0bGluayA+PSAxLjBdLAorLQlbbmZuZXRsaW5rPTFdLCBbbmZuZXRsaW5rPTBdKQorLUFNX0NPTkRJVElPTkFMKFtIQVZFX0xJQk5GTkVUTElOS10sIFt0ZXN0ICIkbmZuZXRsaW5rIiA9IDFdKQorK0FTX0lGKFt0ZXN0ICJ4JGVuYWJsZV9saWJuZm5ldGxpbmsiID0gInh5ZXMiXSwgWworKyAgUEtHX0NIRUNLX01PRFVMRVMoW2xpYm5mbmV0bGlua10sIFtsaWJuZm5ldGxpbmsgPj0gMS4wXSkKKysgIF0pCisrCisrQU1fQ09ORElUSU9OQUwoW0hBVkVfTElCTkZORVRMSU5LXSwgW3Rlc3QgIngkZW5hYmxlX2xpYm5mbmV0bGluayIgPSAieHllcyJdKQorIAorIHJlZ3VsYXJfQ0ZMQUdTPSItV2FsbCAtV2FnZ3JlZ2F0ZS1yZXR1cm4gLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyBcCisgCS1XbWlzc2luZy1wcm90b3R5cGVzIC1XcmVkdW5kYW50LWRlY2xzIC1Xc2hhZG93IC1Xc3RyaWN0LXByb3RvdHlwZXMgXAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzLzAwMDEtZml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzLzAwMDEtZml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTAwM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsODkgQEAKK0Zyb20gN2MwN2I3ZmQ0ZmRkNzg0NGRkMDMyYWY4MjIzMDZmMDhlNDQyMmMzNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDYgQXByIDIwMTUgMjA6NDc6MjkgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gZml4IGJ1aWxkIHdpdGggbXVzbAorCitBZGQgbmVlZGVkIGhlYWRlcnMgdGhleSBhcmUganVzdCBub3QgbmVlZGVkIGZvciBnbGliYzYrIGJ1dCBhbHNvCitmb3IgbXVzbAorRGVmaW5lIGFkZGl0aW9uYWwgVENPUFRTIGlmIG5vdCB0aGVyZQorCit1X2luaXRYIHR5cGVzIGFyZSBpbiBzeXMvdHlwZXMuaCBiZSBleHBsaWNpdCBhYm91dCBpdAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGV4dGVuc2lvbnMvbGlieHRfVENQT1BUU1RSSVAuYyAgICAgICAgICAgfCAxNSArKysrKysrKysrKysrKysKKyBpbmNsdWRlL2xpYmlwdGMvaXB0X2tlcm5lbF9oZWFkZXJzLmggICAgIHwgMTIgLS0tLS0tLS0tLS0tCisgaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaCB8ICAxICsKKyAzIGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy9saWJ4dF9UQ1BPUFRTVFJJUC5jIGIvZXh0ZW5zaW9ucy9saWJ4dF9UQ1BPUFRTVFJJUC5jCitpbmRleCA2ODk3ODU3Li44YTE3MGIyIDEwMDY0NAorLS0tIGEvZXh0ZW5zaW9ucy9saWJ4dF9UQ1BPUFRTVFJJUC5jCisrKysgYi9leHRlbnNpb25zL2xpYnh0X1RDUE9QVFNUUklQLmMKK0BAIC0xMiw2ICsxMiwyMSBAQAorICNpZm5kZWYgVENQT1BUX01ENVNJRworICMJZGVmaW5lIFRDUE9QVF9NRDVTSUcgMTkKKyAjZW5kaWYKKysjaWZuZGVmIFRDUE9QVF9NQVhTRUcKKysjCWRlZmluZSBUQ1BPUFRfTUFYU0VHIDIKKysjZW5kaWYKKysjaWZuZGVmIFRDUE9QVF9XSU5ET1cKKysjCWRlZmluZSBUQ1BPUFRfV0lORE9XIDMKKysjZW5kaWYKKysjaWZuZGVmIFRDUE9QVF9TQUNLX1BFUk1JVFRFRAorKyMJZGVmaW5lIFRDUE9QVF9TQUNLX1BFUk1JVFRFRCA0CisrI2VuZGlmCisrI2lmbmRlZiBUQ1BPUFRfU0FDSworKyMJZGVmaW5lIFRDUE9QVF9TQUNLIDUKKysjZW5kaWYKKysjaWZuZGVmIFRDUE9QVF9USU1FU1RBTVAKKysjCWRlZmluZSBUQ1BPUFRfVElNRVNUQU1QIDgKKysjZW5kaWYKKyAKKyBlbnVtIHsKKyAJT19TVFJJUF9PUFRJT04gPSAwLAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGliaXB0Yy9pcHRfa2VybmVsX2hlYWRlcnMuaCBiL2luY2x1ZGUvbGliaXB0Yy9pcHRfa2VybmVsX2hlYWRlcnMuaAoraW5kZXggMTg4NjFmZS4uYTU5NjNlOSAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvbGliaXB0Yy9pcHRfa2VybmVsX2hlYWRlcnMuaAorKysrIGIvaW5jbHVkZS9saWJpcHRjL2lwdF9rZXJuZWxfaGVhZGVycy5oCitAQCAtNSw3ICs1LDYgQEAKKyAKKyAjaW5jbHVkZSA8bGltaXRzLmg+CisgCistI2lmIGRlZmluZWQoX19HTElCQ19fKSAmJiBfX0dMSUJDX18gPT0gMgorICNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+CitAQCAtMTMsMTUgKzEyLDQgQEAKKyAjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyAjaW5jbHVkZSA8bmV0L2lmLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNlbHNlIC8qIGxpYmM1ICovCistI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKy0jaW5jbHVkZSA8bGludXgvaXAuaD4KKy0jaW5jbHVkZSA8bGludXgvaW4uaD4KKy0jaW5jbHVkZSA8bGludXgvaWYuaD4KKy0jaW5jbHVkZSA8bGludXgvaWNtcC5oPgorLSNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKy0jaW5jbHVkZSA8bGludXgvdWRwLmg+CistI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CistI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorLSNlbmRpZgorICNlbmRpZgorZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCitpbmRleCA1N2ZkODJhLi40ODA3MjQ2IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaAorKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaAorQEAgLTE1LDYgKzE1LDcgQEAKKyAjaWZuZGVmIF9JUFRBQkxFU19ICisgI2RlZmluZSBfSVBUQUJMRVNfSAorIAorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyAKKyAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQuaD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvdHlwZXMuaC1hZGQtZGVmaW5lcy10aGF0LWFyZS1yZXF1aXJlZC1mb3ItaWZfcGFja2V0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvdHlwZXMuaC1hZGQtZGVmaW5lcy10aGF0LWFyZS1yZXF1aXJlZC1mb3ItaWZfcGFja2V0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZWUyOWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlcy90eXBlcy5oLWFkZC1kZWZpbmVzLXRoYXQtYXJlLXJlcXVpcmVkLWZvci1pZl9wYWNrZXQucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorRnJvbSAxOTU5MzQ5MWY0M2I3MGMxYTcxYzNiOWI4ZjRmZjRmZDE0NTAwMDE0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDIzIE1hciAyMDEyIDE0OjI3OjIwIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIHR5cGVzLmg6IGFkZCBkZWZpbmVzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciBpZl9wYWNrZXQuaAorCitUaGUgaXB0YWJsZXMgbG9jYWwgbGludXgvdHlwZXMuaCBvdmVycmlkZXMgdGhlIGtlcm5lbC9zeXNyb290Cit0eXBlcy5oLiBBcyBzdWNoLCB3ZSBuZWVkIHRvIHByb3ZpZGUgc29tZSBkZWZpbmVzIHRoYXQgYXJlIHJlcXVpcmVkCit0byBidWlsZCBhZ2FpbnN0IDMuMisga2VybmVsIGhlYWRlcnMuCisKK2lmbmRlZiBwcm90ZWN0aW9uIGlzIHByb3ZpZGVkIGZvciB0aGUgZGVmaW5lcyB0byBlbnN1cmUgdGhhdAorY29uZmlndXJhdGlvbiB0aGF0IGFscmVhZHkgaGF2ZSB0aGVzZSBkZWZpbmVzIGFyZSBzdGlsbCBidWlsZGFibGUuCisKK1RoaXMgY29tbWl0IGlzIHRlbXBvcmFyeSB1bnRpbCBhIG5ldyB2ZXJzaW9uIG9mIGlwdGFibGVzIGNhbiBiZQordXNlZCB0aGF0IGNvbnRhaW5zIHRoZSBkZWZpbmVzLgorCitUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIGNvbW1pdCBpbiB0aGUgaXB0YWJsZXMgZ2l0IHJlcG9zaXRvcnk6CisKKyAgaHR0cHM6Ly9naXQubmV0ZmlsdGVyLm9yZy9jZ2ktYmluL2dpdHdlYi5jZ2k/cD1pcHRhYmxlcy5naXQ7YT1jb21taXQ7aD1kYmU3N2NjOTc0Y2VlNjU2ZWFlMzdlNzUwMzlkZDFhNDEwYTQ1MzViCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+CistLS0KKyBpbmNsdWRlL2xpbnV4L3R5cGVzLmggfCAgIDEwICsrKysrKysrKysKKyAxIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKK2luZGV4IDhiNDgzYzguLmViZjY0MzIgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKKysrKyBiL2luY2x1ZGUvbGludXgvdHlwZXMuaAorQEAgLTM0LDUgKzM0LDE1IEBAIHR5cGVkZWYgX191NjQgX19iaXR3aXNlIF9fYmU2NDsKKyB0eXBlZGVmIF9fdTE2IF9fYml0d2lzZSBfX3N1bTE2OworIHR5cGVkZWYgX191MzIgX19iaXR3aXNlIF9fd3N1bTsKKyAKKysjaWZuZGVmIF9fYWxpZ25lZF91NjQKKysjZGVmaW5lIF9fYWxpZ25lZF91NjQgX191NjQgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpCisrI2VuZGlmCisrI2lmbmRlZiBfX2FsaWduZWRfYmU2NAorKyNkZWZpbmUgX19hbGlnbmVkX2JlNjQgX19iZTY0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKQorKyNlbmRpZgorKyNpZm5kZWYgX19hbGlnbmVkX2xlNjQKKysjZGVmaW5lIF9fYWxpZ25lZF9sZTY0IF9fbGU2NCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkKKysjZW5kaWYKKysKKyAjZW5kaWYgLyogIF9fQVNTRU1CTFlfXyAqLworICNlbmRpZiAvKiBfTElOVVhfVFlQRVNfSCAqLworLS0gCisxLjcuMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzXzEuNC4yMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzXzEuNC4yMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWMwMTdiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXNfMS40LjIxLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiVG9vbHMgZm9yIG1hbmFnaW5nIGtlcm5lbCBwYWNrZXQgZmlsdGVyaW5nIGNhcGFiaWxpdGllcyIKK0RFU0NSSVBUSU9OID0gImlwdGFibGVzIGlzIHRoZSB1c2Vyc3BhY2UgY29tbWFuZCBsaW5lIHByb2dyYW0gdXNlZCB0byBjb25maWd1cmUgYW5kIGNvbnRyb2wgbmV0d29yayBwYWNrZXQgXAorZmlsdGVyaW5nIGNvZGUgaW4gTGludXguIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5uZXRmaWx0ZXIub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLm5ldGZpbHRlci5vcmcvIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2M1wKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2lwdGFibGVzL2lwdGFibGVzLmM7YmVnaW5saW5lPTEzO2VuZGxpbmU9MjU7bWQ1PWM1Y2ZmZDA5OTc0NTU4Y2YyN2QwZjc2M2RmMmExMmRjIgorCitSUkVDT01NRU5EU18ke1BOfSA9ICJrZXJuZWwtbW9kdWxlLXgtdGFibGVzIFwKKyAgICAgICAgICAgICAgICAgICAgIGtlcm5lbC1tb2R1bGUtaXAtdGFibGVzIFwKKyAgICAgICAgICAgICAgICAgICAgIGtlcm5lbC1tb2R1bGUtaXB0YWJsZS1maWx0ZXIgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLW5hdCBcCisgICAgICAgICAgICAgICAgICAgICBrZXJuZWwtbW9kdWxlLW5mLWRlZnJhZy1pcHY0IFwKKyAgICAgICAgICAgICAgICAgICAgIGtlcm5lbC1tb2R1bGUtbmYtY29ubnRyYWNrIFwKKyAgICAgICAgICAgICAgICAgICAgIGtlcm5lbC1tb2R1bGUtbmYtY29ubnRyYWNrLWlwdjQgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1uZi1uYXQgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1pcHQtbWFzcXVlcmFkZSIKK0ZJTEVTXyR7UE59ID0rICIke2xpYmRpcn0veHRhYmxlcy8gJHtkYXRhZGlyfS94dGFibGVzIgorRklMRVNfJHtQTn0tZGJnID0rICIke2xpYmRpcn0veHRhYmxlcy8uZGVidWciCisKK1NSQ19VUkkgPSAiaHR0cDovL25ldGZpbHRlci5vcmcvcHJvamVjdHMvaXB0YWJsZXMvZmlsZXMvaXB0YWJsZXMtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly90eXBlcy5oLWFkZC1kZWZpbmVzLXRoYXQtYXJlLXJlcXVpcmVkLWZvci1pZl9wYWNrZXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtQWRkLW9wdGlvbi10by1lbmFibGUtZGlzYWJsZS1saWJuZm5ldGxpbmsucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MzZkMDQ4YzhlOGVlZWJjZDk3NTdkMDg2M2ViYjBjMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MjAwNGM2ODAyMWRhOWE1OTlmZWVkMjdmNjVkZWZjZmIyMjEyOGY3ZGEyYzA1MzFjMGY3NWRlMGY0NzlkM2UwIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1rZXJuZWw9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICAgICAgICAgIgorUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgJ2lwdjYnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgIgorCitQQUNLQUdFQ09ORklHW2lwdjZdID0gIi0tZW5hYmxlLWlwdjYsLS1kaXNhYmxlLWlwdjYsIgorCisjIGxpYm5mbmV0bGluayByZWNpcGUgaXMgaW4gbWV0YS1uZXR3b3JraW5nIGxheWVyCitQQUNLQUdFQ09ORklHW2xpYm5mbmV0bGlua10gPSAiLS1lbmFibGUtbGlibmZuZXRsaW5rLC0tZGlzYWJsZS1saWJuZm5ldGxpbmssbGlibmZuZXRsaW5rIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIFJlbW92ZSBzb21lIGxpYnRvb2wgbTQgZmlsZXMKKwkjIEtlZXAgYXhfY2hlY2tfbGlua2VyX2ZsYWdzLm00IHdoaWNoIGJlbG9uZ3MgdG8gYXV0b2NvbmYtYXJjaGl2ZS4KKwlybSAtZiBsaWJ0b29sLm00IGx0fm9ic29sZXRlLm00IGx0b3B0aW9ucy5tNCBsdHN1Z2FyLm00IGx0dmVyc2lvbi5tNAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9maWxlcy9kZWJpYW4vdGFyZ2V0cy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9maWxlcy9kZWJpYW4vdGFyZ2V0cy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYjU1NzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2RlYmlhbi90YXJnZXRzLmRpZmYKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK0luZGV4OiBpcHV0aWxzLXMyMDEyMTIyMS9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGlwdXRpbHMtczIwMTIxMjIxLm9yaWcvTWFrZWZpbGUKKysrKyBpcHV0aWxzLXMyMDEyMTIyMS9NYWtlZmlsZQorQEAgLTEwNiw3ICsxMDYsNyBAQCBlbmRpZgorIGVuZGlmCisgCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistSVBWNF9UQVJHRVRTPXRyYWNlcGF0aCBwaW5nIGNsb2NrZGlmZiByZGlzYyBhcnBpbmcgdGZ0cGQgcmFycGQKKytJUFY0X1RBUkdFVFM9dHJhY2VwYXRoIHBpbmcgY2xvY2tkaWZmIGFycGluZworIElQVjZfVEFSR0VUUz10cmFjZXBhdGg2IHRyYWNlcm91dGU2IHBpbmc2CisgVEFSR0VUUz0kKElQVjRfVEFSR0VUUykgJChJUFY2X1RBUkdFVFMpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2RlYmlhbi91c2VfZ2V0aG9zdGJ5bmFtZTIuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZGViaWFuL3VzZV9nZXRob3N0YnluYW1lMi5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYjE4ODYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2RlYmlhbi91c2VfZ2V0aG9zdGJ5bmFtZTIuZGlmZgpAQCAtMCwwICsxLDMxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW2Zyb20gb3RoZXIgZGlzdHJvIERlYmlhbl0KKworSW5kZXg6IGlwdXRpbHMtczIwMTIxMjIxL3RyYWNlcGF0aC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaXB1dGlscy1zMjAxMjEyMjEub3JpZy90cmFjZXBhdGguYworKysrIGlwdXRpbHMtczIwMTIxMjIxL3RyYWNlcGF0aC5jCitAQCAtMzcwLDkgKzM3MCw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAl9CisgI2VuZGlmCisgCistCWhlID0gZ2V0aG9zdGJ5bmFtZShwKTsKKysJaGUgPSBnZXRob3N0YnluYW1lMihhcmd2WzBdLCBBRl9JTkVUKTsKKyAJaWYgKGhlID09IE5VTEwpIHsKKy0JCWhlcnJvcigiZ2V0aG9zdGJ5bmFtZSIpOworKwkJaGVycm9yKCJnZXRob3N0YnluYW1lMiIpOworIAkJZXhpdCgxKTsKKyAJfQorIAorSW5kZXg6IGlwdXRpbHMtczIwMTIxMjIxL3BpbmcuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGlwdXRpbHMtczIwMTIxMjIxLm9yaWcvcGluZy5jCisrKysgaXB1dGlscy1zMjAxMjEyMjEvcGluZy5jCitAQCAtMjc5LDcgKzI3OSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICNlbHNlCisgCQkJaWRuID0gdGFyZ2V0OworICNlbmRpZgorLQkJCWhwID0gZ2V0aG9zdGJ5bmFtZShpZG4pOworKwkJCWhwID0gZ2V0aG9zdGJ5bmFtZTIoaWRuLCBBRl9JTkVUKTsKKyAJCQlpZiAoIWhwKSB7CisgCQkJCWZwcmludGYoc3RkZXJyLCAicGluZzogdW5rbm93biBob3N0ICVzXG4iLCB0YXJnZXQpOworIAkJCQlleGl0KDIpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9maWxlcy9maXgtYnVpbGQtY29tbWFuZC1saW5lLWFyZ3VtZW50LXdpdGgtZ251dGxzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9maWxlcy9maXgtYnVpbGQtY29tbWFuZC1saW5lLWFyZ3VtZW50LXdpdGgtZ251dGxzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Y2Q4MmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2ZpeC1idWlsZC1jb21tYW5kLWxpbmUtYXJndW1lbnQtd2l0aC1nbnV0bHMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitGcm9tIDU2OGU5OTBkMzBmYzdlOTQxNmUwYTZmOGM3NGVhNTAxMzkyMWVhZWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBcmphbiB2YW4gZGUgVmVuIDxhcmphbnZhbmRldmVuQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTYgSmFuIDIwMTMgMDM6MTI6MTUgKzA5MDAKK1N1YmplY3Q6IFtQQVRDSF0gcGluZzY6IEZpeCBidWlsZCBjb21tYW5kIGxpbmUgYXJndW1lbnQgd2l0aCBnbnV0bHMuCisKK1RoZSBwaW5nNiBjb21tYW5kIGNhbiB1c2UgZWl0aGVyIG9wZW5zc2wgb3IgZ251dGxzLi4uCithbmQgdGhlIE1ha2VmaWxlIGhhcyBhIGJ1bmNoIG9mIHNldHVwIGZvciBkZWZpbmluZyB3aGljaCBvZiB0aGUgdHdvIHRvIHVzZS4KKworVW5mb3J0dW5hdGVseSwgdGhlIGZpbmFsIC1EIGRlZmluZSBvbiB0aGUgY29tbWFuZGxpbmUgdG8gZW5hYmxlIGdudXRscworaW5zaWRlIHRoZSBwaW5nNi5jIGZpbGUgZGlkbid0IGFjdHVhbGx5IG1ha2UgaXQgb250byB0aGUgZ2NjCitjb21tYW5kbGluZS4KK1RoaXMgcGF0Y2ggYWRkcyB0aGUgJChERUZfQ1JZUFRPKSBNYWtlZmlsZSB2YXJpYWJsZSB0byBmaXggdGhpcyBnYXAuCisKK1NpZ25lZC1vZmYtYnk6IEFyamFuIHZhbiBkZSBWZW4gPGFyamFudmFuZGV2ZW5AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogWU9TSElGVUpJIEhpZGVha2kgPHlvc2hmdWppQGxpbnV4LWlwdjYub3JnPgorLS0tCisgTWFrZWZpbGUgfCAgICAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCBjNjJkOWRmLi44OTI0OWY1IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMTQ5LDcgKzE0OSw3IEBAIExJQl9jbG9ja2RpZmYgPSAkKExJQl9DQVApCisgREVGX3BpbmdfY29tbW9uID0gJChERUZfQ0FQKSAkKERFRl9JRE4pCisgREVGX3BpbmcgID0gJChERUZfQ0FQKSAkKERFRl9JRE4pICQoREVGX1dJVEhPVVRfSUZBRERSUykKKyBMSUJfcGluZyAgPSAkKExJQl9DQVApICQoTElCX0lETikKKy1ERUZfcGluZzYgPSAkKERFRl9DQVApICQoREVGX0lETikgJChERUZfV0lUSE9VVF9JRkFERFJTKSAkKERFRl9FTkFCTEVfUElORzZfUlRIRFIpCisrREVGX3Bpbmc2ID0gJChERUZfQ0FQKSAkKERFRl9JRE4pICQoREVGX1dJVEhPVVRfSUZBRERSUykgJChERUZfRU5BQkxFX1BJTkc2X1JUSERSKSAkKERFRl9DUllQVE8pCisgTElCX3Bpbmc2ID0gJChMSUJfQ0FQKSAkKExJQl9JRE4pICQoTElCX1JFU09MVikgJChMSUJfQ1JZUFRPKQorIAorIHBpbmc6IHBpbmdfY29tbW9uLm8KKy0tIAorMS43LjIuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL25zZ21scy1wYXRoLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvbnNnbWxzLXBhdGgtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYmY5NDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL25zZ21scy1wYXRoLWZpeC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGaXggbnNnbWxzIHBhdGggaXNzdWUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFpoYWkgRWR3aW4gPGVkd2luLnpoYWlAaW50ZWwuY29tPgorCitJbmRleDogaXB1dGlscy1zMjAxMDEwMDYvZG9jL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaXB1dGlscy1zMjAxMDEwMDYub3JpZy9kb2MvTWFrZWZpbGUJMjAxMS0wOS0xMyAyMDo0MjoyNy4wMDAwMDAwMDAgKzA4MDAKKysrKyBpcHV0aWxzLXMyMDEwMTAwNi9kb2MvTWFrZWZpbGUJMjAxMS0wOS0xMyAyMTowMTo1Mi4wMDAwMDAwMDAgKzA4MDAKK0BAIC0yNywxMCArMjcsMTUgQEAKKyAjIGRvY2Jvb2sybWFuIHByb2R1Y2VzIHV0dGVybHkgdWdseSBvdXRwdXQgYW5kIEkgZGlkIG5vdCBmaW5kCisgIyBhbnkgd2F5IHRvIGN1c3RvbWl6ZSB0aGlzIGJ1dCBoYWNraW5nIGJhY2tlbmQgcGVybCBzY3JpcHQgYSBsaXR0bGUuCisgIyBXZWxsLCBoZW5jZS4uLgorKyMgbnNnbWxzIHNlZW1zIGFwcGVuZCBwYXRoIHRvIHNlYXJjaCBkaXJlY3RvcnkgYWNjb3JkaW5nIHRvIHRoZSBzeXNpZCBwYXRoLgorKyMgZS5nLiBpZiBpbnB1dCAuLi9pbmRleC5kYiwgaXQgd291bGQgc2VhcmNoICRzZWFyY2hfZGlyZWN0b3J5Ly4uLyByYXRoZXIgdGhhbgorKyMgJHNlYXJjaF9kaXJlY3RvcnksIHdoaWNoIGxlYWRzIHNlYXJjaGluZyBmYWlsdXJlLiBGaXhpbmcgbnNnbWxzIHByb2JhYmx5CisrIyBpbnRyb2R1Y2Ugc29tZSBzaWRlIGVmZmVjdHMsIHNvIHVzZSB0aGlzIHVnbHkgaGFjazogcnVubmluZyBuc2dtbHMgaW4gY3VycmVudAorKyMgZGlyZWN0b3J5LCBhbmQgcnVubmluZyBkb2Nib29rMm1hbiBpbiB0bXAgZGlyZWN0b3J5LgorIAorICQoTUFORklMRVMpOiBpbmRleC5kYgorIAlALW1rZGlyIHRtcC5kYjJtYW4KKy0JQHNldCAtZTsgY2QgdG1wLmRiMm1hbjsgbnNnbWxzIC4uLyQ8IHwgc2dtbHNwbCAuLi9kb2Nib29rMm1hbi1zcGVjLnBsIDsJbXYgJEAgLi4KKysJQHNldCAtZTsgbnNnbWxzICQ8ID50bXAuZGIybWFuL291dHB1dDsgY2QgdG1wLmRiMm1hbjsgY2F0IG91dHB1dCB8IHNnbWxzcGwgLi4vZG9jYm9vazJtYW4tc3BlYy5wbCA7CW12ICRAIC4uCisgCUAtcm0gLXJmIHRtcC5kYjJtYW4KKyAKKyBjbGVhbjoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvaXB1dGlsc19zMjAxMjEyMjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2lwdXRpbHNfczIwMTIxMjIxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4N2EzMmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2lwdXRpbHNfczIwMTIxMjIxLmJiCkBAIC0wLDAgKzEsNzEgQEAKK1NVTU1BUlkgPSAiTmV0d29yayBtb25pdG9yaW5nIHRvb2xzIgorREVTQ1JJUFRJT04gPSAiVXRpbGl0aWVzIGZvciB0aGUgSVAgcHJvdG9jb2wsIGluY2x1ZGluZyB0cmFjZXJvdXRlNiwgXAordHJhY2VwYXRoLCB0cmFjZXBhdGg2LCBwaW5nLCBwaW5nNiBhbmQgYXJwaW5nLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuc2tidWZmLm5ldC9pcHV0aWxzIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKK0xJQ0VOU0UgPSAiQlNEICYgR1BMdjIrIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9waW5nLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0zNTttZDU9ZjljZWIyMDE3MzNlOWE2Y2Y4ZjAwNzY2ZGQyNzhkODIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdHJhY2VwYXRoLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMDttZDU9MGVjZWEyYmY2MGJmZjJmM2Q4NDAwOTZkODc2NDdmM2QgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXJwaW5nLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMTttZDU9ZmU4NDMwMWI1YzI2NTVjOTUwZjhiOTJhMDU3ZmFmYTYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGZ0cGQuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTMyO21kNT0yODgzNGJmOGE5MWE1YjhhOTI3NTVkYmVlNzA5ZWY5NiAiCisKK0RFUEVORFMgPSAiZ251dGxzIGRvY2Jvb2stdXRpbHMtbmF0aXZlIHNnbWxzcGwtbmF0aXZlIGxpYmNhcCIKKworCitTUkNfVVJJID0gImh0dHA6Ly93d3cuc2tidWZmLm5ldC9pcHV0aWxzLyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2RlYmlhbi91c2VfZ2V0aG9zdGJ5bmFtZTIuZGlmZiBcCisgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vdGFyZ2V0cy5kaWZmIFwKKyAgICAgICAgICAgZmlsZTovL25zZ21scy1wYXRoLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtYnVpbGQtY29tbWFuZC1saW5lLWFyZ3VtZW50LXdpdGgtZ251dGxzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2MDcyYWVmNjQyMDU3MjBkZDE4OTNiMzc1ZTE4NDE3MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NTBmNTQ5ZmM1YjYyMGMyM2M1OTI5YWE2ZDU0YjdkZGZjN2VlMWNiMWU4ZWZkYzVlOGJiMjFkOGQwYzUzMTlmIgorCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlICdDQz0ke0NDfSAtRF9HTlVfU09VUkNFJyBWUEFUSD0iJHtTVEFHSU5HX0xJQkRJUn06JHtTVEFHSU5HX0RJUl9IT1NUfS8ke2Jhc2VfbGliZGlyfSIgYWxsIG1hbgorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1tIDA3NTUgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9ICR7RH0ke21hbmRpcn0vbWFuOAorCSMgU1VJRCByb290IHByb2dyYW1zCisJaW5zdGFsbCAtbSA0NTU1IHBpbmcgJHtEfSR7YmFzZV9iaW5kaXJ9L3BpbmcKKwlpbnN0YWxsIC1tIDQ1NTUgcGluZzYgJHtEfSR7YmFzZV9iaW5kaXJ9L3Bpbmc2CisJaW5zdGFsbCAtbSA0NTU1IHRyYWNlcm91dGU2ICR7RH0ke2Jhc2VfYmluZGlyfS8KKwlpbnN0YWxsIC1tIDQ1NTUgY2xvY2tkaWZmICR7RH0ke2Jhc2VfYmluZGlyfS8KKwkjIE90aGVyIHByb2dyYW1ncworCWZvciBpIGluIGFycGluZyB0cmFjZXBhdGggdHJhY2VwYXRoNjsgZG8KKwkgIGluc3RhbGwgLW0gMDc1NSAkaSAke0R9JHtiYXNlX2JpbmRpcn0vCisJZG9uZQorCSMgTWFudWFsIHBhZ2VzIGZvciB0aGluZ3Mgd2UgYnVpbGQgcGFja2FnZXMgZm9yCisJZm9yIGkgaW4gdHJhY2VwYXRoLjggdHJhY2Vyb3V0ZTYuOCBwaW5nLjggYXJwaW5nLjg7IGRvCisJICBpbnN0YWxsIC1tIDA2NDQgZG9jLyRpICR7RH0ke21hbmRpcn0vbWFuOC8gfHwgdHJ1ZQorCWRvbmUKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfJHtQTn0tcGluZyA9ICJwaW5nIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3BpbmddID0gIiR7YmFzZV9iaW5kaXJ9L3BpbmciCisKK0FMVEVSTkFUSVZFXyR7UE59LXBpbmc2ID0gInBpbmc2IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Bpbmc2XSA9ICIke2Jhc2VfYmluZGlyfS9waW5nNiIKKworUEFDS0FHRVMgKz0gIiR7UE59LXBpbmcgJHtQTn0tcGluZzYgJHtQTn0tYXJwaW5nICR7UE59LXRyYWNlcGF0aCAke1BOfS10cmFjZXBhdGg2ICR7UE59LXRyYWNlcm91dGU2ICR7UE59LWNsb2NrZGlmZiIKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1waW5nICR7UE59LXBpbmc2ICR7UE59LWFycGluZyAke1BOfS10cmFjZXBhdGggJHtQTn0tdHJhY2VwYXRoNiAke1BOfS10cmFjZXJvdXRlNiAke1BOfS1jbG9ja2RpZmYiCisKK0ZJTEVTXyR7UE59CT0gIiIKK0ZJTEVTXyR7UE59LXBpbmcgPSAiJHtiYXNlX2JpbmRpcn0vcGluZy4ke0JQTn0iCitGSUxFU18ke1BOfS1waW5nNiA9ICIke2Jhc2VfYmluZGlyfS9waW5nNi4ke0JQTn0iCitGSUxFU18ke1BOfS1hcnBpbmcgPSAiJHtiYXNlX2JpbmRpcn0vYXJwaW5nIgorRklMRVNfJHtQTn0tdHJhY2VwYXRoID0gIiR7YmFzZV9iaW5kaXJ9L3RyYWNlcGF0aCIKK0ZJTEVTXyR7UE59LXRyYWNlcGF0aDYgPSAiJHtiYXNlX2JpbmRpcn0vdHJhY2VwYXRoNiIKK0ZJTEVTXyR7UE59LXRyYWNlcm91dGU2CT0gIiR7YmFzZV9iaW5kaXJ9L3RyYWNlcm91dGU2IgorRklMRVNfJHtQTn0tY2xvY2tkaWZmID0gIiR7YmFzZV9iaW5kaXJ9L2Nsb2NrZGlmZiIKK0ZJTEVTXyR7UE59LWRvYwk9ICIke21hbmRpcn0vbWFuOCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xlc3MvbGVzc180NzkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sZXNzL2xlc3NfNDc5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxODk1NGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sZXNzL2xlc3NfNDc5LmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiVGV4dCBmaWxlIHZpZXdlciBzaW1pbGFyIHRvIG1vcmUiCitERVNDUklQVElPTiA9ICJMZXNzIGlzIGEgcHJvZ3JhbSBzaW1pbGFyIHRvIG1vcmUsIGkuZS4gYSB0ZXJtaW5hbCBcCitiYXNlZCBwcm9ncmFtIGZvciB2aWV3aW5nIHRleHQgZmlsZXMgYW5kIHRoZSBvdXRwdXQgZnJvbSBvdGhlciBcCitwcm9ncmFtcy4gTGVzcyBvZmZlcnMgbWFueSBmZWF0dXJlcyBiZXlvbmQgdGhvc2UgdGhhdCBtb3JlIGRvZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ncmVlbndvb2Rzb2Z0d2FyZS5jb20vIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCisjIChHUEx2MisgKDw8IDQxOCksIEdQTHYzKyAoPj0gNDE4KSkgfCBsZXNzCisjIEluY2x1ZGluZyBlbWFpbCBhdXRob3IgZ2l2aW5nIHBlcm1pc3NpbmcgdG8gdXNlIEJTRAorIworIyBGcm9tOiBNYXJrIE51ZGVsbWFuIDxtYXJrbkBncmVlbndvb2Rzb2Z0d2FyZS5jb20+CisjIFRvOiBFbGl6YWJldGggRmxhbmFnYW4gPGVsaXphYmV0aC5mbGFuYWdhbkBpbnRlbC5jb20KKyMgRGF0ZTogMTIvMTkvMTEKKyMKKyMgSGkgRWxpemFiZXRoLAorIyBVc2luZyBhIGdlbmVyaWMgQlNEIGxpY2Vuc2UgZm9yIGxlc3MgaXMgZmluZSB3aXRoIG1lLgorIyBUaGFua3MsCisjCisjIC0tTWFyaworIworCitMSUNFTlNFID0gIkdQTHYzKyB8IEJTRC0yLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xJQ0VOU0U7bWQ1PTQ4YzI2YTMwN2Y5MWFmNzAwZTFmMDA1ODVmMjE1YWFmIgorREVQRU5EUyA9ICJuY3Vyc2VzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZ3JlZW53b29kc29mdHdhcmUuY29tLyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKwkgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjA0OWY1MWNjZmUyNjg2MDA5YzZjZTk0M2VlYjRiYmFmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjViZjA2Y2IzMGVlMmEyYmQxZjc5ZjM5YWE5MWU0NjQ0NGU3Y2IxOWI0OGM5NWM0OTkyZmE2M2NmZTQ1MjdhODAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworZG9faW5zdGFsbCAoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgJ2JpbmRpcj0ke0R9JHtiaW5kaXJ9JyAnbWFuZGlyPSR7RH0ke21hbmRpcn0nIGluc3RhbGwKK30KKworQUxURVJOQVRJVkVfJHtQTn0gPSAibGVzcyIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vMDBfYXJjaGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby8wMF9hcmNoZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2NDQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vMDBfYXJjaGVzLnBhdGNoCkBAIC0wLDAgKzEsNjA3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitmcm9tIG9wZW5lbWJlZGRlZCwgYWRkZWQgYnkgUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK0luZGV4OiBsaWJhaW8tMC4zLjExMC9zcmMvc3lzY2FsbC1tNjhrLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBsaWJhaW8tMC4zLjExMC9zcmMvc3lzY2FsbC1tNjhrLmgKK0BAIC0wLDAgKzEsNzggQEAKKysjZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTI0MQorKyNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkyNDIKKysjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCTI0MworKyNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTI0NAorKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCTI0NQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDEodHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhKSBcCisrdHlwZSBmbmFtZShhdHlwZSBhKSBcCisreyBcCisrcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX05SXyMjc25hbWU7IFwKKytyZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZykoYSk7IFwKKytfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgICMwIiBcCisrCQkgICAgICA6ICIrZCIgKF9fcmVzKSBcCisrCQkgICAgICA6ICJkIiAoX19hKSAgKTsgXAorK3JldHVybiAodHlwZSkgX19yZXM7IFwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsMih0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYikgXAorK3R5cGUgZm5hbWUoYXR5cGUgYSxidHlwZSBiKSBcCisreyBcCisrcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX05SXyMjc25hbWU7IFwKKytyZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZykoYSk7IFwKKytyZWdpc3RlciBsb25nIF9fYiBfX2FzbV9fICgiJWQyIikgPSAobG9uZykoYik7IFwKKytfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgICMwIiBcCisrCQkgICAgICA6ICIrZCIgKF9fcmVzKSBcCisrCQkgICAgICA6ICJkIiAoX19hKSwgImQiIChfX2IpIFwKKysJCSAgICAgKTsgXAorK3JldHVybiAodHlwZSkgX19yZXM7IFwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsMyh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjKSBcCisrdHlwZSBmbmFtZShhdHlwZSBhLGJ0eXBlIGIsY3R5cGUgYykgXAorK3sgXAorK3JlZ2lzdGVyIGxvbmcgX19yZXMgX19hc21fXyAoIiVkMCIpID0gX19OUl8jI3NuYW1lOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2EgX19hc21fXyAoIiVkMSIpID0gKGxvbmcpKGEpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2IgX19hc21fXyAoIiVkMiIpID0gKGxvbmcpKGIpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2MgX19hc21fXyAoIiVkMyIpID0gKGxvbmcpKGMpOyBcCisrX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwICAjMCIgXAorKwkJICAgICAgOiAiK2QiIChfX3JlcykgXAorKwkJICAgICAgOiAiZCIgKF9fYSksICJkIiAoX19iKSwgXAorKwkJCSJkIiAoX19jKSBcCisrCQkgICAgICk7IFwKKytyZXR1cm4gKHR5cGUpIF9fcmVzOyBcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDQodHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYyxkdHlwZSxkKSBcCisrdHlwZSBmbmFtZSAoYXR5cGUgYSwgYnR5cGUgYiwgY3R5cGUgYywgZHR5cGUgZCkgXAorK3sgXAorK3JlZ2lzdGVyIGxvbmcgX19yZXMgX19hc21fXyAoIiVkMCIpID0gX19OUl8jI3NuYW1lOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2EgX19hc21fXyAoIiVkMSIpID0gKGxvbmcpKGEpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2IgX19hc21fXyAoIiVkMiIpID0gKGxvbmcpKGIpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2MgX19hc21fXyAoIiVkMyIpID0gKGxvbmcpKGMpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2QgX19hc21fXyAoIiVkNCIpID0gKGxvbmcpKGQpOyBcCisrX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwICAjMCIgXAorKwkJICAgICAgOiAiK2QiIChfX3JlcykgXAorKwkJICAgICAgOiAiZCIgKF9fYSksICJkIiAoX19iKSwgXAorKwkJCSJkIiAoX19jKSwgImQiIChfX2QpICBcCisrCQkgICAgICk7IFwKKytyZXR1cm4gKHR5cGUpIF9fcmVzOyBcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDUodHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYyxkdHlwZSxkLGV0eXBlLGUpIFwKKyt0eXBlIGZuYW1lIChhdHlwZSBhLGJ0eXBlIGIsY3R5cGUgYyxkdHlwZSBkLGV0eXBlIGUpIFwKKyt7IFwKKytyZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fTlJfIyNzbmFtZTsgXAorK3JlZ2lzdGVyIGxvbmcgX19hIF9fYXNtX18gKCIlZDEiKSA9IChsb25nKShhKTsgXAorK3JlZ2lzdGVyIGxvbmcgX19iIF9fYXNtX18gKCIlZDIiKSA9IChsb25nKShiKTsgXAorK3JlZ2lzdGVyIGxvbmcgX19jIF9fYXNtX18gKCIlZDMiKSA9IChsb25nKShjKTsgXAorK3JlZ2lzdGVyIGxvbmcgX19kIF9fYXNtX18gKCIlZDQiKSA9IChsb25nKShkKTsgXAorK3JlZ2lzdGVyIGxvbmcgX19lIF9fYXNtX18gKCIlZDUiKSA9IChsb25nKShlKTsgXAorK19fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAgIzAiIFwKKysJCSAgICAgIDogIitkIiAoX19yZXMpIFwKKysJCSAgICAgIDogImQiIChfX2EpLCAiZCIgKF9fYiksIFwKKysJCQkiZCIgKF9fYyksICJkIiAoX19kKSwgImQiIChfX2UpICBcCisrCQkgICAgICk7IFwKKytyZXR1cm4gKHR5cGUpIF9fcmVzOyBcCisrfQorKworSW5kZXg6IGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhaW8tMC4zLjExMC5vcmlnL3NyYy9zeXNjYWxsLmgKKysrKyBsaWJhaW8tMC4zLjExMC9zcmMvc3lzY2FsbC5oCitAQCAtMjgsNiArMjgsMTIgQEAKKyAjaW5jbHVkZSAic3lzY2FsbC1zcGFyYy5oIgorICNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pCisgI2luY2x1ZGUgInN5c2NhbGwtYXJtNjQuaCIKKysjZWxpZiBkZWZpbmVkKF9fbTY4a19fKQorKyNpbmNsdWRlICJzeXNjYWxsLW02OGsuaCIKKysjZWxpZiBkZWZpbmVkKF9faHBwYV9fKQorKyNpbmNsdWRlICJzeXNjYWxsLXBhcmlzYy5oIgorKyNlbGlmIGRlZmluZWQoX19taXBzX18pCisrI2luY2x1ZGUgInN5c2NhbGwtbWlwcy5oIgorICNlbHNlCisgI3dhcm5pbmcgInVzaW5nIGdlbmVyaWMgc3lzY2FsbCBtZXRob2QiCisgI2luY2x1ZGUgInN5c2NhbGwtZ2VuZXJpYy5oIgorSW5kZXg6IGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLW1pcHMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLW1pcHMuaAorQEAgLTAsMCArMSwyMjMgQEAKKysvKgorKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorKyAqIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDk2LCA5NywgOTgsIDk5LCAyMDAwIGJ5IFJhbGYgQmFlY2hsZQorKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisrICoKKysgKiBDaGFuZ2VkIHN5c3RlbSBjYWxscyBtYWNyb3MgX3N5c2NhbGw1IC0gX3N5c2NhbGw3IHRvIHB1c2ggYXJncyA1IHRvIDcgb250bworKyAqIHRoZSBzdGFjay4gUm9iaW4gRmFyaW5lIGZvciBBQ04gUy5BLCBDb3B5cmlnaHQgKEMpIDE5OTYgYnkgQUNOIFMuQQorKyAqLworKworKyNpZm5kZWYgX01JUFNfU0lNX0FCSTMyCisrI2RlZmluZSBfTUlQU19TSU1fQUJJMzIJCQkxCisrI2RlZmluZSBfTUlQU19TSU1fTkFCSTMyCQkyCisrI2RlZmluZSBfTUlQU19TSU1fQUJJNjQJCQkzCisrI2VuZGlmCisrCisrI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIKKysKKysvKgorKyAqIExpbnV4IG8zMiBzdHlsZSBzeXNjYWxscyBhcmUgaW4gdGhlIHJhbmdlIGZyb20gNDAwMCB0byA0OTk5LgorKyAqLworKyNkZWZpbmUgX19OUl9MaW51eAkJCTQwMDAKKysjZGVmaW5lIF9fTlJfaW9fc2V0dXAJCQkoX19OUl9MaW51eCArIDI0MSkKKysjZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJCShfX05SX0xpbnV4ICsgMjQyKQorKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJCShfX05SX0xpbnV4ICsgMjQzKQorKyNkZWZpbmUgX19OUl9pb19zdWJtaXQJCQkoX19OUl9MaW51eCArIDI0NCkKKysjZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkJKF9fTlJfTGludXggKyAyNDUpCisrCisrI2VuZGlmIC8qIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIgKi8KKysKKysjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NAorKworKy8qCisrICogTGludXggNjQtYml0IHN5c2NhbGxzIGFyZSBpbiB0aGUgcmFuZ2UgZnJvbSA1MDAwIHRvIDU5OTkuCisrICovCisrI2RlZmluZSBfX05SX0xpbnV4CQkJNTAwMAorKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJCShfX05SX0xpbnV4ICsgMjAwKQorKyNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkJKF9fTlJfTGludXggKyAyMDEpCisrI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkJKF9fTlJfTGludXggKyAyMDIpCisrI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJCShfX05SX0xpbnV4ICsgMjAzKQorKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCQkoX19OUl9MaW51eCArIDIwNCkKKysjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCAqLworKworKyNpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMgorKworKy8qCisrICogTGludXggTjMyIHN5c2NhbGxzIGFyZSBpbiB0aGUgcmFuZ2UgZnJvbSA2MDAwIHRvIDY5OTkuCisrICovCisrI2RlZmluZSBfX05SX0xpbnV4CQkJNjAwMAorKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJCShfX05SX0xpbnV4ICsgMjAwKQorKyNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkJKF9fTlJfTGludXggKyAyMDEpCisrI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkJKF9fTlJfTGludXggKyAyMDIpCisrI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJCShfX05SX0xpbnV4ICsgMjAzKQorKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCQkoX19OUl9MaW51eCArIDIwNCkKKysjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIgKi8KKysKKysjZGVmaW5lIGlvX3N5c2NhbGwxKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSkgXAorK3R5cGUgZm5hbWUoYXR5cGUgYSkgXAorK3sgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EzIGFzbSgiJDciKTsgXAorKwl1bnNpZ25lZCBsb25nIF9fdjA7IFwKKysJXAorKwlfX2FzbV9fIHZvbGF0aWxlICggXAorKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIgXAorKwkibGlcdCQyLCAlM1x0XHRcdCMgIiAjZm5hbWUgIlxuXHQiIFwKKysJInN5c2NhbGxcblx0IiBcCisrCSJtb3ZlXHQlMCwgJDJcblx0IiBcCisrCSIuc2V0XHRyZW9yZGVyIiBcCisrCTogIj0mciIgKF9fdjApLCAiPXIiIChfX2EzKSBcCisrCTogInIiIChfX2EwKSwgImkiIChfX05SXyMjc25hbWUpIFwKKysJOiAiJDIiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorKwkgICJtZW1vcnkiKTsgXAorKwlcCisrCWlmIChfX2EzID09IDApIFwKKysJCXJldHVybiAodHlwZSkgX192MDsgXAorKwlyZXR1cm4gKHR5cGUpIC0xOyBcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDIodHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhLGJ0eXBlLGIpIFwKKyt0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIpIFwKKyt7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EwIGFzbSgiJDQiKSA9ICh1bnNpZ25lZCBsb25nKSBhOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMSBhc20oIiQ1IikgPSAodW5zaWduZWQgbG9uZykgYjsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpOyBcCisrCXVuc2lnbmVkIGxvbmcgX192MDsgXAorKwlcCisrCV9fYXNtX18gdm9sYXRpbGUgKCBcCisrCSIuc2V0XHRub3Jlb3JkZXJcblx0IiBcCisrCSJsaVx0JDIsICU0XHRcdFx0IyAiICNmbmFtZSAiXG5cdCIgXAorKwkic3lzY2FsbFxuXHQiIFwKKysJIm1vdmVcdCUwLCAkMlxuXHQiIFwKKysJIi5zZXRcdHJlb3JkZXIiIFwKKysJOiAiPSZyIiAoX192MCksICI9ciIgKF9fYTMpIFwKKysJOiAiciIgKF9fYTApLCAiciIgKF9fYTEpLCAiaSIgKF9fTlJfIyNzbmFtZSkgXAorKwk6ICIkMiIsICIkOCIsICIkOSIsICIkMTAiLCAiJDExIiwgIiQxMiIsICIkMTMiLCAiJDE0IiwgIiQxNSIsICIkMjQiLCBcCisrCSAgIm1lbW9yeSIpOyBcCisrCVwKKysJaWYgKF9fYTMgPT0gMCkgXAorKwkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCisrCXJldHVybiAodHlwZSkgLTE7IFwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsMyh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjKSBcCisrdHlwZSBmbmFtZShhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjKSBcCisreyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMCBhc20oIiQ0IikgPSAodW5zaWduZWQgbG9uZykgYTsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTEgYXNtKCIkNSIpID0gKHVuc2lnbmVkIGxvbmcpIGI7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EyIGFzbSgiJDYiKSA9ICh1bnNpZ25lZCBsb25nKSBjOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMyBhc20oIiQ3Iik7IFwKKysJdW5zaWduZWQgbG9uZyBfX3YwOyBcCisrCVwKKysJX19hc21fXyB2b2xhdGlsZSAoIFwKKysJIi5zZXRcdG5vcmVvcmRlclxuXHQiIFwKKysJImxpXHQkMiwgJTVcdFx0XHQjICIgI2ZuYW1lICJcblx0IiBcCisrCSJzeXNjYWxsXG5cdCIgXAorKwkibW92ZVx0JTAsICQyXG5cdCIgXAorKwkiLnNldFx0cmVvcmRlciIgXAorKwk6ICI9JnIiIChfX3YwKSwgIj1yIiAoX19hMykgXAorKwk6ICJyIiAoX19hMCksICJyIiAoX19hMSksICJyIiAoX19hMiksICJpIiAoX19OUl8jI3NuYW1lKSBcCisrCTogIiQyIiwgIiQ4IiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxMyIsICIkMTQiLCAiJDE1IiwgIiQyNCIsIFwKKysJICAibWVtb3J5Iik7IFwKKysJXAorKwlpZiAoX19hMyA9PSAwKSBcCisrCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKysJcmV0dXJuICh0eXBlKSAtMTsgXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGw0KHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMsZHR5cGUsZCkgXAorK3R5cGUgZm5hbWUoYXR5cGUgYSwgYnR5cGUgYiwgY3R5cGUgYywgZHR5cGUgZCkgXAorK3sgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2ExIGFzbSgiJDUiKSA9ICh1bnNpZ25lZCBsb25nKSBiOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMiBhc20oIiQ2IikgPSAodW5zaWduZWQgbG9uZykgYzsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpID0gKHVuc2lnbmVkIGxvbmcpIGQ7IFwKKysJdW5zaWduZWQgbG9uZyBfX3YwOyBcCisrCVwKKysJX19hc21fXyB2b2xhdGlsZSAoIFwKKysJIi5zZXRcdG5vcmVvcmRlclxuXHQiIFwKKysJImxpXHQkMiwgJTVcdFx0XHQjICIgI2ZuYW1lICJcblx0IiBcCisrCSJzeXNjYWxsXG5cdCIgXAorKwkibW92ZVx0JTAsICQyXG5cdCIgXAorKwkiLnNldFx0cmVvcmRlciIgXAorKwk6ICI9JnIiIChfX3YwKSwgIityIiAoX19hMykgXAorKwk6ICJyIiAoX19hMCksICJyIiAoX19hMSksICJyIiAoX19hMiksICJpIiAoX19OUl8jI3NuYW1lKSBcCisrCTogIiQyIiwgIiQ4IiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxMyIsICIkMTQiLCAiJDE1IiwgIiQyNCIsIFwKKysJICAibWVtb3J5Iik7IFwKKysJXAorKwlpZiAoX19hMyA9PSAwKSBcCisrCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKysJcmV0dXJuICh0eXBlKSAtMTsgXAorK30KKysKKysjaWYgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIpCisrCisrLyoKKysgKiBVc2luZyB0aG9zZSBtZWFucyB5b3VyIGJyYWluIG5lZWRzIG1vcmUgdGhhbiBhbiBvaWwgY2hhbmdlIDstKQorKyAqLworKworKyNkZWZpbmUgaW9fc3lzY2FsbDUodHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYyxkdHlwZSxkLGV0eXBlLGUpIFwKKyt0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMsIGR0eXBlIGQsIGV0eXBlIGUpIFwKKyt7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EwIGFzbSgiJDQiKSA9ICh1bnNpZ25lZCBsb25nKSBhOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMSBhc20oIiQ1IikgPSAodW5zaWduZWQgbG9uZykgYjsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTIgYXNtKCIkNiIpID0gKHVuc2lnbmVkIGxvbmcpIGM7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EzIGFzbSgiJDciKSA9ICh1bnNpZ25lZCBsb25nKSBkOyBcCisrCXVuc2lnbmVkIGxvbmcgX192MDsgXAorKwlcCisrCV9fYXNtX18gdm9sYXRpbGUgKCBcCisrCSIuc2V0XHRub3Jlb3JkZXJcblx0IiBcCisrCSJsd1x0JDIsICU2XG5cdCIgXAorKwkic3VidVx0JDI5LCAzMlxuXHQiIFwKKysJInN3XHQkMiwgMTYoJDI5KVxuXHQiIFwKKysJImxpXHQkMiwgJTVcdFx0XHQjICIgI2ZuYW1lICJcblx0IiBcCisrCSJzeXNjYWxsXG5cdCIgXAorKwkibW92ZVx0JTAsICQyXG5cdCIgXAorKwkiYWRkaXVcdCQyOSwgMzJcblx0IiBcCisrCSIuc2V0XHRyZW9yZGVyIiBcCisrCTogIj0mciIgKF9fdjApLCAiK3IiIChfX2EzKSBcCisrCTogInIiIChfX2EwKSwgInIiIChfX2ExKSwgInIiIChfX2EyKSwgImkiIChfX05SXyMjc25hbWUpLCBcCisrCSAgIm0iICgodW5zaWduZWQgbG9uZyllKSBcCisrCTogIiQyIiwgIiQ4IiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxMyIsICIkMTQiLCAiJDE1IiwgIiQyNCIsIFwKKysJICAibWVtb3J5Iik7IFwKKysJXAorKwlpZiAoX19hMyA9PSAwKSBcCisrCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKysJcmV0dXJuICh0eXBlKSAtMTsgXAorK30KKysKKysjZW5kaWYgLyogKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIpICovCisrCisrI2lmIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMikgfHwgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQpCisrCisrI2RlZmluZSBpb19zeXNjYWxsNSh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQsZXR5cGUsZSkgXAorK3R5cGUgZm5hbWUgKGF0eXBlIGEsYnR5cGUgYixjdHlwZSBjLGR0eXBlIGQsZXR5cGUgZSkgXAorK3sgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2ExIGFzbSgiJDUiKSA9ICh1bnNpZ25lZCBsb25nKSBiOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMiBhc20oIiQ2IikgPSAodW5zaWduZWQgbG9uZykgYzsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpID0gKHVuc2lnbmVkIGxvbmcpIGQ7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2E0IGFzbSgiJDgiKSA9ICh1bnNpZ25lZCBsb25nKSBlOyBcCisrCXVuc2lnbmVkIGxvbmcgX192MDsgXAorKwlcCisrCV9fYXNtX18gdm9sYXRpbGUgKCBcCisrCSIuc2V0XHRub3Jlb3JkZXJcblx0IiBcCisrCSJsaVx0JDIsICU2XHRcdFx0IyAiICNmbmFtZSAiXG5cdCIgXAorKwkic3lzY2FsbFxuXHQiIFwKKysJIm1vdmVcdCUwLCAkMlxuXHQiIFwKKysJIi5zZXRcdHJlb3JkZXIiIFwKKysJOiAiPSZyIiAoX192MCksICIrciIgKF9fYTMpIFwKKysJOiAiciIgKF9fYTApLCAiciIgKF9fYTEpLCAiciIgKF9fYTIpLCAiciIgKF9fYTQpLCAiaSIgKF9fTlJfIyNzbmFtZSkgXAorKwk6ICIkMiIsICIkOSIsICIkMTAiLCAiJDExIiwgIiQxMiIsICIkMTMiLCAiJDE0IiwgIiQxNSIsICIkMjQiLCBcCisrCSAgIm1lbW9yeSIpOyBcCisrCVwKKysJaWYgKF9fYTMgPT0gMCkgXAorKwkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCisrCXJldHVybiAodHlwZSkgLTE7IFwKKyt9CisrCisrI2VuZGlmIC8qIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMikgfHwgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQpICovCisrCitJbmRleDogbGliYWlvLTAuMy4xMTAvc3JjL3N5c2NhbGwtcGFyaXNjLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBsaWJhaW8tMC4zLjExMC9zcmMvc3lzY2FsbC1wYXJpc2MuaAorQEAgLTAsMCArMSwxNDYgQEAKKysvKgorKyAqIExpbnV4IHN5c3RlbSBjYWxsIG51bWJlcnMuCisrICoKKysgKiBDYXJ5IENvdXRhbnQgc2F5cyB0aGF0IHdlIHNob3VsZCBqdXN0IHVzZSBhbm90aGVyIHN5c2NhbGwgZ2F0ZXdheQorKyAqIHBhZ2UgdG8gYXZvaWQgY2xhc2hpbmcgd2l0aCB0aGUgSFBVWCBzcGFjZSwgYW5kIEkgdGhpbmsgaGUncyByaWdodDoKKysgKiBpdCB3aWxsIHdvdWxkIGtlZXAgYSBicmFuY2ggb3V0IG9mIG91ciBzeXNjYWxsIGVudHJ5IHBhdGgsIGF0IHRoZQorKyAqIHZlcnkgbGVhc3QuICBJZiB3ZSBkZWNpZGUgdG8gY2hhbmdlIGl0IGxhdGVyLCB3ZSBjYW4gYGBqdXN0JycgdHdlYWsKKysgKiB0aGUgTElOVVhfR0FURVdBWV9BRERSIGRlZmluZSBhdCB0aGUgYm90dG9tIGFuZCBtYWtlIF9fTlJfTGludXggYmUKKysgKiAxMDI0IG9yIHNvbWV0aGluZy4gIE9oLCBhbmQgcmVjb21waWxlIGxpYmMuID0pCisrICoKKysgKiA2NC1iaXQgSFBVWCBiaW5hcmllcyBnZXQgdGhlIHN5c2NhbGwgZ2F0ZXdheSBhZGRyZXNzIHBhc3NlZCBpbiBhIHJlZ2lzdGVyCisrICogZnJvbSB0aGUga2VybmVsIGF0IHN0YXJ0dXAsIHdoaWNoIHNlZW1zIGEgc2FuZSBzdHJhdGVneS4KKysgKi8KKysKKysjZGVmaW5lIF9fTlJfTGludXggICAgICAgICAgICAgICAgMAorKyNkZWZpbmUgX19OUl9pb19zZXR1cCAgICAgICAgICAgKF9fTlJfTGludXggKyAyMTUpCisrI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kgICAgICAgICAoX19OUl9MaW51eCArIDIxNikKKysjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzICAgICAgIChfX05SX0xpbnV4ICsgMjE3KQorKyNkZWZpbmUgX19OUl9pb19zdWJtaXQgICAgICAgICAgKF9fTlJfTGludXggKyAyMTgpCisrI2RlZmluZSBfX05SX2lvX2NhbmNlbCAgICAgICAgICAoX19OUl9MaW51eCArIDIxOSkKKysKKysjZGVmaW5lIFNZU19pZnkoc3lzY2FsbF9uYW1lKSAgIF9fTlJfIyNzeXNjYWxsX25hbWUKKysKKysvKiBBc3N1bWUgYWxsIHN5c2NhbGxzIGFyZSBkb25lIGZyb20gUElDIGNvZGUganVzdCB0byBiZQorKyAqIHNhZmUuIFRoZSB3b3JzdCBjYXNlIHNjZW5hcmlvIGlzIHRoYXQgeW91IGxvc2UgYSByZWdpc3RlcgorKyAqIGFuZCBzYXZlL3Jlc3RvcmUgcjE5IGFjcm9zcyB0aGUgc3lzY2FsbC4gKi8KKysjZGVmaW5lIFBJQworKworKy8qIERlZmluaXRpb24gdGFrZW4gZnJvbSBnbGliYyAyLjMuMworKyAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2hwcGEvc3lzZGVwLmgKKysgKi8KKysKKysjaWZkZWYgUElDCisrLyogV0FSTklORzogQ0FOTk9UIEJFIFVTRUQgSU4gQSBOT1AhICovCisrIyBkZWZpbmUgS19TVFdfQVNNX1BJQwkiICAgICAgIGNvcHkgJSVyMTksICUlcjRcbiIKKysjIGRlZmluZSBLX0xEV19BU01fUElDCSIgICAgICAgY29weSAlJXI0LCAlJXIxOVxuIgorKyMgZGVmaW5lIEtfVVNJTkdfR1I0CSIlcjQiLAorKyNlbHNlCisrIyBkZWZpbmUgS19TVFdfQVNNX1BJQwkiIFxuIgorKyMgZGVmaW5lIEtfTERXX0FTTV9QSUMJIiBcbiIKKysjIGRlZmluZSBLX1VTSU5HX0dSNAorKyNlbmRpZgorKworKy8qIEdDQyBoYXMgdG8gYmUgd2FybmVkIHRoYXQgYSBzeXNjYWxsIG1heSBjbG9iYmVyIGFsbCB0aGUgQUJJCisrICAgcmVnaXN0ZXJzIGxpc3RlZCBhcyAiY2FsbGVyLXNhdmVzIiwgc2VlIHBhZ2UgOCwgVGFibGUgMgorKyAgIGluIHNlY3Rpb24gMi4yLjYgb2YgdGhlIFBBLVJJU0MgUlVOLVRJTUUgYXJjaGl0ZWN0dXJlCisrICAgZG9jdW1lbnQuIEhvd2V2ZXIhIHIyOCBpcyB0aGUgcmVzdWx0IGFuZCB3aWxsIGNvbmZsaWN0IHdpdGgKKysgICB0aGUgY2xvYmJlciBsaXN0IHNvIGl0IGlzIGxlZnQgb3V0LiBBbHNvIHRoZSBpbnB1dCBhcmd1bWVudHMKKysgICByZWdpc3RlcnMgcjIwIC0+IHIyNiB3aWxsIGNvbmZsaWN0IHdpdGggdGhlIGxpc3Qgc28gdGhleQorKyAgIGFyZSB0cmVhdGVkIHNwZWNpYWxseS4gQWx0aG91Z2ggcjE5IGlzIGNsb2JiZXJlZCBieSB0aGUgc3lzY2FsbAorKyAgIHdlIGNhbm5vdCBzYXkgdGhpcyBiZWNhdXNlIGl0IHdvdWxkIHZpb2xhdGUgQUJJLCB0aHVzIHdlIHNheQorKyAgIHI0IGlzIGNsb2JiZXJlZCBhbmQgdXNlIHRoYXQgcmVnaXN0ZXIgdG8gc2F2ZS9yZXN0b3JlIHIxOQorKyAgIGFjcm9zcyB0aGUgc3lzY2FsbC4gKi8KKysKKysjZGVmaW5lIEtfQ0FMTF9DTE9CX1JFR1MgIiVyMSIsICIlcjIiLCBLX1VTSU5HX0dSNCBcCisrCQkJICIlcjIwIiwgIiVyMjkiLCAiJXIzMSIKKysKKysjdW5kZWYgS19JTkxJTkVfU1lTQ0FMTAorKyNkZWZpbmUgS19JTkxJTkVfU1lTQ0FMTChuYW1lLCBuciwgYXJncy4uLikJKHsJCQlcCisrCWxvbmcgX19zeXNfcmVzOwkJCQkJCQlcCisrCXsJCQkJCQkJCVwKKysJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yZXMgX19hc21fXygicjI4Iik7CQlcCisrCQlLX0xPQURfQVJHU18jI25yKGFyZ3MpCQkJCQlcCisrCQkvKiBGSVhNRTogSEFDSyBzdHcvbGR3IHIxOSBhcm91bmQgc3lzY2FsbCAqLwkJXAorKwkJX19hc21fXyB2b2xhdGlsZSgJCQkJCVwKKysJCQlLX1NUV19BU01fUElDCQkJCQlcCisrCQkJIglibGUgIDB4MTAwKCUlc3IyLCAlJXIwKVxuIgkJXAorKwkJCSIJbGRpICUxLCAlJXIyMFxuIgkJCVwKKysJCQlLX0xEV19BU01fUElDCQkJCQlcCisrCQkJOiAiPXIiIChfX3JlcykJCQkJCVwKKysJCQk6ICJpIiAoU1lTX2lmeShuYW1lKSkgS19BU01fQVJHU18jI25yCQlcCisrCQkJOiAibWVtb3J5IiwgS19DQUxMX0NMT0JfUkVHUyBLX0NMT0JfQVJHU18jI25yCVwKKysJCSk7CQkJCQkJCVwKKysJCV9fc3lzX3JlcyA9IChsb25nKV9fcmVzOwkJCQlcCisrCX0JCQkJCQkJCVwKKysJX19zeXNfcmVzOwkJCQkJCQlcCisrfSkKKysKKysjZGVmaW5lIEtfTE9BRF9BUkdTXzAoKQorKyNkZWZpbmUgS19MT0FEX0FSR1NfMShyMjYpCQkJCQlcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMjYgX19hc21fXygicjI2IikgPSAodW5zaWduZWQgbG9uZykocjI2KTsgICBcCisrCUtfTE9BRF9BUkdTXzAoKQorKyNkZWZpbmUgS19MT0FEX0FSR1NfMihyMjYscjI1KQkJCQkJXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcjI1IF9fYXNtX18oInIyNSIpID0gKHVuc2lnbmVkIGxvbmcpKHIyNSk7ICAgXAorKwlLX0xPQURfQVJHU18xKHIyNikKKysjZGVmaW5lIEtfTE9BRF9BUkdTXzMocjI2LHIyNSxyMjQpCQkJCVwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyNCBfX2FzbV9fKCJyMjQiKSA9ICh1bnNpZ25lZCBsb25nKShyMjQpOyAgIFwKKysJS19MT0FEX0FSR1NfMihyMjYscjI1KQorKyNkZWZpbmUgS19MT0FEX0FSR1NfNChyMjYscjI1LHIyNCxyMjMpCQkJCVwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyMyBfX2FzbV9fKCJyMjMiKSA9ICh1bnNpZ25lZCBsb25nKShyMjMpOyAgIFwKKysJS19MT0FEX0FSR1NfMyhyMjYscjI1LHIyNCkKKysjZGVmaW5lIEtfTE9BRF9BUkdTXzUocjI2LHIyNSxyMjQscjIzLHIyMikJCQlcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMjIgX19hc21fXygicjIyIikgPSAodW5zaWduZWQgbG9uZykocjIyKTsgICBcCisrCUtfTE9BRF9BUkdTXzQocjI2LHIyNSxyMjQscjIzKQorKyNkZWZpbmUgS19MT0FEX0FSR1NfNihyMjYscjI1LHIyNCxyMjMscjIyLHIyMSkJCQlcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMjEgX19hc21fXygicjIxIikgPSAodW5zaWduZWQgbG9uZykocjIxKTsgICBcCisrCUtfTE9BRF9BUkdTXzUocjI2LHIyNSxyMjQscjIzLHIyMikKKysKKysvKiBFdmVuIHdpdGggemVybyBhcmdzIHdlIHVzZSByMjAgZm9yIHRoZSBzeXNjYWxsIG51bWJlciAqLworKyNkZWZpbmUgS19BU01fQVJHU18wCisrI2RlZmluZSBLX0FTTV9BUkdTXzEgS19BU01fQVJHU18wLCAiciIgKF9fcjI2KQorKyNkZWZpbmUgS19BU01fQVJHU18yIEtfQVNNX0FSR1NfMSwgInIiIChfX3IyNSkKKysjZGVmaW5lIEtfQVNNX0FSR1NfMyBLX0FTTV9BUkdTXzIsICJyIiAoX19yMjQpCisrI2RlZmluZSBLX0FTTV9BUkdTXzQgS19BU01fQVJHU18zLCAiciIgKF9fcjIzKQorKyNkZWZpbmUgS19BU01fQVJHU181IEtfQVNNX0FSR1NfNCwgInIiIChfX3IyMikKKysjZGVmaW5lIEtfQVNNX0FSR1NfNiBLX0FTTV9BUkdTXzUsICJyIiAoX19yMjEpCisrCisrLyogVGhlIHJlZ2lzdGVycyBub3QgbGlzdGVkIGFzIGlucHV0cyBidXQgY2xvYmJlcmVkICovCisrI2RlZmluZSBLX0NMT0JfQVJHU182CisrI2RlZmluZSBLX0NMT0JfQVJHU181IEtfQ0xPQl9BUkdTXzYsICIlcjIxIgorKyNkZWZpbmUgS19DTE9CX0FSR1NfNCBLX0NMT0JfQVJHU181LCAiJXIyMiIKKysjZGVmaW5lIEtfQ0xPQl9BUkdTXzMgS19DTE9CX0FSR1NfNCwgIiVyMjMiCisrI2RlZmluZSBLX0NMT0JfQVJHU18yIEtfQ0xPQl9BUkdTXzMsICIlcjI0IgorKyNkZWZpbmUgS19DTE9CX0FSR1NfMSBLX0NMT0JfQVJHU18yLCAiJXIyNSIKKysjZGVmaW5lIEtfQ0xPQl9BUkdTXzAgS19DTE9CX0FSR1NfMSwgIiVyMjYiCisrCisrI2RlZmluZSBpb19zeXNjYWxsMSh0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEpCQkJXAorK3R5cGUgZm5hbWUodHlwZTEgYXJnMSkJCQkJCQkJXAorK3sJCQkJCQkJCQlcCisrICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKHNuYW1lLCAxLCBhcmcxKTsJCQkJXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGwyKHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyKQkJXAorK3R5cGUgZm5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMikJCQkJCVwKKyt7CQkJCQkJCQkJXAorKyAgICByZXR1cm4gS19JTkxJTkVfU1lTQ0FMTChzbmFtZSwgMiwgYXJnMSwgYXJnMik7CQkJXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGwzKHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMpCVwKKyt0eXBlIGZuYW1lKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMpCQkJCVwKKyt7CQkJCQkJCQkJXAorKyAgICByZXR1cm4gS19JTkxJTkVfU1lTQ0FMTChzbmFtZSwgMywgYXJnMSwgYXJnMiwgYXJnMyk7CQlcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDQodHlwZSxmbmFtZSxzbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMyx0eXBlNCxhcmc0KSBcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0KQkJXAorK3sJCQkJCQkJCQlcCisrICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKHNuYW1lLCA0LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KTsJCVwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsNSh0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsdHlwZTUsYXJnNSkgXAorK3R5cGUgZm5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCwgdHlwZTUgYXJnNSkJXAorK3sJCQkJCQkJCQlcCisrICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKHNuYW1lLCA1LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsJXAorK30KKysKK0luZGV4OiBsaWJhaW8tMC4zLjExMC9zcmMvc3lzY2FsbC1hcm0uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFpby0wLjMuMTEwLm9yaWcvc3JjL3N5c2NhbGwtYXJtLmgKKysrKyBsaWJhaW8tMC4zLjExMC9zcmMvc3lzY2FsbC1hcm0uaAorQEAgLTExNCwzICsxMTQsMTE5IEBAIHR5cGUgZm5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMKKyAgIHJldHVybiAodHlwZSkgX19yZXNfcjA7CQkJCQkJXAorIH0KKyAKKysvKgorKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgKKysgKgorKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNSBSdXNzZWxsIEtpbmcKKysgKgorKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKysgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKysgKgorKyAqIFBsZWFzZSBmb3J3YXJkIF9hbGxfIGNoYW5nZXMgdG8gdGhpcyBmaWxlIHRvIHJta0Bhcm0ubGludXgub3JnLnVrLAorKyAqIG5vIG1hdHRlciB3aGF0IHRoZSBjaGFuZ2UgaXMuICBUaGFua3MhCisrICovCisrCisrI2RlZmluZSBfX05SX09BQklfU1lTQ0FMTF9CQVNFCTB4OTAwMDAwCisrCisrI2lmIGRlZmluZWQoX190aHVtYl9fKSB8fCBkZWZpbmVkKF9fQVJNX0VBQklfXykKKysjZGVmaW5lIF9fTlJfU1lTQ0FMTF9CQVNFCTAKKysjZWxzZQorKyNkZWZpbmUgX19OUl9TWVNDQUxMX0JBU0UJX19OUl9PQUJJX1NZU0NBTExfQkFTRQorKyNlbmRpZgorKworKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJCShfX05SX1NZU0NBTExfQkFTRSsyNDMpCisrI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCQkoX19OUl9TWVNDQUxMX0JBU0UrMjQ0KQorKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJCShfX05SX1NZU0NBTExfQkFTRSsyNDUpCisrI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJCShfX05SX1NZU0NBTExfQkFTRSsyNDYpCisrI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJCShfX05SX1NZU0NBTExfQkFTRSsyNDcpCisrCisrI2RlZmluZSBfX3N5czIoeCkgI3gKKysjZGVmaW5lIF9fc3lzMSh4KSBfX3N5czIoeCkKKysKKysjaWYgZGVmaW5lZChfX3RodW1iX18pIHx8IGRlZmluZWQoX19BUk1fRUFCSV9fKQorKyNkZWZpbmUgX19TWVNfUkVHKG5hbWUpIHJlZ2lzdGVyIGxvbmcgX19zeXNyZWcgX19hc21fXygicjciKSA9IF9fTlJfIyNuYW1lOworKyNkZWZpbmUgX19TWVNfUkVHX0xJU1QocmVncy4uLikgInIiIChfX3N5c3JlZykgLCAjI3JlZ3MKKysjZGVmaW5lIF9fc3lzY2FsbChuYW1lKSAic3dpXHQwIgorKyNlbHNlCisrI2RlZmluZSBfX1NZU19SRUcobmFtZSkKKysjZGVmaW5lIF9fU1lTX1JFR19MSVNUKHJlZ3MuLi4pIHJlZ3MKKysjZGVmaW5lIF9fc3lzY2FsbChuYW1lKSAic3dpXHQiIF9fc3lzMShfX05SXyMjbmFtZSkgIiIKKysjZW5kaWYKKysKKysjZGVmaW5lIGlvX3N5c2NhbGwxKHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSkJCQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxKSB7CQkJCQkJXAorKyAgX19TWVNfUkVHKHNuYW1lKQkJCQkJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjAgX19hc21fXygicjAiKSA9IChsb25nKWFyZzE7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3Jlc19yMCBfX2FzbV9fKCJyMCIpOwkJCQkJXAorKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKKysgIF9fc3lzY2FsbChzbmFtZSkJCQkJCQkJXAorKwk6ICI9ciIgKF9fcmVzX3IwKQkJCQkJCVwKKysJOiBfX1NZU19SRUdfTElTVCggIjAiIChfX3IwKSApCQkJCQlcCisrCTogIm1lbW9yeSIgKTsJCQkJCQkJXAorKyAgcmV0dXJuICh0eXBlKSBfX3Jlc19yMDsJCQkJCQlcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDIodHlwZSxmbmFtZSxzbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIpCQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLHR5cGUyIGFyZzIpIHsJCQkJCVwKKysgIF9fU1lTX1JFRyhzbmFtZSkJCQkJCQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IwIF9fYXNtX18oInIwIikgPSAobG9uZylhcmcxOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMSBfX2FzbV9fKCJyMSIpID0gKGxvbmcpYXJnMjsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcmVzX3IwIF9fYXNtX18oInIwIik7CQkJCQlcCisrICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorKyAgX19zeXNjYWxsKHNuYW1lKQkJCQkJCQlcCisrCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorKwk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApLCAiciIgKF9fcjEpICkJCQlcCisrCTogIm1lbW9yeSIgKTsJCQkJCQkJXAorKyAgcmV0dXJuICh0eXBlKSBfX3Jlc19yMDsJCQkJCQlcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDModHlwZSxmbmFtZSxzbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMykJXAorK3R5cGUgZm5hbWUodHlwZTEgYXJnMSx0eXBlMiBhcmcyLHR5cGUzIGFyZzMpIHsJCQkJXAorKyAgX19TWVNfUkVHKHNuYW1lKQkJCQkJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjAgX19hc21fXygicjAiKSA9IChsb25nKWFyZzE7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IxIF9fYXNtX18oInIxIikgPSAobG9uZylhcmcyOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMiBfX2FzbV9fKCJyMiIpID0gKGxvbmcpYXJnMzsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcmVzX3IwIF9fYXNtX18oInIwIik7CQkJCQlcCisrICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorKyAgX19zeXNjYWxsKHNuYW1lKQkJCQkJCQlcCisrCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorKwk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApLCAiciIgKF9fcjEpLCAiciIgKF9fcjIpICkJCVwKKysJOiAibWVtb3J5IiApOwkJCQkJCQlcCisrICByZXR1cm4gKHR5cGUpIF9fcmVzX3IwOwkJCQkJCVwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsNCh0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQpXAorK3R5cGUgZm5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCkgewkJXAorKyAgX19TWVNfUkVHKHNuYW1lKQkJCQkJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjAgX19hc21fXygicjAiKSA9IChsb25nKWFyZzE7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IxIF9fYXNtX18oInIxIikgPSAobG9uZylhcmcyOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMiBfX2FzbV9fKCJyMiIpID0gKGxvbmcpYXJnMzsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjMgX19hc21fXygicjMiKSA9IChsb25nKWFyZzQ7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3Jlc19yMCBfX2FzbV9fKCJyMCIpOwkJCQkJXAorKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKKysgIF9fc3lzY2FsbChzbmFtZSkJCQkJCQkJXAorKwk6ICI9ciIgKF9fcmVzX3IwKQkJCQkJCVwKKysJOiBfX1NZU19SRUdfTElTVCggIjAiIChfX3IwKSwgInIiIChfX3IxKSwgInIiIChfX3IyKSwgInIiIChfX3IzKSApIFwKKysJOiAibWVtb3J5IiApOwkJCQkJCQlcCisrICByZXR1cm4gKHR5cGUpIF9fcmVzX3IwOwkJCQkJCVwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsNSh0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsdHlwZTUsYXJnNSkJXAorK3R5cGUgZm5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCwgdHlwZTUgYXJnNSkge1wKKysgIF9fU1lTX1JFRyhzbmFtZSkJCQkJCQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IwIF9fYXNtX18oInIwIikgPSAobG9uZylhcmcxOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMSBfX2FzbV9fKCJyMSIpID0gKGxvbmcpYXJnMjsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjIgX19hc21fXygicjIiKSA9IChsb25nKWFyZzM7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IzIF9fYXNtX18oInIzIikgPSAobG9uZylhcmc0OwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yNCBfX2FzbV9fKCJyNCIpID0gKGxvbmcpYXJnNTsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcmVzX3IwIF9fYXNtX18oInIwIik7CQkJCQlcCisrICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorKyAgX19zeXNjYWxsKHNuYW1lKQkJCQkJCQlcCisrCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorKwk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApLCAiciIgKF9fcjEpLCAiciIgKF9fcjIpLAkJXAorKwkJCSAgInIiIChfX3IzKSwgInIiIChfX3I0KSApCQkJXAorKwk6ICJtZW1vcnkiICk7CQkJCQkJCVwKKysgIHJldHVybiAodHlwZSkgX19yZXNfcjA7CQkJCQkJXAorK30KKysKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vZGVzdGRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vZGVzdGRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWQ5NjAxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9kZXN0ZGlyLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitmcm9tIG9wZW5lbWJlZGRlZCwgYWRkZWQgYnkgUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK0luZGV4OiBsaWJhaW8tMC4zLjEwNi9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFpby0wLjMuMTA2Lm9yaWcvTWFrZWZpbGUJMjAwNC0wMi0yNiAwNzoyNToxMC4wMDAwMDAwMDAgLTA4MDAKKysrKyBsaWJhaW8tMC4zLjEwNi9NYWtlZmlsZQkyMDA2LTEwLTE0IDA5OjE5OjA3LjAwMDAwMDAwMCAtMDcwMAorQEAgLTE1LDcgKzE1LDcgQEAKKyAJQCQoTUFLRSkgLUMgc3JjCisgCisgaW5zdGFsbDoKKy0JQCQoTUFLRSkgLUMgc3JjIGluc3RhbGwgcHJlZml4PSQocHJlZml4KSBpbmNsdWRlZGlyPSQoaW5jbHVkZWRpcikgbGliZGlyPSQobGliZGlyKQorKwlAJChNQUtFKSAtQyBzcmMgaW5zdGFsbCBwcmVmaXg9JChERVNURElSKSQocHJlZml4KSBpbmNsdWRlZGlyPSQoREVTVERJUikkKGluY2x1ZGVkaXIpIGxpYmRpcj0kKERFU1RESVIpJChsaWJkaXIpCisgCisgCisgY2xlYW46CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2dlbmVyaWMtYXJjaC1kZWN0ZWN0aW9uLWZvci1wYWRkaW5nLWRlZmluZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2dlbmVyaWMtYXJjaC1kZWN0ZWN0aW9uLWZvci1wYWRkaW5nLWRlZmluZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhN2U1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vZ2VuZXJpYy1hcmNoLWRlY3RlY3Rpb24tZm9yLXBhZGRpbmctZGVmaW5lcy5wYXRjaApAQCAtMCwwICsxLDY1IEBACitGcm9tOiBOYXRoYW4gUm9zc2kgPG5hdGhhbi5yb3NzaUB4aWxpbnguY29tPgorRGF0ZTogVHVlLCAyNyBKYW4gMjAxNSAxNDo1OTozNSArMTAwMAorU3ViamVjdDogW1BBVENIXSBHZW5lcmljIGFyY2ggZGVjdGVjdGlvbiBmb3IgcGFkZGluZyBkZWZpbmVzCisKK1doZW4gYXZhaWxhYmxlIHVzZSB0aGUgR05VIEMgZGVmaW5lcyBmb3IgZW5kaWFuIGFuZCBiaXR3aWR0aCB0bworZGV0ZXJtaW5lIHRoZSBwYWRkaW5nIHJlcXVpcmVkLiBUaGlzIHJlZHVjZXMgdGhlIG5lZWQgdG8gZGVmaW5lIHRoZQorcGFkZGluZyBzZWxlY3Rpb24gZm9yIGV2ZXJ5IGFyY2hpdGVjdHVyZS4KKworU2lnbmVkLW9mZi1ieTogTmF0aGFuIFJvc3NpIDxuYXRoYW4ucm9zc2lAeGlsaW54LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEplZmYgTW95ZXIgPGptb3llckByZWRoYXQuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorLS0tCisgc3JjL2xpYmFpby5oIHwgMTYgKysrKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2xpYmFpby5oIGIvc3JjL2xpYmFpby5oCitpbmRleCAxMjIzMTQ2Li40YTRlMGY1IDEwMDY0NAorLS0tIGEvc3JjL2xpYmFpby5oCisrKysgYi9zcmMvbGliYWlvLmgKK0BAIC01MiwxNCArNTIsMTggQEAgdHlwZWRlZiBlbnVtIGlvX2lvY2JfY21kIHsKKyAvKiBsaXR0bGUgZW5kaWFuLCAzMiBiaXRzICovCisgI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IChkZWZpbmVkKF9fYXJtX18pICYmICFkZWZpbmVkKF9fQVJNRUJfXykpIHx8IFwKKyAgICAgZGVmaW5lZChfX3NoX18pIHx8IGRlZmluZWQoX19iZmluX18pIHx8IGRlZmluZWQoX19NSVBTRUxfXykgfHwgXAorLSAgICBkZWZpbmVkKF9fY3Jpc19fKQorKyAgICBkZWZpbmVkKF9fY3Jpc19fKSB8fCBcCisrICAgIChkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAmJiBcCisrICAgICAgICAgX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9MSVRUTEVfRU5ESUFOX18gJiYgX19TSVpFT0ZfTE9OR19fID09IDQpCisgI2RlZmluZSBQQURERUQoeCwgeSkJeDsgdW5zaWduZWQgeQorICNkZWZpbmUgUEFEREVEcHRyKHgsIHkpCXg7IHVuc2lnbmVkIHkKKyAjZGVmaW5lIFBBRERFRHVsKHgsIHkpCXVuc2lnbmVkIGxvbmcgeDsgdW5zaWduZWQgeQorIAorIC8qIGxpdHRsZSBlbmRpYW4sIDY0IGJpdHMgKi8KKyAjZWxpZiBkZWZpbmVkKF9faWE2NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hbHBoYV9fKSB8fCBcCistICAgICAgKGRlZmluZWQoX19hYXJjaDY0X18pICYmIGRlZmluZWQoX19BQVJDSDY0RUxfXykpCisrICAgICAgKGRlZmluZWQoX19hYXJjaDY0X18pICYmIGRlZmluZWQoX19BQVJDSDY0RUxfXykpIHx8IFwKKysgICAgICAoZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0JZVEVfT1JERVJfXykgJiYgXAorKyAgICAgICAgICBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0xJVFRMRV9FTkRJQU5fXyAmJiBfX1NJWkVPRl9MT05HX18gPT0gOCkKKyAjZGVmaW5lIFBBRERFRCh4LCB5KQl4LCB5CisgI2RlZmluZSBQQURERURwdHIoeCwgeSkJeAorICNkZWZpbmUgUEFEREVEdWwoeCwgeSkJdW5zaWduZWQgbG9uZyB4CitAQCAtNjcsNyArNzEsOSBAQCB0eXBlZGVmIGVudW0gaW9faW9jYl9jbWQgeworIC8qIGJpZyBlbmRpYW4sIDY0IGJpdHMgKi8KKyAjZWxpZiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pIHx8IGRlZmluZWQoX19zMzkweF9fKSB8fCBcCisgICAgICAgKGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pKSB8fCBcCistICAgICAgKGRlZmluZWQoX19hYXJjaDY0X18pICYmIGRlZmluZWQoX19BQVJDSDY0RUJfXykpCisrICAgICAgKGRlZmluZWQoX19hYXJjaDY0X18pICYmIGRlZmluZWQoX19BQVJDSDY0RUJfXykpIHx8IFwKKysgICAgICAoZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0JZVEVfT1JERVJfXykgJiYgXAorKyAgICAgICAgICAgX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9CSUdfRU5ESUFOX18gJiYgX19TSVpFT0ZfTE9OR19fID09IDgpCisgI2RlZmluZSBQQURERUQoeCwgeSkJdW5zaWduZWQgeTsgeAorICNkZWZpbmUgUEFEREVEcHRyKHgseSkJeAorICNkZWZpbmUgUEFEREVEdWwoeCwgeSkJdW5zaWduZWQgbG9uZyB4CitAQCAtNzYsNyArODIsOSBAQCB0eXBlZGVmIGVudW0gaW9faW9jYl9jbWQgeworICNlbGlmIGRlZmluZWQoX19QUENfXykgfHwgZGVmaW5lZChfX3MzOTBfXykgfHwgXAorICAgICAgIChkZWZpbmVkKF9fYXJtX18pICYmIGRlZmluZWQoX19BUk1FQl9fKSkgfHwgXAorICAgICAgIGRlZmluZWQoX19zcGFyY19fKSB8fCBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19tNjhrX18pIHx8IFwKKy0gICAgICBkZWZpbmVkKF9faHBwYV9fKSB8fCBkZWZpbmVkKF9fZnJ2X18pIHx8IGRlZmluZWQoX19hdnIzMl9fKQorKyAgICAgIGRlZmluZWQoX19ocHBhX18pIHx8IGRlZmluZWQoX19mcnZfXykgfHwgZGVmaW5lZChfX2F2cjMyX18pIHx8IFwKKysgICAgICAoZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0JZVEVfT1JERVJfXykgJiYgXAorKyAgICAgICAgICAgX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9CSUdfRU5ESUFOX18gJiYgX19TSVpFT0ZfTE9OR19fID09IDQpCisgI2RlZmluZSBQQURERUQoeCwgeSkJdW5zaWduZWQgeTsgeAorICNkZWZpbmUgUEFEREVEcHRyKHgsIHkpCXVuc2lnbmVkIHk7IHgKKyAjZGVmaW5lIFBBRERFRHVsKHgsIHkpCXVuc2lnbmVkIHk7IHVuc2lnbmVkIGxvbmcgeAorLS0gCisyLjEuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2xpYmFpb19maXhfZm9yX21pcHNfc3lzY2FsbHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2xpYmFpb19maXhfZm9yX21pcHNfc3lzY2FsbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM2ODUwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vbGliYWlvX2ZpeF9mb3JfbWlwc19zeXNjYWxscy5wYXRjaApAQCAtMCwwICsxLDYyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBQaGlsIFN0YXViIDxQaGlsLlN0YXViQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBsaWJhaW8tMC4zLjEwOS9zcmMvc3lzY2FsbC1taXBzLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhaW8tMC4zLjEwOS5vcmlnL3NyYy9zeXNjYWxsLW1pcHMuaAorKysrIGxpYmFpby0wLjMuMTA5L3NyYy9zeXNjYWxsLW1pcHMuaAorQEAgLTc2LDcgKzc2LDcgQEAgdHlwZSBmbmFtZShhdHlwZSBhKSBcCisgCVwKKyAJaWYgKF9fYTMgPT0gMCkgXAorIAkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCistCXJldHVybiAodHlwZSkgLTE7IFwKKysJcmV0dXJuICh0eXBlKSAoLShfX3YwKSk7IFwKKyB9CisgCisgI2RlZmluZSBpb19zeXNjYWxsMih0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYikgXAorQEAgLTEwMCw3ICsxMDAsNyBAQCB0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIpIFwKKyAJXAorIAlpZiAoX19hMyA9PSAwKSBcCisgCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKy0JcmV0dXJuICh0eXBlKSAtMTsgXAorKwlyZXR1cm4gKHR5cGUpICgtKF9fdjApKTsgXAorIH0KKyAKKyAjZGVmaW5lIGlvX3N5c2NhbGwzKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMpIFwKK0BAIC0xMjUsNyArMTI1LDcgQEAgdHlwZSBmbmFtZShhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjKSBcCisgCVwKKyAJaWYgKF9fYTMgPT0gMCkgXAorIAkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCistCXJldHVybiAodHlwZSkgLTE7IFwKKysJcmV0dXJuICh0eXBlKSAoLShfX3YwKSk7IFwKKyB9CisgCisgI2RlZmluZSBpb19zeXNjYWxsNCh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQpIFwKK0BAIC0xNTAsNyArMTUwLDcgQEAgdHlwZSBmbmFtZShhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjLCBkdAorIAlcCisgCWlmIChfX2EzID09IDApIFwKKyAJCXJldHVybiAodHlwZSkgX192MDsgXAorLQlyZXR1cm4gKHR5cGUpIC0xOyBcCisrCXJldHVybiAodHlwZSkgKC0oX192MCkpOyBcCisgfQorIAorICNpZiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMikKK0BAIC0xODYsNyArMTg2LDcgQEAgdHlwZSBmbmFtZShhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjLCBkdAorIAlcCisgCWlmIChfX2EzID09IDApIFwKKyAJCXJldHVybiAodHlwZSkgX192MDsgXAorLQlyZXR1cm4gKHR5cGUpIC0xOyBcCisrCXJldHVybiAodHlwZSkgKC0oX192MCkpOyBcCisgfQorIAorICNlbmRpZiAvKiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMikgKi8KK0BAIC0yMTYsNyArMjE2LDcgQEAgdHlwZSBmbmFtZSAoYXR5cGUgYSxidHlwZSBiLGN0eXBlIGMsZHR5cAorIAlcCisgCWlmIChfX2EzID09IDApIFwKKyAJCXJldHVybiAodHlwZSkgX192MDsgXAorLQlyZXR1cm4gKHR5cGUpIC0xOyBcCisrCXJldHVybiAodHlwZSkgKC0oX192MCkpOyBcCisgfQorIAorICNlbmRpZiAvKiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIpIHx8IChfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0KSAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl94MzIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2xpYmFpb19maXhfZm9yX3gzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDhmNWExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl94MzIucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1Byb3Blcmx5IGxvYWQgYXJndW1lbnRzIDUgYW4gNiBmb3IgeDg2LTY0IHN5c2NhbGwKK1VzZSBhc20gKCJyMTAiKSBhbmQgYXNtICgicjgiKSB0byBsb2FkIGFyZ3VtZW50cyA1IGFuIDYgZm9yIHg4Ni02NAorc3lzY2FsbCBzbyB0aGF0IGl0IHdvcmtzIHdpdGggYm90aCB4MzIgYW5kIHg4Ni02NC4KKworUmVjZWl2ZWQgdGhpcyBwYXRjaCBmcm9tIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDExLzEyLzAyCisKKy0tLSBsaWJhaW8tMC4zLjEwOS9zcmMvc3lzY2FsbC14ODZfNjQuaC54MzIJMjAwOS0xMC0wOSAxMToxNzowMi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJhaW8tMC4zLjEwOS9zcmMvc3lzY2FsbC14ODZfNjQuaAkyMDExLTEyLTAyIDA5OjA5OjA3LjUzNzYwMzIyNCAtMDgwMAorQEAgLTEsOCArMSwxOCBAQAorKyNpZm5kZWYgX19OUl9pb19zZXR1cAorICNkZWZpbmUgX19OUl9pb19zZXR1cAkJMjA2CisrI2VuZGlmCisrI2lmbmRlZiBfX05SX2lvX2Rlc3Ryb3kKKyAjZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJMjA3CisrI2VuZGlmCisrI2lmbmRlZiBfX05SX2lvX2dldGV2ZW50cworICNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJMjA4CisrI2VuZGlmCisrI2lmbmRlZiBfX05SX2lvX3N1Ym1pdAorICNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTIwOQorKyNlbmRpZgorKyNpZm5kZWYgX19OUl9pb19jYW5jZWwKKyAjZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkyMTAKKysjZW5kaWYKKyAKKyAjZGVmaW5lIF9fc3lzY2FsbF9jbG9iYmVyICJyMTEiLCJyY3giLCJtZW1vcnkiIAorICNkZWZpbmUgX19zeXNjYWxsICJzeXNjYWxsIgorQEAgLTQyLDEwICs1MiwxMSBAQCByZXR1cm4gX19yZXM7CQkJCQkJCQlcCisgdHlwZSBmbmFtZSAodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCkJCVwKKyB7CQkJCQkJCQkJXAorIGxvbmcgX19yZXM7CQkJCQkJCQlcCistX19hc21fXyB2b2xhdGlsZSAoIm1vdnEgJTUsJSVyMTAgOyIgX19zeXNjYWxsCQkJCVwKKytyZWdpc3RlciBsb25nIF9fYTQgYXNtICgicjEwIikgPSAobG9uZykgYXJnNDsJCQkJXAorK19fYXNtX18gdm9sYXRpbGUgKF9fc3lzY2FsbAkJCQkJCVwKKyAJOiAiPWEiIChfX3JlcykJCQkJCQkJXAorIAk6ICIwIiAoX19OUl8jI3NuYW1lKSwiRCIgKChsb25nKShhcmcxKSksIlMiICgobG9uZykoYXJnMikpLAlcCistCSAgImQiICgobG9uZykoYXJnMykpLCJnIiAoKGxvbmcpKGFyZzQpKSA6IF9fc3lzY2FsbF9jbG9iYmVyLCJyMTAiICk7IFwKKysJICAiZCIgKChsb25nKShhcmczKSksInIiIChfX2E0KSk7IFwKKyByZXR1cm4gX19yZXM7CQkJCQkJCQlcCisgfSAKKyAKK0BAIC01NCwxMCArNjUsMTEgQEAgcmV0dXJuIF9fcmVzOwkJCQkJCQkJXAorIHR5cGUgZm5hbWUgKHR5cGUxIGFyZzEsdHlwZTIgYXJnMix0eXBlMyBhcmczLHR5cGU0IGFyZzQsdHlwZTUgYXJnNSkJXAorIHsJCQkJCQkJCQlcCisgbG9uZyBfX3JlczsJCQkJCQkJCVwKKy1fX2FzbV9fIHZvbGF0aWxlICgibW92cSAlNSwlJXIxMCA7IG1vdnEgJTYsJSVyOCA7ICIgX19zeXNjYWxsCQlcCisrcmVnaXN0ZXIgbG9uZyBfX2E0IGFzbSAoInIxMCIpID0gKGxvbmcpIGFyZzQ7CQkJCVwKKytyZWdpc3RlciBsb25nIF9fYTUgYXNtICgicjgiKSA9IChsb25nKSBhcmc1OwkJCQlcCisrX19hc21fXyB2b2xhdGlsZSAoIF9fc3lzY2FsbAkJCQkJCVwKKyAJOiAiPWEiIChfX3JlcykJCQkJCQkJXAorIAk6ICIwIiAoX19OUl8jI3NuYW1lKSwiRCIgKChsb25nKShhcmcxKSksIlMiICgobG9uZykoYXJnMikpLAlcCistCSAgImQiICgobG9uZykoYXJnMykpLCJnIiAoKGxvbmcpKGFyZzQpKSwiZyIgKChsb25nKShhcmc1KSkgOglcCistCV9fc3lzY2FsbF9jbG9iYmVyLCJyOCIsInIxMCIgKTsJCQkJCVwKKysJICAiZCIgKChsb25nKShhcmczKSksInIiIChfX2E0KSwiciIgKF9fYTUpKTsJCQlcCisgcmV0dXJuIF9fcmVzOwkJCQkJCQkJXAorIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW9fMC4zLjExMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW9fMC4zLjExMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmUyOWNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpb18wLjMuMTEwLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiQXN5bmNocm9ub3VzIEkvTyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiQXN5bmNocm9ub3VzIGlucHV0L291dHB1dCBsaWJyYXJ5IHRoYXQgdXNlcyB0aGUga2VybmVscyBuYXRpdmUgaW50ZXJmYWNlIgorSE9NRVBBR0UgPSAiaHR0cDovL2xzZS5zb3VyY2Vmb3JnZS5uZXQvaW8vYWlvLmh0bWwiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDgwNDVmM2I4ZjkyOWMxY2IyOWExZTNmZDczN2I0OTkiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2xpYmEvbGliYWlvL2xpYmFpb18ke1BWfS5vcmlnLnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9nZW5lcmljLWFyY2gtZGVjdGVjdGlvbi1mb3ItcGFkZGluZy1kZWZpbmVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwX2FyY2hlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZXN0ZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYmFpb19maXhfZm9yX3gzMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJhaW9fZml4X2Zvcl9taXBzX3N5c2NhbGxzLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjJhMzU2MDJlNDM3NzgzODNlMmY0OTA3YTRjYTM5YWI4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUwMTkwMjhlNjMxNzI1NzI5Mzc2MjUwZTMyYjQ3MzAxMmY3Y2I2OGUxZjcyNzViZmMxYmJjZGQwZjg3NDVmN2UiCisKK0VYVFJBX09FTUFLRSA9KyAicHJlZml4PSR7cHJlZml4fSBpbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0gbGliZGlyPSR7bGliZGlyfSIKKyMgTmVlZCBsaWJjIGZvciBzdGFjay1wcm90ZWN0b3IncyBfX3N0YWNrX2Noa19mYWlsX2xvY2FsKCkgYm91bmNlIGZ1bmN0aW9uCitMREZMQUdTX2FwcGVuZF94ODYgPSAiIC1sYyIKKworZG9fY29uZmlndXJlICgpIHsKKyAgICBzZWQgLWkgJ3MjTElOS19GTEFHUz0uKiNMSU5LX0ZMQUdTPSQoTERGTEFHUykjJyBzcmMvTWFrZWZpbGUKK30KKworZG9faW5zdGFsbCAoKSB7CisgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlLzAwMDEtQWRkLUFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTLW9wdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS8wMDAxLUFkZC1BUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUy1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNhNzc5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS8wMDAxLUFkZC1BUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUy1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSwxNTEgQEAKK0Zyb20gNTkzNTcxNTc3MDZkNDdjMzY1YjIyMjc3MzllMTdkYWJhMzYwNzUyNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXNzYW5kcm8gR2hlZGluaSA8YWxlc3NhbmRyb0BnaGVkaW5pLm1lPgorRGF0ZTogU3VuLCAxIE1hciAyMDE1IDEyOjA3OjQ1ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUyBvcHRpb24KKworVGhpcyBmaXhlcyBhIGRpcmVjdG9yeSB0cmF2ZXJzYWwgaW4gdGhlIGNwaW8gdG9vbC4KKworCitVcHN0cmVhbS1TdGF0dXM6IGJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IExpIFpob3UgPGxpLnpob3VAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNwaW8vYnNkY3Bpby4xICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsrLQorIGNwaW8vY3Bpby5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsrCisgbGliYXJjaGl2ZS9hcmNoaXZlLmggICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKysKKyBsaWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zICAgICAgICAgIHwgICAgMyArKysKKyBsaWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jICAgIHwgICAxNCArKysrKysrKysrKy0tLQorIGxpYmFyY2hpdmUvdGVzdC90ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLmMgfCAgIDIzICsrKysrKysrKysrKysrKysrKysrKysrCisgNiBmaWxlcyBjaGFuZ2VkLCA0MyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bpby9ic2RjcGlvLjEgYi9jcGlvL2JzZGNwaW8uMQoraW5kZXggZjk2NmFhMC4uZTUyNTQ2ZSAxMDA2NDQKKy0tLSBhL2NwaW8vYnNkY3Bpby4xCisrKysgYi9jcGlvL2JzZGNwaW8uMQorQEAgLTE1Niw3ICsxNTYsOCBAQCBTZWUgYWJvdmUgZm9yIGRlc2NyaXB0aW9uLgorIC5JdCBGbCBGbCBpbnNlY3VyZQorIChpIGFuZCBwIG1vZGUgb25seSkKKyBEaXNhYmxlIHNlY3VyaXR5IGNoZWNrcyBkdXJpbmcgZXh0cmFjdGlvbiBvciBjb3B5aW5nLgorLVRoaXMgYWxsb3dzIGV4dHJhY3Rpb24gdmlhIHN5bWJvbGljIGxpbmtzIGFuZCBwYXRoIG5hbWVzIGNvbnRhaW5pbmcKKytUaGlzIGFsbG93cyBleHRyYWN0aW9uIHZpYSBzeW1ib2xpYyBsaW5rcywgYWJzb2x1dGUgcGF0aHMsCisrYW5kIHBhdGggbmFtZXMgY29udGFpbmluZworIC5TcSAuLgorIGluIHRoZSBuYW1lLgorIC5JdCBGbCBKICwgRmwgRmwgeHoKK2RpZmYgLS1naXQgYS9jcGlvL2NwaW8uYyBiL2NwaW8vY3Bpby5jCitpbmRleCAwYWNkZTExLi5iMjY3ZTliIDEwMDY0NAorLS0tIGEvY3Bpby9jcGlvLmMKKysrKyBiL2NwaW8vY3Bpby5jCitAQCAtMTcxLDYgKzE3MSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJY3Bpby0+ZXh0cmFjdF9mbGFncyB8PSBBUkNISVZFX0VYVFJBQ1RfTk9fT1ZFUldSSVRFX05FV0VSOworIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfU1lNTElOS1M7CisgCWNwaW8tPmV4dHJhY3RfZmxhZ3MgfD0gQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0RPVERPVDsKKysJY3Bpby0+ZXh0cmFjdF9mbGFncyB8PSBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUzsKKyAJY3Bpby0+ZXh0cmFjdF9mbGFncyB8PSBBUkNISVZFX0VYVFJBQ1RfUEVSTTsKKyAJY3Bpby0+ZXh0cmFjdF9mbGFncyB8PSBBUkNISVZFX0VYVFJBQ1RfRkZMQUdTOworIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9BQ0w7CitAQCAtMjU2LDYgKzI1Nyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJCWNhc2UgT1BUSU9OX0lOU0VDVVJFOgorIAkJCWNwaW8tPmV4dHJhY3RfZmxhZ3MgJj0gfkFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfU1lNTElOS1M7CisgCQkJY3Bpby0+ZXh0cmFjdF9mbGFncyAmPSB+QVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0RPVERPVDsKKysJCQljcGlvLT5leHRyYWN0X2ZsYWdzICY9IH5BUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUzsKKyAJCQlicmVhazsKKyAJCWNhc2UgJ0wnOiAvKiBHTlUgY3BpbyAqLworIAkJCWNwaW8tPm9wdGlvbl9mb2xsb3dfbGlua3MgPSAxOworZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvYXJjaGl2ZS5oIGIvbGliYXJjaGl2ZS9hcmNoaXZlLmgKK2luZGV4IDFmMGZjMzguLmVmNjM1YWMgMTAwNjQ0CistLS0gYS9saWJhcmNoaXZlL2FyY2hpdmUuaAorKysrIGIvbGliYXJjaGl2ZS9hcmNoaXZlLmgKK0BAIC02NDksNiArNjQ5LDggQEAgX19MQV9ERUNMIGludCBhcmNoaXZlX3JlYWRfc2V0X3Bhc3NwaHJhc2VfY2FsbGJhY2soc3RydWN0IGFyY2hpdmUgKiwKKyAvKiBEZWZhdWx0OiBEbyBub3QgdXNlIEhGUysgY29tcHJlc3Npb24gaWYgaXQgd2FzIG5vdCBjb21wcmVzc2VkLiAqLworIC8qIFRoaXMgaGFzIG5vIGVmZmVjdCBleGNlcHQgb24gTWFjIE9TIHYxMC42IG9yIGxhdGVyLiAqLworICNkZWZpbmUJQVJDSElWRV9FWFRSQUNUX0hGU19DT01QUkVTU0lPTl9GT1JDRUQJKDB4ODAwMCkKKysvKiBEZWZhdWx0OiBEbyBub3QgcmVqZWN0IGVudHJpZXMgd2l0aCBhYnNvbHV0ZSBwYXRocyAqLworKyNkZWZpbmUgQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMgKDB4MTAwMDApCisgCisgX19MQV9ERUNMIGludCBhcmNoaXZlX3JlYWRfZXh0cmFjdChzdHJ1Y3QgYXJjaGl2ZSAqLCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqLAorIAkJICAgICBpbnQgZmxhZ3MpOworZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrLjMgYi9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zCitpbmRleCBmYTkyNWNjLi5hMmU3YWZhIDEwMDY0NAorLS0tIGEvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2suMworKysrIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2suMworQEAgLTE3Nyw2ICsxNzcsOSBAQCBUaGUgZGVmYXVsdCBpcyB0byBub3QgcmVmdXNlIHN1Y2ggcGF0aHMuCisgTm90ZSB0aGF0IHBhdGhzIGVuZGluZyBpbgorIC5QYSAuLgorIGFsd2F5cyBjYXVzZSBhbiBlcnJvciwgcmVnYXJkbGVzcyBvZiB0aGlzIGZsYWcuCisrLkl0IENtIEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTCisrUmVmdXNlIHRvIGV4dHJhY3QgYW4gYWJzb2x1dGUgcGF0aC4KKytUaGUgZGVmYXVsdCBpcyB0byBub3QgcmVmdXNlIHN1Y2ggcGF0aHMuCisgLkl0IENtIEFSQ0hJVkVfRVhUUkFDVF9TUEFSU0UKKyBTY2FuIGRhdGEgZm9yIGJsb2NrcyBvZiBOVUwgYnl0ZXMgYW5kIHRyeSB0byByZWNyZWF0ZSB0aGVtIHdpdGggaG9sZXMuCisgVGhpcyByZXN1bHRzIGluIHNwYXJzZSBmaWxlcywgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciB0aGUgYXJjaGl2ZSBmb3JtYXQKK2RpZmYgLS1naXQgYS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYworaW5kZXggYWIzYmRhYy4uYzEyOTBlYiAxMDA2NDQKKy0tLSBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMKKysrKyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMKK0BAIC0yNTA5LDggKzI1MDksOSBAQCBjbGVhbnVwX3BhdGhuYW1lX3dpbihzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQorIC8qCisgICogQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZS4gIEluIHBhcnRpY3VsYXIsIHRoaXMgc3RyaXBzIGR1cGxpY2F0ZQorICAqICcvJyBjaGFyYWN0ZXJzLCAnLicgZWxlbWVudHMsIGFuZCB0cmFpbGluZyAnLycuICBJdCBhbHNvIHJhaXNlcyBhbgorLSAqIGVycm9yIGZvciBhbiBlbXB0eSBwYXRoLCBhIHRyYWlsaW5nICcuLicgb3IgKGlmIF9TRUNVUkVfTk9ET1RET1QgaXMKKy0gKiBzZXQpIGFueSAnLi4nIGluIHRoZSBwYXRoLgorKyAqIGVycm9yIGZvciBhbiBlbXB0eSBwYXRoLCBhIHRyYWlsaW5nICcuLicsIChpZiBfU0VDVVJFX05PRE9URE9UIGlzCisrICogc2V0KSBhbnkgJy4uJyBpbiB0aGUgcGF0aCBvciAoaWYgQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMKKysgKiBpcyBzZXQpIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLgorICAqLworIHN0YXRpYyBpbnQKKyBjbGVhbnVwX3BhdGhuYW1lKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKmEpCitAQCAtMjUyOSw4ICsyNTMwLDE1IEBAIGNsZWFudXBfcGF0aG5hbWUoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqYSkKKyAJY2xlYW51cF9wYXRobmFtZV93aW4oYSk7CisgI2VuZGlmCisgCS8qIFNraXAgbGVhZGluZyAnLycuICovCistCWlmICgqc3JjID09ICcvJykKKysJaWYgKCpzcmMgPT0gJy8nKSB7CisrCQlpZiAoYS0+ZmxhZ3MgJiBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUykgeworKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCisrCQkJICAgICAgICAgICAgICAgICAgIlBhdGggaXMgYWJzb2x1dGUiKTsKKysJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKysJCX0KKysKKyAJCXNlcGFyYXRvciA9ICpzcmMrKzsKKysJfQorIAorIAkvKiBTY2FuIHRoZSBwYXRobmFtZSBvbmUgZWxlbWVudCBhdCBhIHRpbWUuICovCisgCWZvciAoOzspIHsKK2RpZmYgLS1naXQgYS9saWJhcmNoaXZlL3Rlc3QvdGVzdF93cml0ZV9kaXNrX3NlY3VyZS5jIGIvbGliYXJjaGl2ZS90ZXN0L3Rlc3Rfd3JpdGVfZGlza19zZWN1cmUuYworaW5kZXggMzFjNWJmZC4uMmM5NDIwNiAxMDA2NDQKKy0tLSBhL2xpYmFyY2hpdmUvdGVzdC90ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLmMKKysrKyBiL2xpYmFyY2hpdmUvdGVzdC90ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLmMKK0BAIC0xNzgsNiArMTc4LDI5IEBAIERFRklORV9URVNUKHRlc3Rfd3JpdGVfZGlza19zZWN1cmUpCisgCWFzc2VydChTX0lTRElSKHN0LnN0X21vZGUpKTsKKyAJYXJjaGl2ZV9lbnRyeV9mcmVlKGFlKTsKKyAKKysJLyoKKysJICogV2l0aG91dCBzZWN1cml0eSBjaGVja3MsIHdlIHNob3VsZCBiZSBhYmxlIHRvCisrCSAqIGV4dHJhY3QgYW4gYWJzb2x1dGUgcGF0aC4KKysJICovCisrCWFzc2VydCgoYWUgPSBhcmNoaXZlX2VudHJ5X25ldygpKSAhPSBOVUxMKTsKKysJYXJjaGl2ZV9lbnRyeV9jb3B5X3BhdGhuYW1lKGFlLCAiL3RtcC9saWJhcmNoaXZlX3Rlc3QtdGVzdF93cml0ZV9kaXNrX3NlY3VyZS1hYnNvbHV0ZV9wYXRoLnRtcCIpOworKwlhcmNoaXZlX2VudHJ5X3NldF9tb2RlKGFlLCBTX0lGUkVHIHwgMDc3Nyk7CisrCWFzc2VydCgwID09IGFyY2hpdmVfd3JpdGVfaGVhZGVyKGEsIGFlKSk7CisrCWFzc2VydCgwID09IGFyY2hpdmVfd3JpdGVfZmluaXNoX2VudHJ5KGEpKTsKKysJYXNzZXJ0RmlsZUV4aXN0cygiL3RtcC9saWJhcmNoaXZlX3Rlc3QtdGVzdF93cml0ZV9kaXNrX3NlY3VyZS1hYnNvbHV0ZV9wYXRoLnRtcCIpOworKwlhc3NlcnQoMCA9PSB1bmxpbmsoIi90bXAvbGliYXJjaGl2ZV90ZXN0LXRlc3Rfd3JpdGVfZGlza19zZWN1cmUtYWJzb2x1dGVfcGF0aC50bXAiKSk7CisrCisrCS8qIEJ1dCB3aXRoIHNlY3VyaXR5IGNoZWNrcyBlbmFibGVkLCB0aGlzIHNob3VsZCBmYWlsLiAqLworKwlhc3NlcnQoYXJjaGl2ZV9lbnRyeV9jbGVhcihhZSkgIT0gTlVMTCk7CisrCWFyY2hpdmVfZW50cnlfY29weV9wYXRobmFtZShhZSwgIi90bXAvbGliYXJjaGl2ZV90ZXN0LXRlc3Rfd3JpdGVfZGlza19zZWN1cmUtYWJzb2x1dGVfcGF0aC50bXAiKTsKKysJYXJjaGl2ZV9lbnRyeV9zZXRfbW9kZShhZSwgU19JRlJFRyB8IDA3NzcpOworKwlhcmNoaXZlX3dyaXRlX2Rpc2tfc2V0X29wdGlvbnMoYSwgQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMpOworKwlmYWlsdXJlKCJFeHRyYWN0aW5nIGFuIGFic29sdXRlIHBhdGggc2hvdWxkIGZhaWwgaGVyZS4iKTsKKysJYXNzZXJ0RXF1YWxJbnQoQVJDSElWRV9GQUlMRUQsIGFyY2hpdmVfd3JpdGVfaGVhZGVyKGEsIGFlKSk7CisrCWFyY2hpdmVfZW50cnlfZnJlZShhZSk7CisrCWFzc2VydCgwID09IGFyY2hpdmVfd3JpdGVfZmluaXNoX2VudHJ5KGEpKTsKKysJYXNzZXJ0RmlsZU5vdEV4aXN0cygiL3RtcC9saWJhcmNoaXZlX3Rlc3QtdGVzdF93cml0ZV9kaXNrX3NlY3VyZS1hYnNvbHV0ZV9wYXRoLnRtcCIpOworKworIAlhc3NlcnRFcXVhbEludChBUkNISVZFX09LLCBhcmNoaXZlX3dyaXRlX2ZyZWUoYSkpOworIAorIAkvKiBUZXN0IHRoZSBlbnRyaWVzIG9uIGRpc2suICovCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmUtQ1ZFLTIwMTMtMDIxMS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9saWJhcmNoaXZlLUNWRS0yMDEzLTAyMTEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI2ZjgwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9saWJhcmNoaXZlLUNWRS0yMDEzLTAyMTEucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSAyZjU1ZDZiZDMwOGVhNjE5NzU1NThjMjQ2OWFlMzQ5ZGJhMjk3ZTg5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBTYXQsIDIyIEZlYiAyMDE0IDE0OjM1OjU5ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBDVkUtMjAxMy0wMjExCisKK1RoaXMgcGF0Y2ggY29tZXMgZnJvbTpodHRwczovL2dpdGh1Yi5jb20vbGliYXJjaGl2ZS9saWJhcmNoaXZlL2NvbW1pdC8yMjUzMTU0NTUxNDA0M2UwNDYzM2UxYzAxNWM3NTQwYjlkZTlkYmU0CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogQmFvZ2VuIHNoYW5nIDxiYW9nZW4uc2hhbmdAd2luZHJpdmVyLmNvbT4KKworVXBkYXRlIHRoZSBwYXRjaCBiZWNhdXNlIG9mIHVwcmV2IG9uIDIwMTQwMjIyCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuYyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS5jCitpbmRleCBhM2QxYTMzLi5hMzIzNTg4IDEwMDY0NAorLS0tIGEvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMKKysrKyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS5jCitAQCAtNjcxLDggKzY3MSwxMiBAQCBzdGF0aWMgc3NpemVfdAorIF9hcmNoaXZlX3dyaXRlX2RhdGEoc3RydWN0IGFyY2hpdmUgKl9hLCBjb25zdCB2b2lkICpidWZmLCBzaXplX3QgcykKKyB7CisgCXN0cnVjdCBhcmNoaXZlX3dyaXRlICphID0gKHN0cnVjdCBhcmNoaXZlX3dyaXRlICopX2E7CisrCWNvbnN0IHNpemVfdCBtYXhfd3JpdGUgPSBJTlRfTUFYOworIAlhcmNoaXZlX2NoZWNrX21hZ2ljKCZhLT5hcmNoaXZlLCBBUkNISVZFX1dSSVRFX01BR0lDLAorIAkgICAgQVJDSElWRV9TVEFURV9EQVRBLCAiYXJjaGl2ZV93cml0ZV9kYXRhIik7CisrCS8qIEluIHBhcnRpY3VsYXIsIHRoaXMgY2F0Y2hlcyBhdHRlbXB0cyB0byBwYXNzIG5lZ2F0aXZlIHZhbHVlcy4gKi8KKysJaWYgKHMgPiBtYXhfd3JpdGUpCisrCQlzID0gbWF4X3dyaXRlOworIAlhcmNoaXZlX2NsZWFyX2Vycm9yKCZhLT5hcmNoaXZlKTsKKyAJcmV0dXJuICgoYS0+Zm9ybWF0X3dyaXRlX2RhdGEpKGEsIGJ1ZmYsIHMpKTsKKyB9CistLSAKKzEuOC4yLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL21rZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL21rZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOWEyOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvbWtkaXIucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorQWRkIG1pc3NpbmcgbWtkaXIgY2FsbHMgc28gdGhhdCBvdXQtb2YtdHJlZSBidWlsZHMgd29yay4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgKGh0dHBzOi8vZ2l0aHViLmNvbS9saWJhcmNoaXZlL2xpYmFyY2hpdmUvcHVsbC81MzQpCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggM2ZhMmQyMi4uNWVjY2E1MiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTUwOCw2ICs1MDgsNyBAQCBsaWJhcmNoaXZlX3Rlc3RfTERBREQ9ICQoTFRMSUJJQ09OVikKKyAjIEJ1aWxkaW5nIGl0IGF1dG9tYXRpY2FsbHkgcHJvdmlkZXMgYSBzYW5pdHktY2hlY2sgb24gbGliYXJjaGl2ZV90ZXN0X1NPVVJDRVMKKyAjIGFib3ZlLgorIGxpYmFyY2hpdmUvdGVzdC9saXN0Lmg6IE1ha2VmaWxlCisrCSQoTUtESVJfUCkgbGliYXJjaGl2ZS90ZXN0CisgCWNhdCAkKHRvcF9zcmNkaXIpL2xpYmFyY2hpdmUvdGVzdC90ZXN0XyouYyB8IGdyZXAgREVGSU5FX1RFU1QgPiBsaWJhcmNoaXZlL3Rlc3QvbGlzdC5oCisgCisgbGliYXJjaGl2ZV9URVNUU19FTlZJUk9OTUVOVD0gTElCQVJDSElWRV9URVNUX0ZJTEVTPWBjZCAkKHRvcF9zcmNkaXIpOy9iaW4vcHdkYC9saWJhcmNoaXZlL3Rlc3QgTFJaSVA9Tk9DT05GSUcKK0BAIC04MzUsNiArODM2LDcgQEAgYnNkdGFyX3Rlc3RfQ1BQRkxBR1M9XAorIAkkKFBMQVRGT1JNQ1BQRkxBR1MpCisgCisgdGFyL3Rlc3QvbGlzdC5oOiBNYWtlZmlsZQorKwkkKE1LRElSX1ApIHRhci90ZXN0CisgCWNhdCAkKHRvcF9zcmNkaXIpL3Rhci90ZXN0L3Rlc3RfKi5jIHwgZ3JlcCBERUZJTkVfVEVTVCA+IHRhci90ZXN0L2xpc3QuaAorIAorIGlmIEJVSUxEX0JTRFRBUgorQEAgLTk3NSw2ICs5NzcsNyBAQCBic2RjcGlvX3Rlc3RfQ1BQRkxBR1M9IFwKKyBic2RjcGlvX3Rlc3RfTERBREQ9bGliYXJjaGl2ZV9mZS5sYQorIAorIGNwaW8vdGVzdC9saXN0Lmg6IE1ha2VmaWxlCisrCSQoTUtESVJfUCkgY3Bpby90ZXN0CisgCWNhdCAkKHRvcF9zcmNkaXIpL2NwaW8vdGVzdC90ZXN0XyouYyB8IGdyZXAgREVGSU5FX1RFU1QgPiBjcGlvL3Rlc3QvbGlzdC5oCisgCisgaWYgQlVJTERfQlNEQ1BJTworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMzhiZDI5OS4uN2JkYjAwYyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTAyLDYgKzEwMiw3IEBAIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworIEFDX0xJQlRPT0xfV0lOMzJfRExMCisgQUNfUFJPR19MSUJUT09MCisgQUNfQ0hFQ0tfVE9PTChbU1RSSVBdLFtzdHJpcF0pCisrQUNfUFJPR19NS0RJUl9QCisgCisgIworICMgT3B0aW9ucyBmb3IgYnVpbGRpbmcgYnNkdGFyLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL3BrZ2NvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ2YWY5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXNlIHBrZy1jb25maWcgZm9yIHRoZSBsaWJ4bWwyIGRlcGVuZGVuY3ksIG5vdCB0aGUgLWNvbmZpZyBzY3JpcHQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSUCAyMDE0LzUvMjIKKworSW5kZXg6IGxpYmFyY2hpdmUtMy4xLjIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYXJjaGl2ZS0zLjEuMi5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEzLTAyLTA5IDE3OjIzOjAzLjAwMDAwMDAwMCArMDAwMAorKysrIGxpYmFyY2hpdmUtMy4xLjIvY29uZmlndXJlLmFjCTIwMTQtMDUtMTMgMTU6MjY6NDUuNDQ2NDk5MTA4ICswMDAwCitAQCAtMzI5LDEwICszMjksMTAgQEAKKyAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtZXhwYXRdLCBbRG9uJ3QgYnVpbGQgc3VwcG9ydCBmb3IgeGFyIHRocm91Z2ggZXhwYXRdKSkKKyAKKyBpZiB0ZXN0ICJ4JHdpdGhfeG1sMiIgIT0gInhubyI7IHRoZW4KKy0gIEFDX1BBVEhfUFJPRyhbWE1MMl9DT05GSUddLCBbeG1sMi1jb25maWddLCwgWyR7UEFUSH1dKQorLSAgaWYgdGVzdCAieCRYTUwyX0NPTkZJRyIgIT0gIngiOyB0aGVuCistICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSBgJHtYTUwyX0NPTkZJR30gLS1jZmxhZ3NgIgorLSAgICBMSUJTPSIke0xJQlN9IGAke1hNTDJfQ09ORklHfSAtLWxpYnNgIgorKyAgUEtHX0NIRUNLX01PRFVMRVMoUEtHX1hNTDIsIFtsaWJ4bWwtMi4wXSwsKQorKyAgaWYgdGVzdCAieCRQS0dfWE1MMl9DRkxBR1MiICE9ICJ4IjsgdGhlbgorKyAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30gJHtQS0dfWE1MMl9DRkxBR1N9IgorKyAgICBMSUJTPSIke0xJQlN9ICR7UEtHX1hNTDJfTElCU30iCisgICAgIEFDX0NIRUNLX0xJQih4bWwyLHhtbEluaXRQYXJzZXIsW3RydWVdLEFDX01TR19GQUlMVVJFKE1pc3NpbmcgeG1sMiBsaWJyYXJ5KSkKKyAgIGVsc2UKKyAgICAgQUNfQ0hFQ0tfTElCKHhtbDIseG1sSW5pdFBhcnNlcikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV8zLjEuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV8zLjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWEzMjU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlXzMuMS4yLmJiCkBAIC0wLDAgKzEsNTMgQEAKK1NVTU1BUlkgPSAiU3VwcG9ydCBmb3IgcmVhZGluZyB2YXJpb3VzIGFyY2hpdmUgZm9ybWF0cyIKK0RFU0NSSVBUSU9OID0gIkMgbGlicmFyeSBhbmQgY29tbWFuZC1saW5lIHRvb2xzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHRhciwgY3BpbywgemlwLCBJU08sIGFuZCBvdGhlciBhcmNoaXZlIGZvcm1hdHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYmFyY2hpdmUub3JnLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI0ZTNmZmQ2MDdkNjY4NmM2Y2IyZjYzMzk0MzcwODQxIgorCitERVBFTkRTID0gImUyZnNwcm9ncy1uYXRpdmUiCisKK1BBQ0tBR0VDT05GSUcgPz0gImxpYnhtbDIgemxpYiBiejIiCisKK1BBQ0tBR0VDT05GSUdfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICJcCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhY2wnLCAnYWNsJywgJycsIGQpfSBcCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4YXR0cicsICd4YXR0cicsICcnLCBkKX0gXAorCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgJ2xhcmdlZmlsZScsICcnLCBkKX0gXAorIgorCitQQUNLQUdFQ09ORklHX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiIGxhcmdlZmlsZSIKKworUEFDS0FHRUNPTkZJR1thY2xdID0gIi0tZW5hYmxlLWFjbCwtLWRpc2FibGUtYWNsLGFjbCwiCitQQUNLQUdFQ09ORklHW3hhdHRyXSA9ICItLWVuYWJsZS14YXR0ciwtLWRpc2FibGUteGF0dHIsYXR0ciwiCitQQUNLQUdFQ09ORklHW2xhcmdlZmlsZV0gPSAiLS1lbmFibGUtbGFyZ2VmaWxlLC0tZGlzYWJsZS1sYXJnZWZpbGUsLCIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS13aXRoLXpsaWIsLS13aXRob3V0LXpsaWIsemxpYiwiCitQQUNLQUdFQ09ORklHW2J6Ml0gPSAiLS13aXRoLWJ6MmxpYiwtLXdpdGhvdXQtYnoybGliLGJ6aXAyLCIKK1BBQ0tBR0VDT05GSUdbeHpdID0gIi0td2l0aC1sem1hZGVjIC0td2l0aC1sem1hLC0td2l0aG91dC1sem1hZGVjIC0td2l0aG91dC1sem1hLHh6LCIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS13aXRoLW9wZW5zc2wsLS13aXRob3V0LW9wZW5zc2wsb3BlbnNzbCwiCitQQUNLQUdFQ09ORklHW2xpYnhtbDJdID0gIi0td2l0aC14bWwyLC0td2l0aG91dC14bWwyLGxpYnhtbDIsIgorUEFDS0FHRUNPTkZJR1tleHBhdF0gPSAiLS13aXRoLWV4cGF0LC0td2l0aG91dC1leHBhdCxleHBhdCwiCitQQUNLQUdFQ09ORklHW2x6b10gPSAiLS13aXRoLWx6bzIsLS13aXRob3V0LWx6bzIsbHpvLCIKK1BBQ0tBR0VDT05GSUdbbmV0dGxlXSA9ICItLXdpdGgtbmV0dGxlLC0td2l0aG91dC1uZXR0bGUsbmV0dGxlLCIKKworU1JDX1VSSSA9ICJodHRwOi8vbGliYXJjaGl2ZS5vcmcvZG93bmxvYWRzL2xpYmFyY2hpdmUtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2xpYmFyY2hpdmUtQ1ZFLTIwMTMtMDIxMS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1BZGQtQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMtb3B0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21rZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWZhZDVhNTAzZjY2MzI5YmI5ZDJmNDMwOGI1ZGU5OGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWI4N2VhY2Q4ZmU0OWU4ZDkwYzhmZGMxODk4MTMwMjNjY2MzMTljNWU3NTJiMDFmYjZhZDBjYzdiMmM1M2Q1ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UgcGtnY29uZmlnCisKK0NQUEZMQUdTICs9ICItSSR7V09SS0RJUn0vZXh0cmEtaW5jbHVkZXMiCisKK2RvX2NvbmZpZ3VyZVtjbGVhbmRpcnNdICs9ICIke1dPUktESVJ9L2V4dHJhLWluY2x1ZGVzIgorZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyBXZSBqdXN0IG5lZWQgdGhlIGhlYWRlcnMgZm9yIHNvbWUgdHlwZSBjb25zdGFudHMsIHNvIG5vIG5lZWQgdG8KKwkjIGJ1aWxkIGFsbCBvZiBlMmZzcHJvZ3MgZm9yIHRoZSB0YXJnZXQKKwljcCAtUiAke1NUQUdJTkdfSU5DRElSX05BVElWRX0vZXh0MmZzICR7V09SS0RJUn0vZXh0cmEtaW5jbHVkZXMvCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vYXZvaWRfQU1fUFJPR19NS0RJUl9QX3dhcm5pbmdfZXJyb3Jfd2l0aF9hdXRvbWFrZV8xLjEyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9hdm9pZF9BTV9QUk9HX01LRElSX1Bfd2FybmluZ19lcnJvcl93aXRoX2F1dG9tYWtlXzEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ3NmJiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vYXZvaWRfQU1fUFJPR19NS0RJUl9QX3dhcm5pbmdfZXJyb3Jfd2l0aF9hdXRvbWFrZV8xLjEyLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSAKKworYXV0b21ha2UgMS4xMi54IGhhcyBkZXByZWNhdGVkIEFNX1BST0dfTUtESVJfUCAsIGFuZCB0aHJvd3MgYSB3YXJuaW5nIGZvciB0aGF0LAorYW5kIHRoZSB3YXJuaW5ncyBhcmUgdHJlYXRlZCBhcyBlcnJvcnMgYmVjYXVzZSBvZiB0aGUgLVdlcnJvciBwYXJhbWV0ZXIuCisKK1RoZXNlIEFNX1BST0dfTUtESVJfUCBhcmUgY29taW5nIGZyb20gZ2V0dGV4dCwgYW5kIHRoZSBsYXRlc3QgZ2V0dGV4dCBjb2RlIGhhcyBub3QgCitlbGltaW5hdGVkIHRoZXNlIGRlcHJlY2F0ZWQgbWFjcm9zIHlldC4gU28gZGlzYWJsZSB0aGUgdHJlYXRtZW50IG9mIHdhcm5pbmdzCithcyBlcnJvcnMgdW50aWwgZ2V0dGV4dCBpcyB1cGRhdGVkIHRvIHJlbW92ZSB0aGUgZGVwcmVjYXRlZCBtYWNyb3MuCisKK1NpZ25lZC1PZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA3LzEwCisKK0luZGV4OiBsaWJpZG4tMS4yNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpZG4tMS4yNC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGxpYmlkbi0xLjI0L2NvbmZpZ3VyZS5hYworQEAgLTIzLDcgKzIzLDcgQEAgQUNfQ09QWVJJR0hUKFtDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBTaQorIEFDX0NPTkZJR19BVVhfRElSKFtidWlsZC1hdXhdKQorIEFDX0NPTkZJR19NQUNST19ESVIoW200XSkKKyBBQ19DT05GSUdfSEVBREVSUyhjb25maWcuaCkKKy1BTV9JTklUX0FVVE9NQUtFKFsxLjEwIC1XYWxsIC1XZXJyb3IgLVduby1vdmVycmlkZV0pCisrQU1fSU5JVF9BVVRPTUFLRShbMS4xMCAtV2FsbCAtV25vLW92ZXJyaWRlXSkKKyBBTV9TSUxFTlRfUlVMRVMoW3llc10pCisgCisgIyBMaWJyYXJ5IGNvZGUgbW9kaWZpZWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVWSVNJT04rKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg2MzUzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkZCBsaWJpZG4tMS4yNi9kb2MvTWFrZWZpbGUuYW0gbGliaWRuLTEuMjYvZG9jL01ha2VmaWxlLmFtCistLS0gbGliaWRuLTEuMjYvZG9jL01ha2VmaWxlLmFtCTIwMTItMDktMTggMTE6MjU6NDUuMDAwMDAwMDAwICswMzAwCisrKysgbGliaWRuLTEuMjYvZG9jL01ha2VmaWxlLmFtCTIwMTMtMDItMDggMDc6NDE6MjQuNTkxNDMxNDYyICswMjAwCitAQCAtNDksMTUgKzQ5LDkgQEAKKworICMgTWFuIHBhZ2VzLgorCistZGlzdF9tYW5fTUFOUyA9IGlkbi4xICQoZ2RvY19NQU5TKQorK2Rpc3RfbWFuX01BTlMgPSAkKGdkb2NfTUFOUykKKyBNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9ICQoZGlzdF9tYW5fTUFOUykKKworLWlkbi4xOiAkKHRvcF9zcmNkaXIpL3NyYy9pZG4uYyAkKHRvcF9zcmNkaXIpL3NyYy9pZG4uZ2dvIFwKKy0JCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCistCSQoSEVMUDJNQU4pIFwKKy0JCS0tbmFtZT0iSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWVzIGNvbW1hbmQgbGluZSB0b29sIiBcCistCQktLW91dHB1dD0kQCAkKHRvcF9idWlsZGRpcikvc3JjL2lkbiQoRVhFRVhUKQorLQorICMgR0RPQworCisgR0RPQ19CSU4gPSAkKHNyY2RpcikvZ2RvYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9saWJpZG5fZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9saWJpZG5fZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYWZkMjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuL2xpYmlkbl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgcGF0Y2ggZml4ZXMgZm9sbG93aW5nIGlzc3VlIHdpdGggYXV0b21ha2UgMS4xMgorCit8IGF1dG9tYWtlOiB3YXJuaW5ncyBhcmUgdHJlYXRlZCBhcyBlcnJvcnMKK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9hdXRvbWFrZS0xLjEyL2FtL2x0bGlicmFyeS5hbTogd2FybmluZzogJ2xpYmlkbi5sYSc6IGxpbmtpbmcgbGlidG9vbCBsaWJyYXJpZXMgdXNpbmcgYSBub24tUE9TSVgKK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9hdXRvbWFrZS0xLjEyL2FtL2x0bGlicmFyeS5hbTogYXJjaGl2ZXIgcmVxdWlyZXMgJ0FNX1BST0dfQVInIGluICdjb25maWd1cmUuYWMnCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzAzCisKK0luZGV4OiBsaWJpZG4tMS4yNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpZG4tMS4yNC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGxpYmlkbi0xLjI0L2NvbmZpZ3VyZS5hYworQEAgLTM0LDYgKzM0LDEwIEBAIEFDX1NVQlNUKExUX0NVUlJFTlQsIDE3KQorIEFDX1NVQlNUKExUX1JFVklTSU9OLCA3KQorIEFDX1NVQlNUKExUX0FHRSwgNikKKyAKKysjIGF1dG9tYWtlIDEuMTIgc2VlbXMgdG8gcmVxdWlyZSB0aGlzLCBidXQgYXV0b21ha2UgMS4xMSBkb2Vzbid0IHJlY29nbml6ZSBpdAorK200X3BhdHRlcm5fYWxsb3coW0FNX1BST0dfQVJdKQorK0FNX1BST0dfQVIKKysKKyBBQ19QUk9HX0NDCisgZ2xfRUFSTFkKKyBsZ2xfRUFSTFkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMC42LjE0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbl8wLjYuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRmMWQwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMC42LjE0LmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWUgc3VwcG9ydCBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cmluZ3ByZXAsIFB1bnljb2RlIGFuZCBJRE5BIHNwZWNpZmljYXRpb25zIGRlZmluZWQgYnkgdGhlIElFVEYgSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWVzIChJRE4pIHdvcmtpbmcgZ3JvdXAuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmlkbi8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvaWRuYS5oO2JlZ2lubGluZT02O2VuZGxpbmU9MTg7bWQ1PTEzMzZlODQ4Y2E3YjhlMjU3NjdjM2M3ZThmYTM4YTg5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9pZG4uYztiZWdpbmxpbmU9NjtlbmRsaW5lPTE4O21kNT01NmM4OWUzNTk2NTJhNzFjZGExMjhkNzVmMGZmZGFjNCIKK1BSID0gInIxIgorCitpbmhlcml0IHBrZ2NvbmZpZyBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK1NSQ19VUkkgPSAiaHR0cDovL2FscGhhLmdudS5vcmcvZ251L2xpYmlkbi8ke0JQTn0tJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDQwZjAxMmE0NWZlYjU2MTY4ODUzOTk4YmI4N2FkNGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTg5MTBjMmFkNjY0YmRmNGVlZDJjMmZmZjg4ZTI0Zjg4ODI2MzZlYzlkMjY2NjkzNjZmZjAzYjQ2OWMwNWFlMyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyB0aGlzIHZlcnNpb24gb2YgbGliaWRuIGNvcGllcyBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgZnJvbSAKKwkjIGF1dG9jb25mIENWUyBiZWNhdXNlIGF0bSB0aGUgYXV0b2NvbmYgaXQgdXNlcyBpcyBhIGJpdCBvbGQKKwkjIG5vdyB3aXRoIGNyb3NzIGF1dG90b29sLCB0aGF0IG1hY3JvIGlzIGFscmVhZHkgdGhlcmUgYW5kIHRoaXMKKwkjIGxvY2FsIGRlZmluaXRpb24gY2F1c2VzIGNpcmN1bGFyIGRlcGVuZGVuY3kuIEFjdHVhbGx5IEFDX0dOVV9TT1VSQ0UKKwkjIGlzIGlkZW50aWNhbCB0byBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMuIFNvIHJlbW92ZSBhbGwgbG9jYWwKKwkjIHJlZmVyZW5jZXMgdG8gdGhlIGxhdHRlciBoZXJlLgorCXNlZCAtaSAtZSAiL0FDX1JFUVVJUkUoXFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMvZCIgJHtTfS9saWIvZ2wvbTQvZ251bGliLWNvbXAubTQKKwlybSAtZiAke1N9L2xpYi9nbC9tNC9leHRlbnNpb25zLm00Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L0xpYmlkbi5kbGwKKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vZW1hY3MKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMS4zMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMS4zMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjM0NzQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbl8xLjMwLmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWUgc3VwcG9ydCBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cmluZ3ByZXAsIFB1bnljb2RlIGFuZCBJRE5BIHNwZWNpZmljYXRpb25zIGRlZmluZWQgYnkgdGhlIElFVEYgSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWVzIChJRE4pIHdvcmtpbmcgZ3JvdXAuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmlkbi8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIihMR1BMdjIuMSsgfCBMR1BMdjMpICYgR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGY0YmU0Nzk0MGE5MWVlNjk1NTZmNWY3MWVlZDRhZWMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVJ2MjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVJ2MzttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlOR3YyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HdjM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9pZG5hLmg7ZW5kbGluZT0yMTttZDU9N2MwYjM4MjhkMWIxNTM2NjNiZTlhMDRhZDRmNzk3NWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2lkbi5jO2VuZGxpbmU9MjA7bWQ1PWY0MjM1ZjJhMmNiMmI2NTc4NmIyOTc5ZmIzY2Y3ZmJmIgorCitpbmhlcml0IHBrZ2NvbmZpZyBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9saWJpZG4vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9saWJpZG5fZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2F2b2lkX0FNX1BST0dfTUtESVJfUF93YXJuaW5nX2Vycm9yX3dpdGhfYXV0b21ha2VfMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiMTdlZGM4NTUxY2QzMWNjNWYxNGM4MmE5ZGFiZjU4ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzOWI5ZmM5NGQ3NDA4MWMxODU3NTdiMTJlMDg5MWNlNWEyMmRiNTUyNjhlN2QxYmIyNDUzM2ZmNDQzMmViMDUzIgorCisjIGNvbW1hbmQgdG9vbCBpcyB1bmRlciBHUEx2MyssIHdoaWxlIGxpYmlkbiBpdHNlbGYgaXMgdW5kZXIgTEdQTHYyLjErIG9yIExHUEx2MworIyBzbyBwYWNrYWdlIGNvbW1hbmQgaW50byBhIHNlcGFyYXRlIHBhY2thZ2UKK1BBQ0tBR0VTID0rICJpZG4iCitGSUxFU19pZG4gPSAiJHtiaW5kaXJ9LyoiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtY3NoYXJwIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vZW1hY3MKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL2xpYnRpcnBjLTAuMi4xLWZvcnRpZnkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwYy9saWJ0aXJwYy0wLjIuMS1mb3J0aWZ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNzg1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwYy9saWJ0aXJwYy0wLjIuMS1mb3J0aWZ5LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK0ZpeCBhIHBvc3NpYmxlIG92ZXJmbG93IChyZXBvcnRlZCBieSBfRk9SVElGWV9TT1VSQ0U9MikKKworUG9ydGVkIGZyb20gR2VudG9vCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogbGlidGlycGMtMC4yLjEvc3JjL2dldHJwY3BvcnQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnRpcnBjLTAuMi4xLm9yaWcvc3JjL2dldHJwY3BvcnQuYworKysrIGxpYnRpcnBjLTAuMi4xL3NyYy9nZXRycGNwb3J0LmMKK0BAIC01NCwxMSArNTQsMTEgQEAgZ2V0cnBjcG9ydChob3N0LCBwcm9nbnVtLCB2ZXJzbnVtLCBwcm90bworIAorIAlpZiAoKGhwID0gZ2V0aG9zdGJ5bmFtZShob3N0KSkgPT0gTlVMTCkKKyAJCXJldHVybiAoMCk7CisrCWlmIChocC0+aF9sZW5ndGggIT0gc2l6ZW9mKGFkZHIuc2luX2FkZHIuc19hZGRyKSkKKysJCXJldHVybiAoMCk7CisgCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAJYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAJYWRkci5zaW5fcG9ydCA9ICAwOworLQlpZiAoaHAtPmhfbGVuZ3RoID4gc2l6ZW9mKGFkZHIpKQorLQkgIGhwLT5oX2xlbmd0aCA9IHNpemVvZihhZGRyKTsKKyAJbWVtY3B5KCZhZGRyLnNpbl9hZGRyLnNfYWRkciwgaHAtPmhfYWRkciwgKHNpemVfdClocC0+aF9sZW5ndGgpOworIAkvKiBJbmNvbnNpc3RlbnQgaW50ZXJmYWNlcyBuZWVkIGNhc3RzISA6LSggKi8KKyAJcmV0dXJuIChwbWFwX2dldHBvcnQoJmFkZHIsICh1X2xvbmcpcHJvZ251bSwgKHVfbG9uZyl2ZXJzbnVtLCAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL3JlbW92ZS1kZXMtdWNsaWJjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidGlycGMvbGlidGlycGMvcmVtb3ZlLWRlcy11Y2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwMzM0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL3JlbW92ZS1kZXMtdWNsaWJjLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK3VjbGliYyBkb2VzIG5vdCBwcm92aWRlIGRlcyBmdW5jdGlvbmFsaXR5IHVubGlrZSBlZ2xpYmMgc28gbGV0cyBkaXNhYmxlIHNzbCBzdXBwb3J0CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdWNsaWJjIHNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGxpYnRpcnBjLTAuMi4zL3NyYy9ycGNfc29jLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ0aXJwYy0wLjIuMy5vcmlnL3NyYy9ycGNfc29jLmMJMjAxMy0wMy0xMCAxNjowMDo1MS4zNTUyODIxNTMgLTA3MDAKKysrKyBsaWJ0aXJwYy0wLjIuMy9zcmMvcnBjX3NvYy5jCTIwMTMtMDMtMTAgMTY6MDA6NTEuNzAzMjgyMTQ4IC0wNzAwCitAQCAtNTIwLDYgKzUyMCw3IEBACisgCSAgICAocmVzdWx0cHJvY190KSBycGNfd3JhcF9iY2FzdCwgInVkcCIpOworIH0KKyAKKysjaWYgMAorIC8qCisgICogQ3JlYXRlIHRoZSBjbGllbnQgZGVzIGF1dGhlbnRpY2F0aW9uIG9iamVjdC4gT2Jzb2xldGVkIGJ5CisgICogYXV0aGRlc19zZWNjcmVhdGUoKS4KK0BAIC01NTEsNiArNTUyLDcgQEAKKyAJZHVtbXkgPSBhdXRoZGVzX3NlY2NyZWF0ZShzZXJ2ZXJuYW1lLCB3aW5kb3csIE5VTEwsIGNrZXkpOworIAlyZXR1cm4gKGR1bW15KTsKKyB9CisrI2VuZGlmCisgCisgLyoKKyAgKiBDcmVhdGUgYSBjbGllbnQgaGFuZGxlIGZvciBhIHVuaXggY29ubmVjdGlvbi4gT2Jzb2xldGVkIGJ5IGNsbnRfdmNfY3JlYXRlKCkKK0luZGV4OiBsaWJ0aXJwYy0wLjIuMy9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ0aXJwYy0wLjIuMy5vcmlnL3NyYy9NYWtlZmlsZS5hbQkyMDEzLTAzLTEwIDE2OjAwOjUxLjM1NTI4MjE1MyAtMDcwMAorKysrIGxpYnRpcnBjLTAuMi4zL3NyYy9NYWtlZmlsZS5hbQkyMDEzLTAzLTEwIDE2OjAwOjUxLjcwMzI4MjE0OCAtMDcwMAorQEAgLTUwLDcgKzUwLDcgQEAKKyAgICAgICAgIHJwY19jYWxsbXNnLmMgcnBjX2dlbmVyaWMuYyBycGNfc29jLmMgcnBjYl9jbG50LmMgcnBjYl9wcm90LmMgXAorICAgICAgICAgcnBjYl9zdF94ZHIuYyBzdmMuYyBzdmNfYXV0aC5jIHN2Y19kZy5jIHN2Y19hdXRoX3VuaXguYyBzdmNfYXV0aF9ub25lLmMgXAorICAgICAgICAgc3ZjX2dlbmVyaWMuYyBzdmNfcmF3LmMgc3ZjX3J1bi5jIHN2Y19zaW1wbGUuYyBzdmNfdmMuYyBnZXRwZWVyZWlkLmMgXAorLSAgICAgICAgYXV0aF90aW1lLmMgYXV0aF9kZXMuYyBhdXRoZGVzX3Byb3QuYworKyAgICAgICAgYXV0aF90aW1lLmMKKyAKKyAjIyBYRFIKKyBsaWJ0aXJwY19sYV9TT1VSQ0VTICs9IHhkci5jIHhkcl9yZWMuYyB4ZHJfYXJyYXkuYyB4ZHJfZmxvYXQuYyB4ZHJfbWVtLmMgeGRyX3JlZmVyZW5jZS5jIHhkcl9zdGRpby5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwY18wLjIuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjXzAuMi41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZGYwMDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwY18wLjIuNS5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIlRyYW5zcG9ydC1JbmRlcGVuZGVudCBSUEMgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkxpYnRpcnBjIGlzIGEgcG9ydCBvZiBTdW5zIFRyYW5zcG9ydC1JbmRlcGVuZGVudCBSUEMgbGlicmFyeSB0byBMaW51eCIKK1NFQ1RJT04gPSAibGlicy9uZXR3b3JrIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJ0aXJwYy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTgzMDc1JmF0aWQ9OTAzNzg0IgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mODM1Y2NlODg1MjQ4MWU0YjJiYmJkZDIzYjVlNDdmMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbmV0bmFtZS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjc7bWQ1PWY4YThjZDJjYjI1YWM1YWExNjc2NzM2NGZiMGUzYzI0IgorCitERVBFTkRTICs9ICJ4ei1uYXRpdmUiCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYnJwYyIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlB9LnRhci5iejI7bmFtZT1saWJ0aXJwYyBcCisgICAgICAgICAgICR7R0VOVE9PX01JUlJPUn0vJHtCUE59LWdsaWJjLW5mcy50YXIueHo7bmFtZT1nbGliYy1uZnMgXAorICAgICAgICAgICBmaWxlOi8vbGlidGlycGMtMC4yLjEtZm9ydGlmeS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgZmlsZTovL3JlbW92ZS1kZXMtdWNsaWJjLnBhdGNoIgorCitTUkNfVVJJW2xpYnRpcnBjLm1kNXN1bV0gPSAiOGNkNDFhNWVmNWE5YjUwZDBmYjZhYmI5OGFmMTUzNjgiCitTUkNfVVJJW2xpYnRpcnBjLnNoYTI1NnN1bV0gPSAiNjJmOWRlN2MyYzg2ODZjNTY4NzU3NzMwZTFmZWY2NjUwMmEwZTAwZDZjYWNmMzM1NDZkMDI2Nzk4NGUwMDJkYiIKK1NSQ19VUklbZ2xpYmMtbmZzLm1kNXN1bV0gPSAiNWFlNTAwYjlkMGI2YjcyY2I4NzViYzA0OTQ0Yjk0NDUiCitTUkNfVVJJW2dsaWJjLW5mcy5zaGEyNTZzdW1dID0gIjI2NzdjZmVkZjYyNmYzZjVhOGY2ZTUwN2FlZDViYjhmNzlhNzQ1M2I1ODlkNjg0ZGJiYzA4NmU3NTUxNzBkODMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWdzc2FwaSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworICAgICAgICBjcCAtciAke1N9Ly4uL3RpcnBjICR7U30KK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgICAgIGNob3duIHJvb3Q6cm9vdCAke0R9JHtzeXNjb25mZGlyfS9uZXRjb25maWcKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnVzZXIvbGlidXNlcl8wLjYyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidXNlci9saWJ1c2VyXzAuNjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRlZDQ1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnVzZXIvbGlidXNlcl8wLjYyLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAidXNlciBhbmQgZ3JvdXAgYWNjb3VudCBhZG1pbmlzdHJhdGlvbiBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiVGhlIGxpYnVzZXIgbGlicmFyeSBpbXBsZW1lbnRzIGEgc3RhbmRhcmRpemVkIGludGVyZmFjZSBmb3IgbWFuaXB1bGF0aW5nIGFuZCBhZG1pbmlzdGVyaW5nIHVzZXIgXAorYW5kIGdyb3VwIGFjY291bnRzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2xpYnVzZXIvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbGlidXNlci9uZXd0aWNrZXQiCisKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3VzZXIuaDtlbmRsaW5lPTE5O21kNT03NmIzMDFmNjNjMzlmYTk5MjA2MjM5NWVmYmRjOTU1OCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zYW1wbGVzL3Rlc3R1c2VyLmM7ZW5kbGluZT0xOTttZDU9M2I4N2ZhNjYwZmEzZjRhNmJiMzFkNjI0YWZlMzBiYTEiCisKK1NFQ1RJT04gPSAiYmFzZSIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvbC9pL2xpYnVzZXIvbGlidXNlci0ke1BWfS50YXIueHogXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2M2U1ZTVjNTUxZTk5ZGM1MzAyYjQwYjgwYmQ2ZDRmMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhNThmZjRmYWJiMDFhMjUwNDNiMTQyMTg1YTMzZWVlYTk2MTEwOWRkNjBkNGI0MGI2YTlkZjRmYTNjYWNlMjBiIgorCitERVBFTkRTID0gInBvcHQgbGlicGFtIGdsaWItMi4wIHh6LW5hdGl2ZSBkb2Nib29rLXV0aWxzLW5hdGl2ZSBsaW51eGRvYy10b29scy1uYXRpdmUgcHl0aG9uIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHB5dGhvbm5hdGl2ZSBweXRob24tZGlyIHBrZ2NvbmZpZworCitFWFRSQV9PRU1BS0UgPSAiUFlUSE9OX0NQUEZMQUdTPS1JJHtTVEFHSU5HX0lOQ0RJUn0vJHtQWVRIT05fRElSfSIKKworUEFDS0FHRVMgKz0gIiR7UE59LXB5dGhvbiAiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vLmRlYnVnIgorRklMRVNfJHtQTn0tcHl0aG9uID0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC8wMDAxLW1vZF9jZ2ktYnVmZmVycy1kYXRhLXdpdGhvdXQtYm91bmQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC8wMDAxLW1vZF9jZ2ktYnVmZmVycy1kYXRhLXdpdGhvdXQtYm91bmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkZjE3NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkLzAwMDEtbW9kX2NnaS1idWZmZXJzLWRhdGEtd2l0aG91dC1ib3VuZC5wYXRjaApAQCAtMCwwICsxLDM4NyBAQAorRnJvbSBlNmNjYmFiNWQ0MmIxMTBhYzRmNmNlMWY3MmNiMWU5Y2NiZTQ0MDBhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGkgeGluIDxsaXhpbi5mbnN0QGNuLmZ1aml0c3UuY29tPgorRGF0ZTogVHVlLCAxNiBKdW4gMjAxNSAxOTowMjozOCArMDkwMAorU3ViamVjdDogW1BBVENIXSBtb2RfY2dpIGJ1ZmZlcnMgZGF0YSB3aXRob3V0IGJvdW5kIHNvIGZpeCBpdAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cDovL3JlZG1pbmUubGlnaHR0cGQubmV0L2lzc3Vlcy8xMjY0XQorCitTaWduZWQtb2ZmLWJ5OiBMaSBYaW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CisKK1VwZGF0ZSBjb250ZXh0IGZvciAxLjQuMzYuCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZG9jL2NvbmZpZy9saWdodHRwZC5jb25mIHwgICA4ICsrCisgc3JjL21vZF9jZ2kuYyAgICAgICAgICAgIHwgMTg4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxODcgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RvYy9jb25maWcvbGlnaHR0cGQuY29uZiBiL2RvYy9jb25maWcvbGlnaHR0cGQuY29uZgoraW5kZXggNjBiMGFlMS4uOWMxMDFhNyAxMDA2NDQKKy0tLSBhL2RvYy9jb25maWcvbGlnaHR0cGQuY29uZgorKysrIGIvZG9jL2NvbmZpZy9saWdodHRwZC5jb25mCitAQCAtMzc1LDYgKzM3NSwxNCBAQCBzZXJ2ZXIudXBsb2FkLWRpcnMgPSAoICIvdmFyL3RtcCIgKQorICMjCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMjCisrIyMKKysjIyBtYXhpbXVtIGJ5dGVzIGluIHNlbmRfcmF3IGJlZm9yZSBiYWNraW5nIG9mZiBbS0J5dGVdCisrIyMgIGNnaS5oaWdoLXdhdGVybGV2ZWwgICAgICAgID0gMTAyNDAKKysjIyBtaW5pbXVtIGJ5dGVzIGluIHNlbmRfcmF3IHRvIGRpc2FibGUgYmFja29mZiBbS0J5dGVdCisrIyMgIGNnaS5sb3ctd2F0ZXJsZXZlbCAgICAgICAgID0gNTEyMAorKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIworZGlmZiAtLWdpdCBhL3NyYy9tb2RfY2dpLmMgYi9zcmMvbW9kX2NnaS5jCitpbmRleCAwMWIxODc3Li43YzY3ZWI1IDEwMDY0NAorLS0tIGEvc3JjL21vZF9jZ2kuYworKysrIGIvc3JjL21vZF9jZ2kuYworQEAgLTM4LDYgKzM4LDEwIEBACisgCisgI2luY2x1ZGUgInZlcnNpb24uaCIKKyAKKysvKiBmb3Igb3V0cHV0IGxvZ3MgKi8KKytjaGFyIG1zZ2J1ZlsyMDQ4XTsKKysKKysKKyBlbnVtIHtFT0xfVU5TRVQsIEVPTF9OLCBFT0xfUk59OworIAorIHR5cGVkZWYgc3RydWN0IHsKK0BAIC01Myw5ICs1NywxOSBAQCB0eXBlZGVmIHN0cnVjdCB7CisgCXNpemVfdCBzaXplOworIH0gYnVmZmVyX3BpZF90OworIAorK3N0cnVjdCBoYW5kbGVyX2N0eDsKKysKKyt0eXBlZGVmIHN0cnVjdCB7CisrCXN0cnVjdCBoYW5kbGVyX2N0eCAqKmhjdHg7CisrCXNpemVfdCB1c2VkOworKwlzaXplX3Qgc2l6ZTsKKyt9IGJ1ZmZlcl9jdHhfdDsKKysKKyB0eXBlZGVmIHN0cnVjdCB7CisgCWFycmF5ICpjZ2k7CisgCXVuc2lnbmVkIHNob3J0IGV4ZWN1dGVfeF9vbmx5OworKwl1bnNpZ25lZCBpbnQgaGlnaF93YXRlcmxldmVsOyAvKiBtYXhpbXVtIGJ5dGVzIGluIHNlbmRfcmF3IGJlZm9yZSBiYWNraW5nIG9mZiAqLworKwl1bnNpZ25lZCBpbnQgbG93X3dhdGVybGV2ZWw7ICAvKiBtaW5pbXVtIGJ5dGVzIGluIHNlbmRfcmF3IHRvIGRpc2FibGUgYmFja29mZiAqLworIH0gcGx1Z2luX2NvbmZpZzsKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CitAQCAtNjgsOSArODIsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgeworIAlwbHVnaW5fY29uZmlnICoqY29uZmlnX3N0b3JhZ2U7CisgCisgCXBsdWdpbl9jb25maWcgY29uZjsKKysKKysJYnVmZmVyX2N0eF90IGNnaV9jdHg7CisgfSBwbHVnaW5fZGF0YTsKKyAKKy10eXBlZGVmIHN0cnVjdCB7CisrdHlwZWRlZiBzdHJ1Y3QgaGFuZGxlcl9jdHggeworIAlwaWRfdCBwaWQ7CisgCWludCBmZDsKKyAJaW50IGZkZV9uZHg7IC8qIGluZGV4IGludG8gdGhlIGZkLWV2ZW50IGJ1ZmZlciAqLworQEAgLTc4LDExICs5NCwxNiBAQCB0eXBlZGVmIHN0cnVjdCB7CisgCWNvbm5lY3Rpb24gKnJlbW90ZV9jb25uOyAgLyogZHVtYiBwb2ludGVyICovCisgCXBsdWdpbl9kYXRhICpwbHVnaW5fZGF0YTsgLyogZHVtYiBwb2ludGVyICovCisgCisrCWludCB0aHJvdHRsaW5nOyAgICAgICAgLyogMT13YWl0aW5nIGZvciBzZW5kX3JhdyBidWZmZXIgdG8gZHJhaW4gKi8KKysJb2ZmX3QgaGlnaF93YXRlcmxldmVsOyAvKiBtYXhpbXVtIGJ5dGVzIGluIHNlbmRfcmF3IGJlZm9yZSBiYWNraW5nIG9mZiAqLworKwlvZmZfdCBsb3dfd2F0ZXJsZXZlbDsgIC8qIG1pbmltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgdG8gZGlzYWJsZSBiYWNrb2ZmICovCisrCW9mZl90IGJ5dGVzX2luX2J1ZmZlcjsKKysKKyAJYnVmZmVyICpyZXNwb25zZTsKKyAJYnVmZmVyICpyZXNwb25zZV9oZWFkZXI7CisgfSBoYW5kbGVyX2N0eDsKKyAKKy1zdGF0aWMgaGFuZGxlcl9jdHggKiBjZ2lfaGFuZGxlcl9jdHhfaW5pdCh2b2lkKSB7Cisrc3RhdGljIGhhbmRsZXJfY3R4ICogY2dpX2hhbmRsZXJfY3R4X2luaXQocGx1Z2luX2RhdGEgKnApIHsKKyAJaGFuZGxlcl9jdHggKmhjdHggPSBjYWxsb2MoMSwgc2l6ZW9mKCpoY3R4KSk7CisgCisgCWZvcmNlX2Fzc2VydChoY3R4KTsKK0BAIC05MCwxMyArMTExLDI2IEBAIHN0YXRpYyBoYW5kbGVyX2N0eCAqIGNnaV9oYW5kbGVyX2N0eF9pbml0KHZvaWQpIHsKKyAJaGN0eC0+cmVzcG9uc2UgPSBidWZmZXJfaW5pdCgpOworIAloY3R4LT5yZXNwb25zZV9oZWFkZXIgPSBidWZmZXJfaW5pdCgpOworIAorKwloY3R4LT50aHJvdHRsaW5nID0gMDsKKysJaGN0eC0+aGlnaF93YXRlcmxldmVsID0gKG9mZl90KXAtPmNvbmYuaGlnaF93YXRlcmxldmVsICogMTAyNDsKKysJaGN0eC0+bG93X3dhdGVybGV2ZWwgID0gKG9mZl90KXAtPmNvbmYubG93X3dhdGVybGV2ZWwgICogMTAyNDsKKysJaWYgKGhjdHgtPmxvd193YXRlcmxldmVsID49IGhjdHgtPmhpZ2hfd2F0ZXJsZXZlbCkgeworKwkgICAgaGN0eC0+bG93X3dhdGVybGV2ZWwgPSBoY3R4LT5oaWdoX3dhdGVybGV2ZWwgKiAzIC8gNDsgLyogNzUlICovCisrCX0KKysJaGN0eC0+Ynl0ZXNfaW5fYnVmZmVyID0gMDsKKysKKyAJcmV0dXJuIGhjdHg7CisgfQorIAorLXN0YXRpYyB2b2lkIGNnaV9oYW5kbGVyX2N0eF9mcmVlKGhhbmRsZXJfY3R4ICpoY3R4KSB7Cisrc3RhdGljIHZvaWQgY2dpX2hhbmRsZXJfY3R4X2ZyZWUoc2VydmVyICpzcnYsIGhhbmRsZXJfY3R4ICpoY3R4KSB7CisgCWJ1ZmZlcl9mcmVlKGhjdHgtPnJlc3BvbnNlKTsKKyAJYnVmZmVyX2ZyZWUoaGN0eC0+cmVzcG9uc2VfaGVhZGVyKTsKKyAKKysJLyogdG8gYXZvaWQgY29uZnVzaW9uICovCisrCWlmIChoY3R4LT50aHJvdHRsaW5nKSB7CisrCSAgICBsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzIiwgInVudGhyb3R0bGVkIik7CisrCX0KKysKKyAJZnJlZShoY3R4KTsKKyB9CisgCitAQCAtMTU0LDYgKzE4OCw4IEBAIFNFVERFRkFVTFRTX0ZVTkMobW9kX2Zhc3RjZ2lfc2V0X2RlZmF1bHRzKSB7CisgCWNvbmZpZ192YWx1ZXNfdCBjdltdID0geworIAkJeyAiY2dpLmFzc2lnbiIsICAgICAgICAgICAgICAgICAgTlVMTCwgVF9DT05GSUdfQVJSQVksIFRfQ09ORklHX1NDT1BFX0NPTk5FQ1RJT04gfSwgICAgICAgLyogMCAqLworIAkJeyAiY2dpLmV4ZWN1dGUteC1vbmx5IiwgICAgICAgICAgTlVMTCwgVF9DT05GSUdfQk9PTEVBTiwgVF9DT05GSUdfU0NPUEVfQ09OTkVDVElPTiB9LCAgICAgLyogMSAqLworKwkJeyAiY2dpLmhpZ2gtd2F0ZXJsZXZlbCIsICAgICAgICAgTlVMTCwgVF9DT05GSUdfSU5ULCAgIFRfQ09ORklHX1NDT1BFX0NPTk5FQ1RJT04gfSwgICAgICAgLyogMiAqLworKwkJeyAiY2dpLmxvdy13YXRlcmxldmVsIiwgICAgICAgICAgTlVMTCwgVF9DT05GSUdfSU5ULCAgIFRfQ09ORklHX1NDT1BFX0NPTk5FQ1RJT04gfSwgICAgICAgLyogMyAqLworIAkJeyBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgVF9DT05GSUdfVU5TRVQsIFRfQ09ORklHX1NDT1BFX1VOU0VUfQorIAl9OworIAorQEAgLTE2OSw5ICsyMDUsMTMgQEAgU0VUREVGQVVMVFNfRlVOQyhtb2RfZmFzdGNnaV9zZXRfZGVmYXVsdHMpIHsKKyAKKyAJCXMtPmNnaSAgICA9IGFycmF5X2luaXQoKTsKKyAJCXMtPmV4ZWN1dGVfeF9vbmx5ID0gMDsKKysJCXMtPmhpZ2hfd2F0ZXJsZXZlbCA9IDA7IC8qIDAgPT0gZGlzYWJsZWQgKi8KKysJCXMtPmxvd193YXRlcmxldmVsICA9IDA7CisgCisgCQljdlswXS5kZXN0aW5hdGlvbiA9IHMtPmNnaTsKKyAJCWN2WzFdLmRlc3RpbmF0aW9uID0gJihzLT5leGVjdXRlX3hfb25seSk7CisrCQljdlsyXS5kZXN0aW5hdGlvbiA9ICYocy0+aGlnaF93YXRlcmxldmVsKTsKKysJCWN2WzNdLmRlc3RpbmF0aW9uID0gJihzLT5sb3dfd2F0ZXJsZXZlbCk7CisgCisgCQlwLT5jb25maWdfc3RvcmFnZVtpXSA9IHM7CisgCitAQCAtMTg0LDYgKzIyNCw1MSBAQCBTRVRERUZBVUxUU19GVU5DKG1vZF9mYXN0Y2dpX3NldF9kZWZhdWx0cykgeworIH0KKyAKKyAKKytzdGF0aWMgdm9pZCBjZ2lfcmVjb3VudF9ieXRlc19pbl9idWZmZXIoaGFuZGxlcl9jdHggKmhjdHgpCisreworKwljaHVua3F1ZXVlICpjcSA9IGhjdHgtPnJlbW90ZV9jb25uLT53cml0ZV9xdWV1ZTsKKysJaGN0eC0+Ynl0ZXNfaW5fYnVmZmVyID0gY2h1bmtxdWV1ZV9sZW5ndGgoY3EpIC0gY2h1bmtxdWV1ZV93cml0dGVuKGNxKTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgY2dpX3Rocm90dGxpbmdfY29udHJvbChzZXJ2ZXIgKnNydiwgaGFuZGxlcl9jdHggKmhjdHgpCisreworKwljZ2lfcmVjb3VudF9ieXRlc19pbl9idWZmZXIoaGN0eCk7CisrCisrI2lmZGVmIERFQlVHCisrCXNwcmludGYobXNnYnVmLCAidGhyb3R0bGluZz0lZCwgY2hhcnM9JWxsdSwgaGlnaD0lbGx1LCBsb3c9JWxsdSIsCisrCQloY3R4LT50aHJvdHRsaW5nLCBoY3R4LT5ieXRlc19pbl9idWZmZXIsCisrCQloY3R4LT5oaWdoX3dhdGVybGV2ZWwsIGhjdHgtPmxvd193YXRlcmxldmVsKTsKKysJbG9nX2Vycm9yX3dyaXRlKHNydiwgX19GSUxFX18sIF9fTElORV9fLCAic3MiLAorKwkJCSIoZGVidWcpIHRocm90dGxpbmcgY29udHJvbCwiLCBtc2didWYpOworKyNlbmRpZgorKworKwlpZiAoaGN0eC0+dGhyb3R0bGluZykgeworKwkJc3ByaW50Zihtc2didWYsICJ0aHJvdHRsaW5nOyBjaGFycyBpbiBxdWV1ZT0lbGx1LCIKKysJCQkiIGxvdy13YXRlcmxldmVsPSVsbHUsIGhpZ2gtd2F0ZXJsZXZlbD0lbGx1IiwKKysJCQloY3R4LT5ieXRlc19pbl9idWZmZXIsCisrCQkJaGN0eC0+bG93X3dhdGVybGV2ZWwsIGhjdHgtPmhpZ2hfd2F0ZXJsZXZlbCk7CisrCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzIiwgbXNnYnVmKTsKKysJCWlmIChoY3R4LT5ieXRlc19pbl9idWZmZXIgPD0gaGN0eC0+bG93X3dhdGVybGV2ZWwpIHsKKysJCQlmZGV2ZW50X2V2ZW50X3NldChzcnYtPmV2LCAmKGhjdHgtPmZkZV9uZHgpLCBoY3R4LT5mZCwgRkRFVkVOVF9JTik7CisrCQkJaGN0eC0+dGhyb3R0bGluZyA9IDA7CisrCQkJbG9nX2Vycm9yX3dyaXRlKHNydiwgX19GSUxFX18sIF9fTElORV9fLCAicyIsICJ1bnRocm90dGxlZCIpOworKwkJfQorKwl9IGVsc2UgeworKwkJaWYgKGhjdHgtPmhpZ2hfd2F0ZXJsZXZlbCAhPSAwICYmCisrCQkJaGN0eC0+aGlnaF93YXRlcmxldmVsIDw9IGhjdHgtPmJ5dGVzX2luX2J1ZmZlcikgeworKwkJCWZkZXZlbnRfZXZlbnRfZGVsKHNydi0+ZXYsICYoaGN0eC0+ZmRlX25keCksIGhjdHgtPmZkKTsKKysJCQloY3R4LT50aHJvdHRsaW5nID0gMTsKKysJCQlzcHJpbnRmKG1zZ2J1ZiwgInRocm90dGxlZDsgY2hhcnMgaW4gcXVldWU9JWxsdSwiCisrCQkJCSIgbG93LXdhdGVybGV2ZWw9JWxsdSwgaGlnaC13YXRlcmxldmVsPSVsbHUiLAorKwkJCQloY3R4LT5ieXRlc19pbl9idWZmZXIsCisrCQkJCWhjdHgtPmxvd193YXRlcmxldmVsLCBoY3R4LT5oaWdoX3dhdGVybGV2ZWwpOworKwkJCWxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywgInMiLCBtc2didWYpOworKwkJfQorKwl9CisrfQorKworKworIHN0YXRpYyBpbnQgY2dpX3BpZF9hZGQoc2VydmVyICpzcnYsIHBsdWdpbl9kYXRhICpwLCBwaWRfdCBwaWQpIHsKKyAJaW50IG0gPSAtMTsKKyAJc2l6ZV90IGk7CitAQCAtMjMwLDYgKzMxNSwzOSBAQCBzdGF0aWMgaW50IGNnaV9waWRfZGVsKHNlcnZlciAqc3J2LCBwbHVnaW5fZGF0YSAqcCwgcGlkX3QgcGlkKSB7CisgCXJldHVybiAwOworIH0KKyAKKysKKytzdGF0aWMgdm9pZCBjZ2lfY3R4X2FkZChwbHVnaW5fZGF0YSAqcCwgaGFuZGxlcl9jdHggKmhjdHgpIHsKKysJYnVmZmVyX2N0eF90ICpyID0gJihwLT5jZ2lfY3R4KTsKKysKKysJaWYgKHItPnNpemUgPT0gMCkgeworKwkJci0+c2l6ZSA9IDE2OworKwkJci0+aGN0eCA9IG1hbGxvYyhzaXplb2YoKnItPmhjdHgpICogci0+c2l6ZSk7CisrCX0gZWxzZSBpZiAoci0+dXNlZCA9PSByLT5zaXplKSB7CisrCQlyLT5zaXplICs9IDE2OworKwkJci0+aGN0eCA9IHJlYWxsb2Moci0+aGN0eCwgc2l6ZW9mKCpyLT5oY3R4KSAqIHItPnNpemUpOworKwl9CisrCisrCXItPmhjdHhbci0+dXNlZCsrXSA9IGhjdHg7CisrfQorKworK3N0YXRpYyB2b2lkIGNnaV9jdHhfZGVsKHBsdWdpbl9kYXRhICpwLCBoYW5kbGVyX2N0eCAqaGN0eCkgeworKwlzaXplX3QgaTsKKysJYnVmZmVyX2N0eF90ICpyID0gJihwLT5jZ2lfY3R4KTsKKysKKysJZm9yIChpID0gMDsgaSA8IHItPnVzZWQ7IGkrKykgeworKwkJaWYgKHItPmhjdHhbaV0gPT0gaGN0eCkgYnJlYWs7CisrCX0KKysKKysJaWYgKGkgIT0gci0+dXNlZCkgeworKwkJLyogZm91bmQgKi8KKysKKysJCWlmIChpICE9IHItPnVzZWQgLSAxKSB7CisrCQkJci0+aGN0eFtpXSA9IHItPmhjdHhbci0+dXNlZCAtIDFdOworKwkJfQorKwkJci0+dXNlZC0tOworKwl9CisrfQorKworIHN0YXRpYyBpbnQgY2dpX3Jlc3BvbnNlX3BhcnNlKHNlcnZlciAqc3J2LCBjb25uZWN0aW9uICpjb24sIHBsdWdpbl9kYXRhICpwLCBidWZmZXIgKmluKSB7CisgCWNoYXIgKm5zOworIAljb25zdCBjaGFyICpzOworQEAgLTM4MCw2ICs0OTgsMTQgQEAgc3RhdGljIGludCBjZ2lfZGVtdXhfcmVzcG9uc2Uoc2VydmVyICpzcnYsIGhhbmRsZXJfY3R4ICpoY3R4KSB7CisgCisgCQlidWZmZXJfY29tbWl0KGhjdHgtPnJlc3BvbnNlLCBuKTsKKyAKKysjaWZkZWYgREVCVUcKKysJCXNwcmludGYobXNnYnVmLCAibj0lZCwgYnl0ZXNfb3V0PSVsbHUsIGJ5dGVzX2luPSVsbHUiLCBuLAorKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY29uLT53cml0ZV9xdWV1ZS0+Ynl0ZXNfb3V0LAorKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY29uLT53cml0ZV9xdWV1ZS0+Ynl0ZXNfaW4pOworKwkJbG9nX2Vycm9yX3dyaXRlKHNydiwgX19GSUxFX18sIF9fTElORV9fLCAic3MiLAorKwkJCQkiKGRlYnVnKSByZWFkLCIsIG1zZ2J1Zik7CisrI2VuZGlmCisrCisgCQkvKiBzcGxpdCBoZWFkZXIgZnJvbSBib2R5ICovCisgCisgCQlpZiAoY29uLT5maWxlX3N0YXJ0ZWQgPT0gMCkgeworQEAgLTUwMyw3ICs2MjksMjAgQEAgc3RhdGljIGludCBjZ2lfZGVtdXhfcmVzcG9uc2Uoc2VydmVyICpzcnYsIGhhbmRsZXJfY3R4ICpoY3R4KSB7CisgCQkJfQorIAkJfSBlbHNlIHsKKyAJCQlodHRwX2NodW5rX2FwcGVuZF9idWZmZXIoc3J2LCBjb24sIGhjdHgtPnJlc3BvbnNlKTsKKysjaWZkZWYgREVCVUcKKysJCQlzcHJpbnRmKG1zZ2J1ZiwgIm49JWQsIGJ5dGVzX291dD0lbGx1LCBieXRlc19pbj0lbGx1LCBsaW1pdD0lbGx1IiwgbiwKKysJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb24tPndyaXRlX3F1ZXVlLT5ieXRlc19vdXQsCisrCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY29uLT53cml0ZV9xdWV1ZS0+Ynl0ZXNfaW4sCisrCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpaGN0eC0+aGlnaF93YXRlcmxldmVsKTsKKysJCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sCisrCQkJCQkic3MiLCAiKGRlYnVnKSBhcHBlbmQsIiwgbXNnYnVmKTsKKysjZW5kaWYKKyAJCQlqb2JsaXN0X2FwcGVuZChzcnYsIGNvbik7CisrCisrCQkJY2dpX3Rocm90dGxpbmdfY29udHJvbChzcnYsIGhjdHgpOworKwkJCWlmIChoY3R4LT50aHJvdHRsaW5nKSB7CisrCQkJCXJldHVybiBGREVWRU5UX0hBTkRMRURfTk9UX0ZJTklTSEVEOworKwkJCX0KKyAJCX0KKyAKKyAjaWYgMAorQEAgLTU1Myw4ICs2OTIsOSBAQCBzdGF0aWMgaGFuZGxlcl90IGNnaV9jb25uZWN0aW9uX2Nsb3NlKHNlcnZlciAqc3J2LCBoYW5kbGVyX2N0eCAqaGN0eCkgeworIAljb24tPnBsdWdpbl9jdHhbcC0+aWRdID0gTlVMTDsKKyAKKyAJLyogaXMgdGhpcyBhIGdvb2QgaWRlYSA/ICovCistCWNnaV9oYW5kbGVyX2N0eF9mcmVlKGhjdHgpOworLQorKwljZ2lfY3R4X2RlbChwLCBoY3R4KTsKKysJY2dpX2hhbmRsZXJfY3R4X2ZyZWUoc3J2LCBoY3R4KTsKKysJCisgCS8qIGlmIHdhaXRwaWQgaGFzbid0IGJlZW4gY2FsbGVkIGJ5IHJlc3BvbnNlLmMgeWV0LCBkbyBpdCBoZXJlICovCisgCWlmIChwaWQpIHsKKyAJCS8qIGNoZWNrIGlmIHRoZSBDR0ktc2NyaXB0IGlzIGFscmVhZHkgZ29uZSAqLworQEAgLTExMDUsNyArMTI0NSw4IEBAIHN0YXRpYyBpbnQgY2dpX2NyZWF0ZV9lbnYoc2VydmVyICpzcnYsIGNvbm5lY3Rpb24gKmNvbiwgcGx1Z2luX2RhdGEgKnAsIGJ1ZmZlciAqCisgCQljb24tPm1vZGUgPSBwLT5pZDsKKyAJCWJ1ZmZlcl9yZXNldChjb24tPnBoeXNpY2FsLnBhdGgpOworIAorLQkJaGN0eCA9IGNnaV9oYW5kbGVyX2N0eF9pbml0KCk7CisrCQloY3R4ID0gY2dpX2hhbmRsZXJfY3R4X2luaXQocCk7CisrCQljZ2lfY3R4X2FkZChwLCBoY3R4KTsKKyAKKyAJCWhjdHgtPnJlbW90ZV9jb25uID0gY29uOworIAkJaGN0eC0+cGx1Z2luX2RhdGEgPSBwOworQEAgLTExMTQsNiArMTI1NSwxMSBAQCBzdGF0aWMgaW50IGNnaV9jcmVhdGVfZW52KHNlcnZlciAqc3J2LCBjb25uZWN0aW9uICpjb24sIHBsdWdpbl9kYXRhICpwLCBidWZmZXIgKgorIAkJaGN0eC0+ZmRlX25keCA9IC0xOworIAorIAkJY29uLT5wbHVnaW5fY3R4W3AtPmlkXSA9IGhjdHg7CisrI2lmZGVmIERFQlVHCisrCQlzcHJpbnRmKG1zZ2J1ZiwgImhjdHg9JXAsIGNvbj0lcCIsICh2b2lkKiloY3R4LCAodm9pZCopY29uKTsKKysJCWxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywgInNzIiwKKysJCQkJIihkZWJ1ZykgaGN0eCBnZW5lcmF0ZWQsICIsIG1zZ2J1Zik7CisrI2VuZGlmCisgCisgCQlmZGV2ZW50X3JlZ2lzdGVyKHNydi0+ZXYsIGhjdHgtPmZkLCBjZ2lfaGFuZGxlX2ZkZXZlbnQsIGhjdHgpOworIAkJZmRldmVudF9ldmVudF9zZXQoc3J2LT5ldiwgJihoY3R4LT5mZGVfbmR4KSwgaGN0eC0+ZmQsIEZERVZFTlRfSU4pOworQEAgLTExMjgsNyArMTI3NCw4IEBAIHN0YXRpYyBpbnQgY2dpX2NyZWF0ZV9lbnYoc2VydmVyICpzcnYsIGNvbm5lY3Rpb24gKmNvbiwgcGx1Z2luX2RhdGEgKnAsIGJ1ZmZlciAqCisgCisgCQkJY2xvc2UoaGN0eC0+ZmQpOworIAorLQkJCWNnaV9oYW5kbGVyX2N0eF9mcmVlKGhjdHgpOworKwkJCWNnaV9jdHhfZGVsKHAsIGhjdHgpOworKwkJCWNnaV9oYW5kbGVyX2N0eF9mcmVlKHNydiwgaGN0eCk7CisgCisgCQkJY29uLT5wbHVnaW5fY3R4W3AtPmlkXSA9IE5VTEw7CisgCitAQCAtMTE1Myw2ICsxMzAwLDggQEAgc3RhdGljIGludCBtb2RfY2dpX3BhdGNoX2Nvbm5lY3Rpb24oc2VydmVyICpzcnYsIGNvbm5lY3Rpb24gKmNvbiwgcGx1Z2luX2RhdGEgKnAKKyAKKyAJUEFUQ0goY2dpKTsKKyAJUEFUQ0goZXhlY3V0ZV94X29ubHkpOworKwlQQVRDSChoaWdoX3dhdGVybGV2ZWwpOworKwlQQVRDSChsb3dfd2F0ZXJsZXZlbCk7CisgCisgCS8qIHNraXAgdGhlIGZpcnN0LCB0aGUgZ2xvYmFsIGNvbnRleHQgKi8KKyAJZm9yIChpID0gMTsgaSA8IHNydi0+Y29uZmlnX2NvbnRleHQtPnVzZWQ7IGkrKykgeworQEAgLTExNzAsNiArMTMxOSwxMCBAQCBzdGF0aWMgaW50IG1vZF9jZ2lfcGF0Y2hfY29ubmVjdGlvbihzZXJ2ZXIgKnNydiwgY29ubmVjdGlvbiAqY29uLCBwbHVnaW5fZGF0YSAqcAorIAkJCQlQQVRDSChjZ2kpOworIAkJCX0gZWxzZSBpZiAoYnVmZmVyX2lzX2VxdWFsX3N0cmluZyhkdS0+a2V5LCBDT05TVF9TVFJfTEVOKCJjZ2kuZXhlY3V0ZS14LW9ubHkiKSkpIHsKKyAJCQkJUEFUQ0goZXhlY3V0ZV94X29ubHkpOworKwkJCX0gZWxzZSBpZiAoYnVmZmVyX2lzX2VxdWFsX3N0cmluZyhkdS0+a2V5LCBDT05TVF9TVFJfTEVOKCJjZ2kuaGlnaC13YXRlcmxldmVsIikpKSB7CisrCQkJCVBBVENIKGhpZ2hfd2F0ZXJsZXZlbCk7CisrCQkJfSBlbHNlIGlmIChidWZmZXJfaXNfZXF1YWxfc3RyaW5nKGR1LT5rZXksIENPTlNUX1NUUl9MRU4oImNnaS5sb3ctd2F0ZXJsZXZlbCIpKSkgeworKwkJCQlQQVRDSChsb3dfd2F0ZXJsZXZlbCk7CisgCQkJfQorIAkJfQorIAl9CitAQCAtMTIyMiw2ICsxMzc1LDIxIEBAIFVSSUhBTkRMRVJfRlVOQyhjZ2lfaXNfaGFuZGxlZCkgeworIFRSSUdHRVJfRlVOQyhjZ2lfdHJpZ2dlcikgeworIAlwbHVnaW5fZGF0YSAqcCA9IHBfZDsKKyAJc2l6ZV90IG5keDsKKysKKysJZm9yIChuZHggPSAwOyBuZHggPCBwLT5jZ2lfY3R4LnVzZWQ7IG5keCsrKSB7CisrCQloYW5kbGVyX2N0eCAqaGN0eCA9IHAtPmNnaV9jdHguaGN0eFtuZHhdOworKyNpZmRlZiBERUJVRworKwkJY29ubmVjdGlvbiAqY29uID0gaGN0eC0+cmVtb3RlX2Nvbm47CisrCQorKwkJc3ByaW50Zihtc2didWYsICJoY3R4PSVwLCBjb249JXAsIGJ5dGVzX2luX2J1ZmZlcj0lbGx1IiwKKysJCQkodm9pZCopaGN0eCwgKHZvaWQqKWNvbiwKKysJCQkodW5zaWduZWQgbG9uZyBsb25nKWhjdHgtPmJ5dGVzX2luX2J1ZmZlcik7CisrCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzcyIsCisrCQkJCSIoZGVidWcpIGZvdW5kIHVzaW5nIGN0eCwiLCBtc2didWYpOworKyNlbmRpZgorKwkJY2dpX3Rocm90dGxpbmdfY29udHJvbChzcnYsIGhjdHgpOworKwl9CisrCisgCS8qIHRoZSB0cmlnZ2VyIGhhbmRsZSBvbmx5IGNhcmVzIGFib3V0IGxvbmVseSBQSUQgd2hpY2ggd2UgaGF2ZSB0byB3YWl0IGZvciAqLworICNpZm5kZWYgX19XSU4zMgorIAorQEAgLTEzMzAsNyArMTQ5OCw4IEBAIFNVQlJFUVVFU1RfRlVOQyhtb2RfY2dpX2hhbmRsZV9zdWJyZXF1ZXN0KSB7CisgCQkJbG9nX2Vycm9yX3dyaXRlKHNydiwgX19GSUxFX18sIF9fTElORV9fLCAic2RzIiwgImNnaSBjbG9zZSBmYWlsZWQgIiwgaGN0eC0+ZmQsIHN0cmVycm9yKGVycm5vKSk7CisgCQl9CisgCistCQljZ2lfaGFuZGxlcl9jdHhfZnJlZShoY3R4KTsKKysJCWNnaV9jdHhfZGVsKHAsIGhjdHgpOworKwkJY2dpX2hhbmRsZXJfY3R4X2ZyZWUoc3J2LCBoY3R4KTsKKyAKKyAJCWNvbi0+cGx1Z2luX2N0eFtwLT5pZF0gPSBOVUxMOworIAorQEAgLTEzNjIsNyArMTUzMSw4IEBAIFNVQlJFUVVFU1RfRlVOQyhtb2RfY2dpX2hhbmRsZV9zdWJyZXF1ZXN0KSB7CisgCQkJbG9nX2Vycm9yX3dyaXRlKHNydiwgX19GSUxFX18sIF9fTElORV9fLCAic2RzIiwgImNnaSBjbG9zZSBmYWlsZWQgIiwgaGN0eC0+ZmQsIHN0cmVycm9yKGVycm5vKSk7CisgCQl9CisgCistCQljZ2lfaGFuZGxlcl9jdHhfZnJlZShoY3R4KTsKKysJCWNnaV9jdHhfZGVsKHAsIGhjdHgpOworKwkJY2dpX2hhbmRsZXJfY3R4X2ZyZWUoc3J2LCBoY3R4KTsKKyAKKyAJCWNvbi0+cGx1Z2luX2N0eFtwLT5pZF0gPSBOVUxMOworIAkJcmV0dXJuIEhBTkRMRVJfRklOSVNIRUQ7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9pbmRleC5odG1sLmxpZ2h0dHBkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvaW5kZXguaHRtbC5saWdodHRwZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWYxYzM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvaW5kZXguaHRtbC5saWdodHRwZApAQCAtMCwwICsxIEBACis8aHRtbD48Ym9keT48aDE+SXQgd29ya3MhPC9oMT48L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjg5YTYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KK0RBRU1PTj0vdXNyL3NiaW4vbGlnaHR0cGQKK05BTUU9bGlnaHR0cGQKK0RFU0M9IkxpZ2h0dHBkIFdlYiBTZXJ2ZXIiCitPUFRTPSItZiAvZXRjL2xpZ2h0dHBkLmNvbmYiCisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwllY2hvIC1uICJTdGFydGluZyAkREVTQzogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLXggIiREQUVNT04iIC0tICRPUFRTCisJZWNobyAiJE5BTUUuIgorCTs7CisgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgJERFU0M6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLXggIiREQUVNT04iCisJZWNobyAiJE5BTUUuIgorCTs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCWVjaG8gLW4gIlJlc3RhcnRpbmcgJERFU0M6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLXggIiREQUVNT04iCisJc2xlZXAgMQorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLXggIiREQUVNT04iIC0tICRPUFRTCisJZWNobyAiJE5BTUUuIgorCTs7CisgICopCisJTj0vZXRjL2luaXQuZC8kTkFNRQorCWVjaG8gIlVzYWdlOiAkTiB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iID4mMgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL2xpZ2h0dHBkLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU4NDAyZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL2xpZ2h0dHBkLmNvbmYKQEAgLTAsMCArMSwzMzEgQEAKKyMgbGlnaHR0cGQgY29uZmlndXJhdGlvbiBmaWxlCisjCisjIHVzZSBpdCBhcyBhIGJhc2UgZm9yIGxpZ2h0dHBkIDEuMC4wIGFuZCBhYm92ZQorIworIyAkSWQ6IGxpZ2h0dHBkLmNvbmYsdiAxLjcgMjAwNC8xMS8wMyAyMjoyNjowNSB3ZWlnb24gRXhwICQKKworIyMjIyMjIyMjIyMjIE9wdGlvbnMgeW91IHJlYWxseSBoYXZlIHRvIHRha2UgY2FyZSBvZiAjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyBtb2R1bGVzIHRvIGxvYWQKKyMgYXQgbGVhc3QgbW9kX2FjY2VzcyBhbmQgbW9kX2FjY2Vzc2xvZyBzaG91bGQgYmUgbG9hZGVkCisjIGFsbCBvdGhlciBtb2R1bGUgc2hvdWxkIG9ubHkgYmUgbG9hZGVkIGlmIHJlYWxseSBuZWNjZXNhcnkKKyMgLSBzYXZlcyBzb21lIHRpbWUKKyMgLSBzYXZlcyBtZW1vcnkKK3NlcnZlci5tb2R1bGVzICAgICAgICAgICAgICA9ICgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9yZXdyaXRlIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9yZWRpcmVjdCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfYWxpYXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX2FjY2VzcyIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfY21sIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF90cmlnZ2VyX2I0X2RsIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9hdXRoIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9zdGF0dXMiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3NldGVudiIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfZmFzdGNnaSIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfcHJveHkiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3NpbXBsZV92aG9zdCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfZXZob3N0IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF91c2VyZGlyIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9jZ2kiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX2NvbXByZXNzIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9zc2kiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3VzZXJ0cmFjayIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfZXhwaXJlIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9zZWNkb3dubG9hZCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfcnJkdG9vbCIsCisjCQkJCSJtb2Rfd2ViZGF2IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9hY2Nlc3Nsb2ciICkKKworIyMgYSBzdGF0aWMgZG9jdW1lbnQtcm9vdCwgZm9yIHZpcnR1YWwtaG9zdGluZyB0YWtlIGxvb2sgYXQgdGhlCisjIyBzZXJ2ZXIudmlydHVhbC0qIG9wdGlvbnMKK3NlcnZlci5kb2N1bWVudC1yb290ICAgICAgICA9ICIvd3d3L3BhZ2VzLyIKKworIyMgd2hlcmUgdG8gc2VuZCBlcnJvci1tZXNzYWdlcyB0bworc2VydmVyLmVycm9ybG9nICAgICAgICAgICAgID0gIi93d3cvbG9ncy9saWdodHRwZC5lcnJvci5sb2ciCisKKyMgZmlsZXMgdG8gY2hlY2sgZm9yIGlmIC4uLi8gaXMgcmVxdWVzdGVkCitpbmRleC1maWxlLm5hbWVzICAgICAgICAgICAgPSAoICJpbmRleC5waHAiLCAiaW5kZXguaHRtbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmRleC5odG0iLCAiZGVmYXVsdC5odG0iICkKKworIyMgc2V0IHRoZSBldmVudC1oYW5kbGVyIChyZWFkIHRoZSBwZXJmb3JtYW5jZSBzZWN0aW9uIGluIHRoZSBtYW51YWwpCisjIHNlcnZlci5ldmVudC1oYW5kbGVyID0gImZyZWVic2Qta3F1ZXVlIiAjIG5lZWRlZCBvbiBPUyBYCisKKyMgbWltZXR5cGUgbWFwcGluZworbWltZXR5cGUuYXNzaWduICAgICAgICAgICAgID0gKAorICAiLnBkZiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vcGRmIiwKKyAgIi5zaWciICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3BncC1zaWduYXR1cmUiLAorICAiLnNwbCIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vZnV0dXJlc3BsYXNoIiwKKyAgIi5jbGFzcyIgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsCisgICIucHMiICAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9wb3N0c2NyaXB0IiwKKyAgIi50b3JyZW50IiAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtYml0dG9ycmVudCIsCisgICIuZHZpIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWR2aSIsCisgICIuZ3oiICAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWd6aXAiLAorICAiLnBhYyIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1ucy1wcm94eS1hdXRvY29uZmlnIiwKKyAgIi5zd2YiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIiwKKyAgIi50YXIuZ3oiICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtdGd6IiwKKyAgIi50Z3oiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtdGd6IiwKKyAgIi50YXIiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtdGFyIiwKKyAgIi56aXAiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3ppcCIsCisgICIubXAzIiAgICAgICAgICA9PiAgICAgICJhdWRpby9tcGVnIiwKKyAgIi5tM3UiICAgICAgICAgID0+ICAgICAgImF1ZGlvL3gtbXBlZ3VybCIsCisgICIud21hIiAgICAgICAgICA9PiAgICAgICJhdWRpby94LW1zLXdtYSIsCisgICIud2F4IiAgICAgICAgICA9PiAgICAgICJhdWRpby94LW1zLXdheCIsCisgICIub2dnIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9vZ2ciLAorICAiLndhdiIgICAgICAgICAgPT4gICAgICAiYXVkaW8veC13YXYiLAorICAiLmdpZiIgICAgICAgICAgPT4gICAgICAiaW1hZ2UvZ2lmIiwKKyAgIi5qcGciICAgICAgICAgID0+ICAgICAgImltYWdlL2pwZWciLAorICAiLmpwZWciICAgICAgICAgPT4gICAgICAiaW1hZ2UvanBlZyIsCisgICIucG5nIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9wbmciLAorICAiLnhibSIgICAgICAgICAgPT4gICAgICAiaW1hZ2UveC14Yml0bWFwIiwKKyAgIi54cG0iICAgICAgICAgID0+ICAgICAgImltYWdlL3gteHBpeG1hcCIsCisgICIueHdkIiAgICAgICAgICA9PiAgICAgICJpbWFnZS94LXh3aW5kb3dkdW1wIiwKKyAgIi5jc3MiICAgICAgICAgID0+ICAgICAgInRleHQvY3NzIiwKKyAgIi5odG1sIiAgICAgICAgID0+ICAgICAgInRleHQvaHRtbCIsCisgICIuaHRtIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L2h0bWwiLAorICAiLmpzIiAgICAgICAgICAgPT4gICAgICAidGV4dC9qYXZhc2NyaXB0IiwKKyAgIi5hc2MiICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmMiICAgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIuY3BwIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5sb2ciICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmNvbmYiICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIudGV4dCIgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi50eHQiICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmR0ZCIgICAgICAgICAgPT4gICAgICAidGV4dC94bWwiLAorICAiLnhtbCIgICAgICAgICAgPT4gICAgICAidGV4dC94bWwiLAorICAiLm1wZWciICAgICAgICAgPT4gICAgICAidmlkZW8vbXBlZyIsCisgICIubXBnIiAgICAgICAgICA9PiAgICAgICJ2aWRlby9tcGVnIiwKKyAgIi5tb3YiICAgICAgICAgID0+ICAgICAgInZpZGVvL3F1aWNrdGltZSIsCisgICIucXQiICAgICAgICAgICA9PiAgICAgICJ2aWRlby9xdWlja3RpbWUiLAorICAiLmF2aSIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tc3ZpZGVvIiwKKyAgIi5hc2YiICAgICAgICAgID0+ICAgICAgInZpZGVvL3gtbXMtYXNmIiwKKyAgIi5hc3giICAgICAgICAgID0+ICAgICAgInZpZGVvL3gtbXMtYXNmIiwKKyAgIi53bXYiICAgICAgICAgID0+ICAgICAgInZpZGVvL3gtbXMtd212IiwKKyAgIi5iejIiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtYnppcCIsCisgICIudGJ6IiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWJ6aXAtY29tcHJlc3NlZC10YXIiLAorICAiLnRhci5iejIiICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1iemlwLWNvbXByZXNzZWQtdGFyIgorICkKKworIyBVc2UgdGhlICJDb250ZW50LVR5cGUiIGV4dGVuZGVkIGF0dHJpYnV0ZSB0byBvYnRhaW4gbWltZSB0eXBlIGlmIHBvc3NpYmxlCisjbWltZXR5cGUudXNlLXhhdHRyICAgICAgICA9ICJlbmFibGUiCisKKworIyMgc2VuZCBhIGRpZmZlcmVudCBTZXJ2ZXI6IGhlYWRlcgorIyMgYmUgbmljZSBhbmQga2VlcCBpdCBhdCBsaWdodHRwZAorIyBzZXJ2ZXIudGFnICAgICAgICAgICAgICAgICA9ICJsaWdodHRwZCIKKworIyMjIyBhY2Nlc3Nsb2cgbW9kdWxlCithY2Nlc3Nsb2cuZmlsZW5hbWUgICAgICAgICAgPSAiL3d3dy9sb2dzL2FjY2Vzcy5sb2ciCitkZWJ1Zy5sb2ctcmVxdWVzdC1oYW5kbGluZyA9ICJlbmFibGUiCisKKworCisKKyMjIGRlbnkgYWNjZXNzIHRoZSBmaWxlLWV4dGVuc2lvbnMKKyMKKyMgfiAgICBpcyBmb3IgYmFja3VwZmlsZXMgZnJvbSB2aSwgZW1hY3MsIGpvZSwgLi4uCisjIC5pbmMgaXMgb2Z0ZW4gdXNlZCBmb3IgY29kZSBpbmNsdWRlcyB3aGljaCBzaG91bGQgaW4gZ2VuZXJhbCBub3QgYmUgcGFydAorIyAgICAgIG9mIHRoZSBkb2N1bWVudC1yb290Cit1cmwuYWNjZXNzLWRlbnkgICAgICAgICAgICAgPSAoICJ+IiwgIi5pbmMiICkKKworJEhUVFBbInVybCJdID1+ICJcLnBkZiQiIHsKKyAgc2VydmVyLnJhbmdlLXJlcXVlc3RzID0gImRpc2FibGUiCit9CisKKyMjCisjIHdoaWNoIGV4dGVuc2lvbnMgc2hvdWxkIG5vdCBiZSBoYW5kbGUgdmlhIHN0YXRpYy1maWxlIHRyYW5zZmVyCisjCisjIC5waHAsIC5wbCwgLmZjZ2kgYXJlIG1vc3Qgb2Z0ZW4gaGFuZGxlZCBieSBtb2RfZmFzdGNnaSBvciBtb2RfY2dpCitzdGF0aWMtZmlsZS5leGNsdWRlLWV4dGVuc2lvbnMgPSAoICIucGhwIiwgIi5wbCIsICIuZmNnaSIgKQorCisjIyMjIyMjIyMgT3B0aW9ucyB0aGF0IGFyZSBnb29kIHRvIGJlIGJ1dCBub3QgbmVjY2VzYXJ5IHRvIGJlIGNoYW5nZWQgIyMjIyMjIworCisjIyBiaW5kIHRvIHBvcnQgKGRlZmF1bHQ6IDgwKQorI3NlcnZlci5wb3J0ICAgICAgICAgICAgICAgID0gODEKKworIyMgYmluZCB0byBsb2NhbGhvc3QgKGRlZmF1bHQ6IGFsbCBpbnRlcmZhY2VzKQorI3NlcnZlci5iaW5kICAgICAgICAgICAgICAgID0gImdyaXN1LmhvbWUua25lc2Noa2UuZGUiCisKKyMjIGVycm9yLWhhbmRsZXIgZm9yIHN0YXR1cyA0MDQKKyNzZXJ2ZXIuZXJyb3ItaGFuZGxlci00MDQgICA9ICIvZXJyb3ItaGFuZGxlci5odG1sIgorI3NlcnZlci5lcnJvci1oYW5kbGVyLTQwNCAgID0gIi9lcnJvci1oYW5kbGVyLnBocCIKKworIyMgdG8gaGVscCB0aGUgcmMuc2NyaXB0cworI3NlcnZlci5waWQtZmlsZSAgICAgICAgICAgID0gIi92YXIvcnVuL2xpZ2h0dHBkLnBpZCIKKworCisjIyMjIyMgdmlydHVhbCBob3N0cworIyMKKyMjICBJZiB5b3Ugd2FudCBuYW1lLWJhc2VkIHZpcnR1YWwgaG9zdGluZyBhZGQgdGhlIG5leHQgdGhyZWUgc2V0dGluZ3MgYW5kIGxvYWQKKyMjICBtb2Rfc2ltcGxlX3Zob3N0CisjIworIyMgZG9jdW1lbnQtcm9vdCA9CisjIyAgIHZpcnR1YWwtc2VydmVyLXJvb3QgKyB2aXJ0dWFsLXNlcnZlci1kZWZhdWx0LWhvc3QgKyB2aXJ0dWFsLXNlcnZlci1kb2Nyb290CisjIyBvcgorIyMgICB2aXJ0dWFsLXNlcnZlci1yb290ICsgaHR0cC1ob3N0ICsgdmlydHVhbC1zZXJ2ZXItZG9jcm9vdAorIyMKKyNzaW1wbGUtdmhvc3Quc2VydmVyLXJvb3QgICA9ICIvaG9tZS93ZWlnb24vd3d3cm9vdC9zZXJ2ZXJzLyIKKyNzaW1wbGUtdmhvc3QuZGVmYXVsdC1ob3N0ICA9ICJncmlzdS5ob21lLmtuZXNjaGtlLmRlIgorI3NpbXBsZS12aG9zdC5kb2N1bWVudC1yb290ID0gIi9wYWdlcy8iCisKKworIyMKKyMjIEZvcm1hdDogPGVycm9yZmlsZS1wcmVmaXg+PHN0YXR1cy1jb2RlPi5odG1sCisjIyAtPiAuLi4uL3N0YXR1cy00MDQuaHRtbCBmb3IgJ0ZpbGUgbm90IGZvdW5kJworI3NlcnZlci5lcnJvcmZpbGUtcHJlZml4ICAgID0gIi9ob21lL3dlaWdvbi9wcm9qZWN0cy9saWdodHRwZC9kb2Mvc3RhdHVzLSIKKworIyMgdmlydHVhbCBkaXJlY3RvcnkgbGlzdGluZ3MKKyNkaXItbGlzdGluZy5hY3RpdmF0ZSAgICAgICA9ICJlbmFibGUiCisKKyMjIGVuYWJsZSBkZWJ1Z2dpbmcKKyNkZWJ1Zy5sb2ctcmVxdWVzdC1oZWFkZXIgICA9ICJlbmFibGUiCisjZGVidWcubG9nLXJlc3BvbnNlLWhlYWRlciAgPSAiZW5hYmxlIgorI2RlYnVnLmxvZy1yZXF1ZXN0LWhhbmRsaW5nID0gImVuYWJsZSIKKyNkZWJ1Zy5sb2ctZmlsZS1ub3QtZm91bmQgICA9ICJlbmFibGUiCisKKyMjIyBvbmx5IHJvb3QgY2FuIHVzZSB0aGVzZSBvcHRpb25zCisjCisjIGNocm9vdCgpIHRvIGRpcmVjdG9yeSAoZGVmYXVsdDogbm8gY2hyb290KCkgKQorI3NlcnZlci5jaHJvb3QgICAgICAgICAgICAgID0gIi8iCisKKyMjIGNoYW5nZSB1aWQgdG8gPHVpZD4gKGRlZmF1bHQ6IGRvbid0IGNhcmUpCisjc2VydmVyLnVzZXJuYW1lICAgICAgICAgICAgPSAid3d3cnVuIgorCisjIyBjaGFuZ2UgdWlkIHRvIDx1aWQ+IChkZWZhdWx0OiBkb24ndCBjYXJlKQorI3NlcnZlci5ncm91cG5hbWUgICAgICAgICAgID0gInd3d3J1biIKKworIyMjIyBjb21wcmVzcyBtb2R1bGUKKyNjb21wcmVzcy5jYWNoZS1kaXIgICAgICAgICA9ICIvdG1wL2xpZ2h0dHBkL2NhY2hlL2NvbXByZXNzLyIKKyNjb21wcmVzcy5maWxldHlwZSAgICAgICAgICA9ICgidGV4dC9wbGFpbiIsICJ0ZXh0L2h0bWwiKQorCisjIyMjIHByb3h5IG1vZHVsZQorIyMgcmVhZCBwcm94eS50eHQgZm9yIG1vcmUgaW5mbworI3Byb3h5LnNlcnZlciAgICAgICAgICAgICAgID0gKCAiLnBocCIgPT4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAibG9jYWxob3N0IiA9PgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob3N0IiA9PiAiMTkyLjE2OC4wLjEwMSIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9ydCIgPT4gODAKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworIyMjIyBmYXN0Y2dpIG1vZHVsZQorIyMgcmVhZCBmYXN0Y2dpLnR4dCBmb3IgbW9yZSBpbmZvCisjIyBmb3IgUEhQIGRvbid0IGZvcmdldCB0byBzZXQgY2dpLmZpeF9wYXRoaW5mbyA9IDEgaW4gdGhlIHBocC5pbmkKKyNmYXN0Y2dpLnNlcnZlciAgICAgICAgICAgICA9ICggIi5waHAiID0+CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggImxvY2FsaG9zdCIgPT4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic29ja2V0IiA9PiAiL3RtcC9waHAtZmFzdGNnaS5zb2NrZXQiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJpbi1wYXRoIiA9PiAiL3Vzci9sb2NhbC9iaW4vcGhwIgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyMjIyMgQ0dJIG1vZHVsZQorI2NnaS5hc3NpZ24gICAgICAgICAgICAgICAgID0gKCAiLnBsIiAgPT4gIi91c3IvYmluL3BlcmwiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLmNnaSIgPT4gIi91c3IvYmluL3BlcmwiICkKKyMKKworIyMjIyBTU0wgZW5naW5lCisjc3NsLmVuZ2luZSAgICAgICAgICAgICAgICAgPSAiZW5hYmxlIgorI3NzbC5wZW1maWxlICAgICAgICAgICAgICAgID0gInNlcnZlci5wZW0iCisKKyMjIyMgc3RhdHVzIG1vZHVsZQorI3N0YXR1cy5zdGF0dXMtdXJsICAgICAgICAgID0gIi9zZXJ2ZXItc3RhdHVzIgorI3N0YXR1cy5jb25maWctdXJsICAgICAgICAgID0gIi9zZXJ2ZXItY29uZmlnIgorCisjIyMjIGF1dGggbW9kdWxlCisjIyByZWFkIGF1dGhlbnRpY2F0aW9uLnR4dCBmb3IgbW9yZSBpbmZvCisjYXV0aC5iYWNrZW5kICAgICAgICAgICAgICAgPSAicGxhaW4iCisjYXV0aC5iYWNrZW5kLnBsYWluLnVzZXJmaWxlID0gImxpZ2h0dHBkLnVzZXIiCisjYXV0aC5iYWNrZW5kLnBsYWluLmdyb3VwZmlsZSA9ICJsaWdodHRwZC5ncm91cCIKKworI2F1dGguYmFja2VuZC5sZGFwLmhvc3RuYW1lID0gImxvY2FsaG9zdCIKKyNhdXRoLmJhY2tlbmQubGRhcC5iYXNlLWRuICA9ICJkYz1teS1kb21haW4sZGM9Y29tIgorI2F1dGguYmFja2VuZC5sZGFwLmZpbHRlciAgID0gIih1aWQ9JCkiCisKKyNhdXRoLnJlcXVpcmUgICAgICAgICAgICAgICA9ICggIi9zZXJ2ZXItc3RhdHVzIiA9PgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGhvZCIgID0+ICJkaWdlc3QiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFsbSIgICA9PiAiZG93bmxvYWQgYXJjaGl2IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZSIgPT4gInVzZXI9amFuIgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL3NlcnZlci1jb25maWciID0+CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0aG9kIiAgPT4gImRpZ2VzdCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWxtIiAgID0+ICJkb3dubG9hZCBhcmNoaXYiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlIiA9PiAidmFsaWQtdXNlciIKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisjIyMjIHVybCBoYW5kbGluZyBtb2R1bGVzIChyZXdyaXRlLCByZWRpcmVjdCwgYWNjZXNzKQorI3VybC5yZXdyaXRlICAgICAgICAgICAgICAgID0gKCAiXi8kIiAgICAgICAgICAgICA9PiAiL3NlcnZlci1zdGF0dXMiICkKKyN1cmwucmVkaXJlY3QgICAgICAgICAgICAgICA9ICggIl4vd2lzaGxpc3QvKC4rKSIgPT4gImh0dHA6Ly93d3cuMTIzLm9yZy8kMSIgKQorCisjIyMjIGJvdGggcmV3cml0ZS9yZWRpcmVjdCBzdXBwb3J0IGJhY2sgcmVmZXJlbmNlIHRvIHJlZ2V4IGNvbmRpdGlvbmFsIHVzaW5nICVuCisjJEhUVFBbImhvc3QiXSA9fiAiXnd3d1wuKC4qKSIgeworIyAgdXJsLnJlZGlyZWN0ICAgICAgICAgICAgPSAoICJeLyguKikiID0+ICJodHRwOi8vJTEvJDEiICkKKyN9CisKKyMKKyMgZGVmaW5lIGEgcGF0dGVybiBmb3IgdGhlIGhvc3QgdXJsIGZpbmRpbmcKKyMgJSUgPT4gJSBzaWduCisjICUwID0+IGRvbWFpbiBuYW1lICsgdGxkCisjICUxID0+IHRsZAorIyAlMiA9PiBkb21haW4gbmFtZSB3aXRob3V0IHRsZAorIyAlMyA9PiBzdWJkb21haW4gMSBuYW1lCisjICU0ID0+IHN1YmRvbWFpbiAyIG5hbWUKKyMKKyNldmhvc3QucGF0aC1wYXR0ZXJuICAgICAgICA9ICIvaG9tZS9zdG9yYWdlL2Rldi93d3cvJTMvaHRkb2NzLyIKKworIyMjIyBleHBpcmUgbW9kdWxlCisjZXhwaXJlLnVybCAgICAgICAgICAgICAgICAgPSAoICIvYnVnZ3kvIiA9PiAiYWNjZXNzIDIgaG91cnMiLCAiL2FzZGhhcy8iID0+ICJhY2Nlc3MgcGx1cyAxIHNlY29uZHMgMiBtaW51dGVzIikKKworIyMjIyBzc2kKKyNzc2kuZXh0ZW5zaW9uICAgICAgICAgICAgICA9ICggIi5zaHRtbCIgKQorCisjIyMjIHJyZHRvb2wKKyNycmR0b29sLmJpbmFyeSAgICAgICAgICAgICA9ICIvdXNyL2Jpbi9ycmR0b29sIgorI3JyZHRvb2wuZGItbmFtZSAgICAgICAgICAgID0gIi92YXIvd3d3L2xpZ2h0dHBkLnJyZCIKKworIyMjIyBzZXRlbnYKKyNzZXRlbnYuYWRkLXJlcXVlc3QtaGVhZGVyICA9ICggIlRSQVZfRU5WIiA9PiAibXlzcWw6Ly91c2VyQGhvc3QvZGIiICkKKyNzZXRlbnYuYWRkLXJlc3BvbnNlLWhlYWRlciA9ICggIlgtU2VjcmV0LU1lc3NhZ2UiID0+ICI0MiIgKQorCisjIyBmb3IgbW9kX3RyaWdnZXJfYjRfZGwKKyMgdHJpZ2dlci1iZWZvcmUtZG93bmxvYWQuZ2RibS1maWxlbmFtZSA9ICIvaG9tZS93ZWlnb24vdGVzdGJhc2UvdHJpZ2dlci5kYiIKKyMgdHJpZ2dlci1iZWZvcmUtZG93bmxvYWQubWVtY2FjaGUtaG9zdHMgPSAoICIxMjcuMC4wLjE6MTEyMTEiICkKKyMgdHJpZ2dlci1iZWZvcmUtZG93bmxvYWQudHJpZ2dlci11cmwgPSAiXi90cmlnZ2VyLyIKKyMgdHJpZ2dlci1iZWZvcmUtZG93bmxvYWQuZG93bmxvYWQtdXJsID0gIl4vZG93bmxvYWQvIgorIyB0cmlnZ2VyLWJlZm9yZS1kb3dubG9hZC5kZW55LXVybCA9ICJodHRwOi8vMTI3LjAuMC4xL2luZGV4Lmh0bWwiCisjIHRyaWdnZXItYmVmb3JlLWRvd25sb2FkLnRyaWdnZXItdGltZW91dCA9IDEwCisKKyMjIGZvciBtb2RfY21sCisjIyBkb24ndCBmb3JnZXQgdG8gYWRkIGluZGV4LmNtbCB0byBzZXJ2ZXIuaW5kZXhmaWxlcworIyBjbWwuZXh0ZW5zaW9uICAgICAgICAgICAgICAgPSAiLmNtbCIKKyMgY21sLm1lbWNhY2hlLWhvc3RzICAgICAgICAgID0gKCAiMTI3LjAuMC4xOjExMjExIiApCisKKyMjIyMgdmFyaWFibGUgdXNhZ2U6CisjIyB2YXJpYWJsZSBuYW1lIHdpdGhvdXQgIi4iIGlzIGF1dG8gcHJlZml4ZWQgYnkgInZhci4iIGFuZCBiZWNvbWVzICJ2YXIuYmFyIgorI2JhciA9IDEKKyN2YXIubXlzdHJpbmcgPSAiZm9vIgorCisjIyBpbnRlZ2VyIGFkZAorI2JhciArPSAxCisjIyBzdHJpbmcgY29uY2F0LCB3aXRoIGludGVnZXIgY2FzdCBhcyBzdHJpbmcsIHJlc3VsdDogInd3dy5mb28xLmNvbSIKKyNzZXJ2ZXIubmFtZSA9ICJ3d3cuIiArIG15c3RyaW5nICsgdmFyLmJhciArICIuY29tIgorIyMgYXJyYXkgbWVyZ2UKKyNpbmRleC1maWxlLm5hbWVzID0gKGZvbyArICIucGhwIikgKyBpbmRleC1maWxlLm5hbWVzCisjaW5kZXgtZmlsZS5uYW1lcyArPSAoZm9vICsgIi5waHAiKQorCisjIyMjIGluY2x1ZGUKKyNpbmNsdWRlIC9ldGMvbGlnaHR0cGQvbGlnaHR0cGQtaW5jLmNvbmYKKyMjIHNhbWUgYXMgYWJvdmUgaWYgeW91IHJ1bjogImxpZ2h0dHBkIC1mIC9ldGMvbGlnaHR0cGQvbGlnaHR0cGQuY29uZiIKKyNpbmNsdWRlICJsaWdodHRwZC1pbmMuY29uZiIKKworIyMjIyBpbmNsdWRlX3NoZWxsCisjaW5jbHVkZV9zaGVsbCAiZWNobyB2YXIuYT0xIgorIyMgdGhlIGFib3ZlIGlzIHNhbWUgYXM6CisjdmFyLmE9MQorCisjIGluY2x1ZGUgb3RoZXIgY29uZmlnIGZpbGUgZnJhZ21lbnRzIGZyb20gbGlnaHR0cGQuZCBzdWJkaXIKK2luY2x1ZGVfc2hlbGwgImZpbmQgL2V0Yy9saWdodHRwZC5kIC1tYXhkZXB0aCAxIC1uYW1lICcqLmNvbmYnIC1leGVjIGNhdCB7fSBcOyIgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmE5MDdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQuc2VydmljZQpAQCAtMCwwICsxLDEyIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPUxpZ2h0bmluZyBGYXN0IFdlYnNlcnZlciBXaXRoIExpZ2h0IFN5c3RlbSBSZXF1aXJlbWVudHMKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0UHJlPUBTQklORElSQC9saWdodHRwZCAtdCAtZiBAU1lTQ09ORkRJUkAvbGlnaHR0cGQuY29uZgorRXhlY1N0YXJ0PUBTQklORElSQC9saWdodHRwZCAtRCAtZiBAU1lTQ09ORkRJUkAvbGlnaHR0cGQuY29uZgorRXhlY1JlbG9hZD1AQkFTRV9CSU5ESVJAL2tpbGwgLUhVUCAkTUFJTlBJRAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL3BrZ2NvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzk1ZjkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1VzZSBwa2ctY29uZmlnIGZvciBwY3JlIGRlcGVuZGVuY3kgaW5zdGVhZCBvZiAtY29uZmlnIHNjcmlwdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTQvNS8yMgorCisKK0luZGV4OiBsaWdodHRwZC0xLjQuMzUvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlnaHR0cGQtMS40LjM1Lm9yaWcvY29uZmlndXJlLmFjCTIwMTQtMDMtMDYgMTQ6MDg6MDAuMDAwMDAwMDAwICswMDAwCisrKysgbGlnaHR0cGQtMS40LjM1L2NvbmZpZ3VyZS5hYwkyMDE0LTA1LTEzIDE2OjU4OjMwLjc1ODQ3MTE2OSArMDAwMAorQEAgLTMwOSwxNiArMzA5LDE0IEBACisgQUNfTVNHX1JFU1VMVChbJFdJVEhfUENSRV0pCisgCisgaWYgdGVzdCAiJFdJVEhfUENSRSIgIT0gIm5vIjsgdGhlbgorLSAgQUNfUEFUSF9QUk9HKFBDUkVDT05GSUcsIHBjcmUtY29uZmlnKQorLQorLSAgaWYgdGVzdCB4IiRQQ1JFQ09ORklHIiAhPSB4OyB0aGVuCistICAgIFBDUkVfTElCPWAkUENSRUNPTkZJRyAtLWxpYnNgCistICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgYCRQQ1JFQ09ORklHIC0tY2ZsYWdzYCIKKysgIFBLR19DSEVDS19NT0RVTEVTKFBDUkVQS0csIFtsaWJwY3JlXSwgWworKyAgICBQQ1JFX0xJQj0ke1BDUkVQS0dfTElCU30KKysgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAke1BDUkVQS0dfQ0ZMQUdTfSIKKyAgICAgQUNfREVGSU5FKFtIQVZFX0xJQlBDUkVdLCBbMV0sIFtsaWJwY3JlXSkKKyAgICAgQUNfREVGSU5FKFtIQVZFX1BDUkVfSF0sIFsxXSwgW3BjcmUuaF0pCistICBlbHNlCisrICBdLCBbCisgICAgICBBQ19NU0dfRVJST1IoW3BjcmUtY29uZmlnIG5vdCBmb3VuZCwgaW5zdGFsbCB0aGUgcGNyZS1kZXZlbCBwYWNrYWdlIG9yIGJ1aWxkIHdpdGggLS13aXRob3V0LXBjcmVdKQorLSAgZmkKKysgIF0pCisgZmkKKyAKKyBBQ19TVUJTVChQQ1JFX0xJQikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkXzEuNC4zNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkXzEuNC4zNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2I2ZTM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGRfMS40LjM2LmJiCkBAIC0wLDAgKzEsNzcgQEAKK1NVTU1BUlkgPSAiTGlnaHR3ZWlnaHQgaGlnaC1wZXJmb3JtYW5jZSB3ZWIgc2VydmVyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saWdodHRwZC5uZXQvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vcmVkbWluZS5saWdodHRwZC5uZXQvcHJvamVjdHMvbGlnaHR0cGQvaXNzdWVzIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU0ZGFjNWM2YWIxNjlhYTIxMmZlYjUwMjg4NTNhNTc5IgorCitTRUNUSU9OID0gIm5ldCIKK0RFUEVORFMgPSAiemxpYiBsaWJwY3JlIgorUkRFUEVORFNfJHtQTn0gKz0gIiBcCisgICAgICAgICAgICAgICBsaWdodHRwZC1tb2R1bGUtYWNjZXNzIFwKKyAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1hY2Nlc3Nsb2cgXAorICAgICAgICAgICAgICAgbGlnaHR0cGQtbW9kdWxlLWluZGV4ZmlsZSBcCisgICAgICAgICAgICAgICBsaWdodHRwZC1tb2R1bGUtZGlybGlzdGluZyBcCisgICAgICAgICAgICAgICBsaWdodHRwZC1tb2R1bGUtc3RhdGljZmlsZSBcCisiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLmxpZ2h0dHBkLm5ldC9saWdodHRwZC9yZWxlYXNlcy0xLjQueC9saWdodHRwZC0ke1BWfS50YXIueHogXAorICAgICAgICBmaWxlOi8vaW5kZXguaHRtbC5saWdodHRwZCBcCisgICAgICAgIGZpbGU6Ly9saWdodHRwZC5jb25mIFwKKyAgICAgICAgZmlsZTovL2xpZ2h0dHBkIFwKKyAgICAgICAgZmlsZTovL2xpZ2h0dHBkLnNlcnZpY2UgXAorICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtbW9kX2NnaS1idWZmZXJzLWRhdGEtd2l0aG91dC1ib3VuZC5wYXRjaCBcCisgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjE4NDNkYWZmY2IwMThhYTUyOGY2ZDE1ZDQzNTQ0NjU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg5N2FiNmIxY2M3YmQ1MTY3MWY4YWY3NTllNzg0NjI0NWZiYmNhMDY4NWMzMDAxN2U5M2E1ODgyYTlhYzFhNTMiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJvcGVuc3NsIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLXdpdGgtb3BlbnNzbCwgLS13aXRob3V0LW9wZW5zc2wsIG9wZW5zc2wiCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgICAgICAgICAgIC0td2l0aG91dC1iemlwMiBcCisgICAgICAgICAgICAgLS13aXRob3V0LWxkYXAgXAorICAgICAgICAgICAgIC0td2l0aG91dC1sdWEgXAorICAgICAgICAgICAgIC0td2l0aG91dC1tZW1jYWNoZSBcCisgICAgICAgICAgICAgLS13aXRoLXBjcmUgXAorICAgICAgICAgICAgIC0td2l0aG91dC13ZWJkYXYtcHJvcHMgXAorICAgICAgICAgICAgIC0td2l0aG91dC13ZWJkYXYtbG9ja3MgXAorICAgICAgICAgICAgIC0tZGlzYWJsZS1zdGF0aWMgXAorIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgZ2V0dGV4dCBzeXN0ZW1kCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJsaWdodHRwZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIDcwIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAibGlnaHR0cGQuc2VydmljZSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQgJHtEfSR7c3lzY29uZmRpcn0vbGlnaHR0cGQuZCAke0R9L3d3dy9wYWdlcy9kYXYKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9saWdodHRwZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9saWdodHRwZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaW5kZXguaHRtbC5saWdodHRwZCAke0R9L3d3dy9wYWdlcy9pbmRleC5odG1sCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbGlnaHR0cGQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJCS1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2xpZ2h0dHBkLnNlcnZpY2UKKwkjRm9yIEZIUyBjb21wbGlhbmNlLCBjcmVhdGUgc3ltYm9saWMgbGlua3MgdG8gL3Zhci9sb2cgYW5kIC92YXIvdG1wIGZvciBsb2dzIGFuZCB0ZW1wb3JhcnkgZGF0YQorCWxuIC1zZiAke2xvY2Fsc3RhdGVkaXJ9L2xvZyAke0R9L3d3dy9sb2dzCisJbG4gLXNmICR7bG9jYWxzdGF0ZWRpcn0vdG1wICR7RH0vd3d3L3ZhcgorfQorCitGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfSAvd3d3IgorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9saWdodHRwZC5jb25mIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJebGlnaHR0cGQtbW9kdWxlLS4qIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgbGlnaHR0cGRfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfScpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgbGlnaHR0cGRfbGliZGlyLCAnXm1vZF8oLiopXC5zbyQnLCAnbGlnaHR0cGQtbW9kdWxlLSVzJywgJ0xpZ2h0dHBkIG1vZHVsZSBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS9hY3QtYXMtbXYtd2hlbi1yb3RhdGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlL2FjdC1hcy1tdi13aGVuLXJvdGF0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTkzMWEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS9hY3QtYXMtbXYtd2hlbi1yb3RhdGUucGF0Y2gKQEAgLTAsMCArMSwxNDcgQEAKK0Zyb20gNjhmMjlhYjQ5MGNmOTg3YWEzNGI1ZjRjYWYxNzg0YjU4YTAyMTMwOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxNyBGZWIgMjAxNSAyMTowODowNyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBBY3QgYXMgdGhlICJtdiIgY29tbWFuZCB3aGVuIHJvdGF0ZSBsb2cKKworQWN0IGFzIHRoZSAibXYiIGNvbW1hbmQgd2hlbiByb3RhdGUgbG9nLCBmaXJzdCByZW5hbWUsIGlmIGZhaWxlZCwgdGhlbgorcmVhZCBhbmQgd3JpdGUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxvZ3JvdGF0ZS5jIHwgICA3MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1OSBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xvZ3JvdGF0ZS5jIGIvbG9ncm90YXRlLmMKK2luZGV4IGQzZGViNmEuLmNmOGJmMmMgMTAwNjQ0CistLS0gYS9sb2dyb3RhdGUuYworKysrIGIvbG9ncm90YXRlLmMKK0BAIC0xMTU3LDYgKzExNTcsNTMgQEAgaW50IGZpbmROZWVkUm90YXRpbmcoc3RydWN0IGxvZ0luZm8gKmxvZywgaW50IGxvZ051bSwgaW50IGZvcmNlKQorICAgICByZXR1cm4gMDsKKyB9CisgCisrLyogQWN0IGFzIHRoZSAibXYiIGNvbW1hbmQsIGlmIHJlbmFtZSBmYWlsZWQsIHRoZW4gcmVhZCB0aGUgb2xkIGZpbGUgYW5kCisrICogd3JpdGUgdG8gbmV3IGZpbGUuIFRoZSBmdW5jdGlvbiB3aGljaCBpbnZva2VzIHRoZSBtdkZpbGUgd2lsbCB1c2UKKysgKiB0aGUgc3RyZXJyb3IoZXJyb3JubykgdG8gaGFuZGxlIHRoZSBlcnJvciBtZXNzYWdlLCBzbyB3ZSBkb24ndCBoYXZlCisrICogdG8gcHJpbnQgdGhlIGVycm9yIG1lc3NhZ2UgaGVyZSAqLworKworK2ludCBtdkZpbGUgKGNoYXIgKm9sZE5hbWUsIGNoYXIgKm5ld05hbWUsIHN0cnVjdCBsb2dJbmZvICpsb2csIGFjbF90eXBlIGFjbCkKKyt7CisrICAgIHN0cnVjdCBzdGF0IHNicHJldjsKKysgICAgaW50IGZkX29sZCwgZmRfbmV3LCBuOworKyAgICBjaGFyIGJ1ZltCVUZTSVpdOworKworKyAgICAvKiBEbyB0aGUgcmVuYW1lIGZpcnN0ICovCisrICAgIGlmICghcmVuYW1lKG9sZE5hbWUsIG5ld05hbWUpKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgIC8qIElmIHRoZSBlcnJubyBpcyBFWERFViwgdGhlbiByZWFkIG9sZCBmaWxlLCB3cml0ZSBuZXdmaWxlIGFuZAorKyAgICAgKiByZW1vdmUgdGhlIG9sZGZpbGUgKi8KKysgICAgaWYgKGVycm5vID09IEVYREVWKSB7CisrICAgICAgICAvKiBPcGVuIHRoZSBvbGQgZmlsZSB0byByZWFkICovCisrICAgICAgICBpZiAoKGZkX29sZCA9IG9wZW4ob2xkTmFtZSwgT19SRE9OTFkpKSA8IDApCisrICAgICAgICAgICAgcmV0dXJuIDE7CisrCisrICAgICAgICAvKiBDcmVhdGUgdGhlIGZpbGUgdG8gd3JpdGUsIGtlZXAgdGhlIHNhbWUgYXR0cmlidXRlIGFzIHRoZSBvbGQgZmlsZSAqLworKyAgICAgICAgaWYgKHN0YXQob2xkTmFtZSwgJnNicHJldikpCisrICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBpZiAoKGZkX25ldyA9IGNyZWF0ZU91dHB1dEZpbGUobmV3TmFtZSwKKysgICAgICAgICAgICAgICAgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgJnNicHJldiwgYWNsLCAwKSkgPCAwICkKKysgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICB9CisrCisrICAgICAgICAvKiBSZWFkIGFuZCB3cml0ZSAqLworKyAgICAgICAgd2hpbGUgKChuID0gcmVhZChmZF9vbGQsIGJ1ZiwgQlVGU0laKSkgPiAwKQorKyAgICAgICAgICAgIGlmICh3cml0ZShmZF9uZXcsIGJ1ZiwgbikgIT0gbikKKysgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisrCisrICAgICAgICBpZiAoKGNsb3NlKGZkX29sZCkgPCAwKSB8fAorKyAgICAgICAgICAgIHJlbW92ZUxvZ0ZpbGUob2xkTmFtZSwgbG9nKSB8fAorKyAgICAgICAgICAgIChjbG9zZShmZF9uZXcpIDwgMCkpCisrICAgICAgICAgICAgcmV0dXJuIDE7CisrCisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgICByZXR1cm4gMTsKKyt9CisrCisgaW50IHByZXJvdGF0ZVNpbmdsZUxvZyhzdHJ1Y3QgbG9nSW5mbyAqbG9nLCBpbnQgbG9nTnVtLCBzdHJ1Y3QgbG9nU3RhdGUgKnN0YXRlLAorIAkJICAgICAgIHN0cnVjdCBsb2dOYW1lcyAqcm90TmFtZXMpCisgeworQEAgLTE1MjMsMTUgKzE1NzAsMTUgQEAgaW50IHByZXJvdGF0ZVNpbmdsZUxvZyhzdHJ1Y3QgbG9nSW5mbyAqbG9nLCBpbnQgbG9nTnVtLCBzdHJ1Y3QgbG9nU3RhdGUgKnN0YXRlLAorIAkJfQorIAorIAkgICAgbWVzc2FnZShNRVNTX0RFQlVHLAorLQkJICAgICJyZW5hbWluZyAlcyB0byAlcyAocm90YXRlY291bnQgJWQsIGxvZ3N0YXJ0ICVkLCBpICVkKSwgXG4iLAorKwkJICAgICJtb3ZpbmcgJXMgdG8gJXMgKHJvdGF0ZWNvdW50ICVkLCBsb2dzdGFydCAlZCwgaSAlZCksIFxuIiwKKyAJCSAgICBvbGROYW1lLCBuZXdOYW1lLCByb3RhdGVDb3VudCwgbG9nU3RhcnQsIGkpOworIAorLQkgICAgaWYgKCFkZWJ1ZyAmJiByZW5hbWUob2xkTmFtZSwgbmV3TmFtZSkpIHsKKysJICAgIGlmICghZGVidWcgJiYgbXZGaWxlKG9sZE5hbWUsIG5ld05hbWUsIGxvZywgcHJldl9hY2wpKSB7CisgCQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisgCQkgICAgbWVzc2FnZShNRVNTX0RFQlVHLCAib2xkIGxvZyAlcyBkb2VzIG5vdCBleGlzdFxuIiwKKyAJCQkgICAgb2xkTmFtZSk7CisgCQl9IGVsc2UgeworLQkJICAgIG1lc3NhZ2UoTUVTU19FUlJPUiwgImVycm9yIHJlbmFtaW5nICVzIHRvICVzOiAlc1xuIiwKKysJCSAgICBtZXNzYWdlKE1FU1NfRVJST1IsICJlcnJvciBtb3ZpbmcgJXMgdG8gJXM6ICVzXG4iLAorIAkJCSAgICBvbGROYW1lLCBuZXdOYW1lLCBzdHJlcnJvcihlcnJubykpOworIAkJICAgIGhhc0Vycm9ycyA9IDE7CisgCQl9CitAQCAtMTY2OSwyMSArMTcxNiwyMSBAQCBpbnQgcm90YXRlU2luZ2xlTG9nKHN0cnVjdCBsb2dJbmZvICpsb2csIGludCBsb2dOdW0sIHN0cnVjdCBsb2dTdGF0ZSAqc3RhdGUsCisgCQkJCXJldHVybiAxOworIAkJCX0KKyAKKy0JCQltZXNzYWdlKE1FU1NfREVCVUcsICJyZW5hbWluZyAlcyB0byAlc1xuIiwgbG9nLT5maWxlc1tsb2dOdW1dLAorKwkJCW1lc3NhZ2UoTUVTU19ERUJVRywgIm1vdmluZyAlcyB0byAlc1xuIiwgbG9nLT5maWxlc1tsb2dOdW1dLAorIAkJCQl0bXBGaWxlbmFtZSk7CistCQkJaWYgKCFkZWJ1ZyAmJiAhaGFzRXJyb3JzICYmIHJlbmFtZShsb2ctPmZpbGVzW2xvZ051bV0sIHRtcEZpbGVuYW1lKSkgeworLQkJCW1lc3NhZ2UoTUVTU19FUlJPUiwgImZhaWxlZCB0byByZW5hbWUgJXMgdG8gJXM6ICVzXG4iLAorKwkJCWlmICghZGVidWcgJiYgIWhhc0Vycm9ycyAmJiBtdkZpbGUobG9nLT5maWxlc1tsb2dOdW1dLCByb3ROYW1lcy0+ZmluYWxOYW1lLCBsb2csIHByZXZfYWNsKSkgeworKwkJCW1lc3NhZ2UoTUVTU19FUlJPUiwgImZhaWxlZCB0byBtb3ZlICVzIHRvICVzOiAlc1xuIiwKKyAJCQkJbG9nLT5maWxlc1tsb2dOdW1dLCB0bXBGaWxlbmFtZSwKKyAJCQkJc3RyZXJyb3IoZXJybm8pKTsKKyAJCQkJaGFzRXJyb3JzID0gMTsKKyAJCQl9CisgCQl9CisgCQllbHNlIHsKKy0JCQltZXNzYWdlKE1FU1NfREVCVUcsICJyZW5hbWluZyAlcyB0byAlc1xuIiwgbG9nLT5maWxlc1tsb2dOdW1dLAorKwkJCW1lc3NhZ2UoTUVTU19ERUJVRywgIm1vdmluZyAlcyB0byAlc1xuIiwgbG9nLT5maWxlc1tsb2dOdW1dLAorIAkJCQlyb3ROYW1lcy0+ZmluYWxOYW1lKTsKKyAJCQlpZiAoIWRlYnVnICYmICFoYXNFcnJvcnMgJiYKKy0JCQlyZW5hbWUobG9nLT5maWxlc1tsb2dOdW1dLCByb3ROYW1lcy0+ZmluYWxOYW1lKSkgeworLQkJCQltZXNzYWdlKE1FU1NfRVJST1IsICJmYWlsZWQgdG8gcmVuYW1lICVzIHRvICVzOiAlc1xuIiwKKysJCQltdkZpbGUobG9nLT5maWxlc1tsb2dOdW1dLCByb3ROYW1lcy0+ZmluYWxOYW1lLCBsb2csIHByZXZfYWNsKSkgeworKwkJCQltZXNzYWdlKE1FU1NfRVJST1IsICJmYWlsZWQgdG8gbW92ZSAlcyB0byAlczogJXNcbiIsCisgCQkJCQlsb2ctPmZpbGVzW2xvZ051bV0sIHRtcEZpbGVuYW1lLAorIAkJCQkJc3RyZXJyb3IoZXJybm8pKTsKKyAJCQkJCWhhc0Vycm9ycyA9IDE7CitAQCAtMjA2Myw3ICsyMTEwLDcgQEAgaW50IHJvdGF0ZUxvZ1NldChzdHJ1Y3QgbG9nSW5mbyAqbG9nLCBpbnQgZm9yY2UpCisgICAgIHJldHVybiBoYXNFcnJvcnM7CisgfQorIAorLXN0YXRpYyBpbnQgd3JpdGVTdGF0ZShjaGFyICpzdGF0ZUZpbGVuYW1lKQorK3N0YXRpYyBpbnQgd3JpdGVTdGF0ZShzdHJ1Y3QgbG9nSW5mbyAqbG9nLCBjaGFyICpzdGF0ZUZpbGVuYW1lKQorIHsKKyAJc3RydWN0IGxvZ1N0YXRlICpwOworIAlGSUxFICpmOworQEAgLTIyMjcsNyArMjI3NCw3IEBAIHN0YXRpYyBpbnQgd3JpdGVTdGF0ZShjaGFyICpzdGF0ZUZpbGVuYW1lKQorIAkJZmNsb3NlKGYpOworIAorIAlpZiAoZXJyb3IgPT0gMCkgeworLQkJaWYgKHJlbmFtZSh0bXBGaWxlbmFtZSwgc3RhdGVGaWxlbmFtZSkpIHsKKysJCWlmIChtdkZpbGUodG1wRmlsZW5hbWUsIHN0YXRlRmlsZW5hbWUsIGxvZywgcHJldl9hY2wpKSB7CisgCQkJdW5saW5rKHRtcEZpbGVuYW1lKTsKKyAJCQllcnJvciA9IDE7CisgCQkJbWVzc2FnZShNRVNTX0VSUk9SLCAiZXJyb3IgcmVuYW1pbmcgdGVtcCBzdGF0ZSBmaWxlICVzXG4iLAorQEAgLTI1MjUsNyArMjU3Miw3IEBAIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKKyAJCXJjIHw9IHJvdGF0ZUxvZ1NldChsb2csIGZvcmNlKTsKKyAKKyAJaWYgKCFkZWJ1ZykKKy0JCXJjIHw9IHdyaXRlU3RhdGUoc3RhdGVGaWxlKTsKKysJCXJjIHw9IHdyaXRlU3RhdGUobG9nLCBzdGF0ZUZpbGUpOworIAorIAlyZXR1cm4gKHJjICE9IDApOworIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvZGlzYWJsZS1jaGVjay1kaWZmZXJlbnQtZmlsZXN5c3RlbXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlL2Rpc2FibGUtY2hlY2stZGlmZmVyZW50LWZpbGVzeXN0ZW1zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5M2Q3MDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlL2Rpc2FibGUtY2hlY2stZGlmZmVyZW50LWZpbGVzeXN0ZW1zLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Rpc2FibGUgdGhlIGNoZWNrIGZvciBkaWZmZXJlbnQgZmlsZXN5c3RlbXMKKworVGhlIGxvZ3JvdGF0ZSBzdXBwb3J0cyByb3RhdGUgbG9nIGFjcm9zcyBkaWZmZXJlbnQgZmlsZXN5c3RlbXMgbm93LCBzbworZGlzYWJsZSB0aGUgY2hlY2sgZm9yIGRpZmZlcmVudCBmaWxlc3lzdGVtcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlnLmMgfCAgICA5IC0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlnLmMgYi9jb25maWcuYworaW5kZXggZGJiZjU2My4uNjRlNjZmNiAxMDA2NDQKKy0tLSBhL2NvbmZpZy5jCisrKysgYi9jb25maWcuYworQEAgLTE0OTMsMTUgKzE0OTMsNiBAQCBzdGF0aWMgaW50IHJlYWRDb25maWdGaWxlKGNvbnN0IGNoYXIgKmNvbmZpZ0ZpbGUsIHN0cnVjdCBsb2dJbmZvICpkZWZDb25maWcpCisgCQkJCQkJCWdvdG8gZXJyb3I7CisgCQkJCQkJfQorIAkJCQkJfQorLQorLQkJCQkJaWYgKHNiLnN0X2RldiAhPSBzYjIuc3RfZGV2CistCQkJCQkJJiYgIShuZXdsb2ctPmZsYWdzICYgKExPR19GTEFHX0NPUFlUUlVOQ0FURSB8IExPR19GTEFHX0NPUFkgfCBMT0dfRkxBR19UTVBGSUxFTkFNRSkpKSB7CistCQkJCQkJbWVzc2FnZShNRVNTX0VSUk9SLAorLQkJCQkJCQkiJXM6JWQgb2xkZGlyICVzIGFuZCBsb2cgZmlsZSAlcyAiCistCQkJCQkJCSJhcmUgb24gZGlmZmVyZW50IGRldmljZXNcbiIsIGNvbmZpZ0ZpbGUsCistCQkJCQkJCWxpbmVOdW0sIG5ld2xvZy0+b2xkRGlyLCBuZXdsb2ctPmZpbGVzW2ldKTsKKy0JCQkJCQlnb3RvIGVycm9yOworLQkJCQkJfQorIAkJCQl9CisgCQkJfQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS91cGRhdGUtdGhlLW1hbnVhbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvdXBkYXRlLXRoZS1tYW51YWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkMDM3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvdXBkYXRlLXRoZS1tYW51YWwucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSBlMGIwZmUzMGU5YzQ5MjM0OTk0YTIwYTg2YWFjZmFmODBlNjkwMDg3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE3IEZlYiAyMDE1IDIxOjE0OjM3IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIFVwZGF0ZSB0aGUgbWFudWFsCisKK1VwZGF0ZSB0aGUgbWFudWFsIGZvciByb3RhdGluZyBvbiBkaWZmZXJlbnQgZmlsZXN5c3RlbXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxvZ3JvdGF0ZS44IHwgICAxMCArKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xvZ3JvdGF0ZS44IGIvbG9ncm90YXRlLjgKK2luZGV4IGU0ZTVmNDguLjg0NDA3ZDAgMTAwNjQ0CistLS0gYS9sb2dyb3RhdGUuOAorKysrIGIvbG9ncm90YXRlLjgKK0BAIC00MDUsMTIgKzQwNSwxMCBAQCBEbyBub3Qgcm90YXRlIHRoZSBsb2cgaWYgaXQgaXMgZW1wdHkgKHRoaXMgb3ZlcnJpZGVzIHRoZSBcZkJpZmVtcHR5XGZSIG9wdGlvbikuCisgCisgLlRQCisgXGZCb2xkZGlyIFxmSWRpcmVjdG9yeVxmUgorLUxvZ3MgYXJlIG1vdmVkIGludG8gXGZJZGlyZWN0b3J5XGZSIGZvciByb3RhdGlvbi4gVGhlIFxmSWRpcmVjdG9yeVxmUiBtdXN0IGJlCistb24gdGhlIHNhbWUgcGh5c2ljYWwgZGV2aWNlIGFzIHRoZSBsb2cgZmlsZSBiZWluZyByb3RhdGVkLCB1bmxlc3MgXGZCY29weVxmUiwKKy1cZkJjb3B5dHJ1bmNhdGVcZlIgb3IgXGZCcmVuYW1lY29weVxmUiBvcHRpb24gaXMgdXNlZC4gVGhlIFxmSWRpcmVjdG9yeVxmUgorLWlzIGFzc3VtZWQgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBob2xkaW5nIHRoZSBsb2cgZmlsZQorLXVubGVzcyBhbiBhYnNvbHV0ZSBwYXRoIG5hbWUgaXMgc3BlY2lmaWVkLiBXaGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQgYWxsCistb2xkIHZlcnNpb25zIG9mIHRoZSBsb2cgZW5kIHVwIGluIFxmSWRpcmVjdG9yeVxmUi4gIFRoaXMgb3B0aW9uIG1heSBiZQorK0xvZ3MgYXJlIG1vdmVkIGludG8gXGZJZGlyZWN0b3J5XGZSIGZvciByb3RhdGlvbi4gVGhlIFxmSWRpcmVjdG9yeVxmUgorK2lzIGFzc3VtZWQgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBob2xkaW5nIHRoZSBsb2cgZmlsZSB1bmxlc3MKKythbiBhYnNvbHV0ZSBwYXRoIG5hbWUgaXMgc3BlY2lmaWVkLiBXaGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQgYWxsIG9sZAorK3ZlcnNpb25zIG9mIHRoZSBsb2cgZW5kIHVwIGluIFxmSWRpcmVjdG9yeVxmUi4gVGhpcyBvcHRpb24gbWF5IGJlCisgb3ZlcnJpZGRlbiBieSB0aGUgXGZCbm9vbGRkaXJcZlIgb3B0aW9uLgorIAorIC5UUAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGVfMy45LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlXzMuOS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMGExNTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlXzMuOS4xLmJiCkBAIC0wLDAgKzEsNjMgQEAKK1NVTU1BUlkgPSAiUm90YXRlcywgY29tcHJlc3NlcywgcmVtb3ZlcyBhbmQgbWFpbHMgc3lzdGVtIGxvZyBmaWxlcyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9sb2dyb3RhdGUvIgorTElDRU5TRSA9ICJHUEx2MiIKKworIyBUT0RPOiBsb2dyb3RhdGUgMy44LjggYWRkcyBhdXRvdG9vbHMvYXV0b21ha2Ugc3VwcG9ydCwgdXBkYXRlIHJlY2lwZSB0byB1c2UgaXQuCisjIFRPRE86IERvY3VtZW50IGNvcmV1dGlscyBkZXBlbmRlbmN5LiBXaHkgbm90IFJERVBFTkRTPyBXaHkgbm90IGJ1c3lib3g/CisKK0RFUEVORFM9ImNvcmV1dGlscyBwb3B0IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xODgxMDY2OWYxM2I4NzM0ODQ1OWU2MTFkMzFhYjc2MCIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvbC9vL2xvZ3JvdGF0ZS9sb2dyb3RhdGUtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FjdC1hcy1tdi13aGVuLXJvdGF0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91cGRhdGUtdGhlLW1hbnVhbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLWNoZWNrLWRpZmZlcmVudC1maWxlc3lzdGVtcy5wYXRjaCBcCisgICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NDkyYjE0NWI2ZDU0MmU0YTJmNDFlNzdmYTE5OWFiMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMjI3NjllMzI4OGM4MDk4MTU1OWE4NDIxNzAzYzg4ZTg0MzhiNDQ3MjM1ZTM2ZGQzYzhlOTdjZDk0YzUyNTQ1IgorCitQQUNLQUdFQ09ORklHID89ICJcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhY2wnLCAnYWNsJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzZWxpbnV4JywgJ3NlbGludXgnLCAnJywgZCl9IFwKKyIKKworUEFDS0FHRUNPTkZJR1thY2xdID0gIiwsYWNsIgorUEFDS0FHRUNPTkZJR1tzZWxpbnV4XSA9ICIsLGxpYnNlbGludXgiCisKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtsb2NhbHN0YXRlZGlyfS9saWIvbG9ncm90YXRlLnN0YXR1cyBcCisJCSAgICAke3N5c2NvbmZkaXJ9L2xvZ3JvdGF0ZS5jb25mIgorCisjIElmIFJQTV9PUFRfRkxBR1MgaXMgdW5zZXQsIGl0IGFkZHMgLWcgaXRzZWxmIHJhdGhlciB0aGFuIG9iZXlpbmcgb3VyCisjIG9wdGltaXphdGlvbiB2YXJpYWJsZXMsIHNvIHVzZSBpdCByYXRoZXIgdGhhbiBFWFRSQV9DRkxBR1MuCitFWFRSQV9PRU1BS0UgPSAiXAorICAgIExGUz0gXAorICAgIE9TX05BTUU9JyR7T1NfTkFNRX0nIFwKKyAgICAnQ0M9JHtDQ30nIFwKKyAgICAnUlBNX09QVF9GTEFHUz0ke0NGTEFHU30nIFwKKyAgICAnRVhUUkFfTERGTEFHUz0ke0xERkxBR1N9JyBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnYWNsJywgJ1dJVEhfQUNMPXllcycsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3NlbGludXgnLCAnV0lUSF9TRUxJTlVYPXllcycsICcnLCBkKX0gXAorIgorCisjIE9TX05BTUUgaW4gdGhlIG1ha2VmaWxlIGRlZmF1bHRzIHRvIGB1bmFtZSAtc2AuIFRoZSBiZWhhdmlvciBmb3IKKyMgZnJlZWJzZC9uZXRic2QgaXMgcXVlc3Rpb25hYmxlLCBzbyBsZWF2ZSBpdCBhcyBMaW51eCwgd2hpY2ggb25seSBzZXRzCisjIElOU1RBTEw9aW5zdGFsbCBhbmQgQkFTRURJUj0vdXNyLgorT1NfTkFNRSA9ICJMaW51eCIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgICMgTWFrZSBzdXJlIHRoZSByZWNvbXBpbGUgaXMgT0sKKyAgICBybSAtZiAke0J9Ly5kZXBlbmQKK30KKworZG9faW5zdGFsbCgpeworICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0gUFJFRklYPSR7RH0gTUFORElSPSR7bWFuZGlyfSBCSU5ESVI9JHtiaW5kaXJ9CisgICAgbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vbG9ncm90YXRlLmQKKyAgICBta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmRhaWx5CisgICAgbWtkaXIgLXAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliCisgICAgaW5zdGFsbCAtcCAtbSA2NDQgZXhhbXBsZXMvbG9ncm90YXRlLWRlZmF1bHQgJHtEfSR7c3lzY29uZmRpcn0vbG9ncm90YXRlLmNvbmYKKyAgICBpbnN0YWxsIC1wIC1tIDc1NSBleGFtcGxlcy9sb2dyb3RhdGUuY3JvbiAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmRhaWx5L2xvZ3JvdGF0ZQorICAgIHRvdWNoICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9sb2dyb3RhdGUuc3RhdHVzCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2luaXQtZnVuY3Rpb25zIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9pbml0LWZ1bmN0aW9ucwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YzFkY2UyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9pbml0LWZ1bmN0aW9ucwpAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKworIyBMU0IgaW5pdHNjcmlwdCBmdW5jdGlvbnMsIGFzIGRlZmluZWQgaW4gdGhlIExTQiBTcGVjIDEuMS4wCisjCisjIExhd3JlbmNlIExpbSA8bGxpbUBjb3JlLmNvbT4gLSBUdWUsIDI2IEp1bmUgMjAwNworIyBVcGRhdGVkIHRvIHRoZSBsYXRlc3QgTFNCIDMuMSBzcGVjCisjIGh0dHA6Ly9yZWZzcGVjcy5mcmVlc3RhbmRhcmRzLm9yZy9MU0JfMy4xLjAvTFNCLUNvcmUtZ2VuZXJpYy9MU0ItQ29yZS1nZW5lcmljX2xpbmVzLnR4dAorCitzdGFydF9kYWVtb24gKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX3N0YXJ0X2RhZW1vbiAiJEAiCit9CisKK2tpbGxwcm9jICgpIHsKKwkvZXRjL2NvcmUtbHNiL2xzYl9raWxscHJvYyAiJEAiCit9CisKK3BpZG9mcHJvYyAoKSB7CisJL2V0Yy9jb3JlLWxzYi9sc2JfcGlkb2Zwcm9jICIkQCIKK30KKworbG9nX3N1Y2Nlc3NfbXNnICgpIHsKKwkvZXRjL2NvcmUtbHNiL2xzYl9sb2dfbWVzc2FnZSBzdWNjZXNzICIkQCIKK30KKworbG9nX2ZhaWx1cmVfbXNnICgpIHsKKwkvZXRjL2NvcmUtbHNiL2xzYl9sb2dfbWVzc2FnZSBmYWlsdXJlICIkQCIKK30KKworbG9nX3dhcm5pbmdfbXNnICgpIHsKKwkvZXRjL2NvcmUtbHNiL2xzYl9sb2dfbWVzc2FnZSB3YXJuaW5nICIkQCIKK30KKworIyBpbnQgbG9nX2JlZ2luX21lc3NhZ2UgKGNoYXIgKm1lc3NhZ2UpCitsb2dfYmVnaW5fbXNnICgpIHsKKwlpZiBbIC16ICIkMSIgXTsgdGhlbgorCQlyZXR1cm4gMQorCWZpCisJZWNobyAiICogJEAiCit9CisKKworbG9nX2VuZF9tc2cgKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX2xvZ19tZXNzYWdlIGVuZCAiJEAiCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9raWxscHJvYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX2tpbGxwcm9jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg2NmMxYTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9raWxscHJvYwpAQCAtMCwwICsxLDYgQEAKKyMhL2Jpbi9zaAorCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCitMU0I9TFNCLTEuMSBraWxscHJvYyAkKgorZXhpdCAkPwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2JfbG9nX21lc3NhZ2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9sb2dfbWVzc2FnZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMDM0M2IwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2JfbG9nX21lc3NhZ2UKQEAgLTAsMCArMSwyNyBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK0FDVElPTj0kMQorc2hpZnQKKworY2FzZSAiJEFDVElPTiIgaW4KKyAgc3VjY2VzcykKKyAgCWVjaG8gLW4gJCoKKwlzdWNjZXNzICIkKiIKKwllY2hvCisJOzsKKyAgZmFpbHVyZSkKKyAgCWVjaG8gLW4gJCoKKwlmYWlsdXJlICIkKiIKKwllY2hvCisJOzsKKyAgd2FybmluZykKKyAgCWVjaG8gLW4gJCoKKwl3YXJuaW5nICIkKiIKKwllY2hvCisJOzsKKyAgKikKKyAgCTs7Citlc2FjCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX3BpZG9mcHJvYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX3BpZG9mcHJvYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZDFmZDBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2JfcGlkb2Zwcm9jCkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK3BpZG9mcHJvYyAkKgorZXhpdCAkPwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2Jfc3RhcnRfZGFlbW9uIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2Jfc3RhcnRfZGFlbW9uCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRlNjJjMjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9zdGFydF9kYWVtb24KQEAgLTAsMCArMSw0NSBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK25pY2U9Citmb3JjZT0KK3BpZGZpbGU9Cit1c2VyPQorY2hlY2s9CitSRVRWQUw9Cit3aGlsZSBbICIkMSIgIT0gIiR7MSMjWy0rXX0iIF07IGRvCisJY2FzZSAkMSBpbgorCSAgICAgLWYpCisJICAgICAJZm9yY2U9Ii0tZm9yY2UiCisJCXNoaWZ0CisJCTs7CisJICAgICAtbikKKwkgICAgIAluaWNlPSQyCisJCXNoaWZ0IDIKKwkJOzsKKwkgICAgIC1wKQorCQlwaWRmaWxlPSItLXBpZGZpbGUgJDIiCisJCXNoaWZ0IDIKKwkJOzsKKwkgICAgIC11KQorCSAgICAgICAgdXNlcj0iLS11c2VyICQyIgorCQlzaGlmdCAyCisJCTs7CisJICAgICAtYykKKwkgICAgICAgIGNoZWNrPSItLWNoZWNrICQyIgorCQlzaGlmdCAyCisJCTs7CisJICAgICAgKikgICAgIAorIAkJZWNobyAiVW5rbm93biBPcHRpb24gJDEiCisgCQllY2hvICJPcHRpb25zIGFyZToiCisgCQllY2hvICItZiIgCisJCWVjaG8gIi1wIHtwaWRmaWxlfSIKKwkJZWNobyAiLW4gWysvLW5pY2VsZXZlbF0iCisJCWVjaG8gIi11IHt1c2VyfSIKKwkJZWNobyAiLWMge2Jhc2V9IgorCSAgICAgICAgZXhpdCAxOzsJCisJZXNhYworZG9uZQorTFNCPUxTQi0xLjEgZGFlbW9uICR7Zm9yY2U6LX0gJHtuaWNlOi19ICR7cGlkZmlsZTotfSAke3VzZXI6LX0gJHtjaGVjazotfSAkKgorZXhpdCAkPwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYl80LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiXzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjE1YjYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYl80LjEuYmIKQEAgLTAsMCArMSwxMjcgQEAKK1NVTU1BUlkgPSAiTFNCIHN1cHBvcnQgZm9yIE9wZW5FbWJlZGRlZCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0hPTUVQQUdFID0gImh0dHA6Ly9wcmRvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvbHNiIgorTElDRU5TRSA9ICJHUEx2MisiCitQUiA9ICJyMiIKKworTFNCX0NPUkUgPSAibHNiLWNvcmUtJHtUQVJHRVRfQVJDSH0iCitMU0JfQ09SRV94ODYgPSAibHNiLWNvcmUtaWEzMiIKK0xTQl9DT1JFX3g4Ni02NCA9ICJsc2ItY29yZS1hbWQ2NCIKK1JQUk9WSURFU18ke1BOfSArPSAiJHtMU0JfQ09SRX0iCisKKyMgbHNiX3JlbGVhc2UgbmVlZHMgZ2V0b3B0CitSREVQRU5EU18ke1BOfSArPSAiJHtWSVJUVUFMLVJVTlRJTUVfZ2V0b3B0fSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO21kNT0xMmRhNTQ0YjFhM2E1YTE3OTVhMjExNjBiNDk0NzFjZiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9sc2IvbHNiX3JlbGVhc2UvMS40L2xzYi1yZWxlYXNlLTEuNC50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vaW5pdC1mdW5jdGlvbnMgXAorICAgICAgICAgICBmaWxlOi8vbHNiX2tpbGxwcm9jIFwKKyAgICAgICAgICAgZmlsZTovL2xzYl9sb2dfbWVzc2FnZSBcCisgICAgICAgICAgIGZpbGU6Ly9sc2JfcGlkb2Zwcm9jIFwKKyAgICAgICAgICAgZmlsZTovL2xzYl9zdGFydF9kYWVtb24gXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzMDUzN2VmNWEwMWUwY2E5NGI3YjhlYjZhMzZiYjFlNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5OTMyMTI4OGY4ZDYyZTdhMWQ0ODViN2M2YmRjY2YwNjc2NmZiOGNhNjAzYzYxOTU4MDZlNDQ1N2ZkZjE3MTcyIgorUyA9ICIke1dPUktESVJ9L2xzYi1yZWxlYXNlLTEuNCIKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworZG9faW5zdGFsbCgpeworCW9lX3J1bm1ha2UgaW5zdGFsbCBwcmVmaXg9JHtEfSAgbWFuZGlyPSR7RH0vJHtkYXRhZGlyfS9tYW4vIERFU1RESVI9JHtEfQorCisJIyB0aGlzIDIgZGlycyBhcmUgbmVlZGVkIGJ5IHBhY2thZ2UgbHNiLWRpc3QtY2hlY2tlcgorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L29wdAorCW1rZGlyIC1wICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L29wdAorCisJbWtkaXIgLXAgJHtEfSR7YmFzZV9iaW5kaXJ9CisJbWtkaXIgLXAgJHtEfS8ke2Jhc2VsaWJ9CisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZAorCXByaW50ZiAiTFNCX1ZFUlNJT049XCJjb3JlLTQuMS1ub2FyY2g6IiA+ICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlCisKKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTU4NiIgXSB8fCBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTY4NiIgXTt0aGVuCisJCXByaW50ZiAiY29yZS00LjEtaWEzMiIgPj4gICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlCisJZWxzZQorCQlwcmludGYgImNvcmUtNC4xLSR7VEFSR0VUX0FSQ0h9IiA+PiAgJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UKKwlmaQorCWVjaG8gIlwiIiA+PiAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZQorCWVjaG8gIkRJU1RSSUJfSUQ9JHtESVNUUk99IiA+PiAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZQorCWVjaG8gIkRJU1RSSUJfUkVMRUFTRT0ke0RJU1RST19WRVJTSU9OfSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UKKwlpZiBbIC1uICIke0RJU1RST19DT0RFTkFNRX0iIF07IHRoZW4KKwkJZWNobyAiRElTVFJJQl9DT0RFTkFNRT0ke0RJU1RST19DT0RFTkFNRX0iID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlCisJZmkKKwllY2hvICJESVNUUklCX0RFU0NSSVBUSU9OPVwiJHtESVNUUk9fTkFNRX0gJHtESVNUUk9fVkVSU0lPTn1cIiIgPj4gJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UKKworCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJpNTg2IiBdIHx8IFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJpNjg2IiBdO3RoZW4KKwkJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZAorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2dyYXBoaWNzLSR7UFZ9LW5vYXJjaAorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2Rlc2t0b3AtJHtQVn0tbm9hcmNoCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZ3JhcGhpY3MtJHtQVn0taWEzMgorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2Rlc2t0b3AtJHtQVn0taWEzMgorCWVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgXTt0aGVuCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZ3JhcGhpY3MtJHtQVn0tbm9hcmNoCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZ3JhcGhpY3MtJHtQVn0tYW1kNjQKKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9kZXNrdG9wLSR7UFZ9LWFtZDY0CisJZmkKKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYyIgXTt0aGVuCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZ3JhcGhpY3MtJHtQVn0tbm9hcmNoCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZ3JhcGhpY3MtJHtQVn0tcHBjMzIKKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9kZXNrdG9wLSR7UFZ9LXBwYzMyCisJZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYzY0IiBdO3RoZW4KKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1ub2FyY2gKKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1wcGM2NAorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2Rlc2t0b3AtJHtQVn0tcHBjNjQKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpeworICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vY29yZS1sc2IKKyAgICAgICBmb3IgaSBpbiBsc2Jfa2lsbHByb2MgbHNiX2xvZ19tZXNzYWdlIGxzYl9waWRvZnByb2MgbHNiX3N0YXJ0X2RhZW1vbgorICAgICAgIGRvCisgICAgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9LyR7aX0gJHtEfSR7c3lzY29uZmRpcn0vY29yZS1sc2IKKyAgICAgICBkb25lCisKKyAgICAgICBpbnN0YWxsIC1kICR7RH0vbGliL2xzYgorICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtZnVuY3Rpb25zICR7RH0vbGliL2xzYgorCisgICAgICAgIyBjcmVhdCBsaW5rcyBmb3IgTFNCIHRlc3QKKyAgICAgICBpbnN0YWxsIC1kICR7RH0vdXNyL2xpYi9sc2IKKyAgICAgICBsbiAtc2YgJHtzYmluZGlyfS9jaGtjb25maWcgJHtEfS91c3IvbGliL2xzYi9pbnN0YWxsX2luaXRkCisgICAgICAgbG4gLXNmICR7c2JpbmRpcn0vY2hrY29uZmlnICR7RH0vdXNyL2xpYi9sc2IvcmVtb3ZlX2luaXRkCisKKyAgICAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiBdO3RoZW4KKwkgICAgICAgY2QgJHtEfQorICAgICAgICAgICAgICAgaWYgWyAiJHtiYXNlbGlifSIgIT0gImxpYjY0IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7YmFzZWxpYn0gbGliNjQKKyAgICAgICAgICAgICAgIGZpCisJICAgICAgIGNkICR7RH0vJHtiYXNlbGlifQorICAgICAgICAgICAgICAgbG4gLXNmIGxkLWxpbnV4LXg4Ni02NC5zby4yIGxkLWxzYi14ODYtNjQuc28uMgorICAgICAgICAgICAgICAgbG4gLXNmIGxkLWxpbnV4LXg4Ni02NC5zby4yIGxkLWxzYi14ODYtNjQuc28uMworICAgICAgIGZpCisgICAgICAgaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gImk1ODYiIF0gfHwgWyAiJHtUQVJHRVRfQVJDSH0iID0gImk2ODYiIF07dGhlbgorCSAgICAgICBjZCAke0R9LyR7YmFzZWxpYn0KKyAgICAgICAgICAgICAgIGxuIC1zZiBsZC1saW51eC5zby4yIGxkLWxzYi5zby4yCisgICAgICAgICAgICAgICBsbiAtc2YgbGQtbGludXguc28uMiBsZC1sc2Iuc28uMworICAgICAgIGZpCisKKyAgICAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYzY0IiBdO3RoZW4KKyAgICAgICAgICAgICAgIGNkICR7RH0KKyAgICAgICAgICAgICAgIGlmIFsgIiR7YmFzZWxpYn0iICE9ICJsaWI2NCIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgIGxuIC1zZiAke2Jhc2VsaWJ9IGxpYjY0CisgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgY2QgJHtEfS8ke2Jhc2VsaWJ9CisgICAgICAgICAgICAgICBsbiAtc2YgbGQ2NC5zby4xIGxkLWxzYi1wcGM2NC5zby4yCisgICAgICAgICAgICAgICBsbiAtc2YgbGQ2NC5zby4xIGxkLWxzYi1wcGM2NC5zby4zCisgICAgICAgZmkKKyAgICAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYyIgXTt0aGVuCisJICAgICAgIGNkICR7RH0vJHtiYXNlbGlifQorICAgICAgICAgICAgICAgbG4gLXNmIGxkLnNvLjEgbGQtbHNiLXBwYzMyLnNvLjIKKyAgICAgICAgICAgICAgIGxuIC1zZiBsZC5zby4xIGxkLWxzYi1wcGMzMi5zby4zCisgICAgICAgZmkKK30KK0ZJTEVTXyR7UE59ICs9ICIvbGliNjQgXAorICAgICAgICAgICAgICAgIC91c3IvbGliL2xzYiBcCisgICAgICAgICAgICAgICAgJHtiYXNlX2xpYmRpcn0vbHNiLyogXAorICAgICAgICAgICAgICAgIC9saWIvbHNiLyogXAorICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0cy8wMDAxLWZ1bmN0aW9ucy1hdm9pZC1leGl0LTEtd2hpY2gtY2F1c2VzLWluaXQtc2NyaXB0cy10by0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgwOWM5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0cy8wMDAxLWZ1bmN0aW9ucy1hdm9pZC1leGl0LTEtd2hpY2gtY2F1c2VzLWluaXQtc2NyaXB0cy10by0ucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1N1YmplY3Q6IGZ1bmN0aW9uczogYXZvaWQgZXhpdCAxIHdoaWNoIGNhdXNlcyBpbml0IHNjcmlwdHMgdG8gZmFpbAorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyByYy5kL2luaXQuZC9mdW5jdGlvbnMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9yYy5kL2luaXQuZC9mdW5jdGlvbnMgYi9yYy5kL2luaXQuZC9mdW5jdGlvbnMKK2luZGV4IDY4NTAwNDYuLjExMjIzZjcgMTAwNjQ0CistLS0gYS9yYy5kL2luaXQuZC9mdW5jdGlvbnMKKysrKyBiL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworQEAgLTU5Nyw1ICs1OTcsNSBAQCBpZiBbICIkX3VzZV9zeXN0ZW1jdGwiID0gIjEiIF07IHRoZW4KKyAJZmkKKyBmaQorIAorLXN0cnN0ciAiJChjYXQgL3Byb2MvY21kbGluZSkiICJyYy5kZWJ1ZyIgJiYgc2V0IC14Cisrc3Ryc3RyICIkKGNhdCAvcHJvYy9jbWRsaW5lKSIgInJjLmRlYnVnIiAmJiBzZXQgLXggfHwgdHJ1ZQorIAorLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHMvZnVuY3Rpb25zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzL2Z1bmN0aW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzU2ZDA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzL2Z1bmN0aW9ucy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFhpYW9mZW5nIFlhbiA8eGlhb2ZlbmcueWFuQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBpbml0c2NyaXB0cy05LjQzL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGluaXRzY3JpcHRzLTkuNDMub3JpZy9yYy5kL2luaXQuZC9mdW5jdGlvbnMKKysrKyBpbml0c2NyaXB0cy05LjQzL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworQEAgLTEzLDYgKzEzLDcgQEAgdW1hc2sgMDIyCisgUEFUSD0iL3NiaW46L3Vzci9zYmluOi9iaW46L3Vzci9iaW4iCisgZXhwb3J0IFBBVEgKKyAKKysKKyBpZiBbICRQUElEIC1uZSAxIC1hIC16ICIkU1lTVEVNQ1RMX1NLSVBfUkVESVJFQ1QiIF0gJiYgXAorIAkJKCAvYmluL21vdW50cG9pbnQgLXEgL2Nncm91cC9zeXN0ZW1kIHx8IC9iaW4vbW91bnRwb2ludCAtcSAvc3lzL2ZzL2Nncm91cC9zeXN0ZW1kICkgOyB0aGVuCisgICAgICAgICBjYXNlICIkMCIgaW4KK0BAIC01NCw3ICs1NSw3IEBAIHN5c3RlbWN0bF9yZWRpcmVjdCAoKSB7CisgWyAteiAiJHtDT0xVTU5TOi19IiBdICYmIENPTFVNTlM9ODAKKyAKKyBpZiBbIC16ICIke0NPTlNPTEVUWVBFOi19IiBdOyB0aGVuCistICBpZiBbIC1jICIvZGV2L3N0ZGVyciIgLWEgLXIgIi9kZXYvc3RkZXJyIiBdOyB0aGVuCisrICBpZiBbIC1jICIvZGV2L3N0ZGVyciIgLWEgLXIgIi9kZXYvc3RkZXJyIiAtYSAtZSAvc2Jpbi9jb25zb2xldHlwZSBdOyB0aGVuCisgICAgIENPTlNPTEVUWVBFPSIkKC9zYmluL2NvbnNvbGV0eXBlIDwgL2Rldi9zdGRlcnIgMj4vZGV2L251bGwpIgorICAgZWxzZQorICAgICBDT05TT0xFVFlQRT0ic2VyaWFsIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzXzkuNjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHNfOS42NC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGI2NjdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzXzkuNjQuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJTeXNWIGluaXQgc2NyaXB0cyB3aGljaCBhcmUgb25seSB1c2VkIGluIGFuIExTQiBpbWFnZSIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitERVBFTkRTID0gInBvcHQgZ2xpYi0yLjAiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViZjRlOGI0OTc4MGFiMTg3ZDUxYmQyNmFhYTAyMmM2IgorCitTPSIke1dPUktESVJ9L2luaXRzY3JpcHRzLSR7UFZ9IgorU1JDX1VSSSA9ICJodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9yZXBvL3BrZ3MvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtJHtQVn0udGFyLmJ6Mi85Y2NlMmFlMTAwOTc1MGU4NGJlMzdjMDlhMDI4NzU3ZS9pbml0c2NyaXB0cy0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2Z1bmN0aW9ucy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZ1bmN0aW9ucy1hdm9pZC1leGl0LTEtd2hpY2gtY2F1c2VzLWluaXQtc2NyaXB0cy10by0ucGF0Y2ggXAorICAgICAgICAgICIgCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5Y2NlMmFlMTAwOTc1MGU4NGJlMzdjMDlhMDI4NzU3ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0OGI1OWNlODE1N2NmYzU4YmJkNGIxZGZhNThhZDEwODcyNDU3NjFhZTExYzIwMzNiNjZhZTM4NjRlYTdlMWNmIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAiZnVuY3Rpb25zIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2Z1bmN0aW9uc10gPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvZnVuY3Rpb25zIgorCisjIFNpbmNlIHdlIGFyZSBvbmx5IHRha2luZyB0aGUgcGF0Y2hlZCB2ZXJzaW9uIG9mIGZ1bmN0aW9ucywgbm8gbmVlZCB0bworIyBjb25maWd1cmUgb3IgY29tcGlsZSBhbnl0aGluZyBzbyBkbyBub3QgZXhlY3V0ZSB0aGVzZQorZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIgCitkb19jb21waWxlW25vZXhlY10gPSAiMSIgCisKK2RvX2luc3RhbGwoKXsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9yYy5kL2luaXQuZC9mdW5jdGlvbnMgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Z1bmN0aW9ucworCXNlZCAtaSAncywke2Jhc2VfYmluZGlyfS9tb3VudHBvaW50LCR7YmluZGlyfS9tb3VudHBvaW50LGcnICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9mdW5jdGlvbnMKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L0xTQl9UZXN0LnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvTFNCX1Rlc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5NzFhMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L0xTQl9UZXN0LnNoCkBAIC0wLDAgKzEsNTI2IEBACisjIS9iaW4vc2gKKworIyBDb3B5cmlnaHQgKEMpIDIwMTIgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKKworV09SS19ESVI9Ii9vcHQvbHNiLXRlc3QiCisKK2lmIFsgYGlkIC11YCAtbmUgMCBdCit0aGVuCisJY2F0IDw8IEVPRgorCUluIG9yZGVyIHRvIGluc3RhbGwgYW5kIHJ1biBMU0IgdGVzdHN1aXRlLCB5b3UgbmVlZCBhZG1pbmlzdHJhdG9yIHByaXZpbGVnZXMuCisJWW91IGFyZSBjdXJyZW50bHkgcnVubmluZyB0aGlzIHNjcmlwdCBhcyBhbiB1bnByaXZpbGVnZWQgdXNlci4KKworRU9GCisJZXhpdCAxCitmaQorCitBUkNIPWB1bmFtZSAtbWAKK2lmIFsgJHtBUkNIfSAhPSAiaTY4NiIgXSAmJiBbICR7QVJDSH0gIT0gIng4Nl82NCIgXSAmJiBbICR7QVJDSH0gIT0gInBwYyIgXSAmJiBbICR7QVJDSH0gIT0gInBwYzY0IiBdCit0aGVuCisJZWNobyAiRXJyb3I6IFVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSIKKwlleGl0IDEKK2ZpCisKK3doaWNoIHJwbQoraWYgWyAkPyAtbmUgMCBdCit0aGVuCisJZWNobyAiTm8gcnBtIGNvbW1hbmQgZm91bmQiCisJZXhpdCAxCitmaQorCitSRVQ9MAorCitjZCAke1dPUktfRElSfSB8fCBleGl0IDEKKyMgU3RlcCAxOiBEb3dubG9hZCB0aGUgTFNCIFBhY2thZ2VzCitlY2hvICIiCitlY2hvICJEb3dubG9hZCBMU0IgcGFja2FnZXMuLi4iCitlY2hvICIiCisKK2lmIFsgISAtZSAuL3BhY2thZ2VzX2xpc3QgXQordGhlbgorCWVjaG8gIkVycm9yOiBDb3VsZCBub3QgZmluZCBwYWNrYWdlcyBsaXN0IiA+JjIKKwlleGl0IDEKK2ZpCisKKy4gLi9wYWNrYWdlc19saXN0CisKK1BBQ0tBR0VTX0RJUj0iL3Zhci9vcHQvbHNiL3Rlc3QvbWFuYWdlci9wYWNrYWdlcy9mdHAubGludXhmb3VuZGF0aW9uLm9yZy9wdWIvbHNiIgorCitCQVNFX1BBQ0tBR0VTX0RJUj0iJHtQQUNLQUdFU19ESVJ9L2Jhc2UvJHtMU0JfUkVMRUFTRX0vYmluYXJ5IgorUlVOVElNRV9CQVNFX1BBQ0tBR0VTX0RJUj0iJHtQQUNLQUdFU19ESVJ9L3Rlc3Rfc3VpdGVzL3JlbGVhc2VkLWFsbC9iaW5hcnkvcnVudGltZSIKK1JVTlRJTUVfUEFDS0FHRVNfRElSPSIke1BBQ0tBR0VTX0RJUn0vdGVzdF9zdWl0ZXMvJHtMU0JfUkVMRUFTRX0vYmluYXJ5L3J1bnRpbWUiCitBUFBfUEFDS0FHRVNfRElSPSIke1BBQ0tBR0VTX0RJUn0vYXBwLWJhdHRlcnkvJHtMU0JfUkVMRUFTRX0vJHtMU0JfQVJDSH0iCitBUFBfVEVTVEZJTEVTX0RJUj0iJHtQQUNLQUdFU19ESVJ9L2FwcC1iYXR0ZXJ5L3Rlc3RzIgorU05BUFNIT1RTX1RFU1RGSUxFU19ESVI9IiR7UEFDS0FHRVNfRElSfS9zbmFwc2hvdHMvYXBwYmF0L3Rlc3RzIgorCitpZiBbICEgLWQgJHtQQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwlta2RpciAtcCAke1BBQ0tBR0VTX0RJUn0KK2ZpCisKK2lmIFsgISAtZCAke0JBU0VfUEFDS0FHRVNfRElSfSBdCit0aGVuCisJbWtkaXIgLXAgJHtCQVNFX1BBQ0tBR0VTX0RJUn0KK2ZpCisKK2lmIFsgISAtZCAke1JVTlRJTUVfQkFTRV9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwlta2RpciAtcCAke1JVTlRJTUVfQkFTRV9QQUNLQUdFU19ESVJ9CitmaQorCitpZiBbICEgLWQgJHtSVU5USU1FX1BBQ0tBR0VTX0RJUn0gXQordGhlbgorCW1rZGlyIC1wICR7UlVOVElNRV9QQUNLQUdFU19ESVJ9CitmaQorCitpZiBbICEgLWQgJHtBUFBfUEFDS0FHRVNfRElSfSBdCit0aGVuCisJbWtkaXIgLXAgJHtBUFBfUEFDS0FHRVNfRElSfQorZmkKKworaWYgWyAhIC1kICR7QVBQX1RFU1RGSUxFU19ESVJ9IF0KK3RoZW4KKwlta2RpciAtcCAke0FQUF9URVNURklMRVNfRElSfQorZmkKKworIyBPZmZpY2lhbCBkb3dubG9hZCBzZXJ2ZXIgbGlzdC4gWW91IGNhbiByZXBsYWNlIHRoZW0gd2l0aCB5b3VyIG93biBzZXJ2ZXIuCitTRVJWRVJfSVBBRERSPSIxNDAuMjExLjE2OS4yMyIKK1NFUlZFUl9OQU1FPSJmdHAubGludXhmb3VuZGF0aW9uLm9yZyIKKworaWYgISBgZ3JlcCAtRiAtcSAiJHtTRVJWRVJfTkFNRX0iIC9ldGMvaG9zdHNgOyB0aGVuCisJZWNobyAiJHtTRVJWRVJfSVBBRERSfQkke1NFUlZFUl9OQU1FfQkke1NFUlZFUl9OQU1FfSIgPj4gL2V0Yy9ob3N0cworZmkKKworI3BpbmcgLWMgNSAke1NFUlZFUl9OQU1FfQorI2lmIFsgJD8gLW5lIDAgXQorI3RoZW4KKyMJZWNobyAiVGhlIHNlcnZlcjogJHtTRVJWRVJfTkFNRX0gaXMgdW5yZWFjaGFibGUiCisjCWV4aXQgMQorI2ZpCisKK1NFUlZFUjE9IlwKKwlodHRwOi8vJHtTRVJWRVJfTkFNRX0vcHViL2xzYi9iYXNlLyR7TFNCX1JFTEVBU0V9L2JpbmFyeSIKK1NFUlZFUjI9IlwKKwlodHRwOi8vJHtTRVJWRVJfTkFNRX0vcHViL2xzYi90ZXN0X3N1aXRlcy9yZWxlYXNlZC1hbGwvYmluYXJ5L3J1bnRpbWUiCitTRVJWRVIzPSJcCisJaHR0cDovLyR7U0VSVkVSX05BTUV9L3B1Yi9sc2IvdGVzdF9zdWl0ZXMvJHtMU0JfUkVMRUFTRX0vYmluYXJ5L3J1bnRpbWUiCitTRVJWRVI0PSJcCisJaHR0cDovLyR7U0VSVkVSX05BTUV9L3B1Yi9sc2IvYXBwLWJhdHRlcnkvJHtMU0JfUkVMRUFTRX0vJHtMU0JfQVJDSH0iCitTRVJWRVI1PSJcCisJaHR0cDovLyR7U0VSVkVSX05BTUV9L3B1Yi9sc2IvYXBwLWJhdHRlcnkvdGVzdHMiCisKKyMgV2UgdXNpbmcgImN1cmwiIGFzIGEgZG93bmxvYWQgdG9vbCwgIndnZXQiIGlzIGFuIGFsdGVybmF0aXZlLgorQ1VSTD1gd2hpY2ggY3VybGAKK1dHRVQ9YHdoaWNoIHdnZXRgCitpZiBbICEgLXogJHtDVVJMfSBdCit0aGVuCisJRE9XTkxPQURfQ01EPSIke0NVUkx9IC1SIC1MIC1mIC0tcmV0cnkgMyAtLXJldHJ5LWRlbGF5IDQgLS1jb25uZWN0LXRpbWVvdXQgMTgwIC0tY29tcHJlc3NlZCAtQyAtIC1vIgorZWxpZiBbICEgLXogJHtXR0VUfSBdCit0aGVuCisJRE9XTkxPQURfQ01EPSIke1dHRVR9IC1jIC10IDUgLU8iCitlbHNlCisJZWNobyAiQ2FuIG5vdCBmaW5kIGEgZG93bmxvYWQgdG9vbCwgcGxlYXNlIGluc3RhbGwgY3VybCBvciB3Z2V0LiIKKwlleGl0IDEKK2ZpCisKK2NkICR7QkFTRV9QQUNLQUdFU19ESVJ9Citmb3IgcGtnIGluICR7QkFTRV9QQUNLQUdFU19MSVNUfTsgZG8KKwlpZiBbICEgLWYgJHtwa2d9IF0KKwl0aGVuCisJCSMke0RPV05MT0FEX0NNRH0gJHtwa2d9Ii4jcGFydCIgJHtTRVJWRVIxfS8ke3BrZ30gPiAvZGV2L251bGwgMj4mMQorCQkke0RPV05MT0FEX0NNRH0gJHtwa2d9Ii4jcGFydCIgJHtTRVJWRVIxfS8ke3BrZ30KKwkJaWYgWyAkPyAtZXEgMCBdCisJCXRoZW4KKwkJCW12IC1mICR7cGtnfSIuI3BhcnQiICR7cGtnfQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IHN1Y2Nlc3NmdWxseS4iCisJCWVsc2UKKwkJCWVjaG8gIkRvd25sb2FkICR7cGtnfSBmYWlsZWQuIgorCQkJUkVUPTEKKwkJZmkKKwlmaQorZG9uZQorCitjZCAke1JVTlRJTUVfQkFTRV9QQUNLQUdFU19ESVJ9Citmb3IgcGtnIGluICR7UlVOVElNRV9CQVNFX1BBQ0tBR0VTX0xJU1R9OyBkbworCWlmIFsgISAtZiAke3BrZ30gXQorCXRoZW4KKwkJIyR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjJ9LyR7cGtnfSA+IC9kZXYvbnVsbCAyPiYxCisJCSR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjJ9LyR7cGtnfQorCQlpZiBbICQ/IC1lcSAwIF0KKwkJdGhlbgorCQkJbXYgLWYgJHtwa2d9Ii4jcGFydCIgJHtwa2d9CisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gc3VjY2Vzc2Z1bGx5LiIKKwkJZWxzZQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IGZhaWxlZC4iCisJCQlSRVQ9MQorCQlmaQorCWZpCitkb25lCisKK2NkICR7UlVOVElNRV9QQUNLQUdFU19ESVJ9Citmb3IgcGtnIGluICR7UlVOVElNRV9QQUNLQUdFU19MSVNUfTsgZG8KKwlpZiBbICEgLWYgJHtwa2d9IF0KKwl0aGVuCisJCSMke0RPV05MT0FEX0NNRH0gJHtwa2d9Ii4jcGFydCIgJHtTRVJWRVIzfS8ke3BrZ30gPiAvZGV2L251bGwgMj4mMQorCQkke0RPV05MT0FEX0NNRH0gJHtwa2d9Ii4jcGFydCIgJHtTRVJWRVIzfS8ke3BrZ30KKwkJaWYgWyAkPyAtZXEgMCBdCisJCXRoZW4KKwkJCW12IC1mICR7cGtnfSIuI3BhcnQiICR7cGtnfQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IHN1Y2Nlc3NmdWxseS4iCisJCWVsc2UKKwkJCWVjaG8gIkRvd25sb2FkICR7cGtnfSBmYWlsZWQuIgorCQkJUkVUPTEKKwkJZmkKKwlmaQorZG9uZQorCitjZCAke0FQUF9QQUNLQUdFU19ESVJ9Citmb3IgcGtnIGluICR7QVBQX1BBQ0tBR0VTX0xJU1R9OyBkbworCWlmIFsgISAtZiAke3BrZ30gXQorCXRoZW4KKwkJIyR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjR9LyR7cGtnfSA+IC9kZXYvbnVsbCAyPiYxCisJCSR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjR9LyR7cGtnfQorCQlpZiBbICQ/IC1lcSAwIF0KKwkJdGhlbgorCQkJbXYgLWYgJHtwa2d9Ii4jcGFydCIgJHtwa2d9CisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gc3VjY2Vzc2Z1bGx5LiIKKwkJZWxzZQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IGZhaWxlZC4iCisJCQlSRVQ9MQorCQlmaQorCWZpCitkb25lCisKK2NkICR7QVBQX1RFU1RGSUxFU19ESVJ9Citmb3IgcGtnIGluICR7QVBQX1RFU1RGSUxFU19MSVNUfTsgZG8KKwlpZiBbICEgLWYgJHtwa2d9IF0KKwl0aGVuCisJCSMke0RPV05MT0FEX0NNRH0gJHtwa2d9Ii4jcGFydCIgJHtTRVJWRVI1fS8ke3BrZ30gPiAvZGV2L251bGwgMj4mMQorCQkke0RPV05MT0FEX0NNRH0gJHtwa2d9Ii4jcGFydCIgJHtTRVJWRVI1fS8ke3BrZ30KKwkJaWYgWyAkPyAtZXEgMCBdCisJCXRoZW4KKwkJCW12IC1mICR7cGtnfSIuI3BhcnQiICR7cGtnfQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IHN1Y2Nlc3NmdWxseS4iCisJCWVsc2UKKwkJCWVjaG8gIkRvd25sb2FkICR7cGtnfSBmYWlsZWQuIgorCQkJUkVUPTEKKwkJZmkKKwlmaQorZG9uZQorCitpZiBbICR7UkVUfSAtbmUgMCBdCit0aGVuCisJZWNobyAiRG93bmxvYWQgc29tZSBwYWNrYWdlcyBmYWlsZWQuIFBsZWFzZSBkb3dubG9hZCB0aGVtIGFnYWluLiIKKwlleGl0IDEKK2ZpCisKKyMgU3RlcCAyOiBJbnN0YWxsIHRoZSBMU0IgUGFja2FnZXMKK2VjaG8gIiIKK2VjaG8gIkluc3RhbGwgTFNCIHBhY2thZ2VzLi4uIgorZWNobyAiIgorCisjIEtpbGwgbGlnaHR0cGQKK3BzIGF1eCB8IGdyZXAgImxpZ2h0dHBkIiB8IGdyZXAgLXYgLXEgImdyZXAiCitpZiBbICQ/IC1lcSAwIF0KK3RoZW4KKwlraWxsYWxsIGxpZ2h0dHBkID4vZGV2L251bGwgMj4mMQorZmkKKworIyBTdGFydCBhdmFoaS1kYWVtb24KK3BzIGF1eCB8IGdyZXAgImF2YWhpLWRhZW1vbiIgfCBncmVwIC12IC1xICJncmVwIgoraWYgWyAkPyAtbmUgMCBdCit0aGVuCisJL2V0Yy9pbml0LmQvYXZhaGktZGFlbW9uIHN0YXJ0ID4vZGV2L251bGwgMj4mMQorZmkKKworTFNCX1NUQVJUX0NNRD0iL29wdC9sc2IvdGVzdC9tYW5hZ2VyL2Jpbi9kaXN0LWNoZWNrZXItc3RhcnQucGwiCitMU0JfU1RPUF9DTUQ9Ii9vcHQvbHNiL3Rlc3QvbWFuYWdlci9iaW4vZGlzdC1jaGVja2VyLXN0b3AucGwiCisKK1BMQVRGT1JNX0ZJTEU9Ii9ldGMvcnBtL3BsYXRmb3JtIgorCitSUE1fSU5TVEFMTF9DTUQ9InJwbSAtLXF1aWV0IC0tbm9kZXBzIC0tcmVwbGFjZXBrZ3MgLS1ub3NpZ25hdHVyZSAtaSIKK1JQTV9JTlNUQUxMX0NNRF9OT1NDUklQVFM9InJwbSAtLXF1aWV0IC0tbm9kZXBzIC0tcmVwbGFjZXBrZ3MgLS1ub3NjcmlwdHMgLS1ub3NpZ25hdHVyZSAtaSIKKworIyBJZiB0aGUgbHNiIGhhcyBiZWVuIHN0YXJ0ZWQsIHN0b3AgaXQgZmlyc3QuCitpZiBbIC14ICR7TFNCX1NUT1BfQ01EfSBdCit0aGVuCisJJHtMU0JfU1RPUF9DTUR9CitmaQorCitpZiBbICEgLWQgL2V0Yy9ycG0gXQordGhlbgorCW1rZGlyIC1wIC9ldGMvcnBtCitmaQorCitpZiBbICEgLWYgJHtQTEFURk9STV9GSUxFfSBdCit0aGVuCisJdG91Y2ggJHtQTEFURk9STV9GSUxFfQorZmkKKworaWYgISBgZ3JlcCAtRiAtcSAibm9hcmNoLXN1c2UiICR7UExBVEZPUk1fRklMRX1gOyB0aGVuCisJaWYgWyAke0FSQ0h9ID0gaTY4NiBdO3RoZW4KKwkJZWNobyAiaTQ4Ni1zdXNlIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gImk0ODYtbm9hcmNoIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gImk0ODYtcGMiID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAibm9hcmNoLXN1c2UiID4+ICR7UExBVEZPUk1fRklMRX0KKwllbGlmIFsgJHtBUkNIfSA9IHg4Nl82NCBdOyB0aGVuCisJCWVjaG8gImk0ODYtc3VzZSIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICJpNDg2LW5vYXJjaCIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICJpNDg2LXBjIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gImk0ODYtLiotbGludXguKiIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICJub2FyY2gtc3VzZSIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICIke0FSQ0h9LXN1c2UiID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiJHtBUkNIfS1ub2FyY2giID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiJHtBUkNIfS1wYyIgPj4gJHtQTEFURk9STV9GSUxFfQorCWVsc2UKKwkJZWNobyAiJHtBUkNIfS1zdXNlIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gIiR7QVJDSH0tbm9hcmNoIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gIiR7QVJDSH0tcGMiID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAibm9hcmNoLXN1c2UiID4+ICR7UExBVEZPUk1fRklMRX0KKwlmaQorZmkKKworaWYgWyAtZCAke0JBU0VfUEFDS0FHRVNfRElSfSBdCit0aGVuCisJY2QgJHtCQVNFX1BBQ0tBR0VTX0RJUn0KKwlmb3IgcGtnIGluICR7QkFTRV9QQUNLQUdFU19MSVNUfQorCWRvCisJCXJwbSAtLXF1aWV0IC1xICR7cGtnJVwuKn0KKwkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCQkkUlBNX0lOU1RBTExfQ01EICR7cGtnfQorCQlmaQorCWRvbmUKK2ZpCisKK2lmIFsgLWQgJHtSVU5USU1FX0JBU0VfUEFDS0FHRVNfRElSfSBdCit0aGVuCisJY2QgJHtSVU5USU1FX0JBU0VfUEFDS0FHRVNfRElSfQorCWZvciBwa2cgaW4gJHtSVU5USU1FX0JBU0VfUEFDS0FHRVNfTElTVH0KKwlkbworCQlycG0gLS1xdWlldCAtcSAke3BrZyVcLip9CisJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJJFJQTV9JTlNUQUxMX0NNRCAke3BrZ30KKwkJZmkKKwlkb25lCitmaQorCitpZiBbIC1kICR7UlVOVElNRV9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwljZCAke1JVTlRJTUVfUEFDS0FHRVNfRElSfQorCWZvciBwa2cgaW4gJHtSVU5USU1FX1BBQ0tBR0VTX0xJU1R9CisJZG8KKwkJcnBtIC0tcXVpZXQgLXEgJHtwa2clXC4qfQorCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCSRSUE1fSU5TVEFMTF9DTUQgJHtwa2d9CisJCWZpCisJZG9uZQorZmkKKworaWYgWyAtZCAke0FQUF9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwljZCAke0FQUF9QQUNLQUdFU19ESVJ9CisJZm9yIHBrZyBpbiAke0FQUF9QQUNLQUdFU19MSVNUfQorCWRvCisJCWVjaG8gIiR7cGtnfSIgfCBncmVwIC1xICJhcGFjaGVcfHhwZGYiCisJCWlmIFsgJD8gLWVxIDAgXQorCQl0aGVuCisJCQlycG0gLS1xdWlldCAtcSAke3BrZyVcLip9CisJCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCQkkUlBNX0lOU1RBTExfQ01EX05PU0NSSVBUUyAke3BrZ30KKwkJCWZpCisJCWVsc2UKKwkJCXJwbSAtLXF1aWV0IC1xICR7cGtnJVwuKn0KKwkJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJCSRSUE1fSU5TVEFMTF9DTUQgJHtwa2d9CisJCQlmaQorCQlmaQorCWRvbmUKK2ZpCisKK2lmIFsgISAtZCAke1NOQVBTSE9UU19URVNURklMRVNfRElSfSBdCit0aGVuCisJbWtkaXIgLXAgJHtTTkFQU0hPVFNfVEVTVEZJTEVTX0RJUn0KK2ZpCisKK2lmIFsgLWQgJHtBUFBfVEVTVEZJTEVTX0RJUn0gXQordGhlbgorCWNkICR7QVBQX1RFU1RGSUxFU19ESVJ9CisJZm9yIHBrZyBpbiAke0FQUF9URVNURklMRVNfTElTVH0KKwlkbworCQljcCAtZiAke3BrZ30gJHtTTkFQU0hPVFNfVEVTVEZJTEVTX0RJUn0KKwlkb25lCitmaQorCitjZCAke1dPUktfRElSfQorCisjIFN0ZXAgMzogU2V0IGVudmlyb25tZW50CitlY2hvICIiCitlY2hvICJTZXQgZW52aXJvbm1lbnQuLi4iCitlY2hvICIiCisKK2NoZWNrICgpCit7CisJaWYgWyAkPyAtZXEgMCBdCisJdGhlbgorCQllY2hvICJQQVNTIgorCWVsc2UgCisJCWVjaG8gIkZBSUwiCisJCWV4aXQgMQorCWZpCit9CisKK2VjaG8gIiIKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKK2VjaG8gIkNyZWF0ZSB0aGUgRGlybmFtZXMgb24gdGFyZ2V0IgorCitpZiBbICEgLWQgL2V0Yy9ycG0vc3lzaW5mbyBdCit0aGVuCisJbWtkaXIgLXAgL2V0Yy9ycG0vc3lzaW5mbworZmkKKworY2F0ID4gL2V0Yy9ycG0vc3lzaW5mby9EaXJuYW1lcyA8PCBFT0YKKy9ldGMvb3B0L2xzYgorL2hvbWUvdGV0L0xTQi50b29scworL29wdC9sc2ItdGV0My1saXRlL2xpYi9rc2gKKy9vcHQvbHNiLXRldDMtbGl0ZS9saWIvcGVybAorL29wdC9sc2ItdGV0My1saXRlL2xpYi9wb3NpeF9zaAorL29wdC9sc2ItdGV0My1saXRlL2xpYi90ZXQzCisvb3B0L2xzYi10ZXQzLWxpdGUvbGliL3hwZzNzaAorL29wdC9sc2IvYXBwYmF0L2xpYi9weXRob24yLjQvc2l0ZS1wYWNrYWdlcy9xbQorL29wdC9sc2IvYXBwYmF0L2xpYi9weXRob24yLjQvc2l0ZS1wYWNrYWdlcy9xbS9leHRlcm5hbAorL29wdC9sc2IvYXBwYmF0L2xpYi9weXRob24yLjQvc2l0ZS1wYWNrYWdlcy9xbS9leHRlcm5hbC9Eb2N1bWVudFRlbXBsYXRlCisvb3B0L2xzYi9hcHBiYXQvbGliL3B5dGhvbjIuNC9zaXRlLXBhY2thZ2VzL3FtL3Rlc3QKKy9vcHQvbHNiL2FwcGJhdC9saWIvcHl0aG9uMi40L3NpdGUtcGFja2FnZXMvcW0vdGVzdC9jbGFzc2VzCisvb3B0L2xzYi9hcHBiYXQvbGliL3B5dGhvbjIuNC9zaXRlLXBhY2thZ2VzL3FtL3Rlc3Qvd2ViCisvb3B0L2xzYi90ZXN0L2RvYworL29wdC9sc2IvdGVzdC9saWIKKy9vcHQvbHNiL3Rlc3QvcW0vZGlhZ25vc3RpY3MKKy9vcHQvbHNiL3Rlc3QvcW0vZG9jCisvb3B0L2xzYi90ZXN0L3FtL2RvYy90ZXN0L2h0bWwKKy9vcHQvbHNiL3Rlc3QvcW0vZG9jL3Rlc3QvcHJpbnQKKy9vcHQvbHNiL3Rlc3QvcW0vZHRtbAorL29wdC9sc2IvdGVzdC9xbS9kdG1sL3Rlc3QKKy9vcHQvbHNiL3Rlc3QvcW0vbWVzc2FnZXMvdGVzdAorL29wdC9sc2IvdGVzdC9xbS90dXRvcmlhbC90ZXN0L3RkYgorL29wdC9sc2IvdGVzdC9xbS90dXRvcmlhbC90ZXN0L3RkYi9RTVRlc3QKKy9vcHQvbHNiL3Rlc3QvcW0vd2ViCisvb3B0L2xzYi90ZXN0L3FtL3dlYi9pbWFnZXMKKy9vcHQvbHNiL3Rlc3QvcW0vd2ViL3N0eWxlc2hlZXRzCisvb3B0L2xzYi90ZXN0L3FtL3htbAorL29wdC9sc2IvdGVzdC9zaGFyZQorL3Vzci9zaGFyZS9kb2MvbHNiLXJ1bnRpbWUtdGVzdAorL3Zhci9vcHQvbHNiCisvb3B0L2xzYi90ZXN0L2Rlc2t0b3AKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcC9mb250Y29uZmlnCisvb3B0L2xzYi90ZXN0L2Rlc2t0b3AvZnJlZXR5cGUKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcC9ndGt2dHMKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcC9saWJwbmcKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcC9xdDMKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcC94ZnQKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcC94bWwKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcC94cmVuZGVyCisKKworRU9GCisKK2lmIFsgLWYgL2V0Yy9ycG0vc3lzaW5mby9EaXJuYW1lcyBdCit0aGVuCisJZWNobyAiU3VjY2VzcyB0byBjcmVhdCBEaXJuYW1lcyBmaWxlIgorZWxzZSAKKwllY2hvICJGYWlsIHRvIGNyZWF0IERpcm5hbWVzIGZpbGUiCitmaQorCitbIC14IC9zYmluL2xkY29uZmlnIF0gJiYgeworZWNobyAiIgorZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorZWNobyAiVXBkYXRlIGNhY2hlIgorL3NiaW4vbGRjb25maWcKK2NoZWNrOworfQorCisjIENoZWNrIGxvb3AgZGV2aWNlCitpZiBbICEgLWIgL2Rldi9sb29wMCBdCit0aGVuCisJaW5zbW9kIC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2tlcm5lbC9kcml2ZXJzL2Jsb2NrL2xvb3Aua28KKwlpZiBbICQ/ICE9IDAgXTt0aGVuCisJCWVjaG8gIkluc21vZCBsb29wLmtvIGZhaWxlZC4iCisJZmkKK2ZpCisKKyMgUmVzb2x2ZSBsb2NhbGhvc3QKK0xPQ0FMSE9TVD1gaG9zdG5hbWVgCitpZiAhIGBncmVwIC1GIC1xICIkTE9DQUxIT1NUIiAvZXRjL2hvc3RzYDsgdGhlbgorCWVjaG8gIjEyNy4wLjAuMQkkTE9DQUxIT1NUIiA+PiAvZXRjL2hvc3RzCitmaQorCisjIFdvcmthcm91bmQgdG8gYWRkIHBhcnQgb2YgbG9jYWxlcyBmb3IgTFNCIHRlc3QKK2xvY2FsZWRlZiAtaSBkZV9ERSAtZiBJU08tODg1OS0xIGRlX0RFCitsb2NhbGVkZWYgLWkgZGVfREUgLWYgSVNPLTg4NTktMTUgZGVfREUuSVNPLTg4NTktMTUKK2xvY2FsZWRlZiAtaSBkZV9ERSAtZiBVVEYtOCBkZV9ERS5VVEYtOAorbG9jYWxlZGVmIC1pIGRlX0RFQGV1cm8gLWYgSVNPLTg4NTktMTUgZGVfREVAZXVybworbG9jYWxlZGVmIC1pIGVuX0hLIC1mIElTTy04ODU5LTEgZW5fSEsKK2xvY2FsZWRlZiAtaSBlbl9QSCAtZiBJU08tODg1OS0xIGVuX1BICitsb2NhbGVkZWYgLWkgZW5fVVMgLWYgSVNPLTg4NTktMTUgZW5fVVMuSVNPLTg4NTktMTUKK2xvY2FsZWRlZiAtaSBlbl9VUyAtZiBJU08tODg1OS0xIGVuX1VTLklTTy04ODU5LTEKK2xvY2FsZWRlZiAtaSBlbl9VUyAtZiBJU08tODg1OS0xIGVuX1VTCitsb2NhbGVkZWYgLWkgZW5fVVMgLWYgVVRGLTggZW5fVVMuVVRGLTgKK2xvY2FsZWRlZiAtaSBlbl9VUyAtZiBJU08tODg1OS0xIGVuX1VTLklTTzg4NTktMQorbG9jYWxlZGVmIC1pIGVzX01YIC1mIElTTy04ODU5LTEgZXNfTVgKK2xvY2FsZWRlZiAtaSBmcl9GUiAtZiBJU08tODg1OS0xIGZyX0ZSCitsb2NhbGVkZWYgLWkgaXRfSVQgLWYgSVNPLTg4NTktMSBpdF9JVAorbG9jYWxlZGVmIC1pIGphX0pQIC1mIEVVQy1KUCBqYV9KUC5ldWNqcAorbG9jYWxlZGVmIC1pIHNlX05PIC1mIFVURi04IHNlX05PLlVURi04Citsb2NhbGVkZWYgLWkgdGFfSU4gLWYgVVRGLTggdGFfSU4KK2xvY2FsZWRlZiAtaSBlc19FUyAtZiBJU08tODg1OS0xIGVzX0VTCitsb2NhbGVkZWYgLWkgZnJfRlJAZXVybyAtZiBJU08tODg1OS0xIGZyX0ZSQGV1cm8KK2xvY2FsZWRlZiAtaSBpc19JUyAtZiBVVEYtOCBpc19JUy5VVEYtOAorbG9jYWxlZGVmIC1pIHpoX1RXIC1mIEJJRzUgemhfVFcuQklHNQorbG9jYWxlZGVmIC1pIGVuX1VTIC1mIElTTy04ODU5LTE1IGVuX1VTLklTTy04ODU5LTE1CisKK2VjaG8gIiIKK2VjaG8gIkluc3RhbGxhdGlvbiBkb25lISIKK2VjaG8gIiIKKworIyBTdGVwIDQ6IFN0YXJ0IExTQiB0ZXN0CitpZiBbIC14ICR7TFNCX1NUQVJUX0NNRH0gXQordGhlbgorCSR7TFNCX1NUQVJUX0NNRH0KK2ZpCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKK2VjaG8gIlJ1biBhbGwgdGhlIGNlcnRpZmljYXRpb24gdmVyc2lvbiBvZiBMU0IgVGVzdHMiCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisKK0xTQl9ESVNUX0NIRUNLRVI9Ii9vcHQvbHNiL3Rlc3QvbWFuYWdlci91dGlscy9kaXN0LWNoZWNrZXIucGwiCitTRVNTSU9OPSIke1dPUktfRElSfS9zZXNzaW9uIgoraWYgWyAhIC1lICR7U0VTU0lPTn0gXQordGhlbgorCWVjaG8gIkVycm9yOiBDb3VsZCBub3QgZmluZCBzZXNzaW9uIGZpbGUuIgorCWVjaG8gIllvdSBtdXN0IHJ1biBMU0IgdGVzdCBmcm9tIHdlYmJyb3dlci4iCisJZXhpdCAxCitmaQorCitpZiBbIC14ICR7TFNCX0RJU1RfQ0hFQ0tFUn0gXQordGhlbgorCSR7TFNCX0RJU1RfQ0hFQ0tFUn0gLXYyIC1mICR7U0VTU0lPTn0KKwljaGVjaworZmkKKworZWNobyAiIgorZWNobyAiTFNCIHRlc3QgY29tcGxldGUuIFBsZWFzZSBjaGVjayB0aGUgbG9nIGZpbGUgaW4gL3Zhci9vcHQvbHNiL3Rlc3QvbWFuYWdlci9yZXN1bHRzLyIKK2VjaG8gIiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvcGFja2FnZXNfbGlzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L3BhY2thZ2VzX2xpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdkODM1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L3BhY2thZ2VzX2xpc3QKQEAgLTAsMCArMSw1MCBAQAorTFNCX1JFTEVBU0U9InJlbGVhc2VkLTQuMS4wIgorTFNCX0FSQ0g9ImxzYmFyY2giCisKK0JBU0VfUEFDS0FHRVNfTElTVD0ibHNiLXNldHVwLTQuMS4wLTEubm9hcmNoLnJwbSIKKworUlVOVElNRV9CQVNFX1BBQ0tBR0VTX0xJU1Q9ImxzYi1kaXN0LWNoZWNrZXItNS4wLjAuMS0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGV0My1saXRlLTMuNy0yNy5sc2I1LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGV0My1saXRlLWRldmVsLTMuNy0yNy5sc2I1LnRhcmdldGFyY2gucnBtIFwKKwlsc2IteHZmYi0xLjIuMC0yMi50YXJnZXRhcmNoLnJwbSBcCisJIgorCitSVU5USU1FX1BBQ0tBR0VTX0xJU1Q9ImxzYi1jbWRjaGstNC4xLjQtNS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLWxpYmNoay00LjEuNC01LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItcW0tMi4yLTEyLmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10YXNrLWRpc3QtdGVzdGtpdC00LjEuOS0xLm5vYXJjaC5ycG0gXAorCWxzYi10ZXN0LWNvcmUtNC4xLjE1LTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LWNwcC10MmMtNC4xLjAtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtZGVza3RvcC00LjEuOS0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1kZXNrdG9wLXQyYy00LjEuMy0zLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1saWJzdGRjcHAtNC4xLjAtMTgubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3Qtb2x2ZXItY29yZS00LjEuNC0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1wZXJsLTQuMS44LTEubm9hcmNoLnJwbSBcCisJbHNiLXRlc3QtcHJpbnRpbmctNC4xLjItMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtcHl0aG9uLTQuMS41LTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LXF0My1hem92LTQuMS4xLTMudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LXF0NC1hem92LTQuMS4zLTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LXh0czUtNS4xLjUtNDUubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtYWxzYS10MmMtNC4xLjAtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtY29yZS10MmMtNC4xLjItMy50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QteG1sMi1hem92LTQuMS4wLTEudGFyZ2V0YXJjaC5ycG0gXAorCSIKKworQVBQX1BBQ0tBR0VTX0xJU1Q9ImxzYi1weXRob24tMi40LjYtNy5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItYXBhY2hlLTIuMi4xNC04LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10Y2wtOC41LjctOC5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItZXhwZWN0LTUuNDMuMC0xMy5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItZ3JvZmYtMS4yMC4xLTcubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXJhcHRvci0xLjQuMTktNS5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2IteHBkZi0xLjAxLTE0LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1zYW1iYS0zLjQuMy05LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1yc3luYy0zLjAuNi02LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCSIKKworQVBQX1RFU1RGSUxFU19MSVNUPSJleHBlY3QtdGVzdHMudGFyIFwKKwl0Y2wtdGVzdHMudGFyIFwKKwlyYXB0b3ItdGVzdHMudGFyIFwKKwl0ZXN0MS5wZGYgXAorCXRlc3QyLnBkZiBcCisJIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9zZXNzaW9uIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3Qvc2Vzc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWNhMmVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3Qvc2Vzc2lvbgpAQCAtMCwwICsxLDE5NCBAQAorW0dFTkVSQUxdCitWRVJCT1NFX0xFVkVMOiAgIDEKK0FSQ0hJVEVDVFVSRTogICAgdGFyZ2V0YXJjaAorVVNFX0lOVEVSTkVUOiAgICAxCitTVERfVkVSU0lPTjogICAgIExTQiA0LjEKK1NURF9QUk9GSUxFOiAgICAgbm8KK1tjbWRjaGtdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2xpYmNoa10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbYWxzYS10MmNdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2Fsc2EtdDJjfGxvY2FsfCpdCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9hbHNhLXQyYworQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L2Fsc2EtdDJjL3Jlc3VsdHMKKworW2NvcmVdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2NvcmV8bG9jYWx8Kl0KK0FVVE9SRVBMWV9QUk9WSURFU19CQVNIOiBuCitBVVRPUkVQTFlfVEVTVFJVTl9QQVRIOiAvaG9tZS90ZXQvdGVzdF9zZXRzCitBVVRPUkVQTFlfUEVSU09OOiBBdXRvbWF0ZWQKK0FVVE9SRVBMWV9LRVJORUxfTkFNRTogdm1saW51egorQVVUT1JFUExZX0lOU1RBTExfTFNCUEFNX0NPTkY6IHkKK0FVVE9SRVBMWV9QUk9WSURFU19DX1NIRUxMOiBuCitBVVRPUkVQTFlfT1JHQU5JU0FUSU9OOiBOL0EKK0FVVE9SRVBMWV9TRVRfUEFTU19NSU5fREFZUzogeQorQVVUT1JFUExZX1BST1ZJREVTX1NZU1ZfSU5JVDogCitBVVRPUkVQTFlfSVNOVEFMTF9ERVZTOiB5CitBVVRPUkVQTFlfU1VQUE9SVFNfRklMRV9DTUQ6IHkKK0FVVE9SRVBMWV9URVNUX1NZU1RFTTogRGlzdHJpYnV0aW9uIENoZWNrZXIKK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L2NvcmUvdGV0L3Rlc3Rfc2V0cworQVVUT1JFUExZX1NVUFBPUlRTX05MUzogbgorQVVUT1JFUExZX1NVUFBPUlRTX1BST0NFU1NfQUNDT1VOVElORzogbgorQVVUT1JFUExZX1BBVEhfVE9fUkMuRDogCitBVVRPUkVQTFlfQUxMT1dTX01BS0VERVY6IG4KK0FVVE9SRVBMWV9SRVNVTFRTX0RJUjogL29wdC9sc2IvdGVzdC9jb3JlL3RldC90ZXN0X3NldHMvcmVzdWx0cworCitbY29yZS10MmNdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2NvcmUtdDJjfGxvY2FsfCpdCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9jb3JlLXQyYworQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L2NvcmUtdDJjL3Jlc3VsdHMKKworW2NwcC10MmNdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2NwcC10MmN8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L2NwcC10MmMKK0FVVE9SRVBMWV9SRVNVTFRTX0RJUjogL29wdC9sc2IvdGVzdC9jcHAtdDJjL3Jlc3VsdHMKKworW2Rlc2t0b3BdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2Rlc2t0b3B8bG9jYWx8Kl0KK0FVVE9SRVBMWV9ERVNLVE9QX0VOVklST05NRU5UOiBbZGVmYXVsdF0KK0FVVE9SRVBMWV9QRVJTT046IEF1dG9tYXRlZAorQVVUT1JFUExZX1hfQ0xJRU5UX0hPU1ROQU1FOiAKK0FVVE9SRVBMWV9URVNUX1NZU1RFTTogRGlzdHJpYnV0aW9uIENoZWNrZXIKK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L2Rlc2t0b3AKK0FVVE9SRVBMWV9YMTFfRk9OVF9QQVRIOiBbZGVmYXVsdF0KK0FVVE9SRVBMWV9TSE9XX1NVTU1BUllfUkVQT1JUOiAKK0FVVE9SRVBMWV9PUkdBTklTQVRJT046IE4vQQorQVVUT1JFUExZX1hWRkJfRElTUExBWTogW2RlZmF1bHRdCisKK1tkZXNrdG9wLXQyY10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbZGVza3RvcC10MmN8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L2Rlc2t0b3AtdDJjCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvZGVza3RvcC10MmMvcmVzdWx0cworCitbbGlic3RkY3BwXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tsaWJzdGRjcHB8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUX1NZU1RFTTogRGlzdHJpYnV0aW9uIENoZWNrZXIKK0FVVE9SRVBMWV9QRVJTT046IEF1dG9tYXRlZAorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvbGlic3RkY3BwXzQuMS4wCitBVVRPUkVQTFlfT1JHQU5JU0FUSU9OOiBOL0EKK0FVVE9SRVBMWV9HTlVfVFJJUExFVDogCisKK1tvbHZlcl0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbb2x2ZXJ8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L29sdmVyLWNvcmUKK0FVVE9SRVBMWV9SRVNVTFRTX0RJUjogL3Zhci9vcHQvbHNiL3Rlc3Qvb2x2ZXItY29yZQorCitbcGVybF0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbcGVybHxsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvcGVybAorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L3BlcmwvcmVzdWx0cworCitbcHJpbnRpbmddCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW3ByaW50aW5nfGxvY2FsfCpdCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9wcmludGluZworQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L3ByaW50aW5nL3Jlc3VsdHMKKworW3B5dGhvbl0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbcHl0aG9ufGxvY2FsfCpdCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9weXRob24KK0FVVE9SRVBMWV9SRVNVTFRTX0RJUjogL29wdC9sc2IvdGVzdC9weXRob24vcmVzdWx0cworCitbcXQzLWF6b3ZdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW3F0My1hem92fGxvY2FsfCpdCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9xdDMtYXpvdgorQVVUT1JFUExZX1gxMV9GT05UX1BBVEg6IFtkZWZhdWx0XQorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L3F0My1hem92L3Jlc3VsdHMKKworW3F0NC1hem92XQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1txdDQtYXpvdnxsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvcXQ0LWF6b3YKK0FVVE9SRVBMWV9YMTFfRk9OVF9QQVRIOiBbZGVmYXVsdF0KK0FVVE9SRVBMWV9SRVNVTFRTX0RJUjogL29wdC9sc2IvdGVzdC9xdDQtYXpvdi9yZXN1bHRzCisKK1t4bWwyLWF6b3ZdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW3h0czVdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW3h0czV8bG9jYWx8Kl0KK0FVVE9SRVBMWV9YVF9GT05UUEFUSF9HT09EOiBbZGVmYXVsdF0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L3h0czUKK0FVVE9SRVBMWV9YVkZCX0RJU1BMQVk6IFtkZWZhdWx0XQorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L3h0czUveHRzNS9yZXN1bHRzCitBVVRPUkVQTFlfWFRfRk9OVFBBVEg6IFtkZWZhdWx0XQorQVVUT1JFUExZX1hfQ0xJRU5UX0hPU1ROQU1FOiAKKworW2FwYWNoZV0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbZXhwZWN0XQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tncm9mZl0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbcmFwdG9yXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tyc3luY10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbc2FtYmFdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW3RjbF0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbeHBkZl0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdF8xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdF8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWExMjUwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0XzEuMC5iYgpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIkF1dG9tYXRlcyBMaW51eCBTdGFuZGFyZCBCYXNlIChMU0IpIHRlc3RzIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK1BSID0gInIzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MU0JfVGVzdC5zaDtiZWdpbmxpbmU9MztlbmRsaW5lPTE2O21kNT03MDYzYmI1NGIwNDcxOWRmMDcxNmI1MTM0NDdmNGZjMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vTFNCX1Rlc3Quc2ggXAorCQkgICBmaWxlOi8vcGFja2FnZXNfbGlzdCBcCisJCSAgIGZpbGU6Ly9zZXNzaW9uIFwKKwkJICAgIgorUkRFUEVORFNfJHtQTn0gPSAicnBtIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7U30vTFNCX1Rlc3Quc2ggJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLWQgICR7RH0vb3B0L2xzYi10ZXN0CisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vcGFja2FnZXNfbGlzdCAke0R9L29wdC9sc2ItdGVzdC9wYWNrYWdlc19saXN0CisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vc2Vzc2lvbiAke0R9L29wdC9sc2ItdGVzdC9zZXNzaW9uCisJaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gImk1ODYiIF0gfHwgWyAiJHtUQVJHRVRfQVJDSH0iID0gImk2ODYiIF07dGhlbgorCQlzZWQgLWkgLWUgJ3MvbHNiYXJjaC9pYTMyL2cnIC1lICdzL3RhcmdldGFyY2gvaTQ4Ni9nJyAke0R9L29wdC9sc2ItdGVzdC9wYWNrYWdlc19saXN0CisJCXNlZCAtaSAtZSAncy90YXJnZXRhcmNoL3g4Ni9nJyAke0R9L29wdC9sc2ItdGVzdC9zZXNzaW9uCisJZmkKKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiBdO3RoZW4KKwkJc2VkIC1pIC1lICdzL2xzYmFyY2gvYW1kNjQvZycgLWUgJ3MvdGFyZ2V0YXJjaC94ODZfNjQvZycgJHtEfS9vcHQvbHNiLXRlc3QvcGFja2FnZXNfbGlzdAorCQlzZWQgLWkgLWUgJ3MvdGFyZ2V0YXJjaC94ODYtNjQvZycgJHtEfS9vcHQvbHNiLXRlc3Qvc2Vzc2lvbgorCWZpCisJaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gInBvd2VycGMiIF07dGhlbgorCQlzZWQgLWkgLWUgJ3MvbHNiYXJjaC9wcGMzMi9nJyAtZSAncy90YXJnZXRhcmNoL3BwYy9nJyAke0R9L29wdC9sc2ItdGVzdC9wYWNrYWdlc19saXN0CisJCXNlZCAtaSAtZSAncy90YXJnZXRhcmNoL1BQQzMyL2cnICR7RH0vb3B0L2xzYi10ZXN0L3Nlc3Npb24KKwlmaQorCisJIyBGb3IgYSBwcGM2NCB0YXJnZXQuIHRoZSBkZWZhdWx0IHVzZXJzcGFjZSBpcyAzMmIuCisJIyBUaGVyZWZvcmUsIG9ubHkgY2hhbmdlIHRoZSBsc2JhcmNoIGFuZCB0YXJnZXRhcmNoCisJIyBpbiB0aGUgcGFja2FnZV9saXN0IHdoZW4gTUxJQj1saWI2NCBpcyBiZWluZyB1c2VkLgorCSMgT3RoZXJ3aXNlLCBieSBkZWZhdWx0LCB0aGUgcHBjMzIgTFNCIHBhY2thZ2VzCisJIyB3aWxsIGJlIGRvd25sb2FkZWQgYnkgTFNCX1Rlc3Quc2gKKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYzY0IiBdO3RoZW4KKwkJaWYgWyAiJHtQTn0iICE9ICIke0JQTn0iIF07dGhlbgorCQkJc2VkIC1pIC1lICdzL2xzYmFyY2gvcHBjNjQvZycgLWUgJ3MvdGFyZ2V0YXJjaC9wcGM2NC9nJyAke0R9L29wdC9sc2ItdGVzdC9wYWNrYWdlc19saXN0CisJCQlzZWQgLWkgLWUgJ3MvdGFyZ2V0YXJjaC9QUEM2NC9nJyAke0R9L29wdC9sc2ItdGVzdC9zZXNzaW9uCisJCWZpCisJZmkKK30KKworRklMRVNfJHtQTn0gKz0gIi9vcHQvbHNiLXRlc3QvKiBcCisgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc29mL2xzb2ZfNC44OS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzb2YvbHNvZl80Ljg5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliN2RlOWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc29mL2xzb2ZfNC44OS5iYgpAQCAtMCwwICsxLDU3IEBACitTVU1NQVJZID0gIkxpU3QgT3BlbiBGaWxlcyB0b29sIgorREVTQ1JJUFRJT04gPSAiTHNvZiBpcyBhIFVuaXgtc3BlY2lmaWMgZGlhZ25vc3RpYyB0b29sLiBcCitJdHMgbmFtZSBzdGFuZHMgZm9yIExpU3QgT3BlbiBGaWxlcywgYW5kIGl0IGRvZXMganVzdCB0aGF0LiIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkJTRCIKKworU1JDX1VSSSA9ICJmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mL2xzb2ZfJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gIjFiOWNkMzRmM2ZiODY4NTZhMTI1YWJiZjJiZTNhMzg2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgxYWMyZmM1ZmRjOTQ0NzkzYmFmNDFhMTQwMDJiNmRlYjVhMjkwOTZiMzg3NzQ0ZTI4ZjhjMzBhMzYwYTM3MTgiCisKK0xPQ0FMU1JDID0gImZpbGU6Ly8ke1dPUktESVJ9L2xzb2ZfJHtQVn0vbHNvZl8ke1BWfV9zcmMudGFyIgorUyA9ICIke1dPUktESVJ9L2xzb2ZfJHtQVn1fc3JjIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1N9LzAwUkVBRE1FO2JlZ2lubGluZT02NDU7ZW5kbGluZT02Nzk7bWQ1PTk2NGRmMjc1ZDI2NDI5YmEzYjM5ZGJiOWYyMDUxNzJhIgorCitweXRob24gZG9fdW5wYWNrICgpIHsKKyAgICAjIHRlbXBvcmFyaWx5IGNoYW5nZSBTIGZvciB1bnBhY2sKKyAgICAjIG9mIGxzb2ZfJHtQVn0KKyAgICBzID0gZC5nZXRWYXIoJ1MnLCBGYWxzZSkKKyAgICBkLnNldFZhcignUycsICcke1dPUktESVJ9L2xzb2ZfJHtQVn0nKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnYmFzZV9kb191bnBhY2snLCBkKQorICAgICMgdGVtcG9yYXJpbHkgY2hhbmdlIFNSQ19VUkkgZm9yIHVucGFjaworICAgICMgb2YgbHNvZl8ke1BWfV9zcmMKKyAgICBzcmNfdXJpID0gZC5nZXRWYXIoJ1NSQ19VUkknLCBGYWxzZSkKKyAgICBkLnNldFZhcignU1JDX1VSSScsICcke0xPQ0FMU1JDfScpCisgICAgZC5zZXRWYXIoJ1MnLCBzKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnYmFzZV9kb191bnBhY2snLCBkKQorICAgIGQuc2V0VmFyKCdTUkNfVVJJJywgc3JjX3VyaSkKK30KKworZXhwb3J0IExTT0ZfSU5DTFVERSA9ICIke1NUQUdJTkdfSU5DRElSfSIKKworZG9fY29uZmlndXJlICgpIHsKKwlleHBvcnQgTFNPRl9BUj0iJHtBUn0gY3IiCisJZXhwb3J0IExTT0ZfUkFOTElCPSIke1JBTkxJQn0iCisgICAgICAgIGlmIFsgIngke0dMSUJDVkVSU0lPTn0iICE9ICJ4IiBdO3RoZW4KKyAgICAgICAgICAgICAgICBMSU5VWF9DTElCPWBlY2hvICR7R0xJQkNWRVJTSU9OfSB8c2VkIC1lICdzLFwuLCxnJ2AKKyAgICAgICAgICAgICAgICBMSU5VWF9DTElCPSItREdMSUJDVj0ke0xJTlVYX0NMSUJ9IgorICAgICAgICAgICAgICAgIGV4cG9ydCBMSU5VWF9DTElCCisgICAgICAgIGZpCisJeWVzIHwgLi9Db25maWd1cmUgbGludXgKK30KKworZXhwb3J0IEkgPSAiJHtTVEFHSU5HX0lOQ0RJUn0iCitleHBvcnQgTCA9ICIke1NUQUdJTkdfSU5DRElSfSIKK2V4cG9ydCBFWFRSQV9PRU1BS0UgPSAiIgorCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlICdDQz0ke0NDfScgJ0NGR0w9JHtMREZMQUdTfSAtTC4vbGliIC1sbHNvZicgJ0RFQlVHPScgJ0lOQ0w9JHtDRkxBR1N9JworfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9ICR7RH0ke21hbmRpcn0vbWFuOAorCWluc3RhbGwgLW0gNDc1NSBsc29mICR7RH0ke3NiaW5kaXJ9L2xzb2YKKwlpbnN0YWxsIC1tIDA2NDQgbHNvZi44ICR7RH0ke21hbmRpcn0vbWFuOC9sc29mLjgKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS1SZW5hbWUtcnVudGVzdHNfbm9sdHAuc2gtc2NyaXB0LXNvLWhhdmUtdW5pcXVlLW5hbWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDEtUmVuYW1lLXJ1bnRlc3RzX25vbHRwLnNoLXNjcmlwdC1zby1oYXZlLXVuaXF1ZS1uYW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNGQyMzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDEtUmVuYW1lLXJ1bnRlc3RzX25vbHRwLnNoLXNjcmlwdC1zby1oYXZlLXVuaXF1ZS1uYW1lLnBhdGNoCkBAIC0wLDAgKzEsMjAyIEBACitGcm9tIDk3NTFhNjUyNmNmZmNkZjRlM2RjMmNiMzM2NDEyNTlhN2JlMDBlMTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDcgRGVjIDIwMTMgMTg6MjQ6MzIgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmVuYW1lIHJ1bnRlc3RzX25vbHRwLnNoIHNjcmlwdCBzbyBoYXZlIHVuaXF1ZSBuYW1lCisKKyogdGhleSBhcmUgaW5zdGFsbGVkIGluIHRoZSBzYW1lIHRhcmdldCBwYXRoCisgIC9vcHQvbHRwL3Rlc3RjYXNlcy9iaW4vcnVudGVzdHNfbm9sdHAuc2gKKyAgYW5kIG92ZXJ3cml0ZSBlYWNoIG90aGVyIGluIG5vbi1kZXRlcm1pbmlzdGljIHdheQorICB3aGVuIG11bHRpcGxlIHByb2Nlc3NlcyBhcmUgdXNlZCBpbiAibWFrZSBpbnN0YWxsIgorCisgIC4vdGVtcC9sb2cuZG9faW5zdGFsbDppbnN0YWxsIC1tIDAwNzc1CisgICAgImx0cC8yMDEyMDkwMy1yMi9sdHAtMjAxMjA5MDMvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3N5c3ZpcGMvcnVudGVzdHNfbm9sdHAuc2giCisgICAgImx0cC8yMDEyMDkwMy1yMi9pbWFnZS9vcHQvbHRwL3Rlc3RjYXNlcy9iaW4vcnVudGVzdHNfbm9sdHAuc2giCisgIC4vdGVtcC9sb2cuZG9faW5zdGFsbDppbnN0YWxsIC1tIDAwNzc1CisgICAgImx0cC8yMDEyMDkwMy1yMi9sdHAtMjAxMjA5MDMvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3V0c25hbWUvcnVudGVzdHNfbm9sdHAuc2giCisgICAgImx0cC8yMDEyMDkwMy1yMi9pbWFnZS9vcHQvbHRwL3Rlc3RjYXNlcy9iaW4vcnVudGVzdHNfbm9sdHAuc2giCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyAuLi4va2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW5pcGN0ZXN0c19ub2x0cC5zaCB8IDMxICsrKysrKysrKysrKysrKysKKyAuLi4va2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW50ZXN0c19ub2x0cC5zaCAgICB8IDMxIC0tLS0tLS0tLS0tLS0tLS0KKyAuLi4va2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW50ZXN0c19ub2x0cC5zaCAgICB8IDQxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAuLi4va2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW51dHN0ZXN0c19ub2x0cC5zaCB8IDQxICsrKysrKysrKysrKysrKysrKysrKysKKyA0IGZpbGVzIGNoYW5nZWQsIDcyIGluc2VydGlvbnMoKyksIDcyIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW5pcGN0ZXN0c19ub2x0cC5zaAorIGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW50ZXN0c19ub2x0cC5zaAorIGRlbGV0ZSBtb2RlIDEwMDc1NSB0ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW50ZXN0c19ub2x0cC5zaAorIGNyZWF0ZSBtb2RlIDEwMDc1NSB0ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW51dHN0ZXN0c19ub2x0cC5zaAorCitkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3N5c3ZpcGMvcnVuaXBjdGVzdHNfbm9sdHAuc2ggYi90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW5pcGN0ZXN0c19ub2x0cC5zaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg0ZjM5OGYKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bmlwY3Rlc3RzX25vbHRwLnNoCitAQCAtMCwwICsxLDMxIEBACisrIyEvYmluL3NoCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDcgICAgICAgICAgICAgICAgICMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZCNvciBtb2RpZnkgICAgICAjIworKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICAgICMjCisrIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgICAgIyMKKysjIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCAgICAgICAgIyMKKysjIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSAjIworKyMjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICMjCisrIyMgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICAgICMjCisrIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICAgIyMKKysjIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBICAgICMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKworK2V4aXRfY29kZT0wCisrZWNobyAic3lzdmlwYyB0ZXN0cyIKKytmb3IgdHlwZSBpbiBub25lIGNsb25lIHVuc2hhcmU7IGRvCisrICAgICAgZWNobyAiKipzeXN2aXBjICR0eXBlIgorKyAgICAgIC4vc2htbnN0ZXN0X25vbHRwICR0eXBlCisrICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisrICAgICAgICAgICAgICBleGl0X2NvZGU9JD8KKysgICAgICBmaQorK2RvbmUKKytleGl0ICRleGl0X2NvZGUKK2RpZmYgLS1naXQgYS90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW50ZXN0c19ub2x0cC5zaCBiL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bnRlc3RzX25vbHRwLnNoCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDg0ZjM5OGYuLjAwMDAwMDAKKy0tLSBhL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bnRlc3RzX25vbHRwLnNoCisrKysgL2Rldi9udWxsCitAQCAtMSwzMSArMCwwIEBACistIyEvYmluL3NoCistIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDcgICAgICAgICAgICAgICAgICMjCistIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZCNvciBtb2RpZnkgICAgICAjIworLSMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICAgICMjCistIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgICAgIyMKKy0jIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCAgICAgICAgIyMKKy0jIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSAjIworLSMjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICMjCistIyMgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICAgICMjCistIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICAgIyMKKy0jIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBICAgICMjCistIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLQorLWV4aXRfY29kZT0wCistZWNobyAic3lzdmlwYyB0ZXN0cyIKKy1mb3IgdHlwZSBpbiBub25lIGNsb25lIHVuc2hhcmU7IGRvCistICAgICAgZWNobyAiKipzeXN2aXBjICR0eXBlIgorLSAgICAgIC4vc2htbnN0ZXN0X25vbHRwICR0eXBlCistICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCistICAgICAgICAgICAgICBleGl0X2NvZGU9JD8KKy0gICAgICBmaQorLWRvbmUKKy1leGl0ICRleGl0X2NvZGUKK2RpZmYgLS1naXQgYS90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW50ZXN0c19ub2x0cC5zaCBiL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnRlc3RzX25vbHRwLnNoCitkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKK2luZGV4IDQzY2I3ZTIuLjAwMDAwMDAKKy0tLSBhL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnRlc3RzX25vbHRwLnNoCisrKysgL2Rldi9udWxsCitAQCAtMSw0MSArMCwwIEBACistIyEvYmluL3NoCistIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDcgICAgICAgICAgICAgICAgICMjCistIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZCNvciBtb2RpZnkgICAgICAjIworLSMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICAgICMjCistIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgICAgIyMKKy0jIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCAgICAgICAgIyMKKy0jIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSAjIworLSMjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICMjCistIyMgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICAgICMjCistIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICAgIyMKKy0jIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBICAgICMjCistIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLQorLW9sZGhvc3RuYW1lPWBob3N0bmFtZWAKKy1leGl0X2NvZGU9MAorLWVjaG8gInVuc2hhcmUgdGVzdHMiCistZm9yIGkgaW4gYHNlcSAxIDVgOyBkbworLQllY2hvICJ0ZXN0ICRpICh1bnNoYXJlKSIKKy0JLi91dHN0ZXN0X25vbHRwIHVuc2hhcmUgJGkKKy0JaWYgWyAkPyAtbmUgMCBdOyB0aGVuCistCQlleGl0X2NvZGU9JD8KKy0JZmkKKy1kb25lCistZWNobyAiY2xvbmUgdGVzdHMiCistZm9yIGkgaW4gYHNlcSAxIDVgOyBkbworLQllY2hvICJ0ZXN0ICRpIChjbG9uZSkiCistCS4vdXRzdGVzdF9ub2x0cCBjbG9uZSAkaQorLQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKy0JCWV4aXRfY29kZT0kPworLQlmaQorLWRvbmUKKy1ob3N0bmFtZSAiJG9sZGhvc3RuYW1lIgorLWV4aXQgJGV4aXRfY29kZQorZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnV0c3Rlc3RzX25vbHRwLnNoIGIvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3V0c25hbWUvcnVudXRzdGVzdHNfbm9sdHAuc2gKK25ldyBmaWxlIG1vZGUgMTAwNzU1CitpbmRleCAwMDAwMDAwLi40M2NiN2UyCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW51dHN0ZXN0c19ub2x0cC5zaAorQEAgLTAsMCArMSw0MSBAQAorKyMhL2Jpbi9zaAorKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDA3ICAgICAgICAgICAgICAgICAjIworKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQjb3IgbW9kaWZ5ICAgICAgIyMKKysjIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAgICAjIworKyMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICAgICMjCisrIyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgICAgICAgICMjCisrIyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgIyMKKysjIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAjIworKyMjIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAgICAjIworKyMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAgICMjCisrIyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSAgICAjIworKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysKKytvbGRob3N0bmFtZT1gaG9zdG5hbWVgCisrZXhpdF9jb2RlPTAKKytlY2hvICJ1bnNoYXJlIHRlc3RzIgorK2ZvciBpIGluIGBzZXEgMSA1YDsgZG8KKysJZWNobyAidGVzdCAkaSAodW5zaGFyZSkiCisrCS4vdXRzdGVzdF9ub2x0cCB1bnNoYXJlICRpCisrCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorKwkJZXhpdF9jb2RlPSQ/CisrCWZpCisrZG9uZQorK2VjaG8gImNsb25lIHRlc3RzIgorK2ZvciBpIGluIGBzZXEgMSA1YDsgZG8KKysJZWNobyAidGVzdCAkaSAoY2xvbmUpIgorKwkuL3V0c3Rlc3Rfbm9sdHAgY2xvbmUgJGkKKysJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisrCQlleGl0X2NvZGU9JD8KKysJZmkKKytkb25lCisraG9zdG5hbWUgIiRvbGRob3N0bmFtZSIKKytleGl0ICRleGl0X2NvZGUKKy0tIAorMS44LjQuMworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDEtbHRwLXZtYTAzLWZpeC10aGUtYWxnaW5tZW50LW9mLXBhZ2Utc2l6ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS1sdHAtdm1hMDMtZml4LXRoZS1hbGdpbm1lbnQtb2YtcGFnZS1zaXplLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNWVhZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDEtbHRwLXZtYTAzLWZpeC10aGUtYWxnaW5tZW50LW9mLXBhZ2Utc2l6ZS5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDI0Mzg4MWQ3MWQyZDQ5MDI3YzNkYzE1ZmUyN2ViZTdmNGVlNjg3MDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaHVhbmcgRG9uZyA8Q2h1YW5nLkRvbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTAgSnVuIDIwMTUgMDk6NTE6MDkgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gbHRwOiB2bWEwMyBmaXggdGhlIGFsZ2lubWVudCBvZiBwYWdlIHNpemUKKwordGhlIG9mZnNldCB0aGUgcGFyYW0gb2YgbW1hcDIoKSBkb2Vzbid0IGFsaWduIHRoZSBwYWdlIHNpemUsIGJ1dCwKK3RoaXMgcGFyYW0gYWxsb3cgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBwYWdlIHNpemUgYXMgcmV0dXJuZWQKK2J5IHN5c2NvbmYoX1NDX1BBR0VfU0laRSkubWVhbndoaWxlIG9mZnNldCAqIDQwOTYgbXVzdCBiZSBhCittdWx0aXBsZSBvZiB0aGUgc3lzdGVtIHBhZ2Ugc2l6ZSwgc28gbW9kaWZ5IHRoZSBpbnB1dCBwYXJhbSBvZiBvZmZzZXQKK3Bnb2ZmID0gKFVMT05HX01BWCAtIDEpJih+KChwZ3N6LTEpPj4xMikpOworCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBDaHVhbmcgRG9uZyA8Q2h1YW5nLkRvbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRlc3RjYXNlcy9rZXJuZWwvbWVtL3ZtYS92bWEwMy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL2tlcm5lbC9tZW0vdm1hL3ZtYTAzLmMgYi90ZXN0Y2FzZXMva2VybmVsL21lbS92bWEvdm1hMDMuYworaW5kZXggNmFmOTk2MC4uYjg2ZDdjZSAxMDA2NDQKKy0tLSBhL3Rlc3RjYXNlcy9rZXJuZWwvbWVtL3ZtYS92bWEwMy5jCisrKysgYi90ZXN0Y2FzZXMva2VybmVsL21lbS92bWEvdm1hMDMuYworQEAgLTg5LDcgKzg5LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJCWlmIChmZCA9PSAtMSkKKyAJCQl0c3RfYnJrbShUQlJPSyB8IFRFUlJOTywgTlVMTCwgIm9wZW4gJXMiLCBURVNURklMRSk7CisgCistCQlwZ29mZiA9IFVMT05HX01BWCAtIDE7CisrCQlwZ29mZiA9IChVTE9OR19NQVggLSAxKSYofigocGdzei0xKT4+MTIpKTsKKyAJCW1hcCA9IG1tYXAyKE5VTEwsIHBnc3osIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFLAorIAkJCSAgICBmZCwgcGdvZmYpOworIAkJaWYgKG1hcCA9PSBNQVBfRkFJTEVEKQorLS0gCisxLjguNS4yLjIzMy5nOTMyZjdlNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL2FkZC1rbm9iLWZvci1udW1hLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9hZGQta25vYi1mb3ItbnVtYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjRmMDBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9hZGQta25vYi1mb3ItbnVtYS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitbUEFUQ0hdIGFkZCBrbm9iIHRvIGNvbnRyb2wgd2hldGhlciBudW1hIHN1cHBvcnQgc2hvdWxkIGJlIGNoZWNrZWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK290aGVyd2lzZSB0aGUgcmFuZG9tIGRlcGVuZGVuY3kgd2lsbCBiZSBnZW5lcmF0ZWQKKworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICstCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5ZjM5N2U3Li4xMzU3MjU2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNDIsNiArMTQyLDEyIEBAIGVsc2UKKyAgICAgQUNfU1VCU1QoW1dJVEhfUkVBTFRJTUVfVEVTVFNVSVRFXSxbIm5vIl0pCisgZmkKKyAKKytBQ19BUkdfV0lUSChbbnVtYV0sCisrICBBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LW51bWFdLAorKyAgICBbd2l0aG91dCB0aGUgbnVtYSBzdXBwb3J0XSksCisrICBbXSxbd2l0aF9udW1hPXllc10sCisrKQorKworIEFDX0NPTkZJR19TVUJESVJTKFt1dGlscy9mZnNiLTYuMC1yYzJdKQorIAorICMgRU5EIHRlc3RzdWl0ZXMga25vYnMKK0BAIC0xNTksNyArMTY1LDkgQEAgTFRQX0NIRUNLX1NJR05BTAorIExUUF9DSEVDS19TWVNDQUxMX0VWRU5URkQKKyBMVFBfQ0hFQ0tfU1lTQ0FMTF9LRVlDVEwKKyBMVFBfQ0hFQ0tfU1lTQ0FMTF9NT0RJRllfTERUCisraWYgdGVzdCAieCR3aXRoX251bWEiID0geHllczsgdGhlbgorIExUUF9DSEVDS19TWVNDQUxMX05VTUEKKytmaQorIExUUF9DSEVDS19TWVNDQUxMX1FVT1RBQ1RMCisgTFRQX0NIRUNLX1NZU0NBTExfU0lHTkFMRkQKKyBMVFBfQ0hFQ0tfU1lTQ0FMTF9VTlNIQVJFCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvYWRkLWtub2ItZm9yLXRpcnBjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9hZGQta25vYi1mb3ItdGlycGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZmZjRjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvYWRkLWtub2ItZm9yLXRpcnBjLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1tQQVRDSF0gYWRkIGtub2IgdG8gY29udHJvbCB3aGV0aGVyIHRpcnBjIHN1cHBvcnQgc2hvdWxkIGJlIGNoZWNrZWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3RpcnBjIHN1cHBvcnQgaXMgYnJva2VuIHVwc3RyZWFtLiBpbiB0aGUgbWVhbnRpbWUsIGFsbG93IHRvIGRpc2FibGUgdGlycGMuCisKK1NpZ25lZC1vZmYtYnk6IEZhdGhpIEJvdWRyYSA8ZmF0aGkuYm91ZHJhQGxpbmFyby5vcmc+CistLS0KKyBjb25maWd1cmUuYWMgfCAgICA5ICsrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC05OCw2ICs5OCwxMyBAQCBpZiB0ZXN0ICJ4JHdpdGhfcHl0aG9uIiA9IHh5ZXM7IHRoZW4KKyBlbHNlCisgICAgIEFDX1NVQlNUKFtXSVRIX1BZVEhPTl0sWyJubyJdKQorIGZpCisrCisrIyBUSSBSUEMKKytBQ19BUkdfV0lUSChbdGlycGNdLAorKyAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC10aXJwY10sCisrICAgIFt3aXRob3V0IGxpYnRpcnBjIHN1cHBvcnRdKSwKKysgIFtdLFt3aXRoX3RpcnBjPXllc10sCisrKQorICMgRU5EIHRvb2xzIGtub2JzCisgCisgIyBUZXN0c3VpdGVzIGtub2JzCitAQCAtMTgyLDcgKzE4OSw5IEBAIExUUF9DSEVDS19SRU5BTUVBVAorIExUUF9DSEVDS19GQUxMT0NBVEUKKyBMVFBfQ0hFQ0tfU1lTQ0FMTF9GQ05UTAorIExUUF9DSEVDS19TWVNDQUxMX1BFUkZfRVZFTlRfT1BFTgorK2lmIHRlc3QgIngkd2l0aF90aXJwYyIgPSB4eWVzOyB0aGVuCisgTFRQX0NIRUNLX1RJUlBDCisrZmkKKyBMVFBfQ0hFQ0tfVEVFCisgTFRQX0NIRUNLX1NQTElDRQorIExUUF9DSEVDS19WTVNQTElDRQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9sdHAtRG8tbm90LWxpbmstYWdhaW5zdC1saWJmbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvbHRwLURvLW5vdC1saW5rLWFnYWluc3QtbGliZmwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmZDRjMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvbHRwLURvLW5vdC1saW5rLWFnYWluc3QtbGliZmwucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSA1YmRhOWMwYWY1Njg2OWM2ZmYyYzI1ZDM4ZWEwODcxNzljOTQ2YmM2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDExIE1hciAyMDE0IDE0OjQ3OjIyICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGx0cDogRG9uJ3QgbGluayBhZ2FpbnN0IGxpYmZsCisKK1dlIGhhdmUgYWxyZWFkeSBkZWZpbmVkIHl5d3JhcCBmdW5jdGlvbiBpbiBzY2FuLmwgZmlsZS4gQWZ0ZXIgdGhpcywgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8KK2xpbmsgYWdhaW5zdCBsaWJmbCBhbmQgc28gbm8gbG9uZ2VyIGdldCBlcnJvcnMgYWJvdXQgdW5kZWZpbmVkIHJlZmVyZW5jZXMgdG8geXlsZXguCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHBhbi9NYWtlZmlsZSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Bhbi9NYWtlZmlsZSBiL3Bhbi9NYWtlZmlsZQoraW5kZXggNGNjNjQ2Ni4uYTRiNTc1YiAxMDA2NDQKKy0tLSBhL3Bhbi9NYWtlZmlsZQorKysrIGIvcGFuL01ha2VmaWxlCitAQCAtMzEsNyArMzEsNyBAQCBDUFBGTEFHUwkJKz0gLVduby1lcnJvcgorIAorIENQUEZMQUdTCQkrPSAtSSQoYWJzX3NyY2RpcikKKyAKKy1MRExJQlMJCQkrPSAtbG0gJChMRVhMSUIpCisrTERMSUJTCQkJKz0gLWxtCisgCisgTEZMQUdTCQkJKz0gLWwKKyAKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL21ha2Utc2V0cmVnaWQwMi13b3JrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9tYWtlLXNldHJlZ2lkMDItd29yay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODM2MDEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9tYWtlLXNldHJlZ2lkMDItd29yay5wYXRjaApAQCAtMCwwICsxLDYxIEBACitbUEFUQ0hdIG1ha2Ugc2V0cmVnaWQwMiB3b3JrCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKwordGhlcmUgaXMgbm8gIm5vYm9keSIgZ3JvdXAgaW4gb2UtY29yZSwgdGhlIHVzZXIgIm5vYm9keSIgYmVsb25ncyB0bworIm5vZ3JvdXAiIGdyb3VwLCBzbyByZXBsYWNlIG5vYm9keSB3aXRoIG5vZ3JvdXAgdG8gbWFrZSB0aGUgdGVzdCBwYXNzCisKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvc2V0cmVnaWQvc2V0cmVnaWQwMi5jIHwgMTYgKysrKysrKystLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3NldHJlZ2lkL3NldHJlZ2lkMDIuYyBiL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvc2V0cmVnaWQvc2V0cmVnaWQwMi5jCitpbmRleCA4MDU4NjI3Li44NjZiZWU0IDEwMDY0NAorLS0tIGEvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9zZXRyZWdpZC9zZXRyZWdpZDAyLmMKKysrKyBiL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvc2V0cmVnaWQvc2V0cmVnaWQwMi5jCitAQCAtNDEsNyArNDEsNyBAQCBzdGF0aWMgZ2lkX3QgbmVnX29uZSA9IC0xOworIAorIHN0YXRpYyBzdHJ1Y3QgcGFzc3dkICpsdHB1c2VyOworIAorLXN0YXRpYyBzdHJ1Y3QgZ3JvdXAgbm9ib2R5LCByb290LCBiaW47Cisrc3RhdGljIHN0cnVjdCBncm91cCBub2dyb3VwLCByb290LCBiaW47CisgCisgLyoKKyAgKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBjb250YWlucyBhbGwgdGVzdCBkYXRhLiAgRWFjaCBzdHJ1Y3R1cmUgaW4gdGhlIGFycmF5CitAQCAtNTcsMTcgKzU3LDE3IEBAIHN0cnVjdCB0ZXN0X2RhdGFfdCB7CisgCWNoYXIgKnRlc3RfbXNnOworIH0gdGVzdF9kYXRhW10gPSB7CisgCXsKKy0JJm5lZ19vbmUsICZyb290LmdyX2dpZCwgRVBFUk0sICZub2JvZHksICZub2JvZHksCisrCSZuZWdfb25lLCAmcm9vdC5ncl9naWQsIEVQRVJNLCAmbm9ncm91cCwgJm5vZ3JvdXAsCisgCQkgICAgIkFmdGVyIHNldHJlZ2lkKC0xLCByb290KSwifSwgeworLQkmbmVnX29uZSwgJmJpbi5ncl9naWQsIEVQRVJNLCAmbm9ib2R5LCAmbm9ib2R5LAorKwkmbmVnX29uZSwgJmJpbi5ncl9naWQsIEVQRVJNLCAmbm9ncm91cCwgJm5vZ3JvdXAsCisgCQkgICAgIkFmdGVyIHNldHJlZ2lkKC0xLCBiaW4pIn0sIHsKKy0JJnJvb3QuZ3JfZ2lkLCAmbmVnX29uZSwgRVBFUk0sICZub2JvZHksICZub2JvZHksCisrCSZyb290LmdyX2dpZCwgJm5lZ19vbmUsIEVQRVJNLCAmbm9ncm91cCwgJm5vZ3JvdXAsCisgCQkgICAgIkFmdGVyIHNldHJlZ2lkKHJvb3QsLTEpLCJ9LCB7CistCSZiaW4uZ3JfZ2lkLCAmbmVnX29uZSwgRVBFUk0sICZub2JvZHksICZub2JvZHksCisrCSZiaW4uZ3JfZ2lkLCAmbmVnX29uZSwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQoYmluLCAtMSksIn0sIHsKKy0JJnJvb3QuZ3JfZ2lkLCAmYmluLmdyX2dpZCwgRVBFUk0sICZub2JvZHksICZub2JvZHksCisrCSZyb290LmdyX2dpZCwgJmJpbi5ncl9naWQsIEVQRVJNLCAmbm9ncm91cCwgJm5vZ3JvdXAsCisgCQkgICAgIkFmdGVyIHNldHJlZ2lkKHJvb3QsIGJpbikifSwgeworLQkmYmluLmdyX2dpZCwgJnJvb3QuZ3JfZ2lkLCBFUEVSTSwgJm5vYm9keSwgJm5vYm9keSwKKysJJmJpbi5ncl9naWQsICZyb290LmdyX2dpZCwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQoYmluLCByb290KSwifQorIH07CisgCitAQCAtMTY1LDcgKzE2NSw3IEBAIHN0YXRpYyB2b2lkIHNldHVwKHZvaWQpCisgfSB3aGlsZSAoMCkKKyAKKyAJR0VUX0dJRChyb290KTsKKy0JR0VUX0dJRChub2JvZHkpOworKwlHRVRfR0lEKG5vZ3JvdXApOworIAlHRVRfR0lEKGJpbik7CisgCisgCVRFU1RfUEFVU0U7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHBfMjAxNTA0MjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwXzIwMTUwNDIwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOGViZjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwXzIwMTUwNDIwLmJiCkBAIC0wLDAgKzEsODYgQEAKK1NVTU1BUlkgPSAiTGludXggVGVzdCBQcm9qZWN0IgorREVTQ1JJUFRJT04gPSAiVGhlIExpbnV4IFRlc3QgUHJvamVjdCBpcyBhIGpvaW50IHByb2plY3Qgd2l0aCBTR0ksIElCTSwgT1NETCwgYW5kIEJ1bGwgd2l0aCBhIGdvYWwgdG8gZGVsaXZlciB0ZXN0IHN1aXRlcyB0byB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IHRoYXQgdmFsaWRhdGUgdGhlIHJlbGlhYmlsaXR5LCByb2J1c3RuZXNzLCBhbmQgc3RhYmlsaXR5IG9mIExpbnV4LiBUaGUgTGludXggVGVzdCBQcm9qZWN0IGlzIGEgY29sbGVjdGlvbiBvZiB0b29scyBmb3IgdGVzdGluZyB0aGUgTGludXgga2VybmVsIGFuZCByZWxhdGVkIGZlYXR1cmVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9sdHAuc291cmNlZm9yZ2UubmV0IgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyAmIExHUEx2MisgJiBMR1BMdjIuMSsgJiBCU0QtMi1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgIGZpbGU6Ly90ZXN0Y2FzZXMva2VybmVsL2NvbnRyb2xsZXJzL2ZyZWV6ZXIvQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMgXAorICAgIGZpbGU6Ly90ZXN0Y2FzZXMva2VybmVsL2NvbnRyb2xsZXJzL2ZyZWV6ZXIvcnVuX2ZyZWV6ZXIuc2g7YmVnaW5saW5lPTU7ZW5kbGluZT0xNzttZDU9ODZhNjFkMmMwNDJkNTk4MzZmZmIzNTNhMjE0NTY0OTggXAorICAgIGZpbGU6Ly90ZXN0Y2FzZXMva2VybmVsL2hvdHBsdWcvbWVtb3J5X2hvdHBsdWcvQ09QWUlORzttZDU9ZTA0YTJlNTQyYjJiODYyOWJmOWNkMmJhMjliMGZlNDEgXAorICAgIGZpbGU6Ly90ZXN0Y2FzZXMva2VybmVsL2hvdHBsdWcvY3B1X2hvdHBsdWcvQ09QWUlORzttZDU9ZTA0YTJlNTQyYjJiODYyOWJmOWNkMmJhMjliMGZlNDEgXAorICAgIGZpbGU6Ly90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvQ09QWUlORzttZDU9MjE2ZTQzYjcyZWZiZTRlZDkwMTdjYzE5YzRjNjhiMDEgXAorICAgIGZpbGU6Ly90ZXN0Y2FzZXMvcmVhbHRpbWUvQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UgXAorICAgIGZpbGU6Ly90b29scy9uZXRwaXBlLTIuNC9DT1BZSU5HO21kNT05ZTM3ODFiYjVmZTc4N2FhODBlMWY1MWY1MDA2YjZmYSBcCisgICAgZmlsZTovL3Rvb2xzL25ldHBpcGUtMi40LWlwdjYvQ09QWUlORzttZDU9OWUzNzgxYmI1ZmU3ODdhYTgwZTFmNTFmNTAwNmI2ZmEgXAorICAgIGZpbGU6Ly90b29scy90b3AtTFRQL3Byb2MvQ09QWUlORzttZDU9YWVmYzg4ZWI4YTQxNjcyZmJmY2ZlNmI2OWFiOGM0OWMgXAorICAgIGZpbGU6Ly90b29scy9wb3VuZGVyMjEvQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgIGZpbGU6Ly91dGlscy9iZW5jaG1hcmsva2VybmJlbmNoLTAuNDIvQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgIGZpbGU6Ly91dGlscy9mZnNiLTYuMC1yYzIvQ09QWUlORzttZDU9YzQ2MDgyMTY3YTMxNGQ3ODVkMDEyYTI0NDc0OGQ4MDMgXAorIgorCitERVBFTkRTID0gImF0dHIgbGliYWlvIGxpYmNhcCBhY2wgb3BlbnNzbCB6aXAtbmF0aXZlIgorU1JDUkVWID0gIjc3ZDBiN2ZkMDE0OGNlNjU3YzVhMjUwNjA2NjdlOTc4YzA3NjYyYTAiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9saW51eC10ZXN0LXByb2plY3QvbHRwLmdpdCBcCisgICAgZmlsZTovLzAwMDEtUmVuYW1lLXJ1bnRlc3RzX25vbHRwLnNoLXNjcmlwdC1zby1oYXZlLXVuaXF1ZS1uYW1lLnBhdGNoIFwKKyAgICBmaWxlOi8vbHRwLURvLW5vdC1saW5rLWFnYWluc3QtbGliZmwucGF0Y2ggXAorICAgIGZpbGU6Ly9tYWtlLXNldHJlZ2lkMDItd29yay5wYXRjaCBcCisgICAgZmlsZTovL2FkZC1rbm9iLWZvci1udW1hLnBhdGNoIFwKKyAgICBmaWxlOi8vYWRkLWtub2ItZm9yLXRpcnBjLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMS1sdHAtdm1hMDMtZml4LXRoZS1hbGdpbm1lbnQtb2YtcGFnZS1zaXplLnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK1RBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorCitleHBvcnQgcHJlZml4ID0gIi9vcHQvbHRwIgorZXhwb3J0IGV4ZWNfcHJlZml4ID0gIi9vcHQvbHRwIgorCitQQUNLQUdFQ09ORklHW251bWFdID0gIi0td2l0aC1udW1hLCAtLXdpdGhvdXQtbnVtYSwgbnVtYWN0bCwiCitFWFRSQV9BVVRPUkVDT05GICs9ICItSSAke1N9L3Rlc3RjYXNlcy9yZWFsdGltZS9tNCIKK0VYVFJBX09FQ09ORiA9ICIgLS13aXRoLXBvd2VyLW1hbmFnZW1lbnQtdGVzdHN1aXRlIC0td2l0aC1yZWFsdGltZS10ZXN0c3VpdGUgIgorIyBsdHAgbmV0d29yay9ycGMgdGVzdCBjYXNlcyBmdGJmcyB3aGVuIGxpYnRpcnBjIGlzIGZvdW5kCitFWFRSQV9PRUNPTkYgKz0gIiAtLXdpdGhvdXQtdGlycGMgIgorCisjIFRoZSBtYWtlZmlsZXMgbWFrZSBleGNlc3NpdmUgdXNlIG9mIG1ha2UgLUMgYW5kIHNldmVyYWwgaW5jbHVkZSB0ZXN0Y2FzZXMubWsKKyMgd2hpY2ggdHJpZ2dlcnMgYSBidWlsZCBvZiB0aGUgc3lzY2FsbCBoZWFkZXIuIFRvIHJlcHJvZHVjZSwgYnVpbGQgbHRwLAorIyB0aGVuIGRlbGV0ZSB0aGUgaGVhZGVyLCB0aGVuICJtYWtlIC1qIFhYIiBhbmQgd2F0Y2ggcmVnZW4uc2ggcnVuIG11bHRpcGxlCisjIHRpbWVzLiBJdHMgZWFzaWVyIHRvIGdlbmVyYXRlIHRoaXMgb25jZSBoZXJlIGluc3RlYWQuCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCSggbWFrZSAtQyAke0J9L3Rlc3RjYXNlcy9rZXJuZWwgaW5jbHVkZS9saW51eF9zeXNjYWxsX251bWJlcnMuaCApCit9CisKK2RvX2luc3RhbGwoKXsKKyAgICBpbnN0YWxsIC1kICR7RH0vb3B0L2x0cC8KKyAgICBvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBTS0lQX0lEQ0hFQ0s9MSBpbnN0YWxsCisKKyAgICAjIENvcHkgUE9TSVggdGVzdCBzdWl0ZSBpbnRvICR7RH0vb3B0L2x0cC90ZXN0Y2FzZXMgYnkgbWFudWFsCisgICAgY3AgLXIgdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlICR7RH0vb3B0L2x0cC90ZXN0Y2FzZXMKK30KKworUkRFUEVORFNfJHtQTn0gPSAicGVybCBlMmZzcHJvZ3MtbWtlMmZzIHB5dGhvbi1jb3JlIGxpYmFpbyBiYXNoIGdhd2sgZXhwZWN0IgorCitGSUxFU18ke1BOfS1kYmcgKz0gIlwKKyAgICAvb3B0L2x0cC9ydW50ZXN0Ly5kZWJ1ZyBcCisgICAgL29wdC9sdHAvdGVzdGNhc2VzLyovLmRlYnVnIFwKKyAgICAvb3B0L2x0cC90ZXN0Y2FzZXMvKi8qLy5kZWJ1ZyBcCisgICAgL29wdC9sdHAvdGVzdGNhc2VzLyovKi8qLy5kZWJ1ZyBcCisgICAgL29wdC9sdHAvc2NlbmFyaW9fZ3JvdXBzLy5kZWJ1ZyBcCisgICAgL29wdC9sdHAvdGVzdHNjcmlwdHMvLmRlYnVnIFwKKyAgICAvb3B0L2x0cC90ZXN0c2NyaXB0cy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS8uZGVidWcgXAorIgorCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIi9vcHQvbHRwL2xpYi9saWJtZW0uYSIKKworRklMRVNfJHtQTn0gKz0gIi9vcHQvbHRwLyogL29wdC9sdHAvcnVudGVzdC8qIC9vcHQvbHRwL3NjZW5hcmlvX2dyb3Vwcy8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9iaW4vKiAvb3B0L2x0cC90ZXN0Y2FzZXMvYmluLyovYmluLyogL29wdC9sdHAvdGVzdHNjcmlwdHMvKiAvb3B0L2x0cC90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvKiAvb3B0L2x0cC90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvY29uZm9ybWFuY2UvKiAvb3B0L2x0cC90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvRG9jdW1lbnRhdGlvbi8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9mdW5jdGlvbmFsLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL2luY2x1ZGUvKiAvb3B0L2x0cC90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvc2NyaXB0cy8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9zdHJlc3MvKiAvb3B0L2x0cC90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvdG9vbHMvKiIKKworIyBBdm9pZCBnZW5lcmF0ZWQgYmluYXJpZXMgc3RyaXBwaW5nLiBPdGhlcndpc2Ugc29tZSBvZiB0aGUgbHRwIHRlc3RzIHN1Y2ggYXMgbGRkMDEgJiBubTAxIGZhaWxzCitJTkhJQklUX1BBQ0tBR0VfU1RSSVAgPSAiMSIKK0lOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVCA9ICIxIgorIyBIb3dldmVyLCB0ZXN0X2FyY2hfc3RyaXBwZWQgaXMgYWxyZWFkeSBzdHJpcHBlZCwgc28uLi4KK0lOU0FORV9TS0lQXyR7UE59ICs9ICJhbHJlYWR5LXN0cmlwcGVkIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAxLURvbi10LXJldXNlLXdlYWstc3ltYm9sLW9wdG9wdC10by1maXgtRlRCRlMtb24tbWlwcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDEtRG9uLXQtcmV1c2Utd2Vhay1zeW1ib2wtb3B0b3B0LXRvLWZpeC1GVEJGUy1vbi1taXBzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZGEzMzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAxLURvbi10LXJldXNlLXdlYWstc3ltYm9sLW9wdG9wdC10by1maXgtRlRCRlMtb24tbWlwcy5wYXRjaApAQCAtMCwwICsxLDU5IEBACitGcm9tOiBMdWsgQ2xhZXMgPGx1a0BkZWJpYW4ub3JnPgorRGF0ZTogU2F0LCA0IEp1bCAyMDA5IDEwOjU0OjUzICswMjAwCitTdWJqZWN0OiBEb24ndCByZXVzZSB3ZWFrIHN5bWJvbCBvcHRvcHQgdG8gZml4IEZUQkZTIG9uIG1pcHMqCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbSAKK2Z0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vaC9oZWlybG9vbS1tYWlseC9oZWlybG9vbS1tYWlseF8xMi41LTUuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCistLS0KKyBnZXRvcHQuYyB8ICAgMTAgKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nZXRvcHQuYyBiL2dldG9wdC5jCitpbmRleCA4M2NlNjI4Li44MmU5ODNjIDEwMDY0NAorLS0tIGEvZ2V0b3B0LmMKKysrKyBiL2dldG9wdC5jCitAQCAtNDMsNyArNDMsNyBAQCB0eXBlZGVmCWludAlzc2l6ZV90OworIGNoYXIJKm9wdGFyZzsKKyBpbnQJb3B0aW5kID0gMTsKKyBpbnQJb3B0ZXJyID0gMTsKKy1pbnQJb3B0b3B0OworK2ludAlvcHRvcHRjOworIAorIHN0YXRpYyB2b2lkCisgZXJyb3IoY29uc3QgY2hhciAqcywgaW50IGMpCitAQCAtNjksNyArNjksNyBAQCBlcnJvcihjb25zdCBjaGFyICpzLCBpbnQgYykKKyAJCSpicCsrID0gKnMrKzsKKyAJd2hpbGUgKCptc2cpCisgCQkqYnArKyA9ICptc2crKzsKKy0JKmJwKysgPSBvcHRvcHQ7CisrCSpicCsrID0gb3B0b3B0YzsKKyAJKmJwKysgPSAnXG4nOworIAl3cml0ZSgyLCBidWYsIGJwIC0gYnVmKTsKKyAJYWNfZnJlZShidWYpOworQEAgLTEwMSwxMyArMTAxLDEzIEBAIGdldG9wdChpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdLCBjb25zdCBjaGFyICpvcHRzdHJpbmcpCisgCQl9CisgCQljdXJwID0gJmFyZ3Zbb3B0aW5kXVsxXTsKKyAJfQorLQlvcHRvcHQgPSBjdXJwWzBdICYgMDM3NzsKKysJb3B0b3B0YyA9IGN1cnBbMF0gJiAwMzc3OworIAl3aGlsZSAob3B0c3RyaW5nWzBdKSB7CisgCQlpZiAob3B0c3RyaW5nWzBdID09ICc6JykgeworIAkJCW9wdHN0cmluZysrOworIAkJCWNvbnRpbnVlOworIAkJfQorLQkJaWYgKChvcHRzdHJpbmdbMF0gJiAwMzc3KSA9PSBvcHRvcHQpIHsKKysJCWlmICgob3B0c3RyaW5nWzBdICYgMDM3NykgPT0gb3B0b3B0YykgeworIAkJCWlmIChvcHRzdHJpbmdbMV0gPT0gJzonKSB7CisgCQkJCWlmIChjdXJwWzFdICE9ICdcMCcpIHsKKyAJCQkJCW9wdGFyZyA9IChjaGFyICopJmN1cnBbMV07CitAQCAtMTI3LDcgKzEyNyw3IEBAIGdldG9wdChpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdLCBjb25zdCBjaGFyICpvcHRzdHJpbmcpCisgCQkJCQlvcHRpbmQrKzsKKyAJCQkJb3B0YXJnID0gMDsKKyAJCQl9CistCQkJcmV0dXJuIG9wdG9wdDsKKysJCQlyZXR1cm4gb3B0b3B0YzsKKyAJCX0KKyAJCW9wdHN0cmluZysrOworIAl9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAyLVBhdGNoZWQtb3V0LVNTTDItc3VwcG9ydC1zaW5jZS1pdC1pcy1uby1sb25nZXItc3VwcG8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAyLVBhdGNoZWQtb3V0LVNTTDItc3VwcG9ydC1zaW5jZS1pdC1pcy1uby1sb25nZXItc3VwcG8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJhZDQzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDItUGF0Y2hlZC1vdXQtU1NMMi1zdXBwb3J0LXNpbmNlLWl0LWlzLW5vLWxvbmdlci1zdXBwby5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tOiBIaWxrbyBCZW5nZW4gPGJlbmdlbkBkZWJpYW4ub3JnPgorRGF0ZTogV2VkLCAyNyBBcHIgMjAxMSAwMDoxODo0MiArMDIwMAorU3ViamVjdDogUGF0Y2hlZCBvdXQgU1NMMiBzdXBwb3J0IHNpbmNlIGl0IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgT3BlblNTTC4KKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorLS0tCisgbWFpbHguMSAgIHwgICAgMiArLQorIG9wZW5zc2wuYyB8ICAgIDQgKy0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbWFpbHguMSBiL21haWx4LjEKK2luZGV4IDQxN2VhMDQuLmEwMmU0MzAgMTAwNjQ0CistLS0gYS9tYWlseC4xCisrKysgYi9tYWlseC4xCitAQCAtMzU3NSw3ICszNTc1LDcgQEAgT25seSBhcHBsaWNhYmxlIGlmIFNTTC9UTFMgc3VwcG9ydCBpcyBidWlsdCB1c2luZyBPcGVuU1NMLgorIC5UUAorIC5CIHNzbC1tZXRob2QKKyBTZWxlY3RzIGEgU1NML1RMUyBwcm90b2NvbCB2ZXJzaW9uOworLXZhbGlkIHZhbHVlcyBhcmUgYHNzbDInLCBgc3NsMycsIGFuZCBgdGxzMScuCisrdmFsaWQgdmFsdWVzIGFyZSBgc3NsMycsIGFuZCBgdGxzMScuCisgSWYgdW5zZXQsIHRoZSBtZXRob2QgaXMgc2VsZWN0ZWQgYXV0b21hdGljYWxseSwKKyBpZiBwb3NzaWJsZS4KKyAuVFAKK2RpZmYgLS1naXQgYS9vcGVuc3NsLmMgYi9vcGVuc3NsLmMKK2luZGV4IGI0ZTMzZmMuLjQ0ZmU0ZTUgMTAwNjQ0CistLS0gYS9vcGVuc3NsLmMKKysrKyBiL29wZW5zc2wuYworQEAgLTIxNiw5ICsyMTYsNyBAQCBzc2xfc2VsZWN0X21ldGhvZChjb25zdCBjaGFyICp1aHApCisgCisgCWNwID0gc3NsX21ldGhvZF9zdHJpbmcodWhwKTsKKyAJaWYgKGNwICE9IE5VTEwpIHsKKy0JCWlmIChlcXVhbChjcCwgInNzbDIiKSkKKy0JCQltZXRob2QgPSBTU0x2Ml9jbGllbnRfbWV0aG9kKCk7CistCQllbHNlIGlmIChlcXVhbChjcCwgInNzbDMiKSkKKysJCWlmIChlcXVhbChjcCwgInNzbDMiKSkKKyAJCQltZXRob2QgPSBTU0x2M19jbGllbnRfbWV0aG9kKCk7CisgCQllbHNlIGlmIChlcXVhbChjcCwgInRsczEiKSkKKyAJCQltZXRob2QgPSBUTFN2MV9jbGllbnRfbWV0aG9kKCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAzLUZpeGVkLUxpbnRpYW4td2FybmluZy13YXJuaW5nLW1hY3JvLU4tbm90LWRlZmluZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAzLUZpeGVkLUxpbnRpYW4td2FybmluZy13YXJuaW5nLW1hY3JvLU4tbm90LWRlZmluZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNiNzNhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDMtRml4ZWQtTGludGlhbi13YXJuaW5nLXdhcm5pbmctbWFjcm8tTi1ub3QtZGVmaW5lZC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitGcm9tOiBIaWxrbyBCZW5nZW4gPGJlbmdlbkBkZWJpYW4ub3JnPgorRGF0ZTogU2F0LCAxNCBBcHIgMjAxMiAyMDoyMjo0MyArMDIwMAorU3ViamVjdDogRml4ZWQgTGludGlhbiB3YXJuaW5nICh3YXJuaW5nOiBtYWNybyBgTicgbm90IGRlZmluZWQpCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KKy0tLQorIG1haWx4LjEgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9tYWlseC4xIGIvbWFpbHguMQoraW5kZXggYTAyZTQzMC4uYjA3MjNiZCAxMDA2NDQKKy0tLSBhL21haWx4LjEKKysrKyBiL21haWx4LjEKK0BAIC0zNzgxLDcgKzM3ODEsNyBAQCB5b3UgY291bGQgZXhhbWluZSB0aGUgZmlyc3QgbWVzc2FnZSBieSBnaXZpbmcgdGhlIGNvbW1hbmQ6CisgLnNwCisgLmZpCisgd2hpY2ggbWlnaHQgY2F1c2UKKy0uTiBtYWlseAorKy5JIG1haWx4CisgdG8gcmVzcG9uZCB3aXRoLCBmb3IgZXhhbXBsZToKKyAubmYKKyAuc3AKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTEtb3V0b2YtSW50cm9kdWNlLWV4cGFuZGFkZHItZmxhZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTEtb3V0b2YtSW50cm9kdWNlLWV4cGFuZGFkZHItZmxhZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDYxNjQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMS1vdXRvZi1JbnRyb2R1Y2UtZXhwYW5kYWRkci1mbGFnLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK0Zyb20gOTk4NGFlNWNiMGVhMGQ2MWRmMTYxMmIwNjk1MmE2MTMyM2MwODNkOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZsb3JpYW4gV2VpbWVyIDxmd2VpbWVyQHJlZGhhdC5jb20+CitEYXRlOiBNb24sIDE3IE5vdiAyMDE0IDExOjEzOjM4ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMS80XSBvdXRvZjogSW50cm9kdWNlIGV4cGFuZGFkZHIgZmxhZworCitEb2N1bWVudCB0aGF0IGFkZHJlc3MgZXhwYW5zaW9uIGlzIGRpc2FibGVkIHVubGVzcyB0aGUgZXhwYW5kYWRkcgorYmluYXJ5IG9wdGlvbiBpcyBzZXQuCisKK1RoaXMgaGFzIGJlZW4gYXNzaWduZWQgQ1ZFLTIwMTQtNzg0NCBmb3IgQlNEIG1haWx4LCBidXQgaXQgaXMgbm90CithIHZ1bG5lcmFiaWxpdHkgaW4gSGVpcmxvb20gbWFpbHggYmVjYXVzZSB0aGlzIGZlYXR1cmUgd2FzIGRvY3VtZW50ZWQuCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KKy0tLQorIG1haWx4LjEgfCAxNCArKysrKysrKysrKysrKworIG5hbWVzLmMgfCAgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE3IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21haWx4LjEgYi9tYWlseC4xCitpbmRleCA3MGE3ODU5Li4yMmExNzFiIDEwMDY0NAorLS0tIGEvbWFpbHguMQorKysrIGIvbWFpbHguMQorQEAgLTY1Niw2ICs2NTYsMTQgQEAgYnV0IGFueSByZXBseSByZXR1cm5lZCB0byB0aGUgbWFjaGluZQorIHdpbGwgaGF2ZSB0aGUgc3lzdGVtIHdpZGUgYWxpYXMgZXhwYW5kZWQKKyBhcyBhbGwgbWFpbCBnb2VzIHRocm91Z2ggc2VuZG1haWwuCisgLlNTICJSZWNpcGllbnQgYWRkcmVzcyBzcGVjaWZpY2F0aW9ucyIKKytJZiB0aGUKKysuSSBleHBhbmRhZGRyCisrb3B0aW9uIGlzIG5vdCBzZXQgKHRoZSBkZWZhdWx0KSwgcmVjaXBpZW50IGFkZHJlc3NlcyBtdXN0IGJlIG5hbWVzIG9mCisrbG9jYWwgbWFpbGJveGVzIG9yIEludGVybmV0IG1haWwgYWRkcmVzc2VzLgorKy5QUAorK0lmIHRoZQorKy5JIGV4cGFuZGFkZHIKKytvcHRpb24gaXMgc2V0LCB0aGUgZm9sbG93aW5nIHJ1bGVzIGFwcGx5OgorIFdoZW4gYW4gYWRkcmVzcyBpcyB1c2VkIHRvIG5hbWUgYSByZWNpcGllbnQKKyAoaW4gYW55IG9mIFRvLCBDYywgb3IgQmNjKSwKKyBuYW1lcyBvZiBsb2NhbCBtYWlsIGZvbGRlcnMKK0BAIC0yMzkxLDYgKzIzOTksMTIgQEAgYW5kIGV4aXRzIGltbWVkaWF0ZWx5LgorIElmIHRoaXMgb3B0aW9uIGlzIHNldCwKKyBcZkltYWlseFxmUiBzdGFydHMgZXZlbiB3aXRoIGFuIGVtcHR5IG1haWxib3guCisgLlRQCisrLkIgZXhwYW5kYWRkcgorK0NhdXNlcworKy5JIG1haWx4CisrdG8gZXhwYW5kIG1lc3NhZ2UgcmVjaXBpZW50IGFkZHJlc3NlcywgYXMgZXhwbGFpbmVkIGluIHRoZSBzZWN0aW9uLAorK1JlY2lwaWVudCBhZGRyZXNzIHNwZWNpZmljYXRpb25zLgorKy5UUAorIC5CIGZsaXByCisgRXhjaGFuZ2VzIHRoZQorIC5JIFJlc3BvbmQKK2RpZmYgLS1naXQgYS9uYW1lcy5jIGIvbmFtZXMuYworaW5kZXggNjZlOTc2Yi4uYzY5NTYwZiAxMDA2NDQKKy0tLSBhL25hbWVzLmMKKysrKyBiL25hbWVzLmMKK0BAIC0yNjgsNiArMjY4LDkgQEAgb3V0b2Yoc3RydWN0IG5hbWUgKm5hbWVzLCBGSUxFICpmbywgc3RydWN0IGhlYWRlciAqaHApCisgCUZJTEUgKmZvdXQsICpmaW47CisgCWludCBpc3BpcGU7CisgCisrCWlmICh2YWx1ZSgiZXhwYW5kYWRkciIpID09IE5VTEwpCisrCQlyZXR1cm4gbmFtZXM7CisrCisgCXRvcCA9IG5hbWVzOworIAlucCA9IG5hbWVzOworIAl0aW1lKCZub3cpOworLS0gCisxLjkuMworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTItdW5wYWNrLURpc2FibGUtb3B0aW9uLXByb2Nlc3NpbmctZm9yLWVtYWlsLWFkZHJlc3Nlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTItdW5wYWNrLURpc2FibGUtb3B0aW9uLXByb2Nlc3NpbmctZm9yLWVtYWlsLWFkZHJlc3Nlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2RiZmQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMi11bnBhY2stRGlzYWJsZS1vcHRpb24tcHJvY2Vzc2luZy1mb3ItZW1haWwtYWRkcmVzc2VzLnBhdGNoCkBAIC0wLDAgKzEsNzkgQEAKK0Zyb20gZTM0ZTJhYzY3YjgwNDk3MDgwZWJlY2NjZWM0MGMzYjYxNDU2MTY3ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZsb3JpYW4gV2VpbWVyIDxmd2VpbWVyQHJlZGhhdC5jb20+CitEYXRlOiBNb24sIDE3IE5vdiAyMDE0IDExOjE0OjA2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMi80XSB1bnBhY2s6IERpc2FibGUgb3B0aW9uIHByb2Nlc3NpbmcgZm9yIGVtYWlsIGFkZHJlc3NlcworIHdoZW4gY2FsbGluZyBzZW5kbWFpbAorCitUaGlzIHBhdGNoIGlzIHRha2VuIGZyb20KK2Z0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vaC9oZWlybG9vbS1tYWlseC9oZWlybG9vbS1tYWlseF8xMi41LTUuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCistLS0KKyBleHRlcm4uaCAgfCAyICstCisgbmFtZXMuYyAgIHwgOCArKysrKystLQorIHNlbmRvdXQuYyB8IDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2V4dGVybi5oIGIvZXh0ZXJuLmgKK2luZGV4IDZiODViYTAuLjg4NzNmZTggMTAwNjQ0CistLS0gYS9leHRlcm4uaAorKysrIGIvZXh0ZXJuLmgKK0BAIC0zOTYsNyArMzk2LDcgQEAgc3RydWN0IG5hbWUgKm91dG9mKHN0cnVjdCBuYW1lICpuYW1lcywgRklMRSAqZm8sIHN0cnVjdCBoZWFkZXIgKmhwKTsKKyBpbnQgaXNfZmlsZWFkZHIoY2hhciAqbmFtZSk7Cisgc3RydWN0IG5hbWUgKnVzZXJtYXAoc3RydWN0IG5hbWUgKm5hbWVzKTsKKyBzdHJ1Y3QgbmFtZSAqY2F0KHN0cnVjdCBuYW1lICpuMSwgc3RydWN0IG5hbWUgKm4yKTsKKy1jaGFyICoqdW5wYWNrKHN0cnVjdCBuYW1lICpucCk7CisrY2hhciAqKnVucGFjayhzdHJ1Y3QgbmFtZSAqc21vcHRzLCBzdHJ1Y3QgbmFtZSAqbnApOworIHN0cnVjdCBuYW1lICplbGlkZShzdHJ1Y3QgbmFtZSAqbmFtZXMpOworIGludCBjb3VudChzdHJ1Y3QgbmFtZSAqbnApOworIHN0cnVjdCBuYW1lICpkZWxldGVfYWx0ZXJuYXRlcyhzdHJ1Y3QgbmFtZSAqbnApOworZGlmZiAtLWdpdCBhL25hbWVzLmMgYi9uYW1lcy5jCitpbmRleCBjNjk1NjBmLi40NWJiYWVkIDEwMDY0NAorLS0tIGEvbmFtZXMuYworKysrIGIvbmFtZXMuYworQEAgLTU0OSw3ICs1NDksNyBAQCBjYXQoc3RydWN0IG5hbWUgKm4xLCBzdHJ1Y3QgbmFtZSAqbjIpCisgICogUmV0dXJuIGFuIGVycm9yIGlmIHRoZSBuYW1lIGxpc3Qgd29uJ3QgZml0LgorICAqLworIGNoYXIgKioKKy11bnBhY2soc3RydWN0IG5hbWUgKm5wKQorK3VucGFjayhzdHJ1Y3QgbmFtZSAqc21vcHRzLCBzdHJ1Y3QgbmFtZSAqbnApCisgeworIAljaGFyICoqYXAsICoqdG9wOworIAlzdHJ1Y3QgbmFtZSAqbjsKK0BAIC01NjQsNyArNTY0LDcgQEAgdW5wYWNrKHN0cnVjdCBuYW1lICpucCkKKyAJICogdGhlIHRlcm1pbmF0aW5nIDAgcG9pbnRlci4gIEFkZGl0aW9uYWwgc3BvdHMgbWF5IGJlIG5lZWRlZAorIAkgKiB0byBwYXNzIGFsb25nIC1mIHRvIHRoZSBob3N0IG1haWxlci4KKyAJICovCistCWV4dHJhID0gMjsKKysJZXh0cmEgPSAzICsgY291bnQoc21vcHRzKTsKKyAJZXh0cmErKzsKKyAJbWV0b28gPSB2YWx1ZSgibWV0b28iKSAhPSBOVUxMOworIAlpZiAobWV0b28pCitAQCAtNTgxLDYgKzU4MSwxMCBAQCB1bnBhY2soc3RydWN0IG5hbWUgKm5wKQorIAkJKmFwKysgPSAiLW0iOworIAlpZiAodmVyYm9zZSkKKyAJCSphcCsrID0gIi12IjsKKysJZm9yICg7IHNtb3B0cyAhPSBOVUxMOyBzbW9wdHMgPSBzbW9wdHMtPm5fZmxpbmspCisrCQlpZiAoKHNtb3B0cy0+bl90eXBlICYgR0RFTCkgPT0gMCkKKysJCQkqYXArKyA9IHNtb3B0cy0+bl9uYW1lOworKwkqYXArKyA9ICItLSI7CisgCWZvciAoOyBuICE9IE5VTEw7IG4gPSBuLT5uX2ZsaW5rKQorIAkJaWYgKChuLT5uX3R5cGUgJiBHREVMKSA9PSAwKQorIAkJCSphcCsrID0gbi0+bl9uYW1lOworZGlmZiAtLWdpdCBhL3NlbmRvdXQuYyBiL3NlbmRvdXQuYworaW5kZXggN2I3ZjJlYi4uYzUyZjE1ZCAxMDA2NDQKKy0tLSBhL3NlbmRvdXQuYworKysrIGIvc2VuZG91dC5jCitAQCAtODM1LDcgKzgzNSw3IEBAIHN0YXJ0X210YShzdHJ1Y3QgbmFtZSAqdG8sIHN0cnVjdCBuYW1lICptYWlsYXJncywgRklMRSAqaW5wdXQsCisgI2VuZGlmCS8qIEhBVkVfU09DS0VUUyAqLworIAorIAlpZiAoKHNtdHAgPSB2YWx1ZSgic210cCIpKSA9PSBOVUxMKSB7CistCQlhcmdzID0gdW5wYWNrKGNhdChtYWlsYXJncywgdG8pKTsKKysJCWFyZ3MgPSB1bnBhY2sobWFpbGFyZ3MsIHRvKTsKKyAJCWlmIChkZWJ1ZyB8fCB2YWx1ZSgiZGVidWciKSkgeworIAkJCXByaW50ZihjYXRnZXRzKGNhdGQsIENBVFNFVCwgMTgxLAorIAkJCQkJIlNlbmRtYWlsIGFyZ3VtZW50czoiKSk7CistLSAKKzEuOS4zCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMy1maW8uYy1VbmNvbmRpdGlvbmFsbHktcmVxdWlyZS13b3JkZXhwLXN1cHBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDEzLWZpby5jLVVuY29uZGl0aW9uYWxseS1yZXF1aXJlLXdvcmRleHAtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTU4ZDg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMy1maW8uYy1VbmNvbmRpdGlvbmFsbHktcmVxdWlyZS13b3JkZXhwLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxMTMgQEAKK0Zyb20gMmJhZThlY2YwNGVjMmJhNmJiOWYwYWY1YjgwNDg1ZGQwZWRiNDI3ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZsb3JpYW4gV2VpbWVyIDxmd2VpbWVyQHJlZGhhdC5jb20+CitEYXRlOiBNb24sIDE3IE5vdiAyMDE0IDEyOjQ4OjI1ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMy80XSBmaW8uYzogVW5jb25kaXRpb25hbGx5IHJlcXVpcmUgd29yZGV4cCBzdXBwb3J0CisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KKy0tLQorIGZpby5jIHwgNjcgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDYyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZmlvLmMgYi9maW8uYworaW5kZXggNjVlOGYxMC4uMTUyOTIzNiAxMDA2NDQKKy0tLSBhL2Zpby5jCisrKysgYi9maW8uYworQEAgLTQzLDEyICs0MywxNSBAQCBzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZmlvLmMJMi43NiAoZ3JpdHRlcikgOS8xNi8wOSI7CisgI2VuZGlmIC8qIG5vdCBsaW50ICovCisgCisgI2luY2x1ZGUgInJjdi5oIgorKworKyNpZm5kZWYgSEFWRV9XT1JERVhQCisrI2Vycm9yIHdvcmRleHAgc3VwcG9ydCBpcyByZXF1aXJlZAorKyNlbmRpZgorKworICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzeXMvZmlsZS5oPgorICNpbmNsdWRlIDxzeXMvd2FpdC5oPgorLSNpZmRlZglIQVZFX1dPUkRFWFAKKyAjaW5jbHVkZSA8d29yZGV4cC5oPgorLSNlbmRpZgkvKiBIQVZFX1dPUkRFWFAgKi8KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgCisgI2lmIGRlZmluZWQgKFVTRV9OU1MpCitAQCAtNDgxLDcgKzQ4NCw2IEBAIG5leHQ6Cisgc3RhdGljIGNoYXIgKgorIGdsb2JuYW1lKGNoYXIgKm5hbWUpCisgeworLSNpZmRlZglIQVZFX1dPUkRFWFAKKyAJd29yZGV4cF90IHdlOworIAljaGFyICpjcDsKKyAJc2lnc2V0X3QgbnNldDsKK0BAIC01MjcsNjUgKzUyOSw2IEBAIGdsb2JuYW1lKGNoYXIgKm5hbWUpCisgCX0KKyAJd29yZGZyZWUoJndlKTsKKyAJcmV0dXJuIGNwOworLSNlbHNlCS8qICFIQVZFX1dPUkRFWFAgKi8KKy0JY2hhciB4bmFtZVtQQVRIU0laRV07CistCWNoYXIgY21kYnVmW1BBVEhTSVpFXTsJCS8qIGFsc28gdXNlZCBmb3IgZmlsZSBuYW1lcyAqLworLQlpbnQgcGlkLCBsOworLQljaGFyICpjcCwgKnNoZWxsOworLQlpbnQgcGl2ZWNbMl07CistCWV4dGVybiBpbnQgd2FpdF9zdGF0dXM7CistCXN0cnVjdCBzdGF0IHNidWY7CistCistCWlmIChwaXBlKHBpdmVjKSA8IDApIHsKKy0JCXBlcnJvcigicGlwZSIpOworLQkJcmV0dXJuIG5hbWU7CistCX0KKy0Jc25wcmludGYoY21kYnVmLCBzaXplb2YgY21kYnVmLCAiZWNobyAlcyIsIG5hbWUpOworLQlpZiAoKHNoZWxsID0gdmFsdWUoIlNIRUxMIikpID09IE5VTEwpCistCQlzaGVsbCA9IFNIRUxMOworLQlwaWQgPSBzdGFydF9jb21tYW5kKHNoZWxsLCAwLCAtMSwgcGl2ZWNbMV0sICItYyIsIGNtZGJ1ZiwgTlVMTCk7CistCWlmIChwaWQgPCAwKSB7CistCQljbG9zZShwaXZlY1swXSk7CistCQljbG9zZShwaXZlY1sxXSk7CistCQlyZXR1cm4gTlVMTDsKKy0JfQorLQljbG9zZShwaXZlY1sxXSk7CistYWdhaW46CistCWwgPSByZWFkKHBpdmVjWzBdLCB4bmFtZSwgc2l6ZW9mIHhuYW1lKTsKKy0JaWYgKGwgPCAwKSB7CistCQlpZiAoZXJybm8gPT0gRUlOVFIpCistCQkJZ290byBhZ2FpbjsKKy0JCXBlcnJvcigicmVhZCIpOworLQkJY2xvc2UocGl2ZWNbMF0pOworLQkJcmV0dXJuIE5VTEw7CistCX0KKy0JY2xvc2UocGl2ZWNbMF0pOworLQlpZiAod2FpdF9jaGlsZChwaWQpIDwgMCAmJiBXVEVSTVNJRyh3YWl0X3N0YXR1cykgIT0gU0lHUElQRSkgeworLQkJZnByaW50ZihzdGRlcnIsIGNhdGdldHMoY2F0ZCwgQ0FUU0VULCA4MSwKKy0JCQkJIlwiJXNcIjogRXhwYW5zaW9uIGZhaWxlZC5cbiIpLCBuYW1lKTsKKy0JCXJldHVybiBOVUxMOworLQl9CistCWlmIChsID09IDApIHsKKy0JCWZwcmludGYoc3RkZXJyLCBjYXRnZXRzKGNhdGQsIENBVFNFVCwgODIsCistCQkJCQkiXCIlc1wiOiBObyBtYXRjaC5cbiIpLCBuYW1lKTsKKy0JCXJldHVybiBOVUxMOworLQl9CistCWlmIChsID09IHNpemVvZiB4bmFtZSkgeworLQkJZnByaW50ZihzdGRlcnIsIGNhdGdldHMoY2F0ZCwgQ0FUU0VULCA4MywKKy0JCQkJIlwiJXNcIjogRXhwYW5zaW9uIGJ1ZmZlciBvdmVyZmxvdy5cbiIpLCBuYW1lKTsKKy0JCXJldHVybiBOVUxMOworLQl9CistCXhuYW1lW2xdID0gMDsKKy0JZm9yIChjcCA9ICZ4bmFtZVtsLTFdOyAqY3AgPT0gJ1xuJyAmJiBjcCA+IHhuYW1lOyBjcC0tKQorLQkJOworLQljcFsxXSA9ICdcMCc7CistCWlmIChzdHJjaHIoeG5hbWUsICcgJykgJiYgc3RhdCh4bmFtZSwgJnNidWYpIDwgMCkgeworLQkJZnByaW50ZihzdGRlcnIsIGNhdGdldHMoY2F0ZCwgQ0FUU0VULCA4NCwKKy0JCQkJIlwiJXNcIjogQW1iaWd1b3VzLlxuIiksIG5hbWUpOworLQkJcmV0dXJuIE5VTEw7CistCX0KKy0JcmV0dXJuIHNhdmVzdHIoeG5hbWUpOworLSNlbmRpZgkvKiAhSEFWRV9XT1JERVhQICovCisgfQorIAorIC8qCistLSAKKzEuOS4zCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxNC1nbG9ibmFtZS1JbnZva2Utd29yZGV4cC13aXRoLVdSREVfTk9DTUQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDE0LWdsb2JuYW1lLUludm9rZS13b3JkZXhwLXdpdGgtV1JERV9OT0NNRC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjVjZmE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxNC1nbG9ibmFtZS1JbnZva2Utd29yZGV4cC13aXRoLVdSREVfTk9DTUQucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSA3M2ZlZmEwYzFhYzcwMDQzZWM4NGYyZDhiOGY5ZjY4MzIxM2YxNjhkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmxvcmlhbiBXZWltZXIgPGZ3ZWltZXJAcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMTcgTm92IDIwMTQgMTM6MTE6MzIgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCA0LzRdIGdsb2JuYW1lOiBJbnZva2Ugd29yZGV4cCB3aXRoIFdSREVfTk9DTUQgKENWRS0yMDA0LTI3NzEpCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KKy0tLQorIGZpby5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZmlvLmMgYi9maW8uYworaW5kZXggMTUyOTIzNi4uNzc0YTIwNCAxMDA2NDQKKy0tLSBhL2Zpby5jCisrKysgYi9maW8uYworQEAgLTQ5Nyw3ICs0OTcsNyBAQCBnbG9ibmFtZShjaGFyICpuYW1lKQorIAlzaWdlbXB0eXNldCgmbnNldCk7CisgCXNpZ2FkZHNldCgmbnNldCwgU0lHQ0hMRCk7CisgCXNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJm5zZXQsIE5VTEwpOworLQlpID0gd29yZGV4cChuYW1lLCAmd2UsIDApOworKwlpID0gd29yZGV4cChuYW1lLCAmd2UsIFdSREVfTk9DTUQpOworIAlzaWdwcm9jbWFzayhTSUdfVU5CTE9DSywgJm5zZXQsIE5VTEwpOworIAlzd2l0Y2ggKGkpIHsKKyAJY2FzZSAwOgorLS0gCisxLjkuMworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTUtdXNyLXNiaW4tc2VuZG1haWwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDE1LXVzci1zYmluLXNlbmRtYWlsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNTk5MTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDE1LXVzci1zYmluLXNlbmRtYWlsLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Rlc2NyaXB0aW9uOiBTZW5kbWFpbCBpcyBhdCAvdXNyL3NiaW4vc2VuZG1haWwKKyBBcyBwZXIgRGViaWFuIFBvbGljeSDCpzExLjYKK0F1dGhvcjogUnlhbiBLYXZhbmFnaCA8cmFrQGRlYmlhbi5vcmc+CitPcmlnaW46IERlYmlhbgorRm9yd2FyZGVkOiBubworLS0tCitUaGlzIHBhdGNoIGhlYWRlciBmb2xsb3dzIERFUC0zOiBodHRwOi8vZGVwLmRlYmlhbi5uZXQvZGVwcy9kZXAzLworSW5kZXg6IGhlaXJsb29tLW1haWx4LTEyLjUvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KKworLS0tIGhlaXJsb29tLW1haWx4LTEyLjUub3JpZy9NYWtlZmlsZQkyMDExLTA0LTI2IDE3OjIzOjIyLjAwMDAwMDAwMCAtMDQwMAorKysrIGhlaXJsb29tLW1haWx4LTEyLjUvTWFrZWZpbGUJMjAxNS0wMS0yNyAxMzoyMDowNC43MzM1NDI4MDEgLTA1MDAKK0BAIC0xMyw3ICsxMyw3IEBACisgCisgTUFJTFJDCQk9ICQoU1lTQ09ORkRJUikvbmFpbC5yYworIE1BSUxTUE9PTAk9IC92YXIvbWFpbAorLVNFTkRNQUlMCT0gL3Vzci9saWIvc2VuZG1haWwKKytTRU5ETUFJTAk9IC91c3Ivc2Jpbi9zZW5kbWFpbAorIAorIERFU1RESVIJCT0KKyAKK0luZGV4OiBoZWlybG9vbS1tYWlseC0xMi41L21haWx4LjEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBoZWlybG9vbS1tYWlseC0xMi41Lm9yaWcvbWFpbHguMQkyMDE1LTAxLTI3IDEzOjE4OjQ5LjAwMDAwMDAwMCAtMDUwMAorKysrIGhlaXJsb29tLW1haWx4LTEyLjUvbWFpbHguMQkyMDE1LTAxLTI3IDEzOjIwOjMyLjM4MjMzNjg2NyAtMDUwMAorQEAgLTQ5MjIsNyArNDkyMiw3IEBACisgd2hpY2gganVzdCBhY3RzIGFzIGEgcHJveHkuCisgLlBQCisgXGZJTWFpbHhcZlIgaW1tZWRpYXRlbHkgY29udGFjdHMgdGhlIFNNVFAgc2VydmVyIChvcgorLS5JUiBcJS91c3IvbGliL3NlbmRtYWlsICkKKysuSVIgXCUvdXNyL3NiaW4vc2VuZG1haWwgKQorIGV2ZW4gd2hlbiBvcGVyYXRpbmcgaW4KKyAuSSBkaXNjb25uZWN0ZWQKKyBtb2RlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvZXhwbGljaXRseS5kaXNhYmxlLmtyYjUuc3VwcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzL2V4cGxpY2l0bHkuZGlzYWJsZS5rcmI1LnN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0ZmQwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzL2V4cGxpY2l0bHkuZGlzYWJsZS5rcmI1LnN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAora3JiNSBzdXBwb3J0IGlzIGF1dG9kZXRlY3RlZCBmcm9tIHN5c3Jvb3QgbWFraW5nIGJ1aWxkcyB1bmRldGVybWluaXN0aWMKK2ZlZWwgZnJlZSB0byBpbXByb3ZlIHRoaXMgdG8gc3VwcG9ydCBleHBsaWNpdGx5IGVuYWJsaW5nL2Rpc2FibGluZyBpdAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCistLS0gYS9tYWtlY29uZmlnCTIwMTMtMDctMjEgMTU6MDY6MTEuMTc3NzkyMzM0ICswMjAwCisrKysgYi9tYWtlY29uZmlnCTIwMTMtMDctMjEgMTU6MDc6MjAuMDI4NzkzOTk0ICswMjAwCitAQCAtNDI0LDM2ICs0MjQsNiBAQAorIH0KKyAhCisgCistPCR0bXAyLmMgbGlua19jaGVjayBnc3NhcGkgJ2ZvciBHU1NBUEkgaW4gbGliZ3NzJyBcCistCQknI2RlZmluZSBVU0VfR1NTQVBJJyAnLWxnc3MnIHx8CistCTwkdG1wMi5jIGxpbmtfY2hlY2sgZ3NzYXBpICdmb3IgR1NTQVBJIGluIGxpYmdzc2FwaV9rcmI1JyBcCistCQkJJyNkZWZpbmUgVVNFX0dTU0FQSScgJy1sZ3NzYXBpX2tyYjUnIHx8CistCQlsaW5rX2NoZWNrIGdzc2FwaSAnZm9yIEdTU0FQSSBpbiBsaWJnc3NhcGlfa3JiNSwgb2xkLXN0eWxlJyBcCistCQkJCScjZGVmaW5lIFVTRV9HU1NBUEkKKy0jZGVmaW5lIEdTU0FQSV9PTERfU1RZTEUnICctbGdzc2FwaV9rcmI1JyA8PFwhIHx8IFwKKy0JCQlsaW5rX2NoZWNrIGdzc2FwaSAnZm9yIEdTU0FQSSBpbiBsaWJnc3NhcGknIFwKKy0JCQkJJyNkZWZpbmUgVVNFX0dTU0FQSQorLSNkZWZpbmUJR1NTQVBJX1JFR19JTkNMVURFJyAnLWxnc3NhcGknIDw8XCUKKy0jaW5jbHVkZSA8Z3NzYXBpL2dzc2FwaS5oPgorLSNpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpX2dlbmVyaWMuaD4KKy0KKy1pbnQgbWFpbih2b2lkKQorLXsKKy0JZ3NzX2ltcG9ydF9uYW1lKDAsIDAsIGdzc19udF9zZXJ2aWNlX25hbWUsIDApOworLQlnc3NfaW5pdF9zZWNfY29udGV4dCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTsKKy0JcmV0dXJuIDA7CistfQorLSEKKy0jaW5jbHVkZSA8Z3NzYXBpLmg+CistCistaW50IG1haW4odm9pZCkKKy17CistCWdzc19pbXBvcnRfbmFtZSgwLCAwLCBHU1NfQ19OVF9IT1NUQkFTRURfU0VSVklDRSwgMCk7CistCWdzc19pbml0X3NlY19jb250ZXh0KDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApOworLQlyZXR1cm4gMDsKKy19CistJQorLQorIGNhdCA+JHRtcDIuYyA8PFwhCisgI2luY2x1ZGUgImNvbmZpZy5oIgorICNpZmRlZiBIQVZFX05MX0xBTkdJTkZPCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9tYWlseF8xMi41LTUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9tYWlseF8xMi41LTUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZhOTA0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L21haWx4XzEyLjUtNS5iYgpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIm1haWx4IGlzIHRoZSB0cmFkaXRpb25hbCBjb21tYW5kLWxpbmUtbW9kZSBtYWlsIHVzZXIgYWdlbnQiCisKK0RFU0NSSVBUSU9OID0gIk1haWx4IGlzIGRlcml2ZWQgZnJvbSBCZXJrZWxleSBNYWlsIGFuZCBpcyBpbnRlbmRlZCBwcm92aWRlIHRoZSBcCitmdW5jdGlvbmFsaXR5IG9mIHRoZSBQT1NJWCBtYWlseCBjb21tYW5kIHdpdGggYWRkaXRpb25hbCBzdXBwb3J0IFwKK2ZvciBNSU1FLCBJTUFQLCBQT1AzLCBTTVRQLCBhbmQgUy9NSU1FLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL2hlaXJsb29tLnNvdXJjZWZvcmdlLm5ldC9tYWlseC5odG1sIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIkJTRCAmIE1QTC0xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDIwMmEwYTYyOTEwY2Y5NGY3YWY4YTM0MzZhMmEyZGQiCisKK0RFUEVORFMgPSAib3BlbnNzbCIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vaC9oZWlybG9vbS1tYWlseC9oZWlybG9vbS1tYWlseF8xMi41Lm9yaWcudGFyLmd6O25hbWU9YXJjaGl2ZSBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURvbi10LXJldXNlLXdlYWstc3ltYm9sLW9wdG9wdC10by1maXgtRlRCRlMtb24tbWlwcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLVBhdGNoZWQtb3V0LVNTTDItc3VwcG9ydC1zaW5jZS1pdC1pcy1uby1sb25nZXItc3VwcG8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1GaXhlZC1MaW50aWFuLXdhcm5pbmctd2FybmluZy1tYWNyby1OLW5vdC1kZWZpbmVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTEtb3V0b2YtSW50cm9kdWNlLWV4cGFuZGFkZHItZmxhZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLXVucGFjay1EaXNhYmxlLW9wdGlvbi1wcm9jZXNzaW5nLWZvci1lbWFpbC1hZGRyZXNzZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMy1maW8uYy1VbmNvbmRpdGlvbmFsbHktcmVxdWlyZS13b3JkZXhwLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNC1nbG9ibmFtZS1JbnZva2Utd29yZGV4cC13aXRoLVdSREVfTk9DTUQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNS11c3Itc2Jpbi1zZW5kbWFpbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9leHBsaWNpdGx5LmRpc2FibGUua3JiNS5zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjI5YTYwMzNlZjE0MTI4MjRkMDJlYjlkOTIxM2NiMWYyIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMDE1YmE0MjA5MTM1ODY3ZjM3YTAyNDVkMjIyMzVhMzkyYjhiYmVkOTU2OTEzMjg2Yjg4N2MyZTJhOWE0MjFhZCIKKworUyA9ICIke1dPUktESVJ9L2hlaXJsb29tLW1haWx4LTEyLjUiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitDRkxBR1NfYXBwZW5kID0gIiAtRF9CU0RfU09VUkNFIC1EREVCSUFOIC1JJHtTfS9FWFQiCisKKyMgIlNUUklQPXRydWUiIG1lYW5zIHRoYXQgJ3RydWUnIGNvbW1hbmQgd2lsbCBiZSB1c2VkIHRvICdzdHJpcCcgZmlsZXMgd2hpY2ggd2lsbCBhY2hpZXZlIHRoZSBlZmZlY3Qgb2Ygbm90IHN0cmlwcGluZyB0aGVtCisjIG1haWx4J3MgTWFrZWZpbGUgZG9lc24ndCBhbGxvdyBhIG1vcmUgc3RyYWlnaHRmb3J3YXJkIHdheSB0byBhdm9pZCBzdHJpcHBpbmcKK0VYVFJBX09FTUFLRSA9ICJTRU5ETUFJTD0ke3NiaW5kaXJ9L3NlbmRtYWlsIElQdjY9LURIQVZFX0lQdjZfRlVOQ1MgUFJFRklYPS91c3IgVUNCSU5TVEFMTD0vdXNyL2Jpbi9pbnN0YWxsIFNUUklQPXRydWUiCisKKyMgVGhlIG1ha2Vjb25maWcgY2FuJ3QgcnVuIHBhcmFsbGVsbHksIG90aGVyd2lzZSB0aGUgY2hlY2tpbmcgcmVzdWx0cworIyBtaWdodCBiZSBpbmNvcnJlY3QgYW5kIGxlYWQgdG8gZXJyb3JzOgorIyBmaW8uYzo1NjoxNzogZmF0YWwgZXJyb3I6IHNzbC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisjICNpbmNsdWRlIDxzc2wuaD4KK1BBUkFMTEVMX01BS0UgPSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuLXBhZ2VzL21hbi1wYWdlc180LjAyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuLXBhZ2VzL21hbi1wYWdlc180LjAyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiOTBhNDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4tcGFnZXMvbWFuLXBhZ2VzXzQuMDIuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJMaW51eCBtYW4tcGFnZXMiCitERVNDUklQVElPTiA9ICJUaGUgTGludXggbWFuLXBhZ2VzIHByb2plY3QgZG9jdW1lbnRzIHRoZSBMaW51eCBrZXJuZWwgYW5kIEMgbGlicmFyeSBpbnRlcmZhY2VzIHRoYXQgYXJlIGVtcGxveWVkIGJ5IHVzZXIgcHJvZ3JhbXMiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2RvY3MvbWFuLXBhZ2VzIgorTElDRU5TRSA9ICJHUEx2MisiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTttZDU9OGYyYTNkNDMwNTdkNDU4ZTUwNjY3MTQ5ODA1NjdhNjAiCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvZG9jcy8ke0JQTn0vQXJjaGl2ZS8ke0JQfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5M2RmMzI3OTc5OGEzMzQ1YmIyYzcwOTU4NGM4MzYzOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0MjMyNGY5ZWQ0N2M4OWE0M2NiMzdiNmJiMGQ1ZmJjYWQ0NDgzOGVlZTQ1Y2QzOTRlMTgxYzk4ZDAzOGM0OWZmIgorCitSREVQRU5EU18ke1BOfSA9ICJtYW4iCisKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfQorfQorCisjIE9ubHkgZGVsaXZlcmVzIG1hbi1wYWdlcyBzbyBGSUxFU18ke1BOfSBnZXRzIGV2ZXJ5dGhpbmcKK0ZJTEVTXyR7UE59LWRvYyA9ICIiCitGSUxFU18ke1BOfSA9ICIke21hbmRpcn0vKiIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gInBhc3N3ZC41IGdldHNwbmFtLjMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcGFzc3dkLjVdID0gIiR7bWFuZGlyfS9tYW41L3Bhc3N3ZC41IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dldHNwbmFtLjNdID0gIiR7bWFuZGlyfS9tYW4zL2dldHNwbmFtLjMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL2NvbmZpZ3VyZV9zZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL2NvbmZpZ3VyZV9zZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ5ZTY4MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vY29uZmlndXJlX3NlZC5wYXRjaApAQCAtMCwwICsxLDMyIEBACittYW46IHJlcGxhY2UgJywnIHdpdGggJyMnCisKK1NvbWV0aW1lcywgdGhlIHBhcmFtZXRlcnMgb2YgQ0MvQlVJTERfQ0MgY29udGFpbnMgdGhlICcsJywgd2hpY2gKK2NhdXNlIHRoZSBzZWQgY29tbWFuZCBmYWlsZWQsIHNvIHJlcGxhY2UgdGhlICcsJyB3aXRoICcjJworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWXVlIFRhbyA8WXVlLlRhb0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA5ZjYyY2Y5Li45YTU2NWFlIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0xMzIxLDkgKzEzMjEsOSBAQCBkbworICAgZWNobyAiQ3JlYXRpbmcgJGluZmlsZSBmcm9tICRpbmZpbGUuaW4iCisgICBzZWQgLWUgJworIHMsQHZlcnNpb25ALCR2ZXJzaW9uLAorLXMsQENDQCwkQ0MsCisrcyNAQ0NAIyRDQyMKKyBzLEBFWEVFWFRALCRFWEVFWFQsCistcyxAQlVJTERfQ0NALCRCVUlMRF9DQywKKytzI0BCVUlMRF9DQ0AjJEJVSUxEX0NDIworIHMsQElOU1RBTExALCRJTlNUQUxMLAorIHMsQERFRlNALCRERUZTLAorIHMsQExJQlNALCRMSUJTLAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVnLW5vbnJvb3RidWlsZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWctbm9ucm9vdGJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmODM0YmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVnLW5vbnJvb3RidWlsZC5wYXRjaApAQCAtMCwwICsxLDE2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLXUgLXIgbWFuLTEuNWcub2xkL2NvbmZpZ3VyZSBtYW4tMS41Zy9jb25maWd1cmUKKy0tLSBtYW4tMS41Zy5vbGQvY29uZmlndXJlCVdlZCBBcHIgIDcgMDQ6MTY6MDUgMTk5OQorKysrIG1hbi0xLjVnL2NvbmZpZ3VyZQlNb24gTWF5IDE1IDE1OjIyOjQ0IDIwMDAKK0BAIC03OTEsNyArNzkxLDcgQEAKKyAgICAgcmVhZCBtb2RlCisgICAgIGlmIHRlc3QgIiRtb2RlIiAhPSAiIjsgdGhlbiBtYW5fbW9kZT0kbW9kZTsgZmkKKyAgIGZpCistICBtYW5faW5zdGFsbF9mbGFncz0iLW0gJG1hbl9tb2RlIC1vICRtYW5fdXNlciAtZyAkbWFuX2dyb3VwIgorKyAgbWFuX2luc3RhbGxfZmxhZ3M9IiIKKyBmaQorIAorICMgV2hhdCBzZWN0aW9ucyBkbyB3ZSBhbnRpY2lwYXRlPwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aDEtZ2VuY2F0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aDEtZ2VuY2F0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NGIxNGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVoMS1nZW5jYXQucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gZ2VuY2F0L2dlbmxpYi5jCTIwMDYtMDgtMDIgMjA6MTE6NDQuMDAwMDAwMDAwICswMjAwCisrKysgZ2VuY2F0L2dlbmxpYi5jLm9kZW4JMjAwOC0xMi0yMSAxOToxODo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC00Nyw2ICs0Nyw3IEBAIHVwLXRvLWRhdGUuICBNYW55IHRoYW5rcy4KKyAwMS8xNC85MSAgIDQgbmF6Z3VsCU9mZiBieSBvbmUgb24gbnVtYmVyIHNwZWNpZmllZCBlbnRyaWVzCisgKi8KKyAKKysjdW5kZWYgX0dOVV9TT1VSQ0UKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2lmZGVmIFNZU1YKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWgxLW1ha2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVoMS1tYWtlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MzFlYjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVoMS1tYWtlLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVnL21hbi9NYWtlZmlsZS5pbi5taWtlCUZyaSBBcHIgIDkgMTM6MzU6NTQgMTk5OQorKysrIG1hbi0xLjVnL21hbi9NYWtlZmlsZS5pbglGcmkgQXByICA5IDEzOjM2OjQ1IDE5OTkKK0BAIC0xLDggKzEsOCBAQAorICMgb25seSBleGVjdXRlZCBmcm9tIGEgc3ViZGlyCisgTUFOMSA9IG1hbiB3aGF0aXMgYXByb3BvcworLU1BTjUgPSBtYW4uY29uZgorK01BTjUgPSBtYW4uY29uZmlnCisgTUFOOCA9IG1ha2V3aGF0aXMKKy1BTEwgPSBtYW4uMSB3aGF0aXMuMSBhcHJvcG9zLjEgbWFuLmNvbmYuNQorK0FMTCA9IG1hbi4xIHdoYXRpcy4xIGFwcm9wb3MuMSBtYW4uY29uZmlnLjUKKyBNQVlCRTggPSBtYWtld2hhdGlzCisgCisgLlNVRkZJWEVTOiAubWFuIC4xIC41IC44CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1pbml0aWFsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aTItaW5pdGlhbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTU2YzA3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aTItaW5pdGlhbC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41aTIvc3JjL21ha2V3aGF0aXMuc2guaW5pdGlhbAlUdWUgSnVsICAzIDE1OjM4OjM5IDIwMDEKKysrKyBtYW4tMS41aTIvc3JjL21ha2V3aGF0aXMuc2gJVHVlIEp1bCAgMyAxNTozOTozOSAyMDAxCitAQCAtODEsOCArODEsMTAgQEAKKyAJY29udGludWU7OworICAgICAtcykgc2V0c2VjdGlvbnM9MQorIAljb250aW51ZTs7CistICAgIC11KSBmaW5kYXJnPSItbmV3ZXIgL3Zhci9jYWNoZS9tYW4vd2hhdGlzIgorLQl1cGRhdGU9MQorKyAgICAtdSkgaWYgWyAtZSAvdmFyL2NhY2hlL21hbi93aGF0aXMgXTsgdGhlbgorKwkgIGZpbmRhcmc9Ii1uZXdlciAvdmFyL2NhY2hlL21hbi93aGF0aXMiCisrCSAgdXBkYXRlPTEKKysJZmkKKyAJY29udGludWU7OworICAgICAtdikgdmVyYm9zZT0xCisgCWNvbnRpbnVlOzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLW5ld2xpbmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1uZXdsaW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMWRmNWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1uZXdsaW5lLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIHNyYy9tYW4uYwkyMDA4LTEyLTIxIDE5OjE3OjMxLjAwMDAwMDAwMCArMDEwMAorKysrIHNyYy9tYW4uYy5vZGVuCTIwMDgtMTItMjEgMTk6MTc6MzguMDAwMDAwMDAwICswMTAwCitAQCAtMzkxLDcgKzM5MSw3IEBAIGFnYWluOgorIAkgIGJlZysrOworIAorICAgICAgZW5kID0gYmVnOworLSAgICAgd2hpbGUgKCplbmQgIT0gJyAnICYmICplbmQgIT0gJ1x0JyAmJiAqZW5kICE9ICdcbicgJiYgKmVuZCAhPSAnXDAnKQorKyAgICAgd2hpbGUgKCplbmQgIT0gJyAnICYmICplbmQgIT0gJ1x0JyAmJiAqZW5kICE9ICdcbicgJiYgKmVuZCAhPSAnXDAnICYmIChlbmQtYnVmKTxCVUZTSVpFKQorIAkgIGVuZCsrOwkJLyogbm90ZSB0aGF0IGJ1ZiBpcyBOVUwtdGVybWluYXRlZCAqLworICAgICAgKmVuZCA9ICdcMCc7CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1vdmVyZmxvdy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLW92ZXJmbG93LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZDI4ODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1vdmVyZmxvdy5wYXRjaApAQCAtMCwwICsxLDE2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41aTIvc3JjL21hbi5jLm92ZXJmbG93CU1vbiBKdW4gMjUgMDA6MDE6NDUgMjAwMQorKysrIG1hbi0xLjVpMi9zcmMvbWFuLmMJTW9uIEp1biAyNSAwMDowMTo0NSAyMDAxCitAQCAtMzgxLDYgKzM4MSw5IEBACisgCSAgc3RyY2F0KG5hbWUsICIvIik7CisgCSAgc3RyY2F0KG5hbWUsIGJlZyk7CisgICAgICB9CisrICAgICAvKiBJZiB0aGlzIGlzIHRvbyBsb25nLCBiYWQgdGhpbmdzIGhhdmUgYWxyZWFkeSBoYXBwZW5lZC4gKgorKyAgICAgICogd2Ugc2hvdWxkIHF1aXQgSU1NRURJQVRFTFkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICBpZihzdHJsZW4obmFtZSk+c2l6ZW9mKHVsdG5hbWUpKSBfZXhpdCgxKTsKKyAKKyAgICAgIGdvdG8gYWdhaW47CisgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai1pMThuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai1pMThuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZTA5YzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVqLWkxOG4ucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gbWFuLTEuNWovbXNncy9pbnN0LnNoLmkxOG4JV2VkIEFwciAyNSAxMDo0MDo1MCAyMDAxCisrKysgbWFuLTEuNWovbXNncy9pbnN0LnNoCVdlZCBBcHIgMjUgMTA6NDE6MTcgMjAwMQorQEAgLTI3LDggKzI3LDcgQEAKKyBmb3IgaiBpbiAkTTsgZG8KKyAgIGlmIFsgLWYgJGogXTsgdGhlbgorICAgICBpPWBlY2hvICRqIHwgc2VkIC1lICdzL21lc3MuLy87IHMvLmNhdC8vJ2AKKy0gICAgZGVzdD1gZWNobyAkbG9jZGlyIHwgc2VkIC1lICJzLyVOL21hbi87IHMvJUwvJGkvImAKKy0gICAgZGVzdD0ke1BSRUZJWH0kZGVzdAorKyAgICBkZXN0PSR7UFJFRklYfS9gZWNobyAkbG9jZGlyIHwgc2VkIC1lICJzLyVOL21hbi87IHMvJUwvJGkvImAKKyAgICAgZWNobyAibWtkaXIgLXAgYGRpcm5hbWUgJGRlc3RgIgorICAgICBta2RpciAtcCBgZGlybmFtZSAkZGVzdGA7CisgICAgIGVjaG8gImluc3RhbGwgLWMgLW0gNjQ0ICRqICRkZXN0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai1ub2NhY2hlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai1ub2NhY2hlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MWRkZGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVqLW5vY2FjaGUucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gbWFuLTEuNWovc3JjL21hbi5jb25mLmluLm5vY2FjaGUJVGh1IE5vdiAyMiAxNTowNzoxMiAyMDAxCisrKysgbWFuLTEuNWovc3JjL21hbi5jb25mLmluCVRodSBOb3YgMjIgMTU6MDc6MTIgMjAwMQorQEAgLTgxLDYgKzgxLDkgQEAKKyAjIAorICNOT0NBQ0hFCisgIworKyMgTk9DQUNIRSBrZWVwcyBtYW4gZnJvbSBjcmVhdGluZyBjYWNoZSBwYWdlcworK05PQ0FDSEUKKysjCisgIyBVc2VmdWwgcGF0aHMgLSBub3RlIHRoYXQgQ09MIHNob3VsZCBub3QgYmUgZGVmaW5lZCB3aGVuCisgIyBOUk9GRiBpcyBkZWZpbmVkIGFzICJncm9mZiAtVGFzY2lpIiBvciAiZ3JvZmYgLVRsYXRpbjEiOworICMgbm90IG9ubHkgaXMgaXQgc3VwZXJmbHVvdXMsIGJ1dCBpdCBhY3R1YWxseSBkYW1hZ2VzIHRoZSBvdXRwdXQuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVqLXV0ZjgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVqLXV0ZjgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkM2U0YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWotdXRmOC5wYXRjaApAQCAtMCwwICsxLDYxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41ai9jb25maWd1cmUudXRmOAlUaHUgTm92IDIyIDE1OjAyOjM1IDIwMDEKKysrKyBtYW4tMS41ai9jb25maWd1cmUJVGh1IE5vdiAyMiAxNTowMzoxNSAyMDAxCitAQCAtNDA4LDkgKzQwOCw5IEBACisgICBGZ2F3az0vYmluL2dhd2sKKyAgIEZhd2s9L2Jpbi9nYXdrCisgICBGbWF3az1taXNzaW5nCistICB0cm9mZj0iIgorLSAgbnJvZmY9IiIKKy0gIGpucm9mZj0iIgorKyAgdHJvZmY9L3Vzci9iaW4vdHJvZmYKKysgIG5yb2ZmPS91c3IvYmluL25yb2ZmCisrICBqbnJvZmY9L3Vzci9iaW4vbnJvZmYKKyAgIGVxbj0iIgorICAgbmVxbj0iIgorICAgam5lcW49IiIKK0BAIC00NTMsNiArNDUzLDggQEAKKyAgICAgZG9uZQorICAgZG9uZQorICAgRmdyb2ZmPS91c3IvYmluL2dyb2ZmCisrICBGbnJvZmY9L3Vzci9iaW4vbnJvZmYKKysgIEZqbnJvZmY9L3Vzci9iaW4vbnJvZmYKKyAgIEZnZXFuPS91c3IvYmluL2dlcW4KKyAgIEZndGJsPS91c3IvYmluL2d0YmwKKyAgIEZjb2w9L3Vzci9iaW4vY29sCitAQCAtNDg1LDI1ICs0ODcsMjUgQEAKKyAgIHRoZW4KKyAgICAgaWYgdGVzdCAkRm5yb2ZmID0gIm1pc3NpbmciCisgICAgIHRoZW4KKy0gICAgICBucm9mZj0ibnJvZmYgLVRsYXRpbjEgLW1hbmRvYyIKKysgICAgICBucm9mZj0ibnJvZmYgLVR1dGY4IC1tYW5kb2MiCisgICAgIGVsc2UKKy0gICAgICBucm9mZj0iJEZucm9mZiAtVGxhdGluMSAtbWFuZG9jIgorKyAgICAgIG5yb2ZmPSIkRm5yb2ZmIC1UdXRmOCAtbWFuZG9jIgorICAgICBmaQorICAgICB0cm9mZj0idHJvZmYgLW1hbmRvYyIKKyAgICAgZWNobyAiV2FybmluZzogY291bGQgbm90IGZpbmQgZ3JvZmYiCisgICBlbHNlCisgICAgIGlmIHRlc3QgJEZucm9mZiA9ICJtaXNzaW5nIgorICAgICB0aGVuCistICAgICAgbnJvZmY9IiRGZ3JvZmYgLVRsYXRpbjEgLW1hbmRvYyIKKysgICAgICBucm9mZj0iJEZncm9mZiAtVHV0ZjggLW1hbmRvYyIKKyAgICAgZWxzZQorLSAgICAgIG5yb2ZmPSIkRm5yb2ZmIC1UbGF0aW4xIC1tYW5kb2MiCisrICAgICAgbnJvZmY9IiRGbnJvZmYgLVR1dGY4IC1tYW5kb2MiCisgICAgIGZpCisgICAgIHRyb2ZmPSIkRmdyb2ZmIC1UcHMgLW1hbmRvYyIKKy0gICAgam5yb2ZmPSIkRmdyb2ZmIC1UbmlwcG9uIC1tYW5kb2NqIgorKyAgICBqbnJvZmY9IiRGam5yb2ZmIC1UdXRmOCAtbWFuZG9jaiIKKyAgIGZpCisgICBlcW49IiRGZ2VxbiAtVHBzIgorLSAgbmVxbj0iJEZnZXFuIC1UbGF0aW4xIgorLSAgam5lcW49IiRGZ2VxbiAtVG5pcHBvbiIKKysgIG5lcW49IiRGZ2VxbiAtVHV0ZjgiCisrICBqbmVxbj0iJEZnZXFuIC1UdXRmOCIKKyAgIHRibD0iJEZndGJsIgorICAgY29sPSIkRmNvbCIKKyAgIHZncmluZD0iJEZ2Z3JpbmQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLWNvbmZwYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ay1jb25mcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTc0NmMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ay1jb25mcGF0aC5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBjb25maWd1cmUJMjAwNi0wNS0wMSAxOTo1NjoxNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBjb25maWd1cmUub2RlbgkyMDA4LTEyLTIxIDE5OjE2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTE5OCw3ICsxOTgsNyBAQAorICAgICBjb25mZGlyPSIke2NvbmZwcmVmaXh9L3NoYXJlL21pc2MiCisgICBmaQorIGZpCistY29uZmZpbGVuYW1lPSJtYW4uY29uZiIKKytjb25mZmlsZW5hbWU9Im1hbi5jb25maWciCisgCisgaWYgdGVzdCAiJFJBTkRPTSIgPSAiJFJBTkRPTSI7IHRoZW4KKyAgICMgUGxhaW4gb2xkIEJvdXJuZSBzaGVsbC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWstbm9uYXNjaWkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLW5vbmFzY2lpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NjJkOWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLW5vbmFzY2lpLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIC4vc3JjL2Fwcm9wb3Muc2gubm9uYXNjaWkJMjAwMS0xMS0yMyAwMDozMDo0Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyAuL3NyYy9hcHJvcG9zLnNoCTIwMDItMDgtMTMgMTU6NDQ6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtMTgsOSArMTgsOSBAQAorIAorICMgV2hlbiBtYW4gcGFnZXMgaW4geW91ciBmYXZvcml0ZSBsb2NhbGUgbG9vayB0byBncmVwIGxpa2UgYmluYXJ5IGZpbGVzCisgIyAoYW5kIHlvdSB1c2UgR05VIGdyZXApIHlvdSBtYXkgd2FudCB0byBhZGQgdGhlICdhJyBvcHRpb24gdG8gKmdyZXBvcHQxLgorLWFwcm9wb3NncmVwb3B0MT0naScKKythcHJvcG9zZ3JlcG9wdDE9J2lhJworIGFwcm9wb3NncmVwb3B0Mj0nJworLXdoYXRpc2dyZXBvcHQxPSdpdycKKyt3aGF0aXNncmVwb3B0MT0naXdhJworIHdoYXRpc2dyZXBvcHQyPSdeJworIGdyZXBvcHQxPSQlYXByb3Bvc19vcl93aGF0aXMlZ3JlcG9wdDEKKyBncmVwb3B0Mj0kJWFwcm9wb3Nfb3Jfd2hhdGlzJWdyZXBvcHQyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLXNvZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ay1zb2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGI5MjUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ay1zb2ZpeC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41ai9zcmMvbWFuLmMuc29maXgJVGh1IE5vdiAyMiAxNDo1MTo0NCAyMDAxCisrKysgbWFuLTEuNWovc3JjL21hbi5jCVRodSBOb3YgMjIgMTQ6NTI6NDQgMjAwMQorQEAgLTMwMCw3ICszMDAsNyBAQAorIAorICAgICAgaWYgKHN0cmxlbihuYW1lMCkgPj0gc2l6ZW9mKHVsdG5hbWUpKQorIAkgICAgIHJldHVybiBuYW1lMDsKKy0gICAgIHN0cmNweSh1bHRuYW1lLCBuYW1lMCk7CisrICAgICBzdHJuY3B5KHVsdG5hbWUsIG5hbWUwLCBCVUZTSVpFLTMyKTsKKyAgICAgIG5hbWUgPSB1bHRuYW1lOworIAorIGFnYWluOgorQEAgLTMzMiw3ICszMzIsNyBAQAorIAkgICAqIC5zbyBmaWxlcyAtIHdlIGNvdWxkIGdsb2IgZm9yIGFsbCBwb3NzaWJsZSBleHRlbnNpb25zLAorIAkgICAqIGZvciBub3c6IG9ubHkgdHJ5IC5negorIAkgICAqLworLQkgIGVsc2UgaWYgKGZwID09IE5VTEwgJiYgZ2V0X2V4cGFuZGVyKCIuZ3oiKSAmJgorKwkgIGlmIChmcCA9PSBOVUxMICYmIGdldF9leHBhbmRlcigiLmd6IikgJiYKKyAJCSAgIHN0cmxlbihuYW1lKStzdHJsZW4oIi5neiIpIDwgQlVGU0laRSkgeworIAkgICAgICAgc3RyY2F0KG5hbWUsICIuZ3oiKTsKKyAJICAgICAgIGZwID0gZm9wZW4gKG5hbWUsICJyIik7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1idWcxMTYyMS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLWJ1ZzExNjIxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MTI5OTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1idWcxMTYyMS5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSAuL2NvbmZpZ3VyZS5hZAkyMDAzLTEyLTExIDE5OjE3OjEwLjAwMDAwMDAwMCArMDEwMAorKysrIC4vY29uZmlndXJlCTIwMDMtMTItMTEgMTk6MTc6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtMjYsNyArMjYsNyBAQAorICMgKEluZGVlZCwgLXIgbWF5IGNhdXNlIHRoZSB0ZXJtaW5hbCB0byBnZXQgaW50byBmdW5ueSBzdGF0ZXMuCisgIyBWZXJ5IGluY29udmVuaWVudC4gRm9yIHZpZXdpbmcgcGFnZXMgaW4gc3RyYW5nZSBsb2NhbGVzLCBzZXQgTENfKi4pCisgIworLURFRkFVTFRMRVNTT1BUPSItaXMiCisrREVGQVVMVExFU1NPUFQ9Ii1pc3IiCisgIworICMgTm90ZSB0aGF0IG5vdCBjcmVhdGluZyBhbnkgY2F0IGRpcmVjdG9yaWVzICgvdmFyL2NhY2hlL21hbiBvciBzbykKKyAjIGFuZCBub3QgbWFraW5nIG1hbiBzdWlkIG9yIHNnaWQgaXMgcmVjb21tZW5kZWQuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1idWlsZHJvb3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1idWlsZHJvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM5N2Y1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLWJ1aWxkcm9vdC5wYXRjaApAQCAtMCwwICsxLDUyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSAuL2NvbmZpZ3VyZS5sZXNzCTIwMDMtMTItMTEgMTk6MTg6MTUuMDAwMDAwMDAwICswMTAwCisrKysgLi9jb25maWd1cmUJMjAwMy0xMi0xMSAxOToyMDowMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC00MDEsMTggKzQwMSwxMyBAQAorIAorIGlmIHRlc3QgIiRhbnMiID0gImZhbHNlIgorIHRoZW4KKy0gIGZvciBpIGluIG1vcmUgbGVzcyBjbXAgY2F0IGF3ayBnYXdrIG1hd2sKKy0gIGRvCistICAgIGV2YWwgRiRpPSJtaXNzaW5nIgorLSAgICBmb3IgaiBpbiAkREVGUEFUSAorLSAgICBkbworLSAgICAgIGlmIHRlc3QgLWYgJGovJGkKKy0gICAgICB0aGVuCistCWV2YWwgRiRpPSRqLyRpCistCWJyZWFrCistICAgICAgZmkKKy0gICAgZG9uZQorLSAgZG9uZQorKyAgRm1vcmU9L2Jpbi9tb3JlCisrICBGbGVzcz0vdXNyL2Jpbi9sZXNzCisrICBGY21wPS91c3IvYmluL2NtcAorKyAgRmNhdD0vYmluL2NhdAorKyAgRmdhd2s9L2Jpbi9nYXdrCisrICBGYXdrPS9iaW4vZ2F3aworKyAgRm1hd2s9bWlzc2luZworICAgdHJvZmY9IiIKKyAgIG5yb2ZmPSIiCisgICBqbnJvZmY9IiIKK0BAIC00NTcsNiArNDUyLDE5IEBACisgICAgICAgZmkKKyAgICAgZG9uZQorICAgZG9uZQorKyAgRmdyb2ZmPS91c3IvYmluL2dyb2ZmCisrICBGZ2Vxbj0vdXNyL2Jpbi9nZXFuCisrICBGZ3RibD0vdXNyL2Jpbi9ndGJsCisrICBGY29sPS91c3IvYmluL2NvbAorKyAgRmdyZWZlcj0vdXNyL2Jpbi9ncmVmZXIKKysgIEZncGljPS91c3IvYmluL2dwaWMKKysgIEZtb3JlPS9iaW4vbW9yZQorKyAgRmxlc3M9L3Vzci9iaW4vbGVzcworKyAgRmNtcD0vdXNyL2Jpbi9jbXAKKysgIEZjYXQ9L2Jpbi9jYXQKKysgIEZnYXdrPS9iaW4vZ2F3aworKworKworICAgZm9yIGkgaW4gZXFuIHRibCByZWZlciBwaWMKKyAgIGRvCisgICAgIGlmIHRlc3QgYGV2YWwgZWNobyBcXCRGZyRpYCA9ICJtaXNzaW5nIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItbm8tY29sb3ItZm9yLXByaW50aW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItbm8tY29sb3ItZm9yLXByaW50aW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NWZmMWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1uby1jb2xvci1mb3ItcHJpbnRpbmcucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gbWFuLTEuNW0yL2NvbmZpZ3VyZS5jb2xvcgkyMDA2LTA5LTE2IDE4OjI3OjM3LjAwMDAwMDAwMCArMDIwMAorKysrIG1hbi0xLjVtMi9jb25maWd1cmUJMjAwNi0wOS0xNiAxODoyODo0NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC01MzksNiArNTM5LDggQEAKKyAgICAgdHJvZmY9IiR0cm9mZiAtYyIKKyAgICAgbnJvZmY9IiRucm9mZiAtYyIKKyAgICAgam5yb2ZmPSIkam5yb2ZmIC1jIgorK2Vsc2UKKysgICAgdHJvZmY9IiR0cm9mZiAtYyIKKyBmaQorIAorIGlmIFsgeCRkZWZhdWx0ID0geCBdOyB0aGVuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1zaWdwaXBlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItc2lncGlwZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWY3OGVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItc2lncGlwZS5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41bTIvc3JjL3V0aWwuY19zaWdwaXBlCTIwMDYtMTItMDkgMTM6NDM6MjEuMDAwMDAwMDAwICswMTAwCisrKysgbWFuLTEuNW0yL3NyYy91dGlsLmMJMjAwNi0xMi0wOSAxMzo1MzoxMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMTYsMTEgKzExNiwxNCBAQAorIHN0YXRpYyBpbnQKKyBzeXN0ZW0xIChjb25zdCBjaGFyICpjb21tYW5kKSB7CisgCXZvaWQgKCpwcmV2X2hhbmRsZXIpKGludCkgPSBzaWduYWwgKFNJR0lOVCxjYXRjaF9pbnQpOworKwlzaWduYWwgKFNJR1BJUEUsU0lHX0lHTik7CisgCWludCByZXQgPSBzeXN0ZW0oY29tbWFuZCk7CisgCisgCS8qIGNoaWxkIHRlcm1pbmF0ZWQgd2l0aCBzaWduYWw/ICovCisgCWlmIChXSUZTSUdOQUxFRChyZXQpICYmCistCSAgICAoV1RFUk1TSUcocmV0KSA9PSBTSUdJTlQgfHwgV1RFUk1TSUcocmV0KSA9PSBTSUdRVUlUKSkKKysJICAgIChXVEVSTVNJRyhyZXQpID09IFNJR0lOVCB8fAorKwkJIFdURVJNU0lHKHJldCkgPT0gU0lHUElQRSB8fAorKwkJIFdURVJNU0lHKHJldCkgPT0gU0lHUVVJVCkpCisgCQlleGl0KDEpOworIAorIAkvKiBvciB3ZSBjYXVnaHQgYW4gaW50ZXJydXB0PyAqLworQEAgLTEyOCw2ICsxMzEsNyBAQAorIAkJZXhpdCgxKTsKKyAKKyAJc2lnbmFsKFNJR0lOVCxwcmV2X2hhbmRsZXIpOworKwlzaWduYWwoU0lHUElQRSxTSUdfREZMKTsKKyAJcmV0dXJuIHJldDsKKyB9CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi10dl9maHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi10dl9maHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2NmQ3NTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi10dl9maHMucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gbWFuL01ha2VmaWxlLmluCTIwMDgtMTItMjEgMTk6MTk6MzMuMDAwMDAwMDAwICswMTAwCisrKysgbWFuL01ha2VmaWxlLmluLm9kZW4JMjAwOC0xMi0yMSAxOToxOTozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNCw2ICszNCwxNSBAQAorIAlmb3IgaSBpbiAkKE1BTjgpOyBcCisgCQlkbyBpZiB0ZXN0IC1mICQkaS44OyB0aGVuICQoSU5TVEFMTCkgJCRpLjggJChtYW5kaXIpL21hbjgvJCRpLkBtYW44ZXh0QDsgZmk7IGRvbmUKKyAKKytpbnN0YWxsLWwxMG46ICQoQUxMKQorKwlta2RpciAtcCAkKG1hbmRpcikvJChTTEFORykvbWFuMSAkKG1hbmRpcikvJChTTEFORykvbWFuNSAkKG1hbmRpcikvJChTTEFORykvbWFuOAorKwlmb3IgaSBpbiAkKE1BTjEpOyBcCisrCQlkbyAkKElOU1RBTEwpICQkaS4xICQobWFuZGlyKS8kKFNMQU5HKS9tYW4xLyQkaS5AbWFuMWV4dEA7IGRvbmUKKysJZm9yIGkgaW4gJChNQU41KTsgXAorKwkJZG8gJChJTlNUQUxMKSAkJGkuNSAkKG1hbmRpcikvJChTTEFORykvbWFuNS8kJGkuQG1hbjVleHRAOyBkb25lCisrCWZvciBpIGluICQoTUFOOCk7IFwKKysJCWRvIGlmIHRlc3QgLWYgJCRpLjg7IHRoZW4gJChJTlNUQUxMKSAkJGkuOCAkKG1hbmRpcikvJChTTEFORykvbWFuOC8kJGkuQG1hbjhleHRAOyBmaTsgZG9uZQorKworIGNsZWFuOgorIAlybSAtZiBjb3JlICouaW4gKi5AbWFuMWV4dEAgKi5AbWFuNWV4dEAgKi5AbWFuOGV4dEAgKn4KKyAKK0BAIC00OSw3ICs1OCw3IEBACisgCUBmb3IgaSBpbiBAbGFuZ3VhZ2VzQDsgZG8gaWYgdGVzdCAtZCAkJGk7IHRoZW4gZWNobzsgXAorIAkJZWNobyAiPT09PSBJbnN0YWxsaW5nIHRoZSBgY2F0ICQkaS50eHRgIG1hbiBwYWdlcy4gPT09PSI7IFwKKyAJCWNkICQkaTsgU0xBTkc9LyQkaTsgaWYgdGVzdCAkJFNMQU5HID0gL2VuOyB0aGVuIFNMQU5HPSA7IGZpOyBcCistCQlleHBvcnQgU0xBTkc7IG1ha2UgLWYgLi4vTWFrZWZpbGUgaW5zdGFsbDsgY2QgLi47IFwKKysJCWV4cG9ydCBTTEFORzsgbWFrZSAtZiAuLi9NYWtlZmlsZSBpbnN0YWxsLWwxMG47IGNkIC4uOyBcCisgCQllbHNlIGVjaG8gIj09PT0gTm8gJCRpIG1hbiBwYWdlcyBmb3VuZC4gPT09PSI7IGZpOyBkb25lCisgCisgY2xlYW5zdWJkaXJzOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1pMThuX3doYXRpcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtaTE4bl93aGF0aXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMyMTMyNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtaTE4bl93aGF0aXMucGF0Y2gKQEAgLTAsMCArMSwxNDUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtTmF1ciBtYW4tMS42ZS5vcmlnL3NyYy9hcHJvcG9zLnNoIG1hbi0xLjZlL3NyYy9hcHJvcG9zLnNoCistLS0gbWFuLTEuNmUub3JpZy9zcmMvYXByb3Bvcy5zaAkyMDA3LTA1LTE4IDEzOjQ5OjMxLjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL3NyYy9hcHJvcG9zLnNoCTIwMDctMDUtMTggMTQ6MjQ6MzMuMDAwMDAwMDAwIC0wMzAwCitAQCAtNjAsMTYgKzYwLDU2IEBACisgICAgIGVzYWMKKyBkb25lCisgCisrIyBsaXN0IG9mIGxhbmd1YWdlcyB0byBsb29rIGZvcgorK0xBTkdfTElTVD1gZWNobyAkTEFOR1VBR0U6JExDX0FMTDokTENfTUVTU0FHRVM6JExBTkcgfCB0ciAnOicgJyAnYAorK0RJUl9MSVNUPSIiCisrZm9yIGQgaW4gL3Zhci9jYWNoZS9tYW4gJG1hbnBhdGggL3Vzci9saWIKKytkbworKyAgICBmb3IgbCBpbiAkTEFOR19MSVNUCisrICAgIGRvCisrICAgICAgICBpZiBbIC1kICRkLyRsIF0KKysgICAgICAgIHRoZW4KKysgICAgICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIHBhdGggaXMgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QKKysgICAgICAgICAgICBpZiAhIGVjaG8gIiRESVJfTElTVCIgfCBncmVwICIgJGQvJGxcYiIgPiAvZGV2L251bGwKKysgICAgICAgICAgICB0aGVuCisrICAgICAgICAgICAgICAgIERJUl9MSVNUPSIkRElSX0xJU1QgJGQvJGwiCisrICAgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgIGRvbmUKKysgICAgRElSX0xJU1Q9IiRESVJfTElTVCAkZCIKKysgICAgIyBjaGVjayB0aGF0IHRoZSBwYXRoIGlzIG5vdCBhbHJlYWR5IGluIHRoZSBsaXN0CisrICAgIGlmICEgZWNobyAiJERJUl9MSVNUIiB8IGdyZXAgIiAkZFxiIiA+IC9kZXYvbnVsbAorKyAgICB0aGVuCisrICAgICAgICBESVJfTElTVD0iJERJUl9MSVNUICRkLyRsIgorKyAgICBmaQorK2RvbmUKKysKKyB3aGlsZSBbICIkMSIgIT0gIiIgXQorIGRvCisgICAgIGZvdW5kPTAKKy0gICAgZm9yIGQgaW4gL3Zhci9jYWNoZS9tYW4gJG1hbnBhdGggL3Vzci9saWIKKysgICAgIyBpbiBvcmRlciBub3QgdG8gZGlzcGxheSBsaW5lcyBpbiBtb3JlIHRoYW4gb25lIGxhbmd1YWdlIGZvcgorKyAgICAjIGEgc2FtZSBtYW4gcGFnZTsgd2UgY2hlY2sgdGhhdCBhIGdpdmVuIG1hbiBwYWdlIG5hbWUKKysgICAgIyBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRpc3BsYXllZAorKyAgICBCQVo9IiIKKysgICAgZm9yIGQgaW4gJERJUl9MSVNUCisgICAgIGRvCisgICAgICAgICBpZiBbIC1mICRkL3doYXRpcyBdCisgICAgICAgICB0aGVuCistICAgICAgICAgICAgaWYgZ3JlcCAtIiRncmVwb3B0MSIgIiRncmVwb3B0MiIiJDEiICRkL3doYXRpcworKyAgICAgICAgICAgIGlmIEZPTz1gZ3JlcCAtIiRncmVwb3B0MSIgIiRncmVwb3B0MiIiJDEiICRkL3doYXRpc2AKKyAgICAgICAgICAgICB0aGVuCistICAgICAgICAgICAgICAgIGZvdW5kPTEKKysgICAgICAgICAgICAgICAgIyB0aGUgTENfQUxMPUMgaXMgbmVlZGVkIGluIGNhc2UgdGhlIHRleHQgaXMKKysgICAgICAgICAgICAgICAgIyBpbiBhIGRpZmZlcmVudCBlbmNvZGluZyB0aGFuIHRoZSBsb2NhbGUKKysgICAgICAgICAgICAgICAgQkFSPWBlY2hvIC1lICIkRk9PIiB8IExDX0FMTD1DIHNlZCAncy8gLSAuKiQvLycgfCB0ciAnIFtdJyAnXycgfCBzb3J0IC11YAorKyAgICAgICAgICAgICAgICBmb3IgaSBpbiAkQkFSCisrICAgICAgICAgICAgICAgIGRvCisrICAgICAgICAgICAgICAgICAgICBpZiAhIGVjaG8gIiRCQVoiIHwgZ3JlcCAiJGkiID4gL2Rldi9udWxsCisrICAgICAgICAgICAgICAgICAgICB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgQkFaPSIkQkFaICRpIgorKyAgICAgICAgICAgICAgICAgICAgICAgIGk9Il5gZWNobyAkaSB8IHNlZCAnczpfXCs6XFxcKFxbXyBcXVxcXHxcXFxbXFxcfFxcXF1cXFwpXFxcKzpnJ2AiCisrICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAtZSAiJEZPTyIgfCBncmVwICIkaSIKKysgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZD0xCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBkb25lCisgIyBTb21lIHBlb3BsZSBhcmUgc2F0aXNmaWVkIHdpdGggYSBzaW5nbGUgb2NjdXJyZW5jZQorICMgQnV0IGl0IGlzIGJldHRlciB0byBnaXZlIGFsbAorICMgICAgICAgICAgICAgICBicmVhaworZGlmZiAtTmF1ciBtYW4tMS42ZS5vcmlnL3NyYy9tYWtld2hhdGlzLnNoIG1hbi0xLjZlL3NyYy9tYWtld2hhdGlzLnNoCistLS0gbWFuLTEuNmUub3JpZy9zcmMvbWFrZXdoYXRpcy5zaAkyMDA3LTA1LTE4IDEzOjQ5OjMxLjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL3NyYy9tYWtld2hhdGlzLnNoCTIwMDctMDUtMTggMTM6NTA6MDcuMDAwMDAwMDAwIC0wMzAwCitAQCAtNDEsMTIgKzQxLDMyIEBACisgCisgcHJvZ3JhbT1gYmFzZW5hbWUgJDBgCisgCisrIyB0aGlzIGFsbG93cyB0byBkZWZpbmUgbGFuZ3VhZ2Ugc3BlY2lmaWMgdmFsdWVzIGZybyBOQU1FLCBERVNDUklQVElPTgorKyMgaWYgbm90IGRlZmluZWQsIHVzaW5nIHRob3NlIGRlZmF1bHQgdmFsdWVzCisraWYgWyAteiAiJE1BTl9OQU1FIiBdCisrdGhlbgorKwlNQU5fTkFNRT0i0JjQnNCVfE5PTXxKTcOJTk98TkFWTnzOn86dzp/OnM6RfE5PTUJSRXxOSU1FfElaRU5BfE5JTUl8SU1FfFwKKytOw4lWfE5PTUV85ZCN5YmNfOydtOumhHxOQUFNfE5BWldBfE5VTUV80JjQnNCvfE1FTk980J3QkNCX0JLQkHzlkI3np7B85ZCN56ixIgorK2ZpCisraWYgWyAteiAiJE1BTl9ERVNDUklQVElPTiIgXQorK3RoZW4KKysJTUFOX0RFU0NSSVBUSU9OPSLQntCf0JjQodCQ0J3QmNCVfERFU0NSSVBDScOTfFBPUElTfEJFU0tSSVZFTFNFfEJFU0NIUkVJQlVOR3xcCisrzqDOlc6hzpnOk86hzpHOps6XfERFU0NSSVBDScOTTnxLSVJKRUxEVVN8QVpBTFBFTkF8S1VWQVVTfE9QSVN8TEXDjVLDgVN8REVTQ1JJWklPTkV8XAorK+iqrOaYjnzshKTrqoV8QkVTQ0hSSUpWSU5HfERFU0NSScOHw4NPfERFU0NSSUVSRXzQntCf0JjQoXzmj4/ov7AiCisrZmkKKysjIG1ha2UgdGhlbSBpbnRvIGF3ayByZWdleHAKKytNQU5fTkFNRT0iXigke01BTl9OQU1FfSkiOworK01BTl9ERVNDUklQVElPTj0iXigke01BTl9ERVNDUklQVElPTn0pIjsKKysKKyAjIEluIGNhc2UgYm90aCAvdXNyL21hbiBhbmQgL3Vzci9zaGFyZS9tYW4gZXhpc3QsIHRoZSBmb3JtZXIgaXMgbG9jYWwKKyAjIGFuZCBzaG91bGQgYmUgZmlyc3QuCisgIyBJdCBpcyBhIGJ1ZyB0byBhZGQgL3Zhci9jYWNoZS9tYW4gdG8gREVGQ0FUUEFUSC4KKyBkbT0KKyBmb3IgZCBpbiAvdXNyL3NoYXJlL21hbiAvdXNyL21hbiAvdXNyL1gxMVI2L21hbiAvdXNyL2xvY2FsL21hbgorIGRvCisrICAgIGlmIFsgLW4gIiRMQU5HIiAtYSAtZCAiJGQvJExBTkciIF07IHRoZW4KKysJaWYgWyB4JGRtID0geCBdOyB0aGVuIGRtPSIkZC8kTEFORyI7IGVsc2UgZG09JGRtOiIkZC8kTEFORyI7IGZpCisrICAgIGZpCisgICAgIGlmIFsgLWQgJGQgXTsgdGhlbgorIAlpZiBbIHgkZG0gPSB4IF07IHRoZW4gZG09JGQ7IGVsc2UgZG09JGRtOiRkOyBmaQorICAgICBmaQorQEAgLTU1LDYgKzc1LDkgQEAKKyBkYz0KKyBmb3IgZCBpbiAvdmFyL2NhY2hlL21hbiAvdXNyL3NoYXJlL21hbi9wcmVmb3JtYXQgL3Vzci9tYW4vcHJlZm9ybWF0IC91c3Ivc2hhcmUvbWFuIC91c3IvbWFuCisgZG8KKysgICAgaWYgWyAtbiAiJExBTkciIC1hIC1kICIkZC8kTEFORyIgXTsgdGhlbgorKwlpZiBbIHgkZGMgPSB4IF07IHRoZW4gZG09IiRkLyRMQU5HIjsgZWxzZSBkbT0kZGM6IiRkLyRMQU5HIjsgZmkKKysgICAgZmkKKyAgICAgaWYgWyAtZCAkZCBdOyB0aGVuCisgCWlmIFsgeCRkYyA9IHggXTsgdGhlbiBkYz0kZDsgZWxzZSBkYz0kZGM6JGQ7IGZpCisgICAgIGZpCitAQCAtMTk0LDcgKzIxNyw3IEBACisgCSAgICBzZWN0aW9uPSRpCisgCSAgICBjdXJkaXI9JG1hbmRpci8ke3BhZ2VzfSRpCisgCSAgICBleHBvcnQgc2VjdGlvbiB2ZXJib3NlIGN1cmRpcgorLQkgICAgZmluZCAkbWFuZGlyLyR7cGFnZXN9JGkvLiAtbmFtZSAnKicgJGZpbmRhcmcwICRmaW5kYXJnIC1wcmludCB8ICRBV0sgJworKwkgICAgZmluZCAkbWFuZGlyLyR7cGFnZXN9JGkvLiAtbmFtZSAnKicgJGZpbmRhcmcwICRmaW5kYXJnIC1wcmludCB8IExDX0FMTD1DICRBV0sgLXYgTUFOX05BTUU9IiRNQU5fTkFNRSIgLXYgTUFOX0RFU0NSSVBUSU9OPSIkTUFOX0RFU0NSSVBUSU9OIiAnCisgCisgCSAgICBmdW5jdGlvbiByZWFkbGluZSgpIHsKKyAJICAgICAgaWYgKHVzZV96Y2F0IHx8IHVzZV9iemNhdCkgeworQEAgLTI2MSwxMyArMjg0LDcgQEAKKyAJCWdzdWIoLy5cYi8sICIiKTsKKyAJCWlmICgoJDEgfiAvXlwuW1NzXVtIaF0vICYmCisgCQkgICgkMiB+IC9bTm5dW0FhXVtNbV1bRWVdLyB8fAorLQkJICAgJDIgfiAvXkpNyU5PLyB8fCAkMiB+IC9eTkFWTi8gfHwgJDIgfiAvXk5VTUUvIHx8CistCQkgICAkMiB+IC9eQkVaRUlDSE5VTkcvIHx8ICQyIH4gL15OT01CUkUvIHx8CistCQkgICAkMiB+IC9eTklNSS8gfHwgJDIgfiAvXk5PTS8gfHwgJDIgfiAvXklNRS8gfHwKKy0JCSAgICQyIH4gL15OW8lFXVYvIHx8ICQyIH4gL15OQU1BLyB8fCAkMiB+IC9ezL7BsC8gfHwKKy0JCSAgICQyIH4gL17Mvr7OLyB8fCAkMiB+IC9ewMy4py8gfHwgJDIgfiAvXk5BWldBLyB8fAorLQkJICAgJDIgfiAvXu7h+vfh7unlLyB8fCAkMiB+IC9ew/uzxi8gfHwgJDIgfiAvXqZXutkvIHx8CistCQkgICAkMiB+IC9eTk9NRS8gfHwgJDIgfiAvXk5BQU0vIHx8ICQyIH4gL17IzMUvKSkgfHwKKysJCSAgICQyIH4gTUFOX05BTUUgKSkgfHwKKyAJCSAgKHBhZ2VzID09ICJjYXQiICYmICQxIH4gL15OQU1FLykpIHsKKyAJCSAgICBpZiAoIWluc2gpIHsKKyAJCSAgICAgIGluc2ggPSAxOworQEAgLTI3OCw2ICsyOTUsNyBAQAorIAkJICBpZiAoJDEgfiAvXlwuW1NzXVtIaFlTXS8gfHwKKyAJCSAgICAocGFnZXMgPT0gImNhdCIgJiYKKyAJCSAgICAoJDEgfiAvXlNbeVllRV0vIHx8ICQxIH4gL15ERVNDUklQVElPTi8gfHwKKysJCSAgICAgJDEgfiBNQU5fREVTQ1JJUFRJT04gfHwKKyAJCSAgICAgJDEgfiAvXkNPTU1BTkQvIHx8ICQxIH4gL15PVkVSVklFVy8gfHwKKyAJCSAgICAgJDEgfiAvXlNUUlVDVFVSRVMvIHx8ICQxIH4gL15JTlRST0RVQ1RJT04vIHx8CisgCQkgICAgICQwIH4gL15bXiBdLykpKSB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLW1hbmRpcnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLW1hbmRpcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0MDA2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtbWFuZGlycy5wYXRjaApAQCAtMCwwICsxLDMxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS42ZS5vcmlnL3NyYy9tYW4uY29uZi5pbgkyMDA1LTA4LTIwIDIwOjI2OjA2LjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL3NyYy9tYW4uY29uZi5pbgkyMDA3LTA1LTE4IDEwOjMwOjI5LjAwMDAwMDAwMCAtMDMwMAorQEAgLTM2LDExICszNiwxMiBAQAorICMKKyAjIEV2ZXJ5IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIE1BTlBBVEggaW5jbHVkZXMgdGhlc2UgZmllbGRzCisgIworLU1BTlBBVEgJL3Vzci9tYW4KKyBNQU5QQVRICS91c3Ivc2hhcmUvbWFuCisrTUFOUEFUSAkvdXNyL1gxMVI2L21hbgorIE1BTlBBVEgJL3Vzci9sb2NhbC9tYW4KKyBNQU5QQVRICS91c3IvbG9jYWwvc2hhcmUvbWFuCistTUFOUEFUSAkvdXNyL1gxMVI2L21hbgorK01BTlBBVEgJL3Vzci9rZXJiZXJvcy9tYW4KKytNQU5QQVRICS91c3IvbWFuCisgIworICMgVW5jb21tZW50IGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgb25lIG9mIHRoZXNlIGJ5IGRlZmF1bHQKKyAjCitAQCAtNjcsNiArNjgsOSBAQAorIE1BTlBBVEhfTUFQCS91c3IvWDExUjYvYmluCQkvdXNyL1gxMVI2L21hbgorIE1BTlBBVEhfTUFQCS91c3IvYmluL1gxMQkJL3Vzci9YMTFSNi9tYW4KKyBNQU5QQVRIX01BUAkvdXNyL2Jpbi9taAkJL3Vzci9zaGFyZS9tYW4KKytNQU5QQVRIX01BUAkvdXNyL2tlcmJlcm9zL2JpbgkJL3Vzci9rZXJiZXJvcy9tYW4KKytNQU5QQVRIX01BUAkvdXNyL2tlcmJlcm9zL3NiaW4JCS91c3Iva2VyYmVyb3MvbWFuCisrCisgIworICMgTk9BVVRPUEFUSCBrZWVwcyBtYW4gZnJvbSBhdXRvbWF0aWNhbGx5IGFkZGluZyBkaXJlY3RvcmllcyB0aGF0IGxvb2sgbGlrZQorICMgbWFudWFsIHBhZ2UgZGlyZWN0b3JpZXMgdG8gdGhlIHBhdGguCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLW5ld19zZWN0aW9ucy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtbmV3X3NlY3Rpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOTc3M2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLW5ld19zZWN0aW9ucy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS42ZS5vcmlnL2NvbmZpZ3VyZQkyMDA2LTA1LTAxIDE0OjU2OjE0LjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL2NvbmZpZ3VyZQkyMDA3LTA1LTE4IDE0OjM1OjQzLjAwMDAwMDAwMCAtMDMwMAorQEAgLTk2MCw3ICs5NjAsNyBAQAorIAorICMgV2hhdCBzZWN0aW9ucyBkbyB3ZSBhbnRpY2lwYXRlPworIAorLXRtcHNlY3Rpb25zPSIxIDFwIDggMiAzIDNwIDQgNSA2IDcgOSAwcCB0Y2wgbiBsIHAgbyIKKyt0bXBzZWN0aW9ucz0iMSAxcCA4IDIgMyAzcCAzcG0gNCA1IDYgNyA5IDBwIHRjbCBuIGwgcCBvIgorIAorIGlmIFsgeCRkZWZhdWx0ID0geCBdOyB0aGVuCisgICBlY2hvICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXJvX3Vzci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtcm9fdXNyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMWNiMGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXJvX3Vzci5wYXRjaApAQCAtMCwwICsxLDMzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBtYW4tMS42Zi9zcmMvbWFrZXdoYXRpcy5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1hbi0xLjZmLm9yaWcvc3JjL21ha2V3aGF0aXMuc2gJMjAxMC0xMi0yOSAxMzo0MjozNC4wMDAwMDAwMDAgLTA4MDAKKysrKyBtYW4tMS42Zi9zcmMvbWFrZXdoYXRpcy5zaAkyMDEwLTEyLTI5IDEzOjQyOjM1LjY2NzQyODM0NyAtMDgwMAorQEAgLTEyNCw3ICsxMjQsNyBAQAorIAljb250aW51ZTs7CisgICAgIC1zKSBzZXRzZWN0aW9ucz0xCisgCWNvbnRpbnVlOzsKKy0gICAgLXUpIGZpbmRhcmc9Ii1jdGltZSAwIgorKyAgICAtdSkgZmluZGFyZz0iLW5ld2VyIC92YXIvY2FjaGUvbWFuL3doYXRpcyIKKyAJdXBkYXRlPTEKKyAJY29udGludWU7OworICAgICAtdikgdmVyYm9zZT0xCitAQCAtMTY1LDE0ICsxNjUsNyBAQAorICMgZmlyc3QgdHJ1bmNhdGUgYWxsIHRoZSB3aGF0aXMgZmlsZXMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgbmV3LAorICMgdGhlbiBvbmx5IHVwZGF0ZSAtIHdlIG1pZ2h0IHZpc2l0IHRoZSBzYW1lIGRpcmVjdG9yeSB0d2ljZQorIGlmIFsgeCR1cGRhdGUgPSB4IF07IHRoZW4KKy0gICBmb3IgcGFnZXMgaW4gbWFuIGNhdAorLSAgIGRvCistICAgICAgZXZhbCBwYXRoPSJcJCRwYWdlcyJwYXRoCistICAgICAgZm9yIG1hbmRpciBpbiAkcGF0aAorLSAgICAgIGRvCistCSBjcCAvZGV2L251bGwgJG1hbmRpci93aGF0aXMKKy0gICAgICBkb25lCistICAgZG9uZQorKyAgIGNwIC9kZXYvbnVsbCAvdmFyL2NhY2hlL21hbi93aGF0aXMKKyBmaQorIAorIGZvciBwYWdlcyBpbiBtYW4gY2F0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXNlY3VyaXR5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1zZWN1cml0eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTJhODgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1zZWN1cml0eS5wYXRjaApAQCAtMCwwICsxLDYyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLU5hdXIgbWFuLTEuNmUub3JpZy9zcmMvbWFrZXdoYXRpcy5zaCBtYW4tMS42ZS9zcmMvbWFrZXdoYXRpcy5zaAorLS0tIG1hbi0xLjZlLm9yaWcvc3JjL21ha2V3aGF0aXMuc2gJMjAwNi0wNy0xOSAwMTo1ODowOC4wMDAwMDAwMDAgLTAzMDAKKysrKyBtYW4tMS42ZS9zcmMvbWFrZXdoYXRpcy5zaAkyMDA3LTA1LTE4IDEwOjE4OjMxLjAwMDAwMDAwMCAtMDMwMAorQEAgLTQ1LDcgKzQ1LDcgQEAKKyAjIGFuZCBzaG91bGQgYmUgZmlyc3QuCisgIyBJdCBpcyBhIGJ1ZyB0byBhZGQgL3Zhci9jYWNoZS9tYW4gdG8gREVGQ0FUUEFUSC4KKyBkbT0KKy1mb3IgZCBpbiAvdXNyL21hbiAvdXNyL3NoYXJlL21hbiAvdXNyL1gxMVI2L21hbiAvdXNyL2xvY2FsL21hbgorK2ZvciBkIGluIC91c3Ivc2hhcmUvbWFuIC91c3IvbWFuIC91c3IvWDExUjYvbWFuIC91c3IvbG9jYWwvbWFuCisgZG8KKyAgICAgaWYgWyAtZCAkZCBdOyB0aGVuCisgCWlmIFsgeCRkbSA9IHggXTsgdGhlbiBkbT0kZDsgZWxzZSBkbT0kZG06JGQ7IGZpCitAQCAtNTMsNyArNTMsNyBAQAorIGRvbmUKKyBERUZNQU5QQVRIPSRkbQorIGRjPQorLWZvciBkIGluIC91c3IvbWFuL3ByZWZvcm1hdCAvdXNyL21hbiAvdXNyL3NoYXJlL21hbi9wcmVmb3JtYXQgL3Vzci9zaGFyZS9tYW4KKytmb3IgZCBpbiAvdmFyL2NhY2hlL21hbiAvdXNyL3NoYXJlL21hbi9wcmVmb3JtYXQgL3Vzci9tYW4vcHJlZm9ybWF0IC91c3Ivc2hhcmUvbWFuIC91c3IvbWFuCisgZG8KKyAgICAgaWYgWyAtZCAkZCBdOyB0aGVuCisgCWlmIFsgeCRkYyA9IHggXTsgdGhlbiBkYz0kZDsgZWxzZSBkYz0kZGM6JGQ7IGZpCitAQCAtNzYsMTIgKzc2LDEyIEBACisgIyBXZSB0cnkgaGVyZSB0byBiZSBjYXJlZnVsIChhbmQgYXZvaWQgcHJlY29uc3RydWN0ZWQgc3ltbGlua3MpCisgIyBpbiBjYXNlIG1ha2V3aGF0aXMgaXMgcnVuIGFzIHJvb3QsIGJ5IGNyZWF0aW5nIGEgc3ViZGlyZWN0b3J5IG9mIC90bXAuCisgCistVE1QRklMRURJUj0vdG1wL3doYXRpcy50bXAuZGlyLiQkCistcm0gLXJmICRUTVBGSUxFRElSCistaWYgISBta2RpciAtbSAwNzAwICRUTVBGSUxFRElSOyB0aGVuCistICAgIGVjaG8gQ291bGQgbm90IGNyZWF0ZSAkVE1QRklMRURJUgorLSAgICBleGl0IDE7CisrVE1QRklMRURJUj1gbWt0ZW1wIC1kIC90bXAvbWFrZXdoYXRpc1hYWFhYWGAKKytpZiBbICQ/IC1uZSAwIF07IHRoZW4KKysgICBlY2hvICIkMDogQ2FuJ3QgY3JlYXRlIHRlbXAgZmlsZSwgZXhpdGluZy4uLiIKKysgICBleGl0IDEKKyBmaQorK2NobW9kIDA3MDAgJFRNUEZJTEVESVIKKyBUTVBGSUxFPSRUTVBGSUxFRElSL3cKKyAKKyAjIG1ha2Ugc3VyZSBUTVBGSUxFRElSIGlzIGRlbGV0ZWQgaWYgcHJvZ3JhbSBpcyBraWxsZWQgb3IgdGVybWluYXRlcworZGlmZiAtTmF1ciBtYW4tMS42ZS5vcmlnL3NyYy9tYW4uYyBtYW4tMS42ZS9zcmMvbWFuLmMKKy0tLSBtYW4tMS42ZS5vcmlnL3NyYy9tYW4uYwkyMDA2LTA1LTAxIDE3OjM0OjIyLjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL3NyYy9tYW4uYwkyMDA3LTA1LTE4IDEwOjExOjMzLjAwMDAwMDAwMCAtMDMwMAorQEAgLTEyMzQsNyArMTIzNCw2IEBACisgI2VuZGlmCisgCisgCistI2lmIDAKKyAgICAgIHsKKyAJLyogVGhlcmUgYXJlIG5vIGtub3duIGNhc2VzIG9mIGJ1ZmZlciBvdmVyZmxvdyBjYXVzZWQgYnkKKyAJICAgZXhjZXNzaXZlbHkgbG9uZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIEluIGNhc2UgeW91IGZpbmQgb25lLAorQEAgLTEyNTcsNyArMTI1Niw2IEBACisgCSAgIE1BTl9JQ09OVl9QQVRILCBNQU5fSUNPTlZfT1BULCBNQU5fSUNPTlZfSU5QVVRfQ0hBUlNFVCwKKyAJICAgTUFOX0lDT05WX09VVFBVVF9DSEFSU0VULCBOTFNQQVRILCBQQVRIICovCisgICAgICB9CistI2VuZGlmCisgCisgCisgI2lmbmRlZiBfX0ZyZWVCU0RfXyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtdXNlX2kxOG5fdmFyc19pbl9hX3N0ZF93YXkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXVzZV9pMThuX3ZhcnNfaW5fYV9zdGRfd2F5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OGY3NDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXVzZV9pMThuX3ZhcnNfaW5fYV9zdGRfd2F5LnBhdGNoCkBAIC0wLDAgKzEsMTYwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLU5hdXIgbWFuLTEuNmUub3JpZy9jYXRvcGVuL2NhdG9wZW4uYyBtYW4tMS42ZS9jYXRvcGVuL2NhdG9wZW4uYworLS0tIG1hbi0xLjZlLm9yaWcvY2F0b3Blbi9jYXRvcGVuLmMJMjAwNS0wOC0yMCAyMDoyNjowNi4wMDAwMDAwMDAgLTAzMDAKKysrKyBtYW4tMS42ZS9jYXRvcGVuL2NhdG9wZW4uYwkyMDA3LTA1LTE4IDExOjMxOjA1LjAwMDAwMDAwMCAtMDMwMAorQEAgLTksMjIgKzksNjMgQEAKKyBleHRlcm4gY2hhciAqaW5kZXggKGNvbnN0IGNoYXIgKiwgaW50KTsgICAgICAgICAvKiBub3QgYWx3YXlzIGluIDxzdHJpbmcuaD4gKi8KKyBleHRlcm4gY2hhciAqbXlfbWFsbG9jKGludCk7CS8qIGluIHV0aWwuYyAqLworIAorKy8qIGlmIHRoZSBwcm9ncmFtIGhhcyBzZ2lkL3N1aWQgcHJpdmlsZWdlcyB0aGVuIGdldGVudiBkb2Vzbid0IHJldHVybgorKyAqIE5MU1BBVEg7IHNvIHdlIHNldCBoZXJlIGEgZ29vZCBkZWZhdWx0IHZhbHVlLgorKyAqLworICNpZm5kZWYgREVGQVVMVF9OTFNQQVRICisgIyBpZiBfX0dMSUJDX18gPj0gMgorLSMgIGRlZmluZSBERUZBVUxUX05MU1BBVEggIi91c3Ivc2hhcmUvbG9jYWxlLyVMLyVOIgorKyMgIGRlZmluZSBERUZBVUxUX05MU1BBVEggIi91c3Ivc2hhcmUvbG9jYWxlLyVMLyVOOi91c3Ivc2hhcmUvbG9jYWxlLyVsXyV0LyVOOi91c3Ivc2hhcmUvbG9jYWxlLyVsLyVOIgorICMgZWxzZQorICMgIGRlZmluZSBERUZBVUxUX05MU1BBVEggIi91c3IvbGliL2xvY2FsZS8lTi8lTCIKKyAjIGVuZGlmCisgI2VuZGlmCisgCistc3RhdGljIG5sX2NhdGQgbXlfY2F0b3BlbnBhdGgoY2hhciAqbmFtZSwgY2hhciAqcGF0aCk7Cisrc3RhdGljIG5sX2NhdGQgbXlfY2F0b3BlbnBhdGgoY2hhciAqbmFtZSwgY2hhciAqcGF0aCwgY2hhciAqbGFuZyk7CisgCisgc3RhdGljCQkJCS8qIHRoaXMgc291cmNlIGluY2x1ZGVkIGluIGdyaXBlcy5jICovCisgbmxfY2F0ZAorIG15X2NhdG9wZW4oY2hhciAqbmFtZSwgaW50IG9mbGFnKSB7CistICBubF9jYXRkIGZkOworKyAgbmxfY2F0ZCBmZCA9IChubF9jYXRkKSAtMTsKKysKKysgIC8qIHVzaW5nIGZpcnN0IHRoZSBteV9jYXRvcGVucGF0aCwgd2hpY2ggbG9va3Mgd2l0aCBMQU5HVUFHRQorKyAgICogYW5kIG9ubHkgaWYgaXQgZmFpbHMgcmVzc29ydCB0byBjYXRvcGVuLCBpdCBnaXZlcyBiZXR0ZXIgaTE4bgorKyAgICovCisrICB7CisrICAgIGNoYXIgKm5sc3BhdGgsICpsYW5nLCAqczsKKyAKKy0gIGZkID0gY2F0b3BlbihuYW1lLCBvZmxhZyk7CisrICAgIC8qCisrICAgICAqICJJZiBOTFNQQVRIIGRvZXMgbm90IGV4aXN0IGluIHRoZSBlbnZpcm9ubWVudCwgb3IgaWYgYQorKyAgICAgKiBtZXNzYWdlIGNhdGFsb2cgY2Fubm90IGJlIG9wZW5lZCBpbiBhbnkgb2YgdGhlIHBhdGhzIHNwZWNpZmllZAorKyAgICAgKiBieSBOTFNQQVRILCB0aGVuIGFuIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZGVmYXVsdCBwYXRoIGlzIHVzZWQiCisrICAgICAqLworKyAgICBubHNwYXRoID0gZ2V0ZW52KCJOTFNQQVRIIik7CisrICAgIGlmICghbmxzcGF0aCkKKysgICAgICBubHNwYXRoID0gREVGQVVMVF9OTFNQQVRIOworKyAKKysgICAgbGFuZyA9IGdldGVudigiTEFOR1VBR0UiKTsKKysgICAgaWYgKCFsYW5nKQorKyAgICAgIGxhbmcgPSBnZXRlbnYoIkxDX0FMTCIpOworKyAgICBpZiAoIWxhbmcpCisrICAgICAgbGFuZyA9IGdldGVudigiTENfTUVTU0FHRVMiKTsKKysgICAgaWYgKCFsYW5nKQorKyAgICAgIGxhbmcgPSBnZXRlbnYoIkxBTkciKTsKKysgICAgaWYgKCFsYW5nKQorKyAgICAgIGxhbmcgPSAiIjsKKysgCisrICAgIHdoaWxlKCpsYW5nICYmIChmZCA9PSAobmxfY2F0ZCkgLTEpKSB7CisrICAgICAgcyA9IGluZGV4KGxhbmcsICc6Jyk7CisrICAgICAgaWYgKHMpICpzID0gMDsKKysgICAgICAgIGZkID0gbXlfY2F0b3BlbnBhdGgobmFtZSwgbmxzcGF0aCwgbGFuZyk7CisrICAgICAgaWYgKHMpIGxhbmc9cysxOworKyAgICAgIGVsc2UgbGFuZyA9ICIiOworKyAgICB9CisrICAgIGlmIChmZCA9PSAobmxfY2F0ZCkgLTEpCisrICAgICAgZmQgPSBteV9jYXRvcGVucGF0aChuYW1lLCBubHNwYXRoLCAiZW4iKTsKKysgIH0KKysKKysgIC8qIHN0aWxsIG5vdCBmb3VuZCwgdXNlIHRoZSBzeXN0ZW0gY2F0b3BlbiAqLworKyAgaWYgKGZkID09IChubF9jYXRkKSAtMSkKKysgICAgZmQgPSBjYXRvcGVuKG5hbWUsIG9mbGFnKTsKKyAKKyAgIGlmIChmZCA9PSAobmxfY2F0ZCkgLTEgJiYgb2ZsYWcpIHsKKyAgICAgb2ZsYWcgPSAwOworQEAgLTMyLDggKzczLDYgQEAKKyAgIH0KKyAKKyAgIGlmIChmZCA9PSAobmxfY2F0ZCkgLTEpIHsKKy0gICAgY2hhciAqbmxzcGF0aDsKKy0KKyAgICAgLyogVGhlIGxpYmMgY2F0b3BlbiBmYWlscyAtIGxldCB1cyBzZWUgaWYgd2UgY2FuIGRvIGJldHRlciAqLworICAgICAvKiBUaGUgcXVvdGVzIGJlbG93IGFyZSBmcm9tIFgvT3BlbiwgWFBHIDE5ODcsIFZvbC4gMy4gKi8KKyAKK0BAIC01OCwxNyArOTcsNiBAQAorICNlbmRpZgorICAgICB9CisgCistICAgIC8qCistICAgICAqICJJZiBOTFNQQVRIIGRvZXMgbm90IGV4aXN0IGluIHRoZSBlbnZpcm9ubWVudCwgb3IgaWYgYQorLSAgICAgKiBtZXNzYWdlIGNhdGFsb2cgY2Fubm90IGJlIG9wZW5lZCBpbiBhbnkgb2YgdGhlIHBhdGhzIHNwZWNpZmllZAorLSAgICAgKiBieSBOTFNQQVRILCB0aGVuIGFuIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZGVmYXVsdCBwYXRoIGlzIHVzZWQiCistICAgICAqLworLQorLSAgICBubHNwYXRoID0gZ2V0ZW52KCJOTFNQQVRIIik7CistICAgIGlmIChubHNwYXRoKQorLSAgICAgIGZkID0gbXlfY2F0b3BlbnBhdGgobmFtZSwgbmxzcGF0aCk7CistICAgIGlmIChmZCA9PSAobmxfY2F0ZCkgLTEpCistICAgICAgZmQgPSBteV9jYXRvcGVucGF0aChuYW1lLCBERUZBVUxUX05MU1BBVEgpOworICAgfQorICAgcmV0dXJuIGZkOworIH0KK0BAIC05MCwxNSArMTE4LDEzIEBACisgICoKKyAgKi8KKyBzdGF0aWMgbmxfY2F0ZAorLW15X2NhdG9wZW5wYXRoKGNoYXIgKm5hbWUsIGNoYXIgKm5sc3BhdGgpIHsKKy0gIGludCBmZDsKKytteV9jYXRvcGVucGF0aChjaGFyICpuYW1lLCBjaGFyICpubHNwYXRoLCBjaGFyICpsYW5nKSB7CisgICBubF9jYXRkIGNmZCA9IChubF9jYXRkKSAtMTsKKy0gIGNoYXIgKnBhdGgwLCAqcGF0aCwgKnMsICpmaWxlLCAqbGFuZywgKmxhbmdfbCwgKmxhbmdfdCwgKmxhbmdfYzsKKysgIGNoYXIgKnBhdGgwLCAqcGF0aCwgKnMsICpmaWxlLCAqbGFuZ19sLCAqbGFuZ190LCAqbGFuZ19jOworICAgaW50IGxhbmdzeiwgbmFtZXN6LCBzeiwgbGFuZ19sX3N6LCBsYW5nX3Rfc3osIGxhbmdfY19zejsKKyAKKyAgIG5hbWVzeiA9IHN0cmxlbihuYW1lKTsKKyAKKy0gIGxhbmcgPSBnZXRlbnYoIkxBTkciKTsKKyAgIGlmICghbGFuZykKKyAgICAgbGFuZyA9ICIiOworICAgbGFuZ3N6ID0gc3RybGVuKGxhbmcpOworQEAgLTE5NCwxNCArMjIwLDkgQEAKKyAgICAgICBwYXRoID0gcysxOworICAgICB9IGVsc2UKKyAgICAgICBwYXRoID0gMDsKKy0gICAgZmQgPSBvcGVuKGZpbGUsIE9fUkRPTkxZKTsKKy0gICAgaWYgKGZkICE9IC0xKSB7CistICAgICAgLyogd2UgZm91bmQgdGhlIHJpZ2h0IGNhdGFsb2cgLSBidXQgd2UgZG9uJ3Qga25vdyB0aGUKKy0JIHR5cGUgb2YgbmxfY2F0ZCwgc28gY2xvc2UgaXQgYWdhaW4gYW5kIGFzayBsaWJjICovCistICAgICAgY2xvc2UoZmQpOworLSAgICAgIGNmZCA9IGNhdG9wZW4oZmlsZSwgMCk7CistICAgICAgYnJlYWs7CistICAgIH0KKysJY2ZkID0gY2F0b3BlbihmaWxlLCAwKTsKKysJaWYgKGNmZCAhPSAobmxfY2F0ZCkgLTEpCisrCQkJYnJlYWs7CisgICB9CisgCisgICBmcmVlKHBhdGgwKTsKK2RpZmYgLU5hdXIgbWFuLTEuNmUub3JpZy9zcmMvbWFucGF0aC5jIG1hbi0xLjZlL3NyYy9tYW5wYXRoLmMKKy0tLSBtYW4tMS42ZS5vcmlnL3NyYy9tYW5wYXRoLmMJMjAwNi0wOC0wMyAxODoxODozMy4wMDAwMDAwMDAgLTAzMDAKKysrKyBtYW4tMS42ZS9zcmMvbWFucGF0aC5jCTIwMDctMDUtMTggMTE6MDI6NDguMDAwMDAwMDAwIC0wMzAwCitAQCAtMjgyLDEzICsyODIsMTQgQEAKKyAJCS8qIFdlIGNhbm5vdCB1c2UgImxhbmcgPSBzZXRsb2NhbGUoTENfTUVTU0FHRVMsIE5VTEwpIiBvciBzbzoKKyAJCSAgIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2V0bG9jYWxlIGlzIGFuIG9wYXF1ZSBzdHJpbmcuICovCisgCQkvKiBQT1NJWCBwcmVzY3JpYmVzIHRoZSBvcmRlcjogTENfQUxMLCBMQ19NRVNTQUdFUywgTEFORyAqLworLQkJaWYoKGxhbmcgPSBnZXRlbnYoIkxDX0FMTCIpKSAhPSBOVUxMKQorKwkgICAgICAgIC8qIExBTkdVQUdFIGlzIEdOVS9MaW51eCBhbmQgb3ZlcnJ1bGVzIGFsbCAqLworKwkJaWYoKGxhbmcgPSBnZXRlbnYoIkxBTkdVQUdFIikpICE9IE5VTEwpCisgCQkJc3BsaXQyKGRpciwgbGFuZywgYWRkX3RvX21hbmRpcmxpc3RfeCwgcGVycnMpOworLQkJaWYoKGxhbmcgPSBnZXRlbnYoIkxDX01FU1NBR0VTIikpICE9IE5VTEwpCisrCQllbHNlIGlmKChsYW5nID0gZ2V0ZW52KCJMQ19BTEwiKSkgIT0gTlVMTCkKKyAJCQlzcGxpdDIoZGlyLCBsYW5nLCBhZGRfdG9fbWFuZGlybGlzdF94LCBwZXJycyk7CistCQlpZigobGFuZyA9IGdldGVudigiTEFORyIpKSAhPSBOVUxMKQorKwkJZWxzZSBpZigobGFuZyA9IGdldGVudigiTENfTUVTU0FHRVMiKSkgIT0gTlVMTCkKKyAJCQlzcGxpdDIoZGlyLCBsYW5nLCBhZGRfdG9fbWFuZGlybGlzdF94LCBwZXJycyk7CistCQlpZigobGFuZyA9IGdldGVudigiTEFOR1VBR0UiKSkgIT0gTlVMTCkKKysJCWVsc2UgaWYoKGxhbmcgPSBnZXRlbnYoIkxBTkciKSkgIT0gTlVMTCkKKyAJCQlzcGxpdDIoZGlyLCBsYW5nLCBhZGRfdG9fbWFuZGlybGlzdF94LCBwZXJycyk7CisgCQlhZGRfdG9fbWFuZGlybGlzdF94KGRpciwgMCwgcGVycnMpOworIAl9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXdoYXRpczIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXdoYXRpczIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM0ZWQzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtd2hhdGlzMi5wYXRjaApAQCAtMCwwICsxLDU5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBtYW4tMS42Zi9zcmMvbWFrZXdoYXRpcy5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1hbi0xLjZmLm9yaWcvc3JjL21ha2V3aGF0aXMuc2gJMjAxMC0xMi0yOSAxMzo1MTo0NS4wMDAwMDAwMDAgLTA4MDAKKysrKyBtYW4tMS42Zi9zcmMvbWFrZXdoYXRpcy5zaAkyMDEwLTEyLTI5IDEzOjU5OjM1LjM5OTc5OTQxMiAtMDgwMAorQEAgLTE2NCwxMCArMTY0LDE1IEBACisgZmkKKyBjYXRwYXRoPWBlY2hvICR7Y2F0cGF0aH0gfCB0ciA6ICcgJ2AKKyAKKysjV0hBVElTX0RJUj0kREVTVERJUi92YXIvY2FjaGUvbWFuL2BlY2hvICRoZXJlfHNlZCAtZSAncyEuKi9tYW4vISFnJ2AKKytXSEFUSVNfRElSPSRERVNURElSL3Zhci9jYWNoZS9tYW4vJExBTkcKKytbWyAtZCAkV0hBVElTX0RJUiBdXSB8fCBta2RpciAtcCAkV0hBVElTX0RJUi8KKysKKyAjIGZpcnN0IHRydW5jYXRlIGFsbCB0aGUgd2hhdGlzIGZpbGVzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIG5ldywKKyAjIHRoZW4gb25seSB1cGRhdGUgLSB3ZSBtaWdodCB2aXNpdCB0aGUgc2FtZSBkaXJlY3RvcnkgdHdpY2UKKyBpZiBbIHgkdXBkYXRlID0geCBdOyB0aGVuCistICAgY3AgL2Rldi9udWxsIC92YXIvY2FjaGUvbWFuL3doYXRpcworKyAgIG1rZGlyIC1wICRXSEFUSVNfRElSLworKyAgIC9iaW4vZWNobyAtbiA+ICRXSEFUSVNfRElSL3doYXRpcworIGZpCisgCisgZm9yIHBhZ2VzIGluIG1hbiBjYXQKK0BAIC0xODAsMTMgKzE4NSw3IEBACisgCWVjaG8gImFib3V0IHRvIGVudGVyICRtYW5kaXIiID4gL2Rldi9zdGRlcnIKKyAgICAgIGZpCisgCistICAgICAjIGtsdWRnZSBmb3IgU2xhY2t3YXJlJ3MgL3Vzci9tYW4vcHJlZm9ybWF0CistICAgICBpZiBbICRtYW5kaXIgPSAvdXNyL21hbi9wcmVmb3JtYXQgXQorLSAgICAgdGhlbgorLQltYW5kaXIxPS91c3IvbWFuCistICAgICBlbHNlCistCW1hbmRpcjE9JG1hbmRpcgorLSAgICAgZmkKKysgICAgIG1hbmRpcjE9JFdIQVRJU19ESVIKKyAKKyAgICAgICMgaWYgJG1hbmRpciBpcyBvbiBhIHJlYWRvbmx5IHBhcnRpdGlvbiwgYW5kIHRoZSB3aGF0aXMgZmlsZQorICAgICAgIyBpcyBub3QgYSBzeW1saW5rLCB0aGVuIGxldCdzIHNraXAgdHJ5aW5nIHRvIHVwZGF0ZSBpdAorQEAgLTIwNywxMSArMjA2LDYgQEAKKyAJZmkKKyAgICAgIGZpCisgCistICAgICBpZiBbIC1zICR7bWFuZGlyfS93aGF0aXMgLWEgJHBhZ2VzID0gbWFuIC1hIHgkdXBkYXRlID0geCBdOyB0aGVuCistCWlmIFsgeCR2ZXJib3NlICE9IHggXTsgdGhlbgorLQkgICBlY2hvIHNraXBwaW5nICRtYW5kaXIgLSB3ZSBkaWQgaXQgYWxyZWFkeSA+IC9kZXYvc3RkZXJyCistCWZpCistICAgICBlbHNlICAgICAgCisgICAgICAgIGhlcmU9YHB3ZGAKKyAgICAgICAgY2QgJG1hbmRpcgorICAgICAgICBmb3IgaSBpbiAkc2VjdGlvbnMKK0BAIC00NDcsNyArNDQ3LDYgQEAKKworICAgICAgICBjaG1vZCA2NDQgJHttYW5kaXIxfS93aGF0aXMKKyAgICAgICAgcm0gJFRNUEZJTEUKKy0gICAgIGZpCisgICAgZG9uZQorIGRvbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmctd2hhdGlzMy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmctd2hhdGlzMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzM0NDU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42Zy13aGF0aXMzLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK0RvIG5vdCB1c2UgYWJzb2x1dGUgcGF0aCBmb3IgYXdrIHdoaWxlIGdldHRpbmcgdGhlIHBhdGggb2YgYXdrCit3aGVuIHJ1bm5pbmcgbWFrZXdoYXRpcy4KK1RoaXMgY2FuIGF2b2lkIGVycm9ycyBpZiBwYXRoIG9mIGF3ayBjaGFuZ2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbbWFuLTEuNmddCisKK1NpZ25lZC1vZmYtYnk6IEppYW4gTGl1IDxqaWFuLmxpdUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC1OdXIgbWFuLTEuNmcub3JpZy9zcmMvbWFrZXdoYXRpcy5zaCBtYW4tMS42Zy9zcmMvbWFrZXdoYXRpcy5zaAorLS0tIG1hbi0xLjZnLm9yaWcvc3JjL21ha2V3aGF0aXMuc2gJMjAxNS0wMi0yNSAxNjoxMzoxMi42NTc2MTE0MTkgKzA4MDAKKysrKyBtYW4tMS42Zy9zcmMvbWFrZXdoYXRpcy5zaAkyMDE1LTAyLTI1IDE2OjE0OjQ5LjMzNDY5NDgxNSArMDgwMAorQEAgLTY3LDcgKzY3LDcgQEAKKyAjIGJ1dCB0aGF0IGxlYWRzIHRvIHByb2JsZW1zIGFuZCBidWdzLgorCisgIyBBV0s9L3Vzci9iaW4vZ2F3aworLUFXSz1AYXdrQAorK0FXSz1gd2hpY2ggYXdrYAorCisgIyBGaW5kIGEgcGxhY2UgZm9yIG91ciB0ZW1wb3JhcnkgZmlsZXMuIElmIHNlY3VyaXR5IGlzIG5vdCBhIGNvbmNlcm4sIHVzZQorICMJVE1QRklMRT0vdG1wL3doYXRpcyQkOyBUTVBGSUxFRElSPW5vbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLjEuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi4xLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNjgwNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi4xLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLjcuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi43Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NWFmODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi43Lmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMTBiZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi5jb25mCkBAIC0wLDAgKzEsMTQxIEBACisjCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gbWFuLmNvbmYuaW4gYnkgdGhlCisjIGNvbmZpZ3VyZSBzY3JpcHQuCisjCisjIG1hbi5jb25mIGZyb20gbWFuLTEuNXAKKyMKKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBmaWxlLCBzZWUgdGhlIG1hbiBwYWdlcyBtYW4oMSkKKyMgYW5kIG1hbi5jb25mKDUpLgorIworIyBUaGlzIGZpbGUgaXMgcmVhZCBieSBtYW4gdG8gY29uZmlndXJlIHRoZSBkZWZhdWx0IG1hbnBhdGggKGFsc28gdXNlZAorIyB3aGVuIE1BTlBBVEggY29udGFpbnMgYW4gZW1wdHkgc3Vic3RyaW5nKSwgdG8gZmluZCBvdXQgd2hlcmUgdGhlIGNhdAorIyBwYWdlcyBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIG1hbiBwYWdlcyBzaG91bGQgYmUgc3RvcmVkLAorIyBhbmQgdG8gbWFwIGVhY2ggUEFUSCBlbGVtZW50IHRvIGEgbWFucGF0aCBlbGVtZW50LgorIyBJdCBtYXkgYWxzbyByZWNvcmQgdGhlIHBhdGhuYW1lIG9mIHRoZSBtYW4gYmluYXJ5LiBbVGhpcyBpcyB1bnVzZWQuXQorIyBUaGUgZm9ybWF0IGlzOgorIworIyBNQU5CSU4JCXBhdGhuYW1lCisjIE1BTlBBVEgJCW1hbnBhdGhfZWxlbWVudAlbY29ycmVzcG9uZGluZ19jYXRkaXJdCisjIE1BTlBBVEhfTUFQCQlwYXRoX2VsZW1lbnQJbWFucGF0aF9lbGVtZW50CisjCisjIElmIG5vIGNhdGRpciBpcyBnaXZlbiwgaXQgaXMgYXNzdW1lZCB0byBiZSBlcXVhbCB0byB0aGUgbWFuZGlyCisjIChzbyB0aGF0IHRoaXMgZGlyIGhhcyBib3RoIG1hbjEgZXRjLiBhbmQgY2F0MSBldGMuIHN1YmRpcnMpLgorIyBUaGlzIGlzIHRoZSB0cmFkaXRpb25hbCBVbml4IHNldHVwLgorIyBDZXJ0YWluIHZlcnNpb25zIG9mIHRoZSBGU1NUTkQgcmVjb21tZW5kIHB1dHRpbmcgZm9ybWF0dGVkIHZlcnNpb25zCisjIG9mIC91c3IvLi4uL21hbi9tYW54L3BhZ2UueCBpbnRvIC92YXIvY2F0bWFuLy4uLi9jYXR4L3BhZ2UueC4KKyMgVGhlIGtleXdvcmQgRlNTVE5EIHdpbGwgY2F1c2UgdGhpcyBiZWhhdmlvdXIuCisjIENlcnRhaW4gdmVyc2lvbnMgb2YgdGhlIEZIUyByZWNvbW1lbmQgcHV0dGluZyBmb3JtYXR0ZWQgdmVyc2lvbnMgb2YKKyMgL3Vzci8uLi4vc2hhcmUvbWFuL1tsb2NhbGUvXW1hbngvcGFnZS54IGludG8KKyMgL3Zhci9jYWNoZS9tYW4vLi4uL1tsb2NhbGUvXWNhdHgvcGFnZS54LgorIyBUaGUga2V5d29yZCBGSFMgd2lsbCBjYXVzZSB0aGlzIGJlaGF2aW91ciAoYW5kIG92ZXJyaWRlcyBGU1NUTkQpLgorIyBFeHBsaWNpdGx5IGdpdmVuIGNhdGRpcnMgb3ZlcnJpZGUuCisjCisjIEZTU1RORAorRkhTCisjCisjIFRoaXMgZmlsZSBpcyBhbHNvIHJlYWQgYnkgbWFuIGluIG9yZGVyIHRvIGZpbmQgaG93IHRvIGNhbGwgbnJvZmYsIGxlc3MsIGV0Yy4sCisjIGFuZCB0byBkZXRlcm1pbmUgdGhlIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gZXh0ZW5zaW9ucyBhbmQgZGVjb21wcmVzc29ycy4KKyMKKyMgTUFOQklOCQkvdXNyL2xvY2FsL2Jpbi9tYW4KKyMKKyMgRXZlcnkgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgTUFOUEFUSCBpbmNsdWRlcyB0aGVzZSBmaWVsZHMKKyMKK01BTlBBVEgJL3Vzci9tYW4KK01BTlBBVEgJL3Vzci9zaGFyZS9tYW4KK01BTlBBVEgJL3Vzci9sb2NhbC9tYW4KK01BTlBBVEgJL3Vzci9sb2NhbC9zaGFyZS9tYW4KK01BTlBBVEgJL3Vzci9YMTFSNi9tYW4KKyMKKyMgVW5jb21tZW50IGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgb25lIG9mIHRoZXNlIGJ5IGRlZmF1bHQKKyMKKyMgTUFOUEFUSAkvb3B0LyovbWFuCisjIE1BTlBBVEgJL3Vzci9saWIvKi9tYW4KKyMgTUFOUEFUSAkvdXNyL3NoYXJlLyovbWFuCisjIE1BTlBBVEgJL3Vzci9rZXJiZXJvcy9tYW4KKyMKKyMgU2V0IHVwIFBBVEggdG8gTUFOUEFUSCBtYXBwaW5nCisjCisjIElmIHBlb3BsZSBhc2sgZm9yICJtYW4gZm9vIiBhbmQgaGF2ZSAiL2Rpci9iaW4vZm9vIiBpbiB0aGVpciBQQVRICisjIGFuZCB0aGUgZG9jcyBhcmUgZm91bmQgaW4gIi9kaXIvbWFuIiwgdGhlbiBubyBtYXBwaW5nIGlzIHJlcXVpcmVkLgorIworIyBUaGUgYmVsb3cgbWFwcGluZ3MgYXJlIHN1cGVyZmx1b3VzIHdoZW4gdGhlIHJpZ2h0IGhhbmQgc2lkZSBpcworIyBpbiB0aGUgbWFuZGF0b3J5IG1hbnBhdGggYWxyZWFkeSwgYnV0IHdpbGwga2VlcCBtYW4gZnJvbSBzdGF0dGluZworIyBsb3RzIG9mIG90aGVyIG5lYXJieSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCisjCitNQU5QQVRIX01BUAkvYmluCQkJL3Vzci9zaGFyZS9tYW4KK01BTlBBVEhfTUFQCS9zYmluCQkJL3Vzci9zaGFyZS9tYW4KK01BTlBBVEhfTUFQCS91c3IvYmluCQkvdXNyL3NoYXJlL21hbgorTUFOUEFUSF9NQVAJL3Vzci9zYmluCQkvdXNyL3NoYXJlL21hbgorTUFOUEFUSF9NQVAJL3Vzci9sb2NhbC9iaW4JCS91c3IvbG9jYWwvc2hhcmUvbWFuCitNQU5QQVRIX01BUAkvdXNyL2xvY2FsL3NiaW4JCS91c3IvbG9jYWwvc2hhcmUvbWFuCitNQU5QQVRIX01BUAkvdXNyL1gxMVI2L2JpbgkJL3Vzci9YMTFSNi9tYW4KK01BTlBBVEhfTUFQCS91c3IvYmluL1gxMQkJL3Vzci9YMTFSNi9tYW4KK01BTlBBVEhfTUFQCS91c3IvYmluL21oCQkvdXNyL3NoYXJlL21hbgorIworIyBOT0FVVE9QQVRIIGtlZXBzIG1hbiBmcm9tIGF1dG9tYXRpY2FsbHkgYWRkaW5nIGRpcmVjdG9yaWVzIHRoYXQgbG9vayBsaWtlCisjIG1hbnVhbCBwYWdlIGRpcmVjdG9yaWVzIHRvIHRoZSBwYXRoLgorIworI05PQVVUT1BBVEgKKyMKKyMgTk9DQUNIRSBrZWVwcyBtYW4gZnJvbSBjcmVhdGluZyBjYWNoZSBwYWdlcyAoImNhdCBwYWdlcyIpCisjIChnZW5lcmFsbHkgb25lIGVuYWJsZXMvZGlzYWJsZSBjYXQgcGFnZSBjcmVhdGlvbiBieSBjcmVhdGluZy9kZWxldGluZworIyB0aGUgZGlyZWN0b3J5IHRoZXkgd291bGQgbGl2ZSBpbiAtIG1hbiBuZXZlciBkb2VzIG1rZGlyKQorIyAKKyNOT0NBQ0hFCisjCisjIFVzZWZ1bCBwYXRocyAtIG5vdGUgdGhhdCBDT0wgc2hvdWxkIG5vdCBiZSBkZWZpbmVkIHdoZW4KKyMgTlJPRkYgaXMgZGVmaW5lZCBhcyAiZ3JvZmYgLVRhc2NpaSIgb3IgImdyb2ZmIC1UbGF0aW4xIjsKKyMgbm90IG9ubHkgaXMgaXQgc3VwZXJmbHVvdXMsIGJ1dCBpdCBhY3R1YWxseSBkYW1hZ2VzIHRoZSBvdXRwdXQuCisjIEZvciB1c2Ugd2l0aCB1dGYtOCwgTlJPRkYgc2hvdWxkIGJlICJucm9mZiAtbWFuZG9jIiB3aXRob3V0IC1UIG9wdGlvbi4KKyMgKE1heWJlIC0gYnV0IHRvZGF5IEkgbmVlZCAtVGxhdGluMSB0byBwcmV2ZW50IGRvdWJsZSBjb252ZXJzaW9uIHRvIHV0ZjguKQorIworIyBJZiB5b3UgaGF2ZSBhIG5ldyB0cm9mZiAodmVyc2lvbiAxLjE4LjE/KSBhbmQgaXRzIGNvbG9yZWQgb3V0cHV0CisjIGNhdXNlcyBwcm9ibGVtcywgYWRkIHRoZSAtYyBvcHRpb24gdG8gVFJPRkYsIE5ST0ZGLCBKTlJPRkYuCisjCitUUk9GRgkJL3Vzci9iaW4vZ3JvZmYgLVRwcyAtbWFuZG9jCitOUk9GRgkJL3Vzci9iaW4vbnJvZmYgLVRsYXRpbjEgLW1hbmRvYworSk5ST0ZGCQkvdXNyL2Jpbi9ncm9mZiAtVG5pcHBvbiAtbWFuZG9jagorRVFOCQkvdXNyL2Jpbi9lcW4gLVRwcworTkVRTgkJL3Vzci9iaW4vZXFuIC1UbGF0aW4xCitKTkVRTgkJL3Vzci9iaW4vZXFuIC1UbmlwcG9uCitUQkwJCS91c3IvYmluL3RibAorIyBDT0wJCS91c3IvYmluL2NvbAorUkVGRVIJCS91c3IvYmluL3JlZmVyCitQSUMJCS91c3IvYmluL3BpYworVkdSSU5ECQkKK0dSQVAJCQorUEFHRVIJCS91c3IvYmluL2xlc3MgLWlzUgorQ0FUCQkvYmluL2NhdAorIworIyBUaGUgY29tbWFuZCAibWFuIC1hIHh5enp5IiB3aWxsIHNob3cgYWxsIG1hbiBwYWdlcyBmb3IgeHl6enkuCisjIFdoZW4gQ01QIGlzIGRlZmluZWQgbWFuIHdpbGwgdHJ5IHRvIGF2b2lkIHNob3dpbmcgdGhlIHNhbWUKKyMgdGV4dCB0d2ljZS4gKEJ1dCBjb21wcmVzc2VkIHBhZ2VzIGNvbXBhcmUgdW5lcXVhbC4pCisjCitDTVAJCS91c3IvYmluL2NtcCAtcworIworIyBDb21wcmVzcyBjYXQgcGFnZXMKKyMKK0NPTVBSRVNTCS9iaW4vYnppcDIKK0NPTVBSRVNTX0VYVAkuYnoyCisjCisjIERlZmF1bHQgbWFudWFsIHNlY3Rpb25zIChhbmQgb3JkZXIpIHRvIHNlYXJjaCBpZiAtUyBpcyBub3Qgc3BlY2lmaWVkCisjIGFuZCB0aGUgTUFOU0VDVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0LgorIworTUFOU0VDVAkJMToxcDo4OjI6MzozcDo0OjU6Njo3Ojk6MHA6dGNsOm46bDpwOm8KKyMKKyMgRGVmYXVsdCBvcHRpb25zIHRvIHVzZSB3aGVuIG1hbiBpcyBpbnZva2VkIHdpdGhvdXQgb3B0aW9ucworIyBUaGlzIGlzIG1haW5seSBmb3IgdGhlIGJlbmVmaXQgb2YgdGhvc2UgdGhhdCB0aGluayAtYSBzaG91bGQgYmUgdGhlIGRlZmF1bHQKKyMgTm90ZSB0aGF0IHNvbWUgc3lzdGVtcyBoYXZlIC91c3IvbWFuL2FsbG1hbiwgY2F1c2luZyBwYWdlcyB0byBiZSBzaG93biB0d2ljZS4KKyMKKyNNQU5ERUZPUFRJT05TCS1hCisjCisjIERlY29tcHJlc3Mgd2l0aCBnaXZlbiBkZWNvbXByZXNzb3Igd2hlbiBpbnB1dCBmaWxlIGhhcyBnaXZlbiBleHRlbnNpb24KKyMgVGhlIGNvbW1hbmQgZ2l2ZW4gbXVzdCBhY3QgYXMgYSBmaWx0ZXIuCisjCisuZ3oJCS9iaW4vZ3VuemlwIC1jCisuYnoyCQkvdXNyL2Jpbi9idW56aXAyIC1jCisueHoJCS91c3IvYmluL3VueHogLWMKKy56CQkKKy5aCQkvYmluL3pjYXQKKy5GCQkKKy5ZCQkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFucGF0aC41Lmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW5wYXRoLjUuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAxMmZmOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFucGF0aC41Lmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW5fMS42Zy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW5fMS42Zy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTQ3MzZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbl8xLjZnLmJiCkBAIC0wLDAgKzEsODQgQEAKK1NVTU1BUlkgPSAiT25saW5lIGRvY3VtZW50YXRpb24gdG9vbHMiCitERVNDUklQVElPTiA9ICJBIHNldCBvZiBkb2N1bWVudGF0aW9uIHRvb2xzOiBtYW4sIGFwcm9wb3MgYW5kIHdoYXRpcyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0hPTUVQQUdFID0gImh0dHA6Ly9wcmltYXRlcy54aW1pYW4uY29tL35mbHVjaWZyZWRpL21hbiIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Y2E0M2NiYzg0MmMyMzM2ZTgzNTkyNmMyMTY2YzI4YiIKKworUFIgPSAicjEiCisKK0RFUEVORFMgPSAiZ3JvZmYgbGVzcyIKKworZGVmIGNvbXByZXNzX3BrZyhkKToKKyAgICBpZiAiY29tcHJlc3NfZG9jIiBpbiAoZC5nZXRWYXIoIklOSEVSSVQiLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgIGNvbXByZXNzID0gZC5nZXRWYXIoIkRPQ19DT01QUkVTUyIsIFRydWUpCisgICAgICAgICBpZiBjb21wcmVzcyA9PSAiZ3oiOgorICAgICAgICAgICAgIHJldHVybiAiZ3ppcCIKKyAgICAgICAgIGVsaWYgY29tcHJlc3MgPT0gImJ6MiI6CisgICAgICAgICAgICAgcmV0dXJuICJiemlwMiIKKyAgICAgICAgIGVsaWYgY29tcHJlc3MgPT0gInh6IjoKKyAgICAgICAgICAgICByZXR1cm4gInh6IgorICAgIHJldHVybiAiIgorCitSREVQRU5EU18ke1BOfSArPSAiJHtAY29tcHJlc3NfcGtnKGQpfSIKKworU1JDX1VSSSA9ICJodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9sb29rYXNpZGUvcGtncy9tYW4yaHRtbC8ke0JQfS50YXIuZ3ovYmExNTRkNTc5NjkyOGI4NDFjOWM2OWYwYWUzNzY2NjAvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVrLWNvbmZwYXRoLnBhdGNoO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41aDEtbWFrZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41ay1ub25hc2NpaS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS42ZS1zZWN1cml0eS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS42ZS1tYW5kaXJzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVtMi1idWcxMTYyMS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41ay1zb2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41bTItYnVpbGRyb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjZlLXJvX3Vzci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41aTItbmV3bGluZS5wYXRjaDtzdHJpcGxldmVsPTAgXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNWotdXRmOC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41aTItb3ZlcmZsb3cucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNWotbm9jYWNoZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41aTItaW5pdGlhbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41aDEtZ2VuY2F0LnBhdGNoO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41Zy1ub25yb290YnVpbGQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNW0yLXR2X2Zocy5wYXRjaDtzdHJpcGxldmVsPTAgXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNWotaTE4bi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS42ZS13aGF0aXMyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjZlLXVzZV9pMThuX3ZhcnNfaW5fYV9zdGRfd2F5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVtMi1uby1jb2xvci1mb3ItcHJpbnRpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNW0yLXNpZ3BpcGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNmUtaTE4bl93aGF0aXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNmUtbmV3X3NlY3Rpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi4xLmd6O3VucGFjaz1mYWxzZSBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4uNy5nejt1bnBhY2s9ZmFsc2UgXAorICAgICAgICAgICBmaWxlOi8vbWFuLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vbWFucGF0aC41Lmd6O3VucGFjaz1mYWxzZSBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS42Zy13aGF0aXMzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZV9zZWQucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmExNTRkNTc5NjkyOGI4NDFjOWM2OWYwYWUzNzY2NjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2NkY2I4YzNmNGUwMDgwOTIzZDdlODE4ZjBlNGEyMDJkYjI2YzQ2NDE1ZWFlZjM2MTM4N2MyMDk5NWI4OTU5ZiIKKworQ0ZMQUdTICs9ICItRFNZU1YiCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisgICAgICAgICR7U30vY29uZmlndXJlIC1kZWZhdWx0IC1jb25mZGlyIC9ldGMgK3NnaWQgK2ZocyArbGFuZyBhbGwKK30KKworCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCl7CisJbWtkaXIgLXAgICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgICAgIG1rZGlyIC1wICR7RH0ke2RhdGFkaXJ9L21hbi9tYW41CisgICAgICAgIG1rZGlyIC1wICR7RH0ke2RhdGFkaXJ9L21hbi9tYW43CisJY3AgJHtXT1JLRElSfS9tYW4uY29uZiAke0R9JHtzeXNjb25mZGlyfS9tYW4uY29uZmlnCisgICAgICAgIGNwICR7V09SS0RJUn0vbWFuLjEuZ3ogJHtEfSR7ZGF0YWRpcn0vbWFuL21hbjEvCisgICAgICAgIGNwICR7V09SS0RJUn0vbWFuLjcuZ3ogJHtEfSR7ZGF0YWRpcn0vbWFuL21hbjcvCisgICAgICAgIGNwICR7V09SS0RJUn0vbWFucGF0aC41Lmd6ICR7RH0ke2RhdGFkaXJ9L21hbi9tYW41LworfQorCisKK1JERVBFTkRTXyR7UE59ID0gImxlc3MgZ3JvZmYiCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9sb2NhbGUgJHtzeXNjb25mZGlyfS9tYW4uY29uZmlnIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWMvbWMtQ1RSTC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jL21jLUNUUkwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0YmE5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jL21jLUNUUkwucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRml4IGJ1aWxkIHdpdGggbXVzbCBieSBlbnN1cmluZyBDVFJMIGlzIGRlZmluZWQuCisKK211c2wgZG9lcyBub3QgZGVmaW5lIENUUkwgaW4gPHRlcm1pb3MuaD4sIHdlIGNvdWxkIGluY2x1ZGUgPHN5cy90dHlkZWZhdWx0cy5oPgorZXhwbGljaXRseSBidXQgaXQncyBlYXNpZXIganVzdCB0byBlbnN1cmUgQ1RSTCBpcyBkZWZpbmVkLgorCitUaGlzIHBhdGNoIGlzIHRha2VuIGZyb20gU2Fib3RhZ2UgTGludXgsIHRoZSBsaWNlbnNlIHN0YXRlbWVudCBmb3IgcGF0Y2hlcyBhbmQKK2J1aWxkIHNjcmlwdHMgaW4gU2Fib3RhZ2UgTGludXggc2F5czoKKworICAgIFRvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCBDaHJpc3RpYW4gTmV1a2lyY2hlbiBoYXMgd2FpdmVkCisgICAgYWxsIGNvcHlyaWdodCBhbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhpcyB3b3JrLgorCisgICAgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworCitUaGVyZWZvcmUgdGhpcyBzaG91bGQgYmUgZ29vZCB0byBpbmNsdWRlIGluIE9wZW5FbWJlZGRlZC4KKworU2lnbmVkLW9mZi1ieTogUGF1bCBCYXJrZXIgPHBhdWxAcGF1bGJhcmtlci5tZS51az4KKworVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCAoc2hvdWxkIGJlIGluY2x1ZGVkIGluIHY0LjguMTQpCisKK2RpZmYgLXUgbWMtNC44LjEuNy5vcmcvbGliL3R0eS90dHktbmN1cnNlcy5jIG1jLTQuOC4xLjcvbGliL3R0eS90dHktbmN1cnNlcy5jCistLS0gbWMtNC44LjEuNy5vcmcvbGliL3R0eS90dHktbmN1cnNlcy5jCisrKysgbWMtNC44LjEuNy9saWIvdHR5L3R0eS1uY3Vyc2VzLmMKK0BAIC02NSw3ICs2NSw3IEBACisgCisgLyoqKiBmaWxlIHNjb3BlIG1hY3JvIGRlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCistI2lmIGRlZmluZWQoX0FJWCkgJiYgIWRlZmluZWQoQ1RSTCkKKysjaWYgIWRlZmluZWQoQ1RSTCkKKyAjZGVmaW5lIENUUkwoeCkgKCh4KSAmIDB4MWYpCisgI2VuZGlmCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjcuNS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWNfNC43LjUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDdlYjAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWNfNC43LjUuMi5iYgpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIk1pZG5pZ2h0IENvbW1hbmRlciBpcyBhbiBuY3Vyc2VzIGJhc2VkIGZpbGUgbWFuYWdlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWlkbmlnaHQtY29tbWFuZGVyLm9yZy8iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitERVBFTkRTID0gIm5jdXJzZXMgZ2xpYi0yLjAiCitSREVQRU5EU18ke1BOfSA9ICJuY3Vyc2VzLXRlcm1pbmZvIgorCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm1pZG5pZ2h0LWNvbW1hbmRlci5vcmcvZG93bmxvYWRzLyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL21jLUNUUkwucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiZGFlOTY2MjQ0NDk2Y2Q0ZjZkMjgyZDgwYzljZjNjNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhNjgzMzg4NjJiYjMwMDE3ZWI2NWVkNTY5YTU4ZTgwYWI2NmFlOGNlZjExYzg4NjQ0MGM5ZTlmNGQxZWZjNmFiIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXNjcmVlbj1uY3Vyc2VzIC0td2l0aG91dC1ncG0tbW91c2UgLS13aXRob3V0LXggLS13aXRob3V0LXNhbWJhIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vbWMvLmRlYnVnLyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEke2JpbmRpcn0vZW52IHBlcmwsJyAke0R9JHtsaWJleGVjZGlyfS9tYy9leHRmcy5kLyoKKwlzZWQgLWkgLWUgJzFzLCMhLipweXRob24sIyEke2JpbmRpcn0vZW52IHB5dGhvbiwnICR7RH0ke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvKgorfQorCitQQUNLQUdFUyA9KyAiJHtCUE59LWhlbHBlcnMtcGVybCAke0JQTn0taGVscGVycy1weXRob24gJHtCUE59LWhlbHBlcnMgJHtCUE59LWZpc2giCisKK1NVTU1BUllfJHtCUE59LWhlbHBlcnMtcGVybCA9ICJNaWRuaWdodCBDb21tYW5kZXIgUGVybC1iYXNlZCBoZWxwZXIgc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAiJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2ErICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9hcHQrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2RlYiAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZGViYSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kZWJkICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kcGtnKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9tYWlsZnMgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3BhdGNoZnMgXCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3JwbXMrICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91bGliIFwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91emlwIgorUkRFUEVORFNfJHtCUE59LWhlbHBlcnMtcGVybCA9ICJwZXJsIgorCitTVU1NQVJZXyR7QlBOfS1oZWxwZXJzLXB5dGhvbiA9ICJNaWRuaWdodCBDb21tYW5kZXIgUHl0aG9uLWJhc2VkIGhlbHBlciBzY3JpcHRzIgorRklMRVNfJHtCUE59LWhlbHBlcnMtcHl0aG9uID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9zMysgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3VjMTU0MSIKK1JERVBFTkRTXyR7QlBOfS1oZWxwZXJzLXB5dGhvbiA9ICJweXRob24iCisKK1NVTU1BUllfJHtCUE59LWhlbHBlcnMgPSAiTWlkbmlnaHQgQ29tbWFuZGVyIHNoZWxsIGhlbHBlciBzY3JpcHRzIgorRklMRVNfJHtCUE59LWhlbHBlcnMgPSAiJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kLyogJHtsaWJleGVjZGlyfS9tYy9leHQuZC8qIgorCitTVU1NQVJZXyR7QlBOfS1maXNoID0gIk1pZG5pZ2h0IENvbW1hbmRlciBGaXNoIHNjcmlwdHMiCitGSUxFU18ke0JQTn0tZmlzaCA9ICIke2xpYmV4ZWNkaXJ9L21jL2Zpc2giCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jXzQuOC4xNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jXzQuOC4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjZjMmZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWNfNC44LjE0LmJiCkBAIC0wLDAgKzEsNTIgQEAKK1NVTU1BUlkgPSAiTWlkbmlnaHQgQ29tbWFuZGVyIGlzIGFuIG5jdXJzZXMgYmFzZWQgZmlsZSBtYW5hZ2VyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5taWRuaWdodC1jb21tYW5kZXIub3JnLyIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNzBiYmFmZTM2MGU3M2Y5ODQwYmQ3OTgxNjIxZjljMiIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0RFUEVORFMgPSAibmN1cnNlcyBnbGliLTIuMCB1dGlsLWxpbnV4IgorUkRFUEVORFNfJHtQTn0gPSAibmN1cnNlcy10ZXJtaW5mbyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm1pZG5pZ2h0LWNvbW1hbmRlci5vcmcvZG93bmxvYWRzLyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmUxY2I3NTY0M2MyYmQ0ZGY2NGJiY2YyZGFiNzY5MDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjFmZDBmZDIyODBjM2QwOWQ3ZTBhZWM4YWIwMDFmYzg5ZGFkOGU0ZmQ5OTQxZjM4NjQxNDY2N2I1NTE1MmVjNSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworIworIyBCb3RoIFNhbWJhIChzbWIpIGFuZCBzZnRwIHJlcXVpcmUgcGFja2FnZSBkZWxpdmVyZWQgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZAorIworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbc21iXSA9ICItLWVuYWJsZS12ZnMtc21iLC0tZGlzYWJsZS12ZnMtc21iLHNhbWJhLCIKK1BBQ0tBR0VDT05GSUdbc2Z0cF0gPSAiLS1lbmFibGUtdmZzLXNmdHAsLS1kaXNhYmxlLXZmcy1zZnRwLGxpYnNzaDIsIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXNjcmVlbj1uY3Vyc2VzIC0td2l0aG91dC1ncG0tbW91c2UgLS13aXRob3V0LXgiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9tYy8uZGVidWcvIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvKgorCXNlZCAtaSAtZSAnMXMsIyEuKnB5dGhvbiwjISR7YmluZGlyfS9lbnYgcHl0aG9uLCcgJHtEfSR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qCit9CisKK1BBQ0tBR0VTID0rICIke0JQTn0taGVscGVycy1wZXJsICR7QlBOfS1oZWxwZXJzLXB5dGhvbiAke0JQTn0taGVscGVycyAke0JQTn0tZmlzaCIKKworU1VNTUFSWV8ke0JQTn0taGVscGVycy1wZXJsID0gIk1pZG5pZ2h0IENvbW1hbmRlciBQZXJsLWJhc2VkIGhlbHBlciBzY3JpcHRzIgorRklMRVNfJHtCUE59LWhlbHBlcnMtcGVybCA9ICIke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvYSsgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2FwdCsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZGViICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kZWJhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2RlYmQgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2Rwa2crIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL21haWxmcyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvcGF0Y2hmcyBcIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvcnBtcysgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3VsaWIgXCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3V6aXAiCitSREVQRU5EU18ke0JQTn0taGVscGVycy1wZXJsID0gInBlcmwiCisKK1NVTU1BUllfJHtCUE59LWhlbHBlcnMtcHl0aG9uID0gIk1pZG5pZ2h0IENvbW1hbmRlciBQeXRob24tYmFzZWQgaGVscGVyIHNjcmlwdHMiCitGSUxFU18ke0JQTn0taGVscGVycy1weXRob24gPSAiJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3MzKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdWMxNTQxIgorUkRFUEVORFNfJHtCUE59LWhlbHBlcnMtcHl0aG9uID0gInB5dGhvbiIKKworU1VNTUFSWV8ke0JQTn0taGVscGVycyA9ICJNaWRuaWdodCBDb21tYW5kZXIgc2hlbGwgaGVscGVyIHNjcmlwdHMiCitGSUxFU18ke0JQTn0taGVscGVycyA9ICIke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvKiAke2xpYmV4ZWNkaXJ9L21jL2V4dC5kLyoiCisKK1NVTU1BUllfJHtCUE59LWZpc2ggPSAiTWlkbmlnaHQgQ29tbWFuZGVyIEZpc2ggc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1maXNoID0gIiR7bGliZXhlY2Rpcn0vbWMvZmlzaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDEtRml4LXR5cG8taW4tY29tcGFyaXNpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy8wMDAxLUZpeC10eXBvLWluLWNvbXBhcmlzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNzBiMWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy8wMDAxLUZpeC10eXBvLWluLWNvbXBhcmlzaW9uLnBhdGNoCkBAIC0wLDAgKzEsODYgQEAKK0Zyb20gMThkMzYwZDc0MjcxYTA2NmE4NDliYzFmYmE0ZjEwZGJiMjNlZDI1MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDggU2VwIDIwMTUgMDg6MTc6NDIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IHR5cG8gaW4gY29tcGFyaXNpb24KKworZXJyb3I6IGNvbXBhcmlzb24gb2YgYXJyYXkgJ2Rldm5tJyBlcXVhbCB0byBhIG51bGwgcG9pbnRlciBpcyBhbHdheXMgZmFsc2UKKworVXNlciBiaXR3aXNlICcmJyBvcGVyYXRvciBhcyBpdCBpcyBhIG1hc2sKKworRml4ZXMKK2Vycm9yOiB1c2Ugb2YgbG9naWNhbCAnJiYnIHdpdGggY29uc3RhbnQgb3BlcmFuZAorCitSZW1vdmUgZXh0cmFuZW91cyBwYXJlbnMKKworZXJyb3I6IGVxdWFsaXR5IGNvbXBhcmlzb24gd2l0aCBleHRyYW5lb3VzIHBhcmVudGhlc2VzCisKK1JlbW92ZSBkZWFkIGNvZGUKKworcmVzdHJpcGUuYzo0NjU6MjE6IGVycm9yOiBleHBsaWNpdGx5IGFzc2lnbmluZyB2YWx1ZSBvZiB2YXJpYWJsZSBvZiB0eXBlICdpbnQnIHRvIGl0c2VsZgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIG1kbW9uLmggICAgICAgfCAyICstCisgbWRvcGVuLmMgICAgICB8IDIgKy0KKyByZXN0cmlwZS5jICAgIHwgMyAtLS0KKyBzdXBlci1pbnRlbC5jIHwgMiArLQorIDQgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbWRtb24uaCBiL21kbW9uLmgKK2luZGV4IGFhNzUwYzYuLjBiMDhjM2QgMTAwNjQ0CistLS0gYS9tZG1vbi5oCisrKysgYi9tZG1vbi5oCitAQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlzX3Jlc3luY19jb21wbGV0ZShzdHJ1Y3QgbWRpbmZvICphcnJheSkKKyAJCWJyZWFrOworIAljYXNlIDEwOgorIAkJbCA9IGFycmF5LT5hcnJheS5sYXlvdXQ7CistCQluY29waWVzID0gKGwgJiAweGZmKSAqICgobCA+PiA4KSAmJiAweGZmKTsKKysJCW5jb3BpZXMgPSAobCAmIDB4ZmYpICogKChsID4+IDgpICYgMHhmZik7CisgCQlzeW5jX3NpemUgPSBhcnJheS0+Y29tcG9uZW50X3NpemUgKiBhcnJheS0+YXJyYXkucmFpZF9kaXNrczsKKyAJCXN5bmNfc2l6ZSAvPSBuY29waWVzOworIAkJYnJlYWs7CitkaWZmIC0tZ2l0IGEvbWRvcGVuLmMgYi9tZG9wZW4uYworaW5kZXggMjg0MTBmNC4uYzVlZTJhNiAxMDA2NDQKKy0tLSBhL21kb3Blbi5jCisrKysgYi9tZG9wZW4uYworQEAgLTMxOCw3ICszMTgsNyBAQCBpbnQgY3JlYXRlX21kZGV2KGNoYXIgKmRldiwgY2hhciAqbmFtZSwgaW50IGF1dG9mLCBpbnQgdHJ1c3R3b3J0aHksCisgCWVsc2UgaWYgKG51bSA8IDApIHsKKyAJCS8qIG5lZWQgdG8gY2hvb3NlIGEgZnJlZSBudW1iZXIuICovCisgCQljaGFyICpfZGV2bm0gPSBmaW5kX2ZyZWVfZGV2bm0odXNlX21kcCk7CistCQlpZiAoZGV2bm0gPT0gTlVMTCkgeworKwkJaWYgKF9kZXZubSA9PSBOVUxMKSB7CisgCQkJcHJfZXJyKCJObyBhdmFpbCBtZCBkZXZpY2VzIC0gYWJvcnRpbmdcbiIpOworIAkJCXJldHVybiAtMTsKKyAJCX0KK2RpZmYgLS1naXQgYS9yZXN0cmlwZS5jIGIvcmVzdHJpcGUuYworaW5kZXggNGQ5MjE5MC4uY2ZlOTY2NiAxMDA2NDQKKy0tLSBhL3Jlc3RyaXBlLmMKKysrKyBiL3Jlc3RyaXBlLmMKK0BAIC00NjEsOSArNDYxLDYgQEAgaW50IHJhaWQ2X2NoZWNrX2Rpc2tzKGludCBkYXRhX2Rpc2tzLCBpbnQgc3RhcnQsIGludCBjaHVua19zaXplLAorIAkJCWN1cnJfYnJva2VuX2Rpc2sgPSBkaXNrRDsKKyAJCX0KKyAKKy0JCWlmKChQeCA9PSAwKSAmJiAoUXggPT0gMCkpCistCQkJY3Vycl9icm9rZW5fZGlzayA9IGN1cnJfYnJva2VuX2Rpc2s7CistCisgCQlpZihjdXJyX2Jyb2tlbl9kaXNrID49IGRhdGFfZGlza3MgKyAyKQorIAkJCWJyb2tlbl9zdGF0dXMgPSAyOworIAorZGlmZiAtLWdpdCBhL3N1cGVyLWludGVsLmMgYi9zdXBlci1pbnRlbC5jCitpbmRleCAzZjgxMmQ2Li4xODM4MDEyIDEwMDY0NAorLS0tIGEvc3VwZXItaW50ZWwuYworKysrIGIvc3VwZXItaW50ZWwuYworQEAgLTEwMDI3LDcgKzEwMDI3LDcgQEAgZW51bSBpbXNtX3Jlc2hhcGVfdHlwZSBpbXNtX2FuYWx5emVfY2hhbmdlKHN0cnVjdCBzdXBlcnR5cGUgKnN0LAorIAkJCQlnZW8tPnNpemUgPSBtYXhfc2l6ZTsKKyAJCX0KKyAKKy0JCWlmICgoZGlyZWN0aW9uID09IFJPTExCQUNLX01FVEFEQVRBX0NIQU5HRVMpKSB7CisrCQlpZiAoZGlyZWN0aW9uID09IFJPTExCQUNLX01FVEFEQVRBX0NIQU5HRVMpIHsKKyAJCQkvKiBhY2NlcHQgc2l6ZSBmb3Igcm9sbGJhY2sgb25seQorIAkJCSovCisgCQl9IGVsc2UgeworLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9nY2MtNC45LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvZ2NjLTQuOS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGJmMWQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvZ2NjLTQuOS5wYXRjaApAQCAtMCwwICsxLDIyIEBACitzdXBlci1pbnRlbC5jOjUwNjM6MjogZXJyb3I6IHJpZ2h0LWhhbmQgb3BlcmFuZCBvZiBjb21tYSBleHByZXNzaW9uIGhhcyBubyBlZmZlY3QgWy1XZXJyb3I9dW51c2VkLXZhbHVlXQorICBzbnByaW50ZigoY2hhciAqKSBzcGFyZS0+c2lnLCBNQVhfU0lHTkFUVVJFX0xFTkdUSCwKKyAgXgorY2MxOiBhbGwgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKK21ha2U6ICoqKiBbc3VwZXItaW50ZWwub10gRXJyb3IgMQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBtZGFkbS0zLjMvc3VwZXItaW50ZWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1kYWRtLTMuMy5vcmlnL3N1cGVyLWludGVsLmMJMjAxNC0wNS0wMiAxNTowODoyMS4xNTQzMTk2NTEgLTA3MDAKKysrKyBtZGFkbS0zLjMvc3VwZXItaW50ZWwuYwkyMDE0LTA1LTAyIDE1OjA5OjMxLjQ3MDk4NTc5NCAtMDcwMAorQEAgLTUwNjAsNyArNTA2MCw3IEBACisgCXNwYXJlLT5jYWNoZV9zaXplID0gbXBiLT5jYWNoZV9zaXplLAorIAlzcGFyZS0+cHdyX2N5Y2xlX2NvdW50ID0gX19jcHVfdG9fbGUzMigxKSwKKyAKKy0Jc25wcmludGYoKGNoYXIgKikgc3BhcmUtPnNpZywgTUFYX1NJR05BVFVSRV9MRU5HVEgsCisrCSh2b2lkKXNucHJpbnRmKChjaGFyICopIHNwYXJlLT5zaWcsIE1BWF9TSUdOQVRVUkVfTEVOR1RILAorIAkJIE1QQl9TSUdOQVRVUkUgTVBCX1ZFUlNJT05fUkFJRDApOworIAorIAlmb3IgKGQgPSBzdXBlci0+ZGlza3M7IGQ7IGQgPSBkLT5uZXh0KSB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjIuMl9maXhfZm9yX3gzMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL21kYWRtLTMuMi4yX2ZpeF9mb3JfeDMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiM2RiMGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjIuMl9maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKKworQnkgaGFyZGNvZGluZyBDQydzIGRlZmluaXRpb24gaW4gdGhlIE1ha2VmaWxlLCBhbGwgdGhlIGdjYyBwYXJhbWV0ZXJzIAorc2V0IGJ5IHR1bmUgc2V0dGluZ3MgYXJlIGxvc3QuIENhdXNpbmcgY29tcGlsZSBmYWlsdXJlIHdpdGggeDMyIHRvb2xjaGFpbgorCitBcyB0aGUgYml0YmFrZSBkZWZpbmVkIENDIGlzIGdvb2QsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVkZmluZSBDQyBpbiB0aGUgCittYWtlIGZpbGUsIGhlbmNlIG1ha2luZyB0aGUgQ0MgZGVmaW5pdGlvbiBpbiB0aGUgTWFrZWZpbGUgY29uZGl0aW9uYWwuCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMDcKKworSW5kZXg6IG1kYWRtLTMuMy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1kYWRtLTMuMy5vcmlnL01ha2VmaWxlCTIwMTMtMDktMDMgMDc6NDc6NDcuMDAwMDAwMDAwICswMzAwCisrKysgbWRhZG0tMy4zL01ha2VmaWxlCTIwMTMtMTAtMTYgMTY6NDQ6MjMuNTQyMjk1NDg3ICswMzAwCitAQCAtNDEsNyArNDEsNyBAQAorIAorIEtMSUJDX0dDQyA9IGdjYyAtbm9zdGRpbmMgLWl3aXRocHJlZml4IGluY2x1ZGUgLUkkKEtMSUJDKS9rbGliYy9pbmNsdWRlIC1JJChLTElCQykvbGludXgvaW5jbHVkZSAtSSQoS0xJQkMpL2tsaWJjL2FyY2gvaTM4Ni9pbmNsdWRlIC1JJChLTElCQykva2xpYmMvaW5jbHVkZS9iaXRzMzIKKyAKKy1DQyA9ICQoQ1JPU1NfQ09NUElMRSlnY2MKKytDQyA/PSAkKENST1NTX0NPTVBJTEUpZ2NjCisgQ1hGTEFHUyA/PSAtZ2dkYgorIENXRkxBR1MgPSAtV2FsbCAtV2Vycm9yIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdleHRyYSAtV25vLXVudXNlZC1wYXJhbWV0ZXIKKyBpZmRlZiBXQVJOX1VOVVNFRApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvbWRhZG0tMy4zLjJfeDMyX2FiaV90aW1lX3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjMuMl94MzJfYWJpX3RpbWVfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjU2ZDA3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvbWRhZG0tMy4zLjJfeDMyX2FiaV90aW1lX3QucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorV2hlbiB0cnkgdG8gcHJpbnQgdGltZV90IHZhbHVlcyBhcyBhIGxvbmcgaW50IGl0IGNhdXNlcyBhbiBlcnJvciBiZWNhdXNlIHRpbWVfdAorZGF0YSB0eXBlIGluIHgzMiBBQkkgaXMgbG9uZyBsb25nIGludC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorCitJbmRleDogbWRhZG0tMy4zLjQvbW9uaXRvci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWRhZG0tMy4zLjQub3JpZy9tb25pdG9yLmMKKysrKyBtZGFkbS0zLjMuNC9tb25pdG9yLmMKK0BAIC0yNTcsOSArMjU3LDEyIEBAIHN0YXRpYyBpbnQgcmVhZF9hbmRfYWN0KHN0cnVjdCBhY3RpdmVfYXIKKyAJCQltZGktPmN1cnJfc3RhdGUgPSByZWFkX2Rldl9zdGF0ZShtZGktPnN0YXRlX2ZkKTsKKyAJCX0KKyAJfQorLQorIAlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKysjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkKF9fSUxQMzJfXykKKysJZHByaW50ZigiKCVkKTogJWxsZC4lMDZsbGQgc3RhdGU6JXMgcHJldjolcyBhY3Rpb246JXMgcHJldjogJXMgc3RhcnQ6JWxsdVxuIiwKKysjZWxzZQorIAlkcHJpbnRmKCIoJWQpOiAlbGQuJTA2bGQgc3RhdGU6JXMgcHJldjolcyBhY3Rpb246JXMgcHJldjogJXMgc3RhcnQ6JWxsdVxuIiwKKysjZW5kaWYKKyAJCWEtPmluZm8uY29udGFpbmVyX21lbWJlciwKKyAJCXR2LnR2X3NlYywgdHYudHZfdXNlYywKKyAJCWFycmF5X3N0YXRlc1thLT5jdXJyX3N0YXRlXSwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjI3NjA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCisuL3Rlc3QgJj4uL3Rlc3QubG9nCitpZiBbICQ/IC1lcSAwIF0KK3RoZW4KKwllY2hvICJQQVNTOiBtZGFkbSIKKwlybSB0ZXN0LmxvZworZWxzZQorCWVjaG8gIkZBSUw6IG1kYWRtIgorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL21kYWRtXzMuMy40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vbWRhZG1fMy4zLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE5ODE2NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL21kYWRtXzMuMy40LmJiCkBAIC0wLDAgKzEsNzEgQEAKK1NVTU1BUlkgPSAiVG9vbCBmb3IgbWFuYWdpbmcgc29mdHdhcmUgUkFJRCB1bmRlciBMaW51eCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvcmFpZC9tZGFkbS8iCisKKyMgU29tZSBmaWxlcyBhcmUgR1BMdjIrIHdoaWxlIG90aGVycyBhcmUgR1BMdjIuCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWRtb24uYztiZWdpbmxpbmU9NDtlbmRsaW5lPTE4O21kNT1hZjdkODQ0NGQ5YzRkM2U1YzdjYWFjMGQ5ZDM0MDM5ZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tZGFkbS5oO2JlZ2xpbmxuZT00O2VuZGxpbmU9MjI7bWQ1PTQ2MmJjOTkzNmFjMGQzZGExMTAxOTFhM2Y5OTk0MTYxIgorCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC91dGlscy9yYWlkL21kYWRtLyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbWRhZG0tMy4yLjJfZml4X2Zvcl94MzIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2NjLTQuOS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tZGFkbS0zLjMuMl94MzJfYWJpX3RpbWVfdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC10eXBvLWluLWNvbXBhcmlzaW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisJICAiCitTUkNfVVJJW21kNXN1bV0gPSAiN2NhOGIxMTQ3MTBmOThmNTNmMjBjNTc4N2I2NzRhMDkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGFlNWY0NTMwNmI4NzMxOTBlOTFmNDEwNzA5YjAwZTUxOTk3YjYzM2MwNzJiMzNmOGVmZDlmN2RmMDIyY2E2OCIKKworQ0ZMQUdTICs9ICItZm5vLXN0cmljdC1hbGlhc2luZyIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0VYVFJBX09FTUFLRSA9ICJDSEVDS19SVU5fRElSPTAiCisjIFBQQzY0IGFuZCBNSVBTNjQgdXNlcyBsb25nIGxvbmcgZm9yIHU2NCBpbiB0aGUga2VybmVsLCBidXQgcG93ZXJwYydzIGFzbS90eXBlcy5oCisjIHByZXZlbnRzIDY0LWJpdCB1c2VybGFuZCBmcm9tIHNlZWluZyB0aGlzIGRlZmluaXRpb24sIGluc3RlYWQgZGVmYXVsdGluZworIyB0byB1NjQgPT0gbG9uZyBpbiB1c2Vyc3BhY2UuIERlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gdG8gZ2V0CisjIGludC1sbDY0LmggaW5jbHVkZWQKK0VYVFJBX09FTUFLRV9hcHBlbmRfcG93ZXJwYzY0ID0gJyBDRkxBR1M9LURfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18nCitFWFRSQV9PRU1BS0VfYXBwZW5kX21pcHM2NCA9ICcgQ0ZMQUdTPS1EX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fJworRVhUUkFfT0VNQUtFX2FwcGVuZF9taXBzNjRuMzIgPSAnIENGTEFHUz0tRF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXycKKworZG9fY29tcGlsZSgpIHsKKwlvZV9ydW5tYWtlCit9CisKK2RvX2luc3RhbGwoKSB7CisJZXhwb3J0IFNUUklQPSIiCisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKK30KKworRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC8qLnJ1bGVzIgorCitpbmhlcml0IHB0ZXN0CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSB0ZXN0Cit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJY3AgLWEgJHtTfS90ZXN0cyAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cworCWNwICR7U30vdGVzdCAke0R9JHtQVEVTVF9QQVRIfQorCXNlZCAtZSAncyFzbGVlcCAwLiohc2xlZXAgMSFnOyBzIS92YXIvdG1wIS8hZycgLWkgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCWxuIC1zIC9zYmluL21kYWRtICR7RH0ke1BURVNUX1BBVEh9L21kYWRtCisJZm9yIHByZyBpbiB0ZXN0X3N0cmlwZSBzd2FwX3N1cGVyIHJhaWQ2Y2hlY2sKKwlkbworCQlpbnN0YWxsIC1EIC1tIDc1NSAkcHJnICR7RH0ke1BURVNUX1BBVEh9LworCWRvbmUKK30KK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJiYXNoIgorUlJFQ09NTUVORFNfJHtQTn0tcHRlc3QgKz0gIiBcCisgICAgY29yZXV0aWxzIFwKKyAgICB1dGlsLWxpbnV4IFwKKyAgICBrZXJuZWwtbW9kdWxlLWxvb3AgXAorICAgIGtlcm5lbC1tb2R1bGUtbGluZWFyIFwKKyAgICBrZXJuZWwtbW9kdWxlLXJhaWQwIFwKKyAgICBrZXJuZWwtbW9kdWxlLXJhaWQxIFwKKyAgICBrZXJuZWwtbW9kdWxlLXJhaWQxMCBcCisgICAga2VybmVsLW1vZHVsZS1yYWlkNDU2IFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmdldHR5L21pbmdldHR5XzEuMDguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5nZXR0eS9taW5nZXR0eV8xLjA4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMTYyMjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5nZXR0eS9taW5nZXR0eV8xLjA4LmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiQ29tcGFjdCBnZXR0eSB0ZXJtaW5hbCBoYW5kbGVyIGZvciB2aXJ0dWFsIGNvbnNvbGVzIG9ubHkiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL21pbmdldHR5LyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitQUiA9ICJyMyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MGM1NmRiMDE0M2Y0ZjgwYzM2OWVlM2FmNzQyNWFmNmUiCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0vJHtCUH0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmE3NWFkNjQ4N2ZmMjcxNDI0ZmZjMDBhNjQ0MjA5OTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGY1NWM5MGJhNGZhYTkxM2Q5MWVmOTljYmY1Y2IyZWI0ZGJlMjc4MDMxNGMzYmIxNzk1M2Y4NDljOGNkZGQxNyIKKworIyBzdWJzdGl0dXRlIG91ciBDRkxBR1MgZm9yICItTzIgLVdhbGwgLVcgLXBpcGUiCisjCitFWFRSQV9PRU1BS0UgPSAiQ0M9JyR7Q0N9JyBcCisgICAgICAgICAgICAgICAgQ0ZMQUdTPScke0NGTEFHU30gLURfR05VX1NPVVJDRSciCisKK2RvX2luc3RhbGwoKXsKKyAgICBpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOCAke0R9LyR7YmFzZV9zYmluZGlyfQorICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0KK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImdldHR5IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dldHR5XSA9ICIke2Jhc2Vfc2JpbmRpcn0vZ2V0dHkiCitBTFRFUk5BVElWRV9UQVJHRVRbZ2V0dHldID0gIiR7YmFzZV9zYmluZGlyfS9taW5nZXR0eSIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tLzAwMDEtRml4LWJ1aWxkLWlzc3VzLXN1cmZhY2VkLWR1ZS10by1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tLzAwMDEtRml4LWJ1aWxkLWlzc3VzLXN1cmZhY2VkLWR1ZS10by1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYzY3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb20vMDAwMS1GaXgtYnVpbGQtaXNzdXMtc3VyZmFjZWQtZHVlLXRvLW11c2wucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRnJvbSBkNjJhNTg2MmUyNmVkM2ZjNThkNzg5ZWZlOWM0MGNhNmM5MTFkMzZiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMzEgQXVnIDIwMTUgMjI6MzU6MzEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGJ1aWxkIGlzc3VzIHN1cmZhY2VkIGR1ZSB0byBtdXNsCisKK3NyYy9nZXRzZGlyLmg6Mjg6MTQ6IGVycm9yOiAnTUFYTkFNTEVOJyB1bmRlY2xhcmVkIGhlcmUgKG5vdCBpbiBhIGZ1bmN0aW9uKQorICAgY2hhciBmbmFtZVtNQVhOQU1MRU4gKyAxXTsgIC8qIGZpbGVuYW1lICsgdGVybWluYXRpbmcgbnVsbCAqLworCitzcmMvZGlhbC5jOjM1MjoyMjogZXJyb3I6ICdLSU9DU09VTkQnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorfCAgICAgIGlvY3RsKGNvbnNvbGVmZCwgS0lPQ1NPVU5ELCBrKTsKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBzcmMvZGlhbC5jICAgIHwgMiArLQorIHNyYy9nZXRzZGlyLmMgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2RpYWwuYyBiL3NyYy9kaWFsLmMKK2luZGV4IGE5MGMxZDIuLmJmMDI1NzQgMTAwNjQ0CistLS0gYS9zcmMvZGlhbC5jCisrKysgYi9zcmMvZGlhbC5jCitAQCAtMzksNyArMzksNyBAQAorICNpbmNsdWRlICJpbnRsLmgiCisgCisgI2lmZGVmIFZDX01VU0lDCistIyAgaWYgZGVmaW5lZChfX0dMSUJDX18pCisrIyAgaWYgZGVmaW5lZChfX0dMSUJDX18pIHx8IGRlZmluZWQoX19saW51eF9fKQorICMgICAgaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisgIyAgICBpbmNsdWRlIDxzeXMva2QuaD4KKyAjICAgIGluY2x1ZGUgPHN5cy90aW1lLmg+CitkaWZmIC0tZ2l0IGEvc3JjL2dldHNkaXIuYyBiL3NyYy9nZXRzZGlyLmMKK2luZGV4IDIxOTViMjcuLmI2MWEzNjEgMTAwNjQ0CistLS0gYS9zcmMvZ2V0c2Rpci5jCisrKysgYi9zcmMvZ2V0c2Rpci5jCitAQCAtMzAsNiArMzAsNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorIAorICNpbmNsdWRlICJnZXRzZGlyLmgiCistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS8wMDAxLWZpeC1taW5pY29tLWgtdi1yZXR1cm4tdmFsdWUtaXMtbm90LTAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb20vMDAwMS1maXgtbWluaWNvbS1oLXYtcmV0dXJuLXZhbHVlLWlzLW5vdC0wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkODI2MWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb20vMDAwMS1maXgtbWluaWNvbS1oLXYtcmV0dXJuLXZhbHVlLWlzLW5vdC0wLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1N1YmplY3Q6IFtQQVRDSF0gZml4IG1pbmljb20gLWgvLXYgcmV0dXJuIHZhbHVlIGlzIG5vdCAwCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBMdSBDaG9uZyA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKworLS0tCisgc3JjL21pbmljb20uYyB8ICAgIDYgKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9taW5pY29tLmMgYi9zcmMvbWluaWNvbS5jCitpbmRleCBlMWE1NTdiLi43MzBkYTdjIDEwMDY0NAorLS0tIGEvc3JjL21pbmljb20uYworKysrIGIvc3JjL21pbmljb20uYworQEAgLTExNjYsMTUgKzExNjYsMTMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkgICAgICAgICAibW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiIKKyAgICAgICAgICAgICAgICAgICJhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb25cbiIKKyAgICAgICAgICAgICAgICAgICIyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4iKTsKKy0gICAgICAgICAgZXhpdCgxKTsKKy0gICAgICAgICAgYnJlYWs7CisrICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgICBjYXNlICdzJzogLyogc2V0dXAgbW9kZSAqLworICAgICAgICAgICBkb3NldHVwID0gMTsKKyAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgaGVscHRoZW0oKTsKKy0gICAgICAgICAgZXhpdCgxKTsKKy0gICAgICAgICAgYnJlYWs7CisrICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgICBjYXNlICdwJzogLyogUHNldWRvIHRlcm1pbmFsIHRvIHVzZS4gKi8KKyAgICAgICAgICAgaWYgKHN0cm5jbXAob3B0YXJnLCAiL2Rldi8iLCA1KSA9PSAwKQorICAgICAgICAgICAgIG9wdGFyZyArPSA1OworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS9hbGxvdy50by5kaXNhYmxlLmxvY2tkZXYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb20vYWxsb3cudG8uZGlzYWJsZS5sb2NrZGV2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YzA4ODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb20vYWxsb3cudG8uZGlzYWJsZS5sb2NrZGV2LnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKKy0tLSBhL2NvbmZpZ3VyZS5pbgkyMDEzLTAyLTA2IDE4OjE4OjEzLjAwMDAwMDAwMCArMDEwMAorKysrIGIvY29uZmlndXJlLmluCTIwMTMtMDctMjEgMTU6MzE6MjcuNjE0ODI4ODk0ICswMjAwCitAQCAtNDAsNyArNDAsMTMgQEAKKyBmaQorIAorIFBLR19QUk9HX1BLR19DT05GSUcKKy1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKysKKytBQ19BUkdfRU5BQkxFKFtsb2NrZGV2XSwKKysgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1sb2NrZGV2XSwKKysgICAgICAgICAgICAgICAgICAgICAgIFtFbmFibGUgbG9ja2RldiBzdXBwb3J0IChkZWY6IGVuYWJsZWQpXSksCisrICAgICAgICBbXSwgW2VuYWJsZV9sb2NrZGV2PSJ5ZXMiXSkKKysKKytpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgdGVzdCAieCRlbmFibGVfbG9ja2RldiIgPSB4eWVzOyB0aGVuCisgCVBLR19DSEVDS19NT0RVTEVTKFtMT0NLREVWXSwgW2xvY2tkZXZdLCBBQ19ERUZJTkUoW0hBVkVfTE9DS0RFVl0sWzFdLFtEZWZpbmUgaWYgeW91IGhhdmUgbG9ja2Rldl0pLFs6XSkKKyBmaQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tXzIuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbV8yLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU3NWNmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbV8yLjcuYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJUZXh0LWJhc2VkIG1vZGVtIGNvbnRyb2wgYW5kIHRlcm1pbmFsIGVtdWxhdGlvbiBwcm9ncmFtIgorREVTQ1JJUFRJT04gPSAiTWluaWNvbSBpcyBhIHRleHQtYmFzZWQgbW9kZW0gY29udHJvbCBhbmQgdGVybWluYWwgZW11bGF0aW9uIHByb2dyYW0gZm9yIFVuaXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtcyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorREVQRU5EUyA9ICJuY3Vyc2VzIHZpcnR1YWwvbGliaWNvbnYiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQyMDQ3N2FiYzU2NzQwNGRlYmNhMGEyYTFjYjZiNjQ1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9taW5pY29tLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xMjttZDU9YTU4ODM4Y2I3MDlmMGRiNTE3ZjRlNDI3MzBjNDllODEiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9hbGlvdGguZGViaWFuLm9yZy9mcnMvZG93bmxvYWQucGhwL2xhdGVzdGZpbGUvMy8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWxsb3cudG8uZGlzYWJsZS5sb2NrZGV2LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZml4LW1pbmljb20taC12LXJldHVybi12YWx1ZS1pcy1ub3QtMC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1idWlsZC1pc3N1cy1zdXJmYWNlZC1kdWUtdG8tbXVzbC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzA0NGNhM2UyOTEyNjhjMzMyOTRmMTcxZDQyNmRjMmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWFjM2E2NjNiODJmNGY1ZGY2NDExNGI0NzkyYjk5MjZiNTM2Yzg1ZjU5ZGUwZjJkMmIzMjFjNzYyNmE5MDRmNCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbG9ja2Rldl0gPSAiLS1lbmFibGUtbG9ja2RldiwtLWRpc2FibGUtbG9ja2Rldixsb2NrZGV2IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCitkb19pbnN0YWxsKCkgeworCWZvciBkIGluIGRvYyBleHRyYXMgbWFuIGxpYiBzcmM7IGRvIG1ha2UgLUMgJGQgREVTVERJUj0ke0R9IGluc3RhbGw7IGRvbmUKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL2ZpbGVzL2Rpc2FibGUtc3RyaXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ta3RlbXAvZmlsZXMvZGlzYWJsZS1zdHJpcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDY4NjllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL2ZpbGVzL2Rpc2FibGUtc3RyaXAucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggMzdiM2NjOS4uZjEwMjZmMyAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTk1LDcgKzk1LDcgQEAgaW5zdGFsbC1kaXJzOgorIAkgICAgJChERVNURElSKSQobWFuZGlyKS9tYW4xCisgCisgaW5zdGFsbC1iaW5hcmllczogJChQUk9HKQorLQkkKElOU1RBTEwpIC1tIDA1NTUgLXMgJChQUk9HKSAkKERFU1RESVIpJChiaW5kaXIpLyQoUFJPRykKKysJJChJTlNUQUxMKSAtbSAwNTU1ICQoUFJPRykgJChERVNURElSKSQoYmluZGlyKS8kKFBST0cpCisgCisgaW5zdGFsbC1tYW46CisgCSQoSU5TVEFMTCkgLW0gMDQ0NCAkKHNyY2RpcikvbWt0ZW1wLiQobWFudHlwZSkgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL2ZpbGVzL2ZpeC1wYXJhbGxlbC1tYWtlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL2ZpbGVzL2ZpeC1wYXJhbGxlbC1tYWtlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYjZkY2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ta3RlbXAvZmlsZXMvZml4LXBhcmFsbGVsLW1ha2UucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorVGhpcyBmaXhlcyB0aGUgcGFyYWxsZWwgbWFrZSBpbnN0YWxsIGZhaWx1cmUKKworVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZAoraHR0cDovL3d3dy5ncmF0aXNvZnQudXMvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTUyOAorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBta3RlbXAtMS43L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWt0ZW1wLTEuNy5vcmlnL01ha2VmaWxlLmluCisrKysgbWt0ZW1wLTEuNy9NYWtlZmlsZS5pbgorQEAgLTk0LDEwICs5NCwxMCBAQCBpbnN0YWxsLWRpcnM6CisgCSQoU0hFTEwpICQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoREVTVERJUikkKGJpbmRpcikgXAorIAkgICAgJChERVNURElSKSQobWFuZGlyKS9tYW4xCisgCistaW5zdGFsbC1iaW5hcmllczogJChQUk9HKQorK2luc3RhbGwtYmluYXJpZXM6IGluc3RhbGwtZGlycyAkKFBST0cpCisgCSQoSU5TVEFMTCkgLW0gMDU1NSAkKFBST0cpICQoREVTVERJUikkKGJpbmRpcikvJChQUk9HKQorIAorLWluc3RhbGwtbWFuOgorK2luc3RhbGwtbWFuOiBpbnN0YWxsLWRpcnMKKyAJJChJTlNUQUxMKSAtbSAwNDQ0ICQoc3JjZGlyKS9ta3RlbXAuJChtYW50eXBlKSBcCisgCSAgICAkKERFU1RESVIpJChtYW5kaXIpL21hbjEvbWt0ZW1wLjEKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21rdGVtcC9ta3RlbXBfMS43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL21rdGVtcF8xLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyMzhlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21rdGVtcC9ta3RlbXBfMS43LmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiRW5hYmxlcyBzYWZlIHRlbXBvcmFyeSBmaWxlIGNyZWF0aW9uIGZyb20gc2hlbGwgc2NyaXB0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWt0ZW1wLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly93d3cubWt0ZW1wLm9yZy9idWdzIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJJU0MiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT00MzA2ODBmNjMyMmExZWI4NzE5OWI1ZTAxYTgyYzBkNCIKKworUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLm1rdGVtcC5vcmcvcHViL21rdGVtcC8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgZmlsZTovL2Rpc2FibGUtc3RyaXAucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLW1ha2UucGF0Y2ggXAorICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ODdiYmVkOWZhMmVlOGU3NjQ1NzMzYzBlOGU2NTE3MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZTk0YjllMWVkZjg2NmIyNjA5NTQ1ZGE2NWI2Mjc5OTZhYzVkMTU4ZmRhMDcxZTQ5MmJkZGIyZjRhNDgyNjc1IgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtbGliYyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJbXYgJHtEfSR7YmluZGlyfS9ta3RlbXAgJHtEfSR7YmFzZV9iaW5kaXJ9L21rdGVtcAorCXJtZGlyICR7RH0ke2JpbmRpcn0KK30KKworQUxURVJOQVRJVkVfJHtQTn0gPSAibWt0ZW1wIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21rdGVtcF0gPSAiJHtiYXNlX2JpbmRpcn0vbWt0ZW1wIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAibWt0ZW1wLjEiCitBTFRFUk5BVElWRV9QUklPUklUWV8ke1BOfS1kb2MgPSAiMzAwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21rdGVtcC4xXSA9ICIke21hbmRpcn0vbWFuMS9ta3RlbXAuMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21zbXRwL21zbXRwXzEuNi4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbXNtdHAvbXNtdHBfMS42LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjliZjU2MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21zbXRwL21zbXRwXzEuNi4yLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAibXNtdHAgaXMgYW4gU01UUCBjbGllbnQiCitERVNDUklQVElPTiA9ICJBIHNlbmRtYWlsIHJlcGxhY2VtZW50IGZvciB1c2UgaW4gTVRBcyBsaWtlIG11dHQiCitIT01FUEFHRSA9ICJodHRwOi8vbXNtdHAuc291cmNlZm9yZ2UubmV0LyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorCitMSUNFTlNFID0gIkdQTHYzIgorREVQRU5EUyA9ICJ6bGliIGdudXRscyIKKworI0NPUFlJTkcgb3IgTGljZW5jZQorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9tc210cC9maWxlcy9tc210cC8ke1BWfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzYmFjYTkzYzdlNWYxYWE5ZDM2YTJlNWIzODczOWFiOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyZjZlY2Q3Y2JmYWRmNTQ4ZmQ1NTIwNWJkMjRjYjYzYjg0YmNiYjExODVlZmVkOTE3ZGQ3ODAwNTk1YTQ4Nzg5IgorCitpbmhlcml0IGdldHRleHQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWxpYnNlY3JldCAtLXdpdGhvdXQtbGliZ3Nhc2wgLS13aXRob3V0LWxpYmlkbiIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAic2VuZG1haWwiCitBTFRFUk5BVElWRV9UQVJHRVRbc2VuZG1haWxdID0gIiR7YmluZGlyfS9tc210cCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzZW5kbWFpbF0gPSAiJHtzYmluZGlyfS9zZW5kbWFpbCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworcGtnX3Bvc3RpbnN0XyR7UE59X2xpbnV4c3RkYmFzZSAoKSB7CisJIyAvdXNyL2xpYi9zZW5kbWlhbCBpcyByZXF1aXJlZCBieSBMU0IgY29yZSB0ZXN0CisJWyAhIC1MICREL3Vzci9saWIvc2VuZG1haWwgXSAmJiBsbiAtc2YgJHtzYmluZGlyfS9zZW5kbWFpbCAkRC91c3IvbGliLworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9pZmNvbmZpZy1pbnRlcmZhY2UtMC1kZWwtSVAtd2lsbC1yZW1vdmUtdGhlLWFsaWFzZWQtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9pZmNvbmZpZy1pbnRlcmZhY2UtMC1kZWwtSVAtd2lsbC1yZW1vdmUtdGhlLWFsaWFzZWQtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZjgxNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL2lmY29uZmlnLWludGVyZmFjZS0wLWRlbC1JUC13aWxsLXJlbW92ZS10aGUtYWxpYXNlZC0ucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA4MTgxNGRjMmIxNDg0MzAwOTE5M2VmZDMwN2Q4MTRjMjZiYWE2MWYwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmlyaSBQb3BlbGthIDxqcG9wZWxrYUByZWRoYXQuY29tPgorRGF0ZTogV2VkLCA3IERlYyAyMDExIDE5OjE0OjA5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGlmY29uZmlnIGludGVyZmFjZTowIGRlbCA8SVA+IHdpbGwgcmVtb3ZlIHRoZSBhbGlhc2VkIElQIG9uIElBNjQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitjb21taXQgODE4MTRkYzJiMTQ4NDMwMDkxOTNlZmQzMDdkODE0YzI2YmFhNjFmMCBmcm9tCitnaXQ6Ly9naXQuY29kZS5zZi5uZXQvcC9uZXQtdG9vbHMvY29kZQorCistLS0KKyBpZmNvbmZpZy5jIHwgICAgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvaWZjb25maWcuYyBiL2lmY29uZmlnLmMKK2luZGV4IGJjNDA1YzYuLmRhZTg5MjIgMTAwNjQ0CistLS0gYS9pZmNvbmZpZy5jCisrKysgYi9pZmNvbmZpZy5jCitAQCAtODkwLDcgKzg5MCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCSAgICBjb250aW51ZTsKKyAJCX0KKyAJCQorLQkJbWVtY3B5KCZpcCwgJnNpbi5zaW5fYWRkci5zX2FkZHIsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisrCQkvKiBDbGVhciAiaXAiIGluIGNhc2Ugc2l6ZW9mKHVuc2lnbmVkIGxvbmcpID4gc2l6ZW9mKHNpbi5zaW5fYWRkci5zX2FkZHIpICovCisrCQlpcCA9IDA7CisrCQltZW1jcHkoJmlwLCAmc2luLnNpbl9hZGRyLnNfYWRkciwgc2l6ZW9mKHNpbi5zaW5fYWRkci5zX2FkZHIpKTsKKyAJCQorIAkJaWYgKGdldF9ubWJjX3BhcmVudChpZnIuaWZyX25hbWUsICZubSwgJmJjKSA8IDApIHsKKyAJCSAgICBmcHJpbnRmKHN0ZGVyciwgXygiSW50ZXJmYWNlICVzIG5vdCBpbml0aWFsaXplZFxuIiksCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9uZXQtdG9vbHMtY29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDM5YzJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9uZXQtdG9vbHMtY29uZmlnLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyogY29uZmlnLmgJQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgY29uZmlndXJhdGlvbiBpbmNsdWRlZmlsZQorKgorKiBORVQtVE9PTFMJQSBjb2xsZWN0aW9uIG9mIHByb2dyYW1zIHRoYXQgZm9ybSB0aGUgYmFzZSBzZXQgb2YgdGhlCisqCQlORVQtMyBOZXR3b3JraW5nIERpc3RyaWJ1dGlvbiBmb3IgdGhlIExJTlVYIG9wZXJhdGluZworKgkJc3lzdGVtLgorKgorKgkJRE8gIE5PVCAgRURJVCAgRElSRUNUTFkKKyoKKyovCisKKy8qIAorICogCisgKiBJbnRlcm5hdGlvbmFsaXphdGlvbgorICogCisgKiBUaGUgbmV0LXRvb2xzIHBhY2thZ2UgaGFzIGN1cnJlbnRseSBiZWVuIHRyYW5zbGF0ZWQgdG8gRnJlbmNoLAorICogR2VybWFuIGFuZCBCcmF6aWxpYW4gUG9ydHVnZXNlLiAgT3RoZXIgdHJhbnNsYXRpb25zIGFyZSwgb2YKKyAqIGNvdXJzZSwgd2VsY29tZS4gIEFuc3dlciBgbicgaGVyZSBpZiB5b3UgaGF2ZSBubyBzdXBwb3J0IGZvcgorICogaW50ZXJuYXRpb25hbGl6YXRpb24gb24geW91ciBzeXN0ZW0uCisgKiAKKyAqLworI2RlZmluZSBJMThOIDEKKworLyogCisgKiAKKyAqIFByb3RvY29sIEZhbWlsaWVzLgorICogCisgKi8KKyNkZWZpbmUgSEFWRV9BRlVOSVggMQorI2RlZmluZSBIQVZFX0FGSU5FVCAxCisjZGVmaW5lIEhBVkVfQUZJTkVUNiAxCisjZGVmaW5lIEhBVkVfQUZJUFggMAorI2RlZmluZSBIQVZFX0FGQVRBTEsgMAorI2RlZmluZSBIQVZFX0FGQVgyNSAwCisjZGVmaW5lIEhBVkVfQUZORVRST00gMQorI2RlZmluZSBIQVZFX0FGUk9TRSAwCisjZGVmaW5lIEhBVkVfQUZYMjUgMAorI2RlZmluZSBIQVZFX0FGRUNPTkVUIDAKKyNkZWZpbmUgSEFWRV9BRkRFQ25ldCAwCisjZGVmaW5lIEhBVkVfQUZBU0ggMAorCisvKiAKKyAqIAorICogRGV2aWNlIEhhcmR3YXJlIHR5cGVzLgorICogCisgKi8KKyNkZWZpbmUgSEFWRV9IV0VUSEVSIDEKKyNkZWZpbmUgSEFWRV9IV0FSQyAxCisjZGVmaW5lIEhBVkVfSFdTTElQIDEKKyNkZWZpbmUgSEFWRV9IV1BQUCAxCisjZGVmaW5lIEhBVkVfSFdUVU5ORUwgMQorI2RlZmluZSBIQVZFX0hXU1RSSVAgMAorI2RlZmluZSBIQVZFX0hXVFIgMAorI2RlZmluZSBIQVZFX0hXQVgyNSAwCisjZGVmaW5lIEhBVkVfSFdST1NFIDAKKyNkZWZpbmUgSEFWRV9IV05FVFJPTSAxCisjZGVmaW5lIEhBVkVfSFdYMjUgMAorI2RlZmluZSBIQVZFX0hXRlIgMQorI2RlZmluZSBIQVZFX0hXU0lUIDAKKyNkZWZpbmUgSEFWRV9IV0ZEREkgMAorI2RlZmluZSBIQVZFX0hXSElQUEkgMAorI2RlZmluZSBIQVZFX0hXQVNIIDAKKyNkZWZpbmUgSEFWRV9IV0hETENMQVBCIDAKKyNkZWZpbmUgSEFWRV9IV0lSREEgMQorI2RlZmluZSBIQVZFX0hXRUMgMAorI2RlZmluZSBIQVZFX0hXSUIgMAorCisvKiAKKyAqIAorICogT3RoZXIgRmVhdHVyZXMuCisgKiAKKyAqLworI2RlZmluZSBIQVZFX0ZXX01BU1FVRVJBREUgMQorI2RlZmluZSBIQVZFX0lQX1RPT0xTIDEKKyNkZWZpbmUgSEFWRV9NSUkgMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9uZXQtdG9vbHMtY29uZmlnLm1ha2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1jb25maWcubWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzUxNmYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9uZXQtdG9vbHMtY29uZmlnLm1ha2UKQEAgLTAsMCArMSwzNiBAQAorSTE4Tj0xCitIQVZFX0FGVU5JWD0xCitIQVZFX0FGSU5FVD0xCitIQVZFX0FGSU5FVDY9MQorIyBIQVZFX0FGSVBYPTAKKyMgSEFWRV9BRkFUQUxLPTAKKyMgSEFWRV9BRkFYMjU9MAorSEFWRV9BRk5FVFJPTT0xCisjIEhBVkVfQUZST1NFPTAKKyMgSEFWRV9BRlgyNT0wCisjIEhBVkVfQUZFQ09ORVQ9MAorIyBIQVZFX0FGREVDbmV0PTAKKyMgSEFWRV9BRkFTSD0wCitIQVZFX0hXRVRIRVI9MQorSEFWRV9IV0FSQz0xCitIQVZFX0hXU0xJUD0xCitIQVZFX0hXUFBQPTEKK0hBVkVfSFdUVU5ORUw9MQorSEFWRV9IV1NUUklQPTEKK0hBVkVfSFdUUj0xCisjIEhBVkVfSFdBWDI1PTAKKyMgSEFWRV9IV1JPU0U9MAorSEFWRV9IV05FVFJPTT0xCisjIEhBVkVfSFdYMjU9MAorSEFWRV9IV0ZSPTEKKyMgSEFWRV9IV1NJVD0wCisjIEhBVkVfSFdGRERJPTAKKyMgSEFWRV9IV0hJUFBJPTAKKyMgSEFWRV9IV0FTSD0wCisjIEhBVkVfSFdIRExDTEFQQj0wCitIQVZFX0hXSVJEQT0xCisjIEhBVkVfSFdFQz0wCisjIEhBVkVfSFdJQj0wCitIQVZFX0ZXX01BU1FVRVJBREU9MQorSEFWRV9JUF9UT09MUz0xCitIQVZFX01JST0xCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzXzEuNjAtMjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzXzEuNjAtMjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmYzFlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHNfMS42MC0yNi5iYgpAQCAtMCwwICsxLDg5IEBACitTVU1NQVJZID0gIkJhc2ljIG5ldHdvcmtpbmcgdG9vbHMiCitERVNDUklQVElPTiA9ICJBIGNvbGxlY3Rpb24gb2YgcHJvZ3JhbXMgdGhhdCBmb3JtIHRoZSBiYXNlIHNldCBvZiB0aGUgTkVULTMgbmV0d29ya2luZyBkaXN0cmlidXRpb24gZm9yIHRoZSBMaW51eCBvcGVyYXRpbmcgc3lzdGVtIgorSE9NRVBBR0UgPSAiaHR0cDovL25ldC10b29scy5iZXJsaW9zLmRlLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3MuZGViaWFuLm9yZy9uZXQtdG9vbHMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjYTQzY2JjODQyYzIzMzZlODM1OTI2YzIxNjZjMjhiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2lmY29uZmlnLmM7YmVnaW5saW5lPTExO2VuZGxpbmU9MTU7bWQ1PWQxY2EzNzIwODBhZDU0MDFlMjNjYTBhZmMzNWNmOWJhIgorCitTUkNfVVJJID0gImh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLzIwMDUwMzEyVDAwMDAwMFovcG9vbC9tYWluL24vJHtCUE59LyR7QlBOfV8xLjYwLm9yaWcudGFyLmd6O25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgIGh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLy8yMDE1MDgzMVQwOTMzNDJaL3Bvb2wvbWFpbi9uLyR7QlBOfS8ke0JQTn1fJHtQVn0uZGlmZi5nejthcHBseT1ubztuYW1lPXBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25ldC10b29scy1jb25maWcuaCBcCisgICAgICAgICAgIGZpbGU6Ly9uZXQtdG9vbHMtY29uZmlnLm1ha2UgXAorICAgICAgICAgICBmaWxlOi8vaWZjb25maWctaW50ZXJmYWNlLTAtZGVsLUlQLXdpbGwtcmVtb3ZlLXRoZS1hbGlhc2VkLS5wYXRjaCBcCisJICAgIgorCitTID0gIiR7V09SS0RJUn0vbmV0LXRvb2xzLTEuNjAiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gImVjYWYzN2FjYjViNWRhZmY0YmRkYTc3Nzg1ZmQ5MTZkIgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiZWM2Nzk2N2NmN2IxYTNhMzgyOGE4NDc2MmZiYzAxM2FjNTBlZTVkYzlhYTMwOTVkNWM1OTFmMzAyYzJkZTBmNSIKKworU1JDX1VSSVtwYXRjaC5tZDVzdW1dID0gImVhMzU5MmY0OWFjODM4MDk2MmJjNGQ5YjY2YzdlN2U5IgorU1JDX1VSSVtwYXRjaC5zaGEyNTZzdW1dID0gImFlZWVhZmFmZjY4ODY2YTQ0NmYwMWJiNjM5ZDRlMDE0NmE2MGFmMzRkY2QyMGUzMWEzZTQ2NTg1MDIyZmM3NmMiCisKK2luaGVyaXQgZ2V0dGV4dAorCisjIFRoZSBNYWtlZmlsZSBpcyBsYW1lLCBubyBwYXJhbGxlbCBidWlsZAorUEFSQUxMRUxfTUFLRSA9ICIiCisKKyMgVW5saWtlIG90aGVyIERlYmlhbiBwYWNrYWdlcywgbmV0LXRvb2xzICouZGlmZi5neiBjb250YWlucyBhbm90aGVyIHNlcmllcyBvZgorIyBwYXRjaGVzIG1haW50YWluZWQgYnkgcXVpbHQuIFNvIG1hbnVhbGx5IGFwcGx5IHRoZW0gYmVmb3JlIGFwcGx5aW5nIG90aGVyIGxvY2FsCisjIHBhdGNoZXMuIEFsc28gcmVtb3ZlIGFsbCB0ZW1wIGZpbGVzIGJlZm9yZSBsZWF2aW5nLCBiZWNhdXNlIGRvX3BhdGNoKCkgd2lsbCBwb3AgCisjIHVwIGFsbCBwcmV2aW91c2x5IGFwcGxpZWQgcGF0Y2hlcyBpbiB0aGUgc3RhcnQKK25ldHRvb2xzX2RvX3BhdGNoKCkgeworCWNkICR7U30KKwlxdWlsdCBwb3AgLWEgfHwgdHJ1ZQorCWlmIFsgLWQgJHtTfS8ucGMtbmV0dG9vbHMgXTsgdGhlbgorCQlybSAtcmYgJHtTfS8ucGMKKwkJbXYgJHtTfS8ucGMtbmV0dG9vbHMgJHtTfS8ucGMKKwkJUVVJTFRfUEFUQ0hFUz0ke1N9L2RlYmlhbi9wYXRjaGVzIHF1aWx0IHBvcCAtYQorCQlybSAtcmYgJHtTfS8ucGMgJHtTfS9kZWJpYW4KKwlmaQorCXBhdGNoIC1wMSA8ICR7V09SS0RJUn0vJHtCUE59XyR7UFZ9LmRpZmYJCisJUVVJTFRfUEFUQ0hFUz0ke1N9L2RlYmlhbi9wYXRjaGVzIHF1aWx0IHB1c2ggLWEKKwltdiAke1N9Ly5wYyAke1N9Ly5wYy1uZXR0b29scworfQorCitkb191bnBhY2tbY2xlYW5kaXJzXSArPSAiJHtTfSIKKworIyBXZSBpbnZva2UgYmFzZSBkb19wYXRjaCBhdCBlbmQsIHRvIGluY29ycG9yYXRlIGFueSBsb2NhbCBwYXRjaAorcHl0aG9uIGRvX3BhdGNoKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnbmV0dG9vbHNfZG9fcGF0Y2gnLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygncGF0Y2hfZG9fcGF0Y2gnLCBkKQorfQorCitkb19jb25maWd1cmUoKSB7CisJIyBuZXQtdG9vbHMgaGFzIGl0cyBvd24gY29uZmlnIG1lY2hhbmlzbSByZXF1aXJpbmcgIm1ha2UgY29uZmlnIgorCSMgd2UgcHJlLWdlbmVyYXRlIGRlc2lyZWQgb3B0aW9ucyBhbmQgY29weSB0byBzb3VyY2UgZGlyZWN0b3J5IGluc3RlYWQKKwljcCAke1dPUktESVJ9L25ldC10b29scy1jb25maWcuaCAgICAke1N9L2NvbmZpZy5oCisJY3AgJHtXT1JLRElSfS9uZXQtdG9vbHMtY29uZmlnLm1ha2UgJHtTfS9jb25maWcubWFrZQorfQorCitkb19jb21waWxlKCkgeworCSMgbmV0LXRvb2xzIHVzZSBDT1BUUy9MT1BUUyB0byBhbGxvdyBhZGRpbmcgY3VzdG9tIG9wdGlvbnMKKwlleHBvcnQgQ09QVFM9IiRDRkxBR1MiCisJZXhwb3J0IExPUFRTPSIkTERGTEFHUyIKKwl1bnNldCBDRkxBR1MKKwl1bnNldCBMREZMQUdTCisKKwlvZV9ydW5tYWtlCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSAnQkFTRURJUj0ke0R9JyBpbnN0YWxsCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitiYXNlX3NiaW5kaXJfcHJvZ3MgPSAiYXJwIGlmY29uZmlnIGlwbWFkZHIgaXB0dW5uZWwgbWlpLXRvb2wgbmFtZWlmIHBsaXBjb25maWcgcmFycCByb3V0ZSBzbGF0dGFjaCIKK2Jhc2VfYmluZGlyX3Byb2dzICA9ICJkbnNkb21haW5uYW1lIGRvbWFpbm5hbWUgaG9zdG5hbWUgbmV0c3RhdCBuaXNkb21haW5uYW1lIHlwZG9tYWlubmFtZSIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiJHtiYXNlX3NiaW5kaXJfcHJvZ3N9ICR7YmFzZV9iaW5kaXJfcHJvZ3N9IgorcHl0aG9uIF9fYW5vbnltb3VzKCkgeworCWZvciBwcm9nIGluIGQuZ2V0VmFyKCdiYXNlX3NiaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorCQlkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ2Jhc2Vfc2JpbmRpcicsIFRydWUpLCBwcm9nKSkKKwlmb3IgcHJvZyBpbiBkLmdldFZhcignYmFzZV9iaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorCQlkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ2Jhc2VfYmluZGlyJywgVHJ1ZSksIHByb2cpKQorfQorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL2Nyb3NzX2FyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy9jcm9zc19hci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzAwN2FhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy9jcm9zc19hci5wYXRjaApAQCAtMCwwICsxLDU4IEBACitGaXggY3Jvc3MgbGluayB1c2luZyBhdXRvY29uZiBkZXRlY3RlZCBBUgorCitJZiBidWlsZGluZyBvbiAzMmJpdCBob3N0IGFuZCBjcmVhdGluZyA2NGJpdCBsaWJyYXJpZXMsIHRoZSB0YXJnZXQKK3BhY2thZ2UgYnVpbGRzIHNob3VsZCBub3QgaW52b2tlIHRoZSAzMmJpdCBob3N0cydzIGFyLiAgU3BlY2lmaWNhbGx5Cit5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgbWVzc2FnZSBsaWtlOgorCit4ODZfNjQtbGludXgtZ2NjICAgIC1tNjQgLS1zeXNyb290PS9vcHQvcWVtdXg4Ni02NC90bXAvc3lzcm9vdHMvcWVtdXg4Ni02NCAtZyAtbyB0ZXN0IHRlc3QubyBsaWJuZXd0LmEgLVdsLC1PMSAtV2wsLS1oYXNoLXN0eWxlPWdudSAtV2wsLS1hcy1uZWVkZWQgLWxzbGFuZworbGlibmV3dC5hOiBjb3VsZCBub3QgcmVhZCBzeW1ib2xzOiBBcmNoaXZlIGhhcyBubyBpbmRleDsgcnVuIHJhbmxpYiB0byBhZGQgb25lCitjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluICB8IDMgKystCisgY29uZmlndXJlLmFjIHwgNCArKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTcsNiArNyw3IEBAIENGTEFHUyA9IEBDRkxBR1NACisgTERGTEFHUyA9IEBMREZMQUdTQAorIENQUEZMQUdTID0gLURfR05VX1NPVVJDRSBAQ1BQRkxBR1NAIAorIEdOVV9MRCA9IEBHTlVfTERACisrQVIgPSBAQVJACisgCisgVkVSU0lPTiA9IEBWRVJTSU9OQAorIFRBRyA9IHIkKHN1YnN0IC4sLSwkKFZFUlNJT04pKQorQEAgLTEwOSw3ICsxMTAsNyBAQCB3aGlwdGNsLiQoU09FWFQpOiAkKFdISVBUQ0xPQkpTKSAkKExJQk5FV1RTSCkKKyAJJChDQykgLXNoYXJlZCAkKFNIQ0ZMQUdTKSAkKExERkxBR1MpIC1vIHdoaXB0Y2wuJChTT0VYVCkgJChXSElQVENMT0JKUykgLUwuIC1sbmV3dCAgJChMSUJUQ0wpIC1scG9wdCAkKExJQlMpCisgCisgJChMSUJORVdUKTogJChMSUJPQkpTKQorLQlhciBydiAkQCAkXgorKwkkKEFSKSBydiAkQCAkXgorIAorIG5ld3QubyAkKFNIQVJFRERJUikvbmV3dC5vOiBuZXd0LmMgTWFrZWZpbGUKKyAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDkyZTZkYTguLmNkODNkNTcgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE1LDYgKzE1LDEwIEBAIEFDX1BST0dfSU5TVEFMTAorIEFDX1BST0dfTE5fUworIEFDX1BST0dfR1JFUAorIEFDX1NZU19MQVJHRUZJTEUKKytBTl9NQUtFVkFSKFtBUl0sIFtBQ19QUk9HX0FSXSkKKytBTl9QUk9HUkFNKFthcl0sIFtBQ19QUk9HX0FSXSkKKytBQ19ERUZVTihbQUNfUFJPR19BUl0sIFtBQ19DSEVDS19UT09MKEFSLCBhciwgOildKQorK0FDX1BST0dfQVIKKyAKKyAjIEFyZSB3ZSB1c2luZyBHTlUgbGQ/CisgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL2ZpeF9TSEFSRURESVIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL2ZpeF9TSEFSRURESVIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhMWU4YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvZml4X1NIQVJFRERJUi5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQXV0aG9yOiBkZXh1YW4uY3VpQGludGVsLmNvbQorRGF0ZTogRnJpIEFwciAxNSAxNjoxNzozOSBDU1QgMjAxMQorCitUaGUgcGF0Y2ggZml4ZXMgYSBwYXJhbGxlbC1tYWtlIGlzc3VlOiB3aGVuIGdlbmVyYXRpbmcgJChTSEFSRURESVIpLyUubywgd2Ugc2hvdWxkCitlbnN1cmUgdGhlIGRpcmVjdG9yeSAke1NIQVJFRERJUn0gZXhpc3RzLgorCitXZSBuZWVkIHRvIHB1c2ggdGhlIHBhdGNoIHRvIHVwc3RyZWFtLgorCitTaWduZWQtb2ZmLWJ5OiBEZXh1YW4gQ3VpIDxkZXh1YW4uY3VpQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTEyOCwxMiArMTI4LDEyIEBAICQoU0hBUkVERElSKToKKyAKKyBzaGFyZWRsaWI6ICQoTElCTkVXVFNIKQorIAorLSQoTElCTkVXVFNIKTogJChTSEFSRURESVIpICQoU0hBUkVET0JKUykKKyskKExJQk5FV1RTSCk6ICQoU0hBUkVET0JKUykKKyAJJChDQykgLXNoYXJlZCAtbyAkKExJQk5FV1RTSCkgJChTSExJQkZMQUdTKSAkKFNIQVJFRE9CSlMpICQoTERGTEFHUykgJChMSUJTKQorIAlsbiAtZnMgJChMSUJORVdUU09OQU1FKSBsaWJuZXd0LiQoU09FWFQpCisgCWxuIC1mcyAkKExJQk5FV1RTSCkgJChMSUJORVdUU09OQU1FKQorIAorLSQoU0hBUkVERElSKS8lLm8gOiAlLmMKKyskKFNIQVJFRERJUikvJS5vIDogJS5jICQoU0hBUkVERElSKQorIAkkKENDKSAkKFNIQ0ZMQUdTKSAtYyAkKENGTEFHUykgJChDUFBGTEFHUykgLW8gJEAgJDwKKyAKKyBpbnN0YWxsOiAkKExJQk5FV1QpIGluc3RhbGwtc2ggd2hpcHRhaWwKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL3JlbW92ZV9zbGFuZ19pbmNsdWRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy9yZW1vdmVfc2xhbmdfaW5jbHVkZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjYzNGVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy9yZW1vdmVfc2xhbmdfaW5jbHVkZS5wYXRjaApAQCAtMCwwICsxLDE2IEBACisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2l0L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvTWFrZWZpbGUuaW4KKysrKyBnaXQvTWFrZWZpbGUuaW4KK0BAIC01LDcgKzUsNyBAQCBDQyA9IEBDQ0AKKyBDUFAgPSBAQ1BQQAorIENGTEFHUyA9IEBDRkxBR1NACisgTERGTEFHUyA9IEBMREZMQUdTQAorLUNQUEZMQUdTID0gLURfR05VX1NPVVJDRSAtSS91c3IvaW5jbHVkZS9zbGFuZyBAQ1BQRkxBR1NAIAorK0NQUEZMQUdTID0gLURfR05VX1NPVVJDRSBAQ1BQRkxBR1NAIAorIEdOVV9MRCA9IEBHTlVfTERACisgCisgVkVSU0lPTiA9IEBWRVJTSU9OQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0LXB5dGhvbl8wLjUyLjE4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0LXB5dGhvbl8wLjUyLjE4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YTQxYTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3QtcHl0aG9uXzAuNTIuMTguYmIKQEAgLTAsMCArMSwyOSBAQAorcmVxdWlyZSByZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dF8ke1BWfS5iYgorCitTVU1NQVJZIC49ICIgLSBweXRob24iCitERVBFTkRTID0gImxpYm5ld3QgcHl0aG9uIgorUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi1jb3JlIgorCitpbmhlcml0IHB5dGhvbm5hdGl2ZSBweXRob24tZGlyCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLXB5dGhvbiIKK0VYVFJBX09FTUFLRSArPSAiUFlUSE9OVkVSUz0ke1BZVEhPTl9ESVJ9IgorCisKK2RvX2NvbXBpbGUgKCkgeworCVZFUlNJT049IiQoc2VkIC1uICdzL15WRVJTSU9OID0gLy9wJyBNYWtlZmlsZSkiCisJb2VfcnVubWFrZSBfc25hY2suc28KK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtQWVRIT05fRElSfS9fc25hY2suc28gJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LworCWluc3RhbGwgLW0gMDY0NCBzbmFjay5weSAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vCit9CisKK1BBQ0tBR0VTX3JlbW92ZSA9ICJ3aGlwdGFpbCIKKworRklMRVNfJHtQTn0gPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vLmRlYnVnLyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3RfMC41Mi4xOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dF8wLjUyLjE4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMmU0MTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3RfMC41Mi4xOC5iYgpAQCAtMCwwICsxLDU2IEBACitTVU1NQVJZID0gIkEgbGlicmFyeSBmb3IgdGV4dCBtb2RlIHVzZXIgaW50ZXJmYWNlcyIKKworREVTQ1JJUFRJT04gPSAiTmV3dCBpcyBhIHByb2dyYW1taW5nIGxpYnJhcnkgZm9yIGNvbG9yIHRleHQgbW9kZSwgd2lkZ2V0IGJhc2VkIHVzZXIgXAoraW50ZXJmYWNlcy4gIE5ld3QgY2FuIGJlIHVzZWQgdG8gYWRkIHN0YWNrZWQgd2luZG93cywgZW50cnkgd2lkZ2V0cywgXAorY2hlY2tib3hlcywgcmFkaW8gYnV0dG9ucywgbGFiZWxzLCBwbGFpbiB0ZXh0IGZpZWxkcywgc2Nyb2xsYmFycywgXAorZXRjLiwgdG8gdGV4dCBtb2RlIHVzZXIgaW50ZXJmYWNlcy4gIFRoaXMgcGFja2FnZSBhbHNvIGNvbnRhaW5zIHRoZSBcCitzaGFyZWQgbGlicmFyeSBuZWVkZWQgYnkgcHJvZ3JhbXMgYnVpbHQgd2l0aCBuZXd0LCBhcyB3ZWxsIGFzIGEgXAorL3Vzci9iaW4vZGlhbG9nIHJlcGxhY2VtZW50IGNhbGxlZCB3aGlwdGFpbC4gIE5ld3QgaXMgYmFzZWQgb24gdGhlIFwKK3NsYW5nIGxpYnJhcnkuIgorCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbmV3dC8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIiCisKKyMgc2xhbmcgbmVlZHMgdG8gYmUgPj0gMi4yCitERVBFTkRTID0gInNsYW5nIHBvcHQiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL24vZS9uZXd0L25ld3QtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZV9zbGFuZ19pbmNsdWRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9TSEFSRURESVIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY3Jvc3NfYXIucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjg1NzIxYmVlMWEzMTg1NzA3MDRiMTlkY2YzMWQyNjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzcxYjBlNjM0ZWRlNTZhZTZhNmFjZDkxMDcyOGJiNTgzMmFjMTNkZGIwZDFkMjc5MTlkMjQ5OGRhYjcwYzkxZSIKKworUyA9ICIke1dPUktESVJ9L25ld3QtJHtQVn0iCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtdGNsIC0td2l0aG91dC1weXRob24iCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitDTEVBTkJST0tFTiA9ICIxIgorCitleHBvcnQgU1RBR0lOR19JTkNESVIKK2V4cG9ydCBTVEFHSU5HX0xJQkRJUgorCitleHBvcnQgQlVJTERfU1lTCitleHBvcnQgSE9TVF9TWVMKKworUEFDS0FHRVNfcHJlcGVuZCA9ICJ3aGlwdGFpbCAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNoIGF1dG9nZW4uc2gKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgICMgTWFrZSBzdXJlIHRoZSByZWNvbXBpbGUgaXMgT0sKKyAgICBybSAtZiAke0J9Ly5kZXBlbmQKK30KKworRklMRVNfd2hpcHRhaWwgPSAiJHtiaW5kaXJ9L3doaXB0YWlsIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3ZTYwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLmJiCkBAIC0wLDAgKzEsMTYyIEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgorIworCitTVU1NQVJZID0gIlN0YW5kYXJkIGZ1bGwtZmVhdHVyZWQgTGludXggc3lzdGVtIgorREVTQ1JJUFRJT04gPSAiUGFja2FnZSBncm91cCBicmluZ2luZyBpbiBwYWNrYWdlcyBuZWVkZWQgZm9yIGEgbW9yZSB0cmFkaXRpb25hbCBmdWxsLWZlYXR1cmVkIExpbnV4IHN5c3RlbSIKK1BSID0gInI2IgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1BBQ0tBR0VTID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1saWJzIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtdXRpbHMgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1leHRlbmRlZCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWRldi11dGlscyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLW11bHRpdXNlciBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWluaXRzY3JpcHRzIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtc3lzLXNlcnZpY2VzIFwKKyAgICAiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYWZ0ZXIgcmVuYW1lCisgICAgbmFtZW1hcCA9IHt9CisgICAgbmFtZW1hcFsicGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lIl0gPSAicGFja2FnZWdyb3VwLWNvcmUtYmFzaWMiCisgICAgbmFtZW1hcFsicGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWxpYnMiXSA9ICJwYWNrYWdlZ3JvdXAtY29yZS1iYXNpYy1saWJzIgorICAgIG5hbWVtYXBbInBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS11dGlscyJdID0gInBhY2thZ2Vncm91cC1jb3JlLWJhc2ljLXV0aWxzIgorICAgIG5hbWVtYXBbInBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1leHRlbmRlZCJdID0gInBhY2thZ2Vncm91cC1jb3JlLWJhc2ljLWV4dGVuZGVkIgorICAgIG5hbWVtYXBbInBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1kZXYtdXRpbHMiXSA9ICJwYWNrYWdlZ3JvdXAtY29yZS1kZXYtdXRpbHMiCisgICAgbmFtZW1hcFsicGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLW11bHRpdXNlciJdID0gInBhY2thZ2Vncm91cC1jb3JlLW11bHRpdXNlciIKKyAgICBuYW1lbWFwWyJwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtaW5pdHNjcmlwdHMiXSA9ICJwYWNrYWdlZ3JvdXAtY29yZS1pbml0c2NyaXB0cyIKKyAgICBuYW1lbWFwWyJwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtc3lzLXNlcnZpY2VzIl0gPSAicGFja2FnZWdyb3VwLWNvcmUtc3lzLXNlcnZpY2VzIgorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgaWYgcGtnLmVuZHN3aXRoKCctZGV2Jyk6CisgICAgICAgICAgICBtYXBwZWQgPSBuYW1lbWFwLmdldChwa2dbOi00XSwgTm9uZSkKKyAgICAgICAgICAgIGlmIG1hcHBlZDoKKyAgICAgICAgICAgICAgICBtYXBwZWQgKz0gJy1kZXYnCisgICAgICAgIGVsaWYgcGtnLmVuZHN3aXRoKCctZGJnJyk6CisgICAgICAgICAgICBtYXBwZWQgPSBuYW1lbWFwLmdldChwa2dbOi00XSwgTm9uZSkKKyAgICAgICAgICAgIGlmIG1hcHBlZDoKKyAgICAgICAgICAgICAgICBtYXBwZWQgKz0gJy1kYmcnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXBwZWQgPSBuYW1lbWFwLmdldChwa2csIE5vbmUpCisKKyAgICAgICAgaWYgbWFwcGVkOgorICAgICAgICAgICAgb2xkdGFza25hbWUgPSBtYXBwZWQucmVwbGFjZSgicGFja2FnZWdyb3VwLWNvcmUiLCAidGFzay1jb3JlIikKKyAgICAgICAgICAgIG1hcHN0ciA9ICIgJXMgJXMiICUgKG1hcHBlZCwgb2xkdGFza25hbWUpCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiUlBST1ZJREVTXyVzIiAlIHBrZywgbWFwc3RyKQorICAgICAgICAgICAgZC5hcHBlbmRWYXIoIlJSRVBMQUNFU18lcyIgJSBwa2csIG1hcHN0cikKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSQ09ORkxJQ1RTXyVzIiAlIHBrZywgbWFwc3RyKQorfQorCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZSA9ICJcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWxpYnMgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS11dGlscyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWV4dGVuZGVkIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtZGV2LXV0aWxzIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbXVsdGl1c2VyIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtaW5pdHNjcmlwdHMgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1zeXMtc2VydmljZXMgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWxpYnMgPSAiXAorICAgIGdsaWItMi4wIFwKKyAgICAiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS11dGlscyA9ICJcCisgICAgYmFzaCBcCisgICAgYWNsIFwKKyAgICBhdHRyIFwKKyAgICBiYyBcCisgICAgY29yZXV0aWxzIFwKKyAgICBjcGlvIFwKKyAgICBlMmZzcHJvZ3MgXAorICAgIGVkIFwKKyAgICBmaWxlIFwKKyAgICBmaW5kdXRpbHMgXAorICAgIGdhd2sgXAorICAgIGdtcCBcCisgICAgZ3JlcCBcCisgICAgbWFrZWRldnMgXAorICAgIG1jIFwKKyAgICBtYy1maXNoIFwKKyAgICBtYy1oZWxwZXJzIFwKKyAgICBtYy1oZWxwZXJzLXBlcmwgXAorICAgIG1jLWhlbHBlcnMtcHl0aG9uIFwKKyAgICBta3RlbXAgXAorICAgIG5jdXJzZXMgXAorICAgIG5ldC10b29scyBcCisgICAgcGF4IFwKKyAgICBwb3B0IFwKKyAgICBwcm9jcHMgXAorICAgIHBzbWlzYyBcCisgICAgc2VkIFwKKyAgICB0YXIgXAorICAgIHRpbWUgXAorICAgIHV0aWwtbGludXggXAorICAgIHpsaWIgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWV4dGVuZGVkID0gIlwKKyAgICBpcHJvdXRlMiBcCisgICAgaXB1dGlscyBcCisgICAgaXB0YWJsZXMgXAorICAgIG1vZHVsZS1pbml0LXRvb2xzIFwKKyAgICBvcGVuc3NsIFwKKyAgICAiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1kZXYtdXRpbHMgPSAiXAorICAgIGJ5YWNjIFwKKyAgICBkaWZmdXRpbHMgXAorICAgIG00IFwKKyAgICBtYWtlIFwKKyAgICBwYXRjaCBcCisgICAgIgorCitWSVJUVUFMLVJVTlRJTUVfaW5pdHNjcmlwdHMgPz0gImluaXRzY3JpcHRzIgorVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciA/PSAic3lzdmluaXQiCitWSVJUVUFMLVJVTlRJTUVfbG9naW5fbWFuYWdlciA/PSAiYnVzeWJveCIKK1ZJUlRVQUwtUlVOVElNRV9zeXNsb2cgPz0gInN5c2tsb2dkIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWluaXRzY3JpcHRzID0gIlwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9pbml0c2NyaXB0c30gXAorICAgICR7VklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlcn0gXAorICAgIGV0aHRvb2wgXAorICAgICR7VklSVFVBTC1SVU5USU1FX2xvZ2luX21hbmFnZXJ9IFwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9zeXNsb2d9IFwKKyAgICAiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1tdWx0aXVzZXIgPSAiXAorICAgIGNyYWNrbGliIFwKKyAgICBnemlwIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJ1c2VyJywgJycsIGQpfSBcCisgICAgc2hhZG93IFwKKyAgICBzdWRvIFwKKyAgICAiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1zeXMtc2VydmljZXMgPSAiXAorICAgIGF0IFwKKyAgICBiemlwMiBcCisgICAgY3JvbmllIFwKKyAgICBkYnVzIFwKKyAgICBkYnVzLWdsaWIgXAorICAgIHB5dGhvbi1kYnVzIFwKKyAgICBlbGZ1dGlscyBcCisgICAgZ3ppcCBcCisgICAgbGVzcyBcCisgICAgbGliY2FwIFwKKyAgICBsaWJldmVudCBcCisgICAgbG9ncm90YXRlIFwKKyAgICBuZnMtdXRpbHMgXAorICAgIHBjaXV0aWxzIFwKKyAgICBsaWJwY3JlIFwKKyAgICBycGNiaW5kIFwKKyAgICBzeXNmc3V0aWxzIFwKKyAgICB0Y3Atd3JhcHBlcnMgXAorICAgIHR6ZGF0YSBcCisgICAgIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWxzYi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbHNiLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlODIzODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWxzYi5iYgpAQCAtMCwwICsxLDI3OCBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKworU1VNTUFSWSA9ICJMaW51eCBTdGFuZGFyZCBCYXNlIChMU0IpIgorREVTQ1JJUFRJT04gPSAiUGFja2FnZXMgcmVxdWlyZWQgdG8gc2F0aXNmeSB0aGUgTGludXggU3RhbmRhcmQgQmFzZSAoTFNCKSBzcGVjaWZpY2F0aW9uIgorUFIgPSAicjEwIgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBsaWJ4dCwgbGlieHRzdCBhbmQgb3RoZXJzIHJlcXVpcmUgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworIworIyBXZSB3aWxsIHNraXAgcGFyc2luZyB0aGlzIHBhY2thZ2VnZW91cCBmb3Igbm9uLWdsaWJjIHN5c3RlbXMKKyMKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgaWYgZC5nZXRWYXIoJ1RDTElCQycsIFRydWUpICE9ICJnbGliYyI6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJpbmNvbXBhdGlibGUgd2l0aCAlcyBDIGxpYnJhcnkiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ1RDTElCQycsIFRydWUpKQorfQorCitQQUNLQUdFUyA9ICJcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1zeXMtZXh0ZW5kZWQgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWRiIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1wZXJsIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1weXRob24gXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXRjbCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLW1pc2MgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1jb3JlIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItcGVybCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLXB5dGhvbiBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLWRlc2t0b3AgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1ydW50aW1lLWFkZCBcCisgICAgIgorCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWxzYiA9ICJcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtc3lzLWV4dGVuZGVkIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1kYiBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtcGVybCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtcHl0aG9uIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS10Y2wgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1taXNjIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItY29yZSBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLXBlcmwgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1weXRob24gXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1kZXNrdG9wIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItcnVudGltZS1hZGQgXAorICAgICIKKworCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1zeXMtZXh0ZW5kZWQgPSAiXAorICAgIGN1cmwgXAorICAgIGRoY3AtY2xpZW50IFwKKyAgICBoZHBhcm0gXAorICAgIGxpZ2h0dHBkIFwKKyAgICBsaWJhaW8gXAorICAgIGxyenN6IFwKKyAgICBsem8gXAorICAgIG1jIFwKKyAgICBtYy1maXNoIFwKKyAgICBtYy1oZWxwZXJzIFwKKyAgICBtYy1oZWxwZXJzLXBlcmwgXAorICAgIG1jLWhlbHBlcnMtcHl0aG9uIFwKKyAgICBtZGFkbSBcCisgICAgbWluaWNvbSBcCisgICAgbmVvbiBcCisgICAgcGFydGVkIFwKKyAgICAke1BUSH0gXAorICAgIHF1b3RhIFwKKyAgICBzY3JlZW4gXAorICAgIHNldHNlcmlhbCBcCisgICAgc3lzc3RhdCBcCisgICAgdWRldi1leHRyYWNvbmYgXAorICAgIHVuemlwIFwKKyAgICB3YXRjaGRvZyBcCisgICAgd2dldCBcCisgICAgd2hpY2ggXAorICAgIHhpbmV0ZCBcCisgICAgemlwIFwKKyAgICAiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWRiID0gIlwKKyAgICBkYiBcCisgICAgc3FsaXRlMyBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1wZXJsID0gIlwKKyAgICBnZGJtIFwKKyAgICBwZXJsIFwKKyAgICB6bGliIFwKKyAgICAiCisKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtcHl0aG9uID0gIlwKKyAgICBleHBhdCBcCisgICAgZ2RibSBcCisgICAgZ21wIFwKKyAgICBuY3Vyc2VzIFwKKyAgICBvcGVuc3NsIFwKKyAgICBweXRob24gXAorICAgIHJlYWRsaW5lIFwKKyAgICB6aXAgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtdGNsID0gIlwKKyAgICB0Y2wgXAorICAgICIKKworIyBNaXNjZWxsYW5lb3VzIHBhY2thZ2VzIHJlcXVpcmVkIGJ5IExTQiAob3IgTFNCIHRlc3RzKQorUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtbHNiLW1pc2MgPSAiXAorICAgIGNoa2NvbmZpZyBcCisgICAgZ2V0dGV4dCBcCisgICAgZ2V0dGV4dC1ydW50aW1lIFwKKyAgICBncm9mZiBcCisgICAgbHNiaW5pdHNjcmlwdHMgXAorICAgIGxzYnRlc3QgXAorICAgIGxzb2YgXAorICAgIHN0cmFjZSBcCisgICAgbGlidXNiMSBcCisgICAgdXNidXRpbHMgXAorICAgIHJwbSBcCisgICAgIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1jb3JlID0gIkxTQiBDb3JlIgorREVTQ1JJUFRJT05fcGFja2FnZWdyb3VwLWNvcmUtbHNiLWNvcmUgPSAiUGFja2FnZXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBjb21tYW5kcy9saWJyYXJpZXMgXAorICAgIHNwZWNpZmllZCBpbiB0aGUgTFNCIENvcmUgc3BlY2lmaWNhdGlvbiIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1jb3JlID0gIlwKKyAgICBhdCBcCisgICAgYmFzaCBcCisgICAgYmMgXAorICAgIGJpbnV0aWxzIFwKKyAgICBiaW51dGlscy1zeW1saW5rcyBcCisgICAgY29yZXV0aWxzIFwKKyAgICBjcGlvIFwKKyAgICBjcm9uaWUgXAorICAgIGN1cHMgXAorICAgIGRpZmZ1dGlscyBcCisgICAgZWQgXAorICAgIGdsaWJjLXV0aWxzIFwKKyAgICBlbGZ1dGlscyBcCisgICAgZmlsZSBcCisgICAgZmluZHV0aWxzIFwKKyAgICBmb250Y29uZmlnLXV0aWxzIFwKKyAgICBmb29tYXRpYy1maWx0ZXJzIFwKKyAgICBnYXdrIFwKKyAgICBnaG9zdHNjcmlwdCBcCisgICAgZ3JlcCBcCisgICAgZ3ppcCBcCisgICAgbG9jYWxlZGVmIFwKKyAgICBsc2IgXAorICAgIG00IFwKKyAgICBtYWlseCBcCisgICAgbWFrZSBcCisgICAgbWFuIFwKKyAgICBtYW4tcGFnZXMgXAorICAgIG1rdGVtcCBcCisgICAgbXNtdHAgXAorICAgIHBhdGNoIFwKKyAgICBwYXggXAorICAgIHByb2NwcyBcCisgICAgcHNtaXNjIFwKKyAgICBzZWQgXAorICAgIHNoYWRvdyBcCisgICAgdGFyIFwKKyAgICB0aW1lIFwKKyAgICB1dGlsLWxpbnV4IFwKKyAgICB4ZGctdXRpbHMgXAorICAgIFwKKyAgICBnbGliYyBcCisgICAgbGliZ2NjIFwKKyAgICBsaWJwYW0gXAorICAgIGxpYnhtbDIgXAorICAgIG5jdXJzZXMgXAorICAgIHpsaWIgXAorICAgIG5zcHIgXAorICAgIGxpYnBuZzEyIFwKKyAgICBuc3MgXAorIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1wZXJsID0gIkxTQiBSdW50aW1lIExhbmd1YWdlcyAoUGVybCkiCitERVNDUklQVElPTl9wYWNrYWdlZ3JvdXAtY29yZS1sc2ItcGVybCA9ICJQYWNrYWdlcyByZXF1aXJlZCB0byBzdXBwb3J0IGxpYnJhcmllcyBcCisgICAgc3BlY2lmaWVkIGluIHRoZSBMU0IgUnVudGltZSBsYW5ndWFnZXMgc3BlY2lmaWNhdGlvbiAoUGVybCBwYXJ0cykiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1sc2ItcGVybCA9ICJcCisgICAgcGVybCBcCisgICAgcGVybC1tb2R1bGVzIFwKKyAgICBwZXJsLW1pc2MgXAorICAgIHBlcmwtcG9kIFwKKyAgICBwZXJsLWRldiBcCisgICAgcGVybC1kb2MgXAorIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1weXRob24gPSAiTFNCIFJ1bnRpbWUgTGFuZ3VhZ2VzIChQeXRob24pIgorREVTQ1JJUFRJT05fcGFja2FnZWdyb3VwLWNvcmUtbHNiLXB5dGhvbiA9ICJQYWNrYWdlcyByZXF1aXJlZCB0byBzdXBwb3J0IGxpYnJhcmllcyBcCisgICAgc3BlY2lmaWVkIGluIHRoZSBMU0IgUnVudGltZSBsYW5ndWFnZXMgc3BlY2lmaWNhdGlvbiAoUHl0aG9uIHBhcnRzKSIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1weXRob24gPSAiXAorICAgIHB5dGhvbiBcCisgICAgcHl0aG9uLW1vZHVsZXMgXAorICAgIHB5dGhvbi1taXNjIFwKKyIKKworZGVmIGdldF9saWJxdDMoZCk6CisgICAgaWYgJ2xpbnV4c3RkYmFzZScgaW4gZC5nZXRWYXIoJ0RJU1RST09WRVJSSURFUycsIEZhbHNlKSBvciAiIjoKKyAgICAgICAgaWYgJ3F0MycgaW4gZC5nZXRWYXIoJ0JCRklMRV9DT0xMRUNUSU9OUycsIEZhbHNlKSBvciAiIjoKKyAgICAgICAgICAgIHJldHVybiAnbGlicXQtbXQzJworCisgICAgICAgIGJiLndhcm4oJ1RoZSBtZXRhLXF0MyBsYXllciBzaG91bGQgYmUgYWRkZWQsIHRoaXMgbGF5ZXIgcHJvdmlkZXMgUXQgMy54JyBcCisgICAgICAgICAgICAgICAgJ2xpYnJhcmllcy4gSXRzIGludGVuZGVkIHVzZSBpcyBmb3IgcGFzc2luZyBMU0IgdGVzdHMgYXMgUXQzIGlzJyBcCisgICAgICAgICAgICAgICAgJ2EgcmVxdWlyZW1lbnQgZm9yIExTQi4nKQorICAgIHJldHVybiAnJworCitRVDRQS0dTID0gIiBcCisgICAgbGlicXRjb3JlNCBcCisgICAgbGlicXRndWk0IFwKKyAgICBsaWJxdHNxbDQgXAorICAgIGxpYnF0c3ZnNCBcCisgICAgbGlicXR4bWw0IFwKKyAgICBsaWJxdG5ldHdvcms0IFwKKyAgICBxdDQtcGx1Z2luLXNxbGRyaXZlci1zcWxpdGUgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAib3BlbmdsIiwgImxpYnF0b3BlbmdsNCIsICIiLCBkKX0gXAorICAgICIKK1FUNFBLR1NfbWlwczY0ID0gIiIKK1FUNFBLR1NfbWlwczY0bjMyID0gIiIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtY29yZS1sc2ItZGVza3RvcCA9ICJMU0IgRGVza3RvcCIKK0RFU0NSSVBUSU9OX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1kZXNrdG9wID0gIlBhY2thZ2VzIHJlcXVpcmVkIHRvIHN1cHBvcnQgbGlicmFyaWVzIFwKKyAgICBzcGVjaWZpZWQgaW4gdGhlIExTQiBEZXNrdG9wIHNwZWNpZmljYXRpb24iCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1sc2ItZGVza3RvcCA9ICJcCisgICAgbGlieHQgXAorICAgIGxpYnh4Zjg2dm0gXAorICAgIGxpYmRybSBcCisgICAgbGliZ2x1IFwKKyAgICBsaWJ4aSBcCisgICAgbGlieHRzdCBcCisgICAgbGlieDExLWxvY2FsZSBcCisgICAgeG9yZy1taW5pbWFsLWZvbnRzIFwKKyAgICBnZGstcGl4YnVmLWxvYWRlci1pY28gXAorICAgIGdkay1waXhidWYtbG9hZGVyLWJtcCBcCisgICAgZ2RrLXBpeGJ1Zi1sb2FkZXItYW5pIFwKKyAgICBnZGstcGl4YnVmLXhsaWIgXAorICAgIGxpYmVyYXRpb24tZm9udHMgXAorICAgIGd0aysgXAorICAgIGF0ayBcCisgICAgbGliYXNvdW5kIFwKKyAgICAke1FUNFBLR1N9IFwKKyAgICAke0BnZXRfbGlicXQzKGQpfSBcCisiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1ydW50aW1lLWFkZCA9ICJcCisgICAgbGRkIFwKKyAgICBwYW0tcGx1Z2luLXdoZWVsIFwKKyAgICBlMmZzcHJvZ3MtbWtlMmZzIFwKKyAgICBta2ZvbnRkaXIgXAorICAgIGxpYnVyaS1wZXJsIFwKKyAgICBsaWJ4bWwtcGFyc2VyLXBlcmwgXAorICAgIGxpYnhtbC1wZXJsIFwKKyAgICBsaWJ4bWwtc2F4LXBlcmwgXAorICAgIGdsaWJjLWxvY2FsZWRhdGFzIFwKKyAgICBnbGliYy1nY29udnMgXAorICAgIGdsaWJjLWNoYXJtYXBzIFwKKyAgICBnbGliYy1iaW5hcmllcyBcCisgICAgZ2xpYmMtbG9jYWxlZGF0YS1wb3NpeCBcCisgICAgZ2xpYmMtZXh0cmEtbnNzIFwKKyAgICBnbGliYy1wY3Byb2ZpbGUgXAorICAgIGxpYmNsYXNzLWlzYS1wZXJsIFwKKyAgICBsaWJlbnYtcGVybCBcCisgICAgbGliZHVtcHZhbHVlLXBlcmwgXAorICAgIGxpYmZpbGUtY2hlY2t0cmVlLXBlcmwgXAorICAgIGxpYmkxOG4tY29sbGF0ZS1wZXJsIFwKKyAgICBsaWJwb2QtcGxhaW5lci1wZXJsIFwKKyIKKworUFRIID0gInB0aCIKK1BUSF9saWJjLXVjbGliYyA9ICIiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vOTlfcGFtIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS85OV9wYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdlOTkwZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vOTlfcGFtCkBAIC0wLDAgKzEgQEAKK2Qgcm9vdCByb290IDA3NTUgL3Zhci9ydW4vc2VwZXJtaXQgbm9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9jcnlwdF9jb25maWd1cmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2NyeXB0X2NvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWM4MmE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9jcnlwdF9jb25maWd1cmUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVGhpcyBwYXRjaCBmaXhlcyBhIGNhc2Ugd2hlcmUgaXQgZmluZCBjcnlwdCBkZWZpbmVkIGluIGxpYmMgKG11c2wpIGJ1dAorbm90IGluIHNwZWNpZmllZCBsaWJyYXJpZXMgdGhlbiBpdCBlbmRzIHVwIGFzc2lnbmluZworCitMSUJDUllQVD0iLWwiIHdoaWNoIHRoZW4gZ29lcyBpbnRvIG1ha2VmaWxlIGNhdXNlIGFsbCBzb3J0IG9mIHByb2JsZW1zCitlLmcuCisKK2xkOiBjYW5ub3QgZmluZCAtbC1tMzIKK3wgY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisKK1RoZSByZWFzb24gaXMgdGhhdCAtbCBhcHBlYXJzIG9uIGNvbW1hbmRsaW5lIHdpdGggb3V0IGFueSBsaWJyYXJ5IGFuZAorY29tcGlsZXIgdHJlYXRzIHRoZSBuZXh0IGFyZ3VtZW50IGFzIGxpYnJhcnkgbmFtZSB3aGF0ZXZlciBpdCBpcy4KKworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBMaW51eC1QQU0tMS4xLjYvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gTGludXgtUEFNLTEuMS42Lm9yZy9jb25maWd1cmUuYWMKKysrKyBMaW51eC1QQU0tMS4xLjYvY29uZmlndXJlLmFjCitAQCAtNDAwLDcgKzQwMCw5IEBAIEFTX0lGKFt0ZXN0ICJ4JGFjX2N2X2hlYWRlcl94Y3J5cHRfaCIgPQorICAgW2NyeXB0X2xpYnM9ImNyeXB0Il0pCisgCisgQkFDS1VQX0xJQlM9JExJQlMKKy1BQ19TRUFSQ0hfTElCUyhbY3J5cHRdLFskY3J5cHRfbGlic10sIExJQkNSWVBUPSItbCRhY19saWIiLCBMSUJDUllQVD0iIikKKytBQ19TRUFSQ0hfTElCUyhbY3J5cHRdLFskY3J5cHRfbGlic10sCisrCSAgICAgICBbdGVzdCAiJGFjX2N2X3NlYXJjaF9jcnlwdCIgPSAibm9uZSByZXF1aXJlZCIgfHwKKysJCUxJQkNSWVBUPSIkYWNfY3Zfc2VhcmNoX2NyeXB0Il0pCisgQUNfQ0hFQ0tfRlVOQ1MoY3J5cHRfciBjcnlwdF9nZW5zYWx0X3IpCisgTElCUz0kQkFDS1VQX0xJQlMKKyBBQ19TVUJTVChMSUJDUllQVCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vZml4c2VwYnVpbGQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2ZpeHNlcGJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOWMzYjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2ZpeHNlcGJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0ZpeCB0aGUgYnVpbGQgZXJyb3Igd2hlbiBhIHNlcGFyYXRlIGJ1aWxkIGRpcmVjdG9yeSBpcyB1c2VkOgorCitNYWtpbmcgaW5zdGFsbCBpbiB4dGVzdHNtYWtlWzFdOiBFbnRlcmluZyBkaXJlY3RvcnkgYC9tZWRpYS9idWlsZDEvcG9reS9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2xpYnBhbS8xLjEuNi1yMi9idWlsZC94dGVzdHMnL3Vzci9iaW4vaW5zdGFsbCAtYyAtZCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9saWJwYW0vMS4xLjYtcjIvaW1hZ2UvdXNyL3NoYXJlL0xpbnV4LVBBTS94dGVzdHNmb3IgZmlsZSBpbiBydW4teHRlc3RzLnNoIHRzdC1wYW1fZGlzcGF0Y2gxLnBhbWQgdHN0LXBhbV9kaXNwYXRjaDIucGFtZCB0c3QtcGFtX2Rpc3BhdGNoMy5wYW1kIHRzdC1wYW1fZGlzcGF0Y2g0LnBhbWQgdHN0LXBhbV9kaXNwYXRjaDUucGFtZCB0c3QtcGFtX2NyYWNrbGliMS5wYW1kIHRzdC1wYW1fY3JhY2tsaWIyLnBhbWQgdHN0LXBhbV91bml4MS5wYW1kIHRzdC1wYW1fdW5peDIucGFtZCB0c3QtcGFtX3VuaXgzLnBhbWQgdHN0LXBhbV91bml4NC5wYW1kIHRzdC1wYW1fdW5peDEuc2ggdHN0LXBhbV91bml4Mi5zaCB0c3QtcGFtX3VuaXgzLnNoIHRzdC1wYW1fdW5peDQuc2ggYWNjZXNzLmNvbmYgdHN0LXBhbV9hY2Nlc3MxLnBhbWQgdHN0LXBhbV9hY2Nlc3MxLnNoIHRzdC1wYW1fYWNjZXNzMi5wYW1kIHRzdC1wYW1fYWNjZXNzMi5zaCB0c3QtcGFtX2FjY2VzczMucGFtZCB0c3QtcGFtX2FjY2VzczMuc2ggdHN0LXBhbV9hY2Nlc3M0LnBhbWQgdHN0LXBhbV9hY2Nlc3M0LnNoIGxpbWl0cy5jb25mIHRzdC1wYW1fbGltaXRzMS5wYW1kIHRzdC1wYW1fbGltaXRzMS5zaCB0c3QtcGFtX3N1Y2NlZWRfaWYxLnBhbWQgdHN0LXBhbV9zdWNjZWVkX2lmMS5zaCBncm91cC5jb25mIHRzdC1wYW1fZ3JvdXAxLnBhbWQgdHN0LXBhbV9ncm91cDEuc2ggdHN0LXBhbV9hdXRoZmFpbC5wYW1kIHRzdC1wYW1fYXV0aHN1Y2NlZWQucGFtZCB0c3QtcGFtX3N1YnN0YWNrMS5wYW1kIHRzdC1wYW1fc3Vic3RhY2sxYS5wYW1kIHRzdC1wYW1fc3Vic3RhY2sxLnNoIHRzdC1wYW1fc3Vic3RhY2syLnBhbWQgdHN0LXBhbV9zdWJzdGFjazJhLnBhbWQgdHN0LXBhbV9zdWJzdGFjazIuc2ggdHN0LXBhbV9zdWJzdGFjazMucGFtZCB0c3QtcGFtX3N1YnN0YWNrM2EucGFtZCB0c3QtcGFtX3N1YnN0YWNrMy5zaCB0c3QtcGFtX3N1YnN0YWNrNC5wYW1kIHRzdC1wYW1fc3Vic3RhY2s0YS5wYW1kIHRzdC1wYW1fc3Vic3RhY2s0LnNoIHRzdC1wYW1fc3Vic3RhY2s1LnBhbWQgdHN0LXBhbV9zdWJzdGFjazVhLnBhbWQgdHN0LXBhbV9zdWJzdGFjazUuc2ggdHN0LXBhbV9hc3NlbWJsZV9saW5lMS5wYW1kIHRzdC1wYW1fYXNzZW1ibGVfbGluZTEuc2ggdHN0LXBhbV9wd2hpc3RvcnkxLnBhbWQgdHN0LXBhbV9wd2hpc3RvcnkxLnNoIHRzdC1wYW1fdGltZTEucGFtZCB0aW1lLmNvbmYgOyBkbyBcL3Vzci9iaW4vaW5zdGFsbCAtYyAkZmlsZSAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9saWJwYW0vMS4xLjYtcjIvaW1hZ2UvdXNyL3NoYXJlL0xpbnV4LVBBTS94dGVzdHMgOyBcCWRvbmUKKy91c3IvYmluL2luc3RhbGw6IGNhbm5vdCBzdGF0IGBydW4teHRlc3RzLnNoJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorL3Vzci9iaW4vaW5zdGFsbDogY2Fubm90IHN0YXQgYHRzdC1wYW1fZGlzcGF0Y2gxLnBhbWQnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisvdXNyL2Jpbi9pbnN0YWxsOiBjYW5ub3Qgc3RhdCBgdHN0LXBhbV9kaXNwYXRjaDIucGFtZCc6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTMvMDMvMjEKKworSW5kZXg6IExpbnV4LVBBTS0xLjEuNi94dGVzdHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBMaW51eC1QQU0tMS4xLjYub3JpZy94dGVzdHMvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAxMjoyNjozMC4zNjAyNjYwMDAgKzAwMDAKKysrKyBMaW51eC1QQU0tMS4xLjYveHRlc3RzL01ha2VmaWxlLmFtCTIwMTMtMDMtMjEgMTE6Mzk6NTguNTU3MTY2NjUwICswMDAwCitAQCAtNTksNyArNTksNyBAQAorIGluc3RhbGxfeHRlc3RzOgorIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKHBrZ2RhdGFkaXIpL3h0ZXN0cworIAlmb3IgZmlsZSBpbiAkKEVYVFJBX0RJU1QpIDsgZG8gXAorLQkJJChJTlNUQUxMKSAkJGZpbGUgJChERVNURElSKSQocGtnZGF0YWRpcikveHRlc3RzIDsgXAorKwkJJChJTlNUQUxMKSAkKHNyY2RpcikvJCRmaWxlICQoREVTVERJUikkKHBrZ2RhdGFkaXIpL3h0ZXN0cyA7IFwKKyAJZG9uZQorIAlmb3IgZmlsZSBpbiAkKFhURVNUUyk7IGRvIFwKKyAJCSQoSU5TVEFMTCkgLmxpYnMvJCRmaWxlICQoREVTVERJUikkKHBrZ2RhdGFkaXIpL3h0ZXN0cyA7IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vbGlicGFtLXh0ZXN0cy1yZW1vdmUtYmFzaC1kZXBlbmRlbmN5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9saWJwYW0teHRlc3RzLXJlbW92ZS1iYXNoLWRlcGVuZGVuY3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgwMDI5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vbGlicGFtLXh0ZXN0cy1yZW1vdmUtYmFzaC1kZXBlbmRlbmN5LnBhdGNoCkBAIC0wLDAgKzEsMjI2IEBACitGcm9tIDU1NTQwN2ZmNmUyZjc0MmRmNjRhZTkzODU5ZjE0YTBmYzEzOTc4MjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMTIgU2VwIDIwMTQgMDU6MzU6MDUgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gbGlicGFtL3h0ZXN0czogcmVtb3ZlIGJhc2ggZGVwZW5kZW5jeQorCitUaGVyZSdzIG5vdCBiYXNoIHNwZWNpZmljIHN5bnRheCBpbiB0aGUgeHRlc3Qgc2NyaXB0czoKKworICAjIGFmdGVyIGJlbG93IHBhdGNoZXMgYXBwbGllZDoKKyAgJCBjZCBMaW51eC1QQU0tMS4xLjYveHRlc3RzCisgICQgY2hlY2tiYXNoaXNtcyAqLnNoCisgIE5vIG91dHB1dAorCitKdXN0IHJlbW92ZSB0aGUgcnVudGltZSBkZXBlbmRlbmN5IHRvIGJhc2guCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHh0ZXN0cy9ydW4teHRlc3RzLnNoICAgICAgICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX2FjY2VzczEuc2ggICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX2FjY2VzczIuc2ggICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX2FjY2VzczMuc2ggICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX2FjY2VzczQuc2ggICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX2Fzc2VtYmxlX2xpbmUxLnNoIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX2dyb3VwMS5zaCAgICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX2xpbWl0czEuc2ggICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3B3aGlzdG9yeTEuc2ggICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMS5zaCAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMi5zaCAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMy5zaCAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNC5zaCAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNS5zaCAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3N1Y2NlZWRfaWYxLnNoICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3VuaXgxLnNoICAgICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3VuaXgyLnNoICAgICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3VuaXgzLnNoICAgICAgICAgIHwgICAgMiArLQorIHh0ZXN0cy90c3QtcGFtX3VuaXg0LnNoICAgICAgICAgIHwgICAgMiArLQorIDE5IGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEveHRlc3RzL3J1bi14dGVzdHMuc2ggYi94dGVzdHMvcnVuLXh0ZXN0cy5zaAoraW5kZXggM2E4OTA1Ny4uMWNmODY4NCAxMDA3NTUKKy0tLSBhL3h0ZXN0cy9ydW4teHRlc3RzLnNoCisrKysgYi94dGVzdHMvcnVuLXh0ZXN0cy5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyBTUkNESVI9JDEKKyBzaGlmdCAxCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fYWNjZXNzMS5zaCBiL3h0ZXN0cy90c3QtcGFtX2FjY2VzczEuc2gKK2luZGV4IDE4MGQyNTYuLjcwNTIxZDIgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9hY2Nlc3MxLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9hY2Nlc3MxLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIC91c3Ivc2Jpbi9ncm91cGFkZCB0c3RwYW1hY2Nlc3MKKyAvdXNyL3NiaW4vdXNlcmFkZCAtRyB0c3RwYW1hY2Nlc3MgLXAgJyEhJyB0c3RwYW1hY2Nlc3MxCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fYWNjZXNzMi5zaCBiL3h0ZXN0cy90c3QtcGFtX2FjY2VzczIuc2gKK2luZGV4IDBhMzAyNzUuLjdlM2U2MGYgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9hY2Nlc3MyLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9hY2Nlc3MyLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIC91c3Ivc2Jpbi9ncm91cGFkZCB0c3RwYW1hY2Nlc3MKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAnISEnIHRzdHBhbWFjY2VzczIKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9hY2Nlc3MzLnNoIGIveHRlc3RzL3RzdC1wYW1fYWNjZXNzMy5zaAoraW5kZXggMzQ4ZTBjMy4uMzYzMGUyZSAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX2FjY2VzczMuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX2FjY2VzczMuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgJyEhJyB0c3RwYW1hY2Nlc3MzCisgLi90c3QtcGFtX2FjY2VzczMKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9hY2Nlc3M0LnNoIGIveHRlc3RzL3RzdC1wYW1fYWNjZXNzNC5zaAoraW5kZXggNjFlN2I0NC4uNDUzOGRmNCAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX2FjY2VzczQuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX2FjY2VzczQuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgJyEhJyB0c3RwYW1hY2Nlc3M0CisgLi90c3QtcGFtX2FjY2VzczQKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9hc3NlbWJsZV9saW5lMS5zaCBiL3h0ZXN0cy90c3QtcGFtX2Fzc2VtYmxlX2xpbmUxLnNoCitpbmRleCAyNDhkNDdlLi5kYzJhNjc1IDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fYXNzZW1ibGVfbGluZTEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX2Fzc2VtYmxlX2xpbmUxLnNoCitAQCAtMSwzICsxLDMgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIGV4ZWMgLi90c3QtcGFtX2F1dGhmYWlsIHRzdC1wYW1fYXNzZW1ibGVfbGluZTEKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9ncm91cDEuc2ggYi94dGVzdHMvdHN0LXBhbV9ncm91cDEuc2gKK2luZGV4IGI3NjM3N2YuLjQ0ZmFjYTkgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9ncm91cDEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX2dyb3VwMS5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAvdXNyL3NiaW4vZ3JvdXBhZGQgdHN0cGFtZ3JwZworIC91c3Ivc2Jpbi91c2VyYWRkIC1wICchIScgdHN0cGFtZ3JwCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fbGltaXRzMS5zaCBiL3h0ZXN0cy90c3QtcGFtX2xpbWl0czEuc2gKK2luZGV4IDRmYWE4MjIuLjMyYzAyMWQgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9saW1pdHMxLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9saW1pdHMxLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIC91c3Ivc2Jpbi91c2VyYWRkIC1wICchIScgdHN0cGFtbGltaXRzCisgLi90c3QtcGFtX2xpbWl0czEKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9wd2hpc3RvcnkxLnNoIGIveHRlc3RzL3RzdC1wYW1fcHdoaXN0b3J5MS5zaAoraW5kZXggZGRiM2I4Yi4uMGYyMTJlMiAxMDA2NDQKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3B3aGlzdG9yeTEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3B3aGlzdG9yeTEuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL3VzZXJhZGQgdHN0cGFtcHdoaXN0b3J5CisgLi90c3QtcGFtX3B3aGlzdG9yeTEKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazEuc2ggYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazEuc2gKK2luZGV4IDUyNjAxNzUuLmYxYjcyYTcgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMS5zaAorQEAgLTEsMyArMSwzIEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyBleGVjIC4vdHN0LXBhbV9hdXRoZmFpbCB0c3QtcGFtX3N1YnN0YWNrMQorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMi5zaCBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMi5zaAoraW5kZXggYzAyZjU5Ny4uMzgwNGZhNyAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMi5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2syLnNoCitAQCAtMSwzICsxLDMgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIGV4ZWMgLi90c3QtcGFtX2F1dGhzdWNjZWVkIHRzdC1wYW1fc3Vic3RhY2syCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2szLnNoIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2szLnNoCitpbmRleCAwZTU3MmFhLi5hYTQ4ZThlIDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2szLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazMuc2gKK0BAIC0xLDMgKzEsMyBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgZXhlYyAuL3RzdC1wYW1fYXV0aHN1Y2NlZWQgdHN0LXBhbV9zdWJzdGFjazMKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazQuc2ggYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazQuc2gKK2luZGV4IGEzZWYwOGEuLjk1OGEwN2EgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazQuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNC5zaAorQEAgLTEsMyArMSwzIEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyBleGVjIC4vdHN0LXBhbV9hdXRoc3VjY2VlZCB0c3QtcGFtX3N1YnN0YWNrNAorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNS5zaCBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNS5zaAoraW5kZXggZTI3MTRmZC4uN2UwZGE3NCAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s1LnNoCitAQCAtMSwzICsxLDMgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIGV4ZWMgLi90c3QtcGFtX2F1dGhmYWlsIHRzdC1wYW1fc3Vic3RhY2s1CitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fc3VjY2VlZF9pZjEuc2ggYi94dGVzdHMvdHN0LXBhbV9zdWNjZWVkX2lmMS5zaAoraW5kZXggYTY0M2IyZS4uNThlNTdiNCAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3N1Y2NlZWRfaWYxLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9zdWNjZWVkX2lmMS5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAnISEnIHRzdHBhbXRlc3QKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAnISEnIHBhbXRlc3QKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV91bml4MS5zaCBiL3h0ZXN0cy90c3QtcGFtX3VuaXgxLnNoCitpbmRleCBmNzViZDg0Li43MmRlYWMwIDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fdW5peDEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3VuaXgxLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIC91c3Ivc2Jpbi91c2VyYWRkIC1wICchIScgdHN0cGFtdW5peAorIC4vdHN0LXBhbV91bml4MQorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3VuaXgyLnNoIGIveHRlc3RzL3RzdC1wYW1fdW5peDIuc2gKK2luZGV4IDcwOTMxNTUuLmMwNGQ2ZTYgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV91bml4Mi5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fdW5peDIuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgIyBwYW11bml4MCA9IDBhWEtaenRBLmQxS1kKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAwYVhLWnp0QS5kMUtZICB0c3RwYW11bml4CitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fdW5peDMuc2ggYi94dGVzdHMvdHN0LXBhbV91bml4My5zaAoraW5kZXggZWY0YTA3Yy4uYjUyZGIyYiAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3VuaXgzLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV91bml4My5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAjIHBhbXVuaXgwMSA9IDBhWEtaenRBLmQxS1lJdUZYQXJtZDJqVQorIC91c3Ivc2Jpbi91c2VyYWRkIC1wIDBhWEtaenRBLmQxS1lJdUZYQXJtZDJqVSB0c3RwYW11bml4CitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fdW5peDQuc2ggYi94dGVzdHMvdHN0LXBhbV91bml4NC5zaAoraW5kZXggNzg3YzJmOS4uZTc5NzZmZCAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3VuaXg0LnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV91bml4NC5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAjIHBhbXVuaXgwMSA9IDBhWEtaenRBLmQxS1lJdUZYQXJtZDJqVQorIC91c3Ivc2Jpbi91c2VyYWRkIC1wIDBhWEtaenRBLmQxS1lJdUZYQXJtZDJqVSB0c3RwYW11bml4CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9saWJwYW0teHRlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9saWJwYW0teHRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNjg3NDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2xpYnBhbS14dGVzdHMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorVGhpcyBwYXRjaCBpcyB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBzdWIgcGFja2FnZSBsaWJwYW0teHRlc3RzIHRvIGRvIG1vcmUgY2hlY2tzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FuZyBLYWkgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0gTGludXgtUEFNLTEuMS40L3h0ZXN0cy9NYWtlZmlsZS5hbS5vcmlnCTIwMTEtMDctMTkgMTc6MDA6MDkuNjE5OTgwMDAxICswODAwCisrKysgTGludXgtUEFNLTEuMS40L3h0ZXN0cy9NYWtlZmlsZS5hbQkyMDExLTA3LTE5IDE2OjU0OjAwLjIyOTk3OTk5OCArMDgwMAorQEAgLTcsNyArNyw3IEBACisgQU1fTERGTEFHUyA9IC1MJCh0b3BfYnVpbGRkaXIpL2xpYnBhbSAtbHBhbSBcCisgCS1MJCh0b3BfYnVpbGRkaXIpL2xpYnBhbV9taXNjIC1scGFtX21pc2MKKyAKKy1DTEVBTkZJTEVTID0gKn4gJChYVEVTVFMpCisrQ0xFQU5GSUxFUyA9ICp+CisgCisgRVhUUkFfRElTVCA9IHJ1bi14dGVzdHMuc2ggdHN0LXBhbV9kaXNwYXRjaDEucGFtZCB0c3QtcGFtX2Rpc3BhdGNoMi5wYW1kIFwKKyAJdHN0LXBhbV9kaXNwYXRjaDMucGFtZCB0c3QtcGFtX2Rpc3BhdGNoNC5wYW1kIFwKK0BAIC01MSwzICs1MSwxOCBAQAorIAorIHh0ZXN0czogJChYVEVTVFMpIHJ1bi14dGVzdHMuc2gKKyAJIiQoc3JjZGlyKSIvcnVuLXh0ZXN0cy5zaCAiJChzcmNkaXIpIiAke1hURVNUU30gJHtOT1NSQ1RFU1RTfQorKworK2FsbDogJChYVEVTVFMpCisrCisraW5zdGFsbDogaW5zdGFsbF94dGVzdHMKKysKKytpbnN0YWxsX3h0ZXN0czoKKysJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChwa2dkYXRhZGlyKS94dGVzdHMKKysJZm9yIGZpbGUgaW4gJChFWFRSQV9ESVNUKSA7IGRvIFwKKysJCSQoSU5TVEFMTCkgJCRmaWxlICQoREVTVERJUikkKHBrZ2RhdGFkaXIpL3h0ZXN0cyA7IFwKKysJZG9uZQorKwlmb3IgZmlsZSBpbiAkKFhURVNUUyk7IGRvIFwKKysJCSQoSU5TVEFMTCkgLmxpYnMvJCRmaWxlICQoREVTVERJUikkKHBrZ2RhdGFkaXIpL3h0ZXN0cyA7IFwKKysJZG9uZQorKworKy5QSE9OWTogYWxsIGluc3RhbGxfeHRlc3RzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS1uby1pbm5ldGdyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tbm8taW5uZXRnci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTU1MWFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tbm8taW5uZXRnci5wYXRjaApAQCAtMCwwICsxLDk3IEBACitpbm5ldGdyIG1heSBub3QgYmUgdGhlcmUgc28gbWFrZSBzdXJlIHRoYXQgd2hlbiBpbm5ldGdyIGlzIG5vdCBwcmVzZW50Cit0aGVuIHdlIGluZm9ybSBhYm91dCBpdCBhbmQgbm90IHVzZSBpdC4KKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitJbmRleDogTGludXgtUEFNLTEuMS4zL21vZHVsZXMvcGFtX2dyb3VwL3BhbV9ncm91cC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gTGludXgtUEFNLTEuMS4zLm9yaWcvbW9kdWxlcy9wYW1fZ3JvdXAvcGFtX2dyb3VwLmMKKysrKyBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fZ3JvdXAvcGFtX2dyb3VwLmMKK0BAIC02NTksNyArNjU5LDExIEBAIHN0YXRpYyBpbnQgY2hlY2tfYWNjb3VudChwYW1faGFuZGxlX3QgKnAKKyAJfQorIAkvKiBJZiBidWZmZXIgc3RhcnRzIHdpdGggQCwgd2UgYXJlIHVzaW5nIG5ldGdyb3VwcyAqLworIAlpZiAoYnVmZmVyWzBdID09ICdAJykKKy0JICBnb29kICY9IGlubmV0Z3IgKCZidWZmZXJbMV0sIE5VTEwsIHVzZXIsIE5VTEwpOworKyNpZmRlZiBIQVZFX0lOTkVUR1IKKysgICAgICAgICAgIGdvb2QgJj0gaW5uZXRnciAoJmJ1ZmZlclsxXSwgTlVMTCwgdXNlciwgTlVMTCk7CisrI2Vsc2UKKysgICAgICAgICAgIHBhbV9zeXNsb2cgKHBhbWgsIExPR19FUlIsICJwYW1fZ3JvdXAgZG9lcyBub3QgaGF2ZSBuZXRncm91cCBzdXBwb3J0Iik7CisrI2VuZGlmCisgCS8qIG90aGVyd2lzZSwgaWYgdGhlIGJ1ZmZlciBzdGFydHMgd2l0aCAlLCBpdCdzIGEgVU5JWCBncm91cCAqLworIAllbHNlIGlmIChidWZmZXJbMF0gPT0gJyUnKQorICAgICAgICAgICBnb29kICY9IHBhbV9tb2R1dGlsX3VzZXJfaW5fZ3JvdXBfbmFtX25hbShwYW1oLCB1c2VyLCAmYnVmZmVyWzFdKTsKK0luZGV4OiBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fdGltZS9wYW1fdGltZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gTGludXgtUEFNLTEuMS4zLm9yaWcvbW9kdWxlcy9wYW1fdGltZS9wYW1fdGltZS5jCisrKysgTGludXgtUEFNLTEuMS4zL21vZHVsZXMvcGFtX3RpbWUvcGFtX3RpbWUuYworQEAgLTU1NSw5ICs1NTUsMTMgQEAgY2hlY2tfYWNjb3VudChwYW1faGFuZGxlX3QgKnBhbWgsIGNvbnN0CisgCSAgfQorIAkgIC8qIElmIGJ1ZmZlciBzdGFydHMgd2l0aCBALCB3ZSBhcmUgdXNpbmcgbmV0Z3JvdXBzICovCisgCSAgaWYgKGJ1ZmZlclswXSA9PSAnQCcpCistCSAgICBnb29kICY9IGlubmV0Z3IgKCZidWZmZXJbMV0sIE5VTEwsIHVzZXIsIE5VTEwpOworKyNpZmRlZiBIQVZFX0lOTkVUR1IKKysJICAgICAgIGdvb2QgJj0gaW5uZXRnciAoJmJ1ZmZlclsxXSwgTlVMTCwgdXNlciwgTlVMTCk7CisrI2Vsc2UKKysJICAgICAgIHBhbV9zeXNsb2cgKHBhbWgsIExPR19FUlIsICJwYW1fdGltZSBkb2VzIG5vdCBoYXZlIG5ldGdyb3VwIHN1cHBvcnQiKTsKKysjZW5kaWYKKyAJICBlbHNlCistCSAgICBnb29kICY9IGxvZ2ljX2ZpZWxkKHBhbWgsIHVzZXIsIGJ1ZmZlciwgY291bnQsIGlzX3NhbWUpOworKwkgICAgICAgZ29vZCAmPSBsb2dpY19maWVsZChwYW1oLCB1c2VyLCBidWZmZXIsIGNvdW50LCBpc19zYW1lKTsKKyAJICBEKCgid2l0aCB1c2VyOiAlcyIsIGdvb2QgPyAicGFzc2VzIjoiZmFpbHMiICkpOworIAorIAkgIC8qIGhlcmUgd2UgZ2V0IHRoZSB0aW1lIGZpZWxkICovCitJbmRleDogTGludXgtUEFNLTEuMS4zL21vZHVsZXMvcGFtX3N1Y2NlZWRfaWYvcGFtX3N1Y2NlZWRfaWYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIExpbnV4LVBBTS0xLjEuMy5vcmlnL21vZHVsZXMvcGFtX3N1Y2NlZWRfaWYvcGFtX3N1Y2NlZWRfaWYuYworKysrIExpbnV4LVBBTS0xLjEuMy9tb2R1bGVzL3BhbV9zdWNjZWVkX2lmL3BhbV9zdWNjZWVkX2lmLmMKK0BAIC0yMzEsMTggKzIzMSwyNyBAQCBldmFsdWF0ZV9ub3Rpbmdyb3VwKHBhbV9oYW5kbGVfdCAqcGFtaCwKKyB9CisgLyogUmV0dXJuIFBBTV9TVUNDRVNTIGlmIHRoZSAoaG9zdCx1c2VyKSBpcyBpbiB0aGUgbmV0Z3JvdXAuICovCisgc3RhdGljIGludAorLWV2YWx1YXRlX2lubmV0Z3IoY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqZ3JvdXApCisrZXZhbHVhdGVfaW5uZXRncihjb25zdCBwYW1faGFuZGxlX3QqIHBhbWgsIGNvbnN0IGNoYXIgKmhvc3QsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKmdyb3VwKQorIHsKKysjaWZkZWYgSEFWRV9JTk5FVEdSCisgCWlmIChpbm5ldGdyKGdyb3VwLCBob3N0LCB1c2VyLCBOVUxMKSA9PSAxKQorIAkJcmV0dXJuIFBBTV9TVUNDRVNTOworKyNlbHNlCisrICAgICAgICBwYW1fc3lzbG9nIChwYW1oLCBMT0dfRVJSLCAicGFtX3N1Y2NlZWRfaWYgZG9lcyBub3QgaGF2ZSBuZXRncm91cCBzdXBwb3J0Iik7CisrI2VuZGlmCisrCisgCXJldHVybiBQQU1fQVVUSF9FUlI7CisgfQorIC8qIFJldHVybiBQQU1fU1VDQ0VTUyBpZiB0aGUgKGhvc3QsdXNlcikgaXMgTk9UIGluIHRoZSBuZXRncm91cC4gKi8KKyBzdGF0aWMgaW50CistZXZhbHVhdGVfbm90aW5uZXRncihjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpncm91cCkKKytldmFsdWF0ZV9ub3Rpbm5ldGdyKGNvbnN0IHBhbV9oYW5kbGVfdCogcGFtaCwgY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqZ3JvdXApCisgeworKyNpZmRlZiBIQVZFX0lOTkVUR1IKKyAJaWYgKGlubmV0Z3IoZ3JvdXAsIGhvc3QsIHVzZXIsIE5VTEwpID09IDApCisgCQlyZXR1cm4gUEFNX1NVQ0NFU1M7CisrI2Vsc2UKKysJcGFtX3N5c2xvZyAocGFtaCwgTE9HX0VSUiwgInBhbV9zdWNjZWVkX2lmIGRvZXMgbm90IGhhdmUgbmV0Z3JvdXAgc3VwcG9ydCIpOworKyNlbmRpZgorIAlyZXR1cm4gUEFNX0FVVEhfRVJSOworIH0KKyAKK0BAIC0zNjEsMTQgKzM3MCwxNCBAQCBldmFsdWF0ZShwYW1faGFuZGxlX3QgKnBhbWgsIGludCBkZWJ1ZywKKyAJCWNvbnN0IHZvaWQgKnJob3N0OworIAkJaWYgKHBhbV9nZXRfaXRlbShwYW1oLCBQQU1fUkhPU1QsICZyaG9zdCkgIT0gUEFNX1NVQ0NFU1MpCisgCQkJcmhvc3QgPSBOVUxMOworLQkJcmV0dXJuIGV2YWx1YXRlX2lubmV0Z3Iocmhvc3QsIHVzZXIsIHJpZ2h0KTsKKysJCXJldHVybiBldmFsdWF0ZV9pbm5ldGdyKHBhbWgsIHJob3N0LCB1c2VyLCByaWdodCk7CisgCX0KKyAJLyogKFJob3N0LCB1c2VyKSBpcyBub3QgaW4gdGhpcyBncm91cC4gKi8KKyAJaWYgKHN0cmNhc2VjbXAocXVhbCwgIm5vdGlubmV0Z3IiKSA9PSAwKSB7CisgCQljb25zdCB2b2lkICpyaG9zdDsKKyAJCWlmIChwYW1fZ2V0X2l0ZW0ocGFtaCwgUEFNX1JIT1NULCAmcmhvc3QpICE9IFBBTV9TVUNDRVNTKQorIAkJCXJob3N0ID0gTlVMTDsKKy0JCXJldHVybiBldmFsdWF0ZV9ub3Rpbm5ldGdyKHJob3N0LCB1c2VyLCByaWdodCk7CisrCQlyZXR1cm4gZXZhbHVhdGVfbm90aW5uZXRncihwYW1oLCByaG9zdCwgdXNlciwgcmlnaHQpOworIAl9CisgCS8qIEZhaWwgY2xvc2VkLiAqLworIAlyZXR1cm4gUEFNX1NFUlZJQ0VfRVJSOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tc2VjdXJpdHktYWJzdHJhY3Qtc2VjdXJldHR5LWhhbmRsaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tc2VjdXJpdHktYWJzdHJhY3Qtc2VjdXJldHR5LWhhbmRsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxODM0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS1zZWN1cml0eS1hYnN0cmFjdC1zZWN1cmV0dHktaGFuZGxpbmcucGF0Y2gKQEAgLTAsMCArMSwyMDAgQEAKK0Rlc2NyaXB0aW9uOiBleHRyYWN0IHRoZSBzZWN1cmV0dHkgbG9naWMgZm9yIHVzZSB3aXRoIHRoZSAibnVsbG9rX3NlY3VyZSIgb3B0aW9uCisgaW50cm9kdWNlZCBpbiB0aGUgIjA1NV9wYW1fdW5peF9udWxsb2tfc2VjdXJlIiBwYXRjaC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1pbmcgTGl1IDxtaW5nLmxpdUB3aW5kcml2ZXIuY29tPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZGlmZiAtdXJwTiBhL21vZHVsZXMvcGFtX3NlY3VyZXR0eS9NYWtlZmlsZS5hbSBiL21vZHVsZXMvcGFtX3NlY3VyZXR0eS9NYWtlZmlsZS5hbQorLS0tIGEvbW9kdWxlcy9wYW1fc2VjdXJldHR5L01ha2VmaWxlLmFtCTIwMTMtMDctMDUgMTE6MDg6MjMuMjI0NDgzMjM3ICswODAwCisrKysgYi9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvTWFrZWZpbGUuYW0JMjAxMy0wNy0wNSAxMToxNToyMS4zMDQ0ODY0NTYgKzA4MDAKK0BAIC0yNCw2ICsyNCwxMCBAQCBlbmRpZgorIHNlY3VyZWxpYl9MVExJQlJBUklFUyA9IHBhbV9zZWN1cmV0dHkubGEKKyBwYW1fc2VjdXJldHR5X2xhX0xJQkFERCA9IC1MJCh0b3BfYnVpbGRkaXIpL2xpYnBhbSAtbHBhbQorIAorK3BhbV9zZWN1cmV0dHlfbGFfU09VUkNFUyA9CVwKKysJcGFtX3NlY3VyZXR0eS5jCQlcCisrCXR0eV9zZWN1cmUuYworKworIGlmIEVOQUJMRV9SRUdFTkVSQVRFX01BTgorIG5vaW5zdF9EQVRBID0gUkVBRE1FCisgUkVBRE1FOiBwYW1fc2VjdXJldHR5LjgueG1sCitkaWZmIC11cnBOIGEvbW9kdWxlcy9wYW1fc2VjdXJldHR5L3BhbV9zZWN1cmV0dHkuYyBiL21vZHVsZXMvcGFtX3NlY3VyZXR0eS9wYW1fc2VjdXJldHR5LmMKKy0tLSBhL21vZHVsZXMvcGFtX3NlY3VyZXR0eS9wYW1fc2VjdXJldHR5LmMJMjAxMy0wNy0wNSAxMTowNzo1MC4wNjQ0ODM1NjggKzA4MDAKKysrKyBiL21vZHVsZXMvcGFtX3NlY3VyZXR0eS9wYW1fc2VjdXJldHR5LmMJMjAxMy0wNy0wNSAxMToxMjoyMy45OTQ0ODMzNDQgKzA4MDAKK0BAIC0xLDcgKzEsNSBAQAorIC8qIHBhbV9zZWN1cmV0dHkgbW9kdWxlICovCisgCistI2RlZmluZSBTRUNVUkVUVFlfRklMRSAiL2V0Yy9zZWN1cmV0dHkiCistI2RlZmluZSBUVFlfUFJFRklYICAgICAiL2Rldi8iCisgI2RlZmluZSBDTURMSU5FX0ZJTEUgICAiL3Byb2MvY21kbGluZSIKKyAjZGVmaW5lIENPTlNPTEVBQ1RJVkVfRklMRQkiL3N5cy9jbGFzcy90dHkvY29uc29sZS9hY3RpdmUiCisgCitAQCAtNDAsNiArMzgsOSBAQAorICNpbmNsdWRlIDxzZWN1cml0eS9wYW1fbW9kdXRpbC5oPgorICNpbmNsdWRlIDxzZWN1cml0eS9wYW1fZXh0Lmg+CisgCisrZXh0ZXJuIGludCBfcGFtbW9kdXRpbF90dHlfc2VjdXJlKGNvbnN0IHBhbV9oYW5kbGVfdCAqcGFtaCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXR0eW5hbWUpOworKworICNkZWZpbmUgUEFNX0RFQlVHX0FSRyAgICAgICAweDAwMDEKKyAjZGVmaW5lIFBBTV9OT0NPTlNPTEVfQVJHICAgMHgwMDAyCisgCitAQCAtNzMsMTEgKzc0LDcgQEAgc2VjdXJldHR5X3BlcmZvcm1fY2hlY2sgKHBhbV9oYW5kbGVfdCAqcAorICAgICBjb25zdCBjaGFyICp1c2VybmFtZTsKKyAgICAgY29uc3QgY2hhciAqdXR0eW5hbWU7CisgICAgIGNvbnN0IHZvaWQgKnZvaWRfdXR0eW5hbWU7CistICAgIGNoYXIgdHR5ZmlsZWxpbmVbMjU2XTsKKy0gICAgY2hhciBwdG5hbWVbMjU2XTsKKy0gICAgc3RydWN0IHN0YXQgdHR5ZmlsZWluZm87CisgICAgIHN0cnVjdCBwYXNzd2QgKnVzZXJfcHdkOworLSAgICBGSUxFICp0dHlmaWxlOworIAorICAgICAvKiBsb2cgYSB0cmFpbCBmb3IgZGVidWdnaW5nICovCisgICAgIGlmIChjdHJsICYgUEFNX0RFQlVHX0FSRykgeworQEAgLTEwNSw1MCArMTAyLDcgQEAgc2VjdXJldHR5X3BlcmZvcm1fY2hlY2sgKHBhbV9oYW5kbGVfdCAqcAorIAlyZXR1cm4gUEFNX1NFUlZJQ0VfRVJSOworICAgICB9CisgCistICAgIC8qIFRoZSBQQU1fVFRZIGl0ZW0gbWF5IGJlIHByZWZpeGVkIHdpdGggIi9kZXYvIiAtIHNraXAgdGhhdCAqLworLSAgICBpZiAoc3RybmNtcChUVFlfUFJFRklYLCB1dHR5bmFtZSwgc2l6ZW9mKFRUWV9QUkVGSVgpLTEpID09IDApIHsKKy0JdXR0eW5hbWUgKz0gc2l6ZW9mKFRUWV9QUkVGSVgpLTE7CistICAgIH0KKy0KKy0gICAgaWYgKHN0YXQoU0VDVVJFVFRZX0ZJTEUsICZ0dHlmaWxlaW5mbykpIHsKKy0JcGFtX3N5c2xvZyhwYW1oLCBMT0dfTk9USUNFLCAiQ291bGRuJ3Qgb3BlbiAlczogJW0iLCBTRUNVUkVUVFlfRklMRSk7CistCXJldHVybiBQQU1fU1VDQ0VTUzsgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgc2VjdXJldHR5IGhhbmRsaW5nLAorLQkJCSAgICAgICB0aGlzIG5lZWRzIHRvIHN1Y2NlZWQuICBCdXQgd2Ugc3RpbGwgbG9nIHRoZQorLQkJCSAgICAgICBlcnJvci4gKi8KKy0gICAgfQorLQorLSAgICBpZiAoKHR0eWZpbGVpbmZvLnN0X21vZGUgJiBTX0lXT1RIKSB8fCAhU19JU1JFRyh0dHlmaWxlaW5mby5zdF9tb2RlKSkgeworLQkvKiBJZiB0aGUgZmlsZSBpcyB3b3JsZCB3cml0YWJsZSBvciBpcyBub3QgYQorLQkgICBub3JtYWwgZmlsZSwgcmV0dXJuIGVycm9yICovCistCXBhbV9zeXNsb2cocGFtaCwgTE9HX0VSUiwKKy0JCSAgICIlcyBpcyBlaXRoZXIgd29ybGQgd3JpdGFibGUgb3Igbm90IGEgbm9ybWFsIGZpbGUiLAorLQkJICAgU0VDVVJFVFRZX0ZJTEUpOworLQlyZXR1cm4gUEFNX0FVVEhfRVJSOworLSAgICB9CistCistICAgIHR0eWZpbGUgPSBmb3BlbihTRUNVUkVUVFlfRklMRSwiciIpOworLSAgICBpZiAodHR5ZmlsZSA9PSBOVUxMKSB7IC8qIENoZWNrIHRoYXQgd2Ugb3BlbmVkIGl0IHN1Y2Nlc3NmdWxseSAqLworLQlwYW1fc3lzbG9nKHBhbWgsIExPR19FUlIsICJFcnJvciBvcGVuaW5nICVzOiAlbSIsIFNFQ1VSRVRUWV9GSUxFKTsKKy0JcmV0dXJuIFBBTV9TRVJWSUNFX0VSUjsKKy0gICAgfQorLQorLSAgICBpZiAoaXNkaWdpdCh1dHR5bmFtZVswXSkpIHsKKy0Jc25wcmludGYocHRuYW1lLCBzaXplb2YocHRuYW1lKSwgInB0cy8lcyIsIHV0dHluYW1lKTsKKy0gICAgfSBlbHNlIHsKKy0JcHRuYW1lWzBdID0gJ1wwJzsKKy0gICAgfQorLQorLSAgICByZXR2YWwgPSAxOworLQorLSAgICB3aGlsZSAoKGZnZXRzKHR0eWZpbGVsaW5lLCBzaXplb2YodHR5ZmlsZWxpbmUpLTEsIHR0eWZpbGUpICE9IE5VTEwpCistCSAgICYmIHJldHZhbCkgeworLQlpZiAodHR5ZmlsZWxpbmVbc3RybGVuKHR0eWZpbGVsaW5lKSAtIDFdID09ICdcbicpCistCSAgICB0dHlmaWxlbGluZVtzdHJsZW4odHR5ZmlsZWxpbmUpIC0gMV0gPSAnXDAnOworLQorLQlyZXR2YWwgPSAoIHN0cmNtcCh0dHlmaWxlbGluZSwgdXR0eW5hbWUpCistCQkgICAmJiAoIXB0bmFtZVswXSB8fCBzdHJjbXAocHRuYW1lLCB1dHR5bmFtZSkpICk7CistICAgIH0KKy0gICAgZmNsb3NlKHR0eWZpbGUpOworKyAgICByZXR2YWwgPSBfcGFtbW9kdXRpbF90dHlfc2VjdXJlKHBhbWgsIHV0dHluYW1lKTsKKyAKKyAgICAgaWYgKHJldHZhbCAmJiAhKGN0cmwgJiBQQU1fTk9DT05TT0xFX0FSRykpIHsKKyAgICAgICAgIEZJTEUgKmNtZGxpbmVmaWxlOworZGlmZiAtdXJwTiBhL21vZHVsZXMvcGFtX3NlY3VyZXR0eS90dHlfc2VjdXJlLmMgYi9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvdHR5X3NlY3VyZS5jCistLS0gYS9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvdHR5X3NlY3VyZS5jCTE5NzAtMDEtMDEgMDg6MzA6MDAuMDAwMDAwMDAwICswODMwCisrKysgYi9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvdHR5X3NlY3VyZS5jCTIwMTMtMDctMDUgMTE6MTQ6MjEuNTM0NDgyOTAwICswODAwCitAQCAtMCwwICsxLDkwIEBACisrLyoKKysgKiBBIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhIHBhcnRpY3VsYXIgbGluZSBpcyBpbiAvZXRjL3NlY3VyZXR0eQorKyAqLworKworKworKyNkZWZpbmUgU0VDVVJFVFRZX0ZJTEUgIi9ldGMvc2VjdXJldHR5IgorKyNkZWZpbmUgVFRZX1BSRUZJWCAgICAgIi9kZXYvIgorKworKy8qIFRoaXMgZnVuY3Rpb24gdGFrZW4gb3V0IG9mIHBhbV9zZWN1cmV0dHkgYnkgU2FtIEhhcnRtYW4KKysgKiA8aGFydG1hbnNAZGViaWFuLm9yZz4qLworKy8qCisrICogYnkgRWxsaW90IExlZSA8c29wd2l0aEByZWRoYXQuY29tPiwgUmVkIEhhdCBTb2Z0d2FyZS4KKysgKiBKdWx5IDI1LCAxOTk2LgorKyAqIFNsaWdodCBtb2RpZmljYXRpb25zIEFHTS4gMTk5Ni8xMi8zCisrICovCisrCisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysjaW5jbHVkZSA8c2VjdXJpdHkvcGFtX21vZHVsZXMuaD4KKysjaW5jbHVkZSA8c3RkYXJnLmg+CisrI2luY2x1ZGUgPHN5c2xvZy5oPgorKyNpbmNsdWRlIDxzeXMvc3lzbG9nLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c2VjdXJpdHkvcGFtX21vZHV0aWwuaD4KKysjaW5jbHVkZSA8c2VjdXJpdHkvcGFtX2V4dC5oPgorKworK2V4dGVybiBpbnQgX3BhbW1vZHV0aWxfdHR5X3NlY3VyZShjb25zdCBwYW1faGFuZGxlX3QgKnBhbWgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnV0dHluYW1lKTsKKysKKytpbnQgX3BhbW1vZHV0aWxfdHR5X3NlY3VyZShjb25zdCBwYW1faGFuZGxlX3QgKnBhbWgsIGNvbnN0IGNoYXIgKnV0dHluYW1lKQorK3sKKysgICAgaW50IHJldHZhbCA9IFBBTV9BVVRIX0VSUjsKKysgICAgY2hhciB0dHlmaWxlbGluZVsyNTZdOworKyAgICBjaGFyIHB0bmFtZVsyNTZdOworKyAgICBzdHJ1Y3Qgc3RhdCB0dHlmaWxlaW5mbzsKKysgICAgRklMRSAqdHR5ZmlsZTsKKysgICAgLyogVGhlIFBBTV9UVFkgaXRlbSBtYXkgYmUgcHJlZml4ZWQgd2l0aCAiL2Rldi8iIC0gc2tpcCB0aGF0ICovCisrICAgIGlmIChzdHJuY21wKFRUWV9QUkVGSVgsIHV0dHluYW1lLCBzaXplb2YoVFRZX1BSRUZJWCktMSkgPT0gMCkKKysJdXR0eW5hbWUgKz0gc2l6ZW9mKFRUWV9QUkVGSVgpLTE7CisrCisrICAgIGlmIChzdGF0KFNFQ1VSRVRUWV9GSUxFLCAmdHR5ZmlsZWluZm8pKSB7CisrCXBhbV9zeXNsb2cocGFtaCwgTE9HX05PVElDRSwgIkNvdWxkbid0IG9wZW4gJXM6ICVtIiwKKysJICAgICAgICAgICBTRUNVUkVUVFlfRklMRSk7CisrCXJldHVybiBQQU1fU1VDQ0VTUzsgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgc2VjdXJldHR5IGhhbmRsaW5nLAorKwkJCSAgICAgICB0aGlzIG5lZWRzIHRvIHN1Y2NlZWQuICBCdXQgd2Ugc3RpbGwgbG9nIHRoZQorKwkJCSAgICAgICBlcnJvci4gKi8KKysgICAgfQorKworKyAgICBpZiAoKHR0eWZpbGVpbmZvLnN0X21vZGUgJiBTX0lXT1RIKSB8fCAhU19JU1JFRyh0dHlmaWxlaW5mby5zdF9tb2RlKSkgeworKwkvKiBJZiB0aGUgZmlsZSBpcyB3b3JsZCB3cml0YWJsZSBvciBpcyBub3QgYQorKwkgICBub3JtYWwgZmlsZSwgcmV0dXJuIGVycm9yICovCisrCXBhbV9zeXNsb2cocGFtaCwgTE9HX0VSUiwKKysJICAgICAgICAgICAiJXMgaXMgZWl0aGVyIHdvcmxkIHdyaXRhYmxlIG9yIG5vdCBhIG5vcm1hbCBmaWxlIiwKKysJICAgICAgICAgICBTRUNVUkVUVFlfRklMRSk7CisrCXJldHVybiBQQU1fQVVUSF9FUlI7CisrICAgIH0KKysKKysgICAgdHR5ZmlsZSA9IGZvcGVuKFNFQ1VSRVRUWV9GSUxFLCJyIik7CisrICAgIGlmKHR0eWZpbGUgPT0gTlVMTCkgeyAvKiBDaGVjayB0aGF0IHdlIG9wZW5lZCBpdCBzdWNjZXNzZnVsbHkgKi8KKysJcGFtX3N5c2xvZyhwYW1oLCBMT0dfRVJSLCAiRXJyb3Igb3BlbmluZyAlczogJW0iLCBTRUNVUkVUVFlfRklMRSk7CisrCXJldHVybiBQQU1fU0VSVklDRV9FUlI7CisrICAgIH0KKysKKysgICAgaWYgKGlzZGlnaXQodXR0eW5hbWVbMF0pKSB7CisrCXNucHJpbnRmKHB0bmFtZSwgc2l6ZW9mKHB0bmFtZSksICJwdHMvJXMiLCB1dHR5bmFtZSk7CisrICAgIH0gZWxzZSB7CisrCXB0bmFtZVswXSA9ICdcMCc7CisrICAgIH0KKysKKysgICAgcmV0dmFsID0gMTsKKysKKysgICAgd2hpbGUgKChmZ2V0cyh0dHlmaWxlbGluZSxzaXplb2YodHR5ZmlsZWxpbmUpLTEsIHR0eWZpbGUpICE9IE5VTEwpIAorKwkgICAmJiByZXR2YWwpIHsKKysJaWYodHR5ZmlsZWxpbmVbc3RybGVuKHR0eWZpbGVsaW5lKSAtIDFdID09ICdcbicpCisrCSAgICB0dHlmaWxlbGluZVtzdHJsZW4odHR5ZmlsZWxpbmUpIC0gMV0gPSAnXDAnOworKwlyZXR2YWwgPSAoIHN0cmNtcCh0dHlmaWxlbGluZSx1dHR5bmFtZSkKKysJICAgICAgICAgICAmJiAoIXB0bmFtZVswXSB8fCBzdHJjbXAocHRuYW1lLCB1dHR5bmFtZSkpICk7CisrICAgIH0KKysgICAgZmNsb3NlKHR0eWZpbGUpOworKworKyAgICBpZihyZXR2YWwpIHsKKysJcmV0dmFsID0gUEFNX0FVVEhfRVJSOworKyAgICB9CisrCisrICAgIHJldHVybiByZXR2YWw7CisrfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tdW5peC1udWxsb2stc2VjdXJlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tdW5peC1udWxsb2stc2VjdXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNDFlODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS11bml4LW51bGxvay1zZWN1cmUucGF0Y2gKQEAgLTAsMCArMSwyNDAgQEAKK0Zyb20gOWJkYzE5NzQ3NDc5NWYyZDAwMGMyYmMwNGY1OGY3Y2VmODg5OGYyMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFtYXJuYXRoIFZhbGx1cmkgPGFtYXJuYXRoLnZhbGx1cmlAaW50ZWwuY29tPgorRGF0ZTogV2VkLCAxNSBKdWwgMjAxNSAxMzowNzoyMCArMDMwMAorU3ViamVjdDogW1BBVENIXSBEZWJpYW4gcGF0Y2ggdG8gYWRkIGEgbmV3ICdudWxsb2tfc2VjdXJlJyBvcHRpb24gdG8gcGFtX3VuaXgsCisgd2hpY2ggYWNjZXB0cyB1c2VycyB3aXRoIG51bGwgcGFzc3dvcmRzIG9ubHkgd2hlbiB0aGUgYXBwbGljYW50IGlzIGNvbm5lY3RlZAorIGZyb20gYSB0dHkgbGlzdGVkIGluIC9ldGMvc2VjdXJldHR5LgorCitBdXRob3JzOiBTYW0gSGFydG1hbiA8aGFydG1hbnNAZGViaWFuLm9yZz4sCisgICAgICAgICBTdGV2ZSBMYW5nYXNlayA8dm9ybG9uQGRlYmlhbi5vcmc+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNaW5nIExpdSA8bWluZy5saXVAd2luZHJpdmVyLmNvbT4KKwordjI6CisJLSBGb3J3YXJkIHBvcnRlZCBmcm9tIHYxLjEuNiB0byB2MS4yLjEKKworU2lnbmVkLW9mZi1ieTogQW1hcm5hdGggVmFsbHVyaSA8YW1hcm5hdGgudmFsbHVyaUBpbnRlbC5jb20+CistLS0KKyBtb2R1bGVzL3BhbV91bml4L01ha2VmaWxlLmFtICAgIHwgIDMgKystCisgbW9kdWxlcy9wYW1fdW5peC9SRUFETUUgICAgICAgICB8IDExICsrKysrKysrKystCisgbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44ICAgICB8ICA5ICsrKysrKysrLQorIG1vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOC54bWwgfCAxOSArKysrKysrKysrKysrKysrKystCisgbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmMgICAgICB8IDQwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KKyBtb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuaCAgICAgIHwgIDggKysrKysrLS0KKyA2IGZpbGVzIGNoYW5nZWQsIDc5IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbW9kdWxlcy9wYW1fdW5peC9NYWtlZmlsZS5hbSBiL21vZHVsZXMvcGFtX3VuaXgvTWFrZWZpbGUuYW0KK2luZGV4IDU2ZWQ1OTEuLjlhMzcyYWMgMTAwNjQ0CistLS0gYS9tb2R1bGVzL3BhbV91bml4L01ha2VmaWxlLmFtCisrKysgYi9tb2R1bGVzL3BhbV91bml4L01ha2VmaWxlLmFtCitAQCAtMzAsNyArMzAsOCBAQCBpZiBIQVZFX1ZFUlNJT05JTkcKKyAgIHBhbV91bml4X2xhX0xERkxBR1MgKz0gLVdsLC0tdmVyc2lvbi1zY3JpcHQ9JChzcmNkaXIpLy4uL21vZHVsZXMubWFwCisgZW5kaWYKKyBwYW1fdW5peF9sYV9MSUJBREQgPSAkKHRvcF9idWlsZGRpcikvbGlicGFtL2xpYnBhbS5sYSBcCistCUBMSUJDUllQVEAgQExJQlNFTElOVVhAICQoTklTX0xJQlMpCisrCUBMSUJDUllQVEAgQExJQlNFTElOVVhAICQoTklTX0xJQlMpIFwKKysJLi4vcGFtX3NlY3VyZXR0eS90dHlfc2VjdXJlLmxvCisgCisgc2VjdXJlbGliX0xUTElCUkFSSUVTID0gcGFtX3VuaXgubGEKKyAKK2RpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L1JFQURNRSBiL21vZHVsZXMvcGFtX3VuaXgvUkVBRE1FCitpbmRleCAzOTM1ZGJhLi43ODgwZDkxIDEwMDY0NAorLS0tIGEvbW9kdWxlcy9wYW1fdW5peC9SRUFETUUKKysrKyBiL21vZHVsZXMvcGFtX3VuaXgvUkVBRE1FCitAQCAtNjcsNyArNjcsMTYgQEAgbnVsbG9rCisgCisgICAgIFRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGlzIG1vZHVsZSBpcyB0byBub3QgcGVybWl0IHRoZSB1c2VyIGFjY2VzcyB0byBhCisgICAgIHNlcnZpY2UgaWYgdGhlaXIgb2ZmaWNpYWwgcGFzc3dvcmQgaXMgYmxhbmsuIFRoZSBudWxsb2sgYXJndW1lbnQgb3ZlcnJpZGVzCistICAgIHRoaXMgZGVmYXVsdC4KKysgICAgdGhpcyBkZWZhdWx0IGFuZCBhbGxvd3MgYW55IHVzZXIgd2l0aCBhIGJsYW5rIHBhc3N3b3JkIHRvIGFjY2VzcyB0aGUKKysgICAgc2VydmljZS4KKysKKytudWxsb2tfc2VjdXJlCisrCisrICAgIFRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGlzIG1vZHVsZSBpcyB0byBub3QgcGVybWl0IHRoZSB1c2VyIGFjY2VzcyB0byBhCisrICAgIHNlcnZpY2UgaWYgdGhlaXIgb2ZmaWNpYWwgcGFzc3dvcmQgaXMgYmxhbmsuIFRoZSBudWxsb2tfc2VjdXJlIGFyZ3VtZW50CisrICAgIG92ZXJyaWRlcyB0aGlzIGRlZmF1bHQgYW5kIGFsbG93cyBhbnkgdXNlciB3aXRoIGEgYmxhbmsgcGFzc3dvcmQgdG8gYWNjZXNzCisrICAgIHRoZSBzZXJ2aWNlIGFzIGxvbmcgYXMgdGhlIHZhbHVlIG9mIFBBTV9UVFkgaXMgc2V0IHRvIG9uZSBvZiB0aGUgdmFsdWVzCisrICAgIGZvdW5kIGluIC9ldGMvc2VjdXJldHR5LgorIAorIHRyeV9maXJzdF9wYXNzCisgCitkaWZmIC0tZ2l0IGEvbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44IGIvbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44CitpbmRleCAzMzkxNzhiLi5hNGJkOTA2IDEwMDY0NAorLS0tIGEvbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44CisrKysgYi9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgKK0BAIC05Miw3ICs5MiwxNCBAQCBUdXJucyBvZmYgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyBuYW1lbHkgbWVzc2FnZXMgYWJvdXQgc2Vzc2lvbiBvcGVuIGFuZCBjbG9zZSB2aQorIC5SUyA0CisgVGhlIGRlZmF1bHQgYWN0aW9uIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG5vdCBwZXJtaXQgdGhlIHVzZXIgYWNjZXNzIHRvIGEgc2VydmljZSBpZiB0aGVpciBvZmZpY2lhbCBwYXNzd29yZCBpcyBibGFua1wmLiBUaGUKKyBcZkJudWxsb2tcZlIKKy1hcmd1bWVudCBvdmVycmlkZXMgdGhpcyBkZWZhdWx0XCYuCisrYXJndW1lbnQgb3ZlcnJpZGVzIHRoaXMgZGVmYXVsdCBhbmQgYWxsb3dzIGFueSB1c2VyIHdpdGggYSBibGFuayBwYXNzd29yZCB0byBhY2Nlc3MgdGhlIHNlcnZpY2VcJi4KKysuUkUKKysuUFAKKytcZkJudWxsb2tfc2VjdXJlXGZSCisrLlJTIDQKKytUaGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhpcyBtb2R1bGUgaXMgdG8gbm90IHBlcm1pdCB0aGUgdXNlciBhY2Nlc3MgdG8gYSBzZXJ2aWNlIGlmIHRoZWlyIG9mZmljaWFsIHBhc3N3b3JkIGlzIGJsYW5rXCYuIFRoZQorK1xmQm51bGxva19zZWN1cmVcZlIKKythcmd1bWVudCBvdmVycmlkZXMgdGhpcyBkZWZhdWx0IGFuZCBhbGxvd3MgYW55IHVzZXIgd2l0aCBhIGJsYW5rIHBhc3N3b3JkIHRvIGFjY2VzcyB0aGUgc2VydmljZSBhcyBsb25nIGFzIHRoZSB2YWx1ZSBvZiBQQU1fVFRZIGlzIHNldCB0byBvbmUgb2YgdGhlIHZhbHVlcyBmb3VuZCBpbiAvZXRjL3NlY3VyZXR0eVwmLgorIC5SRQorIC5QUAorIFxmQnRyeV9maXJzdF9wYXNzXGZSCitkaWZmIC0tZ2l0IGEvbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44LnhtbCBiL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOC54bWwKK2luZGV4IGE4YjY0YmIuLjFjZWQ2ZjQgMTAwNjQ0CistLS0gYS9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgueG1sCisrKysgYi9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgueG1sCitAQCAtMTU5LDcgKzE1OSwyNCBAQAorICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICBUaGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhpcyBtb2R1bGUgaXMgdG8gbm90IHBlcm1pdCB0aGUKKyAgICAgICAgICAgICB1c2VyIGFjY2VzcyB0byBhIHNlcnZpY2UgaWYgdGhlaXIgb2ZmaWNpYWwgcGFzc3dvcmQgaXMgYmxhbmsuCistICAgICAgICAgICAgVGhlIDxvcHRpb24+bnVsbG9rPC9vcHRpb24+IGFyZ3VtZW50IG92ZXJyaWRlcyB0aGlzIGRlZmF1bHQuCisrICAgICAgICAgICAgVGhlIDxvcHRpb24+bnVsbG9rPC9vcHRpb24+IGFyZ3VtZW50IG92ZXJyaWRlcyB0aGlzIGRlZmF1bHQKKysgICAgICAgICAgICBhbmQgYWxsb3dzIGFueSB1c2VyIHdpdGggYSBibGFuayBwYXNzd29yZCB0byBhY2Nlc3MgdGhlCisrICAgICAgICAgICAgc2VydmljZS4KKysgICAgICAgICAgPC9wYXJhPgorKyAgICAgICAgPC9saXN0aXRlbT4KKysgICAgICA8L3Zhcmxpc3RlbnRyeT4KKysgICAgICA8dmFybGlzdGVudHJ5PgorKyAgICAgICAgPHRlcm0+CisrICAgICAgICAgIDxvcHRpb24+bnVsbG9rX3NlY3VyZTwvb3B0aW9uPgorKyAgICAgICAgPC90ZXJtPgorKyAgICAgICAgPGxpc3RpdGVtPgorKyAgICAgICAgICA8cGFyYT4KKysgICAgICAgICAgICBUaGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhpcyBtb2R1bGUgaXMgdG8gbm90IHBlcm1pdCB0aGUKKysgICAgICAgICAgICB1c2VyIGFjY2VzcyB0byBhIHNlcnZpY2UgaWYgdGhlaXIgb2ZmaWNpYWwgcGFzc3dvcmQgaXMgYmxhbmsuCisrICAgICAgICAgICAgVGhlIDxvcHRpb24+bnVsbG9rX3NlY3VyZTwvb3B0aW9uPiBhcmd1bWVudCBvdmVycmlkZXMgdGhpcworKyAgICAgICAgICAgIGRlZmF1bHQgYW5kIGFsbG93cyBhbnkgdXNlciB3aXRoIGEgYmxhbmsgcGFzc3dvcmQgdG8gYWNjZXNzCisrICAgICAgICAgICAgdGhlIHNlcnZpY2UgYXMgbG9uZyBhcyB0aGUgdmFsdWUgb2YgUEFNX1RUWSBpcyBzZXQgdG8gb25lIG9mCisrICAgICAgICAgICAgdGhlIHZhbHVlcyBmb3VuZCBpbiAvZXRjL3NlY3VyZXR0eS4KKyAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICA8L3Zhcmxpc3RlbnRyeT4KK2RpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuYyBiL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5jCitpbmRleCBhYmNjZDgyLi4yMzYxOTU3IDEwMDY0NAorLS0tIGEvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmMKKysrKyBiL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5jCitAQCAtMTg5LDEzICsxODksMjIgQEAgaW50IF9zZXRfY3RybChwYW1faGFuZGxlX3QgKnBhbWgsIGludCBmbGFncywgaW50ICpyZW1lbWJlciwgaW50ICpyb3VuZHMsCisgCS8qIG5vdyBwYXJzZSB0aGUgYXJndW1lbnRzIHRvIHRoaXMgbW9kdWxlICovCisgCisgCWZvciAoOyBhcmdjLS0gPiAwOyArK2FyZ3YpIHsKKysJCWludCBzbDsKKyAKKyAJCUQoKCJwYW1fdW5peCBhcmc6ICVzIiwgKmFyZ3YpKTsKKyAKKyAJCWZvciAoaiA9IDA7IGogPCBVTklYX0NUUkxTXzsgKytqKSB7CistCQkJaWYgKHVuaXhfYXJnc1tqXS50b2tlbgorLQkJCSAgICAmJiAhc3RybmNtcCgqYXJndiwgdW5peF9hcmdzW2pdLnRva2VuLCBzdHJsZW4odW5peF9hcmdzW2pdLnRva2VuKSkpIHsKKy0JCQkJYnJlYWs7CisrCQkJaWYgKHVuaXhfYXJnc1tqXS50b2tlbikgeworKwkJCQlzbCA9IHN0cmxlbih1bml4X2FyZ3Nbal0udG9rZW4pOworKwkJCQlpZiAodW5peF9hcmdzW2pdLnRva2VuW3NsLTFdID09ICc9JykgeworKwkJCQkJLyogZXhjbHVkZSBhcmd1bWVudCBmcm9tIGNvbXBhcmlzb24gKi8KKysJCQkJCWlmICghc3RybmNtcCgqYXJndiwgdW5peF9hcmdzW2pdLnRva2VuLCBzbCkpCisrCQkJCQkJYnJlYWs7CisrCQkJCX0gZWxzZSB7CisrCQkJCS8qIGNvbXBhcmUgZnVsbCBzdHJpbmdzICovCisrCQkJCQlpZiAoIXN0cmNtcCgqYXJndiwgdW5peF9hcmdzW2pdLnRva2VuKSkKKysJCQkJCQlicmVhazsKKysJCQkJfQorIAkJCX0KKyAJCX0KKyAKK0BAIC01NjYsNiArNTc1LDcgQEAgc3RhdGljIGludCBfdW5peF9ydW5faGVscGVyX2JpbmFyeShwYW1faGFuZGxlX3QgKnBhbWgsIGNvbnN0IGNoYXIgKnBhc3N3ZCwKKyAgICAgaWYgKGNoaWxkID09IDApIHsKKyAJc3RhdGljIGNoYXIgKmVudnBbXSA9IHsgTlVMTCB9OworIAljb25zdCBjaGFyICphcmdzW10gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKysJaW50IG51bGxvayA9IG9mZihVTklYX19OT05VTEwsIGN0cmwpOworIAorIAkvKiBYWFggLSBzaG91bGQgcmVhbGx5IHRpZHkgdXAgUEFNIGhlcmUgdG9vICovCisgCitAQCAtNTkzLDcgKzYwMywxNiBAQCBzdGF0aWMgaW50IF91bml4X3J1bl9oZWxwZXJfYmluYXJ5KHBhbV9oYW5kbGVfdCAqcGFtaCwgY29uc3QgY2hhciAqcGFzc3dkLAorIAkvKiBleGVjIGJpbmFyeSBoZWxwZXIgKi8KKyAJYXJnc1swXSA9IENIS1BXRF9IRUxQRVI7CisgCWFyZ3NbMV0gPSB1c2VyOworLQlpZiAob2ZmKFVOSVhfX05PTlVMTCwgY3RybCkpIHsJLyogdGhpcyBtZWFucyB3ZSd2ZSBzdWNjZWVkZWQgKi8KKysJaWYgKG9uKFVOSVhfTlVMTE9LX1NFQ1VSRSwgY3RybCkpIHsKKysJCWNvbnN0IHZvaWQgKnV0dHluYW1lOworKwkJcmV0dmFsID0gcGFtX2dldF9pdGVtKHBhbWgsIFBBTV9UVFksICZ1dHR5bmFtZSk7CisrCQlpZiAocmV0dmFsICE9IFBBTV9TVUNDRVNTIHx8IHV0dHluYW1lID09IE5VTEwKKysJCQl8fCBfcGFtbW9kdXRpbF90dHlfc2VjdXJlKHBhbWgsIChjb25zdCBjaGFyICopdXR0eW5hbWUpICE9IFBBTV9TVUNDRVNTKSB7CisrCQkJbnVsbG9rID0gMDsKKysJCX0KKysJfQorKworKwlpZiAobnVsbG9rKSB7CisgCSAgYXJnc1syXT0ibnVsbG9rIjsKKyAJfSBlbHNlIHsKKyAJICBhcmdzWzJdPSJub251bGwiOworQEAgLTY3OCw2ICs2OTcsMTcgQEAgX3VuaXhfYmxhbmtwYXNzd2QgKHBhbV9oYW5kbGVfdCAqcGFtaCwgdW5zaWduZWQgaW50IGN0cmwsIGNvbnN0IGNoYXIgKm5hbWUpCisgCWlmIChvbihVTklYX19OT05VTEwsIGN0cmwpKQorIAkJcmV0dXJuIDA7CS8qIHdpbGwgZmFpbCBidXQgZG9uJ3QgbGV0IG9uIHlldCAqLworIAorKwlpZiAob24oVU5JWF9OVUxMT0tfU0VDVVJFLCBjdHJsKSkgeworKwkJaW50IHJldHZhbDI7CisrCQljb25zdCB2b2lkICp1dHR5bmFtZTsKKysJCXJldHZhbDIgPSBwYW1fZ2V0X2l0ZW0ocGFtaCwgUEFNX1RUWSwgJnV0dHluYW1lKTsKKysJCWlmIChyZXR2YWwyICE9IFBBTV9TVUNDRVNTIHx8IHV0dHluYW1lID09IE5VTEwpCisrCQkJcmV0dXJuIDA7CisrCisrCQlpZiAoX3BhbW1vZHV0aWxfdHR5X3NlY3VyZShwYW1oLCAoY29uc3QgY2hhciAqKXV0dHluYW1lKSAhPSBQQU1fU1VDQ0VTUykKKysJCQlyZXR1cm4gMDsKKysJfQorKworIAkvKiBVTklYIHBhc3N3b3JkcyBhcmVhICovCisgCisgCXJldHZhbCA9IGdldF9wd2RfaGFzaChwYW1oLCBuYW1lLCAmcHdkLCAmc2FsdCk7CitAQCAtNzY0LDcgKzc5NCw3IEBAIGludCBfdW5peF92ZXJpZnlfcGFzc3dvcmQocGFtX2hhbmRsZV90ICogcGFtaCwgY29uc3QgY2hhciAqbmFtZQorIAkJCX0KKyAJCX0KKyAJfSBlbHNlIHsKKy0JCXJldHZhbCA9IHZlcmlmeV9wd2RfaGFzaChwLCBzYWx0LCBvZmYoVU5JWF9fTk9OVUxMLCBjdHJsKSk7CisrCQlyZXR2YWwgPSB2ZXJpZnlfcHdkX2hhc2gocCwgc2FsdCwgX3VuaXhfYmxhbmtwYXNzd2QocGFtaCwgY3RybCwgbmFtZSkpOworIAl9CisgCisgCWlmIChyZXR2YWwgPT0gUEFNX1NVQ0NFU1MpIHsKK2RpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuaCBiL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5oCitpbmRleCAzNzI5Y2UwLi40M2NkYmVhIDEwMDY0NAorLS0tIGEvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmgKKysrKyBiL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5oCitAQCAtOTksOCArOTksOSBAQCB0eXBlZGVmIHN0cnVjdCB7CisgI2RlZmluZSBVTklYX01JTl9QQVNTX0xFTiAgICAgICAgMjcJLyogbWluIGxlbmd0aCBmb3IgcGFzc3dvcmQgKi8KKyAjZGVmaW5lIFVOSVhfUVVJRVQJCSAyOAkvKiBEb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzICovCisgI2RlZmluZSBVTklYX0RFUyAgICAgICAgICAgICAgICAgMjkgICAgIC8qIERFUywgZGVmYXVsdCAqLworKyNkZWZpbmUgVU5JWF9OVUxMT0tfU0VDVVJFICAgICAgIDMwICAgICAvKiBOVUxMIHBhc3N3b3JkcyBhbGxvd2VkIG9ubHkgb24gc2VjdXJlIHR0eXMgKi8KKyAvKiAtLS0tLS0tLS0tLS0tLSAqLworLSNkZWZpbmUgVU5JWF9DVFJMU18gICAgICAgICAgICAgIDMwCS8qIG51bWJlciBvZiBjdHJsIGFyZ3VtZW50cyBkZWZpbmVkICovCisrI2RlZmluZSBVTklYX0NUUkxTXyAgICAgICAgICAgICAgMzEJLyogbnVtYmVyIG9mIGN0cmwgYXJndW1lbnRzIGRlZmluZWQgKi8KKyAKKyAjZGVmaW5lIFVOSVhfREVTX0NSWVBUKGN0cmwpCShvZmYoVU5JWF9NRDVfUEFTUyxjdHJsKSYmb2ZmKFVOSVhfQklHQ1JZUFQsY3RybCkmJm9mZihVTklYX1NIQTI1Nl9QQVNTLGN0cmwpJiZvZmYoVU5JWF9TSEE1MTJfUEFTUyxjdHJsKSYmb2ZmKFVOSVhfQkxPV0ZJU0hfUEFTUyxjdHJsKSkKKyAKK0BAIC0xMTgsNyArMTE5LDcgQEAgc3RhdGljIGNvbnN0IFVOSVhfQ3RybHMgdW5peF9hcmdzW1VOSVhfQ1RSTFNfXSA9CisgLyogVU5JWF9OT1RfU0VUX1BBU1MgKi8gICAgeyJub3Rfc2V0X3Bhc3MiLCAgICBfQUxMX09OXywgICAgICAgICAgICAgICAgMDEwMCwgMH0sCisgLyogVU5JWF9fUFJFTElNICovICAgICAgICAge05VTEwsICAgICAgICAgICAgICBfQUxMX09OX14oMDYwMCksICAgICAgICAgMDIwMCwgMH0sCisgLyogVU5JWF9fVVBEQVRFICovICAgICAgICAge05VTEwsICAgICAgICAgICAgICBfQUxMX09OX14oMDYwMCksICAgICAgICAgMDQwMCwgMH0sCistLyogVU5JWF9fTk9OVUxMICovICAgICAgICAge05VTEwsICAgICAgICAgICAgICBfQUxMX09OXywgICAgICAgICAgICAgICAwMTAwMCwgMH0sCisrLyogVU5JWF9fTk9OVUxMICovICAgICAgICAge05VTEwsICAgICAgICAgICAgICBfQUxMX09OX14oMDIwMDAwMDAwMDApLCAgIDAxMDAwLCAwfSwKKyAvKiBVTklYX19RVUlFVCAqLyAgICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fLCAgICAgICAgICAgICAgIDAyMDAwLCAwfSwKKyAvKiBVTklYX1VTRV9BVVRIVE9LICovICAgICB7InVzZV9hdXRodG9rIiwgICAgIF9BTExfT05fLCAgICAgICAgICAgICAgIDA0MDAwLCAwfSwKKyAvKiBVTklYX1NIQURPVyAqLyAgICAgICAgICB7InNoYWRvdyIsICAgICAgICAgIF9BTExfT05fLCAgICAgICAgICAgICAgMDEwMDAwLCAwfSwKK0BAIC0xMzksNiArMTQwLDcgQEAgc3RhdGljIGNvbnN0IFVOSVhfQ3RybHMgdW5peF9hcmdzW1VOSVhfQ1RSTFNfXSA9CisgLyogVU5JWF9NSU5fUEFTU19MRU4gKi8gICAgeyJtaW5sZW49IiwJCV9BTExfT05fLCAgICAgICAgIDA0MDAwMDAwMDAsIDB9LAorIC8qIFVOSVhfUVVJRVQgKi8gICAgICAgICAgIHsicXVpZXQiLCAgICAgICAgICAgX0FMTF9PTl8sICAgICAgICAgMDEwMDAwMDAwMDAsIDB9LAorIC8qIFVOSVhfREVTICovICAgICAgICAgICAgIHsiZGVzIiwgICAgICAgICAgICAgX0FMTF9PTl9eKDAyNjA0MjAwMDApLCAgICAgIDAsIDF9LAorKy8qIFVOSVhfTlVMTE9LX1NFQ1VSRSAqLyAgIHsibnVsbG9rX3NlY3VyZSIsICAgX0FMTF9PTl9eKDAxMDAwKSwgIDAyMDAwMDAwMDAwLCAwfSwKKyB9OworIAorICNkZWZpbmUgVU5JWF9ERUZBVUxUUyAgKHVuaXhfYXJnc1tVTklYX19OT05VTExdLmZsYWcpCitAQCAtMTcxLDYgKzE3Myw4IEBAIGV4dGVybiBpbnQgX3VuaXhfcmVhZF9wYXNzd29yZChwYW1faGFuZGxlX3QgKiBwYW1oCisgCQkJLGNvbnN0IGNoYXIgKnByb21wdDIKKyAJCQksY29uc3QgY2hhciAqZGF0YV9uYW1lCisgCQkJLGNvbnN0IHZvaWQgKipwYXNzKTsKKytleHRlcm4gaW50IF9wYW1tb2R1dGlsX3R0eV9zZWN1cmUoY29uc3QgcGFtX2hhbmRsZV90ICpwYW1oLAorKyAgICAgICAgIGNvbnN0IGNoYXIgKnV0dHluYW1lKTsKKyAKKyBleHRlcm4gaW50IF91bml4X3J1bl92ZXJpZnlfYmluYXJ5KHBhbV9oYW5kbGVfdCAqcGFtaCwKKyAJCQl1bnNpZ25lZCBpbnQgY3RybCwgY29uc3QgY2hhciAqdXNlciwgaW50ICpkYXlzbGVmdCk7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLWFjY291bnQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1hY2NvdW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNmIxNzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1hY2NvdW50CkBAIC0wLDAgKzEsMjUgQEAKKyMKKyMgL2V0Yy9wYW0uZC9jb21tb24tYWNjb3VudCAtIGF1dGhvcml6YXRpb24gc2V0dGluZ3MgY29tbW9uIHRvIGFsbCBzZXJ2aWNlcworIworIyBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgZnJvbSBvdGhlciBzZXJ2aWNlLXNwZWNpZmljIFBBTSBjb25maWcgZmlsZXMsCisjIGFuZCBzaG91bGQgY29udGFpbiBhIGxpc3Qgb2YgdGhlIGF1dGhvcml6YXRpb24gbW9kdWxlcyB0aGF0IGRlZmluZQorIyB0aGUgY2VudHJhbCBhY2Nlc3MgcG9saWN5IGZvciB1c2Ugb24gdGhlIHN5c3RlbS4gIFRoZSBkZWZhdWx0IGlzIHRvCisjIG9ubHkgZGVueSBzZXJ2aWNlIHRvIHVzZXJzIHdob3NlIGFjY291bnRzIGFyZSBleHBpcmVkIGluIC9ldGMvc2hhZG93LgorIworIyBBcyBvZiBwYW0gMS4wLjEtNiwgdGhpcyBmaWxlIGlzIG1hbmFnZWQgYnkgcGFtLWF1dGgtdXBkYXRlIGJ5IGRlZmF1bHQuCisjIFRvIHRha2UgYWR2YW50YWdlIG9mIHRoaXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbmZpZ3VyZSBhbnkKKyMgbG9jYWwgbW9kdWxlcyBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSBkZWZhdWx0IGJsb2NrLCBhbmQgdXNlCisjIHBhbS1hdXRoLXVwZGF0ZSB0byBtYW5hZ2Ugc2VsZWN0aW9uIG9mIG90aGVyIG1vZHVsZXMuICBTZWUKKyMgcGFtLWF1dGgtdXBkYXRlKDgpIGZvciBkZXRhaWxzLgorIworCisjIGhlcmUgYXJlIHRoZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIlByaW1hcnkiIGJsb2NrKQorYWNjb3VudAlbc3VjY2Vzcz0xIG5ld19hdXRodG9rX3JlcWQ9ZG9uZSBkZWZhdWx0PWlnbm9yZV0JcGFtX3VuaXguc28gCisjIGhlcmUncyB0aGUgZmFsbGJhY2sgaWYgbm8gbW9kdWxlIHN1Y2NlZWRzCithY2NvdW50CXJlcXVpc2l0ZQkJCXBhbV9kZW55LnNvCisjIHByaW1lIHRoZSBzdGFjayB3aXRoIGEgcG9zaXRpdmUgcmV0dXJuIHZhbHVlIGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5OworIyB0aGlzIGF2b2lkcyB1cyByZXR1cm5pbmcgYW4gZXJyb3IganVzdCBiZWNhdXNlIG5vdGhpbmcgc2V0cyBhIHN1Y2Nlc3MgY29kZQorIyBzaW5jZSB0aGUgbW9kdWxlcyBhYm92ZSB3aWxsIGVhY2gganVzdCBqdW1wIGFyb3VuZAorYWNjb3VudAlyZXF1aXJlZAkJCXBhbV9wZXJtaXQuc28KKyMgYW5kIGhlcmUgYXJlIG1vcmUgcGVyLXBhY2thZ2UgbW9kdWxlcyAodGhlICJBZGRpdGlvbmFsIiBibG9jaykKKyMgZW5kIG9mIHBhbS1hdXRoLXVwZGF0ZSBjb25maWcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLWF1dGggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1hdXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MGI2OWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1hdXRoCkBAIC0wLDAgKzEsMTggQEAKKyMKKyMgL2V0Yy9wYW0uZC9jb21tb24tYXV0aCAtIGF1dGhlbnRpY2F0aW9uIHNldHRpbmdzIGNvbW1vbiB0byBhbGwgc2VydmljZXMKKyMKKyMgVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGZyb20gb3RoZXIgc2VydmljZS1zcGVjaWZpYyBQQU0gY29uZmlnIGZpbGVzLAorIyBhbmQgc2hvdWxkIGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBhdXRoZW50aWNhdGlvbiBtb2R1bGVzIHRoYXQgZGVmaW5lCisjIHRoZSBjZW50cmFsIGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBmb3IgdXNlIG9uIHRoZSBzeXN0ZW0KKyMgKGUuZy4sIC9ldGMvc2hhZG93LCBMREFQLCBLZXJiZXJvcywgZXRjLikuICBUaGUgZGVmYXVsdCBpcyB0byB1c2UgdGhlCisjIHRyYWRpdGlvbmFsIFVuaXggYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcy4KKworIyBoZXJlIGFyZSB0aGUgcGVyLXBhY2thZ2UgbW9kdWxlcyAodGhlICJQcmltYXJ5IiBibG9jaykKK2F1dGgJW3N1Y2Nlc3M9MSBkZWZhdWx0PWlnbm9yZV0JcGFtX3VuaXguc28gbnVsbG9rX3NlY3VyZQorIyBoZXJlJ3MgdGhlIGZhbGxiYWNrIGlmIG5vIG1vZHVsZSBzdWNjZWVkcworYXV0aAlyZXF1aXNpdGUJCQlwYW1fZGVueS5zbworIyBwcmltZSB0aGUgc3RhY2sgd2l0aCBhIHBvc2l0aXZlIHJldHVybiB2YWx1ZSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeTsKKyMgdGhpcyBhdm9pZHMgdXMgcmV0dXJuaW5nIGFuIGVycm9yIGp1c3QgYmVjYXVzZSBub3RoaW5nIHNldHMgYSBzdWNjZXNzIGNvZGUKKyMgc2luY2UgdGhlIG1vZHVsZXMgYWJvdmUgd2lsbCBlYWNoIGp1c3QganVtcCBhcm91bmQKK2F1dGgJcmVxdWlyZWQJCQlwYW1fcGVybWl0LnNvCisjIGFuZCBoZXJlIGFyZSBtb3JlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiQWRkaXRpb25hbCIgYmxvY2spCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1wYXNzd29yZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXBhc3N3b3JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4OTYwNTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1wYXNzd29yZApAQCAtMCwwICsxLDI2IEBACisjCisjIC9ldGMvcGFtLmQvY29tbW9uLXBhc3N3b3JkIC0gcGFzc3dvcmQtcmVsYXRlZCBtb2R1bGVzIGNvbW1vbiB0byBhbGwgc2VydmljZXMKKyMKKyMgVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGZyb20gb3RoZXIgc2VydmljZS1zcGVjaWZpYyBQQU0gY29uZmlnIGZpbGVzLAorIyBhbmQgc2hvdWxkIGNvbnRhaW4gYSBsaXN0IG9mIG1vZHVsZXMgdGhhdCBkZWZpbmUgdGhlIHNlcnZpY2VzIHRvIGJlCisjIHVzZWQgdG8gY2hhbmdlIHVzZXIgcGFzc3dvcmRzLiAgVGhlIGRlZmF1bHQgaXMgcGFtX3VuaXguCisKKyMgRXhwbGFuYXRpb24gb2YgcGFtX3VuaXggb3B0aW9uczoKKyMKKyMgVGhlICJzaGE1MTIiIG9wdGlvbiBlbmFibGVzIHNhbHRlZCBTSEE1MTIgcGFzc3dvcmRzLiAgV2l0aG91dCB0aGlzIG9wdGlvbiwKKyMgdGhlIGRlZmF1bHQgaXMgVW5peCBjcnlwdC4gIFByaW9yIHJlbGVhc2VzIHVzZWQgdGhlIG9wdGlvbiAibWQ1Ii4KKyMKKyMgVGhlICJvYnNjdXJlIiBvcHRpb24gcmVwbGFjZXMgdGhlIG9sZCBgT0JTQ1VSRV9DSEVDS1NfRU5BQicgb3B0aW9uIGluCisjIGxvZ2luLmRlZnMuCisjCisjIFNlZSB0aGUgcGFtX3VuaXggbWFucGFnZSBmb3Igb3RoZXIgb3B0aW9ucy4KKworIyBoZXJlIGFyZSB0aGUgcGVyLXBhY2thZ2UgbW9kdWxlcyAodGhlICJQcmltYXJ5IiBibG9jaykKK3Bhc3N3b3JkCVtzdWNjZXNzPTEgZGVmYXVsdD1pZ25vcmVdCXBhbV91bml4LnNvIG9ic2N1cmUgc2hhNTEyCisjIGhlcmUncyB0aGUgZmFsbGJhY2sgaWYgbm8gbW9kdWxlIHN1Y2NlZWRzCitwYXNzd29yZAlyZXF1aXNpdGUJCQlwYW1fZGVueS5zbworIyBwcmltZSB0aGUgc3RhY2sgd2l0aCBhIHBvc2l0aXZlIHJldHVybiB2YWx1ZSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeTsKKyMgdGhpcyBhdm9pZHMgdXMgcmV0dXJuaW5nIGFuIGVycm9yIGp1c3QgYmVjYXVzZSBub3RoaW5nIHNldHMgYSBzdWNjZXNzIGNvZGUKKyMgc2luY2UgdGhlIG1vZHVsZXMgYWJvdmUgd2lsbCBlYWNoIGp1c3QganVtcCBhcm91bmQKK3Bhc3N3b3JkCXJlcXVpcmVkCQkJcGFtX3Blcm1pdC5zbworIyBhbmQgaGVyZSBhcmUgbW9yZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIkFkZGl0aW9uYWwiIGJsb2NrKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tc2Vzc2lvbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXNlc3Npb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRhNTUxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXNlc3Npb24KQEAgLTAsMCArMSwxOSBAQAorIworIyAvZXRjL3BhbS5kL2NvbW1vbi1zZXNzaW9uIC0gc2Vzc2lvbi1yZWxhdGVkIG1vZHVsZXMgY29tbW9uIHRvIGFsbCBzZXJ2aWNlcworIworIyBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgZnJvbSBvdGhlciBzZXJ2aWNlLXNwZWNpZmljIFBBTSBjb25maWcgZmlsZXMsCisjIGFuZCBzaG91bGQgY29udGFpbiBhIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IGRlZmluZSB0YXNrcyB0byBiZSBwZXJmb3JtZWQKKyMgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2Ygc2Vzc2lvbnMgb2YgKmFueSoga2luZCAoYm90aCBpbnRlcmFjdGl2ZSBhbmQKKyMgbm9uLWludGVyYWN0aXZlKS4KKyMKKworIyBoZXJlIGFyZSB0aGUgcGVyLXBhY2thZ2UgbW9kdWxlcyAodGhlICJQcmltYXJ5IiBibG9jaykKK3Nlc3Npb24JW2RlZmF1bHQ9MV0JCQlwYW1fcGVybWl0LnNvCisjIGhlcmUncyB0aGUgZmFsbGJhY2sgaWYgbm8gbW9kdWxlIHN1Y2NlZWRzCitzZXNzaW9uCXJlcXVpc2l0ZQkJCXBhbV9kZW55LnNvCisjIHByaW1lIHRoZSBzdGFjayB3aXRoIGEgcG9zaXRpdmUgcmV0dXJuIHZhbHVlIGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5OworIyB0aGlzIGF2b2lkcyB1cyByZXR1cm5pbmcgYW4gZXJyb3IganVzdCBiZWNhdXNlIG5vdGhpbmcgc2V0cyBhIHN1Y2Nlc3MgY29kZQorIyBzaW5jZSB0aGUgbW9kdWxlcyBhYm92ZSB3aWxsIGVhY2gganVzdCBqdW1wIGFyb3VuZAorc2Vzc2lvbglyZXF1aXJlZAkJCXBhbV9wZXJtaXQuc28KKyMgYW5kIGhlcmUgYXJlIG1vcmUgcGVyLXBhY2thZ2UgbW9kdWxlcyAodGhlICJBZGRpdGlvbmFsIiBibG9jaykKK3Nlc3Npb24JcmVxdWlyZWQJcGFtX3VuaXguc28KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMTBiYjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlCkBAIC0wLDAgKzEsMTkgQEAKKyMKKyMgL2V0Yy9wYW0uZC9jb21tb24tc2Vzc2lvbi1ub25pbnRlcmFjdGl2ZSAtIHNlc3Npb24tcmVsYXRlZCBtb2R1bGVzCisjIGNvbW1vbiB0byBhbGwgbm9uLWludGVyYWN0aXZlIHNlcnZpY2VzCisjCisjIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBmcm9tIG90aGVyIHNlcnZpY2Utc3BlY2lmaWMgUEFNIGNvbmZpZyBmaWxlcywKKyMgYW5kIHNob3VsZCBjb250YWluIGEgbGlzdCBvZiBtb2R1bGVzIHRoYXQgZGVmaW5lIHRhc2tzIHRvIGJlIHBlcmZvcm1lZAorIyBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiBhbGwgbm9uLWludGVyYWN0aXZlIHNlc3Npb25zLgorIworCisjIGhlcmUgYXJlIHRoZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIlByaW1hcnkiIGJsb2NrKQorc2Vzc2lvbglbZGVmYXVsdD0xXQkJCXBhbV9wZXJtaXQuc28KKyMgaGVyZSdzIHRoZSBmYWxsYmFjayBpZiBubyBtb2R1bGUgc3VjY2VlZHMKK3Nlc3Npb24JcmVxdWlzaXRlCQkJcGFtX2Rlbnkuc28KKyMgcHJpbWUgdGhlIHN0YWNrIHdpdGggYSBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHk7CisjIHRoaXMgYXZvaWRzIHVzIHJldHVybmluZyBhbiBlcnJvciBqdXN0IGJlY2F1c2Ugbm90aGluZyBzZXRzIGEgc3VjY2VzcyBjb2RlCisjIHNpbmNlIHRoZSBtb2R1bGVzIGFib3ZlIHdpbGwgZWFjaCBqdXN0IGp1bXAgYXJvdW5kCitzZXNzaW9uCXJlcXVpcmVkCQkJcGFtX3Blcm1pdC5zbworIyBhbmQgaGVyZSBhcmUgbW9yZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIkFkZGl0aW9uYWwiIGJsb2NrKQorc2Vzc2lvbglyZXF1aXJlZAlwYW1fdW5peC5zbyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvb3RoZXIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL290aGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOTcwZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL290aGVyCkBAIC0wLDAgKzEsMjQgQEAKKyMKKyMgL2V0Yy9wYW0uZC9vdGhlciAtIHNwZWNpZnkgdGhlIFBBTSBmYWxsYmFjayBiZWhhdmlvdXIKKyMKKyMgTm90ZSB0aGF0IHRoaXMgZmlsZSBpcyB1c2VkIGZvciBhbnkgdW5zcGVjaWZpZWQgc2VydmljZTsgZm9yIGV4YW1wbGUKKyNpZiAvZXRjL3BhbS5kL2Nyb24gIHNwZWNpZmllcyBubyBzZXNzaW9uIG1vZHVsZXMgYnV0IGNyb24gY2FsbHMKKyNwYW1fb3Blbl9zZXNzaW9uLCB0aGUgc2Vzc2lvbiBtb2R1bGUgb3V0IG9mIC9ldGMvcGFtLmQvb3RoZXIgaXMKKyN1c2VkLiAgCisKKyMgV2UgdXNlIHBhbV93YXJuLnNvIHRvIGdlbmVyYXRlIHN5c2xvZyBub3RlcyB0aGF0IHRoZSAnb3RoZXInCisjZmFsbGJhY2sgcnVsZXMgYXJlIGJlaW5nIHVzZWQgKGFzIGEgaGludCB0byBzdWdnZXN0IHlvdSBzaG91bGQgc2V0dXAKKyNzcGVjaWZpYyBQQU0gcnVsZXMgZm9yIHRoZSBzZXJ2aWNlIGFuZCBhaWQgdG8gZGVidWdnaW5nKS4gVGhlbiB0byBiZQorI3NlY3VyZSwgZGVueSBhY2Nlc3MgdG8gYWxsIHNlcnZpY2VzIGJ5IGRlZmF1bHQuIAorCithdXRoICAgICAgIHJlcXVpcmVkICAgICBwYW1fd2Fybi5zbworYXV0aCAgICAgICByZXF1aXJlZCAgICAgcGFtX2Rlbnkuc28KKworYWNjb3VudCAgICByZXF1aXJlZCAgICAgcGFtX3dhcm4uc28KK2FjY291bnQgICAgcmVxdWlyZWQgICAgIHBhbV9kZW55LnNvCisKK3Bhc3N3b3JkICAgcmVxdWlyZWQgICAgIHBhbV93YXJuLnNvCitwYXNzd29yZCAgIHJlcXVpcmVkICAgICBwYW1fZGVueS5zbworCitzZXNzaW9uICAgIHJlcXVpcmVkICAgICBwYW1fd2Fybi5zbworc2Vzc2lvbiAgICByZXF1aXJlZCAgICAgcGFtX2Rlbnkuc28KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW1fMS4yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtXzEuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMzA5N2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtXzEuMi4xLmJiCkBAIC0wLDAgKzEsMTY5IEBACitTVU1NQVJZID0gIkxpbnV4LVBBTSAoUGx1Z2dhYmxlIEF1dGhlbnRpY2F0aW9uIE1vZHVsZXMpIgorREVTQ1JJUFRJT04gPSAiTGludXgtUEFNIChQbHVnZ2FibGUgQXV0aGVudGljYXRpb24gTW9kdWxlcyBmb3IgTGludXgpLCBhIGZsZXhpYmxlIG1lY2hhbmlzbSBmb3IgYXV0aGVudGljYXRpbmcgdXNlcnMiCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbGludXgtcGFtLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2xpbnV4LXBhbS9uZXd0aWNrZXQiCitTRUNUSU9OID0gImJhc2UiCisjIFBBTSBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIEdQTCBhbmQgQlNELgorIyAvZXRjL3BhbS5kIGNvbWVzIGZyb20gRGViaWFuIGxpYnBhbS1ydW50aW1lIGluIDIwMDktMTEgKGF0IHRoYXQgdGltZQorIyBsaWJwYW0tcnVudGltZS0xLjAuMSBpcyBHUEx2MispLCBieSBvcGVuZW1iZWRkZWQKK0xJQ0VOU0UgPSAiR1BMdjIrIHwgQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ViNWMxYmY4NTRlODg4MTAwNWQ2NzM1OTllZTc0ZDMiCisKK1NSQ19VUkkgPSAiaHR0cDovL2xpbnV4LXBhbS5vcmcvbGlicmFyeS9MaW51eC1QQU0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly85OV9wYW0gXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLWFjY291bnQgXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLWF1dGggXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLXBhc3N3b3JkIFwKKyAgICAgICAgICAgZmlsZTovL3BhbS5kL2NvbW1vbi1zZXNzaW9uIFwKKyAgICAgICAgICAgZmlsZTovL3BhbS5kL2NvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlIFwKKyAgICAgICAgICAgZmlsZTovL3BhbS5kL290aGVyIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnBhbS14dGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4c2VwYnVpbGQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGFtLXNlY3VyaXR5LWFic3RyYWN0LXNlY3VyZXR0eS1oYW5kbGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0tdW5peC1udWxsb2stc2VjdXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnBhbS14dGVzdHMtcmVtb3ZlLWJhc2gtZGVwZW5kZW5jeS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jcnlwdF9jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjlkYzUzMDY3NTU2ZDJkZDU2NzgwOGZkNTA5NTE5ZGQ2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM0MmIxMjExYzBkM2IyMDNhN2RmMjU0MGE1YjAzYTQyOGEwODdiZDhhNDhjMTdlNDlhZTI2OGY5OTJiMzM0ZDkiCisKK1NSQ19VUklfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiBmaWxlOi8vcGFtLW5vLWlubmV0Z3IucGF0Y2giCitTUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiIGZpbGU6Ly9wYW0tbm8taW5uZXRnci5wYXRjaCIKKworREVQRU5EUyA9ICJiaXNvbiBmbGV4IGZsZXgtbmF0aXZlIGNyYWNrbGliIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWRiLXVuaXF1ZW5hbWU9X3BhbSBcCisgICAgICAgICAgICAgICAgLS1pbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0vc2VjdXJpdHkgXAorICAgICAgICAgICAgICAgIC0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbmlzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtcmVnZW5lcmF0ZS1kb2N1IFwKKwkJLS1kaXNhYmxlLXByZWx1ZGUiCisKK0NGTEFHU19hcHBlbmQgPSAiIC1mUElDICIKKworUFIgPSAicjUiCisKK1MgPSAiJHtXT1JLRElSfS9MaW51eC1QQU0tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUdbYXVkaXRdID0gIi0tZW5hYmxlLWF1ZGl0LC0tZGlzYWJsZS1hdWRpdCxhdWRpdCwiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1ydW50aW1lICR7UE59LXh0ZXN0cyIKK0ZJTEVTXyR7UE59ID0gIiR7YmFzZV9saWJkaXJ9L2xpYioke1NPTElCU30iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Ly5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5L3BhbV9maWx0ZXIvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9MaW51eC1QQU0veHRlc3RzLy5kZWJ1ZyIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8qLmxhICR7YmFzZV9saWJkaXJ9LyoubGEgJHtiYXNlX2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSIKK0ZJTEVTXyR7UE59LXJ1bnRpbWUgPSAiJHtzeXNjb25mZGlyfSIKK0ZJTEVTXyR7UE59LXh0ZXN0cyA9ICIke2RhdGFkaXJ9L0xpbnV4LVBBTS94dGVzdHMiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl4ke01MUFJFRklYfXBhbS1wbHVnaW4tLioiCisKK2RlZiBnZXRfbXVsdGlsaWJfYml0KGQpOgorICAgIGJhc2VsaWIgPSBkLmdldFZhcignYmFzZWxpYicsIFRydWUpIG9yICcnCisgICAgcmV0dXJuIGJhc2VsaWIucmVwbGFjZSgnbGliJywgJycpCisKK2xpYnBhbV9zdWZmaXggPSAic3VmZml4JHtAZ2V0X211bHRpbGliX2JpdChkKX0iCisKK1JQUk9WSURFU18ke1BOfSArPSAiJHtQTn0tJHtsaWJwYW1fc3VmZml4fSIKK1JQUk9WSURFU18ke1BOfS1ydW50aW1lICs9ICIke1BOfS1ydW50aW1lLSR7bGlicGFtX3N1ZmZpeH0iCisKK1JERVBFTkRTXyR7UE59LXJ1bnRpbWUgPSAiJHtQTn0tJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLWRlbnktJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLXBlcm1pdC0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4td2Fybi0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tdW5peC0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAiCitSREVQRU5EU18ke1BOfS14dGVzdHMgPSAiJHtQTn0tJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLWFjY2Vzcy0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tZGVidWctJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLWNyYWNrbGliLSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1wd2hpc3RvcnktJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLXN1Y2NlZWQtaWYtJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLXRpbWUtJHtsaWJwYW1fc3VmZml4fSBcCisgICAgY29yZXV0aWxzIgorCisjIEZJWE1FOiBOYXRpdmUgc3VmZml4IGJyZWFrcyBoZXJlLCBkaXNhYmxlIGl0IGZvciBub3cKK1JSRUNPTU1FTkRTXyR7UE59ID0gIiR7UE59LXJ1bnRpbWUtJHtsaWJwYW1fc3VmZml4fSIKK1JSRUNPTU1FTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBkZWYgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZShwbiwgZGlyLCBmaWxlKToKKyAgICAgICAgbmYgPSBvcy5wYXRoLmpvaW4oZGlyLCBmaWxlKQorICAgICAgICBvZiA9IGQuZ2V0VmFyKCdGSUxFU18nICsgcG4sIFRydWUpCisgICAgICAgIGlmIG9mOgorICAgICAgICAgICAgbmYgPSBvZiArICIgIiArIG5mCisgICAgICAgIGQuc2V0VmFyKCdGSUxFU18nICsgcG4sIG5mKQorCisgICAgZGVmIHBhbV9wbHVnaW5faG9vayhmaWxlLCBwa2csIHBhdHRlcm4sIGZvcm1hdCwgYmFzZW5hbWUpOgorICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIGxpYnBhbV9zdWZmaXggPSBkLmdldFZhcignbGlicGFtX3N1ZmZpeCcsIFRydWUpCisKKyAgICAgICAgcmRlcHMgPSBkLmdldFZhcignUkRFUEVORFNfJyArIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgcmRlcHM6CisgICAgICAgICAgICByZGVwcyA9IHJkZXBzICsgIiAiICsgcG4gKyAiLSIgKyBsaWJwYW1fc3VmZml4CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZGVwcyA9IHBuICsgIi0iICsgbGlicGFtX3N1ZmZpeAorICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJyArIHBrZywgcmRlcHMpCisKKyAgICAgICAgcHJvdmlkZXMgPSBkLmdldFZhcignUlBST1ZJREVTXycgKyBwa2csIFRydWUpCisgICAgICAgIGlmIHByb3ZpZGVzOgorICAgICAgICAgICAgcHJvdmlkZXMgPSBwcm92aWRlcyArICIgIiArIHBrZyArICItIiArIGxpYnBhbV9zdWZmaXgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByb3ZpZGVzID0gcGtnICsgIi0iICsgbGlicGFtX3N1ZmZpeAorICAgICAgICBkLnNldFZhcignUlBST1ZJREVTXycgKyBwa2csIHByb3ZpZGVzKQorCisgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAnJworICAgIGR2YXIgPSBiYi5kYXRhLmV4cGFuZCgnJHtXT1JLRElSfS9wYWNrYWdlJywgZCwgVHJ1ZSkKKyAgICBwYW1fbGliZGlyID0gZC5leHBhbmQoJyR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5JykKKyAgICBwYW1fc2JpbmRpciA9IGQuZXhwYW5kKCcke3NiaW5kaXJ9JykKKyAgICBwYW1fZmlsdGVyZGlyID0gZC5leHBhbmQoJyR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5L3BhbV9maWx0ZXInKQorICAgIHBhbV9wa2duYW1lID0gbWxwcmVmaXggKyAncGFtLXBsdWdpbiVzJworCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGFtX2xpYmRpciwgJ15wYW0oLiopXC5zbyQnLCBwYW1fcGtnbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAnUEFNIHBsdWdpbiBmb3IgJXMnLCBob29rPXBhbV9wbHVnaW5faG9vaywgZXh0cmFfZGVwZW5kcz0nJykKKyAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tdW5peCcgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICd1bml4X2Noa3B3ZCcpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLXVuaXgnICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAndW5peF91cGRhdGUnKQorICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi10YWxseScgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICdwYW1fdGFsbHknKQorICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi10YWxseTInICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAncGFtX3RhbGx5MicpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLXRpbWVzdGFtcCcgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICdwYW1fdGltZXN0YW1wX2NoZWNrJykKKyAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tbWtob21lZGlyJyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ21raG9tZWRpcl9oZWxwZXInKQorICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi1jb25zb2xlJyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3BhbV9jb25zb2xlX2FwcGx5JykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwYW1fZmlsdGVyZGlyLCAnXiguKikkJywgJ3BhbS1maWx0ZXItJXMnLCAnUEFNIGZpbHRlciBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnKQorfQorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIGRvbid0IGluc3RhbGwgL3Zhci9ydW4gd2hlbiBwb3B1bGF0aW5nIHJvb3Rmcy4gRG8gaXQgdGhyb3VnaCB2b2xhdGlsZQorCXJtIC1yZiAke0R9JHtsb2NhbHN0YXRlZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS85OV9wYW0gJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcGFtLmQvKiAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC8KKworCSMgVGhlIGxzYiByZXF1aXJlcyB1bml4X2Noa3B3ZCBoYXMgc2V0dWlkIHBlcm1pc3Npb24KKwljaG1vZCA0NzU1ICR7RH0ke3NiaW5kaXJ9L3VuaXhfY2hrcHdkCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWVjaG8gInNlc3Npb24gb3B0aW9uYWwgcGFtX3N5c3RlbWQuc28iID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1zZXNzaW9uCisJZmkKK30KKworcHl0aG9uIGRvX3BhbV9zYW5pdHkgKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgYmIud2FybigiQnVpbGRpbmcgbGlicGFtIGJ1dCAncGFtJyBpc24ndCBpbiBESVNUUk9fRkVBVFVSRVMsIFBBTSB3b24ndCB3b3JrIGNvcnJlY3RseSIpCit9CithZGR0YXNrIHBhbV9zYW5pdHkgYmVmb3JlIGRvX2NvbmZpZ3VyZQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayBuYXRpdmUiCisKK0NPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1zZXNzaW9uIgorQ09ORkZJTEVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLWF1dGgiCitDT05GRklMRVNfJHtQTn0tcnVudGltZSArPSAiJHtzeXNjb25mZGlyfS9wYW0uZC9jb21tb24tcGFzc3dvcmQiCitDT05GRklMRVNfJHtQTn0tcnVudGltZSArPSAiJHtzeXNjb25mZGlyfS9wYW0uZC9jb21tb24tc2Vzc2lvbi1ub25pbnRlcmFjdGl2ZSIKK0NPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1hY2NvdW50IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtSW5jbHVkZS1mY250bC5oLWluLXBsYXRmb3JtX2RlZnMuaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy8wMDAxLUluY2x1ZGUtZmNudGwuaC1pbi1wbGF0Zm9ybV9kZWZzLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAzNzZjZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy8wMDAxLUluY2x1ZGUtZmNudGwuaC1pbi1wbGF0Zm9ybV9kZWZzLmgucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSBkNzhkZDA4N2M0ZWM0NzE1YWFiNWZlMTE1NjY4ZTcyNjA0NmVjZDc2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTg6MTY6MDUgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gSW5jbHVkZSBmY250bC5oIGluIC9wbGF0Zm9ybV9kZWZzLmgKKworZXhwb3NlZCB3aGVuIGNvbXBpbGluZyB1c2luZyBtdXNsCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGlicGFydGVkL2ZzL3hmcy9wbGF0Zm9ybV9kZWZzLmggfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2xpYnBhcnRlZC9mcy94ZnMvcGxhdGZvcm1fZGVmcy5oIGIvbGlicGFydGVkL2ZzL3hmcy9wbGF0Zm9ybV9kZWZzLmgKK2luZGV4IDJiNTU3NTIuLjMyYmQzZDMgMTAwNjQ0CistLS0gYS9saWJwYXJ0ZWQvZnMveGZzL3BsYXRmb3JtX2RlZnMuaAorKysrIGIvbGlicGFydGVkL2ZzL3hmcy9wbGF0Zm9ybV9kZWZzLmgKK0BAIC00Miw2ICs0Miw3IEBACisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFhNGJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2dudWxpYi5tayBiL2xpYi9nbnVsaWIubWsKK2luZGV4IGUxZDc0ZGIuLmMwZTkyZGQgMTAwNjQ0CistLS0gYS9saWIvZ251bGliLm1rCisrKysgYi9saWIvZ251bGliLm1rCitAQCAtMTg4Miw3ICsxODgyLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL01ha2VmaWxlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOTBiZTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvTWFrZWZpbGUKQEAgLTAsMCArMSwyODUgQEAKK2FtX190dHlfY29sb3JzX2R1bW15ID0gXAorICBtZ249IHJlZD0gZ3JuPSBsZ249IGJsdT0gYnJnPSBzdGQ9OyBcCisgIGFtX19jb2xvcl90ZXN0cz1ubworCithbV9fdHR5X2NvbG9ycyA9IFwKKyQoYW1fX3R0eV9jb2xvcnNfZHVtbXkpOyBcCit0ZXN0ICJYJChBTV9DT0xPUl9URVNUUykiICE9IFhubyBcCismJiB0ZXN0ICJYJCRURVJNIiAhPSBYZHVtYiBcCismJiB7IHRlc3QgIlgkKEFNX0NPTE9SX1RFU1RTKSIgPSBYYWx3YXlzIHx8IHRlc3QgLXQgMSAyPi9kZXYvbnVsbDsgfSBcCismJiB7IFwKKyAgYW1fX2NvbG9yX3Rlc3RzPXllczsgXAorICByZWQ9JxtbMDszMW0nOyBcCisgIGdybj0nG1swOzMybSc7IFwKKyAgbGduPScbWzE7MzJtJzsgXAorICBibHU9JxtbMTszNG0nOyBcCisgIG1nbj0nG1swOzM1bSc7IFwKKyAgYnJnPScbWzFtJzsgXAorICBzdGQ9JxtbbSc7IFwKK30KKworYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fcnN0X3RpdGxlID0geyBzZWQgJ3MvLiovICAgJiAgIC87aDtzLy4vPS9nO3A7eDtzLyAqJCQvLztwO2cnICYmIGVjaG87IH0KK2FtX19yc3Rfc2VjdGlvbiA9IHsgc2VkICdwO3MvLi89L2c7JyAmJiBlY2hvOyB9CithbV9fc2hfZV9zZXR1cCA9IGNhc2UgJCQtIGluICplKikgc2V0ICtlOzsgZXNhYworCithbV9fY29tbW9uX2RyaXZlcl9mbGFncyA9IFwKKyAgLS1jb2xvci10ZXN0cyAiJCRhbV9fY29sb3JfdGVzdHMiIFwKKyAgLS1lbmFibGUtaGFyZC1lcnJvcnMgIiQkYW1fX2VuYWJsZV9oYXJkX2Vycm9ycyIgXAorICAtLWV4cGVjdC1mYWlsdXJlICIkJGFtX19leHBlY3RfZmFpbHVyZSIKK2FtX19jaGVja19wcmUgPSBcCiskKGFtX19zaF9lX3NldHVwKTsJCQkJCVwKKyQoYW1fX3ZwYXRoX2Fkal9zZXR1cCkgJChhbV9fdnBhdGhfYWRqKQkJCVwKKyQoYW1fX3R0eV9jb2xvcnMpOwkJCQkJXAorc3JjZGlyPSQoc3JjZGlyKTsgZXhwb3J0IHNyY2RpcjsJCQlcCithbV9fb2Rpcj1gZWNobyAiLi8kQCIgfCBzZWQgJ3N8L1teL10qJCR8fCdgOwkJXAordGVzdCAieCQkYW1fX29kaXIiID0geC4gfHwgJChNS0RJUl9QKSAiJCRhbV9fb2RpciIgfHwgZXhpdCAkJD87CVwKK2lmIHRlc3QgLWYgIi4vJCRmIjsgdGhlbiBkaXI9Li87CQkJXAorZWxpZiB0ZXN0IC1mICIkJGYiOyB0aGVuIGRpcj07CQkJCVwKK2Vsc2UgZGlyPSIkKHNyY2RpcikvIjsgZmk7CQkJCVwKK3RzdD0kJGRpciQkZjsgbG9nPSckQCc7IAkJCQlcCitpZiB0ZXN0IC1uICckKERJU0FCTEVfSEFSRF9FUlJPUlMpJzsgdGhlbgkJXAorICBhbV9fZW5hYmxlX2hhcmRfZXJyb3JzPW5vOyAJCQkJXAorZWxzZQkJCQkJCQlcCisgIGFtX19lbmFibGVfaGFyZF9lcnJvcnM9eWVzOyAJCQkJXAorZmk7IAkJCQkJCQlcCiskKEFNX1RFU1RTX0VOVklST05NRU5UKSAkKFRFU1RTX0VOVklST05NRU5UKQorCithbV9fc2V0X1RFU1RTX2Jhc2VzID0gXAorICBiYXNlcz0nJChURVNUX0xPR1MpJzsgXAorICBiYXNlcz1gZm9yIGkgaW4gJCRiYXNlczsgZG8gZWNobyAkJGk7IGRvbmUgfCBzZWQgJ3MvXC5sb2ckJC8vJ2A7IFwKKyAgYmFzZXM9YGVjaG8gJCRiYXNlc2AKKworUkVDSEVDS19MT0dTID0gJChURVNUX0xPR1MpCitURVNUX1NVSVRFX0xPRyA9IHRlc3Qtc3VpdGUubG9nCithbV9fdGVzdF9sb2dzMSA9ICQoVEVTVFM6PS5sb2cpCithbV9fdGVzdF9sb2dzMiA9ICQoYW1fX3Rlc3RfbG9nczE6LmxvZz0ubG9nKQorVEVTVF9MT0dTID0gJChhbV9fdGVzdF9sb2dzMjouc2gubG9nPS5sb2cpCitTSF9MT0dfRFJJVkVSID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvdGVzdC1kcml2ZXIKK1NIX0xPR19DT01QSUxFID0gJChTSF9MT0dfQ09NUElMRVIpCisKK2FtX19zZXRfYiA9IFwKKyAgY2FzZSAnJEAnIGluIFwKKyAgICAqLyopIFwKKyAgICAgIGNhc2UgJyQqJyBpbiBcCisgICAgICAgICovKikgYj0nJConOzsgXAorICAgICAgICAgICopIGI9YGVjaG8gJyRAJyB8IHNlZCAncy9cLmxvZyQkLy8nYDsgXAorICAgICAgIGVzYWM7OyBcCisgICAgKikgXAorICAgICAgYj0nJConOzsgXAorICBlc2FjCisKK01LRElSX1AgPSAvYmluL21rZGlyIC1wCitTSEVMTCA9IC9iaW4vYmFzaAorVkVSU0lPTiA9IDMuMQorUEFDS0FHRV9TVFJJTkcgPSBHTlUgcGFydGVkIDMuMQorUEFDS0FHRV9CVUdSRVBPUlQgPSBidWctcGFydGVkQGdudS5vcmcKK2Fic19zcmNkaXIgPSAkKFBXRCkKK2Fic190b3BfYnVpbGRkaXIgPSAkKFBXRCkvLi4KK2Fic190b3Bfc3JjZGlyID0gJChQV0QpLy4uCitzcmNkaXIgPSAuCit0b3Bfc3JjZGlyID0gLi4KK3N1YmRpciA9IHRlc3RzCitTSF9MT0dfQ09NUElMRVIgPSAkKFNIRUxMKQorCitURVNUUyA9IFwKKyAgaGVscC12ZXJzaW9uLnNoIFwKKyAgdDAwMDAtYmFzaWMuc2ggXAorICB0MDAwMS10aW55LnNoIFwKKyAgdDAwMTAtc2NyaXB0LW5vLWN0cmwtY2hhcnMuc2ggXAorICB0MDEwMC1wcmludC5zaCBcCisgIHQwMTAxLXByaW50LWVtcHR5LnNoIFwKKyAgdDAyMDAtZ3B0LnNoIFwKKyAgdDAyMDEtZ3B0LnNoIFwKKyAgdDAyMDItZ3B0LXBtYnIuc2ggXAorICB0MDIwMy1ncHQtdGlueS1kZXZpY2UtYWJvcnQuc2ggXAorICB0MDIwMy1ncHQtc2hvcnRlbmVkLWRldmljZS1wcmltYXJ5LXZhbGlkLnNoIFwKKyAgdDAyMDUtZ3B0LWxpc3QtY2xvYmJlcnMtcG1ici5zaCBcCisgIHQwMjA2LWdwdC1wcmludC13aXRoLWNvcnJ1cHQtcHJpbWFyeS1jbG9iYmVycy1wbWJyLnNoIFwKKyAgdDAyMDctSUVDLWJpbmFyeS1ub3RhdGlvbi5zaCBcCisgIHQwMjA4LW1rcGFydC1lbmQtaW4tSUVDLnNoIFwKKyAgdDAyMDktZ3B0LXBtYnJfYm9vdC5zaCBcCisgIHQwMjEwLWdwdC1yZXNpemVkLXBhcnRpdGlvbi1lbnRyeS1hcnJheS5zaCBcCisgIHQwMjExLWdwdC1yZXdyaXRlLWhlYWRlci5zaCBcCisgIHQwMjEyLWdwdC1tYW55LXBhcnRpdGlvbnMuc2ggXAorICB0MDIyMC1ncHQtbXNmdHJlcy5zaCBcCisgIHQwMjUwLWdwdC5zaCBcCisgIHQwMjgwLWdwdC1jb3JydXB0LnNoIFwKKyAgdDAzMDAtZG9zLW9uLWdwdC5zaCBcCisgIHQwNDAwLWxvb3AtY2xvYmJlci1pbmZsb29wLnNoIFwKKyAgdDA1MDAtZHVwLWNsb2JiZXIuc2ggXAorICB0MDUwMS1kdXBsaWNhdGUuc2ggXAorICB0MTEwMC1idXN5LWxhYmVsLnNoIFwKKyAgdDExMDEtYnVzeS1wYXJ0aXRpb24uc2ggXAorICB0MTcwMC1wcm9iZS1mcy5zaCBcCisgIHQyMjAwLWRvcy1sYWJlbC1yZWNvZy5zaCBcCisgIHQyMjAxLXBjOTgtbGFiZWwtcmVjb2cuc2ggXAorICB0MjMwMC1kb3MtbGFiZWwtZXh0ZW5kZWQtYm9vdGNvZGUuc2ggXAorICB0MjMxMC1kb3MtZXh0ZW5kZWQtMi1zZWN0b3ItbWluLW9mZnNldC5zaCBcCisgIHQyNDAwLWRvcy1oZnMtcGFydGl0aW9uLXR5cGUuc2ggXAorICB0MjUwMC1wcm9iZS1jb3JydXB0LWhmcy5zaCBcCisgIHQzMDAwLXJlc2l6ZS1mcy5zaCBcCisgIHQzMjAwLXR5cGUtY2hhbmdlLnNoIFwKKyAgdDMzMDAtcGFsby1wcmVwLnNoIFwKKyAgdDMzMTAtZmxhZ3Muc2ggXAorICB0MzQwMC13aG9sZS1kaXNrLUZBVC1wYXJ0aXRpb24uc2ggXAorICB0NDAwMC1zdW4tcmFpZC10eXBlLnNoIFwKKyAgdDQwMDEtc3VuLXZ0b2Muc2ggXAorICB0NDEwMC1tc2Rvcy1wYXJ0aXRpb24tbGltaXRzLnNoIFwKKyAgdDQxMDAtZHZoLXBhcnRpdGlvbi1saW1pdHMuc2ggXAorICB0NDEwMC1tc2Rvcy1zdGFydGluZy1zZWN0b3Iuc2ggXAorICB0NDIwMC1wYXJ0cHJvYmUuc2ggXAorICB0NDMwMC1uaWxmczItdGlueS5zaCBcCisgIHQ1MDAwLXRhZ3Muc2ggXAorICB0NjAwMC1kbS5zaCBcCisgIHQ2MDAxLXBzZXAuc2ggXAorICB0NjEwMC1tZHJhaWQtcGFydGl0aW9ucy5zaCBcCisgIHQ3MDAwLXNjcmlwdGluZy5zaCBcCisgIHQ4MDAwLWxvb3Auc2ggXAorICB0ODAwMS1sb29wLWJsa3BnLnNoIFwKKyAgdDkwMTAtYmlnLXNlY3Rvci5zaCBcCisgIHQ5MDIwLWFsaWdubWVudC5zaCBcCisgIHQ5MDIxLW1heGltYS5zaCBcCisgIHQ5MDIyLW9uZS11bml0LXNuYXAuc2ggXAorICB0OTAyMy12YWx1ZS1sdC1vbmUuc2ggXAorICB0OTAzMC1hbGlnbi1jaGVjay5zaCBcCisgIHQ5MDQwLW1hbnktcGFydGl0aW9ucy5zaCBcCisgIHQ5MDQxLXVuZGV0ZWN0ZWQtaW4tdXNlLTE2dGgtcGFydGl0aW9uLnNoIFwKKyAgdDkwNDItZG9zLXBhcnRpdGlvbi1saW1pdC5zaCBcCisgIHQ5MDUwLXBhcnRpdGlvbi10YWJsZS10eXBlcy5zaAorCitURVNUU19FTlZJUk9OTUVOVCA9IFwKKyAgZXhwb3J0CQkJCQlcCisgIGFic190b3BfYnVpbGRkaXI9JyQoYWJzX3RvcF9idWlsZGRpciknCVwKKyAgYWJzX3RvcF9zcmNkaXI9JyQoYWJzX3RvcF9zcmNkaXIpJwkJXAorICBhYnNfc3JjZGlyPSckKGFic19zcmNkaXIpJwkJCVwKKyAgYnVpbHRfcHJvZ3JhbXM9cGFydGVkCQkJCVwKKyAgc3JjZGlyPSckKHNyY2RpciknCQkJCVwKKyAgdG9wX3NyY2Rpcj0nJCh0b3Bfc3JjZGlyKScJCQlcCisgIFZFUlNJT049JChWRVJTSU9OKQkJCQlcCisgIDsgOT4mMgorCisuU1VGRklYRVM6IC5sb2cKKworJChURVNUX1NVSVRFX0xPRyk6ICQoVEVTVF9MT0dTKQorCUAkKGFtX19zaF9lX3NldHVwKTsgJChhbV9fdHR5X2NvbG9ycyk7ICQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKKwl3cz0nWyAJXSc7IFwKKwlyZXN1bHRzPWBmb3IgYiBpbiAkJGJhc2VzOyBkbyBlY2hvICQkYi50cnM7IGRvbmVgOyBcCisJdGVzdCAtbiAiJCRyZXN1bHRzIiB8fCByZXN1bHRzPS9kZXYvbnVsbDsgXAorCWFsbD1gICBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6IiAgICAgICAgICAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJcGFzcz1gIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlBBU1MiICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlmYWlsPWAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqRkFJTCIgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCXNraXA9YCBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypTS0lQIiAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJeGZhaWw9YGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlhGQUlMIiAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwl4cGFzcz1gZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqWFBBU1MiICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCWVycm9yPWBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypFUlJPUiIgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJaWYgdGVzdCBgZXhwciAkJGZhaWwgKyAkJHhwYXNzICsgJCRlcnJvcmAgLWVxIDA7IHRoZW4gXAorCSAgc3VjY2Vzcz10cnVlOyBcCisJZWxzZSBcCisJICBzdWNjZXNzPWZhbHNlOyBcCisJZmk7IFwKKwlicj0nPT09PT09PT09PT09PT09PT09PSc7IGJyPSQkYnIkJGJyJCRiciQkYnI7IFwKKwlyZXN1bHRfY291bnQgKCkgXAorCXsgXAorCSAgICBpZiB0ZXN0IHgiJCQxIiA9IHgiLS1tYXliZS1jb2xvciI7IHRoZW4gXAorCSAgICAgIG1heWJlX2NvbG9yaXplPXllczsgXAorCSAgICBlbGlmIHRlc3QgeCIkJDEiID0geCItLW5vLWNvbG9yIjsgdGhlbiBcCisJICAgICAgbWF5YmVfY29sb3JpemU9bm87IFwKKwkgICAgZWxzZSBcCisJICAgICAgZWNobyAiJEA6IGludmFsaWQgJ3Jlc3VsdF9jb3VudCcgdXNhZ2UiID4mMjsgZXhpdCA0OyBcCisJICAgIGZpOyBcCisJICAgIHNoaWZ0OyBcCisJICAgIGRlc2M9JCQxIGNvdW50PSQkMjsgXAorCSAgICBpZiB0ZXN0ICQkbWF5YmVfY29sb3JpemUgPSB5ZXMgJiYgdGVzdCAkJGNvdW50IC1ndCAwOyB0aGVuIFwKKwkgICAgICBjb2xvcl9zdGFydD0kJDMgY29sb3JfZW5kPSQkc3RkOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGNvbG9yX3N0YXJ0PSBjb2xvcl9lbmQ9OyBcCisJICAgIGZpOyBcCisJICAgIGVjaG8gIiQke2NvbG9yX3N0YXJ0fSMgJCRkZXNjICQkY291bnQkJHtjb2xvcl9lbmR9IjsgXAorCX07IFwKKwljcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAoKSBcCisJeyBcCisJICByZXN1bHRfY291bnQgJCQxICJUT1RBTDoiICQkYWxsICAgIiQkYnJnIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiUEFTUzogIiAkJHBhc3MgICIkJGdybiI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlNLSVA6ICIgJCRza2lwICAiJCRibHUiOyBcCisJICByZXN1bHRfY291bnQgJCQxICJYRkFJTDoiICQkeGZhaWwgIiQkbGduIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiRkFJTDogIiAkJGZhaWwgICIkJHJlZCI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlhQQVNTOiIgJCR4cGFzcyAiJCRyZWQiOyBcCisJICByZXN1bHRfY291bnQgJCQxICJFUlJPUjoiICQkZXJyb3IgIiQkbWduIjsgXAorCX07IFwKKwl7CQkJCQkJCQlcCisJICBlY2hvICIkKFBBQ0tBR0VfU1RSSU5HKTogJChzdWJkaXIpLyQoVEVTVF9TVUlURV9MT0cpIiB8CVwKKwkgICAgJChhbV9fcnN0X3RpdGxlKTsJCQkJCQlcCisJICBjcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAtLW5vLWNvbG9yOwkJCQlcCisJICBlY2hvOwkJCQkJCQkJXAorCSAgZWNobyAiLi4gY29udGVudHM6OiA6ZGVwdGg6IDIiOwkJCQlcCisJICBlY2hvOwkJCQkJCQkJXAorCSAgZm9yIGkgaW4gJCRiYXNlczsgZG8JCQkJCQlcCisJICAgIGlmIGdyZXAgIl4kJHdzKjpjb3B5LWluLWdsb2JhbC1sb2c6JCR3cypubyQkd3MqJCQiICQkaS50cnMgXAorCSAgICAgICAgID4vZGV2L251bGw7IHRoZW4gY29udGludWU7IFwKKwkgICAgZmk7IFwKKwkgICAgZ2xvYl9yZXM9YHNlZCAtbiAtZSAicy8kJHdzKiQkLy8iIFwKKwkgICAgICAgICAgICAgICAgICAgICAtZSAicy9eJCR3cyo6Z2xvYmFsLXRlc3QtcmVzdWx0OiQkd3MqLy9wIiBcCisJCSAgICAgICAgJCRpLnRyc2A7IFwKKwkgICAgdGVzdCAtbiAiJCRnbG9iX3JlcyIgfHwgZ2xvYl9yZXM9UlVOOyBcCisJICAgIGVjaG8gIiQkZ2xvYl9yZXM6ICQkaSIgfCAkKGFtX19yc3Rfc2VjdGlvbik7IFwKKwkgICAgaWYgdGVzdCAhIC1yICQkaS5sb2c7IHRoZW4gXAorCSAgICAgIGVjaG8gImZhdGFsOiBtYWtpbmcgJEA6ICQkaS5sb2cgaXMgdW5yZWFkYWJsZSIgPiYyOyBcCisJICAgICAgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNhdCAkJGkubG9nOyBlY2hvOyBcCisJICBkb25lOwlcCisJfSA+JChURVNUX1NVSVRFX0xPRykudG1wOwkJCQkJXAorCW12ICQoVEVTVF9TVUlURV9MT0cpLnRtcCAkKFRFU1RfU1VJVEVfTE9HKTsJCQlcCisJaWYgJCRzdWNjZXNzOyB0aGVuCQkJCQkJXAorCSAgY29sPSIkJGdybiI7CQkJCQkJCVwKKwkgZWxzZQkJCQkJCQkJXAorCSAgY29sPSIkJHJlZCI7CQkJCQkJCVwKKwkgIHRlc3QgeCIkJFZFUkJPU0UiID0geCB8fCBjYXQgJChURVNUX1NVSVRFX0xPRyk7CQlcCisJZmk7CQkJCQkJCQlcCisJZWNobyAiJCR7Y29sfSQkYnIkJHtzdGR9IjsgCQkJCQlcCisJZWNobyAiJCR7Y29sfVRlc3RzdWl0ZSBzdW1tYXJ5IGZvciAkKFBBQ0tBR0VfU1RSSU5HKSQke3N0ZH0iOwlcCisJZWNobyAiJCR7Y29sfSQkYnIkJHtzdGR9IjsgCQkJCQlcCisJY3JlYXRlX3Rlc3RzdWl0ZV9yZXBvcnQgLS1tYXliZS1jb2xvcjsJCQkJXAorCWVjaG8gIiQkY29sJCRiciQkc3RkIjsJCQkJCQlcCisJaWYgJCRzdWNjZXNzOyB0aGVuIDo7IGVsc2UJCQkJCVwKKwkgIGVjaG8gIiQke2NvbH1TZWUgJChzdWJkaXIpLyQoVEVTVF9TVUlURV9MT0cpJCR7c3RkfSI7CQlcCisJICBpZiB0ZXN0IC1uICIkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IHRoZW4JCQlcCisJICAgIGVjaG8gIiQke2NvbH1QbGVhc2UgcmVwb3J0IHRvICQoUEFDS0FHRV9CVUdSRVBPUlQpJCR7c3RkfSI7CVwKKwkgIGZpOwkJCQkJCQkJXAorCSAgZWNobyAiJCRjb2wkJGJyJCRzdGQiOwkJCQkJXAorCWZpOwkJCQkJCQkJXAorCSQkc3VjY2VzcyB8fCBleGl0IDEKKworY2hlY2stVEVTVFM6CisJQGlmIHRlc3QgJEAgIT0gcmVjaGVjazsgdGhlbiBcCisJICAgbGlzdD0nJChSRUNIRUNLX0xPR1MpJzsgXAorCSAgIHRlc3QgLXogIiQkbGlzdCIgfHwgcm0gLWYgJCRsaXN0OyBcCisJIGZpCisJQHRlc3QgLXogIiQoVEVTVF9TVUlURV9MT0cpIiB8fCBybSAtZiAkKFRFU1RfU1VJVEVfTE9HKQorCUB3cz0nWyAJXSc7IFwKKwlsb2dfbGlzdD0nJyB0cnNfbGlzdD0nJzsgJChhbV9fc2V0X1RFU1RTX2Jhc2VzKTsgXAorCWZvciBpIGluICQkYmFzZXM7IGRvIFwKKwkgIGlmIHRlc3QgLXogIiQkbG9nX2xpc3QiOyB0aGVuIFwKKwkgICAgbG9nX2xpc3Q9IiQkaS5sb2ciOyBcCisJICBlbHNlIFwKKwkgICAgbG9nX2xpc3Q9IiQkbG9nX2xpc3QgJCRpLmxvZyI7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0IC16ICIkJHRyc19saXN0IjsgdGhlbiBcCisJICAgIHRyc19saXN0PSIkJGkudHJzIjsgXAorCSAgZWxzZSBcCisJICAgIHRyc19saXN0PSIkJHRyc19saXN0ICQkaS50cnMiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkKFRFU1RfU1VJVEVfTE9HKSBURVNUX0xPR1M9IiQkbG9nX2xpc3QiCisKKy5zaC5sb2c6CisJQHA9JyQ8JzsgXAorCSQoYW1fX3NldF9iKTsgXAorCSQoYW1fX2NoZWNrX3ByZSkgJChTSF9MT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCisJLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCisJJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgLS0gJChTSF9MT0dfQ09NUElMRSkgIiQkdHN0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL2ZpeC1jb21waWxlLWZhaWx1cmUtd2hpbGUtZGlzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL2ZpeC1jb21waWxlLWZhaWx1cmUtd2hpbGUtZGlzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YWI3MTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvZml4LWNvbXBpbGUtZmFpbHVyZS13aGlsZS1kaXMucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSAwNjBlNzQzNTQ3NzRkMzZkMmMxMWVmMDhlM2U3ZWE5YjliNmUyM2ZiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxMyBOb3YgMjAxNCAxMToyOTozMyArMDgwMAorU3ViamVjdDogW1BBVENIXSBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jOiBmaXggY29tcGlsZSBmYWlsdXJlIHdoaWxlCisgLS1kaXNhYmxlLWRldmljZS1tYXBwZXIKKworV2hpbGUgLS1kaXNhYmxlLWRldmljZS1tYXBwZXIsIHRoZSBNQUNSTyBFTkFCTEVfREVWSUNFX01BUFBFUiBpcwordW5kZWYsIGJ1dCBpdCBtaXNzZWQgdG8gc2NvcGUgc29tZSBkZXZpY2UgbWFwcGVyIGZ1bmN0aW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmMgfCA4ICsrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnBhcnRlZC9hcmNoL2xpbnV4LmMgYi9saWJwYXJ0ZWQvYXJjaC9saW51eC5jCitpbmRleCA2ZmQ3M2M1Li4yYWZhNDc5IDEwMDY0NAorLS0tIGEvbGlicGFydGVkL2FyY2gvbGludXguYworKysrIGIvbGlicGFydGVkL2FyY2gvbGludXguYworQEAgLTIzMjAsNiArMjMyMCw3IEBAIHphc3ByaW50ZiAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgc3RhdGljIGNoYXIgKgorIGRtX2Nhbm9uaWNhbF9wYXRoIChQZWREZXZpY2UgY29uc3QgKmRldikKKyB7CisrI2lmZGVmIEVOQUJMRV9ERVZJQ0VfTUFQUEVSCisgICAgICAgICBMaW51eFNwZWNpZmljIGNvbnN0ICphcmNoX3NwZWNpZmljID0gTElOVVhfU1BFQ0lGSUMgKGRldik7CisgCisgICAgICAgICAvKiBHZXQgbWFwIG5hbWUgZnJvbSBkZXZpY2VtYXBwZXIgKi8KK0BAIC0yMzM3LDYgKzIzMzgsNyBAQCBkbV9jYW5vbmljYWxfcGF0aCAoUGVkRGV2aWNlIGNvbnN0ICpkZXYpCisgICAgICAgICBkbV90YXNrX2Rlc3Ryb3kgKHRhc2spOworICAgICAgICAgcmV0dXJuIGRldl9uYW1lOworIGVycjoKKysjZW5kaWYKKyAgICAgICAgIHJldHVybiBOVUxMOworIH0KKyAKK0BAIC0yOTU3LDEzICsyOTU5LDE1IEBAIF9kaXNrX3N5bmNfcGFydF90YWJsZSAoUGVkRGlzayogZGlzaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgKmxlbmd0aCk7CisgCistCisrI2lmZGVmIEVOQUJMRV9ERVZJQ0VfTUFQUEVSCisgICAgICAgICBpZiAoZGlzay0+ZGV2LT50eXBlID09IFBFRF9ERVZJQ0VfRE0pIHsKKyAgICAgICAgICAgICAgICAgYWRkX3BhcnRpdGlvbiA9IF9kbV9hZGRfcGFydGl0aW9uOworICAgICAgICAgICAgICAgICByZW1vdmVfcGFydGl0aW9uID0gX2RtX3JlbW92ZV9wYXJ0aXRpb247CisgICAgICAgICAgICAgICAgIHJlc2l6ZV9wYXJ0aXRpb24gPSBfZG1fcmVzaXplX3BhcnRpdGlvbjsKKyAgICAgICAgICAgICAgICAgZ2V0X3BhcnRpdGlvbl9zdGFydF9hbmRfbGVuZ3RoID0gX2RtX2dldF9wYXJ0aXRpb25fc3RhcnRfYW5kX2xlbmd0aDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9IGVsc2UKKysjZW5kaWYKKysgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgYWRkX3BhcnRpdGlvbiA9IF9ibGtwZ19hZGRfcGFydGl0aW9uOworICAgICAgICAgICAgICAgICByZW1vdmVfcGFydGl0aW9uID0gX2Jsa3BnX3JlbW92ZV9wYXJ0aXRpb247CisgI2lmZGVmIEJMS1BHX1JFU0laRV9QQVJUSVRJT04KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL2ZpeC1kb2MtbWFuZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL2ZpeC1kb2MtbWFuZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MTFkNGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvZml4LWRvYy1tYW5kaXIucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2J1Zy1wYXJ0ZWRAZ251Lm9yZ10KKworfCBmb3IgcG8gaW4gYGxzIC0xIC4vKi5wdF9CUi5wbyAyPi9kZXYvbnVsbGA7IGRvIFwKK3wgCQltYWtlICQoYmFzZW5hbWUgJHtwbyUucHRfQlIucG99KTsgXAorfCAJZG9uZQorfCBNYWtlZmlsZTo5MDQ6ICoqKiBSZWN1cnNpdmUgdmFyaWFibGUgYG1hbmRpcicgcmVmZXJlbmNlcyBpdHNlbGYgKGV2ZW50dWFsbHkpLiAgU3RvcC4KKworU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBPYmVycml0dGVyIDxvYmlAb3BlbmRyZWFtYm94Lm9yZz4KKworLS0tIHBhcnRlZC0zLjEvZG9jL3BvNGEubWsub3JpZwkyMDEyLTAzLTE1IDE0OjA5OjExLjU1NTgzMTg3MiArMDEwMAorKysrIHBhcnRlZC0zLjEvZG9jL3BvNGEubWsJMjAxMi0wMy0xNSAxNDoxMDo0NC4yNDM4MzA5ODUgKzAxMDAKK0BAIC0yMyw3ICsyMyw3IEBACisgIyB0aHJlc2hvbGQgaXMgODAlKSwgaXQgd29uJ3QgYmUgZGlzdHJpYnV0ZWQsIGFuZCB0aGUgYnVpbGQgd29uJ3QgZmFpbC4KKyAjCisgCistbWFuZGlyID0gJChtYW5kaXIpLyQobGFuZykKKyttYW5kaXIgOj0gJChtYW5kaXIpLyQobGFuZykKKyAKKyAjIEluZm9ybSBhdXRvbWFrZSB0aGF0IHdlIHdhbnQgdG8gaW5zdGFsbCBzb21lIG1hbiBwYWdlcyBpbiBzZWN0aW9uIDEsIDUKKyAjIGFuZCA4LgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL25vX2NoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL25vX2NoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZDhkYjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvbm9fY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJZiBjaGVjayBpcyBkZXRlY3RlZCwgaXQgbWFrZXMgdGhlIGJ1aWxkcyBub24tZGV0ZXJtaW5zdGljIHNvIGp1c3QgZm9yY2UKK2l0IHRvIGJlIGRpc2FibGVkLgorCitSUCAtIDQvMTEvMDgKKworSW5kZXg6IHBhcnRlZC0xLjkuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXJ0ZWQtMS45LjAub3JpZy9jb25maWd1cmUuYWMJMjAwOS0wNy0yMyAxODo1MjowOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBwYXJ0ZWQtMS45LjAvY29uZmlndXJlLmFjCTIwMTAtMDItMDIgMTQ6MTM6NTYuMDEzOTA1MDkzICswMDAwCitAQCAtNDc3LDcgKzQ3Nyw3IEBACisgQU1fQ09ORElUSU9OQUwoW0JVSUxEX0xJTlVYXSwgW3Rlc3QgIiRPUyIgPSBsaW51eF0pCisgCisgZG5sIGNoZWNrIGZvciAiY2hlY2siLCB1bml0IHRlc3RpbmcgbGlicmFyeS9oZWFkZXIKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhbQ0hFQ0tdLCBbY2hlY2sgPj0gMC45LjNdLCBoYXZlX2NoZWNrPXllcywgaGF2ZV9jaGVjaz1ubykKKytoYXZlX2NoZWNrPW5vCisgaWYgdGVzdCAiJGhhdmVfY2hlY2siICE9ICJ5ZXMiOyB0aGVuCisgICAgIEFDX01TR19SRVNVTFQoW1VuYWJsZSB0byBsb2NhdGUgY2hlY2sgdmVyc2lvbiAwLjkuMyBvciBoaWdoZXI6IG5vdCBidWlsZGluZ10pCisgZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NWM1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK21ha2UgLUMgdGVzdHMgY2hlY2stVEVTVFMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9zeXNjYWxscy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9zeXNjYWxscy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWJiZTlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL3N5c2NhbGxzLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0KKyBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jIHwgICAxMyArKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKykKKworSW5kZXg6IHBhcnRlZC0xLjkuMC9saWJwYXJ0ZWQvYXJjaC9saW51eC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGFydGVkLTEuOS4wLm9yaWcvbGlicGFydGVkL2FyY2gvbGludXguYwkyMDA5LTA3LTIzIDE4OjUyOjA4LjAwMDAwMDAwMCArMDEwMAorKysrIHBhcnRlZC0xLjkuMC9saWJwYXJ0ZWQvYXJjaC9saW51eC5jCTIwMTAtMDItMDIgMTQ6MTQ6MTYuNTIzOTA0NzY4ICswMDAwCitAQCAtMTcsNiArMTcsOCBAQAorIAorICNkZWZpbmUgUFJPQ19ERVZJQ0VTX0JVRlNJWiAxNjM4NAorIAorKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisrCisgI2luY2x1ZGUgPGNvbmZpZy5oPgorICNpbmNsdWRlIDxhcmNoL2xpbnV4Lmg+CisgCitAQCAtMTQ3NywxMiArMTQ3OSwxNCBAQAorIAorICNpZiBTSVpFT0ZfT0ZGX1QgPCA4CisgCisrI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKKyBzdGF0aWMgX3N5c2NhbGw1KGludCxfbGxzZWVrLAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50LCBmZCwKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcsIG9mZnNldF9oaWdoLAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZywgb2Zmc2V0X2xvdywKKyAgICAgICAgICAgICAgICAgIGxvZmZfdCosIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCwgb3JpZ2luKQorKyNlbmRpZgorIAorIGxvZmZfdAorIGxsc2VlayAodW5zaWduZWQgaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgd2hlbmNlKQorQEAgLTE0OTAsMTEgKzE0OTQsMjAgQEAKKyAgICAgICAgIGxvZmZfdCByZXN1bHQ7CisgICAgICAgICBpbnQgcmV0dmFsOworIAorKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCisgICAgICAgICByZXR2YWwgPSBfbGxzZWVrKGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcgbG9uZylvZmZzZXQpID4+IDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcgbG9uZylvZmZzZXQpICYgMHhmZmZmZmZmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbmNlKTsKKysjZWxzZQorKyAJcmV0dmFsID0gc3lzY2FsbChfX05SX19sbHNlZWssIGZkLAorKwkJCSAoKHVuc2lnbmVkIGxvbmcgbG9uZylvZmZzZXQpID4+IDMyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcgbG9uZylvZmZzZXQpICYgMHhmZmZmZmZmZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXN1bHQsCisrCQkJIHdoZW5jZSk7CisrI2VuZGlmCisrCisgICAgICAgICByZXR1cm4gKHJldHZhbD09LTEgPyAobG9mZl90KSByZXR2YWwgOiByZXN1bHQpOworIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9wYXJ0ZWRfMy4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL3BhcnRlZF8zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4YWUwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9wYXJ0ZWRfMy4yLmJiCkBAIC0wLDAgKzEsNDYgQEAKK1NVTU1BUlkgPSAiRGlzayBwYXJ0aXRpb24gZWRpdGluZy9yZXNpemluZyB1dGlsaXR5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3BhcnRlZC9wYXJ0ZWQuaHRtbCIKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MmYzMWIyNjZkMzQ0MGRkN2VlNTBmOTJjZjY3ZDhlNmMiCitTRUNUSU9OID0gImNvbnNvbGUvdG9vbHMiCitERVBFTkRTID0gIm5jdXJzZXMgcmVhZGxpbmUgdXRpbC1saW51eCIKK1BSID0gInIxIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vcGFydGVkL3BhcnRlZC0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbm9fY2hlY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3lzY2FsbHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWRvYy1tYW5kaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWNvbXBpbGUtZmFpbHVyZS13aGlsZS1kaXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1JbmNsdWRlLWZjbnRsLmgtaW4tcGxhdGZvcm1fZGVmcy5oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjAyNDdiNmE3YjMxNGY4ZWRlYjYxODE1OWZhOTVmOWNiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg1OGI1ODljMjIyOTdjYWNkZjQzN2YzYmFmZjZmMDRiMzMzMDg3NTIxYWIyNzRmN2FiNjc3Y2I4YzZiYjc4ZTQiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZGV2aWNlLW1hcHBlciIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgdGV4aW5mbyBwdGVzdAorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIC1DIHRlc3RzIHByaW50LWFsaWduIHByaW50LW1heCBkdXAtY2xvYmJlciBkdXBsaWNhdGUgZnMtcmVzaXplCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdD0ke0R9JHtQVEVTVF9QQVRIfQorCW1rZGlyICR0L2J1aWxkLWF1eAorCWNwICR7U30vYnVpbGQtYXV4L3Rlc3QtZHJpdmVyICR0L2J1aWxkLWF1eC8KKwljcCAtciAke1N9L3Rlc3RzICR0CisJY3AgJHtXT1JLRElSfS9NYWtlZmlsZSAkdC90ZXN0cy8KKwlzZWQgLWkgInN8XlZFUlNJT04uKnxWRVJTSU9OID0gJHtQVn18ZyIgJHQvdGVzdHMvTWFrZWZpbGUKKwlmb3IgaSBpbiBwcmludC1hbGlnbiBwcmludC1tYXggZHVwLWNsb2JiZXIgZHVwbGljYXRlIGZzLXJlc2l6ZTsgXAorCSAgZG8gY3AgJHtCfS90ZXN0cy8ubGlicy8kaSAkdC90ZXN0cy87IFwKKwlkb25lCisJc2VkIC1lICdzfCAuLi9wYXJ0ZWR8fCcgLWkgJHQvdGVzdHMvKi5zaAorfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCA9ICJiYXNoIGNvcmV1dGlscyBwZXJsIHV0aWwtbGludXgtbG9zZXR1cCBweXRob24iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4L2ZpeF9mb3JfY29tcGlsZV93aXRoX2djYy00LjYuMC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXgvZml4X2Zvcl9jb21waWxlX3dpdGhfZ2NjLTQuNi4wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4Nzc5YzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4L2ZpeF9mb3JfY29tcGlsZV93aXRoX2djYy00LjYuMC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGNvbXBpbGVyIGVycm9yIHdpdGggZ2NjIDQuNi4wCisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMDUvMDgKKworfCBmdHMuYzogSW4gZnVuY3Rpb24gJ3BheF9mdHNfc2V0JzoKK3wgZnRzLmM6NDY5Ojc6IGVycm9yOiBwYXJhbWV0ZXIgJ3NwJyBzZXQgYnV0IG5vdCB1c2VkIFstV2Vycm9yPXVudXNlZC1idXQtc2V0LXBhcmFtZXRlcl0KK3wgY2MxOiBhbGwgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKK3wgCit8IG1ha2VbMl06ICoqKiBbZnRzLm9dIEVycm9yIDEKKworSW5kZXg6IHBheC0zLjQvbGliL2Z0cy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF4LTMuNC5vcmlnL2xpYi9mdHMuYworKysrIHBheC0zLjQvbGliL2Z0cy5jCitAQCAtNDY2LDcgKzQ2Niw3IEBAIG5hbWU6CQl0ID0gc3AtPmZ0c19wYXRoICsgTkFQUEVORChwLT5mdHMKKyAvKiBBUkdTVVNFRCAqLworIGludAorIGZ0c19zZXQoc3AsIHAsIGluc3RyKQorLQlGVFMgKnNwOworKwlGVFMgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpICpzcDsKKyAJRlRTRU5UICpwOworIAlpbnQgaW5zdHI7CisgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheC9wYXgtMy40X2ZpeF9mb3JfeDMyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheC9wYXgtMy40X2ZpeF9mb3JfeDMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwODc4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4L3BheC0zLjRfZml4X2Zvcl94MzIucGF0Y2gKQEAgLTAsMCArMSwxODUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBdXRob3I6IEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CitEYXRlOiAgIFR1ZSBEZWMgNiAxMDozNDo1MyAyMDExIC0wODAwCisKKyAgICBGaXggcGF4LTMuNCBidWlsZCBmb3IgeDMyCisgICAgCisgICAgb2ZmX3QgaXMgOGJ5dGUgZm9yIHgzMi4gIFdlIG5lZWQgdG8gY2hlY2sgYm90aCBfRklMRV9PRkZTRVRfQklUUyBhbmQKKyAgICBzaXplIG9mIG9mZl90IHRvIHNlZSBpZiBmaWxlIG9mZnNldCBpcyA2NGJpdC4gIFRoaXMgcGF0Y2ggYWRkcworICAgIEFDX0NIRUNLX1NJWkVPRihvZmZfdCkgYW5kIGNoZWNrcyBTSVpFT0ZfT0ZGX1QgPT0gOC4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8wNgorCitJbmRleDogcGF4LTMuNC9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXgtMy40Lm9yaWcvY29uZmlndXJlLmluCisrKysgcGF4LTMuNC9jb25maWd1cmUuaW4KK0BAIC0zMyw0ICszMyw3IEBAIGRubCBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KKyBkbmwgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KKyBBQ19DX0NPTlNUCisgCisrQUNfQ0hFQ0tfU0laRU9GKG9mZl90KQorK0FDX0NIRUNLX1NJWkVPRihsb25nKQorKworIEFDX09VVFBVVChbTWFrZWZpbGUgbGliL01ha2VmaWxlIHNyYy9NYWtlZmlsZV0pCitJbmRleDogcGF4LTMuNC9zcmMvYXJfaW8uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBheC0zLjQub3JpZy9zcmMvYXJfaW8uYworKysrIHBheC0zLjQvc3JjL2FyX2lvLmMKK0BAIC0zNzgsNyArMzc4LDggQEAgYXJfY2xvc2Uodm9pZCkKKyAJICogY291bGQgaGF2ZSB3cml0dGVuIGFueXRoaW5nIHlldC4KKyAJICovCisgCWlmIChmcm10ID09IE5VTEwpIHsKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorIAkJKHZvaWQpZnByaW50ZihsaXN0ZiwgIiVzOiB1bmtub3duIGZvcm1hdCwgJXF1IGJ5dGVzIHNraXBwZWQuXG4iLAorICNlbHNlCisgCQkodm9pZClmcHJpbnRmKGxpc3RmLCAiJXM6IHVua25vd24gZm9ybWF0LCAlbHUgYnl0ZXMgc2tpcHBlZC5cbiIsCitAQCAtMzkxLDcgKzM5Miw4IEBAIGFyX2Nsb3NlKHZvaWQpCisgCisgCWlmIChzdHJjbXAoTk1fQ1BJTywgYXJndjApID09IDApCisgCQkodm9pZClmcHJpbnRmKGxpc3RmLAorLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgCQkgICAgIiVxdSBibG9ja3NcbiIsCisgI2Vsc2UKKyAJCSAgICAiJWx1IGJsb2Nrc1xuIiwKK0BAIC0zOTksNyArNDAxLDggQEAgYXJfY2xvc2Uodm9pZCkKKyAJCQkocmRjbnQgPyByZGNudCA6IHdyY250KSAvIDUxMjApOworIAllbHNlIGlmIChzdHJjbXAoTk1fVEFSLCBhcmd2MCkgIT0gMCkKKyAJCSh2b2lkKWZwcmludGYobGlzdGYsCistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAJCSAgICAiJXM6ICVzIHZvbCAlZCwgJWx1IGZpbGVzLCAlcXUgYnl0ZXMgcmVhZCwgJXF1IGJ5dGVzIHdyaXR0ZW4uXG4iLAorICNlbHNlCisgCQkgICAgIiVzOiAlcyB2b2wgJWQsICVsdSBmaWxlcywgJWx1IGJ5dGVzIHJlYWQsICVsdSBieXRlcyB3cml0dGVuLlxuIiwKK0luZGV4OiBwYXgtMy40L3NyYy9jcGlvLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXgtMy40Lm9yaWcvc3JjL2NwaW8uYworKysrIHBheC0zLjQvc3JjL2NwaW8uYworQEAgLTIxOCw3ICsyMTgsOCBAQCByZF9sbl9ubSAoQVJDSEQgKmFyY24pCisgCSAqLworIAlpZiAoKGFyY24tPnNiLnN0X3NpemUgPT0gMCkgfHwKKyAJICAgIChhcmNuLT5zYi5zdF9zaXplID49IChvZmZfdCkgc2l6ZW9mKGFyY24tPmxuX25hbWUpKSkgeworLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgCQlwYXh3YXJuICgxLCAiQ3BpbyBsaW5rIG5hbWUgbGVuZ3RoIGlzIGludmFsaWQ6ICVxdSIsCisgCQkJIGFyY24tPnNiLnN0X3NpemUpOworICNlbHNlCitJbmRleDogcGF4LTMuNC9zcmMvZ2VuX3N1YnMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBheC0zLjQub3JpZy9zcmMvZ2VuX3N1YnMuYworKysrIHBheC0zLjQvc3JjL2dlbl9zdWJzLmMKK0BAIC0xMzMsNyArMTMzLDggQEAgbHNfbGlzdCAoQVJDSEQgKmFyY24sIHRpbWVfdCBub3csIEZJTEUgKgorICAgICogcHJpbnQgZGV2aWNlIGlkJ3MgZm9yIGRldmljZXMsIG9yIHNpemVzIGZvciBvdGhlciBub2RlcworICAgICovCisgICBpZiAoKGFyY24tPnR5cGUgPT0gUEFYX0NIUikgfHwgKGFyY24tPnR5cGUgPT0gUEFYX0JMSykpCistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAgICAgKHZvaWQpIGZwcmludGYgKGZwLCAiJTRsdSwlNGx1ICIsICh1bnNpZ25lZCBsb25nKSBNQUpPUiAoc2JwLT5zdF9yZGV2KSwKKyAJCSAgICAodW5zaWduZWQgbG9uZykgTUlOT1IgKHNicC0+c3RfcmRldikpOworICNlbHNlCitAQCAtMTQyLDcgKzE0Myw4IEBAIGxzX2xpc3QgKEFSQ0hEICphcmNuLCB0aW1lX3Qgbm93LCBGSUxFICoKKyAjZW5kaWYKKyAgIGVsc2UKKyAgICAgeworLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgICAgICAgKHZvaWQpIGZwcmludGYgKGZwLCAiJTlxdSAiLCBzYnAtPnN0X3NpemUpOworICNlbHNlCisgICAgICAgKHZvaWQpIGZwcmludGYgKGZwLCAiJTlsdSAiLCBzYnAtPnN0X3NpemUpOworQEAgLTMzNCw3ICszMzYsOCBAQCB1bF9hc2MgKHVfbG9uZyB2YWwsIGNoYXIgKnN0ciwgaW50IGxlbiwgCisgICByZXR1cm4gKDApOworIH0KKyAKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorIC8qCisgICogYXNjX3VxZCgpCisgICoJY29udmVydCBoZXgvb2N0YWwgY2hhcmFjdGVyIHN0cmluZyBpbnRvIGEgdV9xdWFkX3QuIFdlIGRvIG5vdCBoYXZlIHRvCitJbmRleDogcGF4LTMuNC9zcmMvb3B0aW9ucy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF4LTMuNC5vcmlnL3NyYy9vcHRpb25zLmMKKysrKyBwYXgtMy40L3NyYy9vcHRpb25zLmMKK0BAIC0xNTQ1LDcgKzE1NDUsOCBAQCBzdHJfb2ZmdCAoY2hhciAqdmFsKQorICAgY2hhciAqZXhwcjsKKyAgIG9mZl90IG51bSwgdDsKKyAKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorICAgbnVtID0gc3RydG9xICh2YWwsICZleHByLCAwKTsKKyAgIGlmICgobnVtID09IExPTkdfTE9OR19NQVgpIHx8IChudW0gPD0gMCkgfHwgKGV4cHIgPT0gdmFsKSkKKyAjZWxzZQorSW5kZXg6IHBheC0zLjQvc3JjL3Rhci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF4LTMuNC5vcmlnL3NyYy90YXIuYworKysrIHBheC0zLjQvc3JjL3Rhci5jCitAQCAtNTgsNyArNTgsOCBAQAorIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRhcl9jaGtzbSAoY2hhciAqLCBpbnQpOworIHN0YXRpYyBjaGFyICpuYW1lX3NwbGl0IChjaGFyICosIGludCk7Cisgc3RhdGljIGludCB1bF9vY3QgKHVfbG9uZywgY2hhciAqLCBpbnQsIGludCk7CistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyBzdGF0aWMgaW50IHVxZF9vY3QgKHVfcXVhZF90LCBjaGFyICosIGludCwgaW50KTsKKyAjZW5kaWYKKyAKK0BAIC0xOTYsNyArMTk3LDggQEAgdWxfb2N0ICh1X2xvbmcgdmFsLCByZWdpc3RlciBjaGFyICpzdHIsIAorICAgcmV0dXJuICgwKTsKKyB9CisgCistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAvKgorICAqIHVxZF9vY3QoKQorICAqCWNvbnZlcnQgYW4gdV9xdWFkX3QgdG8gYW4gb2N0YWwgc3RyaW5nLiBvbmUgb2YgbWFueSBvZGRiYWxsIGZpZWxkCitAQCAtNDI3LDcgKzQyOSw4IEBAIHRhcl9yZCAoQVJDSEQgKmFyY24sIGNoYXIgKmJ1ZikKKyAJCQkgICAgICAgMHhmZmYpOworICAgYXJjbi0+c2Iuc3RfdWlkID0gKHVpZF90KSBhc2NfdWwgKGhkLT51aWQsIHNpemVvZiAoaGQtPnVpZCksIE9DVCk7CisgICBhcmNuLT5zYi5zdF9naWQgPSAoZ2lkX3QpIGFzY191bCAoaGQtPmdpZCwgc2l6ZW9mIChoZC0+Z2lkKSwgT0NUKTsKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorICAgYXJjbi0+c2Iuc3Rfc2l6ZSA9IChvZmZfdCkgYXNjX3VxZCAoaGQtPnNpemUsIHNpemVvZiAoaGQtPnNpemUpLCBPQ1QpOworICNlbHNlCisgICBhcmNuLT5zYi5zdF9zaXplID0gKG9mZl90KSBhc2NfdWwgKGhkLT5zaXplLCBzaXplb2YgKGhkLT5zaXplKSwgT0NUKTsKK0BAIC02NTksNyArNjYyLDggQEAgdGFyX3dyIChyZWdpc3RlciBBUkNIRCAqIGFyY24pCisgICAgICAgICogZGF0YSBmb2xsb3dzIHRoaXMgZmlsZSwgc28gc2V0IHRoZSBwYWQKKyAgICAgICAgKi8KKyAgICAgICBoZC0+bGlua2ZsYWcgPSBBUkVHVFlQRTsKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorICAgICAgIGlmICh1cWRfb2N0ICgodV9xdWFkX3QpIGFyY24tPnNiLnN0X3NpemUsIGhkLT5zaXplLAorIAkJICAgc2l6ZW9mIChoZC0+c2l6ZSksIDEpKQorICNlbHNlCitAQCAtODM0LDcgKzgzOCw4IEBAIHVzdGFyX3JkIChBUkNIRCAqYXJjbiwgY2hhciAqYnVmKQorICAgICovCisgICBhcmNuLT5zYi5zdF9tb2RlID0gKG1vZGVfdCkgKGFzY191bCAoaGQtPm1vZGUsIHNpemVvZiAoaGQtPm1vZGUpLCBPQ1QpICYKKyAJCQkgICAgICAgMHhmZmYpOworLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgICBhcmNuLT5zYi5zdF9zaXplID0gKG9mZl90KSBhc2NfdXFkIChoZC0+c2l6ZSwgc2l6ZW9mIChoZC0+c2l6ZSksIE9DVCk7CisgI2Vsc2UKKyAgIGFyY24tPnNiLnN0X3NpemUgPSAob2ZmX3QpIGFzY191bCAoaGQtPnNpemUsIHNpemVvZiAoaGQtPnNpemUpLCBPQ1QpOworQEAgLTEwODEsNyArMTA4Niw4IEBAIHVzdGFyX3dyIChyZWdpc3RlciBBUkNIRCAqIGFyY24pCisgICAgICAgZWxzZQorIAloZC0+dHlwZWZsYWcgPSBSRUdUWVBFOworICAgICAgIGFyY24tPnBhZCA9IFRBUl9QQUQgKGFyY24tPnNiLnN0X3NpemUpOworLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgICAgICAgaWYgKHVxZF9vY3QgKCh1X3F1YWRfdCkgYXJjbi0+c2Iuc3Rfc2l6ZSwgaGQtPnNpemUsCisgCQkgICBzaXplb2YgKGhkLT5zaXplKSwgMykpCisgCXsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXhfMy40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheF8zLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwNDg3MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXhfMy40LmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiUG9ydGFibGUgQXJjaGl2ZSBlWGNoYW5nZSIKK0RFU0NSSVBUSU9OID0gInBheCAoUG9ydGFibGUgQXJjaGl2ZSBlWGNoYW5nZSkgaXMgdGhlIFBPU0lYIHN0YW5kYXJkIGFyY2hpdmUgdG9vbCIKK0hPTUVQQUdFID0gImh0dHA6Ly9jdnN3ZWIub3BlbmJzZC5vcmcvY2dpLWJpbi9jdnN3ZWIvc3JjL2Jpbi9wYXgvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vd3d3Lm9wZW5ic2Qub3JnL3F1ZXJ5LXByLmh0bWwiCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGIwYjY3NGRmZGM1NmRhYTM4MzJkNDA2OWI4MjBlYTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3BheC5oO2VuZGxpbmU9NDA7bWQ1PTMwOWQzZTI0MWMxZDgyMDY5MjI4ZTVhNTFlOWI4ZDYwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9jcGlvLmg7ZW5kbGluZT00MDttZDU9YzNiNGJiZmY2MTMzYTgzMzg3OTY4NjE3YmJhZThhYzQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3Zpcy5oO2VuZGxpbmU9NDA7bWQ1PWIyODNmNzU5YWJkNGE1YWQ3ZTAxNGI4MGY1MWZjMDUzIgorCitTRUNUSU9OID0gImJhc2UiCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9yZXBvL3BrZ3MvJHtCUE59LyR7QlB9LnRhci5iejIvZmJkOTAyM2I1OTBiNDVhYzNhZGU5NTg3MDcwMmEwZDYvJHtCUH0udGFyLmJ6MiBcCisJZmlsZTovL2ZpeF9mb3JfY29tcGlsZV93aXRoX2djYy00LjYuMC5wYXRjaCBcCisJZmlsZTovL3BheC0zLjRfZml4X2Zvcl94MzIucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYmQ5MDIzYjU5MGI0NWFjM2FkZTk1ODcwNzAyYTBkNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhYzNjMDYwNDhlMDI4MjgwNzdjZjc3NTdkM2QxNDIyNDE0MjkyMzg4OTNiOTFkNTI5YWYyOWEyZThjYzU2MjNiIgorCitpbmhlcml0IGF1dG90b29scwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGJ6aXAyL3BiemlwMl8xLjEuMTIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYnppcDIvcGJ6aXAyXzEuMS4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzMwOTgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGJ6aXAyL3BiemlwMl8xLjEuMTIuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJQQlpJUDIgaXMgYSBwYXJhbGxlbCBpbXBsZW1lbnRhdGlvbiBvZiBiemlwMiIKK0RFU0NSSVBUSU9OID0gIlBCWklQMiBpcyBhIHBhcmFsbGVsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBiemlwMiBibG9jay1zb3J0aW5nIFwKK2ZpbGUgY29tcHJlc3NvciB0aGF0IHVzZXMgcHRocmVhZHMgYW5kIGFjaGlldmVzIG5lYXItbGluZWFyIHNwZWVkdXAgb24gU01QIFwKK21hY2hpbmVzLiBUaGUgb3V0cHV0IG9mIHRoaXMgdmVyc2lvbiBpcyBmdWxseSBjb21wYXRpYmxlIHdpdGggYnppcDIgdjEuMC4yIG9yIFwKK25ld2VyIChpZTogYW55dGhpbmcgY29tcHJlc3NlZCB3aXRoIHBiemlwMiBjYW4gYmUgZGVjb21wcmVzc2VkIHdpdGggYnppcDIpLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9jb21wcmVzc2lvbi5jYS9wYnppcDIvIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00YzRmMmVkZWM5Njc5ZDVhYmVmMzUxNGE4MTZiNTRhNCIKKworREVQRU5EUyA9ICJiemlwMiIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgYnppcDItcmVwbGFjZW1lbnQtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHBzOi8vbGF1bmNocGFkLm5ldC8ke0JQTn0vMS4xLyR7UFZ9Lytkb3dubG9hZC8ke0JQfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5MWE0OTExYjEzMzA1ODUwNDIzODQwZWIwZmE2ZjRmOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1NzNiYjM1OGE1YTdkM2JmNWY0MmY4ODFhZjMyNGNlZGY5NjBjNzg2ZThkNjZkZDAzZDQ0OGRkZDhhMDE2NmVlIgorCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorCitFWFRSQV9PRU1BS0UgPSAiQ1hYPScke0NYWH0gJHtDWFhGTEFHU30nIExERkxBR1M9JyR7TERGTEFHU30nIgorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBwYnppcDIgJHtEfSR7YmluZGlyfS8KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYmNvbnZlcnQtYXNuMS1wZXJsXzAuMjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYmNvbnZlcnQtYXNuMS1wZXJsXzAuMjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcwZTdlYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGliY29udmVydC1hc24xLXBlcmxfMC4yNy5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIkNvbnZlcnQ6OkFTTjEgLSBQZXJsIEFTTi4xIEVuY29kZS9EZWNvZGUgbGlicmFyeSIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUUubWQ7YmVnaW5saW5lPTkxO2VuZGxpbmU9OTc7bWQ1PWNlZmY3ZmQyODZlYjZkOGU4ZTBkM2QyM2UwOTZhNjNmIgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL0cvR0IvR0JBUlIvQ29udmVydC1BU04xLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjY4NzIzZTk2YmUwYjI1OGE5ZTIwNDgwMjc2ZThhNjJjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc0YTRhNzhhZTBjNWU5NzMxMDBhYzBhOGYyMDNhMTEwZjc2ZmIwNDdiNzlkYWU0ZmMxZmQ3ZDY4MTRkM2Q1OGEiCisKK1MgPSAiJHtXT1JLRElSfS9Db252ZXJ0LUFTTjEtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitFWFRSQV9QRVJMRkxBR1MgPSAiLUkgJHtQRVJMSE9TVExJQn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ0aW1lZGF0ZS1wZXJsXzIuMzAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnRpbWVkYXRlLXBlcmxfMi4zMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGZjZGU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ0aW1lZGF0ZS1wZXJsXzIuMzAuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJQZXJsIG1vZHVsZXMgdXNlZnVsIGZvciBtYW5pcHVsYXRpbmcgZGF0ZSBhbmQgdGltZSBpbmZvcm1hdGlvbiIKK1NFQ1RJT04gPSAibGlicyIKKyMgWW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBQZXJsIGl0c2VsZi4KK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTIxO21kNT01NzZiN2NiNDFlNWU4MjE1MDFhMDFlZDY2ZjBmOWQ5ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9HL0dCL0dCQVJSL1RpbWVEYXRlLSR7UFZ9LnRhci5neiIKKworUyA9ICIke1dPUktESVJ9L1RpbWVEYXRlLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfSArPSAicGVybC1tb2R1bGUtY2FycCBwZXJsLW1vZHVsZS1leHBvcnRlciBwZXJsLW1vZHVsZS1zdHJpY3QgcGVybC1tb2R1bGUtdGltZS1sb2NhbCIKKworU1JDX1VSSVttZDVzdW1dID0gImIxZDkxMTUzYWM5NzEzNDdhZWU4NDI5MmVkODg2YzFjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc1YmQyNTQ4NzFjYjU4NTNhNmFhMDQwM2FjMGJlMjcwY2RkNzVjOWQxYjY2MzlmMThlY2JhNjNjMTUyOThlODYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1uYW1lc3BhY2VzdXBwb3J0LXBlcmxfMS4xMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLW5hbWVzcGFjZXN1cHBvcnQtcGVybF8xLjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhOWU3MTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1uYW1lc3BhY2VzdXBwb3J0LXBlcmxfMS4xMS5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIGZvciBzdXBwb3J0aW5nIHNpbXBsZSBnZW5lcmljIG5hbWVzcGFjZXMiCitERVNDUklQVElPTiA9ICJYTUw6Ok5hbWVzcGFjZVN1cHBvcnQgb2ZmZXJzIGEgc2ltcGxlIHdheSB0byBwcm9jZXNzIG5hbWVzcGFjZS1iYXNlZCBYTUwgbmFtZXMuIFwKKyAgICAgICAgICAgICAgICBJdCBhbHNvIGhlbHBzIG1haW50YWluIGEgcHJlZml4LXRvLW5hbWVzcGFjZSBVUkkgbWFwLCBhbmQgcHJvdmlkZXMgYSBudW1iZXIgb2YgXAorICAgICAgICAgICAgICAgIGJhc2ljIGNoZWNrcy4gIgorCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorUFIgPSAicjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL01FVEEueW1sO2JlZ2lubGluZT0yMjtlbmRsaW5lPTIyO21kNT0zYjJiNTY0ZGFlOGI5YWY5ZTg4OTZlODVjMDdkY2JlNSIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9QL1BFL1BFUklHUklOL1hNTC1OYW1lc3BhY2VTdXBwb3J0LSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIyMjJjY2E3NjE2MWNkOTU2ZDcyNDI4NmQzNmI2MDdkYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2ZDgxNTFmMGEzZjEwMjMxM2Q3NmI2NGJmZDFjMmQ5ZWQ0NmJmZTYzYTE2ZjAzOGU3ZDg2MGZkYTI4N2I3NGVhIgorCisKK1MgPSAiJHtXT1JLRElSfS9YTUwtTmFtZXNwYWNlU3VwcG9ydC0ke1BWfSIKKworaW5oZXJpdCBjcGFuCisKK0JCQ0xBU1NFWFRFTkQ9Im5hdGl2ZSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtc2F4LWJhc2UtcGVybF8xLjA4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtc2F4LWJhc2UtcGVybF8xLjA4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YTMzNzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1zYXgtYmFzZS1wZXJsXzEuMDguYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJCYXNlIGNsYXNzIFNBWCBEcml2ZXJzIGFuZCBGaWx0ZXJzIgorREVTQ1JJUFRJT04gPSAiVGhpcyBtb2R1bGUgaGFzIGEgdmVyeSBzaW1wbGUgdGFzayAtIHRvIGJlIGEgYmFzZSBjbGFzcyBmb3IgXAorUGVybFNBWCBkcml2ZXJzIGFuZCBmaWx0ZXJzLiBJdCdzIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIHBhc3MgXAordGhlIGlucHV0IGRpcmVjdGx5IHRvIHRoZSBvdXRwdXQgdW5jaGFuZ2VkLiBJdCBjYW4gYmUgdXNlZnVsIHRvIFwKK3VzZSB0aGlzIG1vZHVsZSBhcyBhIGJhc2UgY2xhc3Mgc28geW91IGRvbid0IGhhdmUgdG8sIGZvciBleGFtcGxlLCBcCitpbXBsZW1lbnQgdGhlIGNoYXJhY3RlcnMoKSBjYWxsYmFjay4iCisKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCitSREVQRU5EU18ke1BOfSArPSAicGVybC1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kaXN0LmluaTtlbmRsaW5lPTU7bWQ1PThmOWM5YTU1MzQwYWVmYWVlNmU5NzA0Yzg4NDY2NDQ2IgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL0cvR1IvR1JBTlRNL1hNTC1TQVgtQmFzZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzOGM4YzMyNDdkZmQwODA3MTI1OTYxMThkNzBkYmUzMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2NjYyNzAzMThiMTVmODhiODQyN2U1ODUxOThhYmJjMTliYzJlNmNjYjM2ZGM0YzBhNGYyZDk4MDczMzAyMTllIgorCitTID0gIiR7V09SS0RJUn0vWE1MLVNBWC1CYXNlLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1zYXgtcGVybF8wLjk5LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtc2F4LXBlcmxfMC45OS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWQzOTY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtc2F4LXBlcmxfMC45OS5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIGZvciB1c2luZyBhbmQgYnVpbGRpbmcgUGVybCBTQVgyIFhNTCBwcm9jZXNzb3JzIgorREVTQ1JJUFRJT04gPSAiWE1MOjpTQVggY29uc2lzdHMgb2Ygc2V2ZXJhbCBmcmFtZXdvcmsgY2xhc3NlcyBmb3IgdXNpbmcgYW5kIFwKK2J1aWxkaW5nIFBlcmwgU0FYMiBYTUwgcGFyc2VycywgZmlsdGVycywgYW5kIGRyaXZlcnMuICBJdCBpcyBkZXNpZ25lZCBcIAorYXJvdW5kIHRoZSBuZWVkIHRvIGJlIGFibGUgdG8gInBsdWcgaW4iIGRpZmZlcmVudCBTQVggcGFyc2VycyB0byBhbiBcCithcHBsaWNhdGlvbiB3aXRob3V0IHJlcXVpcmluZyBwcm9ncmFtbWVyIGludGVydmVudGlvbi4gIFRob3NlIG9mIHlvdSBcCitmYW1pbGlhciB3aXRoIHRoZSBEQkkgd2lsbCBiZSByaWdodCBhdCBob21lLiAgU29tZSBvZiB0aGUgZGVzaWducyBcCitjb21lIGZyb20gdGhlIEphdmEgSkFYUCBzcGVjaWZpY2F0aW9uIChTQVggcGFydCksIG9ubHkgd2l0aG91dCB0aGUgXAoramF2YW5lc3MuIgorCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorREVQRU5EUyArPSAibGlieG1sLW5hbWVzcGFjZXN1cHBvcnQtcGVybC1uYXRpdmUiCitSREVQRU5EU18ke1BOfSArPSAibGlieG1sLW5hbWVzcGFjZXN1cHBvcnQtcGVybCBsaWJ4bWwtc2F4LWJhc2UtcGVybCBwZXJsLW1vZHVsZS1maWxlLXRlbXAiCitQUiA9ICJyMiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NjVjNGNkOGYzOWMyNGM3MTM1ZWQ3MGRhY2JjYjA5ZTMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRy9HUi9HUkFOVE0vWE1MLVNBWC0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyOTBmNTM3NWFlODdmZGViZmRiNWJjMzg1NDAxOWYyNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzMmIwNGI4ZTM2YjZjYzRjZmM0ODZkZTJkODU5ZDg3YWY1Mzg2ZGQ5MzBmMjM4M2M0OTM0NzA1MGQ2ZjVhZDg0IgorCitTID0gIiR7V09SS0RJUn0vWE1MLVNBWC0ke1BWfSIKKworaW5oZXJpdCBjcGFuCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnei5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I4OTkxZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnei5pbmMKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJBIHBhcmFsbGVsIGltcGxlbWVudGF0aW9uIG9mIGd6aXAiCitERVNDUklQVElPTiA9ICJwaWd6LCB3aGljaCBzdGFuZHMgZm9yIHBhcmFsbGVsIGltcGxlbWVudGF0aW9uIG9mIGd6aXAsIGlzIGEgXAorZnVsbHkgZnVuY3Rpb25hbCByZXBsYWNlbWVudCBmb3IgZ3ppcCB0aGF0IGV4cGxvaXRzIG11bHRpcGxlIHByb2Nlc3NvcnMgYW5kIFwKK211bHRpcGxlIGNvcmVzIHRvIHRoZSBoaWx0IHdoZW4gY29tcHJlc3NpbmcgZGF0YS4gcGlneiB3YXMgd3JpdHRlbiBieSBNYXJrIFwKK0FkbGVyLCBhbmQgdXNlcyB0aGUgemxpYiBhbmQgcHRocmVhZCBsaWJyYXJpZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3psaWIubmV0L3BpZ3ovIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJabGliICYgQXBhY2hlLTIuMCIKKworU1JDX1VSSSA9ICJodHRwOi8vemxpYi5uZXQvJHtCUE59LyR7QlB9LnRhci5neiIKKworUFJPVklERVNfY2xhc3MtbmF0aXZlICs9ICJnemlwLW5hdGl2ZSIKKworREVQRU5EUyA9ICJ6bGliIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworZG9faW5zdGFsbF9jbGFzcy10YXJnZXQoKSB7CisJIyBJbnN0YWxsIGZpbGVzIGludG8gL2JpbiAoRkhTKSwgd2hpY2ggaXMgdHlwaWNhbCBwbGFjZSBmb3IgZ3ppcAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJaW5zdGFsbCAke0J9L3BpZ3ogJHtEfSR7YmFzZV9iaW5kaXJ9L3BpZ3oKKwlsbiAtbnNmIHBpZ3ogJHtEfSR7YmFzZV9iaW5kaXJ9L3VucGlnegorCWxuIC1uc2YgcGlneiAke0R9JHtiYXNlX2JpbmRpcn0vcGlnemNhdAorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgJHtCfS9waWd6ICR7RH0ke2JpbmRpcn0vZ3ppcAorCWxuIC1uc2YgZ3ppcCAke0R9JHtiaW5kaXJ9L2d1bnppcAorCWxuIC1uc2YgZ3ppcCAke0R9JHtiaW5kaXJ9L3pjYXQKK30KKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiODAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJndW56aXAgZ3ppcCB6Y2F0IgorQUxURVJOQVRJVkVfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtndW56aXBdID0gIiR7YmFzZV9iaW5kaXJ9L2d1bnppcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtnemlwXSA9ICIke2Jhc2VfYmluZGlyfS9nemlwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3pjYXRdID0gIiR7YmFzZV9iaW5kaXJ9L3pjYXQiCitBTFRFUk5BVElWRV9UQVJHRVQgPSAiJHtiYXNlX2JpbmRpcn0vcGlneiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnei9saW5rLW9yZGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6L2xpbmstb3JkZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJlY2MwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnei9saW5rLW9yZGVyLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK1RoaXMgcGF0Y2ggYXZvaWRzIHVuZGVybGlua2luZyBpc3N1ZXMgc2luY2Ugd2UgcGFzcyAtbHogdmlhIExERkxBR1MgYnV0IGl0IGFwcGVhcnMKK2JlZm9yZSBwaWd6Lm8gd2hpY2ggbmVlZHMgc3ltYm9scyBmcm9tIGxpYnogaG93ZXZlciBkdWUgdG8gb3JkZXIgbGlua2VyIGhhcHBpbHkgZGlzY2FyZHMgbGliegorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHBpZ3otMi4zLjMvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwaWd6LTIuMy4zLm9yaWcvTWFrZWZpbGUJMjAxNS0wMS0xOSAyMDoxMjozMS4wMDAwMDAwMDAgLTA4MDAKKysrKyBwaWd6LTIuMy4zL01ha2VmaWxlCTIwMTUtMDEtMjggMDk6MTE6NTAuMjY2NjY5MTg0IC0wODAwCitAQCAtNSw3ICs1LDcgQEAKKyAjIHVzZSBnY2MgYW5kIGdtYWtlIG9uIFNvbGFyaXMKKyAKKyBwaWd6OiBwaWd6Lm8geWFybi5vIHRyeS5vICR7Wk9QRkxJfWRlZmxhdGUubyAke1pPUEZMSX1ibG9ja3NwbGl0dGVyLm8gJHtaT1BGTEl9dHJlZS5vICR7Wk9QRkxJfWx6NzcubyAke1pPUEZMSX1jYWNoZS5vICR7Wk9QRkxJfWhhc2gubyAke1pPUEZMSX11dGlsLm8gJHtaT1BGTEl9c3F1ZWV6ZS5vICR7Wk9QRkxJfWthdGFqYWluZW4ubworLQkkKENDKSAkKExERkxBR1MpIC1vIHBpZ3ogJF4gLWxwdGhyZWFkIC1sbQorKwkkKENDKSAtbyBwaWd6ICReICQoTERGTEFHUykgLWx6IC1scHRocmVhZCAtbG0KKyAJbG4gLWYgcGlneiB1bnBpZ3oKKyAKKyBwaWd6Lm86IHBpZ3ouYyB5YXJuLmggdHJ5LmggJHtaT1BGTEl9ZGVmbGF0ZS5oICR7Wk9QRkxJfXV0aWwuaAorQEAgLTM1LDcgKzM1LDcgQEAKKyBkZXY6IHBpZ3ogcGlnenQgcGlnem4KKyAKKyBwaWd6dDogcGlnenQubyB5YXJudC5vIHRyeS5vICR7Wk9QRkxJfWRlZmxhdGUubyAke1pPUEZMSX1ibG9ja3NwbGl0dGVyLm8gJHtaT1BGTEl9dHJlZS5vICR7Wk9QRkxJfWx6NzcubyAke1pPUEZMSX1jYWNoZS5vICR7Wk9QRkxJfWhhc2gubyAke1pPUEZMSX11dGlsLm8gJHtaT1BGTEl9c3F1ZWV6ZS5vICR7Wk9QRkxJfWthdGFqYWluZW4ubworLQkkKENDKSAkKExERkxBR1MpIC1vIHBpZ3p0ICReIC1scHRocmVhZCAtbG0KKysJJChDQykgLW8gcGlnenQgJF4gJChMREZMQUdTKSAtbHogLWxwdGhyZWFkIC1sbQorIAorIHBpZ3p0Lm86IHBpZ3ouYyB5YXJuLmggdHJ5LmgKKyAJJChDQykgJChDRkxBR1MpIC1EREVCVUcgLWcgLWMgLW8gcGlnenQubyBwaWd6LmMKK0BAIC00NCw3ICs0NCw3IEBACisgCSQoQ0MpICQoQ0ZMQUdTKSAtRERFQlVHIC1nIC1jIC1vIHlhcm50Lm8geWFybi5jCisgCisgcGlnem46IHBpZ3puLm8gdHJ5bi5vICR7Wk9QRkxJfWRlZmxhdGUubyAke1pPUEZMSX1ibG9ja3NwbGl0dGVyLm8gJHtaT1BGTEl9dHJlZS5vICR7Wk9QRkxJfWx6NzcubyAke1pPUEZMSX1jYWNoZS5vICR7Wk9QRkxJfWhhc2gubyAke1pPUEZMSX11dGlsLm8gJHtaT1BGTEl9c3F1ZWV6ZS5vICR7Wk9QRkxJfWthdGFqYWluZW4ubworLQkkKENDKSAkKExERkxBR1MpIC1vIHBpZ3puICReIC1sbQorKwkkKENDKSAtbyBwaWd6biAkXiAkKExERkxBR1MpIC1seiAtbG0KKyAKKyBwaWd6bi5vOiBwaWd6LmMgdHJ5LmgKKyAJJChDQykgJChDRkxBR1MpIC1EREVCVUcgLUROT1RIUkVBRCAtZyAtYyAtbyBwaWd6bi5vIHBpZ3ouYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6XzIuMy4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6XzIuMy4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MGJlMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9waWd6L3BpZ3pfMi4zLjMuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBwaWd6LmluYworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vcGlnei5jO2JlZ2lubGluZT03O2VuZGxpbmU9MjE7bWQ1PWEyMWQ0MDc1Y2IwMGFiNGNhMTdmY2U1ZTc1MzRjYTk1IgorCitTUkNfVVJJICs9ICJmaWxlOi8vbGluay1vcmRlci5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjAxZDdhMTZjY2U3NzkyOWNjMWE3OGFhMWJkZmI2OGNiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRlOGI2N2I0MzJjZTc5MDc1NzVhNTQ5ZjNlMWNhYzQ3MDk3ODFiYTBmNmI0OGFmZWE5ZjU5MzY5ODQ2YjUwOWMiCisKK05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYID0gIi8ke1BOfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzL2ZpeC1jb25maWd1cmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzL2ZpeC1jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM0YWU4MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHMvZml4LWNvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDE5IEBACisKK2V4ZWNfcHJlZml4IGlzIC91c3IgZGVmYXVsdCBpbiBPRS1Db3JlCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK0luZGV4OiBwcm9jcHMtbmctMy4zLjEwL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHByb2Nwcy1uZy0zLjMuMTAub3JpZy9jb25maWd1cmUuYWMKKysrKyBwcm9jcHMtbmctMy4zLjEwL2NvbmZpZ3VyZS5hYworQEAgLTcwLDcgKzcwLDcgQEAgQUNfRlVOQ19NTUFQCisgQUNfRlVOQ19SRUFMTE9DCisgQUNfRlVOQ19TVFJUT0QKKyAKKy11c3JiaW5fZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vdXNyL2JpbicKKyt1c3JiaW5fZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vYmluJworIEFDX1NVQlNUKFt1c3JiaW5fZXhlY2Rpcl0pCisgCisgQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbMC4xNC4xXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHMvc3lzY3RsLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzL3N5c2N0bC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZTc0ODgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzL3N5c2N0bC5jb25mCkBAIC0wLDAgKzEsNjQgQEAKKyMgVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgaXMgdGFrZW4gZnJvbSBEZWJpYW4uCisjCisjIC9ldGMvc3lzY3RsLmNvbmYgLSBDb25maWd1cmF0aW9uIGZpbGUgZm9yIHNldHRpbmcgc3lzdGVtIHZhcmlhYmxlcworIyBTZWUgc3lzY3RsLmNvbmYgKDUpIGZvciBpbmZvcm1hdGlvbi4KKyMKKworI2tlcm5lbC5kb21haW5uYW1lID0gZXhhbXBsZS5jb20KKworIyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyB0byBzdG9wIGxvdy1sZXZlbCBtZXNzYWdlcyBvbiBjb25zb2xlCisja2VybmVsLnByaW50ayA9IDQgNCAxIDcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMzCisjIEZ1bmN0aW9ucyBwcmV2aW91c2x5IGZvdW5kIGluIG5ldGJhc2UKKyMKKworIyBVbmNvbW1lbnQgdGhlIG5leHQgdHdvIGxpbmVzIHRvIGVuYWJsZSBTcG9vZiBwcm90ZWN0aW9uIChyZXZlcnNlLXBhdGggZmlsdGVyKQorIyBUdXJuIG9uIFNvdXJjZSBBZGRyZXNzIFZlcmlmaWNhdGlvbiBpbiBhbGwgaW50ZXJmYWNlcyB0bworIyBwcmV2ZW50IHNvbWUgc3Bvb2ZpbmcgYXR0YWNrcworbmV0LmlwdjQuY29uZi5kZWZhdWx0LnJwX2ZpbHRlcj0xCituZXQuaXB2NC5jb25mLmFsbC5ycF9maWx0ZXI9MQorCisjIFVuY29tbWVudCB0aGUgbmV4dCBsaW5lIHRvIGVuYWJsZSBUQ1AvSVAgU1lOIGNvb2tpZXMKKyNuZXQuaXB2NC50Y3Bfc3luY29va2llcz0xCisKKyMgVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gZW5hYmxlIHBhY2tldCBmb3J3YXJkaW5nIGZvciBJUHY0CisjbmV0LmlwdjQuaXBfZm9yd2FyZD0xCisKKyMgVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gZW5hYmxlIHBhY2tldCBmb3J3YXJkaW5nIGZvciBJUHY2CisjbmV0LmlwdjYuY29uZi5hbGwuZm9yd2FyZGluZz0xCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBZGRpdGlvbmFsIHNldHRpbmdzIC0gdGhlc2Ugc2V0dGluZ3MgY2FuIGltcHJvdmUgdGhlIG5ldHdvcmsKKyMgc2VjdXJpdHkgb2YgdGhlIGhvc3QgYW5kIHByZXZlbnQgYWdhaW5zdCBzb21lIG5ldHdvcmsgYXR0YWNrcworIyBpbmNsdWRpbmcgc3Bvb2ZpbmcgYXR0YWNrcyBhbmQgbWFuIGluIHRoZSBtaWRkbGUgYXR0YWNrcyB0aHJvdWdoCisjIHJlZGlyZWN0aW9uLiBTb21lIG5ldHdvcmsgZW52aXJvbm1lbnRzLCBob3dldmVyLCByZXF1aXJlIHRoYXQgdGhlc2UKKyMgc2V0dGluZ3MgYXJlIGRpc2FibGVkIHNvIHJldmlldyBhbmQgZW5hYmxlIHRoZW0gYXMgbmVlZGVkLgorIworIyBJZ25vcmUgSUNNUCBicm9hZGNhc3RzCisjbmV0LmlwdjQuaWNtcF9lY2hvX2lnbm9yZV9icm9hZGNhc3RzID0gMQorIworIyBJZ25vcmUgYm9ndXMgSUNNUCBlcnJvcnMKKyNuZXQuaXB2NC5pY21wX2lnbm9yZV9ib2d1c19lcnJvcl9yZXNwb25zZXMgPSAxCisjCisjIERvIG5vdCBhY2NlcHQgSUNNUCByZWRpcmVjdHMgKHByZXZlbnQgTUlUTSBhdHRhY2tzKQorI25ldC5pcHY0LmNvbmYuYWxsLmFjY2VwdF9yZWRpcmVjdHMgPSAwCisjbmV0LmlwdjYuY29uZi5hbGwuYWNjZXB0X3JlZGlyZWN0cyA9IDAKKyMgX29yXworIyBBY2NlcHQgSUNNUCByZWRpcmVjdHMgb25seSBmb3IgZ2F0ZXdheXMgbGlzdGVkIGluIG91ciBkZWZhdWx0CisjIGdhdGV3YXkgbGlzdCAoZW5hYmxlZCBieSBkZWZhdWx0KQorIyBuZXQuaXB2NC5jb25mLmFsbC5zZWN1cmVfcmVkaXJlY3RzID0gMQorIworIyBEbyBub3Qgc2VuZCBJQ01QIHJlZGlyZWN0cyAod2UgYXJlIG5vdCBhIHJvdXRlcikKKyNuZXQuaXB2NC5jb25mLmFsbC5zZW5kX3JlZGlyZWN0cyA9IDAKKyMKKyMgRG8gbm90IGFjY2VwdCBJUCBzb3VyY2Ugcm91dGUgcGFja2V0cyAod2UgYXJlIG5vdCBhIHJvdXRlcikKKyNuZXQuaXB2NC5jb25mLmFsbC5hY2NlcHRfc291cmNlX3JvdXRlID0gMAorI25ldC5pcHY2LmNvbmYuYWxsLmFjY2VwdF9zb3VyY2Vfcm91dGUgPSAwCisjCisjIExvZyBNYXJ0aWFuIFBhY2tldHMKKyNuZXQuaXB2NC5jb25mLmFsbC5sb2dfbWFydGlhbnMgPSAxCisjCisKKyNrZXJuZWwuc2htbWF4ID0gMTQxNzYyNTYwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzXzMuMy4xMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHNfMy4zLjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZmFiYTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzXzMuMy4xMC5iYgpAQCAtMCwwICsxLDY3IEBACitTVU1NQVJZID0gIlN5c3RlbSBhbmQgcHJvY2VzcyBtb25pdG9yaW5nIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlByb2NwcyBjb250YWlucyBhIHNldCBvZiBzeXN0ZW0gdXRpbGl0aWVzIHRoYXQgcHJvdmlkZSBzeXN0ZW0gaW5mb3JtYXRpb24gYWJvdXQgcHJvY2Vzc2VzIHVzaW5nIFwKK3RoZSAvcHJvYyBmaWxlc3lzdGVtLiBUaGUgcGFja2FnZSBpbmNsdWRlcyB0aGUgcHJvZ3JhbXMgcHMsIHRvcCwgdm1zdGF0LCB3LCBraWxsLCBhbmQgc2tpbGwuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRvcmlvdXMub3JnL3Byb2NwcyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU09ImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTRjZjY2YTQ5ODQxMjAwMDdjOTg4MWNjODcxY2Y0OWRiIFwKKyAgICAgICAgICAgICAgICAgIgorCitERVBFTkRTID0gIm5jdXJzZXMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Byb2Nwcy1uZy9Qcm9kdWN0aW9uL3Byb2Nwcy1uZy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vZml4LWNvbmZpZ3VyZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNjdGwuY29uZiBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWZiN2YzZjZiZjkyY2U2YzVjOWVkOTk0OWFlODU4ZmUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTAyZTZmOTg5NzRkZmNlYWI3OTg4NGRmOTAyY2EzZGYzMGIwZTliYWQ2ZDc2YWVlMGZiNWRjZTE3ZjI2N2YwNCIKKworUyA9ICIke1dPUktESVJ9L3Byb2Nwcy1uZy0ke1BWfSIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNraWxsIC0tZGlzYWJsZS1tb2Rlcm4tdG9wIgorCitDUFBGTEFHUyArPSAiLUkke1N9IgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwlbICIke2JpbmRpcn0iICE9ICIke2Jhc2VfYmluZGlyfSIgXSAmJiBmb3IgaSBpbiAke2Jhc2VfYmluZGlyX3Byb2dzfTsgZG8gbXYgJHtEfSR7YmluZGlyfS8kaSAke0R9JHtiYXNlX2JpbmRpcn0vJGk7IGRvbmUKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKwlbICIke3NiaW5kaXJ9IiAhPSAiJHtiYXNlX3NiaW5kaXJ9IiBdICYmIGZvciBpIGluICR7YmFzZV9zYmluZGlyX3Byb2dzfTsgZG8gbXYgJHtEfSR7c2JpbmRpcn0vJGkgJHtEfSR7YmFzZV9zYmluZGlyfS8kaTsgZG9uZQorICAgICAgICBpZiBbICIke2Jhc2Vfc2JpbmRpcn0iICE9ICIke3NiaW5kaXJ9IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgcm1kaXIgJHtEfSR7c2JpbmRpcn0KKyAgICAgICAgZmkKKworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3N5c2N0bC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2N0bC5jb25mCisgICAgICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2N0bC5kCisgICAgICAgICAgICAgICAgbG4gLXNmIC4uL3N5c2N0bC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2N0bC5kLzk5LXN5c2N0bC5jb25mCisgICAgICAgIGZpCit9CisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3N5c2N0bC5jb25mIgorCitiaW5kaXJfcHJvZ3MgPSAiZnJlZSBwa2lsbCBwbWFwIHBncmVwIHB3ZHggc2tpbGwgc25pY2UgdG9wIHVwdGltZSIKK2Jhc2VfYmluZGlyX3Byb2dzICs9ICJraWxsIHBpZG9mIHBzIHdhdGNoIgorYmFzZV9zYmluZGlyX3Byb2dzICs9ICJzeXNjdGwiCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiJHtiaW5kaXJfcHJvZ3N9ICR7YmFzZV9iaW5kaXJfcHJvZ3N9ICR7YmFzZV9zYmluZGlyX3Byb2dzfSIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gImtpbGwuMSB1cHRpbWUuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtraWxsLjFdID0gIiR7bWFuZGlyfS9tYW4xL2tpbGwuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt1cHRpbWUuMV0gPSAiJHttYW5kaXJ9L21hbjEvdXB0aW1lLjEiCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBmb3IgcHJvZyBpbiBkLmdldFZhcignYmFzZV9iaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ2Jhc2VfYmluZGlyJywgVHJ1ZSksIHByb2cpKQorCisgICAgZm9yIHByb2cgaW4gZC5nZXRWYXIoJ2Jhc2Vfc2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9zYmluZGlyJywgVHJ1ZSksIHByb2cpKQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvZmlsZXMvMDAwMS1UeXBvLWluLWZ1c2VyLW1ha2VzLU0tb24tYWxsLXRoZS10aW1lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL2ZpbGVzLzAwMDEtVHlwby1pbi1mdXNlci1tYWtlcy1NLW9uLWFsbC10aGUtdGltZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTdkNjBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL2ZpbGVzLzAwMDEtVHlwby1pbi1mdXNlci1tYWtlcy1NLW9uLWFsbC10aGUtdGltZS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDM2MzhjYzU1YjRkMDg4NTFmYWJhNDY2MzVkNzM3YjI0ZDAxNjY2NWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmFkIEpvcnNjaCA8YW5vbWllQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6IEZyaSwgMjggRmViIDIwMTQgMjE6NTU6MDIgKzExMDAKK1N1YmplY3Q6IFtQQVRDSF0gVHlwbyBpbiBmdXNlciBtYWtlcyAtTSBvbiBhbGwgdGhlIHRpbWUKKworQnJhZCBmb3VuZCB0aGF0IGZ1c2VyIGhhZCB0aGUgLU0gb3B0aW9uIG9uIGFsbCB0aGUgdGltZS4KK0Egc2ltcGxlIGJ1dCBzaWduaWZpY2FudCB0eXBvIGNhdXNlZCB0aGlzLCB0aGFua3MgdGhlIHRoZSBwYXRjaC4KKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy83NDAyNzUKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBDcmFpZyBTbWFsbCA8Y3NtYWxsQGVuYy5jb20uYXU+CistLS0KKyBDaGFuZ2VMb2cgICB8IDQgKysrKworIHNyYy9mdXNlci5jIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKK2luZGV4IGZkMWNjY2YuLmU1Zjc4NGMgMTAwNjQ0CistLS0gYS9DaGFuZ2VMb2cKKysrKyBiL0NoYW5nZUxvZworQEAgLTEsMyArMSw3IEBACisrQ2hhbmdlcyBpbiAyMi4yMgorKz09PT09PT09PT09PT09PT0KKysJKiBGaXhlZCB0eXBvIGluIGZ1c2VyIHdoaWNoIGhhcyAtTSBvbiBEZWJpYW4gIzc0MDI3NQorKworIENoYW5nZXMgaW4gMjIuMjEKKyA9PT09PT09PT09PT09PT09CisgCSogTWlzc2luZyBjb21tYSBpbiBmdXNlcigxKSBhZGRlZCBEZWJpYW4gIzcwMjM5MQorZGlmZiAtLWdpdCBhL3NyYy9mdXNlci5jIGIvc3JjL2Z1c2VyLmMKK2luZGV4IGI0ODVmNjUuLjM4OWIzMDIgMTAwNjQ0CistLS0gYS9zcmMvZnVzZXIuYworKysrIGIvc3JjL2Z1c2VyLmMKK0BAIC0xMTc0LDcgKzExNzQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJdXNhZ2UoXygiTm8gcHJvY2VzcyBzcGVjaWZpY2F0aW9uIGdpdmVuIikpOworIAorIAkvKiBDaGVjayBpZiAtTSBmbGFnIHdhcyB1c2VkIGFuZCBpZiBzbyBjaGVjayBtb3VudHMgKi8KKy0JaWYgKG9wdHMgKiBPUFRfSVNNT1VOVFBPSU5UKSB7CisrCWlmIChvcHRzICYgT1BUX0lTTU9VTlRQT0lOVCkgeworIAkgICAgY2hlY2tfbW91bnRwb2ludHMoJm1vdW50cywgJm5hbWVzX2hlYWQsICZuYW1lc190YWlsKTsKKyAJfQorIAorLS0gCisxLjguNC4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9maWxlcy8wMDAyLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL2ZpbGVzLzAwMDItSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhhZmNhYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9maWxlcy8wMDAyLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gYWE2NmFmZWNkOGJhOWNjNDEzOWYyNWFiMTVlYzMxNTE3MzQxM2E3ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgQmFya2VyIDxwYXVsQHBhdWxiYXJrZXIubWUudWs+CitEYXRlOiBXZWQsIDIwIEF1ZyAyMDE0IDEwOjMxOjM3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEluY2x1ZGUgPGxpbWl0cy5oPiBmb3IgUEFUSF9NQVgKKworV2hlbiBidWlsZGluZyBhZ2FpbnN0IG11c2wgbGliYywgUEFUSF9NQVggaXMgZGVmaW5lZCBpbiA8bGltaXRzLmg+LgorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEJhcmtlciA8cGF1bEBwYXVsYmFya2VyLm1lLnVrPgorCitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIChTaG91bGQgYmUgaW4gbmV4dCByZWxlYXNlIGFmdGVyIDIyLjIxKQorLS0tCisgc3JjL3BzdHJlZS5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zcmMvcHN0cmVlLmMgYi9zcmMvcHN0cmVlLmMKK2luZGV4IDA3MWU2YzQuLjBkMjgyNjAgMTAwNjQ0CistLS0gYS9zcmMvcHN0cmVlLmMKKysrKyBiL3NyYy9wc3RyZWUuYworQEAgLTQxLDYgKzQxLDcgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyAKKyAjaW5jbHVkZSAiaTE4bi5oIgorICNpbmNsdWRlICJjb21tLmgiCistLSAKKzIuMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9wc21pc2MuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlMDY1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9wc21pc2MuaW5jCkBAIC0wLDAgKzEsNDQgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBtYW5hZ2luZyBwcm9jZXNzZXMgb24geW91ciBzeXN0ZW0iCitERVNDUklQVElPTiA9ICJUaGUgcHNtaXNjIHBhY2thZ2UgY29udGFpbnMgdXRpbGl0aWVzIGZvciBtYW5hZ2luZyBwcm9jZXNzZXMgb24geW91ciBcCitzeXN0ZW06IHBzdHJlZSwga2lsbGFsbCBhbmQgZnVzZXIuICBUaGUgcHN0cmVlIGNvbW1hbmQgZGlzcGxheXMgYSB0cmVlIFwKK3N0cnVjdHVyZSBvZiBhbGwgb2YgdGhlIHJ1bm5pbmcgcHJvY2Vzc2VzIG9uIHlvdXIgc3lzdGVtLiAgVGhlIGtpbGxhbGwgXAorY29tbWFuZCBzZW5kcyBhIHNwZWNpZmllZCBzaWduYWwgKFNJR1RFUk0gaWYgbm90aGluZyBpcyBzcGVjaWZpZWQpIHRvIFwKK3Byb2Nlc3NlcyBpZGVudGlmaWVkIGJ5IG5hbWUuICBUaGUgZnVzZXIgY29tbWFuZCBpZGVudGlmaWVzIHRoZSBQSURzIFwKK29mIHByb2Nlc3NlcyB0aGF0IGFyZSB1c2luZyBzcGVjaWZpZWQgZmlsZXMgb3IgZmlsZXN5c3RlbXMuIgorU0VDVElPTiA9ICJiYXNlIgorREVQRU5EUyA9ICJuY3Vyc2VzIHZpcnR1YWwvbGliaW50bCIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3BzbWlzYy9wc21pc2MtJHtQVn0udGFyLmd6IgorCitTID0gIiR7V09SS0RJUn0vcHNtaXNjLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK1BBQ0tBR0VTID0rICJmdXNlciBmdXNlci1kb2Mga2lsbGFsbCBraWxsYWxsLWRvYyBwc3RyZWUgcHN0cmVlLWRvYyIKK1BBQ0tBR0VTICs9ICJwc21pc2MtZXh0cmFzIgorCitGSUxFU18ke1BOfSA9ICIiCitSREVQRU5EU18ke1BOfSA9ICJmdXNlciBraWxsYWxsIHBzdHJlZSIKKworRklMRVNfZnVzZXIgPSAiJHtiaW5kaXJ9L2Z1c2VyLiR7QlBOfSIKK0ZJTEVTX2Z1c2VyLWRvYyA9ICIke21hbmRpcn0vbWFuMS9mdXNlcioiCisKK0ZJTEVTX2tpbGxhbGwgPSAiJHtiaW5kaXJ9L2tpbGxhbGwuJHtCUE59IgorRklMRVNfa2lsbGFsbC1kb2MgPSAiJHttYW5kaXJ9L21hbjEva2lsbGFsbCoiCisKK0ZJTEVTX3BzdHJlZSA9ICIke2JpbmRpcn0vcHN0cmVlIgorRklMRVNfcHN0cmVlLWRvYyA9ICIke21hbmRpcn0vbWFuMS9wc3RyZWUqIgorCitGSUxFU19wc21pc2MtZXh0cmFzID0gIiR7YmluZGlyfSIKK0ZJTEVTX3BzbWlzYy1leHRyYXMtZG9jID0gIiR7bWFuZGlyfSIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjkwIgorCitBTFRFUk5BVElWRV9raWxsYWxsID0gImtpbGxhbGwiCisKK0FMVEVSTkFUSVZFX2Z1c2VyID0gImZ1c2VyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzY18yMi4yMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9wc21pc2NfMjIuMjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhYmE5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9wc21pc2NfMjIuMjEuYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSBwc21pc2MuaW5jCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5MzVjMGZkNmViMjA4Mjg4MjYyYjM4NWZhNjU2ZjFiZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NzMyM2NhZDYxOTIxMDg0NWI2OTZkN2Q3MjJjMzgzODUyYjJhY2I1YzQ5YjViMDg1MmM0ZjI5Yzc3YTgxNDVhIgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1UeXBvLWluLWZ1c2VyLW1ha2VzLU0tb24tYWxsLXRoZS10aW1lLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAyLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoIFwKKyAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL2NvbmZpZy10Y3B3cmFwcGVycy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL2NvbmZpZy10Y3B3cmFwcGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjQ3ZmJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvY29uZmlnLXRjcHdyYXBwZXJzLnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gcXVvdGEtdG9vbHMub3JpZy9jb25maWd1cmUuaW4KKysrKyBxdW90YS10b29scy9jb25maWd1cmUuaW4KK0BAIC0xNTEsMzMgKzE1MSw0NiBAQCBBQ19TVUJTVChRVU9UQV9ORVRMSU5LX1BST0cpCisgQUNfU1VCU1QoTkVUTElOS0xJQlMpCisKKyBBQ19TRUFSQ0hfTElCUyhnZXRob3N0YnluYW1lLCBuc2wpCistQUNfTVNHX0NIRUNLSU5HKGZvciBob3N0X2FjY2VzcyBpbiAtbHdyYXApCistQUNfQ0FDSEVfVkFMKGFjX2N2X2xpYl93cmFwX21haW4sCistCXNhdmVkX0xJQlM9IiRMSUJTIgorLQlMSUJTPSIkTElCUyAtbHdyYXAiCistCVtBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCistCSNpbmNsdWRlIDxzdGRpby5oPgorLQkjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistCSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CistCSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CistCSNpbmNsdWRlIDx0Y3BkLmg+CistCXN0cnVjdCByZXF1ZXN0X2luZm8gcmVxdWVzdDsKKy0JaW50IGRlbnlfc2V2ZXJpdHksIGFsbG93X3NldmVyaXR5O11dLFtbaG9zdHNfYWNjZXNzKCZyZXF1ZXN0KTtdXSldLAorLQlkbmwgV2UgYWx3YXlzIHJlc3RvcmUgTElCUyBhcyB3ZSBhZGQgLWx3cmFwIGluIHRoZSBuZXh0IGNoZWNrCistCVthY19jdl9saWJfd3JhcF9tYWluPXllczsgTElCUz0iJHNhdmVkX0xJQlMiOyBBQ19NU0dfUkVTVUxUKHllcyldLAorLQlbYWNfY3ZfbGliX3dyYXBfbWFpbj1ubzsgTElCUz0iJHNhdmVkX0xJQlMiOyBBQ19NU0dfUkVTVUxUKG5vKV0pCistCV0pCisKKy1pZiB0ZXN0ICR7YWNfY3ZfbGliX3dyYXBfbWFpbn0gPSB5ZXM7IHRoZW4KKy0JQUNfQ0hFQ0tfSEVBREVSKHRjcGQuaCwsIFsKKy0JCWVjaG8gJ0VSUk9SOiBjb3VsZCBub3QgZmluZCB0Y3BkLmggLSBtaXNzaW5nIFRDUCB3cmFwcGVycyBwYWNrYWdlJworLQkJZXhpdCAxCistCV0pCistCUxJQlM9IiRMSUJTIC1sd3JhcCIKKy0JQUNfREVGSU5FKFtIT1NUU19BQ0NFU1NdLCAxLCBbVXNlIGhvc3RzLmFsbG93IGFuZCBob3N0cy5kZW55IGZvciBhY2Nlc3MgY2hlY2tpbmcgb2YgcnBjLnJxdW90YWRdKQorLQlDT01QSUxFX09QVFM9IiRDT01QSUxFX09QVFMgSE9TVFNfQUNDRVNTIgorK0FDX0FSR19XSVRIKHRjcHdyYXBwZXJzLAorKwlbICAtLXdpdGgtdGNwd3JhcHBlcnM9W3llcy9uby90cnldICAgVXNlIGhvc3RzLmFsbG93IGFuZCBob3N0cy5kZW55IGZvciBhY2Nlc3MgY2hlY2tpbmcgb2YgcnBjLnJxdW90YSBbZGVmYXVsdD15ZXMsIGlmIGF2YWlsYWJsZS5dXSwKKysJLAorKwl3aXRoX3RjcHdyYXBwZXJzPSJ0cnkiKQorKworK2lmIHRlc3QgIngkd2l0aF90Y3B3cmFwcGVycyIgIT0geG5vOyB0aGVuCisrCUFDX01TR19DSEVDS0lORyhmb3IgaG9zdF9hY2Nlc3MgaW4gLWx3cmFwKQorKwlBQ19DQUNIRV9WQUwoYWNfY3ZfbGliX3dyYXBfbWFpbiwKKysJCXNhdmVkX0xJQlM9IiRMSUJTIgorKwkJTElCUz0iJExJQlMgLWx3cmFwIgorKwkJW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKysJCSNpbmNsdWRlIDxzdGRpby5oPgorKwkJI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKwkJI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKysJCSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisrCQkjaW5jbHVkZSA8dGNwZC5oPgorKwkJc3RydWN0IHJlcXVlc3RfaW5mbyByZXF1ZXN0OworKwkJaW50IGRlbnlfc2V2ZXJpdHksIGFsbG93X3NldmVyaXR5O11dLFtbaG9zdHNfYWNjZXNzKCZyZXF1ZXN0KTtdXSldLAorKwkJZG5sIFdlIGFsd2F5cyByZXN0b3JlIExJQlMgYXMgd2UgYWRkIC1sd3JhcCBpbiB0aGUgbmV4dCB0cnkKKysJCVthY19jdl9saWJfd3JhcF9tYWluPXllczsgTElCUz0iJHNhdmVkX0xJQlMiOyBBQ19NU0dfUkVTVUxUKHllcyldLAorKwkJW2FjX2N2X2xpYl93cmFwX21haW49bm87IExJQlM9IiRzYXZlZF9MSUJTIjsgQUNfTVNHX1JFU1VMVChubyldKQorKwkJXSkKKysKKysJaWYgdGVzdCAieCRhY19jdl9saWJfd3JhcF9tYWluIiA9IHh5ZXM7IHRoZW4KKysJCUFDX0NIRUNLX0hFQURFUih0Y3BkLmgsLCBbCisrCQkJaWYgdGVzdCAieCR3aXRoX3RjcHdyYXBwZXJzIiAhPSB4dHJ5OyB0aGVuCisrCQkJCUFDX01TR19FUlJPUihbY291bGQgbm90IGZpbmQgdGNwZC5oIC0gbWlzc2luZyBUQ1Agd3JhcHBlcnMgcGFja2FnZV0pCisrCQkJZmkKKysJCV0pCisrCisrCQlMSUJTPSIkTElCUyAtbHdyYXAiCisrCQlBQ19ERUZJTkUoW0hPU1RTX0FDQ0VTU10sIDEsIFtVc2UgaG9zdHMuYWxsb3cgYW5kIGhvc3RzLmRlbnkgZm9yIGFjY2VzcyBjaGVja2luZyBvZiBycGMucnF1b3RhZF0pCisrCQlDT01QSUxFX09QVFM9IiRDT01QSUxFX09QVFMgSE9TVFNfQUNDRVNTIgorKwllbGlmIHRlc3QgIngkd2l0aF90Y3B3cmFwcGVycyIgIT0geHRyeTsgdGhlbgorKwkJQUNfTVNHX0VSUk9SKFtjb3VsZCBub3QgZmluZCBsaWJ3cmFwIC0gbWlzc2luZyBUQ1Agd3JhcHBlcnMgcGFja2FnZV0pCisrCWZpCisgZmkKKworKworIGRubCBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorIEFDX0NfQ09OU1QKKyBBQ19DX0lOTElORQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvZmNudGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9mY250bC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2U2MGZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvZmNudGwucGF0Y2gKQEAgLTAsMCArMSwxMTMgQEAKK0luY2x1ZGUgZmNudGwuaCB0byBwYWNpZnkgY29tcGlsZXIgZXJyb3JzIG9uIG11c2wKK2xpa2UKKworZXJyb3I6IHVua25vd24gdHlwZSBuYW1lICdsb2ZmX3QnCitDb3ZlciBycGMgaGVhZGVycyB1bmRlciBwcm9wZXIgY29uZGl0aW9uYWwKK0RvbnQgdXNlIF9fUCBpdHMgdW5kZWZpbmVkCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCituZGV4OiBxdW90YS10b29scy9xdW90YS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJbmRleDogcXVvdGEtdG9vbHMvcXVvdGEuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvcXVvdGEuaAorKysrIHF1b3RhLXRvb2xzL3F1b3RhLmgKK0BAIC0xNjUsNiArMTY1LDYgQEAgZW51bSB7CisgCSNlbmRpZgorICNlbmRpZgorIAorLWxvbmcgcXVvdGFjdGwgX19QKChpbnQsIGNvbnN0IGNoYXIgKiwgcWlkX3QsIGNhZGRyX3QpKTsKKytsb25nIHF1b3RhY3RsIChpbnQsIGNvbnN0IGNoYXIgKiwgcWlkX3QsIGNhZGRyX3QpOworIAorICNlbmRpZiAvKiBfUVVPVEFfICovCitJbmRleDogcXVvdGEtdG9vbHMvcXVvdGFjaGVjay5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9xdW90YWNoZWNrLmMKKysrKyBxdW90YS10b29scy9xdW90YWNoZWNrLmMKK0BAIC0xOSw2ICsxOSw3IEBACisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8ZmNudGwuaD4KKyAKKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitJbmRleDogcXVvdGEtdG9vbHMvcXVvdGFpby5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9xdW90YWlvLmMKKysrKyBxdW90YS10b29scy9xdW90YWlvLmMKK0BAIC0xMiw2ICsxMiw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzeXMvZmlsZS5oPgorSW5kZXg6IHF1b3RhLXRvb2xzL2RxYmxrX3YyLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL2RxYmxrX3YyLmgKKysrKyBxdW90YS10b29scy9kcWJsa192Mi5oCitAQCAtNyw2ICs3LDcgQEAKKyAjaWZuZGVmIEdVQVJEX0RRQkxLX1YyX0gKKyAjZGVmaW5lIEdVQVJEX0RRQkxLX1YyX0gKKyAKKysjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgInF1b3RhX3RyZWUuaCIKKyAKK0luZGV4OiBxdW90YS10b29scy9xdW90YW9wcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9xdW90YW9wcy5jCisrKysgcXVvdGEtdG9vbHMvcXVvdGFvcHMuYworQEAgLTM0LDcgKzM0LDkgQEAKKyAKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgCisrI2lmIGRlZmluZWQoUlBDKQorICNpbmNsdWRlIDxycGMvcnBjLmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzeXMvZmlsZS5oPgorSW5kZXg6IHF1b3RhLXRvb2xzL3JxdW90YV9jbGllbnQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvcnF1b3RhX2NsaWVudC5jCisrKysgcXVvdGEtdG9vbHMvcnF1b3RhX2NsaWVudC5jCitAQCAtMTksNyArMTksOSBAQAorIAorICNpbmNsdWRlICJjb25maWcuaCIKKyAKKysjaWYgZGVmaW5lZChSUEMpCisgI2luY2x1ZGUgPHJwYy9ycGMuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorQEAgLTM1LDcgKzM3LDkgQEAKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgCisgI2luY2x1ZGUgIm1udG9wdC5oIgorKyNpZiBkZWZpbmVkKFJQQykKKyAjaW5jbHVkZSAicnF1b3RhLmgiCisrI2VuZGlmCisgI2luY2x1ZGUgImNvbW1vbi5oIgorICNpbmNsdWRlICJxdW90YWlvLmgiCisgI2luY2x1ZGUgInF1b3Rhc3lzLmgiCitJbmRleDogcXVvdGEtdG9vbHMvc2V0cXVvdGEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvc2V0cXVvdGEuYworKysrIHF1b3RhLXRvb2xzL3NldHF1b3RhLmMKK0BAIC03LDcgKzcsOSBAQAorIAorICNpbmNsdWRlICJjb25maWcuaCIKKyAKKysjaWYgZGVmaW5lZChSUEMpCisgI2luY2x1ZGUgPHJwYy9ycGMuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9yZW1vdmVfbm9uX3Bvc2l4X3R5cGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvcmVtb3ZlX25vbl9wb3NpeF90eXBlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDQyZDk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvcmVtb3ZlX25vbl9wb3NpeF90eXBlcy5wYXRjaApAQCAtMCwwICsxLDE4NSBAQAorVXNlIHByb3BlciBDOTkgaW50ZWdlciB0eXBlcworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHF1b3RhLXRvb2xzL2J5bGFiZWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvYnlsYWJlbC5jCisrKysgcXVvdGEtdG9vbHMvYnlsYWJlbC5jCitAQCAtMjAsNiArMjAsNyBAQAorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisgCisgI2luY2x1ZGUgImJ5bGFiZWwuaCIKKyAjaW5jbHVkZSAiY29tbW9uLmgiCitAQCAtMzcsMzIgKzM4LDMyIEBAIHN0YXRpYyBzdHJ1Y3QgdXVpZENhY2hlX3MgeworIAorICNkZWZpbmUgRVhUMl9TVVBFUl9NQUdJQwkweEVGNTMKKyBzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayB7CistCXVfY2hhciBzX2R1bW15MVs1Nl07CistCXVfY2hhciBzX21hZ2ljWzJdOworLQl1X2NoYXIgc19kdW1teTJbNDZdOworLQl1X2NoYXIgc191dWlkWzE2XTsKKy0JdV9jaGFyIHNfdm9sdW1lX25hbWVbMTZdOworKwl1aW50OF90IHNfZHVtbXkxWzU2XTsKKysJdWludDhfdCBzX21hZ2ljWzJdOworKwl1aW50OF90IHNfZHVtbXkyWzQ2XTsKKysJdWludDhfdCBzX3V1aWRbMTZdOworKwl1aW50OF90IHNfdm9sdW1lX25hbWVbMTZdOworIH07CisgCistI2RlZmluZSBleHQybWFnaWMocykJKCh1aW50KSBzLnNfbWFnaWNbMF0gKyAoKCh1aW50KSBzLnNfbWFnaWNbMV0pIDw8IDgpKQorKyNkZWZpbmUgZXh0Mm1hZ2ljKHMpCSgodWludDMyX3QpIHMuc19tYWdpY1swXSArICgoKHVpbnQzMl90KSBzLnNfbWFnaWNbMV0pIDw8IDgpKQorIAorICNkZWZpbmUgWEZTX1NVUEVSX01BR0lDICJYRlNCIgorICNkZWZpbmUgWEZTX1NVUEVSX01BR0lDMiAiQlNGWCIKKyBzdHJ1Y3QgeGZzX3N1cGVyX2Jsb2NrIHsKKy0JdV9jaGFyIHNfbWFnaWNbNF07CistCXVfY2hhciBzX2R1bW15WzI4XTsKKy0JdV9jaGFyIHNfdXVpZFsxNl07CistCXVfY2hhciBzX2R1bW15Mls2MF07CistCXVfY2hhciBzX2ZzbmFtZVsxMl07CisrCXVpbnQ4X3Qgc19tYWdpY1s0XTsKKysJdWludDhfdCBzX2R1bW15WzI4XTsKKysJdWludDhfdCBzX3V1aWRbMTZdOworKwl1aW50OF90IHNfZHVtbXkyWzYwXTsKKysJdWludDhfdCBzX2ZzbmFtZVsxMl07CisgfTsKKyAKKyAjZGVmaW5lIFJFSVNFUl9TVVBFUl9NQUdJQwkiUmVJc0VyMkZzIgorIHN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jayB7CistCXVfY2hhciBzX2R1bW15MVs1Ml07CistCXVfY2hhciBzX21hZ2ljWzEwXTsKKy0JdV9jaGFyIHNfZHVtbXkyWzIyXTsKKy0JdV9jaGFyIHNfdXVpZFsxNl07CistCXVfY2hhciBzX3ZvbHVtZV9uYW1lWzE2XTsKKysJdWludDhfdCBzX2R1bW15MVs1Ml07CisrCXVpbnQ4X3Qgc19tYWdpY1sxMF07CisrCXVpbnQ4X3Qgc19kdW1teTJbMjJdOworKwl1aW50OF90IHNfdXVpZFsxNl07CisrCXVpbnQ4X3Qgc192b2x1bWVfbmFtZVsxNl07CisgfTsKKyAKKyBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IHN3YXBwZWQodW5zaWduZWQgc2hvcnQgYSkKK0BAIC0yMjIsNyArMjIzLDcgQEAgc3RhdGljIGNoYXIgKmdldF9zcGVjX2J5X3goaW50IG4sIGNvbnN0CisgCXJldHVybiBOVUxMOworIH0KKyAKKy1zdGF0aWMgdV9jaGFyIGZyb21oZXgoY2hhciBjKQorK3N0YXRpYyB1aW50OF90IGZyb21oZXgoY2hhciBjKQorIHsKKyAJaWYgKGlzZGlnaXQoYykpCisgCQlyZXR1cm4gKGMgLSAnMCcpOworQEAgLTIzNCw3ICsyMzUsNyBAQCBzdGF0aWMgdV9jaGFyIGZyb21oZXgoY2hhciBjKQorIAorIHN0YXRpYyBjaGFyICpnZXRfc3BlY19ieV91dWlkKGNvbnN0IGNoYXIgKnMpCisgeworLQl1X2NoYXIgdXVpZFsxNl07CisrCXVpbnQ4X3QgdXVpZFsxNl07CisgCWludCBpOworIAorIAlpZiAoc3RybGVuKHMpICE9IDM2IHx8IHNbOF0gIT0gJy0nIHx8IHNbMTNdICE9ICctJyB8fCBzWzE4XSAhPSAnLScgfHwgc1syM10gIT0gJy0nKQorSW5kZXg6IHF1b3RhLXRvb2xzL3F1b3QuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvcXVvdC5jCisrKysgcXVvdGEtdG9vbHMvcXVvdC5jCitAQCAtNDcsNiArNDcsNyBAQAorICNpbmNsdWRlIDx1dG1wLmg+CisgI2luY2x1ZGUgPHB3ZC5oPgorICNpbmNsdWRlIDxncnAuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisgCisgI2luY2x1ZGUgInBvdC5oIgorICNpbmNsdWRlICJxdW90LmgiCitAQCAtNTYsOCArNTcsOCBAQAorICNpbmNsdWRlICJxdW90YXN5cy5oIgorIAorICNkZWZpbmUJVFNJWkUJNTAwCistc3RhdGljIF9fdWludDY0X3Qgc2l6ZXNbVFNJWkVdOworLXN0YXRpYyBfX3VpbnQ2NF90IG92ZXJmbG93OworK3N0YXRpYyB1aW50NjRfdCBzaXplc1tUU0laRV07Cisrc3RhdGljIHVpbnQ2NF90IG92ZXJmbG93OworIAorIHN0YXRpYyBpbnQgYWZsYWc7Cisgc3RhdGljIGludCBjZmxhZzsKK0BAIC03Miw3ICs3Myw3IEBAIHN0YXRpYyB0aW1lX3Qgbm93OworIGNoYXIgKnByb2duYW1lOworIAorIHN0YXRpYyB2b2lkIG1vdW50dGFibGUodm9pZCk7Cistc3RhdGljIGNoYXIgKmlkbmFtZShfX3VpbnQzMl90LCBpbnQpOworK3N0YXRpYyBjaGFyICppZG5hbWUodWludDMyX3QsIGludCk7Cisgc3RhdGljIHZvaWQgcmVwb3J0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworIHN0YXRpYyB2b2lkIGNyZXBvcnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworIAorQEAgLTE3Myw3ICsxNzQsNyBAQCBzdGF0aWMgaW50IHFjbXAoZHVfdCAqIHAxLCBkdV90ICogcDIpCisgc3RhdGljIHZvaWQgY3JlcG9ydChjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpmc2RpcikKKyB7CisgCWludCBpOworLQlfX3VpbnQ2NF90IHQgPSAwOworKwl1aW50NjRfdCB0ID0gMDsKKyAKKyAJcHJpbnRmKF8oIiVzICglcyk6XG4iKSwgZmlsZSwgZnNkaXIpOworIAlmb3IgKGkgPSAwOyBpIDwgVFNJWkUgLSAxOyBpKyspCitAQCAtMjE5LDcgKzIyMCw3IEBAIHN0YXRpYyB2b2lkIHJlcG9ydChjb25zdCBjaGFyICpmaWxlLCBjb24KKyAJfQorIH0KKyAKKy1zdGF0aWMgaWRjYWNoZV90ICpnZXRuZXh0ZW50KGludCB0eXBlLCBfX3VpbnQzMl90IGlkLCBpbnQgYnlpZCkKKytzdGF0aWMgaWRjYWNoZV90ICpnZXRuZXh0ZW50KGludCB0eXBlLCB1aW50MzJfdCBpZCwgaW50IGJ5aWQpCisgeworIAlzdHJ1Y3QgcGFzc3dkICpwdzsKKyAJc3RydWN0IGdyb3VwICAqZ3I7CitAQCAtMjQwLDcgKzI0MSw3IEBAIHN0YXRpYyBpZGNhY2hlX3QgKmdldG5leHRlbnQoaW50IHR5cGUsIF8KKyAJcmV0dXJuICZpZGM7CisgfQorIAorLXN0YXRpYyBjaGFyICppZG5hbWUoX191aW50MzJfdCBpZCwgaW50IHR5cGUpCisrc3RhdGljIGNoYXIgKmlkbmFtZSh1aW50MzJfdCBpZCwgaW50IHR5cGUpCisgeworIAlpZGNhY2hlX3QgKm5jcCwgKmlkcDsKKyAJc3RhdGljIGlkY2FjaGVfdCBuY1syXVtOSURdOworQEAgLTI4Niw4ICsyODcsOCBAQCBzdGF0aWMgdm9pZCBhY2N0WEZTKHhmc19ic3RhdF90ICpwKQorIHsKKyAJcmVnaXN0ZXIgZHVfdCAqZHA7CisgCWR1X3QgKipocDsKKy0JX191aW50NjRfdCBzaXplOworLQlfX3VpbnQzMl90IGksIGlkOworKwl1aW50NjRfdCBzaXplOworKwl1aW50MzJfdCBpLCBpZDsKKyAKKyAJaWYgKChwLT5ic19tb2RlICYgU19JRk1UKSA9PSAwKQorIAkJcmV0dXJuOworSW5kZXg6IHF1b3RhLXRvb2xzL3F1b3QuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvcXVvdC5oCisrKysgcXVvdGEtdG9vbHMvcXVvdC5oCitAQCAtMzUsMTggKzM1LDE4IEBACisgI2RlZmluZQlTRUMyNEhSCSg2MCo2MCoyNCkJLyogc2Vjb25kcyBwZXIgZGF5ICovCisgCisgdHlwZWRlZiBzdHJ1Y3QgeworLQlfX3VpbnQzMl90IGlkOworKwl1aW50MzJfdCBpZDsKKyAJY2hhciBuYW1lW1VUX05BTUVTSVpFICsgMV07CisgfSBpZGNhY2hlX3Q7CisgCisgdHlwZWRlZiBzdHJ1Y3QgZHUgeworIAlzdHJ1Y3QgZHUgKm5leHQ7CistCV9fdWludDY0X3QgYmxvY2tzOworLQlfX3VpbnQ2NF90IGJsb2NrczMwOworLQlfX3VpbnQ2NF90IGJsb2NrczYwOworLQlfX3VpbnQ2NF90IGJsb2NrczkwOworLQlfX3VpbnQ2NF90IG5maWxlczsKKy0JX191aW50MzJfdCBpZDsKKysJdWludDY0X3QgYmxvY2tzOworKwl1aW50NjRfdCBibG9ja3MzMDsKKysJdWludDY0X3QgYmxvY2tzNjA7CisrCXVpbnQ2NF90IGJsb2NrczkwOworKwl1aW50NjRfdCBuZmlsZXM7CisrCXVpbnQzMl90IGlkOworIH0gZHVfdDsKKyAKKyAjZGVmaW5lCU5EVQk2MDAwMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvcmVwbGFjZV9nZXRycGNieW51bWJlcl9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvcmVwbGFjZV9nZXRycGNieW51bWJlcl9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYTJmZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9yZXBsYWNlX2dldHJwY2J5bnVtYmVyX3IucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorUmVwbGFjZSBnZXRycGNieW51bWJlcl9yIHdpdGggZ2V0cnBjYnludW1iZXIKK211c2wgYW5kIHVjbGliYyBkb250IGltcGxlbWVudCBpdAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0luZGV4OiBxdW90YS10b29scy9zdmNfc29ja2V0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL3N2Y19zb2NrZXQuYworKysrIHF1b3RhLXRvb2xzL3N2Y19zb2NrZXQuYworQEAgLTU1LDcgKzU1LDggQEAgc3RhdGljIGludCBzdmNfc29ja2V0ICh1X2xvbmcgbnVtYmVyLCBpbgorIAlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworIAorIAlpZiAoIXBvcnQpIHsKKy0JCXJldCA9IGdldHJwY2J5bnVtYmVyX3IobnVtYmVyLCAmcnBjYnVmLCBycGNkYXRhLCBzaXplb2YocnBjZGF0YSksICZycGNwKTsKKysJCXJwY3AgPSBnZXRycGNieW51bWJlcihudW1iZXIpOworKwkJcmV0ID0gMDsKKyAJCWlmIChyZXQgPT0gMCAmJiBycGNwICE9IE5VTEwpIHsKKyAJCQkvKiBGaXJzdCB0cnkgbmFtZSAqLworIAkJCXJldCA9IGdldHNlcnZieW5hbWVfcihycGNwLT5yX25hbWUsIHByb3RvLCAmc2VydmJ1Ziwgc2VydmRhdGEsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YV80LjAyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGFfNC4wMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjRiMGEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGFfNC4wMi5iYgpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIlRvb2xzIGZvciBtb25pdG9yaW5nICYgbGltaXRpbmcgdXNlciBkaXNrIHVzYWdlIHBlciBmaWxlc3lzdGVtIgorU0VDVElPTiA9ICJiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eHF1b3RhLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xODEzNiZhdGlkPTExODEzNiIKK0xJQ0VOU0UgPSAiQlNEICYgR1BMdjIrICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vcXVvdGEuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTMzO21kNT0zMzFjN2Q3Nzc0NGJmZTBhZDI0MDI3ZjA2NTEwMjhlYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ycXVvdGFfc2VydmVyLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9ZmU3ZTBkN2UxMWM2ZjgyMGY4ZmE2MmE1YWY3MTIzMGYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3ZjX3NvY2tldC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PTI0ZDVhODc5MmRhNDU5MTA3ODZlZWFjNzUwYmU4Y2ViIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0L2xpbnV4cXVvdGEvcXVvdGEtdG9vbHMvJHtQVn0vcXVvdGEtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZy10Y3B3cmFwcGVycy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9mY250bC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmVfbm9uX3Bvc2l4X3R5cGVzLnBhdGNoIFwKKwkgICAiCitTUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiIGZpbGU6Ly9yZXBsYWNlX2dldHJwY2J5bnVtYmVyX3IucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhOGE1ZGYyNjIyNjFlNjU5NzE2Y2NhZDJhNWQ2ZGYwZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNGMyZjQ4YWJmOTRiYmRjMzk2ZGYzM2QyNzZmMmU5ZDE5YWY1OGMyMzJjYjg1ZWVmOWMxNzRhNzQ3YzMzNzk1IgorCitTID0gIiR7V09SS0RJUn0vcXVvdGEtdG9vbHMiCisKK0RFUEVORFMgPSAiZ2V0dGV4dC1uYXRpdmUgZTJmc3Byb2dzIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZ2V0dGV4dCBwa2djb25maWcKKworQ0ZMQUdTICs9ICItST0ke2luY2x1ZGVkaXJ9L3RpcnBjIgorTERGTEFHUyArPSAiLWx0aXJwYyIKK0FTTkVFREVEID0gIiIKK0VYVFJBX09FTUFLRSArPSAnU1RSSVA9IiInCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ0Y3Atd3JhcHBlcnMgcnBjIGJzZCIKK1BBQ0tBR0VDT05GSUdfbGliYy1tdXNsID0gInRjcC13cmFwcGVycyBycGMiCisKK1BBQ0tBR0VDT05GSUdbdGNwLXdyYXBwZXJzXSA9ICItLXdpdGgtdGNwd3JhcHBlcnMsLS13aXRob3V0LXRjcHdyYXBwZXJzLHRjcC13cmFwcGVycyIKK1BBQ0tBR0VDT05GSUdbcnBjXSA9ICItLWVuYWJsZS1ycGM9eWVzLC0tZW5hYmxlLXJwYz1ubyxsaWJ0aXJwYyIKK1BBQ0tBR0VDT05GSUdbYnNkXSA9ICItLWVuYWJsZS1ic2RfYmVoYXZpb3VyPXllcywtLWVuYWJsZS1ic2RfYmVoYXZpb3VyPW5vLCIKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIFJPT1RESVI9JHtEfSBpbnN0YWxsCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvMDAwMS1Bdm9pZC11c2Utb2YtZ2xpYmMtc3lzLWNkZWZzLmgtaGVhZGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kLzAwMDEtQXZvaWQtdXNlLW9mLWdsaWJjLXN5cy1jZGVmcy5oLWhlYWRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWVmOWYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kLzAwMDEtQXZvaWQtdXNlLW9mLWdsaWJjLXN5cy1jZGVmcy5oLWhlYWRlci5wYXRjaApAQCAtMCwwICsxLDIyMSBAQAorRnJvbSAyYTQ0ZDg2MjIzM2YyMTI2NTgxZTI5MGQ1NjhlMWM4YjhmMmViOWY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2FybG8gTGFuZG1ldGVyIDxjbGFuZG1ldGVyQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTkgRmViIDIwMTUgMTU6Mjg6NDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQXZvaWQgdXNlIG9mIGdsaWJjIHN5cy9jZGVmcy5oIGhlYWRlcgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIHNyYy9jaGVja19ib3VuZC5jICB8ICAgIDIgKy0KKyBzcmMvcG1hcF9zdmMuYyAgICAgfCAgIDEwICsrKysrLS0tLS0KKyBzcmMvcnBjYl9zdmMuYyAgICAgfCAgIDEwICsrKysrLS0tLS0KKyBzcmMvcnBjYl9zdmNfNC5jICAgfCAgIDE0ICsrKysrKystLS0tLS0tCisgc3JjL3JwY2Jfc3ZjX2NvbS5jIHwgICA0NiArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgc3JjL3JwY2JpbmQuYyAgICAgIHwgICAxMiArKysrKystLS0tLS0KKyBzcmMvdXRpbC5jICAgICAgICAgfCAgICAyICstCisgc3JjL3dhcm1zdGFydC5jICAgIHwgICAgNCArKy0tCisgOCBmaWxlcyBjaGFuZ2VkLCA1MCBpbnNlcnRpb25zKCspLCA1MCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9jaGVja19ib3VuZC5jIGIvc3JjL2NoZWNrX2JvdW5kLmMKK2luZGV4IGM3MGI4NDUuLjVkMjE3MzAgMTAwNjQ0CistLS0gYS9zcmMvY2hlY2tfYm91bmQuYworKysrIGIvc3JjL2NoZWNrX2JvdW5kLmMKK0BAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmRsaXN0ICpmZGhlYWQ7CS8qIExpbmsgbGlzdCBvZiB0aGUgY2hlY2sgZmQncyAqLworIHN0YXRpYyBzdHJ1Y3QgZmRsaXN0ICpmZHRhaWw7Cisgc3RhdGljIGNoYXIgKm51bGxzdHJpbmcgPSAiIjsKKyAKKy1zdGF0aWMgYm9vbF90IGNoZWNrX2JvdW5kIF9fUCgoc3RydWN0IGZkbGlzdCAqLCBjaGFyICp1YWRkcikpOworK3N0YXRpYyBib29sX3QgY2hlY2tfYm91bmQgKHN0cnVjdCBmZGxpc3QgKiwgY2hhciAqdWFkZHIpOworIAorIC8qCisgICogUmV0dXJucyAxIGlmIHRoZSBnaXZlbiBhZGRyZXNzIGlzIGJvdW5kIGZvciB0aGUgZ2l2ZW4gYWRkciAmIHRyYW5zcG9ydAorZGlmZiAtLWdpdCBhL3NyYy9wbWFwX3N2Yy5jIGIvc3JjL3BtYXBfc3ZjLmMKK2luZGV4IGFkMjhiOTMuLjljN2Q0MDkgMTAwNjQ0CistLS0gYS9zcmMvcG1hcF9zdmMuYworKysrIGIvc3JjL3BtYXBfc3ZjLmMKK0BAIC02MCwxMSArNjAsMTEgQEAgc3RhdGljCWNoYXIgc2Njc2lkW10gPSAiQCgjKXBtYXBfc3ZjLmMgMS4yMyA4OS8wNC8wNSBDb3B5ciAxOTg0IFN1biBNaWNybyI7CisgI2luY2x1ZGUgInJwY2JpbmQuaCIKKyAjaW5jbHVkZSAieGxvZy5oIgorICNpbmNsdWRlIDxycGMvc3ZjX3NvYy5oPiAvKiBzdmNfZ2V0Y2FsbGVyIHJvdXRpbmUgZGVmaW5pdGlvbiAqLworLXN0YXRpYyBzdHJ1Y3QgcG1hcGxpc3QgKmZpbmRfc2VydmljZV9wbWFwIF9fUCgocnBjcHJvZ190LCBycGN2ZXJzX3QsCistCQkJCQkgICAgICAgcnBjcHJvdF90KSk7Cistc3RhdGljIGJvb2xfdCBwbWFwcHJvY19jaGFuZ2UgX19QKChzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHVfbG9uZykpOworLXN0YXRpYyBib29sX3QgcG1hcHByb2NfZ2V0cG9ydCBfX1AoKHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKikpOworLXN0YXRpYyBib29sX3QgcG1hcHByb2NfZHVtcCBfX1AoKHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKikpOworK3N0YXRpYyBzdHJ1Y3QgcG1hcGxpc3QgKmZpbmRfc2VydmljZV9wbWFwIChycGNwcm9nX3QsIHJwY3ZlcnNfdCwKKysJCQkJCSAgICAgICBycGNwcm90X3QpOworK3N0YXRpYyBib29sX3QgcG1hcHByb2NfY2hhbmdlIChzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHVfbG9uZyk7Cisrc3RhdGljIGJvb2xfdCBwbWFwcHJvY19nZXRwb3J0IChzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICopOworK3N0YXRpYyBib29sX3QgcG1hcHByb2NfZHVtcCAoc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqKTsKKyAKKyAvKgorICAqIENhbGxlZCBmb3IgYWxsIHRoZSB2ZXJzaW9uIDIgaW5xdWlyaWVzLgorZGlmZiAtLWdpdCBhL3NyYy9ycGNiX3N2Yy5jIGIvc3JjL3JwY2Jfc3ZjLmMKK2luZGV4IGJkOTIyMDEuLjZjN2Y3ZmUgMTAwNjQ0CistLS0gYS9zcmMvcnBjYl9zdmMuYworKysrIGIvc3JjL3JwY2Jfc3ZjLmMKK0BAIC01MywxMCArNTMsMTAgQEAKKyAjaW5jbHVkZSAicnBjYmluZC5oIgorICNpbmNsdWRlICJ4bG9nLmgiCisgCistc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2dldGFkZHJfM19sb2NhbCBfX1AoKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLAorLQkJCQkJICAgcnBjdmVyc190KSk7Cistc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2R1bXBfM19sb2NhbCBfX1AoKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLAorLQkJCQkJcnBjdmVyc190KSk7Cisrc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2dldGFkZHJfM19sb2NhbCAodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosCisrCQkJCQkgICBycGN2ZXJzX3QpOworK3N0YXRpYyB2b2lkICpycGNicHJvY19kdW1wXzNfbG9jYWwgKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLAorKwkJCQkJcnBjdmVyc190KTsKKyAKKyAvKgorICAqIENhbGxlZCBieSBzdmNfZ2V0cmVxc2V0LiBUaGVyZSBpcyBhIHNlcGFyYXRlIHNlcnZlciBoYW5kbGUgZm9yCitAQCAtNzUsNyArNzUsNyBAQCBycGNiX3NlcnZpY2VfMyhzdHJ1Y3Qgc3ZjX3JlcSAqcnFzdHAsIFNWQ1hQUlQgKnRyYW5zcCkKKyAJfSBhcmd1bWVudDsKKyAJY2hhciAqcmVzdWx0OworIAl4ZHJwcm9jX3QgeGRyX2FyZ3VtZW50LCB4ZHJfcmVzdWx0OworLQl2b2lkICooKmxvY2FsKSBfX1AoKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpKTsKKysJdm9pZCAqKCpsb2NhbCkgKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpOworIAlycGNwcm9nX3Qgc2V0cHJvZyA9IDA7CisgCisgCXJwY2JzX3Byb2NpbmZvKFJQQ0JWRVJTXzNfU1RBVCwgcnFzdHAtPnJxX3Byb2MpOworZGlmZiAtLWdpdCBhL3NyYy9ycGNiX3N2Y180LmMgYi9zcmMvcnBjYl9zdmNfNC5jCitpbmRleCBiNjczNDUyLi42NzY0YzBhIDEwMDY0NAorLS0tIGEvc3JjL3JwY2Jfc3ZjXzQuYworKysrIGIvc3JjL3JwY2Jfc3ZjXzQuYworQEAgLTU0LDEzICs1NCwxMyBAQAorICNpbmNsdWRlICJycGNiaW5kLmgiCisgI2luY2x1ZGUgInhsb2cuaCIKKyAKKy1zdGF0aWMgdm9pZCAqcnBjYnByb2NfZ2V0YWRkcl80X2xvY2FsIF9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosCistCQkJCSAgICAgIHJwY3ZlcnNfdCkpOworLXN0YXRpYyB2b2lkICpycGNicHJvY19nZXR2ZXJzYWRkcl80X2xvY2FsIF9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCkpOworK3N0YXRpYyB2b2lkICpycGNicHJvY19nZXRhZGRyXzRfbG9jYWwgKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLAorKwkJCQkgICAgICBycGN2ZXJzX3QpOworK3N0YXRpYyB2b2lkICpycGNicHJvY19nZXR2ZXJzYWRkcl80X2xvY2FsICh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgcnBjdmVyc190KTsKKyBzdGF0aWMgdm9pZCAqcnBjYnByb2NfZ2V0YWRkcmxpc3RfNF9sb2NhbAorLQlfX1AoKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpKTsKKy1zdGF0aWMgdm9pZCBmcmVlX3JwY2JfZW50cnlfbGlzdCBfX1AoKHJwY2JfZW50cnlfbGlzdF9wdHIgKikpOworLXN0YXRpYyB2b2lkICpycGNicHJvY19kdW1wXzRfbG9jYWwgX19QKCh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgcnBjdmVyc190KSk7CisrCSh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgcnBjdmVyc190KTsKKytzdGF0aWMgdm9pZCBmcmVlX3JwY2JfZW50cnlfbGlzdCAocnBjYl9lbnRyeV9saXN0X3B0ciAqKTsKKytzdGF0aWMgdm9pZCAqcnBjYnByb2NfZHVtcF80X2xvY2FsICh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgcnBjdmVyc190KTsKKyAKKyAvKgorICAqIENhbGxlZCBieSBzdmNfZ2V0cmVxc2V0LiBUaGVyZSBpcyBhIHNlcGFyYXRlIHNlcnZlciBoYW5kbGUgZm9yCitAQCAtNzgsNyArNzgsNyBAQCBycGNiX3NlcnZpY2VfNChzdHJ1Y3Qgc3ZjX3JlcSAqcnFzdHAsIFNWQ1hQUlQgKnRyYW5zcCkKKyAJfSBhcmd1bWVudDsKKyAJY2hhciAqcmVzdWx0OworIAl4ZHJwcm9jX3QgeGRyX2FyZ3VtZW50LCB4ZHJfcmVzdWx0OworLQl2b2lkICooKmxvY2FsKSBfX1AoKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpKTsKKysJdm9pZCAqKCpsb2NhbCkgKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpOworIAlycGNwcm9nX3Qgc2V0cHJvZyA9IDA7CisgCisgCXJwY2JzX3Byb2NpbmZvKFJQQ0JWRVJTXzRfU1RBVCwgcnFzdHAtPnJxX3Byb2MpOworZGlmZiAtLWdpdCBhL3NyYy9ycGNiX3N2Y19jb20uYyBiL3NyYy9ycGNiX3N2Y19jb20uYworaW5kZXggZmY5Y2U2Yi4uOGFlZjllNSAxMDA2NDQKKy0tLSBhL3NyYy9ycGNiX3N2Y19jb20uYworKysrIGIvc3JjL3JwY2Jfc3ZjX2NvbS5jCitAQCAtMTAwLDI5ICsxMDAsMjkgQEAgc3RydWN0IGZpbmZvIHsKKyBzdGF0aWMgc3RydWN0IGZpbmZvICAgICBGSU5GT1tORk9SV0FSRF07CisgCisgCistc3RhdGljIGJvb2xfdCB4ZHJfZW5jYXBfcGFybXMgX19QKChYRFIgKiwgc3RydWN0IGVuY2FwX3Bhcm1zICopKTsKKy1zdGF0aWMgYm9vbF90IHhkcl9ybXRjYWxsX2FyZ3MgX19QKChYRFIgKiwgc3RydWN0IHJfcm10Y2FsbF9hcmdzICopKTsKKy1zdGF0aWMgYm9vbF90IHhkcl9ybXRjYWxsX3Jlc3VsdCBfX1AoKFhEUiAqLCBzdHJ1Y3Qgcl9ybXRjYWxsX2FyZ3MgKikpOworLXN0YXRpYyBib29sX3QgeGRyX29wYXF1ZV9wYXJtcyBfX1AoKFhEUiAqLCBzdHJ1Y3Qgcl9ybXRjYWxsX2FyZ3MgKikpOworLXN0YXRpYyBpbnQgZmluZF9ybXRjYWxsZmRfYnlfbmV0aWQgX19QKChjaGFyICopKTsKKy1zdGF0aWMgU1ZDWFBSVCAqZmluZF9ybXRjYWxseHBydF9ieV9mZCBfX1AoKGludCkpOworLXN0YXRpYyBpbnQgZm9yd2FyZF9yZWdpc3RlciBfX1AoKHVfaW50MzJfdCwgc3RydWN0IG5ldGJ1ZiAqLCBpbnQsIGNoYXIgKiwKKy0gICAgcnBjcHJvY190LCBycGN2ZXJzX3QsIHVfaW50MzJfdCAqKSk7Cistc3RhdGljIHN0cnVjdCBmaW5mbyAqZm9yd2FyZF9maW5kIF9fUCgodV9pbnQzMl90KSk7Cistc3RhdGljIGludCBmcmVlX3Nsb3RfYnlfeGlkIF9fUCgodV9pbnQzMl90KSk7Cistc3RhdGljIGludCBmcmVlX3Nsb3RfYnlfaW5kZXggX19QKChpbnQpKTsKKy1zdGF0aWMgaW50IG5ldGJ1ZmNtcCBfX1AoKHN0cnVjdCBuZXRidWYgKiwgc3RydWN0IG5ldGJ1ZiAqKSk7Cistc3RhdGljIHN0cnVjdCBuZXRidWYgKm5ldGJ1ZmR1cCBfX1AoKHN0cnVjdCBuZXRidWYgKikpOworLXN0YXRpYyB2b2lkIG5ldGJ1ZmZyZWUgX19QKChzdHJ1Y3QgbmV0YnVmICopKTsKKy1zdGF0aWMgaW50IGNoZWNrX3JtdGNhbGxzIF9fUCgoc3RydWN0IHBvbGxmZCAqLCBpbnQpKTsKKy1zdGF0aWMgdm9pZCB4cHJ0X3NldF9jYWxsZXIgX19QKChTVkNYUFJUICosIHN0cnVjdCBmaW5mbyAqKSk7Cistc3RhdGljIHZvaWQgc2VuZF9zdmNzeXNlcnIgX19QKChTVkNYUFJUICosIHN0cnVjdCBmaW5mbyAqKSk7Cistc3RhdGljIHZvaWQgaGFuZGxlX3JlcGx5IF9fUCgoaW50LCBTVkNYUFJUICopKTsKKy1zdGF0aWMgdm9pZCBmaW5kX3ZlcnNpb25zIF9fUCgocnBjcHJvZ190LCBjaGFyICosIHJwY3ZlcnNfdCAqLCBycGN2ZXJzX3QgKikpOworLXN0YXRpYyBycGNibGlzdF9wdHIgZmluZF9zZXJ2aWNlIF9fUCgocnBjcHJvZ190LCBycGN2ZXJzX3QsIGNoYXIgKikpOworLXN0YXRpYyBjaGFyICpnZXRvd25lciBfX1AoKFNWQ1hQUlQgKiwgY2hhciAqLCBzaXplX3QpKTsKKy1zdGF0aWMgaW50IGFkZF9wbWFwbGlzdCBfX1AoKFJQQ0IgKikpOworLXN0YXRpYyBpbnQgZGVsX3BtYXBsaXN0IF9fUCgoUlBDQiAqKSk7Cisrc3RhdGljIGJvb2xfdCB4ZHJfZW5jYXBfcGFybXMgKFhEUiAqLCBzdHJ1Y3QgZW5jYXBfcGFybXMgKik7Cisrc3RhdGljIGJvb2xfdCB4ZHJfcm10Y2FsbF9hcmdzIChYRFIgKiwgc3RydWN0IHJfcm10Y2FsbF9hcmdzICopOworK3N0YXRpYyBib29sX3QgeGRyX3JtdGNhbGxfcmVzdWx0IChYRFIgKiwgc3RydWN0IHJfcm10Y2FsbF9hcmdzICopOworK3N0YXRpYyBib29sX3QgeGRyX29wYXF1ZV9wYXJtcyAoWERSICosIHN0cnVjdCByX3JtdGNhbGxfYXJncyAqKTsKKytzdGF0aWMgaW50IGZpbmRfcm10Y2FsbGZkX2J5X25ldGlkIChjaGFyICopOworK3N0YXRpYyBTVkNYUFJUICpmaW5kX3JtdGNhbGx4cHJ0X2J5X2ZkIChpbnQpOworK3N0YXRpYyBpbnQgZm9yd2FyZF9yZWdpc3RlciAodV9pbnQzMl90LCBzdHJ1Y3QgbmV0YnVmICosIGludCwgY2hhciAqLAorKyAgICBycGNwcm9jX3QsIHJwY3ZlcnNfdCwgdV9pbnQzMl90ICopOworK3N0YXRpYyBzdHJ1Y3QgZmluZm8gKmZvcndhcmRfZmluZCAodV9pbnQzMl90KTsKKytzdGF0aWMgaW50IGZyZWVfc2xvdF9ieV94aWQgKHVfaW50MzJfdCk7Cisrc3RhdGljIGludCBmcmVlX3Nsb3RfYnlfaW5kZXggKGludCk7Cisrc3RhdGljIGludCBuZXRidWZjbXAgKHN0cnVjdCBuZXRidWYgKiwgc3RydWN0IG5ldGJ1ZiAqKTsKKytzdGF0aWMgc3RydWN0IG5ldGJ1ZiAqbmV0YnVmZHVwIChzdHJ1Y3QgbmV0YnVmICopOworK3N0YXRpYyB2b2lkIG5ldGJ1ZmZyZWUgKHN0cnVjdCBuZXRidWYgKik7Cisrc3RhdGljIGludCBjaGVja19ybXRjYWxscyAoc3RydWN0IHBvbGxmZCAqLCBpbnQpOworK3N0YXRpYyB2b2lkIHhwcnRfc2V0X2NhbGxlciAoU1ZDWFBSVCAqLCBzdHJ1Y3QgZmluZm8gKik7Cisrc3RhdGljIHZvaWQgc2VuZF9zdmNzeXNlcnIgKFNWQ1hQUlQgKiwgc3RydWN0IGZpbmZvICopOworK3N0YXRpYyB2b2lkIGhhbmRsZV9yZXBseSAoaW50LCBTVkNYUFJUICopOworK3N0YXRpYyB2b2lkIGZpbmRfdmVyc2lvbnMgKHJwY3Byb2dfdCwgY2hhciAqLCBycGN2ZXJzX3QgKiwgcnBjdmVyc190ICopOworK3N0YXRpYyBycGNibGlzdF9wdHIgZmluZF9zZXJ2aWNlIChycGNwcm9nX3QsIHJwY3ZlcnNfdCwgY2hhciAqKTsKKytzdGF0aWMgY2hhciAqZ2V0b3duZXIgKFNWQ1hQUlQgKiwgY2hhciAqLCBzaXplX3QpOworK3N0YXRpYyBpbnQgYWRkX3BtYXBsaXN0IChSUENCICopOworK3N0YXRpYyBpbnQgZGVsX3BtYXBsaXN0IChSUENCICopOworIAorIC8qCisgICogU2V0IGEgbWFwcGluZyBvZiBwcm9ncmFtLCB2ZXJzaW9uLCBuZXRpZAorZGlmZiAtLWdpdCBhL3NyYy9ycGNiaW5kLmMgYi9zcmMvcnBjYmluZC5jCitpbmRleCAwNDVkYWExLi4xMzcwMTFiIDEwMDY0NAorLS0tIGEvc3JjL3JwY2JpbmQuYworKysrIGIvc3JjL3JwY2JpbmQuYworQEAgLTEzNSwxMyArMTM1LDEzIEBAIGNoYXIgKnRjcF91YWRkcjsJLyogVW5pdmVyc2FsIFRDUCBhZGRyZXNzICovCisgc3RhdGljIGNoYXIgc2Vydm5hbWVbXSA9ICJycGNiaW5kIjsKKyBzdGF0aWMgY2hhciBzdXBlcnVzZXJbXSA9ICJzdXBlcnVzZXIiOworIAorLWludCBtYWluIF9fUCgoaW50LCBjaGFyICpbXSkpOworK2ludCBtYWluIChpbnQsIGNoYXIgKltdKTsKKyAKKy1zdGF0aWMgaW50IGluaXRfdHJhbnNwb3J0IF9fUCgoc3RydWN0IG5ldGNvbmZpZyAqKSk7Cistc3RhdGljIHZvaWQgcmJsbGlzdF9hZGQgX19QKChycGNwcm9nX3QsIHJwY3ZlcnNfdCwgc3RydWN0IG5ldGNvbmZpZyAqLAorLQkJCSAgICAgc3RydWN0IG5ldGJ1ZiAqKSk7Cistc3RhdGljIHZvaWQgdGVybWluYXRlIF9fUCgoaW50KSk7Cistc3RhdGljIHZvaWQgcGFyc2VhcmdzIF9fUCgoaW50LCBjaGFyICpbXSkpOworK3N0YXRpYyBpbnQgaW5pdF90cmFuc3BvcnQgKHN0cnVjdCBuZXRjb25maWcgKik7Cisrc3RhdGljIHZvaWQgcmJsbGlzdF9hZGQgKHJwY3Byb2dfdCwgcnBjdmVyc190LCBzdHJ1Y3QgbmV0Y29uZmlnICosCisrCQkJICAgICBzdHJ1Y3QgbmV0YnVmICopOworK3N0YXRpYyB2b2lkIHRlcm1pbmF0ZSAoaW50KTsKKytzdGF0aWMgdm9pZCBwYXJzZWFyZ3MgKGludCwgY2hhciAqW10pOworIAorIGludAorIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK2RpZmYgLS1naXQgYS9zcmMvdXRpbC5jIGIvc3JjL3V0aWwuYworaW5kZXggYTZjODM1Yi4uMzNiOWU0ZiAxMDA2NDQKKy0tLSBhL3NyYy91dGlsLmMKKysrKyBiL3NyYy91dGlsLmMKK0BAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmxvY2FsX2luNDsKKyBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luNiAqbG9jYWxfaW42OworICNlbmRpZgorIAorLXN0YXRpYyBpbnQgYml0bWFza2NtcCBfX1AoKHZvaWQgKiwgdm9pZCAqLCB2b2lkICosIGludCkpOworK3N0YXRpYyBpbnQgYml0bWFza2NtcCAodm9pZCAqLCB2b2lkICosIHZvaWQgKiwgaW50KTsKKyAKKyAvKgorICAqIEZvciBhbGwgYml0cyBzZXQgaW4gIm1hc2siLCBjb21wYXJlIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgaW4KK2RpZmYgLS1naXQgYS9zcmMvd2FybXN0YXJ0LmMgYi9zcmMvd2FybXN0YXJ0LmMKK2luZGV4IGI2ZWI3M2UuLjQyZGQzYWYgMTAwNjQ0CistLS0gYS9zcmMvd2FybXN0YXJ0LmMKKysrKyBiL3NyYy93YXJtc3RhcnQuYworQEAgLTU4LDggKzU4LDggQEAKKyAjZGVmaW5lCVBNQVBGSUxFCVJQQ0JJTkRfU1RBVEVESVIgIi9wb3J0bWFwLnhkciIKKyAjZW5kaWYKKyAKKy1zdGF0aWMgYm9vbF90IHdyaXRlX3N0cnVjdCBfX1AoKGNoYXIgKiwgeGRycHJvY190LCB2b2lkICopKTsKKy1zdGF0aWMgYm9vbF90IHJlYWRfc3RydWN0IF9fUCgoY2hhciAqLCB4ZHJwcm9jX3QsIHZvaWQgKikpOworK3N0YXRpYyBib29sX3Qgd3JpdGVfc3RydWN0IChjaGFyICosIHhkcnByb2NfdCwgdm9pZCAqKTsKKytzdGF0aWMgYm9vbF90IHJlYWRfc3RydWN0IChjaGFyICosIHhkcnByb2NfdCwgdm9pZCAqKTsKKyAKKyBzdGF0aWMgYm9vbF90Cisgd3JpdGVfc3RydWN0KGNoYXIgKmZpbGVuYW1lLCB4ZHJwcm9jX3Qgc3RydWN0cHJvYywgdm9pZCAqbGlzdCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC8wMDAxLXVjbGliYy1uc3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvMDAwMS11Y2xpYmMtbnNzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYTU1ZjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvMDAwMS11Y2xpYmMtbnNzLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGcm9tIGI4ZjBkN2I3MzE4YmEzNDRjMjU3ODVkNmY1Y2YzZjhkZTk4MDEyZDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOYXRhbmFlbCBDb3BhIDxuY29wYUBhbHBpbmVsaW51eC5vcmc+CitEYXRlOiBUdWUsIDIgRmViIDIwMTAgMDk6MzY6MDMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIHVjbGliYy1uc3MKKworLS0tCisgc3JjL3JwY2JpbmQuYyB8ICAgIDQgKysrKworIDEgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3JwY2JpbmQuYyBiL3NyYy9ycGNiaW5kLmMKK2luZGV4IDUyNWZmYmEuLjFmZTFhNjAgMTAwNjQ0CistLS0gYS9zcmMvcnBjYmluZC5jCisrKysgYi9zcmMvcnBjYmluZC5jCitAQCAtNjcsNyArNjcsMTEgQEAKKyAjaW5jbHVkZSA8cHdkLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorKyNpZiBkZWZpbmVkKF9fVUNMSUJDX18pCisrI2RlZmluZSBfX25zc19jb25maWd1cmVfbG9va3VwKHgseSkKKysjZWxzZQorICNpbmNsdWRlIDxuc3MuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgI2luY2x1ZGUgInJwY2JpbmQuaCIKKyAKKy0tIAorMS42LjYuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvaW5pdC5kIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL2luaXQuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzQ5OWFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL2luaXQuZApAQCAtMCwwICsxLDg3IEBACisjIS9iaW4vc2gKKyMKKyMgc3RhcnQvc3RvcCBycGNiaW5kIGRhZW1vbi4KKworIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgcnBjYmluZAorIyBSZXF1aXJlZC1TdGFydDogICAgJG5ldHdvcmsKKyMgUmVxdWlyZWQtU3RvcDogICAgICRuZXR3b3JrCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBSUEMgcG9ydG1hcHBlciByZXBsYWNlbWVudAorIyBEZXNjcmlwdGlvbjogICAgICAgcnBjYmluZCBpcyBhIHNlcnZlciB0aGF0IGNvbnZlcnRzIFJQQyAoUmVtb3RlCisjICAgICAgICAgICAgICAgICAgICBQcm9jZWR1cmUgQ2FsbCkgcHJvZ3JhbSBudW1iZXJzIGludG8gREFSUEEKKyMgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIHBvcnQgbnVtYmVycy4gSXQgbXVzdCBiZSBydW5uaW5nIGluCisjICAgICAgICAgICAgICAgICAgICBvcmRlciB0byBtYWtlIFJQQyBjYWxscy4gU2VydmljZXMgdGhhdCB1c2UKKyMgICAgICAgICAgICAgICAgICAgIFJQQyBpbmNsdWRlIE5GUyBhbmQgTklTLgorIyMjIEVORCBJTklUIElORk8KKworIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK3Rlc3QgLWYgL3NiaW4vcnBjYmluZCB8fCBleGl0IDAKKworT1BUSU9OUz0iIgoraWYgWyAtZiAvZXRjL2RlZmF1bHQvcnBjYmluZCBdCit0aGVuCisgICAgLiAvZXRjL2RlZmF1bHQvcnBjYmluZAorZWxpZiBbIC1mIC9ldGMvcnBjYmluZC5jb25mIF0KK3RoZW4KKyAgICAuIC9ldGMvcnBjYmluZC5jb25mCitmaQorCitzdGFydCAoKQoreworICAgIGVjaG8gLW4gIlN0YXJ0aW5nIHJwY2JpbmQgZGFlbW9uLi4uIgorICAgIGlmIHBpZG9mIC9zYmluL3JwY2JpbmQgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJhbHJlYWR5IHJ1bm5pbmcuIgorICAgICAgICBleGl0IDAKKyAgICBmaQorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLWV4ZWMgL3NiaW4vcnBjYmluZCAtLSAiJEAiCisgICAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisgICAgICAgIGVjaG8gImRvbmUuIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiZmFpbGVkLiIKKyAgICBmaQorfQorCitzdG9wICgpCit7CisgICAgZWNobyAiU3RvcHBpbmcgcnBjYmluZCBkYWVtb24uLi4iCisgICAgaWYgISBwaWRvZiAvc2Jpbi9ycGNiaW5kID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgZWNobyAibm90IHJ1bm5pbmcuIgorICAgICAgICByZXR1cm4gMAorICAgIGZpCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1leGVjIC9zYmluL3JwY2JpbmQKKyAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgICAgICAgZWNobyAiZG9uZS4iCisgICAgZWxzZQorICAgICAgICBlY2hvICJmYWlsZWQuIgorICAgIGZpCit9CisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorICAgICAgICBzdGFydCAkT1BUSU9OUworICAgICAgICA7OworICAgIHN0b3ApCisgICAgICAgIHN0b3AKKyAgICAgICAgOzsKKyAgICBmb3JjZS1yZWxvYWQpCisgICAgICAgIHN0b3AKKyAgICAgICAgc3RhcnQgJE9QVElPTlMKKyAgICAgICAgOzsKKyAgICByZXN0YXJ0KQorICAgICAgICBzdG9wCisgICAgICAgIHN0YXJ0ICRPUFRJT05TCisgICAgICAgIDs7CisgICAgc3RhdHVzKQorICAgICAgICBzdGF0dXMgL3NiaW4vcnBjYmluZAorICAgICAgICA7OworICAgICopCisgICAgICAgIGVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9ycGNiaW5kIHtzdGFydHxzdG9wfGZvcmNlLXJlbG9hZHxyZXN0YXJ0fHN0YXR1c30iCisgICAgICAgIGV4aXQgMQorICAgICAgICA7OworZXNhYworCitleGl0ICQ/CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvbXVzbC1zdW5ycGMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvbXVzbC1zdW5ycGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM3MmExYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9tdXNsLXN1bnJwYy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitUaGUgbXVzbCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRhZGRyaW5mbyBhbmQgZ2V0c2VydmJ5bmFtZSBkb2VzIG5vdAorYWxpYXNlcy4gQXMgYSB3b3JrYXJvdW5kIHdlIHVzZSAic3VucHJjIiBpbnN0ZWFkIG9mICJwb3J0bWFwcGVyIgorCitwb3J0ZWQgZnJvbSBhbHBpbmUgbGludXgKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHJwY2JpbmQtMC4yLjIvc3JjL3JwY2JpbmQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwY2JpbmQtMC4yLjIub3JpZy9zcmMvcnBjYmluZC5jCisrKysgcnBjYmluZC0wLjIuMi9zcmMvcnBjYmluZC5jCitAQCAtNDkxLDcgKzQ5MSw3IEBAIGluaXRfdHJhbnNwb3J0KHN0cnVjdCBuZXRjb25maWcgKm5jb25mKQorIAkJCWlmICgoYWljb2RlID0gZ2V0YWRkcmluZm8oaG9zdHNbbmhvc3RzYmFrXSwKKyAJCQkgICAgc2Vydm5hbWUsICZoaW50cywgJnJlcykpICE9IDApIHsKKyAJCQkgIGlmICgoYWljb2RlID0gZ2V0YWRkcmluZm8oaG9zdHNbbmhvc3RzYmFrXSwKKy0JCQkJCQkgICAgInBvcnRtYXBwZXIiLCAmaGludHMsICZyZXMpKSAhPSAwKSB7CisrCQkJCQkJICAgICJzdW5ycGMiLCAmaGludHMsICZyZXMpKSAhPSAwKSB7CisgCQkJCXN5c2xvZyhMT0dfRVJSLAorIAkJCQkgICAgImNhbm5vdCBnZXQgbG9jYWwgYWRkcmVzcyBmb3IgJXM6ICVzIiwKKyAJCQkJICAgIG5jb25mLT5uY19uZXRpZCwgZ2FpX3N0cmVycm9yKGFpY29kZSkpOworQEAgLTU2NCw3ICs1NjQsNyBAQCBpbml0X3RyYW5zcG9ydChzdHJ1Y3QgbmV0Y29uZmlnICpuY29uZikKKyAJCWlmICgoc3RyY21wKG5jb25mLT5uY19uZXRpZCwgImxvY2FsIikgIT0gMCkgJiYKKyAJCSAgICAoc3RyY21wKG5jb25mLT5uY19uZXRpZCwgInVuaXgiKSAhPSAwKSkgeworIAkJCWlmICgoYWljb2RlID0gZ2V0YWRkcmluZm8oTlVMTCwgc2Vydm5hbWUsICZoaW50cywgJnJlcykpIT0gMCkgeworLQkJCSAgaWYgKChhaWNvZGUgPSBnZXRhZGRyaW5mbyhOVUxMLCAicG9ydG1hcHBlciIsICZoaW50cywgJnJlcykpIT0gMCkgeworKwkJCSAgaWYgKChhaWNvZGUgPSBnZXRhZGRyaW5mbyhOVUxMLCAic3VucnBjIiwgJmhpbnRzLCAmcmVzKSkhPSAwKSB7CisgCQkJICBwcmludGYoImNhbm5vdCBnZXQgbG9jYWwgYWRkcmVzcyBmb3IgJXM6ICVzIiwgIG5jb25mLT5uY19uZXRpZCwgZ2FpX3N0cmVycm9yKGFpY29kZSkpOworIAkJCSAgc3lzbG9nKExPR19FUlIsCisgCQkJCSAgICAiY2Fubm90IGdldCBsb2NhbCBhZGRyZXNzIGZvciAlczogJXMiLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JlbW92ZS1zeXMtcXVldWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcmVtb3ZlLXN5cy1xdWV1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGZjOTc0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JlbW92ZS1zeXMtcXVldWUucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorbXVzbCBkb2VzIG5vdCBwcm92aWRlIHRoaXMgaGVhZGVyIGFuZCBoZXJlIGlzIHJlYXNvbmluZworaHR0cDovL3dpa2kubXVzbC1saWJjLm9yZy93aWtpL0ZBUSNROl93aHlfaXNfc3lzLjJGcXVldWUuaF9ub3RfaW5jbHVkZWRfLjNGCisKK1NvIGluY2x1ZGUgaXQgb25seSB3aGVuIF9fR0xJQkNfXyBpcyBkZWZpbmVkIHdoaWNoIGlzIHRydWUgZm9yIHVjbGliYyBhbmQgZ2xpYmMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogcnBjYmluZC0wLjIuMi9zcmMvdXRpbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBjYmluZC0wLjIuMi5vcmlnL3NyYy91dGlsLmMKKysrKyBycGNiaW5kLTAuMi4yL3NyYy91dGlsLmMKK0BAIC00MSw3ICs0MSw5IEBACisgCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisrI2lmZGVmIF9fR0xJQkNfXworICNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8bmV0L2lmLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8aWZhZGRycy5oPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9ycGNiaW5kLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE0ZGZiYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9ycGNiaW5kLmNvbmYKQEAgLTAsMCArMSwzIEBACisjIE9wdGlvbmFsIGFyZ3VtZW50cyBwYXNzZWQgdG8gcnBjYmluZC4KKyMKK1JQQ0JJTkRfT1BUUz0iIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9ycGNiaW5kLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNhZTI1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9ycGNiaW5kLnNlcnZpY2UKQEAgLTAsMCArMSwxMiBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1SUEMgQmluZCBTZXJ2aWNlCitSZXF1aXJlcz1ycGNiaW5kLnNvY2tldAorCitbU2VydmljZV0KK1R5cGU9Zm9ya2luZworRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvcnBjYmluZC5jb25mCitFeGVjU3RhcnQ9QFNCSU5ESVJAL3JwY2JpbmQgLXcgJFJQQ0JJTkRfT1BUUworU3VjY2Vzc0V4aXRTdGF0dXM9MgorCitbSW5zdGFsbF0KK0Fsc289cnBjYmluZC5zb2NrZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9ycGNiaW5kLnNvY2tldCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9ycGNiaW5kLnNvY2tldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjNjMWQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuc29ja2V0CkBAIC0wLDAgKzEsOCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1SUENiaW5kIFNlcnZlciBBY3RpdmF0aW9uIFNvY2tldAorCitbU29ja2V0XQorTGlzdGVuU3RyZWFtPS92YXIvcnVuL3JwY2JpbmQuc29jaworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PXNvY2tldHMudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmRfMC4yLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmRfMC4yLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMzNjAyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZF8wLjIuMy5iYgpAQCAtMCwwICsxLDczIEBACitTVU1NQVJZID0gIlVuaXZlcnNhbCBBZGRyZXNzZXMgdG8gUlBDIFByb2dyYW0gTnVtYmVyIE1hcHBlciIKK0RFU0NSSVBUSU9OID0gIlRoZSBycGNiaW5kIHV0aWxpdHkgaXMgYSBzZXJ2ZXIgdGhhdCBjb252ZXJ0cyBSUEMgXAorICAgICAgICAgICAgICAgcHJvZ3JhbSBudW1iZXJzIGludG8gdW5pdmVyc2FsIGFkZHJlc3Nlcy4iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcnBjYmluZC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MjAxMjM3JmF0aWQ9OTc2NzUxIgorREVQRU5EUyA9ICJsaWJ0aXJwYyBxdW90YSIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iNDY0ODZlNGM0YTQxNjYwMjY5M2E3MTFiYjViZmEzOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcnBjaW5mby5jO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjc7bWQ1PWY4YThjZDJjYjI1YWM1YWExNjc2NzM2NGZiMGUzYzI0IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9ycGNiaW5kL3JwY2JpbmQtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0LmQgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Bdm9pZC11c2Utb2YtZ2xpYmMtc3lzLWNkZWZzLmgtaGVhZGVyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS1zeXMtcXVldWUucGF0Y2ggXAorICAgICAgICAgICAke1VDTElCQ1BBVENIRVN9IFwKKyAgICAgICAgICAgJHtNVVNMUEFUQ0hFU30gXAorICAgICAgICAgICBmaWxlOi8vcnBjYmluZC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL3JwY2JpbmQuc29ja2V0IFwKKyAgICAgICAgICAgZmlsZTovL3JwY2JpbmQuc2VydmljZSBcCisgICAgICAgICAgIgorTVVTTFBBVENIRVNfbGliYy1tdXNsID0gImZpbGU6Ly9tdXNsLXN1bnJwYy5wYXRjaCIKKworVUNMSUJDUEFUQ0hFU19saWJjLXVjbGliYyA9ICJmaWxlOi8vMDAwMS11Y2xpYmMtbnNzLnBhdGNoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCitVQ0xJQkNQQVRDSEVTID89ICIiCitNVVNMUEFUQ0hFUyA/PSAiIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzg4NzUyNDZiMjY4OGExYWRmYmQ2YWQ0MzQ4MDI3OGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTg5NzgyM2E5ZDgyMGVhMDExZDllYTAyMDU0ZDVhYjk5NDY5YjljYTUzNDYyNjVmZWUzODA3MTNjOGZlZDI3YiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLXJjLmQgc3lzdGVtZCBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA/Pz0gInRjcC13cmFwcGVycyIKK1BBQ0tBR0VDT05GSUdbdGNwLXdyYXBwZXJzXSA9ICItLWVuYWJsZS1saWJ3cmFwLC0tZGlzYWJsZS1saWJ3cmFwLHRjcC13cmFwcGVycyIKKworSU5JVFNDUklQVF9OQU1FID0gInJwY2JpbmQiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAxMiAyIDMgNCA1IC4gc3RvcCA2MCAwIDEgNiAuIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAicnBjYmluZC5zZXJ2aWNlIgorCitpbmhlcml0IHVzZXJhZGQKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK1VTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gLS1uby1jcmVhdGUtaG9tZSAtLWhvbWUtZGlyIC8gXAorICAgICAgICAgICAgICAgICAgICAgICAtLXNoZWxsIC9iaW4vZmFsc2UgLS11c2VyLWdyb3VwIHJwYyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC1zeXN0ZW1kc3lzdGVtdW5pdGRpciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kIFwKKyIKKworRVhUUkFfT0VDT05GICs9ICIgLS1lbmFibGUtd2FybXN0YXJ0cyAtLXdpdGgtcnBjdXNlcj1ycGMiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwltdiAke0R9JHtiaW5kaXJ9ICR7RH0ke3NiaW5kaXJ9CisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCXNlZCAtZSAncywvZXRjLywke3N5c2NvbmZkaXJ9LyxnJyBcCisJCS1lICdzLC9zYmluLywke3NiaW5kaXJ9LyxnJyBcCisJCSR7V09SS0RJUn0vaW5pdC5kID4gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3JwY2JpbmQKKwljaG1vZCAwNzU1ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9ycGNiaW5kCisKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9ycGNiaW5kLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcnBjYmluZC5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ycGNiaW5kLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgXAorCQktZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCisJCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3JwY2JpbmQuc2VydmljZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAxLWZpeC1mb3ItbXVsdGlqb2ItYnVpbGQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDEtZml4LWZvci1tdWx0aWpvYi1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGVjZWYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAxLWZpeC1mb3ItbXVsdGlqb2ItYnVpbGQucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitCYWNrcG9ydCBwYXRjaCB0byBmaXggcGFyYWxsZWwgYnVpbGQgZmFpbHVyZSBhbmQgdXBkYXRlIGNvbnRleHQgdG8gbWFrZSBwYXRjaAorY291bGRlIGJlIGFwcGxpZWQuCisKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L3NjcmVlbi5naXQvY29tbWl0P2lkPWMwZGU2ZGQKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KK0Zyb20gYzBkZTZkZDc5NzBiMmM3YjQyNmE1YzM5ZGNiYzMxYzJiZWY4NzIzMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbWFkZXVzej0yMFM9QzU9ODJhd2k9QzU9ODRza2k/PSA8YW1hZGVAYXNtYmxyLm5ldD4KK0RhdGU6IFRodSwgMiBKYW4gMjAxNCAxODoxODowNiArMDEwMAorU3ViamVjdDogW1BBVENIXSBmaXggZm9yIG11bHRpam9iIGJ1aWxkCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK21ha2Ugc3VyZSB0aGF0IGNvbW0uc2ggc2NyaXB0IGdlbmVyYXRlcyBjb21tLmggaGVhZGVyIGJlZm9yZSBkb2luZworYW55dGhpbmcgZWxzZQorCitTaWduZWQtb2ZmLWJ5OiBBbWFkZXVzeiBTxYJhd2nFhHNraSA8YW1hZGVAYXNtYmxyLm5ldD4KKy0tLQorIE1ha2VmaWxlLmluIHwgMTAgKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBjZTg2Y2JjLi5kZWExNmQ4IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMjk4LDcgKzI5OCw3IEBAIHNlYXJjaC5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIHNlYXJjaC5jIGNvbmZpZy5oIHNjcmVlbi5oIG9zLmggb3NkZWYuaCBhCisgIGNvbW0uaCBsYXllci5oIHRlcm0uaCBpbWFnZS5oIGRpc3BsYXkuaCB3aW5kb3cuaCBtYXJrLmggZXh0ZXJuLmgKKyB0dHkubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCB0dHkuYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYW5zaS5oIGFjbHMuaCBjb21tLmggXAorICBsYXllci5oIHRlcm0uaCBpbWFnZS5oIGRpc3BsYXkuaCB3aW5kb3cuaCBleHRlcm4uaAorLXRlcm0ubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCB0ZXJtLmMgdGVybS5oCisrdGVybS5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIHRlcm0uYyB0ZXJtLmggY29tbS5oCisgd2luZG93Lm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggd2luZG93LmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGFuc2kuaCBhY2xzLmggXAorICBjb21tLmggbGF5ZXIuaCB0ZXJtLmggaW1hZ2UuaCBkaXNwbGF5Lmggd2luZG93LmggZXh0ZXJuLmggbG9nZmlsZS5oCisgdXRtcC5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIHV0bXAuYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYW5zaS5oIGFjbHMuaCBcCitAQCAtMzI0LDcgKzMyNCw3IEBAIGNhbnZhcy5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIGNhbnZhcy5jIGNvbmZpZy5oIHNjcmVlbi5oIG9zLmggb3NkZWYuaCBhCisgIGNvbW0uaCBsYXllci5oIHRlcm0uaCBpbWFnZS5oIGRpc3BsYXkuaCB3aW5kb3cuaCBleHRlcm4uaCBcCisgIGJyYWlsbGUuaAorIGNvbW0ubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCBjb21tLmMgY29uZmlnLmggYWNscy5oIGNvbW0uaAorLWttYXBkZWYubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCBrbWFwZGVmLmMgY29uZmlnLmgKKytrbWFwZGVmLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmgga21hcGRlZi5jIGNvbmZpZy5oIGNvbW0uaAorIGFjbHMubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCBhY2xzLmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGFuc2kuaCBhY2xzLmggY29tbS5oIFwKKyAgbGF5ZXIuaCB0ZXJtLmggaW1hZ2UuaCBkaXNwbGF5Lmggd2luZG93LmggZXh0ZXJuLmgKKyBicmFpbGxlLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggYnJhaWxsZS5jIGNvbmZpZy5oIHNjcmVlbi5oIG9zLmggb3NkZWYuaCBhbnNpLmggYWNscy5oIFwKK0BAIC0zNTAsNyArMzUwLDcgQEAgbGF5b3V0Lm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggbGF5b3V0LmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGEKKyB2aWV3cG9ydC5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIHZpZXdwb3J0LmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGFuc2kuaCBhY2xzLmggXAorICBjb21tLmggbGF5ZXIuaCB0ZXJtLmggaW1hZ2UuaCBkaXNwbGF5Lmggd2luZG93LmggZXh0ZXJuLmggXAorICBicmFpbGxlLmgKKy1saXN0X2dlbmVyaWMubzogbGlzdF9nZW5lcmljLmggbGlzdF9nZW5lcmljLmMgbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oCistbGlzdF9kaXNwbGF5Lm86IGxpc3RfZ2VuZXJpYy5oIGxpc3RfZGlzcGxheS5jIGxheWVyLmggc2NyZWVuLmggb3NkZWYuaAorLWxpc3Rfd2luZG93Lm86IGxpc3RfZ2VuZXJpYy5oIGxpc3Rfd2luZG93LmMgd2luZG93LmggbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oCisrbGlzdF9nZW5lcmljLm86IGxpc3RfZ2VuZXJpYy5oIGxpc3RfZ2VuZXJpYy5jIGxheWVyLmggc2NyZWVuLmggb3NkZWYuaCBjb21tLmgKKytsaXN0X2Rpc3BsYXkubzogbGlzdF9nZW5lcmljLmggbGlzdF9kaXNwbGF5LmMgbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oIGNvbW0uaAorK2xpc3Rfd2luZG93Lm86IGxpc3RfZ2VuZXJpYy5oIGxpc3Rfd2luZG93LmMgd2luZG93LmggbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oIGNvbW0uaAorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAyLWNvbW0uaC1ub3ctZGVwZW5kcy1vbi10ZXJtLmgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDItY29tbS5oLW5vdy1kZXBlbmRzLW9uLXRlcm0uaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWQ3MWNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAyLWNvbW0uaC1ub3ctZGVwZW5kcy1vbi10ZXJtLmgucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitCYWNrcG9ydCBmcm9tOgorCitodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9zY3JlZW4uZ2l0L2NvbW1pdC8/aWQ9MzljNWYxYworCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorRnJvbSAzOWM1ZjFjNzZmMWZjZWY0YjU5NThiZjgyOGE2M2Y1MzQyNmI2OTg0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWlrZSBHZXJ3aXR6IDxtaWtlQG1pa2VnZXJ3aXR6LmNvbT4KK0RhdGU6IFR1ZSwgMjQgRGVjIDIwMTMgMjI6MTY6MzEgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29tbS5oIG5vdyBkZXBlbmRzIG9uIHRlcm0uaAorCistLS0KKyBzcmMvTWFrZWZpbGUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuaW4gYi9zcmMvTWFrZWZpbGUuaW4KK2luZGV4IGU3OTFlNzkuLmQ0ZjdjMGIgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0xMTMsNyArMTEzLDcgQEAgdGVybS5oOiB0ZXJtLmMgdGVybS5zaAorIAorIGttYXBkZWYuYzogdGVybS5oCisgCistY29tbS5oOiBjb21tLmMgY29tbS5zaCBjb25maWcuaAorK2NvbW0uaDogY29tbS5jIGNvbW0uc2ggY29uZmlnLmggdGVybS5oCisgCUFXSz0kKEFXSykgQ0M9IiQoQ0MpICQoQ0ZMQUdTKSIgc3JjZGlyPSR7c3JjZGlyfSBzaCAkKHNyY2RpcikvY29tbS5zaAorIAorIGRvY3M6CistLSAKKzIuNC4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vQXZvaWQtbWlzLWlkZW50aWZ5aW5nLXN5c3RlbXMtYXMtU1ZSNC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vQXZvaWQtbWlzLWlkZW50aWZ5aW5nLXN5c3RlbXMtYXMtU1ZSNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTg0YWExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Bdm9pZC1taXMtaWRlbnRpZnlpbmctc3lzdGVtcy1hcy1TVlI0LnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0Zyb20gNzlhZmI2NzY5MDQ2NTM0MDMxNDVmZGE5ZTFhNmE5ZDNlYTFjYjIyYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBGcmksIDcgQXVnIDIwMTUgMTE6MTA6MzIgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCA0LzRdIEF2b2lkIG1pcy1pZGVudGlmeWluZyBzeXN0ZW1zIGFzIFNWUjQKKworTGludXggY2FuIGJlIG1pc2RldGVjdGVkIGFzIFNWUjQgYmVjYXVzZSBpdCBoYXMKK2xpYmVsZiBpbnN0YWxsZWQuIFRoaXMgbGVhZHMgdG8gbGlua2luZyB3aXRoIGxpYmVsZiwgZXZlbiB0aG91Z2ggbm8KK3N5bWJvbHMgZnJvbSB0aGF0IGxpYnJhcnkgd2VyZSBhY3R1YWxseSB1c2VkLCBhbmQgdG8gYSB3b3JrYXJvdW5kIGZvcgorYSBidWdneSBnZXRsb2dpbigpIGJlaW5nIGVuYWJsZWQuCisKK0l0IGlzIG5vdCBkb2N1bWVudGVkIHdoaWNoIGV4YWN0IFNWUjQgc3lzdGVtIGhhZCB0aGUgYnVnIHRoYXQgdGhlCit3b3JrYXJvdW5kIHdhcyBhZGRlZCBmb3IsIHNvIGFsbCBJIGNvdWxkIGRvIGlzIG1ha2UgYW4gZWR1Y2F0ZWQgZ3Vlc3MKK2F0IHRoZSAjZGVmaW5lcyBpdHMgY29tcGlsZXIgd291bGQgYmUgbGlrZWx5IHRvIHNldC4KKworTW9kaWZpZWQgZnJvbSBwYXRjaCBieSBNYWFydGVuIHRlciBIdXVybmUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz80MzIyM10KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDE0ICsrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGRjOTI4YWUuLjY1NDM5Y2UgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE3OSwxNCArMTc5LDI0IEBAIEFDX0VHUkVQX0NQUCh5ZXMsCisgI2VuZGlmCisgXSwgTElCUz0iJExJQlMgLWxzb2NrZXQgLWxpbmV0IjtzZXFwdHg9MSkKKyAKKytBQ19DSEVDS0lORyhTVlI0KQorK0FDX0VHUkVQX0NQUCh5ZXMsCisrW21haW4gKCkgeworKyNpZiBkZWZpbmVkKFNWUjQpIHx8IGRlZmluZWQoX19TVlI0KQorKyAgeWVzOworKyNlbmRpZgorK10sIEFDX05PVEUoLSB5b3UgaGF2ZSBhIFNWUjQgc3lzdGVtKSBBQ19ERUZJTkUoU1ZSNCkgc3ZyND0xKQorK2lmIHRlc3QgLW4gIiRzdnI0IiA7IHRoZW4KKyBvbGRsaWJzPSIkTElCUyIKKyBMSUJTPSIkTElCUyAtbGVsZiIKKyBBQ19DSEVDS0lORyhTVlI0KQorIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8dXRtcHguaD4KKyBdLCwKKy1bQUNfQ0hFQ0tfSEVBREVSKGR3YXJmLmgsIEFDX0RFRklORShTVlI0KSBBQ19ERUZJTkUoQlVHR1lHRVRMT0dJTiksCistW0FDX0NIRUNLX0hFQURFUihlbGYuaCwgQUNfREVGSU5FKFNWUjQpIEFDX0RFRklORShCVUdHWUdFVExPR0lOKSldKV0KKytbQUNfQ0hFQ0tfSEVBREVSKGR3YXJmLmgsIEFDX0RFRklORShCVUdHWUdFVExPR0lOKSwKKytbQUNfQ0hFQ0tfSEVBREVSKGVsZi5oLCBBQ19ERUZJTkUoQlVHR1lHRVRMT0dJTikpXSldCisgLExJQlM9IiRvbGRsaWJzIikKKytmaQorKworIEFDX0NIRUNLX0hFQURFUlMoW3N0cm9wdHMuaCBzdHJpbmcuaCBzdHJpbmdzLmhdKQorIAorIEFDX0NIRUNLSU5HKGZvciBTb2xhcmlzIDIueCkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Qcm92aWRlLWNyb3NzLWNvbXBpbGUtYWx0ZXJuYXRpdmVzLWZvci1BQ19UUllfUlVOLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Qcm92aWRlLWNyb3NzLWNvbXBpbGUtYWx0ZXJuYXRpdmVzLWZvci1BQ19UUllfUlVOLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OGJmMDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL1Byb3ZpZGUtY3Jvc3MtY29tcGlsZS1hbHRlcm5hdGl2ZXMtZm9yLUFDX1RSWV9SVU4ucGF0Y2gKQEAgLTAsMCArMSwxMzcgQEAKK0Zyb20gY2QwZjdmMTBhM2ZmZmJjNjBmZTU1ZWIyMDA0NzRkMTNmZTFkYTY1YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBGcmksIDcgQXVnIDIwMTUgMTA6MzQ6MjkgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzRdIFByb3ZpZGUgY3Jvc3MgY29tcGlsZSBhbHRlcm5hdGl2ZXMgZm9yIEFDX1RSWV9SVU4KKworTW9kaWZpZWQgZnJvbSBwYXRjaCBieSBNYWFydGVuIHRlciBIdXVybmUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz80MzIyM10KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDMyICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAyNzY5MGE2Li5jZTg5ZjU2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zNDgsNyArMzQ4LDggQEAgbWFpbigpCisgICBleGl0KDApOworIH0KKyBdLCBBQ19OT1RFKC0geW91ciBmaWZvcyBhcmUgdXNhYmxlKSBmaWZvPTEsCistQUNfTk9URSgtIHlvdXIgZmlmb3MgYXJlIG5vdCB1c2FibGUpKQorK0FDX05PVEUoLSB5b3VyIGZpZm9zIGFyZSBub3QgdXNhYmxlKSwKKytBQ19OT1RFKC0gc2tpcHBpbmcgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWluZyBmaWZvcyBhcmUgdXNhYmxlKSBmaWZvPTEpCisgcm0gLWYgL3RtcC9jb25mdGVzdCoKKyAKKyBpZiB0ZXN0IC1uICIkZmlmbyI7IHRoZW4KK0BAIC0zOTYsNyArMzk3LDggQEAgbWFpbigpCisgICBleGl0KDApOworIH0KKyBdLCBBQ19OT1RFKC0geW91ciBpbXBsZW1lbnRhdGlvbiBpcyBvayksIAorLUFDX05PVEUoLSB5b3UgaGF2ZSBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbikgQUNfREVGSU5FKEJST0tFTl9QSVBFKSBmaWZvYnI9MSkKKytBQ19OT1RFKC0geW91IGhhdmUgYSBicm9rZW4gaW1wbGVtZW50YXRpb24pIEFDX0RFRklORShCUk9LRU5fUElQRSkgZmlmb2JyPTEsCisrQUNfTk9URSgtIHNraXBwaW5nIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgYXNzdW1pbmcgZmlmbyBpbXBsZW1lbnRhdGlvbiBpcyBvaykpCisgcm0gLWYgL3RtcC9jb25mdGVzdCoKKyBmaQorIAorQEAgLTQ1OCw3ICs0NjAsOCBAQCBtYWluKCkKKyAgIGV4aXQoMCk7CisgfQorIF0sIEFDX05PVEUoLSB5b3VyIHNvY2tldHMgYXJlIHVzYWJsZSkgc29jaz0xLAorLUFDX05PVEUoLSB5b3VyIHNvY2tldHMgYXJlIG5vdCB1c2FibGUpKQorK0FDX05PVEUoLSB5b3VyIHNvY2tldHMgYXJlIG5vdCB1c2FibGUpLAorK0FDX05PVEUoLSBza2lwcGluZyBjaGVjayBiZWNhdXNlIHdlIGFyZSBjcm9zcyBjb21waWxpbmc7IGFzc3VtaW5nIHNvY2tldHMgYXJlIHVzYWJsZSkgc29jaz0xKQorIHJtIC1mIC90bXAvY29uZnRlc3QqCisgCisgaWYgdGVzdCAtbiAiJHNvY2siOyB0aGVuCitAQCAtNDk3LDcgKzUwMCw4IEBAIG1haW4oKQorIH0KKyBdLEFDX05PVEUoLSB5b3UgYXJlIG5vcm1hbCksCisgQUNfTk9URSgtIHVuaXggZG9tYWluIHNvY2tldHMgYXJlIG5vdCBrZXB0IGluIHRoZSBmaWxlc3lzdGVtKQorLUFDX0RFRklORShTT0NLX05PVF9JTl9GUykgc29ja25vZnM9MSkKKytBQ19ERUZJTkUoU09DS19OT1RfSU5fRlMpIHNvY2tub2ZzPTEsCisrQUNfTk9URSgtIHNraXBwaW5nIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgYXNzdW1pbmcgc29ja2V0cyBhcmUgbm9ybWFsKSkKKyBybSAtZiAvdG1wL2NvbmZ0ZXN0KgorIGZpCisgCitAQCAtNjI0LDcgKzYyOCw4IEBAIG1haW4oKQorICAgZXhpdCgwKTsKKyB9CisgXSxBQ19OT1RFKC0gc2VsZWN0IGlzIG9rKSwKKy1BQ19OT1RFKC0gc2VsZWN0IGNhbid0IGNvdW50KSBBQ19ERUZJTkUoU0VMRUNUX0JST0tFTikpCisrQUNfTk9URSgtIHNlbGVjdCBjYW4ndCBjb3VudCkgQUNfREVGSU5FKFNFTEVDVF9CUk9LRU4pLAorK0FDX05PVEUoLSBza2lwcGluZyBjaGVjayBiZWNhdXNlIHdlIGFyZSBjcm9zcyBjb21waWxpbmc7IGFzc3VtaW5nIHNlbGVjdCBpcyBvaykpCisgCisgZG5sCisgZG5sICAgICoqKiogIHRlcm1jYXAgb3IgdGVybWluZm8gICoqKioKK0BAIC02NjYsNyArNjcxLDggQEAgbWFpbigpCisgeworICBleGl0KHN0cmNtcCh0Z290bygiJXAxJWQiLCAwLCAxKSwgIjEiKSA/IDAgOiAxKTsKKyB9XSwgQUNfTk9URSgtIHlvdSB1c2UgdGhlIHRlcm1jYXAgZGF0YWJhc2UpLAorLUFDX05PVEUoLSB5b3UgdXNlIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSkgQUNfREVGSU5FKFRFUk1JTkZPKSkKKytBQ19OT1RFKC0geW91IHVzZSB0aGUgdGVybWluZm8gZGF0YWJhc2UpIEFDX0RFRklORShURVJNSU5GTyksCisrQUNfTk9URSgtIHNraXBwaW5nIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgYXNzdW1pbmcgdGVybWluZm8gZGF0YWJhc2UgaXMgdXNlZCkgQUNfREVGSU5FKFRFUk1JTkZPKSkKKyBBQ19DSEVDS0lORyhvc3BlZWQpCisgQUNfVFJZX0xJTksoZXh0ZXJuIHNob3J0IG9zcGVlZDssb3NwZWVkPTU7LCxBQ19ERUZJTkUoTkVFRF9PU1BFRUQpKQorIAorQEAgLTgwMSw3ICs4MDcsOCBAQCBtYWluKCkKKyAgICAgZWxzZQorICAgICAgIEFDX05PVEUoLSBjYW4ndCBkZXRlcm1pbmUgLSBhc3N1bWUgcHR5cyBhcmUgd29ybGQgYWNjZXNzYWJsZSkKKyAgICAgZmkKKy0gIF0KKysgIF0sCisrICBBQ19OT1RFKC0gc2tpcHBpbmcgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWluZyBwdHlzIGFyZSB3b3JsZCBhY2Nlc3NhYmxlKQorICkKKyBybSAtZiBjb25mdGVzdF9ncnAKKyBmaQorQEAgLTg4NSw3ICs4OTIsNyBAQCBBQ19FR1JFUF9DUFAoeWVzLAorICNlbmRpZgorIF0sIGxvYWQ9MSkKKyBmaQorLWlmIHRlc3QgLXogIiRsb2FkIiA7IHRoZW4KKytpZiB0ZXN0IC16ICIkbG9hZCIgJiYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyA7IHRoZW4KKyBBQ19DSEVDS0lORyhmb3Iga2VybmVsZmlsZSkKKyBmb3IgY29yZSBpbiAvdW5peCAvdm11bml4IC9keW5peCAvaHAtdXggL3hlbG9zIC9kZXYva3N5bXMgL2tlcm5lbC91bml4IC9rZXJuZWwvZ2VudW5peCAvdW5pY29zIC9tYWNoIC9uZXRic2QgLzM4NmJzZCAvZGd1eCAvYnNkIC9zdGFuZC92bXVuaXg7IGRvCisgICBpZiB0ZXN0IC1mICRjb3JlIHx8IHRlc3QgLWMgJGNvcmU7IHRoZW4KK0BAIC0xMDc4LDcgKzEwODUsNyBAQCBtYWluKCkKKyAjZW5kaWYKKyAgIGV4aXQoMCk7CisgfQorLV0sLEFDX0RFRklORShTWVNWU0lHUykpCisrXSwsQUNfREVGSU5FKFNZU1ZTSUdTKSw6KQorIAorIGZpCisgCitAQCAtMTE1OCw3ICsxMTY1LDcgQEAgbWFpbigpIHsKKyAgIGlmIChzdHJuY21wKGJ1ZiwgImNkZWRlZiIsIDYpKQorICAgICBleGl0KDEpOworICAgZXhpdCgwKTsgLyogbGliYyB2ZXJzaW9uIHdvcmtzIHByb3Blcmx5LiAgKi8KKy19XSwgQUNfREVGSU5FKFVTRUJDT1BZKSkKKyt9XSwgQUNfREVGSU5FKFVTRUJDT1BZKSwsOikKKyAKKyBBQ19UUllfUlVOKFsKKyAjZGVmaW5lIGJjb3B5KHMsZCxsKSBtZW1tb3ZlKGQscyxsKQorQEAgLTExNzMsNyArMTE4MCw4IEBAIG1haW4oKSB7CisgICBpZiAoc3RybmNtcChidWYsICJjZGVkZWYiLCA2KSkKKyAgICAgZXhpdCgxKTsKKyAgIGV4aXQoMCk7IC8qIGxpYmMgdmVyc2lvbiB3b3JrcyBwcm9wZXJseS4gICovCistfV0sIEFDX0RFRklORShVU0VNRU1NT1ZFKSkKKyt9XSwgQUNfREVGSU5FKFVTRU1FTU1PVkUpLCwKKysgIEFDX05PVEUoLSBza2lwcGluZyBjaGVjayBiZWNhdXNlIHdlIGFyZSBjcm9zcyBjb21waWxpbmc7IHVzZSBtZW1tb3ZlKSBBQ19ERUZJTkUoVVNFTUVNTU9WRSkpCisgCisgCisgQUNfVFJZX1JVTihbCitAQCAtMTE4OSw3ICsxMTk3LDcgQEAgbWFpbigpIHsKKyAgIGlmIChzdHJuY21wKGJ1ZiwgImNkZWRlZiIsIDYpKQorICAgICBleGl0KDEpOworICAgZXhpdCgwKTsgLyogbGliYyB2ZXJzaW9uIHdvcmtzIHByb3Blcmx5LiAgKi8KKy19XSwgQUNfREVGSU5FKFVTRU1FTUNQWSkpCisrfV0sIEFDX0RFRklORShVU0VNRU1DUFkpLCw6KQorIAorIEFDX1NZU19MT05HX0ZJTEVfTkFNRVMKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9SZW1vdmUtcmVkdW5kYW50LWNvbXBpbGVyLXNhbml0eS1jaGVja3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL1JlbW92ZS1yZWR1bmRhbnQtY29tcGlsZXItc2FuaXR5LWNoZWNrcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzYyYzEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9SZW1vdmUtcmVkdW5kYW50LWNvbXBpbGVyLXNhbml0eS1jaGVja3MucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorRnJvbSA3M2I3MjZjMjVmOTRjMWIxNTUxNGVkOTI0OWI5MjdhZmRmYmJmYjk0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IEZyaSwgNyBBdWcgMjAxNSAxMDozMDo0MCArMDMwMAorU3ViamVjdDogW1BBVENIIDEvNF0gUmVtb3ZlIHJlZHVuZGFudCBjb21waWxlciBzYW5pdHkgY2hlY2tzCisKK0FDX1BST0dfQ0MgYWxyZWFkeSBwZXJmb3JtcyBzYW5pdHkgY2hlY2tzLiBBbmQgdW5saWtlIHRoZSByZW1vdmVkCitjaGVja3MsIGl0IGRvZXMgc28gaW4gYSB3YXkgdGhhdCBzdXBwb3J0cyBjcm9zcyBjb21waWxhdGlvbi4KKworTW9kaWZpZWQgZnJvbSBwYXRjaCBieSBNYWFydGVuIHRlciBIdXVybmUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz80MzIyM10KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDI3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZmZlMmUzNy4uMjc2OTBhNiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNDgsMzEgKzQ4LDYgQEAgQUNfUFJPR19HQ0NfVFJBRElUSU9OQUwKKyBBQ19JU0NfUE9TSVgKKyBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAKKy1BQ19UUllfUlVOKG1haW4oKXtleGl0KDApO30sLFsKKy1pZiB0ZXN0ICRDQyAhPSBjYyA7IHRoZW4KKy1BQ19OT1RFKFlvdXIgJENDIGZhaWxlZCAtIHJlc3RhcnRpbmcgd2l0aCBDQz1jYykKKy1BQ19OT1RFKCkKKy1DQz1jYworLWV4cG9ydCBDQworLWV4ZWMgJDAgJGNvbmZpZ3VyZV9hcmdzCistZmkKKy1dKQorLQorLUFDX1RSWV9SVU4obWFpbigpe2V4aXQoMCk7fSwsCistZXhlYyA1PiYyCistZXZhbCAkYWNfbGluaworLUFDX05PVEUoQ0M9JENDOyBDRkxBR1M9JENGTEFHUzsgTElCUz0kTElCUzspCistQUNfTk9URSgkYWNfY29tcGlsZSkKKy1BQ19NU0dfRVJST1IoQ2FuJ3QgcnVuIHRoZSBjb21waWxlciAtIHNvcnJ5KSkKKy0KKy1BQ19UUllfUlVOKFsKKy1tYWluKCkKKy17CistICBpbnQgX19zb21ldGhpbmdfc3RyYW5nZV8oKTsKKy0gIF9fc29tZXRoaW5nX3N0cmFuZ2VfKDApOworLX0KKy1dLEFDX01TR19FUlJPUihZb3VyIGNvbXBpbGVyIGRvZXMgbm90IHNldCB0aGUgZXhpdCBzdGF0dXMgLSBzb3JyeSkpCistCisgQUNfUFJPR19BV0sKKyAKKyBBQ19QUk9HX0lOU1RBTEwKK0BAIC0xMzAwLDggKzEyNzUsNiBAQCBmaQorIGRubCBQdHggYnVnIHdvcmthcm91bmQgLS0gaW5zZXJ0IC1sYyBhZnRlciAtbHRlcm1jYXAKKyB0ZXN0IC1uICIkc2VxcHR4IiAmJiBMSUJTPSItbHRlcm1jYXAgLWxjIC1sc29ja2V0IC1saW5ldCAtbG5zbCAtbHNlYyAtbHNlcSIKKyAKKy1BQ19UUllfUlVOKG1haW4oKXtleGl0KDApO30sLEFDX01TR19FUlJPUihDYW4ndCBydW4gdGhlIGNvbXBpbGVyIC0gaW50ZXJuYWwgZXJyb3IuIFNvcnJ5LikpCistCisgRVRDU0NSRUVOUkM9CisgQUNfTVNHX0NIRUNLSU5HKGZvciB0aGUgZ2xvYmFsIHNjcmVlbnJjIGZpbGUpCisgQUNfQVJHX1dJVEgoc3lzLXNjcmVlbnJjLCBbICAtLXdpdGgtc3lzLXNjcmVlbnJjPXBhdGggdG8gdGhlIGdsb2JhbCBzY3JlZW5yYyBmaWxlXSwgWyBFVENTQ1JFRU5SQz0iJHt3aXRodmFsfSIgXSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Ta2lwLWhvc3QtZmlsZS1zeXN0ZW0tY2hlY2tzLXdoZW4tY3Jvc3MtY29tcGlsaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Ta2lwLWhvc3QtZmlsZS1zeXN0ZW0tY2hlY2tzLXdoZW4tY3Jvc3MtY29tcGlsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZTU1YTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL1NraXAtaG9zdC1maWxlLXN5c3RlbS1jaGVja3Mtd2hlbi1jcm9zcy1jb21waWxpbmcucGF0Y2gKQEAgLTAsMCArMSwxMzUgQEAKK0Zyb20gZDBiMjBlNGNhY2M2MGFkNjJhMjE1MGNlMDczODhjYjVhMjVjMjA0MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBGcmksIDcgQXVnIDIwMTUgMTE6MDk6MDEgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzRdIFNraXAgaG9zdCBmaWxlIHN5c3RlbSBjaGVja3Mgd2hlbiBjcm9zcy1jb21waWxpbmcKKworTW9kaWZpZWQgZnJvbSBwYXRjaCBieSBNYWFydGVuIHRlciBIdXVybmUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz80MzIyM10KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIzICsrKysrKysrKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGNlODlmNTYuLmRjOTI4YWUgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTg1LDcgKzg1LDcgQEAgQUNfQVJHX0VOQUJMRShzb2NrZXQtZGlyLAorIGRubAorIGRubCAgICAqKioqICBzcGVjaWFsIHVuaXggdmFyaWFudHMgICoqKioKKyBkbmwKKy1pZiB0ZXN0IC1uICIkSVNDIjsgdGhlbgorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gJiYgdGVzdCAtbiAiJElTQyIgOyB0aGVuCisgICBBQ19ERUZJTkUoSVNDKSBMSUJTPSIkTElCUyAtbGluZXQiCisgZmkKKyAKK0BAIC05NiwxMCArOTYsMTEgQEAgZG5sIEFDX0RFRklORShPU0YxKQkjIHRoaXMgZGlzYWJsZXMgTUlQUyBhZ2Fpbi4uLi4KKyBkbmwgZmkKKyBkbmwgZmkKKyAKKy1pZiB0ZXN0IC1mIC9zeXNWNjggOyB0aGVuCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyAmJiB0ZXN0IC1mIC9zeXNWNjggOyB0aGVuCisgQUNfREVGSU5FKHN5c1Y2OCkKKyBmaQorIAorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgQUNfQ0hFQ0tJTkcoZm9yIE1JUFMpCisgaWYgdGVzdCAtZiAvbGliL2xpYm1sZC5hIHx8IHRlc3QgLWYgL3Vzci9saWIvbGlibWxkLmEgfHwgdGVzdCAtZiAvdXNyL2xpYi9jbXBscnMvY2MvbGlibWxkLmE7IHRoZW4KKyBvbGRsaWJzPSIkTElCUyIKK0BAIC0xMjMsNiArMTI0LDcgQEAgQUNfREVGSU5FKFVTRV9XQUlUMikgTElCUz0iJExJQlMgLWxic2QiIDsgQ0M9IiRDQyAtSS91c3IvaW5jbHVkZS9ic2QiCisgKSkKKyBmaQorIGZpCisrZmkKKyAKKyAKKyBBQ19DSEVDS0lORyhmb3IgVWx0cml4KQorQEAgLTEzMiw3ICsxMzQsNyBAQCBBQ19FR1JFUF9DUFAoeWVzLAorICNlbmRpZgorIF0sIFVMVFJJWD0xKQorIAorLWlmIHRlc3QgLWYgL3Vzci9saWIvbGlicHlyLmEgOyB0aGVuCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyAmJiB0ZXN0IC1mIC91c3IvbGliL2xpYnB5ci5hIDsgdGhlbgorIG9sZGxpYnM9IiRMSUJTIgorIExJQlM9IiRMSUJTIC1scHlyIgorIEFDX0NIRUNLSU5HKFB5cmFtaWQgT1NYKQorQEAgLTY3OSwxNyArNjgxLDIxIEBAIEFDX1RSWV9MSU5LKGV4dGVybiBzaG9ydCBvc3BlZWQ7LG9zcGVlZD01OywsQUNfREVGSU5FKE5FRURfT1NQRUVEKSkKKyBkbmwKKyBkbmwgICAgKioqKiAgUFRZIHNwZWNpZmljIHRoaW5ncyAgKioqKgorIGRubAorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgQUNfQ0hFQ0tJTkcoZm9yIC9kZXYvcHRjKQorIGlmIHRlc3QgLXIgL2Rldi9wdGM7IHRoZW4KKyBBQ19ERUZJTkUoSEFWRV9ERVZfUFRDKQorIGZpCisrZmkKKyAKKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vIDsgdGhlbgorIEFDX0NIRUNLSU5HKGZvciBTVlI0IHB0eXMpCisgc3lzdnI0cHR5cz0KKyBpZiB0ZXN0IC1jIC9kZXYvcHRteCA7IHRoZW4KKyBBQ19UUllfTElOSyhbXSxbcHRzbmFtZSgwKTtncmFudHB0KDApO3VubG9ja3B0KDApO10sW0FDX0RFRklORShIQVZFX1NWUjRfUFRZUykKKyBzeXN2cjRwdHlzPTFdKQorIGZpCisrZmkKKyAKKyBBQ19DSEVDS19GVU5DUyhnZXRwdCkKKyAKK0BAIC02OTksNiArNzA1LDcgQEAgQUNfQ0hFQ0tfRlVOQ1Mob3BlbnB0eSwsCisgW0FDX0NIRUNLX0xJQih1dGlsLG9wZW5wdHksIFtBQ19ERUZJTkUoSEFWRV9PUEVOUFRZKV0gW0xJQlM9IiRMSUJTIC1sdXRpbCJdKV0pCisgZmkKKyAKKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vIDsgdGhlbgorIEFDX0NIRUNLSU5HKGZvciBwdHlyYW5nZXMpCisgaWYgdGVzdCAtZCAvZGV2L3B0eW0gOyB0aGVuCisgcGRpcj0nL2Rldi9wdHltJworQEAgLTcyMiw2ICs3MjksNyBAQCBwMT1gZWNobyAkcHR5cyB8IHRyICcgJyAnXDAxMicgfCBzZWQgLWUgJ3MvXi4qXCguXCkkL1wxL2cnICB8IHNvcnQgLXUgfCB0ciAtZCAnXAorIEFDX0RFRklORV9VTlFVT1RFRChQVFlSQU5HRTAsIiRwMCIpCisgQUNfREVGSU5FX1VOUVVPVEVEKFBUWVJBTkdFMSwiJHAxIikKKyBmaQorK2ZpCisgCisgZG5sICAgICoqKiogIHB0eSBtb2RlL2dyb3VwIGhhbmRsaW5nICoqKioKKyBkbmwKK0BAIC04NjksMTQgKzg3NywxNiBAQCBmaQorIGRubAorIGRubCAgICAqKioqICBsb2FkYXYgICoqKioKKyBkbmwKKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vIDsgdGhlbgorIEFDX0NIRUNLSU5HKGZvciBsaWJ1dGlsKHMpKQorIHRlc3QgLWYgL3Vzci9saWIvbGlidXRpbHMuYSAmJiBMSUJTPSIkTElCUyAtbHV0aWxzIgorIHRlc3QgLWYgL3Vzci9saWIvbGlidXRpbC5hICYmIExJQlM9IiRMSUJTIC1sdXRpbCIKKytmaQorIAorIEFDX0NIRUNLSU5HKGdldGxvYWRhdmcpCisgQUNfVFJZX0xJTksoLFtnZXRsb2FkYXZnKChkb3VibGUgKikwLCAwKTtdLAorIEFDX0RFRklORShMT0FEQVZfR0VUTE9BREFWRykgbG9hZD0xLAorLWlmIHRlc3QgLWYgL3Vzci9saWIvbGlia3ZtLmEgOyB0aGVuCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyAmJiB0ZXN0IC1mIC91c3IvbGliL2xpYmt2bS5hIDsgdGhlbgorIG9saWJzPSIkTElCUyIKKyBMSUJTPSIkTElCUyAtbGt2bSIKKyBBQ19DSEVDS0lORyhnZXRsb2FkYXZnIHdpdGggLWxrdm0pCitAQCAtMTA5NCwxMyArMTEwNCwxOCBAQCBkbmwgICAgKioqKiAgbGlicmFyaWVzICAqKioqCisgZG5sCisgCisgQUNfQ0hFQ0tJTkcoZm9yIGNyeXB0IGFuZCBzZWMgbGlicmFyaWVzKQorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgdGVzdCAtZiAvbGliL2xpYmNyeXB0X2QuYSB8fCB0ZXN0IC1mIC91c3IvbGliL2xpYmNyeXB0X2QuYSAmJiBMSUJTPSIkTElCUyAtbGNyeXB0X2QiCisrZmkKKyBvbGRsaWJzPSIkTElCUyIKKyBMSUJTPSIkTElCUyAtbGNyeXB0IgorIEFDX0NIRUNLSU5HKGNyeXB0KQorIEFDX1RSWV9MSU5LKCwsLExJQlM9IiRvbGRsaWJzIikKKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vIDsgdGhlbgorIHRlc3QgLWYgL2xpYi9saWJzZWMuYSB8fCB0ZXN0IC1mIC91c3IvbGliL2xpYnNlYy5hICYmIExJQlM9IiRMSUJTIC1sc2VjIgorIHRlc3QgLWYgL2xpYi9saWJzaGFkb3cuYSB8fCB0ZXN0IC1mIC91c3IvbGliL2xpYnNoYWRvdy5hICYmIExJQlM9IiRMSUJTIC1sc2hhZG93IgorK2ZpCisrCisgb2xkbGlicz0iJExJQlMiCisgTElCUz0iJExJQlMgLWxzdW4iCisgQUNfQ0hFQ0tJTkcoSVJJWCBzdW4gbGlicmFyeSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vZml4LXBhcmFsbGVsLW1ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBjYWY1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vZml4LXBhcmFsbGVsLW1ha2UucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVGhpcyBmaXhlcyB0aGUgcGFyYWxsZWwgbWFrZSBpbnN0YWxsIGZhaWx1cmUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHNjcmVlbi00LjAuMy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNjcmVlbi00LjAuMy5vcmlnL01ha2VmaWxlLmluCisrKysgc2NyZWVuLTQuMC4zL01ha2VmaWxlLmluCitAQCAtNzAsNyArNzAsNyBAQCBzY3JlZW46ICQoT0ZJTEVTKQorIC5jLm86CisgCSQoQ0MpIC1jIC1JLiAtSSQoc3JjZGlyKSAkKE1fQ0ZMQUdTKSAkKERFRlMpICQoT1BUSU9OUykgJChDRkxBR1MpICQ8CisgCistaW5zdGFsbF9iaW46IC52ZXJzaW9uIHNjcmVlbgorK2luc3RhbGxfYmluOiAudmVyc2lvbiBzY3JlZW4gaW5zdGFsbGRpcnMKKyAJLWlmIFsgLWYgJChERVNURElSKSQoYmluZGlyKS8kKFNDUkVFTikgXSAmJiBbICEgLWYgJChERVNURElSKSQoYmluZGlyKS8kKFNDUkVFTikub2xkIF07IFwKKyAJCXRoZW4gbXYgJChERVNURElSKSQoYmluZGlyKS8kKFNDUkVFTikgJChERVNURElSKSQoYmluZGlyKS8kKFNDUkVFTikub2xkOyBmaQorIAkkKElOU1RBTExfUFJPR1JBTSkgc2NyZWVuICQoREVTVERJUikkKGJpbmRpcikvJChTQ1JFRU4pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL3NjcmVlbi5wYW0gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL3NjcmVlbi5wYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY2NTdmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vc2NyZWVuLnBhbQpAQCAtMCwwICsxLDIgQEAKKyMlUEFNLTEuMAorYXV0aCAgICAgICBpbmNsdWRlICAgICAgY29tbW9uLWF1dGgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW5fNC4zLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuXzQuMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNDU3YWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuXzQuMy4xLmJiCkBAIC0wLDAgKzEsNTIgQEAKK1NVTU1BUlkgPSAiTXVsdGlwbGV4aW5nIHRlcm1pbmFsIG1hbmFnZXIiCitERVNDUklQVElPTiA9ICJTY3JlZW4gaXMgYSBmdWxsLXNjcmVlbiB3aW5kb3cgbWFuYWdlciBcCit0aGF0IG11bHRpcGxleGVzIGEgcGh5c2ljYWwgdGVybWluYWwgYmV0d2VlbiBzZXZlcmFsIFwKK3Byb2Nlc3NlcywgdHlwaWNhbGx5IGludGVyYWN0aXZlIHNoZWxscy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc2NyZWVuLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvP2Z1bmM9YWRkaXRlbSZncm91cD1zY3JlZW4iCisKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zY3JlZW4uaDtlbmRsaW5lPTI2O21kNT0zOTcxMTQyOTg5Mjg5YTgxOThhNTQ0MjIwNzAzYzJiZiIKKworREVQRU5EUyA9ICJuY3Vyc2VzIFwKKyAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJwYW0nLCAnJywgZCl9IgorUkRFUEVORFNfJHtQTn0gPSAiYmFzZS1maWxlcyIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3NjcmVlbi9zY3JlZW4tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1wYXJhbGxlbC1tYWtlLnBhdGNoIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnZmlsZTovL3NjcmVlbi5wYW0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgZmlsZTovL1JlbW92ZS1yZWR1bmRhbnQtY29tcGlsZXItc2FuaXR5LWNoZWNrcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9Qcm92aWRlLWNyb3NzLWNvbXBpbGUtYWx0ZXJuYXRpdmVzLWZvci1BQ19UUllfUlVOLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL1NraXAtaG9zdC1maWxlLXN5c3RlbS1jaGVja3Mtd2hlbi1jcm9zcy1jb21waWxpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQXZvaWQtbWlzLWlkZW50aWZ5aW5nLXN5c3RlbXMtYXMtU1ZSNC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1mb3ItbXVsdGlqb2ItYnVpbGQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1jb21tLmgtbm93LWRlcGVuZHMtb24tdGVybS5oLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1YmIzYjBmZjI2NzRlMjkzNzhjMzFhZDM0MTExNzBhZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmYTQwNDlmOGFlZTI4M2RlNjJlMjgzZDQyN2YyY2ZkMzVkNmMzNjliNDBmN2Y0NWY5NDdkYmZkOTE1Njk5ZDYzIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3V0ZW1wdGVyXSA9ICJhY19jdl9oZWFkZXJfdXRlbXB0ZXJfaD15ZXMsYWNfY3ZfaGVhZGVyX3V0ZW1wdGVyX2g9bm8sbGlidXRlbXB0ZXIsIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXB0eS1tb2RlPTA2MjAgLS13aXRoLXB0eS1ncm91cD01IFwKKyAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJy0tZW5hYmxlLXBhbScsICctLWRpc2FibGUtcGFtJywgZCl9IgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIgPSAicGFtIiBdOyB0aGVuCisJCWluc3RhbGwgLUQgLW0gNjQ0ICR7V09SS0RJUn0vc2NyZWVuLnBhbSAke0R9LyR7c3lzY29uZmRpcn0vcGFtLmQvc2NyZWVuCisJZmkKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlncmVwIC1xICJeJHtiaW5kaXJ9L3NjcmVlbiQiICREJHtzeXNjb25mZGlyfS9zaGVsbHMgfHwgZWNobyAke2JpbmRpcn0vc2NyZWVuID4+ICREJHtzeXNjb25mZGlyfS9zaGVsbHMKK30KKworcGtnX3Bvc3RybV8ke1BOfSAoKSB7CisJcHJpbnRmICIkKGdyZXAgLXYgIl4ke2JpbmRpcn0vc2NyZWVuJCIgJEQke3N5c2NvbmZkaXJ9L3NoZWxscylcbiIgPiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL01ha2V2YXJzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9NYWtldmFycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjA5ZjUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9NYWtldmFycwpAQCAtMCwwICsxLDI1IEBACisjIE1ha2VmaWxlIHZhcmlhYmxlcyBmb3IgUE8gZGlyZWN0b3J5IGluIGFueSBwYWNrYWdlIHVzaW5nIEdOVSBnZXR0ZXh0LgorCisjIFVzdWFsbHkgdGhlIG1lc3NhZ2UgZG9tYWluIGlzIHRoZSBzYW1lIGFzIHRoZSBwYWNrYWdlIG5hbWUuCitET01BSU4gPSAkKFBBQ0tBR0UpCisKKyMgVGhlc2UgdHdvIHZhcmlhYmxlcyBkZXBlbmQgb24gdGhlIGxvY2F0aW9uIG9mIHRoaXMgZGlyZWN0b3J5Lgorc3ViZGlyID0gcG8KK3RvcF9idWlsZGRpciA9IC4uCisKKyMgVGhlc2Ugb3B0aW9ucyBnZXQgcGFzc2VkIHRvIHhnZXR0ZXh0LgorWEdFVFRFWFRfT1BUSU9OUyA9IC0ta2V5d29yZD1fIC0ta2V5d29yZD1OXworCisjIFRoaXMgaXMgdGhlIGNvcHlyaWdodCBob2xkZXIgdGhhdCBnZXRzIGluc2VydGVkIGludG8gdGhlIGhlYWRlciBvZiB0aGUKKyMgJChET01BSU4pLnBvdCBmaWxlLiAgU2V0IHRoaXMgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHN1cnJvdW5kaW5nCisjIHBhY2thZ2UuICAoTm90ZSB0aGF0IHRoZSBtc2dzdHIgc3RyaW5ncywgZXh0cmFjdGVkIGZyb20gdGhlIHBhY2thZ2UncworIyBzb3VyY2VzLCBiZWxvbmcgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHBhY2thZ2UuKSAgVHJhbnNsYXRvcnMgYXJlCisjIGV4cGVjdGVkIHRvIHRyYW5zZmVyIHRoZSBjb3B5cmlnaHQgZm9yIHRoZWlyIHRyYW5zbGF0aW9ucyB0byB0aGlzIHBlcnNvbgorIyBvciBlbnRpdHksIG9yIHRvIGRpc2NsYWltIHRoZWlyIGNvcHlyaWdodC4gIFRoZSBlbXB0eSBzdHJpbmcgc3RhbmRzIGZvcgorIyB0aGUgcHVibGljIGRvbWFpbjsgaW4gdGhpcyBjYXNlIHRoZSB0cmFuc2xhdG9ycyBhcmUgZXhwZWN0ZWQgdG8gZGlzY2xhaW0KKyMgdGhlaXIgY29weXJpZ2h0LgorQ09QWVJJR0hUX0hPTERFUiA9IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgaXMgdGhlIGxpc3Qgb2YgbG9jYWxlIGNhdGVnb3JpZXMsIGJleW9uZCBMQ19NRVNTQUdFUywgZm9yIHdoaWNoIHRoZQorIyBtZXNzYWdlIGNhdGFsb2dzIHNoYWxsIGJlIHVzZWQuICBJdCBpcyB1c3VhbGx5IGVtcHR5LgorRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMgPQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9maXhfcmV0dXJuX3R5cGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL2ZpeF9yZXR1cm5fdHlwZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzY1NTFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9maXhfcmV0dXJuX3R5cGUucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0NoYW5nZSB0aGUgZ2V0bGluZSByZXR1cm4gdHlwZSB0byBtYXRjaCBpdHMgZGVjbGFyYXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisKK2RpZmYgLXVyTiBzZWQtNC4xLjItb3JpZy9saWIvZ2V0bGluZS5jIHNlZC00LjEuMi9saWIvZ2V0bGluZS5jCistLS0gc2VkLTQuMS4yLW9yaWcvbGliL2dldGxpbmUuYwkyMDEwLTA4LTMxIDA4OjQ3OjUwLjA3MDA5NDAyNCArMDgwMAorKysrIHNlZC00LjEuMi9saWIvZ2V0bGluZS5jCTIwMTAtMDgtMzEgMDg6NDg6NTAuOTgyMTc4MTcyICswODAwCitAQCAtMzAsNyArMzAsNyBAQAorICAgIG5lY2Vzc2FyeS4gIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgKG5vdCBpbmNsdWRpbmcgdGhlCisgICAgbnVsbCB0ZXJtaW5hdG9yKSwgb3IgLTEgb24gZXJyb3Igb3IgRU9GLiAgKi8KKyAKKy1zaXplX3QKKytzc2l6ZV90CisgZ2V0bGluZSAobGluZXB0ciwgbiwgc3RyZWFtKQorICAgICAgY2hhciAqKmxpbmVwdHI7CisgICAgICBzaXplX3QgKm47CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL3NlZC00LjEuMl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL3NlZC00LjEuMl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA1OTQwNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4xLjIvc2VkLTQuMS4yX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworYXV0b21ha2UtMS4xMi54IGhhcyBkZXByZWNhdGVkIHVzZSBvZiBAbWtkaXJfcEAsIGZpeCB0aGUgaXNzdWUgYnkgdXNpbmcgQE1LRElSX1BAIGluc3RlYWQuCisKK0F2b2lkIHRoaXMgYnVpbGQgaXNzdWU6Cit8IG1ha2VbMV06IG1rZGlyX3BAOiBDb21tYW5kIG5vdCBmb3VuZAorfCBtYWtlWzFdOiAqKiogW2luc3RhbGwtZGF0YS15ZXNdIEVycm9yIDEyNworCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNy8xMworCitJbmRleDogc2VkLTQuMS4yL2ludGwvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzZWQtNC4xLjIub3JpZy9pbnRsL01ha2VmaWxlLmluCisrKysgc2VkLTQuMS4yL2ludGwvTWFrZWZpbGUuaW4KK0BAIC00MCw3ICs0MCw3IEBAIHN1YmRpciA9IGludGwKKyBJTlNUQUxMID0gQElOU1RBTExACisgSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKKyBta2luc3RhbGxkaXJzID0gJChta2Rpcl9wKQorLW1rZGlyX3AgPSBAbWtkaXJfcEAKKytta2Rpcl9wID0gQE1LRElSX1BACisgCisgbCA9IEBJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWEAKKyAKK0luZGV4OiBzZWQtNC4xLjIvcG8vTWFrZWZpbGUuaW4uaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzZWQtNC4xLjIub3JpZy9wby9NYWtlZmlsZS5pbi5pbgorKysrIHNlZC00LjEuMi9wby9NYWtlZmlsZS5pbi5pbgorQEAgLTI5LDcgKzI5LDcgQEAgZ2V0dGV4dHNyY2RpciA9ICQoZGF0YWRpcikvZ2V0dGV4dC9wbworIElOU1RBTEwgPSAvc3J2L2hvbWUvbml0aW4vYnVpbGRzMi9idWlsZDAvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvYmluL2luc3RhbGwgLWMKKyBJTlNUQUxMX0RBVEEgPSAke0lOU1RBTEx9IC1tIDY0NAorIG1raW5zdGFsbGRpcnMgPSAkKG1rZGlyX3ApCistbWtkaXJfcCA9IEBta2Rpcl9wQAorK21rZGlyX3AgPSBATUtESVJfUEAKKyAKKyBDQyA9IGk1ODYtcG9reS1saW51eC1nY2MgIC1tMzIgICAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L3Nydi9ob21lL25pdGluL2J1aWxkczIvYnVpbGQwL3RtcC9zeXNyb290cy9xZW11eDg2CisgR01TR0ZNVCA9IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMyL2J1aWxkMC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vbXNnZm10CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExYTRiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZ251bGliLm1rIGIvbGliL2dudWxpYi5taworaW5kZXggZTFkNzRkYi4uYzBlOTJkZCAxMDA2NDQKKy0tLSBhL2xpYi9nbnVsaWIubWsKKysrKyBiL2xpYi9nbnVsaWIubWsKK0BAIC0xODgyLDcgKzE4ODIsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMGY2MjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorCittYWtlIC1DIHRlc3RzdWl0ZSAtayBydW50ZXN0LVRFU1RTCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3NlZC1hZGQtcHRlc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3NlZC1hZGQtcHRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA1ZThiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvc2VkLWFkZC1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDY2IEBACitzZWQ6IGFkZCBwdGVzdAorCitwdGVzdCBuZWVkcyBidWlsZHRlc3QtVEVTVFMgYW5kIHJ1bnRlc3QtVEVTVFMgdGFyZ2V0cy4KK3NlcmlhbC10ZXN0cyBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aG9zZSB0YXJnZXRzLgorCitBbmQgZml4IGZvbGxvd2luZyBlcnJvciBhZnRlciBhZGQgc2VyaWFsLXRlc3RzLgorCitbc25pcF0KK2hlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIC4uL3NlZC9zZWQKK21ha2VbMl06ICoqKiBbc2VkLjFdIEVycm9yIDIKK1tzbmlwXQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgfCAgICAyICstCisgZG9jL01ha2VmaWxlLmFtICAgICAgIHwgICAgMiArLQorIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbSB8ICAgIDYgKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDlkMzNlYzkuLjRmMGM1MzIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTQsNyArNCw3IEBAIEFDX0NPTkZJR19BVVhfRElSKGJ1aWxkLWF1eCkKKyBBQ19DT05GSUdfU1JDRElSKFtzZWQvc2VkLmNdKQorIEFNX0NPTkZJR19IRUFERVIoY29uZmlnLmg6Y29uZmlnX2guaW4pCisgQUNfUFJFUkVRKDIuNjApCistQU1fSU5JVF9BVVRPTUFLRQorK0FNX0lOSVRfQVVUT01BS0UoW3NlcmlhbC10ZXN0c10pCisgCisgU0VEX0ZFQVRVUkVfVkVSU0lPTj00LjIuMgorIEFDX0RFRklORV9VTlFVT1RFRChTRURfRkVBVFVSRV9WRVJTSU9OLCAiJFNFRF9GRUFUVVJFX1ZFUlNJT04iLAorZGlmZiAtLWdpdCBhL2RvYy9NYWtlZmlsZS5hbSBiL2RvYy9NYWtlZmlsZS5hbQoraW5kZXggYWY2OTc1Yy4uNmZkOGM5YSAxMDA2NDQKKy0tLSBhL2RvYy9NYWtlZmlsZS5hbQorKysrIGIvZG9jL01ha2VmaWxlLmFtCitAQCAtMjUsNyArMjUsNyBAQCAkKHNyY2Rpcikvcy10ZXhpOiBzZWQtaW4udGV4aSAkKHNyY2RpcikvZ3JvdXBpZnkuc2VkCisgCWZpCisgCWVjaG8gc3RhbXAgPiAkKHNyY2Rpcikvcy10ZXhpCisgCistc2VkLjE6ICQodG9wX3NyY2Rpcikvc2VkL3NlZC5jICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjICQoc3JjZGlyKS9zZWQueAorK19zZWQuMTogJCh0b3Bfc3JjZGlyKS9zZWQvc2VkLmMgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMgJChzcmNkaXIpL3NlZC54CisgCSQoSEVMUDJNQU4pIC0tbmFtZSAic3RyZWFtIGVkaXRvciBmb3IgZmlsdGVyaW5nIGFuZCB0cmFuc2Zvcm1pbmcgdGV4dCIgXAorIAkgIC1wIHNlZCAtLWluY2x1ZGUgJChzcmNkaXIpL3NlZC54IC1vICQoc3JjZGlyKS9zZWQuMSAkKFNFRCkgCisgCitkaWZmIC0tZ2l0IGEvdGVzdHN1aXRlL01ha2VmaWxlLmFtIGIvdGVzdHN1aXRlL01ha2VmaWxlLmFtCitpbmRleCBkODBlNzJjLi5iMDVmMDFlIDEwMDY0NAorLS0tIGEvdGVzdHN1aXRlL01ha2VmaWxlLmFtCisrKysgYi90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KK0BAIC05OSw1ICs5OSwxMSBAQCBFWFRSQV9ESVNUID0gXAorICMgYXV0b21ha2UgbWFrZXMgYGNoZWNrJyBkZXBlbmQgb24gJChURVNUUykuICBEZWNsYXJlCisgIyBkdW1teSB0YXJnZXRzIGZvciAkKFRFU1RTKSBzbyB0aGF0IG1ha2UgZG9lcyBub3QgY29tcGxhaW4uCisgCisraW5zdGFsbC1wdGVzdDoKKysJY2QgJChCVUlMRERJUik7IHRhciAtY2YgLSAkKFRFU1RESVIpIC0tZXhjbHVkZSAqLm8gfCAoIGNkICQoREVTVERJUikgJiYgdGFyIC14ZiAtICkKKysJZm9yIGkgaW4gJChFWFRSQV9ESVNUKSB0c3QtcmVnZXgyLmM7IGRvIGluc3RhbGwgJChzcmNkaXIpLyQkaSAkKERFU1RESVIpLyQoVEVTVERJUik7IGRvbmUKKysJc2VkIC1lICdzL15NYWtlZmlsZTovX01ha2VmaWxlOi8nIC1lICdzL15zcmNkaXIgPSBcKC4qXCkvc3JjZGlyID0gLi8nIC1lICdzL2Jhc2gvc2gvJyAtaSAkKERFU1RESVIpLyQoVEVTVERJUikvTWFrZWZpbGUKKysJZm9yIGkgaW4gYGdyZXAgLXJsICIuLi9zZWQvc2VkIiAkKERFU1RESVIpLyQoVEVTVERJUilgOyBkbyBzZWQgLWUgJ3MvLi5cL3NlZFwvc2VkL3NlZC8nIC1pICQkaTsgZG9uZQorKworIC5QSE9OWTogJChTRURURVNUUykKKyAkKFNFRFRFU1RTKToKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkXzQuMS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZF80LjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGUzYTUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZF80LjEuMi5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIlN0cmVhbSBFRGl0b3IgKHRleHQgZmlsdGVyaW5nIHV0aWxpdHkpIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3NlZC8iCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NlZC9zZWQuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTE3O21kNT1lMDBmZmQxODM3ZjI5ODQzOWEyMTRmZDE5N2Y2YTQwNyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK1BSID0gInI3IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vc2VkL3NlZC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4X3JldHVybl90eXBlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NlZC00LjEuMl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTWFrZXZhcnMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5MjhmMGUwNjQyMmY0MTQwOTE5MTc0MDFmMWE4MzRkMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MzhlODM3YmE3NjVkNWRhMGEzMGM5OGI1N2MyOTUzY2VjZWE5NjgyNzg4MmY1OTQ2MTJhY2FjZTkzY2VlZWFiIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgZ2V0dGV4dAorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJY3AgJHtXT1JLRElSfS9NYWtldmFycyAke1N9L3BvLworfQorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJaWYgWyAhICR7RH0ke2JpbmRpcn0gLWVmICR7RH0ke2Jhc2VfYmluZGlyfSBdOyB0aGVuCisJICAgIG12ICR7RH0ke2JpbmRpcn0vc2VkICR7RH0ke2Jhc2VfYmluZGlyfS9zZWQKKwkgICAgcm1kaXIgJHtEfSR7YmluZGlyfS8KKwlmaQorfQorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJzZWQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc2VkXSA9ICIke2Jhc2VfYmluZGlyfS9zZWQiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWRfNC4yLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkXzQuMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYTdkOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkXzQuMi4yLmJiCkBAIC0wLDAgKzEsNDYgQEAKK1NVTU1BUlkgPSAiU3RyZWFtIEVEaXRvciAodGV4dCBmaWx0ZXJpbmcgdXRpbGl0eSkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc2VkLyIKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VkL3NlZC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PTc2N2FiM2EwNmQ3NTg0ZjZmZDA0NjlhYmFlYzQ0MTJmIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vc2VkL3NlZC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vc2VkLWFkZC1wdGVzdC5wYXRjaCBcCisJICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjQxMTFkZTRmYWEzYjk4NDhhMDY4NmIyZjI2MGM1MDU2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZlYTBhOTRkNGI2MDU4OTRmM2UyZDU1NzJlM2Y5NmU0NDEzYmNhZDNhMDg1YWFlNzM2N2MyY2YwNzkwOGIyZmYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcyBnZXR0ZXh0IHB0ZXN0CitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSAke1BOfSIKK1JSRUNPTU1FTkRTXyR7UE59LXB0ZXN0X2FwcGVuZF9saWJjLWdsaWJjID0gIiBsb2NhbGUtYmFzZS1ydS1ydSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1hY2wgXAorICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQVEVTVF9FTkFCTEVEJywgJzEnLCAnLS1lbmFibGUtcmVnZXgtdGVzdHMnLCAnJywgZCl9IgorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJaWYgWyAhICR7RH0ke2JpbmRpcn0gLWVmICR7RH0ke2Jhc2VfYmluZGlyfSBdOyB0aGVuCisJICAgIG12ICR7RH0ke2JpbmRpcn0vc2VkICR7RH0ke2Jhc2VfYmluZGlyfS9zZWQKKwkgICAgcm1kaXIgJHtEfSR7YmluZGlyfS8KKwlmaQorfQorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJzZWQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc2VkXSA9ICIke2Jhc2VfYmluZGlyfS9zZWQiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK1RFU1RESVIgPSAidGVzdHN1aXRlIgorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgLUMgJHtURVNURElSfSBidWlsZHRlc3QtVEVTVFMKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIC1DICR7VEVTVERJUn0gaW5zdGFsbC1wdGVzdCBCVUlMRERJUj0ke0J9IERFU1RESVI9JHtEfSR7UFRFU1RfUEFUSH0gVEVTVERJUj0ke1RFU1RESVJ9Cit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy8wMDAxLURvLW5vdC1yZWFkLWxvZ2luLmRlZnMtYmVmb3JlLWRvaW5nLWNocm9vdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy8wMDAxLURvLW5vdC1yZWFkLWxvZ2luLmRlZnMtYmVmb3JlLWRvaW5nLWNocm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjhiOTVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzLzAwMDEtRG8tbm90LXJlYWQtbG9naW4uZGVmcy1iZWZvcmUtZG9pbmctY2hyb290LnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gMTcwYzI1YzhlMGI1YzNkYzI2MTVkMWRiOTRjOGQyNGExM2ZmOTliZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgorRGF0ZTogVGh1LCAxMSBTZXAgMjAxNCAxNToxMToyMyArMDIwMAorU3ViamVjdDogW1BBVENIXSBEbyBub3QgcmVhZCBsb2dpbi5kZWZzIGJlZm9yZSBkb2luZyBjaHJvb3QoKQorCitJZiAidXNlcmFkZCAtLXJvb3QgPHJvb3Q+IC4uLiIgd2FzIHVzZWQsIHRoZSBsb2dpbi5kZWZzIGZpbGUgd291bGQgc3RpbGwKK2JlIHJlYWQgZnJvbSAvZXRjL2xvZ2luLmRlZnMgaW5zdGVhZCBvZiA8cm9vdD4vZXRjL2xvZ2luLmRlZnMuIFRoaXMgd2FzCitkdWUgdG8gZ2V0ZGVmX3Vsb25nKCkgYmVpbmcgY2FsbGVkIGJlZm9yZSBwcm9jZXNzX3Jvb3RfZmxhZygpLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cDovL2xpc3RzLmFsaW90aC5kZWJpYW4ub3JnL3BpcGVybWFpbC9wa2ctc2hhZG93LWRldmVsLzIwMTQtU2VwdGVtYmVyLzAxMDQ0Ni5odG1sXQorCitTaWduZWQtb2ZmLWJ5OiBQZXRlciBLamVsbGVyc3RlZHQgPHBldGVyLmtqZWxsZXJzdGVkdEBheGlzLmNvbT4KKy0tLQorIHNyYy91c2VyYWRkLmMgfCA4ICsrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy91c2VyYWRkLmMgYi9zcmMvdXNlcmFkZC5jCitpbmRleCBhOGExZjc2Li5lMWViZjUwIDEwMDY0NAorLS0tIGEvc3JjL3VzZXJhZGQuYworKysrIGIvc3JjL3VzZXJhZGQuYworQEAgLTE5OTMsOSArMTk5MywxMSBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICNlbmRpZgkJCQkvKiBVU0VfUEFNICovCisgI2VuZGlmCQkJCS8qIEFDQ1RfVE9PTFNfU0VUVUlEICovCisgCisrI2lmZGVmIEVOQUJMRV9TVUJJRFMKKyAJLyogTmVlZGVkIGZvciB1c2VybnMgY2hlY2sgKi8KKy0JdWlkX3QgdWlkX21pbiA9ICh1aWRfdCkgZ2V0ZGVmX3Vsb25nICgiVUlEX01JTiIsIDEwMDBVTCk7CistCXVpZF90IHVpZF9tYXggPSAodWlkX3QpIGdldGRlZl91bG9uZyAoIlVJRF9NQVgiLCA2MDAwMFVMKTsKKysJdWlkX3QgdWlkX21pbjsKKysJdWlkX3QgdWlkX21heDsKKysjZW5kaWYKKyAKKyAJLyoKKyAJICogR2V0IG15IG5hbWUgc28gdGhhdCBJIGNhbiB1c2UgaXQgdG8gcmVwb3J0IGVycm9ycy4KK0BAIC0yMDI2LDYgKzIwMjgsOCBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlpc19zaGFkb3dfZ3JwID0gc2dyX2ZpbGVfcHJlc2VudCAoKTsKKyAjZW5kaWYKKyAjaWZkZWYgRU5BQkxFX1NVQklEUworKwl1aWRfbWluID0gKHVpZF90KSBnZXRkZWZfdWxvbmcgKCJVSURfTUlOIiwgMTAwMFVMKTsKKysJdWlkX21heCA9ICh1aWRfdCkgZ2V0ZGVmX3Vsb25nICgiVUlEX01BWCIsIDYwMDAwVUwpOworIAlpc19zdWJfdWlkID0gc3ViX3VpZF9maWxlX3ByZXNlbnQgKCkgJiYgIXJmbGcgJiYKKyAJICAgICghdXNlcl9pZCB8fCAodXNlcl9pZCA8PSB1aWRfbWF4ICYmIHVzZXJfaWQgPj0gdWlkX21pbikpOworIAlpc19zdWJfZ2lkID0gc3ViX2dpZF9maWxlX3ByZXNlbnQgKCkgJiYgIXJmbGcgJiYKKy0tIAorMS45LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzLzAwMDEtdXNlcmFkZC5jLWNyZWF0ZS1wYXJlbnQtZGlyZWN0b3JpZXMtd2hlbi1uZWNlc3NhcnkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvMDAwMS11c2VyYWRkLmMtY3JlYXRlLXBhcmVudC1kaXJlY3Rvcmllcy13aGVuLW5lY2Vzc2FyeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWRkZThlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzLzAwMDEtdXNlcmFkZC5jLWNyZWF0ZS1wYXJlbnQtZGlyZWN0b3JpZXMtd2hlbi1uZWNlc3NhcnkucGF0Y2gKQEAgLTAsMCArMSwxMDkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1N1YmplY3Q6IHVzZXJhZGQuYzogY3JlYXRlIHBhcmVudCBkaXJlY3RvcmllcyB3aGVuIG5lY2Vzc2FyeQorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvdXNlcmFkZC5jIHwgICA3MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNDkgaW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvdXNlcmFkZC5jIGIvc3JjL3VzZXJhZGQuYworaW5kZXggNGJkOTY5ZC4uY2I1ZGQ2YyAxMDA2NDQKKy0tLSBhL3NyYy91c2VyYWRkLmMKKysrKyBiL3NyYy91c2VyYWRkLmMKK0BAIC0xODkzLDYgKzE4OTMsMzUgQEAgc3RhdGljIHZvaWQgdXNyX3VwZGF0ZSAodm9pZCkKKyB9CisgCisgLyoKKysgKiBta2Rpcl9wIC0gY3JlYXRlIGRpcmVjdG9yaWVzLCBpbmNsdWRpbmcgcGFyZW50IGRpcmVjdG9yaWVzIHdoZW4gbmVlZGVkCisrICoKKysgKiBzaW1pbGFyIHRvIGBta2RpciAtcCcKKysgKi8KKyt2b2lkIG1rZGlyX3AoY29uc3QgY2hhciAqcGF0aCkgeworKwlpbnQgbGVuID0gc3RybGVuKHBhdGgpOworKwljaGFyIG5ld2RpcltsZW4gKyAxXTsKKysJbW9kZV90IG1vZGUgPSAwNzU1OworKwlpbnQgaSA9IDA7CisrCisrCWlmIChwYXRoW2ldID09ICdcMCcpIHsKKysJCXJldHVybjsKKysJfQorKworKwkvKiBza2lwIHRoZSBsZWFkaW5nICcvJyAqLworKwlpKys7CisrCisrCXdoaWxlKHBhdGhbaV0gIT0gJ1wwJykgeworKwkJaWYgKHBhdGhbaV0gPT0gJy8nKSB7CisrCQkJc3RybmNweShuZXdkaXIsIHBhdGgsIGkpOworKwkJCW5ld2RpcltpXSA9ICdcMCc7CisrCQkJbWtkaXIobmV3ZGlyLCBtb2RlKTsKKysJCX0KKysJCWkrKzsKKysJfQorKwlta2RpcihwYXRoLCBtb2RlKTsKKyt9CisrCisrLyoKKyAgKiBjcmVhdGVfaG9tZSAtIGNyZWF0ZSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5CisgICoKKyAgKgljcmVhdGVfaG9tZSgpIGNyZWF0ZXMgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSBpZiBpdCBkb2VzIG5vdAorQEAgLTE5MDcsMzYgKzE5MzYsMzMgQEAgc3RhdGljIHZvaWQgY3JlYXRlX2hvbWUgKHZvaWQpCisgCQkJZmFpbF9leGl0IChFX0hPTUVESVIpOworIAkJfQorICNlbmRpZgorLQkJLyogWFhYIC0gY3JlYXRlIG1pc3NpbmcgcGFyZW50IGRpcmVjdG9yaWVzLiAgLS1tYXJla20gKi8KKy0JCWlmIChta2RpciAodXNlcl9ob21lLCAwKSAhPSAwKSB7CistCQkJZnByaW50ZiAoc3RkZXJyLAorLQkJCSAgICAgICAgIF8oIiVzOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAlc1xuIiksCistCQkJICAgICAgICAgUHJvZywgdXNlcl9ob21lKTsKKy0jaWZkZWYgV0lUSF9BVURJVAorLQkJCWF1ZGl0X2xvZ2dlciAoQVVESVRfQUREX1VTRVIsIFByb2csCistCQkJICAgICAgICAgICAgICAiYWRkaW5nIGhvbWUgZGlyZWN0b3J5IiwKKy0JCQkgICAgICAgICAgICAgIHVzZXJfbmFtZSwgKHVuc2lnbmVkIGludCkgdXNlcl9pZCwKKy0JCQkgICAgICAgICAgICAgIFNIQURPV19BVURJVF9GQUlMVVJFKTsKKy0jZW5kaWYKKy0JCQlmYWlsX2V4aXQgKEVfSE9NRURJUik7CistCQl9CistCQljaG93biAodXNlcl9ob21lLCB1c2VyX2lkLCB1c2VyX2dpZCk7CistCQljaG1vZCAodXNlcl9ob21lLAorLQkJICAgICAgIDA3NzcgJiB+Z2V0ZGVmX251bSAoIlVNQVNLIiwgR0VUREVGX0RFRkFVTFRfVU1BU0spKTsKKy0JCWhvbWVfYWRkZWQgPSB0cnVlOworKwkJbWtkaXJfcCh1c2VyX2hvbWUpOworKwl9CisrCWlmIChhY2Nlc3MgKHVzZXJfaG9tZSwgRl9PSykgIT0gMCkgeworICNpZmRlZiBXSVRIX0FVRElUCisgCQlhdWRpdF9sb2dnZXIgKEFVRElUX0FERF9VU0VSLCBQcm9nLAorIAkJICAgICAgICAgICAgICAiYWRkaW5nIGhvbWUgZGlyZWN0b3J5IiwKKyAJCSAgICAgICAgICAgICAgdXNlcl9uYW1lLCAodW5zaWduZWQgaW50KSB1c2VyX2lkLAorLQkJICAgICAgICAgICAgICBTSEFET1dfQVVESVRfU1VDQ0VTUyk7CisrCQkgICAgICAgICAgICAgIFNIQURPV19BVURJVF9GQUlMVVJFKTsKKyAjZW5kaWYKKy0jaWZkZWYgV0lUSF9TRUxJTlVYCistCQkvKiBSZXNldCBTRUxpbnV4IHRvIGNyZWF0ZSBmaWxlcyB3aXRoIGRlZmF1bHQgY29udGV4dHMgKi8KKy0JCWlmIChyZXNldF9zZWxpbnV4X2ZpbGVfY29udGV4dCAoKSAhPSAwKSB7CistCQkJZmFpbF9leGl0IChFX0hPTUVESVIpOworLQkJfQorKwkJZmFpbF9leGl0IChFX0hPTUVESVIpOworKwl9CisrCWNob3duICh1c2VyX2hvbWUsIHVzZXJfaWQsIHVzZXJfZ2lkKTsKKysJY2htb2QgKHVzZXJfaG9tZSwKKysJICAgICAgIDA3NzcgJiB+Z2V0ZGVmX251bSAoIlVNQVNLIiwgR0VUREVGX0RFRkFVTFRfVU1BU0spKTsKKysJaG9tZV9hZGRlZCA9IHRydWU7CisrI2lmZGVmIFdJVEhfQVVESVQKKysJYXVkaXRfbG9nZ2VyIChBVURJVF9BRERfVVNFUiwgUHJvZywKKysJCSAgICAgICJhZGRpbmcgaG9tZSBkaXJlY3RvcnkiLAorKwkJICAgICAgdXNlcl9uYW1lLCAodW5zaWduZWQgaW50KSB1c2VyX2lkLAorKwkJICAgICAgU0hBRE9XX0FVRElUX1NVQ0NFU1MpOworICNlbmRpZgorKyNpZmRlZiBXSVRIX1NFTElOVVgKKysJLyogUmVzZXQgU0VMaW51eCB0byBjcmVhdGUgZmlsZXMgd2l0aCBkZWZhdWx0IGNvbnRleHRzICovCisrCWlmIChyZXNldF9zZWxpbnV4X2ZpbGVfY29udGV4dCAoKSAhPSAwKSB7CisrCQlmYWlsX2V4aXQgKEVfSE9NRURJUik7CisgCX0KKysjZW5kaWYKKyB9CisgCisgLyoKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvYWxsb3ctZm9yLXNldHRpbmctcGFzc3dvcmQtaW4tY2xlYXItdGV4dC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9hbGxvdy1mb3Itc2V0dGluZy1wYXNzd29yZC1pbi1jbGVhci10ZXh0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZGEyNWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvYWxsb3ctZm9yLXNldHRpbmctcGFzc3dvcmQtaW4tY2xlYXItdGV4dC5wYXRjaApAQCAtMCwwICsxLDIwMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworQWxsb3cgZm9yIHNldHRpbmcgcGFzc3dvcmQgaW4gY2xlYXIgdGV4dC4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL01ha2VmaWxlLmFtIHwgICAgOCArKysrLS0tLQorIHNyYy9ncm91cGFkZC5jICB8ICAgIDggKysrKysrKy0KKyBzcmMvZ3JvdXBtb2QuYyAgfCAgICA4ICsrKysrKystCisgc3JjL3VzZXJhZGQuYyAgIHwgICAgOSArKysrKysrLS0KKyBzcmMvdXNlcm1vZC5jICAgfCAgICA4ICsrKysrKystCisgNSBmaWxlcyBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmFtIGIvc3JjL01ha2VmaWxlLmFtCitpbmRleCAyNWUyODhkLi44NTZiMDg3IDEwMDY0NAorLS0tIGEvc3JjL01ha2VmaWxlLmFtCisrKysgYi9zcmMvTWFrZWZpbGUuYW0KK0BAIC04OCwxMCArODgsMTAgQEAgY2hncGFzc3dkX0xEQUREID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJTRUxJTlVYKSAkKExJQkNSWVBUKQorIGNoc2hfTERBREQgICAgID0gJChMREFERCkgJChMSUJQQU0pICQoTElCU0VMSU5VWCkgJChMSUJDUllQVF9OT1BBTSkgJChMSUJTS0VZKSAkKExJQk1EKQorIGNocGFzc3dkX0xEQUREID0gJChMREFERCkgJChMSUJQQU0pICQoTElCU0VMSU5VWCkgJChMSUJDUllQVCkKKyBncGFzc3dkX0xEQUREICA9ICQoTERBREQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkgJChMSUJDUllQVCkKKy1ncm91cGFkZF9MREFERCA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkKKytncm91cGFkZF9MREFERCA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkgJChMSUJDUllQVCkKKyBncm91cGRlbF9MREFERCA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkKKyBncm91cG1lbXNfTERBREQgPSAkKExEQUREKSAkKExJQlBBTSkgJChMSUJTRUxJTlVYKQorLWdyb3VwbW9kX0xEQUREID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKQorK2dyb3VwbW9kX0xEQUREID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQkNSWVBUKQorIGdycGNrX0xEQUREICAgID0gJChMREFERCkgJChMSUJTRUxJTlVYKQorIGdycGNvbnZfTERBREQgID0gJChMREFERCkgJChMSUJTRUxJTlVYKQorIGdycHVuY29udl9MREFERCA9ICQoTERBREQpICQoTElCU0VMSU5VWCkKK0BAIC0xMTEsOSArMTExLDkgQEAgc3VfU09VUkNFUyAgICAgPSBcCisgCXN1YXV0aC5jCisgc3VfTERBREQgICAgICAgPSAkKExEQUREKSAkKExJQlBBTSkgJChMSUJDUllQVF9OT1BBTSkgJChMSUJTS0VZKSAkKExJQk1EKQorIHN1bG9naW5fTERBREQgID0gJChMREFERCkgJChMSUJDUllQVCkKKy11c2VyYWRkX0xEQUREICA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkgJChMSUJTRU1BTkFHRSkgJChMSUJBQ0wpICQoTElCQVRUUikKKyt1c2VyYWRkX0xEQUREICA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkgJChMSUJTRU1BTkFHRSkgJChMSUJBQ0wpICQoTElCQVRUUikgJChMSUJDUllQVCkKKyB1c2VyZGVsX0xEQUREICA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkgJChMSUJTRU1BTkFHRSkKKy11c2VybW9kX0xEQUREICA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkgJChMSUJTRU1BTkFHRSkgJChMSUJBQ0wpICQoTElCQVRUUikKKyt1c2VybW9kX0xEQUREICA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkgJChMSUJTRU1BTkFHRSkgJChMSUJBQ0wpICQoTElCQVRUUikgJChMSUJDUllQVCkKKyB2aXB3X0xEQUREICAgICA9ICQoTERBREQpICQoTElCU0VMSU5VWCkKKyAKKyBpbnN0YWxsLWFtOiBhbGwtYW0KK2RpZmYgLS1naXQgYS9zcmMvZ3JvdXBhZGQuYyBiL3NyYy9ncm91cGFkZC5jCitpbmRleCBmNzE2ZjU3Li40ZTI4YzI2IDEwMDY0NAorLS0tIGEvc3JjL2dyb3VwYWRkLmMKKysrKyBiL3NyYy9ncm91cGFkZC5jCitAQCAtMTI0LDYgKzEyNCw3IEBAIHN0YXRpYyAvKkBub3JldHVybkAqL3ZvaWQgdXNhZ2UgKGludCBzdGF0dXMpCisgCSh2b2lkKSBmcHV0cyAoXygiICAtbywgLS1ub24tdW5pcXVlICAgICAgICAgICAgICBhbGxvdyB0byBjcmVhdGUgZ3JvdXBzIHdpdGggZHVwbGljYXRlXG4iCisgCSAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9uLXVuaXF1ZSkgR0lEXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLXAsIC0tcGFzc3dvcmQgUEFTU1dPUkQgICAgICAgdXNlIHRoaXMgZW5jcnlwdGVkIHBhc3N3b3JkIGZvciB0aGUgbmV3IGdyb3VwXG4iKSwgdXNhZ2VvdXQpOworKwkodm9pZCkgZnB1dHMgKF8oIiAgLVAsIC0tY2xlYXItcGFzc3dvcmQgUEFTU1dPUkQgdXNlIHRoaXMgY2xlYXIgcGFzc3dvcmQgZm9yIHRoZSBuZXcgZ3JvdXBcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtciwgLS1zeXN0ZW0gICAgICAgICAgICAgICAgICBjcmVhdGUgYSBzeXN0ZW0gYWNjb3VudFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1SLCAtLXJvb3QgQ0hST09UX0RJUiAgICAgICAgIGRpcmVjdG9yeSB0byBjaHJvb3QgaW50b1xuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzICgiXG4iLCB1c2FnZW91dCk7CitAQCAtMzg3LDEyICszODgsMTMgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJeyJrZXkiLCAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdLJ30sCisgCQl7Im5vbi11bmlxdWUiLCBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ28nfSwKKyAJCXsicGFzc3dvcmQiLCAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAncCd9LAorKwkJeyJjbGVhci1wYXNzd29yZCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUCd9LAorIAkJeyJzeXN0ZW0iLCAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdyJ30sCisgCQl7InJvb3QiLCAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1InfSwKKyAJCXtOVUxMLCAwLCBOVUxMLCAnXDAnfQorIAl9OworIAorLQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgImZnOmhLOm9wOnJSOiIsCisrCXdoaWxlICgoYyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LCAiZmc6aEs6b3A6UDpyUjoiLAorIAkJICAgICAgICAgICAgICAgICBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkgeworIAkJc3dpdGNoIChjKSB7CisgCQljYXNlICdmJzoKK0BAIC00NDQsNiArNDQ2LDEwIEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQlwZmxnID0gdHJ1ZTsKKyAJCQlncm91cF9wYXNzd2QgPSBvcHRhcmc7CisgCQkJYnJlYWs7CisrCQljYXNlICdQJzoKKysJCQlwZmxnID0gdHJ1ZTsKKysJCQlncm91cF9wYXNzd2QgPSBwd19lbmNyeXB0IChvcHRhcmcsIGNyeXB0X21ha2Vfc2FsdCAoTlVMTCwgTlVMTCkpOworKwkJCWJyZWFrOworIAkJY2FzZSAncic6CisgCQkJcmZsZyA9IHRydWU7CisgCQkJYnJlYWs7CitkaWZmIC0tZ2l0IGEvc3JjL2dyb3VwbW9kLmMgYi9zcmMvZ3JvdXBtb2QuYworaW5kZXggZDlkMzgwNy4uNjhmNDlkMSAxMDA2NDQKKy0tLSBhL3NyYy9ncm91cG1vZC5jCisrKysgYi9zcmMvZ3JvdXBtb2QuYworQEAgLTEyNyw2ICsxMjcsNyBAQCBzdGF0aWMgdm9pZCB1c2FnZSAoaW50IHN0YXR1cykKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1vLCAtLW5vbi11bmlxdWUgICAgICAgICAgICAgIGFsbG93IHRvIHVzZSBhIGR1cGxpY2F0ZSAobm9uLXVuaXF1ZSkgR0lEXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLXAsIC0tcGFzc3dvcmQgUEFTU1dPUkQgICAgICAgY2hhbmdlIHRoZSBwYXNzd29yZCB0byB0aGlzIChlbmNyeXB0ZWQpXG4iCisgCSAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVNTV09SRFxuIiksIHVzYWdlb3V0KTsKKysJKHZvaWQpIGZwdXRzIChfKCIgIC1QLCAtLWNsZWFyLXBhc3N3b3JkIFBBU1NXT1JEIGNoYW5nZSB0aGUgcGFzc3dvcmQgdG8gdGhpcyBjbGVhciBQQVNTV09SRFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1SLCAtLXJvb3QgQ0hST09UX0RJUiAgICAgICAgIGRpcmVjdG9yeSB0byBjaHJvb3QgaW50b1xuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzICgiXG4iLCB1c2FnZW91dCk7CisgCWV4aXQgKHN0YXR1cyk7CitAQCAtMzc1LDEwICszNzYsMTEgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJeyJuZXctbmFtZSIsICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICduJ30sCisgCQl7Im5vbi11bmlxdWUiLCBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ28nfSwKKyAJCXsicGFzc3dvcmQiLCAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAncCd9LAorKwkJeyJjbGVhci1wYXNzd29yZCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUCd9LAorIAkJeyJyb290IiwgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdSJ30sCisgCQl7TlVMTCwgMCwgTlVMTCwgJ1wwJ30KKyAJfTsKKy0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJnOmhuOm9wOlI6IiwKKysJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJnOmhuOm9wOlA6UjoiLAorIAkJICAgICAgICAgICAgICAgICBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkgeworIAkJc3dpdGNoIChjKSB7CisgCQljYXNlICdnJzoKK0BAIC00MDUsNiArNDA3LDEwIEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQlncm91cF9wYXNzd2QgPSBvcHRhcmc7CisgCQkJcGZsZyA9IHRydWU7CisgCQkJYnJlYWs7CisrCQljYXNlICdQJzoKKysJCQlncm91cF9wYXNzd2QgPSBwd19lbmNyeXB0IChvcHRhcmcsIGNyeXB0X21ha2Vfc2FsdCAoTlVMTCwgTlVMTCkpOworKwkJCXBmbGcgPSB0cnVlOworKwkJCWJyZWFrOworIAkJY2FzZSAnUic6IC8qIG5vLW9wLCBoYW5kbGVkIGluIHByb2Nlc3Nfcm9vdF9mbGFnICgpICovCisgCQkJYnJlYWs7CisgCQlkZWZhdWx0OgorZGlmZiAtLWdpdCBhL3NyYy91c2VyYWRkLmMgYi9zcmMvdXNlcmFkZC5jCitpbmRleCBiM2JkNDUxLi40NDE2ZjkwIDEwMDY0NAorLS0tIGEvc3JjL3VzZXJhZGQuYworKysrIGIvc3JjL3VzZXJhZGQuYworQEAgLTc3Myw2ICs3NzMsNyBAQCBzdGF0aWMgdm9pZCB1c2FnZSAoaW50IHN0YXR1cykKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1vLCAtLW5vbi11bmlxdWUgICAgICAgICAgICAgIGFsbG93IHRvIGNyZWF0ZSB1c2VycyB3aXRoIGR1cGxpY2F0ZVxuIgorIAkgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vbi11bmlxdWUpIFVJRFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1wLCAtLXBhc3N3b3JkIFBBU1NXT1JEICAgICAgIGVuY3J5cHRlZCBwYXNzd29yZCBvZiB0aGUgbmV3IGFjY291bnRcbiIpLCB1c2FnZW91dCk7CisrCSh2b2lkKSBmcHV0cyAoXygiICAtUCwgLS1jbGVhci1wYXNzd29yZCBQQVNTV09SRCBjbGVhciBwYXNzd29yZCBvZiB0aGUgbmV3IGFjY291bnRcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtciwgLS1zeXN0ZW0gICAgICAgICAgICAgICAgICBjcmVhdGUgYSBzeXN0ZW0gYWNjb3VudFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1SLCAtLXJvb3QgQ0hST09UX0RJUiAgICAgICAgIGRpcmVjdG9yeSB0byBjaHJvb3QgaW50b1xuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1zLCAtLXNoZWxsIFNIRUxMICAgICAgICAgICAgIGxvZ2luIHNoZWxsIG9mIHRoZSBuZXcgYWNjb3VudFxuIiksIHVzYWdlb3V0KTsKK0BAIC0xMDQ3LDYgKzEwNDgsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJeyJuby11c2VyLWdyb3VwIiwgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnTid9LAorIAkJCXsibm9uLXVuaXF1ZSIsICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ28nfSwKKyAJCQl7InBhc3N3b3JkIiwgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdwJ30sCisrCQkJeyJjbGVhci1wYXNzd29yZCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUCd9LAorIAkJCXsic3lzdGVtIiwgICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ3InfSwKKyAJCQl7InJvb3QiLCAgICAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdSJ30sCisgCQkJeyJzaGVsbCIsICAgICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAncyd9LAorQEAgLTEwNTksOSArMTA2MSw5IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCX07CisgCQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwKKyAjaWZkZWYgV0lUSF9TRUxJTlVYCistCQkgICAgICAgICAgICAgICAgICAgICAgICAgImI6YzpkOkRlOmY6ZzpHOmhrOks6bG1NTm9wOnJSOnM6dTpVWjoiLAorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICJiOmM6ZDpEZTpmOmc6RzpoazpLOmxtTU5vcDpQOnJSOnM6dTpVWjoiLAorICNlbHNlCQkJCS8qICFXSVRIX1NFTElOVVggKi8KKy0JCSAgICAgICAgICAgICAgICAgICAgICAgICAiYjpjOmQ6RGU6ZjpnOkc6aGs6SzpsbU1Ob3A6clI6czp1OlUiLAorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICJiOmM6ZDpEZTpmOmc6RzpoazpLOmxtTU5vcDpQOnJSOnM6dTpVIiwKKyAjZW5kaWYJCQkJLyogIVdJVEhfU0VMSU5VWCAqLworIAkJICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKSB7CisgCQkJc3dpdGNoIChjKSB7CitAQCAtMTIyNyw2ICsxMjI5LDkgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJCQl9CisgCQkJCXVzZXJfcGFzcyA9IG9wdGFyZzsKKyAJCQkJYnJlYWs7CisrCQkJY2FzZSAnUCc6IC8qIHNldCBjbGVhciB0ZXh0IHBhc3N3b3JkICovCisrCQkJCXVzZXJfcGFzcyA9IHB3X2VuY3J5cHQgKG9wdGFyZywgY3J5cHRfbWFrZV9zYWx0IChOVUxMLCBOVUxMKSk7CisrCQkJCWJyZWFrOworIAkJCWNhc2UgJ3InOgorIAkJCQlyZmxnID0gdHJ1ZTsKKyAJCQkJYnJlYWs7CitkaWZmIC0tZ2l0IGEvc3JjL3VzZXJtb2QuYyBiL3NyYy91c2VybW9kLmMKK2luZGV4IGU3ZDQzNTEuLmI3OWY3YTMgMTAwNjQ0CistLS0gYS9zcmMvdXNlcm1vZC5jCisrKysgYi9zcmMvdXNlcm1vZC5jCitAQCAtNDE5LDYgKzQxOSw3IEBAIHN0YXRpYyAvKkBub3JldHVybkAqL3ZvaWQgdXNhZ2UgKGludCBzdGF0dXMpCisgCSAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgbG9jYXRpb24gKHVzZSBvbmx5IHdpdGggLWQpXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLW8sIC0tbm9uLXVuaXF1ZSAgICAgICAgICAgICAgYWxsb3cgdXNpbmcgZHVwbGljYXRlIChub24tdW5pcXVlKSBVSURcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtcCwgLS1wYXNzd29yZCBQQVNTV09SRCAgICAgICB1c2UgZW5jcnlwdGVkIHBhc3N3b3JkIGZvciB0aGUgbmV3IHBhc3N3b3JkXG4iKSwgdXNhZ2VvdXQpOworKwkodm9pZCkgZnB1dHMgKF8oIiAgLVAsIC0tY2xlYXItcGFzc3dvcmQgUEFTU1dPUkQgdXNlIGNsZWFyIHBhc3N3b3JkIGZvciB0aGUgbmV3IHBhc3N3b3JkXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLVIsIC0tcm9vdCBDSFJPT1RfRElSICAgICAgICAgZGlyZWN0b3J5IHRvIGNocm9vdCBpbnRvXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLXMsIC0tc2hlbGwgU0hFTEwgICAgICAgICAgICAgbmV3IGxvZ2luIHNoZWxsIGZvciB0aGUgdXNlciBhY2NvdW50XG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLXUsIC0tdWlkIFVJRCAgICAgICAgICAgICAgICAgbmV3IFVJRCBmb3IgdGhlIHVzZXIgYWNjb3VudFxuIiksIHVzYWdlb3V0KTsKK0BAIC05OTYsNiArOTk3LDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJCXsibW92ZS1ob21lIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdtJ30sCisgCQkJeyJub24tdW5pcXVlIiwgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ28nfSwKKyAJCQl7InBhc3N3b3JkIiwgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAncCd9LAorKwkJCXsiY2xlYXItcGFzc3dvcmQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1AnfSwKKyAJCQl7InJvb3QiLCAgICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUid9LAorIAkJCXsic2hlbGwiLCAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdzJ30sCisgCQkJeyJ1aWQiLCAgICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3UnfSwKK0BAIC0xMDEyLDcgKzEwMTQsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJe05VTEwsIDAsIE5VTEwsICdcMCd9CisgCQl9OworIAkJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsCistCQkgICAgICAgICAgICAgICAgICAgICAgICAgImFjOmQ6ZTpmOmc6RzpobDpMbW9wOlI6czp1OlUiCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgImFjOmQ6ZTpmOmc6RzpobDpMbW9wOlA6UjpzOnU6VSIKKyAjaWZkZWYgRU5BQkxFX1NVQklEUworIAkJICAgICAgICAgICAgICAgICAgICAgICAgICJ2Onc6VjpXOiIKKyAjZW5kaWYJCQkJLyogRU5BQkxFX1NVQklEUyAqLworQEAgLTExMTIsNiArMTExNCwxMCBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJCXVzZXJfcGFzcyA9IG9wdGFyZzsKKyAJCQkJcGZsZyA9IHRydWU7CisgCQkJCWJyZWFrOworKwkJCWNhc2UgJ1AnOgorKwkJCQl1c2VyX3Bhc3MgPSBwd19lbmNyeXB0IChvcHRhcmcsIGNyeXB0X21ha2Vfc2FsdCAoTlVMTCwgTlVMTCkpOworKwkJCQlwZmxnID0gdHJ1ZTsKKysJCQkJYnJlYWs7CisgCQkJY2FzZSAnUic6IC8qIG5vLW9wLCBoYW5kbGVkIGluIHByb2Nlc3Nfcm9vdF9mbGFnICgpICovCisgCQkJCWJyZWFrOworIAkJCWNhc2UgJ3MnOgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9jaGVja19zaXplX29mX3VpZF90X2FuZF9naWRfdF91c2luZ19BQ19DSEVDS19TSVpFT0YucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvY2hlY2tfc2l6ZV9vZl91aWRfdF9hbmRfZ2lkX3RfdXNpbmdfQUNfQ0hFQ0tfU0laRU9GLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NTU5MGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvY2hlY2tfc2l6ZV9vZl91aWRfdF9hbmRfZ2lkX3RfdXNpbmdfQUNfQ0hFQ0tfU0laRU9GLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gMmNiNTQxNThiODBjZGJkOTdjYTNiMzZkZjgzZjkyNTVlOTIzYWUzZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphbWVzIExlIEN1aXJvdCA8Y2hld2lAYXVyYS1vbmxpbmUuY28udWs+CitEYXRlOiBTYXQsIDIzIEF1ZyAyMDE0IDA5OjQ2OjM5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIENoZWNrIHNpemUgb2YgdWlkX3QgYW5kIGdpZF90IHVzaW5nIEFDX0NIRUNLX1NJWkVPRgorCitUaGlzIGJ1aWx0LWluIGNoZWNrIGlzIHNpbXBsZXIgdGhhbiB0aGUgcHJldmlvdXMgbWV0aG9kIGFuZCwgbW9zdAoraW1wb3J0YW50bHksIHdvcmtzIHdoZW4gY3Jvc3MtY29tcGlsaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkCitbaHR0cHM6Ly9naXRodWIuY29tL3NoYWRvdy1tYWludC9zaGFkb3cvY29tbWl0LzJjYjU0MTU4YjgwY2RiZDk3Y2EzYjM2ZGY4M2Y5MjU1ZTkyM2FlM2ZdCisKK1NpZ25lZC1vZmYtYnk6IFNlcmdlIEhhbGx5biA8c2VyZ2UuaGFsbHluQHVidW50dS5jb20+CistLS0KKyBjb25maWd1cmUuaW4gfCAxNCArKysrLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCAxYTNmODQxLi40YTRkNmQwIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC0zMzUsMTYgKzMzNSwxMCBAQCBpZiB0ZXN0ICIkZW5hYmxlX3N1YmlkcyIgIT0gIm5vIjsgdGhlbgorIAlkbmwKKyAJZG5sIEZJWE1FOiBjaGVjayBpZiAzMiBiaXQgVUlEcy9HSURzIGFyZSBzdXBwb3J0ZWQgYnkgbGliYworIAlkbmwKKy0JQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoWworLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy1pbnQgbWFpbih2b2lkKSB7CistCXVpZF90IHU7CistCWdpZF90IGc7CistCXJldHVybiAoc2l6ZW9mIHUgPCA0KSB8fCAoc2l6ZW9mIGcgPCA0KTsKKy19CistCV0pXSwgW2lkMzJiaXQ9InllcyJdLCBbaWQzMmJpdD0ibm8iXSkKKy0KKy0JaWYgdGVzdCAieCRpZDMyYml0IiA9ICJ4eWVzIjsgdGhlbgorKwlBQ19DSEVDS19TSVpFT0YoW3VpZF90XSwsIFsjaW5jbHVkZSAic3lzL3R5cGVzLmgiXSkKKysJQUNfQ0hFQ0tfU0laRU9GKFtnaWRfdF0sLCBbI2luY2x1ZGUgInN5cy90eXBlcy5oIl0pCisrCisrCWlmIHRlc3QgIiRhY19jdl9zaXplb2ZfdWlkX3QiIC1nZSA0ICYmIHRlc3QgIiRhY19jdl9zaXplb2ZfZ2lkX3QiIC1nZSA0OyB0aGVuCisgCQlBQ19ERUZJTkUoRU5BQkxFX1NVQklEUywgMSwgW0RlZmluZSB0byBzdXBwb3J0IHRoZSBzdWJvcmRpbmF0ZSBJRHMuXSkKKyAJCWVuYWJsZV9zdWJpZHM9InllcyIKKyAJZWxzZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2NvbW1vbmlvLmMtZml4LXVuZXhwZWN0ZWQtb3Blbi1mYWlsdXJlLWluLWNocm9vdC1lbnYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvY29tbW9uaW8uYy1maXgtdW5leHBlY3RlZC1vcGVuLWZhaWx1cmUtaW4tY2hyb290LWVudi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmEzZDE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2NvbW1vbmlvLmMtZml4LXVuZXhwZWN0ZWQtb3Blbi1mYWlsdXJlLWluLWNocm9vdC1lbnYucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworY29tbW9uaW8uYzogZml4IHVuZXhwZWN0ZWQgb3BlbiBmYWlsdXJlIGluIGNocm9vdCBlbnZpcm9ubWVudAorCitXaGVuIHVzaW5nIGNvbW1hbmRzIHdpdGggJy1SIDxuZXdyb290Picgb3B0aW9uIGluIG91ciBwc2V1ZG8gZW52aXJvbm1lbnQsCit3ZSB3b3VsZCB1c3VhbGx5IGdldCB0aGUgJ1BlbWlzc2lvbiBEZW5pZWQnIGVycm9yLiBUaGlzIHBhdGNoIHNlcnZlcyBhcworYSB3b3JrYXJvdW5kIHRvIHRoaXMgcHJvYmxlbS4KKworTm90ZSB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBjaGFuZ2UgdGhlIGxvZ2ljIGluIHRoZSBjb2RlLCBpdCBqdXN0IGV4cGFuZHMKK3RoZSBjb2Rlcy4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliL2NvbW1vbmlvLmMgfCAgIDE2ICsrKysrKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9jb21tb25pby5jIGIvbGliL2NvbW1vbmlvLmMKK2luZGV4IGNjNTM2YmYuLjUxY2FmZDkgMTAwNjQ0CistLS0gYS9saWIvY29tbW9uaW8uYworKysrIGIvbGliL2NvbW1vbmlvLmMKK0BAIC02MTMsMTAgKzYxMywxOCBAQCBpbnQgY29tbW9uaW9fb3BlbiAoc3RydWN0IGNvbW1vbmlvX2RiICpkYiwgaW50IG1vZGUpCisgCWRiLT5jdXJzb3IgPSBOVUxMOworIAlkYi0+Y2hhbmdlZCA9IGZhbHNlOworIAorLQlmZCA9IG9wZW4gKGRiLT5maWxlbmFtZSwKKy0JICAgICAgICAgICAgIChkYi0+cmVhZG9ubHkgPyBPX1JET05MWSA6IE9fUkRXUikKKy0JICAgICAgICAgICB8IE9fTk9DVFRZIHwgT19OT05CTE9DSyB8IE9fTk9GT0xMT1cpOworLQlzYXZlZF9lcnJubyA9IGVycm5vOworKwlpZiAoZGItPnJlYWRvbmx5KSB7CisrCQlmZCA9IG9wZW4gKGRiLT5maWxlbmFtZSwKKysJCQkgICAodHJ1ZSA/IE9fUkRPTkxZIDogT19SRFdSKQorKwkJCSAgIHwgT19OT0NUVFkgfCBPX05PTkJMT0NLIHwgT19OT0ZPTExPVyk7CisrCQlzYXZlZF9lcnJubyA9IGVycm5vOworKwl9IGVsc2UgeworKwkJZmQgPSBvcGVuIChkYi0+ZmlsZW5hbWUsCisrCQkJICAgKGZhbHNlID8gT19SRE9OTFkgOiBPX1JEV1IpCisrCQkJICAgfCBPX05PQ1RUWSB8IE9fTk9OQkxPQ0sgfCBPX05PRk9MTE9XKTsKKysJCXNhdmVkX2Vycm5vID0gZXJybm87CisrCX0KKysKKyAJZGItPmZwID0gTlVMTDsKKyAJaWYgKGZkID49IDApIHsKKyAjaWZkZWYgV0lUSF9UQ0IKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvZGlzYWJsZS1zeXNsb2cucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvZGlzYWJsZS1zeXNsb2cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0M2ZkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9kaXNhYmxlLXN5c2xvZy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitEaXNhYmxlIHVzZSBvZiBzeXNsb2cgdG8gcHJldmVudCBzeXNyb290IHVzZXIgYW5kIGdyb3VwIGFkZGl0aW9ucyBmcm9tCit3cml0aW5nIGVudHJpZXMgdG8gdGhlIGhvc3QncyBzeXNsb2cuIFRoaXMgcGF0Y2ggc2hvdWxkIG9ubHkgYmUgdXNlZAord2l0aCB0aGUgc2hhZG93LW5hdGl2ZSByZWNpcGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtdXJOIHNoYWRvdy00LjEuNC4zLm9yaWcvL3NyYy9ncm91cGFkZC5jIHNoYWRvdy00LjEuNC4zL3NyYy9ncm91cGFkZC5jCistLS0gc2hhZG93LTQuMS40LjMub3JpZy8vc3JjL2dyb3VwYWRkLmMJMjAxMS0wMi0xMyAwOTo1ODoxNi4wMDAwMDAwMDAgLTA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9zcmMvZ3JvdXBhZGQuYwkyMDEyLTA0LTA1IDEwOjA1OjU5LjQ0MDAwMTc1OCAtMDcwMAorQEAgLTM0LDYgKzM0LDkgQEAKKyAKKyAjaWRlbnQgIiRJZDogZ3JvdXBhZGQuYyAzMDE1IDIwMDktMDYtMDUgMjI6MTY6NTZaIG5la3JhbC1ndWVzdCAkIgorIAorKy8qIERpc2FibGUgdXNlIG9mIHN5c2xvZyBzaW5jZSB3ZSdyZSBydW5uaW5nIHRoaXMgY29tbWFuZCBhZ2FpbnN0IGEgc3lzcm9vdCAqLworKyN1bmRlZiBVU0VfU1lTTE9HCisrCisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorZGlmZiAtdXJOIHNoYWRvdy00LjEuNC4zLm9yaWcvL3NyYy91c2VyYWRkLmMgc2hhZG93LTQuMS40LjMvc3JjL3VzZXJhZGQuYworLS0tIHNoYWRvdy00LjEuNC4zLm9yaWcvL3NyYy91c2VyYWRkLmMJMjAxMS0wMi0xMyAwOTo1ODoxNi4wMDAwMDAwMDAgLTA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9zcmMvdXNlcmFkZC5jCTIwMTItMDQtMDUgMTA6MDY6MjUuMDc2MDAxMzE1IC0wNzAwCitAQCAtMzQsNiArMzQsOSBAQAorIAorICNpZGVudCAiJElkOiB1c2VyYWRkLmMgMzAxNSAyMDA5LTA2LTA1IDIyOjE2OjU2WiBuZWtyYWwtZ3Vlc3QgJCIKKyAKKysvKiBEaXNhYmxlIHVzZSBvZiBzeXNsb2cgc2luY2Ugd2UncmUgcnVubmluZyB0aGlzIGNvbW1hbmQgYWdhaW5zdCBhIHN5c3Jvb3QgKi8KKysjdW5kZWYgVVNFX1NZU0xPRworKworICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9maXgtaW5zdGFsbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvZml4LWluc3RhbGxhdGlvbi1mYWlsdXJlLXdpdGgtc3ViaWRzLWRpc2FibGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyY2I5MWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvZml4LWluc3RhbGxhdGlvbi1mYWlsdXJlLXdpdGgtc3ViaWRzLWRpc2FibGVkLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTdWJqZWN0OiBmaXggaW5zdGFsbGF0aW9uIGZhaWx1cmUgd2l0aCBzdWJpZHMgZGlzYWJsZWQKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL01ha2VmaWxlLmFtIHwgICAgNSArKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQoraW5kZXggMjVlMjg4ZC4uMDc2ZjhlZiAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL01ha2VmaWxlLmFtCitAQCAtNTIsNyArNTIsMTAgQEAgdXNiaW5fUFJPR1JBTVMgPSBcCisgbm9pbnN0X1BST0dSQU1TID0gaWQgc3Vsb2dpbgorIAorIHN1aWRiaW5zICAgICAgID0gc3UKKy1zdWlkdWJpbnMgICAgICA9IGNoYWdlIGNoZm4gY2hzaCBleHBpcnkgZ3Bhc3N3ZCBuZXdncnAgcGFzc3dkIG5ld3VpZG1hcCBuZXdnaWRtYXAKKytzdWlkdWJpbnMgICAgICA9IGNoYWdlIGNoZm4gY2hzaCBleHBpcnkgZ3Bhc3N3ZCBuZXdncnAgcGFzc3dkCisraWYgRU5BQkxFX1NVQklEUworK3N1aWR1YmlucyArPSBuZXdnaWRtYXAgbmV3dWlkbWFwCisrZW5kaWYKKyBpZiBBQ0NUX1RPT0xTX1NFVFVJRAorIAlzdWlkdWJpbnMgKz0gY2hhZ2UgY2hncGFzc3dkIGNocGFzc3dkIGdyb3VwYWRkIGdyb3VwZGVsIGdyb3VwbW9kIG5ld3VzZXJzIHVzZXJhZGQgdXNlcmRlbCB1c2VybW9kCisgZW5kaWYKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvbG9naW4uZGVmc19zaGFkb3ctc3lzcm9vdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9sb2dpbi5kZWZzX3NoYWRvdy1zeXNyb290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNjhkZDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvbG9naW4uZGVmc19zaGFkb3ctc3lzcm9vdApAQCAtMCwwICsxLDM4NiBAQAorIworIyAvZXRjL2xvZ2luLmRlZnMgLSBDb25maWd1cmF0aW9uIGNvbnRyb2wgZGVmaW5pdGlvbnMgZm9yIHRoZSBzaGFkb3cgcGFja2FnZS4KKyMKKyMJJElkOiBsb2dpbi5kZWZzIDMwMzggMjAwOS0wNy0yMyAyMDo0MTozNVogbmVrcmFsLWd1ZXN0ICQKKyMKKworIworIyBEZWxheSBpbiBzZWNvbmRzIGJlZm9yZSBiZWluZyBhbGxvd2VkIGFub3RoZXIgYXR0ZW1wdCBhZnRlciBhIGxvZ2luIGZhaWx1cmUKKyMgTm90ZTogV2hlbiBQQU0gaXMgdXNlZCwgc29tZSBtb2R1bGVzIG1heSBlbmZvcmUgYSBtaW5pbWFsIGRlbGF5IChlLmcuCisjICAgICAgIHBhbV91bml4IGVuZm9yY2VzIGEgMnMgZGVsYXkpCisjCitGQUlMX0RFTEFZCQkzCisKKyMKKyMgRW5hYmxlIGxvZ2dpbmcgYW5kIGRpc3BsYXkgb2YgL3Zhci9sb2cvZmFpbGxvZyBsb2dpbiBmYWlsdXJlIGluZm8uCisjCisjRkFJTExPR19FTkFCCQl5ZXMKKworIworIyBFbmFibGUgZGlzcGxheSBvZiB1bmtub3duIHVzZXJuYW1lcyB3aGVuIGxvZ2luIGZhaWx1cmVzIGFyZSByZWNvcmRlZC4KKyMKK0xPR19VTktGQUlMX0VOQUIJbm8KKworIworIyBFbmFibGUgbG9nZ2luZyBvZiBzdWNjZXNzZnVsIGxvZ2lucworIworTE9HX09LX0xPR0lOUwkJbm8KKworIworIyBFbmFibGUgbG9nZ2luZyBhbmQgZGlzcGxheSBvZiAvdmFyL2xvZy9sYXN0bG9nIGxvZ2luIHRpbWUgaW5mby4KKyMKKyNMQVNUTE9HX0VOQUIJCXllcworCisjCisjIEVuYWJsZSBjaGVja2luZyBhbmQgZGlzcGxheSBvZiBtYWlsYm94IHN0YXR1cyB1cG9uIGxvZ2luLgorIworIyBEaXNhYmxlIGlmIHRoZSBzaGVsbCBzdGFydHVwIGZpbGVzIGFscmVhZHkgY2hlY2sgZm9yIG1haWwKKyMgKCJtYWlseCAtZSIgb3IgZXF1aXZhbGVudCkuCisjCisjI01BSUxfQ0hFQ0tfRU5BQgkJeWVzCisKKyMKKyMgRW5hYmxlIGFkZGl0aW9uYWwgY2hlY2tzIHVwb24gcGFzc3dvcmQgY2hhbmdlcy4KKyMKKyNPQlNDVVJFX0NIRUNLU19FTkFCCXllcworCisjCisjIEVuYWJsZSBjaGVja2luZyBvZiB0aW1lIHJlc3RyaWN0aW9ucyBzcGVjaWZpZWQgaW4gL2V0Yy9wb3J0dGltZS4KKyMKKyNQT1JUVElNRV9DSEVDS1NfRU5BQgl5ZXMKKworIworIyBFbmFibGUgc2V0dGluZyBvZiB1bGltaXQsIHVtYXNrLCBhbmQgbmljZW5lc3MgZnJvbSBwYXNzd2QgZ2Vjb3MgZmllbGQuCisjCisjUVVPVEFTX0VOQUIJCXllcworCisjCisjIEVuYWJsZSAic3lzbG9nIiBsb2dnaW5nIG9mIHN1IGFjdGl2aXR5IC0gaW4gYWRkaXRpb24gdG8gc3Vsb2cgZmlsZSBsb2dnaW5nLgorIyBTWVNMT0dfU0dfRU5BQiBkb2VzIHRoZSBzYW1lIGZvciBuZXdncnAgYW5kIHNnLgorIworU1lTTE9HX1NVX0VOQUIJCXllcworU1lTTE9HX1NHX0VOQUIJCXllcworCisjCisjIElmIGRlZmluZWQsIGVpdGhlciBmdWxsIHBhdGhuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGRldmljZSBuYW1lcyBvcgorIyBhICI6IiBkZWxpbWl0ZWQgbGlzdCBvZiBkZXZpY2UgbmFtZXMuICBSb290IGxvZ2lucyB3aWxsIGJlIGFsbG93ZWQgb25seQorIyB1cG9uIHRoZXNlIGRldmljZXMuCisjCitDT05TT0xFCQkvZXRjL3NlY3VyZXR0eQorI0NPTlNPTEUJY29uc29sZTp0dHkwMTp0dHkwMjp0dHkwMzp0dHkwNAorCisjCisjIElmIGRlZmluZWQsIGFsbCBzdSBhY3Rpdml0eSBpcyBsb2dnZWQgdG8gdGhpcyBmaWxlLgorIworI1NVTE9HX0ZJTEUJL3Zhci9sb2cvc3Vsb2cKKworIworIyBJZiBkZWZpbmVkLCAiOiIgZGVsaW1pdGVkIGxpc3Qgb2YgIm1lc3NhZ2Ugb2YgdGhlIGRheSIgZmlsZXMgdG8KKyMgYmUgZGlzcGxheWVkIHVwb24gbG9naW4uCisjCisjTU9URF9GSUxFCS9ldGMvbW90ZAorI01PVERfRklMRQkvZXRjL21vdGQ6L3Vzci9saWIvbmV3cy9uZXdzLW1vdGQKKworIworIyBJZiBkZWZpbmVkLCB0aGlzIGZpbGUgd2lsbCBiZSBvdXRwdXQgYmVmb3JlIGVhY2ggbG9naW4gcHJvbXB0LgorIworI0lTU1VFX0ZJTEUJL2V0Yy9pc3N1ZQorCisjCisjIElmIGRlZmluZWQsIGZpbGUgd2hpY2ggbWFwcyB0dHkgbGluZSB0byBURVJNIGVudmlyb25tZW50IHBhcmFtZXRlci4KKyMgRWFjaCBsaW5lIG9mIHRoZSBmaWxlIGlzIGluIGEgZm9ybWF0IHNvbWV0aGluZyBsaWtlICJ2dDEwMCAgdHR5MDEiLgorIworI1RUWVRZUEVfRklMRQkvZXRjL3R0eXR5cGUKKworIworIyBJZiBkZWZpbmVkLCBsb2dpbiBmYWlsdXJlcyB3aWxsIGJlIGxvZ2dlZCBoZXJlIGluIGEgdXRtcCBmb3JtYXQuCisjIGxhc3QsIHdoZW4gaW52b2tlZCBhcyBsYXN0Yiwgd2lsbCByZWFkIC92YXIvbG9nL2J0bXAsIHNvLi4uCisjCisjRlRNUF9GSUxFCS92YXIvbG9nL2J0bXAKKworIworIyBJZiBkZWZpbmVkLCBuYW1lIG9mIGZpbGUgd2hvc2UgcHJlc2VuY2Ugd2hpY2ggd2lsbCBpbmhpYml0IG5vbi1yb290CisjIGxvZ2lucy4gIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgc2hvdWxkIGJlIGEgbWVzc2FnZSBpbmRpY2F0aW5nCisjIHdoeSBsb2dpbnMgYXJlIGluaGliaXRlZC4KKyMKKyNOT0xPR0lOU19GSUxFCS9ldGMvbm9sb2dpbgorCisjCisjIElmIGRlZmluZWQsIHRoZSBjb21tYW5kIG5hbWUgdG8gZGlzcGxheSB3aGVuIHJ1bm5pbmcgInN1IC0iLiAgRm9yCisjIGV4YW1wbGUsIGlmIHRoaXMgaXMgZGVmaW5lZCBhcyAic3UiIHRoZW4gYSAicHMiIHdpbGwgZGlzcGxheSB0aGUKKyMgY29tbWFuZCBpcyAiLXN1Ii4gIElmIG5vdCBkZWZpbmVkLCB0aGVuICJwcyIgd291bGQgZGlzcGxheSB0aGUKKyMgbmFtZSBvZiB0aGUgc2hlbGwgYWN0dWFsbHkgYmVpbmcgcnVuLCBlLmcuIHNvbWV0aGluZyBsaWtlICItc2giLgorIworU1VfTkFNRQkJc3UKKworIworIyAqUkVRVUlSRUQqCisjICAgRGlyZWN0b3J5IHdoZXJlIG1haWxib3hlcyByZXNpZGUsIF9vcl8gbmFtZSBvZiBmaWxlLCByZWxhdGl2ZSB0byB0aGUKKyMgICBob21lIGRpcmVjdG9yeS4gIElmIHlvdSBfZG9fIGRlZmluZSBib3RoLCAjTUFJTF9ESVIgdGFrZXMgcHJlY2VkZW5jZS4KKyMKKyNNQUlMX0RJUgkvdmFyL3Nwb29sL21haWwKK01BSUxfRklMRQkubWFpbAorCisjCisjIElmIGRlZmluZWQsIGZpbGUgd2hpY2ggaW5oaWJpdHMgYWxsIHRoZSB1c3VhbCBjaGF0dGVyIGR1cmluZyB0aGUgbG9naW4KKyMgc2VxdWVuY2UuICBJZiBhIGZ1bGwgcGF0aG5hbWUsIHRoZW4gaHVzaGVkIG1vZGUgd2lsbCBiZSBlbmFibGVkIGlmIHRoZQorIyB1c2VyJ3MgbmFtZSBvciBzaGVsbCBhcmUgZm91bmQgaW4gdGhlIGZpbGUuICBJZiBub3QgYSBmdWxsIHBhdGhuYW1lLCB0aGVuCisjIGh1c2hlZCBtb2RlIHdpbGwgYmUgZW5hYmxlZCBpZiB0aGUgZmlsZSBleGlzdHMgaW4gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4KKyMKK0hVU0hMT0dJTl9GSUxFCS5odXNobG9naW4KKyNIVVNITE9HSU5fRklMRQkvZXRjL2h1c2hsb2dpbnMKKworIworIyBJZiBkZWZpbmVkLCBlaXRoZXIgYSBUWiBlbnZpcm9ubWVudCBwYXJhbWV0ZXIgc3BlYyBvciB0aGUKKyMgZnVsbHktcm9vdGVkIHBhdGhuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIHN1Y2ggYSBzcGVjLgorIworI0VOVl9UWgkJVFo9Q1NUNkNEVAorI0VOVl9UWgkJL2V0Yy90em5hbWUKKworIworIyBJZiBkZWZpbmVkLCBhbiBIWiBlbnZpcm9ubWVudCBwYXJhbWV0ZXIgc3BlYy4KKyMKKyMgZm9yIExpbnV4L3g4NgorI0VOVl9IWgkJSFo9MTAwCisjIEZvciBMaW51eC9BbHBoYS4uLgorI0VOVl9IWgkJSFo9MTAyNAorCisjCisjICpSRVFVSVJFRCogIFRoZSBkZWZhdWx0IFBBVEggc2V0dGluZ3MsIGZvciBzdXBlcnVzZXIgYW5kIG5vcm1hbCB1c2Vycy4KKyMKKyMgKHRoZXkgYXJlIG1pbmltYWwsIGFkZCB0aGUgcmVzdCBpbiB0aGUgc2hlbGwgc3RhcnR1cCBmaWxlcykKK0VOVl9TVVBBVEgJUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorRU5WX1BBVEgJUEFUSD0vYmluOi91c3IvYmluCisKKyMKKyMgVGVybWluYWwgcGVybWlzc2lvbnMKKyMKKyMJVFRZR1JPVVAJTG9naW4gdHR5IHdpbGwgYmUgYXNzaWduZWQgdGhpcyBncm91cCBvd25lcnNoaXAuCisjCVRUWVBFUk0JCUxvZ2luIHR0eSB3aWxsIGJlIHNldCB0byB0aGlzIHBlcm1pc3Npb24uCisjCisjIElmIHlvdSBoYXZlIGEgIndyaXRlIiBwcm9ncmFtIHdoaWNoIGlzICJzZXRnaWQiIHRvIGEgc3BlY2lhbCBncm91cAorIyB3aGljaCBvd25zIHRoZSB0ZXJtaW5hbHMsIGRlZmluZSBUVFlHUk9VUCB0byB0aGUgZ3JvdXAgbnVtYmVyIGFuZAorIyBUVFlQRVJNIHRvIDA2MjAuICBPdGhlcndpc2UgbGVhdmUgVFRZR1JPVVAgY29tbWVudGVkIG91dCBhbmQgYXNzaWduCisjIFRUWVBFUk0gdG8gZWl0aGVyIDYyMiBvciA2MDAuCisjCitUVFlHUk9VUAl0dHkKK1RUWVBFUk0JCTA2MDAKKworIworIyBMb2dpbiBjb25maWd1cmF0aW9uIGluaXRpYWxpemF0aW9uczoKKyMKKyMJRVJBU0VDSEFSCVRlcm1pbmFsIEVSQVNFIGNoYXJhY3RlciAoJ1wwMTAnID0gYmFja3NwYWNlKS4KKyMJS0lMTENIQVIJVGVybWluYWwgS0lMTCBjaGFyYWN0ZXIgKCdcMDI1JyA9IENUUkwvVSkuCisjCVVMSU1JVAkJRGVmYXVsdCAidWxpbWl0IiB2YWx1ZS4KKyMKKyMgVGhlIEVSQVNFQ0hBUiBhbmQgS0lMTENIQVIgYXJlIHVzZWQgb25seSBvbiBTeXN0ZW0gViBtYWNoaW5lcy4KKyMgVGhlIFVMSU1JVCBpcyB1c2VkIG9ubHkgaWYgdGhlIHN5c3RlbSBzdXBwb3J0cyBpdC4KKyMgKG5vdyBpdCB3b3JrcyB3aXRoIHNldHJsaW1pdCB0b287IHVsaW1pdCBpcyBpbiA1MTItYnl0ZSB1bml0cykKKyMKKyMgUHJlZml4IHRoZXNlIHZhbHVlcyB3aXRoICIwIiB0byBnZXQgb2N0YWwsICIweCIgdG8gZ2V0IGhleGFkZWNpbWFsLgorIworRVJBU0VDSEFSCTAxNzcKK0tJTExDSEFSCTAyNQorI1VMSU1JVAkJMjA5NzE1MgorCisjIERlZmF1bHQgaW5pdGlhbCAidW1hc2siIHZhbHVlIGZvciBub24tUEFNIGVuYWJsZWQgc3lzdGVtcy4KKyMgVU1BU0sgaXMgYWxzbyB1c2VkIGJ5IHVzZXJhZGQgYW5kIG5ld3VzZXJzIHRvIHNldCB0aGUgbW9kZSBvZiBuZXcgaG9tZQorIyBkaXJlY3Rvcmllcy4KKyMgMDIyIGlzIHRoZSBkZWZhdWx0IHZhbHVlLCBidXQgMDI3LCBvciBldmVuIDA3NywgY291bGQgYmUgY29uc2lkZXJlZAorIyBiZXR0ZXIgZm9yIHByaXZhY3kuIFRoZXJlIGlzIG5vIE9uZSBUcnVlIEFuc3dlciBoZXJlOiBlYWNoIHN5c2FkbWluCisjIG11c3QgbWFrZSB1cCBoZXIgbWluZC4KK1VNQVNLCQkwMjIKKworIworIyBQYXNzd29yZCBhZ2luZyBjb250cm9sczoKKyMKKyMJUEFTU19NQVhfREFZUwlNYXhpbXVtIG51bWJlciBvZiBkYXlzIGEgcGFzc3dvcmQgbWF5IGJlIHVzZWQuCisjCVBBU1NfTUlOX0RBWVMJTWluaW11bSBudW1iZXIgb2YgZGF5cyBhbGxvd2VkIGJldHdlZW4gcGFzc3dvcmQgY2hhbmdlcy4KKyMJUEFTU19NSU5fTEVOCU1pbmltdW0gYWNjZXB0YWJsZSBwYXNzd29yZCBsZW5ndGguCisjCVBBU1NfV0FSTl9BR0UJTnVtYmVyIG9mIGRheXMgd2FybmluZyBnaXZlbiBiZWZvcmUgYSBwYXNzd29yZCBleHBpcmVzLgorIworUEFTU19NQVhfREFZUwk5OTk5OQorUEFTU19NSU5fREFZUwkwCisjUEFTU19NSU5fTEVOCTUKK1BBU1NfV0FSTl9BR0UJNworCisjCisjIElmICJ5ZXMiLCB0aGUgdXNlciBtdXN0IGJlIGxpc3RlZCBhcyBhIG1lbWJlciBvZiB0aGUgZmlyc3QgZ2lkIDAgZ3JvdXAKKyMgaW4gL2V0Yy9ncm91cCAoY2FsbGVkICJyb290IiBvbiBtb3N0IExpbnV4IHN5c3RlbXMpIHRvIGJlIGFibGUgdG8gInN1IgorIyB0byB1aWQgMCBhY2NvdW50cy4gIElmIHRoZSBncm91cCBkb2Vzbid0IGV4aXN0IG9yIGlzIGVtcHR5LCBubyBvbmUKKyMgd2lsbCBiZSBhYmxlIHRvICJzdSIgdG8gdWlkIDAuCisjCisjU1VfV0hFRUxfT05MWQlubworCisjCisjIElmIGNvbXBpbGVkIHdpdGggY3JhY2tsaWIgc3VwcG9ydCwgd2hlcmUgYXJlIHRoZSBkaWN0aW9uYXJpZXMKKyMKKyNDUkFDS0xJQl9ESUNUUEFUSAkvdmFyL2NhY2hlL2NyYWNrbGliL2NyYWNrbGliX2RpY3QKKworIworIyBNaW4vbWF4IHZhbHVlcyBmb3IgYXV0b21hdGljIHVpZCBzZWxlY3Rpb24gaW4gdXNlcmFkZAorIworVUlEX01JTgkJCSAxMDAwCitVSURfTUFYCQkJNjAwMDAKKyMgU3lzdGVtIGFjY291bnRzCitTWVNfVUlEX01JTgkJICAxMDEKK1NZU19VSURfTUFYCQkgIDk5OQorCisjCisjIE1pbi9tYXggdmFsdWVzIGZvciBhdXRvbWF0aWMgZ2lkIHNlbGVjdGlvbiBpbiBncm91cGFkZAorIworR0lEX01JTgkJCSAxMDAwCitHSURfTUFYCQkJNjAwMDAKKyMgU3lzdGVtIGFjY291bnRzCitTWVNfR0lEX01JTgkJICAxMDEKK1NZU19HSURfTUFYCQkgIDk5OQorCisjCisjIE1heCBudW1iZXIgb2YgbG9naW4gcmV0cmllcyBpZiBwYXNzd29yZCBpcyBiYWQKKyMKK0xPR0lOX1JFVFJJRVMJCTUKKworIworIyBNYXggdGltZSBpbiBzZWNvbmRzIGZvciBsb2dpbgorIworTE9HSU5fVElNRU9VVAkJNjAKKworIworIyBNYXhpbXVtIG51bWJlciBvZiBhdHRlbXB0cyB0byBjaGFuZ2UgcGFzc3dvcmQgaWYgcmVqZWN0ZWQgKHRvbyBlYXN5KQorIworI1BBU1NfQ0hBTkdFX1RSSUVTCTUKKworIworIyBXYXJuIGFib3V0IHdlYWsgcGFzc3dvcmRzIChidXQgc3RpbGwgYWxsb3cgdGhlbSkgaWYgeW91IGFyZSByb290LgorIworI1BBU1NfQUxXQVlTX1dBUk4JeWVzCisKKyMKKyMgTnVtYmVyIG9mIHNpZ25pZmljYW50IGNoYXJhY3RlcnMgaW4gdGhlIHBhc3N3b3JkIGZvciBjcnlwdCgpLgorIyBEZWZhdWx0IGlzIDgsIGRvbid0IGNoYW5nZSB1bmxlc3MgeW91ciBjcnlwdCgpIGlzIGJldHRlci4KKyMgSWdub3JlZCBpZiBNRDVfQ1JZUFRfRU5BQiBzZXQgdG8gInllcyIuCisjCisjUEFTU19NQVhfTEVOCQk4CisKKyMKKyMgUmVxdWlyZSBwYXNzd29yZCBiZWZvcmUgY2hmbi9jaHNoIGNhbiBtYWtlIGFueSBjaGFuZ2VzLgorIworI0NIRk5fQVVUSAkJeWVzCisKKyMKKyMgV2hpY2ggZmllbGRzIG1heSBiZSBjaGFuZ2VkIGJ5IHJlZ3VsYXIgdXNlcnMgdXNpbmcgY2hmbiAtIHVzZQorIyBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycyAiZnJ3aCIgKGZ1bGwgbmFtZSwgcm9vbSBudW1iZXIsIHdvcmsKKyMgcGhvbmUsIGhvbWUgcGhvbmUpLiAgSWYgbm90IGRlZmluZWQsIG5vIGNoYW5nZXMgYXJlIGFsbG93ZWQuCisjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCAieWVzIiA9ICJyd2giIGFuZCAibm8iID0gImZyd2giLgorIyAKK0NIRk5fUkVTVFJJQ1QJCXJ3aAorCisjCisjIFBhc3N3b3JkIHByb21wdCAoJXMgd2lsbCBiZSByZXBsYWNlZCBieSB1c2VyIG5hbWUpLgorIworIyBYWFggLSBpdCBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHlldCwgZm9yIG5vdyBsZWF2ZSBpdCBjb21tZW50ZWQgb3V0CisjIHRvIHVzZSB0aGUgZGVmYXVsdCB3aGljaCBpcyBqdXN0ICJQYXNzd29yZDogIi4KKyNMT0dJTl9TVFJJTkcJCSIlcydzIFBhc3N3b3JkOiAiCisKKyMKKyMgT25seSB3b3JrcyBpZiBjb21waWxlZCB3aXRoIE1ENV9DUllQVCBkZWZpbmVkOgorIyBJZiBzZXQgdG8gInllcyIsIG5ldyBwYXNzd29yZHMgd2lsbCBiZSBlbmNyeXB0ZWQgdXNpbmcgdGhlIE1ENS1iYXNlZAorIyBhbGdvcml0aG0gY29tcGF0aWJsZSB3aXRoIHRoZSBvbmUgdXNlZCBieSByZWNlbnQgcmVsZWFzZXMgb2YgRnJlZUJTRC4KKyMgSXQgc3VwcG9ydHMgcGFzc3dvcmRzIG9mIHVubGltaXRlZCBsZW5ndGggYW5kIGxvbmdlciBzYWx0IHN0cmluZ3MuCisjIFNldCB0byAibm8iIGlmIHlvdSBuZWVkIHRvIGNvcHkgZW5jcnlwdGVkIHBhc3N3b3JkcyB0byBvdGhlciBzeXN0ZW1zCisjIHdoaWNoIGRvbid0IHVuZGVyc3RhbmQgdGhlIG5ldyBhbGdvcml0aG0uICBEZWZhdWx0IGlzICJubyIuCisjCisjIE5vdGU6IElmIHlvdSB1c2UgUEFNLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgYSB2YWx1ZSBjb25zaXN0ZW50IHdpdGgKKyMgdGhlIFBBTSBtb2R1bGVzIGNvbmZpZ3VyYXRpb24uCisjCisjIFRoaXMgdmFyaWFibGUgaXMgZGVwcmVjYXRlZC4gWW91IHNob3VsZCB1c2UgRU5DUllQVF9NRVRIT0QuCisjCisjTUQ1X0NSWVBUX0VOQUIJbm8KKworIworIyBPbmx5IHdvcmtzIGlmIGNvbXBpbGVkIHdpdGggRU5DUllQVE1FVEhPRF9TRUxFQ1QgZGVmaW5lZDoKKyMgSWYgc2V0IHRvIE1ENSAsIE1ENS1iYXNlZCBhbGdvcml0aG0gd2lsbCBiZSB1c2VkIGZvciBlbmNyeXB0aW5nIHBhc3N3b3JkCisjIElmIHNldCB0byBTSEEyNTYsIFNIQTI1Ni1iYXNlZCBhbGdvcml0aG0gd2lsbCBiZSB1c2VkIGZvciBlbmNyeXB0aW5nIHBhc3N3b3JkCisjIElmIHNldCB0byBTSEE1MTIsIFNIQTUxMi1iYXNlZCBhbGdvcml0aG0gd2lsbCBiZSB1c2VkIGZvciBlbmNyeXB0aW5nIHBhc3N3b3JkCisjIElmIHNldCB0byBERVMsIERFUy1iYXNlZCBhbGdvcml0aG0gd2lsbCBiZSB1c2VkIGZvciBlbmNyeXB0aW5nIHBhc3N3b3JkIChkZWZhdWx0KQorIyBPdmVycmlkZXMgdGhlIE1ENV9DUllQVF9FTkFCIG9wdGlvbgorIworIyBOb3RlOiBJZiB5b3UgdXNlIFBBTSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGEgdmFsdWUgY29uc2lzdGVudCB3aXRoCisjIHRoZSBQQU0gbW9kdWxlcyBjb25maWd1cmF0aW9uLgorIworI0VOQ1JZUFRfTUVUSE9EIERFUworCisjCisjIE9ubHkgd29ya3MgaWYgRU5DUllQVF9NRVRIT0QgaXMgc2V0IHRvIFNIQTI1NiBvciBTSEE1MTIuCisjCisjIERlZmluZSB0aGUgbnVtYmVyIG9mIFNIQSByb3VuZHMuCisjIFdpdGggYSBsb3Qgb2Ygcm91bmRzLCBpdCBpcyBtb3JlIGRpZmZpY3VsdCB0byBicnV0ZSBmb3JjaW5nIHRoZSBwYXNzd29yZC4KKyMgQnV0IG5vdGUgYWxzbyB0aGF0IGl0IG1vcmUgQ1BVIHJlc291cmNlcyB3aWxsIGJlIG5lZWRlZCB0byBhdXRoZW50aWNhdGUKKyMgdXNlcnMuCisjCisjIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBsaWJjIHdpbGwgY2hvb3NlIHRoZSBkZWZhdWx0IG51bWJlciBvZiByb3VuZHMgKDUwMDApLgorIyBUaGUgdmFsdWVzIG11c3QgYmUgaW5zaWRlIHRoZSAxMDAwLTk5OTk5OTk5OSByYW5nZS4KKyMgSWYgb25seSBvbmUgb2YgdGhlIE1JTiBvciBNQVggdmFsdWVzIGlzIHNldCwgdGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUgdXNlZC4KKyMgSWYgTUlOID4gTUFYLCB0aGUgaGlnaGVzdCB2YWx1ZSB3aWxsIGJlIHVzZWQuCisjCisjIFNIQV9DUllQVF9NSU5fUk9VTkRTIDUwMDAKKyMgU0hBX0NSWVBUX01BWF9ST1VORFMgNTAwMAorCisjCisjIExpc3Qgb2YgZ3JvdXBzIHRvIGFkZCB0byB0aGUgdXNlcidzIHN1cHBsZW1lbnRhcnkgZ3JvdXAgc2V0CisjIHdoZW4gbG9nZ2luZyBpbiBvbiB0aGUgY29uc29sZSAoYXMgZGV0ZXJtaW5lZCBieSB0aGUgQ09OU09MRQorIyBzZXR0aW5nKS4gIERlZmF1bHQgaXMgbm9uZS4KKyMKKyMgVXNlIHdpdGggY2F1dGlvbiAtIGl0IGlzIHBvc3NpYmxlIGZvciB1c2VycyB0byBnYWluIHBlcm1hbmVudAorIyBhY2Nlc3MgdG8gdGhlc2UgZ3JvdXBzLCBldmVuIHdoZW4gbm90IGxvZ2dlZCBpbiBvbiB0aGUgY29uc29sZS4KKyMgSG93IHRvIGRvIGl0IGlzIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIuLi4KKyMKKyNDT05TT0xFX0dST1VQUwkJZmxvcHB5OmF1ZGlvOmNkcm9tCisKKyMKKyMgU2hvdWxkIGxvZ2luIGJlIGFsbG93ZWQgaWYgd2UgY2FuJ3QgY2QgdG8gdGhlIGhvbWUgZGlyZWN0b3J5PworIyBEZWZhdWx0IGluIG5vLgorIworREVGQVVMVF9IT01FCXllcworCisjCisjIElmIHRoaXMgZmlsZSBleGlzdHMgYW5kIGlzIHJlYWRhYmxlLCBsb2dpbiBlbnZpcm9ubWVudCB3aWxsIGJlCisjIHJlYWQgZnJvbSBpdC4gIEV2ZXJ5IGxpbmUgc2hvdWxkIGJlIGluIHRoZSBmb3JtIG5hbWU9dmFsdWUuCisjCisjRU5WSVJPTl9GSUxFCS9ldGMvZW52aXJvbm1lbnQKKworIworIyBJZiBkZWZpbmVkLCB0aGlzIGNvbW1hbmQgaXMgcnVuIHdoZW4gcmVtb3ZpbmcgYSB1c2VyLgorIyBJdCBzaG91bGQgcmVtb3ZlIGFueSBhdC9jcm9uL3ByaW50IGpvYnMgZXRjLiBvd25lZCBieQorIyB0aGUgdXNlciB0byBiZSByZW1vdmVkIChwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50KS4KKyMKKyNVU0VSREVMX0NNRAkvdXNyL3NiaW4vdXNlcmRlbF9sb2NhbAorCisjCisjIEVuYWJsZSBzZXR0aW5nIG9mIHRoZSB1bWFzayBncm91cCBiaXRzIHRvIGJlIHRoZSBzYW1lIGFzIG93bmVyIGJpdHMKKyMgKGV4YW1wbGVzOiAwMjIgLT4gMDAyLCAwNzcgLT4gMDA3KSBmb3Igbm9uLXJvb3QgdXNlcnMsIGlmIHRoZSB1aWQgaXMKKyMgdGhlIHNhbWUgYXMgZ2lkLCBhbmQgdXNlcm5hbWUgaXMgdGhlIHNhbWUgYXMgdGhlIHByaW1hcnkgZ3JvdXAgbmFtZS4KKyMKKyMgVGhpcyBhbHNvIGVuYWJsZXMgdXNlcmRlbCB0byByZW1vdmUgdXNlciBncm91cHMgaWYgbm8gbWVtYmVycyBleGlzdC4KKyMKK1VTRVJHUk9VUFNfRU5BQiB5ZXMKKworIworIyBJZiBzZXQgdG8gYSBub24tbnVsIG51bWJlciwgdGhlIHNoYWRvdyB1dGlsaXRpZXMgd2lsbCBtYWtlIHN1cmUgdGhhdAorIyBncm91cHMgbmV2ZXIgaGF2ZSBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2YgdXNlcnMgb24gb25lIGxpbmUuCisjIFRoaXMgcGVybWl0IHRvIHN1cHBvcnQgc3BsaXQgZ3JvdXBzIChncm91cHMgc3BsaXQgaW50byBtdWx0aXBsZSBsaW5lcywKKyMgd2l0aCB0aGUgc2FtZSBncm91cCBJRCwgdG8gYXZvaWQgbGltaXRhdGlvbiBvZiB0aGUgbGluZSBsZW5ndGggaW4gdGhlCisjIGdyb3VwIGZpbGUpLgorIworIyAwIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGFuZCBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuCisjCisjTUFYX01FTUJFUlNfUEVSX0dST1VQCTAKKworIworIyBJZiB1c2VyYWRkIHNob3VsZCBjcmVhdGUgaG9tZSBkaXJlY3RvcmllcyBmb3IgdXNlcnMgYnkgZGVmYXVsdCAobm9uCisjIHN5c3RlbSB1c2VycyBvbmx5KQorIyBUaGlzIG9wdGlvbiBpcyBvdmVycmlkZGVuIHdpdGggdGhlIC1NIG9yIC1tIGZsYWdzIG9uIHRoZSB1c2VyYWRkIGNvbW1hbmQKKyMgbGluZS4KKyMKK0NSRUFURV9IT01FICAgICB5ZXMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2xvZ2luX2RlZnNfcGFtLnNlZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9sb2dpbl9kZWZzX3BhbS5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGExZjNiZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9sb2dpbl9kZWZzX3BhbS5zZWQKQEAgLTAsMCArMSwzMiBAQAorL15GQUlMTE9HX0VOQUIvYiBjb21tZW50CisvXkxBU1RMT0dfRU5BQi9iIGNvbW1lbnQKKy9eTUFJTF9DSEVDS19FTkFCL2IgY29tbWVudAorL15PQlNDVVJFX0NIRUNLU19FTkFCL2IgY29tbWVudAorL15QT1JUVElNRV9DSEVDS1NfRU5BQi9iIGNvbW1lbnQKKy9eUVVPVEFTX0VOQUIvYiBjb21tZW50CisvXk1PVERfRklMRS9iIGNvbW1lbnQKKy9eRlRNUF9GSUxFL2IgY29tbWVudAorL15OT0xPR0lOU19GSUxFL2IgY29tbWVudAorL15FTlZfSFovYiBjb21tZW50CisvXkVOVl9UWi9iIGNvbW1lbnQKKy9eUEFTU19NSU5fTEVOL2IgY29tbWVudAorL15TVV9XSEVFTF9PTkxZL2IgY29tbWVudAorL15DUkFDS0xJQl9ESUNUUEFUSC9iIGNvbW1lbnQKKy9eUEFTU19DSEFOR0VfVFJJRVMvYiBjb21tZW50CisvXlBBU1NfQUxXQVlTX1dBUk4vYiBjb21tZW50CisvXlBBU1NfTUFYX0xFTi9iIGNvbW1lbnQKKy9eUEFTU19NSU5fTEVOL2IgY29tbWVudAorL15DSEZOX0FVVEgvYiBjb21tZW50CisvXkNIU0hfQVVUSC9iIGNvbW1lbnQKKy9eSVNTVUVfRklMRS9iIGNvbW1lbnQKKy9eTE9HSU5fU1RSSU5HL2IgY29tbWVudAorL15VTElNSVQvYiBjb21tZW50CisvXkVOVklST05fRklMRS9iIGNvbW1lbnQKKworYiBleGl0CisKKzogY29tbWVudAorICBzOl46IzoKKworOiBleGl0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaGZuIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2NoZm4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFmNzY5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaGZuCkBAIC0wLDAgKzEsMTQgQEAKKyMKKyMgVGhlIFBBTSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBTaGFkb3cgYGNoZm4nIHNlcnZpY2UKKyMKKworIyBUaGlzIGFsbG93cyByb290IHRvIGNoYW5nZSB1c2VyIGluZm9tYXRpb24gd2l0aG91dCBiZWluZworIyBwcm9tcHRlZCBmb3IgYSBwYXNzd29yZAorYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisKKyMgVGhlIHN0YW5kYXJkIFVuaXggYXV0aGVudGljYXRpb24gbW9kdWxlcywgdXNlZCB3aXRoCisjIE5JUyAobWFuIG5zc3dpdGNoKSBhcyB3ZWxsIGFzIG5vcm1hbCAvZXRjL3Bhc3N3ZCBhbmQKKyMgL2V0Yy9zaGFkb3cgZW50cmllcy4KK2F1dGggICAgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hdXRoCithY2NvdW50ICAgIGluY2x1ZGUgICAgICBjb21tb24tYWNjb3VudAorc2Vzc2lvbiAgICBpbmNsdWRlICAgICAgY29tbW9uLXNlc3Npb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaHBhc3N3ZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaHBhc3N3ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTNlZmE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2NocGFzc3dkCkBAIC0wLDAgKzEsNCBAQAorIyBUaGUgUEFNIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIFNoYWRvdyAnY2hwYXNzd2QnIHNlcnZpY2UKKyMKKworcGFzc3dvcmQgICBpbmNsdWRlICAgICAgY29tbW9uLXBhc3N3b3JkCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvY2hzaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaHNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYjE2OWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvY2hzaApAQCAtMCwwICsxLDE5IEBACisjCisjIFRoZSBQQU0gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgU2hhZG93IGBjaHNoJyBzZXJ2aWNlCisjCisKKyMgVGhpcyB3aWxsIG5vdCBhbGxvdyBhIHVzZXIgdG8gY2hhbmdlIHRoZWlyIHNoZWxsIHVubGVzcworIyB0aGVpciBjdXJyZW50IG9uZSBpcyBsaXN0ZWQgaW4gL2V0Yy9zaGVsbHMuIFRoaXMga2VlcHMKKyMgYWNjb3VudHMgd2l0aCBzcGVjaWFsIHNoZWxscyBmcm9tIGNoYW5naW5nIHRoZW0uCithdXRoICAgICAgIHJlcXVpcmVkICAgcGFtX3NoZWxscy5zbworCisjIFRoaXMgYWxsb3dzIHJvb3QgdG8gY2hhbmdlIHVzZXIgc2hlbGwgd2l0aG91dCBiZWluZworIyBwcm9tcHRlZCBmb3IgYSBwYXNzd29yZAorYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisKKyMgVGhlIHN0YW5kYXJkIFVuaXggYXV0aGVudGljYXRpb24gbW9kdWxlcywgdXNlZCB3aXRoCisjIE5JUyAobWFuIG5zc3dpdGNoKSBhcyB3ZWxsIGFzIG5vcm1hbCAvZXRjL3Bhc3N3ZCBhbmQKKyMgL2V0Yy9zaGFkb3cgZW50cmllcy4KK2F1dGggICAgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hdXRoCithY2NvdW50ICAgIGluY2x1ZGUgICAgICBjb21tb24tYWNjb3VudAorc2Vzc2lvbiAgICBpbmNsdWRlICAgICAgY29tbW9uLXNlc3Npb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9sb2dpbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9sb2dpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzQwMDU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2xvZ2luCkBAIC0wLDAgKzEsODEgQEAKKyMKKyMgVGhlIFBBTSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBTaGFkb3cgYGxvZ2luJyBzZXJ2aWNlCisjCisKKyMgRW5mb3JjZSBhIG1pbmltYWwgZGVsYXkgaW4gY2FzZSBvZiBmYWlsdXJlIChpbiBtaWNyb3NlY29uZHMpLgorIyAoUmVwbGFjZXMgdGhlIGBGQUlMX0RFTEFZJyBzZXR0aW5nIGZyb20gbG9naW4uZGVmcykKKyMgTm90ZSB0aGF0IG90aGVyIG1vZHVsZXMgbWF5IHJlcXVpcmUgYW5vdGhlciBtaW5pbWFsIGRlbGF5LiAoZm9yIGV4YW1wbGUsCisjIHRvIGRpc2FibGUgYW55IGRlbGF5LCB5b3Ugc2hvdWxkIGFkZCB0aGUgbm9kZWxheSBvcHRpb24gdG8gcGFtX3VuaXgpCithdXRoICAgICAgIG9wdGlvbmFsICAgcGFtX2ZhaWxkZWxheS5zbyAgZGVsYXk9MzAwMDAwMAorCisjIE91dHB1dHMgYW4gaXNzdWUgZmlsZSBwcmlvciB0byBlYWNoIGxvZ2luIHByb21wdCAoUmVwbGFjZXMgdGhlCisjIElTU1VFX0ZJTEUgb3B0aW9uIGZyb20gbG9naW4uZGVmcykuIFVuY29tbWVudCBmb3IgdXNlCisjIGF1dGggICAgICAgcmVxdWlyZWQgICBwYW1faXNzdWUuc28gaXNzdWU9L2V0Yy9pc3N1ZQorCisjIERpc2FsbG93cyByb290IGxvZ2lucyBleGNlcHQgb24gdHR5J3MgbGlzdGVkIGluIC9ldGMvc2VjdXJldHR5CisjIChSZXBsYWNlcyB0aGUgYENPTlNPTEUnIHNldHRpbmcgZnJvbSBsb2dpbi5kZWZzKQorIyBOb3RlIHRoYXQgaXQgaXMgaW5jbHVkZWQgYXMgYSAicmVxdWlzaXRlIiBtb2R1bGUuIE5vIHBhc3N3b3JkIHByb21wdHMgd2lsbAorIyBiZSBkaXNwbGF5ZWQgaWYgdGhpcyBtb2R1bGUgZmFpbHMgdG8gYXZvaWQgaGF2aW5nIHRoZSByb290IHBhc3N3b3JkCisjIHRyYW5zbWl0dGVkIG9uIHVuc2VjdXJlIHR0eXMuCisjIFlvdSBjYW4gY2hhbmdlIGl0IHRvIGEgInJlcXVpcmVkIiBtb2R1bGUgaWYgeW91IHRoaW5rIGl0IHBlcm1pdHMgdG8KKyMgZ3Vlc3MgdmFsaWQgdXNlciBuYW1lcyBvZiB5b3VyIHN5c3RlbSAoaW52YWxpZCB1c2VyIG5hbWVzIGFyZSBjb25zaWRlcmVkCisjIGFzIHBvc3NpYmx5IGJlaW5nIHJvb3QpLgorYXV0aCAgICAgICBbc3VjY2Vzcz1vayBpZ25vcmU9aWdub3JlIHVzZXJfdW5rbm93bj1pZ25vcmUgZGVmYXVsdD1kaWVdICBwYW1fc2VjdXJldHR5LnNvCisKKyMgRGlzYWxsb3dzIG90aGVyIHRoYW4gcm9vdCBsb2dpbnMgd2hlbiAvZXRjL25vbG9naW4gZXhpc3RzCisjIChSZXBsYWNlcyB0aGUgYE5PTE9HSU5TX0ZJTEUnIG9wdGlvbiBmcm9tIGxvZ2luLmRlZnMpCithdXRoICAgICAgIHJlcXVpc2l0ZSAgcGFtX25vbG9naW4uc28KKworIyBUaGlzIG1vZHVsZSBwYXJzZXMgZW52aXJvbm1lbnQgY29uZmlndXJhdGlvbiBmaWxlKHMpCisjIGFuZCBhbHNvIGFsbG93cyB5b3UgdG8gdXNlIGFuIGV4dGVuZGVkIGNvbmZpZworIyBmaWxlIC9ldGMvc2VjdXJpdHkvcGFtX2Vudi5jb25mLgorIyAKKyMgcGFyc2luZyAvZXRjL2Vudmlyb25tZW50IG5lZWRzICJyZWFkZW52PTEiCitzZXNzaW9uICAgICAgIHJlcXVpcmVkICAgcGFtX2Vudi5zbyByZWFkZW52PTEKKworIyBTdGFuZGFyZCBVbip4IGF1dGhlbnRpY2F0aW9uLgorYXV0aCAgICAgICBpbmNsdWRlICAgICAgY29tbW9uLWF1dGgKKworIyBUaGlzIGFsbG93cyBjZXJ0YWluIGV4dHJhIGdyb3VwcyB0byBiZSBncmFudGVkIHRvIGEgdXNlcgorIyBiYXNlZCBvbiB0aGluZ3MgbGlrZSB0aW1lIG9mIGRheSwgdHR5LCBzZXJ2aWNlLCBhbmQgdXNlci4KKyMgUGxlYXNlIGVkaXQgL2V0Yy9zZWN1cml0eS9ncm91cC5jb25mIHRvIGZpdCB5b3VyIG5lZWRzCisjIChSZXBsYWNlcyB0aGUgYENPTlNPTEVfR1JPVVBTJyBvcHRpb24gaW4gbG9naW4uZGVmcykKK2F1dGggICAgICAgb3B0aW9uYWwgICBwYW1fZ3JvdXAuc28KKworIyBVbmNvbW1lbnQgYW5kIGVkaXQgL2V0Yy9zZWN1cml0eS90aW1lLmNvbmYgaWYgeW91IG5lZWQgdG8gc2V0CisjIHRpbWUgcmVzdHJhaW5zdCBvbiBsb2dpbnMuCisjIChSZXBsYWNlcyB0aGUgYFBPUlRUSU1FX0NIRUNLU19FTkFCJyBvcHRpb24gZnJvbSBsb2dpbi5kZWZzCisjIGFzIHdlbGwgYXMgL2V0Yy9wb3J0dGltZSkKKyMgYWNjb3VudCAgICByZXF1aXNpdGUgIHBhbV90aW1lLnNvCisKKyMgVW5jb21tZW50IGFuZCBlZGl0IC9ldGMvc2VjdXJpdHkvYWNjZXNzLmNvbmYgaWYgeW91IG5lZWQgdG8KKyMgc2V0IGFjY2VzcyBsaW1pdHMuCisjIChSZXBsYWNlcyAvZXRjL2xvZ2luLmFjY2VzcyBmaWxlKQorIyBhY2NvdW50ICByZXF1aXJlZCAgICAgICBwYW1fYWNjZXNzLnNvCisKKyMgU2V0cyB1cCB1c2VyIGxpbWl0cyBhY2NvcmRpbmcgdG8gL2V0Yy9zZWN1cml0eS9saW1pdHMuY29uZgorIyAoUmVwbGFjZXMgdGhlIHVzZSBvZiAvZXRjL2xpbWl0cyBpbiBvbGQgbG9naW4pCitzZXNzaW9uICAgIHJlcXVpcmVkICAgcGFtX2xpbWl0cy5zbworCisjIFByaW50cyB0aGUgbGFzdCBsb2dpbiBpbmZvIHVwb24gc3VjY2VzZnVsIGxvZ2luCisjIChSZXBsYWNlcyB0aGUgYExBU1RMT0dfRU5BQicgb3B0aW9uIGZyb20gbG9naW4uZGVmcykKK3Nlc3Npb24gICAgb3B0aW9uYWwgICBwYW1fbGFzdGxvZy5zbworCisjIFByaW50cyB0aGUgbW90ZCB1cG9uIHN1Y2Nlc2Z1bCBsb2dpbgorIyAoUmVwbGFjZXMgdGhlIGBNT1REX0ZJTEUnIG9wdGlvbiBpbiBsb2dpbi5kZWZzKQorc2Vzc2lvbiAgICBvcHRpb25hbCAgIHBhbV9tb3RkLnNvCisKKyMgUHJpbnRzIHRoZSBzdGF0dXMgb2YgdGhlIHVzZXIncyBtYWlsYm94IHVwb24gc3VjY2VzZnVsIGxvZ2luCisjIChSZXBsYWNlcyB0aGUgYE1BSUxfQ0hFQ0tfRU5BQicgb3B0aW9uIGZyb20gbG9naW4uZGVmcykuIAorIworIyBUaGlzIGFsc28gZGVmaW5lcyB0aGUgTUFJTCBlbnZpcm9ubWVudCB2YXJpYWJsZQorIyBIb3dldmVyLCB1c2VyZGVsIGFsc28gbmVlZHMgTUFJTF9ESVIgYW5kIE1BSUxfRklMRSB2YXJpYWJsZXMKKyMgaW4gL2V0Yy9sb2dpbi5kZWZzIHRvIG1ha2Ugc3VyZSB0aGF0IHJlbW92aW5nIGEgdXNlciAKKyMgYWxzbyByZW1vdmVzIHRoZSB1c2VyJ3MgbWFpbCBzcG9vbCBmaWxlLgorIyBTZWUgY29tbWVudHMgaW4gL2V0Yy9sb2dpbi5kZWZzCitzZXNzaW9uICAgIG9wdGlvbmFsICAgcGFtX21haWwuc28gc3RhbmRhcmQKKworIyBTdGFuZGFyZCBVbip4IGFjY291bnQgYW5kIHNlc3Npb24KK2FjY291bnQgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hY2NvdW50CitwYXNzd29yZCAgIGluY2x1ZGUgICAgICBjb21tb24tcGFzc3dvcmQKK3Nlc3Npb24gICAgaW5jbHVkZSAgICAgIGNvbW1vbi1zZXNzaW9uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvbmV3dXNlcnMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvbmV3dXNlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFhM2RkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9uZXd1c2VycwpAQCAtMCwwICsxLDQgQEAKKyMgVGhlIFBBTSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBTaGFkb3cgJ25ld3VzZXJzJyBzZXJ2aWNlCisjCisKK3Bhc3N3b3JkICAgaW5jbHVkZSAgICAgIGNvbW1vbi1wYXNzd29yZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL3Bhc3N3ZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9wYXNzd2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUzNDk5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9wYXNzd2QKQEAgLTAsMCArMSw1IEBACisjCisjIFRoZSBQQU0gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgU2hhZG93IGBwYXNzd2QnIHNlcnZpY2UKKyMKKworcGFzc3dvcmQgICBpbmNsdWRlICAgICAgY29tbW9uLXBhc3N3b3JkCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvc3UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvc3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1OTBhMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9zdQpAQCAtMCwwICsxLDU3IEBACisjCisjIFRoZSBQQU0gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgU2hhZG93IGBzdScgc2VydmljZQorIworCisjIFRoaXMgYWxsb3dzIHJvb3QgdG8gc3Ugd2l0aG91dCBwYXNzd29yZHMgKG5vcm1hbCBvcGVyYXRpb24pCithdXRoICAgICAgIHN1ZmZpY2llbnQgcGFtX3Jvb3Rvay5zbworCisjIFVuY29tbWVudCB0aGlzIHRvIGZvcmNlIHVzZXJzIHRvIGJlIGEgbWVtYmVyIG9mIGdyb3VwIHJvb3QKKyMgYmVmb3JlIHRoZXkgY2FuIHVzZSBgc3UnLiBZb3UgY2FuIGFsc28gYWRkICJncm91cD1mb28iCisjIHRvIHRoZSBlbmQgb2YgdGhpcyBsaW5lIGlmIHlvdSB3YW50IHRvIHVzZSBhIGdyb3VwIG90aGVyCisjIHRoYW4gdGhlIGRlZmF1bHQgInJvb3QiIChidXQgdGhpcyBtYXkgaGF2ZSBzaWRlIGVmZmVjdCBvZgorIyBkZW55aW5nICJyb290IiB1c2VyLCB1bmxlc3Mgc2hlJ3MgYSBtZW1iZXIgb2YgImZvbyIgb3IgZXhwbGljaXRseQorIyBwZXJtaXR0ZWQgZWFybGllciBieSBlLmcuICJzdWZmaWNpZW50IHBhbV9yb290b2suc28iKS4KKyMgKFJlcGxhY2VzIHRoZSBgU1VfV0hFRUxfT05MWScgb3B0aW9uIGZyb20gbG9naW4uZGVmcykKKyMgYXV0aCAgICAgICByZXF1aXJlZCAgIHBhbV93aGVlbC5zbworCisjIFVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50IHdoZWVsIG1lbWJlcnMgdG8gYmUgYWJsZSB0bworIyBzdSB3aXRob3V0IGEgcGFzc3dvcmQuCisjIGF1dGggICAgICAgc3VmZmljaWVudCBwYW1fd2hlZWwuc28gdHJ1c3QKKworIyBVbmNvbW1lbnQgdGhpcyBpZiB5b3Ugd2FudCBtZW1iZXJzIG9mIGEgc3BlY2lmaWMgZ3JvdXAgdG8gbm90CisjIGJlIGFsbG93ZWQgdG8gdXNlIHN1IGF0IGFsbC4KKyMgYXV0aCAgICAgICByZXF1aXJlZCAgIHBhbV93aGVlbC5zbyBkZW55IGdyb3VwPW5vc3UKKworIyBVbmNvbW1lbnQgYW5kIGVkaXQgL2V0Yy9zZWN1cml0eS90aW1lLmNvbmYgaWYgeW91IG5lZWQgdG8gc2V0CisjIHRpbWUgcmVzdHJhaW5zdCBvbiBzdSB1c2FnZS4KKyMgKFJlcGxhY2VzIHRoZSBgUE9SVFRJTUVfQ0hFQ0tTX0VOQUInIG9wdGlvbiBmcm9tIGxvZ2luLmRlZnMKKyMgYXMgd2VsbCBhcyAvZXRjL3BvcnR0aW1lKQorIyBhY2NvdW50ICAgIHJlcXVpc2l0ZSAgcGFtX3RpbWUuc28KKworIyBUaGlzIG1vZHVsZSBwYXJzZXMgZW52aXJvbm1lbnQgY29uZmlndXJhdGlvbiBmaWxlKHMpCisjIGFuZCBhbHNvIGFsbG93cyB5b3UgdG8gdXNlIGFuIGV4dGVuZGVkIGNvbmZpZworIyBmaWxlIC9ldGMvc2VjdXJpdHkvcGFtX2Vudi5jb25mLgorIyAKKyMgcGFyc2luZyAvZXRjL2Vudmlyb25tZW50IG5lZWRzICJyZWFkZW52PTEiCitzZXNzaW9uICAgICAgIHJlcXVpcmVkICAgcGFtX2Vudi5zbyByZWFkZW52PTEKKworIyBEZWZpbmVzIHRoZSBNQUlMIGVudmlyb25tZW50IHZhcmlhYmxlCisjIEhvd2V2ZXIsIHVzZXJkZWwgYWxzbyBuZWVkcyBNQUlMX0RJUiBhbmQgTUFJTF9GSUxFIHZhcmlhYmxlcworIyBpbiAvZXRjL2xvZ2luLmRlZnMgdG8gbWFrZSBzdXJlIHRoYXQgcmVtb3ZpbmcgYSB1c2VyIAorIyBhbHNvIHJlbW92ZXMgdGhlIHVzZXIncyBtYWlsIHNwb29sIGZpbGUuCisjIFNlZSBjb21tZW50cyBpbiAvZXRjL2xvZ2luLmRlZnMKKyMKKyMgIm5vcGVuIiBzdGFuZHMgdG8gYXZvaWQgcmVwb3J0aW5nIG5ldyBtYWlsIHdoZW4gc3UnaW5nIHRvIGFub3RoZXIgdXNlcgorc2Vzc2lvbiAgICBvcHRpb25hbCAgIHBhbV9tYWlsLnNvIG5vcGVuCisKKyMgU2V0cyB1cCB1c2VyIGxpbWl0cywgcGxlYXNlIHVuY29tbWVudCBhbmQgcmVhZCAvZXRjL3NlY3VyaXR5L2xpbWl0cy5jb25mCisjIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCisjIChSZXBsYWNlcyB0aGUgdXNlIG9mIC9ldGMvbGltaXRzIGluIG9sZCBsb2dpbikKKyMgc2Vzc2lvbiAgICByZXF1aXJlZCAgIHBhbV9saW1pdHMuc28KKworIyBUaGUgc3RhbmRhcmQgVW5peCBhdXRoZW50aWNhdGlvbiBtb2R1bGVzLCB1c2VkIHdpdGgKKyMgTklTIChtYW4gbnNzd2l0Y2gpIGFzIHdlbGwgYXMgbm9ybWFsIC9ldGMvcGFzc3dkIGFuZAorIyAvZXRjL3NoYWRvdyBlbnRyaWVzLgorYXV0aCAgICAgICBpbmNsdWRlICAgICAgY29tbW9uLWF1dGgKK2FjY291bnQgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hY2NvdW50CitzZXNzaW9uICAgIGluY2x1ZGUgICAgICBjb21tb24tc2Vzc2lvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3NlY3VyZXR0eSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zZWN1cmV0dHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJlMzQxYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zZWN1cmV0dHkKQEAgLTAsMCArMSwyMzggQEAKKyMgL2V0Yy9zZWN1cmV0dHk6IGxpc3Qgb2YgdGVybWluYWxzIG9uIHdoaWNoIHJvb3QgaXMgYWxsb3dlZCB0byBsb2dpbi4KKyMgU2VlIHNlY3VyZXR0eSg1KSBhbmQgbG9naW4oMSkuCitjb25zb2xlCisKKyMgU3RhbmRhcmQgc2VyaWFsIHBvcnRzCit0dHlTMAordHR5UzEKK3R0eVMyCit0dHlTMworCisjIEFSTSBBTUJBIFNvQ3MKK3R0eUFNMAordHR5QU0xCit0dHlBTTIKK3R0eUFNMwordHR5QU1BMAordHR5QU1BMQordHR5QU1BMgordHR5QU1BMworCisjIFFDT00gU29jcwordHR5SFNMMAordHR5SFNMMQordHR5SFNMMgordHR5SFNMMwordHR5TVNNMAordHR5TVNNMQordHR5TVNNMgorCisjIFNhbXN1bmcgQVJNIFNvQ3MKK3R0eVNBQzAKK3R0eVNBQzEKK3R0eVNBQzIKK3R0eVNBQzMKKworIyBTVE0gU29DcwordHR5QVMwCit0dHlBUzEKK3R0eUFTMgordHR5QVMzCisKKyMgVEkgT01BUCBTb0NzCit0dHlPMAordHR5TzEKK3R0eU8yCit0dHlPMworCisjIFhpbGlueCBaeW5xIFNvQwordHR5UFMwCit0dHlQUzEKKworIyBVU0IgZG9uZ2xlcwordHR5VVNCMAordHR5VVNCMQordHR5VVNCMgorCisjIFVTQiBzZXJpYWwgZ2FkZ2V0Cit0dHlHUzAKKworIyBQb3dlck1hYwordHR5UFowCit0dHlQWjEKK3R0eVBaMgordHR5UFozCisKKyMgRW1iZWRkZWQgTVBDIHBsYXRmb3JtcwordHR5UFNDMAordHR5UFNDMQordHR5UFNDMgordHR5UFNDMwordHR5UFNDNAordHR5UFNDNQorCisjIFBBLVJJU0MgbXV4IHBvcnRzCit0dHlCMAordHR5QjEKKworIyBTdGFuZGFyZCBoeXBlcnZpc29yIHZpcnR1YWwgY29uc29sZQoraHZjMAorCisjIE9sZHN0eWxlIFhlbiBjb25zb2xlCit4dmMwCisKKyMgU3RhbmRhcmQgY29uc29sZXMKK3R0eTEKK3R0eTIKK3R0eTMKK3R0eTQKK3R0eTUKK3R0eTYKK3R0eTcKK3R0eTgKK3R0eTkKK3R0eTEwCit0dHkxMQordHR5MTIKK3R0eTEzCit0dHkxNAordHR5MTUKK3R0eTE2Cit0dHkxNwordHR5MTgKK3R0eTE5Cit0dHkyMAordHR5MjEKK3R0eTIyCit0dHkyMwordHR5MjQKK3R0eTI1Cit0dHkyNgordHR5MjcKK3R0eTI4Cit0dHkyOQordHR5MzAKK3R0eTMxCit0dHkzMgordHR5MzMKK3R0eTM0Cit0dHkzNQordHR5MzYKK3R0eTM3Cit0dHkzOAordHR5MzkKK3R0eTQwCit0dHk0MQordHR5NDIKK3R0eTQzCit0dHk0NAordHR5NDUKK3R0eTQ2Cit0dHk0NwordHR5NDgKK3R0eTQ5Cit0dHk1MAordHR5NTEKK3R0eTUyCit0dHk1MwordHR5NTQKK3R0eTU1Cit0dHk1NgordHR5NTcKK3R0eTU4Cit0dHk1OQordHR5NjAKK3R0eTYxCit0dHk2MgordHR5NjMKKworIyBMb2NhbCBYIGRpc3BsYXlzIChhbGxvd3MgZW1wdHkgcGFzc3dvcmRzIHdpdGggcGFtX3VuaXgncyBudWxsb2tfc2VjdXJlKQorcHRzLzAKK3B0cy8xCitwdHMvMgorcHRzLzMKKworIyBFbWJlZGRlZCBGcmVlc2NhbGUgaS5NWCBwb3J0cwordHR5bXhjMAordHR5bXhjMQordHR5bXhjMgordHR5bXhjMwordHR5bXhjNAordHR5bXhjNQorCisjIEZyZWVzY2FsZSBscHVhcnQgcG9ydHMKK3R0eUxQMAordHR5TFAxCit0dHlMUDIKK3R0eUxQMwordHR5TFA0Cit0dHlMUDUKKworIyBTdGFuZGFyZCBzZXJpYWwgcG9ydHMsIHdpdGggZGV2ZnMKK3R0cy8wCit0dHMvMQorCisjIFN0YW5kYXJkIGNvbnNvbGVzLCB3aXRoIGRldmZzCit2Yy8xCit2Yy8yCit2Yy8zCit2Yy80Cit2Yy81Cit2Yy82Cit2Yy83Cit2Yy84Cit2Yy85Cit2Yy8xMAordmMvMTEKK3ZjLzEyCit2Yy8xMwordmMvMTQKK3ZjLzE1Cit2Yy8xNgordmMvMTcKK3ZjLzE4Cit2Yy8xOQordmMvMjAKK3ZjLzIxCit2Yy8yMgordmMvMjMKK3ZjLzI0Cit2Yy8yNQordmMvMjYKK3ZjLzI3Cit2Yy8yOAordmMvMjkKK3ZjLzMwCit2Yy8zMQordmMvMzIKK3ZjLzMzCit2Yy8zNAordmMvMzUKK3ZjLzM2Cit2Yy8zNwordmMvMzgKK3ZjLzM5Cit2Yy80MAordmMvNDEKK3ZjLzQyCit2Yy80MwordmMvNDQKK3ZjLzQ1Cit2Yy80NgordmMvNDcKK3ZjLzQ4Cit2Yy80OQordmMvNTAKK3ZjLzUxCit2Yy81MgordmMvNTMKK3ZjLzU0Cit2Yy81NQordmMvNTYKK3ZjLzU3Cit2Yy81OAordmMvNTkKK3ZjLzYwCit2Yy82MQordmMvNjIKK3ZjLzYzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2hhZG93LTQuMS4zLWRvdHMtaW4tdXNlcm5hbWVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3NoYWRvdy00LjEuMy1kb3RzLWluLXVzZXJuYW1lcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2JiMGE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3NoYWRvdy00LjEuMy1kb3RzLWluLXVzZXJuYW1lcy5wYXRjaApAQCAtMCwwICsxLDI3IEBACisjIGNvbW1pdCBtZXNzYWdlIGNvcGllZCBmcm9tIG9wZW5lbWJlZGRlZDoKKyMgICAgY29tbWl0IDI0NmM4MDYzN2IxMzVmM2ExMTNkMzE5YjE2MzQyMmY5ODE3NGVlNmMKKyMgICAgQXV0aG9yOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyAgICBEYXRlOiAgIFdlZCBKdW4gOSAxMzozNzowMyAyMDEwIC0wNzAwCisjCisjICAgIHNoYWRvdy00LjEuNC4yOiBBZGQgcGF0Y2hlcyB0byBzdXBwb3J0IGRvdHMgaW4gbG9naW4gaWQuCisjICAgIAorIyAgICBTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIworIyBjb21tZW50IGFkZGVkIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wOC0xMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBzaGFkb3ctNC4xLjQuMi9saWJtaXNjL2Noa25hbWUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNoYWRvdy00LjEuNC4yLm9yaWcvbGlibWlzYy9jaGtuYW1lLmMJMjAwOS0wNC0yOCAxMjoxNDowNC4wMDAwMDAwMDAgLTA3MDAKKysrKyBzaGFkb3ctNC4xLjQuMi9saWJtaXNjL2Noa25hbWUuYwkyMDEwLTA2LTAzIDE3OjQzOjIwLjYzODk3Mzg1NyAtMDcwMAorQEAgLTYxLDYgKzYxLDcgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfbmFtZSAoY29uc3QgY2hhciAqbgorIAkJICAgICAgKCAoJzAnIDw9ICpuYW1lKSAmJiAoJzknID49ICpuYW1lKSApIHx8CisgCQkgICAgICAoJ18nID09ICpuYW1lKSB8fAorIAkJICAgICAgKCctJyA9PSAqbmFtZSkgfHwKKysJCSAgICAgICgnLicgPT0gKm5hbWUpIHx8CisgCQkgICAgICAoICgnJCcgPT0gKm5hbWUpICYmICgnXDAnID09ICoobmFtZSArIDEpKSApCisgCQkgICAgICkpIHsKKyAJCQlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2hhZG93LXVwZGF0ZS1wYW0tY29uZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zaGFkb3ctdXBkYXRlLXBhbS1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZjgwNDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2hhZG93LXVwZGF0ZS1wYW0tY29uZi5wYXRjaApAQCAtMCwwICsxLDkxIEBACitUaGUgc3lzdGVtLWF1dGggaW4gdGhlIGNvbmZpZ3VyZSBmaWxlcyBpcyBmcm9tIEZlZG9yYSB3aGljaCBwdXQgYWxsIHRoZSA0IHBhbSB0eXBlIHJ1bGVzCitpbiBvbmUgZmlsZS4KK0luIHlvY3RvIGl0IG9iZXkgdGhlIHdheSB3aXRoIERlYmlhbi9VYnVudHUsIGFuZCB0aGUgbmFtZXMgYXJlIGNvbW1vbi1hdXRoLCBjb21tb24tYWNjb3VudCwKK2NvbW1vbi1wYXNzd29yZCBhbmQgY29tbW9uLXNlc3Npb24uCitTbyB1cGRhdGUgdGhlbSB3aXRoIG9lIHdheS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthbmcgS2FpIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC1OdXIgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvY2hhZ2Ugc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2NoYWdlCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvY2hhZ2UJMjAxMS0wNy0yMCAxOTowMjoyNy4zODQ4NDQ5NTggKzA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvY2hhZ2UJMjAxMS0wNy0yMCAxOTowMzowOC45NjQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2NoZ3Bhc3N3ZCBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvY2hncGFzc3dkCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvY2hncGFzc3dkCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2NoZ3Bhc3N3ZAkyMDExLTA3LTIwIDE5OjAzOjI2LjU0NDg0NDk1OCArMDgwMAorQEAgLTEsNCArMSw0IEBACisgIyVQQU0tMS4wCisgYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisgYWNjb3VudAkJcmVxdWlyZWQJcGFtX3Blcm1pdC5zbworLXBhc3N3b3JkCWluY2x1ZGUJCXN5c3RlbS1hdXRoCisrcGFzc3dvcmQJaW5jbHVkZQkJY29tbW9uLXBhc3N3b3JkCitkaWZmIC1OdXIgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBhZGQgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2dyb3VwYWRkCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBhZGQJMjAxMS0wNy0yMCAxOTowMjoyNy4zODQ4NDQ5NTggKzA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvZ3JvdXBhZGQJMjAxMS0wNy0yMCAxOTowNDowOC4xMjQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2dyb3VwZGVsIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9ncm91cGRlbAorLS0tIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2dyb3VwZGVsCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2dyb3VwZGVsCTIwMTEtMDctMjAgMTk6MDQ6MjYuMTE0ODQ0OTU4ICswODAwCitAQCAtMSw0ICsxLDQgQEAKKyAjJVBBTS0xLjAKKyBhdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKyBhY2NvdW50CQlyZXF1aXJlZAlwYW1fcGVybWl0LnNvCistcGFzc3dvcmQJaW5jbHVkZQkJc3lzdGVtLWF1dGgKKytwYXNzd29yZAlpbmNsdWRlCQljb21tb24tcGFzc3dvcmQKK2RpZmYgLU51ciBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9ncm91cG1lbXMgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2dyb3VwbWVtcworLS0tIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2dyb3VwbWVtcwkyMDExLTA3LTIwIDE5OjAyOjI3LjM4NDg0NDk1OCArMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9ncm91cG1lbXMJMjAxMS0wNy0yMCAxOTowNDozNS4wNzQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2dyb3VwbW9kIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9ncm91cG1vZAorLS0tIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2dyb3VwbW9kCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2dyb3VwbW9kCTIwMTEtMDctMjAgMTk6MDQ6NDQuODY0ODQ0OTU4ICswODAwCitAQCAtMSw0ICsxLDQgQEAKKyAjJVBBTS0xLjAKKyBhdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKyBhY2NvdW50CQlyZXF1aXJlZAlwYW1fcGVybWl0LnNvCistcGFzc3dvcmQJaW5jbHVkZQkJc3lzdGVtLWF1dGgKKytwYXNzd29yZAlpbmNsdWRlCQljb21tb24tcGFzc3dvcmQKK2RpZmYgLU51ciBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy91c2VyYWRkIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC91c2VyYWRkCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvdXNlcmFkZAkyMDExLTA3LTIwIDE5OjAyOjI3LjM4NDg0NDk1OCArMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC91c2VyYWRkCTIwMTEtMDctMjAgMTk6MDc6MjYuMjQ0ODQ0OTU4ICswODAwCitAQCAtMSw0ICsxLDQgQEAKKyAjJVBBTS0xLjAKKyBhdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKyBhY2NvdW50CQlyZXF1aXJlZAlwYW1fcGVybWl0LnNvCistcGFzc3dvcmQJaW5jbHVkZQkJc3lzdGVtLWF1dGgKKytwYXNzd29yZAlpbmNsdWRlCQljb21tb24tcGFzc3dvcmQKK2RpZmYgLU51ciBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy91c2VyZGVsIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC91c2VyZGVsCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvdXNlcmRlbAkyMDExLTA3LTIwIDE5OjAyOjI3LjM4NDg0NDk1OCArMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC91c2VyZGVsCTIwMTEtMDctMjAgMTk6MDc6MzUuNzM0ODQ0OTU4ICswODAwCitAQCAtMSw0ICsxLDQgQEAKKyAjJVBBTS0xLjAKKyBhdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKyBhY2NvdW50CQlyZXF1aXJlZAlwYW1fcGVybWl0LnNvCistcGFzc3dvcmQJaW5jbHVkZQkJc3lzdGVtLWF1dGgKKytwYXNzd29yZAlpbmNsdWRlCQljb21tb24tcGFzc3dvcmQKK2RpZmYgLU51ciBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy91c2VybW9kIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC91c2VybW9kCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvdXNlcm1vZAkyMDExLTA3LTIwIDE5OjAyOjI3LjM4NDg0NDk1OCArMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC91c2VybW9kCTIwMTEtMDctMjAgMTk6MDc6NDIuMDI0ODQ0OTU4ICswODAwCitAQCAtMSw0ICsxLDQgQEAKKyAjJVBBTS0xLjAKKyBhdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKyBhY2NvdW50CQlyZXF1aXJlZAlwYW1fcGVybWl0LnNvCistcGFzc3dvcmQJaW5jbHVkZQkJc3lzdGVtLWF1dGgKKytwYXNzd29yZAlpbmNsdWRlCQljb21tb24tcGFzc3dvcmQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy91c2VybW9kLWZpeC1jb21waWxhdGlvbi1mYWlsdXJlLXdpdGgtc3ViaWRzLWRpc2FibGVkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3VzZXJtb2QtZml4LWNvbXBpbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdkYzE1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy91c2VybW9kLWZpeC1jb21waWxhdGlvbi1mYWlsdXJlLXdpdGgtc3ViaWRzLWRpc2FibGVkLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCit1c2VybW9kOiBmaXggY29tcGlsYXRpb24gZmFpbHVyZSB3aXRoIHN1YmlkcyBkaXNhYmxlZAorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvdXNlcm1vZC5jIHwgICAgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvdXNlcm1vZC5jIGIvc3JjL3VzZXJtb2QuYworaW5kZXggZTdkNDM1MS4uNjg1YjUwYSAxMDA2NDQKKy0tLSBhL3NyYy91c2VybW9kLmMKKysrKyBiL3NyYy91c2VybW9kLmMKK0BAIC0xMzYwLDcgKzEzNjAsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkgICAgICAgICBQcm9nLCAodW5zaWduZWQgbG9uZykgdXNlcl9uZXdpZCk7CisgCQlleGl0IChFX1VJRF9JTl9VU0UpOworIAl9CistCisrI2lmZGVmIEVOQUJMRV9TVUJJRFMKKyAJaWYgKCAgICh2ZmxnIHx8IFZmbGcpCisgCSAgICAmJiAhaXNfc3ViX3VpZCkgeworIAkJZnByaW50ZiAoc3RkZXJyLAorQEAgLTEzNzYsNiArMTM3Niw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCSAgICAgICAgIFByb2csIHN1Yl9naWRfZGJuYW1lICgpLCAiLXciLCAiLVciKTsKKyAJCWV4aXQgKEVfVVNBR0UpOworIAl9CisrI2VuZGlmCisgfQorIAorIC8qCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy1zZWN1cmV0dHlfNC4yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LXNlY3VyZXR0eV80LjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzhmODg4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy1zZWN1cmV0dHlfNC4yLjEuYmIKQEAgLTAsMCArMSwzOCBAQAorU1VNTUFSWSA9ICJQcm92aWRlciBvZiB0aGUgbWFjaGluZSBzcGVjaWZpYyBzZWN1cmV0dHkgZmlsZSIKK1NFQ1RJT04gPSAiYmFzZSB1dGlscyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK1BSID0gInIzIgorCitTUkNfVVJJID0gImZpbGU6Ly9zZWN1cmV0dHkiCisKK1MgPSAiJHtXT1JLRElSfSIKKworIyBTaW5jZSBTRVJJQUxfQ09OU09MRVMgaXMgbGlrZWx5IHRvIGJlIHNldCBmcm9tIHRoZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24KK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK2RvX2luc3RhbGwgKCkgeworCSMgRW5zdXJlIHdlIGFkZCBhIHN1aXRhYmxlIHNlY3VyZXR0eSBmaWxlIHRvIHRoZSBwYWNrYWdlIHRoYXQgaGFzCisJIyBtb3N0IGNvbW1vbiBlbWJlZGRlZCBUVFlzIGRlZmluZWQuCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDQwMCAke1dPUktESVJ9L3NlY3VyZXR0eSAke0R9JHtzeXNjb25mZGlyfS9zZWN1cmV0dHkKKwlpZiBbICEgLXogIiR7U0VSSUFMX0NPTlNPTEVTfSIgXTsgdGhlbgorCQkjIE91ciBTRVJJQUxfQ09OU09MRVMgY29udGFpbnMgYSBiYXVkIHJhdGUgYW5kIHNvbWV0aW1lcyBleHRyYQorCQkjIG9wdGlvbnMgYXMgd2VsbC4gVGhlIGZvbGxvd2luZyBwZWFybCA6KSB0YWtlcyB0aGF0IGFuZCBjb252ZXJ0cworCQkjIGl0IGludG8gbmV3bGluZS1zZXBhcmF0ZWQgdHR5J3MgYW5kIGFwcGVuZHMgdGhlbSBpbnRvCisJCSMgc2VjdXJldHR5LiBTbyBpZiBhIG1hY2hpbmUgaGFzIGEgd2VpcmQgbG9va2luZyBjb25zb2xlIGRldmljZQorCQkjIG5vZGUgKGUuZy4gdHR5QU1BMCkgdGhhdCBzZWN1cmV0dHkgZG9lcyBub3Qga25vdywgaXQgd2lsbCBnZXQKKwkJIyBhcHBlbmRlZCB0byBzZWN1cmV0dHkgYW5kIHJvb3QgbG9naW5zIHdpbGwgYmUgYWxsb3dlZCBvbiB0aGF0CisJCSMgY29uc29sZS4KKwkJdG1wPSIke1NFUklBTF9DT05TT0xFU30iCisJCWZvciBlbnRyeSBpbiAkdG1wIDsgZG8KKwkJCXR0eWRldj1gZWNobyAiJGVudHJ5IiB8IHNlZCAtZSAncy9eWzAtOV0qXDsvLycgLWUgJ3MvXDsuKi8vJ2AKKwkJCWlmICEgZ3JlcCAtcSAkdHR5ZGV2ICR7RH0ke3N5c2NvbmZkaXJ9L3NlY3VyZXR0eTsgdGhlbgorCQkJCWVjaG8gJHR0eWRldiA+PiAke0R9JHtzeXNjb25mZGlyfS9zZWN1cmV0dHkKKwkJCWZpCisJCWRvbmUKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy1zeXNyb290XzQuMi4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy1zeXNyb290XzQuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NzU2OWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LXN5c3Jvb3RfNC4yLjEuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJTaGFkb3cgdXRpbHMgcmVxdWlyZW1lbnRzIGZvciB1c2VyYWRkLmJiY2xhc3MiCitIT01FUEFHRSA9ICJodHRwOi8vcGtnLXNoYWRvdy5hbGlvdGguZGViaWFuLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9hbGlvdGguZGViaWFuLm9yZy90cmFja2VyLz9ncm91cF9pZD0zMDU4MCIKK1NFQ1RJT04gPSAiYmFzZSB1dGlscyIKK0xJQ0VOU0UgPSAiQlNEIHwgQXJ0aXN0aWMtMS4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbG9naW4uZGVmc19zaGFkb3ctc3lzcm9vdDttZDU9MjVlMmYyZGU0ZGZjOGY5NjZhYzVjZGZjZTQ1Y2Q3ZDUiCisKK0RFUEVORFMgPSAiYmFzZS1wYXNzd2QiCisKK1BSID0gInIzIgorCisjIFRoZSBzb2xlIHB1cnBvc2Ugb2YgdGhpcyByZWNpcGUgaXMgdG8gcHJvdmlkZSB0aGUgL2V0Yy9sb2dpbi5kZWZzCisjIGZpbGUgZm9yIHRoZSB0YXJnZXQgc3lzcm9vdCAtIG5lZWRlZCBzbyB0aGUgc2hhZG93LW5hdGl2ZSB1dGlsaXRpZXMKKyMgY2FuIGFkZCBjdXN0b20gdXNlcnMvZ3JvdXBzIGZvciByZWNpcGVzIHRoYXQgdXNlIGluaGVyaXQgdXNlcmFkZC4KK1NSQ19VUkkgPSAiZmlsZTovL2xvZ2luLmRlZnNfc2hhZG93LXN5c3Jvb3QiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiODYwOGQ4Mjk0YWM4ODk3NGYyN2IyMGY5OTFjMGU3OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MzNmNWJiNGVhMGM4OGM1NWYzNjQyYzk3ZjlkMjVjYmVmNzRmODJlMGI0Y2Y4ZDU0ZTdhZDZmOWY5Y2FhNzc4IgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLXAgLW0gNzU1ICR7U30vbG9naW4uZGVmc19zaGFkb3ctc3lzcm9vdCAke0R9JHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCit9CisKK3N5c3Jvb3Rfc3RhZ2VfYWxsKCkgeworCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0gJHtTWVNST09UX0RFU1RESVJ9Cit9CisKKyMgZG9uJ3QgY3JlYXRlIGFueSBwYWNrYWdlcworIyBvdGhlcndpc2U6IGRidXMtZGV2IGRlcGVuZHMgb24gc2hhZG93LXN5c3Jvb3QtZGV2IHdoaWNoIGRlcGVuZHMgb24gc2hhZG93LXN5c3Jvb3QgCisjIGFuZCB0aGlzIGhhcyBhbm90aGVyIGNvcHkgb2YgL2V0Yy9sb2dpbi5kZWZzIGFscmVhZHkgcHJvdmlkZWQgYnkgc2hhZG93CitQQUNLQUdFUyA9ICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3cuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMTNmZmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LmluYwpAQCAtMCwwICsxLDE5NiBAQAorU1VNTUFSWSA9ICJUb29scyB0byBjaGFuZ2UgYW5kIGFkbWluaXN0ZXIgcGFzc3dvcmQgYW5kIGdyb3VwIGRhdGEiCitIT01FUEFHRSA9ICJodHRwOi8vcGtnLXNoYWRvdy5hbGlvdGguZGViaWFuLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9hbGlvdGguZGViaWFuLm9yZy90cmFja2VyLz9ncm91cF9pZD0zMDU4MCIKK1NFQ1RJT04gPSAiYmFzZS91dGlscyIKK0xJQ0VOU0UgPSAiQlNEIHwgQXJ0aXN0aWMtMS4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWQ4MGZmMWMyYjQwODQzY2Y1NzY4ZTUyMjljZjE2ZTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3Bhc3N3ZC5jO2JlZ2lubGluZT04O2VuZGxpbmU9MzA7bWQ1PWQ4Mzg4OGVhMTRhZTYxOTUxOTgyZDc3MTI1OTQ3NjYxIgorCitERVBFTkRTID0gInNoYWRvdy1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK1NSQ19VUkkgPSAiaHR0cDovL3BrZy1zaGFkb3cuYWxpb3RoLmRlYmlhbi5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9zaGFkb3ctNC4xLjMtZG90cy1pbi11c2VybmFtZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdXNlcm1vZC1maXgtY29tcGlsYXRpb24tZmFpbHVyZS13aXRoLXN1Ymlkcy1kaXNhYmxlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtaW5zdGFsbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Eby1ub3QtcmVhZC1sb2dpbi5kZWZzLWJlZm9yZS1kb2luZy1jaHJvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2hlY2tfc2l6ZV9vZl91aWRfdF9hbmRfZ2lkX3RfdXNpbmdfQUNfQ0hFQ0tfU0laRU9GLnBhdGNoIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncGFtJywgJyR7UEFNX1NSQ19VUkl9JywgJycsIGQpfSBcCisgICAgICAgICAgICIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBcCisgICAgICAgICAgIGZpbGU6Ly9sb2dpbl9kZWZzX3BhbS5zZWQgXAorICAgICAgICAgICBmaWxlOi8vc2hhZG93LXVwZGF0ZS1wYW0tY29uZi5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLXN5c2xvZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbGxvdy1mb3Itc2V0dGluZy1wYXNzd29yZC1pbi1jbGVhci10ZXh0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbW1vbmlvLmMtZml4LXVuZXhwZWN0ZWQtb3Blbi1mYWlsdXJlLWluLWNocm9vdC1lbnYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11c2VyYWRkLmMtY3JlYXRlLXBhcmVudC1kaXJlY3Rvcmllcy13aGVuLW5lY2Vzc2FyeS5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1zeXNsb2cucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyYmZhZmU3ZDQ5NjI2ODJkMzFiNWViYTY1ZGJhNGZjOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzYjA4OTNkMTQ3Njc2Njg2OGNkODg5MjBmNGYxMjMxYzQ3OTU2NTJhYTQwNzU2OWZhZmY4MDJiY2RhMGYzZDQxIgorCisjIEFkZGl0aW9uYWwgUG9saWN5IGZpbGVzIGZvciBQQU0KK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9wYW0uZC9jaGZuIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jaHBhc3N3ZCBcCisgICAgICAgICAgICAgICBmaWxlOi8vcGFtLmQvY2hzaCBcCisgICAgICAgICAgICAgICBmaWxlOi8vcGFtLmQvbG9naW4gXAorICAgICAgICAgICAgICAgZmlsZTovL3BhbS5kL25ld3VzZXJzIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9wYXNzd2QgXAorICAgICAgICAgICAgICAgZmlsZTovL3BhbS5kL3N1IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWF1ZGl0IFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LWxpYmNyYWNrIFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LXNlbGludXggXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZ3JvdXAtbmFtZS1tYXgtbGVuZ3RoPTI0IFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtc3Vib3JkaW5hdGUtaWRzPXllcyBcCisgICAgICAgICAgICAgICAgICR7TlNDRE9QVH0iCisKK05TQ0RPUFQgPSAiIgorTlNDRE9QVF9jbGFzcy1uYXRpdmUgPSAiLS13aXRob3V0LW5zY2QiCitOU0NET1BUX2NsYXNzLW5hdGl2ZXNkayA9ICItLXdpdGhvdXQtbnNjZCIKK05TQ0RPUFRfbGliYy11Y2xpYmMgPSAiIC0td2l0aG91dC1uc2NkIgorTlNDRE9QVF9saWJjLWdsaWJjID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1zcGF3bicsICctLXdpdGgtbnNjZCcsICctLXdpdGhvdXQtbnNjZCcsIGQpfSIKKyAgICAgICAgICAKK1BBTV9QTFVHSU5TID0gImxpYnBhbS1ydW50aW1lIFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tZmFpbGRlbGF5IFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tc2VjdXJldHR5IFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tbm9sb2dpbiBcCisgICAgICAgICAgICAgICBwYW0tcGx1Z2luLWVudiBcCisgICAgICAgICAgICAgICBwYW0tcGx1Z2luLWdyb3VwIFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tbGltaXRzIFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tbGFzdGxvZyBcCisgICAgICAgICAgICAgICBwYW0tcGx1Z2luLW1vdGQgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1tYWlsIFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tc2hlbGxzIFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tcm9vdG9rIgorCitQQUNLQUdFQ09ORklHID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA9ICIiCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiLS13aXRoLWxpYnBhbSwtLXdpdGhvdXQtbGlicGFtLGxpYnBhbSwke1BBTV9QTFVHSU5TfSIKK1BBQ0tBR0VDT05GSUdbYXR0cl0gPSAiLS13aXRoLWF0dHIsLS13aXRob3V0LWF0dHIsYXR0ciIKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLXdpdGgtYWNsLC0td2l0aG91dC1hY2wsYWNsIgorCitSREVQRU5EU18ke1BOfSA9ICJzaGFkb3ctc2VjdXJldHR5IFwKKyAgICAgICAgICAgICAgICAgIGJhc2UtcGFzc3dkIFwKKyAgICAgICAgICAgICAgICAgIHV0aWwtbGludXgtc3Vsb2dpbiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgREVTVERJUj0iJHtEfSIgc2JpbmRpcj0iJHtiYXNlX3NiaW5kaXJ9IiB1c2JpbmRpcj0iJHtzYmluZGlyfSIgaW5zdGFsbAorCisJIyBJbmZvIGRpciBsaXN0aW5nIGlzbid0IGludGVyZXN0aW5nIGF0IHRoaXMgcG9pbnQgc28gcmVtb3ZlIGl0IGlmIGl0IGV4aXN0cy4KKwlpZiBbIC1lICIke0R9JHtpbmZvZGlyfS9kaXIiIF07IHRoZW4KKwkJcm0gLWYgJHtEfSR7aW5mb2Rpcn0vZGlyCisJZmkKKworCSMgRW5hYmxlIENSRUFURV9IT01FIGJ5IGRlZmF1bHQuCisJc2VkIC1pICdzLyNDUkVBVEVfSE9NRS9DUkVBVEVfSE9NRS9nJyAke0R9JHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCisKKwkjIEFzIHdlIGFyZSBvbiBhbiBlbWJlZGRlZCBzeXN0ZW0sIGVuc3VyZSB0aGUgdXNlcnMgbWFpbGJveCBpcyBpbgorCSMgfi8gbm90IC92YXIvc3Bvb2wvbWFpbCBieSBkZWZhdWx0LCBhcyB3aG8ga25vd3Mgd2hlcmUgb3IgaG93IGJpZworCSMgL3ZhciBpcy4gVGhlIHN5c3RlbSBNREEgd2lsbCBzZXQgdGhpcyBsYXRlciBhbnl3YXkuCisJc2VkIC1pICdzL01BSUxfRElSLyNNQUlMX0RJUi9nJyAke0R9JHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCisJc2VkIC1pICdzLyNNQUlMX0ZJTEUvTUFJTF9GSUxFL2cnICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKKworCSMgRGlzYWJsZSBjaGVja2luZyBlbWFpbHMuCisJc2VkIC1pICdzL01BSUxfQ0hFQ0tfRU5BQi8jTUFJTF9DSEVDS19FTkFCL2cnICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKKworCSMgQ29tbWVudCBvdXQgU1VfTkFNRSB0byB3b3JrIGNvcnJlY3RseSB3aXRoIGJ1c3lib3gKKwkjIFNlZSBCdWcjNTM1OSBhbmQgQnVnIzcxNzMKKwlzZWQgLWkgJ3M6XlNVX05BTUU6I1NVX05BTUU6ZycgJHtEfSR7c3lzY29uZmRpcn0vbG9naW4uZGVmcworCisJIyBVc2UgcHJvcGVyIGVuY3J5cHRpb24gZm9yIHBhc3N3b3JkcworCXNlZCAtaSAncy9eI0VOQ1JZUFRfTUVUSE9ELiokL0VOQ1JZUFRfTUVUSE9EIFNIQTUxMi8nICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKKworCSMgTm93IHdlIGRvbid0IGhhdmUgYSBtYWlsIHN5c3RlbS4gRGlzYWJsZSBtYWlsIGNyZWF0aW9uIGZvciBub3cuCisJc2VkIC1pICdzOi9iaW4vYmFzaDovYmluL3NoOmcnICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdXNlcmFkZAorCXNlZCAtaSAnL15DUkVBVEVfTUFJTF9TUE9PTC8gczpeOiM6JyAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3VzZXJhZGQKKworCSMgVXNlIHVzZXJzIGdyb3VwIGJ5IGRlZmF1bHQKKwlzZWQgLWkgJ3MsXkdST1VQPTEwMDAsR1JPVVA9MTAwLGcnICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdXNlcmFkZAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIEVuc3VyZSB0aGF0IHRoZSBpbWFnZSBoYXMgYXMgYSAvdmFyL3Nwb29sL21haWwgZGlyIHNvIHNoYWRvdyBjYW4KKwkjIHB1dCBtYWlsYm94ZXMgdGhlcmUgaWYgdGhlIHVzZXIgcmVjb25maWd1cmVzIHNoYWRvdyB0byBpdHMKKwkjIGRlZmF1bHRzIChzZWUgc2VkIGJlbG93KS4KKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL21haWwKKworCWlmIFsgLWUgJHtXT1JLRElSfS9wYW0uZCBdOyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3BhbS5kLyogJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvCisJCSMgUmVtb3ZlIGRlZmF1bHRzIHRoYXQgYXJlIG5vdCB1c2VkIHdoZW4gc3VwcG9ydGluZyBQQU0uCisJCXNlZCAtaSAtZiAke1dPUktESVJ9L2xvZ2luX2RlZnNfcGFtLnNlZCAke0R9JHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0gJHtEfSR7YmFzZV9zYmluZGlyfSAke0R9JHtiYXNlX2JpbmRpcn0gCisKKwkjIE1vdmUgYmluYXJpZXMgdG8gdGhlIGxvY2F0aW9ucyB3ZSB3YW50CisJcm0gJHtEfSR7c2JpbmRpcn0vdmlncgorCWxuIC1zZiB2aXB3LiR7QlBOfSAke0R9JHtiYXNlX3NiaW5kaXJ9L3ZpZ3IKKwlpZiBbICIke3NiaW5kaXJ9IiAhPSAiJHtiYXNlX3NiaW5kaXJ9IiBdOyB0aGVuCisJCW12ICR7RH0ke3NiaW5kaXJ9L3ZpcHcgJHtEfSR7YmFzZV9zYmluZGlyfS92aXB3CisJZmkKKwlpZiBbICIke2JpbmRpcn0iICE9ICIke2Jhc2VfYmluZGlyfSIgXTsgdGhlbgorCQltdiAke0R9JHtiaW5kaXJ9L2xvZ2luICR7RH0ke2Jhc2VfYmluZGlyfS9sb2dpbgorCQltdiAke0R9JHtiaW5kaXJ9L3N1ICR7RH0ke2Jhc2VfYmluZGlyfS9zdQorCWZpCisKKwkjIEhhbmRsZSBsaW5rIHByb3Blcmx5IGFmdGVyIHJlbmFtZSwgb3RoZXJ3aXNlIG1pc3NpbmcgZmlsZXMgd291bGQKKwkjIGxlYWQgcnBtIGZhaWxlZCBkZXBlbmRlbmNpZXMuCisJbG4gLXNmIG5ld2dycC4ke0JQTn0gJHtEfSR7YmluZGlyfS9zZworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tYmFzZSIKK0ZJTEVTXyR7UE59LWJhc2UgPSAiXAorICAgICR7YmFzZV9iaW5kaXJ9L2xvZ2luLnNoYWRvdyBcCisgICAgJHtiYXNlX2JpbmRpcn0vc3Uuc2hhZG93IFwKKyAgICAke2JpbmRpcn0vc2cgXAorICAgICR7YmluZGlyfS9uZXdncnAuc2hhZG93IFwKKyAgICAke2JpbmRpcn0vZ3JvdXBzLnNoYWRvdyBcCisgICAgJHtzeXNjb25mZGlyfS9wYW0uZC9sb2dpbiBcCisgICAgJHtzeXNjb25mZGlyfS9wYW0uZC9zdSBcCisgICAgJHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzIFwKKyIKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1iYXNlIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMjAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJwYXNzd2QgY2hmbiBjaHNoIGNocGFzc3dkIHZpcHcgdmlnciIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtjaHBhc3N3ZF0gPSAiJHtzYmluZGlyfS9jaHBhc3N3ZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt2aXB3XSA9ICIke2Jhc2Vfc2JpbmRpcn0vdmlwdyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt2aWdyXSA9ICIke2Jhc2Vfc2JpbmRpcn0vdmlnciIKKworQUxURVJOQVRJVkVfJHtQTn0tYmFzZSA9ICJuZXdncnAgZ3JvdXBzIGxvZ2luIHN1IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2xvZ2luXSA9ICIke2Jhc2VfYmluZGlyfS9sb2dpbiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzdV0gPSAiJHtiYXNlX2JpbmRpcn0vc3UiCisKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJwYXNzd2QuNSBnZXRzcG5hbS4zIGdyb3Vwcy4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Bhc3N3ZC41XSA9ICIke21hbmRpcn0vbWFuNS9wYXNzd2QuNSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtnZXRzcG5hbS4zXSA9ICIke21hbmRpcn0vbWFuMy9nZXRzcG5hbS4zIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dyb3Vwcy4xXSA9ICIke21hbmRpcn0vbWFuMS9ncm91cHMuMSIKKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiBbICJ4JEQiICE9ICJ4IiBdOyB0aGVuCisJICByb290YXJnPSItLXJvb3QgJEQiCisJZWxzZQorCSAgcm9vdGFyZz0iIgorCWZpCisKKwlwd2NvbnYgJHJvb3RhcmcgfHwgZXhpdCAxCisJZ3JwY29udiAkcm9vdGFyZyB8fCBleGl0IDEKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3dfNC4yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93XzQuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NzVjYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93XzQuMi4xLmJiCkBAIC0wLDAgKzEsMTAgQEAKK3JlcXVpcmUgc2hhZG93LmluYworCisjIEJ1aWxkIGZhbHNlbHkgYXNzdW1lcyB0aGF0IGlmIC0tZW5hYmxlLWxpYnBhbSBpcyBzZXQsIHdlIGRvbid0IG5lZWQgdG8gbGluayBhZ2FpbnN0CisjIGxpYmNyeXB0LiBUaGlzIGJyZWFrcyBjaHNoLgorQlVJTERfTERGTEFHU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1jcnlwdCcsICAnLWxjcnlwdCcsICcnLCBkKSwgJycsIGQpfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvMDAwMS1GaXgtZXJyb3ItY29uZmxpY3RpbmctdHlwZXMtZm9yLXBvc2l4X2Nsb3NlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvMDAwMS1GaXgtZXJyb3ItY29uZmxpY3RpbmctdHlwZXMtZm9yLXBvc2l4X2Nsb3NlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZWJmZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy8wMDAxLUZpeC1lcnJvci1jb25mbGljdGluZy10eXBlcy1mb3ItcG9zaXhfY2xvc2UucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSA5NmViN2UyOTgyMjE1MTgyM2E2NmExZWI1OWYxZmE0YWVhZDVhZTA4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMzEgQXVnIDIwMTUgMDY6MzM6MjEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4ICBlcnJvcjogY29uZmxpY3RpbmcgdHlwZXMgZm9yICdwb3NpeF9jbG9zZScKKworRXhwb3NlZCB3aGlsZSBjb21waWxpbmcgb24gbXVzbAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHNyYy9zbHBvc2lvLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3NscG9zaW8uYyBiL3NyYy9zbHBvc2lvLmMKK2luZGV4IDljZTk2OTcuLjlmZjliZmUgMTAwNjQ0CistLS0gYS9zcmMvc2xwb3Npby5jCisrKysgYi9zcmMvc2xwb3Npby5jCitAQCAtMzYzLDcgKzM2Myw3IEBAIHN0YXRpYyBpbnQgcG9zaXhfY2xvc2VfZmQgKGludCAqZmQpCisgICAgcmV0dXJuIDA7CisgfQorIAorLXN0YXRpYyBpbnQgcG9zaXhfY2xvc2UgKFNMRmlsZV9GRF9UeXBlICpmKQorK3N0YXRpYyBpbnQgcG9zaXhfY2xvc2V4IChTTEZpbGVfRkRfVHlwZSAqZikKKyB7CisgICAgaW50IHN0YXR1cyA9IGRvX2Nsb3NlIChmKTsKKyAKK0BAIC0xMDAxLDcgKzEwMDEsNyBAQCBzdGF0aWMgU0xhbmdfSW50cmluX0Z1bl9UeXBlIEZkX05hbWVfVGFibGUgW10gPQorICAgIE1BS0VfSU5UUklOU0lDXzIoIndyaXRlIiwgcG9zaXhfd3JpdGUsIFYsIEYsIEIpLAorICAgIE1BS0VfSU5UUklOU0lDXzEoImR1cF9mZCIsIHBvc2l4X2R1cCwgViwgRiksCisgICAgTUFLRV9JTlRSSU5TSUNfMigiZHVwMl9mZCIsIHBvc2l4X2R1cDIsIEksIEYsIEkpLAorLSAgIE1BS0VfSU5UUklOU0lDXzEoImNsb3NlIiwgcG9zaXhfY2xvc2UsIEksIEYpLAorKyAgIE1BS0VfSU5UUklOU0lDXzEoImNsb3NlIiwgcG9zaXhfY2xvc2V4LCBJLCBGKSwKKyAgICBNQUtFX0lOVFJJTlNJQ18xKCJfY2xvc2UiLCBwb3NpeF9jbG9zZV9mZCwgSSwgSSksCisgI2lmIGRlZmluZWQoVFRZTkFNRV9SKQorICAgIE1BS0VfSU5UUklOU0lDXzAoInR0eW5hbWUiLCBwb3NpeF90dHluYW1lLCBWKSwKKy0tIAorMi41LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvY2hhbmdlLWNoYXItdHlwZS10by1zaWduZWQtY2hhci1pbi1tYWNyb3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9jaGFuZ2UtY2hhci10eXBlLXRvLXNpZ25lZC1jaGFyLWluLW1hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWExZmZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvY2hhbmdlLWNoYXItdHlwZS10by1zaWduZWQtY2hhci1pbi1tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwyMTggQEAKK3NsYW5nOiBjaGFuZ2UgY2hhciB0eXBlIHRvIHNpZ25lZCBjaGFyIGluIG1hY3JvcworCitDIGxhbmd1YWdlIGhhcyAzIGRpc3RpbmN0IGNoYXIgdHlwZXM6CisgICAgICAgICBjaGFyCisgICAgICAgICB1bnNpZ25lZCBjaGFyCisgICAgICAgICBzaWduZWQgY2hhcgorQSBjaGFyIGhhcyB0aGUgc2FtZSByYW5nZSBvZiB2YWx1ZXMgYXMgc2lnbmVkIGNoYXIgb24gWDg2LAorYnV0IHNhbWUgYXMgdW5zaWduZWQgY2hhciBvbiBBUk0gd2hpY2ggbWFkZSBTbGFuZydzIHR5cGVjYXN0KCkKK2FuZCBhcnJheV9zb3J0KCkgdW5hYmxlIHRvIHdvcmsgZm9yIGNoYXIgdmFsdWUgb24gQVJNLCBzaW5jZQorU2xhbmcgaXMgYXNzdW1pbmcgImNoYXIiIGFzICJzaWduZWQgY2hhciIuCisKK05vdyB3ZSBjaGFuZ2UgImNoYXIiIGFzICJzaWduZWQgY2hhciIgZXhwbGljaXRseSBpbgordXRpbC9ta3NsYXJpdGgyLnNsLCBhbmQgdXNlIGl0IHRvIHJlZ2VuZXJhdGUgc3JjL3NsYXJpdGgyLmluYworCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL3NsYXJpdGgyLmluYyAgICAgICB8ICAgNzIgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHNyYy91dGlsL21rc2xhcml0aDIuc2wgfCAgICAyIC0KKyAyIGZpbGVzIGNoYW5nZWQsIDM3IGluc2VydGlvbnMoKyksIDM3IGRlbGV0aW9ucygtKQorCistLS0gYS9zcmMvdXRpbC9ta3NsYXJpdGgyLnNsCisrKysgYi9zcmMvdXRpbC9ta3NsYXJpdGgyLnNsCitAQCAtMSw3ICsxLDcgQEAKKyAjIS91c3IvYmluL2VudiBzbHNoCisgCisgcHJpdmF0ZSB2YXJpYWJsZSBDVHlwZXMgPQorLSAgWyJjaGFyIiwgInVuc2lnbmVkIGNoYXIiLCAic2hvcnQiLCAidW5zaWduZWQgc2hvcnQiLCAiaW50IiwgInVuc2lnbmVkIGludCIsCisrICBbInNpZ25lZCBjaGFyIiwgInVuc2lnbmVkIGNoYXIiLCAic2hvcnQiLCAidW5zaWduZWQgc2hvcnQiLCAiaW50IiwgInVuc2lnbmVkIGludCIsCisgICAgImxvbmciLCAidW5zaWduZWQgbG9uZyIsICJsb25nIGxvbmciLCAidW5zaWduZWQgbG9uZyBsb25nIiwKKyAgICAiZmxvYXQiLCAiZG91YmxlIiwgImxvbmcgZG91YmxlIl07CisgcHJpdmF0ZSB2YXJpYWJsZSBJc19JbnRfVHlwZSA9CistLS0gYS9zcmMvc2xhcml0aDIuaW5jCisrKysgYi9zcmMvc2xhcml0aDIuaW5jCitAQCAtMSw0MyArMSw0MyBAQAorIC8qIERPIE5PVCBFRElUIC0tIHRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IHNyYy91dGlsL21rc2xhcml0aDIuc2wgKi8KKy0vKiAtLS0tLS0tLS0tLS0gY2hhciAtLS0tLS0tLS0tICovCistREVGVU5fMShjb3B5X2NoYXJfdG9fY2hhcixjaGFyLGNoYXIpCisrLyogLS0tLS0tLS0tLS0tIHNpZ25lZCBjaGFyIC0tLS0tLS0tLS0gKi8KKytERUZVTl8xKGNvcHlfY2hhcl90b19jaGFyLHNpZ25lZCBjaGFyLHNpZ25lZCBjaGFyKQorICNkZWZpbmUgY2hhcl90b19jaGFyCU5VTEwKKyAjZGVmaW5lIGNvcHlfY2hhcl90b191Y2hhcgljb3B5X2NoYXJfdG9fY2hhcgorICNkZWZpbmUgY2hhcl90b191Y2hhcglOVUxMCistREVGVU5fMShjb3B5X2NoYXJfdG9fc2hvcnQsY2hhcixzaG9ydCkKKytERUZVTl8xKGNvcHlfY2hhcl90b19zaG9ydCxzaWduZWQgY2hhcixzaG9ydCkKKyAjZGVmaW5lIGNoYXJfdG9fc2hvcnQJTlVMTAorLURFRlVOXzEoY29weV9jaGFyX3RvX3VzaG9ydCxjaGFyLHVuc2lnbmVkIHNob3J0KQorK0RFRlVOXzEoY29weV9jaGFyX3RvX3VzaG9ydCxzaWduZWQgY2hhcix1bnNpZ25lZCBzaG9ydCkKKyAjZGVmaW5lIGNoYXJfdG9fdXNob3J0CU5VTEwKKy1ERUZVTl8xKGNvcHlfY2hhcl90b19pbnQsY2hhcixpbnQpCistREVGVU5fMihjaGFyX3RvX2ludCxjaGFyLGludCxjb3B5X2NoYXJfdG9faW50KQorLURFRlVOXzEoY29weV9jaGFyX3RvX3VpbnQsY2hhcix1bnNpZ25lZCBpbnQpCistREVGVU5fMihjaGFyX3RvX3VpbnQsY2hhcix1bnNpZ25lZCBpbnQsY29weV9jaGFyX3RvX3VpbnQpCistREVGVU5fMShjb3B5X2NoYXJfdG9fbG9uZyxjaGFyLGxvbmcpCistREVGVU5fMihjaGFyX3RvX2xvbmcsY2hhcixsb25nLGNvcHlfY2hhcl90b19sb25nKQorLURFRlVOXzEoY29weV9jaGFyX3RvX3Vsb25nLGNoYXIsdW5zaWduZWQgbG9uZykKKy1ERUZVTl8yKGNoYXJfdG9fdWxvbmcsY2hhcix1bnNpZ25lZCBsb25nLGNvcHlfY2hhcl90b191bG9uZykKKytERUZVTl8xKGNvcHlfY2hhcl90b19pbnQsc2lnbmVkIGNoYXIsaW50KQorK0RFRlVOXzIoY2hhcl90b19pbnQsc2lnbmVkIGNoYXIsaW50LGNvcHlfY2hhcl90b19pbnQpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fdWludCxzaWduZWQgY2hhcix1bnNpZ25lZCBpbnQpCisrREVGVU5fMihjaGFyX3RvX3VpbnQsc2lnbmVkIGNoYXIsdW5zaWduZWQgaW50LGNvcHlfY2hhcl90b191aW50KQorK0RFRlVOXzEoY29weV9jaGFyX3RvX2xvbmcsc2lnbmVkIGNoYXIsbG9uZykKKytERUZVTl8yKGNoYXJfdG9fbG9uZyxzaWduZWQgY2hhcixsb25nLGNvcHlfY2hhcl90b19sb25nKQorK0RFRlVOXzEoY29weV9jaGFyX3RvX3Vsb25nLHNpZ25lZCBjaGFyLHVuc2lnbmVkIGxvbmcpCisrREVGVU5fMihjaGFyX3RvX3Vsb25nLHNpZ25lZCBjaGFyLHVuc2lnbmVkIGxvbmcsY29weV9jaGFyX3RvX3Vsb25nKQorICNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQorLURFRlVOXzEoY29weV9jaGFyX3RvX2xsb25nLGNoYXIsbG9uZyBsb25nKQorLURFRlVOXzIoY2hhcl90b19sbG9uZyxjaGFyLGxvbmcgbG9uZyxjb3B5X2NoYXJfdG9fbGxvbmcpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fbGxvbmcsc2lnbmVkIGNoYXIsbG9uZyBsb25nKQorK0RFRlVOXzIoY2hhcl90b19sbG9uZyxzaWduZWQgY2hhcixsb25nIGxvbmcsY29weV9jaGFyX3RvX2xsb25nKQorICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKSAqLworICNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQorLURFRlVOXzEoY29weV9jaGFyX3RvX3VsbG9uZyxjaGFyLHVuc2lnbmVkIGxvbmcgbG9uZykKKy1ERUZVTl8yKGNoYXJfdG9fdWxsb25nLGNoYXIsdW5zaWduZWQgbG9uZyBsb25nLGNvcHlfY2hhcl90b191bGxvbmcpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fdWxsb25nLHNpZ25lZCBjaGFyLHVuc2lnbmVkIGxvbmcgbG9uZykKKytERUZVTl8yKGNoYXJfdG9fdWxsb25nLHNpZ25lZCBjaGFyLHVuc2lnbmVkIGxvbmcgbG9uZyxjb3B5X2NoYXJfdG9fdWxsb25nKQorICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKSAqLworICNpZiBTTEFOR19IQVNfRkxPQVQKKy1ERUZVTl8xKGNvcHlfY2hhcl90b19mbG9hdCxjaGFyLGZsb2F0KQorLURFRlVOXzIoY2hhcl90b19mbG9hdCxjaGFyLGZsb2F0LGNvcHlfY2hhcl90b19mbG9hdCkKKytERUZVTl8xKGNvcHlfY2hhcl90b19mbG9hdCxzaWduZWQgY2hhcixmbG9hdCkKKytERUZVTl8yKGNoYXJfdG9fZmxvYXQsc2lnbmVkIGNoYXIsZmxvYXQsY29weV9jaGFyX3RvX2Zsb2F0KQorICNlbmRpZiAvKiBTTEFOR19IQVNfRkxPQVQgKi8KKyAjaWYgU0xBTkdfSEFTX0ZMT0FUCistREVGVU5fMShjb3B5X2NoYXJfdG9fZG91YmxlLGNoYXIsZG91YmxlKQorLURFRlVOXzIoY2hhcl90b19kb3VibGUsY2hhcixkb3VibGUsY29weV9jaGFyX3RvX2RvdWJsZSkKKytERUZVTl8xKGNvcHlfY2hhcl90b19kb3VibGUsc2lnbmVkIGNoYXIsZG91YmxlKQorK0RFRlVOXzIoY2hhcl90b19kb3VibGUsc2lnbmVkIGNoYXIsZG91YmxlLGNvcHlfY2hhcl90b19kb3VibGUpCisgI2VuZGlmIC8qIFNMQU5HX0hBU19GTE9BVCAqLworICNpZiBkZWZpbmVkKEhBVkVfTE9OR19ET1VCTEUpCistREVGVU5fMShjb3B5X2NoYXJfdG9fbGRvdWJsZSxjaGFyLGxvbmcgZG91YmxlKQorLURFRlVOXzIoY2hhcl90b19sZG91YmxlLGNoYXIsbG9uZyBkb3VibGUsY29weV9jaGFyX3RvX2xkb3VibGUpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fbGRvdWJsZSxzaWduZWQgY2hhcixsb25nIGRvdWJsZSkKKytERUZVTl8yKGNoYXJfdG9fbGRvdWJsZSxzaWduZWQgY2hhcixsb25nIGRvdWJsZSxjb3B5X2NoYXJfdG9fbGRvdWJsZSkKKyAjZW5kaWYgLyogZGVmaW5lZChIQVZFX0xPTkdfRE9VQkxFKSAqLworICNpZiBTTEFOR19IQVNfRkxPQVQKKy1UT19ET1VCTEVfRlVOKGNoYXJfdG9fb25lX2RvdWJsZSxjaGFyKQorK1RPX0RPVUJMRV9GVU4oY2hhcl90b19vbmVfZG91YmxlLHNpZ25lZCBjaGFyKQorICNlbmRpZgorIAorIC8qIC0tLS0tLS0tLS0tLSB1bnNpZ25lZCBjaGFyIC0tLS0tLS0tLS0gKi8KK0BAIC04Miw3ICs4Miw3IEBAIFRPX0RPVUJMRV9GVU4odWNoYXJfdG9fb25lX2RvdWJsZSx1bnNpZ24KKyAjZW5kaWYKKyAKKyAvKiAtLS0tLS0tLS0tLS0gc2hvcnQgLS0tLS0tLS0tLSAqLworLURFRlVOXzEoY29weV9zaG9ydF90b19jaGFyLHNob3J0LGNoYXIpCisrREVGVU5fMShjb3B5X3Nob3J0X3RvX2NoYXIsc2hvcnQsc2lnbmVkIGNoYXIpCisgI2RlZmluZSBzaG9ydF90b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfc2hvcnRfdG9fdWNoYXIsc2hvcnQsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIHNob3J0X3RvX3VjaGFyCU5VTEwKK0BAIC0xMjMsNyArMTIzLDcgQEAgVE9fRE9VQkxFX0ZVTihzaG9ydF90b19vbmVfZG91YmxlLHNob3J0KQorICNlbmRpZgorIAorIC8qIC0tLS0tLS0tLS0tLSB1bnNpZ25lZCBzaG9ydCAtLS0tLS0tLS0tICovCistREVGVU5fMShjb3B5X3VzaG9ydF90b19jaGFyLHVuc2lnbmVkIHNob3J0LGNoYXIpCisrREVGVU5fMShjb3B5X3VzaG9ydF90b19jaGFyLHVuc2lnbmVkIHNob3J0LHNpZ25lZCBjaGFyKQorICNkZWZpbmUgdXNob3J0X3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV91c2hvcnRfdG9fdWNoYXIsdW5zaWduZWQgc2hvcnQsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIHVzaG9ydF90b191Y2hhcglOVUxMCitAQCAtMTY0LDcgKzE2NCw3IEBAIFRPX0RPVUJMRV9GVU4odXNob3J0X3RvX29uZV9kb3VibGUsdW5zaWcKKyAjZW5kaWYKKyAKKyAvKiAtLS0tLS0tLS0tLS0gaW50IC0tLS0tLS0tLS0gKi8KKy1ERUZVTl8xKGNvcHlfaW50X3RvX2NoYXIsaW50LGNoYXIpCisrREVGVU5fMShjb3B5X2ludF90b19jaGFyLGludCxzaWduZWQgY2hhcikKKyAjZGVmaW5lIGludF90b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfaW50X3RvX3VjaGFyLGludCx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgaW50X3RvX3VjaGFyCU5VTEwKK0BAIC0yMDUsNyArMjA1LDcgQEAgVE9fRE9VQkxFX0ZVTihpbnRfdG9fb25lX2RvdWJsZSxpbnQpCisgI2VuZGlmCisgCisgLyogLS0tLS0tLS0tLS0tIHVuc2lnbmVkIGludCAtLS0tLS0tLS0tICovCistREVGVU5fMShjb3B5X3VpbnRfdG9fY2hhcix1bnNpZ25lZCBpbnQsY2hhcikKKytERUZVTl8xKGNvcHlfdWludF90b19jaGFyLHVuc2lnbmVkIGludCxzaWduZWQgY2hhcikKKyAjZGVmaW5lIHVpbnRfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X3VpbnRfdG9fdWNoYXIsdW5zaWduZWQgaW50LHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSB1aW50X3RvX3VjaGFyCU5VTEwKK0BAIC0yNDYsNyArMjQ2LDcgQEAgVE9fRE9VQkxFX0ZVTih1aW50X3RvX29uZV9kb3VibGUsdW5zaWduZQorICNlbmRpZgorIAorIC8qIC0tLS0tLS0tLS0tLSBsb25nIC0tLS0tLS0tLS0gKi8KKy1ERUZVTl8xKGNvcHlfbG9uZ190b19jaGFyLGxvbmcsY2hhcikKKytERUZVTl8xKGNvcHlfbG9uZ190b19jaGFyLGxvbmcsc2lnbmVkIGNoYXIpCisgI2RlZmluZSBsb25nX3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV9sb25nX3RvX3VjaGFyLGxvbmcsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIGxvbmdfdG9fdWNoYXIJTlVMTAorQEAgLTI4Nyw3ICsyODcsNyBAQCBUT19ET1VCTEVfRlVOKGxvbmdfdG9fb25lX2RvdWJsZSxsb25nKQorICNlbmRpZgorIAorIC8qIC0tLS0tLS0tLS0tLSB1bnNpZ25lZCBsb25nIC0tLS0tLS0tLS0gKi8KKy1ERUZVTl8xKGNvcHlfdWxvbmdfdG9fY2hhcix1bnNpZ25lZCBsb25nLGNoYXIpCisrREVGVU5fMShjb3B5X3Vsb25nX3RvX2NoYXIsdW5zaWduZWQgbG9uZyxzaWduZWQgY2hhcikKKyAjZGVmaW5lIHVsb25nX3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV91bG9uZ190b191Y2hhcix1bnNpZ25lZCBsb25nLHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSB1bG9uZ190b191Y2hhcglOVUxMCitAQCAtMzI5LDcgKzMyOSw3IEBAIFRPX0RPVUJMRV9GVU4odWxvbmdfdG9fb25lX2RvdWJsZSx1bnNpZ24KKyAKKyAvKiAtLS0tLS0tLS0tLS0gbG9uZyBsb25nIC0tLS0tLS0tLS0gKi8KKyAjaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykKKy1ERUZVTl8xKGNvcHlfbGxvbmdfdG9fY2hhcixsb25nIGxvbmcsY2hhcikKKytERUZVTl8xKGNvcHlfbGxvbmdfdG9fY2hhcixsb25nIGxvbmcsc2lnbmVkIGNoYXIpCisgI2RlZmluZSBsbG9uZ190b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfbGxvbmdfdG9fdWNoYXIsbG9uZyBsb25nLHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSBsbG9uZ190b191Y2hhcglOVUxMCitAQCAtMzcyLDcgKzM3Miw3IEBAIFRPX0RPVUJMRV9GVU4obGxvbmdfdG9fb25lX2RvdWJsZSxsb25nIGwKKyAKKyAvKiAtLS0tLS0tLS0tLS0gdW5zaWduZWQgbG9uZyBsb25nIC0tLS0tLS0tLS0gKi8KKyAjaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykKKy1ERUZVTl8xKGNvcHlfdWxsb25nX3RvX2NoYXIsdW5zaWduZWQgbG9uZyBsb25nLGNoYXIpCisrREVGVU5fMShjb3B5X3VsbG9uZ190b19jaGFyLHVuc2lnbmVkIGxvbmcgbG9uZyxzaWduZWQgY2hhcikKKyAjZGVmaW5lIHVsbG9uZ190b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfdWxsb25nX3RvX3VjaGFyLHVuc2lnbmVkIGxvbmcgbG9uZyx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgdWxsb25nX3RvX3VjaGFyCU5VTEwKK0BAIC00MTUsNyArNDE1LDcgQEAgVE9fRE9VQkxFX0ZVTih1bGxvbmdfdG9fb25lX2RvdWJsZSx1bnNpZworIAorIC8qIC0tLS0tLS0tLS0tLSBmbG9hdCAtLS0tLS0tLS0tICovCisgI2lmIFNMQU5HX0hBU19GTE9BVAorLURFRlVOXzEoY29weV9mbG9hdF90b19jaGFyLGZsb2F0LGNoYXIpCisrREVGVU5fMShjb3B5X2Zsb2F0X3RvX2NoYXIsZmxvYXQsc2lnbmVkIGNoYXIpCisgI2RlZmluZSBmbG9hdF90b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfZmxvYXRfdG9fdWNoYXIsZmxvYXQsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIGZsb2F0X3RvX3VjaGFyCU5VTEwKK0BAIC00NTgsNyArNDU4LDcgQEAgVE9fRE9VQkxFX0ZVTihmbG9hdF90b19vbmVfZG91YmxlLGZsb2F0KQorIAorIC8qIC0tLS0tLS0tLS0tLSBkb3VibGUgLS0tLS0tLS0tLSAqLworICNpZiBTTEFOR19IQVNfRkxPQVQKKy1ERUZVTl8xKGNvcHlfZG91YmxlX3RvX2NoYXIsZG91YmxlLGNoYXIpCisrREVGVU5fMShjb3B5X2RvdWJsZV90b19jaGFyLGRvdWJsZSxzaWduZWQgY2hhcikKKyAjZGVmaW5lIGRvdWJsZV90b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfZG91YmxlX3RvX3VjaGFyLGRvdWJsZSx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgZG91YmxlX3RvX3VjaGFyCU5VTEwKK0BAIC01MDEsNyArNTAxLDcgQEAgVE9fRE9VQkxFX0ZVTihkb3VibGVfdG9fb25lX2RvdWJsZSxkb3VibAorIAorIC8qIC0tLS0tLS0tLS0tLSBsb25nIGRvdWJsZSAtLS0tLS0tLS0tICovCisgI2lmIGRlZmluZWQoSEFWRV9MT05HX0RPVUJMRSkKKy1ERUZVTl8xKGNvcHlfbGRvdWJsZV90b19jaGFyLGxvbmcgZG91YmxlLGNoYXIpCisrREVGVU5fMShjb3B5X2xkb3VibGVfdG9fY2hhcixsb25nIGRvdWJsZSxzaWduZWQgY2hhcikKKyAjZGVmaW5lIGxkb3VibGVfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X2xkb3VibGVfdG9fdWNoYXIsbG9uZyBkb3VibGUsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIGxkb3VibGVfdG9fdWNoYXIJTlVMTAorQEAgLTU0NSw3ICs1NDUsNyBAQCBUT19ET1VCTEVfRlVOKGxkb3VibGVfdG9fb25lX2RvdWJsZSxsb25nCisgI2lmIFNMQU5HX0hBU19GTE9BVAorIHN0YXRpYyBUb19Eb3VibGVfRnVuX1RhYmxlX1R5cGUgVG9fRG91YmxlX0Z1bl9UYWJsZSBbTUFYX0FSSVRITUVUSUNfVFlQRVNdID0KKyB7CistICAge3NpemVvZihjaGFyKSwgY2hhcl90b19vbmVfZG91YmxlfSwKKysgICB7c2l6ZW9mKHNpZ25lZCBjaGFyKSwgY2hhcl90b19vbmVfZG91YmxlfSwKKyAgICB7c2l6ZW9mKHVuc2lnbmVkIGNoYXIpLCB1Y2hhcl90b19vbmVfZG91YmxlfSwKKyAgICB7c2l6ZW9mKHNob3J0KSwgc2hvcnRfdG9fb25lX2RvdWJsZX0sCisgICAge3NpemVvZih1bnNpZ25lZCBzaG9ydCksIHVzaG9ydF90b19vbmVfZG91YmxlfSwKK0BAIC01ODMsNyArNTgzLDcgQEAgc3RhdGljIFRvX0RvdWJsZV9GdW5fVGFibGVfVHlwZSBUb19Eb3VibAorIAorIHN0YXRpYyBCaW5hcnlfTWF0cml4X1R5cGUgQmluYXJ5X01hdHJpeCBbTUFYX0FSSVRITUVUSUNfVFlQRVNdW01BWF9BUklUSE1FVElDX1RZUEVTXSA9CisgeworLSAgIC8qIGNoYXIgKi8KKysgICAvKiBzaWduZWQgY2hhciAqLworICAgIHsKKyAgICAgIHsoRlZPSURfU1RBUiljb3B5X2NoYXJfdG9fY2hhciwgY2hhcl90b19jaGFyfSwKKyAgICAgIHsoRlZPSURfU1RBUiljb3B5X2NoYXJfdG9fdWNoYXIsIGNoYXJfdG9fdWNoYXJ9LApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvZml4LWNoZWNrLXBjcmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9maXgtY2hlY2stcGNyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzE1NTNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvZml4LWNoZWNrLXBjcmUucGF0Y2gKQEAgLTAsMCArMSwxMDggQEAKK2ZpeCB0aGUgcGNyZSBleGlzdGVuY2UgY2hlY2tpbmcKKword2hlbiBjaGVjayBpZiB0aGVyZSBpcyBwY3JlLCB0aGUgY29uZmlndXJlIGZpbGUgYWx3YXlzIGNoZWNrCit0aGUgaG9zdCBkaXIuIG5vdyB3ZSBtYWtlIGl0IHdvcmsgYnkgYWRkaW5nIGNvcnJlY3QgcHJlZml4IGZvcgorY3Jvc3MtY29tcGlsZSBlbnZpcm9ubWVudC4KKworV2hlbiBlbmFibGUgcGNyZS1tb2R1bGUsIHdlIHNlZSBhIFFBIHdhcm5pbmcgYmVjYXVzZSBycGF0aHMKK2hhcmRjb2RlZCBpbnRvIHRoZSBidWlsZCwgcnBhdGhzIGFyZSBub3QgbmVlZGVkLCBzbyBsZXRzIHR1cm4KK3RoaXMgb2ZmLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8ICAgNjAgKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDU0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBmMTU4NmMzLi5kMjI4MTRmIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC02OTkxLDYgKzY5OTEsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIHBjcmUgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzIC4uLiAiID4mNjsgfQorIAkgL3Vzci9pbmNsdWRlL3BjcmUsL3Vzci9saWIgXAorIAkgL3Vzci9wY3JlL2luY2x1ZGUsL3Vzci9wY3JlL2xpYiBcCisgCSAvdXNyL2luY2x1ZGUsL3Vzci9saWIgXAorKwkgL3Vzci9pbmNsdWRlLC91c3IvbGliNjQgXAorIAkgL29wdC9pbmNsdWRlL3BjcmUsL29wdC9saWIgXAorIAkgL29wdC9wY3JlL2luY2x1ZGUsL29wdC9wY3JlL2xpYiBcCisgCSAvb3B0L2luY2x1ZGUsL29wdC9saWIiCitAQCAtNzAyMSwxNCArNzAyMiwxNCBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIHBjcmUgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzIC4uLiAiID4mNjsgfQorICAgICAgICAgeGluY2Rpcj1gZWNobyAkaW5jbHVkZV9hbmRfbGliIHwgdHIgJywnICcgJyB8IGF3ayAne3ByaW50ICQxfSdgCisgCXhsaWJkaXI9YGVjaG8gJGluY2x1ZGVfYW5kX2xpYiB8IHRyICcsJyAnICcgfCBhd2sgJ3twcmludCAkMn0nYAorIAlmb3VuZD0wCistCWlmIHRlc3QgLXIgJHhpbmNkaXIvJHhpbmNmaWxlCisrCWlmIHRlc3QgLXIgJFBLR19DT05GSUdfU1lTUk9PVF9ESVIvJHhpbmNkaXIvJHhpbmNmaWxlCisgCXRoZW4KKyAJICBmb3IgRSBpbiAkZXh0cworIAkgIGRvCistCSAgICBpZiB0ZXN0IC1yICIkeGxpYmRpci8keGxpYmZpbGUuJEUiCisrCSAgICBpZiB0ZXN0IC1yICIkUEtHX0NPTkZJR19TWVNST09UX0RJUi8keGxpYmRpci8keGxpYmZpbGUuJEUiCisgCSAgICB0aGVuCistCSAgICAgIGpkX3BjcmVfaW5jbHVkZV9kaXI9IiR4aW5jZGlyIgorLQkgICAgICBqZF9wY3JlX2xpYnJhcnlfZGlyPSIkeGxpYmRpciIKKysJICAgICAgamRfcGNyZV9pbmNsdWRlX2Rpcj0iJFBLR19DT05GSUdfU1lTUk9PVF9ESVIvJHhpbmNkaXIiCisrCSAgICAgIGpkX3BjcmVfbGlicmFyeV9kaXI9IiRQS0dfQ09ORklHX1NZU1JPT1RfRElSLyR4bGliZGlyIgorIAkgICAgICBqZF93aXRoX3BjcmVfbGlicmFyeT0ieWVzIgorIAkgICAgICBmb3VuZD0xCisgCSAgICAgIGJyZWFrCitAQCAtNzA1NCw1NiArNzA1NSw3IEBAICRhc19lY2hvICJ5ZXM6ICRqZF9wY3JlX2xpYnJhcnlfZGlyIGFuZCAkamRfcGNyZV9pbmNsdWRlX2RpciIgPiY2OyB9CisgICAgIHRoZW4KKyAgICAgICBQQ1JFX0xJQj0iIgorICAgICBlbHNlCistCistaWYgdGVzdCAiWCRqZF9wY3JlX2xpYnJhcnlfZGlyIiAhPSAiWCIKKy10aGVuCistICBpZiB0ZXN0ICJYJFJQQVRIIiA9ICJYIgorLSAgdGhlbgorLQorLWNhc2UgIiRob3N0X29zIiBpbgorLSAgKmxpbnV4Knwqc29sYXJpcyogKQorLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCistICAgIHRoZW4KKy0gICAgICBpZiB0ZXN0ICJYJGFjX1Jfbm9zcGFjZSIgPSAiWG5vIgorLSAgICAgIHRoZW4KKy0gICAgICAgIFJQQVRIPSItV2wsLVIsIgorLSAgICAgIGVsc2UKKy0gICAgICAgIFJQQVRIPSItV2wsLVIiCistICAgICAgZmkKKy0gICAgZWxzZQorLSAgICAgIGlmIHRlc3QgIlgkYWNfUl9ub3NwYWNlIiA9ICJYbm8iCistICAgICAgdGhlbgorLSAgICAgICAgUlBBVEg9Ii1SICIKKy0gICAgICBlbHNlCistCVJQQVRIPSItUiIKKy0gICAgICBmaQorLSAgICBmaQorLSAgOzsKKy0gICpvc2YqfCpvcGVuYnNkKikKKy0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcworLSAgICB0aGVuCistICAgICAgUlBBVEg9Ii1XbCwtcnBhdGgsIgorLSAgICBlbHNlCistICAgICAgUlBBVEg9Ii1ycGF0aCAiCistICAgIGZpCistICA7OworLSAgKm5ldGJzZCopCistICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSItV2wsLVIiCistICAgIGZpCistICA7OworLWVzYWMKKy0KKy0gICAgaWYgdGVzdCAiWCRSUEFUSCIgIT0gIlgiCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iJFJQQVRIJGpkX3BjcmVfbGlicmFyeV9kaXIiCistICAgIGZpCistICBlbHNlCistICAgIFJQQVRIPSIkUlBBVEg6JGpkX3BjcmVfbGlicmFyeV9kaXIiCistICBmaQorLWZpCistCisrICAgICAgUlBBVEg9IiIKKyAgICAgZmkKKyAKKyAgICAgUENSRV9JTkM9LUkkamRfcGNyZV9pbmNsdWRlX2RpcgorLS0gCisxLjcuNC4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3JwYXRoZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvcnBhdGhmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjYWM5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3JwYXRoZml4LnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK1dpdGhvdXQgdGhpcyBwYXRjaCB3ZSBzZWUgcnBhdGhzIGhhcmRjb2RlZCBpbnRvIHRoZSBidWlsZCB3aGljaCByZXN1bHRzIGluIFFBCit3YXJuaW5ncy4gVGhlc2UgcnBhdGhzIGFyZSBub3QgbmVlZGVkIHNvIGxldHMgdHVybiB0aGlzIG9mZi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisoYnV0IGNvdWxkIGJlIHR1cm5lZCBpbnRvIGEgcHJvcGVyIGNvbmZpZ3VyZSBvcHRpb24pCisKK1JQIDIwMTIvMDMvMTQKKworSW5kZXg6IHNsYW5nLTIuMi40L2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNsYW5nLTIuMi40Lm9yaWcvY29uZmlndXJlCTIwMTItMDMtMTQgMjM6NDA6MDEuMjgzNTYwNjc5ICswMDAwCisrKysgc2xhbmctMi4yLjQvY29uZmlndXJlCTIwMTItMDMtMTQgMjM6NDE6MTguMDIzNTU4OTAwICswMDAwCitAQCAtNjA4MSw1NiArNjA4MSw3IEBACisgRUxGX0NGTEFHUz0iJEVMRl9DRkxBR1MgJElFRUVfQ0ZMQUdTIgorIENGTEFHUz0iJENGTEFHUyAkSUVFRV9DRkxBR1MiCisgCistCistaWYgdGVzdCAiWCRsaWJkaXIiICE9ICJYIgorLXRoZW4KKy0gIGlmIHRlc3QgIlgkUlBBVEgiID0gIlgiCistICB0aGVuCistCistY2FzZSAiJGhvc3Rfb3MiIGluCistICAqbGludXgqfCpzb2xhcmlzKiApCistICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKKy0gICAgdGhlbgorLSAgICAgIGlmIHRlc3QgIlgkYWNfUl9ub3NwYWNlIiA9ICJYbm8iCistICAgICAgdGhlbgorLSAgICAgICAgUlBBVEg9Ii1XbCwtUiwiCistICAgICAgZWxzZQorLSAgICAgICAgUlBBVEg9Ii1XbCwtUiIKKy0gICAgICBmaQorLSAgICBlbHNlCistICAgICAgaWYgdGVzdCAiWCRhY19SX25vc3BhY2UiID0gIlhubyIKKy0gICAgICB0aGVuCistICAgICAgICBSUEFUSD0iLVIgIgorLSAgICAgIGVsc2UKKy0JUlBBVEg9Ii1SIgorLSAgICAgIGZpCistICAgIGZpCistICA7OworLSAgKm9zZip8Km9wZW5ic2QqKQorLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iLVdsLC1ycGF0aCwiCistICAgIGVsc2UKKy0gICAgICBSUEFUSD0iLXJwYXRoICIKKy0gICAgZmkKKy0gIDs7CistICAqbmV0YnNkKikKKy0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcworLSAgICB0aGVuCistICAgICAgUlBBVEg9Ii1XbCwtUiIKKy0gICAgZmkKKy0gIDs7CistZXNhYworLQorLSAgICBpZiB0ZXN0ICJYJFJQQVRIIiAhPSAiWCIKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSIkUlBBVEgkbGliZGlyIgorLSAgICBmaQorLSAgZWxzZQorLSAgICBSUEFUSD0iJFJQQVRIOiRsaWJkaXIiCistICBmaQorLWZpCistCisrUlBBVEg9IiIKKyAKKyAjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorICMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NsYW5nLWZpeC10aGUtaWNvbnYtZXhpc3RlbmNlLWNoZWNraW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvc2xhbmctZml4LXRoZS1pY29udi1leGlzdGVuY2UtY2hlY2tpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU4ZmU5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NsYW5nLWZpeC10aGUtaWNvbnYtZXhpc3RlbmNlLWNoZWNraW5nLnBhdGNoCkBAIC0wLDAgKzEsMTE2IEBACitGcm9tIDQ1ODhmNGEwMjg3Nzg3Nzg4ZWI4NmZiMTZmMzI2Y2JhYTc0NTRlMWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBaaGVuZyBKdW5saW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KK0RhdGU6IE1vbiwgMTYgSnVuIDIwMTQgMTI6NTE6MjUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gc2xhbmc6IGZpeCB0aGUgaWNvbnYgZXhpc3RlbmNlIGNoZWNraW5nCisKK1doZW4gY2hlY2tpbmcgd2hldGhlciB0aGVyZSBpcyBpY29udiwgdGhlIGNvbmZpZ3VyZSBmaWxlIGFsd2F5cyBjaGVjayAKK3RoZSBob3N0IGVudi4KKworTm93IHdlIG1ha2UgaXQgd29ya2luZyBwcm9wZXJseSBieSBhZGRpbmcgY29ycmVjdCBwcmVmaXggZm9yIGNyb3NzLQorY29tcGlsaW5nIGVudmlyb25tZW50LgorCitXaGVuIGVuYWJsaW5nIGljb252LW1vZHVsZSwgd2Ugc2VlIGEgUUEgd2FybmluZyBiZWNhdXNlIHJwYXRocyBoYXJkY29kZWQKK2ludG8gdGhlIGJ1aWxkLiBBbmQgcnBhdGhzIGFyZSBub3QgbmVlZGVkLCBzbyBsZXQncyB0dXJuIHRoaXMgb2ZmLgorCitUaGlzIHBhdGNoIGlzIGdlbmVyYXRlZCBieSByZWZlcmVuY2luZyB0aGUgZXhpc3RpbmcgImZpeC1jaGVjay1wY3JlIgorcGF0Y2guCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBaaGVuZyBKdW5saW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDYwICsrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDU0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA3YTk2MjU2Li45MTYzMmYzIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC03OTA5LDYgKzc5MDksNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIGljb252IGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcyAuLi4gIiA+JjY7IH0KKyAJIC91c3IvaW5jbHVkZS9pY29udiwvdXNyL2xpYiBcCisgCSAvdXNyL2ljb252L2luY2x1ZGUsL3Vzci9pY29udi9saWIgXAorIAkgL3Vzci9pbmNsdWRlLC91c3IvbGliIFwKKysJIC91c3IvaW5jbHVkZSwvdXNyL2xpYjY0IFwKKyAJIC9vcHQvaW5jbHVkZS9pY29udiwvb3B0L2xpYiBcCisgCSAvb3B0L2ljb252L2luY2x1ZGUsL29wdC9pY29udi9saWIgXAorIAkgL29wdC9pbmNsdWRlLC9vcHQvbGliIgorQEAgLTc5MzksMTQgKzc5NDAsMTQgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRoZSBpY29udiBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMgLi4uICIgPiY2OyB9CisgICAgICAgICB4aW5jZGlyPWBlY2hvICRpbmNsdWRlX2FuZF9saWIgfCB0ciAnLCcgJyAnIHwgYXdrICd7cHJpbnQgJDF9J2AKKyAJeGxpYmRpcj1gZWNobyAkaW5jbHVkZV9hbmRfbGliIHwgdHIgJywnICcgJyB8IGF3ayAne3ByaW50ICQyfSdgCisgCWZvdW5kPTAKKy0JaWYgdGVzdCAtciAkeGluY2Rpci8keGluY2ZpbGUKKysJaWYgdGVzdCAtciAkUEtHX0NPTkZJR19TWVNST09UX0RJUi8keGluY2Rpci8keGluY2ZpbGUKKyAJdGhlbgorIAkgIGZvciBFIGluICRleHRzCisgCSAgZG8KKy0JICAgIGlmIHRlc3QgLXIgIiR4bGliZGlyLyR4bGliZmlsZS4kRSIKKysJICAgIGlmIHRlc3QgLXIgIiRQS0dfQ09ORklHX1NZU1JPT1RfRElSLyR4bGliZGlyLyR4bGliZmlsZS4kRSIKKyAJICAgIHRoZW4KKy0JICAgICAgamRfaWNvbnZfaW5jbHVkZV9kaXI9IiR4aW5jZGlyIgorLQkgICAgICBqZF9pY29udl9saWJyYXJ5X2Rpcj0iJHhsaWJkaXIiCisrCSAgICAgIGpkX2ljb252X2luY2x1ZGVfZGlyPSIkUEtHX0NPTkZJR19TWVNST09UX0RJUi8keGluY2RpciIKKysJICAgICAgamRfaWNvbnZfbGlicmFyeV9kaXI9IiRQS0dfQ09ORklHX1NZU1JPT1RfRElSLyR4bGliZGlyIgorIAkgICAgICBqZF93aXRoX2ljb252X2xpYnJhcnk9InllcyIKKyAJICAgICAgZm91bmQ9MQorIAkgICAgICBicmVhaworQEAgLTc5NzIsNTYgKzc5NzMsNyBAQCAkYXNfZWNobyAieWVzOiAkamRfaWNvbnZfbGlicmFyeV9kaXIgYW5kICRqZF9pY29udl9pbmNsdWRlX2RpciIgPiY2OyB9CisgICAgIHRoZW4KKyAgICAgICBJQ09OVl9MSUI9IiIKKyAgICAgZWxzZQorLQorLWlmIHRlc3QgIlgkamRfaWNvbnZfbGlicmFyeV9kaXIiICE9ICJYIgorLXRoZW4KKy0gIGlmIHRlc3QgIlgkUlBBVEgiID0gIlgiCistICB0aGVuCistCistY2FzZSAiJGhvc3Rfb3MiIGluCistICAqbGludXgqfCpzb2xhcmlzKiApCistICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKKy0gICAgdGhlbgorLSAgICAgIGlmIHRlc3QgIlgkYWNfUl9ub3NwYWNlIiA9ICJYbm8iCistICAgICAgdGhlbgorLSAgICAgICAgUlBBVEg9Ii1XbCwtUiwiCistICAgICAgZWxzZQorLSAgICAgICAgUlBBVEg9Ii1XbCwtUiIKKy0gICAgICBmaQorLSAgICBlbHNlCistICAgICAgaWYgdGVzdCAiWCRhY19SX25vc3BhY2UiID0gIlhubyIKKy0gICAgICB0aGVuCistICAgICAgICBSUEFUSD0iLVIgIgorLSAgICAgIGVsc2UKKy0JUlBBVEg9Ii1SIgorLSAgICAgIGZpCistICAgIGZpCistICA7OworLSAgKm9zZip8Km9wZW5ic2QqKQorLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iLVdsLC1ycGF0aCwiCistICAgIGVsc2UKKy0gICAgICBSUEFUSD0iLXJwYXRoICIKKy0gICAgZmkKKy0gIDs7CistICAqbmV0YnNkKikKKy0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcworLSAgICB0aGVuCistICAgICAgUlBBVEg9Ii1XbCwtUiIKKy0gICAgZmkKKy0gIDs7CistZXNhYworLQorLSAgICBpZiB0ZXN0ICJYJFJQQVRIIiAhPSAiWCIKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSIkUlBBVEgkamRfaWNvbnZfbGlicmFyeV9kaXIiCistICAgIGZpCistICBlbHNlCistICAgIFJQQVRIPSIkUlBBVEg6JGpkX2ljb252X2xpYnJhcnlfZGlyIgorLSAgZmkKKy1maQorLQorKyAgICAgIFJQQVRIPSIiCisgICAgIGZpCisgCisgICAgIElDT05WX0lOQz0tSSRqZF9pY29udl9pbmNsdWRlX2RpcgorLS0gCisxLjguMy40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NwcmludGYtYnVnLWNvbmNlcm5pbmctOC1iaXQtY2hhcmFjdGVycy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NwcmludGYtYnVnLWNvbmNlcm5pbmctOC1iaXQtY2hhcmFjdGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjAwMDFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvc3ByaW50Zi1idWctY29uY2VybmluZy04LWJpdC1jaGFyYWN0ZXJzLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworRnJvbSAzYTA1ZDFhOTIwMTQwZTlmMmM3Mjc5MWMxMmY2NjQyMTNmZWI0NmRmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFuZnJlZCBIYW5rZSA8TWFuZnJlZC5IYW5rZUB0bmd0ZWNoLmNvbT4KK0RhdGU6IFRodSwgMjAgSnVuIDIwMTMgMTA6MjQ6MTIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gc3ByaW50ZiBidWcgKGNvbmNlcm5pbmcgJWMgZm9yIDgtYml0IGNoYXJhY3RlciBpbiBub24tVVRGOAorIG1vZGUpIGZpeGVkCisKK2NoYXIgKnN0ciBwb2ludHMgdG8gU0x1Y2hhcl9UeXBlIHV0ZjhfYnVmW10sIHdoaWNoIGhhZCB0b28gc21hbGwgc2NvcGUKKworc3JjL3Rlc3Qvc3Ryb3BzLnNsIGZhaWxlZCBpbiB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50OgorIC0gY29tcGlsZXI6ICBnY2MgKERlYmlhbiA0LjcuMi01KSA0LjcuMgorIC0gQ0ZMQUdTOiAgICAtZyAtTzIKKyAtIGxpYmM6ICAgICAgR05VIEMgTGlicmFyeSAoRGViaWFuIEVHTElCQyAyLjEzLTM4KSBzdGFibGUgcmVsZWFzZSB2ZXJzaW9uIDIuMTMKKyAtIGtlcm5lbDogICAgMy4yLjAtNC02ODYtcGFlICMxIFNNUCBEZWJpYW4gMy4yLjM5LTIgaTY4NiBHTlUvTGludXgKKy0tLQorIHNyYy9zbHN0cm9wcy5jIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3Nsc3Ryb3BzLmMgYi9zcmMvc2xzdHJvcHMuYworaW5kZXggY2U2YWNiMC4uY2JiYmIwMSAxMDA2NDQKKy0tLSBhL3NyYy9zbHN0cm9wcy5jCisrKysgYi9zcmMvc2xzdHJvcHMuYworQEAgLTE4ODQsNiArMTg4NCw3IEBAIHN0YXRpYyBjaGFyICpTTGRvX3NwcmludGYgKGNoYXIgKmZtdCkgLyp7e3sqLworICNlbmRpZgorICAgIHVuc2lnbmVkIGNoYXIgdWNoOworICAgIGludCB1c2VfbG9uZyA9IDAsIHVzZV9hbHRfZm9ybWF0ID0gMDsKKysgICBTTHVjaGFyX1R5cGUgdXRmOF9idWZbU0xVVEY4X01BWF9NQkxFTisxXTsKKyAKKyAgICB3aGlsZSAoMSkKKyAgICAgIHsKK0BAIC0yMDcxLDcgKzIwNzIsNiBAQCBzdGF0aWMgY2hhciAqU0xkb19zcHJpbnRmIChjaGFyICpmbXQpIC8qe3t7Ki8KKyAjZW5kaWYKKyAJICAgICAgIHsKKyAJCSAgU0x3Y2hhcl9UeXBlIHdjOworLQkJICBTTHVjaGFyX1R5cGUgdXRmOF9idWZbU0xVVEY4X01BWF9NQkxFTisxXTsKKyAKKyAJCSAgaWYgKC0xID09IFNMYW5nX3BvcF93Y2hhciAoJndjKSkKKyAJCSAgICByZXR1cm4gb3V0OworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nXzIuMi40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmdfMi4yLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEyMmY1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nXzIuMi40LmJiCkBAIC0wLDAgKzEsNTQgQEAKK1NVTU1BUlkgPSAiVGhlIHNoYXJlZCBsaWJyYXJ5IGZvciB0aGUgUy1MYW5nIGV4dGVuc2lvbiBsYW5ndWFnZSIKKworREVTQ1JJUFRJT04gPSAiUy1MYW5nIGlzIGFuIGludGVycHJldGVkIGxhbmd1YWdlIGFuZCBhIHByb2dyYW1taW5nIGxpYnJhcnkuICBUaGUgXAorUy1MYW5nIGxhbmd1YWdlIHdhcyBkZXNpZ25lZCBzbyB0aGF0IGl0IGNhbiBiZSBlYXNpbHkgZW1iZWRkZWQgaW50byBcCithIHByb2dyYW0gdG8gcHJvdmlkZSB0aGUgcHJvZ3JhbSB3aXRoIGEgcG93ZXJmdWwgZXh0ZW5zaW9uIGxhbmd1YWdlLiBcCitUaGUgUy1MYW5nIGxpYnJhcnksIHByb3ZpZGVkIGluIHRoaXMgcGFja2FnZSwgcHJvdmlkZXMgdGhlIFMtTGFuZyBcCitleHRlbnNpb24gbGFuZ3VhZ2UuICBTLUxhbmcncyBzeW50YXggcmVzZW1ibGVzIEMsIHdoaWNoIG1ha2VzIGl0IGVhc3kgXAordG8gcmVjb2RlIFMtTGFuZyBwcm9jZWR1cmVzIGluIEMgaWYgeW91IG5lZWQgdG8uIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmplZHNvZnQub3JnL3NsYW5nLyIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAicGNyZSIKK1BSID0gInIxMiIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE1MmExOGE0NzJkNGY3ZTQ1NDc5YjA2NTYzNzE3YzAyIgorCisKK1NSQ19VUkkgPSAiZnRwOi8vc3BhY2UubWl0LmVkdS9wdWIvZGF2aXMvc2xhbmcvdjIuMi9zbGFuZy0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3JwYXRoZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1jaGVjay1wY3JlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NoYW5nZS1jaGFyLXR5cGUtdG8tc2lnbmVkLWNoYXItaW4tbWFjcm9zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NwcmludGYtYnVnLWNvbmNlcm5pbmctOC1iaXQtY2hhcmFjdGVycy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zbGFuZy1maXgtdGhlLWljb252LWV4aXN0ZW5jZS1jaGVja2luZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1lcnJvci1jb25mbGljdGluZy10eXBlcy1mb3ItcG9zaXhfY2xvc2UucGF0Y2ggXAorICAgICAgICAgICIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ZmNmZDQ0N2UzNzhmMDdkZDBjMGJhZTY3MWZlNjQ4NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5YTgyNTdhOWEyYTU1MDk5YWY4NThiMTMzMzhkYzhmM2EwNmRkMjA2OWY0NmYwZGYyYzljM2JiODRhMDFkNWRiIgorCitFWFRSQV9PRUNPTkYgKz0gIiAtLXdpdGhvdXQteiAtLXdpdGhvdXQtcG5nIC0td2l0aG91dC1vbmlnIC0teC1pbmNsdWRlcz0ke1NUQUdJTkdfRElSX0hPU1R9L3Vzci9pbmNsdWRlL1gxMSAtLXgtbGlicmFyaWVzPSR7U1RBR0lOR19ESVJfSE9TVH0vdXNyL2xpYiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgIyBzbGFuZyBrZWVwcyBjb25maWd1cmUuYWMgYW5kIHJlc3Qgb2YgYXV0b2NvbmYgZmlsZXMgaW4gYXV0b2NvbmYvIGRpcmVjdG9yeQorICAgICMgd2UgaGF2ZSB0byBnbyB0aGVyZSB0byBiZSBhYmxlIHRvIHJ1biBnbnUtY29uZmlnaXplIGNhdXNlIGl0IGV4cGVjdHMgY29uZmlndXJlLntpbixhY30KKyAgICAjIHRvIGJlIHByZXNlbnQuIFJlc3VsdGluZyBmaWxlcyBsYW5kIGluIGF1dG9jb25mL2F1dG9jb25mLyBzbyB3ZSBuZWVkIHRvIG1vdmUgdGhlbS4KKyAgICBjZCAke1N9L2F1dG9jb25mICYmIGdudS1jb25maWdpemUgLS1mb3JjZSAmJiBtdiBhdXRvY29uZi9jb25maWcuKiAuCisgICAgY2QgJHtCfQorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0gLWUgJ0lOU1RfTElCX0RJUj0ke1NUQUdJTkdfRElSX0hPU1R9L3Vzci9saWInCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vJHtCUE59L3YyL21vZHVsZXMvICR7ZGF0YWRpcn0vc2xzaC8iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke0JQTn0vdjIvbW9kdWxlcy8uZGVidWciCisKK1BBUkFMTEVMX01BS0UgPSAiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdC0zLjMvZml4LWVycm9yLXJldHVybi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdC0zLjMvZml4LWVycm9yLXJldHVybi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzI5OTVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0LTMuMy9maXgtZXJyb3ItcmV0dXJuLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK1RoaXMgcGF0Y2ggZml4aWVzIHRoZSB3cm9uZyByZXR1cm4gY29kZSBvZiBzdGF0IC1oLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFpoYW5nbGUgWWFuZyA8emhhbmdsZS55YW5nQHdpbmRyaXZlci5jb20+CisKKy0tLSBzdGF0LTMuMy9zdGF0LmMub3JpZwkyMDEzLTA4LTIyIDEwOjQ5OjQ1LjAwMDAwMDAwMCArMDgwMAorKysrIHN0YXQtMy4zL3N0YXQuYwkyMDEzLTA4LTIyIDEwOjUwOjMxLjAwMDAwMDAwMCArMDgwMAorQEAgLTg0NSw3ICs4NDUsNyBAQAorICAgICBmcHJpbnRmKHN0ZGVyciwgIlx0XHQlJVMgLSBTZWN1cml0eSBJRCBpbiBTRS1MaW51eFxuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCAiXHRcdCUlQyAtIFNlY3VyaXR5IGNvbnRleHQgaW4gU0UtTGludXhcbiIpOworICAgICBmcHJpbnRmKHN0ZGVyciwgIlx0XHQlJWQgLSBGcmVlIGZpbGUgbm9kZXMgaW4gZmlsZSBzeXN0ZW1cbiIpOworLSAgICBleGl0KDEpOworKyAgICBleGl0KDApOworIH0KKyAgIAorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0XzMuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdF8zLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUxODMxZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdF8zLjMuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJDb21tYW5kIGxpbmUgZmlsZSBzdGF0dXMgZGlzcGxheSB1dGlsaXR5IgorREVTQ1JJUFRJT04gPSAiRGlzcGxheXMgYWxsIGluZm9ybWF0aW9uIGFib3V0IGEgZmlsZSB0aGF0IHRoZSBzdGF0KCkgY2FsbCBwcm92aWRlcyBhbmQgYWxsIGluZm9ybWF0aW9uIGFib3V0IGEgZmlsZXN5c3RlbSB0aGF0IHN0YXRmcygpIHByb3ZpZGVzLiIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZUklHSFQ7bWQ1PTM5ODg2YjA3N2ZkMDcyZTg3NmU1YzRjMTYzMTBiNjMxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0dQTDttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5pYmlibGlvLm9yZy9wdWIvTGludXgvdXRpbHMvZmlsZS8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LWVycm9yLXJldHVybi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjM3ZTI0N2U4ZTQwMGFkOTIwNWYxYjA1MDBiNzI4ZmQzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcwNzFmMDM4NGE0MjNhOTM4ZGQ1NDJjMWYwODU0N2EwMjgyNGY2MzU5YWNkM2VmM2Y5NDRiMmM0YzJkMWVlMDkiCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0gJHtEfSR7bWFuZGlyfS9tYW4xCisJaW5zdGFsbCAtbSA3NTUgc3RhdCAke0R9JHtiYXNlX2JpbmRpcn0vc3RhdC5zdGF0CisJaW5zdGFsbCAtbSA2NDQgc3RhdC4xICR7RH0ke21hbmRpcn0vbWFuMQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAic3RhdCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW3N0YXRdID0gIjIwMCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzdGF0XSA9ICIke2Jhc2VfYmluZGlyfS9zdGF0IgorQUxURVJOQVRJVkVfVEFSR0VUW3N0YXRdID0gIiR7YmFzZV9iaW5kaXJ9L3N0YXQuc3RhdCIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gInN0YXQuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzdGF0LjFdID0gIiR7bWFuZGlyfS9tYW4xL3N0YXQuMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0cmVzcy9maWxlcy90ZXhpbmZvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RyZXNzL2ZpbGVzL3RleGluZm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFjNTk1MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0cmVzcy9maWxlcy90ZXhpbmZvLnBhdGNoCkBAIC0wLDAgKzEsNzkgQEAKKy0tLSBhL2RvYy9zdHJlc3MudGV4aQorKysrIGIvZG9jL3N0cmVzcy50ZXhpCitAQCAtNjIsNDcgKzYyLDQ3IEBACisgCisgQHRhYmxlIEBzYW1wCisgQGl0ZW0gLT8KKy1AaXRlbXggLS1oZWxwCisrQGl0ZW0gLS1oZWxwCisgU2hvdyBoZWxwIGluZm9ybWF0aW9uLgorIAorLUBpdGVteCAtLXZlcnNpb24KKytAaXRlbSAtLXZlcnNpb24KKyBTaG93IHZlcnNpb24gaW5mb3JtYXRpb24uCisgCisgQGl0ZW0gLXYKKy1AaXRlbXggLS12ZXJib3NlCisrQGl0ZW0gLS12ZXJib3NlCisgVHVybiB1cCB2ZXJib3NpdHkuCisgCisgQGl0ZW0gLXEKKy1AaXRlbXggLS1xdWlldAorK0BpdGVtIC0tcXVpZXQKKyBUdXJuIGRvd24gdmVyYm9zaXR5LgorIAorIEBpdGVtIC1uCistQGl0ZW14IC0tZHJ5LXJ1bgorK0BpdGVtIC0tZHJ5LXJ1bgorIFNob3cgd2hhdCB3b3VsZCBoYXZlIGJlZW4gZG9uZS4KKyAKKyBAaXRlbSAtdCBAdmFye3NlY3N9CistQGl0ZW14IC0tdGltZW91dCBAdmFye3NlY3N9CisrQGl0ZW0gLS10aW1lb3V0IEB2YXJ7c2Vjc30KKyBUaW1lIG91dCBhZnRlciBAdmFye3NlY3N9IHNlY29uZHMuCisgCistQGl0ZW14IC0tYmFja29mZiBAdmFye3VzZWNzfQorK0BpdGVtIC0tYmFja29mZiBAdmFye3VzZWNzfQorIFdhaXQgZm9yIGZhY3RvciBvZiBAdmFye3VzZWNzfSBtaWNyb3NlY29uZHMgYmVmb3JlIHN0YXJ0aW5nIHdvcmsuCisgCisgQGl0ZW0gLWMgQHZhcntmb3Jrc30KKy1AaXRlbXggLS1jcHUgQHZhcntmb3Jrc30KKytAaXRlbSAtLWNwdSBAdmFye2ZvcmtzfQorIFNwYXduIEB2YXJ7Zm9ya3N9IHByb2Nlc3NlcyBlYWNoIHNwaW5uaW5nIG9uIEBzYW1we3NxcnQoKX0uCisgCisgQGl0ZW0gLWkgQHZhcntmb3Jrc30KKy1AaXRlbXggLS1pbyBAdmFye2ZvcmtzfQorK0BpdGVtIC0taW8gQHZhcntmb3Jrc30KKyBTcGF3biBAdmFye2ZvcmtzfSBwcm9jZXNzZXMgZWFjaCBzcGlubmluZyBvbiBAc2FtcHtzeW5jKCl9LgorIAorIEBpdGVtIC1tIEB2YXJ7Zm9ya3N9CistQGl0ZW14IC0tdm0gQHZhcntmb3Jrc30KKytAaXRlbSAtLXZtIEB2YXJ7Zm9ya3N9CisgU3Bhd24gQHZhcntmb3Jrc30gcHJvY2Vzc2VzIGVhY2ggc3Bpbm5pbmcgb24gQHNhbXB7bWFsbG9jKCl9LgorIAorLUBpdGVteCAtLXZtLWJ5dGVzIEB2YXJ7Ynl0ZXN9CisrQGl0ZW0gLS12bS1ieXRlcyBAdmFye2J5dGVzfQorIEFsbG9jYXRlIEB2YXJ7Ynl0ZXN9IG51bWJlciBvZiBieXRlcy4gIFRoZSBkZWZhdWx0IGlzIDEuCisgCistQGl0ZW14IC0tdm0taGFuZworK0BpdGVtIC0tdm0taGFuZworIEluc3RydWN0IGVhY2ggdm0gaG9nIHByb2Nlc3MgdG8gZ28gdG8gc2xlZXAgYWZ0ZXIgYWxsb2NhdGluZyBtZW1vcnkuICBUaGlzCisgY29udHJhc3RzIHdpdGggdGhlaXIgbm9ybWFsIGJlaGF2aW9yLCB3aGljaCBpcyB0byBmcmVlIHRoZSBtZW1vcnkgYW5kCisgcmVhbGxvY2F0ZSBAZW1waHthZCBpbmZpbml0dW19LiAgVGhpcyBpcyB1c2VmdWwgZm9yIHNpbXVsYXRpbmcgbG93IG1lbW9yeQorQEAgLTExNCwxMyArMTE0LDEzIEBACisgQGVuZCBleGFtcGxlCisgCisgQGl0ZW0gLWQgQHZhcntmb3Jrc30KKy1AaXRlbXggLS1oZGQgQHZhcntmb3Jrc30KKytAaXRlbSAtLWhkZCBAdmFye2ZvcmtzfQorIFNwYXduIEB2YXJ7Zm9ya3N9IHByb2Nlc3NlcyBlYWNoIHNwaW5uaW5nIG9uIEBzYW1we3dyaXRlKCl9LgorIAorLUBpdGVteCAtLWhkZC1ieXRlcyBAdmFye2J5dGVzfQorK0BpdGVtIC0taGRkLWJ5dGVzIEB2YXJ7Ynl0ZXN9CisgV3JpdGUgQHZhcntieXRlc30gbnVtYmVyIG9mIGJ5dGVzLiAgVGhlIGRlZmF1bHQgaXMgMUdCLgorIAorLUBpdGVteCAtLWhkZC1ub2NsZWFuCisrQGl0ZW0gLS1oZGQtbm9jbGVhbgorIERvIG5vdCB1bmxpbmsgZmlsZShzKSB0byB3aGljaCByYW5kb20gQVNDSUkgZGF0YSBpcyB3cml0dGVuLgorIAorIEBlbmQgdGFibGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0cmVzcy9zdHJlc3NfMS4wLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdHJlc3Mvc3RyZXNzXzEuMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiN2U0YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdHJlc3Mvc3RyZXNzXzEuMC40LmJiCkBAIC0wLDAgKzEsMTQgQEAKK0RFU0NSSVBUSU9OID0gIkRlbGliZXJhdGVseSBzaW1wbGUgd29ya2xvYWQgZ2VuZXJhdG9yIGZvciBQT1NJWCBzeXN0ZW1zLiBJdCBcCitpbXBvc2VzIGEgY29uZmlndXJhYmxlIGFtb3VudCBvZiBDUFUsIG1lbW9yeSwgSS9PLCBhbmQgZGlzayBzdHJlc3Mgb24gdGhlIHN5c3RlbS4iCitIT01FUEFHRSA9ICJodHRwOi8vcGVvcGxlLnNlYXMuaGFydmFyZC5lZHUvfmFwdy9zdHJlc3MvIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorCitTUkNfVVJJID0gImh0dHA6Ly9wZW9wbGUuc2Vhcy5oYXJ2YXJkLmVkdS9+YXB3LyR7QlBOfS8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vdGV4aW5mby5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjg5MGE0MjM2ZGQxNjU2NzkyZjNlZjlhMTkwY2Y5OWVmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA1N2U0ZmMyYTc3MDY0MTFlMTAxNGJmMTcyZTRmOTRiNjNhMTJmMTg0MTIzNzhmY2E4Njg0Y2E5MjQwODgyNWIiCisKK2luaGVyaXQgYXV0b3Rvb2xzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL2ZpbGVzL3N1ZG8ucGFtIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9maWxlcy9zdWRvLnBhbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmMyNmU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9maWxlcy9zdWRvLnBhbQpAQCAtMCwwICsxLDYgQEAKKyMlUEFNLTEuMAorYXV0aCAgICAgICBpbmNsdWRlICAgICAgY29tbW9uLWF1dGgKK2FjY291bnQgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hY2NvdW50CitwYXNzd29yZCAgIGluY2x1ZGUgICAgICBjb21tb24tcGFzc3dvcmQKK3Nlc3Npb24gICAgcmVxdWlyZWQgICAgIHBhbV9rZXlpbml0LnNvIHJldm9rZQorc2Vzc2lvbiAgICByZXF1aXJlZCAgICAgcGFtX2xpbWl0cy5zbwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI1ODc2YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby5pbmMKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJQcm92aWRlIGxpbWl0ZWQgc3VwZXIgdXNlciBwcml2aWxlZ2VzIHRvIHNwZWNpZmljIHVzZXJzIgorREVTQ1JJUFRJT04gPSAiU3VkbyAoc3VwZXJ1c2VyIGRvKSBhbGxvd3MgYSBzeXN0ZW0gYWRtaW5pc3RyYXRvciB0byBnaXZlIGNlcnRhaW4gdXNlcnMgKG9yIGdyb3VwcyBvZiB1c2VycykgdGhlIGFiaWxpdHkgdG8gcnVuIHNvbWUgKG9yIGFsbCkgY29tbWFuZHMgYXMgcm9vdCB3aGlsZSBsb2dnaW5nIGFsbCBjb21tYW5kcyBhbmQgYXJndW1lbnRzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuc3Vkby53cyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3d3dy5zdWRvLndzL2J1Z3MvIgorU0VDVElPTiA9ICJhZG1pbiIKK0xJQ0VOU0UgPSAiSVNDICYgQlNEICYgWmxpYiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RvYy9MSUNFTlNFO21kNT1jMTZlNTQyNDA4YWJkYTAxM2Q2NzJiZThlYjg4ZDE3NCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wbHVnaW5zL3N1ZG9lcnMvcmVkYmxhY2suYztiZWdpbmxpbmU9MTtlbmRsaW5lPTQxO21kNT1jZmU0MTExMmY5NmMxOWEwNzQ5MzRkMTI4ZjQ1YzY5MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXRpbC9yZWFsbG9jYXJyYXkuYztiZWdpbmxpbmU9MztlbmRsaW5lPTE2O21kNT04NWIwOTA1Yjc5NWQ0ZDU4YmYyZTAwNjM1NjQ5ZWVjNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXRpbC9mbm1hdGNoLmM7YmVnaW5saW5lPTM7ZW5kbGluZT0yNzttZDU9NjdmODNlZTliZDQ1NjU1NzM5NzA4MmY4ZjFiZTBlZmQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3V0aWwvZ2V0Y3dkLmM7YmVnaW5saW5lPTU7ZW5kbGluZT0yNzttZDU9NDQ5YWY0Y2M1N2ZjN2Q0NmY0MjA5MDYwOGJhM2U2ODEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3V0aWwvZ2xvYi5jO2JlZ2lubGluZT02O2VuZGxpbmU9MzE7bWQ1PTU4NzI3MzMxNDZiOWViMGRlYjc5ZTFmNjY0ODE1Yjg1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi91dGlsL3NucHJpbnRmLmM7YmVnaW5saW5lPTY7ZW5kbGluZT0zNDttZDU9YzgyYzFiM2E1YzMyZTA4NTQ1YzllYzVkNzFlNDFlNTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9zdWRvX3F1ZXVlLmg7YmVnaW5saW5lPTU7ZW5kbGluZT0yNzttZDU9NDQ5YWY0Y2M1N2ZjN2Q0NmY0MjA5MDYwOGJhM2U2ODEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3V0aWwvaW5ldF9wdG9uLmM7YmVnaW5saW5lPTM7ZW5kbGluZT0xNzttZDU9Mzk3MGFiMDUxOGFiNzljYmQwYmFmYjY5N2YxMGIzM2EiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3psaWJdID0gIi0tZW5hYmxlLXpsaWIsLS1kaXNhYmxlLXpsaWIsemxpYiIKKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vc3Vkb2VycyIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1lZGl0b3I9L2Jpbi92aSAtLXdpdGgtZW52LWVkaXRvciIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLW11c2wgPSAiIC0tZGlzYWJsZS1oYXJkZW5pbmcgIgorCisjIG1rc2lnbmFtZS9ta3NpZ2xpc3QgYXJlIHVzZWQgb24gYnVpbGQgaG9zdCB0byBnZW5lcmF0ZSBzb3VyY2UgZmlsZXMKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisJb2VfcnVubWFrZSBTU1BfQ0ZMQUdTPSIiIFNTUF9MREZMQUdTPSIiIENDPSIkQlVJTERfQ0MiIENGTEFHUz0iJEJVSUxEX0NGTEFHUyIgQ1BQRkxBR1M9IiRCVUlMRF9DUFBGTEFHUyAtSSR7U30vaW5jbHVkZSAtSSR7U30gLUkke0J9IiAgLUMgbGliL3V0aWwgbWtzaWduYW1lIG1rc2lnbGlzdAorfQorCisjIEV4cGxpY2l0bHkgY3JlYXRlICR7bG9jYWxzdGF0ZWRpcn0vbGliIGJlZm9yZSBkb19pbnN0YWxsIHRvIGVuc3VyZQorIyB0aGUgZGlyZWN0b3J5IGlzIGFjY2Vzc2libGUgYnkgYWxsIHVzZXJzLiBPdGhlcndpc2UgdGhlIG1raW5zdGFsbGRpcnMKKyMgc2NyaXB0IChmcm9tIHN1ZG8pIHdpbGwgcmVjdXJzaXZlbHkgY3JlYXRlICR7bG9jYWxzdGF0ZWRpcn0vbGliL3N1ZG8KKyMgYW5kIHRoZW4gY2htb2QgZWFjaCBkaXJlY3Rvcnkgd2l0aCAwNzAwIHBlcm1pc3Npb25zLCB3aGljaCBpc24ndCB3aGF0CisjIHdlIHdhbnQgKGkuZSwgdXNlcnMgd291bGQgbm90IGJlIGFibGUgdG8gYWNjZXNzIC92YXIvbGliKS4KK2RvX2luc3RhbGxfcHJlcGVuZCAoKXsKKwlta2RpciAtcCAke0R9LyR7bG9jYWxzdGF0ZWRpcn0vbGliCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8vMDAwMS1JbmNsdWRlLXN5cy10eXBlcy5oLWZvci1pZF90LWRlZmluaXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8vMDAwMS1JbmNsdWRlLXN5cy10eXBlcy5oLWZvci1pZF90LWRlZmluaXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzNmNkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby8wMDAxLUluY2x1ZGUtc3lzLXR5cGVzLmgtZm9yLWlkX3QtZGVmaW5pdGlvbi5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDM4NmUyYzJmYTJhYjJlMDJlZjcxYzI2OGE1NzIwNTEzOWJlMzI5YWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAzMSBBdWcgMjAxNSAwNzowNzo0OSArMDAwMAorU3ViamVjdDogW1BBVENIXSBJbmNsdWRlIHN5cy90eXBlcy5oIGZvciBpZF90IGRlZmluaXRpb24KKworL3N1ZG9fdXRpbC5oOjIxOToxNDogZXJyb3I6IHVua25vd24gdHlwZSBuYW1lICdpZF90JworIF9fZHNvX3B1YmxpYyBpZF90IHN1ZG9fc3RydG9pZF92MShjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnNlcCwKKyBjaGFyICoqZW5kcCwgY29uc3QgY2hhciAqKmVycnN0cik7CisgICAgICAgICAgICAgICBeCisJICAgICAgIG1ha2VbMV06ICoqKiBbcHJlc2VydmVfZmRzLm9dIEVycm9yIDEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBpbmNsdWRlL3N1ZG9fdXRpbC5oIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3Vkb191dGlsLmggYi9pbmNsdWRlL3N1ZG9fdXRpbC5oCitpbmRleCA4OWM5Zjg5Li5hYzA4NTVhIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9zdWRvX3V0aWwuaAorKysrIGIvaW5jbHVkZS9zdWRvX3V0aWwuaAorQEAgLTE3LDYgKzE3LDggQEAKKyAjaWZuZGVmIFNVRE9fVVRJTF9ICisgI2RlZmluZSBTVURPX1VUSUxfSAorIAorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysKKyAjaWZkZWYgSEFWRV9TVERCT09MX0gKKyAjIGluY2x1ZGUgPHN0ZGJvb2wuaD4KKyAjZWxzZQorLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8vMDAwMS1Vc2UtY29ycmVjdC1wYXRoLXRvLWluaXQuZC1hbmQtdG1wZmlsZXMuZC1maWxlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby8wMDAxLVVzZS1jb3JyZWN0LXBhdGgtdG8taW5pdC5kLWFuZC10bXBmaWxlcy5kLWZpbGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MTg2ODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8vMDAwMS1Vc2UtY29ycmVjdC1wYXRoLXRvLWluaXQuZC1hbmQtdG1wZmlsZXMuZC1maWxlcy5wYXRjaApAQCAtMCwwICsxLDMxIEBACitUaGUgbWFrZWZpbGUgdXNlcyB0b3Bfc3JjZGlyIHRvIGZpbmQgZmlsZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgYnkgY29uZmlndXJlLCB3aGVuCitpdCBzaG91bGQgdXNlIHRvcF9idWlsZGRpci4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgKGh0dHA6Ly9idWd6aWxsYS5zdWRvLndzL3Nob3dfYnVnLmNnaT9pZD03MDgpCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCistLS0KKyBzcmMvTWFrZWZpbGUuaW4gfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmluIGIvc3JjL01ha2VmaWxlLmluCitpbmRleCBmMDA5ZTEwLi43YWNmYjJkIDEwMDY0NAorLS0tIGEvc3JjL01ha2VmaWxlLmluCisrKysgYi9zcmMvTWFrZWZpbGUuaW4KK0BAIC0xNjUsMTEgKzE2NSwxMSBAQCBpbnN0YWxsLWRpcnM6CisgCisgaW5zdGFsbC1yYzogaW5zdGFsbC1kaXJzCisgCWlmIFsgLW4gIiQoSU5JVF9TQ1JJUFQpIiBdOyB0aGVuIFwKKy0JICAgICQoSU5TVEFMTCkgJChJTlNUQUxMX09XTkVSKSAtbSAwNzU1ICQodG9wX3NyY2RpcikvaW5pdC5kLyQoSU5JVF9TQ1JJUFQpICQoREVTVERJUikkKElOSVRfRElSKS9zdWRvOyBcCisrCSAgICAkKElOU1RBTEwpICQoSU5TVEFMTF9PV05FUikgLW0gMDc1NSAkKHRvcF9idWlsZGRpcikvaW5pdC5kLyQoSU5JVF9TQ1JJUFQpICQoREVTVERJUikkKElOSVRfRElSKS9zdWRvOyBcCisgCSAgICBybSAtZiAkKERFU1RESVIpJChSQ19MSU5LKTsgXAorIAkgICAgbG4gLXMgJChJTklUX0RJUikvc3VkbyAkKERFU1RESVIpJChSQ19MSU5LKTsgXAorIAllbGlmIHRlc3QgLW4gIiQodG1wZmlsZXNfZCkiOyB0aGVuIFwKKy0JICAgICQoSU5TVEFMTCkgJChJTlNUQUxMX09XTkVSKSAtbSAwNjQ0ICQodG9wX3NyY2RpcikvaW5pdC5kL3N1ZG8uY29uZiAkKERFU1RESVIpJCh0bXBmaWxlc19kKS9zdWRvLmNvbmY7IFwKKysJICAgICQoSU5TVEFMTCkgJChJTlNUQUxMX09XTkVSKSAtbSAwNjQ0ICQodG9wX2J1aWxkZGlyKS9pbml0LmQvc3Vkby5jb25mICQoREVTVERJUikkKHRtcGZpbGVzX2QpL3N1ZG8uY29uZjsgXAorIAlmaQorIAorIGluc3RhbGwtYmluYXJpZXM6IGluc3RhbGwtZGlycyAkKFBST0dTKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG9fMS44LjE0cDMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG9fMS44LjE0cDMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIzY2Q2ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkb18xLjguMTRwMy5iYgpAQCAtMCwwICsxLDM2IEBACityZXF1aXJlIHN1ZG8uaW5jCisKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5zdWRvLndzL3N1ZG8vZGlzdC9zdWRvLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJyR7UEFNX1NSQ19VUkl9JywgJycsIGQpfSBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVzZS1jb3JyZWN0LXBhdGgtdG8taW5pdC5kLWFuZC10bXBmaWxlcy5kLWZpbGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtSW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItaWRfdC1kZWZpbml0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitQQU1fU1JDX1VSSSA9ICJmaWxlOi8vc3Vkby5wYW0iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5M2RiZDFlNDdjMTM2MTc5ZmYxYjAxNDk0YzFjMGU3NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhOGE2OTdjYmIxMTM4NTkwNTg5NDQ4NTBkMDk4NDY0NjE4MjU0ODA0Y2Y5Nzk2MWRlZTkyNjQyOWYwMGExMjM3IgorCitERVBFTkRTICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKK1JERVBFTkRTXyR7UE59ICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtLXBsdWdpbi1saW1pdHMgcGFtLXBsdWdpbi1rZXlpbml0JywgJycsIGQpfSIKKworRVhUUkFfT0VDT05GICs9ICIgXAorICAgICAgICAgICAgIGFjX2N2X3R5cGVfcnNpemVfdD1ubyBcCisgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnLS13aXRoLXBhbScsICctLXdpdGhvdXQtcGFtJywgZCl9IFwKKyAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnLS1lbmFibGUtdG1wZmlsZXMuZD0ke2xpYmRpcn0vdG1wZmlsZXMuZCcsICctLWRpc2FibGUtdG1wZmlsZXMuZCcsIGQpfSBcCisgICAgICAgICAgICAgIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIgPSAicGFtIiBdOyB0aGVuCisJCWluc3RhbGwgLUQgLW0gNjY0ICR7V09SS0RJUn0vc3Vkby5wYW0gJHtEfS8ke3N5c2NvbmZkaXJ9L3BhbS5kL3N1ZG8KKwlmaQorCisJY2htb2QgNDExMSAke0R9JHtiaW5kaXJ9L3N1ZG8KKwljaG1vZCAwNDQwICR7RH0ke3N5c2NvbmZkaXJ9L3N1ZG9lcnMKKworCSMgRXhwbGljaXRseSByZW1vdmUgdGhlICR7bG9jYWxzdGF0ZWRpcn0vcnVuIGRpcmVjdG9yeSB0byBhdm9pZCBRQSBlcnJvcgorCXJtZGlyIC1wIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bi9zdWRvCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vdG1wZmlsZXMuZCIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZGlyfS8ke0JQTn0vKi5sYSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL25vLXN0cmlwLWluc3RhbGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9uby1zdHJpcC1pbnN0YWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZmJhNzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9uby1zdHJpcC1pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IHN5c2tsb2dkLTEuNS9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHN5c2tsb2dkLTEuNS5vcmlnL01ha2VmaWxlCTIwMDktMDYtMDkgMTM6MDI6NDEuMDAwMDAwMDAwICswMjAwCisrKysgc3lza2xvZ2QtMS41L01ha2VmaWxlCTIwMDktMDYtMDkgMTM6MDM6MDYuMDAwMDAwMDAwICswMjAwCitAQCAtMTI3LDggKzEyNyw4IEBACisgCXJtIC1mIHN5c2xvZ2Qga2xvZ2Qga3N5bSBzeXNsb2dfdHN0IG9vcHNfdGVzdCBUQUdTIHRzeXNsb2dkIHRrbG9nZAorIAorIGluc3RhbGxfZXhlYzogc3lzbG9nZCBrbG9nZAorLQkke0lOU1RBTEx9IC1tIDUwMCAtcyBzeXNsb2dkICR7QklORElSfS9zeXNsb2dkCistCSR7SU5TVEFMTH0gLW0gNTAwIC1zIGtsb2dkICR7QklORElSfS9rbG9nZAorKwkke0lOU1RBTEx9IC1tIDUwMCBzeXNsb2dkICR7QklORElSfS9zeXNsb2dkCisrCSR7SU5TVEFMTH0gLW0gNTAwIGtsb2dkICR7QklORElSfS9rbG9nZAorIAorIGluc3RhbGxfbWFuOgorIAkke0lOU1RBTEx9IC1tICR7TUFOX1BFUk1TfSBzeXNrbG9nZC44ICR7TUFORElSfS9tYW44L3N5c2tsb2dkLjgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL25vLXZlY3Rvcml6YXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9uby12ZWN0b3JpemF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxY2MwNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9uby12ZWN0b3JpemF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitUaGUgY29tcGlsZXIgc2hvdWxkIG5vdCBiZSBnZW5lcmF0aW5nIHZlY3Rvcml6ZWQgaW5zdHJ1Y3Rpb25zIG9uIHRoaXMgdGFyZ2V0LgorVGhpcyBpcyBhIHdvcmsgYXJvdW5kIHVudGlsIEkgY2FuIGRldGVybWluZSB3aHkgdGhpcyBpcyBvY2N1cmluZyBvbiB0aGlzCitwYXJ0aWN1bGFyIHJlY2lwZQorCitJbmRleDogc3lza2xvZ2QtMS41L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3lza2xvZ2QtMS41Lm9yaWcvTWFrZWZpbGUKKysrKyBzeXNrbG9nZC0xLjUvTWFrZWZpbGUKK0BAIC0yMCw3ICsyMCw4IEBACisgQ0M9IGdjYworICNTS0ZMQUdTPSAtZyAtRFNZU1YgLVdhbGwKKyAjTERGTEFHUz0gLWcKKy1TS0ZMQUdTPSAkKFJQTV9PUFRfRkxBR1MpIC1PMyAtRFNZU1YgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLWZuby1zdHJlbmd0aC1yZWR1Y2UKKytTS0ZMQUdTPSAkKFJQTV9PUFRfRkxBR1MpIC1PMyAtRFNZU1YgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLWZuby1zdHJlbmd0aC1yZWR1Y2UgXAorKwktZm5vLXRyZWUtdmVjdG9yaXplCisgIyAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1EX0xBUkdFRklMRV9TT1VSQ0UKKyAjIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLURfTEFSR0VGSUxFNjRfU09VUkNFCisgIyAkKHNoZWxsIGdldGNvbmYgTEZTX1NLRkxBR1MpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9zeXNrbG9nZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL3N5c2tsb2dkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI1OGY4ODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9zeXNrbG9nZApAQCAtMCwwICsxLDE1MSBAQAorIyEgL2Jpbi9zaAorIyAvZXRjL2luaXQuZC9zeXNrbG9nZDogc3RhcnQgdGhlIHN5c3RlbSBsb2cgZGFlbW9uLgorCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICAgICBzeXNrbG9nZAorIyBSZXF1aXJlZC1TdGFydDogICAgICAgJHJlbW90ZV9mcyAkdGltZQorIyBSZXF1aXJlZC1TdG9wOiAgICAgICAgJHJlbW90ZV9mcyAkdGltZQorIyBTaG91bGQtU3RhcnQ6ICAgICAgICAgJG5ldHdvcmsKKyMgU2hvdWxkLVN0b3A6ICAgICAgICAgICRuZXR3b3JrCisjIERlZmF1bHQtU3RhcnQ6ICAgICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogICAgU3lzdGVtIGxvZ2dlcgorIyMjIEVORCBJTklUIElORk8KKworIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK1BBVEg9L2JpbjovdXNyL2Jpbjovc2JpbjovdXNyL3NiaW4KKworcGlkZmlsZV9zeXNsb2dkPS92YXIvcnVuL3N5c2xvZ2QucGlkCitwaWRmaWxlX2tsb2dkPS92YXIvcnVuL2tsb2dkLnBpZAorYmlucGF0aF9zeXNsb2dkPS9zYmluL3N5c2xvZ2QKK2JpbnBhdGhfa2xvZ2Q9L3NiaW4va2xvZ2QKKwordGVzdCAteCAkYmlucGF0aCB8fCBleGl0IDAKKwordGVzdCAhIC1yIC9ldGMvZGVmYXVsdC9zeXNsb2dkIHx8IC4gL2V0Yy9kZWZhdWx0L3N5c2xvZ2QKKworY3JlYXRlX3hjb25zb2xlKCkKK3sKKyAgICAjIE9ubHkgcHJvY2VlZCBpZiAvZGV2L3hjb25zb2xlIGlzIHVzZWQgYXQgYWxsCisgICAgaWYgISBncmVwIC1xICdeW14jXS4qL2Rldi94Y29uc29sZScgL2V0Yy9zeXNsb2cuY29uZgorICAgIHRoZW4KKwlyZXR1cm4KKyAgICBmaQorCisgICAgaWYgWyAhIC1lIC9kZXYveGNvbnNvbGUgXTsgdGhlbgorCW1rbm9kIC1tIDY0MCAvZGV2L3hjb25zb2xlIHAKKyAgICBlbHNlCisJY2htb2QgMDY0MCAvZGV2L3hjb25zb2xlCisgICAgZmkKKyAgICBjaG93biByb290OmFkbSAvZGV2L3hjb25zb2xlCisgICAgdGVzdCAhIC14IC9zYmluL3Jlc3RvcmVjb24gfHwgL3NiaW4vcmVzdG9yZWNvbiAvZGV2L3hjb25zb2xlCit9CisKK2xvZ19iZWdpbl9tc2cgKCkgeworICAgIGVjaG8gLW4gJDEKK30KKworbG9nX2VuZF9tc2cgKCkgeworICAgIGVjaG8gJDEKK30KKworbG9nX3N1Y2Nlc3NfbXNnICgpIHsKKyAgICBlY2hvICQxCit9CisKK3J1bm5pbmcoKQoreworICAgICMgTm8gcGlkZmlsZSwgcHJvYmFibHkgbm8gZGFlbW9uIHByZXNlbnQKKyAgICAjCisgICAgaWYgWyAhIC1mICRwaWRmaWxlIF0KKyAgICB0aGVuCisJcmV0dXJuIDEKKyAgICBmaQorCisgICAgcGlkPWBjYXQgJHBpZGZpbGVfc3lzbG9nZGAKKworICAgICMgTm8gcGlkLCBwcm9iYWJseSBubyBkYWVtb24gcHJlc2VudAorICAgICMKKyAgICBpZiBbIC16ICIkcGlkIiBdCisgICAgdGhlbgorCXJldHVybiAxCisgICAgZmkKKworICAgIGlmIFsgISAtZCAvcHJvYy8kcGlkIF0KKyAgICB0aGVuCisJcmV0dXJuIDEKKyAgICBmaQorCisgICAgY21kPWBjYXQgL3Byb2MvJHBpZC9jbWRsaW5lIHwgdHIgIlwwMDAiICJcbiJ8aGVhZCAtbiAxYAorCisgICAgIyBObyBzeXNsb2dkPworICAgICMKKyAgICBpZiBbICIkY21kIiAhPSAiJGJpbnBhdGgiIF0KKyAgICB0aGVuCisJcmV0dXJuIDEKKyAgICBmaQorCisgICAgcmV0dXJuIDAKK30KKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgIGxvZ19iZWdpbl9tc2cgIlN0YXJ0aW5nIHN5c3RlbSBsb2cgZGFlbW9uLi4uIgorICAgIGNyZWF0ZV94Y29uc29sZQorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgJHBpZGZpbGVfc3lzbG9nZCAtLW5hbWUgc3lzbG9nZCAtLXN0YXJ0YXMgJGJpbnBhdGhfc3lzbG9nZCAtLSAkU1lTTE9HRAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgbG9nX2JlZ2luX21zZyAiU3RhcnRpbmcga2VybmVsIGxvZyBkYWVtb24uLi4iCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAkcGlkZmlsZV9rbG9nZCAtLW5hbWUga2xvZ2QgLS1zdGFydGFzICRiaW5wYXRoX2tsb2dkIC0tICRLTE9HRAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgOzsKKyAgc3RvcCkKKyAgICBsb2dfYmVnaW5fbXNnICJTdG9wcGluZyBzeXN0ZW0gbG9nIGRhZW1vbi4uLiIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXBpZGZpbGUgJHBpZGZpbGVfc3lzbG9nZCAtLW5hbWUgc3lzbG9nZAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgbG9nX2JlZ2luX21zZyAiU3RvcHBpbmcga2VybmVsIGxvZyBkYWVtb24uLi4iCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1yZXRyeSAzIC0tZXhlYyAkYmlucGF0aF9rbG9nZCAtLXBpZGZpbGUgJHBpZGZpbGVfa2xvZ2QKKyAgICBsb2dfZW5kX21zZyAkPworICAgIDs7CisgIHJlbG9hZHxmb3JjZS1yZWxvYWQpCisgICAgbG9nX2JlZ2luX21zZyAiUmVsb2FkaW5nIHN5c3RlbSBsb2cgZGFlbW9uLi4uIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tc2lnbmFsIDEgLS1waWRmaWxlICRwaWRmaWxlX3N5c2xvZ2QgLS1uYW1lIHN5c2xvZ2QKKyAgICBsb2dfZW5kX21zZyAkPworICAgIGxvZ19iZWdpbl9tc2cgIlJlbG9hZGluZyBrZXJuZWwgbG9nIGRhZW1vbi4uLiIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXJldHJ5IDMgLS1leGVjICRiaW5wYXRoX2tsb2dkIC0tcGlkZmlsZSAkcGlkZmlsZV9rbG9nZAorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgJHBpZGZpbGVfa2xvZ2QgLS1uYW1lIGtsb2dkIC0tc3RhcnRhcyAkYmlucGF0aF9rbG9nZCAtLSAkS0xPR0QKKyAgICBsb2dfZW5kX21zZyAkPworICAgIDs7CisgIHJlc3RhcnQpCisgICAgbG9nX2JlZ2luX21zZyAiUmVzdGFydGluZyBzeXN0ZW0gbG9nIGRhZW1vbi4uLiIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1yZXRyeSA1IC0tcXVpZXQgLS1waWRmaWxlICRwaWRmaWxlX3N5c2xvZ2QgLS1uYW1lIHN5c2xvZ2QKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1waWRmaWxlICRwaWRmaWxlX3N5c2xvZ2QgLS1uYW1lIHN5c2xvZ2QgLS1zdGFydGFzICRiaW5wYXRoX3N5c2xvZ2QgLS0gJFNZU0xPR0QKKyAgICBsb2dfZW5kX21zZyAkPworICAgIGxvZ19iZWdpbl9tc2cgIlJlbG9hZGluZyBrZXJuZWwgbG9nIGRhZW1vbi4uLiIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXJldHJ5IDMgLS1leGVjICRiaW5wYXRoX2tsb2dkIC0tcGlkZmlsZSAkcGlkZmlsZV9rbG9nZAorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgJHBpZGZpbGVfa2xvZ2QgLS1uYW1lIGtsb2dkIC0tc3RhcnRhcyAkYmlucGF0aF9rbG9nZCAtLSAkS0xPR0QKKyAgICBsb2dfZW5kX21zZyAkPworICAgIDs7CisgIHJlbG9hZC1vci1yZXN0YXJ0KQorICAgIGlmIHJ1bm5pbmcKKyAgICB0aGVuCisJJDAgcmVsb2FkCisgICAgZWxzZQorCSQwIHN0YXJ0CisgICAgZmkKKyAgICA7OworICBzdGF0dXMpCisgICAgc3RhdHVzIHN5c2xvZ2QKKyAgICBSRVRWQUw9JD8KKyAgICBzdGF0dXMga2xvZ2QKKyAgICBydmFsPSQ/CisgICAgWyAkUkVUVkFMIC1lcSAwIF0gJiYgZXhpdCAkcnZhbAorICAgIGV4aXQgJFJFVFZBTAorICAgIDs7CisgICopCisgICAgbG9nX3N1Y2Nlc3NfbXNnICJVc2FnZTogL2V0Yy9pbml0LmQvc3lza2xvZ2Qge3N0YXJ0fHN0b3B8cmVsb2FkfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfHJlbG9hZC1vci1yZXN0YXJ0fHN0YXR1c30iCisgICAgZXhpdCAxCitlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvc3lzbG9nLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9zeXNsb2cuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODQ5ZGUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvc3lzbG9nLmNvbmYKQEAgLTAsMCArMSw3MSBAQAorIyAgL2V0Yy9zeXNsb2cuY29uZglDb25maWd1cmF0aW9uIGZpbGUgZm9yIHN5c2xvZ2QuCisjCisjICBQb3J0ZWQgZnJvbSBkZWJpYW4gYnkgWXUgS2UgPGtlLnl1QGludGVsLmNvbT4KKyMKKworIworIyBGaXJzdCBzb21lIHN0YW5kYXJkIGxvZ2ZpbGVzLiAgTG9nIGJ5IGZhY2lsaXR5LgorIworCithdXRoLGF1dGhwcml2LioJCQkvdmFyL2xvZy9hdXRoLmxvZworKi4qO2F1dGgsYXV0aHByaXYubm9uZQkJLS92YXIvbG9nL3N5c2xvZworI2Nyb24uKgkJCQkvdmFyL2xvZy9jcm9uLmxvZworZGFlbW9uLioJCQktL3Zhci9sb2cvZGFlbW9uLmxvZwora2Vybi4qCQkJCS0vdmFyL2xvZy9rZXJuLmxvZworbHByLioJCQkJLS92YXIvbG9nL2xwci5sb2cKK21haWwuKgkJCQktL3Zhci9sb2cvbWFpbC5sb2cKK3VzZXIuKgkJCQktL3Zhci9sb2cvdXNlci5sb2cKKworIworIyBMb2dnaW5nIGZvciB0aGUgbWFpbCBzeXN0ZW0uICBTcGxpdCBpdCB1cCBzbyB0aGF0CisjIGl0IGlzIGVhc3kgdG8gd3JpdGUgc2NyaXB0cyB0byBwYXJzZSB0aGVzZSBmaWxlcy4KKyMKK21haWwuaW5mbwkJCS0vdmFyL2xvZy9tYWlsLmluZm8KK21haWwud2FybgkJCS0vdmFyL2xvZy9tYWlsLndhcm4KK21haWwuZXJyCQkJL3Zhci9sb2cvbWFpbC5lcnIKKworIyBMb2dnaW5nIGZvciBJTk4gbmV3cyBzeXN0ZW0KKyMKK25ld3MuY3JpdAkJCS92YXIvbG9nL25ld3MuY3JpdAorbmV3cy5lcnIJCQkvdmFyL2xvZy9uZXdzLmVycgorbmV3cy5ub3RpY2UJCQktL3Zhci9sb2cvbmV3cy5ub3RpY2UKKworIworIyBTb21lIGBjYXRjaC1hbGwnIGxvZ2ZpbGVzLgorIworKi49ZGVidWc7XAorYXV0aCxhdXRocHJpdi5ub25lO1wKK25ld3Mubm9uZTttYWlsLm5vbmUJLS92YXIvbG9nL2RlYnVnCisKKyouPWluZm87Ki49bm90aWNlOyouPXdhcm47XAorYXV0aCxhdXRocHJpdi5ub25lO1wKK2Nyb24sZGFlbW9uLm5vbmU7XAorbWFpbCxuZXdzLm5vbmUJCS0vdmFyL2xvZy9tZXNzYWdlcworCisjCisjIEVtZXJnZW5jaWVzIGFyZSBzZW50IHRvIGV2ZXJ5Ym9keSBsb2dnZWQgaW4uCisjCisqLmVtZXJnCQkJCSoKKworIworIyBJIGxpa2UgdG8gaGF2ZSBtZXNzYWdlcyBkaXNwbGF5ZWQgb24gdGhlIGNvbnNvbGUsIGJ1dCBvbmx5IG9uIGEgdmlydHVhbAorIyBjb25zb2xlIEkgdXN1YWxseSBsZWF2ZSBpZGxlLgorIworI2RhZW1vbixtYWlsLio7XAorI25ld3MuPWNyaXQ7bmV3cy49ZXJyO25ld3MuPW5vdGljZTtcCisjKi49ZGVidWc7Ki49aW5mbztcCisjKi49bm90aWNlOyouPXdhcm4JL2Rldi90dHk4CisKKyMgVGhlIG5hbWVkIHBpcGUgL2Rldi94Y29uc29sZSBpcyBmb3IgdGhlIGB4Y29uc29sZScgdXRpbGl0eS4gIFRvIHVzZSBpdCwKKyMgeW91IG11c3QgaW52b2tlIGB4Y29uc29sZScgd2l0aCB0aGUgYC1maWxlJyBvcHRpb246CisjCisjICAgICQgeGNvbnNvbGUgLWZpbGUgL2Rldi94Y29uc29sZSBbLi4uXQorIworIyBOT1RFOiBhZGp1c3QgdGhlIGxpc3QgYmVsb3csIG9yIHlvdSdsbCBnbyBjcmF6eSBpZiB5b3UgaGF2ZSBhIHJlYXNvbmFibHkKKyMgICAgICBidXN5IHNpdGUuLgorIworZGFlbW9uLio7bWFpbC4qO1wKK25ld3MuZXJyO1wKKyouPWRlYnVnOyouPWluZm87XAorKi49bm90aWNlOyouPXdhcm4JfC9kZXYveGNvbnNvbGUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2Qvc3lza2xvZ2QuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2Qvc3lza2xvZ2QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZjhhYTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9zeXNrbG9nZC5pbmMKQEAgLTAsMCArMSw1OCBAQAorU1VNTUFSWSA9ICJTeXN0ZW0gTG9nIERhZW1vbnMiCitERVNDUklQVElPTiA9ICJUaGUgc3lza2xvZ2QgcGFja2FnZSBpbXBsZW1lbnRzIHR3byBzeXN0ZW0gbG9nIGRhZW1vbnM6IHN5c2xvZ2QsIGtsb2dkIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pbmZvZHJvbS5vcmcvcHJvamVjdHMvc3lza2xvZ2QvIgorU0VDVElPTiA9ICJiYXNlIgorCitMSUNFTlNFID0gIkdQTHYyKyAmIEJTRCIKK0xJQ0VOU0Vfc3lzbG9nZCA9ICJCU0QiCitMSUNFTlNFX2tsb2dkID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjYTQzY2JjODQyYzIzMzZlODM1OTI2YzIxNjZjMjhiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3N5c2xvZ2QuYztiZWdpbmxpbmU9MjtlbmRsaW5lPTE1O21kNT03N2ZmYjJmZWM0OGM0NmQ3Y2EwYWJiMmQ1ODEzZTdmZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9rbG9nZC5jO2JlZ2lubGluZT0yO2VuZGxpbmU9MTk7bWQ1PTdlODdlZDBhZTYxNDJkZTA3OWJjZTczOGMxMGM4OTlkIFwKKyAgICAgICAgICAgICAgICAgICAiCisKK2luaGVyaXQgdXBkYXRlLXJjLmQgdXBkYXRlLWFsdGVybmF0aXZlcworCitTUkNfVVJJID0gImh0dHA6Ly93d3cuaW5mb2Ryb20ub3JnL3Byb2plY3RzL3N5c2tsb2dkL2Rvd25sb2FkL3N5c2tsb2dkLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9uby1zdHJpcC1pbnN0YWxsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2tsb2dkIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xvZy5jb25mIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9lNTAwdjIgPSAiIGZpbGU6Ly9uby12ZWN0b3JpemF0aW9uLnBhdGNoIgorCitJTklUU0NSSVBUX05BTUUgPSAic3lzbG9nIgorQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vc3lzbG9nLmNvbmYuJHtCUE59IgorCitDRkxBR1NfYXBwZW5kID0gIiAtRFNZU1YiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW44IFwKKwkJCSR7RH0ke21hbmRpcn0vbWFuNSBcCisJCQkke0R9JHtiYXNlX3NiaW5kaXJ9CisJb2VfcnVubWFrZSAnQklORElSPSR7RH0ke2Jhc2Vfc2JpbmRpcn0nIFwKKwkJCSdNQU5ESVI9JHtEfSR7bWFuZGlyfScgaW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L3N5c2xvZy5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2xvZy5jb25mCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDc1NSAke1dPUktESVJ9L3N5c2tsb2dkICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9zeXNsb2cKK30KKworIyBzeXNrbG9nZCBwYWNrYWdlIGhhcyBubyBpbnRlcm5hbCBzeXN0ZW1kIHN1cHBvcnQsIHNvIHdlIHdlaWdoIGJ1c3lib3gncworIyBzeXNrbG9nZCB1dGlsaXR5IG92ZXIgaXQgaW4gY2FzZSBvZiBzeXN0ZW1kCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJzEwJywnMTAwJyxkKX0iCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInN5c2xvZ2Qga2xvZ2Qgc3lzbG9nLWluaXQgc3lzbG9nLWNvbmYiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzeXNsb2dkXSA9ICIke2Jhc2Vfc2JpbmRpcn0vc3lzbG9nZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtrbG9nZF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2tsb2dkIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N5c2xvZy1pbml0XSA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9zeXNsb2ciCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3lzbG9nLWNvbmZdID0gIiR7c3lzY29uZmRpcn0vc3lzbG9nLmNvbmYiCisKK3BrZ19wcmVybV8ke1BOfSAoKSB7CisJaWYgdGVzdCAieCREIiA9ICJ4IjsgdGhlbgorCWlmIHRlc3QgIiQxIiA9ICJ1cGdyYWRlIiAtbyAiJDEiID0gInJlbW92ZSI7IHRoZW4KKwkJL2V0Yy9pbml0LmQvc3lzbG9nIHN0b3AKKwlmaQorCWZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9zeXNrbG9nZF8xLjUuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL3N5c2tsb2dkXzEuNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NWVjYzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9zeXNrbG9nZF8xLjUuMS5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgc3lza2xvZ2QuaW5jCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjNzA1OTlhYjBkMDM3ZmRlNzI0ZjcyMTBjMmM4ZDdmOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MTY2YzE4NWFlMjNjOTJlOGI5ZmVlZTY2YTZlM2QwYmM5NDRiZjY3MzExMmY1M2UzZWNmNjJlMDhjZTdjMjAxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM3NjFmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdC5pbmMKQEAgLTAsMCArMSw1NSBAQAorU1VNTUFSWSA9ICJTeXN0ZW0gcGVyZm9ybWFuY2UgdG9vbHMiCitERVNDUklQVElPTiA9ICJUaGUgc3lzc3RhdCB1dGlsaXRpZXMgYXJlIGEgY29sbGVjdGlvbiBvZiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHRvb2xzIGZvciBMaW51eC4iCitIT01FUEFHRSA9ICJodHRwOi8vc2ViYXN0aWVuLmdvZGFyZC5wYWdlc3BlcnNvLW9yYW5nZS5mci8iCitMSUNFTlNFID0gIkdQTHYyKyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworU1JDX1VSSSA9ICJodHRwOi8vcGFnZXNwZXJzby1vcmFuZ2UuZnIvc2ViYXN0aWVuLmdvZGFyZC9zeXNzdGF0LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly85OV9zeXNzdGF0IFwKKyAgICAgICAgICAgZmlsZTovL3N5c3N0YXQuc2VydmljZSBcCisgICAgICAgICAgIgorCitERVBFTkRTICs9ICJiYXNlLXBhc3N3ZCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGdldHRleHQgc3lzdGVtZAorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1zZW5zb3JzIgorRVhUUkFfT0VNQUtFICs9ICdMRkxBR1M9IiInCisKK1NZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0iCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAic3lzc3RhdC5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRSA9ICJlbmFibGUiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIGV4cG9ydCBzYV9saWJfZGlyPSR7bGliZGlyfS9zYQorfQorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIGRvbid0IGluc3RhbGwgL3Zhci9sb2cvc2Egd2hlbiBwb3B1bGF0aW5nIHJvb3Rmcy4gRG8gaXQgdGhyb3VnaCB2b2xhdGlsZQorCisJcm0gLXJmICR7RH0vdmFyCisJaW5zdGFsbCAtZCAke0R9L2V0Yy9kZWZhdWx0L3ZvbGF0aWxlcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9Lzk5X3N5c3N0YXQgJHtEfS9ldGMvZGVmYXVsdC92b2xhdGlsZXMKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zeXNzdGF0LnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MjQExJQkRJUkAjJHtsaWJkaXJ9I2cnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3N0YXQuc2VydmljZQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworICAgICAgICBpZiBbIC1uICIkRCIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGV4aXQgMAorICAgICAgICBmaQorICAgICAgICBpZiBbIC1lIC9ldGMvaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIF07IHRoZW4KKyAgICAgICAgICAgICAgICAvZXRjL2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCB1cGRhdGUKKyAgICAgICAgZmkKK30KKworCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3NhIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vc2EvLmRlYnVnLyIKKworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCitMREZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLWxpbnRsIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0Lzk5X3N5c3N0YXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQvOTlfc3lzc3RhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjBlYzMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0Lzk5X3N5c3N0YXQKQEAgLTAsMCArMSBAQAorZCByb290IHJvb3QgMDc1NSAvdmFyL2xvZy9zYSBub25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQvc3lzc3RhdC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0L3N5c3N0YXQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmYwNzEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0L3N5c3N0YXQuc2VydmljZQpAQCAtMCwwICsxLDEyIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVJlc2V0cyBTeXN0ZW0gQWN0aXZpdHkgTG9ncworCitbU2VydmljZV0KK1R5cGU9b25lc2hvdAorUmVtYWluQWZ0ZXJFeGl0PXllcworVXNlcj1yb290CitFeGVjU3RhcnQ9QExJQkRJUkAvc2Evc2ExIC0tYm9vdAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdF8xMS4xLjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXRfMTEuMS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZDJlYzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXRfMTEuMS41LmJiCkBAIC0wLDAgKzEsNyBAQAorcmVxdWlyZSBzeXNzdGF0LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Y2E0M2NiYzg0MmMyMzM2ZTgzNTkyNmMyMTY2YzI4YiIKKworU1JDX1VSSVttZDVzdW1dID0gIjRkOGU2ZTcyZDA1NzE4OWExNjYwNDYyYTY3OGQ5YWRhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZlYjNhOTBkODZmZmQ2OWNmNWI4ODE0NGE4ODc2YWUwNWJkNDIzODRmNTU5Njc2ZjA4MTAwNjcxNTg5ZmEyYmIiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9hdm9pZF9oZWFwX292ZXJmbG93LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEyYWUzYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9hdm9pZF9oZWFwX292ZXJmbG93LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbYnVnZml4OiBodHRwOi8vd2ViLm52ZC5uaXN0Lmdvdi92aWV3L3Z1bG4vZGV0YWlsP3Z1bG5JZD1DVkUtMjAxMC0wNjI0XQorCitUaGlzIHBhdGNoIGF2b2lkcyBoZWFwIG92ZXJmbG93IHJlcG9ydGVkIGJ5IDoKK2h0dHA6Ly93ZWIubnZkLm5pc3QuZ292L3ZpZXcvdnVsbi9kZXRhaWw/dnVsbklkPUNWRS0yMDEwLTA2MjQKKworVGhpcyBpcyBhIGNsZWFuIHBhdGNoIGZvciB0aGUgR1BMdjIgdGFyIHJlY2lwZS4KKworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8wNC8yNQorCitJbmRleDogdGFyLTEuMTcvbGliL3J0YXBlbGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0YXItMS4xNy5vcmlnL2xpYi9ydGFwZWxpYi5jCisrKysgdGFyLTEuMTcvbGliL3J0YXBlbGliLmMKK0BAIC01NzAsNyArNTcwLDcgQEAgcm10X3JlYWRfXyAoaW50IGhhbmRsZSwgY2hhciAqYnVmZmVyLCBzaQorIAorICAgc3ByaW50ZiAoY29tbWFuZF9idWZmZXIsICJSJWx1XG4iLCAodW5zaWduZWQgbG9uZykgbGVuZ3RoKTsKKyAgIGlmIChkb19jb21tYW5kIChoYW5kbGUsIGNvbW1hbmRfYnVmZmVyKSA9PSAtMQorLSAgICAgIHx8IChzdGF0dXMgPSBnZXRfc3RhdHVzIChoYW5kbGUpKSA9PSBTQUZFX1JFQURfRVJST1IpCisrICAgICAgfHwgKChzdGF0dXMgPSBnZXRfc3RhdHVzIChoYW5kbGUpKSA9PSBTQUZFX1JFQURfRVJST1IpIHx8IChzdGF0dXMgPiBsZW5ndGgpKQorICAgICByZXR1cm4gU0FGRV9SRUFEX0VSUk9SOworIAorICAgZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IHN0YXR1czsgY291bnRlciArPSBybGVuLCBidWZmZXIgKz0gcmxlbikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9nY2M0M2J1aWxkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L2djYzQzYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgwNTlhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9nY2M0M2J1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCisjIEZpeCBlcnJvcnMgd2hlbiBidWlsdCB3aXRoIGdjYyA0LjMKKyMgUGF0Y2ggdGFrZW4gZnJvbSBEZWJpYW4gYnVnICM0NTIwOTYKKworZGlmZiAtdXJOIHRhci0xLjE3Lm9yaWcvbGliL2FyZ3AtZm10c3RyZWFtLmggdGFyLTEuMTcvbGliL2FyZ3AtZm10c3RyZWFtLmgKKy0tLSB0YXItMS4xNy5vcmlnL2xpYi9hcmdwLWZtdHN0cmVhbS5oCTIwMDYtMDEtMTEgMTI6MjQ6MDUuMDAwMDAwMDAwIC0wODAwCisrKysgdGFyLTEuMTcvbGliL2FyZ3AtZm10c3RyZWFtLmgJMjAxMC0wNy0yMiAyMjozNjoxMi4wMDAwMDAwMDAgLTA3MDAKK0BAIC0xOTgsNyArMTk4LDExIEBACisgI2VuZGlmCisgCisgI2lmbmRlZiBBUkdQX0ZTX0VJCistI2RlZmluZSBBUkdQX0ZTX0VJIGV4dGVybiBpbmxpbmUKKysgI2lmIGRlZmluZWQgX19HTlVDX1NURENfSU5MSU5FX18KKysgICAjZGVmaW5lIEFSR1BfRlNfRUkgZXh0ZXJuIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXykpCisrICNlbHNlCisrICAgI2RlZmluZSBBUkdQX0ZTX0VJIGV4dGVybiBpbmxpbmUKKysgI2VuZGlmCisgI2VuZGlmCisgCisgQVJHUF9GU19FSSBzaXplX3QKK2RpZmYgLXVyTiB0YXItMS4xNy5vcmlnL2xpYi9hcmdwLmggdGFyLTEuMTcvbGliL2FyZ3AuaAorLS0tIHRhci0xLjE3Lm9yaWcvbGliL2FyZ3AuaAkyMDA3LTAzLTMwIDAwOjA5OjExLjAwMDAwMDAwMCAtMDcwMAorKysrIHRhci0xLjE3L2xpYi9hcmdwLmgJMjAxMC0wNy0yMiAyMjozODo0NC4wMDAwMDAwMDAgLTA3MDAKK0BAIC01ODAsNyArNTgwLDExIEBACisgIyBlbmRpZgorIAorICMgaWZuZGVmIEFSR1BfRUkKKy0jICBkZWZpbmUgQVJHUF9FSSBleHRlcm4gX19pbmxpbmVfXworKyMgIGlmIGRlZmluZWQgX19HTlVDX1NURENfSU5MSU5FX18KKysjICAgIGRlZmluZSBBUkdQX0VJIGV4dGVybiBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fKSkKKysjICBlbHNlCisrIyAgICBkZWZpbmUgQVJHUF9FSSBleHRlcm4gX19pbmxpbmVfXworKyMgIGVuZGlmCisgIyBlbmRpZgorIAorIEFSR1BfRUkgdm9pZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L200ZXh0ZW5zaW9ucy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9tNGV4dGVuc2lvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1MzRjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9tNGV4dGVuc2lvbnMucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKKyMgRGVmaW5lIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBvbmx5IGlmIGl0IHdhcyBwcmV2aW91c2x5IHVuZGVmaW5lZC4KKyMgVGhpcyBpcyBuZWVkZWQgdG8gY29uZmlndXJlIGNvcnJlY3RseSB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGF1dG9jb25mLgorCistLS0gdGFyLTEuMTcvbTQvZXh0ZW5zaW9ucy5tNC5vcmlnCTIwMTAtMDctMjIgMjI6MjE6MzUuMDAwMDAwMDAwIC0wNzAwCisrKysgdGFyLTEuMTcvbTQvZXh0ZW5zaW9ucy5tNAkyMDEwLTA3LTIyIDIyOjIzOjQxLjAwMDAwMDAwMCAtMDcwMAorQEAgLTEsNCArMSw0IEBACistIyBzZXJpYWwgNCAgLSotIEF1dG9jb25mIC0qLQorKyMgc2VyaWFsIDUgIC0qLSBBdXRvY29uZiAtKi0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0uCisgCisgIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitAQCAtMTYsNiArMTYsNyBAQAorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorK200X2lmZGVmKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLCBbXSwgWworIEFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorIFsKKyAgIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorQEAgLTQ4LDcgKzQ5LDcgQEAKKyAgICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCisgICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCisgICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKy1dKQorK10pXSkKKyAKKyAjIGdsX1VTRV9TWVNURU1fRVhURU5TSU9OUworICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMzljNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyLmluYwpAQCAtMCwwICsxLDUwIEBACitTVU1NQVJZID0gIkdOVSBmaWxlIGFyY2hpdmluZyBwcm9ncmFtIgorREVTQ1JJUFRJT04gPSAiR05VIHRhciBzYXZlcyBtYW55IGZpbGVzIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgdGFwZSBcCitvciBkaXNrIGFyY2hpdmUsIGFuZCBjYW4gcmVzdG9yZSBpbmRpdmlkdWFsIGZpbGVzIGZyb20gdGhlIGFyY2hpdmUuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3Rhci8iCitTRUNUSU9OID0gImJhc2UiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS90YXIvdGFyLSR7UFZ9LnRhci5iejIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgKz0gIkRFRkFVTFRfUk1UX0RJUj0ke2Jhc2Vfc2JpbmRpcn0iCisKKyMgTGV0IGFjbG9jYWwgdXNlIHRoZSByZWxhdGl2ZSBwYXRoIGZvciB0aGUgbTQgZmlsZSByYXRoZXIgdGhhbiB0aGUKKyMgYWJzb2x1dGUgc2luY2UgdGFyIGhhcyBhIGxvdCBvZiBtNCBmaWxlcywgb3RoZXJ3aXNlIHRoZXJlIG1pZ2h0CisjIGJlIGFuICJBcmd1bWVudCBsaXN0IHRvbyBsb25nIiBlcnJvciB3aGVuIGl0IGlzIGJ1aWx0IGluIGEgbG9uZy9kZWVwCisjIGRpcmVjdG9yeS4KK2FjcGF0aHMgPSAiLUkgLi9tNCIKKworZG9faW5zdGFsbCAoKSB7CisgICAgYXV0b3Rvb2xzX2RvX2luc3RhbGwKKyAgICBsbiAtcyB0YXIgJHtEfSR7YmluZGlyfS9ndGFyCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorICAgIG12ICR7RH0ke2JpbmRpcn0vdGFyICR7RH0ke2Jhc2VfYmluZGlyfS90YXIKKyAgICBtdiAke0R9JHtiaW5kaXJ9L2d0YXIgJHtEfSR7YmFzZV9iaW5kaXJ9L2d0YXIKKyAgICBybWRpciAke0R9JHtiaW5kaXJ9LworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tcm10IgorCitGSUxFU18ke1BOfS1ybXQgPSAiJHtiYXNlX3NiaW5kaXJ9L3JtdCoiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInRhciIKK0FMVEVSTkFUSVZFXyR7UE59LXJtdCA9ICJybXQiCitBTFRFUk5BVElWRV8ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorQUxURVJOQVRJVkVfJHtQTn0tcm10X2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt0YXJdID0gIiR7YmFzZV9iaW5kaXJ9L3RhciIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtybXRdID0gIiR7YmFzZV9zYmluZGlyfS9ybXQiCisKK1BST1ZJREVTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIHRhci1yZXBsYWNlbWVudC1uYXRpdmUiCitOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWCA9ICIvJHtQTn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIvcmVtb3ZlLWdldHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyL3JlbW92ZS1nZXRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOGJlMzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyL3JlbW92ZS1nZXRzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK0lTTyBDMTEgcmVtb3ZlcyB0aGUgc3BlY2lmaWNhdGlvbiBvZiBnZXRzKCkgZnJvbSB0aGUgQyBsYW5ndWFnZSwgZWdsaWJjIDIuMTYrIHJlbW92ZWQgaXQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitJbmRleDogdGFyLTEuMjcvZ251L3N0ZGlvLmluLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0YXItMS4yNy5vcmlnL2dudS9zdGRpby5pbi5oCTIwMTMtMDYtMjkgMDg6NTQ6MjYuMDAwMDAwMDAwICswMzAwCisrKysgdGFyLTEuMjcvZ251L3N0ZGlvLmluLmgJMjAxMy0xMC0xNiAxNToyMjo0Ni45NzcyMDQ3MzcgKzAzMDAKK0BAIC03MTAsMTAgKzcxMCwxMiBAQAorIC8qIEl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoZSBkZXZlbG9wZXIgZXZlciBoYXMgZnVsbCBjb250cm9sIG9mIHN0ZGluLAorICAgIHNvIGFueSB1c2Ugb2YgZ2V0cyB3YXJyYW50cyBhbiB1bmNvbmRpdGlvbmFsIHdhcm5pbmc7IGJlc2lkZXMsIEMxMQorICAgIHJlbW92ZWQgaXQuICAqLworKyNpZiBkZWZpbmVkIGdldHMKKyAjdW5kZWYgZ2V0cworICNpZiBIQVZFX1JBV19ERUNMX0dFVFMKKyBfR0xfV0FSTl9PTl9VU0UgKGdldHMsICJnZXRzIGlzIGEgc2VjdXJpdHkgaG9sZSAtIHVzZSBmZ2V0cyBpbnN0ZWFkIik7CisgI2VuZGlmCisrI2VuZGlmCisgCisgCisgI2lmIEBHTlVMSUJfT0JTVEFDS19QUklOVEZAIHx8IEBHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVhACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyXzEuMTcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyXzEuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjljYTIwNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXJfMS4xNy5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHRhci5pbmMKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorCitQUiA9ICJyMyIKKworU1JDX1VSSSArPSAiZmlsZTovL200ZXh0ZW5zaW9ucy5wYXRjaCBcCisgICAgZmlsZTovL2djYzQzYnVpbGQucGF0Y2ggXAorICAgIGZpbGU6Ly9hdm9pZF9oZWFwX292ZXJmbG93LnBhdGNoIFwKKyAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjNmM0ZjFjMDc1ZGJmMGY3NWMyOTczN2ZhYTU4ZjI5MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxOWY5MDIxZGRhNTFhMTYyOTVlNDcwNmU4MDg3MGU3MWY4NzEwNzY3NWU1MWMxNzZhNDkxZWJhMGZjNGNhNDkyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhcl8xLjI4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhcl8xLjI4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MTYwMDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyXzEuMjguYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSB0YXIuaW5jCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLS13aXRoLXBvc2l4LWFjbHMsIC0td2l0aG91dC1wb3NpeC1hY2xzLCBhY2wsIgorCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9yZW1vdmUtZ2V0cy5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ZjMyYjJiYzFlZDdkZGY0Y2Y0ZTRhMzk3MTEzNDFiMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MGU0YmZlMDYwMmZlZjM0Y2Q5MDhkOTFjZjYzOGUxN2VlYjA5Mzk0ZDdiOThjMjQ4NzIxN2RjNGQzMTQ3NTYyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDBfbWFuX3F1b3RpbmcuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzAwX21hbl9xdW90aW5nLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkNjcxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzAwX21hbl9xdW90aW5nLmRpZmYKQEAgLTAsMCArMSw3NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMTk5NS0wMS0zMCAxOTo1MTo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMDkgMTY6NTk6NDUuMDAwMDAwMDAwICswMjAwCitAQCAtMTczLDcgKzE3Myw3IEBACisgUGF0dGVybnMgbGlrZSB0aGVzZSBjYW4gYmUgdXNlZCB3aGVuIHRoZSBtYWNoaW5lIGhhcyBkaWZmZXJlbnQgaW50ZXJuZXQKKyBhZGRyZXNzZXMgd2l0aCBkaWZmZXJlbnQgaW50ZXJuZXQgaG9zdG5hbWVzLiAgU2VydmljZSBwcm92aWRlcnMgY2FuIHVzZQorIHRoaXMgZmFjaWxpdHkgdG8gb2ZmZXIgRlRQLCBHT1BIRVIgb3IgV1dXIGFyY2hpdmVzIHdpdGggaW50ZXJuZXQgbmFtZXMKKy10aGF0IG1heSBldmVuIGJlbG9uZyB0byBkaWZmZXJlbnQgb3JnYW5pemF0aW9ucy4gU2VlIGFsc28gdGhlIGB0d2lzdCcKKyt0aGF0IG1heSBldmVuIGJlbG9uZyB0byBkaWZmZXJlbnQgb3JnYW5pemF0aW9ucy4gU2VlIGFsc28gdGhlIGB0d2lzdFwnCisgb3B0aW9uIGluIHRoZSBob3N0c19vcHRpb25zKDUpIGRvY3VtZW50LiBTb21lIHN5c3RlbXMgKFNvbGFyaXMsCisgRnJlZUJTRCkgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBpbnRlcm5ldCBhZGRyZXNzIG9uIG9uZSBwaHlzaWNhbAorIGludGVyZmFjZTsgd2l0aCBvdGhlciBzeXN0ZW1zIHlvdSBtYXkgaGF2ZSB0byByZXNvcnQgdG8gU0xJUCBvciBQUFAKK0BAIC0yMzYsMTAgKzIzNiwxMCBAQAorIEJlZm9yZSBhY2NlcHRpbmcgYSBjbGllbnQgcmVxdWVzdCwgdGhlIHdyYXBwZXJzIGNhbiB1c2UgdGhlIElERU5UCisgc2VydmljZSB0byBmaW5kIG91dCB0aGF0IHRoZSBjbGllbnQgZGlkIG5vdCBzZW5kIHRoZSByZXF1ZXN0IGF0IGFsbC4KKyBXaGVuIHRoZSBjbGllbnQgaG9zdCBwcm92aWRlcyBJREVOVCBzZXJ2aWNlLCBhIG5lZ2F0aXZlIElERU5UIGxvb2t1cAorLXJlc3VsdCAodGhlIGNsaWVudCBtYXRjaGVzIGBVTktOT1dOQGhvc3QnKSBpcyBzdHJvbmcgZXZpZGVuY2Ugb2YgYSBob3N0CisrcmVzdWx0ICh0aGUgY2xpZW50IG1hdGNoZXMgYFVOS05PV05AaG9zdFwnKSBpcyBzdHJvbmcgZXZpZGVuY2Ugb2YgYSBob3N0Cisgc3Bvb2ZpbmcgYXR0YWNrLgorIC5QUAorLUEgcG9zaXRpdmUgSURFTlQgbG9va3VwIHJlc3VsdCAodGhlIGNsaWVudCBtYXRjaGVzIGBLTk9XTkBob3N0JykgaXMKKytBIHBvc2l0aXZlIElERU5UIGxvb2t1cCByZXN1bHQgKHRoZSBjbGllbnQgbWF0Y2hlcyBgS05PV05AaG9zdFwnKSBpcworIGxlc3MgdHJ1c3R3b3J0aHkuIEl0IGlzIHBvc3NpYmxlIGZvciBhbiBpbnRydWRlciB0byBzcG9vZiBib3RoIHRoZQorIGNsaWVudCBjb25uZWN0aW9uIGFuZCB0aGUgSURFTlQgbG9va3VwLCBhbHRob3VnaCBkb2luZyBzbyBpcyBtdWNoCisgaGFyZGVyIHRoYW4gc3Bvb2ZpbmcganVzdCBhIGNsaWVudCBjb25uZWN0aW9uLiBJdCBtYXkgYWxzbyBiZSB0aGF0CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX29wdGlvbnMuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX29wdGlvbnMuNQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19vcHRpb25zLjUJMTk5NC0xMi0yOCAxNzo0MjoyOS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX29wdGlvbnMuNQkyMDA0LTA0LTA5IDE2OjU5OjQ5LjAwMDAwMDAwMCArMDIwMAorQEAgLTEyNCw3ICsxMjQsNyBAQAorIHZhbHVlIGlzIHRha2VuLgorIC5TSCBNSVNDRUxMQU5FT1VTCisgLklQICJiYW5uZXJzIC9zb21lL2RpcmVjdG9yeSIKKy1Mb29rIGZvciBhIGZpbGUgaW4gYC9zb21lL2RpcmVjdG9yeScgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBkYWVtb24KKytMb29rIGZvciBhIGZpbGUgaW4gYC9zb21lL2RpcmVjdG9yeVwnIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZGFlbW9uCisgcHJvY2VzcyAoZm9yIGV4YW1wbGUgaW4udGVsbmV0ZCBmb3IgdGhlIHRlbG5ldCBzZXJ2aWNlKSwgYW5kIGNvcHkgaXRzCisgY29udGVudHMgdG8gdGhlIGNsaWVudC4gTmV3bGluZSBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZCBieQorIGNhcnJpYWdlLXJldHVybiBuZXdsaW5lLCBhbmQgJTxsZXR0ZXI+IHNlcXVlbmNlcyBhcmUgZXhwYW5kZWQgKHNlZQorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkbWF0Y2guOCB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRtYXRjaC44CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRtYXRjaC44CTE5OTYtMDItMTEgMTc6MDE6MzYuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkbWF0Y2guOAkyMDA0LTA0LTA5IDE3OjAwOjQ5LjAwMDAwMDAwMCArMDIwMAorQEAgLTI2LDcgKzI2LDcgQEAKKyBBIGRhZW1vbiBwcm9jZXNzIG5hbWUuIFR5cGljYWxseSwgdGhlIGxhc3QgY29tcG9uZW50IG9mIGEgZGFlbW9uCisgZXhlY3V0YWJsZSBwYXRobmFtZS4KKyAuSVAgY2xpZW50CistQSBob3N0IG5hbWUgb3IgbmV0d29yayBhZGRyZXNzLCBvciBvbmUgb2YgdGhlIGB1bmtub3duJyBvciBgcGFyYW5vaWQnCisrQSBob3N0IG5hbWUgb3IgbmV0d29yayBhZGRyZXNzLCBvciBvbmUgb2YgdGhlIGB1bmtub3duXCcgb3IgYHBhcmFub2lkXCcKKyB3aWxkY2FyZCBwYXR0ZXJucy4KKyAuc3AKKyBXaGVuIGEgY2xpZW50IGhvc3QgbmFtZSBpcyBzcGVjaWZpZWQsIFxmSXRjcGRtYXRjaFxmUiBnaXZlcyBhCitAQCAtMzcsMTMgKzM3LDEzIEBACisgLlBQCisgT3B0aW9uYWwgaW5mb3JtYXRpb24gc3BlY2lmaWVkIHdpdGggdGhlIFxmSWRhZW1vbkBzZXJ2ZXJcZlIgZm9ybToKKyAuSVAgc2VydmVyCistQSBob3N0IG5hbWUgb3IgbmV0d29yayBhZGRyZXNzLCBvciBvbmUgb2YgdGhlIGB1bmtub3duJyBvciBgcGFyYW5vaWQnCistd2lsZGNhcmQgcGF0dGVybnMuIFRoZSBkZWZhdWx0IHNlcnZlciBuYW1lIGlzIGB1bmtub3duJy4KKytBIGhvc3QgbmFtZSBvciBuZXR3b3JrIGFkZHJlc3MsIG9yIG9uZSBvZiB0aGUgYHVua25vd25cJyBvciBgcGFyYW5vaWRcJworK3dpbGRjYXJkIHBhdHRlcm5zLiBUaGUgZGVmYXVsdCBzZXJ2ZXIgbmFtZSBpcyBgdW5rbm93blwnLgorIC5QUAorIE9wdGlvbmFsIGluZm9ybWF0aW9uIHNwZWNpZmllZCB3aXRoIHRoZSBcZkl1c2VyQGNsaWVudFxmUiBmb3JtOgorIC5JUCB1c2VyCisgQSBjbGllbnQgdXNlciBpZGVudGlmaWVyLiBUeXBpY2FsbHksIGEgbG9naW4gbmFtZSBvciBhIG51bWVyaWMgdXNlcmlkLgorLVRoZSBkZWZhdWx0IHVzZXIgbmFtZSBpcyBgdW5rbm93bicuCisrVGhlIGRlZmF1bHQgdXNlciBuYW1lIGlzIGB1bmtub3duXCcuCisgLlNIIE9QVElPTlMKKyAuSVAgLWQKKyBFeGFtaW5lIFxmSWhvc3RzLmFsbG93XGZSIGFuZCBcZklob3N0cy5kZW55XGZSIGZpbGVzIGluIHRoZSBjdXJyZW50CitAQCAtNzAsNyArNzAsNyBAQAorIC50aSArNQorIHRjcGRtYXRjaCBpbi50ZWxuZXRkIHBhcmFub2lkCisgLlBQCistT24gc29tZSBzeXN0ZW1zLCBkYWVtb24gbmFtZXMgaGF2ZSBubyBgaW4uJyBwcmVmaXgsIG9yIFxmSXRjcGRtYXRjaFxmUgorK09uIHNvbWUgc3lzdGVtcywgZGFlbW9uIG5hbWVzIGhhdmUgbm8gYGluLlwnIHByZWZpeCwgb3IgXGZJdGNwZG1hdGNoXGZSCisgbWF5IG5lZWQgc29tZSBoZWxwIHRvIGxvY2F0ZSB0aGUgaW5ldGQgY29uZmlndXJhdGlvbiBmaWxlLgorIC5TSCBGSUxFUworIC5QUApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDFfbWFuX3BvcnRhYmlsaXR5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDFfbWFuX3BvcnRhYmlsaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNzM1YmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wMV9tYW5fcG9ydGFiaWxpdHkucGF0Y2gKQEAgLTAsMCArMSwyNTAgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOcCB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjMgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuMworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuMwkyMDA1LTAzLTA5IDE4OjMwOjI1LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjMJMjAwNS0wMy0wOSAxODoyNzowMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zLDcgKzMsNyBAQAorIGhvc3RzX2FjY2VzcywgaG9zdHNfY3RsLCByZXF1ZXN0X2luaXQsIHJlcXVlc3Rfc2V0IFwtIGFjY2VzcyBjb250cm9sIGxpYnJhcnkKKyAuU0ggU1lOT1BTSVMKKyAubmYKKy0jaW5jbHVkZSAidGNwZC5oIgorKyNpbmNsdWRlIDx0Y3BkLmg+CisgCisgZXh0ZXJuIGludCBhbGxvd19zZXZlcml0eTsKKyBleHRlcm4gaW50IGRlbnlfc2V2ZXJpdHk7CitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41CTIwMDUtMDMtMDkgMTg6MzA6MjUuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQkyMDA1LTAzLTA5IDE4OjMwOjE4LjAwMDAwMDAwMCArMDEwMAorQEAgLTgsOSArOCw5IEBAIG5hbWUsIGhvc3QgbmFtZS9hZGRyZXNzKSBwYXR0ZXJucy4gIEV4YW0KKyBpbXBhdGllbnQgcmVhZGVyIGlzIGVuY291cmFnZWQgdG8gc2tpcCB0byB0aGUgRVhBTVBMRVMgc2VjdGlvbiBmb3IgYQorIHF1aWNrIGludHJvZHVjdGlvbi4KKyAuUFAKKy1BbiBleHRlbmRlZCB2ZXJzaW9uIG9mIHRoZSBhY2Nlc3MgY29udHJvbCBsYW5ndWFnZSBpcyBkZXNjcmliZWQgaW4gdGhlCistXGZJaG9zdHNfb3B0aW9uc1xmUig1KSBkb2N1bWVudC4gVGhlIGV4dGVuc2lvbnMgYXJlIHR1cm5lZCBvbiBhdAorLXByb2dyYW0gYnVpbGQgdGltZSBieSBidWlsZGluZyB3aXRoIC1EUFJPQ0VTU19PUFRJT05TLgorK1RoZSBleHRlbmRlZCB2ZXJzaW9uIG9mIHRoZSBhY2Nlc3MgY29udHJvbCBsYW5ndWFnZSBpcyBkZXNjcmliZWQgaW4gdGhlCisrXGZJaG9zdHNfb3B0aW9uc1xmUig1KSBkb2N1bWVudC4gXGZCTm90ZSB0aGF0IHRoaXMgbGFuZ3VhZ2Ugc3VwZXJzZWRlcworK3RoZSBtZWFuaW5nIG9mIFxmSXNoZWxsX2NvbW1hbmRcZkIgYXMgZG9jdW1lbnRlZCBiZWxvdy5cZlIKKyAuUFAKKyBJbiB0aGUgZm9sbG93aW5nIHRleHQsIFxmSWRhZW1vblxmUiBpcyB0aGUgdGhlIHByb2Nlc3MgbmFtZSBvZiBhCisgbmV0d29yayBkYWVtb24gcHJvY2VzcywgYW5kIFxmSWNsaWVudFxmUiBpcyB0aGUgbmFtZSBhbmQvb3IgYWRkcmVzcyBvZgorQEAgLTM0Niw4ICszNDYsOCBAQCBpbi50ZnRwZDogTE9DQUwsIC5teS5kb21haW4KKyAvZXRjL2hvc3RzLmRlbnk6CisgLmluICszCisgLm5mCistaW4udGZ0cGQ6IEFMTDogKC9zb21lL3doZXJlL3NhZmVfZmluZ2VyIC1sIEAlaCB8IFxcCistCS91c3IvdWNiL21haWwgLXMgJWQtJWggcm9vdCkgJgorK2luLnRmdHBkOiBBTEw6ICgvdXNyL3NiaW4vc2FmZV9maW5nZXIgLWwgQCVoIHwgXFwKKysJL3Vzci9iaW4vbWFpbCAtcyAlZC0laCByb290KSAmCisgLmZpCisgLlBQCisgVGhlIHNhZmVfZmluZ2VyIGNvbW1hbmQgY29tZXMgd2l0aCB0aGUgdGNwZCB3cmFwcGVyIGFuZCBzaG91bGQgYmUKK0BAIC0zODMsNiArMzgzLDcgQEAgdGhhdCBzaG91bGRuXCd0LiAgQWxsIHByb2JsZW1zIGFyZSByZXBvcgorIC5maQorIC5TSCBTRUUgQUxTTworIC5uZgorK2hvc3RzX29wdGlvbnMoNSkgZXh0ZW5kZWQgc3ludGF4LgorIHRjcGQoOCkgdGNwL2lwIGRhZW1vbiB3cmFwcGVyIHByb2dyYW0uCisgdGNwZGNoayg4KSwgdGNwZG1hdGNoKDgpLCB0ZXN0IHByb2dyYW1zLgorIC5TSCBCVUdTCitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19vcHRpb25zLjUgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19vcHRpb25zLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfb3B0aW9ucy41CTIwMDUtMDMtMDkgMTg6MzA6MjQuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19vcHRpb25zLjUJMjAwNS0wMy0wOSAxODoyNzowMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yLDEwICsyLDggQEAKKyAuU0ggTkFNRQorIGhvc3RzX29wdGlvbnMgXC0gaG9zdCBhY2Nlc3MgY29udHJvbCBsYW5ndWFnZSBleHRlbnNpb25zCisgLlNIIERFU0NSSVBUSU9OCistVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgb3B0aW9uYWwgZXh0ZW5zaW9ucyB0byB0aGUgbGFuZ3VhZ2UgZGVzY3JpYmVkCistaW4gdGhlIGhvc3RzX2FjY2Vzcyg1KSBkb2N1bWVudC4gVGhlIGV4dGVuc2lvbnMgYXJlIGVuYWJsZWQgYXQgcHJvZ3JhbQorLWJ1aWxkIHRpbWUuIEZvciBleGFtcGxlLCBieSBlZGl0aW5nIHRoZSBNYWtlZmlsZSBhbmQgdHVybmluZyBvbiB0aGUgCistUFJPQ0VTU19PUFRJT05TIGNvbXBpbGUtdGltZSBvcHRpb24uCisrVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgZXh0ZW5zaW9ucyB0byB0aGUgbGFuZ3VhZ2UgZGVzY3JpYmVkCisraW4gdGhlIGhvc3RzX2FjY2Vzcyg1KSBkb2N1bWVudC4KKyAuUFAKKyBUaGUgZXh0ZW5zaWJsZSBsYW5ndWFnZSB1c2VzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorIC5zcAorQEAgLTU4LDEyICs1NiwxMiBAQCBOb3RpY2UgdGhlIGxlYWRpbmcgZG90IG9uIHRoZSBkb21haW4gbmFtCisgRXhlY3V0ZSwgaW4gYSBjaGlsZCBwcm9jZXNzLCB0aGUgc3BlY2lmaWVkIHNoZWxsIGNvbW1hbmQsIGFmdGVyCisgcGVyZm9ybWluZyB0aGUgJTxsZXR0ZXI+IGV4cGFuc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBob3N0c19hY2Nlc3MoNSkKKyBtYW51YWwgcGFnZS4gIFRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkIHdpdGggc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyCistY29ubmVjdGVkIHRvIHRoZSBudWxsIGRldmljZSwgc28gdGhhdCBpdCB3b25cJ3QgbWVzcyB1cCB0aGUKKytjb25uZWN0ZWQgdG8gdGhlIG51bGwgZGV2aWNlLCBzbyB0aGF0IGl0IHdvbid0IG1lc3MgdXAgdGhlCisgY29udmVyc2F0aW9uIHdpdGggdGhlIGNsaWVudCBob3N0LiBFeGFtcGxlOgorIC5zcAorIC5uZgorIC50aSArMworLXNwYXduICgvc29tZS93aGVyZS9zYWZlX2ZpbmdlciAtbCBAJWggfCAvdXNyL3VjYi9tYWlsIHJvb3QpICYKKytzcGF3biAoL3Vzci9zYmluL3NhZmVfZmluZ2VyIC1sIEAlaCB8IC91c3IvYmluL21haWwgcm9vdCkgJgorIC5maQorIC5zcAorIGV4ZWN1dGVzLCBpbiBhIGJhY2tncm91bmQgY2hpbGQgcHJvY2VzcywgdGhlIHNoZWxsIGNvbW1hbmQgInNhZmVfZmluZ2VyCitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy9pbmV0Y2YuYyB0Y3Bfd3JhcHBlcnNfNy42L2luZXRjZi5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2luZXRjZi5jCTE5OTctMDItMTIgMDI6MTM6MjQuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9pbmV0Y2YuYwkyMDA1LTAzLTA5IDE4OjI3OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTI2LDEzICsyNiwxNyBAQCBleHRlcm4gdm9pZCBleGl0KCk7CisgICAqIGd1ZXNzZXMuIFNob3J0ZXIgbmFtZXMgZm9sbG93IGxvbmdlciBvbmVzLgorICAgKi8KKyBjaGFyICAgKmluZXRfZmlsZXNbXSA9IHsKKysjaWYgMAorICAgICAiL3ByaXZhdGUvZXRjL2luZXRkLmNvbmYiLAkJLyogTkVYVCAqLworICAgICAiL2V0Yy9pbmV0L2luZXRkLmNvbmYiLAkJLyogU1lTVjQgKi8KKyAgICAgIi91c3IvZXRjL2luZXRkLmNvbmYiLAkJLyogSVJJWD8/ICovCisrI2VuZGlmCisgICAgICIvZXRjL2luZXRkLmNvbmYiLAkJCS8qIEJTRCAqLworKyNpZiAwCisgICAgICIvZXRjL25ldC90bGlkLmNvbmYiLAkJLyogU1lTVjQ/PyAqLworICAgICAiL2V0Yy9zYWYvdGxpZC5jb25mIiwJCS8qIFNZU1Y0Pz8gKi8KKyAgICAgIi9ldGMvdGxpZC5jb25mIiwJCQkvKiBTWVNWND8/ICovCisrI2VuZGlmCisgICAgIDAsCisgfTsKKyAKK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuOCB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuOAorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLjgJMTk5Ni0wMi0yMSAxNjozOToxNi4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuOAkyMDA1LTAzLTA5IDE4OjI3OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTEyLDcgKzEyLDExIEBAIFRoZSBwcm9ncmFtIHN1cHBvcnRzIGJvdGggNC4zQlNELXN0eWxlIHMKKyBUTEkuICBGdW5jdGlvbmFsaXR5IG1heSBiZSBsaW1pdGVkIHdoZW4gdGhlIHByb3RvY29sIHVuZGVybmVhdGggVExJIGlzCisgbm90IGFuIGludGVybmV0IHByb3RvY29sLgorIC5QUAorLU9wZXJhdGlvbiBpcyBhcyBmb2xsb3dzOiB3aGVuZXZlciBhIHJlcXVlc3QgZm9yIHNlcnZpY2UgYXJyaXZlcywgdGhlCisrVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBtb2RlcyBvZiBvcGVyYXRpb246IGV4ZWN1dGlvbiBvZiBcZkl0Y3BkXGZQCisrYmVmb3JlIGEgc2VydmljZSBzdGFydGVkIGJ5IFxmSWluZXRkXGZQLCBvciBsaW5raW5nIGEgZGFlbW9uIHdpdGgKKyt0aGUgXGZJbGlid3JhcFxmUCBzaGFyZWQgbGlicmFyeSBhcyBkb2N1bWVudGVkIGluIHRoZSBcZklob3N0c19hY2Nlc3NcZlIoMykKKyttYW51YWwgcGFnZS4gT3BlcmF0aW9uIHdoZW4gc3RhcnRlZCBieSBcZklpbmV0ZFxmUAorK2lzIGFzIGZvbGxvd3M6IHdoZW5ldmVyIGEgcmVxdWVzdCBmb3Igc2VydmljZSBhcnJpdmVzLCB0aGUKKyBcZklpbmV0ZFxmUCBkYWVtb24gaXMgdHJpY2tlZCBpbnRvIHJ1bm5pbmcgdGhlIFxmSXRjcGRcZlAgcHJvZ3JhbQorIGluc3RlYWQgb2YgdGhlIGRlc2lyZWQgc2VydmVyLiBcZkl0Y3BkXGZQIGxvZ3MgdGhlIHJlcXVlc3QgYW5kIGRvZXMKKyBzb21lIGFkZGl0aW9uYWwgY2hlY2tzLiBXaGVuIGFsbCBpcyB3ZWxsLCBcZkl0Y3BkXGZQIHJ1bnMgdGhlCitAQCAtODgsMTEgKzkyLDExIEBAIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgLnNwCisgLmluICs1CisgIyBta2RpciAvb3RoZXIvcGxhY2UKKy0jIG12IC91c3IvZXRjL2luLmZpbmdlcmQgL290aGVyL3BsYWNlCistIyBjcCB0Y3BkIC91c3IvZXRjL2luLmZpbmdlcmQKKysjIG12IC91c3Ivc2Jpbi9pbi5maW5nZXJkIC9vdGhlci9wbGFjZQorKyMgY3AgdGNwZCAvdXNyL3NiaW4vaW4uZmluZ2VyZAorIC5maQorIC5QUAorLVRoZSBleGFtcGxlIGFzc3VtZXMgdGhhdCB0aGUgbmV0d29yayBkYWVtb25zIGxpdmUgaW4gL3Vzci9ldGMuIE9uIHNvbWUKKytUaGUgZXhhbXBsZSBhc3N1bWVzIHRoYXQgdGhlIG5ldHdvcmsgZGFlbW9ucyBsaXZlIGluIC91c3Ivc2Jpbi4gT24gc29tZQorIHN5c3RlbXMsIG5ldHdvcmsgZGFlbW9ucyBsaXZlIGluIC91c3Ivc2JpbiBvciBpbiAvdXNyL2xpYmV4ZWMsIG9yIGhhdmUKKyBubyBgaW4uXCcgcHJlZml4IHRvIHRoZWlyIG5hbWUuCisgLlNIIEVYQU1QTEUgMgorQEAgLTEwMSwzNSArMTA1LDM0IEBAIGFyZSBsZWZ0IGluIHRoZWlyIG9yaWdpbmFsIHBsYWNlLgorIC5QUAorIEluIG9yZGVyIHRvIG1vbml0b3IgYWNjZXNzIHRvIHRoZSBcZklmaW5nZXJcZlIgc2VydmljZSwgcGVyZm9ybSB0aGUKKyBmb2xsb3dpbmcgZWRpdHMgb24gdGhlIFxmSWluZXRkXGZSIGNvbmZpZ3VyYXRpb24gZmlsZSAodXN1YWxseSAKKy1cZkkvZXRjL2luZXRkLmNvbmZcZlIgb3IgXGZJL2V0Yy9pbmV0L2luZXRkLmNvbmZcZlIpOgorK1xmSS9ldGMvaW5ldGQuY29uZlxmUik6CisgLm5mCisgLnNwCisgLnRpICs1CistZmluZ2VyICBzdHJlYW0gIHRjcCAgbm93YWl0ICBub2JvZHkgIC91c3IvZXRjL2luLmZpbmdlcmQgIGluLmZpbmdlcmQKKytmaW5nZXIgIHN0cmVhbSAgdGNwICBub3dhaXQgIG5vYm9keSAgL3Vzci9zYmluL2luLmZpbmdlcmQgIGluLmZpbmdlcmQKKyAuc3AKKyBiZWNvbWVzOgorIC5zcAorIC50aSArNQorLWZpbmdlciAgc3RyZWFtICB0Y3AgIG5vd2FpdCAgbm9ib2R5ICAvc29tZS93aGVyZS90Y3BkICAgICBpbi5maW5nZXJkCisrZmluZ2VyICBzdHJlYW0gIHRjcCAgbm93YWl0ICBub2JvZHkgIC91c3Ivc2Jpbi90Y3BkICAgICBpbi5maW5nZXJkCisgLnNwCisgLmZpCisgLlBQCistVGhlIGV4YW1wbGUgYXNzdW1lcyB0aGF0IHRoZSBuZXR3b3JrIGRhZW1vbnMgbGl2ZSBpbiAvdXNyL2V0Yy4gT24gc29tZQorK1RoZSBleGFtcGxlIGFzc3VtZXMgdGhhdCB0aGUgbmV0d29yayBkYWVtb25zIGxpdmUgaW4gL3Vzci9zYmluLiBPbiBzb21lCisgc3lzdGVtcywgbmV0d29yayBkYWVtb25zIGxpdmUgaW4gL3Vzci9zYmluIG9yIGluIC91c3IvbGliZXhlYywgdGhlCisgZGFlbW9ucyBoYXZlIG5vIGBpbi5cJyBwcmVmaXggdG8gdGhlaXIgbmFtZSwgb3IgdGhlcmUgaXMgbm8gdXNlcmlkCisgZmllbGQgaW4gdGhlIGluZXRkIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAuUFAKKyBTaW1pbGFyIGNoYW5nZXMgd2lsbCBiZSBuZWVkZWQgZm9yIHRoZSBvdGhlciBzZXJ2aWNlcyB0aGF0IGFyZSB0byBiZQorIGNvdmVyZWQgYnkgXGZJdGNwZFxmUi4gIFNlbmQgYSBga2lsbCAtSFVQXCcgdG8gdGhlIFxmSWluZXRkXGZSKDgpCistcHJvY2VzcyB0byBtYWtlIHRoZSBjaGFuZ2VzIGVmZmVjdGl2ZS4gQUlYIHVzZXJzIG1heSBhbHNvIGhhdmUgdG8KKy1leGVjdXRlIHRoZSBgaW5ldGltcFwnIGNvbW1hbmQuCisrcHJvY2VzcyB0byBtYWtlIHRoZSBjaGFuZ2VzIGVmZmVjdGl2ZS4KKyAuU0ggRVhBTVBMRSAzCisgSW4gdGhlIGNhc2Ugb2YgZGFlbW9ucyB0aGF0IGRvIG5vdCBsaXZlIGluIGEgY29tbW9uIGRpcmVjdG9yeSAoInNlY3JldCIKKyBvciBvdGhlcndpc2UpLCBlZGl0IHRoZSBcZklpbmV0ZFxmUiBjb25maWd1cmF0aW9uIGZpbGUgc28gdGhhdCBpdAorIHNwZWNpZmllcyBhbiBhYnNvbHV0ZSBwYXRoIG5hbWUgZm9yIHRoZSBwcm9jZXNzIG5hbWUgZmllbGQuIEZvciBleGFtcGxlOgorIC5uZgorIC5zcAorLSAgICBudGFsayAgZGdyYW0gIHVkcCAgd2FpdCAgcm9vdCAgL3NvbWUvd2hlcmUvdGNwZCAgL3Vzci9sb2NhbC9saWIvbnRhbGtkCisrICAgIG50YWxrICBkZ3JhbSAgdWRwICB3YWl0ICByb290ICAvdXNyL3NiaW4vdGNwZCAgL3Vzci9sb2NhbC9saWIvbnRhbGtkCisgLnNwCisgLmZpCisgLlBQCitAQCAtMTY0LDYgKzE2Nyw3IEBAIFRoZSBkZWZhdWx0IGxvY2F0aW9ucyBvZiB0aGUgaG9zdCBhY2Nlc3MKKyAuU0ggU0VFIEFMU08KKyAubmEKKyAubmYKKytob3N0c19hY2Nlc3MoMyksIGZ1bmN0aW9ucyBwcm92aWRlZCBieSB0aGUgbGlid3JhcCBsaWJyYXJ5LgorIGhvc3RzX2FjY2Vzcyg1KSwgZm9ybWF0IG9mIHRoZSB0Y3BkIGFjY2VzcyBjb250cm9sIHRhYmxlcy4KKyBzeXNsb2cuY29uZig1KSwgZm9ybWF0IG9mIHRoZSBzeXNsb2dkIGNvbnRyb2wgZmlsZS4KKyBpbmV0ZC5jb25mKDUpLCBmb3JtYXQgb2YgdGhlIGluZXRkIGNvbnRyb2wgZmlsZS4KK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuOCB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuOAorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkY2hrLjgJMTk5NS0wMS0wOCAxNzowMDozMS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuOAkyMDA1LTAzLTA5IDE4OjI3OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTksOCArOSw4IEBAIHRjcGRjaGsgWy1hXSBbLWRdIFstaSBpbmV0X2NvbmZdIFstdl0KKyBwb3RlbnRpYWwgYW5kIHJlYWwgcHJvYmxlbXMgaXQgY2FuIGZpbmQuIFRoZSBwcm9ncmFtIGV4YW1pbmVzIHRoZQorIFxmSXRjcGRcZlIgYWNjZXNzIGNvbnRyb2wgZmlsZXMgKGJ5IGRlZmF1bHQsIHRoZXNlIGFyZQorIFxmSS9ldGMvaG9zdHMuYWxsb3dcZlIgYW5kIFxmSS9ldGMvaG9zdHMuZGVueVxmUiksIGFuZCBjb21wYXJlcyB0aGUKKy1lbnRyaWVzIGluIHRoZXNlIGZpbGVzIGFnYWluc3QgZW50cmllcyBpbiB0aGUgXGZJaW5ldGRcZlIgb3IgXGZJdGxpZFxmUgorLW5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlcy4KKytlbnRyaWVzIGluIHRoZXNlIGZpbGVzIGFnYWluc3QgZW50cmllcyBpbiB0aGUgXGZJaW5ldGRcZlIKKytuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAuUFAKKyBcZkl0Y3BkY2hrXGZSIHJlcG9ydHMgcHJvYmxlbXMgc3VjaCBhcyBub24tZXhpc3RlbnQgcGF0aG5hbWVzOyBzZXJ2aWNlcworIHRoYXQgYXBwZWFyIGluIFxmSXRjcGRcZlIgYWNjZXNzIGNvbnRyb2wgcnVsZXMsIGJ1dCBhcmUgbm90IGNvbnRyb2xsZWQKK0BAIC0yNiwxNCArMjYsMTMgQEAgcHJvYmxlbS4KKyAuU0ggT1BUSU9OUworIC5JUCAtYQorIFJlcG9ydCBhY2Nlc3MgY29udHJvbCBydWxlcyB0aGF0IHBlcm1pdCBhY2Nlc3Mgd2l0aG91dCBhbiBleHBsaWNpdAorLUFMTE9XIGtleXdvcmQuIFRoaXMgYXBwbGllcyBvbmx5IHdoZW4gdGhlIGV4dGVuZGVkIGFjY2VzcyBjb250cm9sCistbGFuZ3VhZ2UgaXMgZW5hYmxlZCAoYnVpbGQgd2l0aCAtRFBST0NFU1NfT1BUSU9OUykuCisrQUxMT1cga2V5d29yZC4KKyAuSVAgLWQKKyBFeGFtaW5lIFxmSWhvc3RzLmFsbG93XGZSIGFuZCBcZklob3N0cy5kZW55XGZSIGZpbGVzIGluIHRoZSBjdXJyZW50CisgZGlyZWN0b3J5IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgb25lcy4KKyAuSVAgIi1pIGluZXRfY29uZiIKKyBTcGVjaWZ5IHRoaXMgb3B0aW9uIHdoZW4gXGZJdGNwZGNoa1xmUiBpcyB1bmFibGUgdG8gZmluZCB5b3VyCistXGZJaW5ldGQuY29uZlxmUiBvciBcZkl0bGlkLmNvbmZcZlIgbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGUsIG9yIHdoZW4KKytcZklpbmV0ZC5jb25mXGZSIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLCBvciB3aGVuCisgeW91IHN1c3BlY3QgdGhhdCB0aGUgcHJvZ3JhbSB1c2VzIHRoZSB3cm9uZyBvbmUuCisgLklQIC12CisgRGlzcGxheSB0aGUgY29udGVudHMgb2YgZWFjaCBhY2Nlc3MgY29udHJvbCBydWxlLiAgRGFlbW9uIGxpc3RzLCBjbGllbnQKK0BAIC01NCw3ICs1Myw2IEBAIHRjcGRtYXRjaCg4KSwgZXhwbGFpbiB3aGF0IHRjcGQgd291bGQgZG8KKyBob3N0c19hY2Nlc3MoNSksIGZvcm1hdCBvZiB0aGUgdGNwZCBhY2Nlc3MgY29udHJvbCB0YWJsZXMuCisgaG9zdHNfb3B0aW9ucyg1KSwgZm9ybWF0IG9mIHRoZSBsYW5ndWFnZSBleHRlbnNpb25zLgorIGluZXRkLmNvbmYoNSksIGZvcm1hdCBvZiB0aGUgaW5ldGQgY29udHJvbCBmaWxlLgorLXRsaWQuY29uZig1KSwgZm9ybWF0IG9mIHRoZSB0bGlkIGNvbnRyb2wgZmlsZS4KKyAuU0ggQVVUSE9SUworIC5uYQorIC5uZgorZGlmZiAtcnVOcCB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZG1hdGNoLjggdGNwX3dyYXBwZXJzXzcuNi90Y3BkbWF0Y2guOAorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkbWF0Y2guOAkyMDA1LTAzLTA5IDE4OjMwOjI0LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZG1hdGNoLjgJMjAwNS0wMy0wOSAxODoyNzowMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMyw3ICsxMyw3IEBAIHJlcXVlc3QgZm9yIHNlcnZpY2UuICBFeGFtcGxlcyBhcmUgZ2l2ZW4KKyBUaGUgcHJvZ3JhbSBleGFtaW5lcyB0aGUgXGZJdGNwZFxmUiBhY2Nlc3MgY29udHJvbCB0YWJsZXMgKGRlZmF1bHQKKyBcZkkvZXRjL2hvc3RzLmFsbG93XGZSIGFuZCBcZkkvZXRjL2hvc3RzLmRlbnlcZlIpIGFuZCBwcmludHMgaXRzCisgY29uY2x1c2lvbi4gIEZvciBtYXhpbWFsIGFjY3VyYWN5LCBpdCBleHRyYWN0cyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCistZnJvbSB5b3VyIFxmSWluZXRkXGZSIG9yIFxmSXRsaWRcZlIgbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGUuCisrZnJvbSB5b3VyIFxmSWluZXRkXGZSIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLgorIC5QUAorIFdoZW4gXGZJdGNwZG1hdGNoXGZSIGZpbmRzIGEgbWF0Y2ggaW4gdGhlIGFjY2VzcyBjb250cm9sIHRhYmxlcywgaXQKKyBpZGVudGlmaWVzIHRoZSBtYXRjaGVkIHJ1bGUuIEluIGFkZGl0aW9uLCBpdCBkaXNwbGF5cyB0aGUgb3B0aW9uYWwKK0BAIC01MCw3ICs1MCw3IEBAIEV4YW1pbmUgXGZJaG9zdHMuYWxsb3dcZlIgYW5kIFxmSWhvc3RzLmQKKyBkaXJlY3RvcnkgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBvbmVzLgorIC5JUCAiLWkgaW5ldF9jb25mIgorIFNwZWNpZnkgdGhpcyBvcHRpb24gd2hlbiBcZkl0Y3BkbWF0Y2hcZlIgaXMgdW5hYmxlIHRvIGZpbmQgeW91cgorLVxmSWluZXRkLmNvbmZcZlIgb3IgXGZJdGxpZC5jb25mXGZSIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLCBvciB3aGVuCisrXGZJaW5ldGQuY29uZlxmUiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3Igd2hlbgorIHlvdSBzdXNwZWN0IHRoYXQgdGhlIHByb2dyYW0gdXNlcyB0aGUgd3Jvbmcgb25lLgorIC5TSCBFWEFNUExFUworIFRvIHByZWRpY3QgaG93IFxmSXRjcGRcZlIgd291bGQgaGFuZGxlIGEgdGVsbmV0IHJlcXVlc3QgZnJvbSB0aGUgbG9jYWwKK0BAIC04Niw3ICs4Niw2IEBAIHRjcGRjaGsoOCksIHRjcGQgY29uZmlndXJhdGlvbiBjaGVja2VyCisgaG9zdHNfYWNjZXNzKDUpLCBmb3JtYXQgb2YgdGhlIHRjcGQgYWNjZXNzIGNvbnRyb2wgdGFibGVzLgorIGhvc3RzX29wdGlvbnMoNSksIGZvcm1hdCBvZiB0aGUgbGFuZ3VhZ2UgZXh0ZW5zaW9ucy4KKyBpbmV0ZC5jb25mKDUpLCBmb3JtYXQgb2YgdGhlIGluZXRkIGNvbnRyb2wgZmlsZS4KKy10bGlkLmNvbmYoNSksIGZvcm1hdCBvZiB0aGUgdGxpZCBjb250cm9sIGZpbGUuCisgLlNIIEFVVEhPUlMKKyAubmEKKyAubmYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzA1X3dpbGRjYXJkX21hdGNoaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDVfd2lsZGNhcmRfbWF0Y2hpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUxODgwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzA1X3dpbGRjYXJkX21hdGNoaW5nLnBhdGNoCkBAIC0wLDAgKzEsMTA1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NlZSBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTE3ODQ3CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNQkyMDA0LTA0LTEwIDE4OjU0OjMzLjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0xMCAxODo1NDoyNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC04OSw2ICs4OSwxMCBAQAorIGJpdHdpc2UgQU5EIG9mIHRoZSBhZGRyZXNzIGFuZCB0aGUgYG1hc2tcJy4gRm9yIGV4YW1wbGUsIHRoZSBuZXQvbWFzaworIHBhdHRlcm4gYDEzMS4xNTUuNzIuMC8yNTUuMjU1LjI1NC4wXCcgbWF0Y2hlcyBldmVyeSBhZGRyZXNzIGluIHRoZQorIHJhbmdlIGAxMzEuMTU1LjcyLjBcJyB0aHJvdWdoIGAxMzEuMTU1LjczLjI1NVwnLgorKy5JUCBcKGJ1CisrV2lsZGNhcmRzIGAqXCcgYW5kIGA/XCcgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggaG9zdG5hbWVzIG9yIElQIGFkZHJlc3Nlcy4gIFRoaXMKKyttZXRob2Qgb2YgbWF0Y2hpbmcgY2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgbmV0L21hc2tcJyBtYXRjaGluZywKKytob3N0bmFtZSBtYXRjaGluZyBiZWdpbm5pbmcgd2l0aCBgLlwnIG9yIElQIGFkZHJlc3MgbWF0Y2hpbmcgZW5kaW5nIHdpdGggYC5cJy4KKyAuU0ggV0lMRENBUkRTCisgVGhlIGFjY2VzcyBjb250cm9sIGxhbmd1YWdlIHN1cHBvcnRzIGV4cGxpY2l0IHdpbGRjYXJkczoKKyAuSVAgQUxMCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy5jIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLmMJMTk5Ny0wMi0xMiAwMjoxMzoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCTIwMDQtMDQtMTAgMTg6NTI6MjEuMDAwMDAwMDAwICswMjAwCitAQCAtMjg5LDYgKzI4OSwxMSBAQAorIHsKKyAgICAgaW50ICAgICBuOworIAorKyNpZm5kZWYgRElTQUJMRV9XSUxEQ0FSRF9NQVRDSElORworKyAgICBpZiAoc3RyY2hyKHRvaywgJyonKSB8fCBzdHJjaHIodG9rLCc/JykpIHsgIC8qIGNvbnRhaW5zICcqJyBvciAnPycgKi8KKysgICAgICAgIHJldHVybiAobWF0Y2hfcGF0dGVybl95bG8oc3RyaW5nLHRvaykpOyAJICAgICAgIAorKyAgICB9IGVsc2UgCisrI2VuZGlmICAgIAorICAgICBpZiAodG9rWzBdID09ICcuJykgewkJCS8qIHN1ZmZpeCAqLworIAluID0gc3RybGVuKHN0cmluZykgLSBzdHJsZW4odG9rKTsKKyAJcmV0dXJuIChuID4gMCAmJiBTVFJfRVEodG9rLCBzdHJpbmcgKyBuKSk7CitAQCAtMzI5LDMgKzMzNCw3MSBAQAorICAgICB9CisgICAgIHJldHVybiAoKGFkZHIgJiBtYXNrKSA9PSBuZXQpOworIH0KKysKKysjaWZuZGVmIERJU0FCTEVfV0lMRENBUkRfTUFUQ0hJTkcKKysvKiBOb3RlOiB0aGlzIGZlYXR1cmUgaGFzIGJlZW4gYWRhcHRlZCBpbiBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgd2F5CisrICAgZnJvbSBUYXR1IFlsb25lbidzIGxhc3QgU1NIIHZlcnNpb24gdW5kZXIgZnJlZSBsaWNlbnNlIGJ5IAorKyAgIFBla2thIFNhdm9sYSA8cGVra2FzQG5ldGNvcmUuZmk+LgorKworKyAgIENvcHlyaWdodCAoYykgMTk5NSBUYXR1IFlsb25lbiA8eWxvQGNzLmh1dC5maT4sIEVzcG9vLCBGaW5sYW5kCisrKi8KKysKKysvKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHN0cmluZyBtYXRjaGVzIHRoZSBwYXR0ZXJuICh3aGljaCBtYXkgY29udGFpbgorKyAgID8gYW5kICogYXMgd2lsZGNhcmRzKSwgYW5kIHplcm8gaWYgaXQgZG9lcyBub3QgbWF0Y2guICovCisrCSAgCisraW50IG1hdGNoX3BhdHRlcm5feWxvKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKnBhdHRlcm4pCisreworKyAgd2hpbGUgKDEpCisrICAgIHsKKysgICAgICAvKiBJZiBhdCBlbmQgb2YgcGF0dGVybiwgYWNjZXB0IGlmIGFsc28gYXQgZW5kIG9mIHN0cmluZy4gKi8KKysgICAgICBpZiAoISpwYXR0ZXJuKQorKyAgICAgICAgcmV0dXJuICEqczsKKysKKysgICAgICAvKiBQcm9jZXNzICcqJy4gKi8KKysgICAgICBpZiAoKnBhdHRlcm4gPT0gJyonKQorKyAgICAgICAgeworKwkgIC8qIFNraXAgdGhlIGFzdGVyaXNrLiAqLworKwkgIHBhdHRlcm4rKzsKKysKKysJICAvKiBJZiBhdCBlbmQgb2YgcGF0dGVybiwgYWNjZXB0IGltbWVkaWF0ZWx5LiAqLworKyAgICAgICAgICBpZiAoISpwYXR0ZXJuKQorKyAgICAgICAgICAgIHJldHVybiAxOworKworKwkgIC8qIElmIG5leHQgY2hhcmFjdGVyIGluIHBhdHRlcm4gaXMga25vd24sIG9wdGltaXplLiAqLworKyAgICAgICAgICBpZiAoKnBhdHRlcm4gIT0gJz8nICYmICpwYXR0ZXJuICE9ICcqJykKKysgICAgICAgICAgICB7CisrCSAgICAgIC8qIExvb2sgaW5zdGFuY2VzIG9mIHRoZSBuZXh0IGNoYXJhY3RlciBpbiBwYXR0ZXJuLCBhbmQgdHJ5CisrCQkgdG8gbWF0Y2ggc3RhcnRpbmcgZnJvbSB0aG9zZS4gKi8KKysgICAgICAgICAgICAgIGZvciAoOyAqczsgcysrKQorKyAgICAgICAgICAgICAgICBpZiAoKnMgPT0gKnBhdHRlcm4gJiYKKysgICAgICAgICAgICAgICAgICAgIG1hdGNoX3BhdHRlcm5feWxvKHMgKyAxLCBwYXR0ZXJuICsgMSkpCisrICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisrCSAgICAgIC8qIEZhaWxlZC4gKi8KKysgICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgICAgIH0KKysKKysJICAvKiBNb3ZlIGFoZWFkIG9uZSBjaGFyYWN0ZXIgYXQgYSB0aW1lIGFuZCB0cnkgdG8gbWF0Y2ggYXQgZWFjaAorKwkgICAgIHBvc2l0aW9uLiAqLworKyAgICAgICAgICBmb3IgKDsgKnM7IHMrKykKKysgICAgICAgICAgICBpZiAobWF0Y2hfcGF0dGVybl95bG8ocywgcGF0dGVybikpCisrICAgICAgICAgICAgICByZXR1cm4gMTsKKysJICAvKiBGYWlsZWQuICovCisrICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgfQorKworKyAgICAgIC8qIFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIG1vcmUgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuICBJZiB3ZSBhcmUKKysJIGF0IHRoZSBlbmQsIGZhaWwuICovCisrICAgICAgaWYgKCEqcykKKysgICAgICAgIHJldHVybiAwOworKworKyAgICAgIC8qIENoZWNrIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nIGlzIGFjY2VwdGFibGUuICovCisrICAgICAgaWYgKCpwYXR0ZXJuICE9ICc/JyAmJiAqcGF0dGVybiAhPSAqcykKKysJcmV0dXJuIDA7CisrICAgICAgCisrICAgICAgLyogTW92ZSB0byB0aGUgbmV4dCBjaGFyYWN0ZXIsIGJvdGggaW4gc3RyaW5nIGFuZCBpbiBwYXR0ZXJuLiAqLworKyAgICAgIHMrKzsKKysgICAgICBwYXR0ZXJuKys7CisrICAgIH0KKysgIC8qTk9UUkVBQ0hFRCovCisrfQorKyNlbmRpZiAvKiBESVNBQkxFX1dJTERDQVJEX01BVENISU5HICovCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wNl9maXhfZ2V0aG9zdGJ5bmFtZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzA2X2ZpeF9nZXRob3N0YnluYW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNWY0YjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wNl9maXhfZ2V0aG9zdGJ5bmFtZS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyogTW9uIEZlYiAgNSAyMDAxIFByZXN0b24gQnJvd24gPHBicm93bkByZWRoYXQuY29tPgorLSBmaXggZ2V0aG9zdGJ5bmFtZSB0byB3b3JrIGJldHRlciB3aXRoIGRvdCAiLiIgbm90YXRpb24gKCMxNjk0OSkKKworLS0tIHRjcF93cmFwcGVyc183LjYvc29ja2V0LmMuZml4Z2V0aG9zdGJ5bmFtZQlGcmkgTWFyIDIxIDEzOjI3OjI1IDE5OTcKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3NvY2tldC5jCU1vbiBGZWIgIDUgMTQ6MDk6NDAgMjAwMQorQEAgLTUyLDcgKzUyLDggQEAKKyBjaGFyICAgKm5hbWU7CisgeworICAgICBjaGFyICAgIGRvdF9uYW1lW01BWEhPU1ROQU1FTEVOICsgMV07CistCisrICAgIHN0cnVjdCBob3N0ZW50ICpocDsKKysgICAgCisgICAgIC8qCisgICAgICAqIERvbid0IGFwcGVuZCBkb3RzIHRvIHVucXVhbGlmaWVkIG5hbWVzLiBTdWNoIG5hbWVzIGFyZSBsaWtlbHkgdG8gY29tZQorICAgICAgKiBmcm9tIGxvY2FsIGhvc3RzIGZpbGVzIG9yIGZyb20gTklTLgorQEAgLTYxLDggKzYyLDEyIEBACisgICAgIGlmIChzdHJjaHIobmFtZSwgJy4nKSA9PSAwIHx8IHN0cmxlbihuYW1lKSA+PSBNQVhIT1NUTkFNRUxFTiAtIDEpIHsKKyAJcmV0dXJuIChnZXRob3N0YnluYW1lKG5hbWUpKTsKKyAgICAgfSBlbHNlIHsKKy0Jc3ByaW50Zihkb3RfbmFtZSwgIiVzLiIsIG5hbWUpOworLQlyZXR1cm4gKGdldGhvc3RieW5hbWUoZG90X25hbWUpKTsKKysgICAgICAgIHNwcmludGYoZG90X25hbWUsICIlcy4iLCBuYW1lKTsKKysgICAgICAgIGhwID0gZ2V0aG9zdGJ5bmFtZShkb3RfbmFtZSk7CisrCWlmIChocCkKKysJICAgIHJldHVybiBocDsKKysJZWxzZQorKwkgICAgcmV0dXJuIChnZXRob3N0YnluYW1lKG5hbWUpKTsKKyAgICAgfQorIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEwX3VzYWdpLWlwdjYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMF91c2FnaS1pcHY2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZDQ3YzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMF91c2FnaS1pcHY2LnBhdGNoCkBAIC0wLDAgKzEsMTI1NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2ZpeF9vcHRpb25zLmMgdGNwX3dyYXBwZXJzXzcuNi9maXhfb3B0aW9ucy5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2ZpeF9vcHRpb25zLmMJMTk5Ny0wNC0wOCAwMjoyOToxOS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2ZpeF9vcHRpb25zLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMSw2ICsxMSw5IEBACisgCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaWZkZWYgSU5FVDYKKysjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorQEAgLTQxLDYgKzQ0LDIyIEBACisgICAgIHVuc2lnbmVkIGludCBvcHQ7CisgICAgIGludCAgICAgb3B0bGVuOworICAgICBzdHJ1Y3QgaW5fYWRkciBkdW1teTsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3M7CisrICAgIGludCBzc2xlbjsKKysKKysgICAgLyoKKysgICAgICogY2hlY2sgaWYgdGhpcyBpcyBBRl9JTkVUIHNvY2tldAorKyAgICAgKiBYWFggSVB2NiBzdXBwb3J0PworKyAgICAgKi8KKysgICAgc3NsZW4gPSBzaXplb2Yoc3MpOworKyAgICBpZiAoZ2V0c29ja25hbWUoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3MsICZzc2xlbikgPCAwKSB7CisrCXN5c2xvZyhMT0dfRVJSLCAiZ2V0cGVlcm5hbWU6ICVtIik7CisrCWNsZWFuX2V4aXQocmVxdWVzdCk7CisrICAgIH0KKysgICAgaWYgKHNzLnNzX2ZhbWlseSAhPSBBRl9JTkVUKQorKwlyZXR1cm47CisrI2VuZGlmCisgCisgICAgIGlmICgoaXAgPSBnZXRwcm90b2J5bmFtZSgiaXAiKSkgIT0gMCkKKyAJaXBwcm90byA9IGlwLT5wX3Byb3RvOworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMTAgMTk6MjI6NTguMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTg1LDExICs4NSwxOCBAQAorIGZvciBkYWVtb24gcHJvY2VzcyBuYW1lcyBvciBmb3IgY2xpZW50IHVzZXIgbmFtZXMuCisgLklQIFwoYnUKKyBBbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBuLm4ubi5uL20ubS5tLm1cJyBpcyBpbnRlcnByZXRlZCBhcyBhCistYG5ldC9tYXNrXCcgcGFpci4gQSBob3N0IGFkZHJlc3MgaXMgbWF0Y2hlZCBpZiBgbmV0XCcgaXMgZXF1YWwgdG8gdGhlCisrYG5ldC9tYXNrXCcgcGFpci4gQW4gSVB2NCBob3N0IGFkZHJlc3MgaXMgbWF0Y2hlZCBpZiBgbmV0XCcgaXMgZXF1YWwgdG8gdGhlCisgYml0d2lzZSBBTkQgb2YgdGhlIGFkZHJlc3MgYW5kIHRoZSBgbWFza1wnLiBGb3IgZXhhbXBsZSwgdGhlIG5ldC9tYXNrCisgcGF0dGVybiBgMTMxLjE1NS43Mi4wLzI1NS4yNTUuMjU0LjBcJyBtYXRjaGVzIGV2ZXJ5IGFkZHJlc3MgaW4gdGhlCisgcmFuZ2UgYDEzMS4xNTUuNzIuMFwnIHRocm91Z2ggYDEzMS4xNTUuNzMuMjU1XCcuCisgLklQIFwoYnUKKytBbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBbbjpuOm46bjpuOm46bjpuXS9tXCcgaXMgaW50ZXJwcmV0ZWQgYXMgYQorK2BbbmV0XS9wcmVmaXhsZW5cJyBwYWlyLiBBbiBJUHY2IGhvc3QgYWRkcmVzcyBpcyBtYXRjaGVkIGlmCisrYHByZWZpeGxlblwnIGJpdHMgb2YgYG5ldFwnIGlzIGVxdWFsIHRvIHRoZSBgcHJlZml4bGVuXCcgYml0cyBvZiB0aGUKKythZGRyZXNzLiBGb3IgZXhhbXBsZSwgdGhlIFtuZXRdL3ByZWZpeGxlbiBwYXR0ZXJuCisrYFszZmZlOjUwNToyOjE6Ol0vNjRcJyBtYXRjaGVzIGV2ZXJ5IGFkZHJlc3MgaW4gdGhlIHJhbmdlCisrYDNmZmU6NTA1OjI6MTo6XCcgdGhyb3VnaCBgM2ZmZTo1MDU6MjoxOmZmZmY6ZmZmZjpmZmZmOmZmZmZcJy4KKysuSVAgXChidQorIFdpbGRjYXJkcyBgKlwnIGFuZCBgP1wnIGNhbiBiZSB1c2VkIHRvIG1hdGNoIGhvc3RuYW1lcyBvciBJUCBhZGRyZXNzZXMuICBUaGlzCisgbWV0aG9kIG9mIG1hdGNoaW5nIGNhbm5vdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYG5ldC9tYXNrXCcgbWF0Y2hpbmcsCisgaG9zdG5hbWUgbWF0Y2hpbmcgYmVnaW5uaW5nIHdpdGggYC5cJyBvciBJUCBhZGRyZXNzIG1hdGNoaW5nIGVuZGluZyB3aXRoIGAuXCcuCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy5jIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLmMJMjAwNC0wNC0xMCAxOToyMjo1OC4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMjQsNyArMjQsMTMgQEAKKyAvKiBTeXN0ZW0gbGlicmFyaWVzLiAqLworIAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaWZkZWYgSU5UMzJfVAorKyAgICB0eXBlZGVmIHVpbnQzMl90IHVfaW50MzJfdDsKKysjZW5kaWYKKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrI2lmZGVmIElORVQ2CisrI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KK0BAIC0zMyw2ICszOSw5IEBACisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHNldGptcC5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaWZkZWYgSU5FVDYKKysjaW5jbHVkZSA8bmV0ZGIuaD4KKysjZW5kaWYKKyAKKyBleHRlcm4gY2hhciAqZmdldHMoKTsKKyBleHRlcm4gaW50IGVycm5vOworQEAgLTgyLDYgKzkxLDEwIEBACisgc3RhdGljIGludCBob3N0X21hdGNoKCk7Cisgc3RhdGljIGludCBzdHJpbmdfbWF0Y2goKTsKKyBzdGF0aWMgaW50IG1hc2tlZF9tYXRjaCgpOworKyNpZmRlZiBJTkVUNgorK3N0YXRpYyBpbnQgbWFza2VkX21hdGNoNCgpOworK3N0YXRpYyBpbnQgbWFza2VkX21hdGNoNigpOworKyNlbmRpZgorIAorIC8qIFNpemUgb2YgbG9naWNhbCBsaW5lIGJ1ZmZlci4gKi8KKyAKK0BAIC0yODksNiArMzAyLDEzIEBACisgeworICAgICBpbnQgICAgIG47CisgCisrI2lmZGVmIElORVQ2CisrICAgIC8qIGNvbnZlcnQgSVB2NCBtYXBwZWQgSVB2NiBhZGRyZXNzIHRvIElQdjQgYWRkcmVzcyAqLworKyAgICBpZiAoU1RSTl9FUShzdHJpbmcsICI6OmZmZmY6IiwgNykKKysgICAgICAmJiBkb3RfcXVhZF9hZGRyKHN0cmluZyArIDcpICE9IElOQUREUl9OT05FKSB7CisrICAgICAgc3RyaW5nICs9IDc7CisrICAgIH0KKysjZW5kaWYgICAgCisgI2lmbmRlZiBESVNBQkxFX1dJTERDQVJEX01BVENISU5HCisgICAgIGlmIChzdHJjaHIodG9rLCAnKicpIHx8IHN0cmNocih0b2ssJz8nKSkgeyAgLyogY29udGFpbnMgJyonIG9yICc/JyAqLworICAgICAgICAgcmV0dXJuIChtYXRjaF9wYXR0ZXJuX3lsbyhzdHJpbmcsdG9rKSk7IAkgICAgICAgCitAQCAtMzA0LDIwICszMjQsNzIgQEAKKyAgICAgfSBlbHNlIGlmICh0b2tbKG4gPSBzdHJsZW4odG9rKSkgLSAxXSA9PSAnLicpIHsJLyogcHJlZml4ICovCisgCXJldHVybiAoU1RSTl9FUSh0b2ssIHN0cmluZywgbikpOworICAgICB9IGVsc2UgewkJCQkJLyogZXhhY3QgbWF0Y2ggKi8KKysjaWZkZWYgSU5FVDYKKysJc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzOworKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IHBhdCwgYWRkcjsKKysJaW50IGxlbiwgcmV0OworKwljaGFyIGNoOworKworKwlsZW4gPSBzdHJsZW4odG9rKTsKKysJaWYgKCp0b2sgPT0gJ1snICYmIHRva1tsZW4gLSAxXSA9PSAnXScpIHsKKysJICAgIGNoID0gdG9rW2xlbiAtIDFdOworKwkgICAgdG9rW2xlbiAtIDFdID0gJ1wwJzsKKysJICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworKwkgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDY7CisrCSAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKwkgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfTlVNRVJJQ0hPU1Q7CisrCSAgICBpZiAoKHJldCA9IGdldGFkZHJpbmZvKHRvayArIDEsIE5VTEwsICZoaW50cywgJnJlcykpID09IDApIHsKKysJCW1lbWNweSgmcGF0LCByZXMtPmFpX2FkZHIsIHNpemVvZihwYXQpKTsKKysJCWZyZWVhZGRyaW5mbyhyZXMpOworKwkgICAgfQorKwkgICAgdG9rW2xlbiAtIDFdID0gY2g7CisrCSAgICBpZiAocmV0ICE9IDAgfHwgZ2V0YWRkcmluZm8oc3RyaW5nLCBOVUxMLCAmaGludHMsICZyZXMpICE9IDApCisrCQlyZXR1cm4gTk87CisrCSAgICBtZW1jcHkoJmFkZHIsIHJlcy0+YWlfYWRkciwgc2l6ZW9mKGFkZHIpKTsKKysJICAgIGZyZWVhZGRyaW5mbyhyZXMpOworKyNpZmRlZiBOSV9XSVRIU0NPUEVJRAorKwkgICAgaWYgKHBhdC5zaW42X3Njb3BlX2lkICE9IDAgJiYKKysJCWFkZHIuc2luNl9zY29wZV9pZCAhPSBwYXQuc2luNl9zY29wZV9pZCkKKysJCXJldHVybiBOTzsKKysjZW5kaWYKKysJICAgIHJldHVybiAoIW1lbWNtcCgmcGF0LnNpbjZfYWRkciwgJmFkZHIuc2luNl9hZGRyLAorKwkJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkpOworKwkgICAgcmV0dXJuIChyZXQpOworKwl9CisrI2VuZGlmCisgCXJldHVybiAoU1RSX0VRKHRvaywgc3RyaW5nKSk7CisgICAgIH0KKyB9CisgCisgLyogbWFza2VkX21hdGNoIC0gbWF0Y2ggYWRkcmVzcyBhZ2FpbnN0IG5ldG51bWJlci9uZXRtYXNrICovCisgCisrI2lmZGVmIElORVQ2Cisgc3RhdGljIGludCBtYXNrZWRfbWF0Y2gobmV0X3RvaywgbWFza190b2ssIHN0cmluZykKKyBjaGFyICAgKm5ldF90b2s7CisgY2hhciAgICptYXNrX3RvazsKKyBjaGFyICAgKnN0cmluZzsKKyB7CisrICAgIHJldHVybiAobWFza2VkX21hdGNoNChuZXRfdG9rLCBtYXNrX3Rvaywgc3RyaW5nKSB8fAorKwkgICAgbWFza2VkX21hdGNoNihuZXRfdG9rLCBtYXNrX3Rvaywgc3RyaW5nKSk7CisrfQorKworK3N0YXRpYyBpbnQgbWFza2VkX21hdGNoNChuZXRfdG9rLCBtYXNrX3Rvaywgc3RyaW5nKQorKyNlbHNlCisrc3RhdGljIGludCBtYXNrZWRfbWF0Y2gobmV0X3RvaywgbWFza190b2ssIHN0cmluZykKKysjZW5kaWYKKytjaGFyICAgKm5ldF90b2s7CisrY2hhciAgICptYXNrX3RvazsKKytjaGFyICAgKnN0cmluZzsKKyt7CisrI2lmZGVmIElORVQ2CisrICAgIHVfaW50MzJfdCBuZXQ7CisrICAgIHVfaW50MzJfdCBtYXNrOworKyAgICB1X2ludDMyX3QgYWRkcjsKKysjZWxzZQorICAgICB1bnNpZ25lZCBsb25nIG5ldDsKKyAgICAgdW5zaWduZWQgbG9uZyBtYXNrOworICAgICB1bnNpZ25lZCBsb25nIGFkZHI7CisrI2VuZGlmCisgCisgICAgIC8qCisgICAgICAqIERpc2FsbG93IGZvcm1zIG90aGVyIHRoYW4gZG90dGVkIHF1YWQ6IHRoZSB0cmVhdG1lbnQgdGhhdCBpbmV0X2FkZHIoKQorQEAgLTMyOSwxMiArNDAxLDc4IEBACisgCXJldHVybiAoTk8pOworICAgICBpZiAoKG5ldCA9IGRvdF9xdWFkX2FkZHIobmV0X3RvaykpID09IElOQUREUl9OT05FCisgCXx8IChtYXNrID0gZG90X3F1YWRfYWRkcihtYXNrX3RvaykpID09IElOQUREUl9OT05FKSB7CisrI2lmbmRlZiBJTkVUNgorIAl0Y3BkX3dhcm4oImJhZCBuZXQvbWFzayBleHByZXNzaW9uOiAlcy8lcyIsIG5ldF90b2ssIG1hc2tfdG9rKTsKKysjZW5kaWYKKyAJcmV0dXJuIChOTyk7CQkJCS8qIG5vdCB0Y3BkX2p1bXAoKSAqLworICAgICB9CisgICAgIHJldHVybiAoKGFkZHIgJiBtYXNrKSA9PSBuZXQpOworIH0KKyAKKysjaWZkZWYgSU5FVDYKKytzdGF0aWMgaW50IG1hc2tlZF9tYXRjaDYobmV0X3RvaywgbWFza190b2ssIHN0cmluZykKKytjaGFyICAgKm5ldF90b2s7CisrY2hhciAgICptYXNrX3RvazsKKytjaGFyICAgKnN0cmluZzsKKyt7CisrICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50cywgKnJlczsKKysgICAgc3RydWN0IHNvY2thZGRyX2luNiBuZXQsIGFkZHI7CisrICAgIHVfaW50MzJfdCBtYXNrOworKyAgICBpbnQgbGVuLCBtYXNrX2xlbiwgaSA9IDA7CisrICAgIGNoYXIgY2g7CisrCisrICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworKyAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUNjsKKysgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfTlVNRVJJQ0hPU1Q7CisrICAgIGlmIChnZXRhZGRyaW5mbyhzdHJpbmcsIE5VTEwsICZoaW50cywgJnJlcykgIT0gMCkKKysJcmV0dXJuIE5POworKyAgICBtZW1jcHkoJmFkZHIsIHJlcy0+YWlfYWRkciwgc2l6ZW9mKGFkZHIpKTsKKysgICAgZnJlZWFkZHJpbmZvKHJlcyk7CisrCisrICAgIGlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmYWRkci5zaW42X2FkZHIpKSB7CisrCWlmICgoKih1X2ludDMyX3QgKikmbmV0LnNpbjZfYWRkci5zNl9hZGRyWzEyXSA9IGRvdF9xdWFkX2FkZHIobmV0X3RvaykpID09IElOQUREUl9OT05FCisrCSB8fCAobWFzayA9IGRvdF9xdWFkX2FkZHIobWFza190b2spKSA9PSBJTkFERFJfTk9ORSkKKysJICAgIHJldHVybiAoTk8pOworKwlyZXR1cm4gKCgqKHVfaW50MzJfdCAqKSZhZGRyLnNpbjZfYWRkci5zNl9hZGRyWzEyXSAmIG1hc2spID09ICoodV9pbnQzMl90ICopJm5ldC5zaW42X2FkZHIuczZfYWRkclsxMl0pOworKyAgICB9CisrCisrICAgIC8qIG1hdGNoIElQdjYgYWRkcmVzcyBhZ2FpbnN0IG5ldG51bWJlci9wcmVmaXhsZW4gKi8KKysgICAgbGVuID0gc3RybGVuKG5ldF90b2spOworKyAgICBpZiAoKm5ldF90b2sgIT0gJ1snIHx8IG5ldF90b2tbbGVuIC0gMV0gIT0gJ10nKQorKwlyZXR1cm4gTk87CisrICAgIGNoID0gbmV0X3Rva1tsZW4gLSAxXTsKKysgICAgbmV0X3Rva1tsZW4gLSAxXSA9ICdcMCc7CisrICAgIGlmIChnZXRhZGRyaW5mbyhuZXRfdG9rICsgMSwgTlVMTCwgJmhpbnRzLCAmcmVzKSAhPSAwKSB7CisrCW5ldF90b2tbbGVuIC0gMV0gPSBjaDsKKysJcmV0dXJuIE5POworKyAgICB9CisrICAgIG1lbWNweSgmbmV0LCByZXMtPmFpX2FkZHIsIHNpemVvZihuZXQpKTsKKysgICAgZnJlZWFkZHJpbmZvKHJlcyk7CisrICAgIG5ldF90b2tbbGVuIC0gMV0gPSBjaDsKKysgICAgaWYgKChtYXNrX2xlbiA9IGF0b2kobWFza190b2spKSA8IDAgfHwgbWFza19sZW4gPiAxMjgpCisrCXJldHVybiBOTzsKKysKKysjaWZkZWYgTklfV0lUSFNDT1BFSUQKKysgICAgaWYgKG5ldC5zaW42X3Njb3BlX2lkICE9IDAgJiYgYWRkci5zaW42X3Njb3BlX2lkICE9IG5ldC5zaW42X3Njb3BlX2lkKQorKwlyZXR1cm4gTk87CisrI2VuZGlmCisrICAgIHdoaWxlIChtYXNrX2xlbiA+IDApIHsKKysJaWYgKG1hc2tfbGVuIDwgMzIpIHsKKysJICAgIG1hc2sgPSBodG9ubCh+KDB4ZmZmZmZmZmYgPj4gbWFza19sZW4pKTsKKysJICAgIGlmICgoKih1X2ludDMyX3QgKikmYWRkci5zaW42X2FkZHIuczZfYWRkcltpXSAmIG1hc2spICE9ICgqKHVfaW50MzJfdCAqKSZuZXQuc2luNl9hZGRyLnM2X2FkZHJbaV0gJiBtYXNrKSkKKysJCXJldHVybiBOTzsKKysJICAgIGJyZWFrOworKwl9CisrCWlmICgqKHVfaW50MzJfdCAqKSZhZGRyLnNpbjZfYWRkci5zNl9hZGRyW2ldICE9ICoodV9pbnQzMl90ICopJm5ldC5zaW42X2FkZHIuczZfYWRkcltpXSkKKysJICAgIHJldHVybiBOTzsKKysJaSArPSA0OworKwltYXNrX2xlbiAtPSAzMjsKKysgICAgfQorKyAgICByZXR1cm4gWUVTOworK30KKysjZW5kaWYgLyogSU5FVDYgKi8KKysKKyAjaWZuZGVmIERJU0FCTEVfV0lMRENBUkRfTUFUQ0hJTkcKKyAvKiBOb3RlOiB0aGlzIGZlYXR1cmUgaGFzIGJlZW4gYWRhcHRlZCBpbiBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgd2F5CisgICAgZnJvbSBUYXR1IFlsb25lbidzIGxhc3QgU1NIIHZlcnNpb24gdW5kZXIgZnJlZSBsaWNlbnNlIGJ5IAorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9NYWtlZmlsZSB0Y3Bfd3JhcHBlcnNfNy42L01ha2VmaWxlCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL01ha2VmaWxlCTE5OTctMDMtMjEgMTk6Mjc6MjEuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9NYWtlZmlsZQkyMDA0LTA0LTEwIDE5OjIyOjQ0LjAwMDAwMDAwMCArMDIwMAorQEAgLTIxLDcgKzIxLDcgQEAKKyAJQGVjaG8gIglkeW5peCBlcGl4IGVzaXggZnJlZWJzZCBocHV4IGlyaXg0IGlyaXg1IGlyaXg2IGlzYyBpdW5peCIKKyAJQGVjaG8gIglsaW51eCBtYWNodGVuIG1pcHModW50ZXN0ZWQpIG5jcnN2cjQgbmV0YnNkIG5leHQgb3NmIHBvd2VyX3VuaXhfMjExIgorIAlAZWNobyAiCXB0eC0yLnggcHR4LWdlbmVyaWMgcHlyYW1pZCBzY28gc2NvLW5pcyBzY28tb2QyIHNjby1vczUgc2luaXggc3Vub3M0IgorLQlAZWNobyAiCXN1bm9zNDAgc3Vub3M1IHN5c3Y0IHRhbmRlbSB1bHRyaXggdW5pY29zNyB1bmljb3M4IHVuaXh3YXJlMSB1bml4d2FyZTIiCisrCUBlY2hvICIJc3Vub3M0MCBzdW5vczUgc29sYXJpczggc3lzdjQgdGFuZGVtIHVsdHJpeCB1bmljb3M3IHVuaWNvczggdW5peHdhcmUxIHVuaXh3YXJlMiIKKyAJQGVjaG8gIgl1dHMyMTUgdXhwIgorIAlAZWNobworIAlAZWNobyAiSWYgbm9uZSBvZiB0aGVzZSBtYXRjaCB5b3VyIGVudmlyb25tZW50LCBlZGl0IHRoZSBzeXN0ZW0iCitAQCAtMTMxLDIwICsxMzEsMzQgQEAKKyAJTkVUR1JPVVA9LURORVRHUk9VUCBUTEk9IFNZU1RZUEU9Ii1zeXN0eXBlIGJzZDQzIiBhbGwKKyAKKyAjIEZyZWVic2QgYW5kIGxpbnV4IGJ5IGRlZmF1bHQgaGF2ZSBubyBOSVMuCistMzg2YnNkIG5ldGJzZCBic2RvczoKKyszODZic2QgYnNkb3M6CisgCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorIAlMSUJTPSBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj0gTkVUR1JPVVA9IFRMST0gXAorIAlFWFRSQV9DRkxBR1M9LURTWVNfRVJSTElTVF9ERUZJTkVEIFZTWVNMT0c9IGFsbAorIAorIGZyZWVic2Q6CisgCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorKwlMSUJTPSItTC91c3IvbG9jYWwvdjYvbGliIC1saW5ldDYiIFwKKyAJTElCUz0gUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9IE5FVEdST1VQPSBUTEk9IFwKKy0JRVhUUkFfQ0ZMQUdTPS1EU1lTX0VSUkxJU1RfREVGSU5FRCBWU1lTTE9HPSBhbGwKKysJRVhUUkFfQ0ZMQUdTPSItRFNZU19FUlJMSVNUX0RFRklORUQgLURJTkVUNiAtRHNzX2ZhbWlseT1fX3NzX2ZhbWlseSAtRHNzX2xlbj1fX3NzX2xlbiIgXAorKwlWU1lTTE9HPSBhbGwKKysKKytuZXRic2Q6CisrCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorKwlMSUJTPSBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj0gTkVUR1JPVVA9IFRMST0gXAorKwlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtRElORVQ2IC1Ec3NfZmFtaWx5PV9fc3NfZmFtaWx5IC1Ec3NfbGVuPV9fc3NfbGVuIiBWU1lTTE9HPSBhbGwKKyAKKyBsaW51eDoKKyAJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCistCUxJQlM9IFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPXNldGVudi5vIFwKKy0JTkVUR1JPVVA9IFRMST0gRVhUUkFfQ0ZMQUdTPSItREJST0tFTl9TT19MSU5HRVIiIGFsbAorKwlMSUJTPS1sbnNsIFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPSBcCisrCU5FVEdST1VQPSItRE5FVEdST1VQIiBUTEk9IFZTWVNMT0c9IEJVR1M9IFwKKysJRVhUUkFfQ0ZMQUdTPSItRFNZU19FUlJMSVNUX0RFRklORUQgLURIQVZFX1NUUkVSUk9SIC1ESU5FVDY9MSAtRHNzX2ZhbWlseT1fX3NzX2ZhbWlseSAtRHNzX2xlbj1fX3NzX2xlbiIgYWxsCisrCisrZ251OgorKwlAbWFrZSBSRUFMX0RBRU1PTl9ESVI9JChSRUFMX0RBRU1PTl9ESVIpIFNUWUxFPSQoU1RZTEUpIFwKKysJTElCUz0tbG5zbCBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj0gXAorKwlORVRHUk9VUD0tRE5FVEdST1VQIFRMST0gVlNZU0xPRz0gQlVHUz0gXAorKwlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtREhBVkVfU1RSRVJST1IiIGFsbAorIAorICMgVGhpcyBpcyBnb29kIGZvciBtYW55IFNZU1YrQlNEIGh5YnJpZHMgd2l0aCBOSVMsIHByb2JhYmx5IGFsc28gZm9yIEhQLVVYIDcueC4KKyBocHV4IGhwdXg4IGhwdXg5IGhwdXgxMDoKK0BAIC0xOTYsNiArMjEwLDEzIEBACisgCU5FVEdST1VQPS1ETkVUR1JPVVAgQVVYX09CSj1zZXRlbnYubyBUTEk9LURUTEkgXAorIAlCVUdTPSIkKEJVR1MpIC1EU09MQVJJU18yNF9HRVRIT1NUQllOQU1FX0JVRyIgYWxsCisgCisrIyBTdW5PUyA1LjggaXMgYW5vdGhlciBTWVNWNCB2YXJpYW50LCBidXQgaGFzIElQdjYgc3VwcG9ydAorK3NvbGFyaXM4OgorKwlAbWFrZSBSRUFMX0RBRU1PTl9ESVI9JChSRUFMX0RBRU1PTl9ESVIpIFNUWUxFPSQoU1RZTEUpIFwKKysJTElCUz0iLWxzb2NrZXQgLWxuc2wiIFJBTkxJQj1lY2hvIEFSRkxBR1M9cnYgVlNZU0xPRz0gXAorKwlORVRHUk9VUD0tRE5FVEdST1VQIEFVWF9PQko9c2V0ZW52Lm8gVExJPS1EVExJIFwKKysJRVhUUkFfQ0ZMQUdTPSItRElORVQ2IC1ETk9fQ0xPTkVfREVWSUNFIC1ESU5UMzJfVCIgYWxsCisrCisgIyBHZW5lcmljIFNZU1Y0MAorIGVzaXggc3lzdjQ6CisgCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9taXNjLmMgdGNwX3dyYXBwZXJzXzcuNi9taXNjLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvbWlzYy5jCTE5OTYtMDItMTEgMTc6MDE6MzAuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9taXNjLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC01OCw5ICs1OCwzMSBAQAorIHsKKyAgICAgY2hhciAgICpjcDsKKyAKKysjaWZkZWYgSU5FVDYKKysgICAgaW50IGJyYWNrZXQgPSAwOworKworKyAgICBmb3IgKGNwID0gc3RyaW5nOyBjcCAmJiAqY3A7IGNwKyspIHsKKysJc3dpdGNoICgqY3ApIHsKKysJY2FzZSAnWyc6CisrCSAgICBicmFja2V0Kys7CisrCSAgICBicmVhazsKKysJY2FzZSAnXSc6CisrCSAgICBicmFja2V0LS07CisrCSAgICBicmVhazsKKysJZGVmYXVsdDoKKysJICAgIGlmIChicmFja2V0ID09IDAgJiYgKmNwID09IGRlbGltaXRlcikgeworKwkJKmNwKysgPSAwOworKwkJcmV0dXJuIGNwOworKwkgICAgfQorKwkgICAgYnJlYWs7CisrCX0KKysgICAgfQorKyAgICByZXR1cm4gKE5VTEwpOworKyNlbHNlCisgICAgIGlmICgoY3AgPSBzdHJjaHIoc3RyaW5nLCBkZWxpbWl0ZXIpKSAhPSAwKQorIAkqY3ArKyA9IDA7CisgICAgIHJldHVybiAoY3ApOworKyNlbmRpZgorIH0KKyAKKyAvKiBkb3RfcXVhZF9hZGRyIC0gY29udmVydCBkb3R0ZWQgcXVhZCB0byBpbnRlcm5hbCBmb3JtICovCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3JlZnVzZS5jIHRjcF93cmFwcGVyc183LjYvcmVmdXNlLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcmVmdXNlLmMJMTk5NC0xMi0yOCAxNzo0Mjo0MC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3JlZnVzZS5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMjUsNyArMjUsMTIgQEAKKyB2b2lkICAgIHJlZnVzZShyZXF1ZXN0KQorIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CisgeworKyNpZmRlZiBJTkVUNgorKyAgICBzeXNsb2coZGVueV9zZXZlcml0eSwgInJlZnVzZWQgY29ubmVjdCBmcm9tICVzICglcykiLAorKwkgICBldmFsX2NsaWVudChyZXF1ZXN0KSwgZXZhbF9ob3N0YWRkcihyZXF1ZXN0LT5jbGllbnQpKTsKKysjZWxzZQorICAgICBzeXNsb2coZGVueV9zZXZlcml0eSwgInJlZnVzZWQgY29ubmVjdCBmcm9tICVzIiwgZXZhbF9jbGllbnQocmVxdWVzdCkpOworKyNlbmRpZgorICAgICBjbGVhbl9leGl0KHJlcXVlc3QpOworICAgICAvKiBOT1RSRUFDSEVEICovCisgfQorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9yZmM5MzEuYyB0Y3Bfd3JhcHBlcnNfNy42L3JmYzkzMS5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3JmYzkzMS5jCTE5OTUtMDEtMDIgMTY6MTE6MzQuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9yZmM5MzEuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTY4LDIwICs2OCw1MCBAQAorIC8qIHJmYzkzMSAtIHJldHVybiByZW1vdGUgdXNlciBuYW1lLCBnaXZlbiBzb2NrZXQgc3RydWN0dXJlcyAqLworIAorIHZvaWQgICAgcmZjOTMxKHJtdF9zaW4sIG91cl9zaW4sIGRlc3QpCisrI2lmZGVmIElORVQ2Cisrc3RydWN0IHNvY2thZGRyICpybXRfc2luOworK3N0cnVjdCBzb2NrYWRkciAqb3VyX3NpbjsKKysjZWxzZQorIHN0cnVjdCBzb2NrYWRkcl9pbiAqcm10X3NpbjsKKyBzdHJ1Y3Qgc29ja2FkZHJfaW4gKm91cl9zaW47CisrI2VuZGlmCisgY2hhciAgICpkZXN0OworIHsKKyAgICAgdW5zaWduZWQgcm10X3BvcnQ7CisgICAgIHVuc2lnbmVkIG91cl9wb3J0OworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBybXRfcXVlcnlfc2luOworKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBvdXJfcXVlcnlfc2luOworKyAgICBpbnQgYWxlbjsKKysjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gcm10X3F1ZXJ5X3NpbjsKKyAgICAgc3RydWN0IHNvY2thZGRyX2luIG91cl9xdWVyeV9zaW47CisrI2VuZGlmCisgICAgIGNoYXIgICAgdXNlclsyNTZdOwkJCS8qIFhYWCAqLworICAgICBjaGFyICAgIGJ1ZmZlcls1MTJdOwkJLyogWFhYICovCisgICAgIGNoYXIgICAqY3A7CisgICAgIGNoYXIgICAqcmVzdWx0ID0gdW5rbm93bjsKKyAgICAgRklMRSAgICpmcDsKKyAKKysjaWZkZWYgSU5FVDYKKysgICAgLyogYWRkcmVzcyBmYW1pbHkgbXVzdCBiZSB0aGUgc2FtZSAqLworKyAgICBpZiAocm10X3Npbi0+c2FfZmFtaWx5ICE9IG91cl9zaW4tPnNhX2ZhbWlseSkgeworKwlTVFJOX0NQWShkZXN0LCByZXN1bHQsIFNUUklOR19MRU5HVEgpOworKwlyZXR1cm47CisrICAgIH0KKysgICAgc3dpdGNoIChvdXJfc2luLT5zYV9mYW1pbHkpIHsKKysgICAgY2FzZSBBRl9JTkVUOgorKwlhbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisrCWJyZWFrOworKyAgICBjYXNlIEFGX0lORVQ2OgorKwlhbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworKwlicmVhazsKKysgICAgZGVmYXVsdDoKKysJU1RSTl9DUFkoZGVzdCwgcmVzdWx0LCBTVFJJTkdfTEVOR1RIKTsKKysJcmV0dXJuOworKyAgICB9CisrI2VuZGlmCisrCisgICAgIC8qCisgICAgICAqIFVzZSBvbmUgdW5idWZmZXJlZCBzdGRpbyBzdHJlYW0gZm9yIHdyaXRpbmcgdG8gYW5kIGZvciByZWFkaW5nIGZyb20KKyAgICAgICogdGhlIFJGQzkzMSBldGMuIHNlcnZlci4gVGhpcyBpcyBkb25lIGJlY2F1c2Ugb2YgYSBidWcgaW4gdGhlIFN1bk9TCitAQCAtOTIsNyArMTIyLDExIEBACisgICAgICAqIHNvY2tldHMuCisgICAgICAqLworIAorKyNpZmRlZiBJTkVUNgorKyAgICBpZiAoKGZwID0gZnNvY2tldChvdXJfc2luLT5zYV9mYW1pbHksIFNPQ0tfU1RSRUFNLCAwKSkgIT0gMCkgeworKyNlbHNlCisgICAgIGlmICgoZnAgPSBmc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKSkgIT0gMCkgeworKyNlbmRpZgorIAlzZXRidWYoZnAsIChjaGFyICopIDApOworIAorIAkvKgorQEAgLTExMiw2ICsxNDYsMjUgQEAKKyAJICAgICAqIGFkZHJlc3NlcyBmcm9tIHRoZSBxdWVyeSBzb2NrZXQuCisgCSAgICAgKi8KKyAKKysjaWZkZWYgSU5FVDYKKysJICAgIG1lbWNweSgmb3VyX3F1ZXJ5X3Npbiwgb3VyX3NpbiwgYWxlbik7CisrCSAgICBtZW1jcHkoJnJtdF9xdWVyeV9zaW4sIHJtdF9zaW4sIGFsZW4pOworKwkgICAgc3dpdGNoIChvdXJfc2luLT5zYV9mYW1pbHkpIHsKKysJICAgIGNhc2UgQUZfSU5FVDoKKysJCSgoc3RydWN0IHNvY2thZGRyX2luICopJm91cl9xdWVyeV9zaW4pLT5zaW5fcG9ydCA9IGh0b25zKEFOWV9QT1JUKTsKKysJCSgoc3RydWN0IHNvY2thZGRyX2luICopJnJtdF9xdWVyeV9zaW4pLT5zaW5fcG9ydCA9IGh0b25zKFJGQzkzMV9QT1JUKTsKKysJCWJyZWFrOworKwkgICAgY2FzZSBBRl9JTkVUNjoKKysJCSgoc3RydWN0IHNvY2thZGRyX2luNiAqKSZvdXJfcXVlcnlfc2luKS0+c2luNl9wb3J0ID0gaHRvbnMoQU5ZX1BPUlQpOworKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnJtdF9xdWVyeV9zaW4pLT5zaW42X3BvcnQgPSBodG9ucyhSRkM5MzFfUE9SVCk7CisrCQlicmVhazsKKysJICAgIH0KKysKKysJICAgIGlmIChiaW5kKGZpbGVubyhmcCksIChzdHJ1Y3Qgc29ja2FkZHIgKikgJiBvdXJfcXVlcnlfc2luLAorKwkJICAgICBhbGVuKSA+PSAwICYmCisrCQljb25uZWN0KGZpbGVubyhmcCksIChzdHJ1Y3Qgc29ja2FkZHIgKikgJiBybXRfcXVlcnlfc2luLAorKwkJCWFsZW4pID49IDApIHsKKysjZWxzZQorIAkgICAgb3VyX3F1ZXJ5X3NpbiA9ICpvdXJfc2luOworIAkgICAgb3VyX3F1ZXJ5X3Npbi5zaW5fcG9ydCA9IGh0b25zKEFOWV9QT1JUKTsKKyAJICAgIHJtdF9xdWVyeV9zaW4gPSAqcm10X3NpbjsKK0BAIC0xMjEsNiArMTc0LDcgQEAKKyAJCSAgICAgc2l6ZW9mKG91cl9xdWVyeV9zaW4pKSA+PSAwICYmCisgCQljb25uZWN0KGZpbGVubyhmcCksIChzdHJ1Y3Qgc29ja2FkZHIgKikgJiBybXRfcXVlcnlfc2luLAorIAkJCXNpemVvZihybXRfcXVlcnlfc2luKSkgPj0gMCkgeworKyNlbmRpZgorIAorIAkJLyoKKyAJCSAqIFNlbmQgcXVlcnkgdG8gc2VydmVyLiBOZWdsZWN0IHRoZSByaXNrIHRoYXQgYSAxMy1ieXRlCitAQCAtMTI5LDggKzE4MywxMyBAQAorIAkJICovCisgCisgCQlmcHJpbnRmKGZwLCAiJXUsJXVcclxuIiwKKysjaWZkZWYgSU5FVDYKKysJCQludG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXJtdF9zaW4pLT5zaW5fcG9ydCksCisrCQkJbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilvdXJfc2luKS0+c2luX3BvcnQpKTsKKysjZWxzZQorIAkJCW50b2hzKHJtdF9zaW4tPnNpbl9wb3J0KSwKKyAJCQludG9ocyhvdXJfc2luLT5zaW5fcG9ydCkpOworKyNlbmRpZgorIAkJZmZsdXNoKGZwKTsKKyAKKyAJCS8qCitAQCAtMTQ0LDggKzIwMywxMyBAQAorIAkJICAgICYmIGZlcnJvcihmcCkgPT0gMCAmJiBmZW9mKGZwKSA9PSAwCisgCQkgICAgJiYgc3NjYW5mKGJ1ZmZlciwgIiV1ICwgJXUgOiBVU0VSSUQgOiUqW146XTolMjU1cyIsCisgCQkJICAgICAgJnJtdF9wb3J0LCAmb3VyX3BvcnQsIHVzZXIpID09IDMKKysjaWZkZWYgSU5FVDYKKysJCSAgICAmJiBudG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXJtdF9zaW4pLT5zaW5fcG9ydCkgPT0gcm10X3BvcnQKKysJCSAgICAmJiBudG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW91cl9zaW4pLT5zaW5fcG9ydCkgPT0gb3VyX3BvcnQpIHsKKysjZWxzZQorIAkJICAgICYmIG50b2hzKHJtdF9zaW4tPnNpbl9wb3J0KSA9PSBybXRfcG9ydAorIAkJICAgICYmIG50b2hzKG91cl9zaW4tPnNpbl9wb3J0KSA9PSBvdXJfcG9ydCkgeworKyNlbmRpZgorIAorIAkJICAgIC8qCisgCQkgICAgICogU3RyaXAgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuLiBJdCBpcyBwYXJ0IG9mIHRoZQorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9zY2FmZm9sZC5jIHRjcF93cmFwcGVyc183LjYvc2NhZmZvbGQuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9zY2FmZm9sZC5jCTE5OTctMDMtMjEgMTk6Mjc6MjQuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9zY2FmZm9sZC5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMjUsNyArMjUsOSBAQAorICNkZWZpbmUJSU5BRERSX05PTkUJKC0xKQkJLyogWFhYIHNob3VsZCBiZSAweGZmZmZmZmZmICovCisgI2VuZGlmCisgCisrI2lmbmRlZiBJTkVUNgorIGV4dGVybiBjaGFyICptYWxsb2MoKTsKKysjZW5kaWYKKyAKKyAvKiBBcHBsaWNhdGlvbi1zcGVjaWZpYy4gKi8KKyAKK0BAIC0zOSw2ICs0MSw3IEBACisgaW50ICAgICBkZW55X3NldmVyaXR5ID0gTE9HX1dBUk5JTkc7CisgaW50ICAgICByZmM5MzFfdGltZW91dCA9IFJGQzkzMV9USU1FT1VUOworIAorKyNpZm5kZWYgSU5FVDYKKyAvKiBkdXBfaG9zdGVudCAtIGNyZWF0ZSBob3N0ZW50IGluIG9uZSBtZW1vcnkgYmxvY2sgKi8KKyAKKyBzdGF0aWMgc3RydWN0IGhvc3RlbnQgKmR1cF9ob3N0ZW50KGhwKQorQEAgLTczLDkgKzc2LDQ2IEBACisgICAgIH0KKyAgICAgcmV0dXJuICgmaGItPmhvc3QpOworIH0KKysjZW5kaWYKKyAKKyAvKiBmaW5kX2luZXRfYWRkciAtIGZpbmQgYWxsIGFkZHJlc3NlcyBmb3IgdGhpcyBob3N0LCByZXN1bHQgdG8gZnJlZSgpICovCisgCisrI2lmZGVmIElORVQ2Cisrc3RydWN0IGFkZHJpbmZvICpmaW5kX2luZXRfYWRkcihob3N0KQorK2NoYXIgICAqaG9zdDsKKyt7CisrICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50cywgKnJlczsKKysKKysgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrICAgIGhpbnRzLmFpX2ZhbWlseSA9IFBGX1VOU1BFQzsKKysgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfTlVNRVJJQ0hPU1Q7CisrICAgIGlmIChnZXRhZGRyaW5mbyhob3N0LCBOVUxMLCAmaGludHMsICZyZXMpID09IDApCisrCXJldHVybiAocmVzKTsKKysKKysgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrICAgIGhpbnRzLmFpX2ZhbWlseSA9IFBGX1VOU1BFQzsKKysgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfQ0FOT05OQU1FOworKyAgICBpZiAoZ2V0YWRkcmluZm8oaG9zdCwgTlVMTCwgJmhpbnRzLCAmcmVzKSAhPSAwKSB7CisrCXRjcGRfd2FybigiJXM6IGhvc3Qgbm90IGZvdW5kIiwgaG9zdCk7CisrCXJldHVybiAoMCk7CisrICAgIH0KKysgICAgaWYgKHJlcy0+YWlfZmFtaWx5ICE9IEFGX0lORVQ2ICYmIHJlcy0+YWlfZmFtaWx5ICE9IEFGX0lORVQpIHsKKysJdGNwZF93YXJuKCIlZDogbm90IGFuIGludGVybmV0IGhvc3QiLCByZXMtPmFpX2ZhbWlseSk7CisrCWZyZWVhZGRyaW5mbyhyZXMpOworKwlyZXR1cm4gKDApOworKyAgICB9CisrICAgIGlmICghcmVzLT5haV9jYW5vbm5hbWUpIHsKKysJdGNwZF93YXJuKCIlczogaG9zdG5hbWUgYWxpYXMiLCBob3N0KTsKKysJdGNwZF93YXJuKCIoY2Fubm90IG9idGFpbiBvZmZpY2lhbCBuYW1lKSIsIHJlcy0+YWlfY2Fub25uYW1lKTsKKysgICAgfSBlbHNlIGlmIChTVFJfTkUoaG9zdCwgcmVzLT5haV9jYW5vbm5hbWUpKSB7CisrCXRjcGRfd2FybigiJXM6IGhvc3RuYW1lIGFsaWFzIiwgaG9zdCk7CisrCXRjcGRfd2FybigiKG9mZmljaWFsIG5hbWU6ICUuKnMpIiwgU1RSSU5HX0xFTkdUSCwgcmVzLT5haV9jYW5vbm5hbWUpOworKyAgICB9CisrICAgIHJldHVybiAocmVzKTsKKyt9CisrI2Vsc2UKKyBzdHJ1Y3QgaG9zdGVudCAqZmluZF9pbmV0X2FkZHIoaG9zdCkKKyBjaGFyICAgKmhvc3Q7CisgeworQEAgLTExOCw2ICsxNTgsNyBAQAorICAgICB9CisgICAgIHJldHVybiAoZHVwX2hvc3RlbnQoaHApKTsKKyB9CisrI2VuZGlmCisgCisgLyogY2hlY2tfZG5zIC0gZ2l2ZSBlYWNoIGFkZHJlc3MgdGhvcm91Z2ggd29ya291dCwgcmV0dXJuIGFkZHJlc3MgY291bnQgKi8KKyAKK0BAIC0xMjUsOCArMTY2LDEzIEBACisgY2hhciAgICpob3N0OworIHsKKyAgICAgc3RydWN0IHJlcXVlc3RfaW5mbyByZXF1ZXN0OworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzaW47CisrICAgIHN0cnVjdCBhZGRyaW5mbyAqaHAsICpyZXM7CisrI2Vsc2UKKyAgICAgc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKyAgICAgc3RydWN0IGhvc3RlbnQgKmhwOworKyNlbmRpZgorICAgICBpbnQgICAgIGNvdW50OworICAgICBjaGFyICAgKmFkZHI7CisgCitAQCAtMTM0LDExICsxODAsMTggQEAKKyAJcmV0dXJuICgwKTsKKyAgICAgcmVxdWVzdF9pbml0KCZyZXF1ZXN0LCBSUV9DTElFTlRfU0lOLCAmc2luLCAwKTsKKyAgICAgc29ja19tZXRob2RzKCZyZXF1ZXN0KTsKKysjaWZuZGVmIElORVQ2CisgICAgIG1lbXNldCgoY2hhciAqKSAmc2luLCAwLCBzaXplb2Yoc2luKSk7CisgICAgIHNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKysjZW5kaWYKKyAKKysjaWZkZWYgSU5FVDYKKysgICAgZm9yIChyZXMgPSBocCwgY291bnQgPSAwOyByZXM7IHJlcyA9IHJlcy0+YWlfbmV4dCwgY291bnQrKykgeworKwltZW1jcHkoJnNpbiwgcmVzLT5haV9hZGRyLCByZXMtPmFpX2FkZHJsZW4pOworKyNlbHNlCisgICAgIGZvciAoY291bnQgPSAwOyAoYWRkciA9IGhwLT5oX2FkZHJfbGlzdFtjb3VudF0pICE9IDA7IGNvdW50KyspIHsKKyAJbWVtY3B5KChjaGFyICopICZzaW4uc2luX2FkZHIsIGFkZHIsIHNpemVvZihzaW4uc2luX2FkZHIpKTsKKysjZW5kaWYKKyAKKyAJLyoKKyAJICogRm9yY2UgaG9zdCBuYW1lIGFuZCBhZGRyZXNzIGNvbnZlcnNpb25zLiBVc2UgdGhlIHJlcXVlc3Qgc3RydWN0dXJlCitAQCAtMTUxLDcgKzIwNCwxMSBAQAorIAkgICAgdGNwZF93YXJuKCJob3N0IGFkZHJlc3MgJXMtPm5hbWUgbG9va3VwIGZhaWxlZCIsCisgCQkgICAgICBldmFsX2hvc3RhZGRyKHJlcXVlc3QuY2xpZW50KSk7CisgICAgIH0KKysjaWZkZWYgSU5FVDYKKysgICAgZnJlZWFkZHJpbmZvKGhwKTsKKysjZWxzZQorICAgICBmcmVlKChjaGFyICopIGhwKTsKKysjZW5kaWYKKyAgICAgcmV0dXJuIChjb3VudCk7CisgfQorIAorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9zY2FmZm9sZC5oIHRjcF93cmFwcGVyc183LjYvc2NhZmZvbGQuaAorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9zY2FmZm9sZC5oCTE5OTQtMTItMzEgMTg6MTk6MjAuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9zY2FmZm9sZC5oCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtNCw2ICs0LDEwIEBACisgICAqIEF1dGhvcjogV2lldHNlIFZlbmVtYSwgRWluZGhvdmVuIFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neSwgVGhlIE5ldGhlcmxhbmRzLgorICAgKi8KKyAKKysjaWZkZWYgSU5FVDYKKytleHRlcm4gc3RydWN0IGFkZHJpbmZvICpmaW5kX2luZXRfYWRkcigpOworKyNlbHNlCisgZXh0ZXJuIHN0cnVjdCBob3N0ZW50ICpmaW5kX2luZXRfYWRkcigpOworKyNlbmRpZgorIGV4dGVybiBpbnQgY2hlY2tfZG5zKCk7CisgZXh0ZXJuIGludCBjaGVja19wYXRoKCk7CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NvY2tldC5jIHRjcF93cmFwcGVyc183LjYvc29ja2V0LmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvc29ja2V0LmMJMjAwNC0wNC0xMCAxOToyMjo1OC4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3NvY2tldC5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMjQsMTMgKzI0LDIyIEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKyNpZmRlZiBJTlQzMl9UCisrdHlwZWRlZiB1aW50MzJfdCB1X2ludDMyX3Q7CisrI2VuZGlmCisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8bmV0ZGIuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3lzbG9nLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorKyNpZmRlZiBJTkVUNgorKyNpZm5kZWYgTklfV0lUSFNDT1BFSUQKKysjZGVmaW5lIE5JX1dJVEhTQ09QRUlECTAKKysjZW5kaWYKKysjZWxzZQorIGV4dGVybiBjaGFyICppbmV0X250b2EoKTsKKysjZW5kaWYKKyAKKyAvKiBMb2NhbCBzdHVmZi4gKi8KKyAKK0BAIC03OSw4ICs4OCwxMyBAQAorIHZvaWQgICAgc29ja19ob3N0KHJlcXVlc3QpCisgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyB7CisrI2lmZGVmIElORVQ2CisrICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBjbGllbnQ7CisrICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzZXJ2ZXI7CisrI2Vsc2UKKyAgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBjbGllbnQ7CisgICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyOworKyNlbmRpZgorICAgICBpbnQgICAgIGxlbjsKKyAgICAgY2hhciAgICBidWZbQlVGU0laXTsKKyAgICAgaW50ICAgICBmZCA9IHJlcXVlc3QtPmZkOworQEAgLTEwOSw3ICsxMjMsMTEgQEAKKyAJbWVtc2V0KGJ1ZiwgMCBzaXplb2YoYnVmKSk7CisgI2VuZGlmCisgICAgIH0KKysjaWZkZWYgSU5FVDYKKysgICAgcmVxdWVzdC0+Y2xpZW50LT5zaW4gPSAoc3RydWN0IHNvY2thZGRyICopJmNsaWVudDsKKysjZWxzZQorICAgICByZXF1ZXN0LT5jbGllbnQtPnNpbiA9ICZjbGllbnQ7CisrI2VuZGlmCisgCisgICAgIC8qCisgICAgICAqIERldGVybWluZSB0aGUgc2VydmVyIGJpbmRpbmcuIFRoaXMgaXMgdXNlZCBmb3IgY2xpZW50IHVzZXJuYW1lCitAQCAtMTIyLDcgKzE0MCwxMSBAQAorIAl0Y3BkX3dhcm4oImdldHNvY2tuYW1lOiAlbSIpOworIAlyZXR1cm47CisgICAgIH0KKysjaWZkZWYgSU5FVDYKKysgICAgcmVxdWVzdC0+c2VydmVyLT5zaW4gPSAoc3RydWN0IHNvY2thZGRyICopJnNlcnZlcjsKKysjZWxzZQorICAgICByZXF1ZXN0LT5zZXJ2ZXItPnNpbiA9ICZzZXJ2ZXI7CisrI2VuZGlmCisgfQorIAorIC8qIHNvY2tfaG9zdGFkZHIgLSBtYXAgZW5kcG9pbnQgYWRkcmVzcyB0byBwcmludGFibGUgZm9ybSAqLworQEAgLTEzMCwxMCArMTUyLDI2IEBACisgdm9pZCAgICBzb2NrX2hvc3RhZGRyKGhvc3QpCisgc3RydWN0IGhvc3RfaW5mbyAqaG9zdDsKKyB7CisrI2lmZGVmIElORVQ2CisrICAgIHN0cnVjdCBzb2NrYWRkciAqc2luID0gaG9zdC0+c2luOworKyAgICBpbnQgc2FsZW47CisrCisrICAgIGlmICghc2luKQorKwlyZXR1cm47CisrI2lmZGVmIFNJTjZfTEVOCisrICAgIHNhbGVuID0gc2luLT5zYV9sZW47CisrI2Vsc2UKKysgICAgc2FsZW4gPSAoc2luLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgPyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKQorKwkJCQkJOiBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisrI2VuZGlmCisrICAgIGdldG5hbWVpbmZvKHNpbiwgc2FsZW4sIGhvc3QtPmFkZHIsIHNpemVvZihob3N0LT5hZGRyKSwKKysJCU5VTEwsIDAsIE5JX05VTUVSSUNIT1NUIHwgTklfV0lUSFNDT1BFSUQpOworKyNlbHNlCisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gaG9zdC0+c2luOworIAorICAgICBpZiAoc2luICE9IDApCisgCVNUUk5fQ1BZKGhvc3QtPmFkZHIsIGluZXRfbnRvYShzaW4tPnNpbl9hZGRyKSwgc2l6ZW9mKGhvc3QtPmFkZHIpKTsKKysjZW5kaWYKKyB9CisgCisgLyogc29ja19ob3N0bmFtZSAtIG1hcCBlbmRwb2ludCBhZGRyZXNzIHRvIGhvc3QgbmFtZSAqLworQEAgLTE0MSw2ICsxNzksMTYwIEBACisgdm9pZCAgICBzb2NrX2hvc3RuYW1lKGhvc3QpCisgc3RydWN0IGhvc3RfaW5mbyAqaG9zdDsKKyB7CisrI2lmZGVmIElORVQ2CisrICAgIHN0cnVjdCBzb2NrYWRkciAqc2luID0gaG9zdC0+c2luOworKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luNDsKKysgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzLCAqcmVzMCA9IE5VTEw7CisrICAgIGludCBzYWxlbiwgYWxlbiwgZXJyID0gMTsKKysgICAgY2hhciAqYXAgPSBOVUxMLCAqcmFwLCBobmFtZVtOSV9NQVhIT1NUXTsKKysKKysgICAgaWYgKHNpbiAhPSBOVUxMKSB7CisrCWlmIChzaW4tPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworKwkgICAgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2luOworKworKwkgICAgaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisrCQltZW1zZXQoJnNpbjQsIDAsIHNpemVvZihzaW40KSk7CisrI2lmZGVmIFNJTjZfTEVOCisrCQlzaW40LnNpbl9sZW4gPSBzaXplb2Yoc2luNCk7CisrI2VuZGlmCisrCQlzaW40LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworKwkJc2luNC5zaW5fcG9ydCA9IHNpbjYtPnNpbjZfcG9ydDsKKysJCXNpbjQuc2luX2FkZHIuc19hZGRyID0gKih1X2ludDMyX3QgKikmc2luNi0+c2luNl9hZGRyLnM2X2FkZHJbMTJdOworKwkJc2luID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW40OworKwkgICAgfQorKwl9CisrCXN3aXRjaCAoc2luLT5zYV9mYW1pbHkpIHsKKysJY2FzZSBBRl9JTkVUOgorKwkgICAgYXAgPSAoY2hhciAqKSYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNpbiktPnNpbl9hZGRyOworKwkgICAgYWxlbiA9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7CisrCSAgICBzYWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworKwkgICAgYnJlYWs7CisrCWNhc2UgQUZfSU5FVDY6CisrCSAgICBhcCA9IChjaGFyICopJigoc3RydWN0IHNvY2thZGRyX2luNiAqKXNpbiktPnNpbjZfYWRkcjsKKysJICAgIGFsZW4gPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTsKKysJICAgIHNhbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworKwkgICAgYnJlYWs7CisrCWRlZmF1bHQ6CisrCSAgICBicmVhazsKKysJfQorKwlpZiAoYXApCisrCSAgICBlcnIgPSBnZXRuYW1laW5mbyhzaW4sIHNhbGVuLCBobmFtZSwgc2l6ZW9mKGhuYW1lKSwKKysJCQkgICAgICBOVUxMLCAwLCBOSV9XSVRIU0NPUEVJRCB8IE5JX05BTUVSRVFEKTsKKysgICAgfQorKyAgICBpZiAoIWVycikgeworKworKwlTVFJOX0NQWShob3N0LT5uYW1lLCBobmFtZSwgc2l6ZW9mKGhvc3QtPm5hbWUpKTsKKysKKysJLyogcmVqZWN0IG51bWVyaWMgYWRkcmVzc2VzICovCisrCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworKwloaW50cy5haV9mYW1pbHkgPSBzaW4tPnNhX2ZhbWlseTsKKysJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysJaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfQ0FOT05OQU1FIHwgQUlfTlVNRVJJQ0hPU1Q7CisrCWlmICgoZXJyID0gZ2V0YWRkcmluZm8oaG9zdC0+bmFtZSwgTlVMTCwgJmhpbnRzLCAmcmVzMCkgPT0gMCkpIHsKKysJICAgIGZyZWVhZGRyaW5mbyhyZXMwKTsKKysJICAgIHJlczAgPSBOVUxMOworKwkgICAgdGNwZF93YXJuKCJob3N0IG5hbWUvbmFtZSBtaXNtYXRjaDogIgorKwkJICAgICAgInJldmVyc2UgbG9va3VwIHJlc3VsdHMgaW4gbm9uLUZRRE4gJXMiLAorKwkJICAgICAgaG9zdC0+bmFtZSk7CisrCSAgICBzdHJjcHkoaG9zdC0+bmFtZSwgcGFyYW5vaWQpOwkvKiBuYW1lIGlzIGJhZCwgY2xvYmJlciBpdCAqLworKwl9CisrCWVyciA9ICFlcnI7CisrICAgIH0KKysgICAgaWYgKCFlcnIpIHsKKysJLyogd2UgYXJlIG5vdyBzdXJlIHRoYXQgdGhpcyBpcyBub24tbnVtZXJpYyAqLworKworKwkvKgorKwkgKiBWZXJpZnkgdGhhdCB0aGUgYWRkcmVzcyBpcyBhIG1lbWJlciBvZiB0aGUgYWRkcmVzcyBsaXN0IHJldHVybmVkCisrCSAqIGJ5IGdldGhvc3RieW5hbWUoaG9zdG5hbWUpLgorKwkgKiAKKysJICogVmVyaWZ5IGFsc28gdGhhdCBnZXRob3N0YnlhZGRyKCkgYW5kIGdldGhvc3RieW5hbWUoKSByZXR1cm4gdGhlIHNhbWUKKysJICogaG9zdG5hbWUsIG9yIHJzaGQgYW5kIHJsb2dpbmQgbWF5IHN0aWxsIGVuZCB1cCBiZWluZyBzcG9vZmVkLgorKwkgKiAKKysJICogT24gc29tZSBzaXRlcywgZ2V0aG9zdGJ5bmFtZSgibG9jYWxob3N0IikgcmV0dXJucyAibG9jYWxob3N0LmRvbWFpbiIuCisrCSAqIFRoaXMgaXMgYSBETlMgYXJ0ZWZhY3QuIFdlIHRyZWF0IGl0IGFzIGEgc3BlY2lhbCBjYXNlLiBXaGVuIHdlCisrCSAqIGNhbid0IGJlbGlldmUgdGhlIGFkZHJlc3MgbGlzdCBmcm9tIGdldGhvc3RieW5hbWUoImxvY2FsaG9zdCIpCisrCSAqIHdlJ3JlIGluIGJpZyB0cm91YmxlIGFueXdheS4KKysJICovCisrCisrCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworKwloaW50cy5haV9mYW1pbHkgPSBzaW4tPnNhX2ZhbWlseTsKKysJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysJaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfQ0FOT05OQU1FOworKwlpZiAoZ2V0YWRkcmluZm8oaG9zdC0+bmFtZSwgTlVMTCwgJmhpbnRzLCAmcmVzMCkgIT0gMCkgeworKworKwkgICAgLyoKKysJICAgICAqIFVuYWJsZSB0byB2ZXJpZnkgdGhhdCB0aGUgaG9zdCBuYW1lIG1hdGNoZXMgdGhlIGFkZHJlc3MuIFRoaXMKKysJICAgICAqIG1heSBiZSBhIHRyYW5zaWVudCBwcm9ibGVtIG9yIGEgYm90Y2hlZCBuYW1lIHNlcnZlciBzZXR1cC4KKysJICAgICAqLworKworKwkgICAgdGNwZF93YXJuKCJjYW4ndCB2ZXJpZnkgaG9zdG5hbWU6IGdldGFkZHJpbmZvKCVzLCAlcykgZmFpbGVkIiwKKysJCSAgICAgIGhvc3QtPm5hbWUsCisrCQkgICAgICAoc2luLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgPyAiQUZfSU5FVCIgOiAiQUZfSU5FVDYiKTsKKysKKysJfSBlbHNlIGlmICgocmVzMC0+YWlfY2Fub25uYW1lID09IE5VTEwKKysJCSAgICB8fCBTVFJfTkUoaG9zdC0+bmFtZSwgcmVzMC0+YWlfY2Fub25uYW1lKSkKKysJCSAgICYmIFNUUl9ORShob3N0LT5uYW1lLCAibG9jYWxob3N0IikpIHsKKysKKysJICAgIC8qCisrCSAgICAgKiBUaGUgZ2V0aG9zdGJ5YWRkcigpIGFuZCBnZXRob3N0YnluYW1lKCkgY2FsbHMgZGlkIG5vdCByZXR1cm4KKysJICAgICAqIHRoZSBzYW1lIGhvc3RuYW1lLiBUaGlzIGNvdWxkIGJlIGEgbmFtZXNlcnZlciBjb25maWd1cmF0aW9uCisrCSAgICAgKiBwcm9ibGVtLiBJdCBjb3VsZCBhbHNvIGJlIHRoYXQgc29tZW9uZSBpcyB0cnlpbmcgdG8gc3Bvb2YgdXMuCisrCSAgICAgKi8KKysKKysJICAgIHRjcGRfd2FybigiaG9zdCBuYW1lL25hbWUgbWlzbWF0Y2g6ICVzICE9ICUuKnMiLAorKwkJICAgICAgaG9zdC0+bmFtZSwgU1RSSU5HX0xFTkdUSCwKKysJCSAgICAgIChyZXMwLT5haV9jYW5vbm5hbWUgPT0gTlVMTCkgPyAiIiA6IHJlczAtPmFpX2Nhbm9ubmFtZSk7CisrCisrCX0gZWxzZSB7CisrCisrCSAgICAvKgorKwkgICAgICogVGhlIGFkZHJlc3Mgc2hvdWxkIGJlIGEgbWVtYmVyIG9mIHRoZSBhZGRyZXNzIGxpc3QgcmV0dXJuZWQgYnkKKysJICAgICAqIGdldGhvc3RieW5hbWUoKS4gV2Ugc2hvdWxkIGZpcnN0IHZlcmlmeSB0aGF0IHRoZSBoX2FkZHJ0eXBlCisrCSAgICAgKiBmaWVsZCBpcyBBRl9JTkVULCBidXQgdGhpcyBwcm9ncmFtIGhhcyBhbHJlYWR5IGNhdXNlZCB0b28gbXVjaAorKwkgICAgICogZ3JpZWYgb24gc3lzdGVtcyB3aXRoIGJyb2tlbiBsaWJyYXJ5IGNvZGUuCisrCSAgICAgKi8KKysKKysJICAgIGZvciAocmVzID0gcmVzMDsgcmVzOyByZXMgPSByZXMtPmFpX25leHQpIHsKKysJCWlmIChyZXMtPmFpX2ZhbWlseSAhPSBzaW4tPnNhX2ZhbWlseSkKKysJCSAgICBjb250aW51ZTsKKysJCXN3aXRjaCAocmVzLT5haV9mYW1pbHkpIHsKKysJCWNhc2UgQUZfSU5FVDoKKysJCSAgICByYXAgPSAoY2hhciAqKSYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXJlcy0+YWlfYWRkciktPnNpbl9hZGRyOworKwkJICAgIGJyZWFrOworKwkJY2FzZSBBRl9JTkVUNjoKKysJCSAgICAvKiBuZWVkIHRvIGNoZWNrIHNjb3BlX2lkICovCisrCQkgICAgaWYgKCgoc3RydWN0IHNvY2thZGRyX2luNiAqKXNpbiktPnNpbjZfc2NvcGVfaWQgIT0KKysJCSAgICAgICAgKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopcmVzLT5haV9hZGRyKS0+c2luNl9zY29wZV9pZCkgeworKwkJCWNvbnRpbnVlOworKwkJICAgIH0KKysJCSAgICByYXAgPSAoY2hhciAqKSYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilyZXMtPmFpX2FkZHIpLT5zaW42X2FkZHI7CisrCQkgICAgYnJlYWs7CisrCQlkZWZhdWx0OgorKwkJICAgIGNvbnRpbnVlOworKwkJfQorKwkJaWYgKG1lbWNtcChyYXAsIGFwLCBhbGVuKSA9PSAwKSB7CisrCQkgICAgZnJlZWFkZHJpbmZvKHJlczApOworKwkJICAgIHJldHVybjsJCQkvKiBuYW1lIGlzIGdvb2QsIGtlZXAgaXQgKi8KKysJCX0KKysJICAgIH0KKysKKysJICAgIC8qCisrCSAgICAgKiBUaGUgaG9zdCBuYW1lIGRvZXMgbm90IG1hcCB0byB0aGUgaW5pdGlhbCBhZGRyZXNzLiBQZXJoYXBzCisrCSAgICAgKiBzb21lb25lIGhhcyBtZXNzZWQgdXAuIFBlcmhhcHMgc29tZW9uZSBjb21wcm9taXNlZCBhIG5hbWUKKysJICAgICAqIHNlcnZlci4KKysJICAgICAqLworKworKwkgICAgZ2V0bmFtZWluZm8oc2luLCBzYWxlbiwgaG5hbWUsIHNpemVvZihobmFtZSksCisrCQkJTlVMTCwgMCwgTklfTlVNRVJJQ0hPU1QgfCBOSV9XSVRIU0NPUEVJRCk7CisrCSAgICB0Y3BkX3dhcm4oImhvc3QgbmFtZS9hZGRyZXNzIG1pc21hdGNoOiAlcyAhPSAlLipzIiwKKysJCSAgICAgIGhuYW1lLCBTVFJJTkdfTEVOR1RILAorKwkJICAgICAgKHJlczAtPmFpX2Nhbm9ubmFtZSA9PSBOVUxMKSA/ICIiIDogcmVzMC0+YWlfY2Fub25uYW1lKTsKKysJfQorKwlzdHJjcHkoaG9zdC0+bmFtZSwgcGFyYW5vaWQpOwkJLyogbmFtZSBpcyBiYWQsIGNsb2JiZXIgaXQgKi8KKysJaWYgKHJlczApCisrCSAgICBmcmVlYWRkcmluZm8ocmVzMCk7CisrICAgIH0KKysjZWxzZSAvKiBJTkVUNiAqLworICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IGhvc3QtPnNpbjsKKyAgICAgc3RydWN0IGhvc3RlbnQgKmhwOworICAgICBpbnQgICAgIGk7CitAQCAtMjIwLDYgKzQxMiw3IEBACisgCX0KKyAJc3RyY3B5KGhvc3QtPm5hbWUsIHBhcmFub2lkKTsJCS8qIG5hbWUgaXMgYmFkLCBjbG9iYmVyIGl0ICovCisgICAgIH0KKysjZW5kaWYgLyogSU5FVDYgKi8KKyB9CisgCisgLyogc29ja19zaW5rIC0gYWJzb3JiIHVucmVjZWl2ZWQgSVAgZGF0YWdyYW0gKi8KK0BAIC0yMjgsNyArNDIxLDExIEBACisgaW50ICAgICBmZDsKKyB7CisgICAgIGNoYXIgICAgYnVmW0JVRlNJWl07CisrI2lmZGVmIElORVQ2CisrICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNpbjsKKysjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworKyNlbmRpZgorICAgICBpbnQgICAgIHNpemUgPSBzaXplb2Yoc2luKTsKKyAKKyAgICAgLyoKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5jIHRjcF93cmFwcGVyc183LjYvdGNwZC5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuYwkxOTk2LTAyLTExIDE3OjAxOjMzLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZC5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMTIwLDcgKzEyMCwxMiBAQAorIAorICAgICAvKiBSZXBvcnQgcmVxdWVzdCBhbmQgaW52b2tlIHRoZSByZWFsIGRhZW1vbiBwcm9ncmFtLiAqLworIAorKyNpZmRlZiBJTkVUNgorKyAgICBzeXNsb2coYWxsb3dfc2V2ZXJpdHksICJjb25uZWN0IGZyb20gJXMgKCVzKSIsCisrCSAgIGV2YWxfY2xpZW50KCZyZXF1ZXN0KSwgZXZhbF9ob3N0YWRkcihyZXF1ZXN0LmNsaWVudCkpOworKyNlbHNlCisgICAgIHN5c2xvZyhhbGxvd19zZXZlcml0eSwgImNvbm5lY3QgZnJvbSAlcyIsIGV2YWxfY2xpZW50KCZyZXF1ZXN0KSk7CisrI2VuZGlmCisgICAgIGNsb3NlbG9nKCk7CisgICAgICh2b2lkKSBleGVjdihwYXRoLCBhcmd2KTsKKyAgICAgc3lzbG9nKExPR19FUlIsICJlcnJvcjogY2Fubm90IGV4ZWN1dGUgJXM6ICVtIiwgcGF0aCk7CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuYyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkY2hrLmMJMTk5Ny0wMi0xMiAwMjoxMzoyNS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTIyLDYgKzIyLDkgQEAKKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2lmZGVmIElORVQ2CisrI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KK0BAIC0zOTcsNiArNDAwLDMxIEBACisgICAgIH0KKyB9CisgCisrI2lmZGVmIElORVQ2Cisrc3RhdGljIGludCBpc19pbmV0Nl9hZGRyKHBhdCkKKysgICAgY2hhciAqcGF0OworK3sKKysgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzOworKyAgICBpbnQgbGVuLCByZXQ7CisrICAgIGNoYXIgY2g7CisrCisrICAgIGlmICgqcGF0ICE9ICdbJykKKysJcmV0dXJuICgwKTsKKysgICAgbGVuID0gc3RybGVuKHBhdCk7CisrICAgIGlmICgoY2ggPSBwYXRbbGVuIC0gMV0pICE9ICddJykKKysJcmV0dXJuICgwKTsKKysgICAgcGF0W2xlbiAtIDFdID0gJ1wwJzsKKysgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrICAgIGhpbnRzLmFpX2ZhbWlseSA9IEFGX0lORVQ2OworKyAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKyAgICBoaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9OVU1FUklDSE9TVDsKKysgICAgaWYgKChyZXQgPSBnZXRhZGRyaW5mbyhwYXQgKyAxLCBOVUxMLCAmaGludHMsICZyZXMpKSA9PSAwKQorKwlmcmVlYWRkcmluZm8ocmVzKTsKKysgICAgcGF0W2xlbiAtIDFdID0gY2g7CisrICAgIHJldHVybiAocmV0ID09IDApOworK30KKysjZW5kaWYKKysKKyAvKiBjaGVja19ob3N0IC0gY3JpdGljaXplIGhvc3QgcGF0dGVybiAqLworIAorIHN0YXRpYyBpbnQgY2hlY2tfaG9zdChwYXQpCitAQCAtNDIzLDE0ICs0NTEsMjcgQEAKKyAjZW5kaWYKKyAjZW5kaWYKKyAgICAgfSBlbHNlIGlmIChtYXNrID0gc3BsaXRfYXQocGF0LCAnLycpKSB7CS8qIG5ldHdvcmsvbmV0bWFzayAqLworKyNpZmRlZiBJTkVUNgorKwlpbnQgbWFza19sZW47CisrCisrCWlmICgoZG90X3F1YWRfYWRkcihwYXQpID09IElOQUREUl9OT05FCisrCSAgICB8fCBkb3RfcXVhZF9hZGRyKG1hc2spID09IElOQUREUl9OT05FKQorKwkgICAgJiYgKCFpc19pbmV0Nl9hZGRyKHBhdCkKKysJCXx8ICgobWFza19sZW4gPSBhdG9pKG1hc2spKSA8IDAgfHwgbWFza19sZW4gPiAxMjgpKSkKKysjZWxzZQorIAlpZiAoZG90X3F1YWRfYWRkcihwYXQpID09IElOQUREUl9OT05FCisgCSAgICB8fCBkb3RfcXVhZF9hZGRyKG1hc2spID09IElOQUREUl9OT05FKQorKyNlbmRpZgorIAkgICAgdGNwZF93YXJuKCIlcy8lczogYmFkIG5ldC9tYXNrIHBhdHRlcm4iLCBwYXQsIG1hc2spOworICAgICB9IGVsc2UgaWYgKFNUUl9FUShwYXQsICJGQUlMIikpIHsJCS8qIG9ic29sZXRlICovCisgCXRjcGRfd2FybigiRkFJTCBpcyBubyBsb25nZXIgcmVjb2duaXplZCIpOworIAl0Y3BkX3dhcm4oIih1c2UgRVhDRVBUIG9yIERFTlkgaW5zdGVhZCkiKTsKKyAgICAgfSBlbHNlIGlmIChyZXNlcnZlZF9uYW1lKHBhdCkpIHsJCS8qIG90aGVyIHJlc2VydmVkICovCisgCSAvKiB2b2lkICovIDsKKysjaWZkZWYgSU5FVDYKKysgICAgfSBlbHNlIGlmIChpc19pbmV0Nl9hZGRyKHBhdCkpIHsgLyogSVB2NiBhZGRyZXNzICovCisrCWFkZHJfY291bnQgPSAxOworKyNlbmRpZgorICAgICB9IGVsc2UgaWYgKE5PVF9JTkFERFIocGF0KSkgewkJLyogaW50ZXJuZXQgbmFtZSAqLworIAlpZiAocGF0W3N0cmxlbihwYXQpIC0gMV0gPT0gJy4nKSB7CisgCSAgICB0Y3BkX3dhcm4oIiVzOiBkb21haW4gb3IgaG9zdCBuYW1lIGVuZHMgaW4gZG90IiwgcGF0KTsKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5oIHRjcF93cmFwcGVyc183LjYvdGNwZC5oCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuaAkxOTk2LTAzLTE5IDE2OjIyOjI1LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZC5oCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMTEsNyArMTEsMTEgQEAKKyBzdHJ1Y3QgaG9zdF9pbmZvIHsKKyAgICAgY2hhciAgICBuYW1lW1NUUklOR19MRU5HVEhdOwkvKiBhY2Nlc3MgdmlhIGV2YWxfaG9zdG5hbWUoaG9zdCkgKi8KKyAgICAgY2hhciAgICBhZGRyW1NUUklOR19MRU5HVEhdOwkvKiBhY2Nlc3MgdmlhIGV2YWxfaG9zdGFkZHIoaG9zdCkgKi8KKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyICpzaW47CQkvKiBzb2NrZXQgYWRkcmVzcyBvciAwICovCisrI2Vsc2UKKyAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW47CQkvKiBzb2NrZXQgYWRkcmVzcyBvciAwICovCisrI2VuZGlmCisgICAgIHN0cnVjdCB0X3VuaXRkYXRhICp1bml0OwkJLyogVExJIHRyYW5zcG9ydCBhZGRyZXNzIG9yIDAgKi8KKyAgICAgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsJLyogZm9yIHNoYXJlZCBpbmZvcm1hdGlvbiAqLworIH07CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRtYXRjaC5jIHRjcF93cmFwcGVyc183LjYvdGNwZG1hdGNoLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZG1hdGNoLmMJMTk5Ni0wMi0xMSAxNzowMTozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRtYXRjaC5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtNTcsNyArNTcsMTEgQEAKKyBpbnQgICAgIGFyZ2M7CisgY2hhciAgKiphcmd2OworIHsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqaHAsICpyZXM7CisrI2Vsc2UKKyAgICAgc3RydWN0IGhvc3RlbnQgKmhwOworKyNlbmRpZgorICAgICBjaGFyICAgKm15bmFtZSA9IGFyZ3ZbMF07CisgICAgIGNoYXIgICAqY2xpZW50OworICAgICBjaGFyICAgKnNlcnZlcjsKK0BAIC02OCw4ICs3MiwxMyBAQAorICAgICBpbnQgICAgIGNoOworICAgICBjaGFyICAgKmluZXRjZiA9IDA7CisgICAgIGludCAgICAgY291bnQ7CisrI2lmZGVmIElORVQ2CisrICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNlcnZlcl9zaW47CisrICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGNsaWVudF9zaW47CisrI2Vsc2UKKyAgICAgc3RydWN0IHNvY2thZGRyX2luIHNlcnZlcl9zaW47CisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBjbGllbnRfc2luOworKyNlbmRpZgorICAgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAKKyAgICAgLyoKK0BAIC0xNzIsMTMgKzE4MSwyMCBAQAorICAgICBpZiAoTk9UX0lOQUREUihzZXJ2ZXIpID09IDAgfHwgSE9TVE5BTUVfS05PV04oc2VydmVyKSkgeworIAlpZiAoKGhwID0gZmluZF9pbmV0X2FkZHIoc2VydmVyKSkgPT0gMCkKKyAJICAgIGV4aXQoMSk7CisrI2lmbmRlZiBJTkVUNgorIAltZW1zZXQoKGNoYXIgKikgJnNlcnZlcl9zaW4sIDAsIHNpemVvZihzZXJ2ZXJfc2luKSk7CisgCXNlcnZlcl9zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisrI2VuZGlmCisgCXJlcXVlc3Rfc2V0KCZyZXF1ZXN0LCBSUV9TRVJWRVJfU0lOLCAmc2VydmVyX3NpbiwgMCk7CisgCisrI2lmZGVmIElORVQ2CisrCWZvciAocmVzID0gaHAsIGNvdW50ID0gMDsgcmVzOyByZXMgPSByZXMtPmFpX25leHQsIGNvdW50KyspIHsKKysJICAgIG1lbWNweSgmc2VydmVyX3NpbiwgcmVzLT5haV9hZGRyLCByZXMtPmFpX2FkZHJsZW4pOworKyNlbHNlCisgCWZvciAoY291bnQgPSAwOyAoYWRkciA9IGhwLT5oX2FkZHJfbGlzdFtjb3VudF0pICE9IDA7IGNvdW50KyspIHsKKyAJICAgIG1lbWNweSgoY2hhciAqKSAmc2VydmVyX3Npbi5zaW5fYWRkciwgYWRkciwKKyAJCSAgIHNpemVvZihzZXJ2ZXJfc2luLnNpbl9hZGRyKSk7CisrI2VuZGlmCisgCisgCSAgICAvKgorIAkgICAgICogRm9yY2UgZXZhbHVhdGlvbiBvZiBzZXJ2ZXIgaG9zdCBuYW1lIGFuZCBhZGRyZXNzLiBIb3N0IG5hbWUKK0BAIC0xOTQsNyArMjEwLDExIEBACisgCSAgICBmcHJpbnRmKHN0ZGVyciwgIlBsZWFzZSBzcGVjaWZ5IGFuIGFkZHJlc3MgaW5zdGVhZFxuIik7CisgCSAgICBleGl0KDEpOworIAl9CisrI2lmZGVmIElORVQ2CisrCWZyZWVhZGRyaW5mbyhocCk7CisrI2Vsc2UKKyAJZnJlZSgoY2hhciAqKSBocCk7CisrI2VuZGlmCisgICAgIH0gZWxzZSB7CisgCXJlcXVlc3Rfc2V0KCZyZXF1ZXN0LCBSUV9TRVJWRVJfTkFNRSwgc2VydmVyLCAwKTsKKyAgICAgfQorQEAgLTIwOCw2ICsyMjgsMTggQEAKKyAJdGNwZG1hdGNoKCZyZXF1ZXN0KTsKKyAJZXhpdCgwKTsKKyAgICAgfQorKyNpZmRlZiBJTkVUNgorKyAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDY7CisrICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisrICAgIGhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRSB8IEFJX05VTUVSSUNIT1NUOworKyAgICBpZiAoZ2V0YWRkcmluZm8oY2xpZW50LCBOVUxMLCAmaGludHMsICZyZXMpID09IDApIHsKKysJZnJlZWFkZHJpbmZvKHJlcyk7CisrCXJlcXVlc3Rfc2V0KCZyZXF1ZXN0LCBSUV9DTElFTlRfQUREUiwgY2xpZW50LCAwKTsKKysJdGNwZG1hdGNoKCZyZXF1ZXN0KTsKKysJZXhpdCgwKTsKKysgICAgfQorKyNlbmRpZgorIAorICAgICAvKgorICAgICAgKiBQZXJoYXBzIHRoZXkgYXJlIHRlc3Rpbmcgc3BlY2lhbCBjbGllbnQgaG9zdG5hbWUgcGF0dGVybnMgdGhhdCBhcmVuJ3QKK0BAIC0yMjksNiArMjYxLDM0IEBACisgICAgICAqLworICAgICBpZiAoKGhwID0gZmluZF9pbmV0X2FkZHIoY2xpZW50KSkgPT0gMCkKKyAJZXhpdCgxKTsKKysjaWZkZWYgSU5FVDYKKysgICAgcmVxdWVzdF9zZXQoJnJlcXVlc3QsIFJRX0NMSUVOVF9TSU4sICZjbGllbnRfc2luLCAwKTsKKysKKysgICAgZm9yIChyZXMgPSBocCwgY291bnQgPSAwOyByZXM7IHJlcyA9IHJlcy0+YWlfbmV4dCwgY291bnQrKykgeworKwltZW1jcHkoJmNsaWVudF9zaW4sIHJlcy0+YWlfYWRkciwgcmVzLT5haV9hZGRybGVuKTsKKysKKysJLyoKKysJICogZ2V0bmFtZWluZm8oKSBkb2Vzbid0IGRvIHJldmVyc2UgbG9va3VwIGFnYWluc3QgbGluay1sb2NhbAorKwkgKiBhZGRyZXNzLiAgU28sIHdlIHBhc3MgdGhyb3VnaCBob3N0IG5hbWUgZXZhbHVhdGlvbiBhZ2FpbnN0CisrCSAqIHN1Y2ggYWRkcmVzc2VzLgorKwkgKi8KKysJaWYgKHJlcy0+YWlfZmFtaWx5ICE9IEFGX0lORVQ2IHx8CisrCSAgICAhSU42X0lTX0FERFJfTElOS0xPQ0FMKCYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilyZXMtPmFpX2FkZHIpLT5zaW42X2FkZHIpKSB7CisrCSAgICAvKgorKwkgICAgICogRm9yY2UgZXZhbHVhdGlvbiBvZiBjbGllbnQgaG9zdCBuYW1lIGFuZCBhZGRyZXNzLiBIb3N0IG5hbWUKKysJICAgICAqIGNvbmZsaWN0cyB3aWxsIGJlIHJlcG9ydGVkIHdoaWxlIGV2YWxfaG9zdG5hbWUoKSBkb2VzIGl0cyBqb2IuCisrCSAgICAgKi8KKysJICAgIHJlcXVlc3Rfc2V0KCZyZXF1ZXN0LCBSUV9DTElFTlRfTkFNRSwgIiIsIFJRX0NMSUVOVF9BRERSLCAiIiwgMCk7CisrCSAgICBpZiAoU1RSX0VRKGV2YWxfaG9zdG5hbWUocmVxdWVzdC5jbGllbnQpLCB1bmtub3duKSkKKysJCXRjcGRfd2FybigiaG9zdCBhZGRyZXNzICVzLT5uYW1lIGxvb2t1cCBmYWlsZWQiLAorKwkJCSAgZXZhbF9ob3N0YWRkcihyZXF1ZXN0LmNsaWVudCkpOworKwl9CisrCXRjcGRtYXRjaCgmcmVxdWVzdCk7CisrCWlmIChyZXMtPmFpX25leHQpCisrCSAgICBwcmludGYoIlxuIik7CisrICAgIH0KKysgICAgZnJlZWFkZHJpbmZvKGhwKTsKKysjZWxzZQorICAgICBtZW1zZXQoKGNoYXIgKikgJmNsaWVudF9zaW4sIDAsIHNpemVvZihjbGllbnRfc2luKSk7CisgICAgIGNsaWVudF9zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgIHJlcXVlc3Rfc2V0KCZyZXF1ZXN0LCBSUV9DTElFTlRfU0lOLCAmY2xpZW50X3NpbiwgMCk7CitAQCAtMjUwLDYgKzMxMCw3IEBACisgCSAgICBwcmludGYoIlxuIik7CisgICAgIH0KKyAgICAgZnJlZSgoY2hhciAqKSBocCk7CisrI2VuZGlmCisgICAgIGV4aXQoMCk7CisgfQorIAorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90bGkuYyB0Y3Bfd3JhcHBlcnNfNy42L3RsaS5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RsaS5jCTE5OTctMDMtMjEgMTk6Mjc6MjYuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90bGkuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTY1LDggKzY1LDEzIEBACisgdm9pZCAgICB0bGlfaG9zdChyZXF1ZXN0KQorIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CisgeworKyNpZmRlZiBJTkVUNgorKyAgICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgY2xpZW50OworKyAgICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2VydmVyOworKyNlbHNlCisgICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gY2xpZW50OworICAgICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luIHNlcnZlcjsKKysjZW5kaWYKKyAKKyAgICAgLyoKKyAgICAgICogSWYgd2UgZGlzY292ZXIgdGhhdCB3ZSBhcmUgdXNpbmcgYW4gSVAgdHJhbnNwb3J0LCBwcmV0ZW5kIHdlIG5ldmVyCitAQCAtNzYsMTQgKzgxLDI5IEBACisgCisgICAgIHRsaV9lbmRwb2ludHMocmVxdWVzdCk7CisgICAgIGlmICgocmVxdWVzdC0+Y29uZmlnID0gdGxpX3RyYW5zcG9ydChyZXF1ZXN0LT5mZCkpICE9IDAKKysjaWZkZWYgSU5FVDYKKysJJiYgKFNUUl9FUShyZXF1ZXN0LT5jb25maWctPm5jX3Byb3RvZm1seSwgImluZXQiKSB8fAorKwkgICAgU1RSX0VRKHJlcXVlc3QtPmNvbmZpZy0+bmNfcHJvdG9mbWx5LCAiaW5ldDYiKSkpIHsKKysjZWxzZQorIAkmJiBTVFJfRVEocmVxdWVzdC0+Y29uZmlnLT5uY19wcm90b2ZtbHksICJpbmV0IikpIHsKKysjZW5kaWYKKyAJaWYgKHJlcXVlc3QtPmNsaWVudC0+dW5pdCAhPSAwKSB7CisrI2lmZGVmIElORVQ2CisrCSAgICBjbGllbnQgPSAqKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICopIHJlcXVlc3QtPmNsaWVudC0+dW5pdC0+YWRkci5idWY7CisrCSAgICByZXF1ZXN0LT5jbGllbnQtPnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJmNsaWVudDsKKysjZWxzZQorIAkgICAgY2xpZW50ID0gKihzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgcmVxdWVzdC0+Y2xpZW50LT51bml0LT5hZGRyLmJ1ZjsKKyAJICAgIHJlcXVlc3QtPmNsaWVudC0+c2luID0gJmNsaWVudDsKKysjZW5kaWYKKyAJfQorIAlpZiAocmVxdWVzdC0+c2VydmVyLT51bml0ICE9IDApIHsKKysjaWZkZWYgSU5FVDYKKysJICAgIHNlcnZlciA9ICooc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikgcmVxdWVzdC0+c2VydmVyLT51bml0LT5hZGRyLmJ1ZjsKKysJICAgIHJlcXVlc3QtPnNlcnZlci0+c2luID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmc2VydmVyOworKyNlbHNlCisgCSAgICBzZXJ2ZXIgPSAqKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSByZXF1ZXN0LT5zZXJ2ZXItPnVuaXQtPmFkZHIuYnVmOworIAkgICAgcmVxdWVzdC0+c2VydmVyLT5zaW4gPSAmc2VydmVyOworKyNlbmRpZgorIAl9CisgCXRsaV9jbGVhbnVwKHJlcXVlc3QpOworIAlzb2NrX21ldGhvZHMocmVxdWVzdCk7CitAQCAtMTg3LDcgKzIwNywxNSBAQAorICAgICB9CisgICAgIHdoaWxlIChjb25maWcgPSBnZXRuZXRjb25maWcoaGFuZGxlcCkpIHsKKyAJaWYgKHN0YXQoY29uZmlnLT5uY19kZXZpY2UsICZmcm9tX2NvbmZpZykgPT0gMCkgeworKyNpZmRlZiBOT19DTE9ORV9ERVZJQ0UKKysJLyoKKysJICogSWYgdGhlIG5ldHdvcmsgZGV2aWNlcyBhcmUgbm90IGNsb25lZCAoYXMgaXMgdGhlIGNhc2UgZm9yCisrCSAqIFNvbGFyaXMgOCBCZXRhKSwgd2UgbXVzdCBjb21wYXJlIHRoZSBtYWpvciBkZXZpY2UgbnVtYmVycy4KKysJICovCisrCSAgICBpZiAobWFqb3IoZnJvbV9jb25maWcuc3RfcmRldikgPT0gbWFqb3IoZnJvbV9jbGllbnQuc3RfcmRldikpCisrI2Vsc2UKKyAJICAgIGlmIChtaW5vcihmcm9tX2NvbmZpZy5zdF9yZGV2KSA9PSBtYWpvcihmcm9tX2NsaWVudC5zdF9yZGV2KSkKKysjZW5kaWYKKyAJCWJyZWFrOworIAl9CisgICAgIH0KK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdXBkYXRlLmMgdGNwX3dyYXBwZXJzXzcuNi91cGRhdGUuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy91cGRhdGUuYwkxOTk0LTEyLTI4IDE3OjQyOjU2LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdXBkYXRlLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NiwxMCArNDYsMTggQEAKKyAJICAgIHJlcXVlc3QtPmZkID0gdmFfYXJnKGFwLCBpbnQpOworIAkgICAgY29udGludWU7CisgCWNhc2UgUlFfQ0xJRU5UX1NJTjoKKysjaWZkZWYgSU5FVDYKKysJICAgIHJlcXVlc3QtPmNsaWVudC0+c2luID0gdmFfYXJnKGFwLCBzdHJ1Y3Qgc29ja2FkZHIgKik7CisrI2Vsc2UKKyAJICAgIHJlcXVlc3QtPmNsaWVudC0+c2luID0gdmFfYXJnKGFwLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKik7CisrI2VuZGlmCisgCSAgICBjb250aW51ZTsKKyAJY2FzZSBSUV9TRVJWRVJfU0lOOgorKyNpZmRlZiBJTkVUNgorKwkgICAgcmVxdWVzdC0+c2VydmVyLT5zaW4gPSB2YV9hcmcoYXAsIHN0cnVjdCBzb2NrYWRkciAqKTsKKysjZWxzZQorIAkgICAgcmVxdWVzdC0+c2VydmVyLT5zaW4gPSB2YV9hcmcoYXAsIHN0cnVjdCBzb2NrYWRkcl9pbiAqKTsKKysjZW5kaWYKKyAJICAgIGNvbnRpbnVlOworIAorIAkgICAgLyoKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvd29ya2Fyb3VuZHMuYyB0Y3Bfd3JhcHBlcnNfNy42L3dvcmthcm91bmRzLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvd29ya2Fyb3VuZHMuYwkxOTk2LTAzLTE5IDE2OjIyOjI2LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvd29ya2Fyb3VuZHMuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTE2NiwxMSArMTY2LDIyIEBACisgaW50ICAgICpsZW47CisgeworICAgICBpbnQgICAgIHJldDsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyICpzaW4gPSBzYTsKKysjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgc2E7CisrI2VuZGlmCisgCisgICAgIGlmICgocmV0ID0gZ2V0cGVlcm5hbWUoc29jaywgc2EsIGxlbikpID49IDAKKysjaWZkZWYgSU5FVDYKKysJJiYgKChzaW4tPnN1X3NpLnNpX2ZhbWlseSA9PSBBRl9JTkVUNgorKwkgICAgICYmIElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW4tPnN1X3NpbjYuc2luNl9hZGRyKSkKKysJICAgIHx8IChzaW4tPnN1X3NpLnNpX2ZhbWlseSA9PSBBRl9JTkVUCisrCQkmJiBzaW4tPnN1X3Npbi5zaW5fYWRkci5zX2FkZHIgPT0gMCkpKSB7CisrI2Vsc2UKKyAJJiYgc2EtPnNhX2ZhbWlseSA9PSBBRl9JTkVUCisgCSYmIHNpbi0+c2luX2FkZHIuc19hZGRyID09IDApIHsKKysjZW5kaWYKKyAJZXJybm8gPSBFTk9UQ09OTjsKKyAJcmV0dXJuICgtMSk7CisgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMV90Y3BkX2JsYWNrbGlzdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzExX3RjcGRfYmxhY2tsaXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNjEwNmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMV90Y3BkX2JsYWNrbGlzdC5wYXRjaApAQCAtMCwwICsxLDE1MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitQYXRoOiBuZXdzLnBvcmN1cGluZS5vcmchbmV3cy5wb3JjdXBpbmUub3JnIW5vdC1mb3ItbWFpbAorRnJvbTogV2lldHNlIFZlbmVtYSA8d2lldHNlQCgobm8pKHNwYW0pKHBsZWFzZSkpd3p2Lndpbi50dWUubmw+CitOZXdzZ3JvdXBzOiBjb21wLm1haWwuc2VuZG1haWwsY29tcC5zZWN1cml0eS51bml4CitTdWJqZWN0OiBUQ1AgV3JhcHBlciBCbGFja2xpc3QgRXh0ZW5zaW9uCitGb2xsb3d1cC1UbzogcG9zdGVyCitEYXRlOiA4IFNlcCAxOTk3IDE4OjUzOjEzIC0wNDAwCitPcmdhbml6YXRpb246IFdpZXRzZSdzIGhhbmdvdXQgd2hpbGUgb24gc2FiYXR0aWNhbCBpbiB0aGUgVVNBCitMaW5lczogMTQ3CitTZW5kZXI6IHdpZXRzZUBzcGlrZS5wb3JjdXBpbmUub3JnCitNZXNzYWdlLUlEOiA8NXYxdmtwJGg0ZiQxQHNwaWtlLnBvcmN1cGluZS5vcmc+CitOTlRQLVBvc3RpbmctSG9zdDogc3Bpa2UucG9yY3VwaW5lLm9yZworWHJlZjogbmV3cy5wb3JjdXBpbmUub3JnIGNvbXAubWFpbC5zZW5kbWFpbDozNTQxIGNvbXAuc2VjdXJpdHkudW5peDo3MTU4CisKK1RoZSBwYXRjaCBiZWxvdyBhZGRzIGEgbmV3IGhvc3QgcGF0dGVybiB0byB0aGUgVENQIFdyYXBwZXIgYWNjZXNzCitjb250cm9sIGxhbmd1YWdlLiBJbnN0ZWFkIG9mIGEgaG9zdCBuYW1lIG9yIGFkZHJlc3MgcGF0dGVybiwgeW91CitjYW4gc3BlY2lmeSBhbiBleHRlcm5hbCAvZmlsZS9uYW1lIHdpdGggaG9zdCBuYW1lIG9yIGFkZHJlc3MKK3BhdHRlcm5zLiAgIFRoZSBmZWF0dXJlIGNhbiBiZSB1c2VkIHJlY3Vyc2l2ZWx5LgorCitUaGUgL2ZpbGUvbmFtZSBleHRlbnNpb24gbWFrZXMgaXQgZWFzeSB0byBibGFja2xpc3QgYmFkIHNpdGVzLCBmb3IKK2V4YW1wbGUsIHRvIGJsb2NrIHVud2FudGVkIGVsZWN0cm9uaWMgbWFpbCB3aGVuIGxpYndyYXAgaXMgbGlua2VkCitpbnRvIHNlbmRtYWlsLiAgQWRkaW5nIGhvc3RzIHRvIGEgc2ltcGxlIHRleHQgZmlsZSBpcyBtdWNoIGVhc2llcgordGhhbiBoYXZpbmcgdG8gZWRpdCBhIG1vcmUgY29tcGxleCBob3N0cy5hbGxvdy9kZW55IGZpbGUuCisKK0kgZGV2ZWxvcGVkIHRoaXMgYSB5ZWFyIG9yIHNvIGFnbyBhcyBhIHN1YnN0aXR1dGUgZm9yIE5JUyBuZXRncm91cHMuCitBdCB0aGF0IHRpbWUsIEkgZGlkIG5vdCBjb25zaWRlciBpdCBvZiBzdWZmaWNpZW50IGludGVyZXN0IGZvcgoraW5jbHVzaW9uIGluIHRoZSBUQ1AgV3JhcHBlciBkaXN0cmlidXRpb24uIEhvdyB0aW1lcyBoYXZlIGNoYW5nZWQuCisKK1RoZSBwYXRjaCBpcyByZWxhdGl2ZSB0byBUQ1AgV3JhcHBlcnMgdmVyc2lvbiA3LjYuIFRoZSBtYWluIGFyY2hpdmUKK3NpdGUgaXMgZnRwOi8vZnRwLndpbi50dWUubmwvcHViL3NlY3VyaXR5L3RjcF93cmFwcGVyc183LjYudGFyLmd6CisKK1RoYW5rcyB0byB0aGUgRGViaWFuIExJTlVYIGZvbGtzIGZvciBleHByZXNzaW5nIHRoZWlyIGludGVyZXN0IGluCit0aGlzIHBhdGNoLgorCisJV2lldHNlCisKKworW2RpZmYgdXBkYXRlZCBieSBNZF0KKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMTAgMTk6Mjg6MDkuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQkyMDA0LTA0LTEwIDE5OjI4OjAxLjAwMDAwMDAwMCArMDIwMAorQEAgLTk3LDYgKzk3LDEzIEBACisgYFszZmZlOjUwNToyOjE6Ol0vNjRcJyBtYXRjaGVzIGV2ZXJ5IGFkZHJlc3MgaW4gdGhlIHJhbmdlCisgYDNmZmU6NTA1OjI6MTo6XCcgdGhyb3VnaCBgM2ZmZTo1MDU6MjoxOmZmZmY6ZmZmZjpmZmZmOmZmZmZcJy4KKyAuSVAgXChidQorK0Egc3RyaW5nIHRoYXQgYmVnaW5zIHdpdGggYSBgL1wnIGNoYXJhY3RlciBpcyB0cmVhdGVkIGFzIGEgZmlsZQorK25hbWUuIEEgaG9zdCBuYW1lIG9yIGFkZHJlc3MgaXMgbWF0Y2hlZCBpZiBpdCBtYXRjaGVzIGFueSBob3N0IG5hbWUKKytvciBhZGRyZXNzIHBhdHRlcm4gbGlzdGVkIGluIHRoZSBuYW1lZCBmaWxlLiBUaGUgZmlsZSBmb3JtYXQgaXMKKyt6ZXJvIG9yIG1vcmUgbGluZXMgd2l0aCB6ZXJvIG9yIG1vcmUgaG9zdCBuYW1lIG9yIGFkZHJlc3MgcGF0dGVybnMKKytzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gIEEgZmlsZSBuYW1lIHBhdHRlcm4gY2FuIGJlIHVzZWQgYW55d2hlcmUKKythIGhvc3QgbmFtZSBvciBhZGRyZXNzIHBhdHRlcm4gY2FuIGJlIHVzZWQuCisrLklQIFwoYnUKKyBXaWxkY2FyZHMgYCpcJyBhbmQgYD9cJyBjYW4gYmUgdXNlZCB0byBtYXRjaCBob3N0bmFtZXMgb3IgSVAgYWRkcmVzc2VzLiAgVGhpcworIG1ldGhvZCBvZiBtYXRjaGluZyBjYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBuZXQvbWFza1wnIG1hdGNoaW5nLAorIGhvc3RuYW1lIG1hdGNoaW5nIGJlZ2lubmluZyB3aXRoIGAuXCcgb3IgSVAgYWRkcmVzcyBtYXRjaGluZyBlbmRpbmcgd2l0aCBgLlwnLgorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuYyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy5jCTIwMDQtMDQtMTAgMTk6Mjg6MDkuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYwkyMDA0LTA0LTEwIDE5OjI3OjA1LjAwMDAwMDAwMCArMDIwMAorQEAgLTI1Myw2ICsyNTMsMjYgQEAKKyAgICAgfQorIH0KKyAKKysvKiBob3N0ZmlsZV9tYXRjaCAtIGxvb2sgdXAgaG9zdCBwYXR0ZXJucyBmcm9tIGZpbGUgKi8KKysKKytzdGF0aWMgaW50IGhvc3RmaWxlX21hdGNoKHBhdGgsIGhvc3QpCisrY2hhciAgICpwYXRoOworK3N0cnVjdCBob3N0c19pbmZvICpob3N0OworK3sKKysgICAgY2hhciAgICB0b2tbQlVGU0laXTsKKysgICAgaW50ICAgICBtYXRjaCA9IE5POworKyAgICBGSUxFICAgKmZwOworKworKyAgICBpZiAoKGZwID0gZm9wZW4ocGF0aCwgInIiKSkgIT0gMCkgeworKwl3aGlsZSAoZnNjYW5mKGZwLCAiJXMiLCB0b2spID09IDEgJiYgIShtYXRjaCA9IGhvc3RfbWF0Y2godG9rLCBob3N0KSkpCisrCSAgICAgLyogdm9pZCAqLyA7CisrCWZjbG9zZShmcCk7CisrICAgIH0gZWxzZSBpZiAoZXJybm8gIT0gRU5PRU5UKSB7CisrCXRjcGRfd2Fybigib3BlbiAlczogJW0iLCBwYXRoKTsKKysgICAgfQorKyAgICByZXR1cm4gKG1hdGNoKTsKKyt9CisrCisgLyogaG9zdF9tYXRjaCAtIG1hdGNoIGhvc3QgbmFtZSBhbmQvb3IgYWRkcmVzcyBhZ2FpbnN0IHBhdHRlcm4gKi8KKyAKKyBzdGF0aWMgaW50IGhvc3RfbWF0Y2godG9rLCBob3N0KQorQEAgLTI4MCw2ICszMDAsOCBAQAorIAl0Y3BkX3dhcm4oIm5ldGdyb3VwIHN1cHBvcnQgaXMgZGlzYWJsZWQiKTsJLyogbm90IHRjcGRfanVtcCgpICovCisgCXJldHVybiAoTk8pOworICNlbmRpZgorKyAgICB9IGVsc2UgaWYgKHRva1swXSA9PSAnLycpIHsJCQkvKiAvZmlsZSBoYWNrICovCisrCXJldHVybiAoaG9zdGZpbGVfbWF0Y2godG9rLCBob3N0KSk7CisgICAgIH0gZWxzZSBpZiAoU1RSX0VRKHRvaywgIktOT1dOIikpIHsJCS8qIGNoZWNrIGFkZHJlc3MgYW5kIG5hbWUgKi8KKyAJY2hhciAgICpuYW1lID0gZXZhbF9ob3N0bmFtZShob3N0KTsKKyAJcmV0dXJuIChTVFJfTkUoZXZhbF9ob3N0YWRkcihob3N0KSwgdW5rbm93bikgJiYgSE9TVE5BTUVfS05PV04obmFtZSkpOworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkY2hrLmMgdGNwX3dyYXBwZXJzXzcuNi90Y3BkY2hrLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay5jCTIwMDQtMDQtMTAgMTk6Mjg6MDkuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkY2hrLmMJMjAwNC0wNC0xMCAxOToyNzowNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNTMsNiArMzUzLDggQEAKKyB7CisgICAgIGlmIChwYXRbMF0gPT0gJ0AnKSB7CisgCXRjcGRfd2FybigiJXM6IGRhZW1vbiBuYW1lIGJlZ2lucyB3aXRoIFwiQFwiIiwgcGF0KTsKKysgICAgfSBlbHNlIGlmIChwYXRbMF0gPT0gJy8nKSB7CisrCXRjcGRfd2FybigiJXM6IGRhZW1vbiBuYW1lIGJlZ2lucyB3aXRoIFwiL1wiIiwgcGF0KTsKKyAgICAgfSBlbHNlIGlmIChwYXRbMF0gPT0gJy4nKSB7CisgCXRjcGRfd2FybigiJXM6IGRhZW1vbiBuYW1lIGJlZ2lucyB3aXRoIGRvdCIsIHBhdCk7CisgICAgIH0gZWxzZSBpZiAocGF0W3N0cmxlbihwYXQpIC0gMV0gPT0gJy4nKSB7CitAQCAtMzg1LDYgKzM4Nyw4IEBACisgeworICAgICBpZiAocGF0WzBdID09ICdAJykgewkJCS8qIEBuZXRncm91cCAqLworIAl0Y3BkX3dhcm4oIiVzOiB1c2VyIG5hbWUgYmVnaW5zIHdpdGggXCJAXCIiLCBwYXQpOworKyAgICB9IGVsc2UgaWYgKHBhdFswXSA9PSAnLycpIHsKKysJdGNwZF93YXJuKCIlczogdXNlciBuYW1lIGJlZ2lucyB3aXRoIFwiL1wiIiwgcGF0KTsKKyAgICAgfSBlbHNlIGlmIChwYXRbMF0gPT0gJy4nKSB7CisgCXRjcGRfd2FybigiJXM6IHVzZXIgbmFtZSBiZWdpbnMgd2l0aCBkb3QiLCBwYXQpOworICAgICB9IGVsc2UgaWYgKHBhdFtzdHJsZW4ocGF0KSAtIDFdID09ICcuJykgeworQEAgLTQzMCw4ICs0MzQsMTMgQEAKKyBzdGF0aWMgaW50IGNoZWNrX2hvc3QocGF0KQorIGNoYXIgICAqcGF0OworIHsKKysgICAgY2hhciAgICBidWZbQlVGU0laXTsKKyAgICAgY2hhciAgICptYXNrOworICAgICBpbnQgICAgIGFkZHJfY291bnQgPSAxOworKyAgICBGSUxFICAgKmZwOworKyAgICBzdHJ1Y3QgdGNwZF9jb250ZXh0IHNhdmVkX2NvbnRleHQ7CisrICAgIGNoYXIgICAqY3A7CisrICAgIGNoYXIgICAqd3NwID0gIiBcdFxyXG4iOworIAorICAgICBpZiAocGF0WzBdID09ICdAJykgewkJCS8qIEBuZXRncm91cCAqLworICNpZmRlZiBOT19ORVRHUkVOVAorQEAgLTQ1MCw2ICs0NTksMjEgQEAKKyAJdGNwZF93YXJuKCJuZXRncm91cCBzdXBwb3J0IGRpc2FibGVkIik7CisgI2VuZGlmCisgI2VuZGlmCisrICAgIH0gZWxzZSBpZiAocGF0WzBdID09ICcvJykgewkJCS8qIC9wYXRoL25hbWUgKi8KKysJaWYgKChmcCA9IGZvcGVuKHBhdCwgInIiKSkgIT0gMCkgeworKwkgICAgc2F2ZWRfY29udGV4dCA9IHRjcGRfY29udGV4dDsKKysJICAgIHRjcGRfY29udGV4dC5maWxlID0gcGF0OworKwkgICAgdGNwZF9jb250ZXh0LmxpbmUgPSAwOworKwkgICAgd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKSkgeworKwkJdGNwZF9jb250ZXh0LmxpbmUrKzsKKysJCWZvciAoY3AgPSBzdHJ0b2soYnVmLCB3c3ApOyBjcDsgY3AgPSBzdHJ0b2soKGNoYXIgKikgMCwgd3NwKSkKKysJCSAgICBjaGVja19ob3N0KGNwKTsKKysJICAgIH0KKysJICAgIHRjcGRfY29udGV4dCA9IHNhdmVkX2NvbnRleHQ7CisrCSAgICBmY2xvc2UoZnApOworKwl9IGVsc2UgaWYgKGVycm5vICE9IEVOT0VOVCkgeworKwkgICAgdGNwZF93YXJuKCJvcGVuICVzOiAlbSIsIHBhdCk7CisrCX0KKyAgICAgfSBlbHNlIGlmIChtYXNrID0gc3BsaXRfYXQocGF0LCAnLycpKSB7CS8qIG5ldHdvcmsvbmV0bWFzayAqLworICNpZmRlZiBJTkVUNgorIAlpbnQgbWFza19sZW47CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMV91c2FnaV9maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMV91c2FnaV9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYwZThkMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzExX3VzYWdpX2ZpeC5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXVOIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMgdGNwX3dyYXBwZXJzXzcuNi5uZXcvaG9zdHNfYWNjZXNzLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCU1vbiBNYXkgMjAgMTQ6MDA6NTYgMjAwMgorKysrIHRjcF93cmFwcGVyc183LjYubmV3L2hvc3RzX2FjY2Vzcy5jCU1vbiBNYXkgMjAgMTQ6MjU6MDUgMjAwMgorQEAgLTQ0OCw2ICs0NDgsMTUgQEAKKyAgICAgaW50IGxlbiwgbWFza19sZW4sIGkgPSAwOworICAgICBjaGFyIGNoOworIAorKyAgICAvKgorKyAgICAgKiBCZWhhdmlvciBvZiBnZXRhZGRyaW5mbygpIGFnYWluc3QgSVB2NC1tYXBwZWQgSVB2NiBhZGRyZXNzIGlzCisrICAgICAqIGRpZmZlcmVudCBiZXR3ZWVuIEtBTUUgYW5kIFNvbGFyaXM4LiAgV2hpbGUgS0FNRSByZXR1cm5zCisrICAgICAqIEFGX0lORVQ2LCBTb2xhcmlzOCByZXR1cm5zIEFGX0lORVQuICBTbywgd2UgYXZvaWQgdGhpcyBoZXJlLgorKyAgICAgKi8KKysgICAgaWYgKFNUUk5fRVEoc3RyaW5nLCAiOjpmZmZmOiIsIDcpCisrCSYmIGRvdF9xdWFkX2FkZHIoc3RyaW5nICsgNykgIT0gSU5BRERSX05PTkUpCisrCXJldHVybiAobWFza2VkX21hdGNoNChuZXRfdG9rLCBtYXNrX3Rvaywgc3RyaW5nICsgNykpOworKworICAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKyAgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CitAQCAtNDU3LDEzICs0NjYsNiBAQAorICAgICBtZW1jcHkoJmFkZHIsIHJlcy0+YWlfYWRkciwgc2l6ZW9mKGFkZHIpKTsKKyAgICAgZnJlZWFkZHJpbmZvKHJlcyk7CisgCistICAgIGlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmYWRkci5zaW42X2FkZHIpKSB7CistCWlmICgoKih1X2ludDMyX3QgKikmbmV0LnNpbjZfYWRkci5zNl9hZGRyWzEyXSA9IGRvdF9xdWFkX2FkZHIobmV0X3RvaykpID09IElOQUREUl9OT05FCistCSB8fCAobWFzayA9IGRvdF9xdWFkX2FkZHIobWFza190b2spKSA9PSBJTkFERFJfTk9ORSkKKy0JICAgIHJldHVybiAoTk8pOworLQlyZXR1cm4gKCgqKHVfaW50MzJfdCAqKSZhZGRyLnNpbjZfYWRkci5zNl9hZGRyWzEyXSAmIG1hc2spID09ICoodV9pbnQzMl90ICopJm5ldC5zaW42X2FkZHIuczZfYWRkclsxMl0pOworLSAgICB9CistCisgICAgIC8qIG1hdGNoIElQdjYgYWRkcmVzcyBhZ2FpbnN0IG5ldG51bWJlci9wcmVmaXhsZW4gKi8KKyAgICAgbGVuID0gc3RybGVuKG5ldF90b2spOworICAgICBpZiAoKm5ldF90b2sgIT0gJ1snIHx8IG5ldF90b2tbbGVuIC0gMV0gIT0gJ10nKQorZGlmZiAtdU4gdGNwX3dyYXBwZXJzXzcuNi9zb2NrZXQuYyB0Y3Bfd3JhcHBlcnNfNy42Lm5ldy9zb2NrZXQuYworLS0tIHRjcF93cmFwcGVyc183LjYvc29ja2V0LmMJTW9uIE1heSAyMCAxMzo0ODozNSAyMDAyCisrKysgdGNwX3dyYXBwZXJzXzcuNi5uZXcvc29ja2V0LmMJTW9uIE1heSAyMCAxNDoyMjoyNyAyMDAyCitAQCAtMjI4LDcgKzIyOCw3IEBACisgCWhpbnRzLmFpX2ZhbWlseSA9IHNpbi0+c2FfZmFtaWx5OworIAloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworIAloaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9DQU5PTk5BTUUgfCBBSV9OVU1FUklDSE9TVDsKKy0JaWYgKChlcnIgPSBnZXRhZGRyaW5mbyhob3N0LT5uYW1lLCBOVUxMLCAmaGludHMsICZyZXMwKSA9PSAwKSkgeworKwlpZiAoKGVyciA9IGdldGFkZHJpbmZvKGhvc3QtPm5hbWUsIE5VTEwsICZoaW50cywgJnJlczApKSA9PSAwKSB7CisgCSAgICBmcmVlYWRkcmluZm8ocmVzMCk7CisgCSAgICByZXMwID0gTlVMTDsKKyAJICAgIHRjcGRfd2FybigiaG9zdCBuYW1lL25hbWUgbWlzbWF0Y2g6ICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEyX21ha2VmaWxlX2NvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEyX21ha2VmaWxlX2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODI4OWU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTJfbWFrZWZpbGVfY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsODMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9NYWtlZmlsZSB0Y3Bfd3JhcHBlcnNfNy42L01ha2VmaWxlCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL01ha2VmaWxlCTIwMDMtMDgtMjEgMDE6NDM6MzkuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9NYWtlZmlsZQkyMDAzLTA4LTIxIDAxOjQzOjM1LjAwMDAwMDAwMCArMDIwMAorQEAgLTQ1LDcgKzQ1LDcgQEAKKyAjCisgIyBTeXNWLjQgU29sYXJpcyAyLnggT1NGIEFJWAorICNSRUFMX0RBRU1PTl9ESVI9L3Vzci9zYmluCistIworK1JFQUxfREFFTU9OX0RJUj0vdXNyL3NiaW4KKyAjIEJTRCA0LjQKKyAjUkVBTF9EQUVNT05fRElSPS91c3IvbGliZXhlYworICMKK0BAIC01MTIsNiArNTE5LDcgQEAKKyAjIChleGFtcGxlczogYWxsb3csIGRlbnksIGJhbm5lcnMsIHR3aXN0IGFuZCBzcGF3bikuCisgIyAKKyAjU1RZTEUJPSAtRFBST0NFU1NfT1BUSU9OUwkjIEVuYWJsZSBsYW5ndWFnZSBleHRlbnNpb25zLgorK1NUWUxFID0gLURQUk9DRVNTX09QVElPTlMKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIyBPcHRpb25hbDogQ2hhbmdpbmcgdGhlIGRlZmF1bHQgZGlzcG9zaXRpb24gb2YgbG9nZmlsZSByZWNvcmRzCitAQCAtNTM1LDYgKzU0Myw3IEBACisgIyBUaGUgTE9HX1hYWCBuYW1lcyBiZWxvdyBhcmUgdGFrZW4gZnJvbSB0aGUgL3Vzci9pbmNsdWRlL3N5c2xvZy5oIGZpbGUuCisgCisgRkFDSUxJVFk9IExPR19NQUlMCSMgTE9HX01BSUwgaXMgd2hhdCBtb3N0IHNlbmRtYWlsIGRhZW1vbnMgdXNlCisrRkFDSUxJVFk9IExPR19EQUVNT04KKyAKKyAjIFRoZSBzeXNsb2cgcHJpb3JpdHkgYXQgd2hpY2ggc3VjY2Vzc2Z1bCBjb25uZWN0aW9ucyBhcmUgbG9nZ2VkLgorIAorQEAgLTYzMSw2ICs2NDAsNyBAQAorICMgbG9va3VwcyBhbHRvZ2V0aGVyLCBzZWUgdGhlIG5leHQgc2VjdGlvbi4KKyAKKyBQQVJBTk9JRD0gLURQQVJBTk9JRAorK1BBUkFOT0lEPQorIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIE9wdGlvbmFsOiB0dXJuaW5nIG9mZiBob3N0bmFtZSBsb29rdXBzCitAQCAtNjQ0LDYgKzY1NCw3IEBACisgIyBtb2RlIChzZWUgcHJldmlvdXMgc2VjdGlvbikgYW5kIGNvbW1lbnQgb3V0IHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbi4KKyAKKyBIT1NUTkFNRT0gLURBTFdBWVNfSE9TVE5BTUUKKytIT1NUTkFNRT0KKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIE9wdGlvbmFsOiBUdXJuaW5nIG9uIGhvc3QgQUREUkVTUyBjaGVja2luZworQEAgLTY3MCw2ICs2ODEsNyBAQAorICMgU29sYXJpcyAyLngsIGFuZCBMaW51eC4gU2VlIHlvdXIgc3lzdGVtIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCisgIworICMgS0lMTF9PUFQ9IC1ES0lMTF9JUF9PUFRJT05TCisrS0lMTF9PUFQ9IC1ES0lMTF9JUF9PUFRJT05TCisgCisgIyMgRW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0BAIC02NzcsOSArNjg5LDEwIEBACisgIyBQcm90ZWN0aW9uIGFnYWluc3Qgd2VpcmQgc2hlbGxzIG9yIHdlaXJkIG1ha2UgcHJvZ3JhbXMuCisgCisgU0hFTEwJPSAvYmluL3NoCistLmMubzo7CSQoQ0MpICQoQ0ZMQUdTKSAtYyAkKi5jCisrLmMubzo7CSQoQ0MpICQoQ0ZMQUdTKSAtbyAkKi5vIC1jICQqLmMKKyAKKy1DRkxBR1MJPSAtTyAtREZBQ0lMSVRZPSQoRkFDSUxJVFkpICQoQUNDRVNTKSAkKFBBUkFOT0lEKSAkKE5FVEdST1VQKSBcCisrQ09QVFMJPSAtTzIgLWcKKytDRkxBR1MJPSAkKENPUFRTKSAtREZBQ0lMSVRZPSQoRkFDSUxJVFkpICQoQUNDRVNTKSAkKFBBUkFOT0lEKSAkKE5FVEdST1VQKSBcCisgCSQoQlVHUykgJChTWVNUWVBFKSAkKEFVVEgpICQoVU1BU0spIFwKKyAJLURSRUFMX0RBRU1PTl9ESVI9XCIkKFJFQUxfREFFTU9OX0RJUilcIiAkKFNUWUxFKSAkKEtJTExfT1BUKSBcCisgCS1EU0VWRVJJVFk9JChTRVZFUklUWSkgLURSRkM5MzFfVElNRU9VVD0kKFJGQzkzMV9USU1FT1VUKSBcCitAQCAtNzEyLDEwICs3MjUsMTEgQEAKKyAKKyBjb25maWctY2hlY2s6CisgCUBzZXQgK2U7IHRlc3QgLW4gIiQoUkVBTF9EQUVNT05fRElSKSIgfHwgeyBtYWtlOyBleGl0IDE7IH0KKy0JQHNldCArZTsgZWNobyAkKENGTEFHUykgPi90bXAvY2ZsYWdzLiQkJCQgOyBcCistCWlmIGNtcCBjZmxhZ3MgL3RtcC9jZmxhZ3MuJCQkJCA7IFwKKy0JdGhlbiBybSAvdG1wL2NmbGFncy4kJCQkIDsgXAorLQllbHNlIG12IC90bXAvY2ZsYWdzLiQkJCQgY2ZsYWdzIDsgXAorKwlAc2V0ICtlOyBlY2hvICQoQ0ZMQUdTKSA+Y2ZsYWdzLm5ldyA7IFwKKysJaWYgY21wIGNmbGFncyBjZmxhZ3MubmV3IDsgXAorKwl0aGVuIHJtIGNmbGFncy5uZXcgOyBcCisrCWVsc2UgbXYgY2ZsYWdzLm5ldyBjZmxhZ3MgOyBcCisgCWZpID4vZGV2L251bGwgMj4vZGV2L251bGwKKysJQGlmIFsgISAtZCBzaGFyZWQgXTsgdGhlbiBta2RpciBzaGFyZWQ7IGZpCisgCisgJChMSUIpOgkkKExJQl9PQkopCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xM19zaGxpYl93ZWFrc3ltLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTNfc2hsaWJfd2Vha3N5bS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDEzOTZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTNfc2hsaWJfd2Vha3N5bS5wYXRjaApAQCAtMCwwICsxLDI1NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL01ha2VmaWxlIHRjcF93cmFwcGVyc183LjYvTWFrZWZpbGUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvTWFrZWZpbGUJMjAwNC0wNS0wMiAxNTozNzo1OS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L01ha2VmaWxlCTIwMDQtMDUtMDIgMTU6MzE6MDkuMDAwMDAwMDAwICswMjAwCitAQCAtMTUwLDE1ICsxNTAsMTUgQEAKKyAKKyBsaW51eDoKKyAJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCistCUxJQlM9LWxuc2wgUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9IFwKKysJTElCUz0tbG5zbCBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj13ZWFrX3N5bWJvbHMubyBcCisgCU5FVEdST1VQPSItRE5FVEdST1VQIiBUTEk9IFZTWVNMT0c9IEJVR1M9IFwKKy0JRVhUUkFfQ0ZMQUdTPSItRFNZU19FUlJMSVNUX0RFRklORUQgLURIQVZFX1NUUkVSUk9SIC1ESU5FVDY9MSAtRHNzX2ZhbWlseT1fX3NzX2ZhbWlseSAtRHNzX2xlbj1fX3NzX2xlbiIgYWxsCisrCUVYVFJBX0NGTEFHUz0iLURTWVNfRVJSTElTVF9ERUZJTkVEIC1ESEFWRV9TVFJFUlJPUiAtREhBVkVfV0VBS1NZTVMgLURfUkVFTlRSQU5UIC1ESU5FVDY9MSAtRHNzX2ZhbWlseT1fX3NzX2ZhbWlseSAtRHNzX2xlbj1fX3NzX2xlbiIgYWxsCisgCisgZ251OgorIAlAbWFrZSBSRUFMX0RBRU1PTl9ESVI9JChSRUFMX0RBRU1PTl9ESVIpIFNUWUxFPSQoU1RZTEUpIFwKKy0JTElCUz0tbG5zbCBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj0gXAorKwlMSUJTPS1sbnNsIFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPXdlYWtfc3ltYm9scy5vIFwKKyAJTkVUR1JPVVA9LURORVRHUk9VUCBUTEk9IFZTWVNMT0c9IEJVR1M9IFwKKy0JRVhUUkFfQ0ZMQUdTPSItRFNZU19FUlJMSVNUX0RFRklORUQgLURIQVZFX1NUUkVSUk9SIiBhbGwKKysJRVhUUkFfQ0ZMQUdTPSItRFNZU19FUlJMSVNUX0RFRklORUQgLURIQVZFX1NUUkVSUk9SIC1ESEFWRV9XRUFLU1lNUyAtRF9SRUVOVFJBTlQiIGFsbAorIAorICMgVGhpcyBpcyBnb29kIGZvciBtYW55IFNZU1YrQlNEIGh5YnJpZHMgd2l0aCBOSVMsIHByb2JhYmx5IGFsc28gZm9yIEhQLVVYIDcueC4KKyBocHV4IGhwdXg4IGhwdXg5IGhwdXgxMDoKK0BAIC03MTMsNyArNzEzLDIyIEBACisgCisgTElCCT0gbGlid3JhcC5hCisgCistYWxsIG90aGVyOiBjb25maWctY2hlY2sgdGNwZCB0Y3BkbWF0Y2ggdHJ5LWZyb20gc2FmZV9maW5nZXIgdGNwZGNoaworK3NoYXJlZC8lLm86ICUuYworKwkkKENDKSAkKENGTEFHUykgJChTSENGTEFHUykgLWMgJDwgLW8gJEAKKysKKytTT01BSk9SID0gMAorK1NPTUlOT1IgPSA3LjYKKysKKytTSExJQgkJPSBzaGFyZWQvbGlid3JhcC5zby4kKFNPTUFKT1IpLiQoU09NSU5PUikKKytTSExJQlNPTUFKCT0gc2hhcmVkL2xpYndyYXAuc28uJChTT01BSk9SKQorK1NITElCU08JCT0gc2hhcmVkL2xpYndyYXAuc28KKytTSExJQkZMQUdTCT0gLUxzaGFyZWQgLWx3cmFwCisrCisrU0hMSU5LRkxBR1MgPSAtc2hhcmVkIC1YbGlua2VyIC1zb25hbWUgLVhsaW5rZXIgbGlid3JhcC5zby4kKFNPTUFKT1IpIC1sYyAkKExJQlMpCisrU0hDRkxBR1MgPSAtZlBJQyAtc2hhcmVkIC1EX1JFRU5UUkFOVAorK1NITElCX09CSj0gJChhZGRwcmVmaXggc2hhcmVkLywgJChMSUJfT0JKKSk7CisrCisrYWxsIG90aGVyOiBjb25maWctY2hlY2sgdGNwZCB0Y3BkbWF0Y2ggdHJ5LWZyb20gc2FmZV9maW5nZXIgdGNwZGNoayAkKExJQikKKyAKKyAjIEludmFsaWRhdGUgYWxsIG9iamVjdCBmaWxlcyB3aGVuIHRoZSBjb21waWxlciBvcHRpb25zIChDRkxBR1MpIGhhdmUgY2hhbmdlZC4KKyAKK0BAIC03MzEsMjcgKzc0NiwzMyBAQAorIAkkKEFSKSAkKEFSRkxBR1MpICQoTElCKSAkKExJQl9PQkopCisgCS0kKFJBTkxJQikgJChMSUIpCisgCistdGNwZDoJdGNwZC5vICQoTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgdGNwZC5vICQoTElCKSAkKExJQlMpCisrJChTSExJQik6ICQoU0hMSUJfT0JKKQorKwlybSAtZiAkKFNITElCKQorKwkkKENDKSAtbyAkKFNITElCKSAkKFNITElOS0ZMQUdTKSAkKFNITElCX09CSikKKysJbG4gLXNmICQobm90ZGlyICQoU0hMSUIpKSAkKFNITElCU09NQUopCisrCWxuIC1zZiAkKG5vdGRpciAkKFNITElCU09NQUopKSAkKFNITElCU08pCisrCisrdGNwZDoJdGNwZC5vICQoU0hMSUIpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCB0Y3BkLm8gJChTSExJQkZMQUdTKQorIAorIG1pc2NkOgltaXNjZC5vICQoTElCKQorIAkkKENDKSAkKENGTEFHUykgLW8gJEAgbWlzY2QubyAkKExJQikgJChMSUJTKQorIAorLXNhZmVfZmluZ2VyOiBzYWZlX2Zpbmdlci5vICQoTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgc2FmZV9maW5nZXIubyAkKExJQikgJChMSUJTKQorK3NhZmVfZmluZ2VyOiBzYWZlX2Zpbmdlci5vICQoU0hMSUIpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBzYWZlX2Zpbmdlci5vICQoU0hMSUJGTEFHUykKKyAKKyBUQ1BETUFUQ0hfT0JKID0gdGNwZG1hdGNoLm8gZmFrZWxvZy5vIGluZXRjZi5vIHNjYWZmb2xkLm8KKyAKKy10Y3BkbWF0Y2g6ICQoVENQRE1BVENIX09CSikgJChMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKFRDUERNQVRDSF9PQkopICQoTElCKSAkKExJQlMpCisrdGNwZG1hdGNoOiAkKFRDUERNQVRDSF9PQkopICQoU0hMSUIpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKFRDUERNQVRDSF9PQkopICQoU0hMSUJGTEFHUykKKyAKKy10cnktZnJvbTogdHJ5LWZyb20ubyBmYWtlbG9nLm8gJChMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCB0cnktZnJvbS5vIGZha2Vsb2cubyAkKExJQikgJChMSUJTKQorK3RyeS1mcm9tOiB0cnktZnJvbS5vIGZha2Vsb2cubyAkKFNITElCKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgdHJ5LWZyb20ubyBmYWtlbG9nLm8gJChTSExJQkZMQUdTKQorIAorIFRDUERDSEtfT0JKID0gdGNwZGNoay5vIGZha2Vsb2cubyBpbmV0Y2YubyBzY2FmZm9sZC5vCisgCistdGNwZGNoazogJChUQ1BEQ0hLX09CSikgJChMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKFRDUERDSEtfT0JKKSAkKExJQikgJChMSUJTKQorK3RjcGRjaGs6ICQoVENQRENIS19PQkopICQoU0hMSUIpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKFRDUERDSEtfT0JKKSAkKFNITElCRkxBR1MpCisgCisgc2hhcjoJJChLSVQpCisgCUBzaGFyICQoS0lUKQorQEAgLTc2Nyw3ICs3ODgsOSBAQAorIAorIGNsZWFuOgorIAlybSAtZiB0Y3BkIG1pc2NkIHNhZmVfZmluZ2VyIHRjcGRtYXRjaCB0Y3BkY2hrIHRyeS1mcm9tICouW29hXSBjb3JlIFwKKysJbGlid3JhcCouc28qIFwKKyAJY2ZsYWdzCisrCXJtIC1yZiBzaGFyZWQvCisgCisgdGlkeToJY2xlYW4KKyAJY2htb2QgLVIgYStyIC4KK0BAIC05MTMsNSArOTM2LDYgQEAKKyB1cGRhdGUubzogbXlzdGRhcmcuaAorIHVwZGF0ZS5vOiB0Y3BkLmgKKyB2ZnByaW50Zi5vOiBjZmxhZ3MKKyt3ZWFrX3N5bWJvbHMubzogdGNwZC5oCisgd29ya2Fyb3VuZHMubzogY2ZsYWdzCisgd29ya2Fyb3VuZHMubzogdGNwZC5oCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuaCB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuaAorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmgJMjAwNC0wNS0wMiAxNTozNzo1OS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuaAkyMDA0LTA1LTAyIDE1OjM3OjQ5LjAwMDAwMDAwMCArMDIwMAorQEAgLTQsNiArNCwxNSBAQAorICAgKiBBdXRob3I6IFdpZXRzZSBWZW5lbWEsIEVpbmRob3ZlbiBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3ksIFRoZSBOZXRoZXJsYW5kcy4KKyAgICovCisgCisrI2lmbmRlZiBfVENQV1JBUFBFUlNfVENQRF9ICisrI2RlZmluZSBfVENQV1JBUFBFUlNfVENQRF9ICisrCisrLyogTmVlZCBkZWZpbml0aW9ucyBvZiBzdHJ1Y3Qgc29ja2FkZHJfaW4gYW5kIEZJTEUuICovCisrI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysKKytfX0JFR0lOX0RFQ0xTCisrCisgLyogU3RydWN0dXJlIHRvIGRlc2NyaWJlIG9uZSBjb21tdW5pY2F0aW9ucyBlbmRwb2ludC4gKi8KKyAKKyAjZGVmaW5lIFNUUklOR19MRU5HVEgJMTI4CQkvKiBob3N0cywgdXNlcnMsIHByb2Nlc3NlcyAqLworQEAgLTI5LDEwICszOCwxMCBAQAorICAgICBjaGFyICAgIHBpZFsxMF07CQkJLyogYWNjZXNzIHZpYSBldmFsX3BpZChyZXF1ZXN0KSAqLworICAgICBzdHJ1Y3QgaG9zdF9pbmZvIGNsaWVudFsxXTsJCS8qIGNsaWVudCBlbmRwb2ludCBpbmZvICovCisgICAgIHN0cnVjdCBob3N0X2luZm8gc2VydmVyWzFdOwkJLyogc2VydmVyIGVuZHBvaW50IGluZm8gKi8KKy0gICAgdm9pZCAgKCpzaW5rKSAoKTsJCQkvKiBkYXRhZ3JhbSBzaW5rIGZ1bmN0aW9uIG9yIDAgKi8KKy0gICAgdm9pZCAgKCpob3N0bmFtZSkgKCk7CQkvKiBhZGRyZXNzIHRvIHByaW50YWJsZSBob3N0bmFtZSAqLworLSAgICB2b2lkICAoKmhvc3RhZGRyKSAoKTsJCS8qIGFkZHJlc3MgdG8gcHJpbnRhYmxlIGFkZHJlc3MgKi8KKy0gICAgdm9pZCAgKCpjbGVhbnVwKSAoKTsJCS8qIGNsZWFudXAgZnVuY3Rpb24gb3IgMCAqLworKyAgICB2b2lkICAoKnNpbmspIChpbnQpOwkJLyogZGF0YWdyYW0gc2luayBmdW5jdGlvbiBvciAwICovCisrICAgIHZvaWQgICgqaG9zdG5hbWUpIChzdHJ1Y3QgaG9zdF9pbmZvICopOyAvKiBhZGRyZXNzIHRvIHByaW50YWJsZSBob3N0bmFtZSAqLworKyAgICB2b2lkICAoKmhvc3RhZGRyKSAoc3RydWN0IGhvc3RfaW5mbyAqKTsgLyogYWRkcmVzcyB0byBwcmludGFibGUgYWRkcmVzcyAqLworKyAgICB2b2lkICAoKmNsZWFudXApIChzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOyAvKiBjbGVhbnVwIGZ1bmN0aW9uIG9yIDAgKi8KKyAgICAgc3RydWN0IG5ldGNvbmZpZyAqY29uZmlnOwkJLyogbmV0ZGlyIGhhbmRsZSAqLworIH07CisgCitAQCAtNzAsMjAgKzc5LDI3IEBACisgI2RlZmluZSBmcm9taG9zdCBzb2NrX2hvc3QJCS8qIG5vIFRMSSBzdXBwb3J0IG5lZWRlZCAqLworICNlbmRpZgorIAorLWV4dGVybiBpbnQgaG9zdHNfYWNjZXNzKCk7CQkvKiBhY2Nlc3MgY29udHJvbCAqLworLWV4dGVybiB2b2lkIHNoZWxsX2NtZCgpOwkJLyogZXhlY3V0ZSBzaGVsbCBjb21tYW5kICovCistZXh0ZXJuIGNoYXIgKnBlcmNlbnRfeCgpOwkJLyogZG8gJTxjaGFyPiBleHBhbnNpb24gKi8KKy1leHRlcm4gdm9pZCByZmM5MzEoKTsJCQkvKiBjbGllbnQgbmFtZSBmcm9tIFJGQyA5MzEgZGFlbW9uICovCistZXh0ZXJuIHZvaWQgY2xlYW5fZXhpdCgpOwkJLyogY2xlYW4gdXAgYW5kIGV4aXQgKi8KKy1leHRlcm4gdm9pZCByZWZ1c2UoKTsJCQkvKiBjbGVhbiB1cCBhbmQgZXhpdCAqLworLWV4dGVybiBjaGFyICp4Z2V0cygpOwkJCS8qIGZnZXRzKCkgb24gc3Rlcm9pZHMgKi8KKy1leHRlcm4gY2hhciAqc3BsaXRfYXQoKTsJCS8qIHN0cmNocigpIGFuZCBzcGxpdCAqLworLWV4dGVybiB1bnNpZ25lZCBsb25nIGRvdF9xdWFkX2FkZHIoKTsJLyogcmVzdHJpY3RlZCBpbmV0X2FkZHIoKSAqLworK2V4dGVybiBpbnQgaG9zdHNfYWNjZXNzKHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3QpOwkvKiBhY2Nlc3MgY29udHJvbCAqLworK2V4dGVybiB2b2lkIHNoZWxsX2NtZChjaGFyICopOwkJLyogZXhlY3V0ZSBzaGVsbCBjb21tYW5kICovCisrZXh0ZXJuIGNoYXIgKnBlcmNlbnRfeChjaGFyICosIGludCwgY2hhciAqLCBzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOworKwkJCQkJLyogZG8gJTxjaGFyPiBleHBhbnNpb24gKi8KKytleHRlcm4gdm9pZCByZmM5MzEoc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzb2NrYWRkciAqLCBjaGFyICopOworKwkJCQkJLyogY2xpZW50IG5hbWUgZnJvbSBSRkMgOTMxIGRhZW1vbiAqLworK2V4dGVybiB2b2lkIGNsZWFuX2V4aXQoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsJLyogY2xlYW4gdXAgYW5kIGV4aXQgKi8KKytleHRlcm4gdm9pZCByZWZ1c2Uoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsJLyogY2xlYW4gdXAgYW5kIGV4aXQgKi8KKytleHRlcm4gY2hhciAqeGdldHMoY2hhciAqLCBpbnQsIEZJTEUgKik7CS8qIGZnZXRzKCkgb24gc3Rlcm9pZHMgKi8KKytleHRlcm4gY2hhciAqc3BsaXRfYXQoY2hhciAqLCBpbnQpOwkJLyogc3RyY2hyKCkgYW5kIHNwbGl0ICovCisrZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZG90X3F1YWRfYWRkcihjaGFyICopOwkvKiByZXN0cmljdGVkIGluZXRfYWRkcigpICovCisgCisgLyogR2xvYmFsIHZhcmlhYmxlcy4gKi8KKyAKKysjaWZkZWYgSEFWRV9XRUFLU1lNUworK2V4dGVybiBpbnQgYWxsb3dfc2V2ZXJpdHkgX19hdHRyaWJ1dGVfXyAoKHdlYWspKTsgLyogZm9yIGNvbm5lY3Rpb24gbG9nZ2luZyAqLworK2V4dGVybiBpbnQgZGVueV9zZXZlcml0eSBfX2F0dHJpYnV0ZV9fICgod2VhaykpOyAvKiBmb3IgY29ubmVjdGlvbiBsb2dnaW5nICovCisrI2Vsc2UKKyBleHRlcm4gaW50IGFsbG93X3NldmVyaXR5OwkJLyogZm9yIGNvbm5lY3Rpb24gbG9nZ2luZyAqLworIGV4dGVybiBpbnQgZGVueV9zZXZlcml0eTsJCS8qIGZvciBjb25uZWN0aW9uIGxvZ2dpbmcgKi8KKysjZW5kaWYKKyBleHRlcm4gY2hhciAqaG9zdHNfYWxsb3dfdGFibGU7CQkvKiBmb3IgdmVyaWZpY2F0aW9uIG1vZGUgcmVkaXJlY3Rpb24gKi8KKyBleHRlcm4gY2hhciAqaG9zdHNfZGVueV90YWJsZTsJCS8qIGZvciB2ZXJpZmljYXRpb24gbW9kZSByZWRpcmVjdGlvbiAqLworIGV4dGVybiBpbnQgaG9zdHNfYWNjZXNzX3ZlcmJvc2U7CS8qIGZvciB2ZXJib3NlIG1hdGNoaW5nIG1vZGUgKi8KK0BAIC05OCw2ICsxMTQsOCBAQAorICNpZmRlZiBfX1NURENfXworIGV4dGVybiBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0X2luaXQoc3RydWN0IHJlcXVlc3RfaW5mbyAqLC4uLik7CisgZXh0ZXJuIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Rfc2V0KHN0cnVjdCByZXF1ZXN0X2luZm8gKiwuLi4pOworK2V4dGVybiBpbnQgaG9zdHNfY3RsKGNoYXIgKmRhZW1vbiwgY2hhciAqY2xpZW50X25hbWUsIGNoYXIgKmNsaWVudF9hZGRyLAorKwkJY2hhciAqY2xpZW50X3VzZXIpOworICNlbHNlCisgZXh0ZXJuIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3RfaW5pdCgpOwkvKiBpbml0aWFsaXplIHJlcXVlc3QgKi8KKyBleHRlcm4gc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdF9zZXQoKTsJLyogdXBkYXRlIHJlcXVlc3Qgc3RydWN0dXJlICovCitAQCAtMTIxLDIwICsxMzksMjMgQEAKKyAgICogaG9zdF9pbmZvIHN0cnVjdHVyZXMgc2VydmUgYXMgY2FjaGVzIGZvciB0aGUgbG9va3VwIHJlc3VsdHMuCisgICAqLworIAorLWV4dGVybiBjaGFyICpldmFsX3VzZXIoKTsJCS8qIGNsaWVudCB1c2VyICovCistZXh0ZXJuIGNoYXIgKmV2YWxfaG9zdG5hbWUoKTsJCS8qIHByaW50YWJsZSBob3N0bmFtZSAqLworLWV4dGVybiBjaGFyICpldmFsX2hvc3RhZGRyKCk7CQkvKiBwcmludGFibGUgaG9zdCBhZGRyZXNzICovCistZXh0ZXJuIGNoYXIgKmV2YWxfaG9zdGluZm8oKTsJCS8qIGhvc3QgbmFtZSBvciBhZGRyZXNzICovCistZXh0ZXJuIGNoYXIgKmV2YWxfY2xpZW50KCk7CQkvKiB3aGF0ZXZlciBpcyBhdmFpbGFibGUgKi8KKy1leHRlcm4gY2hhciAqZXZhbF9zZXJ2ZXIoKTsJCS8qIHdoYXRldmVyIGlzIGF2YWlsYWJsZSAqLworK2V4dGVybiBjaGFyICpldmFsX3VzZXIoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsJLyogY2xpZW50IHVzZXIgKi8KKytleHRlcm4gY2hhciAqZXZhbF9ob3N0bmFtZShzdHJ1Y3QgaG9zdF9pbmZvICopOwkvKiBwcmludGFibGUgaG9zdG5hbWUgKi8KKytleHRlcm4gY2hhciAqZXZhbF9ob3N0YWRkcihzdHJ1Y3QgaG9zdF9pbmZvICopOwkvKiBwcmludGFibGUgaG9zdCBhZGRyZXNzICovCisrZXh0ZXJuIGNoYXIgKmV2YWxfaG9zdGluZm8oc3RydWN0IGhvc3RfaW5mbyAqKTsJLyogaG9zdCBuYW1lIG9yIGFkZHJlc3MgKi8KKytleHRlcm4gY2hhciAqZXZhbF9jbGllbnQoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsvKiB3aGF0ZXZlciBpcyBhdmFpbGFibGUgKi8KKytleHRlcm4gY2hhciAqZXZhbF9zZXJ2ZXIoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsvKiB3aGF0ZXZlciBpcyBhdmFpbGFibGUgKi8KKyAjZGVmaW5lIGV2YWxfZGFlbW9uKHIpCSgociktPmRhZW1vbikJLyogZGFlbW9uIHByb2Nlc3MgbmFtZSAqLworICNkZWZpbmUgZXZhbF9waWQocikJKChyKS0+cGlkKQkvKiBwcm9jZXNzIGlkICovCisgCisgLyogU29ja2V0LXNwZWNpZmljIG1ldGhvZHMsIGluY2x1ZGluZyBETlMgaG9zdG5hbWUgbG9va3Vwcy4gKi8KKyAKKy1leHRlcm4gdm9pZCBzb2NrX2hvc3QoKTsJCS8qIGxvb2sgdXAgZW5kcG9pbnQgYWRkcmVzc2VzICovCistZXh0ZXJuIHZvaWQgc29ja19ob3N0bmFtZSgpOwkJLyogdHJhbnNsYXRlIGFkZHJlc3MgdG8gaG9zdG5hbWUgKi8KKy1leHRlcm4gdm9pZCBzb2NrX2hvc3RhZGRyKCk7CQkvKiBhZGRyZXNzIHRvIHByaW50YWJsZSBhZGRyZXNzICovCisrLyogbG9vayB1cCBlbmRwb2ludCBhZGRyZXNzZXMgKi8KKytleHRlcm4gdm9pZCBzb2NrX2hvc3Qoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsKKysvKiB0cmFuc2xhdGUgYWRkcmVzcyB0byBob3N0bmFtZSAqLworK2V4dGVybiB2b2lkIHNvY2tfaG9zdG5hbWUoc3RydWN0IGhvc3RfaW5mbyAqKTsKKysvKiBhZGRyZXNzIHRvIHByaW50YWJsZSBhZGRyZXNzICovCisrZXh0ZXJuIHZvaWQgc29ja19ob3N0YWRkcihzdHJ1Y3QgaG9zdF9pbmZvICopOworICNkZWZpbmUgc29ja19tZXRob2RzKHIpIFwKKyAJeyAociktPmhvc3RuYW1lID0gc29ja19ob3N0bmFtZTsgKHIpLT5ob3N0YWRkciA9IHNvY2tfaG9zdGFkZHI7IH0KKyAKK0BAIC0xODIsNyArMjAzLDcgQEAKKyAgICogYmVoYXZpb3IuCisgICAqLworIAorLWV4dGVybiB2b2lkIHByb2Nlc3Nfb3B0aW9ucygpOwkJLyogZXhlY3V0ZSBvcHRpb25zICovCisrZXh0ZXJuIHZvaWQgcHJvY2Vzc19vcHRpb25zKGNoYXIgKiwgc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsvKiBleGVjdXRlIG9wdGlvbnMgKi8KKyBleHRlcm4gaW50IGRyeV9ydW47CQkJLyogdmVyaWZpY2F0aW9uIGZsYWcgKi8KKyAKKyAvKiBCdWcgd29ya2Fyb3VuZHMuICovCitAQCAtMjIxLDMgKzI0Miw3IEBACisgI2RlZmluZSBzdHJ0b2sJbXlfc3RydG9rCisgZXh0ZXJuIGNoYXIgKm15X3N0cnRvaygpOworICNlbmRpZgorKworK19fRU5EX0RFQ0xTCisrCisrI2VuZGlmCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3dlYWtfc3ltYm9scy5jIHRjcF93cmFwcGVyc183LjYvd2Vha19zeW1ib2xzLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvd2Vha19zeW1ib2xzLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3dlYWtfc3ltYm9scy5jCTIwMDQtMDUtMDIgMTU6MzE6MDkuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDExIEBACisrIC8qCisrICAqIEAoIykgd2Vha19zeW1ib2xzLmggMS41IDk5LzEyLzI5IDIzOjUwCisrICAqIAorKyAgKiBBdXRob3I6IEFudGhvbnkgVG93bnMgPGFqdEBkZWJpYW4ub3JnPgorKyAgKi8KKysKKysjaWZkZWYgSEFWRV9XRUFLU1lNUworKyNpbmNsdWRlIDxzeXNsb2cuaD4KKytpbnQgZGVueV9zZXZlcml0eSA9IExPR19XQVJOSU5HOworK2ludCBhbGxvd19zZXZlcml0eSA9IFNFVkVSSVRZOyAKKysjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzE0X2NpZHJfc3VwcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzE0X2NpZHJfc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjU2ODVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTRfY2lkcl9zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41CTIwMDMtMDgtMjEgMDM6MTU6MzYuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQkyMDAzLTA4LTIxIDAzOjE1OjMxLjAwMDAwMDAwMCArMDIwMAorQEAgLTkwLDYgKzkwLDEwIEBACisgcGF0dGVybiBgMTMxLjE1NS43Mi4wLzI1NS4yNTUuMjU0LjBcJyBtYXRjaGVzIGV2ZXJ5IGFkZHJlc3MgaW4gdGhlCisgcmFuZ2UgYDEzMS4xNTUuNzIuMFwnIHRocm91Z2ggYDEzMS4xNTUuNzMuMjU1XCcuCisgLklQIFwoYnUKKytBbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBuLm4ubi5uL21tJyBpcyBpbnRlcnByZXRlZCBhcyBhCisrYG5ldC9tYXNrbGVuZ3RoJyBwYWlyLCB3aGVyZSBgbW0nIGlzIHRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgYDEnCisrYml0cyBpbiB0aGUgbmV0bWFzayBhcHBsaWVkIHRvIHRoZSBgbi5uLm4ubicgYWRkcmVzcy4KKysuSVAgXChidQorIEFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYFtuOm46bjpuOm46bjpuOm5dL21cJyBpcyBpbnRlcnByZXRlZCBhcyBhCisgYFtuZXRdL3ByZWZpeGxlblwnIHBhaXIuIEFuIElQdjYgaG9zdCBhZGRyZXNzIGlzIG1hdGNoZWQgaWYKKyBgcHJlZml4bGVuXCcgYml0cyBvZiBgbmV0XCcgaXMgZXF1YWwgdG8gdGhlIGBwcmVmaXhsZW5cJyBiaXRzIG9mIHRoZQorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuYyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy5jCTIwMDMtMDgtMjEgMDM6MTU6MzYuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYwkyMDAzLTA4LTIxIDAzOjA5OjMwLjAwMDAwMDAwMCArMDIwMAorQEAgLTQxNyw3ICs0MTcsOCBAQAorICAgICBpZiAoKGFkZHIgPSBkb3RfcXVhZF9hZGRyKHN0cmluZykpID09IElOQUREUl9OT05FKQorIAlyZXR1cm4gKE5PKTsKKyAgICAgaWYgKChuZXQgPSBkb3RfcXVhZF9hZGRyKG5ldF90b2spKSA9PSBJTkFERFJfTk9ORQorLQl8fCAobWFzayA9IGRvdF9xdWFkX2FkZHIobWFza190b2spKSA9PSBJTkFERFJfTk9ORSkgeworKwl8fCAoKG1hc2sgPSBkb3RfcXVhZF9hZGRyKG1hc2tfdG9rKSkgPT0gSU5BRERSX05PTkUKKysJICAgICYmIChtYXNrID0gY2lkcl9tYXNrX2FkZHIobWFza190b2spKSA9PSAwKSkgeworICNpZm5kZWYgSU5FVDYKKyAJdGNwZF93YXJuKCJiYWQgbmV0L21hc2sgZXhwcmVzc2lvbjogJXMvJXMiLCBuZXRfdG9rLCBtYXNrX3Rvayk7CisgI2VuZGlmCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL21pc2MuYyB0Y3Bfd3JhcHBlcnNfNy42L21pc2MuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9taXNjLmMJMjAwMy0wOC0yMSAwMzoxNTozNi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L21pc2MuYwkyMDAzLTA4LTIxIDAzOjA5OjMwLjAwMDAwMDAwMCArMDIwMAorQEAgLTEwNywzICsxMDcsMTcgQEAKKyAgICAgfQorICAgICByZXR1cm4gKHJ1bnMgPT0gNCA/IGluZXRfYWRkcihzdHIpIDogSU5BRERSX05PTkUpOworIH0KKysKKysvKiBjaWRyX21hc2tfYWRkciAtIGNvbnZlcnQgY2lkciBuZXRtYXNrIGxlbmd0aCB0byBpbnRlcm5hbCBmb3JtICovCisrCisrdW5zaWduZWQgbG9uZyBjaWRyX21hc2tfYWRkcihzdHIpCisrY2hhciAgICpzdHI7CisreworKyAgICBpbnQgICAgIG1hc2tiaXRzOworKworKyAgICBtYXNrYml0cyA9IGF0b2koc3RyKTsKKysgICAgaWYgKG1hc2tiaXRzIDwgMSB8fCBtYXNrYml0cyA+IDMyKQorKwlyZXR1cm4gKDApOworKyAgICByZXR1cm4gaHRvbmwoMHhGRkZGRkZGRiA8PCAoMzIgLSBtYXNrYml0cykpOworK30KKysKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay5jIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuYwkyMDAzLTA4LTIxIDAzOjE1OjM2LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay5jCTIwMDMtMDgtMjEgMDM6MDk6MzAuMDAwMDAwMDAwICswMjAwCitAQCAtNDk3LDEyICs0OTcsMTIgQEAKKyAJaW50IG1hc2tfbGVuOworIAorIAlpZiAoKGRvdF9xdWFkX2FkZHIocGF0KSA9PSBJTkFERFJfTk9ORQorLQkgICAgfHwgZG90X3F1YWRfYWRkcihtYXNrKSA9PSBJTkFERFJfTk9ORSkKKysJICAgIHx8IGRvdF9xdWFkX2FkZHIobWFzaykgPT0gSU5BRERSX05PTkUgJiYgY2lkcl9tYXNrX2FkZHIobWFzaykgPT0gMCkKKyAJICAgICYmICghaXNfaW5ldDZfYWRkcihwYXQpCisgCQl8fCAoKG1hc2tfbGVuID0gYXRvaShtYXNrKSkgPCAwIHx8IG1hc2tfbGVuID4gMTI4KSkpCisgI2Vsc2UKKyAJaWYgKGRvdF9xdWFkX2FkZHIocGF0KSA9PSBJTkFERFJfTk9ORQorLQkgICAgfHwgZG90X3F1YWRfYWRkcihtYXNrKSA9PSBJTkFERFJfTk9ORSkKKysJICAgIHx8IGRvdF9xdWFkX2FkZHIobWFzaykgPT0gSU5BRERSX05PTkUgJiYgY2lkcl9tYXNrX2FkZHIobWFzaykgPT0gMCkKKyAjZW5kaWYKKyAJICAgIHRjcGRfd2FybigiJXMvJXM6IGJhZCBuZXQvbWFzayBwYXR0ZXJuIiwgcGF0LCBtYXNrKTsKKyAgICAgfSBlbHNlIGlmIChTVFJfRVEocGF0LCAiRkFJTCIpKSB7CQkvKiBvYnNvbGV0ZSAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTVfbWF0Y2hfY2xhcmlmeS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzE1X21hdGNoX2NsYXJpZnkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NhNjg3NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzE1X21hdGNoX2NsYXJpZnkucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0yNSAxMjoxNzo1OS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMjUgMTI6MTc6NTMuMDAwMDAwMDAwICswMjAwCitAQCAtODksNiArODksOCBAQAorIGJpdHdpc2UgQU5EIG9mIHRoZSBhZGRyZXNzIGFuZCB0aGUgYG1hc2tcJy4gRm9yIGV4YW1wbGUsIHRoZSBuZXQvbWFzaworIHBhdHRlcm4gYDEzMS4xNTUuNzIuMC8yNTUuMjU1LjI1NC4wXCcgbWF0Y2hlcyBldmVyeSBhZGRyZXNzIGluIHRoZQorIHJhbmdlIGAxMzEuMTU1LjcyLjBcJyB0aHJvdWdoIGAxMzEuMTU1LjczLjI1NVwnLgorK2AyNTUuMjU1LjI1NS4yNTVcJyBpcyBub3QgYSB2YWxpZCBtYXNrIHZhbHVlLCBzbyBhIHNpbmdsZSBob3N0IGNhbiBiZQorK21hdGNoZWQganVzdCBieSBpdHMgSVAuCisgLklQIFwoYnUKKyBBbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBuLm4ubi5uL21tJyBpcyBpbnRlcnByZXRlZCBhcyBhCisgYG5ldC9tYXNrbGVuZ3RoJyBwYWlyLCB3aGVyZSBgbW0nIGlzIHRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgYDEnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9leHBhbmRfcmVtb3RlX3BvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9leHBhbmRfcmVtb3RlX3BvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4NzM3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L2V4cGFuZF9yZW1vdGVfcG9ydC5wYXRjaApAQCAtMCwwICsxLDczIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvZXZhbC5jIHRjcF93cmFwcGVyc183LjYvZXZhbC5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2V2YWwuYwkxOTk1LTAxLTMwIDE5OjUxOjQ2LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvZXZhbC5jCTIwMDQtMTEtMDQgMTM6NTk6MDEuMDAwMDAwMDAwICswMTAwCitAQCAtOTgsNiArOTgsMjggQEAKKyAgICAgfQorIH0KKyAKKysvKiBldmFsX3BvcnQgLSByZXR1cm4gc3RyaW5nIHdpdGggdGhlIHBvcnQgKi8KKytjaGFyICAgKmV2YWxfcG9ydChzYWRkcikKKysjaWZkZWYgSU5FVDYKKytzdHJ1Y3Qgc29ja2FkZHIgKnNhZGRyOworKyNlbHNlCisrc3RydWN0IHNvY2thZGRyX2luICpzYWRkcjsKKysjZW5kaWYKKyt7CisrICAgIHN0YXRpYyBjaGFyIHBvcnRbMTZdOworKyAgICBpZiAoc2FkZHIgIT0gMCkgeworKyAgICAgICAgc3ByaW50Zihwb3J0LCAiJXUiLAorKyNpZmRlZiBJTkVUNgorKyAgICAgICAgICAgIG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopc2FkZHIpLT5zaW5fcG9ydCkpOworKyNlbHNlCisrICAgICAgICAgICAgbnRvaHMoc2FkZHItPnNpbl9wb3J0KSk7CisrI2VuZGlmCisrICAgIH0gZWxzZSB7CisrCXN0cmNweShwb3J0LCAiMCIpOworKyAgICB9CisrICAgIHJldHVybiAocG9ydCk7CisrfQorKworIC8qIGV2YWxfY2xpZW50IC0gcmV0dXJuIHN0cmluZyB3aXRoIGFzIG11Y2ggYWJvdXQgdGhlIGNsaWVudCBhcyB3ZSBrbm93ICovCisgCisgY2hhciAgICpldmFsX2NsaWVudChyZXF1ZXN0KQorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41CTIwMDQtMTEtMDQgMTM6MTc6NDUuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQkyMDA0LTExLTA0IDEzOjU1OjMyLjAwMDAwMDAwMCArMDEwMAorQEAgLTE3NSw2ICsxNzUsOCBAQAorIHVuYXZhaWxhYmxlLgorIC5JUCAiJW4gKCVOKSIKKyBUaGUgY2xpZW50IChzZXJ2ZXIpIGhvc3QgbmFtZSAob3IgInVua25vd24iIG9yICJwYXJhbm9pZCIpLgorKy5JUCAiJXIgKCVSKSIKKytUaGUgY2xpZW50cyAoc2VydmVycykgcG9ydCBudW1iZXIgKG9yICIwIikuCisgLklQICVwCisgVGhlIGRhZW1vbiBwcm9jZXNzIGlkLgorIC5JUCAlcworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9wZXJjZW50X3guYyB0Y3Bfd3JhcHBlcnNfNy42L3BlcmNlbnRfeC5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3BlcmNlbnRfeC5jCTE5OTQtMTItMjggMTc6NDI6MzguMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9wZXJjZW50X3guYwkyMDA0LTExLTA0IDEzOjE5OjI5LjAwMDAwMDAwMCArMDEwMAorQEAgLTYzLDYgKzYzLDggQEAKKyAJCWNoID09ICduJyA/IGV2YWxfaG9zdG5hbWUocmVxdWVzdC0+Y2xpZW50KSA6CisgCQljaCA9PSAnTicgPyBldmFsX2hvc3RuYW1lKHJlcXVlc3QtPnNlcnZlcikgOgorIAkJY2ggPT0gJ3AnID8gZXZhbF9waWQocmVxdWVzdCkgOgorKwkJY2ggPT0gJ3InID8gZXZhbF9wb3J0KHJlcXVlc3QtPmNsaWVudC0+c2luKSA6CisrCQljaCA9PSAnUicgPyBldmFsX3BvcnQocmVxdWVzdC0+c2VydmVyLT5zaW4pIDoKKyAJCWNoID09ICdzJyA/IGV2YWxfc2VydmVyKHJlcXVlc3QpIDoKKyAJCWNoID09ICd1JyA/IGV2YWxfdXNlcihyZXF1ZXN0KSA6CisgCQljaCA9PSAnJScgPyAiJSIgOiAodGNwZF93YXJuKCJ1bnJlY29nbml6ZWQgJSUlYyIsIGNoKSwgIiIpOworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmggdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmgKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5oCTIwMDQtMTEtMDQgMTM6MTc6NDUuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmgJMjAwNC0xMS0wNCAxMzoxOToxMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNDUsNiArMTQ1LDExIEBACisgZXh0ZXJuIGNoYXIgKmV2YWxfaG9zdGluZm8oc3RydWN0IGhvc3RfaW5mbyAqKTsJLyogaG9zdCBuYW1lIG9yIGFkZHJlc3MgKi8KKyBleHRlcm4gY2hhciAqZXZhbF9jbGllbnQoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsvKiB3aGF0ZXZlciBpcyBhdmFpbGFibGUgKi8KKyBleHRlcm4gY2hhciAqZXZhbF9zZXJ2ZXIoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsvKiB3aGF0ZXZlciBpcyBhdmFpbGFibGUgKi8KKysjaWZkZWYgSU5FVDYKKytleHRlcm4gY2hhciAqZXZhbF9wb3J0KHN0cnVjdCBzb2NrYWRkciAqKTsKKysjZWxzZQorK2V4dGVybiBjaGFyICpldmFsX3BvcnQoc3RydWN0IHNvY2thZGRyX2luICopOworKyNlbmRpZgorICNkZWZpbmUgZXZhbF9kYWVtb24ocikJKChyKS0+ZGFlbW9uKQkvKiBkYWVtb24gcHJvY2VzcyBuYW1lICovCisgI2RlZmluZSBldmFsX3BpZChyKQkoKHIpLT5waWQpCS8qIHByb2Nlc3MgaWQgKi8KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L2hhdmVfc3RyZXJyb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9oYXZlX3N0cmVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzU1NGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9oYXZlX3N0cmVycm9yLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9wZXJjZW50X20uYyB0Y3Bfd3JhcHBlcnNfNy42L3BlcmNlbnRfbS5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3BlcmNlbnRfbS5jCTE5OTQtMTItMjggMTc6NDI6MzcuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9wZXJjZW50X20uYwkyMDAzLTA4LTIxIDAyOjQ1OjMxLjAwMDAwMDAwMCArMDIwMAorQEAgLTI5LDExICsyOSwxNSBAQAorIAorICAgICB3aGlsZSAoKmJwID0gKmNwKQorIAlpZiAoKmNwID09ICclJyAmJiBjcFsxXSA9PSAnbScpIHsKKysjaWZkZWYgSEFWRV9TVFJFUlJPUgorKwkgICAgc3RyY3B5KGJwLCBzdHJlcnJvcihlcnJubykpOworKyNlbHNlCisgCSAgICBpZiAoZXJybm8gPCBzeXNfbmVyciAmJiBlcnJubyA+IDApIHsKKyAJCXN0cmNweShicCwgc3lzX2Vycmxpc3RbZXJybm9dKTsKKyAJICAgIH0gZWxzZSB7CisgCQlzcHJpbnRmKGJwLCAiVW5rbm93biBlcnJvciAlZCIsIGVycm5vKTsKKyAJICAgIH0KKysjZW5kaWYKKyAJICAgIGJwICs9IHN0cmxlbihicCk7CisgCSAgICBjcCArPSAyOworIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvbGRmbGFncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhMjE0ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L2xkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogdGNwX3dyYXBwZXJzXzcuNi5vcmlnL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnLm9yaWcvTWFrZWZpbGUJMjAwOS0wNC0wNiAxMDo1NTo0Ny4wMDAwMDAwMDAgKzAwMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvTWFrZWZpbGUJMjAwOS0wNC0wNiAxMDo1NzowNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC03NDgsMzEgKzc0OCwzMSBAQAorIAorICQoU0hMSUIpOiAkKFNITElCX09CSikKKyAJcm0gLWYgJChTSExJQikKKy0JJChDQykgLW8gJChTSExJQikgJChTSExJTktGTEFHUykgJChTSExJQl9PQkopCisrCSQoQ0MpICQoTERGTEFHUykgLW8gJChTSExJQikgJChTSExJTktGTEFHUykgJChTSExJQl9PQkopCisgCWxuIC1zZiAkKG5vdGRpciAkKFNITElCKSkgJChTSExJQlNPTUFKKQorIAlsbiAtc2YgJChub3RkaXIgJChTSExJQlNPTUFKKSkgJChTSExJQlNPKQorIAorIHRjcGQ6CXRjcGQubyAkKFNITElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgdGNwZC5vICQoU0hMSUJGTEFHUykKKysJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgdGNwZC5vICQoU0hMSUJGTEFHUykKKyAKKyBtaXNjZDoJbWlzY2QubyAkKExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIG1pc2NkLm8gJChMSUIpICQoTElCUykKKysJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgbWlzY2QubyAkKExJQikgJChMSUJTKQorIAorIHNhZmVfZmluZ2VyOiBzYWZlX2Zpbmdlci5vICQoU0hMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBzYWZlX2Zpbmdlci5vICQoU0hMSUJGTEFHUykKKysJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgc2FmZV9maW5nZXIubyAkKFNITElCRkxBR1MpCisgCisgVENQRE1BVENIX09CSiA9IHRjcGRtYXRjaC5vIGZha2Vsb2cubyBpbmV0Y2YubyBzY2FmZm9sZC5vCisgCisgdGNwZG1hdGNoOiAkKFRDUERNQVRDSF9PQkopICQoU0hMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKFRDUERNQVRDSF9PQkopICQoU0hMSUJGTEFHUykKKysJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgJChUQ1BETUFUQ0hfT0JKKSAkKFNITElCRkxBR1MpCisgCisgdHJ5LWZyb206IHRyeS1mcm9tLm8gZmFrZWxvZy5vICQoU0hMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCB0cnktZnJvbS5vIGZha2Vsb2cubyAkKFNITElCRkxBR1MpCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRAIHRyeS1mcm9tLm8gZmFrZWxvZy5vICQoU0hMSUJGTEFHUykKKyAKKyBUQ1BEQ0hLX09CSiA9IHRjcGRjaGsubyBmYWtlbG9nLm8gaW5ldGNmLm8gc2NhZmZvbGQubworIAorIHRjcGRjaGs6ICQoVENQRENIS19PQkopICQoU0hMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKFRDUERDSEtfT0JKKSAkKFNITElCRkxBR1MpCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRAICQoVENQRENIS19PQkopICQoU0hMSUJGTEFHUykKKyAKKyBzaGFyOgkkKEtJVCkKKyAJQHNoYXIgJChLSVQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk3MzUyNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L21ha2VmaWxlLWZpeC1wYXJhbGxlbC5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGRhZjg5ZDI3MmU1MWIyMTUzMDE1Y2U3ZjU0YWIwYjg2MTgyZTY0YzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMjggSmFuIDIwMTUgMTg6NTA6MjMgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGU6IGZpeCBmb3IgcGFyYWxsZWwgYnVpbGQKKworRml4ZWQ6CittYWtlOiAqKiogTm8gcnVsZSB0byBtYWtlIHRhcmdldCBgY2ZsYWdzJywgbmVlZGVkIGJ5IGB0Y3BkLm8nLiAgU3RvcC4KKworTGV0ICJjZmxhZ3MiIGRlcGVuZCBvbiBjb25maWctY2hlY2sgd2hpY2ggZ2VuZXJhdGVzIGNmbGdhcyB3aWxsIGZpeCB0aGUKK3Byb2JsZW0uCisKK0Fsc28gZml4ZWQ6CitGYXRhbCBlcnJvcjogY2FuJ3QgY3JlYXRlIHNoYXJlZC9ob3N0c19hY2Nlc3MubzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZSB8ICAgIDUgKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCBmZTVlNzMyLi5mNDY4NzUxIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtNzE0LDYgKzcxNCw3IEBAIEtJVAk9IFJFQURNRSBtaXNjZC5jIHRjcGQuYyBmcm9taG9zdC5jIGhvc3RzX2FjY2Vzcy5jIHNoZWxsX2NtZC5jIFwKKyBMSUIJPSBsaWJ3cmFwLmEKKyAKKyBzaGFyZWQvJS5vOiAlLmMKKysJWyAtZCBzaGFyZWQgXSB8fCBta2RpciAtcCBzaGFyZWQKKyAJJChDQykgJChDRkxBR1MpICQoU0hDRkxBR1MpIC1jICQ8IC1vICRACisgCisgU09NQUpPUiA9IDAKK0BAIC03MzAsNiArNzMxLDggQEAgU0hMSUJfT0JKPSAkKGFkZHByZWZpeCBzaGFyZWQvLCAkKExJQl9PQkopKTsKKyAKKyBhbGwgb3RoZXI6IGNvbmZpZy1jaGVjayB0Y3BkIHRjcGRtYXRjaCB0cnktZnJvbSBzYWZlX2ZpbmdlciB0Y3BkY2hrICQoTElCKQorIAorK2NmbGFnczogY29uZmlnLWNoZWNrCisrCisgIyBJbnZhbGlkYXRlIGFsbCBvYmplY3QgZmlsZXMgd2hlbiB0aGUgY29tcGlsZXIgb3B0aW9ucyAoQ0ZMQUdTKSBoYXZlIGNoYW5nZWQuCisgCisgY29uZmlnLWNoZWNrOgorQEAgLTczOSw3ICs3NDIsNyBAQCBjb25maWctY2hlY2s6CisgCXRoZW4gcm0gY2ZsYWdzLm5ldyA7IFwKKyAJZWxzZSBtdiBjZmxhZ3MubmV3IGNmbGFncyA7IFwKKyAJZmkgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbAorLQlAaWYgWyAhIC1kIHNoYXJlZCBdOyB0aGVuIG1rZGlyIHNoYXJlZDsgZmkKKysJQFsgLWQgc2hhcmVkIF0gfHwgbWtkaXIgLXAgc2hhcmVkCisgCisgJChMSUIpOgkkKExJQl9PQkopCisgCXJtIC1mICQoTElCKQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L21hbl9mcm9taG9zdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L21hbl9mcm9taG9zdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWJkN2QzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvbWFuX2Zyb21ob3N0LnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuMyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy4zCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy4zCTIwMDQtMDQtMjUgMDA6MTA6NDguMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuMwkyMDA0LTA0LTI1IDAwOjA5OjM2LjAwMDAwMDAwMCArMDIwMAorQEAgLTE0LDYgKzE0LDkgQEAKKyBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0X3NldChyZXF1ZXN0LCBrZXksIHZhbHVlLCAuLi4sIDApCisgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyAKKyt2b2lkIGZyb21ob3N0KHJlcXVlc3QpCisrc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKysKKyBpbnQgaG9zdHNfYWNjZXNzKHJlcXVlc3QpCisgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyAKK0BAIC02MCw2ICs2Myw3IEBACisgaXMgYXZhaWxhYmxlLCBob3N0IG5hbWVzIGFuZCBjbGllbnQgdXNlciBuYW1lcyBhcmUgbG9va2VkIHVwIG9uIGRlbWFuZCwKKyB1c2luZyB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUgYXMgYSBjYWNoZS4gIGhvc3RzX2FjY2VzcygpIHJldHVybnMgemVybyBpZgorIGFjY2VzcyBzaG91bGQgYmUgZGVuaWVkLgorK2Zyb21ob3N0KCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGhvc3RzX2FjY2VzcygpLgorIC5QUAorIGhvc3RzX2N0bCgpIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIHJlcXVlc3RfaW5pdCgpIGFuZCBob3N0c19hY2Nlc3MoKQorIHJvdXRpbmVzIHdpdGggYSBwZXJoYXBzIG1vcmUgY29udmVuaWVudCBpbnRlcmZhY2UgKHRob3VnaCBpdCBkb2VzIG5vdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmVuYW1lX3N0cmluZ3NfdmFyaWFibGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZW5hbWVfc3RyaW5nc192YXJpYWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjUwNjAwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmVuYW1lX3N0cmluZ3NfdmFyaWFibGUucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorU1RSSU5HUyBuYW1lIGNvbmZsaWN0cyB3aXRoIHZhcmlhYmxlIGZvciBzdHJpbmdzIHRvb2xzIChlLmcuIGk1ODYtb2UtbGludXgtc3RyaW5ncykKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworLS0tIHRjcF93cmFwcGVyc183LjYvTWFrZWZpbGUub3JpZwkyMDEzLTA0LTE4IDIzOjQxOjU4LjI3Nzk4MTc0MCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvTWFrZWZpbGUJMjAxMy0wNC0xOCAyMzo0Mjo0Mi41MTM5Nzg5NjYgKzAyMDAKK0BAIC0zMDksNyArMzA5LDcgQEAKKyBweXJhbWlkOgorIAlAbWFrZSBSRUFMX0RBRU1PTl9ESVI9JChSRUFMX0RBRU1PTl9ESVIpIFNUWUxFPSQoU1RZTEUpIFwKKyAJTElCUz0gUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9ImVudmlyb24ubyB2ZnByaW50Zi5vIiBcCistCVNUUklOR1M9Ii1Ec3RyY2hyPWluZGV4IC1Ec3RycmNocj1yaW5kZXggLURtZW1jbXA9YmNtcCAtRG5vX21lbWNweSIgXAorKwlTVFJJTkdTX0ZMQUdTPSItRHN0cmNocj1pbmRleCAtRHN0cnJjaHI9cmluZGV4IC1EbWVtY21wPWJjbXAgLURub19tZW1jcHkiIFwKKyAJTkVUR1JPVVA9Ii1ETkVUR1JPVVAgLURVU0VfR0VURE9NQUlOIiBUTEk9IGFsbAorIAorICMgVW50ZXN0ZWQuCitAQCAtNDE5LDcgKzQxOSw3IEBACisgIyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBpZiB5b3VyIEMgbGlicmFyeSBkb2VzIG5vdCBwcm92aWRlIHRoZQorICMgc3RyY2hyL3N0cnJjaHIvbWVtY21wIHJvdXRpbmVzLCBidXQgY29tZXMgd2l0aCBpbmRleC9yaW5kZXgvYmNtcC4KKyAjCistI1NUUklOR1M9IC1Ec3RyY2hyPWluZGV4IC1Ec3RycmNocj1yaW5kZXggLURtZW1jbXA9YmNtcCAtRG5vX21lbWNweQorKyNTVFJJTkdTX0ZMQUdTPSAtRHN0cmNocj1pbmRleCAtRHN0cnJjaHI9cmluZGV4IC1EbWVtY21wPWJjbXAgLURub19tZW1jcHkKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMgU3lzdGVtIGRlcGVuZGVuY2llczogc2VsZWN0aW9uIG9mIG5vbi1kZWZhdWx0IG9iamVjdCBsaWJyYXJpZXMuCitAQCAtNjkwLDcgKzY5MCw3IEBACisgCSQoQlVHUykgJChTWVNUWVBFKSAkKEFVVEgpICQoVU1BU0spIFwKKyAJLURSRUFMX0RBRU1PTl9ESVI9XCIkKFJFQUxfREFFTU9OX0RJUilcIiAkKFNUWUxFKSAkKEtJTExfT1BUKSBcCisgCS1EU0VWRVJJVFk9JChTRVZFUklUWSkgLURSRkM5MzFfVElNRU9VVD0kKFJGQzkzMV9USU1FT1VUKSBcCistCSQoVUNIQVIpICQoVEFCTEVTKSAkKFNUUklOR1MpICQoVExJKSAkKEVYVFJBX0NGTEFHUykgJChET1QpIFwKKysJJChVQ0hBUikgJChUQUJMRVMpICQoU1RSSU5HU19GTEFHUykgJChUTEkpICQoRVhUUkFfQ0ZMQUdTKSAkKERPVCkgXAorIAkkKFZTWVNMT0cpICQoSE9TVE5BTUUpCisgCisgTElCX09CSj0gaG9zdHNfYWNjZXNzLm8gb3B0aW9ucy5vIHNoZWxsX2NtZC5vIHJmYzkzMS5vIGV2YWwubyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZXN0b3JlX3NpZ2FsYXJtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmVzdG9yZV9zaWdhbGFybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODc1YjgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmVzdG9yZV9zaWdhbGFybS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcmZjOTMxLmMgdGNwX3dyYXBwZXJzXzcuNi9yZmM5MzEuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9yZmM5MzEuYwkyMDA0LTA4LTI5IDE4OjQwOjA4LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvcmZjOTMxLmMJMjAwNC0wOC0yOSAxODo0MDowMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC05Miw2ICs5Miw4IEBACisgICAgIGNoYXIgICAqY3A7CisgICAgIGNoYXIgICAqcmVzdWx0ID0gdW5rbm93bjsKKyAgICAgRklMRSAgICpmcDsKKysgICAgdW5zaWduZWQgc2F2ZWRfdGltZW91dDsKKysgICAgc3RydWN0IHNpZ2FjdGlvbiBuYWN0LCBvYWN0OworIAorICNpZmRlZiBJTkVUNgorICAgICAvKiBhZGRyZXNzIGZhbWlseSBtdXN0IGJlIHRoZSBzYW1lICovCitAQCAtMTM0LDcgKzEzNiwxMiBAQAorIAkgKi8KKyAKKyAJaWYgKHNldGptcCh0aW1lYnVmKSA9PSAwKSB7CistCSAgICBzaWduYWwoU0lHQUxSTSwgdGltZW91dCk7CisrCSAgICAvKiBTYXZlIFNJR0FMUk0gdGltZXIgYW5kIGhhbmRsZXIuIFN1ZGhlZXIgQWJkdWwtU2FsYW0sIFNVTi4gKi8KKysJICAgIHNhdmVkX3RpbWVvdXQgPSBhbGFybSgwKTsKKysJICAgIG5hY3Quc2FfaGFuZGxlciA9IHRpbWVvdXQ7CisrCSAgICBuYWN0LnNhX2ZsYWdzID0gMDsKKysJICAgICh2b2lkKSBzaWdlbXB0eXNldCgmbmFjdC5zYV9tYXNrKTsKKysJICAgICh2b2lkKSBzaWdhY3Rpb24oU0lHQUxSTSwgJm5hY3QsICZvYWN0KTsKKyAJICAgIGFsYXJtKHJmYzkzMV90aW1lb3V0KTsKKyAKKyAJICAgIC8qCitAQCAtMjIzLDYgKzIzMCwxMCBAQAorIAkgICAgfQorIAkgICAgYWxhcm0oMCk7CisgCX0KKysJLyogUmVzdG9yZSBTSUdBTFJNIHRpbWVyIGFuZCBoYW5kbGVyLiBTdWRoZWVyIEFiZHVsLVNhbGFtLCBTVU4uICovCisrCSh2b2lkKSBzaWdhY3Rpb24oU0lHQUxSTSwgJm9hY3QsIE5VTEwpOworKwlpZiAoc2F2ZWRfdGltZW91dCA+IDApCisrCSAgICBhbGFybShzYXZlZF90aW1lb3V0KTsKKyAJZmNsb3NlKGZwKTsKKyAgICAgfQorICAgICBTVFJOX0NQWShkZXN0LCByZXN1bHQsIFNUUklOR19MRU5HVEgpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmZjOTMxLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZmM5MzEuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjNmNGYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmZjOTMxLmRpZmYKQEAgLTAsMCArMSw0MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy9zY2FmZm9sZC5jIHRjcF93cmFwcGVyc183LjYvc2NhZmZvbGQuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9zY2FmZm9sZC5jCTIwMDUtMDMtMDkgMTg6MjI6MDQuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9zY2FmZm9sZC5jCTIwMDUtMDMtMDkgMTg6MjA6NDcuMDAwMDAwMDAwICswMTAwCitAQCAtMjM3LDEwICsyMzcsMTcgQEAgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyAKKyAvKiBBUkdTVVNFRCAqLworIAorLXZvaWQgICAgcmZjOTMxKHJlcXVlc3QpCistc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyt2b2lkICAgIHJmYzkzMShybXRfc2luLCBvdXJfc2luLCBkZXN0KQorKyNpZmRlZiBJTkVUNgorK3N0cnVjdCBzb2NrYWRkciAqcm10X3NpbjsKKytzdHJ1Y3Qgc29ja2FkZHIgKm91cl9zaW47CisrI2Vsc2UKKytzdHJ1Y3Qgc29ja2FkZHJfaW4gKnJtdF9zaW47Cisrc3RydWN0IHNvY2thZGRyX2luICpvdXJfc2luOworKyNlbmRpZgorK2NoYXIgICAqZGVzdDsKKyB7CistICAgIHN0cmNweShyZXF1ZXN0LT51c2VyLCB1bmtub3duKTsKKysgICAgc3RyY3B5KGRlc3QsIHVua25vd24pOworIH0KKyAKKyAvKiBjaGVja19wYXRoIC0gZXhhbWluZSBhY2Nlc3NpYmlsaXR5ICovCitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmggdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmgKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5oCTIwMDUtMDMtMDkgMTg6MjI6MDQuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmgJMjAwNS0wMy0wOSAxODoyMToyMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC04Myw3ICs4MywxMSBAQCBleHRlcm4gaW50IGhvc3RzX2FjY2VzcyhzdHJ1Y3QgcmVxdWVzdF9pCisgZXh0ZXJuIHZvaWQgc2hlbGxfY21kKGNoYXIgKik7CQkvKiBleGVjdXRlIHNoZWxsIGNvbW1hbmQgKi8KKyBleHRlcm4gY2hhciAqcGVyY2VudF94KGNoYXIgKiwgaW50LCBjaGFyICosIHN0cnVjdCByZXF1ZXN0X2luZm8gKik7CisgCQkJCQkvKiBkbyAlPGNoYXI+IGV4cGFuc2lvbiAqLworKyNpZmRlZiBJTkVUNgorIGV4dGVybiB2b2lkIHJmYzkzMShzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2thZGRyICosIGNoYXIgKik7CisrI2Vsc2UKKytleHRlcm4gdm9pZCByZmM5MzEoc3RydWN0IHNvY2thZGRyX2luICosIHN0cnVjdCBzb2NrYWRkcl9pbiAqLCBjaGFyICopOworKyNlbmRpZgorIAkJCQkJLyogY2xpZW50IG5hbWUgZnJvbSBSRkMgOTMxIGRhZW1vbiAqLworIGV4dGVybiB2b2lkIGNsZWFuX2V4aXQoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsJLyogY2xlYW4gdXAgYW5kIGV4aXQgKi8KKyBleHRlcm4gdm9pZCByZWZ1c2Uoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsJLyogY2xlYW4gdXAgYW5kIGV4aXQgKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NhZmVfZmluZ2VyLjggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zYWZlX2Zpbmdlci44Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NTYxNmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zYWZlX2Zpbmdlci44CkBAIC0wLDAgKzEsMzQgQEAKKy5USCBTQUZFX0ZJTkdFUiA4ICIyMXRoIEp1bmUgMTk5NyIgTGludXggIkxpbnV4IFByb2dyYW1tZXIncyBNYW51YWwiCisuU0ggTkFNRQorc2FmZV9maW5nZXIgXC0gZmluZ2VyIGNsaWVudCB3cmFwcGVyIHRoYXQgcHJvdGVjdHMgYWdhaW5zdCBuYXN0eSBzdHVmZgorZnJvbSBmaW5nZXIgc2VydmVycworLlNIIFNZTk9QU0lTCisuQiBzYWZlX2ZpbmdlciBbZmluZ2VyX29wdGlvbnNdCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgc2FmZV9maW5nZXIKK2NvbW1hbmQgcHJvdGVjdHMgYWdhaW5zdCBuYXN0eSBzdHVmZiBmcm9tIGZpbmdlciBzZXJ2ZXJzLiBVc2UgdGhpcworcHJvZ3JhbSBmb3IgYXV0b21hdGljIHJldmVyc2UgZmluZ2VyIHByb2JlcyBmcm9tIHRoZQorLkIgdGNwX3dyYXBwZXIKKy5CICh0Y3BkKQorLCBub3QgdGhlIHJhdyBmaW5nZXIgY29tbWFuZC4gVGhlCisuQiBzYWZlX2ZpbmdlcgorY29tbWFuZCBtYWtlcyBzdXJlIHRoYXQgdGhlIGZpbmdlciBjbGllbnQgaXMgbm90IHJ1biB3aXRoIHJvb3QKK3ByaXZpbGVnZXMuIEl0IGFsc28gcnVucyB0aGUgZmluZ2VyIGNsaWVudCB3aXRoIGEgZGVmaW5lZCBQQVRICitlbnZpcm9ubWVudC4KKy5CIHNhZmVfZmluZ2VyCit3aWxsIGFsc28gcHJvdGVjdCB5b3UgZnJvbSBwcm9ibGVtcyBjYXVzZWQgYnkgdGhlIG91dHB1dCBvZiBzb21lCitmaW5nZXIgc2VydmVycy4gVGhlIHByb2JsZW06IHNvbWUgcHJvZ3JhbXMgbWF5IHJlYWN0IHRvIHN0dWZmIGluCit0aGUgZmlyc3QgY29sdW1uLiBPdGhlciBwcm9ncmFtcyBtYXkgZ2V0IHVwc2V0IGJ5IHRocmFzaCBhbnl3aGVyZQorb24gYSBsaW5lLiBGaWxlIHN5c3RlbXMgbWF5IGZpbGwgdXAgYXMgdGhlIGZpbmdlciBzZXJ2ZXIga2VlcHMKK3NlbmRpbmcgZGF0YS4gVGV4dCBlZGl0b3JzIG1heSBib21iIG91dCBvbiBleHRyZW1lbHkgbG9uZyBsaW5lcy4KK1RoZSBmaW5nZXIgc2VydmVyIG1heSB0YWtlIGZvcmV2ZXIgYmVjYXVzZSBpdCBpcyBzb21laG93IHdlZGdlZC4KKy5CIHNhZmVfZmluZ2VyCit0YWtlcyBjYXJlIG9mIGFsbCB0aGlzIGJhZG5lc3MuCisuU0ggU0VFIEFMU08KKy5CUiBob3N0c19hY2Nlc3MgKDUpLAorLkJSIGhvc3RzX29wdGlvbnMgKDUpLAorLkJSIHRjcGQgKDgpCisuU0ggQVVUSE9SCitXaWV0c2UgVmVuZW1hLCBFaW5kaG92ZW4gVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5LCBUaGUgTmV0aGVybGFuZHMuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NhZmVfZmluZ2VyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2FmZV9maW5nZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyYWZlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NhZmVfZmluZ2VyLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworLS0tIHRjcC13cmFwcGVycy03LjYtaXB2Ni4xLm9yaWcvc2FmZV9maW5nZXIuYworKysrIHRjcC13cmFwcGVycy03LjYtaXB2Ni4xL3NhZmVfZmluZ2VyLmMKK0BAIC0yNiwyMSArMjYsMjQgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8cHdkLmg+CisrI2luY2x1ZGUgPHN5c2xvZy5oPgorIAorIGV4dGVybiB2b2lkIGV4aXQoKTsKKyAKKyAvKiBMb2NhbCBzdHVmZiAqLworIAorLWNoYXIgICAgcGF0aFtdID0gIlBBVEg9L2JpbjovdXNyL2JpbjovdXNyL3VjYjovdXNyL2JzZDovZXRjOi91c3IvZXRjOi91c3Ivc2JpbiI7CisrY2hhciAgICBwYXRoW10gPSAiUEFUSD0vYmluOi91c3IvYmluOi9zYmluOi91c3Ivc2JpbiI7CisgCisgI2RlZmluZQlUSU1FX0xJTUlUCTYwCQkvKiBEbyBub3Qga2VlcCBsaXN0aW5naW5nIGZvcmV2ZXIgKi8KKyAjZGVmaW5lCUlOUFVUX0xFTkdUSAkxMDAwMDAJCS8qIERvIG5vdCBrZWVwIGxpc3RpbmdpbmcgZm9yZXZlciAqLworICNkZWZpbmUJTElORV9MRU5HVEgJMTI4CQkvKiBFZGl0b3JzIGNhbiBjaG9rZSBvbiBsb25nIGxpbmVzICovCisgI2RlZmluZQlGSU5HRVJfUFJPR1JBTQkiZmluZ2VyIgkvKiBNb3N0LCBpZiBub3QgYWxsLCBVTklYIHN5c3RlbXMgKi8KKyAjZGVmaW5lCVVOUFJJVl9OQU1FCSJub2JvZHkiCS8qIFByZWZlcnJlZCBwcml2aWxlZ2UgbGV2ZWwgKi8KKy0jZGVmaW5lCVVOUFJJVl9VR0lECTMyNzY3CQkvKiBEZWZhdWx0IHVpZCBhbmQgZ2lkICovCisrI2RlZmluZQlVTlBSSVZfVUdJRAk2NTUzNAkJLyogRGVmYXVsdCB1aWQgYW5kIGdpZCAqLworIAorIGludCAgICAgZmluZ2VyX3BpZDsKKytpbnQJYWxsb3dfc2V2ZXJpdHkgPSBTRVZFUklUWTsKKytpbnQJZGVueV9zZXZlcml0eSA9IExPR19XQVJOSU5HOworIAorIHZvaWQgICAgY2xlYW51cChzaWcpCisgaW50ICAgICBzaWc7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zaWdfZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2lnX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDdlYTA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2lnX2ZpeC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyogTW9uIEZlYiAxMCAyMDAzIEhhcmFsZCBIb3llciA8aGFyYWxkQHJlZGhhdC5kZT4gNy42LTI5CistIGFkZGVkIHNlY3VyaXR5IHBhdGNoIHRjcF93cmFwcGVycy03LjYtc2lnLnBhdGNoCisKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jLnNpZwkyMDAzLTAyLTEwIDE2OjE4OjMxLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMJMjAwMy0wMi0xMCAxNjo1MDozOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02Niw2ICs2Niw3IEBACisgCisgI2RlZmluZQlZRVMJCTEKKyAjZGVmaW5lCU5PCQkwCisrI2RlZmluZSBFUlIgICAgICAgICAgICAgLTEKKyAKKyAgLyoKKyAgICogVGhlc2UgdmFyaWFibGVzIGFyZSBnbG9iYWxseSB2aXNpYmxlIHNvIHRoYXQgdGhleSBjYW4gYmUgcmVkaXJlY3RlZCBpbgorQEAgLTEyOSw5ICsxMjksOSBAQAorIAlyZXR1cm4gKHZlcmRpY3QgPT0gQUNfUEVSTUlUKTsKKyAgICAgaWYgKHRhYmxlX21hdGNoKGhvc3RzX2FsbG93X3RhYmxlLCByZXF1ZXN0KSkKKyAJcmV0dXJuIChZRVMpOworLSAgICBpZiAodGFibGVfbWF0Y2goaG9zdHNfZGVueV90YWJsZSwgcmVxdWVzdCkpCistCXJldHVybiAoTk8pOworLSAgICByZXR1cm4gKFlFUyk7CisrICAgIGlmICh0YWJsZV9tYXRjaChob3N0c19kZW55X3RhYmxlLCByZXF1ZXN0KSA9PSBOTykKKysJcmV0dXJuIChZRVMpOworKyAgICByZXR1cm4gKE5PKTsKKyB9CisgCisgLyogdGFibGVfbWF0Y2ggLSBtYXRjaCB0YWJsZSBlbnRyaWVzIHdpdGggKGRhZW1vbiwgY2xpZW50KSBwYWlyICovCitAQCAtMTc1LDYgKzE3NSw3IEBACisgCSh2b2lkKSBmY2xvc2UoZnApOworICAgICB9IGVsc2UgaWYgKGVycm5vICE9IEVOT0VOVCkgeworIAl0Y3BkX3dhcm4oImNhbm5vdCBvcGVuICVzOiAlbSIsIHRhYmxlKTsKKysJbWF0Y2ggPSBFUlI7CisgICAgIH0KKyAgICAgaWYgKG1hdGNoKSB7CisgCWlmIChob3N0c19hY2Nlc3NfdmVyYm9zZSA+IDEpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zaWdsb25nam1wLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2lnbG9uZ2ptcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmRkNjM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2lnbG9uZ2ptcC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3JmYzkzMS5jIHRjcF93cmFwcGVyc183LjYvcmZjOTMxLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcmZjOTMxLmMJMjAwNC0wOC0yOSAxODo0MjoyNS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3JmYzkzMS5jCTIwMDQtMDgtMjkgMTg6NDE6MDQuMDAwMDAwMDAwICswMjAwCitAQCAtMzMsNyArMzMsNyBAQCBzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpIHJmYzkzMS5jIDEuCisgCisgaW50ICAgICByZmM5MzFfdGltZW91dCA9IFJGQzkzMV9USU1FT1VUOy8qIEdsb2JhbCBzbyBpdCBjYW4gYmUgY2hhbmdlZCAqLworIAorLXN0YXRpYyBqbXBfYnVmIHRpbWVidWY7Cisrc3RhdGljIHNpZ2ptcF9idWYgdGltZWJ1ZjsKKyAKKyAvKiBmc29ja2V0IC0gb3BlbiBzdGRpbyBzdHJlYW0gb24gdG9wIG9mIHNvY2tldCAqLworIAorQEAgLTYyLDcgKzYyLDcgQEAgaW50ICAgICBwcm90b2NvbDsKKyBzdGF0aWMgdm9pZCB0aW1lb3V0KHNpZykKKyBpbnQgICAgIHNpZzsKKyB7CistICAgIGxvbmdqbXAodGltZWJ1Ziwgc2lnKTsKKysgICAgc2lnbG9uZ2ptcCh0aW1lYnVmLCBzaWcpOworIH0KKyAKKyAvKiByZmM5MzEgLSByZXR1cm4gcmVtb3RlIHVzZXIgbmFtZSwgZ2l2ZW4gc29ja2V0IHN0cnVjdHVyZXMgKi8KK0BAIC0xMzUsNyArMTM1LDcgQEAgY2hhciAgICpkZXN0OworIAkgKiBTZXQgdXAgYSB0aW1lciBzbyB3ZSB3b24ndCBnZXQgc3R1Y2sgd2hpbGUgd2FpdGluZyBmb3IgdGhlIHNlcnZlci4KKyAJICovCisgCistCWlmIChzZXRqbXAodGltZWJ1ZikgPT0gMCkgeworKwlpZiAoc2lnc2V0am1wKHRpbWVidWYsIDApID09IDApIHsKKyAJICAgIC8qIFNhdmUgU0lHQUxSTSB0aW1lciBhbmQgaGFuZGxlci4gU3VkaGVlciBBYmR1bC1TYWxhbSwgU1VOLiAqLworIAkgICAgc2F2ZWRfdGltZW91dCA9IGFsYXJtKDApOworIAkgICAgbmFjdC5zYV9oYW5kbGVyID0gdGltZW91dDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NvY2tsZW5fdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NvY2tsZW5fdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTQ2ZGY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc29ja2xlbl90LnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK2NvbW1pdCA4OGI2OTg0ZWYwYmYzYjcwM2MxYzg1MTA5MjY2MmI5NWU5MWRiMWZmCitBdXRob3I6IGZhcnJhaCByYXNoaWQgPGZhcnJhaC5yYXNoaWRAd2luZHJpdmVyLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiAxMiAwOTo1Mzo1MCAyMDEzIC0wNTAwCisKKyAgICB0Y3Atd3JhcHBlcnMgU3VwcG9ydCBmb3IgYnVpbGRpbmcgd2l0aCBnbGliYworICAgIAorICAgIEFkZGVkIHN1cHBvcnQgZm9yIHNvY2tsZW5fdCB0eXBlIHRvIGxlbiBhcmd1bWVudCBwYXNzZWQgdG8gc29ja2V0IHJlbGF0ZWQKKyAgICBjYWxscy4gVGhpcyBmaXhlcyBhIGJ1ZyB0aGF0IGNhdXNlcyB0Y3Agd3JhcHBlcnMgdG8gZmFpbCB3aGVuIHVzaW5nIHNzaGQuCisgICAgCisgICAgVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogZmFycmFoIHJhc2hpZCA8ZmFycmFoLnJhc2hpZEB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvZml4X29wdGlvbnMuYyBiL2ZpeF9vcHRpb25zLmMKK2luZGV4IDc0NzNhZGYuLmZlMmI0NDIgMTAwNjQ0CistLS0gYS9maXhfb3B0aW9ucy5jCisrKysgYi9maXhfb3B0aW9ucy5jCitAQCAtMzgsNyArMzgsMTIgQEAgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyAjaWZkZWYgSVBfT1BUSU9OUworICAgICB1bnNpZ25lZCBjaGFyIG9wdGJ1ZltCVUZGRVJfU0laRSAvIDNdLCAqY3A7CisgICAgIGNoYXIgICAgbGJ1ZltCVUZGRVJfU0laRV0sICpscDsKKy0gICAgaW50ICAgICBvcHRzaXplID0gc2l6ZW9mKG9wdGJ1ZiksIGlwcHJvdG87CisrI2lmZGVmIF9fR0xJQkNfXworKyAgICBzb2NrbGVuX3QgIG9wdHNpemUgPSBzaXplb2Yob3B0YnVmKTsKKysjZWxzZQorKyAgICBpbnQgICAgIG9wdHNpemUgPSBzaXplb2Yob3B0YnVmKTsKKysjZW5kaWYKKysgICAgaW50IGlwcHJvdG87CisgICAgIHN0cnVjdCBwcm90b2VudCAqaXA7CisgICAgIGludCAgICAgZmQgPSByZXF1ZXN0LT5mZDsKKyAgICAgdW5zaWduZWQgaW50IG9wdDsKK2RpZmYgLS1naXQgYS9zb2NrZXQuYyBiL3NvY2tldC5jCitpbmRleCA0YjJjNTc1Li5hMGQyOTg3IDEwMDY0NAorLS0tIGEvc29ja2V0LmMKKysrKyBiL3NvY2tldC5jCitAQCAtOTUsNyArOTUsMTEgQEAgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyAgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBjbGllbnQ7CisgICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyOworICNlbmRpZgorKyNpZmRlZiBfX0dMSUJDX18KKysgICAgc29ja2xlbl90ICBsZW47CisrI2Vsc2UKKyAgICAgaW50ICAgICBsZW47CisrI2VuZGlmCisgICAgIGNoYXIgICAgYnVmW0JVRlNJWl07CisgICAgIGludCAgICAgZmQgPSByZXF1ZXN0LT5mZDsKKyAKK0BAIC00MjYsNyArNDMwLDExIEBAIGludCAgICAgZmQ7CisgI2Vsc2UKKyAgICAgc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKyAjZW5kaWYKKysjaWZkZWYgX19HTElCQ19fCisrICAgIHNvY2tsZW5fdCAgc2l6ZSA9IHNpemVvZihzaW4pOworKyNlbHNlCisgICAgIGludCAgICAgc2l6ZSA9IHNpemVvZihzaW4pOworKyNlbmRpZgorIAorICAgICAvKgorICAgICAgKiBFYXQgdXAgdGhlIG5vdC15ZXQgcmVjZWl2ZWQgZGF0YWdyYW0uIFNvbWUgc3lzdGVtcyBpbnNpc3Qgb24gYQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvdGNwZGNoa19saWJ3cmFwcGVkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvdGNwZGNoa19saWJ3cmFwcGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjliZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi90Y3BkY2hrX2xpYndyYXBwZWQucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuYyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkY2hrLmMJMjAwMy0wOC0yMSAwMjo1MDozNy4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuYwkyMDAzLTA4LTIxIDAyOjUwOjMzLjAwMDAwMDAwMCArMDIwMAorQEAgLTUzLDYgKzUzLDI0IEBACisgI2luY2x1ZGUgImluZXRjZi5oIgorICNpbmNsdWRlICJzY2FmZm9sZC5oIgorIAorKy8qIGxpc3Qgb2YgcHJvZ3JhbXMgd2hpY2ggYXJlIGtub3duIHRvIGJlIGxpbmtlZCB3aXRoIGxpYndyYXAgaW4gZGViaWFuICovCisrc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGxpYndyYXBfcHJvZ3JhbXNbXSA9IHsKKysgICAgInBvcnRtYXAiLCAibW91bnRkIiwgInN0YXRkIiwgInVnaWRkIiwKKysgICAgInJlZGlyIiwgInJsaW5ldGQiLAorKyAgICAic3NoZCIsCisrICAgICJhdGZ0cGQiLAorKyAgICAiZGlhbGQiLAorKyAgICAiZXNvdW5kIiwKKysgICAgImdkbSIsICJnbm9tZS1zZXNzaW9uIiwKKysgICAgImljZWNhc3QiLCAiaWNlY2FzdF9hZG1pbiIsICJpY2VjYXN0X2NsaWVudCIsICJpY2VjYXN0X3NvdXJjZSIsCisrICAgICJteXNxbGQiLAorKyAgICAibnRvcCIsCisrICAgICJwcHRwZCIsCisrICAgICJycXVvdGFkIiwKKysgICAgInNlbmRtYWlsIiwgInNtYWlsIiwKKysgICAgTlVMTAorK307CisrCisgIC8qCisgICAqIFN0b2xlbiBmcm9tIGhvc3RzX2FjY2Vzcy5jLi4uCisgICAqLworQEAgLTE0Nyw4ICsxNjUsOCBAQAorICAgICAvKgorICAgICAgKiBUaGVzZSBhcmUgbm90IHJ1biBmcm9tIGluZXRkIGJ1dCBtYXkgaGF2ZSBidWlsdC1pbiBhY2Nlc3MgY29udHJvbC4KKyAgICAgICovCistICAgIGluZXRfc2V0KCJwb3J0bWFwIiwgV1JfTk9UKTsKKy0gICAgaW5ldF9zZXQoInJwY2JpbmQiLCBXUl9OT1QpOworKyAgICBmb3IgKGMgPSAwOyBsaWJ3cmFwX3Byb2dyYW1zW2NdOyBjKyspCisrCWluZXRfc2V0KGxpYndyYXBfcHJvZ3JhbXNbY10sIFdSX1lFUyk7CisgCisgICAgIC8qCisgICAgICAqIENoZWNrIGFjY2Vzc2liaWxpdHkgb2YgYWNjZXNzIGNvbnRyb2wgZmlsZXMuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi90cnktZnJvbS44IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvdHJ5LWZyb20uOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzhmMzA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvdHJ5LWZyb20uOApAQCAtMCwwICsxLDI4IEBACisuVEggVFJZLUZST00gOCAiMjF0aCBKdW5lIDE5OTciIExpbnV4ICJMaW51eCBQcm9ncmFtbWVyJ3MgTWFudWFsIgorLlNIIE5BTUUKK3RyeS1mcm9tIFwtIHRlc3QgcHJvZ3JhbSBmb3IgdGhlIHRjcF93cmFwcGVyCisuU0ggU1lOT1BTSVMKKy5CIHRyeS1mcm9tCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgdHJ5LWZyb20KK2NvbW1hbmQgY2FuIGJlIGNhbGxlZCB2aWEgYSByZW1vdGUgc2hlbGwgY29tbWFuZCB0byBmaW5kIG91dAoraWYgdGhlIGhvc3RuYW1lIGFuZCBhZGRyZXNzIGFyZSBwcm9wZXJseSByZWNvZ25pemVkCitieSB0aGUKKy5CIHRjcF93cmFwcGVyCitsaWJyYXJ5LCBpZiB1c2VybmFtZSBsb29rdXAgd29ya3MsIGFuZCAoU3lzViBvbmx5KSBpZiB0aGUgVExJCitvbiB0b3Agb2YgSVAgaGV1cmlzdGljcyB3b3JrLiBEaWFnbm9zdGljcyBhcmUgcmVwb3J0ZWQgdGhyb3VnaAorLkJSIHN5c2xvZyAoMykKK2FuZCByZWRpcmVjdGVkIHRvIHN0ZGVyci4KKworRXhhbXBsZToKKworcnNoIGhvc3QgL3NvbWUvd2hlcmUvdHJ5LWZyb20KKworLlNIIFNFRSBBTFNPCisuQlIgaG9zdHNfYWNjZXNzICg1KSwKKy5CUiBob3N0c19vcHRpb25zICg1KSwKKy5CUiB0Y3BkICg4KQorLlNIIEFVVEhPUgorV2lldHNlIFZlbmVtYSwgRWluZGhvdmVuIFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neSwgVGhlIE5ldGhlcmxhbmRzLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzXzcuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnNfNy42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MzA0NzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzXzcuNi5iYgpAQCAtMCwwICsxLDEyOCBAQAorU1VNTUFSWSA9ICJTZWN1cml0eSB0b29sIHRoYXQgaXMgYSB3cmFwcGVyIGZvciBUQ1AgZGFlbW9ucyIKK0RFU0NSSVBUSU9OID0gIlRvb2xzIGZvciBtb25pdG9yaW5nIGFuZCBmaWx0ZXJpbmcgaW5jb21pbmcgcmVxdWVzdHMgZm9yIHRjcCBcCisgICAgICAgICAgICAgICBzZXJ2aWNlcy4iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9ESVNDTEFJTUVSO21kNT0wNzFiZDY5Y2I3OGIxODg4OGVhNWUzZGE1YzMxMjdmYSIKK1BSID0icjEwIgorCisKK1BBQ0tBR0VTID0gIiR7UE59LWRiZyBsaWJ3cmFwIGxpYndyYXAtZG9jIGxpYndyYXAtZGV2IGxpYndyYXAtc3RhdGljZGV2ICR7UE59ICR7UE59LWRvYyIKK0ZJTEVTX2xpYndyYXAgPSAiJHtiYXNlX2xpYmRpcn0vbGliKiR7U09MSUJTfSIKK0ZJTEVTX2xpYndyYXAtZG9jID0gIiR7bWFuZGlyfS9tYW4zICR7bWFuZGlyfS9tYW41IgorRklMRVNfbGlid3JhcC1kZXYgPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU0RFVn0gJHtpbmNsdWRlZGlyfSIKK0ZJTEVTX2xpYndyYXAtc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWIqLmEiCitGSUxFU18ke1BOfSA9ICIke3NiaW5kaXJ9IgorRklMRVNfJHtQTn0tZG9jID0gIiR7bWFuZGlyfS9tYW44IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5wb3JjdXBpbmUub3JnL3B1Yi9zZWN1cml0eS90Y3Bfd3JhcHBlcnNfJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwX21hbl9xdW90aW5nLmRpZmYgXAorICAgICAgICAgICBmaWxlOi8vMDFfbWFuX3BvcnRhYmlsaXR5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzA1X3dpbGRjYXJkX21hdGNoaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzA2X2ZpeF9nZXRob3N0YnluYW1lLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzEwX3VzYWdpLWlwdjYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMTFfdGNwZF9ibGFja2xpc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMTFfdXNhZ2lfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzEyX21ha2VmaWxlX2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8xM19zaGxpYl93ZWFrc3ltLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzE0X2NpZHJfc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8xNV9tYXRjaF9jbGFyaWZ5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2V4cGFuZF9yZW1vdGVfcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9oYXZlX3N0cmVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbl9mcm9taG9zdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZXN0b3JlX3NpZ2FsYXJtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JmYzkzMS5kaWZmIFwKKyAgICAgICAgICAgZmlsZTovL3NhZmVfZmluZ2VyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NpZ19maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2lnbG9uZ2ptcC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zb2NrbGVuX3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGNwZGNoa19saWJ3cmFwcGVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xkZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVuYW1lX3N0cmluZ3NfdmFyaWFibGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdHJ5LWZyb20uOCBcCisgICAgICAgICAgIGZpbGU6Ly9zYWZlX2Zpbmdlci44IFwKKyAgICAgICAgICAgZmlsZTovL21ha2VmaWxlLWZpeC1wYXJhbGxlbC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImU2ZmEyNWY3MTIyNmQwOTBmMzRkZTNmNmIxMjJmYjVhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk1NDNkN2FkZWRmNzhhNmRlMGIyMjFjY2JiZDE5NTJlMDhiNTEzODcxN2Y0YWRlODE0MDM5YmI0ODlhNDMxNWQiCisKK1MgPSAiJHtXT1JLRElSfS90Y3Bfd3JhcHBlcnNfJHtQVn0iCisKK0VYVFJBX09FTUFLRSA9ICInQ0M9JHtDQ30nIFwKKyAgICAgICAgICAgICAgICAnQVI9JHtBUn0nIFwKKyAgICAgICAgICAgICAgICAnUkFOTElCPSR7UkFOTElCfScgXAorICAgICAgICAgICAgICAgICdSRUFMX0RBRU1PTl9ESVI9JHtzYmluZGlyfScgXAorICAgICAgICAgICAgICAgICdTVFlMRT0tRFBST0NFU1NfT1BUSU9OUycgXAorICAgICAgICAgICAgICAgICdGQUNJTElUWT1MT0dfREFFTU9OJyBcCisgICAgICAgICAgICAgICAgJ1NFVkVSSVRZPUxPR19JTkZPJyBcCisgICAgICAgICAgICAgICAgJ0JVR1M9JyBcCisgICAgICAgICAgICAgICAgJ1ZTWVNMT0c9JyBcCisgICAgICAgICAgICAgICAgJ1JGQzkzMV9USU1FT1VUPTEwJyBcCisgICAgICAgICAgICAgICAgJ0FDQ0VTUz0tREhPU1RTX0FDQ0VTUycgXAorICAgICAgICAgICAgICAgICdLSUxMX09QVD0tREtJTExfSVBfT1BUSU9OUycgXAorICAgICAgICAgICAgICAgICdVTUFTSz0tRERBRU1PTl9VTUFTSz0wMjInIFwKKyAgICAgICAgICAgICAgICAnTkVUR1JPVVA9JHtFWFRSQV9PRU1BS0VfTkVUR1JPVVB9JyBcCisgICAgICAgICAgICAgICAgJ0xJQlM9LWxuc2wnIFwKKyAgICAgICAgICAgICAgICAnQVJGTEFHUz1ydicgXAorICAgICAgICAgICAgICAgICdBVVhfT0JKPXdlYWtfc3ltYm9scy5vJyBcCisgICAgICAgICAgICAgICAgJ1RMST0nIFwKKyAgICAgICAgICAgICAgICAnQ09QVFM9JyBcCisgICAgICAgICAgICAgICAgJ0VYVFJBX0NGTEFHUz0ke0NGTEFHU30gLURTWVNfRVJSTElTVF9ERUZJTkVEIC1ESEFWRV9TVFJFUlJPUiAtREhBVkVfV0VBS1NZTVMgLURfUkVFTlRSQU5UIC1ESU5FVDY9MSAtRHNzX2ZhbWlseT1fX3NzX2ZhbWlseSAtRHNzX2xlbj1fX3NzX2xlbiciCisKK0VYVFJBX09FTUFLRV9ORVRHUk9VUCA9ICItRE5FVEdST1VQIC1EVVNFX0dFVERPTUFJTiIKK0VYVFJBX09FTUFLRV9ORVRHUk9VUF9saWJjLXVjbGliYyA9ICItRFVTRV9HRVRET01BSU4iCisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UgJ1RBQkxFUz0tREhPU1RTX0RFTlk9XCIke3N5c2NvbmZkaXJ9L2hvc3RzLmRlbnlcIiAtREhPU1RTX0FMTE9XPVwiJHtzeXNjb25mZGlyfS9ob3N0cy5hbGxvd1wiJyBcCisJCSAgIGFsbAorfQorCitCSU5TID0gInNhZmVfZmluZ2VyIHRjcGQgdGNwZGNoayB0cnktZnJvbSB0Y3BkbWF0Y2giCitNQU5TMyA9ICJob3N0c19hY2Nlc3MiCitNQU5TNSA9ICJob3N0c19vcHRpb25zIgorTUFOUzggPSAidGNwZCB0Y3BkY2hrIHRjcGRtYXRjaCIKK2RvX2luc3RhbGwgKCkgeworCW9lX2xpYmluc3RhbGwgLWEgbGlid3JhcCAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtQyBzaGFyZWQgLXNvIGxpYndyYXAgJHtEfSR7YmFzZV9saWJkaXJ9CisKKwlpZiBbICIke2xpYmRpcn0iICE9ICIke2Jhc2VfbGliZGlyfSIgXSA7IHRoZW4KKwkJcmVsX2xpYl9wcmVmaXg9YGVjaG8gJHtsaWJkaXJ9IHwgc2VkICdzLFwoXi9cfFwpW14vXVteL10qLC4uLGcnYAorCQlsaWJuYW1lPWByZWFkbGluayAke0R9JHtiYXNlX2xpYmRpcn0vbGlid3JhcC5zbyB8IHhhcmdzIGJhc2VuYW1lYAorCQlsbiAtcyAke3JlbF9saWJfcHJlZml4fSR7YmFzZV9saWJkaXJ9LyR7bGlibmFtZX0gJHtEfSR7bGliZGlyfS9saWJ3cmFwLnNvCisJCXJtIC1mICR7RH0ke2Jhc2VfbGliZGlyfS9saWJ3cmFwLnNvCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlmb3IgYiBpbiAke0JJTlN9OyBkbworCQlpbnN0YWxsIC1tIDA3NTUgJGIgJHtEfSR7c2JpbmRpcn0vIHx8IGV4aXQgMQorCWRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW4zCisJZm9yIG0gaW4gJHtNQU5TM307IGRvCisJCWluc3RhbGwgLW0gMDY0NCAkbS4zICR7RH0ke21hbmRpcn0vbWFuMy8gfHwgZXhpdCAxCisJZG9uZQorCisJaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjUKKwlmb3IgbSBpbiAke01BTlM1fTsgZG8KKwkJaW5zdGFsbCAtbSAwNjQ0ICRtLjUgJHtEfSR7bWFuZGlyfS9tYW41LyB8fCBleGl0IDEKKwlkb25lCisKKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOAorCWZvciBtIGluICR7TUFOUzh9OyBkbworCQlpbnN0YWxsIC1tIDA2NDQgJG0uOCAke0R9JHttYW5kaXJ9L21hbjgvIHx8IGV4aXQgMQorCWRvbmUKKworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3RyeS1mcm9tLjggJHtEfSR7bWFuZGlyfS9tYW44LworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NhZmVfZmluZ2VyLjggJHtEfSR7bWFuZGlyfS9tYW44LworCisJaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfQorCWluc3RhbGwgLW0gMDY0NCB0Y3BkLmggJHtEfSR7aW5jbHVkZWRpcn0vCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vaG9zdHMuYWxsb3cKKwl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9ob3N0cy5kZW55Cit9CisKK0ZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2hvc3RzLmFsbG93ICR7c3lzY29uZmRpcn0vaG9zdHMuZGVueSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGkyaHRtbC90ZXhpMmh0bWxfNS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aTJodG1sL3RleGkyaHRtbF81LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFjMjg5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGkyaHRtbC90ZXhpMmh0bWxfNS4wLmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiUGVybCBzY3JpcHQgdGhhdCBjb252ZXJ0cyBUZXhpbmZvIHRvIEhUTUwiCitIT01FUEFHRSAgICA9ICJodHRwOi8vd3d3Lm5vbmdudS5vcmcvdGV4aTJodG1sLyIKK1NFQ1RJT04gICAgID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFICAgICA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorCitQUiA9ICJyMiIKKworU1JDX1VSSSAgICAgPSAiJHtTQVZBTk5BSF9HTlVfTUlSUk9SfS90ZXhpMmh0bWwvJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjE1YWM4NzZmY2RjOGJlODY1YjE2NTM1ZjQ4MGFhNTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZThhOThiMGVlMjBjNDk1YTZhYjg5NDM5OGEwNjVlZjU4MDI3MmRiZDVhMTViMWIxOWU4YmQxYmM4OWQ5ZjlmYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCSMgYXV0b3Rvb2xzX2RvX2NvbmZpZ3VyZSB1cGRhdGVzIHBvL01ha2VmaWxlLmluLmluLCB3ZSBhbHNvIG5lZWQKKwkjIHVwZGF0ZSBwb19kb2N1bWVudC4KKwljcCAtZiAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dldHRleHQvcG8vTWFrZWZpbGUuaW4uaW4gJHtTfS9wb19kb2N1bWVudC8KKwljcCAtZiAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dldHRleHQvcG8vTWFrZWZpbGUuaW4uaW4gJHtTfS9wb19tZXNzYWdlcy8KK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEgJHtVU1JCSU5QQVRIfS9lbnYgcGVybCwnICR7RH0ke2JpbmRpcn0vdGV4aTJodG1sCit9CisKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkYXRhZGlyfS90ZXhpbmZvIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS1uYXRpdmUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15LW5hdGl2ZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTQyMGEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS1uYXRpdmUuYmIKQEAgLTAsMCArMSwzMCBAQAorREVTQ1JJUFRJT04gPSAiRmFrZSB2ZXJzaW9uIG9mIHRoZSB0ZXhpbmZvIHV0aWxpdHkgc3VpdGUiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ2YmI2MmU3M2NhOGI5MDFkM2YyZTlkNzE1NDJmNGJiIgorREVQRU5EUyA9ICIiCitQViA9ICIxLjAiCisKK1NSQ19VUkkgPSAiZmlsZTovL3RlbXBsYXRlLnB5IGZpbGU6Ly9DT1BZSU5HIgorCitTID0gIiR7V09SS0RJUn0iCisKK05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYID0gIi8ke1BOfSIKKworaW5oZXJpdCBuYXRpdmUKKworZG9faW5zdGFsbF9uYW1lKCkgeworICAgIEZJTEVOQU1FPSIke0R9JHtiaW5kaXJ9LyQxIgorICAgICMgVXNpbmcgbG4gY2F1c2VzIHByb2JsZW1zIHdpdGggcm1fd29yaworICAgIGNwIC1UICIke1N9L3RlbXBsYXRlLnB5IiAiJEZJTEVOQU1FIgorICAgIGNobW9kICt4ICRGSUxFTkFNRQorfQorCitkb19pbnN0YWxsKCkgeworICAgIG1rZGlyIC1wICIke0R9JHtiaW5kaXJ9IgorICAgIGZvciBpIGluIG1ha2VpbmZvIHBvZDJ0ZXhpIHRleGkyZHZpIHBkZnRleGkyZHZpIHRleGluZGV4IHRleGkycGRmIFwKKyAgICAgICAgICAgICB0eGl4bWwydGV4aSB0ZXhpMmFueSBpbnN0YWxsLWluZm8gZ2luc3RhbGwtaW5mbyBcCisgICAgICAgICAgICAgdXBkYXRlLWluZm8tZGlyOyBkbworICAgICAgICBkb19pbnN0YWxsX25hbWUgJGkKKyAgICBkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15L0NPUFlJTkcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15L0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMxY2JlNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8tZHVtbXktbmF0aXZlL3RleGluZm8tZHVtbXkvQ09QWUlORwpAQCAtMCwwICsxLDE5IEBACitDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15L3RlbXBsYXRlLnB5IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS90ZW1wbGF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjcwMzNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS90ZW1wbGF0ZS5weQpAQCAtMCwwICsxLDEyMiBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjIuNworCisjIHRlbXBsYXRlLnB5IChhbmQgb3RoZXIgZmlsZW5hbWVzKQorIyBCeSBNYXggRWxpYXNlciAobWF4LmVsaWFzZXJAaW50ZWwuY29tKQorCisjIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3JwLgorCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisjIFRIRSBTT0ZUV0FSRS4KKworIyBUaGlzIHByb2dyYW0gYWN0cyBsaWtlIGEgZHVtbXkgdmVyc2lvbiBvZiB0aGUgdGV4aW5mbyB1dGlsaXRpZXMsIGNyZWF0aW5nCisjIHRoZSByaWdodCBvdXRwdXQgZmlsZXMgYnV0IGxlYXZpbmcgdGhlbSBibGFuay4gSXQgd2lsbCBwYXJzZSBvdXQgdGhlIG5hbWUKKyMgb2YgdGhlIGV4ZWN1dGFibGUgZnJvbSBhcmd2WzBdIGFuZCBlbXVsYXRlIHRoZSBjb3JyZXNwb25kaW5nIHByb2dyYW0sIHNvCisjIG11bHRpcGxlIGNvcGllcyBvZiB0aGlzIHNjcmlwdCB3aWxsIGV4aXN0IHVuZGVyIGRpZmZlcmVudCBuYW1lcy4KKworaW1wb3J0IHN5cywgb3MKKworb2xvbmcgPSAiLS1vdXRwdXQ9IgorRWxvbmcgPSAiLS1tYWNyby1leHBhbmQ9IgorCisKK3RoaXNfYmluYXJ5ID0gc3lzLmFyZ3ZbMF0uc3BsaXQgKCIvIilbLTFdCisKKyMgVG8gYmUgb3V0cHV0dGVkIGlmIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXNuJ3QgYmVlbiBzdHViYmVkIHlldCBpcyBpbnZva2VkLgorc3R1Yl9tc2cgPSAiIiIKK1RoaXMgc3RhbmQtaW4gdmVyc2lvbiBvZiAlcyBpcyBub3QgeWV0IGZ1bGx5IGNhcGFibGUgb2YgZW11bGF0aW5nIHRoZSByZWFsCit2ZXJzaW9uIGZyb20gdGhlIEdOVSB0ZXhpbmZvIHN1aXRlLiBJZiB5b3Ugc2VlIHRoaXMgbWVzc2FnZSwgZmlsZSBhIGJ1ZyByZXBvcnQKK3dpdGggZGV0YWlscyBvbiB0aGUgcmVjaXBlIHRoYXQgZmFpbGVkLgorIiIiICUgdGhpc19iaW5hcnkKKworIyBBdXRvdG9vbHMgc2V0dXBzIHF1ZXJ5IHRoZSB2ZXJzaW9uLCBzbyB0aGlzIGlzIGFjdHVhbGx5IG5lY2Vzc2FyeS4gU29tZSBvZgorIyB0aGVtIChsb29raW4nIGF0IHlvdSwgZ2xpYmMpIGFjdHVhbGx5IGxvb2sgZm9yIHRoZSBzdWJzdHJpbmcgIkdOVSB0ZXhpbmZvLCIKKyMgc28gd2UgcHV0IHRoYXQgc3Vic3RyaW5nIGluIHRoZXJlIHdpdGhvdXQgYWN0dWFsbHkgdGVsbGluZyBhIGxpZS4KK3ZlcnNpb25fc3RyID0gIiIiICVzIChmYWtlIHRleGluZm8sIGVtdWxhdGluZyBHTlUgdGV4aW5mbykgNS4yCisgCitTdXBlciBhbWF6aW5nIHZlcnNpb24gd2hpY2ggaXMgdG90YWxseSBub3QgZmFrZSBpbiBhbnkgd2F5IHdoYXRzb2V2ZXIuCitDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycC4gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQKK2xpY2Vuc2UuCisiIiIgJSB0aGlzX2JpbmFyeQorCitzaW1wbGVfYmluYXJpZXMgPSAicG9kMnRleGkgdGV4aTJkdmkgcGRmdGV4aTJkdmkgdGV4aW5kZXggdGV4aTJwZGYgXAorICAgICAgICAgICAgICAgICAgIHR4aXhtbDJ0ZXhpIGluc3RhbGwtaW5mbyBnaW5zdGFsbC1pbmZvIFwKKyAgICAgICAgICAgICAgICAgICB1cGRhdGUtaW5mby1kaXIiLnNwbGl0ICgpCisKKyMgVGhlc2UgdXRpbGl0aWVzIHVzZSBhIHNsaWdodGx5IGRpZmZlcmVudCBzZXQgb2Ygb3B0aW9ucyBhbmQgZmxhZ3MuCitjb21wbGV4X2JpbmFyaWVzID0gIm1ha2VpbmZvIHRleGkyYW55Ii5zcGxpdCAoKQorCit2YWxpZF9iaW5hcmllcyA9IHNpbXBsZV9iaW5hcmllcyArIGNvbXBsZXhfYmluYXJpZXMKKworIyBGb3IgZ2VuZXJhdGluZyBibGFuayBvdXRwdXQgZmlsZXMuCitkZWYgdG91Y2hfZmlsZSAocGF0aCk6CisgICAgZiA9IG9wZW4gKHBhdGgsICJ3IikKKyAgICBmLmNsb3NlICgpCisKK2Fzc2VydCB0aGlzX2JpbmFyeSBpbiB2YWxpZF9iaW5hcmllcywgXAorICAgICAgIHRoaXNfYmluYXJ5ICsgIiBpcyBub3Qgb25lIG9mICIgKyAnLCAnLmpvaW4gKHZhbGlkX2JpbmFyaWVzKQorCitpZiAiLS12ZXJzaW9uIiBpbiBzeXMuYXJndjoKKyAgICBwcmludCB2ZXJzaW9uX3N0cgorICAgIHN5cy5leGl0ICgwKQorCisjIEZvciBkZWJ1Z2dpbmcKK2xvZ19pbnRlcmNlcHRpb25zID0gRmFsc2UKK2lmIGxvZ19pbnRlcmNlcHRpb25zOgorICAgIGYgPSBvcGVuICgiL3RtcC9pbnRlcmNlcHRlZF8iICsgdGhpc19iaW5hcnksICJhIikKKyAgICBmLndyaXRlICgnICcuam9pbiAoW3RoaXNfYmluYXJ5XSArIHN5cy5hcmd2WzE6XSkgKyAnXG4nKQorICAgIGYuY2xvc2UgKCkKKworIyBMb29rIHRocm91Z2ggdGhlIG9wdGlvbnMgYW5kIGZsYWdzLCBhbmQgaWYgbmVjZXNzYXJ5LCB0b3VjaCBhbnkgb3V0cHV0CisjIGZpbGVzLgorYXJnX2lkeCA9IDEKK3doaWxlIGFyZ19pZHggPCBsZW4gKHN5cy5hcmd2KToKKyAgICBhcmcgPSBzeXMuYXJndiBbYXJnX2lkeF0KKyAgICAKKyAgICBpZiBhcmcgPT0gIi0tIjoKKyAgICAgICAgYnJlYWsKKyAgICAKKyAgICAjIFNvbWV0aGluZyBsaWtlIC1JIC4gY2FuIHJlc3VsdCBpbiBhIG5lZWQgZm9yIHRoaXMgKHNwZWNpZmljYWxseSB0aGUgLikKKyAgICBlbGlmIGxlbiAoYXJnKSA8IDI6CisgICAgICAgIHBhc3MKKyAgICAKKyAgICAjIENoZWNrIGlmIC1vIG9yIC0tb3V0cHV0IGlzIHNwZWNpZmllZC4gVGhlc2UgY2FuIGJlIHVzZWQgYXQgbW9zdCBvbmNlLgorICAgIGVsaWYgYXJnWzBdID09ICctJyBhbmQgYXJnWzFdICE9ICctJyBhbmQgYXJnW2xlbiAoYXJnKSAtIDFdID09ICdvJzoKKyAgICAgICAgdG91Y2hfZmlsZSAoc3lzLmFyZ3ZbYXJnX2lkeCArIDFdKQorICAgICAgICBzeXMuZXhpdCAoMCkKKyAgICBlbGlmIGFyZy5zdGFydHN3aXRoIChvbG9uZyk6CisgICAgICAgIHRvdWNoX2ZpbGUgKGFyZy5zcGxpdCAoIj0iKVsxXSkKKyAgICAgICAgc3lzLmV4aXQgKDApCisgICAgCisgICAgIyBDaGVjayBmb3IgZnVuY3Rpb25hbGl0eSB0aGF0IGlzbid0IGltcGxlbWVudGVkIHlldC4KKyAgICBlbHNlOgorICAgICAgICBhc3NlcnQgYXJnWzBdICE9ICctJyBvciBhcmdbMV0gPT0gJy0nIG9yICdFJyBub3QgaW4gYXJnIG9yIFwKKyAgICAgICAgICAgICAgIHRoaXNfYmluYXJ5IGluIHNpbXBsZV9iaW5hcmllcywgXAorICAgICAgICAgICAgICAgIi1FIG9wdGlvbiBub3QgeWV0IHN1cHBvcnRlZCIgKyBzdHViX21zZworICAgICAgICAKKyAgICAgICAgYXNzZXJ0IG5vdCBhcmcuc3RhcnRzd2l0aCAoRWxvbmcpLCBcCisgICAgICAgICAgICAgICBFbG9uZ1s6LTFdICsgIiBvcHRpb24gbm90IHlldCBzdXBwb3J0ZWQiICsgc3R1Yl9tc2cKKyAgICAKKyAgICBhcmdfaWR4ICs9IDEKKworIyBUaGUgLW8vLS1vdXRwdXQgb3B0aW9uIG92ZXJyaWRlcyB0aGUgZGVmYXVsdC4gRm9yIG1ha2VpbmZvIGFuZCB0ZXhpMmFueSwKKyMgdGhhdCBkZWZhdWx0IGlzIHRvIGxvb2sgZm9yIGEgQHNldGZpbGVuYW1lIGNvbW1hbmQgaW4gdGhlIGlucHV0IGZpbGUuCisjIE90aGVyd2lzZSwgcHJpbnRpbmcgbm90aGluZyB0byBzdGRvdXQgYW5kIHRoZW4gZXhpdGluZyBzaG91bGQgc3VmZmljZS4KK2Fzc2VydCB0aGlzX2JpbmFyeSBpbiBzaW1wbGVfYmluYXJpZXMsIFwKKyAgICAgICAiRG9uJ3Qga25vdyBob3cgdG8gZ2V0IGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSBmcm9tIGlucHV0IGZpbGUhIiArIFwKKyAgICAgICBzdHViX21zZworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L2NoZWNrLWxvY2FsZS1oLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvLTQuOC9jaGVjay1sb2NhbGUtaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGQ2NjYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvLTQuOC9jaGVjay1sb2NhbGUtaC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitmaXggdGhlIG1hY3JvIGNoZWNrCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitjb25maWd1cmUgZG9lcyBub3QgY2hlY2sgaWYgbG9jYWxlLmggZXhpc3RzLCBidXQgY2hlY2sgc2V0bG9jYWxlLAoraWYgc2V0bG9jYWxlIGV4aXN0LCB0aGUgbG9jYWxlLmggc2hvdWxkIGV4aXN0LgorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWIvc3lzdGVtLmggfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvc3lzdGVtLmggYi9saWIvc3lzdGVtLmgKK2luZGV4IDk0NmViM2MuLmM3MDAzN2IgMTAwNjQ0CistLS0gYS9saWIvc3lzdGVtLmgKKysrKyBiL2xpYi9zeXN0ZW0uaAorQEAgLTQyLDcgKzQyLDcgQEAgZXh0ZXJuIGNoYXIgKnN1YnN0cmluZyAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworICNpbmNsdWRlIDxjdHlwZS5oPgorIAorIC8qIEFsbCBzeXN0ZW1zIG5vd2FkYXlzIHByb2JhYmx5IGhhdmUgdGhlc2UgZnVuY3Rpb25zLCBidXQgLi4uICovCistI2lmZGVmIEhBVkVfTE9DQUxFX0gKKysjaWZkZWYgSEFWRV9TRVRMT0NBTEUKKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2VuZGlmCisgI2lmbmRlZiBIQVZFX1NFVExPQ0FMRQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L2RvLWNvbXBpbGUtbmF0aXZlLXRvb2xzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvLTQuOC9kby1jb21waWxlLW5hdGl2ZS10b29scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWViZTI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvLTQuOC9kby1jb21waWxlLW5hdGl2ZS10b29scy5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGcm9tIDQ1OGU5NDUwY2VjZjcwM2Y1NTUzNmU2MDkzNjUxNjI3MTk1ODU5MDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiUm95LkxpIiA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTAgU2VwIDIwMTQgMTc6MDM6MjkgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZG8gbm90IGNvbXBpbGUgaG9zdCB0b29scywgc2luY2Ugd2UgaGF2ZSBuYXRpdmUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIzICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAyMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYjQ2MTMwZC4uY2Y1ODY1NCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtOTAsMjggKzkwLDcgQEAgQUNfQ0FOT05JQ0FMX0JVSUxECisgIyAkbmF0aXZlX3Rvb2xzIGlzIGFsc28gYWRkZWQgdG8gU1VCRElSUyBpbiB0aGUgbWFpbiBNYWtlZmlsZS5hbSwKKyAjIHNvIHRoYXQgbWFrZSBjb21waWxlcyB0aGUgbmF0aXZlIHRvb2xzIGZpcnN0LgorICMKKy1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vOyB0aGVuCistICBuYXRpdmVfdG9vbHM9CistZWxzZQorLSAgbmF0aXZlX3Rvb2xzPXRvb2xzCistICB0ZXN0IC1kICIkbmF0aXZlX3Rvb2xzIiB8fCBta2RpciAiJG5hdGl2ZV90b29scyIKKy0gIGNvbmZkaXI9YChjZCAiJHNyY2RpciI7cHdkKWAKKy0gICMgTWFrZSBzdXJlIHRoZSBzZWNvbmRhcnkgY29uZmlndXJlIHdvbid0IGZhaWwgd2l0aAorLSAgIyAiZXJyb3I6IHNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkIi4KKy0gIHJtIC1mIGNvbmZpZy5zdGF0dXMKKy0gIEFDX01TR19OT1RJQ0UoW1tEb2luZyBjb25maWd1cmUgb2YgbmF0aXZlIHRvb2xzICgke2J1aWxkfSkuXV0pCistICBjZCAiJG5hdGl2ZV90b29scyIgfHwgZXhpdCAxCistICAjIFJ1biBzZWNvbmRhcnkgY29uZmlndXJlIGluIGFsdGVybmF0ZSBlbnZpcm9ubWVudCBvcgorLSAgIyBpdCBnZXRzIHRoZSB3cm9uZyBDQyBldGMuICBlbnYgLWkgZ2l2ZXMgdGhpcyBidWlsZCBob3N0IGNvbmZpZ3VyZQorLSAgIyBhIGNsZWFuIGVudmlyb25tZW50LgorLSAgZW52IC1pIENDPSIke0JVSUxEX0NDfSIgQVI9IiR7QlVJTERfQVJ9IiBSQU5MSUI9IiR7QlVJTERfUkFOTElCfSIgXAorLSAgICAgIFBBVEg9IiR7UEFUSH0iIFwKKy0gICAgICB0b29sc19vbmx5PTEgXAorLSAgICAke2NvbmZkaXJ9L2NvbmZpZ3VyZSAtLWJ1aWxkPSR7YnVpbGR9IC0taG9zdD0ke2J1aWxkfSBcCistICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1ycGF0aCAtLWRpc2FibGUtbmxzCistICBjZCAuLiB8fCBleGl0IDEKKy0gIEFDX01TR19OT1RJQ0UoW1tDb250aW51aW5nIHdpdGggbWFpbiBjb25maWd1cmUgKCR7aG9zdH0pLl1dKQorLWZpCisrbmF0aXZlX3Rvb2xzPQorIEFDX1NVQlNUKG5hdGl2ZV90b29scykKKyBBTV9DT05ESVRJT05BTChUT09MU19PTkxZLCBbW3Rlc3QgIngkdG9vbHNfb25seSIgPSB4MV1dKQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L3VzaW5nLW5hdGl2ZS1tYWtlaW5mby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby00LjgvdXNpbmctbmF0aXZlLW1ha2VpbmZvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOTcwNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L3VzaW5nLW5hdGl2ZS1tYWtlaW5mby5wYXRjaApAQCAtMCwwICsxLDI0IEBACitGcm9tIDliMGRmN2Q2ZDNjMThjZmFjODJjMjkxZDYwYTUzNTdkMWJjOGQ5ZDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiUm95LkxpIiA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTAgU2VwIDIwMTQgMTc6MTA6MDMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gdXNpbmcgbmF0aXZlIG1ha2VpbmZvCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBkb2MvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCisKK2RpZmYgLS1naXQgYS9kb2MvTWFrZWZpbGUuYW0gYi9kb2MvTWFrZWZpbGUuYW0KK2luZGV4IDYzZGY4MTguLmI2Y2ViMzQgMTAwNjQ0CistLS0gYS9kb2MvTWFrZWZpbGUuYW0KKysrKyBiL2RvYy9NYWtlZmlsZS5hbQorQEAgLTE5LDcgKzE5LDcgQEAgbWFuX01BTlMgPSBpbmZvLjEgaW5mb2tleS4xIGluc3RhbGwtaW5mby4xIG1ha2VpbmZvLjEgdGV4aW5kZXguMSB0ZXhpMmR2aS4xIFwKKyAKKyAjIFVzZSB0aGUgcHJvZ3JhbXMgYnVpbHQgaW4gb3VyIGRpc3RyaWJ1dGlvbiwgdGFraW5nIGFjY291bnQgb2YgcG9zc2libGUKKyAjIGNyb3NzLWNvbXBpbGluZy4KKy1NQUtFSU5GTyA9ICQodG9wX2J1aWxkZGlyKS8kKG5hdGl2ZV90b29scykvbWFrZWluZm8vbWFrZWluZm8KKytNQUtFSU5GTyA9IG1ha2VpbmZvCisgSU5TVEFMTF9JTkZPID0gJCh0b3BfYnVpbGRkaXIpLyQobmF0aXZlX3Rvb2xzKS91dGlsL2luc3RhbGwtaW5mbworIAorIFRYSV9YTEFURSA9IHR4aS1jcy50ZXggdHhpLWRlLnRleCB0eGktZW4udGV4IHR4aS1lcy50ZXggdHhpLWZyLnRleCBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MzM4YWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiB0ZXhpbmZvLTUuMi9nbnVsaWIvbGliL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGV4aW5mby01LjIub3JpZy9nbnVsaWIvbGliL01ha2VmaWxlLmFtCisrKysgdGV4aW5mby01LjIvZ251bGliL2xpYi9NYWtlZmlsZS5hbQorQEAgLTM3OCw3ICszNzgsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL2Rpc2FibGUtbmF0aXZlLXRvb2xzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL2Rpc2FibGUtbmF0aXZlLXRvb2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNmYxNjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vZGlzYWJsZS1uYXRpdmUtdG9vbHMucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorV2UgYWxyZWFkeSBERVBFTkQgb24gdGhlIG5hdGl2ZSB0ZXhpbmZvIGJlaW5nIHByZXNlbnQgYmVmb3JlIGJ1aWxkaW5nIHNvCit0aGVyZSBpc24ndCBhbnkgbmVlZCB0byB0cnkgYW5kIGJ1aWxkIHRoZSByZXF1aXJlZCBuYXRpdmUgdGV4aW5mbyBiaW5hcmllcworYmVmb3JlIGNyb3NzLWNvbXBpbGluZy4gVGhpcyBzaW1wbGlmaWVzIHRoZSByZWNpcGUgc29tZXdoYXQhCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBvZSBzcGVjaWZpYworCitTaWduZWQtb2ZmLWJ5OiBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiB0ZXhpbmZvLTQuMTMvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGV4aW5mby00LjEzLm9yaWcvY29uZmlndXJlLmFjCisrKysgdGV4aW5mby00LjEzL2NvbmZpZ3VyZS5hYworQEAgLTEwMCwyOSArMTAwLDcgQEAgQUNfQ0FOT05JQ0FMX0JVSUxECisgIyAkbmF0aXZlX3Rvb2xzIGlzIGFsc28gYWRkZWQgdG8gU1VCRElSUyBpbiB0aGUgbWFpbiBNYWtlZmlsZS5hbSwKKyAjIHNvIHRoYXQgbWFrZSBjb21waWxlcyB0aGUgbmF0aXZlIHRvb2xzIGZpcnN0LgorICMKKy1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vOyB0aGVuCistICBuYXRpdmVfdG9vbHM9CistZWxzZQorLSAgbmF0aXZlX3Rvb2xzPXRvb2xzCistICB0ZXN0IC1kICIkbmF0aXZlX3Rvb2xzIiB8fCBta2RpciAiJG5hdGl2ZV90b29scyIKKy0gIGNvbmZkaXI9YChjZCAiJHNyY2RpciI7cHdkKWAKKy0gICMgTWFrZSBzdXJlIHRoZSBzZWNvbmRhcnkgY29uZmlndXJlIHdvbid0IGZhaWwgd2l0aAorLSAgIyAiZXJyb3I6IHNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkIi4KKy0gIHJtIC1mIGNvbmZpZy5zdGF0dXMKKy0gIEFDX01TR19OT1RJQ0UoW1tEb2luZyBjb25maWd1cmUgb2YgbmF0aXZlIHRvb2xzICgke2J1aWxkfSkuXV0pCistICBjZCAiJG5hdGl2ZV90b29scyIgfHwgZXhpdCAxCistICAjIFJ1biBzZWNvbmRhcnkgY29uZmlndXJlIGluIGFsdGVybmF0ZSBlbnZpcm9ubWVudCBvcgorLSAgIyBpdCBnZXRzIHRoZSB3cm9uZyBDQyBldGMuCistICAjIGVudiAtaSBnaXZlcyB0aGlzIGJ1aWxkIGhvc3QgY29uZmlndXJlIGEgY2xlYW4gZW52aXJvbm1lbnQ7CistICAjIGNvbnNlcXVlbnRseSwgd2UgaGF2ZSB0byByZS1pbml0aWFsaXplICRQQVRILgorLSAgZW52IC1pIENDPSIkQlVJTERfQ0MiIEFSPSIkQlVJTERfQVIiIFJBTkxJQj0iJEJVSUxEX1JBTkxJQiIgXAorLSAgICAgIFBBVEg9IiRQQVRIIiBcCistICAgICAgdG9vbHNfb25seT0xIFwKKy0gICAgJHtjb25mZGlyfS9jb25maWd1cmUgLS1idWlsZD0ke2J1aWxkfSAtLWhvc3Q9JHtidWlsZH0gXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtcnBhdGggLS1kaXNhYmxlLW5scworLSAgY2QgLi4gfHwgZXhpdCAxCistICBBQ19NU0dfTk9USUNFKFtbQ29udGludWluZyB3aXRoIG1haW4gY29uZmlndXJlICgke2hvc3R9KS5dXSkKKy1maQorK25hdGl2ZV90b29scz0KKyBBQ19TVUJTVChuYXRpdmVfdG9vbHMpCisgQU1fQ09ORElUSU9OQUwoVE9PTFNfT05MWSwgW1t0ZXN0ICJ4JHRvb2xzX29ubHkiID0geDFdXSkKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2U0N2VjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gNmYxZjM5MTJmY2I5MDBiM2EzZTZjYmUzMzYwMzA2ZmFkZTMzMzQ5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBUaHUsIDYgQXVnIDIwMTUgMTQ6NTU6MDggKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gZG9udC1kZXBlbmQtb24taGVscDJtYW4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CistLS0KKyBkb2MvTWFrZWZpbGUuYW0gfCAgMiArLQorIG1hbi9NYWtlZmlsZS5hbSB8IDEyICsrKysrKy0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZG9jL01ha2VmaWxlLmFtIGIvZG9jL01ha2VmaWxlLmFtCitpbmRleCA3MTk4YTZiLi40YmJhNTUwIDEwMDY0NAorLS0tIGEvZG9jL01ha2VmaWxlLmFtCisrKysgYi9kb2MvTWFrZWZpbGUuYW0KK0BAIC00MCw3ICs0MCw3IEBAIHJlZmNhcmRfZmlsZXMgPSByZWZjYXJkL01ha2VmaWxlIHJlZmNhcmQvdHhpY21kY2hlY2sgXAorICMgSW5jbHVkZSBvdXIgdGV4aW5mby50ZXgsIG5vdCBBdXRvbWFrZSdzLgorIEVYVFJBX0RJU1QgPSBlcHNmLnRleCB0ZXhpbmZvLnRleCBcCisgICAgICAgICAgICAgIGZkbC50ZXhpIFwKKy0JICAgICAkKG1hbl9NQU5TKSAkKFRYSV9YTEFURSkgXAorKwkgICAgICQoVFhJX1hMQVRFKSBcCisgCSAgICAgJChyZWZjYXJkX2ZpbGVzKQorIAorIGlmIElOU1RBTExfV0FSTklOR1MKK2RpZmYgLS1naXQgYS9tYW4vTWFrZWZpbGUuYW0gYi9tYW4vTWFrZWZpbGUuYW0KK2luZGV4IGEwOGQ2MDMuLmJkZmM5YTQgMTAwNjQ0CistLS0gYS9tYW4vTWFrZWZpbGUuYW0KKysrKyBiL21hbi9NYWtlZmlsZS5hbQorQEAgLTEzLDI0ICsxMywyNCBAQAorICMgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgCisgIyBUaGVzZSBhcmUgZ2VuZXJhdGVkIHVzaW5nIGhlbHAybWFuLgorLW1hbl9NQU5TID0gaW5zdGFsbC1pbmZvLjEgbWFrZWluZm8uMSB0ZXhpbmRleC4xIHRleGkyZHZpLjEKKysjbWFuX01BTlMgPSBpbnN0YWxsLWluZm8uMSBtYWtlaW5mby4xIHRleGluZGV4LjEgdGV4aTJkdmkuMQorIAorICMgVGhlc2UgcmVxdWlyZSB0aGUgYnVpbGQgaW4gaW5mby8sIHRodXMgY2FuJ3QgZG8gaWYgd2UgZmFpbGVkIHRvIGZpbmQgYQorICMgdGVybWluYWwgbGlicmFyeS4KKyBpZiBIQVZFX1RFUk1MSUJTCistbWFuX01BTlMgKz0gaW5mby4xCisrI21hbl9NQU5TICs9IGluZm8uMQorIGVuZGlmCisgCisgIyBUaGVzZSBhcmUgaGFuZC13cml0dGVuLgorLW1hbl9NQU5TICs9IGluZm8uNSB0ZXhpbmZvLjUKKysjbWFuX01BTlMgKz0gaW5mby41IHRleGluZm8uNQorIAorICMgVGhpcyBpcyBnZW5lcmF0ZWQgYnkgcG9kMm1hbiwgYnV0IGxldCdzIGp1c3QgcnVuIGl0IGJ5IGhhbmQuCistbWFuX01BTlMgKz0gcG9kMnRleGkuMQorKyNtYW5fTUFOUyArPSBwb2QydGV4aS4xCisgCisgIyBUaGVzZSBhcmUganVzdCAuc28ncyB0byB0aGUgY29tbW9uIHByb2dyYW0uCistbWFuX01BTlMgKz0gdGV4aTJhbnkuMSB0ZXhpMnBkZi4xIHBkZnRleGkyZHZpLjEKKysjbWFuX01BTlMgKz0gdGV4aTJhbnkuMSB0ZXhpMnBkZi4xIHBkZnRleGkyZHZpLjEKKyAKKy1FWFRSQV9ESVNUID0gJChtYW5fTUFOUykgZ2luZm8uaDJtCisrRVhUUkFfRElTVCA9IGdpbmZvLmgybQorIAorICMgTWFpbnRhaW5lcnMgc2hvdWxkIGJlIGFibGUgdG8gcmVnZW5lcmF0ZS4KKyBNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9ICQobWFuX01BTlMpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9saW5rLXppcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9saW5rLXppcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjZlOWZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL2xpbmstemlwLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK2luc3RhbGwtaW5mbyB1c2VzIHN5bWJvbHMgZnJvbSB6bGliIHNvIG11c3QgbGluayBhZ2FpbnN0IGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorCitJbmRleDogdGV4aW5mby01LjEvaW5zdGFsbC1pbmZvL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGV4aW5mby01LjEub3JpZy9pbnN0YWxsLWluZm8vTWFrZWZpbGUuYW0KKysrKyB0ZXhpbmZvLTUuMS9pbnN0YWxsLWluZm8vTWFrZWZpbGUuYW0KK0BAIC0zNCw0ICszNCw0IEBAIEFNX0NQUEZMQUdTID0gCQkJCQlcCisgICAtSSQodG9wX3NyY2RpcikvZ251bGliL2xpYgkJCVwKKyAgIC1JJCh0b3BfYnVpbGRkaXIpL2dudWxpYi9saWIJCQlcCisgICAtRExPQ0FMRURJUj1cIiQobG9jYWxlZGlyKVwiCistTERBREQgPSAkKHRvcF9idWlsZGRpcikvZ251bGliL2xpYi9saWJnbnUuYSAkKExJQklOVEwpCisrTERBREQgPSAkKHRvcF9idWlsZGRpcikvZ251bGliL2xpYi9saWJnbnUuYSAkKExJQklOVEwpIC1segpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL3RleGluZm8tNC4xMi16bGliLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL3RleGluZm8tNC4xMi16bGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYmQyMjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vdGV4aW5mby00LjEyLXpsaWIucGF0Y2gKQEAgLTAsMCArMSwyMzMgQEAKK0Zyb20gMjBlMWQ4YTk0ODFkYzEzZGQxZDRkMTY4YjkwZTBlZDJmZjA5N2I5OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBUaHUsIDYgQXVnIDIwMTUgMTQ6Mjk6NTcgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gdGV4aW5mby00LjEyLXpsaWIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBpbnN0YWxsLWluZm8vTWFrZWZpbGUuaW4gICAgfCAgMiArLQorIGluc3RhbGwtaW5mby9pbnN0YWxsLWluZm8uYyB8IDY3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKSwgMjcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9pbnN0YWxsLWluZm8vTWFrZWZpbGUuaW4gYi9pbnN0YWxsLWluZm8vTWFrZWZpbGUuaW4KK2luZGV4IGFkNzNhYmIuLmVhYTIxNTMgMTAwNjQ0CistLS0gYS9pbnN0YWxsLWluZm8vTWFrZWZpbGUuaW4KKysrKyBiL2luc3RhbGwtaW5mby9NYWtlZmlsZS5pbgorQEAgLTI0MSw3ICsyNDEsNyBAQCBhbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQoYmluZGlyKSIgIiQoREVTVERJUikkKGJpbmRpcikiCisgUFJPR1JBTVMgPSAkKGJpbl9QUk9HUkFNUykKKyBhbV9naW5zdGFsbF9pbmZvX09CSkVDVFMgPSBpbnN0YWxsLWluZm8uJChPQkpFWFQpCisgZ2luc3RhbGxfaW5mb19PQkpFQ1RTID0gJChhbV9naW5zdGFsbF9pbmZvX09CSkVDVFMpCistZ2luc3RhbGxfaW5mb19MREFERCA9ICQoTERBREQpCisrZ2luc3RhbGxfaW5mb19MREFERCA9ICQoTERBREQpIC1segorIGFtX19ERVBFTkRFTkNJRVNfMSA9CisgZ2luc3RhbGxfaW5mb19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvZ251bGliL2xpYi9saWJnbnUuYSBcCisgCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZGlmZiAtLWdpdCBhL2luc3RhbGwtaW5mby9pbnN0YWxsLWluZm8uYyBiL2luc3RhbGwtaW5mby9pbnN0YWxsLWluZm8uYworaW5kZXggYjQ1NGMxNS4uNGUzOTEyMiAxMDA2NDQKKy0tLSBhL2luc3RhbGwtaW5mby9pbnN0YWxsLWluZm8uYworKysrIGIvaW5zdGFsbC1pbmZvL2luc3RhbGwtaW5mby5jCitAQCAtMjIsNiArMjIsNyBAQAorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAjaW5jbHVkZSA8cmVnZXguaD4KKyAjaW5jbHVkZSA8YXJnei5oPgorKyNpbmNsdWRlIDx6bGliLmg+CisgCisgI2RlZmluZSBUQUJfV0lEVEggOAorIAorQEAgLTY4NCwxNSArNjg1LDE1IEBAIFRoZSBmaXJzdCB0aW1lIHlvdSBpbnZva2UgSW5mbyB5b3Ugc3RhcnQgb2ZmIGxvb2tpbmcgYXQgdGhpcyBub2RlLlxuXAorICAgIAorICAgIFJldHVybiBlaXRoZXIgc3RkaW4gcmVhZGluZyB0aGUgZmlsZSwgb3IgYSBub24tc3RkaW4gcGlwZSByZWFkaW5nCisgICAgdGhlIG91dHB1dCBvZiB0aGUgY29tcHJlc3Npb24gcHJvZ3JhbS4gICovCistRklMRSAqCisrdm9pZCAqCisgb3Blbl9wb3NzaWJseV9jb21wcmVzc2VkX2ZpbGUgKGNoYXIgKmZpbGVuYW1lLAorICAgICB2b2lkICgqY3JlYXRlX2NhbGxiYWNrKSAoY2hhciAqKSwKKy0gICAgY2hhciAqKm9wZW5lZF9maWxlbmFtZSwgY2hhciAqKmNvbXByZXNzaW9uX3Byb2dyYW0pIAorKyAgICBjaGFyICoqb3BlbmVkX2ZpbGVuYW1lLCBjaGFyICoqY29tcHJlc3Npb25fcHJvZ3JhbSwgaW50ICppc19waXBlKSAKKyB7CisgICBjaGFyICpsb2NhbF9vcGVuZWRfZmlsZW5hbWUsICpsb2NhbF9jb21wcmVzc2lvbl9wcm9ncmFtOworICAgaW50IG5yZWFkOworICAgY2hhciBkYXRhWzEzXTsKKy0gIEZJTEUgKmY7CisrICBnekZpbGUgKmY7CisgCisgICAvKiBXZSBsZXQgdGhlbSBwYXNzIE5VTEwgaWYgdGhleSBkb24ndCB3YW50IHRoaXMgaW5mbywgYnV0IGl0J3MgZWFzaWVyCisgICAgICB0byBhbHdheXMgZGV0ZXJtaW5lIGl0LiAgKi8KK0BAIC03MDAsNDggKzcwMSw0OCBAQCBvcGVuX3Bvc3NpYmx5X2NvbXByZXNzZWRfZmlsZSAoY2hhciAqZmlsZW5hbWUsCisgICAgIG9wZW5lZF9maWxlbmFtZSA9ICZsb2NhbF9vcGVuZWRfZmlsZW5hbWU7CisgCisgICAqb3BlbmVkX2ZpbGVuYW1lID0gZmlsZW5hbWU7CistICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgZiA9IGd6b3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisgICBpZiAoIWYpCisgICAgIHsKKyAgICAgICAqb3BlbmVkX2ZpbGVuYW1lID0gY29uY2F0IChmaWxlbmFtZSwgIi5neiIsICIiKTsKKy0gICAgICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgICAgIGYgPSBnem9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworICAgICB9CisgICBpZiAoIWYpCisgICAgIHsKKyAgICAgICBmcmVlICgqb3BlbmVkX2ZpbGVuYW1lKTsKKyAgICAgICAqb3BlbmVkX2ZpbGVuYW1lID0gY29uY2F0IChmaWxlbmFtZSwgIi54eiIsICIiKTsKKy0gICAgICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgICAgIGYgPSBnem9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworICAgICB9CisgICBpZiAoIWYpCisgICAgIHsKKyAgICAgICBmcmVlICgqb3BlbmVkX2ZpbGVuYW1lKTsKKyAgICAgICAqb3BlbmVkX2ZpbGVuYW1lID0gY29uY2F0IChmaWxlbmFtZSwgIi5iejIiLCAiIik7CistICAgICAgZiA9IGZvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKysgICAgICBmID0gZ3pvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKyAgICAgfQorICAgaWYgKCFmKQorICAgICB7CisgICAgICAgZnJlZSAoKm9wZW5lZF9maWxlbmFtZSk7CisgICAgICAgKm9wZW5lZF9maWxlbmFtZSA9IGNvbmNhdCAoZmlsZW5hbWUsICIubHoiLCAiIik7CistICAgICAgZiA9IGZvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKysgICAgICBmID0gZ3pvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKyAgICAgfQorICAgaWYgKCFmKQorICAgICB7CisgICAgICBmcmVlICgqb3BlbmVkX2ZpbGVuYW1lKTsKKyAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb25jYXQgKGZpbGVuYW1lLCAiLmx6bWEiLCAiIik7CistICAgICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgICAgZiA9IGd6b3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisgICAgIH0KKyAjaWZkZWYgX19NU0RPU19fCisgICBpZiAoIWYpCisgICAgIHsKKyAgICAgICBmcmVlICgqb3BlbmVkX2ZpbGVuYW1lKTsKKyAgICAgICAqb3BlbmVkX2ZpbGVuYW1lID0gY29uY2F0IChmaWxlbmFtZSwgIi5pZ3oiLCAiIik7CistICAgICAgZiA9IGZvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKysgICAgICBmID0gZ3pvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKyAgICAgfQorICAgaWYgKCFmKQorICAgICB7CisgICAgICAgZnJlZSAoKm9wZW5lZF9maWxlbmFtZSk7CisgICAgICAgKm9wZW5lZF9maWxlbmFtZSA9IGNvbmNhdCAoZmlsZW5hbWUsICIuaW56IiwgIiIpOworLSAgICAgIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICAgICAgZiA9IGd6b3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisgICAgIH0KKyAjZW5kaWYgLyogX19NU0RPU19fICovCisgICBpZiAoIWYpCitAQCAtNzU3LDcgKzc1OCw3IEBAIG9wZW5fcG9zc2libHlfY29tcHJlc3NlZF9maWxlIChjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgICAgKCpjcmVhdGVfY2FsbGJhY2spIChmaWxlbmFtZSk7CisgCisgICAgICAgICAgIC8qIEFuZCB0cnkgb3BlbmluZyBpdCBhZ2Fpbi4gICovCistICAgICAgICAgIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICAgICAgICAgIGYgPSBnem9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworICAgICAgICAgICBpZiAoIWYpCisgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICB9CitAQCAtNzY3LDEyICs3NjgsMTIgQEAgb3Blbl9wb3NzaWJseV9jb21wcmVzc2VkX2ZpbGUgKGNoYXIgKmZpbGVuYW1lLAorIAorICAgLyogUmVhZCBmaXJzdCBmZXcgYnl0ZXMgb2YgZmlsZSByYXRoZXIgdGhhbiByZWx5aW5nIG9uIHRoZSBmaWxlbmFtZS4KKyAgICAgIElmIHRoZSBmaWxlIGlzIHNob3J0ZXIgdGhhbiB0aGlzIGl0IGNhbid0IGJlIHVzYWJsZSBhbnl3YXkuICAqLworLSAgbnJlYWQgPSBmcmVhZCAoZGF0YSwgc2l6ZW9mIChkYXRhKSwgMSwgZik7CistICBpZiAobnJlYWQgIT0gMSkKKysgIG5yZWFkID0gZ3pyZWFkIChmLCBkYXRhLCBzaXplb2YgKGRhdGEpKTsKKysgIGlmIChucmVhZCAhPSBzaXplb2YgKGRhdGEpKQorICAgICB7CisgICAgICAgLyogRW1wdHkgZmlsZXMgZG9uJ3Qgc2V0IGVycm5vLiAgQ2FsbGluZyBjb2RlIGNhbiBjaGVjayBmb3IKKyAgICAgICAgICB0aGlzLCBzbyBtYWtlIHN1cmUgZXJybm8gPT0gMCBqdXN0IGluIGNhc2UgaXQgaXNuJ3QgYWxyZWFkeS4gKi8KKy0gICAgICBpZiAobnJlYWQgPT0gMCkKKysgICAgICBpZiAobnJlYWQgPj0gMCkKKyAgICAgICAgIGVycm5vID0gMDsKKyAgICAgICByZXR1cm4gMDsKKyAgICAgfQorQEAgLTgzOCwzNSArODM5LDQwIEBAIG9wZW5fcG9zc2libHlfY29tcHJlc3NlZF9maWxlIChjaGFyICpmaWxlbmFtZSwKKyAgICAgKmNvbXByZXNzaW9uX3Byb2dyYW0gPSBOVUxMOworIAorICAgLyogU2VlayBiYWNrIG92ZXIgdGhlIG1hZ2ljIGJ5dGVzLiAgKi8KKy0gIGlmIChmc2VlayAoZiwgMCwgMCkgPCAwKQorKyAgaWYgKGd6c2VlayAoZiwgMCwgU0VFS19TRVQpID09IC0xKQorICAgICByZXR1cm4gMDsKKyAKKyAgIGlmICgqY29tcHJlc3Npb25fcHJvZ3JhbSkKKyAgICAgeyAvKiBJdCdzIGNvbXByZXNzZWQsIHNvIG9wZW4gYSBwaXBlLiAgKi8KKysgICAgICBGSUxFICpwOworICAgICAgIGNoYXIgKmNvbW1hbmQgPSBjb25jYXQgKCpjb21wcmVzc2lvbl9wcm9ncmFtLCAiIC1kIiwgIiIpOworIAorLSAgICAgIGlmIChmY2xvc2UgKGYpIDwgMCkKKysgICAgICBpZiAoZ3pjbG9zZSAoZikgPCAwKQorICAgICAgICAgcmV0dXJuIDA7CistICAgICAgZiA9IGZyZW9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4sIHN0ZGluKTsKKy0gICAgICBpZiAoIWYpCisrICAgICAgcCA9IGZyZW9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4sIHN0ZGluKTsKKysgICAgICBpZiAoIXApCisgICAgICAgICByZXR1cm4gMDsKKy0gICAgICBmID0gcG9wZW4gKGNvbW1hbmQsICJyIik7CistICAgICAgaWYgKCFmKQorKyAgICAgIHAgPSBwb3BlbiAoY29tbWFuZCwgInIiKTsKKysgICAgICBpZiAoIXApCisgICAgICAgICB7CisgICAgICAgICAgIC8qIFVzZWQgZm9yIGVycm9yIG1lc3NhZ2UgaW4gY2FsbGluZyBjb2RlLiAqLworICAgICAgICAgICAqb3BlbmVkX2ZpbGVuYW1lID0gY29tbWFuZDsKKyAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgKmlzX3BpcGUgPSAxOworKyAgICAgIHJldHVybiBwOworICAgICB9CisgICBlbHNlCisgICAgIHsKKy0jaWYgT19CSU5BUlkKKysjaWYgMCAmJiBPX0JJTkFSWQorICAgICAgIC8qIFNpbmNlIHRoaXMgaXMgYSB0ZXh0IGZpbGUsIGFuZCB3ZSBvcGVuZWQgaXQgaW4gYmluYXJ5IG1vZGUsCisgICAgICAgICAgc3dpdGNoIGJhY2sgdG8gdGV4dCBtb2RlLiAgKi8KKyAgICAgICBmID0gZnJlb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgInIiLCBmKTsKKyAgICAgICBpZiAoISBmKQorIAlyZXR1cm4gMDsKKyAjZW5kaWYKKysgICAgICAqaXNfcGlwZSA9IDA7CisgICAgIH0KKyAKKyAgIHJldHVybiBmOworQEAgLTg4NSw3ICs4OTEsOCBAQCByZWFkZmlsZSAoY2hhciAqZmlsZW5hbWUsIGludCAqc2l6ZXAsCisgICAgIHZvaWQgKCpjcmVhdGVfY2FsbGJhY2spIChjaGFyICopLCBjaGFyICoqb3BlbmVkX2ZpbGVuYW1lLAorICAgICBjaGFyICoqY29tcHJlc3Npb25fcHJvZ3JhbSkKKyB7CistICBGSUxFICpmOworKyAgdm9pZCAqZjsKKysgIGludCBwaXBlX3A7CisgICBpbnQgZmlsbGVkID0gMDsKKyAgIGludCBkYXRhX3NpemUgPSA4MTkyOworICAgY2hhciAqZGF0YSA9IHhtYWxsb2MgKGRhdGFfc2l6ZSk7CitAQCAtODkzLDE0ICs5MDAsMjAgQEAgcmVhZGZpbGUgKGNoYXIgKmZpbGVuYW1lLCBpbnQgKnNpemVwLAorICAgLyogSWYgdGhleSBwYXNzZWQgdGhlIHNwYWNlIGZvciB0aGUgZmlsZSBuYW1lIHRvIHJldHVybiwgdXNlIGl0LiAgKi8KKyAgIGYgPSBvcGVuX3Bvc3NpYmx5X2NvbXByZXNzZWRfZmlsZSAoZmlsZW5hbWUsIGNyZWF0ZV9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbmVkX2ZpbGVuYW1lLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbl9wcm9ncmFtKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb25fcHJvZ3JhbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBpcGVfcCk7CisgCisgICBpZiAoIWYpCisgICAgIHJldHVybiAwOworIAorICAgZm9yICg7OykKKyAgICAgeworLSAgICAgIGludCBucmVhZCA9IGZyZWFkIChkYXRhICsgZmlsbGVkLCAxLCBkYXRhX3NpemUgLSBmaWxsZWQsIGYpOworKyAgICAgIGludCBucmVhZDsKKysKKysgICAgICBpZiAocGlwZV9wKQorKyAgICAgICAgbnJlYWQgPSBmcmVhZCAoZGF0YSArIGZpbGxlZCwgMSwgZGF0YV9zaXplIC0gZmlsbGVkLCBmKTsKKysgICAgICBlbHNlCisrICAgICAgICBucmVhZCA9IGd6cmVhZCAoZiwgZGF0YSArIGZpbGxlZCwgZGF0YV9zaXplIC0gZmlsbGVkKTsKKyAgICAgICBpZiAobnJlYWQgPCAwKQorICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgaWYgKG5yZWFkID09IDApCitAQCAtOTE5LDggKzkzMiwxMCBAQCByZWFkZmlsZSAoY2hhciAqZmlsZW5hbWUsIGludCAqc2l6ZXAsCisgICAvKiBXZSBuZWVkIHRvIGNsb3NlIHRoZSBzdHJlYW0sIHNpbmNlIG9uIHNvbWUgc3lzdGVtcyB0aGUgcGlwZSBjcmVhdGVkCisgICAgICBieSBwb3BlbiBpcyBzaW11bGF0ZWQgYnkgYSB0ZW1wb3JhcnkgZmlsZSB3aGljaCBvbmx5IGdldHMgcmVtb3ZlZAorICAgICAgaW5zaWRlIHBjbG9zZS4gICovCistICBpZiAoZiAhPSBzdGRpbikKKysgIGlmIChwaXBlX3ApCisgICAgIHBjbG9zZSAoZik7CisrICBlbHNlCisrICAgIGd6Y2xvc2UgKGYpOworIAorICAgKnNpemVwID0gZmlsbGVkOworICAgcmV0dXJuIGRhdGE7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby91c2VfaG9zdF9tYWtlZG9jLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL3VzZV9ob3N0X21ha2Vkb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI3ZjMyZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby91c2VfaG9zdF9tYWtlZG9jLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY3Jvc3MgYnVpbGQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHRleGluZm8tNS4xL2luZm8vTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0ZXhpbmZvLTUuMS5vcmlnL2luZm8vTWFrZWZpbGUuYW0KKysrKyB0ZXhpbmZvLTUuMS9pbmZvL01ha2VmaWxlLmFtCitAQCAtNzYsNyArNzYsNyBAQCBjbWRfc291cmNlcyA9ICQoc3JjZGlyKS9zZXNzaW9uLmMgJChzcmNkCisgIyBtb3JlIHRoYW4gb25jZS4KKyBmdW5zLmg6IG1ha2Vkb2MkKEVYRUVYVCkgJChjbWRfc291cmNlcykKKyAJcm0gLWYgJChnZW5lcmF0ZWRfc291cmNlcykKKy0JJCh0b3BfYnVpbGRkaXIpLyQobmF0aXZlX3Rvb2xzKS9pbmZvL21ha2Vkb2MgJChjbWRfc291cmNlcykKKysJbWFrZWRvYyAkKGNtZF9zb3VyY2VzKQorIAorICMgVGhlIGZvbGxvd2luZyBoYWNrIGlzIG5lY2Vzc2FyeSB0byBoaW50IG1ha2UgYmVmb3JlIHRoZSBhdXRvbWF0aWMKKyAjIGRlcGVuZGVuY2llcyBhcmUgYnVpbHQuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm9fNC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzY3OGUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvXzQuOC5iYgpAQCAtMCwwICsxLDU1IEBACitTVU1NQVJZID0gIkRvY3VtZW50YXRpb24gc3lzdGVtIGZvciBvbi1saW5lIGluZm9ybWF0aW9uIGFuZCBwcmludGVkIG91dHB1dCIKK0RFU0NSSVBUSU9OID0gIlRleGluZm8gaXMgYSBkb2N1bWVudGF0aW9uIHN5c3RlbSB0aGF0IGNhbiBwcm9kdWNlIGJvdGggXAorb25saW5lIGluZm9ybWF0aW9uIGFuZCBwcmludGVkIG91dHB1dCBmcm9tIGEgc2luZ2xlIHNvdXJjZSBmaWxlLiBUaGUgXAorR05VIFByb2plY3QgdXNlcyB0aGUgVGV4aW5mbyBmaWxlIGZvcm1hdCBmb3IgbW9zdCBvZiBpdHMgZG9jdW1lbnRhdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK1BST1ZJREVTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIHRleGluZm8tNC44LXJlcGxhY2VtZW50LW5hdGl2ZSIKKworREVQRU5EUyA9ICJ6bGliIG5jdXJzZXMgdGV4aW5mby00LjgtcmVwbGFjZW1lbnQtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiemxpYi1uYXRpdmUgbmN1cnNlcy1uYXRpdmUiCisKK1RBUkdFVF9QQVRDSCA9ICJmaWxlOi8vdXNlX2hvc3RfbWFrZWRvYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91c2luZy1uYXRpdmUtbWFrZWluZm8ucGF0Y2ggXAorIgorVEFSR0VUX1BBVENIX2NsYXNzLW5hdGl2ZSA9ICIiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS90ZXhpbmZvLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jaGVjay1sb2NhbGUtaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kby1jb21waWxlLW5hdGl2ZS10b29scy5wYXRjaCBcCisgICAgICAgICAgICR7VEFSR0VUX1BBVENIfSBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGU5YTFhNTkxZWQyMzYwMDNkMGQ0YjAwOGJmMDdlZWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWYzY2RlZWJlNjVmZGY1MTBmNTVkNzY1YWIxMDMxYjU0NDE2YWE1YmMyNjM1YjZhNTRlZjliY2IyMzY3YzkxNyIKKwordGV4X3RleGluZm8gPSAidGV4bWYvdGV4L3RleGluZm8iCisKK2luaGVyaXQgZ2V0dGV4dCBhdXRvdG9vbHMKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbWtkaXIgLXAgJHtEfSR7ZGF0YWRpcn0vJHt0ZXhfdGV4aW5mb30KKwlpbnN0YWxsIC1wIC1tNjQ0ICR7U30vZG9jL3RleGluZm8udGV4ICR7U30vZG9jL3R4aS0/Py50ZXggJHtEfSR7ZGF0YWRpcn0vJHt0ZXhfdGV4aW5mb30KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWluc3RhbGwgLW0gNzU1IGluZm8vbWFrZWRvYyAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSA3NTUgbWFrZWluZm8vbWFrZWluZm8gJHtEfSR7YmluZGlyfQorfQorCitQQUNLQUdFUyArPSAiaW5mbyBpbmZvLWRvYyIKKworRklMRVNfaW5mbyA9ICIke2JpbmRpcn0vaW5mbyAke2JpbmRpcn0vaW5mb2tleSAke2JpbmRpcn0vaW5zdGFsbC1pbmZvIgorRklMRVNfaW5mby1kb2MgPSAiJHtpbmZvZGlyfS9pbmZvLmluZm8gJHtpbmZvZGlyfS9kaXIgJHtpbmZvZGlyfS9pbmZvLSouaW5mbyBcCisgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9pbmZvLjEqICR7bWFuZGlyfS9tYW41L2luZm8uNSogXAorICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvaW5mb2tleS4xKiAke21hbmRpcn0vbWFuMS9pbnN0YWxsLWluZm8uMSoiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9tYWtlaW5mbyAke2JpbmRpcn0vdGV4aSogJHtiaW5kaXJ9L3BkZnRleGkyZHZpICR7YmluZGlyfS9wb2QydGV4aSAke2RhdGFkaXJ9L3RleGluZm8iCitGSUxFU18ke1BOfS1kb2MgPSAiJHtpbmZvZGlyfS90ZXhpbmZvKiBcCisgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS8ke3RleF90ZXhpbmZvfSBcCisgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEgJHttYW5kaXJ9L21hbjUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvXzYuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mb182LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiNzE1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mb182LjAuYmIKQEAgLTAsMCArMSw4MiBAQAorU1VNTUFSWSA9ICJEb2N1bWVudGF0aW9uIHN5c3RlbSBmb3Igb24tbGluZSBpbmZvcm1hdGlvbiBhbmQgcHJpbnRlZCBvdXRwdXQiCitERVNDUklQVElPTiA9ICJUZXhpbmZvIGlzIGEgZG9jdW1lbnRhdGlvbiBzeXN0ZW0gdGhhdCBjYW4gcHJvZHVjZSBib3RoIFwKK29ubGluZSBpbmZvcm1hdGlvbiBhbmQgcHJpbnRlZCBvdXRwdXQgZnJvbSBhIHNpbmdsZSBzb3VyY2UgZmlsZS4gVGhlIFwKK0dOVSBQcm9qZWN0IHVzZXMgdGhlIFRleGluZm8gZmlsZSBmb3JtYXQgZm9yIG1vc3Qgb2YgaXRzIGRvY3VtZW50YXRpb24uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgdGV4aW5mby1yZXBsYWNlbWVudC1uYXRpdmUiCisKK2RlZiBjb21wcmVzc19wa2coZCk6CisgICAgaWYgImNvbXByZXNzX2RvYyIgaW4gKGQuZ2V0VmFyKCJJTkhFUklUIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICBjb21wcmVzcyA9IGQuZ2V0VmFyKCJET0NfQ09NUFJFU1MiLCBUcnVlKQorICAgICAgICAgaWYgY29tcHJlc3MgPT0gImd6IjoKKyAgICAgICAgICAgICByZXR1cm4gImd6aXAiCisgICAgICAgICBlbGlmIGNvbXByZXNzID09ICJiejIiOgorICAgICAgICAgICAgIHJldHVybiAiYnppcDIiCisgICAgICAgICBlbGlmIGNvbXByZXNzID09ICJ4eiI6CisgICAgICAgICAgICAgcmV0dXJuICJ4eiIKKyAgICByZXR1cm4gIiIKKworUkRFUEVORFNfaW5mbyArPSAiJHtAY29tcHJlc3NfcGtnKGQpfSIKKworREVQRU5EUyA9ICJ6bGliIG5jdXJzZXMgdGV4aW5mby1yZXBsYWNlbWVudC1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ6bGliLW5hdGl2ZSBuY3Vyc2VzLW5hdGl2ZSIKKworVEFSR0VUX1BBVENIID0gImZpbGU6Ly91c2VfaG9zdF9tYWtlZG9jLnBhdGNoIgorVEFSR0VUX1BBVENIX2NsYXNzLW5hdGl2ZSA9ICIiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS90ZXhpbmZvLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly90ZXhpbmZvLTQuMTItemxpYi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLW5hdGl2ZS10b29scy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saW5rLXppcC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgJHtUQVJHRVRfUEFUQ0h9IFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlMWEyZWY1ZGNlNTAxOGI1M2YwZjZlZWQ0NWIyNDdhNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4M2QzMTgzMjkwZjM0ZTdmOTU4ZDIwOWQwYjIwMDIyYzZmZTllOTIxZWI2ZmU5NGMyN2Q5ODg4MjdkNDg3OGQyIgorCit0ZXhfdGV4aW5mbyA9ICJ0ZXhtZi90ZXgvdGV4aW5mbyIKKworaW5oZXJpdCBnZXR0ZXh0IGF1dG90b29scworCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBhdXRvdG9vbHNfZG9fY29uZmlndXJlIHVwZGF0ZXMgcG8vTWFrZWZpbGUuaW4uaW4sIHdlIGFsc28gbmVlZAorCSMgdXBkYXRlIHBvX2RvY3VtZW50LgorCWNwIC1mICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiAke1N9L3BvX2RvY3VtZW50LworfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJaWYgWyAtZCB0b29scyBdO3RoZW4KKwkJb2VfcnVubWFrZSAtQyB0b29scy9nbnVsaWIvbGliCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbWtkaXIgLXAgJHtEfSR7ZGF0YWRpcn0vJHt0ZXhfdGV4aW5mb30KKwlpbnN0YWxsIC1wIC1tNjQ0ICR7U30vZG9jL3RleGluZm8udGV4ICR7U30vZG9jL3R4aS0/Py50ZXggJHtEfSR7ZGF0YWRpcn0vJHt0ZXhfdGV4aW5mb30KKwlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhICR7VVNSQklOUEFUSH0vZW52IHBlcmwsJyAke0R9JHtiaW5kaXJ9L3RleGkyYW55ICR7RH0ke2JpbmRpcn0vcG9kMnRleGkKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWluc3RhbGwgLW0gNzU1IGluZm8vbWFrZWRvYyAke0R9JHtiaW5kaXJ9Cit9CisKK1BBQ0tBR0VTICs9ICJpbmZvIGluZm8tZG9jIgorCitGSUxFU19pbmZvID0gIiR7YmluZGlyfS9pbmZvICR7YmluZGlyfS9pbmZva2V5ICR7YmluZGlyfS9pbnN0YWxsLWluZm8iCitGSUxFU19pbmZvLWRvYyA9ICIke2luZm9kaXJ9L2luZm8uaW5mbyogJHtpbmZvZGlyfS9kaXIgJHtpbmZvZGlyfS9pbmZvLSouaW5mbyogXAorICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvaW5mby4xKiAke21hbmRpcn0vbWFuNS9pbmZvLjUqIFwKKyAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xL2luZm9rZXkuMSogJHttYW5kaXJ9L21hbjEvaW5zdGFsbC1pbmZvLjEqIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vbWFrZWluZm8gJHtiaW5kaXJ9L3RleGkqICR7YmluZGlyfS9wZGZ0ZXhpMmR2aSAke2JpbmRpcn0vcG9kMnRleGkgJHtkYXRhZGlyfS90ZXhpbmZvIgorUkRFUEVORFNfJHtQTn0gPSAicGVybCIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke2luZm9kaXJ9L3RleGluZm8qIFwKKyAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9LyR7dGV4X3RleGluZm99IFwKKyAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMSAke21hbmRpcn0vbWFuNSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90aW1lL3RpbWUtMS43L2RlYmlhbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZS0xLjcvZGViaWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZWEwZTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90aW1lL3RpbWUtMS43L2RlYmlhbi5wYXRjaApAQCAtMCwwICsxLDEzMDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworLS0tIHRpbWUtMS43Lm9yaWcvY29uZmlndXJlLmluCisrKysgdGltZS0xLjcvY29uZmlndXJlLmluCitAQCAtMSwxMSArMSw4IEBACisgZG5sIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisgQUNfSU5JVCh0aW1lLmMpCistVkVSU0lPTj0xLjcKKy1BQ19TVUJTVChWRVJTSU9OKQorLVBBQ0tBR0U9dGltZQorLUFDX1NVQlNUKFBBQ0tBR0UpCisrQU1fSU5JVF9BVVRPTUFLRSh0aW1lLCAxLjcpCisgCistQUNfQVJHX1BST0dSQU0KKytBTV9NQUlOVEFJTkVSX01PREUKKyAKKyBkbmwgQ2hlY2tzIGZvciBwcm9ncmFtcy4KKyBBQ19QUk9HX0NDCitAQCAtMTUsNyArMTIsNyBAQAorIGRubCBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KKyBBQ19IRUFERVJfU1REQworIEFDX0hFQURFUl9TWVNfV0FJVAorLUFDX0NIRUNLX0hFQURFUlModW5pc3RkLmggc3RyaW5nLmggc3lzL3J1c2FnZS5oKQorK0FDX0NIRUNLX0hFQURFUlModW5pc3RkLmggc3RyaW5nLmggc3lzL3J1c2FnZS5oIHN5cy9yZXNvdXJjZS5oKQorIAorIGRubCBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorIEFDX0NfQ09OU1QKKy0tLSB0aW1lLTEuNy5vcmlnL3ZlcnNpb24udGV4aQorKysrIHRpbWUtMS43L3ZlcnNpb24udGV4aQorQEAgLTEsMyArMSwzIEBACistQHNldCBVUERBVEVEIDEyIEp1bmUgMTk5NgorK0BzZXQgVVBEQVRFRCA5IE1heSAyMDAyCisgQHNldCBFRElUSU9OIDEuNworIEBzZXQgVkVSU0lPTiAxLjcKKy0tLSB0aW1lLTEuNy5vcmlnL3RpbWUuYworKysrIHRpbWUtMS43L3RpbWUuYworQEAgLTE0Nyw2ICsxNDcsMTAgQEAKKyAgIE5VTEwKKyB9OworIAwKKysKKysvKiBJZiB0cnVlLCBkbyBub3Qgc2hvdyB0aGUgZXhpdCBtZXNzYWdlICovCisrc3RhdGljIGJvb2xlYW4gcXVpZXQ7CisrCisgLyogSWYgdHJ1ZSwgc2hvdyBhbiBFbmdsaXNoIGRlc2NyaXB0aW9uIG5leHQgdG8gZWFjaCBzdGF0aXN0aWMuICAqLworIHN0YXRpYyBib29sZWFuIHZlcmJvc2U7CisgCitAQCAtMTcyLDYgKzE3Niw3IEBACisgICB7ImhlbHAiLCBub19hcmd1bWVudCwgTlVMTCwgJ2gnfSwKKyAgIHsib3V0cHV0LWZpbGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ28nfSwKKyAgIHsicG9ydGFiaWxpdHkiLCBub19hcmd1bWVudCwgTlVMTCwgJ3AnfSwKKysgIHsicXVpZXQiLCBub19hcmd1bWVudCxOVUxMLCAncSd9LAorICAgeyJ2ZXJib3NlIiwgbm9fYXJndW1lbnQsIE5VTEwsICd2J30sCisgICB7InZlcnNpb24iLCBub19hcmd1bWVudCwgTlVMTCwgJ1YnfSwKKyAgIHtOVUxMLCBub19hcmd1bWVudCwgTlVMTCwgMH0KK0BAIC0zMzMsNyArMzM4LDggQEAKKyAgIGVsc2UgaWYgKFdJRlNJR05BTEVEIChyZXNwLT53YWl0c3RhdHVzKSkKKyAgICAgZnByaW50ZiAoZnAsICJDb21tYW5kIHRlcm1pbmF0ZWQgYnkgc2lnbmFsICVkXG4iLAorIAkgICAgIFdURVJNU0lHIChyZXNwLT53YWl0c3RhdHVzKSk7CistICBlbHNlIGlmIChXSUZFWElURUQgKHJlc3AtPndhaXRzdGF0dXMpICYmIFdFWElUU1RBVFVTIChyZXNwLT53YWl0c3RhdHVzKSkKKysgIGVsc2UgaWYgKFdJRkVYSVRFRCAocmVzcC0+d2FpdHN0YXR1cykgJiYgV0VYSVRTVEFUVVMgKHJlc3AtPndhaXRzdGF0dXMpCisrCSAgICYmICFxdWlldCkKKyAgICAgZnByaW50ZiAoZnAsICJDb21tYW5kIGV4aXRlZCB3aXRoIG5vbi16ZXJvIHN0YXR1cyAlZFxuIiwKKyAJICAgICBXRVhJVFNUQVRVUyAocmVzcC0+d2FpdHN0YXR1cykpOworIAorQEAgLTUyMyw2ICs1MjksNyBAQAorICAgY2hhciAqZm9ybWF0OwkJCS8qIEZvcm1hdCBmb3VuZCBpbiBlbnZpcm9ubWVudC4gICovCisgCisgICAvKiBJbml0aWFsaXplIHRoZSBvcHRpb24gZmxhZ3MuICAqLworKyAgcXVpZXQgPSBmYWxzZTsKKyAgIHZlcmJvc2UgPSBmYWxzZTsKKyAgIG91dGZpbGUgPSBOVUxMOworICAgb3V0ZnAgPSBzdGRlcnI7CitAQCAtNTM2LDcgKzU0Myw3IEBACisgICBpZiAoZm9ybWF0KQorICAgICBvdXRwdXRfZm9ybWF0ID0gZm9ybWF0OworIAorLSAgd2hpbGUgKChvcHRjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICIrYWY6bzpwdlYiLCBsb25nb3B0cywgKGludCAqKSAwKSkKKysgIHdoaWxlICgob3B0YyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LCAiK2FmOm86cHF2ViIsIGxvbmdvcHRzLCAoaW50ICopIDApKQorIAkgIT0gRU9GKQorICAgICB7CisgICAgICAgc3dpdGNoIChvcHRjKQorQEAgLTU1NSw2ICs1NjIsOSBAQAorIAljYXNlICdwJzoKKyAJICBvdXRwdXRfZm9ybWF0ID0gcG9zaXhfZm9ybWF0OworIAkgIGJyZWFrOworKwljYXNlICdxJzoKKysJICBxdWlldCA9IHRydWU7CisrCSAgYnJlYWs7CisgCWNhc2UgJ3YnOgorIAkgIHZlcmJvc2UgPSB0cnVlOworIAkgIGJyZWFrOworQEAgLTY0Miw5ICs2NTIsOSBAQAorICAgZmZsdXNoIChvdXRmcCk7CisgCisgICBpZiAoV0lGU1RPUFBFRCAocmVzLndhaXRzdGF0dXMpKQorLSAgICBleGl0IChXU1RPUFNJRyAocmVzLndhaXRzdGF0dXMpKTsKKysgICAgZXhpdCAoV1NUT1BTSUcgKHJlcy53YWl0c3RhdHVzKSArIDEyOCk7CisgICBlbHNlIGlmIChXSUZTSUdOQUxFRCAocmVzLndhaXRzdGF0dXMpKQorLSAgICBleGl0IChXVEVSTVNJRyAocmVzLndhaXRzdGF0dXMpKTsKKysgICAgZXhpdCAoV1RFUk1TSUcgKHJlcy53YWl0c3RhdHVzKSArIDEyOCk7CisgICBlbHNlIGlmIChXSUZFWElURUQgKHJlcy53YWl0c3RhdHVzKSkKKyAgICAgZXhpdCAoV0VYSVRTVEFUVVMgKHJlcy53YWl0c3RhdHVzKSk7CisgfQorQEAgLTY1Nyw3ICs2NjcsNyBAQAorICAgZnByaW50ZiAoc3RyZWFtLCAiXAorIFVzYWdlOiAlcyBbLWFwdlZdIFstZiBmb3JtYXRdIFstbyBmaWxlXSBbLS1hcHBlbmRdIFstLXZlcmJvc2VdXG5cCisgICAgICAgIFstLXBvcnRhYmlsaXR5XSBbLS1mb3JtYXQ9Zm9ybWF0XSBbLS1vdXRwdXQ9ZmlsZV0gWy0tdmVyc2lvbl1cblwKKy0gICAgICAgWy0taGVscF0gY29tbWFuZCBbYXJnLi4uXVxuIiwKKysgICAgICAgWy0tcXVpZXRdIFstLWhlbHBdIGNvbW1hbmQgW2FyZy4uLl1cbiIsCisgCSAgIHByb2dyYW1fbmFtZSk7CisgICBleGl0IChzdGF0dXMpOworIH0KKy0tLSB0aW1lLTEuNy5vcmlnL3Jlc3VzZS5oCisrKysgdGltZS0xLjcvcmVzdXNlLmgKK0BAIC0zNiwxOSArMzYsOCBAQAorICMgaW5jbHVkZSA8c3lzL3J1c2FnZS5oPgorICNlbHNlCisgIyBkZWZpbmUgVFZfTVNFQyB0dl91c2VjIC8gMTAwMAorLSMgaWYgSEFWRV9XQUlUMworKyMgaWYgSEFWRV9TWVNfUkVTT1VSQ0VfSAorICMgIGluY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorLSMgZWxzZQorLS8qIFByb2Nlc3MgcmVzb3VyY2UgdXNhZ2Ugc3RydWN0dXJlLiAgKi8KKy1zdHJ1Y3QgcnVzYWdlCisteworLSAgc3RydWN0IHRpbWV2YWwgcnVfdXRpbWU7CS8qIFVzZXIgdGltZSB1c2VkLiAgKi8KKy0gIHN0cnVjdCB0aW1ldmFsIHJ1X3N0aW1lOwkvKiBTeXN0ZW0gdGltZSB1c2VkLiAgKi8KKy0gIGludCBydV9tYXhyc3MsIHJ1X2l4cnNzLCBydV9pZHJzcywgcnVfaXNyc3MsCistICBydV9taW5mbHQsIHJ1X21hamZsdCwgcnVfbnN3YXAsIHJ1X2luYmxvY2ssIAorLSAgcnVfb3VibG9jaywgcnVfbXNnc25kLCBydV9tc2dyY3YsIHJ1X25zaWduYWxzLAorLSAgcnVfbnZjc3csIHJ1X25pdmNzdzsKKy19OworICMgZW5kaWYKKyAjZW5kaWYKKyAKKy0tLSB0aW1lLTEuNy5vcmlnL3RpbWUudGV4aQorKysrIHRpbWUtMS43L3RpbWUudGV4aQorQEAgLTExLDYgKzExLDEyIEBACisgQGZpbmFsb3V0CisgQGVuZCBpZnRleAorIAorK0BkaXJjYXRlZ29yeSBJbmRpdmlkdWFsIHV0aWxpdGllcworK0BkaXJlbnRyeQorKyogdGltZTogKHRpbWUpLiAgICAgICAgICAgICAgICAgICAgIFJ1biBwcm9ncmFtcyBhbmQgc3VtbWFyaXplCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHJlc291cmNlIHVzYWdlLgorK0BlbmQgZGlyZW50cnkKKysKKyBAaWZpbmZvCisgVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgdGhlIEdOVSBAY29kZXt0aW1lfSBjb21tYW5kIGZvciBydW5uaW5nIHByb2dyYW1zCisgYW5kIHN1bW1hcml6aW5nIHRoZSBzeXN0ZW0gcmVzb3VyY2VzIHRoZXkgdXNlLgorQEAgLTE4NSw2ICsxOTEsMTAgQEAKKyBzeXMgJVMKKyBAZW5kIGV4YW1wbGUKKyAKKytAaXRlbSAtcQorK0BpdGVteCAtLXF1aWV0CisrU3VwcHJlc3Mgbm9uLXplcm8gZXJyb3IgY29kZSBmcm9tIHRoZSBleGVjdXRlZCBwcm9ncmFtLgorKworIEBpdGVtIC12CisgQGl0ZW14IC0tdmVyYm9zZQorIEBjaW5kZXggZm9ybWF0CistLS0gdGltZS0xLjcub3JpZy90aW1lLmluZm8KKysrKyB0aW1lLTEuNy90aW1lLmluZm8KK0BAIC0xLDUgKzEsMTAgQEAKKy1UaGlzIGlzIEluZm8gZmlsZSAuL3RpbWUuaW5mbywgcHJvZHVjZWQgYnkgTWFrZWluZm8tMS41NSBmcm9tIHRoZSBpbnB1dAorLWZpbGUgdGltZS50ZXhpLgorK1RoaXMgaXMgdGltZS5pbmZvLCBwcm9kdWNlZCBieSBtYWtlaW5mbyB2ZXJzaW9uIDQuMSBmcm9tIHRpbWUudGV4aS4KKysKKytJTkZPLURJUi1TRUNUSU9OIEluZGl2aWR1YWwgdXRpbGl0aWVzCisrU1RBUlQtSU5GTy1ESVItRU5UUlkKKysqIHRpbWU6ICh0aW1lKS4gICAgICAgICAgICAgICAgICAgICBSdW4gcHJvZ3JhbXMgYW5kIHN1bW1hcml6ZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSByZXNvdXJjZSB1c2FnZS4KKytFTkQtSU5GTy1ESVItRU5UUlkKKyAKKyAgICBUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSB0aGUgR05VIGB0aW1lJyBjb21tYW5kIGZvciBydW5uaW5nIHByb2dyYW1zCisgYW5kIHN1bW1hcml6aW5nIHRoZSBzeXN0ZW0gcmVzb3VyY2VzIHRoZXkgdXNlLgorQEAgLTMxLDcgKzM2LDcgQEAKKyAKKyAqIFJlc291cmNlIE1lYXN1cmVtZW50OjogIE1lYXN1cmluZyBwcm9ncmFtIHJlc291cmNlIHVzZS4KKyAKKy0gLS0gVGhlIERldGFpbGVkIE5vZGUgTGlzdGluZyAtLQorKyAtLS0gVGhlIERldGFpbGVkIE5vZGUgTGlzdGluZyAtLS0KKyAKKyBNZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2UKKyAKK0BAIC01OCwxNCArNjMsMTQgQEAKKyAgICBUaGUgYHRpbWUnIGNvbW1hbmQgcnVucyBhbm90aGVyIHByb2dyYW0sIHRoZW4gZGlzcGxheXMgaW5mb3JtYXRpb24KKyBhYm91dCB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhhdCBwcm9ncmFtLCBjb2xsZWN0ZWQgYnkgdGhlIHN5c3RlbSB3aGlsZQorIHRoZSBwcm9ncmFtIHdhcyBydW5uaW5nLiAgWW91IGNhbiBzZWxlY3Qgd2hpY2ggaW5mb3JtYXRpb24gaXMgcmVwb3J0ZWQKKy1hbmQgdGhlIGZvcm1hdCBpbiB3aGljaCBpdCBpcyBzaG93biAoKm5vdGUgU2V0dGluZyBGb3JtYXQ6Oi4pLCBvciBoYXZlCisrYW5kIHRoZSBmb3JtYXQgaW4gd2hpY2ggaXQgaXMgc2hvd24gKCpub3RlIFNldHRpbmcgRm9ybWF0OjopLCBvciBoYXZlCisgYHRpbWUnIHNhdmUgdGhlIGluZm9ybWF0aW9uIGluIGEgZmlsZSBpbnN0ZWFkIG9mIGRpc3BsYXlpbmcgaXQgb24gdGhlCistc2NyZWVuICgqbm90ZSBSZWRpcmVjdGluZzo6LikuCisrc2NyZWVuICgqbm90ZSBSZWRpcmVjdGluZzo6KS4KKyAKKyAgICBUaGUgcmVzb3VyY2VzIHRoYXQgYHRpbWUnIGNhbiByZXBvcnQgb24gZmFsbCBpbnRvIHRoZSBnZW5lcmFsCisgY2F0ZWdvcmllcyBvZiB0aW1lLCBtZW1vcnksIGFuZCBJL08gYW5kIElQQyBjYWxscy4gIFNvbWUgc3lzdGVtcyBkbyBub3QKKyBwcm92aWRlIG11Y2ggaW5mb3JtYXRpb24gYWJvdXQgcHJvZ3JhbSByZXNvdXJjZSB1c2U7IGB0aW1lJyByZXBvcnRzCistdW5hdmFpbGFibGUgaW5mb3JtYXRpb24gYXMgemVybyB2YWx1ZXMgKCpub3RlIEFjY3VyYWN5OjouKS4KKyt1bmF2YWlsYWJsZSBpbmZvcm1hdGlvbiBhcyB6ZXJvIHZhbHVlcyAoKm5vdGUgQWNjdXJhY3k6OikuCisgCisgICAgVGhlIGZvcm1hdCBvZiB0aGUgYHRpbWUnIGNvbW1hbmQgaXM6CisgCitAQCAtMTMyLDYgKzEzNywxMCBAQAorICAgICAgICAgICB1c2VyICVVCisgICAgICAgICAgIHN5cyAlUworIAorK2AtcScKKytgLS1xdWlldCcKKysgICAgIFN1cHByZXNzIG5vbi16ZXJvIGVycm9yIGNvZGUgZnJvbSB0aGUgZXhlY3V0ZWQgcHJvZ3JhbS4KKysKKyBgLXYnCisgYC0tdmVyYm9zZScKKyAgICAgIFVzZSB0aGUgYnVpbHQtaW4gdmVyYm9zZSBmb3JtYXQsIHdoaWNoIGRpc3BsYXlzIGVhY2ggYXZhaWxhYmxlCitAQCAtMTc0LDcgKzE4Myw3IEBACisgICAgVGhlIHJlc291cmNlIHNwZWNpZmllcnMsIHdoaWNoIGFyZSBhIHN1cGVyc2V0IG9mIHRob3NlIHJlY29nbml6ZWQgYnkKKyB0aGUgYHRjc2gnIGJ1aWx0aW4gYHRpbWUnIGNvbW1hbmQsIGFyZSBsaXN0ZWQgYmVsb3cuICBOb3QgYWxsIHJlc291cmNlcworIGFyZSBtZWFzdXJlZCBieSBhbGwgdmVyc2lvbnMgb2YgVW5peCwgc28gc29tZSBvZiB0aGUgdmFsdWVzIG1pZ2h0IGJlCistcmVwb3J0ZWQgYXMgemVybyAoKm5vdGUgQWNjdXJhY3k6Oi4pLgorK3JlcG9ydGVkIGFzIHplcm8gKCpub3RlIEFjY3VyYWN5OjopLgorIAorICogTWVudToKKyAKK0BAIC0zMDgsMTEgKzMxNywxMSBAQAorIGAtbyBGSUxFJworIGAtLW91dHB1dD1GSUxFJworICAgICAgV3JpdGUgdGhlIHJlc291cmNlIHVzZSBzdGF0aXN0aWNzIHRvIEZJTEUuICBCeSBkZWZhdWx0LCB0aGlzCistICAgICAqb3ZlcndyaXRlcyogdGhlIGZpbGUsIGRlc3Ryb3lpbmcgdGhlIGZpbGUncyBwcmV2aW91cyBjb250ZW50cy4KKysgICAgIF9vdmVyd3JpdGVzXyB0aGUgZmlsZSwgZGVzdHJveWluZyB0aGUgZmlsZSdzIHByZXZpb3VzIGNvbnRlbnRzLgorIAorIGAtYScKKyBgLS1hcHBlbmQnCistICAgICAqQXBwZW5kKiB0aGUgcmVzb3VyY2UgdXNlIGluZm9ybWF0aW9uIHRvIHRoZSBvdXRwdXQgZmlsZSBpbnN0ZWFkCisrICAgICBfQXBwZW5kXyB0aGUgcmVzb3VyY2UgdXNlIGluZm9ybWF0aW9uIHRvIHRoZSBvdXRwdXQgZmlsZSBpbnN0ZWFkCisgICAgICBvZiBvdmVyd3JpdGluZyBpdC4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZnVsIHdpdGggdGhlIGAtbycgb3IKKyAgICAgIGAtLW91dHB1dCcgb3B0aW9uLgorIAorQEAgLTQzNyw3ICs0NDYsNyBAQAorIAorIGAtYScKKyBgLS1hcHBlbmQnCistICAgICAqQXBwZW5kKiB0aGUgcmVzb3VyY2UgdXNlIGluZm9ybWF0aW9uIHRvIHRoZSBvdXRwdXQgZmlsZSBpbnN0ZWFkCisrICAgICBfQXBwZW5kXyB0aGUgcmVzb3VyY2UgdXNlIGluZm9ybWF0aW9uIHRvIHRoZSBvdXRwdXQgZmlsZSBpbnN0ZWFkCisgICAgICBvZiBvdmVyd3JpdGluZyBpdC4KKyAKKyBgLWYgRk9STUFUJworQEAgLTQ2MiwxNyArNDcxLDE3IEBACisgCisgHworIFRhZyBUYWJsZToKKy1Ob2RlOiBUb3B/OTM0CistTm9kZTogUmVzb3VyY2UgTWVhc3VyZW1lbnR/MTcyNQorLU5vZGU6IFNldHRpbmcgRm9ybWF0fzM2NzgKKy1Ob2RlOiBGb3JtYXQgU3RyaW5nfzQ5MDcKKy1Ob2RlOiBUaW1lIFJlc291cmNlc382MjE0CistTm9kZTogTWVtb3J5IFJlc291cmNlc382ODQ0CistTm9kZTogSS9PIFJlc291cmNlc383NTQ5CistTm9kZTogQ29tbWFuZCBJbmZvfzg3NDcKKy1Ob2RlOiBSZWRpcmVjdGluZ384OTY0CistTm9kZTogRXhhbXBsZXN/OTc1NAorLU5vZGU6IEFjY3VyYWN5fzEyMDY0CistTm9kZTogSW52b2tpbmcgdGltZX8xMzU4NgorK05vZGU6IFRvcH8xMTE1CisrTm9kZTogUmVzb3VyY2UgTWVhc3VyZW1lbnR/MTkwOAorK05vZGU6IFNldHRpbmcgRm9ybWF0fzM4NTgKKytOb2RlOiBGb3JtYXQgU3RyaW5nfzUxNjQKKytOb2RlOiBUaW1lIFJlc291cmNlc382NDcwCisrTm9kZTogTWVtb3J5IFJlc291cmNlc383MTAwCisrTm9kZTogSS9PIFJlc291cmNlc383ODA1CisrTm9kZTogQ29tbWFuZCBJbmZvfzkwMDMKKytOb2RlOiBSZWRpcmVjdGluZ385MjIwCisrTm9kZTogRXhhbXBsZXN/MTAwMTAKKytOb2RlOiBBY2N1cmFjeX8xMjMyMAorK05vZGU6IEludm9raW5nIHRpbWV/MTM4NDIKKyAfCisgRW5kIFRhZyBUYWJsZQorLS0tIHRpbWUtMS43Lm9yaWcvdGltZS5odG1sCisrKysgdGltZS0xLjcvdGltZS5odG1sCitAQCAtMCwwICsxLDEwMjEgQEAKKys8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwL2xvb3NlLmR0ZCI+CisrPEhUTUw+CisrPCEtLSBDcmVhdGVkIG9uIFNlcHRlbWJlciwgMSAyMDAzIGJ5IHRleGkyaHRtbCAxLjY2IC0tPgorKzwhLS0KKytXcml0dGVuIGJ5OiBMaW9uZWwgQ29ucyA8TGlvbmVsLkNvbnNAY2Vybi5jaD4gKG9yaWdpbmFsIGF1dGhvcikKKysgICAgICAgICAgICBLYXJsIEJlcnJ5ICA8a2FybEBmcmVlZnJpZW5kcy5vcmc+CisrICAgICAgICAgICAgT2xhZiBCYWNobWFubiA8b2JhY2htYW5AbWF0aGVtYXRpay51bmkta2wuZGU+CisrICAgICAgICAgICAgYW5kIG1hbnkgb3RoZXJzLgorK01haW50YWluZWQgYnk6IE1hbnkgY3JlYXRpdmUgcGVvcGxlIDxkZXZAdGV4aTJodG1sLmN2c2hvbWUub3JnPgorK1NlbmQgYnVncyBhbmQgc3VnZ2VzdGlvbnMgdG8gPHVzZXJzQHRleGkyaHRtbC5jdnNob21lLm9yZz4KKysKKystLT4KKys8SEVBRD4KKys8VElUTEU+TWVhc3VyaW5nIFByb2dyYW0gUmVzb3VyY2UgVXNlPC9USVRMRT4KKysKKys8TUVUQSBOQU1FPSJkZXNjcmlwdGlvbiIgQ09OVEVOVD0iTWVhc3VyaW5nIFByb2dyYW0gUmVzb3VyY2UgVXNlIj4KKys8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0iTWVhc3VyaW5nIFByb2dyYW0gUmVzb3VyY2UgVXNlIj4KKys8TUVUQSBOQU1FPSJyZXNvdXJjZS10eXBlIiBDT05URU5UPSJkb2N1bWVudCI+CisrPE1FVEEgTkFNRT0iZGlzdHJpYnV0aW9uIiBDT05URU5UPSJnbG9iYWwiPgorKzxNRVRBIE5BTUU9IkdlbmVyYXRvciIgQ09OVEVOVD0idGV4aTJodG1sIDEuNjYiPgorKworKzwvSEVBRD4KKysKKys8Qk9EWSBMQU5HPSJlbiIgQkdDT0xPUj0iI0ZGRkZGRiIgVEVYVD0iIzAwMDAwMCIgTElOSz0iIzAwMDBGRiIgVkxJTks9IiM4MDAwODAiIEFMSU5LPSIjRkYwMDAwIj4KKysKKys8QSBOQU1FPSJTRUNfVG9wIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMT5NZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2U8L0gxPgorKworKzxQPgorKworK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIHRoZSBHTlUgPENPREU+dGltZTwvQ09ERT4gY29tbWFuZCBmb3IgcnVubmluZyBwcm9ncmFtcworK2FuZCBzdW1tYXJpemluZyB0aGUgc3lzdGVtIHJlc291cmNlcyB0aGV5IHVzZS4KKytUaGlzIGlzIGVkaXRpb24gMS43LCBmb3IgdmVyc2lvbiAxLjcuCisrPC9QPgorKzxQPgorKworKzwvUD4KKys8VEFCTEUgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4xLiBNZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2U8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5NZWFzdXJpbmcgcHJvZ3JhbSByZXNvdXJjZSB1c2UuPC9URD48L1RSPgorKzxUUj48VEggQ09MU1BBTj0iMyIgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj4KKys8L1RIPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPiAtLSBUaGUgRGV0YWlsZWQgTm9kZSBMaXN0aW5nIC0tLQorKzwvVEg+PC9UUj4KKys8VFI+PFRIIENPTFNQQU49IjMiIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+CisrPC9USD48L1RSPgorKzxUUj48VEggQ09MU1BBTj0iMyIgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5NZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2UKKys8L1RIPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPgorKzwvVEg+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzIiPjEuMSBTZXR0aW5nIHRoZSBPdXRwdXQgRm9ybWF0PC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+U2VsZWN0aW5nIHRoZSBpbmZvcm1hdGlvbiByZXBvcnRlZCBieSA8Q09ERT50aW1lPC9DT0RFPi48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUMzIj4xLjIgVGhlIEZvcm1hdCBTdHJpbmc8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5UaGUgaW5mb3JtYXRpb24gPENPREU+dGltZTwvQ09ERT4gY2FuIHJlcG9ydC48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM4Ij4xLjMgUmVkaXJlY3RpbmcgT3V0cHV0PC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+V3JpdGluZyB0aGUgaW5mb3JtYXRpb24gdG8gYSBmaWxlLjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzkiPjEuNCBFeGFtcGxlczwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPkV4YW1wbGVzIG9mIHVzaW5nIDxDT0RFPnRpbWU8L0NPREU+LjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzEwIj4xLjUgQWNjdXJhY3k8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5MaW1pdGF0aW9ucyBvbiB0aGUgYWNjdXJhY3kgb2YgPENPREU+dGltZTwvQ09ERT4gb3V0cHV0LjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzExIj4xLjYgUnVubmluZyB0aGUgPENPREU+dGltZTwvQ09ERT4gQ29tbWFuZDwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPlN1bW1hcnkgb2YgdGhlIG9wdGlvbnMgdG8gdGhlIDxDT0RFPnRpbWU8L0NPREU+IGNvbW1hbmQuPC9URD48L1RSPgorKzxUUj48VEggQ09MU1BBTj0iMyIgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj4KKys8L1RIPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPlRoZSBGb3JtYXQgU3RyaW5nCisrPC9USD48L1RSPgorKzxUUj48VEggQ09MU1BBTj0iMyIgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj4KKys8L1RIPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM0Ij4xLjIuMSBUaW1lIFJlc291cmNlczwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzUiPjEuMi4yIE1lbW9yeSBSZXNvdXJjZXM8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM2Ij4xLjIuMyBJL08gUmVzb3VyY2VzPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNyI+MS4yLjQgQ29tbWFuZCBJbmZvPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PC9URD48L1RSPgorKzwvVEFCTEU+CisrPFA+CisrCisrPEhSIFNJWkU9MT4KKys8QSBOQU1FPSJTRUMxIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMyIj4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZsdDsmbHQ7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxBIE5BTUU9IlJlc291cmNlIE1lYXN1cmVtZW50Ij48L0E+CisrPEgxPiAxLiBNZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2UgPC9IMT4KKys8IS0tZG9jaWQ6OlNFQzE6Oi0tPgorKzxQPgorKworK1RoZSA8Q09ERT50aW1lPC9DT0RFPiBjb21tYW5kIHJ1bnMgYW5vdGhlciBwcm9ncmFtLCB0aGVuIGRpc3BsYXlzIGluZm9ybWF0aW9uCisrYWJvdXQgdGhlIHJlc291cmNlcyB1c2VkIGJ5IHRoYXQgcHJvZ3JhbSwgY29sbGVjdGVkIGJ5IHRoZSBzeXN0ZW0gd2hpbGUKKyt0aGUgcHJvZ3JhbSB3YXMgcnVubmluZy4gIFlvdSBjYW4gc2VsZWN0IHdoaWNoIGluZm9ybWF0aW9uIGlzIHJlcG9ydGVkCisrYW5kIHRoZSBmb3JtYXQgaW4gd2hpY2ggaXQgaXMgc2hvd24gKHNlZSBzZWN0aW9uIDxBIEhSRUY9InRpbWUuaHRtbCNTRUMyIj4xLjEgU2V0dGluZyB0aGUgT3V0cHV0IEZvcm1hdDwvQT4pLCBvciBoYXZlCisrPENPREU+dGltZTwvQ09ERT4gc2F2ZSB0aGUgaW5mb3JtYXRpb24gaW4gYSBmaWxlIGluc3RlYWQgb2YgZGlzcGxheWluZyBpdCBvbiB0aGUKKytzY3JlZW4gKHNlZSBzZWN0aW9uIDxBIEhSRUY9InRpbWUuaHRtbCNTRUM4Ij4xLjMgUmVkaXJlY3RpbmcgT3V0cHV0PC9BPikuCisrPC9QPgorKzxQPgorKworK1RoZSByZXNvdXJjZXMgdGhhdCA8Q09ERT50aW1lPC9DT0RFPiBjYW4gcmVwb3J0IG9uIGZhbGwgaW50byB0aGUgZ2VuZXJhbAorK2NhdGVnb3JpZXMgb2YgdGltZSwgbWVtb3J5LCBhbmQgSS9PIGFuZCBJUEMgY2FsbHMuICBTb21lIHN5c3RlbXMgZG8gbm90CisrcHJvdmlkZSBtdWNoIGluZm9ybWF0aW9uIGFib3V0IHByb2dyYW0gcmVzb3VyY2UgdXNlOyA8Q09ERT50aW1lPC9DT0RFPgorK3JlcG9ydHMgdW5hdmFpbGFibGUgaW5mb3JtYXRpb24gYXMgemVybyB2YWx1ZXMgKHNlZSBzZWN0aW9uIDxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMCI+MS41IEFjY3VyYWN5PC9BPikuCisrPC9QPgorKzxQPgorKworK1RoZSBmb3JtYXQgb2YgdGhlIDxDT0RFPnRpbWU8L0NPREU+IGNvbW1hbmQgaXM6CisrPC9QPgorKzxQPgorKworKzxUQUJMRT48dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPWV4YW1wbGU+PHByZT50aW1lIFtvcHRpb248c21hbGw+Li4uPC9zbWFsbD5dIDxWQVI+Y29tbWFuZDwvVkFSPiBbPFZBUj5hcmc8L1ZBUj48c21hbGw+Li4uPC9zbWFsbD5dCisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrPEEgTkFNRT0iSURYMSI+PC9BPgorKzxDT0RFPnRpbWU8L0NPREU+IHJ1bnMgdGhlIHByb2dyYW0gPFZBUj5jb21tYW5kPC9WQVI+LCB3aXRoIGFueSBnaXZlbiBhcmd1bWVudHMKKys8VkFSPmFyZzwvVkFSPjxzbWFsbD4uLi48L3NtYWxsPi4gIFdoZW4gPFZBUj5jb21tYW5kPC9WQVI+IGZpbmlzaGVzLCA8Q09ERT50aW1lPC9DT0RFPiBkaXNwbGF5cworK2luZm9ybWF0aW9uIGFib3V0IHJlc291cmNlcyB1c2VkIGJ5IDxWQVI+Y29tbWFuZDwvVkFSPi4KKys8L1A+CisrPFA+CisrCisrSGVyZSBpcyBhbiBleGFtcGxlIG9mIHVzaW5nIDxDT0RFPnRpbWU8L0NPREU+IHRvIG1lYXN1cmUgdGhlIHRpbWUgYW5kIG90aGVyCisrcmVzb3VyY2VzIHVzZWQgYnkgcnVubmluZyB0aGUgcHJvZ3JhbSA8Q09ERT5ncmVwPC9DT0RFPjoKKys8L1A+CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPmVnJCB0aW1lIGdyZXAgbm9ib2R5IC9ldGMvYWxpYXNlcworK25vYm9keTovZGV2L251bGwKKytldGMtZmlsZXM6bm9ib2R5CisrbWlzYy1ncm91cDpub2JvZHkKKyswLjA3dXNlciAwLjUwc3lzdGVtIDA6MDYuNjllbGFwc2VkIDglQ1BVICgwYXZndGV4dCs0ODlhdmdkYXRhIDMyNG1heHJlc2lkZW50KWsKKys0NmlucHV0cys3b3V0cHV0cyAoNDNtYWpvcisyNTFtaW5vcilwYWdlZmF1bHRzIDBzd2FwcworKzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPjxQPgorKworK01haWwgc3VnZ2VzdGlvbnMgYW5kIGJ1ZyByZXBvcnRzIGZvciBHTlUgPENPREU+dGltZTwvQ09ERT4gdG8KKys8Q09ERT5idWctZ251LXV0aWxzQHByZXAuYWkubWl0LmVkdTwvQ09ERT4uICBQbGVhc2UgaW5jbHVkZSB0aGUgdmVyc2lvbiBvZgorKzxDT0RFPnRpbWU8L0NPREU+LCB3aGljaCB5b3UgY2FuIGdldCBieSBydW5uaW5nIGA8U0FNUD50aW1lIC0tdmVyc2lvbjwvU0FNUD4nLCBhbmQgdGhlCisrb3BlcmF0aW5nIHN5c3RlbSBhbmQgQyBjb21waWxlciB5b3UgdXNlZC4KKys8L1A+CisrPFA+CisrCisrPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMiI+MS4xIFNldHRpbmcgdGhlIE91dHB1dCBGb3JtYXQ8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5TZWxlY3RpbmcgdGhlIGluZm9ybWF0aW9uIHJlcG9ydGVkIGJ5IDxDT0RFPnRpbWU8L0NPREU+LjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzMiPjEuMiBUaGUgRm9ybWF0IFN0cmluZzwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPlRoZSBpbmZvcm1hdGlvbiA8Q09ERT50aW1lPC9DT0RFPiBjYW4gcmVwb3J0LjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzgiPjEuMyBSZWRpcmVjdGluZyBPdXRwdXQ8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5Xcml0aW5nIHRoZSBpbmZvcm1hdGlvbiB0byBhIGZpbGUuPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDOSI+MS40IEV4YW1wbGVzPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+RXhhbXBsZXMgb2YgdXNpbmcgPENPREU+dGltZTwvQ09ERT4uPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMTAiPjEuNSBBY2N1cmFjeTwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPkxpbWl0YXRpb25zIG9uIHRoZSBhY2N1cmFjeSBvZiA8Q09ERT50aW1lPC9DT0RFPiBvdXRwdXQuPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMTEiPjEuNiBSdW5uaW5nIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBDb21tYW5kPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+U3VtbWFyeSBvZiB0aGUgb3B0aW9ucyB0byB0aGUgPENPREU+dGltZTwvQ09ERT4gY29tbWFuZC48L1REPjwvVFI+CisrPC9UQUJMRT4KKys8UD4KKysKKys8QSBOQU1FPSJTZXR0aW5nIEZvcm1hdCI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUMyIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMzIj4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgyPiAxLjEgU2V0dGluZyB0aGUgT3V0cHV0IEZvcm1hdCA8L0gyPgorKzwhLS1kb2NpZDo6U0VDMjo6LS0+CisrPFA+CisrCisrPENPREU+dGltZTwvQ09ERT4gdXNlcyBhIDxFTT5mb3JtYXQgc3RyaW5nPC9FTT4gdG8gZGV0ZXJtaW5lIHdoaWNoIGluZm9ybWF0aW9uIHRvCisrZGlzcGxheSBhYm91dCB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIGNvbW1hbmQgaXQgcnVucy4gIFNlZSBzZWN0aW9uIDxBIEhSRUY9InRpbWUuaHRtbCNTRUMzIj4xLjIgVGhlIEZvcm1hdCBTdHJpbmc8L0E+LCBmb3IgdGhlIGludGVycHJldGF0aW9uIG9mIHRoZSBmb3JtYXQgc3RyaW5nIGNvbnRlbnRzLgorKzwvUD4KKys8UD4KKysKKytZb3UgY2FuIHNwZWNpZnkgYSBmb3JtYXQgc3RyaW5nIHdpdGggdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIGxpc3RlZAorK2JlbG93LiAgSWYgbm8gZm9ybWF0IGlzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBidXQgdGhlCisrPENPREU+VElNRTwvQ09ERT4gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCBpdHMgdmFsdWUgaXMgdXNlZCBhcyB0aGUgZm9ybWF0Cisrc3RyaW5nLiAgT3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCBmb3JtYXQgYnVpbHQgaW50byA8Q09ERT50aW1lPC9DT0RFPiBpcyB1c2VkOgorKzwvUD4KKys8UD4KKysKKys8VEFCTEU+PHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZCBjbGFzcz1leGFtcGxlPjxwcmU+JVV1c2VyICVTc3lzdGVtICVFZWxhcHNlZCAlUENQVSAoJVh0ZXh0KyVEZGF0YSAlTW1heClrCisrJUlpbnB1dHMrJU9vdXRwdXRzICglRm1ham9yKyVSbWlub3IpcGFnZWZhdWx0cyAlV3N3YXBzCisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrVGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIHNldCB0aGUgZm9ybWF0IGFyZToKKys8L1A+CisrPFA+CisrCisrPC9QPgorKzxETCBDT01QQUNUPgorKzxEVD48Q09ERT4tZiA8VkFSPmZvcm1hdDwvVkFSPjwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tZm9ybWF0PTxWQVI+Zm9ybWF0PC9WQVI+PC9DT0RFPgorKzxERD5Vc2UgPFZBUj5mb3JtYXQ8L1ZBUj4gYXMgdGhlIGZvcm1hdCBzdHJpbmcuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tcDwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tcG9ydGFiaWxpdHk8L0NPREU+CisrPEREPlVzZSB0aGUgZm9sbG93aW5nIGZvcm1hdCBzdHJpbmcsIGZvciBjb25mb3JtYW5jZSB3aXRoIFBPU0lYIHN0YW5kYXJkCisrMTAwMy4yOgorKzxQPgorKworKzxUQUJMRT48dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPWV4YW1wbGU+PHByZT5yZWFsICVlCisrdXNlciAlVQorK3N5cyAlUworKzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPjxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LXE8L0NPREU+CisrPEREPjxEVD48Q09ERT4tLXF1aWV0PC9DT0RFPgorKzxERD5TdXBwcmVzcyBub24temVybyBlcnJvciBjb2RlIGZyb20gdGhlIGV4ZWN1dGVkIHByb2dyYW0uCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tdjwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tdmVyYm9zZTwvQ09ERT4KKys8REQ+PEEgTkFNRT0iSURYMiI+PC9BPgorK1VzZSB0aGUgYnVpbHQtaW4gdmVyYm9zZSBmb3JtYXQsIHdoaWNoIGRpc3BsYXlzIGVhY2ggYXZhaWxhYmxlIHBpZWNlIG9mCisraW5mb3JtYXRpb24gb24gdGhlIHByb2dyYW0ncyByZXNvdXJjZSB1c2Ugb24gaXRzIG93biBsaW5lLCB3aXRoIGFuCisrRW5nbGlzaCBkZXNjcmlwdGlvbiBvZiBpdHMgbWVhbmluZy4KKys8L0RMPgorKzxQPgorKworKzxBIE5BTUU9IkZvcm1hdCBTdHJpbmciPjwvQT4KKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDMyI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMiI+ICZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNCI+ICZndDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMj4gMS4yIFRoZSBGb3JtYXQgU3RyaW5nIDwvSDI+CisrPCEtLWRvY2lkOjpTRUMzOjotLT4KKys8UD4KKysKKys8QSBOQU1FPSJJRFgzIj48L0E+CisrPEEgTkFNRT0iSURYNCI+PC9BPgorK1RoZSA8RU0+Zm9ybWF0IHN0cmluZzwvRU0+IGNvbnRyb2xzIHRoZSBjb250ZW50cyBvZiB0aGUgPENPREU+dGltZTwvQ09ERT4gb3V0cHV0LgorK0l0IGNvbnNpc3RzIG9mIDxFTT5yZXNvdXJjZSBzcGVjaWZpZXJzPC9FTT4gYW5kIDxFTT5lc2NhcGVzPC9FTT4sIGludGVyc3BlcnNlZAorK3dpdGggcGxhaW4gdGV4dC4KKys8L1A+CisrPFA+CisrCisrQSBiYWNrc2xhc2ggaW50cm9kdWNlcyBhbiA8RU0+ZXNjYXBlPC9FTT4sIHdoaWNoIGlzIHRyYW5zbGF0ZWQKKytpbnRvIGEgc2luZ2xlIHByaW50aW5nIGNoYXJhY3RlciB1cG9uIG91dHB1dC4gIFRoZSB2YWxpZCBlc2NhcGVzIGFyZQorK2xpc3RlZCBiZWxvdy4gIEFuIGludmFsaWQgZXNjYXBlIGlzIG91dHB1dCBhcyBhIHF1ZXN0aW9uIG1hcmsgZm9sbG93ZWQKKytieSBhIGJhY2tzbGFzaC4KKys8L1A+CisrPFA+CisrCisrPC9QPgorKzxETCBDT01QQUNUPgorKzxEVD48Q09ERT5cdDwvQ09ERT4KKys8REQ+YSB0YWIgY2hhcmFjdGVyCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5cbjwvQ09ERT4KKys8REQ+YSBuZXdsaW5lCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5cXDwvQ09ERT4KKys8REQ+YSBsaXRlcmFsIGJhY2tzbGFzaAorKzwvREw+CisrPFA+CisrCisrPENPREU+dGltZTwvQ09ERT4gYWx3YXlzIHByaW50cyBhIG5ld2xpbmUgYWZ0ZXIgcHJpbnRpbmcgdGhlIHJlc291cmNlIHVzZQorK2luZm9ybWF0aW9uLCBzbyBub3JtYWxseSBmb3JtYXQgc3RyaW5ncyBkbyBub3QgZW5kIHdpdGggYSBuZXdsaW5lCisrY2hhcmFjdGVyIChvciBgPFNBTVA+XG48L1NBTVA+JykuCisrPC9QPgorKzxQPgorKworK0EgcmVzb3VyY2Ugc3BlY2lmaWVyIGNvbnNpc3RzIG9mIGEgcGVyY2VudCBzaWduIGZvbGxvd2VkIGJ5IGFub3RoZXIKKytjaGFyYWN0ZXIuICBBbiBpbnZhbGlkIHJlc291cmNlIHNwZWNpZmllciBpcyBvdXRwdXQgYXMgYSBxdWVzdGlvbiBtYXJrCisrZm9sbG93ZWQgYnkgdGhlIGludmFsaWQgY2hhcmFjdGVyLiAgVXNlIGA8U0FNUD4lJTwvU0FNUD4nIHRvIG91dHB1dCBhIGxpdGVyYWwKKytwZXJjZW50IHNpZ24uCisrPC9QPgorKzxQPgorKworK1RoZSByZXNvdXJjZSBzcGVjaWZpZXJzLCB3aGljaCBhcmUgYSBzdXBlcnNldCBvZiB0aG9zZSByZWNvZ25pemVkIGJ5IHRoZQorKzxDT0RFPnRjc2g8L0NPREU+IGJ1aWx0aW4gPENPREU+dGltZTwvQ09ERT4gY29tbWFuZCwgYXJlIGxpc3RlZCBiZWxvdy4gIE5vdCBhbGwKKytyZXNvdXJjZXMgYXJlIG1lYXN1cmVkIGJ5IGFsbCB2ZXJzaW9ucyBvZiBVbml4LCBzbyBzb21lIG9mIHRoZSB2YWx1ZXMKKyttaWdodCBiZSByZXBvcnRlZCBhcyB6ZXJvIChzZWUgc2VjdGlvbiA8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMTAiPjEuNSBBY2N1cmFjeTwvQT4pLgorKzwvUD4KKys8UD4KKysKKys8VEFCTEUgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM0Ij4xLjIuMSBUaW1lIFJlc291cmNlczwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzUiPjEuMi4yIE1lbW9yeSBSZXNvdXJjZXM8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM2Ij4xLjIuMyBJL08gUmVzb3VyY2VzPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNyI+MS4yLjQgQ29tbWFuZCBJbmZvPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PC9URD48L1RSPgorKzwvVEFCTEU+CisrPFA+CisrCisrPEEgTkFNRT0iVGltZSBSZXNvdXJjZXMiPjwvQT4KKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDNCI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMyI+ICZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNSI+ICZndDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMz4gMS4yLjEgVGltZSBSZXNvdXJjZXMgPC9IMz4KKys8IS0tZG9jaWQ6OlNFQzQ6Oi0tPgorKzxQPgorKworKzwvUD4KKys8REwgQ09NUEFDVD4KKys8RFQ+PENPREU+RTwvQ09ERT4KKys8REQ+RWxhcHNlZCByZWFsICh3YWxsIGNsb2NrKSB0aW1lIHVzZWQgYnkgdGhlIHByb2Nlc3MsIGluCisrW2hvdXJzOl1taW51dGVzOnNlY29uZHMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5lPC9DT0RFPgorKzxERD5FbGFwc2VkIHJlYWwgKHdhbGwgY2xvY2spIHRpbWUgdXNlZCBieSB0aGUgcHJvY2VzcywgaW4KKytzZWNvbmRzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+UzwvQ09ERT4KKys8REQ+VG90YWwgbnVtYmVyIG9mIENQVS1zZWNvbmRzIHVzZWQgYnkgdGhlIHN5c3RlbSBvbiBiZWhhbGYgb2YgdGhlIHByb2Nlc3MKKysoaW4ga2VybmVsIG1vZGUpLCBpbiBzZWNvbmRzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+VTwvQ09ERT4KKys8REQ+VG90YWwgbnVtYmVyIG9mIENQVS1zZWNvbmRzIHRoYXQgdGhlIHByb2Nlc3MgdXNlZCBkaXJlY3RseSAoaW4gdXNlcgorK21vZGUpLCBpbiBzZWNvbmRzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+UDwvQ09ERT4KKys8REQ+UGVyY2VudGFnZSBvZiB0aGUgQ1BVIHRoYXQgdGhpcyBqb2IgZ290LiAgVGhpcyBpcyBqdXN0IHVzZXIgKyBzeXN0ZW0KKyt0aW1lcyBkaXZpZWQgYnkgdGhlIHRvdGFsIHJ1bm5pbmcgdGltZS4KKys8L0RMPgorKzxQPgorKworKzxBIE5BTUU9Ik1lbW9yeSBSZXNvdXJjZXMiPjwvQT4KKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDNSI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNCI+ICZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNiI+ICZndDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMz4gMS4yLjIgTWVtb3J5IFJlc291cmNlcyA8L0gzPgorKzwhLS1kb2NpZDo6U0VDNTo6LS0+CisrPFA+CisrCisrPC9QPgorKzxETCBDT01QQUNUPgorKzxEVD48Q09ERT5NPC9DT0RFPgorKzxERD5NYXhpbXVtIHJlc2lkZW50IHNldCBzaXplIG9mIHRoZSBwcm9jZXNzIGR1cmluZyBpdHMgbGlmZXRpbWUsIGluCisrS2lsb2J5dGVzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+dDwvQ09ERT4KKys8REQ+QXZlcmFnZSByZXNpZGVudCBzZXQgc2l6ZSBvZiB0aGUgcHJvY2VzcywgaW4gS2lsb2J5dGVzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+SzwvQ09ERT4KKys8REQ+QXZlcmFnZSB0b3RhbCAoZGF0YStzdGFjayt0ZXh0KSBtZW1vcnkgdXNlIG9mIHRoZSBwcm9jZXNzLCBpbiBLaWxvYnl0ZXMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5EPC9DT0RFPgorKzxERD5BdmVyYWdlIHNpemUgb2YgdGhlIHByb2Nlc3MncyB1bnNoYXJlZCBkYXRhIGFyZWEsIGluIEtpbG9ieXRlcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPnA8L0NPREU+CisrPEREPkF2ZXJhZ2Ugc2l6ZSBvZiB0aGUgcHJvY2VzcydzIHVuc2hhcmVkIHN0YWNrLCBpbiBLaWxvYnl0ZXMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5YPC9DT0RFPgorKzxERD5BdmVyYWdlIHNpemUgb2YgdGhlIHByb2Nlc3MncyBzaGFyZWQgdGV4dCwgaW4gS2lsb2J5dGVzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+WjwvQ09ERT4KKys8REQ+U3lzdGVtJ3MgcGFnZSBzaXplLCBpbiBieXRlcy4gIFRoaXMgaXMgYSBwZXItc3lzdGVtIGNvbnN0YW50LCBidXQKKyt2YXJpZXMgYmV0d2VlbiBzeXN0ZW1zLgorKzwvREw+CisrPFA+CisrCisrPEEgTkFNRT0iSS9PIFJlc291cmNlcyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUM2Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM1Ij4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM3Ij4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgzPiAxLjIuMyBJL08gUmVzb3VyY2VzIDwvSDM+CisrPCEtLWRvY2lkOjpTRUM2OjotLT4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPkY8L0NPREU+CisrPEREPk51bWJlciBvZiBtYWpvciwgb3IgSS9PLXJlcXVpcmluZywgcGFnZSBmYXVsdHMgdGhhdCBvY2N1cnJlZCB3aGlsZSB0aGUKKytwcm9jZXNzIHdhcyBydW5uaW5nLiAgVGhlc2UgYXJlIGZhdWx0cyB3aGVyZSB0aGUgcGFnZSBoYXMgYWN0dWFsbHkKKyttaWdyYXRlZCBvdXQgb2YgcHJpbWFyeSBtZW1vcnkuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5SPC9DT0RFPgorKzxERD5OdW1iZXIgb2YgbWlub3IsIG9yIHJlY292ZXJhYmxlLCBwYWdlIGZhdWx0cy4gIFRoZXNlIGFyZSBwYWdlcyB0aGF0IGFyZQorK25vdCB2YWxpZCAoc28gdGhleSBmYXVsdCkgYnV0IHdoaWNoIGhhdmUgbm90IHlldCBiZWVuIGNsYWltZWQgYnkgb3RoZXIKKyt2aXJ0dWFsIHBhZ2VzLiAgVGh1cyB0aGUgZGF0YSBpbiB0aGUgcGFnZSBpcyBzdGlsbCB2YWxpZCBidXQgdGhlIHN5c3RlbQorK3RhYmxlcyBtdXN0IGJlIHVwZGF0ZWQuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5XPC9DT0RFPgorKzxERD5OdW1iZXIgb2YgdGltZXMgdGhlIHByb2Nlc3Mgd2FzIHN3YXBwZWQgb3V0IG9mIG1haW4gbWVtb3J5LgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+YzwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIHRpbWVzIHRoZSBwcm9jZXNzIHdhcyBjb250ZXh0LXN3aXRjaGVkIGludm9sdW50YXJpbHkgKGJlY2F1c2UKKyt0aGUgdGltZSBzbGljZSBleHBpcmVkKS4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPnc8L0NPREU+CisrPEREPk51bWJlciBvZiB0aW1lcyB0aGF0IHRoZSBwcm9ncmFtIHdhcyBjb250ZXh0LXN3aXRjaGVkIHZvbHVudGFyaWx5LCBmb3IKKytpbnN0YW5jZSB3aGlsZSB3YWl0aW5nIGZvciBhbiBJL08gb3BlcmF0aW9uIHRvIGNvbXBsZXRlLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+STwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIGZpbGUgc3lzdGVtIGlucHV0cyBieSB0aGUgcHJvY2Vzcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPk88L0NPREU+CisrPEREPk51bWJlciBvZiBmaWxlIHN5c3RlbSBvdXRwdXRzIGJ5IHRoZSBwcm9jZXNzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+cjwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIHNvY2tldCBtZXNzYWdlcyByZWNlaXZlZCBieSB0aGUgcHJvY2Vzcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPnM8L0NPREU+CisrPEREPk51bWJlciBvZiBzb2NrZXQgbWVzc2FnZXMgc2VudCBieSB0aGUgcHJvY2Vzcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPms8L0NPREU+CisrPEREPk51bWJlciBvZiBzaWduYWxzIGRlbGl2ZXJlZCB0byB0aGUgcHJvY2Vzcy4KKys8L0RMPgorKzxQPgorKworKzxBIE5BTUU9IkNvbW1hbmQgSW5mbyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUM3Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM2Ij4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM4Ij4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgzPiAxLjIuNCBDb21tYW5kIEluZm8gPC9IMz4KKys8IS0tZG9jaWQ6OlNFQzc6Oi0tPgorKzxQPgorKworKzwvUD4KKys8REwgQ09NUEFDVD4KKys8RFQ+PENPREU+QzwvQ09ERT4KKys8REQ+TmFtZSBhbmQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBvZiB0aGUgY29tbWFuZCBiZWluZyB0aW1lZC4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPng8L0NPREU+CisrPEREPkV4aXQgc3RhdHVzIG9mIHRoZSBjb21tYW5kLgorKzwvREw+CisrPFA+CisrCisrPEEgTkFNRT0iUmVkaXJlY3RpbmciPjwvQT4KKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDOCI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNyI+ICZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDOSI+ICZndDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMj4gMS4zIFJlZGlyZWN0aW5nIE91dHB1dCA8L0gyPgorKzwhLS1kb2NpZDo6U0VDODo6LS0+CisrPFA+CisrCisrQnkgZGVmYXVsdCwgPENPREU+dGltZTwvQ09ERT4gd3JpdGVzIHRoZSByZXNvdXJjZSB1c2Ugc3RhdGlzdGljcyB0byB0aGUKKytzdGFuZGFyZCBlcnJvciBzdHJlYW0uICBUaGUgb3B0aW9ucyBiZWxvdyBtYWtlIGl0IHdyaXRlIHRoZSBzdGF0aXN0aWNzCisrdG8gYSBmaWxlIGluc3RlYWQuICBEb2luZyB0aGlzIGNhbiBiZSB1c2VmdWwgaWYgdGhlIHByb2dyYW0geW91J3JlCisrcnVubmluZyB3cml0ZXMgdG8gdGhlIHN0YW5kYXJkIGVycm9yIG9yIHlvdSdyZSBydW5uaW5nIDxDT0RFPnRpbWU8L0NPREU+Cisrbm9uaW50ZXJhY3RpdmVseSBvciBpbiB0aGUgYmFja2dyb3VuZC4KKys8L1A+CisrPFA+CisrCisrPC9QPgorKzxETCBDT01QQUNUPgorKzxEVD48Q09ERT4tbyA8VkFSPmZpbGU8L1ZBUj48L0NPREU+CisrPEREPjxEVD48Q09ERT4tLW91dHB1dD08VkFSPmZpbGU8L1ZBUj48L0NPREU+CisrPEREPldyaXRlIHRoZSByZXNvdXJjZSB1c2Ugc3RhdGlzdGljcyB0byA8VkFSPmZpbGU8L1ZBUj4uICBCeSBkZWZhdWx0LCB0aGlzCisrPEVNPm92ZXJ3cml0ZXM8L0VNPiB0aGUgZmlsZSwgZGVzdHJveWluZyB0aGUgZmlsZSdzIHByZXZpb3VzIGNvbnRlbnRzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LWE8L0NPREU+CisrPEREPjxEVD48Q09ERT4tLWFwcGVuZDwvQ09ERT4KKys8REQ+PEVNPkFwcGVuZDwvRU0+IHRoZSByZXNvdXJjZSB1c2UgaW5mb3JtYXRpb24gdG8gdGhlIG91dHB1dCBmaWxlIGluc3RlYWQKKytvZiBvdmVyd3JpdGluZyBpdC4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZnVsIHdpdGggdGhlIGA8U0FNUD4tbzwvU0FNUD4nIG9yCisrYDxTQU1QPi0tb3V0cHV0PC9TQU1QPicgb3B0aW9uLgorKzwvREw+CisrPFA+CisrCisrPEEgTkFNRT0iRXhhbXBsZXMiPjwvQT4KKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDOSI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDOCI+ICZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMTAiPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDI+IDEuNCBFeGFtcGxlcyA8L0gyPgorKzwhLS1kb2NpZDo6U0VDOTo6LS0+CisrPFA+CisrCisrUnVuIHRoZSBjb21tYW5kIGA8U0FNUD53YyAvZXRjL2hvc3RzPC9TQU1QPicgYW5kIHNob3cgdGhlIGRlZmF1bHQgaW5mb3JtYXRpb246CisrPC9QPgorKzxQPgorKworKzxUQUJMRT48dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPWV4YW1wbGU+PHByZT5lZyQgdGltZSB3YyAvZXRjL2hvc3RzCisrICAgICAgMzUgICAgIDExMSAgICAxMTM0IC9ldGMvaG9zdHMKKyswLjAwdXNlciAwLjAxc3lzdGVtIDA6MDAuMDRlbGFwc2VkIDI1JUNQVSAoMGF2Z3RleHQrMGF2Z2RhdGEgMG1heHJlc2lkZW50KWsKKysxaW5wdXRzKzFvdXRwdXRzICgwbWFqb3IrMG1pbm9yKXBhZ2VmYXVsdHMgMHN3YXBzCisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrUnVuIHRoZSBjb21tYW5kIGA8U0FNUD5scyAtRnM8L1NBTVA+JyBhbmQgc2hvdyBqdXN0IHRoZSB1c2VyLCBzeXN0ZW0sIGFuZAorK3dhbGwtY2xvY2sgdGltZToKKys8L1A+CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPmVnJCB0aW1lIC1mICZxdW90O1x0JUUgcmVhbCxcdCVVIHVzZXIsXHQlUyBzeXMmcXVvdDsgbHMgLUZzCisrdG90YWwgMTYKKysxIGFjY291bnQvICAgICAgMSBkYi8gICAgICAgICAgIDEgbWFpbC8gICAgICAgICAxIHJ1bi8KKysxIGJhY2t1cHMvICAgICAgMSBlbWFjcy8gICAgICAgIDEgbXNncy8gICAgICAgICAxIHJ3aG8vCisrMSBjcmFzaC8gICAgICAgIDEgZ2FtZXMvICAgICAgICAxIHByZXNlcnZlLyAgICAgMSBzcG9vbC8KKysxIGNyb24vICAgICAgICAgMSBsb2cvICAgICAgICAgIDEgcXVvdGFzLyAgICAgICAxIHRtcC8KKysgICAgICAgIDA6MDAuMDMgcmVhbCwgICAwLjAwIHVzZXIsICAgICAgMC4wMSBzeXMKKys8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48UD4KKysKKytFZGl0IHRoZSBmaWxlIGA8VFQ+LmJhc2hyYzwvVFQ+JyBhbmQgaGF2ZSA8Q09ERT50aW1lPC9DT0RFPiBhcHBlbmQgdGhlIGVsYXBzZWQgdGltZQorK2FuZCBudW1iZXIgb2Ygc2lnbmFscyB0byB0aGUgZmlsZSBgPFRUPmxvZzwvVFQ+JywgcmVhZGluZyB0aGUgZm9ybWF0IHN0cmluZworK2Zyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDxDT0RFPlRJTUU8L0NPREU+OgorKzwvUD4KKys8UD4KKysKKys8VEFCTEU+PHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZCBjbGFzcz1leGFtcGxlPjxwcmU+ZWckIGV4cG9ydCBUSU1FPSZxdW90O1x0JUUsXHQlayZxdW90OyAjIElmIHVzaW5nIGJhc2ggb3Iga3NoCisrZWckIHNldGVudiBUSU1FICZxdW90O1x0JUUsXHQlayZxdW90OyAjIElmIHVzaW5nIGNzaCBvciB0Y3NoCisrZWckIHRpbWUgLWEgLW8gbG9nIGVtYWNzIC5iYXNocmMKKytlZyQgY2F0IGxvZworKyAgICAgICAgMDoxNi41NSwgICAgICAgIDcyNgorKzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPjxQPgorKworK1J1biB0aGUgY29tbWFuZCBgPFNBTVA+c2xlZXAgNDwvU0FNUD4nIGFuZCBzaG93IGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgaXQKKyt2ZXJib3NlbHk6CisrPC9QPgorKzxQPgorKworKzxUQUJMRT48dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPWV4YW1wbGU+PHByZT5lZyQgdGltZSAtdiBzbGVlcCA0CisrICAgICAgICBDb21tYW5kIGJlaW5nIHRpbWVkOiAmcXVvdDtzbGVlcCA0JnF1b3Q7CisrICAgICAgICBVc2VyIHRpbWUgKHNlY29uZHMpOiAwLjAwCisrICAgICAgICBTeXN0ZW0gdGltZSAoc2Vjb25kcyk6IDAuMDUKKysgICAgICAgIFBlcmNlbnQgb2YgQ1BVIHRoaXMgam9iIGdvdDogMSUKKysgICAgICAgIEVsYXBzZWQgKHdhbGwgY2xvY2spIHRpbWUgKGg6bW06c3Mgb3IgbTpzcyk6IDA6MDQuMjYKKysgICAgICAgIEF2ZXJhZ2Ugc2hhcmVkIHRleHQgc2l6ZSAoa2J5dGVzKTogMzYKKysgICAgICAgIEF2ZXJhZ2UgdW5zaGFyZWQgZGF0YSBzaXplIChrYnl0ZXMpOiAyNAorKyAgICAgICAgQXZlcmFnZSBzdGFjayBzaXplIChrYnl0ZXMpOiAwCisrICAgICAgICBBdmVyYWdlIHRvdGFsIHNpemUgKGtieXRlcyk6IDYwCisrICAgICAgICBNYXhpbXVtIHJlc2lkZW50IHNldCBzaXplIChrYnl0ZXMpOiAzMgorKyAgICAgICAgQXZlcmFnZSByZXNpZGVudCBzZXQgc2l6ZSAoa2J5dGVzKTogMjQKKysgICAgICAgIE1ham9yIChyZXF1aXJpbmcgSS9PKSBwYWdlIGZhdWx0czogMworKyAgICAgICAgTWlub3IgKHJlY2xhaW1pbmcgYSBmcmFtZSkgcGFnZSBmYXVsdHM6IDAKKysgICAgICAgIFZvbHVudGFyeSBjb250ZXh0IHN3aXRjaGVzOiAxMQorKyAgICAgICAgSW52b2x1bnRhcnkgY29udGV4dCBzd2l0Y2hlczogMAorKyAgICAgICAgU3dhcHM6IDAKKysgICAgICAgIEZpbGUgc3lzdGVtIGlucHV0czogMworKyAgICAgICAgRmlsZSBzeXN0ZW0gb3V0cHV0czogMQorKyAgICAgICAgU29ja2V0IG1lc3NhZ2VzIHNlbnQ6IDAKKysgICAgICAgIFNvY2tldCBtZXNzYWdlcyByZWNlaXZlZDogMAorKyAgICAgICAgU2lnbmFscyBkZWxpdmVyZWQ6IDEKKysgICAgICAgIFBhZ2Ugc2l6ZSAoYnl0ZXMpOiA0MDk2CisrICAgICAgICBFeGl0IHN0YXR1czogMAorKzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPjxQPgorKworKzxBIE5BTUU9IkFjY3VyYWN5Ij48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzEwIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM5Ij4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMSI+ICZndDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMj4gMS41IEFjY3VyYWN5IDwvSDI+CisrPCEtLWRvY2lkOjpTRUMxMDo6LS0+CisrPFA+CisrCisrVGhlIGVsYXBzZWQgdGltZSBpcyBub3QgY29sbGVjdGVkIGF0b21pY2FsbHkgd2l0aCB0aGUgZXhlY3V0aW9uIG9mIHRoZQorK3Byb2dyYW07IGFzIGEgcmVzdWx0LCBpbiBiaXphcnJlIGNpcmN1bXN0YW5jZXMgKGlmIHRoZSA8Q09ERT50aW1lPC9DT0RFPgorK2NvbW1hbmQgZ2V0cyBzdG9wcGVkIG9yIHN3YXBwZWQgb3V0IGluIGJldHdlZW4gd2hlbiB0aGUgcHJvZ3JhbSBiZWluZworK3RpbWVkIGV4aXRzIGFuZCB3aGVuIDxDT0RFPnRpbWU8L0NPREU+IGNhbGN1bGF0ZXMgaG93IGxvbmcgaXQgdG9vayB0byBydW4pLCBpdAorK2NvdWxkIGJlIG11Y2ggbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBleGVjdXRpb24gdGltZS4KKys8L1A+CisrPFA+CisrCisrV2hlbiB0aGUgcnVubmluZyB0aW1lIG9mIGEgY29tbWFuZCBpcyB2ZXJ5IG5lYXJseSB6ZXJvLCBzb21lIHZhbHVlcworKyhlLmcuLCB0aGUgcGVyY2VudGFnZSBvZiBDUFUgdXNlZCkgbWF5IGJlIHJlcG9ydGVkIGFzIGVpdGhlciB6ZXJvICh3aGljaAorK2lzIHdyb25nKSBvciBhIHF1ZXN0aW9uIG1hcmsuCisrPC9QPgorKzxQPgorKworK01vc3QgaW5mb3JtYXRpb24gc2hvd24gYnkgPENPREU+dGltZTwvQ09ERT4gaXMgZGVyaXZlZCBmcm9tIHRoZSA8Q09ERT53YWl0MzwvQ09ERT4KKytzeXN0ZW0gY2FsbC4gIFRoZSBudW1iZXJzIGFyZSBvbmx5IGFzIGdvb2QgYXMgdGhvc2UgcmV0dXJuZWQgYnkKKys8Q09ERT53YWl0MzwvQ09ERT4uICBNYW55IHN5c3RlbXMgZG8gbm90IG1lYXN1cmUgYWxsIG9mIHRoZSByZXNvdXJjZXMgdGhhdAorKzxDT0RFPnRpbWU8L0NPREU+IGNhbiByZXBvcnQgb247IHRob3NlIHJlc291cmNlcyBhcmUgcmVwb3J0ZWQgYXMgemVyby4gIFRoZQorK3N5c3RlbXMgdGhhdCBtZWFzdXJlIG1vc3Qgb3IgYWxsIG9mIHRoZSByZXNvdXJjZXMgYXJlIGJhc2VkIG9uIDQuMiBvcgorKzQuM0JTRC4gIExhdGVyIEJTRCByZWxlYXNlcyB1c2UgZGlmZmVyZW50IG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgdGhhdAorK21lYXN1cmVzIGZld2VyIHJlc291cmNlcy4KKys8L1A+CisrPFA+CisrCisrT24gc3lzdGVtcyB0aGF0IGRvIG5vdCBoYXZlIGEgPENPREU+d2FpdDM8L0NPREU+IGNhbGwgdGhhdCByZXR1cm5zIHN0YXR1cworK2luZm9ybWF0aW9uLCB0aGUgPENPREU+dGltZXM8L0NPREU+IHN5c3RlbSBjYWxsIGlzIHVzZWQgaW5zdGVhZC4gIEl0IHByb3ZpZGVzCisrbXVjaCBsZXNzIGluZm9ybWF0aW9uIHRoYW4gPENPREU+d2FpdDM8L0NPREU+LCBzbyBvbiB0aG9zZSBzeXN0ZW1zIDxDT0RFPnRpbWU8L0NPREU+CisrcmVwb3J0cyBtb3N0IG9mIHRoZSByZXNvdXJjZXMgYXMgemVyby4KKys8L1A+CisrPFA+CisrCisrVGhlIGA8U0FNUD4lSTwvU0FNUD4nIGFuZCBgPFNBTVA+JU88L1NBTVA+JyB2YWx1ZXMgYXJlIGFsbGVnZWRseSBvbmx5ICZxdW90O3JlYWwmcXVvdDsgaW5wdXQKKythbmQgb3V0cHV0IGFuZCBkbyBub3QgaW5jbHVkZSB0aG9zZSBzdXBwbGllZCBieSBjYWNoaW5nIGRldmljZXMuICBUaGUKKyttZWFuaW5nIG9mICZxdW90O3JlYWwmcXVvdDsgSS9PIHJlcG9ydGVkIGJ5IGA8U0FNUD4lSTwvU0FNUD4nIGFuZCBgPFNBTVA+JU88L1NBTVA+JyBtYXkgYmUKKyttdWRkbGVkIGZvciB3b3Jrc3RhdGlvbnMsIGVzcGVjaWFsbHkgZGlza2xlc3Mgb25lcy4KKys8L1A+CisrPFA+CisrCisrPEEgTkFNRT0iSW52b2tpbmcgdGltZSI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUMxMSI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMTAiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgyPiAxLjYgUnVubmluZyB0aGUgPENPREU+dGltZTwvQ09ERT4gQ29tbWFuZCA8L0gyPgorKzwhLS1kb2NpZDo6U0VDMTE6Oi0tPgorKzxQPgorKworK1RoZSBmb3JtYXQgb2YgdGhlIDxDT0RFPnRpbWU8L0NPREU+IGNvbW1hbmQgaXM6CisrPC9QPgorKzxQPgorKworKzxUQUJMRT48dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPWV4YW1wbGU+PHByZT50aW1lIFtvcHRpb248c21hbGw+Li4uPC9zbWFsbD5dIDxWQVI+Y29tbWFuZDwvVkFSPiBbPFZBUj5hcmc8L1ZBUj48c21hbGw+Li4uPC9zbWFsbD5dCisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrPEEgTkFNRT0iSURYNSI+PC9BPgorKzxDT0RFPnRpbWU8L0NPREU+IHJ1bnMgdGhlIHByb2dyYW0gPFZBUj5jb21tYW5kPC9WQVI+LCB3aXRoIGFueSBnaXZlbiBhcmd1bWVudHMKKys8VkFSPmFyZzwvVkFSPjxzbWFsbD4uLi48L3NtYWxsPi4gIFdoZW4gPFZBUj5jb21tYW5kPC9WQVI+IGZpbmlzaGVzLCA8Q09ERT50aW1lPC9DT0RFPiBkaXNwbGF5cworK2luZm9ybWF0aW9uIGFib3V0IHJlc291cmNlcyB1c2VkIGJ5IDxWQVI+Y29tbWFuZDwvVkFSPiAob24gdGhlIHN0YW5kYXJkIGVycm9yCisrb3V0cHV0LCBieSBkZWZhdWx0KS4gIElmIDxWQVI+Y29tbWFuZDwvVkFSPiBleGl0cyB3aXRoIG5vbi16ZXJvIHN0YXR1cyBvciBpcworK3Rlcm1pbmF0ZWQgYnkgYSBzaWduYWwsIDxDT0RFPnRpbWU8L0NPREU+IGRpc3BsYXlzIGEgd2FybmluZyBtZXNzYWdlIGFuZCB0aGUKKytleGl0IHN0YXR1cyBvciBzaWduYWwgbnVtYmVyLgorKzwvUD4KKys8UD4KKysKKytPcHRpb25zIHRvIDxDT0RFPnRpbWU8L0NPREU+IG11c3QgYXBwZWFyIG9uIHRoZSBjb21tYW5kIGxpbmUgYmVmb3JlCisrPFZBUj5jb21tYW5kPC9WQVI+LiAgQW55dGhpbmcgb24gdGhlIGNvbW1hbmQgbGluZSBhZnRlciA8VkFSPmNvbW1hbmQ8L1ZBUj4gaXMKKytwYXNzZWQgYXMgYXJndW1lbnRzIHRvIDxWQVI+Y29tbWFuZDwvVkFSPi4KKys8L1A+CisrPFA+CisrCisrPC9QPgorKzxETCBDT01QQUNUPgorKzxEVD48Q09ERT4tbyA8VkFSPmZpbGU8L1ZBUj48L0NPREU+CisrPEREPjxEVD48Q09ERT4tLW91dHB1dD08VkFSPmZpbGU8L1ZBUj48L0NPREU+CisrPEREPldyaXRlIHRoZSByZXNvdXJjZSB1c2Ugc3RhdGlzdGljcyB0byA8VkFSPmZpbGU8L1ZBUj4uCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tYTwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tYXBwZW5kPC9DT0RFPgorKzxERD48RU0+QXBwZW5kPC9FTT4gdGhlIHJlc291cmNlIHVzZSBpbmZvcm1hdGlvbiB0byB0aGUgb3V0cHV0IGZpbGUgaW5zdGVhZAorK29mIG92ZXJ3cml0aW5nIGl0LgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LWYgPFZBUj5mb3JtYXQ8L1ZBUj48L0NPREU+CisrPEREPjxEVD48Q09ERT4tLWZvcm1hdD08VkFSPmZvcm1hdDwvVkFSPjwvQ09ERT4KKys8REQ+VXNlIDxWQVI+Zm9ybWF0PC9WQVI+IGFzIHRoZSBmb3JtYXQgc3RyaW5nLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LS1oZWxwPC9DT0RFPgorKzxERD5QcmludCBhIHN1bW1hcnkgb2YgdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIDxDT0RFPnRpbWU8L0NPREU+IGFuZCBleGl0LgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LXA8L0NPREU+CisrPEREPjxEVD48Q09ERT4tLXBvcnRhYmlsaXR5PC9DT0RFPgorKzxERD5Vc2UgdGhlIFBPU0lYIGZvcm1hdC4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPi12PC9DT0RFPgorKzxERD48RFQ+PENPREU+LS12ZXJib3NlPC9DT0RFPgorKzxERD48QSBOQU1FPSJJRFg2Ij48L0E+CisrVXNlIHRoZSBidWlsdC1pbiB2ZXJib3NlIGZvcm1hdC4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPi1WPC9DT0RFPgorKzxERD48RFQ+PENPREU+LS12ZXJzaW9uPC9DT0RFPgorKzxERD48QSBOQU1FPSJJRFg3Ij48L0E+CisrUHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyIG9mIDxDT0RFPnRpbWU8L0NPREU+IGFuZCBleGl0LgorKzwvREw+CisrPFA+CisrCisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQ19Db250ZW50cyI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDE+VGFibGUgb2YgQ29udGVudHM8L0gxPgorKzxCTE9DS1FVT1RFPgorKzxBIE5BTUU9IlRPQzEiIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4xLiBNZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2U8L0E+CisrPEJSPgorKzxCTE9DS1FVT1RFPgorKzxBIE5BTUU9IlRPQzIiIEhSRUY9InRpbWUuaHRtbCNTRUMyIj4xLjEgU2V0dGluZyB0aGUgT3V0cHV0IEZvcm1hdDwvQT4KKys8QlI+CisrPEEgTkFNRT0iVE9DMyIgSFJFRj0idGltZS5odG1sI1NFQzMiPjEuMiBUaGUgRm9ybWF0IFN0cmluZzwvQT4KKys8QlI+CisrPEJMT0NLUVVPVEU+CisrPEEgTkFNRT0iVE9DNCIgSFJFRj0idGltZS5odG1sI1NFQzQiPjEuMi4xIFRpbWUgUmVzb3VyY2VzPC9BPgorKzxCUj4KKys8QSBOQU1FPSJUT0M1IiBIUkVGPSJ0aW1lLmh0bWwjU0VDNSI+MS4yLjIgTWVtb3J5IFJlc291cmNlczwvQT4KKys8QlI+CisrPEEgTkFNRT0iVE9DNiIgSFJFRj0idGltZS5odG1sI1NFQzYiPjEuMi4zIEkvTyBSZXNvdXJjZXM8L0E+CisrPEJSPgorKzxBIE5BTUU9IlRPQzciIEhSRUY9InRpbWUuaHRtbCNTRUM3Ij4xLjIuNCBDb21tYW5kIEluZm88L0E+CisrPEJSPgorKzwvQkxPQ0tRVU9URT4KKys8QSBOQU1FPSJUT0M4IiBIUkVGPSJ0aW1lLmh0bWwjU0VDOCI+MS4zIFJlZGlyZWN0aW5nIE91dHB1dDwvQT4KKys8QlI+CisrPEEgTkFNRT0iVE9DOSIgSFJFRj0idGltZS5odG1sI1NFQzkiPjEuNCBFeGFtcGxlczwvQT4KKys8QlI+CisrPEEgTkFNRT0iVE9DMTAiIEhSRUY9InRpbWUuaHRtbCNTRUMxMCI+MS41IEFjY3VyYWN5PC9BPgorKzxCUj4KKys8QSBOQU1FPSJUT0MxMSIgSFJFRj0idGltZS5odG1sI1NFQzExIj4xLjYgUnVubmluZyB0aGUgPENPREU+dGltZTwvQ09ERT4gQ29tbWFuZDwvQT4KKys8QlI+CisrPC9CTE9DS1FVT1RFPgorKzwvQkxPQ0tRVU9URT4KKys8SFIgU0laRT0xPgorKzxBIE5BTUU9IlNFQ19PVkVSVklFVyI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDE+U2hvcnQgVGFibGUgb2YgQ29udGVudHM8L0gxPgorKzxCTE9DS1FVT1RFPgorKzxBIE5BTUU9IlRPQzEiIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4xLiBNZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2U8L0E+CisrPEJSPgorKworKzwvQkxPQ0tRVU9URT4KKys8SFIgU0laRT0xPgorKzxBIE5BTUU9IlNFQ19BYm91dCI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDE+QWJvdXQgdGhpcyBkb2N1bWVudDwvSDE+CisrVGhpcyBkb2N1bWVudCB3YXMgZ2VuZXJhdGVkCisrYnkgCisrdXNpbmcgPEEgSFJFRj0iaHR0cDovL3RleGkyaHRtbC5jdnNob21lLm9yZyI+PEk+dGV4aTJodG1sPC9JPjwvQT4KKys8UD48L1A+CisrVGhlIGJ1dHRvbnMgaW4gdGhlIG5hdmlnYXRpb24gcGFuZWxzIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nOgorKzxQPjwvUD4KKys8dGFibGUgYm9yZGVyID0gIjEiPgorKzxUUj4KKys8VEg+IEJ1dHRvbiA8L1RIPgorKzxUSD4gTmFtZSA8L1RIPgorKzxUSD4gR28gdG8gPC9USD4KKys8VEg+IEZyb20gMS4yLjMgZ28gdG88L1RIPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgWyAmbHQ7IF0gPC9URD4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrQmFjaworKzwvVEQ+CisrPFREPgorK3ByZXZpb3VzIHNlY3Rpb24gaW4gcmVhZGluZyBvcmRlcgorKzwvVEQ+CisrPFREPgorKzEuMi4yCisrPC9URD4KKys8L1RSPgorKzxUUj4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrIFsgJmd0OyBdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK0ZvcndhcmQKKys8L1REPgorKzxURD4KKytuZXh0IHNlY3Rpb24gaW4gcmVhZGluZyBvcmRlcgorKzwvVEQ+CisrPFREPgorKzEuMi40CisrPC9URD4KKys8L1RSPgorKzxUUj4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrIFsgJmx0OyZsdDsgXSA8L1REPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKytGYXN0QmFjaworKzwvVEQ+CisrPFREPgorK2JlZ2lubmluZyBvZiB0aGlzIGNoYXB0ZXIgb3IgcHJldmlvdXMgY2hhcHRlcgorKzwvVEQ+CisrPFREPgorKzEKKys8L1REPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgWyBVcCBdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK1VwCisrPC9URD4KKys8VEQ+CisrdXAgc2VjdGlvbgorKzwvVEQ+CisrPFREPgorKzEuMgorKzwvVEQ+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbICZndDsmZ3Q7IF0gPC9URD4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrRmFzdEZvcndhcmQKKys8L1REPgorKzxURD4KKytuZXh0IGNoYXB0ZXIKKys8L1REPgorKzxURD4KKysyCisrPC9URD4KKys8L1RSPgorKzxUUj4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrIFtUb3BdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK1RvcAorKzwvVEQ+CisrPFREPgorK2NvdmVyICh0b3ApIG9mIGRvY3VtZW50CisrPC9URD4KKys8VEQ+CisrICZuYnNwOyAKKys8L1REPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgW0NvbnRlbnRzXSA8L1REPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKytDb250ZW50cworKzwvVEQ+CisrPFREPgorK3RhYmxlIG9mIGNvbnRlbnRzCisrPC9URD4KKys8VEQ+CisrICZuYnNwOyAKKys8L1REPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgW0luZGV4XSA8L1REPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKytJbmRleAorKzwvVEQ+CisrPFREPgorK2NvbmNlcHQgaW5kZXgKKys8L1REPgorKzxURD4KKysgJm5ic3A7IAorKzwvVEQ+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbID8gXSA8L1REPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKytBYm91dAorKzwvVEQ+CisrPFREPgorK3RoaXMgcGFnZQorKzwvVEQ+CisrPFREPgorKyAmbmJzcDsgCisrPC9URD4KKys8L1RSPgorKzwvVEFCTEU+CisrICAgIDxQPgorKyAgICAgIHdoZXJlIHRoZSA8U1RST05HPiBFeGFtcGxlIDwvU1RST05HPiBhc3N1bWVzIHRoYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24KKysgICAgICBpcyBhdCA8U1RST05HPiBTdWJzdWJzZWN0aW9uIE9uZS1Ud28tVGhyZWUgPC9TVFJPTkc+IG9mIGEgZG9jdW1lbnQgb2YKKysgICAgICB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTo8L1A+CisrICAgIDxVTD4KKysgICAgICA8TEk+IDEuIFNlY3Rpb24gT25lCisrICAgICAgICA8VUw+CisrICAgICAgICAgIDxMST4xLjEgU3Vic2VjdGlvbiBPbmUtT25lCisrICAgICAgICAgICAgPFVMPgorKyAgICAgICAgICAgICAgPExJPi4uLjwvTEk+CisrICAgICAgICAgICAgPC9VTD4KKysgICAgICAgICAgPExJPjEuMiBTdWJzZWN0aW9uIE9uZS1Ud28KKysgICAgICAgICAgICA8VUw+CisrICAgICAgICAgICAgICA8TEk+MS4yLjEgU3Vic3Vic2VjdGlvbiBPbmUtVHdvLU9uZTwvTEk+CisrICAgICAgICAgICAgICA8TEk+MS4yLjIgU3Vic3Vic2VjdGlvbiBPbmUtVHdvLVR3bzwvTEk+CisrICAgICAgICAgICAgICA8TEk+MS4yLjMgU3Vic3Vic2VjdGlvbiBPbmUtVHdvLVRocmVlICZuYnNwOyAmbmJzcDsKKysgICAgICAgICAgICAgICAgPFNUUk9ORz4mbHQ7PT0gQ3VycmVudCBQb3NpdGlvbiA8L1NUUk9ORz48L0xJPgorKyAgICAgICAgICAgICAgPExJPjEuMi40IFN1YnN1YnNlY3Rpb24gT25lLVR3by1Gb3VyPC9MST4KKysgICAgICAgICAgICA8L1VMPgorKyAgICAgICAgICA8L0xJPgorKyAgICAgICAgICA8TEk+MS4zIFN1YnNlY3Rpb24gT25lLVRocmVlCisrICAgICAgICAgICAgPFVMPgorKyAgICAgICAgICAgICAgPExJPi4uLjwvTEk+CisrICAgICAgICAgICAgPC9VTD4KKysgICAgICAgICAgPC9MST4KKysgICAgICAgICAgPExJPjEuNCBTdWJzZWN0aW9uIE9uZS1Gb3VyPC9MST4KKysgICAgICAgIDwvVUw+CisrICAgICAgPC9MST4KKysgICAgPC9VTD4KKysKKys8SFIgU0laRT0xPgorKzxCUj4KKys8Rk9OVCBTSVpFPSItMSI+CisrVGhpcyBkb2N1bWVudCB3YXMgZ2VuZXJhdGVkCisrYnkgPEk+cm9vdDwvST4gb24gPEk+U2VwdGVtYmVyLCAxIDIwMDM8L0k+CisrdXNpbmcgPEEgSFJFRj0iaHR0cDovL3RleGkyaHRtbC5jdnNob21lLm9yZyI+PEk+dGV4aTJodG1sPC9JPjwvQT4KKys8L0ZPTlQ+CisrCisrPC9CT0RZPgorKzwvSFRNTD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90aW1lL3RpbWUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ODYyMTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90aW1lL3RpbWUuaW5jCkBAIC0wLDAgKzEsMTIgQEAKK1NVTU1BUlkgPSAiVG9vbCB0aGF0IG1lYXN1cmVzIENQVSByZXNvdXJjZXMiCitERVNDUklQVElPTiA9ICJ0aW1lIG1lYXN1cmVzIG1hbnkgb2YgdGhlIENQVSByZXNvdXJjZXMsIHN1Y2ggYXMgdGltZSBhbmQgXAorbWVtb3J5LCB0aGF0IG90aGVyIHByb2dyYW1zIHVzZS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGltZS8iCitTRUNUSU9OID0gInV0aWxzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Y2E0M2NiYzg0MmMyMzM2ZTgzNTkyNmMyMTY2YzI4YiIKKworaW5oZXJpdCB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAidGltZSIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZV8xLjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90aW1lL3RpbWVfMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYzUzNTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90aW1lL3RpbWVfMS43LmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgdGltZS5pbmMKKworUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS90aW1lL3RpbWUtJHtQVn0udGFyLmd6IFwKKwkgICBmaWxlOi8vZGViaWFuLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTM4ZDJiOGIzNGIxY2EyNTljZjdiMDUzY2FhYzMyYjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTM3ZWE3OWEyNTNiZjg1YTg1YWRhMmY3YzYzMmMxNGU0ODFhNWZkMjYyYTM2MmY2ZjRmZDU4ZTY4NjAxNDk2ZCIKKworaW5oZXJpdCBhdXRvdG9vbHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6Y29kZS90emNvZGUtbmF0aXZlXzIwMTVmLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpjb2RlL3R6Y29kZS1uYXRpdmVfMjAxNWYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg4NjVhMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6Y29kZS90emNvZGUtbmF0aXZlXzIwMTVmLmJiCkBAIC0wLDAgKzEsMjUgQEAKKyMgbm90ZSB0aGF0IHdlIGFsbG93IGZvciB1cyB0byB1c2UgZGF0YSBsYXRlciB0aGFuIG91ciBjb2RlIHZlcnNpb24KKyMKK0RFU0NSSVBUSU9OID0gInR6Y29kZSwgdGltZXpvbmUgem9uZWluZm8gdXRpbHMgLS0gemljLCB6ZHVtcCwgdHpzZWxlY3QiCitMSUNFTlNFID0gIlBEICYgQlNEIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L1JFQURNRTttZDU9ZDBmZjkzYTczZGQ1YmMzYzZlNzI0YmI0MzQzNzYwZjYiCisKK1NSQ19VUkkgPSIgZnRwOi8vZnRwLmlhbmEub3JnL3R6L3JlbGVhc2VzL3R6Y29kZSR7UFZ9LnRhci5nejtuYW1lPXR6Y29kZSBcCisgICAgICAgICAgIGZ0cDovL2Z0cC5pYW5hLm9yZy90ei9yZWxlYXNlcy90emRhdGEyMDE1Zi50YXIuZ3o7bmFtZT10emRhdGEiCisKK1NSQ19VUklbdHpjb2RlLm1kNXN1bV0gPSAiMTk1NzhkNDMyYmE4YjkyZjczNDA2YTE3YTliYzI2OGQiCitTUkNfVVJJW3R6Y29kZS5zaGEyNTZzdW1dID0gIjBjOTVlMGE0MmJiNjExNDFmNzkwZjRmNWYyMDRiOTU0ZDc2NTRjODk0YWE1NGE1OTRhMjE1ZDZmMzhkZTg0YWUiCitTUkNfVVJJW3R6ZGF0YS5tZDVzdW1dID0gImUzYjgyNzMyZDIwZTk3M2U0OGFmMWM2ZjEzZGY5YTFkIgorU1JDX1VSSVt0emRhdGEuc2hhMjU2c3VtXSA9ICI5NTlmODFiNTQxZTA0MmVjYjEzYzUwMDk3ZDI2NGFlOTJmZjAzYTU3OTc5YzQ3OGRiY2YyNGQ1ZGEyNDI1MzFkIgorCitTID0gIiR7V09SS0RJUn0iCisKK2luaGVyaXQgbmF0aXZlCisKK2RvX2luc3RhbGwgKCkgeworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCisgICAgICAgIGluc3RhbGwgLW0gNzU1IHppYyAke0R9JHtiaW5kaXJ9LworICAgICAgICBpbnN0YWxsIC1tIDc1NSB6ZHVtcCAke0R9JHtiaW5kaXJ9LworICAgICAgICBpbnN0YWxsIC1tIDc1NSB0enNlbGVjdCAke0R9JHtiaW5kaXJ9LworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpkYXRhL3R6ZGF0YV8yMDE1Zi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6ZGF0YS90emRhdGFfMjAxNWYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkYTQwZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6ZGF0YS90emRhdGFfMjAxNWYuYmIKQEAgLTAsMCArMSwyMDcgQEAKK0RFU0NSSVBUSU9OID0gIlRpbWV6b25lIGRhdGEiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmlhbmEub3JnL3RpbWUtem9uZXMiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIlBEICYgQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vYXNpYTtiZWdpbmxpbmU9MjtlbmRsaW5lPTM7bWQ1PTk5NmE5ODExNzQ3YWE0OGRiOTFlZDIzOWU1YjM1NWExIgorREVQRU5EUyA9ICJ0emNvZGUtbmF0aXZlIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5pYW5hLm9yZy90ei9yZWxlYXNlcy90emRhdGEke1BWfS50YXIuZ3o7bmFtZT10emRhdGEiCisKK1NSQ19VUklbdHpkYXRhLm1kNXN1bV0gPSAiZTNiODI3MzJkMjBlOTczZTQ4YWYxYzZmMTNkZjlhMWQiCitTUkNfVVJJW3R6ZGF0YS5zaGEyNTZzdW1dID0gIjk1OWY4MWI1NDFlMDQyZWNiMTNjNTAwOTdkMjY0YWU5MmZmMDNhNTc5NzljNDc4ZGJjZjI0ZDVkYTI0MjUzMWQiCisKK2luaGVyaXQgYWxsYXJjaAorCitSQ09ORkxJQ1RTXyR7UE59ID0gInRpbWV6b25lcyB0aW1lem9uZS1hZnJpY2EgdGltZXpvbmUtYW1lcmljYSB0aW1lem9uZS1hbnRhcmN0aWNhIFwKKyAgICAgICAgICAgICB0aW1lem9uZS1hcmN0aWMgdGltZXpvbmUtYXNpYSB0aW1lem9uZS1hdGxhbnRpYyBcCisgICAgICAgICAgICAgdGltZXpvbmUtYXVzdHJhbGlhIHRpbWV6b25lLWV1cm9wZSB0aW1lem9uZS1pbmRpYW4gXAorICAgICAgICAgICAgIHRpbWV6b25lLWlzbzMxNjYudGFiIHRpbWV6b25lLXBhY2lmaWMgdGltZXpvbmUtem9uZS50YWIiCisKK1MgPSAiJHtXT1JLRElSfSIKKworREVGQVVMVF9USU1FWk9ORSA/PSAiVW5pdmVyc2FsIgorCitUWk9ORVM9ICJhZnJpY2EgYW50YXJjdGljYSBhc2lhIGF1c3RyYWxhc2lhIGV1cm9wZSBub3J0aGFtZXJpY2Egc291dGhhbWVyaWNhICBcCisgICAgICAgICBmYWN0b3J5IGV0Y2V0ZXJhIGJhY2t3YXJkIHN5c3RlbXYgXAorICAgICAgICAiCisjIHBhY2lmaWNuZXcgCisKK2RvX2NvbXBpbGUgKCkgeworICAgICAgICBmb3Igem9uZSBpbiAke1RaT05FU307IGRvIFwKKyAgICAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS96aWMgLWQgJHtXT1JLRElSfSR7ZGF0YWRpcn0vem9uZWluZm8gLUwgL2Rldi9udWxsIFwKKyAgICAgICAgICAgICAgICAteSAke1N9L3llYXJpc3R5cGUuc2ggJHtTfS8ke3pvbmV9IDsgXAorICAgICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3ppYyAtZCAke1dPUktESVJ9JHtkYXRhZGlyfS96b25laW5mby9wb3NpeCAtTCAvZGV2L251bGwgXAorICAgICAgICAgICAgICAgIC15ICR7U30veWVhcmlzdHlwZS5zaCAke1N9LyR7em9uZX0gOyBcCisgICAgICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vemljIC1kICR7V09SS0RJUn0ke2RhdGFkaXJ9L3pvbmVpbmZvL3JpZ2h0IC1MICR7U30vbGVhcHNlY29uZHMgXAorICAgICAgICAgICAgICAgIC15ICR7U30veWVhcmlzdHlwZS5zaCAke1N9LyR7em9uZX0gOyBcCisgICAgICAgIGRvbmUKK30KKworZG9faW5zdGFsbCAoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfS8kZXhlY19wcmVmaXggJHtEfSR7ZGF0YWRpcn0vem9uZWluZm8KKyAgICAgICAgY3AgLXBQUiAke1N9LyRleGVjX3ByZWZpeCAke0R9LworICAgICAgICAjIGxpYmMgaXMgcmVtb3Zpbmcgem9uZWluZm8gZmlsZXMgZnJvbSBwYWNrYWdlCisgICAgICAgIGNwIC1wUCAiJHtTfS96b25lLnRhYiIgJHtEfSR7ZGF0YWRpcn0vem9uZWluZm8KKyAgICAgICAgY3AgLXBQICIke1N9L2lzbzMxNjYudGFiIiAke0R9JHtkYXRhZGlyfS96b25laW5mbworCisgICAgICAgICMgSW5zdGFsbCBkZWZhdWx0IHRpbWV6b25lCisgICAgICAgIGlmIFsgLWUgJHtEfSR7ZGF0YWRpcn0vem9uZWluZm8vJHtERUZBVUxUX1RJTUVaT05FfSBdOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgICAgICAgICBlY2hvICR7REVGQVVMVF9USU1FWk9ORX0gPiAke0R9JHtzeXNjb25mZGlyfS90aW1lem9uZQorICAgICAgICAgICAgbG4gLXMgJHtkYXRhZGlyfS96b25laW5mby8ke0RFRkFVTFRfVElNRVpPTkV9ICR7RH0ke3N5c2NvbmZkaXJ9L2xvY2FsdGltZQorICAgICAgICBlbHNlCisgICAgICAgICAgICBiYmVycm9yICJERUZBVUxUX1RJTUVaT05FIGlzIHNldCB0byBhbiBpbnZhbGlkIHZhbHVlLiIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorCisgICAgICAgIGNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJZXRjX2x0PSIkRCR7c3lzY29uZmRpcn0vbG9jYWx0aW1lIgorCXNyYz0iJEQke3N5c2NvbmZkaXJ9L3RpbWV6b25lIgorCisJaWYgWyAtZSAke3NyY30gXSA7IHRoZW4KKwkJdHo9JChzZWQgLWUgJ3M6Iy4qOjonIC1lICdzOltbOnNwYWNlOl1dKjo6ZycgLWUgJy9eJC9kJyAiJHtzcmN9IikKKwlmaQorCQorCWlmIFsgLXogIiR7dHp9IiBdIDsgdGhlbgorCQlleGl0IDAKKwlmaQorCQorCWlmIFsgISAtZSAiJEQke2RhdGFkaXJ9L3pvbmVpbmZvLyR7dHp9IiBdIDsgdGhlbgorCQllY2hvICJZb3UgaGF2ZSBhbiBpbnZhbGlkIFRJTUVaT05FIHNldHRpbmcgaW4gJHtzcmN9IgorCQllY2hvICJZb3VyICR7ZXRjX2x0fSBoYXMgYmVlbiByZXNldCB0byBVbml2ZXJzYWw7IGVuam95ISIKKwkJdHo9IlVuaXZlcnNhbCIKKwkJZWNobyAiVXBkYXRpbmcgJHtldGNfbHR9IHdpdGggJEQke2RhdGFkaXJ9L3pvbmVpbmZvLyR7dHp9IgorCQlpZiBbIC1MICR7ZXRjX2x0fSBdIDsgdGhlbgorCQkJcm0gLWYgIiR7ZXRjX2x0fSIKKwkJZmkKKwkJbG4gLXMgIiR7ZGF0YWRpcn0vem9uZWluZm8vJHt0en0iICIke2V0Y19sdH0iCisJZmkKK30KKworIyBQYWNrYWdlcyBwcmltYXJpbHkgb3JnYW5pemVkIGJ5IGRpcmVjdG9yeSB3aXRoIGEgbWFqb3IgY2l0eQorIyBpbiBtb3N0IHRpbWUgem9uZXMgaW4gdGhlIGJhc2UgcGFja2FnZQorCitQQUNLQUdFUyA9ICJ0emRhdGEgdHpkYXRhLW1pc2MgdHpkYXRhLXBvc2l4IHR6ZGF0YS1yaWdodCB0emRhdGEtYWZyaWNhIFwKKyAgICB0emRhdGEtYW1lcmljYXMgdHpkYXRhLWFudGFyY3RpY2EgdHpkYXRhLWFyY3RpYyB0emRhdGEtYXNpYSBcCisgICAgdHpkYXRhLWF0bGFudGljIHR6ZGF0YS1hdXN0cmFsaWEgdHpkYXRhLWV1cm9wZSB0emRhdGEtcGFjaWZpYyIKKworRklMRVNfdHpkYXRhLWFmcmljYSArPSAiJHtkYXRhZGlyfS96b25laW5mby9BZnJpY2EvKiIKK1JQUk9WSURFU190emRhdGEtYWZyaWNhID0gInR6ZGF0YS1hZnJpY2EiCisKK0ZJTEVTX3R6ZGF0YS1hbWVyaWNhcyArPSAiJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhLyogIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1VTLyogICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQnJhemlsLyogICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DYW5hZGEvKiAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL01leGljby8qICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQ2hpbGUvKiIKK1JQUk9WSURFU190emRhdGEtYW1lcmljYXMgPSAidHpkYXRhLWFtZXJpY2FzIgorCitGSUxFU190emRhdGEtYW50YXJjdGljYSArPSAiJHtkYXRhZGlyfS96b25laW5mby9BbnRhcmN0aWNhLyoiCitSUFJPVklERVNfdHpkYXRhLWFudGFyY3RpY2EgPSAidHpkYXRhLWFudGFyY3RpY2EiCisKK0ZJTEVTX3R6ZGF0YS1hcmN0aWMgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQXJjdGljLyoiCitSUFJPVklERVNfdHpkYXRhLWFyY3RpYyA9ICJ0emRhdGEtYXJjdGljIgorCitGSUxFU190emRhdGEtYXNpYSArPSAiJHtkYXRhZGlyfS96b25laW5mby9Bc2lhLyogICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0luZGlhbi8qICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTWlkZWFzdC8qIgorUlBST1ZJREVTX3R6ZGF0YS1hc2lhID0gInR6ZGF0YS1hc2lhIgorCitGSUxFU190emRhdGEtYXRsYW50aWMgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQXRsYW50aWMvKiIKK1JQUk9WSURFU190emRhdGEtYXRsYW50aWMgPSAidHpkYXRhLWF0bGFudGljIgorCitGSUxFU190emRhdGEtYXVzdHJhbGlhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0F1c3RyYWxpYS8qIgorUlBST1ZJREVTX3R6ZGF0YS1hdXN0cmFsaWEgPSAidHpkYXRhLWF1c3RyYWxpYSIKKworRklMRVNfdHpkYXRhLWV1cm9wZSArPSAiJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvKiIKK1JQUk9WSURFU190emRhdGEtZXVyb3BlID0gInR6ZGF0YS1ldXJvcGUiCisKK0ZJTEVTX3R6ZGF0YS1wYWNpZmljICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL1BhY2lmaWMvKiIKK1JQUk9WSURFU190emRhdGEtcGFjaWZpYyA9ICJ0emRhdGEtcGFjaWZpYyIKKworRklMRVNfdHpkYXRhLXBvc2l4ICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL3Bvc2l4LyoiCitSUFJPVklERVNfdHpkYXRhLXBvc2l4ID0gInR6ZGF0YS1wb3NpeCIKKworRklMRVNfdHpkYXRhLXJpZ2h0ICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL3JpZ2h0LyoiCitSUFJPVklERVNfdHpkYXRhLXJpZ2h0ID0gInR6ZGF0YS1yaWdodCIKKworCitGSUxFU190emRhdGEtbWlzYyArPSAiJHtkYXRhZGlyfS96b25laW5mby9DdWJhICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FZ3lwdCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FaXJlICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9GYWN0b3J5ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HQi1FaXJlICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Ib25na29uZyAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9JY2VsYW5kICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9JcmFuICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Jc3JhZWwgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9KYW1haWNhICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9KYXBhbiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Ld2FqYWxlaW4gICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9MaWJ5YSAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9OYXZham8gICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Qb2xhbmQgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Qb3J0dWdhbCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9TaW5nYXBvcmUgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9UdXJrZXkiCitSUFJPVklERVNfdHpkYXRhLW1pc2MgPSAidHpkYXRhLW1pc2MiCisKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vUGFjaWZpYy9Ib25vbHVsdSAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9BbmNob3JhZ2UgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9Mb3NfQW5nZWxlcyAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9EZW52ZXIgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9DaGljYWdvICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9OZXdfWW9yayAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9DYXJhY2FzICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9TYW9fUGF1bG8gICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRXVyb3BlL0xvbmRvbiAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRXVyb3BlL1BhcmlzICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQWZyaWNhL0NhaXJvICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRXVyb3BlL01vc2NvdyAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9EdWJhaSAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9LYXJhY2hpICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9EaGFrYSAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9CYW5rb2sgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9Ib25nX0tvbmcgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9Ub2t5byAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhL0RhcndpbiAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhL0FkZWxhaWRlICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhL0JyaXNiYW5lICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhL1N5ZG5leSAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUGFjaWZpYy9Ob3VtZWEgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQ0VUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQ1NUNkNEVCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRUVUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRVNUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRVNUNUVEVCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR0IgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR01UICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR01UKzAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR01ULTAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR01UMCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR3JlZW53aWNoICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSFNUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTUVUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTVNUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTVNUN01EVCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTlogICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTlotQ0hBVCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUFJDICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUFNUOFBEVCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUk9DICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUk9LICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVUNUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVVRDICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVW5pdmVyc2FsICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVy1TVSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vV0VUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vWnVsdSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vem9uZS50YWIgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vaXNvMzE2Ni50YWIgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRXRjLyoiCisKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS90aW1lem9uZSAke3N5c2NvbmZkaXJ9L2xvY2FsdGltZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzA2LXVuemlwNjAtYWx0LWljb252LXV0ZjhfQ1ZFLTIwMTUtMTMxNS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzA2LXVuemlwNjAtYWx0LWljb252LXV0ZjhfQ1ZFLTIwMTUtMTMxNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmEzYzFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMDYtdW56aXA2MC1hbHQtaWNvbnYtdXRmOF9DVkUtMjAxNS0xMzE1LnBhdGNoCkBAIC0wLDAgKzEsNDAyIEBACitGcm9tOiBHaW92YW5uaSBTY2Fmb3JhIDxnaW92YW5uaS5hcmNobGludXgub3JnPgorU3ViamVjdDogdW56aXAgZmlsZXMgZW5jb2RlZCB3aXRoIG5vbi1sYXRpbiwgbm9uLXVuaWNvZGUgZmlsZSBuYW1lcworTGFzdC1VcGRhdGU6IDIwMTUtMDItMTEKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitVcGRhdGVkIDIwMTUtMDItMTEgYnkgTWFyYyBEZXNsYXVyaWVycyA8bWFyYy5kZXNsYXVyaWVyc0BjYW5vbmljYWwuY29tPgordG8gZml4IGJ1ZmZlciBvdmVyZmxvdyBpbiBjaGFyc2V0X3RvX2ludGVybigpCisKK1NpZ25lZC1vZmYtYnk6IE1hcmMgRGVzbGF1cmllcnMgPG1hcmMuZGVzbGF1cmllcnNAY2Fub25pY2FsLmNvbT4KKworSW5kZXg6IHVuemlwLTYuMC91bml4L3VuaXguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuemlwLTYuMC5vcmlnL3VuaXgvdW5peC5jCTIwMTUtMDItMTEgMDg6NDY6NDMuNjc1MzI0MjkwIC0wNTAwCisrKysgdW56aXAtNi4wL3VuaXgvdW5peC5jCTIwMTUtMDItMTEgMDk6MTg6MDQuOTAyMDgxMzE5IC0wNTAwCitAQCAtMzAsNiArMzAsOSBAQAorICNkZWZpbmUgVU5aSVBfSU5URVJOQUwKKyAjaW5jbHVkZSAidW56aXAuaCIKKyAKKysjaW5jbHVkZSA8aWNvbnYuaD4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKysKKyAjaWZkZWYgU0NPX1hFTklYCisgIyAgZGVmaW5lIFNZU05ESVIKKyAjZWxzZSAgLyogU0NPIFVuaXgsIEFJWCwgRE5JWCwgVEkgU3lzViwgQ29oZXJlbnQgNC54LCAuLi4gKi8KK0BAIC0xODc0LDMgKzE4NzcsMTAyIEBACisgICAgIH0KKyB9CisgI2VuZGlmIC8qIFFMWklQICovCisrCisrCisrdHlwZWRlZiBzdHJ1Y3QgeworKyAgICBjaGFyICpsb2NhbF9jaGFyc2V0OworKyAgICBjaGFyICphcmNoaXZlX2NoYXJzZXQ7CisrfSBDSEFSU0VUX01BUDsKKysKKysvKiBBIG1hcHBpbmcgb2YgbG9jYWwgPC0+IGFyY2hpdmUgY2hhcnNldHMgdXNlZCBieSBkZWZhdWx0IHRvIGNvbnZlcnQgZmlsZW5hbWVzCisrICogb2YgRE9TL1dpbmRvd3MgWmlwIGFyY2hpdmVzLiBDdXJyZW50bHkgdmVyeSBiYXNpYy4gKi8KKytzdGF0aWMgQ0hBUlNFVF9NQVAgZG9zX2NoYXJzZXRfbWFwW10gPSB7CisrICAgIHsgIkFOU0lfWDMuNC0xOTY4IiwgIkNQODUwIiB9LAorKyAgICB7ICJJU08tODg1OS0xIiwgIkNQODUwIiB9LAorKyAgICB7ICJDUDEyNTIiLCAiQ1A4NTAiIH0sCisrICAgIHsgIlVURi04IiwgIkNQODY2IiB9LAorKyAgICB7ICJLT0k4LVIiLCAiQ1A4NjYiIH0sCisrICAgIHsgIktPSTgtVSIsICJDUDg2NiIgfSwKKysgICAgeyAiSVNPLTg4NTktNSIsICJDUDg2NiIgfQorK307CisrCisrY2hhciBPRU1fQ1BbTUFYX0NQX05BTUVdID0gIiI7CisrY2hhciBJU09fQ1BbTUFYX0NQX05BTUVdID0gIiI7CisrCisrLyogVHJ5IHRvIGd1ZXNzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIE9FTV9DUCBiYXNlZCBvbiB0aGUgY3VycmVudCBsb2NhbGUuCisrICogSVNPX0NQIGlzIGxlZnQgYWxvbmUgZm9yIG5vdy4gKi8KKyt2b2lkIGluaXRfY29udmVyc2lvbl9jaGFyc2V0cygpCisreworKyAgICBjb25zdCBjaGFyICpsb2NhbF9jaGFyc2V0OworKyAgICBpbnQgaTsKKysKKysgICAgLyogTWFrZSBhIGd1ZXNzIG9ubHkgaWYgT0VNX0NQIG5vdCBhbHJlYWR5IHNldC4gKi8gCisrICAgIGlmKCpPRU1fQ1AgPT0gJ1wwJykgeworKyAgICAJbG9jYWxfY2hhcnNldCA9IG5sX2xhbmdpbmZvKENPREVTRVQpOworKyAgICAJZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKGRvc19jaGFyc2V0X21hcCkvc2l6ZW9mKENIQVJTRVRfTUFQKTsgaSsrKQorKyAgICAJCWlmKCFzdHJjYXNlY21wKGxvY2FsX2NoYXJzZXQsIGRvc19jaGFyc2V0X21hcFtpXS5sb2NhbF9jaGFyc2V0KSkgeworKyAgICAJCQlzdHJuY3B5KE9FTV9DUCwgZG9zX2NoYXJzZXRfbWFwW2ldLmFyY2hpdmVfY2hhcnNldCwKKysgICAgCQkJCQlzaXplb2YoT0VNX0NQKSk7CisrICAgIAkJCWJyZWFrOworKyAgICAJCX0KKysgICAgfQorK30KKysKKysvKiBDb252ZXJ0IGEgc3RyaW5nIGZyb20gb25lIGVuY29kaW5nIHRvIHRoZSBjdXJyZW50IGxvY2FsZSB1c2luZyBpY29udigpLgorKyAqIEJlIGFzIG5vbi1pbnRydXNpdmUgYXMgcG9zc2libGUuIElmIGVycm9yIGlzIGVuY291bnRlcmVkIGR1cmluZyBjb3ZlcnRpb24KKysgKiBqdXN0IGxlYXZlIHRoZSBzdHJpbmcgaW50YWN0LiAqLworK3N0YXRpYyB2b2lkIGNoYXJzZXRfdG9faW50ZXJuKGNoYXIgKnN0cmluZywgY2hhciAqZnJvbV9jaGFyc2V0KQorK3sKKysgICAgaWNvbnZfdCBjZDsKKysgICAgY2hhciAqcywqZCwgKmJ1ZjsKKysgICAgc2l6ZV90IHNsZW4sIGRsZW4sIGJ1ZmxlbjsKKysgICAgY29uc3QgY2hhciAqbG9jYWxfY2hhcnNldDsKKysKKysgICAgaWYoKmZyb21fY2hhcnNldCA9PSAnXDAnKQorKyAgICAJcmV0dXJuOworKworKyAgICBidWYgPSBOVUxMOworKyAgICBsb2NhbF9jaGFyc2V0ID0gbmxfbGFuZ2luZm8oQ09ERVNFVCk7CisrCisrICAgIGlmKChjZCA9IGljb252X29wZW4obG9jYWxfY2hhcnNldCwgZnJvbV9jaGFyc2V0KSkgPT0gKGljb252X3QpLTEpCisrICAgICAgICByZXR1cm47CisrCisrICAgIHNsZW4gPSBzdHJsZW4oc3RyaW5nKTsKKysgICAgcyA9IHN0cmluZzsKKysKKysgICAgLyogIE1ha2Ugc3VyZSBPVVRCVUZTSVogKyAxIG5ldmVyIGVuZHMgdXAgc21hbGxlciB0aGFuIEZJTE5BTVNJWgorKyAgICAgKiAgYXMgdGhpcyBmdW5jdGlvbiBhbHNvIGdldHMgY2FsbGVkIHdpdGggRy5vdXRidWYgaW4gZmlsZWlvLmMKKysgICAgICovCisrICAgIGJ1ZmxlbiA9IEZJTE5BTVNJWjsKKysgICAgaWYgKE9VVEJVRlNJWiArIDEgPCBGSUxOQU1TSVopCisrICAgIHsKKysgICAgICAgIGJ1ZmxlbiA9IE9VVEJVRlNJWiArIDE7CisrICAgIH0KKysKKysgICAgZCA9IGJ1ZiA9IG1hbGxvYyhidWZsZW4pOworKyAgICBpZighZCkKKysgICAgCWdvdG8gY2xlYW51cDsKKysKKysgICAgYnplcm8oYnVmLGJ1Zmxlbik7CisrICAgIGRsZW4gPSBidWZsZW4gLSAxOworKworKyAgICBpZihpY29udihjZCwgJnMsICZzbGVuLCAmZCwgJmRsZW4pID09IChzaXplX3QpLTEpCisrICAgIAlnb3RvIGNsZWFudXA7CisrICAgIHN0cm5jcHkoc3RyaW5nLCBidWYsIGJ1Zmxlbik7CisrCisrICAgIGNsZWFudXA6CisrICAgIGZyZWUoYnVmKTsKKysgICAgaWNvbnZfY2xvc2UoY2QpOworK30KKysKKysvKiBDb252ZXJ0IGEgc3RyaW5nIGZyb20gT0VNX0NQIHRvIHRoZSBjdXJyZW50IGxvY2FsZSBjaGFyc2V0LiAqLworK2lubGluZSB2b2lkIG9lbV9pbnRlcm4oY2hhciAqc3RyaW5nKQorK3sKKysgICAgY2hhcnNldF90b19pbnRlcm4oc3RyaW5nLCBPRU1fQ1ApOworK30KKysKKysvKiBDb252ZXJ0IGEgc3RyaW5nIGZyb20gSVNPX0NQIHRvIHRoZSBjdXJyZW50IGxvY2FsZSBjaGFyc2V0LiAqLworK2lubGluZSB2b2lkIGlzb19pbnRlcm4oY2hhciAqc3RyaW5nKQorK3sKKysgICAgY2hhcnNldF90b19pbnRlcm4oc3RyaW5nLCBJU09fQ1ApOworK30KK0luZGV4OiB1bnppcC02LjAvdW5peC91bnhjZmcuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuemlwLTYuMC5vcmlnL3VuaXgvdW54Y2ZnLmgJMjAxNS0wMi0xMSAwODo0Njo0My42NzUzMjQyOTAgLTA1MDAKKysrKyB1bnppcC02LjAvdW5peC91bnhjZmcuaAkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3MTMyNDI2MCAtMDUwMAorQEAgLTIyOCw0ICsyMjgsMzAgQEAKKyAvKiB3aWxkX2RpciwgZGlybmFtZSwgd2lsZG5hbWUsIG1hdGNobmFtZVtdLCBkaXJuYW1lbGVuLCBoYXZlX2Rpcm5hbWUsICovCisgLyogICAgYW5kIG5vdGZpcnN0Y2FsbCBhcmUgdXNlZCBieSBkb193aWxkKCkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIAorKworKyNkZWZpbmUgTUFYX0NQX05BTUUgMjUgCisrICAgCisrI2lmZGVmIFNFVExPQ0FMRQorKyMgIHVuZGVmIFNFVExPQ0FMRQorKyNlbmRpZgorKyNkZWZpbmUgU0VUTE9DQUxFKGNhdGVnb3J5LCBsb2NhbGUpIHNldGxvY2FsZShjYXRlZ29yeSwgbG9jYWxlKQorKyNpbmNsdWRlIDxsb2NhbGUuaD4KKysgICAKKysjaWZkZWYgX0lTT19JTlRFUk4KKysjICB1bmRlZiBfSVNPX0lOVEVSTgorKyNlbmRpZgorKyNkZWZpbmUgX0lTT19JTlRFUk4oc3RyMSkgaXNvX2ludGVybihzdHIxKQorKworKyNpZmRlZiBfT0VNX0lOVEVSTgorKyMgIHVuZGVmIF9PRU1fSU5URVJOCisrI2VuZGlmCisrI2lmbmRlZiBJWl9PRU0ySVNPX0FSUkFZCisrIyAgZGVmaW5lIElaX09FTTJJU09fQVJSQVkKKysjZW5kaWYKKysjZGVmaW5lIF9PRU1fSU5URVJOKHN0cjEpIG9lbV9pbnRlcm4oc3RyMSkKKysKKyt2b2lkIGlzb19pbnRlcm4oY2hhciAqKTsKKyt2b2lkIG9lbV9pbnRlcm4oY2hhciAqKTsKKyt2b2lkIGluaXRfY29udmVyc2lvbl9jaGFyc2V0cyh2b2lkKTsKKysgICAKKyAjZW5kaWYgLyogIV9fdW54Y2ZnX2ggKi8KK0luZGV4OiB1bnppcC02LjAvdW56aXAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuemlwLTYuMC5vcmlnL3VuemlwLmMJMjAxNS0wMi0xMSAwODo0Njo0My42NzUzMjQyOTAgLTA1MDAKKysrKyB1bnppcC02LjAvdW56aXAuYwkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3NTMyNDI5MCAtMDUwMAorQEAgLTMyNywxMSArMzI3LDIxIEBACisgICAtMiAganVzdCBmaWxlbmFtZXMgYnV0IGFsbG93IC1oLy10Ly16ICAtbCAgbG9uZyBVbml4IFwibHMgLWxcIiBmb3JtYXRcblwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC12ICB2ZXJib3NlLCBtdWx0aS1wYWdlIGZvcm1hdFxuIjsKKyAKKysjaWZuZGVmIFVOSVgKKyBzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIFppcEluZm9Vc2FnZUxpbmUzW10gPSAibWlzY2VsbGFuZW91cyBvcHRpb25zOlxuXAorICAgLWggIHByaW50IGhlYWRlciBsaW5lICAgICAgIC10ICBwcmludCB0b3RhbHMgZm9yIGxpc3RlZCBmaWxlcyBvciBmb3IgYWxsXG5cCisgICAteiAgcHJpbnQgemlwZmlsZSBjb21tZW50ICAgLVQgIHByaW50IGZpbGUgdGltZXMgaW4gc29ydGFibGUgZGVjaW1hbCBmb3JtYXRcCisgXG4gIC1DICBiZSBjYXNlLWluc2Vuc2l0aXZlICAgJXNcCisgICAteCAgZXhjbHVkZSBmaWxlbmFtZXMgdGhhdCBmb2xsb3cgZnJvbSBsaXN0aW5nXG4iOworKyNlbHNlIC8qIFVOSVggKi8KKytzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIFppcEluZm9Vc2FnZUxpbmUzW10gPSAibWlzY2VsbGFuZW91cyBvcHRpb25zOlxuXAorKyAgLWggIHByaW50IGhlYWRlciBsaW5lICAgICAgIC10ICBwcmludCB0b3RhbHMgZm9yIGxpc3RlZCBmaWxlcyBvciBmb3IgYWxsXG5cCisrICAteiAgcHJpbnQgemlwZmlsZSBjb21tZW50ICAlYy1UJWMgcHJpbnQgZmlsZSB0aW1lcyBpbiBzb3J0YWJsZSBkZWNpbWFsIGZvcm1hdFwKKytcbiAlYy1DJWMgYmUgY2FzZS1pbnNlbnNpdGl2ZSAgICVzXAorKyAgLXggIGV4Y2x1ZGUgZmlsZW5hbWVzIHRoYXQgZm9sbG93IGZyb20gbGlzdGluZ1xuXAorKyAgLU8gQ0hBUlNFVCAgc3BlY2lmeSBhIGNoYXJhY3RlciBlbmNvZGluZyBmb3IgRE9TLCBXaW5kb3dzIGFuZCBPUy8yIGFyY2hpdmVzXG5cCisrICAtSSBDSEFSU0VUICBzcGVjaWZ5IGEgY2hhcmFjdGVyIGVuY29kaW5nIGZvciBVTklYIGFuZCBvdGhlciBhcmNoaXZlc1xuIjsKKysjZW5kaWYgLyogIVVOSVggKi8KKyAjaWZkZWYgTU9SRQorICAgIHN0YXRpYyBaQ09OU1QgY2hhciBGYXIgWmlwSW5mb1VzYWdlTGluZTRbXSA9CisgICAgICAiICAtTSAgcGFnZSBvdXRwdXQgdGhyb3VnaCBidWlsdC1pbiBcIm1vcmVcIlxuIjsKK0BAIC02NjQsNiArNjc0LDE3IEBACisgICAtVSAgdXNlIGVzY2FwZXMgZm9yIGFsbCBub24tQVNDSUkgVW5pY29kZSAgLVVVIGlnbm9yZSBhbnkgVW5pY29kZSBmaWVsZHNcblwKKyAgIC1DICBtYXRjaCBmaWxlbmFtZXMgY2FzZS1pbnNlbnNpdGl2ZWx5ICAgICAtTCAgbWFrZSAoc29tZSkgbmFtZXMgXAorIGxvd2VyY2FzZVxuICUtNDJzICAtViAgcmV0YWluIFZNUyB2ZXJzaW9uIG51bWJlcnNcbiVzIjsKKysjZWxpZiAoZGVmaW5lZCBVTklYKQorK3N0YXRpYyBaQ09OU1QgY2hhciBGYXIgVW56aXBVc2FnZUxpbmU0W10gPSAiXAorK21vZGlmaWVyczpcblwKKysgIC1uICBuZXZlciBvdmVyd3JpdGUgZXhpc3RpbmcgZmlsZXMgICAgICAgICAtcSAgcXVpZXQgbW9kZSAoLXFxID0+IHF1aWV0ZXIpXG5cCisrICAtbyAgb3ZlcndyaXRlIGZpbGVzIFdJVEhPVVQgcHJvbXB0aW5nICAgICAgLWEgIGF1dG8tY29udmVydCBhbnkgdGV4dCBmaWxlc1xuXAorKyAgLWogIGp1bmsgcGF0aHMgKGRvIG5vdCBtYWtlIGRpcmVjdG9yaWVzKSAgIC1hYSB0cmVhdCBBTEwgZmlsZXMgYXMgdGV4dFxuXAorKyAgLVUgIHVzZSBlc2NhcGVzIGZvciBhbGwgbm9uLUFTQ0lJIFVuaWNvZGUgIC1VVSBpZ25vcmUgYW55IFVuaWNvZGUgZmllbGRzXG5cCisrICAtQyAgbWF0Y2ggZmlsZW5hbWVzIGNhc2UtaW5zZW5zaXRpdmVseSAgICAgLUwgIG1ha2UgKHNvbWUpIG5hbWVzIFwKKytsb3dlcmNhc2VcbiAlLTQycyAgLVYgIHJldGFpbiBWTVMgdmVyc2lvbiBudW1iZXJzXG4lc1wKKysgIC1PIENIQVJTRVQgIHNwZWNpZnkgYSBjaGFyYWN0ZXIgZW5jb2RpbmcgZm9yIERPUywgV2luZG93cyBhbmQgT1MvMiBhcmNoaXZlc1xuXAorKyAgLUkgQ0hBUlNFVCAgc3BlY2lmeSBhIGNoYXJhY3RlciBlbmNvZGluZyBmb3IgVU5JWCBhbmQgb3RoZXIgYXJjaGl2ZXNcblxuIjsKKyAjZWxzZSAvKiAhVk1TICovCisgc3RhdGljIFpDT05TVCBjaGFyIEZhciBVbnppcFVzYWdlTGluZTRbXSA9ICJcCisgbW9kaWZpZXJzOlxuXAorQEAgLTgwMiw2ICs4MjMsMTAgQEAKKyAjZW5kaWYgLyogVU5JQ09ERV9TVVBQT1JUICovCisgCisgCisrI2lmZGVmIFVOSVgKKysgICAgaW5pdF9jb252ZXJzaW9uX2NoYXJzZXRzKCk7CisrI2VuZGlmCisrCisgI2lmIChkZWZpbmVkKF9fSUJNQ19fKSAmJiBkZWZpbmVkKF9fREVCVUdfQUxMT0NfXykpCisgICAgIGV4dGVybiB2b2lkIERlYnVnTWFsbG9jKHZvaWQpOworIAorQEAgLTEzMzUsNiArMTM2MCwxMSBAQAorICAgICBhcmdjID0gKnBhcmdjOworICAgICBhcmd2ID0gKnBhcmd2OworIAorKyNpZmRlZiBVTklYCisrICAgIGV4dGVybiBjaGFyIE9FTV9DUFtNQVhfQ1BfTkFNRV07CisrICAgIGV4dGVybiBjaGFyIElTT19DUFtNQVhfQ1BfTkFNRV07CisrI2VuZGlmCisrICAgIAorICAgICB3aGlsZSAoKythcmd2LCAoLS1hcmdjID4gMCAmJiAqYXJndiAhPSBOVUxMICYmICoqYXJndiA9PSAnLScpKSB7CisgICAgICAgICBzID0gKmFyZ3YgKyAxOworICAgICAgICAgd2hpbGUgKChjID0gKnMrKykgIT0gMCkgeyAgICAvKiAiIT0gMCI6ICBwcmV2ZW50IFR1cmJvIEMgd2FybmluZyAqLworQEAgLTE1MTYsNiArMTU0NiwzNSBAQAorICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgI2VuZGlmICAvKiBNQUNPUyAqLworKyNpZmRlZiBVTklYCisrICAgIAkJCWNhc2UgKCdJJyk6CisrICAgICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBlbmNvZGluZ3MgY2FuJ3QgYmUgbmVnYXRlZCIpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOworKyAgICAJCQkJfSBlbHNlIHsKKysgICAgCQkJCQlpZigqcykgeyAvKiBIYW5kbGUgdGhlIC1JY2hhcnNldCBjYXNlICovCisrICAgIAkJCQkJCS8qIEFzc3VtZSB0aGF0IGNoYXJzZXRzIGNhbid0IHN0YXJ0IHdpdGggYSBkYXNoIHRvIHNwb3QgYXJndW1lbnRzIG1pc3VzZSAqLworKyAgICAJCQkJCQlpZigqcyA9PSAnLScpIHsgCisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAJCSAgICAgICAgICAgICAgICAgICJlcnJvcjogIGEgdmFsaWQgY2hhcmFjdGVyIGVuY29kaW5nIHNob3VsZCBmb2xsb3cgdGhlIC1JIGFyZ3VtZW50IikpOworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsgCisrICAgIAkJCQkJCX0KKysgICAgCQkJCQkJc3RybmNweShJU09fQ1AsIHMsIHNpemVvZihJU09fQ1ApKTsKKysgICAgCQkJCQl9IGVsc2UgeyAvKiAtSSBjaGFyc2V0ICovCisrICAgIAkJCQkJCSsrYXJndjsKKysgICAgCQkJCQkJaWYoISgtLWFyZ2MgPiAwICYmICphcmd2ICE9IE5VTEwgJiYgKiphcmd2ICE9ICctJykpIHsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgIAkJICAgICAgICAgICAgICAgICAgImVycm9yOiAgYSB2YWxpZCBjaGFyYWN0ZXIgZW5jb2Rpbmcgc2hvdWxkIGZvbGxvdyB0aGUgLUkgYXJndW1lbnQiKSk7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOyAKKysgICAgCQkJCQkJfQorKyAgICAJCQkJCQlzID0gKmFyZ3Y7CisrICAgIAkJCQkJCXN0cm5jcHkoSVNPX0NQLCBzLCBzaXplb2YoSVNPX0NQKSk7CisrICAgIAkJCQkJfQorKyAgICAJCQkJCXdoaWxlKCooKytzKSk7IC8qIE5vIHBhcmFtcyBzdHJhaWdodCBhZnRlciBjaGFyc2V0IG5hbWUgKi8KKysgICAgCQkJCX0KKysgICAgCQkJCWJyZWFrOworKyNlbmRpZiAvKiA/VU5JWCAqLworICAgICAgICAgICAgICAgICBjYXNlICgnaicpOiAgICAvKiBqdW5rIHBhdGhuYW1lcy9kaXJlY3Rvcnkgc3RydWN0dXJlICovCisgICAgICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgdU8uamZsYWcgPSBGQUxTRSwgbmVnYXRpdmUgPSAwOworQEAgLTE1OTEsNiArMTY1MCwzNSBAQAorICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgKyt1Ty5vdmVyd3JpdGVfYWxsOworICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrI2lmZGVmIFVOSVgKKysgICAgCQkJY2FzZSAoJ08nKToKKysgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjogIGVuY29kaW5ncyBjYW4ndCBiZSBuZWdhdGVkIikpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7CisrICAgIAkJCQl9IGVsc2UgeworKyAgICAJCQkJCWlmKCpzKSB7IC8qIEhhbmRsZSB0aGUgLU9jaGFyc2V0IGNhc2UgKi8KKysgICAgCQkJCQkJLyogQXNzdW1lIHRoYXQgY2hhcnNldHMgY2FuJ3Qgc3RhcnQgd2l0aCBhIGRhc2ggdG8gc3BvdCBhcmd1bWVudHMgbWlzdXNlICovCisrICAgIAkJCQkJCWlmKCpzID09ICctJykgeyAKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgIAkJICAgICAgICAgICAgICAgICAgImVycm9yOiAgYSB2YWxpZCBjaGFyYWN0ZXIgZW5jb2Rpbmcgc2hvdWxkIGZvbGxvdyB0aGUgLUkgYXJndW1lbnQiKSk7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOyAKKysgICAgCQkJCQkJfQorKyAgICAJCQkJCQlzdHJuY3B5KE9FTV9DUCwgcywgc2l6ZW9mKE9FTV9DUCkpOworKyAgICAJCQkJCX0gZWxzZSB7IC8qIC1PIGNoYXJzZXQgKi8KKysgICAgCQkJCQkJKythcmd2OworKyAgICAJCQkJCQlpZighKC0tYXJnYyA+IDAgJiYgKmFyZ3YgIT0gTlVMTCAmJiAqKmFyZ3YgIT0gJy0nKSkgeworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBhIHZhbGlkIGNoYXJhY3RlciBlbmNvZGluZyBzaG91bGQgZm9sbG93IHRoZSAtTyBhcmd1bWVudCIpKTsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7IAorKyAgICAJCQkJCQl9CisrICAgIAkJCQkJCXMgPSAqYXJndjsKKysgICAgCQkJCQkJc3RybmNweShPRU1fQ1AsIHMsIHNpemVvZihPRU1fQ1ApKTsKKysgICAgCQkJCQl9CisrICAgIAkJCQkJd2hpbGUoKigrK3MpKTsgLyogTm8gcGFyYW1zIHN0cmFpZ2h0IGFmdGVyIGNoYXJzZXQgbmFtZSAqLworKyAgICAJCQkJfQorKyAgICAJCQkJYnJlYWs7CisrI2VuZGlmIC8qID9VTklYICovCisgICAgICAgICAgICAgICAgIGNhc2UgKCdwJyk6ICAgIC8qIHBpcGVzOiAgZXh0cmFjdCB0byBzdGRvdXQsIG5vIG1lc3NhZ2VzICovCisgICAgICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICB1Ty5jZmxhZyA9IEZBTFNFOworSW5kZXg6IHVuemlwLTYuMC91bnpwcml2LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bnppcC02LjAub3JpZy91bnpwcml2LmgJMjAxNS0wMi0xMSAwODo0Njo0My42NzUzMjQyOTAgLTA1MDAKKysrKyB1bnppcC02LjAvdW56cHJpdi5oCTIwMTUtMDItMTEgMDg6NDY6NDMuNjc1MzI0MjkwIC0wNTAwCitAQCAtMzAwOCw3ICszMDA4LDcgQEAKKyAgICAgICAgICAhKCgoaXNsb2NoZHIpIHx8IChpc3V4YXR0KSkgJiYgXAorICAgICAgICAgICAgKChob3N0dmVyKSA9PSAyNSB8fCAoaG9zdHZlcikgPT0gMjYgfHwgKGhvc3R2ZXIpID09IDQwKSkpIHx8IFwKKyAgICAgICAgIChob3N0bnVtKSA9PSBGU19IUEZTXyB8fCBcCistICAgICAgICAoKGhvc3RudW0pID09IEZTX05URlNfICYmIChob3N0dmVyKSA9PSA1MCkpIHsgXAorKyAgICAgICAgKChob3N0bnVtKSA9PSBGU19OVEZTXyAvKiAmJiAoaG9zdHZlcikgPT0gNTAgKi8gKSkgeyBcCisgICAgICAgICBfT0VNX0lOVEVSTigoc3RyaW5nKSk7IFwKKyAgICAgfSBlbHNlIHsgXAorICAgICAgICAgX0lTT19JTlRFUk4oKHN0cmluZykpOyBcCitJbmRleDogdW56aXAtNi4wL3ppcGluZm8uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuemlwLTYuMC5vcmlnL3ppcGluZm8uYwkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3NTMyNDI5MCAtMDUwMAorKysrIHVuemlwLTYuMC96aXBpbmZvLmMJMjAxNS0wMi0xMSAwODo0Njo0My42NzUzMjQyOTAgLTA1MDAKK0BAIC00NTcsNiArNDU3LDEwIEBACisgICAgIGludCAgICB0ZmxhZ19zbG09VFJVRSwgdGZsYWdfMnY9RkFMU0U7CisgICAgIGludCAgICBleHBsaWNpdF9oPUZBTFNFLCBleHBsaWNpdF90PUZBTFNFOworIAorKyNpZmRlZiBVTklYCisrICAgIGV4dGVybiBjaGFyIE9FTV9DUFtNQVhfQ1BfTkFNRV07CisrICAgIGV4dGVybiBjaGFyIElTT19DUFtNQVhfQ1BfTkFNRV07CisrI2VuZGlmCisgCisgI2lmZGVmIE1BQ09TCisgICAgIHVPLmxmbGFnID0gTEZMQUc7ICAgICAgICAgLyogcmVzZXQgZGVmYXVsdCBvbiBlYWNoIGNhbGwgKi8KK0BAIC01MDEsNiArNTA1LDM1IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVPLmxmbGFnID0gMDsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyNpZmRlZiBVTklYCisrICAgIAkJCWNhc2UgKCdJJyk6CisrICAgICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBlbmNvZGluZ3MgY2FuJ3QgYmUgbmVnYXRlZCIpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOworKyAgICAJCQkJfSBlbHNlIHsKKysgICAgCQkJCQlpZigqcykgeyAvKiBIYW5kbGUgdGhlIC1JY2hhcnNldCBjYXNlICovCisrICAgIAkJCQkJCS8qIEFzc3VtZSB0aGF0IGNoYXJzZXRzIGNhbid0IHN0YXJ0IHdpdGggYSBkYXNoIHRvIHNwb3QgYXJndW1lbnRzIG1pc3VzZSAqLworKyAgICAJCQkJCQlpZigqcyA9PSAnLScpIHsgCisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAJCSAgICAgICAgICAgICAgICAgICJlcnJvcjogIGEgdmFsaWQgY2hhcmFjdGVyIGVuY29kaW5nIHNob3VsZCBmb2xsb3cgdGhlIC1JIGFyZ3VtZW50IikpOworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsgCisrICAgIAkJCQkJCX0KKysgICAgCQkJCQkJc3RybmNweShJU09fQ1AsIHMsIHNpemVvZihJU09fQ1ApKTsKKysgICAgCQkJCQl9IGVsc2UgeyAvKiAtSSBjaGFyc2V0ICovCisrICAgIAkJCQkJCSsrYXJndjsKKysgICAgCQkJCQkJaWYoISgtLWFyZ2MgPiAwICYmICphcmd2ICE9IE5VTEwgJiYgKiphcmd2ICE9ICctJykpIHsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgIAkJICAgICAgICAgICAgICAgICAgImVycm9yOiAgYSB2YWxpZCBjaGFyYWN0ZXIgZW5jb2Rpbmcgc2hvdWxkIGZvbGxvdyB0aGUgLUkgYXJndW1lbnQiKSk7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOyAKKysgICAgCQkJCQkJfQorKyAgICAJCQkJCQlzID0gKmFyZ3Y7CisrICAgIAkJCQkJCXN0cm5jcHkoSVNPX0NQLCBzLCBzaXplb2YoSVNPX0NQKSk7CisrICAgIAkJCQkJfQorKyAgICAJCQkJCXdoaWxlKCooKytzKSk7IC8qIE5vIHBhcmFtcyBzdHJhaWdodCBhZnRlciBjaGFyc2V0IG5hbWUgKi8KKysgICAgCQkJCX0KKysgICAgCQkJCWJyZWFrOworKyNlbmRpZiAvKiA/VU5JWCAqLworICAgICAgICAgICAgICAgICBjYXNlICdsJzogICAgICAvKiBsb25nZXIgZm9ybSBvZiAibHMgLWwiIHR5cGUgbGlzdGluZyAqLworICAgICAgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQorICAgICAgICAgICAgICAgICAgICAgICAgIHVPLmxmbGFnID0gLTIsIG5lZ2F0aXZlID0gMDsKK0BAIC01MjEsNiArNTU0LDM1IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgRy5NX2ZsYWcgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgI2VuZGlmCisrI2lmZGVmIFVOSVgKKysgICAgCQkJY2FzZSAoJ08nKToKKysgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjogIGVuY29kaW5ncyBjYW4ndCBiZSBuZWdhdGVkIikpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7CisrICAgIAkJCQl9IGVsc2UgeworKyAgICAJCQkJCWlmKCpzKSB7IC8qIEhhbmRsZSB0aGUgLU9jaGFyc2V0IGNhc2UgKi8KKysgICAgCQkJCQkJLyogQXNzdW1lIHRoYXQgY2hhcnNldHMgY2FuJ3Qgc3RhcnQgd2l0aCBhIGRhc2ggdG8gc3BvdCBhcmd1bWVudHMgbWlzdXNlICovCisrICAgIAkJCQkJCWlmKCpzID09ICctJykgeyAKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgIAkJICAgICAgICAgICAgICAgICAgImVycm9yOiAgYSB2YWxpZCBjaGFyYWN0ZXIgZW5jb2Rpbmcgc2hvdWxkIGZvbGxvdyB0aGUgLUkgYXJndW1lbnQiKSk7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOyAKKysgICAgCQkJCQkJfQorKyAgICAJCQkJCQlzdHJuY3B5KE9FTV9DUCwgcywgc2l6ZW9mKE9FTV9DUCkpOworKyAgICAJCQkJCX0gZWxzZSB7IC8qIC1PIGNoYXJzZXQgKi8KKysgICAgCQkJCQkJKythcmd2OworKyAgICAJCQkJCQlpZighKC0tYXJnYyA+IDAgJiYgKmFyZ3YgIT0gTlVMTCAmJiAqKmFyZ3YgIT0gJy0nKSkgeworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBhIHZhbGlkIGNoYXJhY3RlciBlbmNvZGluZyBzaG91bGQgZm9sbG93IHRoZSAtTyBhcmd1bWVudCIpKTsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7IAorKyAgICAJCQkJCQl9CisrICAgIAkJCQkJCXMgPSAqYXJndjsKKysgICAgCQkJCQkJc3RybmNweShPRU1fQ1AsIHMsIHNpemVvZihPRU1fQ1ApKTsKKysgICAgCQkJCQl9CisrICAgIAkJCQkJd2hpbGUoKigrK3MpKTsgLyogTm8gcGFyYW1zIHN0cmFpZ2h0IGFmdGVyIGNoYXJzZXQgbmFtZSAqLworKyAgICAJCQkJfQorKyAgICAJCQkJYnJlYWs7CisrI2VuZGlmIC8qID9VTklYICovCisgICAgICAgICAgICAgICAgIGNhc2UgJ3MnOiAgICAgIC8qIGRlZmF1bHQ6ICBzaG9ydGVyICJscyAtbCIgdHlwZSBsaXN0aW5nICovCisgICAgICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgdU8ubGZsYWcgPSAtMiwgbmVnYXRpdmUgPSAwOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMDktY3ZlLTIwMTQtODEzOS1jcmMtb3ZlcmZsb3cucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8wOS1jdmUtMjAxNC04MTM5LWNyYy1vdmVyZmxvdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTM3ZjBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMDktY3ZlLTIwMTQtODEzOS1jcmMtb3ZlcmZsb3cucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbTogc21zCitTdWJqZWN0OiBGaXggQ1ZFLTIwMTQtODEzOTogQ1JDMzIgdmVyaWZpY2F0aW9uIGhlYXAtYmFzZWQgb3ZlcmZsb3cKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNzczNzIyCisKK1RoZSBwYXRjaCBjb21lcyBmcm9tIHVuemlwXzYuMC04K2RlYjd1Mi5kZWJpYW4udGFyLmd6CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorCistLS0gYS9leHRyYWN0LmMKKysrKyBiL2V4dHJhY3QuYworQEAgLTI5OCw2ICsyOTgsOCBAQAorICNpZm5kZWYgU0ZYCisgICAgc3RhdGljIFpDT05TVCBjaGFyIEZhciBJbmNvbnNpc3RFRmxlbmd0aFtdID0gImJhZCBleHRyYS1maWVsZCBlbnRyeTpcbiBcCisgICAgICBFRiBibG9jayBsZW5ndGggKCV1IGJ5dGVzKSBleGNlZWRzIHJlbWFpbmluZyBFRiBkYXRhICgldSBieXRlcylcbiI7CisrICAgc3RhdGljIFpDT05TVCBjaGFyIEZhciBUb29TbWFsbEVCbGVuZ3RoW10gPSAiYmFkIGV4dHJhLWZpZWxkIGVudHJ5OlxuIFwKKysgICAgIEVGIGJsb2NrIGxlbmd0aCAoJXUgYnl0ZXMpIGludmFsaWQgKDwgJWQpXG4iOworICAgIHN0YXRpYyBaQ09OU1QgY2hhciBGYXIgSW52YWxpZENvbXByRGF0YUVBc1tdID0KKyAgICAgICIgaW52YWxpZCBjb21wcmVzc2VkIGRhdGEgZm9yIEVBc1xuIjsKKyAjICBpZiAoZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChOVFNEX0VBUykpCitAQCAtMjAyMyw3ICsyMDI1LDggQEAKKyAgICAgICAgIGViSUQgPSBtYWtld29yZChlZik7CisgICAgICAgICBlYkxlbiA9ICh1bnNpZ25lZCltYWtld29yZChlZitFQl9MRU4pOworIAorLSAgICAgICAgaWYgKGViTGVuID4gKGVmX2xlbiAtIEVCX0hFQURTSVpFKSkgeworKyAgICAgICAgaWYgKGViTGVuID4gKGVmX2xlbiAtIEVCX0hFQURTSVpFKSkKKysgICAgICAgIHsKKyAgICAgICAgICAgIC8qIERpc2NvdmVyZWQgc29tZSBleHRyYSBmaWVsZCBpbmNvbnNpc3RlbmN5ISAqLworICAgICAgICAgICAgIGlmICh1Ty5xZmxhZykKKyAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMSwgKChjaGFyICopc2xpZGUsICIlLTIycyAiLAorQEAgLTIxNTgsMTEgKzIxNjEsMTkgQEAKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICBjYXNlIEVGX1BLVk1TOgorLSAgICAgICAgICAgICAgICBpZiAobWFrZWxvbmcoZWYrRUJfSEVBRFNJWkUpICE9CisrICAgICAgICAgICAgICAgIGlmIChlYkxlbiA8IDQpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDEsCisrICAgICAgICAgICAgICAgICAgICAgKChjaGFyICopc2xpZGUsIExvYWRGYXJTdHJpbmcoVG9vU21hbGxFQmxlbmd0aCksCisrICAgICAgICAgICAgICAgICAgICAgZWJMZW4sIDQpKTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlIGlmIChtYWtlbG9uZyhlZitFQl9IRUFEU0laRSkgIT0KKyAgICAgICAgICAgICAgICAgICAgIGNyYzMyKENSQ1ZBTF9JTklUSUFMLCBlZisoRUJfSEVBRFNJWkUrNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXh0ZW50KShlYkxlbi00KSkpCisrICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDEsICgoY2hhciAqKXNsaWRlLAorICAgICAgICAgICAgICAgICAgICAgICBMb2FkRmFyU3RyaW5nKEJhZENSQ19FQXMpKSk7CisrICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgY2FzZSBFRl9QS1czMjoKKyAgICAgICAgICAgICBjYXNlIEVGX1BLVU5JWDoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzEwLWN2ZS0yMDE0LTgxNDAtdGVzdC1jb21wci1lYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzEwLWN2ZS0yMDE0LTgxNDAtdGVzdC1jb21wci1lYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGM3ZDUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMTAtY3ZlLTIwMTQtODE0MC10ZXN0LWNvbXByLWViLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb206IHNtcworU3ViamVjdDogRml4IENWRS0yMDE0LTgxNDA6IG91dC1vZi1ib3VuZHMgd3JpdGUgaXNzdWUgaW4gdGVzdF9jb21wcl9lYigpCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzc3MzcyMgorCitUaGUgcGF0Y2ggY29tZXMgZnJvbSB1bnppcF82LjAtOCtkZWI3dTIuZGViaWFuLnRhci5negorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKworLS0tIGEvZXh0cmFjdC5jCisrKysgYi9leHRyYWN0LmMKK0BAIC0yMjMyLDEwICsyMjMyLDE3IEBACisgICAgIGlmIChjb21wcl9vZmZzZXQgPCA0KSAgICAgICAgICAgICAgICAvKiBmaWVsZCBpcyBub3QgY29tcHJlc3NlZDogKi8KKyAgICAgICAgIHJldHVybiBQS19PSzsgICAgICAgICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgYW5kIHNpZ25hbCBPSyAqLworIAorKyAgICAvKiBSZXR1cm4gbm8vYmFkLWRhdGEgZXJyb3Igc3RhdHVzIGlmIGFueSBwcm9ibGVtIGlzIGZvdW5kOgorKyAgICAgKiAgICAxLiBlYl9zaXplIGlzIHRvbyBzbWFsbCB0byBob2xkIHRoZSB1bmNvbXByZXNzZWQgc2l6ZQorKyAgICAgKiAgICAgICAoZWJfdWNzaXplKS4gIChFbHNlIGV4dHJhY3QgZWJfdWNzaXplLikKKysgICAgICogICAgMi4gZWJfdWNzaXplIGlzIHplcm8gKGludmFsaWQpLiAgMjAxNC0xMi0wNCBTTVMuCisrICAgICAqICAgIDMuIGViX3Vjc2l6ZSBpcyBwb3NpdGl2ZSwgYnV0IGViX3NpemUgaXMgdG9vIHNtYWxsIHRvIGhvbGQKKysgICAgICogICAgICAgdGhlIGNvbXByZXNzZWQgZGF0YSBoZWFkZXIuCisrICAgICAqLworICAgICBpZiAoKGViX3NpemUgPCAoRUJfVUNTSVpFX1AgKyA0KSkgfHwKKy0gICAgICAgICgoZWJfdWNzaXplID0gbWFrZWxvbmcoZWIrKEVCX0hFQURTSVpFK0VCX1VDU0laRV9QKSkpID4gMEwgJiYKKy0gICAgICAgICBlYl9zaXplIDw9IChjb21wcl9vZmZzZXQgKyBFQl9DTVBSSEVBRExFTikpKQorLSAgICAgICAgcmV0dXJuIElaX0VGX1RSVU5DOyAgICAgICAgICAgICAgIC8qIG5vIGNvbXByZXNzZWQgZGF0YSEgKi8KKysgICAgICgoZWJfdWNzaXplID0gbWFrZWxvbmcoIGViKyAoRUJfSEVBRFNJWkUrIEVCX1VDU0laRV9QKSkpID09IDBMKSB8fAorKyAgICAgKChlYl91Y3NpemUgPiAwTCkgJiYgKGViX3NpemUgPD0gKGNvbXByX29mZnNldCArIEVCX0NNUFJIRUFETEVOKSkpKQorKyAgICAgICAgcmV0dXJuIElaX0VGX1RSVU5DOyAgICAgICAgICAgICAvKiBuby9iYWQgY29tcHJlc3NlZCBkYXRhISAqLworIAorICAgICBpZiAoCisgI2lmZGVmIElOVF8xNkJJVApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMTEtY3ZlLTIwMTQtODE0MS1nZXR6aXA2NGRhdGEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8xMS1jdmUtMjAxNC04MTQxLWdldHppcDY0ZGF0YS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGMxZGIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMTEtY3ZlLTIwMTQtODE0MS1nZXR6aXA2NGRhdGEucGF0Y2gKQEAgLTAsMCArMSwxNDQgQEAKK0Zyb206IHNtcworU3ViamVjdDogRml4IENWRS0yMDE0LTgxNDE6IG91dC1vZi1ib3VuZHMgcmVhZCBpc3N1ZXMgaW4gZ2V0WmlwNjREYXRhKCkKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNzczNzIyCisKK1RoZSBwYXRjaCBjb21lcyBmcm9tIHVuemlwXzYuMC04K2RlYjd1Mi5kZWJpYW4udGFyLmd6CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorCisKKy0tLSBhL2ZpbGVpby5jCisrKysgYi9maWxlaW8uYworQEAgLTE3Niw2ICsxNzYsOCBAQAorICNlbmRpZgorIHN0YXRpYyBaQ09OU1QgY2hhciBGYXIgRXh0cmFGaWVsZFRvb0xvbmdbXSA9CisgICAid2FybmluZzogIGV4dHJhIGZpZWxkIHRvbyBsb25nICglZCkuICBJZ25vcmluZy4uLlxuIjsKKytzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIEV4dHJhRmllbGRDb3JydXB0W10gPQorKyAgIndhcm5pbmc6ICBleHRyYSBmaWVsZCAodHlwZTogMHglMDR4KSBjb3JydXB0LiAgQ29udGludWluZy4uLlxuIjsKKyAKKyAjaWZkZWYgV0lORExMCisgICAgc3RhdGljIFpDT05TVCBjaGFyIEZhciBEaXNrRnVsbFF1ZXJ5W10gPQorQEAgLTIyOTUsNyArMjI5NywxMiBAQAorICAgICAgICAgICAgIGlmIChyZWFkYnVmKF9fR19fIChjaGFyICopRy5leHRyYV9maWVsZCwgbGVuZ3RoKSA9PSAwKQorICAgICAgICAgICAgICAgICByZXR1cm4gUEtfRU9GOworICAgICAgICAgICAgIC8qIExvb2tzIGxpa2UgaGVyZSBpcyB3aGVyZSBleHRyYSBmaWVsZHMgYXJlIHJlYWQgKi8KKy0gICAgICAgICAgICBnZXRaaXA2NERhdGEoX19HX18gRy5leHRyYV9maWVsZCwgbGVuZ3RoKTsKKysgICAgICAgICAgICBpZiAoZ2V0WmlwNjREYXRhKF9fR19fIEcuZXh0cmFfZmllbGQsIGxlbmd0aCkgIT0gUEtfQ09PTCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgICAgICAgICAgIExvYWRGYXJTdHJpbmcoIEV4dHJhRmllbGRDb3JydXB0KSwgRUZfUEtTWjY0KSk7CisrICAgICAgICAgICAgICAgIGVycm9yID0gUEtfV0FSTjsKKysgICAgICAgICAgICB9CisgI2lmZGVmIFVOSUNPREVfU1VQUE9SVAorICAgICAgICAgICAgIEcudW5pcGF0aF9maWxlbmFtZSA9IE5VTEw7CisgICAgICAgICAgICAgaWYgKEcuVXpPLlVfZmxhZyA8IDIpIHsKKy0tLSBhL3Byb2Nlc3MuYworKysrIGIvcHJvY2Vzcy5jCitAQCAtMSw1ICsxLDUgQEAKKyAvKgorLSAgQ29weXJpZ2h0IChjKSAxOTkwLTIwMDkgSW5mby1aSVAuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAgQ29weXJpZ2h0IChjKSAxOTkwLTIwMTQgSW5mby1aSVAuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIAorICAgU2VlIHRoZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFLCB2ZXJzaW9uIDIwMDktSmFuLTAyIG9yIGxhdGVyCisgICAodGhlIGNvbnRlbnRzIG9mIHdoaWNoIGFyZSBhbHNvIGluY2x1ZGVkIGluIHVuemlwLmgpIGZvciB0ZXJtcyBvZiB1c2UuCitAQCAtMTkwMSw0OCArMTkwMSw4MiBAQAorICAgICBhbmQgYSA0LWJ5dGUgdmVyc2lvbiBvZiBkaXNrIHN0YXJ0IG51bWJlci4KKyAgICAgU2V0cyBib3RoIGxvY2FsIGhlYWRlciBhbmQgY2VudHJhbCBoZWFkZXIgZmllbGRzLiAgTm90IHRlcnJpYmx5IGNsZXZlciwKKyAgICAgYnV0IGl0IG1lYW5zIHRoYXQgdGhpcyBwcm9jZWR1cmUgaXMgb25seSBjYWxsZWQgaW4gb25lIHBsYWNlLgorKworKyAgICAyMDE0LTEyLTA1IFNNUy4KKysgICAgQWRkZWQgY2hlY2tzIHRvIGVuc3VyZSB0aGF0IGVub3VnaCBkYXRhIGFyZSBhdmFpbGFibGUgYmVmb3JlIGNhbGxpbmcKKysgICAgbWFrZWludDY0KCkgb3IgbWFrZWxvbmcoKS4gIFJlcGxhY2VkIHZhcmlvdXMgc2l6ZW9mKCkgdmFsdWVzIHdpdGgKKysgICAgc2ltcGxlICgiNCIgb3IgIjgiKSBjb25zdGFudHMuICAoVGhlIFppcDY0IHN0cnVjdHVyZXMgZG8gbm90IGRlcGVuZAorKyAgICBvbiBvdXIgdmFyaWFibGUgc2l6ZXMuKSAgRXJyb3IgaGFuZGxpbmcgaXMgY3J1ZGUsIGJ1dCB3ZSBzaG91bGQgbm93CisrICAgIHN0YXkgd2l0aGluIHRoZSBidWZmZXIuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorKyNkZWZpbmUgWjY0RkxHUyAweGZmZmYKKysjZGVmaW5lIFo2NEZMR0wgMHhmZmZmZmZmZgorKworICAgICBpZiAoZWZfbGVuID09IDAgfHwgZWZfYnVmID09IE5VTEwpCisgICAgICAgICByZXR1cm4gUEtfQ09PTDsKKyAKKyAgICAgVHJhY2UoKHN0ZGVyciwiXG5nZXRaaXA2NERhdGE6IHNjYW5uaW5nIGV4dHJhIGZpZWxkIG9mIGxlbmd0aCAldVxuIiwKKyAgICAgICBlZl9sZW4pKTsKKyAKKy0gICAgd2hpbGUgKGVmX2xlbiA+PSBFQl9IRUFEU0laRSkgeworKyAgICB3aGlsZSAoZWZfbGVuID49IEVCX0hFQURTSVpFKQorKyAgICB7CisgICAgICAgICBlYl9pZCA9IG1ha2V3b3JkKEVCX0lEICsgZWZfYnVmKTsKKyAgICAgICAgIGViX2xlbiA9IG1ha2V3b3JkKEVCX0xFTiArIGVmX2J1Zik7CisgCistICAgICAgICBpZiAoZWJfbGVuID4gKGVmX2xlbiAtIEVCX0hFQURTSVpFKSkgeworLSAgICAgICAgICAgIC8qIGRpc2NvdmVyZWQgc29tZSBleHRyYSBmaWVsZCBpbmNvbnNpc3RlbmN5ISAqLworKyAgICAgICAgaWYgKGViX2xlbiA+IChlZl9sZW4gLSBFQl9IRUFEU0laRSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgLyogRXh0cmEgYmxvY2sgbGVuZ3RoIGV4Y2VlZHMgcmVtYWluaW5nIGV4dHJhIGZpZWxkIGxlbmd0aC4gKi8KKyAgICAgICAgICAgICBUcmFjZSgoc3RkZXJyLAorICAgICAgICAgICAgICAgImdldFppcDY0RGF0YTogYmxvY2sgbGVuZ3RoICV1ID4gcmVzdCBlZl9zaXplICV1XG4iLCBlYl9sZW4sCisgICAgICAgICAgICAgICBlZl9sZW4gLSBFQl9IRUFEU0laRSkpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorLSAgICAgICAgaWYgKGViX2lkID09IEVGX1BLU1o2NCkgeworLQorKyAgICAgICAgaWYgKGViX2lkID09IEVGX1BLU1o2NCkKKysgICAgICAgIHsKKyAgICAgICAgICAgaW50IG9mZnNldCA9IEVCX0hFQURTSVpFOworIAorLSAgICAgICAgICBpZiAoRy5jcmVjLnVjc2l6ZSA9PSAweGZmZmZmZmZmIHx8IEcubHJlYy51Y3NpemUgPT0gMHhmZmZmZmZmZil7CistICAgICAgICAgICAgRy5scmVjLnVjc2l6ZSA9IEcuY3JlYy51Y3NpemUgPSBtYWtlaW50NjQob2Zmc2V0ICsgZWZfYnVmKTsKKy0gICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKEcuY3JlYy51Y3NpemUpOworKyAgICAgICAgICBpZiAoKEcuY3JlYy51Y3NpemUgPT0gWjY0RkxHTCkgfHwgKEcubHJlYy51Y3NpemUgPT0gWjY0RkxHTCkpCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBpZiAob2Zmc2V0KyA4ID4gZWZfbGVuKQorKyAgICAgICAgICAgICAgcmV0dXJuIFBLX0VSUjsKKysKKysgICAgICAgICAgICBHLmNyZWMudWNzaXplID0gRy5scmVjLnVjc2l6ZSA9IG1ha2VpbnQ2NChvZmZzZXQgKyBlZl9idWYpOworKyAgICAgICAgICAgIG9mZnNldCArPSA4OworICAgICAgICAgICB9CistICAgICAgICAgIGlmIChHLmNyZWMuY3NpemUgPT0gMHhmZmZmZmZmZiB8fCBHLmxyZWMuY3NpemUgPT0gMHhmZmZmZmZmZil7CistICAgICAgICAgICAgRy5jc2l6ZSA9IEcubHJlYy5jc2l6ZSA9IEcuY3JlYy5jc2l6ZSA9IG1ha2VpbnQ2NChvZmZzZXQgKyBlZl9idWYpOworLSAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YoRy5jcmVjLmNzaXplKTsKKysKKysgICAgICAgICAgaWYgKChHLmNyZWMuY3NpemUgPT0gWjY0RkxHTCkgfHwgKEcubHJlYy5jc2l6ZSA9PSBaNjRGTEdMKSkKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGlmIChvZmZzZXQrIDggPiBlZl9sZW4pCisrICAgICAgICAgICAgICByZXR1cm4gUEtfRVJSOworKworKyAgICAgICAgICAgIEcuY3NpemUgPSBHLmNyZWMuY3NpemUgPSBHLmxyZWMuY3NpemUgPSBtYWtlaW50NjQob2Zmc2V0ICsgZWZfYnVmKTsKKysgICAgICAgICAgICBvZmZzZXQgKz0gODsKKyAgICAgICAgICAgfQorLSAgICAgICAgICBpZiAoRy5jcmVjLnJlbGF0aXZlX29mZnNldF9sb2NhbF9oZWFkZXIgPT0gMHhmZmZmZmZmZil7CisrCisrICAgICAgICAgIGlmIChHLmNyZWMucmVsYXRpdmVfb2Zmc2V0X2xvY2FsX2hlYWRlciA9PSBaNjRGTEdMKQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgaWYgKG9mZnNldCsgOCA+IGVmX2xlbikKKysgICAgICAgICAgICAgIHJldHVybiBQS19FUlI7CisrCisgICAgICAgICAgICAgRy5jcmVjLnJlbGF0aXZlX29mZnNldF9sb2NhbF9oZWFkZXIgPSBtYWtlaW50NjQob2Zmc2V0ICsgZWZfYnVmKTsKKy0gICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKEcuY3JlYy5yZWxhdGl2ZV9vZmZzZXRfbG9jYWxfaGVhZGVyKTsKKysgICAgICAgICAgICBvZmZzZXQgKz0gODsKKyAgICAgICAgICAgfQorLSAgICAgICAgICBpZiAoRy5jcmVjLmRpc2tfbnVtYmVyX3N0YXJ0ID09IDB4ZmZmZil7CisrCisrICAgICAgICAgIGlmIChHLmNyZWMuZGlza19udW1iZXJfc3RhcnQgPT0gWjY0RkxHUykKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGlmIChvZmZzZXQrIDQgPiBlZl9sZW4pCisrICAgICAgICAgICAgICByZXR1cm4gUEtfRVJSOworKworICAgICAgICAgICAgIEcuY3JlYy5kaXNrX251bWJlcl9zdGFydCA9ICh6dXZsX3QpbWFrZWxvbmcob2Zmc2V0ICsgZWZfYnVmKTsKKy0gICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKEcuY3JlYy5kaXNrX251bWJlcl9zdGFydCk7CisrICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7CisgICAgICAgICAgIH0KKysjaWYgMAorKyAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgLyogRXhwZWN0IG9ubHkgb25lIEVGX1BLU1o2NCBibG9jay4gKi8KKysjZW5kaWYgLyogMCAqLworICAgICAgICAgfQorIAorLSAgICAgICAgLyogU2tpcCB0aGlzIGV4dHJhIGZpZWxkIGJsb2NrICovCisrICAgICAgICAvKiBTa2lwIHRoaXMgZXh0cmEgZmllbGQgYmxvY2suICovCisgICAgICAgICBlZl9idWYgKz0gKGViX2xlbiArIEVCX0hFQURTSVpFKTsKKyAgICAgICAgIGVmX2xlbiAtPSAoZWJfbGVuICsgRUJfSEVBRFNJWkUpOworICAgICB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC9hdm9pZC1zdHJpcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwL2F2b2lkLXN0cmlwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMzBlNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC9hdm9pZC1zdHJpcC5wYXRjaApAQCAtMCwwICsxLDUwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwordW5peC9NYWtlZmlsZTogcmVtb3ZlIGhhcmQgY29kZWQgc3RyaXAgY29tbWFuZHMKKworUmVtb3ZlIHRoZSBoYXJkIGNvZGVkIHN0cmlwIGNvbW1hbmRzLCBib3RoIExGMiAodXNlZCBpbiBsaW5raW5nKSBhbmQKK1NUUklQIHVzZWQgYWxvbmUuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtdXIgdW56aXA2MC5vcmlnL3VuaXgvY29uZmlndXJlIHVuemlwNjAvdW5peC9jb25maWd1cmUKKy0tLSB1bnppcDYwLm9yaWcvdW5peC9jb25maWd1cmUJMjAwOS0wNC0xNiAxNDoyNToxMi4wMDAwMDAwMDAgLTA1MDAKKysrKyB1bnppcDYwL3VuaXgvY29uZmlndXJlCTIwMTEtMDYtMjEgMTE6MjM6MzYuODIyODQ5OTYwIC0wNTAwCitAQCAtMTcsNyArMTcsNyBAQAorIElaX0JaSVAyPSR7M30KKyBDRkxBR1M9IiR7Q0ZMQUdTfSAtSS4gLURVTklYIgorIExGTEFHUzE9IiIKKy1MRkxBR1MyPSItcyIKKytMRkxBR1MyPSIiCisgTE49ImxuIC1zIgorIAorIENGTEFHU19PUFQ9JycKK2RpZmYgLXVyIHVuemlwNjAub3JpZy91bml4L01ha2VmaWxlIHVuemlwNjAvdW5peC9NYWtlZmlsZQorLS0tIHVuemlwNjAub3JpZy91bml4L01ha2VmaWxlCTIwMDktMDEtMTggMTY6NDE6MTguMDAwMDAwMDAwIC0wNjAwCisrKysgdW56aXA2MC91bml4L01ha2VmaWxlCTIwMTEtMDYtMjEgMTE6MTI6MjIuOTAwMDAzMzg4IC0wNTAwCitAQCAtNTIsNyArNTIsNyBAQAorIENGID0gJChDRkxBR1MpICQoQ0ZfTk9PUFQpCisgTEZMQUdTMSA9CisgTEYgPSAtbyB1bnppcCRFICQoTEZMQUdTMSkKKy1MRjIgPSAtcworK0xGMiA9IAorIAorICMgVW5aaXBTRlggZmxhZ3MKKyBTTCA9IC1vIHVuemlwc2Z4JEUgJChMRkxBR1MxKQorQEAgLTcwLDcgKzcwLDcgQEAKKyBDSE1PRCA9IGNobW9kCisgQklOUEVSTVMgPSA3NTUKKyBNQU5QRVJNUyA9IDY0NAorLVNUUklQID0gc3RyaXAKKytTVFJJUCA9CisgRSA9CisgTyA9IC5vCisgTSA9IHVuaXgKK0BAIC03NzYsNyArNzc2LDYgQEAKKyAjCisgZ2NjOgkJdW5peF9tYWtlCisgCSQoTUFLRSkgdW56aXBzIENDPWdjYyBMRD1nY2MgQ0ZMQUdTPSItTzMiIExGMj0iIgorLQkkKFNUUklQKSAkKFVOWklQUykKKyAKKyAjIEhldXJpa29uIEhLNjggKDY4MDEwKSwgVW5pUGx1cysgU3lzdGVtIFYgNS4wLCBHcmVlbiBIaWxscyBDLTY4MDAwCisgaGs2ODoJCXVuaXhfbWFrZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvZGVmaW5lLWxkZmxhZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC9kZWZpbmUtbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTljNmUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvZGVmaW5lLWxkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorUGFzcyBMREZMQUdTIHRvIHRoZSBsaW5rZXIgCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNaWtoYWlsIER1cm5ldiA8TWlraGFpbF9EdXJuZXZAbWVudG9yLmNvbT4KKworZGlmZiAtTmF1ciBvbGQvdW5peC9jb25maWd1cmUgbmV3L3VuaXgvY29uZmlndXJlCistLS0gb2xkL3VuaXgvY29uZmlndXJlCTIwMTQtMDEtMTMgMjE6NTk6MjcuMDAwMDAwMDAwICsxMTAwCisrKysgbmV3L3VuaXgvY29uZmlndXJlCTIwMTQtMDEtMTQgMTY6MzY6MDIuMDAwMDAwMDAwICsxMTAwCitAQCAtMTYsNyArMTYsNyBAQAorIENGTEFHU1I9JHtDRkxBR1N9CisgSVpfQlpJUDI9JHszfQorIENGTEFHUz0iJHtDRkxBR1N9IC1JLiAtRFVOSVgiCistTEZMQUdTMT0iIgorK0xGTEFHUzE9JHtMREZMQUdTfQorIExGTEFHUzI9IiIKKyBMTj0ibG4gLXMiCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC91bnppcC02LjBfb3ZlcmZsb3czLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC91bnppcC02LjBfb3ZlcmZsb3czLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwYmZiYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwL3VuemlwLTYuMF9vdmVyZmxvdzMuZGlmZgpAQCAtMCwwICsxLDQ1IEBACitGcm9tIDE5MDA0MGViZmNmNTM5NWE2Y2NlZGVkZTJjYzkzNDNkMzRmMGExMDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBtYW5jaGEgPG1hbmNoYTEgQVQgem9obyBET1QgY29tPgorRGF0ZTogV2VkLCAxMSBGZWIgMjAxNQorU3ViamVjdDogSW5mby1aSVAgVW5aaXAgYnVmZmVyIG92ZXJmbG93CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworQnkgY2FyZWZ1bGx5IGNyYWZ0aW5nIGEgY29ycnVwdCBaSVAgYXJjaGl2ZSB3aXRoICJleHRyYSBmaWVsZHMiIHRoYXQKK3B1cnBvcnQgdG8gaGF2ZSBjb21wcmVzc2VkIGJsb2NrcyBsYXJnZXIgdGhhbiB0aGUgY29ycmVzcG9uZGluZwordW5jb21wcmVzc2VkIGJsb2NrcyBpbiBTVE9SRUQgbm8tY29tcHJlc3Npb24gbW9kZSwgYW4gYXR0YWNrZXIgY2FuCit0cmlnZ2VyIGEgaGVhcCBvdmVyZmxvdyB0aGF0IGNhbiByZXN1bHQgaW4gYXBwbGljYXRpb24gY3Jhc2ggb3IKK3Bvc3NpYmx5IGhhdmUgb3RoZXIgdW5zcGVjaWZpZWQgaW1wYWN0LgorCitUaGlzIHBhdGNoIGVuc3VyZXMgdGhhdCB3aGVuIGV4dHJhIGZpZWxkcyB1c2UgU1RPUkVEIG1vZGUsIHRoZQorImNvbXByZXNzZWQiIGFuZCB1bmNvbXByZXNzZWQgYmxvY2sgc2l6ZXMgbWF0Y2guCisKK1NpZ25lZC1vZmYtYnk6IG1hbmNoYSA8bWFuY2hhMSBBVCB6b2hvIERPVCBjb20+CistLS0KKyBleHRyYWN0LmMgfCAgICA4ICsrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorCistLS0gYS9leHRyYWN0LmMKKysrKyBiL2V4dHJhY3QuYworQEAgLTIyMTcsNiArMjIxNyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9jb21wcl9lYihfX0dfXyBlYiwgZWJfc2kKKyAgICAgdWxnIGViX3Vjc2l6ZTsKKyAgICAgdWNoICplYl91Y3B0cjsKKyAgICAgaW50IHI7CisrICAgIHVzaCBtZXRob2Q7CisgCisgICAgIGlmIChjb21wcl9vZmZzZXQgPCA0KSAgICAgICAgICAgICAgICAvKiBmaWVsZCBpcyBub3QgY29tcHJlc3NlZDogKi8KKyAgICAgICAgIHJldHVybiBQS19PSzsgICAgICAgICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgYW5kIHNpZ25hbCBPSyAqLworQEAgLTIyMjYsNiArMjIyNywxMyBAQCBzdGF0aWMgaW50IHRlc3RfY29tcHJfZWIoX19HX18gZWIsIGViX3NpCisgICAgICAgICAgZWJfc2l6ZSA8PSAoY29tcHJfb2Zmc2V0ICsgRUJfQ01QUkhFQURMRU4pKSkKKyAgICAgICAgIHJldHVybiBJWl9FRl9UUlVOQzsgICAgICAgICAgICAgICAvKiBubyBjb21wcmVzc2VkIGRhdGEhICovCisgCisrICAgIG1ldGhvZCA9IG1ha2V3b3JkKGViICsgKEVCX0hFQURTSVpFICsgY29tcHJfb2Zmc2V0KSk7CisrICAgIGlmICgobWV0aG9kID09IFNUT1JFRCkgJiYKKysgICAgICAgIChlYl9zaXplIC0gY29tcHJfb2Zmc2V0IC0gRUJfQ01QUkhFQURMRU4gIT0gZWJfdWNzaXplKSkKKysJcmV0dXJuIFBLX0VSUjsJCQkgIC8qIGNvbXByZXNzZWQgJiB1bmNvbXByZXNzZWQKKysJCQkJCSAgICogc2hvdWxkIG1hdGNoIGluIFNUT1JFRAorKwkJCQkJICAgKiBtZXRob2QgKi8KKysKKyAgICAgaWYgKAorICNpZmRlZiBJTlRfMTZCSVQKKyAgICAgICAgICgoKHVsZykoZXh0ZW50KWViX3Vjc2l6ZSkgIT0gZWJfdWNzaXplKSB8fApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXBfNi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXBfNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMGE3MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcF82LjAuYmIKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgZm9yIGV4dHJhY3RpbmcgYW5kIHZpZXdpbmcgZmlsZXMgaW4gLnppcCBhcmNoaXZlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaW5mby16aXAub3JnIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT05NGNhZWM1YTUxZWY1NWVmNzExZWU0ZThiMWM2OWUyOSIKK1BFID0gIjEiCitQUiA9ICJyNSIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuaW5mby16aXAub3JnL3B1Yi9pbmZvemlwL3NyYy91bnppcDYwLnRneiBcCisJZmlsZTovL2F2b2lkLXN0cmlwLnBhdGNoIFwKKwlmaWxlOi8vZGVmaW5lLWxkZmxhZ3MucGF0Y2ggXAorCWZpbGU6Ly8wNi11bnppcDYwLWFsdC1pY29udi11dGY4X0NWRS0yMDE1LTEzMTUucGF0Y2ggXAorCWZpbGU6Ly91bnppcC02LjBfb3ZlcmZsb3czLmRpZmYgXAorCWZpbGU6Ly8wOS1jdmUtMjAxNC04MTM5LWNyYy1vdmVyZmxvdy5wYXRjaCBcCisJZmlsZTovLzEwLWN2ZS0yMDE0LTgxNDAtdGVzdC1jb21wci1lYi5wYXRjaCBcCisJZmlsZTovLzExLWN2ZS0yMDE0LTgxNDEtZ2V0emlwNjRkYXRhLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjYyYjQ5MDQwNzQ4OTUyMWRiODYzYjUyM2E3Zjg2Mzc1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAzNmQ5Njk5MTY0NmQwNDQ5ZWQwYWE5NTJlNGZiZTIxYjQ3NmNlOTk0YWJjMjc2ZTQ5ZDMwZTY4NjcwOGJkMzciCitTID0gIiR7V09SS0RJUn0vdW56aXA2MCIKKworIyBNYWtlZmlsZSB1c2VzIENGX05PT1BUIGluc3RlYWQgb2YgQ0ZMQUdTLiAgV2UgbGlmdGVkIHRoZSB2YWx1ZXMgZnJvbQorIyBNYWtlZmlsZSBhbmQgYWRkIENGTEFHUy4gIE9wdGltaXphdGlvbiB3aWxsIGJlIG92ZXJyaWRlbiBieSB1bnppcAorIyBjb25maWd1cmUgdG8gYmUgLU8zLgorIworRVhUUkFfT0VNQUtFICs9ICJTVFJJUD10cnVlIExGMj0nJyBcCisgICAgICAgICAgICAgICAgJ0NGX05PT1BUPS1JLiAtSWJ6aXAyIC1EVU5JWCAke0NGTEFHU30nIgorCitleHBvcnQgTEQgPSAiJHtDQ30iCitMRF9jbGFzcy1uYXRpdmUgPSAiJHtDQ30iCisKK2RvX2NvbXBpbGUoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgLWYgdW5peC9NYWtlZmlsZSBnZW5lcmljCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgLWYgdW5peC9NYWtlZmlsZSBpbnN0YWxsIHByZWZpeD0ke0R9JHtwcmVmaXh9CisJaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9CisJbXYgJHtEfSR7cHJlZml4fS9tYW4vKiAke0R9JHttYW5kaXJ9CisJcm1kaXIgJHtEfSR7cHJlZml4fS9tYW4vCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInVuemlwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3VuemlwXSA9ICIke2JpbmRpcn0vdW56aXAiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4LXBpbmctZmFpbHVyZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL2ZpeC1waW5nLWZhaWx1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhYjljNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL2ZpeC1waW5nLWZhaWx1cmUucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorRml4IHBpbmcgbW9kZSBmYWlsdXJlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyAgCisKK1doZW4gd2F0Y2hkb2cgd29ya3Mgb24gcGluZyBtb2RlLCB0aGUgc3lzdGVtIHdpbGwgYmUgcmVib290ZWQgc2luY2UKK3dhdGNoZG9nIGNhbiBub3QgcmVjZWl2ZSB0aGUgZXhwZWN0ZWQgRUNPUkVQTFkgb24gYSBzZXR0aW5nIGludGVydmFsLgorCitQaW5nIG1vZGUgdXNlcyBhIHJhdyBzb2NrZXQgdG8gc2VuZCBhIEVDTyBwYWNrZXQsIHRoZW4gdXNlcyBzZWxlY3QoKQordG8gd2FpdCBhbmQgcmVjdmZyb20oKSB0byByZWNlaXZlIHRoZSBFQ09SRVBMWSBwYWNrZXQsIGlmIHNlbGVjdCgpCitzaG93cyB0aGUgZGF0YSBpcyByZWFkeSwgYW5kIHRoZSBkYXRhIGlzIG5vdCB0aGUgZXhwZWN0ZWQgRUNPUkVQTFksCithbmQgd2FpdGluZyB0aW1lIGlzIG5vdCBvdmVyZHVlLCBpdCB3aWxsIGNvbnRpbnVlIHVzZSBzZWxlY3QoKSBhbmQKK3JlY3Zmcm9tKCkuCisKK1Byb2JsZW0gaXMgdGhhdCB0aGUgcmF3IHNvY2tldCBjYW4gcmVjZWl2ZSBhbnkgaWNtcCBwYWNrZXRzLCBpZiB3ZSBkbworbm90IHNldCBmaWx0ZXJzLCBhbmQgdGhlcmUgYXJlIG1hbnkgaWNtcCBwYWNrZXRzIG9uIHNvY2tldCwgdGhpcworcHJvZ3JhbSB3aWxsIG5vdCBmaW5kIGl0cyBpbnRlcmVzdGVkIEVDT1JFUExZIHBhY2tldCBpbiBhIHNwZWNpYWwKK2ludGVydmFsLCB3aGljaCBtYWtlcyB0aGUgcGluZyBtb2RlIGZhaWwuCisKKworT3RoZXIgcHJvZ3JhbSBpcyB0aGF0IHdhdGNoZG9nIHNvbWV0aW1lIGNhbiBub3QgcmVhY2ggdGhlIGNhbGwgb2YKK3JlY3Zmcm9tIHRvIHRyeSB0byByZWNlaXZlIHBhY2tldHMgc2luY2UgdHZfc2VjIG9mIHN0cnVjdCB0aW1ldmFsCitvZiBzZWxlY3QgcGFyYW1ldGVyIGlzIDAuCisKK1RoZSB0aW1lb3V0IG9mIHNlbGVjdCgpIGlzIHRoZSByZXN1bHQgb2YgcGluZyBpbnRlcnZhbCBtaW51c2luZyB0aGUKK3RpbWUgb2YgY2FsbGluZyBnZXR0aW1lb2ZkYXkgc3BlbmRpbmcsIHdoZW4gcGluZyBpbnRlcnZhbCBpcyAxIHNlY29uZCwKK2FuZCB0aGUgY2FsbCBvZiBnZXR0aW1lb2ZkYXkoKSBzcGVuZHMgc2V2ZXJhbCB1c2Vjb25kcywgdGhlIHR2X3NlYyBvZgorc3RydWN0IHRpbWV2YWwgb2Ygc2VsZWN0IHBhcmFtZXRlciBtdXN0IGJlIDAsIGF0IHRoYXQgY29uZGl0aW9uLCB3ZQorc2hvdWxkIGl0IGlzIHZhbGlkIG9mIHR2X3NlYyBvZiBzdHJ1Y3QgdGltZXZhbCBvZiBzZWxlY3QgcGFyYW1ldGVyIGJlIDAgCisKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9uZXQuYyAgICAgIHwgICAgMiArLQorIHNyYy93YXRjaGRvZy5jIHwgICAgNSArKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDogd2F0Y2hkb2ctNS4xNC9zcmMvd2F0Y2hkb2cuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdhdGNoZG9nLTUuMTQub3JpZy9zcmMvd2F0Y2hkb2cuYworKysrIHdhdGNoZG9nLTUuMTQvc3JjL3dhdGNoZG9nLmMKK0BAIC0yNCw2ICsyNCw3IEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyAjaW5jbHVkZSA8bGludXgvb29tLmg+CisrI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KKyAjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCitJbmRleDogd2F0Y2hkb2ctNS4xNC9zcmMvbmV0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3YXRjaGRvZy01LjE0Lm9yaWcvc3JjL25ldC5jCisrKysgd2F0Y2hkb2ctNS4xNC9zcmMvbmV0LmMKK0BAIC0xMSw3ICsxMSw4IEBACisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN5cy90aW1lLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKy0jaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+CisrI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KKysvLyNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgkJLyogZm9yIGdldGhvc3RuYW1lKCkgZXRjICovCitAQCAtMTc5LDYgKzE4MCw5IEBAIGludCBvcGVuX25ldGNoZWNrKHN0cnVjdCBsaXN0ICp0bGlzdCkKKyB7CisgCXN0cnVjdCBsaXN0ICphY3Q7CisgCWludCBob2xkID0gMDsKKysJc3RydWN0IGljbXBfZmlsdGVyIGZpbHQ7CisrCWZpbHQuZGF0YSA9IH4oMTw8SUNNUF9FQ0hPUkVQTFkpOworKworIAorIAlpZiAodGxpc3QgIT0gTlVMTCkgeworIAkJZm9yIChhY3QgPSB0bGlzdDsgYWN0ICE9IE5VTEw7IGFjdCA9IGFjdC0+bmV4dCkgeworQEAgLTIwMiw2ICsyMDYsNyBAQCBpbnQgb3Blbl9uZXRjaGVjayhzdHJ1Y3QgbGlzdCAqdGxpc3QpCisgCQkJICAgIGZhdGFsX2Vycm9yKEVYX1NZU0VSUiwgImVycm9yIG9wZW5pbmcgc29ja2V0ICglcykiLCBzdHJlcnJvcihlcnJubykpOworIAkJCX0KKyAKKysJCQlzZXRzb2Nrb3B0KG5ldC0+c29ja19mcCwgU09MX1JBVywgSUNNUF9GSUxURVIsIChjaGFyKikmZmlsdCwgc2l6ZW9mKGZpbHQpKTsKKyAJCQkvKiB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgYnJvYWRjYXN0IHBpbmdzIHRvIHdvcmsgKi8KKyAJCQkodm9pZClzZXRzb2Nrb3B0KG5ldC0+c29ja19mcCwgU09MX1NPQ0tFVCwgU09fQlJPQURDQVNULCAoY2hhciAqKSZob2xkLCBzaXplb2YoaG9sZCkpOworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4c2VwYnVpbGQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy9maXhzZXBidWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmFkM2ExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4c2VwYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorRml4IG91dCBvZiB0cmVlIGJ1aWxkIHN1cHBvcnQ6CisKK3wgaW5zdGFsbGluZyAvZXRjL3dhdGNoZG9nLmNvbmYKK3wgIC9iaW4vbWtkaXIgLXAgJy9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC9pbWFnZS91c3Ivc2hhcmUvbWFuL21hbjUnCit8ICAvYmluL21rZGlyIC1wICcvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvaW1hZ2UvdXNyL3NoYXJlL21hbi9tYW44JworfCAgL3Vzci9iaW4vaW5zdGFsbCAtYyAtbSA2NDQgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC93YXRjaGRvZy81LjEzLXIwL3dhdGNoZG9nLTUuMTMvd2F0Y2hkb2cuY29uZi41ICcvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvaW1hZ2UvdXNyL3NoYXJlL21hbi9tYW41JworfCAgL3Vzci9iaW4vaW5zdGFsbCAtYyAtbSA2NDQgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC93YXRjaGRvZy81LjEzLXIwL3dhdGNoZG9nLTUuMTMvd2F0Y2hkb2cuOCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvd2F0Y2hkb2ctNS4xMy93ZF9rZWVwYWxpdmUuOCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvd2F0Y2hkb2ctNS4xMy93ZF9pZGVudGlmeS44ICcvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvaW1hZ2UvdXNyL3NoYXJlL21hbi9tYW44JworfCAvdXNyL2Jpbi9pbnN0YWxsOiBjYW5ub3Qgc3RhdCBgd2F0Y2hkb2cuY29uZic6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK3wgbWFrZVsyXTogKioqIFtpbnN0YWxsLWV0Yy1sb2NhbF0gRXJyb3IgMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMy8wMy8yMQorCitJbmRleDogd2F0Y2hkb2ctNS4xMy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdhdGNoZG9nLTUuMTMub3JpZy9NYWtlZmlsZS5hbQkyMDEzLTAyLTAxIDExOjE1OjQ0LjAwMDAwMDAwMCArMDAwMAorKysrIHdhdGNoZG9nLTUuMTMvTWFrZWZpbGUuYW0JMjAxMy0wMy0yMSAxMTo1OTozNS42MzcxMzkwMzEgKzAwMDAKK0BAIC0xNiw3ICsxNiw3IEBACisgCWVsc2UgXAorIAkgICAgICAgIGVjaG8gImluc3RhbGxpbmcgJChDT05GSUdfRklMRU5BTUUpIjsgXAorIAkJJChta2luc3RhbGxkaXJzKSBgZGlybmFtZSAkKERFU1RESVIpJChDT05GSUdfRklMRU5BTUUpYDsgXAorLQkgICAgICAgICQoSU5TVEFMTF9EQVRBKSB3YXRjaGRvZy5jb25mICQoREVTVERJUikkKENPTkZJR19GSUxFTkFNRSk7IFwKKysJICAgICAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL3dhdGNoZG9nLmNvbmYgJChERVNURElSKSQoQ09ORklHX0ZJTEVOQU1FKTsgXAorIAlmaQorIAorIGluc3RhbGwtZGF0YS1sb2NhbDogaW5zdGFsbC1ldGMtbG9jYWwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL3dhdGNoZG9nLWNvbmYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy93YXRjaGRvZy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZjI5NjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy93YXRjaGRvZy1jb25mLnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKKy0tLSB3YXRjaGRvZy01LjEzLm9yaWcvd2F0Y2hkb2cuY29uZgkyMDEzLTAyLTAxIDEyOjE1OjQ0LjAwMDAwMDAwMCArMDEwMAorKysrIHdhdGNoZG9nLTUuMTMvd2F0Y2hkb2cuY29uZgkyMDE0LTExLTEzIDEwOjU5OjQzLjIzMzk0MzAwMCArMDEwMAorQEAgLTIwLDcgKzIwLDcgQEAKKyAjdGVzdC1iaW5hcnkJCT0gCisgI3Rlc3QtdGltZW91dAkJPSAKKyAKKy0jd2F0Y2hkb2ctZGV2aWNlCT0gL2Rldi93YXRjaGRvZworK3dhdGNoZG9nLWRldmljZQk9IC9kZXYvd2F0Y2hkb2cKKyAKKyAjIERlZmF1bHRzIGNvbXBpbGVkIGludG8gdGhlIGJpbmFyeQorICN0ZW1wZXJhdHVyZS1kZXZpY2UJPQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvd2F0Y2hkb2ctaW5pdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL3dhdGNoZG9nLWluaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhOGVlOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL3dhdGNoZG9nLWluaXQucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorLS0tIHdhdGNoZG9nLTUuMTMub3JpZy9yZWRoYXQvd2F0Y2hkb2cuaW5pdAkyMDE0LTExLTEyIDE3OjE4OjM5LjEyNTk0MzAwMCArMDEwMAorKysrIHdhdGNoZG9nLTUuMTMvcmVkaGF0L3dhdGNoZG9nLmluaXQJMjAxNC0xMS0xMiAxODoyNzozNi4xODk5NDMwMDAgKzAxMDAKK0BAIC03LDcgKzcsNyBAQAorICMgICAgICAgICAgICAgICAgIEhlbm5pbmcgUC4gU2NobWllZGVoYXVzZW4gPGhwc0B0YW5zdGFhZmwuZGU+CisgCisgIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy0uIC9ldGMvcmMuZC9pbml0LmQvZnVuY3Rpb25zCisrLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKyAKKyBbIC14IC91c3Ivc2Jpbi93YXRjaGRvZyAtYSAtZSAvZXRjL3dhdGNoZG9nLmNvbmYgXSB8fCBleGl0IDAKKyAKK0BAIC0yMywyMiArMjMsMjIgQEAKKyAKKyBzdGFydCgpIHsKKyAKKy0JZWNobyAtbiAkIlN0YXJ0aW5nICRwcm9nOiAiCisrCWVjaG8gLW4gIlN0YXJ0aW5nICRwcm9nOiAiCisgCWlmIFsgLW4gIiQocGlkb2Zwcm9jICRwcm9nKSIgXTsgdGhlbgorLQkJZWNobyAtbiAkIiRwcm9nOiBhbHJlYWR5IHJ1bm5pbmciCistCQllY2hvX2ZhaWx1cmUKKysJCWVjaG8gLW4gIiRwcm9nOiBhbHJlYWR5IHJ1bm5pbmcgIgorKwkJZmFpbHVyZQorIAkJZWNobworIAkJcmV0dXJuIDEKKyAJZmkKKyAJaWYgWyAiJFZFUkJPU0UiID0gInllcyIgXTsgdGhlbgorLQkgICAgZGFlbW9uIC91c3Ivc2Jpbi8ke3Byb2d9IC12CisrCSAgICAvdXNyL3NiaW4vJHtwcm9nfSAtdgorIAllbHNlCistCSAgICBkYWVtb24gL3Vzci9zYmluLyR7cHJvZ30KKysJICAgIC91c3Ivc2Jpbi8ke3Byb2d9CisgICAgICAgICBmaQorIAlSRVRWQUw9JD8KKyAJWyAkUkVUVkFMIC1lcSAwIF0gJiYgdG91Y2ggJGxvY2tmaWxlCistCVsgJFJFVFZBTCAtZXEgMCBdICYmIGVjaG9fc3VjY2VzcworLQlbICRSRVRWQUwgLW5lIDAgXSAmJiBlY2hvX2ZhaWx1cmUKKysJWyAkUkVUVkFMIC1lcSAwIF0gJiYgc3VjY2VzcworKwlbICRSRVRWQUwgLW5lIDAgXSAmJiBmYWlsdXJlCisgCWVjaG8KKyAJcmV0dXJuICRSRVRWQUwKKyB9CitAQCAtNTAsOCArNTAsMTAgQEAKKyAJIyBhbmQgcmVib290IHRoZSBib3guCisgCWtpbGxwcm9jICRwcm9nIC1URVJNCisgCVJFVFZBTD0kPworLQllY2hvCisgCVsgJFJFVFZBTCAtZXEgMCBdICYmIHJtIC1mICRsb2NrZmlsZSAkcGlkZmlsZQorKwlbICRSRVRWQUwgLWVxIDAgXSAmJiBzdWNjZXNzCisrCVsgJFJFVFZBTCAtbmUgMCBdICYmIGZhaWx1cmUKKysJZWNobworIAlyZXR1cm4gJFJFVFZBTAorIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nXzUuMTQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZ181LjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYzBhOGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZ181LjE0LmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiU29mdHdhcmUgd2F0Y2hkb2ciCitERVNDUklQVElPTiA9ICJXYXRjaGRvZyBpcyBhIGRhZW1vbiB0aGF0IGNoZWNrcyBpZiB5b3VyIHN5c3RlbSBpcyBzdGlsbCBcCit3b3JraW5nLiBJZiBwcm9ncmFtcyBpbiB1c2VyIHNwYWNlIGFyZSBub3QgbG9uZ2VyIGV4ZWN1dGVkIFwKK2l0IHdpbGwgcmVib290IHRoZSBzeXN0ZW0uIgorSE9NRVBBR0UgPSAiaHR0cDovL3dhdGNoZG9nLnNvdXJjZWZvcmdlLm5ldC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTcyMDMwJmF0aWQ9ODYwMTk0IgorCitMSUNFTlNFID0gIkdQTC0yLjArIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWNjMDU1MWJmNTRhZDk3ZjZiNTQxNzIwZjg0ZDY1NjkiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3dhdGNoZG9nL3dhdGNoZG9nLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXhzZXBidWlsZC5wYXRjaCBcCisJICAgZmlsZTovL2ZpeC1waW5nLWZhaWx1cmUucGF0Y2ggXAorCSAgIGZpbGU6Ly93YXRjaGRvZy1pbml0LnBhdGNoIFwKKwkgICBmaWxlOi8vd2F0Y2hkb2ctY29uZi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjViMmRiYTBjNTkzOTQyZjRhY2MxMDBiY2EwZDU2MGM0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYyMGIyZjQ5ZTk4NzlmMmU4NWM3M2Q0YzFmNDIyZjkxMDFlNmIzOGU4MjRmZWEyNDE0YmVmZDhiYjY4NjZhZDEiCisKK2luaGVyaXQgYXV0b3Rvb2xzCitpbmhlcml0IHVwZGF0ZS1yYy5kCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJ3YXRjaGRvZy5zaCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDE1IDEgMiAzIDQgNSAuIHN0b3AgODUgMCA2IC4iCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImtlcm5lbC1tb2R1bGUtc29mdGRvZyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtRCAke1N9L3JlZGhhdC93YXRjaGRvZy5pbml0ICR7RH0vJHtzeXNjb25mZGlyfS9pbml0LmQvd2F0Y2hkb2cuc2gKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OWI4OTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQuaW5jCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiQ29uc29sZSBVUkwgZG93bmxvYWQgdXRpbGl0eSBzdXBwb3J0aW5nIEhUVFAsIEZUUCwgZXRjIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS93Z2V0LyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorREVQRU5EUyA9ICJnbnV0bHMgemxpYiBsaWJwY3JlIgorCitJTkNfUFIgPSAicjE2IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLWlwdjYgLS13aXRoLXNzbD1nbnV0bHMgLS1kaXNhYmxlLXJwYXRoIC0tZGlzYWJsZS1pcmkgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1saWJnbnV0bHMtcHJlZml4IGFjX2N2X2hlYWRlcl91dWlkX3V1aWRfaD1ubyIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAid2dldCIKK0FMVEVSTkFUSVZFXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICJjYS1jZXJ0aWZpY2F0ZXMiCisKK0JCQ0xBU1NFWFRFTkQgKz0gIm5hdGl2ZXNkayIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbGlidXVpZF0gPSAiLS13aXRoLWxpYnV1aWQsIC0td2l0aG91dC1saWJ1dWlkLHV0aWwtbGludXgiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiM2M2ZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiB3Z2V0LTEuMTYuMy9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3Z2V0LTEuMTYuMy5vcmlnL2xpYi9NYWtlZmlsZS5hbQorKysrIHdnZXQtMS4xNi4zL2xpYi9NYWtlZmlsZS5hbQorQEAgLTg0Niw3ICs4NDYsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0L2ZpeF9tYWtlZmlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC9maXhfbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhMmU3ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC9maXhfbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogd2dldC0xLjEyL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdnZXQtMS4xMi5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA5LTA5LTIyIDA5OjM5OjQ5LjAwMDAwMDAwMCAtMDcwMAorKysrIHdnZXQtMS4xMi9jb25maWd1cmUuYWMJMjAxMS0xMC0xOSAyMDozMjo1My43MTQ4MTIxNjAgLTA3MDAKK0BAIC0xNzcsNyArMTc3LDcgQEAKKyBkbmwgR2V0dGV4dAorIGRubAorIEFNX0dOVV9HRVRURVhUKFtleHRlcm5hbF0sW25lZWQtbmdldHRleHRdKQorLUFNX0dOVV9HRVRURVhUX1ZFUlNJT04oWzAuMTddKQorK0FNX0dOVV9HRVRURVhUX1ZFUlNJT04oWzAuMThdKQorIAorIEFDX1BST0dfUkFOTElCCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXRfMS4xNi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0XzEuMTYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzM0YTQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0XzEuMTYuMy5iYgpAQCAtMCwwICsxLDkgQEAKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS93Z2V0L3dnZXQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9tYWtlZmlsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNjFkOTAxMWI5OWY4MjQxMDZhNWQ1YTA1ZGQwZjYzZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZjFjNmQwOWQ3MTQ4YzFjMmQ5ZmQwZWE2NTVkY2Y0ZGNjNDA3ZGViMmRiMzJkNDEyNjI1MWNhMDI0NWNiNjcwIgorCityZXF1aXJlIHdnZXQuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjE4L2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjE4L2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk1Y2RjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMTgvYXV0b21ha2UtZm9yZWlnbi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitTdWJqZWN0OiBbUEFUQ0hdIGF1dG9tYWtlIGZvcmVpZ24gc3RyaWN0bmVzcworCitVc2UgZm9yZWlnbiBzdHJpY3RuZXNzIHRvIGF2b2lkIGF1dG9tYWtlIGVycm9ycy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBubyBsb25nZXIgYWN0aXZlXQorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgICAgNSArKystLQorIDEgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiMzBiNmY1Li5iZDMyMjJjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xLDYgKzEsNyBAQAorIGRubCBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorLUFDX0lOSVQod2hpY2guYykKKy1BTV9JTklUX0FVVE9NQUtFKHdoaWNoLCAyLjE4KQorK0FDX0lOSVQoW3doaWNoXSxbMi4xOF0pCisrQUNfQ09ORklHX1NSQ0RJUih3aGljaC5jKQorK0FNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorIEFNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisgQU1fTUFJTlRBSU5FUl9NT0RFCisgCistLSAKKzEuNy4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMTgvZml4X25hbWVfY29uZmxpY3RfZ3JvdXBfbWVtYmVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4xOC9maXhfbmFtZV9jb25mbGljdF9ncm91cF9tZW1iZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5YjFhNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMTgvZml4X25hbWVfY29uZmxpY3RfZ3JvdXBfbWVtYmVyLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdGhpcyBpcyAyLjE4KEdQTHYyKSBzcGVjaWZpY10KKworIyBnbGliYyBhbHNvIGltcGxlbWVudHMgdGhlIGZ1bmN0aW9uIGdyb3VwX21lbWJlci4gVG8gYXZvaWQgbmFtZSBjb25mbGljdCwKKyMgaGVyZSBsZXQgdXMgYXBwZW5kIGEgIl8iIHRvIHdoaWNoJ3MgdmVyc2lvbi4KKyMKKyMgU2lnbmVkLW9mZi1ieSBEZXh1YW4gQ3VpIDxkZXh1YW4uY3VpQGludGVsLmNvbT4sIDIwMTAtMDgtMjAKKyMgKHRoaXMgcGF0Y2ggaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIpCisKKy0tLSB3aGljaC0yLjE4L2Jhc2guYworKysrIHdoaWNoLTIuMTgvYmFzaC5jCitAQCAtNDUsNyArNDUsMTIgQEAKKyAgKiAtIGNoYW5nZWQgYWxsIG9jY3VyZW5jZXMgb2YgJ2dpZF90JyBpbnRvICdHSURfVCcuCisgICogLSBleHBvcnRlZCBmdW5jdGlvbnMgbmVlZGVkIGluIHdoaWNoLmMKKyAgKi8KKy1zdGF0aWMgaW50IGdyb3VwX21lbWJlciAoR0lEX1QgZ2lkKTsKKysKKysvKgorKyAqIGdsaWJjIGFsc28gaW1wbGVtZW50cyB0aGUgZnVuY3Rpb24gZ3JvdXBfbWVtYmVyLiBUbyBhdm9pZCBuYW1lIGNvbmZsaWN0LAorKyAqIGhlcmUgbGV0IHVzIGFwcGVuZCBhICJfIiB0byB3aGljaCdzIHZlcnNpb24uCisrICovCisrc3RhdGljIGludCBfZ3JvdXBfbWVtYmVyIChHSURfVCBnaWQpOworIHN0YXRpYyBjaGFyKiBleHRyYWN0X2NvbG9uX3VuaXQgKGNoYXIgY29uc3QqIHN0cmluZywgaW50ICpwX2luZGV4KTsKKyAKKyAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQEAgLTIwMCw4ICsyMDUsOCBAQAorIAorIC8qIEZyb20gYmFzaC0yLjA1YiAvIGdlbmVyYWwuYyAvIGxpbmUgODA1ICovCisgLyogUmV0dXJuIG5vbi16ZXJvIGlmIEdJRCBpcyBvbmUgdGhhdCB3ZSBoYXZlIGluIG91ciBncm91cHMgbGlzdC4gKi8KKy1pbnQKKy1ncm91cF9tZW1iZXIgKEdJRF9UIGdpZCkKKytzdGF0aWMgaW50CisrX2dyb3VwX21lbWJlciAoR0lEX1QgZ2lkKQorIHsKKyAjaWYgZGVmaW5lZCAoSEFWRV9HRVRHUk9VUFMpCisgICByZWdpc3RlciBpbnQgaTsKK0BAIC0yOTAsNyArMjk1LDcgQEAKKyAgICAgcmV0dXJuIChYX0JJVCAodV9tb2RlX2JpdHMgKGZpbmZvLnN0X21vZGUpKSkgPyAoRlNfRVhJU1RTIHwgRlNfRVhFQ0FCTEUpIDogRlNfRVhJU1RTOworIAorICAgLyogT3RoZXJ3aXNlLCBpZiB3ZSBhcmUgaW4gdGhlIG93bmluZyBncm91cCwgdGhlIGdyb3VwIHBlcm1pc3Npb25zIGFwcGx5LiAqLworLSAgaWYgKGdyb3VwX21lbWJlciAoZmluZm8uc3RfZ2lkKSkKKysgIGlmIChfZ3JvdXBfbWVtYmVyIChmaW5mby5zdF9naWQpKQorICAgICByZXR1cm4gKFhfQklUIChnX21vZGVfYml0cyAoZmluZm8uc3RfbW9kZSkpKSA/IChGU19FWElTVFMgfCBGU19FWEVDQUJMRSkgOiBGU19FWElTVFM7CisgCisgICAvKiBPdGhlcndpc2UsIGlmIHdlIGFyZSBpbiB0aGUgb3RoZXIgZ3JvdXAsIHRoZSBvdGhlciBwZXJtaXNzaW9ucyBhcHBseS4gKi8KK0BAIC0zMzEsNyArMzM2LDcgQEAKKyAvKiBHaXZlbiBhIHN0cmluZyBjb250YWluaW5nIHVuaXRzIG9mIGluZm9ybWF0aW9uIHNlcGFyYXRlZCBieSBjb2xvbnMsCisgICAgcmV0dXJuIHRoZSBuZXh0IG9uZSBwb2ludGVkIHRvIGJ5IChQX0lOREVYKSwgb3IgTlVMTCBpZiB0aGVyZSBhcmUgbm8gbW9yZS4KKyAgICBBZHZhbmNlIChQX0lOREVYKSB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBjb2xvbi4gKi8KKy1jaGFyKgorK3N0YXRpYyBjaGFyKgorIGV4dHJhY3RfY29sb25fdW5pdCAoY2hhciBjb25zdCogc3RyaW5nLCBpbnQqIHBfaW5kZXgpCisgeworICAgaW50IGksIHN0YXJ0LCBsZW47CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjIxL2F1dG9tYWtlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4yMS9hdXRvbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDBmMmU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4yMS9hdXRvbWFrZS5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcGRhdGUgYXV0b2NvbmYgcHJvbG9ndWUgdG8gdXNlICJmb3JlaWduIiBzdHJpY3RuZXNzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGQ5NzQ0NjEuLmEyMGRmYTggMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEsNyArMSw3IEBACisgZG5sIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisgQUNfSU5JVChbd2hpY2hdLCBbMi4yMV0pCisgQUNfQ09ORklHX1NSQ0RJUih3aGljaC5jKQorLUFNX0lOSVRfQVVUT01BS0UKKytBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorIEFNX01BSU5UQUlORVJfTU9ERQorIAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaF8yLjE4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2hfMi4xOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjZjYzk5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2hfMi4xOC5iYgpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIkRpc3BsYXlzIHRoZSBmdWxsIHBhdGggb2Ygc2hlbGwgY29tbWFuZHMiCitERVNDUklQVElPTiA9ICJXaGljaCBpcyBhIHV0aWxpdHkgdGhhdCBwcmludHMgb3V0IHRoZSBmdWxsIHBhdGggb2YgdGhlIFwKK2V4ZWN1dGFibGVzIHRoYXQgYmFzaCgxKSB3b3VsZCBleGVjdXRlIHdoZW4gdGhlIHBhc3NlZCBcCitwcm9ncmFtIG5hbWVzIHdvdWxkIGhhdmUgYmVlbiBlbnRlcmVkIG9uIHRoZSBzaGVsbCBwcm9tcHQuIFwKK0l0IGRvZXMgdGhpcyBieSB1c2luZyB0aGUgZXhhY3Qgc2FtZSBhbGdvcml0aG0gYXMgYmFzaC4iCitTRUNUSU9OID0gImxpYnMiCitIT01FUEFHRSA9ICJodHRwOi8vY2FybG8xNy5ob21lLnhzNGFsbC5ubC93aGljaC8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCisKK1BSID0gInIyIgorCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL3JlcG8vcGtncy93aGljaC93aGljaC0yLjE4LnRhci5nei80MmQ1MTkzOGU0OGI5MWY2ZTE5ZmFiZjIxNmY1YzNlOS93aGljaC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4X25hbWVfY29uZmxpY3RfZ3JvdXBfbWVtYmVyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDJkNTE5MzhlNDhiOTFmNmUxOWZhYmYyMTZmNWMzZTkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTQ0NWNkN2UwMmVjMGMyNmE0NGZkNTYwOTg0NjRkZWQwNjRiYTVkOTNkZDJlMTVlYzEyNDEwYmE1NmIyZTU0NCIKKworREVQRU5EUyA9ICJjd2F1dG9tYWNyb3MtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJT0xEPSJAQUNMT0NBTF9DV0ZMQUdTQCIKKwlORVc9Ii1JICR7U1RBR0lOR19ESVJfTkFUSVZFfS8ke2RhdGFkaXJ9L2N3YXV0b21hY3Jvcy9tNCIKKwlzZWQgLWkgInMjJHtPTER9IyR7TkVXfSNnIiBgZ3JlcCAtcmwgJHtPTER9ICR7U31gCit9CisKK0FMVEVSTkFUSVZFXyR7UE59ID0gIndoaWNoIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaF8yLjIxLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2hfMi4yMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzY4N2Y2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2hfMi4yMS5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIkRpc3BsYXlzIHRoZSBmdWxsIHBhdGggb2Ygc2hlbGwgY29tbWFuZHMiCitERVNDUklQVElPTiA9ICJXaGljaCBpcyBhIHV0aWxpdHkgdGhhdCBwcmludHMgb3V0IHRoZSBmdWxsIHBhdGggb2YgdGhlIFwKK2V4ZWN1dGFibGVzIHRoYXQgYmFzaCgxKSB3b3VsZCBleGVjdXRlIHdoZW4gdGhlIHBhc3NlZCBcCitwcm9ncmFtIG5hbWVzIHdvdWxkIGhhdmUgYmVlbiBlbnRlcmVkIG9uIHRoZSBzaGVsbCBwcm9tcHQuIFwKK0l0IGRvZXMgdGhpcyBieSB1c2luZyB0aGUgZXhhY3Qgc2FtZSBhbGdvcml0aG0gYXMgYmFzaC4iCitTRUNUSU9OID0gImxpYnMiCitIT01FUEFHRSA9ICJodHRwOi8vY2FybG8xNy5ob21lLnhzNGFsbC5ubC93aGljaC8iCisKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly93aGljaC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PWE5OTYzNjkzYWYyMjcyZTdhOGRmNmYyMzExNjRlN2EyIgorREVQRU5EUyAgICAgPSAiY3dhdXRvbWFjcm9zLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK1BSID0gInIzIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWliZXJ0eSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3doaWNoL3doaWNoLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvbWFrZS5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjA5N2ZmMWEzMjRhZTAyZTBhM2IwMzY5ZjA3YTc1NDRhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY0YTI0NWI5NDEyNGIzNzdkOGI0OTY0NmJmNDIxZjkxNTVkMzZhYTc2MTRiNmViZjgzNzA1ZDNmZmM3NmVhYWQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCXNlZCAtaSAtZSAncyVAQUNMT0NBTF9DV0ZMQUdTQCUtSSAke1NUQUdJTkdfRElSX05BVElWRX0vdXNyL3NoYXJlL2N3YXV0b21hY3Jvcy9tNCVnJyAke1N9L01ha2VmaWxlLmFtICR7U30vdGlsZGUvTWFrZWZpbGUuYW0KK30KKworQUxURVJOQVRJVkVfJHtQTn0gPSAid2hpY2giCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzLzAwMDEtUmVpbnN0YXRlLXhkZy10ZXJtaW5hbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hkZy11dGlscy94ZGctdXRpbHMvMDAwMS1SZWluc3RhdGUteGRnLXRlcm1pbmFsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZDFiYWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzLzAwMDEtUmVpbnN0YXRlLXhkZy10ZXJtaW5hbC5wYXRjaApAQCAtMCwwICsxLDY3MiBAQAorRnJvbSAxNzRhYTcyMDZmNGIzMDhkNGQyMjkyYmI4MDY3YTA3ZDhjYzcxNWMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IFR1ZSwgMjkgQXByIDIwMTQgMDc6Mjk6MzIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmVpbnN0YXRlIHhkZy10ZXJtaW5hbAorCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1JldmVydF0KKy0tLQorIHNjcmlwdHMvTWFrZWZpbGUuaW4gIHwgICA2ICstCisgc2NyaXB0cy94ZGctdGVybWluYWwgfCA2MjIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA2MjUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA3NTUgc2NyaXB0cy94ZGctdGVybWluYWwKKworZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUuaW4gYi9zY3JpcHRzL01ha2VmaWxlLmluCitpbmRleCAyYzdkMmFjLi5iZWYxMGQxIDEwMDY0NAorLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5pbgorKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5pbgorQEAgLTIwLDExICsyMCwxMSBAQCBTQ1JJUFRTCQk9IFwKKyAgICAgeGRnLW9wZW4gXAorICAgICB4ZGctZW1haWwgXAorICAgICB4ZGctc2NyZWVuc2F2ZXIgXAorLSAgICB4ZGctc2V0dGluZ3MKKysgICAgeGRnLXNldHRpbmdzIFwKKysgICAgeGRnLXRlcm1pbmFsCisgIyAgICB4ZGctc3UKKyAjICAgIHhkZy1jb3B5IFwKKyAjICAgIHhkZy1maWxlLWRpYWxvZworLSMgICAgeGRnLXRlcm1pbmFsCisgCisgTUFOUEFHRVM9CSQoU0NSSVBUUzolPW1hbi8lLjEpCisgV0VCUEFHRVM9CSQoU0NSSVBUUzolPSUuaHRtbCkKK0BAIC00Miw3ICs0Miw3IEBAIHJlbGVhc2U6CXNjcmlwdHMgaHRtbCBtYW4KKyAJcm0gLWYgeGRnLSouaW4gKn4gSEFDS0lORyBnZW5lcmF0ZS1oZWxwLXNjcmlwdC5hd2sKKyAJcm0gLXJmIGRlc2MvCisgCXJtIC1yZiB4c2wvCistCXJtIC1mIHhkZy1maWxlLWRpYWxvZyB4ZGctc3UgeGRnLWNvcHkgeGRnLXRlcm1pbmFsCisrCXJtIC1mIHhkZy1maWxlLWRpYWxvZyB4ZGctc3UgeGRnLWNvcHkKKyAKKyBkaXN0Y2xlYW46IGNsZWFuCisgCXJtIC1mIE1ha2VmaWxlCitkaWZmIC0tZ2l0IGEvc2NyaXB0cy94ZGctdGVybWluYWwgYi9zY3JpcHRzL3hkZy10ZXJtaW5hbAorbmV3IGZpbGUgbW9kZSAxMDA3NTUKK2luZGV4IDAwMDAwMDAuLjRiZDkyMDUKKy0tLSAvZGV2L251bGwKKysrKyBiL3NjcmlwdHMveGRnLXRlcm1pbmFsCitAQCAtMCwwICsxLDYyMiBAQAorKyMhL2Jpbi9zaAorKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjICAgeGRnLXRlcm1pbmFsCisrIworKyMgICBVdGlsaXR5IHNjcmlwdCB0byBvcGVuIHRoZSByZWdpc3RlcmVkIHRlcm1pbmFsIGVtdWxhdG9yCisrIworKyMgICBSZWZlciB0byB0aGUgdXNhZ2UoKSBmdW5jdGlvbiBiZWxvdyBmb3IgdXNhZ2UuCisrIworKyMgICBDb3B5cmlnaHQgMjAwOS0yMDEwLCBGYXRoaSBCb3VkcmEgPGZhYm9AZnJlZWRlc2t0b3Aub3JnPgorKyMgICBDb3B5cmlnaHQgMjAwOS0yMDEwLCBSZXggRGlldGVyIDxyZGlldGVyQGZlZG9yYXByb2plY3Qub3JnPgorKyMgICBDb3B5cmlnaHQgMjAwNiwgS2V2aW4gS3JhbW1lciA8a2V2aW4ua3JhbW1lckBnbXguYXQ+CisrIworKyMgICBMSUNFTlNFOgorKyMKKysjICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKysjICAgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKysjICAgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorKyMgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKysjICAgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisrIyAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrIworKyMgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorKyMgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysjCisrIyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisrIyAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorKyMgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorKyMgICBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorKyMgICBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKysjICAgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisrIyAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKysjCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworK21hbnVhbHBhZ2UoKQorK3sKKytjYXQgPDwgX01BTlVBTFBBR0UKKytOYW1lCisrCisrICAgeGRnLXRlcm1pbmFsIC0gb3BlbnMgdGhlIHVzZXIncyBwcmVmZXJyZWQgdGVybWluYWwgZW11bGF0b3IgYXBwbGljYXRpb24KKysKKytTeW5vcHNpcworKworKyAgIHhkZy10ZXJtaW5hbCBbY29tbWFuZF0KKysKKysgICB4ZGctdGVybWluYWwgeyAtLWhlbHAgfCAtLW1hbnVhbCB8IC0tdmVyc2lvbiB9CisrCisrRGVzY3JpcHRpb24KKysKKysgICB4ZGctdGVybWluYWwgb3BlbnMgdGhlIHVzZXIncyBwcmVmZXJyZWQgdGVybWluYWwgZW11bGF0b3IgYXBwbGljYXRpb24uIElmCisrICAgYSBjb21tYW5kIGlzIHByb3ZpZGVkIHRoZSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgYnkgdGhlIHNoZWxsIHdpdGhpbiB0aGUKKysgICBuZXdseSBvcGVuZWQgdGVybWluYWwgd2luZG93LgorKworKyAgIHhkZy10ZXJtaW5hbCBpcyBmb3IgdXNlIGluc2lkZSBhIGRlc2t0b3Agc2Vzc2lvbiBvbmx5LiBJdCBpcyBub3QKKysgICByZWNvbW1lbmRlZCB0byB1c2UgeGRnLXRlcm1pbmFsIGFzIHJvb3QuCisrCisrT3B0aW9ucworKworKyAgIC0taGVscAorKyAgICAgICAgICAgU2hvdyBjb21tYW5kIHN5bm9wc2lzLgorKworKyAgIC0tbWFudWFsCisrICAgICAgICAgICBTaG93IHRoaXMgbWFudWFsIHBhZ2UuCisrCisrICAgLS12ZXJzaW9uCisrICAgICAgICAgICBTaG93IHRoZSB4ZGctdXRpbHMgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKysKKytFeGl0IENvZGVzCisrCisrICAgQW4gZXhpdCBjb2RlIG9mIDAgaW5kaWNhdGVzIHN1Y2Nlc3Mgd2hpbGUgYSBub24temVybyBleGl0IGNvZGUgaW5kaWNhdGVzCisrICAgZmFpbHVyZS4gVGhlIGZvbGxvd2luZyBmYWlsdXJlIGNvZGVzIGNhbiBiZSByZXR1cm5lZDoKKysKKysgICAxCisrICAgICAgICAgICBFcnJvciBpbiBjb21tYW5kIGxpbmUgc3ludGF4LgorKworKyAgIDMKKysgICAgICAgICAgIEEgcmVxdWlyZWQgdG9vbCBjb3VsZCBub3QgYmUgZm91bmQuCisrCisrICAgNAorKyAgICAgICAgICAgVGhlIGFjdGlvbiBmYWlsZWQuCisrCisrRXhhbXBsZXMKKysKKysgeGRnLXRlcm1pbmFsCisrCisrICAgT3BlbnMgdGhlIHVzZXIncyBkZWZhdWx0IHRlcm1pbmFsIGVtdWxhdG9yLCBqdXN0IHN0YXJ0aW5nIGFuIGludGVyYWN0aXZlCisrICAgc2hlbGwuCisrCisrIHhkZy10ZXJtaW5hbCB0b3AKKysKKysgICBPcGVucyB0aGUgdXNlcidzIGRlZmF1bHQgdGVybWluYWwgZW11bGF0b3IgYW5kIGxldHMgaXQgcnVuIHRoZSB0b3AKKysgICBleGVjdXRhYmxlLgorK19NQU5VQUxQQUdFCisrfQorKworK3VzYWdlKCkKKyt7CisrY2F0IDw8IF9VU0FHRQorKyAgIHhkZy10ZXJtaW5hbCAtIG9wZW5zIHRoZSB1c2VyJ3MgcHJlZmVycmVkIHRlcm1pbmFsIGVtdWxhdG9yIGFwcGxpY2F0aW9uCisrCisrU3lub3BzaXMKKysKKysgICB4ZGctdGVybWluYWwgW2NvbW1hbmRdCisrCisrICAgeGRnLXRlcm1pbmFsIHsgLS1oZWxwIHwgLS1tYW51YWwgfCAtLXZlcnNpb24gfQorKworK19VU0FHRQorK30KKysKKysjQHhkZy11dGlscy1jb21tb25ACisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjICAgQ29tbW9uIHV0aWxpdHkgZnVuY3Rpb25zIGluY2x1ZGVkIGluIGFsbCBYREcgd3JhcHBlciBzY3JpcHRzCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKytERUJVRygpCisreworKyAgWyAteiAiJHtYREdfVVRJTFNfREVCVUdfTEVWRUx9IiBdICYmIHJldHVybiAwOworKyAgWyAke1hER19VVElMU19ERUJVR19MRVZFTH0gLWx0ICQxIF0gJiYgcmV0dXJuIDA7CisrICBzaGlmdAorKyAgZWNobyAiJEAiID4mMgorK30KKysKKysjIFRoaXMgaGFuZGxlcyBiYWNrc2xhc2hlcyBidXQgbm90IHF1b3RlIG1hcmtzLgorK2ZpcnN0X3dvcmQoKQorK3sKKysgICAgcmVhZCBmaXJzdCByZXN0CisrICAgIGVjaG8gIiRmaXJzdCIKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIG1hcCBhIGJpbmFyeSB0byBhIC5kZXNrdG9wIGZpbGUKKytiaW5hcnlfdG9fZGVza3RvcF9maWxlKCkKKyt7CisrICAgIHNlYXJjaD0iJHtYREdfREFUQV9IT01FOi0kSE9NRS8ubG9jYWwvc2hhcmV9OiR7WERHX0RBVEFfRElSUzotL3Vzci9sb2NhbC9zaGFyZTovdXNyL3NoYXJlfSIKKysgICAgYmluYXJ5PSJgd2hpY2ggIiQxImAiCisrICAgIGJpbmFyeT0iYHJlYWRsaW5rIC1mICIkYmluYXJ5ImAiCisrICAgIGJhc2U9ImBiYXNlbmFtZSAiJGJpbmFyeSJgIgorKyAgICBJRlM9OgorKyAgICBmb3IgZGlyIGluICRzZWFyY2g7IGRvCisrICAgICAgICB1bnNldCBJRlMKKysgICAgICAgIFsgIiRkaXIiIF0gfHwgY29udGludWUKKysgICAgICAgIFsgLWQgIiRkaXIvYXBwbGljYXRpb25zIiBdIHx8IFsgLWQgIiRkaXIvYXBwbG5rIiBdIHx8IGNvbnRpbnVlCisrICAgICAgICBmb3IgZmlsZSBpbiAiJGRpciIvYXBwbGljYXRpb25zLyouZGVza3RvcCAiJGRpciIvYXBwbGljYXRpb25zLyovKi5kZXNrdG9wICIkZGlyIi9hcHBsbmsvKi5kZXNrdG9wICIkZGlyIi9hcHBsbmsvKi8qLmRlc2t0b3A7IGRvCisrICAgICAgICAgICAgWyAtciAiJGZpbGUiIF0gfHwgY29udGludWUKKysgICAgICAgICAgICAjIENoZWNrIHRvIG1ha2Ugc3VyZSBpdCdzIHdvcnRoIHRoZSBwcm9jZXNzaW5nLgorKyAgICAgICAgICAgIGdyZXAgLXEgIl5FeGVjLiokYmFzZSIgIiRmaWxlIiB8fCBjb250aW51ZQorKyAgICAgICAgICAgICMgTWFrZSBzdXJlIGl0J3MgYSB2aXNpYmxlIGRlc2t0b3AgZmlsZSAoZS5nLiBub3QgInByZWZlcnJlZC13ZWItYnJvd3Nlci5kZXNrdG9wIikuCisrICAgICAgICAgICAgZ3JlcCAtRXEgIl4oTm9EaXNwbGF5fEhpZGRlbik9dHJ1ZSIgIiRmaWxlIiAmJiBjb250aW51ZQorKyAgICAgICAgICAgIGNvbW1hbmQ9ImBncmVwIC1FICJeRXhlYyhcW1teXT1dKl0pPz0iICIkZmlsZSIgfCBjdXQgLWQ9IC1mIDItIHwgZmlyc3Rfd29yZGAiCisrICAgICAgICAgICAgY29tbWFuZD0iYHdoaWNoICIkY29tbWFuZCJgIgorKyAgICAgICAgICAgIGlmIFsgeCJgcmVhZGxpbmsgLWYgIiRjb21tYW5kImAiID0geCIkYmluYXJ5IiBdOyB0aGVuCisrICAgICAgICAgICAgICAgICMgRml4IGFueSBkb3VibGUgc2xhc2hlcyB0aGF0IGdvdCBhZGRlZCBwYXRoIGNvbXBvc2l0aW9uCisrICAgICAgICAgICAgICAgIGVjaG8gIiRmaWxlIiB8IHNlZCAtZSAncywvLyosLyxnJworKyAgICAgICAgICAgICAgICByZXR1cm4KKysgICAgICAgICAgICBmaQorKyAgICAgICAgZG9uZQorKyAgICBkb25lCisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBtYXAgYSAuZGVza3RvcCBmaWxlIHRvIGEgYmluYXJ5CisrIyMgRklYTUU6IGhhbmRsZSB2ZW5kb3IgZGlyIGNhc2UKKytkZXNrdG9wX2ZpbGVfdG9fYmluYXJ5KCkKKyt7CisrICAgIHNlYXJjaD0iJHtYREdfREFUQV9IT01FOi0kSE9NRS8ubG9jYWwvc2hhcmV9OiR7WERHX0RBVEFfRElSUzotL3Vzci9sb2NhbC9zaGFyZTovdXNyL3NoYXJlfSIKKysgICAgZGVza3RvcD0iYGJhc2VuYW1lICIkMSJgIgorKyAgICBJRlM9OgorKyAgICBmb3IgZGlyIGluICRzZWFyY2g7IGRvCisrICAgICAgICB1bnNldCBJRlMKKysgICAgICAgIFsgIiRkaXIiIF0gJiYgWyAtZCAiJGRpci9hcHBsaWNhdGlvbnMiIF0gfHwgY29udGludWUKKysgICAgICAgIGZpbGU9IiRkaXIvYXBwbGljYXRpb25zLyRkZXNrdG9wIgorKyAgICAgICAgWyAtciAiJGZpbGUiIF0gfHwgY29udGludWUKKysgICAgICAgICMgUmVtb3ZlIGFueSBhcmd1bWVudHMgKCVGLCAlZiwgJVUsICV1LCBldGMuKS4KKysgICAgICAgIGNvbW1hbmQ9ImBncmVwIC1FICJeRXhlYyhcW1teXT1dKl0pPz0iICIkZmlsZSIgfCBjdXQgLWQ9IC1mIDItIHwgZmlyc3Rfd29yZGAiCisrICAgICAgICBjb21tYW5kPSJgd2hpY2ggIiRjb21tYW5kImAiCisrICAgICAgICByZWFkbGluayAtZiAiJGNvbW1hbmQiCisrICAgICAgICByZXR1cm4KKysgICAgZG9uZQorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRXhpdCBzY3JpcHQgb24gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRpbmcgdGhlIGRlc2lyZWQgb3BlcmF0aW9uCisrCisrZXhpdF9zdWNjZXNzKCkKKyt7CisrICAgIGlmIFsgJCMgLWd0IDAgXTsgdGhlbgorKyAgICAgICAgZWNobyAiJEAiCisrICAgICAgICBlY2hvCisrICAgIGZpCisrCisrICAgIGV4aXQgMAorK30KKysKKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIEV4aXQgc2NyaXB0IG9uIG1hbGZvcm1lZCBhcmd1bWVudHMsIG5vdCBlbm91Z2ggYXJndW1lbnRzCisrIyBvciBtaXNzaW5nIHJlcXVpcmVkIG9wdGlvbi4KKysjIHByaW50cyB1c2FnZSBpbmZvcm1hdGlvbgorKworK2V4aXRfZmFpbHVyZV9zeW50YXgoKQorK3sKKysgICAgaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisrICAgICAgICBlY2hvICJ4ZGctdGVybWluYWw6ICRAIiA+JjIKKysgICAgICAgIGVjaG8gIlRyeSAneGRnLXRlcm1pbmFsIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKKysgICAgZWxzZQorKyAgICAgICAgdXNhZ2UKKysgICAgICAgIGVjaG8gIlVzZSAnbWFuIHhkZy10ZXJtaW5hbCcgb3IgJ3hkZy10ZXJtaW5hbCAtLW1hbnVhbCcgZm9yIGFkZGl0aW9uYWwgaW5mby4iCisrICAgIGZpCisrCisrICAgIGV4aXQgMQorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRXhpdCBzY3JpcHQgb24gbWlzc2luZyBmaWxlIHNwZWNpZmllZCBvbiBjb21tYW5kIGxpbmUKKysKKytleGl0X2ZhaWx1cmVfZmlsZV9taXNzaW5nKCkKKyt7CisrICAgIGlmIFsgJCMgLWd0IDAgXTsgdGhlbgorKyAgICAgICAgZWNobyAieGRnLXRlcm1pbmFsOiAkQCIgPiYyCisrICAgIGZpCisrCisrICAgIGV4aXQgMgorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRXhpdCBzY3JpcHQgb24gZmFpbHVyZSB0byBsb2NhdGUgbmVjZXNzYXJ5IHRvb2wgYXBwbGljYXRpb25zCisrCisrZXhpdF9mYWlsdXJlX29wZXJhdGlvbl9pbXBvc3NpYmxlKCkKKyt7CisrICAgIGlmIFsgJCMgLWd0IDAgXTsgdGhlbgorKyAgICAgICAgZWNobyAieGRnLXRlcm1pbmFsOiAkQCIgPiYyCisrICAgIGZpCisrCisrICAgIGV4aXQgMworK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRXhpdCBzY3JpcHQgb24gZmFpbHVyZSByZXR1cm5lZCBieSBhIHRvb2wgYXBwbGljYXRpb24KKysKKytleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ZhaWxlZCgpCisreworKyAgICBpZiBbICQjIC1ndCAwIF07IHRoZW4KKysgICAgICAgIGVjaG8gInhkZy10ZXJtaW5hbDogJEAiID4mMgorKyAgICBmaQorKworKyAgICBleGl0IDQKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRXhpdCBzY3JpcHQgb24gaW5zdWZmaWNpZW50IHBlcm1pc3Npb24gdG8gcmVhZCBhIHNwZWNpZmllZCBmaWxlCisrCisrZXhpdF9mYWlsdXJlX2ZpbGVfcGVybWlzc2lvbl9yZWFkKCkKKyt7CisrICAgIGlmIFsgJCMgLWd0IDAgXTsgdGhlbgorKyAgICAgICAgZWNobyAieGRnLXRlcm1pbmFsOiAkQCIgPiYyCisrICAgIGZpCisrCisrICAgIGV4aXQgNQorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGl0IHNjcmlwdCBvbiBpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiB0byB3cml0ZSBhIHNwZWNpZmllZCBmaWxlCisrCisrZXhpdF9mYWlsdXJlX2ZpbGVfcGVybWlzc2lvbl93cml0ZSgpCisreworKyAgICBpZiBbICQjIC1ndCAwIF07IHRoZW4KKysgICAgICAgIGVjaG8gInhkZy10ZXJtaW5hbDogJEAiID4mMgorKyAgICBmaQorKworKyAgICBleGl0IDYKKyt9CisrCisrY2hlY2tfaW5wdXRfZmlsZSgpCisreworKyAgICBpZiBbICEgLWUgIiQxIiBdOyB0aGVuCisrICAgICAgICBleGl0X2ZhaWx1cmVfZmlsZV9taXNzaW5nICJmaWxlICckMScgZG9lcyBub3QgZXhpc3QiCisrICAgIGZpCisrICAgIGlmIFsgISAtciAiJDEiIF07IHRoZW4KKysgICAgICAgIGV4aXRfZmFpbHVyZV9maWxlX3Blcm1pc3Npb25fcmVhZCAibm8gcGVybWlzc2lvbiB0byByZWFkIGZpbGUgJyQxJyIKKysgICAgZmkKKyt9CisrCisrY2hlY2tfdmVuZG9yX3ByZWZpeCgpCisreworKyAgICBmaWxlX2xhYmVsPSIkMiIKKysgICAgWyAtbiAiJGZpbGVfbGFiZWwiIF0gfHwgZmlsZV9sYWJlbD0iZmlsZW5hbWUiCisrICAgIGZpbGU9YGJhc2VuYW1lICIkMSJgCisrICAgIGNhc2UgIiRmaWxlIiBpbgorKyAgICAgICBbWzphbHBoYTpdXSotKikKKysgICAgICAgICByZXR1cm4KKysgICAgICAgICA7OworKyAgICBlc2FjCisrCisrICAgIGVjaG8gInhkZy10ZXJtaW5hbDogJGZpbGVfbGFiZWwgJyRmaWxlJyBkb2VzIG5vdCBoYXZlIGEgcHJvcGVyIHZlbmRvciBwcmVmaXgiID4mMgorKyAgICBlY2hvICdBIHZlbmRvciBwcmVmaXggY29uc2lzdHMgb2YgYWxwaGEgY2hhcmFjdGVycyAoW2EtekEtWl0pIGFuZCBpcyB0ZXJtaW5hdGVkJyA+JjIKKysgICAgZWNobyAnd2l0aCBhIGRhc2ggKCItIikuIEFuIGV4YW1wbGUgJyIkZmlsZV9sYWJlbCInIGlzICciJ2V4YW1wbGUtJGZpbGUnIiA+JjIKKysgICAgZWNobyAiVXNlIC0tbm92ZW5kb3IgdG8gb3ZlcnJpZGUgb3IgJ3hkZy10ZXJtaW5hbCAtLW1hbnVhbCcgZm9yIGFkZGl0aW9uYWwgaW5mby4iID4mMgorKyAgICBleGl0IDEKKyt9CisrCisrY2hlY2tfb3V0cHV0X2ZpbGUoKQorK3sKKysgICAgIyBpZiB0aGUgZmlsZSBleGlzdHMsIGNoZWNrIGlmIGl0IGlzIHdyaXRlYWJsZQorKyAgICAjIGlmIGl0IGRvZXMgbm90IGV4aXN0cywgY2hlY2sgaWYgd2UgYXJlIGFsbG93ZWQgdG8gd3JpdGUgb24gdGhlIGRpcmVjdG9yeQorKyAgICBpZiBbIC1lICIkMSIgXTsgdGhlbgorKyAgICAgICAgaWYgWyAhIC13ICIkMSIgXTsgdGhlbgorKyAgICAgICAgICAgIGV4aXRfZmFpbHVyZV9maWxlX3Blcm1pc3Npb25fd3JpdGUgIm5vIHBlcm1pc3Npb24gdG8gd3JpdGUgdG8gZmlsZSAnJDEnIgorKyAgICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgICAgRElSPWBkaXJuYW1lICIkMSJgCisrICAgICAgICBpZiBbICEgLXcgIiRESVIiIF0gfHwgWyAhIC14ICIkRElSIiBdOyB0aGVuCisrICAgICAgICAgICAgZXhpdF9mYWlsdXJlX2ZpbGVfcGVybWlzc2lvbl93cml0ZSAibm8gcGVybWlzc2lvbiB0byBjcmVhdGUgZmlsZSAnJDEnIgorKyAgICAgICAgZmkKKysgICAgZmkKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIENoZWNrcyBmb3Igc2hhcmVkIGNvbW1hbmRzLCBlLmcuIC0taGVscAorKworK2NoZWNrX2NvbW1vbl9jb21tYW5kcygpCisreworKyAgICB3aGlsZSBbICQjIC1ndCAwIF0gOyBkbworKyAgICAgICAgcGFybT0iJDEiCisrICAgICAgICBzaGlmdAorKworKyAgICAgICAgY2FzZSAiJHBhcm0iIGluCisrICAgICAgICAgICAgLS1oZWxwKQorKyAgICAgICAgICAgIHVzYWdlCisrICAgICAgICAgICAgZWNobyAiVXNlICdtYW4geGRnLXRlcm1pbmFsJyBvciAneGRnLXRlcm1pbmFsIC0tbWFudWFsJyBmb3IgYWRkaXRpb25hbCBpbmZvLiIKKysgICAgICAgICAgICBleGl0X3N1Y2Nlc3MKKysgICAgICAgICAgICA7OworKworKyAgICAgICAgICAgIC0tbWFudWFsKQorKyAgICAgICAgICAgIG1hbnVhbHBhZ2UKKysgICAgICAgICAgICBleGl0X3N1Y2Nlc3MKKysgICAgICAgICAgICA7OworKworKyAgICAgICAgICAgIC0tdmVyc2lvbikKKysgICAgICAgICAgICBlY2hvICJ4ZGctdGVybWluYWwgMS4xLjAgcmMxIgorKyAgICAgICAgICAgIGV4aXRfc3VjY2VzcworKyAgICAgICAgICAgIDs7CisrICAgICAgICBlc2FjCisrICAgIGRvbmUKKyt9CisrCisrY2hlY2tfY29tbW9uX2NvbW1hbmRzICIkQCIKKysKKytbIC16ICIke1hER19VVElMU19ERUJVR19MRVZFTH0iIF0gJiYgdW5zZXQgWERHX1VUSUxTX0RFQlVHX0xFVkVMOworK2lmIFsgJHtYREdfVVRJTFNfREVCVUdfTEVWRUwtMH0gLWx0IDEgXTsgdGhlbgorKyAgICAjIEJlIHNpbGVudAorKyAgICB4ZGdfcmVkaXJlY3Rfb3V0cHV0PSIgPiAvZGV2L251bGwgMj4gL2Rldi9udWxsIgorK2Vsc2UKKysgICAgIyBBbGwgb3V0cHV0IHRvIHN0ZGVycgorKyAgICB4ZGdfcmVkaXJlY3Rfb3V0cHV0PSIgPiYyIgorK2ZpCisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBDaGVja3MgZm9yIGtub3duIGRlc2t0b3AgZW52aXJvbm1lbnRzCisrIyBzZXQgdmFyaWFibGUgREUgdG8gdGhlIGRlc2t0b3AgZW52aXJvbm1lbnRzIG5hbWUsIGxvd2VyY2FzZQorKworK2RldGVjdERFKCkKKyt7CisrICAgICMgc2VlIGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTM0MTY0CisrICAgIHVuc2V0IEdSRVBfT1BUSU9OUworKworKyAgICBpZiBbIC1uICIke1hER19DVVJSRU5UX0RFU0tUT1B9IiBdOyB0aGVuCisrICAgICAgY2FzZSAiJHtYREdfQ1VSUkVOVF9ERVNLVE9QfSIgaW4KKysgICAgICAgICBFTkxJR0hURU5NRU5UKQorKyAgICAgICAgICAgREU9ZW5saWdodGVubWVudDsKKysgICAgICAgICAgIDs7CisrICAgICAgICAgR05PTUUpCisrICAgICAgICAgICBERT1nbm9tZTsKKysgICAgICAgICAgIDs7CisrICAgICAgICAgS0RFKQorKyAgICAgICAgICAgREU9a2RlOworKyAgICAgICAgICAgOzsKKysgICAgICAgICBMWERFKQorKyAgICAgICAgICAgREU9bHhkZTsKKysgICAgICAgICAgIDs7CisrICAgICAgICAgTUFURSkKKysgICAgICAgICAgIERFPW1hdGU7CisrICAgICAgICAgICA7OworKyAgICAgICAgIFhGQ0UpCisrICAgICAgICAgICBERT14ZmNlCisrICAgICAgICAgICA7OworKyAgICAgIGVzYWMKKysgICAgZmkKKysKKysgICAgaWYgWyB4IiRERSIgPSB4IiIgXTsgdGhlbgorKyAgICAgICMgY2xhc3NpYyBmYWxsYmFja3MKKysgICAgICBpZiBbIHgiJEtERV9GVUxMX1NFU1NJT04iICE9IHgiIiBdOyB0aGVuIERFPWtkZTsKKysgICAgICBlbGlmIFsgeCIkR05PTUVfREVTS1RPUF9TRVNTSU9OX0lEIiAhPSB4IiIgXTsgdGhlbiBERT1nbm9tZTsKKysgICAgICBlbGlmIFsgeCIkTUFURV9ERVNLVE9QX1NFU1NJT05fSUQiICE9IHgiIiBdOyB0aGVuIERFPW1hdGU7CisrICAgICAgZWxpZiBgZGJ1cy1zZW5kIC0tcHJpbnQtcmVwbHkgLS1kZXN0PW9yZy5mcmVlZGVza3RvcC5EQnVzIC9vcmcvZnJlZWRlc2t0b3AvREJ1cyBvcmcuZnJlZWRlc2t0b3AuREJ1cy5HZXROYW1lT3duZXIgc3RyaW5nOm9yZy5nbm9tZS5TZXNzaW9uTWFuYWdlciA+IC9kZXYvbnVsbCAyPiYxYCA7IHRoZW4gREU9Z25vbWU7CisrICAgICAgZWxpZiB4cHJvcCAtcm9vdCBfRFRfU0FWRV9NT0RFIDI+IC9kZXYvbnVsbCB8IGdyZXAgJyA9IFwieGZjZTRcIiQnID4vZGV2L251bGwgMj4mMTsgdGhlbiBERT14ZmNlOworKyAgICAgIGVsaWYgeHByb3AgLXJvb3QgMj4gL2Rldi9udWxsIHwgZ3JlcCAtaSAnXnhmY2VfZGVza3RvcF93aW5kb3cnID4vZGV2L251bGwgMj4mMTsgdGhlbiBERT14ZmNlCisrICAgICAgZWxpZiBlY2hvICRERVNLVE9QIHwgZ3JlcCAtcSAnXkVubGlnaHRlbm1lbnQnOyB0aGVuIERFPWVubGlnaHRlbm1lbnQ7CisrICAgICAgZmkKKysgICAgZmkKKysKKysgICAgaWYgWyB4IiRERSIgPSB4IiIgXTsgdGhlbgorKyAgICAgICMgZmFsbGJhY2sgdG8gY2hlY2tpbmcgJERFU0tUT1BfU0VTU0lPTgorKyAgICAgIGNhc2UgIiRERVNLVE9QX1NFU1NJT04iIGluCisrICAgICAgICAgZ25vbWUpCisrICAgICAgICAgICBERT1nbm9tZTsKKysgICAgICAgICAgIDs7CisrICAgICAgICAgTFhERXxMdWJ1bnR1KQorKyAgICAgICAgICAgREU9bHhkZTsgCisrICAgICAgICAgICA7OworKyAgICAgICAgIE1BVEUpCisrICAgICAgICAgICBERT1tYXRlOworKyAgICAgICAgICAgOzsKKysgICAgICAgICB4ZmNlfHhmY2U0fCdYZmNlIFNlc3Npb24nKQorKyAgICAgICAgICAgREU9eGZjZTsKKysgICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICBmaQorKworKyAgICBpZiBbIHgiJERFIiA9IHgiIiBdOyB0aGVuCisrICAgICAgIyBmYWxsYmFjayB0byB1bmFtZSBvdXRwdXQgZm9yIG90aGVyIHBsYXRmb3JtcworKyAgICAgIGNhc2UgIiQodW5hbWUgMj4vZGV2L251bGwpIiBpbiAKKysgICAgICAgIERhcndpbikKKysgICAgICAgICAgREU9ZGFyd2luOworKyAgICAgICAgICA7OworKyAgICAgIGVzYWMKKysgICAgZmkKKysKKysgICAgaWYgWyB4IiRERSIgPSB4Imdub21lIiBdOyB0aGVuCisrICAgICAgIyBnbm9tZS1kZWZhdWx0LWFwcGxpY2F0aW9ucy1wcm9wZXJ0aWVzIGlzIG9ubHkgYXZhaWxhYmxlIGluIEdOT01FIDIueAorKyAgICAgICMgYnV0IG5vdCBpbiBHTk9NRSAzLngKKysgICAgICB3aGljaCBnbm9tZS1kZWZhdWx0LWFwcGxpY2F0aW9ucy1wcm9wZXJ0aWVzID4gL2Rldi9udWxsIDI+JjEgIHx8IERFPSJnbm9tZTMiCisrICAgIGZpCisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBrZm1jbGllbnQgZXhlYy9vcGVuVVJMIGNhbiBnaXZlIGJvZ3VzIGV4aXQgdmFsdWUgaW4gS0RFIDw9IDMuNS40CisrIyBJdCBhbHNvIGFsd2F5cyByZXR1cm5zIDEgaW4gS0RFIDMuNCBhbmQgZWFybGllcgorKyMgU2ltcGx5IHJldHVybiAwIGluIHN1Y2ggY2FzZQorKworK2tmbWNsaWVudF9maXhfZXhpdF9jb2RlKCkKKyt7CisrICAgIHZlcnNpb249YExDX0FMTD1DLlVURi04IGtkZS1jb25maWcgLS12ZXJzaW9uIDI+L2Rldi9udWxsIHwgZ3JlcCAnXktERSdgCisrICAgIG1ham9yPWBlY2hvICR2ZXJzaW9uIHwgc2VkICdzL0tERS4qOiBcKFswLTldXCkuKi9cMS8nYAorKyAgICBtaW5vcj1gZWNobyAkdmVyc2lvbiB8IHNlZCAncy9LREUuKjogWzAtOV0qXC5cKFswLTldXCkuKi9cMS8nYAorKyAgICByZWxlYXNlPWBlY2hvICR2ZXJzaW9uIHwgc2VkICdzL0tERS4qOiBbMC05XSpcLlswLTldKlwuXChbMC05XVwpLiovXDEvJ2AKKysgICAgdGVzdCAiJG1ham9yIiAtZ3QgMyAmJiByZXR1cm4gJDEKKysgICAgdGVzdCAiJG1pbm9yIiAtZ3QgNSAmJiByZXR1cm4gJDEKKysgICAgdGVzdCAiJHJlbGVhc2UiIC1ndCA0ICYmIHJldHVybiAkMQorKyAgICByZXR1cm4gMAorK30KKysKKyt0ZXJtaW5hbF9rZGUoKQorK3sKKysgICAgdGVybWluYWw9YGtyZWFkY29uZmlnIC0tZmlsZSBrZGVnbG9iYWxzIC0tZ3JvdXAgR2VuZXJhbCAtLWtleSBUZXJtaW5hbEFwcGxpY2F0aW9uIC0tZGVmYXVsdCBrb25zb2xlYAorKworKyAgICB0ZXJtaW5hbF9leGVjPWB3aGljaCAkdGVybWluYWwgMj4vZGV2L251bGxgCisrCisrICAgIGlmIFsgLXggIiR0ZXJtaW5hbF9leGVjIiBdOyB0aGVuCisrICAgICAgICBpZiBbIHgiJDEiID0geCIiIF07IHRoZW4KKysgICAgICAgICAgICAkdGVybWluYWxfZXhlYworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgICR0ZXJtaW5hbF9leGVjIC1lICIkMSIKKysgICAgICAgIGZpCisrCisrICAgICAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKysgICAgICAgICAgICBleGl0X3N1Y2Nlc3MKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ZhaWxlZAorKyAgICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgICAgZXhpdF9mYWlsdXJlX29wZXJhdGlvbl9pbXBvc3NpYmxlICJjb25maWd1cmVkIHRlcm1pbmFsIHByb2dyYW0gJyR0ZXJtaW5hbCcgbm90IGZvdW5kIG9yIG5vdCBleGVjdXRhYmxlIgorKyAgICBmaQorK30KKysKKyt0ZXJtaW5hbF9nbm9tZSgpCisreworKyAgICB0ZXJtX2V4ZWNfa2V5PSIvZGVza3RvcC9nbm9tZS9hcHBsaWNhdGlvbnMvdGVybWluYWwvZXhlYyIKKysgICAgdGVybV9leGVjX2FyZ19rZXk9Ii9kZXNrdG9wL2dub21lL2FwcGxpY2F0aW9ucy90ZXJtaW5hbC9leGVjX2FyZyIKKysKKysgICAgdGVybV9leGVjPWBnY29uZnRvb2wtMiAtLWdldCAke3Rlcm1fZXhlY19rZXl9YAorKyAgICB0ZXJtX2V4ZWNfYXJnPWBnY29uZnRvb2wtMiAtLWdldCAke3Rlcm1fZXhlY19hcmdfa2V5fWAKKysKKysgICAgdGVybWluYWxfZXhlYz1gd2hpY2ggJHRlcm1fZXhlYyAyPi9kZXYvbnVsbGAKKysKKysgICAgaWYgWyAteCAiJHRlcm1pbmFsX2V4ZWMiIF07IHRoZW4KKysgICAgICAgIGlmIFsgeCIkMSIgPSB4IiIgXTsgdGhlbgorKyAgICAgICAgICAgICR0ZXJtaW5hbF9leGVjCisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgaWYgWyB4IiR0ZXJtX2V4ZWNfYXJnIiA9IHgiIiBdOyB0aGVuCisrICAgICAgICAgICAgICAgICR0ZXJtaW5hbF9leGVjICIkMSIKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICR0ZXJtaW5hbF9leGVjICIkdGVybV9leGVjX2FyZyIgIiQxIgorKyAgICAgICAgICAgIGZpCisrICAgICAgICBmaQorKworKyAgICAgICAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisrICAgICAgICAgICAgZXhpdF9zdWNjZXNzCisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgZXhpdF9mYWlsdXJlX29wZXJhdGlvbl9mYWlsZWQKKysgICAgICAgIGZpCisrICAgIGVsc2UKKysgICAgICAgIGV4aXRfZmFpbHVyZV9vcGVyYXRpb25faW1wb3NzaWJsZSAiY29uZmlndXJlZCB0ZXJtaW5hbCBwcm9ncmFtICckdGVybV9leGVjJyBub3QgZm91bmQgb3Igbm90IGV4ZWN1dGFibGUiCisrICAgIGZpCisrfQorKworK3Rlcm1pbmFsX3hmY2UoKQorK3sKKysgICAgaWYgWyB4IiQxIiA9IHgiIiBdOyB0aGVuCisrICAgICAgICBleG8tb3BlbiAtLWxhdW5jaCBUZXJtaW5hbEVtdWxhdG9yCisrICAgIGVsc2UKKysgICAgICAgIGV4by1vcGVuIC0tbGF1bmNoIFRlcm1pbmFsRW11bGF0b3IgIiQxIgorKyAgICBmaQorKworKyAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKysgICAgICAgIGV4aXRfc3VjY2VzcworKyAgICBlbHNlCisrICAgICAgICBleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ZhaWxlZAorKyAgICBmaQorK30KKysKKyt0ZXJtaW5hbF9nZW5lcmljKCkKKyt7CisrICAgICMgaWYgJFRFUk0gaXMgYSBrbm93biBub24tY29tbWFuZCwgdXNlIGhhcmQtY29kZWQgZmFsbGJhY2tzCisrICAgIGlmIFsgeCIkVEVSTSIgPSB4IiIgXSB8fCBbIHgiJFRFUk0iID0geCJsaW51eCIgXSB8fCBbIHgiJFRFUk0iID0geCJ2dDEwMCIgXTsgdGhlbgorKyAgICAgICAgVEVSTT14dGVybQorKyAgICBmaQorKworKyAgICB0ZXJtaW5hbF9leGVjPWB3aGljaCAkVEVSTSAyPi9kZXYvbnVsbGAKKysKKysgICAgaWYgWyAteCAiJHRlcm1pbmFsX2V4ZWMiIF07IHRoZW4KKysgICAgICAgIGlmIFsgeCIkMSIgPSB4IiIgXTsgdGhlbgorKyAgICAgICAgICAgICR0ZXJtaW5hbF9leGVjCisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgIyBzY3JlZW4gYW5kIHVyeHZ0IHdvbid0IGRvIHRoZWlyIG93biBwYXJzaW5nIG9mIHF1b3RlZCBhcmd1bWVudHMKKysgICAgICAgICAgICBpZiBbIHgiJFRFUk0iID0geCJzY3JlZW4iIF07IHRoZW4KKysgICAgICAgICAgICAgICAgIyBzY3JlZW4gaGFzIGFuIGluY29tcGF0aWJsZSBtZWFuaW5nIGZvciAtZQorKyAgICAgICAgICAgICAgICBzaCAtYyAiZXhlYyAkdGVybWluYWxfZXhlYyAkMSIKKysgICAgICAgICAgICBlbGlmIFsgeCIkVEVSTSIgPSB4InVyeHZ0IiBdIHx8IFsgeCIkVEVSTSIgPSB4InJ4dnQtdW5pY29kZSIgXSB8fCBbIHgiJFRFUk0iID0geCJyeHZ0IiBdOyB0aGVuCisrICAgICAgICAgICAgICAgICNUT0RPOiBVc2Ugd2hhdGV2ZXIgbWVjaGFuaXNtIGRhc2ggc3VwcG9ydHMgdG8gdGVzdCBmb3IKKysgICAgICAgICAgICAgICAgIyAgICAgIHJ4dnQtKiB0byBtYXRjaCB0aGluZ3MgbGlrZSByeHZ0LXVuaWNvZGUtMjU2Y29sb3IKKysgICAgICAgICAgICAgICAgc2ggLWMgImV4ZWMgJHRlcm1pbmFsX2V4ZWMgLWUgJDEiCisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAkdGVybWluYWxfZXhlYyAtZSAiJDEiCisrICAgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrCisrICAgICAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKysgICAgICAgICAgICBleGl0X3N1Y2Nlc3MKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ZhaWxlZAorKyAgICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgICAgZXhpdF9mYWlsdXJlX29wZXJhdGlvbl9pbXBvc3NpYmxlICJjb25maWd1cmVkIHRlcm1pbmFsIHByb2dyYW0gJyRURVJNJyBub3QgZm91bmQgb3Igbm90IGV4ZWN1dGFibGUiCisrICAgIGZpCisrfQorKworK3Rlcm1pbmFsX2x4ZGUoKQorK3sKKysgICAgaWYgd2hpY2ggbHh0ZXJtaW5hbCAmPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgaWYgWyB4IiQxIiA9IHgiIiBdOyB0aGVuCisrICAgICAgICAgICAgbHh0ZXJtaW5hbAorKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGx4dGVybWluYWwgLWUgIiQxIgorKyAgICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgICAgdGVybWluYWxfZ2VuZXJpYyAiJDEiCisrICAgIGZpCisrfQorKworKyNbIHgiJDEiICE9IHgiIiBdIHx8IGV4aXRfZmFpbHVyZV9zeW50YXgKKysKKytjb21tYW5kPQorK3doaWxlIFsgJCMgLWd0IDAgXSA7IGRvCisrICAgIHBhcm09IiQxIgorKyAgICBzaGlmdAorKworKyAgICBjYXNlICIkcGFybSIgaW4KKysgICAgICAtKikKKysgICAgICAgIGV4aXRfZmFpbHVyZV9zeW50YXggInVuZXhwZWN0ZWQgb3B0aW9uICckcGFybSciCisrICAgICAgICA7OworKworKyAgICAgICopCisrICAgICAgICBpZiBbIC1uICIkY29tbWFuZCIgXSA7IHRoZW4KKysgICAgICAgICAgICBleGl0X2ZhaWx1cmVfc3ludGF4ICJ1bmV4cGVjdGVkIGFyZ3VtZW50ICckcGFybSciCisrICAgICAgICBmaQorKyAgICAgICAgY29tbWFuZD0iJHBhcm0iCisrICAgICAgICA7OworKyAgICBlc2FjCisrZG9uZQorKworK2RldGVjdERFCisrCisraWYgWyB4IiRERSIgPSB4IiIgXTsgdGhlbgorKyAgICBERT1nZW5lcmljCisrZmkKKysKKytjYXNlICIkREUiIGluCisrICAgIGtkZSkKKysgICAgdGVybWluYWxfa2RlICIkY29tbWFuZCIKKysgICAgOzsKKysKKysgICAgZ25vbWUqKQorKyAgICB0ZXJtaW5hbF9nbm9tZSAiJGNvbW1hbmQiCisrICAgIDs7CisrCisrICAgIHhmY2UpCisrICAgIHRlcm1pbmFsX3hmY2UgIiRjb21tYW5kIgorKyAgICA7OworKworKyAgICBseGRlKQorKyAgICB0ZXJtaW5hbF9seGRlICIkY29tbWFuZCIKKysgICAgOzsKKysKKysgICAgZ2VuZXJpYykKKysgICAgdGVybWluYWxfZ2VuZXJpYyAiJGNvbW1hbmQiCisrICAgIDs7CisrCisrICAgICopCisrICAgIGV4aXRfZmFpbHVyZV9vcGVyYXRpb25faW1wb3NzaWJsZSAibm8gdGVybWluYWwgZW11bGF0b3IgYXZhaWxhYmxlIgorKyAgICA7OworK2VzYWMKKy0tIAorMS45LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGRnLXV0aWxzL3hkZy11dGlsc18xLjEuMC1yYzEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzXzEuMS4wLXJjMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmYxZTNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGRnLXV0aWxzL3hkZy11dGlsc18xLjEuMC1yYzEuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJCYXNpYyBkZXNrdG9wIGludGVncmF0aW9uIGZ1bmN0aW9ucyIKKworREVTQ1JJUFRJT04gPSAiVGhlIHhkZy11dGlscyBwYWNrYWdlIGlzIGEgc2V0IG9mIHNpbXBsZSBzY3JpcHRzIHRoYXQgcHJvdmlkZSBiYXNpYyBcCitkZXNrdG9wIGludGVncmF0aW9uIGZ1bmN0aW9ucyBmb3IgYW55IEZyZWUgRGVza3RvcCwgc3VjaCBhcyBMaW51eC4gXAorVGhleSBhcmUgaW50ZW5kZWQgdG8gcHJvdmlkZSBhIHNldCBvZiBkZWZhY3RvIHN0YW5kYXJkcy4gXAorVGhlIGZvbGxvd2luZyBzY3JpcHRzIGFyZSBwcm92aWRlZCBhdCB0aGlzIHRpbWU6IFwKK3hkZy1kZXNrdG9wLWljb24gXCAgICAgCit4ZGctZGVza3RvcC1tZW51IFwgIAoreGRnLWVtYWlsIFwgCit4ZGctaWNvbi1yZXNvdXJjZSBcCit4ZGctbWltZSBcICAgICAgIAoreGRnLW9wZW4gXCAgICAgCit4ZGctc2NyZWVuc2F2ZXIgXCAKK3hkZy10ZXJtaW5hbCBcCisiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YTUzNjdhOTA5MzQwOThkNmIwNWFmM2I3NDY0MDUwMTQiCisKK1NSQ19VUkkgPSAiaHR0cDovL3BvcnRsYW5kLmZyZWVkZXNrdG9wLm9yZy9kb3dubG9hZC8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtUmVpbnN0YXRlLXhkZy10ZXJtaW5hbC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmFkZjVlN2EwOGUwNTI2ZmM2MGRiZTNlNWI3ZWY4ZDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2IwNTU1OGFlNGJiOGVkZTM1Njg2M2NhZThjNDJlM2UwMTJhYTQyMWJmOWQ0NTEzMGE1NzBmZDIwOWQ3OTEwMiIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSB4cHJvcCByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitSREVQRU5EU18ke1BOfSArPSAieHByb3AiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL0Rpc2FibGUtc2VydmljZXMtZnJvbS1pbmV0ZC5jb25mLWlmLWEtc2VydmljZS13aXRoLXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL0Rpc2FibGUtc2VydmljZXMtZnJvbS1pbmV0ZC5jb25mLWlmLWEtc2VydmljZS13aXRoLXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q2ZTZjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQvRGlzYWJsZS1zZXJ2aWNlcy1mcm9tLWluZXRkLmNvbmYtaWYtYS1zZXJ2aWNlLXdpdGgtdC5wYXRjaApAQCAtMCwwICsxLDg2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW2Zyb20gb3RoZXIgZGlzdHJvIERlYmlhbl0KKworRnJvbSBkNTg4YjY1MzBlMTM4MmE2MjQ4OThiM2Y0MzA3ZjYzNmM3MmM4MGE5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGllcnJlIEhhYm91eml0IDxtYWRjb2RlckBkZWJpYW4ub3JnPgorRGF0ZTogV2VkLCAyOCBOb3YgMjAwNyAxMDoxMzowOCArMDEwMAorU3ViamVjdDogW1BBVENIXSBEaXNhYmxlIHNlcnZpY2VzIGZyb20gaW5ldGQuY29uZiBpZiBhIHNlcnZpY2Ugd2l0aCB0aGUgc2FtZSBpZCBleGlzdHMuCisKKyAgVGhpcyB3YXksIGlmIGEgc2VydmljZSBpcyBlbmFibGVkIGluIC9ldGMveGluZXRkKiBfYW5kXyBpbgorL2V0Yy9pbmV0ZC5jb25mLCB0aGUgb25lIChldmVuIGlmIGRpc2FibGVkKSBmcm9tIC9ldGMveGluZXRkKiB0YWtlcworcHJlY2VkZW5jZS4KKworU2lnbmVkLW9mZi1ieTogUGllcnJlIEhhYm91eml0IDxtYWRjb2RlckBkZWJpYW4ub3JnPgorLS0tCisgeGluZXRkL2luZXQuYyB8ICAgMjIgKysrKysrKysrKysrKysrKysrKy0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3hpbmV0ZC9pbmV0LmMgYi94aW5ldGQvaW5ldC5jCitpbmRleCAxY2IyYmEyLi44Y2FhYjQ1IDEwMDY0NAorLS0tIGEveGluZXRkL2luZXQuYworKysrIGIveGluZXRkL2luZXQuYworQEAgLTIzLDYgKzIzLDggQEAKKyAjaW5jbHVkZSAicGFyc2VzdXAuaCIKKyAjaW5jbHVkZSAibnZsaXN0cy5oIgorIAorK3N0YXRpYyBwc2lfaCBpdGVyIDsKKysKKyBzdGF0aWMgaW50IGdldF9uZXh0X2luZXRfZW50cnkoIGludCBmZCwgcHNldF9oIHNjb25mcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VydmljZV9jb25maWcgKmRlZmF1bHRzKTsKKyAKK0BAIC0zMiwxMiArMzQsMTUgQEAgdm9pZCBwYXJzZV9pbmV0X2NvbmZfZmlsZSggaW50IGZkLCBzdHJ1Y3QgY29uZmlndXJhdGlvbiAqY29uZnAgKQorICAgIHN0cnVjdCBzZXJ2aWNlX2NvbmZpZyAqZGVmYXVsdF9jb25maWcgPSBDTkZfREVGQVVMVFMoIGNvbmZwICk7CisgICAgCisgICAgbGluZV9jb3VudCA9IDA7CisrICAgaXRlciA9IHBzaV9jcmVhdGUgKHNjb25mcyk7CisgCisgICAgZm9yKCA7OyApCisgICAgeyAgIAorICAgICAgIGlmIChnZXRfbmV4dF9pbmV0X2VudHJ5KGZkLCBzY29uZnMsIGRlZmF1bHRfY29uZmlnKSA9PSAtMikKKyAgICAgICAgICBicmVhazsKKyAgICB9CisrCisrICAgcHNpX2Rlc3Ryb3koaXRlcik7CisgfQorIAorIHN0YXRpYyBpbnQgZ2V0X25leHRfaW5ldF9lbnRyeSggaW50IGZkLCBwc2V0X2ggc2NvbmZzLCAKK0BAIC00Niw3ICs1MSw3IEBAIHN0YXRpYyBpbnQgZ2V0X25leHRfaW5ldF9lbnRyeSggaW50IGZkLCBwc2V0X2ggc2NvbmZzLAorICAgIGNoYXIgKnA7CisgICAgc3RyX2ggc3RycDsKKyAgICBjaGFyICpsaW5lID0gbmV4dF9saW5lKGZkKTsKKy0gICBzdHJ1Y3Qgc2VydmljZV9jb25maWcgKnNjcDsKKysgICBzdHJ1Y3Qgc2VydmljZV9jb25maWcgKnNjcCwgKnRtcDsKKyAgICB1bnNpZ25lZCB1LCBpOworICAgIGNvbnN0IGNoYXIgKmZ1bmMgPSAiZ2V0X25leHRfaW5ldF9lbnRyeSI7CisgICAgY2hhciAqbmFtZSA9IE5VTEwsICpycGN2ZXJzID0gTlVMTCwgKnJwY3Byb3RvID0gTlVMTDsKK0BAIC00MDUsNyArNDEwLDE2IEBAIHN0YXRpYyBpbnQgZ2V0X25leHRfaW5ldF9lbnRyeSggaW50IGZkLCBwc2V0X2ggc2NvbmZzLAorICAgIFNDX1NQRUNJRlkoIHNjcCwgQV9TT0NLRVRfVFlQRSApOworICAgIFNDX1NQRUNJRlkoIHNjcCwgQV9XQUlUICk7CisgCistICAgaWYoICEgcHNldF9hZGQoc2NvbmZzLCBzY3ApICkKKysgICBmb3IgKCB0bXAgPSBTQ1AoIHBzaV9zdGFydCggaXRlciApICkgOyB0bXAgOyB0bXAgPSBTQ1AoIHBzaV9uZXh0KGl0ZXIpKSApeworKyAgICAgIGlmIChFUShTQ19JRChzY3ApLCBTQ19JRCh0bXApKSkgeworKyAgICAgICAgIHBhcnNlbXNnKExPR19ERUJVRywgZnVuYywgInJlbW92aW5nIGR1cGxpY2F0ZSBzZXJ2aWNlICVzIiwgU0NfTkFNRShzY3ApKTsKKysgICAgICAgICBzY19mcmVlKHNjcCk7CisrICAgICAgICAgc2NwID0gTlVMTDsKKysgICAgICAgICBicmVhazsKKysgICAgICB9CisrICAgfQorKworKyAgIGlmKCBzY3AgJiYgISBwc2V0X2FkZChzY29uZnMsIHNjcCkgKQorICAgIHsKKyAgICAgICBvdXRfb2ZfbWVtb3J5KCBmdW5jICk7CisgICAgICAgcHNldF9kZXN0cm95KGFyZ3MpOworQEAgLTQxNCw3ICs0MjgsOSBAQCBzdGF0aWMgaW50IGdldF9uZXh0X2luZXRfZW50cnkoIGludCBmZCwgcHNldF9oIHNjb25mcywKKyAgICB9CisgCisgICAgcHNldF9kZXN0cm95KGFyZ3MpOworLSAgIHBhcnNlbXNnKCBMT0dfREVCVUcsIGZ1bmMsICJhZGRlZCBzZXJ2aWNlICVzIiwgU0NfTkFNRShzY3ApKTsKKysgICBpZiAoc2NwKSB7CisrICAgICAgcGFyc2Vtc2coIExPR19ERUJVRywgZnVuYywgImFkZGVkIHNlcnZpY2UgJXMiLCBTQ19OQU1FKHNjcCkpOworKyAgIH0KKyAgICByZXR1cm4gMDsKKyB9CisgCistLSAKKzEuNS4zLjYuMjA0MC5nMTVlNgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL1ZhcmlvdXMtZml4ZXMtZnJvbS10aGUtcHJldmlvdXMtbWFpbnRhaW5lci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQvVmFyaW91cy1maXhlcy1mcm9tLXRoZS1wcmV2aW91cy1tYWludGFpbmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNTljZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL1ZhcmlvdXMtZml4ZXMtZnJvbS10aGUtcHJldmlvdXMtbWFpbnRhaW5lci5wYXRjaApAQCAtMCwwICsxLDc5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW2Zyb20gb3RoZXIgZGlzdHJvIERlYmlhbl0KKworRnJvbSBhMzQxMGIwYmM4MWFiMDNhODg5ZDlmZmMxNGUzNTFiYWRmODM3MmYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGllcnJlIEhhYm91eml0IDxtYWRjb2RlckBkZWJpYW4ub3JnPgorRGF0ZTogTW9uLCAyNiBOb3YgMjAwNyAxNjowMjowNCArMDEwMAorU3ViamVjdDogW1BBVENIXSBWYXJpb3VzIGZpeGVzIGZyb20gdGhlIHByZXZpb3VzIG1haW50YWluZXIuCisKKy0tLQorIHhpbmV0ZC9jaGlsZC5jICAgfCAgIDIwICsrKysrKysrKysrKysrKysrLS0tCisgeGluZXRkL3NlcnZpY2UuYyB8ICAgIDggKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS94aW5ldGQvY2hpbGQuYyBiL3hpbmV0ZC9jaGlsZC5jCitpbmRleCA4OWVlNTRjLi40OGU5NjE1IDEwMDY0NAorLS0tIGEveGluZXRkL2NoaWxkLmMKKysrKyBiL3hpbmV0ZC9jaGlsZC5jCitAQCAtMjg0LDYgKzI4NCw3IEBAIHZvaWQgY2hpbGRfcHJvY2Vzcyggc3RydWN0IHNlcnZlciAqc2VycCApCisgICAgY29ubmVjdGlvbl9zICAgICAgICAgICAgKmNwICA9IFNFUlZFUl9DT05ORUNUSU9OKCBzZXJwICkgOworICAgIHN0cnVjdCBzZXJ2aWNlX2NvbmZpZyAgICpzY3AgPSBTVkNfQ09ORiggc3AgKSA7CisgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgKmZ1bmMgPSAiY2hpbGRfcHJvY2VzcyIgOworKyAgIGludCAgICAgICAgICAgICAgICAgICAgIGZkLCBudWxsX2ZkOworIAorICAgIHNpZ25hbF9kZWZhdWx0X3N0YXRlKCk7CisgCitAQCAtMjk2LDkgKzI5NywyMiBAQCB2b2lkIGNoaWxkX3Byb2Nlc3MoIHN0cnVjdCBzZXJ2ZXIgKnNlcnAgKQorICAgIHNpZ25hbHNfcGVuZGluZ1swXSA9IC0xOworICAgIHNpZ25hbHNfcGVuZGluZ1sxXSA9IC0xOworIAorLSAgIFNjbG9zZSgwKTsKKy0gICBTY2xvc2UoMSk7CistICAgU2Nsb3NlKDIpOworKyAgIGlmICggKCBudWxsX2ZkID0gb3BlbiggIi9kZXYvbnVsbCIsIE9fUkRPTkxZICkgKSA9PSAtMSApCisrICAgeworKyAgICAgIG1zZyggTE9HX0VSUiwgZnVuYywgIm9wZW4oJy9kZXYvbnVsbCcpIGZhaWxlZDogJW0iKSA7CisrICAgICAgX2V4aXQoIDEgKSA7CisrICAgfQorKworKyAgIGZvciAoIGZkID0gMCA7IGZkIDw9IE1BWF9QQVNTX0ZEIDsgZmQrKyApCisrICAgeworKyAgICAgIGlmICggZmQgIT0gbnVsbF9mZCAmJiBkdXAyKCBudWxsX2ZkLCBmZCApID09IC0xICkKKysgICAgICB7CisrICAgICAgICAgbXNnKCBMT0dfRVJSLCBmdW5jLCAiZHVwMiglZCwgJWQpIGZhaWxlZDogJW0iKSA7CisrICAgICAgICAgX2V4aXQoIDEgKSA7CisrICAgICAgfQorKyAgIH0KKysgICBpZiAoIG51bGxfZmQgPiBNQVhfUEFTU19GRCApCisrICAgICAgKHZvaWQpIFNjbG9zZSggbnVsbF9mZCApIDsKKyAKKyAKKyAjaWZkZWYgREVCVUdfU0VSVkVSCitkaWZmIC0tZ2l0IGEveGluZXRkL3NlcnZpY2UuYyBiL3hpbmV0ZC9zZXJ2aWNlLmMKK2luZGV4IDNkNjhkNzguLjAxMzJkNmMgMTAwNjQ0CistLS0gYS94aW5ldGQvc2VydmljZS5jCisrKysgYi94aW5ldGQvc2VydmljZS5jCitAQCAtNzQ1LDggKzc0NSw4IEBAIHN0YXRpYyBzdGF0dXNfZSBmYWlsZWRfc2VydmljZShzdHJ1Y3Qgc2VydmljZSAqc3AsCisgICAgICAgICAgICAgICAgcmV0dXJuIEZBSUxFRDsKKyAKKyAgICAgICAgICAgICBpZiAoIGxhc3QgPT0gTlVMTCApIHsKKy0gICAgICAgICAgICAgICBsYXN0ID0gU0FJTiggY2FsbG9jKCAxLCBzaXplb2YodW5pb24geHNvY2thZGRyKSApICk7CistCSAgICAgICBTVkNfTEFTVF9ER1JBTV9BRERSKHNwKSA9ICh1bmlvbiB4c29ja2FkZHIgKilsYXN0OworKwkgICAgU1ZDX0xBU1RfREdSQU1fQUREUihzcCkgPSAgU0FJTiggY2FsbG9jKCAxLCBzaXplb2YodW5pb24geHNvY2thZGRyKSApICk7CisrCSAgICBsYXN0ID0gU0FJTiggU1ZDX0xBU1RfREdSQU1fQUREUihzcCkgKTsKKyAgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAgKHZvaWQpIHRpbWUoICZjdXJyZW50X3RpbWUgKSA7CitAQCAtNzcyLDggKzc3Miw4IEBAIHN0YXRpYyBzdGF0dXNfZSBmYWlsZWRfc2VydmljZShzdHJ1Y3Qgc2VydmljZSAqc3AsCisgICAgICAgICAgICAgICAgcmV0dXJuIEZBSUxFRDsKKyAKKyAJICAgIGlmKCBsYXN0ID09IE5VTEwgKSB7CistICAgICAgICAgICAgICAgbGFzdCA9IFNBSU42KGNhbGxvYyggMSwgc2l6ZW9mKHVuaW9uIHhzb2NrYWRkcikgKSApOworLQkgICAgICAgU1ZDX0xBU1RfREdSQU1fQUREUiggc3AgKSA9ICh1bmlvbiB4c29ja2FkZHIgKilsYXN0OworKwkgICAgU1ZDX0xBU1RfREdSQU1fQUREUihzcCkgPSBTQUlONihjYWxsb2MoIDEsIHNpemVvZih1bmlvbiB4c29ja2FkZHIpICkgKTsKKysgICAgICAgICAgICBsYXN0ID0gU0FJTjYoU1ZDX0xBU1RfREdSQU1fQUREUihzcCkpOworICAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICAodm9pZCkgdGltZSggJmN1cnJlbnRfdGltZSApIDsKKy0tIAorMS41LjMuNi4yMDQwLmcxNWU2CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLUNWRS0yMDEzLTQzNDIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC1DVkUtMjAxMy00MzQyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NDJkYmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC1DVkUtMjAxMy00MzQyLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK3hpbmV0ZDogQ1ZFLTIwMTMtNDM0MgorCit4aW5ldGQgZG9lcyBub3QgZW5mb3JjZSB0aGUgdXNlciBhbmQgZ3JvdXAgY29uZmlndXJhdGlvbiBkaXJlY3RpdmVzCitmb3IgVENQTVVYIHNlcnZpY2VzLCB3aGljaCBjYXVzZXMgdGhlc2Ugc2VydmljZXMgdG8gYmUgcnVuIGFzIHJvb3QKK2FuZCBtYWtlcyBpdCBlYXNpZXIgZm9yIHJlbW90ZSBhdHRhY2tlcnMgdG8gZ2FpbiBwcml2aWxlZ2VzIGJ5CitsZXZlcmFnaW5nIGFub3RoZXIgdnVsbmVyYWJpbGl0eSBpbiBhIHNlcnZpY2UuCitodHRwOi8vd2ViLm52ZC5uaXN0Lmdvdi92aWV3L3Z1bG4vZGV0YWlsP3Z1bG5JZD1DVkUtMjAxMy00MzQyCisKK3RoZSBwYXRjaCBjb21lIGZyb206CitodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYXR0YWNobWVudC5jZ2k/aWQ9Nzk5NzMyJmFjdGlvbj1kaWZmCisKK1NpZ25lZC1vZmYtYnk6IExpIFdhbmcgPGxpLndhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHhpbmV0ZC9idWlsdGlucy5jIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEveGluZXRkL2J1aWx0aW5zLmMgYi94aW5ldGQvYnVpbHRpbnMuYworaW5kZXggM2I4NTU3OS4uMzRhNWJhYyAxMDA2NDQKKy0tLSBhL3hpbmV0ZC9idWlsdGlucy5jCisrKysgYi94aW5ldGQvYnVpbHRpbnMuYworQEAgLTYxNyw3ICs2MTcsNyBAQCBzdGF0aWMgdm9pZCB0Y3BtdXhfaGFuZGxlciggY29uc3Qgc3RydWN0IHNlcnZlciAqc2VycCApCisgICAgaWYoIFNDX0lTX0lOVEVSTkFMKCBzY3AgKSApIHsKKyAgICAgICBTQ19JTlRFUk5BTChzY3AsIG5zZXJwKTsKKyAgICB9IGVsc2UgeworLSAgICAgIGV4ZWNfc2VydmVyKG5zZXJwKTsKKysgICAgICBjaGlsZF9wcm9jZXNzKG5zZXJwKTsKKyAgICB9CisgfQorIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLXNob3VsZC1iZS1hYmxlLXRvLWxpc3Rlbi1vbi1JUHY2LWV2ZW4taW4taW5lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQtc2hvdWxkLWJlLWFibGUtdG8tbGlzdGVuLW9uLUlQdjYtZXZlbi1pbi1pbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM2NWNhMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLXNob3VsZC1iZS1hYmxlLXRvLWxpc3Rlbi1vbi1JUHY2LWV2ZW4taW4taW5lLnBhdGNoCkBAIC0wLDAgKzEsMTEyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW2Zyb20gb3RoZXIgZGlzdHJvIERlYmlhbl0KKworRnJvbSBmNDRiMjE4Y2NjNzc5YWIzZjRhZWQwNzIzOTBjY2YxMjlkOTRiNThkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGF2aWQgTWFkb3JlIDxkYXZpZEBwbGVpYWRlcy5zdGFycz4KK0RhdGU6IE1vbiwgMjQgTWFyIDIwMDggMTI6NDU6MzYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0geGluZXRkIHNob3VsZCBiZSBhYmxlIHRvIGxpc3RlbiBvbiBJUHY2IGV2ZW4gaW4gLWluZXRkX2NvbXBhdCBtb2RlCisKK3hpbmV0ZCBkb2VzIG5vdCBiaW5kIHRvIElQdjYgYWRkcmVzc2VzIChhbmQgZG9lcyBub3Qgc2VlbSB0byBoYXZlIGFuCitvcHRpb24gdG8gZG8gc28pIHdoZW4gdXNlZCBpbiAtaW5ldGRfY29tcGF0IG1vZGUuICBBcyBjdXJyZW50IGluZXRkJ3MKK2FyZSBJUHY2LWF3YXJlLCB0aGlzIGlzIGEgcHJvYmxlbTogdGhpcyBtZWFucyB4aW5ldGQgY2Fubm90IGJlIHVzZWQgYXMKK2EgZHJvcC1pbiBpbmV0ZCByZXBsYWNlbWVudC4KKworVGhlIGF0dGFjaGVkIHBhdGNoIGlzIGEgc3VnZ2VzdGlvbjogaXQgYWRkcyBhIC1pbmV0ZF9pcHY2IGdsb2JhbAorb3B0aW9uIHRoYXQsIGlmIHVzZWQsIGNhdXNlcyBpbmV0ZC1jb21wYXRpYmlsaXR5IGxpbmVzIHRvIGhhdmUgYW4KK2ltcGxpY2l0ICJJUHY2IiBvcHRpb24uICBQZXJoYXBzIHRoaXMgaXMgbm90IHRoZSBiZXN0IHNvbHV0aW9uLCBidXQKK3RoZXJlIHNob3VsZCBkZWZpbml0ZWx5IGJlIGEgd2F5IHRvIGdldCBpbmV0ZC5jb25mIHRvIGJlIHJlYWQgaW4KK0lQdjYtYXdhcmUgbW9kZS4KKy0tLQorIHhpbmV0ZC9jb25mcGFyc2UuYyB8ICAgIDEgKworIHhpbmV0ZC9pbmV0LmMgICAgICB8ICAgMTcgKysrKysrKysrKysrKysrKysKKyB4aW5ldGQvb3B0aW9ucy5jICAgfCAgICAzICsrKworIHhpbmV0ZC94aW5ldGQubWFuICB8ICAgIDYgKysrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEveGluZXRkL2NvbmZwYXJzZS5jIGIveGluZXRkL2NvbmZwYXJzZS5jCitpbmRleCBkYjlmNDMxLi5kN2IwYmNjIDEwMDY0NAorLS0tIGEveGluZXRkL2NvbmZwYXJzZS5jCisrKysgYi94aW5ldGQvY29uZnBhcnNlLmMKK0BAIC00MCw2ICs0MCw3IEBACisgI2luY2x1ZGUgImluZXQuaCIKKyAjaW5jbHVkZSAibWFpbi5oIgorIAorK2V4dGVybiBpbnQgaW5ldGRfaXB2NjsKKyBleHRlcm4gaW50IGluZXRkX2NvbXBhdDsKKyAKKyAvKgorZGlmZiAtLWdpdCBhL3hpbmV0ZC9pbmV0LmMgYi94aW5ldGQvaW5ldC5jCitpbmRleCA4Y2FhYjQ1Li4yZTYxN2FlIDEwMDY0NAorLS0tIGEveGluZXRkL2luZXQuYworKysrIGIveGluZXRkL2luZXQuYworQEAgLTI1LDYgKzI1LDggQEAKKyAKKyBzdGF0aWMgcHNpX2ggaXRlciA7CisgCisrZXh0ZXJuIGludCBpbmV0ZF9pcHY2OworKworIHN0YXRpYyBpbnQgZ2V0X25leHRfaW5ldF9lbnRyeSggaW50IGZkLCBwc2V0X2ggc2NvbmZzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZXJ2aWNlX2NvbmZpZyAqZGVmYXVsdHMpOworIAorQEAgLTM2MCw2ICszNjIsMjEgQEAgc3RhdGljIGludCBnZXRfbmV4dF9pbmV0X2VudHJ5KCBpbnQgZmQsIHBzZXRfaCBzY29uZnMsCisgICAgICAgICAgfQorICAgICAgICAgIFNDX1NFUlZFUl9BUkdWKHNjcClbdV0gPSBwOworICAgICAgIH0KKysKKysgICAgICAvKiBTZXQgdGhlIElQdjYgZmxhZyBpZiB3ZSB3ZXJlIHBhc3NlZCB0aGUgLWluZXRkX2lwdjYgb3B0aW9uICovCisrICAgICAgaWYgKCBpbmV0ZF9pcHY2ICkKKysgICAgICB7CisrICAgICAgICAgbnZwID0gbnZfZmluZF92YWx1ZSggc2VydmljZV9mbGFncywgIklQdjYiICk7CisrICAgICAgICAgaWYgKCBudnAgPT0gTlVMTCApCisrICAgICAgICAgeworKyAgICAgICAgICAgIHBhcnNlbXNnKCBMT0dfV0FSTklORywgZnVuYywgImluZXRkLmNvbmYgLSBCYWQgZm9vICVzIiwgbmFtZSApIDsKKysgICAgICAgICAgICBwc2V0X2Rlc3Ryb3koYXJncyk7CisrICAgICAgICAgICAgc2NfZnJlZShzY3ApOworKyAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAgICB9CisrICAgICAgICAgTV9TRVQoU0NfWEZMQUdTKHNjcCksIG52cC0+dmFsdWUpOworKyAgICAgIH0KKysKKyAgICAgICAvKiBTZXQgdGhlIHJldXNlIGZsYWcsIGFzIHRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIGluZXRkICovCisgICAgICAgbnZwID0gbnZfZmluZF92YWx1ZSggc2VydmljZV9mbGFncywgIlJFVVNFIiApOworICAgICAgIGlmICggbnZwID09IE5VTEwgKQorZGlmZiAtLWdpdCBhL3hpbmV0ZC9vcHRpb25zLmMgYi94aW5ldGQvb3B0aW9ucy5jCitpbmRleCBiMDU4YjZhLi5kYzJmM2EwIDEwMDY0NAorLS0tIGEveGluZXRkL29wdGlvbnMuYworKysrIGIveGluZXRkL29wdGlvbnMuYworQEAgLTMwLDYgKzMwLDcgQEAgaW50IGxvZ3Byb2NzX29wdGlvbiA7CisgdW5zaWduZWQgbG9ncHJvY3Nfb3B0aW9uX2FyZyA7CisgaW50IHN0YXlhbGl2ZV9vcHRpb249MDsKKyBjaGFyICpwcm9ncmFtX25hbWUgOworK2ludCBpbmV0ZF9pcHY2ID0gMCA7CisgaW50IGluZXRkX2NvbXBhdCA9IDAgOworIGludCBkb250X2ZvcmsgPSAwOworIAorQEAgLTEyOCw2ICsxMjksOCBAQCBpbnQgb3B0X3JlY29nbml6ZSggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCisgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgICAgfQorKyAgICAgICAgIGVsc2UgaWYgKCBzdHJjbXAgKCAmYXJndlsgYXJnIF1bIDEgXSwgImluZXRkX2lwdjYiICkgPT0gMCApCisrICAgICAgICAgICAgaW5ldGRfaXB2NiA9IDE7CisgICAgICAgICAgZWxzZSBpZiAoIHN0cmNtcCAoICZhcmd2WyBhcmcgXVsgMSBdLCAiaW5ldGRfY29tcGF0IiApID09IDAgKQorICAgICAgICAgICAgIGluZXRkX2NvbXBhdCA9IDE7CisgICAgICAgfQorZGlmZiAtLWdpdCBhL3hpbmV0ZC94aW5ldGQubWFuIGIveGluZXRkL3hpbmV0ZC5tYW4KK2luZGV4IGM3NmMzYzYuLmM5ZGQ4MDMgMTAwNjQ0CistLS0gYS94aW5ldGQveGluZXRkLm1hbgorKysrIGIveGluZXRkL3hpbmV0ZC5tYW4KK0BAIC0xMDYsNiArMTA2LDEyIEBAIFRoaXMgb3B0aW9uIGNhdXNlcyB4aW5ldGQgdG8gcmVhZCAvZXRjL2luZXRkLmNvbmYgaW4gYWRkaXRpb24gdG8gdGhlCisgc3RhbmRhcmQgeGluZXRkIGNvbmZpZyBmaWxlcy4gIC9ldGMvaW5ldGQuY29uZiBpcyByZWFkIGFmdGVyIHRoZQorIHN0YW5kYXJkIHhpbmV0ZCBjb25maWcgZmlsZXMuCisgLlRQCisrLkJJIFwtaW5ldGRfaXB2NgorK1RoaXMgb3B0aW9uIGNhdXNlcyB4aW5ldGQgdG8gYmluZCB0byBJUHY2IChBRl9JTkVUNikgYWRkcmVzc2VzIGZvcgorK2luZXRkIGNvbXBhdGliaWxpdHkgbGluZXMgKHNlZSBwcmV2aW91cyBvcHRpb24pLiAgVGhpcyBvbmx5IGFmZmVjdHMKKytob3cgL2V0Yy9pbmV0ZC5jb25mIGlzIGludGVycHJldGVkIGFuZCB0aHVzIG9ubHkgaGFzIGFueSBlZmZlY3QgaWYKKyt0aGUgXC1pbmV0ZF9jb21wYXQgb3B0aW9uIGlzIGFsc28gdXNlZC4KKysuVFAKKyAuQkkgXC1jYyAiIGludGVydmFsIgorIFRoaXMgb3B0aW9uIGluc3RydWN0cworIC5CIHhpbmV0ZAorLS0gCisxLjUuNS5yYzAuMTI3LmdiNDMzNworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTZlYTI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuY29uZgpAQCAtMCwwICsxLDExIEBACisjIFNpbXBsZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHhpbmV0ZAorIworIyBTb21lIGRlZmF1bHRzLCBhbmQgaW5jbHVkZSAvZXRjL3hpbmV0ZC5kLworCitkZWZhdWx0cworeworCisKK30KKworaW5jbHVkZWRpciAvZXRjL3hpbmV0ZC5kCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5kZWZhdWx0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGEzOGUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuZGVmYXVsdApAQCAtMCwwICsxLDEyIEBACisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIHhpbmV0ZC4gVGhpcyBmaWxlIGlzIHNvdXJjZWQgYnkgL2Jpbi9zaCBmcm9tCisjIC9ldGMvaW5pdC5kL3hpbmV0ZAorCisjIGVuYWJsZSB4aW5ldGQgSW5ldGQgY29tcGF0IG1vZGUKK0lORVREX0NPTVBBVD1ZZXMKKworIyBPcHRpb25zIHRvIHBhc3MgdG8geGluZXRkCisjCisjIC1zdGF5YWxpdmUgY29tZXMgYnkgZGVmYXVsdCA6IGl0IGNhbiBiZSByZW1vdmVkIGlmIHhpbmV0ZCBpcyBleHBlY3RlZAorIyBub3QgdG8gc3RhcnQgd2hlbiBubyBzZXJ2aWNlIGlzIGNvbmZpZ3VyZWQKKyMKK1hJTkVURF9PUFRTPSItc3RheWFsaXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLmluaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc3YzJjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLmluaXQKQEAgLTAsMCArMSw2NCBAQAorIyEvYmluL3NoCisjCisjIC9ldGMvaW5pdC5kL3hpbmV0ZCAgLS0gIHNjcmlwdCB0byBzdGFydCBhbmQgc3RvcCB4aW5ldGQuCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCitpZiB0ZXN0IC1mIC9ldGMvZGVmYXVsdC94aW5ldGQ7IHRoZW4KKwkuIC9ldGMvZGVmYXVsdC94aW5ldGQKK2ZpCisKKwordGVzdCAteCAvdXNyL3NiaW4veGluZXRkIHx8IGV4aXQgMAorCitjaGVja3BvcnRtYXAgKCkgeworICBpZiBncmVwICJeW14gKiNdIiAvZXRjL3hpbmV0ZC5jb25mIHwgZ3JlcCAtcSAncnBjLyc7IHRoZW4KKyAgICBpZiAhIHJwY2luZm8gLXUgbG9jYWxob3N0IHBvcnRtYXBwZXIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICBlY2hvCisgICAgICBlY2hvICJXQVJOSU5HOiBwb3J0bWFwcGVyIGluYWN0aXZlIC0gUlBDIHNlcnZpY2VzIHVuYXZhaWxhYmxlISIKKyAgICAgIGVjaG8gIiAgICBDb21tZW50aW5nIG91dCBvciByZW1vdmluZyB0aGUgUlBDIHNlcnZpY2VzIGZyb20iCisgICAgICBlY2hvICIgICAgdGhlIC9ldGMveGluZXRkLmNvbmYgZmlsZSB3aWxsIHJlbW92ZSB0aGlzIG1lc3NhZ2UuIgorICAgICAgZWNobworICAgIGZpCisgIGZpCit9IAorCitjYXNlICIkMSIgaW4KKyAgICBzdGFydCkKKyAgICAgICAgY2hlY2twb3J0bWFwCisJZWNobyAtbiAiU3RhcnRpbmcgaW50ZXJuZXQgc3VwZXJzZXJ2ZXI6IHhpbmV0ZCIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1iYWNrZ3JvdW5kIC0tZXhlYyAvdXNyL3NiaW4veGluZXRkIC0tIC1waWRmaWxlIC92YXIvcnVuL3hpbmV0ZC5waWQgJFhJTkVURF9PUFRTCisJZWNobyAiLiIKKwk7OworICAgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgaW50ZXJuZXQgc3VwZXJzZXJ2ZXI6IHhpbmV0ZCIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1zaWduYWwgMyAtLXF1aWV0IC0tZXhlYyAvdXNyL3NiaW4veGluZXRkCisJZWNobyAiLiIKKwk7OworICAgIHN0YXR1cykKKwlzdGF0dXMgL3Vzci9zYmluL3hpbmV0ZDsKKwlleGl0ICQ/CisJOzsKKyAgICByZWxvYWQpCisJZWNobyAtbiAiUmVsb2FkaW5nIGludGVybmV0IHN1cGVyc2VydmVyIGNvbmZpZ3VyYXRpb246IHhpbmV0ZCIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1zaWduYWwgMSAtLXF1aWV0IC0tZXhlYyAvdXNyL3NiaW4veGluZXRkCisJZWNobyAiLiIKKwk7OworICAgIGZvcmNlLXJlbG9hZCkKKwllY2hvICIkMCBmb3JjZS1yZWxvYWQ6IEZvcmNlIFJlbG9hZCBpcyBkZXByZWNhdGVkIgorCWVjaG8gLW4gIkZvcmNlZnVsbHkgcmVsb2FkaW5nIGludGVybmV0IHN1cGVyc2VydmVyIGNvbmZpZ3VyYXRpb246IHhpbmV0ZCIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1zaWduYWwgMSAtLXF1aWV0IC0tZXhlYyAvdXNyL3NiaW4veGluZXRkCisJZWNobyAiLiIKKwk7OworICAgIHJlc3RhcnQpCisJJDAgc3RvcAorCSQwIHN0YXJ0CisJOzsKKyAgICAqKQorCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC94aW5ldGQge3N0YXJ0fHN0b3B8c3RhdHVzfHJlbG9hZHxmb3JjZS1yZWxvYWR8cmVzdGFydH0iCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWZkYzViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuc2VydmljZQpAQCAtMCwwICsxLDEzIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVhpbmV0ZCBBIFBvd2VyZnVsIFJlcGxhY2VtZW50IEZvciBJbmV0ZAorQWZ0ZXI9c3lzbG9nLnRhcmdldCBuZXR3b3JrLnRhcmdldAorCitbU2VydmljZV0KK1R5cGU9Zm9ya2luZworUElERmlsZT0vdmFyL3J1bi94aW5ldGQucGlkCitFbnZpcm9ubWVudEZpbGU9LS9ldGMvc3lzY29uZmlnL3hpbmV0ZAorRXhlY1N0YXJ0PUBTQklORElSQC94aW5ldGQgLXN0YXlhbGl2ZSAtcGlkZmlsZSAvdmFyL3J1bi94aW5ldGQucGlkICIkRVhUUkFPUFRJT05TIgorRXhlY1JlbG9hZD1AQkFTRV9CSU5ESVJAL2tpbGwgLUhVUCAkTUFJTlBJRAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkXzIuMy4xNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGRfMi4zLjE1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYzAzZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkXzIuMy4xNS5iYgpAQCAtMCwwICsxLDY4IEBACitTVU1NQVJZID0gIlNvY2tldC1iYXNlZCBzZXJ2aWNlIGFjdGl2YXRpb24gZGFlbW9uIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL3hpbmV0ZC1vcmcveGluZXRkIgorCisjIHhpbmV0ZCBpcyBhIEJTRC1saWtlIGxpY2Vuc2UKKyMgQXBwbGUgYW5kIEdlbnRvbyBzYXkgQlNEIGhlcmUuCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlSSUdIVDttZDU9OGFkODYxNTE5ODU0MjQ0NGY4NGQyOGE2Y2YyMjZkZDgiCisKK0RFUEVORFMgPSAiIgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS94aW5ldGQtb3JnL3hpbmV0ZC5naXQ7cHJvdG9jb2w9aHR0cHMgXAorICAgICAgZmlsZTovL3hpbmV0ZC5pbml0IFwKKyAgICAgIGZpbGU6Ly94aW5ldGQuY29uZiBcCisgICAgICBmaWxlOi8veGluZXRkLmRlZmF1bHQgXAorICAgICAgZmlsZTovL1ZhcmlvdXMtZml4ZXMtZnJvbS10aGUtcHJldmlvdXMtbWFpbnRhaW5lci5wYXRjaCBcCisgICAgICBmaWxlOi8vRGlzYWJsZS1zZXJ2aWNlcy1mcm9tLWluZXRkLmNvbmYtaWYtYS1zZXJ2aWNlLXdpdGgtdC5wYXRjaCBcCisgICAgICBmaWxlOi8veGluZXRkLXNob3VsZC1iZS1hYmxlLXRvLWxpc3Rlbi1vbi1JUHY2LWV2ZW4taW4taW5lLnBhdGNoIFwKKyAgICAgIGZpbGU6Ly94aW5ldGQtQ1ZFLTIwMTMtNDM0Mi5wYXRjaCBcCisgICAgICBmaWxlOi8veGluZXRkLnNlcnZpY2UgXAorICAgICAgIgorCitTUkNSRVYgPSAiNjhiYjlhYjllOWYyMTRhZDhhMjMyMmYyOGFjMWQ2NzMzZTcwYmMyNCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLXJjLmQgc3lzdGVtZAorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAieGluZXRkLnNlcnZpY2UiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJ4aW5ldGQiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyIKKworRVhUUkFfT0VDT05GPSItLWRpc2FibGUtbmxzIgorCitQQUNLQUdFQ09ORklHID8/PSAidGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1t0Y3Atd3JhcHBlcnNdID0gIi0td2l0aC1saWJ3cmFwLCx0Y3Atd3JhcHBlcnMiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIExvb2tzIGxpa2UgY29uZmlndXJlLmluIGlzIGJyb2tlbiwgc28gd2UgYXJlIHNraXBwaW5nCisJIyByZWJ1aWxkaW5nIGNvbmZpZ3VyZSBhbmQgYXJlIGp1c3QgdXNpbmcgdGhlIHNoaXBwZWQgb25lCisJKCBjZCAke1N9OyBnbnUtY29uZmlnaXplIC0tZm9yY2UgKQorCW9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbCgpIHsKKwkjIFNhbWUgaGVyZSwgdGhlIE1ha2VmaWxlIGRvZXMgc29tZSByZWFsbHkgc3R1cGlkIHRoaW5ncywKKwkjIGJ1dCBzaW5jZSB3ZSBvbmx5IHdhbnQgdHdvIGZpbGVzIHdoeSBub3Qgb3ZlcnJpZGUKKwkjIGRvX2luc3RhbGwgZnJvbSBhdXRvdG9vbHMgYW5kIGRvaW5nIGl0IG91cnNlbGZzPworCWluc3RhbGwgLWQgIiR7RH0ke3NiaW5kaXJ9IgorCWluc3RhbGwgLWQgIiR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZCIKKwlpbnN0YWxsIC1kICIke0R9JHtzeXNjb25mZGlyfS94aW5ldGQuZCIKKwlpbnN0YWxsIC1kICIke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0IgorCWluc3RhbGwgLW0gNjQ0ICIke1dPUktESVJ9L3hpbmV0ZC5jb25mIiAiJHtEfSR7c3lzY29uZmRpcn0iCisJaW5zdGFsbCAtbSA3NTUgIiR7V09SS0RJUn0veGluZXRkLmluaXQiICIke0R9JHtzeXNjb25mZGlyfS9pbml0LmQveGluZXRkIgorCWluc3RhbGwgLW0gNjQ0ICIke1dPUktESVJ9L3hpbmV0ZC5kZWZhdWx0IiAiJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC94aW5ldGQiCisJaW5zdGFsbCAtbSA3NTUgIiR7Qn0veGluZXRkL3hpbmV0ZCIgIiR7RH0ke3NiaW5kaXJ9IgorCWluc3RhbGwgLW0gNzU1ICIke0J9L3hpbmV0ZC9pdG94IiAiJHtEfSR7c2JpbmRpcn0iCisKKwkjIEluc3RhbGwgc3lzdGVtZCB1bml0IGZpbGVzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3hpbmV0ZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAorCSAgICAgICAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJICAgICAgICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3hpbmV0ZC5zZXJ2aWNlCit9CisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3hpbmV0ZC5jb25mIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveHoveHpfNS4yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94ei94el81LjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGFlNDhmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveHoveHpfNS4yLjEuYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgZm9yIG1hbmFnaW5nIExaTUEgY29tcHJlc3NlZCBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly90dWthYW5pLm9yZy94ei8iCitTRUNUSU9OID0gImJhc2UiCisKKyMgVGhlIHNvdXJjZSBpbmNsdWRlcyBiaXRzIG9mIFBELCBHUEx2MiwgR1BMdjMsIExHUEx2Mi4xKywgYnV0IHRoZSBvbmx5IGZpbGUKKyMgd2hpY2ggaXMgR1BMdjMgaXMgYW4gbTQgbWFjcm8gd2hpY2ggaXNuJ3Qgc2hpcHBlZCBpbiBhbnkgb2Ygb3VyIHBhY2thZ2VzLAorIyBhbmQgdGhlIExHUEwgYml0cyBhcmUgdW5kZXIgbGliLywgd2hpY2ggYXBwZWFycyB0byBiZSB1c2VkIGZvciBsaWJnbnUsIHdoaWNoCisjIGFwcGVhcnMgdG8gYmUgdXNlZCBmb3IgRE9TIGJ1aWxkcy4gU28gd2UncmUgbGVmdCB3aXRoIEdQTHYyKyBhbmQgUEQuCitMSUNFTlNFID0gIkdQTHYyKyAmIEdQTHYzKyAmIExHUEx2Mi4xKyAmIFBEIgorTElDRU5TRV8ke1BOfSA9ICJHUEx2MisiCitMSUNFTlNFXyR7UE59LWRldiA9ICJHUEx2MisiCitMSUNFTlNFXyR7UE59LXN0YXRpY2RldiA9ICJHUEx2MisiCitMSUNFTlNFXyR7UE59LWRvYyA9ICJHUEx2MisiCitMSUNFTlNFXyR7UE59LWRiZyA9ICJHUEx2MisiCitMSUNFTlNFXyR7UE59LWxvY2FsZSA9ICJHUEx2MisiCitMSUNFTlNFX2xpYmx6bWEgPSAiUEQiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM0NzViNmM3ZGNhMjM2NzQwYWNlNGJiYTU1M2U4ZTFjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMdjM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEdQTHYyLjE7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9nZXRvcHQuYztlbmRsaW5lPTIzO21kNT0yMDY5YjBlZTcxMDU3MmMwM2JiMzExNGU0NTMyY2Q4NCAiCisKK1NSQ19VUkkgPSAiaHR0cDovL3R1a2Fhbmkub3JnL3h6L3h6LSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZTQ0Yzc2NmMzZmI0ZjE5ZTM0OGU2NDZmY2Q1Nzc4YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiOTE4YjY2NDgwNzZlNzRmOGQ3YWUxOWRiNWVlNjYzZGY4MDAwNDllMTg3MjU5ZmFmNWViOTk3YTdiOTc0NjgxIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK1BBQ0tBR0VTID0rICJsaWJsem1hIgorCitGSUxFU19saWJsem1hID0gIiR7bGliZGlyfS9saWJsem1hKiR7U09MSUJTfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitleHBvcnQgQ09ORklHX1NIRUxMPSIvYmluL3NoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC96aXAvemlwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjIxYzVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcC5pbmMKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJDb21wcmVzc29yL2FyY2hpdmVyIGZvciBjcmVhdGluZyBhbmQgbW9kaWZ5aW5nIC56aXAgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmluZm8temlwLm9yZyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworTElDRU5TRSA9ICJCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0wNGQ0M2M1ZDcwYjQ5NmMwMzIzMDgxMDZlMjZhZTE3ZCIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuaW5mby16aXAub3JnL3B1Yi9pbmZvemlwL3NyYy96aXAke0BkLmdldFZhcignUFYnLDEpLnJlcGxhY2UoJy4nLCAnJyl9LnRneiIKKworRVhUUkFfT0VNQUtFID0gIidDQz0ke0NDfScgJ0JJTkQ9JHtDQ30nICdBUz0ke0NDfSAtYycgJ0NQUD0ke0NQUH0nIFwKKwkJJ0NGTEFHUz0tSS4gLURVTklYICR7Q0ZMQUdTfScgJ0lOU1RBTEw9aW5zdGFsbCcgXAorCQknQklORkxBR1M9MDc1NScgJ0lOU1RBTExfRD1pbnN0YWxsIC1kJyIKKworZG9fY29tcGlsZSgpIHsKKwlvZV9ydW5tYWtlIC1mIHVuaXgvTWFrZWZpbGUgZmxhZ3MgSVpfQlpJUDI9bm9fc3VjaF9kaXJlY3RvcnkKKwlzZWQgLWkgJ3MjTEZMQUdTMT0iIiNMRkxBR1MxPSIke0xERkxBR1N9IiMnIGZsYWdzCisJb2VfcnVubWFrZSAtZiB1bml4L01ha2VmaWxlIGdlbmVyaWMgSVpfQlpJUDI9bm9fc3VjaF9kaXJlY3RvcnkKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIC1mIHVuaXgvTWFrZWZpbGUgcHJlZml4PSR7RH0ke3ByZWZpeH0gXAorCQkgICBCSU5ESVI9JHtEfSR7YmluZGlyfSBNQU5ESVI9JHtEfSR7bWFuZGlyfS9tYW4xIFwKKwkJICAgaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3ppcC96aXBfMy4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcF8zLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5NjExMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3ppcC96aXBfMy4wLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgemlwLmluYworCitQUj0icjIiCisKKyMgemlwLTIuMzIgc3RpbGwgdXNlcyBkaXJlY3RvcnkgbmFtZSBvZiB6aXAtMi4zMAorUyA9ICIke1dPUktESVJ9L3ppcDMwIgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2I3NDU1MWU2M2Y4ZWU2YWFiNmZiYzg2Njc2YzBkMzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjBlOGJiMWY5YjdlYjBiMDEyODU0OTVhMjY5OWRmM2E0Yjc2Njc4NGMxNzY1YThmMWFlZWRmNjNjMDgwNjM2OSIKKworIyB6aXAuaW5jIHNldHMgQ0ZMQUdTLCBidXQgd2hhdCBNYWtlZmlsZSBhY3R1YWxseSB1c2VzIGlzCisjIENGTEFHU19OT09QVC4gIEl0IHdpbGwgYWxzbyBmb3JjZSAtTzMgb3B0aW1pemF0aW9uLCBvdmVycmlkaW5nCisjIHdoYXRldmVyIHdlIHNldC4KKyMKK0VYVFJBX09FTUFLRV9hcHBlbmQgPSAiICdDRkxBR1NfTk9PUFQ9LUkuIC1EVU5JWCAke0NGTEFHU30nIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZXBpcGhhbnlfMy4xNi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZXBpcGhhbnlfMy4xNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNmZiMjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9lcGlwaGFueS9lcGlwaGFueV8zLjE2LjMuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJXZWJLaXQgYmFzZWQgd2ViIGJyb3dzZXIgZm9yIEdOT01FIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworREVQRU5EUyA9ICJsaWJzb3VwLTIuNCB3ZWJraXRndGsgZ3RrKzMgaXNvLWNvZGVzIGNhLWNlcnRpZmljYXRlcyBhdmFoaSBsaWJub3RpZnkgZ2NyIGxpYnduY2szIFwKKwkgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIGdub21lLWRlc2t0b3AzIgorCitpbmhlcml0IGdub21lYmFzZSBnc2V0dGluZ3MKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLXllbHAubTQtZHJvcC10aGUtY2hlY2stZm9yLWl0c3Rvb2wucGF0Y2giCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzMjk2YWY0NTMyYjgwMTk3NzVmNGI0MGQyMWEzNDFhZSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImQ1MjdmMTc3MDc3OWVjMjJkOTU1YWViMTNiMTQ4YTg0NmEyNjE0NGU0MzNmZjA0ODBjOTgxYWY4MGUyMzkwYjEiCisKK0VYVFJBX09FQ09ORiArPSAiIC0tZGlzYWJsZS1uc3MgLS13aXRoLWRpc3RyaWJ1dG9yLW5hbWU9JHtESVNUUk99IgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICB0b3VjaCAke1N9L2dub21lLWRvYy11dGlscy5tYWtlCisgICAgc2VkIC1pIC1lIHM6aGVscDo6ZyAke1N9L01ha2VmaWxlLmFtCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FwcGRhdGEgJHtkYXRhZGlyfS9kYnVzLTEgJHtkYXRhZGlyfS9nbm9tZS1zaGVsbC9zZWFyY2gtcHJvdmlkZXJzIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZXBpcGhhbnkvKi93ZWItZXh0ZW5zaW9ucy8uZGVidWcvbGliZXBoeXdlYmV4dGVuc2lvbi5zbyIKK1JERVBFTkRTXyR7UE59ID0gImlzby1jb2RlcyBhZHdhaXRhLWljb24tdGhlbWUiCitSUkVDT01NRU5EU18ke1BOfSA9ICJjYS1jZXJ0aWZpY2F0ZXMiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2VwaXBoYW55L2ZpbGVzLzAwMDEteWVscC5tNC1kcm9wLXRoZS1jaGVjay1mb3ItaXRzdG9vbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2VwaXBoYW55L2ZpbGVzLzAwMDEteWVscC5tNC1kcm9wLXRoZS1jaGVjay1mb3ItaXRzdG9vbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTg1ZDdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZmlsZXMvMDAwMS15ZWxwLm00LWRyb3AtdGhlLWNoZWNrLWZvci1pdHN0b29sLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gMzBmMDNhMjU2ZWZlMzc1YTRkNWMzYTI0YmY0MTY4ZWJmMzgwZTNhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogVGh1LCAzMCBKdWwgMjAxNSAxNToxMzoyMyArMDMwMAorU3ViamVjdDogW1BBVENIXSB5ZWxwLm00OiBkcm9wIHRoZSBjaGVjayBmb3IgaXRzdG9vbAorCitJdCBpc24ndCB1c2VkIGZvciBhbnl0aGluZyBkdXJpbmcgYnVpbGQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBwcm92aWRlCitpdCBhcyBhIHJlY2lwZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt0YXJiYWxsLXNwZWNpZmljIGlzc3VlXQorLS0tCisgbTQveWVscC5tNCB8IDYgLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tNC95ZWxwLm00IGIvbTQveWVscC5tNAoraW5kZXggNWRiODQ3Zi4uMWI2ZWRlNCAxMDA2NDQKKy0tLSBhL200L3llbHAubTQKKysrKyBiL200L3llbHAubTQKK0BAIC0yNywxMiArMjcsNiBAQCBBQ19BUkdfV0lUSChbaGVscC1kaXJdLAorIEhFTFBfRElSPSIkd2l0aF9oZWxwX2RpciIKKyBBQ19TVUJTVChIRUxQX0RJUikKKyAKKy1BQ19BUkdfVkFSKFtJVFNUT09MXSwgW1BhdGggdG8gdGhlIGBpdHN0b29sYCBjb21tYW5kXSkKKy1BQ19DSEVDS19QUk9HKFtJVFNUT09MXSwgW2l0c3Rvb2xdLCBbaXRzdG9vbF0pCistaWYgdGVzdCB4IiRJVFNUT09MIiA9IHg7IHRoZW4KKy0gIEFDX01TR19FUlJPUihbaXRzdG9vbCBub3QgZm91bmRdKQorLWZpCistCisgQUNfQVJHX1ZBUihbWE1MTElOVF0sIFtQYXRoIHRvIHRoZSBgeG1sbGludGAgY29tbWFuZF0pCisgQUNfQ0hFQ0tfUFJPRyhbWE1MTElOVF0sIFt4bWxsaW50XSwgW3htbGxpbnRdKQorIGlmIHRlc3QgeCIkWE1MTElOVCIgPSB4OyB0aGVuCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2djci9nY3JfMy4xNi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2NyL2djcl8zLjE2LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1YjZlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2djci9nY3JfMy4xNi4wLmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiQSBsaWJyYXJ5IGZvciBiaXRzIG9mIGNyeXB0byBVSSBhbmQgcGFyc2luZyBldGMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU1Y2E4MTdjY2I3ZDViNWI2NjM1NTY5MGU5YWJjNjA1IgorCitERVBFTkRTID0gImd0ayszIHAxMS1raXQgZ2xpYi0yLjAgbGliZ2NyeXB0IHZhbGEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdub21lYmFzZSBndGstaWNvbi1jYWNoZSBndGstZG9jCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImQ1ODM1NjgwYmUwYjZhODM4ZTAyYTUyOGQ1Mzc4ZDljIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZWNmZThkZjQxY2M4ODE1ODM2NGJiMTVhZGRjNjcwYjExZTUzOWZlODQ0NzQyOTgzNjI5YmEyMzIzODg4ZDA3NSIKKworRklMRVNfJHtQTn0gKz0gIiBcCisgICAgJHtkYXRhZGlyfS9kYnVzLTEgXAorICAgICR7ZGF0YWRpcn0vZ2NyLTMgXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmLzAwMDEtcGl4b3BzLUJlLW1vcmUtY2FyZWZ1bC1hYm91dC1pbnRlZ2VyLW92ZXJmbG93LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmLzAwMDEtcGl4b3BzLUJlLW1vcmUtY2FyZWZ1bC1hYm91dC1pbnRlZ2VyLW92ZXJmbG93LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlN2MxZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvMDAwMS1waXhvcHMtQmUtbW9yZS1jYXJlZnVsLWFib3V0LWludGVnZXItb3ZlcmZsb3cucGF0Y2gKQEAgLTAsMCArMSw4OSBAQAorRnJvbSBmZmVjODZlZDUwMTBjNWEyYmUxNGY0N2IzM2JjZjRlZDMxNjlhMTk5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+CitEYXRlOiBNb24sIDEzIEp1bCAyMDE1IDAwOjMzOjQwIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIHBpeG9wczogQmUgbW9yZSBjYXJlZnVsIGFib3V0IGludGVnZXIgb3ZlcmZsb3cKKworT3VyIGxvYWRlciBjb2RlIGlzIHN1cHBvc2VkIHRvIGhhbmRsZSBvdXQtb2YtbWVtb3J5IGFuZCBvdmVyZmxvdworc2l0dWF0aW9ucyBncmFjZWZ1bGx5LCByZXBvcnRpbmcgZXJyb3JzIGluc3RlYWQgb2YgYWJvcnRpbmcuIEJ1dAoraWYgeW91IGxvYWQgYW4gaW1hZ2UgYXQgYSBzcGVjaWZpYyBzaXplLCB3ZSBhbHNvIGV4ZWN1dGUgb3VyCitzY2FsaW5nIGNvZGUsIHdoaWNoIHdhcyBub3QgY2FyZWZ1bCBlbm91Z2ggYWJvdXQgb3ZlcmZsb3cgaW4gc29tZQorcGxhY2VzLgorCitUaGlzIGNvbW1pdCBtYWtlcyB0aGUgc2NhbGluZyBjb2RlIHNpbGVudGx5IHJldHVybiBpZiBpdCBmYWlscyB0bworYWxsb2NhdGUgZmlsdGVyIHRhYmxlcy4gVGhpcyBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8sIHNpbmNlCitnZGtfcGl4YnVmX3NjYWxlKCkgaXMgbm90IHRha2luZyBhIEdFcnJvci4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MjI5NworCitVcHN0cmVhbS1TdGF0dXM6IGJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IExpIFpob3UgPGxpLnpob3VAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdkay1waXhidWYvcGl4b3BzL3BpeG9wcy5jIHwgICAyMiArKysrKysrKysrKysrKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE3IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nZGstcGl4YnVmL3BpeG9wcy9waXhvcHMuYyBiL2dkay1waXhidWYvcGl4b3BzL3BpeG9wcy5jCitpbmRleCAyOWExYzE0Li5jZTUxNzQ1IDEwMDY0NAorLS0tIGEvZ2RrLXBpeGJ1Zi9waXhvcHMvcGl4b3BzLmMKKysrKyBiL2dkay1waXhidWYvcGl4b3BzL3BpeG9wcy5jCitAQCAtMTI3Miw3ICsxMjcyLDE2IEBAIG1ha2VfZmlsdGVyX3RhYmxlIChQaXhvcHNGaWx0ZXIgKmZpbHRlcikKKyAgIGludCBpX29mZnNldCwgal9vZmZzZXQ7CisgICBpbnQgbl94ID0gZmlsdGVyLT54Lm47CisgICBpbnQgbl95ID0gZmlsdGVyLT55Lm47CistICBpbnQgKndlaWdodHMgPSBnX25ldyAoaW50LCBTVUJTQU1QTEUgKiBTVUJTQU1QTEUgKiBuX3ggKiBuX3kpOworKyAgZ3NpemUgbl93ZWlnaHRzOworKyAgaW50ICp3ZWlnaHRzOworKworKyAgbl93ZWlnaHRzID0gU1VCU0FNUExFICogU1VCU0FNUExFICogbl94ICogbl95OworKyAgaWYgKG5fd2VpZ2h0cyAvIChTVUJTQU1QTEUgKiBTVUJTQU1QTEUgKiBuX3gpICE9IG5feSkKKysgICAgcmV0dXJuIE5VTEw7IC8qIG92ZXJmbG93LCBiYWlsICovCisrCisrICB3ZWlnaHRzID0gZ190cnlfbmV3IChpbnQsIG5fd2VpZ2h0cyk7CisrICBpZiAoIXdlaWdodHMpCisrICAgIHJldHVybiBOVUxMOyAvKiBvdmVyZmxvdywgYmFpbCAqLworIAorICAgZm9yIChpX29mZnNldD0wOyBpX29mZnNldCA8IFNVQlNBTVBMRTsgaV9vZmZzZXQrKykKKyAgICAgZm9yIChqX29mZnNldD0wOyBqX29mZnNldCA8IFNVQlNBTVBMRTsgal9vZmZzZXQrKykKK0BAIC0xMzQ3LDggKzEzNTYsMTEgQEAgcGl4b3BzX3Byb2Nlc3MgKGd1Y2hhciAgICAgICAgICpkZXN0X2J1ZiwKKyAgIGlmICh4X3N0ZXAgPT0gMCB8fCB5X3N0ZXAgPT0gMCkKKyAgICAgcmV0dXJuOyAvKiBvdmVyZmxvdywgYmFpbCBvdXQgKi8KKyAKKy0gIGxpbmVfYnVmcyA9IGdfbmV3IChndWNoYXIgKiwgZmlsdGVyLT55Lm4pOworICAgZmlsdGVyX3dlaWdodHMgPSBtYWtlX2ZpbHRlcl90YWJsZSAoZmlsdGVyKTsKKysgIGlmICghZmlsdGVyX3dlaWdodHMpCisrICAgIHJldHVybjsgLyogb3ZlcmZsb3csIGJhaWwgb3V0ICovCisrCisrICBsaW5lX2J1ZnMgPSBnX25ldyAoZ3VjaGFyICosIGZpbHRlci0+eS5uKTsKKyAKKyAgIGNoZWNrX3NoaWZ0ID0gY2hlY2tfc2l6ZSA/IGdldF9jaGVja19zaGlmdCAoY2hlY2tfc2l6ZSkgOiAwOworIAorQEAgLTE0NjgsNyArMTQ4MCw3IEBAIHRpbGVfbWFrZV93ZWlnaHRzIChQaXhvcHNGaWx0ZXJEaW1lbnNpb24gKmRpbSwKKyAJCSAgIGRvdWJsZSAgICAgICAgICAgICAgICAgc2NhbGUpCisgeworICAgaW50IG4gPSBjZWlsICgxIC8gc2NhbGUgKyAxKTsKKy0gIGRvdWJsZSAqcGl4ZWxfd2VpZ2h0cyA9IGdfbmV3IChkb3VibGUsIFNVQlNBTVBMRSAqIG4pOworKyAgZG91YmxlICpwaXhlbF93ZWlnaHRzID0gZ19tYWxsb2NfbiAoc2l6ZW9mIChkb3VibGUpICogU1VCU0FNUExFLCBuKTsKKyAgIGludCBvZmZzZXQ7CisgICBpbnQgaTsKKyAKK0BAIC0xNTI2LDcgKzE1MzgsNyBAQCBiaWxpbmVhcl9tYWduaWZ5X21ha2Vfd2VpZ2h0cyAoUGl4b3BzRmlsdGVyRGltZW5zaW9uICpkaW0sCisgICAgIH0KKyAKKyAgIGRpbS0+biA9IG47CistICBkaW0tPndlaWdodHMgPSBnX25ldyAoZG91YmxlLCBTVUJTQU1QTEUgKiBuKTsKKysgIGRpbS0+d2VpZ2h0cyA9IGdfbWFsbG9jX24gKHNpemVvZiAoZG91YmxlKSAqIFNVQlNBTVBMRSwgbik7CisgCisgICBwaXhlbF93ZWlnaHRzID0gZGltLT53ZWlnaHRzOworIAorQEAgLTE2MTcsNyArMTYyOSw3IEBAIGJpbGluZWFyX2JveF9tYWtlX3dlaWdodHMgKFBpeG9wc0ZpbHRlckRpbWVuc2lvbiAqZGltLAorIAkJCSAgIGRvdWJsZSAgICAgICAgICAgICAgICAgc2NhbGUpCisgeworICAgaW50IG4gPSBjZWlsICgxL3NjYWxlICsgMy4wKTsKKy0gIGRvdWJsZSAqcGl4ZWxfd2VpZ2h0cyA9IGdfbmV3IChkb3VibGUsIFNVQlNBTVBMRSAqIG4pOworKyAgZG91YmxlICpwaXhlbF93ZWlnaHRzID0gZ19tYWxsb2NfbiAoc2l6ZW9mIChkb3VibGUpICogU1VCU0FNUExFLCBuKTsKKyAgIGRvdWJsZSB3OworICAgaW50IG9mZnNldCwgaTsKKyAKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvZXh0ZW5kaW5nLWxpYmluc3RhbGwtZGVwZW5kZW5jaWVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL2V4dGVuZGluZy1saWJpbnN0YWxsLWRlcGVuZGVuY2llcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGJkY2VkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL2V4dGVuZGluZy1saWJpbnN0YWxsLWRlcGVuZGVuY2llcy5wYXRjaApAQCAtMCwwICsxLDQyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCBmaXhlcyBwYXJhbGxlbCBpbnN0YWxsIGlzc3VlIHRoYXQgbGliIGxpYnBpeGJ1ZmxvYWRlci1wbmcubGEKK2RlcGVuZHMgb24gbGliZ2RrX3BpeGJ1Zi0yLjAubGEgd2hpY2ggd2lsbCBiZSByZWdlbmVyYXRlZCBkdXJpbmcgaW5zdGEtCitsbGF0aW9uLCBpZiBsaWJnZGtfcGl4YnVmLTIuMC5sYSBpcyByZWdlbmVyYXRpbmcgYW5kIGF0IHRoZSBzYW1lIHRpbWUKK2xpYnBpeGJ1ZmxvYWRlci1wbmcubGEgbGlua3MgaXQsIHRoZSBlcnJvciB3aWxsIGhhcHBlbi4KKworRXJyb3IgbWVzc2FnZSBpczoKKyogdXNyL2Jpbi9sZDogY2Fubm90IGZpbmQgLWxnZGtfcGl4YnVmLTIuMAorKiBjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworCitNYWtlIGFuIGV4cGxpY2l0IGRlcGVuZGVuY3kgdG8gdGhlIGxpYnMgaW5zdGFsbCB0YXJnZXRzIHdvdWxkIGZpeCB0aGlzCitpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KKyBnZGstcGl4YnVmL01ha2VmaWxlLmFtIHwgICAgMSArCisgbGliZGVwcy5tayAgICAgICAgICAgICB8ICAgIDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmRlcHMubWsKKworZGlmZiAtLWdpdCBhL2dkay1waXhidWYvTWFrZWZpbGUuYW0gYi9nZGstcGl4YnVmL01ha2VmaWxlLmFtCitpbmRleCA5NWE5M2E4Li5kYjQ0Y2FlIDEwMDY0NAorLS0tIGEvZ2RrLXBpeGJ1Zi9NYWtlZmlsZS5hbQorKysrIGIvZ2RrLXBpeGJ1Zi9NYWtlZmlsZS5hbQorQEAgLTc4MywzICs3ODMsNCBAQCBsb2FkZXJzLmNhY2hlOgorIGVuZGlmCisgCisgLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9naXQubWsKKystaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2xpYmRlcHMubWsKK2RpZmYgLS1naXQgYS9saWJkZXBzLm1rIGIvbGliZGVwcy5taworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ3YTEwYTgKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYmRlcHMubWsKK0BAIC0wLDAgKzEsMyBAQAorKyMgRXh0ZW5kaW5nIGRlcGVuZGVuY2llcyBvZiBpbnN0YWxsLWxvYWRlckxUTElCUkFSSUVTOgorKyMgVGhlICQobGliLUxUTElCUkFSSUVTKSBpcyBuZWVkZWQgYnkgcmVsaW5raW5nICQobG9hZGVyX0xUTElCUkFSSUVTKQorK2luc3RhbGwtbG9hZGVyTFRMSUJSQVJJRVM6IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKKy0tIAorMS43LjYuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvZmF0YWwtbG9hZGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL2ZhdGFsLWxvYWRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDE0NmM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL2ZhdGFsLWxvYWRlci5wYXRjaApAQCAtMCwwICsxLDc5IEBACitJZiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzcGVjaWZpZWQgc2V0IHRoZSByZXR1cm4gdmFsdWUgZnJvbSBtYWluKCkgdG8KK25vbi16ZXJvIGlmIHRoZSBsb2FkZXIgaGFkIGVycm9ycyAobWlzc2luZyBsaWJyYXJpZXMsIGdlbmVyYWxseSkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2dkay1waXhidWYvcXVlcnlsb2FkZXJzLmMgYi9nZGstcGl4YnVmL3F1ZXJ5bG9hZGVycy5jCitpbmRleCBhOWNhMDE1Li4zOTU2NzRhIDEwMDY0NAorLS0tIGEvZ2RrLXBpeGJ1Zi9xdWVyeWxvYWRlcnMuYworKysrIGIvZ2RrLXBpeGJ1Zi9xdWVyeWxvYWRlcnMuYworQEAgLTE0Niw3ICsxNDYsNyBAQCB3cml0ZV9sb2FkZXJfaW5mbyAoR1N0cmluZyAqY29udGVudHMsIGNvbnN0IGNoYXIgKnBhdGgsIEdka1BpeGJ1ZkZvcm1hdCAqaW5mbykKKyAgICAgICAgIGdfc3RyaW5nX2FwcGVuZF9jIChjb250ZW50cywgJ1xuJyk7CisgfQorIAorLXN0YXRpYyB2b2lkCisrc3RhdGljIGdib29sZWFuCisgcXVlcnlfbW9kdWxlIChHU3RyaW5nICpjb250ZW50cywgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlKQorIHsKKyAgICAgICAgIGNoYXIgKnBhdGg7CitAQCAtMTU1LDYgKzE1NSw3IEBAIHF1ZXJ5X21vZHVsZSAoR1N0cmluZyAqY29udGVudHMsIGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZSkKKyAgICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICgqZmlsbF92dGFibGUpICAgKEdka1BpeGJ1Zk1vZHVsZSAqbW9kdWxlKTsKKyAgICAgICAgIGdwb2ludGVyIGZpbGxfaW5mb19wdHI7CisgICAgICAgICBncG9pbnRlciBmaWxsX3Z0YWJsZV9wdHI7CisrICAgICAgICBnYm9vbGVhbiByZXQgPSBUUlVFOworIAorICAgICAgICAgaWYgKGdfcGF0aF9pc19hYnNvbHV0ZSAoZmlsZSkpCisgICAgICAgICAgICAgICAgIHBhdGggPSBnX3N0cmR1cCAoZmlsZSk7CitAQCAtMjA0LDEwICsyMDUsMTMgQEAgcXVlcnlfbW9kdWxlIChHU3RyaW5nICpjb250ZW50cywgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19tb2R1bGVfZXJyb3IoKSk7CisgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICBnX2ZwcmludGYgKHN0ZGVyciwgIkNhbm5vdCBsb2FkIGxvYWRlciAlc1xuIiwgcGF0aCk7CisrICAgICAgICAgICAgICAgIHJldCA9IEZBTFNFOworICAgICAgICAgfQorICAgICAgICAgaWYgKG1vZHVsZSkKKyAgICAgICAgICAgICAgICAgZ19tb2R1bGVfY2xvc2UgKG1vZHVsZSk7CisgICAgICAgICBnX2ZyZWUgKHBhdGgpOworKworKyAgICAgICAgcmV0dXJuIHJldDsKKyB9CisgCisgI2lmZGVmIEdfT1NfV0lOMzIKK0BAIC0yNTcsNiArMjYxLDcgQEAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICAgIEdTdHJpbmcgKmNvbnRlbnRzOworICAgICAgICAgZ2NoYXIgKmNhY2hlX2ZpbGUgPSBOVUxMOworICAgICAgICAgZ2ludCBmaXJzdF9maWxlID0gMTsKKysgICAgICAgIGdib29sZWFuIHN1Y2Nlc3MgPSBUUlVFOworIAorICNpZmRlZiBHX09TX1dJTjMyCisgICAgICAgICBnY2hhciAqbGliZGlyOworQEAgLTM2MCw3ICszNjUsOCBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBsZW4gPSBzdHJsZW4gKGRlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IFNPRVhUX0xFTiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNtcCAoZGVudCArIGxlbiAtIFNPRVhUX0xFTiwgU09FWFQpID09IDApIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlfbW9kdWxlIChjb250ZW50cywgcGF0aCwgZGVudCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcXVlcnlfbW9kdWxlIChjb250ZW50cywgcGF0aCwgZGVudCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICBnX2Rpcl9jbG9zZSAoZGlyKTsKK0BAIC0zNzgsNyArMzg0LDggQEAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbmZpbGVuYW1lID0gZ19sb2NhbGVfdG9fdXRmOCAoaW5maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIE5VTEwsIE5VTEwsIE5VTEwpOworICNlbmRpZgorLSAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5X21vZHVsZSAoY29udGVudHMsIGN3ZCwgaW5maWxlbmFtZSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWVyeV9tb2R1bGUgKGNvbnRlbnRzLCBjd2QsIGluZmlsZW5hbWUpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IEZBTFNFOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIGdfZnJlZSAoY3dkKTsKKyAgICAgICAgIH0KK0BAIC0zOTQsNSArNDAxLDggQEAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgZ19wcmludCAoIiVzXG4iLCBjb250ZW50cy0+c3RyKTsKKyAKKy0gICAgICAgIHJldHVybiAwOworKyAgICAgICAgaWYgKGdfZ2V0ZW52ICgiR0RLX1BJWEJVRl9GQVRBTF9MT0FERVIiKSkKKysgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MgPyAwIDogMTsKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjY2E2MmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogZ2RrLXBpeGJ1Zi0yLjIyLjEvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2RrLXBpeGJ1Zi0yLjIyLjEub3JpZy9jb25maWd1cmUuYWMJMjAxMC0xMS0yNiAwOTowNjozNC4wMDAwMDAwMDAgKzA4MDAKKysrKyBnZGstcGl4YnVmLTIuMjIuMS9jb25maWd1cmUuYWMJMjAxMC0xMS0yNiAwOTowNzozMy4wMDAwMDAwMDAgKzA4MDAKK0BAIC0yODcsNyArMjg3LDcgQEAKKyBjYXNlICRlbmFibGVfZXhwbGljaXRfZGVwcyBpbgorICAgYXV0bykKKyAgICAgZXhwb3J0IFNFRAorLSAgICBkZXBsaWJzX2NoZWNrX21ldGhvZD1gKC4vbGlidG9vbCAtLWNvbmZpZzsgZWNobyAnZXZhbCBlY2hvIFwiJGRlcGxpYnNfY2hlY2tfbWV0aG9kXCInKSB8IHNoYAorKyAgICBkZXBsaWJzX2NoZWNrX21ldGhvZD1gKC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZzsgZWNobyAnZXZhbCBlY2hvIFwiJGRlcGxpYnNfY2hlY2tfbWV0aG9kXCInKSB8IHNoYAorICAgICBpZiB0ZXN0ICJ4JGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAnIT0nIHhwYXNzX2FsbCB8fCB0ZXN0ICJ4JGVuYWJsZV9zdGF0aWMiID0geHllcyA7IHRoZW4KKyAgICAgICBlbmFibGVfZXhwbGljaXRfZGVwcz15ZXMKKyAgICAgZWxzZQorQEAgLTQ4NCw3ICs0ODQsNyBAQAorICAgICBkbmwgTm93IHdlIGNoZWNrIHRvIHNlZSBpZiBvdXIgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGliIGRlcHMKKyAgICAgZG5sIChpbiBhIHJhdGhlciB1Z2x5IHdheSBldmVuKQorICAgICBpZiAkZHlud29ya3M7IHRoZW4KKy0gICAgICAgIHBpeGJ1Zl9saWJ0b29sX2NvbmZpZz0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gLi9saWJ0b29sIC0tY29uZmlnIgorKyAgICAgICAgcGl4YnVmX2xpYnRvb2xfY29uZmlnPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSAuLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWciCisgICAgICAgICBwaXhidWZfZGVwbGlic19jaGVjaz1gJHBpeGJ1Zl9saWJ0b29sX2NvbmZpZyB8IFwKKyAgICAgICAgICAgICBncmVwICdeW1thLXpfXV0qY2hlY2tbW2Etel9dXSpfbWV0aG9kPVtbJ1wnJyJdXScgfCBcCisgICAgICAgICAgICAgc2VkICdzLy4qW1snXCcnIl1dXCguKlwpW1snXCcnIl1dJC9cMS8nYAorQEAgLTk1Nyw3ICs5NTcsNyBAQAorICMgV2UgYXJlIHVzaW5nIGdtb2R1bGUtbm8tZXhwb3J0IG5vdywgYnV0IEknbSBsZWF2aW5nIHRoZSBzdHJpcHBpbmcKKyAjIGNvZGUgaW4gcGxhY2UgZm9yIG5vdywgc2luY2UgcGFuZ28gYW5kIGF0ayBzdGlsbCByZXF1aXJlIGdtb2R1bGUuCisgZXhwb3J0IFNFRAorLWV4cG9ydF9keW5hbWljPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisrZXhwb3J0X2R5bmFtaWM9YCguLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKyBpZiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWMiOyB0aGVuCisgICBHREtfUElYQlVGX0RFUF9MSUJTPWBlY2hvICRHREtfUElYQlVGX0RFUF9MSUJTIHwgc2VkIC1lICJzLyRleHBvcnRfZHluYW1pYy8vImAKKyBmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY5MDcyMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjISAvYmluL3NoCisKK2dub21lLWRlc2t0b3AtdGVzdGluZy1ydW5uZXIgZ2RrLXBpeGJ1ZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmXzIuMzAuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zl8yLjMwLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjMmRjZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zl8yLjMwLjguYmIKQEAgLTAsMCArMSw5NyBAQAorU1VNTUFSWSA9ICJJbWFnZSBsb2FkaW5nIGxpYnJhcnkgZm9yIEdUSysiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmd0ay5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmLmg7ZW5kbGluZT0yNjttZDU9NzJiMzlkYTdjYmRkZTJlNjY1MzI5ZmVmNjE4ZTFkNmIiCisKK1NFQ1RJT04gPSAibGlicyIKKworREVQRU5EUyA9ICJnbGliLTIuMCIKK0RFUEVORFNfYXBwZW5kX2xpbnV4c3RkYmFzZSA9ICIgdmlydHVhbC9saWJ4MTEiCisKK01BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LyR7TUFKX1ZFUn0vJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9oYXJkY29kZWRfbGlidG9vbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9leHRlbmRpbmctbGliaW5zdGFsbC1kZXBlbmRlbmNpZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2ZhdGFsLWxvYWRlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBpeG9wcy1CZS1tb3JlLWNhcmVmdWwtYWJvdXQtaW50ZWdlci1vdmVyZmxvdy5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjRmZWQwZDU0NDMyZjFiNjlmYzZlNjZlNjA4YmQ1NTQyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ4NTM4MzA2MTYxMTNkYjQ0MzU4Mzc5OTJjMGFlYmQ5NGNiYjk5M2M0NGRjNTUwNjNjZWU3ZjcyYTdiZWY4YmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IHBpeGJ1ZmNhY2hlIHB0ZXN0LWdub21lCisKK0xJQlYgPSAiMi4xMC4wIgorCitHREtfUElYQlVGX0xPQURFUlMgPz0gInBuZyBqcGVnIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtHREtfUElYQlVGX0xPQURFUlN9IgorUEFDS0FHRUNPTkZJR19saW51eHN0ZGJhc2UgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSAke0dES19QSVhCVUZfTE9BREVSU30iCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA9ICIke0dES19QSVhCVUZfTE9BREVSU30iCisKK1BBQ0tBR0VDT05GSUdbcG5nXSA9ICItLXdpdGgtbGlicG5nLC0td2l0aG91dC1saWJwbmcsbGlicG5nIgorUEFDS0FHRUNPTkZJR1tqcGVnXSA9ICItLXdpdGgtbGlianBlZywtLXdpdGhvdXQtbGlianBlZyxqcGVnIgorUEFDS0FHRUNPTkZJR1t0aWZmXSA9ICItLXdpdGgtbGlidGlmZiwtLXdpdGhvdXQtbGlidGlmZix0aWZmIgorUEFDS0FHRUNPTkZJR1tqcGVnMjAwMF0gPSAiLS13aXRoLWxpYmphc3BlciwtLXdpdGhvdXQtbGliamFzcGVyLGphc3BlciIKKworIyBVc2UgR0lPIHRvIHNuaWZmIGltYWdlIGZvcm1hdCBpbnN0ZWFkIG9mIHRyeWluZyBhbGwgbG9hZGVycworUEFDS0FHRUNPTkZJR1tnaW8tc25pZmZdID0gIi0tZW5hYmxlLWdpby1zbmlmZmluZywtLWRpc2FibGUtZ2lvLXNuaWZmaW5nLCxzaGFyZWQtbWltZS1pbmZvIgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14MTEsLS13aXRob3V0LXgxMSx2aXJ0dWFsL2xpYngxMSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIgorCitQQUNLQUdFUyA9KyAiJHtQTn0teGxpYiIKKworRklMRVNfJHtQTn0teGxpYiA9ICIke2xpYmRpcn0vKnBpeGJ1Zl94bGliKiR7U09MSUJTfSIKK0FMTE9XX0VNUFRZXyR7UE59LXhsaWIgPSAiMSIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L2dkay1waXhidWYtcXVlcnktbG9hZGVycyBcCisJJHtiaW5kaXJ9L2dkay1waXhidWYtcGl4ZGF0YSBcCisJJHtsaWJkaXJ9L2xpYiouc28uKiIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIgXAorCSR7YmluZGlyfS9nZGstcGl4YnVmLWNzb3VyY2UgXAorCSR7aW5jbHVkZWRpcn0vKiBcCisJJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy8qLmxhIFwKKyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIgXAorICAgICAgICAke2xpYmRpcn0vLmRlYnVnLyogXAorCSR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMvLmRlYnVnLyogXAorIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJeZ2RrLXBpeGJ1Zi1sb2FkZXItLioiCitQQUNLQUdFU19EWU5BTUlDX2NsYXNzLW5hdGl2ZSA9ICIiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBwb3N0aW5zdF9waXhidWZsb2FkZXIgPSBkLmdldFZhcigicG9zdGluc3RfcGl4YnVmbG9hZGVyIiwgVHJ1ZSkKKworICAgIGxvYWRlcnNfcm9vdCA9IGQuZXhwYW5kKCcke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzJykKKworICAgIHBhY2thZ2VzID0gJyAnLmpvaW4oZG9fc3BsaXRfcGFja2FnZXMoZCwgbG9hZGVyc19yb290LCAnXmxpYnBpeGJ1ZmxvYWRlci0oLiopXC5zbyQnLCAnZ2RrLXBpeGJ1Zi1sb2FkZXItJXMnLCAnR0RLIHBpeGJ1ZiBsb2FkZXIgZm9yICVzJykpCisgICAgZC5zZXRWYXIoJ1BJWEJVRl9QQUNLQUdFUycsIHBhY2thZ2VzKQorCisgICAgIyBUaGUgdGVzdCBzdWl0ZSBleGVyY2lzZXMgYWxsIHRoZSBsb2FkZXJzLCBzbyBlbnN1cmUgdGhleSBhcmUgYWxsCisgICAgIyBkZXBlbmRlbmNpZXMgb2YgdGhlIHB0ZXN0IHBhY2thZ2UuCisgICAgZC5hcHBlbmRWYXIoIlJERVBFTkRTX2dkay1waXhidWYtcHRlc3QiLCAiICIgKyBwYWNrYWdlcykKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWZpbmQgJHtEfSR7bGliZGlyfSAtbmFtZSAibGlicGl4YnVmbG9hZGVyLSoubGEiIC1leGVjIHJtIFx7XH0gXDsKKworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2dkay1waXhidWYtY3NvdXJjZSBcCisJCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy5jYWNoZQorCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1waXhkYXRhIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLmNhY2hlCisKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9nZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgXAorCQlHREtfUElYQlVGX01PRFVMRV9GSUxFPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMuY2FjaGUgXAorCQlHREtfUElYQlVGX01PRFVMRURJUj0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzCit9CitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lLWRlc2t0b3AvZ25vbWUtZGVza3RvcDNfMy4xNi4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUtZGVza3RvcC9nbm9tZS1kZXNrdG9wM18zLjE2LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYyZjA2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lLWRlc2t0b3AvZ25vbWUtZGVza3RvcDNfMy4xNi4yLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiR05PTUUgbGlicmFyeSBmb3IgcmVhZGluZyAuZGVza3RvcCBmaWxlcyIKK1NFQ1RJT04gPSAieDExL2dub21lIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKKworQlBOID0gImdub21lLWRlc2t0b3AiCisKK2luaGVyaXQgZ25vbWUgcGtnY29uZmlnCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJhYjViZjRjYzk0YWQ2MzYzOWY0MmFkY2MxNTQyYjFmMCIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjNhOGYxOTZiNDZlYjlkYmQzYmEyYWZiOGZiNWZlZjZhODgyNTUzOWQ0NDlhMDIxODEzMTEyNDJlMjIyMjdiZDAiCisKK0RFUEVORFMgKz0gImdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgZ2NvbmYgbGlieHJhbmRyIHZpcnR1YWwvbGlieDExIGd0ayszIGdsaWItMi4wIGdub21lLWRvYy11dGlscyBnbm9tZS1jb21tb24gc3RhcnR1cC1ub3RpZmljYXRpb24gaXNvLWNvZGVzIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRlc2t0b3AtZG9jcyIKKworUEFDS0FHRVMgPSsgImxpYmdub21lLWRlc2t0b3AzIgorRklMRVNfbGliZ25vbWUtZGVza3RvcDMgPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU30gJHtkYXRhZGlyfS9saWJnbm9tZS1kZXNrdG9wKi9wbnAuaWRzICR7ZGF0YWRpcn0vZ25vbWUvKnhtbCIKKworUlJFQ09NTUVORFNfbGliZ25vbWUtZGVza3RvcDMgKz0gImdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZS9DcmVhdGUtc3ltbGlua3Mtd2hlbi1pbnN0YWxsaW5nLWN1cnNvcnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWUvQ3JlYXRlLXN5bWxpbmtzLXdoZW4taW5zdGFsbGluZy1jdXJzb3JzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NmY5YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWUvQ3JlYXRlLXN5bWxpbmtzLXdoZW4taW5zdGFsbGluZy1jdXJzb3JzLnBhdGNoCkBAIC0wLDAgKzEsMTc4IEBACitDcmVhdGUgc3ltbGlua3Mgd2hlbiBpbnN0YWxsaW5nIGN1cnNvcnMKKworVGhpcyBjdXRzIGRvd24gdGhlIGluc3RhbGxlZCBzaXplIGJ5IH4xMU1CLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorCisKK0Zyb20gMWU4YzBkZDBhMmRlNWUxZDVmZjYwZmYxMWYxMzFlODg1MTBjN2Y1MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT89RDA9QTA9RDE9ODM9RDE9ODE9RDA9QkI9RDA9QjA9RDA9QkQ9MjA9RDA9OTg9RDA9QjY9RDA9QjE/PQorID0/VVRGLTg/cT89RDE9ODM9RDA9QkI9RDA9QjA9RDE9ODI9RDA9QkU9RDA9QjI/PSA8bHJuMTk4NkBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDE2IE1heSAyMDE1IDA3OjQ5OjE5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIENyZWF0ZSBzeW1saW5rcyB3aGVuIGluc3RhbGxpbmcgY3Vyc29ycworCitBbHNvIHN1cHBvcnQgY3JlYXRpbmcgc3ltbGlua3MgZm9yIFczMiBjdXJzb3JzIChpbmNsdWRpbmcgTCBhbmQgWEwgdmFyaWFudHMpLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MjIzCistLS0KKyBNYWtlZmlsZS5hbSAgfCA5MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBjb25maWd1cmUuYWMgfCAyNCArKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxMTcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggZmVkMzk3Mi4uNGQwMDI2OCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTYsNiArNiwxNyBAQCBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNCAke0FDTE9DQUxfRkxBR1N9CisgCisgY3Vyc29yZGlyID0gJChkYXRhZGlyKS9pY29ucy9BZHdhaXRhL2N1cnNvcnMKKyBjdXJzb3JfREFUQSA9ICQod2lsZGNhcmQgJChzcmNkaXIpL0Fkd2FpdGEvY3Vyc29ycy8qKQorK2lmIEVOQUJMRV9MX1hMX1ZBUklBTlRTCisrY3Vyc29ybGRpciA9ICQoZGF0YWRpcikvaWNvbnMvQWR3YWl0YS1MYXJnZS9jdXJzb3JzCisrY3Vyc29ybF9EQVRBID0gJCh3aWxkY2FyZCAkKHNyY2RpcikvQWR3YWl0YS1MYXJnZS9jdXJzb3JzLyopCisrY3Vyc29yeGxkaXIgPSAkKGRhdGFkaXIpL2ljb25zL0Fkd2FpdGEtRXh0cmFMYXJnZS9jdXJzb3JzCisrY3Vyc29yeGxfREFUQSA9ICQod2lsZGNhcmQgJChzcmNkaXIpL0Fkd2FpdGEtRXh0cmFMYXJnZS9jdXJzb3JzLyopCisrZWxzZQorK2N1cnNvcmxkaXIgPQorK2N1cnNvcmxfREFUQSA9CisrY3Vyc29yeGxkaXIgPQorK2N1cnNvcnhsX0RBVEEgPQorK2VuZGlmCisgCisgdGhlbWVfaW5fZmlsZXMgPSBpbmRleC50aGVtZS5pbi5pbgorIHRoZW1lX0RBVEEgPSAkKHRoZW1lX2luX2ZpbGVzOi50aGVtZS5pbi5pbj0udGhlbWUpCitAQCAtOTksNiArMTEwLDg4IEBAIGluc3RhbGwtZGF0YS1sb2NhbDoKKyAJZmkKKyAKKyBpbnN0YWxsLWRhdGEtaG9vazoKKysJY2QgJChERVNURElSKSQoY3Vyc29yZGlyKSAmJiBcCisrCWlmIHRlc3QgIngkKGVuYWJsZV93MzJfY3Vyc29ycykiID0gInh5ZXMiOyBcCisrCXRoZW4gXAorKwkJY3VyPS5jdXIgJiYgXAorKwkJYW5pPS5hbmk7IFwKKysJZWxzZSBcCisrCQljdXI9ICYmIFwKKysJCWFuaT0gOyBcCisrCWZpOyBcCisrCWlmIHRlc3QgIngkKGVuYWJsZV9sX3hsX3ZhcmlhbnRzKSIgPSAieHllcyI7IFwKKysJdGhlbiBcCisrCQl0aGVtZWRpcnM9IiQoY3Vyc29yZGlyKSAkKGN1cnNvcmxkaXIpICQoY3Vyc29yeGxkaXIpIjsgXAorKwllbHNlIFwKKysJCXRoZW1lZGlycz0iJChjdXJzb3JkaXIpIjsgXAorKwlmaTsgXAorKwlmb3IgZCBpbiAkJHRoZW1lZGlyczsgXAorKwlkbyBcCisrCQljZCAkKERFU1RESVIpJCRkICYmIFwKKysJCWVjaG8gQ3JlYXRpbmcgc3ltbGlua3MgaW4gJChERVNURElSKSQkZCAmJiBcCisrCQkkKExOX1MpIC1mICBkb3Rib3gkJGN1cgkJCWRyYXBlZF9ib3gkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBkb3Rib3gkJGN1cgkJCWljb24kJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBkb3Rib3gkJGN1cgkJCXRhcmdldCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGRvdGJveCQkY3VyCQkJZG90X2JveF9tYXNrJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgWF9jdXJzb3IkJGN1cgkJcGlyYXRlJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbGVmdF9wdHJfd2F0Y2gkJGFuaQkJMDhlOGUxYzk1ZmUyZmMwMWY5NzZmMWUwNjNhMjRjY2QkJGFuaSAmJiBcCisrCQkkKExOX1MpIC1mICBsZWZ0X3B0cl93YXRjaCQkYW5pCQkzZWNiNjEwYzFiZjI0MTBmNDQyMDBmNDhjNDBkMzU5OSQkYW5pICYmIFwKKysJCSQoTE5fUykgLWYgIGxlZnRfcHRyJCRjdXIJCWFycm93JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbGVmdF9wdHIkJGN1cgkJdG9wX2xlZnRfYXJyb3ckJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICByaWdodF9wdHIkJGN1cgkJZHJhZnRfbGFyZ2UkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICByaWdodF9wdHIkJGN1cgkJZHJhZnRfc21hbGwkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBtb3ZlJCRjdXIJCQk0NDk4ZjBlMGMxOTM3ZmZlMDFmZDA2Zjk3MzY2NTgzMCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIG1vdmUkJGN1cgkJCTkwODEyMzczODNkOTBlNTA5YWEwMGYwMDE3MGU5NjhmJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgY29weSQkY3VyCQkJMTA4MWUzNzI4M2Q5MDAwMDgwMDAwM2MwN2YzZWY2YmYkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBjb3B5JCRjdXIJCQk2NDA3YjBlOTQxODE3OTA1MDFmZDFlMTY3YjQ3NDg3MiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGNyb3NzJCRjdXIJCQljcm9zc19yZXZlcnNlJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgY3Jvc3MkJGN1cgkJCWRpYW1vbmRfY3Jvc3MkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBoYW5kMSQkY3VyCQkJZ3JhYiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGhhbmQyJCRjdXIJCQk5ZDgwMDc4OGYxYjA4ODAwYWU4MTAyMDIzODBhMDgyMiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGhhbmQyJCRjdXIJCQllMjkyODVlNjM0MDg2MzUyOTQ2YTBlNzA5MGQ3MzEwNiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGhhbmQyJCRjdXIJCQloYW5kJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgZ3JhYmJpbmckJGN1cgkJZmxldXIkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBxdWVzdGlvbl9hcnJvdyQkY3VyCQlkOWNlMGFiNjA1Njk4ZjMyMDQyNzY3N2I0NThhZDYwYiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHF1ZXN0aW9uX2Fycm93JCRjdXIJCTVjNmNkOThiM2YzZWJjYjFmOWM3ZjFjMjA0NjMwNDA4JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgcXVlc3Rpb25fYXJyb3ckJGN1cgkJaGVscCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHF1ZXN0aW9uX2Fycm93JCRjdXIJCWxlZnRfcHRyX2hlbHAkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBsaW5rJCRjdXIJCQkzMDg1YTBlMjg1NDMwODk0OTQwNTI3MDMyZjhiMjZkZiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGxpbmskJGN1cgkJCTY0MGZiMGU3NDE5NTc5MTUwMWZkMWVkNTdiNDE0ODdmJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgY3Jvc3NlZF9jaXJjbGUkJGN1cgkJMDNiNmUwZmNiMzQ5OTM3NGE4NjdjMDQxZjUyMjk4ZjAkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBmZF9kb3VibGVfYXJyb3ckJGN1cglmY2YxYzNjN2NkNDQ5MWQ4MDFmMWUxYzc4ZjEwMDAwMCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGJkX2RvdWJsZV9hcnJvdyQkY3VyCWM3MDg4ZjBmM2U2YzgwODgyMzZlZjhlMWUzZTcwMDAwJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgc2JfaF9kb3VibGVfYXJyb3ckJGN1ciAJaF9kb3VibGVfYXJyb3ckJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBzYl9oX2RvdWJsZV9hcnJvdyQkY3VyCTE0ZmVmNzgyZDAyNDQwODg0MzkyOTQyYzExMjA1MjMwJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgaF9kb3VibGVfYXJyb3ckJGN1cgkJMDI4MDA2MDMwZTBlN2ViZmZjN2Y3MDcwYzA2MDAxNDAkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBzYl92X2RvdWJsZV9hcnJvdyQkY3VyIAlkb3VibGVfYXJyb3ckJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBzYl92X2RvdWJsZV9hcnJvdyQkY3VyIAl2X2RvdWJsZV9hcnJvdyQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX3ZfZG91YmxlX2Fycm93JCRjdXIJMjg3MGEwOTA4MmMxMDMwNTA4MTBmZmRmZmZmZTAyMDQkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICB2X2RvdWJsZV9hcnJvdyQkY3VyCQkwMDAwODE2MDAwMDAwNjgxMDAwMDQwODA4MDAxMDEwMiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGxlZnRfcHRyJCRjdXIJCWRlZmF1bHQkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBoYW5kJCRjdXIJCQlwb2ludGVyJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbGVmdF9wdHJfd2F0Y2gkJGFuaQkJcHJvZ3Jlc3MkJGFuaSAmJiBcCisrCQkkKExOX1MpIC1mICB3YXRjaCQkYW5pCQkJd2FpdCQkYW5pICYmIFwKKysJCSQoTE5fUykgLWYgIGNyb3NzJCRjdXIJCQljcm9zc2hhaXIkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICB4dGVybSQkY3VyCQkJdGV4dCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGRuZC1saW5rJCRjdXIJCWFsaWFzJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgZG5kLWNvcHkkJGN1cgkJY29weSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGRuZC1ub25lJCRjdXIJCW5vLWRyb3AkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBjcm9zc2VkX2NpcmNsZSQkY3VyCQlub3QtYWxsb3dlZCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX2hfZG91YmxlX2Fycm93JCRjdXIJY29sLXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX3ZfZG91YmxlX2Fycm93JCRjdXIJcm93LXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHRvcF9zaWRlJCRjdXIJCW4tcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgcmlnaHRfc2lkZSQkY3VyCQllLXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGJvdHRvbV9zaWRlJCRjdXIJCXMtcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbGVmdF9zaWRlJCRjdXIJCXctcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgdG9wX3JpZ2h0X2Nvcm5lciQkY3VyCW5lLXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHRvcF9sZWZ0X2Nvcm5lciQkY3VyCW53LXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGJvdHRvbV9yaWdodF9jb3JuZXIkJGN1cglzZS1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBib3R0b21fbGVmdF9jb3JuZXIkJGN1cglzdy1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBzYl9oX2RvdWJsZV9hcnJvdyQkY3VyCWV3LXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX3ZfZG91YmxlX2Fycm93JCRjdXIJbnMtcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgZmRfZG91YmxlX2Fycm93JCRjdXIJbmVzdy1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBiZF9kb3VibGVfYXJyb3ckJGN1cglud3NlLXJlc2l6ZSQkY3VyOyBcCisrCWRvbmUKKyAJaWYgdGVzdCAteiAiJChERVNURElSKSIgJiYgdGVzdCAtbiAiJChHVEtfVVBEQVRFX0lDT05fQ0FDSEUpIiA7IHRoZW4gXAorIAkJJChHVEtfVVBEQVRFX0lDT05fQ0FDSEUpIC1xICQoREVTVERJUikkKHRoZW1lZGlyKTsgXAorIAlmaQorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOWU0ZDhhMC4uMzEyYjI0YyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzEsNiArMzEsNyBAQCBBQ19TVUJTVChbcmVuZGVyX3NpemVzXSwgWyI4eDggMTZ4MTYgMjJ4MjIgMjR4MjQgMzJ4MzIgNDh4NDggMjU2eDI1NiJdKQorIEFDX1NVQlNUKFtzeW1ib2xpY19yZW5kZXJfc2l6ZXNdLCBbIiJdKQorIEFDX1NVQlNUKFtpbnN0YWxsX3NpemVzXSwgWyI4eDggMTZ4MTYgMjJ4MjIgMjR4MjQgMzJ4MzIgNDh4NDggNjR4NjQgOTZ4OTYgMjU2eDI1NiJdKQorIAorK0FDX1BST0dfTE5fUworIEFDX1BBVEhfUFJPRyhHVEtfVVBEQVRFX0lDT05fQ0FDSEUsIGd0ay11cGRhdGUtaWNvbi1jYWNoZSkKKyAKKyAjIG5lZWQgZ2l0LCBpY29udG9vbCwgYW5kIGlua3NjYXBlIGZvciByZW5kZXJpbmcKK0BAIC01Niw2ICs1NywyOSBAQCBpZiB0ZXN0ICJ4JEdUS19FTkNPREVfU1lNQk9MSUNfU1ZHIiA9ICJ4ZmFsc2UiOyB0aGVuCisgZmkKKyBBQ19TVUJTVChzeW1ib2xpY19lbmNvZGVfc2l6ZXMpCisgCisrQUNfQVJHX0VOQUJMRShbdzMyLWN1cnNvcnNdLAorKyAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS13MzItY3Vyc29yc10sCisrICAgIFtNYWtlIGFuZCBpbnN0YWxsIFdpbmRvd3MgY3Vyc29ycyAoLmN1ciBhbmQgLmFuaSkgaW5zdGVhZCBvZiBYIGN1cnNvcnNdKV0sCisrICBbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgICB5ZXMpIGVuYWJsZV93MzJfY3Vyc29ycz15ZXMgOzsKKysgICAgbm8pICBlbmFibGVfdzMyX2N1cnNvcnM9bm8gOzsKKysgICAgKikgQUNfTVNHX0VSUk9SKFtiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS13MzItY3Vyc29yc10pIDs7CisrICAgZXNhY10sCisrICBbZW5hYmxlX3czMl9jdXJzb3JzPW5vXSkKKytBQ19TVUJTVChlbmFibGVfdzMyX2N1cnNvcnMpCisrCisrQUNfQVJHX0VOQUJMRShbbC14bC12YXJpYW50c10sCisrICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWwteGwtdmFyaWFudHNdLAorKyAgICBbQWxzbyBtYWtlIGFuZCBpbnN0YWxsIExhcmdlIGFuZCBFeHRyYSBMYXJnZSBXaW5kb3dzIGN1cnNvciB2ZXJzaW9uc10pXSwKKysgIFtjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICAgIHllcykgZW5hYmxlX2xfeGxfdmFyaWFudHM9eWVzIDs7CisrICAgIG5vKSAgZW5hYmxlX2xfeGxfdmFyaWFudHM9bm8gOzsKKysgICAgKikgQUNfTVNHX0VSUk9SKFtiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1sLXhsLXZhcmlhbnRzXSkgOzsKKysgICBlc2FjXSwKKysgIFtlbmFibGVfbF94bF92YXJpYW50cz1ub10pCisrQUNfU1VCU1QoZW5hYmxlX2xfeGxfdmFyaWFudHMpCisrQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9MX1hMX1ZBUklBTlRTXSwgW3Rlc3QgeCRlbmFibGVfbF94bF92YXJpYW50cyA9IHh5ZXNdKQorKworIEFDX0NPTkZJR19GSUxFUyhbCisgTWFrZWZpbGUKKyBhZHdhaXRhLWljb24tdGhlbWUucGMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lXzMuMTYuMi4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lXzMuMTYuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNmU2OTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWVfMy4xNi4yLjEuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJHVEsrIGljb24gdGhlbWUiCitIT01FUEFHRSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcy9hZHdhaXRhLWljb24tdGhlbWUvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCitTRUNUSU9OID0gIngxMS9nbm9tZSIKKworTElDRU5TRSA9ICJMR1BMLTMuMCB8IENDLUJZLVNBLTMuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM4NGNhYzg4ZTQ2ZmMwNzY0N2VhMDdlNmMyNGVlYjdjIgorCitpbmhlcml0IGFsbGFyY2ggYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IGd0ay1pY29uLWNhY2hlCisKK0RFUEVORFMgKz0gImludGx0b29sLW5hdGl2ZSIKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LyR7TUFKX1ZFUn0vJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9DcmVhdGUtc3ltbGlua3Mtd2hlbi1pbnN0YWxsaW5nLWN1cnNvcnMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjllZjg2OTUyYzk0N2FhMjdhMWE4ODhiNzczNWQ2MGIzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI0NTU2ZGZiZjU1NWQ0ZmFjMTJkNGQ1YzEyZjc1MTlkZTBkNDNlYzQyYTFiNjQ5NjExNDM5YTUwYmY3YWNiOTYiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgQnVpbGQgdXNlcyBndGstZW5jb2RlLXN5bWJvbGljLXN2ZyB0byBjcmVhdGUgcG5nIHZlcnNpb25zOgorICAgICAgICAjIG5vIG5lZWQgdG8gc3RvcmUgdGhlIHN2Z3MgYW55bW9yZS4KKwlybSAtZiAke0R9JHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvc2NhbGFibGUvKi8qLXN5bWJvbGljLnN2ZyBcCisJICAgICAgJHtEfSR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhL3NjYWxhYmxlLyovKi1zeW1ib2xpYy1ydGwuc3ZnCit9CisKK1BBQ0tBR0VTID0gIiR7UE59LWN1cnNvcnMgJHtQTn0tc3ltYm9saWMgJHtQTn0taGlyZXMgJHtQTn0iCisKK0ZJTEVTXyR7UE59LWN1cnNvcnMgPSAiJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvY3Vyc29ycy8iCitGSUxFU18ke1BOfS1zeW1ib2xpYyA9ICIke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS8qLyovKi5zeW1ib2xpYy5wbmciCitGSUxFU18ke1BOfS1oaXJlcyA9ICIke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS8yNTZ4MjU2LyIKK0ZJTEVTXyR7UE59ID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLyBcCisgICAgICAgICAgICAgICAke3ByZWZpeH0vc2hhcmUvcGtnY29uZmlnL2Fkd2FpdGEtaWNvbi10aGVtZS5wYyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2djb25mL3JlbW92ZV9wbHVzX2Zyb21faW52YWxpZF9jaGFyYWN0ZXJzX2xpc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZi9yZW1vdmVfcGx1c19mcm9tX2ludmFsaWRfY2hhcmFjdGVyc19saXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YTdjYTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZi9yZW1vdmVfcGx1c19mcm9tX2ludmFsaWRfY2hhcmFjdGVyc19saXN0LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSZW1vdmUgJysnIGZyb20gaW52YWxpZCBjaGFyYWN0ZXJzIGxpc3QKKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorCitJbmRleDogR0NvbmYtMy4yLjUvZ2NvbmYvZ2NvbmYtYmFja2VuZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gR0NvbmYtMy4yLjUub3JpZy9nY29uZi9nY29uZi1iYWNrZW5kLmMKKysrKyBHQ29uZi0zLjIuNS9nY29uZi9nY29uZi1iYWNrZW5kLmMKK0BAIC0zNyw3ICszNyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGludmFsaWRfY2hhcnNbXSA9CisgICAvKiBTcGFjZSBpcyBjb21tb24gaW4gdXNlciBuYW1lcyAoYW5kIHRodXMgaG9tZSBkaXJlY3Rvcmllcykgb24gV2luZG93cyAqLworICAgIiAiCisgI2VuZGlmCistICAiXHRcclxuXCIkJjw+LCs9IyEoKSd8e31bXT9+YDslXFwiOworKyAgIlx0XHJcblwiJCY8Piw9IyEoKSd8e31bXT9+YDslXFwiOworIAorIHN0YXRpYyBnYm9vbGVhbgorIGdjb25mX2FkZHJlc3NfdmFsaWQgKGNvbnN0IGNoYXIgICphZGRyZXNzLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmYvdW5hYmxlLWNvbm5lY3QtZGJ1cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2djb25mL3VuYWJsZS1jb25uZWN0LWRidXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc1OGE0YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2djb25mL3VuYWJsZS1jb25uZWN0LWRidXMucGF0Y2gKQEAgLTAsMCArMSw5NSBAQAorRml4ZXMgZXJyb3JzIHN1Y2ggYXMgdGhpcyBpbiB0aGUgcm9vdGZzIGdlbmVyYXRpb246CisKKyhnY29uZnRvb2wtMi5yZWFsOjEwMDk1KTogR0NvbmYtV0FSTklORyAqKjogQ2xpZW50IGZhaWxlZCB0byBjb25uZWN0IHRvIHRoZSBELUJVUyBkYWVtb246CitVc2luZyBYMTEgZm9yIGRidXMtZGFlbW9uIGF1dG9sYXVuY2ggd2FzIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSwgc2V0IHlvdXIgREJVU19TRVNTSU9OX0JVU19BRERSRVNTIGluc3RlYWQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSBiMDg5NWUxOTk4ZWJjODNhYjAzMGVjMGYxN2MwNjg1NDM5ZjViNDA0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUmF5IFN0cm9kZSA8cnN0cm9kZUByZWRoYXQuY29tPgorRGF0ZTogTW9uLCAxNSBBcHIgMjAxMyAwOTo1NzozNCAtMDQwMAorU3ViamVjdDogW1BBVENIXSBkYnVzOiBEb24ndCBzcGV3IHRvIGNvbnNvbGUgd2hlbiB1bmFibGUgdG8gY29ubmVjdCB0byBkYnVzCisgZGFlbW9uCisKK0luc3RlYWQgcGFzcyB0aGUgZXJyb3IgdXAgZm9yIHRoZSBjYWxsZXIgdG8gZGVjaWRlIHdoYXQgdG8gZG8uCisKK1RoaXMgcHJldmVudCB1bnRyYXBwYWJsZSB3YXJuaW5nIG1lc3NhZ2VzIGZyb20gc2hvd2luZyB1cCBhdCB0aGUKK2NvbnNvbGUgaWYgZ2NvbmZ0b29sIC0tbWFrZWZpbGUtaW5zdGFsbC1ydWxlIGlzIGNhbGxlZC4KKy0tLQorIGdjb25mL2djb25mLWRidXMuYyB8ICAgMjQgKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NvbmYvZ2NvbmYtZGJ1cy5jIGIvZ2NvbmYvZ2NvbmYtZGJ1cy5jCitpbmRleCA1NjEwZmNmLi4wNDhlM2VhIDEwMDY0NAorLS0tIGEvZ2NvbmYvZ2NvbmYtZGJ1cy5jCisrKysgYi9nY29uZi9nY29uZi1kYnVzLmMKK0BAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIEdIYXNoVGFibGUgICAgICplbmdpbmVzX2J5X2RiID0gTlVMTDsKKyBzdGF0aWMgR0hhc2hUYWJsZSAgICAgKmVuZ2luZXNfYnlfYWRkcmVzcyA9IE5VTEw7Cisgc3RhdGljIGdib29sZWFuICAgICAgICBkYnVzX2Rpc2Nvbm5lY3RlZCA9IEZBTFNFOworIAorLXN0YXRpYyBnYm9vbGVhbiAgICAgZW5zdXJlX2RidXNfY29ubmVjdGlvbiAgICAgICh2b2lkKTsKKytzdGF0aWMgZ2Jvb2xlYW4gICAgIGVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gICAgICAoR0Vycm9yICoqZXJyb3IpOworIHN0YXRpYyBnYm9vbGVhbiAgICAgZW5zdXJlX3NlcnZpY2UgICAgICAgICAgICAgIChnYm9vbGVhbiAgICAgICAgICBzdGFydF9pZl9ub3RfZm91bmQsCisgCQkJCQkJIEdFcnJvciAgICAgICAgICAqKmVycik7Cisgc3RhdGljIGdib29sZWFuICAgICBlbnN1cmVfZGF0YWJhc2UgICAgICAgICAgICAgKEdDb25mRW5naW5lICAgICAgKmNvbmYsCitAQCAtMzgzLDcgKzM4Myw3IEBAIGdjb25mX2VuZ2luZV9kZXRhY2ggKEdDb25mRW5naW5lICpjb25mKQorIH0KKyAKKyBzdGF0aWMgZ2Jvb2xlYW4KKy1lbnN1cmVfZGJ1c19jb25uZWN0aW9uICh2b2lkKQorK2Vuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKEdFcnJvciAqKmVycikKKyB7CisgICBEQnVzRXJyb3IgZXJyb3I7CisgCitAQCAtMzkyLDcgKzM5Miw5IEBAIGVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKHZvaWQpCisgCisgICBpZiAoZGJ1c19kaXNjb25uZWN0ZWQpCisgICAgIHsKKy0gICAgICBnX3dhcm5pbmcgKCJUaGUgY29ubmVjdGlvbiB0byBEQnVzIHdhcyBicm9rZW4uIENhbid0IHJlaW5pdGlhbGl6ZSBpdC4iKTsKKysgICAgICBnX3NldF9lcnJvciAoZXJyLCBHQ09ORl9FUlJPUiwKKysgICAgICAgICAgICAgICAgICAgR0NPTkZfRVJST1JfTk9fU0VSVkVSLAorKyAgICAgICAgICAgICAgICAgICAiVGhlIGNvbm5lY3Rpb24gdG8gREJ1cyB3YXMgYnJva2VuLiBDYW4ndCByZWluaXRpYWxpemUgaXQuIik7CisgICAgICAgcmV0dXJuIEZBTFNFOworICAgICB9CisgCitAQCAtNDAyLDcgKzQwNCwxMCBAQCBlbnN1cmVfZGJ1c19jb25uZWN0aW9uICh2b2lkKQorICAgCisgICBpZiAoIWdsb2JhbF9jb25uKSAKKyAgICAgeworLSAgICAgIGdfd2FybmluZyAoIkNsaWVudCBmYWlsZWQgdG8gY29ubmVjdCB0byB0aGUgRC1CVVMgZGFlbW9uOlxuJXMiLCBlcnJvci5tZXNzYWdlKTsKKysgICAgICBnX3NldF9lcnJvciAoZXJyLCBHQ09ORl9FUlJPUiwKKysgICAgICAgICAgICAgICAgICAgR0NPTkZfRVJST1JfTk9fU0VSVkVSLAorKyAgICAgICAgICAgICAgICAgICAiQ2xpZW50IGZhaWxlZCB0byBjb25uZWN0IHRvIHRoZSBELUJVUyBkYWVtb246XG4lcyIsCisrICAgICAgICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UpOworICAgICAgIAorICAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKKyAgICAgICByZXR1cm4gRkFMU0U7CitAQCAtNDMxLDEzICs0MzYsOCBAQCBlbnN1cmVfc2VydmljZSAoZ2Jvb2xlYW4gIHN0YXJ0X2lmX25vdF9mb3VuZCwKKyAKKyAgIGlmIChnbG9iYWxfY29ubiA9PSBOVUxMKQorICAgICB7CistICAgICAgaWYgKCFlbnN1cmVfZGJ1c19jb25uZWN0aW9uICgpKQorLQl7CistCSAgZ19zZXRfZXJyb3IgKGVyciwgR0NPTkZfRVJST1IsCistCQkgICAgICAgR0NPTkZfRVJST1JfTk9fU0VSVkVSLAorLQkJICAgICAgIF8oIk5vIEQtQlVTIGRhZW1vbiBydW5uaW5nXG4iKSk7CistCSAgcmV0dXJuIEZBTFNFOworLQl9CisrICAgICAgaWYgKCFlbnN1cmVfZGJ1c19jb25uZWN0aW9uIChlcnIpKQorKyAgICAgICAgcmV0dXJuIEZBTFNFOworIAorICAgICAgIGdfYXNzZXJ0IChnbG9iYWxfY29ubiAhPSBOVUxMKTsKKyAgICAgfQorQEAgLTI1MTIsNyArMjUxMiw3IEBAIGdjb25mX3BpbmdfZGFlbW9uICh2b2lkKQorIHsKKyAgIGlmIChnbG9iYWxfY29ubiA9PSBOVUxMKQorICAgeworLSAgICBpZiAoIWVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKCkpCisrICAgIGlmICghZW5zdXJlX2RidXNfY29ubmVjdGlvbiAoTlVMTCkpCisgICAgIHsKKyAgICAgICByZXR1cm4gRkFMU0U7CisgICAgIH0KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmZfMy4yLjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZl8zLjIuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2ZkYWZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmZfMy4yLjYuYmIKQEAgLTAsMCArMSw2MCBAQAorU1VNTUFSWSA9ICJHTk9NRSBjb25maWd1cmF0aW9uIHN5c3RlbSIKK1NFQ1RJT04gPSAieDExL2dub21lIgorTElDRU5TRSA9ICJMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTVjYTgxN2NjYjdkNWI1YjY2MzU1NjkwZTlhYmM2MDUiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgZGJ1cyBkYnVzLWdsaWIgbGlieG1sMiBpbnRsdG9vbC1uYXRpdmUgZ29iamVjdC1pbnRyb3NwZWN0aW9uLXN0dWIiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJnbGliLTIuMC1uYXRpdmUgZGJ1cy1uYXRpdmUgZGJ1cy1nbGliLW5hdGl2ZSBsaWJ4bWwyLW5hdGl2ZSBpbnRsdG9vbC1uYXRpdmUgZ25vbWUtY29tbW9uLW5hdGl2ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24tc3R1Yi1uYXRpdmUiCisKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWRvYyBnZXR0ZXh0CisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9L0dDb25mLyR7QGdub21lX3ZlcmRpcigiJHtQVn0iKX0vR0NvbmYtJHtQVn0udGFyLnh6O25hbWU9YXJjaGl2ZSBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmVfcGx1c19mcm9tX2ludmFsaWRfY2hhcmFjdGVyc19saXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VuYWJsZS1jb25uZWN0LWRidXMucGF0Y2ggXAorIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIyYjE2OTk2ZDBlNGIxMTI4NTZlZTVjNTkxMzBlODIyYyIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjE5MTJiOTE4MDNhYjA5YTVlZWQzNGQzNjRiZjA5ZmUzYTJhOWM5Njc1MWZkZTAzYTRlMGNmYTUxYTA0ZDc4NGMiCisKK1MgPSAiJHtXT1JLRElSfS9HQ29uZi0ke1BWfSIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNoYXJlZCAtLWRpc2FibGUtc3RhdGljIC0tZW5hYmxlLWRlYnVnPXllcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWludHJvc3BlY3Rpb24gLS1kaXNhYmxlLW9yYml0IC0td2l0aC1vcGVubGRhcD1ubyAtLWRpc2FibGUtZ3RrIgorCisjIERpc2FibGUgUG9saWN5S2l0IGJ5IGRlZmF1bHQKK1BBQ0tBR0VDT05GSUcgPz89ICIiCisjIFdlIHJlYWxseSBkb24ndCB3YW50IFBvbGljeUtpdCBmb3IgbmF0aXZlIG9yIHVjbGliYworUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPSAiIgorUEFDS0FHRUNPTkZJR19saWJjLXVjbGliYyA9ICIiCisKK1BBQ0tBR0VDT05GSUdbcG9saWN5a2l0XSA9ICItLWVuYWJsZS1kZWZhdWx0cy1zZXJ2aWNlLC0tZGlzYWJsZS1kZWZhdWx0cy1zZXJ2aWNlLHBvbGtpdCIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyB0aGlzIGRpcmVjdG9yeSBuZWVkIHRvIGJlIGNyZWF0ZWQgdG8gYXZvaWQgYW4gRXJyb3IgMjU2IGF0IGdkbSBsYXVuY2gKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2djb25mL2djb25mLnhtbC5zeXN0ZW0KKworCSMgdGhpcyBzdHVmZiBpcyB1bnVzYWJsZQorCXJtIC1mICR7RH0ke2xpYmRpcn0vR0NvbmYvKi8qLiphCisJcm0gLWYgJHtEfSR7bGliZGlyfS9naW8vKi8qLiphCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9nY29uZnRvb2wtMiBcCisJCUdDT05GX0JBQ0tFTkRfRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9HQ29uZi8yCit9CisKKyMgZGlzYWJsZSBkYnVzLXgxMSB3aGVuIHgxMSBpc24ndCBpbiBESVNUUk9fRkVBVFVSRVMKK1JERVBFTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdkYnVzLXgxMScsICcnLCBkKX0iCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L0dDb25mLyogXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS9naW8vKi8qLnNvIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3BvbGtpdCogXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzLyouc2VydmljZSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzLyouc2VydmljZSBcCisgICAgICAgICAgICAgICAiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8qLyovLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L3NnbWwvZ2NvbmYvZ2NvbmYtMS4wLmR0ZCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1jb21tb25fMy4xNC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtY29tbW9uXzMuMTQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGI3MDMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtY29tbW9uXzMuMTQuMC5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIkNvbW1vbiBtYWNyb3MgZm9yIGJ1aWxkaW5nIEdOT01FIGFwcGxpY2F0aW9ucyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ25vbWUub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorCitTRUNUSU9OID0gIngxMS9nbm9tZSIKK2luaGVyaXQgZ25vbWViYXNlIGFsbGFyY2gKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYmE1OGM2MWQwZDgxYjdjM2ZmODQ1MmM2MjA1MTNhOWQiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI0YzAwMjQyZjc4MWJiNDQxMjg5ZjQ5ZGQ4MGVkMWQ4OTVkODRkZTBjOTRiZmMyYzY4MThhMTA0YzllMzkyNjJjIgorCitFWFRSQV9BVVRPUkVDT05GID0gIiIKK0RFUEVORFMgPSAiIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hY2xvY2FsIgorRklMRVNfJHtQTn0tZGV2ID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTg3NTA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzLmluYwpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIkEgY29sbGVjdGlvbiBvZiBkb2N1bWVudGF0aW9uIHV0aWxpdGllcyBmb3IgdGhlIEdub21lIHByb2plY3QiCitERVNDUklQVElPTiA9ICJUaGUgR05PTUUgRG9jdW1lbnRhdGlvbiBCdWlsZCBVdGlsaXRpZXMgKGdub21lLWRvYy0gXAordXRpbHMpIHdlcmUgY3JlYXRlZCB0byBtYWtlIGl0IGVhc2llciBmb3IgYXBwbGljYXRpb24gZGV2ZWxvcGVycyB0byBcCitpbmNsdWRlIGFuZCBjcmVhdGUgZG9jdW1lbnRhdGlvbiBpbiB0aGVpciByZWxlYXNlcy4gVGhleSBpbmNsdWRlIHRoZSBcCit4bWwycG8gdG9vbCB3aGljaCBtYWtlcyBpdCBlYXNpZXIgdG8gdHJhbnNsYXRlIGFuZCBrZWVwIHVwIHRvIGRhdGUgXAordHJhbnNsYXRpb25zIG9mIGRvY3VtZW50YXRpb24uIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorREVQRU5EUyA9ICJsaWJ4bWwyIGxpYnhzbHQgbGlieHNsdC1uYXRpdmUgZ25vbWUtZG9jLXV0aWxzLW5hdGl2ZSBnbGliLTIuMCIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImxpYnhtbDItbmF0aXZlIGxpYnhzbHQtbmF0aXZlIGludGx0b29sLW5hdGl2ZSBnbGliLTIuMC1uYXRpdmUiCisKK2luaGVyaXQgZ25vbWViYXNlIGdldHRleHQgcHl0aG9uLWRpciBweXRob25uYXRpdmUgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitDTEVBTkJST0tFTiA9ICIxIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1zY3JvbGxrZWVwZXIiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW1rZGlyIC1wICAke0R9JHtkYXRhZGlyfS94bWwvZ25vbWUveHNsdC8KKwljcCAtcFByICR7U30veHNsdC8qICR7RH0ke2RhdGFkaXJ9L3htbC9nbm9tZS94c2x0LworCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwlzZWQgLWkgLWUgJ3N8XiMhLiovdXNyL2Jpbi9lbnYgcHl0aG9ufCMhIC91c3IvYmluL2VudiBuYXRpdmVweXRob258JyAke0R9JHtiaW5kaXJ9L3htbDJwbworfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS94bWwqICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyoiCisKK1JERVBFTkRTXyR7UE59ID0gImJhc2giCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy9zeXNyb290ZWQtcGtnLWNvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy9zeXNyb290ZWQtcGtnLWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTZkNjk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3N5c3Jvb3RlZC1wa2ctY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0luIGNyb3NzIGVudmlyb25tZW50IHdlIGhhdmUgdG8gcHJlcGVuZCB0aGUgc3lzcm9vdCB0byB0aGUgcGF0aCBmb3VuZCBieQorcGtnY29uZmlnIHNpbmNlIHRoZSBwYXRoIHJldHVybmVkIGZyb20gcGtnY29uZmlnIGRvZXMgbm90IGhhdmUgc3lzcm9vdCBwcmVmaXhlZAoraXQgZW5kcyB1cCB1c2luZyB0aGUgZmlsZXMgZnJvbSBob3N0IHN5c3RlbS4gTm93IHVzdWFsbHkgcGVvcGxlIGhhdmUgZ25vbWUgaW5zdGFsbGVkCitzbyB0aGUgYnVpbGQgc3VjY2VlZHMgYnV0IGlmIHlvdSBkb250IGhhdmUgZ25vbWUgaW5zdGFsbGVkIG9uIGJ1aWxkIGhvc3QgdGhlbgoraXQgd29udCBmaW5kIHRoZSBmaWxlcyBvbiBob3N0IHN5c3RlbSBhbmQgcGFja2FnZXMgdXNpbmcgZ25vbWUtZG9jLXV0aWxzIHdvbnQKK2NvbXBpbGUuCisKK1RoaXMgc2hvdWxkIHdvcmsgb2sgd2l0aCBub24gc3lzcm9vdGVkIGJ1aWxkcyB0b28gc2luY2UgaW4gdGhvc2UgY2FzZXMgUEtHX0NPTkZJR19TWVNST09UX0RJUgord2lsbCBiZSBlbXB0eQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK0luZGV4OiBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC90b29scy9nbm9tZS1kb2MtdXRpbHMubWFrZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdub21lLWRvYy11dGlscy0wLjIwLjEwLm9yaWcvdG9vbHMvZ25vbWUtZG9jLXV0aWxzLm1ha2UKKysrKyBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC90b29scy9nbm9tZS1kb2MtdXRpbHMubWFrZQorQEAgLTEzMywxMSArMTMzLDExIEBAIF9ET0NfQUJTX1NSQ0RJUiA9IEBhYnNfc3JjZGlyQAorIF94bWwycG8gPz0gYHdoaWNoIHhtbDJwb2AKKyBfeG1sMnBvX21vZGUgPSAkKGlmICQoRE9DX0lEKSxtYWxsYXJkLGRvY2Jvb2spCisgCistX2RiMmh0bWwgPz0gYCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSBkYjJodG1sIGdub21lLWRvYy11dGlsc2AKKy1fZGIyb21mICA/PSBgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIGRiMm9tZiBnbm9tZS1kb2MtdXRpbHNgCistX2NodW5rcyAgPz0gYCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzYC9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvY2h1bmtzLnhzbAorLV9jcmVkaXRzID89IGAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgeG1sZGlyIGdub21lLWRvYy11dGlsc2AvZ25vbWUveHNsdC9kb2Nib29rL3V0aWxzL2NyZWRpdHMueHNsCistX2lkcyA/PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzKS9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvaWRzLnhzbAorK19kYjJodG1sID89ICR7UEtHX0NPTkZJR19TWVNST09UX0RJUn1gJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIGRiMmh0bWwgZ25vbWUtZG9jLXV0aWxzYAorK19kYjJvbWYgID89ICR7UEtHX0NPTkZJR19TWVNST09UX0RJUn1gJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIGRiMm9tZiBnbm9tZS1kb2MtdXRpbHNgCisrX2NodW5rcyAgPz0gJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfWAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgeG1sZGlyIGdub21lLWRvYy11dGlsc2AvZ25vbWUveHNsdC9kb2Nib29rL3V0aWxzL2NodW5rcy54c2wKKytfY3JlZGl0cyA/PSAke1BLR19DT05GSUdfU1lTUk9PVF9ESVJ9YCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzYC9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvY3JlZGl0cy54c2wKKytfaWRzID89ICR7UEtHX0NPTkZJR19TWVNST09UX0RJUn0kKHNoZWxsICQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzKS9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvaWRzLnhzbAorIAorIGlmIEVOQUJMRV9TSworIF9FTkFCTEVfU0sgPSB0cnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMvdXNlLXVzci1iaW4tZW52LWZvci1weXRob24taW4teG1sMnBvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3VzZS11c3ItYmluLWVudi1mb3ItcHl0aG9uLWluLXhtbDJwby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTE5NmMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3VzZS11c3ItYmluLWVudi1mb3ItcHl0aG9uLWluLXhtbDJwby5wYXRjaApAQCAtMCwwICsxLDMwIEBACitXZSBjYW4ndCB1c2UgIyEvZnVsbC9wYXRoL3RvL3B5dGhvbiAtdSBhcyB0aGlzIGNhbiBiZSBsb25nZXIgdGhhbiBzaGViYW5nCithbGxvd3MgZm9yLiAgSW4gb3JkZXIgdG8gYmUgYXBwcm9wcmFpdGUgZm9yIHVwc3RyZWFtIG1vcmUgd29yayB3b3VsZCBiZQorbmVlZGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBtYWluIHhtbDJwbyBjb2RlIGRvZXNuJ3QgcmVseSBvbiBweXRob24KK2JlaW5nIGludm9rZWQgd2l0aCAtdSAoZm9yY2Ugc3RkaW4vb3V0L2VyciB0byBiZSB1c2VkIHJhdykuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbV291bGQgYnJlYWsgYmVoYXZpb3Igb24gV2luZG93c10KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworSW5kZXg6IGdub21lLWRvYy11dGlscy0wLjIwLjEwL3htbDJwby94bWwycG8vTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC5vcmlnL3htbDJwby94bWwycG8vTWFrZWZpbGUuYW0KKysrKyBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC94bWwycG8veG1sMnBvL01ha2VmaWxlLmFtCitAQCAtNyw3ICs3LDYgQEAgQ0xFQU5GSUxFUyA9IHhtbDJwbworIAorIHhtbDJwbzogeG1sMnBvLnB5LmluCisgCSQoQU1fVl9HRU4pc2VkIC1lICJzL15WRVJTSU9OID0uKi9WRVJTSU9OID0gXCJAVkVSU0lPTkBcIi8iIFwKKy0JICAgIC1lICJzK14jIS4qcHl0aG9uLiorIyEkKFBZVEhPTikrIiBcCisgCSAgPCAkKHNyY2RpcikveG1sMnBvLnB5LmluID4geG1sMnBvCisgCSQoQU1fVl9hdCljaG1vZCAreCB4bWwycG8KKyAKK0luZGV4OiBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC94bWwycG8veG1sMnBvL3htbDJwby5weS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdub21lLWRvYy11dGlscy0wLjIwLjEwLm9yaWcveG1sMnBvL3htbDJwby94bWwycG8ucHkuaW4KKysrKyBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC94bWwycG8veG1sMnBvL3htbDJwby5weS5pbgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24gLXUKKysjIS91c3IvYmluL2VudiBweXRob24KKyAjIC0qLSBlbmNvZGluZzogdXRmLTggLSotCisgIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUsIDIwMDYgRGFuaWxvIMWgZWdhbiA8ZGFuaWxvQGdub21lLm9yZz4uCisgIyBDb3B5cmlnaHQgKGMpIDIwMDkgQ2xhdWRlIFBhcm96IDxjbGF1ZGVAMnhsaWJyZS5uZXQ+LgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3hzbHRwcm9jX25vbmV0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3hzbHRwcm9jX25vbmV0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNDY0OTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMveHNsdHByb2Nfbm9uZXQucGF0Y2gKQEAgLTAsMCArMSw5NSBAQAorVGhpcyBhZGRzIHRoZSAtbm9uZXQgb3B0aW9uIHRvIHhzbHRwcm9jIGludm9jYXRpb25zLCB3aGljaCBmaXhlcworY29tcGlsZSBlcnJvcnMgd2hlbiBidWlsZGluZyB0aGUgZ25vbWUtZG9jLXV0aWxzIGRvY3MuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAvZG9jL3hzbHQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC5vcmlnL2RvYy94c2x0L01ha2VmaWxlLmFtCisrKysgZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAvZG9jL3hzbHQvTWFrZWZpbGUuYW0KK0BAIC0yMSwxNCArMjEsMTQgQEAgYWxsOiAkKHhzbGRvY19kb2NzKSAkKHhzbGRvY194bWxzKQorIAorICQoeHNsZG9jX2RvY3MpOiAkKHhzbGRvY194c2xzKSB4c2xkb2MuYXdrIHhzbGRvYy1maWxsLnhzbAorIAkkKEFNX1ZfR0VOKSQoR0RVX0FXSykgLWYgIiQoc3JjZGlyKS94c2xkb2MuYXdrIiAiJChmaWx0ZXIgJS8kKGJhc2VuYW1lICQobm90ZGlyICRAKSkueHNsLCQoeHNsZG9jX3hzbHMpKSIgXAorLQl8IHhzbHRwcm9jIC1vICIkQCIgXAorKwl8IHhzbHRwcm9jIC1ub25ldCAtbyAiJEAiIFwKKyAJLS1zdHJpbmdwYXJhbSBiYXNlbmFtZSAiJChiYXNlbmFtZSAkKG5vdGRpciAkQCkpIiBcCisgCS0tc3RyaW5ncGFyYW0geHNsX2ZpbGUgIiQoZmlsdGVyICUvJChiYXNlbmFtZSAkKG5vdGRpciAkQCkpLnhzbCwkKHhzbGRvY194c2xzKSkiIFwKKyAJIiQoc3JjZGlyKS94c2xkb2MtZmlsbC54c2wiIC0KKyAKKyAkKHhzbGRvY194bWxzKTogeHNsZG9jLWRvY2Jvb2sueHNsCisgJCh4c2xkb2NfeG1scyk6IEMvJS54bWwgOiBDLyUueHNsZG9jCistCSQoQU1fVl9HRU4peHNsdHByb2MgLW8gIiRAIiBcCisrCSQoQU1fVl9HRU4peHNsdHByb2MgLW5vbmV0IC1vICIkQCIgXAorIAktLXN0cmluZ3BhcmFtIGJhc2VuYW1lICIkKGJhc2VuYW1lICQobm90ZGlyICRAKSkiIFwKKyAJLS1zdHJpbmdwYXJhbSB4c2xfZmlsZSAiJChmaWx0ZXIgJS8kKGJhc2VuYW1lICQobm90ZGlyICRAKSkueHNsLCQoeHNsZG9jX3hzbHMpKSIgXAorIAkiJChzcmNkaXIpL3hzbGRvYy1kb2Nib29rLnhzbCIgIiQ8IgorQEAgLTYyLDcgKzYyLDcgQEAgZ25vbWUtZG9jLXhzbHQtY2hlY2staW5jbHVkZXM6CisgZ25vbWUtZG9jLXhzbHQtY2hlY2steHNsZG9jOiAkKHhzbGRvY19kb2NzKQorIAlAZWNobyAiUnVubmluZyB4c2xkb2MgY2hlY2tzIjsKKyAJQChlY2hvICI8eHNsZG9jPiI7IGNhdCAkKHhzbGRvY19kb2NzKTsgZWNobyAiPC94c2xkb2M+IikgXAorLQl8IHhzbHRwcm9jICIkKHNyY2RpcikveHNsZG9jLWNoZWNrLnhzbCIgLSAxPiAvZGV2L251bGwKKysJfCB4c2x0cHJvYyAtbm9uZXQgIiQoc3JjZGlyKS94c2xkb2MtY2hlY2sueHNsIiAtIDE+IC9kZXYvbnVsbAorIAorIC5QSE9OWTogY2xlYW4teHNsZG9jCisgY2xlYW4tbG9jYWw6IGNsZWFuX3hzbGRvYworSW5kZXg6IGdub21lLWRvYy11dGlscy0wLjIwLjEwL3Rvb2xzL2dub21lLWRvYy11dGlscy5tYWtlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAub3JpZy90b29scy9nbm9tZS1kb2MtdXRpbHMubWFrZQorKysrIGdub21lLWRvYy11dGlscy0wLjIwLjEwL3Rvb2xzL2dub21lLWRvYy11dGlscy5tYWtlCitAQCAtMzcsNyArMzcsNyBAQCAkKERPQ19IX0ZJTEUpOiAkKERPQ19IX0RPQ1MpOworIAlsaXN0PSckKERPQ19IX0RPQ1MpJzsgZm9yIGRvYyBpbiAkJGxpc3Q7IGRvIFwKKyAJICB4bWxwYXRoPSJgZWNobyAkJGRvYyB8IHNlZCAtZSAncy9eXCguKlwvXCkuKi9cMS8nIC1lICcvXC8vIXMvLiovLydgOiQoc3JjZGlyKS9gZWNobyAkJGRvYyB8IHNlZCAtZSAncy9eXCguKlwvXCkuKi9cMS8nIC1lICcvXC8vIXMvLiovLydgIjsgXAorIAkgIGlmICEgdGVzdCAtZiAiJCRkb2MiOyB0aGVuIGRvYz0iJChzcmNkaXIpLyQkZG9jIjsgZmk7IFwKKy0JICB4c2x0cHJvYyAtLXBhdGggIiQkeG1scGF0aCIgJChfY3JlZGl0cykgJCRkb2M7IFwKKysJICB4c2x0cHJvYyAtbm9uZXQgLS1wYXRoICIkJHhtbHBhdGgiICQoX2NyZWRpdHMpICQkZG9jOyBcCisgCWRvbmUgfCBzb3J0IHwgdW5pcSBcCisgCSAgfCBhd2sgJ0JFR0lOe3M9IiJ9e249c3BsaXQoJCQwLHcsIjwiKTtpZihzIT0iIiYmcyE9c3Vic3RyKHdbMV0sMSxsZW5ndGgod1sxXSktMSkpe3ByaW50IHN9O2lmKG4+MSl7cHJpbnQgJCQwO3M9IiJ9ZWxzZXtzPSQkMH19O0VORHtpZihzIT0iIil7cHJpbnQgc319JyBcCisgCSAgfCBzZWQgLWUgJ3MvXFwvXFxcXC8nIC1lICdzLyIvXFwiLycgLWUgJ3MvXCguKlwpL1x0IlwxIiwvJyA+PiAkQC50bXAKK0BAIC01MCw3ICs1MCw3IEBAICQoRE9DX0hfRklMRSk6ICQoRE9DX0hfRE9DUyk7CisgCSAgZG9jaWQ9YGVjaG8gIiQkZG9jIiB8IHNlZCAtZSAncy8uKlwvXChbXi9dKlwpXC54bWwvXDEvJyBcCisgCSAgICB8IHNlZCAtZSAncy9bXmEtekEtWl9dL18vZycgfCB0ciAnYS16JyAnQS1aJ2A7IFwKKyAJICBlY2hvICQkeG1scGF0aDsgXAorLQkgIGlkcz1geHNsdHByb2MgLS14aW5jbHVkZSAtLXBhdGggIiQkeG1scGF0aCIgJChfaWRzKSAkJGRvY2A7IFwKKysJICBpZHM9YHhzbHRwcm9jIC1ub25ldCAtLXhpbmNsdWRlIC0tcGF0aCAiJCR4bWxwYXRoIiAkKF9pZHMpICQkZG9jYDsgXAorIAkgIGZvciBpZCBpbiAkJGlkczsgZG8gXAorIAkgICAgZWNobyAnI2RlZmluZSBIRUxQXydgZWNobyAkJGRvY2lkYCdfJ2BlY2hvICQkaWQgXAorIAkgICAgICB8IHNlZCAtZSAncy9bXmEtekEtWl9dL18vZycgfCB0ciAnYS16JyAnQS1aJ2AnICInJCRpZCciJyA+PiAkQC50bXA7IFwKK0BAIC0xOTcsNyArMTk3LDcgQEAgJChfRE9DX09NRl9EQikgOiAkKERPQ19NT0RVTEUpLSUub21mIDogJQorIAkgIGVjaG8gIlRoZSBmaWxlICckKF9za2NvbnRlbnRzbGlzdCknIGRvZXMgbm90IGV4aXN0LiIgPiYyOwkJXAorIAkgIGVjaG8gIlBsZWFzZSBjaGVjayB5b3VyIFNjcm9sbEtlZXBlciBpbnN0YWxsYXRpb24uIiA+JjI7CQlcCisgCSAgZXhpdCAxOyB9CistCSQoR0RVX1ZfREIyT01GKXhzbHRwcm9jIC1vICRAICQoY2FsbCBkYjJvbWZfYXJncywkQCwkPCwnZG9jYm9vaycpIHx8IHsgcm0gLWYgIiRAIjsgZXhpdCAxOyB9CisrCSQoR0RVX1ZfREIyT01GKXhzbHRwcm9jIC1ub25ldCAtbyAkQCAkKGNhbGwgZGIyb21mX2FyZ3MsJEAsJDwsJ2RvY2Jvb2snKSB8fCB7IHJtIC1mICIkQCI7IGV4aXQgMTsgfQorIAorICMjIEAgX0RPQ19PTUZfSFRNTAorICMjIFRoZSBPTUYgZmlsZXMgZm9yIEhUTUwgb3V0cHV0CitAQCAtMjEyLDcgKzIxMiw3IEBAIGlmIEVOQUJMRV9TSworIAkgIGVjaG8gIlBsZWFzZSBjaGVjayB5b3VyIFNjcm9sbEtlZXBlciBpbnN0YWxsYXRpb24uIiA+JjI7CQlcCisgCSAgZXhpdCAxOyB9CisgZW5kaWYKKy0JJChHRFVfVl9EQjJPTUYpeHNsdHByb2MgLW8gJEAgJChjYWxsIGRiMm9tZl9hcmdzLCRALCQ8LCd4aHRtbCcpIHx8IHsgcm0gLWYgIiRAIjsgZXhpdCAxOyB9CisrCSQoR0RVX1ZfREIyT01GKXhzbHRwcm9jIC1ub25ldCAtbyAkQCAkKGNhbGwgZGIyb21mX2FyZ3MsJEAsJDwsJ3hodG1sJykgfHwgeyBybSAtZiAiJEAiOyBleGl0IDE7IH0KKyAKKyAjIyBAIF9ET0NfT01GX0FMTAorICMjIEFsbCBPTUYgb3V0cHV0IGZpbGVzIHRvIGJlIGJ1aWx0CitAQCAtMjY3LDcgKzI2Nyw3IEBAIF9ET0NfQ19GSUdVUkVTID0gJChpZiAkKERPQ19GSUdVUkVTKSwKKyAjIyBBbGwgSFRNTCBkb2N1bWVudGF0aW9uIGluIHRoZSBDIGxvY2FsZQorICMgRklYTUU6IHByb2JhYmx5IGhhdmUgdG8gc2hlbGwgZXNjYXBlIHRvIGRldGVybWluZSB0aGUgZmlsZSBuYW1lcworIF9ET0NfQ19IVE1MID0gJChmb3JlYWNoIGYsCQkJCQkJXAorLQkkKHNoZWxsIHhzbHRwcm9jIC0teGluY2x1ZGUgCQkJCQlcCisrCSQoc2hlbGwgeHNsdHByb2MgLW5vbmV0IC0teGluY2x1ZGUgCQkJCQlcCisgCSAgLS1zdHJpbmdwYXJhbSBkYi5jaHVuay5iYXNlbmFtZSAiJChET0NfTU9EVUxFKSIJCVwKKyAJICAkKF9jaHVua3MpICJDLyQoRE9DX01PRFVMRSkueG1sIiksCQkJCVwKKyAJQy8kKGYpLnhodG1sKQorQEAgLTM5Myw3ICszOTMsNyBAQCBfRE9DX0hUTUxfQUxMID0gJChpZiAkKGZpbHRlciBodG1sIEhUTUwsCisgX0RPQ19IVE1MX1RPUFMgPSAkKGZvcmVhY2ggbGMsQyAkKF9ET0NfUkVBTF9MSU5HVUFTKSwkKGxjKS8kKERPQ19NT0RVTEUpLnhodG1sKQorIAorICQoX0RPQ19IVE1MX1RPUFMpOiAkKF9ET0NfQ19ET0NTKSAkKF9ET0NfTENfRE9DUykKKy0JJChHRFVfVl9EQjJIVE0peHNsdHByb2MgLW8gJEAgLS14aW5jbHVkZSAtLXBhcmFtIGRiLmNodW5rLmNodW5rX3RvcCAiZmFsc2UoKSIgLS1zdHJpbmdwYXJhbSBkYi5jaHVuay5iYXNlbmFtZSAiJChET0NfTU9EVUxFKSIgLS1zdHJpbmdwYXJhbSBkYi5jaHVuay5leHRlbnNpb24gIi54aHRtbCIgJChfZGIyaHRtbCkgJChwYXRzdWJzdCAlLnhodG1sLCUueG1sLCRAKQorKwkkKEdEVV9WX0RCMkhUTSl4c2x0cHJvYyAtbm9uZXQgLW8gJEAgLS14aW5jbHVkZSAtLXBhcmFtIGRiLmNodW5rLmNodW5rX3RvcCAiZmFsc2UoKSIgLS1zdHJpbmdwYXJhbSBkYi5jaHVuay5iYXNlbmFtZSAiJChET0NfTU9EVUxFKSIgLS1zdHJpbmdwYXJhbSBkYi5jaHVuay5leHRlbnNpb24gIi54aHRtbCIgJChfZGIyaHRtbCkgJChwYXRzdWJzdCAlLnhodG1sLCUueG1sLCRAKQorIAorIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHNfMC4yMC4xMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlsc18wLjIwLjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Y2MwMDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHNfMC4yMC4xMC5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIGdub21lLWRvYy11dGlscy5pbmMKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuR1BMO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSBcCisJCSAgICBmaWxlOi8vQ09QWUlORy5MR1BMO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyIKKworU1JDX1VSSSArPSAiZmlsZTovL3hzbHRwcm9jX25vbmV0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly91c2UtdXNyLWJpbi1lbnYtZm9yLXB5dGhvbi1pbi14bWwycG8ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3N5c3Jvb3RlZC1wa2ctY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzYzY0YWQ3YmFjZDYxN2IwNDk5OWU0YTE2OGFmYWFjNSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImNiMDYzOWZmYTk1NTBiNmRkZjNiNjJmM2IxYWRkOTJmYjkyYWI0NjkwZDM1MWYyMzUzY2ZmZTY2OGJlOGM0YTYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1taW1lLWRhdGEvcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtbWltZS1kYXRhL3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTAzNDI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtbWltZS1kYXRhL3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBnbm9tZS1taW1lLWRhdGEtMi4xOC4wL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ25vbWUtbWltZS1kYXRhLTIuMTguMC5vcmlnL01ha2VmaWxlLmFtCTIwMDktMDYtMTEgMTc6Mjc6NDguMDAwMDAwMDAwICswMTAwCisrKysgZ25vbWUtbWltZS1kYXRhLTIuMTguMC9NYWtlZmlsZS5hbQkyMDA5LTA2LTExIDE3OjI3OjU5LjAwMDAwMDAwMCArMDEwMAorQEAgLTEsNiArMSw2IEBACisgU1VCRElSUyA9IG1hbiBwbworIAorLXBrZ2NvbmZpZ2RpciA9ICQoZGF0YWRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworIHBrZ2NvbmZpZ19EQVRBID0gZ25vbWUtbWltZS1kYXRhLTIuMC5wYworIAorIE5VTEw9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1taW1lLWRhdGFfMi4xOC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtbWltZS1kYXRhXzIuMTguMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzFlYjU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtbWltZS1kYXRhXzIuMTguMC5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIkJhc2UgTUlNRSBhbmQgQXBwbGljYXRpb24gZGF0YWJhc2UgZm9yIEdOT01FIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbm9tZS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jaGVjay1taW1lLnBsO2VuZGxpbmU9MjY7bWQ1PWE5NWI2M2M5MmMzM2Q0Y2ExYWY2MWEzMTU4ODhmNDUwIgorCitpbmhlcml0IGdub21lYmFzZSBtaW1lCitQUiA9ICJyNCIKKworU1JDX1VSSSArPSAiZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNTQxODU4MTg4ZjgwMDkwZDEyYTMzYjVhN2MzNGQ0MmMiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIzNzE5NmI1YjM3MDg1YmJjZDQ1YzMzOGMzNmUyNjg5OGZlMzVkZDU5NzUyOTVmNjlmNDgwMjhiMWU4NDM2ZmQ3IgorR05PTUVfQ09NUFJFU1NfVFlQRT0iYnoyIgorCitERVBFTkRTICs9ICJzaGFyZWQtbWltZS1pbmZvIGludGx0b29sLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gInNoYXJlZC1taW1lLWluZm8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9saWJhcnQtbGdwbC9saWJhcnRfbGdwbC0yLjMuMjEtY3Jvc3Njb21waWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvbGliYXJ0LWxncGwvbGliYXJ0X2xncGwtMi4zLjIxLWNyb3NzY29tcGlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjYxZjU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvbGliYXJ0LWxncGwvbGliYXJ0X2xncGwtMi4zLjIxLWNyb3NzY29tcGlsZS5wYXRjaApAQCAtMCwwICsxLDg0IEBACitUYWtlbiBmcm9tIHBvcnRhZ2UKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitGcm9tIGUxNDQzYzk0NWE0Y2Y2NzA5NmQ4YzI3NzIxYWFkZDczNjgzODJiM2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBHaWxsZXMgRGFydGlndWVsb25ndWUgPGV2YUBnZW50b28ub3JnPgorRGF0ZTogVHVlLCA2IEFwciAyMDEwIDE1OjIyOjI1ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBnZW50b286IHVzZSBJU08gdHlwZXMgZm9yIGZpeGVkIHR5cGUgc2l6ZQorCistLS0KKyBNYWtlZmlsZS5hbSAgfCAgIDExICsrLS0tLS0tLS0tCisgYXJ0X2NvbmZpZy5oIHwgICAgNSArKysrKworIGNvbmZpZ3VyZS5pbiB8ICAgMTAgLS0tLS0tLS0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYXJ0X2NvbmZpZy5oCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCA5NTk1MmRhLi42YWEyZmUzIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMiwxMyArMiw2IEBAIGNoZWNrX1BST0dSQU1TID0gdGVzdGFydCB0ZXN0dXRhCisgCisgYmluX1NDUklQVFMgPSBcCisgCWxpYmFydDItY29uZmlnCistCQorLW5vaW5zdF9TQ1JJUFRTID0gZ2VuX2FydF9jb25maWcuc2gKKy0KKy1CVUlMVF9TT1VSQ0VTID0gYXJ0X2NvbmZpZy5oCistCistYXJ0X2NvbmZpZy5oOgorLQkuL2dlbl9hcnRfY29uZmlnLnNoID4gYXJ0X2NvbmZpZy5oCisgCisgRVhUUkFfRElTVCA9IAkJCVwKKyAJbGliYXJ0LmRlZgkJXAorQEAgLTE3Myw1ICsxNjYsNSBAQCBpbnN0YWxsLWRhdGEtbG9jYWw6IGluc3RhbGwtbXMtbGliIGluc3RhbGwtbGlidG9vbC1pbXBvcnQtbGliCisgCisgdW5pbnN0YWxsLWxvY2FsOiB1bmluc3RhbGwtbXMtbGliIHVuaW5zdGFsbC1saWJ0b29sLWltcG9ydC1saWIKKyAKKy1DTEVBTkZJTEVTID0gJChCVUlMVF9TT1VSQ0VTKSAkKGJpbl9TQ1JJUFRTKQorLURJU1RDTEVBTkZJTEVTID0gJChCVUlMVF9TT1VSQ0VTKSAkKGJpbl9TQ1JJUFRTKQorK0NMRUFORklMRVMgPSAkKGJpbl9TQ1JJUFRTKQorK0RJU1RDTEVBTkZJTEVTID0gJChiaW5fU0NSSVBUUykKK2RpZmYgLS1naXQgYS9hcnRfY29uZmlnLmggYi9hcnRfY29uZmlnLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41OTg1ZjFmCistLS0gYS9hcnRfY29uZmlnLmgKKysrKyBiL2FydF9jb25maWcuaAorQEAgLTAsMCArMSw1IEBACisrI2luY2x1ZGUgPHN0ZGludC5oPgorKworK3R5cGVkZWYgdWludDhfdCBhcnRfdTg7CisrdHlwZWRlZiB1aW50MTZfdCBhcnRfdTE2OworK3R5cGVkZWYgdWludDMyX3QgYXJ0X3UzMjsKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IGU0ODA0ZjcuLmRkY2FjNGYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTkyLDE1ICs5Miw2IEBAIEFDX0ZVTkNfQUxMT0NBCisgCisgQUNfQ19CSUdFTkRJQU4KKyAKKy1BQ19DSEVDS19TSVpFT0YoY2hhcikKKy1BQ19TVUJTVChBUlRfU0laRU9GX0NIQVIsICRhY19jdl9zaXplb2ZfY2hhcikKKy1BQ19DSEVDS19TSVpFT0Yoc2hvcnQpCistQUNfU1VCU1QoQVJUX1NJWkVPRl9TSE9SVCwgJGFjX2N2X3NpemVvZl9zaG9ydCkKKy1BQ19DSEVDS19TSVpFT0YoaW50KQorLUFDX1NVQlNUKEFSVF9TSVpFT0ZfSU5ULCAkYWNfY3Zfc2l6ZW9mX2ludCkKKy1BQ19DSEVDS19TSVpFT0YobG9uZykKKy1BQ19TVUJTVChBUlRfU0laRU9GX0xPTkcsICRhY19jdl9zaXplb2ZfbG9uZykKKy0KKyBBQ19DT05GSUdfRklMRVMoWworIGxpYmFydC1mZWF0dXJlcy5oCisgTWFrZWZpbGUKK0BAIC0xMDksNiArMTAwLDUgQEAgbGliYXJ0LTIuMC11bmluc3RhbGxlZC5wYworIGxpYmFydC16aXBdKQorIAorIEFDX0NPTkZJR19GSUxFUyhbbGliYXJ0LWNvbmZpZ10sW2NobW9kICt4IGxpYmFydC1jb25maWddKQorLUFDX0NPTkZJR19GSUxFUyhbZ2VuX2FydF9jb25maWcuc2hdLFtjaG1vZCAreCBnZW5fYXJ0X2NvbmZpZy5zaF0pCisgCisgQUNfT1VUUFVUCistLSAKKzEuNy4wLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvbGliYXJ0LWxncGxfMi4zLjIxLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvbGliYXJ0LWxncGxfMi4zLjIxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NTgxYjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9saWJhcnQtbGdwbF8yLjMuMjEuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IG9mIGZ1bmN0aW9ucyBmb3IgMkQgZ3JhcGhpY3MiCitTRUNUSU9OID0gIngxMS9nbm9tZSIKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTciCitQUiA9ICJyMiIKKworIyBjYW4ndCB1c2UgZ25vbWUub2VjbGFzcyBkdWUgdG8gXyBpbiBmaWxlbmFtZQorU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vbGliYXJ0X2xncGwvMi4zL2xpYmFydF9sZ3BsLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbGliYXJ0X2xncGwtMi4zLjIxLWNyb3NzY29tcGlsZS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDg1NTlmZjNjNjdmZDk1ZDU3YjBjNWU5MWE2YjQzMDIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmRjMTFlNzRjMTBmYzlmZmU0MTg4NTM3ZTJiMzcwYzBhYmFjY2E3ZDg5MDIxZDRkMzAzYWZkZjdmZDc0NzZmYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0RFUEVORFMgPSAiIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vKi5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vbGliYXJ0Mi1jb25maWciCisKK1MgPSAiJHtXT1JLRElSfS9saWJhcnRfbGdwbC0ke1BWfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hc18zLjE2LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXNfMy4xNi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZjJjNzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXNfMy4xNi4xLmJiCkBAIC0wLDAgKzEsMTMgQEAKK1NVTU1BUlkgPSAiR05PTUUgZGVza3RvcC13aWRlIEdTZXR0aW5ncyBzY2hlbWFzIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpdmUuZ25vbWUub3JnL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgorCitERVBFTkRTID0gImdsaWItMi4wIGludGx0b29sLW5hdGl2ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24tc3R1Yi1uYXRpdmUiCisKK2luaGVyaXQgZ25vbWViYXNlIGdzZXR0aW5ncyBnZXR0ZXh0CisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImJhZWJiY2YzYzIwNTkxZjk4ODc2ZTQyZmIwYTNmZDM1IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNzRmZTlmZGFkNTEwYzhhNjY2NmZlYmVjZWI3ZWJhZmM1ODFlZjk5MGIzYWZjYzhjMWU4YjVkOTBiMjRiMzQ2MSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTI3M2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysuaW5jCkBAIC0wLDAgKzEsOTcgQEAKK1NVTU1BUlkgPSAiTXVsdGktcGxhdGZvcm0gdG9vbGtpdCBmb3IgY3JlYXRpbmcgR1VJcyIKK0RFU0NSSVBUSU9OID0gIkdUSysgaXMgYSBtdWx0aS1wbGF0Zm9ybSB0b29sa2l0IGZvciBjcmVhdGluZyBncmFwaGljYWwgdXNlciBpbnRlcmZhY2VzLiBPZmZlcmluZyBhIGNvbXBsZXRlIFwKK3NldCBvZiB3aWRnZXRzLCBHVEsrIGlzIHN1aXRhYmxlIGZvciBwcm9qZWN0cyByYW5naW5nIGZyb20gc21hbGwgb25lLW9mZiBwcm9qZWN0cyB0byBjb21wbGV0ZSBhcHBsaWNhdGlvbiBzdWl0ZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ndGsub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyICYgTEdQTHYyKyAmIExHUEx2Mi4xKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTciCisKK1NFQ1RJT04gPSAibGlicyIKKworaW5oZXJpdCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKK0FOWV9PRl9ESVNUUk9fRkVBVFVSRVMgPSAiZGlyZWN0ZmIgeDExIgorCitYMTFERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnhleHQgbGlieGN1cnNvciBsaWJ4cmFuZHIgbGlieGRhbWFnZSBsaWJ4cmVuZGVyIGxpYnhjb21wb3NpdGUiCitERVBFTkRTID0gImdsaWItMi4wIHBhbmdvIGF0ayBqcGVnIGxpYnBuZyBnZGstcGl4YnVmLW5hdGl2ZSBkb2Nib29rLXV0aWxzLW5hdGl2ZSBcCisgY2Fpcm8gZ2RrLXBpeGJ1ZiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2RpcmVjdGZiJywgJ2RpcmVjdGZiJywgJycsIGQpfSBcCisiCisKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteD15ZXMgLS13aXRoLWdka3RhcmdldD14MTEsLS13aXRoLXg9bm8sJHtYMTFERVBFTkRTfSIKKyMgd2l0aG91dCAtLXdpdGgtZ2RrdGFyZ2V0PWRpcmVjdGZiIGl0IHdpbGwgY2hlY2sgZm9yIGNhaXJvLXhsaWIgd2hpY2ggaXNuJ3QgYXZhaWxhYmxlIHdpdGhvdXQgWDExIERJU1RST19GRUFUVVJFCitQQUNLQUdFQ09ORklHW2RpcmVjdGZiXSA9ICItLXdpdGgtZ2RrdGFyZ2V0PWRpcmVjdGZiLCxkaXJlY3RmYiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ3RrLWRvYyBwa2djb25maWcgdXBkYXRlLWFsdGVybmF0aXZlcyBndGstaW1tb2R1bGVzLWNhY2hlCisKK1BBQ0tBR0VTICs9ICJsaWJnYWlsIGd0ay1kZW1vIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlLTIuMCBcCisJJHtiaW5kaXJ9L2d0ay1xdWVyeS1pbW1vZHVsZXMtMi4wIFwKKwkke2xpYmRpcn0vbGliKiR7U09MSUJTfSBcCisJJHtkYXRhZGlyfS90aGVtZXMgJHtzeXNjb25mZGlyfSBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfS9lbmdpbmVzL2xpYnBpeG1hcC5zbyIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIgXAorICAgICAgICAke2RhdGFkaXJ9L2d0ay0yLjAvaW5jbHVkZSBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvaW5jbHVkZSBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvbW9kdWxlcy8qLmxhIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9L2xvYWRlcnMvKi5sYSBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfS9pbW1vZHVsZXMvKi5sYSBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfS9wcmludGJhY2tlbmRzLyoubGEgXAorCSR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0vZW5naW5lcy8qLmxhIFwKKwkke2JpbmRpcn0vZ3RrLWJ1aWxkZXItY29udmVydCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIgXAorCSR7bGliZGlyfS9ndGstMi4wL21vZHVsZXMvLmRlYnVnLyogXAorICAgICAgICAke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9L2xvYWRlcnMvLmRlYnVnLyogXAorCSR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0vaW1tb2R1bGVzLy5kZWJ1Zy8qIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9L2VuZ2luZXMvLmRlYnVnLyogXAorCSR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0vcHJpbnRiYWNrZW5kcy8uZGVidWcvKiIKKworRklMRVNfZ3RrLWRlbW8gPSAiIFwKKyAke2RhdGFkaXJ9L2d0ay0yLjAvZGVtby8qIFwKKyAke2JpbmRpcn0vZ3RrLWRlbW8gXAorICIKKworRklMRVNfbGliZ2FpbCA9ICIgXAorCSR7bGliZGlyfS9ndGstMi4wL21vZHVsZXMvbGliZ2FpbC5zbyBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvbW9kdWxlcy9saWJmZXJyZXQuc28gXAorCSIKKworR1RLQkFTRV9SUkVDT01NRU5EUyA/PSAibGliZXJhdGlvbi1mb250cyBnZGstcGl4YnVmLWxvYWRlci1wbmcgZ2RrLXBpeGJ1Zi1sb2FkZXItanBlZyBnZGstcGl4YnVmLWxvYWRlci1naWYgZ2RrLXBpeGJ1Zi1sb2FkZXIteHBtIHNoYXJlZC1taW1lLWluZm8iCitHVEtHTElCQ19SUkVDT01NRU5EUyA/PSAiJHtHVEtCQVNFX1JSRUNPTU1FTkRTfSBnbGliYy1nY29udi1pc284ODU5LTEiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gIiR7R1RLQkFTRV9SUkVDT01NRU5EU30iCitSUkVDT01NRU5EU18ke1BOfV9saWJjLWdsaWJjID0gIiR7R1RLR0xJQkNfUlJFQ09NTUVORFN9IgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJndGstdXBkYXRlLWljb24tY2FjaGUiCitBTFRFUk5BVElWRV9UQVJHRVRbZ3RrLXVwZGF0ZS1pY29uLWNhY2hlXSA9ICIke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlLTIuMCIKKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZ3RrLTIuMAorCisJbWtkaXIgLXAgJHtEfSR7bGliZGlyfS9ndGstMi4wL2luY2x1ZGUKKwlpbnN0YWxsIC1tIDA2NDQgZ2RrL2dka2NvbmZpZy5oICR7RH0ke2xpYmRpcn0vZ3RrLTIuMC9pbmNsdWRlL2dka2NvbmZpZy5oCisKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9ndGsvZ3RrZmlsZWNob29zZXJwcml2YXRlLmggJHtEfSR7aW5jbHVkZWRpcn0vZ3RrLTIuMC9ndGsvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZ3RrL2d0a2ZpbGVjaG9vc2VydXRpbHMuaCAgICR7RH0ke2luY2x1ZGVkaXJ9L2d0ay0yLjAvZ3RrLworCWluc3RhbGwgLW0gMDY0NCAke1N9L2d0ay9ndGtmaWxlc3lzdGVtbW9kZWwuaCAgICAke0R9JHtpbmNsdWRlZGlyfS9ndGstMi4wL2d0ay8KKworCW12ICR7RH0ke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlICR7RH0ke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlLTIuMAorfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImd0a19zeXNyb290X3ByZXByb2Nlc3MiCisKK2d0a19zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCWlmIFsgLWUgJHtEfSR7YmluZGlyfS9ndGstYnVpbGRlci1jb252ZXJ0IF07IHRoZW4KKwkJaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCQlpbnN0YWxsIC1tIDc1NSAke0R9JHtiaW5kaXJ9L2d0ay1idWlsZGVyLWNvbnZlcnQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8KKwlmaQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvZG9jLWZpeGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL2RvYy1maXhlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGU0NzlmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL2RvYy1maXhlcy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitUaGVyZSBhcmUgaXNzdWVzIGJ1aWxkaW5nIHRoZSBndGsrIHR1dG9yaWFsIGFuZCBmYXEgZG9jdW1lbnRhdGlvbi4KK1NpbmNlIHRoZXkgd2VyZSByZW1vdmVkIGluIGd0aysgdXBzdHJlYW0gYW5kIGFyZSBzdXBlcmZsdW91cyBpbgorZW1iZWRkZWQgYXBwbGljYXRpb25zLCBqdXN0IGRvbid0IGJ1aWxkIHRoZW0uCisKK1RoYW5rcyB0byBKb3NodWEgTG9jayBmb3Igc3VnZ2VzdGluZyB0aGlzIGFwcHJvYWNoLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworZGlmZiAtdXJOIGd0aystMi4yMi4xLm9yaWcvZG9jcy9NYWtlZmlsZS5hbSBndGsrLTIuMjIuMS9kb2NzL01ha2VmaWxlLmFtCistLS0gZ3RrKy0yLjIyLjEub3JpZy9kb2NzL01ha2VmaWxlLmFtCTIwMTAtMTEtMTUgMDQ6MTM6MDkuMDAwMDAwMDAwIC0wODAwCisrKysgZ3RrKy0yLjIyLjEvZG9jcy9NYWtlZmlsZS5hbQkyMDExLTAyLTIzIDE5OjI1OjE2LjkxNDgxNTA5NyAtMDgwMAorQEAgLTEsNyArMSw3IEBACisgIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCisgaW5jbHVkZSAkKHRvcF9zcmNkaXIpL01ha2VmaWxlLmRlY2wKKyAKKy1TVUJESVJTID0gdHV0b3JpYWwgZmFxIHJlZmVyZW5jZSB0b29scworK1NVQkRJUlMgPSByZWZlcmVuY2UgdG9vbHMKKyAKKyBFWFRSQV9ESVNUICs9IFwKKyAJZGVmc2Zvcm1hdC50eHQJCQlcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFlNzI4ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy9oYXJkY29kZWRfbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitVcGRhdGVkIHRvIGFwcGx5IHRvIGd0aystMi4yNC4xNQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBndGsrLTIuMjQuMTUvY29uZmlndXJlLmFjIGd0aystMi4yNC4xNS9jb25maWd1cmUuYWMKKy0tLSBndGsrLTIuMjQuMTUvY29uZmlndXJlLmFjCTIwMTMtMDEtMTIgMjA6NTI6NTQuMDAwMDAwMDAwICswMjAwCisrKysgZ3RrKy0yLjI0LjE1L2NvbmZpZ3VyZS5hYwkyMDEzLTAyLTEyIDIxOjMzOjMwLjY4OTkyNTk2NyArMDIwMAorQEAgLTQxNSw3ICs0MTUsNyBAQAorIGNhc2UgJGVuYWJsZV9leHBsaWNpdF9kZXBzIGluCisgICBhdXRvKQorICAgICBleHBvcnQgU0VECistICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvICdldmFsIGVjaG8gXCIkZGVwbGlic19jaGVja19tZXRob2RcIicpIHwgc2hgCisrICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kPWAoLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnOyBlY2hvICdldmFsIGVjaG8gXCIkZGVwbGlic19jaGVja19tZXRob2RcIicpIHwgc2hgCisgICAgIGlmIHRlc3QgIngkZGVwbGlic19jaGVja19tZXRob2QiICchPScgeHBhc3NfYWxsIHx8IHRlc3QgIngkZW5hYmxlX3N0YXRpYyIgPSB4eWVzIDsgdGhlbgorICAgICAgIGVuYWJsZV9leHBsaWNpdF9kZXBzPXllcworICAgICBlbHNlCitAQCAtNzc0LDcgKzc3NCw3IEBACisgICAgIGRubCBOb3cgd2UgY2hlY2sgdG8gc2VlIGlmIG91ciBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWIgZGVwcworICAgICBkbmwgKGluIGEgcmF0aGVyIHVnbHkgd2F5IGV2ZW4pCisgICAgIGlmICRkeW53b3JrczsgdGhlbgorLSAgICAgICAgbW9kdWxlX2xpYnRvb2xfY29uZmlnPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSAuL2xpYnRvb2wgLS1jb25maWciCisrICAgICAgICBtb2R1bGVfbGlidG9vbF9jb25maWc9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWciCisgICAgICAgICBtb2R1bGVfZGVwbGlic19jaGVjaz1gJG1vZHVsZV9saWJ0b29sX2NvbmZpZyB8IFwKKyAgICAgICAgICAgICBncmVwICdeW1thLXpfXV0qY2hlY2tbW2Etel9dXSpfbWV0aG9kPVtbJ1wnJyJdXScgfCBcCisgICAgICAgICAgICAgc2VkICdzLy4qW1snXCcnIl1dXCguKlwpW1snXCcnIl1dJC9cMS8nYAorQEAgLTE1NzQsNyArMTU3NCw3IEBACisgIyBXZSBhcmUgdXNpbmcgZ21vZHVsZS1uby1leHBvcnQgbm93LCBidXQgSSdtIGxlYXZpbmcgdGhlIHN0cmlwcGluZworICMgY29kZSBpbiBwbGFjZSBmb3Igbm93LCBzaW5jZSBwYW5nbyBhbmQgYXRrIHN0aWxsIHJlcXVpcmUgZ21vZHVsZS4KKyBleHBvcnQgU0VECistZXhwb3J0X2R5bmFtaWM9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKytleHBvcnRfZHluYW1pYz1gKCRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKyBpZiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWMiOyB0aGVuCisgICBHREtfREVQX0xJQlM9YGVjaG8gJEdES19ERVBfTElCUyB8IHNlZCAtZSAicy8kZXhwb3J0X2R5bmFtaWMvLyJgCisgICBHVEtfREVQX0xJQlM9YGVjaG8gJEdUS19ERVBfTElCUyB8IHNlZCAtZSAicy8kZXhwb3J0X2R5bmFtaWMvLyJgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvc3RyaWN0LXByb3RvdHlwZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvc3RyaWN0LXByb3RvdHlwZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZlMWY1ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy9zdHJpY3QtcHJvdG90eXBlcy5wYXRjaApAQCAtMCwwICsxLDI0IEBACitGaXhlcworCitpbmNsdWRlL2d0ay0yLjAvZ3RrL2d0a2l0ZW1mYWN0b3J5Lmg6NDc6MTogd2FybmluZzogZnVuY3Rpb24gZGVjbGFyYXRpb24gaXNuJ3QgYSBwcm90b3R5cGUgWy1Xc3RyaWN0LXByb3RvdHlwZXNdCisgdHlwZWRlZiB2b2lkICgqR3RrSXRlbUZhY3RvcnlDYWxsYmFjaykgICgpOworCitnY2M1IGhhcyAtV3N0cmljdC1wcm90b3R5cGVzIG9uIGJ5IGRlZmF1bHQgZm9yIC1XZXJyb3Igc28gdGhpcyBiZWNvbWVzIGEgYnVpbGQgZmFpbHVyZSBmb3IgY29uc3VtZXJzCitvZiB0aGlzIGhlYWRlciBlLmcuIG1hdGNoYm94LXBhbmVsLTIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitJbmRleDogZ3RrKy0yLjI0LjI3L2d0ay9ndGtpdGVtZmFjdG9yeS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3RrKy0yLjI0LjI3Lm9yaWcvZ3RrL2d0a2l0ZW1mYWN0b3J5LmgKKysrKyBndGsrLTIuMjQuMjcvZ3RrL2d0a2l0ZW1mYWN0b3J5LmgKK0BAIC00NCw3ICs0NCw3IEBAIHR5cGVkZWYgdm9pZAkoKkd0a1ByaW50RnVuYykJCSAgIChncG9pbnQKKyAgKiAoTm90ZSB0aGF0IGlmIHdlIGFyZSBpbmNsdWRlZCBmcm9tIGEgQysrIHByb2dyYW0gKCkgd2lsbCBtZWFuCisgICogKHZvaWQpIHNvIGFuIGV4cGxpY2l0IGNhc3Qgd2lsbCBiZSBuZWVkZWQuKQorICAqLworLXR5cGVkZWYJdm9pZAkoKkd0a0l0ZW1GYWN0b3J5Q2FsbGJhY2spICAoKTsKKyt0eXBlZGVmCXZvaWQJKCpHdGtJdGVtRmFjdG9yeUNhbGxiYWNrKSAgKHZvaWQpOworIHR5cGVkZWYJdm9pZAkoKkd0a0l0ZW1GYWN0b3J5Q2FsbGJhY2sxKSAoZ3BvaW50ZXIJCSBjYWxsYmFja19kYXRhLAorIAkJCQkJICAgIGd1aW50CQkgY2FsbGJhY2tfYWN0aW9uLAorIAkJCQkJICAgIEd0a1dpZGdldAkJKndpZGdldCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvdG9nZ2xlLWZvbnQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy90b2dnbGUtZm9udC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MGQxMjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvdG9nZ2xlLWZvbnQuZGlmZgpAQCAtMCwwICsxLDEwMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBndGsvZ3RrY2VsbHJlbmRlcmVydG9nZ2xlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndGsvZ3RrY2VsbHJlbmRlcmVydG9nZ2xlLmMub3JpZwkyMDEwLTA2LTIyIDE4OjExOjMzLjAwMDAwMDAwMCArMDgwMAorKysrIGd0ay9ndGtjZWxscmVuZGVyZXJ0b2dnbGUuYwkyMDEwLTA2LTIyIDE4OjExOjQzLjAwMDAwMDAwMCArMDgwMAorQEAgLTcxLDYgKzcxLDggQEAKKyAgIFBST1BfSU5ESUNBVE9SX1NJWkUKKyB9OworIAorKy8qIFRoaXMgaXMgYSBoYXJkLWNvZGVkIGRlZmF1bHQgd2hpY2ggcHJvbXB0bHkgZ2V0cyBvdmVycmlkZGVuIGJ5IGEgc2l6ZQorKyAgIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZm9udCBzaXplLiAqLworICNkZWZpbmUgVE9HR0xFX1dJRFRIIDEzCisgCisgc3RhdGljIGd1aW50IHRvZ2dsZV9jZWxsX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07CitAQCAtODAsOCArODIsOSBAQAorIHR5cGVkZWYgc3RydWN0IF9HdGtDZWxsUmVuZGVyZXJUb2dnbGVQcml2YXRlIEd0a0NlbGxSZW5kZXJlclRvZ2dsZVByaXZhdGU7Cisgc3RydWN0IF9HdGtDZWxsUmVuZGVyZXJUb2dnbGVQcml2YXRlCisgeworLSAgZ2ludCBpbmRpY2F0b3Jfc2l6ZTsKKy0KKysgIGdpbnQgaW5kaWNhdG9yX3NpemU7IC8qIFRoaXMgaXMgdGhlIHJlYWwgc2l6ZSAqLworKyAgZ2ludCBvdmVycmlkZV9zaXplOyAvKiBUaGlzIGlzIHRoZSBzaXplIHNldCBmcm9tIHRoZSBpbmRpY2F0b3Itc2l6ZSBwcm9wZXJ0eSAqLworKyAgR3RrV2lkZ2V0ICpjYWNoZWRfd2lkZ2V0OworICAgZ3VpbnQgaW5jb25zaXN0ZW50IDogMTsKKyB9OworIAorQEAgLTEwNCw2ICsxMDcsNyBAQAorICAgR1RLX0NFTExfUkVOREVSRVIgKGNlbGx0b2dnbGUpLT55cGFkID0gMjsKKyAKKyAgIHByaXYtPmluZGljYXRvcl9zaXplID0gVE9HR0xFX1dJRFRIOworKyAgcHJpdi0+b3ZlcnJpZGVfc2l6ZSA9IDA7CisgICBwcml2LT5pbmNvbnNpc3RlbnQgPSBGQUxTRTsKKyB9CisgCitAQCAtMjEwLDcgKzIxNCw3IEBACisgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGNlbGx0b2dnbGUtPnJhZGlvKTsKKyAgICAgICBicmVhazsKKyAgICAgY2FzZSBQUk9QX0lORElDQVRPUl9TSVpFOgorLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHByaXYtPmluZGljYXRvcl9zaXplKTsKKysgICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBwcml2LT5vdmVycmlkZV9zaXplID8gcHJpdi0+b3ZlcnJpZGVfc2l6ZSA6IHByaXYtPmluZGljYXRvcl9zaXplKTsKKyAgICAgICBicmVhazsKKyAgICAgZGVmYXVsdDoKKyAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcGFyYW1faWQsIHBzcGVjKTsKK0BAIC0yNDUsNyArMjQ5LDcgQEAKKyAgICAgICBjZWxsdG9nZ2xlLT5yYWRpbyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKKyAgICAgICBicmVhazsKKyAgICAgY2FzZSBQUk9QX0lORElDQVRPUl9TSVpFOgorLSAgICAgIHByaXYtPmluZGljYXRvcl9zaXplID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7CisrICAgICAgcHJpdi0+b3ZlcnJpZGVfc2l6ZSA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOworICAgICAgIGJyZWFrOworICAgICBkZWZhdWx0OgorICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwYXJhbV9pZCwgcHNwZWMpOworQEAgLTI3Myw2ICsyNzcsMjcgQEAKKyB9CisgCisgc3RhdGljIHZvaWQKKytvbl93aWRnZXRfc3R5bGVfc2V0IChHdGtXaWRnZXQgKndpZGdldCwgR3RrU3R5bGUgKnByZXZpb3VzLCBncG9pbnRlciB1c2VyX2RhdGEpCisreworKyAgR3RrQ2VsbFJlbmRlcmVyVG9nZ2xlUHJpdmF0ZSAqcHJpdiA9IHVzZXJfZGF0YTsKKysgIFBhbmdvQ29udGV4dCAqY29udGV4dDsKKysgIFBhbmdvRm9udE1ldHJpY3MgKm1ldHJpY3M7CisrICBpbnQgaGVpZ2h0OworKyAgCisrICBjb250ZXh0ID0gZ3RrX3dpZGdldF9nZXRfcGFuZ29fY29udGV4dCAod2lkZ2V0KTsKKysgIG1ldHJpY3MgPSBwYW5nb19jb250ZXh0X2dldF9tZXRyaWNzIChjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldC0+c3R5bGUtPmZvbnRfZGVzYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5nb19jb250ZXh0X2dldF9sYW5ndWFnZSAoY29udGV4dCkpOworKworKyAgaGVpZ2h0ID0gcGFuZ29fZm9udF9tZXRyaWNzX2dldF9hc2NlbnQgKG1ldHJpY3MpICsKKysgICAgcGFuZ29fZm9udF9tZXRyaWNzX2dldF9kZXNjZW50IChtZXRyaWNzKTsKKysgIAorKyAgcGFuZ29fZm9udF9tZXRyaWNzX3VucmVmIChtZXRyaWNzKTsKKysgIAorKyAgcHJpdi0+aW5kaWNhdG9yX3NpemUgPSBQQU5HT19QSVhFTFMgKGhlaWdodCAqIDAuODUpOworK30KKysKKytzdGF0aWMgdm9pZAorIGd0a19jZWxsX3JlbmRlcmVyX3RvZ2dsZV9nZXRfc2l6ZSAoR3RrQ2VsbFJlbmRlcmVyICpjZWxsLAorIAkJCQkgICBHdGtXaWRnZXQgICAgICAgKndpZGdldCwKKyAJCQkJICAgR2RrUmVjdGFuZ2xlICAgICpjZWxsX2FyZWEsCitAQCAtMjg3LDYgKzMxMiwyMCBAQAorIAorICAgcHJpdiA9IEdUS19DRUxMX1JFTkRFUkVSX1RPR0dMRV9HRVRfUFJJVkFURSAoY2VsbCk7CisgCisrICBpZiAocHJpdi0+b3ZlcnJpZGVfc2l6ZSkgeworKyAgICBwcml2LT5pbmRpY2F0b3Jfc2l6ZSA9IHByaXYtPm92ZXJyaWRlX3NpemU7CisrICB9IGVsc2UgaWYgKHByaXYtPmNhY2hlZF93aWRnZXQgIT0gd2lkZ2V0KSB7CisrICAgIGlmIChwcml2LT5jYWNoZWRfd2lkZ2V0KSB7CisrICAgICAgZ19vYmplY3RfcmVtb3ZlX3dlYWtfcG9pbnRlciAod2lkZ2V0LCAmcHJpdi0+Y2FjaGVkX3dpZGdldCk7CisrICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jIChwcml2LT5jYWNoZWRfd2lkZ2V0LCBvbl93aWRnZXRfc3R5bGVfc2V0LCBwcml2KTsKKysgICAgfQorKyAgICBwcml2LT5jYWNoZWRfd2lkZ2V0ID0gd2lkZ2V0OworKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyICh3aWRnZXQsICZwcml2LT5jYWNoZWRfd2lkZ2V0KTsKKysgICAgZ19zaWduYWxfY29ubmVjdCAod2lkZ2V0LCAic3R5bGUtc2V0Iiwgb25fd2lkZ2V0X3N0eWxlX3NldCwgcHJpdik7CisrICAgIAorKyAgICBvbl93aWRnZXRfc3R5bGVfc2V0ICh3aWRnZXQsIE5VTEwsIHByaXYpOworKyAgfQorKworICAgY2FsY193aWR0aCA9IChnaW50KSBjZWxsLT54cGFkICogMiArIHByaXYtPmluZGljYXRvcl9zaXplOworICAgY2FsY19oZWlnaHQgPSAoZ2ludCkgY2VsbC0+eXBhZCAqIDIgKyBwcml2LT5pbmRpY2F0b3Jfc2l6ZTsKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy94c2V0dGluZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysveHNldHRpbmdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYTk3MGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysveHNldHRpbmdzLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ3RrKy0yLjIxLjIvZ2RrL3gxMS9nZGtldmVudHMteDExLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndGsrLTIuMjEuMi5vcmlnL2dkay94MTEvZ2RrZXZlbnRzLXgxMS5jCTIwMTAtMDYtMjIgMTc6Mjg6MDQuMDAwMDAwMDAwICswODAwCisrKysgZ3RrKy0yLjIxLjIvZ2RrL3gxMS9nZGtldmVudHMteDExLmMJMjAxMC0wNi0yMiAxNzoyODowNi4wMDAwMDAwMDAgKzA4MDAKK0BAIC0zMDYyLDEwICszMDYyLDkgQEAKKyB7CisgICBHZGtTY3JlZW5YMTEgKnNjcmVlbiA9IGRhdGE7CisgICAKKy0gIGlmICh4c2V0dGluZ3NfY2xpZW50X3Byb2Nlc3NfZXZlbnQgKHNjcmVlbi0+eHNldHRpbmdzX2NsaWVudCwgKFhFdmVudCAqKXhldmVudCkpCistICAgIHJldHVybiBHREtfRklMVEVSX1JFTU9WRTsKKy0gIGVsc2UKKy0gICAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7CisrICB4c2V0dGluZ3NfY2xpZW50X3Byb2Nlc3NfZXZlbnQgKHNjcmVlbi0+eHNldHRpbmdzX2NsaWVudCwgKFhFdmVudCAqKXhldmVudCk7CisrCisrICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKKyB9CisgCisgc3RhdGljIEJvb2wKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI5ZjBkMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMuaW5jCkBAIC0wLDAgKzEsMTExIEBACitTVU1NQVJZID0gIk11bHRpLXBsYXRmb3JtIHRvb2xraXQgZm9yIGNyZWF0aW5nIEdVSXMiCitERVNDUklQVElPTiA9ICJHVEsrIGlzIGEgbXVsdGktcGxhdGZvcm0gdG9vbGtpdCBmb3IgY3JlYXRpbmcgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlcy4gT2ZmZXJpbmcgYSBjb21wbGV0ZSBcCitzZXQgb2Ygd2lkZ2V0cywgR1RLKyBpcyBzdWl0YWJsZSBmb3IgcHJvamVjdHMgcmFuZ2luZyBmcm9tIHNtYWxsIG9uZS1vZmYgcHJvamVjdHMgdG8gY29tcGxldGUgYXBwbGljYXRpb24gc3VpdGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ3RrLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorCitERVBFTkRTID0gImdsaWItMi4wIGNhaXJvIHBhbmdvIGF0ayBqcGVnIGxpYnBuZyBnZGstcGl4YnVmIFwKKyAgICAgICAgICAgZG9jYm9vay11dGlscy1uYXRpdmUgZ2RrLXBpeGJ1Zi1uYXRpdmUgbGliZXBveHkiCisKK0xJQ0VOU0UgPSAiTEdQTHYyICYgTEdQTHYyKyAmIExHUEx2Mi4xKyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGd0ay1kb2MgdXBkYXRlLWFsdGVybmF0aXZlcyBndGstaW1tb2R1bGVzLWNhY2hlIGdzZXR0aW5ncworCisjIFRoaXMgc2hvdWxkIGJlIGluIGF1dG90b29scy5iYmNsYXNzLCBidXQgdW50aWwgc29tZXRoaW5nIGVsc2VzIHVzZXMgaXQgcHV0dGluZworIyBpdCBoZXJlIGF2b2lkcyByZWJ1aWxkaW5nIGV2ZXJ5dGhpbmcuCitleHBvcnQgUEtHX0NPTkZJR19GT1JfQlVJTEQgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BrZy1jb25maWctbmF0aXZlIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAjIERvIHRoaXMgYmVjYXVzZSB0aGUgY29uZmlndXJlIHNjcmlwdCBpcyBydW5uaW5nIC4vbGlidG9vbCBkaXJlY3RseQorICAgIHJtIC1mIGxpYnRvb2wKKyAgICBsbiAtcyAke1RBUkdFVF9QUkVGSVh9bGlidG9vbCBsaWJ0b29sCit9CisKK0VYVFJBX09FQ09ORiArPSAiIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWdsaWJ0ZXN0IFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXhpbmVyYW1hIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtbW9kdWxlcyBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1jdXBzIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWludHJvc3BlY3Rpb24gXAorIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJ4MTEiLCAieDExIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJ3YXlsYW5kIiwgIndheWxhbmQiLCAiIiwgZCl9IgorCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExLWJhY2tlbmQsLS1kaXNhYmxlLXgxMS1iYWNrZW5kLGF0LXNwaTItYXRrIGZvbnRjb25maWcgbGlieDExIGxpYnhleHQgbGlieGN1cnNvciBsaWJ4aSBsaWJ4ZGFtYWdlIGxpYnhyYW5kciBsaWJ4cmVuZGVyIGxpYnhjb21wb3NpdGUgbGlieGZpeGVzIgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItLWVuYWJsZS13YXlsYW5kLWJhY2tlbmQsLS1kaXNhYmxlLXdheWxhbmQtYmFja2VuZCx3YXlsYW5kIGxpYnhrYmNvbW1vbiB2aXJ0dWFsL21lc2EiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW12ICR7RH0ke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlICR7RH0ke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlLTMuMAorfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tZGVtbyIKK0xJQlYgPSAiMy4wLjAiCisKK0ZJTEVTXyR7UE59LWRlbW8gPSAiJHtiaW5kaXJ9L2d0azMtZGVtbyBcCisgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGszLWRlbW8tYXBwbGljYXRpb24gXAorICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrMy1pY29uLWJyb3dzZXIgXAorICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrMy13aWRnZXQtZmFjdG9yeSBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ3RrLTMuMC9kZW1vIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvZ3RrMy1kZW1vLmRlc2t0b3AgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9ndGszLWljb24tYnJvd3Nlci5kZXNrdG9wIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvZ3RrMy13aWRnZXQtZmFjdG9yeS5kZXNrdG9wIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9pY29ucy9oaWNvbG9yLyovYXBwcy9ndGszLWRlbW8qLnBuZyBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vaWNvbnMvaGljb2xvci8qL2FwcHMvZ3RrMy13aWRnZXQtZmFjdG9yeSoucG5nIgorCisjIFRoZSBkZW1vIHVzZXMgUE5HIGZpbGVzIGFuZCBtaW1lIHR5cGUgc25pZmZpbmcsIHNvIGVuc3VyZSB0aGF0IHRoZXNlCisjIGRlcGVuZGVuY2llcyBhcmUgcHJlc2VudC4KK1JERVBFTkRTXyR7UE59LWRlbW8gKz0gImdkay1waXhidWYtbG9hZGVyLXBuZyBzaGFyZWQtbWltZS1pbmZvIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlLTMuMCBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrLXF1ZXJ5LWltbW9kdWxlcy0zLjAgXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2d0ay1sYXVuY2ggXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYioke1NPTElCU30gXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS90aGVtZXMgJHtzeXNjb25mZGlyfSAke2RhdGFkaXJ9L2dsaWItMi4wL3NjaGVtYXMvIFwKKyAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wLyR7TElCVn0vZW5naW5lcy9saWJwaXhtYXAuc28gXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvbW9kdWxlcy8qLnNvIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ3RrLTMuMC9ndGtidWlsZGVyLnJuZyBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ3RrLTMuMC9pbmNsdWRlIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvaW5jbHVkZSBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wLyR7TElCVn0vbG9hZGVycy8qLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9pbW1vZHVsZXMvKi5sYSBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wLzMuMC4wL3ByaW50YmFja2VuZHMvKi5sYSBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wLyR7TElCVn0vZW5naW5lcy8qLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvbW9kdWxlcy8qLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2d0ay1idWlsZGVyLWNvbnZlcnQgXAorICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmciCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9sb2FkZXJzLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wLyR7TElCVn0vaW1tb2R1bGVzLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wLyR7TElCVn0vZW5naW5lcy8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC8ke0xJQlZ9L3ByaW50YmFja2VuZHMvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvbW9kdWxlcy8uZGVidWciCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImFkd2FpdGEtaWNvbi10aGVtZS1zeW1ib2xpYyIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXmd0azMtaW1tb2R1bGUtLiogXmd0azMtcHJpbnRiYWNrZW5kLS4qIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJndGstdXBkYXRlLWljb24tY2FjaGUiCitBTFRFUk5BVElWRV9UQVJHRVRbZ3RrLXVwZGF0ZS1pY29uLWNhY2hlXSA9ICIke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlLTMuMCIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGltcG9ydCBvcy5wYXRoCisKKyAgICBndGtfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9ndGstMy4wLyR7TElCVn0nKQorICAgIGltbW9kdWxlc19yb290ID0gb3MucGF0aC5qb2luKGd0a19saWJkaXIsICdpbW1vZHVsZXMnKQorICAgIHByaW50bW9kdWxlc19yb290ID0gb3MucGF0aC5qb2luKGd0a19saWJkaXIsICdwcmludGJhY2tlbmRzJyk7CisKKyAgICBpbW1vZHVsZXMgPSBkb19zcGxpdF9wYWNrYWdlcyhkLCBpbW1vZHVsZXNfcm9vdCwgJ15pbS0oLiopXC5zbyQnLCAnZ3RrMy1pbW1vZHVsZS0lcycsICdHVEsgaW5wdXQgbW9kdWxlIGZvciAlcycpCisgICAgaWYgaW1tb2R1bGVzOgorICAgICAgICBkLnNldFZhcigiR1RLSU1NT0RVTEVTX1BBQ0tBR0VTIiwgIiAiLmpvaW4oaW1tb2R1bGVzKSkKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHByaW50bW9kdWxlc19yb290LCAnXmxpYnByaW50YmFja2VuZC0oLiopXC5zbyQnLCAnZ3RrMy1wcmludGJhY2tlbmQtJXMnLCAnR1RLIHByaW50YmFja2VuZCBtb2R1bGUgZm9yICVzJykKKworICAgIGlmIChkLmdldFZhcignREVCSUFOX05BTUVTJywgMSkpOgorICAgICAgICBkLnNldFZhcignUEtHXyR7UE59JywgJyR7TUxQUkVGSVh9bGliZ3RrLTMuMCcpCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvRG9udC1mb3JjZS1jc2QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszL0RvbnQtZm9yY2UtY3NkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZDhhODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszL0RvbnQtZm9yY2UtY3NkLnBhdGNoCkBAIC0wLDAgKzEsMTE4IEBACit3aW5kb3c6IENoZWNrIGlmIHdlIGNhbiB1c2UgQ1NEIGJlZm9yZSBlbmFibGluZyB0aGVtCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CisKKworRnJvbSBjNWU1ZWU2NzQ5MGU3ZTdhZjU2MDUyZDhmOGJlYjc1ZGIwMDJjMmYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRW1tYW51ZWxlIEJhc3NpIDxlYmFzc2lAZ25vbWUub3JnPgorRGF0ZTogV2VkLCAzIEp1biAyMDE1IDE0OjA3OjI5ICswMTAwCitTdWJqZWN0OiB3aW5kb3c6IENoZWNrIGlmIHdlIGNhbiB1c2UgQ1NEIGJlZm9yZSBlbmFibGluZyB0aGVtCisKK1RoZSBjaGFuZ2UgaW4gMDMyMTNiOTUwOWZjMWRmMTZjNjYxOTRlYTE2OGFlZDZjMTUxMTBlOSBjaGFuZ2VkIHRoZSBydWxlcworYXMgdG8gd2hlbiBDU0QgY2FuIGJlIGVuYWJsZWQsIGJ1dCBpdCBhbHNvIHVuY29uZGl0aW9uYWxseSBlbmFibGVzIENTRAord2l0aCB0aGUgaW1wbGljaXQgYXNzdW1wdGlvbiB0aGF0IGNsaWVudC1zaWRlIHNoYWRvd3Mgd2VyZSB0aGUgcmVhbAoraXNzdWUsIGFuZCB0aGF0IHdlIGNvdWxkIHdvcmsgYXJvdW5kIHRoYXQgYnkgZHJhd2luZyBvdXIgb3duIGJvcmRlcnMuCitUaGlzIGFsc28gbWVhbnMgdGhhdCBzZXR0aW5nIGEgdGl0bGViYXIgZm9yIGEgR3RrV2luZG93IHdpbGwgZW5hYmxlIENTRAordW5jb25kaXRpb25hbGx5LgorCitJbiByZWFsaXR5LCBzb21lIHdpbmRvdyBtYW5hZ2VycyAobGlrZSBNYXRjaGJveCkgKm9ubHkqIHN1cHBvcnQKK3NlcnZlci1zaWRlIGRlY29yYXRpb25zLCBhbmQgd2lsbCBpZ25vcmUgYWxsIGhpbnRzIHRvIHRoZSBjb250cmFyeSwgdG8KK3RoZSBwb2ludCBvZiBkcmF3aW5nIGRlY29yYXRpb25zIGF0IHJhbmRvbSBsb2NhdGlvbnMgb24gdG9wIG9mIHRoZQord2luZG93LgorCitTaW5jZSBDU0QgYXJlIGVuYWJsZWQgdW5jb25kaXRpb25hbGx5LCB0aGUgR1RLX0NTRCBlbnZpcm9ubWVudCB2YXJpYWJsZQoraXMgYWxzbyBub3QgYSBzdWl0YWJsZSBlc2NhcGUgaGF0Y2guCisKK0luIHRoZSBncmFuZCB0cmFkaXRpb24gb2YgYXNraW5nIG91cnNlbHZlcyBpZiB3ZSBzaG91bGQgZG8gc29tZXRoaW5nCitqdXN0IGJlY2F1c2Ugd2UgY2FuLCB3ZSBzaG91bGQgc3BsaXQgdGhlIGVudmlyb25tZW50IGNoZWNrcyBmcm9tIHRoZQorY2hlY2tzIG9uIHdoYXQgdGhlIHVzZXIgcmVxdWVzdGVkOyBieSBkb2luZyB0aGF0LCB3ZSBjYW4gYWxzbyBjaGVjaword2hlbiBlbmFibGluZyBjbGllbnQtc2lkZSBkZWNvcmF0aW9ucywgYW5kIGlkZWFsbHkgYmFpbCBvdXQgaWYgbmVlZGVkLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwMzQzCisKK2RpZmYgLS1naXQgYS9ndGsvZ3Rrd2luZG93LmMgYi9ndGsvZ3Rrd2luZG93LmMKK2luZGV4IDQyM2M2YmQuLjlmZTg4MmYgMTAwNjQ0CistLS0gYS9ndGsvZ3Rrd2luZG93LmMKKysrKyBiL2d0ay9ndGt3aW5kb3cuYworQEAgLTQwNTYsNiArNDA1NiwzMiBAQCBndGtfd2luZG93X3N1cHBvcnRzX2NsaWVudF9zaGFkb3cgKEd0a1dpbmRvdyAqd2luZG93KQorICAgcmV0dXJuIFRSVUU7CisgfQorIAorK3N0YXRpYyBnYm9vbGVhbgorK2d0a193aW5kb3dfY2FuX3VzZV9jc2QgKEd0a1dpbmRvdyAqd2luZG93KQorK3sKKysgIGNvbnN0IGdjaGFyICpjc2RfZW52OworKworKyNpZmRlZiBHREtfV0lORE9XSU5HX0JST0FEV0FZCisrICBpZiAoR0RLX0lTX0JST0FEV0FZX0RJU1BMQVkgKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKEdUS19XSURHRVQgKHdpbmRvdykpKSkKKysgICAgcmV0dXJuIFRSVUU7CisrI2VuZGlmCisrCisrI2lmZGVmIEdES19XSU5ET1dJTkdfV0FZTEFORAorKyAgaWYgKEdES19JU19XQVlMQU5EX0RJU1BMQVkgKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKEdUS19XSURHRVQgKHdpbmRvdykpKSkKKysgICAgcmV0dXJuIFRSVUU7CisrI2VuZGlmCisrCisrI2lmZGVmIEdES19XSU5ET1dJTkdfTUlSCisrICBpZiAoR0RLX0lTX01JUl9ESVNQTEFZIChndGtfd2lkZ2V0X2dldF9kaXNwbGF5IChHVEtfV0lER0VUICh3aW5kb3cpKSkpCisrICAgIHJldHVybiBUUlVFOworKyNlbmRpZgorKworKyAgY3NkX2VudiA9IGdfZ2V0ZW52ICgiR1RLX0NTRCIpOworKworKyAgLyogSWYgR1RLX0NTRCBpcyB1bnNldCB3ZSBkZWZhdWx0IHRvIENTRCBzdXBwb3J0ICovCisrICByZXR1cm4gY3NkX2VudiA9PSBOVUxMIHx8IChzdHJjbXAgKGNzZF9lbnYsICIxIikgPT0gMCk7CisrfQorKworIHN0YXRpYyB2b2lkCisgZ3RrX3dpbmRvd19lbmFibGVfY3NkIChHdGtXaW5kb3cgKndpbmRvdykKKyB7CitAQCAtNDA2Myw2ICs0MDg5LDEwIEBAIGd0a193aW5kb3dfZW5hYmxlX2NzZCAoR3RrV2luZG93ICp3aW5kb3cpCisgICBHdGtXaWRnZXQgKndpZGdldCA9IEdUS19XSURHRVQgKHdpbmRvdyk7CisgICBHZGtWaXN1YWwgKnZpc3VhbDsKKyAKKysgIC8qIElmIHRoZSBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IENTRCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50IGluIGVuYWJsaW5nIHRoZW0gKi8KKysgIGlmICghZ3RrX3dpbmRvd19jYW5fdXNlX2NzZCAod2luZG93KSkKKysgICAgcmV0dXJuOworKworICAgLyogV2UgbmVlZCBhIHZpc3VhbCB3aXRoIGFscGhhIGZvciBjbGllbnQgc2hhZG93cyAqLworICAgaWYgKHByaXYtPnVzZV9jbGllbnRfc2hhZG93KQorICAgICB7CitAQCAtNTgzOSw3ICs1ODY5LDYgQEAgc3RhdGljIGdib29sZWFuCisgZ3RrX3dpbmRvd19zaG91bGRfdXNlX2NzZCAoR3RrV2luZG93ICp3aW5kb3cpCisgeworICAgR3RrV2luZG93UHJpdmF0ZSAqcHJpdiA9IHdpbmRvdy0+cHJpdjsKKy0gIGNvbnN0IGdjaGFyICpjc2RfZW52OworIAorICAgaWYgKHByaXYtPmNzZF9yZXF1ZXN0ZWQpCisgICAgIHJldHVybiBUUlVFOworQEAgLTU4NTAsMjQgKzU4NzksNyBAQCBndGtfd2luZG93X3Nob3VsZF91c2VfY3NkIChHdGtXaW5kb3cgKndpbmRvdykKKyAgIGlmIChwcml2LT50eXBlID09IEdUS19XSU5ET1dfUE9QVVApCisgICAgIHJldHVybiBGQUxTRTsKKyAKKy0jaWZkZWYgR0RLX1dJTkRPV0lOR19CUk9BRFdBWQorLSAgaWYgKEdES19JU19CUk9BRFdBWV9ESVNQTEFZIChndGtfd2lkZ2V0X2dldF9kaXNwbGF5IChHVEtfV0lER0VUICh3aW5kb3cpKSkpCistICAgIHJldHVybiBUUlVFOworLSNlbmRpZgorLQorLSNpZmRlZiBHREtfV0lORE9XSU5HX1dBWUxBTkQKKy0gIGlmIChHREtfSVNfV0FZTEFORF9ESVNQTEFZIChndGtfd2lkZ2V0X2dldF9kaXNwbGF5IChHVEtfV0lER0VUICh3aW5kb3cpKSkpCistICAgIHJldHVybiBUUlVFOworLSNlbmRpZgorLQorLSNpZmRlZiBHREtfV0lORE9XSU5HX01JUgorLSAgaWYgKEdES19JU19NSVJfRElTUExBWSAoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSAoR1RLX1dJREdFVCAod2luZG93KSkpKQorLSAgICByZXR1cm4gVFJVRTsKKy0jZW5kaWYKKy0KKy0gIGNzZF9lbnYgPSBnX2dldGVudiAoIkdUS19DU0QiKTsKKy0KKy0gIHJldHVybiAoZ19zdHJjbXAwIChjc2RfZW52LCAiMSIpID09IDApOworKyAgcmV0dXJuIGd0a193aW5kb3dfY2FuX3VzZV9jc2QgKHdpbmRvdyk7CisgfQorIAorIHN0YXRpYyB2b2lkCistLSAKK2NnaXQgdjAuMTAuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy9oYXJkY29kZWRfbGlidG9vbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjRiZWViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy9oYXJkY29kZWRfbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorCitJbmRleDogZ3RrKy0zLjguMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndGsrLTMuOC4yLm9yaWcvY29uZmlndXJlLmFjCisrKysgZ3RrKy0zLjguMi9jb25maWd1cmUuYWMKK0BAIC01MzEsNyArNTMxLDcgQEAgQUNfTVNHX0NIRUNLSU5HKFtXaGV0aGVyIHRvIHdyaXRlIGRlcGVuZAorIGNhc2UgJGVuYWJsZV9leHBsaWNpdF9kZXBzIGluCisgICBhdXRvKQorICAgICBleHBvcnQgU0VECistICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvICdldmFsIGVjaG8gXCIkZGVwbGlic19jaGVja19tZXRob2RcIicpIHwgc2hgCisrICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kPWAoLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnOyBlY2hvICdldmFsIGVjaG8gXCIkZGVwbGlic19jaGVja19tZXRob2RcIicpIHwgc2hgCisgICAgIGlmIHRlc3QgIngkZGVwbGlic19jaGVja19tZXRob2QiICE9IHhwYXNzX2FsbCB8fCB0ZXN0ICJ4JGVuYWJsZV9zdGF0aWMiID0geHllcyA7IHRoZW4KKyAgICAgICBlbmFibGVfZXhwbGljaXRfZGVwcz15ZXMKKyAgICAgZWxzZQorQEAgLTc5Myw3ICs3OTMsNyBAQCBlbHNlCisgICAgIGRubCBOb3cgd2UgY2hlY2sgdG8gc2VlIGlmIG91ciBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWIgZGVwcworICAgICBkbmwgKGluIGEgcmF0aGVyIHVnbHkgd2F5IGV2ZW4pCisgICAgIGlmICRkeW53b3JrczsgdGhlbgorLSAgICAgICAgbW9kdWxlX2xpYnRvb2xfY29uZmlnPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSAuL2xpYnRvb2wgLS1jb25maWciCisrICAgICAgICBtb2R1bGVfbGlidG9vbF9jb25maWc9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9IC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZyIKKyAgICAgICAgIG1vZHVsZV9kZXBsaWJzX2NoZWNrPWAkbW9kdWxlX2xpYnRvb2xfY29uZmlnIHwgXAorICAgICAgICAgICAgIGdyZXAgJ15bW2Etel9dXSpjaGVja1tbYS16X11dKl9tZXRob2Q9W1snXCcnIl1dJyB8IFwKKyAgICAgICAgICAgICBzZWQgJ3MvLipbWydcJyciXV1cKC4qXClbWydcJyciXV0kL1wxLydgCitAQCAtMTUyOCw3ICsxNTI4LDcgQEAgZmkKKyAjIFdlIGFyZSB1c2luZyBnbW9kdWxlLW5vLWV4cG9ydCBub3csIGJ1dCBJJ20gbGVhdmluZyB0aGUgc3RyaXBwaW5nCisgIyBjb2RlIGluIHBsYWNlIGZvciBub3csIHNpbmNlIHBhbmdvIGFuZCBhdGsgc3RpbGwgcmVxdWlyZSBnbW9kdWxlLgorIGV4cG9ydCBTRUQKKy1leHBvcnRfZHluYW1pYz1gKC4vbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorK2V4cG9ydF9keW5hbWljPWAoLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisgaWYgdGVzdCAtbiAiJGV4cG9ydF9keW5hbWljIjsgdGhlbgorICAgR0RLX0RFUF9MSUJTPWBlY2hvICRHREtfREVQX0xJQlMgfCBzZWQgLWUgInMvJGV4cG9ydF9keW5hbWljLy8iYAorICAgR1RLX0RFUF9MSUJTPWBlY2hvICRHVEtfREVQX0xJQlMgfCBzZWQgLWUgInMvJGV4cG9ydF9keW5hbWljLy8iYApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrM18zLjE2LjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszXzMuMTYuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDczNmE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrM18zLjE2LjYuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSBndGsrMy5pbmMKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9nbm9tZS9zb3VyY2VzL2d0aysvJHtNQUpfVkVSfS9ndGsrLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9oYXJkY29kZWRfbGlidG9vbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9Eb250LWZvcmNlLWNzZC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmM1OWU1YzhiNWE0NTg1YjYwNjIzZGQ3MDhkZjQwMGIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGQxMjcyNmQwODU2YTk2OGI0MTgwMmFlNWM1OTcxZDdlOWJhYzUzMjcxN2UzMDlkM2Y4MWI5OTg5ZGE1ZmZiZSIKKworUyA9ICIke1dPUktESVJ9L2d0aystJHtQVn0iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d0ay9ndGsuaDtlbmRsaW5lPTI1O21kNT0xZDhkYzBmY2NkYmZhMjYyODdhMjcxZGNlODhhZjczNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nZGsvZ2RrLmg7ZW5kbGluZT0yNTttZDU9YzkyMGNlMzlkYzg4YzZmMDZkM2U3YzUwZTA4MDg2ZjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvdGVzdGd0ay5jO2VuZGxpbmU9MjU7bWQ1PWNiNzMyZGFlZTFkODJhZjdhMmJmOTUzY2YzY2YyNmYxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrXzIuMjQuMjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aytfMi4yNC4yOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzQzNzczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrXzIuMjQuMjguYmIKQEAgLTAsMCArMSwzNCBAQAorcmVxdWlyZSBndGsrLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ndGsvZ3RrLmg7ZW5kbGluZT0yNzttZDU9YzU5ZTBiNDQ5MGRkMTM1YTU3MjZlYmY4NTFmOWIxN2YgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2RrL2dkay5oO2VuZGxpbmU9Mjc7bWQ1PTA3ZGIyODVlYzIwOGZiM2UwYmY3ZDg2MWIwNjE0MjAyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL3Rlc3RndGsuYztlbmRsaW5lPTI3O21kNT0yNjJkYjVkYjVmNzc2Zjk4NjNlNTZkZjMxNDIzZTI0YyIKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL2dub21lL3NvdXJjZXMvZ3RrKy8yLjI0L2d0aystJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3hzZXR0aW5ncy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9oYXJkY29kZWRfbGlidG9vbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90b2dnbGUtZm9udC5kaWZmO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly9kb2MtZml4ZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3RyaWN0LXByb3RvdHlwZXMucGF0Y2ggXAorCSAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmZhY2Y4N2IyZWE2N2U0ZTVjNzg2NmE5MDAzZTY1MjYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjJjNjQ0MWU5OGJjNTIzMmU1ZjliYmE2OTY1MDc1ZGNmNTgwYTg3MjYzOThmNzM3NGQzOWY5MGI4OGVkNDY1NiIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXhrYiAtLWRpc2FibGUtZ2xpYnRlc3QgLS1kaXNhYmxlLWN1cHMgLS1kaXNhYmxlLXhpbmVyYW1hIgorCitMSUJWID0gIjIuMTAuMCIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXmd0ay1pbW1vZHVsZS0uKiBeZ3RrLXByaW50YmFja2VuZC0uKiIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGd0a19saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfScpCisgICAgaW1tb2R1bGVzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZ3RrX2xpYmRpciwgJ2ltbW9kdWxlcycpCisgICAgcHJpbnRtb2R1bGVzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZ3RrX2xpYmRpciwgJ3ByaW50YmFja2VuZHMnKTsKKworICAgIGQuc2V0VmFyKCdHVEtJTU1PRFVMRVNfUEFDS0FHRVMnLCAnICcuam9pbihkb19zcGxpdF9wYWNrYWdlcyhkLCBpbW1vZHVsZXNfcm9vdCwgJ15pbS0oLiopXC5zbyQnLCAnZ3RrLWltbW9kdWxlLSVzJywgJ0dUSyBpbnB1dCBtb2R1bGUgZm9yICVzJykpKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHByaW50bW9kdWxlc19yb290LCAnXmxpYnByaW50YmFja2VuZC0oLiopXC5zbyQnLCAnZ3RrLXByaW50YmFja2VuZC0lcycsICdHVEsgcHJpbnRiYWNrZW5kIG1vZHVsZSBmb3IgJXMnKQorCisgICAgaWYgKGQuZ2V0VmFyKCdERUJJQU5fTkFNRVMnLCBUcnVlKSk6CisgICAgICAgIGQuc2V0VmFyKCdQS0dfJHtQTn0nLCAnJHtNTFBSRUZJWH1saWJndGstMi4wJykKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMtbmF0aXZlXzMuMTYuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMtbmF0aXZlXzMuMTYuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmEzODE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGstaWNvbi11dGlscy1uYXRpdmVfMy4xNi42LmJiCkBAIC0wLDAgKzEsNjMgQEAKK1NVTU1BUlkgPSAiTmF0aXZlIGljb24gdXRpbHMgZm9yIEdUSysiCitERVNDUklQVElPTiA9ICJndGstdXBkYXRlLWljb24tY2FjaGUgYW5kIGd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnIGJ1aWx0IGZyb20gR1RLKyBuYXRpdmVseSwgZm9yIGJ1aWxkIHRpbWUgYW5kIG9uLWhvc3QgcG9zdGluc3Qgc2NyaXB0IGV4ZWN1dGlvbi4iCitTRUNUSU9OID0gImxpYnMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAtbmF0aXZlIGdkay1waXhidWYtbmF0aXZlIGxpYnJzdmctbmF0aXZlIgorCitMSUNFTlNFID0gIkxHUEx2MiAmIExHUEx2MisgJiBMR1BMdjIuMSsiCisKK01BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworU1JDX1VSSSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvZ25vbWUvc291cmNlcy9ndGsrLyR7TUFKX1ZFUn0vZ3RrKy0ke1BWfS50YXIueHogXAorICAgICAgICAgIGZpbGU6Ly9SZW1vdmUtR2RrLWRlcGVuZGVuY3ktZnJvbS1ndGstZW5jb2RlLXN5bWJvbGljLXN2Zy5wYXRjaCIKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYzU5ZTVjOGI1YTQ1ODViNjA2MjNkZDcwOGRmNDAwYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0ZDEyNzI2ZDA4NTZhOTY4YjQxODAyYWU1YzU5NzFkN2U5YmFjNTMyNzE3ZTMwOWQzZjgxYjk5ODlkYTVmZmJlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ndGsvZ3RrLmg7ZW5kbGluZT0yNTttZDU9MWQ4ZGMwZmNjZGJmYTI2Mjg3YTI3MWRjZTg4YWY3MzcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2RrL2dkay5oO2VuZGxpbmU9MjU7bWQ1PWM5MjBjZTM5ZGM4OGM2ZjA2ZDNlN2M1MGUwODA4NmYyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL3Rlc3RndGsuYztlbmRsaW5lPTI1O21kNT1jYjczMmRhZWUxZDgyYWY3YTJiZjk1M2NmM2NmMjZmMSIKKworUyA9ICIke1dPUktESVJ9L2d0aystJHtQVn0iCisKK2luaGVyaXQgcGtnY29uZmlnIG5hdGl2ZQorCitQS0dfQ09ORklHX0ZPUl9CVUlMRCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcGtnLWNvbmZpZy1uYXRpdmUiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIFF1aXRlIHVnbHkgYnV0IGRlZmluZXMgZW5vdWdoIHRvIGNvbXBpbGUgdGhlIHRvb2xzLgorCWlmICEgdGVzdCAtZiBndGsvY29uZmlnLmg7IHRoZW4KKwkJZWNobyAiI2RlZmluZSBHRVRURVhUX1BBQ0tBR0UgXCJndGszMFwiIiA+PiBndGsvY29uZmlnLmgKKwkJZWNobyAiI2RlZmluZSBIQVZFX1VOSVNURF9IIDEiID4+IGd0ay9jb25maWcuaAorCQllY2hvICIjZGVmaW5lIEhBVkVfRlRXX0ggMSIgPj4gZ3RrL2NvbmZpZy5oCisJZmkKKwlpZiAhIHRlc3QgLWYgZ2RrL2NvbmZpZy5oOyB0aGVuCisJCXRvdWNoIGdkay9jb25maWcuaAorCWZpCit9CisKK2RvX2NvbXBpbGUoKSB7CisJJHtCVUlMRF9DQ30gJHtCVUlMRF9DRkxBR1N9ICR7QlVJTERfTERGTEFHU30gXAorCQkke1N9L2d0ay91cGRhdGVpY29uY2FjaGUuYyBcCisJCSQoJHtQS0dfQ09ORklHX0ZPUl9CVUlMRH0gLS1jZmxhZ3MgLS1saWJzIGdkay1waXhidWYtMi4wKSBcCisJCS1vIGd0ay11cGRhdGUtaWNvbi1jYWNoZQorCisJJHtCVUlMRF9DQ30gJHtCVUlMRF9DRkxBR1N9ICR7QlVJTERfTERGTEFHU30gXAorCQkke1N9L2d0ay9lbmNvZGVzeW1ib2xpYy5jIFwKKwkJJCgke1BLR19DT05GSUdfRk9SX0JVSUxEfSAtLWNmbGFncyAtLWxpYnMgZ2lvLTIuMCBnZGstcGl4YnVmLTIuMCkgXAorCQktbyBndGstZW5jb2RlLXN5bWJvbGljLXN2ZworfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke0J9L2d0ay11cGRhdGUtaWNvbi1jYWNoZSAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgJHtEfSR7YmluZGlyfQorCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvMi4xMC4wL2xvYWRlcnMuY2FjaGUKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ndGstZW5jb2RlLXN5bWJvbGljLXN2ZyBcCisJCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLzIuMTAuMC9sb2FkZXJzLmNhY2hlCit9CisKKyMgUHJldmVudCBiaXRiYWtlIGZyb20gb3B0aW1pemluZyBhd2F5IHRoZSBuYXRpdmUgbGlicnN2ZyBzeXNyb290IHBvcHVsYXRpb24KK2RvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmVbZGVwZW5kc10gKz0gImxpYnJzdmctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ay1pY29uLXV0aWxzL1JlbW92ZS1HZGstZGVwZW5kZW5jeS1mcm9tLWd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGstaWNvbi11dGlscy9SZW1vdmUtR2RrLWRlcGVuZGVuY3ktZnJvbS1ndGstZW5jb2RlLXN5bWJvbGljLXN2Zy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzdmODAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGstaWNvbi11dGlscy9SZW1vdmUtR2RrLWRlcGVuZGVuY3ktZnJvbS1ndGstZW5jb2RlLXN5bWJvbGljLXN2Zy5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSA0ZDA5ZmYzMjQ0MTlmZTRlNjcxMjMzMDQ0ZTQyNDM3OGRhNTM5NjliIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgOSBKdW4gMjAxNSAxNDoyMDozMCArMDMwMAorU3ViamVjdDogW1BBVENIXSBSZW1vdmUgR2RrLWRlcGVuZGVuY3kgZnJvbSBndGstZW5jb2RlLXN5bWJvbGljLXN2ZworCitCdWlsZGluZyBndGstZW5jb2RlLXN5bWJvbGljLXN2ZyB3aXRob3V0IGJ1aWxkaW5nIEdkayBpcyB1c2VmdWwKK2FzIG9ubHkgdGhlIGljb24gdG9vbHMgYXJlIG5lZWRlZCBvbiB0aGUgbmF0aXZlIGJ1aWxkOiB0aGlzIG1ha2VzCituYXRpdmUgYnVpbGQgbXVjaCBmYXN0ZXIgYW5kIHJlcXVpcmVzIG11Y2ggbGVzcyBkZXBlbmRlbmNpZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgZ3RrL2VuY29kZXN5bWJvbGljLmMgfCAzNiArKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ndGsvZW5jb2Rlc3ltYm9saWMuYyBiL2d0ay9lbmNvZGVzeW1ib2xpYy5jCitpbmRleCA5ZjdkMDE1Li4xZjA3NTYzIDEwMDY0NAorLS0tIGEvZ3RrL2VuY29kZXN5bWJvbGljLmMKKysrKyBiL2d0ay9lbmNvZGVzeW1ib2xpYy5jCitAQCAtMTksNyArMTksNiBAQAorIAorICNpbmNsdWRlIDxnbGliLmg+CisgI2luY2x1ZGUgPGdkay1waXhidWYvZ2RrLXBpeGRhdGEuaD4KKy0jaW5jbHVkZSA8Z2RrL2dkay5oPgorICNpbmNsdWRlIDxnbGliL2dpMThuLmg+CisgCisgI2lmZGVmIEhBVkVfVU5JU1REX0gKK0BAIC00MywzMCArNDIsMTggQEAgc3RhdGljIEdka1BpeGJ1ZiAqCisgbG9hZF9zeW1ib2xpY19zdmcgKGNoYXIgKmZpbGVfZGF0YSwgZ3NpemUgZmlsZV9sZW4sCisgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwKKy0gICAgICAgICAgICAgICAgICAgY29uc3QgR2RrUkdCQSAgKmZnLAorLSAgICAgICAgICAgICAgICAgICBjb25zdCBHZGtSR0JBICAqc3VjY2Vzc19jb2xvciwKKy0gICAgICAgICAgICAgICAgICAgY29uc3QgR2RrUkdCQSAgKndhcm5pbmdfY29sb3IsCistICAgICAgICAgICAgICAgICAgIGNvbnN0IEdka1JHQkEgICplcnJvcl9jb2xvciwKKysgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3NzX2ZnLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjc3Nfc3VjY2VzcywKKysgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3NzX3dhcm5pbmcsCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNzc19lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAqKmVycm9yKQorIHsKKyAgIEdJbnB1dFN0cmVhbSAqc3RyZWFtOworICAgR2RrUGl4YnVmICpwaXhidWY7CistICBnY2hhciAqY3NzX2ZnOworLSAgZ2NoYXIgKmNzc19zdWNjZXNzOworLSAgZ2NoYXIgKmNzc193YXJuaW5nOworLSAgZ2NoYXIgKmNzc19lcnJvcjsKKyAgIGdjaGFyICpkYXRhOworICAgZ2NoYXIgKnN2Z193aWR0aCwgKnN2Z19oZWlnaHQ7CisgICBnY2hhciAqZXNjYXBlZF9maWxlX2RhdGE7CisgCistICBjc3NfZmcgPSBnZGtfcmdiYV90b19zdHJpbmcgKGZnKTsKKy0KKy0gIGNzc19zdWNjZXNzID0gY3NzX3dhcm5pbmcgPSBjc3NfZXJyb3IgPSBOVUxMOworLQorLSAgY3NzX3dhcm5pbmcgPSBnZGtfcmdiYV90b19zdHJpbmcgKHdhcm5pbmdfY29sb3IpOworLSAgY3NzX2Vycm9yID0gZ2RrX3JnYmFfdG9fc3RyaW5nIChlcnJvcl9jb2xvcik7CistICBjc3Nfc3VjY2VzcyA9IGdka19yZ2JhX3RvX3N0cmluZyAoc3VjY2Vzc19jb2xvcik7CistCisgICAvKiBGZXRjaCBzaXplIGZyb20gdGhlIG9yaWdpbmFsIGljb24gKi8KKyAgIHN0cmVhbSA9IGdfbWVtb3J5X2lucHV0X3N0cmVhbV9uZXdfZnJvbV9kYXRhIChmaWxlX2RhdGEsIGZpbGVfbGVuLCBOVUxMKTsKKyAgIHBpeGJ1ZiA9IGdka19waXhidWZfbmV3X2Zyb21fc3RyZWFtIChzdHJlYW0sIE5VTEwsIGVycm9yKTsKK0BAIC0xMDUsMTAgKzkyLDYgQEAgbG9hZF9zeW1ib2xpY19zdmcgKGNoYXIgKmZpbGVfZGF0YSwgZ3NpemUgZmlsZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICI8L3N2Zz4iLAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgIGdfZnJlZSAoZXNjYXBlZF9maWxlX2RhdGEpOworLSAgZ19mcmVlIChjc3NfZmcpOworLSAgZ19mcmVlIChjc3Nfd2FybmluZyk7CistICBnX2ZyZWUgKGNzc19lcnJvcik7CistICBnX2ZyZWUgKGNzc19zdWNjZXNzKTsKKyAgIGdfZnJlZSAoc3ZnX3dpZHRoKTsKKyAgIGdfZnJlZSAoc3ZnX2hlaWdodCk7CisgCitAQCAtMTY3LDcgKzE1MCw4IEBAIG1ha2Vfc3ltYm9saWNfcGl4YnVmIChjaGFyICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICoqZXJyb3IpCisgCisgeworLSAgR2RrUkdCQSByID0geyAxLDAsMCwxfSwgZyA9IHswLDEsMCwxfTsKKysgIGNvbnN0IGNoYXIgcltdID0gInJnYmEoMjU1LDAsMCwxKSI7CisrICBjb25zdCBjaGFyIGdbXSA9ICJyZ2JhKDAsMjU1LDAsMSkiOworICAgR2RrUGl4YnVmICpsb2FkZWQ7CisgICBHZGtQaXhidWYgKnBpeGJ1ZjsKKyAgIGludCBwbGFuZTsKK0BAIC0xOTYsMTAgKzE4MCwxMCBAQCBtYWtlX3N5bWJvbGljX3BpeGJ1ZiAoY2hhciAqZmlsZSwKKyAgICAgICAgKiB0aGUgInJlc3QiLCBhcyBhbGwgY29sb3IgZnJhY3Rpb25zIHNob3VsZCBhZGQgdXAgdG8gMS4KKyAgICAgICAgKi8KKyAgICAgICBsb2FkZWQgPSBsb2FkX3N5bWJvbGljX3N2ZyAoZmlsZV9kYXRhLCBmaWxlX2xlbiwgd2lkdGgsIGhlaWdodCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmcsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lID09IDAgPyAmciA6ICZnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZSA9PSAxID8gJnIgOiAmZywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmUgPT0gMiA/ICZyIDogJmcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lID09IDAgPyByIDogZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmUgPT0gMSA/IHIgOiBnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZSA9PSAyID8gciA6IGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKTsKKyAgICAgICBpZiAobG9hZGVkID09IE5VTEwpCisgICAgICAgICByZXR1cm4gTlVMTDsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy1zdHViL2d0ay1kb2Mtc3R1Yl9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jLXN0dWIvZ3RrLWRvYy1zdHViX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGYzMjQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy1zdHViL2d0ay1kb2Mtc3R1Yl9naXQuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJTdHViIGltcGxlbWVudGF0aW9uIG9mIGd0ay1kb2MiCitERVNDUklQVElPTiA9ICJTdHViIGltcGxlbWVudGF0aW9uIG9mIGd0ay1kb2MsIGFzIHdlIGRvbid0IHdhbnQgdG8gYnVpbGQgdGhlIEFQSSBkb2N1bWVudGF0aW9uIgorU0VDVElPTiA9ICJ4MTEvYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworUFJPVklERVMgPSAiZ3RrLWRvYyBnb2JqZWN0LWludHJvc3BlY3Rpb24tc3R1YiIKKworU1JDUkVWID0gIjFkZWEyNjY1OTNlZGI3NjZkNmQ4OThjNzk0NTFlZjE5M2ViMTdjZmEiCitQViA9ICIxLjErZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmdub21lLm9yZy8ke0JQTn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzLTIuMjAuMi9nbGliLTIuMzIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lcy0yLjIwLjIvZ2xpYi0yLjMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYjg3OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lcy0yLjIwLjIvZ2xpYi0yLjMyLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK0Zyb20gOGQ0OWEzODZmNDY3Y2JmOGUwODQyZDIyMTgxMjZmNjQzZTUwZjgzNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERvbWluaXF1ZSBMZXVlbmJlcmdlciA8ZGltc3RhckBvcGVuc3VzZS5vcmc+CitEYXRlOiBTdW4sIDI3IE5vdiAyMDExIDE0OjI0OjU3ICswMDAwCitTdWJqZWN0OiBGaXggYnVpbGQgd2l0aCBnbGliIDIuMzE6IE9ubHkgZ2xpYi5oIGNhbiBiZSAjaW5jbHVkZSdkLiBGaXhlcyBidWcgIzY2NDkxNAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKy0tLQorZGlmZiAtLWdpdCBhL2VuZ2luZXMvY2xlYXJsb29rcy9zcmMvYW5pbWF0aW9uLmMgYi9lbmdpbmVzL2NsZWFybG9va3Mvc3JjL2FuaW1hdGlvbi5jCitpbmRleCAxZjdhNDFmLi41NmE5Mjg2IDEwMDY0NAorLS0tIGEvZW5naW5lcy9jbGVhcmxvb2tzL3NyYy9hbmltYXRpb24uYworKysrIGIvZW5naW5lcy9jbGVhcmxvb2tzL3NyYy9hbmltYXRpb24uYworQEAgLTI4LDcgKzI4LDcgQEAKKyAjaW5jbHVkZSAiYW5pbWF0aW9uLmgiCisgCisgI2lmZGVmIEhBVkVfV09SS0lOR19BTklNQVRJT04KKy0jaW5jbHVkZSA8Z2xpYi9ndGltZXIuaD4KKysjaW5jbHVkZSA8Z2xpYi5oPgorIAorIHN0cnVjdCBfQW5pbWF0aW9uSW5mbyB7CisgCUdUaW1lciAqdGltZXI7CistLQorY2dpdCB2MC45LjAuMgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL3N1YnN0aXR1dGUtdGVzdHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lcy0yLjIwLjIvc3Vic3RpdHV0ZS10ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzU1N2JhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL3N1YnN0aXR1dGUtdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIGd0ay1lbmdpbmVzLTIuMjAuMi9jb25maWd1cmUuYWMgZ3RrLWVuZ2luZXMtMi4yMC4yL2NvbmZpZ3VyZS5hYworLS0tIGd0ay1lbmdpbmVzLTIuMjAuMi9jb25maWd1cmUuYWMJMjAxMC0xMC0wMSAxNTo0MjozNy4wMDAwMDAwMDAgKzAzMDAKKysrKyBndGstZW5naW5lcy0yLjIwLjIvY29uZmlndXJlLmFjCTIwMTMtMDgtMjAgMDI6NTA6MjcuOTMwNTEwNTY1ICswMzAwCitAQCAtMTY2LDYgKzE2Niw5IEBACisKKyBBQ19TVUJTVChERVZFTE9QTUVOVF9DRkxBR1MpCisKKytBQ19TVUJTVChbZXhwb3J0ZWRfc3ltYm9sc190ZXN0c10sIFtbJChFWFBPUlRFRF9TWU1CT0xTX1RFU1RTKV1dKQorK0FDX1NVQlNUKFt0b3J0dXJlX3Rlc3RfdGVzdHNdLCBbWyQoVE9SVFVSRV9URVNUX1RFU1RTKV1dKQorKworIEFNX0NPTkZJR19IRUFERVIoW2VuZ2luZXMvc3VwcG9ydC9jb25maWcuaF0pCisKKyBBQ19DT05GSUdfRklMRVMoWworZGlmZiAtTnVyZCBndGstZW5naW5lcy0yLjIwLjIvdGVzdC9NYWtlZmlsZS5hbSBndGstZW5naW5lcy0yLjIwLjIvdGVzdC9NYWtlZmlsZS5hbQorLS0tIGd0ay1lbmdpbmVzLTIuMjAuMi90ZXN0L01ha2VmaWxlLmFtCTIwMTAtMDktMTkgMTg6MTg6MjEuMDAwMDAwMDAwICswMzAwCisrKysgZ3RrLWVuZ2luZXMtMi4yMC4yL3Rlc3QvTWFrZWZpbGUuYW0JMjAxMy0wOC0yMCAwMjo1MDozNi44NDI1MTA4NjUgKzAzMDAKK0BAIC02Niw3ICs2Niw3IEBACisgIyBQcmVmaXggd2l0aCBleHBvcnRlZF8KKyBFWFBPUlRFRF9TWU1CT0xTX1RFU1RTID0gJChwYXRzdWJzdCAlLGV4cG9ydGVkXyUsJChCVUlMRF9FTkdJTkVTKSkKKworLVRFU1RTICs9ICQoRVhQT1JURURfU1lNQk9MU19URVNUUykKKytURVNUUyArPSBAZXhwb3J0ZWRfc3ltYm9sc190ZXN0c0AKKworCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQEAgLTg4LDcgKzg4LDcgQEAKKyBUT1JUVVJFX1RFU1RfVEVTVFMgPSB0b3J0dXJlX2J1aWxkaW4gJChwYXRzdWJzdCAlLHRvcnR1cmVfJSwkKFRPUlRVUkVfVEVTVF9FTkdJTkVTKSkKKworICMgQWRkIFRPUlRVUkVfVEVTVF9FTkdJTkVTIHRvIGxpc3Qgb2YgdGVzdHMKKy1URVNUUyArPSAkKFRPUlRVUkVfVEVTVF9URVNUUykKKytURVNUUyArPSBAdG9ydHVyZV90ZXN0X3Rlc3RzQAorCisgIyBQb3NzaWJsZSBvdGhlciB0ZXN0czoKKyAjICAtIEFuIGV4dGVuc2l2ZSB0aGVtZSBzd2l0Y2ggdGVzdHMgdGhhdCBsb2Fkcy91bmxvYWRzIHRoZSBlbmdpbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzXzIuMjAuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzXzIuMjAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzA0NTRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXNfMi4yMC4yLmJiCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiR1RLKyB0aGVtZSBlbmdpbmVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbm9tZS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSIKKworU0VDVElPTiA9ICJ4MTEvYmFzZSIKK0RFUEVORFMgPSAiaW50bHRvb2wtbmF0aXZlIGd0aysiCisKK1BSID0gInIzIgorCitQQUNLQUdFUyArPSAiJHtQTn0tc2NoZW1hcyIKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5ndGstZW5naW5lLS4qIF5ndGstdGhlbWUtLioiCisKK1JERVBFTkRTX2d0ay10aGVtZS1yZWRtb25kID0gImd0ay1lbmdpbmUtcmVkbW9uZDk1IgorUkRFUEVORFNfZ3RrLXRoZW1lLW1ldGFsID0gImd0ay1lbmdpbmUtbWV0YWwiCitSREVQRU5EU19ndGstdGhlbWUtbWlzdCA9ICJndGstZW5naW5lLW1pc3QiCitSREVQRU5EU19ndGstdGhlbWUtY3J1eCA9ICJndGstZW5naW5lLWNydXgtZW5naW5lIgorUkRFUEVORFNfZ3RrLXRoZW1lLWxpZ2h0aG91c2VibHVlID0gImd0ay1lbmdpbmUtbGlnaHRob3VzZWJsdWUiCitSREVQRU5EU19ndGstdGhlbWUtdGhpbmljZSA9ICJndGstZW5naW5lLXRoaW5pY2UiCitSREVQRU5EU19ndGstdGhlbWUtaW5kdXN0cmlhbCA9ICJndGstZW5naW5lLWluZHVzdHJpYWwiCitSREVQRU5EU19ndGstdGhlbWUtY2xlYXJsb29rcyA9ICJndGstZW5naW5lLWNsZWFybG9va3MiCisKK0ZJTEVTXyR7UE59ID0gIiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2d0ay0yLjAvKi9lbmdpbmVzLyoubGEiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9ndGstMi4wLyovZW5naW5lcy8uZGVidWciCitGSUxFU18ke1BOfS1zY2hlbWFzID0gIiR7ZGF0YWRpcn0vZ3RrLWVuZ2luZXMvKi54bWwiCisKK0NGTEFHU19wcmVwZW5kID0gIi1ESEFWRV9BTklNQVRJT04gIgorCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorCitpbmhlcml0IGdub21lYmFzZQorR05PTUVfQ09NUFJFU1NfVFlQRT0iYnoyIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICBlbmdpbmVzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCAiZ3RrLTIuMC8yLjEwLjAvZW5naW5lcyIpCisgICAgdGhlbWVzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgInRoZW1lcyIpCisKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBlbmdpbmVzX3Jvb3QsICdebGliKC4qKVwuc28kJywgJ2d0ay1lbmdpbmUtJXMnLCAnR1RLICVzIHRoZW1lIGVuZ2luZScsIGV4dHJhX2RlcGVuZHM9JycpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgdGhlbWVzX3Jvb3QsICcoLiopJywgJ2d0ay10aGVtZS0lcycsICdHVEsgdGhlbWUgJXMnLCBhbGxvd19kaXJzPVRydWUsIGV4dHJhX2RlcGVuZHM9JycpCisgICAgIyBUT0RPOiBtYXJrIHRoZW1lIHBhY2thZ2VzIGFzIGFyY2ggYWxsCit9CisKK1NSQ19VUkkgKz0gImZpbGU6Ly9nbGliLTIuMzIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3N1YnN0aXR1dGUtdGVzdHMucGF0Y2giCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI1ZGViMjg3YmM2MDc1ZGMyMTgxMjEzMDYwNGM3ZGM0ZiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjE1YjY4MGFiY2E2Yzc3M2VjYjg1MjUzNTIxZmExMDBkZDNiODU0OWJlZmVlY2M3NTk1YjEwMjA5ZDYyZDY2YjUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstdGhlbWUtdG9ydHVyZXIvZ3RrLXRoZW1lLXRvcnR1cmVyX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay10aGVtZS10b3J0dXJlci9ndGstdGhlbWUtdG9ydHVyZXJfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4OWZkODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstdGhlbWUtdG9ydHVyZXIvZ3RrLXRoZW1lLXRvcnR1cmVyX2dpdC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkdUSysgVGhlbWUgYmVuY2htYXJrIHByb2dyYW0iCitERVBFTkRTID0gImd0aysiCitIT01FUEFHRSA9ICJodHRwOi8vd2lraS5sYXB0b3Aub3JnL2dvL0dUS19mb3JfT0xQQyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vYXBwd2luZG93LmM7ZW5kbGluZT0xMzttZDU9OGMwOTkyMGRlNDYwYzdlYTFmNjRlZTU2OTg2YWFiZDkiCisKK1NSQ1JFViA9ICI5OTk2MmFlMzliYjVhYWRiMzE5MjliMjVjNThlMWEwNTNmOWM5NTQ1IgorUFYgPSAiMC4wLjArZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZGV2LmxhcHRvcC5vcmcvcHJvamVjdHMvc29jLWd0ay8iCitTID0gIiR7V09SS0RJUn0vZ2l0L2d0ay10aGVtZS10b3J0dXJlciIKKworQ0ZMQUdTICs9ICItV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1IHRvcnR1cmVyICR7RH0ke2JpbmRpcn0KK30KKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9oaWNvbG9yLWljb24tdGhlbWUvaGljb2xvci1pY29uLXRoZW1lXzAuMTUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9oaWNvbG9yLWljb24tdGhlbWUvaGljb2xvci1pY29uLXRoZW1lXzAuMTUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcwNDYzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2hpY29sb3ItaWNvbi10aGVtZS9oaWNvbG9yLWljb24tdGhlbWVfMC4xNS5iYgpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIkRlZmF1bHQgaWNvbiB0aGVtZSB0aGF0IGFsbCBpY29uIHRoZW1lcyBhdXRvbWF0aWNhbGx5IGluaGVyaXQgZnJvbSIKK0hPTUVQQUdFID0gImh0dHA6Ly9pY29uLXRoZW1lLmZyZWVkZXNrdG9wLm9yZy93aWtpL0hpY29sb3JUaGVtZSIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMDhhNDQ2ODA5OTEzZmM5YjNjNzE4ZjBlYWVhMDQyNiIKKworU1JDX1VSSSA9ICJodHRwOi8vaWNvbi10aGVtZS5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YWEyYjM5OTNhODgzZDg1MDE3YzdjYzBjZmMwZmI3MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5Y2M0NWFjMzMxOGMzMTIxMmVhMmQ4Y2I5OWU2NDAyMDczMjM5M2VlNzYzMGZhNmMxODEwYWY1Zjk4NzAzM2NjIgorCitpbmhlcml0IGFsbGFyY2ggYXV0b3Rvb2xzCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2ljb25zIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvanNvbi1nbGliL2pzb24tZ2xpYl8xLjAuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2pzb24tZ2xpYi9qc29uLWdsaWJfMS4wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkwOGFjMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2pzb24tZ2xpYi9qc29uLWdsaWJfMS4wLjQuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJKU09OLUdMaWIgaW1wbGVtZW50cyBhIGZ1bGwgSlNPTiBwYXJzZXIgdXNpbmcgR0xpYiBhbmQgR09iamVjdCIKK0RFU0NSSVBUSU9OID0gIlVzZSBKU09OLUdMaWIgaXQgaXMgcG9zc2libGUgdG8gcGFyc2UgYW5kIGdlbmVyYXRlIHZhbGlkIEpTT05cCisgZGF0YSBzdHJ1Y3R1cmVzLCB1c2luZyBhIERPTS1saWtlIEFQSS4gSlNPTi1HTGliIGFsc28gb2ZmZXJzIEdPYmplY3QgXAoraW50ZWdyYXRpb24sIHByb3ZpZGluZyB0aGUgYWJpbGl0eSB0byBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIEdPYmplY3QgXAoraW5zdGFuY2VzIHRvIGFuZCBmcm9tIEpTT04gZGF0YSB0eXBlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vbGl2ZS5nbm9tZS5vcmcvSnNvbkdsaWIiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCIKKworREVQRU5EUyA9ICJnbGliLTIuMCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMzEzMWIwNDE3ZWNkZTNkYTFhZTcyYWNjZWFhMzc1Y2YiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI4MGYzNTkzY2I2YmQxM2YxNDY1ODI4ZTQ2YTlmNzQwZTJlOWJkM2NkMjI1Nzg4OTQ0MmIzZTYyYmQ2ZGUwNWNkIgorCitpbmhlcml0IGdub21lYmFzZSBnZXR0ZXh0IGxpYl9wYWNrYWdlCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZmZpL2xpYmZmaS8wMDAxLW1pcHMtVXNlLWNvbXBpbGVyLWludGVybmFsLWRlZmluZS1mb3ItbGludXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpLzAwMDEtbWlwcy1Vc2UtY29tcGlsZXItaW50ZXJuYWwtZGVmaW5lLWZvci1saW51eC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjk2ZTYzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZmZpL2xpYmZmaS8wMDAxLW1pcHMtVXNlLWNvbXBpbGVyLWludGVybmFsLWRlZmluZS1mb3ItbGludXgucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSBhNWVmYWE5NmZkOTM0ZWIyNDVjMjM0YTUyNzVmY2Y2MjY5OGVmOTg2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMiBBcHIgMjAxNSAyMTozODowMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBtaXBzOiBVc2UgY29tcGlsZXIgaW50ZXJuYWwgZGVmaW5lIGZvciBsaW51eAorCitfX2xpbnV4X18gaXMgZGVmaW5lZCBieSBjb21waWxlciB3aGVuIGJ1aWxkaW5nIGZvcgorbGludXggcGxhdGZvcm1zLCBsZXRzIHVzZSBpdAorCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL21pcHMvZmZpdGFyZ2V0LmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbWlwcy9mZml0YXJnZXQuaCBiL3NyYy9taXBzL2ZmaXRhcmdldC5oCitpbmRleCA3MTdkNjU5Li42ZmFhMzU4IDEwMDY0NAorLS0tIGEvc3JjL21pcHMvZmZpdGFyZ2V0LmgKKysrKyBiL3NyYy9taXBzL2ZmaXRhcmdldC5oCitAQCAtMzIsNyArMzIsNyBAQAorICNlcnJvciAiUGxlYXNlIGRvIG5vdCBpbmNsdWRlIGZmaXRhcmdldC5oIGRpcmVjdGx5IGludG8geW91ciBzb3VyY2UuICBVc2UgZmZpLmggaW5zdGVhZC4iCisgI2VuZGlmCisgCistI2lmZGVmIGxpbnV4CisrI2lmZGVmIF9fbGludXhfXworICMgaW5jbHVkZSA8YXNtL3NnaWRlZnMuaD4KKyAjZWxpZiBkZWZpbmVkKF9fcnRlbXNfXykKKyAvKgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpL2ZpeC1saWJmZmkubGEtbG9jYXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpL2ZpeC1saWJmZmkubGEtbG9jYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1YmZmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmZmaS9saWJmZmkvZml4LWxpYmZmaS5sYS1sb2NhdGlvbi5wYXRjaApAQCAtMCwwICsxLDE4IEBACisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBsaWJmZmktMy4wLjEzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliZmZpLTMuMC4xMy5vcmlnL01ha2VmaWxlLmFtCisrKysgbGliZmZpLTMuMC4xMy9NYWtlZmlsZS5hbQorQEAgLTk4LDcgKzk4LDcgQEAgRkxBR1NfVE9fUEFTUyA9ICQoQU1fTUFLRUZMQUdTKQorIAorIE1BS0VPVkVSUklERVM9CisgCistdG9vbGV4ZWNsaWJfTFRMSUJSQVJJRVMgPSBsaWJmZmkubGEKKytsaWJfTFRMSUJSQVJJRVMgPSBsaWJmZmkubGEKKyBub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJmZmlfY29udmVuaWVuY2UubGEKKyAKKyBsaWJmZmlfbGFfU09VUkNFUyA9IHNyYy9wcmVwX2NpZi5jIHNyYy90eXBlcy5jIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmZmaS9saWJmZmlfMy4yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpXzMuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOTE2Y2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpXzMuMi4xLmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiQSBwb3J0YWJsZSBmb3JlaWduIGZ1bmN0aW9uIGludGVyZmFjZSBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiVGhlIGBsaWJmZmknIGxpYnJhcnkgcHJvdmlkZXMgYSBwb3J0YWJsZSwgaGlnaCBsZXZlbCBwcm9ncmFtbWluZyBpbnRlcmZhY2UgdG8gdmFyaW91cyBjYWxsaW5nIFwKK2NvbnZlbnRpb25zLiAgVGhpcyBhbGxvd3MgYSBwcm9ncmFtbWVyIHRvIGNhbGwgYW55IGZ1bmN0aW9uIHNwZWNpZmllZCBieSBhIGNhbGwgaW50ZXJmYWNlIGRlc2NyaXB0aW9uIGF0IHJ1biBcCit0aW1lLiBGRkkgc3RhbmRzIGZvciBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZS4gIEEgZm9yZWlnbiBmdW5jdGlvbiBpbnRlcmZhY2UgaXMgdGhlIHBvcHVsYXIgbmFtZSBmb3IgdGhlIFwKK2ludGVyZmFjZSB0aGF0IGFsbG93cyBjb2RlIHdyaXR0ZW4gaW4gb25lIGxhbmd1YWdlIHRvIGNhbGwgY29kZSB3cml0dGVuIGluIGFub3RoZXIgbGFuZ3VhZ2UuICBUaGUgYGxpYmZmaScgXAorbGlicmFyeSByZWFsbHkgb25seSBwcm92aWRlcyB0aGUgbG93ZXN0LCBtYWNoaW5lIGRlcGVuZGVudCBsYXllciBvZiBhIGZ1bGx5IGZlYXR1cmVkIGZvcmVpZ24gZnVuY3Rpb24gaW50ZXJmYWNlLiAgXAorQSBsYXllciBtdXN0IGV4aXN0IGFib3ZlIGBsaWJmZmknIHRoYXQgaGFuZGxlcyB0eXBlIGNvbnZlcnNpb25zIGZvciB2YWx1ZXMgcGFzc2VkIGJldHdlZW4gdGhlIHR3byBsYW5ndWFnZXMuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTM2MTBiYjE3NjgzYTAwODllZDY0MDU1NDE2YjJhZTFiIgorCitTUkNfVVJJID0gImZ0cDovL3NvdXJjZXdhcmUub3JnL3B1Yi9saWJmZmkvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1saWJmZmkubGEtbG9jYXRpb24ucGF0Y2ggXAorCSAgIGZpbGU6Ly8wMDAxLW1pcHMtVXNlLWNvbXBpbGVyLWludGVybmFsLWRlZmluZS1mb3ItbGludXgucGF0Y2ggXAorCSAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjgzYjg5NTg3NjA3ZTNlYjY1YzcwZDM2MWYxM2JhYjQzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQwNmViYjhlMWQ5YTIyZDE5ZTM4ZDYzZmRiODM5NTQyNTNmMzliZWRjNWQ0NjIzMmEwNTY0NTY4NTcyMmNhMzciCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWJ1aWxkZGlyIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2xpYmZmaS0ke1BWfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvZ2xhZGUtY3J1ZnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9nbGFkZS1jcnVmdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWQ1ODY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvZ2xhZGUtY3J1ZnQucGF0Y2gKQEAgLTAsMCArMSwxMDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitkaWZmIC11ciBsaWJnbGFkZS0yLjQuMH4vY29uZmlndXJlLmluIGxpYmdsYWRlLTIuNC4wL2NvbmZpZ3VyZS5pbgorLS0tIGxpYmdsYWRlLTIuNC4wfi9jb25maWd1cmUuaW4JMjAwNC0wNS0xNyAxMjozODozMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJnbGFkZS0yLjQuMC9jb25maWd1cmUuaW4JMjAwNC0wNy0yOCAxNjo1MzowOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNDcsNiArMTQ3LDE4IEBACisgQU1fQ09ORElUSU9OQUwoSEFWRV9QWVRIT04sICRoYXZlX3B5dGhvbikKKyBBQ19TVUJTVChQWVRIT04pCisgCisrQUNfTVNHX0NIRUNLSU5HKFtmb3IgY3J1ZnQgaW4gbGliZ3RrXSkKKytBQ19UUllfTElOSyhbCisrI2luY2x1ZGUgPGd0ay9ndGsuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKytdLCAgICAgIFsgZ3RrX3RyZWVfZ2V0X3R5cGUgKCk7IHJldHVybiAwOyBdLAorKyAgICAgICAgWyBBQ19NU0dfUkVTVUxUKHllcykKKysgICAgICAgICAgaGF2ZV9jcnVmdD15ZXMgXSwKKysgICAgICAgIFsgQUNfTVNHX1JFU1VMVChubykKKysJICBBQ19ERUZJTkUoRElTQUJMRV9DUlVGVCwsW2xlYXZlIG91dCBzdXBwb3J0IGZvciBvbGQsIGJyb2tlbiB3aWRnZXRzXSkKKysgICAgICAgICAgaGF2ZV9jcnVmdD1ubyBdKQorK0FDX1NVQlNUKERJU0FCTEVfQ1JVRlQpCisrCisgZG5sIGFkZCBkZWJ1Z2dpbmcgb3B0aW9ucyAuLi4KKyBjaGFuZ2VxdW90ZSgsKWRubAorIGlmIHRlc3QgIngkR0NDIiA9IHh5ZXM7IHRoZW4KK09ubHkgaW4gbGliZ2xhZGUtMi40LjA6IGNvbmZpZ3VyZS5pbi5vcmlnCitkaWZmIC11ciBsaWJnbGFkZS0yLjQuMH4vZ2xhZGUvZ2xhZGUtZ3RrLmMgbGliZ2xhZGUtMi40LjAvZ2xhZGUvZ2xhZGUtZ3RrLmMKKy0tLSBsaWJnbGFkZS0yLjQuMH4vZ2xhZGUvZ2xhZGUtZ3RrLmMJMjAwNC0wMy0xMyAxMzo0NzozNS4wMDAwMDAwMDAgKzAwMDAKKysrKyBsaWJnbGFkZS0yLjQuMC9nbGFkZS9nbGFkZS1ndGsuYwkyMDA0LTA3LTI4IDE2OjUzOjUyLjAwMDAwMDAwMCArMDEwMAorQEAgLTIxMyw2ICsyMTMsOCBAQAorIAlndGtfY2xpc3RfY29sdW1uX3RpdGxlc19oaWRlIChHVEtfQ0xJU1QgKHcpKTsKKyB9CisgCisrI2lmbmRlZiBESVNBQkxFX0NSVUZUCisrCisgc3RhdGljIHZvaWQKKyB0cmVlX3NldF9zZWxlY3Rpb25fbW9kZSAoR2xhZGVYTUwgKnhtbCwgR3RrV2lkZ2V0ICp3LAorIAkJCSBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK0BAIC0yMzgsNiArMjQwLDggQEAKKyAgICAgZ3RrX3RyZWVfc2V0X3ZpZXdfbGluZXMgKEdUS19UUkVFICh3KSwgQk9PTCAodmFsdWUpKTsKKyB9CisgCisrI2VuZGlmCisrCisgc3RhdGljIHZvaWQKKyBsaXN0X3NldF9zZWxlY3Rpb25fbW9kZSAoR2xhZGVYTUwgKnhtbCwgR3RrV2lkZ2V0ICp3LAorIAkJCSBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK0BAIC0yNTQsNiArMjU4LDcgQEAKKyAgICAgZ3RrX2NoZWNrX21lbnVfaXRlbV9zZXRfc2hvd190b2dnbGUgKEdUS19DSEVDS19NRU5VX0lURU0gKHcpLCBCT09MICh2YWx1ZSkpOworIH0KKyAKKysjaWZuZGVmIERJU0FCTEVfQ1JVRlQKKyBzdGF0aWMgdm9pZAorIHRleHRfc2V0X3RleHQgKEdsYWRlWE1MICp4bWwsIEd0a1dpZGdldCAqdywKKyAJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorQEAgLTI2Miw2ICsyNjcsNyBAQAorIAorICAgICBndGtfZWRpdGFibGVfaW5zZXJ0X3RleHQgKEdUS19FRElUQUJMRSAodyksIHZhbHVlLCAtMSwgJnBvcyk7CisgfQorKyNlbmRpZgorIAorIHN0YXRpYyB2b2lkCisgcmFkaW9fbWVudV9pdGVtX3NldF9ncm91cCAoR2xhZGVYTUwgKnhtbCwgR3RrV2lkZ2V0ICp3LAorQEAgLTExMjUsMTMgKzExMzEsMTcgQEAKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX0NMSVNULCAic2VsZWN0aW9uX21vZGUiLCBjbGlzdF9zZXRfc2VsZWN0aW9uX21vZGUpOworICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfQ0xJU1QsICJzaGFkb3dfdHlwZSIsIGNsaXN0X3NldF9zaGFkb3dfdHlwZSk7CisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9DTElTVCwgInNob3dfdGl0bGVzIiwgY2xpc3Rfc2V0X3Nob3dfdGl0bGVzKTsKKysjaWZuZGVmIERJU0FCTEVfQ1JVRlQKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX1RSRUUsICJzZWxlY3Rpb25fbW9kZSIsIHRyZWVfc2V0X3NlbGVjdGlvbl9tb2RlKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX1RSRUUsICJ2aWV3X21vZGUiLCB0cmVlX3NldF92aWV3X21vZGUpOworICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfVFJFRSwgInZpZXdfbGluZSIsIHRyZWVfc2V0X3ZpZXdfbGluZSk7CisrI2VuZGlmCisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9MSVNULCAic2VsZWN0aW9uX21vZGUiLCBsaXN0X3NldF9zZWxlY3Rpb25fbW9kZSk7CisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9DSEVDS19NRU5VX0lURU0sICJhbHdheXNfc2hvd190b2dnbGUiLAorIAkJCQljaGVja19tZW51X2l0ZW1fc2V0X2Fsd2F5c19zaG93X3RvZ2dsZSk7CisrI2lmbmRlZiBESVNBQkxFX0NSVUZUCisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9URVhULCAidGV4dCIsIHRleHRfc2V0X3RleHQpOworKyNlbmRpZgorICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfUkFESU9fTUVOVV9JVEVNLCAiZ3JvdXAiLAorIAkJCQlyYWRpb19tZW51X2l0ZW1fc2V0X2dyb3VwKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX1RPT0xCQVIsICJ0b29sdGlwcyIsIHRvb2xiYXJfc2V0X3Rvb2x0aXBzKTsKK0BAIC0xMjg4LDggKzEyOTgsMTAgQEAKKyAJCQkgICBnbGFkZV9zdGFuZGFyZF9idWlsZF9jaGlsZHJlbiwgTlVMTCk7CisgICAgIGdsYWRlX3JlZ2lzdGVyX3dpZGdldCAoR1RLX1RZUEVfVEVBUk9GRl9NRU5VX0lURU0sIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKKyAJCQkgICBOVUxMLCBOVUxMKTsKKysjaWZuZGVmIERJU0FCTEVfQ1JVRlQKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9URVhULCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCisgCQkJICAgTlVMTCwgTlVMTCk7CisrI2VuZGlmCisgICAgIGdsYWRlX3JlZ2lzdGVyX3dpZGdldCAoR1RLX1RZUEVfVEVYVF9WSUVXLCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCisgCQkJICAgTlVMTCwgTlVMTCk7CisgICAgIGdsYWRlX3JlZ2lzdGVyX3dpZGdldCAoR1RLX1RZUEVfVElQU19RVUVSWSwgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAorQEAgLTEzMDQsOCArMTMxNiwxMCBAQAorIAkJCSAgIGdsYWRlX3N0YW5kYXJkX2J1aWxkX2NoaWxkcmVuLCBOVUxMKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9UT09MX0JVVFRPTiwgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAorIAkJCSAgIE5VTEwsIE5VTEwpOworKyNpZm5kZWYgRElTQUJMRV9DUlVGVAorICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1RSRUUsIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKKyAJCQkgICBOVUxMLCBOVUxMKTsKKysjZW5kaWYKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9UUkVFX1ZJRVcsIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKKyAJCQkgICBOVUxMLCBOVUxMKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9WQlVUVE9OX0JPWCwgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvbm8teG1sMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L25vLXhtbDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM0YzA5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L25vLXhtbDIucGF0Y2gKQEAgLTAsMCArMSw1MDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtdXJOIGxpYmdsYWRlLTIuNC4yLm9yaWcvY29uZmlndXJlLmluIGxpYmdsYWRlLTIuNC4yL2NvbmZpZ3VyZS5pbgorLS0tIGxpYmdsYWRlLTIuNC4yLm9yaWcvY29uZmlndXJlLmluCTIwMDUtMDItMTEgMTI6NDI6NTguMDAwMDAwMDAwICswMTAwCisrKysgbGliZ2xhZGUtMi40LjIvY29uZmlndXJlLmluCTIwMDUtMDMtMjIgMDE6MjI6MDAuMDAwMDAwMDAwICswMTAwCitAQCAtNTIsMTEgKzUyLDMzIEBACisgQUNfUEFUSF9QUk9HKFBLR19DT05GSUcsIHBrZy1jb25maWcsIG5vKQorIAorIFBLR19DSEVDS19NT0RVTEVTKExJQkdMQURFLCBbZG5sCistICBsaWJ4bWwtMi4wID49IHJlcXVpcmVkX2xpYnhtbF92ZXJzaW9uIGRubAorICAgYXRrID49IHJlcXVpcmVkX2F0a192ZXJzaW9uIGRubAorICAgZ3RrKy0yLjAgPj0gcmVxdWlyZWRfZ3RrX3ZlcnNpb24gZG5sCisgICBnbGliLTIuMCA+PSByZXF1aXJlZF9nbGliX3ZlcnNpb25dKQorIAorK2Rpc2FibGVfeG1sMj1ubworK0FDX0FSR19XSVRIKFtsaWJ4bWwyXSwKKysgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtbGlieG1sMl0sIFtEb24ndCB1c2UgbGlieG1sMiwgdXNlIEdsaWIncyBHTWFya3VwUGFyc2VyIGluc3RlYWRdKSwKKysgIFtkaXNhYmxlX3htbDI9eWVzXSwKKysgIFtkaXNhYmxlX3htbDI9bm9dKQorKworK0FDX01TR19DSEVDS0lORyhbaWYgd2UgYXJlIHVzaW5nIGxpYnhtbDJdKQorK2lmIHRlc3QgIngkZGlzYWJsZV94bWwyIiA9PSAieG5vIjsgdGhlbgorKyAgQUNfTVNHX1JFU1VMVCh5ZXMpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhYTUwyLCBsaWJ4bWwtMi4wID49IDIuNC4xMCkKKysgIFBLR0NGR19SRVFVSVJFX0xJQlhNTDI9ImxpYnhtbC0yLjAiCisrICBMSUJHTEFERV9DRkxBR1M9IiRMSUJHTEFERV9DRkxBR1MgJFhNTDJfQ0ZMQUdTIgorKyAgTElCR0xBREVfTElCUz0iJExJQkdMQURFX0xJQlMgJFhNTDJfTElCUyIKKytlbHNlCisrICBMSUJHTEFERV9DRkxBR1M9IiRMSUJHTEFERV9DRkxBR1MgLURVU0VfR01BUktVUF9QQVJTRVIiCisrICBQS0dDRkdfUkVRVUlSRV9MSUJYTUwyPSIiCisrICBBQ19NU0dfUkVTVUxUKG5vKQorK2ZpCisrCisrQUNfU1VCU1QoWE1MMl9MSUJTKQorK0FDX1NVQlNUKFhNTDJfQ0ZMQUdTKQorK0FDX1NVQlNUKFBLR0NGR19SRVFVSVJFX0xJQlhNTDIpCisrCisgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbmF0aXZlIFdpbjMyXSkKKyBjYXNlICIkaG9zdCIgaW4KKyAgICotKi1taW5ndyopCitAQCAtMTE2LDYgKzEzOCwyMSBAQAorICAgZmkKKyBmaQorIAorK2lmIHRlc3QgIngkZGlzYWJsZV94bWwyIiA9PSAieHllcyI7IHRoZW4KKysgIGVjaG8gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIgorKyAgZWNobyAiICBZb3UgY2hvc2UgdG8gZGlzYWJsZSBsaWJ4bWwyIGFuZCB1c2UgR2xpYidzIgorKyAgZWNobyAiICBHTWFya3VwUGFyc2VyIGluc3RlYWQuIiAKKysgIGVjaG8gIAorKyAgZWNobyAiICBQbGVhc2UgYmVhciBpbiBtaW5kIHRoYXQgdXNpbmcgbGliZ2xhZGUgd2l0aCIKKysgIGVjaG8gIiAgR01hcmt1cFBhcnNlciBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZSBvbmx5LiIKKysgIGVjaG8KKysgIGVjaG8gIiAgUGxlYXNlIHBvc3QgcHJvYmxlbXMgb3Igc3VjY2VzcyBzdG9yaWVzIHRvIgorKyAgZWNobyAiICB0aGUgZ2xhZGUtZGV2ZWwgbWFpbGluZyBsaXN0LiBUaGFuayB5b3UuIgorKyAgZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiCisrZmkKKysKKysKKysKKyBHVEtfRE9DX0NIRUNLKDEuMCkKKyAKKyBkbmwgZ2V0dGV4dCBzdHVmZiAuLi4gdGhlcmUgaXMgbm8gbWVzc2FnZSBjYXRhbG9nIGZvciBsaWJnbGFkZSAtLSBsaWJnbGFkZQorZGlmZiAtdXJOIGxpYmdsYWRlLTIuNC4yLm9yaWcvZ2xhZGUvZ2xhZGUtcGFyc2VyLmMgbGliZ2xhZGUtMi40LjIvZ2xhZGUvZ2xhZGUtcGFyc2VyLmMKKy0tLSBsaWJnbGFkZS0yLjQuMi5vcmlnL2dsYWRlL2dsYWRlLXBhcnNlci5jCTIwMDQtMTEtMTEgMTE6NTY6MTMuMDAwMDAwMDAwICswMTAwCisrKysgbGliZ2xhZGUtMi40LjIvZ2xhZGUvZ2xhZGUtcGFyc2VyLmMJMjAwNS0wMy0yMiAwMToyMDowMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNCw3ICszNCwxNSBAQAorICMgIGRlZmluZSBkZ2V0dGV4dChEb21haW4sIFN0cmluZykgKFN0cmluZykKKyAjZW5kaWYKKyAKKy0jaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgorKyNpZmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysjICBpbmNsdWRlIDx6bGliLmg+CisrI2Vsc2UKKysjICBpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CisrI2VuZGlmCisrCisrI2lmZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKyMgIGRlZmluZSB4bWxDaGFyIGdjaGFyCisrI2VuZGlmCisgCisgI2luY2x1ZGUgImdsYWRlLXBhcnNlci5oIgorICNpbmNsdWRlICJnbGFkZS1wcml2YXRlLmgiCitAQCAtNTA4LDcgKzUxNiw5IEBACisgICAgIGNhc2UgUEFSU0VSX1NUQVJUOgorIAlpZiAoIXN0cmNtcChuYW1lLCAiZ2xhZGUtaW50ZXJmYWNlIikpIHsKKyAJICAgIHN0YXRlLT5zdGF0ZSA9IFBBUlNFUl9HTEFERV9JTlRFUkZBQ0U7CistI2lmIDAKKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKyAjaWYgMAorIAkgICAgLyogY2hlY2sgZm9yIGNvcnJlY3QgWE1MIG5hbWVzcGFjZSAqLworIAkgICAgZm9yIChpID0gMDsgYXR0cnMgJiYgYXR0cnNbaV0gIT0gTlVMTDsgaSArPSAyKSB7CisgCQlpZiAoIXN0cmNtcChhdHRyc1tpXSwgInhtbG5zIikgJiYKK0BAIC01MTgsNyArNTI4LDkgQEAKKyAJCSAgICBnX3dhcm5pbmcoInVua25vd24gYXR0cmlidXRlIGAlcycgZm9yIDxnbGFkZS1pbnRlcmZhY2U+IiwKKyAJCQkgICAgICBhdHRyc1tpXSk7CisgCSAgICB9CisrICNlbmRpZgorICNlbmRpZgorKworIAl9IGVsc2UgeworIAkgICAgZ193YXJuaW5nKCJFeHBlY3RlZCA8Z2xhZGUtaW50ZXJmYWNlPi4gIEdvdCA8JXM+LiIsIG5hbWUpOworIAkgICAgc3RhdGUtPnByZXZfc3RhdGUgPSBzdGF0ZS0+c3RhdGU7CitAQCAtMTA2MywxMiArMTA3NSwxOCBAQAorICAgICB9CisgfQorIAorKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrCisgc3RhdGljIHhtbEVudGl0eVB0cgorIGdsYWRlX3BhcnNlcl9nZXRfZW50aXR5KEdsYWRlUGFyc2VTdGF0ZSAqc3RhdGUsIGNvbnN0IHhtbENoYXIgKm5hbWUpCisgeworICAgICByZXR1cm4geG1sR2V0UHJlZGVmaW5lZEVudGl0eShuYW1lKTsKKyB9CisgCisrI2VuZGlmIC8qICFkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKworIHN0YXRpYyB2b2lkCisgZ2xhZGVfcGFyc2VyX3dhcm5pbmcoR2xhZGVQYXJzZVN0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqbXNnLCAuLi4pCisgeworQEAgLTEwNzksNiArMTA5NywxMCBAQAorICAgICB2YV9lbmQoYXJncyk7CisgfQorIAorKyNlbmRpZiAvKiAhZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCisrCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysKKyBzdGF0aWMgdm9pZAorIGdsYWRlX3BhcnNlcl9lcnJvcihHbGFkZVBhcnNlU3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICptc2csIC4uLikKKyB7CitAQCAtMTA4OSw2ICsxMTExLDEwIEBACisgICAgIHZhX2VuZChhcmdzKTsKKyB9CisgCisrI2VuZGlmIC8qICFkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKworIHN0YXRpYyB2b2lkCisgZ2xhZGVfcGFyc2VyX2ZhdGFsX2Vycm9yKEdsYWRlUGFyc2VTdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKm1zZywgLi4uKQorIHsKK0BAIC0xMDk5LDYgKzExMjUsMTAgQEAKKyAgICAgdmFfZW5kKGFyZ3MpOworIH0KKyAKKysjZW5kaWYgLyogIWRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLworKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrCisgc3RhdGljIHhtbFNBWEhhbmRsZXIgZ2xhZGVfcGFyc2VyID0geworICAgICAoaW50ZXJuYWxTdWJzZXRTQVhGdW5jKU5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnRlcm5hbFN1YnNldCAqLworICAgICAoaXNTdGFuZGFsb25lU0FYRnVuYylOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpc1N0YW5kYWxvbmUgKi8KK0BAIC0xMTI2LDYgKzExNTYsODIgQEAKKyAgICAgKGZhdGFsRXJyb3JTQVhGdW5jKWdsYWRlX3BhcnNlcl9mYXRhbF9lcnJvciwgICAgICAgLyogZmF0YWxFcnJvciAqLworIH07CisgCisrI2Vsc2UgLyogVVNFX0dNQVJLVVBfUEFSU0VSICovCisrCisrc3RhdGljIHZvaWQKKytnbGFkZV9wYXJzZXJfc3RhcnRfZWxlbWVudF93cmFwcGVyKEdNYXJrdXBQYXJzZUNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICpuYW1lLCAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAqKmF0dHJfbmFtZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgKiphdHRyX3ZhbHVlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgIHN0YXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICoqZXJyb3IpCisreworKyAgICBndWludCBpID0gMDsKKysKKysgICAgLyogUGFjayBhdHRyaWJ1dGUgbmFtZXMvdmFsdWVzIGZyb20gdHdvIHNlcGFyYXRlCisrICAgICAqICBhcnJheXMgKEdNYXJrdXBQYXJzZXIgc3R5bGUpIGludG8gb25lIHNpbmdsZQorKyAgICAgKiAgYXJyYXkgKGxpYnhtbCBTQVhQYXJzZXIgc3R5bGUpLiBUaGlzIGlzIG5vdAorKyAgICAgKiAgdmVyeSBlZmZpY2llbnQsIGJ1dCB3ZSBkbyBpdCB0byBtYWtlIHRoZQorKyAgICAgKiAgR01hcmt1cFBhcnNlciBjb2RlIGFzIGxpdHRsZSBpbnZhc2l2ZSBhcworKyAgICAgKiAgcG9zc2libGUuICovCisrCisrICAgIHdoaWxlIChhdHRyX25hbWVzW2ldICE9IE5VTEwpIHsKKysgICAgICArK2k7CisrICAgIH0KKysKKysgICAgaWYgKDEpCisrICAgIHsKKysgICAgICAgIGNvbnN0IGdjaGFyICphdHRyWyhpKjIpKzFdOworKyAgICAgICAgZ3VpbnQgaiwgazsKKysgICAgICAgCisrICAgICAgICBmb3IgKGo9MCwgaz0wOyAgayA8IGk7ICBqICs9IDIpCisrICAgICAgICB7CisrICAgICAgICAgICAgYXR0cltqXSA9IGF0dHJfbmFtZXNba107CisrICAgICAgICAgICAgYXR0cltqKzFdID0gYXR0cl92YWx1ZXNba107CisrICAgICAgICAgICAgKytrOworKyAgICAgICAgfQorKyAgICAgICAgYXR0cltpKjJdID0gTlVMTDsKKysKKysgICAgICAgIGdsYWRlX3BhcnNlcl9zdGFydF9lbGVtZW50KChHbGFkZVBhcnNlU3RhdGUqKXN0YXRlLCBuYW1lLCBhdHRyKTsKKysgICAgfQorK30KKysKKytzdGF0aWMgdm9pZAorK2dsYWRlX3BhcnNlcl9lbmRfZWxlbWVudF93cmFwcGVyKEdNYXJrdXBQYXJzZUNvbnRleHQgKmNvbnRleHQsIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKm5hbWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgc3RhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICoqZXJyKQorK3sKKysgICAgZ2xhZGVfcGFyc2VyX2VuZF9lbGVtZW50KChHbGFkZVBhcnNlU3RhdGUqKXN0YXRlLCBuYW1lKTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytnbGFkZV9wYXJzZXJfY2hhcmFjdGVyc193cmFwcGVyKEdNYXJrdXBQYXJzZUNvbnRleHQgKmNvbnRleHQsIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAqY2hhcnMsIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgICAgICAgICAgICAgICAgbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgc3RhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgKiplcnIpCisreworKyAgICBnbGFkZV9wYXJzZXJfY2hhcmFjdGVycygoR2xhZGVQYXJzZVN0YXRlKilzdGF0ZSwgY2hhcnMsIChpbnQpIGxlbik7CisrfQorKworK3N0YXRpYyB2b2lkCisrZ2xhZGVfcGFyc2VyX2Vycm9yKEdNYXJrdXBQYXJzZUNvbnRleHQgKmNvbnRleHQsIEdFcnJvciAqZXJyLCBncG9pbnRlciBkYXRhKQorK3sKKysgICAgZ19sb2coIkdsYWRlLVBhcnNlciIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FMLCAiJXMiLCBlcnItPm1lc3NhZ2UpOworK30KKysKKytzdGF0aWMgY29uc3QgR01hcmt1cFBhcnNlciAgIGdsYWRlX3BhcnNlciA9IHsKKysgICAgZ2xhZGVfcGFyc2VyX3N0YXJ0X2VsZW1lbnRfd3JhcHBlciwgIC8qIGVsZW1lbnQgb3BlbiAgICovCisrICAgIGdsYWRlX3BhcnNlcl9lbmRfZWxlbWVudF93cmFwcGVyLCAgICAvKiBlbGVtZW50IGNsb3NlICAqLworKyAgICBnbGFkZV9wYXJzZXJfY2hhcmFjdGVyc193cmFwcGVyLCAgICAgLyogdGV4dCBjb250ZW50ICAgKi8KKysgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBhc3N0aHJvdWdoICAgICovCisrICAgIGdsYWRlX3BhcnNlcl9lcnJvciwgICAgICAgICAgICAgICAgICAvKiBwYXJzZSBlcnJvciAgICAqLworK307CisrCisrI2VuZGlmIC8qIFVTRV9HTUFSS1VQX1BBUlNFUiAqLworKworKworIHN0YXRpYyB2b2lkCisgd2lkZ2V0X2luZm9fZnJlZShHbGFkZVdpZGdldEluZm8gKmluZm8pCisgeworQEAgLTExOTEsNiArMTI5Nyw5IEBACisgICoKKyAgKiBSZXR1cm5zOiB0aGUgR2xhZGVJbnRlcmZhY2Ugc3RydWN0dXJlIGZvciB0aGUgWE1MIGZpbGUuCisgICovCisrCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysKKyBHbGFkZUludGVyZmFjZSAqCisgZ2xhZGVfcGFyc2VyX3BhcnNlX2ZpbGUoY29uc3QgZ2NoYXIgKmZpbGUsIGNvbnN0IGdjaGFyICpkb21haW4pCisgeworQEAgLTEyMjIsNiArMTMzMSwzMSBAQAorICAgICByZXR1cm4gc3RhdGUuaW50ZXJmYWNlOworIH0KKyAKKysjZWxzZSAvKiBkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KKysKKytHbGFkZUludGVyZmFjZSAqCisrZ2xhZGVfcGFyc2VyX3BhcnNlX2ZpbGUoY29uc3QgZ2NoYXIgKmZpbGUsIGNvbnN0IGdjaGFyICpkb21haW4pCisreworKyAgICBHbGFkZUludGVyZmFjZSAgKmludGVyZmFjZTsKKysgICAgR0Vycm9yICAgICAgICAgICplcnIgICAgID0gTlVMTDsKKysgICAgZ2NoYXIgICAgICAgICAgICpjb250ZW50ID0gTlVMTDsKKysgICAgZ3NpemUgICAgICAgICAgICBjbGVuOworKworKyAgICBpZiAoIWdfZmlsZV9nZXRfY29udGVudHMoZmlsZSwgJmNvbnRlbnQsICZjbGVuLCAmZXJyKSkgeworKyAgICAgICAgZ193YXJuaW5nKCJjb3VsZCBub3QgbG9hZCBnbGFkZSBmaWxlOiAlcyIsIGVyci0+bWVzc2FnZSk7CisrICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyKTsKKysgICAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrCisrICAgIGludGVyZmFjZSA9IGdsYWRlX3BhcnNlcl9wYXJzZV9idWZmZXIoY29udGVudCwgKGdpbnQpIGNsZW4sIGRvbWFpbik7CisrCisrICAgIGdfZnJlZShjb250ZW50KTsKKysKKysgICAgcmV0dXJuIGludGVyZmFjZTsKKyt9CisrCisrI2VuZGlmIC8qIFVTRV9HTUFSS1VQX1BBUlNFUiAqLworKworIC8qKgorICAqIGdsYWRlX3BhcnNlcl9wYXJzZV9idWZmZXIKKyAgKiBAYnVmZmVyOiBhIGJ1ZmZlciBpbiBtZW1vcnkgY29udGFpbmluZyBYTUwgZGF0YS4KK0BAIC0xMjM3LDYgKzEzNzEsOSBAQAorICAqCisgICogUmV0dXJuczogdGhlIEdsYWRlSW50ZXJmYWNlIHN0cnVjdHVyZSBmb3IgdGhlIFhNTCBidWZmZXIuCisgICovCisrCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysKKyBHbGFkZUludGVyZmFjZSAqCisgZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcihjb25zdCBnY2hhciAqYnVmZmVyLCBnaW50IGxlbiwgY29uc3QgZ2NoYXIgKmRvbWFpbikKKyB7CitAQCAtMTI2Myw2ICsxNDAwLDE2MSBAQAorICAgICByZXR1cm4gc3RhdGUuaW50ZXJmYWNlOworIH0KKyAKKysjZWxzZSAvKiBkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KKysKKysKKytzdGF0aWMgR2xhZGVJbnRlcmZhY2UgKgorK2dsYWRlX3BhcnNlcl9wYXJzZV9idWZmZXJfaW50ZXJuYWwoY29uc3QgZ2NoYXIgKmJ1ZmZlciwgZ2ludCBsZW4sIGNvbnN0IGdjaGFyICpkb21haW4pCisreworKwlHTWFya3VwUGFyc2VDb250ZXh0ICAqY29udGV4dDsKKysJR2xhZGVQYXJzZVN0YXRlICAgICAgIHN0YXRlID0geyAwIH07CisrCUdFcnJvciAgICAgICAgICAgICAgICplcnIgICA9IE5VTEw7CisrCisrCXN0YXRlLmludGVyZmFjZSA9IE5VTEw7CisrCWlmIChkb21haW4pCisrCQlzdGF0ZS5kb21haW4gPSBkb21haW47CisrCWVsc2UKKysJCXN0YXRlLmRvbWFpbiA9IHRleHRkb21haW4oTlVMTCk7CisrCisrCS8qIEZJWE1FOiBUaGlzIHN0cnN0cigpIGlzIG5vdCBzYWZlLCBhcyBpdCBpZ25vcmVzIHRoZSBsZW4KKysJICogICAgICAgIGFyZ3VtZW50IGFuZCBhc3N1bWVzIHRoZSBidWZmZXIgaXMgTlVMLXRlcm1pbmF0ZWQgKi8KKysJaWYgKHN0cnN0cihidWZmZXIsICI8P3htbCIpID09IE5VTEwpIHsKKysJCWdfd2FybmluZygiTm8gWE1MIGhlYWRlciBmb3VuZCBpbiBkb2N1bWVudCEiKTsKKysJCXJldHVybiBOVUxMOworKwl9CisrCisrCWNvbnRleHQgPSBnX21hcmt1cF9wYXJzZV9jb250ZXh0X25ldygmZ2xhZGVfcGFyc2VyLCAoR01hcmt1cFBhcnNlRmxhZ3MpIDAsICZzdGF0ZSwgTlVMTCk7CisrCisrCWdsYWRlX3BhcnNlcl9zdGFydF9kb2N1bWVudCgmc3RhdGUpOworKworKwlpZiAoIWdfbWFya3VwX3BhcnNlX2NvbnRleHRfcGFyc2UoY29udGV4dCwgYnVmZmVyLCAoZ3NzaXplKSBsZW4sICZlcnIpKSB7CisrCQlnX3dhcm5pbmcoImRvY3VtZW50IG5vdCB3ZWxsIGZvcm1lZDogJXMiLCBlcnItPm1lc3NhZ2UpOworKwkJZ19lcnJvcl9mcmVlKGVycik7CisrCQlpZiAoc3RhdGUuaW50ZXJmYWNlKQorKwkJCWdsYWRlX2ludGVyZmFjZV9kZXN0cm95IChzdGF0ZS5pbnRlcmZhY2UpOworKwkJcmV0dXJuIE5VTEw7CisrCX0KKysKKysJZ2xhZGVfcGFyc2VyX2VuZF9kb2N1bWVudCgmc3RhdGUpOworKworKwlpZiAoc3RhdGUuc3RhdGUgIT0gUEFSU0VSX0ZJTklTSCkgeworKwkJZ193YXJuaW5nKCJkaWQgbm90IGZpbmlzaCBpbiBQQVJTRVJfRklOSVNIIHN0YXRlISIpOworKworKwkJaWYgKHN0YXRlLmludGVyZmFjZSkKKysJCQlnbGFkZV9pbnRlcmZhY2VfZGVzdHJveShzdGF0ZS5pbnRlcmZhY2UpOworKworKwkJcmV0dXJuIE5VTEw7CisrCX0KKysKKysJcmV0dXJuIHN0YXRlLmludGVyZmFjZTsKKyt9CisrCisrc3RydWN0IF9nemlwX3JmYzE5NTJfaGRyCisreworKwlndWludDgJaWQxLCBpZDIsIGNtLCBmbGFnczsKKysJZ3VpbnQzMiBtdGltZTsKKysJZ3VpbnQ4ICB4ZmxhZ3M7CisrCWd1aW50OCAgb3M7CisrfTsKKysKKytzdGF0aWMgR2xhZGVJbnRlcmZhY2UgKgorK2dsYWRlX3BhcnNlcl9wYXJzZV9nemlwcGVkX2J1ZmZlcihjb25zdCBnY2hhciAqYnVmZmVyLCBnaW50IGxlbiwgY29uc3QgZ2NoYXIgKmRvbWFpbikKKyt7CisrCXN0cnVjdCBfZ3ppcF9yZmMxOTUyX2hkciAqaGRyID0gKHN0cnVjdCBfZ3ppcF9yZmMxOTUyX2hkciopYnVmZmVyOworKwlzdHJ1Y3Qgel9zdHJlYW1fcyAgICAgICAgIHpzdHJlYW07CisrCUdsYWRlSW50ZXJmYWNlICAgICAgICAgICAqaW50ZXJmYWNlOworKwljb25zdCBndWludDggICAgICAgICAgICAgKmNidWY7ICAgICAgICAgICAgICAvKiBzdGFydCBvZiBjb21wcmVzc2VkIGRhdGEgKi8KKysJZ3VpbnQ4ICAgICAgICAgICAgICAgICAgICpkZWNvbXByZXNzX2J1ZjsKKysJZ3Vsb25nICAgICAgICAgICAgICAgICAgICBkZWNvbXByZXNzX2xlbiA9IDA7CisrCWdpbnQgICAgICAgICAgICAgICAgICAgICAgcmV0OworKworKwlnX2Fzc2VydChoZHIgIT0gTlVMTCAmJiBoZHItPmlkMSA9PSAweDFmICYmIGhkci0+aWQyID09IDB4OGIpOworKworKwlpZiAoaGRyLT5jbSAhPSBaX0RFRkxBVEVEKSB7CisrCQlnX3dhcm5pbmcoIlVua25vd24gZGVjb21wcmVzc2lvbiBtZXRob2QgJXUiLCAoZ3VpbnQpIGhkci0+Y20pOworKwkJcmV0dXJuIE5VTEw7CisrCX0KKysKKysJLyogVW5jb21wcmVzc2VkIHNpemUgKG1vZHVsbyAyXjMyKSBpcyBsYXN0CisrCSAqICA0IGJ5dGVzIG9mIGd6aXBwZWQgZmlsZSwgYW5kIGxpdHRsZSBlbmRpYW4uCisrCSAqICBTZWUgUkZDIDE5NTIgKi8KKysJZGVjb21wcmVzc19sZW4gPSBHVUlOVDMyX0ZST01fTEUoKigoZ3VpbnQzMiopKCgoZ3VpbnQ4KilidWZmZXIpICsgbGVuIC0gNCkpKTsKKysKKysJLyogcGFyYW5vaWQgbW9kZTogZ2xhZGUgZmlsZXMgPiA1TUIgYXJlIHVubGlrZWx5ICovCisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsKGRlY29tcHJlc3NfbGVuIDwgNSoxMDI0KjEwMjQsIE5VTEwpOworKworKwlkZWNvbXByZXNzX2J1ZiA9IGdfbWFsbG9jMChkZWNvbXByZXNzX2xlbiArIDEpOyAvKiArMSBmb3IgTlVMLXRlcm1pbmF0b3IgKi8KKysKKysJLyogZmluZCBzdGFydCBvZiBjb21wcmVzc2VkIGRhdGEsIHNraXBwaW5nIGhlYWRlciBzdHVmZiAqLworKwljYnVmID0gKGd1aW50OCopYnVmZmVyICsgMTA7CisrCWlmIChoZHItPmZsYWdzICYgMHgwNCkgeworKwkJZ3VpbnQxNiB4bGVuID0gR1VJTlQxNl9GUk9NX0xFKCooKGd1aW50MTYqKWNidWYpKTsKKysJCWNidWYgKz0geGxlbiArIDI7CisrCX0KKysJaWYgKGhkci0+ZmxhZ3MgJiAweDA4KSB7CisrCQlndWludDE2IG9uYW1lbGVuID0gc3RybGVuKGNidWYpOworKwkJY2J1ZiArPSBvbmFtZWxlbiArIDE7CisrCX0KKysJaWYgKGhkci0+ZmxhZ3MgJiAweDEwKSB7CisrCQlndWludDE2IGNvbW1lbnRsZW4gPSBzdHJsZW4oY2J1Zik7CisrCQljYnVmICs9IGNvbW1lbnRsZW4gKyAxOworKwl9CisrCWlmIChoZHItPmZsYWdzICYgMHgwMikKKysJeworKwkJY2J1ZiArPSAyOyAvKiBza2lwIGhlYWRlciBDUkMxNiAqLworKwl9CisrCisrCXpzdHJlYW0ubmV4dF9pbiAgPSAodm9pZCopY2J1ZjsKKysJenN0cmVhbS5hdmFpbF9pbiA9ICh1TG9uZ2YpIGxlbiAtICgodm9pZCopY2J1Zi0odm9pZCopYnVmZmVyKSAtIDQgLSA0ICsxOyAKKysJenN0cmVhbS5uZXh0X291dCA9IGRlY29tcHJlc3NfYnVmOworKwl6c3RyZWFtLmF2YWlsX291dD0gZGVjb21wcmVzc19sZW47CisrCXpzdHJlYW0uemFsbG9jICAgPSBaX05VTEw7CisrCXpzdHJlYW0uemZyZWUgICAgPSBaX05VTEw7CisrCXpzdHJlYW0ub3BhcXVlICAgPSBaX05VTEw7CisrCisrCXJldCA9IGluZmxhdGVJbml0MigmenN0cmVhbSwgLU1BWF9XQklUUyk7CisrCisrCWlmIChyZXQgIT0gWl9PSykgeworKwkJZ193YXJuaW5nKCJpbmZsYXRlSW5pdDIoKSBmYWlsZWQuIHpsaWIgZXJyb3IgY29kZTogJWQiLCByZXQpOworKwkJZ19mcmVlKGRlY29tcHJlc3NfYnVmKTsKKysJCXJldHVybiBOVUxMOworKwl9CisrCisrCXJldCA9IGluZmxhdGUoJnpzdHJlYW0sIFpfRklOSVNIKTsKKysKKysJaWYgKHJldCAhPSBaX1NUUkVBTV9FTkQpIHsKKysJCWdfd2FybmluZygiemxpYiBkZWNvbXByZXNzaW9uIGZhaWxlZC4gemxpYiBlcnJvciBjb2RlOiAlZCIsIHJldCk7CisrCQlnX2ZyZWUoZGVjb21wcmVzc19idWYpOworKwkJcmV0dXJuIE5VTEw7CisrCX0KKysKKysJaW50ZXJmYWNlID0gZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcl9pbnRlcm5hbChkZWNvbXByZXNzX2J1ZiwgZGVjb21wcmVzc19sZW4sIGRvbWFpbik7CisrCisrCWdfZnJlZShkZWNvbXByZXNzX2J1Zik7CisrCisrCXJldHVybiBpbnRlcmZhY2U7CisrfQorKworK0dsYWRlSW50ZXJmYWNlICoKKytnbGFkZV9wYXJzZXJfcGFyc2VfYnVmZmVyKGNvbnN0IGdjaGFyICpidWZmZXIsIGdpbnQgbGVuLCBjb25zdCBnY2hhciAqZG9tYWluKQorK3sKKysJZ19yZXR1cm5fdmFsX2lmX2ZhaWwoYnVmZmVyICE9IE5VTEwsIE5VTEwpOworKwlnX3JldHVybl92YWxfaWZfZmFpbChsZW4gPiAwLCBOVUxMKTsKKysKKysJLyogQ2hlY2sgaWYgYnVmZmVyIGlzIGd6aXBwZWQgKi8KKysJaWYgKGJ1ZmZlclswXSA9PSAweDFmICYmIGJ1ZmZlclsxXSA9PSAoZ2NoYXIpMHg4YikgeworKwkJcmV0dXJuIGdsYWRlX3BhcnNlcl9wYXJzZV9nemlwcGVkX2J1ZmZlcihidWZmZXIsIGxlbiwgZG9tYWluKTsKKysJfQorKworKwkvKiBCdWZmZXIgaXMgY2xlYXJ0ZXh0LiAqLworKwlyZXR1cm4gZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcl9pbnRlcm5hbChidWZmZXIsIGxlbiwgZG9tYWluKTsKKyt9CisrCisrI2VuZGlmIC8qIFVTRV9HTUFSS1VQX1BBUlNFUiAqLworKworKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrCisgc3RhdGljIHZvaWQKKyBkdW1wX3dpZGdldCh4bWxOb2RlICpwYXJlbnQsIEdsYWRlV2lkZ2V0SW5mbyAqaW5mbywgZ2ludCBpbmRlbnQpCisgeworQEAgLTEzODIsNiArMTY3NCw4IEBACisgCXhtbE5vZGVBZGRDb250ZW50KHdpZGdldCwgIiAgIik7CisgfQorIAorKyNlbmRpZiAvKiAhZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCisrCisgLyoqCisgICogZ2xhZGVfaW50ZXJmYWNlX2R1bXAKKyAgKiBAaW50ZXJmYWNlOiB0aGUgR2xhZGVJbnRlcmZhY2UKK0BAIC0xMzkwLDYgKzE2ODQsOSBAQAorICAqIFRoaXMgZnVuY3Rpb24gZHVtcHMgdGhlIGNvbnRlbnRzIG9mIGEgR2xhZGVJbnRlcmZhY2UgaW50byBhIGZpbGUgYXMKKyAgKiBYTUwuICBJdCBpcyBpbnRlbmRlZCBtYWlubHkgYXMgYSBkZWJ1Z2dpbmcgdG9vbC4KKyAgKi8KKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKworIHZvaWQKKyBnbGFkZV9pbnRlcmZhY2VfZHVtcChHbGFkZUludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBnY2hhciAqZmlsZW5hbWUpCisgeworQEAgLTE0MjgsNiArMTcyNSwxNyBAQAorICAgICB4bWxGcmVlRG9jKGRvYyk7CisgfQorIAorKyNlbHNlIC8qIGRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLworKworK3ZvaWQKKytnbGFkZV9pbnRlcmZhY2VfZHVtcChHbGFkZUludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBnY2hhciAqZmlsZW5hbWUpCisreworKyAgICBnX3dhcm5pbmcoImdsYWRlX2ludGVyZmFjZV9kdW1wKCkgaXMgb25seSBhdmFpbGFibGUgd2l0aCBsaWJ4bWwyLiIpOworK30KKysKKysjZW5kaWYgLyogVVNFX0dNQVJLVVBfUEFSU0VSICovCisrCisrCisgI2lmIDAKKyBpbnQKKyBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgeworZGlmZiAtdXJOIGxpYmdsYWRlLTIuNC4yLm9yaWcvbGliZ2xhZGUtMi4wLnBjLmluIGxpYmdsYWRlLTIuNC4yL2xpYmdsYWRlLTIuMC5wYy5pbgorLS0tIGxpYmdsYWRlLTIuNC4yLm9yaWcvbGliZ2xhZGUtMi4wLnBjLmluCTIwMDEtMTItMTIgMTU6Mjg6MjMuMDAwMDAwMDAwICswMTAwCisrKysgbGliZ2xhZGUtMi40LjIvbGliZ2xhZGUtMi4wLnBjLmluCTIwMDUtMDMtMjIgMDE6MjA6MDAuMDAwMDAwMDAwICswMTAwCitAQCAtMTEsNyArMTEsNyBAQAorIE5hbWU6IExpYmdsYWRlCisgRGVzY3JpcHRpb246IGEgbGlicmFyeSBmb3IgZHluYW1pY2FsbHkgbG9hZGluZyBHTEFERSBpbnRlcmZhY2UgZmlsZXMKKyBWZXJzaW9uOiBAVkVSU0lPTkAKKy1SZXF1aXJlczogZ3RrKy0yLjAgbGlieG1sLTIuMAorK1JlcXVpcmVzOiBndGsrLTIuMCBAUEtHQ0ZHX1JFUVVJUkVfTElCWE1MMkAKKyBMaWJzOiAtTCR7bGliZGlyfSAtbGdsYWRlLTIuMAorIENmbGFnczogLUkke2luY2x1ZGVkaXJ9L2xpYmdsYWRlLTIuMAorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvcHl0aG9uX2Vudmlyb25tZW50LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvcHl0aG9uX2Vudmlyb25tZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YjJlYzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9weXRob25fZW52aXJvbm1lbnQucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXNpbmcgQFBZVEhPTkAgZm9yIHRoaXMgcGF0aCB3b3VsZCByZXN1bHQgaW4gdGhlIGJ1aWxkIHN5c3RlbSBweXRob24gYmVpbmcgCityZWZlcnJlZCB0by4gSW5zdGVhZCB3ZSB3YW50IHRvIGxvY2F0ZSBweXRob24gZnJvbSB0aGUgZW52aXJvbm1lbnQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtcnVOIGxpYmdsYWRlLTIuNi40LW9yaWcvL2xpYmdsYWRlLWNvbnZlcnQuaW4gbGliZ2xhZGUtMi42LjQvbGliZ2xhZGUtY29udmVydC5pbgorLS0tIGxpYmdsYWRlLTIuNi40LW9yaWcvL2xpYmdsYWRlLWNvbnZlcnQuaW4JMjAxMS0wOS0yMiAxMDoxODoyOC45OTExNjQwMDMgKzA4MDAKKysrKyBsaWJnbGFkZS0yLjYuNC9saWJnbGFkZS1jb252ZXJ0LmluCTIwMTEtMDktMjIgMTA6MTg6NTUuNDMxMTY0MDAzICswODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIUBQWVRIT05ACisrIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisgIyAtKi0gbW9kZTogcHl0aG9uIC0qLQorIAorICMgeWVzLCB0aGlzIHJlcXVpcmVzIHB5dGhvbiAyLnggYW5kIGFuIFhNTCBwYXJzZXIgbW9kdWxlIChlZy4gUHlFeHBhdCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlXzIuNi40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGVfMi42LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUyNjdjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlXzIuNi40LmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiUnVudGltZSBzdXBwb3J0IGZvciB0aGUgR1RLKyBpbnRlcmZhY2UgYnVpbGRlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9saWJnbGFkZS8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTVjYTgxN2NjYjdkNWI1YjY2MzU1NjkwZTlhYmM2MDUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xhZGUvZ2xhZGUuaDtlbmRsaW5lPTIyO21kNT1hMDRmNDYxYzk2NGJhNGI1N2ExNzJkMWZiY2Q4ZjhmYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbGFkZS9nbGFkZS1ndGsuYztlbmRsaW5lPTIyO21kNT03NjZmOTkzNDMzZTI2NDJmZWM4NzkzNmQzMTk5OTBmZiIKKworU0VDVElPTiA9ICJsaWJzIgorUFIgPSAicjUiCitERVBFTkRTID0gInpsaWIgZ2RrLXBpeGJ1ZiBndGsrIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ25vbWViYXNlIGd0ay1kb2MKK0dOT01FX0NPTVBSRVNTX1RZUEU9ImJ6MiIKKworU1JDX1VSSSArPSAiZmlsZTovL2dsYWRlLWNydWZ0LnBhdGNoIGZpbGU6Ly9uby14bWwyLnBhdGNoIGZpbGU6Ly9weXRob25fZW52aXJvbm1lbnQucGF0Y2giCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImQxNzc2YjQwZjRlMTY2YjVlOWMxMDdmMWM4ZmU0MTM5IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNjQzNjFlNzY0NzgzOWQzNmVkODMzNmQ5OTJmZDIxMGQzZTgxMzk4ODIyNjliZWQ0N2RjNDY3NDk4MDE2NWRlYyIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlieG1sMiIKKworQ0ZMQUdTICs9ICItbHoiCisKK1BBQ0tBR0VTICs9ICIgJHtQTn0tZGF0YSIKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWIqLnNvLioiCitGSUxFU18ke1BOfS1kYXRhID0gIiR7ZGF0YWRpcn0veG1sL2xpYmdsYWRlL2dsYWRlLTIuMC5kdGQiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9saWJnbGFkZS1jb252ZXJ0IgorI1JERVBFTkRTXyR7UE59ID0gIiR7UE59LWRhdGEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJub3RpZnkvbGlibm90aWZ5XzAuNy42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlibm90aWZ5L2xpYm5vdGlmeV8wLjcuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWQxODhjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlibm90aWZ5L2xpYm5vdGlmeV8wLjcuNi5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIHNlbmRpbmcgZGVza3RvcCBub3RpZmljYXRpb25zIHRvIGEgbm90aWZpY2F0aW9uIGRhZW1vbiIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCIKKworREVQRU5EUyA9ICJkYnVzIGd0ayszIGRidXMtZ2xpYiIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWRvYworCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJhNDk5NzAxOWQwOGY0NmYzYmY1N2I3OGU2Zjc5NWE1OSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjBlZjYxY2E0MDBkMzBlMjgyMTc5NzliZmEwZTczYTc0MDZiMTljMzJkZDc2MTUwNjU0ZWM1YjJiZGY0N2Q4MzciCisKKyMgdGhlcmUgd2VyZSB0aW1lcywgd2UgaGFkIHR3byB2ZXJzaW9ucyBvZiBsaWJub3RpZnkgKG9lLWNvcmUgbGlibm90aWZ5OjAuNi54IC8KKyMgbWV0YS1nbm9tZSBsaWJub3RpZnkzOiAwLjcueCkKK1BST1ZJREVTICs9ICJsaWJub3RpZnkzIgorUlBST1ZJREVTXyR7UE59ICs9ICJsaWJub3RpZnkzIgorUkNPTkZMSUNUU18ke1BOfSArPSAibGlibm90aWZ5MyIKK1JSRVBMQUNFU18ke1BOfSArPSAibGlibm90aWZ5MyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnJzdmcvbGlicnN2Zy9ndGstb3B0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnL2d0ay1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZhZjQ4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnJzdmcvbGlicnN2Zy9ndGstb3B0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK0Zyb20gMWMzOGQ1NzBiMzNmMmIwMzZkNGZhNDdlOTI5YmIyYjMyNjRlMzhiZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBUdWUsIDExIEF1ZyAyMDE1IDE2OjI1OjM4ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZTogYWRkIG9wdGlvbiB0byBlbmFibGUvZGlzYWJsZSB1c2Ugb2YgR1RLKworCitEaXN0cm8gcGFja2FnZXJzIGxpa2UgcHJlZGljdGFiaWxpdHkgYW5kIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgb3B0aW9uYWwKK2RlcGVuZGVuY2llcyBhcmUgbm90IHByZWRpY2FibGUuICBBZGQgYSAtLXdpdGgtZ3RrMyBvcHRpb24gKGRlZmF1bHQgdG8gImF1dG8iKQorZm9yIGZvcmNpYmx5IGNvbnRyb2xsaW5nIHdoZXRoZXIgR1RLKyB3aWxsIGJlIHVzZWQgb3Igbm90LgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjY5M10KKworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRm9yd2FyZC1wb3J0ZWQgdG8gMi40MC4xMAorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMTcgKysrKysrKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYmY3N2YzYS4uY2E3N2RlOCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTI4LDE3ICsxMjgsMjIgQEAgQUNfQ0hFQ0tfRlVOQ1Moc3RydG9rX3IpCisgIyBHVEsKKyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIAorLVBLR19DSEVDS19NT0RVTEVTKFtHVEszXSxbZ3RrKy0zLjAgPj0gJEdUSzNfUkVRVUlSRURdLFtoYXZlX2d0a18zPXllc10sW2hhdmVfZ3RrXzM9bm9dKQorLQorIEdUSzNfQklOQVJZX1ZFUlNJT049CisgCistaWYgdGVzdCAiJGhhdmVfZ3RrXzMiID0gInllcyI7IHRoZW4KKy0gICAgR1RLM19CSU5BUllfVkVSU0lPTj0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z3RrX2JpbmFyeV92ZXJzaW9uIGd0aystMy4wYCIKKytBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gdXNlIEdUSysgM10pCisrQUNfQVJHX1dJVEgoW2d0azNdLAorKyAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtZ3RrM10sW0Rvbid0IGJ1aWxkIEdUSyszIHRvb2xzIChkZWZhdWx0PWF1dG8pXSldLAorKyAgW10sW1BLR19DSEVDS19FWElTVFMoW2d0aystMy4wID49ICRHVEszX1JFUVVJUkVEXSxbd2l0aF9ndGszPXllc10sW3dpdGhfZ3RrMz1ub10pXSkKKytBQ19NU0dfUkVTVUxUKFskd2l0aF9ndGszXSkKKysKKytpZiB0ZXN0ICIkd2l0aF9ndGszIiA9ICJ5ZXMiOyB0aGVuCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhHVEszLCBbZ3RrKy0zLjAgPj0gJEdUSzNfUkVRVUlSRURdKQorKyAgR1RLM19CSU5BUllfVkVSU0lPTj0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z3RrX2JpbmFyeV92ZXJzaW9uIGd0aystMy4wYCIKKyBmaQorIAorIEFDX1NVQlNUKFtHVEszX0JJTkFSWV9WRVJTSU9OXSkKKyAKKy1BTV9DT05ESVRJT05BTChbSEFWRV9HVEtfM10sW3Rlc3QgIiRoYXZlX2d0a18zIiA9ICJ5ZXMiXSkKKytBTV9DT05ESVRJT05BTChbSEFWRV9HVEtfM10sW3Rlc3QgIiR3aXRoX2d0azMiID0gInllcyJdKQorIAorIGRubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBkbmwgR0RLLVBpeGJ1ZiBTVkcgbG9hZGVyCitAQCAtMjg5LDYgKzI5NCw2IEBAIGxpYnJzdmctJFZFUlNJT04KKyAJQnVpbGQgaW50cm9zcGVjdGFibGUgYmluZGluZ3M6ICAke2ZvdW5kX2ludHJvc3BlY3Rpb259CisgCUJ1aWxkIFZhbGEgYmluZGluZ3M6ICAgICAgICAgICAgJHtlbmFibGVfdmFsYX0KKyAJQnVpbGQgR2RrUGl4YnVmIGxvYWRlcjogICAgICAgICAke2VuYWJsZV9waXhidWZfbG9hZGVyfQorLSAgICAgICAgR1RLKyAkR1RLM19SRVFVSVJFRCBvciBsYXRlcjogICAgICAgICAgICR7aGF2ZV9ndGtfM30KKysgICAgICAgIEdUSysgJEdUSzNfUkVRVUlSRUQgb3IgbGF0ZXI6ICAgICAgICAgICAke3dpdGhfZ3RrXzN9CisgCUJ1aWxkIG1pc2NlbGxhZW5vdXMgdG9vbHM6ICAgICAgJHtidWlsZF9taXNjX3Rvb2xzfQorICIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnXzIuNDAuMTAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJyc3ZnL2xpYnJzdmdfMi40MC4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGIwZTRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnXzIuNDAuMTAuYmIKQEAgLTAsMCArMSw0NyBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciByZW5kZXJpbmcgU1ZHIGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMvbGlicnN2Zy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcnN2Zy5oO2JlZ2lubGluZT0zO2VuZGxpbmU9MjQ7bWQ1PTIwYjQxMTNjNDkwOWJiZjBkNjdlMDA2Nzc4MzAyYmM2IgorCitTRUNUSU9OID0gIngxMS91dGlscyIKK0RFUEVORFMgPSAiY2Fpcm8gZ2RrLXBpeGJ1ZiBnbGliLTIuMCBsaWJjcm9jbyBsaWJ4bWwyIHBhbmdvIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnbm9tZWJhc2UgZ3RrLWRvYyBwaXhidWZjYWNoZQorCitTUkNfVVJJICs9ICJmaWxlOi8vZ3RrLW9wdGlvbi5wYXRjaCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZmFkZWJlMmU3OTlhYjE1OTE2OWVlMzE5ODQxNWZmODUiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI5NjVjODA3NDM4Y2U5MGIyMDRlOTMwZmY4MGM5MmViYTE2MDZhMmY2ZmQ1Y2NmZDA5MzM1Yzk5ODk2ZGQzNDc5IgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24gLS1kaXNhYmxlLXZhbGEiCisKKyMgVGhlIG9sZGVyIGxkICgyLjIyKSBvbiB0aGUgaG9zdCAoQ2VudG9zIDYuNSkgZG9lc24ndCBoYXZlIHRoZQorIyAtQnN5bWJvbGljLWZ1bmN0aW9ucyBvcHRpb24sIHdlIGNhbiBkaXNhYmxlIGl0IGZvciBuYXRpdmUuCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgLS1lbmFibGUtQnN5bWJvbGljPWF1dG8iCisKK1BBQ0tBR0VDT05GSUcgPz89ICJnZGtwaXhidWYiCisjIFRoZSBnZGstcGl4YnVmIGxvYWRlcgorUEFDS0FHRUNPTkZJR1tnZGtwaXhidWZdID0gIi0tZW5hYmxlLXBpeGJ1Zi1sb2FkZXIsLS1kaXNhYmxlLXBpeGJ1Zi1sb2FkZXIsZ2RrLXBpeGJ1Zi1uYXRpdmUiCisjIEdUSysgdGVzdCBhcHBsaWNhdGlvbiAocnN2Zy12aWV3KQorUEFDS0FHRUNPTkZJR1tndGtdID0gIi0td2l0aC1ndGszLC0td2l0aG91dC1ndGszLGd0ayszIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIExvYWRhYmxlIG1vZHVsZXMgZG9uJ3QgbmVlZCAuYSBvciAubGEgb24gTGludXgKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyovbG9hZGVycy8qLmEgJHtEfSR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8qL2xvYWRlcnMvKi5sYQorfQorCitQQUNLQUdFUyA9KyAibGlicnN2Zy1ndGsgcnN2ZyIKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS8qLnNvLioiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8qL2xvYWRlcnMvLmRlYnVnIgorRklMRVNfcnN2ZyA9ICIke2JpbmRpcn0vcnN2ZyogXAorCSAgICAgICR7ZGF0YWRpcn0vcGl4bWFwcy9zdmctdmlld2VyLnN2ZyBcCisJICAgICAgJHtkYXRhZGlyfS90aGVtZXMiCitGSUxFU19saWJyc3ZnLWd0ayA9ICIke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvKi8qLyouc28iCisKK1BJWEJVRl9QQUNLQUdFUyA9ICJsaWJyc3ZnLWd0ayIKKworUElYQlVGQ0FDSEVfU1lTUk9PVF9ERVBTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGhhcmZidXp6LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIHBhbmdvLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIGljdS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnNlY3JldC9saWJzZWNyZXRfMC4xOC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlic2VjcmV0L2xpYnNlY3JldF8wLjE4LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViYzgzYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnNlY3JldC9saWJzZWNyZXRfMC4xOC4yLmJiCkBAIC0wLDAgKzEsMTIgQEAKK1NVTU1BUlkgPSAibGlic2VjcmV0IGlzIGEgbGlicmFyeSBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZyBwYXNzd29yZHMgYW5kIG90aGVyIHNlY3JldHMiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjNjMmE1ZTAxMDZiOTlkNzUyMzg5ODY1NTliYjVmYzYiCisKK2luaGVyaXQgZ25vbWViYXNlIGd0ay1kb2MKKworREVQRU5EUyA9ICJnbGliLTIuMCBsaWJnY3J5cHQiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLW1hbnBhZ2VzIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIyM2NkZjgyNjdkMTFhMjZmODhmMGRiZWMxZTIwMjJhZCIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjEyZmQyODhiMDEyZTFiMmIxYjU0ZDU4NmNkNGM2NTA3ODg1NzE1NTM0NjQ0YjQ1MzRiN2VmN2Q3MDc5YmE0NDMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJ3bmNrL2xpYnduY2szXzMuMTQuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnduY2svbGlid25jazNfMy4xNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZjUxNzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJ3bmNrL2xpYnduY2szXzMuMTQuMC5iYgpAQCAtMCwwICsxLDE1IEBACitTVU1NQVJZID0gIldpbmRvdyBuYXZpZ2F0aW9uIGNvbnN0cnVjdGlvbiB0b29sa2l0IgorTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKKworQlBOID0gImxpYnduY2siCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitERVBFTkRTID0gImdvYmplY3QtaW50cm9zcGVjdGlvbi1zdHViIGd0ayszIGdkay1waXhidWYtbmF0aXZlIGxpYnhyZXMiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJzdGFydHVwLW5vdGlmaWNhdGlvbiIKK1BBQ0tBR0VDT05GSUdbc3RhcnR1cC1ub3RpZmljYXRpb25dID0gIi0tZW5hYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uLC0tZGlzYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbixzdGFydHVwLW5vdGlmaWNhdGlvbiIKKworaW5oZXJpdCBnbm9tZWJhc2UKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjQ1Mzg2NzJlMGQ3NzVmYWRlZGYxMGFiZWI4MDIwMDQ3IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZjUwODAwNzYzNDY2MDliNGMzNjM5NGI4NzlmM2E4NmI5MmNlZDNiOTBhMzdjYjU0YzhlOWExNGYwMGU3OTIxYyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvYnVpbGRlcl8wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2J1aWxkZXJfMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNzI5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2J1aWxkZXJfMC4xLmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiTmV3IHVzZXIgdG8gZG8gc3BlY2lmaWMgam9iIgorREVTQ1JJUFRJT04gPSAiVGhpcyByZWNpcGUgY3JlYXRlIGEgbmV3IHVzZXIgbmFtZWQgJHtQTn0sIHdobyBpcyB1c2VkIGZvciBzcGVjaWZpYyBqb2JzIGxpa2UgYnVpbGRpbmcuIFRoZSB0YXNrIGNhbiBiZSBhdXRvIHN0YXJ0ZWQgdmlhIG1pbmkgWCIKK1NFQ1RJT04gPSAieDExIgorUFIgPSAicjYiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2J1aWxkZXJfaG9iX3N0YXJ0LnNoO2VuZGxpbmU9NTttZDU9ODQ3OTZjM2M0MTc4NWQ4NjEwMGZkYWJjYmRhZGUwMGUiCisKK1NSQ19VUkkgPSAiZmlsZTovL2J1aWxkZXJfaG9iX3N0YXJ0LnNoIFwKKyAgICAgICAgICAgZmlsZTovL3BsZWFzZV93YWl0X2RpYWxvZy5weSBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0iCisKK1JERVBFTkRTXyR7UE59ID0gIm1pbmkteC1zZXNzaW9uIgorCitpbmhlcml0IHVzZXJhZGQKKworIyBidWlsZGVyIHVzZXIgcGFzc3dvcmQgaXMgImJ1aWxkZXIiCitCVUlMREVSX1BBU1NXT1JEID89ICIuZ0xpYmlOWG4wUDEyIgorVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK1VTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gLS1jcmVhdGUtaG9tZSBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tZ3JvdXBzIHZpZGVvLHR0eSxhdWRpbyBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tcGFzc3dvcmQgJHtCVUlMREVSX1BBU1NXT1JEfSBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tdXNlci1ncm91cCBidWlsZGVyIgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHtzeXNjb25mZGlyfS9taW5pX3gvc2Vzc2lvbi5kCisJaW5zdGFsbCAtcCAtbSA3NTUgYnVpbGRlcl9ob2Jfc3RhcnQuc2ggJHtEfSR7c3lzY29uZmRpcn0vbWluaV94L3Nlc3Npb24uZC8KKworCWNob3duICBidWlsZGVyLmJ1aWxkZXIgJHtEfSR7c3lzY29uZmRpcn0vbWluaV94L3Nlc3Npb24uZC9idWlsZGVyX2hvYl9zdGFydC5zaAorICAgICAgICBpbnN0YWxsIC1wIC1tIDc1NSBwbGVhc2Vfd2FpdF9kaWFsb2cucHkgJHtEfSR7c3lzY29uZmRpcn0vbWluaV94Cit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvYnVpbGRlcl9ob2Jfc3RhcnQuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2ZpbGVzL2J1aWxkZXJfaG9iX3N0YXJ0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzOTRiMDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2ZpbGVzL2J1aWxkZXJfaG9iX3N0YXJ0LnNoCkBAIC0wLDAgKzEsMzcgQEAKKyMhL2Jpbi9zaAorI1RoaXMgc2NyaXB0IHdpbGwgYmUgY2FsbGVkIHZpYSBtaW5pIFggc2Vzc2lvbiBvbiBiZWhhbGYgb2YgZmlsZSBvd25lciwgYWZ0ZXIKKyNpbnN0YWxsZWQgaW4gL2V0Yy9taW5pX3gvc2Vzc2lvbi5kLy4gQW55IGF1dG8gc3RhcnQgam9icyBpbmNsdWRpbmcgWCBhcHBzIGNhbgorI2JlIHB1dCBoZXJlCisKKyMgc3RhcnQgaG9iIGhlcmUKK2V4cG9ydCBQU0VVRE9fUFJFRklYPS91c3IKK2V4cG9ydCBQU0VVRE9fTE9DQUxTVEFURURJUj0vaG9tZS9idWlsZGVyL3BzZXVkbworZXhwb3J0IFBTRVVET19MSUJESVI9L3Vzci9saWIvcHNldWRvL2xpYjY0CitleHBvcnQgR0lUX1BST1hZX0NPTU1BTkQ9L2hvbWUvYnVpbGRlci9wb2t5L3NjcmlwdHMvb2UtZ2l0LXByb3h5CisKKyNzdGFydCBwY21hbmZtIGluIGRhZW1vbiBtb2RlIHRvIGFsbG93IGFzeW5jaHJvbm91cyBsYXVuY2gKK3BjbWFuZm0gLWQmCisKKyNyZWdpc3RlciBoYW5kbGVycyBmb3Igc29tZSBmaWxlIHR5cGVzCitpZiBbICEgLWQgL2hvbWUvYnVpbGRlci8ubG9jYWwvc2hhcmUvYXBwbGljYXRpb25zIF07IHRoZW4KKyAgICBta2RpciAtcCAvaG9tZS9idWlsZGVyLy5sb2NhbC9zaGFyZS9hcHBsaWNhdGlvbnMvCisgICAgI3JlZ2lzdGVyIGZvbGRlcnMgdG8gb3BlbiB3aXRoIFBDTWFuRk0gZmlsZW1hbmFnZXIKKyAgICB4ZGctbWltZSBkZWZhdWx0IHBjbWFuZm0uZGVza3RvcCBpbm9kZS9kaXJlY3RvcnkKKworICAgICNyZWdpc3RlciBodG1sIGxpbmtzIGFuZCBmaWxlcyB3aXRoIGVwaXBoYW55CisgICAgeGRnLW1pbWUgZGVmYXVsdCBlcGlwaGFueS5kZXNrdG9wIHgtc2NoZW1lLWhhbmRsZXIvaHR0cAorICAgIHhkZy1taW1lIGRlZmF1bHQgZXBpcGhhbnkuZGVza3RvcCB4LXNjaGVtZS1oYW5kbGVyL2h0dHBzCisgICAgeGRnLW1pbWUgZGVmYXVsdCBlcGlwaGFueS5kZXNrdG9wIHRleHQvaHRtbAorCisgICAgI3JlZ2lzdGVyIHRleHQgZmlsZXMgd2l0aCBsZWFmcGFkIHRleHQgZWRpdG9yCisgICAgeGRnLW1pbWUgZGVmYXVsdCBsZWFmcGFkLmRlc2t0b3AgdGV4dC9wbGFpbgorZmkKKworY2QgL2hvbWUvYnVpbGRlci9wb2t5CisuIC4vb2UtaW5pdC1idWlsZC1lbnYKKworaG9iICYKKworbWF0Y2hib3gtdGVybWluYWwmCisKKy9ldGMvbWluaV94L3BsZWFzZV93YWl0X2RpYWxvZy5weSAmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2ZpbGVzL3BsZWFzZV93YWl0X2RpYWxvZy5weSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvcGxlYXNlX3dhaXRfZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMjM4MWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2ZpbGVzL3BsZWFzZV93YWl0X2RpYWxvZy5weQpAQCAtMCwwICsxLDI4IEBACisjIS91c3IvYmluL2VudiBweXRob24KK2ltcG9ydCBnbGliCitpbXBvcnQgZ3RrCisgCitkZWYgZGVzdHJveV93aW5kb3dfY2Iod2lkZ2V0LCBldmVudCk6CisgICAgZ3RrLm1haW5fcXVpdCgpCisgCitkZWYgYWxsX2RvbmVfY2IoKToKKyAgICBndGsubWFpbl9xdWl0KCkKKyAKK2RlZiBkaWFsb2d1ZV91aSgpOgorICAgIHdpbmRvdyA9IGd0ay5XaW5kb3coKQorICAgIHdpbmRvdy5zZXRfdGl0bGUoIlBsZWFzZSB3YWl0Li4uIikKKyAgICB3aW5kb3cuY29ubmVjdCgiZGVsZXRlLWV2ZW50IiwgZGVzdHJveV93aW5kb3dfY2IpCisgICAgd2luZG93LnNob3coKQorICAgIHdpbmRvdy5zZXRfYm9yZGVyX3dpZHRoKDEyKQorIAorICAgIG1zZyA9ICJQbGVhc2Ugd2FpdCB3aGlsZSBCaXRCYWtlIGluaXRpYWxpemVzIEhvYiIKKyAgICBsYWJlbCA9IGd0ay5MYWJlbChtc2cpCisgICAgbGFiZWwuc2hvdygpCisgICAgd2luZG93LmFkZChsYWJlbCkKKyAKKyAgICBnbGliLnRpbWVvdXRfYWRkX3NlY29uZHMoMTAsIGFsbF9kb25lX2NiKQorIAoraWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBkaWFsb2d1ZV91aSgpCisgICAgZ3RrLm1haW4oKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby1mcHUuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8tZnB1LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjcyZTg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8tZnB1LmluYwpAQCAtMCwwICsxLDYgQEAKKworZGVmIGdldF9jYWlyb19mcHVfc2V0dGluZyhiYiwgZCk6CisgICAgaWYgZC5nZXRWYXIoJ1RBUkdFVF9GUFUnLCBUcnVlKSBpbiBbICdzb2Z0JyBdOgorICAgICAgICByZXR1cm4gIi0tZGlzYWJsZS1zb21lLWZsb2F0aW5nLXBvaW50IgorICAgIHJldHVybiAiIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0NTMxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvLmluYwpAQCAtMCwwICsxLDQ1IEBACitTVU1NQVJZID0gIlRoZSBDYWlybyAyRCB2ZWN0b3IgZ3JhcGhpY3MgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkNhaXJvIGlzIGEgbXVsdGktcGxhdGZvcm0gbGlicmFyeSBwcm92aWRpbmcgYW50aS1hbGlhc2VkIFwKK3ZlY3Rvci1iYXNlZCByZW5kZXJpbmcgZm9yIG11bHRpcGxlIHRhcmdldCBiYWNrZW5kcy4gUGF0aHMgY29uc2lzdCBcCitvZiBsaW5lIHNlZ21lbnRzIGFuZCBjdWJpYyBzcGxpbmVzIGFuZCBjYW4gYmUgcmVuZGVyZWQgYXQgYW55IHdpZHRoIFwKK3dpdGggdmFyaW91cyBqb2luIGFuZCBjYXAgc3R5bGVzLiBBbGwgY29sb3JzIG1heSBiZSBzcGVjaWZpZWQgd2l0aCBcCitvcHRpb25hbCB0cmFuc2x1Y2VuY2UgKG9wYWNpdHkvYWxwaGEpIGFuZCBjb21iaW5lZCB1c2luZyB0aGUgXAorZXh0ZW5kZWQgUG9ydGVyL0R1ZmYgY29tcG9zaXRpbmcgYWxnZWJyYSBhcyBmb3VuZCBpbiB0aGUgWCBSZW5kZXIgXAorRXh0ZW5zaW9uLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9jYWlyb2dyYXBoaWNzLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJNUEwtMSAmIExHUEx2Mi4xICYgR1BMdjMrIgorTElDRU5TRV8ke1BOfSA9ICJNUEwtMSAmIExHUEx2Mi4xIgorTElDRU5TRV8ke1BOfS1kZXYgPSAiTVBMLTEgJiBMR1BMdjIuMSIKK0xJQ0VOU0VfJHtQTn0tZ29iamVjdCA9ICJNUEwtMSAmIExHUEx2Mi4xIgorTElDRU5TRV8ke1BOfS1wZXJmLXV0aWxzID0gIkdQTHYzKyIKK1gxMURFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlic20gbGlieHJlbmRlciBsaWJ4ZXh0IgorREVQRU5EUyA9ICJsaWJwbmcgZm9udGNvbmZpZyBwaXhtYW4gZ2xpYi0yLjAgemxpYiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMSB4Y2InLCAnJywgZCl9IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdkaXJlY3RmYicsICdkaXJlY3RmYicsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteD15ZXMgLWVuYWJsZS14bGliLC0td2l0aC14PW5vIC0tZGlzYWJsZS14bGliLCR7WDExREVQRU5EU30iCitQQUNLQUdFQ09ORklHW3hjYl0gPSAiLS1lbmFibGUteGNiLC0tZGlzYWJsZS14Y2IsbGlieGNiIgorUEFDS0FHRUNPTkZJR1tkaXJlY3RmYl0gPSAiLS1lbmFibGUtZGlyZWN0ZmI9eWVzLCxkaXJlY3RmYiIKK1BBQ0tBR0VDT05GSUdbdmFsZ3JpbmRdID0gIi0tZW5hYmxlLXZhbGdyaW5kPXllcywtLWRpc2FibGUtdmFsZ3JpbmQsdmFsZ3JpbmQiCitQQUNLQUdFQ09ORklHW2VnbF0gPSAiLS1lbmFibGUtZWdsPXllcywtLWRpc2FibGUtZWdsLHZpcnR1YWwvZWdsIgorUEFDS0FHRUNPTkZJR1tnbGVzdjJdID0gIi0tZW5hYmxlLWdsZXN2MiwtLWRpc2FibGUtZ2xlc3YyLHZpcnR1YWwvbGliZ2xlczIiCisKKyNjaGVjayBmb3IgVEFSR0VUX0ZQVT1zb2Z0IGFuZCBpbmZvcm0gY29uZmlndXJlIG9mIHRoZSByZXN1bHQgc28gaXQgY2FuIGRpc2FibGUgc29tZSBmbG9hdGluZyBwb2ludHMgCityZXF1aXJlIGNhaXJvLWZwdS5pbmMKK0VYVFJBX09FQ09ORiArPSAiJHtAZ2V0X2NhaXJvX2ZwdV9zZXR0aW5nKGJiLCBkKX0gXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS10ZWUgXAorICAgICAgICAgICAgICAgICIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKKyMgV2UgZG9uJ3QgZGVwZW5kIG9uIGJpbnV0aWxzIHNvIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGlzCitleHBvcnQgYWNfY3ZfbGliX2JmZF9iZmRfb3BlbnI9Im5vIgorIyBFbnN1cmUgd2UgZG9uJ3QgZGVwZW5kIG9uIExaTworZXhwb3J0IGFjX2N2X2xpYl9sem8yX2x6bzJhX2RlY29tcHJlc3M9Im5vIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworQ0ZMQUdTICs9ICItZmZhdC1sdG8tb2JqZWN0cyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvXzEuMTQuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvXzEuMTQuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODE3ZGJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm9fMS4xNC4yLmJiCkBAIC0wLDAgKzEsNDMgQEAKK3JlcXVpcmUgY2Fpcm8uaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU3M2U5OTllMGM3MmI1YWM5MDEyNDI0ZmExNTdhZDc3IgorCitTUkNfVVJJID0gImh0dHA6Ly9jYWlyb2dyYXBoaWNzLm9yZy9yZWxlYXNlcy9jYWlyby0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlMWNkZmFmMWM2Yzk5NWM0ZDRjNTRlMDcyMTViMDExOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjOTE5ZDk5OWRkYjFiYmJlY2Q0YmJlNjUyOTljYTJhYmQyMDc5YzdlMTNkMjI0NTc3ODk1YWZhNzAwNWVjY2ViIgorCitQQUNLQUdFUyA9KyAiY2Fpcm8tZ29iamVjdCBjYWlyby1zY3JpcHQtaW50ZXJwcmV0ZXIgY2Fpcm8tcGVyZi11dGlscyIKKworU1VNTUFSWV8ke1BOfSA9ICJUaGUgQ2Fpcm8gMkQgdmVjdG9yIGdyYXBoaWNzIGxpYnJhcnkiCitERVNDUklQVElPTl8ke1BOfSA9ICJDYWlybyBpcyBhIG11bHRpLXBsYXRmb3JtIGxpYnJhcnkgcHJvdmlkaW5nIGFudGktYWxpYXNlZCBcCit2ZWN0b3ItYmFzZWQgcmVuZGVyaW5nIGZvciBtdWx0aXBsZSB0YXJnZXQgYmFja2VuZHMuIFBhdGhzIGNvbnNpc3QgXAorb2YgbGluZSBzZWdtZW50cyBhbmQgY3ViaWMgc3BsaW5lcyBhbmQgY2FuIGJlIHJlbmRlcmVkIGF0IGFueSB3aWR0aCBcCit3aXRoIHZhcmlvdXMgam9pbiBhbmQgY2FwIHN0eWxlcy4gQWxsIGNvbG9ycyBtYXkgYmUgc3BlY2lmaWVkIHdpdGggXAorb3B0aW9uYWwgdHJhbnNsdWNlbmNlIChvcGFjaXR5L2FscGhhKSBhbmQgY29tYmluZWQgdXNpbmcgdGhlIFwKK2V4dGVuZGVkIFBvcnRlci9EdWZmIGNvbXBvc2l0aW5nIGFsZ2VicmEgYXMgZm91bmQgaW4gdGhlIFggUmVuZGVyIFwKK0V4dGVuc2lvbi4iCisKK1NVTU1BUllfY2Fpcm8tZ29iamVjdCA9ICJUaGUgQ2Fpcm8gbGlicmFyeSBHT2JqZWN0IHdyYXBwZXIgbGlicmFyeSIKK0RFU0NSSVBUSU9OX2NhaXJvLWdvYmplY3QgPSAiQSBHT2JqZWN0IHdyYXBwZXIgbGlicmFyeSBmb3IgdGhlIENhaXJvIEFQSS4iCisKK1NVTU1BUllfY2Fpcm8tc2NyaXB0LWludGVycHJldGVyID0gIlRoZSBDYWlybyBsaWJyYXJ5IHNjcmlwdCBpbnRlcnByZXRlciIKK0RFU0NSSVBUSU9OX2NhaXJvLXNjcmlwdC1pbnRlcnByZXRlciA9ICJUaGUgQ2Fpcm8gc2NyaXB0IGludGVycHJldGVyIGltcGxlbWVudHMgXAorQ2Fpcm9TY3JpcHQuICBDYWlyb1NjcmlwdCBpcyB1c2VkIGJ5IHRyYWNpbmcgdXRpbGl0aWVzIHRvIGVuYWJsZSB0aGUgYWJpbGl0eSBcCit0byByZXBsYXkgcmVuZGVyaW5nLiIKKworREVTQ1JJUFRJT05fY2Fpcm8tcGVyZi11dGlscyA9ICJUaGUgQ2Fpcm8gbGlicmFyeSBwZXJmb3JtYW5jZSB1dGlsaXRpZXMiCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWJjYWlyby5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vY2Fpcm8vKi5zbyIKK0ZJTEVTXyR7UE59LWdvYmplY3QgPSAiJHtsaWJkaXJ9L2xpYmNhaXJvLWdvYmplY3Quc28uKiIKK0ZJTEVTXyR7UE59LXNjcmlwdC1pbnRlcnByZXRlciA9ICIke2xpYmRpcn0vbGliY2Fpcm8tc2NyaXB0LWludGVycHJldGVyLnNvLioiCitGSUxFU18ke1BOfS1wZXJmLXV0aWxzID0gIiR7YmluZGlyfS9jYWlyby10cmFjZSAke2xpYmRpcn0vY2Fpcm8vKi5sYSAke2xpYmRpcn0vY2Fpcm8vbGliY2Fpcm8tdHJhY2Uuc28uKiIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXJtIC1yZiAke0R9JHtiaW5kaXJ9L2NhaXJvLXNwaGlueAorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2NhaXJvL2NhaXJvLWZkcioKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9jYWlyby9jYWlyby1zcGhpbngqCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vY2Fpcm8vLmRlYnVnL2NhaXJvLWZkcioKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9jYWlyby8uZGVidWcvY2Fpcm8tc3BoaW54KgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTIxY2VlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC5pbmMKQEAgLTAsMCArMSw0OCBAQAorU1VNTUFSWSA9ICJHcmFwaGljcyBsaWJyYXJ5IGZvciBjcmVhdGluZyBoYXJkd2FyZS1hY2NlbGVyYXRlZCB1c2VyIGludGVyZmFjZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmNsdXR0ZXItcHJvamVjdC5vcmcvIgorTElDRU5TRSA9ICJMR1BMdjIuMSsiCisKK2luaGVyaXQgY2x1dHRlciBwdGVzdC1nbm9tZQorCitERVBFTkRTID0gInBhbmdvIGdsaWItMi4wIGpzb24tZ2xpYiBhdGsgdWRldiBjb2dsLTEuMCIKK1BBQ0tBR0VfQkVGT1JFX1BOICs9ICIke1BOfS1leGFtcGxlcyIKK0FVVE9UT09MU19BVVhESVIgPSAiJHtTfS9idWlsZCIKKworRURFUEVORFNfWDExID0gInZpcnR1YWwvbGlieDExIGxpYnhpIGxpYnhmaXhlcyIKK0VERVBFTkRTX0dMWCA9ICJ2aXJ0dWFsL2xpYmdsIgorRURFUEVORFNfRUdMID0gInZpcnR1YWwvZWdsIgorRURFUEVORFNfV0FZTEFORCA9ICJ3YXlsYW5kIGxpYnhrYmNvbW1vbiBnZGstcGl4YnVmIgorCitFREVQRU5EU19FVkRFViA9ICJsaWJ4a2Jjb21tb24iCitFUkRFUEVORFNfRVZERVYgPSAieGtleWJvYXJkLWNvbmZpZyIKKworIyBEaXNhYmxlIHByZXR0eSBtdWNoIGV2ZXJ5dGhpbmcsIG92ZXJyaWRlIGluIHBsYXRmb3JtIHNwZWNpZmljIHNldCB1cAorRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbglcCisJICAgICAJIC0tZGlzYWJsZS1xdWFydHotYmFja2VuZAlcCisJICAgICAJIC0tZGlzYWJsZS13aW4zMi1iYWNrZW5kCVwKKwkgICAgIAkgLS1kaXNhYmxlLWdkay1iYWNrZW5kCQlcCisJICAgICAJIC0tZGlzYWJsZS1jZXgxMDAtYmFja2VuZAlcCisJICAgICAJIC0tZGlzYWJsZS10c2xpYi1pbnB1dAkJXAorCSAgICAJIgorCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExLWJhY2tlbmQsLS1kaXNhYmxlLXgxMS1iYWNrZW5kLCR7RURFUEVORFNfWDExfSIKK1BBQ0tBR0VDT05GSUdbZ2x4XSA9ICIsLCR7RURFUEVORFNfWDExfSAke0VERVBFTkRTX0dMWH0iCitQQUNLQUdFQ09ORklHW2VnbF0gPSAiLS1lbmFibGUtZWdsLWJhY2tlbmQsLS1kaXNhYmxlLWVnbC1iYWNrZW5kLCR7RURFUEVORFNfRUdMfSIKK1BBQ0tBR0VDT05GSUdbZXZkZXZdID0gIi0tZW5hYmxlLWV2ZGV2LWlucHV0LC0tZGlzYWJsZS1ldmRldi1pbnB1dCwke0VERVBFTkRTX0VWREVWfSwke0VSREVQRU5EU19FVkRFVn0iCitQQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIi0tZW5hYmxlLXdheWxhbmQtYmFja2VuZCwtLWRpc2FibGUtd2F5bGFuZC1iYWNrZW5kLCR7RURFUEVORFNfV0FZTEFORH0iCitQQUNLQUdFQ09ORklHW3dheWxhbmQtY29tcG9zaXRvcl0gPSAiLS1lbmFibGUtd2F5bGFuZC1jb21wb3NpdG9yLC0tZGlzYWJsZS13YXlsYW5kLWNvbXBvc2l0b3Isd2F5bGFuZCIKKworIyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24sIGRpc3Ryb3MgbWlnaHQgd2FudCB0byBvdmVycmlkZQorUEFDS0FHRUNPTkZJRyA/Pz0gImVnbCBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ3dheWxhbmQnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdnbHggeDExJywgJycsIGQpfSIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vY2x1dHRlci9leGFtcGxlcy8uZGVidWciCitGSUxFU18ke1BOfS1leGFtcGxlcyA9ICIke2xpYmRpcn0vY2x1dHRlci9leGFtcGxlcyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9L2luc3RhbGxlZC10ZXN0cy8uZGVidWciCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCSMgc2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjExMjggZm9yIHRoaXMKKwl0b3VjaCAtdCAyMDAwMDEwMTAwMDAgJHtTfS9wby9jbHV0dGVyLTEuMC5wb3QKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvaW5zdGFsbC1leGFtcGxlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvaW5zdGFsbC1leGFtcGxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjZhNzBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9pbnN0YWxsLWV4YW1wbGVzLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK0luc3RhbGwgdGhlIGV4YW1wbGVzIHRvICRsaWJkaXIvY2x1dHRlci8uCisKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworZGlmZiAtLWdpdCBhL2V4YW1wbGVzL01ha2VmaWxlLmFtIGIvZXhhbXBsZXMvTWFrZWZpbGUuYW0KK2luZGV4IDRiOWI0NDkuLjIzMmNkMTkgMTAwNjQ0CistLS0gYS9leGFtcGxlcy9NYWtlZmlsZS5hbQorKysrIGIvZXhhbXBsZXMvTWFrZWZpbGUuYW0KK0BAIC0zOCw2ICszOCw3IEBAIEFNX0NQUEZMQUdTID0gXAorIAktSSQodG9wX3NyY2RpcikvY2x1dHRlciBcCisgCS1JJCh0b3BfYnVpbGRkaXIpL2NsdXR0ZXIKKyAKKy1ub2luc3RfUFJPR1JBTVMgPSAkKGFsbF9leGFtcGxlcykKKytleGFtcGxlZGlyID0gJChwa2dsaWJkaXIpL2V4YW1wbGVzCisrZXhhbXBsZV9QUk9HUkFNUyA9ICQoYWxsX2V4YW1wbGVzKQorIAorIEVYVFJBX0RJU1QgPSByZWRoYW5kLnBuZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9ydW4taW5zdGFsbGVkLXRlc3RzLXdpdGgtdGFwLW91dHB1dC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvcnVuLWluc3RhbGxlZC10ZXN0cy13aXRoLXRhcC1vdXRwdXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjMThjNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvcnVuLWluc3RhbGxlZC10ZXN0cy13aXRoLXRhcC1vdXRwdXQucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA2NjhlMWQxNGFmMTMyNDkzODRhYjMyNGM3ZDc5ZWM0MTQ3ZjA3ZTQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IE1vbiwgMjcgQXByIDIwMTUgMjA6MTI6MzMgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gUnVuIGluc3RhbGxlZCB0ZXN0cyB3aXRoIHRhcCBvdXRwdXQKKworQ29uZmlndXJlIG91dHB1dCBmcm9tIGluc3RhbGxlZC10ZXN0cyB0byBiZSBUQVAgY29tcGxpYW50IHN1Y2ggdGhhdAorZ25vbWUtZGVza3RvcC10ZXN0aW5nLXJ1bm5lciBwcm9wZXJseSBpbnRlcnByZXRzIHRoZSByZXN1bHRzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogVGltIE9ybGluZyA8VGljb1RpbW9AZ21haWwuY29tPgorLS0tCisgYnVpbGQvYXV0b3Rvb2xzL2dsaWItdGFwLm1rIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9idWlsZC9hdXRvdG9vbHMvZ2xpYi10YXAubWsgYi9idWlsZC9hdXRvdG9vbHMvZ2xpYi10YXAubWsKK2luZGV4IDdjNWY4MmIuLjg0NGUxN2UgMTAwNjQ0CistLS0gYS9idWlsZC9hdXRvdG9vbHMvZ2xpYi10YXAubWsKKysrKyBiL2J1aWxkL2F1dG90b29scy9nbGliLXRhcC5taworQEAgLTEyNyw3ICsxMjcsOCBAQCBpbnN0YWxsZWRfdGVzdF9tZXRhX0RBVEEgPSAkKGluc3RhbGxlZF90ZXN0Y2FzZXM6PS50ZXN0KQorICUudGVzdDogJSQoRVhFRVhUKSBNYWtlZmlsZQorIAkkKEFNX1ZfR0VOKSAoZWNobyAnW1Rlc3RdJyA+ICRALnRtcDsgXAorIAllY2hvICdUeXBlPXNlc3Npb24nID4+ICRALnRtcDsgXAorLQllY2hvICdFeGVjPWVudiBHX0VOQUJMRV9ESUFHTk9TVElDPTAgQ0xVVFRFUl9FTkFCTEVfRElBR05PU1RJQz0wICQoaW5zdGFsbGVkX3Rlc3RkaXIpLyQ8JyA+PiAkQC50bXA7IFwKKysJZWNobyAnRXhlYz1lbnYgR19FTkFCTEVfRElBR05PU1RJQz0wIENMVVRURVJfRU5BQkxFX0RJQUdOT1NUSUM9MCAkKGluc3RhbGxlZF90ZXN0ZGlyKS8kPCAtLXRhcCcgPj4gJEAudG1wOyBcCisrCWVjaG8gJ091dHB1dD1UQVAnID4+ICRALnRtcDsgXAorIAltdiAkQC50bXAgJEApCisgCisgQ0xFQU5GSUxFUyArPSAkKGluc3RhbGxlZF90ZXN0X21ldGFfREFUQSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODg3N2U1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjISAvYmluL3NoCisKK2dub21lLWRlc2t0b3AtdGVzdGluZy1ydW5uZXIgY2x1dHRlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMF8xLjIyLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wXzEuMjIuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MThjZGZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMF8xLjIyLjQuYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSBjbHV0dGVyLTEuMC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjI2NDk0MjU2Yzk4MGQ0OTcwM2E1NTM5MTZlMzA4M2NkIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMWQ3N2NlMTYwMjVmODc2NjdhMWQwMGRjNGZhNjE3YTE5MzUxNTZmNjNmZDE3NjM1ZmRhZGYxMzg4NjZjOWUxZSIKKworU1JDX1VSSSArPSAiZmlsZTovL2luc3RhbGwtZXhhbXBsZXMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3J1bi1pbnN0YWxsZWQtdGVzdHMtd2l0aC10YXAtb3V0cHV0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRmZWQ3MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wLmluYwpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkdTdHJlYW1lciBpbnRlZ3JhdGlvbiBsaWJyYXJ5IGZvciBDbHV0dGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5jbHV0dGVyLXByb2plY3Qub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKKworaW5oZXJpdCBjbHV0dGVyCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLUluc3RhbGwtZXhhbXBsZS1iaW5hcnktbmVlZGVkLWZvci1jb3JlLWltYWdlLWNsdXR0ZXIucGF0Y2giCisKK0RFUEVORFMgPSAiZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQgY2x1dHRlci0xLjAiCitSREVQRU5EU18ke1BOfSArPSAiZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZSIKK1BBQ0tBR0VTICA9KyAiJHtQTn0tZXhhbXBsZXMiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCisKK0ZJTEVTXyR7UE59ICAgICAgICAgICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC9saWIqLnNvIgorRklMRVNfJHtQTn0tZGV2ICAgICAgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyoubGEiCitGSUxFU18ke1BOfS1kYmcgICAgICArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvLmRlYnVnL2xpYiouc28iCitGSUxFU18ke1BOfS1leGFtcGxlcyAgPSAiJHtiaW5kaXJ9L3ZpZGVvLXBsYXllciAke2JpbmRpcn0vdmlkZW8tc2luayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wLzAwMDEtSW5zdGFsbC1leGFtcGxlLWJpbmFyeS1uZWVkZWQtZm9yLWNvcmUtaW1hZ2UtY2x1dHRlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wLzAwMDEtSW5zdGFsbC1leGFtcGxlLWJpbmFyeS1uZWVkZWQtZm9yLWNvcmUtaW1hZ2UtY2x1dHRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjI2Yjk5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAvMDAwMS1JbnN0YWxsLWV4YW1wbGUtYmluYXJ5LW5lZWRlZC1mb3ItY29yZS1pbWFnZS1jbHV0dGVyLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gZDc3YzcxMTI3N2JmMDc1Y2UwNTQ1YzE5YjMyMmYwNDBjNDljNzc4YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogVGh1LCAzMCBBcHIgMjAxNSAxMjoxOToxMyArMDMwMAorU3ViamVjdDogW1BBVENIXSBJbnN0YWxsIGV4YW1wbGUgYmluYXJ5IG5lZWRlZCBmb3IgY29yZS1pbWFnZS1jbHV0dGVyCisKK1NpZ25lZC1vZmYtYnk6IFpoYWkgRWR3aW4gPGVkd2luLnpoYWlAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0ltcG9ydGVkIGZyb20gY2x1dHRlci1nc3QtMS44IHBhY2thZ2UsIGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZCwKK2NvbW1pdCBhZTI4ZWUzZjdhMDYwYjllMGQxMzE1NGE4NGYyNDQ0YTk4NDkwYjViLCB1cGRhdGVkIGZvciBjbHV0dGVyLWdzdCAzLjAKKworU2lnbmVkLW9mZi1ieTogVG9tYXMgRnJ5ZHJ5Y2ggPHRvbWFzQHNsZWVwZml2ZS5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKy0tLQorIGV4YW1wbGVzL01ha2VmaWxlLmFtIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9NYWtlZmlsZS5hbQoraW5kZXggYmZiYzFiNS4uMDk2NTVlMyAxMDA2NDQKKy0tLSBhL2V4YW1wbGVzL01ha2VmaWxlLmFtCisrKysgYi9leGFtcGxlcy9NYWtlZmlsZS5hbQorQEAgLTEsNiArMSw2IEBACisgTlVMTCA9ICMKKyAKKy1ub2luc3RfUFJPR1JBTVMgPSBjYW1lcmEtcGxheWVyIHZpZGVvLXBsYXllciB2aWRlby1zaW5rIHZpZGVvLXNpbmstbmF2aWdhdGlvbiB2aWRlby1jb250ZW50CisrYmluX1BST0dSQU1TID0gY2FtZXJhLXBsYXllciB2aWRlby1wbGF5ZXIgdmlkZW8tc2luayB2aWRlby1zaW5rLW5hdmlnYXRpb24gdmlkZW8tY29udGVudAorIAorIEFNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpIFwKKyAJCSQoTUFJTlRBSU5FUl9DRkxBR1MpIFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAvZW5hYmxlLXRlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAvZW5hYmxlLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYWVjMzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC9lbmFibGUtdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorSW5zdGFsbCBleGFtcGxlIGJpbmFyeSBuZWVkZWQgZm9yIGNvcmUtaW1hZ2UtY2x1dHRlcgorCitTaWduZWQtb2ZmLWJ5OiBaaGFpIEVkd2luIDxlZHdpbi56aGFpQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbXBvcnRlZCBmcm9tIGNsdXR0ZXItZ3N0LTEuOCBwYWNrYWdlLCBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQsCitjb21taXQgYWUyOGVlM2Y3YTA2MGI5ZTBkMTMxNTRhODRmMjQ0NGE5ODQ5MGI1YiwgdXBkYXRlZCBmb3IgY2x1dHRlci1nc3QgMS42CisKK1NpZ25lZC1vZmYtYnk6IFRvbWFzIEZyeWRyeWNoIDx0b21hc0BzbGVlcGZpdmUuY29tPgorCitJbmRleDogZ2l0L2V4YW1wbGVzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZXhhbXBsZXMvTWFrZWZpbGUuYW0JMjAxMS0wMS0zMSAxMDoxNDoyMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBnaXQvZXhhbXBsZXMvTWFrZWZpbGUuYW0JMjAxMS0wMS0zMSAxMDoxNDozNC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xLDYgKzEsNiBAQAorIE5VTEwgPSAjCisgCistbm9pbnN0X1BST0dSQU1TID0gdmlkZW8tcGxheWVyIHZpZGVvLXNpbmsgdmlkZW8tc2luay1uYXZpZ2F0aW9uCisrYmluX1BST0dSQU1TID0gdmlkZW8tcGxheWVyIHZpZGVvLXNpbmsgdmlkZW8tc2luay1uYXZpZ2F0aW9uCisgCisgSU5DTFVERVMgPSAtSSQodG9wX3NyY2RpcikgXAorIAkgICAkKE1BSU5UQUlORVJfQ0ZMQUdTKSBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMF8zLjAuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wXzMuMC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOWE5NTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMF8zLjAuOC5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgY2x1dHRlci1nc3QtMy4wLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jbHV0dGVyLWdzdC9jbHV0dGVyLWdzdC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjQ7bWQ1PTk1YmFhY2JhMTk0ZTgxNGMxMTBlYTNiZGYyNWRkYmY0IgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJmN2Q5N2Y5NmU3Y2NhODJmMzgzMTdkMTczNGQ1ZGFkYiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjU4MmU4NWI4ODQ4MmUxNmY3ZWM3MTkzNjNlMzhmYWRmODRmYWI0ZDRiYWFhMjFlNTIyN2E0NTRiODI0ZjEzNWMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4OThiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1ndGstMS4wLmluYwpAQCAtMCwwICsxLDEyIEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIGVtYmVkZGluZyBhIENsdXR0ZXIgY2FudmFzIGluIGEgR1RLKyBhcHBsaWNhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuY2x1dHRlci1wcm9qZWN0Lm9yZy8iCitMSUNFTlNFID0gIkxHUEx2MisiCisKK2luaGVyaXQgY2x1dHRlcgorCitERVBFTkRTID0gImNsdXR0ZXItMS4wIGd0ayszIgorUEFDS0FHRVMgID0rICIke1BOfS1leGFtcGxlcyIKK0FVVE9UT09MU19BVVhESVIgPSAiJHtTfS9idWlsZCIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWd0ay0xLjBfMS42LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMF8xLjYuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzBlYTE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWd0ay0xLjBfMS42LjIuYmIKQEAgLTAsMCArMSw2IEBACityZXF1aXJlIGNsdXR0ZXItZ3RrLTEuMC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjU1N2Q4MTRjM2U3MGNjM2EyZDFjZjM4MTY5MTliMTRmIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiYmJkMDNkZmE5YTIwMTAyZDVjZGI0NDA1MTNiMGEwMzU5MzNkYTU1N2FkN2U5ZGEzMTU0NjAzNGRlMmRhZjA2OSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NvZ2wvY29nbC0xLjAuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RhMzFjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NvZ2wvY29nbC0xLjAuaW5jCkBAIC0wLDAgKzEsNzAgQEAKK1NVTU1BUlkgPSAiTW9kZXJuIDNEIGdyYXBoaWNzIEFQSSB3aXRoIGFzc29jaWF0ZWQgdXRpbGl0eSBBUElzIgorSE9NRVBBR0UgPSAiaHR0cDovL3dpa2kuY2x1dHRlci1wcm9qZWN0Lm9yZy93aWtpL0NvZ2wiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBjbHV0dGVyCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgZ2RrLXBpeGJ1ZiIKK1BBQ0tBR0VTID0rICIke1BOfS1leGFtcGxlcyBcCisgICAgICAgICAgICAgbGliY29nbCBsaWJjb2dsLWdsZXMyIGxpYmNvZ2wtcGFuZ28gbGliY29nbC1wYXRoIFwKKyAgICAgICAgICAgICIKK0FVVE9UT09MU19BVVhESVIgPSAiJHtTfS9idWlsZCIKKworIyBFeHRyYSBERVBFTkRTIGZvciBQQUNLQUdFQ09ORklHCitFREVQRU5EU19HTCA9ICJ2aXJ0dWFsL2xpYmdsIGxpYmRybSIKK0VERVBFTkRTX0dMRVMyID0gInZpcnR1YWwvbGliZ2xlczIiCitFREVQRU5EU19LTVMgPSAibGliZHJtIHZpcnR1YWwvZWdsIgorRURFUEVORFNfRUdMID0gInZpcnR1YWwvZWdsIgorRURFUEVORFNfWDExID0gInZpcnR1YWwvbGlieDExIGxpYnhjb21wb3NpdGUgbGlieGZpeGVzIGxpYnhpIGxpYnhyYW5kciIKK0VERVBFTkRTX1dBWUxBTkQgPSAidmlydHVhbC9tZXNhIHdheWxhbmQiCisKKyMgRXh0cmEgUkRFUEVORFMgZm9yIFBBQ0tBR0VDT05GSUcKKyMgVGhpcyBoYXMgdG8gYmUgZXhwbGljdGx5IGxpc3RlZCwgYmVjYXVzZSBjb2dsIGRsb3BlbnMgdGhlIGJhY2tlbmRzCitFUkRFUEVORFNfR0wgICAgPSAibGliZ2wiCitFUkRFUEVORFNfR0xFUzIgPSAibGliZ2xlczIiCisKKyMgR0xFU3YxIGlzIHJhcmVseSB0ZXN0ZWQsIHNvIGRpc2FibGUgaXQKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24JXAorCSAgICAgICAJIC0tZW5hYmxlLWV4YW1wbGVzLWluc3RhbGwJXAorCSAgICAgICAJIC0tZW5hYmxlLWRlYnVnCQkgCVwKKwkgICAgICAgCSAtLWRpc2FibGUtZ2xlczEJCVwKKwkgICAgICAgICAtLWRpc2FibGUtY2Fpcm8gICAgICAgICAgICAgICAgXAorCSAgICAJIgorCisjIE9wZW5HTC9HTFgKK1BBQ0tBR0VDT05GSUdbZ2x4XSA9ICItLWVuYWJsZS1nbCAtLWVuYWJsZS1nbHgsLS1kaXNhYmxlLWdsIC0tZGlzYWJsZS1nbHgsJHtFREVQRU5EU19HTH0gJHtFREVQRU5EU19YMTF9LCR7RVJERVBFTkRTX0dMfSIKKworIyBHTEVTdjIKK1BBQ0tBR0VDT05GSUdbZ2xlczJdID0gIi0tZW5hYmxlLWdsZXMyLC0tZGlzYWJsZS1nbGVzMiwke0VERVBFTkRTX0dMRVMyfSwgJHtFUkRFUEVORFNfR0xFUzJ9IgorCisjIEVHTCBiYWNrZW5kcworUEFDS0FHRUNPTkZJR1tlZ2wta21zXSA9ICItLWVuYWJsZS1rbXMtZWdsLXBsYXRmb3JtLC0tZGlzYWJsZS1rbXMtZWdsLXBsYXRmb3JtLCR7RURFUEVORFNfS01TfSIKK1BBQ0tBR0VDT05GSUdbZWdsLW51bGxdID0gIi0tZW5hYmxlLW51bGwtZWdsLXBsYXRmb3JtLC0tZGlzYWJsZS1udWxsLWVnbC1wbGF0Zm9ybSIKK1BBQ0tBR0VDT05GSUdbZWdsLXgxMV0gPSAiLS1lbmFibGUteGxpYi1lZ2wtcGxhdGZvcm0sLS1kaXNhYmxlLXhsaWItZWdsLXBsYXRmb3JtLCR7RURFUEVORFNfWDExfSAke0VERVBFTkRTX0VHTH0iCitQQUNLQUdFQ09ORklHW2VnbC13YXlsYW5kXSA9ICItLWVuYWJsZS13YXlsYW5kLWVnbC1wbGF0Zm9ybSwtLWRpc2FibGUtd2F5bGFuZC1lZ2wtcGxhdGZvcm0sJHtFREVQRU5EU19XQVlMQU5EfSIKKworIyBXYXlsYW5kIChzZXJ2ZXItc2lkZSkKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZC1zZXJ2ZXJdID0gIi0tZW5hYmxlLXdheWxhbmQtZWdsLXNlcnZlciwtLWRpc2FibGUtd2F5bGFuZC1lZ2wtc2VydmVyLCR7RURFUEVORFNfV0FZTEFORH0iCisKKyMgU3VwcG9ydCByZW5kZXJpbmcgdGV4dCBkaXJlY3RseSB3aXRoIFBhbmdvCitQQUNLQUdFQ09ORklHW2NvZ2wtcGFuZ29dID0gIi0tZW5hYmxlLWNvZ2wtcGFuZ28sLS1kaXNhYmxlLWNvZ2wtcGFuZ28scGFuZ28iCisKKyMgUmVzcGVjdCB0aGUgRElTVFJPX0ZFQVRVUkVTIHRvIHB1bGwgaW4gR0xYIG9yIFdheWxhbmQgYXMgYXBwcm9wcmlhdGUgYnkKKyMgZGVmYXVsdC4KK1BBQ0tBR0VDT05GSUcgPz89ICJjb2dsLXBhbmdvIGdsZXMyIFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCAnZWdsLXdheWxhbmQnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdnbHggZWdsLXgxMScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICIKKworCitGSUxFU18ke1BOfS1leGFtcGxlcyA9ICIke2JpbmRpcn0vKiAke2RhdGFkaXJ9L2NvZ2wvZXhhbXBsZXMtZGF0YS8qIgorRklMRVNfbGliY29nbCA9ICIke2xpYmRpcn0vbGliY29nbCR7U09MSUJTfSIKK0ZJTEVTX2xpYmNvZ2wtZ2xlczIgPSAiJHtsaWJkaXJ9L2xpYmNvZ2wtZ2xlczIke1NPTElCU30iCitGSUxFU19saWJjb2dsLXBhbmdvID0gIiR7bGliZGlyfS9saWJjb2dsLXBhbmdvJHtTT0xJQlN9IgorCitGSUxFU19saWJjb2dsLXBhdGggPSAiJHtsaWJkaXJ9L2xpYmNvZ2wtcGF0aCR7U09MSUJTfSIKKworIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYWZ0ZXIgRGViaWFuLXJlbmFtaW5nCitSUFJPVklERVNfbGliY29nbCA9ICJjb2dsLTEuMCIKK1JDT05GTElDVFNfbGliY29nbCA9ICJjb2dsLTEuMCIKK1JSRVBMQUNFU19saWJjb2dsID0gImNvZ2wtMS4wIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMC9jb2dsLWZyYW1lYnVmZmVyLWdsLVdvcmstYWdhaW4tb24tR0xFU3YyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMC9jb2dsLWZyYW1lYnVmZmVyLWdsLVdvcmstYWdhaW4tb24tR0xFU3YyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlODM5NTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jb2dsL2NvZ2wtMS4wL2NvZ2wtZnJhbWVidWZmZXItZ2wtV29yay1hZ2Fpbi1vbi1HTEVTdjIucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKworCisKK0Zyb20gZjhjY2U1ZjZjYjI5NThhNDA3NGY4N2NkMzQ1YmZlNDZlMGRkYTZlMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNwZXIgU3QuIFBpZXJyZSIgPGpzdHBpZXJyZUBtZWNoZXllLm5ldD4KK0RhdGU6IE1vbiwgMjAgQXByIDIwMTUgMTI6MDg6MjkgLTA3MDAKK1N1YmplY3Q6IGNvZ2wtZnJhbWVidWZmZXItZ2w6IFdvcmsgYWdhaW4gb24gR0xFU3YyCisKKworZGlmZiAtLWdpdCBhL2NvZ2wvZHJpdmVyL2dsL2NvZ2wtZnJhbWVidWZmZXItZ2wuYyBiL2NvZ2wvZHJpdmVyL2dsL2NvZ2wtZnJhbWVidWZmZXItZ2wuYworaW5kZXggNzkzYjEwYi4uNjA5Y2ZiMyAxMDA2NDQKKy0tLSBhL2NvZ2wvZHJpdmVyL2dsL2NvZ2wtZnJhbWVidWZmZXItZ2wuYworKysrIGIvY29nbC9kcml2ZXIvZ2wvY29nbC1mcmFtZWJ1ZmZlci1nbC5jCitAQCAtMTA3LDYgKzEwNywxMiBAQAorICNpZm5kZWYgR0xfUEFDS19JTlZFUlRfTUVTQQorICNkZWZpbmUgR0xfUEFDS19JTlZFUlRfTUVTQSAweDg3NTgKKyAjZW5kaWYKKysjaWZuZGVmIEdMX0JBQ0tfTEVGVAorKyNkZWZpbmUgR0xfQkFDS19MRUZUCQkJCTB4MDQwMgorKyNlbmRpZgorKyNpZm5kZWYgR0xfQkFDS19SSUdIVAorKyNkZWZpbmUgR0xfQkFDS19SSUdIVAkJCQkweDA0MDMKKysjZW5kaWYKKyAKKyAjaWZuZGVmIEdMX0NPTE9SCisgI2RlZmluZSBHTF9DT0xPUiAweDE4MDAKK0BAIC0yNDUsNiArMjUxLDkgQEAgX2NvZ2xfZnJhbWVidWZmZXJfZ2xfZmx1c2hfc3RlcmVvX21vZGVfc3RhdGUgKENvZ2xGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIpCisgICBpZiAoZnJhbWVidWZmZXItPnR5cGUgPT0gQ09HTF9GUkFNRUJVRkZFUl9UWVBFX09GRlNDUkVFTikKKyAgICAgcmV0dXJuOworIAorKyAgaWYgKCFjdHgtPmdsRHJhd0J1ZmZlcikKKysgICAgcmV0dXJuOworKworICAgLyogVGhlIG9uZS1zaG90IGRlZmF1bHQgZHJhdyBidWZmZXIgc2V0dGluZyBpbiBfY29nbF9mcmFtZWJ1ZmZlcl9nbF9iaW5kCisgICAgKiBtdXN0IGhhdmUgYWxyZWFkeSBoYXBwZW5lZC4gSWYgbm90IGl0IHdvdWxkIG92ZXJyaWRlIHdoYXQgd2Ugc2V0IGhlcmUuICovCisgICBnX2Fzc2VydCAoY3R4LT53YXNfYm91bmRfdG9fb25zY3JlZW4pOworLS0gCitjZ2l0IHYwLjEwLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMF8xLjIwLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jb2dsL2NvZ2wtMS4wXzEuMjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjBiODE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMF8xLjIwLjAuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIGNvZ2wtMS4wLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vY29nbC1mcmFtZWJ1ZmZlci1nbC1Xb3JrLWFnYWluLW9uLUdMRVN2Mi5wYXRjaCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MWIxYTUwOGQ5MWQyNWNhNjA3YzgzZjkyZjNlMzFjODQiCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI1YjI4ODk3MTk0ZDlmZjc2YTU3NGE5NDkzZDFmN2VlMCIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjcyOWUzNTQ5NTgyOWU3ZDMxZmFmYTMzNThlNDdiNzQzYmEyMWEyYjA4ZmY5YjZjZDI4ZmI3NGMwZGU5MTE5MmIiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzL2NvbmZpZ3VyZS5pbi1GaXgtc3RyaW5nLWFyZ3VtZW50LXN5bnRheC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzL2NvbmZpZ3VyZS5pbi1GaXgtc3RyaW5nLWFyZ3VtZW50LXN5bnRheC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzE3ZWE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmItZXhhbXBsZXMvY29uZmlndXJlLmluLUZpeC1zdHJpbmctYXJndW1lbnQtc3ludGF4LnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gODgwNzdlZDE1NmE3MTRmMzJiYjQwOGY0MjIyNzhkNjE2MTFmZmQ0MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CitEYXRlOiBTYXQsIDI2IEp1bCAyMDE0IDE2OjU3OjQ2IC0wMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZS5pbjogRml4IHN0cmluZyBhcmd1bWVudCBzeW50YXgKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KKy0tLQorIGNvbmZpZ3VyZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggYmZlMWI4Mi4uZTkzOWJiZCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtNjUsNyArNjUsNyBAQCBmaSkKKyAKKyBESVJFQ1RGQl9SRVFVSVJFRF9WRVJTSU9OPTEuNC4xNAorIAorLVBLR19DSEVDS19NT0RVTEVTKERJUkVDVEZCLCBkaXJlY3RmYiA+PSAkRElSRUNURkJfUkVRVUlSRURfVkVSU0lPTixbIFdBVEVSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXdhdGVyIGRpcmVjdGZiYCBdLAorK1BLR19DSEVDS19NT0RVTEVTKFtESVJFQ1RGQl0sIGRpcmVjdGZiID49ICRESVJFQ1RGQl9SRVFVSVJFRF9WRVJTSU9OLFsgV0FURVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9d2F0ZXIgZGlyZWN0ZmJgIF0sCisgCUFDX01TR19FUlJPUihbJERJUkVDVEZCX1BLR19FUlJPUlMKKyAqKiogRGlyZWN0RkIgJERJUkVDVEZCX1JFUVVJUkVEX1ZFUlNJT04gb3IgbmV3ZXIgaXMgcmVxdWlyZWQuIFRoZSBsYXRlc3QgdmVyc2lvbgorICoqKiBvZiBEaXJlY3RGQiBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3LmRpcmVjdGZiLm9yZy8uXSkpCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzXzEuNy4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmItZXhhbXBsZXNfMS43LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMzZThiZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzXzEuNy4wLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiRXhhbXBsZSBEaXJlY3RGQiBhcHBsaWNhdGlvbnMiCitERVNDUklQVElPTiA9ICJUaGUgRGlyZWN0RkItZXhhbXBsZXMgcGFja2FnZSBjb250YWlucyBhIHNldCBvZiBzaW1wbGUgRGlyZWN0RkIgXAorICAgICAgYXBwbGljYXRpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdCBhbmQgZGVtb25zdHJhdGUgdmFyaW91cyBEaXJlY3RGQiBcCisgICAgICBmZWF0dXJlcyIKK0RFUEVORFMgPSAiZGlyZWN0ZmIiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIk1JVCIKKworU1JDX1VSSSA9ICIgXAorICAgICAgICAgICBodHRwOi8vd3d3LmRpcmVjdGZiLm9yZy9kb3dubG9hZHMvRXh0cmFzL0RpcmVjdEZCLWV4YW1wbGVzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUuaW4tRml4LXN0cmluZy1hcmd1bWVudC1zeW50YXgucGF0Y2ggXAorICAgICAgICAgICIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWNmNmZkMmIxOTkxNWFmYzRkYTU2MDQzOTI2Y2ExOGYiCisKK1MgPSAiJHtXT1JLRElSfS9EaXJlY3RGQi1leGFtcGxlcy0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4YjYwYzg2N2FmMjk1NDgxYzMyYThjN2ZjNTgwMjMwNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5YTIxMDRjYzRkYTgxMjNjODM3MTgxMzU1MWI2NmI5NDMxOTg5NzlmNzQ1Y2JlYmMwMzRiYjVlMTA4NDQxMjJhIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NmFhZWFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIuaW5jCkBAIC0wLDAgKzEsODAgQEAKK1NVTU1BUlkgPSAiR3JhcGhpY3MgYWJzdHJhY3Rpb24gbGlicmFyeSBmb3IgdGhlIExpbnV4IEZyYW1lYnVmZmVyIERldmljZSIKK0RFU0NSSVBUSU9OID0gIkRpcmVjdEZCIGlzIGEgdGhpbiBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgZGV2ZWxvcGVycyBcCit3aXRoIGhhcmR3YXJlIGdyYXBoaWNzIGFjY2VsZXJhdGlvbiwgaW5wdXQgZGV2aWNlIGhhbmRsaW5nIGFuZCBcCithYnN0cmFjdGlvbiwgYW4gaW50ZWdyYXRlZCB3aW5kb3dpbmcgc3lzdGVtIHdpdGggc3VwcG9ydCBmb3IgXAordHJhbnNsdWNlbnQgd2luZG93cyBhbmQgbXVsdGlwbGUgZGlzcGxheSBsYXllcnMgb24gdG9wIG9mIHRoZSBcCitMaW51eCBmcmFtZWJ1ZmZlciBkZXZpY2UuIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWRjZjNjODI1NjU5ZTgyNTM5NjQ1ZGE0MWE3OTA4NTg5IgorCitIT01FUEFHRSA9ICJodHRwOi8vZGlyZWN0ZmIub3JnIgorREVQRU5EUyA9ICJqcGVnIGxpYnBuZyBmcmVldHlwZSB6bGliIHRzbGliIHN5c2ZzdXRpbHMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5kaXJlY3RmYi5vcmcvZG93bmxvYWRzL0NvcmUvRGlyZWN0RkItMS43L0RpcmVjdEZCLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmVmaXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZnVzaW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Jhc2hpc20ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1nZngtZGlyZWN0LUFib2lkLXVzbmctVkxBcy1hbmQtcHJpbnRmLWZvcm1hdHMucGF0Y2ggXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L0RpcmVjdEZCLSR7UFZ9IgorCitMREZMQUdTX2FwcGVuZCA9IiAtbHRzIC1sbSIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9kaXJlY3RmYi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbanBlZzIwMDBdID0gIi0tZW5hYmxlLWpwZWcyMDAwLC0tZGlzYWJsZS1qcGVnMjAwMCxqYXNwZXIiCitQQUNLQUdFQ09ORklHW2RybWttc10gPSAiLS1lbmFibGUtZHJta21zLC0tZGlzYWJsZS1kcm1rbXMsbGliZHJtIgorUEFDS0FHRUNPTkZJR1t0aWZmXSA9ICItLWVuYWJsZS10aWZmLC0tZGlzYWJsZS10aWZmLHRpZmYiCitQQUNLQUdFQ09ORklHW3dlYnBdID0gIi0tZW5hYmxlLXdlYnAsLS1kaXNhYmxlLXdlYnAsbGlid2VicCIKKworRVhUUkFfT0VDT05GID0gIlwKKyAgLS13aXRoLWdmeGRyaXZlcnM9bm9uZSBcCisgIC0tZW5hYmxlLWZyZWV0eXBlPXllcyBcCisgIC0tZW5hYmxlLXpsaWIgXAorICAtLWRpc2FibGUtaW1saWIyIFwKKyAgLS1kaXNhYmxlLW1lc2EgXAorICAtLWRpc2FibGUtc2RsIFwKKyAgLS1kaXNhYmxlLXZuYyBcCisgIC0tZGlzYWJsZS14MTEgXAorIgorCisjT25jZSAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciBvcHRpb24gb2YgZ2NjIGlzIGFkZGVkIGludG8gVEFSR0VUX0NMRkFHUyBhcyBkZWZhdWx0CisjdGhpcyB3aWxsIGNhdXNlIGRpcmVjdGZiIGJ1aWxkIGZhaWx1cmUgb24geDg2IGFyY2gsIHNvIGZpbHRlciBvdXQgaXQuCitUQVJHRVRfQ0ZMQUdTX3JlbW92ZV94ODYgPSAiLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIiCisKKyNQQUNLQUdFU19EWU5BTUlDICs9ICJeZGlyZWN0ZmItaW5wdXRkcml2ZXJzLS4qIgorIworI3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyMgICAgaW5wdXRkcml2ZXJzX2xpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vaW5wdXRkcml2ZXJzJykKKyMgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgaW5wdXRkcml2ZXJzX2xpYmRpciwgJyouc28kJywgJ2RpcmVjdGZiLWlucHV0ZHJpdmVycy0lcycsICdEaXJlY3RmYiBwbHVnaW4gZm9yICVzJykKKyN9CisKKyMgTk9URTogbW9ub2xpdGhpYyBwYWNrYWdpbmcgZm9yIG5vdywgc2hvdWxkIGltcHJvdmUgdGhhdCBldmVudHVhbGx5CisKKworCitGSUxFU18ke1BOfS1kYmcgKz0gIlwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9LyovKi8uZGVidWcvKi5zbyBcCisgICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS8qLy5kZWJ1Zy8qLnNvIFwKKyIKKworRklMRVNfJHtQTn0tZGV2ICs9ICJcCisgICR7YmluZGlyfS9kaXJlY3RmYi1jb25maWcgXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vc3lzdGVtcy8qLmxhIFwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L2lucHV0ZHJpdmVycy8qLmxhIFwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L2ludGVyZmFjZXMvKi8qLmxhIFwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L3dtLyoubGEgXAorIgorCitGSUxFU18ke1BOfSArPSAiXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vc3lzdGVtcy8qLnNvIFwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L2lucHV0ZHJpdmVycy8qLnNvIFwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L2ludGVyZmFjZXMvKi8qLnNvIFwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L3dtLyouc28gXAorICAke2RhdGFkaXJ9L2RpcmVjdGZiLSR7UFZ9IFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLzAwMDEtZ2Z4LWRpcmVjdC1BYm9pZC11c25nLVZMQXMtYW5kLXByaW50Zi1mb3JtYXRzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvMDAwMS1nZngtZGlyZWN0LUFib2lkLXVzbmctVkxBcy1hbmQtcHJpbnRmLWZvcm1hdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZlMGY3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLzAwMDEtZ2Z4LWRpcmVjdC1BYm9pZC11c25nLVZMQXMtYW5kLXByaW50Zi1mb3JtYXRzLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK0Zyb20gZjQzZWY0NDgwNmZmYjhlM2IzNWQ5OTA3MGRkZTliNmNjMTcxNGQzZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDggU2VwIDIwMTUgMjE6MzI6MjAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gZ2Z4LGRpcmVjdDogQWJvaWQgdXNuZyBWTEFzIGFuZCBwcmludGYgZm9ybWF0cworCitWTEFzIGFyZSBmbGFnZ2VkIGJ5IGNsYW5nIHdoZW4gdXNpbmcgbm9uLVBPRCB0eXBlcywgdGhlcmVmb3JlIHJlcGxhY2UKK3RoZSB1c2FnZSB3aXRoIGFsbG9jYSB3aGljaCBpcyBleGFjdCBzYW1lIGFsbG9jYXRpb24gb24gc3RhY2sKKworIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKF9fcHJpbnRmX18pKSkgaXMgbm90IHBvcnRhYmxlIGFzIHVzZWQgaGVyZQorIHRoZXJlZm9yZSBkaXNhYmxlIHRoZSBjaGVjayBmb3IgY2xhbmcgaGVyZSwgd2UgbG9zZSBubyBmdW5jdGlvbmFsaXR5CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgbGliL2RpcmVjdC91dGlsLmggfCAyICstCisgc3JjL2dmeC91dGlsLmNwcCAgfCA4ICsrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZGlyZWN0L3V0aWwuaCBiL2xpYi9kaXJlY3QvdXRpbC5oCitpbmRleCA3Mjk0MWU5Li44ZTdmYTRhIDEwMDY0NAorLS0tIGEvbGliL2RpcmVjdC91dGlsLmgKKysrKyBiL2xpYi9kaXJlY3QvdXRpbC5oCitAQCAtOTgsNyArOTgsNyBAQAorICNkZWZpbmUgRF9DT05TVF9GVU5DCisgI2VuZGlmCisgCistI2lmIF9fR05VQ19fID49IDMKKysjaWYgX19HTlVDX18gPj0gMyAmJiAhZGVmaW5lZCBfX2NsYW5nX18KKyAjZGVmaW5lIERfRk9STUFUX1BSSU5URihuKSAgICAgICAgIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIG4sIG4rMSkpKQorICNkZWZpbmUgRF9GT1JNQVRfVlBSSU5URihuKSAgICAgICAgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZfXywgbiwgMCkpKQorICNlbHNlCitkaWZmIC0tZ2l0IGEvc3JjL2dmeC91dGlsLmNwcCBiL3NyYy9nZngvdXRpbC5jcHAKK2luZGV4IDQwMDMyYmMuLmQxMDE1ZDQgMTAwNjQ0CistLS0gYS9zcmMvZ2Z4L3V0aWwuY3BwCisrKysgYi9zcmMvZ2Z4L3V0aWwuY3BwCitAQCAtMjk0LDggKzI5NCw4IEBAIGRmYl9nZnhfY29weV9yZWdpb25zX3N0ZXJlbyggQ29yZVN1cmZhY2UgICAgICAgICAgICpzb3VyY2UsCisgeworICAgICAgdW5zaWduZWQgaW50IGksIG4gPSAwOworICAgICAgREZCUmVjdGFuZ2xlIHJlY3QgPSB7IDAsIDAsIHNvdXJjZS0+Y29uZmlnLnNpemUudywgc291cmNlLT5jb25maWcuc2l6ZS5oIH07CistICAgICBERkJSZWN0YW5nbGUgcmVjdHNbbnVtXTsKKy0gICAgIERGQlBvaW50ICAgICBwb2ludHNbbnVtXTsKKysgICAgIERGQlJlY3RhbmdsZSAqcmVjdHMgPSAgKERGQlJlY3RhbmdsZSopYWxsb2NhKCBzaXplb2Yoc3RydWN0IERGQlJlY3RhbmdsZSkgKiBudW0pOworKyAgICAgREZCUG9pbnQgKnBvaW50cyA9ICAoREZCUG9pbnQqKWFsbG9jYSggc2l6ZW9mKHN0cnVjdCBERkJQb2ludCkgKiBudW0pOworIAorICAgICAgZm9yIChpPTA7IGk8bnVtOyBpKyspIHsKKyAgICAgICAgICAgREZCX1JFR0lPTl9BU1NFUlQoICZyZWdpb25zW2ldICk7CitAQCAtMzUxLDggKzM1MSw4IEBAIGRmYl9nZnhfY29weV9yZWdpb25zX2NsaWVudCggQ29yZVN1cmZhY2UgICAgICAgICAgICAgKnNvdXJjZSwKKyB7CisgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgaSwgbiA9IDA7CisgICAgICBERkJSZWN0YW5nbGUgICAgICAgICAgICAgcmVjdCA9IHsgMCwgMCwgc291cmNlLT5jb25maWcuc2l6ZS53LCBzb3VyY2UtPmNvbmZpZy5zaXplLmggfTsKKy0gICAgIERGQlJlY3RhbmdsZSAgICAgICAgICAgICByZWN0c1tudW1dOworLSAgICAgREZCUG9pbnQgICAgICAgICAgICAgICAgIHBvaW50c1tudW1dOworKyAgICAgREZCUmVjdGFuZ2xlICAgICAgICAgICAgKnJlY3RzID0gIChERkJSZWN0YW5nbGUqKWFsbG9jYSggc2l6ZW9mKHN0cnVjdCBERkJSZWN0YW5nbGUpICogbnVtKTsKKysgICAgIERGQlBvaW50ICAgICAgICAgICAgICAgICpwb2ludHMgPSAgKERGQlBvaW50KilhbGxvY2EoIHNpemVvZihzdHJ1Y3QgREZCUG9pbnQpICogbnVtKTsKKyAgICAgIENvcmVHcmFwaGljc1N0YXRlQ2xpZW50ICpjbGllbnQgPSBfY2xpZW50ID8gX2NsaWVudCA6ICZTdGF0ZUNsaWVudDo6R2V0KCktPmNsaWVudDsKKyAgICAgIENhcmRTdGF0ZSAgICAgICAgICAgICAgICpzdGF0ZSAgPSBjbGllbnQtPnN0YXRlOworICAgICAgQ2FyZFN0YXRlICAgICAgICAgICAgICAgIGJhY2t1cDsKKy0tIAorMi41LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvYmFzaGlzbS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2Jhc2hpc20ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVmNGU5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2Jhc2hpc20ucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorJHt4Ly95L30gaXMgYSBiYXNoIHN5bnRheC4gUmVwbGFjZSB3aXRoIHNvbWV0aGluZyBkYXNoIGNvbXBhdGlibGUKKworUlAgMjAxNS81LzMKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogRGlyZWN0RkItMS43LjcvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gRGlyZWN0RkItMS43Ljcub3JpZy9jb25maWd1cmUuaW4KKysrKyBEaXJlY3RGQi0xLjcuNy9jb25maWd1cmUuaW4KK0BAIC0yNjk2LDcgKzI2OTYsNyBAQCBBTV9DT05ESVRJT05BTChCVUlMRF9UT09MUywgdGVzdCAiJHdpdGhfCisgQU1fQ09ORElUSU9OQUwoQ1JPU1NfQ09NUElMSU5HLCB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9ICJ5ZXMiKQorIAorIENGTEFHUz0iJENGTEFHUyAkREZCX0lOVEVSTkFMX0NGTEFHUyIKKy1DWFhGTEFHUz0iJENYWEZMQUdTICR7Q0ZMQUdTLy8tV2Vycm9yLWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uL30iCisrQ1hYRkxBR1M9IiRDWFhGTEFHUyAkKHByaW50ZiAnJXNcbicgIiRDRkxBR1MiIHwgc2VkICdzLy1XZXJyb3ItaW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24vL2cnKSIKKyBERkJfTERGTEFHUz0iJExERkxBR1MgJFpMSUJfTElCUyIKKyAKKyBDRkxBR1M9IiRDRkxBR1MgJENGTEFHU19TVEQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9jb25maWd1cmVmaXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9jb25maWd1cmVmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ4YzAxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2NvbmZpZ3VyZWZpeC5wYXRjaApAQCAtMCwwICsxLDYwIEBACitMaWJ0b29sIG5lZWRzIHRoZXNlIHNldCBjb3JyZWN0bHkgZWxzZSB3ZSBlbmQgdXAgd2l0aCBwb2ludGxlc3MgcnBhdGhzCitzdWNoIGFzIHRoZSBRQSB3YXJuaW5nczoKKworV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZibGF5ZXIgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZibWFzdGVyIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYldBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL21rZGdpZmZ0IGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYldBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYmR1bXAgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiaW5wdXQgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiZnggY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZic2NyZWVuIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYldBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL21rZGdpZmYgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiaW5zcGVjdG9yIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vbWtkZmlmZiBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYmluZm8gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJwZW5tb3VudCBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYmcgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9saWJmdXNpb24tMS40LnNvLjYgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9saWJkaXJlY3RmYi0xLjQuc28uNi4wLjkgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9saWJkaXJlY3RmYi0xLjQuc28uNiBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2xpYmZ1c2lvbi0xLjQuc28uNi4wLjkgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9zeXN0ZW1zL2xpYmRpcmVjdGZiX2ZiZGV2LnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvc3lzdGVtcy9saWJkaXJlY3RmYl9kZXZtZW0uc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9zeXN0ZW1zL2xpYmRpcmVjdGZiX2R1bW15LnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJWaWRlb1Byb3ZpZGVyL2xpYmlkaXJlY3RmYnZpZGVvcHJvdmlkZXJfdjRsLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJWaWRlb1Byb3ZpZGVyL2xpYmlkaXJlY3RmYnZpZGVvcHJvdmlkZXJfZ2lmLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JQ29yZVJlc291cmNlTWFuYWdlci9saWJpY29yZXJlc291cmNlbWFuYWdlcl90ZXN0LnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJJbWFnZVByb3ZpZGVyL2xpYmlkaXJlY3RmYmltYWdlcHJvdmlkZXJfanBlZy5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2ludGVyZmFjZXMvSURpcmVjdEZCSW1hZ2VQcm92aWRlci9saWJpZGlyZWN0ZmJpbWFnZXByb3ZpZGVyX3BuZy5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2ludGVyZmFjZXMvSURpcmVjdEZCSW1hZ2VQcm92aWRlci9saWJpZGlyZWN0ZmJpbWFnZXByb3ZpZGVyX2RmaWZmLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJJbWFnZVByb3ZpZGVyL2xpYmlkaXJlY3RmYmltYWdlcHJvdmlkZXJfZ2lmLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJGb250L2xpYmlkaXJlY3RmYmZvbnRfZnQyLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJGb250L2xpYmlkaXJlY3RmYmZvbnRfZGdpZmYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi93bS9saWJkaXJlY3RmYndtX2RlZmF1bHQuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfenl0cm9uaWMuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfcGVubW91bnQuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfbGludXhfaW5wdXQuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfc2VyaWFsbW91c2Uuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfbXV0b3VjaC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl90c2xpYi5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9qb3lzdGljay5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9zb255cGkuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfbGlyYy5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl93bTk3eHhfdHMuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfcHMybW91c2Uuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfa2V5Ym9hcmQuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSUCAyMDEyLzAzLzE2CisKK0luZGV4OiBEaXJlY3RGQi0xLjQuMTUvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gRGlyZWN0RkItMS40LjE1Lm9yaWcvY29uZmlndXJlLmluCTIwMTItMDMtMTYgMTM6MzI6MjMuNjkyNDAyODc5ICswMDAwCisrKysgRGlyZWN0RkItMS40LjE1L2NvbmZpZ3VyZS5pbgkyMDEyLTAzLTE2IDEzOjMzOjIyLjMxMjQwMDk2MCArMDAwMAorQEAgLTk3LDEzICs5Nyw2IEBACisgQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZykKKyBBQ19DSEVDS19GVU5DUyhmb3JrKQorIAorLQorLSMjIFdvcmsgYXJvdW5kIGxpYnN0dWhsIGR1cmluZyBjcm9zcyBidWlsZC4uLgorLWlmIHRlc3QgIiRob3N0IiAhPSAiJGJ1aWxkIjsgdGhlbgorLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiIKKy0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iIgorLWZpCistCisgQUNfUEFUSF9QUk9HUyhQRVJMLCBwZXJsNSBwZXJsKQorIAorIEFDX1BBVEhfUFJPRyhNQU4ySFRNTCwgbWFuMmh0bWwsIG5vKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvZnVzaW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvZnVzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmODFhNjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9mdXNpb24ucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorZGlyZWN0ZmI6IEZpeCBmb3IgaGFuZ3MgaW4gZGlyZWN0X3Rlc3QsIGZ1c2lvbl9za2lybWlzaCBvbiBleGl0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogTGF1cmVuIFBvc3QgPGxhdXJlbi5wb3N0QGZyZWVzY2FsZS5jb20+CisKKy0tLSBhL2xpYi9mdXNpb24vZnVzaW9uLmMJMjAxMy0wMS0xOCAyMjo1NzoxMS4wMDAwMDAwMDAgKzA4MDAKKysrKyBiL2xpYi9mdXNpb24vZnVzaW9uLmMJMjAxMy0wNy0wNCAxMDo0Mjo1Ni41MDI2OTkxMTkgKzA4MDAKK0BAIC0yODUzLDkgKzI4NTMsMTQgQEAKKyAgICAgICAgICAgZGlyZWN0X211dGV4X2xvY2soICZ3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9tdXRleCApOworIAorICAgICAgICAgICB3aGlsZSAoMSkgeworLSAgICAgICAgICAgICAgIGlmICghd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfYnVmZmVycykKKysgICAgICAgICAgICAgICBpZiAoIXdvcmxkLT5ldmVudF9kaXNwYXRjaGVyX2J1ZmZlcnMpeworICAgICAgICAgICAgICAgICAgICAgZGlyZWN0X3dhaXRxdWV1ZV93YWl0KCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfY29uZCwgJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX211dGV4ICk7CistCisrICAgICAgICAgICAgICAgICAgICBpZiAod29ybGQtPmRpc3BhdGNoX3N0b3ApIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgRF9ERUJVR19BVCggRnVzaW9uX01haW5fRGlzcGF0Y2gsICIgIC0+IElHTk9SSU5HIChkaXNwYXRjaF9zdG9wISlcbiIgKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0X211dGV4X3VubG9jayggJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX211dGV4ICk7CisrICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBidWYgPSAoRnVzaW9uRXZlbnREaXNwYXRjaGVyQnVmZmVyICopd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfYnVmZmVyczsKKyAgICAgICAgICAgICAgICBEX01BR0lDX0FTU0VSVCggYnVmLCBGdXNpb25FdmVudERpc3BhdGNoZXJCdWZmZXIgKTsKKyAKK0BAIC0yODcyLDYgKzI4NzcsMTEgQEAKKyAvL0RfSU5GTygid2FpdGluZy4uLlxuIik7CisgICAgICAgICAgICAgICAgICAgICBEX0FTU0VSVCggYnVmLT5yZWFkX3BvcyA9PSBidWYtPndyaXRlX3BvcyApOworICAgICAgICAgICAgICAgICAgICAgZGlyZWN0X3dhaXRxdWV1ZV93YWl0KCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfY29uZCwgJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX211dGV4ICk7CisrCQkgICAgICBpZiAod29ybGQtPmRpc3BhdGNoX3N0b3ApIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgRF9ERUJVR19BVCggRnVzaW9uX01haW5fRGlzcGF0Y2gsICIgIC0+IElHTk9SSU5HIChkaXNwYXRjaF9zdG9wISlcbiIgKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0X211dGV4X3VubG9jayggJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX211dGV4ICk7CisrICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICAgICBidWYgPSAoRnVzaW9uRXZlbnREaXNwYXRjaGVyQnVmZmVyICopd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfYnVmZmVyczsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiXzEuNy43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmJfMS43LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZjMDcwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiXzEuNy43LmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSBkaXJlY3RmYi5pbmMKKworUlYgPSAiMS43LTciCisKK0xFQURfU09OQU1FID0gImxpYmRpcmVjdGZiLTEuNy5zby4wIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTUyY2YxODYzYjFhM2EyOGFhMTM3MGU5MDUzNDQwYmYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjc4NWM2MzhkYzMxYjhmZTNhN2M4MWJlMTQ3NWM4OWIyMjU1YWIzZDY3Yjc3N2M3NDdkM2ZiYzUyZjgwMjdhMyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm0vaW5zdGFsbHRlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybS9pbnN0YWxsdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE3NWRhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm0vaW5zdGFsbHRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK3Rlc3RzOiBhbHNvIGluc3RhbGwgdGVzdHMgYXBwCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogWXUgS2UgPGtlLnl1QGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IGJmMTk4N2YuLmQ5MDllMTkgMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0yNywxMCArMjcsMTEgQEAgQU1fQ1BQRkxBR1MgPSBcCisgCisgTERBREQgPSAkKHRvcF9idWlsZGRpcikvbGliZHJtLmxhCisgCistY2hlY2tfUFJPR1JBTVMgPSBcCisrYmluX1BST0dSQU1TID0gXAorIAlkcmlzdGF0IFwKKyAJZHJtc3RhdAorIAorK2NoZWNrX1BST0dSQU1TID0KKyBpZiBIQVZFX05PVVZFQVUKKyBTVUJESVJTICs9IG5vdXZlYXUKKyBlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybV8yLjQuNjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtXzIuNC42Mi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTYzMDVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybV8yLjQuNjIuYmIKQEAgLTAsMCArMSw0MiBAQAorU1VNTUFSWSA9ICJVc2Vyc3BhY2UgaW50ZXJmYWNlIHRvIHRoZSBrZXJuZWwgRFJNIHNlcnZpY2VzIgorREVTQ1JJUFRJT04gPSAiVGhlIHJ1bnRpbWUgbGlicmFyeSBmb3IgYWNjZXNzaW5nIHRoZSBrZXJuZWwgRFJNIHNlcnZpY2VzLiAgRFJNIFwKK3N0YW5kcyBmb3IgXCJEaXJlY3QgUmVuZGVyaW5nIE1hbmFnZXJcIiwgd2hpY2ggaXMgdGhlIGtlcm5lbCBwb3J0aW9uIG9mIHRoZSBcCitcIkRpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmVcIiAoRFJJKS4gIERSSSBpcyByZXF1aXJlZCBmb3IgbWFueSBoYXJkd2FyZSBcCithY2NlbGVyYXRlZCBPcGVuR0wgZHJpdmVycy4iCitIT01FUEFHRSA9ICJodHRwOi8vZHJpLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAieDExL2Jhc2UiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3hmODZkcm0uYztiZWdpbmxpbmU9OTtlbmRsaW5lPTMyO21kNT1jOGEzYjk2MWFmNzY2N2M1MzA4MTY3NjFlOTQ5ZGM3MSIKK1BST1ZJREVTID0gImRybSIKK0RFUEVORFMgPSAibGlicHRocmVhZC1zdHVicyB1ZGV2IGxpYnBjaWFjY2VzcyIKKworU1JDX1VSSSA9ICJodHRwOi8vZHJpLmZyZWVkZXNrdG9wLm9yZy9saWJkcm0vJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9pbnN0YWxsdGVzdHMucGF0Y2ggIgorU1JDX1VSSVttZDVzdW1dID0gImM5MjkxYmFlMGU1Y2E2NWQxNDgzODIxZDM2OThkM2FiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkwNmMyOTRiZGJlMWM5NGMzY2EwODQzMDVkNjFhNmU1YTgzNjdmM2I0OTg2ZTZjYzEzYjFlOWIzZjc1OTMxZGMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1jYWlyby10ZXN0cyBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLW9tYXAtZXhwZXJpbWVudGFsLWFwaSBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGwtdGVzdC1wcm9ncmFtcyBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1tYW5wYWdlcyBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS12YWxncmluZCBcCisgICAgICAgICAgICAgICAgIgorCitBTExPV19FTVBUWV8ke1BOfS1kcml2ZXJzID0gIjEiCitQQUNLQUdFUyA9KyAiJHtQTn0tdGVzdHMgJHtQTn0tZHJpdmVycyAke1BOfS1yYWRlb24gJHtQTn0tbm91dmVhdSAke1BOfS1vbWFwIFwKKyAgICAgICAgICAgICAke1BOfS1pbnRlbCAke1BOfS1leHlub3MgJHtQTn0ta21zICR7UE59LWZyZWVkcmVubyIKKworUlJFQ09NTUVORFNfJHtQTn0tZHJpdmVycyA9ICIke1BOfS1yYWRlb24gJHtQTn0tbm91dmVhdSAke1BOfS1vbWFwICR7UE59LWludGVsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh5bm9zICR7UE59LWZyZWVkcmVubyIKKworRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtiaW5kaXJ9L2RyKiAke2JpbmRpcn0vbW9kZSogJHtiaW5kaXJ9Lyp0ZXN0IgorRklMRVNfJHtQTn0tcmFkZW9uID0gIiR7bGliZGlyfS9saWJkcm1fcmFkZW9uLnNvLioiCitGSUxFU18ke1BOfS1ub3V2ZWF1ID0gIiR7bGliZGlyfS9saWJkcm1fbm91dmVhdS5zby4qIgorRklMRVNfJHtQTn0tb21hcCA9ICIke2xpYmRpcn0vbGliZHJtX29tYXAuc28uKiIKK0ZJTEVTXyR7UE59LWludGVsID0gIiR7bGliZGlyfS9saWJkcm1faW50ZWwuc28uKiIKK0ZJTEVTXyR7UE59LWV4eW5vcyA9ICIke2xpYmRpcn0vbGliZHJtX2V4eW5vcy5zby4qIgorRklMRVNfJHtQTn0ta21zID0gIiR7bGliZGlyfS9saWJrbXMqLnNvLioiCitGSUxFU18ke1BOfS1mcmVlZHJlbm8gPSAiJHtsaWJkaXJ9L2xpYmRybV9mcmVlZHJlbm8uc28uKiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZWdsaW5mby9lZ2xpbmZvLWZiXzEuMC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZWdsaW5mby9lZ2xpbmZvLWZiXzEuMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NWQzMWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8tZmJfMS4wLjAuYmIKQEAgLTAsMCArMSw2IEBACitFR0xJTkZPX1BMQVRGT1JNID89ICJmYiIKK0VHTElORk9fQklOQVJZX05BTUUgPz0gImVnbGluZm8tZmIiCisKK2luY2x1ZGUgZWdsaW5mby5pbmMKKworU1VNTUFSWSArPSAiKEZyYW1lYnVmZmVyIHZlcnNpb24pIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZWdsaW5mby9lZ2xpbmZvLXgxMV8xLjAuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2VnbGluZm8vZWdsaW5mby14MTFfMS4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQyN2ZkZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2VnbGluZm8vZWdsaW5mby14MTFfMS4wLjAuYmIKQEAgLTAsMCArMSwxMiBAQAorRUdMSU5GT19QTEFURk9STSA/PSAieDExIgorRUdMSU5GT19CSU5BUllfTkFNRSA/PSAiZWdsaW5mby14MTEiCisKK2luY2x1ZGUgZWdsaW5mby5pbmMKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEiCisKK2luaGVyaXQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NVTU1BUlkgKz0gIihYMTEgdmVyc2lvbikiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZWdsaW5mby9lZ2xpbmZvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODc2ODhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZWdsaW5mby9lZ2xpbmZvLmluYwpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIlV0aWxpdHkgZm9yIHByaW50aW5nIGluZm9ybWF0aW9uIEVHTCBhbmQgaXRzIGNsaWVudCBBUElzIChPcGVuR0wsIE9wZW5HTCBFUywgT3BlblZHKSIKK1NFQ1RJT04gPSAiZ3JhcGhpY3MiCitMSUNFTlNFID0gIlpsaWIiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vZHYxL2VnbGluZm8iCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT04ZDRmMzNiYzNhZGQ5NzZmN2RmYWU4NWRhYjY2ZjAzYyIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2VnbCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2R2MS9lZ2xpbmZvLmdpdDticmFuY2g9bWFzdGVyIgorU1JDUkVWID0gIjRiMzE3NjQ4ZWM2Y2YzOTU1NmE5ZTVkODA3OGY2MDViYzBlZGQ1ZGUiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgd2FmCisKKyMgQlNQIGxheWVycyBzaG91bGQgYWRkIC5iYmFwcGVuZCBmaWxlcyBmb3IgdGhlIC14MTEgYW5kIC1mYiAuYmIgcmVjaXBlcywgd2hpY2gKKyMgYXBwZW5kIHRoZSByZXNwZWN0aXZlIEVHTC9PcGVuR0xFUy9PcGVuVkcgbGlicmFyaWVzIHRvIERFUEVORFMgYW5kIHNldAorIyBFR0xfREVWSUNFIGFzIGFwcHJvcHJpYXRlLgorRUdMSU5GT19ERVZJQ0UgPz0gImdlbmVyaWMiCisKK0VYVFJBX09FQ09ORiA9ICItLXBsYXRmb3JtPSR7RUdMSU5GT19QTEFURk9STX0gXAorICAgICAgICAgICAgICAgIC0tZGV2aWNlPSR7RUdMSU5GT19ERVZJQ0V9IFwKKyAgICAgICAgICAgICAgICAtLXN5c3Jvb3QgJHtTVEFHSU5HX0RJUl9UQVJHRVR9IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwltdiAke0R9LyR7YmluZGlyfS9lZ2xpbmZvICR7RH0vJHtiaW5kaXJ9LyR7RUdMSU5GT19CSU5BUllfTkFNRX0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZvbnRjb25maWcvZm9udGNvbmZpZy9yZXZlcnQtc3RhdGljLXBrZ2NvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZvbnRjb25maWcvZm9udGNvbmZpZy9yZXZlcnQtc3RhdGljLXBrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2ExZTY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnL3JldmVydC1zdGF0aWMtcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1JldmVydCBwYXJ0IG9mIGh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9mb250Y29uZmlnL2NvbW1pdC9mb250Y29uZmlnLnBjLmluP2lkPTMzOGZmZTZiODg2YWQ0YmE4NmZmNDcxY2I1OWM0YTVlNWZmYmU0MDgKK1dlIHJlYWxseSBkb250IGRvIHN0YXRpYyBsaW5raW5nIHNvIGl0cyBub3QgZ29pbmcgdG8gY2F1c2UgaXNzdWVzIGZvciB1cyBidXQgYXMgc3VjaCB0aGlzIGlzIGhhcm1pbmcgdXMgYnkgYWRkaW5nIGFic29sdXRlCitwYXRocyBpbnRvIC1JIG9wdGlvbnMgaW50byBmb250Y29uZmlnLnBjIHdoaWNoIGlzIHRoZW0gcHJlcGVuZGVkIHdpdGggc3lzcm9vdCB3aGVuIHJlYWQgYmFjayBieSBjcm9zcyBwa2ctY29uZmlnIGFuZAord2UgZW5kIHVwIHdpdGggLUkgPHN5c3Jvb3Q+LzxzeXNyb290Pi91c3IvaW5jbHVkZS9mb250Y29uZmlnIGluIENGTEFHUyBvZiBjbGllbnRzIHdoaWNoIGRlcGVuZCBvbiBpdC4gb25lIHN1Y2ggZXhhbXBsZQoraXMgbWF0Y2hib3gtcGFuZWwtMiBhbmQgaXQgd2FzIHdvcmtpbmcgZmluZSB3aXRoIGdjYyA8IDUgYmVjYXVzZSBpdCB0b2xlcmF0ZWQgbm9uLWV4aXN0aW5nIHBhdGhzIGluIC1JIGZsYWdzIGJ1dCBnY2MtNQorZ2VudGx5IHJlZnVzZXMgYW5kIHJpZ2h0bHkgc28uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtU3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogZm9udGNvbmZpZy0yLjExLjkzL2ZvbnRjb25maWcucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBmb250Y29uZmlnLTIuMTEuOTMub3JpZy9mb250Y29uZmlnLnBjLmluCisrKysgZm9udGNvbmZpZy0yLjExLjkzL2ZvbnRjb25maWcucGMuaW4KK0BAIC0xNSw0ICsxNSw0IEBAIFJlcXVpcmVzOiBAUEtHQ09ORklHX1JFUVVJUkVTQAorIFJlcXVpcmVzLnByaXZhdGU6IEBQS0dDT05GSUdfUkVRVUlSRVNfUFJJVkFURUxZQAorIExpYnM6IC1MJHtsaWJkaXJ9IC1sZm9udGNvbmZpZworIExpYnMucHJpdmF0ZTogQEVYUEFUX0xJQlNAIEBGUkVFVFlQRV9MSUJTQCBASUNPTlZfTElCU0AgQExJQlhNTDJfTElCU0AKKy1DZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSBARVhQQVRfQ0ZMQUdTQCBARlJFRVRZUEVfQ0ZMQUdTQCBASUNPTlZfQ0ZMQUdTQCBATElCWE1MMl9DRkxBR1NACisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZvbnRjb25maWcvZm9udGNvbmZpZ18yLjExLjk0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnXzIuMTEuOTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiZmYyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZvbnRjb25maWcvZm9udGNvbmZpZ18yLjExLjk0LmJiCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiR2VuZXJpYyBmb250IGNvbmZpZ3VyYXRpb24gbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkZvbnRjb25maWcgaXMgYSBmb250IGNvbmZpZ3VyYXRpb24gYW5kIGN1c3RvbWl6YXRpb24gbGlicmFyeSwgd2hpY2ggXAorZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBYIFdpbmRvdyBTeXN0ZW0uIEl0IGlzIGRlc2lnbmVkIHRvIGxvY2F0ZSBcCitmb250cyB3aXRoaW4gdGhlIHN5c3RlbSBhbmQgc2VsZWN0IHRoZW0gYWNjb3JkaW5nIHRvIHJlcXVpcmVtZW50cyBcCitzcGVjaWZpZWQgYnkgYXBwbGljYXRpb25zLiBcCitGb250Y29uZmlnIGlzIG5vdCBhIHJhc3Rlcml6YXRpb24gbGlicmFyeSwgbm9yIGRvZXMgaXQgaW1wb3NlIGEgXAorcGFydGljdWxhciByYXN0ZXJpemF0aW9uIGxpYnJhcnkgb24gdGhlIGFwcGxpY2F0aW9uLiBUaGUgWC1zcGVjaWZpYyBcCitsaWJyYXJ5ICdYZnQnIHVzZXMgZm9udGNvbmZpZyBhbG9uZyB3aXRoIGZyZWV0eXBlIHRvIHNwZWNpZnkgYW5kIFwKK3Jhc3Rlcml6ZSBmb250cy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZm9udGNvbmZpZy5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PWZvbnRjb25maWciCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlICYgTUlUICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03YTA0NDllOWJjNTM3MDQwMmE5NGMwMDIwNGJlY2EzZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZmNmcmVldHlwZS5jO2VuZGxpbmU9NDU7bWQ1PTVkOTUxM2UzMTk2YTFmYmZkZmE5NDA1MWMwOWRmYzg0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9mY2NhY2hlLmM7YmVnaW5saW5lPTExOTk7ZW5kbGluZT0xMjE0O21kNT0wMzI2Y2ZlYjRhNzMzM2RkNGRkMjVmYmJjNGI5ZjI3ZiIKKworU0VDVElPTiA9ICJsaWJzIgorCitERVBFTkRTID0gImV4cGF0IGZyZWV0eXBlIHpsaWIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2ZvbnRjb25maWcub3JnL3JlbGVhc2UvZm9udGNvbmZpZy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcmV2ZXJ0LXN0YXRpYy1wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNDc5YmU4NzBjN2Y4M2YxNWY4N2JhYzA4NWI2MWQ2NDEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzNmNmQzMjNjN2JjZmJkZTI1ZDc4Mzk3Njc1MTkxZDU1YjhmNDEzOTEzMmM2YTk0NDQ0MTBmM2EyZDhhOWE5NSIKKworUEFDS0FHRVMgPSsgImZvbnRjb25maWctdXRpbHMiCitGSUxFU18ke1BOfSA9KyAiJHtkYXRhZGlyfS94bWwvKiIKK0ZJTEVTX2ZvbnRjb25maWctdXRpbHMgPSAiJHtiaW5kaXJ9LyoiCisKKyMgV29yayBhcm91bmQgcGFzdCBicmVha2FnZSBpbiBkZWJpYW4uYmJjbGFzcworUlBST1ZJREVTX2ZvbnRjb25maWctdXRpbHMgPSAibGliZm9udGNvbmZpZy11dGlscyIKK1JSRVBMQUNFU19mb250Y29uZmlnLXV0aWxzID0gImxpYmZvbnRjb25maWctdXRpbHMiCitSQ09ORkxJQ1RTX2ZvbnRjb25maWctdXRpbHMgPSAibGliZm9udGNvbmZpZy11dGlscyIKK0RFQklBTl9OT0FVVE9OQU1FX2ZvbnRjb25maWctdXRpbHMgPSAiMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0ZPTlRDT05GSUdfQ0FDSEVfRElSID89ICIke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2ZvbnRjb25maWciCisKK0VYVFJBX09FQ09ORiA9ICIgLS1kaXNhYmxlLWRvY3MgLS13aXRoLWRlZmF1bHQtZm9udHM9JHtkYXRhZGlyfS9mb250cyAtLXdpdGgtY2FjaGUtZGlyPSR7Rk9OVENPTkZJR19DQUNIRV9ESVJ9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZyZWV0eXBlL2ZyZWV0eXBlXzIuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZyZWV0eXBlL2ZyZWV0eXBlXzIuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDU5OWM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnJlZXR5cGUvZnJlZXR5cGVfMi42LmJiCkBAIC0wLDAgKzEsNjAgQEAKK1NVTU1BUlkgPSAiRnJlZXR5cGUgZm9udCByZW5kZXJpbmcgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkZyZWVUeXBlIGlzIGEgc29mdHdhcmUgZm9udCBlbmdpbmUgdGhhdCBpcyBkZXNpZ25lZCB0byBiZSBzbWFsbCwgZWZmaWNpZW50LCBcCitoaWdobHkgY3VzdG9taXphYmxlLCBhbmQgcG9ydGFibGUgd2hpbGUgY2FwYWJsZSBvZiBwcm9kdWNpbmcgaGlnaC1xdWFsaXR5IG91dHB1dCAoZ2x5cGggXAoraW1hZ2VzKS4gSXQgY2FuIGJlIHVzZWQgaW4gZ3JhcGhpY3MgbGlicmFyaWVzLCBkaXNwbGF5IHNlcnZlcnMsIGZvbnQgY29udmVyc2lvbiB0b29scywgdGV4dCBcCitpbWFnZSBnZW5lcmF0aW9uIHRvb2xzLCBhbmQgbWFueSBvdGhlciBwcm9kdWN0cyBhcyB3ZWxsLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZXR5cGUub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9zYXZhbm5haC5ub25nbnUub3JnL2J1Z3MvP2dyb3VwPWZyZWV0eXBlIgorCitMSUNFTlNFID0gIkZyZWVUeXBlIHwgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZG9jcy9MSUNFTlNFLlRYVDttZDU9YzAxN2ZmMTdmYzZmMDc5NGFkZjkzZGI1NTU5Y2NkNTYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jcy9GVEwuVFhUO21kNT1kNDc5ZTgzNzk3ZjY5OWZlODczYjM4ZGFkZDBmY2Q0YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kb2NzL0dQTHYyLlRYVDttZDU9OGVmMzgwNDc2ZjY0MmMyMGViZjQwZmVjYjBhZGQyZWMiCisKK1NFQ1RJT04gPSAibGlicyIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZnJlZXR5cGUvZnJlZXR5cGUtJHtQVn0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI1NjgyODkwY2IwMjY3ZjY2NzFkZDNkZTZlYWJkM2U2OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4NDY5ZmI4MTI0NzY0Zjg1MDI5Y2M4MjQ3YzMxZTEzMmEyYzVlNTEwODRkZGNlMmE0NGVhMzJlZTRhZTgzNDdlIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2ZyZWV0eXBlLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHBrZ2NvbmZpZyBiaW5jb25maWctZGlzYWJsZWQgbXVsdGlsaWJfaGVhZGVyCisKK0xJQlRPT0wgPSAiJHtTfS9idWlsZHMvdW5peC8ke0hPU1RfU1lTfS1saWJ0b29sIgorRVhUUkFfT0VNQUtFID0gIidMSUJUT09MPSR7TElCVE9PTH0nIgorRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZSA9ICIiCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXpsaWIgLS13aXRob3V0LWJ6aXAyIENDX0JVSUxEPScke0JVSUxEX0NDfSciCitUQVJHRVRfQ1BQRkxBR1MgKz0gIi1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCisKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbcGl4bWFwXSA9ICItLXdpdGgtcG5nLC0td2l0aG91dC1wbmcsbGlicG5nIgorIyBUaGlzIHJlc3VsdHMgaW4gYSBjaXJjdWxhciBkZXBlbmRlbmN5IHNvIGVuYWJsaW5nIGlzIG5vbi10cml2aWFsCitQQUNLQUdFQ09ORklHW2hhcmZidXp6XSA9ICItLXdpdGgtaGFyZmJ1enosLS13aXRob3V0LWhhcmZidXp6LGhhcmZidXp6IgorCitkb19jb25maWd1cmUoKSB7CisJY2QgYnVpbGRzL3VuaXgKKwlsaWJ0b29saXplIC0tZm9yY2UgLS1jb3B5CisJYWNsb2NhbCAtSSAuCisJZ251LWNvbmZpZ2l6ZSAtLWZvcmNlCisJYXV0b2NvbmYKKwljZCAke1N9CisJb2VfcnVuY29uZgorfQorCitkb19jb25maWd1cmVfY2xhc3MtbmF0aXZlKCkgeworCShjZCBidWlsZHMvdW5peCAmJiBnbnUtY29uZmlnaXplKSB8fCBkaWUgImZhaWx1cmUgcnVubmluZyBnbnUtY29uZmlnaXplIgorCW9lX3J1bmNvbmYKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCSR7QlVJTERfQ0N9IC1vIG9ianMvYXBpbmFtZXMgc3JjL3Rvb2xzL2FwaW5hbWVzLmMKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJb2VfbXVsdGlsaWJfaGVhZGVyIGZyZWV0eXBlMi9jb25maWcvZnRjb25maWcuaAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnN0ZXN0cy9mc3Rlc3RzX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZzdGVzdHMvZnN0ZXN0c19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVjMzNmNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZzdGVzdHMvZnN0ZXN0c19naXQuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJWYXJpb3VzIGJlbmNobWFybmluZyB0ZXN0cyBmb3IgWCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuby1oYW5kLmNvbSIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIlpsaWIiCitERVBFTkRTID0gInBhbmdvIGxpYnhleHQgbGlieGZ0IHZpcnR1YWwvbGlieDExIGd0aysiCisKK1NSQ1JFViA9ICJlNTkzOWZmNjA4Yjk1Y2RkNGQwYWIwZTE5MzU3ODFhYjlhMjc2YWMwIgorUFYgPSAiMC4xK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vdGVzdC1wYW5nby1nZGsuYztlbmRsaW5lPTI0O21kNT0xZWU3NGVjODUxZWNkYTU3ZWI3YWM2Y2MxODBmNzY1NSIKKworUyA9ICIke1dPUktESVJ9L2dpdC90ZXN0cyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2F1dG90b29scy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xldy9hdXRvdG9vbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RmZTA4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xldy9hdXRvdG9vbHMucGF0Y2gKQEAgLTAsMCArMSwxNDkgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogZ2xldy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdsZXcvTWFrZWZpbGUuYW0JMjAwOS0xMi0wMiAwMDozMDoyMy4yOTY2NDE2NjMgKzAxMDAKK0BAIC0wLDAgKzEsNSBAQAorKworK0FDTE9DQUxfQU1GTEFHUyA9IC1JIG00IC0taW5zdGFsbAorKworK1NVQkRJUlMgPSBpbmNsdWRlIHNyYworKworSW5kZXg6IGdsZXcvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2xldy9jb25maWd1cmUuYWMJMjAwOS0xMi0wMiAwMDozMDoyMy4yOTY2NDE2NjMgKzAxMDAKK0BAIC0wLDAgKzEsNjcgQEAKKysjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisrIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorKworK0FDX1BSRVJFUShbMi42Ml0pCisrQUNfSU5JVChbZ2xld10sIFsxLjkuMF0sIFtCVUctUkVQT1JULUFERFJFU1NdKQorK0FDX0NPTkZJR19TUkNESVIoW3NyYy9nbGV3LmNdKQorK0FDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCisrQU1fSU5JVF9BVVRPTUFLRShbLVdhbGwgLVdlcnJvciBmb3JlaWduXSkKKytBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCisrCisrTFRfSU5JVAorKworKyMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KKytBQ19QUk9HX0NDCisrQUNfUFJPR19JTlNUQUxMCisrQUNfUFJPR19MTl9TCisrCisrIyBDaGVja3MgZm9yIGxpYnJhcmllcy4KKysKKysjIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorK0FDX0NIRUNLX0hFQURFUlMoW2ludHR5cGVzLmggc3RkZGVmLmggc3RkaW50Lmggc3RkbGliLmggc3RyaW5nLmhdKQorKworKyMgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KKytBQ19UWVBFX0lOVDMyX1QKKytBQ19UWVBFX0lOVDY0X1QKKytBQ19UWVBFX1VJTlQ2NF9UCisrQUNfQ0hFQ0tfVFlQRVMoW3B0cmRpZmZfdF0pCisrCisrIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgorK0FDX0ZVTkNfTUFMTE9DCisrQUNfQ0hFQ0tfRlVOQ1MoW3N0cnRvbF0pCisrCisrIyBDaGVjayBmb3IgcGtnY29uZmlnIGxpYnMKKysKKytQS0dfQ0hFQ0tfTU9EVUxFUyhbWDExXSwgW3gxMV0pCisrQUNfU1VCU1QoW1gxMV9MSUJTXSkKKytBQ19TVUJTVChbWDExX0NGTEFHU10pCisrCisrUEtHX0NIRUNLX01PRFVMRVMoW1hNVV0sIFt4bXVdKQorK0FDX1NVQlNUKFtYTVVfTElCU10pCisrQUNfU1VCU1QoW1hNVV9DRkxBR1NdKQorKworK1BLR19DSEVDS19NT0RVTEVTKFtYSV0sIFt4aV0pCisrQUNfU1VCU1QoW1hJX0xJQlNdKQorK0FDX1NVQlNUKFtYSV9DRkxBR1NdKQorKworK1BLR19DSEVDS19NT0RVTEVTKFtYRVhUXSwgW3hleHRdKQorK0FDX1NVQlNUKFtYRVhUX0xJQlNdKQorK0FDX1NVQlNUKFtYRVhUX0NGTEFHU10pCisrCisrIyBDaGVjayBmb3IgR0xVIGlzIGVub3VnaCBhbmQgaW1wbGVzIGdsIHNvIG5vIGRvdWJsZWQgLWxHTCBpbiBMREZMQUdTCisrUEtHX0NIRUNLX01PRFVMRVMoW0dMVV0sIFtnbHVdKQorK0FDX1NVQlNUKFtHTFVfTElCU10pCisrQUNfU1VCU1QoW0dMVV9DRkxBR1NdKQorKworKyMgRU5BQkxFIG9wdGlvbiBmb3IgTXVsdGlwbGUgUmVuZGVyaW5nIENvbnRleHRzIHN1cHBvcnQKKytBQ19DSEVDS19FTkFCTEVfR0xFV01YCisrCisrIyBmb3Igbm93IHdlIHVzZSB0aGUgc2FtZSB2ZXJzaW9uIGFzIHRoZSBwYWNrYWdlLCBidXQgdGhhdCBzaG91bGQgYmUgYXZvaWRlZAorKyMgaW4gdGhlIGZ1dHVyZQorKworK0FDX1NVQlNUKFtMSUJHTEVXX1NPX1ZFUlNJT05dLCBbMTo5OjBdKQorKworK0FDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUKKysgICAgICAgICAgICAgICAgIGluY2x1ZGUvTWFrZWZpbGUKKysgICAgICAgICAgICAgICAgIHNyYy9NYWtlZmlsZV0pCisrQUNfT1VUUFVUCitJbmRleDogZ2xldy9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnbGV3L3NyYy9NYWtlZmlsZS5hbQkyMDA5LTEyLTAyIDAwOjMzOjQ4LjY5MDc4NjExMCArMDEwMAorQEAgLTAsMCArMSwzNSBAQAorKworK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKKysKKytpZiBFTkFCTEVfR0xFV01YCisrQU1fQ1BQRkxBR1MgKz0gLURHTEVXX01YCisrZW5kaWYKKysKKytBTV9DRkxBR1MgPSBAWDExX0NGTEFHU0AgXAorKyAgICAgICAgICAgIEBYTVVfQ0ZMQUdTQCBcCisrICAgICAgICAgICAgQFhJX0NGTEFHU0AgXAorKyAgICAgICAgICAgIEBYRVhUX0NGTEFHU0AgXAorKyAgICAgICAgICAgIEBHTFVfQ0ZMQUdTQAorKworK2xpYl9MVExJQlJBUklFUyA9IGxpYkdMRVcubGEKKysKKytsaWJHTEVXX2xhX1NPVVJDRVMgPSBnbGV3LmMKKysKKytsaWJHTEVXX2xhX0xJQkFERCA9IEBYMTFfTElCU0AgXAorKyAgICAgICAgICAgICAgICAgICAgQFhNVV9MSUJTQCBcCisrICAgICAgICAgICAgICAgICAgICBAWElfTElCU0AgXAorKyAgICAgICAgICAgICAgICAgICAgQFhFWFRfTElCU0AgXAorKyAgICAgICAgICAgICAgICAgICAgQEdMVV9MSUJTQAorKworK2xpYkdMRVdfbGFfTERGTEFHUyA9IC12ZXJzaW9uLW51bWJlciBATElCR0xFV19TT19WRVJTSU9OQAorKworK2Jpbl9QUk9HUkFNUyA9IGdsZXdpbmZvIHZpc3VhbGluZm8KKysKKytnbGV3aW5mb19TT1VSQ0VTID0gZ2xld2luZm8uYworKworK2dsZXdpbmZvX0xEQUREID0gbGliR0xFVy5sYQorKworK3Zpc3VhbGluZm9fU09VUkNFUyA9ICB2aXN1YWxpbmZvLmMKKysKKyt2aXN1YWxpbmZvX0xEQUREID0gbGliR0xFVy5sYQorKworSW5kZXg6IGdsZXcvbTQvZ2xld214Lm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2xldy9tNC9nbGV3bXgubTQJMjAwOS0xMi0wMiAwMDozMDoyMy4yOTY2NDE2NjMgKzAxMDAKK0BAIC0wLDAgKzEsMTEgQEAKKysKKytBQ19ERUZVTihbQUNfQ0hFQ0tfRU5BQkxFX0dMRVdNWF0sWworK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBpbmNsdWRlIE11bHRpcGxlIFJlbmRlcmluZyBDb250ZXh0cyBzdXBwb3J0XSkKKytBQ19BUkdfRU5BQkxFKFtnbGV3bXhdLAorKyAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZ2xld214XSwgW2VuYWJsZSBHTEVXIE11bHRpcGxlIFJlbmRlcmluZyBDb250ZXh0cyAoZGVmYXVsdCBpcyBubyldKV0sCisrICAgW0VOQUJMRV9HTEVXTVg9IiRlbmFibGV2YWwiXSwKKysgICBbRU5BQkxFX0dMRVdNWD0ibm8iXSkKKytBQ19NU0dfUkVTVUxUKFske0VOQUJMRV9HTEVXTVh9XSkKKytBTV9DT05ESVRJT05BTChbRU5BQkxFX0dMRVdNWF0sIFt0ZXN0IHgiJHtFTkFCTEVfR0xFV01YfSIgPSAieHllcyJdKQorK10pCisrCitJbmRleDogZ2xldy9pbmNsdWRlL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2xldy9pbmNsdWRlL01ha2VmaWxlLmFtCTIwMDktMTItMDIgMDA6MzA6MjMuMjk2NjQxNjYzICswMTAwCitAQCAtMCwwICsxLDMgQEAKKysKKytub2Jhc2VfaW5jbHVkZV9IRUFERVJTID0gR0wvZ2xldy5oICBHTC9nbHhldy5oICBHTC93Z2xldy5oCisrCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXcvZml4LWdsZXcucGMtaW5zdGFsbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xldy9maXgtZ2xldy5wYy1pbnN0YWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYTk5YWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXcvZml4LWdsZXcucGMtaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDQ2IEBACisKK1dlIG1haW50YWluIHRoZSBhdXRvdG9vbHMgY29uZmlndXJlLmFjIGFuZCBNYWtlZmlsZS5hbSwgdG8gY29ycmVjdGx5Citwcm92aWRlIHRoZSBnbGV3LnBjLCB0aGUgZm9sbG93aW5nIHBhdGNoIGlzIG5lZWRlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGdsZXctMS4xMS4wL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2xldy0xLjExLjAub3JpZy9NYWtlZmlsZS5hbQorKysrIGdsZXctMS4xMS4wL01ha2VmaWxlLmFtCitAQCAtMywzICszLDUgQEAgQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQgLS1pbnN0YWxsCisgCisgU1VCRElSUyA9IGluY2x1ZGUgc3JjCisgCisrcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworK3BrZ2NvbmZpZ19EQVRBID0gZ2xldy5wYworSW5kZXg6IGdsZXctMS4xMS4wL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdsZXctMS4xMS4wLm9yaWcvY29uZmlndXJlLmFjCisrKysgZ2xldy0xLjExLjAvY29uZmlndXJlLmFjCitAQCAtNjYsNSArNjYsNiBAQCBBQ19TVUJTVChbTElCR0xFV19TT19WRVJTSU9OXSwgWzE6OTowXSkKKyAKKyBBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlCisgICAgICAgICAgICAgICAgICBpbmNsdWRlL01ha2VmaWxlCistICAgICAgICAgICAgICAgICBzcmMvTWFrZWZpbGVdKQorKyAgICAgICAgICAgICAgICAgc3JjL01ha2VmaWxlCisrICAgICAgICAgICAgICAgICBnbGV3LnBjXSkKKyBBQ19PVVRQVVQKK0luZGV4OiBnbGV3LTEuMTEuMC9nbGV3LnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2xldy0xLjExLjAub3JpZy9nbGV3LnBjLmluCisrKysgZ2xldy0xLjExLjAvZ2xldy5wYy5pbgorQEAgLTUsNyArNSw3IEBAIGluY2x1ZGVkaXI9JHtwcmVmaXh9L2luY2x1ZGUvR0wKKyAKKyBOYW1lOiBnbGV3CisgRGVzY3JpcHRpb246IFRoZSBPcGVuR0wgRXh0ZW5zaW9uIFdyYW5nbGVyIGxpYnJhcnkKKy1WZXJzaW9uOiBAdmVyc2lvbkAKKy1DZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSBAY2ZsYWdzQAorLUxpYnM6IC1MJHtsaWJkaXJ9IC1sQGxpYm5hbWVACistUmVxdWlyZXM6IEByZXF1aXJlc2xpYkAKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSBAQ0ZMQUdTQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sR0xFVworK1JlcXVpcmVzOiBnbHUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xldy9nbGV3X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xldy9nbGV3X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzA3ZWZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2dsZXdfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGlzIHBhdGNoIGZpeGVzIGZvbGxvd2luZyBpc3N1ZSB3aXRoIGF1dG9tYWtlIDEuMTIKKworfCBhdXRvbWFrZTogd2FybmluZ3MgYXJlIHRyZWF0ZWQgYXMgZXJyb3JzCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvYXV0b21ha2UtMS4xMi9hbS9sdGxpYnJhcnkuYW06IHdhcm5pbmc6ICdsaWJHTEVXLmxhJzogbGlua2luZyBsaWJ0b29sIGxpYnJhcmllcyB1c2luZyBhIG5vbi1QT1NJWAorfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2F1dG9tYWtlLTEuMTIvYW0vbHRsaWJyYXJ5LmFtOiBhcmNoaXZlciByZXF1aXJlcyAnQU1fUFJPR19BUicgaW4gJ2NvbmZpZ3VyZS5hYycKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDMKKworSW5kZXg6IGdsZXctMS43LjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2xldy0xLjcuMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdsZXctMS43LjAvY29uZmlndXJlLmFjCitAQCAtMTQsNiArMTQsOSBAQCBMVF9JTklUCisgQUNfUFJPR19DQworIEFDX1BST0dfSU5TVEFMTAorIEFDX1BST0dfTE5fUworKyMgYXV0b21ha2UgMS4xMiBzZWVtcyB0byByZXF1aXJlIHRoaXMsIGJ1dCBhdXRvbWFrZSAxLjExIGRvZXNuJ3QgcmVjb2duaXplIGl0CisrbTRfcGF0dGVybl9hbGxvdyhbQU1fUFJPR19BUl0pCisrQU1fUFJPR19BUgorIAorICMgQ2hlY2tzIGZvciBsaWJyYXJpZXMuCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXdfMS4xMi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3XzEuMTIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjI4YzRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3XzEuMTIuMC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIk9wZW5HTCBleHRlbnNpb24gbG9hZGluZyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiVGhlIE9wZW5HTCBFeHRlbnNpb24gV3JhbmdsZXIgTGlicmFyeSAoR0xFVykgaXMgYSBjcm9zcy1wbGF0Zm9ybSBvcGVuLXNvdXJjZSBDL0MrKyBleHRlbnNpb24gbG9hZGluZyBsaWJyYXJ5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9nbGV3LnNvdXJjZWZvcmdlLm5ldC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9Njc1ODYiCitTRUNUSU9OID0gIngxMSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTJhYzI1MTU1OGRlNjg1YzZiOTQ3OGQ4OWJlMzE0OWMyIgorCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIHZpcnR1YWwvbGliZ2wgbGliZ2x1IGxpYnhleHQgbGlieGkgbGlieG11IgorCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Byb2plY3QvZ2xldy9nbGV3LyR7UFZ9L2dsZXctJHtQVn0udGd6IFwKKyAgICAgICAgICAgZmlsZTovL2F1dG90b29scy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nbGV3X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZ2xldy5wYy1pbnN0YWxsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMTI0NmM3ZWNkMTM1ZDk5YmUwMzFhYTYzZjg2ZGNhMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhZjU4MTAzZjQ4MjRiNDQzZTdmYTRlZDNhZjU5M2I4ZWRhYzZmM2E3YmUzYjMwOTExZWRiYzczNDRmNDhlNGJmIgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9oYXJmYnV6ei9oYXJmYnV6el8xLjAuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2hhcmZidXp6L2hhcmZidXp6XzEuMC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MGJkOTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9oYXJmYnV6ei9oYXJmYnV6el8xLjAuMi5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIlRleHQgc2hhcGluZyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiSGFyZkJ1enogaXMgYW4gT3BlblR5cGUgdGV4dCBzaGFwaW5nIGVuZ2luZS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL0hhcmZCdXp6IgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1IYXJmQnV6eiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lMDIxZGQ2ZGRhNmZmMWU2YjEwNDQwMDJmYzY2MmI5YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvaGItdWNkbi9DT1BZSU5HO21kNT05OTRiYTBmMTI5NWYxNWI0YmRhNDk5OWE1YmJlZGRlZiBcCisiCisKK1NFQ1RJT04gPSAibGlicyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9oYXJmYnV6ei9yZWxlYXNlLyR7QlB9LnRhci5iejIiCitTUkNfVVJJW21kNXN1bV0gPSAiZTc0ZjY0NDA0NWZlNDJjMzhhMjY0MWZjMWU4MmE4MDAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmViM2NhZjg2NTQwMTBmY2RjYTYxYzgxMGEzYTc1MzIyMzdmYzU2N2VlNDI3MWRlYjY3NGI1ZWZiYmUzYjQ2NiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGxpYl9wYWNrYWdlCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgY2Fpcm8gZnJlZXR5cGUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWdsaWIgLS13aXRoLWZyZWV0eXBlIC0td2l0aC1jYWlybyAtLXdpdGhvdXQtZ3JhcGhpdGUyIgorCitQQUNLQUdFQ09ORklHID8/PSAiaWN1IgorUEFDS0FHRUNPTkZJR1tpY3VdID0gIi0td2l0aC1pY3UsLS13aXRob3V0LWljdSxpY3UiCisKK1BBQ0tBR0VTID0rICIke1BOfS1pY3UgJHtQTn0taWN1LWRiZyAke1BOfS1pY3UtZGV2IgorCitGSUxFU18ke1BOfS1pY3UgPSAiJHtsaWJkaXJ9L2xpYmhhcmZidXp6LWljdS5zby4qIgorRklMRVNfJHtQTn0taWN1LWRiZyA9ICIke2xpYmRpcn0vLmRlYnVnL2xpYmhhcmZidXp6LWljdS5zbyoiCitGSUxFU18ke1BOfS1pY3UtZGV2ID0gIiR7bGliZGlyfS9saWJoYXJmYnV6ei1pY3UubGEgXAorICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliaGFyZmJ1enotaWN1LnNvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9oYXJmYnV6ei1pY3UucGMgXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UtY2x1dHRlci5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLWNsdXR0ZXIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmMjVjZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLWNsdXR0ZXIuYmIKQEAgLTAsMCArMSwxMyBAQAorREVTQ1JJUFRJT04gPSAiQW4gaW1hZ2Ugd2l0aCBzdXBwb3J0IGZvciB0aGUgT3BlbiBHTC1iYXNlZCB0b29sa2l0IENsdXR0ZXIsIFwKK3doaWNoIGVuYWJsZXMgZGV2ZWxvcG1lbnQgb2YgcmljaCBhbmQgYW5pbWF0ZWQgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlcy4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJzcGxhc2ggcGFja2FnZS1tYW5hZ2VtZW50IHgxMS1iYXNlIHgxMS1zYXRvIHNzaC1zZXJ2ZXItZHJvcGJlYXIiCisKK0xJQ0VOU0UgPSAiTUlUIgorCitJTUFHRV9JTlNUQUxMID0gIlwKKyAgICAke0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMfSBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtY2x1dHRlci1jb3JlIFwKKyAgICAiCisKK2luaGVyaXQgY29yZS1pbWFnZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UtZGlyZWN0ZmIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS1kaXJlY3RmYi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjQxMTk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UtZGlyZWN0ZmIuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJBbiBpbWFnZSB0aGF0IHVzZXMgRGlyZWN0RkIgaW5zdGVhZCBvZiBYMTEiCitMSUNFTlNFID0gIk1JVCIKKworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworaW5oZXJpdCBjb3JlLWltYWdlIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAiZGlyZWN0ZmIiCitDT05GTElDVF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitJTUFHRV9JTlNUQUxMICs9ICJcCisJJHtDT1JFX0lNQUdFX0JBU0VfSU5TVEFMTH0gXAorCXBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZSBcCisJcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIgXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2Utd2VzdG9uLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2Utd2VzdG9uLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZTI3MWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS13ZXN0b24uYmIKQEAgLTAsMCArMSwxMSBAQAorU1VNTUFSWSA9ICJBIHZlcnkgYmFzaWMgV2F5bGFuZCBpbWFnZSB3aXRoIGEgdGVybWluYWwiCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJzcGxhc2ggcGFja2FnZS1tYW5hZ2VtZW50IHNzaC1zZXJ2ZXItZHJvcGJlYXIgaHdjb2RlY3MiCisKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IGNvcmUtaW1hZ2UgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ3YXlsYW5kIgorCitDT1JFX0lNQUdFX0JBU0VfSU5TVEFMTCArPSAid2VzdG9uIHdlc3Rvbi1pbml0IHdlc3Rvbi1leGFtcGxlcyBndGsrMy1kZW1vIGNsdXR0ZXItMS4wLWV4YW1wbGVzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UteDExLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UteDExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NTViYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS14MTEuYmIKQEAgLTAsMCArMSw5IEBACitTVU1NQVJZID0gIkEgdmVyeSBiYXNpYyBYMTEgaW1hZ2Ugd2l0aCBhIHRlcm1pbmFsIgorCitJTUFHRV9GRUFUVVJFUyArPSAic3BsYXNoIHBhY2thZ2UtbWFuYWdlbWVudCB4MTEtYmFzZSIKKworTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgY29yZS1pbWFnZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5LzAwMDEtc2VsZWN0LXBsYXRmb3Jtcy1iYXNlZC1vbi1jb25maWd1cmF0aW9uLXJlc3VsdHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS8wMDAxLXNlbGVjdC1wbGF0Zm9ybXMtYmFzZWQtb24tY29uZmlndXJhdGlvbi1yZXN1bHRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NGM4ZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS8wMDAxLXNlbGVjdC1wbGF0Zm9ybXMtYmFzZWQtb24tY29uZmlndXJhdGlvbi1yZXN1bHRzLnBhdGNoCkBAIC0wLDAgKzEsMTI4IEBACitGcm9tIDNhOTMxNTBiYzBhZWM4NmFmZGI3ZDA1MzI0N2RjMjQ0ODkyNWUwOWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW5kcmVhcz0yME09QzM9QkNsbGVyPz0gPHNjaG5pdHplbHRvbnlAZ29vZ2xlbWFpbC5jb20+CitEYXRlOiBXZWQsIDYgTWF5IDIwMTUgMTA6NDU6MjIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIHNlbGVjdCBwbGF0Zm9ybXMgYmFzZWQgb24gY29uZmlndXJhdGlvbiByZXN1bHRzCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFsxXQorCitbMV0gaHR0cHM6Ly9naXRodWIuY29tL2FuaG9sdC9saWJlcG94eS9wdWxsLzUyCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgTcO8bGxlciA8c2Nobml0emVsdG9ueUBnb29nbGVtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICB8IDEzICsrKysrLS0tLS0tLS0KKyBzcmMvZGlzcGF0Y2hfY29tbW9uLmMgfCAgOSArKysrKystLS0KKyBzcmMvZGlzcGF0Y2hfY29tbW9uLmggfCAgOSArKysrKy0tLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBhNTJmYzU4Li5iZGQ3MGRhIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01OCw2ICs1OCwxMCBAQCBBQ19DSEVDS19IRUFERVIoW0tIUi9raHJwbGF0Zm9ybS5oXSwKKyAjIHVpbnRwdHJfdCB0byBhIHZvaWQgKiIpIGJ5IGRlZmF1bHQuICBLaWxsIHRoYXQuCisgWE9SR19URVNUU0VUX0NGTEFHKENXQVJORkxBR1MsIFstV25vLWludC1jb252ZXJzaW9uXSkKKyAKKytQS0dfQ0hFQ0tfTU9EVUxFUyhYMTEsIFt4MTFdLCBbeDExPXllc10sIFt4MTE9bm9dKQorKworK0FNX0NPTkRJVElPTkFMKEhBVkVfWDExLCB0ZXN0IHgkeDExID0geHllcykKKysKKyBoYXNfem5vdz15ZXMKKyAKKyBjYXNlICRob3N0X29zIGluCitAQCAtODYsNyArOTAsNyBAQCBjYXNlICRob3N0X29zIGluCisgICAgICAgICA7OworICAgICAqKQorICAgICAgICAgYnVpbGRfZWdsPXllcworLSAgICAgICAgYnVpbGRfZ2x4PXllcworKyAgICAgICAgYnVpbGRfZ2x4PSR4MTEKKyAgICAgICAgIGJ1aWxkX3dnbD1ubworICAgICAgICAgIyBPbiBwbGF0Zm9ybXMgd2l0aCBkbG9wZW4sIHdlIGxvYWQgZXZlcnl0aGluZyBkeW5hbWljYWxseSBhbmQKKyAgICAgICAgICMgZG9uJ3QgbGluayBhZ2FpbnN0IGEgc3BlY2lmaWMgd2luZG93IHN5c3RlbSBvciBHTCBpbXBsZW1lbnRhdGlvbi4KK0BAIC0xNDQsMTMgKzE0OCw2IEBAIGVzYWMKKyAKKyBBQ19TVUJTVChbVklTSUJJTElUWV9DRkxBR1NdKQorIAorLVBLR19DSEVDS19NT0RVTEVTKFgxMSwgW3gxMV0sIFt4MTE9eWVzXSwgW3gxMT1ub10pCistaWYgdGVzdCB4JHgxMSA9IHhubyAtYSB4JGJ1aWxkX2dseCA9IHh5ZXM7IHRoZW4KKy0gICAgQUNfTVNHX0VSUk9SKFtsaWJYMTEgaGVhZGVycyAobGlieDExLWRldikgcmVxdWlyZWQgdG8gYnVpbGQgd2l0aCBHTFggc3VwcG9ydF0pCistZmkKKy0KKy1BTV9DT05ESVRJT05BTChIQVZFX1gxMSwgdGVzdCB4JHgxMSA9IHh5ZXMpCistCisgUEtHX0NIRUNLX01PRFVMRVMoR0wsIFtnbF0sIFtnbD15ZXNdLCBbZ2w9bm9dKQorIAorIEFDX0NPTkZJR19GSUxFUyhbCitkaWZmIC0tZ2l0IGEvc3JjL2Rpc3BhdGNoX2NvbW1vbi5jIGIvc3JjL2Rpc3BhdGNoX2NvbW1vbi5jCitpbmRleCA0ZTM0ZDZlLi4yYWI4NGVkIDEwMDY0NAorLS0tIGEvc3JjL2Rpc3BhdGNoX2NvbW1vbi5jCisrKysgYi9zcmMvZGlzcGF0Y2hfY29tbW9uLmMKK0BAIC02MTUsMTAgKzYxNSwxMyBAQCBlcG94eV9nZXRfcHJvY19hZGRyZXNzKGNvbnN0IGNoYXIgKm5hbWUpCisgI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisgICAgIHJldHVybiBlcG94eV9nbF9kbHN5bShuYW1lKTsKKyAjZWxzZQorKyNpZiBQTEFURk9STV9IQVNfR0xYCisgICAgIGlmIChlcG94eV9jdXJyZW50X2NvbnRleHRfaXNfZ2x4KCkpIHsKKyAgICAgICAgIHJldHVybiBnbFhHZXRQcm9jQWRkcmVzc0FSQigoY29uc3QgR0x1Ynl0ZSAqKW5hbWUpOworLSAgICB9IGVsc2UgeworKyAgICB9IGVsc2UKKysjZW5kaWYgLyogUExBVEZPUk1fSEFTX0dMWCAqLworICNpZiBQTEFURk9STV9IQVNfRUdMCisrICAgIHsKKyAgICAgICAgIEdMZW51bSBlZ2xfYXBpID0gZXBveHlfZWdsX2dldF9jdXJyZW50X2dsX2NvbnRleHRfYXBpKCk7CisgCisgICAgICAgICBzd2l0Y2ggKGVnbF9hcGkpIHsKK0BAIC02MjgsMTAgKzYzMSwxMCBAQCBlcG94eV9nZXRfcHJvY19hZGRyZXNzKGNvbnN0IGNoYXIgKm5hbWUpCisgICAgICAgICBjYXNlIEVHTF9OT05FOgorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorLSNlbmRpZgorICAgICB9CisrI2VuZGlmIC8qIFBMQVRGT1JNX0hBU19FR0wgKi8KKyAgICAgZXJyeCgxLCAiQ291bGRuJ3QgZmluZCBjdXJyZW50IEdMWCBvciBFR0wgY29udGV4dC5cbiIpOworLSNlbmRpZgorKyNlbmRpZiAvKiBfV0lOMzIgfCBfX0FQUExFX18qLworIH0KKyAKKyB2b2lkCitkaWZmIC0tZ2l0IGEvc3JjL2Rpc3BhdGNoX2NvbW1vbi5oIGIvc3JjL2Rpc3BhdGNoX2NvbW1vbi5oCitpbmRleCA2Yjg1MDNhLi44MjY4MWU0IDEwMDY0NAorLS0tIGEvc3JjL2Rpc3BhdGNoX2NvbW1vbi5oCisrKysgYi9zcmMvZGlzcGF0Y2hfY29tbW9uLmgKK0BAIC0yMSwxMiArMjEsMTMgQEAKKyAgKiBJTiBUSEUgU09GVFdBUkUuCisgICovCisgCisrI2luY2x1ZGUgPGNvbmZpZy5oPgorICNpbmNsdWRlIDxzdGRib29sLmg+CisgCisgI2lmZGVmIF9XSU4zMgorICNkZWZpbmUgUExBVEZPUk1fSEFTX0VHTCAwCisgI2RlZmluZSBQTEFURk9STV9IQVNfR0xYIDAKKy0jZGVmaW5lIFBMQVRGT1JNX0hBU19XR0wgMQorKyNkZWZpbmUgUExBVEZPUk1fSEFTX1dHTCBCVUlMRF9XR0wKKyAjZGVmaW5lIEVQT1hZX0lNUE9SVEVYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyAjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyAjZGVmaW5lIFBMQVRGT1JNX0hBU19FR0wgMAorQEAgLTM0LDEzICszNSwxMyBAQAorICNkZWZpbmUgUExBVEZPUk1fSEFTX1dHTCAwCisgI2RlZmluZSBFUE9YWV9JTVBPUlRFWFBPUlQKKyAjZWxpZiBkZWZpbmVkKEFORFJPSUQpCistI2RlZmluZSBQTEFURk9STV9IQVNfRUdMIDEKKysjZGVmaW5lIFBMQVRGT1JNX0hBU19FR0wgQlVJTERfRUdMCisgI2RlZmluZSBQTEFURk9STV9IQVNfR0xYIDAKKyAjZGVmaW5lIFBMQVRGT1JNX0hBU19XR0wgMAorICNkZWZpbmUgRVBPWFlfSU1QT1JURVhQT1JUCisgI2Vsc2UKKy0jZGVmaW5lIFBMQVRGT1JNX0hBU19FR0wgMQorLSNkZWZpbmUgUExBVEZPUk1fSEFTX0dMWCAxCisrI2RlZmluZSBQTEFURk9STV9IQVNfRUdMIEJVSUxEX0VHTAorKyNkZWZpbmUgUExBVEZPUk1fSEFTX0dMWCBCVUlMRF9HTFgKKyAjZGVmaW5lIFBMQVRGT1JNX0hBU19XR0wgMAorICNkZWZpbmUgRVBPWFlfSU1QT1JURVhQT1JUCisgI2VuZGlmCistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5LzAwMDItYWRkLWFuLW9wdGlvbi10by1kaXNhYmxlLWdseC1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvMDAwMi1hZGQtYW4tb3B0aW9uLXRvLWRpc2FibGUtZ2x4LXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYyZDY4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5LzAwMDItYWRkLWFuLW9wdGlvbi10by1kaXNhYmxlLWdseC1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gMjQ4NjhjYmZiOWRkYTVmNjkyOWRkMjc3YzQ3ZDM1ZGYwMTZlODc1NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyZWFzPTIwTT1DMz1CQ2xsZXI/PSA8c2Nobml0emVsdG9ueUBnb29nbGVtYWlsLmNvbT4KK0RhdGU6IFdlZCwgNiBNYXkgMjAxNSAxMTowNTo0OCArMDIwMAorU3ViamVjdDogW1BBVENIIDIvMl0gYWRkIGFuIG9wdGlvbiB0byBkaXNhYmxlIGdseCBzdXBwb3J0CitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK3RoaXMgb3B0aW9uIHdvdWxkIGhlbHAgdXMgaW4geW9jdG8gdG8gZ2V0IGRldGVybWluaXN0aWMgYnVpbGQgcmVzdWx0cworCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbMV0KKworWzFdIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmhvbHQvbGliZXBveHkvcHVsbC81MgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE3DvGxsZXIgPHNjaG5pdHplbHRvbnlAZ29vZ2xlbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCA5ICsrKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYmRkNzBkYS4uNmM3MTUzZCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTgsNyArNTgsMTQgQEAgQUNfQ0hFQ0tfSEVBREVSKFtLSFIva2hycGxhdGZvcm0uaF0sCisgIyB1aW50cHRyX3QgdG8gYSB2b2lkICoiKSBieSBkZWZhdWx0LiAgS2lsbCB0aGF0LgorIFhPUkdfVEVTVFNFVF9DRkxBRyhDV0FSTkZMQUdTLCBbLVduby1pbnQtY29udmVyc2lvbl0pCisgCistUEtHX0NIRUNLX01PRFVMRVMoWDExLCBbeDExXSwgW3gxMT15ZXNdLCBbeDExPW5vXSkKKytBQ19BUkdfRU5BQkxFKFtnbHhdLAorKyAgICAgICAgICAgICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1nbHhdLAorKwkJCQlbZGlzYWJsZSBpZiB5b3UgZG9uJ3Qgd2FudCB4MTEvZ2x4IHN1cHBvcnRdKV0sCisrICAgICAgICAgICAgICAgIFtdLAorKyAgICAgICAgICAgICAgICBbZW5hYmxlX2dseD15ZXNdCisrICAgICAgICAgICAgICkKKysKKytQS0dfQ0hFQ0tfTU9EVUxFUyhYMTEsIFt4MTFdLCBbeDExPSRlbmFibGVfZ2x4XSwgW3gxMT1ub10pCisgCisgQU1fQ09ORElUSU9OQUwoSEFWRV9YMTEsIHRlc3QgeCR4MTEgPSB4eWVzKQorIAorLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS9uby1uZWVkLWZvci1weXRob24zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvbm8tbmVlZC1mb3ItcHl0aG9uMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjhmZWE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvbm8tbmVlZC1mb3ItcHl0aG9uMy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitUaGVyZSBpcyBubyBuZWVkIHRvIHVzZSBweXRob24zIGJ5IHRoaXMgcGFja2FnZSAodGhlIHB5dGhvbiBzY3JpcHRzCit0aGF0IGFyZSB1c2luZyBkdXJpbmcgY29uZmlndXJhdGlvbiBvbmx5IG5lZWQgcHl0aG9uMi43KykKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBHYXJ5IFRob21hcyA8Z2FyeUBtbGJhc3NvYy5jb20+CistLQorSW5kZXg6IGdpdC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9jb25maWd1cmUuYWMKKysrKyBnaXQvY29uZmlndXJlLmFjCitAQCAtNDAsNyArNDAsNyBAQCBtNF9pZm5kZWYoW1hPUkdfTUFDUk9TX1ZFUlNJT05dLAorIFhPUkdfTUFDUk9TX1ZFUlNJT04oMS44KQorIFhPUkdfREVGQVVMVF9PUFRJT05TCisgCistQUNfQ0hFQ0tfUFJPR1MoW1BZVEhPTl0sIFtweXRob24zIHB5dGhvbjIgcHl0aG9uXSkKKytBQ19DSEVDS19QUk9HUyhbUFlUSE9OXSwgW3B5dGhvbjIgcHl0aG9uXSkKKyAKKyAjIEluaXRpYWxpemUgbGlidG9vbAorIEFDX0RJU0FCTEVfU1RBVElDCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxNzI5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5X2dpdC5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIk9wZW5HTCBmdW5jdGlvbiBwb2ludGVyIG1hbmFnZW1lbnQgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9hbmhvbHQvbGliZXBveHkvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU4ZWY0YzgwZDQwMWUwN2JkOWVlOGI2YjU4Y2Y0NjRiIgorCisKK1NSQ19VUkkgPSAiIFwKKyAgICBnaXQ6Ly9naXRodWIuY29tL2FuaG9sdC9saWJlcG94eS5naXQgXAorICAgIGZpbGU6Ly8wMDAxLXNlbGVjdC1wbGF0Zm9ybXMtYmFzZWQtb24tY29uZmlndXJhdGlvbi1yZXN1bHRzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMi1hZGQtYW4tb3B0aW9uLXRvLWRpc2FibGUtZ2x4LXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly9uby1uZWVkLWZvci1weXRob24zLnBhdGNoIFwKKyIKK1NSQ1JFVj0iZTJjMzNhZjViZmNmYzlkMTY4ZjllNzc2MTU2ZGQ0N2MzM2Y0MjhiMyIKK1BWID0gIjEuMy4xIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworREVQRU5EUyA9ICJ1dGlsLW1hY3JvcyB2aXJ0dWFsL2VnbCIKKworUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLWdseCwgLS1kaXNhYmxlLWdseCwgdmlydHVhbC9saWJ4MTEiCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmZha2VrZXkvbGliZmFrZWtleV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJmYWtla2V5L2xpYmZha2VrZXlfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MGRkZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJmYWtla2V5L2xpYmZha2VrZXlfZ2l0LmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgY29udmVydGluZyBjaGFyYWN0ZXJzIHRvIFgga2V5LXByZXNzZXMiCitERVNDUklQVElPTiA9ICJsaWJmYWtla2V5IGlzIGEgc2ltcGxlIGxpYnJhcnkgZm9yIGNvbnZlcnRpbmcgVVRGLTggY2hhcmFjdGVycyBpbnRvICdmYWtlJyBYIFwKK2tleS1wcmVzc2VzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3JjL2xpYmZha2VrZXkuYztlbmRsaW5lPTMwO21kNT02MDJiNWNjZDQ4ZjY0NDA3NTEwODY3ZjMzNzNiNDQ4YyIKKworREVQRU5EUyA9ICJsaWJ4dHN0IgorU0VDVElPTiA9ICJ4MTEvd20iCisKK1NSQ1JFViA9ICJlMzI3ZmYwNDliODUwM2FmMmRhZGZmYTg0MzcwYTA4NjBiOWZiNjgyIgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIGxpYnh0c3QgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYm1hdGNoYm94L2xpYm1hdGNoYm94L2xpYnBuZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYm1hdGNoYm94L2xpYm1hdGNoYm94L2xpYnBuZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2Q1MDdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3gvbGlicG5nLnBhdGNoCkBAIC0wLDAgKzEsNjkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Zyb20gMTljM2QyNDIwMzQ3NDhiM2M2MDc2NTY4M2UxZmY0ZTJkZjk3MDIwNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitEYXRlOiBUdWUsIDEwIERlYyAyMDEzIDExOjM3OjMyICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZTogaW1wcm92ZSBsaWJwbmcgZGV0ZWN0aW9uCisKK0luc3RlYWQgb2YgbG9va2luZyBmb3IgImxpYnBuZzEyIiBleHBsaWNpdGx5IHRob3VnaCBwa2ctY29uZmlnIGFuZCB0aGVuIGZhbGxpbmcKK2JhY2sgdG8gbGlicmFyeSBodW50aW5nLCBqdXN0IHVzZSBwa2ctY29uZmlnIHRvIGZpbmQgImxpYnBuZyIgd2hpY2ggaXMgcHJvdmlkZWQKK2J5IGJvdGggbGlicG5nMTIgYW5kIGxpYnBuZzE2LgorCitUaGlzIGFsc28gbWFrZXMgdGhlIGxpYnBuZyBkZXRlY3Rpb24gZGV0ZXJtaW5pc3RpYy4KKworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDI5ICsrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDhhMjgwNzYuLjY1ZDdjNzkgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTM0LDcgKzM0LDcgQEAgQUNfQVJHX0VOQUJMRShqcGVnLAorICAgZW5hYmxlX2pwZWc9JGVuYWJsZXZhbCwgZW5hYmxlX2pwZWc9bm8pCisgCisgQUNfQVJHX0VOQUJMRShwbmcsCistICBbICAtLWRpc2FibGUtcG5nICAgICAgICAgICBkaXNhYmxlIHBuZyBzdXBwb3J0IFtkZWZhdWx0PW5vXV0sCisrICBbICAtLWRpc2FibGUtcG5nICAgICAgICAgICBkaXNhYmxlIFBORyBzdXBwb3J0IFtkZWZhdWx0PWVuYWJsZWRdXSwKKyAgICAgIGVuYWJsZV9wbmc9JGVuYWJsZXZhbCwgZW5hYmxlX3BuZz15ZXMgKQorIAorIEFDX0FSR19FTkFCTEUoZG94eWdlbi1kb2NzLCAgICAgCitAQCAtMTU2LDI5ICsxNTYsMTAgQEAgZmkKKyBkbmwgLS0tLS0tIENoZWNrIGZvciBQTkcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisgaWYgdGVzdCB4JGVuYWJsZV9wbmcgIT0geG5vOyB0aGVuCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGxpYnBuZzEyKQorLSAgaWYgdGVzdCB4JFBLR19DT05GSUcgIT0geG5vICYmICRQS0dfQ09ORklHIC0tZXhpc3RzIGxpYnBuZzEyOyB0aGVuIAorLSAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCistICAgICAgICBQTkdfTElCUz1gJFBLR19DT05GSUcgLS1saWJzIGxpYnBuZzEyYAorLQlQTkdfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyBsaWJwbmcxMmAKKy0gICAgICAgIEFDX0RFRklORShVU0VfUE5HLCBbMV0sIFtVc2UgUG5nXSkKKy0JU1VQUE9SVFNfUE5HPTEKKy0JUE5HX1JFUVVJUkVEPSJsaWJwbmcxMiIKKy0gIGVsc2UKKy0JQUNfTVNHX1JFU1VMVChubykKKy0gICAgICAgICMgQUNfQ0hFQ0tfSEVBREVSUyhwbmcuaCwgWyBoYXZlX3BuZ19oPSJ5ZXMiIF0sIFsgaGF2ZV9wbmdfaD0ibm8iIF0gKQorLSAgICAgICAgQUNfQ0hFQ0tfTElCKFtwbmddLCBbcG5nX2NyZWF0ZV9yZWFkX3N0cnVjdF0sIFtoYXZlX3BuZz0ieWVzIl0sIFtoYXZlX3BuZz0ibm8iXSkKKy0KKy0gICAgICAgIGlmIHRlc3QgeCRoYXZlX3BuZz14eWVzICYmIHRlc3QgeCRoYXZlX3BuZ19oPXh5ZXM7IHRoZW4gCistICAgICAgICAgICAgQUNfREVGSU5FKFVTRV9QTkcsIFsxXSwgW1VzZSBQbmddKQorLQkgICAgU1VQUE9SVFNfUE5HPTEKKy0gICAgICAgICAgICBQTkdfTElCUz0iLWxwbmcgLWx6IgorLSAgICAgICAgICAgIE1CX0VYVFJBX0xJQlM9IiRNQl9FWFRSQV9MSUJTICRQTkdfTElCUyIKKy0gICAgICAgIGVsc2UKKy0JICAgIEFDX01TR19XQVJOKFsqKiogQ2Fubm90IGZpbmQgUE5HLCBkaXNhYmxpbmcgc3VwcG9ydF0pCistICAgICAgICAgICAgZW5hYmxlX3BuZz1ubworLQlmaQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKFBORywgbGlicG5nKQorKyAgQUNfREVGSU5FKFVTRV9QTkcsIFsxXSwgW1VzZSBQTkddKQorKyAgU1VQUE9SVFNfUE5HPTEKKysgIFBOR19SRVFVSVJFRD0ibGlicG5nIgorIGZpCisgCisgCistLSAKKzEuOC41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYm1hdGNoYm94L2xpYm1hdGNoYm94XzEuMTEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJtYXRjaGJveC9saWJtYXRjaGJveF8xLjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZWI2NzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJtYXRjaGJveC9saWJtYXRjaGJveF8xLjExLmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggd2luZG93IG1hbmFnZXIgY29yZSBsaWJyYXJ5IgorU0VDVElPTiA9ICJ4MTEvbGlicyIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3QuY29tLyIKKworTElDRU5TRSA9ICJMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlibWIvbWJleHAuYztlbmRsaW5lPTIwO21kNT0yOGMwYWVmM2IyM2UzMDg0NjRmNWRhZTZhMTFiMGQyZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJtYi9tYmRvdGRlc2t0b3AuYztlbmRsaW5lPTIxO21kNT01YTI4NzE1NmIzMjA3ZTg1MWMxZDY4ZDA5YzQzOWI1MSIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9tYXRjaGJveC8ke0JQTn0vJHtQVn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbGlicG5nLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmM2Y2M4MDdmNTVhM2U3Yzc1MmQ4MDEzMTc2ODc1ZDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjU0Y2FiNTJlMzA0YTM1MTJjOGRmNGJlNTlkNjkwY2YzOTIxYmJiNjhhMjhlZGU3ZmUyNmI5MzUzNDIxN2I1MyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFQ09ORklHID8/PSAianBlZyBwbmcgeGZ0IHhzZXR0aW5ncyIKK1BBQ0tBR0VDT05GSUdbanBlZ10gPSAiLS1lbmFibGUtanBlZywtLWRpc2FibGUtanBlZyxqcGVnIgorUEFDS0FHRUNPTkZJR1twYW5nb10gPSAiLS1lbmFibGUtcGFuZ28sLS1kaXNhYmxlLXBhbmdvLHBhbmdvIgorUEFDS0FHRUNPTkZJR1twbmddID0gIi0tZW5hYmxlLXBuZywtLWRpc2FibGUtcG5nLGxpYnBuZyIKK1BBQ0tBR0VDT05GSUdbeGZ0XSA9ICItLWVuYWJsZS14ZnQsLS1kaXNhYmxlLXhmdCxsaWJ4ZnQiCitQQUNLQUdFQ09ORklHW3hzZXR0aW5nc10gPSAiLS1lbmFibGUteHNldHRpbmdzLC0tZGlzYWJsZS14c2V0dGluZ3MsbGlieHNldHRpbmdzLWNsaWVudCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwtMS4yLjE1L2NvbmZpZ3VyZV90d2Vhay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwtMS4yLjE1L2NvbmZpZ3VyZV90d2Vhay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjk3NjM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbC0xLjIuMTUvY29uZmlndXJlX3R3ZWFrLnBhdGNoCkBAIC0wLDAgKzEsMTExMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogU0RMLTEuMi4xNS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBTREwtMS4yLjE1Lm9yaWcvY29uZmlndXJlLmluCisrKysgU0RMLTEuMi4xNS9jb25maWd1cmUuaW4KK0BAIC00OCw5ICs0OCw5IEBAIEFDX0NPTkZJR19BVVhfRElSKFtidWlsZC1zY3JpcHRzXSkKKyBkbmwgQUNfQ0FOT05JQ0FMX0hPU1QKKyBBQ19DX0JJR0VORElBTgorIGlmIHRlc3QgeCRhY19jdl9jX2JpZ2VuZGlhbiA9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9CWVRFT1JERVIsIDQzMjEpCisrICAgIEFDX0RFRklORShTRExfQllURU9SREVSLCA0MzIxLCAiQnl0ZSBPcmRlciIpCisgZWxzZQorLSAgICBBQ19ERUZJTkUoU0RMX0JZVEVPUkRFUiwgMTIzNCkKKysgICAgQUNfREVGSU5FKFNETF9CWVRFT1JERVIsIDEyMzQsICJCeXRlIE9yZGVyIikKKyBmaQorIAorIGRubCBDaGVjayBmb3IgdG9vbHMKK0BAIC0xMzQsNyArMTM0LDcgQEAgQUNfQVJHX0VOQUJMRShsaWJjLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1saWJjXSwgW1VzZSB0aGUgc3lzdGVtIEMgbGlicmFyeSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2xpYmM9eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfbGliYyA9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKEhBVkVfTElCQykKKysgICAgQUNfREVGSU5FKEhBVkVfTElCQywxLCIiKQorIAorICAgICBkbmwgQ2hlY2sgZm9yIEMgbGlicmFyeSBoZWFkZXJzCisgICAgIEFDX0hFQURFUl9TVERDCitAQCAtMTQ1LDcgKzE0NSw3IEBAIGlmIHRlc3QgeCRlbmFibGVfbGliYyA9IHh5ZXM7IHRoZW4KKyAgICAgaWYgdGVzdCB4JGFjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0geHllcyAtbyB4JGFjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IHh5ZXM7IHRoZW4KKyAgICAgICAgIEFDX0NIRUNLX1RZUEUoaW50NjRfdCkKKyAgICAgICAgIGlmIHRlc3QgeCRhY19jdl90eXBlX2ludDY0X3QgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9IQVNfNjRCSVRfVFlQRSkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0hBU182NEJJVF9UWVBFLDEsIiIpCisgICAgICAgICBmaQorICAgICAgICAgaGF2ZV9pbnR0eXBlcz15ZXMKKyAgICAgZmkKK0BAIC0xNjEsMTEgKzE2MSwxMSBAQCBpZiB0ZXN0IHgkZW5hYmxlX2xpYmMgPSB4eWVzOyB0aGVuCisgCisgICAgIEFDX0ZVTkNfTUVNQ01QCisgICAgIGlmIHRlc3QgeCRhY19jdl9mdW5jX21lbWNtcF93b3JraW5nID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKEhBVkVfTUVNQ01QKQorKyAgICAgICAgQUNfREVGSU5FKEhBVkVfTUVNQ01QLDEsIiIpCisgICAgIGZpCisgICAgIEFDX0ZVTkNfU1RSVE9ECisgICAgIGlmIHRlc3QgeCRhY19jdl9mdW5jX3N0cnRvZCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShIQVZFX1NUUlRPRCkKKysgICAgICAgIEFDX0RFRklORShIQVZFX1NUUlRPRCwxLCIiKQorICAgICBmaQorICAgICBBQ19DSEVDS19GVU5DKG1wcm90ZWN0LAorICAgICAgICAgQUNfVFJZX0NPTVBJTEUoWworQEAgLTE5MSw0MCArMTkxLDQwIEBAIGlmIHRlc3QgeCRoYXZlX2ludHR5cGVzICE9IHh5ZXM7IHRoZW4KKyAgICAgQUNfQ0hFQ0tfU0laRU9GKGxvbmcsIDQpCisgICAgIEFDX0NIRUNLX1NJWkVPRihsb25nIGxvbmcsIDgpCisgICAgIGlmIHRlc3QgeCRhY19jdl9zaXplb2ZfY2hhciA9IHgxOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoaW50OF90LCBzaWduZWQgY2hhcikKKy0gICAgICAgIEFDX0RFRklORSh1aW50OF90LCB1bnNpZ25lZCBjaGFyKQorKyAgICAgICAgQUNfREVGSU5FKGludDhfdCwgc2lnbmVkIGNoYXIsIiIpCisrICAgICAgICBBQ19ERUZJTkUodWludDhfdCwgdW5zaWduZWQgY2hhciwiIikKKyAgICAgZmkKKyAgICAgaWYgdGVzdCB4JGFjX2N2X3NpemVvZl9zaG9ydCA9IHgyOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoaW50MTZfdCwgc2lnbmVkIHNob3J0KQorLSAgICAgICAgQUNfREVGSU5FKHVpbnQxNl90LCB1bnNpZ25lZCBzaG9ydCkKKysgICAgICAgIEFDX0RFRklORShpbnQxNl90LCBzaWduZWQgc2hvcnQsIiIpCisrICAgICAgICBBQ19ERUZJTkUodWludDE2X3QsIHVuc2lnbmVkIHNob3J0LCIiKQorICAgICBlbHNlCisgICAgICAgICBpZiB0ZXN0IHgkYWNfY3Zfc2l6ZW9mX2ludCA9IHgyOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKGludDE2X3QsIHNpZ25lZCBpbnQpCistICAgICAgICAgICAgQUNfREVGSU5FKHVpbnQxNl90LCB1bnNpZ25lZCBpbnQpCisrICAgICAgICAgICAgQUNfREVGSU5FKGludDE2X3QsIHNpZ25lZCBpbnQsIiIpCisrICAgICAgICAgICAgQUNfREVGSU5FKHVpbnQxNl90LCB1bnNpZ25lZCBpbnQsIiIpCisgICAgICAgICBmaQorICAgICBmaQorICAgICBpZiB0ZXN0IHgkYWNfY3Zfc2l6ZW9mX2ludCA9IHg0OyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoaW50MzJfdCwgc2lnbmVkIGludCkKKy0gICAgICAgIEFDX0RFRklORSh1aW50MzJfdCwgdW5zaWduZWQgaW50KQorKyAgICAgICAgQUNfREVGSU5FKGludDMyX3QsIHNpZ25lZCBpbnQsIiIpCisrICAgICAgICBBQ19ERUZJTkUodWludDMyX3QsIHVuc2lnbmVkIGludCwiIikKKyAgICAgZWxzZQorICAgICAgICAgaWYgdGVzdCB4JGFjX2N2X3NpemVvZl9sb25nID0geDQ7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoaW50MzJfdCwgc2lnbmVkIGxvbmcpCistICAgICAgICAgICAgQUNfREVGSU5FKHVpbnQzMl90LCB1bnNpZ25lZCBsb25nKQorKyAgICAgICAgICAgIEFDX0RFRklORShpbnQzMl90LCBzaWduZWQgbG9uZywiIikKKysgICAgICAgICAgICBBQ19ERUZJTkUodWludDMyX3QsIHVuc2lnbmVkIGxvbmcsIiIpCisgICAgICAgICBmaQorICAgICBmaQorICAgICBpZiB0ZXN0IHgkYWNfY3Zfc2l6ZW9mX2xvbmcgPSB4ODsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKGludDY0X3QsIHNpZ25lZCBsb25nKQorLSAgICAgICAgQUNfREVGSU5FKHVpbnQ2NF90LCB1bnNpZ25lZCBsb25nKQorLSAgICAgICAgQUNfREVGSU5FKFNETF9IQVNfNjRCSVRfVFlQRSkKKysgICAgICAgIEFDX0RFRklORShpbnQ2NF90LCBzaWduZWQgbG9uZywiIikKKysgICAgICAgIEFDX0RFRklORSh1aW50NjRfdCwgdW5zaWduZWQgbG9uZywiIikKKysgICAgICAgIEFDX0RFRklORShTRExfSEFTXzY0QklUX1RZUEUsIiIpCisgICAgIGVsc2UKKyAgICAgICAgIGlmIHRlc3QgeCRhY19jdl9zaXplb2ZfbG9uZ19sb25nID0geDg7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoaW50NjRfdCwgc2lnbmVkIGxvbmcgbG9uZykKKy0gICAgICAgICAgICBBQ19ERUZJTkUodWludDY0X3QsIHVuc2lnbmVkIGxvbmcgbG9uZykKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0hBU182NEJJVF9UWVBFKQorKyAgICAgICAgICAgIEFDX0RFRklORShpbnQ2NF90LCBzaWduZWQgbG9uZyBsb25nLCIiKQorKyAgICAgICAgICAgIEFDX0RFRklORSh1aW50NjRfdCwgdW5zaWduZWQgbG9uZyBsb25nLCIiKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSEFTXzY0QklUX1RZUEUsIiIpCisgICAgICAgICBmaQorICAgICBmaQorLSAgICBBQ19ERUZJTkUoc2l6ZV90LCB1bnNpZ25lZCBpbnQpCistICAgIEFDX0RFRklORSh1aW50cHRyX3QsIHVuc2lnbmVkIGxvbmcpCisrICAgIEFDX0RFRklORShzaXplX3QsIHVuc2lnbmVkIGludCwiIikKKysgICAgQUNfREVGSU5FKHVpbnRwdHJfdCwgdW5zaWduZWQgbG9uZywiIikKKyBmaQorIAorICMgU3RhbmRhcmQgQyBzb3VyY2VzCitAQCAtMjQ1LDI1ICsyNDUsMjUgQEAgQUNfQVJHX0VOQUJMRShhdWRpbywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtYXVkaW9dLCBbRW5hYmxlIHRoZSBhdWRpbyBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV9hdWRpbz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9hdWRpbyAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfQVVESU9fRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfQVVESU9fRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUodmlkZW8sCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvXSwgW0VuYWJsZSB0aGUgdmlkZW8gc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfdmlkZW89eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfdmlkZW8gIT0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKGV2ZW50cywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZXZlbnRzXSwgW0VuYWJsZSB0aGUgZXZlbnRzIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2V2ZW50cz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9ldmVudHMgIT0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0VWRU5UU19ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9FVkVOVFNfRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUoam95c3RpY2ssCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWpveXN0aWNrXSwgW0VuYWJsZSB0aGUgam95c3RpY2sgc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfam95c3RpY2s9eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgIT0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0RJU0FCTEVELDEsIiIpCisgZWxzZQorICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9qb3lzdGljay8qLmMiCisgZmkKK0BAIC0yNzEsNDMgKzI3MSw0MyBAQCBBQ19BUkdfRU5BQkxFKGNkcm9tLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jZHJvbV0sIFtFbmFibGUgdGhlIGNkcm9tIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2Nkcm9tPXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX2Nkcm9tICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9DRFJPTV9ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9DRFJPTV9ESVNBQkxFRCwxLCIiKQorIGZpCisgQUNfQVJHX0VOQUJMRSh0aHJlYWRzLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS10aHJlYWRzXSwgW0VuYWJsZSB0aGUgdGhyZWFkaW5nIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX3RocmVhZHM9eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfdGhyZWFkcyAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfVEhSRUFEU19ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9USFJFQURTX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKHRpbWVycywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdGltZXJzXSwgW0VuYWJsZSB0aGUgdGltZXIgc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfdGltZXJzPXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfVElNRVJTX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX1RJTUVSU19ESVNBQkxFRCwxLCIiKQorIGZpCisgQUNfQVJHX0VOQUJMRShmaWxlLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1maWxlXSwgW0VuYWJsZSB0aGUgZmlsZSBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV9maWxlPXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX2ZpbGUgIT0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0ZJTEVfRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfRklMRV9ESVNBQkxFRCwxLCIiKQorIGZpCisgQUNfQVJHX0VOQUJMRShsb2Fkc28sCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxvYWRzb10sIFtFbmFibGUgdGhlIHNoYXJlZCBvYmplY3QgbG9hZGluZyBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV9sb2Fkc289eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfbG9hZHNvICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9MT0FEU09fRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKGNwdWluZm8sCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNwdWluZm9dLCBbRW5hYmxlIHRoZSBjcHVpbmZvIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2NwdWluZm89eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfY3B1aW5mbyAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfQ1BVSU5GT19ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9DUFVJTkZPX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKGFzc2VtYmx5LAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hc3NlbWJseV0sIFtFbmFibGUgYXNzZW1ibHkgcm91dGluZXMgW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV9hc3NlbWJseT15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9hc3NlbWJseSA9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9BU1NFTUJMWV9ST1VUSU5FUykKKysgICAgQUNfREVGSU5FKFNETF9BU1NFTUJMWV9ST1VUSU5FUywxLCIiKQorIGZpCisgCisgZG5sIFNlZSBpZiB0aGUgT1NTIGF1ZGlvIGludGVyZmFjZSBpcyBzdXBwb3J0ZWQKK0BAIC0zMzUsMTIgKzMzNSwxMiBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtb3NzXSwgW3N1cHBvcnQKKyAgICAgICAgICAgICAgIGludCBhcmcgPSBTTkRDVExfRFNQX1NFVEZSQUdNRU5UOworICAgICAgICAgICAgIF0sWworICAgICAgICAgICAgIGhhdmVfb3NzPXllcworLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX09TU19TT1VORENBUkRfSCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9PU1NfU09VTkRDQVJEX0gsMSwiIikKKyAgICAgICAgICAgICBdKQorICAgICAgICAgZmkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJGhhdmVfb3NzKQorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfb3NzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX09TUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9PU1MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9kc3AvKi5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2RtYS8qLmMiCisgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKK0BAIC00MDcsNyArNDA3LDcgQEAgQ2hlY2tETUVESUEoKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkaGF2ZV9kbWVkaWEpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGF1ZGlvIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2RtZWRpYSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9ETUVESUEpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRE1FRElBLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vZG1lZGlhLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbGF1ZGlvIgorICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCitAQCAtNDQ0LDcgKzQ0NCw3IEBAIENoZWNrTU1FKCkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJGhhdmVfbW1lKQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBhdWRpbyBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9tbWUgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfTU1FQVVESU8pCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfTU1FQVVESU8sMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9tbWUvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkTU1FX0NGTEFHUyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAkTU1FX0xJQlMiCitAQCAtNDY3LDcgKzQ2Nyw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1lc2Qtc2hhcmVkXSwgW2QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICwgZW5hYmxlX2VzZF9zaGFyZWQ9eWVzKQorICAgICAgICAgICAgIGVzZF9saWI9W2BmaW5kX2xpYiAibGliZXNkLnNvLioiICIkRVNEX0xJQlMiIHwgc2VkICdzLy4qXC9cKC4qXCkvXDEvOyBxJ2BdCisgCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRVNEKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0VTRCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2VzZC8qLmMiCisgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICRFU0RfQ0ZMQUdTIgorICAgICAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2xvYWRzbyAhPSB4eWVzICYmIFwKK0BAIC00NzcsNyArNDc3LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWVzZC1zaGFyZWRdLCBbZAorICAgICAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2xvYWRzbyA9IHh5ZXMgJiYgXAorICAgICAgICAgICAgICAgIHRlc3QgeCRlbmFibGVfZXNkX3NoYXJlZCA9IHh5ZXMgJiYgdGVzdCB4JGVzZF9saWIgIT0geDsgdGhlbgorICAgICAgICAgICAgICAgICBlY2hvICItLSBkeW5hbWljIGxpYmVzZCAtPiAkZXNkX2xpYiIKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9BVURJT19EUklWRVJfRVNEX0RZTkFNSUMsICIkZXNkX2xpYiIpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfQVVESU9fRFJJVkVSX0VTRF9EWU5BTUlDLCAiJGVzZF9saWIiLCAiIikKKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTICRFU0RfTElCUyIKKyAgICAgICAgICAgICBmaQorQEAgLTU2NCw3ICs1NjQsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtYXJ0cy1zaGFyZWRdLCBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfYXJ0c19zaGFyZWQ9eWVzKQorICAgICAgICAgICAgICAgICBhcnRzX2xpYj1bYGZpbmRfbGliICJsaWJhcnRzYy5zby4qIiAiJEFSVFNfTElCUyIgfCBzZWQgJ3MvLipcL1woLipcKS9cMS87IHEnYF0KKyAKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfQVJUUykKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfQVJUUywsICIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9hcnRzLyouYyIKKyAgICAgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICRBUlRTX0NGTEFHUyIKKyAgICAgICAgICAgICAgICAgaWYgdGVzdCB4JGhhdmVfbG9hZHNvICE9IHh5ZXMgJiYgXAorQEAgLTU3NCw3ICs1NzQsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtYXJ0cy1zaGFyZWRdLCBbCisgICAgICAgICAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2xvYWRzbyA9IHh5ZXMgJiYgXAorICAgICAgICAgICAgICAgICAgICB0ZXN0IHgkZW5hYmxlX2FydHNfc2hhcmVkID0geHllcyAmJiB0ZXN0IHgkYXJ0c19saWIgIT0geDsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgZWNobyAiLS0gZHluYW1pYyBsaWJhcnRzYyAtPiAkYXJ0c19saWIiCistICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX0FVRElPX0RSSVZFUl9BUlRTX0RZTkFNSUMsICIkYXJ0c19saWIiKQorKyAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9BVURJT19EUklWRVJfQVJUU19EWU5BTUlDLCAiJGFydHNfbGliIiwxLCIiKQorICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAkQVJUU19MSUJTIgorICAgICAgICAgICAgICAgICBmaQorQEAgLTYzNCw3ICs2MzQsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbmFzLXNoYXJlZF0sIFtkCisgICAgICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTICROQVNfTElCUyIKKyAgICAgICAgICAgICBmaQorIAorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX05BUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9OQVMsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9uYXMvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkTkFTX0NGTEFHUyIKKyAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworQEAgLTY0OSw3ICs2NDksNyBAQCBDaGVja0Rpc2tBdWRpbygpCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWRpc2thdWRpb10sIFtzdXBwb3J0IHRoZSBkaXNrIHdyaXRlciBhdWRpbyBkcml2ZXIgW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfZGlza2F1ZGlvPXllcykKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV9hdWRpbyA9IHh5ZXMgLWEgeCRlbmFibGVfZGlza2F1ZGlvID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRElTSykKKysgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0RJU0ssMSwiIikKKyAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2Rpc2svKi5jIgorICAgICBmaQorIH0KK0BAIC02NjEsNyArNjYxLDcgQEAgQ2hlY2tEdW1teUF1ZGlvKCkKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZHVtbXlhdWRpb10sIFtzdXBwb3J0IHRoZSBkdW1teSBhdWRpbyBkcml2ZXIgW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfZHVtbXlhdWRpbz15ZXMpCisgICAgIGlmIHRlc3QgeCRlbmFibGVfYXVkaW8gPSB4eWVzIC1hIHgkZW5hYmxlX2R1bW15YXVkaW8gPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9EVU1NWSkKKysgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0RVTU1ZLDEsIiIpCisgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9kdW1teS8qLmMiCisgICAgIGZpCisgfQorQEAgLTY3Nyw3ICs2NzcsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbWludGF1ZGlvXSwgW3N1CisgICAgICAgICBBQ19DSEVDS19IRUFERVIobWludC9mYWxjb24uaCwgaGF2ZV9taW50X2ZhbGNvbl9oZHI9eWVzKQorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfbWludF9mYWxjb25faGRyID0geHllczsgdGhlbgorICAgICAgICAgICAgIG1pbnRhdWRpbz15ZXMKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9NSU5UKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX01JTlQsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9taW50LyouYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9taW50LyouUyIKKyAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworQEAgLTc0Niw3ICs3NDYsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbmFzbV0sIFt1c2UgbmFzCisgICAgICAgICBDb21waWxlTkFTTSB1bnF1b3RlZC1zZWN0aW9ucyB8fCBOQVNNPSIiCisgCisgICAgICAgICBpZiB0ZXN0ICJ4JE5BU00iICE9IHggLWEgIngkTkFTTSIgIT0geCciJE5BU00iJzsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSEVSTUVTX0JMSVRURVJTKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSEVSTUVTX0JMSVRURVJTLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvaGVybWVzLyouYXNtIgorICAgICAgICAgICAgIE5BU01GTEFHUz0iJE5BU01GTEFHUyAtSSAkc3JjZGlyL3NyYy9oZXJtZXMvIgorIAorQEAgLTg0MCw5ICs4NDAsOSBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtYWx0aXZlY10sIFt1c2UKKyAgICAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorIAorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfZ2NjX2FsdGl2ZWMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BTFRJVkVDX0JMSVRURVJTKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQUxUSVZFQ19CTElUVEVSUywxLCIiKQorICAgICAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2FsdGl2ZWNfaF9oZHIgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9BTFRJVkVDX0gpCisrICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9BTFRJVkVDX0gsMSwiIikKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkYWx0aXZlY19DRkxBR1MiCisgICAgICAgICBmaQorQEAgLTkyMCw3ICs5MjAsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtaXBvZF0sIFtjb25maWd1CisgCisgICAgIGlmIHRlc3QgeCRlbmFibGVfaXBvZCA9IHh5ZXM7IHRoZW4KKyAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAtRElQT0QiCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9JUE9EKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfSVBPRCwxLCIiKQorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vaXBvZC8qLmMiCisgICAgIGZpCisgfQorQEAgLTk1NCw3ICs5NTQsNyBAQCBDaGVja05BTk9YKCkKKyAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgLURFTkFCTEVfTkFOT1hfRElSRUNUX0ZCIgorICAgICAgICAgZmkKKyAKKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX05BTk9YKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfTkFOT1gsMSwiIikKKyAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL25hbm94LyouYyIKKyAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sbmFuby1YIgorICAgICAgICAgaGF2ZV92aWRlbz15ZXMKK0BAIC0xMDIwLDcgKzEwMjAsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUteDExLXNoYXJlZF0sIFtkCisgICAgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRYX0NGTEFHUyIKKyAgICAgICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAkWF9MSUJTIgorIAorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMSkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTEsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby94MTEvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkWF9DRkxBR1MiCisgCitAQCAtMTA0Miw4ICsxMDQyLDggQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXgxMS1zaGFyZWRdLCBbZAorICAgICAgICAgICAgICAgIHRlc3QgeCRlbmFibGVfeDExX3NoYXJlZCA9IHh5ZXMgJiYgdGVzdCB4JHgxMV9saWIgIT0geCAmJiB0ZXN0IHgkeDExZXh0X2xpYiAhPSB4OyB0aGVuCisgICAgICAgICAgICAgICAgIGVjaG8gIi0tIGR5bmFtaWMgbGliWDExIC0+ICR4MTFfbGliIgorICAgICAgICAgICAgICAgICBlY2hvICItLSBkeW5hbWljIGxpYlgxMWV4dCAtPiAkeDExZXh0X2xpYiIKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9WSURFT19EUklWRVJfWDExX0RZTkFNSUMsICIkeDExX2xpYiIpCistICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfVklERU9fRFJJVkVSX1gxMV9EWU5BTUlDX1hFWFQsICIkeDExZXh0X2xpYiIpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfVklERU9fRFJJVkVSX1gxMV9EWU5BTUlDLCAiJHgxMV9saWIiLCIiKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX1ZJREVPX0RSSVZFUl9YMTFfRFlOQU1JQ19YRVhULCAiJHgxMWV4dF9saWIiLCIiKQorICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgZW5hYmxlX3gxMV9zaGFyZWQ9bm8KKyAgICAgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgJFhfTElCUyAtbFgxMSAtbFhleHQiCitAQCAtMTA2MCwyMCArMTA2MCwyMCBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZGdhXSwgW2FsbG93IHVzCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLWRnYV0sIFt1c2UgREdBIDIuMCB2aWRlbyBkcml2ZXIgW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfdmlkZW9fZGdhPXllcykKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2RnYSA9IHh5ZXMgLWEgeCRlbmFibGVfdmlkZW9fZGdhID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9ER0EpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0RHQSwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9kZ2EvKi5jIgorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgQUNfQVJHX0VOQUJMRSh2aWRlby14MTEtZGdhbW91c2UsCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXgxMS1kZ2Ftb3VzZV0sIFt1c2UgWDExIERHQSBmb3IgbW91c2UgZXZlbnRzIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfdmlkZW9feDExX2RnYW1vdXNlPXllcykKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2RnYSA9IHh5ZXMgLWEgeCRlbmFibGVfdmlkZW9feDExX2RnYW1vdXNlID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTFfREdBTU9VU0UpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9ER0FNT1VTRSwxLCIiKQorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgQUNfQVJHX0VOQUJMRSh2aWRlby14MTEtdm0sCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXgxMS12bV0sIFt1c2UgWDExIFZNIGV4dGVuc2lvbiBmb3IgZnVsbHNjcmVlbiBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICwgZW5hYmxlX3ZpZGVvX3gxMV92bT15ZXMpCisgICAgICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlb194MTFfdm0gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9WSURNT0RFKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTFfVklETU9ERSwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9YZXh0L1h4Zjg2dm0vKi5jIgorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgQUNfQVJHX0VOQUJMRSh2aWRlby14MTEteHYsCitAQCAtMTA4NywxNCArMTA4NywxNCBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teDExLXh2XSwKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teDExLXhpbmVyYW1hXSwgW2VuYWJsZSBYMTEgWGluZXJhbWEgc3VwcG9ydCBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfdmlkZW9feDExX3hpbmVyYW1hPXllcykKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvX3gxMV94aW5lcmFtYSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX1hJTkVSQU1BKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTFfWElORVJBTUEsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vWGV4dC9YaW5lcmFtYS8qLmMiCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBQ19BUkdfRU5BQkxFKHZpZGVvLXgxMS14bWUsCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXgxMS14bWVdLCBbZW5hYmxlIFhpIEdyYXBoaWNzIFhNRSBmb3IgZnVsbHNjcmVlbiBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfdmlkZW9feDExX3htZT15ZXMpCisgICAgICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlb194MTFfeG1lID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTFfWE1FKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTFfWE1FLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL1hleHQvWE1FLyouYyIKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIEFDX0FSR19FTkFCTEUodmlkZW8teDExLXhyYW5kciwKK0BAIC0xMTExLDggKzExMTEsOCBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teDExLXhyYW5kCisgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3gxMV9zaGFyZWQgPSB4eWVzICYmIHRlc3QgeCR4cmFuZHJfbGliICE9IHggOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiLS0gZHluYW1pYyBsaWJYcmVuZGVyIC0+ICR4cmVuZGVyX2xpYiIKKyAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICItLSBkeW5hbWljIGxpYlhyYW5kciAtPiAkeHJhbmRyX2xpYiIKKy0gICAgICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX1ZJREVPX0RSSVZFUl9YMTFfRFlOQU1JQ19YUkVOREVSLCAiJHhyZW5kZXJfbGliIikKKy0gICAgICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX1ZJREVPX0RSSVZFUl9YMTFfRFlOQU1JQ19YUkFORFIsICIkeHJhbmRyX2xpYiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9WSURFT19EUklWRVJfWDExX0RZTkFNSUNfWFJFTkRFUiwgIiR4cmVuZGVyX2xpYiIsIiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9WSURFT19EUklWRVJfWDExX0RZTkFNSUNfWFJBTkRSLCAiJHhyYW5kcl9saWIiLCIiKQorICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRlbHlfZW5hYmxlX3ZpZGVvX3gxMV94cmFuZHI9eWVzCisgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKFhyZW5kZXIsIFhSZW5kZXJRdWVyeUV4dGVuc2lvbiwgaGF2ZV94cmVuZGVyX2xpYj15ZXMpCitAQCAtMTEyNSw3ICsxMTI1LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXgxMS14cmFuZAorICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgaWYgdGVzdCB4JGRlZmluaXRlbHlfZW5hYmxlX3ZpZGVvX3gxMV94cmFuZHIgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9YUkFORFIpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9YUkFORFIsMSwiIikKKyAgICAgICAgICAgICBmaQorICAgICAgICAgZmkKKyAgICAgZmkKK0BAIC0xMTUyLDcgKzExNTIsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tcGhvdG9uXSwKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19waG90b24pCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fcGhvdG9uID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1BIT1RPTikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9QSE9UT04sMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9waG90b24vKi5jIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1scGgiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKK0BAIC0xMTY2LDcgKzExNjYsNyBAQCBkbmwgU2V0IHVwIHRoZSBCV2luZG93IHZpZGVvIGRyaXZlciBpZiBlCisgQ2hlY2tCV0lORE9XKCkKKyB7CisgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW8gPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9CV0lORE9XKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfQldJTkRPVywxLCIiKQorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vYndpbmRvdy8qLmNjIgorICAgICAgICAgaGF2ZV92aWRlbz15ZXMKKyAgICAgZmkKK0BAIC0xMTg5LDcgKzExODksNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tY2FyYm9uXSwKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCRoYXZlX2NhcmJvbikKKyAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2NhcmJvbiA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9UT09MQk9YKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1RPT0xCT1gsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9tYWNjb21tb24vKi5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL21hY3JvbS8qLmMiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKK0BAIC0xMjE4LDcgKzEyMTgsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tY29jb2FdLCBbCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCRoYXZlX2NvY29hKQorICAgICAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9jb2NvYSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9RVUFSVFopCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUVVBUlRaLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vcXVhcnR6LyoubSIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworICAgICAgICAgZmkKK0BAIC0xMjQ1LDcgKzEyNDUsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tZmJjb25dLCBbCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19mYmNvbikKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19mYmNvbiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgICBBQ19DSEVDS19GVU5DUyhnZXRwYWdlc2l6ZSkKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9GQkNPTikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9GQkNPTiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL2ZiY29uLyouYyIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworICAgICAgICAgZmkKK0BAIC0xMjk2LDcgKzEyOTYsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tZGlyZWN0ZmJdCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19kaXJlY3RmYikKKyAKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19kaXJlY3RmYiA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9ESVJFQ1RGQikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9ESVJFQ1RGQiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL2RpcmVjdGZiLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgJERJUkVDVEZCX0NGTEFHUyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAkRElSRUNURkJfTElCUyIKK0BAIC0xMzIzLDcgKzEzMjMsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tcHMyZ3NdLCBbCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fcHMyZ3MpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fcHMyZ3MgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUFMyR1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUFMyR1MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9wczJncy8qLmMiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKKyAgICAgICAgIGZpCitAQCAtMTM3Niw3ICsxMzc2LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLWdnaV0sIFt1cworICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX2dnaSkKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19nZ2kgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfR0dJKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0dHSSwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL2dnaS8qLmMiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxnZ2kgLWxnaWkgLWxnZyIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTE0MDYsNyArMTQwNiw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1zdmdhXSwgW3UKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19zdmdhKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX3N2Z2EgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfU1ZHQUxJQikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9TVkdBTElCLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vc3ZnYS8qLmMiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWx2Z2EiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKK0BAIC0xNDM4LDcgKzE0MzgsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tdmdsXSwgW3VzCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fdmdsKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX3ZnbCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9WR0wpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfVkdMLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vdmdsLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbHZnbCIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTE0NjYsNyArMTQ2Niw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby13c2NvbnNdLAorICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX3dzY29ucykKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb193c2NvbnMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfV1NDT05TKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1dTQ09OUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3dzY29ucy8qLmMiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKKyAgICAgICAgIGZpCitAQCAtMTQ5MSw3ICsxNDkxLDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLWFhbGliXSwgWworICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX2FhbGliKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX2FhbGliID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0FBTElCKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0FBTElCLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vYWFsaWIvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sYWEiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKK0BAIC0xNTUzLDcgKzE1NTMsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tcXRvcGlhXSwKKyAgICAgICAgIENYWEZMQUdTPSIkT0xEX0NYWCIKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX3F0b3BpYSkKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19xdG9waWEgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUVRPUElBKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1FUT1BJQSwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3F0b3BpYS8qLmNjIgorICAgICAgICAgICAgIFNETE1BSU5fU09VUkNFUz0iJHNyY2Rpci9zcmMvbWFpbi9xdG9waWEvKi5jYyIKKyAgICAgICAgICAgICBTRExNQUlOX0xERkxBR1M9Ii1zdGF0aWMiCitAQCAtMTU4Myw3ICsxNTgzLDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXBpY29ndWldLAorICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX3BpY29ndWkpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fcGljb2d1aSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9QSUNPR1VJKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1BJQ09HVUksMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9waWNvZ3VpLyouYyIKKyAgICAgICAgICAgICBTRExfTElCUz0iJFNETF9MSUJTIC1scGd1aSIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTE2MDcsNyArMTYwNyw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby14Ymlvc10sIFsKKyAgICAgdmlkZW9feGJpb3M9bm8KKyAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyA9IHh5ZXMgLWEgeCRlbmFibGVfdmlkZW9feGJpb3MgPSB4eWVzOyB0aGVuCisgICAgICAgICB2aWRlb194Ymlvcz15ZXMKKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1hCSU9TKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWEJJT1MsMSwiIikKKyAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3hiaW9zLyouYyIKKyAgICAgICAgIGhhdmVfdmlkZW89eWVzCisgICAgIGZpCitAQCAtMTYyNSw3ICsxNjI1LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLWdlbV0sIFt1cworICAgICAgICAgQUNfQ0hFQ0tfTElCKGdlbSwgYXBwbF9pbml0LCBoYXZlX2dlbV9saWI9eWVzKQorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfZ2VtX2hkciA9IHh5ZXMgLWEgeCRoYXZlX2dlbV9saWIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAgdmlkZW9fZ2VtPXllcworLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0dFTSkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9HRU0sMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9nZW0vKi5jIgorICAgICAgICAgICAgIFNETF9MSUJTPSIkU0RMX0xJQlMgLWxnZW0iCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKK0BAIC0xNjQwLDcgKzE2NDAsNyBAQCBDaGVja0R1bW15VmlkZW8oKQorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1kdW1teV0sIFt1c2UgZHVtbXkgdmlkZW8gZHJpdmVyIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgICAgICwgZW5hYmxlX3ZpZGVvX2R1bW15PXllcykKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlb19kdW1teSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0RVTU1ZKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfRFVNTVksMSwiIikKKyAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL2R1bW15LyouYyIKKyAgICAgICAgIGhhdmVfdmlkZW89eWVzCisgICAgIGZpCitAQCAtMTY2Nyw4ICsxNjY3LDggQEAgQ2hlY2tPcGVuR0xYMTEoKQorICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX29wZW5nbCkKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19vcGVuZ2wgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wpCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0xfR0xYKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMLDEsIiIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0xfR0xYLDEsIiIpCisgICAgICAgICBmaQorICAgICBmaQorIH0KK0BAIC0xNjg3LDcgKzE2ODcsNyBAQCBDaGVja09wZW5HTFFOWCgpCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fb3BlbmdsKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX29wZW5nbCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCwxLCIiKQorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sR0wiCisgICAgICAgICBmaQorICAgICBmaQorQEAgLTE2OTcsOCArMTY5Nyw4IEBAIGRubCBDaGVjayBmb3IgV2luMzIgT3BlbkdMCisgQ2hlY2tXSU4zMkdMKCkKKyB7CisgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW8gPSB4eWVzIC1hIHgkZW5hYmxlX3ZpZGVvX29wZW5nbCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMKQorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0xfV0dMKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wsMSwiIikKKysgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMX1dHTCwxLCIiKQorICAgICBmaQorIH0KKyAKK0BAIC0xNzA2LDcgKzE3MDYsNyBAQCBkbmwgQ2hlY2sgZm9yIEJlT1MgT3BlbkdMCisgQ2hlY2tCZUdMKCkKKyB7CisgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW8gPSB4eWVzIC1hIHgkZW5hYmxlX3ZpZGVvX29wZW5nbCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wsMSwiIikKKyAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sR0wiCisgICAgIGZpCisgfQorQEAgLTE3MTUsNyArMTcxNSw3IEBAIGRubCBDaGVjayBmb3IgTWFjT1MgT3BlbkdMCisgQ2hlY2tNYWNHTCgpCisgeworICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvID0geHllcyAtYSB4JGVuYWJsZV92aWRlb19vcGVuZ2wgPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCkKKysgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMLDEsIiIpCisgICAgICAgICBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgICAgICAqLSotZGFyd2luKikKKyAgICAgICAgICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlb19jb2NvYSA9IHh5ZXM7IHRoZW4KK0BAIC0xNzQ3LDggKzE3NDcsOCBAQCBDaGVja0F0YXJpT1NNZXNhKCkKKyAgICAgICAgICAgICBPU01FU0FfQ0ZMQUdTPWAkT1NNRVNBX0NPTkZJRyAtLWNmbGFnc2AKKyAgICAgICAgICAgICBPU01FU0FfTElCUz1gJE9TTUVTQV9DT05GSUcgLS1saWJzYAorICAgICAgICAgZmkKKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMKQorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0xfT1NNRVNBKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wsMSwiIikKKysgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMX09TTUVTQSwxLCIiKQorICAgICAgICAgU0RMX0NGTEFHUz0iJFNETF9DRkxBR1MgJE9TTUVTQV9DRkxBR1MiCisgICAgICAgICBTRExfTElCUz0iJFNETF9MSUJTICRPU01FU0FfTElCUyIKKyAKK0BAIC0xNzU4LDcgKzE3NTgsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtb3NtZXNhLXNoYXJlZF0sCisgICAgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9vc21lc2Ffc2hhcmVkIiA9ICJ4eWVzIiAtYSAieCRlbmFibGVfYXRhcmlfbGRnIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgICAgICAgICMgRHluYW1pYyBsaW5raW5nCisgICAgICAgICAgICAgaWYgdGVzdCAieCRoYXZlX29zbWVzYV9oZHIiID0gInh5ZXMiOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMX09TTUVTQV9EWU5BTUlDKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTF9PU01FU0FfRFlOQU1JQywxLCIiKQorICAgICAgICAgICAgIGZpCisgICAgICAgICBmaQorICAgICBmaQorQEAgLTE3OTIsNyArMTc5Miw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1pbnB1dC1ldmVudHNdLAorICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHVzZV9pbnB1dF9ldmVudHMpCisgICAgICAgICBpZiB0ZXN0IHgkdXNlX2lucHV0X2V2ZW50cyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0lOUFVUX0xJTlVYRVYpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9JTlBVVF9MSU5VWEVWLDEsIiIpCisgICAgICAgICBmaQorICAgICBmaQorIH0KK0BAIC0xODE0LDcgKzE4MTQsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtaW5wdXQtdHNsaWJdLCBbCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkZW5hYmxlX2lucHV0X3RzbGliKQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9pbnB1dF90c2xpYiA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0lOUFVUX1RTTElCKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSU5QVVRfVFNMSUIsMSwiIikKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbHRzIgorICAgICAgICAgZmkKKyAgICAgZmkKK0BAIC0xODM3LDcgKzE4MzcsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtcHRoXSwgW3VzZSBHTlUKKyAgICAgICAgIEFDX01TR19DSEVDS0lORyhwdGgpCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR1c2VfcHRoKQorICAgICAgICAgaWYgdGVzdCAieCR1c2VfcHRoIiA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9QVEgpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfUFRILDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL3B0aC8qLmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL2dlbmVyaWMvU0RMX3N5c3NlbS5jIgorICAgICAgICAgICAgIFNETF9DRkxBR1M9IiRTRExfQ0ZMQUdTIGAkUFRIX0NPTkZJRyAtLWNmbGFnc2AiCitAQCAtMTk0Myw3ICsxOTQzLDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXB0aHJlYWQtc2VtXSwgWworIAorICAgICAgICAgIyBEbyBmdXRoZXIgdGVzdGluZyBpZiB3ZSBoYXZlIHB0aHJlYWQgc3VwcG9ydC4uLgorICAgICAgICAgaWYgdGVzdCB4JHVzZV9wdGhyZWFkcyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9QVEhSRUFEKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1BUSFJFQUQsMSwiIikKKyAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgJHB0aHJlYWRfY2ZsYWdzIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTICRwdGhyZWFkX2xpYiIKKyAgICAgICAgICAgICBTRExfQ0ZMQUdTPSIkU0RMX0NGTEFHUyAkcHRocmVhZF9jZmxhZ3MiCitAQCAtMTk2NSw3ICsxOTY1LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXB0aHJlYWQtc2VtXSwgWworICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJmF0dHIsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKTsKKyAgICAgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgICAgIGhhc19yZWN1cnNpdmVfbXV0ZXhlcz15ZXMKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfUFRIUkVBRF9SRUNVUlNJVkVfTVVURVgpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1BUSFJFQURfUkVDVVJTSVZFX01VVEVYLDEsIiIpCisgICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkaGFzX3JlY3Vyc2l2ZV9tdXRleGVzID0geG5vOyB0aGVuCitAQCAtMTk3Niw3ICsxOTc2LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXB0aHJlYWQtc2VtXSwgWworICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldGtpbmRfbnAoJmF0dHIsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QKTsKKyAgICAgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgICAgIGhhc19yZWN1cnNpdmVfbXV0ZXhlcz15ZXMKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfTlApCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1BUSFJFQURfUkVDVVJTSVZFX01VVEVYX05QLDEsIiIpCisgICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKCRoYXNfcmVjdXJzaXZlX211dGV4ZXMpCitAQCAtMjA2NSw3ICsyMDY1LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXN0ZGlvLXJlZGlyZWN0XQorICAgICBmaQorIAorICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfV0lORElCKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfV0lORElCLDEsIiIpCisgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby93aW5jb21tb24vKi5jIgorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vd2luZGliLyouYyIKKyAgICAgICAgIGhhdmVfdmlkZW89eWVzCitAQCAtMjA4Nyw3ICsyMDg3LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWRpcmVjdHhdLCBbdXNlCisgICAgICAgICAgICAgaGF2ZV9kaXJlY3R4PXllcworICAgICAgICAgZmkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW8gPSB4eWVzIC1hIHgkaGF2ZV9kaXJlY3R4ID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0REUkFXKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0REUkFXLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vd2luZHg1LyouYyIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworICAgICAgICAgZmkKK0BAIC0yMTE4LDcgKzIxMTgsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtc2RsLWRsb3Blbl0sIFt1CisgICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKGMsIGRsb3BlbiwgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MiLAorICAgICAgICAgICAgICAgIEFDX0NIRUNLX0xJQihkbCwgZGxvcGVuLCBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbGRsIiwKKyAgICAgICAgICAgICAgICAgICBBQ19DSEVDS19MSUIobHRkbCwgZGxvcGVuLCBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbGx0ZGwiKSkpCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fRExPUEVOKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RMT1BFTiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2xvYWRzby9kbG9wZW4vKi5jIgorICAgICAgICAgICAgIGhhdmVfbG9hZHNvPXllcworICAgICAgICAgZmkKK0BAIC0yMTM1LDcgKzIxMzUsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtYXRhcmktbGRnXSwgW3VzCisgICAgICAgICBBQ19DSEVDS19IRUFERVIobGRnLmgsIGhhdmVfbGRnX2hkcj15ZXMpCisgICAgICAgICBBQ19DSEVDS19MSUIobGRnLCBsZGdfb3BlbiwgaGF2ZV9sZGdfbGliPXllcywgaGF2ZV9sZGdfbGliPW5vLCAtbGdlbSkKKyAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2xkZ19oZHIgPSB4eWVzIC1hIHgkaGF2ZV9sZGdfbGliID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0xERykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19MREcsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9sb2Fkc28vbWludC8qLmMiCisgICAgICAgICAgICAgU0RMX0xJQlM9IiRTRExfTElCUyAtbGxkZyAtbGdlbSIKKyAgICAgICAgICAgICBoYXZlX2xvYWRzbz15ZXMKK0BAIC0yMjY2LDExICsyMjY2LDExIEBAIENoZWNrVVNCSElEKCkKKyAgICAgICAgICAgICBoYXZlX21hY2hpbmVfam95c3RpY2s9eWVzCisgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9tYWNoaW5lX2pveXN0aWNrID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX1VTQkhJRF9NQUNISU5FX0pPWVNUSUNLX0gpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfVVNCSElEX01BQ0hJTkVfSk9ZU1RJQ0tfSCwxLCIiKQorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVCgkaGF2ZV9tYWNoaW5lX2pveXN0aWNrKQorIAorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfVVNCSElEKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfVVNCSElELDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvam95c3RpY2svYnNkLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgJFVTQl9DRkxBR1MiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgJFVTQl9MSUJTIgorQEAgLTIyODksNyArMjI4OSw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jbG9ja19nZXR0aW1lXSwKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV9jbG9ja19nZXR0aW1lID0geHllczsgdGhlbgorICAgICAgICAgQUNfQ0hFQ0tfTElCKHJ0LCBjbG9ja19nZXR0aW1lLCBoYXZlX2Nsb2NrX2dldHRpbWU9eWVzKQorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfY2xvY2tfZ2V0dGltZSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9DTE9DS19HRVRUSU1FKQorKyAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0NMT0NLX0dFVFRJTUUsMSwiIikKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbHJ0IgorICAgICAgICAgZmkKKyAgICAgZmkKK0BAIC0yMzIwLDcgKzIzMjAsNyBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIENoZWNrSVBvZAorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aW1lciBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvdW5peC8qLmMiCisgICAgICAgICAgICAgaGF2ZV90aW1lcnM9eWVzCisgICAgICAgICBmaQorQEAgLTIzODYsMTcgKzIzODYsMTcgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2F1ZGlvID0geHllczsgdGhlbgorICAgICAgICAgICBjYXNlICRBUkNIIGluCisgICAgICAgICAgICAgc3lzdjV8c29sYXJpc3xocHV4KQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9TVU5BVURJTykKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfU1VOQVVESU8sMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vc3VuLyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKKyAgICAgICAgICAgICA7OworICAgICAgICAgICAgIG5ldGJzZHxvcGVuYnNkKQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9CU0QpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0JTRCwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9ic2QvKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgYWl4KQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9QQVVEKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9QQVVELDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL3BhdWRpby8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCisgICAgICAgICAgICAgOzsKK0BAIC0yNDA2LDcgKzI0MDYsNyBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgPSB4eWVzOyB0aGVuCisgICAgICAgICAgIGNhc2UgJEFSQ0ggaW4KKyAgICAgICAgICAgICBsaW51eCkKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19MSU5VWCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19MSU5VWCwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9qb3lzdGljay9saW51eC8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfam95c3RpY2s9eWVzCisgICAgICAgICAgICAgOzsKK0BAIC0yNDE2LDMyICsyNDE2LDMyIEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9jZHJvbSA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgY2FzZSAkQVJDSCBpbgorICAgICAgICAgICAgIGxpbnV4fHNvbGFyaXMpCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fTElOVVgpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fTElOVVgsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vbGludXgvKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgKmZyZWVic2QqKQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0ZSRUVCU0QpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fRlJFRUJTRCwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9mcmVlYnNkLyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgICAgICA7OworICAgICAgICAgICAgICpvcGVuYnNkKnwqbmV0YnNkKikKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9PUEVOQlNEKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX09QRU5CU0QsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vb3BlbmJzZC8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICBic2RpKQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0JTREkpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fQlNESSwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9ic2RpLyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgICAgICA7OworICAgICAgICAgICAgIGFpeCkKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9BSVgpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fQUlYLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL2FpeC8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICBvc2YpCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fT1NGKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX09TRiwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9vc2YvKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgICAgIDs7CitAQCAtMjQ0OSw3ICsyNDQ5LDcgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aHJlYWQgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aHJlYWRzID0geHllcyAtYSB4JHVzZV9wdGhyZWFkcyAhPSB4eWVzIC1hIHgkdXNlX3B0aCAhPSB4eWVzIC1hIHgkQVJDSCA9IHhpcml4OyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfU1BST0MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfU1BST0MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvaXJpeC8qLmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL2dlbmVyaWMvU0RMX3N5c211dGV4LmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL2dlbmVyaWMvU0RMX3N5c2NvbmQuYyIKK0BAIC0yNDU3LDcgKzI0NTcsNyBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRpbWVyIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci91bml4LyouYyIKKyAgICAgICAgICAgICBoYXZlX3RpbWVycz15ZXMKKyAgICAgICAgIGZpCitAQCAtMjQ3NiwyMCArMjQ3NiwyMCBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIENoZWNrUFRIUkVBRAorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBhdWRpbyBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2F1ZGlvID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1FOWE5UTykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9RTlhOVE8sMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9udG8vKi5jIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sYXNvdW5kIgorICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBjZHJvbSBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2Nkcm9tID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fUU5YKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fUU5YLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vcW54LyouYyIKKyAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGltZXIgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL3VuaXgvKi5jIgorICAgICAgICAgICAgIGhhdmVfdGltZXJzPXllcworICAgICAgICAgZmkKK0BAIC0yNTE0LDI5ICsyNTE0LDI5IEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgQ2hlY2tOQVNNCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGF1ZGlvIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfYXVkaW8gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfV0FWRU9VVCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9XQVZFT1VULDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vd2luZGliLyouYyIKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9kaXJlY3R4ID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9EU09VTkQpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0RTT1VORCwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby93aW5keDUvKi5jIgorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGpveXN0aWNrIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19XSU5NTSkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX1dJTk1NLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvam95c3RpY2svd2luMzIvKi5jIgorICAgICAgICAgICAgIGhhdmVfam95c3RpY2s9eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBjZHJvbSBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2Nkcm9tID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fV0lOMzIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9XSU4zMiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL3dpbjMyLyouYyIKKyAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGhyZWFkIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGhyZWFkcyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9XSU4zMikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9XSU4zMiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC93aW4zMi9TRExfc3lzbXV0ZXguYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvd2luMzIvU0RMX3N5c3NlbS5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC93aW4zMi9TRExfc3lzdGhyZWFkLmMiCitAQCAtMjU0NSwxMyArMjU0NSwxMyBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRpbWVyIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfV0lOMzIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9XSU4zMiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL3dpbjMyLyouYyIKKyAgICAgICAgICAgICBoYXZlX3RpbWVycz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHNoYXJlZCBvYmplY3QgbG9hZGluZyBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2xvYWRzbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19XSU4zMikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19XSU4zMiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2xvYWRzby93aW4zMi8qLmMiCisgICAgICAgICAgICAgaGF2ZV9sb2Fkc289eWVzCisgICAgICAgICBmaQorQEAgLTI2MjIsMjUgKzI2MjIsMjUgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBDaGVja0JlR0wKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgYXVkaW8gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9hdWRpbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9CQVVESU8pCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfQkFVRElPLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vYmF1ZGlvLyouY2MiCisgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGpveXN0aWNrIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19CRU9TKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfQkVPUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2pveXN0aWNrL2Jlb3MvKi5jYyIKKyAgICAgICAgICAgICBoYXZlX2pveXN0aWNrPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgY2Ryb20gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9jZHJvbSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0JFT1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9CRU9TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vYmVvcy8qLmNjIgorICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aHJlYWQgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aHJlYWRzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX0JFT1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfQkVPUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC9iZW9zLyouYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvZ2VuZXJpYy9TRExfc3lzbXV0ZXguYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvZ2VuZXJpYy9TRExfc3lzY29uZC5jIgorQEAgLTI2NDgsNyArMjY0OCw3IEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGltZXIgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9CRU9TKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfQkVPUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL2Jlb3MvKi5jIgorICAgICAgICAgICAgIGhhdmVfdGltZXJzPXllcworICAgICAgICAgZmkKK0BAIC0yNjU2LDExICsyNjU2LDExIEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9sb2Fkc28gPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICAgICAgICAgICotKi1iZW9zKikKKy0gICAgICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0JFT1MpCisrICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19CRU9TLDEsIiIpCisgICAgICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9sb2Fkc28vYmVvcy8qLmMiCisgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICotKi1oYWlrdSopCistICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ETE9QRU4pCisrICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ETE9QRU4sMSwiIikKKyAgICAgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2xvYWRzby9kbG9wZW4vKi5jIgorICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgIGVzYWMgICAgCitAQCAtMjY5Niw3ICsyNjk2LDcgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHNoYXJlZCBvYmplY3QgbG9hZGluZyBsaWJyYXJ5CisgICAgICAgICAjICh0aGlzIG5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlIHRoZSBkeW5hbWljIFgxMSBjaGVjaykKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfbG9hZHNvID0geHllcyAtYSB4JGhhdmVfZGxvcGVuICE9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ETENPTVBBVCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ETENPTVBBVCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2xvYWRzby9tYWNvc3gvKi5jIgorICAgICAgICAgICAgIGhhdmVfbG9hZHNvPXllcworICAgICAgICAgZmkKK0BAIC0yNzE0LDI2ICsyNzE0LDI2IEBAIGNhc2UgIiRob3N0IiBpbgorIAorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBhdWRpbyBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2F1ZGlvID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0NPUkVBVURJTykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9DT1JFQVVESU8sMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9tYWNvc3gvKi5jIgorICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBqb3lzdGljayBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2pveXN0aWNrID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfSU9LSVQpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19JT0tJVCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2pveXN0aWNrL2Rhcndpbi8qLmMiCisgICAgICAgICAgICAgaGF2ZV9qb3lzdGljaz15ZXMKKyAgICAgICAgICAgICBuZWVkX2lva2l0X2ZyYW1ld29yaz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGNkcm9tIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfY2Ryb20gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9NQUNPU1gpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9NQUNPU1gsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9tYWNvc3gvKi5jIgorICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aW1lciBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvdW5peC8qLmMiCisgICAgICAgICAgICAgaGF2ZV90aW1lcnM9eWVzCisgICAgICAgICBmaQorQEAgLTI3NzUsMzAgKzI3NzUsMzAgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGF1ZGlvIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGhyZWFkcyA9IHh5ZXMgLWEgeCRlbmFibGVfcHRoID0geHllczsgdGhlbgorICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfYXVkaW8gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1NVTkFVRElPKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9TVU5BVURJTywxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9zdW4vKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworICAgICAgICAgICAgIGZpCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBqb3lzdGljayBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2pveXN0aWNrID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfTUlOVCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX01JTlQsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9qb3lzdGljay9taW50LyouYyIKKyAgICAgICAgICAgICBoYXZlX2pveXN0aWNrPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgY2Ryb20gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9jZHJvbSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX01JTlQpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9NSU5ULDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vbWludC8qLmMiCisgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRpbWVyIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzID0geHllczsgdGhlbgorICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGhyZWFkcyA9IHh5ZXMgLWEgeCRlbmFibGVfcHRoID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci91bml4LyouYyIKKyAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfTUlOVCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9NSU4sMSwiIlQpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL21pbnQvKi5jIgorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci9taW50LyouUyIKKyAgICAgICAgICAgICBmaQorQEAgLTI4MTEsMjAgKzI4MTEsMjAgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBDaGVja1BUSFJFQUQKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdmlkZW8gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9SSVNDT1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUklTQ09TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vcmlzY29zLyouYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9yaXNjb3MvKi5TIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBqb3lzdGljayBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2pveXN0aWNrID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfUklTQ09TKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfUklTQ09TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvam95c3RpY2svcmlzY29zLyouYyIKKyAgICAgICAgICAgICBoYXZlX2pveXN0aWNrPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGltZXIgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9SSVNDT1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9SSVNDT1MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci9yaXNjb3MvKi5jIgorICAgICAgICAgICAgIGhhdmVfdGltZXJzPXllcworICAgICAgICAgZmkKK0BAIC0yODQ2LDMxICsyODQ2LDMxIEBAIENoZWNrV2FybkFsbAorIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgPSB4eWVzOyB0aGVuCisgICBpZiB0ZXN0IHgkaGF2ZV9qb3lzdGljayAhPSB4eWVzOyB0aGVuCisgICAgICMgV2FudHMgam95c3RpY2sgc3Vic3lzdGVtLCBidXQgZG9lc24ndCBoYXZlIGEgcGxhdGZvcm0tc3BlY2lmaWMgYmFja2VuZC4uLgorLSAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0RVTU1ZKQorKyAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0RVTU1ZLDEsIiIpCisgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2pveXN0aWNrL2R1bW15LyouYyIKKyAgIGZpCisgZmkKKyBpZiB0ZXN0IHgkaGF2ZV9jZHJvbSAhPSB4eWVzOyB0aGVuCisgICAgIGlmIHRlc3QgeCRlbmFibGVfY2Ryb20gPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0RJU0FCTEVEKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9ESVNBQkxFRCwxLCIiKQorICAgICBmaQorICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9kdW1teS8qLmMiCisgZmkKKyBpZiB0ZXN0IHgkaGF2ZV90aHJlYWRzICE9IHh5ZXM7IHRoZW4KKyAgICAgaWYgdGVzdCB4JGVuYWJsZV90aHJlYWRzID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURTX0RJU0FCTEVEKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURTX0RJU0FCTEVELDEsIiIpCisgICAgIGZpCisgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC9nZW5lcmljLyouYyIKKyBmaQorIGlmIHRlc3QgeCRoYXZlX3RpbWVycyAhPSB4eWVzOyB0aGVuCisgICAgIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUlNfRElTQUJMRUQpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSU19ESVNBQkxFRCwxLCIiKQorICAgICBmaQorICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci9kdW1teS8qLmMiCisgZmkKKyBpZiB0ZXN0IHgkaGF2ZV9sb2Fkc28gIT0geHllczsgdGhlbgorICAgICBpZiB0ZXN0IHgkZW5hYmxlX2xvYWRzbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RJU0FCTEVEKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fRElTQUJMRUQsMSwiIikKKyAgICAgZmkKKyAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvbG9hZHNvL2R1bW15LyouYyIKKyBmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbC0xLjIuMTUvbGlic2RsLTEuMi4xNS14ZGF0YTMyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbC0xLjIuMTUvbGlic2RsLTEuMi4xNS14ZGF0YTMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5OGI5MjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9saWJzZGwtMS4yLjE1LXhkYXRhMzIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorbGliWDExLTEuNS45OS45MDEgaGFzIGNoYW5nZWQgcHJvdG90eXBlIG9mIF9YRGF0YTMyCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKzxodHRwOi8vYnVnemlsbGEubGlic2RsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2OT4KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitkaWZmIC1yIGI2YjI4MjljZDdlZiBzcmMvdmlkZW8veDExL1NETF94MTFzeW0uaAorLS0tIGEvc3JjL3ZpZGVvL3gxMS9TRExfeDExc3ltLmgJV2VkIEZlYiAyNyAxNToyMDozMSAyMDEzIC0wODAwCisrKysgYi9zcmMvdmlkZW8veDExL1NETF94MTFzeW0uaAlXZWQgTWFyIDI3IDE2OjA3OjIzIDIwMTMgKzAxMDAKK0BAIC0xNjUsNyArMTY1LDcgQEAKKyAgKi8KKyAjaWZkZWYgTE9ORzY0CisgU0RMX1gxMV9NT0RVTEUoSU9fMzJCSVQpCistU0RMX1gxMV9TWU0oaW50LF9YRGF0YTMyLChEaXNwbGF5ICpkcHkscmVnaXN0ZXIgbG9uZyAqZGF0YSx1bnNpZ25lZCBsZW4pLChkcHksZGF0YSxsZW4pLHJldHVybikKKytTRExfWDExX1NZTShpbnQsX1hEYXRhMzIsKERpc3BsYXkgKmRweSxyZWdpc3RlciBfWGNvbnN0IGxvbmcgKmRhdGEsdW5zaWduZWQgbGVuKSwoZHB5LGRhdGEsbGVuKSxyZXR1cm4pCisgU0RMX1gxMV9TWU0odm9pZCxfWFJlYWQzMiwoRGlzcGxheSAqZHB5LHJlZ2lzdGVyIGxvbmcgKmRhdGEsbG9uZyBsZW4pLChkcHksZGF0YSxsZW4pLCkKKyAjZW5kaWYKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbC0xLjIuMTUvcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbC0xLjIuMTUvcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxM2JhYTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwxODcgQEAKK1JhdGhlciB0aGFuIGNvZGUgd2hpY2ggZG9lc24ndCBldmVuIHdvcmsgcHJvcGVybHkgd2hlbiBjcm9zcyBjb21waWxpbmcsCitsZXRzIGp1c3QgdXNlIHBrZy1jb25maWcgaW5zdGVhZC4gSXRzIGEgbGl0dGxlIHNpbXBsZXIuCisKK1JQIDIwMTQvNi8yMAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IFNETC0xLjIuMTUvc2RsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gU0RMLTEuMi4xNS5vcmlnL3NkbC5tNAorKysrIFNETC0xLjIuMTUvc2RsLm00CitAQCAtMTIsMTc0ICsxMiw4IEBAIGRubCBUZXN0IGZvciBTREwsIGFuZCBkZWZpbmUgU0RMX0NGTEFHUworIGRubAorIEFDX0RFRlVOKFtBTV9QQVRIX1NETF0sCisgW2RubCAKKy1kbmwgR2V0IHRoZSBjZmxhZ3MgYW5kIGxpYnJhcmllcyBmcm9tIHRoZSBzZGwtY29uZmlnIHNjcmlwdAorLWRubAorLUFDX0FSR19XSVRIKHNkbC1wcmVmaXgsWyAgLS13aXRoLXNkbC1wcmVmaXg9UEZYICAgUHJlZml4IHdoZXJlIFNETCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCistICAgICAgICAgICAgc2RsX3ByZWZpeD0iJHdpdGh2YWwiLCBzZGxfcHJlZml4PSIiKQorLUFDX0FSR19XSVRIKHNkbC1leGVjLXByZWZpeCxbICAtLXdpdGgtc2RsLWV4ZWMtcHJlZml4PVBGWCBFeGVjIHByZWZpeCB3aGVyZSBTREwgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorLSAgICAgICAgICAgIHNkbF9leGVjX3ByZWZpeD0iJHdpdGh2YWwiLCBzZGxfZXhlY19wcmVmaXg9IiIpCistQUNfQVJHX0VOQUJMRShzZGx0ZXN0LCBbICAtLWRpc2FibGUtc2RsdGVzdCAgICAgICBEbyBub3QgdHJ5IHRvIGNvbXBpbGUgYW5kIHJ1biBhIHRlc3QgU0RMIHByb2dyYW1dLAorLQkJICAgICwgZW5hYmxlX3NkbHRlc3Q9eWVzKQorLQorLSAgaWYgdGVzdCB4JHNkbF9leGVjX3ByZWZpeCAhPSB4IDsgdGhlbgorLSAgICBzZGxfY29uZmlnX2FyZ3M9IiRzZGxfY29uZmlnX2FyZ3MgLS1leGVjLXByZWZpeD0kc2RsX2V4ZWNfcHJlZml4IgorLSAgICBpZiB0ZXN0IHgke1NETF9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorLSAgICAgIFNETF9DT05GSUc9JHNkbF9leGVjX3ByZWZpeC9iaW4vc2RsLWNvbmZpZworLSAgICBmaQorLSAgZmkKKy0gIGlmIHRlc3QgeCRzZGxfcHJlZml4ICE9IHggOyB0aGVuCistICAgIHNkbF9jb25maWdfYXJncz0iJHNkbF9jb25maWdfYXJncyAtLXByZWZpeD0kc2RsX3ByZWZpeCIKKy0gICAgaWYgdGVzdCB4JHtTRExfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKy0gICAgICBTRExfQ09ORklHPSRzZGxfcHJlZml4L2Jpbi9zZGwtY29uZmlnCistICAgIGZpCistICBmaQorLQorLSAgYXNfc2F2ZV9QQVRIPSIkUEFUSCIKKy0gIGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorLSAgICBQQVRIPSIkcHJlZml4L2JpbjokcHJlZml4L3Vzci9iaW46JFBBVEgiCistICBmaQorLSAgQUNfUEFUSF9QUk9HKFNETF9DT05GSUcsIHNkbC1jb25maWcsIG5vLCBbJFBBVEhdKQorLSAgUEFUSD0iJGFzX3NhdmVfUEFUSCIKKyAgIG1pbl9zZGxfdmVyc2lvbj1pZmVsc2UoWyQxXSwgLDAuMTEuMCwkMSkKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgU0RMIC0gdmVyc2lvbiA+PSAkbWluX3NkbF92ZXJzaW9uKQorLSAgbm9fc2RsPSIiCistICBpZiB0ZXN0ICIkU0RMX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorLSAgICBub19zZGw9eWVzCistICBlbHNlCistICAgIFNETF9DRkxBR1M9YCRTRExfQ09ORklHICRzZGxfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCistICAgIFNETF9MSUJTPWAkU0RMX0NPTkZJRyAkc2RsX2NvbmZpZ19hcmdzIC0tbGlic2AKKy0KKy0gICAgc2RsX21ham9yX3ZlcnNpb249YCRTRExfQ09ORklHICRzZGxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wxLydgCistICAgIHNkbF9taW5vcl92ZXJzaW9uPWAkU0RMX0NPTkZJRyAkc2RsX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKy0gICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICBzZGxfbWljcm9fdmVyc2lvbj1gJFNETF9DT05GSUcgJHNkbF9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCistICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAgaWYgdGVzdCAieCRlbmFibGVfc2RsdGVzdCIgPSAieHllcyIgOyB0aGVuCistICAgICAgYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCistICAgICAgYWNfc2F2ZV9DWFhGTEFHUz0iJENYWEZMQUdTIgorLSAgICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCistICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRTRExfQ0ZMQUdTIgorLSAgICAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgJFNETF9DRkxBR1MiCistICAgICAgTElCUz0iJExJQlMgJFNETF9MSUJTIgorLWRubAorLWRubCBOb3cgY2hlY2sgaWYgdGhlIGluc3RhbGxlZCBTREwgaXMgc3VmZmljaWVudGx5IG5ldy4gKEFsc28gc2FuaXR5CistZG5sIGNoZWNrcyB0aGUgcmVzdWx0cyBvZiBzZGwtY29uZmlnIHRvIHNvbWUgZXh0ZW50CistZG5sCistICAgICAgcm0gLWYgY29uZi5zZGx0ZXN0CistICAgICAgQUNfVFJZX1JVTihbCistI2luY2x1ZGUgPHN0ZGlvLmg+CistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxzdHJpbmcuaD4KKy0jaW5jbHVkZSAiU0RMLmgiCistCistY2hhcioKKy1teV9zdHJkdXAgKGNoYXIgKnN0cikKKy17CistICBjaGFyICpuZXdfc3RyOworLSAgCistICBpZiAoc3RyKQorLSAgICB7CistICAgICAgbmV3X3N0ciA9IChjaGFyICopbWFsbG9jICgoc3RybGVuIChzdHIpICsgMSkgKiBzaXplb2YoY2hhcikpOworLSAgICAgIHN0cmNweSAobmV3X3N0ciwgc3RyKTsKKy0gICAgfQorLSAgZWxzZQorLSAgICBuZXdfc3RyID0gTlVMTDsKKy0gIAorLSAgcmV0dXJuIG5ld19zdHI7CistfQorLQorLWludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorLXsKKy0gIGludCBtYWpvciwgbWlub3IsIG1pY3JvOworLSAgY2hhciAqdG1wX3ZlcnNpb247CistCistICAvKiBUaGlzIGhhbmdzIG9uIHNvbWUgc3lzdGVtcyAoPykKKy0gIHN5c3RlbSAoInRvdWNoIGNvbmYuc2RsdGVzdCIpOworLSAgKi8KKy0gIHsgRklMRSAqZnAgPSBmb3BlbigiY29uZi5zZGx0ZXN0IiwgImEiKTsgaWYgKCBmcCApIGZjbG9zZShmcCk7IH0KKy0KKy0gIC8qIEhQL1VYIDkgKCVAIyEpIHdyaXRlcyB0byBzc2NhbmYgc3RyaW5ncyAqLworLSAgdG1wX3ZlcnNpb24gPSBteV9zdHJkdXAoIiRtaW5fc2RsX3ZlcnNpb24iKTsKKy0gIGlmIChzc2NhbmYodG1wX3ZlcnNpb24sICIlZC4lZC4lZCIsICZtYWpvciwgJm1pbm9yLCAmbWljcm8pICE9IDMpIHsKKy0gICAgIHByaW50ZigiJXMsIGJhZCB2ZXJzaW9uIHN0cmluZ1xuIiwgIiRtaW5fc2RsX3ZlcnNpb24iKTsKKy0gICAgIGV4aXQoMSk7CistICAgfQorLQorLSAgIGlmICgoJHNkbF9tYWpvcl92ZXJzaW9uID4gbWFqb3IpIHx8CistICAgICAgKCgkc2RsX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmICgkc2RsX21pbm9yX3ZlcnNpb24gPiBtaW5vcikpIHx8CistICAgICAgKCgkc2RsX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmICgkc2RsX21pbm9yX3ZlcnNpb24gPT0gbWlub3IpICYmICgkc2RsX21pY3JvX3ZlcnNpb24gPj0gbWljcm8pKSkKKy0gICAgeworLSAgICAgIHJldHVybiAwOworLSAgICB9CistICBlbHNlCistICAgIHsKKy0gICAgICBwcmludGYoIlxuKioqICdzZGwtY29uZmlnIC0tdmVyc2lvbicgcmV0dXJuZWQgJWQuJWQuJWQsIGJ1dCB0aGUgbWluaW11bSB2ZXJzaW9uXG4iLCAkc2RsX21ham9yX3ZlcnNpb24sICRzZGxfbWlub3JfdmVyc2lvbiwgJHNkbF9taWNyb192ZXJzaW9uKTsKKy0gICAgICBwcmludGYoIioqKiBvZiBTREwgcmVxdWlyZWQgaXMgJWQuJWQuJWQuIElmIHNkbC1jb25maWcgaXMgY29ycmVjdCwgdGhlbiBpdCBpc1xuIiwgbWFqb3IsIG1pbm9yLCBtaWNybyk7CistICAgICAgcHJpbnRmKCIqKiogYmVzdCB0byB1cGdyYWRlIHRvIHRoZSByZXF1aXJlZCB2ZXJzaW9uLlxuIik7CistICAgICAgcHJpbnRmKCIqKiogSWYgc2RsLWNvbmZpZyB3YXMgd3JvbmcsIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgU0RMX0NPTkZJR1xuIik7CistICAgICAgcHJpbnRmKCIqKiogdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgY29weSBvZiBzZGwtY29uZmlnLCBhbmQgcmVtb3ZlIHRoZSBmaWxlXG4iKTsKKy0gICAgICBwcmludGYoIioqKiBjb25maWcuY2FjaGUgYmVmb3JlIHJlLXJ1bm5pbmcgY29uZmlndXJlXG4iKTsKKy0gICAgICByZXR1cm4gMTsKKy0gICAgfQorLX0KKy0KKy1dLCwgbm9fc2RsPXllcyxbZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIl0pCistICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorLSAgICAgICBDWFhGTEFHUz0iJGFjX3NhdmVfQ1hYRkxBR1MiCistICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCistICAgICBmaQorLSAgZmkKKy0gIGlmIHRlc3QgIngkbm9fc2RsIiA9IHggOyB0aGVuCistICAgICBBQ19NU0dfUkVTVUxUKHllcykKKy0gICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pICAgICAKKy0gIGVsc2UKKy0gICAgIEFDX01TR19SRVNVTFQobm8pCistICAgICBpZiB0ZXN0ICIkU0RMX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorLSAgICAgICBlY2hvICIqKiogVGhlIHNkbC1jb25maWcgc2NyaXB0IGluc3RhbGxlZCBieSBTREwgY291bGQgbm90IGJlIGZvdW5kIgorLSAgICAgICBlY2hvICIqKiogSWYgU0RMIHdhcyBpbnN0YWxsZWQgaW4gUFJFRklYLCBtYWtlIHN1cmUgUFJFRklYL2JpbiBpcyBpbiIKKy0gICAgICAgZWNobyAiKioqIHlvdXIgcGF0aCwgb3Igc2V0IHRoZSBTRExfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSIKKy0gICAgICAgZWNobyAiKioqIGZ1bGwgcGF0aCB0byBzZGwtY29uZmlnLiIKKy0gICAgIGVsc2UKKy0gICAgICAgaWYgdGVzdCAtZiBjb25mLnNkbHRlc3QgOyB0aGVuCistICAgICAgICA6CistICAgICAgIGVsc2UKKy0gICAgICAgICAgZWNobyAiKioqIENvdWxkIG5vdCBydW4gU0RMIHRlc3QgcHJvZ3JhbSwgY2hlY2tpbmcgd2h5Li4uIgorLSAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFNETF9DRkxBR1MiCistICAgICAgICAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgJFNETF9DRkxBR1MiCistICAgICAgICAgIExJQlM9IiRMSUJTICRTRExfTElCUyIKKy0gICAgICAgICAgQUNfVFJZX0xJTksoWworLSNpbmNsdWRlIDxzdGRpby5oPgorLSNpbmNsdWRlICJTREwuaCIKKy0KKy1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorLXsgcmV0dXJuIDA7IH0KKy0jdW5kZWYgIG1haW4KKy0jZGVmaW5lIG1haW4gS19hbmRfUl9DX21haW4KKy1dLCAgICAgIFsgcmV0dXJuIDA7IF0sCistICAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGNvbXBpbGVkLCBidXQgZGlkIG5vdCBydW4uIFRoaXMgdXN1YWxseSBtZWFucyIKKy0gICAgICAgICAgZWNobyAiKioqIHRoYXQgdGhlIHJ1bi10aW1lIGxpbmtlciBpcyBub3QgZmluZGluZyBTREwgb3IgZmluZGluZyB0aGUgd3JvbmciCistICAgICAgICAgIGVjaG8gIioqKiB2ZXJzaW9uIG9mIFNETC4gSWYgaXQgaXMgbm90IGZpbmRpbmcgU0RMLCB5b3UnbGwgbmVlZCB0byBzZXQgeW91ciIKKy0gICAgICAgICAgZWNobyAiKioqIExEX0xJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmYgdG8gcG9pbnQiCistICAgICAgICAgIGVjaG8gIioqKiB0byB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uICBBbHNvLCBtYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQiCistICAgICAgICAgIGVjaG8gIioqKiBpcyByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbSIKKy0JICBlY2hvICIqKioiCistICAgICAgICAgIGVjaG8gIioqKiBJZiB5b3UgaGF2ZSBhbiBvbGQgdmVyc2lvbiBpbnN0YWxsZWQsIGl0IGlzIGJlc3QgdG8gcmVtb3ZlIGl0LCBhbHRob3VnaCIKKy0gICAgICAgICAgZWNobyAiKioqIHlvdSBtYXkgYWxzbyBiZSBhYmxlIHRvIGdldCB0aGluZ3MgdG8gd29yayBieSBtb2RpZnlpbmcgTERfTElCUkFSWV9QQVRIIl0sCistICAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGZhaWxlZCB0byBjb21waWxlIG9yIGxpbmsuIFNlZSB0aGUgZmlsZSBjb25maWcubG9nIGZvciB0aGUiCistICAgICAgICAgIGVjaG8gIioqKiBleGFjdCBlcnJvciB0aGF0IG9jY3VyZWQuIFRoaXMgdXN1YWxseSBtZWFucyBTREwgd2FzIGluY29ycmVjdGx5IGluc3RhbGxlZCIKKy0gICAgICAgICAgZWNobyAiKioqIG9yIHRoYXQgeW91IGhhdmUgbW92ZWQgU0RMIHNpbmNlIGl0IHdhcyBpbnN0YWxsZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgeW91IgorLSAgICAgICAgICBlY2hvICIqKiogbWF5IHdhbnQgdG8gZWRpdCB0aGUgc2RsLWNvbmZpZyBzY3JpcHQ6ICRTRExfQ09ORklHIiBdKQorLSAgICAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKy0gICAgICAgICAgQ1hYRkxBR1M9IiRhY19zYXZlX0NYWEZMQUdTIgorLSAgICAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorLSAgICAgICBmaQorLSAgICAgZmkKKy0gICAgIFNETF9DRkxBR1M9IiIKKy0gICAgIFNETF9MSUJTPSIiCistICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKFtTRExdLCBbc2RsID49ICRtaW5fc2RsX3ZlcnNpb25dKQorICAgQUNfU1VCU1QoU0RMX0NGTEFHUykKKyAgIEFDX1NVQlNUKFNETF9MSUJTKQorLSAgcm0gLWYgY29uZi5zZGx0ZXN0CisgXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGxfMS4yLjE1LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbF8xLjIuMTUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY2YmQ0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGxfMS4yLjE1LmJiCkBAIC0wLDAgKzEsNjcgQEAKK1NVTU1BUlkgPSAiU2ltcGxlIERpcmVjdE1lZGlhIExheWVyIgorREVTQ1JJUFRJT04gPSAiU2ltcGxlIERpcmVjdE1lZGlhIExheWVyIGlzIGEgY3Jvc3MtcGxhdGZvcm0gbXVsdGltZWRpYSBcCitsaWJyYXJ5IGRlc2lnbmVkIHRvIHByb3ZpZGUgbG93IGxldmVsIGFjY2VzcyB0byBhdWRpbywga2V5Ym9hcmQsIG1vdXNlLCBcCitqb3lzdGljaywgM0QgaGFyZHdhcmUgdmlhIE9wZW5HTCwgYW5kIDJEIHZpZGVvIGZyYW1lYnVmZmVyLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGlic2RsLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLmxpYnNkbC5vcmcvIgorCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNzgxOGNkN2ZkODM4NzdhOGUzZWY4MmI4Mjc5OGVmNCIKKworUFJPVklERVMgPSAidmlydHVhbC9saWJzZGwiCisKK0RFUEVORFMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdkaXJlY3RmYicsICdkaXJlY3RmYicsICcnLCBkKX0gXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICd2aXJ0dWFsL2xpYmdsIGxpYmdsdScsICcnLCBkKX0gXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGxpYnhyYW5kciBsaWJ4cmVuZGVyJywgJycsIGQpfSBcCisgICAgICAgICAgIHRzbGliIgorREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAndmlydHVhbC9uYXRpdmVzZGstbGlieDExIG5hdGl2ZXNkay1saWJ4cmFuZHIgbmF0aXZlc2RrLWxpYnhyZW5kZXIgbmF0aXZlc2RrLWxpYnhleHQnLCAnJywgZCl9IgorCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmxpYnNkbC5vcmcvcmVsZWFzZS9TREwtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZV90d2Vhay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJzZGwtMS4yLjE1LXhkYXRhMzIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9TREwtJHtQVn0iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5ZDk2ZGY4NDE3NTcyYTJhZmI3ODFhN2M0YzgxMWE4NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkNmQzMTZhNzkzZTVlMzQ4MTU1ZjBkZDkzYjk3OTc5ODkzM2ZiOThhYTFlZGViY2MxMDg4MjlkNjQ3NGFhZDAwIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L3NkbC1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1zdGF0aWMgLS1lbmFibGUtY2Ryb20gLS1lbmFibGUtdGhyZWFkcyAtLWVuYWJsZS10aW1lcnMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWZpbGUgLS1kaXNhYmxlLW9zcyAtLWRpc2FibGUtZXNkIC0tZGlzYWJsZS1hcnRzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtZGlza2F1ZGlvIC0tZGlzYWJsZS1uYXMgLS1kaXNhYmxlLWVzZC1zaGFyZWQgLS1kaXNhYmxlLWVzZHRlc3QgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1taW50YXVkaW8gLS1kaXNhYmxlLW5hc20gLS1kaXNhYmxlLXZpZGVvLWRnYSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZpZGVvLWZiY29uIC0tZGlzYWJsZS12aWRlby1wczJncyAtLWRpc2FibGUtdmlkZW8tcHMzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUteGJpb3MgLS1kaXNhYmxlLWdlbSAtLWRpc2FibGUtdmlkZW8tZHVtbXkgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWlucHV0LWV2ZW50cyAtLWVuYWJsZS1pbnB1dC10c2xpYiAtLWVuYWJsZS1wdGhyZWFkcyBcCisgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdkaXJlY3RmYicsICctLWVuYWJsZS12aWRlby1kaXJlY3RmYicsICctLWRpc2FibGUtdmlkZW8tZGlyZWN0ZmInLCBkKX0gXAorICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJy0tZW5hYmxlLXZpZGVvLW9wZW5nbCcsICctLWRpc2FibGUtdmlkZW8tb3BlbmdsJywgZCl9IFwKKyAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICctLWVuYWJsZS12aWRlby14MTEnLCAnLS1kaXNhYmxlLXZpZGVvLXgxMScsIGQpfSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZpZGVvLXN2Z2EgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS12aWRlby1waWNvZ3VpIC0tZGlzYWJsZS12aWRlby1xdG9waWEgLS1lbmFibGUtc2RsLWRsb3BlbiBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJwYXRoIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtcHVsc2VhdWRpbyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWxzYScsICdhbHNhJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbYWxzYV0gPSAiLS1lbmFibGUtYWxzYSAtLWRpc2FibGUtYWxzYXRlc3QsLS1kaXNhYmxlLWFsc2EsYWxzYS1saWIsIgorCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWluY2x1ZGU9YWNpbmNsdWRlIC0tZXhjbHVkZT1hdXRvaGVhZGVyIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAgICAgIyBSZW1vdmUgb2xkIGxpYnRvb2wgbWFjcm9zLgorICAgICAgICBNQUNST1M9ImxpYnRvb2wubTQgbHR+b2Jzb2xldGUubTQgbHRvcHRpb25zLm00IGx0c3VnYXIubTQgbHR2ZXJzaW9uLm00IgorICAgICAgICBmb3IgaSBpbiAke01BQ1JPU307IGRvCisgICAgICAgICAgICAgICBybSAtZiAke1N9L2FjaW5jbHVkZS8kaQorICAgICAgICBkb25lCisgICAgICAgIGV4cG9ydCBTWVNST09UPSRQS0dfQ09ORklHX1NZU1JPT1RfRElSCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsMi9saWJzZGwyXzIuMC4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsMi9saWJzZGwyXzIuMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZjY0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwyL2xpYnNkbDJfMi4wLjMuYmIKQEAgLTAsMCArMSw2MyBAQAorU1VNTUFSWSA9ICJTaW1wbGUgRGlyZWN0TWVkaWEgTGF5ZXIiCitERVNDUklQVElPTiA9ICJTaW1wbGUgRGlyZWN0TWVkaWEgTGF5ZXIgaXMgYSBjcm9zcy1wbGF0Zm9ybSBtdWx0aW1lZGlhIFwKK2xpYnJhcnkgZGVzaWduZWQgdG8gcHJvdmlkZSBsb3cgbGV2ZWwgYWNjZXNzIHRvIGF1ZGlvLCBrZXlib2FyZCwgbW91c2UsIFwKK2pveXN0aWNrLCAzRCBoYXJkd2FyZSB2aWEgT3BlbkdMLCBhbmQgMkQgdmlkZW8gZnJhbWVidWZmZXIuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saWJzZGwub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEubGlic2RsLm9yZy8iCisKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJabGliIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy50eHQ7bWQ1PTY3ZGNiN2ZhZTE2OTUyNTU3YmM1Zjk2ZTllYjVkMTg4IgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYnNkbDIiCisKK0RFUEVORFNfY2xhc3MtbmF0aXZlc2RrID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3ZpcnR1YWwvbmF0aXZlc2RrLWxpYngxMSBuYXRpdmVzZGstbGlieHJhbmRyIG5hdGl2ZXNkay1saWJ4cmVuZGVyIG5hdGl2ZXNkay1saWJ4ZXh0JywgJycsIGQpfSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmxpYnNkbC5vcmcvcmVsZWFzZS9TREwyLSR7UFZ9LnRhci5neiIKKworUyA9ICIke1dPUktESVJ9L1NETDItJHtQVn0iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZTZjNjFkMmU5ZGY5ZWY1NzBlN2U4MGM2ZTgyMjUzNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhNWE2OWE2YWJmODBiY2NlNzEzZmE4NzM2MDc3MzVmZTcxMmY0NDI3NmE3ZjA0OGQ2MGE2MWJiMmY2YjNjOTBjIgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBiaW5jb25maWcgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtb3NzIC0tZGlzYWJsZS1lc2QgLS1kaXNhYmxlLWFydHMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kaXNrYXVkaW8gLS1kaXNhYmxlLW5hcyAtLWRpc2FibGUtZXNkLXNoYXJlZCAtLWRpc2FibGUtZXNkdGVzdCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZpZGVvLWR1bW15IFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1wdGhyZWFkcyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtc2RsLWRsb3BlbiBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJwYXRoIgorCisjIG9wZW5nbCBwYWNrYWdlY29uZmlnIGZhY3RvcmVkIG91dCB0byBtYWtlIGl0IGVhc3kgZm9yIGRpc3Ryb3MKKyMgYW5kIEJTUCBsYXllcnMgdG8gcGljayBlaXRoZXIgKGRlc2t0b3ApIG9wZW5nbCwgZ2xlczIsIG9yIG5vIEdMCitQQUNLQUdFQ09ORklHX0dMID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdvcGVuZ2wnLCAnJywgZCl9IgorCitQQUNLQUdFQ09ORklHID8/PSAiIFwKKyAgICAke1BBQ0tBR0VDT05GSUdfR0x9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2Fsc2EnLCAnYWxzYScsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnZGlyZWN0ZmInLCAnZGlyZWN0ZmInLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B1bHNlYXVkaW8nLCAncHVsc2VhdWRpbycsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICd3YXlsYW5kJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSBcCisiCitQQUNLQUdFQ09ORklHW2Fsc2FdICAgICAgID0gIi0tZW5hYmxlLWFsc2EgLS1kaXNhYmxlLWFsc2F0ZXN0LC0tZGlzYWJsZS1hbHNhLGFsc2EtbGliLCIKK1BBQ0tBR0VDT05GSUdbZGlyZWN0ZmJdICAgPSAiLS1lbmFibGUtdmlkZW8tZGlyZWN0ZmIgLS1kaXNhYmxlLXZpZGVvLWRpcmVjdGZiLGRpcmVjdGZiIgorUEFDS0FHRUNPTkZJR1tnbGVzMl0gICAgICA9ICItLWVuYWJsZS12aWRlby1vcGVuZ2xlcywtLWRpc2FibGUtdmlkZW8tb3BlbmdsZXMsdmlydHVhbC9saWJnbGVzMiIKK1BBQ0tBR0VDT05GSUdbb3BlbmdsXSAgICAgPSAiLS1lbmFibGUtdmlkZW8tb3BlbmdsLC0tZGlzYWJsZS12aWRlby1vcGVuZ2wsdmlydHVhbC9saWJnbCIKK1BBQ0tBR0VDT05GSUdbcHVsc2VhdWRpb10gPSAiLS1lbmFibGUtcHVsc2VhdWRpbywtLWRpc2FibGUtcHVsc2VhdWRpbyxwdWxzZWF1ZGlvIgorUEFDS0FHRUNPTkZJR1t0c2xpYl0gICAgICA9ICItLWVuYWJsZS1pbnB1dC10c2xpYiwtLWRpc2FibGUtaW5wdXQtdHNsaWIsdHNsaWIiCitQQUNLQUdFQ09ORklHW3dheWxhbmRdICAgID0gIi0tZW5hYmxlLXZpZGVvLXdheWxhbmQsLS1kaXNhYmxlLXZpZGVvLXdheWxhbmQsd2F5bGFuZCIKK1BBQ0tBR0VDT05GSUdbeDExXSAgICAgICAgPSAiLS1lbmFibGUtdmlkZW8teDExLC0tZGlzYWJsZS12aWRlby14MTEsdmlydHVhbC9saWJ4MTEgbGlieGV4dCBsaWJ4cmFuZHIgbGlieHJlbmRlciIKKworRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1pbmNsdWRlPWFjaW5jbHVkZSAtLWV4Y2x1ZGU9YXV0b2hlYWRlciIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgICAgICMgUmVtb3ZlIG9sZCBsaWJ0b29sIG1hY3Jvcy4KKyAgICAgICAgTUFDUk9TPSJsaWJ0b29sLm00IGx0fm9ic29sZXRlLm00IGx0b3B0aW9ucy5tNCBsdHN1Z2FyLm00IGx0dmVyc2lvbi5tNCIKKyAgICAgICAgZm9yIGkgaW4gJHtNQUNST1N9OyBkbworICAgICAgICAgICAgICAgcm0gLWYgJHtTfS9hY2luY2x1ZGUvJGkKKyAgICAgICAgZG9uZQorICAgICAgICBleHBvcnQgU1lTUk9PVD0kUEtHX0NPTkZJR19TWVNST09UX0RJUgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L01JVC1zdHlsZS1saWNlbnNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L01JVC1zdHlsZS1saWNlbnNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOGRlOTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvTUlULXN0eWxlLWxpY2Vuc2UKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDAxIFJlZCBIYXQsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIFJlZCBIYXQgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKKyAqIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIFJlZCBIYXQgbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZQorICogc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKiBSRUQgSEFUIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTCBSRUQgSEFUCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcjogIE93ZW4gVGF5bG9yLCBSZWQgSGF0LCBJbmMuCisgKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9kaXNhYmxlX09zX29wdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9kaXNhYmxlX09zX29wdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGI3ZWZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L2Rpc2FibGVfT3Nfb3B0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworRG8gbm90IHNldCBPcyBvcHRpbWl6YXRpb24gaW4gdGFyZ2V0IEFQUCBDRkxBR1MsIHNpbmNlIGl0IG1heSBoYXZlIHBvdGVudGlhbAorZXJyb3IgaWYgIi0tZW5hYmxlLXRhcmdldC1vcHRzcGFjZSIgaXMgbm90IHNldCB3aGVuIGNvbmZpZ3VyaW5nIEdDQy4KKworU2lnbmVkLW9mZi1ieTogRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworZGlmZiAtcnVOIFhzZXR0aW5ncy1jbGllbnQtMC4xMC1vcmlnL2NvbmZpZ3VyZS5hYyBYc2V0dGluZ3MtY2xpZW50LTAuMTAvY29uZmlndXJlLmFjCistLS0gWHNldHRpbmdzLWNsaWVudC0wLjEwLW9yaWcvY29uZmlndXJlLmFjCTIwMTAtMDktMjEgMTQ6MDE6NDcuMDAwMDAwMDAwICswODAwCisrKysgWHNldHRpbmdzLWNsaWVudC0wLjEwL2NvbmZpZ3VyZS5hYwkyMDEwLTA5LTIxIDE0OjAyOjAxLjAwMDAwMDAwMCArMDgwMAorQEAgLTMsNyArMyw3IEBACisgQU1fSU5JVF9BVVRPTUFLRShYc2V0dGluZ3MtY2xpZW50LCAwLjEwKQorIEFNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisgCistQ0ZMQUdTPSItT3MgLVdhbGwiCisrQ0ZMQUdTPSItTzIgLVdhbGwiCisgCisgIyBDaGVja3MgZm9yIHByb2dyYW1zLgorIEFDX1BST0dfQ0MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9saW5rLXgxMS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9saW5rLXgxMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDhkMGQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L2xpbmsteDExLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IFhzZXR0aW5ncy1jbGllbnQtMC4xMC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFhzZXR0aW5ncy1jbGllbnQtMC4xMC5vcmlnL01ha2VmaWxlLmFtCTIwMDgtMDItMDcgMTQ6NDk6NTQuMDAwMDAwMDAwICswMDAwCisrKysgWHNldHRpbmdzLWNsaWVudC0wLjEwL01ha2VmaWxlLmFtCTIwMDgtMDItMDcgMTQ6NTA6MDAuMDAwMDAwMDAwICswMDAwCitAQCAtOSw0ICs5LDQgQEAKKyAKKyBsaWJYc2V0dGluZ3NfY2xpZW50X2xhX1NPVVJDRVM9ICQoc291cmNlX2MpICQoc291cmNlX2gpCisgCistbGliWHNldHRpbmdzX2NsaWVudF9sYV9MSUJBREQgICAgICA9IEBYX0xJQlNACitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKytsaWJYc2V0dGluZ3NfY2xpZW50X2xhX0xJQkFERCAgICAgID0gQFhfTElCU0AgLWxYMTEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNWQwOGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBYc2V0dGluZ3MtY2xpZW50LTAuMTAvY29uZmlndXJlLmFjIFhzZXR0aW5ncy1jbGllbnQtMC4xMC9jb25maWd1cmUuYWMKKy0tLSBYc2V0dGluZ3MtY2xpZW50LTAuMTAvY29uZmlndXJlLmFjCTIwMDMtMDMtMjggMTI6Mzk6NTEuMDAwMDAwMDAwICswMjAwCisrKysgWHNldHRpbmdzLWNsaWVudC0wLjEwL2NvbmZpZ3VyZS5hYwkyMDEzLTAxLTExIDA3OjM3OjIxLjQ5MTU5Nzc0MyArMDIwMAorQEAgLTEsNyArMSw3IEBACisgIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorIEFDX0lOSVQoeHNldHRpbmdzLWNsaWVudC5jKQorIEFNX0lOSVRfQVVUT01BS0UoWHNldHRpbmdzLWNsaWVudCwgMC4xMCkKKy1BTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorK0FDX0NPTkZJR19IRUFERVJTKGNvbmZpZy5oKQorCisgQ0ZMQUdTPSItT3MgLVdhbGwiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnRfMC4xMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudF8wLjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MGQ5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnRfMC4xMC5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gInV0aWxpdHkgZnVuY3Rpb25zIGZvciB0aGUgWHNldHRpbmdzIHByb3RvY29sIgorREVTQ1JJUFRJT04gPSAiTGlicmFyaWVzIHVzZWQgZm9yIGFwcGxpY2F0aW9ucyBtYWtpbmcgdXNlIG9mIHRoZSBYc2V0dGluZ3MgY29uZmlndXJhdGlvbiBcCitzZXR0aW5nIHByb3BhZ2F0aW9uIHByb3RvY29sLiBDb250cm9scyBzZXR0aW5nIG9mIGRvdWJsZSBjbGljayB0aW1lb3V0LCBkcmFnLWFuZC1kcm9wIFwKK3RocmVzaG9sZCwgYW5kIGRlZmF1bHQgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvcnMgZm9yIGFsbCBhcHBsaWNhdGlvbnMgcnVubmluZyB3aXRoaW4gYSBcCitkZXNrdG9wLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZy9zb3VyY2VzL29wdGlvbmFsLWRlcGVuZGVuY2llcy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKK1NFQ1RJT04gPSAieC9saWJzIgorTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03Y2ZhYzlkMmQ0ZGMzNjk0Y2M3ZWI2MDVjZjMyYTY5YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94c2V0dGluZ3MtY2xpZW50Lmg7ZW5kbGluZT0yMjttZDU9N2NmYWM5ZDJkNGRjMzY5NGNjN2ViNjA1Y2YzMmE2OWIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veHNldHRpbmdzLWNvbW1vbi5oO2VuZGxpbmU9MjI7bWQ1PTdjZmFjOWQyZDRkYzM2OTRjYzdlYjYwNWNmMzJhNjliIgorREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSIKKworUFIgPSAicjUiCisKK2hlYWRlcnMgPSAieHNldHRpbmdzLWNvbW1vbi5oIHhzZXR0aW5ncy1jbGllbnQuaCIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvbWF0Y2hib3gvb3B0aW9uYWwtZGVwZW5kZW5jaWVzL1hzZXR0aW5ncy1jbGllbnQtMC4xMC50YXIuZ3ogXAorICAgICAgICBmaWxlOi8vTUlULXN0eWxlLWxpY2Vuc2UgXAorICAgICAgICBmaWxlOi8vbGluay14MTEucGF0Y2g7YXBwbHk9eWVzIFwKKyAgICAgICAgZmlsZTovL2Rpc2FibGVfT3Nfb3B0aW9uLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjMTRhYTlkYjZjMDk3ZTAzMDZkYWM5N2ZiN2RhMWFkZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmMjc0YTRiYzk2OWFlMTkyOTk0YTg1NmI3Zjc4NmM2ZmNlOTZiYWU3N2Y5NmMxYzJiNzFkZDk3NTk5ZTA2ZTQzIgorCitTID0gIiR7V09SS0RJUn0vWHNldHRpbmdzLWNsaWVudC0wLjEwIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAjIFRoaXMgcGFja2FnZSBkb2Vzbid0IHNoaXAgd2l0aCBpdHMgb3duIENPUFlJTkcgZmlsZSBhbmQKKyAgICAjIGF1dG90b29scyB3aWxsIGluc3RhbGwgYSBHUEx2MiBvbmUgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIE1JVC1zdHlsZSBsaWNlbnNlIGhlcmUuCisgICAgIyBBZGQgdGhlIGNvcnJlY3QgbGljZW5zZSBoZXJlIHRvIGF2b2lkIGNvbmZ1c2lvbi4KKyAgICBjcCAtZiAke1dPUktESVJ9L01JVC1zdHlsZS1saWNlbnNlICR7U30vQ09QWUlORworfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC1zZXNzaW9uL21hdGNoYm94LXNlc3Npb24vbWF0Y2hib3gtc2Vzc2lvbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXNlc3Npb24vbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNmNhYTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC1zZXNzaW9uL21hdGNoYm94LXNlc3Npb24vbWF0Y2hib3gtc2Vzc2lvbgpAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKyMKKyMgVmVyeSBzaW1wbGUgc2Vzc2lvbiBtYW5hZ2VyIGZvciBtYXRjaGJveCB0b29scworIworCisjIFVuY29tbWVudCBiZWxvdyB0byBlbmFibGUgcGFyc2luZyBvZiBkZWJpYW4gbWVudSBlbnRyeXMKKyMgZXhwb3J0IE1CX1VTRV9ERUJfTUVOVVM9MSAKKworaWYgWyAtZSAkSE9NRS8ubWF0Y2hib3gvc2Vzc2lvbiBdCit0aGVuCitleGVjICRIT01FLy5tYXRjaGJveC9zZXNzaW9uCitmaQorCitpZiBbIC1lIC9ldGMvbWF0Y2hib3gvc2Vzc2lvbiBdCit0aGVuCitleGVjIC9ldGMvbWF0Y2hib3gvc2Vzc2lvbgorZmkKKworIyBEZWZhdWx0IGZpbGVzIHRvIHJ1biBpZiAkSE9NRS8ubWF0Y2hib3gvc2Vzc2lvbiBvciAvZXRjL21hdGNoYm94L3Nlc3Npb24KKyMgZG9udCBleGlzdC4gCisKK21hdGNoYm94LWRlc2t0b3AgJgorbWF0Y2hib3gtcGFuZWwgJgorZXhlYyBtYXRjaGJveC13aW5kb3ctbWFuYWdlciAkQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uXzAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXNlc3Npb24vbWF0Y2hib3gtc2Vzc2lvbl8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhZjA1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXNlc3Npb24vbWF0Y2hib3gtc2Vzc2lvbl8wLjEuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJDdXN0b20gTWF0Y2hib3ggc2Vzc2lvbiBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWF0Y2hib3gtcHJvamVjdC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9tYXRjaGJveC1zZXNzaW9uO2VuZGxpbmU9MjA7bWQ1PTE4MGYxYzE2OWExNWQwNTlhNTZjMzAwOTRmNmZiNWVhIgorCitTRUNUSU9OID0gIngxMSIKK1JDT05GTElDVFNfJHtQTn0gPSAibWF0Y2hib3gtY29tbW9uIgorCitTUkNfVVJJID0gImZpbGU6Ly9tYXRjaGJveC1zZXNzaW9uIgorUyA9ICIke1dPUktESVJ9IgorCitQUiA9ICJyNCIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gIngtc2Vzc2lvbi1tYW5hZ2VyIgorQUxURVJOQVRJVkVfVEFSR0VUW3gtc2Vzc2lvbi1tYW5hZ2VyXSA9ICIke2JpbmRpcn0vbWF0Y2hib3gtc2Vzc2lvbiIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7U30vbWF0Y2hib3gtc2Vzc2lvbiAke0R9LyR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd20va2JkY29uZmlnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd20va2JkY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOWRhOGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC13bS9tYXRjaGJveC13bS9rYmRjb25maWcKQEAgLTAsMCArMSw0MiBAQAorIworIyBUaGlzIGlzIGFuIGV4YW1wbGUga2V5Ym9hcmQgY29uZmlnIGZpbGUgZm9yIG1hdGNoYm94CisjCisjIFlvdSBjYW4gZWRpdCB0aGlzIGZpbGUgb3IgY2hhbmdlIHBlciB1c2VyIGJ5IGNvcHlpbmcgdG8gCisjICB+Ly5tYXRjaGJveC9rYmRjb25maWcKKyMKKyMgU2UgdGhlIG1hdGNoYm94IG1hbnVhbCBmb3IgbW9yZSBpbmZvICggaHR0cDovL3Byb2plY3RzLm8taGFuZC5jb20vbWF0Y2hib3ggKQorCisjIyMgV2luZG93IG9wZXJhdGlvbiBzaG9ydCBjdXRzIAorCis8QWx0Pm49bmV4dAorPEFsdD5wPXByZXYKKzxBbHQ+Yz1jbG9zZQorPEFsdD5kPWRlc2t0b3AKKzxBbHQ+bT0hbWF0Y2hib3gtcmVtb3RlIC1tYm1lbnUKKworIyMjIEFwcCBsYXVuY2hpbmcuCisKKzxjdHJsPjxhbHQ+eD0heHRlcm0KKzxjdHJsPjxhbHQ+cj0hcnh2dAorCisjIyMgcG9reSBhZGRpdGlvbnMKKworWEY4NkNhbGVuZGFyPSEkY29udGFjdHMKK3RlbGVwaG9uZT0hJGRhdGVzCitYRjg2U3RhcnQ9IW1hdGNoYm94LXJlbW90ZSAtZGVza3RvcAorRjI9IW1hdGNoYm94LXJlbW90ZSAtbWJtZW51CisKKyNYRjg2TWFpbD0hJHRhc2tzCisjRXNjYXBlPWNsb3NlCisKKyMjIyB3aW5kb3dzIHN0eWxlIGtleSBzaG9ydGN1dHMKKworPGFsdD5UYWI9bmV4dAorPGFsdD48c2hpZnQ+VGFiPXByZXYKKworPGFsdD5zcGFjZT10YXNrbWVudQorPGFsdD5lc2NhcGU9IW1hdGNoYm94LXJlbW90ZSAtbWJtZW51Cis8YWx0PmY0PWNsb3NlCisKK2YxMT1mdWxsc2NyZWVuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXdtL21hdGNoYm94LXdtX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXdtL21hdGNoYm94LXdtX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjJkMjU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd21fZ2l0LmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggbGlnaHR3ZWlnaHQgd2luZG93IG1hbmFnZXIiCitIT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMvd20uaDtlbmRsaW5lPTIxO21kNT1hN2U4NDQ0NjVlZGJjZjc5YzI4MjM2OWY5M2NhYTgzNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5jO2VuZGxpbmU9MjE7bWQ1PTNlNWQ5ZjgzMmI1MjdiMGQ3MmRiZThlM2M0YzYwYjk1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy93bS5jO2VuZGxpbmU9MjE7bWQ1PThkYzlkMjQ0NzdkODdlZjVkZmJjMmU0OTI3MTQ2YWFiIgorCitTRUNUSU9OID0gIngxMS93bSIKK0RFUEVORFMgPSAibGlibWF0Y2hib3ggdmlydHVhbC9saWJ4MTEgbGlieGV4dCBsaWJ4cmVuZGVyIHN0YXJ0dXAtbm90aWZpY2F0aW9uIGV4cGF0IGdjb25mIGxpYnhjdXJzb3IgbGlieGZpeGVzIgorCitTUkNSRVYgPSAiMjk1NDRmMGU2MWNjMjgxZmM2MDA2MTQ0M2E1MzcyNzFlMTA4MWI3OCIKK1BWID0gIjEuMitnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9tYXRjaGJveC13aW5kb3ctbWFuYWdlciBcCisgICAgICAgICAgIGZpbGU6Ly9rYmRjb25maWciCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyogXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9tYXRjaGJveCBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L21hdGNoYm94IFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vdGhlbWVzL2Jsb25kaWUvbWF0Y2hib3ggXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS90aGVtZXMvRGVmYXVsdC9tYXRjaGJveCBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3RoZW1lcy9NQk9wdXMvbWF0Y2hib3giCisKK0VYVFJBX09FQ09ORiA9ICIgLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24gXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUteHJtIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtZXhwYXQgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZXhwYXQtbGliPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWV4cGF0LWluY2x1ZGVzPSR7U1RBR0lOR19JTkNESVJ9IgorCitkb19pbnN0YWxsX3ByZXBlbmQoKSB7CisJaW5zdGFsbCAke1dPUktESVJ9L2tiZGNvbmZpZyAke1N9L2RhdGEva2JkY29uZmlnCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZW51LWNhY2hlL21lbnUtY2FjaGVfMS4wLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZW51LWNhY2hlL21lbnUtY2FjaGVfMS4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5MDlmNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lbnUtY2FjaGUvbWVudS1jYWNoZV8xLjAuMC5iYgpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIGNhY2hpbmcgYXBwbGljYXRpb24gbWVudXMiCitERVNDUklQVElPTiA9ICJBIGxpYnJhcnkgY3JlYXRpbmcgYW5kIHV0aWxpemluZyBjYWNoZXMgdG8gc3BlZWQgdXAgZnJlZWRlc2t0b3Aub3JnIGFwcGxpY2F0aW9uIG1lbnVzIgorSE9NRVBBR0UgPSAiaHR0cDovL2x4ZGUuc291cmNlZm9yZ2UubmV0LyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wOTY0YzY4OWZjZjRjMjFjNjc5N2VhODc0MDg0MTZiNiIKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgaW50bHRvb2wtbmF0aXZlIGxpYmZtLWV4dHJhIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9seGRlL21lbnUtY2FjaGUtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGE4ZTZjMWE4NmQ1ZTY0ZWM3MjVkODUwYTRhYmZiYWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmY3ZGY0MzdiYmZkMzExOWM1ZjY2MmM2ZDIwOWI5OGYxNWRlMDNhNzIwMzMwOGM2YjU2YTRjMWUxZDQxOWFhZiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgZ3RrLWRvYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9saWJnbHVfOS4wLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2xpYmdsdV85LjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTA5OThkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9saWJnbHVfOS4wLjAuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJUaGUgT3BlbkdMIHV0aWxpdHkgdG9vbGtpdCIKK0RFU0NSSVBUSU9OID0gIkdMVSBpcyBhIHV0aWxpdHkgdG9vbGtpdCB1c2VkIHdpdGggT3BlbkdMIGltcGxlbWVudGF0aW9ucyIKKworSE9NRVBBR0UgPSAiaHR0cDovL21lc2EzZC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gIngxMSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vaW5jbHVkZS9HTC9nbHUuaDtlbmRsaW5lPTI5O21kNT02Yjc5YzU3MGY2NDQzNjNiMzU2NDU2ZTdkNDQ0NzFkOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbGlidGVzcy90ZXNzLmM7ZW5kbGluZT0yOTttZDU9NmI3OWM1NzBmNjQ0MzYzYjM1NjQ1NmU3ZDQ0NDcxZDkiCisKKyMgRXBvY2ggYXMgdGhpcyB1c2VkIHRvIGJlIHBhcnQgb2YgbWVzYQorUEUgPSAiMiIKK1BSID0gIjAiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmZyZWVkZXNrdG9wLm9yZy9wdWIvbWVzYS9nbHUvZ2x1LSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiZTkyNDkxMzJmZjQ5Mjc1NDYxY2Y5MjAzOTA4MzAzMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZjdhZDBkMzc5YTcyMmZjYmQzMDNhYTU2NTBjNmQ3ZDU1NDRmZGU4MzE5NmI0MmE3M2QxMTkzNTY4YTRkZjEyIgorCitTID0gIiR7V09SS0RJUn0vZ2x1LSR7UFZ9IgorCitERVBFTkRTID0gInZpcnR1YWwvbGliZ2wiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBSZXF1aXJlcyBsaWJHTC5zbyB3aGljaCBpcyBwcm92aWRlZCBieSBtZXNhIHdoZW4geDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworIyBSZW1vdmUgdGhlIG1lc2EtZ2x1IGRlcGVuZGVuY3kgaW4gbWVzYS1nbHUtZGV2LCBhcyBtZXNhLWdsdSBpcyBlbXB0eQorUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAxLW1lc2EtZGVtb3MtQWRkLW1pc3NpbmctZGF0YS1maWxlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAxLW1lc2EtZGVtb3MtQWRkLW1pc3NpbmctZGF0YS1maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2VlOWMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDEtbWVzYS1kZW1vcy1BZGQtbWlzc2luZy1kYXRhLWZpbGVzLnBhdGNoCkBAIC0wLDAgKzEsNjI0IEBACitGcm9tIGI2OTVjM2EzZmEzZjRjZDQ4YzEzYWEyNjU0MjExMGRlMjcwNzU1MTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorRGF0ZTogTW9uLCAxMiBNYXkgMjAxNCAxNToyMjozMiAtMDQwMAorU3ViamVjdDogW1BBVENIIDEvOV0gbWVzYS1kZW1vczogQWRkIG1pc3NpbmcgZGF0YSBmaWxlcy4KKworQWRkIHNvbWUgZGF0YSBmaWxlcyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSBnaXQgcmVwb3NpdG9yeToKKyAgIGh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9tZXNhL2RlbW9zL3RyZWUvP2lkPW1lc2EtZGVtb3MtOC4xLjAKK2J1dCBub3QgaW4gdGhlIHJlbGVhc2UgdGFyYmFsbAorICAgZnRwOi8vZnRwLmZyZWVkZXNrdG9wLm9yZy9wdWIvbWVzYS9kZW1vcy84LjEuMC9tZXNhLWRlbW9zLTguMS4wLnRhci5iejIKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9mcGdsc2wvZGVwdGgtcmVhZC5nbHNsICAgICAgfCAgIDQgKworIHNyYy9mcGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsICAgfCAgIDcgKworIHNyYy9nbHNsL0NIMTEtYnVtcG1hcHRleC5mcmFnICAgfCAgNDcgKysrKysrKworIHNyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5mcmFnICAgfCAgMzEgKysrKysKKyBzcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QudmVydCAgIHwgIDE2ICsrKworIHNyYy9nbHNsL2NvbnZvbHV0aW9uLmZyYWcgICAgICAgfCAgMjEgKysrCisgc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5nbHNsICAgICB8IDI3OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgc3JjL2dsc2wvc2tpbm5pbmcudmVydCAgICAgICAgICB8ICAyNCArKysrCisgc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZyB8ICAxOSArKysKKyBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS52ZXJ0IHwgIDE0ICsrCisgc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZyB8ICAxNyArKysKKyBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi52ZXJ0IHwgIDE0ICsrCisgc3JjL3ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wgICB8ICAgOCArKworIDEzIGZpbGVzIGNoYW5nZWQsIDUwMSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9mcGdsc2wvZGVwdGgtcmVhZC5nbHNsCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9mcGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9nbHNsL0NIMTEtYnVtcG1hcHRleC5mcmFnCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5mcmFnCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC52ZXJ0CisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9nbHNsL2NvbnZvbHV0aW9uLmZyYWcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5nbHNsCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9nbHNsL3NraW5uaW5nLnZlcnQKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS52ZXJ0CisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLmZyYWcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIudmVydAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbAorCitkaWZmIC0tZ2l0IGEvc3JjL2ZwZ2xzbC9kZXB0aC1yZWFkLmdsc2wgYi9zcmMvZnBnbHNsL2RlcHRoLXJlYWQuZ2xzbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg2ZDI5OGUKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9mcGdsc2wvZGVwdGgtcmVhZC5nbHNsCitAQCAtMCwwICsxLDQgQEAKKyt2b2lkIG1haW4oKQorK3sKKysgICBnbF9GcmFnQ29sb3IgPSBnbF9GcmFnQ29vcmQuenp6ejsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wgYi9zcmMvZnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmM2ZGM2ZWUKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9mcGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsCitAQCAtMCwwICsxLDcgQEAKKyt2b2lkIG1haW4oKSB7CisrICAgdmVjNCBzdW0gPSB2ZWM0KDApOworKyAgIGZvciAoaW50IGkgPSAxOyBpICE9IDI7IGkgKz0gMikgeworKyAgICAgIHN1bSArPSB2ZWM0KDAuMSwgMC4xLCAwLjEsIDAuMSk7CisrICAgfQorKyAgIGdsX0ZyYWdDb2xvciA9IHN1bTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvQ0gxMS1idW1wbWFwdGV4LmZyYWcgYi9zcmMvZ2xzbC9DSDExLWJ1bXBtYXB0ZXguZnJhZworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmI1ZGFiYjQKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9nbHNsL0NIMTEtYnVtcG1hcHRleC5mcmFnCitAQCAtMCwwICsxLDQ3IEBACisrLy8KKysvLyBGcmFnbWVudCBzaGFkZXIgZm9yIHByb2NlZHVyYWwgYnVtcHMKKysvLworKy8vIEF1dGhvcnM6IEpvaG4gS2Vzc2VuaWNoLCBSYW5kaSBSb3N0CisrLy8KKysvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNiAzRGxhYnMgSW5jLiBMdGQuIAorKy8vCisrLy8gU2VlIDNEbGFicy1MaWNlbnNlLnR4dCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbgorKy8vCisrLy8gVGV4dHVyZSBtYXBwaW5nL21vZHVsYXRpb24gYWRkZWQgYnkgQnJpYW4gUGF1bAorKy8vCisrCisrdmFyeWluZyB2ZWMzIExpZ2h0RGlyOworK3ZhcnlpbmcgdmVjMyBFeWVEaXI7CisrCisrdW5pZm9ybSBmbG9hdCBCdW1wRGVuc2l0eTsgICAgIC8vID0gMTYuMAorK3VuaWZvcm0gZmxvYXQgQnVtcFNpemU7ICAgICAgICAvLyA9IDAuMTUKKyt1bmlmb3JtIGZsb2F0IFNwZWN1bGFyRmFjdG9yOyAgLy8gPSAwLjUKKysKKyt1bmlmb3JtIHNhbXBsZXIyRCBUZXg7CisrCisrdm9pZCBtYWluKCkKKyt7CisrICAgIHZlYzMgYW1iaWVudCA9IHZlYzMoMC4yNSk7CisrICAgIHZlYzMgbGl0Q29sb3I7CisrICAgIHZlYzIgYyA9IEJ1bXBEZW5zaXR5ICogZ2xfVGV4Q29vcmRbMF0uc3Q7CisrICAgIHZlYzIgcCA9IGZyYWN0KGMpIC0gdmVjMigwLjUpOworKworKyAgICBmbG9hdCBkLCBmOworKyAgICBkID0gcC54ICogcC54ICsgcC55ICogcC55OworKyAgICBmID0gaW52ZXJzZXNxcnQoZCArIDEuMCk7CisrCisrICAgIGlmIChkID49IEJ1bXBTaXplKQorKyAgICAgICAgeyBwID0gdmVjMigwLjApOyBmID0gMS4wOyB9CisrCisrICAgIHZlYzMgU3VyZmFjZUNvbG9yID0gdGV4dHVyZTJEKFRleCwgZ2xfVGV4Q29vcmRbMF0uc3QpLnh5ejsKKysKKysgICAgdmVjMyBub3JtRGVsdGEgPSB2ZWMzKHAueCwgcC55LCAxLjApICogZjsKKysgICAgbGl0Q29sb3IgPSBTdXJmYWNlQ29sb3IgKiAoYW1iaWVudCArIG1heChkb3Qobm9ybURlbHRhLCBMaWdodERpciksIDAuMCkpOworKyAgICB2ZWMzIHJlZmxlY3REaXIgPSByZWZsZWN0KExpZ2h0RGlyLCBub3JtRGVsdGEpOworKyAgICAKKysgICAgZmxvYXQgc3BlYyA9IG1heChkb3QoRXllRGlyLCByZWZsZWN0RGlyKSwgMC4wKTsKKysgICAgc3BlYyAqPSBTcGVjdWxhckZhY3RvcjsKKysgICAgbGl0Q29sb3IgPSBtaW4obGl0Q29sb3IgKyBzcGVjLCB2ZWMzKDEuMCkpOworKworKyAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGxpdENvbG9yLCAxLjApOworK30KK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QuZnJhZyBiL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5mcmFnCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMGRiMDYwYgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmZyYWcKK0BAIC0wLDAgKzEsMzEgQEAKKysjZXh0ZW5zaW9uIEdMX0FSQl91bmlmb3JtX2J1ZmZlcl9vYmplY3QgOiBlbmFibGUKKysKKytsYXlvdXQoc3RkMTQwKSB1bmlmb3JtIGNvbG9yczAKKyt7CisrICAgIGZsb2F0IERpZmZ1c2VDb29sOworKyAgICBmbG9hdCBEaWZmdXNlV2FybTsKKysgICAgdmVjMyAgU3VyZmFjZUNvbG9yOworKyAgICB2ZWMzICBXYXJtQ29sb3I7CisrICAgIHZlYzMgIENvb2xDb2xvcjsKKysgICAgdmVjNCAgc29tZVs4XTsKKyt9OworKworK3ZhcnlpbmcgZmxvYXQgTmRvdEw7CisrdmFyeWluZyB2ZWMzICBSZWZsZWN0VmVjOworK3ZhcnlpbmcgdmVjMyAgVmlld1ZlYzsKKysKKyt2b2lkIG1haW4gKHZvaWQpCisreworKworKyAgICB2ZWMzIGtjb29sICAgID0gbWluKENvb2xDb2xvciArIERpZmZ1c2VDb29sICogU3VyZmFjZUNvbG9yLCAxLjApOworKyAgICB2ZWMzIGt3YXJtICAgID0gbWluKFdhcm1Db2xvciArIERpZmZ1c2VXYXJtICogU3VyZmFjZUNvbG9yLCAxLjApOworKyAgICB2ZWMzIGtmaW5hbCAgID0gbWl4KGtjb29sLCBrd2FybSwgTmRvdEwpOworKworKyAgICB2ZWMzIG5yZWZsZWN0ID0gbm9ybWFsaXplKFJlZmxlY3RWZWMpOworKyAgICB2ZWMzIG52aWV3ICAgID0gbm9ybWFsaXplKFZpZXdWZWMpOworKworKyAgICBmbG9hdCBzcGVjICAgID0gbWF4KGRvdChucmVmbGVjdCwgbnZpZXcpLCAwLjApOworKyAgICBzcGVjICAgICAgICAgID0gcG93KHNwZWMsIDMyLjApOworKworKyAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0IChtaW4oa2ZpbmFsICsgc3BlYywgMS4wKSwgMS4wKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LnZlcnQgYi9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QudmVydAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM5N2Q3MzMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC52ZXJ0CitAQCAtMCwwICsxLDE2IEBACisrdmVjMyBMaWdodFBvc2l0aW9uID0gdmVjMygwLjAsIDEwLjAsIDQuMCk7IAorKyAKKyt2YXJ5aW5nIGZsb2F0IE5kb3RMOworK3ZhcnlpbmcgdmVjMyAgUmVmbGVjdFZlYzsKKyt2YXJ5aW5nIHZlYzMgIFZpZXdWZWM7CisrIAorK3ZvaWQgbWFpbih2b2lkKQorK3sKKysgICAgdmVjMyBlY1BvcyAgICAgID0gdmVjMyAoZ2xfTW9kZWxWaWV3TWF0cml4ICogZ2xfVmVydGV4KTsKKysgICAgdmVjMyB0bm9ybSAgICAgID0gbm9ybWFsaXplKGdsX05vcm1hbE1hdHJpeCAqIGdsX05vcm1hbCk7CisrICAgIHZlYzMgbGlnaHRWZWMgICA9IG5vcm1hbGl6ZShMaWdodFBvc2l0aW9uIC0gZWNQb3MpOworKyAgICBSZWZsZWN0VmVjICAgICAgPSBub3JtYWxpemUocmVmbGVjdCgtbGlnaHRWZWMsIHRub3JtKSk7CisrICAgIFZpZXdWZWMgICAgICAgICA9IG5vcm1hbGl6ZSgtZWNQb3MpOworKyAgICBOZG90TCAgICAgICAgICAgPSAoZG90KGxpZ2h0VmVjLCB0bm9ybSkgKyAxLjApICogMC41OworKyAgICBnbF9Qb3NpdGlvbiAgICAgPSBmdHJhbnNmb3JtKCk7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9nbHNsL2NvbnZvbHV0aW9uLmZyYWcgYi9zcmMvZ2xzbC9jb252b2x1dGlvbi5mcmFnCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTQ5YjhhYworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dsc2wvY29udm9sdXRpb24uZnJhZworQEAgLTAsMCArMSwyMSBAQAorKworK2NvbnN0IGludCBLZXJuZWxTaXplID0gOTsKKysKKysvL3RleHR1cmUgb2Zmc2V0cworK3VuaWZvcm0gdmVjMiBPZmZzZXRbS2VybmVsU2l6ZV07CisrLy9jb252b2x1dGlvbiBrZXJuZWwKKyt1bmlmb3JtIHZlYzQgS2VybmVsVmFsdWVbS2VybmVsU2l6ZV07CisrdW5pZm9ybSBzYW1wbGVyMkQgc3JjVGV4OworK3VuaWZvcm0gdmVjNCBTY2FsZUZhY3RvcjsKKyt1bmlmb3JtIHZlYzQgQmFzZUNvbG9yOworKworK3ZvaWQgbWFpbih2b2lkKQorK3sKKysgICAgaW50IGk7CisrICAgIHZlYzQgc3VtID0gdmVjNCgwLjApOworKyAgICBmb3IgKGkgPSAwOyBpIDwgS2VybmVsU2l6ZTsgKytpKSB7CisrICAgICAgICB2ZWM0IHRtcCA9IHRleHR1cmUyRChzcmNUZXgsIGdsX1RleENvb3JkWzBdLnN0ICsgT2Zmc2V0W2ldKTsKKysgICAgICAgIHN1bSArPSB0bXAgKiBLZXJuZWxWYWx1ZVtpXTsKKysgICAgfQorKyAgICBnbF9GcmFnQ29sb3IgPSBzdW0gKiBTY2FsZUZhY3RvciArIEJhc2VDb2xvcjsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5nbHNsIGIvc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5nbHNsCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjY4MzNjYgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5nbHNsCitAQCAtMCwwICsxLDI3OSBAQAorKy8vCisrLy8gRGVzY3JpcHRpb24gOiBBcnJheSBhbmQgdGV4dHVyZWxlc3MgR0xTTCAyRC8zRC80RCBzaW1wbGV4CisrLy8gbm9pc2UgZnVuY3Rpb25zLgorKy8vIEF1dGhvciA6IElhbiBNY0V3YW4sIEFzaGltYSBBcnRzLgorKy8vIE1haW50YWluZXIgOiBpam0KKysvLyBMYXN0bW9kIDogMjAxMTAyMjMKKysvLyBMaWNlbnNlIDogQ29weXJpZ2h0IChDKSAyMDExIEFzaGltYSBBcnRzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBBcnRpc3RpYyBMaWNlbnNlIDIuMDsgU2VlIExJQ0VOQ0UgZmlsZS4KKysvLworKworKyNkZWZpbmUgTk9STUFMSVpFX0dSQURJRU5UUworKyN1bmRlZiBVU0VfQ0lSQ0xFCisrI2RlZmluZSBDT0xMQVBTRV9TT1JUTkVUCisrCisrZmxvYXQgcGVybXV0ZShmbG9hdCB4MCx2ZWMzIHApIHsKKysgIGZsb2F0IHgxID0gbW9kKHgwICogcC55LCBwLngpOworKyAgcmV0dXJuIGZsb29yKCBtb2QoICh4MSArIHAueikgKngwLCBwLnggKSk7CisrICB9CisrdmVjMiBwZXJtdXRlKHZlYzIgeDAsdmVjMyBwKSB7CisrICB2ZWMyIHgxID0gbW9kKHgwICogcC55LCBwLngpOworKyAgcmV0dXJuIGZsb29yKCBtb2QoICh4MSArIHAueikgKngwLCBwLnggKSk7CisrICB9CisrdmVjMyBwZXJtdXRlKHZlYzMgeDAsdmVjMyBwKSB7CisrICB2ZWMzIHgxID0gbW9kKHgwICogcC55LCBwLngpOworKyAgcmV0dXJuIGZsb29yKCBtb2QoICh4MSArIHAueikgKngwLCBwLnggKSk7CisrICB9CisrdmVjNCBwZXJtdXRlKHZlYzQgeDAsdmVjMyBwKSB7CisrICB2ZWM0IHgxID0gbW9kKHgwICogcC55LCBwLngpOworKyAgcmV0dXJuIGZsb29yKCBtb2QoICh4MSArIHAueikgKngwLCBwLnggKSk7CisrICB9CisrCisrdW5pZm9ybSB2ZWM0IHBQYXJhbTsKKysvLyBFeGFtcGxlCisrLy8gY29uc3QgdmVjNCBwUGFyYW0gPSB2ZWM0KCAxNy4qIDE3LiwgMzQuLCAxLiwgNy4pOworKworK2Zsb2F0IHRheWxvckludlNxcnQoZmxvYXQgcikKKysgIHsKKysgIHJldHVybiAoIDAuODM2NjYwMDI2NTM0MDggKyAwLjcqMC44NTM3MzQ3MjA5NTMxNCAtIDAuODUzNzM0NzIwOTUzMTQgKiByICk7CisrICB9CisrCisrZmxvYXQgc2ltcGxleE5vaXNlMih2ZWMyIHYpCisrICB7CisrICBjb25zdCB2ZWMyIEMgPSB2ZWMyKDAuMjExMzI0ODY1NDA1MTg3MTM0LCAvLyAoMy4wLXNxcnQoMy4wKSkvNi47CisrICAgICAgICAgICAgICAgICAgICAgIDAuMzY2MDI1NDAzNzg0NDM4NTk3KTsgLy8gMC41KihzcXJ0KDMuMCktMS4pOworKyAgY29uc3QgdmVjMyBEID0gdmVjMyggMC4sIDAuNSwgMi4wKSAqIDMuMTQxNTkyNjUzNTg5NzkzMTI7CisrLy8gRmlyc3QgY29ybmVyCisrICB2ZWMyIGkgPSBmbG9vcih2ICsgZG90KHYsIEMueXkpICk7CisrICB2ZWMyIHgwID0gdiAtIGkgKyBkb3QoaSwgQy54eCk7CisrCisrLy8gT3RoZXIgY29ybmVycworKyAgdmVjMiBpMSA9ICh4MC54ID4geDAueSkgPyB2ZWMyKDEuLDAuKSA6IHZlYzIoMC4sMS4pIDsKKysKKysgICAvLyB4MCA9IHgwIC0gMC4gKyAwLiAqIEMKKysgIHZlYzIgeDEgPSB4MCAtIGkxICsgMS4gKiBDLnh4IDsKKysgIHZlYzIgeDIgPSB4MCAtIDEuICsgMi4gKiBDLnh4IDsKKysKKysvLyBQZXJtdXRhdGlvbnMKKysgIGkgPSBtb2QoaSwgcFBhcmFtLngpOworKyAgdmVjMyBwID0gcGVybXV0ZSggcGVybXV0ZSgKKysgICAgICAgICAgICAgaS55ICsgdmVjMygwLiwgaTEueSwgMS4gKSwgcFBhcmFtLnh5eikKKysgICAgICAgICAgICsgaS54ICsgdmVjMygwLiwgaTEueCwgMS4gKSwgcFBhcmFtLnh5eik7CisrCisrI2lmbmRlZiBVU0VfQ0lSQ0xFCisrLy8gKCBOIHBvaW50cyB1bmlmb3JtbHkgb3ZlciBhIGxpbmUsIG1hcHBlZCBvbnRvIGEgZGlhbW9uZC4pCisrICB2ZWMzIHggPSBmcmFjdChwIC8gcFBhcmFtLncpIDsKKysgIHZlYzMgaCA9IDAuNSAtIGFicyh4KSA7CisrCisrICB2ZWMzIHN4ID0gdmVjMyhsZXNzVGhhbih4LEQueHh4KSkgKjIuIC0xLjsKKysgIHZlYzMgc2ggPSB2ZWMzKGxlc3NUaGFuKGgsRC54eHgpKTsKKysKKysgIHZlYzMgYTAgPSB4ICsgc3gqc2g7CisrICB2ZWMyIHAwID0gdmVjMihhMC54LGgueCk7CisrICB2ZWMyIHAxID0gdmVjMihhMC55LGgueSk7CisrICB2ZWMyIHAyID0gdmVjMihhMC56LGgueik7CisrCisrI2lmZGVmIE5PUk1BTElTRV9HUkFESUVOVFMKKysgIHAwICo9IHRheWxvckludlNxcnQoZG90KHAwLHAwKSk7CisrICBwMSAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMSxwMSkpOworKyAgcDIgKj0gdGF5bG9ySW52U3FydChkb3QocDIscDIpKTsKKysjZW5kaWYKKysKKysgIHZlYzMgZyA9IDIuMCAqIHZlYzMoIGRvdChwMCwgeDApLCBkb3QocDEsIHgxKSwgZG90KHAyLCB4MikgKTsKKysjZWxzZQorKy8vIE4gcG9pbnRzIGFyb3VuZCBhIHVuaXQgY2lyY2xlLgorKyAgdmVjMyBwaGkgPSBELnogKiBtb2QocCxwUGFyYW0udykgL3BQYXJhbS53IDsKKysgIHZlYzQgYTAgPSBzaW4ocGhpLnh4eXkrRC54eXh5KTsKKysgIHZlYzIgYTEgPSBzaW4ocGhpLnp6ICtELnh5KTsKKysgIHZlYzMgZyA9IHZlYzMoIGRvdChhMC54eSwgeDApLCBkb3QoYTAuencsIHgxKSwgZG90KGExLnh5LCB4MikgKTsKKysjZW5kaWYKKysvLyBtaXgKKysgIHZlYzMgbSA9IG1heCgwLjUgLSB2ZWMzKGRvdCh4MCx4MCksIGRvdCh4MSx4MSksIGRvdCh4Mix4MikpLCAwLik7CisrICBtID0gbSptIDsKKysgIHJldHVybiAxLjY2NjY2KiA3MC4qZG90KG0qbSwgZyk7CisrICB9CisrCisrZmxvYXQgc2ltcGxleE5vaXNlMyh2ZWMzIHYpCisrICB7CisrICBjb25zdCB2ZWMyIEMgPSB2ZWMyKDEuLzYuICwgMS4vMy4gKSA7CisrICBjb25zdCB2ZWM0IEQgPSB2ZWM0KDAuLCAwLjUsIDEuMCwgMi4wKTsKKysKKysvLyBGaXJzdCBjb3JuZXIKKysgIHZlYzMgaSA9IGZsb29yKHYgKyBkb3QodiwgQy55eXkpICk7CisrICB2ZWMzIHgwID0gdiAtIGkgKyBkb3QoaSwgQy54eHgpIDsKKysgIAorKy8vIE90aGVyIGNvcm5lcnMKKysjaWZkZWYgQ09MTEFQU0VfU09SVE5FVAorKyAgdmVjMyBnID0gdmVjMyggZ3JlYXRlclRoYW4oIHgwLnh5eiwgeDAueXp4KSApOworKyAgdmVjMyBsID0gdmVjMyggbGVzc1RoYW5FcXVhbCggeDAueHl6LCB4MC55engpICk7CisrCisrICB2ZWMzIGkxID0gZy54eXogKiBsLnp4eTsKKysgIHZlYzMgaTIgPSBtYXgoIGcueHl6LCBsLnp4eSk7CisrI2Vsc2UKKysvLyBLZWVwaW5nIHRoaXMgY2xlYW4gLSBsZXQgdGhlIGNvbXBpbGVyIG9wdGltaXplLgorKyAgdmVjMyBxMTsKKysgIHExLnggPSBtYXgoeDAueCwgeDAueSk7CisrICBxMS55ID0gbWluKHgwLngsIHgwLnkpOworKyAgcTEueiA9IHgwLno7CisrCisrICB2ZWMzIHEyOworKyAgcTIueCA9IG1heChxMS54LHExLnopOworKyAgcTIueiA9IG1pbihxMS54LHExLnopOworKyAgcTIueSA9IHExLnk7CisrCisrICB2ZWMzIHEzOworKyAgcTMueSA9IG1heChxMi55LCBxMi56KTsKKysgIHEzLnogPSBtaW4ocTIueSwgcTIueik7CisrICBxMy54ID0gcTIueDsKKysKKysgIHZlYzMgaTEgPSB2ZWMzKGVxdWFsKHEzLnh4eCwgeDApKTsKKysgIHZlYzMgaTIgPSBpMSArIHZlYzMoZXF1YWwocTMueXl5LCB4MCkpOworKyNlbmRpZgorKworKyAgIC8vIHgwID0geDAgLSAwLiArIDAuICogQworKyAgdmVjMyB4MSA9IHgwIC0gaTEgKyAxLiAqIEMueHh4OworKyAgdmVjMyB4MiA9IHgwIC0gaTIgKyAyLiAqIEMueHh4OworKyAgdmVjMyB4MyA9IHgwIC0gMS4gKyAzLiAqIEMueHh4OworKworKy8vIFBlcm11dGF0aW9ucworKyAgaSA9IG1vZChpLCBwUGFyYW0ueCApOworKyAgdmVjNCBwID0gcGVybXV0ZSggcGVybXV0ZSggcGVybXV0ZSgKKysgICAgICAgICAgICAgaS56ICsgdmVjNCgwLiwgaTEueiwgaTIueiwgMS4gKSwgcFBhcmFtLnh5eikKKysgICAgICAgICAgICsgaS55ICsgdmVjNCgwLiwgaTEueSwgaTIueSwgMS4gKSwgcFBhcmFtLnh5eikKKysgICAgICAgICAgICsgaS54ICsgdmVjNCgwLiwgaTEueCwgaTIueCwgMS4gKSwgcFBhcmFtLnh5eik7CisrCisrLy8gR3JhZGllbnRzCisrLy8gKCBOKk4gcG9pbnRzIHVuaWZvcm1seSBvdmVyIGEgc3F1YXJlLCBtYXBwZWQgb250byBhIG9jdG9oZWRyb24uKQorKyAgZmxvYXQgbl8gPSAxLjAvcFBhcmFtLncgOworKyAgdmVjMyBucyA9IG5fICogRC53eXogLSBELnh6eCA7CisrCisrICB2ZWM0IGogPSBwIC0gcFBhcmFtLncqcFBhcmFtLncqZmxvb3IocCAqIG5zLnogKm5zLnopOyAvLyBtb2QocCxOKk4pCisrCisrICB2ZWM0IHhfID0gZmxvb3IoaiAqIG5zLnopIDsKKysgIHZlYzQgeV8gPSBmbG9vcihqIC0gcFBhcmFtLncgKiB4XyApIDsgLy8gbW9kKGosTikKKysKKysgIHZlYzQgeCA9IHhfICpucy54ICsgbnMueXl5eTsKKysgIHZlYzQgeSA9IHlfICpucy54ICsgbnMueXl5eTsKKysgIHZlYzQgaCA9IDEuIC0gYWJzKHgpIC0gYWJzKHkpOworKworKyAgdmVjNCBiMCA9IHZlYzQoIHgueHksIHkueHkgKTsKKysgIHZlYzQgYjEgPSB2ZWM0KCB4Lnp3LCB5Lnp3ICk7CisrCisrICB2ZWM0IHMwID0gdmVjNChsZXNzVGhhbihiMCxELnh4eHgpKSAqMi4gLTEuOworKyAgdmVjNCBzMSA9IHZlYzQobGVzc1RoYW4oYjEsRC54eHh4KSkgKjIuIC0xLjsKKysgIHZlYzQgc2ggPSB2ZWM0KGxlc3NUaGFuKGgsIEQueHh4eCkpOworKworKyAgdmVjNCBhMCA9IGIwLnh6eXcgKyBzMC54enl3KnNoLnh4eXkgOworKyAgdmVjNCBhMSA9IGIxLnh6eXcgKyBzMS54enl3KnNoLnp6d3cgOworKworKyAgdmVjMyBwMCA9IHZlYzMoYTAueHksaC54KTsKKysgIHZlYzMgcDEgPSB2ZWMzKGEwLnp3LGgueSk7CisrICB2ZWMzIHAyID0gdmVjMyhhMS54eSxoLnopOworKyAgdmVjMyBwMyA9IHZlYzMoYTEuencsaC53KTsKKysKKysjaWZkZWYgTk9STUFMSVNFX0dSQURJRU5UUworKyAgcDAgKj0gdGF5bG9ySW52U3FydChkb3QocDAscDApKTsKKysgIHAxICo9IHRheWxvckludlNxcnQoZG90KHAxLHAxKSk7CisrICBwMiAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMixwMikpOworKyAgcDMgKj0gdGF5bG9ySW52U3FydChkb3QocDMscDMpKTsKKysjZW5kaWYKKysKKysvLyBNaXgKKysgIHZlYzQgbSA9IG1heCgwLjYgLSB2ZWM0KGRvdCh4MCx4MCksIGRvdCh4MSx4MSksIGRvdCh4Mix4MiksIGRvdCh4Myx4MykpLCAwLik7CisrICBtID0gbSAqIG07CisrLy91c2VkIHRvIGJlIDY0LgorKyAgcmV0dXJuIDQ4LjAgKiBkb3QoIG0qbSwgdmVjNCggZG90KHAwLHgwKSwgZG90KHAxLHgxKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdChwMix4MiksIGRvdChwMyx4MykgKSApOworKyAgfQorKworK3ZlYzQgZ3JhZDQoZmxvYXQgaiwgdmVjNCBpcCkKKysgIHsKKysgIGNvbnN0IHZlYzQgb25lcyA9IHZlYzQoMS4sMS4sMS4sLTEuKTsKKysgIHZlYzQgcCxzOworKworKyAgcC54eXogPSBmbG9vciggZnJhY3QgKHZlYzMoaikgKiBpcC54eXopICpwUGFyYW0udykgKiBpcC56IC0xLjA7CisrICBwLncgPSAxLjUgLSBkb3QoYWJzKHAueHl6KSwgb25lcy54eXopOworKyAgcyA9IHZlYzQobGVzc1RoYW4ocCx2ZWM0KDAuKSkpOworKyAgcC54eXogPSBwLnh5eiArIChzLnh5eioyLi0xLikgKiBzLnd3dzsKKysKKysgIHJldHVybiBwOworKyAgfQorKworK2Zsb2F0IHNpbXBsZXhOb2lzZTQodmVjNCB2KQorKyAgeworKyAgY29uc3QgdmVjMiBDID0gdmVjMiggMC4xMzgxOTY2MDExMjUwMTA1MDQsIC8vICg1IC0gc3FydCg1KSkvMjAgRzQKKysgICAgICAgICAgICAgICAgICAgICAgICAwLjMwOTAxNjk5NDM3NDk0NzQ1MSk7IC8vIChzcXJ0KDUpIC0gMSkvNCBGNAorKy8vIEZpcnN0IGNvcm5lcgorKyAgdmVjNCBpID0gZmxvb3IodiArIGRvdCh2LCBDLnl5eXkpICk7CisrICB2ZWM0IHgwID0gdiAtIGkgKyBkb3QoaSwgQy54eHh4KTsKKysKKysvLyBPdGhlciBjb3JuZXJzCisrCisrLy8gRm9yY2UgZXhpc3RhbmNlIG9mIHN0cmljdCB0b3RhbCBvcmRlcmluZyBpbiBzb3J0LgorKyAgdmVjNCBxMCA9IGZsb29yKHgwICogMTAyNC4wKSArIHZlYzQoIDAuLCAxLi80LiwgMi4vNC4gLCAzLi80Lik7CisrICB2ZWM0IHExOworKyAgcTEueHkgPSBtYXgocTAueHkscTAuencpOyAvLyB4OnogeTp3CisrICBxMS56dyA9IG1pbihxMC54eSxxMC56dyk7CisrCisrICB2ZWM0IHEyOworKyAgcTIueHogPSBtYXgocTEueHoscTEueXcpOyAvLyB4Onkgejp3CisrICBxMi55dyA9IG1pbihxMS54eixxMS55dyk7CisrICAKKysgIHZlYzQgcTM7CisrICBxMy55ID0gbWF4KHEyLnkscTIueik7IC8vIHk6egorKyAgcTMueiA9IG1pbihxMi55LHEyLnopOworKyAgcTMueHcgPSBxMi54dzsKKysKKysgIHZlYzQgaTEgPSB2ZWM0KGxlc3NUaGFuRXF1YWwocTMueHh4eCwgcTApKTsKKysgIHZlYzQgaTIgPSB2ZWM0KGxlc3NUaGFuRXF1YWwocTMueXl5eSwgcTApKTsKKysgIHZlYzQgaTMgPSB2ZWM0KGxlc3NUaGFuRXF1YWwocTMuenp6eiwgcTApKTsKKysKKysgICAvLyB4MCA9IHgwIC0gMC4gKyAwLiAqIEMKKysgIHZlYzQgeDEgPSB4MCAtIGkxICsgMS4gKiBDLnh4eHg7CisrICB2ZWM0IHgyID0geDAgLSBpMiArIDIuICogQy54eHh4OworKyAgdmVjNCB4MyA9IHgwIC0gaTMgKyAzLiAqIEMueHh4eDsKKysgIHZlYzQgeDQgPSB4MCAtIDEuICsgNC4gKiBDLnh4eHg7CisrCisrLy8gUGVybXV0YXRpb25zCisrICBpID0gbW9kKGksIHBQYXJhbS54ICk7CisrICBmbG9hdCBqMCA9IHBlcm11dGUoIHBlcm11dGUoIHBlcm11dGUoIHBlcm11dGUgKAorKyAgICAgICAgICAgICAgaS53LCBwUGFyYW0ueHl6KSArIGkueiwgcFBhcmFtLnh5eikKKysgICAgICAgICAgICArIGkueSwgcFBhcmFtLnh5eikgKyBpLngsIHBQYXJhbS54eXopOworKyAgdmVjNCBqMSA9IHBlcm11dGUoIHBlcm11dGUoIHBlcm11dGUoIHBlcm11dGUgKAorKyAgICAgICAgICAgICBpLncgKyB2ZWM0KGkxLncsIGkyLncsIGkzLncsIDEuICksIHBQYXJhbS54eXopCisrICAgICAgICAgICArIGkueiArIHZlYzQoaTEueiwgaTIueiwgaTMueiwgMS4gKSwgcFBhcmFtLnh5eikKKysgICAgICAgICAgICsgaS55ICsgdmVjNChpMS55LCBpMi55LCBpMy55LCAxLiApLCBwUGFyYW0ueHl6KQorKyAgICAgICAgICAgKyBpLnggKyB2ZWM0KGkxLngsIGkyLngsIGkzLngsIDEuICksIHBQYXJhbS54eXopOworKy8vIEdyYWRpZW50cworKy8vICggTipOKk4gcG9pbnRzIHVuaWZvcm1seSBvdmVyIGEgY3ViZSwgbWFwcGVkIG9udG8gYSA0LW9jdG9oZWRyb24uKQorKyAgdmVjNCBpcCA9IHBQYXJhbSA7CisrICBpcC54eSAqPSBwUGFyYW0udyA7CisrICBpcC54ICo9IHBQYXJhbS53IDsKKysgIGlwID0gdmVjNCgxLiwxLiwxLiwyLikgLyBpcCA7CisrCisrICB2ZWM0IHAwID0gZ3JhZDQoajAsIGlwKTsKKysgIHZlYzQgcDEgPSBncmFkNChqMS54LCBpcCk7CisrICB2ZWM0IHAyID0gZ3JhZDQoajEueSwgaXApOworKyAgdmVjNCBwMyA9IGdyYWQ0KGoxLnosIGlwKTsKKysgIHZlYzQgcDQgPSBncmFkNChqMS53LCBpcCk7CisrCisrI2lmZGVmIE5PUk1BTElTRV9HUkFESUVOVFMKKysgIHAwICo9IHRheWxvckludlNxcnQoZG90KHAwLHAwKSk7CisrICBwMSAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMSxwMSkpOworKyAgcDIgKj0gdGF5bG9ySW52U3FydChkb3QocDIscDIpKTsKKysgIHAzICo9IHRheWxvckludlNxcnQoZG90KHAzLHAzKSk7CisrICBwNCAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwNCxwNCkpOworKyNlbmRpZgorKworKy8vIE1peAorKyAgdmVjMyBtMCA9IG1heCgwLjYgLSB2ZWMzKGRvdCh4MCx4MCksIGRvdCh4MSx4MSksIGRvdCh4Mix4MikpLCAwLik7CisrICB2ZWMyIG0xID0gbWF4KDAuNiAtIHZlYzIoZG90KHgzLHgzKSwgZG90KHg0LHg0KSApLCAwLik7CisrICBtMCA9IG0wICogbTA7CisrICBtMSA9IG0xICogbTE7CisrICByZXR1cm4gMzIuICogKCBkb3QobTAqbTAsIHZlYzMoIGRvdCggcDAsIHgwICksIGRvdCggcDEsIHgxICksIGRvdCggcDIsIHgyICkpKQorKyAgICAgICAgICAgICAgICsgZG90KG0xKm0xLCB2ZWMyKCBkb3QoIHAzLCB4MyApLCBkb3QoIHA0LCB4NCApICkgKSApIDsKKysKKysgIH0KKysKKysKKysKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9za2lubmluZy52ZXJ0IGIvc3JjL2dsc2wvc2tpbm5pbmcudmVydAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI4OTcwZWUKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9nbHNsL3NraW5uaW5nLnZlcnQKK0BAIC0wLDAgKzEsMjQgQEAKKysvLyBWZXJ0ZXggd2VpZ2h0aW5nL2JsZW5kaW4gc2hhZGVyCisrLy8gQnJpYW4gUGF1bAorKy8vIDQgTm92IDIwMDgKKysKKyt1bmlmb3JtIG1hdDQgbWF0MCwgbWF0MTsKKythdHRyaWJ1dGUgZmxvYXQgd2VpZ2h0OworKworK3ZvaWQgbWFpbigpIAorK3sKKysgICAvLyBzaW1wbGUgZGlmZnVzZSBzaGFkaW5nCisrICAgLy8gTm90ZSB0aGF0IHdlIHNob3VsZCByZWFsbHkgdHJhbnNmb3JtIHRoZSBub3JtYWwgdmVjdG9yIGFsb25nIHdpdGgKKysgICAvLyB0aGUgcG9zdGlvbiBiZWxvdy4uLiBzb21lZGF5LgorKyAgIHZlYzMgbGlnaHRWZWMgPSB2ZWMzKDAsIDAsIDEpOworKyAgIHZlYzMgbm9ybSA9IGdsX05vcm1hbE1hdHJpeCAqIGdsX05vcm1hbDsKKysgICBmbG9hdCBkb3QgPSAwLjIgKyBtYXgoMC4wLCBkb3Qobm9ybSwgbGlnaHRWZWMpKTsKKysgICBnbF9Gcm9udENvbG9yID0gdmVjNChkb3QpOworKworKyAgIC8vIGNvbXB1dGUgc3VtIG9mIHdlaWdodGVkIHRyYW5zZm9ybWF0aW9ucworKyAgIHZlYzQgcG9zMCA9IG1hdDAgKiBnbF9WZXJ0ZXg7CisrICAgdmVjNCBwb3MxID0gbWF0MSAqIGdsX1ZlcnRleDsKKysgICB2ZWM0IHBvcyA9IG1peChwb3MwLCBwb3MxLCB3ZWlnaHQpOworKworKyAgIGdsX1Bvc2l0aW9uID0gZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCAqIHBvczsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLmZyYWcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wODM5NDM2CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS5mcmFnCitAQCAtMCwwICsxLDE5IEBACisrLy8gTXVsdGktdGV4dHVyZSBmcmFnbWVudCBzaGFkZXIKKysvLyBCcmlhbiBQYXVsCisrCisrLy8gQ29tcG9zaXRlIHNlY29uZCB0ZXh0dXJlIG92ZXIgZmlyc3QuCisrLy8gV2UncmUgYXNzdW1pbmcgdGhlIDJuZCB0ZXh0dXJlIGhhcyBhIG1lYW5pbmdmdWwgYWxwaGEgY2hhbm5lbC4KKysKKyt1bmlmb3JtIHNhbXBsZXIyRCB0ZXgxOworK3VuaWZvcm0gc2FtcGxlcjJEIHRleDI7CisrdW5pZm9ybSB2ZWM0IFVuaVYxOworK3VuaWZvcm0gdmVjNCBVbmlWMjsKKysKKyt2b2lkIG1haW4oKQorK3sKKysgICB2ZWM0IHQzOworKyAgIHZlYzQgdDEgPSB0ZXh0dXJlMkQodGV4MSwgZ2xfVGV4Q29vcmRbMF0ueHkpOworKyAgIHZlYzQgdDIgPSB0ZXh0dXJlMkQodGV4MiwgZ2xfVGV4Q29vcmRbMV0ueHkpOworKyAgIHQzID0gbWl4KHQxLCB0MiwgdDIudyk7CisrICAgZ2xfRnJhZ0NvbG9yID0gdDMgKyBVbmlWMSArIFVuaVYyOworK30KK2RpZmYgLS1naXQgYS9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS52ZXJ0IGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTEudmVydAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmNlZjUwZGIKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQKK0BAIC0wLDAgKzEsMTQgQEAKKysvLyBNdWx0aS10ZXh0dXJlIHZlcnRleCBzaGFkZXIKKysvLyBCcmlhbiBQYXVsCisrCisrCisrYXR0cmlidXRlIHZlYzQgVGV4Q29vcmQwLCBUZXhDb29yZDE7CisrYXR0cmlidXRlIHZlYzQgVmVydENvb3JkOworKworK3ZvaWQgbWFpbigpCisreworKyAgIGdsX1RleENvb3JkWzBdID0gVGV4Q29vcmQwOworKyAgIGdsX1RleENvb3JkWzFdID0gVGV4Q29vcmQxOworKyAgIC8vIG5vdGU6IG1heSB1c2UgZ2xfVmVydGV4IG9yIFZlcnRDb29yZCBoZXJlIGZvciB0ZXN0aW5nOgorKyAgIGdsX1Bvc2l0aW9uID0gZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCAqIGdsX1ZlcnRleDsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLmZyYWcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wZGYwMzE5CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi5mcmFnCitAQCAtMCwwICsxLDE3IEBACisrLy8gTXVsdGktdGV4dHVyZSBmcmFnbWVudCBzaGFkZXIKKysvLyBCcmlhbiBQYXVsCisrCisrLy8gQ29tcG9zaXRlIHNlY29uZCB0ZXh0dXJlIG92ZXIgZmlyc3QuCisrLy8gV2UncmUgYXNzdW1pbmcgdGhlIDJuZCB0ZXh0dXJlIGhhcyBhIG1lYW5pbmdmdWwgYWxwaGEgY2hhbm5lbC4KKysKKyt1bmlmb3JtIHNhbXBsZXIyRCB0ZXgxOworK3VuaWZvcm0gc2FtcGxlcjJEIHRleDI7CisrdW5pZm9ybSB2ZWM0IFVuaVYxOworK3VuaWZvcm0gdmVjNCBVbmlWMjsKKysKKyt2b2lkIG1haW4oKQorK3sKKysgICB2ZWM0IHQxID0gdGV4dHVyZTJEKHRleDEsIGdsX1RleENvb3JkWzBdLnh5KTsKKysgICB2ZWM0IHQyID0gdGV4dHVyZTJEKHRleDIsIGdsX1RleENvb3JkWzFdLnh5KTsKKysgICBnbF9GcmFnQ29sb3IgPSB0MSArIHQyICsgVW5pVjEgKyBVbmlWMjsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIudmVydCBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLnZlcnQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jZWY1MGRiCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi52ZXJ0CitAQCAtMCwwICsxLDE0IEBACisrLy8gTXVsdGktdGV4dHVyZSB2ZXJ0ZXggc2hhZGVyCisrLy8gQnJpYW4gUGF1bAorKworKworK2F0dHJpYnV0ZSB2ZWM0IFRleENvb3JkMCwgVGV4Q29vcmQxOworK2F0dHJpYnV0ZSB2ZWM0IFZlcnRDb29yZDsKKysKKyt2b2lkIG1haW4oKQorK3sKKysgICBnbF9UZXhDb29yZFswXSA9IFRleENvb3JkMDsKKysgICBnbF9UZXhDb29yZFsxXSA9IFRleENvb3JkMTsKKysgICAvLyBub3RlOiBtYXkgdXNlIGdsX1ZlcnRleCBvciBWZXJ0Q29vcmQgaGVyZSBmb3IgdGVzdGluZzoKKysgICBnbF9Qb3NpdGlvbiA9IGdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXggKiBnbF9WZXJ0ZXg7CisrfQorZGlmZiAtLWdpdCBhL3NyYy92cGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsIGIvc3JjL3ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iYzdhZTRiCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvdnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbAorQEAgLTAsMCArMSw4IEBACisrdm9pZCBtYWluKCkgeworKyAgIGdsX1Bvc2l0aW9uID0gZ2xfVmVydGV4OworKyAgIHZlYzQgc3VtID0gdmVjNCgwKTsKKysgICBmb3IgKGludCBpID0gMTsgaSAhPSAyOyBpICs9IDIpIHsKKysgICAgICBzdW0gKz0gdmVjNCgwLjEsIDAuMSwgMC4xLCAwLjEpOworKyAgIH0KKysgICBnbF9Gcm9udENvbG9yID0gc3VtOworK30KKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDItQ29ycmVjdGx5LWltcGxlbWVudC13aXRoLUFDX1dJVEgtZ2x1dC1zby10aGF0LXdpdGhvdS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAyLUNvcnJlY3RseS1pbXBsZW1lbnQtd2l0aC1BQ19XSVRILWdsdXQtc28tdGhhdC13aXRob3UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk2YWYxMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAyLUNvcnJlY3RseS1pbXBsZW1lbnQtd2l0aC1BQ19XSVRILWdsdXQtc28tdGhhdC13aXRob3UucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSAzNjgyOWE4ZDdhZDI4ODg1MTVmYmVlOTVjMmE3MGIzZDYzNmQ3NTM4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgOSBKdWwgMjAxNCAxNDozMDozMyArMDIwMAorU3ViamVjdDogW1BBVENIIDIvOV0gQ29ycmVjdGx5IGltcGxlbWVudCB3aXRoIEFDX1dJVEgoZ2x1dCkgc28gdGhhdAorIC0td2l0aG91dC1nbHV0IHdvcmtzLgorCistLS0KKyBjb25maWd1cmUuYWMgfCAyNiArKysrKysrKysrKysrKystLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYzRlZTEyYi4uOTQ0NTQyNCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjcsMjEgKzY3LDI1IEBAIERFTU9fQ0ZMQUdTPSIkREVNT19DRkxBR1MgJEdMX0NGTEFHUyIKKyBERU1PX0xJQlM9IiRERU1PX0xJQlMgJEdMX0xJQlMiCisgCisgZG5sIENoZWNrIGZvciBHTFVUCistR0xVVF9DRkxBR1M9IiIKKy1HTFVUX0xJQlM9LWxnbHV0CistZ2x1dF9lbmFibGVkPXllcworK2dsdXRfZW5hYmxlZD1ubworIEFDX0FSR19XSVRIKFtnbHV0XSwKKyAJW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtZ2x1dD1ESVJdLAorIAkJCVtnbHV0IGluc3RhbGwgZGlyZWN0b3J5XSldLAorIAlbR0xVVF9DRkxBR1M9Ii1JJHdpdGh2YWwvaW5jbHVkZSIKKy0JIEdMVVRfTElCUz0iLUwkd2l0aHZhbC9saWIgLWxnbHV0Il0pCistQUNfQ0hFQ0tfSEVBREVSKFtHTC9nbHV0LmhdLAorLQkJW10sCistCQlbZ2x1dF9lbmFibGVkPW5vXSkKKy1BQ19DSEVDS19MSUIoW2dsdXRdLAorLQkJW2dsdXRJbml0XSwKKy0JCVtdLAorLQkJW2dsdXRfZW5hYmxlZD1ub10pCisrCSBHTFVUX0xJQlM9Ii1MJHdpdGh2YWwvbGliIC1sZ2x1dCJdLAorKwlbR0xVVF9DRkxBR1M9IiIKKysJIEdMVVRfTElCUz0iLWxnbHV0Il0KKysgICAgICAgICkKKytBU19JRihbdGVzdCAieCR3aXRoX2dsdXQiICE9IHhub10sCisrICAgICAgW0FDX0NIRUNLX0hFQURFUihbR0wvZ2x1dC5oXSwKKysgICAgICAgICAgICAgICAgICAgICAgIFtdLAorKyAgICAgICAgICAgICAgICAgICAgICAgW2dsdXRfZW5hYmxlZD1ub10pCisrICAgICAgIEFDX0NIRUNLX0xJQihbZ2x1dF0sCisrICAgICAgICAgICAgICAgICAgICBbZ2x1dEluaXRdLAorKyAgICAgICAgICAgICAgICAgICAgW10sCisrICAgICAgICAgICAgICAgICAgICBbZ2x1dF9lbmFibGVkPW5vXSkKKysgICAgICAgZ2x1dF9lbmFibGVkPXllcworK10pCisgCisgZG5sIENoZWNrIGZvciBGcmVlR0xVVCAyLjYgb3IgbGF0ZXIKKyBBQ19FR1JFUF9IRUFERVIoW2dsdXRJbml0Q29udGV4dFByb2ZpbGVdLAorLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMy1jb25maWd1cmUtQWxsb3ctdG8tZGlzYWJsZS1kZW1vcy13aGljaC1yZXF1aXJlLUdMRVctLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDMtY29uZmlndXJlLUFsbG93LXRvLWRpc2FibGUtZGVtb3Mtd2hpY2gtcmVxdWlyZS1HTEVXLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjU4YzJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDMtY29uZmlndXJlLUFsbG93LXRvLWRpc2FibGUtZGVtb3Mtd2hpY2gtcmVxdWlyZS1HTEVXLS5wYXRjaApAQCAtMCwwICsxLDQyNCBAQAorRnJvbSBiMjVlOWM2NzVjZjU2MGI4YjAzN2RjODU1YzZiM2IxZDA5OTU3ODY3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogV2VkLCA5IEp1bCAyMDE0IDE0OjIzOjQxICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMy85XSBjb25maWd1cmU6IEFsbG93IHRvIGRpc2FibGUgZGVtb3Mgd2hpY2ggcmVxdWlyZSBHTEVXIG9yCisgR0xVCisKKyogaW4gc29tZSBzeXN0ZW1zIHdpdGhvdXQgWDExIHN1cHBvcnQgd2UgZG9uJ3QgaGF2ZSBHTEVXLCBidXQKKyAgbWVzYS1kZW1vcyBhcmUgc3RpbGwgdXNlZnVsCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICB8IDQ5ICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCisgc3JjL01ha2VmaWxlLmFtICAgICAgICAgICAgICAgfCAxNCArKysrKystLS0KKyBzcmMvZGVtb3MvTWFrZWZpbGUuYW0gICAgICAgICB8IDczICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyBzcmMvZWdsL01ha2VmaWxlLmFtICAgICAgICAgICB8ICA4ICsrKy0tCisgc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0gfCA0NCArKysrKysrKysrKysrKystLS0tLS0tLS0tLQorIHNyYy9lZ2wvb3BlbmdsZXMyL01ha2VmaWxlLmFtIHwgMzMgKysrKysrKysrKy0tLS0tLS0tLQorIDYgZmlsZXMgY2hhbmdlZCwgMTM1IGluc2VydGlvbnMoKyksIDg2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5NDQ1NDI0Li5iYzRjOGQxIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC05MywyNSArOTMsNDQgQEAgQUNfRUdSRVBfSEVBREVSKFtnbHV0SW5pdENvbnRleHRQcm9maWxlXSwKKyAJCVtBQ19ERUZJTkUoSEFWRV9GUkVFR0xVVCldLAorIAkJW10pCisgCistZG5sIENoZWNrIGZvciBHTEVXCistUEtHX0NIRUNLX01PRFVMRVMoR0xFVywgW2dsZXcgPj0gMS41LjRdKQorLURFTU9fQ0ZMQUdTPSIkREVNT19DRkxBR1MgJEdMRVdfQ0ZMQUdTIgorLURFTU9fTElCUz0iJERFTU9fTElCUyAkR0xFV19MSUJTIgorK0FDX0FSR19FTkFCTEUoW2dsZXddLAorKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWdsZXddLAorKyAgICAgICAgW2J1aWxkIGRlbW9zIHdoaWNoIHJlcXVpcmUgZ2xldyBAPDpAZGVmYXVsdD15ZXNAOj5AXSldLAorKyAgICBbZW5hYmxlX2dsZXc9IiRlbmFibGV2YWwiXSwKKysgICAgW2VuYWJsZV9nbGV3PXllc10KKyspCisrCisraWYgdGVzdCAieCRlbmFibGVfZ2xldyIgPSB4eWVzOyB0aGVuCisrICAgIGRubCBDaGVjayBmb3IgR0xFVworKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhHTEVXLCBbZ2xldyA+PSAxLjUuNF0sIFtnbGV3X2VuYWJsZWQ9eWVzXSwgW2dsZXdfZW5hYmxlZD1ub10pCisrICAgIERFTU9fQ0ZMQUdTPSIkREVNT19DRkxBR1MgJEdMRVdfQ0ZMQUdTIgorKyAgICBERU1PX0xJQlM9IiRERU1PX0xJQlMgJEdMRVdfTElCUyIKKytmaQorIAorICMgTElCUyB3YXMgc2V0IGJ5IEFDX0NIRUNLX0xJQiBhYm92ZQorIExJQlM9IiIKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhHTFUsIFtnbHVdLCBbXSwKKy0JCSAgW0FDX0NIRUNLX0hFQURFUihbR0wvZ2x1LmhdLAorLQkJCQkgICBbXSwKKy0JCSAgCQkgICBBQ19NU0dfRVJST1IoW0dMVSBub3QgZm91bmRdKSkKKy0JCSAgIEFDX0NIRUNLX0xJQihbR0xVXSwKKy0JCQkJW2dsdUJlZ2luQ3VydmVdLAorLQkJCQlbR0xVX0xJQlM9LWxHTFVdLAorLQkJCQlBQ19NU0dfRVJST1IoW0dMVSByZXF1aXJlZF0pKSBdKQorK0FDX0FSR19FTkFCTEUoW2dsdV0sCisrICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZ2x1XSwKKysgICAgICAgIFtidWlsZCBkZW1vcyB3aGljaCByZXF1aXJlIGdsdSBAPDpAZGVmYXVsdD15ZXNAOj5AXSldLAorKyAgICBbZW5hYmxlX2dsdT0iJGVuYWJsZXZhbCJdLAorKyAgICBbZW5hYmxlX2dsdT15ZXNdCisrKQorIAorLURFTU9fQ0ZMQUdTPSIkREVNT19DRkxBR1MgJEdMVV9DRkxBR1MiCistREVNT19MSUJTPSIkREVNT19MSUJTICRHTFVfTElCUyIKKytpZiB0ZXN0ICJ4JGVuYWJsZV9nbHUiID0geHllczsgdGhlbgorKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhHTFUsIFtnbHVdLCBbZ2x1X2VuYWJsZWQ9eWVzXSwKKysgICAgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSKFtHTC9nbHUuaF0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbR0xVIG5vdCBmb3VuZF0pKQorKyAgICAgICAgICAgICAgICAgICAgICBBQ19DSEVDS19MSUIoW0dMVV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ2x1QmVnaW5DdXJ2ZV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbR0xVX0xJQlM9LWxHTFUKKysJCQkJICAgIGdsdV9lbmFibGVkPXllc10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0dMVSByZXF1aXJlZF0pKSBdKQorKworKyAgICBERU1PX0NGTEFHUz0iJERFTU9fQ0ZMQUdTICRHTFVfQ0ZMQUdTIgorKyAgICBERU1PX0xJQlM9IiRERU1PX0xJQlMgJEdMVV9MSUJTIgorK2ZpCisgCisgQUNfQVJHX0VOQUJMRShbZWdsXSwKKyAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1lZ2xdLAorQEAgLTMwNCw2ICszMjMsOCBAQCBBQ19TVUJTVChbV0FZTEFORF9DRkxBR1NdKQorIEFDX1NVQlNUKFtXQVlMQU5EX0xJQlNdKQorIAorIAorK0FNX0NPTkRJVElPTkFMKEhBVkVfR0xVLCB0ZXN0ICJ4JGdsdV9lbmFibGVkIiA9ICJ4eWVzIikKKytBTV9DT05ESVRJT05BTChIQVZFX0dMRVcsIHRlc3QgIngkZ2xld19lbmFibGVkIiA9ICJ4eWVzIikKKyBBTV9DT05ESVRJT05BTChIQVZFX0VHTCwgdGVzdCAieCRlZ2xfZW5hYmxlZCIgPSAieHllcyIpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9HTEVTVjEsIHRlc3QgIngkZ2xlc3YxX2VuYWJsZWQiID0gInh5ZXMiKQorIEFNX0NPTkRJVElPTkFMKEhBVkVfR0xFU1YyLCB0ZXN0ICJ4JGdsZXN2Ml9lbmFibGVkIiA9ICJ4eWVzIikKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KK2luZGV4IDE2NDdkNjQuLjc1NGM0N2MgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9NYWtlZmlsZS5hbQorQEAgLTIzLDE0ICsyMywxOCBAQAorICMgICAgRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KKyAKKytpZiBIQVZFX0dMRVcKKytVVElMID0gdXRpbAorK2VuZGlmCisrCisgU1VCRElSUyA9IFwKKy0JdXRpbCBcCisrCSQoVVRJTCkgXAorIAlkYXRhIFwKKyAJZGVtb3MgXAorIAllZ2wgXAorIAlmcCBcCisgCWZwZ2xzbCBcCisgCWdsc2wgXAorLSAgICAgICAgZ3MgXAorKwlncyBcCisgCW9ianZpZXdlciBcCisgCW9zZGVtb3MgXAorIAlwZXJmIFwKK0BAIC00MCw4ICszOSwxMiBAQCBTVUJESVJTID0gXAorIAlzbGFuZyBcCisgCXRlc3RzIFwKKyAJdG9vbHMgXAorLQl0cml2aWFsIFwKKy0JdnAgXAorLQl2cGdsc2wgXAorIAl3Z2wgXAorIAl4ZGVtb3MKKysKKytpZiBIQVZFX0dMRVcKKytTVUJESVJTICs9IFwKKysJdnAgXAorKwl2cGdsc2wgXAorKwl0cml2aWFsCisrZW5kaWYKK2RpZmYgLS1naXQgYS9zcmMvZGVtb3MvTWFrZWZpbGUuYW0gYi9zcmMvZGVtb3MvTWFrZWZpbGUuYW0KK2luZGV4IDQxNjAzZmEuLmFiMWUzYWIgMTAwNjQ0CistLS0gYS9zcmMvZGVtb3MvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9kZW1vcy9NYWtlZmlsZS5hbQorQEAgLTMwLDkxICszMCwxMDAgQEAgQU1fTERGTEFHUyA9IFwKKyAJJChERU1PX0xJQlMpIFwKKyAJJChHTFVUX0xJQlMpCisgCisrYmluX1BST0dSQU1TID0KKysKKyBpZiBIQVZFX0dMVVQKKy1iaW5fUFJPR1JBTVMgPSBcCisraWYgSEFWRV9HTEVXCisrYmluX1BST0dSQU1TICs9IFwKKyAJYXJiZnBsaWdodCBcCisgCWFyYmZzbGlnaHQgXAorIAlhcmJvY2NsdWRlIFwKKyAJYXJib2NjbHVkZTIgXAorLQlib3VuY2UgXAorLQljbGVhcnNwZCBcCisgCWNvcHlwaXggXAorIAljdWJlbWFwIFwKKyAJY3ViZXJlbmRlciBcCisgCWRpbm9zaGFkZSBcCistCWRpc3NvbHZlIFwKKy0JZHJhd3BpeCBcCisgCWVuZ2luZSBcCisgCWZib19maXJlY3ViZSBcCisgCWZib3RleHR1cmUgXAorLQlmaXJlIFwKKyAJZm9nY29vcmQgXAorIAlmcGxpZ2h0IFwKKyAJZnNsaWdodCBcCisrCWdsb3NzIFwKKysJaXNvc3VyZiBcCisrCW11bHRpYXJiIFwKKysJcGFsdGV4IFwKKysJcG9pbnRibGFzdCBcCisrCXByb2p0ZXggXAorKwlzaGFkb3d0ZXggXAorKwlzcHJpdGVibGFzdCBcCisrCXN0ZXgzZCBcCisrCXRleHR1cmVzIFwKKysJdmFvX2RlbW8gXAorKwl3aW5wb3MKKysKKytjb3B5cGl4X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrY3ViZW1hcF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2N1YmVyZW5kZXJfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKytlbmdpbmVfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKytmYm9fZmlyZWN1YmVfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKytnbG9zc19MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2lzb3N1cmZfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyttdWx0aWFyYl9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK3Byb2p0ZXhfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyt0ZXh0dXJlc19MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK3dpbnBvc19MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2VuZGlmCisrCisraWYgSEFWRV9HTFUKKytiaW5fUFJPR1JBTVMgKz0gXAorKwlib3VuY2UgXAorKwljbGVhcnNwZCBcCisrCWRpc3NvbHZlIFwKKysJZHJhd3BpeCBcCisrCWZpcmUgXAorIAlnYW1tYSBcCisgCWdlYXJib3ggXAorIAlnZWFycyBcCisgCWdlYXJ0cmFpbiBcCisgCWdsaW5mbyBcCistCWdsb3NzIFwKKyAJZ2x0ZXN0cGVyZiBcCisgCWlwZXJzIFwKKy0JaXNvc3VyZiBcCisgCWxvZGJpYXMgXAorIAltb3JwaDNkIFwKKy0JbXVsdGlhcmIgXAorLQlwYWx0ZXggXAorIAlwaXhlbHRlc3QgXAorLQlwb2ludGJsYXN0IFwKKy0JcHJvanRleCBcCisgCXJheSBcCisgCXJlYWRwaXggXAorIAlyZWZsZWN0IFwKKyAJcmVub3JtYWwgXAorLQlzaGFkb3d0ZXggXAorIAlzaW5nbGVidWZmZXIgXAorIAlzcGVjdGV4IFwKKy0Jc3ByaXRlYmxhc3QgXAorLQlzdGV4M2QgXAorIAl0ZWFwb3QgXAorIAl0ZXJyYWluIFwKKyAJdGVzc2RlbW8gXAorIAl0ZXhjeWwgXAorIAl0ZXhlbnYgXAorLQl0ZXh0dXJlcyBcCisgCXRyaXNwZCBcCisgCXR1bm5lbDIgXAorLQl0dW5uZWwgXAorLQl2YW9fZGVtbyBcCistCXdpbnBvcworLWVuZGlmCisrCXR1bm5lbAorIAorIHR1bm5lbF9TT1VSQ0VTID0gXAorIAl0dW5uZWwuYyBcCisgCXR1bm5lbGRhdC5oCisgCistY29weXBpeF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLWN1YmVtYXBfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1jdWJlcmVuZGVyX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistZHJhd3BpeF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIGRpc3NvbHZlX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistZW5naW5lX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistZmJvX2ZpcmVjdWJlX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrZHJhd3BpeF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIGZpcmVfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1nbG9zc19MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIGlwZXJzX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistaXNvc3VyZl9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIGxvZGJpYXNfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1tdWx0aWFyYl9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLXByb2p0ZXhfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyByZWFkcGl4X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgcmVmbGVjdF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIHRlYXBvdF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIHRleGN5bF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLXRleHR1cmVzX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgdHVubmVsX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgdHVubmVsMl9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLXdpbnBvc19MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2VuZGlmCisrZW5kaWYKKyAKKyBFWFRSQV9ESVNUID0gXAorIAlSRUFETUUKK2RpZmYgLS1naXQgYS9zcmMvZWdsL01ha2VmaWxlLmFtIGIvc3JjL2VnbC9NYWtlZmlsZS5hbQoraW5kZXggZDY0YTQ5ZS4uNGZlMWNhOCAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9lZ2wvTWFrZWZpbGUuYW0KK0BAIC0yNCw4ICsyNCwxMiBAQAorIAorIFNVQkRJUlMgPSBcCisgCWVnbHV0IFwKKy0Jb3BlbmdsIFwKKy0Jb3BlbnZnIFwKKyAJb3BlbmdsZXMxIFwKKyAJb3BlbmdsZXMyIFwKKyAJb2VzX3ZnCisrCisraWYgSEFWRV9HTFUKKytTVUJESVJTICs9IFwKKysJb3BlbmdsIFwKKysJb3BlbnZnCisrZW5kaWYKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbSBiL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtCitpbmRleCA3YTk4MjhkLi4zNDU1ZTc1IDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtCitAQCAtMzYsMjggKzM2LDQzIEBAIEFNX0xERkxBR1MgPSBcCisgCSQoRUdMX0xJQlMpIFwKKyAJLWxtCisgCisrbm9pbnN0X1BST0dSQU1TID0KKysKKyBpZiBIQVZFX0VHTAorIGlmIEhBVkVfR0xFU1YxCistbm9pbnN0X1BST0dSQU1TID0gXAorLQliaW5kdGV4IFwKKy0JY2xlYXIgXAorK25vaW5zdF9QUk9HUkFNUyArPSBcCisgCWRyYXd0ZXhfc2NyZWVuIFwKKysJZ2VhcnNfc2NyZWVuIFwKKysJdG9ydXNfc2NyZWVuIFwKKysJdHJpX3NjcmVlbgorKworK2RyYXd0ZXhfc2NyZWVuX1NPVVJDRVMgPSBkcmF3dGV4LmMKKytnZWFyc19zY3JlZW5fU09VUkNFUyA9IGdlYXJzLmMKKyt0b3J1c19zY3JlZW5fU09VUkNFUyA9IHRvcnVzLmMKKyt0cmlfc2NyZWVuX1NPVVJDRVMgPSB0cmkuYworKworK2RyYXd0ZXhfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCisrZ2VhcnNfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCisrdG9ydXNfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCisrdHJpX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorKworK2lmIEhBVkVfWDExCisrbm9pbnN0X1BST0dSQU1TICs9IFwKKysJY2xlYXIKKysKKytiaW5fUFJPR1JBTVMgPSBcCisrCWJpbmR0ZXggXAorIAlkcmF3dGV4X3gxMSBcCisgCWVnbGZiZGV2IFwKKyAJZXMxX2luZm8gXAorLQlnZWFyc19zY3JlZW4gXAorIAlnZWFyc194MTEgXAorIAltc2FhIFwKKyAJcGJ1ZmZlclwKKyAJcmVuZGVyX3RleCBcCisgCXRleHR1cmVfZnJvbV9waXhtYXAgXAorLQl0b3J1c19zY3JlZW4gXAorIAl0b3J1c194MTEgXAorLQl0cmlfc2NyZWVuIFwKKyAJdHJpX3gxMSBcCisgCXR3b193aW4KKy1lbmRpZgorLWVuZGlmCisgCisgYmluZHRleF9MREFERCA9ICQoWDExX0xJQlMpCisgZXMxX2luZm9fTERBREQgPSAkKFgxMV9MSUJTKQorQEAgLTcxLDIyICs4NiwxNSBAQCB0d29fd2luX0xEQUREID0gJChYMTFfTElCUykKKyBjbGVhcl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3gxMS5sYSAkKEVHTF9MSUJTKSAkKFgxMV9MSUJTKQorIGNsZWFyX0xERkxBR1MgPQorIAorLWRyYXd0ZXhfc2NyZWVuX1NPVVJDRVMgPSBkcmF3dGV4LmMKKy1nZWFyc19zY3JlZW5fU09VUkNFUyA9IGdlYXJzLmMKKy10b3J1c19zY3JlZW5fU09VUkNFUyA9IHRvcnVzLmMKKy10cmlfc2NyZWVuX1NPVVJDRVMgPSB0cmkuYworLQorIGRyYXd0ZXhfeDExX1NPVVJDRVMgPSBkcmF3dGV4LmMKKyBnZWFyc194MTFfU09VUkNFUyA9IGdlYXJzLmMKKyB0b3J1c194MTFfU09VUkNFUyA9IHRvcnVzLmMKKyB0cmlfeDExX1NPVVJDRVMgPSB0cmkuYworIAorLWRyYXd0ZXhfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCistZ2VhcnNfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCistdG9ydXNfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCistdHJpX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorLQorIGRyYXd0ZXhfeDExX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfeDExLmxhCisgZ2VhcnNfeDExX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfeDExLmxhCisgdG9ydXNfeDExX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfeDExLmxhCisgdHJpX3gxMV9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3gxMS5sYQorK2VuZGlmCisrZW5kaWYKKytlbmRpZgorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsZXMyL01ha2VmaWxlLmFtIGIvc3JjL2VnbC9vcGVuZ2xlczIvTWFrZWZpbGUuYW0KK2luZGV4IDQxYzFiODAuLjc0YWY0NjAgMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW5nbGVzMi9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2VnbC9vcGVuZ2xlczIvTWFrZWZpbGUuYW0KK0BAIC0zNiwyNiArMzYsMjkgQEAgQU1fTERGTEFHUyA9IFwKKyBpZiBIQVZFX0VHTAorIGlmIEhBVkVfR0xFU1YyCisgYmluX1BST0dSQU1TID0gXAorLQllczJfaW5mbyBcCistCWVzMmdlYXJzX3NjcmVlbiBcCistCWVzMmdlYXJzX3gxMSBcCistCWVzMnRyaQorKwllczJnZWFyc19zY3JlZW4KKysKKytlczJnZWFyc19zY3JlZW5fU09VUkNFUyA9IGVzMmdlYXJzLmMKKytlczJnZWFyc19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKysKKyBpZiBIQVZFX1dBWUxBTkQKKyBiaW5fUFJPR1JBTVMgKz0gZXMyZ2VhcnNfd2F5bGFuZAorLWVuZGlmCistZW5kaWYKKy1lbmRpZgorIAorLWVzMl9pbmZvX0xEQUREID0gJChYMTFfTElCUykKKy1lczJ0cmlfTERBREQgPSAkKFgxMV9MSUJTKQorK2VzMmdlYXJzX3dheWxhbmRfU09VUkNFUyA9IGVzMmdlYXJzLmMKKytlczJnZWFyc193YXlsYW5kX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfd2F5bGFuZC5sYQorK2VuZGlmCisgCistZXMyZ2VhcnNfc2NyZWVuX1NPVVJDRVMgPSBlczJnZWFycy5jCisraWYgSEFWRV9YMTEKKytiaW5fUFJPR1JBTVMgKz0gXAorKwllczJ0cmkgXAorKwllczJfaW5mbyBcCisrCWVzMmdlYXJzX3gxMQorIAorK2VzMl9pbmZvX0xEQUREID0gJChYMTFfTElCUykKKyBlczJnZWFyc194MTFfU09VUkNFUyA9IGVzMmdlYXJzLmMKKy0KKy1lczJnZWFyc19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKy0KKyBlczJnZWFyc194MTFfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEKKytlczJ0cmlfTERBREQgPSAkKFgxMV9MSUJTKQorK2VuZGlmCisrZW5kaWYKKytlbmRpZgorIAorLWVzMmdlYXJzX3dheWxhbmRfU09VUkNFUyA9IGVzMmdlYXJzLmMKKy1lczJnZWFyc193YXlsYW5kX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfd2F5bGFuZC5sYQorLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNC1Vc2UtREVNT1NfREFUQV9ESVItdG8tbG9jYXRlLWRhdGEtZmlsZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNC1Vc2UtREVNT1NfREFUQV9ESVItdG8tbG9jYXRlLWRhdGEtZmlsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc3Yjk3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA0LVVzZS1ERU1PU19EQVRBX0RJUi10by1sb2NhdGUtZGF0YS1maWxlcy5wYXRjaApAQCAtMCwwICsxLDIzNCBAQAorRnJvbSA1ZTEwMTA4ZDc2YTU5YWJhYzIxYzdlNTQwYmNmZDJkZGFjY2NhMmNiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KK0RhdGU6IEZyaSwgOSBNYXkgMjAxNCAxMTo1MDoyNCAtMDQwMAorU3ViamVjdDogW1BBVENIIDQvOV0gVXNlIERFTU9TX0RBVEFfRElSIHRvIGxvY2F0ZSBkYXRhIGZpbGVzCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD03ODQ5Nl0KK1NpZ25lZC1vZmYtYnk6IERyZXcgTW9zZWxleSA8ZHJld19tb3NlbGV5QG1lbnRvci5jb20+CistLS0KKyBzcmMvZ2xzbC9iZXppZXIuYyAgICAgICAgICAgfCAgMiArLQorIHNyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5jICB8ICA0ICsrLS0KKyBzcmMvZ2xzbC9icmljay5jICAgICAgICAgICAgfCAgNCArKy0tCisgc3JjL2dsc2wvYnVtcC5jICAgICAgICAgICAgIHwgIDYgKysrLS0tCisgc3JjL2dsc2wvY29udm9sdXRpb25zLmMgICAgIHwgIDIgKy0KKyBzcmMvZ2xzbC9tYW5kZWxicm90LmMgICAgICAgfCAgNCArKy0tCisgc3JjL2dsc2wvbXVsdGl0ZXguYyAgICAgICAgIHwgIDQgKystLQorIHNyYy9nbHNsL3NpbXBsZXgtbm9pc2UuYyAgICB8ICAyICstCisgc3JjL2dsc2wvc2tpbm5pbmcuYyAgICAgICAgIHwgIDQgKystLQorIHNyYy9nbHNsL3RleGRlbW8xLmMgICAgICAgICB8ICA4ICsrKystLS0tCisgc3JjL2dsc2wvdG95YmFsbC5jICAgICAgICAgIHwgIDQgKystLQorIHNyYy9vYmp2aWV3ZXIvb2Jqdmlldy5jICAgICB8IDEyICsrKysrKy0tLS0tLQorIHNyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UuYyB8ICA4ICsrKystLS0tCisgMTMgZmlsZXMgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9iZXppZXIuYyBiL3NyYy9nbHNsL2Jlemllci5jCitpbmRleCAwYjU2YmMxLi5lMDE2MDNkIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvYmV6aWVyLmMKKysrKyBiL3NyYy9nbHNsL2Jlemllci5jCitAQCAtMTMsNyArMTMsNyBAQAorICNpbmNsdWRlICJnbHV0X3dyYXAuaCIKKyAjaW5jbHVkZSAic2hhZGVydXRpbC5oIgorIAorLXN0YXRpYyBjb25zdCBjaGFyICpmaWxlbmFtZSA9ICJiZXppZXIuZ2VvbSI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKmZpbGVuYW1lID0gREVNT1NfREFUQV9ESVIgImJlemllci5nZW9tIjsKKyAKKyBzdGF0aWMgR0x1aW50IGZyYWdTaGFkZXI7Cisgc3RhdGljIEdMdWludCB2ZXJ0U2hhZGVyOworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5jIGIvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmMKK2luZGV4IGUzYmYyNGQuLjc2NjJiMWYgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QuYworKysrIGIvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmMKK0BAIC02Myw4ICs2Myw4IEBAIGluaXRfb3BlbmdsICh2b2lkKQorICAgICAgZXhpdCgxKTsKKyAgIH0gICAgIAorIAorLSAgdnNoYWRfaWQgPSBDb21waWxlU2hhZGVyRmlsZSAoR0xfVkVSVEVYX1NIQURFUiwgImJsaW5raW5nLXRlYXBvdC52ZXJ0Iik7CistICBmc2hhZF9pZCA9IENvbXBpbGVTaGFkZXJGaWxlIChHTF9GUkFHTUVOVF9TSEFERVIsICJibGlua2luZy10ZWFwb3QuZnJhZyIpOworKyAgdnNoYWRfaWQgPSBDb21waWxlU2hhZGVyRmlsZSAoR0xfVkVSVEVYX1NIQURFUiwgREVNT1NfREFUQV9ESVIgImJsaW5raW5nLXRlYXBvdC52ZXJ0Iik7CisrICBmc2hhZF9pZCA9IENvbXBpbGVTaGFkZXJGaWxlIChHTF9GUkFHTUVOVF9TSEFERVIsIERFTU9TX0RBVEFfRElSICJibGlua2luZy10ZWFwb3QuZnJhZyIpOworICAgcHJvZ19pZCA9IExpbmtTaGFkZXJzICh2c2hhZF9pZCwgZnNoYWRfaWQpOworIAorICAgVXNlUHJvZ3JhbSAocHJvZ19pZCk7CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvYnJpY2suYyBiL3NyYy9nbHNsL2JyaWNrLmMKK2luZGV4IDMwMjE4NTYuLmZlNWYxOTAgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9icmljay5jCisrKysgYi9zcmMvZ2xzbC9icmljay5jCitAQCAtMTQsOCArMTQsOCBAQAorICNpbmNsdWRlICJzaGFkZXJ1dGlsLmgiCisgCisgCistc3RhdGljIGNoYXIgKkZyYWdQcm9nRmlsZSA9ICJDSDA2LWJyaWNrLmZyYWciOworLXN0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSAiQ0gwNi1icmljay52ZXJ0IjsKKytzdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gREVNT1NfREFUQV9ESVIgIkNIMDYtYnJpY2suZnJhZyI7Cisrc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJDSDA2LWJyaWNrLnZlcnQiOworIAorIC8qIHByb2dyYW0vc2hhZGVyIG9iamVjdHMgKi8KKyBzdGF0aWMgR0x1aW50IGZyYWdTaGFkZXI7CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvYnVtcC5jIGIvc3JjL2dsc2wvYnVtcC5jCitpbmRleCA1OWY2MmNkLi4zYTFiMjBhIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvYnVtcC5jCisrKysgYi9zcmMvZ2xzbC9idW1wLmMKK0BAIC0xNSw5ICsxNSw5IEBACisgI2luY2x1ZGUgInJlYWR0ZXguaCIKKyAKKyAKKy1zdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gIkNIMTEtYnVtcG1hcC5mcmFnIjsKKy1zdGF0aWMgY2hhciAqRnJhZ1RleFByb2dGaWxlID0gIkNIMTEtYnVtcG1hcHRleC5mcmFnIjsKKy1zdGF0aWMgY2hhciAqVmVydFByb2dGaWxlID0gIkNIMTEtYnVtcG1hcC52ZXJ0IjsKKytzdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gREVNT1NfREFUQV9ESVIgIkNIMTEtYnVtcG1hcC5mcmFnIjsKKytzdGF0aWMgY2hhciAqRnJhZ1RleFByb2dGaWxlID0gREVNT1NfREFUQV9ESVIgIkNIMTEtYnVtcG1hcHRleC5mcmFnIjsKKytzdGF0aWMgY2hhciAqVmVydFByb2dGaWxlID0gREVNT1NfREFUQV9ESVIgIkNIMTEtYnVtcG1hcC52ZXJ0IjsKKyBzdGF0aWMgY2hhciAqVGV4dHVyZUZpbGUgPSBERU1PU19EQVRBX0RJUiAidGlsZS5yZ2IiOworIAorIC8qIHByb2dyYW0vc2hhZGVyIG9iamVjdHMgKi8KK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9jb252b2x1dGlvbnMuYyBiL3NyYy9nbHNsL2NvbnZvbHV0aW9ucy5jCitpbmRleCBhMTIwY2ZlLi45MzEyZjAwIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvY29udm9sdXRpb25zLmMKKysrKyBiL3NyYy9nbHNsL2NvbnZvbHV0aW9ucy5jCitAQCAtMzQwLDcgKzM0MCw3IEBAIHN0YXRpYyB2b2lkIGluaXQodm9pZCkKKyAKKyAgICBtZW51SW5pdCgpOworICAgIHJlYWRUZXh0dXJlKHRleHR1cmVMb2NhdGlvbik7CistICAgY3JlYXRlUHJvZ3JhbSgiY29udm9sdXRpb24udmVydCIsICJjb252b2x1dGlvbi5mcmFnIik7CisrICAgY3JlYXRlUHJvZ3JhbShERU1PU19EQVRBX0RJUiAiY29udm9sdXRpb24udmVydCIsIERFTU9TX0RBVEFfRElSICJjb252b2x1dGlvbi5mcmFnIik7CisgCisgICAgZ2xFbmFibGUoR0xfVEVYVFVSRV8yRCk7CisgICAgZ2xDbGVhckNvbG9yKDEuMCwgMS4wLCAxLjAsIDEuMCk7CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvbWFuZGVsYnJvdC5jIGIvc3JjL2dsc2wvbWFuZGVsYnJvdC5jCitpbmRleCAzMWVkZTFkLi5hYjM0YTBmIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvbWFuZGVsYnJvdC5jCisrKysgYi9zcmMvZ2xzbC9tYW5kZWxicm90LmMKK0BAIC0xNCw4ICsxNCw4IEBACisgI2luY2x1ZGUgInNoYWRlcnV0aWwuaCIKKyAKKyAKKy1zdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gIkNIMTgtbWFuZGVsLmZyYWciOworLXN0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSAiQ0gxOC1tYW5kZWwudmVydCI7Cisrc3RhdGljIGNoYXIgKkZyYWdQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJDSDE4LW1hbmRlbC5mcmFnIjsKKytzdGF0aWMgY2hhciAqVmVydFByb2dGaWxlID0gREVNT1NfREFUQV9ESVIgIkNIMTgtbWFuZGVsLnZlcnQiOworIAorIC8qIHByb2dyYW0vc2hhZGVyIG9iamVjdHMgKi8KKyBzdGF0aWMgR0x1aW50IGZyYWdTaGFkZXI7CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvbXVsdGl0ZXguYyBiL3NyYy9nbHNsL211bHRpdGV4LmMKK2luZGV4IDI2MmVhNTAuLjU0NmJkMjcgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9tdWx0aXRleC5jCisrKysgYi9zcmMvZ2xzbC9tdWx0aXRleC5jCitAQCAtMzUsOCArMzUsOCBAQAorIAorIHN0YXRpYyBjb25zdCBjaGFyICpEZW1vID0gIm11bHRpdGV4IjsKKyAKKy1zdGF0aWMgY29uc3QgY2hhciAqVmVydEZpbGUgPSAibXVsdGl0ZXgudmVydCI7Cistc3RhdGljIGNvbnN0IGNoYXIgKkZyYWdGaWxlID0gIm11bHRpdGV4LmZyYWciOworK3N0YXRpYyBjb25zdCBjaGFyICpWZXJ0RmlsZSA9IERFTU9TX0RBVEFfRElSICJtdWx0aXRleC52ZXJ0IjsKKytzdGF0aWMgY29uc3QgY2hhciAqRnJhZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAibXVsdGl0ZXguZnJhZyI7CisgCisgc3RhdGljIGNvbnN0IGNoYXIgKlRleEZpbGVzWzJdID0gCisgICAgeworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL3NpbXBsZXgtbm9pc2UuYyBiL3NyYy9nbHNsL3NpbXBsZXgtbm9pc2UuYworaW5kZXggMTNmZGQ1ZC4uODg1ZjAxZSAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL3NpbXBsZXgtbm9pc2UuYworKysrIGIvc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5jCitAQCAtMTY5LDcgKzE2OSw3IEBAIFNwZWNpYWxLZXkoaW50IGtleSwgaW50IHgsIGludCB5KQorIHN0YXRpYyB2b2lkCisgSW5pdCh2b2lkKQorIHsKKy0gICBjb25zdCBjaGFyICpmaWxlbmFtZSA9ICJzaW1wbGV4LW5vaXNlLmdsc2wiOworKyAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lID0gREVNT1NfREFUQV9ESVIgInNpbXBsZXgtbm9pc2UuZ2xzbCI7CisgICAgY2hhciBub2lzZVRleHRbMTAwMDBdOworICAgIEZJTEUgKmY7CisgICAgaW50IGxlbjsKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9za2lubmluZy5jIGIvc3JjL2dsc2wvc2tpbm5pbmcuYworaW5kZXggYmYzOGQ3Ny4uNTM2ZDQ3NSAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL3NraW5uaW5nLmMKKysrKyBiL3NyYy9nbHNsL3NraW5uaW5nLmMKK0BAIC0yMCw4ICsyMCw4IEBACisgI2RlZmluZSBNX1BJIDMuMTQxNTkyNjUzNQorICNlbmRpZgorIAorLXN0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSAic2tpbm5pbmcuZnJhZyI7Cistc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9ICJza2lubmluZy52ZXJ0IjsKKytzdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gREVNT1NfREFUQV9ESVIgInNraW5uaW5nLmZyYWciOworK3N0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAic2tpbm5pbmcudmVydCI7CisgCisgLyogcHJvZ3JhbS9zaGFkZXIgb2JqZWN0cyAqLworIHN0YXRpYyBHTHVpbnQgZnJhZ1NoYWRlcjsKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC90ZXhkZW1vMS5jIGIvc3JjL2dsc2wvdGV4ZGVtbzEuYworaW5kZXggNmNkZTIzOS4uYTA4MjM0MiAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL3RleGRlbW8xLmMKKysrKyBiL3NyYy9nbHNsL3RleGRlbW8xLmMKK0BAIC0zNSwxMSArMzUsMTEgQEAKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqRGVtbyA9ICJ0ZXhkZW1vMSI7CisgCistc3RhdGljIGNvbnN0IGNoYXIgKlJlZmxlY3RWZXJ0RmlsZSA9ICJyZWZsZWN0LnZlcnQiOworLXN0YXRpYyBjb25zdCBjaGFyICpDdWJlRnJhZ0ZpbGUgPSAiY3ViZW1hcC5mcmFnIjsKKytzdGF0aWMgY29uc3QgY2hhciAqUmVmbGVjdFZlcnRGaWxlID0gREVNT1NfREFUQV9ESVIgInJlZmxlY3QudmVydCI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKkN1YmVGcmFnRmlsZSA9IERFTU9TX0RBVEFfRElSICJjdWJlbWFwLmZyYWciOworIAorLXN0YXRpYyBjb25zdCBjaGFyICpTaW1wbGVWZXJ0RmlsZSA9ICJzaW1wbGUudmVydCI7Cistc3RhdGljIGNvbnN0IGNoYXIgKlNpbXBsZVRleEZyYWdGaWxlID0gInNoYWRvd3RleC5mcmFnIjsKKytzdGF0aWMgY29uc3QgY2hhciAqU2ltcGxlVmVydEZpbGUgPSBERU1PU19EQVRBX0RJUiAic2ltcGxlLnZlcnQiOworK3N0YXRpYyBjb25zdCBjaGFyICpTaW1wbGVUZXhGcmFnRmlsZSA9IERFTU9TX0RBVEFfRElSICJzaGFkb3d0ZXguZnJhZyI7CisgCisgc3RhdGljIGNvbnN0IGNoYXIgKkdyb3VuZEltYWdlID0gREVNT1NfREFUQV9ESVIgInRpbGUucmdiIjsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC90b3liYWxsLmMgYi9zcmMvZ2xzbC90b3liYWxsLmMKK2luZGV4IDVmMjc5NTEuLjRlN2U4MzIgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC90b3liYWxsLmMKKysrKyBiL3NyYy9nbHNsL3RveWJhbGwuYworQEAgLTE0LDggKzE0LDggQEAKKyAjaW5jbHVkZSAic2hhZGVydXRpbC5oIgorIAorIAorLXN0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSAiQ0gxMS10b3liYWxsLmZyYWciOworLXN0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSAiQ0gxMS10b3liYWxsLnZlcnQiOworK3N0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gxMS10b3liYWxsLmZyYWciOworK3N0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gxMS10b3liYWxsLnZlcnQiOworIAorIC8qIHByb2dyYW0vc2hhZGVyIG9iamVjdHMgKi8KKyBzdGF0aWMgR0x1aW50IGZyYWdTaGFkZXI7CitkaWZmIC0tZ2l0IGEvc3JjL29ianZpZXdlci9vYmp2aWV3LmMgYi9zcmMvb2Jqdmlld2VyL29ianZpZXcuYworaW5kZXggNmRlZjcyNi4uNzhhNmFjZiAxMDA2NDQKKy0tLSBhL3NyYy9vYmp2aWV3ZXIvb2Jqdmlldy5jCisrKysgYi9zcmMvb2Jqdmlld2VyL29ianZpZXcuYworQEAgLTE2MiwxMiArMTYyLDEyIEBAIGluaXRfbW9kZWwodm9pZCkKKyBzdGF0aWMgdm9pZAorIGluaXRfc2t5Ym94KHZvaWQpCisgeworLSAgIFNreWJveFRleCA9IExvYWRTa3lCb3hDdWJlVGV4dHVyZSgiYWxwaW5lX2Vhc3QucmdiIiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFscGluZV93ZXN0LnJnYiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbHBpbmVfdXAucmdiIiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFscGluZV9kb3duLnJnYiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbHBpbmVfc291dGgucmdiIiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFscGluZV9ub3J0aC5yZ2IiKTsKKysgICBTa3lib3hUZXggPSBMb2FkU2t5Qm94Q3ViZVRleHR1cmUoREVNT1NfREFUQV9ESVIgImFscGluZV9lYXN0LnJnYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFTU9TX0RBVEFfRElSICJhbHBpbmVfd2VzdC5yZ2IiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERU1PU19EQVRBX0RJUiAiYWxwaW5lX3VwLnJnYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFTU9TX0RBVEFfRElSICJhbHBpbmVfZG93bi5yZ2IiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERU1PU19EQVRBX0RJUiAiYWxwaW5lX3NvdXRoLnJnYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFTU9TX0RBVEFfRElSICJhbHBpbmVfbm9ydGgucmdiIik7CisgICAgZ2xtU3BlY3VsYXJUZXh0dXJlKE1vZGVsLCBTa3lib3hUZXgpOworIH0KKyAKK2RpZmYgLS1naXQgYS9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlLmMgYi9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlLmMKK2luZGV4IDc0MjJiNzguLmRiZjgzMzIgMTAwNjQ0CistLS0gYS9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlLmMKKysrKyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UuYworQEAgLTMzLDEwICszMywxMCBAQAorICNpbmNsdWRlICJnbG1haW4uaCIKKyAjaW5jbHVkZSAiY29tbW9uLmgiCisgCistc3RhdGljIGNvbnN0IGNoYXIgKlZlcnRGaWxlMSA9ICJnbHNsc3RhdGVzY2hhbmdlMS52ZXJ0IjsKKy1zdGF0aWMgY29uc3QgY2hhciAqRnJhZ0ZpbGUxID0gImdsc2xzdGF0ZXNjaGFuZ2UxLmZyYWciOworLXN0YXRpYyBjb25zdCBjaGFyICpWZXJ0RmlsZTIgPSAiZ2xzbHN0YXRlc2NoYW5nZTIudmVydCI7Cistc3RhdGljIGNvbnN0IGNoYXIgKkZyYWdGaWxlMiA9ICJnbHNsc3RhdGVzY2hhbmdlMi5mcmFnIjsKKytzdGF0aWMgY29uc3QgY2hhciAqVmVydEZpbGUxID0gREVNT1NfREFUQV9ESVIgImdsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQiOworK3N0YXRpYyBjb25zdCBjaGFyICpGcmFnRmlsZTEgPSBERU1PU19EQVRBX0RJUiAiZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZyI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKlZlcnRGaWxlMiA9IERFTU9TX0RBVEFfRElSICJnbHNsc3RhdGVzY2hhbmdlMi52ZXJ0IjsKKytzdGF0aWMgY29uc3QgY2hhciAqRnJhZ0ZpbGUyID0gREVNT1NfREFUQV9ESVIgImdsc2xzdGF0ZXNjaGFuZ2UyLmZyYWciOworIHN0YXRpYyBzdHJ1Y3QgdW5pZm9ybV9pbmZvIFVuaWZvcm1zMVtdID0geworICAgIHsgInRleDEiLCAgMSwgR0xfU0FNUExFUl8yRCwgeyAwLCAwLCAwLCAwIH0sIC0xIH0sCisgICAgeyAidGV4MiIsICAxLCBHTF9TQU1QTEVSXzJELCB7IDEsIDAsIDAsIDAgfSwgLTEgfSwKKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDUtRml4LWJ1aWxkLXdoZW4tRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLWlzbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA1LUZpeC1idWlsZC13aGVuLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi1pc24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFjMmEzNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA1LUZpeC1idWlsZC13aGVuLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi1pc24ucGF0Y2gKQEAgLTAsMCArMSwyNjcgQEAKK0Zyb20gNDUzMzUzYTIyMWRlOWM2NDQ3OWY0MzcyNTY1ZDJjZDg1OTFiMzZjYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZyYW5rIEJpbm5zIDxmcmFuay5iaW5uc0BpbWd0ZWMuY29tPgorRGF0ZTogRnJpLCAyOSBKdW4gMjAxMiAxMToyNjowNCArMDEwMAorU3ViamVjdDogW1BBVENIIDUvOV0gRml4IGJ1aWxkIHdoZW4gRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UgZXh0ZW5zaW9uIGlzbid0CisgcHJlc2VudAorCitUaGUgRUdMIGRlbW9zIHdvbid0IGJ1aWxkIGFnYWluc3QgRUdMIGltcGxlbWVudGF0aW9ucyB0aGF0IGRvbid0IHN1cHBvcnQKK3RoZSBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBleHRlbnNpb24uIEZpeCB0aGlzLCBpbiBtb3N0IGNhc2VzLCBieQord3JhcHBpbmcgcmVsZXZhbnQgYml0cyBvZiBjb2RlIGluICNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS4KKworU2lnbmVkLW9mZi1ieTogRnJhbmsgQmlubnMgPGZyYW5rLmJpbm5zQGltZ3RlYy5jb20+CisKK0FwcGxpZWQgYW5kIGZpeGVkIHVwIGluIFlvY3RvIGJ5Li4uCisKK0ludGVncmF0ZWQtYnk6IFRvbSBaYW51c3NpIDx0b20uemFudXNzaUBsaW51eC5pbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgc3JjL2VnbC9lZ2x1dC9lZ2x1dC5jICAgICAgICB8ICA5ICsrKysrKystLQorIHNyYy9lZ2wvZWdsdXQvZWdsdXRfc2NyZWVuLmMgfCAxNCArKysrKysrKysrKysrKworIHNyYy9lZ2wvb3BlbmdsL2RlbW8xLmMgICAgICAgfCAgMiArKworIHNyYy9lZ2wvb3BlbmdsL2RlbW8yLmMgICAgICAgfCAgNyArKysrKystCisgc3JjL2VnbC9vcGVuZ2wvZGVtbzMuYyAgICAgICB8ICA3ICsrKysrKy0KKyA1IGZpbGVzIGNoYW5nZWQsIDM1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZWdsL2VnbHV0L2VnbHV0LmMgYi9zcmMvZWdsL2VnbHV0L2VnbHV0LmMKK2luZGV4IDJlZTZmMTUuLmY2YTJhZDQgMTAwNjQ0CistLS0gYS9zcmMvZWdsL2VnbHV0L2VnbHV0LmMKKysrKyBiL3NyYy9lZ2wvZWdsdXQvZWdsdXQuYworQEAgLTc2LDggKzc2LDkgQEAgX2VnbHV0Tm93KHZvaWQpCisgc3RhdGljIHZvaWQKKyBfZWdsdXREZXN0cm95V2luZG93KHN0cnVjdCBlZ2x1dF93aW5kb3cgKndpbikKKyB7CistICAgaWYgKF9lZ2x1dC0+c3VyZmFjZV90eXBlICE9IEVHTF9QQlVGRkVSX0JJVCAmJgorLSAgICAgICBfZWdsdXQtPnN1cmZhY2VfdHlwZSAhPSBFR0xfU0NSRUVOX0JJVF9NRVNBKQorKworKyAgIGlmIChfZWdsdXQtPnN1cmZhY2VfdHlwZSA9PSBFR0xfV0lORE9XX0JJVCB8fAorKyAgICAgICBfZWdsdXQtPnN1cmZhY2VfdHlwZSA9PSBFR0xfUElYTUFQX0JJVCkKKyAgICAgICBlZ2xEZXN0cm95U3VyZmFjZShfZWdsdXQtPmRweSwgd2luLT5zdXJmYWNlKTsKKyAKKyAgICBfZWdsdXROYXRpdmVGaW5pV2luZG93KHdpbik7CitAQCAtMTc1LDcgKzE3Niw5IEBAIF9lZ2x1dENyZWF0ZVdpbmRvdyhjb25zdCBjaGFyICp0aXRsZSwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCisgICAgICAgICAgICAgd2luLT5jb25maWcsIHdpbi0+bmF0aXZlLnUucGl4bWFwLCBOVUxMKTsKKyAgICAgICBicmVhazsKKyAgICBjYXNlIEVHTF9QQlVGRkVSX0JJVDoKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBjYXNlIEVHTF9TQ1JFRU5fQklUX01FU0E6CisrI2VuZGlmCisgICAgICAgd2luLT5zdXJmYWNlID0gd2luLT5uYXRpdmUudS5zdXJmYWNlOworICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CitAQCAtMjg5LDggKzI5MiwxMCBAQCBlZ2x1dERlc3Ryb3lXaW5kb3coaW50IHdpbikKKyAgICBpZiAod2luZG93LT5pbmRleCAhPSB3aW4pCisgICAgICAgcmV0dXJuOworIAorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIC8qIFhYWCBpdCBjYXVzZXMgc29tZSBidWcgaW4gc3QvZWdsIEtNUyBiYWNrZW5kICovCisgICAgaWYgKCBfZWdsdXQtPnN1cmZhY2VfdHlwZSAhPSBFR0xfU0NSRUVOX0JJVF9NRVNBKQorKyNlbmRpZgorICAgICAgIGVnbE1ha2VDdXJyZW50KF9lZ2x1dC0+ZHB5LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKKyAKKyAgICBfZWdsdXREZXN0cm95V2luZG93KF9lZ2x1dC0+Y3VycmVudCk7CitkaWZmIC0tZ2l0IGEvc3JjL2VnbC9lZ2x1dC9lZ2x1dF9zY3JlZW4uYyBiL3NyYy9lZ2wvZWdsdXQvZWdsdXRfc2NyZWVuLmMKK2luZGV4IDAyMWE4ZjEuLjA5NGE0ZTIgMTAwNjQ0CistLS0gYS9zcmMvZWdsL2VnbHV0L2VnbHV0X3NjcmVlbi5jCisrKysgYi9zcmMvZWdsL2VnbHV0L2VnbHV0X3NjcmVlbi5jCitAQCAtMzUsMjYgKzM1LDMzIEBACisgCisgI2RlZmluZSBNQVhfTU9ERVMgMTAwCisgCisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgc3RhdGljIEVHTFNjcmVlbk1FU0Ega21zX3NjcmVlbjsKKyBzdGF0aWMgRUdMTW9kZU1FU0Ega21zX21vZGU7Cisgc3RhdGljIEVHTGludCBrbXNfd2lkdGgsIGttc19oZWlnaHQ7CisrI2VuZGlmCisgCisgdm9pZAorIF9lZ2x1dE5hdGl2ZUluaXREaXNwbGF5KHZvaWQpCisgeworKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIF9lZ2x1dC0+bmF0aXZlX2RweSA9IEVHTF9ERUZBVUxUX0RJU1BMQVk7CisgICAgX2VnbHV0LT5zdXJmYWNlX3R5cGUgPSBFR0xfU0NSRUVOX0JJVF9NRVNBOworKyNlbmRpZgorIH0KKyAKKyB2b2lkCisgX2VnbHV0TmF0aXZlRmluaURpc3BsYXkodm9pZCkKKyB7CisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAga21zX3NjcmVlbiA9IDA7CisgICAga21zX21vZGUgPSAwOworICAgIGttc193aWR0aCA9IDA7CisgICAga21zX2hlaWdodCA9IDA7CisrI2VuZGlmCisgfQorIAorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorIHN0YXRpYyB2b2lkCisgaW5pdF9rbXModm9pZCkKKyB7CitAQCAtOTQsMTkgKzEwMSwyMyBAQCBpbml0X2ttcyh2b2lkKQorICAgIGttc193aWR0aCA9IHdpZHRoOworICAgIGttc19oZWlnaHQgPSBoZWlnaHQ7CisgfQorKyNlbmRpZgorIAorIHZvaWQKKyBfZWdsdXROYXRpdmVJbml0V2luZG93KHN0cnVjdCBlZ2x1dF93aW5kb3cgKndpbiwgY29uc3QgY2hhciAqdGl0bGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKKyB7CisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgRUdMaW50IHN1cmZfYXR0cmlic1sxNl07CisgICAgRUdMaW50IGk7CisrI2VuZGlmCisgICAgY29uc3QgY2hhciAqZXh0czsKKyAKKyAgICBleHRzID0gZWdsUXVlcnlTdHJpbmcoX2VnbHV0LT5kcHksIEVHTF9FWFRFTlNJT05TKTsKKyAgICBpZiAoIWV4dHMgfHwgIXN0cnN0cihleHRzLCAiRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UiKSkKKyAgICAgICBfZWdsdXRGYXRhbCgiRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UgaXMgbm90IHN1cHBvcnRlZFxuIik7CisgCisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgaW5pdF9rbXMoKTsKKyAKKyAgICBpID0gMDsKK0BAIC0xMjgsMTQgKzEzOSwxNyBAQCBfZWdsdXROYXRpdmVJbml0V2luZG93KHN0cnVjdCBlZ2x1dF93aW5kb3cgKndpbiwgY29uc3QgY2hhciAqdGl0bGUsCisgCisgICAgd2luLT5uYXRpdmUud2lkdGggPSBrbXNfd2lkdGg7CisgICAgd2luLT5uYXRpdmUuaGVpZ2h0ID0ga21zX2hlaWdodDsKKysjZW5kaWYKKyB9CisgCisgdm9pZAorIF9lZ2x1dE5hdGl2ZUZpbmlXaW5kb3coc3RydWN0IGVnbHV0X3dpbmRvdyAqd2luKQorIHsKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBlZ2xTaG93U2NyZWVuU3VyZmFjZU1FU0EoX2VnbHV0LT5kcHksCisgICAgICAgICAga21zX3NjcmVlbiwgRUdMX05PX1NVUkZBQ0UsIDApOworICAgIGVnbERlc3Ryb3lTdXJmYWNlKF9lZ2x1dC0+ZHB5LCB3aW4tPm5hdGl2ZS51LnN1cmZhY2UpOworKyNlbmRpZgorIH0KKyAKKyB2b2lkCitkaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKK2luZGV4IGQ4OTI3MzQuLjNhMzU2NGMgMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW5nbC9kZW1vMS5jCisrKysgYi9zcmMvZWdsL29wZW5nbC9kZW1vMS5jCitAQCAtMTgsNiArMTgsNyBAQAorIHN0YXRpYyB2b2lkCisgVGVzdFNjcmVlbnMoRUdMRGlzcGxheSBkcHkpCisgeworKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICNkZWZpbmUgTUFYIDgKKyAgICBFR0xTY3JlZW5NRVNBIHNjcmVlbnNbTUFYXTsKKyAgICBFR0xpbnQgbnVtU2NyZWVuczsKK0BAIC0yOCw2ICsyOSw3IEBAIFRlc3RTY3JlZW5zKEVHTERpc3BsYXkgZHB5KQorICAgIGZvciAoaSA9IDA7IGkgPCBudW1TY3JlZW5zOyBpKyspIHsKKyAgICAgICBwcmludGYoIiBTY3JlZW4gJWQgaGFuZGxlOiAlZFxuIiwgaSwgKGludCkgc2NyZWVuc1tpXSk7CisgICAgfQorKyNlbmRpZgorIH0KKyAKKyAvKioKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbC9kZW1vMi5jIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzIuYworaW5kZXggNTA1YjQ3NC4uYmZlZjU5ZSAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8yLmMKKysrKyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8yLmMKK0BAIC0xNiw2ICsxNiw3IEBACisgCisgLyojZGVmaW5lIEZST05UQlVGRkVSKi8KKyAKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyBzdGF0aWMgdm9pZCBfc3Vic2V0X1JlY3RmKEdMZmxvYXQgeDEsIEdMZmxvYXQgeTEsIEdMZmxvYXQgeDIsIEdMZmxvYXQgeTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGZsb2F0IHIsIEdMZmxvYXQgZywgR0xmbG9hdCBiKQorIHsKK0BAIC05NSwxMiArOTYsMTMgQEAgVGVzdFNjcmVlbnMoRUdMRGlzcGxheSBkcHkpCisgICAgICAgcHJpbnRmKCIgU2NyZWVuICVkIGhhbmRsZTogJWRcbiIsIGksIChpbnQpIHNjcmVlbnNbaV0pOworICAgIH0KKyB9CistCisrI2VuZGlmCisgCisgaW50CisgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKyAgICBpbnQgbWFqLCBtaW47CisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgRUdMQ29udGV4dCBjdHg7CisgICAgRUdMU3VyZmFjZSBwYnVmZmVyLCBzY3JlZW5fc3VyZjsKKyAgICBFR0xDb25maWcgY29uZmlnc1sxMF07CitAQCAtMTE1LDYgKzExNyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICBFR0xNb2RlTUVTQSBtb2RlOworICAgIEVHTFNjcmVlbk1FU0Egc2NyZWVuOworICAgIEVHTGludCBjb3VudDsKKysjZW5kaWYKKyAKKyAgICBFR0xEaXNwbGF5IGQgPSBlZ2xHZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOworICAgIGFzc2VydChkKTsKK0BAIC0xMzIsNiArMTM1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICAgIGV4aXQoMSk7CisgICAgfQorIAorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIGVnbEdldENvbmZpZ3MoZCwgY29uZmlncywgMTAsICZudW1Db25maWdzKTsKKyAgICBwcmludGYoIkdvdCAlZCBFR0wgY29uZmlnczpcbiIsIG51bUNvbmZpZ3MpOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1Db25maWdzOyBpKyspIHsKK0BAIC0yMTEsNiArMjE1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgIGVnbERlc3Ryb3lTdXJmYWNlKGQsIHBidWZmZXIpOworICAgIGVnbERlc3Ryb3lDb250ZXh0KGQsIGN0eCk7CisgICAgZWdsVGVybWluYXRlKGQpOworKyNlbmRpZgorIAorICAgIHJldHVybiAwOworIH0KK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbC9kZW1vMy5jIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzMuYworaW5kZXggZjg0Y2EyMy4uMzFiNWQ4YiAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8zLmMKKysrKyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8zLmMKK0BAIC00Niw3ICs0Niw3IEBAIEdMdWJ5dGUgT3BlbkdMX2JpdHNbXSA9IHsKKyAgICAweDNlLCAweDAwLCAweDAwLCAweGY4LCAweDBjLCAweDAwLCAKKyB9OworIAorLQorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorIHN0YXRpYyB2b2lkIEluaXQodm9pZCkKKyB7CisgCitAQCAtNTUxLDExICs1NTEsMTMgQEAgd3JpdGVfcHBtKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBHTHVieXRlICpidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCkKKyAgICAgICBmY2xvc2UoZik7CisgICAgfQorIH0KKysjZW5kaWYKKyAKKyBpbnQKKyBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworICAgIGludCBtYWosIG1pbjsKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBFR0xDb250ZXh0IGN0eDsKKyAgICBFR0xTdXJmYWNlIHNjcmVlbl9zdXJmOworICAgIEVHTENvbmZpZyBjb25maWdzWzEwXTsKK0BAIC01NjYsNiArNTY4LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgIGNvbnN0IEdMdWJ5dGUgKmJpdG1hcDsKKyAgICBFR0xpbnQgc2NyZWVuQXR0cmlic1szMl07CisgICAgRUdMaW50IGk7CisrI2VuZGlmCisgCisgICAgRUdMRGlzcGxheSBkID0gZWdsR2V0RGlzcGxheShFR0xfREVGQVVMVF9ESVNQTEFZKTsKKyAgICBhc3NlcnQoZCk7CitAQCAtNTgzLDYgKzU4Niw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgICBleGl0KDEpOworICAgIH0KKyAKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBlZ2xHZXRDb25maWdzKGQsIGNvbmZpZ3MsIDEwLCAmbnVtQ29uZmlncyk7CisgICAgZWdsR2V0U2NyZWVuc01FU0EoZCwgJnNjcmVlbiwgMSwgJmNvdW50KTsKKyAgICBlZ2xHZXRNb2Rlc01FU0EoZCwgc2NyZWVuLCAmbW9kZSwgMSwgJmNvdW50KTsKK0BAIC02NDIsNiArNjQ2LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgIGVnbERlc3Ryb3lTdXJmYWNlKGQsIHNjcmVlbl9zdXJmKTsKKyAgICBlZ2xEZXN0cm95Q29udGV4dChkLCBjdHgpOworICAgIGVnbFRlcm1pbmF0ZShkKTsKKysjZW5kaWYKKyAKKyAgICByZXR1cm4gMDsKKyB9CistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA2LVF1ZXJ5LWRpc3BsYXktZm9yLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNi1RdWVyeS1kaXNwbGF5LWZvci1FR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS1leHRlbnNpb24tLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZTA4MDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNi1RdWVyeS1kaXNwbGF5LWZvci1FR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS1leHRlbnNpb24tLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gNmExOWRiYTFkMjc1NTc5YzczZTc3NjNiMDU1NDQxMGZmNGUxZTY1MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZyYW5rIEJpbm5zIDxmcmFuay5iaW5uc0BpbWd0ZWMuY29tPgorRGF0ZTogRnJpLCAyOSBKdW4gMjAxMiAxMjowMDoyNiArMDEwMAorU3ViamVjdDogW1BBVENIIDYvOV0gUXVlcnkgZGlzcGxheSBmb3IgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UgZXh0ZW5zaW9uCisgYmVmb3JlIHVzaW5nIGl0CisKK1RoaXMgY29kZSBtYWtlcyBoZWF2eSB1c2Ugb2YgdGhlIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlIGV4dGVuc2lvbiBzbworY2hlY2sgdGhlIGRpc3BsYXkgdG8gZGV0ZXJtaW5lIGlmIGl0J3Mgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIEVHTAoraW1wbGVtZW50YXRpb24uIElmIGl0IGRvZXNuJ3QgdGhlbiBiYWlsLgorCitTaWduZWQtb2ZmLWJ5OiBGcmFuayBCaW5ucyA8ZnJhbmsuYmlubnNAaW1ndGVjLmNvbT4KKworQXBwbGllZCBhbmQgZml4ZWQgdXAgaW4gWW9jdG8gYnkuLi4KKworSW50ZWdyYXRlZC1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGxpbnV4LmludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBzcmMvZWdsL29wZW5nbC9kZW1vMS5jIHwgNiArKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbC9kZW1vMS5jIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYworaW5kZXggM2EzNTY0Yy4uMDZlMjEzOCAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKKysrKyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKK0BAIC0xMTAsNiArMTEwLDEyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICBwcmludGYoIkVHTCB2ZXJzaW9uID0gJWQuJWRcbiIsIG1haiwgbWluKTsKKyAgICBwcmludGYoIkVHTF9WRU5ET1IgPSAlc1xuIiwgZWdsUXVlcnlTdHJpbmcoZCwgRUdMX1ZFTkRPUikpOworIAorKyAgIGlmICghc3Ryc3RyKGVnbFF1ZXJ5U3RyaW5nKGQsIEVHTF9FWFRFTlNJT05TKSwKKysgICAgICAgICAgICAgICAiRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UiKSkgeworKyAgICAgIHByaW50ZigiRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UgaXMgbm90IHN1cHBvcnRlZFxuIik7CisrICAgICAgZXhpdCgxKTsKKysgICB9CisrCisgICAgZWdsR2V0Q29uZmlncyhkLCBOVUxMLCAwLCAmbnVtQ29uZmlncyk7CisgICAgY29uZmlncyA9IG1hbGxvYyhzaXplb2YoKmNvbmZpZ3MpICpudW1Db25maWdzKTsKKyAgICBlZ2xHZXRDb25maWdzKGQsIGNvbmZpZ3MsIG51bUNvbmZpZ3MsICZudW1Db25maWdzKTsKKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDctSW5zdGFsbC1mZXctbW9yZS10ZXN0LXByb2dyYW1zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDctSW5zdGFsbC1mZXctbW9yZS10ZXN0LXByb2dyYW1zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZDJmYWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNy1JbnN0YWxsLWZldy1tb3JlLXRlc3QtcHJvZ3JhbXMucGF0Y2gKQEAgLTAsMCArMSw3NCBAQAorRnJvbSBkOTMwYjJkYTU3ZjdjOWVmYjgwYzhjZWY4ZjhhZGFkMTViYmJjMGQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxMCBKdWwgMjAxNCAxNDozMDo1MiArMDIwMAorU3ViamVjdDogW1BBVENIIDcvOV0gSW5zdGFsbCBmZXcgbW9yZSB0ZXN0IHByb2dyYW1zCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvZWdsL29wZW5nbC9NYWtlZmlsZS5hbSAgICB8ICAyICstCisgc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0gfCAxMCArKysrLS0tLS0tCisgc3JjL2VnbC9vcGVudmcvTWFrZWZpbGUuYW0gICAgfCAgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVuZ2wvTWFrZWZpbGUuYW0gYi9zcmMvZWdsL29wZW5nbC9NYWtlZmlsZS5hbQoraW5kZXggMGM3MjI4Zi4uODdiMmYxYSAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbmdsL01ha2VmaWxlLmFtCisrKysgYi9zcmMvZWdsL29wZW5nbC9NYWtlZmlsZS5hbQorQEAgLTUwLDcgKzUwLDcgQEAgZW5kaWYKKyBlbmRpZgorIAorIGlmIEhBVkVfRUdMCistbm9pbnN0X1BST0dSQU1TID0gXAorK2Jpbl9QUk9HUkFNUyA9IFwKKyAJZGVtbzEgXAorIAlkZW1vMiBcCisgCWRlbW8zIFwKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbSBiL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtCitpbmRleCAzNDU1ZTc1Li41MTZlNTE2IDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtCitAQCAtMzYsMTEgKzM2LDExIEBAIEFNX0xERkxBR1MgPSBcCisgCSQoRUdMX0xJQlMpIFwKKyAJLWxtCisgCistbm9pbnN0X1BST0dSQU1TID0KKytiaW5fUFJPR1JBTVMgPQorIAorIGlmIEhBVkVfRUdMCisgaWYgSEFWRV9HTEVTVjEKKy1ub2luc3RfUFJPR1JBTVMgKz0gXAorK2Jpbl9QUk9HUkFNUyArPSBcCisgCWRyYXd0ZXhfc2NyZWVuIFwKKyAJZ2VhcnNfc2NyZWVuIFwKKyAJdG9ydXNfc2NyZWVuIFwKK0BAIC01NywxMCArNTcsOCBAQCB0b3J1c19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKyB0cmlfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCisgCisgaWYgSEFWRV9YMTEKKy1ub2luc3RfUFJPR1JBTVMgKz0gXAorLQljbGVhcgorLQorLWJpbl9QUk9HUkFNUyA9IFwKKytiaW5fUFJPR1JBTVMgKz0gXAorKwljbGVhciBcCisgCWJpbmR0ZXggXAorIAlkcmF3dGV4X3gxMSBcCisgCWVnbGZiZGV2IFwKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW52Zy9NYWtlZmlsZS5hbSBiL3NyYy9lZ2wvb3BlbnZnL01ha2VmaWxlLmFtCitpbmRleCA3MzE4YTQzLi5iNTQ1MjI1IDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVudmcvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9lZ2wvb3BlbnZnL01ha2VmaWxlLmFtCitAQCAtNDksNyArNDksNyBAQCBlbmRpZgorIAorIGlmIEhBVkVfRUdMCisgaWYgSEFWRV9WRworLW5vaW5zdF9QUk9HUkFNUyA9IFwKKytiaW5fUFJPR1JBTVMgPSBcCisgCWxpb25fc2NyZWVuIFwKKyAJc3Bfc2NyZWVuIFwKKyAJJChFR0xfWDExX0RFTU9TKQorLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwOC1nbHNsLXBlcmYtQWRkLWZldy1taXNzaW5nLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLXRvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDgtZ2xzbC1wZXJmLUFkZC1mZXctbWlzc2luZy0uZ2xzbC0udmVydC0uZnJhZy1maWxlcy10by5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjA4NTc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDgtZ2xzbC1wZXJmLUFkZC1mZXctbWlzc2luZy0uZ2xzbC0udmVydC0uZnJhZy1maWxlcy10by5wYXRjaApAQCAtMCwwICsxLDEwMSBAQAorRnJvbSAwYjZmOTVmOWI4ZWNlMjJlOTg1NmMxNTBlNGJlMjlmZDg2ZWFmNTQ2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxMCBKdWwgMjAxNCAxNDoyOToyNyArMDIwMAorU3ViamVjdDogW1BBVENIIDgvOV0gZ2xzbCwgcGVyZjogQWRkIGZldyBtaXNzaW5nIC5nbHNsLCAudmVydCwgLmZyYWcgZmlsZXMgdG8KKyBFWFRSQV9EQVRBCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvZnBnbHNsL01ha2VmaWxlLmFtIHwgIDIgKysKKyBzcmMvZ2xzbC9NYWtlZmlsZS5hbSAgIHwgMTAgKysrKysrKystLQorIHNyYy9wZXJmL01ha2VmaWxlLmFtICAgfCAgNiArKysrKysKKyBzcmMvdnBnbHNsL01ha2VmaWxlLmFtIHwgIDEgKworIDQgZmlsZXMgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9mcGdsc2wvTWFrZWZpbGUuYW0gYi9zcmMvZnBnbHNsL01ha2VmaWxlLmFtCitpbmRleCA0N2MxMDM5Li5mZDQzYzkxIDEwMDY0NAorLS0tIGEvc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbQorQEAgLTM5LDEwICszOSwxMiBAQCBub2luc3RfUFJPR1JBTVMgPSBcCisgZW5kaWYKKyAKKyBFWFRSQV9ESVNUID0gXAorKwlkZXB0aC1yZWFkLmdsc2wgXAorIAlkb3doaWxlMi5nbHNsIFwKKyAJZG93aGlsZS5nbHNsIFwKKyAJZm9yYnJlYWsuZ2xzbCBcCisgCWZvci5nbHNsIFwKKysJaW5maW5pdGUtbG9vcC5nbHNsIFwKKyAJbW92Lmdsc2wgXAorIAltb3YtaW1tLmdsc2wgXAorIAlzaW1wbGVpZi5nbHNsIFwKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9NYWtlZmlsZS5hbSBiL3NyYy9nbHNsL01ha2VmaWxlLmFtCitpbmRleCA0ZmFhOGRiLi4wNzlhMjlkIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9nbHNsL01ha2VmaWxlLmFtCitAQCAtMzcsNyArMzcsNyBAQCBBTV9MREZMQUdTID0gXAorIGlmIEhBVkVfR0xVVAorIGJpbl9QUk9HUkFNUyA9IFwKKyAJYXJyYXkgXAorLSAgICAgICAgYmV6aWVyIFwKKysJYmV6aWVyIFwKKyAJYml0bWFwIFwKKyAJYnJpY2sgXAorIAlidW1wIFwKK0BAIC0xMjMsMTIgKzEyMywxNiBAQCBFWFRSQV9ESVNUID0gXAorIAlDSDA2LWJyaWNrLnZlcnQgXAorIAlDSDExLWJ1bXBtYXAuZnJhZyBcCisgCUNIMTEtYnVtcG1hcC52ZXJ0IFwKKysJQ0gxMS1idW1wbWFwdGV4LmZyYWcgXAorIAlDSDExLXRveWJhbGwuZnJhZyBcCisgCUNIMTEtdG95YmFsbC52ZXJ0IFwKKyAJQ0gxOC1tYW5kZWwuZnJhZyBcCisgCUNIMTgtbWFuZGVsLnZlcnQgXAorLSAgICAgICAgYmV6aWVyLmdlb20gXAorKwliZXppZXIuZ2VvbSBcCisgCWJyaWNrLnNodGVzdCBcCisrCWJsaW5raW5nLXRlYXBvdC5mcmFnIFwKKysJYmxpbmtpbmctdGVhcG90LnZlcnQgXAorKwljb252b2x1dGlvbi5mcmFnIFwKKyAJY29udm9sdXRpb24udmVydCBcCisgCWN1YmVtYXAuZnJhZyBcCisgCW1hbmRlbGJyb3Quc2h0ZXN0IFwKK0BAIC0xMzgsNSArMTQyLDcgQEAgRVhUUkFfRElTVCA9IFwKKyAJcmVmbGVjdC52ZXJ0IFwKKyAJc2hhZG93dGV4LmZyYWcgXAorIAlzaW1wbGUudmVydCBcCisrCXNpbXBsZXgtbm9pc2UuZ2xzbCBcCisgCXNraW5uaW5nLmZyYWcgXAorKwlza2lubmluZy52ZXJ0IFwKKyAJdG95YmFsbC5zaHRlc3QKK2RpZmYgLS1naXQgYS9zcmMvcGVyZi9NYWtlZmlsZS5hbSBiL3NyYy9wZXJmL01ha2VmaWxlLmFtCitpbmRleCA1MzYzYzU4Li5jNWNjYThkIDEwMDY0NAorLS0tIGEvc3JjL3BlcmYvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9wZXJmL01ha2VmaWxlLmFtCitAQCAtNTcsMyArNTcsOSBAQCBiaW5fUFJPR1JBTVMgPSBcCisgZW5kaWYKKyAKKyBnbHNsc3RhdGVzY2hhbmdlX0xEQUREID0gbGlicGVyZi5sYSAuLi91dGlsL2xpYnV0aWwubGEKKysKKytFWFRSQV9ESVNUID0gXAorKwlnbHNsc3RhdGVzY2hhbmdlMS5mcmFnIFwKKysJZ2xzbHN0YXRlc2NoYW5nZTEudmVydCBcCisrCWdsc2xzdGF0ZXNjaGFuZ2UyLmZyYWcgXAorKwlnbHNsc3RhdGVzY2hhbmdlMi52ZXJ0CitkaWZmIC0tZ2l0IGEvc3JjL3ZwZ2xzbC9NYWtlZmlsZS5hbSBiL3NyYy92cGdsc2wvTWFrZWZpbGUuYW0KK2luZGV4IDRhODVlZDQuLjQ4YjA4ZjQgMTAwNjQ0CistLS0gYS9zcmMvdnBnbHNsL01ha2VmaWxlLmFtCisrKysgYi9zcmMvdnBnbHNsL01ha2VmaWxlLmFtCitAQCAtNDQsNiArNDQsNyBAQCBFWFRSQV9ESVNUID0gXAorIAlmdW5jMi5nbHNsIFwKKyAJaWZlbHNlLmdsc2wgXAorIAlpZi5nbHNsIFwKKysJaW5maW5pdGUtbG9vcC5nbHNsIFwKKyAJbW92Lmdsc2wgXAorIAluZXN0ZWRpZnMuZ2xzbCBcCisgCW5lc3RlZHN3aXp6bGUuZ2xzbCBcCistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA5LWdsc2wtcGVyZi1JbnN0YWxsLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDktZ2xzbC1wZXJmLUluc3RhbGwtLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI2MmRlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA5LWdsc2wtcGVyZi1JbnN0YWxsLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK0Zyb20gYzhjM2RlNTQxN2Q2YjZjN2Q3NTc5YzUyOGMwY2FiNzE4ZjRiZmRiNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTAgSnVsIDIwMTQgMTQ6NDg6MTIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCA5LzldIGdsc2wsIHBlcmY6IEluc3RhbGwgLmdsc2wsIC52ZXJ0LCAuZnJhZyBmaWxlcworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9mcGdsc2wvTWFrZWZpbGUuYW0gfCAzICsrLQorIHNyYy9nbHNsL01ha2VmaWxlLmFtICAgfCAzICsrLQorIHNyYy9wZXJmL01ha2VmaWxlLmFtICAgfCAzICsrLQorIHNyYy92cGdsc2wvTWFrZWZpbGUuYW0gfCAzICsrLQorIDQgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbSBiL3NyYy9mcGdsc2wvTWFrZWZpbGUuYW0KK2luZGV4IGZkNDNjOTEuLjJiZjUxZGUgMTAwNjQ0CistLS0gYS9zcmMvZnBnbHNsL01ha2VmaWxlLmFtCisrKysgYi9zcmMvZnBnbHNsL01ha2VmaWxlLmFtCitAQCAtMzgsNyArMzgsOCBAQCBub2luc3RfUFJPR1JBTVMgPSBcCisgCWZwLXRyaQorIGVuZGlmCisgCistRVhUUkFfRElTVCA9IFwKKytkZW1vc2RhdGFkaXI9JChkYXRhZGlyKS8kKFBBQ0tBR0UpLworK2Rpc3RfZGVtb3NkYXRhX0RBVEE9IFwKKyAJZGVwdGgtcmVhZC5nbHNsIFwKKyAJZG93aGlsZTIuZ2xzbCBcCisgCWRvd2hpbGUuZ2xzbCBcCitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvTWFrZWZpbGUuYW0gYi9zcmMvZ2xzbC9NYWtlZmlsZS5hbQoraW5kZXggMDc5YTI5ZC4uZjY2ZWMyOSAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL01ha2VmaWxlLmFtCisrKysgYi9zcmMvZ2xzbC9NYWtlZmlsZS5hbQorQEAgLTExOCw3ICsxMTgsOCBAQCB2ZXJ0X29yX2ZyYWdfb25seV9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIHZlcnRfdGV4X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgdnNyYXl0cmFjZV9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIAorLUVYVFJBX0RJU1QgPSBcCisrZGVtb3NkYXRhZGlyPSQoZGF0YWRpcikvJChQQUNLQUdFKS8KKytkaXN0X2RlbW9zZGF0YV9EQVRBPSBcCisgCUNIMDYtYnJpY2suZnJhZyBcCisgCUNIMDYtYnJpY2sudmVydCBcCisgCUNIMTEtYnVtcG1hcC5mcmFnIFwKK2RpZmYgLS1naXQgYS9zcmMvcGVyZi9NYWtlZmlsZS5hbSBiL3NyYy9wZXJmL01ha2VmaWxlLmFtCitpbmRleCBjNWNjYThkLi4xNDAyNTZkIDEwMDY0NAorLS0tIGEvc3JjL3BlcmYvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9wZXJmL01ha2VmaWxlLmFtCitAQCAtNTgsNyArNTgsOCBAQCBlbmRpZgorIAorIGdsc2xzdGF0ZXNjaGFuZ2VfTERBREQgPSBsaWJwZXJmLmxhIC4uL3V0aWwvbGlidXRpbC5sYQorIAorLUVYVFJBX0RJU1QgPSBcCisrZGVtb3NkYXRhZGlyPSQoZGF0YWRpcikvJChQQUNLQUdFKS8KKytkaXN0X2RlbW9zZGF0YV9EQVRBPSBcCisgCWdsc2xzdGF0ZXNjaGFuZ2UxLmZyYWcgXAorIAlnbHNsc3RhdGVzY2hhbmdlMS52ZXJ0IFwKKyAJZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZyBcCitkaWZmIC0tZ2l0IGEvc3JjL3ZwZ2xzbC9NYWtlZmlsZS5hbSBiL3NyYy92cGdsc2wvTWFrZWZpbGUuYW0KK2luZGV4IDQ4YjA4ZjQuLjU1MjY4NjcgMTAwNjQ0CistLS0gYS9zcmMvdnBnbHNsL01ha2VmaWxlLmFtCisrKysgYi9zcmMvdnBnbHNsL01ha2VmaWxlLmFtCitAQCAtMzgsNyArMzgsOCBAQCBub2luc3RfUFJPR1JBTVMgPSBcCisgCXZwLXRyaXMKKyBlbmRpZgorIAorLUVYVFJBX0RJU1QgPSBcCisrZGVtb3NkYXRhZGlyPSQoZGF0YWRpcikvJChQQUNLQUdFKS8KKytkaXN0X2RlbW9zZGF0YV9EQVRBPSBcCisgCWZvci5nbHNsIFwKKyAJZnVuYy5nbHNsIFwKKyAJZnVuYzIuZ2xzbCBcCistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vc184LjIuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vc184LjIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDUxNjQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zXzguMi4wLmJiCkBAIC0wLDAgKzEsNTcgQEAKK1NVTU1BUlkgPSAiTWVzYSBkZW1vIGFwcGxpY2F0aW9ucyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBpbmNsdWRlcyB0aGUgZGVtb25zdHJhdGlvbiBhcHBsaWNhdGlvbiwgc3VjaCBhcyBnbHhnZWFycy4gXAorVGhlc2UgYXBwbGljYXRpb25zIGNhbiBiZSB1c2VkIGZvciBNZXNhIHZhbGlkYXRpb24gYW5kIGJlbmNobWFya2luZy4iCitIT01FUEFHRSA9ICJodHRwOi8vbWVzYTNkLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAieDExIgorCitMSUNFTlNFID0gIk1JVCAmIFBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3JjL3hkZW1vcy9nbHhnZWFycy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTkxNDIyNTc4NTQ1MGVmZjY0NGE4NmM4NzFkM2FlMDBlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy94ZGVtb3MvZ2x4ZGVtby5jO2JlZ2lubGluZT0xO2VuZGxpbmU9ODttZDU9YjAxZDVhYjFhZWU5NGQzNWI3ZWZhYTJlZjQ4ZTFhMDYiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmZyZWVkZXNrdG9wLm9yZy9wdWIvbWVzYS9kZW1vcy8ke1BWfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgZmlsZTovLzAwMDEtbWVzYS1kZW1vcy1BZGQtbWlzc2luZy1kYXRhLWZpbGVzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMi1Db3JyZWN0bHktaW1wbGVtZW50LXdpdGgtQUNfV0lUSC1nbHV0LXNvLXRoYXQtd2l0aG91LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMy1jb25maWd1cmUtQWxsb3ctdG8tZGlzYWJsZS1kZW1vcy13aGljaC1yZXF1aXJlLUdMRVctLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwNC1Vc2UtREVNT1NfREFUQV9ESVItdG8tbG9jYXRlLWRhdGEtZmlsZXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA1LUZpeC1idWlsZC13aGVuLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi1pc24ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA2LVF1ZXJ5LWRpc3BsYXktZm9yLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi0ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA3LUluc3RhbGwtZmV3LW1vcmUtdGVzdC1wcm9ncmFtcy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDgtZ2xzbC1wZXJmLUFkZC1mZXctbWlzc2luZy0uZ2xzbC0udmVydC0uZnJhZy1maWxlcy10by5wYXRjaCBcCisgICAgZmlsZTovLzAwMDktZ2xzbC1wZXJmLUluc3RhbGwtLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjcyNjEzYTJjOGMwMTM3MTZkYjAyZTNmZjU5ZDI5MDYxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU0YmZlY2I1ODE2ZGRkNGI3YjM3YzFiYzg3NmI2M2YxZjdmMDZmZGE1ODc5MjIxYTk3NzRkMDk1MmY5MGJhOTIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID89ICJkcm0gb3NtZXNhIGZyZWV0eXBlMiBnYm0gZWdsIGdsZXMxIGdsZXMyIFwKKyAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMSBnbGV3IGdsdScsICcnLCBkKX0iCisKKyMgVGhlIFdheWxhbmQgY29kZSBkb2Vzbid0IHdvcmsgd2l0aCBXYXlsYW5kIDEuMCwgc28gZGlzYWJsZSBpdCBmb3Igbm93CisjJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ3dheWxhbmQnLCAnJywgZCl9IgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXN5c3RlbS1kYXRhLWZpbGVzIgorCitQQUNLQUdFQ09ORklHW2RybV0gPSAiLS1lbmFibGUtbGliZHJtLC0tZGlzYWJsZS1saWJkcm0sbGliZHJtIgorUEFDS0FHRUNPTkZJR1tlZ2xdID0gIi0tZW5hYmxlLWVnbCwtLWRpc2FibGUtZWdsLHZpcnR1YWwvZWdsIgorUEFDS0FHRUNPTkZJR1tmcmVldHlwZTJdID0gIi0tZW5hYmxlLWZyZWV0eXBlMiwtLWRpc2FibGUtZnJlZXR5cGUyLGZyZWV0eXBlIgorUEFDS0FHRUNPTkZJR1tnYm1dID0gIi0tZW5hYmxlLWdibSwtLWRpc2FibGUtZ2JtLHZpcnR1YWwvbGliZ2wiCitQQUNLQUdFQ09ORklHW2dsZXMxXSA9ICItLWVuYWJsZS1nbGVzMSwtLWRpc2FibGUtZ2xlczEsdmlydHVhbC9saWJnbGVzMSIKK1BBQ0tBR0VDT05GSUdbZ2xlczJdID0gIi0tZW5hYmxlLWdsZXMyLC0tZGlzYWJsZS1nbGVzMix2aXJ0dWFsL2xpYmdsZXMyIgorUEFDS0FHRUNPTkZJR1tnbHV0XSA9ICItLXdpdGgtZ2x1dD0ke1NUQUdJTkdfRVhFQ1BSRUZJWERJUn0sLS13aXRob3V0LWdsdXQsIgorUEFDS0FHRUNPTkZJR1tvc21lc2FdID0gIi0tZW5hYmxlLW9zbWVzYSwtLWRpc2FibGUtb3NtZXNhLCIKK1BBQ0tBR0VDT05GSUdbdmddID0gIi0tZW5hYmxlLXZnLC0tZGlzYWJsZS12Zyx2aXJ0dWFsL2xpYm9wZW52ZyIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLS1lbmFibGUtd2F5bGFuZCwtLWRpc2FibGUtd2F5bGFuZCx2aXJ0dWFsL2xpYmdsIHdheWxhbmQiCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExLC0tZGlzYWJsZS14MTEsdmlydHVhbC9saWJ4MTEiCitQQUNLQUdFQ09ORklHW2dsZXddID0gIi0tZW5hYmxlLWdsZXcsLS1kaXNhYmxlLWdsZXcsZ2xldyIKK1BBQ0tBR0VDT05GSUdbZ2x1XSA9ICItLWVuYWJsZS1nbHUsLS1kaXNhYmxlLWdsdSx2aXJ0dWFsL2xpYmdsIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIGl0IGNhbiBiZSBjb21wbGV0ZWx5IGVtcHR5IHdoZW4gYWxsIFBBQ0tBR0VDT05GSUcgb3B0aW9ucyBhcmUgZGlzYWJsZWQKKwlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAke0R9JHtiaW5kaXJ9CisKKwlpZiBbIC1mICR7RH0ke2JpbmRpcn0vY2xlYXIgXTsgdGhlbgorICAgICAgICAJbXYgJHtEfSR7YmluZGlyfS9jbGVhciAke0R9JHtiaW5kaXJ9L2NsZWFyLm1lc2EtZGVtb3MKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWdsXzEwLjYuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1nbF8xMC42LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyYmNhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1nbF8xMC42LjMuYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSBtZXNhXyR7UFZ9LmJiCisKK1NVTU1BUlkgKz0gIiAoT3BlbkdMIG9ubHksIG5vIEVHTC9HTEVTKSIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vbWVzYToiCisKK1BST1ZJREVTID0gInZpcnR1YWwvbGliZ2wgdmlydHVhbC9tZXNhIgorCitTID0gIiR7V09SS0RJUn0vbWVzYS0ke1BWfSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImRyaSAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IgorCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmN2EyYzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EuaW5jCkBAIC0wLDAgKzEsMTg1IEBACitTVU1NQVJZID0gIkEgZnJlZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgT3BlbkdMIEFQSSIKK0RFU0NSSVBUSU9OID0gIk1lc2EgaXMgYW4gb3Blbi1zb3VyY2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIE9wZW5HTCBzcGVjaWZpY2F0aW9uIC0gXAorYSBzeXN0ZW0gZm9yIHJlbmRlcmluZyBpbnRlcmFjdGl2ZSAzRCBncmFwaGljcy4gIFwKK0EgdmFyaWV0eSBvZiBkZXZpY2UgZHJpdmVycyBhbGxvd3MgTWVzYSB0byBiZSB1c2VkIGluIG1hbnkgZGlmZmVyZW50IGVudmlyb25tZW50cyBcCityYW5naW5nIGZyb20gc29mdHdhcmUgZW11bGF0aW9uIHRvIGNvbXBsZXRlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmb3IgbW9kZXJuIEdQVXMuIFwKK01lc2EgaXMgdXNlZCBhcyBwYXJ0IG9mIHRoZSBvdmVyYWxsIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgYW5kIFgub3JnIFwKK2Vudmlyb25tZW50LiIKKworSE9NRVBBR0UgPSAiaHR0cDovL21lc2EzZC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gIngxMSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZG9jcy9saWNlbnNlLmh0bWw7bWQ1PTZhMjM0NDU5ODJhN2E5NzJhYzE5OGU5M2NjMWNiM2RlIgorCitQRSA9ICIyIgorCitERVBFTkRTID0gImV4cGF0IG1ha2VkZXBlbmQtbmF0aXZlIGZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSBsaWJ4bWwyLW5hdGl2ZSB1ZGV2IgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYmdsIHZpcnR1YWwvbGliZ2xlczEgdmlydHVhbC9saWJnbGVzMiB2aXJ0dWFsL2VnbCB2aXJ0dWFsL21lc2EiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBweXRob25uYXRpdmUgZ2V0dGV4dCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIm9wZW5nbCIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNoYXJlZC1nbGFwaSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImVnbCBnbGVzIGRyaSBcCisJCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX1cCisJCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICd3YXlsYW5kJywgJycsIGQpfVwKKwkJIgorCitYMTFfREVQUyA9ICJ4Zjg2ZHJpcHJvdG8gZ2xwcm90byB2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGxpYnh4Zjg2dm0gbGlieGRhbWFnZSBsaWJ4Zml4ZXMiCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUtZ2x4LXRscywtLWRpc2FibGUtZ2x4LCR7WDExX0RFUFN9IgorUEFDS0FHRUNPTkZJR1t4dm1jXSA9ICItLWVuYWJsZS14dm1jLC0tZGlzYWJsZS14dm1jLGxpYnh2bWMiCitQQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIiwsd2F5bGFuZCIKKworRFJJRFJJVkVSUyA9ICJzd3Jhc3QiCitEUklEUklWRVJTX2FwcGVuZF94ODYgPSAiLHJhZGVvbixyMjAwLG5vdXZlYXUsaTk2NSxpOTE1IgorRFJJRFJJVkVSU19hcHBlbmRfeDg2LTY0ID0gIixyYWRlb24scjIwMCxub3V2ZWF1LGk5NjUsaTkxNSIKK1BBQ0tBR0VDT05GSUdbZHJpXSA9ICItLWVuYWJsZS1kcmkgLS13aXRoLWRyaS1kcml2ZXJzPSR7RFJJRFJJVkVSU30sIC0tZGlzYWJsZS1kcmksIGRyaTJwcm90byBsaWJkcm0iCitQQUNLQUdFQ09ORklHW2RyaTNdID0gIi0tZW5hYmxlLWRyaTMsIC0tZGlzYWJsZS1kcmkzLCBkcmkzcHJvdG8gcHJlc2VudHByb3RvIGxpYnhzaG1mZW5jZSIKKworRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1nYm0iCisKK1BBQ0tBR0VDT05GSUdbZ2xlc10gPSAiLS1lbmFibGUtZ2xlczEgLS1lbmFibGUtZ2xlczIsIC0tZGlzYWJsZS1nbGVzMSAtLWRpc2FibGUtZ2xlczIiCisKK0VHTF9QTEFURk9STVMgID0gImRybSIKK0VHTF9QTEFURk9STVMgLj0iJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAneDExJywgJyx4MTEnLCAnJywgZCl9IgorRUdMX1BMQVRGT1JNUyAuPSIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd3YXlsYW5kJywgJyx3YXlsYW5kJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbZWdsXSA9ICItLWVuYWJsZS1lZ2wgLS13aXRoLWVnbC1wbGF0Zm9ybXM9JHtFR0xfUExBVEZPUk1TfSwgLS1kaXNhYmxlLWVnbCIKKworR0FMTElVTURSSVZFUlMgPSAic3dyYXN0IgorR0FMTElVTURSSVZFUlNfTExWTTMzID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3I2MDAnLCAncmFkZW9uc2kscjYwMCcsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW3I2MDBdID0gIiIKK0dBTExJVU1EUklWRVJTX0xMVk0zM19FTkFCTEVEID0gIiR7QGJhc2VfdmVyc2lvbl9sZXNzX29yX2VxdWFsKCdNRVNBX0xMVk1fUkVMRUFTRScsICczLjInLCBGYWxzZSwgbGVuKCcke0dBTExJVU1EUklWRVJTX0xMVk0zM30nKSA+IDAsIGQpfSIKK0dBTExJVU1EUklWRVJTX0xMVk0gPSAicjMwMCxzdmdhLG5vdXZlYXUke0AnLCR7R0FMTElVTURSSVZFUlNfTExWTTMzfScgaWYgJHtHQUxMSVVNRFJJVkVSU19MTFZNMzNfRU5BQkxFRH0gZWxzZSAnJ30iCitHQUxMSVVNRFJJVkVSU19hcHBlbmRfeDg2ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2dhbGxpdW0tbGx2bScsICcsJHtHQUxMSVVNRFJJVkVSU19MTFZNfScsICcnLCBkKX0iCitHQUxMSVVNRFJJVkVSU19hcHBlbmRfeDg2LTY0ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2dhbGxpdW0tbGx2bScsICcsJHtHQUxMSVVNRFJJVkVSU19MTFZNfScsICcnLCBkKX0iCisjIGtlZXAgLS13aXRoLWdhbGxpdW0tZHJpdmVycyBzZXBhcmF0ZSwgYmVjYXVzZSB3aGVuIG9ubHkgb25lIG9mIGdhbGxpdW0gdmVyc2lvbnMgaXMgZW5hYmxlZCwgb3RoZXIgMiB3ZXJlIGFkZGluZyAtLXdpdGhvdXQtZ2FsbGl1bS1kcml2ZXJzCitQQUNLQUdFQ09ORklHW2dhbGxpdW1dICAgICAgPSAiLS13aXRoLWdhbGxpdW0tZHJpdmVycz0ke0dBTExJVU1EUklWRVJTfSwgLS13aXRob3V0LWdhbGxpdW0tZHJpdmVycyIKK01FU0FfTExWTV9SRUxFQVNFID89ICIzLjMiCitQQUNLQUdFQ09ORklHW2dhbGxpdW0tbGx2bV0gPSAiLS1lbmFibGUtZ2FsbGl1bS1sbHZtIC0tZW5hYmxlLWxsdm0tc2hhcmVkLWxpYnMsIC0tZGlzYWJsZS1nYWxsaXVtLWxsdm0sIGxsdm0ke01FU0FfTExWTV9SRUxFQVNFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtAJ2VsZnV0aWxzJyBpZiAke0dBTExJVU1EUklWRVJTX0xMVk0zM19FTkFCTEVEfSBlbHNlICcnfSIKK2V4cG9ydCBXQU5UX0xMVk1fUkVMRUFTRSA9ICIke01FU0FfTExWTV9SRUxFQVNFfSIKK1BBQ0tBR0VDT05GSUdbeGFdICA9ICItLWVuYWJsZS14YSwgLS1kaXNhYmxlLXhhIgorCisjIGxsdm1waXBlIGlzIHNsb3cgaWYgY29tcGlsZWQgd2l0aCAtZm9taXQtZnJhbWUtcG9pbnRlciAoZS5nLiAtTzIpCitGVUxMX09QVElNSVpBVElPTl9hcHBlbmQgPSAiIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIgorCisjIE11bHRpcGxlIHZpcnR1YWwvZ2wgcHJvdmlkZXJzIGJlaW5nIGJ1aWx0IGJyZWFrcyBzdGFnaW5nCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworIyBSZW1vdmUgdGhlIG1lc2EgZGVwZW5kZW5jeSBvbiBtZXNhLWRldiwgYXMgbWVzYSBpcyBlbXB0eQorUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKKworUEFDS0FHRVMgPSsgImxpYmVnbC1tZXNhIGxpYmVnbC1tZXNhLWRldiBcCisgICAgICAgICAgICAgbGlib3NtZXNhIGxpYm9zbWVzYS1kZXYgXAorICAgICAgICAgICAgIGxpYmdsLW1lc2EgbGliZ2wtbWVzYS1kZXYgXAorICAgICAgICAgICAgIGxpYmdsYXBpIGxpYmdsYXBpLWRldiBcCisgICAgICAgICAgICAgbGliZ2JtIGxpYmdibS1kZXYgXAorICAgICAgICAgICAgIGxpYmdsZXMxLW1lc2EgbGliZ2xlczEtbWVzYS1kZXYgXAorICAgICAgICAgICAgIGxpYmdsZXMyLW1lc2EgbGliZ2xlczItbWVzYS1kZXYgXAorICAgICAgICAgICAgIGxpYmdsZXMzLW1lc2EgbGliZ2xlczMtbWVzYS1kZXYgXAorICAgICAgICAgICAgIGxpYndheWxhbmQtZWdsIGxpYndheWxhbmQtZWdsLWRldiBcCisgICAgICAgICAgICAgbGlieHZtY3NvZnRwaXBlIGxpYnh2bWNzb2Z0cGlwZS1kZXYgXAorICAgICAgICAgICAgIGxpYnhhdHJhY2tlciBsaWJ4YXRyYWNrZXItZGV2IFwKKyAgICAgICAgICAgICBtZXNhLW1lZ2Fkcml2ZXIgXAorICAgICAgICAgICAgIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgIyBEcml2ZXJzIG5ldmVyIG5lZWQgbGlidG9vbCAubGEgZmlsZXMKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L2RyaS8qLmxhCisgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9lZ2wvKi5sYQorICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vZ2FsbGl1bS1waXBlLyoubGEKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L2dibS8qLmxhCisgICAgCisgICAgIyBpdCB3YXMgcGFja2FnZWQgaW4gbGliZHJpY29yZTkuMS4zLTEgYW5kIHByZXZlbnRpbmcgdXBncmFkZXMgd2hlbiBkZWJpYW4uYmJjbGFzcyB3YXMgdXNlZCAKKyAgICBybSAtZiAke0R9JHtzeXNjb25mZGlyfS9kcmlyYworfQorCisjIEZvciB0aGUgcGFja2FnZXMgdGhhdCBtYWtlIHVwIHRoZSBPcGVuR0wgaW50ZXJmYWNlcywgaW5qZWN0IHZhcmlhYmxlcyBzbyB0aGF0CisjIHRoZXkgZG9uJ3QgZ2V0IERlYmlhbi1yZW5hbWVkICh3aGljaCB3b3VsZCByZW1vdmUgdGhlIC1tZXNhIHN1ZmZpeCksIGFuZAorIyBSUFJPVklERXMvUkNPTkZMSUNUcyBvbiB0aGUgZ2VuZXJpYyBsaWJnbCBuYW1lLgorcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIHBrZ2NvbmZpZyA9IChkLmdldFZhcignUEFDS0FHRUNPTkZJRycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgZm9yIHAgaW4gKCgiZWdsIiwgImxpYmVnbCIsICJsaWJlZ2wxIiksCisgICAgICAgICAgICAgICgiZHJpIiwgImxpYmdsIiwgImxpYmdsMSIpLAorICAgICAgICAgICAgICAoImdsZXMiLCAibGliZ2xlczEiLCAibGliZ2xlc3YxLWNtMSIpLAorICAgICAgICAgICAgICAoImdsZXMiLCAibGliZ2xlczIiLCAibGliZ2xlc3YyLTIiKSwKKyAgICAgICAgICAgICAgKCJnbGVzIiwgImxpYmdsZXMzIiwpKToKKyAgICAgICAgaWYgbm90IHBbMF0gaW4gcGtnY29uZmlnOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZnVsbHAgPSBwWzFdICsgIi1tZXNhIgorICAgICAgICBwa2dzID0gIiAiLmpvaW4ocFsxOl0pCisgICAgICAgIGQuc2V0VmFyKCJERUJJQU5fTk9BVVRPTkFNRV8iICsgZnVsbHAsICIxIikKKyAgICAgICAgZC5hcHBlbmRWYXIoIlJSRVBMQUNFU18iICsgZnVsbHAsIHBrZ3MpCisgICAgICAgIGQuYXBwZW5kVmFyKCJSUFJPVklERVNfIiArIGZ1bGxwLCBwa2dzKQorICAgICAgICBkLmFwcGVuZFZhcigiUkNPTkZMSUNUU18iICsgZnVsbHAsIHBrZ3MpCisgICAgICAgIAorICAgICAgICAjIEZvciAtZGV2LCB0aGUgZmlyc3QgZWxlbWVudCBpcyBib3RoIHRoZSBEZWJpYW4gYW5kIG9yaWdpbmFsIG5hbWUKKyAgICAgICAgZnVsbHAgKz0gIi1kZXYiCisgICAgICAgIHBrZ3MgPSBwWzFdICsgIi1kZXYiCisgICAgICAgIGQuc2V0VmFyKCJERUJJQU5fTk9BVVRPTkFNRV8iICsgZnVsbHAsICIxIikKKyAgICAgICAgZC5hcHBlbmRWYXIoIlJSRVBMQUNFU18iICsgZnVsbHAsIHBrZ3MpCisgICAgICAgIGQuYXBwZW5kVmFyKCJSUFJPVklERVNfIiArIGZ1bGxwLCBwa2dzKQorICAgICAgICBkLmFwcGVuZFZhcigiUkNPTkZMSUNUU18iICsgZnVsbHAsIHBrZ3MpCit9CisKK3B5dGhvbiBtZXNhX3BvcHVsYXRlX3BhY2thZ2VzKCkgeworICAgIHBrZ3MgPSBbJ21lc2EnLCAnbWVzYS1kZXYnLCAnbWVzYS1kYmcnXQorICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgZC5zZXRWYXIoIlJQUk9WSURFU18lcyIgJSBwa2csIHBrZy5yZXBsYWNlKCJtZXNhIiwgIm1lc2EtZHJpIiwgMSkpCisgICAgICAgIGQuc2V0VmFyKCJSQ09ORkxJQ1RTXyVzIiAlIHBrZywgcGtnLnJlcGxhY2UoIm1lc2EiLCAibWVzYS1kcmkiLCAxKSkKKyAgICAgICAgZC5zZXRWYXIoIlJSRVBMQUNFU18lcyIgJSBwa2csIHBrZy5yZXBsYWNlKCJtZXNhIiwgIm1lc2EtZHJpIiwgMSkpCisKKyAgICBpbXBvcnQgcmUKKyAgICBkcmlfZHJpdmVyc19yb290ID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgImRyaSIpCisgICAgZHJpX3BrZ3MgPSBvcy5saXN0ZGlyKGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkgKyBkcmlfZHJpdmVyc19yb290KQorICAgIGxpYl9uYW1lID0gZC5leHBhbmQoIiR7TUxQUkVGSVh9bWVzYS1tZWdhZHJpdmVyIikKKyAgICBmb3IgcCBpbiBkcmlfcGtnczoKKyAgICAgICAgbSA9IHJlLm1hdGNoKCdeKC4qKV9kcmlcLnNvJCcsIHApCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBwa2dfbmFtZSA9ICIgJHtNTFBSRUZJWH1tZXNhLWRyaXZlci0lcyIgJSBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShtLmdyb3VwKDEpKQorICAgICAgICAgICAgZC5hcHBlbmRWYXIoIlJQUk9WSURFU18lcyIgJSBsaWJfbmFtZSwgcGtnX25hbWUpCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiUkNPTkZMSUNUU18lcyIgJSBsaWJfbmFtZSwgcGtnX25hbWUpCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiUlJFUExBQ0VTXyVzIiAlIGxpYl9uYW1lLCBwa2dfbmFtZSkKKworICAgIHBpcGVfZHJpdmVyc19yb290ID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgImdhbGxpdW0tcGlwZSIpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGlwZV9kcml2ZXJzX3Jvb3QsICdecGlwZV8oLiopXC5zbyQnLCAnbWVzYS1kcml2ZXItcGlwZS0lcycsICdNZXNhICVzIHBpcGUgZHJpdmVyJywgZXh0cmFfZGVwZW5kcz0nJykKK30KKworUEFDS0FHRVNQTElURlVOQ1NfcHJlcGVuZCA9ICJtZXNhX3BvcHVsYXRlX3BhY2thZ2VzICIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXm1lc2EtZHJpdmVyLS4qIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9kcmkvLmRlYnVnLyoiCitGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9kcmlyYyIKK0ZJTEVTX21lc2EtbWVnYWRyaXZlciA9ICIke2xpYmRpcn0vZHJpLyoiCitGSUxFU19saWJlZ2wtbWVzYSA9ICIke2xpYmRpcn0vbGliRUdMLnNvLioiCitGSUxFU19saWJnYm0gPSAiJHtsaWJkaXJ9L2xpYmdibS5zby4qIgorRklMRVNfbGliZ2xlczEtbWVzYSA9ICIke2xpYmRpcn0vbGliR0xFU3YxKi5zby4qIgorRklMRVNfbGliZ2xlczItbWVzYSA9ICIke2xpYmRpcn0vbGliR0xFU3YyLnNvLioiCitGSUxFU19saWJnbC1tZXNhID0gIiR7bGliZGlyfS9saWJHTC5zby4qIgorRklMRVNfbGliZ2xhcGkgPSAiJHtsaWJkaXJ9L2xpYmdsYXBpLnNvLioiCitGSUxFU19saWJvc21lc2EgPSAiJHtsaWJkaXJ9L2xpYk9TTWVzYS5zby4qIgorRklMRVNfbGlid2F5bGFuZC1lZ2wgPSAiJHtsaWJkaXJ9L2xpYndheWxhbmQtZWdsLnNvLioiCitGSUxFU19saWJ4dm1jc29mdHBpcGUgPSAiJHtsaWJkaXJ9L2xpYlh2TUNzb2Z0cGlwZS5zby4qIgorRklMRVNfbGlieGF0cmFja2VyID0gIiR7bGliZGlyfS9saWJ4YXRyYWNrZXIuc28uKiIKKworRklMRVNfJHtQTn0tZGV2ID0gIiR7bGliZGlyfS9wa2djb25maWcvZHJpLnBjIgorRklMRVNfbGliZWdsLW1lc2EtZGV2ID0gIiR7bGliZGlyfS9saWJFR0wuKiAke2luY2x1ZGVkaXJ9L0VHTCAke2luY2x1ZGVkaXJ9L0tIUiAke2xpYmRpcn0vcGtnY29uZmlnL2VnbC5wYyIKK0ZJTEVTX2xpYmdibS1kZXYgPSAiJHtsaWJkaXJ9L2xpYmdibS4qICR7bGliZGlyfS9wa2djb25maWcvZ2JtLnBjICR7aW5jbHVkZWRpcn0vZ2JtLmgiCitGSUxFU19saWJnbC1tZXNhLWRldiA9ICIke2xpYmRpcn0vbGliR0wuKiAke2luY2x1ZGVkaXJ9L0dMICR7bGliZGlyfS9wa2djb25maWcvZ2wucGMiCitGSUxFU19saWJnbGFwaS1kZXYgPSAiJHtsaWJkaXJ9L2xpYmdsYXBpLioiCitGSUxFU19saWJnbGVzMS1tZXNhLWRldiA9ICIke2xpYmRpcn0vbGliR0xFU3YxKi4qICR7aW5jbHVkZWRpcn0vR0xFUyAke2xpYmRpcn0vcGtnY29uZmlnL2dsZXN2MSoucGMiCitGSUxFU19saWJnbGVzMi1tZXNhLWRldiA9ICIke2xpYmRpcn0vbGliR0xFU3YyLiogJHtpbmNsdWRlZGlyfS9HTEVTMiAke2xpYmRpcn0vcGtnY29uZmlnL2dsZXN2Mi5wYyIKK0ZJTEVTX2xpYmdsZXMzLW1lc2EtZGV2ID0gIiR7aW5jbHVkZWRpcn0vR0xFUzMiCitGSUxFU19saWJvc21lc2EtZGV2ID0gIiR7bGliZGlyfS9saWJPU01lc2EuKiAke2luY2x1ZGVkaXJ9L29zbWVzYS5oICR7bGliZGlyfS9wa2djb25maWcvb3NtZXNhLnBjIgorRklMRVNfbGlid2F5bGFuZC1lZ2wtZGV2ID0gIiR7bGliZGlyfS9wa2djb25maWcvd2F5bGFuZC1lZ2wucGMgJHtsaWJkaXJ9L2xpYndheWxhbmQtZWdsLioiCitGSUxFU19saWJ4dm1jc29mdHBpcGUtZGV2ID0gIiR7bGliZGlyfS9saWJYdk1Dc29mdHBpcGUuc28gJHtsaWJkaXJ9L2xpYlh2TUNzb2Z0cGlwZS5sYSIKK0ZJTEVTX2xpYnhhdHJhY2tlci1kZXYgPSAiJHtsaWJkaXJ9L2xpYnhhdHJhY2tlci5zbyAke2xpYmRpcn0vbGlieGF0cmFja2VyLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS94YV90cmFja2VyLmggJHtpbmNsdWRlZGlyfS94YV9jb21wb3NpdGUuaCAke2luY2x1ZGVkaXJ9L3hhX2NvbnRleHQuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wa2djb25maWcveGF0cmFja2VyLnBjIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9kcmkvLmRlYnVnLyogJHtsaWJkaXJ9L2VnbC8uZGVidWcvKiAke2xpYmRpcn0vZ2JtLy5kZWJ1Zy8qICR7bGliZGlyfS9nYWxsaXVtLXBpcGUvLmRlYnVnIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhXzEwLjYuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYV8xMC42LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM1NTA2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYV8xMC42LjMuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSAke0JQTn0uaW5jCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmZyZWVkZXNrdG9wLm9yZy9wdWIvbWVzYS8ke1BWfS9tZXNhLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjU1M2U1MjVkMmYyMGVkNDhmY2E4ZjFlYzMxNzZmZDgzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU4NTkyZTA3YzM1MGNkMmU4OTY5YjczZmE4MzA0OGM2NTdhMzlmZTJmMTNmM2I4OGY1ZTU4MThmZTJlNDY3NmQiCisKKyNiZWNhdXNlIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBmYWN0IHRoYXQgYWxsIGFwcHMgd2lsbCB1c2UgcGtnY29uZmlnLAorI21ha2UgZWdscGxhdGZvcm0uaCBpbmRlcGVuZGVudCBvZiBNRVNBX0VHTF9OT19YMTFfSEVBREVSCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdlZ2wnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorICAgICAgICBzZWQgLWkgLWUgJ3MvXiNpZiBkZWZpbmVkKE1FU0FfRUdMX05PX1gxMV9IRUFERVJTKSQvI2lmIGRlZmluZWQoTUVTQV9FR0xfTk9fWDExX0hFQURFUlMpIHx8ICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3gxMScsICcwJywgJzEnLCBkKX0vJyAke0R9JHtpbmNsdWRlZGlyfS9FR0wvZWdscGxhdGZvcm0uaAorICAgIGZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDM0NTE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhX2dpdC5iYgpAQCAtMCwwICsxLDIyIEBACityZXF1aXJlICR7QlBOfS5pbmMKKworREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitTUkNSRVYgPSAiZWEwZDFmNTc1YzIxNGMwOWJhM2RmMTI2NDRhOTYwZTg2ZTAzMTc2NiIKK1BWID0gIjEwLjUuNCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQvbWVzYS9tZXNhO2JyYW5jaD0xMC41IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitERVBFTkRTICs9ICJweXRob24tbWFrby1uYXRpdmUiCisKK2luaGVyaXQgcHl0aG9ubmF0aXZlCisKKyNiZWNhdXNlIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBmYWN0IHRoYXQgYWxsIGFwcHMgd2lsbCB1c2UgcGtnY29uZmlnLAorI21ha2UgZWdscGxhdGZvcm0uaCBpbmRlcGVuZGVudCBvZiBNRVNBX0VHTF9OT19YMTFfSEVBREVSCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdlZ2wnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorICAgICAgICBzZWQgLWkgLWUgJ3MvXiNpZiBkZWZpbmVkKE1FU0FfRUdMX05PX1gxMV9IRUFERVJTKSQvI2lmIGRlZmluZWQoTUVTQV9FR0xfTk9fWDExX0hFQURFUlMpIHx8ICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3gxMScsICcwJywgJzEnLCBkKX0vJyAke0R9JHtpbmNsdWRlZGlyfS9FR0wvZWdscGxhdGZvcm0uaAorICAgIGZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9taW5pLXgtc2Vzc2lvbi9maWxlcy9taW5pLXgtc2Vzc2lvbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21pbmkteC1zZXNzaW9uL2ZpbGVzL21pbmkteC1zZXNzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYTY1NWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9taW5pLXgtc2Vzc2lvbi9maWxlcy9taW5pLXgtc2Vzc2lvbgpAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vc2gKKyMKKyMgVmVyeSBzaW1wbGUgc2Vzc2lvbiBtYW5hZ2VyIGZvciBNaW5pIFgKKyMKKworIyBVbmNvbW1lbnQgYmVsb3cgdG8gZW5hYmxlIHBhcnNpbmcgb2YgZGViaWFuIG1lbnUgZW50cnlzCisjIGV4cG9ydCBNQl9VU0VfREVCX01FTlVTPTEgCisKK2lmIFsgLWUgJEhPTUUvLm1pbmlfeC9zZXNzaW9uIF0KK3RoZW4KK2V4ZWMgJEhPTUUvLm1pbmlfeC9zZXNzaW9uCitmaQorCitpZiBbIC1lIC9ldGMvbWluaV94L3Nlc3Npb24gXQordGhlbgorZXhlYyAvZXRjL21pbmlfeC9zZXNzaW9uCitmaQorCitNSU5JX1hfU0VTU0lPTl9ESVI9L2V0Yy9taW5pX3gvc2Vzc2lvbi5kCitpZiBbIC1kICIkTUlOSV9YX1NFU1NJT05fRElSIiBdOyB0aGVuCisJIyBFeGVjdXRlIHNlc3Npb24gZmlsZSBvbiBiZWhhbGYgb2YgZmlsZSBvd25lcgorCWZpbmQgJE1JTklfWF9TRVNTSU9OX0RJUiAtdHlwZSBmIHwgd2hpbGUgcmVhZCBTRVNTSU9ORklMRTsgZG8KKwkJc2V0ICtlCisJCVVTRVJOQU1FPWBzdGF0IC1jICVVICRTRVNTSU9ORklMRWAKKwkJIyBVc2luZyBzdSByYXRoZXIgdGhhbiBzdWRvIGFzIGxhdGVzdCAxLjguMSBjYXVzZSBmYWlsdXJlIFtZT0NUTyAjMTIxMV0KKyMJCXN1IC1sIC1jICckU0VTU0lPTkZJTEUmJyAkVVNFUk5BTUUKKwkJc3VkbyAtYiAtaSAtdSAkVVNFUk5BTUUgJFNFU1NJT05GSUxFJgorCQlzZXQgLWUKKwlkb25lCitmaQorCisjIFRoaXMgcmVzb2x1dGlvbiBpcyBiaWcgZW5vdWdoIGZvciBob2IyJ3MgbWF4IHdpbmRvdyBzaXplLgoreHJhbmRyIC1zIDEwMjR4NzY4CisKKyMgRGVmYXVsdCBmaWxlcyB0byBydW4gaWYgJEhPTUUvLm1pbmlfeC9zZXNzaW9uIG9yIC9ldGMvbWluaV94L3Nlc3Npb24KKyMgZG9udCBleGlzdC4gCisKK21hdGNoYm94LXRlcm1pbmFsJgorZXhlYyBtYXRjaGJveC13aW5kb3ctbWFuYWdlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWluaS14LXNlc3Npb24vbWluaS14LXNlc3Npb25fMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWluaS14LXNlc3Npb24vbWluaS14LXNlc3Npb25fMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlODlkNjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9taW5pLXgtc2Vzc2lvbi9taW5pLXgtc2Vzc2lvbl8wLjEuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJWZXJ5IHNpbXBsZSBzZXNzaW9uIG1hbmFnZXIgZm9yIFgiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5wb2t5bGludXgub3JnIgorCitQUiA9ICJyNCIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL21pbmkteC1zZXNzaW9uO2VuZGxpbmU9NTttZDU9YjY0MzBiZmZiY2YwNWY5NzYwZTcyOTM4ODI2Yjc0ODciCisKK1NFQ1RJT04gPSAieDExIgorUkNPTkZMSUNUU18ke1BOfSA9ICJtYXRjaGJveC1jb21tb24iCisKK1NSQ19VUkkgPSAiZmlsZTovL21pbmkteC1zZXNzaW9uIgorUyA9ICIke1dPUktESVJ9IgorCitSREVQRU5EU18ke1BOfSA9ICJzdWRvIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAieC1zZXNzaW9uLW1hbmFnZXIiCitBTFRFUk5BVElWRV9UQVJHRVRbeC1zZXNzaW9uLW1hbmFnZXJdID0gIiR7YmluZGlyfS9taW5pLXgtc2Vzc2lvbiIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjUwIgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9taW5pLXgtc2Vzc2lvbiAke0R9LyR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wL2ZpeC1idWlsZC1kaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjAvZml4LWJ1aWxkLWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzhhODMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wL2ZpeC1idWlsZC1kaXIucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRml4IGJ1aWxkIGZvciBTICE9IEIKKworVGhpcyBwYXRjaCBpcyBzcGVjaWZpYyB0byB2ZXJzaW9uIDEuNC54CitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBAIGh0dHBzOi8vZ2l0aHViLmNvbS9jbHV0dGVyLXByb2plY3QvbXgvaXNzdWVzLzgxCitTaWduZWQtb2ZmLWJ5OiBUb21hcyBGcnlkcnljaCA8dG9tYXNAc2xlZXBmaXZlLmNvbT4KKy0tCitJbmRleDogZ2l0L2RvY3MvcmVmZXJlbmNlL2xpYm14LWd0ay9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2RvY3MvcmVmZXJlbmNlL2xpYm14LWd0ay9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjA3OjAyLjAyNzE1NDc4OCArMDEwMAorKysrIGdpdC9kb2NzL3JlZmVyZW5jZS9saWJteC1ndGsvTWFrZWZpbGUuYW0JMjAxMy0wNS0wOCAxNToxNDozMy42ODQzMTg2NTAgKzAxMDAKK0BAIC0xLDMgKzEsNiBAQAorK0VYVFJBX0RJU1Q9CisrQ0xFQU5GSUxFUz0KKysKKyAjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKyAKKyAjIFdlIHJlcXVpcmUgYXV0b21ha2UgMS42IGF0IGxlYXN0LgorQEAgLTc3LDcgKzgwLDcgQEAKKyBHVEtET0NfTElCUz0kKE1YX0xJQlMpICQodG9wX2J1aWxkZGlyKS9teC1ndGsvbGlibXgtZ3RrLSQoTVhfQVBJX1ZFUlNJT04pLmxhCisgCisgIyBUaGlzIGluY2x1ZGVzIHRoZSBzdGFuZGFyZCBndGstZG9jIG1ha2UgcnVsZXMsIGNvcGllZCBieSBndGtkb2NpemUuCistaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2d0ay1kb2MubWFrZQorK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL2d0ay1kb2MubWFrZQorIAorICMgT3RoZXIgZmlsZXMgdG8gZGlzdHJpYnV0ZQorIEVYVFJBX0RJU1QgKz0gdmVyc2lvbi54bWwuaW4KK0luZGV4OiBnaXQvZG9jcy9yZWZlcmVuY2UvbGlibXgvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9kb2NzL3JlZmVyZW5jZS9saWJteC9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjA3OjAyLjAyNzE1NDc4OCArMDEwMAorKysrIGdpdC9kb2NzL3JlZmVyZW5jZS9saWJteC9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjE0OjI0LjQ1NjM3ODEzNSArMDEwMAorQEAgLTEsMyArMSw2IEBACisrRVhUUkFfRElTVD0KKytDTEVBTkZJTEVTPQorKworICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorIAorICMgV2UgcmVxdWlyZSBhdXRvbWFrZSAxLjYgYXQgbGVhc3QuCitAQCAtMTA2LDcgKzEwOSw3IEBACisgR1RLRE9DX0xJQlM9JChNWF9MSUJTKSAkKHRvcF9idWlsZGRpcikvbXgvbGlibXgtJChNWF9BUElfVkVSU0lPTikubGEKKyAKKyAjIFRoaXMgaW5jbHVkZXMgdGhlIHN0YW5kYXJkIGd0ay1kb2MgbWFrZSBydWxlcywgY29waWVkIGJ5IGd0a2RvY2l6ZS4KKy1pbmNsdWRlICQodG9wX3NyY2RpcikvZ3RrLWRvYy5tYWtlCisraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvZ3RrLWRvYy5tYWtlCisgCisgIyBPdGhlciBmaWxlcyB0byBkaXN0cmlidXRlCisgRVhUUkFfRElTVCArPSB2ZXJzaW9uLnhtbC5pbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wL2ZpeC10ZXN0LWluY2x1ZGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wL2ZpeC10ZXN0LWluY2x1ZGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYzkzZGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjAvZml4LXRlc3QtaW5jbHVkZXMucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorRml4IG1pc3NpbmcgaW5jbHVkZSBkaXJlY3Rvcnkgd2hlbiBidWlsZGluZyB0ZXN0cworCitUaGlzIHBhdGNoIGlzIGN1cnJlbnRseSByZXF1aXJlZCBmb3IgYWxsIHZlcnNpb25zIG9mIG14CitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBAIGh0dHBzOi8vZ2l0aHViLmNvbS9jbHV0dGVyLXByb2plY3QvbXgvaXNzdWVzLzgyCitTaWduZWQtb2ZmLWJ5OiBUb21hcyBGcnlkcnljaCA8dG9tYXNAc2xlZXBmaXZlLmNvbT4KKy0tCitJbmRleDogZ2l0L3Rlc3RzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdGVzdHMvTWFrZWZpbGUuYW0JMjAxMy0wNS0wOCAxNToxODo1Ni45MTg1OTY0MjUgKzAxMDAKKysrKyBnaXQvdGVzdHMvTWFrZWZpbGUuYW0JMjAxMy0wNS0wOCAxNToyMzoyNi44NjQ3ODE0MDEgKzAxMDAKK0BAIC0xMCw3ICsxMCw4IEBACisgCisgSU5DTFVERVMgPSBcCisgCS1JJCh0b3Bfc3JjZGlyKSBcCistCS1JJCh0b3BfYnVpbGRkaXIpCisrCS1JJCh0b3BfYnVpbGRkaXIpXAorKwktSSQodG9wX2J1aWxkZGlyKS9teAorIAorIG5vaW5zdF9QUk9HUkFNUyA9IAkJCVwKKyAJdGVzdC1kZWZvcm0tdGV4dHVyZQkJXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wXzEuNC43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wXzEuNC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMzViNjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjBfMS40LjcuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSBteC5pbmMKKworIyBUaGUgMS40LjcgdGFnIGRvZXMgbm90IGJ1aWxkIGFnYWluc3QgY29nbCAxLjE0LCBwdWxsIGluIGEgcmV2aXNpb24gd2l0aCBhIGZpeAorU1JDUkVWID0gIjliMWRiNmI4MDYwYmQwMGIxMjFhNjkyZjk0MjQwNGEyNGFlMjk2MGYiCitQViA9ICIxLjQuNytnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2NsdXR0ZXItcHJvamVjdC9teC5naXQ7YnJhbmNoPW14LTEuNCBcCisJICAgZmlsZTovL2ZpeC1idWlsZC1kaXIucGF0Y2ggXAorCSAgIGZpbGU6Ly9maXgtdGVzdC1pbmNsdWRlcy5wYXRjaCBcCisJICAiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZmJjMDkzOTAxODU3ZmNkMTE4ZjA2NWY5MDA5ODJjMjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbXgvbXgtd2lkZ2V0LmM7YmVnaW5saW5lPTg7ZW5kbGluZT0yMDttZDU9MTNiYmEzYzk3M2E3MjQxNGE3MDFlMWU4N2I1ZWU4NzkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU3ZjE4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LmluYwpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkNsdXR0ZXIgYmFzZWQgVUkgd2lkZ2V0IGxpYnJhcnkiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorCitpbmhlcml0IGNsdXR0ZXIgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitERVBFTkRTID0gImNsdXR0ZXItMS4wIGRidXMtZ2xpYiBnZGstcGl4YnVmIgorCitTUkNfVVJJID0gImh0dHA6Ly9zb3VyY2UuY2x1dHRlci1wcm9qZWN0Lm9yZy9zb3VyY2VzL214LyR7QGdldF92ZXJkaXIoIiR7UFZ9Iil9L214LSR7UFZ9LnRhci54eiIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uCQlcCisJICAgICAgICAtLWRpc2FibGUtZ3RrLWRvYwkJXAorCSAgICAgICAgLS1kaXNhYmxlLWd0ay13aWRnZXRzCQlcCisJCS0td2l0aC1kYnVzCQkJXAorCQktLXdpdGgtd2luc3lzPW5vbmUJCVwKKwkJLS13aXRob3V0LWNsdXR0ZXItaW1jb250ZXh0CVwKKwkJLS13aXRob3V0LWNsdXR0ZXItZ2VzdHVyZQlcCisJCS0td2l0aG91dC1zdGFydHVwLW5vdGlmaWNhdGlvbglcCisJCS0td2l0aG91dC1nbGFkZQkJCVwKKwkgICAgICAgIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtY2x1dHRlci5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtY2x1dHRlci5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDY3ZTVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyLmJiCkBAIC0wLDAgKzEsMjEgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3IE9wZW5lZEhhbmQgTHRkLgorIworCitTVU1NQVJZID0gIkNsdXR0ZXIgcGFja2FnZSBncm91cHMiCitMSUNFTlNFID0gIk1JVCIKKworUFIgPSAicjYiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1BBQ0tBR0VTID0gIlwKKyAgICAke1BOfS1jb3JlIFwKKyAgICAiCisKK1NVTU1BUllfJHtQTn0tY29yZSA9ICJDbHV0dGVyIGdyYXBoaWNzIGxpYnJhcnkiCitSREVQRU5EU18ke1BOfS1jb3JlID0gIlwKKyAgICBjbHV0dGVyLTEuMCBcCisgICAgY2x1dHRlci1nc3QtMy4wIFwKKyAgICBjbHV0dGVyLWd0ay0xLjAgXAorICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWRpcmVjdGZiLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZGMwYWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWRpcmVjdGZiLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiRGlyZWN0RkIgd2l0aG91dCBYMTEiCitMSUNFTlNFID0gIk1JVCIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworVE9VQ0ggPSAnICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInRvdWNoc2NyZWVuIiwgInRzbGliIHRzbGliLWNhbGlicmF0ZSB0c2xpYi10ZXN0cyIsICIiLGQpfScKKworUkRFUEVORFNfJHtQTn0gPSAiIFwKKwkJZGlyZWN0ZmIgXAorCQlkaXJlY3RmYi1leGFtcGxlcyBcCisJCXBhbmdvIFwKKwkJcGFuZ28tbW9kdWxlcyBcCisJCWZvbnRjb25maWcgXAorCQkke1RPVUNIfSBcCisiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEtYmFzZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzMwMWEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEtYmFzZS5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIkJhc2ljIFgxMSBzZXNzaW9uIgorREVTQ1JJUFRJT04gPSAiUGFja2FnZXMgcmVxdWlyZWQgdG8gc2V0IHVwIGEgYmFzaWMgd29ya2luZyBYMTEgc2Vzc2lvbiIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjEiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyByZGVwZW5kcyBvbiBtYXRjaGJveC13bQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXgxMS14c2VydmVyIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS14MTEtdXRpbHMgXAorICAgIGRidXMgXAorICAgIHBvaW50ZXJjYWwgXAorICAgIG1hdGNoYm94LXRlcm1pbmFsIFwKKyAgICBtYXRjaGJveC13bSBcCisgICAgbWluaS14LXNlc3Npb24gXAorICAgIGxpYmVyYXRpb24tZm9udHMgXAorICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS14c2VydmVyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1M2YxYjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS14c2VydmVyLmJiCkBAIC0wLDAgKzEsMjEgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExIEludGVsIENvcnBvcmF0aW9uCisjCisKK1NVTU1BUlkgPSAiWDExIGRpc3BsYXkgc2VydmVyIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyNDAiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK2luaGVyaXQgcGFja2FnZWdyb3VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyByZGVwZW5kcyBvbiBYU0VSVkVSCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitYU0VSVkVSID89ICJ4c2VydmVyLXhvcmcgeGY4Ni12aWRlby1mYmRldiB4Zjg2LWlucHV0LWV2ZGV2IgorWFNFUlZFUkNPREVDUyA/PSAiIgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgJHtYU0VSVkVSfSBcCisgICAgJHtYU0VSVkVSQ09ERUNTfSBcCisgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTM3ZDhjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEuYmIKQEAgLTAsMCArMSwzNCBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24KKyMKKworTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyNDAiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyByZGVwZW5kcyBvbiB4MTEtY29tbW9uCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFUyA9ICIke1BOfSAke1BOfS11dGlscyIKKworIyB4c2VydmVyLWNvbW1vbiwgeDExLWNvbW1vbgorVklSVFVBTC1SVU5USU1FX3hzZXJ2ZXJfY29tbW9uID89ICJ4MTEtY29tbW9uIgorCisjIGVsc2EsIHhzZXJ2ZXItbm9kbS1pbml0CitWSVJUVUFMLVJVTlRJTUVfZ3JhcGhpY2FsX2luaXRfbWFuYWdlciA/PSAieHNlcnZlci1ub2RtLWluaXQiCisKK1NVTU1BUlkgPSAiWDExIGRpc3BsYXkgc2VydmVyIGFuZCBiYXNpYyB1dGlsaXRpZXMiCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgJHtQTn0teHNlcnZlciBcCisgICAgJHtQTn0tdXRpbHMgXAorICAgICIKKworU1VNTUFSWV8ke1BOfS11dGlscyA9ICJYMTEgYmFzaWMgdXRpbGl0aWVzIGFuZCBpbml0IgorUkRFUEVORFNfJHtQTn0tdXRpbHMgPSAiXAorICAgICR7VklSVFVBTC1SVU5USU1FX3hzZXJ2ZXJfY29tbW9ufSBcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfZ3JhcGhpY2FsX2luaXRfbWFuYWdlcn0gXAorICAgIHhhdXRoIFwKKyAgICB4aG9zdCBcCisgICAgeHNldCBcCisgICAgeHJhbmRyIFwKKyAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nby5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYwZmRmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvLmluYwpAQCAtMCwwICsxLDk5IEBACitTVU1NQVJZID0gIkZyYW1ld29yayBmb3IgbGF5b3V0IGFuZCByZW5kZXJpbmcgb2YgaW50ZXJuYXRpb25hbGl6ZWQgdGV4dCIKK0RFU0NSSVBUSU9OID0gIlBhbmdvIGlzIGEgbGlicmFyeSBmb3IgbGF5aW5nIG91dCBhbmQgcmVuZGVyaW5nIG9mIHRleHQsIFwKK3dpdGggYW4gZW1waGFzaXMgb24gaW50ZXJuYXRpb25hbGl6YXRpb24uIFBhbmdvIGNhbiBiZSB1c2VkIGFueXdoZXJlIFwKK3RoYXQgdGV4dCBsYXlvdXQgaXMgbmVlZGVkLCB0aG91Z2ggbW9zdCBvZiB0aGUgd29yayBvbiBQYW5nbyBzbyBmYXIgaGFzIFwKK2JlZW4gZG9uZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgR1RLKyB3aWRnZXQgdG9vbGtpdC4gUGFuZ28gZm9ybXMgdGhlIFwKK2NvcmUgb2YgdGV4dCBhbmQgZm9udCBoYW5kbGluZyBmb3IgR1RLKy0yLnguIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5wYW5nby5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjIuMCsiCisKK1gxMURFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlieGZ0IgorREVQRU5EUyA9ICJnbGliLTIuMCBmb250Y29uZmlnIGZyZWV0eXBlIHpsaWIgdmlydHVhbC9saWJpY29udiBjYWlybyBoYXJmYnV6eiBxZW11LW5hdGl2ZSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHRlc3QnLCAncHRlc3QnLCAnJywgZCl9IgorCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXhmdCwtLXdpdGhvdXQteGZ0LCR7WDExREVQRU5EU30iCitQQUNLQUdFQ09ORklHW3B0ZXN0XSA9ICItLWVuYWJsZS1pbnN0YWxsZWQtdGVzdHMsLS1kaXNhYmxlLWluc3RhbGxlZC10ZXN0cyxnbGliLTIuMC1uYXRpdmUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiZ2xpYi0yLjAtbmF0aXZlIGNhaXJvLW5hdGl2ZSBoYXJmYnV6ei1uYXRpdmUiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5wYW5nby1tb2R1bGUtLioiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gInBhbmdvLW1vZHVsZS1iYXNpYy1mYyIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWRvYyBxZW11IHB0ZXN0CisKKyMgQ3JlYXRlIGEgcGFuZ28tbW9kdWxlcyBwYWNrYWdlCitBTExPV19FTVBUWV8ke0JQTn0tbW9kdWxlcyA9ICIxIgorUEFDS0FHRVMgKz0gIiR7QlBOfS1tb2R1bGVzIgorUlJFQ09NTUVORFNfJHtCUE59LW1vZHVsZXMgPSAgIiR7QCIgIi5qb2luKFtwIGZvciBwIGluIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkgaWYgcC5maW5kKCJwYW5nby1tb2R1bGUiKSAhPSAtMV0pfSIKKworCitFWFRSQV9BVVRPUkVDT05GID0gIiIKKworIyBzZWVtcyB0byBnbyB3cm9uZyB3aXRoIGRlZmF1bHQgY2ZsYWdzCitGVUxMX09QVElNSVpBVElPTl9hcm0gPSAiLU8yIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24gXAorCQktLWVuYWJsZS1leHBsaWNpdC1kZXBzPW5vIFwKKwkgICAgICAgIC0tZGlzYWJsZS1kZWJ1ZyBcCisJICAgICAgICAtLXdpdGgtbWxwcmVmaXg9JHtNTFBSRUZJWH0iCisKK0xFQURfU09OQU1FID0gImxpYnBhbmdvLTEuMCoiCitMSUJWID0gIjEuOC4wIgorCitwYW5nb19wb3N0aW5zdCgpIHsKK2lmICEgWyAtZSAkRCR7c3lzY29uZmRpcn0vcGFuZ28gXSA7IHRoZW4KKwlta2RpciAtcCAkRCR7c3lzY29uZmRpcn0vcGFuZ28KK2ZpCisKK2lmIFsgLW4gIiREIiBdOyB0aGVuCisJJHtAcWVtdV9ydW5fYmluYXJ5KGQsICckRCcsJyR7YmluZGlyfS8ke01MUFJFRklYfXBhbmdvLXF1ZXJ5bW9kdWxlcycpfSBcCisJCSREJHtsaWJkaXJ9L3BhbmdvLyR7TElCVn0vbW9kdWxlcy8qLnNvIFwKKwkJPiAkRCR7c3lzY29uZmRpcn0vcGFuZ28vJHtNTFBSRUZJWH1wYW5nby5tb2R1bGVzIDI+L2Rldi9udWxsCisKKwlbICQ/IC1uZSAwIF0gJiYgZXhpdCAxCisKKwlzZWQgLWkgLWUgInM6JEQ6OiIgJEQke3N5c2NvbmZkaXJ9L3BhbmdvLyR7TUxQUkVGSVh9cGFuZ28ubW9kdWxlcworCisJZXhpdCAwCitlbHNlCisJJHtiaW5kaXJ9LyR7TUxQUkVGSVh9cGFuZ28tcXVlcnltb2R1bGVzID4gL2V0Yy9wYW5nby8ke01MUFJFRklYfXBhbmdvLm1vZHVsZXMKK2ZpCit9CisKKyMgVGhpcyBiaW5hcnkgbmVlZHMgdG8gYmUgY29tcGlsZWQgZm9yIHRoZSBob3N0IGFyY2hpdGVjdHVyZS4gIFRoaXMgaXNuJ3QgcHJldHR5IQorZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKwlpZiAke0BiYXNlX2NvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHRlc3QnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQltYWtlIENDPSIke0JVSUxEX0NDfSIgQ0ZMQUdTPSIiIEFNX0NQUEZMQUdTPSIkKHBrZy1jb25maWctbmF0aXZlIC0tY2ZsYWdzIGdsaWItMi4wKSIgZ2VuX2FsbF91bmljb2RlX0xEQUREPSIkKHBrZy1jb25maWctbmF0aXZlIC0tbGlicyBnbGliLTIuMCkiIC1DICR7Qn0vdGVzdHMgZ2VuLWFsbC11bmljb2RlCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWlmIFsgIiR7TUxQUkVGSVh9IiAhPSAiIiBdOyB0aGVuCisJCW12ICR7RH0vJHtiaW5kaXJ9L3BhbmdvLXF1ZXJ5bW9kdWxlcyAke0R9LyR7YmluZGlyfS8ke01MUFJFRklYfXBhbmdvLXF1ZXJ5bW9kdWxlcyAKKwlmaQorfQorCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBwYW5nb19wb3N0aW5zdCA9IGQuZ2V0VmFyKCJwYW5nb19wb3N0aW5zdCIsIFRydWUpCisKKyAgICBtb2R1bGVzX3Jvb3QgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L3BhbmdvLyR7TElCVn0vbW9kdWxlcycpCisKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBtb2R1bGVzX3Jvb3QsICdecGFuZ28tKC4qKVwuc28kJywgJ3BhbmdvLW1vZHVsZS0lcycsICdQYW5nbyBtb2R1bGUgJXMnLCBwYW5nb19wb3N0aW5zdCkKK30KKworRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9wYW5nby8qICR7YmluZGlyfS8qICR7bGliZGlyfS9saWJwYW5nbyoke1NPTElCU30iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9wYW5nby8ke0xJQlZ9L21vZHVsZXMvLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vcGFuZ28vJHtMSUJWfS9tb2R1bGVzLyoubGEiCisKK0ZJTEVTXyR7UE59LXB0ZXN0ICs9ICIke2xpYmV4ZWNkaXJ9L2luc3RhbGxlZC10ZXN0cy8qIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2luc3RhbGxlZC10ZXN0cy9wYW5nbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9pbnN0YWxsZWQtdGVzdHMvLmRlYnVnIgorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiZ25vbWUtZGVza3RvcC10ZXN0aW5nIGxpYmVyYXRpb24tZm9udHMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nby9tdWx0aWxpYi1maXgtY2xlYW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nby9tdWx0aWxpYi1maXgtY2xlYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ0MTRkZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvL211bHRpbGliLWZpeC1jbGVhbi5wYXRjaApAQCAtMCwwICsxLDc1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVXBkYXRlZCB0byBhcHBseSB0byBwYW5nby0xLjMyLjUKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgcGFuZ28tMS4zMi41L2NvbmZpZ3VyZS5hYyBwYW5nby0xLjMyLjUvY29uZmlndXJlLmFjCistLS0gcGFuZ28tMS4zMi41L2NvbmZpZ3VyZS5hYwkyMDEyLTEyLTA3IDA0OjQzOjI1LjAwMDAwMDAwMCArMDIwMAorKysrIHBhbmdvLTEuMzIuNS9jb25maWd1cmUuYWMJMjAxMy0wMS0wOSAwODoyNzo0MC4zMjg1MTY3OTIgKzAyMDAKK0BAIC0yMTMsNiArMjEzLDExIEBACisKKyBBQ19TVUJTVChQQU5HT19ERUJVR19GTEFHUykKKworK0FDX0FSR19XSVRIKG1scHJlZml4LAorKyAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtbWxwcmVmaXg9PEFSRz5dLCBbbXVsdGlsaWIgcHJlZml4XSksCisrICAgICAgICAgICAgbWxwcmVmaXhfc3RyPSR3aXRodmFsLCBtbHByZWZpeF9zdHI9IiIpCisrQUNfREVGSU5FX1VOUVVPVEVEKFtNTFBSRUZJWF0sIFsiJG1scHJlZml4X3N0ciJdLCBbbXVsdGlsaWIgcHJlZml4Ll0pCisrCisgQUNfQVJHX0VOQUJMRShyZWJ1aWxkcywKKyAgICAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXJlYnVpbGRzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZSBhbGwgc291cmNlIGF1dG9nZW5lcmF0aW9uIHJ1bGVzXSldLCwKK2RpZmYgLU51cmQgcGFuZ28tMS4zMi41L3BhbmdvL21vZHVsZXMuYyBwYW5nby0xLjMyLjUvcGFuZ28vbW9kdWxlcy5jCistLS0gcGFuZ28tMS4zMi41L3BhbmdvL21vZHVsZXMuYwkyMDEyLTEyLTE3IDIwOjI3OjU2LjAwMDAwMDAwMCArMDIwMAorKysrIHBhbmdvLTEuMzIuNS9wYW5nby9tb2R1bGVzLmMJMjAxMy0wMS0wOSAwODozMToxNi4zMzY1MTIwNTIgKzAyMDAKK0BAIC01NTUsMTEgKzU1NSwxMSBAQAorICAgICAgIGZpbGVzID0gZ19uZXcgKGNoYXIgKiwgMyk7CisKKyAgICAgICBmaWxlc1swXSA9IGdfYnVpbGRfZmlsZW5hbWUgKHBhbmdvX2dldF9zeXNjb25mX3N1YmRpcmVjdG9yeSAoKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYW5nby5tb2R1bGVzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1MUFJFRklYICJwYW5nby5tb2R1bGVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgIGZpbGVzWzFdID0gZ19idWlsZF9maWxlbmFtZSAocGFuZ29fZ2V0X2xpYl9zdWJkaXJlY3RvcnkgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfVkVSU0lPTiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2R1bGVzLmNhY2hlIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1MUFJFRklYICJtb2R1bGVzLmNhY2hlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgIGZpbGVzWzJdID0gTlVMTDsKKyAgICAgfQorQEAgLTY3NCw3ICs2NzQsOCBAQAorICAgICAgIGlmICghbm9fbW9kdWxlX3dhcm5pbmcpCisJeworCSAgZ2NoYXIgKmZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZSAocGFuZ29fZ2V0X3N5c2NvbmZfc3ViZGlyZWN0b3J5ICgpLAorLQkJCQkJICAgICAgInBhbmdvLm1vZHVsZXMiLAorKy8qIEZvciBtdWx0aWxpYiBjYXNlLCBrZWVwIG11bHRpcGxlIGNvbmZpZyBmaWxlIGZvciBkaWZmZXJlbnQgbGlicyAqLworKwkJCQkJICAgICAgTUxQUkVGSVggInBhbmdvLm1vZHVsZXMiLAorCQkJCQkgICAgICBOVUxMKTsKKwkgIGdfY3JpdGljYWwgKCJObyBtb2R1bGVzIGZvdW5kOlxuIgorCQkgICAgICAiTm8gYnVpbHRpbiBvciBkeW5hbWljYWxseSBsb2FkZWQgbW9kdWxlcyB3ZXJlIGZvdW5kLlxuIgorZGlmZiAtTnVyZCBwYW5nby0xLjMyLjUvcGFuZ28vbW9kdWxlcy5jLnJlaiBwYW5nby0xLjMyLjUvcGFuZ28vbW9kdWxlcy5jLnJlagorLS0tIHBhbmdvLTEuMzIuNS9wYW5nby9tb2R1bGVzLmMucmVqCTE5NzAtMDEtMDEgMDI6MDA6MDAuMDAwMDAwMDAwICswMjAwCisrKysgcGFuZ28tMS4zMi41L3BhbmdvL21vZHVsZXMuYy5yZWoJMjAxMy0wMS0wOSAwODoyNzo0MC4zMjg1MTY3OTIgKzAyMDAKK0BAIC0wLDAgKzEsMTIgQEAKKystLS0gcGFuZ28vbW9kdWxlcy5jCTIwMTAtMDktMjIgMDM6Mzc6MDEuMDAwMDAwMDAwICswODAwCisrKysrIHBhbmdvL21vZHVsZXMuYwkyMDEyLTA1LTA4IDIxOjIxOjAyLjAwMDAwMDAwMCArMDgwMAorK0BAIC01MjksNyArNTI5LDggQEAKKysKKysgICBpZiAoIWZpbGVfc3RyKQorKyAgICAgZmlsZV9zdHIgPSBnX2J1aWxkX2ZpbGVuYW1lIChwYW5nb19nZXRfc3lzY29uZl9zdWJkaXJlY3RvcnkgKCksCisrLQkJCQkgInBhbmdvLm1vZHVsZXMiLAorKysvKiBGb3IgbXVsdGlsaWIgY2FzZSwga2VlcCBtdWx0aXBsZSBjb25maWcgZmlsZSBmb3IgZGlmZmVyZW50IGxpYnMgKi8KKysrCQkJCSBNTFBSRUZJWCAicGFuZ28ubW9kdWxlcyIsCisrIAkJCQkgTlVMTCk7CisrCisrICAgZmlsZXMgPSBwYW5nb19zcGxpdF9maWxlX2xpc3QgKGZpbGVfc3RyKTsKK2RpZmYgLU51cmQgcGFuZ28tMS4zMi41L3BhbmdvL3F1ZXJ5bW9kdWxlcy5jIHBhbmdvLTEuMzIuNS9wYW5nby9xdWVyeW1vZHVsZXMuYworLS0tIHBhbmdvLTEuMzIuNS9wYW5nby9xdWVyeW1vZHVsZXMuYwkyMDEyLTA4LTI4IDE1OjI3OjE4LjAwMDAwMDAwMCArMDMwMAorKysrIHBhbmdvLTEuMzIuNS9wYW5nby9xdWVyeW1vZHVsZXMuYwkyMDEzLTAxLTA5IDA4OjMxOjQ3LjgyODUxMTM1OSArMDIwMAorQEAgLTMwNCw3ICszMDQsNyBAQAorCisgICAgICAgY2FjaGVfZmlsZSA9IGdfYnVpbGRfZmlsZW5hbWUgKHBhbmdvX2dldF9saWJfc3ViZGlyZWN0b3J5ICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfVkVSU0lPTiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZHVsZXMuY2FjaGUiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNTFBSRUZJWCAibW9kdWxlcy5jYWNoZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgIGVyciA9IE5VTEw7CisgICAgICAgaWYgKCFnX2ZpbGVfc2V0X2NvbnRlbnRzIChjYWNoZV9maWxlLCBjb250ZW50cy0+c3RyLCAtMSwgJmVycikpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nby9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nby9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE4N2E3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhIC9iaW4vc2gKKworZ25vbWUtZGVza3RvcC10ZXN0aW5nLXJ1bm5lciBwYW5nbwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ29fMS4zNi44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ29fMS4zNi44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZTQyNTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nb18xLjM2LjguYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSBwYW5nby5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTciCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAgZmlsZTovL211bHRpbGliLWZpeC1jbGVhbi5wYXRjaCBcCisiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjIxN2E5YTc1MzAwNjI3NTIxNWZhOWZhMTI3NzYwZWNlIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMThkYmI1MWI4YWUxMmJhZTBhYjdhOTU4ZTdjZjMzMTdjOWFjZmM4YTFlMTEwM2VjMmYxNDcxNjRhMGZjMmQwNyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS10ZXN0cy1GaXgtbWlzc2luZy1pbmNsdWRlLW9mLVh1dGlsLmgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0LzAwMDEtdGVzdHMtRml4LW1pc3NpbmctaW5jbHVkZS1vZi1YdXRpbC5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyN2NjMDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0LzAwMDEtdGVzdHMtRml4LW1pc3NpbmctaW5jbHVkZS1vZi1YdXRpbC5oLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CisKK0Zyb20gZTQwZTBhMjVmOTk2ZDJlMjA1YzRiZGVjMmM4YTVjYzdmNzRlNTA2NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CitEYXRlOiBNb24sIDE1IEp1biAyMDE1IDE2OjI1OjMwIC0wMzAwCitTdWJqZWN0OiB0ZXN0czogRml4IG1pc3NpbmcgaW5jbHVkZSBvZiBYdXRpbC5oCisKK1RoZSBFR0wgdGVzdHMgcmVseSBvbiBYdXRpbC5oIGJlaW5nIGluY2x1ZGVkLiBTb21lIEVHTCBpbXBsZW1lbnRhdGlvbgorZG9lcyBub3QgZXhwbGl0bHkgaW5jbHVkZSBpdCBieSBkZWZhdWx0IGFuZCB0aGVuIHRoZSBidWlsZCBmYWlscy4KKworU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KK1Jldmlld2VkLWJ5OiBOZWlsIFJvYmVydHMgPG5laWxAbGludXguaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvdGVzdHMvZWdsL2VnbC1jb25maWdsZXNzLWNvbnRleHQuYyBiL3Rlc3RzL2VnbC9lZ2wtY29uZmlnbGVzcy1jb250ZXh0LmMKK2luZGV4IDA1MDRhMjYuLjE1NGI1NWMgMTAwNjQ0CistLS0gYS90ZXN0cy9lZ2wvZWdsLWNvbmZpZ2xlc3MtY29udGV4dC5jCisrKysgYi90ZXN0cy9lZ2wvZWdsLWNvbmZpZ2xlc3MtY29udGV4dC5jCitAQCAtMzIsNiArMzIsNyBAQAorIC8qIENodW5rcyBvZiBjb2RlIGluIHRoaXMgZmlsZSBhcmUgdGFrZW4gZnJvbSBlZ2wtdXRpbC5jICovCisgCisgI2luY2x1ZGUgPFgxMS9YbGliLmg+CisrI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorIAorICNpbmNsdWRlICJwaWdsaXQtdXRpbC1nbC5oIgorICNpbmNsdWRlICJwaWdsaXQtdXRpbC1lZ2wuaCIKKy0tIAorY2dpdCB2MC4xMC4yCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0X2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODI1YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0X2dpdC5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIk9wZW5HTCBkcml2ZXIgdGVzdGluZyBmcmFtZXdvcmsiCitMSUNFTlNFID0gIk1JVCAmIExHUEx2MisgJiBHUEx2MyAmIEdQTHYyKyAmIEJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyYmVkZWQ3MTAzYTNkOGE0NDJhMmEwMzkxZDYwN2IwIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL3BpZ2xpdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXRlc3RzLUZpeC1taXNzaW5nLWluY2x1ZGUtb2YtWHV0aWwuaC5wYXRjaCIKKworIyBGcm9tIDIwMTQvMTIvMDQKK1NSQ1JFViA9ICIxMjZjN2QwNDliOGYzMmU1NDE2MjVkNWEzNWZiYzVmNWU0ZTdmYmY4IgorIyAod2hlbiBQViBnb2VzIGFib3ZlIDEuMCByZW1vdmUgdGhlIHRyYWlsaW5nIHIpCitQViA9ICIxLjArZ2l0ciR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnhyZW5kZXIgd2FmZmxlIHZpcnR1YWwvbGliZ2wgbGliZ2x1IHB5dGhvbi1tYWtvLW5hdGl2ZSBweXRob24tbnVtcHktbmF0aXZlIgorCitpbmhlcml0IGNtYWtlIHB5dGhvbm5hdGl2ZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbZnJlZWdsdXRdID0gIi1EUElHTElUX1VTRV9HTFVUPTEsLURQSUdMSVRfVVNFX0dMVVQ9MCxmcmVlZ2x1dCwiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZnJlZWdsdXQnLCAneWVzJywgJ25vJywgZCl9IiA9ICJubyIgXTsgdGhlbgorICAgICAgICBzZWQgLWkgLWUgIi9eIy4qaW5jbHVkZSA8R0xcL2ZyZWVnbHV0X2V4dC5oPiQvZCIgJHtTfS9zcmMvcGlnbGl0L2dsdXRfd3JhcC5oCisgICAgICAgIHNlZCAtaSAtZSAiL14jLippbmNsdWRlLio8R0xcL2dsdXQuaD4kL2QiICR7U30vc3JjL3BpZ2xpdC9nbHV0X3dyYXAuaAorICAgZmkKK30KKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcGlnbGl0LyovLmRlYnVnLyIKKworUkRFUEVORFNfJHtQTn0gPSAid2FmZmxlIHB5dGhvbiBweXRob24tbWFrbyBweXRob24tanNvbiBweXRob24tc3VicHJvY2VzcyBcCisJcHl0aG9uLWFyZ3BhcnNlIHB5dGhvbi1pbXBvcnRsaWIgcHl0aG9uLXVuaXhhZG1pbiBcCisJcHl0aG9uLW11bHRpcHJvY2Vzc2luZyBweXRob24tdGV4dHV0aWxzIHB5dGhvbi1uZXRzZXJ2ZXIgcHl0aG9uLXNoZWxsIFwKKwltZXNhLWRlbW9zIGJhc2ggXAorCSIKKworSU5TQU5FX1NLSVBfJHtQTn0gKz0gImRldi1zbyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BvbmctY2xvY2svcG9uZy1jbG9jay9wb25nLWNsb2NrLW5vLWZsaWNrZXIuYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BvbmctY2xvY2svcG9uZy1jbG9jay9wb25nLWNsb2NrLW5vLWZsaWNrZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWNlYmM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcG9uZy1jbG9jay9wb25nLWNsb2NrL3BvbmctY2xvY2stbm8tZmxpY2tlci5jCkBAIC0wLDAgKzEsNDEwIEBACisvKgorICogUG9uZyBDbG9jayAtIEEgY2xvY2sgdGhhdCBwbGF5cyBwb25nLiAKKyAqICAgICAgICAgICAgIFNlZSBodHRwOi8vbW9jb2xvY28uY29tL2FyY2hpdmVzLzAwMTc2Ni5waHAgZm9yIHRoZSBpbnNwaXJhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTWF0dGhldyBBbGx1bQorICoKKyAqIEF1dGhvcjogTWF0dGhldyBBbGx1bSBtYWxsdW1Ab3BlbmVkaGFuZC5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisjaW5jbHVkZSA8WDExL1hhdG9tLmg+CisKKy8qIFR3ZWFrIHZhbHVlcyBmb3IgZGlmZmVyZW50IGh3IHNldHVwcyAqLworCisjZGVmaW5lIEZQUyAgICAgICAgICA1MAorI2RlZmluZSBSRVNYICAgICAgICAgNDAKKyNkZWZpbmUgUkVTWSAgICAgICAgIDQwCisjZGVmaW5lIFRPX01JU1NfU0VDUyA1NQorI2RlZmluZSBCQUxMRFggICAgICAgMTYKKyNkZWZpbmUgQkFMTERZICAgICAgIDQKKworCit0eXBlZGVmIHN0cnVjdCBQb25nQ2xvY2sKK3sKKyAgRGlzcGxheSAqeGRweTsKKyAgaW50ICAgICAgeHNjcmVlbjsKKyAgV2luZG93ICAgeHdpbiwgeHdpbl9yb290OworICBQaXhtYXAgICBiYWNrYnVmZmVyOworICBHQyAgICAgICB4Z2M7CisgIGludCAgICAgIHh3aW5fd2lkdGgsIHh3aW5faGVpZ2h0OworICBpbnQgICAgICBwaXhlbHcsIHBpeGVsaDsKKworICBpbnQgICAgICBiYWxsX3gsIGJhbGxfeSwgYmFsbF9keCwgYmFsbF9keTsKKyAgaW50ICAgICAgYmF0YV95LCBiYXRiX3k7CisgIEJvb2wgICAgIGJhdGFfdG9fbWlzcywgYmF0Yl90b19taXNzOworCit9IAorUG9uZ0Nsb2NrOworCit2b2lkCitnZXRfdGltZShpbnQgKmhvdXIsIGludCAqbWluLCBpbnQgKnNlYykKK3sKKyAgc3RydWN0IHRpbWV2YWwgICB0djsKKyAgc3RydWN0IHRtICAgICAgICpsb2NhbFRpbWUgPSBOVUxMOyAKKyAgdGltZV90ICAgICAgICAgICBhY3R1YWxUaW1lOworCisgIGdldHRpbWVvZmRheSgmdHYsIDApOworICBhY3R1YWxUaW1lID0gdHYudHZfc2VjOworICBsb2NhbFRpbWUgPSBsb2NhbHRpbWUoJmFjdHVhbFRpbWUpOworCisgIGlmIChob3VyKQorICAgICpob3VyID0gbG9jYWxUaW1lLT50bV9ob3VyOworICAKKyAgaWYgKG1pbikKKyAgICAqbWluICA9IGxvY2FsVGltZS0+dG1fbWluOworCisgIGlmIChzZWMpCisgICAgKnNlYyAgPSBsb2NhbFRpbWUtPnRtX3NlYzsKK30KKwordm9pZAorZHJhd19yZWN0IChQb25nQ2xvY2sgKnBvbmdfY2xvY2ssIAorCSAgIGludCAgICAgICAgeCwKKwkgICBpbnQgICAgICAgIHksCisJICAgaW50ICAgICAgICB3aWR0aCwKKwkgICBpbnQgICAgICAgIGhlaWdodCkKK3sKKyAgWEZpbGxSZWN0YW5nbGUgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgcG9uZ19jbG9jay0+YmFja2J1ZmZlciwKKwkJICBwb25nX2Nsb2NrLT54Z2MsCisJCSAgeCAqIHBvbmdfY2xvY2stPnBpeGVsdywKKwkJICB5ICogcG9uZ19jbG9jay0+cGl4ZWxoLAorCQkgIHdpZHRoICogcG9uZ19jbG9jay0+cGl4ZWx3LAorCQkgIGhlaWdodCAqIHBvbmdfY2xvY2stPnBpeGVsaCk7Cit9CisKK3ZvaWQKK2RyYXdfZmllbGQgKFBvbmdDbG9jayAqcG9uZ19jbG9jaykKK3sKKyAgaW50IGk7CisKKyAgZHJhd19yZWN0IChwb25nX2Nsb2NrLCAwLCAwLCBSRVNYKzEsIDEpOyAgCisgIGRyYXdfcmVjdCAocG9uZ19jbG9jaywgMCwgUkVTWS0xLCBSRVNYKzEsIDEpOyAgCisKKyAgZm9yIChpPTA7IGkgPCBSRVNZLzI7IGkrKykKKyAgICBkcmF3X3JlY3QgKHBvbmdfY2xvY2ssIChSRVNYLzIpLTEsIGkqMiwgMiwgMSk7ICAKK30KKwordm9pZAorZHJhd19kaWdpdCAoUG9uZ0Nsb2NrICpwb25nX2Nsb2NrLCAKKwkgICAgaW50ICAgICAgICB4LAorCSAgICBpbnQgICAgICAgIHksCisJICAgIGludCAgICAgICAgZGlnaXQpCit7CisgIGludCBkaWdpdHNbXSA9IHsgMHgxZjhjNjNmLCAweDFmMjEwODYsIDB4MWYwZmUxZiwgMHgxZjg3ZTFmLCAweDEwODdlMzEsCisJCSAgIDB4MWY4N2MzZiwgMHgxZjhmYzNmLCAweDg0NDIxZiwgIDB4MWY4ZmUzZiwgMHgxMDg3ZTNmIH07CisKKyAgWFJlY3RhbmdsZSByZWN0c1s1KjVdOworICBpbnQgaSxqLGs7CisKKyAgaSA9IDA7CisKKyAgZm9yIChrPTA7IGs8NTsgaysrKSAKKyAgICBmb3IgKGo9MDsgajw1OyBqKyspCQorICAgICAgaWYgKGRpZ2l0c1tkaWdpdF0gJiAoMSA8PCAoKGsqNSkraikpKQorCXsKKwkgIHJlY3RzW2ldLnggICAgICA9ICh4ICsgaikgKiBwb25nX2Nsb2NrLT5waXhlbHc7IAorCSAgcmVjdHNbaV0ueSAgICAgID0gKHkgKyBrKSAqIHBvbmdfY2xvY2stPnBpeGVsaDsgCisJICByZWN0c1tpXS53aWR0aCAgPSBwb25nX2Nsb2NrLT5waXhlbHc7CisJICByZWN0c1tpXS5oZWlnaHQgPSBwb25nX2Nsb2NrLT5waXhlbGg7ICAKKwkgIGkrKzsKKwl9CisKKyAgWEZpbGxSZWN0YW5nbGVzIChwb25nX2Nsb2NrLT54ZHB5LAorCQkgICBwb25nX2Nsb2NrLT5iYWNrYnVmZmVyLAorCQkgICBwb25nX2Nsb2NrLT54Z2MsCisJCSAgIHJlY3RzLCBpKTsKK30gCisKK3ZvaWQKK2RyYXdfdGltZSAoUG9uZ0Nsb2NrICpwb25nX2Nsb2NrKQoreworICBpbnQgaG91ciwgbWluOworCisgIGdldF90aW1lKCZob3VyLCAmbWluLCBOVUxMKTsKKworICBkcmF3X2RpZ2l0IChwb25nX2Nsb2NrLCAKKwkgICAgICAoUkVTWC8yKSAtIDE0LAorCSAgICAgIDUsCisJICAgICAgaG91ciAvIDEwICk7CisKKyAgZHJhd19kaWdpdCAocG9uZ19jbG9jaywgCisJICAgICAgKFJFU1gvMikgLSA4LAorCSAgICAgIDUsCisJICAgICAgaG91ciAlIDEwICk7CisKKyAgZHJhd19kaWdpdCAocG9uZ19jbG9jaywgCisJICAgICAgKFJFU1gvMikgKyAzLAorCSAgICAgIDUsCisJICAgICAgbWluIC8gMTAgKTsKKworICBkcmF3X2RpZ2l0IChwb25nX2Nsb2NrLCAKKwkgICAgICAoUkVTWC8yKSArIDksCisJICAgICAgNSwKKwkgICAgICBtaW4gJSAxMCApOworfQorCit2b2lkCitkcmF3X2JhdF9hbmRfYmFsbCAoUG9uZ0Nsb2NrICpwb25nX2Nsb2NrKQoreworICAvKiBiYWxsICovCisKKyAgWEZpbGxSZWN0YW5nbGUgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgcG9uZ19jbG9jay0+YmFja2J1ZmZlciwKKwkJICBwb25nX2Nsb2NrLT54Z2MsCisJCSAgcG9uZ19jbG9jay0+YmFsbF94LAorCQkgIHBvbmdfY2xvY2stPmJhbGxfeSwKKwkJICBwb25nX2Nsb2NrLT5waXhlbHcsCisJCSAgcG9uZ19jbG9jay0+cGl4ZWxoKTsKKworICAvKiBiYXQgYSAqLworCisgIFhGaWxsUmVjdGFuZ2xlIChwb25nX2Nsb2NrLT54ZHB5LAorCQkgIHBvbmdfY2xvY2stPmJhY2tidWZmZXIsCisJCSAgcG9uZ19jbG9jay0+eGdjLAorCQkgIDAsCisJCSAgcG9uZ19jbG9jay0+YmF0YV95IC0gKDIgKiBwb25nX2Nsb2NrLT5waXhlbGgpLAorCQkgIHBvbmdfY2xvY2stPnBpeGVsdywKKwkJICBwb25nX2Nsb2NrLT5waXhlbGggKiA1KTsKKworICAvKiBiYXQgYiAqLworCisgIFhGaWxsUmVjdGFuZ2xlIChwb25nX2Nsb2NrLT54ZHB5LAorCQkgIHBvbmdfY2xvY2stPmJhY2tidWZmZXIsCisJCSAgcG9uZ19jbG9jay0+eGdjLAorCQkgIChwb25nX2Nsb2NrLT54d2luX3dpZHRoIC0gcG9uZ19jbG9jay0+cGl4ZWx3KSwKKwkJICBwb25nX2Nsb2NrLT5iYXRiX3kgLSAoMiAqIHBvbmdfY2xvY2stPnBpeGVsaCksCisJCSAgcG9uZ19jbG9jay0+cGl4ZWx3LAorCQkgIHBvbmdfY2xvY2stPnBpeGVsaCAqIDUpOworCit9CisKK3ZvaWQKK3VwZGF0ZV9zdGF0ZSAoUG9uZ0Nsb2NrICpwb25nX2Nsb2NrKQoreworICBpbnQgc2VjLCBtaW4sIGhvdXI7CisKKyAgZ2V0X3RpbWUoJmhvdXIsICZtaW4sICZzZWMpOworCisgIC8qIENoZWNrIGJhbGwgaXMgb24gZmllbGQgYW5kIG5vIG9uZXMgZHVlcyB0byBtaXNzIGEgc2hvdC4KKyAgKi8KKyAgaWYgKCAocG9uZ19jbG9jay0+YmFsbF94IDwgMCAmJiAhcG9uZ19jbG9jay0+YmF0YV90b19taXNzKSAKKyAgICAgIHx8IChwb25nX2Nsb2NrLT5iYWxsX3ggPiAocG9uZ19jbG9jay0+eHdpbl93aWR0aCAtIHBvbmdfY2xvY2stPnBpeGVsdykKKwkgICYmICFwb25nX2Nsb2NrLT5iYXRiX3RvX21pc3MpICkKKyAgICBwb25nX2Nsb2NrLT5iYWxsX2R4ICo9IC0xOworCisgIGlmICgocG9uZ19jbG9jay0+YmFsbF95IDwgcG9uZ19jbG9jay0+cGl4ZWxoKQorICAgICAgfHwgcG9uZ19jbG9jay0+YmFsbF95ID4gKHBvbmdfY2xvY2stPnh3aW5faGVpZ2h0IC0gKDIqcG9uZ19jbG9jay0+cGl4ZWxoKSkpCisgICAgcG9uZ19jbG9jay0+YmFsbF9keSAqPSAtMTsgCisKKyAgcG9uZ19jbG9jay0+YmFsbF94ICs9IHBvbmdfY2xvY2stPmJhbGxfZHg7CisgIHBvbmdfY2xvY2stPmJhbGxfeSArPSBwb25nX2Nsb2NrLT5iYWxsX2R5OworCisgIC8qIFNldCB1cCBzb21lb25lIHRvIG1pc3MgaWYgd2UgZ2V0dGluZyBjbG9zZSB0byBhbiBob3VyIG9yIG1pbi4gCisgICAqLworICBpZiAoc2VjID4gVE9fTUlTU19TRUNTKQorICAgIHsKKyAgICAgIGlmIChtaW4gPT0gNTkpCisJcG9uZ19jbG9jay0+YmF0Yl90b19taXNzID0gVHJ1ZTsJCisgICAgICBlbHNlCisJcG9uZ19jbG9jay0+YmF0YV90b19taXNzID0gVHJ1ZTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBSZXNldCB0aGUgZ2FtZSAqLworICAgICAgaWYgKHBvbmdfY2xvY2stPmJhdGFfdG9fbWlzcykKKwl7CisJICBwb25nX2Nsb2NrLT5iYXRhX3RvX21pc3MgPSBGYWxzZTsKKwkgIHBvbmdfY2xvY2stPmJhbGxfeSA9IHBvbmdfY2xvY2stPmJhdGFfeTsgCisJICBwb25nX2Nsb2NrLT5iYWxsX3ggPSBwb25nX2Nsb2NrLT5waXhlbHc7IAorCSAgcG9uZ19jbG9jay0+YmFsbF9keCAqPSAtMTsKKwl9CisKKyAgICAgIGlmIChwb25nX2Nsb2NrLT5iYXRiX3RvX21pc3MpCisJeworCSAgcG9uZ19jbG9jay0+YmF0Yl90b19taXNzID0gRmFsc2U7CisJICBwb25nX2Nsb2NrLT5iYWxsX3kgPSBwb25nX2Nsb2NrLT5iYXRiX3k7IAorCSAgcG9uZ19jbG9jay0+YmFsbF94ID0gcG9uZ19jbG9jay0+eHdpbl93aWR0aCAtIHBvbmdfY2xvY2stPnBpeGVsdzsKKwkgIHBvbmdfY2xvY2stPmJhbGxfZHggKj0gLTE7IAorCX0KKyAgICB9CisKKyAgLyogS2VlcCBiYXRzIG9uIGZpZWxkIGFuZCBvbmx5IG1vdmUgaW4gbm90IHNldHVwIHRvIG1pc3MgKi8KKyAgaWYgKHBvbmdfY2xvY2stPmJhbGxfeSA+PSAoMypwb25nX2Nsb2NrLT5waXhlbGgpCisgICAgICAmJiBwb25nX2Nsb2NrLT5iYWxsX3kgPD0gIChwb25nX2Nsb2NrLT54d2luX2hlaWdodCAtICg1KnBvbmdfY2xvY2stPnBpeGVsaCkpKQorICB7CisgICAgaWYgKCFwb25nX2Nsb2NrLT5iYXRiX3RvX21pc3MpIAorICAgICAgcG9uZ19jbG9jay0+YmF0Yl95ID0gcG9uZ19jbG9jay0+YmFsbF95OworCisgICAgaWYgKCFwb25nX2Nsb2NrLT5iYXRhX3RvX21pc3MpCisgICAgICBwb25nX2Nsb2NrLT5iYXRhX3kgPSBwb25nX2Nsb2NrLT5iYWxsX3k7CisgIH0KK30KKwordm9pZAorZHJhd19mcmFtZSAoUG9uZ0Nsb2NrICpwb25nX2Nsb2NrKQoreworICB1cGRhdGVfc3RhdGUgKHBvbmdfY2xvY2spOworCisgIC8qIENsZWFyIHBsYXlmaWVsZCAqLworICBYU2V0Rm9yZWdyb3VuZCAocG9uZ19jbG9jay0+eGRweSwKKwkJICBwb25nX2Nsb2NrLT54Z2MsCisJCSAgQmxhY2tQaXhlbChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCSAgICAgcG9uZ19jbG9jay0+eHNjcmVlbikpOworCisgIFhGaWxsUmVjdGFuZ2xlIChwb25nX2Nsb2NrLT54ZHB5LAorCQkgIHBvbmdfY2xvY2stPmJhY2tidWZmZXIsCisJCSAgcG9uZ19jbG9jay0+eGdjLAorCQkgIDAsIDAsCisJCSAgcG9uZ19jbG9jay0+eHdpbl93aWR0aCwgCisJCSAgcG9uZ19jbG9jay0+eHdpbl9oZWlnaHQpOworCisgIFhTZXRGb3JlZ3JvdW5kIChwb25nX2Nsb2NrLT54ZHB5LAorCQkgIHBvbmdfY2xvY2stPnhnYywKKwkJICBXaGl0ZVBpeGVsKHBvbmdfY2xvY2stPnhkcHksIAorCQkJICAgICBwb25nX2Nsb2NrLT54c2NyZWVuKSk7CisKKyAgZHJhd19maWVsZCAocG9uZ19jbG9jayk7CisKKyAgZHJhd190aW1lIChwb25nX2Nsb2NrKTsKKworICBkcmF3X2JhdF9hbmRfYmFsbCAocG9uZ19jbG9jayk7CisKKyAgLyogZmxpcCAnYmFja2J1ZmZlcicgKi8KKyAgWFNldFdpbmRvd0JhY2tncm91bmRQaXhtYXAgKHBvbmdfY2xvY2stPnhkcHksIAorCQkJICAgICAgcG9uZ19jbG9jay0+eHdpbiwKKwkJCSAgICAgIHBvbmdfY2xvY2stPmJhY2tidWZmZXIpOworICBYQ2xlYXJXaW5kb3cocG9uZ19jbG9jay0+eGRweSwgcG9uZ19jbG9jay0+eHdpbik7CisKKyAgWFN5bmMocG9uZ19jbG9jay0+eGRweSwgRmFsc2UpOworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgWEdDVmFsdWVzICBnY3Y7CisgIEF0b20gICAgICAgYXRvbXNfV0lORE9XX1NUQVRFLCBhdG9tc19XSU5ET1dfU1RBVEVfRlVMTFNDUkVFTjsKKyAgUG9uZ0Nsb2NrICpwb25nX2Nsb2NrOworCisgIHBvbmdfY2xvY2sgPSBtYWxsb2Moc2l6ZW9mKFBvbmdDbG9jaykpOworICBtZW1zZXQocG9uZ19jbG9jaywgMCwgc2l6ZW9mKFBvbmdDbG9jaykpOworCisgIGlmICgocG9uZ19jbG9jay0+eGRweSA9IFhPcGVuRGlzcGxheShnZXRlbnYoIkRJU1BMQVkiKSkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBjb25uZWN0IHRvIFggc2VydmVyIG9uIGRpc3BsYXkgJXMuIiwKKwkgICAgZ2V0ZW52KCJESVNQTEFZIikpOworICAgIGV4aXQoLTEpOworICB9CisKKyAgcG9uZ19jbG9jay0+eHNjcmVlbiAgICAgPSBEZWZhdWx0U2NyZWVuKHBvbmdfY2xvY2stPnhkcHkpOworICBwb25nX2Nsb2NrLT54d2luX3Jvb3QgICA9IERlZmF1bHRSb290V2luZG93KHBvbmdfY2xvY2stPnhkcHkpOworICBwb25nX2Nsb2NrLT54d2luX3dpZHRoICA9IERpc3BsYXlXaWR0aChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCQkJIHBvbmdfY2xvY2stPnhzY3JlZW4pOworICBwb25nX2Nsb2NrLT54d2luX2hlaWdodCA9IERpc3BsYXlIZWlnaHQocG9uZ19jbG9jay0+eGRweSwgCisJCQkJCSAgcG9uZ19jbG9jay0+eHNjcmVlbik7CisKKyAgcG9uZ19jbG9jay0+cGl4ZWx3ICA9IHBvbmdfY2xvY2stPnh3aW5fd2lkdGggIC8gUkVTWDsKKyAgcG9uZ19jbG9jay0+cGl4ZWxoICA9IHBvbmdfY2xvY2stPnh3aW5faGVpZ2h0IC8gUkVTWTsKKworICBwb25nX2Nsb2NrLT5iYWxsX3ggPSAwOyAKKyAgcG9uZ19jbG9jay0+YmFsbF95ID0gcG9uZ19jbG9jay0+eHdpbl9oZWlnaHQgLyAyOyAKKworICBwb25nX2Nsb2NrLT5iYWxsX2R4ID0gQkFMTERYOyAKKyAgcG9uZ19jbG9jay0+YmFsbF9keSA9IEJBTExEWTsgCisKKyAgcG9uZ19jbG9jay0+YmF0Yl95ID0gcG9uZ19jbG9jay0+YmF0YV95ID0gcG9uZ19jbG9jay0+YmFsbF95OworCisgIGdjdi5iYWNrZ3JvdW5kID0gQmxhY2tQaXhlbChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCSAgICAgIHBvbmdfY2xvY2stPnhzY3JlZW4pOworICBnY3YuZm9yZWdyb3VuZCA9IFdoaXRlUGl4ZWwocG9uZ19jbG9jay0+eGRweSwgCisJCQkgICAgICBwb25nX2Nsb2NrLT54c2NyZWVuKTsKKyAgZ2N2LmdyYXBoaWNzX2V4cG9zdXJlcyA9IEZhbHNlOworCisgIHBvbmdfY2xvY2stPnhnYyA9IFhDcmVhdGVHQyAocG9uZ19jbG9jay0+eGRweSwgcG9uZ19jbG9jay0+eHdpbl9yb290LCAKKwkJCSAgICAgICBHQ0ZvcmVncm91bmR8R0NCYWNrZ3JvdW5kfEdDR3JhcGhpY3NFeHBvc3VyZXMsCisJCQkgICAgICAgJmdjdik7CisKKyAgYXRvbXNfV0lORE9XX1NUQVRFCisgICAgPSBYSW50ZXJuQXRvbShwb25nX2Nsb2NrLT54ZHB5LCAiX05FVF9XTV9TVEFURSIsRmFsc2UpOworICBhdG9tc19XSU5ET1dfU1RBVEVfRlVMTFNDUkVFTgorICAgID0gWEludGVybkF0b20ocG9uZ19jbG9jay0+eGRweSwgIl9ORVRfV01fU1RBVEVfRlVMTFNDUkVFTiIsRmFsc2UpOworCisgIHBvbmdfY2xvY2stPnh3aW4gPSBYQ3JlYXRlU2ltcGxlV2luZG93KHBvbmdfY2xvY2stPnhkcHksIAorCQkJCQkgcG9uZ19jbG9jay0+eHdpbl9yb290LCAKKwkJCQkJIDAsIDAsCisJCQkJCSBwb25nX2Nsb2NrLT54d2luX3dpZHRoLCAKKwkJCQkJIHBvbmdfY2xvY2stPnh3aW5faGVpZ2h0LCAKKwkJCQkJIDAsCisJCQkJCSBXaGl0ZVBpeGVsKHBvbmdfY2xvY2stPnhkcHksIAorCQkJCQkJICAgIHBvbmdfY2xvY2stPnhzY3JlZW4pLAorCQkJCQkgQmxhY2tQaXhlbChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCQkJCSAgICBwb25nX2Nsb2NrLT54c2NyZWVuKSk7CisKKyAgcG9uZ19jbG9jay0+YmFja2J1ZmZlciA9IFhDcmVhdGVQaXhtYXAocG9uZ19jbG9jay0+eGRweSwgCisJCQkJCSBwb25nX2Nsb2NrLT54d2luX3Jvb3QsCisJCQkJCSBwb25nX2Nsb2NrLT54d2luX3dpZHRoLCAKKwkJCQkJIHBvbmdfY2xvY2stPnh3aW5faGVpZ2h0LCAKKwkJCQkJIERlZmF1bHREZXB0aChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCQkJCSAgICAgIHBvbmdfY2xvY2stPnhzY3JlZW4pKTsKKworICBYU2VsZWN0SW5wdXQocG9uZ19jbG9jay0+eGRweSwgcG9uZ19jbG9jay0+eHdpbiwgS2V5UHJlc3NNYXNrKTsKKyAgCisKKyAgLyogU2V0IHRoZSBoaW50cyBmb3IgZnVsbHNjcmVlbiAqLworICBYQ2hhbmdlUHJvcGVydHkocG9uZ19jbG9jay0+eGRweSwgCisJCSAgcG9uZ19jbG9jay0+eHdpbiwgCisJCSAgYXRvbXNfV0lORE9XX1NUQVRFLCAKKwkJICBYQV9BVE9NLCAKKwkJICAzMiwgCisJCSAgUHJvcE1vZGVSZXBsYWNlLCAKKwkJICAodW5zaWduZWQgY2hhciAqKSAmYXRvbXNfV0lORE9XX1NUQVRFX0ZVTExTQ1JFRU4sIDEpOworCisgIFhNYXBXaW5kb3cocG9uZ19jbG9jay0+eGRweSwgcG9uZ19jbG9jay0+eHdpbik7CisgIAorICB3aGlsZSAoVHJ1ZSkgCisgICAgeworICAgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyAgICAgIFhFdmVudCAgICAgICAgIHhldjsKKworICAgICAgdGltZW91dC50dl9zZWMgID0gMDsKKyAgICAgIHRpbWVvdXQudHZfdXNlYyA9IDEwMDAwMDAgLyBGUFM7IAorICAgICAgc2VsZWN0ICgwLCBOVUxMLCBOVUxMLCBOVUxMLCAmdGltZW91dCk7CisKKyAgICAgIGRyYXdfZnJhbWUgKHBvbmdfY2xvY2spOworCisgICAgICBYRmx1c2gocG9uZ19jbG9jay0+eGRweSk7CisKKyAgICAgIGlmIChYUGVuZGluZyhwb25nX2Nsb2NrLT54ZHB5KSkKKwl7CisJICBpZiAoWENoZWNrTWFza0V2ZW50KHBvbmdfY2xvY2stPnhkcHksIAorCQkJICAgICAgS2V5UHJlc3NNYXNrLAorCQkJICAgICAgJnhldikpCisJICAgIGV4aXQoLTEpOworCX0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wb25nLWNsb2NrL3BvbmctY2xvY2tfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcG9uZy1jbG9jay9wb25nLWNsb2NrXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTFhNzkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcG9uZy1jbG9jay9wb25nLWNsb2NrXzEuMC5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIkEgY2xvY2sgY29tYmluZWQgd2l0aCBhIGdhbWUgb2YgcG9uZyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSB4ZG1jcCB4YXUiCisKK2luaGVyaXQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ19VUkkgPSAiZmlsZTovL3BvbmctY2xvY2stbm8tZmxpY2tlci5jIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9wb25nLWNsb2NrLW5vLWZsaWNrZXIuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIzO21kNT1kZDI0OGQ1MGY3M2Y3NDZkMWVlNzg1ODZiMGIyZWJkMyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19jb21waWxlICgpIHsKKwkke0NDfSAtbyBwb25nLWNsb2NrIHBvbmctY2xvY2stbm8tZmxpY2tlci5jIGBwa2ctY29uZmlnIC0tY2ZsYWdzIC0tbGlicyB4MTEgeGF1IHhkbWNwYAorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgcG9uZy1jbG9jayAke0R9JHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9zdGFydHVwLW5vdGlmaWNhdGlvbi9zdGFydHVwLW5vdGlmaWNhdGlvbi0wLjEyL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3N0YXJ0dXAtbm90aWZpY2F0aW9uL3N0YXJ0dXAtbm90aWZpY2F0aW9uLTAuMTIvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllODZmMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9zdGFydHVwLW5vdGlmaWNhdGlvbi9zdGFydHVwLW5vdGlmaWNhdGlvbi0wLjEyL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTkwOTddCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIHN0YXJ0dXAtbm90aWZpY2F0aW9uLTAuMTIvY29uZmlndXJlLmluIHN0YXJ0dXAtbm90aWZpY2F0aW9uLTAuMTIvY29uZmlndXJlLmluCistLS0gc3RhcnR1cC1ub3RpZmljYXRpb24tMC4xMi9jb25maWd1cmUuaW4JMjAxMS0wNS0xNiAxNzoyOToyMC4wMDAwMDAwMDAgKzAzMDAKKysrKyBzdGFydHVwLW5vdGlmaWNhdGlvbi0wLjEyL2NvbmZpZ3VyZS5pbgkyMDEzLTAxLTA3IDA2OjAwOjQ4LjkyMTkwNTQwOSArMDIwMAorQEAgLTMsNyArMyw3IEBACisgQUNfQ09ORklHX1NSQ0RJUihsaWJzbi9zbi1sYXVuY2hlZS5jKQorCisgQU1fSU5JVF9BVVRPTUFLRQorLUFNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisrQUNfQ09ORklHX0hFQURFUlMoY29uZmlnLmgpCisKKyAjIEhvbm9yIGFjbG9jYWwgZmxhZ3MKKyBBQ19TVUJTVChBQ0xPQ0FMX0FNRkxBR1MsICJcJHtBQ0xPQ0FMX0ZMQUdTfSIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9zdGFydHVwLW5vdGlmaWNhdGlvbi9zdGFydHVwLW5vdGlmaWNhdGlvbl8wLjEyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvc3RhcnR1cC1ub3RpZmljYXRpb24vc3RhcnR1cC1ub3RpZmljYXRpb25fMC4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzFiOTNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvc3RhcnR1cC1ub3RpZmljYXRpb24vc3RhcnR1cC1ub3RpZmljYXRpb25fMC4xMi5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIkVuYWJsZXMgbW9uaXRvcmluZyBhbmQgZGlzcGxheSBvZiBhcHBsaWNhdGlvbiBzdGFydHVwIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9zdGFydHVwLW5vdGlmaWNhdGlvbi8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PVNwZWNpZmljYXRpb25zIgorCisjIG1vc3QgZmlsZXMgYXJlIHVuZGVyIE1JVCwgYnV0IGxpYnNuL3NuLXV0aWwuYyBpcyB1bmRlciBMR1BMLCB0aGUKKyMgZWZmZWN0aXZlIGxpY2Vuc2UgaXMgTEdQTAorTElDRU5TRSA9ICJMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTJhZTJjZDQ3ZDZkMmYyMzg0MTBmNTM2NGRmYmMwZjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlic24vc24tdXRpbC5jO2VuZGxpbmU9MTg7bWQ1PTE4YTE0ZGMxODI1ZDM4ZTc0MWQ3NzIzMTFmZWE5ZWUxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYnNuL3NuLWNvbW1vbi5oO2VuZGxpbmU9MjM7bWQ1PTZkMDViYzBlYmRjZjU1MTNhNmU3N2NiMjZlOGNkN2UyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3QvdGVzdC1ib2lsZXJwbGF0ZS5oO2VuZGxpbmU9MjM7bWQ1PTkyM2U3MDZiMmE3MDU4NjE3NmVlYWQyNjFjYzViYjk4IgorCitQUiA9ICJyMiIKKworU0VDVElPTiA9ICJsaWJzIgorCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlic20geGNiLXV0aWwiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9zdGFydHVwLW5vdGlmaWNhdGlvbi9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyY2Q3NzMyNmQ0ZGNhZWQ5YTVhMjNhMTIzMmZiMzhlOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzYzM5MWY3ZTkzMGM1ODMwOTUwNDVjZDJkMTBlYjczYTY0ZjA4NWM3ZmRlOWQyNjBmMjY1MmM3Y2IzY2ZiZTRhIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHMuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliL3RzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwZGE5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliL3RzLmNvbmYKQEAgLTAsMCArMSwyNSBAQAorIyBVbmNvbW1lbnQgaWYgeW91IHdpc2ggdG8gdXNlIHRoZSBsaW51eCBpbnB1dCBsYXllciBldmVudCBpbnRlcmZhY2UKK21vZHVsZV9yYXcgaW5wdXQKKworIyBVbmNvbW1lbnQgaWYgeW91J3JlIHVzaW5nIGEgU2hhcnAgWmF1cnVzIFNMLTU1MDAvU0wtNTAwMGQKKyMgbW9kdWxlX3JhdyBjb2xsaWUKKworIyBVbmNvbW1lbnQgaWYgeW91J3JlIHVzaW5nIGEgU2hhcnAgWmF1cnVzIFNMLUM3MDAvQzc1MC9DNzYwL0M4NjAKKyMgbW9kdWxlX3JhdyBjb3JnaQorCisjIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYSBkZXZpY2Ugd2l0aCBhIFVDQjEyMDAvMTMwMC8xNDAwIFRTIGludGVyZmFjZQorIyBtb2R1bGVfcmF3IHVjYjF4MDAKKworIyBVbmNvbW1lbnQgaWYgeW91J3JlIHVzaW5nIGFuIEhQIGlQYXEgaDM2MDAgb3Igc2ltaWxhcgorIyBtb2R1bGVfcmF3IGgzNjAwCisKKyMgVW5jb21tZW50IGlmIHlvdSdyZSB1c2luZyBhIEhpdGFjaGkgV2VicGFkCisjIG1vZHVsZV9yYXcgbWs3MTIKKworIyBVbmNvbW1lbnQgaWYgeW91J3JlIHVzaW5nIGFuIElCTSBBcmN0aWMgSUkKKyMgbW9kdWxlX3JhdyBhcmN0aWMyCisKK21vZHVsZSBwdGhyZXMgcG1pbj0xCittb2R1bGUgdmFyaWFuY2UgZGVsdGE9MzAKK21vZHVsZSBkZWppdHRlciBkZWx0YT0xMDAKK21vZHVsZSBsaW5lYXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliL3RzbGliLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHNsaWIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2OGU4ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliL3RzbGliLnNoCkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCisKK2lmIFsgLWUgL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAgXTsgdGhlbgorICAgIFRTTElCX1RTREVWSUNFPS9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wCisKKyAgICBleHBvcnQgVFNMSUJfVFNERVZJQ0UKK2ZpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliXzEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliXzEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDhjN2RkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWJfMS4xLmJiCkBAIC0wLDAgKzEsNTMgQEAKK1NVTU1BUlkgPSAiQW4gYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHRvdWNoc2NyZWVuIHBhbmVsIGV2ZW50cyIKK0RFU0NSSVBUSU9OID0gIlRzbGliIGlzIGFuIGFic3RyYWN0aW9uIGxheWVyIGZvciB0b3VjaHNjcmVlbiBwYW5lbCBcCitldmVudHMsIGFzIHdlbGwgYXMgYSBmaWx0ZXIgc3RhY2sgZm9yIHRoZSBtYW5pcHVsYXRpb24gb2YgdGhvc2UgZXZlbnRzLiBcCitUc2xpYiBpcyBnZW5lcmFsbHkgdXNlZCBvbiBlbWJlZGRlZCBkZXZpY2VzIHRvIHByb3ZpZGUgYSBjb21tb24gdXNlciBcCitzcGFjZSBpbnRlcmZhY2UgdG8gdG91Y2hzY3JlZW4gZnVuY3Rpb25hbGl0eS4iCitIT01FUEFHRSA9ICJodHRwOi8vdHNsaWIuYmVybGlvcy5kZS8iCisKK0FVVEhPUiA9ICJSdXNzZWxsIEtpbmcgdy8gcGx1Z2lucyBieSBDaHJpcyBMYXJzb24gZXQuIGFsLiIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjMwYTk3MTZlZjM3NjJlMzQ2N2EyZjYyYmY3OTBmMGEiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2tlcmdvdGgvdHNsaWIvcmVsZWFzZXMvZG93bmxvYWQvJHtQVn0vdHNsaWItJHtQVn0udGFyLnh6O2Rvd25sb2FkZmlsZW5hbWU9dHNsaWItJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3RzLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vdHNsaWIuc2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTQ3NzFmODYwN2IzNDFiYjRiMjk3ODE5ZDM3ZTgzN2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmUzNWU1ZjcxMGVhOTMzYjExOGY3MTBlMmNlNDQwM2FjMDc2ZmU2OTkyNmI1NzAzMzM4NjdkNGRlMDgyYTUxYyIKKworCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNoYXJlZCAtLWRpc2FibGUtaDM2MDAgLS1lbmFibGUtaW5wdXQgLS1kaXNhYmxlLWNvcmdpIC0tZGlzYWJsZS1jb2xsaWUgLS1kaXNhYmxlLW1rNzEyIC0tZGlzYWJsZS1hcmN0aWMyIC0tZGlzYWJsZS11Y2IxeDAwIgorCitkb19pbnN0YWxsX3ByZXBlbmQoKSB7CisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdHMuY29uZiAke1N9L2V0Yy90cy5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZS5kLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3RzbGliLnNoICR7RH0ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZC8KK30KKworIyBQZW9wbGUgc2hvdWxkIGNvbnNpZGVyIHVzaW5nIHVkZXYncyAvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCBzeW1saW5rCisjIGluc3RlYWQgb2YgZGV0ZWN0LXN0eWx1cworI1JERVBFTkRTX3RzbGliLWNvbmZfd2VpcmQtbWFjaGluZSA9ICJkZXRlY3Qtc3R5bHVzIgorUlBST1ZJREVTX3RzbGliLWNvbmYgPSAibGlidHMtMC4wLWNvbmYiCisKK1BBQ0tBR0VTID0rICJ0c2xpYi1jb25mIHRzbGliLXRlc3RzIHRzbGliLWNhbGlicmF0ZSIKK0RFQklBTl9OT0FVVE9OQU1FX3RzbGliLWNvbmYgPSAiMSIKK0RFQklBTl9OT0FVVE9OQU1FX3RzbGliLXRlc3RzID0gIjEiCitERUJJQU5fTk9BVVRPTkFNRV90c2xpYi1jYWxpYnJhdGUgPSAiMSIKKworUkRFUEVORFNfJHtQTn0gPSAidHNsaWItY29uZiIKK1JSRUNPTU1FTkRTXyR7UE59ID0gInBvaW50ZXJjYWwiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3RzLy5kZWJ1ZyoiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS90cy8qLmxhIgorRklMRVNfdHNsaWItY29uZiA9ICIke3N5c2NvbmZkaXJ9L3RzLmNvbmYgJHtzeXNjb25mZGlyfS9wcm9maWxlLmQvdHNsaWIuc2ggJHtkYXRhZGlyfS90c2xpYiIKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS8qLnNvLiogJHtsaWJkaXJ9L3RzLyouc28qIgorRklMRVNfdHNsaWItY2FsaWJyYXRlICs9ICIke2JpbmRpcn0vdHNfY2FsaWJyYXRlIgorRklMRVNfdHNsaWItdGVzdHMgPSAiJHtiaW5kaXJ9L3RzX2hhcnZlc3QgJHtiaW5kaXJ9L3RzX3ByaW50ICR7YmluZGlyfS90c19wcmludF9yYXcgJHtiaW5kaXJ9L3RzX3Rlc3QiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90dGYtZm9udHMvbGliZXJhdGlvbi1mb250cy8zMC1saWJlcmF0aW9uLWFsaWFzZXMuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy9saWJlcmF0aW9uLWZvbnRzLzMwLWxpYmVyYXRpb24tYWxpYXNlcy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MDk0NTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90dGYtZm9udHMvbGliZXJhdGlvbi1mb250cy8zMC1saWJlcmF0aW9uLWFsaWFzZXMuY29uZgpAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBmb250Y29uZmlnIFNZU1RFTSAiZm9udHMuZHRkIj4KKzwhLS0gY29uZi5kL3N1Yi1waXhlbC5jb25mIC0tPgorPGZvbnRjb25maWc+CisJPGFsaWFzPgorCQk8ZmFtaWx5PnNhbnMtc2VyaWY8L2ZhbWlseT4KKwkJPGFjY2VwdD48ZmFtaWx5PkxpYmVyYXRpb24gU2FuczwvZmFtaWx5PjwvYWNjZXB0PgorCTwvYWxpYXM+CisJPGFsaWFzPgorCQk8ZmFtaWx5PnNlcmlmPC9mYW1pbHk+CisJCTxhY2NlcHQ+PGZhbWlseT5MaWJlcmF0aW9uIFNlcmlmPC9mYW1pbHk+PC9hY2NlcHQ+CisJPC9hbGlhcz4KKwk8YWxpYXM+CisJCTxmYW1pbHk+bW9ub3NwYWNlPC9mYW1pbHk+CisJCTxhY2NlcHQ+PGZhbWlseT5MaWJlcmF0aW9uIE1vbm88L2ZhbWlseT48L2FjY2VwdD4KKwk8L2FsaWFzPgorPC9mb250Y29uZmlnPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL2xpYmVyYXRpb24tZm9udHNfMS4wNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy9saWJlcmF0aW9uLWZvbnRzXzEuMDQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRhODJlNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy9saWJlcmF0aW9uLWZvbnRzXzEuMDQuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJMaWJlcmF0aW9uKHRtKSBGb250cyIKK0RFU0NSSVBUSU9OID0gIlRoZSBMaWJlcmF0aW9uKHRtKSBGb250cyBpcyBhIGZvbnQgZmFtaWx5IG9yaWdpbmFsbHkgXAorY3JlYXRlZCBieSBBc2NlbmRlcihjKSB3aGljaCBhaW1zIGF0IG1ldHJpYyBjb21wYXRpYmlsaXR5IHdpdGggXAorQXJpYWwsIFRpbWVzIE5ldyBSb21hbiwgQ291cmllciBOZXcuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2xpYmVyYXRpb24tZm9udHMvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vIgorCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICIyLnggZGVwZW5kcyBvbiBmb250Zm9yZ2UgcGFja2FnZSwgd2hpY2ggaXMgbm90IHlldCBwcm92aWRlZCBpbiBvZS1jb3JlIgorCitTRUNUSU9OID0gIngxMS9mb250cyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKK1BSID0gInI0IgorUEUgPSAiMSIKKworaW5oZXJpdCBhbGxhcmNoIGZvbnRjYWNoZQorCitGT05UX1BBQ0tBR0VTID0gIiR7UE59IgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9sL2kvbGliZXJhdGlvbi1mb250cy9saWJlcmF0aW9uLWZvbnRzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8zMC1saWJlcmF0aW9uLWFsaWFzZXMuY29uZiIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ4NDY3OTdlZjBmYzcwYjBjYmFlZGUyNTE0Njc3YzU4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBlMGQwOTU3Yzg1Yjc1ODU2MWEzZDRhZWY0ZWJjZDJjMzk5NTllNTMyODQyOWQ5NmFlMTA2MjQ5ZDgzNTMxYTEiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZm9udHMvdHRmLworCWZvciBpIGluICoudHRmOyBkbworCQlpbnN0YWxsIC1tIDA2NDQgJGkgJHtEfSR7cHJlZml4fS9zaGFyZS9mb250cy90dGYvJHtpfQorCWRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZm9udHMvY29uZi5kLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9LzMwLWxpYmVyYXRpb24tYWxpYXNlcy5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2ZvbnRzL2NvbmYuZC8KKworCWluc3RhbGwgLWQgJHtEfSR7cHJlZml4fS9zaGFyZS9kb2MvJHtCUE59LworCWluc3RhbGwgLW0gMDY0NCBMaWNlbnNlLnR4dCAke0R9JHtkYXRhZGlyfS9kb2MvJHtCUE59LworfQorCitQQUNLQUdFUyA9ICIke1BOfSIKK0ZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9ICR7ZGF0YWRpcn0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90dGYtZm9udHMvdHRmLWJpdHN0cmVhbS12ZXJhXzEuMTAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90dGYtZm9udHMvdHRmLWJpdHN0cmVhbS12ZXJhXzEuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJlNGNlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy90dGYtYml0c3RyZWFtLXZlcmFfMS4xMC5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIlRoZSBCaXRzdHJlYW0gVmVyYSBmb250cyAtIFRURiBFZGl0aW9uIgorREVTQ1JJUFRJT04gPSAiVGhlIEJpdHN0cmVhbSBWZXJhIGZvbnRzIGluY2x1ZGUgZm91ciBtb25vc3BhY2UgYW5kIHNhbnMgXAorZmFjZXMgKG5vcm1hbCwgb2JsaXF1ZSwgYm9sZCwgYm9sZCBvYmxpcXVlKSBhbmQgdHdvIHNlcmlmIGZhY2VzIChub3JtYWwgXAorYW5kIGJvbGQpLiAgSW4gYWRkaXRpb24gRm9udGNvbmZpZy9YZnQyIGNhbiBhcnRpZmljaWFsbHkgb2JsaXF1ZSB0aGUgXAorc2VyaWYgZmFjZXMgZm9yIHlvdTogdGhpcyBsb3NlcyBoaW50aW5nIGFuZCBkaXN0b3J0cyB0aGUgZmFjZXMgc2xpZ2h0bHksIFwKK2J1dCBpcyB2aXNpYmx5IGRpZmZlcmVudCB0aGFuIG5vcm1hbCBhbmQgYm9sZCwgYW5kIHJlYXNvbmFibHkgcGxlYXNpbmcuIgorU0VDVElPTiA9ICJ4MTEvZm9udHMiCitMSUNFTlNFID0gIkJpdHN0cmVhbVZlcmEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZUklHSFQuVFhUO21kNT0yN2Q3NDg0YjFlMThkMGVlNGNlNTM4NjQ0YTNmMDRiZSIKK1BSID0gInI3IgorCitpbmhlcml0IGZvbnRjYWNoZQorCitGT05UX1BBQ0tBR0VTID0gIiR7UE59IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS90dGYtYml0c3RyZWFtLXZlcmEvMS4xMC90dGYtYml0c3RyZWFtLXZlcmEtJHtQVn0udGFyLmJ6MiIgCisKK2RvX2luc3RhbGwgKCkgeyAKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtwcmVmaXh9L3NoYXJlL2ZvbnRzL3R0Zi8gCisgICAgICAgIGZvciBpIGluICoudHRmOyBkbyAKKyAgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDY0NCAkaSAke0R9JHtwcmVmaXh9L3NoYXJlL2ZvbnRzL3R0Zi8ke2l9IAorICAgICAgICBkb25lIAorCisJIyBmb250Y29uZmlnIHNoaXBzIHRoaXMgdG9vLiAgbm90IHN1cmUgd2hhdCB0byBkbyBhYm91dCBpdC4KKyAgICAgICAgI2luc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZm9udHMgCisgICAgICAgICNpbnN0YWxsIC1tIDY0NCBsb2NhbC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2ZvbnRzL2xvY2FsLmNvbmYgCisKKworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3ByZWZpeH0vc2hhcmUvZG9jLyR7QlBOfS8KKyAgICAgICAgZm9yIGkgaW4gKi5UWFQ7IGRvIAorICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gNjQ0ICRpICR7RH0ke3ByZWZpeH0vc2hhcmUvZG9jLyR7QlBOfS8kaQorICAgICAgICBkb25lIAorfSAKKworRklMRVNfJHtQTn0gPSAiL2V0YyAke2RhdGFkaXJ9L2ZvbnRzIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmIyMmJkNWI0Njc1ZjVkYmUxN2M2OTYzZDhjMDBlZDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGI1YjI3ZGY3YmJiMzE4MDM2ZWJkYjc1YWNkM2U5OGYxYmQ2ZWI2NjA4ZmI3MGE2N2Q0NzhjZDI0M2QxNzhkYyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dhZmZsZS93YWZmbGVfMS41LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YWZmbGUvd2FmZmxlXzEuNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YWEwNWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YWZmbGUvd2FmZmxlXzEuNS4xLmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiY3Jvc3MtcGxhdGZvcm0gQyBsaWJyYXJ5IHRvIGRlZmVyIHNlbGVjdGlvbiBvZiBHTCBBUEkgYW5kIG9mIHdpbmRvdyBzeXN0ZW0iCitMSUNFTlNFID0gIkJTRC0yLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT00YzUxNTQ0MDdjMjQ5MDc1MGRkNDYxYzUwYWQ5NDc5NyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3dhZmZsZS93YWZmbGUuaDtlbmRsaW5lPTI0O21kNT02MWRiZjg2OTdmNjFjNzg2NDVlNzVhOTNjNTg1YjFiZiIKKworU1JDX1VSSSA9ICJodHRwOi8vd2FmZmxlLWdsLm9yZy9maWxlcy9yZWxlYXNlLyR7QlBOfS0ke1BWfS8ke0JQTn0tJHtQVn0udGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gImMwZDgwMmJjM2QwYWJhODdjNTFlNDIzYTNhOGJkZDY5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNiYWIwZTkyNjUxNTA2NGU4MThiZjA4OWE1YWYwNGJlMzMzMDdlNWY0MGQwNzY1OWZiNDBkNTliMmJmZTIwYWEiCisKK2luaGVyaXQgY21ha2UgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIGxpYl9wYWNrYWdlCisKKyMgVGhpcyBzaG91bGQgYmUgb3ZlcnJpZGRlbiBwZXItbWFjaGluZSB0byByZWZsZWN0IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIEdMCisjIHN0YWNrLgorUEFDS0FHRUNPTkZJRyA/Pz0gImdseCIKKworIyBsaWJ4MTEgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUy4KK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdnbHgnLCAneDExJywgJycsIGQpfSIKKworIyBJIHNheSB2aXJ0dWFsL2xpYmdsLCBhY3R1YWxseSB3YW50cyBnbC5wYworUEFDS0FHRUNPTkZJR1tnbHhdID0gIi1Ed2FmZmxlX2hhc19nbHg9MSwtRHdhZmZsZV9oYXNfZ2x4PTAsdmlydHVhbC9saWJnbCBsaWJ4MTEiCisKKyMgSSBzYXkgdmlydHVhbC9saWJnbCwgYWN0dWFsbHkgd2FudHMgd2F5bGFuZC1lZ2wucGMsIGVnbC5wYywgYW5kIHRoZSB3YXlsYW5kCisjIERJU1RST19GRUFUVVJFLgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItRHdhZmZsZV9oYXNfd2F5bGFuZD0xLC1Ed2FmZmxlX2hhc193YXlsYW5kPTAsdmlydHVhbC9saWJnbCB3YXlsYW5kIgorCisjIEkgc2F5IHZpcnR1YWwvbGliZ2wsIGFjdHVhbGx5IHdhbnRzIGdibS5wYyBlZ2wucGMKK1BBQ0tBR0VDT05GSUdbZ2JtXSA9ICItRHdhZmZsZV9oYXNfZ2JtPTEsLUR3YWZmbGVfaGFzX2dibT0wLHZpcnR1YWwvbGliZ2wgdWRldiIKKworIyBJIHNheSB2aXJ0dWFsL2xpYmdsLCBhY3R1YWxseSB3YW50cyBlZ2wucGMKK1BBQ0tBR0VDT05GSUdbeDExLWVnbF0gPSAiLUR3YWZmbGVfaGFzX3gxMV9lZ2w9MSwtRHdhZmZsZV9oYXNfeDExX2VnbD0wLHZpcnR1YWwvbGliZ2wgbGlieGNiIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vY21ha2UvTW9kdWxlcy9GaW5kV2FmZmxlLmNtYWtlIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2NtYWtlL1dhZmZsZS8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L2xpYmlucHV0LWNvbmZpZ3VyZS5hYy1hZGQtYXJnLXdpdGgtbGlidW53aW5kLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dC9saWJpbnB1dC1jb25maWd1cmUuYWMtYWRkLWFyZy13aXRoLWxpYnVud2luZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjVlYmNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dC9saWJpbnB1dC1jb25maWd1cmUuYWMtYWRkLWFyZy13aXRoLWxpYnVud2luZC5wYXRjaApAQCAtMCwwICsxLDUwIEBACitGcm9tIGNjNmZjZTU4N2YyNjI4YzhiMzQyNzY0ZTA2ZmIwZmMyN2MxZTgyNzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAzIEF1ZyAyMDE1IDIwOjMzOjQ0IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZS5hYzogYWRkIGFyZyAtLXdpdGgtbGlidW53aW5kCisKK0FkZCBhcmcgLS13aXRoLWxpYnVud2luZCBmb3IgY29uZmlndXJlIHNvIGl0J3Mgb3B0aW9uYWwgdG8gY2hlY2sKK2xpYnVud2luZCwgd2hpY2ggaXMgaGVscGZ1bGwgdG8gbWFrZSBkZXRlcm1pbmlzdGljIGJ1aWxkcy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW3dheWxhbmQtZGV2ZWxdCisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAxOSArKysrKysrKysrKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDMxNGIwZDQuLjI0MmQyNTEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTYwLDEzICs2MCwyMiBAQCBQS0dfUFJPR19QS0dfQ09ORklHKCkKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhNVERFViwgW210ZGV2ID49IDEuMS4wXSkKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJVREVWLCBbbGlidWRldl0pCisgUEtHX0NIRUNLX01PRFVMRVMoTElCRVZERVYsIFtsaWJldmRldiA+PSAwLjRdKQorLVBLR19DSEVDS19NT0RVTEVTKExJQlVOV0lORCwKKysKKytBQ19BUkdfV0lUSChsaWJ1bndpbmQsCisrICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1saWJ1bndpbmRdLFtEbyBub3QgdXNlIGxpYnVud2luZF0pKQorKworK0FTX0lGKFt0ZXN0ICJ4JHdpdGhfbGlidW53aW5kIiAhPSAieG5vIl0sCisrCVtQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJVTldJTkQsCisgCQkgIFtsaWJ1bndpbmRdLAorIAkJICBbSEFWRV9MSUJVTldJTkQ9eWVzXSwKKy0JCSAgW0hBVkVfTElCVU5XSU5EPW5vXSkKKy1pZiB0ZXN0ICJ4JEhBVkVfTElCVU5XSU5EIiA9ICJ4eWVzIjsgdGhlbgorLQlBQ19ERUZJTkUoSEFWRV9MSUJVTldJTkQsIDEsIFtIYXZlIGxpYnVud2luZCBzdXBwb3J0XSkKKy1maQorKwkJICBbSEFWRV9MSUJVTldJTkQ9bm9dKV0sCisrCVtIQVZFX0xJQlVOV0lORD1ub10pCisrCisrQVNfSUYoW3Rlc3QgIngkSEFWRV9MSUJVTldJTkQiID0gInh5ZXMiXSwKKysJW0FDX0RFRklORShIQVZFX0xJQlVOV0lORCwgMSwgW0hhdmUgbGlidW53aW5kIHN1cHBvcnRdKV0sCisrCVtBU19JRihbdGVzdCAieCR3aXRoX2xpYnVud2luZCIgPSAieHllcyJdLAorKwkJW0FDX01TR19FUlJPUihbbGlidW53aW5kIHJlcXVlc3RlZCBidXQgbm90IGZvdW5kXSldKV0pCisrCisgQU1fQ09ORElUSU9OQUwoSEFWRV9MSUJVTldJTkQsIFt0ZXN0ICJ4JEhBVkVfTElCVU5XSU5EIiA9IHh5ZXNdKQorIEFDX1BBVEhfUFJPRyhBRERSMkxJTkUsIFthZGRyMmxpbmVdKQorIGlmIHRlc3QgIngkQUREUjJMSU5FIiAhPSAieCI7IHRoZW4KKy0tIAorMi4zLjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dC90b3VjaHBhZC1zZXJpYWwtc3luYXB0aWNzLW5lZWQtdG8tZmFrZS1uZXctdG91Y2hlcy1vbi1UUklQTEVUQVAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L3RvdWNocGFkLXNlcmlhbC1zeW5hcHRpY3MtbmVlZC10by1mYWtlLW5ldy10b3VjaGVzLW9uLVRSSVBMRVRBUC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2M2M2JkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dC90b3VjaHBhZC1zZXJpYWwtc3luYXB0aWNzLW5lZWQtdG8tZmFrZS1uZXctdG91Y2hlcy1vbi1UUklQTEVUQVAucGF0Y2gKQEAgLTAsMCArMSw3MiBAQAorVGhpcyBpcyBhIHdvcmthcm91bmQgdXBzdHJlYW0gc3VnZ2VzdHMgZm9yIHVzZSB3aXRoIGtlcm5lbCA0LjEuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdGVtcG9yYXJ5IHdvcmstYXJvdW5kXQorU2lnbmVkLU9mZi1CeTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKworCisKK0Zyb206IFBldGVyIEh1dHRlcmVyIDxwZXRlci5odXR0ZXJlckB3aG8tdC5uZXQ+CitEYXRlOiBNb24gQXVnIDMgMTg6MjM6MTIgUERUIDIwMTUKK1N1YmplY3Q6IFtQQVRDSCB2MyBsaWJpbnB1dF0gdG91Y2hwYWQ6IHNlcmlhbCBzeW5hcHRpY3MgbmVlZCB0byBmYWtlIG5ldyB0b3VjaGVzIG9uIFRSSVBMRVRBUAorCitPbiB0aGUgNC4xIGtlcm5lbHMgc3luYXB0aWNzIHByZXRlbmRzIHRvIGhhdmUgMyBzbG90cyAodGhlIHNlcmlhbCBmdyBvbmx5IGRvZXMKKzIpLiBUaGlzIHdhcyBhZGRlZCB0byBhdm9pZCBjdXJzb3IganVtcHMgYnV0IGhhcyBzaW5jZSBiZWVuIHJldmVydGVkIGZvciA0LjIKKyhrZXJuZWwgY29tbWl0IGRiZjNjMzcwODYsIDQuMS4zIGlzIHN0aWxsIGJ1Z2d5KS4gSW4gc29tZSBjYXNlcyBhIFRSSVBMRVRBUAorbWF5IGJlIHRyaWdnZXJlZCB3aXRob3V0IHNsb3QgMiBldmVyIGFjdGl2YXRpbmcuCisKK1doaWxlIHRoZXJlIGFyZSBzdGlsbCB0aG9zZSBrZXJuZWxzIG91dCB0aGVyZSwgd29yayBhcm91bmQgdGhpcyBidWcgYnkgb3BlbmluZworYSBuZXcgdG91Y2ggcG9pbnQgd2hlcmUgbm9uZSBleGlzdHMgaWYgdGhlIGZha2UgZmluZ2VyIGNvdW50IGV4Y2VlZHMgdGhlIHNsb3QKK2NvdW50LgorCitSZXBvcnRlZC1ieTogSmFuIEFsZXhhbmRlciBTdGVmZmVucyA8amFuLnN0ZWZmZW5zIGF0IGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFBldGVyIEh1dHRlcmVyIDxwZXRlci5odXR0ZXJlciBhdCB3aG8tdC5uZXQ+CitUZXN0ZWQtYnk6IEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgPGphbi5zdGVmZmVucyBhdCBnbWFpbC5jb20+CitSZXZpZXdlZC1ieTogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGUgYXQgcmVkaGF0LmNvbT4KKy0tLQorQ2hhbmdlcyB0byB2MjoKKy0gc3BsaXQgb3V0IHRoZSBoYW5kbGluZyBpbnN0ZWFkIG9mIGhhdmluZyBhIHRtcCBzdGF0ZSB2YXJpYWJsZSwgc2VlIEhhbnMnCisgIGNvbW1lbnRzIGZyb20gdjIKKworTWFpbmx5IHNlbmRpbmcgdGhpcyB0byB0aGUgbGlzdCBhZ2FpbiBzbyBJIGhhdmUgYSBsaW5rIHRvIHBvaW50IHBlb3BsZSB0by4KK0lmIHlvdSdyZSBvbiA0LjEueCBhZGQgdGhpcyBwYXRjaCB0byB5b3VyIGRpc3RyaWJ1dGlvbiBwYWNrYWdlLgorCisgc3JjL2V2ZGV2LW10LXRvdWNocGFkLmMgfCAyMiArKysrKysrKysrKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZXZkZXYtbXQtdG91Y2hwYWQuYyBiL3NyYy9ldmRldi1tdC10b3VjaHBhZC5jCitpbmRleCBhNjgzZDlhLi41ZWYwM2Q1IDEwMDY0NAorLS0tIGEvc3JjL2V2ZGV2LW10LXRvdWNocGFkLmMKKysrKyBiL3NyYy9ldmRldi1tdC10b3VjaHBhZC5jCitAQCAtMzY5LDEzICszNjksMjMgQEAgdHBfcmVzdG9yZV9zeW5hcHRpY3NfdG91Y2hlcyhzdHJ1Y3QgdHBfZGlzcGF0Y2ggKnRwLAorIAlmb3IgKGkgPSAwOyBpIDwgdHAtPm51bV9zbG90czsgaSsrKSB7CisgCQlzdHJ1Y3QgdHBfdG91Y2ggKnQgPSB0cF9nZXRfdG91Y2godHAsIGkpOworIAorLQkJaWYgKHQtPnN0YXRlICE9IFRPVUNIX0VORCkKKysJCXN3aXRjaCh0LT5zdGF0ZSkgeworKwkJY2FzZSBUT1VDSF9IT1ZFUklORzoKKysJCWNhc2UgVE9VQ0hfQkVHSU46CisrCQljYXNlIFRPVUNIX1VQREFURToKKyAJCQljb250aW51ZTsKKy0KKy0JCS8qIG5ldyB0b3VjaCwgbW92ZSBpdCB0aHJvdWdoIGJlZ2luIHRvIHVwZGF0ZSBpbW1lZGlhdGVseSAqLworLQkJdHBfbmV3X3RvdWNoKHRwLCB0LCB0aW1lKTsKKy0JCXRwX2JlZ2luX3RvdWNoKHRwLCB0LCB0aW1lKTsKKy0JCXQtPnN0YXRlID0gVE9VQ0hfVVBEQVRFOworKwkJY2FzZSBUT1VDSF9OT05FOgorKwkJCS8qIG5ldyB0b3VjaCwgbW92ZSBpdCB0aHJvdWdoIHRvIGJlZ2luIGltbWVkaWF0ZWx5ICovCisrCQkJdHBfbmV3X3RvdWNoKHRwLCB0LCB0aW1lKTsKKysJCQl0cF9iZWdpbl90b3VjaCh0cCwgdCwgdGltZSk7CisrCQkJYnJlYWs7CisrCQljYXNlIFRPVUNIX0VORDoKKysJCQkvKiB0b3VjaCBqdXN0IGVuZGVkICx3ZSBuZWVkIG5lZWQgdG8gcmVzdG9yZSBpdCB0byB1cGRhdGUgKi8KKysJCQl0cF9uZXdfdG91Y2godHAsIHQsIHRpbWUpOworKwkJCXRwX2JlZ2luX3RvdWNoKHRwLCB0LCB0aW1lKTsKKysJCQl0LT5zdGF0ZSA9IFRPVUNIX1VQREFURTsKKysJCQlicmVhazsKKysJCX0KKyAJfQorIH0KKyAKKy0tIAorMi40LjMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dF8wLjIxLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0XzAuMjEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzVhMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dF8wLjIxLjAuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IHRvIGhhbmRsZSBpbnB1dCBkZXZpY2VzIGluIFdheWxhbmQgY29tcG9zaXRvcnMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2xpYmlucHV0LyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yMTg0YWVmMzhmZjEzN2VkMzNjZTlhNjNiOWQxZWI4ZiIKKworREVQRU5EUyA9ICJsaWJldmRldiB1ZGV2IG10ZGV2IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlLyR7QlBOfS8ke0JQfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbGliaW5wdXQtY29uZmlndXJlLmFjLWFkZC1hcmctd2l0aC1saWJ1bndpbmQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdG91Y2hwYWQtc2VyaWFsLXN5bmFwdGljcy1uZWVkLXRvLWZha2UtbmV3LXRvdWNoZXMtb24tVFJJUExFVEFQLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJmOTFkOGY0Y2VkOTg2ZjFhZTE2ZDUyZWEwMmJjNzgzNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3Y2NlN2E5ZTUxMGRmZTVjNGExOWFkMDBlOTM1MDgwOGQ0ZjU5Zjg2MTFmZDJiNWU4NzIxM2M1MDcyODNmNTUwIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbGlidW53aW5kXSA9ICItLXdpdGgtbGlidW53aW5kLC0td2l0aG91dC1saWJ1bndpbmQsbGlidW53aW5kIgorUEFDS0FHRUNPTkZJR1tndWldID0gIi0tZW5hYmxlLWV2ZW50LWd1aSwtLWRpc2FibGUtZXZlbnQtZ3VpLGNhaXJvIGd0ayszIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3VkZXYvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vdWRldi8uZGVidWciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL210ZGV2XzEuMS41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9tdGRldl8xLjEuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2QwZWJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9tdGRldl8xLjEuNS5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIk11bHRpdG91Y2ggUHJvdG9jb2wgVHJhbnNsYXRpb24gTGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibXRkZXYgaXMgYSBsaWJyYXJ5IHdoaWNoIHRyYW5zZm9ybXMgYWxsIHZhcmlhbnRzIG9mIGtlcm5lbCBcCittdWx0aXRvdWNoIGV2ZW50cyB0byB0aGUgc2xvdHRlZCB0eXBlIEIgcHJvdG9jb2wuIFRoZSBldmVudHMgcHV0IGludG8gbXRkZXYgbWF5IFwKK2JlIGZyb20gYW55IE1UIGRldmljZSwgc3BlY2lmaWNhbGx5IHR5cGUgQSB3aXRob3V0IGNvbnRhY3QgdHJhY2tpbmcsIHR5cGUgQSB3aXRoIFwKK2NvbnRhY3QgdHJhY2tpbmcsIG9yIHR5cGUgQiB3aXRoIGNvbnRhY3QgdHJhY2tpbmciCisKK0hPTUVQQUdFID0gImh0dHA6Ly9iaXRtYXRoLm9yZy9jb2RlL210ZGV2LyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYTZiZDAyNjhiYjBmY2Q2YjI3Njk4NjE2Y2VlZTVkNiIKKworU1JDX1VSSSA9ICJodHRwOi8vYml0bWF0aC5vcmcvY29kZS8ke0JQTn0vJHtCUH0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MmM5NjEwYjYwMDJmNzFkMTY0MmRjMWExY2NhNWVjMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2Njc3ZDU3MDhhNzk0ODg0MGRlNzM0ZDhiNDY3NWQ1OTgwZDQ1NjExNzFjNWE4ZTg5ZTU0YWRmN2ExM2ViYTdmIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZC9hbHdheXMtYnVpbGQtc2Nhbm5lci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZC9hbHdheXMtYnVpbGQtc2Nhbm5lci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTBlNmJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kL2Fsd2F5cy1idWlsZC1zY2FubmVyLnBhdGNoCkBAIC0wLDAgKzEsMTA1IEBACitidWlsZDogYWx3YXlzIGJ1aWxkIHdheWxhbmQtc2Nhbm5lcgorCitUaGUgcHJldmlvdXMgaWRpb20gZm9yIGJ1aWxkaW5nIGEgY3Jvc3MtY29tcGlsZWQgV2F5bGFuZCBpcyB0byBidWlsZCBvbmNlIGZvcgordGhlIGJ1aWxkIGhvc3QgKHdpdGggLS1lbmFibGUtc2Nhbm5lciAtLWRpc2FibGUtbGlicmFyaWVzKSB0byBnZXQgYQord2F5bGFuZC1zY2FubmVyIGJpbmFyeSB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgaW4gYSBjcm9zcy1jb21waWxlICh3aXRoCistLWRpc2FibGUtc2Nhbm5lcikuICBUaGUgcHJvYmxlbSB3aXRoIHRoaXMgaXMgdGhhdCB0aGUgY3Jvc3Mgd2F5bGFuZCBpcyBtaXNzaW5nCithIHdheWxhbmQtc2Nhbm5lciBiaW5hcnksIHdoaWNoIG1lYW5zIHlvdSB0aGVuIGNhbid0IGRvIGFueSBXYXlsYW5kIGRldmVsb3BtZW50CitvbiB0aGUgdGFyZ2V0LgorCitJbnN0ZWFkLCBhbHdheXMgYnVpbGQgd2F5bGFuZC1zY2FubmVyIGZvciB0aGUgdGFyZ2V0IGFuZCBjaGFuZ2UKKy0tZW5hYmxlL2Rpc2FibGUtc2Nhbm5lciB0byAtLXdpdGgvd2l0aG91dC1ob3N0LXNjYW5uZXIuICBOb3JtYWwgYnVpbGRzIHVzZSB0aGUKK2RlZmF1bHQgb2YgLS13aXRob3V0LWhvc3Qtc2Nhbm5lciBhbmQgcnVuIHRoZSB3YXlsYW5kLXNjYW5uZXIgaXQganVzdCBidWlsdCwgYW5kCitjcm9zcy1jb21waWxlZCBidWlsZHMgcGFzcyAtLXdpdGgtaG9zdC1zY2FubmVyIHRvIHVzZSBhIHByZXZpb3VzbHkgYnVpbHQgaG9zdAorc2Nhbm5lciBidXQgc3RpbGwgZ2V0IGEgd2F5bGFuZC1zY2FubmVyIHRvIGluc3RhbGwuCisKKyhhIHRoZW9yZXRpY2FsbHkgbmVhdGVyIHNvbHV0aW9uIHdvdWxkIGJlIHRvIGJ1aWxkIHR3byBzY2FubmVycyBpZiByZXF1aXJlZCAob25lCit0byBydW4gYW5kIG9uZSB0byBpbnN0YWxsKSwgYnV0IGF1dG9tYWtlIG1ha2VzIHRoaXMgb3Zlcmx5IGNvbXBsaWNhdGVkKQorCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IGMxOTQ5NGYuLmMyZDkyOWIgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC02NCwxNiArNjQsMTcgQEAgbm9kaXN0X2xpYndheWxhbmRfY2xpZW50X2xhX1NPVVJDRVMgPQkJXAorIAorIHBrZ2NvbmZpZ19EQVRBICs9IHNyYy93YXlsYW5kLWNsaWVudC5wYyBzcmMvd2F5bGFuZC1zZXJ2ZXIucGMKKyAKKy1pZiBFTkFCTEVfU0NBTk5FUgorLXdheWxhbmRfc2Nhbm5lciA9ICQodG9wX2J1aWxkZGlyKS93YXlsYW5kLXNjYW5uZXIKKyBiaW5fUFJPR1JBTVMgPSB3YXlsYW5kLXNjYW5uZXIKKyB3YXlsYW5kX3NjYW5uZXJfU09VUkNFUyA9IHNyYy9zY2FubmVyLmMKKyB3YXlsYW5kX3NjYW5uZXJfQ0ZMQUdTID0gJChFWFBBVF9DRkxBR1MpICQoQU1fQ0ZMQUdTKQorIHdheWxhbmRfc2Nhbm5lcl9MREFERCA9ICQoRVhQQVRfTElCUykgbGlid2F5bGFuZC11dGlsLmxhCistJChCVUlMVF9TT1VSQ0VTKSA6IHdheWxhbmQtc2Nhbm5lcgorIHBrZ2NvbmZpZ19EQVRBICs9IHNyYy93YXlsYW5kLXNjYW5uZXIucGMKKy1lbHNlCisrCisraWYgSE9TVF9TQ0FOTkVSCisgd2F5bGFuZF9zY2FubmVyID0gd2F5bGFuZC1zY2FubmVyCisrZWxzZQorKyQoQlVJTFRfU09VUkNFUykgOiB3YXlsYW5kLXNjYW5uZXIKKyt3YXlsYW5kX3NjYW5uZXIgPSAkKHRvcF9idWlsZGRpcikvd2F5bGFuZC1zY2FubmVyCisgZW5kaWYKKyAKKyBwcm90b2NvbC8lLXByb3RvY29sLmMgOiAkKHRvcF9zcmNkaXIpL3Byb3RvY29sLyUueG1sCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBjMmE4MDRlLi5kZTBiMDJmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02NSwxMSArNjUsMTEgQEAgQUNfQ0hFQ0tfREVDTChDTE9DS19NT05PVE9OSUMsW10sCisgCSAgICAgIFtbI2luY2x1ZGUgPHRpbWUuaD5dXSkKKyBBQ19DSEVDS19IRUFERVJTKFtleGVjaW5mby5oXSkKKyAKKy1BQ19BUkdfRU5BQkxFKFtzY2FubmVyXSwKKy0gICAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXNjYW5uZXJdLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEaXNhYmxlIGNvbXBpbGF0aW9uIG9mIHdheWxhbmQtc2Nhbm5lcl0pXSwKKy0gICAgICAgICAgICAgIFtdLAorLSAgICAgICAgICAgICAgW2VuYWJsZV9zY2FubmVyPXllc10pCisrQUNfQVJHX1dJVEgoW2hvc3Qtc2Nhbm5lcl0sCisrICAgICAgICAgICAgW0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtaG9zdC1zY2FubmVyXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1VzZSBhIGhvc3Qgd2F5bGFuZC1zY2FubmVyXSldLAorKyAgICAgICAgICAgIFtdLAorKyAgICAgICAgICAgIFt3aXRoX2hvc3Rfc2Nhbm5lcj1ub10pCisgCisgQUNfQVJHX0VOQUJMRShbZG9jdW1lbnRhdGlvbl0sCisgCSAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWRvY3VtZW50YXRpb25dLAorQEAgLTc3LDI1ICs3NywyMyBAQCBBQ19BUkdfRU5BQkxFKFtkb2N1bWVudGF0aW9uXSwKKyAJICAgICAgW10sCisgCSAgICAgIFtlbmFibGVfZG9jdW1lbnRhdGlvbj15ZXNdKQorIAorLUFNX0NPTkRJVElPTkFMKEVOQUJMRV9TQ0FOTkVSLCB0ZXN0ICJ4JGVuYWJsZV9zY2FubmVyIiA9IHh5ZXMpCisrQU1fQ09ORElUSU9OQUwoSE9TVF9TQ0FOTkVSLCB0ZXN0ICJ4JHdpdGhfaG9zdF9zY2FubmVyIiA9IHh5ZXMpCisgCisgQUNfQVJHX1dJVEgoaWNvbmRpciwgWyAgLS13aXRoLWljb25kaXI9PGRpcj4gICAgTG9vayBmb3IgY3Vyc29yIGljb25zIGhlcmVdLAorIAkJICAgICBbICBJQ09ORElSPSR3aXRodmFsXSwKKyAJCSAgICAgWyAgSUNPTkRJUj0ke2RhdGFkaXJ9L2ljb25zXSkKKyBBQ19TVUJTVChbSUNPTkRJUl0pCisgCistaWYgdGVzdCAieCRlbmFibGVfc2Nhbm5lciIgPSAieHllcyI7IHRoZW4KKy0JUEtHX0NIRUNLX01PRFVMRVMoRVhQQVQsIFtleHBhdF0sIFtdLAorLQkJW0FDX0NIRUNLX0hFQURFUlMoZXhwYXQuaCwgW10sCistCQkJW0FDX01TR19FUlJPUihbQ2FuJ3QgZmluZCBleHBhdC5oLiBQbGVhc2UgaW5zdGFsbCBleHBhdC5dKV0pCistCQkgU0FWRV9MSUJTPSIkTElCUyIKKy0JCSBBQ19TRUFSQ0hfTElCUyhYTUxfUGFyc2VyQ3JlYXRlLCBleHBhdCwgW10sCistCQkJW0FDX01TR19FUlJPUihbQ2FuJ3QgZmluZCBleHBhdCBsaWJyYXJ5LiBQbGVhc2UgaW5zdGFsbCBleHBhdC5dKV0pCistCQkgRVhQQVRfTElCUz0iJExJQlMiCistCQkgTElCUz0iJFNBVkVfTElCUyIKKy0JCSBBQ19TVUJTVChFWFBBVF9MSUJTKQorLQkJXSkKKy1maQorK1BLR19DSEVDS19NT0RVTEVTKEVYUEFULCBbZXhwYXRdLCBbXSwKKysJW0FDX0NIRUNLX0hFQURFUlMoZXhwYXQuaCwgW10sCisrCQlbQUNfTVNHX0VSUk9SKFtDYW4ndCBmaW5kIGV4cGF0LmguIFBsZWFzZSBpbnN0YWxsIGV4cGF0Ll0pXSkKKysJIFNBVkVfTElCUz0iJExJQlMiCisrCSBBQ19TRUFSQ0hfTElCUyhYTUxfUGFyc2VyQ3JlYXRlLCBleHBhdCwgW10sCisrCQlbQUNfTVNHX0VSUk9SKFtDYW4ndCBmaW5kIGV4cGF0IGxpYnJhcnkuIFBsZWFzZSBpbnN0YWxsIGV4cGF0Ll0pXSkKKysJIEVYUEFUX0xJQlM9IiRMSUJTIgorKwkgTElCUz0iJFNBVkVfTElCUyIKKysJIEFDX1NVQlNUKEVYUEFUX0xJQlMpCisrCV0pCisgCisgQUNfUEFUSF9QUk9HKFhTTFRQUk9DLCB4c2x0cHJvYykKKyBBTV9DT05ESVRJT05BTChbSEFWRV9YU0xUUFJPQ10sIFt0ZXN0ICJ4JFhTTFRQUk9DIiAhPSAieCJdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kL2Rpc2FibGUtbWFjcm8tY2hlY2tzLW5vdC11c2VkLWZvci1zY2FubmVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kL2Rpc2FibGUtbWFjcm8tY2hlY2tzLW5vdC11c2VkLWZvci1zY2FubmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOGJjNTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQvZGlzYWJsZS1tYWNyby1jaGVja3Mtbm90LXVzZWQtZm9yLXNjYW5uZXIucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorZGlzYWJsZSBtYWNybyBjaGVja3Mgbm90IHVzZWQgZm9yIHNjYW5uZXIKKworV2Ugb25seSBidWlsZCB3YXlsYW5kLW5hdGl2ZSBmb3IgdGhlIHNjYW5uZXIsIHNvIGRpc2FibGUgdGhlIGJpdHMgd2UgZG9uJ3QKK2FjdHVhbGx5IG5lZWQuIFRoaXMgYXZvaWQgYnVpbGQgaXNzdWUgb24gb2xkZXIgZGlzdHJvIHN1Y2ggYXMgQ2VudG9zIDUueDoKK3wgZXJyb3I6ICdPX0NMT0VYRUMnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorfCBlcnJvcjogc3lzL3RpbWVyZmQuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorfCBlcnJvcjogJ0NMT0NLX01PTk9UT05JQycgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCit8IGVycm9yOiAnVEZEX0NMT0VYRUMnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorfCBlcnJvcjogJ1NGRF9DTE9FWEVDJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFRpbmcgTGl1IDxiMjg0OTVAZnJlZXNjYWxlLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIwICsrKysrKysrKystLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTQxLDE2ICs0MSwxNiBAQCBBQ19TVUJTVChHQ0NfQ0ZMQUdTKQorIAorIEFDX0NIRUNLX0ZVTkNTKFthY2NlcHQ0IG1rb3N0ZW1wIHBvc2l4X2ZhbGxvY2F0ZV0pCisgCistQUNfQ0hFQ0tfREVDTChTRkRfQ0xPRVhFQyxbXSwKKy0JICAgICAgW0FDX01TR19FUlJPUigiU0ZEX0NMT0VYRUMgaXMgbmVlZGVkIHRvIGNvbXBpbGUgd2F5bGFuZCIpXSwKKy0JICAgICAgW1sjaW5jbHVkZSA8c3lzL3NpZ25hbGZkLmg+XV0pCistQUNfQ0hFQ0tfREVDTChURkRfQ0xPRVhFQyxbXSwKKy0JICAgICAgW0FDX01TR19FUlJPUigiVEZEX0NMT0VYRUMgaXMgbmVlZGVkIHRvIGNvbXBpbGUgd2F5bGFuZCIpXSwKKy0JICAgICAgW1sjaW5jbHVkZSA8c3lzL3RpbWVyZmQuaD5dXSkKKy1BQ19DSEVDS19ERUNMKENMT0NLX01PTk9UT05JQyxbXSwKKy0JICAgICAgW0FDX01TR19FUlJPUigiQ0xPQ0tfTU9OT1RPTklDIGlzIG5lZWRlZCB0byBjb21waWxlIHdheWxhbmQiKV0sCistCSAgICAgIFtbI2luY2x1ZGUgPHRpbWUuaD5dXSkKKy1BQ19DSEVDS19IRUFERVJTKFtleGVjaW5mby5oXSkKKysjI0FDX0NIRUNLX0RFQ0woU0ZEX0NMT0VYRUMsW10sCisrIwkgICAgICBbQUNfTVNHX0VSUk9SKCJTRkRfQ0xPRVhFQyBpcyBuZWVkZWQgdG8gY29tcGlsZSB3YXlsYW5kIildLAorKyMJICAgICAgW1sjaW5jbHVkZSA8c3lzL3NpZ25hbGZkLmg+XV0pCisrI0FDX0NIRUNLX0RFQ0woVEZEX0NMT0VYRUMsW10sCisrIwkgICAgICBbQUNfTVNHX0VSUk9SKCJURkRfQ0xPRVhFQyBpcyBuZWVkZWQgdG8gY29tcGlsZSB3YXlsYW5kIildLAorKyMJICAgICAgW1sjaW5jbHVkZSA8c3lzL3RpbWVyZmQuaD5dXSkKKysjQUNfQ0hFQ0tfREVDTChDTE9DS19NT05PVE9OSUMsW10sCisrIwkgICAgICBbQUNfTVNHX0VSUk9SKCJDTE9DS19NT05PVE9OSUMgaXMgbmVlZGVkIHRvIGNvbXBpbGUgd2F5bGFuZCIpXSwKKysjCSAgICAgIFtbI2luY2x1ZGUgPHRpbWUuaD5dXSkKKysjQUNfQ0hFQ0tfSEVBREVSUyhbZXhlY2luZm8uaF0pCisgCisgQUNfQVJHX0VOQUJMRShbc2Nhbm5lcl0sCisgICAgICAgICAgICAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1zY2FubmVyXSwKKy0tIAorMS44LjMuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmRfMS44LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmRfMS44LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5YTBhYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZF8xLjguMS5iYgpAQCAtMCwwICsxLDQ1IEBACitTVU1NQVJZID0gIldheWxhbmQsIGEgcHJvdG9jb2wgYmV0d2VlbiBhIGNvbXBvc2l0b3IgYW5kIGNsaWVudHMiCitERVNDUklQVElPTiA9ICJXYXlsYW5kIGlzIGEgcHJvdG9jb2wgZm9yIGEgY29tcG9zaXRvciB0byB0YWxrIHRvIGl0cyBjbGllbnRzIFwKK2FzIHdlbGwgYXMgYSBDIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBwcm90b2NvbC4gVGhlIGNvbXBvc2l0b3IgY2FuIGJlIFwKK2Egc3RhbmRhbG9uZSBkaXNwbGF5IHNlcnZlciBydW5uaW5nIG9uIExpbnV4IGtlcm5lbCBtb2Rlc2V0dGluZyBhbmQgZXZkZXYgXAoraW5wdXQgZGV2aWNlcywgYW4gWCBhcHBsaWNhdGlvbiwgb3IgYSB3YXlsYW5kIGNsaWVudCBpdHNlbGYuIFRoZSBjbGllbnRzIGNhbiBcCitiZSB0cmFkaXRpb25hbCBhcHBsaWNhdGlvbnMsIFggc2VydmVycyAocm9vdGxlc3Mgb3IgZnVsbHNjcmVlbikgb3Igb3RoZXIgXAorZGlzcGxheSBzZXJ2ZXJzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93YXlsYW5kLmZyZWVkZXNrdG9wLm9yZyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MWQ0NDc2YTdkOThkZDU2OTFjNTNkNGQ0M2E1MTBjNzIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3dheWxhbmQtc2VydmVyLmM7ZW5kbGluZT0yMTttZDU9MDc5YWUyMWRiZjk4YWRhNTJlYzIzNzQ0ODUxYjBhNWMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3dheWxhbmQuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzLyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vYWx3YXlzLWJ1aWxkLXNjYW5uZXIucGF0Y2giCitTUkNfVVJJW21kNXN1bV0gPSAiNmU4Nzc4NzdjM2UwNGNmYjg2NWNmY2QwNzMzYzlhYjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjE3YzkzOGQxYzI0ZmQwYTEwZjY1MGE2MjNhMjc3NWQzMjlkYjMxNjhiNTczMmU0OThiMDgzODhlYzc3NmZjOCIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBcCisgICAgZmlsZTovL2Rpc2FibGUtbWFjcm8tY2hlY2tzLW5vdC11c2VkLWZvci1zY2FubmVyLnBhdGNoIFwKKyAgICAiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0tZGlzYWJsZS1kb2N1bWVudGF0aW9uIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitERVBFTkRTID0gImV4cGF0IGxpYmZmaSB3YXlsYW5kLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kb2N1bWVudGF0aW9uIC0td2l0aC1ob3N0LXNjYW5uZXIiCisKKyMgV2F5bGFuZCBpbnN0YWxscyBhIE00IG1hY3JvIGZvciBvdGhlciBwcm9qZWN0cyB0byB1c2UsIHdoaWNoIHVzZXMgdGhlIHRhcmdldAorIyBwa2ctY29uZmlnIHRvIGZpbmQgZmlsZXMuICBSZXBsYWNlIHBrZy1jb25maWcgd2l0aCBwa2ctY29uZmlnLW5hdGl2ZS4KK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKyAgc2VkIC1lICdzLFBLR19DSEVDS19NT0RVTEVTKC4qKSwsZycgXAorICAgICAgLWUgJ3MsJFBLR19DT05GSUcscGtnLWNvbmZpZy1uYXRpdmUsZycgXAorICAgICAgLWkgJHtEfS8ke2RhdGFkaXJ9L2FjbG9jYWwvd2F5bGFuZC1zY2FubmVyLm00Cit9CisKK3N5c3Jvb3Rfc3RhZ2VfYWxsX2FwcGVuZF9jbGFzcy10YXJnZXQgKCkgeworCXJtICR7U1lTUk9PVF9ERVNURElSfS8ke2RhdGFkaXJ9L2FjbG9jYWwvd2F5bGFuZC1zY2FubmVyLm00CisJY3AgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9hY2xvY2FsL3dheWxhbmQtc2Nhbm5lci5tNCAke1NZU1JPT1RfREVTVERJUn0vJHtkYXRhZGlyfS9hY2xvY2FsLworfQorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9ICR7ZGF0YWRpcn0vd2F5bGFuZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4Yjc4YmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0LmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiU3RhcnR1cCBzY3JpcHQgZm9yIHRoZSBXZXN0b24gV2F5bGFuZCBjb21wb3NpdG9yIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCIKKworU1JDX1VSSSA9ICJmaWxlOi8vaW5pdCIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW03NTUgJHtXT1JLRElSfS9pbml0ICR7RH0vJHtzeXNjb25mZGlyfS9pbml0LmQvd2VzdG9uCit9CisKK2luaGVyaXQgYWxsYXJjaCB1cGRhdGUtcmMuZAorCitSREVQRU5EU18ke1BOfSA9ICJ3ZXN0b24ga2JkIgorCitJTklUU0NSSVBUX05BTUUgPSAid2VzdG9uIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOSA1IDIgLiBzdG9wIDIwIDAgMSA2IC4iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0L2luaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0L2luaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5MzhmNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQvaW5pdApAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKyMKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6IHdlc3RvbgorIyBSZXF1aXJlZC1TdGFydDogJGxvY2FsX2ZzICRyZW1vdGVfZnMKKyMgUmVxdWlyZWQtU3RvcDogJGxvY2FsX2ZzICRyZW1vdGVfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisjIyMgRU5EIElOSVQgSU5GTworCitpZiB0ZXN0IC1lIC9ldGMvZGVmYXVsdC93ZXN0b24gOyB0aGVuCisgICAgICAgIC4gL2V0Yy9kZWZhdWx0L3dlc3RvbgorZmkKKwora2lsbHByb2MoKSB7CisgICAgICAgIHBpZD1gL2Jpbi9waWRvZiAkMWAKKyAgICAgICAgWyAiJHBpZCIgIT0gIiIgXSAmJiBraWxsICRwaWQKK30KKworcmVhZCBDTURMSU5FIDwgL3Byb2MvY21kbGluZQorZm9yIHggaW4gJENNRExJTkU7IGRvCisgICAgICAgIGNhc2UgJHggaW4KKyAgICAgICAgd2VzdG9uPWZhbHNlKQorCQllY2hvICJXZXN0b24gZGlzYWJsZWQiCisJCWV4aXQgMDsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBlc2FjCitkb25lCisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKyAgICAgICAgLiAvZXRjL3Byb2ZpbGUKKworICAgICAgICAjIFRoaXMgaXMgYWxsIGEgbmFzdHkgaGFjaworICAgICAgICBpZiB0ZXN0IC16ICIkWERHX1JVTlRJTUVfRElSIjsgdGhlbgorICAgICAgICAgICAgICAgIGV4cG9ydCBYREdfUlVOVElNRV9ESVI9L3J1bi91c2VyL3Jvb3QKKyAgICAgICAgICAgICAgICBta2RpciAtLXBhcmVudHMgJFhER19SVU5USU1FX0RJUgorICAgICAgICAgICAgICAgIGNobW9kIDA3MDAgJFhER19SVU5USU1FX0RJUgorICAgICAgICBmaQorCisgICAgICAgIG9wZW52dCAtcyB3ZXN0b24gLS0gJE9QVEFSR1MKKyAgOzsKKworICBzdG9wKQorICAgICAgICBlY2hvICJTdG9wcGluZyBXZXN0b24iCisgICAgICAgIGtpbGxwcm9jIHdlc3RvbgorICA7OworCisgIHJlc3RhcnQpCisJJDAgc3RvcAorICAgICAgICBzbGVlcCAxCisgICAgICAgICQwIHN0YXJ0CisgIDs7CisKKyAgKikKKyAgICAgICAgZWNobyAidXNhZ2U6ICQwIHsgc3RhcnQgfCBzdG9wIHwgcmVzdGFydCB9IgorICA7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLzAwMDEtbWFrZS1lcnJvci1wb3J0YWJsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLzAwMDEtbWFrZS1lcnJvci1wb3J0YWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDg4NDhkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vMDAwMS1tYWtlLWVycm9yLXBvcnRhYmxlLnBhdGNoCkBAIC0wLDAgKzEsODAgQEAKK0Zyb20gYzIyZTkwMzY1ZDg5MzQ2MjU4Mzk0ODMzY2JjYWQwM2ZmMzJiMmUyNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1heSAyMDE1IDIwOjU2OjAwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggd2VzdG9uXSBtYWtlIGVycm9yKCkgcG9ydGFibGUKKworZXJyb3IoKSBpcyBub3QgcG9zaXggYnV0IGdudSBleHRlbnNpb24gc28gbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gYWxsCitraW5kIG9mIHN5c3RlbXNpIGUuZy4gbXVzbC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworIGNvbmZpZ3VyZS5hYyAgICAgICAgfCAgMiArKworIHNyYy93ZXN0b24tZXJyb3IuaCAgfCAyMCArKysrKysrKysrKysrKysrKysrKworIHNyYy93ZXN0b24tbGF1bmNoLmMgfCAgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvd2VzdG9uLWVycm9yLmgKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMjYzZmMyMi4uZjUyY2Q2MiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTcsNiArNTcsOCBAQCBBQ19DSEVDS19ERUNMKENMT0NLX01PTk9UT05JQyxbXSwKKyAJICAgICAgW1sjaW5jbHVkZSA8dGltZS5oPl1dKQorIEFDX0NIRUNLX0hFQURFUlMoW2V4ZWNpbmZvLmhdKQorIAorK0FDX0NIRUNLX0hFQURFUlMoW2Vycm9yLmhdKQorKworIEFDX0NIRUNLX0ZVTkNTKFtta29zdGVtcCBzdHJjaHJudWwgaW5pdGdyb3VwcyBwb3NpeF9mYWxsb2NhdGVdKQorIAorIENPTVBPU0lUT1JfTU9EVUxFUz0id2F5bGFuZC1zZXJ2ZXIgPj0gMS43LjkzIHBpeG1hbi0xID49IDAuMjUuMiIKK2RpZmYgLS1naXQgYS9zcmMvd2VzdG9uLWVycm9yLmggYi9zcmMvd2VzdG9uLWVycm9yLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yMDg5ZDAyCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvd2VzdG9uLWVycm9yLmgKK0BAIC0wLDAgKzEsMjAgQEAKKysjaWZuZGVmIF9XRVNUT05fRVJST1JfSAorKyNkZWZpbmUgX1dFU1RPTl9FUlJPUl9ICisrCisrI2lmIGRlZmluZWQoSEFWRV9FUlJPUl9IKQorKyNpbmNsdWRlIDxlcnJvci5oPgorKyNlbHNlCisrI2luY2x1ZGUgPGVyci5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjZGVmaW5lIF93ZXN0b25fZXJyb3IoUywgRSwgRiwgLi4uKSBkbyB7IFwKKysJaWYgKEUpIFwKKysJCWVycihTLCBGICI6ICVzIiwgIyNfX1ZBX0FSR1NfXywgc3RyZXJyb3IoRSkpOyBcCisrCWVsc2UgXAorKwkJZXJyKFMsIEYsICMjX19WQV9BUkdTX18pOyBcCisrfSB3aGlsZSgwKQorKworKyNkZWZpbmUgZXJyb3IgX3dlc3Rvbl9lcnJvcgorKyNlbmRpZgorKworKyNlbmRpZgorKworZGlmZiAtLWdpdCBhL3NyYy93ZXN0b24tbGF1bmNoLmMgYi9zcmMvd2VzdG9uLWxhdW5jaC5jCitpbmRleCAxMGM2NmRlLi4zZTZkMzBhIDEwMDY0NAorLS0tIGEvc3JjL3dlc3Rvbi1sYXVuY2guYworKysrIGIvc3JjL3dlc3Rvbi1sYXVuY2guYworQEAgLTMwLDcgKzMwLDYgQEAKKyAjaW5jbHVkZSA8cG9sbC5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorIAorLSNpbmNsdWRlIDxlcnJvci5oPgorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitAQCAtNTYsNiArNTUsNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlICJ3ZXN0b24tbGF1bmNoLmgiCisrI2luY2x1ZGUgIndlc3Rvbi1lcnJvci5oIgorIAorICNkZWZpbmUgRFJNX01BSk9SIDIyNgorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9kaXNhYmxlLXdheWxhbmQtc2Nhbm5lci1wa2ctY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9kaXNhYmxlLXdheWxhbmQtc2Nhbm5lci1wa2ctY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiYTM4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL2Rpc2FibGUtd2F5bGFuZC1zY2FubmVyLXBrZy1jaGVjay5wYXRjaApAQCAtMCwwICsxLDE3IEBACitJbmRleDogZ2l0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdpdC9jb25maWd1cmUuYWMKK0BAIC01MDEsMTIgKzUwMSw2IEBAIGlmIHRlc3QgIngkaGF2ZV9sY21zIiA9IHh5ZXM7IHRoZW4KKyBmaQorIEFNX0NPTkRJVElPTkFMKEhBVkVfTENNUywgW3Rlc3QgIngkaGF2ZV9sY21zIiA9IHh5ZXNdKQorIAorLUFDX1BBVEhfUFJPRyhbd2F5bGFuZF9zY2FubmVyXSwgW3dheWxhbmQtc2Nhbm5lcl0pCistaWYgdGVzdCB4JHdheWxhbmRfc2Nhbm5lciA9IHg7IHRoZW4KKy0JUEtHX0NIRUNLX01PRFVMRVMoV0FZTEFORF9TQ0FOTkVSLCBbd2F5bGFuZC1zY2FubmVyXSkKKy0Jd2F5bGFuZF9zY2FubmVyPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXdheWxhbmRfc2Nhbm5lciB3YXlsYW5kLXNjYW5uZXJgCistZmkKKy0KKyBBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlIHNyYy92ZXJzaW9uLmggc3JjL3dlc3Rvbi5wY10pCisgCisgQU1fQ09ORElUSU9OQUwoW0hBVkVfR0lUX1JFUE9dLCBbdGVzdCAtZiAkc3JjZGlyLy5naXQvbG9ncy9IRUFEXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL21ha2UtbGNtcy1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL21ha2UtbGNtcy1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWU2ZDZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS1sY21zLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK3dlc3Rvbi0xLjUuMC9jb25maWd1cmUuYWM6IG1ha2UgbGNtcyBleHBsaWNpdGx5IGNvbmZpZ3VyYWJsZQorCitUaGUgbGNtcyBwYWNrYWdlIGlzIG91dHNpZGUgb2Ygb3BlbmVtYmVkZGVkLWNvcmUsIHNvIG1ha2UgaXQKK2V4cGxpY2l0bHkgY29uZmlndXJhYmxlLiBNYWtlIGl0IGRldGVybWluaXN0aWMsIHNvIHRoYXQgaWYgbGNtcworZGVwZW5kZW5jaWVzIGFyZSBtaXNzaW5nLCBhdXRvY29uZiB0aHJvd3MgYSBmYXRhbCBlcnJvci4gRm9sbG93Cit1cHN0cmVhbSBzdHlsZSB0byBtYWtlIGl0IG1vcmUgbGlrZWx5IHRvIGJlIG1lcmdlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB3ZXN0b24tMS41LjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2VzdG9uLTEuNS4wLm9yaWcvY29uZmlndXJlLmFjCisrKysgd2VzdG9uLTEuNS4wL2NvbmZpZ3VyZS5hYworQEAgLTQ5MSwxMiArNDkxLDI0IEBAIEFDX0FSR19FTkFCTEUoZGVtby1jbGllbnRzLWluc3RhbGwsCisgCQkJICAgICBlbmFibGVfZGVtb19jbGllbnRzX2luc3RhbGw9bm8pCisgQU1fQ09ORElUSU9OQUwoSU5TVEFMTF9ERU1PX0NMSUVOVFMsIFt0ZXN0ICJ4JGVuYWJsZV9kZW1vX2NsaWVudHNfaW5zdGFsbCIgPSAieHllcyJdKQorIAorLVBLR19DSEVDS19NT0RVTEVTKExDTVMsIGxjbXMyLAorLSAgICAgICAgICAgICAgICAgIFtoYXZlX2xjbXM9eWVzXSwgW2hhdmVfbGNtcz1ub10pCistaWYgdGVzdCAieCRoYXZlX2xjbXMiID0geHllczsgdGhlbgorLSAgICAgICBBQ19ERUZJTkUoSEFWRV9MQ01TLCAxLCBbSGF2ZSBsY21zIHN1cHBvcnRdKQorK0FDX0FSR19FTkFCTEUobGNtcywKKysgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGNtc10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRGlzYWJsZSBsY21zIHN1cHBvcnRdKSwsCisrICAgICAgICAgICAgICBlbmFibGVfbGNtcz1hdXRvKQorK0FNX0NPTkRJVElPTkFMKEhBVkVfTENNUywgW3Rlc3QgIngkZW5hYmxlX2xjbXMiID0geHllc10pCisraWYgdGVzdCAieCRlbmFibGVfbGNtcyIgIT0gInhubyI7IHRoZW4KKysgICAgICAgIFBLR19DSEVDS19NT0RVTEVTKExDTVMsIAorKyAgICAgICAgICAgICAgICAgICAgICAgICBsY21zMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgW2hhdmVfbGNtcz15ZXNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBbaGF2ZV9sY21zPW5vXSkKKysgICAgICAgIGlmIHRlc3QgIngkaGF2ZV9sY21zIiA9ICJ4bm8iIC1hICJ4JGVuYWJsZV9sY21zIiA9ICJ4eWVzIjsgdGhlbgorKyAgICAgICAgICBBQ19NU0dfRVJST1IoW2xjbXMgc3VwcG9ydCBleHBsaWNpdGx5IHJlcXVlc3RlZCwgYnV0IGxjbXMgY291bGRuJ3QgYmUgZm91bmRdKQorKyAgICAgICAgZmkKKysgICAgICAgIGlmIHRlc3QgIngkaGF2ZV9sY21zIiA9ICJ4eWVzIjsgdGhlbgorKyAgICAgICAgICAgICAgICBlbmFibGVfbGNtcz15ZXMKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfTENNUywgMSwgW0hhdmUgbGNtcyBzdXBwb3J0XSkKKysgICAgICAgIGZpCisgZmkKKy1BTV9DT05ESVRJT05BTChIQVZFX0xDTVMsIFt0ZXN0ICJ4JGhhdmVfbGNtcyIgPSB4eWVzXSkKKyAKKyBBQ19QQVRIX1BST0coW3dheWxhbmRfc2Nhbm5lcl0sIFt3YXlsYW5kLXNjYW5uZXJdKQorIGlmIHRlc3QgeCR3YXlsYW5kX3NjYW5uZXIgPSB4OyB0aGVuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9tYWtlLWxpYndlYnAtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9tYWtlLWxpYndlYnAtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwN2Q0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL21ha2UtbGlid2VicC1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaApAQCAtMCwwICsxLDM3IEBACisKK1RoZSBsaWJ3ZWJwIHBhY2thZ2UgaXMgb3V0c2lkZSBvZiBvcGVuZW1iZWRkZWQtY29yZSwgc28gbWFrZSBpdAorZXhwbGljaXRseSBjb25maWd1cmFibGUuIE1ha2UgaXQgZGV0ZXJtaW5pc3RpYywgc28gdGhhdCBpZiBsaWJ3ZWJwIAorZGVwZW5kZW5jaWVzIGFyZSBtaXNzaW5nLCBhdXRvY29uZiB0aHJvd3MgYSBmYXRhbCBlcnJvci4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB3ZXN0b24tMS41LjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2VzdG9uLTEuNS4wLm9yaWcvY29uZmlndXJlLmFjCisrKysgd2VzdG9uLTEuNS4wL2NvbmZpZ3VyZS5hYworQEAgLTI2OCw5ICsyNjgsMjIgQEAgZmkKKyAKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhQSVhNQU4sIFtwaXhtYW4tMV0pCisgUEtHX0NIRUNLX01PRFVMRVMoUE5HLCBbbGlicG5nXSkKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhXRUJQLCBbbGlid2VicF0sIFtoYXZlX3dlYnA9eWVzXSwgW2hhdmVfd2VicD1ub10pCistQVNfSUYoW3Rlc3QgIngkaGF2ZV93ZWJwIiA9ICJ4eWVzIl0sCistICAgICAgW0FDX0RFRklORShbSEFWRV9XRUJQXSwgWzFdLCBbSGF2ZSB3ZWJwXSldKQorK0FDX0FSR19FTkFCTEUod2VicCwKKysgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtd2VicF0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRGlzYWJsZSBsaWJ3ZWJwIHN1cHBvcnRdKSwsCisrICAgICAgICAgICAgICBlbmFibGVfd2VicD1hdXRvKQorK0FNX0NPTkRJVElPTkFMKEhBVkVfV0VCUCwgW3Rlc3QgIngkZW5hYmxlX3dlYnAiID0geHllc10pCisrQVNfSUYoW3Rlc3QgIngkZW5hYmxlX3dlYnAiICE9ICJ4bm8iXSwKKysgICAgUEtHX0NIRUNLX01PRFVMRVMoV0VCUCwKKysgICAgICAgICAgICAgICAgICAgICBbbGlid2VicF0sCisrICAgICAgICAgICAgICAgICAgICAgW2hhdmVfd2VicD15ZXNdLAorKyAgICAgICAgICAgICAgICAgICAgIFtoYXZlX3dlYnA9bm9dKQorKyAgICBBU19JRihbdGVzdCAieCRoYXZlX3dlYnAiID0gInhubyIgLWEgIngkZW5hYmxlX3dlYnAiID0gInh5ZXMiXSwKKysgICAgICAgIEFDX01TR19FUlJPUihbbGlid2VicCBzdXBwb3J0IGV4cGxpY2l0bHkgcmVxdWVzdCwgYnV0IGxpcHdlYnAgY291bGQgbm90IGJlIGZvdW5kXSkpCisrICAgIEFTX0lGKFt0ZXN0ICJ4JGhhdmVfd2VicCIgPSAieHllcyJdLAorKyAgICAgICAgW2VuYWJsZV93ZWJwPXllc10KKysgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfV0VCUF0sIFsxXSwgW0hhdmUgd2VicF0pXSkKKyspCisgCisgQUNfQVJHX0VOQUJMRSh2YWFwaS1yZWNvcmRlciwgWyAgLS1lbmFibGUtdmFhcGktcmVjb3JkZXJdLCwKKyAJICAgICAgZW5hYmxlX3ZhYXBpX3JlY29yZGVyPWF1dG8pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9wYXJhbGxlbG1ha2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9wYXJhbGxlbG1ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJiNWVmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3BhcmFsbGVsbWFrZS5wYXRjaApAQCAtMCwwICsxLDQwIEBACitCYWNrcG9ydCB0d28gcGF0Y2hlcyBmcm9tIHVwc3RyZWFtIHRvIGZpeCBwYXJhbGxlbCBidWlsZHMKKworLSBta2RpciByYWNlcyAoMmVmZjIyYjhlNmY2ZTUyNTVhMTkxNWMzM2RmZDkxY2VjZjAyY2JiYykKKy0gd2VzdG9uLmRlc2t0b3AgcmFjZSAoMzE1NDc2ZmE3YjFmMWM0NGMxYjM1MTE2MDM2ZGY1NGFjNWNiOWEwMykKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IDU4MTliMTkuLmZmMTNiMTkgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0yMCw3ICsyMCw3IEBAIHdlc3Rvbi5pbmkgOiAkKHNyY2Rpcikvd2VzdG9uLmluaS5pbgorIAkJJDwgPiAkQAorIAorIGl2aS1zaGVsbC93ZXN0b24uaW5pIDogJChzcmNkaXIpL2l2aS1zaGVsbC93ZXN0b24uaW5pLmluCistCSQoQU1fVl9HRU4pJChTRUQpIFwKKysJJChBTV9WX0dFTikkKE1LRElSX1ApICQoZGlyICRAKSAmJiAkKFNFRCkgXAorIAkJLWUgJ3N8QGJpbmRpcltAXXwkKGJpbmRpcil8ZycgXAorIAkJLWUgJ3N8QGFic190b3BfYnVpbGRkaXJbQF18JChhYnNfdG9wX2J1aWxkZGlyKXxnJyBcCisgCQktZSAnc3xAYWJzX3RvcF9zcmNkaXJbQF18JChhYnNfdG9wX3NyY2Rpcil8ZycgXAorQEAgLTI5LDcgKzI5LDcgQEAgaXZpLXNoZWxsL3dlc3Rvbi5pbmkgOiAkKHNyY2RpcikvaXZpLXNoZWxsL3dlc3Rvbi5pbmkuaW4KKyAJCSQ8ID4gJEAKKyAKKyB0ZXN0cy93ZXN0b24taXZpLmluaSA6ICQoc3JjZGlyKS9pdmktc2hlbGwvd2VzdG9uLmluaS5pbgorLQkkKEFNX1ZfR0VOKSQoU0VEKSBcCisrCSQoQU1fVl9HRU4pJChNS0RJUl9QKSAkKGRpciAkQCkgJiYgJChTRUQpIFwKKyAJCS1lICdzfEBiaW5kaXJbQF18JChiaW5kaXIpfGcnIFwKKyAJCS1lICdzfEBhYnNfdG9wX2J1aWxkZGlyW0BdfCQoYWJzX3RvcF9idWlsZGRpcil8ZycgXAorIAkJLWUgJ3N8QGFic190b3Bfc3JjZGlyW0BdfCQoYWJzX3RvcF9zcmNkaXIpfGcnIFwKK0BAIC0xNzksOCArMTc5LDcgQEAgcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworIHBrZ2NvbmZpZ19EQVRBID0gc3JjL3dlc3Rvbi5wYworIAorIHdheWxhbmRfc2Vzc2lvbmRpciA9ICQoZGF0YWRpcikvd2F5bGFuZC1zZXNzaW9ucworLXdheWxhbmRfc2Vzc2lvbl9EQVRBID0gc3JjL3dlc3Rvbi5kZXNrdG9wCistZGlzdF93YXlsYW5kX3Nlc3Npb25fREFUQSA9ICQod2F5bGFuZF9zZXNzaW9uX0RBVEEpCisrZGlzdF93YXlsYW5kX3Nlc3Npb25fREFUQSA9IHNyYy93ZXN0b24uZGVza3RvcAorIAorIHdlc3RvbmluY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL3dlc3RvbgorIHdlc3RvbmluY2x1ZGVfSEVBREVSUyA9CQkJCVwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3dlc3Rvbi5kZXNrdG9wIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vd2VzdG9uLmRlc2t0b3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4NmFlOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3dlc3Rvbi5kZXNrdG9wCkBAIC0wLDAgKzEsOSBAQAorW0Rlc2t0b3AgRW50cnldCitFbmNvZGluZz1VVEYtOAorVHlwZT1BcHBsaWNhdGlvbgorTmFtZT1XZXN0b24KK0NvbW1lbnQ9V2F5bGFuZCBDb21wb3N0aXRvcgorRXhlYz13ZXN0b24KK0ljb249d2VzdG9uCitUZXJtaW5hbD1mYWxzZQorQ2F0ZWdvcmllcz1VdGlsaXR5OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vd2VzdG9uLnBuZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3dlc3Rvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE4YjdlMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3dlc3Rvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b25fMS44LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbl8xLjguMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDJjNjA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b25fMS44LjAuYmIKQEAgLTAsMCArMSw5NCBAQAorU1VNTUFSWSA9ICJXZXN0b24sIGEgV2F5bGFuZCBjb21wb3NpdG9yIgorREVTQ1JJUFRJT04gPSAiV2VzdG9uIGlzIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgYSBXYXlsYW5kIGNvbXBvc2l0b3IiCitIT01FUEFHRSA9ICJodHRwOi8vd2F5bGFuZC5mcmVlZGVza3RvcC5vcmciCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI3NWVmYWMyNTU5YTIyNDUyN2JkNGZkNTkzZDM4NDY2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9jb21wb3NpdG9yLmM7ZW5kbGluZT0yMzttZDU9YTk3OTNmMWVkYzhkMWE0YzM0NGNhOGFlMjUyMzUyZmIiCisKK1NSQ19VUkkgPSAiaHR0cDovL3dheWxhbmQuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzLyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vd2VzdG9uLnBuZyBcCisgICAgICAgICAgIGZpbGU6Ly93ZXN0b24uZGVza3RvcCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlLWxjbXMtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFrZS1saWJ3ZWJwLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbWFrZS1lcnJvci1wb3J0YWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wYXJhbGxlbG1ha2UucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjI0Y2I4YTdlZDA1MzViNGZjMzY0MjY0Mzk4OGRhYjM2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg5NjNlNjlmMzI4ZTgxNWNlYzQyYzU4MDQ2YzRhZjcyMTQ3NmM3NTQxYmI3ZDllZGM3MTc0MGZhZGE1YWQzMTIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1c2VyYWRkCisKK0RFUEVORFMgPSAibGlieGtiY29tbW9uIGdkay1waXhidWYgcGl4bWFuIGNhaXJvIGdsaWItMi4wIGpwZWciCitERVBFTkRTICs9ICJ3YXlsYW5kIGxpYmlucHV0IHZpcnR1YWwvZWdsIHBhbmdvIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2V0dWlkLWluc3RhbGwgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14d2F5bGFuZCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtc2ltcGxlLWNsaWVudHMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWNsaWVudHMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWRlbW8tY2xpZW50cy1pbnN0YWxsIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtcnBpLWNvbXBvc2l0b3IgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1yZHAtY29tcG9zaXRvciBcCisgICAgICAgICAgICAgICAgIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX3FlbXV4ODYgPSAiXAorCQlXRVNUT05fTkFUSVZFX0JBQ0tFTkQ9ZmJkZXYtYmFja2VuZC5zbyBcCisJCSIKK0VYVFJBX09FQ09ORl9hcHBlbmRfcWVtdXg4Ni02NCA9ICJcCisJCVdFU1RPTl9OQVRJVkVfQkFDS0VORD1mYmRldi1iYWNrZW5kLnNvIFwKKwkJIgorUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICdrbXMgZmJkZXYgd2F5bGFuZCBlZ2wnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsYXVuY2gnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICIKKyMKKyMgQ29tcG9zaXRvciBjaG9pY2VzCisjCisjIFdlc3RvbiBvbiBLTVMKK1BBQ0tBR0VDT05GSUdba21zXSA9ICItLWVuYWJsZS1kcm0tY29tcG9zaXRvciwtLWRpc2FibGUtZHJtLWNvbXBvc2l0b3IsZHJtIHVkZXYgdmlydHVhbC9tZXNhIG10ZGV2IgorIyBXZXN0b24gb24gV2F5bGFuZCAobmVzdGVkIFdlc3RvbikKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLS1lbmFibGUtd2F5bGFuZC1jb21wb3NpdG9yLC0tZGlzYWJsZS13YXlsYW5kLWNvbXBvc2l0b3IsdmlydHVhbC9tZXNhIgorIyBXZXN0b24gb24gWDExCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExLWNvbXBvc2l0b3IsLS1kaXNhYmxlLXgxMS1jb21wb3NpdG9yLHZpcnR1YWwvbGlieDExIGxpYnhjYiBsaWJ4Y2IgbGlieGN1cnNvciBjYWlybyIKKyMgSGVhZGxlc3MgV2VzdG9uCitQQUNLQUdFQ09ORklHW2hlYWRsZXNzXSA9ICItLWVuYWJsZS1oZWFkbGVzcy1jb21wb3NpdG9yLC0tZGlzYWJsZS1oZWFkbGVzcy1jb21wb3NpdG9yIgorIyBXZXN0b24gb24gZnJhbWVidWZmZXIKK1BBQ0tBR0VDT05GSUdbZmJkZXZdID0gIi0tZW5hYmxlLWZiZGV2LWNvbXBvc2l0b3IsLS1kaXNhYmxlLWZiZGV2LWNvbXBvc2l0b3IsdWRldiBtdGRldiIKKyMgd2VzdG9uLWxhdW5jaAorUEFDS0FHRUNPTkZJR1tsYXVuY2hdID0gIi0tZW5hYmxlLXdlc3Rvbi1sYXVuY2gsLS1kaXNhYmxlLXdlc3Rvbi1sYXVuY2gsbGlicGFtIGRybSIKKyMgVkEtQVBJIGRlc2t0b3AgcmVjb3JkZXIKK1BBQ0tBR0VDT05GSUdbdmFhcGldID0gIi0tZW5hYmxlLXZhYXBpLXJlY29yZGVyLC0tZGlzYWJsZS12YWFwaS1yZWNvcmRlcixsaWJ2YSIKKyMgV2VzdG9uIHdpdGggRUdMIHN1cHBvcnQKK1BBQ0tBR0VDT05GSUdbZWdsXSA9ICItLWVuYWJsZS1lZ2wgLS1lbmFibGUtc2ltcGxlLWVnbC1jbGllbnRzLC0tZGlzYWJsZS1lZ2wgLS1kaXNhYmxlLXNpbXBsZS1lZ2wtY2xpZW50cyx2aXJ0dWFsL2VnbCIKKyMgV2VzdG9uIHdpdGggY2Fpcm8gZ2xlc3YyIHN1cHBvcnQKK1BBQ0tBR0VDT05GSUdbY2Fpcm8tZ2xlc3YyXSA9ICItLXdpdGgtY2Fpcm8tZ2xlc3YyLC0td2l0aC1jYWlybz1pbWFnZSxjYWlybyIKKyMgV2VzdG9uIHdpdGggbGNtcyBzdXBwb3J0CitQQUNLQUdFQ09ORklHW2xjbXNdID0gIi0tZW5hYmxlLWxjbXMsLS1kaXNhYmxlLWxjbXMsbGNtcyIKKyMgV2VzdG9uIHdpdGggd2VicCBzdXBwb3J0CitQQUNLQUdFQ09ORklHW3dlYnBdID0gIi0tZW5hYmxlLXdlYnAsLS1kaXNhYmxlLXdlYnAsbGlid2VicCIKKyMgV2VzdG9uIHdpdGggdW53aW5kaW5nIHN1cHBvcnQKK1BBQ0tBR0VDT05GSUdbbGlidW53aW5kXSA9ICItLWVuYWJsZS1saWJ1bndpbmQsLS1kaXNhYmxlLWxpYnVud2luZCxsaWJ1bndpbmQiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgV2VzdG9uIGRvZXNuJ3QgbmVlZCB0aGUgLmxhIGZpbGVzIHRvIGxvYWQgbW9kdWxlcywgc28gd2lwZSB0aGVtCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vd2VzdG9uLyoubGEKKworCSMgSWYgWDExLCBzaGlwIGEgZGVza3RvcCBmaWxlIHRvIGxhdW5jaCBpdAorCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iID0gIngxMSIgXTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucworCQlpbnN0YWxsICR7V09SS0RJUn0vd2VzdG9uLmRlc2t0b3AgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCisKKwkJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9pY29ucy9oaWNvbG9yLzQ4eDQ4L2FwcHMKKwkJaW5zdGFsbCAke1dPUktESVJ9L3dlc3Rvbi5wbmcgJHtEfSR7ZGF0YWRpcn0vaWNvbnMvaGljb2xvci80OHg0OC9hcHBzCisgICAgICAgIGZpCit9CisKK1BBQ0tBR0VTICs9ICIke1BOfS1leGFtcGxlcyIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L3dlc3RvbiAke2JpbmRpcn0vd2VzdG9uLXRlcm1pbmFsICR7YmluZGlyfS93ZXN0b24taW5mbyAke2JpbmRpcn0vd2VzdG9uLWxhdW5jaCAke2JpbmRpcn0vd2NhcC1kZWNvZGUgJHtsaWJleGVjZGlyfSAke2xpYmRpcn0vJHtCUE59Lyouc28gJHtkYXRhZGlyfSIKK0ZJTEVTXyR7UE59LWV4YW1wbGVzID0gIiR7YmluZGlyfS8qIgorCitSREVQRU5EU18ke1BOfSArPSAieGtleWJvYXJkLWNvbmZpZyIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImxpYmVyYXRpb24tZm9udHMiCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitHUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSB3ZXN0b24tbGF1bmNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWGRlZmF1bHRzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWGRlZmF1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YjY5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9YZGVmYXVsdHMKQEAgLTAsMCArMSwzIEBACitSeHZ0KnNjcm9sbEJhcl9yaWdodDogdHJ1ZQorUnh2dCpmb250OiB4ZnQ6TW9ubzpwaXhlbHNpemU9OQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2VydmVyIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlcnZlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzU3MGRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlcnZlcgpAQCAtMCwwICsxLDEyIEBACisjIS9iaW4vc2gKKyMKKworWFNFUlZFUj0vdXNyL2Jpbi9Yb3JnCisKKy4gL2V0Yy9wcm9maWxlCisKK0FSR1M9IiAtYnIgLXBuIgorCitESVNQTEFZPSc6MCcKKworZXhlYyB4aW5pdCAvZXRjL1gxMS9Yc2Vzc2lvbiAtLSAkWFNFUlZFUiAkRElTUExBWSAkQVJHUyAkKgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjczMTI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24KQEAgLTAsMCArMSwzOCBAQAorIyEvYmluL3NoCisKK2lmIFsgLXggL3Vzci9iaW4vZGJ1cy1sYXVuY2ggXTsgdGhlbgorICAgICMgQXMgdGhpcyBpcyB0aGUgWCBzZXNzaW9uIHNjcmlwdCwgYWx3YXlzIHN0YXJ0IGEgbmV3IERCdXMgc2Vzc2lvbi4KKyAgICBldmFsIGBkYnVzLWxhdW5jaCAtLXNoLXN5bnRheCAtLWV4aXQtd2l0aC1zZXNzaW9uIDwvZGV2L251bGxgCisgICAgZWNobyAiRC1CVVMgcGVyLXNlc3Npb24gZGFlbW9uIGFkZHJlc3MgaXM6ICREQlVTX1NFU1NJT05fQlVTX0FERFJFU1MiCitmaQorCisuIC9ldGMvcHJvZmlsZQorCitpZiBbIC1mICRIT01FLy5wcm9maWxlIF07IHRoZW4KKyAgICAuICRIT01FLy5wcm9maWxlCitmaQorCitTWVNTRVNTSU9ORElSPS9ldGMvWDExL1hzZXNzaW9uLmQKKworZXhwb3J0IENMVVRURVJfRElTQUJMRV9NSVBNQVBQRURfVEVYVD0xCisKK2ZvciBTRVNTSU9ORklMRSBpbiAkU1lTU0VTU0lPTkRJUi8qOyBkbworICAgIHNldCArZQorICAgIGNhc2UgIiRTRVNTSU9ORklMRSIgaW4KKyAgICAgICAgKi5zaCkKKyAgICAgICAgICAgIC4gIiRTRVNTSU9ORklMRSIKKyAgICAgICAgICAgIDs7CisgICAgICAgICouc2hiZykKKyAgICAgICAgICAgICIkU0VTU0lPTkZJTEUiICYKKyAgICAgICAgICAgIDs7CisgICAgICAgICp+KQorICAgICAgICAgICAgIyBJZ25vcmUgYmFja3VwIGZpbGVzCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgIiRTRVNTSU9ORklMRSIKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworICAgIHNldCAtZQorZG9uZQorCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvMTJrZXltYXAuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzEya2V5bWFwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZDEwMmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzEya2V5bWFwLnNoCkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL3NoCisKKyMga2RyaXZlIDEuNCBkb2VzIG5vdCBoYXZlIGRlZmF1bHQga2V5bWFwIGluIHNlcnZlcgorI3htb2RtYXAgLSA8L2V0Yy9YMTEvZGVmYXVsdC54bW9kbWFwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzEzeGRnYmFzZWRpcnMuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzEzeGRnYmFzZWRpcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE1OTRiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvMTN4ZGdiYXNlZGlycy5zaApAQCAtMCwwICsxLDEzIEBACisjIE1pbmltYWwvc3R1YiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgWERHIEJhc2UgRGlyZWN0b3J5IHNwZWNpZmljYXRpb24uCisjIGh0dHA6Ly9zdGFuZGFyZHMuZnJlZWRlc2t0b3Aub3JnL2Jhc2VkaXItc3BlYy9iYXNlZGlyLXNwZWMtbGF0ZXN0Lmh0bWwKKyMKKyMgV2F5bGFuZCBuZWVkcyBYREdfUlVOVElNRV9ESVIsIHNvIHNldCBpdCB0byAvdG1wLiAgVGhpcyBpc24ndCBjb21wbGlhbnQgd2l0aAorIyB0aGUgc3BlY2lmaWNhdGlvbiAod3JvbmcgbW9kZSwgd3Jvbmcgb3duZXIpIGJ1dCBpdCdzIG1vc3RseSBzdWZmaWNpZW50LgorIworIyBJbiB0aGUgaWRlYWwgY2FzZSB3aGVyZSBTeXN0ZW1EIGlzIGJvb3RpbmcgYW5kIHVzZXJzcGFjZSBpcyBpbml0aWF0ZWQgYnkgYQorIyBTeXN0ZW1EIHVzZXIgc2Vzc2lvbiB0aGlzIHdpbGwgaGF2ZSBiZWVuIHNldCBhbHJlYWR5LCBzbyBkb24ndCBvdmVyd3JpdGUgaXQuCisKK2lmIFsgLXogIiRYR0RfUlVOVElNRV9ESVIiIF07IHRoZW4KKwlYREdfUlVOVElNRV9ESVI9Ii90bXAiCisgICAgICAgIGV4cG9ydCBYREdfUlVOVElNRV9ESVIKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzg5eGRnYXV0b3N0YXJ0LnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC84OXhkZ2F1dG9zdGFydC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDcwMDhjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC84OXhkZ2F1dG9zdGFydC5zaApAQCAtMCwwICsxLDcgQEAKK1hER0FVVE9TVEFSVD0vZXRjL3hkZy9hdXRvc3RhcnQKK2lmIFsgLWQgJFhER0FVVE9TVEFSVCBdOyB0aGVuCisgICAgZm9yIFNDUklQVCBpbiAkWERHQVVUT1NUQVJULyo7IGRvCisgICAgICAgIENNRD1gZ3JlcCBeRXhlYz0gJFNDUklQVCB8IGN1dCAtZCAnPScgLWYgMmAKKyAgICAgICAgJENNRCAmCisgICAgZG9uZQorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvOTBYV2luZG93TWFuYWdlci5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvOTBYV2luZG93TWFuYWdlci5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTM2ZGVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC85MFhXaW5kb3dNYW5hZ2VyLnNoCkBAIC0wLDAgKzEsNyBAQAoraWYgWyAteCAkSE9NRS8uWHNlc3Npb24gXTsgdGhlbgorICAgIGV4ZWMgJEhPTUUvLlhzZXNzaW9uCitlbGlmIFsgLXggL3Vzci9iaW4veC1zZXNzaW9uLW1hbmFnZXIgXTsgdGhlbgorICAgIGV4ZWMgL3Vzci9iaW4veC1zZXNzaW9uLW1hbmFnZXIKK2Vsc2UKKyAgICBleGVjIC91c3IvYmluL3gtd2luZG93LW1hbmFnZXIKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9kZWZhdWx0Lnhtb2RtYXAgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9kZWZhdWx0Lnhtb2RtYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhMTNmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL2RlZmF1bHQueG1vZG1hcApAQCAtMCwwICsxLDI2MCBAQAora2V5Y29kZSAgIDggPQora2V5Y29kZSAgIDkgPSBFc2NhcGUKK2tleWNvZGUgIDEwID0gMSBleGNsYW0KK2tleWNvZGUgIDExID0gMiBhdAora2V5Y29kZSAgMTIgPSAzIG51bWJlcnNpZ24KK2tleWNvZGUgIDEzID0gNCBkb2xsYXIKK2tleWNvZGUgIDE0ID0gNSBwZXJjZW50CitrZXljb2RlICAxNSA9IDYgYXNjaWljaXJjdW0KK2tleWNvZGUgIDE2ID0gNyBhbXBlcnNhbmQgYnJhY2VsZWZ0CitrZXljb2RlICAxNyA9IDggYXN0ZXJpc2sgYnJhY2tldGxlZnQKK2tleWNvZGUgIDE4ID0gOSBwYXJlbmxlZnQgYnJhY2tldHJpZ2h0CitrZXljb2RlICAxOSA9IDAgcGFyZW5yaWdodCBicmFjZXJpZ2h0CitrZXljb2RlICAyMCA9IG1pbnVzIHVuZGVyc2NvcmUgYmFja3NsYXNoCitrZXljb2RlICAyMSA9IGVxdWFsIHBsdXMKK2tleWNvZGUgIDIyID0gQmFja1NwYWNlCitrZXljb2RlICAyMyA9IFRhYgora2V5Y29kZSAgMjQgPSBxIFEgcQora2V5Y29kZSAgMjUgPSB3IFcgdwora2V5Y29kZSAgMjYgPSBlIEUKK2tleWNvZGUgIDI3ID0gciBSIHIKK2tleWNvZGUgIDI4ID0gdCBUIHQKK2tleWNvZGUgIDI5ID0geSBZIHkKK2tleWNvZGUgIDMwID0gdSBVIHUKK2tleWNvZGUgIDMxID0gaSBJIGkKK2tleWNvZGUgIDMyID0gbyBPIG8KK2tleWNvZGUgIDMzID0gcCBQIHAKK2tleWNvZGUgIDM0ID0gYnJhY2tldGxlZnQgYnJhY2VsZWZ0CitrZXljb2RlICAzNSA9IGJyYWNrZXRyaWdodCBicmFjZXJpZ2h0IGFzY2lpdGlsZGUKK2tleWNvZGUgIDM2ID0gUmV0dXJuCitrZXljb2RlICAzNyA9IENvbnRyb2xfTAora2V5Y29kZSAgMzggPSBhIEEKK2tleWNvZGUgIDM5ID0gcyBTIHMKK2tleWNvZGUgIDQwID0gZCBECitrZXljb2RlICA0MSA9IGYgRgora2V5Y29kZSAgNDIgPSBnIEcgZwora2V5Y29kZSAgNDMgPSBoIEggaAora2V5Y29kZSAgNDQgPSBqIEogagora2V5Y29kZSAgNDUgPSBrIEsgawora2V5Y29kZSAgNDYgPSBsIEwgbAora2V5Y29kZSAgNDcgPSBzZW1pY29sb24gY29sb24KK2tleWNvZGUgIDQ4ID0gYXBvc3Ryb3BoZSBxdW90ZWRibAora2V5Y29kZSAgNDkgPSBncmF2ZSBhc2NpaXRpbGRlCitrZXljb2RlICA1MCA9IFNoaWZ0X0wKK2tleWNvZGUgIDUxID0gYmFja3NsYXNoIGJhcgora2V5Y29kZSAgNTIgPSB6IFogegora2V5Y29kZSAgNTMgPSB4IFggeAora2V5Y29kZSAgNTQgPSBjIEMKK2tleWNvZGUgIDU1ID0gdiBWIHYKK2tleWNvZGUgIDU2ID0gYiBCCitrZXljb2RlICA1NyA9IG4gTiBuCitrZXljb2RlICA1OCA9IG0gTSBtCitrZXljb2RlICA1OSA9IGNvbW1hIGxlc3MKK2tleWNvZGUgIDYwID0gcGVyaW9kIGdyZWF0ZXIKK2tleWNvZGUgIDYxID0gc2xhc2ggcXVlc3Rpb24KK2tleWNvZGUgIDYyID0gU2hpZnRfUgora2V5Y29kZSAgNjMgPSBLUF9NdWx0aXBseQora2V5Y29kZSAgNjQgPSBBbHRfTAora2V5Y29kZSAgNjUgPSBzcGFjZQora2V5Y29kZSAgNjYgPSBDYXBzX0xvY2sKK2tleWNvZGUgIDY3ID0gRjEgRjExCitrZXljb2RlICA2OCA9IEYyIEYxMgora2V5Y29kZSAgNjkgPSBGMyBGMTMKK2tleWNvZGUgIDcwID0gRjQgRjE0CitrZXljb2RlICA3MSA9IEY1IEYxNQora2V5Y29kZSAgNzIgPSBGNiBGMTYKK2tleWNvZGUgIDczID0gRjcgRjE3CitrZXljb2RlICA3NCA9IEY4IEYxOAora2V5Y29kZSAgNzUgPSBGOSBGMTkKK2tleWNvZGUgIDc2ID0gRjEwIEYyMAora2V5Y29kZSAgNzcgPSBOdW1fTG9jawora2V5Y29kZSAgNzggPSBTY3JvbGxfTG9jawora2V5Y29kZSAgNzkgPSBLUF83CitrZXljb2RlICA4MCA9IEtQXzgKK2tleWNvZGUgIDgxID0gS1BfOQora2V5Y29kZSAgODIgPSBLUF9TdWJ0cmFjdAora2V5Y29kZSAgODMgPSBLUF80CitrZXljb2RlICA4NCA9IEtQXzUKK2tleWNvZGUgIDg1ID0gS1BfNgora2V5Y29kZSAgODYgPSBLUF9BZGQKK2tleWNvZGUgIDg3ID0gS1BfMQora2V5Y29kZSAgODggPSBLUF8yCitrZXljb2RlICA4OSA9IEtQXzMKK2tleWNvZGUgIDkwID0gS1BfMAora2V5Y29kZSAgOTEgPSBLUF9EZWNpbWFsCitrZXljb2RlICA5MiA9CitrZXljb2RlICA5MyA9CitrZXljb2RlICA5NCA9IGxlc3MgZ3JlYXRlciBiYXIKK2tleWNvZGUgIDk1ID0gRjExCitrZXljb2RlICA5NiA9IEYxMgora2V5Y29kZSAgOTcgPQora2V5Y29kZSAgOTggPQora2V5Y29kZSAgOTkgPQora2V5Y29kZSAxMDAgPQora2V5Y29kZSAxMDEgPQora2V5Y29kZSAxMDIgPQora2V5Y29kZSAxMDMgPQora2V5Y29kZSAxMDQgPSBLUF9FbnRlcgora2V5Y29kZSAxMDUgPSBDb250cm9sX1IKK2tleWNvZGUgMTA2ID0gS1BfRGl2aWRlCitrZXljb2RlIDEwNyA9CitrZXljb2RlIDEwOCA9IE1vZGVfc3dpdGNoCitrZXljb2RlIDEwOSA9IEJyZWFrCitrZXljb2RlIDExMCA9IEhvbWUKK2tleWNvZGUgMTExID0gVXAKK2tleWNvZGUgMTEyID0gUHJpb3IKK2tleWNvZGUgMTEzID0gTGVmdAora2V5Y29kZSAxMTQgPSBSaWdodAora2V5Y29kZSAxMTUgPSBFbmQKK2tleWNvZGUgMTE2ID0gRG93bgora2V5Y29kZSAxMTcgPSBOZXh0CitrZXljb2RlIDExOCA9IEluc2VydAora2V5Y29kZSAxMTkgPSBEZWxldGUKK2tleWNvZGUgMTIwID0gTWVudQora2V5Y29kZSAxMjEgPSBGMTMKK2tleWNvZGUgMTIyID0gRjE0CitrZXljb2RlIDEyMyA9IEhlbHAKK2tleWNvZGUgMTI0ID0gRXhlY3V0ZQora2V5Y29kZSAxMjUgPSBGMTcKK2tleWNvZGUgMTI2ID0gS1BfU3VidHJhY3QKK2tleWNvZGUgMTI3ID0gUGF1c2UKK2tleWNvZGUgMTI4ID0KK2tleWNvZGUgMTI5ID0KK2tleWNvZGUgMTMwID0KK2tleWNvZGUgMTMxID0KK2tleWNvZGUgMTMyID0KK2tleWNvZGUgMTMzID0KK2tleWNvZGUgMTM0ID0KK2tleWNvZGUgMTM1ID0KK2tleWNvZGUgMTM2ID0KK2tleWNvZGUgMTM3ID0KK2tleWNvZGUgMTM4ID0KK2tleWNvZGUgMTM5ID0KK2tleWNvZGUgMTQwID0KK2tleWNvZGUgMTQxID0KK2tleWNvZGUgMTQyID0KK2tleWNvZGUgMTQzID0KK2tleWNvZGUgMTQ0ID0KK2tleWNvZGUgMTQ1ID0KK2tleWNvZGUgMTQ2ID0KK2tleWNvZGUgMTQ3ID0KK2tleWNvZGUgMTQ4ID0KK2tleWNvZGUgMTQ5ID0KK2tleWNvZGUgMTUwID0KK2tleWNvZGUgMTUxID0KK2tleWNvZGUgMTUyID0KK2tleWNvZGUgMTUzID0KK2tleWNvZGUgMTU0ID0KK2tleWNvZGUgMTU1ID0KK2tleWNvZGUgMTU2ID0KK2tleWNvZGUgMTU3ID0KK2tleWNvZGUgMTU4ID0KK2tleWNvZGUgMTU5ID0KK2tleWNvZGUgMTYwID0KK2tleWNvZGUgMTYxID0KK2tleWNvZGUgMTYyID0KK2tleWNvZGUgMTYzID0KK2tleWNvZGUgMTY0ID0KK2tleWNvZGUgMTY1ID0KK2tleWNvZGUgMTY2ID0KK2tleWNvZGUgMTY3ID0KK2tleWNvZGUgMTY4ID0KK2tleWNvZGUgMTY5ID0KK2tleWNvZGUgMTcwID0KK2tleWNvZGUgMTcxID0KK2tleWNvZGUgMTcyID0KK2tleWNvZGUgMTczID0KK2tleWNvZGUgMTc0ID0KK2tleWNvZGUgMTc1ID0KK2tleWNvZGUgMTc2ID0KK2tleWNvZGUgMTc3ID0KK2tleWNvZGUgMTc4ID0KK2tleWNvZGUgMTc5ID0KK2tleWNvZGUgMTgwID0KK2tleWNvZGUgMTgxID0KK2tleWNvZGUgMTgyID0KK2tleWNvZGUgMTgzID0KK2tleWNvZGUgMTg0ID0KK2tleWNvZGUgMTg1ID0KK2tleWNvZGUgMTg2ID0KK2tleWNvZGUgMTg3ID0KK2tleWNvZGUgMTg4ID0KK2tleWNvZGUgMTg5ID0KK2tleWNvZGUgMTkwID0KK2tleWNvZGUgMTkxID0KK2tleWNvZGUgMTkyID0KK2tleWNvZGUgMTkzID0KK2tleWNvZGUgMTk0ID0KK2tleWNvZGUgMTk1ID0KK2tleWNvZGUgMTk2ID0KK2tleWNvZGUgMTk3ID0KK2tleWNvZGUgMTk4ID0KK2tleWNvZGUgMTk5ID0KK2tleWNvZGUgMjAwID0KK2tleWNvZGUgMjAxID0KK2tleWNvZGUgMjAyID0KK2tleWNvZGUgMjAzID0KK2tleWNvZGUgMjA0ID0KK2tleWNvZGUgMjA1ID0KK2tleWNvZGUgMjA2ID0KK2tleWNvZGUgMjA3ID0KK2tleWNvZGUgMjA4ID0KK2tleWNvZGUgMjA5ID0KK2tleWNvZGUgMjEwID0KK2tleWNvZGUgMjExID0KK2tleWNvZGUgMjEyID0KK2tleWNvZGUgMjEzID0KK2tleWNvZGUgMjE0ID0KK2tleWNvZGUgMjE1ID0KK2tleWNvZGUgMjE2ID0KK2tleWNvZGUgMjE3ID0KK2tleWNvZGUgMjE4ID0KK2tleWNvZGUgMjE5ID0KK2tleWNvZGUgMjIwID0KK2tleWNvZGUgMjIxID0KK2tleWNvZGUgMjIyID0KK2tleWNvZGUgMjIzID0KK2tleWNvZGUgMjI0ID0KK2tleWNvZGUgMjI1ID0KK2tleWNvZGUgMjI2ID0KK2tleWNvZGUgMjI3ID0KK2tleWNvZGUgMjI4ID0KK2tleWNvZGUgMjI5ID0KK2tleWNvZGUgMjMwID0KK2tleWNvZGUgMjMxID0KK2tleWNvZGUgMjMyID0KK2tleWNvZGUgMjMzID0KK2tleWNvZGUgMjM0ID0KK2tleWNvZGUgMjM1ID0KK2tleWNvZGUgMjM2ID0KK2tleWNvZGUgMjM3ID0KK2tleWNvZGUgMjM4ID0KK2tleWNvZGUgMjM5ID0KK2tleWNvZGUgMjQwID0KK2tleWNvZGUgMjQxID0KK2tleWNvZGUgMjQyID0KK2tleWNvZGUgMjQzID0KK2tleWNvZGUgMjQ0ID0KK2tleWNvZGUgMjQ1ID0KK2tleWNvZGUgMjQ2ID0KK2tleWNvZGUgMjQ3ID0KK2tleWNvZGUgMjQ4ID0KK2tleWNvZGUgMjQ5ID0KK2tleWNvZGUgMjUwID0KK2tleWNvZGUgMjUxID0KK2tleWNvZGUgMjUyID0KK2tleWNvZGUgMjUzID0KK2tleWNvZGUgMjU0ID0KKworYWRkIHNoaWZ0ID0gU2hpZnRfTAorYWRkIHNoaWZ0ID0gU2hpZnRfUgorYWRkIHNoaWZ0ID0gTWVudQorYWRkIGxvY2sgPSBDYXBzX0xvY2sKK2FkZCBjb250cm9sID0gQ29udHJvbF9MCithZGQgY29udHJvbCA9IENvbnRyb2xfUgorYWRkIG1vZDEgPSBBbHRfTAorYWRkIG1vZDIgPSBOdW1fTG9jaworIW1vZDMgICAgICAKK2FkZCBtb2Q0ID0gTW9kZV9zd2l0Y2gKKyFtb2Q1ICAgICAgCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ncGx2Mi1saWNlbnNlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2dwbHYyLWxpY2Vuc2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZmOTc1ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ncGx2Mi1saWNlbnNlLnBhdGNoCkBAIC0wLDAgKzEsMzU1IEBACitDT1BZSU5HOiBhZGQgR1BMdjIgbGljZW5zZSBmaWxlCisKK3RoaXMgaXMgYSBsb2NhbCBmaWxlIHJlY2lwZSBhbmQgdGhlIGxpY2Vuc2UgZmlsZSBpcyBtaXNzaW5nLkluIG9yZGVyCit0byBwYXNzIHRoZSBsaWNlbnNlIGNoZWNrc3VtIGNoZWNraW5nLCB0aGUgbGljZW5zZSBmaWxlIGlzIG5lZWRlZC4gU28KK3RoaXMgcGF0Y2ggYWRkIHRoZSBHUEx2MiBsaWNlbnNlIGZpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitTaWduZWQtb2ZmLWJ5OiBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kNTExOTA1CistLS0gL2Rldi9udWxsCisrKysgYi9DT1BZSU5HCitAQCAtMCwwICsxLDMzOSBAQAorKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKysKKysgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKysgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKysgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisrCisrCQkJICAgIFByZWFtYmxlCisrCisrICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCisrZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKytMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCisrc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKKytHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KKyt1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5CisrdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KKyt5b3VyIHByb2dyYW1zLCB0b28uCisrCisrICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CisrcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQorK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKKyt0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKKytpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAorK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKysKKysgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKKythbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCisrVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKKytkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisrCisrICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCisrZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0CisreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKKytzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCisrcmlnaHRzLgorKworKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCisrZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKysKKysgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCisrdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKKytzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKKyt3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbworK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCisrYXV0aG9ycycgcmVwdXRhdGlvbnMuCisrCisrICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKKytwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCisrcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CisrcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKysKKysgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCisrbW9kaWZpY2F0aW9uIGZvbGxvdy4KKysKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorKworKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCisrdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6CisrdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKKytlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KKyt0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKysKKytBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKKytydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCisraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorKworKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCisrc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CisrY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKKytub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CisrYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisrCisrWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCisreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKysKKysgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KKytvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCisrZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCisrYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKysKKysgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisrICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisrCisrICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKysgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKysgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisrICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKysgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKysgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisrICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKysgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKysgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKysgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKysKKytUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCisraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKKythbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KKyt0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCisrc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CisrZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCisrb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCisrdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKKytlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisrCisrVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CisreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCisrZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCisrY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKysKKytJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCisrd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCisrYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKKyt0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCisrdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCisrU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorKworKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisrICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKysgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKysgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisrICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisrICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKysgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKysgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKysgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKysKKytUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCisrbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKKytjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKKytzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKKythbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCisrb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKKytpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisrCisrSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKKythY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKKytkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKKytjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorKworKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisrZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcworK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KKytIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgorK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCisrcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorKworKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90Cisrc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKKytkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKKytwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5CisrbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKKythbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCisrdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisrCisrICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKKytvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCisrdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKKytyZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisrWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KKyt0aGlzIExpY2Vuc2UuCisrCisrICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CisraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKKytjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCisrb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CisrZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKKyttYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CisrbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgorK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KKytyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorKworK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KKythcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorK2NpcmN1bXN0YW5jZXMuCisrCisrSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55Cisrc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQorK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKKyt0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKKyt0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKKytpbXBvc2UgdGhhdCBjaG9pY2UuCisrCisrVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCisrYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKKyttYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKKyt0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCisrY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCisrdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorKworK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KKytzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKytlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKKyt0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbi4KKysKKysgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKKytwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCisrdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCisrbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKKytvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCisrb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisrCisrCQkJICAgIE5PIFdBUlJBTlRZCisrCisrICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKKytGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KKytPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCisrUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKKytPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKKytUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCisrUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCisrUkVQQUlSIE9SIENPUlJFQ1RJT04uCisrCisrICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCisrV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCisrSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCisrT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCisrUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCisrUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorKworKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKysKKysJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworKworKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKKytmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKysKKysgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CisrdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CisrdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisrCisrICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisrICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisrCisrSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcworK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisrCisrICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisrICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKysgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorKworK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKKytiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKKyttb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorKworK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCisrc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKKytuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisrCisrICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisrICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKysKKysgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKysKKytUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KKytwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisrUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb25fMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTZiMzI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uXzAuMS5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkNvbW1vbiBYMTEgc2NyaXB0cyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKK1NFQ1RJT04gPSAieDExIgorUFIgPSAicjQ3IgorCitpbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyByZGVwZW5kcyBvbiB4ZHlwaW5mbyB4bW9kbWFwIHhpbml0CitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTUkNfVVJJID0gImZpbGU6Ly9ldGMgXAorICAgICAgICAgICBmaWxlOi8vZ3BsdjItbGljZW5zZS5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWNwIC1SICR7U30vZXRjICR7RH0ke3N5c2NvbmZkaXJ9CisJY2htb2QgLVIgNzU1ICR7RH0ke3N5c2NvbmZkaXJ9CisJZmluZCAke0R9JHtzeXNjb25mZGlyfSAtdHlwZSBmIC1uYW1lIFwqfiAtZXhlYyBybSAtcmYge30gXDsKK30KKworUkRFUEVORFNfJHtQTn0gPSAiZGJ1cy14MTEgeG1vZG1hcCB4ZHB5aW5mbyB4dHNjYWwgeGluaXQgZm9ybWZhY3RvciIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY4ZDQwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJTaW1wbGUgWHNlcnZlciBJbml0IFNjcmlwdCAobm8gZG0pIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorU0VDVElPTiA9ICJ4MTEiCitQUiA9ICJyMzEiCisKK1NSQ19VUkkgPSAiZmlsZTovL3hzZXJ2ZXItbm9kbSBcCisgICAgICAgICAgIGZpbGU6Ly9YdXNlcm5hbWUgXAorICAgICAgICAgICBmaWxlOi8vZ3BsdjItbGljZW5zZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly94c2VydmVyLW5vZG0uc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly94c2VydmVyLW5vZG0uY29uZiBcCisiCisKK1MgPSAiJHtXT1JLRElSfSIKKworIyBTaW5jZSB3ZSByZWZlciB0byBST09UTEVTU19YIHdoaWNoIGlzIG5vcm1hbGx5IGVuYWJsZWQgcGVyLW1hY2hpbmUKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK2luaGVyaXQgdXBkYXRlLXJjLmQgc3lzdGVtZAorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisgICAgaW5zdGFsbCB4c2VydmVyLW5vZG0gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisKKyAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorICAgICAgICBpbnN0YWxsIHhzZXJ2ZXItbm9kbS5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQveHNlcnZlci1ub2RtCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0veHNlcnZlci1ub2RtLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKyAgICAgICAgaWYgWyAiJHtST09UTEVTU19YfSIgPSAiMSIgXSA7IHRoZW4KKyAgICAgICAgICAgIHNlZCAtaSAncyFeSE9NRT0uKiFIT01FPS9ob21lL3h1c2VyIScgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC94c2VydmVyLW5vZG0KKyAgICAgICAgICAgIHNlZCAtaSAncyFeVXNlcj0uKiFVc2VyPXh1c2VyIScgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0veHNlcnZlci1ub2RtLnNlcnZpY2UKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2VkIC1pICdzIV5IT01FPS4qIUhPTUU9JHtST09UX0hPTUV9IScgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC94c2VydmVyLW5vZG0KKyAgICAgICAgICAgIHNlZCAtaSAnL15Vc2VyPS9kJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS94c2VydmVyLW5vZG0uc2VydmljZQorICAgICAgICBmaQorICAgIGZpCisKKyAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdmluaXQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorICAgICAgICBpZiBbICIke1JPT1RMRVNTX1h9IiA9ICIxIiBdIDsgdGhlbgorICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9YMTEKKyAgICAgICAgICAgIGluc3RhbGwgWHVzZXJuYW1lICR7RH0ke3N5c2NvbmZkaXJ9L1gxMQorICAgICAgICBmaQorICAgIGZpCit9CisKK1JERVBFTkRTXyR7UE59ID0gIiR7QGJhc2VfY29uZGl0aW9uYWwoJ1JPT1RMRVNTX1gnLCAnMScsICd4dXNlci1hY2NvdW50JywgJycsIGQpfSIKKworSU5JVFNDUklQVF9OQU1FID0gInhzZXJ2ZXItbm9kbSIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDkgNSAuIHN0b3AgMjAgMCAxIDIgMyA2IC4iCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAieHNlcnZlci1ub2RtLnNlcnZpY2UiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQvWHVzZXJuYW1lIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC9YdXNlcm5hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2MGU1ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQvWHVzZXJuYW1lCkBAIC0wLDAgKzEgQEAKK3h1c2VyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L2dwbHYyLWxpY2Vuc2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L2dwbHYyLWxpY2Vuc2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZmOTc1ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQvZ3BsdjItbGljZW5zZS5wYXRjaApAQCAtMCwwICsxLDM1NSBAQAorQ09QWUlORzogYWRkIEdQTHYyIGxpY2Vuc2UgZmlsZQorCit0aGlzIGlzIGEgbG9jYWwgZmlsZSByZWNpcGUgYW5kIHRoZSBsaWNlbnNlIGZpbGUgaXMgbWlzc2luZy5JbiBvcmRlcgordG8gcGFzcyB0aGUgbGljZW5zZSBjaGVja3N1bSBjaGVja2luZywgdGhlIGxpY2Vuc2UgZmlsZSBpcyBuZWVkZWQuIFNvCit0aGlzIHBhdGNoIGFkZCB0aGUgR1BMdjIgbGljZW5zZSBmaWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworU2lnbmVkLW9mZi1ieTogWXUgS2UgPGtlLnl1QGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDUxMTkwNQorLS0tIC9kZXYvbnVsbAorKysrIGIvQ09QWUlORworQEAgLTAsMCArMSwzMzkgQEAKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisrCisrIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisrIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorKworKwkJCSAgICBQcmVhbWJsZQorKworKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCisrTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCisrR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCisrdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQorK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCisreW91ciBwcm9ncmFtcywgdG9vLgorKworKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKKytoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCisrdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CisraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKKytpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisrCisrICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCisrYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CisrZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorKworKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAorK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCisrc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorK3JpZ2h0cy4KKysKKysgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKysoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisrCisrICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgorK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCisrc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCisrd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KKyt0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorKworKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKKytwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCisrcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisrCisrICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorK21vZGlmaWNhdGlvbiBmb2xsb3cuCisrCisrCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKysgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKysKKysgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKKythIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAorK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKKytyZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKKyttZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgorK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCisrZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKKytsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCisrdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisrCisrQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKKytjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCisrcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQorK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KKytXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKysKKysgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKKytjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCisrbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKKythbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorKworK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAorK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisrCisrICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCisrb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisrCisrICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorKworKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKysgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisrICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisrICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKysKKysgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisrICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKysgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisrICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisrICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisrICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisrICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKysgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisrCisrVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgorK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCisrYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCisrdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgorK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCisrZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorKworK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAorK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisrCisrSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQorK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCisrdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAorK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKysKKysgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKysgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisrICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisrICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKysgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisrICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisrICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisrICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKysgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisrCisrVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCisrY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKKythc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KKytjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCisrc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCisrYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKKytmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CisraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorKworK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKKythY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CisrYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCisrZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CisrY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKysKKysgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKKytvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKKyt2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCisrSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKKyt0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKysKKysgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCisrZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCisrcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCisrYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZworK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorKworKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCisrb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bworK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCisrcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCisrdGhpcyBMaWNlbnNlLgorKworKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAorK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCisrY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKKytleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKKytMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CisrbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKKythbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KKyt0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCisrcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKysKKytJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKKythbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCisrYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKKytjaXJjdW1zdGFuY2VzLgorKworK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKKytwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKKytpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKKytpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKKytnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCisrdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKKytzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCisrdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CisraW1wb3NlIHRoYXQgY2hvaWNlLgorKworK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KKytjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKKytvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCisrbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCisrdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcworK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKKytvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKKytiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KKythZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKysKKytFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCisrc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKKytsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCisrZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCisrdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24uCisrCisrICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCisrcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgorK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCisrb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorKworKwkJCSAgICBOTyBXQVJSQU5UWQorKworKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCisrRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCisrT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECisrT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCisrVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorKworKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKKytSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKKytUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKKytZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKysKKysJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisrCisrCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKysKKysgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKKytwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CisrZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisrCisrICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAorK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKKytjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAorK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorKworKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorKworK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorKworK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKKyt3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorKworKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKysgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisrICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKysKKytUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKKytwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CisrYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCisrbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKysKKytZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCisrbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorKworKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisrCisrICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKysgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisrCisrVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCisrcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKKytjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKKytsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZmEwYThkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0KQEAgLTAsMCArMSw2NSBAQAorIyEvYmluL3NoCisjCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiB4c2VydmVyCisjIFJlcXVpcmVkLVN0YXJ0OiAkbG9jYWxfZnMgJHJlbW90ZV9mcyBkYnVzCisjIFJlcXVpcmVkLVN0b3A6ICRsb2NhbF9mcyAkcmVtb3RlX2ZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgMiAzIDYKKyMjIyBFTkQgSU5JVCBJTkZPCisKK2tpbGxwcm9jKCkgeyAgICAgICAgICAgICMga2lsbCB0aGUgbmFtZWQgcHJvY2VzcyhlcykKKyAgICAgICAgcGlkPWAvYmluL3BpZG9mICQxYAorICAgICAgICBbICIkcGlkIiAhPSAiIiBdICYmIGtpbGwgJHBpZAorfQorCityZWFkIENNRExJTkUgPCAvcHJvYy9jbWRsaW5lCitmb3IgeCBpbiAkQ01ETElORTsgZG8KKyAgICAgICAgY2FzZSAkeCBpbgorICAgICAgICB4MTE9ZmFsc2UpCisJCWVjaG8gIlggU2VydmVyIGRpc2FibGVkIiAKKwkJZXhpdCAwOworICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKK2RvbmUKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgICAgIC4gL2V0Yy9wcm9maWxlCisgICAgICAgdXNlcm5hbWU9cm9vdAorICAgICAgIGVjaG8gIlN0YXJ0aW5nIFhzZXJ2ZXIiCisgICAgICAgaWYgWyAtZiAvZXRjL1gxMS9YdXNlcm5hbWUgXTsgdGhlbgorICAgICAgICAgICB1c2VybmFtZT1gY2F0IC9ldGMvWDExL1h1c2VybmFtZWAKKyAgICAgICAgICAgIyBzZXR0aW5nIGZvciByb290bGVzcyBYCisgICAgICAgICAgIGNobW9kIG8rdyAvdmFyL2xvZworICAgICAgICAgICBjaG1vZCBnK3IgL2Rldi90dHlbMC0zXQorICAgICAgICAgICAjIGhpZHJhdyBkZXZpY2UgaXMgcHJvYmFibHkgbmVlZGVkCisgICAgICAgICAgIGlmIFsgLWUgL2Rldi9oaWRyYXcwIF07IHRoZW4KKyAgICAgICAgICAgICAgIGNobW9kIG8rcncgL2Rldi9oaWRyYXcqCisgICAgICAgICAgIGZpCisgICAgICAgZmkKKyAgICAgICAjIFVzaW5nIHN1IHJhdGhlciB0aGFuIHN1ZG8gYXMgbGF0ZXN0IDEuOC4xIGNhdXNlIGZhaWx1cmUgW1lPQ1RPICMxMjExXQorICAgICAgIHN1IC1sIC1jICcvZXRjL1gxMS9Yc2VydmVyJicgJHVzZXJuYW1lIAorICAgICAgICMgV2FpdCBmb3IgdGhlIGRlc2t0b3AgdG8gc2F5IGl0cyBmaW5pc2hlZCBsb2FkaW5nCisgICAgICAgIyBiZWZvcmUgbG9hZGluZyB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtCisgICAgICAgIyBkYnVzLXdhaXQgb3JnLm1hdGNoYm94X3Byb2plY3QuZGVza3RvcCBMb2FkZWQKKyAgOzsKKworICBzdG9wKQorICAgICAgICBlY2hvICJTdG9wcGluZyBYU2VydmVyIgorICAgICAgICBraWxscHJvYyB4aW5pdAorICAgICAgICBzbGVlcCAxCisgICAgICAgIGNodnQgMSAmCisgIDs7CisKKyAgcmVzdGFydCkKKwkkMCBzdG9wCisgICAgICAgICQwIHN0YXJ0CisgIDs7CisKKyAgKikKKyAgICAgICAgZWNobyAidXNhZ2U6ICQwIHsgc3RhcnQgfCBzdG9wIHwgcmVzdGFydCB9IgorICA7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMDU4MmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbS5jb25mCkBAIC0wLDAgKzEgQEAKK0hPTUU9L2hvbWUvcm9vdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJkOTc5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLnNlcnZpY2UKQEAgLTAsMCArMSwxMCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1Yc2VydmVyIHN0YXJ0dXAgd2l0aG91dCBhIGRpc3BsYXkgbWFuYWdlcgorCitbU2VydmljZV0KK1VzZXI9cm9vdAorRW52aXJvbm1lbnRGaWxlPS9ldGMvZGVmYXVsdC94c2VydmVyLW5vZG0KK0V4ZWNTdGFydD0vZXRjL1gxMS9Yc2VydmVyCisKK1tJbnN0YWxsXQorQWxpYXM9ZGlzcGxheS1tYW5hZ2VyLnNlcnZpY2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy9maWxlcy9lbmRpYW4tZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL2ZpbGVzL2VuZGlhbi1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhNTM4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy9maWxlcy9lbmRpYW4tZml4LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2xpYnZuY3NlcnZlcjogcmVwbGFjZSBMSUJWTkNTRVJWRVJfV09SRFNfQklHRU5ESUFOIHdpdGggV09SRFNfQklHRU5ESUFOCisKK3NpbmNlIG1hY3JvIEFDX0NfQklHRU5ESUFOIGlzIHVzZWQgaW4gYXV0b2NvbmYgYW5kIFdPUkRTX0JJR0VORElBTiBpcworYXV0b21hdGljYWxseSBzZXQgZm9yIGRpZmZlcmVudCBhcmNoLCBpdCBpcyBiZXR0ZXIgdG8gdXNlIFdPUkRTX0JJR0VORElBTgoraW5zdGVhZCBvZiBMSUJWTkNTRVJWRVJfV09SRFNfQklHRU5ESUFOLCB3aGljaCBjdWFzZSBpc3N1ZSBpbiBtaXBzLgorCitTaWduZWQtb2ZmLWJ5OiBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtLWdpdCBhL2xpYnZuY3NlcnZlci9tYWluLmMgYi9saWJ2bmNzZXJ2ZXIvbWFpbi5jCitpbmRleCBiNmJkOTMwLi44YmJiN2JmIDEwMDY0NAorLS0tIGEvbGlidm5jc2VydmVyL21haW4uYworKysrIGIvbGlidm5jc2VydmVyL21haW4uYworQEAgLTQ3LDcgKzQ3LDcgQEAgc3RhdGljIE1VVEVYKGV4dE11dGV4KTsKKyAKKyBzdGF0aWMgaW50IHJmYkVuYWJsZUxvZ2dpbmc9MTsKKyAKKy0jaWZkZWYgTElCVk5DU0VSVkVSX1dPUkRTX0JJR0VORElBTgorKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyBjaGFyIHJmYkVuZGlhblRlc3QgPSAoMT09MCk7CisgI2Vsc2UKKyBjaGFyIHJmYkVuZGlhblRlc3QgPSAoMT09MSk7CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy9maWxlcy9zdGFydGluZy1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTF2bmMvZmlsZXMvc3RhcnRpbmctZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MmU0MDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTF2bmMvZmlsZXMvc3RhcnRpbmctZml4LnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKKyItZ3VpIiAmICItcmZicG9ydCIgcmVxdWlyZSAid2lzaCIgaW5zdGFsbGVkLCBvciBlbHNlIHgxMXZuYyBmYWlscyB0byBzdGFydC4KK1JlbW92aW5nIHRoZXNlIDIgcGFyYW1ldGVycyBtYWtlcyB4MTF2bmMgd29ya3Mgd2VsbCBvbiBwb2t5IHNhdG8gaW1hZ2UuCisKK0FkZCBhbHNvIC1za2lwX2xvY2trZXlzIG9wdGlvbiB0byBpZ25vcmUgYWxsIENhcHNfTG9jaywgU2hpZnRfTG9jaywgTnVtX0xvY2ssCitTY3JvbGxfTG9jayBrZXlzeW1zIHJlY2VpdmVkIGZyb20gdmlld2VycywgaW4gb3JkZXIgdG8gbGVhdmUgdGhlIGxvY2sgc3RhdGUgb24KK3RoZSBzZXJ2ZXIgc2lkZSB1bmNoYW5nZWQuIFlldCwgdGhlIGtleXMgd2lsbCBhcHBlYXIgY29ycmVjdGx5LgorCitTaWduZWQtb2ZmLWJ5OiBaaGFpIEVkd2luIDxlZHdpbi56aGFpQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogeDExdm5jLTAuOS4xMi94MTF2bmMveDExdm5jLmRlc2t0b3AKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4MTF2bmMtMC45LjEyLm9yaWcveDExdm5jL3gxMXZuYy5kZXNrdG9wCTIwMTEtMDMtMDMgMTA6MzM6MTguMDAwMDAwMDAwICswODAwCisrKysgeDExdm5jLTAuOS4xMi94MTF2bmMveDExdm5jLmRlc2t0b3AJMjAxMS0wMy0wMyAxMDozNToyMC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xLDcgKzEsNyBAQAorIFtEZXNrdG9wIEVudHJ5XQorIE5hbWU9WDExVk5DIFNlcnZlcgorIENvbW1lbnQ9U2hhcmUgdGhpcyBkZXNrdG9wIGJ5IFZOQworLUV4ZWM9eDExdm5jIC1ndWkgdHJheT1zZXRwYXNzIC1yZmJwb3J0IFBST01QVCAtYmcgLW8gJSVIT01FLy54MTF2bmMubG9nLiUlVk5DRElTUExBWQorK0V4ZWM9eDExdm5jIC1iZyAtcmZicG9ydCA1OTAwIC1za2lwX2xvY2trZXlzIC1vICUlSE9NRS8ueDExdm5jLmxvZy4lJVZOQ0RJU1BMQVkKKyBJY29uPWNvbXB1dGVyCisgVGVybWluYWw9ZmFsc2UKKyBUeXBlPUFwcGxpY2F0aW9uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTF2bmMveDExdm5jXzAuOS4xMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy94MTF2bmNfMC45LjEzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMDI0MWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTF2bmMveDExdm5jXzAuOS4xMy5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIkV4cG9ydHMgeW91ciBYIHNlc3Npb24gb24tdGhlLWZseSB2aWEgVk5DIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5rYXJscnVuZ2UuY29tL3gxMXZuYy8iCisKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorQVVUSE9SID0gIkthcmwgUnVuZ2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTM2MWI2YjgzN2NhZDI2YzY5MDBhOTI2YjYyYWFkYTVmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3gxMXZuYy94MTF2bmMuaDtlbmRsaW5lPTMzO21kNT02Zjk1ZGM2NTM1NDY3ZDdlZTE1NjNmZDQzNGZiMzcyZSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbGlidm5jc2VydmVyL3gxMXZuYy8ke1BWfS94MTF2bmMtJHtQVn0udGFyLmd6XAorICAgICAgICAgICBmaWxlOi8vc3RhcnRpbmctZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2VuZGlhbi1maXgucGF0Y2ggIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTM3MmVjNGZlODIxMTIyMTU0N2IxYzEwOGNmNTZlNGMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjY4MjlmMmU2Mjk2NjdhNTI4NGRlNjJiMDgwYjEzMTI2YTA3MzY0OTlmZTQ3Y2RiNDQ3YWVkYjA3YTU5ZjEzYiIKKworREVQRU5EUyA9ICJvcGVuc3NsIHZpcnR1YWwvbGlieDExIGxpYnhleHQganBlZyB6bGliIGxpYnhmaXhlcyBsaWJ4cmFuZHIgbGlieGRhbWFnZSBsaWJ4dHN0IgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3plcm9jb25mJywgJ2F2YWhpJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbYXZhaGldID0gIi0td2l0aC1hdmFoaSwtLXdpdGhvdXQtYXZhaGksYXZhaGkiCitQQUNLQUdFQ09ORklHW3hpbmVyYW1hXSA9ICItLXdpdGgteGluZXJhbWEsLS13aXRob3V0LXhpbmVyYW1hLGxpYnhpbmVyYW1hIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xL2ZpeF93YXRjaF9jdXJzb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvZml4X3dhdGNoX2N1cnNvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmFjNTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xL2ZpeF93YXRjaF9jdXJzb3IucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorRml4IHR5cG8gaW4gTWFrZWZpbGUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xL2N1cnNvcnMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xLm9yaWcvY3Vyc29ycy9NYWtlZmlsZS5hbQkyMDEzLTAzLTA3IDIyOjI1OjA0LjAwMTQzNTMwNSArMDAwMAorKysrIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvY3Vyc29ycy9NYWtlZmlsZS5hbQkyMDEzLTAzLTA3IDIyOjI1OjA0LjA2MTQzNTMwMiArMDAwMAorQEAgLTc5LDcgKzc5LDcgQEAKKyAJdWxfYW5nbGUgXAorIAl1cl9hbmdsZSBcCisgCXZfZG91YmxlX2Fycm93IFwKKy0Jd2F0Y2hhIFwKKysJd2F0Y2ggXAorIAl4dGVybSAgCisgCisgQ1VSU09SX0RJUiA9ICQoZGF0YWRpcikvaWNvbnMveGN1cnNvci10cmFuc3BhcmVudC9jdXJzb3JzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvdXNlLXJlbGF0aXZlLXN5bWxpbmtzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xL3VzZS1yZWxhdGl2ZS1zeW1saW5rcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDI4ZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xL3VzZS1yZWxhdGl2ZS1zeW1saW5rcy5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVc2UgcmVsYXRpdmUgc3ltbGluayBmb3IgbGluayByYXRoZXIgdGhhbiBhYnNvbHV0ZSBwYXRoIHdoaWNoIAorZG9lc24ndCB3b3JrIHdlbGwgaW4gREVTVERJUiBzZXR0aW5nLgorCitBbHNvIGZpeCBvdXQgb2YgdHJlZSBidWlsZHMgdG8gdXNlIGNvcnJlY3Qgc3JjZGlyLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMy8zLzgKKworSW5kZXg6IHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvY3Vyc29ycy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEub3JpZy9jdXJzb3JzL01ha2VmaWxlLmFtCTIwMTMtMDMtMDcgMjI6MjU6MDMuOTMzNDM1MzA3ICswMDAwCisrKysgeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS9jdXJzb3JzL01ha2VmaWxlLmFtCTIwMTMtMDMtMDcgMjI6MjU6MjcuMjkzNDM0NzU1ICswMDAwCitAQCAtODgsOSArODgsOSBAQAorIAorIGluc3RhbGwtZGF0YS1sb2NhbDoKKyAJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChDVVJTT1JfRElSKTsgCistCSQoSU5TVEFMTF9EQVRBKSAkKENVUlNPUl9SRUFMKSAkKERFU1RESVIpJChDVVJTT1JfRElSKS8gCisrCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJChDVVJTT1JfUkVBTCkgJChERVNURElSKSQoQ1VSU09SX0RJUikvCisgCWZvciBDVVJTT1IgaW4gJChDVVJTT1JfTkFNRVMpOyBkbyBcCisgCQllY2hvICctLSBJbnN0YWxsaW5nIGN1cnNvciAnJCRDVVJTT1I7IFwKKy0JCWxuIC1zICQoREVTVERJUikkKENVUlNPUl9ESVIpL3RyYW5zcCAkKERFU1RESVIpJChDVVJTT1JfRElSKS8kJENVUlNPUjsgXAorKwkJbG4gLXMgdHJhbnNwICQoREVTVERJUikkKENVUlNPUl9ESVIpLyQkQ1VSU09SOyBcCisgCWRvbmUKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUveGN1cnNvci10cmFuc3BhcmVudC10aGVtZV8wLjEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUveGN1cnNvci10cmFuc3BhcmVudC10aGVtZV8wLjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTY2OGFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiVHJhbnNwYXJlbnQgWDExIGN1cnNvciB0aGVtZSBmb3IgdG91Y2hzY3JlZW5zIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitTRUNUSU9OID0gIngxMS9iYXNlIgorUFIgPSAicjQiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL21hdGNoYm94L3V0aWxzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtJHtQVn0udGFyLmd6IFwKKwkgICBmaWxlOi8vdXNlLXJlbGF0aXZlLXN5bWxpbmtzLnBhdGNoIFwKKwkgICBmaWxlOi8vZml4X3dhdGNoX2N1cnNvci5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjdiMGM2MjMwNDlkNGFhYjIwNjAwZDY0NzNmOGFhYjIzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImIyNmFkZjJkNTAzZDAxMjk5NzE4MzkwYWUzOWRhYjQ2OTFhNjcyMjBkZTA5NDIzYmUwMzY0ZTlhMDYwYmY3ZTQiCitGSUxFU18ke1BOfSA9ICIke2RhdGFkaXJ9L2ljb25zL3hjdXJzb3ItdHJhbnNwYXJlbnQvY3Vyc29ycy8qIgorCitpbmhlcml0IGF1dG90b29scyBhbGxhcmNoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci9wb2ludGVyY2FsLXhpbnB1dC9wb2ludGVyY2FsLnhpbnB1dCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3BvaW50ZXJjYWwteGlucHV0L3BvaW50ZXJjYWwueGlucHV0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MzNmYzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci9wb2ludGVyY2FsLXhpbnB1dC9wb2ludGVyY2FsLnhpbnB1dApAQCAtMCwwICsxIEBACisjIHJlcGxhY2Ugd2l0aCB2YWxpZCBtYWNoaW5lIHNwZWNpZmljIHBvaW50ZXJjYWwueGlucHV0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci9wb2ludGVyY2FsLXhpbnB1dF8wLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci9wb2ludGVyY2FsLXhpbnB1dF8wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUzNDhjMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3BvaW50ZXJjYWwteGlucHV0XzAuMC5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIlRvdWNoc2NyZWVuIGNhbGlicmF0aW9uIGRhdGEgZnJvbSB4aW5wdXQtY2FsaWJyYXRvciIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1BSID0gInI3IgorCitTUkNfVVJJID0gImZpbGU6Ly9wb2ludGVyY2FsLnhpbnB1dCIKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAjIE9ubHkgaW5zdGFsbCBmaWxlIGlmIGl0IGhhcyBhIGNvbnRlbnRzCisgICAgaWYgWyAtcyAke1N9L3BvaW50ZXJjYWwueGlucHV0IF0gJiZcCisgICAgICAgWyAhIC1uICIkKGhlYWQgLW4xICR7U30vcG9pbnRlcmNhbC54aW5wdXR8Z3JlcCAicmVwbGFjZS4qcG9pbnRlcmNhbFwueGlucHV0IikiIF07IHRoZW4KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS8KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vcG9pbnRlcmNhbC54aW5wdXQgJHtEfSR7c3lzY29uZmRpcn0vCisgICAgZmkKK30KKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3BvaW50ZXJjYWwueGlucHV0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3IvMzB4aW5wdXRfY2FsaWJyYXRlLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3IvMzB4aW5wdXRfY2FsaWJyYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOTA3MjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvci8zMHhpbnB1dF9jYWxpYnJhdGUuc2gKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vc2gKKworLiAvZXRjL2Zvcm1mYWN0b3IvY29uZmlnCisKK2lmIFsgIiRIQVZFX1RPVUNIU0NSRUVOIiA9ICIxIiBdOyB0aGVuCisJL3Vzci9iaW4veGlucHV0X2NhbGlicmF0b3Jfb25jZS5zaAorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yL0FsbG93LXhpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gtdG8tYmUtcnVuLWFzLW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvci9BbGxvdy14aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoLXRvLWJlLXJ1bi1hcy1uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OTgyOTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvci9BbGxvdy14aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoLXRvLWJlLXJ1bi1hcy1uLnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGcm9tIDE0NzM0YTkzYmQzZmMzMjMzMjU0NTllMjRiMDQ3OTU0MjJlMzk1ZTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CitEYXRlOiBNb24sIDEgSnVsIDIwMTMgMTU6Mzg6MDIgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWxsb3cgeGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaCB0byBiZSBydW4gYXMgbm9ybWFsCisgdXNlcgorCitBbGxvdyBub3JtYWwgdXNlciB0byBjcmVhdGUgdGhlaXIgb3duIHBvaW50ZXJjYWwueGlucHV0IGZpbGVzIHRoYXQKK292ZXJyaWRlIHRoZSBzeXN0ZW0gcG9pbnRlcmNhbCBmaWxlIGluIC9ldGMuCisKK1NpZ25lZC1vZmYtYnk6IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KKy0tLQorIHNjcmlwdHMveGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaCB8ICAgMzMgKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NjcmlwdHMveGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaCBiL3NjcmlwdHMveGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaAoraW5kZXggZmNjYjE5Ny4uMGFkYTdkYSAxMDA3NTUKKy0tLSBhL3NjcmlwdHMveGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaAorKysrIGIvc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoCitAQCAtMTEsMTkgKzExLDMyIEBACisgUEFUSD0iL3Vzci9iaW46JFBBVEgiCisgCisgQklOQVJZPSJ4aW5wdXRfY2FsaWJyYXRvciIKKy1DQUxGSUxFPSIvZXRjL3BvaW50ZXJjYWwueGlucHV0IgorLUxPR0ZJTEU9Ii92YXIvbG9nL3hpbnB1dF9jYWxpYnJhdG9yLnBvaW50ZXJjYWwubG9nIgorK1NZU19DQUxGSUxFPSIvZXRjL3BvaW50ZXJjYWwueGlucHV0IgorK1VTRVJfQ0FMRklMRT0iJEhPTUUvLnBvaW50ZXJjYWwvcG9pbnRlcmNhbC54aW5wdXQiCisgCistaWYgWyAtZSAkQ0FMRklMRSBdIDsgdGhlbgorLSAgaWYgZ3JlcCByZXBsYWNlICRDQUxGSUxFIDsgdGhlbgorLSAgICBlY2hvICJFbXB0eSBjYWxpYnJhdGlvbiBmaWxlIGZvdW5kLCByZW1vdmluZyBpdCIKKy0gICAgcm0gJENBTEZJTEUKKy0gIGVsc2UKKy0gICAgZWNobyAiVXNpbmcgY2FsaWJyYXRpb24gZGF0YSBzdG9yZWQgaW4gJENBTEZJTEUiCistICAgIC4gJENBTEZJTEUgJiYgZXhpdCAwCistICBmaQorK2lmIFsgIiRVU0VSIiA9ICJyb290IiBdOyB0aGVuCisrICBMT0dGSUxFPSIvdmFyL2xvZy94aW5wdXRfY2FsaWJyYXRvci5wb2ludGVyY2FsLmxvZyIKKysgIENBTEZJTEVTPSIkU1lTX0NBTEZJTEUiCisrZWxzZQorKyAgTE9HRklMRT0iJEhPTUUvLnBvaW50ZXJjYWwveGlucHV0X2NhbGlicmF0b3IucG9pbnRlcmNhbC5sb2ciCisrICBDQUxGSUxFUz0iJFVTRVJfQ0FMRklMRSAkU1lTX0NBTEZJTEUiCisrICBta2RpciAtcCAiJEhPTUUvLnBvaW50ZXJjYWwiCisgZmkKKyAKKytmb3IgQ0FMRklMRSBpbiAkQ0FMRklMRVM7IGRvCisrICBpZiBbIC1lICRDQUxGSUxFIF07IHRoZW4KKysgICAgaWYgZ3JlcCByZXBsYWNlICRDQUxGSUxFIDsgdGhlbgorKyAgICAgIGVjaG8gIkVtcHR5IGNhbGlicmF0aW9uIGZpbGUgZm91bmQsIHJlbW92aW5nIGl0IgorKyAgICAgIHJtICRDQUxGSUxFIDI+L2Rldi9udWxsIHx8IHRydWUKKysgICAgZWxzZQorKyAgICAgIGVjaG8gIlVzaW5nIGNhbGlicmF0aW9uIGRhdGEgc3RvcmVkIGluICRDQUxGSUxFIgorKyAgICAgIC4gJENBTEZJTEUgJiYgZXhpdCAwCisrICAgIGZpCisrICBmaQorK2RvbmUKKysKKytbICIkVVNFUiIgIT0gInJvb3QiIF0gJiYgQ0FMRklMRT0kVVNFUl9DQUxGSUxFCisrCisgQ0FMREFUQT1gJEJJTkFSWSAtLW91dHB1dC10eXBlIHhpbnB1dCAtdiB8IHRlZSAkTE9HRklMRSB8IGdyZXAgJyAgICB4aW5wdXQgc2V0JyB8IHNlZCAncy9eICAgIC8vZzsgcy8kLzsvZydgCisgaWYgWyAhIC16ICIkQ0FMREFUQSIgXSA7IHRoZW4KKyAgIGVjaG8gJENBTERBVEEgPiAkQ0FMRklMRQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWRlM2Q3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3JfZ2l0LmJiCkBAIC0wLDAgKzEsMzcgQEAKK1NVTU1BUlkgPSAiVG91Y2hzY3JlZW4gY2FsaWJyYXRpb24gcHJvZ3JhbSBmb3IgWDExIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS94aW5wdXRfY2FsaWJyYXRvciIKK0xJQ0VOU0UgPSAiTUlULVgiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMvY2FsaWJyYXRvci5jcHA7ZW5kbGluZT0yMjttZDU9MWJjYmEwOGY2N2NkYjU2ZjM0MDIxNTU3ODk4ZTRiNWEiCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnhpIgorCitQViA9ICIwLjcuNStnaXQke1NSQ1BWfSIKK1BSID0gInI2IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ1JFViA9ICJjMDFjNWFmODA3Y2I0YjAxNTdiODgyYWIwN2E4OTNkZjlhODEwMTExIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3RpYXMveGlucHV0X2NhbGlicmF0b3IuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovLzMweGlucHV0X2NhbGlicmF0ZS5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9BbGxvdy14aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoLXRvLWJlLXJ1bi1hcy1uLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCisjIGZvcmNlIG5hdGl2ZSBYMTEgdWkgYXMgd2UgZG9uJ3QgaGF2ZSBndGsrIGluIERFUEVORFMKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLWd1aT14MTEiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSAke1N9L3NjcmlwdHMveGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaCAke0R9JHtiaW5kaXJ9L3hpbnB1dF9jYWxpYnJhdG9yX29uY2Uuc2gKKworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vMzB4aW5wdXRfY2FsaWJyYXRlLnNoICR7RH0ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kLworCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS94ZGcvYXV0b3N0YXJ0CisgICAgc2VkIC1lICdzLF5FeGVjPS4qLEV4ZWM9JHtiaW5kaXJ9L3hpbnB1dF9jYWxpYnJhdG9yX29uY2Uuc2gsJyAke1N9L3NjcmlwdHMveGlucHV0X2NhbGlicmF0b3IuZGVza3RvcCA+ICR7RH0ke3N5c2NvbmZkaXJ9L3hkZy9hdXRvc3RhcnQveGlucHV0X2NhbGlicmF0b3IuZGVza3RvcAorfQorCitGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS94ZGcvYXV0b3N0YXJ0IgorUkRFUEVORFNfJHtQTn0gPSAieGlucHV0IGZvcm1mYWN0b3IiCitSUkVDT01NRU5EU18ke1BOfSA9ICJwb2ludGVyY2FsLXhpbnB1dCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL21rZm9udGRpcl8xLjAuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL21rZm9udGRpcl8xLjAuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDUzZTI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvbWtmb250ZGlyXzEuMC43LmJiCkBAIC0wLDAgKzEsMjIgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIkEgcHJvZ3JhbSB0byBjcmVhdGUgYW4gaW5kZXggb2YgWCBmb250IGZpbGVzIGluIGEgZGlyZWN0b3J5IgorCitERVNDUklQVElPTiA9ICJGb3IgZWFjaCBkaXJlY3RvcnkgYXJndW1lbnQsIG1rZm9udGRpciByZWFkcyBhbGwgb2YgdGhlIFwKK2ZvbnQgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeS4gVGhlIGZvbnQgbmFtZXMgYW5kIHJlbGF0ZWQgZGF0YSBhcmUgd3JpdHRlbiBcCitvdXQgdG8gdGhlIGZpbGVzIFwiZm9udHMuZGlyXCIsIFwiZm9udHMuc2NhbGVcIiwgYW5kIFwiZm9udHMuYWxpYXNcIi4gIFwKK1RoZSBYIHNlcnZlciBhbmQgZm9udCBzZXJ2ZXIgdXNlIHRoZXNlIGZpbGVzIHRvIGZpbmQgdGhlIGF2YWlsYWJsZSBmb250IFwKK2ZpbGVzLiIKKworUEUgPSAiMSIKK1BSID0gIiR7SU5DX1BSfS4wIgorCitSREVQRU5EU18ke1BOfSArPSAibWtmb250c2NhbGUiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgKz0gIm1rZm9udHNjYWxlLW5hdGl2ZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI0ZmNmMmI5MGNhZGJmYzE1MDA5YjllMTI0ZGMzYTNmIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMThjNDI5MTQ4Yzk2YzIwNzllZGRhOTIyYTJiNjc2MzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTZkNTJhNDgyZGYxMzA0ODRlNTFmZDA2NmQxYjZlZGE3YzJjMDJkZGJjOTFmZTZlMmJlMWI5YzRlNzMwNjUzMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL21rZm9udHNjYWxlXzEuMS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvbWtmb250c2NhbGVfMS4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjZjE4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL21rZm9udHNjYWxlXzEuMS4yLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIkEgcHJvZ3JhbSB0byBjcmVhdGUgYW4gaW5kZXggb2Ygc2NhbGFibGUgZm9udCBmaWxlcyBmb3IgWCIKKworREVTQ1JJUFRJT04gPSAiRm9yIGVhY2ggZGlyZWN0b3J5IGFyZ3VtZW50LCBta2ZvbnRzY2FsZSByZWFkcyBhbGwgb2YgdGhlIFwKK3NjYWxhYmxlIGZvbnQgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeS4gRm9yIGV2ZXJ5IGZvbnQgZmlsZSBmb3VuZCwgYW4gWDExIFwKK2ZvbnQgbmFtZSAoWExGRCkgaXMgZ2VuZXJhdGVkLCBhbmQgaXMgd3JpdHRlbiB0b2dldGhlciB3aXRoIHRoZSBmaWxlIFwKK25hbWUgdG8gYSBmaWxlIGZvbnRzLnNjYWxlIGluIHRoZSBkaXJlY3RvcnkuICBUaGUgcmVzdWx0aW5nIGZvbnRzLnNjYWxlIFwKK2lzIHVzZWQgYnkgdGhlIG1rZm9udGRpciBwcm9ncmFtLiIKKworREVQRU5EUyA9ICJ1dGlsLW1hY3Jvcy1uYXRpdmUgemxpYiBsaWJmb250ZW5jIGZyZWV0eXBlIHhwcm90byIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTJlMGQxMjlkMDUzMDUxNzZkMWE3OTBlMGFjMWFjYjdmIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWJkZDZlYmZhNjJiMWJiZDQ3NDkwNmFjODZhNDBmZDgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGM2ZDUyMjhhZjg4NTQ3N2I5YWVjNjBjYTZmMTcyNTc4ZTdkMmRlNDIyMzQzNTdhZjYyZmIwMDQzOTQ1M2YyMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3JnYl8xLjAuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3JnYl8xLjAuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzI2ODA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvcmdiXzEuMC42LmJiCkBAIC0wLDAgKzEsMTYgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlgxMSBjb2xvciBuYW1lIGRhdGFiYXNlIgorREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIGluY2x1ZGVzIGJvdGggdGhlIGxpc3QgbWFwcGluZyBYIGNvbG9yIG5hbWVzIFwKK3RvIFJHQiB2YWx1ZXMgKHJnYi50eHQpIGFuZCwgaWYgY29uZmlndXJlZCB0byB1c2UgYSBkYXRhYmFzZSBmb3IgY29sb3IgXAorbG9va3VwLCB0aGUgcmdiIHByb2dyYW0gdG8gY29udmVydCB0aGUgdGV4dCBmaWxlIGludG8gdGhlIGJpbmFyeSBkYXRhYmFzZSBcCitmb3JtYXQuIgorCitERVBFTkRTICs9ICIgeHByb3RvIHV0aWwtbWFjcm9zIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWY1OThhZGJlMjQxYmQwYjBiOTExMzgzMWY2ZTI0OWEiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWFiNWJiZDc2NDJlNWM3ODQ0MjkzMDdlYzIxMGQxOTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmJjYTdjNmFhNTk5MzliOWY2YTBmYjlmZmYxNWRmZDYyMTc2NDIwZmZkNGFlMzBjOGQ5MmE2YTEyNWZiZTZiMCIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vWDExIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveDExcGVyZl8xLjYuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3gxMXBlcmZfMS42LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU5MzU1OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3gxMXBlcmZfMS42LjAuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWDExIHNlcnZlciBwZXJmb3JtYW5jZSB0ZXN0IHByb2dyYW0iCisKK0RFU0NSSVBUSU9OID0gIlRoZSB4MTFwZXJmIHByb2dyYW0gcnVucyBvbmUgb3IgbW9yZSBwZXJmb3JtYW5jZSB0ZXN0cyBcCithbmQgcmVwb3J0cyBob3cgZmFzdCBhbiBYIHNlcnZlciBjYW4gZXhlY3V0ZSB0aGUgdGVzdHMuIgorCisKK0RFUEVORFMgKz0gImxpYnhtdSBsaWJ4cmVuZGVyIGxpYnhmdCBsaWJ4ZXh0IGZvbnRjb25maWciCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQyOGNhNGQ2N2E0MWZjZDRmYzMyODNkY2U5YmJkYTdlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3gxMXBlcmYuaDtlbmRsaW5lPTI0O21kNT0yOTU1NTA2NmJhZjQwNmExMDVmZjkxN2FjMjViMmQwMSIKKworUEUgPSAiMSIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9YMTEveDExcGVyZmNvbXAvKiIKKworU1JDX1VSSVttZDVzdW1dID0gImYwYjI0ZTRkOGJlYjYyMmE0MTllODQzMWUxYzAzY2Q3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU4NzA5OGRlYzE5NDc1NzJkNzBjNjI2OTdhN2I3MGJkZTFhYjU2NjgyMzdkNDY2MDA4MGVhZGU2YmMwOTY3NTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94YXV0aF8xLjAuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hhdXRoXzEuMC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNzNmNGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94YXV0aF8xLjAuOS5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKK1NVTU1BUlkgPSAiWCBhdXRob3JpdHkgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiWCBhcHBsaWNhdGlvbiB0byBlZGl0IGFuZCBkaXNwbGF5IHRoZSBhdXRob3JpemF0aW9uIFwKK2luZm9ybWF0aW9uIHVzZWQgaW4gY29ubmVjdGluZyB0byB0aGUgWCBzZXJ2ZXIuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZWM3NGRkN2VhNGQxMGM0NzE1YTdjNDRmMTU5YTQwYiIKKworREVQRU5EUyArPSAibGlieGF1IGxpYnhleHQgbGlieG11IgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjdkNjAwM2YzMjgzOGQ1YjY4OGUyYzhhMTMxMDgzMjcxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU2Y2UxNTIzZWI0OGIxZjhhNGY0MjQ0ZmUxYzNkOGU2YWYxYTNiN2Q0YjBlNjA2MzU4MjQyMWIwYjY4ZGMyOGYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZHB5aW5mby9kaXNhYmxlLXhrYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hkcHlpbmZvL2Rpc2FibGUteGtiLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlODE5OWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZHB5aW5mby9kaXNhYmxlLXhrYi5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHhkcHlpbmZvLTEuMy4wL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHhkcHlpbmZvLTEuMy4wLm9yaWcvY29uZmlndXJlLmFjCTIwMTEtMTAtMjEgMjE6MzQ6MjEuMDAwMDAwMDAwIC0wNzAwCisrKysgeGRweWluZm8tMS4zLjAvY29uZmlndXJlLmFjCTIwMTEtMTEtMjggMjA6MDY6NTYuNTU0MDU2OTM1IC0wODAwCitAQCAtNDcsMTEgKzQ3LDE1IEBACisgCUFDX0NIRUNLX0hFQURFUlMoW1gxMS9leHRlbnNpb25zL211bHRpYnVmLmggWDExL2V4dGVuc2lvbnMvWFNobS5oXSwsLFsjaW5jbHVkZSA8WDExL1hsaWIuaD5dKQorIAlDUFBGTEFHUz0iJFNBVkVfQ1BQRkxBR1MiXSxbZWNobyAibm90IGZvdW5kIl0pCisgCisrQUNfQVJHX0VOQUJMRSh4a2IsIEFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUteGtiXSwgW0Rpc2FibGUgWEtCIHN1cHBvcnRdKSwKKysJWEtCPSIkZW5hYmxldmFsIiwgWEtCPSJ5ZXMiKQorK2lmIHRlc3QgIngkWEtCIiA9ICJ4eWVzIiA7IHRoZW4KKyBQS0dfQ0hFQ0tfTU9EVUxFUyhEUFlfWEtCLCB4MTEsCisgCVtTQVZFX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgCUNQUEZMQUdTPSIkQ1BQRkxBR1MgJERQWV9YS0JfQ0ZMQUdTICREUFlfWDExX0NGTEFHUyIKKyAJQUNfQ0hFQ0tfSEVBREVSUyhbWDExL2V4dGVuc2lvbnMvWEtCLmggWDExL1hLQmxpYi5oXSwsLFsjaW5jbHVkZSA8WDExL1hsaWIuaD5dKQorIAlDUFBGTEFHUz0iJFNBVkVfQ1BQRkxBR1MiXSxbZWNobyAibm90IGZvdW5kIl0pCisrZmkKKyAKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhEUFlfWEY4NlZJRE1PREUsIHh4Zjg2dm0sCisgCVtTQVZFX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZHB5aW5mb18xLjMuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hkcHlpbmZvXzEuMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMDRiYjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZHB5aW5mb18xLjMuMi5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJEaXNwbGF5IGluZm9ybWF0aW9uIHV0aWxpdHkgZm9yIFgiCisKK0RFU0NSSVBUSU9OID0gIlhkcHlpbmZvIGlzIGEgdXRpbGl0eSBmb3IgZGlzcGxheWluZyBpbmZvcm1hdGlvbiBhYm91dCBhbiBcCitYIHNlcnZlci4gSXQgaXMgdXNlZCB0byBleGFtaW5lIHRoZSBjYXBhYmlsaXRpZXMgb2YgYSBzZXJ2ZXIsIHRoZSBcCitwcmVkZWZpbmVkIHZhbHVlcyBmb3IgdmFyaW91cyBwYXJhbWV0ZXJzIHVzZWQgaW4gY29tbXVuaWNhdGluZyBiZXR3ZWVuIFwKK2NsaWVudHMgYW5kIHRoZSBzZXJ2ZXIsIGFuZCB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIHNjcmVlbnMgYW5kIHZpc3VhbHMgXAordGhhdCBhcmUgYXZhaWxhYmxlLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjNkMDllNmI5ZTIwM2ExYWY0ODllMTZjNzA4ZjRmYjMiCitERVBFTkRTICs9ICJsaWJ4dHN0IGxpYnhleHQgbGlieHhmODZ2bSBsaWJ4eGY4NmRnYSBsaWJ4eGY4Nm1pc2MgbGlieGkgbGlieHJlbmRlciBsaWJ4aW5lcmFtYSBsaWJkbXggbGlieGF1IGxpYnhjb21wb3NpdGUiCitQRSA9ICIxIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZGlzYWJsZS14a2IucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ODA5MDM3YmQ0ODU5OWFmNTVkYWQ4MWM1MDhiNmIzOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzMDIzOGVkOTE1NjE5ZTA2Y2ViNDE3MjFlNWY3NDdkNjczMjA1NTVjYzM4ZDQ1OWU5NTQ4MzljMTg5Y2NhZjUxIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXhrYiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hldi9kaWV0LXgxMS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hldi9kaWV0LXgxMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTMwOTU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGV2L2RpZXQteDExLnBhdGNoCkBAIC0wLDAgKzEsODIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCistLS0KKyB4ZXYuYyB8ICAgMTYgKysrKysrKystLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK0luZGV4OiB4ZXYtMS4yLjAveGV2LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4ZXYtMS4yLjAub3JpZy94ZXYuYworKysrIHhldi0xLjIuMC94ZXYuYworQEAgLTExNiw3ICsxMTYsNyBAQCBkb19LZXlQcmVzcyAoWEV2ZW50ICpldmVudHApCisgICAgIG5ieXRlcyA9IFhMb29rdXBTdHJpbmcgKGUsIHN0ciwgMjU2LCAma3MsIE5VTEwpOworIAorICAgICAvKiBub3Qgc3VwcG9zZWQgdG8gY2FsbCBYbWJMb29rdXBTdHJpbmcgb24gYSBrZXkgcmVsZWFzZSBldmVudCAqLworLSAgICBpZiAoZS0+dHlwZSA9PSBLZXlQcmVzcyAmJiB4aWMpIHsKKysgICAgLyppZiAoZS0+dHlwZSA9PSBLZXlQcmVzcyAmJiB4aWMpIHsKKyAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICBubWJieXRlcyA9IFhtYkxvb2t1cFN0cmluZyAoeGljLCBlLCBidWYsIGJzaXplIC0gMSwgJmtzLCAmc3RhdHVzKTsKKyAgICAgICAgICAgICBidWZbbm1iYnl0ZXNdID0gJ1wwJzsKK0BAIC0xMjYsNyArMTI2LDcgQEAgZG9fS2V5UHJlc3MgKFhFdmVudCAqZXZlbnRwKQorICAgICAgICAgICAgICAgICBidWYgPSByZWFsbG9jIChidWYsIGJzaXplKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9IHdoaWxlIChzdGF0dXMgPT0gWEJ1ZmZlck92ZXJmbG93KTsKKy0gICAgfQorKyAgICB9Ki8KKyAKKyAgICAgaWYgKGtzID09IE5vU3ltYm9sKQorIAlrc25hbWUgPSAiTm9TeW1ib2wiOworQEAgLTE1Niw3ICsxNTYsNyBAQCBkb19LZXlQcmVzcyAoWEV2ZW50ICpldmVudHApCisgICAgIH0KKyAKKyAgICAgLyogbm90IHN1cHBvc2VkIHRvIGNhbGwgWG1iTG9va3VwU3RyaW5nIG9uIGEga2V5IHJlbGVhc2UgZXZlbnQgKi8KKy0gICAgaWYgKGUtPnR5cGUgPT0gS2V5UHJlc3MgJiYgeGljKSB7CisrICAgIC8qaWYgKGUtPnR5cGUgPT0gS2V5UHJlc3MgJiYgeGljKSB7CisgICAgICAgICBwcmludGYgKCIgICAgWG1iTG9va3VwU3RyaW5nIGdpdmVzICVkIGJ5dGVzOiAiLCBubWJieXRlcyk7CisgICAgICAgICBpZiAobm1iYnl0ZXMgPiAwKSB7CisgICAgICAgICAgICBkdW1wIChidWYsIG5tYmJ5dGVzKTsKK0BAIC0xNjQsNyArMTY0LDcgQEAgZG9fS2V5UHJlc3MgKFhFdmVudCAqZXZlbnRwKQorICAgICAgICAgfSBlbHNlIHsKKyAgICAgCSAgIHByaW50ZiAoIlxuIik7CisgICAgICAgICB9CistICAgIH0KKysgICAgfSAqLworIAorICAgICBwcmludGYgKCIgICAgWEZpbHRlckV2ZW50IHJldHVybnM6ICVzXG4iLAorIAkgICAgWEZpbHRlckV2ZW50IChldmVudHAsIGUtPndpbmRvdykgPyAiVHJ1ZSIgOiAiRmFsc2UiKTsKK0BAIC0xMDE1LDcgKzEwMTUsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIlczogIFhTZXRMb2NhbGVNb2RpZmllcnMgZmFpbGVkXG4iLCBQcm9ncmFtTmFtZSk7CisgICAgIH0KKyAKKy0gICAgeGltID0gWE9wZW5JTSAoZHB5LCBOVUxMLCBOVUxMLCBOVUxMKTsKKysgICAgLyp4aW0gPSBYT3BlbklNIChkcHksIE5VTEwsIE5VTEwsIE5VTEwpOworICAgICBpZiAoeGltID09IE5VTEwpIHsKKyAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAgWE9wZW5JTSBmYWlsZWRcbiIsIFByb2dyYW1OYW1lKTsKKyAgICAgfQorQEAgLTEwNDIsNyArMTA0Miw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgWEZyZWUgKHhpbV9zdHlsZXMpOworICAgICAgICAgfQorLSAgICB9CisrCX0qLworIAorICAgICBzY3JlZW4gPSBEZWZhdWx0U2NyZWVuIChkcHkpOworIAorQEAgLTExMDksNyArMTEwOSw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJcHJpbnRmICgiT3V0ZXIgd2luZG93IGlzIDB4JWx4LCBpbm5lciB3aW5kb3cgaXMgMHglbHhcbiIsIHcsIHN1YncpOworICAgICB9CisgCistICAgIGlmICh4aW0gJiYgeGltX3N0eWxlKSB7CisrICAgIC8qaWYgKHhpbSAmJiB4aW1fc3R5bGUpIHsKKyAgICAgICAgIHhpYyA9IFhDcmVhdGVJQyAoeGltLAorICAgICAgICAgICAgICAgICAgICAgICAgICBYTklucHV0U3R5bGUsIHhpbV9zdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWE5DbGllbnRXaW5kb3csIHcsCitAQCAtMTExOSw3ICsxMTE5LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgaWYgKHhpYyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiWENyZWF0ZUlDIGZhaWxlZFxuIik7CisgICAgICAgICB9CistICAgIH0KKysgICAgfSovCisgCisgICAgIGhhdmVfcnIgPSBYUlJRdWVyeUV4dGVuc2lvbiAoZHB5LCAmcnJfZXZlbnRfYmFzZSwgJnJyX2Vycm9yX2Jhc2UpOworICAgICBpZiAoaGF2ZV9ycikgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGV2XzEuMi4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGV2XzEuMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNTFiNTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXZfMS4yLjIuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWCBFdmVudCBWaWV3ZXIiCitERVNDUklQVElPTiA9ICJYZXYgY3JlYXRlcyBhIHdpbmRvdyBhbmQgdGhlbiBhc2tzIHRoZSBYIHNlcnZlciB0byBzZW5kIGl0IGV2ZW50cyBcCit3aGVuZXZlciBhbnl0aGluZyBoYXBwZW5zIHRvIHRoZSB3aW5kb3cgKHN1Y2ggYXMgaXQgYmVpbmcgbW92ZWQsIHJlc2l6ZWQsIFwKK3R5cGVkIGluLCBjbGlja2VkIGluLCBldGMuKS4gWW91IGNhbiBhbHNvIGF0dGFjaCBpdCB0byBhbiBleGlzdGluZyB3aW5kb3cuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly94ZXYuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTMzO21kNT01NzdjOTk0MjFmMTgwM2I4OTFkMmM3OTA5N2FlNDY4MiIKK0xJQ0VOU0UgPSAiTUlUIgorCitQRSA9ICIxIgorCitERVBFTkRTICs9ICJsaWJ4cmFuZHIgeHByb3RvIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZGlldC14MTEucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyNDliZGRlOTBmMDFjMGQ4NjFhZjUyZGM4ZmVjMzc5ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkOTRhZTYyYTZjMWFmNTZjMjk2MWQ3MWY1NzgyMDc2YWM0MTE2ZjBmYTRlNDAxNDIwYWM3ZTBkYjMzZGMzMTRmIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGV5ZXNfMS4xLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXllc18xLjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGQwY2I4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGV5ZXNfMS4xLjEuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWDExIGV5ZXMgdGhhdCBmb2xsb3cgdGhlIG1vdXNlIGN1cnNvciBkZW1vIgorREVTQ1JJUFRJT04gPSAiWGV5ZXMgaXMgYSBzbWFsbCBYMTEgYXBwbGljYXRpb24gdGhhdCBzaG93cyBhIHBhaXIgb2YgZXllcyB0aGF0IG1vdmUgdG8gXAorZm9sbG93IHRoZSBsb2NhdGlvbiBvZiB0aGUgbW91c2UgY3Vyc29yIGFyb3VuZCB0aGUgc2NyZWVuLiIKKworUEUgPSAiMSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2VhNTFiMzY1MDUxYWMzMmQxODEzYTdkYmFhNGJmYzYiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMzAzNWRjZWNkYmRiODllODY0MTc3YzA4MDkyNDk4MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NzVlOTg2ODBjZDU5ZTFmOTQzOTAxNjM4NjYwOTU0NmVkMDhjMjg0ZDBmMDVhOTUyNzZmOTZhY2E2ZThhNTIxIgorCitERVBFTkRTICs9ICJsaWJ4YXUgbGlieHQgbGlieGV4dCBsaWJ4bXUgbGlieHJlbmRlciIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hob3N0XzEuMC43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGhvc3RfMS4wLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI1NzM3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hob3N0XzEuMC43LmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlNlcnZlciBhY2Nlc3MgY29udHJvbCBwcm9ncmFtIGZvciBYIgorCitERVNDUklQVElPTiA9ICJUaGUgeGhvc3QgcHJvZ3JhbSBpcyB1c2VkIHRvIGFkZCBhbmQgZGVsZXRlIGhvc3QgbmFtZXMgb3IgXAordXNlciBuYW1lcyB0byB0aGUgbGlzdCBhbGxvd2VkIHRvIG1ha2UgY29ubmVjdGlvbnMgdG8gdGhlIFggc2VydmVyLiBJbiBcCit0aGUgY2FzZSBvZiBob3N0cywgdGhpcyBwcm92aWRlcyBhIHJ1ZGltZW50YXJ5IGZvcm0gb2YgcHJpdmFjeSBjb250cm9sIFwKK2FuZCBzZWN1cml0eS4gRW52aXJvbm1lbnRzIHdoaWNoIHJlcXVpcmUgbW9yZSBzb3BoaXN0aWNhdGVkIG1lYXN1cmVzIFwKK3Nob3VsZCBpbXBsZW1lbnQgdGhlIHVzZXItYmFzZWQgbWVjaGFuaXNtIG9yIHVzZSB0aGUgaG9va3MgaW4gdGhlIFwKK3Byb3RvY29sIGZvciBwYXNzaW5nIG90aGVyIGF1dGhlbnRpY2F0aW9uIGRhdGEgdG8gdGhlIHNlcnZlci4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThmYmVkNzFkZGRmNDg1NDE4MThjZWY4MDc5MTI0MTk5IgorREVQRU5EUyArPSAibGlieG11IGxpYnhhdSIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNWQ0OTA3MzhiMTQ4Y2I3ZjJmZTc2MGY0MGY5MjUxNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5M2U2MTllZTE1NDcxZjU3NmNmYjMwYzY2M2UxOGY1YmM3MGFjYTU3N2E2M2QyYzJjMDNmMDA2YTc4MzdjMjlhIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGluaXRfMS4zLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aW5pdF8xLjMuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzE4NTE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGluaXRfMS4zLjQuYmIKQEAgLTAsMCArMSwyMCBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWCBXaW5kb3cgU3lzdGVtIGluaXRpYWxpemVyIgorCitERVNDUklQVElPTiA9ICJUaGUgeGluaXQgcHJvZ3JhbSBpcyB1c2VkIHRvIHN0YXJ0IHRoZSBYIFdpbmRvdyBTeXN0ZW0gXAorc2VydmVyIGFuZCBhIGZpcnN0IGNsaWVudCBwcm9ncmFtIG9uIHN5c3RlbXMgdGhhdCBjYW5ub3Qgc3RhcnQgWCBcCitkaXJlY3RseSBmcm9tIC9ldGMvaW5pdCBvciBpbiBlbnZpcm9ubWVudHMgdGhhdCB1c2UgbXVsdGlwbGUgd2luZG93IFwKK3N5c3RlbXMuIFdoZW4gdGhpcyBmaXJzdCBjbGllbnQgZXhpdHMsIHhpbml0IHdpbGwga2lsbCB0aGUgWCBzZXJ2ZXIgYW5kIFwKK3RoZW4gdGVybWluYXRlLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MThmMDFlN2IzOTgwN2JlYmUyYjhkZjEwMWEwMzliNjgiCisKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZTkyODQ1MmRmYWY3Mzg1MTQxM2EyZDhiOGM3NjM4OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NWQ4OGQ3Mzk3YTA3ZTAxZGIyNTMxNjNiN2M3YTAwYjI0OWIzZDMwZTk5NDg5ZjI3MzRjYWM5YTBjNzkwMmIzIgorCitFWFRSQV9PRUNPTkYgPSAiYWNfY3ZfcGF0aF9NQ09PS0lFPSR7YmluZGlyfS9tY29va2llIgorCitSREVQRU5EU18ke1BOfSArPSAidXRpbC1saW51eC1tY29va2llIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGlucHV0XzEuNi4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGlucHV0XzEuNi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZWZjYzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aW5wdXRfMS42LjEuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiUnVudGltZSBjb25maWd1cmF0aW9uIGFuZCB0ZXN0IG9mIFhJbnB1dCBkZXZpY2VzIgorCitERVNDUklQVElPTiA9ICJYaW5wdXQgaXMgYW4gdXRpbGl0eSBmb3IgY29uZmlndXJpbmcgYW5kIHRlc3RpbmcgWElucHV0IGRldmljZXMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg4MTUyNWY4OWY5OWNhZDM5Yzk4MzJiY2I3MmU2ZmE1IgorCitERVBFTkRTICs9ICIgbGlieGkgbGlieHJhbmRyIGxpYnhpbmVyYW1hIgorCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzMDU5ODBhYzc4YTY5NTRlMzA2YTE0ZDgwYTU0YzQ0MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNzYzMmQwZjIyOGE4YTZiZTkzYjA5ODU3ZWE0MTM5NDBmY2Y0NDA5MWU2MGY0YTBmZTlmNWZkODJlZmQ4NzFmIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94a2Jjb21wXzEuMy4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGtiY29tcF8xLjMuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmFjMDY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGtiY29tcF8xLjMuMC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJBIHByb2dyYW0gdG8gY29tcGlsZSBYS0Iga2V5Ym9hcmQgZGVzY3JpcHRpb24iCisKK0RFU0NSSVBUSU9OID0gIlRoZSB4a2Jjb21wIGtleW1hcCBjb21waWxlciBjb252ZXJ0cyBhIGRlc2NyaXB0aW9uIG9mIGFuIFwKK1hLQiBrZXltYXAgaW50byBvbmUgb2Ygc2V2ZXJhbCBvdXRwdXQgZm9ybWF0cy4gVGhlIG1vc3QgY29tbW9uIHVzZSBmb3IgXAoreGtiY29tcCBpcyB0byBjcmVhdGUgYSBjb21waWxlZCBrZXltYXAgZmlsZSAoLnhrbSBleHRlbnNpb24pIHdoaWNoIGNhbiBcCitiZSByZWFkIGRpcmVjdGx5IGJ5IFhLQi1jYXBhYmxlIFggc2VydmVycyBvciB1dGlsaXRpZXMuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wODQzNmU0ZjQ0NzY5NjRlMmUyZGQ3ZTdlNDFlMDc2YSIKKworUFIgPSAiJHtJTkNfUFJ9LjAiCisKK0RFUEVORFMgKz0gImxpYnhrYmZpbGUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDAxMmE4ZTMwOTJjZGRmN2Y4N2IyNTBmOTZiYjM4YzUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2ZhYzk3Mzc3OGZhYmY1MjE2MTIxYWQ2MGI3YWY4YWI3NGNlNzUxM2FmMGY5MjYwY2Y4YzUzMDllMTYyMmIyYSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3htb2RtYXBfMS4wLjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94bW9kbWFwXzEuMC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZWFjNmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94bW9kbWFwXzEuMC45LmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlV0aWxpdHkgZm9yIG1vZGlmeWluZyBrZXltYXBzIGFuZCBwb2ludGVyIGJ1dHRvbiBtYXBwaW5ncyBpbiBYIgorCitERVNDUklQVElPTiA9ICJUaGUgeG1vZG1hcCBwcm9ncmFtIGlzIHVzZWQgdG8gZWRpdCBhbmQgZGlzcGxheSB0aGUgXAora2V5Ym9hcmQgbW9kaWZpZXIgbWFwIGFuZCBrZXltYXAgdGFibGUgdGhhdCBhcmUgdXNlZCBieSBjbGllbnQgXAorYXBwbGljYXRpb25zIHRvIGNvbnZlcnQgZXZlbnQga2V5Y29kZXMgaW50byBrZXlzeW1zLiBJdCBpcyB1c3VhbGx5IHJ1biBcCitmcm9tIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBzdGFydHVwIHNjcmlwdCB0byBjb25maWd1cmUgdGhlIGtleWJvYXJkIFwKK2FjY29yZGluZyB0byBwZXJzb25hbCB0YXN0ZXMuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI3MmMxN2U5NjM3MGUxZTc0NzczZmEyMmQ5OTg5NjIxIgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzIzZjAyZDNhNWY5ODQ1MDU1NDU1NjIwNWYwYTk0OTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjdiMGU1Y2M1ZjEwZDBmYjZkMmQ2ZWE0ZjAwYzc3ZThhYzBlODQ3Y2M1YTczYmU5NGNkODYxMzlhYzRhYzQ3OCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hvcmctYXBwLWNvbW1vbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94b3JnLWFwcC1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MjljYjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94b3JnLWFwcC1jb21tb24uaW5jCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiWCBhcHBsaWNhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJ4MTEvYXBwcyIKK0xJQ0VOU0UgPSAiTUlULVgiCitERVBFTkRTID0gInV0aWwtbWFjcm9zLW5hdGl2ZSB2aXJ0dWFsL2xpYngxMSIKKworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitJTkNfUFIgPSAicjgiCisKK1NSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC9hcHAvJHtCUE59LSR7UFZ9LnRhci5iejIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworRklMRVNfJHtQTn0gKz0gIiAke2xpYmRpcn0vWDExLyR7QlBOfSAke2RhdGFkaXJ9L1gxMS9hcHAtZGVmYXVsdHMvIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHByb3BfMS4yLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94cHJvcF8xLjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzhiZjA0NTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94cHJvcF8xLjIuMi5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJVdGlsaXR5IHRvIGRpc3BsYXkgd2luZG93IGFuZCBmb250IHByb3BlcnRpZXMgb2YgYW4gWCBzZXJ2ZXIiCisKK0RFU0NSSVBUSU9OID0gIlRoZSB4cHJvcCB1dGlsaXR5IGlzIGZvciBkaXNwbGF5aW5nIHdpbmRvdyBhbmQgZm9udCBcCitwcm9wZXJ0aWVzIGluIGFuIFggc2VydmVyLiBPbmUgd2luZG93IG9yIGZvbnQgaXMgc2VsZWN0ZWQgdXNpbmcgdGhlIFwKK2NvbW1hbmQgbGluZSBhcmd1bWVudHMgb3IgcG9zc2libHkgaW4gdGhlIGNhc2Ugb2YgYSB3aW5kb3csIGJ5IGNsaWNraW5nIFwKK29uIHRoZSBkZXNpcmVkIHdpbmRvdy4gQSBsaXN0IG9mIHByb3BlcnRpZXMgaXMgdGhlbiBnaXZlbiwgcG9zc2libHkgd2l0aCBcCitmb3JtYXR0aW5nIGluZm9ybWF0aW9uLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTIyNmFiOGRiODhhYzBiYzAzOTE2NzNiZTQwYzlmOTEiCisKK0RFUEVORFMgKz0gImxpYnhtdSIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImZhZTNkMmZkYTA3Njg0MDI3YTY0M2NhNzgzZDU5NWNjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjliZWU4OGIxMDI1ODY1YWQxMjFmNzJkMzI1NzZkZDMwMjdhZjE0NDY3NzRhYTgzMDBjY2UzYzI2MWQ4NjliYzYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94cmFuZHJfMS40LjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94cmFuZHJfMS40LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFiZDQyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hyYW5kcl8xLjQuMy5iYgpAQCAtMCwwICsxLDE1IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYUmFuZFI6IFggUmVzaXplLCBSb3RhdGUgYW5kIFJlZmxlY3QgZXh0ZW5zaW9uIGNvbW1hbmQiCisKK0RFU0NSSVBUSU9OID0gIlhyYW5kciBpcyB1c2VkIHRvIHNldCB0aGUgc2l6ZSwgb3JpZW50YXRpb24gYW5kL29yIFwKK3JlZmxlY3Rpb24gb2YgdGhlIG91dHB1dHMgZm9yIGEgc2NyZWVuLiBJdCBjYW4gYWxzbyBzZXQgdGhlIHNjcmVlbiBcCitzaXplLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mZTE2MDhiZGIzM2NmOGM2MmE0NDM4ZjdkMzQ2NzliMyIKK0RFUEVORFMgKz0gImxpYnhyYW5kciBsaWJ4cmVuZGVyIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ0MWZkYjk4ZDJhYmM2MDUxMTA4YjcwNzVkOTQ4ZmM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcxNTRhYzM0ODZiODY5MjM2OTJmMmQ2Y2RiMjk5MWEyZWU3MmJjMzJhZjJjNDM3OWE2ZjFjMDY4ZjIwNGJlMWIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94c2V0L2Rpc2FibGUteGtiLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHNldC9kaXNhYmxlLXhrYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2QxM2EzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHNldC9kaXNhYmxlLXhrYi5wYXRjaApAQCAtMCwwICsxLDI2IEBACithZGQgIi1kaXNhYmxlLXhrYiIgb3B0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSZWJhc2UgZm9yIDEuMi4xIGJ5OiBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA4MWMzYWU0Li4yNjYwMWJmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01MiwxMSArNTIsMTUgQEAgUEtHX0NIRUNLX01PRFVMRVMoU0VUX1hFWFQsIHhleHQsCisgCUFDX0NIRUNLX0hFQURFUlMoW1gxMS9leHRlbnNpb25zL2RwbXMuaCBYMTEvZXh0ZW5zaW9ucy9NSVRNaXNjLmhdLCwsWyNpbmNsdWRlIDxYMTEvWGxpYi5oPl0pCisgCUNQUEZMQUdTPSIkU0FWRV9DUFBGTEFHUyJdLFtlY2hvICJub3QgZm91bmQiXSkKKyAKKytBQ19BUkdfRU5BQkxFKHhrYiwgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS14a2JdLCBbRGlzYWJsZSBYS0Igc3VwcG9ydF0pLAorKwkJWEtCPSIkZW5hYmxldmFsIiwgWEtCPSJ5ZXMiKQorK2lmIHRlc3QgIngkWEtCIiA9ICJ4eWVzIiA7IHRoZW4KKyBQS0dfQ0hFQ0tfTU9EVUxFUyhTRVRfWEtCLCB4MTEsCisgCVtTQVZFX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgCUNQUEZMQUdTPSIkQ1BQRkxBR1MgJFNFVF9YS0JfQ0ZMQUdTICRTRVRfWDExX0NGTEFHUyIKKyAJQUNfQ0hFQ0tfSEVBREVSUyhbWDExL1hLQmxpYi5oXSwsLFsjaW5jbHVkZSA8WDExL1hsaWIuaD5dKQorIAlDUFBGTEFHUz0iJFNBVkVfQ1BQRkxBR1MiXSxbZWNobyAibm90IGZvdW5kIl0pCisrZmkKKyAKKyBBQ19BUkdfV0lUSCh4Zjg2bWlzYywgQUNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC14Zjg2bWlzY10sW0Rpc2FibGUgeGY4Nm1pc2Mgc3VwcG9ydC5dKSwKKyAgICAgICAgICAgICAgICAgW1VTRV9YRjg2TUlTQz0iJHdpdGh2YWwiXSwgW1VTRV9YRjg2TUlTQz0ieWVzIl0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94c2V0XzEuMi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHNldF8xLjIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjgzYjc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHNldF8xLjIuMy5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJVdGlsaXR5IGZvciBzZXR0aW5nIHZhcmlvdXMgdXNlciBwcmVmZXJlbmNlIG9wdGlvbnMgb2YgdGhlIGRpc3BsYXkiCisKK0RFU0NSSVBUSU9OID0gInhzZXQgaXMgYSB1dGlsaXR5IHRoYXQgaXMgdXNlZCB0byBzZXQgdmFyaW91cyB1c2VyIFwKK3ByZWZlcmVuY2Ugb3B0aW9ucyBvZiB0aGUgZGlzcGxheS4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YmVhODFjYzk4MjdjZGYxYWYwZTEyYzJiODIyOGNmOGQiCitERVBFTkRTICs9ICJsaWJ4ZXh0IGxpYnh4Zjg2bWlzYyBsaWJ4bXUgbGlieGF1IgorUEUgPSAiMSIKKworU1JDX1VSSSArPSAiZmlsZTovL2Rpc2FibGUteGtiLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZGNkMjI3Mzg4YjU3NDg3ZDU0M2NhYjJmZDdhNjAyZDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDM4MmY0ZmIyOWI4ODY0N2UxM2YzYjRiYzI5MjYzMTM0MjcwNzQ3ZmMxNTljZmM1ZjdlM2FmMjM1ODhjODA2MyIKKworQ0ZMQUdTICs9ICItRF9HTlVfU09VUkNFIgorRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS14a2IgLS13aXRob3V0LWZvbnRjYWNoZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h2aW5mb18xLjEuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h2aW5mb18xLjEuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTY1ZWY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHZpbmZvXzEuMS4zLmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlByaW50IG91dCBYLVZpZGVvIGV4dGVuc2lvbiBhZGFwdG9yIGluZm9ybWF0aW9uIgorCitERVNDUklQVElPTiA9ICJ4dmluZm8gcHJpbnRzIG91dCB0aGUgY2FwYWJpbGl0aWVzIG9mIGFueSB2aWRlbyBhZGFwdG9ycyBcCithc3NvY2lhdGVkIHdpdGggdGhlIGRpc3BsYXkgdGhhdCBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBYLVZpZGVvIFwKK2V4dGVuc2lvbi4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI2NjQxMDFhZDdhMWRjNzU4YTRjNDEwOWJmOTc4ZTY4IgorREVQRU5EUyArPSAiIGxpYnh2IgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjU1ODM2MDE3NmI3MThkZWUzYzM5YmMwNjQ4YzBkMTBjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlmYmE4YjY4ZGFmNTM4NjNlNjZkNTAwNGZhOWM3MDNmY2VjZjY5ZGI0ZDE1MWVhMmQzZDg4NWQ2MjFlNmU1ZWIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94d2luaW5mb18xLjEuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h3aW5pbmZvXzEuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNDUyNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94d2luaW5mb18xLjEuMy5iYgpAQCAtMCwwICsxLDE1IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJXaW5kb3cgaW5mb3JtYXRpb24gdXRpbGl0eSBmb3IgWCIKKworREVTQ1JJUFRJT04gPSAiWHdpbmluZm8gaXMgYSB1dGlsaXR5IGZvciBkaXNwbGF5aW5nIGluZm9ybWF0aW9uIGFib3V0IFwKK3dpbmRvd3MuICBJbmZvcm1hdGlvbiBtYXkgaW5jbHVkZSB3aW5kb3cgcG9zaXRpb24sIHNpemUsIGNvbG9yIGRlcHRoLCBcCithbmQgYSBudW1iZXIgb2Ygb3RoZXIgaXRlbXMuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ODk3NmNkMzExNWY2ZmFmNjE1YWNjYzRlMDk0ZDkwZSIKK0RFUEVORFMgKz0gImxpYnhleHQgbGlieG11IgorCitQRSA9ICIwIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjc3N2JhZmI2NzQ1NTVlNDhmZDg0Mzc2MTgyNzA5MzEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjE4ZWIwZWE5NWJkOGRlNzkwM2RmYWEyNjQyMzgyMGM1MjNhZDE1OThiZTA3NTFkMmQ4YjZhMmMyM2IyM2ZmOCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtZXZkZXZfMi45LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWV2ZGV2XzIuOS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NDI4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWV2ZGV2XzIuOS4yLmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItaW5wdXQuaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gZXZlbnQgZGV2aWNlcyAoZXZkZXYpIGlucHV0IGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAiZXZkZXYgaXMgYW4gWG9yZyBpbnB1dCBkcml2ZXIgZm9yIExpbnV4J3MgZ2VuZXJpYyBldmVudCBcCitkZXZpY2VzLiBJdCB0aGVyZWZvcmUgc3VwcG9ydHMgYWxsIGlucHV0IGRldmljZXMgdGhhdCB0aGUga2VybmVsIGtub3dzIFwKK2Fib3V0LCBpbmNsdWRpbmcgbW9zdCBtaWNlIGFuZCBrZXlib2FyZHMuIFwKK1wKK1RoZSBldmRldiBkcml2ZXIgY2FuIHNlcnZlIGFzIGJvdGggYSBwb2ludGVyIGFuZCBhIGtleWJvYXJkIGlucHV0IFwKK2RldmljZSwgYW5kIG1heSBiZSB1c2VkIGFzIGJvdGggdGhlIGNvcmUga2V5Ym9hcmQgYW5kIHRoZSBjb3JlIHBvaW50ZXIuIFwKK011bHRpcGxlIGlucHV0IGRldmljZXMgYXJlIHN1cHBvcnRlZCBieSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhpcyBcCitkcml2ZXIsIHdpdGggb25lIExvYWQgZGlyZWN0aXZlIGZvciBldmRldiBpbiB0aGUgTW9kdWxlIHNlY3Rpb24gb2YgeW91ciBcCit4b3JnLmNvbmYgZm9yIGVhY2ggaW5wdXQgZGV2aWNlIHRoYXQgd2lsbCB1c2UgdGhpcyBkcml2ZXIuICIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZmVmZTMzYjFjZjBjYWNiYTBlNzJlM2IwZmEwZjBlMTYiCisKK0RFUEVORFMgKz0gIm10ZGV2IGxpYmV2ZGV2IgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTllZWJmMTcxZTZjN2JmZmM0MmQ0ZmM0MzBkNDc0NTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzkyMzI5YjUzMWFmYzY5MjhjY2RhOTRlNGI1MWE1NTIwZDRkZGY4ZWY5YTAwODkwYTVkMGQzMTg5OGFjZWZlYyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmRfMS44LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWtleWJvYXJkXzEuOC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZTUxYWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWtleWJvYXJkXzEuOC4xLmJiCkBAIC0wLDAgKzEsMTMgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItaW5wdXQuaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0ga2V5Ym9hcmQgaW5wdXQgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJrZXlib2FyZCBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3Iga2V5Ym9hcmRzLiBUaGUgXAorZHJpdmVyIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBPUy1wcm92aWRlZCBrZXlib2FyZCBpbnRlcmZhY2UuICBUaGUgZHJpdmVyIFwKK2Z1bmN0aW9ucyBhcyBhIGtleWJvYXJkIGlucHV0IGRldmljZSwgYW5kIG1heSBiZSB1c2VkIGFzIHRoZSBYIHNlcnZlcidzIFwKK2NvcmUga2V5Ym9hcmQuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYTIwOTlkMjRhYzllMzE2YTZkNGI5ZjIwYjNkNGUxMCIKKworU1JDX1VSSVttZDVzdW1dID0gIjk2Y2NjNDNkMzg5Yjk3MGFmYmQzODkzODc1ZGZkNjc4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFhYzhmZjM5YmY5ZGE3ZDJmYzdmZDZjMjQ1MTU3MjZlODEzODM0MGMwNTE4YWI4YzYwNmUwMDhjZjkzY2EyMTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWtleWJvYXJkX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYjA4ZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWtleWJvYXJkX2dpdC5iYgpAQCAtMCwwICsxLDE2IEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIGtleWJvYXJkIGlucHV0IGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAia2V5Ym9hcmQgaXMgYW4gWG9yZyBpbnB1dCBkcml2ZXIgZm9yIGtleWJvYXJkcy4gVGhlIFwKK2RyaXZlciBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgT1MtcHJvdmlkZWQga2V5Ym9hcmQgaW50ZXJmYWNlLiAgVGhlIGRyaXZlciBcCitmdW5jdGlvbnMgYXMgYSBrZXlib2FyZCBpbnB1dCBkZXZpY2UsIGFuZCBtYXkgYmUgdXNlZCBhcyB0aGUgWCBzZXJ2ZXIncyBcCitjb3JlIGtleWJvYXJkLiIKKworU1JDUkVWID0gIjNlMjhkNjhiNTBkMjkxOTM4NzM0ZTk2ODRiODI5NmNhODY0ZjM4OTIiCitQViA9ICIxLjMuMitnaXQke1NSQ1BWfSIKK1BSID0gIiR7SU5DX1BSfS4wIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL2RyaXZlci94Zjg2LWlucHV0LWtleWJvYXJkIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZS91bmJyZWFrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZS91bmJyZWFrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MzA4NjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlL3VuYnJlYWsucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVW5icmVhayB0aGUgbGludXggbW91c2UgZHJpdmVyIGJ5IHVzaW5nIGNvbmZpZy5oCisKK1JQIC0gNC8xMS8wNworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdpdC9zcmMvbG54X21vdXNlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvbG54X21vdXNlLmMJMjAwOC0xMS0wNCAyMzo0NjowNS4wMDAwMDAwMDAgKzAwMDAKKysrKyBnaXQvc3JjL2xueF9tb3VzZS5jCTIwMDgtMTEtMDQgMjM6NDY6MTUuMDAwMDAwMDAwICswMDAwCitAQCAtMyw4ICszLDggQEAKKyAgKiBDb3B5cmlnaHQgMTk5OSBieSBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMuCisgICovCisgCistI2lmZGVmIEhBVkVfWE9SR19DT05GSUdfSAorLSNpbmNsdWRlIDx4b3JnLWNvbmZpZy5oPgorKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorICNpbmNsdWRlIDxYMTEvWC5oPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZV8xLjkuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtbW91c2VfMS45LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYwYjc4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtbW91c2VfMS45LjEuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBtb3VzZSBpbnB1dCBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gIm1vdXNlIGlzIGFuIFhvcmcgaW5wdXQgZHJpdmVyIGZvciBtaWNlLiBUaGUgZHJpdmVyIFwKK3N1cHBvcnRzIG1vc3QgYXZhaWxhYmxlIG1vdXNlIHR5cGVzIGFuZCBpbnRlcmZhY2VzLiAgVGhlIG1vdXNlIGRyaXZlciBcCitmdW5jdGlvbnMgYXMgYSBwb2ludGVyIGlucHV0IGRldmljZSwgYW5kIG1heSBiZSB1c2VkIGFzIHRoZSBYIHNlcnZlcidzIFwKK2NvcmUgcG9pbnRlci4gTXVsdGlwbGUgbWljZSBhcmUgc3VwcG9ydGVkIGJ5IG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGlzIFwKK2RyaXZlci4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTkwZWE5ZjkwZDcyYjZkOTMyN2RlZGU1ZmZkYjJhNTEwIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzcwODViNjQ5YzVjMGIzMzM1NjViYTU2MmY1NzM5NTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzQ4NWQzNzU3NzljMDg0MDZmMDc4OWZlZWRkZTE1OTMzZGM3MDMxNThhMDg2ZGRhYzYzODU5OGY0NzlmYzVjZSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzlhMmU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZV9naXQuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBtb3VzZSBpbnB1dCBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gIm1vdXNlIGlzIGFuIFhvcmcgaW5wdXQgZHJpdmVyIGZvciBtaWNlLiBUaGUgZHJpdmVyIFwKK3N1cHBvcnRzIG1vc3QgYXZhaWxhYmxlIG1vdXNlIHR5cGVzIGFuZCBpbnRlcmZhY2VzLiAgVGhlIG1vdXNlIGRyaXZlciBcCitmdW5jdGlvbnMgYXMgYSBwb2ludGVyIGlucHV0IGRldmljZSwgYW5kIG1heSBiZSB1c2VkIGFzIHRoZSBYIHNlcnZlcidzIFwKK2NvcmUgcG9pbnRlci4gTXVsdGlwbGUgbWljZSBhcmUgc3VwcG9ydGVkIGJ5IG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGlzIFwKK2RyaXZlci4iCisKK1NSQ1JFViA9ICJlYTVjZmU4MDRlMTEyZjMyMGYxNGFkODk2Yzc4MDJkNTM1NTFkM2U2IgorUFYgPSAiMS4zLjArZ2l0JHtTUkNQVn0iCitQUiA9ICIke0lOQ19QUn0uMCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZSBcCisgICAgICAgICAgIGZpbGU6Ly91bmJyZWFrLnBhdGNoIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1zeW5hcHRpY3NfMS44LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljc18xLjguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWMxMjJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1zeW5hcHRpY3NfMS44LjIuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBzeW5hcHRpY3MgdG91Y2hwYWQgaW5wdXQgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJzeW5hcHRpY3MgaXMgYW4gWG9yZyBpbnB1dCBkcml2ZXIgZm9yIHRoZSB0b3VjaHBhZHMgZnJvbSBcCitTeW5hcHRpY3MgSW5jb3Jwb3JhdGVkLiBFdmVuIHRob3VnaCB0aGVzZSB0b3VjaHBhZHMgKGJ5IGRlZmF1bHQsIFwKK29wZXJhdGluZyBpbiBhIGNvbXBhdGliaWxpdHkgbW9kZSBlbXVsYXRpbmcgYSBzdGFuZGFyZCBtb3VzZSkgY2FuIGJlIFwKK2hhbmRsZWQgYnkgdGhlIG5vcm1hbCBldmRldiBvciBtb3VzZSBkcml2ZXJzLCB0aGlzIGRyaXZlciBhbGxvd3MgbW9yZSBcCithZHZhbmNlZCBmZWF0dXJlcyBvZiB0aGUgdG91Y2hwYWQgdG8gYmVjb21lIGF2YWlsYWJsZS4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU1YWFjZDM1MzVhNzQxODI0OTU1YzVlYjhmMDYxMzk4IgorCitTUkNfVVJJW21kNXN1bV0gPSAiOGVkNjhlOGNjNjc0ZGQ2MWFkYjI4MDcwNDc2NGFhZmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2IwZTE2NGViZDAyYTY4MGUwYzY5NTk1NWU3ODMwNTlmMzdlZGIwYzI2NTYzOThlMGE5NzJhZGM4ZTY5OGM4MCIKKworREVQRU5EUyArPSAibGlieGkgbXRkZXYgbGlieHRzdCBsaWJldmRldiIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vWDExL3hvcmcuY29uZi5kIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1zeW5hcHRpY3NfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1zeW5hcHRpY3NfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MGY2MzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljc19naXQuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBzeW5hcHRpY3MgdG91Y2hwYWQgaW5wdXQgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJzeW5hcHRpY3MgaXMgYW4gWG9yZyBpbnB1dCBkcml2ZXIgZm9yIHRoZSB0b3VjaHBhZHMgZnJvbSBcCitTeW5hcHRpY3MgSW5jb3Jwb3JhdGVkLiBFdmVuIHRob3VnaCB0aGVzZSB0b3VjaHBhZHMgKGJ5IGRlZmF1bHQsIFwKK29wZXJhdGluZyBpbiBhIGNvbXBhdGliaWxpdHkgbW9kZSBlbXVsYXRpbmcgYSBzdGFuZGFyZCBtb3VzZSkgY2FuIGJlIFwKK2hhbmRsZWQgYnkgdGhlIG5vcm1hbCBldmRldiBvciBtb3VzZSBkcml2ZXJzLCB0aGlzIGRyaXZlciBhbGxvd3MgbW9yZSBcCithZHZhbmNlZCBmZWF0dXJlcyBvZiB0aGUgdG91Y2hwYWQgdG8gYmVjb21lIGF2YWlsYWJsZS4iCisKK1NSQ1JFViA9ICI5MzRiYzAwMTJmOTQ4YzUyYWFkYzhlZGE5MTJmNzcyOGZiNzM5NGEyIgorUFYgPSAiMC4xNS4yK2dpdCR7U1JDUFZ9IgorUFIgPSAiJHtJTkNfUFJ9LjEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvZHJpdmVyL3hmODYtaW5wdXQtc3luYXB0aWNzIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworREVQRU5EUyArPSAibGlieGkgbXRkZXYgbGlieHRzdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtdm1tb3VzZV8xMy4xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXZtbW91c2VfMTMuMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MTViNDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXZtbW91c2VfMTMuMS4wLmJiCkBAIC0wLDAgKzEsMjYgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItaW5wdXQuaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gVk1XYXJlIG1vdXNlIGlucHV0IGRyaXZlciIKK0RFU0NSSVBUSU9OID0gIlRoZSB2bW1vdXNlIGRyaXZlciBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBzcGVjaWFsIFZNTW91c2UgXAorcHJvdG9jb2wgdGhhdCBpcyBwcm92aWRlZCBieSBWTXdhcmUgdmlydHVhbCBtYWNoaW5lcyB0byBnaXZlIGFic29sdXRlIFwKK3BvaW50ZXIgcG9zaXRpb25pbmcuIFRoZSB2bW1vdXNlIGRyaXZlciBpcyBjYXBhYmxlIG9mIGZhbGxpbmcgYmFjayB0byB0aGUgXAorc3RhbmRhcmQgJ21vdXNlJyBkcml2ZXIgaWYgYSBWTXdhcmUgdmlydHVhbCBtYWNoaW5lIGlzIG5vdCBkZXRlY3RlZC4iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NWUyZTQ2NGI3MjE5YzQ5NWFkM2ExNjQ2NWMyMjZlZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwYWY1NTg5NTdhYzFiZTFiMjg2MzcxMmMyNDc1ZGU4ZjRkN2YxNDkyMWZkMDFkZWQyZTJmZGU0OTIxYjE5MzE5IgorCitSREVQRU5EU18ke1BOfSArPSAieGY4Ni1pbnB1dC1tb3VzZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NjIyODQxYzA2OGE5ZDc2MjVmYmZlN2FjZmZiMWE4ZmMiCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoaS44Nnx4ODZfNjQpLiotbGludXgnCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwkjIFdlIGRvbid0IGNhcmUgYWJvdXQgaGFsCisJcm0gLXJmICR7RH0ke2RhdGFkaXJ9L2hhbC8KKwlybSAtcmYgJHtEfSR7bGliZGlyfS9oYWwvCit9CisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtdWRldi1ydWxlcy1kaXI9JHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3J1bGVzLmQiCisKK0ZJTEVTXyR7UE59ICs9ICIke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC8gJHtkYXRhZGlyfS9YMTEveG9yZy5jb25mLmQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWNpcnJ1c18xLjUuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tY2lycnVzXzEuNS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTg0NzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWNpcnJ1c18xLjUuMy5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIHhvcmctZHJpdmVyLXZpZGVvLmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIGNpcnJ1cyBkaXNwbGF5IGRyaXZlciIKK0RFU0NSSVBUSU9OID0gImNpcnJ1cyBpcyBhbiBYb3JnIGRyaXZlciBmb3IgQ2lycnVzIExvZ2ljIFZHQSBhZGFwdGVycy4gVGhlc2UgXAorZGV2aWNlcyBhcmUgbm90IHNvIGNvbW1vbiBpbiB0aGUgd2lsZCBhbnltb3JlLCBidXQgUUVNVSBjYW4gZW11bGF0ZSBvbmUsIHNvIFwKK3RoZSBkcml2ZXIgaXMgc3RpbGwgdXNlZnVsLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NmRkYzdjYTg2MGRjNWZkMDE0ZTdmMTYwZWE2OTkyOTUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ZDdkZmQ0Y2RjNDJhYThiNmU5MjM1MTBmYTAwYWQyYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlZGM4N2IyMGE1NTI1OTEyNmI1MjM5YjVjMWVmOTEzNDE5ZWFiN2RlZDBlZDEyYWU5YWU5ODk0NjBkNzM1MWFiIgorCitERVBFTkRTICs9ICJsaWJwY2lhY2Nlc3MiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWZiZGV2XzAuNC40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1mYmRldl8wLjQuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmU5YmQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1mYmRldl8wLjQuNC5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItdmlkZW8uaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gZmJkZXYgZGlzcGxheSBkcml2ZXIiCitERVNDUklQVElPTiA9ICJmYmRldiBpcyBhbiBYb3JnIGRyaXZlciBmb3IgZnJhbWVidWZmZXIgZGV2aWNlcy4gVGhpcyBpcyBhIG5vbi1hY2NlbGVyYXRlZCBkcml2ZXIuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kOGNiZDk5ZmZmNzczZjkyZTg0NDk0OGY3NGVmMGRmOCIKKworU1JDX1VSSVttZDVzdW1dID0gIjM5MzFjMGUxOWQ0NDFjYzU3NmRjMDg4ZjllYjlmZDczIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlkZDRiMzI2NDk4MjIzYWJiZmRmNzg2MDg5YTQ2ZWEzZGI0ZmE2YmJkMzQxMzA4ZWI0OGE5ZTAwYmMzZmQ1MWIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL2Fsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL2Fsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1ZGQzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitJbmNsdWRlIHhvcmctc2VydmVyLmggdG8gZml4IGJ1aWxkIGVycm9ycyBzZWVuIHdpdGggZ2xpYmMgMi4yMAorCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUvc3RyaW5nLmg6NjM0OjAsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3dvcmsvaTU4Ni1vZS1saW51eC94Zjg2LXZpZGVvLWludGVsLzJfMi45OS45MTItcjAveGY4Ni12aWRlby1pbnRlbC0yLjk5LjkxMi9zcmMvYmFja2xpZ2h0LmM6Mzk6CisvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL29zLmg6NTc5OjE6IGVycm9yOiBleHBlY3RlZCBpZGVudGlmaWVyIG9yICcoJyBiZWZvcmUgJ19fZXh0ZW5zaW9uX18nCisgc3RybmR1cChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBuKTsKKyBeCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogeGY4Ni12aWRlby1pbnRlbC0yLjk5LjkxMi9zcmMvYmFja2xpZ2h0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4Zjg2LXZpZGVvLWludGVsLTIuOTkuOTEyLm9yaWcvc3JjL2JhY2tsaWdodC5jCTIwMTQtMDQtMDkgMTA6NDE6MTguMDAwMDAwMDAwIC0wNzAwCisrKysgeGY4Ni12aWRlby1pbnRlbC0yLjk5LjkxMi9zcmMvYmFja2xpZ2h0LmMJMjAxNC0wOC0yOCAxODo1MjoyNS41MjQwNzA1ODcgLTA3MDAKK0BAIC0yOSw2ICsyOSw3IEBACisgI2luY2x1ZGUgImNvbmZpZy5oIgorICNlbmRpZgorIAorKyNpbmNsdWRlIDx4b3JnLXNlcnZlci5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvZGlzYWJsZS14MTEtZHJpMy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvZGlzYWJsZS14MTEtZHJpMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGE1MDhkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9kaXNhYmxlLXgxMS1kcmkzLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1RoZXNlIG1vZHVsZXMgYXJlIG9ubHkgdXNlZCBmb3IgdGVzdHMgdGhhdCBkb24ndCBnZXQgaW5zdGFsbGVkLCBhbmQgdGhlCithdXRvbWF0aWMgZGV0ZWN0aW9uIHdpdGhvdXQgZXhwbGljaXQgZGVwZW5kZW5jaWVzIG1lYW5zIHRoYXQgYSBidWlsZCBjYW4gZmluZAorZS5nLiB4c2htZmVuY2UgYXQgY29uZmlndXJlIHRpbWUgYnV0IHRoZW4gaXQncyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgc3lzcm9vdCBieQordGhlIHRpbWUgY29tcGlsZSBoYXBwZW5zLgorCitBcyB0aGUgdGVzdHMgZG9uJ3QgZ2V0IGluc3RhbGxlZCwganVzdCBkaXNhYmxlIHRoZSBjaGVja3MuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Utc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiZDY1NGYzLi43OGEwZTBkIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yNTEgKzI1MSBAQCBmaQorLVBLR19DSEVDS19NT0RVTEVTKFgxMV9EUkkzLCBbeGNiLWRyaTMgeGNiLXN5bmMgeGNiLXByZXNlbnQgeDExLXhjYiB4c2htZmVuY2UgeDExIHhyZW5kZXIgeGV4dCBsaWJkcm1dLCBbeDExX2RyaTM9InllcyJdLCBbeDExX2RyaTM9Im5vIl0pCisrI1BLR19DSEVDS19NT0RVTEVTKFgxMV9EUkkzLCBbeGNiLWRyaTMgeGNiLXN5bmMgeGNiLXByZXNlbnQgeDExLXhjYiB4c2htZmVuY2UgeDExIHhyZW5kZXIgeGV4dCBsaWJkcm1dLCBbeDExX2RyaTM9InllcyJdLCBbeDExX2RyaTM9Im5vIl0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL3NuYS1Qcm90ZWN0LWFnYWluc3QtQUJJLWJyZWFrYWdlLWluLXJlY2VudC12ZXJzaW9ucy0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL3NuYS1Qcm90ZWN0LWFnYWluc3QtQUJJLWJyZWFrYWdlLWluLXJlY2VudC12ZXJzaW9ucy0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg5ZDUyZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvc25hLVByb3RlY3QtYWdhaW5zdC1BQkktYnJlYWthZ2UtaW4tcmVjZW50LXZlcnNpb25zLS5wYXRjaApAQCAtMCwwICsxLDcwIEBACitGcm9tIDdmZTJiMjk0ODY1MjQ0M2ZmNDNkOTA3ODU1YmQ3YTA1MWQ1NGQzMDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KK0RhdGU6IFRodSwgMTkgTWFyIDIwMTUgMjM6MTQ6MTcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gc25hOiBQcm90ZWN0IGFnYWluc3QgQUJJIGJyZWFrYWdlIGluIHJlY2VudCB2ZXJzaW9ucyBvZgorIGxpYmRybQorCitjb21taXQgN2ZlMmIyOTQ4NjUyNDQzZmY0M2Q5MDc4NTViZDdhMDUxZDU0ZDMwOSB1cHN0cmVhbS4KKworU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL3NyYy9zbmEva2dlbS5jIGIvc3JjL3NuYS9rZ2VtLmMKK2luZGV4IDExZjA4MjhmMmJiYy4uNmYxNmNiYWM4N2YyIDEwMDY0NAorLS0tIGEvc3JjL3NuYS9rZ2VtLmMKKysrKyBiL3NyYy9zbmEva2dlbS5jCitAQCAtMTgyLDYgKzE4MiwxNSBAQCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY2FjaGluZyB7CisgI2RlZmluZSBMT0NBTF9JT0NUTF9JOTE1X0dFTV9TRVRfQ0FDSElORyBEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBMT0NBTF9JOTE1X0dFTV9TRVRfQ0FDSElORywgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NhY2hpbmcpCisgI2RlZmluZSBMT0NBTF9JT0NUTF9JOTE1X0dFTV9HRVRfQ0FDSElORyBEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBMT0NBTF9JOTE1X0dFTV9HRVRfQ0FDSElORywgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NhY2hpbmcpCisgCisrc3RydWN0IGxvY2FsX2k5MTVfZ2VtX21tYXAgeworKwl1aW50MzJfdCBoYW5kbGU7CisrCXVpbnQzMl90IHBhZDsKKysJdWludDY0X3Qgb2Zmc2V0OworKwl1aW50NjRfdCBzaXplOworKwl1aW50NjRfdCBhZGRyX3B0cjsKKyt9OworKyNkZWZpbmUgTE9DQUxfSU9DVExfSTkxNV9HRU1fTU1BUCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX01NQVAsIHN0cnVjdCBsb2NhbF9pOTE1X2dlbV9tbWFwKQorKworIHN0cnVjdCBsb2NhbF9pOTE1X2dlbV9tbWFwMiB7CisgCXVpbnQzMl90IGhhbmRsZTsKKyAJdWludDMyX3QgcGFkOworQEAgLTUxNCwxNSArNTIzLDE1IEBAIHJldHJ5X3djOgorIAorIHN0YXRpYyB2b2lkICpfX2tnZW1fYm9fbWFwX19jcHUoc3RydWN0IGtnZW0gKmtnZW0sIHN0cnVjdCBrZ2VtX2JvICpibykKKyB7CistCXN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcCBtbWFwX2FyZzsKKysJc3RydWN0IGxvY2FsX2k5MTVfZ2VtX21tYXAgYXJnOworIAlpbnQgZXJyOworIAorIHJldHJ5OgorLQlWR19DTEVBUihtbWFwX2FyZyk7CistCW1tYXBfYXJnLmhhbmRsZSA9IGJvLT5oYW5kbGU7CistCW1tYXBfYXJnLm9mZnNldCA9IDA7CistCW1tYXBfYXJnLnNpemUgPSBieXRlcyhibyk7CistCWlmICgoZXJyID0gZG9faW9jdGwoa2dlbS0+ZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9NTUFQLCAmbW1hcF9hcmcpKSkgeworKwlWR19DTEVBUihhcmcpOworKwlhcmcuaGFuZGxlID0gYm8tPmhhbmRsZTsKKysJYXJnLm9mZnNldCA9IDA7CisrCWFyZy5zaXplID0gYnl0ZXMoYm8pOworKwlpZiAoKGVyciA9IGRvX2lvY3RsKGtnZW0tPmZkLCBMT0NBTF9JT0NUTF9JOTE1X0dFTV9NTUFQLCAmYXJnKSkpIHsKKyAJCWFzc2VydChlcnIgIT0gRUlOVkFMKTsKKyAKKyAJCWlmIChfX2tnZW1fdGhyb3R0bGVfcmV0aXJlKGtnZW0sIDApKQorQEAgLTUzNiwxMCArNTQ1LDEwIEBAIHJldHJ5OgorIAkJcmV0dXJuIE5VTEw7CisgCX0KKyAKKy0JVkcoVkFMR1JJTkRfTUFLRV9NRU1fREVGSU5FRChtbWFwX2FyZy5hZGRyX3B0ciwgYnl0ZXMoYm8pKSk7CisrCVZHKFZBTEdSSU5EX01BS0VfTUVNX0RFRklORUQoYXJnLmFkZHJfcHRyLCBieXRlcyhibykpKTsKKyAKKyAJREJHKCgiJXM6IGNhY2hpbmcgQ1BVIHZtYSBmb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgYm8tPmhhbmRsZSkpOworLQlyZXR1cm4gYm8tPm1hcF9fY3B1ID0gKHZvaWQgKikodWludHB0cl90KW1tYXBfYXJnLmFkZHJfcHRyOworKwlyZXR1cm4gYm8tPm1hcF9fY3B1ID0gKHZvaWQgKikodWludHB0cl90KWFyZy5hZGRyX3B0cjsKKyB9CisgCisgc3RhdGljIGludCBnZW1fd3JpdGUoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsCistLSAKKzIuNC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvdWRldi1mc3RhdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvdWRldi1mc3RhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTY3NWVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC91ZGV2LWZzdGF0LnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Zyb20gMTJhZjhhNTc1ZDE1MThkNDA0MTZmODMxOTUwNDkxNTdjM2EwNjJhNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgorRGF0ZTogVHVlLCAyNCBGZWIgMjAxNSAxNToyNTo0MCArMDAwMAorU3ViamVjdDogc25hOiB1ZGV2IGludGVncmF0aW9uIGRlcGVuZHMgb24gZnN0YXQgYW5kIHN5cy9zdGF0LmgKKworc3JjL3NuYS9zbmFfZHJpdmVyLmM6IEluIGZ1bmN0aW9uICdzbmFfaGFuZGxlX3VldmVudHMnOgorc3JjL3NuYS9zbmFfZHJpdmVyLmM6NzU5OjI6IGVycm9yOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbiAnZnN0YXQnIFstV2Vycm9yPWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uXQorCitBbHNvIHRha2UgdGhlIG9wcG9ydHVuaXR5IHRvIGluY2x1ZGUgdWRldiBzdXBwb3J0IGluIHRoZSBjb25maWd1cmUKK3N1bW1hcnkuCisKK1NpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA3NDc2ZTJiLi5kZTNhNGIzIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xOTcsMTEgKzE5NywxNSBAQCBBQ19BUkdfRU5BQkxFKHVkZXYsCisgCisgaWYgdGVzdCAieCRVREVWIiAhPSAieG5vIjsgdGhlbgorIAlQS0dfQ0hFQ0tfTU9EVUxFUyhVREVWLCBbbGlidWRldl0sIFt1ZGV2PSJ5ZXMiXSwgW3VkZXY9Im5vIl0pCisrCUFDX0NIRUNLX0hFQURFUlMoW3N5cy9zdGF0LmhdLCBbXSwgW3VkZXY9Im5vIl0pCisgCWlmIHRlc3QgIngkVURFViIgPSAieHllcyIgLWEgIngkdWRldiIgIT0gInh5ZXMiOyB0aGVuCisgCQlBQ19NU0dfRVJST1IoW3VkZXYgc3VwcG9ydCByZXF1ZXN0ZWQgYnV0IG5vdCBmb3VuZCAobGlidWRldildKQorIAlmaQorIAlpZiB0ZXN0ICJ4JHVkZXYiID0gInh5ZXMiOyB0aGVuCisgCQlBQ19ERUZJTkUoSEFWRV9VREVWLDEsW0VuYWJsZSB1ZGV2LWJhc2VkIG1vbml0b3IgaG90cGx1ZyBkZXRlY3Rpb25dKQorKwkJdWRldl9tc2c9IiB5ZXMiCisrCWVsc2UKKysJCXVkZXZfbXNnPSIgbm8iCisgCWZpCisgZmkKKyAKK0BAIC05MTEsNiArOTE1LDcgQEAgZWNobyAiICBTdXBwb3J0IGZvciBLZXJuZWwgTW9kZSBTZXR0aW5nPyAkS01TIgorIGVjaG8gIiAgU3VwcG9ydCBmb3IgbGVnYWN5IFVzZXIgTW9kZSBTZXR0aW5nIChmb3IgaTgxMCk/ICRVTVMiCisgZWNobyAiICBTdXBwb3J0IGZvciBEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlOiRkcmlfbXNnIgorIGVjaG8gIiAgU3VwcG9ydCBmb3IgWHYgbW90aW9uIGNvbXBlbnNhdGlvbiAoWHZNQyBhbmQgbGliWHZNQyk6JHh2bWNfbXNnIgorK2VjaG8gIiAgU3VwcG9ydCBmb3IgZGlzcGxheSBob3RwbHVnIG5vdGlmaWNhdGlvbnMgKHVkZXYpOiR1ZGV2X21zZyIKKyBlY2hvICIgIEJ1aWxkIGFkZGl0aW9uYWwgdG9vbHMgYW5kIHV0aWxpdGllcz8kdG9vbHNfbXNnIgorIGlmIHRlc3QgLW4gIiR4cF9tc2ciOyB0aGVuCisgZWNobyAiICBFeHBlcmltZW50YWwgc3VwcG9ydDokeHBfbXNnIgorZGlmZiAtLWdpdCBhL3NyYy9zbmEvc25hX2RyaXZlci5jIGIvc3JjL3NuYS9zbmFfZHJpdmVyLmMKK2luZGV4IDhjMGQwYjUuLmJjMjBlZjAgMTAwNjQ0CistLS0gYS9zcmMvc25hL3NuYV9kcml2ZXIuYworKysrIGIvc3JjL3NuYS9zbmFfZHJpdmVyLmMKK0BAIC03NDAsNiArNzQwLDggQEAgc25hX3dha2V1cF9oYW5kbGVyKFdBS0VVUEhBTkRMRVJfQVJHU19ERUNMKQorIH0KKyAKKyAjaWYgSEFWRV9VREVWCisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCisgc3RhdGljIHZvaWQKKyBzbmFfaGFuZGxlX3VldmVudHMoaW50IGZkLCB2b2lkICpjbG9zdXJlKQorIHsKKy0tIAorY2dpdCB2MC4xMC4yCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsXzIuOTkuOTE3LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbF8yLjk5LjkxNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmYxNDU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbF8yLjk5LjkxNy5iYgpAQCAtMCwwICsxLDQwIEBACityZXF1aXJlIHhvcmctZHJpdmVyLXZpZGVvLmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIEludGVsIGludGVncmF0ZWQgZ3JhcGhpY3MgY2hpcHNldHMgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJpbnRlbCBpcyBhbiBYb3JnIGRyaXZlciBmb3IgSW50ZWwgaW50ZWdyYXRlZCBncmFwaGljcyBcCitjaGlwc2V0cy4gVGhlIGRyaXZlciBzdXBwb3J0cyBkZXB0aHMgOCwgMTUsIDE2IGFuZCAyNC4gT24gc29tZSBjaGlwc2V0cywgXAordGhlIGRyaXZlciBzdXBwb3J0cyBoYXJkd2FyZSBhY2NlbGVyYXRlZCAzRCB2aWEgdGhlIERpcmVjdCBSZW5kZXJpbmcgXAorSW5mcmFzdHJ1Y3R1cmUgKERSSSkuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04NzMwYWQ1OGQxMWM3YmJhZDlhNzA2NmQ2OWY3ODA4ZSIKKworU1JDX1VSSSArPSAiZmlsZTovL2Rpc2FibGUteDExLWRyaTMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2Fsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3NuYS1Qcm90ZWN0LWFnYWluc3QtQUJJLWJyZWFrYWdlLWluLXJlY2VudC12ZXJzaW9ucy0ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3VkZXYtZnN0YXQucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYTE5NmE2NmU1MmMwYzYyNGZlNWQzNTBhZjdhNWU3YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMGI3ODFlZWEwNTU1ODI4MjBhMTIzYzQ3YjYyNDExYmRmNmFhYmY0ZjAzZGMwNTY4ZmFlYzU1ZmFmOTY2N2M5IgorCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSBkcm0gbGlicGNpYWNjZXNzIHBpeG1hbiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInh2bWMgc25hIHVkZXYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnZHJpIGRyaTEgZHJpMicsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbZHJpXSA9ICItLWVuYWJsZS1kcmksLS1kaXNhYmxlLWRyaSIKK1BBQ0tBR0VDT05GSUdbZHJpMV0gPSAiLS1lbmFibGUtZHJpMSwtLWRpc2FibGUtZHJpMSx4Zjg2ZHJpcHJvdG8iCitQQUNLQUdFQ09ORklHW2RyaTJdID0gIi0tZW5hYmxlLWRyaTIsLS1kaXNhYmxlLWRyaTIsZHJpMnByb3RvIgorUEFDS0FHRUNPTkZJR1tkcmkzXSA9ICItLWVuYWJsZS1kcmkzLC0tZGlzYWJsZS1kcmkzLGRyaTNwcm90byIKK1BBQ0tBR0VDT05GSUdbc25hXSA9ICItLWVuYWJsZS1zbmEsLS1kaXNhYmxlLXNuYSIKK1BBQ0tBR0VDT05GSUdbdXhhXSA9ICItLWVuYWJsZS11eGEsLS1kaXNhYmxlLXV4YSIKK1BBQ0tBR0VDT05GSUdbdWRldl0gPSAiLS1lbmFibGUtdWRldiwtLWRpc2FibGUtdWRldix1ZGV2IgorUEFDS0FHRUNPTkZJR1t4dm1jXSA9ICItLWVuYWJsZS14dm1jLC0tZGlzYWJsZS14dm1jLGxpYnh2bWMgeGNiLXV0aWwiCitQQUNLQUdFQ09ORklHW3Rvb2xzXSA9ICItLWVuYWJsZS10b29scywtLWRpc2FibGUtdG9vbHMsbGlieGluZXJhbWEgbGlieHJhbmRyIGxpYnhkYW1hZ2UgbGlieGZpeGVzIGxpYnhjdXJzb3IgbGlieHRzdCBsaWJ4ZXh0IGxpYnhyZW5kZXIiCisKKyMgLS1lbmFibGUta21zLW9ubHkgb3B0aW9uIGlzIHJlcXVpcmVkIGJ5IFJPT1RMRVNTX1gKK0VYVFJBX09FQ09ORiArPSAnJHtAYmFzZV9jb25kaXRpb25hbCggIlJPT1RMRVNTX1giLCAiMSIsICIgLS1lbmFibGUta21zLW9ubHkiLCAiIiwgZCApfScKKworQ09NUEFUSUJMRV9IT1NUID0gJyhpLjg2fHg4Nl82NCkuKi1saW51eCcKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vcG9sa2l0LTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXAvMDAwMS1kcm1tb2RlX291dHB1dF9kcG1zLVJlcGxhY2UtbG9naWNhbC13aXRoLWJpdHdpc2Utb3BlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwLzAwMDEtZHJtbW9kZV9vdXRwdXRfZHBtcy1SZXBsYWNlLWxvZ2ljYWwtd2l0aC1iaXR3aXNlLW9wZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWU3N2QzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwLzAwMDEtZHJtbW9kZV9vdXRwdXRfZHBtcy1SZXBsYWNlLWxvZ2ljYWwtd2l0aC1iaXR3aXNlLW9wZS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIGZjNjUzY2EzYjM2NDM1YWVhMjgxYWU0MDlmYjkwZjg1ZTFiYzBkODEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA3IFNlcCAyMDE1IDA4OjQ0OjEzICswMDAwCitTdWJqZWN0OiBbZnJlZWRyZW5vXVtQQVRDSF0gZHJtbW9kZV9vdXRwdXRfZHBtczogUmVwbGFjZSBsb2dpY2FsICYmIHdpdGggYml0d2lzZSAmCisgb3BlcmF0aW9uCisKK1RoaXMgaXMgYSBtYXNrIGNhbGN1bGF0aW9uIHNvIGJpdGJ3aXNlICYgc2hvdWxkIGhhdmUgYmVlbiB1c2VkCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKKyBzcmMvZHJtbW9kZV9kaXNwbGF5LmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZHJtbW9kZV9kaXNwbGF5LmMgYi9zcmMvZHJtbW9kZV9kaXNwbGF5LmMKK2luZGV4IGMzY2Y0ZjguLmViNTRiNTkgMTAwNjQ0CistLS0gYS9zcmMvZHJtbW9kZV9kaXNwbGF5LmMKKysrKyBiL3NyYy9kcm1tb2RlX2Rpc3BsYXkuYworQEAgLTc3Nyw3ICs3NzcsNyBAQCBkcm1tb2RlX291dHB1dF9kcG1zKHhmODZPdXRwdXRQdHIgb3V0cHV0LCBpbnQgbW9kZSkKKyAKKyAJZm9yIChpID0gMDsgaSA8IGtvdXRwdXQtPmNvdW50X3Byb3BzOyBpKyspIHsKKyAJCXByb3BzID0gZHJtTW9kZUdldFByb3BlcnR5KGRybW1vZGUtPmZkLCBrb3V0cHV0LT5wcm9wc1tpXSk7CistCQlpZiAocHJvcHMgJiYgKHByb3BzLT5mbGFncyAmJiBEUk1fTU9ERV9QUk9QX0VOVU0pKSB7CisrCQlpZiAocHJvcHMgJiYgKHByb3BzLT5mbGFncyAmIERSTV9NT0RFX1BST1BfRU5VTSkpIHsKKyAJCQlpZiAoIXN0cmNtcChwcm9wcy0+bmFtZSwgIkRQTVMiKSkgeworIAkJCQltb2RlX2lkID0ga291dHB1dC0+cHJvcHNbaV07CisgCQkJCWRybU1vZGVGcmVlUHJvcGVydHkocHJvcHMpOworLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBfMC40LjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBfMC40LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY2ODJlZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcF8wLjQuMy5iYgpAQCAtMCwwICsxLDQzIEBACityZXF1aXJlIHhvcmctZHJpdmVyLXZpZGVvLmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIFRleGFzIEluc3RydW1lbnRzIE9NQVAgZnJhbWVidWZmZXIgZHJpdmVyIgorCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIFRJIE9NQVAgaW50ZWdyYXRlZCBncmFwaGljcyBjaGlwc2V0cyBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gIk9wZW4tc291cmNlIFgub3JnIGdyYXBoaWNzIGRyaXZlciBmb3IgVEkgT01BUCBncmFwaGljcyBcCitDdXJyZW50bHkgcmVsaWVzIG9uIGEgY2xvc2VkLXNvdXJjZSBzdWJtb2R1bGUgZm9yIEVYQSBhY2NlbGVyYXRpb24gb24gXAordGhlIGZvbGxvd2luZyBjaGlwc2V0czogXAorICArIE9NQVAzNDMwIFwKKyAgKyBPTUFQMzYzMCBcCisgICsgT01BUDQ0MzAgXAorICArIE9NQVA0NDYwIFwKKyAgKyBPTUFQNTQzMCBcCisgICsgT01BUDU0MzIgXAorXAorTk9URTogdGhpcyBkcml2ZXIgaXMgd29yayBpbiBwcm9ncmVzcy4uICB5b3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byB0cnkgXAorYW5kIHVzZSBpdCB5ZXQuICBUaGUgQVBJL0FCSSBiZXR3ZWVuIGRyaXZlciBhbmQga2VybmVsLCBhbmQgZHJpdmVyIGFuZCBcCithY2NlbGVyYXRpb24gc3VibW9kdWxlcyBpcyBub3Qgc3RhYmxlIHlldC4gIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHRoZSBcCitvbWFwZHJtIGtlcm5lbCBkcml2ZXIgdy8gR0VNIHN1cHBvcnQuIFwKKyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMGNlNWRlM2IxMTEzMTVlYTY1MmE1Zjc0ZWMwYzYwMiIKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIGxpYmRybSB4Zjg2ZHJpcHJvdG8iCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLWRybW1vZGVfb3V0cHV0X2RwbXMtUmVwbGFjZS1sb2dpY2FsLXdpdGgtYml0d2lzZS1vcGUucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiZTM1ZGFmNmZhNGI3NTA5MmNjNGE4OTc4YzQzN2JjNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkYjFlMGU2OWZkNGM0YzhmZGNhNWVmMmNiMDQ0N2JjY2Q3NTE4YTcxODQ5NTg3NmE2OTA0YmVmNTdiMzk5ODZkIgorCitDRkxBR1MgKz0gIiAtSSR7U1RBR0lOR19JTkNESVJ9L3hvcmcgIgorCisjIFVzZSBvdmVybGF5IDIgb24gb21hcDMgdG8gZW5hYmxlIG90aGVyIGFwcHMgdG8gdXNlIG92ZXJsYXkgMSAoZS5nLiBkbWFpIG9yIG9tYXBmYnBsYXkpCitkb19jb21waWxlX3ByZXBlbmRfYXJtdjdhICgpIHsKKyAgICAgICAgc2VkIC1pIC1lIHM6ZmIxOmZiMjpnICR7U30vc3JjL29tYXBfeHYuYworfQorCitweXRob24gKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucyAoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCInb3BlbmdsJyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTIikKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMS1QcmV2ZW50cy1vbWFwZmItZnJvbS1mcm9tLWNyYXNoaW5nLXdoZW4tcGl4ZWxjbG9jay1vLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMS1QcmV2ZW50cy1vbWFwZmItZnJvbS1mcm9tLWNyYXNoaW5nLXdoZW4tcGl4ZWxjbG9jay1vLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0Y2YxNmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAxLVByZXZlbnRzLW9tYXBmYi1mcm9tLWZyb20tY3Jhc2hpbmctd2hlbi1waXhlbGNsb2NrLW8ucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSAyOGMwMDZjOTRlNTdlYTcxZGYxMWVjNGZmZjc5ZDdmZmNmYzQ4NjBmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmFyIE1jS29uIDxGYXJNY0tvbkBidWdsYWJzLm5ldD4KK0RhdGU6IFR1ZSwgMyBNYXkgMjAxMSAyMDo1OTowNCArMDMwMAorU3ViamVjdDogW1BBVENIXSBQcmV2ZW50cyBvbWFwZmIgZnJvbSBmcm9tIGNyYXNoaW5nIHdoZW4gcGl4ZWxjbG9jayBvZiAwIGlzCisgc2VudCB0byBpdC4KKworRHVlIHRvIGEgTGludXggZGVzaWduIGJ1ZyBpdCBpcyBlYXN5IHRvIGdldCBhIHBpeGVsY2xvY2sgc2V0IHRvIHplcm8KK3doZW4gY2hhbmdpbmcgZGlzcGxheXMgYXQgcnVudGltZS4KKy0tLQorIHNyYy9vbWFwZmItb3V0cHV0LmMgfCA5ICsrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLW91dHB1dC5jIGIvc3JjL29tYXBmYi1vdXRwdXQuYworaW5kZXggZjhiNGRiMy4uNGQ1OTI2NSAxMDA2NDQKKy0tLSBhL3NyYy9vbWFwZmItb3V0cHV0LmMKKysrKyBiL3NyYy9vbWFwZmItb3V0cHV0LmMKK0BAIC0xMjUsOCArMTI1LDEzIEBAIE9NQVBGQk91dHB1dEdldE1vZGVzKHhmODZPdXRwdXRQdHIgb3V0cHV0KQorIAkvKiBPbmx5IHBvcHVsYXRlIHRoZSBuYXRpdmUgKGN1cnJlbnQpIG1vZGUgKi8KKyAJbW9kZSA9IGNhbGxvYygxLCBzaXplb2YoRGlzcGxheU1vZGVSZWMpKTsKKyAJbW9kZS0+dHlwZSAgICAgIHw9IE1fVF9QUkVGRVJSRUQ7CistCW1vZGUtPkNsb2NrID0gUElDT1MyS0haKG9mYi0+c3RhdGVfaW5mby5waXhjbG9jayk7CistCW1vZGUtPlN5bnRoQ2xvY2sgPSBQSUNPUzJLSFoob2ZiLT5zdGF0ZV9pbmZvLnBpeGNsb2NrKTsKKysJaWYgKG9mYi0+c3RhdGVfaW5mby5waXhjbG9jayA9PSAwKSB7CisrCQltb2RlLT5DbG9jayA9IDA7CisrCQltb2RlLT5TeW50aENsb2NrID0gMDsKKysJfSBlbHNlIHsKKysJCW1vZGUtPkNsb2NrID0gUElDT1MyS0haKG9mYi0+c3RhdGVfaW5mby5waXhjbG9jayk7CisrCQltb2RlLT5TeW50aENsb2NrID0gUElDT1MyS0haKG9mYi0+c3RhdGVfaW5mby5waXhjbG9jayk7CisrCX0KKyAJbW9kZS0+SERpc3BsYXkgICA9IG9mYi0+c3RhdGVfaW5mby54cmVzOworIAltb2RlLT5IU3luY1N0YXJ0ID0gbW9kZS0+SERpc3BsYXkKKyAJICAgICAgICAgICAgICAgICAgKyBvZmItPnN0YXRlX2luZm8ucmlnaHRfbWFyZ2luOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAxLVJldmVydC1TZXQtYS1sYXJnZS1DUlRDLXVwcGVyLWxpbWl0LXRvLW5vdC1wcnVuZS1sYXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAxLVJldmVydC1TZXQtYS1sYXJnZS1DUlRDLXVwcGVyLWxpbWl0LXRvLW5vdC1wcnVuZS1sYXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZiMDFkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDEtUmV2ZXJ0LVNldC1hLWxhcmdlLUNSVEMtdXBwZXItbGltaXQtdG8tbm90LXBydW5lLWxhci5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tIDhmYjdkMGY5OWQ0YWZiYjU3NGIzMGNiNGYxZTY2YThmODlkOTRhZDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogV2VkLCAyNiBKYW4gMjAxMSAxMjowNDozNiArMDEwMAorU3ViamVjdDogW1BBVENIIDEvNl0gUmV2ZXJ0ICJTZXQgYSBsYXJnZSBDUlRDIHVwcGVyIGxpbWl0IHRvIG5vdCBwcnVuZSBsYXJnZXIKKyByZXNvbHV0aW9ucyIKKworUGljdHVyZSBpcyBnYXJibGVkIGFmdGVyIHN3aXRjaGluZyByZXNvbHV0aW9ucywgc28gcmV2ZXJ0IGl0LgorVmlydHVhbCBzaXplIHRvbyBiaWcsIHJldmVydCB0aGUgY29tbWl0IDljNGQ3NTkyZGNiN2RjMjBhNDhhNmY5NDFkOWQ5NGJkNzNkMzQxNTMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvb21hcGZiLWNydGMuYyB8IDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi1jcnRjLmMgYi9zcmMvb21hcGZiLWNydGMuYworaW5kZXggOWFhYTUyZi4uY2JlZmYzNSAxMDA2NDQKKy0tLSBhL3NyYy9vbWFwZmItY3J0Yy5jCisrKysgYi9zcmMvb21hcGZiLWNydGMuYworQEAgLTE5MCwxMyArMTkwLDEzIEBAIE9NQVBGQkNSVENJbml0KFNjcm5JbmZvUHRyIHBTY3JuKQorIAkgKiBJbiBwcmFjdGlzZSwgdGhpcyBkb2Vzbid0IHNlZW0gdG8gYmUgc3VwcG9ydGVkLgorIAkgKiAobm8gd2F5IHRvIHNldHVwIHRoZSBvdmVybGF5IG9mZnNldC9iYXNlIGFkZHJlc3MpCisgCSAqLworLQkgLyogRklYTUU6IGZpZ3VyZSBvdXQgd2hhdCBtYWtlcyBzZW5zZSBoZXJlLiBBIGtub3duIG1heCByZXNvbHV0aW9uPworLQkgICogZnJhbWVidWZmZXIgc2l6ZT8KKy0JICAqLworIAl4Zjg2Q3J0Y1NldFNpemVSYW5nZShwU2NybiwKKy0JICAgICAgICAgICAgICAgICAgICAgOCwgOCwgMjA0OCwgMjA0OCk7CisrCSAgICAgICAgICAgICAgICAgICAgIDgsIDgsCisrCSAgICAgICAgICAgICAgICAgICAgIG9mYi0+c3RhdGVfaW5mby54cmVzX3ZpcnR1YWwsCisrCSAgICAgICAgICAgICAgICAgICAgIG9mYi0+c3RhdGVfaW5mby55cmVzX3ZpcnR1YWwpOworIAorIAlvZmItPmNydGMgPSB4Zjg2Q3J0Y0NyZWF0ZShwU2NybiwgJk9NQVBGQkNydGNGdW5jcyk7CisrCisgfQorIAorIAorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAyLVJldmVydC1TZXQtdmlydHVhbC1zaXplLXdoZW4tY29uZmlndXJpbmctZnJhbWVidWZmZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAyLVJldmVydC1TZXQtdmlydHVhbC1zaXplLXdoZW4tY29uZmlndXJpbmctZnJhbWVidWZmZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzYTk4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDItUmV2ZXJ0LVNldC12aXJ0dWFsLXNpemUtd2hlbi1jb25maWd1cmluZy1mcmFtZWJ1ZmZlci5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDg1NWMzMzNhYzBkMTYzNTBmODk1ZjFkMWI5MzkxZTljYmIwYjZkYjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogV2VkLCAyNiBKYW4gMjAxMSAxMzoyNzoyMCArMDEwMAorU3ViamVjdDogW1BBVENIIDIvNl0gUmV2ZXJ0ICJTZXQgdmlydHVhbCBzaXplIHdoZW4gY29uZmlndXJpbmcgZnJhbWVidWZmZXIiCisKK1ZpcnR1YWwgc2l6ZSB0b28gYmlnLCBzbyByZXZlcnQgaXQuCisKK1RoaXMgcmV2ZXJ0cyBjb21taXQgMjY1M2VmMDc4ODNmYmQxYTVlNzAyNWY5MzAwY2Y4OWI3OWJhNDI5YS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9vbWFwZmItY3J0Yy5jIHwgMiAtLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi1jcnRjLmMgYi9zcmMvb21hcGZiLWNydGMuYworaW5kZXggY2JlZmYzNS4uOTY1NWRiMiAxMDA2NDQKKy0tLSBhL3NyYy9vbWFwZmItY3J0Yy5jCisrKysgYi9zcmMvb21hcGZiLWNydGMuYworQEAgLTk4LDggKzk4LDYgQEAgT01BUEZCQ3J0Y0NvbW1pdENoYW5nZU1vZGUgKHhmODZDcnRjUHRyIGNydGMpCisgCXYgPSBvZmItPnN0YXRlX2luZm87CisgCXYueHJlcyA9IG1vZGUtPkhEaXNwbGF5OworIAl2LnlyZXMgPSBtb2RlLT5WRGlzcGxheTsKKy0Jdi54cmVzX3ZpcnR1YWwgPSBjcnRjLT5zY3JuLT52aXJ0dWFsWDsKKy0Jdi55cmVzX3ZpcnR1YWwgPSBjcnRjLT5zY3JuLT52aXJ0dWFsWTsKKyAJdi5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVzsKKyAJdi5waXhjbG9jayA9IEtIWjJQSUNPUyhtb2RlLT5DbG9jayA/IG1vZGUtPkNsb2NrIDogNTYwMDApOworIAl2LmxlZnRfbWFyZ2luID0gbW9kZS0+SFRvdGFsIC0gbW9kZS0+SFN5bmNFbmQ7CistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDMtZm9yY2UtcGxhaW4tbW9kZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDMtZm9yY2UtcGxhaW4tbW9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2VhN2MxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMy1mb3JjZS1wbGFpbi1tb2RlLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gMjUyZjQ0YzA3MmQzNDQ3YTMyMTI3ZmM5YWZlNWQwZDQwZjNjNTEwZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBXZWQsIDI2IEphbiAyMDExIDEzOjIwOjIwICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMy82XSBmb3JjZSAncGxhaW4nIG1vZGUKKworVGhlIG5ldyBEU1MgbW9kZSBicmVha3MgWFYsIHNvIGZvcmNlIHBsYWluIG1vZGUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvb21hcGZiLWRyaXZlci5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi1kcml2ZXIuYyBiL3NyYy9vbWFwZmItZHJpdmVyLmMKK2luZGV4IDAxOGUwNDAuLjQ4YWEwOWMgMTAwNjQ0CistLS0gYS9zcmMvb21hcGZiLWRyaXZlci5jCisrKysgYi9zcmMvb21hcGZiLWRyaXZlci5jCitAQCAtMzI2LDcgKzMyNiw3IEBAIE9NQVBGQlByZUluaXQoU2NybkluZm9QdHIgcFNjcm4sIGludCBmbGFncykKKyAJT01BUEZCUHJvYmVDb250cm9sbGVyKG9mYi0+Y3RybF9uYW1lKTsKKyAKKyAJLyogRG8gd2UgaGF2ZSB0aGUgRFNTIGtlcm5lbCBBUEk/ICovCistCWlmIChzdGF0KFNZU0ZTX0RTU19ESVIsICZzdCkgPT0gMCkgeworKwlpZiAoMCkgeyAvL3N0YXQoU1lTRlNfRFNTX0RJUiwgJnN0KSA9PSAwKSB7CisgCQlvZmItPmRzcyA9IFRSVUU7CisgCX0gZWxzZSB7CisgCQlvZmItPmRzcyA9IEZBTFNFOworLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA0LWJsYWNrbGlzdC10di1vdXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA0LWJsYWNrbGlzdC10di1vdXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhYzlhNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDQtYmxhY2tsaXN0LXR2LW91dC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGNmYTQ2YjY3ZjU5MTE1ZjZkOGVmOTQxNGFmNjAzODA3NDlmZjNlYjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogV2VkLCAyNiBKYW4gMjAxMSAxMzoyMToxMiArMDEwMAorU3ViamVjdDogW1BBVENIIDQvNl0gYmxhY2tsaXN0IHR2IG91dAorCitUaGUgdHYtb3V0IGdldHMgYWRkZWQgbGFzdCBhbmQgdGhlIGRyaXZlciB0cmllcyB0byByZWNvbmZpZ3VyZSBkdmkgdG8gVFYgcmVzb2x1dGlvbnMsIHdoaWNoIGZhaWxzLiBzbyBibGFja2xpc3QgaXQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvb21hcGZiLW91dHB1dC1kc3MuYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9vbWFwZmItb3V0cHV0LWRzcy5jIGIvc3JjL29tYXBmYi1vdXRwdXQtZHNzLmMKK2luZGV4IDZjYzUyZGUuLjgzY2I3MTEgMTAwNjQ0CistLS0gYS9zcmMvb21hcGZiLW91dHB1dC1kc3MuYworKysrIGIvc3JjL29tYXBmYi1vdXRwdXQtZHNzLmMKK0BAIC0yMDUsNiArMjA1LDEwIEBAIE9NQVBGQkRTU091dHB1dERldGVjdCAoeGY4Nk91dHB1dFB0ciBvdXRwdXQpCisgCWlmKG9mYi0+dGltaW5nc1tpZHhdWzBdID09ICdcMCcpCisgCQlyZXR1cm4gWEY4Nk91dHB1dFN0YXR1c0Rpc2Nvbm5lY3RlZDsKKyAKKysJLy8gSGFjayB0byBkaXNhYmxlIHRoZSB0diBvdXQKKysJaWYgKHN0cm5jbXAob3V0cHV0LT5uYW1lLCAidHYiLCAyKSA9PSAwKQorKwkJcmV0dXJuIFhGODZPdXRwdXRTdGF0dXNEaXNjb25uZWN0ZWQ7CisrCisgCXJldHVybiBYRjg2T3V0cHV0U3RhdHVzQ29ubmVjdGVkOworIH0KKyAKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNS1BdHRlbXB0LXRvLWZpeC1WUkZCLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNS1BdHRlbXB0LXRvLWZpeC1WUkZCLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YjI4NDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA1LUF0dGVtcHQtdG8tZml4LVZSRkIucGF0Y2gKQEAgLTAsMCArMSwzMjUgQEAKK0Zyb20gOGIxZjY5N2E2MGUzNWFiODJmZmZkYWJmYWVmZGI0NWU5YTlkZjM3OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEVpbm8tVmlsbGUgVGFsdmFsYSA8dGFsdmFsYUBzdGFuZm9yZC5lZHU+CitEYXRlOiBUdWUsIDIzIEF1ZyAyMDExIDE4OjM3OjAxICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggNS82XSBBdHRlbXB0IHRvIGZpeCBWUkZCCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitodHRwOi8vZG9taW5pb24udGhydWhlcmUubmV0L2dpdC9jZ2l0LmNnaS94Zjg2LXZpZGVvLW9tYXBmYi9jb21taXQvP2g9a29lbi9maXh1cHMmaWQ9NjgzM2ZjOWY3OTUyNjVlNDk0M2QyNDgxMDNmYmFmMzQ2M2I1MTVkNgorCitTaWduZWQtb2ZmLWJ5OiBTZWJhc3RpYW4gS3J6eXN6a293aWFrIDxkb3NAZG9zb3dpc2tvLm5ldD4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuYyB8ICA0ICstLQorIHNyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuaCB8ICAyICstCisgc3JjL29tYXBmYi1kcml2ZXIuYyAgICAgICAgICAgIHwgMjggKysrKysrKysrKysrKy0tLQorIHNyYy9vbWFwZmIteHYtYmxpenphcmQuYyAgICAgICB8ICAxICsKKyBzcmMvb21hcGZiLXh2LWdlbmVyaWMuYyAgICAgICAgfCA3MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KKyBzcmMvb21hcGZiLXh2LmMgICAgICAgICAgICAgICAgfCAgMyArKworIDYgZmlsZXMgY2hhbmdlZCwgODggaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmMgYi9zcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmMKK2luZGV4IGRjZWZhOWIuLmQ0MzQyN2QgMTAwNjQ0CistLS0gYS9zcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmMKKysrKyBiL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuYworQEAgLTM4LDEzICszOCwxMyBAQAorICNpbmNsdWRlICJpbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuaCIKKyAKKyAvKiBCYXNpYyBsaW5lLWJhc2VkIGNvcHkgZm9yIHBhY2tlZCBmb3JtYXRzICovCistdm9pZCBwYWNrZWRfbGluZV9jb3B5KGludCB3LCBpbnQgaCwgaW50IHN0cmlkZSwgdWludDhfdCAqc3JjLCB1aW50OF90ICpkZXN0KQorK3ZvaWQgcGFja2VkX2xpbmVfY29weShpbnQgdywgaW50IGgsIGludCBzcmNfc3RyaWRlLCBpbnQgZHN0X3N0cmlkZSwgdWludDhfdCAqc3JjLCB1aW50OF90ICpkZXN0KQorIHsKKyAJaW50IGk7CisgCWludCBsZW4gPSB3ICogMjsKKyAJZm9yIChpID0gMDsgaSA8IGg7IGkrKykKKyAJeworLQkJbWVtY3B5KGRlc3QgKyBpICogbGVuLCBzcmMgKyBpICogc3RyaWRlLCBsZW4pOworKwkJbWVtY3B5KGRlc3QgKyBpICogZHN0X3N0cmlkZSwgc3JjICsgaSAqIHNyY19zdHJpZGUsIGxlbik7CisgCX0KKyB9CisgCitkaWZmIC0tZ2l0IGEvc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5oIGIvc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5oCitpbmRleCA1ODQ4OTZhLi5iYTdjYWYyIDEwMDY0NAorLS0tIGEvc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5oCisrKysgYi9zcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmgKK0BAIC0yNyw3ICsyNyw3IEBACisgI2luY2x1ZGUgPHN0ZGludC5oPgorIAorIC8qIEJhc2ljIGxpbmUtYmFzZWQgY29weSBmb3IgcGFja2VkIGZvcm1hdHMgKi8KKy12b2lkIHBhY2tlZF9saW5lX2NvcHkoaW50IHcsIGludCBoLCBpbnQgc3RyaWRlLCB1aW50OF90ICpzcmMsIHVpbnQ4X3QgKmRlc3QpOworK3ZvaWQgcGFja2VkX2xpbmVfY29weShpbnQgdywgaW50IGgsIGludCBzcmNfc3RyaWRlLCBpbnQgZHN0X3N0cmlkZSwgdWludDhfdCAqc3JjLCB1aW50OF90ICpkZXN0KTsKKyAKKyAvKiBCYXNpYyBDIGltcGxlbWVudGF0aW9uIG9mIFlWMTIvSTQyMCB0byBVWVZZIGNvbnZlcnNpb24gKi8KKyB2b2lkIHV2MTJfdG9fdXl2eShpbnQgdywgaW50IGgsIGludCB5X3BpdGNoLCBpbnQgdXZfcGl0Y2gsIHVpbnQ4X3QgKnlfcCwgdWludDhfdCAqdV9wLCB1aW50OF90ICp2X3AsIHVpbnQ4X3QgKmRlc3QpOworZGlmZiAtLWdpdCBhL3NyYy9vbWFwZmItZHJpdmVyLmMgYi9zcmMvb21hcGZiLWRyaXZlci5jCitpbmRleCA0OGFhMDljLi4wNzk4OWY1IDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi1kcml2ZXIuYworKysrIGIvc3JjL29tYXBmYi1kcml2ZXIuYworQEAgLTY2LDYgKzY2LDcgQEAKKyAjZGVmaW5lIE9NQVBGQl9WRVJTSU9OIDEwMDAKKyAjZGVmaW5lIE9NQVBGQl9EUklWRVJfTkFNRSAiT01BUEZCIgorICNkZWZpbmUgT01BUEZCX05BTUUgIm9tYXBmYiIKKysjZGVmaW5lIEVORk9SQ0VfTU9ERVMKKyAKKyBzdGF0aWMgQm9vbCBPTUFQRkJQcm9iZShEcml2ZXJQdHIgZHJ2LCBpbnQgZmxhZ3MpOworIHN0YXRpYyBCb29sIE9NQVBGQlByZUluaXQoU2NybkluZm9QdHIgcFNjcm4sIGludCBmbGFncyk7CitAQCAtMTA1LDExICsxMDYsMTMgQEAgc3RhdGljIFN5bVRhYlJlYyBPTUFQRkJDaGlwc2V0c1tdID0geworIHR5cGVkZWYgZW51bSB7CisgCU9QVElPTl9BQ0NFTE1FVEhPRCwKKyAJT1BUSU9OX0ZCLAorKwlPUFRJT05fUk9UQVRFLAorIH0gRkJEZXZPcHRzOworIAorIHN0YXRpYyBjb25zdCBPcHRpb25JbmZvUmVjIE9NQVBGQk9wdGlvbnNbXSA9IHsKKyAJeyBPUFRJT05fQUNDRUxNRVRIT0QsCSJBY2NlbE1ldGhvZCIsCU9QVFZfU1RSSU5HLAl7MH0sCUZBTFNFIH0sCisgCXsgT1BUSU9OX0ZCLAkJImZiIiwJCU9QVFZfU1RSSU5HLAl7MH0sCUZBTFNFIH0sCisrCXsgT1BUSU9OX1JPVEFURSwJInJvdGF0aW9uIiwJT1BUVl9TVFJJTkcsCXswfSwJRkFMU0UgfSwKKyAJeyAtMSwJCQlOVUxMLAkJT1BUVl9OT05FLAl7MH0sCUZBTFNFIH0KKyB9OworIAorQEAgLTI4Niw2ICsyODksNyBAQCBPTUFQRkJQcmVJbml0KFNjcm5JbmZvUHRyIHBTY3JuLCBpbnQgZmxhZ3MpCisgeworIAlPTUFQRkJQdHIgb2ZiOworIAlFbnRpdHlJbmZvUHRyIHBFbnQ7CisrCWNoYXIgKnJvdGF0ZTsKKyAJcmdiIHplcm9zID0geyAwLCAwLCAwIH07CisgCXN0cnVjdCBzdGF0IHN0OworIAorQEAgLTM3OSw2ICszODMsOCBAQCBPTUFQRkJQcmVJbml0KFNjcm5JbmZvUHRyIHBTY3JuLCBpbnQgZmxhZ3MpCisgCXBTY3JuLT5wcm9nQ2xvY2sgPSBUUlVFOworIAlwU2Nybi0+Y2hpcHNldCAgID0gIm9tYXBmYiI7CisgCQorKwl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfSU5GTywgIlJvdGF0ZSB0ZXN0IHZlcnNpb24gMC4wMlxuIik7CisrCQorIAkvKiBTdGFydCB3aXRoIGNvbmZpZ3VyZWQgdmlydHVhbCBzaXplICovCisgCXBTY3JuLT52aXJ0dWFsWCA9IHBTY3JuLT5kaXNwbGF5LT52aXJ0dWFsWDsKKyAJcFNjcm4tPnZpcnR1YWxZID0gcFNjcm4tPmRpc3BsYXktPnZpcnR1YWxZOworQEAgLTQ5NiwxMiArNTAyLDIxIEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJb2ZiLT5DbG9zZVNjcmVlbiA9IHBTY3JlZW4tPkNsb3NlU2NyZWVuOworIAlwU2NyZWVuLT5DbG9zZVNjcmVlbiA9IE9NQVBGQkNsb3NlU2NyZWVuOworIAorKwkvKiBFbmZvcmNlIHRoZSBkZWZhdWx0IG1vZGUgKHRoaXMgaXMgc2lsbHkgSSBndWVzcykgKi8KKysjaWZkZWYgRU5GT1JDRV9NT0RFUworKwkvL3hmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9JTkZPLCAiRW5mb3JjaW5nIG1vZGVzXG4iKTsKKysJLy9zZXRfbW9kZShvZmIsICZvZmItPmRlZmF1bHRfbW9kZSk7CisrCS8vcFNjcm4tPmRpc3BsYXlXaWR0aCA9IG9mYi0+Zml4ZWRfaW5mby5saW5lX2xlbmd0aCAvCisrCS8vICAob2ZiLT5zdGF0ZV9pbmZvLmJpdHNfcGVyX3BpeGVsPj4zKTsgLy9vZmItPnN0YXRlX2luZm8ueHJlczsKKysjZW5kaWYKKysKKyAJLyogTWFwIG91ciBmcmFtZWJ1ZmZlciBtZW1vcnkgKi8KKysJb2ZiLT5tZW1faW5mby5zaXplID0gb2ZiLT5maXhlZF9pbmZvLmxpbmVfbGVuZ3RoICogb2ZiLT5zdGF0ZV9pbmZvLnlyZXM7CisgCW9mYi0+ZmIgPSBtbWFwIChOVUxMLCBvZmItPm1lbV9pbmZvLnNpemUsCisgCSAgICAgICAgICAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELAorIAkgICAgICAgICAgICAgICAgb2ZiLT5mZCwgMCk7CistCWlmIChvZmItPmZiID09IE5VTEwpIHsKKy0JCXhmODZEcnZNc2coc2NybkluZGV4LCBYX0VSUk9SLCAiTWFwcGluZyBmcmFtZWJ1ZmZlciBtZW1vcnkgZmFpbGVkXG4iKTsKKysJaWYgKG9mYi0+ZmIgPT0gTUFQX0ZBSUxFRCkgeworKwkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsICJNYXBwaW5nIGZyYW1lYnVmZmVyIG1lbW9yeSBmYWlsZWQsIHdhbnRlZCAlZCBieXRlcy5cbiIsIG9mYi0+bWVtX2luZm8uc2l6ZSk7CisgCQlyZXR1cm4gRkFMU0U7CisgCX0KKyAKK0BAIC01NzgsOCArNTkzLDEzIEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJfSBlbHNlIGlmICghb2ZiLT5kc3MpIHsKKyAKKyAJCW9mYi0+cGxhbmVfaW5mby5lbmFibGVkID0gMTsKKy0JCW9mYi0+cGxhbmVfaW5mby5vdXRfd2lkdGggPSBvZmItPnN0YXRlX2luZm8ueHJlczsKKy0JCW9mYi0+cGxhbmVfaW5mby5vdXRfaGVpZ2h0ID0gb2ZiLT5zdGF0ZV9pbmZvLnlyZXM7CisrCQlpZiAob2ZiLT5zdGF0ZV9pbmZvLnJvdGF0ZSA9PSAwIHx8IG9mYi0+c3RhdGVfaW5mby5yb3RhdGUgPT0gMikgeworKwkJCW9mYi0+cGxhbmVfaW5mby5vdXRfd2lkdGggPSBvZmItPnN0YXRlX2luZm8ueHJlczsKKysJCQlvZmItPnBsYW5lX2luZm8ub3V0X2hlaWdodCA9IG9mYi0+c3RhdGVfaW5mby55cmVzOworKwkJfSBlbHNlIHsKKysJCQlvZmItPnBsYW5lX2luZm8ub3V0X3dpZHRoID0gb2ZiLT5zdGF0ZV9pbmZvLnlyZXM7CisrCQkJb2ZiLT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPSBvZmItPnN0YXRlX2luZm8ueHJlczsKKysJCX0KKyAKKyAJCWlmIChpb2N0bCAob2ZiLT5mZCwgT01BUEZCX1NFVFVQX1BMQU5FLCAmb2ZiLT5wbGFuZV9pbmZvKSkgeworIAkJCXhmODZEcnZNc2coc2NybkluZGV4LCBYX0VSUk9SLAorZGlmZiAtLWdpdCBhL3NyYy9vbWFwZmIteHYtYmxpenphcmQuYyBiL3NyYy9vbWFwZmIteHYtYmxpenphcmQuYworaW5kZXggNDA2ZmZjNi4uYjcxZDJhYSAxMDA2NDQKKy0tLSBhL3NyYy9vbWFwZmIteHYtYmxpenphcmQuYworKysrIGIvc3JjL29tYXBmYi14di1ibGl6emFyZC5jCitAQCAtMjIwLDYgKzIyMCw3IEBAIGludCBPTUFQRkJYVlB1dEltYWdlQmxpenphcmQgKFNjcm5JbmZvUHRyIHBTY3JuLAorIAkJCXBhY2tlZF9saW5lX2NvcHkoc3JjX3cgJiB+MywKKyAJCQkgICAgICAgICAgICAgICAgIHNyY19oICYgfjMsCisgCQkJICAgICAgICAgICAgICAgICAoKHNyY193ICsgMSkgJiB+MSkgKiAyLAorKwkJCQkJIG9mYi0+cG9ydC0+Zml4ZWRfaW5mby5saW5lX2xlbmd0aCwKKyAJCQkgICAgICAgICAgICAgICAgICh1aW50OF90KilidWYsCisgCQkJICAgICAgICAgICAgICAgICAodWludDhfdCopb2ZiLT5wb3J0LT5mYik7CisgCQkJYnJlYWs7CitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi14di1nZW5lcmljLmMgYi9zcmMvb21hcGZiLXh2LWdlbmVyaWMuYworaW5kZXggZTZmODlmZS4uYjMzZjM0NCAxMDA2NDQKKy0tLSBhL3NyYy9vbWFwZmIteHYtZ2VuZXJpYy5jCisrKysgYi9zcmMvb21hcGZiLXh2LWdlbmVyaWMuYworQEAgLTYyLDcgKzYyLDcgQEAgaW50IE9NQVBYVkFsbG9jUGxhbmUoU2NybkluZm9QdHIgcFNjcm4pCisgeworIAlPTUFQRkJQdHIgb2ZiID0gT01BUEZCKHBTY3JuKTsKKyAKKy0JLyogVGhlIG1lbW9yeSBzaXplIGlzIGFscmVhZHkgc2V0IGluIE9NQVBGQlhWUXVlcnlJbWFnZUF0dHJpYnV0ZXMgKi8KKysJLyogVGhlIG1lbW9yeSBzaXplIGlzIGFscmVhZHkgc2V0IGJlZm9yZSB3ZSBnZXQgaGVyZSAqLworIAlpZiAoaW9jdGwob2ZiLT5wb3J0LT5mZCwgT01BUEZCX1NFVFVQX01FTSwgJm9mYi0+cG9ydC0+bWVtX2luZm8pICE9IDApIHsKKyAJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwKKyAJCSAgICAgICAgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSB2aWRlbyBwbGFuZSBtZW1vcnlcbiIpOworQEAgLTczLDE5ICs3MywyMCBAQCBpbnQgT01BUFhWQWxsb2NQbGFuZShTY3JuSW5mb1B0ciBwU2NybikKKyAJb2ZiLT5wb3J0LT5mYiA9IG1tYXAgKE5VTEwsIG9mYi0+cG9ydC0+bWVtX2luZm8uc2l6ZSwKKyAJICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsCisgCSAgICAgICAgICAgICAgICBvZmItPnBvcnQtPmZkLCAwKTsKKy0JaWYgKG9mYi0+cG9ydC0+ZmIgPT0gTlVMTCkgeworKwlpZiAob2ZiLT5wb3J0LT5mYiA9PSBNQVBfRkFJTEVEKSB7CisgCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsCisgCQkgICAgICAgICAgICJNYXBwaW5nIHZpZGVvIG1lbW9yeSBmYWlsZWRcbiIpOworIAkJcmV0dXJuIFh2QmFkQWxsb2M7CisgCX0KKyAKKyAJLyogVXBkYXRlIHRoZSBzdGF0ZSBpbmZvICovCisrCS8qIExldCdzIG5vdCAtIGl0J3MgYmFkCisgCWlmIChpb2N0bCAob2ZiLT5wb3J0LT5mZCwgRkJJT0dFVF9WU0NSRUVOSU5GTywgJm9mYi0+cG9ydC0+c3RhdGVfaW5mbykpCisgCXsKKyAJCXhmODZNc2coWF9FUlJPUiwgIiVzOiBSZWFkaW5nIHN0YXRlIGluZm8gZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworIAkJcmV0dXJuIFh2QmFkQWxsb2M7CisgCX0KKy0KKysJKi8KKyAJcmV0dXJuIFN1Y2Nlc3M7CisgfQorIAorQEAgLTkzLDYgKzk0LDcgQEAgaW50IE9NQVBYVkFsbG9jUGxhbmUoU2NybkluZm9QdHIgcFNjcm4pCisgaW50IE9NQVBYVlNldHVwVmlkZW9QbGFuZShTY3JuSW5mb1B0ciBwU2NybikKKyB7CisgCU9NQVBGQlB0ciBvZmIgPSBPTUFQRkIocFNjcm4pOworKwlpbnQgcmV0OworIAorIAlpZiAoaW9jdGwgKG9mYi0+cG9ydC0+ZmQsIEZCSU9QVVRfVlNDUkVFTklORk8sICZvZmItPnBvcnQtPnN0YXRlX2luZm8pKQorIAl7CitAQCAtMTA0LDYgKzEwNiwzMSBAQCBpbnQgT01BUFhWU2V0dXBWaWRlb1BsYW5lKFNjcm5JbmZvUHRyIHBTY3JuKQorIAkJeGY4Nk1zZyhYX0VSUk9SLCAiJXM6IFJlYWRpbmcgc3RhdGUgaW5mbyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisgCQlyZXR1cm4gWHZCYWRBbGxvYzsKKyAJfQorKwkvKiBDaGFuZ2luZyByb3RhdGlvbi9ub25zdGQgZmxhZ3MgY2FuIGNoYW5nZSB0aGUgZml4ZWQgaW5mbyEgKi8KKysJaWYgKGlvY3RsIChvZmItPnBvcnQtPmZkLCBGQklPR0VUX0ZTQ1JFRU5JTkZPLCAmb2ZiLT5wb3J0LT5maXhlZF9pbmZvKSkKKysJeworKwkJeGY4Nk1zZyhYX0VSUk9SLCAiJXM6IFJlYWRpbmcgc3RhdGUgaW5mbyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisrCQlyZXR1cm4gWHZCYWRBbGxvYzsKKysJfQorKwkvKiBDb3JyZWN0IGZpeGVkIGluZm8gcmVxdWlyZXMgcmVjYWxjdWxhdGlvbiBvZiBuZWVkZWQgbWVtb3J5ICovCisrCW9mYi0+cG9ydC0+bWVtX2luZm8uc2l6ZSA9IG9mYi0+cG9ydC0+Zml4ZWRfaW5mby5saW5lX2xlbmd0aCAqIG9mYi0+cG9ydC0+c3RhdGVfaW5mby55cmVzOworKworKwkvKiBBbGxvY2F0ZSBidWZmZXIgbWVtb3J5ICovCisrCXJldCA9IE9NQVBYVkFsbG9jUGxhbmUocFNjcm4pOworKwlpZiAocmV0ICE9IFN1Y2Nlc3MpCisrCQlyZXR1cm4gcmV0OworKworKwkvKiBXb3JrYXJvdW5kIGZvciByZXNldCBvZiBtb2RlIGFmdGVyIG1lbW9yeSBhbGxvICovCisrCWlmIChpb2N0bCAob2ZiLT5wb3J0LT5mZCwgRkJJT1BVVF9WU0NSRUVOSU5GTywgJm9mYi0+cG9ydC0+c3RhdGVfaW5mbykpCisrCXsKKysJCXhmODZNc2coWF9FUlJPUiwgIiVzOiBzZXR0aW5nIHN0YXRlIGluZm8gZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworKwkJcmV0dXJuIFh2QmFkQWxsb2M7CisrCX0KKysJaWYgKGlvY3RsIChvZmItPnBvcnQtPmZkLCBGQklPR0VUX1ZTQ1JFRU5JTkZPLCAmb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvKSkKKysJeworKwkJeGY4Nk1zZyhYX0VSUk9SLCAiJXM6IFJlYWRpbmcgc3RhdGUgaW5mbyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisrCQlyZXR1cm4gWHZCYWRBbGxvYzsKKysJfQorIAorIAlpZihpb2N0bChvZmItPnBvcnQtPmZkLCBPTUFQRkJfU0VUVVBfUExBTkUsCisgCSAgICZvZmItPnBvcnQtPnBsYW5lX2luZm8pICE9IDApIHsKK0BAIC0xMjQsNiArMTUxLDggQEAgaW50IE9NQVBGQlhWUHV0SW1hZ2VHZW5lcmljIChTY3JuSW5mb1B0ciBwU2NybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyYXdhYmxlUHRyIHBEcmF3KQorIHsKKyAJT01BUEZCUHRyIG9mYiA9IE9NQVBGQihwU2Nybik7CisrCXNob3J0IGRyd190ZW1wOworKwlzaG9ydCByb3RfeHJlcywgcm90X3lyZXM7CisgCisgCWlmICghb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLmVuYWJsZWQKKyAJIHx8IG9mYi0+cG9ydC0+dXBkYXRlX3dpbmRvdy54ICE9IHNyY194CitAQCAtMTYzLDEzICsxOTIsNiBAQCBpbnQgT01BUEZCWFZQdXRJbWFnZUdlbmVyaWMgKFNjcm5JbmZvUHRyIHBTY3JuLAorIAkJCXJldHVybiBTdWNjZXNzOworIAkJfQorIAorLQkJLyogSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgcGxhbmUgcnVubmluZywgZW5hYmxlIGl0ICovCistCQlpZiAoIW9mYi0+cG9ydC0+cGxhbmVfaW5mby5lbmFibGVkKSB7CistCQkJcmV0ID0gT01BUFhWQWxsb2NQbGFuZShwU2Nybik7CistCQkJaWYgKHJldCAhPSBTdWNjZXNzKQorLQkJCQlyZXR1cm4gcmV0OworLQkJfQorLQorIAkJLyogU2V0IHVwIHRoZSBzdGF0ZSBpbmZvLCB4cmVzIGFuZCB5cmVzIHdpbGwgYmUgdXNlZCBmb3IKKyAJCSAqIHNjYWxpbmcgdG8gdGhlIHZhbHVlcyBpbiB0aGUgcGxhbmUgaW5mbyBzdHJ1Y3QKKyAJCSAqLworQEAgLTE3OSwxMiArMjAxLDMxIEBAIGludCBPTUFQRkJYVlB1dEltYWdlR2VuZXJpYyAoU2NybkluZm9QdHIgcFNjcm4sCisgCQlvZmItPnBvcnQtPnN0YXRlX2luZm8ueXJlc192aXJ0dWFsID0gMDsKKyAJCW9mYi0+cG9ydC0+c3RhdGVfaW5mby54b2Zmc2V0ID0gMDsKKyAJCW9mYi0+cG9ydC0+c3RhdGVfaW5mby55b2Zmc2V0ID0gMDsKKy0JCW9mYi0+cG9ydC0+c3RhdGVfaW5mby5yb3RhdGUgPSAwOworKwkJLy9vZmItPnBvcnQtPnN0YXRlX2luZm8ucm90YXRlID0gMDsKKyAJCW9mYi0+cG9ydC0+c3RhdGVfaW5mby5ncmF5c2NhbGUgPSAwOworIAkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOworIAkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLmJpdHNfcGVyX3BpeGVsID0gMDsKKyAJCW9mYi0+cG9ydC0+c3RhdGVfaW5mby5ub25zdGQgPSB4dl90b19vbWFwZmJfZm9ybWF0KGltYWdlKTsKKyAKKysJCS8qIFBsYW5lIGluZm8gZG9lcyBub3Qgcm90YXRlIHdpdGggc3RhdGVfaW5mbyAqLworKwkJaWYgKG9mYi0+cG9ydC0+c3RhdGVfaW5mby5yb3RhdGUgPT0gMSB8fAorKwkJICBvZmItPnBvcnQtPnN0YXRlX2luZm8ucm90YXRlID09IDMpIHsKKysJCQlkcndfdGVtcCA9IGRyd194OworKwkJCWRyd194ID0gZHJ3X3k7CisrCQkJZHJ3X3kgPSBkcndfdGVtcDsKKysKKysJCQlkcndfdGVtcCA9IGRyd193OworKwkJCWRyd193ID0gZHJ3X2g7CisrCQkJZHJ3X2ggPSBkcndfdGVtcDsKKysKKysJCQlyb3RfeHJlcyA9IG9mYi0+cG9ydC0+c3RhdGVfaW5mby55cmVzOworKwkJCXJvdF95cmVzID0gb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnhyZXM7CisrCQl9IGVsc2UgeworKwkJCXJvdF94cmVzID0gb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnhyZXM7CisrCQkJcm90X3lyZXMgPSBvZmItPnBvcnQtPnN0YXRlX2luZm8ueXJlczsKKysJCX0KKysKKysKKyAJCS8qIFNldCB1cCB0aGUgdmlkZW8gcGxhbmUgaW5mbyAqLworIAkJb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLmVuYWJsZWQgPSAxOworIAkJb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLnBvc194ID0gZHJ3X3g7CitAQCAtMTkzLDEzICsyMzQsMTMgQEAgaW50IE9NQVBGQlhWUHV0SW1hZ2VHZW5lcmljIChTY3JuSW5mb1B0ciBwU2NybiwKKyAJCW9mYi0+cG9ydC0+cGxhbmVfaW5mby5vdXRfaGVpZ2h0ID0gZHJ3X2ggJiB+MTU7CisgCisgCQkvKiBDYXAgb3V0cHV0IHRvIHNjcmVlbiBzaXplICovCistCQlpZiAob2ZiLT5wb3J0LT5wbGFuZV9pbmZvLm91dF93aWR0aCA+IG9mYi0+c3RhdGVfaW5mby54cmVzKSB7CisrCQlpZiAob2ZiLT5wb3J0LT5wbGFuZV9pbmZvLm91dF93aWR0aCA+IHJvdF94cmVzKSB7CisgCQkJb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLnBvc194ID0gMDsKKy0JCQlvZmItPnBvcnQtPnBsYW5lX2luZm8ub3V0X3dpZHRoID0gb2ZiLT5zdGF0ZV9pbmZvLnhyZXM7CisrCQkJb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLm91dF93aWR0aCA9IHJvdF94cmVzOworIAkJfQorLQkJaWYgKG9mYi0+cG9ydC0+cGxhbmVfaW5mby5vdXRfaGVpZ2h0ID4gb2ZiLT5zdGF0ZV9pbmZvLnlyZXMpIHsKKysJCWlmIChvZmItPnBvcnQtPnBsYW5lX2luZm8ub3V0X2hlaWdodCA+IHJvdF95cmVzKSB7CisgCQkJb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLnBvc195ID0gMDsKKy0JCQlvZmItPnBvcnQtPnBsYW5lX2luZm8ub3V0X2hlaWdodCA9IG9mYi0+c3RhdGVfaW5mby55cmVzOworKwkJCW9mYi0+cG9ydC0+cGxhbmVfaW5mby5vdXRfaGVpZ2h0ID0gcm90X3lyZXM7CisgCQl9CisgCisgCQlyZXQgPSBPTUFQWFZTZXR1cFZpZGVvUGxhbmUocFNjcm4pOworQEAgLTIyMyw2ICsyNjQsNyBAQCBpbnQgT01BUEZCWFZQdXRJbWFnZUdlbmVyaWMgKFNjcm5JbmZvUHRyIHBTY3JuLAorIAkJCXBhY2tlZF9saW5lX2NvcHkoc3JjX3cgJiB+MTUsCisgCQkJICAgICAgICAgICAgICAgICBzcmNfaCAmIH4xNSwKKyAJCQkgICAgICAgICAgICAgICAgICgoc3JjX3cgKyAxKSAmIH4xKSAqIDIsCisrCQkJICAgICAgICAgICAgICAgICBvZmItPnBvcnQtPmZpeGVkX2luZm8ubGluZV9sZW5ndGgsCisgCQkJICAgICAgICAgICAgICAgICAodWludDhfdCopYnVmLAorIAkJCSAgICAgICAgICAgICAgICAgKHVpbnQ4X3QqKW9mYi0+cG9ydC0+ZmIpOworIAkJCWJyZWFrOworZGlmZiAtLWdpdCBhL3NyYy9vbWFwZmIteHYuYyBiL3NyYy9vbWFwZmIteHYuYworaW5kZXggMWRmNjUxZS4uMGZlZTJjNiAxMDA2NDQKKy0tLSBhL3NyYy9vbWFwZmIteHYuYworKysrIGIvc3JjL29tYXBmYi14di5jCitAQCAtMTY5LDggKzE2OSwxMSBAQCBzdGF0aWMgaW50IE9NQVBGQlhWUXVlcnlJbWFnZUF0dHJpYnV0ZXMgKFNjcm5JbmZvUHRyIHBTY3JuLAorIAloID0gKmhlaWdodDsKKyAKKyAJdyA9ICh3ICsgMSkgJiB+MTsKKysKKysJLyogQ2FuJ3QgY2FsY3VsYXRlIHRoZXNlIGhlcmUgLSBkb24ndCBrbm93IGxpbmUgbGVuZ3RoCisgCW9mYi0+cG9ydC0+bWVtX2luZm8uc2l6ZSA9IHcgPDwgMTsKKyAJb2ZiLT5wb3J0LT5tZW1faW5mby5zaXplICo9IGg7CisrCSovCisgCisgCXJldHVybiBzaXplOworIH0KKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNi1vbWFwZmItcG9ydC10by1uZXcteHNlcnZlci12aWRlby1BUEkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA2LW9tYXBmYi1wb3J0LXRvLW5ldy14c2VydmVyLXZpZGVvLUFQSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTY3Mjk5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNi1vbWFwZmItcG9ydC10by1uZXcteHNlcnZlci12aWRlby1BUEkucGF0Y2gKQEAgLTAsMCArMSwyNzIgQEAKK0Zyb20gODAzZWNmMjkwOTk0OWU2MTUyZjRhODFiNmNiYjkyYTQ0MzA2NzlhYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjMgTm92IDIwMTIgMDA6MzE6MDYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCA2LzZdIG9tYXBmYjogcG9ydCB0byBuZXcgeHNlcnZlciB2aWRlbyBBUEkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9jb21wYXQtYXBpLmggICAgfCA5NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIHNyYy9vbWFwZmItZHJpdmVyLmMgfCA0MSArKysrKysrKysrKystLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTE4IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvY29tcGF0LWFwaS5oCisKK2RpZmYgLS1naXQgYS9zcmMvY29tcGF0LWFwaS5oIGIvc3JjL2NvbXBhdC1hcGkuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxNTkxYjEKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21wYXQtYXBpLmgKK0BAIC0wLDAgKzEsOTYgQEAKKysvKgorKyAqIENvcHlyaWdodCAyMDEyIFJlZCBIYXQsIEluYy4KKysgKgorKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisrICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKysgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisrICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisrICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisrICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysgKgorKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKysgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisrICogU29mdHdhcmUuCisrICoKKysgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisrICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKysgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisrICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorKyAqCisrICogQXV0aG9yOiBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgorKyAqLworKworKy8qIHRoaXMgZmlsZSBwcm92aWRlcyBBUEkgY29tcGF0IGJldHdlZW4gc2VydmVyIHBvc3QgMS4xMyBhbmQgcHJlIGl0LAorKyAgIGl0IHNob3VsZCBiZSByZXVzZWQgaW5zaWRlIGFzIG1hbnkgZHJpdmVycyBhcyBwb3NzaWJsZSAqLworKyNpZm5kZWYgQ09NUEFUX0FQSV9ICisrI2RlZmluZSBDT01QQVRfQVBJX0gKKysKKysjaWZuZGVmIEdMWVBIX0hBU19HTFlQSF9QSUNUVVJFX0FDQ0VTU09SCisrI2RlZmluZSBHZXRHbHlwaFBpY3R1cmUoZywgcykgR2x5cGhQaWN0dXJlKChnKSlbKHMpLT5teU51bV0KKysjZGVmaW5lIFNldEdseXBoUGljdHVyZShnLCBzLCBwKSBHbHlwaFBpY3R1cmUoKGcpKVsocyktPm15TnVtXSA9IHAKKysjZW5kaWYKKysKKysjaWZuZGVmIFhGODZfSEFTX1NDUk5fQ09OVgorKyNkZWZpbmUgeGY4NlNjcmVlblRvU2NybihzKSB4Zjg2U2NyZWVuc1socyktPm15TnVtXQorKyNkZWZpbmUgeGY4NlNjcm5Ub1NjcmVlbihzKSBzY3JlZW5JbmZvLnNjcmVlbnNbKHMpLT5zY3JuSW5kZXhdCisrI2VuZGlmCisrCisrI2lmbmRlZiBYRjg2X1NDUk5fSU5URVJGQUNFCisrCisrI2RlZmluZSBTQ1JOX0FSR19UWVBFIGludAorKyNkZWZpbmUgU0NSTl9JTkZPX1BUUihhcmcxKSBTY3JuSW5mb1B0ciBwU2NybiA9IHhmODZTY3JlZW5zWyhhcmcxKV0KKysKKysjZGVmaW5lIFNDUkVFTl9BUkdfVFlQRSBpbnQKKysjZGVmaW5lIFNDUkVFTl9QVFIoYXJnMSkgU2NyZWVuUHRyIHBTY3JlZW4gPSBzY3JlZW5JbmZvLnNjcmVlbnNbKGFyZzEpXQorKworKyNkZWZpbmUgU0NSRUVOX0lOSVRfQVJHU19ERUNMIGludCBpbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndgorKworKyNkZWZpbmUgQkxPQ0tIQU5ETEVSX0FSR1NfREVDTCBpbnQgYXJnLCBwb2ludGVyIGJsb2NrRGF0YSwgcG9pbnRlciBwVGltZW91dCwgcG9pbnRlciBwUmVhZG1hc2sKKysjZGVmaW5lIEJMT0NLSEFORExFUl9BUkdTIGFyZywgYmxvY2tEYXRhLCBwVGltZW91dCwgcFJlYWRtYXNrCisrCisrI2RlZmluZSBDTE9TRV9TQ1JFRU5fQVJHU19ERUNMIGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuCisrI2RlZmluZSBDTE9TRV9TQ1JFRU5fQVJHUyBzY3JuSW5kZXgsIHBTY3JlZW4KKysKKysjZGVmaW5lIEFESlVTVF9GUkFNRV9BUkdTX0RFQ0wgaW50IGFyZywgaW50IHgsIGludCB5LCBpbnQgZmxhZ3MKKysKKysjZGVmaW5lIFNXSVRDSF9NT0RFX0FSR1NfREVDTCBpbnQgYXJnLCBEaXNwbGF5TW9kZVB0ciBtb2RlLCBpbnQgZmxhZ3MKKysKKysjZGVmaW5lIEZSRUVfU0NSRUVOX0FSR1NfREVDTCBpbnQgYXJnLCBpbnQgZmxhZ3MKKysjZGVmaW5lIEZSRUVfU0NSRUVOX0FSR1MoeCkgKHgpLT5zY3JuSW5kZXgsIDAKKysKKysjZGVmaW5lIFZUX0ZVTkNfQVJHU19ERUNMIGludCBhcmcsIGludCBmbGFncworKyNkZWZpbmUgVlRfRlVOQ19BUkdTKGZsYWdzKSBwU2Nybi0+c2NybkluZGV4LCAoZmxhZ3MpCisrCisrI2RlZmluZSBYRjg2X0VOQUJMRURJU0FCTEVGQl9BUkcoeCkgKCh4KS0+c2NybkluZGV4KQorKyNlbHNlCisrI2RlZmluZSBTQ1JOX0FSR19UWVBFIFNjcm5JbmZvUHRyCisrI2RlZmluZSBTQ1JOX0lORk9fUFRSKGFyZzEpIFNjcm5JbmZvUHRyIHBTY3JuID0gKGFyZzEpCisrCisrI2RlZmluZSBTQ1JFRU5fQVJHX1RZUEUgU2NyZWVuUHRyCisrI2RlZmluZSBTQ1JFRU5fUFRSKGFyZzEpIFNjcmVlblB0ciBwU2NyZWVuID0gKGFyZzEpCisrCisrI2RlZmluZSBTQ1JFRU5fSU5JVF9BUkdTX0RFQ0wgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndgorKworKyNkZWZpbmUgQkxPQ0tIQU5ETEVSX0FSR1NfREVDTCBTY3JlZW5QdHIgYXJnLCBwb2ludGVyIHBUaW1lb3V0LCBwb2ludGVyIHBSZWFkbWFzaworKyNkZWZpbmUgQkxPQ0tIQU5ETEVSX0FSR1MgYXJnLCBwVGltZW91dCwgcFJlYWRtYXNrCisrCisrI2RlZmluZSBDTE9TRV9TQ1JFRU5fQVJHU19ERUNMIFNjcmVlblB0ciBwU2NyZWVuCisrI2RlZmluZSBDTE9TRV9TQ1JFRU5fQVJHUyBwU2NyZWVuCisrCisrI2RlZmluZSBBREpVU1RfRlJBTUVfQVJHU19ERUNMIFNjcm5JbmZvUHRyIGFyZywgaW50IHgsIGludCB5CisrI2RlZmluZSBTV0lUQ0hfTU9ERV9BUkdTX0RFQ0wgU2NybkluZm9QdHIgYXJnLCBEaXNwbGF5TW9kZVB0ciBtb2RlCisrCisrI2RlZmluZSBGUkVFX1NDUkVFTl9BUkdTX0RFQ0wgU2NybkluZm9QdHIgYXJnCisrI2RlZmluZSBGUkVFX1NDUkVFTl9BUkdTKHgpICh4KQorKworKyNkZWZpbmUgVlRfRlVOQ19BUkdTX0RFQ0wgU2NybkluZm9QdHIgYXJnCisrI2RlZmluZSBWVF9GVU5DX0FSR1MoZmxhZ3MpIHBTY3JuCisrCisrI2RlZmluZSBYRjg2X0VOQUJMRURJU0FCTEVGQl9BUkcoeCkgKHgpCisrCisrI2VuZGlmCisrCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi1kcml2ZXIuYyBiL3NyYy9vbWFwZmItZHJpdmVyLmMKK2luZGV4IDA3OTg5ZjUuLjQ4NmZmYTQgMTAwNjQ0CistLS0gYS9zcmMvb21hcGZiLWRyaXZlci5jCisrKysgYi9zcmMvb21hcGZiLWRyaXZlci5jCitAQCAtNDQsNiArNDQsOCBAQAorIAorICNpbmNsdWRlICJleGEuaCIKKyAKKysjaW5jbHVkZSAiY29tcGF0LWFwaS5oIgorKworICNpZmRlZiBIQVZFX1hFWFRQUk9UT183MQorICNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9kcG1zY29uc3QuaD4KKyAjZWxzZQorQEAgLTcwLDEwICs3MiwxMCBAQAorIAorIHN0YXRpYyBCb29sIE9NQVBGQlByb2JlKERyaXZlclB0ciBkcnYsIGludCBmbGFncyk7Cisgc3RhdGljIEJvb2wgT01BUEZCUHJlSW5pdChTY3JuSW5mb1B0ciBwU2NybiwgaW50IGZsYWdzKTsKKy1zdGF0aWMgQm9vbCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworLXN0YXRpYyBCb29sIE9NQVBGQkVudGVyVlQoaW50IHNjcm5JbmRleCwgaW50IGZsYWdzKTsKKy1zdGF0aWMgdm9pZCBPTUFQRkJMZWF2ZVZUKGludCBzY3JuSW5kZXgsIGludCBmbGFncyk7Cistc3RhdGljIEJvb2wgT01BUEZCU3dpdGNoTW9kZShpbnQgc2NybkluZGV4LCBEaXNwbGF5TW9kZVB0ciBtb2RlLCBpbnQgZmxhZ3MpOworK3N0YXRpYyBCb29sIE9NQVBGQlNjcmVlbkluaXQoU0NSRUVOX0lOSVRfQVJHU19ERUNMKTsKKytzdGF0aWMgQm9vbCBPTUFQRkJFbnRlclZUKFZUX0ZVTkNfQVJHU19ERUNMKTsKKytzdGF0aWMgdm9pZCBPTUFQRkJMZWF2ZVZUKFZUX0ZVTkNfQVJHU19ERUNMKTsKKytzdGF0aWMgQm9vbCBPTUFQRkJTd2l0Y2hNb2RlKFNXSVRDSF9NT0RFX0FSR1NfREVDTCk7CisgCisgc3RhdGljIEJvb2wKKyBPTUFQRkJFbnN1cmVSZWMoU2NybkluZm9QdHIgcFNjcm4pCitAQCAtNDgxLDcgKzQ4Myw3IEBAIE9NQVBGQlh2U2NyZWVuSW5pdChTY3JlZW5QdHIgcFNjcmVlbikKKyB9CisgCisgc3RhdGljIEJvb2wKKy1PTUFQRkJDbG9zZVNjcmVlbihpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbikKKytPTUFQRkJDbG9zZVNjcmVlbihDTE9TRV9TQ1JFRU5fQVJHU19ERUNMKQorIHsKKyAJU2NybkluZm9QdHIgcFNjcm4gPSB4Zjg2U2NyZWVuc1twU2NyZWVuLT5teU51bV07CisgCU9NQVBGQlB0ciBvZmIgPSBPTUFQRkIocFNjcm4pOworQEAgLTQ5MCwxMSArNDkyLDExIEBAIE9NQVBGQkNsb3NlU2NyZWVuKGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuKQorIAorIAlwU2NyZWVuLT5DbG9zZVNjcmVlbiA9IG9mYi0+Q2xvc2VTY3JlZW47CisgCQorLQlyZXR1cm4gKCpwU2NyZWVuLT5DbG9zZVNjcmVlbikoc2NybkluZGV4LCBwU2NyZWVuKTsKKysJcmV0dXJuICgqcFNjcmVlbi0+Q2xvc2VTY3JlZW4pKENMT1NFX1NDUkVFTl9BUkdTKTsKKyB9CisgCisgc3RhdGljIEJvb2wKKy1PTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrT01BUEZCU2NyZWVuSW5pdChTQ1JFRU5fSU5JVF9BUkdTX0RFQ0wpCisgeworIAlTY3JuSW5mb1B0ciBwU2NybiA9IHhmODZTY3JlZW5zW3BTY3JlZW4tPm15TnVtXTsKKyAJT01BUEZCUHRyIG9mYiA9IE9NQVBGQihwU2Nybik7CitAQCAtNTE2LDcgKzUxOCw3IEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsCisgCSAgICAgICAgICAgICAgICBvZmItPmZkLCAwKTsKKyAJaWYgKG9mYi0+ZmIgPT0gTUFQX0ZBSUxFRCkgeworLQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsICJNYXBwaW5nIGZyYW1lYnVmZmVyIG1lbW9yeSBmYWlsZWQsIHdhbnRlZCAlZCBieXRlcy5cbiIsIG9mYi0+bWVtX2luZm8uc2l6ZSk7CisrCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsICJNYXBwaW5nIGZyYW1lYnVmZmVyIG1lbW9yeSBmYWlsZWQsIHdhbnRlZCAlZCBieXRlcy5cbiIsIG9mYi0+bWVtX2luZm8uc2l6ZSk7CisgCQlyZXR1cm4gRkFMU0U7CisgCX0KKyAKK0BAIC01MjYsNyArNTI4LDcgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkvKiBPbmx5IHN1cHBvcnQgVHJ1ZUNvbG9yIGZvciBub3cgKi8KKyAJaWYgKCFtaVNldFZpc3VhbFR5cGVzKHBTY3JuLT5kZXB0aCwgVHJ1ZUNvbG9yTWFzaywKKyAJCXBTY3JuLT5yZ2JCaXRzLCBwU2Nybi0+ZGVmYXVsdFZpc3VhbCkpIHsKKy0JCXhmODZEcnZNc2coc2NybkluZGV4LCBYX0VSUk9SLCAidmlzdWFsIHR5cGUgc2V0dXAgZmFpbGVkIgorKwkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLCAidmlzdWFsIHR5cGUgc2V0dXAgZmFpbGVkIgorIAkJICAgICAgICAgICAiIGZvciAlZCBiaXRzIHBlciBwaXhlbCBbMV1cbiIsCisgCQkgICAgICAgICAgIHBTY3JuLT5iaXRzUGVyUGl4ZWwpOworIAkJcmV0dXJuIEZBTFNFOworQEAgLTUzNCw3ICs1MzYsNyBAQCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCisgCS8qIFNldCB1cCBwaXhtYXAgZGVwdGggaW5mb3JtYXRpb24gKi8KKyAJaWYgKCFtaVNldFBpeG1hcERlcHRocygpKSB7CistCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCxYX0VSUk9SLCJwaXhtYXAgZGVwdGggc2V0dXAgZmFpbGVkXG4iKTsKKysJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCxYX0VSUk9SLCJwaXhtYXAgZGVwdGggc2V0dXAgZmFpbGVkXG4iKTsKKyAJCXJldHVybiBGQUxTRTsKKyAJfQorIAorQEAgLTU0Niw3ICs1NDgsNyBAQCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCSAgICAgICAgICAgICAgICAgIHBTY3JuLT52aXJ0dWFsWSwgcFNjcm4tPnhEcGksCisgCSAgICAgICAgICAgICAgICAgIHBTY3JuLT55RHBpLCBwU2Nybi0+ZGlzcGxheVdpZHRoLAorIAkgICAgICAgICAgICAgICAgICBwU2Nybi0+Yml0c1BlclBpeGVsKSkgeworLQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsICJmYlNjcmVlbkluaXQgZmFpbGVkXG4iKTsKKysJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwgImZiU2NyZWVuSW5pdCBmYWlsZWRcbiIpOworIAkJcmV0dXJuIEZBTFNFOworIAl9CisgCitAQCAtNTY3LDcgKzU2OSw3IEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAKKyAJLyogSW5pdGlhbGl6ZSBYUmVuZGVyIGZhbGxiYWNrcyAqLworIAlpZiAoIWZiUGljdHVyZUluaXQocFNjcmVlbiwgTlVMTCwgMCkpIHsKKy0JCXhmODZEcnZNc2coc2NybkluZGV4LCBYX0VSUk9SLCAiZmJQaWN0dXJlSW5pdCBmYWlsZWRcbiIpOworKwkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLCAiZmJQaWN0dXJlSW5pdCBmYWlsZWRcbiIpOworIAkJcmV0dXJuIEZBTFNFOworIAl9CisgCQorQEAgLTU3OSw3ICs1ODEsNyBAQCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCisgCS8qIEluaXRpYWxpemUgZGVmYXVsdCBjb2xvcm1hcCAqLworIAlpZiAoIW1pQ3JlYXRlRGVmQ29sb3JtYXAocFNjcmVlbikpIHsKKy0JCXhmODZEcnZNc2coc2NybkluZGV4LCBYX0VSUk9SLAorKwkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLAorIAkJICAgICAgICAgICAiY3JlYXRpbmcgZGVmYXVsdCBjb2xvcm1hcCBmYWlsZWRcbiIpOworIAkJcmV0dXJuIEZBTFNFOworIAl9CitAQCAtNTg5LDcgKzU5MSw3IEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCS8qIFRoaXMgaXMgbm9uLWZhdGFsIHNpbmNlIHdlIG1pZ2h0IGJlIHJ1bm5pbmcgYWdhaW5zdCBvbGRlcgorIAkJICoga2VybmVsIGRyaXZlciBpbiB3aGljaCBjYXNlIHdlIG9ubHkgZG8gYmFzaWMgMkQgc3R1ZmYuLi4KKyAJCSAqLworLQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsICJSZWFkaW5nIHBsYW5lIGluZm8gZmFpbGVkXG4iKTsKKysJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwgIlJlYWRpbmcgcGxhbmUgaW5mbyBmYWlsZWRcbiIpOworIAl9IGVsc2UgaWYgKCFvZmItPmRzcykgeworIAorIAkJb2ZiLT5wbGFuZV9pbmZvLmVuYWJsZWQgPSAxOworQEAgLTYwMiw3ICs2MDQsNyBAQCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQl9CisgCisgCQlpZiAoaW9jdGwgKG9mYi0+ZmQsIE9NQVBGQl9TRVRVUF9QTEFORSwgJm9mYi0+cGxhbmVfaW5mbykpIHsKKy0JCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwKKysJCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsCisgCQkJICAgICAgICAgICAgIiVzOiBQbGFuZSBzZXR1cCBmYWlsZWQ6ICVzXG4iLAorIAkJCSAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgc3RyZXJyb3IoZXJybm8pKTsKKyAJCQlyZXR1cm4gRkFMU0U7CitAQCAtNjQ1LDkgKzY0NywxMCBAQCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCXJldHVybiBUUlVFOworIH0KKyAKKy1zdGF0aWMgQm9vbCBPTUFQRkJTd2l0Y2hNb2RlKGludCBzY3JuSW5kZXgsIERpc3BsYXlNb2RlUHRyIG1vZGUsIGludCBmbGFncykKKytzdGF0aWMgQm9vbCBPTUFQRkJTd2l0Y2hNb2RlKFNXSVRDSF9NT0RFX0FSR1NfREVDTCkKKyB7CistCXJldHVybiB4Zjg2U2V0U2luZ2xlTW9kZSAoeGY4NlNjcmVlbnNbc2NybkluZGV4XSwgbW9kZSwgUlJfUm90YXRlXzApOworKwlTQ1JOX0lORk9fUFRSKGFyZyk7CisrCXJldHVybiB4Zjg2U2V0U2luZ2xlTW9kZSAocFNjcm4sIG1vZGUsIFJSX1JvdGF0ZV8wKTsKKyB9CisgCisgdm9pZAorQEAgLTY5OSwxNCArNzAyLDE0IEBAIE9NQVBGQlByaW50Q2FwYWJpbGl0aWVzKFNjcm5JbmZvUHRyIHBTY3JuLAorIC8qKiogVW5pbXBsZW1lbnRlZDogKi8KKyAKKyBzdGF0aWMgQm9vbAorLU9NQVBGQkVudGVyVlQoaW50IHNjcm5JbmRleCwgaW50IGZsYWdzKQorK09NQVBGQkVudGVyVlQoVlRfRlVOQ19BUkdTX0RFQ0wpCisgeworIAl4Zjg2TXNnKFhfTk9UX0lNUExFTUVOVEVELCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisgCXJldHVybiBUUlVFOworIH0KKyAKKyBzdGF0aWMgdm9pZAorLU9NQVBGQkxlYXZlVlQoaW50IHNjcm5JbmRleCwgaW50IGZsYWdzKQorK09NQVBGQkxlYXZlVlQoVlRfRlVOQ19BUkdTX0RFQ0wpCisgeworIAl4Zjg2TXNnKFhfTk9UX0lNUExFTUVOVEVELCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisgfQorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA3LWFsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA3LWFsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMwYjliMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDctYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitGaXggZXJyb3JzIHdpdGggZ2xpYmMgMi4yMAorCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUvc3RyaW5nLmg6NjM0OjAsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy9vcy5oOjUzLAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcvbWlzYy5oOjExNSwKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL3hmODZzdHIuaDozNywKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL3hmODYuaDo0NCwKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvd29yay9pNTg2LW9lLWxpbnV4L3hmODYtdmlkZW8tb21hcGZiLzJfMC4xLjErZ2l0ckFVVE9JTkMrMjhjMDA2Yzk0ZS1yMjEuNy9naXQvc3JjL29tYXBmYi14di1ibGl6emFyZC5jOjMzOgorL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy9vcy5oOjU3OToxOiBlcnJvcjogZXhwZWN0ZWQgaWRlbnRpZmllciBvciAnKCcgYmVmb3JlICdfX2V4dGVuc2lvbl9fJworIHN0cm5kdXAoY29uc3QgY2hhciAqc3RyLCBzaXplX3Qgbik7CisgXgorSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3N0cmluZy5oOjYzNDowLAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcvb3MuaDo1MywKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL21pc2MuaDoxMTUsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy94Zjg2c3RyLmg6MzcsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy94Zjg2Lmg6NDQsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3dvcmsvaTU4Ni1vZS1saW51eC94Zjg2LXZpZGVvLW9tYXBmYi8yXzAuMS4xK2dpdHJBVVRPSU5DKzI4YzAwNmM5NGUtcjIxLjcvZ2l0L3NyYy9vbWFwZmIteHYtZ2VuZXJpYy5jOjI4OgorL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy9vcy5oOjU3OToxOiBlcnJvcjogZXhwZWN0ZWQgaWRlbnRpZmllciBvciAnKCcgYmVmb3JlICdfX2V4dGVuc2lvbl9fJworIHN0cm5kdXAoY29uc3QgY2hhciAqc3RyLCBzaXplX3Qgbik7CisgXgorCitTaW5nZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK0luZGV4OiBnaXQvc3JjL29tYXBmYi14di1ibGl6emFyZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL29tYXBmYi14di1ibGl6emFyZC5jCTIwMTQtMDgtMjggMDU6MTY6MjUuNjg0MDcwNTg3IC0wNzAwCisrKysgZ2l0L3NyYy9vbWFwZmIteHYtYmxpenphcmQuYwkyMDE0LTA4LTI4IDE5OjA1OjM5LjQ0MDA3MDU4NyAtMDcwMAorQEAgLTMwLDYgKzMwLDcgQEAKKyAgKiAgLQorICAqLworIAorKyNpbmNsdWRlIDx4b3JnLXNlcnZlci5oPgorICNpbmNsdWRlICJ4Zjg2LmgiCisgI2luY2x1ZGUgInhmODZfT1NsaWIuaCIKKyAjaW5jbHVkZSAieGY4Nnh2LmgiCitJbmRleDogZ2l0L3NyYy9vbWFwZmIteHYtZ2VuZXJpYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL29tYXBmYi14di1nZW5lcmljLmMJMjAxNC0wOC0yOCAwNToxNjoyNS42ODQwNzA1ODcgLTA3MDAKKysrKyBnaXQvc3JjL29tYXBmYi14di1nZW5lcmljLmMJMjAxNC0wOC0yOCAxOTowNTo1MS43ODAwNzA1ODcgLTA3MDAKK0BAIC0yNSw2ICsyNSw3IEBACisgICogR2VuZXJpYyBmdW5jdGlvbnMgZm9yIHRoZSBYViBkcml2ZXIKKyAgKi8KKyAKKysjaW5jbHVkZSA8eG9yZy1zZXJ2ZXIuaD4KKyAjaW5jbHVkZSAieGY4Ni5oIgorICNpbmNsdWRlICJ4Zjg2X09TbGliLmgiCisgI2luY2x1ZGUgInhmODZ4di5oIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmJfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmJfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZWI4NzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYl9naXQuYmIKQEAgLTAsMCArMSwzNSBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci12aWRlby5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBUZXhhcyBJbnN0cnVtZW50cyBPTUFQIGZyYW1lYnVmZmVyIGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAib21hcGZiIGRyaXZlciBzdXBwb3J0cyB0aGUgYmFzaWMgVGV4YXMgSW5zdHJ1bWVudHMgT01BUCBcCitmcmFtZWJ1ZmZlci4iCisKK0xJQ0VOU0UgPSAiTUlULVggJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02M2UyY2JhYzUzODYzZjYwZTJmNDMzNDNmYjM0MzY3ZiIKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIgorCitTUkNSRVYgPSAiMzNlMzZjMTJkZGUzMzZlZGJkZDM0NjI2ZGQ4YWRmY2FlYmM4ZmJiOCIKK1BSID0gIiR7SU5DX1BSfS43IgorUFYgPSAiMC4xLjErZ2l0ciR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2Fub25zY20uZGViaWFuLm9yZy9jb2xsYWItbWFpbnQveGY4Ni12aWRlby1vbWFwZmIuZ2l0IFwKKyAgZmlsZTovLzAwMDEtUHJldmVudHMtb21hcGZiLWZyb20tZnJvbS1jcmFzaGluZy13aGVuLXBpeGVsY2xvY2stby5wYXRjaCBcCisgIGZpbGU6Ly8wMDAxLVJldmVydC1TZXQtYS1sYXJnZS1DUlRDLXVwcGVyLWxpbWl0LXRvLW5vdC1wcnVuZS1sYXIucGF0Y2ggXAorICBmaWxlOi8vMDAwMi1SZXZlcnQtU2V0LXZpcnR1YWwtc2l6ZS13aGVuLWNvbmZpZ3VyaW5nLWZyYW1lYnVmZmVyLnBhdGNoIFwKKyAgZmlsZTovLzAwMDMtZm9yY2UtcGxhaW4tbW9kZS5wYXRjaCBcCisgIGZpbGU6Ly8wMDA0LWJsYWNrbGlzdC10di1vdXQucGF0Y2ggXAorICBmaWxlOi8vMDAwNS1BdHRlbXB0LXRvLWZpeC1WUkZCLnBhdGNoIFwKKyAgZmlsZTovLzAwMDYtb21hcGZiLXBvcnQtdG8tbmV3LXhzZXJ2ZXItdmlkZW8tQVBJLnBhdGNoIFwKKyAgZmlsZTovLzAwMDctYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0VYVFJBX09FQ09ORl9hcm12N2EgPSAiIC0tZW5hYmxlLW5lb24gIgorQ0ZMQUdTICs9ICIgLUkke1NUQUdJTkdfSU5DRElSfS94b3JnICIKKworIyBVc2Ugb3ZlcmxheSAyIG9uIG9tYXAzIHRvIGVuYWJsZSBvdGhlciBhcHBzIHRvIHVzZSBvdmVybGF5IDEgKGUuZy4gZG1haSBvciBvbWFwZmJwbGF5KQorZG9fY29tcGlsZV9wcmVwZW5kX2FybXY3YSAoKSB7CisgICAgICAgIHNlZCAtaSAtZSBzOmZiMTpmYjI6ZyAke1N9L3NyYy9vbWFwZmIteHYuYworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12ZXNhXzIuMy40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12ZXNhXzIuMy40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMjUxYjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLXZlc2FfMi4zLjQuYmIKQEAgLTAsMCArMSwyMSBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci12aWRlby5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTFmMDYxMGViZGM2ZjMxNGE5ZmE1MTAyYThjNWMxYjAiCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gR2VuZXJpYyBWZXNhIHZpZGVvIGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAidmVzYSBpcyBhbiBYb3JnIGRyaXZlciBmb3IgZ2VuZXJpYyBWRVNBIHZpZGVvIGNhcmRzLiBJdCBcCitjYW4gZHJpdmUgbW9zdCBWRVNBLWNvbXBhdGlibGUgdmlkZW8gY2FyZHMsIGJ1dCBvbmx5IG1ha2VzIHVzZSBvZiB0aGUgXAorYmFzaWMgc3RhbmRhcmQgVkVTQSBjb3JlIHRoYXQgaXMgY29tbW9uIHRvIHRoZXNlIGNhcmRzLiBUaGUgZHJpdmVyIFwKK3N1cHBvcnRzIGRlcHRocyA4LCAxNSAxNiBhbmQgMjQuIgorCitQUiA9ICIke0lOQ19QUn0uMCIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgcmFuZHJwcm90byBsaWJwY2lhY2Nlc3MiCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoaS44Nnx4ODZfNjQpLiotbGludXgnCisKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICJ4c2VydmVyLXhvcmctbW9kdWxlLWxpYmludDEwIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTg5M2MzN2M1ODlmN2EzMWNlYTkyOWE1ZDg5NmEwZTIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2JkZGY0ZDg3OWRkNmY2NzA4OGVjYjIwM2EzMWUxMjMzNGFhYjk4MDE3NGJkMDkwOTkzMGEyMWYzMmUyNTFjMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tdm13YXJlLzAwMDItYWRkLW9wdGlvbi1mb3Itdm13Z2Z4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12bXdhcmUvMDAwMi1hZGQtb3B0aW9uLWZvci12bXdnZngucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzOWQwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tdm13YXJlLzAwMDItYWRkLW9wdGlvbi1mb3Itdm13Z2Z4LnBhdGNoCkBAIC0wLDAgKzEsOTggQEAKK1Vwc3RyZWFtLVN0YXR1czpTdWJtaXR0ZWQKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Zyb20gZjEwM2Q2ZjU3MDY3MWM2NDljY2Q3YjIyNWU2ZDZjOWYxNDM3MTg4OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDI1IEp1biAyMDE0IDE2OjE2OjQ0ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBhZGQgb3B0aW9uIGZvciB2bXdnZngKKworLS0tCisgY29uZmlndXJlLmFjIHwgICA0OSArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiZTQwZWQ3Li44ZTE1MzA3IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02NCw2ICs2NCwxMyBAQCBBQ19BUkdfRU5BQkxFKHZtd2FyZWN0cmwtY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1ZNV0FSRUNUUkw9JGVuYWJsZXZhbF0sIFtWTVdBUkVDVFJMPW5vXSkKKyBBTV9DT05ESVRJT05BTChCVUlMRF9WTVdBUkVDVFJMLCBbdGVzdCAieCRWTVdBUkVDVFJMIiA9IHh5ZXNdKQorIAorKyMgRGVmaW5lIGEgY29uZmlndXJlIG9wdGlvbiB0byBidWlsZCB0aGUgdm13Z2Z4IGRyaXZlcgorK0FDX0FSR19FTkFCTEUodm13Z2Z4LAorKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS12bXdnZnhdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0Rpc2FibGUgdm13Z2Z4IGRyaXZlciAoS01TLzNEKSAoZGVmYXVsdDogZW5hYmxlZCldKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtWTVdHRlg9IiRlbmFibGV2YWwiXSwgW1ZNV0dGWD0ieWVzIl0pCisrQU1fQ09ORElUSU9OQUwoQlVJTERfVk1XR0ZYLCB0ZXN0ICJ4JFZNV0dGWCIgPSB4eWVzKQorKworICMgU3RvcmUgdGhlIGxpc3Qgb2Ygc2VydmVyIGRlZmluZWQgb3B0aW9uYWwgZXh0ZW5zaW9ucyBpbiBSRVFVSVJFRF9NT0RVTEVTCisgWE9SR19EUklWRVJfQ0hFQ0tfRVhUKFJBTkRSLCByYW5kcnByb3RvKQorIFhPUkdfRFJJVkVSX0NIRUNLX0VYVChSRU5ERVIsIHJlbmRlcnByb3RvKQorQEAgLTg1LDExICs5Miw2IEBAIFBLR19DSEVDS19FWElTVFMoW3hvcmctc2VydmVyID49IDEuNC45OV0sCisgICAgICAgICAgICAgICAgICBbQUNfREVGSU5FKFtIQVZFX1hPUkdfU0VSVkVSXzFfNV8wXSwgMSwKKyAgICAgICAgICAgICAgICAgIFtIYXMgdmVyc2lvbiAxLjUuMCBvciBncmVhdGVyIG9mIHRoZSBYc2VydmVyXSldKQorIAorLVBLR19DSEVDS19FWElTVFMoW3hvcmctc2VydmVyID49IDEuNy4wXSwKKy0gICAgICAgICAgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfWE9SR19TRVJWRVJfMV83XzBdLCAxLAorLSAgICAgICAgICAgICAgICAgW0hhcyB2ZXJzaW9uIDEuNy4wIG9yIGdyZWF0ZXIgb2YgdGhlIFhzZXJ2ZXJdKQorLQkJIEJVSUxEX1ZNV0dGWD15ZXNdLFtCVUlMRF9WTVdHRlg9bm9dKQorLQorIFBLR19DSEVDS19FWElTVFMoW3hvcmctc2VydmVyID49IDEuMTIuMF0sCisgICAgICAgICAgICAgICAgICBbQUNfREVGSU5FKFtIQVZFX1hPUkdfU0VSVkVSXzFfMTJfMF0sIDEsCisgICAgICAgICAgICAgICAgICBbSGFzIHZlcnNpb24gMS4xMi4wIG9yIGdyZWF0ZXIgb2YgdGhlIFhzZXJ2ZXJdKV0pCitAQCAtMTE0LDM5ICsxMTYsMjggQEAgQU1fQ09ORElUSU9OQUwoWFNFUlZFUl9MSUJQQ0lBQ0NFU1MsIHRlc3QgIngkWFNFUlZFUl9MSUJQQ0lBQ0NFU1MiID0geHllcykKKyAKKyBBQ19TVUJTVChbbW9kdWxlZGlyXSkKKyAKKy1pZiB0ZXN0IHgkQlVJTERfVk1XR0ZYID0geHllczsgdGhlbgorLQlQS0dfQ0hFQ0tfTU9EVUxFUyhbTElCRFJNXSwgW2xpYmRybV0sW10sW0JVSUxEX1ZNV0dGWD1ub10pCistZmkKKy1pZiB0ZXN0IHgkQlVJTERfVk1XR0ZYID0geHllczsgdGhlbgorLSMKKy0jIEVhcmx5IHZlcnNpb25zIG9mIG1lc2EgMTAgZm9yZ290IHRvIGJ1bXAgdGhlIFhBIG1ham9yIHZlcnNpb24gbnVtYmVyIGluCistIyB0aGUgeGFfdHJhY2tlci5oIGhlYWRlcgorLSMKKy0JUEtHX0NIRUNLX01PRFVMRVMoW1hBVFJBQ0tFUl0sIFt4YXRyYWNrZXIgPj0gMC40LjBdLAorLQkJCSAgW1BLR19DSEVDS19FWElTVFMoW3hhdHJhY2tlciA9IDIuMC4wXSwKKy0JICAgICAgICAgICAgICAgICAgW0FDX0RFRklORShbSEFWRV9YQV8yXSwgMSwKKy0gICAgICAgICAgICAgICAJCSAgW0hhcyB2ZXJzaW9uIDIgb2YgWEFdKV0pXSwKKy0JCQkgIFtCVUlMRF9WTVdHRlg9bm9dKQorLSMKKy0jIENoZWNrIGZvciBwcmltZS4KKy0jCisrQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIEtlcm5lbCBNb2RlIFNldHRpbmcgYW5kIDNEXSkKKytpZiB0ZXN0IHgkVk1XR0ZYID0geHllczsgdGhlbgorKwlQS0dfQ0hFQ0tfTU9EVUxFUyhbTElCRFJNXSwgW2xpYmRybV0pCisrCSMgQ2hlY2sgZm9yIHByaW1lLgorIAlQS0dfQ0hFQ0tfRVhJU1RTKFtsaWJkcm0gPj0gMi40LjM4XSwKKyAJCQkgW0FDX0RFRklORShbSEFWRV9MSUJEUk1fMl80XzM4XSwgMSwKKyAJCQkgW0hhcyB2ZXJzaW9uIDIuNC4zOCBvciBncmVhdGVyIG9mIGxpYmRybV0pXSkKKy1maQorIAorLURSSVZFUl9OQU1FPXZtd2FyZQorLUFDX1NVQlNUKFtEUklWRVJfTkFNRV0pCistCistQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIEtlcm5lbCBNb2RlIFNldHRpbmcgYW5kIDNEXSkKKy1pZiB0ZXN0IHgkQlVJTERfVk1XR0ZYID0geHllczsgdGhlbgorLQlBQ19NU0dfUkVTVUxUKFt5ZXNdKQorKwkjIEVhcmx5IHZlcnNpb25zIG9mIG1lc2EgMTAgZm9yZ290IHRvIGJ1bXAgdGhlIFhBIG1ham9yIHZlcnNpb24gbnVtYmVyCisrCSMgaW4gdGhlIHhhX3RyYWNrZXIuaCBoZWFkZXIKKysJUEtHX0NIRUNLX01PRFVMRVMoW1hBVFJBQ0tFUl0sIFt4YXRyYWNrZXIgPj0gMC40LjBdLAorKwkJCSAgW1BLR19DSEVDS19FWElTVFMoW3hhdHJhY2tlciA9IDIuMC4wXSwKKysJICAgICAgICAgICAgICAgICAgW0FDX0RFRklORShbSEFWRV9YQV8yXSwgMSwKKysgICAgICAgICAgICAgICAJCSAgW0hhcyB2ZXJzaW9uIDIgb2YgWEFdKV0pXSkKKyAgICAgICAgIEFDX0RFRklORShbQlVJTERfVk1XR0ZYXSwgMSwgW0J1aWxkaW5nIHRoZSB2bXdnZnggZHJpdmVyIHBhdGhdKQorKwlBQ19NU0dfUkVTVUxUKFt5ZXNdKQorIGVsc2UKKyAJQUNfTVNHX1JFU1VMVChbbm9dKQorIGZpCisgCistQU1fQ09ORElUSU9OQUwoQlVJTERfVk1XR0ZYLCB0ZXN0ICJ4JEJVSUxEX1ZNV0dGWCIgPSB4eWVzKQorK0RSSVZFUl9OQU1FPXZtd2FyZQorK0FDX1NVQlNUKFtEUklWRVJfTkFNRV0pCisgCisgQUNfQ09ORklHX0ZJTEVTKFsKKyAgICAgICAgICAgICAgICAgTWFrZWZpbGUKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12bXdhcmVfMTMuMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12bXdhcmVfMTMuMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5Yjk4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLXZtd2FyZV8xMy4xLjAuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci12aWRlby5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBWTXdhcmUgU1ZHQSBkaXNwbGF5IGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAidm13YXJlIGlzIGFuIFhvcmcgZHJpdmVyIGZvciBWTXdhcmUgdmlydHVhbCB2aWRlbyBjYXJkcy4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmY2Q3ZDQzN2E5NTlhMTVmYmVlODcwNzc0N2M2YjUzIgorCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSB4aW5lcmFtYXByb3RvIHZpZGVvcHJvdG8gbGlicGNpYWNjZXNzIgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMi1hZGQtb3B0aW9uLWZvci12bXdnZngucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwY2JhMjJmZWQ0Y2I2MzlkNWM0Mjc2Zjc4OTJjNTQzZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzYzFkMjQ0ZTRiMWI3N2U5MjEyNjk1Nzk2NWNkYzlmYjgyZGU0YzIxNWMwNzA2YTNhOGFhZmY2OTM5ZTRhMGNjIgorCitDT01QQVRJQkxFX0hPU1QgPSAnKGkuODYuKi1saW51eHx4ODZfNjQuKi1saW51eCknCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXZtd2dmeCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLWNvbW1vbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94b3JnLWRyaXZlci1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZGQxYzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94b3JnLWRyaXZlci1jb21tb24uaW5jCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiWCBkcml2ZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJ4MTEvZHJpdmVycyIKK0xJQ0VOU0UgPSAiTUlULVgiCisKK1BFID0gIjIiCitJTkNfUFIgPSAicjIxIgorCitERVBFTkRTID0gInZpcnR1YWwveHNlcnZlciB4cHJvdG8gcmFuZHJwcm90byB1dGlsLW1hY3JvcyIKKworU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL2RyaXZlci8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKKworRklMRVNfJHtQTn0gKz0gIiAke2xpYmRpcn0veG9yZy9tb2R1bGVzL2RyaXZlcnMvKi5zbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiICR7bGliZGlyfS94b3JnL21vZHVsZXMvZHJpdmVycy8uZGVidWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL3hzZXJ2ZXIKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKKyMgRklYTUU6IFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgbGlidG9vbCBhcmNoaXZlcyAoKi5sYSkgZnJvbSBtb2R1bGVzCisjIGRpcmVjdG9yeSwgYXMgdGhleSBzZXJ2ZSBubyB1c2VmdWwgcHVycG9zZS4gVXBzdHJlYW0gc2hvdWxkIGZpeCBNYWtlZmlsZS5hbQorZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJZmluZCAke0R9JHtsaWJkaXJ9L3hvcmcvbW9kdWxlcyAtcmVnZXggIi4qXC5sYSQiIHwgeGFyZ3Mgcm0gLWYgLS0KK30KKworIyBGdW5jdGlvbiB0byBhZGQgdGhlIHJlbGV2YW50IEFCSSBkZXBlbmRlbmN5IHRvIGRyaXZlcnMsIHdoaWNoIHNob3VsZCBiZSBjYWxsZWQKKyMgZnJvbSBhIFBBQ0tBR0VGVU5DLgorZGVmIF9hZGRfeG9yZ19hYmlfZGVwZW5kcyhkLCBuYW1lKToKKyAgICAjIE1hcCBvZiBBQkkgbmFtZXMgZXhwb3NlZCBpbiB0aGUgZGVwZW5kZW5jaWVzIHRvIHBrZy1jb25maWcgdmFyaWFibGVzCisgICAgYWJpcyA9IHsKKyAgICAgICJ2aWRlbyI6ICJhYmlfdmlkZW9kcnYiLAorICAgICAgImlucHV0IjogImFiaV94aW5wdXQiCisgICAgfQorCisgICAgb3V0cHV0ID0gb3MucG9wZW4oInBrZy1jb25maWcgeG9yZy1zZXJ2ZXIgLS12YXJpYWJsZT0lcyIgJSBhYmlzW25hbWVdKS5yZWFkKCkKKyAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICcnCisgICAgYWJpID0gIiVzeG9yZy1hYmktJXMtJXMiICUgKG1scHJlZml4LCBuYW1lLCBvdXRwdXQuc3BsaXQoIi4iKVswXSkKKworICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBkLmFwcGVuZFZhcignUkRFUEVORFNfJyArIHBuLCAnICcgKyBhYmkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94b3JnLWRyaXZlci1pbnB1dC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94b3JnLWRyaXZlci1pbnB1dC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlYzA2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLWlucHV0LmluYwpAQCAtMCwwICsxLDExIEBACitpbmNsdWRlIHhvcmctZHJpdmVyLWNvbW1vbi5pbmMKKworREVQRU5EUyArPSAiaW5wdXRwcm90byBrYnByb3RvICIKKworcHl0aG9uIGFkZF94b3JnX2FiaV9kZXBlbmRzKCkgeworICAgIF9hZGRfeG9yZ19hYmlfZGVwZW5kcyhkLCAiaW5wdXQiKQorfQorUEFDS0FHRUZVTkNTID0rICJhZGRfeG9yZ19hYmlfZGVwZW5kcyIKKworRklMRVNfJHtQTn0gKz0gIiAke2xpYmRpcn0veG9yZy9tb2R1bGVzL2lucHV0Lyouc28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiAke2xpYmRpcn0veG9yZy9tb2R1bGVzL2lucHV0Ly5kZWJ1ZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLXZpZGVvLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLXZpZGVvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODI4MWUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveG9yZy1kcml2ZXItdmlkZW8uaW5jCkBAIC0wLDAgKzEsOCBAQAoraW5jbHVkZSB4b3JnLWRyaXZlci1jb21tb24uaW5jCisKK0RFUEVORFMgPSsgInJlbmRlcnByb3RvIHZpZGVvcHJvdG8geGV4dHByb3RvIGZvbnRzcHJvdG8iCisKK3B5dGhvbiBhZGRfeG9yZ19hYmlfZGVwZW5kcygpIHsKKyAgICBfYWRkX3hvcmdfYWJpX2RlcGVuZHMoZCwgInZpZGVvIikKK30KK1BBQ0tBR0VGVU5DUyA9KyAiYWRkX3hvcmdfYWJpX2RlcGVuZHMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZW5jb2RpbmdzL25vY29tcGlsZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZW5jb2RpbmdzL25vY29tcGlsZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMzMGMxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3Mvbm9jb21waWxlci5wYXRjaApAQCAtMCwwICsxLDMzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1hPUkdfREVGQVVMVF9PUFRJT05TIHB1bGxzIGluIHRoZSBmb2xsb3dpbmcgZGVwZW5kZW5jeSBjaGFpbnM6CisKK1hPUkdfQ1dBUk5GTEFHUyAtPiBBQ19QUk9HX0NDX0M5OQorWE9SR19TVFJJQ1RfT1BUSU9OIC0+IEFDX1BST0dfQ0NfQzk5LCBYT1JHX0NXQVJORkxBR1MKK1hPUkdfTUFOUEFHRV9TRUNUSU9OUyAtPiBBQ19DQU5PTklDQUxfSE9TVCAtPiBDaGVja3MgaG9zdCAKKworZWFjaCBvZiB3aGljaCB0cmlnZ2VycyB0aGUgdXNlIG9mIHRoZSBob3N0IGNvbXBpbGVyLiBBcyBhbiAiYWxsIgorYXJjaGl0ZWN0dXJlIHBhY2thZ2UsIGl0IHNob3VsZG4ndCBuZWVkIGEgY29tcGlsZXIgKGFuZCBkb2Vzbid0KS4KKworUlAgMTcvNS8yMDExCisKK0luZGV4OiBlbmNvZGluZ3MtMS4wLjQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZW5jb2RpbmdzLTEuMC40Lm9yaWcvY29uZmlndXJlLmFjCTIwMTEtMDUtMTcgMjM6MzY6MTkuNTA1MDk1ODc2ICswMTAwCisrKysgZW5jb2RpbmdzLTEuMC40L2NvbmZpZ3VyZS5hYwkyMDExLTA1LTE3IDIzOjU0OjE0LjkzNTA5NjEyOCArMDEwMAorQEAgLTQsMTIgKzQsMTIgQEAKKyBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduIGRpc3QtYnppcDJdKQorIEFNX01BSU5UQUlORVJfTU9ERQorIAorLSMgUmVxdWlyZSB4b3JnLW1hY3JvczogWE9SR19ERUZBVUxUX09QVElPTlMKKyBtNF9pZm5kZWYoW1hPUkdfTUFDUk9TX1ZFUlNJT05dLAorIAkgIFttNF9mYXRhbChbbXVzdCBpbnN0YWxsIHhvcmctbWFjcm9zIDEuMyBvciBsYXRlciBiZWZvcmUgcnVubmluZyBhdXRvY29uZi9hdXRvZ2VuXSldKQorIFhPUkdfTUFDUk9TX1ZFUlNJT04oMS4zKQorLVhPUkdfREVGQVVMVF9PUFRJT05TCistCisrWE9SR19SRUxFQVNFX1ZFUlNJT04KKytYT1JHX0NIQU5HRUxPRworK1hPUkdfSU5TVEFMTAorIEFDX1BST0dfSU5TVEFMTAorIAorICMgUmVxdWlyZSBYLk9yZydzIGZvbnQgdXRpbCBtYWNyb3MgMS4yIG9yIGxhdGVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZW5jb2RpbmdzXzEuMC40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2VuY29kaW5nc18xLjAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDg0NmQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2VuY29kaW5nc18xLjAuNC5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIlRoZSBYb3JnIGZvbnQgZW5jb2RpbmcgZmlsZXMiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBlbmNvZGluZ3MgdGhhdCBtYXAgdG8gc3BlY2lmaWMgY2hhcmFjdGVycyBmb3IgYSBcCitudW1iZXIgb2YgWG9yZyBhbmQgY29tbW9uIGZvbnRzLiIKKworcmVxdWlyZSB4b3JnLWZvbnQtY29tbW9uLmluYworTElDRU5TRSA9ICJQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTlkYTkzZjJkYWYyZDU1NzJmYWEyYmZhZjBkYmQ5ZTc2IgorUEUgPSAiMSIKK1BSID0gIiR7SU5DX1BSfS4xIgorCitERVBFTkRTID0gIm1rZm9udHNjYWxlLW5hdGl2ZSBmb250LXV0aWwtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAiIgorCitTUkNfVVJJICs9ICJmaWxlOi8vbm9jb21waWxlci5wYXRjaCIKKworaW5oZXJpdCBhbGxhcmNoCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLWVuY29kaW5nc2Rpcj0ke2RhdGFkaXJ9L2ZvbnRzL1gxMS9lbmNvZGluZ3MiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwZjJkNjU0NmQ1MTRjNWNjNGVjZjc4YTYwNjU3YTVjMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZWQ2MzEyOTg4YTQ1ZDIzODEyYzJhYzcwOGI0NTk1ZjYzZmQ3YTQ5YzRkY2Q5ZjY2YmRjZDUwZDEwNTdkNTM5IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2ZvbnQtYWxpYXMtMS4wLjMvbm9jb21waWxlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LWFsaWFzLTEuMC4zL25vY29tcGlsZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI5ZmI4YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LWFsaWFzLTEuMC4zL25vY29tcGlsZXIucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitYT1JHX0RFRkFVTFRfT1BUSU9OUyBwdWxscyBpbiB0aGUgZm9sbG93aW5nIGRlcGVuZGVuY3kgY2hhaW5zOgorCitYT1JHX0NXQVJORkxBR1MgLT4gQUNfUFJPR19DQ19DOTkKK1hPUkdfU1RSSUNUX09QVElPTiAtPiBBQ19QUk9HX0NDX0M5OSwgWE9SR19DV0FSTkZMQUdTCitYT1JHX01BTlBBR0VfU0VDVElPTlMgLT4gQUNfQ0FOT05JQ0FMX0hPU1QgLT4gQ2hlY2tzIGhvc3QgCisKK2VhY2ggb2Ygd2hpY2ggdHJpZ2dlcnMgdGhlIHVzZSBvZiB0aGUgaG9zdCBjb21waWxlci4gQXMgYW4gImFsbCIKK2FyY2hpdGVjdHVyZSBwYWNrYWdlLCBpdCBzaG91bGRuJ3QgbmVlZCBhIGNvbXBpbGVyIChhbmQgZG9lc24ndCkuCisKK1JQIDE3LzUvMjAxMQorCitkaWZmIC11TnIgZm9udC1hbGlhcy0xLjAuMy5vcmlnLy9jb25maWd1cmUuYWMgZm9udC1hbGlhcy0xLjAuMy9jb25maWd1cmUuYWMKKy0tLSBmb250LWFsaWFzLTEuMC4zLm9yaWcvL2NvbmZpZ3VyZS5hYwkyMDExLTA1LTE4IDIxOjI5OjE4LjM3ODI1ODY0MyArMDIwMAorKysrIGZvbnQtYWxpYXMtMS4wLjMvY29uZmlndXJlLmFjCTIwMTEtMDUtMTggMjE6MzI6MDYuODY1MjU4NTkzICswMjAwCitAQCAtMjgsMTIgKzI4LDEyIEBACisgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbiBkaXN0LWJ6aXAyXSkKKyBBTV9NQUlOVEFJTkVSX01PREUKKyAKKy0jIFJlcXVpcmUgeG9yZy1tYWNyb3M6IFhPUkdfREVGQVVMVF9PUFRJT05TCisgbTRfaWZuZGVmKFtYT1JHX01BQ1JPU19WRVJTSU9OXSwKKyAJICBbbTRfZmF0YWwoW211c3QgaW5zdGFsbCB4b3JnLW1hY3JvcyAxLjMgb3IgbGF0ZXIgYmVmb3JlIHJ1bm5pbmcgYXV0b2NvbmYvYXV0b2dlbl0pXSkKKyBYT1JHX01BQ1JPU19WRVJTSU9OKDEuMykKKy1YT1JHX0RFRkFVTFRfT1BUSU9OUworLQorK1hPUkdfUkVMRUFTRV9WRVJTSU9OCisrWE9SR19DSEFOR0VMT0cKKytYT1JHX0lOU1RBTEwKKyBBQ19QUk9HX0lOU1RBTEwKKyAKKyBYT1JHX0ZPTlRST09URElSCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC1hbGlhc18xLjAuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LWFsaWFzXzEuMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZTEwMTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC1hbGlhc18xLjAuMy5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIlggZm9udCBhbGlhc2VzIgorCityZXF1aXJlIHhvcmctZm9udC1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YmYwMTU4Yjg5YmU0OTNkNTIzZDY5ZDlmMjkyNjUwMzggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY3lyaWxsaWMvZm9udHMuYWxpYXM7bWQ1PWY0MDc5NWIwNjQwZDY3ODU4MjZhZWNkM2IxNmY2MTI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLzc1ZHBpL2ZvbnRzLmFsaWFzO21kNT02YmM0ODAyM2YyYWU3ZjNiZmMxMDVkYjdiMGVlNmI0OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9taXNjL2ZvbnRzLmFsaWFzO21kNT1hOGVjMDVkNTI4NDMxZDRjOTcwM2I1NWE3ZWZkNjdhOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8xMDBkcGkvZm9udHMuYWxpYXM7bWQ1PTg1YmViZDZjYTIxM2FhNjU2YzMwMWE3MmViNDM5N2NiIgorCitTUkNfVVJJICs9ICJmaWxlOi8vbm9jb21waWxlci5wYXRjaCIKKworREVQRU5EUyA9ICJ1dGlsLW1hY3Jvcy1uYXRpdmUgZm9udC11dGlsLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gImVuY29kaW5ncyBmb250LXV0aWwiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiZm9udC11dGlsLW5hdGl2ZSIKKworaW5oZXJpdCBhbGxhcmNoCisKK1BFID0gIjEiCitQUiA9ICIke0lOQ19QUn0uMyIKKworU1JDX1VSSVttZDVzdW1dID0gIjZkMjVmNjQ3OTZmZWYzNGI1M2I0MzljMmU5ZWZhNTYyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhiNDUzYjJhYWUxY2ZhODA5MDAwOWNhMDM3MDM3YjhjNWUzMzM1NTA2NTFkNWExNThiNzI2NGNlMWQ0NzJjOWEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC11dGlsXzEuMy4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2ZvbnQtdXRpbF8xLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjg1MTI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2ZvbnQtdXRpbF8xLjMuMS5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIlguT3JnIGZvbnQgcGFja2FnZSBjcmVhdGlvbi9pbnN0YWxsYXRpb24gdXRpbGl0aWVzIgorCityZXF1aXJlIHhvcmctZm9udC1jb21tb24uaW5jCisKKyNVbmljb2RlIGlzIE1JVAorTElDRU5TRSA9ICJCU0QgJiBNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZGYyMDhlYzY1ZWI4NGNlNWJiOGQ4MmQ4ZjNiOTY3NSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly91Y3MyYW55LmM7ZW5kbGluZT0yODttZDU9ODM1N2RjNTY3ZmM2MjhiZDEyNjk2ZjE1YjJhMzNiY2IgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYmRmdHJ1bmNhdGUuYztlbmRsaW5lPTI2O21kNT00ZjgyZmZjMTAxYTFiMTY1ZWFlOWM2OTk4YWJmZjkzNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tYXAtSVNPODg1OS0xO2JlZ2lubGluZT05O2VuZGxpbmU9MjM7bWQ1PTFjZWNiOTg0MDYzMjQ4ZjI5ZmZlNWM0NmY1YzA0ZjM0IgorCitERVBFTkRTID0gImVuY29kaW5ncyB1dGlsLW1hY3JvcyIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInV0aWwtbWFjcm9zLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gIm1rZm9udGRpciBta2ZvbnRzY2FsZSBlbmNvZGluZ3MiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAibWtmb250ZGlyLW5hdGl2ZSBta2ZvbnRzY2FsZS1uYXRpdmUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjM3NTZkYWI4MDlmOWVjNTAxMWJiMjdmYjJjM2M3ZDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWE3ZWJkYjA3MTUxMDZkZDI1NTA4MmYyMzEwZGJhYTJjZDdlMjI1OTU3YzJhNzdkNzE5NzIwYzdjYzkyYjkyMSIKKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJmb250dXRpbF9zeXNyb290X3ByZXByb2Nlc3MiCitmb250dXRpbF9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke2RhdGFkaXJ9L2ZvbnRzLyAke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9L2ZvbnRzLworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctZm9udC1jb21tb24uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctZm9udC1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjY3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1mb250LWNvbW1vbi5pbmMKQEAgLTAsMCArMSw0MiBAQAorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9eG9yZyIKKworU0VDVElPTiA9ICJ4MTEvZm9udHMiCitMSUNFTlNFID0gIk1JVC1YIgorCitERVBFTkRTID0gIiBlbmNvZGluZ3MgZm9udC1hbGlhcyBmb250LXV0aWwtbmF0aXZlIG1rZm9udGRpci1uYXRpdmUgbWtmb250c2NhbGUtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAiZW5jb2RpbmdzIGZvbnQtdXRpbCBmb250LWFsaWFzIgorCitYT1JHX1BOID0gIiR7QlBOfSIKK0lOQ19QUiA9ICJyMiIKKworCitTUkNfVVJJID0gIiR7WE9SR19NSVJST1J9L2luZGl2aWR1YWwvZm9udC8ke1hPUkdfUE59LSR7UFZ9LnRhci5iejIiCitTID0gIiR7V09SS0RJUn0vJHtYT1JHX1BOfS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBta2ZvbnRzY2FsZS1uYXRpdmUgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworRVhUUkFfT0VNQUtFICs9ICJGQ0NBQ0hFPS9iaW4vdHJ1ZSBVVElMX0RJUj0ke1NUQUdJTkdfRElSX1RBUkdFVH1cJFwoTUFQRklMRVNfUEFUSFwpIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlmaW5kICR7RH0ke2xpYmRpcn0vWDExL2ZvbnRzIC10eXBlIGYgLW5hbWUgZm9udHMuZGlyIHwgeGFyZ3Mgcm0gLWYKKwlmaW5kICR7RH0ke2xpYmRpcn0vWDExL2ZvbnRzIC10eXBlIGYgLW5hbWUgZm9udHMuc2NhbGUgfCB4YXJncyBybSAtZgorCWZpbmQgJHtEfSR7ZGF0YWRpcn0vZm9udHMvWDExIC10eXBlIGYgLW5hbWUgZm9udHMuZGlyIHwgeGFyZ3Mgcm0gLWYKKwlmaW5kICR7RH0ke2RhdGFkaXJ9L2ZvbnRzL1gxMSAtdHlwZSBmIC1uYW1lIGZvbnRzLnNjYWxlIHwgeGFyZ3Mgcm0gLWYJCit9CisKK0ZJTEVTXyR7UE59ICs9ICIgJHtsaWJkaXJ9L1gxMS9mb250cyAke2RhdGFkaXJ9IgorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworICAgICAgICBmb3IgZm9udGRpciBpbiBgZmluZCAkRC91c3IvbGliL1gxMS9mb250cyAtdHlwZSBkYDsgZG8KKyAgICAgICAgICAgICAgICBta2ZvbnRkaXIgJGZvbnRkaXIKKyAgICAgICAgICAgICAgICBta2ZvbnRzY2FsZSAkZm9udGRpcgorICAgICAgICBkb25lCisgICAgICAgIGZvciBmb250ZGlyIGluIGBmaW5kICREL3Vzci9zaGFyZS9mb250cy9YMTEgLXR5cGUgZGA7IGRvCisgICAgICAgICAgICAgICAgbWtmb250ZGlyICRmb250ZGlyCisgICAgICAgICAgICAgICAgbWtmb250c2NhbGUgJGZvbnRkaXIKKyAgICAgICAgZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJjZDFiMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJYb3JnIG1pbmltYWwgZm9udHMgZGF0YSIKK0RFU0NSSVBUSU9OID0gIk1pbmltYWwgZm9udHMgcmVxdWlyZWQgYnkgWC5vcmcuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54Lm9yZyIKKworU0VDVElPTiA9ICJ4MTEvZm9udHMiCisKK0xJQ0VOU0UgPSAiUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8uLi9taXNjL2ZvbnRzLmRpcjttZDU9ODJhMTQzZDk0ZDZhOTc0YWFmZTk3MTMyZDJkNTE5YWIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vLi4vbWlzYy9jdXJzb3IucGNmLmd6O21kNT00MGJjODEwMDFmZWY0YzIxY2EwOGRmNDMwNTAxNGEyYSIKKworU1JDX1VSSSA9ICJmaWxlOi8vbWlzYyIKKworUEUgPSAiMSIKK1BSID0gInIyIgorCitpbmhlcml0IGFsbGFyY2ggZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIGZvbnQtYWxpYXMgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUyA9ICIke1dPUktESVJ9L21pc2MiCisKK1BBQ0tBR0VTID0gIiR7UE59IgorRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L1gxMS8gJHtkYXRhZGlyfS9mb250cy9YMTEvIgorUkRFUEVORFNfJHtQTn0gKz0gImZvbnQtYWxpYXMiCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vZm9udHMvWDExL21pc2MKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS8qICR7RH0vJHtkYXRhZGlyfS9mb250cy9YMTEvbWlzYy8KKwlpbnN0YWxsIC1kICR7RH0vJHtsaWJkaXJ9L1gxMQorCWxuIC1zZiAke2RhdGFkaXJ9L2ZvbnRzL1gxMS8gJHtEfS8ke2xpYmRpcn0vWDExL2ZvbnRzIC1zCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTEucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmM4NTcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTEwLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTAucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYTgyOTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTEwLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTExLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTEucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMWM1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTExLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTEzLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTMucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MmZhMWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTEzLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTE0LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTQucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMTE5YjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTE0LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTE1LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTUucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZmU4NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTE1LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTE2LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTYucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNjJjNzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTE2LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTIucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0yLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzZhNzU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0yLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTMucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0zLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGZhZjFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0zLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTQucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS00LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmRkZDE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS00LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTUucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS01LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDFhMmFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS01LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTcucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS03LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDk4NmY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS03LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTgucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS04LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjg5YWJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS04LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTkucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS05LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzJiNTM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS05LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1LT0k4LVIucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtS09JOC1SLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2ZjYjg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtS09JOC1SLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRmNjM1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNjNjNWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xMC5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xMC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhN2QzNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEwLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xMy5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xMy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0OGU5OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEzLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNC5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5MWI4YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE0LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNS5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYwNDUwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE1LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNi5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNi5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4YjFmMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE2LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0yLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTIucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMWU2Y2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0yLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0zLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTMucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MmI3NTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0zLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS00LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTQucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MGE0MzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS00LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS01LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTUucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NWU3YzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS01LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS03LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTcucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMTJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS03LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS04LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTgucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYmJkNTIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktOC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktOS5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS05LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTBkMzFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktOS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRjMzE4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMS5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODRiNTEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTAucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTAucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYjFhOWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xMC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTMucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTMucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Yzg1ODAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xMy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTQucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTQucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlOTBmM2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTUucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTUucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMTI3M2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTYucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTYucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMDBiNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNi5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMi5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0yLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzViYmVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMi5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMy5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0zLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmM4MzVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktNC5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS00LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Nzg1NDFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktNC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktNS5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS01LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzU5M2NlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktNS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktNy5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS03LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzVjZjVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktNy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktOS5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS05LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTk0MjNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktOS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE1NDZkZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjL2N1cnNvci5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvY3Vyc29yLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmViNzJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjL2N1cnNvci5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjL2ZvbnRzLmRpciBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy9mb250cy5kaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEyNzE4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy9mb250cy5kaXIKQEAgLTAsMCArMSw0MTAgQEAKKzQwOQorMTB4MjAtSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTEKKzEweDIwLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktMTAKKzEweDIwLUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktMTEKKzEweDIwLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktMTMKKzEweDIwLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktMTQKKzEweDIwLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktMTUKKzEweDIwLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktMTYKKzEweDIwLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0yCisxMHgyMC1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktMworMTB4MjAtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTQKKzEweDIwLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS01CisxMHgyMC1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktNworMTB4MjAtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTgKKzEweDIwLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS05CisxMHgyMC1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWtvaTgtcgorMTB4MjAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzEwNjQ2LTEKKzEyeDEzamEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC1qYS0xMy0xMjAtNzUtNzUtYy0xMjAtaXNvMTA2NDYtMQorMTJ4MjQucGNmLmd6IC1zb255LWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjQtMTcwLTEwMC0xMDAtYy0xMjAtaXNvODg1OS0xCisxMngyNHJrLnBjZi5neiAtc29ueS1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTI0LTE3MC0xMDAtMTAwLWMtMTIwLWppc3gwMjAxLjE5NzYtMAorMTh4MThqYS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLWphLTE4LTEyMC0xMDAtMTAwLWMtMTgwLWlzbzEwNjQ2LTEKKzE4eDE4a28ucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC1rby0xOC0xMjAtMTAwLTEwMC1jLTE4MC1pc28xMDY0Ni0xCis0eDYtSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTEKKzR4Ni1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTEwCis0eDYtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS0xMworNHg2LUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktMTQKKzR4Ni1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTE1Cis0eDYtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS0xNgorNHg2LUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS0yCis0eDYtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTMKKzR4Ni1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktNAorNHg2LUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS01Cis0eDYtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTcKKzR4Ni1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktOAorNHg2LUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS05Cis0eDYtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1rb2k4LXIKKzR4Ni5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvMTA2NDYtMQorNXg3LUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS0xCis1eDctSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS0xMAorNXg3LUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktMTMKKzV4Ny1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTE0Cis1eDctSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS0xNQorNXg3LUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktMTYKKzV4Ny1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktMgorNXg3LUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS0zCis1eDctSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTQKKzV4Ny1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktNQorNXg3LUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS03Cis1eDctSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTgKKzV4Ny1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktOQorNXg3LUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAta29pOC1yCis1eDcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzEwNjQ2LTEKKzV4OC1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktMQorNXg4LUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktMTAKKzV4OC1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTEzCis1eDgtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS0xNAorNXg4LUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktMTUKKzV4OC1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTE2Cis1eDgtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTIKKzV4OC1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktMworNXg4LUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS00Cis1eDgtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTUKKzV4OC1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktNworNXg4LUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS04Cis1eDgtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTkKKzV4OC1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWtvaTgtcgorNXg4LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc28xMDY0Ni0xCis2eDEwLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTEKKzZ4MTAtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTEwCis2eDEwLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS0xMworNngxMC1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktMTQKKzZ4MTAtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTE1Cis2eDEwLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS0xNgorNngxMC1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS0yCis2eDEwLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTMKKzZ4MTAtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktNAorNngxMC1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS01Cis2eDEwLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTcKKzZ4MTAtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktOAorNngxMC1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS05Cis2eDEwLUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1rb2k4LXIKKzZ4MTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvMTA2NDYtMQorNngxMi1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMQorNngxMi1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTEwCis2eDEyLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMTMKKzZ4MTItSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS0xNAorNngxMi1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTE1Cis2eDEyLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMTYKKzZ4MTItSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTIKKzZ4MTItSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTMKKzZ4MTItSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTQKKzZ4MTItSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTUKKzZ4MTItSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTcKKzZ4MTItSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTgKKzZ4MTItSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTkKKzZ4MTItS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1rb2k4LXIKKzZ4MTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzEwNjQ2LTEKKzZ4MTMtSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEKKzZ4MTMtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMAorNngxMy1JU084ODU5LTExLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTExCis2eDEzLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTMKKzZ4MTMtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNAorNngxMy1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE1Cis2eDEzLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTYKKzZ4MTMtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTIKKzZ4MTMtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTMKKzZ4MTMtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTQKKzZ4MTMtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTUKKzZ4MTMtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTcKKzZ4MTMtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTgKKzZ4MTMtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTkKKzZ4MTMtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1rb2k4LXIKKzZ4MTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzEwNjQ2LTEKKzZ4MTNCLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMQorNngxM0ItSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTAKKzZ4MTNCLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEzCis2eDEzQi1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNAorNngxM0ItSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTUKKzZ4MTNCLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE2Cis2eDEzQi1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTIKKzZ4MTNCLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMworNngxM0ItSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS00Cis2eDEzQi1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTUKKzZ4MTNCLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNworNngxM0ItSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS04Cis2eDEzQi1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTkKKzZ4MTNCLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvMTA2NDYtMQorNngxM08tSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEKKzZ4MTNPLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTAKKzZ4MTNPLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTMKKzZ4MTNPLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTQKKzZ4MTNPLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTUKKzZ4MTNPLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTYKKzZ4MTNPLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0yCis2eDEzTy1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMworNngxM08tSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTQKKzZ4MTNPLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS01Cis2eDEzTy1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNworNngxM08tSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTkKKzZ4MTNPLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc28xMDY0Ni0xCis2eDktSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTEKKzZ4OS1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTEwCis2eDktSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS0xMworNng5LUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktMTQKKzZ4OS1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTE1Cis2eDktSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS0xNgorNng5LUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS0yCis2eDktSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTMKKzZ4OS1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktNAorNng5LUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS01Cis2eDktSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTcKKzZ4OS1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktOAorNng5LUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS05Cis2eDktS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1rb2k4LXIKKzZ4OS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvMTA2NDYtMQorN3gxMy1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xCis3eDEzLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xMAorN3gxMy1JU084ODU5LTExLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTEKKzd4MTMtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEzCis3eDEzLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xNAorN3gxMy1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTUKKzd4MTMtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE2Cis3eDEzLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTIKKzd4MTMtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMworN3gxMy1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS00Cis3eDEzLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTUKKzd4MTMtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktNworN3gxMy1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS04Cis3eDEzLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTkKKzd4MTMtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWtvaTgtcgorN3gxMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc28xMDY0Ni0xCis3eDEzQi1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMQorN3gxM0ItSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xMAorN3gxM0ItSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xMQorN3gxM0ItSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xMworN3gxM0ItSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xNAorN3gxM0ItSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xNQorN3gxM0ItSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xNgorN3gxM0ItSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTIKKzd4MTNCLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0zCis3eDEzQi1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktNAorN3gxM0ItSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTUKKzd4MTNCLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS03Cis3eDEzQi1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktOAorN3gxM0ItSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTkKKzd4MTNCLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc28xMDY0Ni0xCis3eDEzTy1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xCis3eDEzTy1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTAKKzd4MTNPLUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xMQorN3gxM08tSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEzCis3eDEzTy1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTQKKzd4MTNPLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xNQorN3gxM08tSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE2Cis3eDEzTy1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0yCis3eDEzTy1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0zCis3eDEzTy1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS00Cis3eDEzTy1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS01Cis3eDEzTy1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS03Cis3eDEzTy1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS05Cis3eDEzTy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc28xMDY0Ni0xCis3eDE0LUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTEKKzd4MTQtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTEwCis3eDE0LUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xMQorN3gxNC1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTMKKzd4MTQtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTE0Cis3eDE0LUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xNQorN3gxNC1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTYKKzd4MTQtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMgorN3gxNC1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0zCis3eDE0LUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTQKKzd4MTQtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktNQorN3gxNC1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS03Cis3eDE0LUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTgKKzd4MTQtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktOQorN3gxNC1KSVNYMDIwMS4xOTc2LTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtamlzeDAyMDEuMTk3Ni0wCis3eDE0LUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1rb2k4LXIKKzd4MTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvMTA2NDYtMQorN3gxNEItSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTEKKzd4MTRCLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTAKKzd4MTRCLUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTEKKzd4MTRCLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTMKKzd4MTRCLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTQKKzd4MTRCLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTUKKzd4MTRCLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTYKKzd4MTRCLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0yCis3eDE0Qi1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMworN3gxNEItSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTQKKzd4MTRCLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS01Cis3eDE0Qi1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktNworN3gxNEItSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTgKKzd4MTRCLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS05Cis3eDE0Qi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvMTA2NDYtMQorOHgxMy1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xCis4eDEzLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xMAorOHgxMy1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTMKKzh4MTMtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTE0Cis4eDEzLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xNQorOHgxMy1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTYKKzh4MTMtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMgorOHgxMy1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0zCis4eDEzLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTQKKzh4MTMtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktNQorOHgxMy1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS03Cis4eDEzLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTgKKzh4MTMtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktOQorOHgxMy1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAta29pOC1yCis4eDEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzEwNjQ2LTEKKzh4MTNCLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xCis4eDEzQi1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEwCis4eDEzQi1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEzCis4eDEzQi1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTE0Cis4eDEzQi1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTE1Cis4eDEzQi1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTE2Cis4eDEzQi1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMgorOHgxM0ItSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTMKKzh4MTNCLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS00Cis4eDEzQi1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktNQorOHgxM0ItSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTcKKzh4MTNCLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS04Cis4eDEzQi1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktOQorOHgxM0IucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzEwNjQ2LTEKKzh4MTNPLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEKKzh4MTNPLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xMAorOHgxM08tSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEzCis4eDEzTy1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTQKKzh4MTNPLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xNQorOHgxM08tSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTE2Cis4eDEzTy1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0yCis4eDEzTy1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0zCis4eDEzTy1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS00Cis4eDEzTy1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS01Cis4eDEzTy1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS03Cis4eDEzTy1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS05Cis4eDEzTy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc28xMDY0Ni0xCis4eDE2LnBjZi5neiAtc29ueS1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE2LTEyMC0xMDAtMTAwLWMtODAtaXNvODg1OS0xCis4eDE2cmsucGNmLmd6IC1zb255LWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTYtMTIwLTEwMC0xMDAtYy04MC1qaXN4MDIwMS4xOTc2LTAKKzl4MTUtSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMQorOXgxNS1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTAKKzl4MTUtSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTExCis5eDE1LUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xMworOXgxNS1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTQKKzl4MTUtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTE1Cis5eDE1LUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xNgorOXgxNS1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0yCis5eDE1LUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTMKKzl4MTUtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktNAorOXgxNS1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS01Cis5eDE1LUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTcKKzl4MTUtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktOAorOXgxNS1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS05Cis5eDE1LUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1rb2k4LXIKKzl4MTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvMTA2NDYtMQorOXgxNUItSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTEKKzl4MTVCLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTAKKzl4MTVCLUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTEKKzl4MTVCLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTMKKzl4MTVCLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTQKKzl4MTVCLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTUKKzl4MTVCLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTYKKzl4MTVCLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0yCis5eDE1Qi1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMworOXgxNUItSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTQKKzl4MTVCLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS01Cis5eDE1Qi1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktNworOXgxNUItSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTgKKzl4MTVCLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS05Cis5eDE1Qi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvMTA2NDYtMQorOXgxOC1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTEKKzl4MTgtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTAKKzl4MTgtSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTEKKzl4MTgtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTMKKzl4MTgtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTQKKzl4MTgtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTUKKzl4MTgtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTYKKzl4MTgtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0yCis5eDE4LUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMworOXgxOC1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTQKKzl4MTgtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS01Cis5eDE4LUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktNworOXgxOC1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTgKKzl4MTgtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS05Cis5eDE4LUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWtvaTgtcgorOXgxOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzEwNjQ2LTEKKzl4MThCLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTEKKzl4MThCLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xMAorOXgxOEItSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTEzCis5eDE4Qi1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTQKKzl4MThCLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xNQorOXgxOEItSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTE2Cis5eDE4Qi1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0yCis5eDE4Qi1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0zCis5eDE4Qi1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS00Cis5eDE4Qi1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS01Cis5eDE4Qi1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS03Cis5eDE4Qi1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS04Cis5eDE4Qi1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS05Cis5eDE4Qi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc28xMDY0Ni0xCithcmFiaWMyNC5wY2YuZ3ogLWFyYWJpYy1uZXdzcGFwZXItbWVkaXVtLXItbm9ybWFsLS0zMi0yNDYtMTAwLTEwMC1wLTEzNy1pc28xMDY0Ni0xCitjbEI2eDEwLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc282NDYuMTk5MS1pcnYKK2NsQjZ4MTIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLWJvbGQtci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzY0Ni4xOTkxLWlydgorY2xCOHgxMC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tYm9sZC1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbEI4eDEyLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsQjh4MTMucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLWJvbGQtci1ub3JtYWwtLTEzLTEzMC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xCOHgxNC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tYm9sZC1yLW5vcm1hbC0tMTQtMTQwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbEI4eDE2LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS0xNi0xNjAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsQjh4OC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tYm9sZC1yLW5vcm1hbC0tOC04MC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xCOXgxNS5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tYm9sZC1yLW5vcm1hbC0tMTUtMTUwLTc1LTc1LWMtOTAtaXNvNjQ2LjE5OTEtaXJ2CitjbEk2eDEyLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0taS1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzY0Ni4xOTkxLWlydgorY2xJOHg4LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0taS1ub3JtYWwtLTgtODAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsUjR4Ni5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI1eDEwLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTUwLWlzbzY0Ni4xOTkxLWlydgorY2xSNXg2LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy01MC1pc282NDYuMTk5MS1pcnYKK2NsUjV4OC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI2eDEwLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzY0Ni4xOTkxLWlydgorY2xSNngxMi1JU084ODU5LTEucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xCitjbFI2eDEyLUlTTzg4NTktMTAucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMAorY2xSNngxMi1JU084ODU5LTEzLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTMKK2NsUjZ4MTItSVNPODg1OS0xNC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE0CitjbFI2eDEyLUlTTzg4NTktMTUucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNQorY2xSNngxMi1JU084ODU5LTE2LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTYKK2NsUjZ4MTItSVNPODg1OS0yLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMgorY2xSNngxMi1JU084ODU5LTMucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0zCitjbFI2eDEyLUlTTzg4NTktNC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTQKK2NsUjZ4MTItSVNPODg1OS01LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNQorY2xSNngxMi1JU084ODU5LTcucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS03CitjbFI2eDEyLUlTTzg4NTktOC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTgKK2NsUjZ4MTItSVNPODg1OS05LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktOQorY2xSNngxMi1LT0k4LVIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAta29pOC1yCitjbFI2eDEyLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzEwNjQ2LTEKK2NsUjZ4MTMucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTMwLTc1LTc1LWMtNjAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI2eDYucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTYwLWlzbzY0Ni4xOTkxLWlydgorY2xSNng4LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy02MC1pc282NDYuMTk5MS1pcnYKK2NsUjd4MTAucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNzAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI3eDEyLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTcwLWlzbzY0Ni4xOTkxLWlydgorY2xSN3gxNC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xNC0xNDAtNzUtNzUtYy03MC1pc282NDYuMTk5MS1pcnYKK2NsUjd4OC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNzAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI4eDEwLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xSOHgxMi5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsUjh4MTMucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTMwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI4eDE0LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTE0LTE0MC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xSOHgxNi5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xNi0xNjAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsUjh4OC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI5eDE1LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTE1LTE1MC03NS03NS1jLTkwLWlzbzY0Ni4xOTkxLWlydgorY3UtYWx0MTIucGNmLmd6IC1tdXR0LWNsZWFybHl1IGFsdGVybmF0ZSBnbHlwaHMtbWVkaXVtLXItbm9ybWFsLS0xNy0xMjAtMTAwLTEwMC1wLTEyMi1pc28xMDY0Ni0xCitjdS1hcmFiaWMxMi5wY2YuZ3ogLW11dHQtY2xlYXJseXUgYXJhYmljIGV4dHJhLW1lZGl1bS1yLW5vcm1hbC0tMTctMTIwLTEwMC0xMDAtcC0xMDEtZm9udHNwZWNpZmljLTAKK2N1LWRldm5hZzEyLnBjZi5neiAtbXV0dC1jbGVhcmx5dSBkZXZhbmdhcmkgZXh0cmEtbWVkaXVtLXItbm9ybWFsLS0xNy0xMjAtMTAwLTEwMC1wLTEwNS1mb250c3BlY2lmaWMtMAorY3UtbGlnMTIucGNmLmd6IC1tdXR0LWNsZWFybHl1IGxpZ2F0dXJlLW1lZGl1bS1yLW5vcm1hbC0tMTctMTIwLTEwMC0xMDAtcC0xNDEtZm9udHNwZWNpZmljLTAKK2N1LXB1YTEyLnBjZi5neiAtbXV0dC1jbGVhcmx5dSBwdWEtbWVkaXVtLXItbm9ybWFsLS0xNy0xMjAtMTAwLTEwMC1wLTExMC1pc28xMDY0Ni0xCitjdTEyLnBjZi5neiAtbXV0dC1jbGVhcmx5dS1tZWRpdW0tci1ub3JtYWwtLTE3LTEyMC0xMDAtMTAwLXAtMTIzLWlzbzEwNjQ2LTEKK2N1YXJhYmljMTIucGNmLmd6IC1tdXR0LWNsZWFybHl1IGFyYWJpYy1tZWRpdW0tci1ub3JtYWwtLTE3LTEyMC0xMDAtMTAwLXAtOTMtaXNvMTA2NDYtMQorY3VkZXZuYWcxMi5wY2YuZ3ogLW11dHQtY2xlYXJseXUgZGV2YW5hZ2FyaS1tZWRpdW0tci1ub3JtYWwtLTE1LTEyMC05MC05MC1wLTEwNC1mb250c3BlY2lmaWMtMAorY3Vyc29yLnBjZi5neiBjdXJzb3IKK2RlY2N1cnMucGNmLmd6IGRlY3ckY3Vyc29yCitkZWNzZXNzLnBjZi5neiBkZWN3JHNlc3Npb24KK2diMTZmcy5wY2YuZ3ogLWlzYXMtZmFuZ3NvbmcgdGktbWVkaXVtLXItbm9ybWFsLS0xNi0xNjAtNzItNzItYy0xNjAtZ2IyMzEyLjE5ODAtMAorZ2IxNnN0LnBjZi5neiAtaXNhcy1zb25nIHRpLW1lZGl1bS1yLW5vcm1hbC0tMTYtMTYwLTcyLTcyLWMtMTYwLWdiMjMxMi4xOTgwLTAKK2diMjRzdC5wY2YuZ3ogLWlzYXMtc29uZyB0aS1tZWRpdW0tci1ub3JtYWwtLTI0LTI0MC03Mi03Mi1jLTI0MC1nYjIzMTIuMTk4MC0wCitoYW5nbGcxNi5wY2YuZ3ogLWRhZXdvby1nb3RoaWMtbWVkaXVtLXItbm9ybWFsLS0xNi0xMjAtMTAwLTEwMC1jLTE2MC1rc2M1NjAxLjE5ODctMAoraGFuZ2xtMTYucGNmLmd6IC1kYWV3b28tbWluY2hvLW1lZGl1bS1yLW5vcm1hbC0tMTYtMTIwLTEwMC0xMDAtYy0xNjAta3NjNTYwMS4xOTg3LTAKK2hhbmdsbTI0LnBjZi5neiAtZGFld29vLW1pbmNoby1tZWRpdW0tci1ub3JtYWwtLTI0LTE3MC0xMDAtMTAwLWMtMjQwLWtzYzU2MDEuMTk4Ny0wCitqaXNrYW4xNi5wY2YuZ3ogLWppcy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE2LTE1MC03NS03NS1jLTE2MC1qaXN4MDIwOC4xOTgzLTAKK2ppc2thbjI0LnBjZi5neiAtamlzLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjQtMjMwLTc1LTc1LWMtMjQwLWppc3gwMjA4LjE5ODMtMAorazE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTE0MC1qaXN4MDIwOC4xOTgzLTAKK21pY3JvLnBjZi5neiBtaWNybworbmlsMi5wY2YuZ3ogLW1pc2MtbmlsLW1lZGl1bS1yLW5vcm1hbC0tMi0yMC03NS03NS1jLTEwLW1pc2MtZm9udHNwZWNpZmljCitvbGN1cnNvci5wY2YuZ3ogLXN1bi1vcGVuIGxvb2sgY3Vyc29yLS0tLS0xMi0xMjAtNzUtNzUtcC0xNjAtc3Vub2xjdXJzb3ItMQorb2xnbDEwLnBjZi5neiAtc3VuLW9wZW4gbG9vayBnbHlwaC0tLS0tMTAtMTAwLTc1LTc1LXAtMTAxLXN1bm9sZ2x5cGgtMQorb2xnbDEyLnBjZi5neiAtc3VuLW9wZW4gbG9vayBnbHlwaC0tLS0tMTItMTIwLTc1LTc1LXAtMTEzLXN1bm9sZ2x5cGgtMQorb2xnbDE0LnBjZi5neiAtc3VuLW9wZW4gbG9vayBnbHlwaC0tLS0tMTQtMTQwLTc1LTc1LXAtMTI4LXN1bm9sZ2x5cGgtMQorb2xnbDE5LnBjZi5neiAtc3VuLW9wZW4gbG9vayBnbHlwaC0tLS0tMTktMTkwLTc1LTc1LXAtMTU0LXN1bm9sZ2x5cGgtMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliZG14XzEuMS4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliZG14XzEuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MjNjZWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJkbXhfMS4xLjMuYmIKQEAgLTAsMCArMSwyMCBAQAorcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiRE1YOiBEaXN0cmlidXRlZCBNdWx0aWhlYWQgWCBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhlIERNWCBleHRlbnNpb24gcHJvdmlkZXMgc3VwcG9ydCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIFwKK2FuZCBjb250cm9sIG9mIFhkbXgoMSkgc2VydmVyLiBBdHRyaWJ1dGVzIG9mIHRoZSBYZG14KDEpIHNlcnZlciBhbmQgb2YgXAordGhlIGJhY2stZW5kIHNjcmVlbnMgYXR0YWNoZWQgdG8gdGhlIHNlcnZlciBjYW4gYmUgcXVlcmllZCBhbmQgbW9kaWZpZWQgXAordmlhIHRoaXMgcHJvdG9jb2wuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWEzYzM0OTkyMzFhODAzNWVmZDBlMDA0Y2ZiZDNiNzJhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9kbXguYztlbmRsaW5lPTMzO21kNT1jNDNmMTlhZjAzYzdjODYxOWNhZGM5NzI0ZWQ5YWZlMSIKKworREVQRU5EUyArPSAibGlieGV4dCBkbXhwcm90byIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImJhOTgzZWJhNWE5ZjA1ZDE1MmEwNzI1YjhlODYzMTUxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM5N2RhMzZkMmU1NmEyZDdiNmU0Zjg5NjI0MTc4NWFjYzk1ZTk3ZWI5NTU3NDY1ZmQ2NmJhMmExNTVhN2IyMDEiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmZvbnRlbmNfMS4xLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJmb250ZW5jXzEuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExODFmMDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJmb250ZW5jXzEuMS4zLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiWCBmb250IGVuY29kaW5nIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYmZvbnRlbmMgaXMgYSBsaWJyYXJ5IHdoaWNoIGhlbHBzIGZvbnQgbGlicmFyaWVzIFwKK3BvcnRhYmx5IGRldGVybWluZSBhbmQgZGVhbCB3aXRoIGRpZmZlcmVudCBlbmNvZGluZ3Mgb2YgZm9udHMuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NjI1NGMyMGFiODFjNjNlNjViMjZmMGRiY2Q0YTFjMSIKKworREVQRU5EUyArPSAiemxpYiB4cHJvdG8gZm9udC11dGlsIgorUEUgPSAiMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwOTIwOTI0YzNhOWViYzEyNjU1MTdiZGQyZjlmZGU1MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MDU4ODkzMGU2ZmM5NTQyZmYzOGUwODg0Nzc4ZmJjNmU2ZmViZjIxYWRiYWI5MmZkOGY1MjRmZTYwYWVmZDIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliaWNlXzEuMC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliaWNlXzEuMC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNDliN2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJpY2VfMS4wLjkuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJJQ0U6IEludGVyLUNsaWVudCBFeGNoYW5nZSBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgSW50ZXItQ2xpZW50IEV4Y2hhbmdlIChJQ0UpIHByb3RvY29sIHByb3ZpZGVzIGEgXAorZ2VuZXJpYyBmcmFtZXdvcmsgZm9yIGJ1aWxkaW5nIHByb3RvY29scyBvbiB0b3Agb2YgcmVsaWFibGUsIGJ5dGUtc3RyZWFtIFwKK3RyYW5zcG9ydCBjb25uZWN0aW9ucy4gSXQgcHJvdmlkZXMgYmFzaWMgbWVjaGFuaXNtcyBmb3Igc2V0dGluZyB1cCBhbmQgXAorc2h1dHRpbmcgZG93biBjb25uZWN0aW9ucywgZm9yIHBlcmZvcm1pbmcgYXV0aGVudGljYXRpb24sIGZvciBcCituZWdvdGlhdGluZyB2ZXJzaW9ucywgYW5kIGZvciByZXBvcnRpbmcgZXJyb3JzLiAiCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQxNjJiMWIzYzZmYTgxMmRhOWQ4MDRkY2Y4NTg0YTkzIgorCitERVBFTkRTICs9ICJ4cHJvdG8geHRyYW5zIgorUFJPVklERVMgPSAiaWNlIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYklDRSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhZGRmYjFlODk3Y2E4MDc5NTMxNjY5YzdjNzcxMTcyNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZjcwMzJmMmMxYzY0MzUyYjU0MjNmNmI0OGE4ZWJkYzMzOWNjNjMwNjRhZjM0ZDY2YTZjOWFhNzk3NTllMjAyIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1thcmM0XSA9ICJhY19jdl9saWJfYnNkX2FyYzRyYW5kb21fYnVmPXllcyxhY19jdl9saWJfYnNkX2FyYzRyYW5kb21fYnVmPW5vLGxpYmJzZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAxLUluY2x1ZGUtY29uZmlnLmgtYmVmb3JlLWFueXRoaW5nLWVsc2UtaW4tLmMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwMS1JbmNsdWRlLWNvbmZpZy5oLWJlZm9yZS1hbnl0aGluZy1lbHNlLWluLS5jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MmZjMGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwMS1JbmNsdWRlLWNvbmZpZy5oLWJlZm9yZS1hbnl0aGluZy1lbHNlLWluLS5jLnBhdGNoCkBAIC0wLDAgKzEsMTg3IEBACitGcm9tIGIxNDY5NmE1NTc5NmU3Mzk2MjRiYmRhNGY3NzI0MjcwMzJlZmZmMmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdWxpZW4gQ3Jpc3RhdSA8amNyaXN0YXVAZGViaWFuLm9yZz4KK0RhdGU6IFN1biwgMjYgQXByIDIwMTUgMTU6MjA6NTcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzRdIEluY2x1ZGUgY29uZmlnLmggYmVmb3JlIGFueXRoaW5nIGVsc2UgaW4gKi5jCisKK0RlYmlhbiBidWcjNzQ5MDA4IDxodHRwczovL2J1Z3MuZGViaWFuLm9yZy83NDkwMDg+CisKK1JlcG9ydGVkLWJ5OiBNaWNoYWVsIFRhdXRzY2huaWcgPG10QGRlYmlhbi5vcmc+CitTaWduZWQtb2ZmLWJ5OiBKdWxpZW4gQ3Jpc3RhdSA8amNyaXN0YXVAZGViaWFuLm9yZz4KK1Jldmlld2VkLWJ5OiBBbGFuIENvb3BlcnNtaXRoIDxhbGFuLmNvb3BlcnNtaXRoQG9yYWNsZS5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworIHNyYy9jb21tb25fY2FwYWJpbGl0eS5jICB8IDMgKysrCisgc3JjL2NvbW1vbl9pbml0LmMgICAgICAgIHwgMyArKysKKyBzcmMvY29tbW9uX2ludGVyZmFjZS5jICAgfCAzICsrKworIHNyYy9jb21tb25faW8uYyAgICAgICAgICB8IDMgKysrCisgc3JjL2NvbW1vbl9pdGVyYXRvci5jICAgIHwgMyArKysKKyBzcmMvY29tbW9uX21hcC5jICAgICAgICAgfCAzICsrKworIHNyYy9jb21tb25fdmdhYXJiX3N0dWIuYyB8IDMgKysrCisgc3JjL2xpbnV4X2Rldm1lbS5jICAgICAgIHwgNSArKystLQorIHNyYy9vcGVuYnNkX3BjaS5jICAgICAgICB8IDMgKysrCisgc3JjL3NvbHhfZGV2ZnMuYyAgICAgICAgIHwgMyArKysKKyBzcmMveDg2X3BjaS5jICAgICAgICAgICAgfCA0ICsrKy0KKyAxMSBmaWxlcyBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbl9jYXBhYmlsaXR5LmMgYi9zcmMvY29tbW9uX2NhcGFiaWxpdHkuYworaW5kZXggNDg4NzQzZC4uMTVkMzk1ZCAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb25fY2FwYWJpbGl0eS5jCisrKysgYi9zcmMvY29tbW9uX2NhcGFiaWxpdHkuYworQEAgLTMxLDYgKzMxLDkgQEAKKyAgKgorICAqIFxhdXRob3IgSWFuIFJvbWFuaWNrIDxpZHJAdXMuaWJtLmNvbT4KKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbl9pbml0LmMgYi9zcmMvY29tbW9uX2luaXQuYworaW5kZXggYjFjMGMzZS4uZjdiNTliZCAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb25faW5pdC5jCisrKysgYi9zcmMvY29tbW9uX2luaXQuYworQEAgLTI4LDYgKzI4LDkgQEAKKyAgKgorICAqIFxhdXRob3IgSWFuIFJvbWFuaWNrIDxpZHJAdXMuaWJtLmNvbT4KKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbl9pbnRlcmZhY2UuYyBiL3NyYy9jb21tb25faW50ZXJmYWNlLmMKK2luZGV4IDU5Nzc4Y2YuLmNiOTVlOTAgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uX2ludGVyZmFjZS5jCisrKysgYi9zcmMvY29tbW9uX2ludGVyZmFjZS5jCitAQCAtMjgsNiArMjgsOSBAQAorICAqCisgICogXGF1dGhvciBJYW4gUm9tYW5pY2sgPGlkckB1cy5pYm0uY29tPgorICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbl9pby5jIGIvc3JjL2NvbW1vbl9pby5jCitpbmRleCBmNWM5ZTQ1Li5lOTU4NmFkIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbl9pby5jCisrKysgYi9zcmMvY29tbW9uX2lvLmMKK0BAIC0yMiw2ICsyMiw5IEBACisgICogQXV0aG9yOgorICAqCUFkYW0gSmFja3NvbiA8YWpheEByZWRoYXQuY29tPgorICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbl9pdGVyYXRvci5jIGIvc3JjL2NvbW1vbl9pdGVyYXRvci5jCitpbmRleCBjY2Y2NTZkLi4yYmViMTgwIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbl9pdGVyYXRvci5jCisrKysgYi9zcmMvY29tbW9uX2l0ZXJhdG9yLmMKK0BAIC0yOCw2ICsyOCw5IEBACisgICoKKyAgKiBcYXV0aG9yIElhbiBSb21hbmljayA8aWRyQHVzLmlibS5jb20+CisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX21hcC5jIGIvc3JjL2NvbW1vbl9tYXAuYworaW5kZXggODc1NzE1MS4uZjE4NTRiYiAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb25fbWFwLmMKKysrKyBiL3NyYy9jb21tb25fbWFwLmMKK0BAIC0yMSw2ICsyMSw5IEBACisgICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbl92Z2FhcmJfc3R1Yi5jIGIvc3JjL2NvbW1vbl92Z2FhcmJfc3R1Yi5jCitpbmRleCA5Mzk0MjczLi5jMTcwOGY2IDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbl92Z2FhcmJfc3R1Yi5jCisrKysgYi9zcmMvY29tbW9uX3ZnYWFyYl9zdHViLmMKK0BAIC0yMyw2ICsyMyw5IEBACisgICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAqCisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgInBjaWFjY2Vzcy5oIgorZGlmZiAtLWdpdCBhL3NyYy9saW51eF9kZXZtZW0uYyBiL3NyYy9saW51eF9kZXZtZW0uYworaW5kZXggMTBlM2JkZS4uMGQwNTY3YyAxMDA2NDQKKy0tLSBhL3NyYy9saW51eF9kZXZtZW0uYworKysrIGIvc3JjL2xpbnV4X2Rldm1lbS5jCitAQCAtMzIsOCArMzIsOSBAQAorICAqCisgICogXGF1dGhvciBJYW4gUm9tYW5pY2sgPGlkckB1cy5pYm0uY29tPgorICAqLworLQorLSNkZWZpbmUgX0dOVV9TT1VSQ0UKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorZGlmZiAtLWdpdCBhL3NyYy9vcGVuYnNkX3BjaS5jIGIvc3JjL29wZW5ic2RfcGNpLmMKK2luZGV4IDRkMWI1Y2QuLmI4Y2UzMTggMTAwNjQ0CistLS0gYS9zcmMvb3BlbmJzZF9wY2kuYworKysrIGIvc3JjL29wZW5ic2RfcGNpLmMKK0BAIC0xMyw2ICsxMyw5IEBACisgICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CitkaWZmIC0tZ2l0IGEvc3JjL3NvbHhfZGV2ZnMuYyBiL3NyYy9zb2x4X2RldmZzLmMKK2luZGV4IGY1NzIzOTMuLmNmOTY0NjcgMTAwNjQ0CistLS0gYS9zcmMvc29seF9kZXZmcy5jCisrKysgYi9zcmMvc29seF9kZXZmcy5jCitAQCAtMjUsNiArMjUsOSBAQAorIC8qCisgICogU29sYXJpcyBkZXZmcyBpbnRlcmZhY2VzCisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmdzLmg+CitkaWZmIC0tZ2l0IGEvc3JjL3g4Nl9wY2kuYyBiL3NyYy94ODZfcGNpLmMKK2luZGV4IDQ5YzFjYWIuLjMyZGFhMDQgMTAwNjQ0CistLS0gYS9zcmMveDg2X3BjaS5jCisrKysgYi9zcmMveDg2X3BjaS5jCitAQCAtMTgsOCArMTgsMTAgQEAKKyAgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCistI2RlZmluZSBfR05VX1NPVVJDRQorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAyLUZpeC1xdW90aW5nLWlzc3VlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDItRml4LXF1b3RpbmctaXNzdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkNjlhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAyLUZpeC1xdW90aW5nLWlzc3VlLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gNzY1ZTBhMzhjYjhjNDBmODg2NWFmNWNiMzU2ZmZlNjAzOWZmYjA4ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRob21hcyBLbGF1c25lciA8d2l6QE5ldEJTRC5vcmc+CitEYXRlOiBTdW4sIDIyIE1hciAyMDE1IDIxOjM4OjIzICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMi80XSBGaXggcXVvdGluZyBpc3N1ZS4KKworbTQgaGFzICdbXScgYXMgcXVvdGluZyBjaGFyYWN0ZXJzLCBzbyBpZiB3ZSB3YW50ICdbXScgdG8KK2VuZCB1cCBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCwgd2UgbmVlZCB0byBxdW90ZSB0aGVtIGFnYWluLgorCitSZXBvcnRlZCBieSBHcmVnIFRyb3hlbCA8Z2R0QGlyLmJibi5jb20+LgorCitTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgS2xhdXNuZXIgPHdpekBOZXRCU0Qub3JnPgorUmV2aWV3ZWQtYnk6IEFsYW4gQ29vcGVyc21pdGggPGFsYW4uY29vcGVyc21pdGhAb3JhY2xlLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBlNjdlOWUxLi44ODgzMzBiIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC03Niw3ICs3Niw3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAJCTs7CisgCSpuZXRic2QqKQorIAkJY2FzZSAkaG9zdCBpbgorLQkJKmlbMy05XTg2KikKKysJCSppW1szLTldXTg2KikKKyAJCQlQQ0lBQ0NFU1NfTElCUz0iJFBDSUFDQ0VTU19MSUJTIC1saTM4NiIKKyAJCQk7OworIAkJKng4Nl82NCp8KmFtZDY0KikKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDMtbGludXhfc3lzZnMuYy1JbmNsdWRlLWxpbWl0cy5oLWZvci1QQVRIX01BWC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAzLWxpbnV4X3N5c2ZzLmMtSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUxM2M4ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAzLWxpbnV4X3N5c2ZzLmMtSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA2YmQyZjdmOTJlYWU3MTM2NjNmNGUxM2Y2ZTJjYjIzNTI2NjA3YjhjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmVsaXggSmFuZGEgPGZlbGl4LmphbmRhQHBvc3Rlby5kZT4KK0RhdGU6IEZyaSwgMSBNYXkgMjAxNSAxNjozNjo1MCArMDIwMAorU3ViamVjdDogW1BBVENIIDMvNF0gbGludXhfc3lzZnMuYzogSW5jbHVkZSA8bGltaXRzLmg+IGZvciBQQVRIX01BWAorCitGaXhlcyBjb21waWxhdGlvbiB3aXRoIG11c2wgbGliYy4KKworVGVzdGVkLWJ5OiBCZXJuZCBLdWhscyA8YmVybmQua3VobHNAdC1vbmxpbmUuZGU+CitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBKYW5kYSA8ZmVsaXguamFuZGFAcG9zdGVvLmRlPgorUmV2aWV3ZWQtYnk6IEFsYW4gQ29vcGVyc21pdGggPGFsYW4uY29vcGVyc21pdGhAb3JhY2xlLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFsYW4gQ29vcGVyc21pdGggPGFsYW4uY29vcGVyc21pdGhAb3JhY2xlLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgc3JjL2xpbnV4X3N5c2ZzLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3NyYy9saW51eF9zeXNmcy5jIGIvc3JjL2xpbnV4X3N5c2ZzLmMKK2luZGV4IDUwZDk0Y2YuLjNmOTVlNTMgMTAwNjQ0CistLS0gYS9zcmMvbGludXhfc3lzZnMuYworKysrIGIvc3JjL2xpbnV4X3N5c2ZzLmMKK0BAIC00NSw2ICs0NSw3IEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyAjaW5jbHVkZSA8ZGlyZW50Lmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDA0LURvbi10LWluY2x1ZGUtc3lzLWlvLmgtb24tYXJtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDQtRG9uLXQtaW5jbHVkZS1zeXMtaW8uaC1vbi1hcm0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUzMjg1OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDA0LURvbi10LWluY2x1ZGUtc3lzLWlvLmgtb24tYXJtLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gYjZkZjUyMDIzMDZiZDcxMTU4YjQ4MmYyNWNhMmU2OTE5NjQ1ZDRkZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDQgSnVuIDIwMTUgMjA6NTU6MDYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCA0LzRdIERvbid0IGluY2x1ZGUgc3lzL2lvLmggb24gYXJtCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgc3JjL2xpbnV4X3N5c2ZzLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbGludXhfc3lzZnMuYyBiL3NyYy9saW51eF9zeXNmcy5jCitpbmRleCAzZjk1ZTUzLi4xZTNhYWQzIDEwMDY0NAorLS0tIGEvc3JjL2xpbnV4X3N5c2ZzLmMKKysrKyBiL3NyYy9saW51eF9zeXNmcy5jCitAQCAtNTAsNyArNTAsNyBAQAorICNpbmNsdWRlIDxkaXJlbnQuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAKKy0jaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYXJtX18pCisrI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKyAjaW5jbHVkZSA8c3lzL2lvLmg+CisgI2Vsc2UKKyAjZGVmaW5lIGluYih4KSAtMQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3NfMC4xMy40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzXzAuMTMuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmE2YTYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzXzAuMTMuNC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkdlbmVyaWMgUENJIGFjY2VzcyBsaWJyYXJ5IGZvciBYIgorCitERVNDUklQVElPTiA9ICJsaWJwY2lhY2Nlc3MgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBmb3IgWCB0byBhY2Nlc3MgdGhlIFwKK1BDSSBidXMgYW5kIGRldmljZXMgaW4gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB3YXkuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1JDX1VSSSArPSAiXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtSW5jbHVkZS1jb25maWcuaC1iZWZvcmUtYW55dGhpbmctZWxzZS1pbi0uYy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMi1GaXgtcXVvdGluZy1pc3N1ZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMy1saW51eF9zeXNmcy5jLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA0LURvbi10LWluY2x1ZGUtc3lzLWlvLmgtb24tYXJtLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImFjZTc4YWVjNzk5YjFjZjZkZmFlYTU1ZDM4NzllZDlmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA3Zjg2NDY1NDU2MWU0YWM4NjI5YTBlZjljOGYwN2ZiYzFmODU5MmQxYjZjNDE4NDMxNTkzZTliYTJjZjJmY2YiCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Mjc3YWFkYTUyMjJiOWEyMmZiZjM0NzFmZjM2ODcwNjgiCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwdGhyZWFkLXN0dWJzXzAuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnB0aHJlYWQtc3R1YnNfMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MTRjN2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwdGhyZWFkLXN0dWJzXzAuMy5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIkxpYnJhcnkgdGhhdCBwcm92aWRlcyB3ZWFrIGFsaWFzZXMgZm9yIHB0aHJlYWQgZnVuY3Rpb25zIgorREVTQ1JJUFRJT04gPSAiVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIHdlYWsgYWxpYXNlcyBmb3IgcHRocmVhZCBmdW5jdGlvbnMgXAorbm90IHByb3ZpZGVkIGluIGxpYmMgb3Igb3RoZXJ3aXNlIGF2YWlsYWJsZSBieSBkZWZhdWx0LiIKK0hPTUVQQUdFID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvYnVnbGlzdC5jZ2k/cHJvZHVjdD1YQ0IiCitTRUNUSU9OID0gIngxMS9saWJzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02ZWRjMWZlYTAzZDk1OWYwYzJkNzQzZmU1Y2E3NDZhZCIKKworI0RFUEVORFMgPSAieGNiLXByb3RvIHhwcm90byBsaWJ4YXUgbGlieHNsdC1uYXRpdmUiCisjIERFUEVORFMgKz0gInhzbHRwcm9jLW5hdGl2ZSBncGVyZi1uYXRpdmUiCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmcvZGlzdC9saWJwdGhyZWFkLXN0dWJzLSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlOGZhMzFiNDJlMTNmODdlOGY1YTdhMmI3MzFkYjdlZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzNWI2ZDU0ZTNjYzZmM2JhMjgwNjFkYTgxYWY2NGI5YTkyYjdiNzU3MzE5MDk4MTcyNDg4YTY2MGUzZDg3Mjk5IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKK1JSRUNPTU1FTkRTXyR7UE59LWRiZyA9ICIke1BOfS1kZXYgKD0gJHtFWFRFTkRQS0dWfSkiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnNtXzEuMi4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlic21fMS4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkyNTEzNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnNtXzEuMi4yLmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiU006IFNlc3Npb24gTWFuYWdlbWVudCBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgU2Vzc2lvbiBNYW5hZ2VtZW50IExpYnJhcnkgKFNNbGliKSBpcyBhIGxvdy1sZXZlbCBcIkNcIiBcCitsYW5ndWFnZSBpbnRlcmZhY2UgdG8gWFNNUC4gIFRoZSBwdXJwb3NlIG9mIHRoZSBYIFNlc3Npb24gTWFuYWdlbWVudCBcCitQcm90b2NvbCAoWFNNUCkgaXMgdG8gcHJvdmlkZSBhIHVuaWZvcm0gbWVjaGFuaXNtIGZvciB1c2VycyB0byBzYXZlIGFuZCBcCityZXN0b3JlIHRoZWlyIHNlc3Npb25zLiAgQSBzZXNzaW9uIGlzIGEgZ3JvdXAgb2YgY2xpZW50cywgZWFjaCBvZiB3aGljaCBcCitoYXMgYSBwYXJ0aWN1bGFyIHN0YXRlLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzBmYjM3ZjQ0ZTAyYmRiZGU4MDU0NjAyNDQwMDcyOGQiCisKK0RFUEVORFMgKz0gImxpYmljZSB4cHJvdG8geHRyYW5zIgorCisjIGxpYlNNIGNhbiB3b3JrIHdpdGhvdXQgbGlidXVpZCwgd2UgZXhwbGljaXRseSBkaXNhYmxlIGl0IHRvIGJyZWFrIHRoZSBmb2xsb3dpbmcgY2lyY3VsYXIgZGVwZW5kZW5jeQorIyB3aGVuIERJU1RST19GRUFUVVJFUyBjb250YWlucyAnc3lzdGVtZCcgYW5kICd4MTEnLgorIyBzeXN0ZW1kIC0+IGRidXMgLT4gbGlic20gLT4gdXRpbC1saW51eCAtPiBzeXN0ZW1kCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saWJ1dWlkIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlNNIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ5OWE3NzczYzY1YWJhNTEzNjA5ZmU2NTE4NTNjNWYzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBiYWNhOGM5ZjVkOTM0NDUwYTcwODk2YzRhZDM4ZDA2NDc1NTIxMjU1Y2E2M2I3MTdhNjUxMGZkYjZlMjg3YmQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEtZGlldF8xLjYuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS1kaWV0XzEuNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZDAxNDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEtZGlldF8xLjYuMy5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIGxpYngxMS5pbmMKKworREVTQ1JJUFRJT04gKz0gIiBTdXBwb3J0IGZvciBYQ01TIGFuZCBYTE9DQUxFIGlzIGRpc2FibGVkIGluIFwKK3RoaXMgdmVyc2lvbi4iCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9YMThOQ01Tc3R1YnMuZGlmZiBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWRpc2FibGUteGxvY2FsZS5kaWZmIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtdXRmOC13cm9uZy1kZWZpbmUucGF0Y2ggXAorICAgICAgICAgICAiCisKK1JQUk9WSURFU18ke1BOfS1kZXYgPSAibGlieDExLWRldiIKK1JQUk9WSURFU18ke1BOfS1sb2NhbGUgPSAibGlieDExLWxvY2FsZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjJlMzZiNzNmOGE0MjE0MzE0MmRkYTgxMjlmMDJlNGUwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNmMzFhN2MzOWYyZjUyZThlYmQwZGI5NTY0MDM4NGU2MzQ1MWY5YjAxNGVlZDJiYjdmNWRlMDNlOGFkYzgxMTEiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXhsb2NhbGUiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDRlYWZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExLmluYwpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIlhsaWI6IEMgTGFuZ3VhZ2UgWCBJbnRlcmZhY2UgbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIGEgY2xpZW50IGludGVyZmFjZSB0byB0aGUgWCBXaW5kb3cgXAorU3lzdGVtLCBvdGhlcndpc2Uga25vd24gYXMgJ1hsaWInLiAgSXQgcHJvdmlkZXMgYSBjb21wbGV0ZSBBUEkgZm9yIHRoZSBcCitiYXNpYyBmdW5jdGlvbnMgb2YgdGhlIHdpbmRvdyBzeXN0ZW0uIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworaW5oZXJpdCBzaXRlaW5mbworCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9saWJ4MTE6IgorCitQRSA9ICIxIgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYngxMSIKKworWE9SR19QTiA9ICJsaWJYMTEiCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSAmIEJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE3MjI1NWRlZTY2YmIwMTUxNDM1YjJkNWQ3MDlmY2Y3IgorCitERVBFTkRTICs9ICJ4cHJvdG8geGV4dHByb3RvIHh0cmFucyBsaWJ4Y2Iga2Jwcm90byBpbnB1dHByb3RvIgorREVQRU5EUyArPSAieHByb3RvLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgta2V5c3ltZGVmZGlyPSR7U1RBR0lOR19JTkNESVJ9L1gxMS8gLS1kaXNhYmxlLXhmODZiaWdmb250IgorRVhUUkFfT0VNQUtFICs9ICdDV0FSTkZMQUdTPSIiJworCitQQUNLQUdFQ09ORklHID8/PSAieGNtcyIKK1BBQ0tBR0VDT05GSUdbeGNtc10gPSAiLS1lbmFibGUteGNtcywtLWRpc2FibGUteGNtcyIKKworIyBzcmMvdXRpbC9tYWtla2V5cyBpcyBidWlsdCBuYXRpdmVseSBidXQgbmVlZHMgLURfR05VX1NPVVJDRSBkZWZpbmVkLgorQ1BQRkxBR1NfRk9SX0JVSUxEICs9ICItRF9HTlVfU09VUkNFIgorCitQQUNLQUdFUyA9KyAiJHtQTn0teGNiIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9YMTEvWEtleXN5bURCICR7ZGF0YWRpcn0vWDExL1hFcnJvckRCICR7ZGF0YWRpcn0vWDExL1hjbXMudHh0IgorRklMRVNfJHtQTn0teGNiICs9ICIke2xpYmRpcn0vbGliWDExLXhjYi5zby4qIgorRklMRVNfJHtQTn0tbG9jYWxlICs9ICIke2RhdGFkaXJ9L1gxMS9sb2NhbGUgJHtsaWJkaXJ9L1gxMS9sb2NhbGUiCisKKyMgTXVsdGlwbGUgbGlieDExIGRlcml2YXRpdmVzIGZyb20gZnJvbSB0aGlzIGZpbGUgYW5kIGFyZSBzZWxlY3RlZCBieSB2aXJ0dWFsL2xpYngxMQorIyBBIHdvcmxkIGJ1aWxkIHNob3VsZCBvbmx5IGJ1aWxkIHRoZSBjb3JyZWN0IHZlcnNpb24sIG5vdCBhbGwgb2YgdGhlbS4KK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL1gxOE5DTVNzdHVicy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL1gxOE5DTVNzdHVicy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NGNlZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvWDE4TkNNU3N0dWJzLmRpZmYKQEAgLTAsMCArMSw1MjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCitJbmRleDogbGliWDExLTEuMy9zcmMvaW1Db252LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJYMTEtMS4zLm9yaWcvc3JjL2ltQ29udi5jCisrKysgbGliWDExLTEuMy9zcmMvaW1Db252LmMKK0BAIC04Myw2ICs4Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgU3Vic3RSZWMgU3Vic3RUYWJsZVsKKyAgKiBmcm9tIFVDUyBjaGFyIHRvIHNwZWNpZmllZCBjaGFyc2V0IGNoYXIuCisgICogVGhpcyBjb252ZXJ0ZXIgaXMgbmVlZGVkIGZvciBfWGltR2V0Q2hhckNvZGUgc3Vicm91dGluZS4KKyAgKi8KKysjaWZkZWYgWExPQ0FMRQorIFhQb2ludGVyCisgX1hpbUdldExvY2FsZUNvZGUgKAorICAgICBfWGNvbnN0IGNoYXIqCWVuY29kaW5nX25hbWUpCitAQCAtOTYsNiArOTcsNyBAQCBfWGltR2V0TG9jYWxlQ29kZSAoCisgICAgIH0KKyAgICAgcmV0dXJuIGN2dDsKKyB9CisrI2VuZGlmCisgCisgLyoKKyAgKiBSZXR1cm5zIHRoZSBsb2NhbGUgZGVwZW5kZW50IHJlcHJlc2VudGF0aW9uIG9mIGEga2V5c3ltLgorQEAgLTEwNiw2ICsxMDgsNyBAQCBfWGltR2V0TG9jYWxlQ29kZSAoCisgICogdGVybWluYXRpbmcgTlVMIGJ5dGUuIFJldHVybiAwIGlmIHRoZSBrZXlzeW0gaXMgbm90IHJlcHJlc2VudGFibGUgaW4gdGhlCisgICogbG9jYWxlCisgICovCisrI2lmZGVmIFhMT0NBTEUKKyAvKkFSR1NVU0VEKi8KKyBpbnQKKyBfWGltR2V0Q2hhckNvZGUgKAorQEAgLTEzNSw2ICsxMzgsNyBAQCBfWGltR2V0Q2hhckNvZGUgKAorICAgICAgICAgYnVmW2NvdW50XT0gJ1wwJzsKKyAgICAgcmV0dXJuIGNvdW50OworIH0KKysjZW5kaWYKKyAKKyAjaWZkZWYgWEtCCisgc3RhdGljIGludCBsb29rdXBfc3RyaW5nKAorSW5kZXg6IGxpYlgxMS0xLjMvc3JjL1gxOE5DTVNzdHVicy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgbGliWDExLTEuMy9zcmMvWDE4TkNNU3N0dWJzLmMKK0BAIC0wLDAgKzEsNDI4IEBACisrLyoKKysgKiBYMThOQ01Tc3R1YnMuYworKyAqIC0gUHJvdmlkZXMgc3R1YnMgYW5kIGR1bW15IGZ1bmNzIG5lZWRlZCB3aGVuIFhjbXMgYW5kIFhMb2NhbGUgc3R1ZmYgcmVtb3ZlZAorKyAqCisrICogQ29weXJpZ2h0IKkgMjAwMyBNYXR0aGV3IEFsbHVtCisrICoKKysgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKysgKiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAorKyAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdAorKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKysgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNYXR0aGV3IEFsbHVtIG5vdCBiZSB1c2VkIGluCisrICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0CisrICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIEtlaXRoIFBhY2thcmQgYW5kIENvbXBhcSBtYWtlcyBubworKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdAorKyAqIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisrICoKKysgKiBNQVRUSEVXIEFMTFVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIAorKyAqIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIAorKyAqIElOIE5PIEVWRU5UIFNIQUxMIEtFSVRIIFBBQ0tBUkQgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IKKysgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwKKysgKiBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCisrICogVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgorKyAqIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlICJYbGliaW50LmgiCisrI2luY2x1ZGUgIlhsY2ludC5oIgorKyNpbmNsdWRlIDxYMTEvWGxvY2FsZS5oPgorKyNpbmNsdWRlIDxYMTEvWG9zLmg+CisrI2lmZGVmIFdJTjMyCisrI3VuZGVmIGNsb3NlCisrI2VuZGlmCisrI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorKyNpbmNsdWRlICJYbGNQdWJJLmgiCisrCisrI2luY2x1ZGUgIlhjbXNpbnQuaCIgCQkvKiBmb3IgWGNtc0NDQyB0eXBlICAqLworKyNpbmNsdWRlICJYbGNQdWJJLmgiICAgICAgICAgICAgLyogZm9yIFhMQ2QgdHlwZSAqLworKyNpbmNsdWRlICJjb25maWcuaCIKKysKKysjaWYgISBYTE9DQUxFCisrCisrQm9vbAorK1hTdXBwb3J0c0xvY2FsZSgpCisreworKyAgcmV0dXJuIEZhbHNlOyAJCQorK30KKysKKytjaGFyICoKKytYU2V0TG9jYWxlTW9kaWZpZXJzKAorKyAgICBjb25zdCBjaGFyICptb2RpZmllcnMpCisreworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK1hMQ2QKKytfWE9wZW5MQygKKysgICAgY2hhciAqbmFtZSkKKyt7CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrWExDZAorK19YbGNDdXJyZW50TEMoKQorK3sKKysgIHJldHVybiBOVUxMOworK30KKysKKyt2b2lkCisrX1hsY1ZhVG9BcmdMaXN0KAorKyAgICB2YV9saXN0IHZhciwKKysgICAgaW50IGNvdW50LAorKyAgICBYbGNBcmdMaXN0ICphcmdzX3JldCkKKyt7CisrICByZXR1cm47CisrfQorKworK3ZvaWQKKytfWGxjQ291bnRWYUxpc3QoCisrICAgIHZhX2xpc3QgdmFyLAorKyAgICBpbnQgKmNvdW50X3JldCkKKyt7CisrICByZXR1cm47CisrfQorKworK3ZvaWQKKytfWENsb3NlTEMoCisrICAgIFhMQ2QgbGNkKQorK3sKKysgIHJldHVybjsKKyt9CisrCisraW50CisrX1hsY0NvbnZlcnQoCisrICAgIFhsY0NvbnYgY29udiwKKysgICAgWFBvaW50ZXIgKmZyb20sCisrICAgIGludCAqZnJvbV9sZWZ0LAorKyAgICBYUG9pbnRlciAqdG8sCisrICAgIGludCAqdG9fbGVmdCwKKysgICAgWFBvaW50ZXIgKmFyZ3MsCisrICAgIGludCBudW1fYXJncykKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrLyogWElNIFN0dWJzICovCisrCisrWFBvaW50ZXIKKytfWGltR2V0TG9jYWxlQ29kZSAoIF9YY29uc3QgY2hhciogZW5jb2RpbmdfbmFtZSApCisreworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK2ludAorK19YaW1HZXRDaGFyQ29kZSAoCisrICAgIFhQb2ludGVyICAgICAgICAgICAgdWNzX2NvbnYsCisrICAgIEtleVN5bSAgICAgICAgICAgICAga2V5c3ltLAorKyAgICB1bnNpZ25lZCBjaGFyKiAgICAgIGJ1ZiwKKysgICAgaW50ICAgICAgICAgICAgICAgICBuYnl0ZXMpCisreworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIFhybSBTdHVicyAqLworKworK1hybU1ldGhvZHMKKytfWHJtSW5pdFBhcnNlSW5mbygKKysgICAgWFBvaW50ZXIgKnN0YXRlKQorK3sKKysgICAgcmV0dXJuIChYcm1NZXRob2RzKSBOVUxMOworK30KKysKKysvKiBYd2MgU3R1YnMgKi8KKysKKytpbnQKKytYd2NUZXh0RXh0ZW50cygKKysgICAgWEZvbnRTZXQgICAgICAgICAgICBmb250X3NldCwKKysgICAgX1hjb25zdCB3Y2hhcl90ICAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHRleHRfbGVuLAorKyAgICBYUmVjdGFuZ2xlICAgICAgICAgKm92ZXJhbGxfaW5rX2V4dGVudHMsCisrICAgIFhSZWN0YW5nbGUgICAgICAgICAqb3ZlcmFsbF9sb2dpY2FsX2V4dGVudHMpCisreworKyAgcmV0dXJuIDA7CisrfQorKworK3ZvaWQgCisrWHdjRHJhd1N0cmluZyhEaXNwbGF5ICpkaXNwbGF5LAorKwkgICAgICBEcmF3YWJsZSBkLAorKwkgICAgICBYRm9udFNldCBmb250X3NldCwKKysJICAgICAgR0MgZ2MsCisrCSAgICAgIGludCB4LCBpbnQgeSwKKysJICAgICAgX1hjb25zdCB3Y2hhcl90ICpzdHJpbmcsCisrCSAgICAgIGludCBudW1fd2NoYXJzKQorK3sKKysgIDsKKyt9CisrCisrdm9pZAorK1h3Y0RyYXdUZXh0KAorKyAgICBEaXNwbGF5ICAgICAgICAgICAgKmRweSwKKysgICAgRHJhd2FibGUgICAgICAgICAgICBkLAorKyAgICBHQyAgICAgICAgICAgICAgICAgIGdjLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHgsCisrICAgIGludCAgICAgICAgICAgICAgICAgeSwKKysgICAgWHdjVGV4dEl0ZW0gICAgICAgICp0ZXh0X2l0ZW1zLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIG5pdGVtcykKKyt7CisrICA7CisrfQorKworK3ZvaWQKKytYd2NEcmF3SW1hZ2VTdHJpbmcoCisrICAgIERpc3BsYXkgICAgICAgICAgICAqZHB5LAorKyAgICBEcmF3YWJsZSAgICAgICAgICAgIGQsCisrICAgIFhGb250U2V0ICAgICAgICAgICAgZm9udF9zZXQsCisrICAgIEdDICAgICAgICAgICAgICAgICAgZ2MsCisrICAgIGludCAgICAgICAgICAgICAgICAgeCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB5LAorKyAgICBfWGNvbnN0IHdjaGFyX3QgICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICAgICAgdGV4dF9sZW4pCisreworKyAgOworK30KKysKKytpbnQKKytYd2NUZXh0RXNjYXBlbWVudCgKKysgICAgWEZvbnRTZXQgICAgICAgICAgICBmb250X3NldCwKKysgICAgX1hjb25zdCB3Y2hhcl90ICAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHRleHRfbGVuKQorK3sKKysgIHJldHVybiAwOworK30KKysKKytTdGF0dXMKKytYd2NUZXh0UGVyQ2hhckV4dGVudHMoCisrICAgIFhGb250U2V0ICAgICAgICAgICAgZm9udF9zZXQsCisrICAgIF9YY29uc3Qgd2NoYXJfdCAgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB0ZXh0X2xlbiwKKysgICAgWFJlY3RhbmdsZSAgICAgICAgICppbmtfZXh0ZW50c19idWZmZXIsCisrICAgIFhSZWN0YW5nbGUgICAgICAgICAqbG9naWNhbF9leHRlbnRzX2J1ZmZlciwKKysgICAgaW50ICAgICAgICAgICAgICAgICBidWZmZXJfc2l6ZSwKKysgICAgaW50ICAgICAgICAgICAgICAgICpudW1fY2hhcnMsCisrICAgIFhSZWN0YW5nbGUgICAgICAgICAqbWF4X2lua19leHRlbnRzLAorKyAgICBYUmVjdGFuZ2xlICAgICAgICAgKm1heF9sb2dpY2FsX2V4dGVudHMpCisreworKyAgcmV0dXJuKFhjbXNGYWlsdXJlKTsKKyt9CisrCisraW50CisrWHdjVGV4dFByb3BlcnR5VG9UZXh0TGlzdCgKKysgICAgRGlzcGxheSAqZHB5LAorKyAgICBjb25zdCBYVGV4dFByb3BlcnR5ICp0ZXh0X3Byb3AsCisrICAgIHdjaGFyX3QgKioqbGlzdF9yZXQsCisrICAgIGludCAqY291bnRfcmV0KQorK3sKKysgIHJldHVybiAwOworK30KKysKKytpbnQKKytYd2NUZXh0TGlzdFRvVGV4dFByb3BlcnR5KAorKyAgICBEaXNwbGF5ICpkcHksCisrICAgIHdjaGFyX3QgKipsaXN0LAorKyAgICBpbnQgY291bnQsCisrICAgIFhJQ0NFbmNvZGluZ1N0eWxlIHN0eWxlLAorKyAgICBYVGV4dFByb3BlcnR5ICp0ZXh0X3Byb3ApCisreworKyAgcmV0dXJuIDA7CisrfQorKworK3ZvaWQKKytYd2NGcmVlU3RyaW5nTGlzdCh3Y2hhcl90ICoqbGlzdCkKKyt7CisrICByZXR1cm47CisrfQorKworKworK3ZvaWQgWG1iU2V0V01Qcm9wZXJ0aWVzICggICAgICAgIC8qIEFjdHVhbGx5IGZyb20gbWJXTVByb3BzLmMgKi8KKysgICAgRGlzcGxheSAqZHB5LAorKyAgICBXaW5kb3cgdywKKysgICAgX1hjb25zdCBjaGFyICp3aW5kb3dOYW1lLAorKyAgICBfWGNvbnN0IGNoYXIgKmljb25OYW1lLAorKyAgICBjaGFyICoqYXJndiwKKysgICAgaW50IGFyZ2MsCisrICAgIFhTaXplSGludHMgKnNpemVIaW50cywKKysgICAgWFdNSGludHMgKndtSGludHMsCisrICAgIFhDbGFzc0hpbnQgKmNsYXNzSGludHMpCisreworKyAgcmV0dXJuOworK30KKysKKytpbnQKKytYbWJUZXh0UHJvcGVydHlUb1RleHRMaXN0KAorKyAgICBEaXNwbGF5ICpkcHksCisrICAgIGNvbnN0IFhUZXh0UHJvcGVydHkgKnRleHRfcHJvcCwKKysgICAgY2hhciAqKipsaXN0X3JldCwKKysgICAgaW50ICpjb3VudF9yZXQpCisreworKyAgcmV0dXJuIFhMb2NhbGVOb3RTdXBwb3J0ZWQ7CisrfQorKworK2ludAorK1htYlRleHRMaXN0VG9UZXh0UHJvcGVydHkoCisrICAgIERpc3BsYXkgKmRweSwKKysgICAgY2hhciAqKmxpc3QsCisrICAgIGludCBjb3VudCwKKysgICAgWElDQ0VuY29kaW5nU3R5bGUgc3R5bGUsCisrICAgIFhUZXh0UHJvcGVydHkgKnRleHRfcHJvcCkKKyt7CisrICByZXR1cm4gWExvY2FsZU5vdFN1cHBvcnRlZDsKKyt9CisrCisraW50CisrWG1iVGV4dEV4dGVudHMoCisrICAgIFhGb250U2V0ICAgICAgICBmb250X3NldCwKKysgICAgX1hjb25zdCBjaGFyICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICB0ZXh0X2xlbiwKKysgICAgWFJlY3RhbmdsZSAgICAgKm92ZXJhbGxfaW5rX2V4dGVudHMsCisrICAgIFhSZWN0YW5nbGUgICAgICpvdmVyYWxsX2xvZ2ljYWxfZXh0ZW50cykKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrdm9pZAorK1htYkRyYXdUZXh0KAorKyAgICBEaXNwbGF5ICAgICAgICAgICAgKmRweSwKKysgICAgRHJhd2FibGUgICAgICAgICAgICBkLAorKyAgICBHQyAgICAgICAgICAgICAgICAgIGdjLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHgsCisrICAgIGludCAgICAgICAgICAgICAgICAgeSwKKysgICAgWG1iVGV4dEl0ZW0gICAgICAgICp0ZXh0X2l0ZW1zLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIG5pdGVtcykKKyt7CisrICA7CisrfQorKworK3ZvaWQKKytYbWJEcmF3U3RyaW5nKAorKyAgICBEaXNwbGF5ICAgICAgICAgICAgKmRweSwKKysgICAgRHJhd2FibGUgICAgICAgICAgICBkLAorKyAgICBYRm9udFNldCAgICAgICAgICAgIGZvbnRfc2V0LAorKyAgICBHQyAgICAgICAgICAgICAgICAgIGdjLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHgsCisrICAgIGludCAgICAgICAgICAgICAgICAgeSwKKysgICAgX1hjb25zdCBjaGFyICAgICAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHRleHRfbGVuKQorK3sKKysgIDsKKyt9CisrCisrdm9pZAorK1htYkRyYXdJbWFnZVN0cmluZygKKysgICAgRGlzcGxheSAgICAgICAgICAgICpkcHksCisrICAgIERyYXdhYmxlICAgICAgICAgICAgZCwKKysgICAgWEZvbnRTZXQgICAgICAgICAgICBmb250X3NldCwKKysgICAgR0MgICAgICAgICAgICAgICAgICBnYywKKysgICAgaW50ICAgICAgICAgICAgICAgICB4LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHksCisrICAgIF9YY29uc3QgY2hhciAgICAgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB0ZXh0X2xlbikKKyt7CisrICA7CisrfQorKworK2ludAorK1htYlRleHRFc2NhcGVtZW50KAorKyAgICBYRm9udFNldCAgICAgICAgZm9udF9zZXQsCisrICAgIF9YY29uc3QgY2hhciAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgdGV4dF9sZW4pCisreworKyAgcmV0dXJuIDA7CisrfQorKworK1N0YXR1cworK1htYlRleHRQZXJDaGFyRXh0ZW50cygKKysgICAgWEZvbnRTZXQgICAgICAgIGZvbnRfc2V0LAorKyAgICBfWGNvbnN0IGNoYXIgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgIHRleHRfbGVuLAorKyAgICBYUmVjdGFuZ2xlICAgICAqaW5rX2V4dGVudHNfYnVmZmVyLAorKyAgICBYUmVjdGFuZ2xlICAgICAqbG9naWNhbF9leHRlbnRzX2J1ZmZlciwKKysgICAgaW50ICAgICAgICAgICAgIGJ1ZmZlcl9zaXplLAorKyAgICBpbnQgICAgICAgICAgICAqbnVtX2NoYXJzLAorKyAgICBYUmVjdGFuZ2xlICAgICAqbWF4X2lua19leHRlbnRzLAorKyAgICBYUmVjdGFuZ2xlICAgICAqbWF4X2xvZ2ljYWxfZXh0ZW50cykKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrdW5zaWduZWQgaW50CisrS2V5U3ltVG9VY3M0KEtleVN5bSBrZXlzeW0pCisreworKyAgcmV0dXJuIDA7CisrfQorKworKyNlbmRpZiAKKysKKysjaWYgISBYQ01TCisrCisrWGNtc0NDQyAKKytYY21zQ0NDT2ZDb2xvcm1hcChkcHksIGNtYXApCisrICAgIERpc3BsYXkgKmRweTsKKysgICAgQ29sb3JtYXAgY21hcDsKKyt7CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrU3RhdHVzCisrX1hjbXNSZXNvbHZlQ29sb3JTdHJpbmcgKAorKyAgICBYY21zQ0NDIGNjYywKKysgICAgY29uc3QgY2hhciAqKmNvbG9yX3N0cmluZywKKysgICAgWGNtc0NvbG9yICpwQ29sb3JfZXhhY3RfcmV0dXJuLAorKyAgICBYY21zQ29sb3JGb3JtYXQgcmVzdWx0X2Zvcm1hdCkKKyt7CisrICByZXR1cm4oWGNtc0ZhaWx1cmUpOworK30KKysKKyt2b2lkCisrX1hjbXNVbnJlc29sdmVDb2xvcigKKysgICAgWGNtc0NDQyBjY2MsCisrICAgIFhjbXNDb2xvciAqcENvbG9yKQorK3sKKysgIHJldHVybjsKKyt9CisrCisrdm9pZAorK19YVW5yZXNvbHZlQ29sb3IoCisrICAgIFhjbXNDQ0MgY2NjLAorKyAgICBYQ29sb3IgKnBYQ29sb3IpCisreworKyAgcmV0dXJuOworK30KKysKKytYY21zQ21hcFJlYyAqCisrX1hjbXNBZGRDbWFwUmVjKGRweSwgY21hcCwgd2luZG93SUQsIHZpc3VhbCkKKysgICAgRGlzcGxheSAqZHB5OworKyAgICBDb2xvcm1hcCBjbWFwOworKyAgICBXaW5kb3cgd2luZG93SUQ7CisrICAgIFZpc3VhbCAqdmlzdWFsOworK3sKKysgIHJldHVybiBOVUxMOworK30KKysKKyt2b2lkCisrX1hjbXNSR0JfdG9fWENvbG9yKAorKyAgICBYY21zQ29sb3IgKnBDb2xvcnMsCisrICAgIFhDb2xvciAqcFhDb2xvcnMsCisrICAgIHVuc2lnbmVkIGludCBuQ29sb3JzKQorK3sKKysgIHJldHVybjsKKyt9CisrCisrWGNtc0NtYXBSZWMgKgorK19YY21zQ29weUNtYXBSZWNBbmRGcmVlKAorKyAgICBEaXNwbGF5ICpkcHksCisrICAgIENvbG9ybWFwIHNyY19jbWFwLAorKyAgICBDb2xvcm1hcCBjb3B5X2NtYXApCisreworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK3ZvaWQKKytfWGNtc0RlbGV0ZUNtYXBSZWMoCisrICAgIERpc3BsYXkgKmRweSwKKysgICAgQ29sb3JtYXAgY21hcCkKKyt7CisrICByZXR1cm47CisrfQorKworKyNlbmRpZgorSW5kZXg6IGxpYlgxMS0xLjMvc3JjL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliWDExLTEuMy5vcmlnL3NyYy9NYWtlZmlsZS5hbQorKysrIGxpYlgxMS0xLjMvc3JjL01ha2VmaWxlLmFtCitAQCAtMzM1LDYgKzMzNSw4IEBAIGlmIFRIUlNUVUJTCisgbGliWDExX2xhX1NPVVJDRVMrPVVJVGhyU3R1YnMuYworIGVuZGlmCisgCisrbGliWDExX2xhX1NPVVJDRVMrPVgxOE5DTVNzdHVicy5jCisrCisgeDExZGF0YWRpciA9IEBYMTFfREFUQURJUkAKKyB4MTFkYXRhX0RBVEEgPSBYS2V5c3ltREIgWEVycm9yREIKKyAKK0BAIC0zNDIsNiArMzQ0LDcgQEAgRVhUUkFfRElTVCA9IFwKKyAJJCh4MTFkYXRhX0RBVEEpIFwKKyAJb3MyU3R1YnMuYyBcCistCVVJVGhyU3R1YnMuYyAKKysJVUlUaHJTdHVicy5jIFwKKysJWDE4TkNNU3N0dWJzLmMKKyAKKyBpZiBYQ0IKKyBsaWJYMTFfbGFfU09VUkNFUyArPSBcCitJbmRleDogbGliWDExLTEuMy9zcmMvbG9ja2luZy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliWDExLTEuMy5vcmlnL3NyYy9sb2NraW5nLmMKKysrKyBsaWJYMTEtMS4zL3NyYy9sb2NraW5nLmMKK0BAIC02Niw3ICs2Niw5IEBAIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGEKKyAjZGVmaW5lIE5VTV9GUkVFX0NWTFMgNAorIAorIC8qIGluIGxjV3JhcC5jICovCisrI2lmZGVmIFhMT0NBTEUKKyBleHRlcm4gTG9ja0luZm9QdHIgX1hpMThuX2xvY2s7CisrI2VuZGlmCisgCisgI2lmZGVmIFdJTjMyCisgc3RhdGljIERXT1JEIF9YX1Rsc0luZGV4ID0gKERXT1JEKS0xOworQEAgLTU5NCw5ICs1OTYsMTEgQEAgU3RhdHVzIFhJbml0VGhyZWFkcyh2b2lkKQorICAgICBfWGdsb2JhbF9sb2NrID0gJmdsb2JhbF9sb2NrOworICAgICB4bXV0ZXhfaW5pdChfWGdsb2JhbF9sb2NrLT5sb2NrKTsKKyAgICAgeG11dGV4X3NldF9uYW1lKF9YZ2xvYmFsX2xvY2stPmxvY2ssICJYbGliIGdsb2JhbCIpOworKyNpZmRlZiBYTE9DQUxFCisgICAgIF9YaTE4bl9sb2NrID0gJmkxOG5fbG9jazsKKyAgICAgeG11dGV4X2luaXQoX1hpMThuX2xvY2stPmxvY2spOworICAgICB4bXV0ZXhfc2V0X25hbWUoX1hpMThuX2xvY2stPmxvY2ssICJYbGliIGkxOG4iKTsKKysjZW5kaWYKKyAgICAgX1hMb2NrTXV0ZXhfZm4gPSBfWExvY2tNdXRleDsKKyAgICAgX1hVbmxvY2tNdXRleF9mbiA9IF9YVW5sb2NrTXV0ZXg7CisgICAgIF9YQ3JlYXRlTXV0ZXhfZm4gPSBfWENyZWF0ZU11dGV4OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2Rpc2FibGVfdGVzdHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZGlzYWJsZV90ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWI2Y2RlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2Rpc2FibGVfdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CisKK1VwZGF0ZSBmb3IgMS42LjEKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLU51cmQgbGliWDExLTEuNS4wL25scy9NYWtlZmlsZS5hbSBsaWJYMTEtMS41LjAvbmxzL01ha2VmaWxlLmFtCistLS0gbGliWDExLTEuNS4wL25scy9NYWtlZmlsZS5hbQkyMDEyLTA2LTAyIDA5OjM3OjE4LjAwMDAwMDAwMCArMDMwMAorKysrIGxpYlgxMS0xLjUuMC9ubHMvTWFrZWZpbGUuYW0JMjAxMy0wMS0wMiAxNjoxMDoyNC45NjAxNTYxMzEgKzAyMDAKK0BAIC0zNiwxMSArMzYsNiBAQAorICAgICAgICAgPCBsb2NhbGUuZGlyLmwxID4gbG9jYWxlLmRpci5sMgorCWNhdCBsb2NhbGUuZGlyLmwyIGxvY2FsZS5kaXIubDEgPiBsb2NhbGUuZGlyCisKKy1pZiBIQVZFX1BFUkwKKy1MT0dfQ09NUElMRVIgPSAkKFBFUkwpCistVEVTVFMgPSBjb21wb3NlLWNoZWNrLnBsCistZW5kaWYgSEFWRV9QRVJMCistCisKKyAjIFBlci1sb2NhbGUgZGF0YSBmaWxlcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2ZpeC1kaXNhYmxlLXhsb2NhbGUuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9maXgtZGlzYWJsZS14bG9jYWxlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdjMzk4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9maXgtZGlzYWJsZS14bG9jYWxlLmRpZmYKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFhpYW9mZW5nIFlhbiA8eGlhb2ZlbmcueWFuQHdpbmRyaXZlci5jb20+CistLS0gbGliWDExLVgxMVI3LjAtMS4wLjAvc3JjL0ZvbnQuYy5vcmlnCTIwMDYtMDMtMTIgMTg6MzU6NDIuMDAwMDAwMDAwICswMTAwCisrKysgbGliWDExLVgxMVI3LjAtMS4wLjAvc3JjL0ZvbnQuYwkyMDA2LTAzLTEyIDE4OjQwOjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTcwMSw3ICs3MDEsMTEgQEAKKyAgICAgfQorICAgICBpZiAobCAtIDIgLSAocCAtIGNoYXJzZXQpIDwgMCkKKyAJcmV0dXJuIDA7CisrI2lmZGVmIFhMT0NBTEUKKyAgICAgaWYgKF9YbGNOQ29tcGFyZUlTT0xhdGluMShuYW1lICsgbCAtIDIgLSAocCAtIGNoYXJzZXQpLCBjaGFyc2V0LCBwIC0gY2hhcnNldCkpCisrI2Vsc2UKKysgICAgaWYgKHN0cm5jYXNlY21wKG5hbWUgKyBsIC0gMiAtIChwIC0gY2hhcnNldCksIGNoYXJzZXQsIHAgLSBjaGFyc2V0KSkKKysjZW5kaWYKKyAJcmV0dXJuIDA7CisgICAgIGlmIChzdHJsZW4ocCArIDEpICsgbCAtIDEgPj0gc2l6ZW9mKGJ1ZikgLSAxKQorIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9maXgtdXRmOC13cm9uZy1kZWZpbmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZml4LXV0Zjgtd3JvbmctZGVmaW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MzQ3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZml4LXV0Zjgtd3JvbmctZGVmaW5lLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBYaWFvZmVuZyBZYW4gPHhpYW9mZW5nLnlhbkB3aW5kcml2ZXIuY29tPgorCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5ob2xnZXJzY2h1cmlnLmRlL3BhdGNoZXIuaHRtbAorIworCistLS0gbGliWDExLVgxMVI3LjAtMS4wLjAvaW5jbHVkZS9YMTEvWGxpYi5ofmZpeC11dGY4LXdyb25nLWRlZmluZQorKysrIGxpYlgxMS1YMTFSNy4wLTEuMC4wL2luY2x1ZGUvWDExL1hsaWIuaAorQEAgLTEwMyw3ICsxMDMsNyBAQAorIAorIC8qIEFQSSBtZW50aW9uaW5nICJVVEY4IiBvciAidXRmOCIgaXMgYW4gWEZyZWU4NiBleHRlbnNpb24sIGludHJvZHVjZWQgaW4KKyAgICBOb3ZlbWJlciAyMDAwLiBJdHMgcHJlc2VuY2UgaXMgaW5kaWNhdGVkIHRocm91Z2ggdGhlIGZvbGxvd2luZyBtYWNyby4gKi8KKy0jZGVmaW5lIFhfSEFWRV9VVEY4X1NUUklORyAxCisrI3VuZGVmIFhfSEFWRV9VVEY4X1NUUklORworIAorIHR5cGVkZWYgY2hhciAqWFBvaW50ZXI7CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvbGliWDExLUFkZC1taXNzaW5nLU5VTEwtY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvbGliWDExLUFkZC1taXNzaW5nLU5VTEwtY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhYmY3YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9saWJYMTEtQWRkLW1pc3NpbmctTlVMTC1jaGVjay5wYXRjaApAQCAtMCwwICsxLDcyIEBACitGcm9tIDRkODVkNWYzYmQ4YWZhYzg5MzczOGZkODhlMTlkOGNiNWNmOTk4ZmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorRGF0ZTogU3VuLCAyNyBKdWwgMjAxNCAxMzoxMDowNyAtMDQwMAorU3ViamVjdDogW1BBVENIXSBsaWJYMTE6IEFkZCBtaXNzaW5nIE5VTEwgY2hlY2sgb24gaW0gYW5kIGltLT5tZXRob2RzCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgKGM4MjdlZGNkMWM0YTdmOTIwYWEyNTIwODA4M2I1YjU4ZDYwZDJiNDQpCitTaWduZWQtb2ZmLWJ5OiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorCistLS0KKyBzcmMveGxpYmkxOG4vSUNXcmFwLmMgfCA1ICsrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtcnUgbGliWDExLTEuNi4yLW9yaWcvc3JjL3hsaWJpMThuL0lDV3JhcC5jIGxpYlgxMS0xLjYuMi9zcmMveGxpYmkxOG4vSUNXcmFwLmMKKy0tLSBsaWJYMTEtMS42LjItb3JpZy9zcmMveGxpYmkxOG4vSUNXcmFwLmMJMjAxNC0wNy0yNyAxMzozODoyOS41ODY2NjY0NDkgLTA0MDAKKysrKyBsaWJYMTEtMS42LjIvc3JjL3hsaWJpMThuL0lDV3JhcC5jCTIwMTQtMDctMjcgMTM6NDE6MzkuNjcxNjA5MDMwIC0wNDAwCitAQCAtMTY5LDcgKzE2OSw3IEBACisgICAgIHZhX2xpc3QgdmFyOworICAgICBpbnQgICAgIHRvdGFsX2NvdW50OworICAgICBYSU1BcmcgKmFyZ3M7CistICAgIGNoYXIgICAqcmV0OworKyAgICBjaGFyICAgKnJldCA9IE5VTEw7CisgCisgICAgIC8qCisgICAgICAqIHNvIGNvdW50IHRoZSBzdHVmZiBkYW5nbGluZyBoZXJlCitAQCAtMTg1LDcgKzE4NSw4IEBACisgICAgIF9YSU1WYVRvTmVzdGVkTGlzdCh2YXIsIHRvdGFsX2NvdW50LCAmYXJncyk7CisgICAgIHZhX2VuZCh2YXIpOworIAorLSAgICByZXQgPSAoKmltLT5tZXRob2RzLT5zZXRfdmFsdWVzKSAoaW0sIGFyZ3MpOworKyAgICBpZiAoaW0gJiYgaW0tPm1ldGhvZHMpCisrCXJldCA9ICgqaW0tPm1ldGhvZHMtPnNldF92YWx1ZXMpIChpbSwgYXJncyk7CisgICAgIFhmcmVlKGFyZ3MpOworICAgICByZXR1cm4gcmV0OworIH0KK0BAIC0xOTYsNyArMTk3LDcgQEAKKyAgICAgdmFfbGlzdCB2YXI7CisgICAgIGludCAgICAgdG90YWxfY291bnQ7CisgICAgIFhJTUFyZyAqYXJnczsKKy0gICAgY2hhciAgICpyZXQ7CisrICAgIGNoYXIgICAqcmV0ID0gTlVMTDsKKyAKKyAgICAgLyoKKyAgICAgICogc28gY291bnQgdGhlIHN0dWZmIGRhbmdsaW5nIGhlcmUKK0BAIC0yMTIsNyArMjEzLDggQEAKKyAgICAgX1hJTVZhVG9OZXN0ZWRMaXN0KHZhciwgdG90YWxfY291bnQsICZhcmdzKTsKKyAgICAgdmFfZW5kKHZhcik7CisgCistICAgIHJldCA9ICgqaW0tPm1ldGhvZHMtPmdldF92YWx1ZXMpIChpbSwgYXJncyk7CisrICAgIGlmIChpbSAmJiBpbS0+bWV0aG9kcykKKysJcmV0ID0gKCppbS0+bWV0aG9kcy0+Z2V0X3ZhbHVlcykgKGltLCBhcmdzKTsKKyAgICAgWGZyZWUoYXJncyk7CisgICAgIHJldHVybiByZXQ7CisgfQorQEAgLTIyOCw3ICsyMzAsNyBAQAorICAgICB2YV9saXN0IHZhcjsKKyAgICAgaW50ICAgICB0b3RhbF9jb3VudDsKKyAgICAgWElNQXJnICphcmdzOworLSAgICBYSUMgICAgIGljOworKyAgICBYSUMgICAgIGljID0gTlVMTDsKKyAKKyAgICAgLyoKKyAgICAgICogc28gY291bnQgdGhlIHN0dWZmIGRhbmdsaW5nIGhlcmUKK0BAIC0yNDQsNyArMjQ2LDggQEAKKyAgICAgX1hJTVZhVG9OZXN0ZWRMaXN0KHZhciwgdG90YWxfY291bnQsICZhcmdzKTsKKyAgICAgdmFfZW5kKHZhcik7CisgCistICAgIGljID0gKFhJQykgKCppbS0+bWV0aG9kcy0+Y3JlYXRlX2ljKSAoaW0sIGFyZ3MpOworKyAgICBpZiAoaW0gJiYgaW0tPm1ldGhvZHMpCisrCWljID0gKFhJQykgKCppbS0+bWV0aG9kcy0+Y3JlYXRlX2ljKSAoaW0sIGFyZ3MpOworICAgICBYZnJlZShhcmdzKTsKKyAgICAgaWYgKGljKSB7CisgCWljLT5jb3JlLm5leHQgPSBpbS0+Y29yZS5pY19jaGFpbjsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMV8xLjYuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMV8xLjYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTUzMWM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExXzEuNi4zLmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgbGlieDExLmluYworaW5oZXJpdCBnZXR0ZXh0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSSArPSAiZmlsZTovL2Rpc2FibGVfdGVzdHMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2xpYlgxMS1BZGQtbWlzc2luZy1OVUxMLWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmUzNmI3M2Y4YTQyMTQzMTQyZGRhODEyOWYwMmU0ZTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2YzMWE3YzM5ZjJmNTJlOGViZDBkYjk1NjQwMzg0ZTYzNDUxZjliMDE0ZWVkMmJiN2Y1ZGUwM2U4YWRjODExMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhhdV8xLjAuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhhdV8xLjAuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWY4YmZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGF1XzEuMC44LmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiWGF1OiBYIEF1dGhvcml0eSBEYXRhYmFzZSBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJ4YXUgcHJvdmlkZXMgdGhlIG1haW4gaW50ZXJmYWNlcyB0byB0aGUgWDExIFwKK2F1dGhvcmlzYXRpb24gaGFuZGxpbmcsIHdoaWNoIGNvbnRyb2xzIGF1dGhvcmlzYXRpb24gZm9yIFggY29ubmVjdGlvbnMsIFwKK2JvdGggY2xpZW50LXNpZGUgYW5kIHNlcnZlci1zaWRlLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK2luaGVyaXQgZ2V0dGV4dAorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc5MDhlMzQyNDkxMTk4NDAxMzIxY2VjMTk1NjgwN2VjIgorCitERVBFTkRTICs9ICIgeHByb3RvIgorUFJPVklERVMgPSAieGF1IgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhhdSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjg1ZjhhYmJmZmE2ZDE0NWMwZjkzMGYwMDcwM2IyMWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmRkNDc3MzIwYWViNWNkZDY3MjcyODM4NzIyZDZiN2Q1NDQ4ODdkZmU3ZGU0NmUxZTdjYzBjMjdjMmJlYTRmMiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYWxpYnJhdGUvZml4LXhjYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYWxpYnJhdGUvZml4LXhjYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjE0ODgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNhbGlicmF0ZS9maXgteGNiLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGVyZSBpcyBubyBleHRyYSByZXBseSBkYXRhIGFuZCBpZiB3ZSBzYXkgbm90IHRvIGRpc2dhcmQgaXQsIHhjYgordGhyb3dzIGZhdGFsIGFzc2VydHMuCisKK1JQIC0gMjYvMTEvMDkKKworSW5kZXg6IGdpdC94Y2FsaWJyYXRlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy94Y2FsaWJyYXRlLmMJMjAwOS0xMS0yNiAwODoxMTo0OC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnaXQveGNhbGlicmF0ZS5jCTIwMDktMTEtMjYgMDg6MDk6NTUuMDAwMDAwMDAwICswMDAwCitAQCAtMjE2LDcgKzIxNiw3IEBACisgICByZXEtPnJlcVR5cGUgPSBpbmZvLT5jb2Rlcy0+bWFqb3Jfb3Bjb2RlOworICAgcmVxLT54Q2FsaWJyYXRlUmVxVHlwZSA9IFhfWENhbGlicmF0ZVJhd01vZGU7CisgICByZXEtPm9uID0gZW5hYmxlOworLSAgaWYgKCFfWFJlcGx5IChkcHksICh4UmVwbHkgKikgJnJlcCwgMCwgeEZhbHNlKSkgCisrICBpZiAoIV9YUmVwbHkgKGRweSwgKHhSZXBseSAqKSAmcmVwLCAwLCB4VHJ1ZSkpIAorICAgICB7CisgICAgICAgVW5sb2NrRGlzcGxheSAoZHB5KTsKKyAgICAgICBTeW5jSGFuZGxlICgpOworQEAgLTI0MCw3ICsyNDAsNyBAQAorICAgcmVxLT54Q2FsaWJyYXRlUmVxVHlwZSA9IFhfWENhbGlicmF0ZVNjcmVlblRvQ29vcmQ7CisgICByZXEtPnggPSAqeDsKKyAgIHJlcS0+eSA9ICp5OworLSAgaWYgKCFfWFJlcGx5IChkcHksICh4UmVwbHkgKikgJnJlcCwgMCwgeEZhbHNlKSkgCisrICBpZiAoIV9YUmVwbHkgKGRweSwgKHhSZXBseSAqKSAmcmVwLCAwLCB4VHJ1ZSkpIAorICAgICB7CisgICAgICAgVW5sb2NrRGlzcGxheSAoZHB5KTsKKyAgICAgICBTeW5jSGFuZGxlICgpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNhbGlicmF0ZV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2FsaWJyYXRlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTVlODY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNhbGlicmF0ZV9naXQuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJYQ2FsaWJyYXRlOiBUb3VjaHNjcmVlbiBjYWxpYnJhdGlvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYQ2FsaWJyYXRlIGlzIGEgbGlicmFyeSBmb3IgcGVyZm9ybWluZyB0b3VjaHNjcmVlbiBcCitjYWxpYnJhdGlvbiB3aXRoIHRoZSBrZHJpdmUgdHNsaWIgdG91Y2hzY3JlZW4gZHJpdmVyLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8veGNhbGlicmF0ZS5oO2VuZGxpbmU9MjE7bWQ1PWZhNTcyZGY2NDM5ZjBmMjM1ZjI2MTJmMzcwZjE1M2Q3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hjYWxpYnJhdGUuYztlbmRsaW5lPTIxO21kNT1mYTU3MmRmNjQzOWYwZjIzNWYyNjEyZjM3MGYxNTNkNyIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBjYWxpYnJhdGVwcm90byBsaWJ4ZXh0IgorCitTUkNSRVYgPSAiMjA5ZDgzYWY2MWVkMzhhMDAyYzgwOTYzNzdkZWFjMjkyYjNlMzk2YyIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9saWIvbGliWENhbGlicmF0ZSBcCisgICAgICAgICAgIGZpbGU6Ly9maXgteGNiLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitGSUxFU18ke1BOfS1sb2NhbGUgKz0gIiR7ZGF0YWRpcn0vWDExL2xvY2FsZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMzFmMjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IuaW5jCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiWENCOiBUaGUgWCBwcm90b2NvbCBDIGJpbmRpbmcgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlRoZSBYIHByb3RvY29sIEMtbGFuZ3VhZ2UgQmluZGluZyAoWENCKSBpcyBhIHJlcGxhY2VtZW50IFwKK2ZvciBYbGliIGZlYXR1cmluZyBhIHNtYWxsIGZvb3RwcmludCwgbGF0ZW5jeSBoaWRpbmcsIGRpcmVjdCBhY2Nlc3MgdG8gXAordGhlIHByb3RvY29sLCBpbXByb3ZlZCB0aHJlYWRpbmcgc3VwcG9ydCwgYW5kIGV4dGVuc2liaWxpdHkuIgorSE9NRVBBR0UgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PVhDQiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTRUNUSU9OID0gIngxMS9saWJzIgorTElDRU5TRSA9ICJNSVQtWCIKKworREVQRU5EUyA9ICJ4Y2ItcHJvdG8geHByb3RvIGxpYnhhdSB4Y2ItcHJvdG8tbmF0aXZlIGxpYnB0aHJlYWQtc3R1YnMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmcvZGlzdC9saWJ4Y2ItJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly94Y2JpbmNsdWRlZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtY2hlY2sucGF0Y2giCisKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiXmxpYnhjYi0uKiIKKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYnhjYi5zby4qIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgcHl0aG9ubmF0aXZlIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBsaWJ4YXUgYW5kIG90aGVycyByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgJyR7bGliZGlyfScsICdebGlieGNiLSguKilcLnNvXC4uKiQnLCAnbGlieGNiLSVzJywgJ1hDQiBsaWJyYXJ5IG1vZHVsZSBmb3IgJXMnLCBhbGxvd19saW5rcz1UcnVlKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiL2Rpc2FibGUtY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IvZGlzYWJsZS1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjQxYzBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiL2Rpc2FibGUtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVGhlICJjaGVjayIgcGFja2FnZSBpcyBjaGVja2VkIGZvciB3aXRob3V0IGFuIGV4cGxpY2l0IGVuYWJsZS9kaXNhYmxlIG9wdGlvbiwKK3doaWNoIGNhbiBsZWFkIHRvIG5vbi1kZXRlcm1pbmlzdGljIGJ1aWxkIGlzc3VlcyB3aXRoIGJvdGggY2hlY2sgYW5kIGxpYnhzbHQuCisKK0FzIHRoZSB1bml0IHRlc3Qgc3VpdGUgaXMgbWluaW1hbCBhdCBwcmVzZW50LCBzaW1wbHkgZGlzYWJsZSB0aGUgdGVzdCBzdWl0ZS4gIEluCit0aGUgZnV0dXJlIGlmIHRoZSB0ZXN0IHN1aXRlIGlzIGV4cGFuZGVkIHRoaXMgY2FuIGJlIG1hZGUgY29uZGl0aW9uYWwgb24gdGhlCitwdGVzdCBESVNUUk9fRkVBVFVSRS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDZkN2M5YTUuLjIyY2NlYjkgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTIxLDcgKzIxLDggQEAgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgCisgQU1fUEFUSF9QWVRIT04oWzIuNl0pCisgCistUEtHX0NIRUNLX01PRFVMRVMoQ0hFQ0ssIFtjaGVjayA+PSAwLjkuNF0sIFtIQVZFX0NIRUNLPXllc10sIFtIQVZFX0NIRUNLPW5vXSkKKytkbmwgUEtHX0NIRUNLX01PRFVMRVMoQ0hFQ0ssIFtjaGVjayA+PSAwLjkuNF0sIFtIQVZFX0NIRUNLPXllc10sIFtIQVZFX0NIRUNLPW5vXSkKKytIQVZFX0NIRUNLPW5vCisgQU1fQ09ORElUSU9OQUwoSEFWRV9DSEVDSywgdGVzdCB4JEhBVkVfQ0hFQ0sgPSB4eWVzKQorIAorIEFDX0NPTkZJR19IRUFERVJTKFtzcmMvY29uZmlnLmhdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiL3hjYmluY2x1ZGVkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IveGNiaW5jbHVkZWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjI5N2MzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiL3hjYmluY2x1ZGVkaXIucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorQXMgcGtnLWNvbmZpZyAtLXZhcmlhYmxlIGRvZXNuJ3QgcmVzcGVjdCB0aGUgc3lzcm9vdCwgYWRkIHRoZSBwa2ctY29uZmlnIHN5c3Jvb3QKK3RvIHRoZSBiZWdpbm5pbmcgb2YgdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgbGF0ZXIgb24gdGhlIGhvc3QuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOTRkYTRmNy4uZDI5Y2Q2YSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjQsNyArNjQsNyBAQCBBQ19TVUJTVChORUVERUQpCisgCisgIyBGaW5kIHRoZSB4Y2ItcHJvdG8gcHJvdG9jb2wgZGVzY3JpcHRpb25zCisgQUNfTVNHX0NIRUNLSU5HKFhDQlBST1RPX1hDQklOQ0xVREVESVIpCistWENCUFJPVE9fWENCSU5DTFVERURJUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT14Y2JpbmNsdWRlZGlyIHhjYi1wcm90b2AKKytYQ0JQUk9UT19YQ0JJTkNMVURFRElSPSRQS0dfQ09ORklHX1NZU1JPT1RfRElSL2AkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXhjYmluY2x1ZGVkaXIgeGNiLXByb3RvYAorIEFDX01TR19SRVNVTFQoJFhDQlBST1RPX1hDQklOQ0xVREVESVIpCisgQUNfU1VCU1QoWENCUFJPVE9fWENCSU5DTFVERURJUikKKyAKK0BAIC03NCw3ICs3NCw3IEBAIEFDX1NVQlNUKFhDQlBST1RPX1ZFUlNJT04pCisgCisgIyBGaW5kIHRoZSB4Y2JnZW4gUHl0aG9uIHBhY2thZ2UKKyBBQ19NU0dfQ0hFQ0tJTkcoWENCUFJPVE9fWENCUFlUSE9ORElSKQorLVhDQlBST1RPX1hDQlBZVEhPTkRJUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1weXRob25kaXIgeGNiLXByb3RvYAorK1hDQlBST1RPX1hDQlBZVEhPTkRJUj0kUEtHX0NPTkZJR19TWVNST09UX0RJUi9gJFBLR19DT05GSUcgLS12YXJpYWJsZT1weXRob25kaXIgeGNiLXByb3RvYAorIEFDX01TR19SRVNVTFQoJFhDQlBST1RPX1hDQlBZVEhPTkRJUikKKyBBQ19TVUJTVChYQ0JQUk9UT19YQ0JQWVRIT05ESVIpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2JfMS4xMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl8xLjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNjI3MDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2JfMS4xMS5iYgpAQCAtMCwwICsxLDEwIEBACitpbmNsdWRlIGxpYnhjYi5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNzYzYjA4MWNiMTBjMjIzNDM1YjAxZTAwZGMwYWJhNyIKKworCitERVBFTkRTICs9ICJsaWJ4ZG1jcCIKKworU1JDX1VSSVttZDVzdW1dID0gIjVhODczZWJkMzgzZDFhNjA2MTJkZDZlYzZiNDJjNzgxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAzNjM1ZDcwMDQ1YjllZGU5MDc3OGU2NzUxNjEzNTgyOGE1N2RlODdhYzUwOGY5ODcwMjRmNDNjMDM2MjBmZjciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2JfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODY2MzZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiX2dpdC5iYgpAQCAtMCwwICsxLDEwIEBACitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK2luY2x1ZGUgbGlieGNiLmluYworCitTUkNSRVYgPSAiNjI1ZWQ1OTZjYWU2ZGQ4MTc1YWViNmNiNmYyNjc4NDkyODA0MmYyMiIKK1BWID0gIjEuMS45MC4xK2dpdHIke1NSQ1BWfSIKK1BSID0gInIxIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94Y2IvbGlieGNiIgorUyA9ICIke1dPUktESVJ9L2dpdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjb21wb3NpdGUvY2hhbmdlLWluY2x1ZGUtb3JkZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y29tcG9zaXRlL2NoYW5nZS1pbmNsdWRlLW9yZGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMzMxZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y29tcG9zaXRlL2NoYW5nZS1pbmNsdWRlLW9yZGVyLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworVGhpcyBwYXRjaCBtYWtlcyB0aGUgYnVpbGQgdXNlIGl0cyBvd24gWGNvbXBvc2l0ZS5oIG92ZXIgcmF0aGVyIHRoYW4gYW4KK29sZGVyIFhjb21wb3NpdGUuaCB0aGF0IG1pZ2h0IGFscmVhZHkgYmUgaW5zdGFsbGVkIGluIHRoZSBzdGFnaW5nIGRpci4KKworSW5kZXg6IGxpYlhjb21wb3NpdGUtMC40LjMvc3JjL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliWGNvbXBvc2l0ZS0wLjQuMy5vcmlnL3NyYy9NYWtlZmlsZS5hbQkyMDEwLTA2LTMwIDIyOjQyOjUzLjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYlhjb21wb3NpdGUtMC40LjMvc3JjL01ha2VmaWxlLmFtCTIwMTAtMTEtMjMgMjM6MDk6MzQuNTQ0MzIyOTMwIC0wODAwCitAQCAtMTksNyArMTksNyBAQAorICMgIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKKyAjICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorIAorLUFNX0NGTEFHUyA9ICQoQ1dBUk5GTEFHUykgJChYQ09NUE9TSVRFX0NGTEFHUykgJChYRklYRVNfQ0ZMQUdTKQorK0FNX0NGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICQoQ1dBUk5GTEFHUykgJChYQ09NUE9TSVRFX0NGTEFHUykgJChYRklYRVNfQ0ZMQUdTKQorIEFNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKKyAKKyBsaWJfTFRMSUJSQVJJRVMgPSBsaWJYY29tcG9zaXRlLmxhCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y29tcG9zaXRlXzAuNC40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNvbXBvc2l0ZV8wLjQuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDI1NzE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNvbXBvc2l0ZV8wLjQuNC5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIlhjb21wb3NpdGU6IFggQ29tcG9zaXRlIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgY29tcG9zaXRlIGV4dGVuc2lvbiBwcm92aWRlcyB0aHJlZSByZWxhdGVkIFwKK21lY2hhbmlzbXM6IHBlci1oaWVyYXJjaHkgc3RvcmFnZSwgYXV0b21hdGljIHNoYWRvdyB1cGRhdGUsIGFuZCBleHRlcm5hbCBcCitwYXJlbnQuICBJbiBwZXItaGllcmFyY2h5IHN0b3JhZ2UsIHRoZSByZW5kZXJpbmcgb2YgYW4gZW50aXJlIGhpZXJhcmNoeSBcCitvZiB3aW5kb3dzIGlzIHJlZGlyZWN0ZWQgdG8gb2ZmLXNjcmVlbiBzdG9yYWdlLiAgSW4gYXV0b21hdGljIHNoYWRvdyBcCit1cGRhdGUsIHdoZW4gYSBoaWVyYXJjaHkgaXMgcmVuZGVyZWQgb2ZmLXNjcmVlbiwgdGhlIFggc2VydmVyIHByb3ZpZGVzIFwKK2FuIGF1dG9tYXRpYyBtZWNoYW5pc20gZm9yIHByZXNlbnRpbmcgdGhvc2UgY29udGVudHMgd2l0aGluIHRoZSBwYXJlbnQgXAord2luZG93LiAgSW4gZXh0ZXJuYWwgcGFyZW50LCBhIG1lY2hhbmlzbSBmb3IgcHJvdmlkaW5nIHJlZGlyZWN0aW9uIG9mIFwKK2NvbXBvc2l0aW5nIHRyYW5zZm9ybWF0aW9ucyB0aHJvdWdoIGEgY2xpZW50LiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2YyOTA3YWFkNTQxZjZmMjI2ZmJjNThjYzFiM2NkZjEiCisKK0RFUEVORFMgKz0gIiBjb21wb3NpdGVwcm90byB2aXJ0dWFsL2xpYngxMSBsaWJ4Zml4ZXMgbGlieGV4dCIKK1BST1ZJREVTID0gInhjb21wb3NpdGUiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYY29tcG9zaXRlIgorCitTUkNfVVJJICs9ICIgZmlsZTovL2NoYW5nZS1pbmNsdWRlLW9yZGVyLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjdhMjE4ZGNiZjZmMDg0ODU5OWM2YzM2ZmM2NWM1MWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWRlMjUwY2QyMDdkOGJlZTRhMzM4MjY1YzMwMDdkN2E2OGQ1YWNhNzkxYjZhYzQxYWYxOGU5YTJhZWIzNDE3OCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjdXJzb3JfMS4xLjE0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGN1cnNvcl8xLjEuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThlNGYyNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjdXJzb3JfMS4xLjE0LmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiWGN1cnNvcjogWCBDdXJzb3IgbWFuYWdlbWVudCBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJYY3Vyc29yIGlzIGEgc2ltcGxlIGxpYnJhcnkgZGVzaWduZWQgdG8gaGVscCBsb2NhdGUgYW5kIFwKK2xvYWQgY3Vyc29ycy4gQ3Vyc29ycyBjYW4gYmUgbG9hZGVkIGZyb20gZmlsZXMgb3IgbWVtb3J5LiBBIGxpYnJhcnkgb2YgXAorY29tbW9uIGN1cnNvcnMgZXhpc3RzIHdoaWNoIG1hcCB0byB0aGUgc3RhbmRhcmQgWCBjdXJzb3IgbmFtZXMuIEN1cnNvcnMgXAorY2FuIGV4aXN0IGluIHNldmVyYWwgc2l6ZXMgYW5kIHRoZSBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgcGlja3MgdGhlIGJlc3QgXAorc2l6ZS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg5MDJlNjY0M2Y3YmNkNzc5M2IyM2RjZDVkODAzMWE0IgorCitERVBFTkRTICs9ICJsaWJ4cmVuZGVyIGxpYnhmaXhlcyIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhjdXJzb3IiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxZTdjMTdhZmJiY2U4M2UyMjE1OTE3MDQ3YzU3ZDFiMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5YmM2YWNiMjFjYTE0ZGE1MWJkYTViYzkxMmM4OTU1YmM2ZTVlNDMzZjBhYjAwYzVlOGJlZjg0MjU5NmMzM2RmIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGRhbWFnZV8xLjEuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhkYW1hZ2VfMS4xLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNkNzAwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhkYW1hZ2VfMS4xLjQuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJYZGFtYWdlOiBYIERhbWFnZSBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiJ0RhbWFnZScgaXMgYSB0ZXJtIHRoYXQgZGVzY3JpYmVzIGNoYW5nZXMgbWFrZSB0byBwaXhlbCBcCitjb250ZW50cyBvZiB3aW5kb3dzIGFuZCBwaXhtYXBzLiAgRGFtYWdlIGFjY3VtdWxhdGVzIGFzIGRyYXdpbmcgb2NjdXJzIFwKK2luIHRoZSBkcmF3YWJsZS4gIEVhY2ggZHJhd2luZyBvcGVyYXRpb24gJ2RhbWFnZXMnIG9uZSBvciBtb3JlIFwKK3JlY3Rhbmd1bGFyIGFyZWFzIHdpdGhpbiB0aGUgZHJhd2FibGUuICBUaGUgcmVjdGFuZ2xlcyBhcmUgZ3VhcmFudGVlZCB0byBcCitpbmNsdWRlIHRoZSBzZXQgb2YgcGl4ZWxzIG1vZGlmaWVkIGJ5IGVhY2ggb3BlcmF0aW9uLCBidXQgbWF5IGluY2x1ZGUgXAorc2lnbmlmaWNhbnRseSBtb3JlIHRoYW4ganVzdCB0aG9zZSBwaXhlbHMuICBUaGUgREFNQUdFIGV4dGVuc2lvbiBhbGxvd3MgXAorYXBwbGljYXRpb25zIHRvIGVpdGhlciByZWNlaXZlIHRoZSByYXcgcmVjdGFuZ2xlcyBhcyBhIHN0cmVhbSBvZiBldmVudHMsIFwKK29yIHRvIGhhdmUgdGhlbSBwYXJ0aWFsbHkgcHJvY2Vzc2VkIHdpdGhpbiB0aGUgWCBzZXJ2ZXIgdG8gcmVkdWNlIHRoZSBcCithbW91bnQgb2YgZGF0YSB0cmFuc21pdHRlZCBhcyB3ZWxsIGFzIHJlZHVjZSB0aGUgcHJvY2Vzc2luZyBsYXRlbmN5IG9uY2UgXAordGhlIHJlcGFpbnQgb3BlcmF0aW9uIGhhcyBzdGFydGVkLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OWZlMTAxZjMwZGQyNDEzNGNmNDMxNDY4NjMyNDE4NjgiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIGRhbWFnZXByb3RvIGxpYnhmaXhlcyIKK1BST1ZJREVTID0gInhkYW1hZ2UiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYZGFtYWdlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGNmMjkyZGUyYTlmYTJlOWE5MzlhZWZkZTY4ZmQzNGYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2MzZmU3YzY1N2U4MzU0N2Y0ODIyYmZkZTMwYTkwZDg0NTI0ZWZiNTYzNjU0NDg3Njg0MDliNzdmMDUzNTVhZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhkbWNwXzEuMS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGRtY3BfMS4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlMzBkOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhkbWNwXzEuMS4yLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiWERNQ1A6IFggRGlzcGxheSBNYW5hZ2VyIENvbnRyb2wgUHJvdG9jb2wgbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhlIHB1cnBvc2Ugb2YgdGhlIFggRGlzcGxheSBNYW5hZ2VyIENvbnRyb2wgUHJvdG9jb2wgXAorKFhETUNQKSBpcyB0byBwcm92aWRlIGEgdW5pZm9ybSBtZWNoYW5pc20gZm9yIGFuIGF1dG9ub21vdXMgZGlzcGxheSB0byBcCityZXF1ZXN0IGxvZ2luIHNlcnZpY2UgZnJvbSBhIHJlbW90ZSBob3N0LiBBbiBYIHRlcm1pbmFsIChzY3JlZW4sIFwKK2tleWJvYXJkLCBtb3VzZSwgcHJvY2Vzc29yLCBuZXR3b3JrIGludGVyZmFjZSkgaXMgYSBwcmltZSBleGFtcGxlIG9mIGFuIFwKK2F1dG9ub21vdXMgZGlzcGxheS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitpbmhlcml0IGdldHRleHQKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNTU5ZmIyNmUxMjk2MjYwMjJlMDUyYTVlNmUwZTEyMyIKKworREVQRU5EUyArPSAieHByb3RvIgorUFJPVklERVMgPSAieGRtY3AiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWGRtY3AiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjE4YWE1YzEyNzliMDFmOWQxOGUzMjk5OTY5NjY1YjJlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgxZmUwOTg2NzkxOGZmZjI1ODI5NmUxZTFlMTU5ZjBkYzYzOWNiMzBkMjAxYzUzNTE5ZjI1YWI3M2FmNGU0ZTIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2FyYzRdID0gImFjX2N2X2xpYl9ic2RfYXJjNHJhbmRvbV9idWY9eWVzLGFjX2N2X2xpYl9ic2RfYXJjNHJhbmRvbV9idWY9bm8sbGliYnNkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF8xLjMuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhleHRfMS4zLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhOGI2NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhleHRfMS4zLjMuYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJYRXh0OiBYIEV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYZXh0IHByb3ZpZGVzIGFuIFggV2luZG93IFN5c3RlbSBjbGllbnQgaW50ZXJmYWNlIHRvIFwKK3NldmVyYWwgZXh0ZW5zaW9ucyB0byB0aGUgWCBwcm90b2NvbC4gIFRoZSBzdXBwb3J0ZWQgcHJvdG9jb2wgZXh0ZW5zaW9ucyBcCithcmUgRE9VQkxFLUJVRkZFUiwgRFBNUywgRXh0ZW5kZWQtVmlzdWFsLUluZm9ybWF0aW9uLCBMQlgsIE1JVF9TSE0sIFwKK01JVF9TVU5EUlktTk9OU1RBTkRBUkQsIE11bHRpLUJ1ZmZlcmluZywgU0VDVVJJVFksIFNIQVBFLCBTWU5DLCBUT0ctQ1VQLCBcCitYQy1BUFBHUk9VUCwgWEMtTUlTQywgWFRFU1QuICBsaWJYZXh0IGFsc28gcHJvdmlkZXMgYSBzbWFsbCBzZXQgb2YgXAordXRpbGl0eSBmdW5jdGlvbnMgdG8gYWlkIGF1dGhvcnMgb2YgY2xpZW50IEFQSXMgZm9yIFggcHJvdG9jb2wgXAorZXh0ZW5zaW9ucy4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg3OWNlMjY2Nzg1NDE0YmQxY2JjM2JjMmY0ZDlkN2M4IgorCitERVBFTkRTICs9ICJ4cHJvdG8gdmlydHVhbC9saWJ4MTEgeGV4dHByb3RvIGxpYnhhdSBsaWJ4ZG1jcCIKK1BST1ZJREVTID0gInhleHQiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWGV4dCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTJkZjdjNGMxZjBiYWRkOWY4MmFiMTI0ZmIzMmViOTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjUxOGQ0ZDMzMjIzMWYzMTMzNzFmZGVmYWM1OWUzNzc2ZjRmMDgyM2JjYjIzY2Y3YzczMDViZmI1N2IxNmUzNSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhleHRfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc5OTE4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhleHRfZ2l0LmJiCkBAIC0wLDAgKzEsMjQgQEAKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitTVU1NQVJZID0gIlhFeHQ6IFggRXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlhleHQgcHJvdmlkZXMgYW4gWCBXaW5kb3cgU3lzdGVtIGNsaWVudCBpbnRlcmZhY2UgdG8gXAorc2V2ZXJhbCBleHRlbnNpb25zIHRvIHRoZSBYIHByb3RvY29sLiAgVGhlIHN1cHBvcnRlZCBwcm90b2NvbCBleHRlbnNpb25zIFwKK2FyZSBET1VCTEUtQlVGRkVSLCBEUE1TLCBFeHRlbmRlZC1WaXN1YWwtSW5mb3JtYXRpb24sIExCWCwgTUlUX1NITSwgXAorTUlUX1NVTkRSWS1OT05TVEFOREFSRCwgTXVsdGktQnVmZmVyaW5nLCBTRUNVUklUWSwgU0hBUEUsIFNZTkMsIFRPRy1DVVAsIFwKK1hDLUFQUEdST1VQLCBYQy1NSVNDLCBYVEVTVC4gIGxpYlhleHQgYWxzbyBwcm92aWRlcyBhIHNtYWxsIHNldCBvZiBcCit1dGlsaXR5IGZ1bmN0aW9ucyB0byBhaWQgYXV0aG9ycyBvZiBjbGllbnQgQVBJcyBmb3IgWCBwcm90b2NvbCBcCitleHRlbnNpb25zLiIKKworREVQRU5EUyArPSAieHByb3RvIHZpcnR1YWwvbGlieDExIHhleHRwcm90byBsaWJ4YXUgbGlieGRtY3AiCitQUk9WSURFUyA9ICJ4ZXh0IgorU1JDUkVWID0gImQxZjNiYzc3YTQ4YzhlNDI3NzE1NzllM2ZkZjMzNzBiMzVkMzIwOWQiCitQRSA9ICIxIgorUFYgPSAiMS4wLjk5LjErZ2l0ciR7U1JDUFZ9IgorCitYT1JHX1BOID0gImxpYlhleHQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvbGliLyR7WE9SR19QTn0iCitTID0gIiR7V09SS0RJUn0vZ2l0LyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Zml4ZXNfNS4wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Zml4ZXNfNS4wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUyNzQwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmaXhlc181LjAuMS5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIlhGaXhlczogWCBGaXhlcyBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiWCBhcHBsaWNhdGlvbnMgaGF2ZSBvZnRlbiBuZWVkZWQgdG8gd29yayBhcm91bmQgdmFyaW91cyBcCitzaG9ydGNvbWluZ3MgaW4gdGhlIGNvcmUgWCB3aW5kb3cgc3lzdGVtLiAgVGhpcyBleHRlbnNpb24gaXMgZGVzaWduZWQgdG8gXAorcHJvdmlkZSB0aGUgbWluaW1hbCBzZXJ2ZXItc2lkZSBzdXBwb3J0IG5lY2Vzc2FyeSB0byBlbGltaW5hdGUgcHJvYmxlbXMgXAorY2F1c2VkIGJ5IHRoZXNlIHdvcmthcm91bmRzLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2MxY2U0MmMzMzRhNmY1Y2NjYjAyNzc1NTZhMDUzZTAiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIHhwcm90byBmaXhlc3Byb3RvIHhleHRwcm90byIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYZml4ZXMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gImI5ODViODVmOGI5Mzg2Yzg1ZGRjZmUxMDczOTA2YjRkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzYmVjMDg1MDg0ZmEzY2FhZWU1MTgwNDkwZGQ4NzFmMWViMjAyMGJhOWU5YjM5YTMwZjkzNjkzZmZjMzQ3NjciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Zm9udF8xLjUuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmb250XzEuNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNmUzM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Zm9udF8xLjUuMS5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIlhGb250OiBYIEZvbnQgcmFzdGVyaXNhdGlvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYZm9udCBwcm92aWRlcyB2YXJpb3VzIHNlcnZpY2VzIGZvciBYIHNlcnZlcnMsIG1vc3QgXAorbm90YWJseSBmb250IHNlbGVjdGlvbiBhbmQgcmFzdGVyaXNhdGlvbiAodGhyb3VnaCBleHRlcm5hbCBsaWJyYXJpZXMgXAorc3VjaCBhcyBmcmVldHlwZSkuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUgJiBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNDZjODA0MGYyZjczN2JjZDBjNDM1ZmViMmFiMWMyYyIKKworREVQRU5EUyArPSAiZnJlZXR5cGUgeHRyYW5zIGZvbnRzcHJvdG8gbGliZm9udGVuYyB6bGliIgorUFJPVklERVMgPSAieGZvbnQiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWGZvbnQiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTZmNzZiYTk0YjRjOTA5MjMwYmFjMWUyZGNkNTUxYzQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjcwODk4NTI3YzczZjk3NThmNTUxYmJhYjYxMmFmNjExYjhhMDk2MjIwMjgyOTU2OGQ5NGYzZWRmNGQ4NjA5OCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmdF8yLjMuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmdF8yLjMuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTY3Y2RjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZ0XzIuMy4yLmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiWEZ0OiBYIEZyZWVUeXBlIGxpYmFyeSIKKworREVTQ1JJUFRJT04gPSAiWGZ0IHdhcyBkZXNpZ25lZCB0byBwcm92aWRlIGdvb2Qgc3VwcG9ydCBmb3Igc2NhbGFibGUgXAorZm9udHMsIGFuZCB0byBkbyBzbyBlZmZpY2llbnRseS4gIFVubGlrZSB0aGUgY29yZSBmb250cyBzeXN0ZW0sIGl0IFwKK3N1cHBvcnRzIGZlYXR1cmVzIHN1Y2ggYXMgYW50aS1hbGlhc2luZyBhbmQgc3ViLXBpeGVsIHJhc3RlcmlzYXRpb24uIFwKK1BlcmhhcHMgbW9yZSBpbXBvcnRhbnRseSwgaXQgZ2l2ZXMgYXBwbGljYXRpb25zIGZ1bGwgY29udHJvbCBvdmVyIHRoZSBcCit3YXkgZ2x5cGhzIGFyZSByZW5kZXJlZCwgbWFraW5nIGZpbmUgdHlwZXNldHRpbmcgYW5kIFdZU0lXSUcgZGlzcGxheSBcCitwb3NzaWJsZS4gRmluYWxseSwgaXQgYWxsb3dzIGFwcGxpY2F0aW9ucyB0byB1c2UgZm9udHMgdGhhdCBhcmUgbm90IFwKK2luc3RhbGxlZCBzeXN0ZW0td2lkZSBmb3IgZGlzcGxheWluZyBkb2N1bWVudHMgd2l0aCBlbWJlZGRlZCBmb250cy4gIFhmdCBcCitpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBjb3JlIGZvbnRzIHN5c3RlbTogdXNhZ2Ugb2YgWGZ0IHJlcXVpcmVzIFwKK2ZhaXJseSBleHRlbnNpdmUgY2hhbmdlcyB0byB0b29sa2l0cyAodXNlci1pbnRlcmZhY2UgbGlicmFyaWVzKS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTkwYjkwYjYwZWIzMGY2NWZjOWMyNjczZDdjZjU5ZTI0IgorCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4cmVuZGVyIGZyZWV0eXBlIGZvbnRjb25maWciCitQUk9WSURFUyA9ICJ4ZnQiCisKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzMzFiM2EyYTNhMWE3OGI1YjQ0Y2ZiZDQzZjg2ZmNmZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNWEzYzgyNDc2MWRmMzUxY2E5MTgyN2FjMjIxMDkwOTQzZWYyOGIyNDg1NzM0ODYwNTBkZTg5ZjRiZmNkYzRjIgorCitYT1JHX1BOID0gImxpYlhmdCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK3B5dGhvbiAoKSB7CisgICAgICAgIGlmIGQuZ2V0VmFyKCdERUJJQU5fTkFNRVMnLCBUcnVlKToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdQS0dfJHtQTn0nLCAnJHtNTFBSRUZJWH1saWJ4ZnQyJykKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhpXzEuNy40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGlfMS43LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcwMzNhMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhpXzEuNy40LmJiCkBAIC0wLDAgKzEsMjEgQEAKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitTVU1NQVJZID0gIlhJOiBYIElucHV0IGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJ4aSBpcyBhbiBleHRlbnNpb24gdG8gdGhlIFgxMSBwcm90b2NvbCB0byBzdXBwb3J0IFwKK2lucHV0IGRldmljZXMgb3RoZXIgdGhhbiB0aGUgY29yZSBYIGtleWJvYXJkIGFuZCBwb2ludGVyLiAgSXQgYWxsb3dzIFwKK2NsaWVudCBwcm9ncmFtcyB0byBzZWxlY3QgaW5wdXQgZnJvbSB0aGVzZSBkZXZpY2VzIGluZGVwZW5kZW50bHkgZnJvbSBcCitlYWNoIG90aGVyIGFuZCBpbmRlcGVuZGVudGx5IGZyb20gdGhlIGNvcmUgZGV2aWNlcy4iCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTdiMDY0Nzg5ZmFiOTM2YTFjNThjNGUxM2Q5NjViMGYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL1hJR2V0RGV2Rm9jdXMuYztlbmRsaW5lPTIzO21kNT1jZGZiMGQ0MzVhMzNlYzU3ZWEwZDFlOGUzOTViNzI5ZiIKKworREVQRU5EUyArPSAibGlieGV4dCBpbnB1dHByb3RvIGxpYnhmaXhlcyIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYaSIKKworU1JDX1VSSVttZDVzdW1dID0gIjljNGE2OWMzNGIxOWVjMWU0MjEyZTg0OTU0OTU0NGNiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJjZmZjMjY4NjYxOGRjMTgwMzcyNTYzNmNkOTJiMzYzNDJjNTEyZGM2MGE3YTM1Y2JhMzRiZjcxOTJhNDIyNDQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4aW5lcmFtYV8xLjEuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhpbmVyYW1hXzEuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyN2M4MDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4aW5lcmFtYV8xLjEuMy5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYaW5lcmFtYTogWGluZXJhbWEgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlhpbmVyYW1hIGlzIGEgc2ltcGxlIGxpYnJhcnkgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHRoZSBcCitYaW5lcmFtYSBFeHRlbnNpb24gZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gYWJvdXQgcGh5c2ljYWwgb3V0cHV0IFwKK2RldmljZXMgd2hpY2ggbWF5IGJlIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgbG9naWNhbCBYIHNjcmVlbi4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NmY0ZjYzNGQxNjQzYTJlNjM4YmJhM2ZjZDE5YzI1MzYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL1hpbmVyYW1hLmM7YmVnaW5saW5lPTI7ZW5kbGluZT0yNTttZDU9ZmNlZjI3M2JmYjY2MzM5MjU2NDExZGQwNmVhNzljMDIiCisKK0RFUEVORFMgKz0gImxpYnhleHQgeGluZXJhbWFwcm90byIKK1BST1ZJREVTID0gInhpbmVyYW1hIgorUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYaW5lcmFtYSIKKworU1JDX1VSSVttZDVzdW1dID0gIjkzMzZkYzQ2YWUzYmY1ZjgxYzI0N2Y3MTMxNDYxZWZkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdhNDU2OTlmMTc3MzA5NWEzZjgyMWU0OTFjYmQ1ZTEwYzg4N2M1YTVmY2U1ZDhkM2ZjZWQxNWMyZmY3Njk4ZTIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4a2Jjb21tb25fMC41LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4a2Jjb21tb25fMC41LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE2NmI1NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhrYmNvbW1vbl8wLjUuMC5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIkdlbmVyaWMgWEtCIGtleW1hcCBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAibGlieGtiY29tbW9uIGlzIGEga2V5bWFwIGNvbXBpbGVyIGFuZCBzdXBwb3J0IGxpYnJhcnkgd2hpY2ggXAorcHJvY2Vzc2VzIGEgcmVkdWNlZCBzdWJzZXQgb2Yga2V5bWFwcyBhcyBkZWZpbmVkIGJ5IHRoZSBYS0Igc3BlY2lmaWNhdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnhrYmNvbW1vbi5vcmciCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wOTQ1N2IxNTZlMzE1NTk3MmFiZWJjYWFhYTBjYjQzNCIKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorCitERVBFTkRTID0gInV0aWwtbWFjcm9zIGZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8veGtiY29tbW9uLm9yZy9kb3dubG9hZC8ke0JQTn0tJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmUxZmFlYWZjYzYwOWMzMGFmM2E1NjFhOTFlODQxNTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTBiZDc4MjQ3NDJiOWE2ZjUyYTZjZjgwZTJjYWRkNmY1MzQ5Y2Y2MDBhMzU4ZDA4MjYwNzcyNjE1Yjg5ZDE5YyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZG9jcyIKKworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEsLS1kaXNhYmxlLXgxMSxsaWJ4Y2IgeGtleWJvYXJkLWNvbmZpZywiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4a2JmaWxlXzEuMC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGtiZmlsZV8xLjAuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWEzNDRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGtiZmlsZV8xLjAuOS5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlhLQjogWCBLZXlib2FyZCBGaWxlIG1hbmlwdWxhdGlvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJ4a2JmaWxlIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byByZWFkIGFuZCBtYW5pcHVsYXRlIFwKK2Rlc2NyaXB0aW9uIGZpbGVzIGZvciBYS0IsIHRoZSBYMTEga2V5Ym9hcmQgY29uZmlndXJhdGlvbiBleHRlbnNpb24uIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04YmU3MzY3ZjdlNWQ2MDVhNDI2Zjc2YmIzN2Q0ZDYxZiIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEga2Jwcm90byIKKworUEUgPSAiMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0YTRjZmVhZjI0ZGFiMWI5OTE5MDM0NTVkNmQ3ZDQwNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MTgxN2UwNTMwOTYxOTc1ZDk1MTNiNzczOTYwYjRlZGQyNzVmN2Q1YzcyMjkzZDVhMTUxZWQ0ZjQyYWViMTZhIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieG11XzEuMS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieG11XzEuMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwM2JhZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4bXVfMS4xLjIuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJYbXUgYW5kIFhtdXU6IFggTWlzY2VsbGFuZW91cyBVdGlsaXR5IGxpYnJhcmllcyIKKworREVTQ1JJUFRJT04gPSAiVGhlIFhtdSBMaWJyYXJ5IGlzIGEgY29sbGVjdGlvbiBvZiBtaXNjZWxsYW5lb3VzIChzb21lIFwKK21pZ2h0IHNheSByYW5kb20pIHV0aWxpdHkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHVzZWZ1bCBpbiBidWlsZGluZyBcCit2YXJpb3VzIGFwcGxpY2F0aW9ucyBhbmQgd2lkZ2V0cy4gVGhpcyBsaWJyYXJ5IGlzIHJlcXVpcmVkIGJ5IHRoZSBBdGhlbmEgXAorV2lkZ2V0cy4gQSBzdWJzZXQgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGRvIG5vdCByZWx5IG9uIHRoZSBBdGhlbmEgXAorV2lkZ2V0cyAobGliWGF3KSBvciBYIFRvb2xraXQgSW5zdHJpbnNpY3MgKGxpYlh0KSBhcmUgcHJvdmlkZWQgaW4gYSBcCitzZWNvbmQgbGlicmFyeSwgbGliWG11dS4iCisKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGVmM2Q4ZTRlOWM0MjAwNGYxOTQxZmEyMmYwMWRjMTgiCisKK0RFUEVORFMgKz0gImxpYnh0IGxpYnhleHQiCitQUk9WSURFUyA9ICJ4bXUiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWG11IgorCitMRUFEX1NPTkFNRSA9ICJsaWJYbXUiCisKK1BBQ0tBR0VTID0rICJsaWJ4bXV1IgorCitGSUxFU19saWJ4bXV1ID0gIiR7bGliZGlyfS9saWJYbXV1LnNvLioiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDFkOTJhYjYyN2RmYTA2NTY4MDc2MDQzZjNlMDg5ZTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzU2ZWRjN2MzODMyNTRlZWY4YjRlMWI3MzNjM2JmMWRjMDYxYjUyM2M5Zjk4MzNhYzcwNTgzNzhiODM0OWQwYiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhwbV8zLjUuMTEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cG1fMy41LjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTg3NGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cG1fMy41LjExLmJiCkBAIC0wLDAgKzEsMjcgQEAKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCisjIGxpYnhwbSByZXF1aXJlcyB4Z2V0dGV4dCB0byBidWlsZAoraW5oZXJpdCBnZXR0ZXh0CisKK1NVTU1BUlkgPSAiWHBtOiBYIFBpeG1hcCBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGliWHBtIHByb3ZpZGVzIHN1cHBvcnQgYW5kIGNvbW1vbiBvcGVyYXRpb24gZm9yIHRoZSBYUE0gXAorcGl4bWFwIGZvcm1hdCwgd2hpY2ggaXMgY29tbW9ubHkgdXNlZCBpbiBsZWdhY3kgWCBhcHBsaWNhdGlvbnMuICBYUE0gaXMgXAorYW4gZXh0ZW5zaW9uIG9mIHRoZSBtb25vY2hyb21lIFhCTSBiaXRtYXAgc3BlY2lmaWNpZWQgaW4gdGhlIFggXAorcHJvdG9jb2wuIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTUxZjQyNzBiMDEyZWNkNGFiMWExNjRmNWY0ZWQ2Y2Y3IgorREVQRU5EUyArPSAibGlieGV4dCBsaWJzbSBsaWJ4dCIKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHBtIgorCitQQUNLQUdFUyA9KyAic3hwbSBjeHBtIgorRklMRVNfY3hwbSA9ICIke2JpbmRpcn0vY3hwbSIKK0ZJTEVTX3N4cG0gPSAiJHtiaW5kaXJ9L3N4cG0iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3NjllZTEyYTQzNjExY2RlYmQzODA5NGVhZjgzZjNmMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNWJkYWZhNTFkMWFlMzAwODZmYWMwMWFiODNiZThkNDdmZTExN2IyMzhkMzQzN2Y4ZTk2NTQzNDA5MGUwNDFjIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyYW5kcl8xLjUuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyYW5kcl8xLjUuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmJiYWU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJhbmRyXzEuNS4wLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiWFJhbmRSOiBYIFJlc2l6ZSwgUm90YXRlIGFuZCBSZWZsZWN0IGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgWCBSZXNpemUsIFJvdGF0ZSBhbmQgUmVmbGVjdCBFeHRlbnNpb24sIGNhbGxlZCBSYW5kUiBcCitmb3Igc2hvcnQsIGJyaW5ncyB0aGUgYWJpbGl0eSB0byByZXNpemUsIHJvdGF0ZSBhbmQgcmVmbGVjdCB0aGUgcm9vdCBcCit3aW5kb3cgb2YgYSBzY3JlZW4uIEl0IGlzIGJhc2VkIG9uIHRoZSBYIFJlc2l6ZSBhbmQgUm90YXRlIEV4dGVuc2lvbiBhcyBcCitzcGVjaWZpZWQgaW4gdGhlIFByb2NlZWRpbmdzIG9mIHRoZSAyMDAxIFVzZW5peCBUZWNobmljYWwgQ29uZmVyZW5jZSBcCitbUkFORFJdLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzlkMWEyMTE4YTZjZDU3Mjc1MjFkYjhlN2EyZmVlNjkiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIHJhbmRycHJvdG8gbGlieHJlbmRlciBsaWJ4ZXh0IgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhyYW5kciIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzA5NzYyODY3ZTQxYzZmZDgxM2RhODgwZDhhMWJjOTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNmY4NjQ5NTliN2ZjMzVkYjExNzU0YjI3MGQ3MTEwNmVmNWI1Y2YzNjM0MjZhYTU4NTg5Y2I4YWM4MjY2ZGU1OCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZW5kZXJfMC45LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cmVuZGVyXzAuOS45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZGUwNDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cmVuZGVyXzAuOS45LmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiWFJlbmRlcjogWCBSZW5kZXJpbmcgRXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBYIFJlbmRlcmluZyBFeHRlbnNpb24gKFJlbmRlcikgaW50cm9kdWNlcyBkaWdpdGFsIFwKK2ltYWdlIGNvbXBvc2l0aW9uIGFzIHRoZSBmb3VuZGF0aW9uIG9mIGEgbmV3IHJlbmRlcmluZyBtb2RlbCB3aXRoaW4gdGhlIFwKK1ggV2luZG93IFN5c3RlbS4gUmVuZGVyaW5nIGdlb21ldHJpYyBmaWd1cmVzIGlzIGFjY29tcGxpc2hlZCBieSBcCitjbGllbnQtc2lkZSB0ZXNzZWxsYXRpb24gaW50byBlaXRoZXIgdHJpYW5nbGVzIG9yIHRyYXBlem9pZHMuICBUZXh0IGlzIFwKK2RyYXduIGJ5IGxvYWRpbmcgZ2x5cGhzIGludG8gdGhlIHNlcnZlciBhbmQgcmVuZGVyaW5nIHNldHMgb2YgdGhlbS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ4YmM3MTk4NmQzYjliMzYzOWY2ZGZkNmZhYzhmMTk2IgorCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSByZW5kZXJwcm90byB4cHJvdG8geGRtY3AiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHJlbmRlciIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWRiOTI5NjJiMTI0Y2EzYTgxNDdkYWFlNGFkYmQ2MjIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmMyZmU1Nzk4MGExNDA5MjQyNmRmZmNkMWYyZDlkZTA5ODdiOWQ0MGFkZWE2NjNiZDcwZDYzNDJjMGU5YmUxYSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZXNfMS4wLjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cmVzXzEuMC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMDRjNDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cmVzXzEuMC43LmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiWFJlczogWCBSZXNvdXJjZSBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGliWFJlcyBwcm92aWRlcyBhbiBYIFdpbmRvdyBTeXN0ZW0gY2xpZW50IGludGVyZmFjZSB0byBcCit0aGUgUmVzb3VyY2UgZXh0ZW5zaW9uIHRvIHRoZSBYIHByb3RvY29sLiAgVGhlIFJlc291cmNlIGV4dGVuc2lvbiBhbGxvd3MgXAorZm9yIFggY2xpZW50cyB0byBzZWUgYW5kIG1vbml0b3IgdGhlIFggcmVzb3VyY2UgdXNhZ2Ugb2YgdmFyaW91cyBjbGllbnRzIFwKKyhwaXhtYXBzLCBldCBhbCkuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Yzg5NDQxYThkZjI2MWJkYzU2NTg3NDY1ZTEzYzdmYSIKKworREVQRU5EUyArPSAibGlieGV4dCByZXNvdXJjZXByb3RvIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhyZXMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NWVmMjkyMDZhNmI1ODI1NGM4MWJlYTI4ZWM2Yzk1ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNjg5OTA1NGFhODdmODFiMTdiZWNjNjhlODY0NWIyNDBmMTQwNDY0Y2Y5MGM0MjYxNmViYjI2M2VjNWZhMGU1IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHNjcm5zYXZlcl8xLjIuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhzY3Juc2F2ZXJfMS4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU0ZTVkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhzY3Juc2F2ZXJfMS4yLjIuYmIKQEAgLTAsMCArMSwyMyBAQAorcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWHNjcm5zYXZlcjogWCBTY3JlZW4gU2F2ZXIgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBYIFdpbmRvdyBTeXN0ZW0gcHJvdmlkZXMgc3VwcG9ydCBmb3IgY2hhbmdpbmcgdGhlIFwKK2ltYWdlIG9uIGEgZGlzcGxheSBzY3JlZW4gYWZ0ZXIgYSB1c2VyLXNldHRhYmxlIHBlcmlvZCBvZiBpbmFjdGl2aXR5IHRvIFwKK2F2b2lkIGJ1cm5pbmcgdGhlIGNhdGhvZGUgcmF5IHR1YmUgcGhvc3Bob3JzLiBIb3dldmVyLCBubyBpbnRlcmZhY2VzIGFyZSBcCitwcm92aWRlZCBmb3IgdGhlIHVzZXIgdG8gY29udHJvbCB0aGUgaW1hZ2UgdGhhdCBpcyBkcmF3bi4gVGhpcyBleHRlbnNpb24gXAorYWxsb3dzIGFuIGV4dGVybmFsIFwic2NyZWVuIHNhdmVyXCIgY2xpZW50IHRvIGRldGVjdCB3aGVuIHRoZSBhbHRlcm5hdGUgXAoraW1hZ2UgaXMgdG8gYmUgZGlzcGxheWVkIGFuZCB0byBwcm92aWRlIHRoZSBncmFwaGljcy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjFmZDE1NGVlNzU3ODEzNjMyYWRhODcxYTM0MTEzZmIiCisKK0RFUEVORFMgKz0gImxpYnhleHQgc2NybnNhdmVycHJvdG8iCitQUk9WSURFUyA9ICJsaWJ4c3MiCitSUkVQTEFDRVNfJHtQTn0gPSAibGlieHNzIgorUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYU2NyblNhdmVyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2E3NzNiMTYxNjVlMzllOTM4NjUwYmNjOTAyN2MxZDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGZmMWVmYTczNDFjN2YzNGJjZjliMTdjODk2NDhkNjMyNWRkYWFlMjJlMzkwNGUwOTE3OTRlMGI0NDI2Y2UxZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhzaG1mZW5jZV8xLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4c2htZmVuY2VfMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMzRiMWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4c2htZmVuY2VfMS4yLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiU2hhcmVkIG1lbW9yeSAnU3luY0ZlbmNlJyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlIgorCitERVNDUklQVElPTiA9ICJUaGlzIGxpYnJhcnkgb2ZmZXJzIGEgQ1BVLWJhc2VkIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUgY29tcGF0aWJsZSBcCit3aXRoIHRoZSBYIFN5bmNGZW5jZSBvYmplY3RzIHRoYXQgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3NlcyBcCit1c2luZyBmaWxlIGRlc2NyaXB0b3IgcGFzc2luZy4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQ3ZTUwOGNhMjgwZmRlOTc5MDZlYWNiNzc4OTJjM2FjIgorCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjY2NjJlNzY4OTkxMTJjMGY5OWUyMmYyZmM3NzVhN2UiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDIxYjJkMWZkNzhjMWVmYmUxZjJjMTZkYWUxY2IyM2Y4ZmQyMzFkY2Y4OTE0NjViOGRlYmU2MzZhOTA1NGIwYyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0L2xpYnh0X2ZpeF9mb3JfeDMyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHQvbGlieHRfZml4X2Zvcl94MzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U2Yzc1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0L2xpYnh0X2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGlzIGZpeGVzIGNvbXBpbGF0aW9uIHdpdGggeDMyIHRvb2xjaGFpbi4KKworUmVjZWl2ZWQgdGhpcyBwYXRjaCBmcm9tIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzEKKworCistLS0gbGliWHQtMS4xLjEvaW5jbHVkZS9YMTEvWHRvcy5oLngzMgkyMDExLTAyLTA4IDA3OjU2OjQwLjAwMDAwMDAwMCAtMDgwMAorKysrIGxpYlh0LTEuMS4xL2luY2x1ZGUvWDExL1h0b3MuaAkyMDExLTExLTMwIDE3OjE5OjI3LjQ3MzM0OTc3MCAtMDgwMAorQEAgLTYyLDcgKzYyLDcgQEAgU09GVFdBUkUuCisgICAgIGRlZmluZWQoX19zcGFyYzY0X18pIHx8IFwKKyAgICAgZGVmaW5lZChfX3MzOTB4X18pIHx8IFwKKyAgICAgKGRlZmluZWQoX19ocHBhX18pICYmIGRlZmluZWQoX19MUDY0X18pKSB8fCBcCistICAgIGRlZmluZWQoX19hbWQ2NF9fKSB8fCBkZWZpbmVkKGFtZDY0KSB8fCBcCisrICAgICgoZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQoYW1kNjQpKSAmJiBkZWZpbmVkKF9fTFA2NF9fKSkgfHwgXAorICAgICBkZWZpbmVkKF9fcG93ZXJwYzY0X18pIHx8IFwKKyAgICAgKGRlZmluZWQoc2dpKSAmJiAoX01JUFNfU1pMT05HID09IDY0KSkKKyAjZGVmaW5lIExPTkc2NApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHRfMS4xLjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dF8xLjEuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWVkMGJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHRfMS4xLjUuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJYdDogWCBUb29sa2l0IEludHJpbnNpY3MgbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhlIEludHJpbnNpY3MgYXJlIGEgcHJvZ3JhbW1pbmcgbGlicmFyeSB0YWlsb3JlZCB0byB0aGUgXAorc3BlY2lhbCByZXF1aXJlbWVudHMgb2YgdXNlciBpbnRlcmZhY2UgY29uc3RydWN0aW9uIHdpdGhpbiBhIG5ldHdvcmsgXAord2luZG93IHN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBYIFdpbmRvdyBTeXN0ZW0uIFRoZSBJbnRyaW5zaWNzIGFuZCBhIFwKK3dpZGdldCBzZXQgbWFrZSB1cCBhbiBYIFRvb2xraXQuIFRoZSBJbnRyaW5zaWNzIHByb3ZpZGUgdGhlIGJhc2UgXAorbWVjaGFuaXNtIG5lY2Vzc2FyeSB0byBidWlsZCBhIHdpZGUgdmFyaWV0eSBvZiBpbnRlcm9wZXJhdGluZyB3aWRnZXQgXAorc2V0cyBhbmQgYXBwbGljYXRpb24gZW52aXJvbm1lbnRzLiBUaGUgSW50cmluc2ljcyBhcmUgYSBsYXllciBvbiB0b3Agb2YgXAorWGxpYiwgdGhlIEMgTGlicmFyeSBYIEludGVyZmFjZS4gVGhleSBleHRlbmQgdGhlIGZ1bmRhbWVudGFsIFwKK2Fic3RyYWN0aW9ucyBwcm92aWRlZCBieSB0aGUgWCBXaW5kb3cgU3lzdGVtIHdoaWxlIHN0aWxsIHJlbWFpbmluZyBcCitpbmRlcGVuZGVudCBvZiBhbnkgcGFydGljdWxhciB1c2VyIGludGVyZmFjZSBwb2xpY3kgb3Igc3R5bGUuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NTY1YjFlMDA5NGVhMWNhYWUwOTcxY2M0MDM1ZjM0MyIKKworCitERVBFTkRTICs9ICJ1dGlsLWxpbnV4IGxpYnhjYiBsaWJzbSB2aXJ0dWFsL2xpYngxMSBrYnByb3RvIGxpYnhkbWNwIgorUFJPVklERVMgPSAieHQiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHQiCisKK1NSQ19VUkkgKz0gICJmaWxlOi8vbGlieHRfZml4X2Zvcl94MzIucGF0Y2giCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS14a2IiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ZjViNTU3NmZiYWJiYTI5YTA1ZjNjYTIyMjZmNzRkMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NmVlYjZiZTc4MDIxMWZkZDk4YzUxMDkyODY2MThmNjcwNzcxMjIzNWZkZDE5ZGY0Y2UxZTY5NTRmMzQ5ZjFhIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHRzdF8xLjIuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0c3RfMS4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwYmNmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0c3RfMS4yLjIuYmIKQEAgLTAsMCArMSwyMCBAQAorcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWFRlc3Q6IFggVGVzdCBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBleHRlbnNpb24gaXMgYSBtaW5pbWFsIHNldCBvZiBjbGllbnQgYW5kIHNlcnZlciBcCitleHRlbnNpb25zIHJlcXVpcmVkIHRvIGNvbXBsZXRlbHkgdGVzdCB0aGUgWDExIHNlcnZlciB3aXRoIG5vIHVzZXIgXAoraW50ZXJ2ZW50aW9uLiIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iYjRmODk5NzJjMzg2OWY2MTdmNjFjMWE3OWFkMTk1MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvWFRlc3QuYztiZWdpbmxpbmU9MjtlbmRsaW5lPTMyO21kNT1iMWM4YzlkZmY4NDJiNGQ1Yjg5Y2E1ZmEzMmM0MGU5OSIKKworREVQRU5EUyArPSAibGlieGV4dCByZWNvcmRwcm90byBpbnB1dHByb3RvIGxpYnhpIgorUFJPVklERVMgPSAieHRzdCIKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHRzdCIKKworU1JDX1VSSVttZDVzdW1dID0gIjI1YzZiMzY2YWMzZGM3YTEyYzVkNzk4MTZjZTk2YTU5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVmMGE3ZmZkNTc3ZTVmMWEyNWIxNjYzYjM3NTY3OTUyOTY2M2ExODgwMTUxYmVhYTczZTkxODZjODMwOWY2ZDkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dl8xLjAuMTAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dl8xLjAuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyYjhiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh2XzEuMC4xMC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlh2OiBYIFZpZGVvIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYdiBwcm92aWRlcyBhbiBYIFdpbmRvdyBTeXN0ZW0gY2xpZW50IGludGVyZmFjZSB0byB0aGUgXAorWCBWaWRlbyBleHRlbnNpb24gdG8gdGhlIFggcHJvdG9jb2wuIFRoZSBYIFZpZGVvIGV4dGVuc2lvbiBhbGxvd3MgZm9yIFwKK2FjY2VsZXJhdGVkIGRyYXdpbmcgb2YgdmlkZW9zLiAgSGFyZHdhcmUgYWRhcHRvcnMgYXJlIGV4cG9zZWQgdG8gXAorY2xpZW50cywgd2hpY2ggbWF5IGRyYXcgaW4gYSBudW1iZXIgb2YgY29sb3Vyc3BhY2VzLCBpbmNsdWRpbmcgWVVWLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODI3ZGE5YWZhYjFmNzI3ZjJhNjY1NzQ2MjllMGYzOWMiCisKK0RFUEVORFMgKz0gImxpYnhleHQgdmlkZW9wcm90byIKKworWE9SR19QTiA9ICJsaWJYdiIKKworU1JDX1VSSVttZDVzdW1dID0gImUwYWY0OWQ3ZDc1OGI5OTBlNmZlZjYyOTcyMmQ0YWNhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU1ZmU5MmY4Njg2Y2U4NjEyZTJjMWJmYWY1OGMwNTc3MTU1MzQ0MTlkYTcwMGJkYThkNTE3YjFkOTc5MTQ1MjUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dm1jXzEuMC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHZtY18xLjAuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWU4NDk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHZtY18xLjAuOS5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIlh2TUM6IFggVmlkZW8gTW90aW9uIENvbXBlbnNhdGlvbiBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiWHZNQyBleHRlbmRzIHRoZSBYIFZpZGVvIGV4dGVuc2lvbiAoWHYpIGFuZCBlbmFibGVzIFwKK2hhcmR3YXJlIHJlbmRlcmVkIG1vdGlvbiBjb21wZW5zYXRpb24gc3VwcG9ydC4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTBhMjA3ZjA4ZDQ5NjE0ODljNTUwNDZjOWE1ZTUwMGRhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3dyYXBwZXIvWHZNQ1dyYXBwZXIuYztlbmRsaW5lPTI2O21kNT01MTUxZGFhODE3MmEzZjFiYjBjYjBlMGZmMTU3ZDlkZSIKKworREVQRU5EUyArPSAibGlieGV4dCBsaWJ4diB2aWRlb3Byb3RvIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlh2TUMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlYmE2YjczOGVkNWZkY2Q4ZjQyMDNkN2M4YTQ3MGM3OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNzAzZDdkZmY2ZmZjMTg0ZjE3MzVjYTVkNGViOWRiYjQwMmI1MjJlMDhlMDA4ZjJmOTZhZWUxNmM0MGE1NzU2IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHhmODZkZ2FfMS4xLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4eGY4NmRnYV8xLjEuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTVhMzk2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHhmODZkZ2FfMS4xLjQuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEZyZWU4Ni1ER0E6IFhGcmVlODYgRGlyZWN0IEdyYXBoaWNzIEFjY2VzcyBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGliWHhmODZkZ2EgcHJvdmlkZXMgdGhlIFhGcmVlODYtREdBIGV4dGVuc2lvbiwgd2hpY2ggXAorYWxsb3dzIGRpcmVjdCBncmFwaGljcyBhY2Nlc3MgdG8gYSBmcmFtZWJ1ZmZlci1saWtlIHJlZ2lvbiwgYW5kIGFsc28gXAorYWxsb3dzIHJlbGF0aXZlIG1vdXNlIHJlcG9ydGluZywgZXQgYWwuICBJdCBpcyBtYWlubHkgdXNlZCBieSBnYW1lcyBhbmQgXAorZW11bGF0b3JzIGZvciBnYW1lcy4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWFiYjk5YWMxMjVmODRmNDI0YTQyNzgxNTM5ODhlMzJmIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IHhmODZkZ2Fwcm90byIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImQ3ZGQ5YjlkZjMzNmI3ZGQ0MDI4YjZiNTY1NDJmZjJjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhlZWNkNGI2YzFkZjlhMzcwNGMwNDczM2MyZjRmYTkzZWY0NjliNTUwMjhhZjU1MTBiMjU4MThlMjQ1NmM3N2UiCisKK1hPUkdfUE4gPSAibGliWHhmODZkZ2EiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4eGY4Nm1pc2NfMS4wLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4eGY4Nm1pc2NfMS4wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY2ZjFmNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2bWlzY18xLjAuMy5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIlhGcmVlODYtTWlzYzogWEZyZWU4NiBtaXNjZWxsYW5lb3VzIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgWEZyZWU4Ni1NaXNjIGV4dGVuc2lvbiwgcHJvdmlkZXMgYSBtZWFucyB0byBhY2Nlc3MgXAoraW5wdXQgZGV2aWNlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgc3BlY2lmaWMgdG8gdGhlIFhGcmVlODYvWG9yZyBERFguIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yN2M5MWVjYzQzNWJkM2QyYmZhZDg2ODkxNGM5NGI0NSIKKworREVQRU5EUyArPSAibGlieGV4dCB4Zjg2bWlzY3Byb3RvIgorUFJPVklERVMgPSAieHhmODZtaXNjIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlh4Zjg2bWlzYyIKKworU1JDX1VSSVttZDVzdW1dID0gIjZiYzBiZjc4OTA5ZmQ3MTAyMWM0NjZjNzkzZDQzODVjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU2M2Y0MjAwODYyZWZkMzMzNGMzM2E2NjllMGEwYWFlNWJhYjMxZjM5OThkYjc1Yjg3YTk5YTY5N2NjMjZiNWIiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2dm1fMS4xLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4eGY4NnZtXzEuMS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1Zjg3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4eGY4NnZtXzEuMS40LmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiWEZyZWU4Ni1WTTogWEZyZWU4NiB2aWRlbyBtb2RlIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYeGY4NnZtIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byB0aGUgXAorWEZyZWU4Ni1WaWRNb2RlRXh0ZW5zaW9uIGV4dGVuc2lvbiwgd2hpY2ggYWxsb3dzIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gXAorZ2V0IGFuZCBzZXQgdmlkZW8gbW9kZSB0aW1pbmdzIGluIGV4dGVuc2l2ZSBkZXRhaWwuICBJdCBpcyB1c2VkIGJ5IHRoZSBcCit4dmlkdHVuZSBwcm9ncmFtIGluIHBhcnRpY3VsYXIuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mYTBiOWM0NjJkOGYyZjEzZWJhMjY0OTJkNDJlYTYzZCIKKworREVQRU5EUyArPSAibGlieGV4dCB4Zjg2dmlkbW9kZXByb3RvIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlh4Zjg2dm0iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyOThiOGZmZjgyZGYxNzMwNGRmZGI1ZmU0MDY2ZmUzYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhZmVlMjdmOTNjNWYzMWMwYWQ1ODI4NTJjMGZiMzZkNTBlNGRlN2NkNTg1ZmNmNjU1ZTI3OGE2MzNkODVjZDU3IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuLzAwMDEtQVJNLXFlbXUtcmVsYXRlZC13b3JrYXJvdW5kcy1pbi1jcHUtZmVhdHVyZXMtZGV0ZWN0aS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi8wMDAxLUFSTS1xZW11LXJlbGF0ZWQtd29ya2Fyb3VuZHMtaW4tY3B1LWZlYXR1cmVzLWRldGVjdGkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU2OWRjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi8wMDAxLUFSTS1xZW11LXJlbGF0ZWQtd29ya2Fyb3VuZHMtaW4tY3B1LWZlYXR1cmVzLWRldGVjdGkucGF0Y2gKQEAgLTAsMCArMSwxNDQgQEAKK0Zyb20gYTBmNTNlMWRiYjM4NTFiYjBmMGVmY2ZkYmQ1NjViMDVlNGJlOWNhYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyZWFzPTIwTT1DMz1CQ2xsZXI/PSA8c2Nobml0emVsdG9ueUBnb29nbGVtYWlsLmNvbT4KK0RhdGU6IFRodSwgMjMgQXVnIDIwMTIgMTg6MTA6NTcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIEFSTTogcWVtdSByZWxhdGVkIHdvcmthcm91bmRzIGluIGNwdSBmZWF0dXJlcyBkZXRlY3Rpb24KKyBjb2RlCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1RoaXMgd2FzIHBvcnRlZCBmcm9tIG1ldGEtb2UncyBwYXRjaCBbMV0uIFRoZSBvcmlnaW5hbCBwaXhtYW4gcGF0Y2ggaXMgZm91bmQKK2F0IFsyXS4KKworWzFdIGh0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvbWV0YS1vcGVuZW1iZWRkZWQvdHJlZS9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuLTAuMjYuMi8wMDAxLUFSTS1xZW11LXJlbGF0ZWQtd29ya2Fyb3VuZHMtaW4tY3B1LWZlYXR1cmVzLWRldGVjdGkucGF0Y2gKK1syXSBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL2FyY2hpdmVzL3BpeG1hbi8yMDExLUphbnVhcnkvMDAwOTA2Lmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0gcWVtdSBmaXgKKworU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBNw7xsbGVyIDxzY2huaXR6ZWx0b255QGdvb2dsZW1haWwuY29tPgorLS0tCisgcGl4bWFuL3BpeG1hbi1hcm0uYyB8ICAgODIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDY1IGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcGl4bWFuL3BpeG1hbi1hcm0uYyBiL3BpeG1hbi9waXhtYW4tYXJtLmMKK2luZGV4IDIzMzc0ZTQuLmQ5OGJkYTYgMTAwNjQ0CistLS0gYS9waXhtYW4vcGl4bWFuLWFybS5jCisrKysgYi9waXhtYW4vcGl4bWFuLWFybS5jCitAQCAtMTI5LDE2ICsxMjksMzUgQEAgZGV0ZWN0X2NwdV9mZWF0dXJlcyAodm9pZCkKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisrI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxlbGYuaD4KKyAKKysvKgorKyAqIFRoZSB3aG9sZSBDUFUgY2FwYWJpbGl0aWVzIGRldGVjdGlvbiBpcyBhIGJpdCB1Z2x5OiB3aGVuIHJ1bm5pbmcgaW4KKysgKiB1c2Vyc3BhY2UgcWVtdSwgd2Ugc2VlIC9wcm9jL3NlbGYvYXV4diBmcm9tIHRoZSBob3N0IHN5c3RlbS4gVG8gbWFrZQorKyAqIGV2ZXJ5dGhpbmcgZXZlbiB3b3JzZSwgdGhlIHNpemUgb2YgZWFjaCB2YWx1ZSBpcyA2NC1iaXQgd2hlbiBydW5uaW5nCisrICogb24gYSA2NC1iaXQgaG9zdCBzeXN0ZW0uIFNvIHRoZSBkYXRhIGlzIHRvdGFsbHkgYm9ndXMgYmVjYXVzZSB3ZSBleHBlY3QKKysgKiAzMi1iaXQgdmFsdWVzLiBBcyBBVF9QTEFURk9STSB2YWx1ZSBpcyB1c2VkIGFzIGEgcG9pbnRlciwgaXQgbWF5IGNhdXNlCisrICogc2VnZmF1bHQgKG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiB4ODYtNjQgaG9zdCkuIFNvIGluIG9yZGVyIHRvIGJlCisrICogb24gYSBzYWZlIHNpZGUsIHdlIHJlcXVpcmUgdGhhdCBBVF9QTEFURk9STSB2YWx1ZSBpcyBmb3VuZCBvbmx5IG9uY2UsCisrICogYW5kIGl0IGhhcyBub24temVybyB2YWx1ZSAodGhpcyBpcyBzdGlsbCBub3QgdG90YWxseSByZWxpYWJsZSBmb3IgYSBiaWcKKysgKiBlbmRpYW4gNjQtYml0IGhvc3Qgc3lzdGVtIHJ1bm5pbmcgcWVtdSBhbmQgbWF5IHRoZW9yZXRpY2FsbHkgZmFpbCkuCisrICovCisrI2RlZmluZSBBUk1fSFdDQVBfVkZQIDY0CisrI2RlZmluZSBBUk1fSFdDQVBfSVdNTVhUIDUxMgorKyNkZWZpbmUgQVJNX0hXQ0FQX05FT04gNDA5NgorKworIHN0YXRpYyBhcm1fY3B1X2ZlYXR1cmVzX3QKKyBkZXRlY3RfY3B1X2ZlYXR1cmVzICh2b2lkKQorIHsKKyAgICAgYXJtX2NwdV9mZWF0dXJlc190IGZlYXR1cmVzID0gMDsKKyAgICAgRWxmMzJfYXV4dl90IGF1eDsKKyAgICAgaW50IGZkOworKyAgICB1aW50MzJfdCBod2NhcCA9IDA7CisrICAgIGNvbnN0IGNoYXIgKnBsYXQgPSBOVUxMOworKyAgICBpbnQgcGxhdF9jbnQgPSAwOworIAorICAgICBmZCA9IG9wZW4gKCIvcHJvYy9zZWxmL2F1eHYiLCBPX1JET05MWSk7CisgICAgIGlmIChmZCA+PSAwKQorQEAgLTE0NywzMiArMTY2LDYxIEBAIGRldGVjdF9jcHVfZmVhdHVyZXMgKHZvaWQpCisgCXsKKyAJICAgIGlmIChhdXguYV90eXBlID09IEFUX0hXQ0FQKQorIAkgICAgeworLQkJdWludDMyX3QgaHdjYXAgPSBhdXguYV91bi5hX3ZhbDsKKy0KKy0JCS8qIGhhcmRjb2RlIHRoZXNlIHZhbHVlcyB0byBhdm9pZCBkZXBlbmRpbmcgb24gc3BlY2lmaWMKKy0JCSAqIHZlcnNpb25zIG9mIHRoZSBod2NhcCBoZWFkZXIsIGUuZy4gSFdDQVBfTkVPTgorLQkJICovCistCQlpZiAoKGh3Y2FwICYgNjQpICE9IDApCistCQkgICAgZmVhdHVyZXMgfD0gQVJNX1ZGUDsKKy0JCWlmICgoaHdjYXAgJiA1MTIpICE9IDApCistCQkgICAgZmVhdHVyZXMgfD0gQVJNX0lXTU1YVDsKKy0JCS8qIHRoaXMgZmxhZyBpcyBvbmx5IHByZXNlbnQgb24ga2VybmVsIDIuNi4yOSAqLworLQkJaWYgKChod2NhcCAmIDQwOTYpICE9IDApCistCQkgICAgZmVhdHVyZXMgfD0gQVJNX05FT047CisrCQlod2NhcCA9IGF1eC5hX3VuLmFfdmFsOworIAkgICAgfQorIAkgICAgZWxzZSBpZiAoYXV4LmFfdHlwZSA9PSBBVF9QTEFURk9STSkKKyAJICAgIHsKKy0JCWNvbnN0IGNoYXIgKnBsYXQgPSAoY29uc3QgY2hhciopIGF1eC5hX3VuLmFfdmFsOworLQorLQkJaWYgKHN0cm5jbXAgKHBsYXQsICJ2N2wiLCAzKSA9PSAwKQorKwkJcGxhdCA9IChjb25zdCBjaGFyKikgYXV4LmFfdW4uYV92YWw7CisrCQlwbGF0X2NudCsrOworKwkgICAgfQorKwl9CisrCWNsb3NlIChmZCk7CisrCWlmIChwbGF0ID09IE5VTEwgfHwgcGxhdF9jbnQgIT0gMSB8fCAqcGxhdCAhPSAndicpCisrCXsKKysJICAgIC8qCisrCSAgICAgKiBTb21ldGhpbmcgc2VlbXMgdG8gYmUgcmVhbGx5IHdyb25nLCBtb3N0IGxpa2VseSB3ZSBhcmUKKysJICAgICAqIHJ1bm5pbmcgdW5kZXIgcWVtdS4gTGV0J3MgdXNlIG1hY2hpbmUgdHlwZSBmcm9tICJ1bmFtZSIgZm9yCisrCSAgICAgKiBDUFUgY2FwYWJpbGl0aWVzIGRldGVjdGlvbjoKKysJICAgICAqIGh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9xZW11LWRldmVsIGF0IG5vbmdudS5vcmcvbXNnMjIyMTIuaHRtbAorKwkgICAgICovCisrCSAgICBzdHJ1Y3QgdXRzbmFtZSB1OworKwkgICAgaHdjYXAgPSAwOyAvKiBjbGVhciBod2NhcCwgYmVjYXVzZSBpdCBpcyBib2d1cyAqLworKwkgICAgaWYgKHVuYW1lICgmdSkgPT0gMCkKKysJICAgIHsKKysJCWlmIChzdHJjbXAgKHUubWFjaGluZSwgImFybXY3bCIpID09IDApCisrCQl7CisgCQkgICAgZmVhdHVyZXMgfD0gKEFSTV9WNyB8IEFSTV9WNik7CistCQllbHNlIGlmIChzdHJuY21wIChwbGF0LCAidjZsIiwgMykgPT0gMCkKKysJCSAgICBod2NhcCB8PSBBUk1fSFdDQVBfVkZQOyAgLyogcWVtdSBpcyBzdXBwb3NlZCB0byBlbXVsYXRlIHZmcCAqLworKwkJICAgIGh3Y2FwIHw9IEFSTV9IV0NBUF9ORU9OOyAvKiBxZW11IGlzIHN1cHBvc2VkIHRvIGVtdWxhdGUgbmVvbiAqLworKwkJfQorKwkJZWxzZSBpZiAoc3RyY21wICh1Lm1hY2hpbmUsICJhcm12NmwiKSA9PSAwKQorKwkJeworIAkJICAgIGZlYXR1cmVzIHw9IEFSTV9WNjsKKysJCSAgICBod2NhcCB8PSBBUk1fSFdDQVBfVkZQOyAgLyogcWVtdSBpcyBzdXBwb3NlZCB0byBlbXVsYXRlIHZmcCAqLworKwkJfQorIAkgICAgfQorIAl9CistCWNsb3NlIChmZCk7CisrCWVsc2UgaWYgKHN0cm5jbXAgKHBsYXQsICJ2N2wiLCAzKSA9PSAwKQorKwl7CisrCSAgICBmZWF0dXJlcyB8PSAoQVJNX1Y3IHwgQVJNX1Y2KTsKKysJfQorKwllbHNlIGlmIChzdHJuY21wIChwbGF0LCAidjZsIiwgMykgPT0gMCkKKysJeworKwkgICAgZmVhdHVyZXMgfD0gQVJNX1Y2OworKwl9CisgICAgIH0KKyAKKysgICAgLyogaGFyZGNvZGUgdGhlc2UgdmFsdWVzIHRvIGF2b2lkIGRlcGVuZGluZyBvbiBzcGVjaWZpYworKyAgICAgKiB2ZXJzaW9ucyBvZiB0aGUgaHdjYXAgaGVhZGVyLCBlLmcuIEhXQ0FQX05FT04KKysgICAgICovCisrICAgIGlmICgoaHdjYXAgJiBBUk1fSFdDQVBfVkZQKSAhPSAwKQorKyAgICAgICAgZmVhdHVyZXMgfD0gQVJNX1ZGUDsKKysgICAgaWYgKChod2NhcCAmIEFSTV9IV0NBUF9JV01NWFQpICE9IDApCisrICAgICAgICBmZWF0dXJlcyB8PSBBUk1fSVdNTVhUOworKyAgICAvKiB0aGlzIGZsYWcgaXMgb25seSBwcmVzZW50IG9uIGtlcm5lbCAyLjYuMjkgKi8KKysgICAgaWYgKChod2NhcCAmIEFSTV9IV0NBUF9ORU9OKSAhPSAwKQorKyAgICAgICAgZmVhdHVyZXMgfD0gQVJNX05FT047CisrCisgICAgIHJldHVybiBmZWF0dXJlczsKKyB9CisgCistLSAKKzEuNy42LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuL2FzbV9pbmNsdWRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuL2FzbV9pbmNsdWRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MmE1NzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vYXNtX2luY2x1ZGUucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRml4ZXMgZXJyb3JzIGxpa2UKKworQXNzZW1ibGVyIG1lc3NhZ2VzOgorRmF0YWwgZXJyb3I6IGNhbid0IGNyZWF0ZSAubGlicy9waXhtYW4tbWlwcy1kc3ByMi1hc20ubzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitpdCB3b3JrcyB3aXRoIGdsaWJjIGJlY2F1c2UgaXQgdXNlcyBnY2MgZml4ZWQtaGVhZGVycyBidXQgdGhhdHMgbm90IHJpZ2h0LgorCitXZSBtb3ZlIHRoZSBpbmNsdWRlIHVuZGVyIEMgYmxvY2sKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IHBpeG1hbi0wLjMyLjYvcGl4bWFuL3BpeG1hbi1wcml2YXRlLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwaXhtYW4tMC4zMi42Lm9yaWcvcGl4bWFuL3BpeG1hbi1wcml2YXRlLmgKKysrKyBwaXhtYW4tMC4zMi42L3BpeG1hbi9waXhtYW4tcHJpdmF0ZS5oCitAQCAtMSw0ICsxLDMgQEAKKy0jaW5jbHVkZSA8ZmxvYXQuaD4KKyAKKyAjaWZuZGVmIFBJWE1BTl9QUklWQVRFX0gKKyAjZGVmaW5lIFBJWE1BTl9QUklWQVRFX0gKK0BAIC0xNyw2ICsxNiw4IEBACisgCisgI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisgCisrI2luY2x1ZGUgPGZsb2F0Lmg+CisrCisgI2lmbmRlZiBQQUNLQUdFCisgIyAgZXJyb3IgY29uZmlnLmggbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgcGl4bWFuLXByaXZhdGUuaAorICNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuL21pcHMtZXhwb3J0LXJldmVydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi9taXBzLWV4cG9ydC1yZXZlcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhNWZkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi9taXBzLWV4cG9ydC1yZXZlcnQucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorUmV2ZXJ0IGEgY29tbWl0IGluIHBpeG1hbiAwLjMyLjYgd2hpY2ggYnJlYWtzIGNvbXBsaWF0aW9uIG9uIE1JUFMgbWFjaGluZXMgd2l0aAorZXJyb3JzIHN1Y2ggYXM6CisKK3BpeG1hbi0wLjMyLjYvcGl4bWFuL3BpeG1hbi1taXBzLWRzcHIyLWFzbS5TOjQyNjc6CitFcnJvcjogaW52YWxpZCBvcGVyYW5kcyBgbWZsbyAkMTQsJGFjMycKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCistLS0gYi9waXhtYW4vcGl4bWFuLW1pcHMtZHNwcjItYXNtLmgKKysrKyBhL3BpeG1hbi9waXhtYW4tbWlwcy1kc3ByMi1hc20uaAorQEAgLTcyLDEwICs3Miw3IEBACisgI2RlZmluZSBMRUFGX01JUFMzMlIyKHN5bWJvbCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIC5nbG9ibCAgc3ltYm9sOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIC5hbGlnbiAgMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistI2lmZGVmIF9fRUxGX18KKy0gICAgICAgICAgICAgICAgLmhpZGRlbiBzeW1ib2w7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgLnR5cGUgICBzeW1ib2wsIEBmdW5jdGlvbjsgICAgICAgICAgICAgIFwKKy0jZW5kaWYKKyAgICAgICAgICAgICAgICAgLmVudCAgICBzeW1ib2wsIDA7ICAgICAgICAgICAgICAgICAgICAgIFwKKyBzeW1ib2w6ICAgICAgICAgLmZyYW1lICBzcCwgMCwgcmE7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgLnNldCAgICBwdXNoOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbl8wLjMyLjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW5fMC4zMi42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZTU5YjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW5fMC4zMi42LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiUGl4bWFuOiBQaXhlbCBNYW5pcHVsYXRpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiUGl4bWFuIHByb3ZpZGVzIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIHBpeGVsIHJlZ2lvbnMgXAorLS0gYSBzZXQgb2YgWS1YIGJhbmRlZCByZWN0YW5nbGVzLCBpbWFnZSBjb21wb3NpdGluZyB1c2luZyB0aGUgXAorUG9ydGVyL0R1ZmYgbW9kZWwgYW5kIGltcGxpY2l0IG1hc2sgZ2VuZXJhdGlvbiBmb3IgZ2VvbWV0cmljIHByaW1pdGl2ZXMgXAoraW5jbHVkaW5nIHRyYXBlem9pZHMsIHRyaWFuZ2xlcywgYW5kIHJlY3RhbmdsZXMuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUgJiBQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE0MDk2Yzc2OWFlMGNiYjVmY2I5NGVjNDY4YmUxMWIzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BpeG1hbi9waXhtYW4tbWF0cml4LmM7ZW5kbGluZT0yNTttZDU9YmE2ZTg3NjliZmFhZWUyYzQxNjk4NzU1YWYwNGM0YmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcGl4bWFuL3BpeG1hbi1hcm0tbmVvbi1hc20uaDtlbmRsaW5lPTI0O21kNT05YTljYzFlNTFhYmJmMWRhNThmNGQ5NTI4ZWM5ZDQ5YiBcCisgICAgICAgICAgICAgICAgICAgIgorREVQRU5EUyArPSAiemxpYiBsaWJwbmciCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1BFID0gIjEiCisKK0lXTU1YVCA9ICItLWRpc2FibGUtYXJtLWl3bW14dCIKK0xPT05HU09OX01NSSA9ICItLWRpc2FibGUtbG9vbmdzb24tbW1pIgorTkVPTiA9ICIgLS1kaXNhYmxlLWFybS1uZW9uICIKK05FT05fY2xhc3MtbmF0aXZlc2RrID0gIiAtLWRpc2FibGUtYXJtLW5lb24gIgorTkVPTl9hcm12N2EgPSAiICIKK05FT05fYXJtdjdhLXZmcC1uZW9uID0gIiAiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZ3RrICR7SVdNTVhUfSAke0xPT05HU09OX01NSX0gJHtORU9OfSIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS1kaXNhYmxlLWd0ayIKKworU1JDX1VSSSArPSAiXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtQVJNLXFlbXUtcmVsYXRlZC13b3JrYXJvdW5kcy1pbi1jcHUtZmVhdHVyZXMtZGV0ZWN0aS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbWlwcy1leHBvcnQtcmV2ZXJ0LnBhdGNoIFwKKwkgICAgZmlsZTovL2FzbV9pbmNsdWRlLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjhhOWU4ZjE0NzQzYTM5Y2YzMDM4MDNmMzY5YzFmMzQ0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIwMWZjMGQ3ZDZiYzAwMTc0OTZmMmJkMjdiM2NhMTQyMjRhZWEwZGY2YjYyNGM1ZWUyZGMwMzA3YTRmZjE0YTQiCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC1pbWFnZV8wLjQuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLWltYWdlXzAuNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNDY0YjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC1pbWFnZV8wLjQuMC5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIHhjYi11dGlsLmluYworCitERVBFTkRTICs9ICJ4Y2ItdXRpbCIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9pbWFnZS94Y2JfaW1hZ2UuYztlbmRsaW5lPTI0O21kNT1lYWZkZjk2NWNmYjg5OTU1ZmRlZGY3NTA1NDIyM2ZiNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbWFnZS94Y2JfaW1hZ2UuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTI3O21kNT00OGNkMjVhZTU1ZTdkZTUyNWZlMWUxYTNhNzY3MmUxYyIKKworU1JDX1VSSVttZDVzdW1dID0gIjA4ZmU4ZmZlY2M4ZDRlMzdjMGFkZTc5MDZiM2Y0Yzg3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJkYjk2YTM3ZDc4ODMxZDY0MzUzOGRkMWI1OTVkN2Q3MTJlMDRiZGNjZjg4OTZhNWUxOGNlMGYzOThlYTJmZmMiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwta2V5c3ltc18wLjQuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLWtleXN5bXNfMC40LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhNjRlZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLWtleXN5bXNfMC40LjAuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIHhjYi11dGlsLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2tleXN5bXMva2V5c3ltcy5jO2VuZGxpbmU9MzA7bWQ1PTJmOGRlMDIzZWQ4MjNiYjkyZjBiNDc5MDA1NzRlYTllIFwKKwkJCQkJIgorU1JDX1VSSVttZDVzdW1dID0gIjEwMjIyOTMwODNlZWM5ZTYyZDU2NTkyNjFjMjllMzY3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBlZjg0OTBmZjFkZWRlNTJiN2RlNTMzMTU4NTQ3ZjhiNDU0YjI0MWFhM2U0ZGNjYTM2OTUwN2Y2NmYyMTZkZDkiCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtcmVuZGVydXRpbF8wLjMuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLXJlbmRlcnV0aWxfMC4zLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVjMjJlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLXJlbmRlcnV0aWxfMC4zLjkuYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSB4Y2ItdXRpbC5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9yZW5kZXJ1dGlsL2dseXBoLmM7ZW5kbGluZT0yNDttZDU9YzUxN2M0ODNiOGQ3MjYyMzRlYzk0ZjkxNjkyMzY2NjEgXAorCQkJCQlmaWxlOi8vcmVuZGVydXRpbC91dGlsLmM7ZW5kbGluZT0yMDttZDU9NmUwYmZjNDRmYjEzMjk4YzBmNDY5NGViNzBkYzgwZDQgXAorCQkJCQlmaWxlOi8vcmVuZGVydXRpbC94Y2JfcmVuZGVydXRpbC5oO2VuZGxpbmU9MjQ7bWQ1PWQwZGRhYjMwNTJkZDQ5NDljOTNjZmNiMDg5MWM5NmRmIFwKKwkJCQkJIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDY4YjExOWM5NGRhOTEwZTEyOTFmM2ZmYWI5MTAxOWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzZlOTdlNDhmYjEyODZkNjM5NGRkZGIxYzE3MzJmMDAyMjdjNzBiZDFiZWRiN2QxYWNhYmVmZGQzNDBiZWE1YiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLXdtXzAuNC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtd21fMC40LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlmMTM4MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLXdtXzAuNC4xLmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgeGNiLXV0aWwuaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZXdtaC9ld21oLmMubTQ7ZW5kbGluZT0yNzttZDU9NjNmZDgwNTUyZDdkYzg4NmY0ZWIyNjc2MTBkNWJiOWQgXAorCQkJCQlmaWxlOi8vZXdtaC94Y2JfZXdtaC5oLm00O2JlZ2lubGluZT00O2VuZGxpbmU9MzA7bWQ1PTczYjU4OWY5MGVmOTBiNGE0Mzk5ODk1NWRhYWQ1Y2Q4IFwKKwkJCQkJZmlsZTovL2ljY2NtL2ljY2NtLmM7ZW5kbGluZT0yODttZDU9ZTJiMzI0MGEwYzE5N2U4OTc3YWRkZTJhNWNmMThkNTAgXAorCQkJCQlmaWxlOi8vaWNjY20veGNiX2ljY2NtLmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0zMTttZDU9MzkzNzcyYjdiMDdiOTg2OGQ0NzlkNTM4MjM4YzFkOGEgXAorCQkJCQkiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4N2IxOWExY2Q3YmZjYjY1YTI0ZTM2YzMwMGUwMzEyOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyOGJmODE3OTY0MGVhYTg5Mjc2ZDJiMGYxY2U0Mjg1MTAzZDEzNmJlNmM5ODI2MmI2MTUxYWFlZTFkM2MyYTNmIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZDA0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC5pbmMKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJYQ0I6IFRoZSBYIHByb3RvY29sIEMgYmluZGluZyB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJUaGUgeGNiLXV0aWwgbW9kdWxlIHByb3ZpZGVzIGEgbnVtYmVyIG9mIGxpYnJhcmllcyB3aGljaCBcCitzaXQgb24gdG9wIG9mIGxpYnhjYiwgdGhlIGNvcmUgWCBwcm90b2NvbCBsaWJyYXJ5LCBhbmQgc29tZSBvZiB0aGUgXAorZXh0ZW5zaW9uIGxpYnJhcmllcy4gVGhlc2UgZXhwZXJpbWVudGFsIGxpYnJhcmllcyBwcm92aWRlIGNvbnZlbmllbmNlIFwKK2Z1bmN0aW9ucyBhbmQgaW50ZXJmYWNlcyB3aGljaCBtYWtlIHRoZSByYXcgWCBwcm90b2NvbCBtb3JlIHVzYWJsZS4gU29tZSBcCitvZiB0aGUgbGlicmFyaWVzIGFsc28gcHJvdmlkZSBjbGllbnQtc2lkZSBjb2RlIHdoaWNoIGlzIG5vdCBzdHJpY3RseSBcCitwYXJ0IG9mIHRoZSBYIHByb3RvY29sIGJ1dCB3aGljaCBoYXZlIHRyYWRpdGlvbmFsbHkgYmVlbiBwcm92aWRlZCBieSBcCitYbGliLiIKK0hPTUVQQUdFID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnL1hjYlV0aWwvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1YQ0IiCisKK0xJQ0VOU0UgPSAiTUlUIgorCitTRUNUSU9OID0gIngxMS9saWJzIgorCitERVBFTkRTID0gImxpYnhjYiIKK0RFUEVORFMgKz0gImdwZXJmLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZy9kaXN0LyR7QlBOfS0ke1BWfS50YXIuYnoyIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbF8wLjQuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsXzAuNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNmYwN2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbF8wLjQuMC5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgeGNiLXV0aWwuaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3JjL3hjYl9hdXguYztlbmRsaW5lPTMwO21kNT1hZTMwNWI5YzJhMzhmOWJhMjcwNjAxOTEwNDZhNjQ2MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMveGNiX2V2ZW50Lmg7ZW5kbGluZT0yNzttZDU9NjI3YmUzNTVhZWU1OWUxYjhhZGU4MGQ1YmQ5MGZhZDkiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyZTk3ZmVlZDgxOTE5NDY1YTA0Y2NjNzFlNDA3MzMxMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NmU0OTQ2OWNiM2I1OTRhZjFkMzMxNzZjZDc1NjVkZWYyYmUzZmE4YmU0MzcxZDYyMjcxZmFiYjVlYWU1MGU5IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGtleWJvYXJkLWNvbmZpZ18yLjE1LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGtleWJvYXJkLWNvbmZpZ18yLjE1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MTY5OTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94a2V5Ym9hcmQtY29uZmlnXzIuMTUuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJLZXlib2FyZCBjb25maWd1cmF0aW9uIGRhdGFiYXNlIGZvciBYIFdpbmRvdyIKKworREVTQ1JJUFRJT04gPSAiVGhlIG5vbi1hcmNoIGtleWJvYXJkIGNvbmZpZ3VyYXRpb24gZGF0YWJhc2UgZm9yIFggXAorV2luZG93LiAgVGhlIGdvYWwgaXMgdG8gcHJvdmlkZSB0aGUgY29uc2lzdGVudCwgd2VsbC1zdHJ1Y3R1cmVkLCBcCitmcmVxdWVudGx5IHJlbGVhc2VkIG9wZW4gc291cmNlIG9mIFgga2V5Ym9hcmQgY29uZmlndXJhdGlvbiBkYXRhIGZvciBYIFwKK1dpbmRvdyBTeXN0ZW0gaW1wbGVtZW50YXRpb25zLiAgVGhlIHByb2plY3QgaXMgdGFyZ2V0ZWQgdG8gWEtCLWJhc2VkIFwKK3N5c3RlbXMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvWEtleWJvYXJkQ29uZmlnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD14a2V5Ym9hcmQtY29uZmlnIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTBlN2YyMWNhN2RiOTc1YzYzNDY3ZDJlNzYyNGExMmY5IgorCitTUkNfVVJJID0gIiR7WE9SR19NSVJST1J9L2luZGl2aWR1YWwvZGF0YS94a2V5Ym9hcmQtY29uZmlnLyR7QlBOfS0ke1BWfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gIjRhZjFkZWViN2M1ZjRjYWQ2MmU2NTk1N2Q5OGQ2NzU4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBlNDQzY2Y3Y2EyZjBiNDA4NDY0NzJjMDI5NjQ3YTA1OTMzZmM3MDVkNjExZTE0NzhjNGRiOGE0OGE2ZjM4YmYiCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitERVBFTkRTID0gImludGx0b29sLW5hdGl2ZSB2aXJ0dWFsL2dldHRleHQgdXRpbC1tYWNyb3MgbGlieHNsdC1uYXRpdmUiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgteGtiLXJ1bGVzLXN5bWxpbms9eG9yZyAtLWRpc2FibGUtcnVudGltZS1kZXBzIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9YMTEveGtiIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9YMTEveGtiL2NvbXBpbGVkCisgICAgY2QgJHtEfSR7ZGF0YWRpcn0vWDExL3hrYi9ydWxlcyAmJiBsbiAtc2YgYmFzZSB4b3JnCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94b3JnLWxpYi1jb21tb24uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveG9yZy1saWItY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWRmMDEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveG9yZy1saWItY29tbW9uLmluYwpAQCAtMCwwICsxLDI2IEBACitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD14b3JnIgorCitTRUNUSU9OID0gIngxMS9saWJzIgorTElDRU5TRSA9ICJNSVQtWCIKK0RFUEVORFMgPSAidXRpbC1tYWNyb3MiCisKK1hPUkdfUE4gPSAiJHtCUE59IgorCitTUkNfVVJJID0gIiR7WE9SR19NSVJST1J9L2luZGl2aWR1YWwvbGliLyR7WE9SR19QTn0tJHtQVn0udGFyLmJ6MiIKKworUyA9ICIke1dPUktESVJ9LyR7WE9SR19QTn0tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGRpc3Ryb19mZWF0dXJlc19jaGVjayBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1zcGVjcyAtLXdpdGhvdXQtZ3JvZmYgLS13aXRob3V0LXBzMnBkZiAtLXdpdGhvdXQtZm9wIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1t4bWx0b10gPSAiLS13aXRoLXhtbHRvLCAtLXdpdGhvdXQteG1sdG8sIHhtbHRvLW5hdGl2ZSBkb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uYXRpdmUiCisKK1VOS05PV05fQ09ORklHVVJFX1dISVRFTElTVCArPSAiLS1lbmFibGUtbWFsbG9jMHJldHVybnNudWxsIC0tZGlzYWJsZS1tYWxsb2MwcmV0dXJuc251bGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtc3BlY3MgLS13aXRob3V0LWdyb2ZmIC0td2l0aG91dC1wczJwZGYgLS13aXRob3V0LWZvcCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC14bWx0byAtLXdpdGgteG1sdG8gXAorIgorCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPz0gIngxMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3h0cmFuc18xLjMuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3h0cmFuc18xLjMuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWI3ZjFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveHRyYW5zXzEuMy41LmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiWFRyYW5zOiBYIFRyYW5zcG9ydCBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgWCBUcmFuc3BvcnQgSW50ZXJmYWNlIGlzIGludGVuZGVkIHRvIGNvbWJpbmUgYWxsIFwKK3N5c3RlbSBhbmQgdHJhbnNwb3J0IHNwZWNpZmljIGNvZGUgaW50byBhIHNpbmdsZSBwbGFjZS4gIFRoaXMgQVBJIHNob3VsZCBcCitiZSB1c2VkIGJ5IGFsbCBsaWJyYXJpZXMsIGNsaWVudHMgYW5kIHNlcnZlcnMgb2YgdGhlIFggV2luZG93IFN5c3RlbS4gXAorVXNlIG9mIHRoaXMgQVBJIHNob3VsZCBhbGxvdyB0aGUgYWRkaXRpb24gb2YgbmV3IHR5cGVzIG9mIHRyYW5zcG9ydHMgYW5kIFwKK3N1cHBvcnQgZm9yIG5ldyBwbGF0Zm9ybXMgd2l0aG91dCBtYWtpbmcgYW55IGNoYW5nZXMgdG8gdGhlIHNvdXJjZSBcCitleGNlcHQgaW4gdGhlIFggVHJhbnNwb3J0IEludGVyZmFjZSBjb2RlLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDkzNDc5MjFkNGQ1MjY4MDIxYTk5OWYyNTBlZGM5Y2EiCisKK1BFID0gIjEiCisKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCisKK2luaGVyaXQgZ2V0dGV4dAorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjNWJhNDMyZGQxNTE0ZDg1ODA1M2ZmZTlmNDczN2RkOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhZGJkM2IzNjkzMmNlNGMwNjJjZDEwZjU3ZDc4YTE1NmJhOThkNjE4YmRiNmY1MDY2NGRhMzI3NTAyYmM4MzAxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9iaWdyZXFzcHJvdG9fMS4xLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2JpZ3JlcXNwcm90b18xLjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzk4YTQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9iaWdyZXFzcHJvdG9fMS4xLjIuYmIKQEAgLTAsMCArMSwxNiBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworUEUgPSAiMSIKKworU1VNTUFSWSA9ICJCaWdSZXFzOiBYIEJpZyBSZXF1ZXN0cyBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgXAorQklHLVJFUVVFU1RTIGV4dGVuc2lvbiwgdXNlZCB0byBzZW5kIGxhcmdlciByZXF1ZXN0cyB0aGF0IHVzdWFsIGluIG9yZGVyIFwKK3RvIGF2b2lkIGZyYWdtZW50YXRpb24uIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIxMjcxNTYzMGRhNmYyNjhkMGQzNzEyZWUxYTUwNGY0IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWEwNWZiMDFmYTFkNTE5ODg5NGM5MzFjZjkyNWMwMjUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDYyMTE2YWI0NGU0MWQ4MTIxYmZkZTk0NzMyMTk1MDM3MGIyODVhNTMxNjYxMmI4ZmNlODMzNGQ1MDc1MWIxZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY2FsaWJyYXRlcHJvdG8vZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jYWxpYnJhdGVwcm90by9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4Y2IyNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY2FsaWJyYXRlcHJvdG8vZml4LnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBZGQgbWlzc2luZyBsZW5ndGggZmllbGRzIHRvIHRoZSByZXBsaWVzLiBXaXRob3V0IHRoZXNlLCBzYW5pdHkgY2hlY2tpbmcgaW4gcmVjZW50IFgKK2JyZWFrcyB0aGluZ3MuCisKK1JQIDExLzIvMTAKKworCitJbmRleDogZ2l0L3hjYWxpYnJhdGVwcm90by5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcveGNhbGlicmF0ZXByb3RvLmgJMjAxMC0wMi0xMSAxMTo0Nzo0NS43MTE5ODU5MzIgKzAwMDAKKysrKyBnaXQveGNhbGlicmF0ZXByb3RvLmgJMjAxMC0wMi0xMSAxMTo0MDoyMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC02NywxMyArNjcsMTMgQEAKKyAgICAgQllURSAgICB0eXBlOyAgIC8qIFhfUmVwbHkgKi8KKyAgICAgQllURSAgICBwYWQxOworICAgICBDQVJEMTYgIHNlcXVlbmNlTnVtYmVyIEIxNjsKKysgICAgQ0FSRDMyICBsZW5ndGg7CisgICAgIENBUkQzMiAgc3RhdHVzOworICAgICBDQVJEMzIgIHBhZDIgQjMyOworICAgICBDQVJEMzIgIHBhZDMgQjMyOworICAgICBDQVJEMzIgIHBhZDQgQjMyOworICAgICBDQVJEMzIgIHBhZDUgQjMyOworICAgICBDQVJEMzIgIHBhZDYgQjMyOworLSAgICBDQVJEMzIgIHBhZDcgQjMyOworIH0geFhDYWxpYnJhdGVSYXdNb2RlUmVwbHk7CisgCisgI2RlZmluZSBzel94WENhbGlicmF0ZVJhd01vZGVSZXBseQkzMgorQEAgLTkyLDEzICs5MiwxMyBAQAorICAgICBCWVRFICAgIHR5cGU7ICAgLyogWF9SZXBseSAqLworICAgICBCWVRFICAgIHBhZDE7CisgICAgIENBUkQxNiAgc2VxdWVuY2VOdW1iZXIgQjE2OworKyAgICBDQVJEMzIgIGxlbmd0aDsKKyAgICAgQ0FSRDMyICB4OworICAgICBDQVJEMzIgIHk7CisgICAgIENBUkQzMiAgcGFkMiBCMzI7CisgICAgIENBUkQzMiAgcGFkMyBCMzI7CisgICAgIENBUkQzMiAgcGFkNCBCMzI7CisgICAgIENBUkQzMiAgcGFkNSBCMzI7CistICAgIENBUkQzMiAgcGFkNiBCMzI7CisgfSB4WENhbGlicmF0ZVNjcmVlblRvQ29vcmRSZXBseTsKKyAKKyAjZGVmaW5lIHN6X3hYQ2FsaWJyYXRlU2NyZWVuVG9Db29yZFJlcGx5CTMyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2NhbGlicmF0ZXByb3RvX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY2FsaWJyYXRlcHJvdG9fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OGQxNTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2NhbGlicmF0ZXByb3RvX2dpdC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhDYWxpYnJhdGU6IFRvdWNoc2NyZWVuIGNhbGlicmF0aW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFwKK1RvdWNoc2NyZWVuIGNhbGlicmF0aW9uIGV4dGVuc2lvbi4iCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8veGNhbGlicmF0ZXdpcmUuaDtlbmRsaW5lPTIzO21kNT03Zjg2ZWY3YjAzY2NlNmM0YzllYmQ1OWQyMGNhNDg1ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94Y2FsaWJyYXRlcHJvdG8uaDtlbmRsaW5lPTIzO21kNT1lNDQ5MDQ5MWVkY2MxNzFjYTI0Zjk4NTY5ZWU1ODBkYiIKKworU1JDUkVWID0gIjFkYTZmZDFlMmM3YTQ5NjQ4MjQ1Yzk4NDgxZmFiZWE4Yjk2OTBhOGMiCisKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKK1BSID0gInIyIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL3Byb3RvL2NhbGlicmF0ZXByb3RvIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC5wYXRjaDthcHBseT15ZXMiCitTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jb21wb3NpdGVwcm90b18wLjQuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY29tcG9zaXRlcHJvdG9fMC40LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmZWUyNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY29tcG9zaXRlcHJvdG9fMC40LjIuYmIKQEAgLTAsMCArMSwyMSBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYY29tcG9zaXRlOiBYIGNvbXBvc2l0ZSBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBcCitjb21wb3NpdGUgZXh0ZW5zaW9uLiAgVGhlIFggY29tcG9zaXRlIGV4dGVuc2lvbiBwcm92aWRlcyB0aHJlZSByZWxhdGVkIFwKK21lY2hhbmlzbXMgZm9yIGNvbXBvc2l0aW5nIGFuZCBvZmYtc2NyZWVuIHN0b3JhZ2UuIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTJjNGJmZTEzNmY0YTQ0MThlYTJmMmE5NmI3YzhmM2M1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NvbXBvc2l0ZS5oO2VuZGxpbmU9NDM7bWQ1PWNiZDQ0ZDQwNzkwNTNhYTc1OTMwZWQyZjAyYjkyOTI2IgorCitSQ09ORkxJQ1RTXyR7UE59ID0gImNvbXBvc2l0ZWV4dCIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitQUiA9ICJyMSIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5ODQ4MmY2NWJhMWU3NGEwOGJmNWIwNTZhNDAzMWVmMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNDkzNTlmMGJlMGIyYjk4NGE4MTQ5Yzk2NmRkMDRlOGM1OGU2ZWFkZTJhNGEzMDljZjExMjY2MzVjY2QwY2ZjIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RhbWFnZXByb3RvXzEuMi4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kYW1hZ2Vwcm90b18xLjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWQwMjY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kYW1hZ2Vwcm90b18xLjIuMS5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhkYW1hZ2U6IFggRGFtYWdlIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBEQU1BR0UgXAorZXh0ZW5zaW9uLiAgVGhlIERBTUFHRSBleHRlbnNpb24gYWxsb3dzIGFwcGxpY2F0aW9ucyB0byByZWNlaXZlIFwKK2luZm9ybWF0aW9uIGFib3V0IGNoYW5nZXMgbWFkZSB0byBwaXhlbCBjb250ZW50cyBvZiB3aW5kb3dzIGFuZCBcCitwaXhtYXBzLiIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNWY1YTJkZTY1YzNhODRjYmRlNzY5ZjA3YTc2OTYwOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kYW1hZ2V3aXJlLmg7ZW5kbGluZT0yMzttZDU9NGE0NTAxYTU5MmRiYzdkZTVjZTg5MjU1ZTUwZDAyOTYiCisKK1JDT05GTElDVFNfJHtQTn0gPSAiZGFtYWdlZXh0IgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCitQUiA9ICJyMSIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5OThlNTkwNDc2NGI4MjY0MmNjNjNkOTdiNGJhOWU5NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1YzdjMTEyZTliOWVhOGE5ZDViMDE5ZTVmMTdkNDgxYWUyMGY3NjZjYjdhNDY0ODM2MGU3YzFiNDZmYzlmYzViIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kbXhwcm90b18yLjMuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZG14cHJvdG9fMi4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk2MGU1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZG14cHJvdG9fMi4zLjEuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJETVg6IERpc3RyaWJ1dGVkIE11bHRpaGVhZCBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgRE1YIFwKK2V4dGVuc2lvbi4gIFRoZSBETVggZXh0ZW5zaW9uIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBcCithbmQgY29udHJvbCBvZiBYZG14IHNlcnZlci4gIEF0dHJpYnV0ZXMgb2YgdGhlIFhkbXggc2VydmVyIGFuZCBvZiB0aGUgXAorYmFjay1lbmQgc2NyZWVucyBhdHRhY2hlZCB0byB0aGUgc2VydmVyIGNhbiBiZSBxdWVyaWVkIGFuZCBtb2RpZmllZCB2aWEgXAordGhpcyBwcm90b2NvbC4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTNjMzQ5OTIzMWE4MDM1ZWZkMGUwMDRjZmJkM2I3MmEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG14cHJvdG8uaDtlbmRsaW5lPTMyO21kNT1hYjg1MDk5NTVjM2RkNGM2NWZhYzcyOGUxYjM2N2JjNCIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjRlZTE3NWJiZDQ0ZDA1YzM0ZDQzYmIxMjliZTUwOThhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU3MjA1MWU2YTNlMDZiMjM2ZDE5ZWVkNTYzNjgxMTdiNzQ1Y2ExZTFhMjdiZGM1MGZkNTFhYTM3NWJlYTY1MDkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RyaTJwcm90b18yLjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RyaTJwcm90b18yLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRjNDBjNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvXzIuOC5iYgpAQCAtMCwwICsxLDE1IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIkRSSTI6IERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgMiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBEaXJlY3QgXAorUmVuZGVyaW5nIElmbnJhc3RydWN0dXJlIDIuICBESVIgaXMgcmVxdWlyZWQgZm9yIG1heSBoYXJkd2FyZSBcCithY2NlbGVyYXRlZCBPcGVuR0wgZHJpdmVycy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MmUzOTZmYTkxODM0Zjg3ODYwMzJjYWQyZGE1NjM4ZjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZHJpMnByb3RvLmg7ZW5kbGluZT0zMTttZDU9MjJmMjhiZjY4ZDAxYjUzM2YyNjE5NWU5NGIzZWQ4Y2EiCisKKworU1JDX1VSSVttZDVzdW1dID0gImIyNzIxZDVkMjRjMDRkOTk4MGEwYzY1NDBjYjUzOTZhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY5YjU1NDc2ZGVmNDRmYzdjNDU5YjI1MzdkMTdkYmM3MzFlMzZlZDVkNDE2YWY3Y2EwYjFlMmU2NzZmOGFhMDQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RyaTJwcm90b19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RyaTJwcm90b19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA3NGY0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvX2dpdC5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIkRSSTI6IERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgMiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBEaXJlY3QgXAorUmVuZGVyaW5nIElmbnJhc3RydWN0dXJlIDIuICBESVIgaXMgcmVxdWlyZWQgZm9yIG1heSBoYXJkd2FyZSBcCithY2NlbGVyYXRlZCBPcGVuR0wgZHJpdmVycy4iCisKK1NSQ1JFViA9ICI2NmM1NmFiMTBkOTE3ZTNmNDdmOTMxNzhkN2VhYzY0MzA5NzBkM2M0IgorUFYgPSAiMS45OS4zK2dpdCR7U1JDUFZ9IgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvcHJvdG8vZHJpMnByb3RvIgorCitMSUNfRklMRVNfQ0hLU1VNPSJmaWxlOi8vQ09QWUlORzttZDU9MmUzOTZmYTkxODM0Zjg3ODYwMzJjYWQyZGE1NjM4ZjMiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpM3Byb3RvXzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpM3Byb3RvXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWQ5N2IzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkzcHJvdG9fMS4wLmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSAzIEV4dGVuc2lvbiIKKworREVTQ1JJUFRJT04gPSAiVGhlIERSSTMgZXh0ZW5zaW9uIHByb3ZpZGVzIG1lY2hhbmlzbXMgdG8gdHJhbnNsYXRlIGJldHdlZW4gZGlyZWN0IFwKK3JlbmRlcmVkIGJ1ZmZlcnMgYW5kIFggcGl4bWFwcy4gV2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcmVzZW50IGV4dGVuc2lvbiwgXAorYSBjb21wbGV0ZSBkaXJlY3QgcmVuZGVyaW5nIHNvbHV0aW9uIGZvciBPcGVuR0wgaXMgcHJvdmlkZWQuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RyaTNwcm90by5oO2VuZGxpbmU9MjE7bWQ1PWFjOTBkMWQ0MTZiZTNjYjEzZTFkM2M4OGNkNTE2NmJmIgorCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhM2QyY2JlNjBhOWNhMWJmM2FlYTZjOTNjODE3ZmVlMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMWJlNDlkNzAyMDA1MThiOWE2YjI5NzEzMWY2Y2M3MWY0ZWEyZGUxNzQzNjg5NmFmMTUzMjI2YTc3NGZjMDc0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9maXhlc3Byb3RvXzUuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZml4ZXNwcm90b181LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlmYjg4ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZml4ZXNwcm90b181LjAuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYRml4ZXM6IFggRml4ZXMgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggRml4ZXMgXAorZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gaXMgZGVzaWduZWQgdG8gcHJvdmlkZSBzZXJ2ZXItc2lkZSBzdXBwb3J0IFwKK2ZvciBhcHBsaWNhdGlvbiB3b3JrIGFyb3VuZHMgdG8gc2hvcnRjb21pbmdzIGluIHRoZSBjb3JlIFggd2luZG93IFwKK3N5c3RlbS4iCisKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNjJhN2E4N2RhNTZlNjZkZDYzOWJmNzMzNGExMTBjNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94Zml4ZXNwcm90by5oO2VuZGxpbmU9NDM7bWQ1PWMzYTllZTZkYjM1MzJlZDBkNDRkZWEyNjZjZmM5N2Y0IgorCitSQ09ORkxJQ1RTXyR7UE59ID0gImZpeGVzZXh0IgorUFIgPSAicjEiCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlNzQzMWFiODRkMzdiMjY3OGFmNzFlMjkzNTVlMTAxZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYTJmM2YzMTI0NmJkZDNmMmEwYWNmOGJkM2IwOWJhOTljYWI5NjVjN2ZiMmMyYzkyYjdkYzcyODcwZTQyNGNlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9mb250c3Byb3RvXzIuMS4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9mb250c3Byb3RvXzIuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZmMyODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2ZvbnRzcHJvdG9fMi4xLjMuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYRm9udDogWCBGb250IHJhc3RlcmlzYXRpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBGb250IFwKK3Jhc3RlcmlzYXRpb24gZXh0ZW5zaW9ucy4gIFRoZXNlIGV4dGVuc2lvbnMgYXJlIHVzZWQgdG8gY29udHJvbCBcCitzZXJ2ZXItc2lkZSBmb250IGNvbmZpZ3VyYXRpb25zLiIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jM2U0OGFhOWNlODY4YzhlOTBmMDQwMWRiNDFjMTFhMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9GU3Byb3RvLmg7ZW5kbGluZT00NDttZDU9ZDJlNThlMjcwOTVlNWVhN2Q0YWQ0NTZjY2I5MTk4NmMiCisKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzY5MzRkMDBiMDA1NTVlYWFjZGU5ZjA5MWYzOTJmOTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjU5MDQ2YjBkZDkxMzA4MjVjNGE0YzQ3OWJhMzU5MWQ2ZDBmMTdhMzNmNTRlMjk0YjU2NDc4NzI5YTZlNWFiOCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZ2xwcm90b18xLjQuMTcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2dscHJvdG9fMS40LjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMDNkMzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2dscHJvdG9fMS40LjE3LmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiT3BlbkdMOiBYIE9wZW5HTCBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgXAorT3BlbkdMLXJlbGF0ZWQgZXh0ZW5zaW9ucywgdXNlZCB0byBlbmFibGUgdGhlIHJlbmRlcmluZyBvZiBhcHBsaWNhdGlvbnMgXAordXNpbmcgT3BlbkdMLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNDRlZDAxNDY5OTc4NTYzMDRkZmJiNTEyYTU5YThkZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbHhwcm90by5oO2JlZ2lubGluZT00O2VuZGxpbmU9MzI7bWQ1PTZiNzljNTcwZjY0NDM2M2IzNTY0NTZlN2Q0NDQ3MWQ5IgorCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjU1NjVmMWIwZmFjZjRhNTljMjc3ODIyOWMxZjcwZDEwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFkYWE5NGJkZWQzMTBhMmJmY2JiOWRlYjRkNzUxZDk2NWZjZmU2ZmIzYTJmNmQyNDJlMmRmMmQ2NTg5ZGJlNDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2lucHV0cHJvdG9fMi4zLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2lucHV0cHJvdG9fMi4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U4ZTBjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b18yLjMuMS5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhJOiBYIElucHV0IGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIElucHV0IFwKK2V4dGVuc2lvbi4gIFRoZSBleHRlbnNpb24gc3VwcG9ydHMgaW5wdXQgZGV2aWNlcyBvdGhlciB0aGVuIHRoZSBjb3JlIFggXAora2V5Ym9hcmQgYW5kIHBvaW50ZXIuIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU1NjJjYzBmNjU4N2I5NjFmMDMyMjExZDgxNjBmMzFlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1hJMnByb3RvLmg7ZW5kbGluZT00ODttZDU9MWFjMTU4MWU2MTE4OGRhMjg4NWNjMTRmZjQ5YjIwYmUiCisKK1BFID0gIjEiCisKK2luaGVyaXQgZ2V0dGV4dAorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2Y2FlYmVhZDRiNzc5YmEwMzE3MjdmNjZhN2ZmYTM1OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1YTQ3ZWU2MjA1M2E2YWNlZjNhODNmNTA2MzEyNDk0YmUxNDYxMDY4ZDBiOTI2OWQ4MTg4Mzk3MDNiOTVjMWQxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyMGYzYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b19naXQuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYSTogWCBJbnB1dCBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBJbnB1dCBcCitleHRlbnNpb24uICBUaGUgZXh0ZW5zaW9uIHN1cHBvcnRzIGlucHV0IGRldmljZXMgb3RoZXIgdGhlbiB0aGUgY29yZSBYIFwKK2tleWJvYXJkIGFuZCBwb2ludGVyLiIKKworUFIgPSAicjEiCitQRSA9ICIxIgorU1JDUkVWID0gIjcyMDMwMzY1MjJiYTlkNGIyMjRkMjgyZDZhZmMyZDBiOTQ3NzExZWUiCitQViA9ICIxLjkuOTkuMTIrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvcHJvdG8vaW5wdXRwcm90byIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgZ2V0dGV4dAorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2ticHJvdG9fMS4wLjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2ticHJvdG9fMS4wLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZmNWM5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8va2Jwcm90b18xLjAuNy5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhLQjogWCBLZXlib2FyZCBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBcCitLZXlib2FyZCBleHRlbnNpb24uICBUaGlzIGV4dGVuc2lvbiBpcyB1c2VkIHRvIGNvbnRyb2wgb3B0aW9ucyByZWxhdGVkIFwKK3RvIGtleWJvYXJkIGhhbmRsaW5nIGFuZCBsYXlvdXQuIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdkZDZlYTk5ZTJhODNhNTUyYzAyYzgwOTYzNjIzYzM4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1hLQnByb3RvLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yNTttZDU9NTc0NGVlZmY0MDdhZWI2ZTdhMTM0NmVlYmFiNDg2YTIiCisKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjk0YWZjOTBjMWY3YmVmNGEyN2ZkZDU5ZWNlMzljODc4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY4ODIyMTBiNzYzNzZlM2ZhMDA2YjExZGJkODkwZTU2ZWMwOTQyYmM1NmU2NWQxMjQ5ZmY0YWY4NmY5MGI4NTciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3ByZXNlbnRwcm90b19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3ByZXNlbnRwcm90b19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJiNmYzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcHJlc2VudHByb3RvX2dpdC5iYgpAQCAtMCwwICsxLDI0IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgYmFzaWMgaGVhZGVycyBmb3IgdGhlIFggV2luZG93IFN5c3RlbSIKK0RFU0NSSVBUSU9OID0gIlRoZSBQcmVzZW50IGV4dGVuc2lvbiBwcm92aWRlcyBhIHdheSBmb3IgYXBwbGljYXRpb25zIHRvIHVwZGF0ZSB0aGVpciBcCisgICAgICAgICAgICAgICB3aW5kb3cgY29udGVudHMgZnJvbSBhIHBpeG1hcCBpbiBhIHdlbGwgZGVmaW5lZCBmYXNoaW9uLCBzeW5jaHJvbml6aW5nIFwKKyAgICAgICAgICAgICAgIHdpdGggdGhlIGRpc3BsYXkgcmVmcmVzaCBhbmQgcG90ZW50aWFsbHkgdXNpbmcgYSBtb3JlIGVmZmljaWVudCBcCisgICAgICAgICAgICAgICBtZWNoYW5pc20gdGhhbiBjb3B5aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgc291cmNlIHBpeG1hcC5cCisgICAgICAgICAgICAgICIKKworTElDRU5TRSA9ICJHUEx2MiIKKworU1JDUkVWID0gIjI0ZjNhNTZlNTQxYjBhOWU2YzZlZTc2MDgxZjQ0MTIyMWExMjBlZjkiCitQViA9ICIxLjArZ2l0JHtTUkNQVn0iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQ3ZTUwOGNhMjgwZmRlOTc5MDZlYWNiNzc4OTJjM2FjIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL3Byb3RvL3ByZXNlbnRwcm90byIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1BSID0gInIxIgorCitpbmhlcml0IGF1dG90b29scworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmFuZHJwcm90b18xLjUuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmFuZHJwcm90b18xLjUuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTllNTI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yYW5kcnByb3RvXzEuNS4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWFJhbmRSOiBYIFJlc2l6ZSwgUm90YXRlIGFuZCBSZWZsZWN0IGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIFJlc2l6ZSwgXAorUm90YXRlIGFuZCBSZWZsZWN0IGV4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIFwKK3Jlc2l6ZSwgcm90YXRlIGFuZCByZWZsZWN0IHRoZSByb290IHdpbmRvdyBvZiBhIHNjcmVlbi4iCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDA0MjZkNDFiZDNkOTI2N2NmOWJiYjJkZjkzMjNhNWUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcmFuZHJwcm90by5oO2VuZGxpbmU9MzA7bWQ1PTM4ODU5NTdjNjA0OGZkZjMzMTBhYzhiYTU0Y2EyYzNmIgorCitSQ09ORkxJQ1RTXyR7UE59ID0gInJhbmRyZXh0IgorUEUgPSAiMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTQ2NzY1YzhkY2FjYjcxMTRjODIxYmFmMGRmMWU3OTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGM2NzU1MzNlNzljZDczMDk5N2QyMzJjODg5NGI2NjkyMTc0ZGNlNThkM2UyMDcwMjFiOGY4NjBiZTQ5ODQ2OCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVjb3JkcHJvdG9fMS4xNC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yZWNvcmRwcm90b18xLjE0LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQyMzE3YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVjb3JkcHJvdG9fMS4xNC4yLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWFJlY29yZDogWCBSZWNvcmQgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggUmVjb3JkIFwKK2V4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIGlzIHVzZWQgdG8gcmVjb3JkIGFuZCBwbGF5IGJhY2sgZXZlbnQgXAorc2VxdWVuY2VzLiIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NzU4MjdhMGY1NTRiYmVkMzMyNTQyOTc2ZDVmM2Q0MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9yZWNvcmRwcm90by5oO2VuZGxpbmU9MTk7bWQ1PTFjYmIwZGQ0NWEwYjA2MGZmODMzOTAxNjIwYTNlNzM4IgorCitSQ09ORkxJQ1RTXyR7UE59ID0gInJlY29yZGV4dCIKK1BSID0gInIxIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjFiNGU1ZGVkZTVlYTUxOTA2ZjE1MzBjYTFlMjFkMjE2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE3Nzc1NDhkMmU5MmFhMjU5ZjE1MjhkZTNjNGEzNmQxNWUwN2E0NjUwZDA5NzY1NzNhOGUyZmY1NDM3ZTczNzAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3JlbmRlcnByb3RvXzAuMTEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVuZGVycHJvdG9fMC4xMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmODAwZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3JlbmRlcnByb3RvXzAuMTEuMS5iYgpAQCAtMCwwICsxLDIxIEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhSZW5kZXI6IFggcmVuZGVyaW5nIEV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIFwKK1JlbmRlcmluZyBleHRlbnNpb24uICBUaGlzIGlzIHRoZSBiYXNpcyB0aGUgaW1hZ2UgY29tcG9zaXRpb24gd2l0aGluIHRoZSBcCitYIHdpbmRvdyBzeXN0ZW0uIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWY4MjZkOTk3NjUxOTYzNTJlNjEyMmE0MDZjZjBkMDI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3JlbmRlcnByb3RvLmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0yNDttZDU9M2U1ZTI4NTFkYWQyNDBiMGEzYTI3YzQ3NzZiNGZkMWYiCisKK1JDT05GTElDVFNfJHtQTn0gPSAicmVuZGVyZXh0IgorUFIgPSAicjEiCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhOTE0Y2NjMWRlNjZkZGViNGI2MTFjNmIwNjg2ZTI3NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNjczNWE1YjkyYjIwNzU5MjA0ZTQ3NTFlY2Q2MDY0YTJhZDhhNjI0NmJiNjViMzA3OGI4NjJhMDBkZWYyNTM3IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3Jlc291cmNlcHJvdG9fMS4yLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3Jlc291cmNlcHJvdG9fMS4yLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiNjEwYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVzb3VyY2Vwcm90b18xLjIuMC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhSZXM6IFggUmVzb3VyY2UgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggXAorUmVzb3VyY2UgZXh0ZW5zaW9uLiAgWFJlcyBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgWCBjbGllbnRzIHRvIFwKK3NlZSBhbmQgbW9uaXRvciBYIHJlc291cmNlIHVzYWdlIG9mIHZhcmlvdXMgY2xpZW50cy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NjA0ODU5MzA1ZTY2MjUwMzA3NzI0MGZlZThjNzdkOTciCisKK1JDT05GTElDVFNfJHtQTn0gPSAicmVzb3VyY2VleHQiCisKK1BSID0gInIxIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImNmZGI1N2RhZTIyMWI3MWIyNzAzZjhlMjk4MGVhYWY0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNjNjYwMDNhNmJkZWIwZjcwOTMyYTllZDNjZjU3Y2M1NTQyMzQxNTQzNzhkMzAxZTBjNWNmYTE4OWQ4ZjY4MTgiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vc2NybnNhdmVycHJvdG9fMS4yLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3Njcm5zYXZlcnByb3RvXzEuMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMDdmNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3Njcm5zYXZlcnByb3RvXzEuMi4yLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWHNjcm5zYXZlcjogWCBTY3JlZW4gU2F2ZXIgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggU2NyZWVuIFwKK1NhdmVyIGV4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIGFsbG93cyBhbiBleHRlcm5hbCBcInNjcmVlbiBzYXZlclwiIFwKK2NsaWVudCB0byBkZXRlY3Qgd2hlbiB0aGUgYWx0ZXJuYXRpdmUgaW1hZ2UgaXMgdG8gYmUgZGlzcGxheWVkIGFuZCB0byBcCitwcm92aWRlIHRoZSBncmFwaGljcy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWVkNDliNzhiMTViNDM2YzkzM2I2YjhiMDU0ZTM5MDEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2F2ZXJwcm90by5oO2VuZGxpbmU9MjY7bWQ1PWE4NGMwNjM3MzA1MTU5ZjNjMGFiMTczYWFlZWRlNDhkIgorCitQRSA9ICIxIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIiAtLWVuYWJsZS1zcGVjcz1ubyIKKworU1JDX1VSSVttZDVzdW1dID0gImVkZDhhNzM3NzVlOGVjZTFkNjk1MTVkZDE3NzY3YmZiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhiYjcwYThkYTE2NDkzMGNjZWFlYjRjNzQxODAyOTE2NjA1MzNhZDNjYzQ1Mzc3YjMwYTc5NWQxYjg1YmNkNjUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3ZpZGVvcHJvdG9fMi4zLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3ZpZGVvcHJvdG9fMi4zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNhYTc1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vdmlkZW9wcm90b18yLjMuMi5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlh2OiBYIFZpZGVvIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIFZpZGVvIFwKK2V4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIGFsb3dzIGZvciBhY2NlcmxhdGVkIGRyYXdpbmcgb2YgdmlkZW9zLiIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jZTM0NzJhMTE5YTg2NDA4NWZhNDE1NWNiMDk3OWE3YiIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImU2NTg2NDE1OTUzMjdkMzk5MGVhYjcwZmRiNTVjYThiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhkYWUxNjhjYjgyMGZjZDMyZjU2NDg3OWFmYjNmMjRkMjdjMTc2MzAwZDlhZjY2ODE5YTE4MjY1NTM5YmQ0YjYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90by5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90by5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUxYjU3YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvLmluYwpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIlhDQjogVGhlIFggcHJvdG9jb2wgQyBiaW5kaW5nIGhlYWRlcnMiCitERVNDUklQVElPTiA9ICJGdW5jdGlvbiBwcm90b3R5cGVzIGZvciB0aGUgWCBwcm90b2NvbCBDLWxhbmd1YWdlIEJpbmRpbmcgXAorKFhDQikuICBYQ0IgaXMgYSByZXBsYWNlbWVudCBmb3IgWGxpYiBmZWF0dXJpbmcgYSBzbWFsbCBmb290cHJpbnQsIFwKK2xhdGVuY3kgaGlkaW5nLCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBwcm90b2NvbCwgaW1wcm92ZWQgdGhyZWFkaW5nIFwKK3N1cHBvcnQsIGFuZCBleHRlbnNpYmlsaXR5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1YQ0IiCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitMSUNFTlNFID0gIk1JVC1YIgorCitTUkNfVVJJID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnL2Rpc3QveGNiLXByb3RvLSR7UFZ9LnRhci5iejIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBweXRob25uYXRpdmUKKworUEFDS0FHRVMgKz0gInB5dGhvbi14Y2JnZW4iCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS94Y2IvKi54bWwgJHtkYXRhZGlyfS94Y2IvKi54c2QiCitGSUxFU19weXRob24teGNiZ2VuID0gIiR7bGliZGlyfS9weXRob24qIgorCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKKworREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBweXRob24tbmF0aXZlIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fMS4xMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvXzEuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjNWExMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvXzEuMTEuYmIKQEAgLTAsMCArMSw5IEBACitpbmNsdWRlIHhjYi1wcm90by5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNzYzYjA4MWNiMTBjMjIzNDM1YjAxZTAwZGMwYWJhNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZHJpMi54bWw7YmVnaW5saW5lPTI7ZW5kbGluZT0yODttZDU9Zjg3NjNiMTNmZjQzMmU4NTk3ZTBkNjEwY2Y1OThlNjUiCisKKworU1JDX1VSSVttZDVzdW1dID0gIjZiZjI3OTc0NDVkYzZkNDNlOWU0NzA3YzA4MmVmZjljIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI0YWNlZWU2NTAyYTBjZTQ1ZmMzOWIzM2M1NDFhMmRmNDcxNWQwMGI3MmU2NjBlYmU4YzViYjQ0NDc3MWUzMmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90b19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90b19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhNGQwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvX2dpdC5iYgpAQCAtMCwwICsxLDkgQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSB4Y2ItcHJvdG8uaW5jCitTUkNSRVYgPSAiZDgxY2EyMzNlOThiZThmYTU5ZThjOTBkMjYyYzA1MTY5NDRjNWE2NiIKK1BWID0gIjEuMitnaXRyJHtTUkNQVn0iCitQUiA9ICJyNCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveGNiL3Byb3RvIgorUyA9ICIke1dPUktESVJ9L2dpdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNtaXNjcHJvdG9fMS4yLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjbWlzY3Byb3RvXzEuMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NTFiOTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjbWlzY3Byb3RvXzEuMi4yLmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEMtTUlTQzogWCBYQy1NaXNjZWxsYW5lb3VzIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYQy1NSVNDIFwKK2V4dGVuc2lvbiwgd2hpY2ggaXMgdXNlZCB0byBnZXQgZGV0YWlscyBvZiBYSUQgYWxsb2NhdGlvbnMgd2l0aGluIHRoZSBcCitzZXJ2ZXIuIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA5ZDgzMDQ3YzE1OTk0ZTA1ZGIyOWI0MjNlZDY2NjJlIgorCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1ZjQ4NDdjNzhlNDFiODAxOTgyYzhhNWUwNjM2NWIyNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiMTMyMzY4NjkzNzIyNTZjMzZkYjc5YWUzOWQ1NDIxNDE3MjY3N2ZiNzllOWNkYzU1NWRjZWVjODBiZDlkMmRmIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94ZXh0cHJvdG9fNy4zLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hleHRwcm90b183LjMuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDBiZDk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94ZXh0cHJvdG9fNy4zLjAuYmIKQEAgLTAsMCArMSwyNCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYRXh0OiBYIEV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHNldmVyYWwgWCBcCitleHRlbnNpb25zLiAgVGhlc2UgcHJvdG9jb2wgZXh0ZW5zaW9ucyBpbmNsdWRlIERPVUJMRS1CVUZGRVIsIERQTVMsIFwKK0V4dGVuZGVkLVZpc3VhbC1JbmZvcm1hdGlvbiwgTEJYLCBNSVRfU0hNLCBNSVRfU1VORFJZLU5PTlNUQU5EQVJELCBcCitNdWx0aS1CdWZmZXJpbmcsIFNFQ1VSSVRZLCBTSEFQRSwgU1lOQywgVE9HLUNVUCwgWEMtQVBQR1JPVVAsIFhDLU1JU0MsIFwKK1hURVNULiAgSW4gYWRkaXRpb24gYSBzbWFsbCBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYXJlIGFsc28gXAorYXZhaWxhYmxlLiIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04NmYyNzMyOTE3NTlkMGJhMmEyMjU4NWNkMWMwNmM1MyIKKworUEUgPSAiMSIKKworaW5oZXJpdCBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiIC0tZW5hYmxlLXNwZWNzPW5vIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MGM5MGYzMTNiNGIwODUxNzU4ZWY3N2I5NTAxOTU4NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmM2Y0YjIzYWM4ZGI5YzNhOWUwZDhlZGI1OTE3MTNmM2Q3MGVmOWMzYjE3NTk3MGRkODgyM2RmYzkyYWE1YmIwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2ZGdhcHJvdG9fMi4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2ZGdhcHJvdG9fMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZjNjZTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZkZ2Fwcm90b18yLjEuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYRnJlZTg2LURHQTogWEZyZWU4NiBEaXJlY3QgR3JhcGhpY3MgQWNjZXNzIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYRnJlZTg2IFwKK0RpcmVjdCBHcmFwaGljcyBBY2Nlc3MgZXh0ZW5zaW9uLiBUaGlzIGV4dGVuc2lvbiBhbGxvd3MgZGlyZWN0IGdyYXBoaWNzIFwKK2FjY2VzcyB0byBhIGZyYW1lYnVmZmVyLWxpa2UgcmVnaW9uLCBhcyB3ZWxsIGFzIHJlbGF0aXZlIG1vdXNlIFwKK3JlcG9ydGluZy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTAxZTY2ZTRiMzE3MDg4Y2Y4NjliYzk4ZTZhZjRmYjYiCisKK1JDT05GTElDVFNfJHtQTn0gPSAieHhmODZkZ2FleHQiCitQUiA9ICJyMiIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMDM2ZGMyZmNiZjA1MmVjMTA2MjFmZDQ4YjY4ZGJiMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhYzVlZjY1MTA4ZTFmMjE0NjI4NmU1MzA4MDk3NTY4M2RhZTQ5ZmM5NDY4MDA0MmUwNGJkMWUyMDEwZTk5MDUwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2ZHJpcHJvdG9fMi4xLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZkcmlwcm90b18yLjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2Y5MjEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2ZHJpcHJvdG9fMi4xLjEuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYRnJlZTg2LURSSTogWEZyZWU4NiBEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYRnJlZTg2IFwKK0RpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgZXh0ZW5zaW9uLiAgVGhlIFhGcmVlODYtRFJJIGV4dGVuc2lvbiBpcyBcCit1c2VkIHRvIG9yZ2FuaXplIGRpcmVjdCByZW5kZXJpbmcgc3VwcG9ydCBvciAzRCBjbGllbnRzIGFuZCBoZWxwIFwKK2FyYml0cmF0ZSByZXF1ZXN0cy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWYxMDNiOWQ5NTFlMzlmZjdlMjNkMzg2ZTIwMTFmYTMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veGY4NmRyaXByb3RvLmg7ZW5kbGluZT0zNTttZDU9NDJiZTNkOGU2ZDQyOWFiNzkxNzI1NzJiYjBjZmY1NDQiCisKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxZDcxNmQwZGFjM2I2NjRlNWVlMjBjNjlkMzRiYzEwZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5YzRiOGQ3MjIxY2I2ZGM0MzA5MjY5Y2NjMDA4YTIyNzUzNjk4YWU5MjQ1YTM5OGE1OWRmMzVmMTQwNGQ2NjFmIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2bWlzY3Byb3RvXzAuOS4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2bWlzY3Byb3RvXzAuOS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NjYzZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZtaXNjcHJvdG9fMC45LjMuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYRnJlZTg2LU1pc2M6IFhGcmVlODYgbWlzY2VsbGFuZW91cyBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWEZyZWUgXAorbWlzY2VsbGFuZW91cyBleHRlbnNpb24uICBUaGUgWEZyZWU4Ni1NaXNjIGV4dGVuc2lvbiBwcm92aWRlcyBhIG1lYW5zIHRvIFwKK2FjY2VzcyBpbnB1dCBkZXZpY2UgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBzcGVjaWZpYyB0byB0aGUgWEZyZWU4Ni9Yb3JnIFwKK0REWC4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTAxZTY2ZTRiMzE3MDg4Y2Y4NjliYzk4ZTZhZjRmYjYiCisKK1BSID0gInIxIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImNhNjNiYmIzMWNmNWI3ZjM3YjIyMzdlOTIzZmYyNTdhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ1YjhlYzZhNGE4Y2EyMTA2NmRjZTExN2UwOWRjYzg4NTM5ODYyZTYxNmU2MGZiMzkxZGUwNWIzNmY2M2IwOTUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZ2aWRtb2RlcHJvdG9fMi4zLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZ2aWRtb2RlcHJvdG9fMi4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYzMTkwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4NnZpZG1vZGVwcm90b18yLjMuMS5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhGcmVlODYtVk06IFhGcmVlODYgdmlkZW8gbW9kZSBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWEZyZWU4NiBcCit2aWRlbyBtb2RlIGV4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIGFsbG93cyBjbGllbnQgYXBwbGljYXRpb25zIHRvIGdldCBcCithbmQgc2V0IHZpZGVvIG1vZGUgdGltaW5ncy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDk5YmUyZmYzODdhNDJmODQ2MjhjMzVmMzExZjE1MDIiCisKK1JDT05GTElDVFNfJHtQTn0gPSAieHhmODZ2bWV4dCIKKworUFIgPSAicjEiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTc5M2VjZWZlYWVjZmVhYmQxYWVkNmEwMTA5NTE3NGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDVkOTQ5OWFhN2I3MzIwM2ZkNmIzNTA1YjAyNTk2MjRhZmVkNWMxNmI5NDFiZDA0ZmNmMTIzZTVkZTY5ODc3MCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGluZXJhbWFwcm90b18xLjIuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGluZXJhbWFwcm90b18xLjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDA3NzRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94aW5lcmFtYXByb3RvXzEuMi4xLmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWGluZXJhbWE6IFhpbmVyYW1hIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYaW5lcmFtYSBcCitleHRlbnNpb24uICBUaGlzIGV4dGVuc2lvbiBpcyB1c2VkIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIGFib3V0IFwKK3BoeXNpY2FsIG91dHB1dCBkZXZpY2VzIHdoaWNoIG1heSBiZSBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIGxvZ2ljYWwgWCBcCitzY3JlZW4uIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNlMzk3YTUzMjZjODNkNWQwZWJmNWIzZjg3MTYzYWM2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Bhbm9yYW1pWHByb3RvLmg7ZW5kbGluZT0yNDttZDU9MDk4ZTBiYzA4OTM2OGE5ODgwOTJiM2NiZGE2MTdhNTciCisKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5OTU5ZmUwYmZiMjJhMGU3MjYwNDMzYjhkMTk5NTkwYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5Nzc1NzRiYjNkYzE5MmVjZDljNTVmNTlmOTkxZWMxZGZmMzQwYmUzZTMxMzkyYzk1ZGVmZjQyM2RhNTI0ODViIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94b3JnLXByb3RvLWNvbW1vbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hvcmctcHJvdG8tY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTQxN2M5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94b3JnLXByb3RvLWNvbW1vbi5pbmMKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJYIHByb3RvY29sIGhlYWRlcnM6ICR7WE9SR19QTn0iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD14b3JnIgorCitTRUNUSU9OID0gIngxMS9saWJzIgorTElDRU5TRSA9ICJNSVQtWCIKKworWE9SR19QTiA9ICIke0JQTn0iCisKK1NSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC9wcm90by8ke1hPUkdfUE59LSR7UFZ9LnRhci5iejIiCisKK1MgPSAiJHtXT1JLRElSfS8ke1hPUkdfUE59LSR7UFZ9IgorCitERVBFTkRTID0gInV0aWwtbWFjcm9zIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtZm9wIgorCitVTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1QgKz0gIi0td2l0aG91dC1mb3AgLS13aXRob3V0LXhtbHRvIC0td2l0aC14bWx0byIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbeG1sdG9dID0gIi0td2l0aC14bWx0bywgLS13aXRob3V0LXhtbHRvLCB4bWx0by1uYXRpdmUgZG9jYm9vay14bWwtZHRkNC1uYXRpdmUgZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbmF0aXZlIgorCisjICR7UE59IGlzIGVtcHR5IHNvIHdlIG5lZWQgdG8gdHdlYWsgLWRldiBhbmQgLWRiZyBwYWNrYWdlIGRlcGVuZGVuY2llcworUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKK1JSRUNPTU1FTkRTXyR7UE59LWRiZyA9ICIke1BOfS1kZXYgKD0gJHtFWFRFTkRQS0dWfSkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hwcm90by94cHJvdG9fZml4X2Zvcl94MzIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hwcm90by94cHJvdG9fZml4X2Zvcl94MzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQwYWQyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvL3hwcm90b19maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRG9uJ3QgYWx3YXlzIGRlZmluZSBMT05HNjQgZm9yIEFNRDY0CisgICAgCitYMzIgZGVmaW5lcyBfX2FtZDY0X18vYW1kNjQgd2l0aCAzMmJpdCBsb25nLiAgV2Ugc2hvdWxkIHNpbXBseSBjaGVjaworX19MUDY0X18gYmVmb3JlIGRlZmluaW5nIExPTkc2NCB3aXRob3V0IGNoZWNraW5nIF9fYW1kNjRfXy9hbWQ2NC4KKworVGhpcyBmaXhlcyBjb21waWxhdGlvbiB3aXRoIHgzMiB0b29sY2hhaW4uCisKK1JlY2VpdmVkIHRoaXMgcGF0Y2ggZnJvbSBILkouIEx1IDxoamwudG9vbHNAZ21haWwuY29tPgorU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8xCisKKy0tLSB4cHJvdG8tNy4wLjIyL1htZC5oLngzMgkyMDA5LTA3LTExIDA0OjE5OjUwLjAwMDAwMDAwMCAtMDcwMAorKysrIHhwcm90by03LjAuMjIvWG1kLmgJMjAxMS0xMS0zMCAxNzoxNDoxOS4yOTAzOTU4OTMgLTA4MDAKK0BAIC02Miw3ICs2Miw2IEBAIFNPRlRXQVJFLgorICAgICAgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChpYTY0KSB8fCBcCisgICAgICBkZWZpbmVkKF9fc3BhcmM2NF9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fczM5MHhfXykgfHwgXAorLSAgICAgZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQoYW1kNjQpIHx8IFwKKyAgICAgIGRlZmluZWQoX19wb3dlcnBjNjRfXykKKyAjICBkZWZpbmUgTE9ORzY0CQkJCS8qIDMyLzY0LWJpdCBhcmNoaXRlY3R1cmUgKi8KKyAjIGVuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hwcm90b183LjAuMjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hwcm90b183LjAuMjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQyN2E3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvXzcuMC4yOC5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhsaWI6IEMgTGFuZ3VhZ2UgWCBpbnRlcmZhY2UgaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSBiYXNpYyBoZWFkZXJzIGZvciB0aGUgWCBXaW5kb3cgXAorU3lzdGVtLiIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iOWUwNTExMDdkNTYyODk2NjczOWEwYjJlOWIzMjY3NiIKKworUEUgPSAiMSIKKworU1JDX1VSSSArPSAiZmlsZTovL3hwcm90b19maXhfZm9yX3gzMi5wYXRjaCIKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS1lbmFibGUtc3BlY3M9bm8iCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzY2UyZjIzMGM1ZDhmYTkyOWYzMjZhZDFmMGZhNDBhOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyOWU4NTU2OGQxZjY4Y2VlZjhhMmMwODFkYWQ5YmMwZTU1MDBhNTNjZmZmZGUyNGI1NjRkYzQzZDQ2ZGRmNmNhIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwvZ2NjbWFrZWRlcF8xLjAuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC9nY2NtYWtlZGVwXzEuMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZjJmNGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwvZ2NjbWFrZWRlcF8xLjAuMy5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIlByb2dyYW0gdG8gY3JlYXRlIGRlcGVuZGVuY2llcyBpbiBtYWtlZmlsZXMiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBnY2NtYWtlZGVwIHByb2dyYW0gY2FsbHMgJ2djYyAtTScgdG8gb3V0cHV0IG1ha2VmaWxlIFwKK3J1bGVzIGRlc2NyaWJpbmcgdGhlIGRlcGVuZGVuY2llcyBvZiBlYWNoIHNvdXJjZWZpbGUsIHNvIHRoYXQgbWFrZSBrbm93cyBcCit3aGljaCBvYmplY3QgZmlsZXMgbXVzdCBiZSByZWNvbXBpbGVkIHdoZW4gYSBkZXBlbmRlbmN5IGhhcyBjaGFuZ2VkLiIKKworcmVxdWlyZSB4b3JnLXV0aWwtY29tbW9uLmluYworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTWFrZWZpbGUuYW07ZW5kbGluZT0yMDttZDU9MjNjMjc3Mzk2ZDY5MDQxMzI0NWViYjg5YjE4YzVkNGQiCitERVNDUklQVElPTiA9ICJjcmVhdGUgZGVwZW5kZW5jaWVzIGluIG1ha2VmaWxlcyB1c2luZyAnZ2NjIC1NJyIKK0RFUEVORFMgPSAidXRpbC1tYWNyb3MiCitSREVQRU5EU18ke1BOfSA9ICJnY2MiCisKK1BSID0gInIzIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjEyN2RkYjYxMzFlYjRhNTZmZGY2NjQ0YTYzYWRlNzg4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY5ZTJlN2E1OTBlMjdmODRiNjcwOGFiN2E4MWU1NDYzOTliOTQ5YmY2NTJmYjliOTUxOTNlMGU1NDNlNmE1NDgiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL21ha2VkZXBlbmRfMS4wLjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwvbWFrZWRlcGVuZF8xLjAuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGE5NjdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL21ha2VkZXBlbmRfMS4wLjUuYmIKQEAgLTAsMCArMSwyMSBAQAorcmVxdWlyZSB4b3JnLXV0aWwtY29tbW9uLmluYworCitTVU1NQVJZID0gImNyZWF0ZSBkZXBlbmRlbmNpZXMgaW4gbWFrZWZpbGVzIgorCitERVNDUklQVElPTiA9ICJUaGUgbWFrZWRlcGVuZCBwcm9ncmFtIHJlYWRzIGVhY2ggc291cmNlZmlsZSBpbiBzZXF1ZW5jZSBcCithbmQgcGFyc2VzIGl0IGxpa2UgYSBDLXByZXByb2Nlc3NvciwgcHJvY2Vzc2luZyBcCithbGwgI2luY2x1ZGUsICNkZWZpbmUsICAjdW5kZWYsICNpZmRlZiwgI2lmbmRlZiwgI2VuZGlmLCAjaWYsICNlbGlmIFwKK2FuZCAjZWxzZSBkaXJlY3RpdmVzIHNvIHRoYXQgaXQgY2FuIGNvcnJlY3RseSB0ZWxsIHdoaWNoICNpbmNsdWRlLCBcCitkaXJlY3RpdmVzIHdvdWxkIGJlIHVzZWQgaW4gYSBjb21waWxhdGlvbi4gQW55ICNpbmNsdWRlLCBkaXJlY3RpdmVzIFwKK2NhbiByZWZlcmVuY2UgZmlsZXMgaGF2aW5nIG90aGVyICNpbmNsdWRlIGRpcmVjdGl2ZXMsIGFuZCBwYXJzaW5nIHdpbGwgXAorb2NjdXIgaW4gdGhlc2UgZmlsZXMgYXMgd2VsbC4iCisKK0RFUEVORFMgPSAieHByb3RvIHV0aWwtbWFjcm9zIgorUEUgPSAiMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQzYTZlZGEzNGI0OGVlODIxYjNiNjZmNGY3NTNjZTRmIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWZiMmQ3YzdlMjI4NDA5NDc4NjNlZmFlZGMxNzU3NDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTAzOTAzZDQxZmI1YmFkYjczY2I3MGQ3YjM3NDBjOGIzMGZlMWNjNjhjNTA0ZDNiNmE4NWU2NjQ0YzRlNTAwNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC91dGlsLW1hY3Jvc18xLjE5LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwvdXRpbC1tYWNyb3NfMS4xOS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2Y2Y1MGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwvdXRpbC1tYWNyb3NfMS4xOS4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiWCBhdXRvdG9vbHMgbWFjcm9zIgorCitERVNDUklQVElPTiA9ICJNNCBhdXRvdG9vbHMgbWFjcm9zIHVzZWQgYnkgdmFyaW91cyBYLm9yZyBwcm9ncmFtcy4iCisKK3JlcXVpcmUgeG9yZy11dGlsLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xOTcwNTExZmRkZDQzOWIwN2E2YmE3ODlkMjhmZjY2MiIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjQwZTFjYWE0OWE3MWEyNmUwYWE2OGRkZDAwMjAzNzE3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBkNGRmNTFiMjkwMjNkYWYyZjYzYWViZjNlYmM2MzhlYTg4ZWZlZGZkNTYwYWI1ODY2NzQxYWIzZjkyYWNhYTEiCisKKyMgJHtQTn0gaXMgZW1wdHkgc28gd2UgbmVlZCB0byB0d2VhayAtZGV2IGFuZCAtZGJnIHBhY2thZ2UgZGVwZW5kZW5jaWVzCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL3hvcmctdXRpbC1jb21tb24uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL3hvcmctdXRpbC1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZDAyMmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwveG9yZy11dGlsLWNvbW1vbi5pbmMKQEAgLTAsMCArMSwxMyBAQAorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9eG9yZyIKKworU0VDVElPTiA9ICJ4MTEvdXRpbHMiCitMSUNFTlNFID0gIk1JVC1YIgorCitYT1JHX1BOID0gIiR7QlBOfSIKKworU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL3V0aWwvJHtYT1JHX1BOfS0ke1BWfS50YXIuZ3oiCisKK1MgPSAiJHtXT1JLRElSfS8ke1hPUkdfUE59LSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnLzEwLXByZWxvYWQtbW9kdWxlcy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NlYjZmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnLzEwLXByZWxvYWQtbW9kdWxlcy5jb25mCkBAIC0wLDAgKzEsOSBAQAorU2VjdGlvbiAiTW9kdWxlIgorICAgIExvYWQgImZiZGV2aHciCisgICAgTG9hZCAiZmIiCisgICAgTG9hZCAic2hhZG93IgorICAgIExvYWQgInNoYWRvd2ZiIgorICAgIExvYWQgInZiZSIKKyAgICBMb2FkICJ2Z2FodyIKK0VuZFNlY3Rpb24KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdWFybS94b3JnLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11YXJtL3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjlhZTIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdWFybS94b3JnLmNvbmYKQEAgLTAsMCArMSw2OSBAQAorCitTZWN0aW9uICJGaWxlcyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlS2V5Ym9hcmQiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICIvZGV2L2lucHV0L2J5LXBhdGgvcGxhdGZvcm0taTgwNDItc2VyaW8tMC1ldmVudC1rYmQiCisgICAgT3B0aW9uICAgICAgICAiWGtiUnVsZXMiICAgICJ4b3JnIgorICAgIE9wdGlvbiAgICAgICAgIlhrYk1vZGVsIiAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiWGtiTGF5b3V0IiAgICAidXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgRHJpdmVyICAgICAgICAibW91c2UiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvbWljZSIKKyAgICBPcHRpb24gICAgICAgICJQcm90b2NvbCIgICAgICAgICJJbVBTLzIiCisgICAgT3B0aW9uICAgICAgICAiWkF4aXNNYXBwaW5nIiAgICAgICAgIjQgNSIKKyAgICBPcHRpb24gICAgICAgICJFbXVsYXRlM0J1dHRvbnMiICAgICJ0cnVlIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJRZW11IFRhYmxldCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAiCisgICAgT3B0aW9uICAgICAgICAiVVNCIiAgICAgICAgICAgIm9uIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJEZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBEcml2ZXIgICAgICAgICJmYmRldiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgT3B0aW9uICAgICAgICAiRFBNUyIKKyAgICAjIDEwMjR4NjAwIDU5Ljg1IEh6IChDVlQpIGhzeW5jOiAzNy4zNSBrSHo7IHBjbGs6IDQ5LjAwIE1IegorICAgIE1vZGVsaW5lICIxMDI0eDYwMF82MC4wMCIgICA0OS4wMCAgMTAyNCAxMDcyIDExNjggMTMxMiAgNjAwIDYwMyA2MTMgNjI0IC1oc3luYyArdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA2MEh6IChJbmR1c3RyeSBzdGFuZGFyZCkgaHN5bmM6IDMxLjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMjUuMiAgNjQwICA2NTYgIDc1MiAgODAwICAgIDQ4MCAgNDkwICA0OTIgIDUyNSAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzJIeiAoVkVTQSkgaHN5bmM6IDM3LjlrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NjQgIDcwNCAgODMyICAgIDQ4MCAgNDg5ICA0OTEgIDUyMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzVIeiAoVkVTQSkgaHN5bmM6IDM3LjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NTYgIDcyMCAgODQwICAgIDQ4MCAgNDgxICA0ODQgIDUwMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgODVIeiAoVkVTQSkgaHN5bmM6IDQzLjNrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzYuMCAgNjQwICA2OTYgIDc1MiAgODMyICAgIDQ4MCAgNDgxICA0ODQgIDUwOSAtaHN5bmMgLXZzeW5jCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBEZXZpY2UgICAgICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIE1vbml0b3IgICAgICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgU3ViU2VjdGlvbiAiRGlzcGxheSIKKyAgICAgICAgTW9kZXMgICAgICI2NDB4NDgwIgorICAgIEVuZFN1YlNlY3Rpb24KK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyTGF5b3V0IgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgTGF5b3V0IgorICAgIFNjcmVlbiAgICAgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIElucHV0RGV2aWNlICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgICMgSW5wdXREZXZpY2UgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgSW5wdXREZXZpY2UgICAgIlFFTVUgVGFibGV0IgorICAgIE9wdGlvbiAgICAgICAgICJBbGxvd0VtcHR5SW5wdXQiICJubyIKK0VuZFNlY3Rpb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVtaXBzL3hvcmcuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVtaXBzL3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmM4YjUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdW1pcHMveG9yZy5jb25mCkBAIC0wLDAgKzEsNzAgQEAKKworU2VjdGlvbiAiRmlsZXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZUtleWJvYXJkIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAiL2Rldi9pbnB1dC9ieS1wYXRoL3BsYXRmb3JtLWk4MDQyLXNlcmlvLTAtZXZlbnQta2JkIgorICAgIE9wdGlvbiAgICAgICAgIlhrYlJ1bGVzIiAgICAieG9yZyIKKyAgICBPcHRpb24gICAgICAgICJYa2JNb2RlbCIgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIlhrYkxheW91dCIgICAgInVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIERyaXZlciAgICAgICAgIm1vdXNlIgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L21pY2UiCisgICAgT3B0aW9uICAgICAgICAiUHJvdG9jb2wiICAgICAgICAiSW1QUy8yIgorICAgIE9wdGlvbiAgICAgICAgIlpBeGlzTWFwcGluZyIgICAgICAgICI0IDUiCisgICAgT3B0aW9uICAgICAgICAiRW11bGF0ZTNCdXR0b25zIiAgICAidHJ1ZSIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiUWVtdSBUYWJsZXQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIgorICAgIE9wdGlvbiAgICAgICAgIlVTQiIgICAgICAgICAgICJvbiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiRGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgRHJpdmVyICAgICAgICAiZmJkZXYiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIk1vbml0b3IiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIE9wdGlvbiAgICAgICAgIkRQTVMiCisgICAgIyAxMDI0eDYwMCA1OS44NSBIeiAoQ1ZUKSBoc3luYzogMzcuMzUga0h6OyBwY2xrOiA0OS4wMCBNSHoKKyAgICBNb2RlbGluZSAiMTAyNHg2MDBfNjAuMDAiICAgNDkuMDAgIDEwMjQgMTA3MiAxMTY4IDEzMTIgIDYwMCA2MDMgNjEzIDYyNCAtaHN5bmMgK3ZzeW5jCisgICAgIyA2NDB4NDgwIEAgNjBIeiAoSW5kdXN0cnkgc3RhbmRhcmQpIGhzeW5jOiAzMS41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDI1LjIgIDY0MCAgNjU2ICA3NTIgIDgwMCAgICA0ODAgIDQ5MCAgNDkyICA1MjUgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDcySHogKFZFU0EpIGhzeW5jOiAzNy45a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjY0ICA3MDQgIDgzMiAgICA0ODAgIDQ4OSAgNDkxICA1MjAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDc1SHogKFZFU0EpIGhzeW5jOiAzNy41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjU2ICA3MjAgIDg0MCAgICA0ODAgIDQ4MSAgNDg0ICA1MDAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDg1SHogKFZFU0EpIGhzeW5jOiA0My4za0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDM2LjAgIDY0MCAgNjk2ICA3NTIgIDgzMiAgICA0ODAgIDQ4MSAgNDg0ICA1MDkgLWhzeW5jIC12c3luYworRW5kU2VjdGlvbgorCitTZWN0aW9uICJTY3JlZW4iCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgRGV2aWNlICAgICAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBNb25pdG9yICAgICAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIERlZmF1bHREZXB0aCAgMTYKKyAgICBTdWJTZWN0aW9uICJEaXNwbGF5IgorICAgICAgICBNb2RlcyAgICAgIjY0MHg0ODAiCisgICAgRW5kU3ViU2VjdGlvbgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJMYXlvdXQiCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBMYXlvdXQiCisgICAgU2NyZWVuICAgICAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgSW5wdXREZXZpY2UgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgIyBJbnB1dERldmljZSAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBJbnB1dERldmljZSAgICAiUUVNVSBUYWJsZXQiCisgICAgT3B0aW9uICAgICAgICAgIkFsbG93RW1wdHlJbnB1dCIgIm5vIgorRW5kU2VjdGlvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdW1pcHM2NC94b3JnLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11bWlwczY0L3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjlhZTIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdW1pcHM2NC94b3JnLmNvbmYKQEAgLTAsMCArMSw2OSBAQAorCitTZWN0aW9uICJGaWxlcyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlS2V5Ym9hcmQiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICIvZGV2L2lucHV0L2J5LXBhdGgvcGxhdGZvcm0taTgwNDItc2VyaW8tMC1ldmVudC1rYmQiCisgICAgT3B0aW9uICAgICAgICAiWGtiUnVsZXMiICAgICJ4b3JnIgorICAgIE9wdGlvbiAgICAgICAgIlhrYk1vZGVsIiAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiWGtiTGF5b3V0IiAgICAidXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgRHJpdmVyICAgICAgICAibW91c2UiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvbWljZSIKKyAgICBPcHRpb24gICAgICAgICJQcm90b2NvbCIgICAgICAgICJJbVBTLzIiCisgICAgT3B0aW9uICAgICAgICAiWkF4aXNNYXBwaW5nIiAgICAgICAgIjQgNSIKKyAgICBPcHRpb24gICAgICAgICJFbXVsYXRlM0J1dHRvbnMiICAgICJ0cnVlIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJRZW11IFRhYmxldCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAiCisgICAgT3B0aW9uICAgICAgICAiVVNCIiAgICAgICAgICAgIm9uIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJEZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBEcml2ZXIgICAgICAgICJmYmRldiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgT3B0aW9uICAgICAgICAiRFBNUyIKKyAgICAjIDEwMjR4NjAwIDU5Ljg1IEh6IChDVlQpIGhzeW5jOiAzNy4zNSBrSHo7IHBjbGs6IDQ5LjAwIE1IegorICAgIE1vZGVsaW5lICIxMDI0eDYwMF82MC4wMCIgICA0OS4wMCAgMTAyNCAxMDcyIDExNjggMTMxMiAgNjAwIDYwMyA2MTMgNjI0IC1oc3luYyArdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA2MEh6IChJbmR1c3RyeSBzdGFuZGFyZCkgaHN5bmM6IDMxLjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMjUuMiAgNjQwICA2NTYgIDc1MiAgODAwICAgIDQ4MCAgNDkwICA0OTIgIDUyNSAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzJIeiAoVkVTQSkgaHN5bmM6IDM3LjlrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NjQgIDcwNCAgODMyICAgIDQ4MCAgNDg5ICA0OTEgIDUyMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzVIeiAoVkVTQSkgaHN5bmM6IDM3LjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NTYgIDcyMCAgODQwICAgIDQ4MCAgNDgxICA0ODQgIDUwMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgODVIeiAoVkVTQSkgaHN5bmM6IDQzLjNrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzYuMCAgNjQwICA2OTYgIDc1MiAgODMyICAgIDQ4MCAgNDgxICA0ODQgIDUwOSAtaHN5bmMgLXZzeW5jCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBEZXZpY2UgICAgICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIE1vbml0b3IgICAgICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgU3ViU2VjdGlvbiAiRGlzcGxheSIKKyAgICAgICAgTW9kZXMgICAgICI2NDB4NDgwIgorICAgIEVuZFN1YlNlY3Rpb24KK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyTGF5b3V0IgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgTGF5b3V0IgorICAgIFNjcmVlbiAgICAgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIElucHV0RGV2aWNlICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgICMgSW5wdXREZXZpY2UgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgSW5wdXREZXZpY2UgICAgIlFFTVUgVGFibGV0IgorICAgIE9wdGlvbiAgICAgICAgICJBbGxvd0VtcHR5SW5wdXQiICJubyIKK0VuZFNlY3Rpb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVwcGMveG9yZy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXBwYy94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5YWUyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVwcGMveG9yZy5jb25mCkBAIC0wLDAgKzEsNjkgQEAKKworU2VjdGlvbiAiRmlsZXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZUtleWJvYXJkIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAiL2Rldi9pbnB1dC9ieS1wYXRoL3BsYXRmb3JtLWk4MDQyLXNlcmlvLTAtZXZlbnQta2JkIgorICAgIE9wdGlvbiAgICAgICAgIlhrYlJ1bGVzIiAgICAieG9yZyIKKyAgICBPcHRpb24gICAgICAgICJYa2JNb2RlbCIgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIlhrYkxheW91dCIgICAgInVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIERyaXZlciAgICAgICAgIm1vdXNlIgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L21pY2UiCisgICAgT3B0aW9uICAgICAgICAiUHJvdG9jb2wiICAgICAgICAiSW1QUy8yIgorICAgIE9wdGlvbiAgICAgICAgIlpBeGlzTWFwcGluZyIgICAgICAgICI0IDUiCisgICAgT3B0aW9uICAgICAgICAiRW11bGF0ZTNCdXR0b25zIiAgICAidHJ1ZSIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiUWVtdSBUYWJsZXQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIgorICAgIE9wdGlvbiAgICAgICAgIlVTQiIgICAgICAgICAgICJvbiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiRGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgRHJpdmVyICAgICAgICAiZmJkZXYiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIk1vbml0b3IiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIE9wdGlvbiAgICAgICAgIkRQTVMiCisgICAgIyAxMDI0eDYwMCA1OS44NSBIeiAoQ1ZUKSBoc3luYzogMzcuMzUga0h6OyBwY2xrOiA0OS4wMCBNSHoKKyAgICBNb2RlbGluZSAiMTAyNHg2MDBfNjAuMDAiICAgNDkuMDAgIDEwMjQgMTA3MiAxMTY4IDEzMTIgIDYwMCA2MDMgNjEzIDYyNCAtaHN5bmMgK3ZzeW5jCisgICAgIyA2NDB4NDgwIEAgNjBIeiAoSW5kdXN0cnkgc3RhbmRhcmQpIGhzeW5jOiAzMS41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDI1LjIgIDY0MCAgNjU2ICA3NTIgIDgwMCAgICA0ODAgIDQ5MCAgNDkyICA1MjUgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDcySHogKFZFU0EpIGhzeW5jOiAzNy45a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjY0ICA3MDQgIDgzMiAgICA0ODAgIDQ4OSAgNDkxICA1MjAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDc1SHogKFZFU0EpIGhzeW5jOiAzNy41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjU2ICA3MjAgIDg0MCAgICA0ODAgIDQ4MSAgNDg0ICA1MDAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDg1SHogKFZFU0EpIGhzeW5jOiA0My4za0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDM2LjAgIDY0MCAgNjk2ICA3NTIgIDgzMiAgICA0ODAgIDQ4MSAgNDg0ICA1MDkgLWhzeW5jIC12c3luYworRW5kU2VjdGlvbgorCitTZWN0aW9uICJTY3JlZW4iCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgRGV2aWNlICAgICAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBNb25pdG9yICAgICAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIFN1YlNlY3Rpb24gIkRpc3BsYXkiCisgICAgICAgIE1vZGVzICAgICAiNjQweDQ4MCIKKyAgICBFbmRTdWJTZWN0aW9uCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNlcnZlckxheW91dCIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IExheW91dCIKKyAgICBTY3JlZW4gICAgICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBJbnB1dERldmljZSAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICAjIElucHV0RGV2aWNlICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIElucHV0RGV2aWNlICAgICJRRU1VIFRhYmxldCIKKyAgICBPcHRpb24gICAgICAgICAiQWxsb3dFbXB0eUlucHV0IiAibm8iCitFbmRTZWN0aW9uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11c2g0L3hvcmcuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVzaDQveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOWFlMjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11c2g0L3hvcmcuY29uZgpAQCAtMCwwICsxLDY5IEBACisKK1NlY3Rpb24gIkZpbGVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVLZXlib2FyZCIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgIi9kZXYvaW5wdXQvYnktcGF0aC9wbGF0Zm9ybS1pODA0Mi1zZXJpby0wLWV2ZW50LWtiZCIKKyAgICBPcHRpb24gICAgICAgICJYa2JSdWxlcyIgICAgInhvcmciCisgICAgT3B0aW9uICAgICAgICAiWGtiTW9kZWwiICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJYa2JMYXlvdXQiICAgICJ1cyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBEcml2ZXIgICAgICAgICJtb3VzZSIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC9taWNlIgorICAgIE9wdGlvbiAgICAgICAgIlByb3RvY29sIiAgICAgICAgIkltUFMvMiIKKyAgICBPcHRpb24gICAgICAgICJaQXhpc01hcHBpbmciICAgICAgICAiNCA1IgorICAgIE9wdGlvbiAgICAgICAgIkVtdWxhdGUzQnV0dG9ucyIgICAgInRydWUiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIlFlbXUgVGFibGV0IgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCIKKyAgICBPcHRpb24gICAgICAgICJVU0IiICAgICAgICAgICAib24iCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIkRldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIERyaXZlciAgICAgICAgImZiZGV2IgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJNb25pdG9yIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBPcHRpb24gICAgICAgICJEUE1TIgorICAgICMgMTAyNHg2MDAgNTkuODUgSHogKENWVCkgaHN5bmM6IDM3LjM1IGtIejsgcGNsazogNDkuMDAgTUh6CisgICAgTW9kZWxpbmUgIjEwMjR4NjAwXzYwLjAwIiAgIDQ5LjAwICAxMDI0IDEwNzIgMTE2OCAxMzEyICA2MDAgNjAzIDYxMyA2MjQgLWhzeW5jICt2c3luYworICAgICMgNjQweDQ4MCBAIDYwSHogKEluZHVzdHJ5IHN0YW5kYXJkKSBoc3luYzogMzEuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAyNS4yICA2NDAgIDY1NiAgNzUyICA4MDAgICAgNDgwICA0OTAgIDQ5MiAgNTI1IC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3Mkh6IChWRVNBKSBoc3luYzogMzcuOWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY2NCAgNzA0ICA4MzIgICAgNDgwICA0ODkgIDQ5MSAgNTIwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3NUh6IChWRVNBKSBoc3luYzogMzcuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY1NiAgNzIwICA4NDAgICAgNDgwICA0ODEgIDQ4NCAgNTAwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA4NUh6IChWRVNBKSBoc3luYzogNDMuM2tIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzNi4wICA2NDAgIDY5NiAgNzUyICA4MzIgICAgNDgwICA0ODEgIDQ4NCAgNTA5IC1oc3luYyAtdnN5bmMKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2NyZWVuIgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIERldmljZSAgICAgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgTW9uaXRvciAgICAgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBTdWJTZWN0aW9uICJEaXNwbGF5IgorICAgICAgICBNb2RlcyAgICAgIjY0MHg0ODAiCisgICAgRW5kU3ViU2VjdGlvbgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJMYXlvdXQiCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBMYXlvdXQiCisgICAgU2NyZWVuICAgICAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgSW5wdXREZXZpY2UgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgIyBJbnB1dERldmljZSAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBJbnB1dERldmljZSAgICAiUUVNVSBUYWJsZXQiCisgICAgT3B0aW9uICAgICAgICAgIkFsbG93RW1wdHlJbnB1dCIgIm5vIgorRW5kU2VjdGlvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXg4Ni02NC94b3JnLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11eDg2LTY0L3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmRhOWVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXg4Ni02NC94b3JnLmNvbmYKQEAgLTAsMCArMSw2NCBAQAorCitTZWN0aW9uICJGaWxlcyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlS2V5Ym9hcmQiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICIvZGV2L2lucHV0L2J5LXBhdGgvcGxhdGZvcm0taTgwNDItc2VyaW8tMC1ldmVudC1rYmQiCisgICAgT3B0aW9uICAgICAgICAiWGtiUnVsZXMiICAgICJ4b3JnIgorICAgIE9wdGlvbiAgICAgICAgIlhrYk1vZGVsIiAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiWGtiTGF5b3V0IiAgICAidXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgRHJpdmVyICAgICAgICAidm1tb3VzZSIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC9taWNlIgorICAgIE9wdGlvbiAgICAgICAgIlByb3RvY29sIiAgICAgICAgIkltUFMvMiIKKyAgICBPcHRpb24gICAgICAgICJaQXhpc01hcHBpbmciICAgICAgICAiNCA1IgorICAgIE9wdGlvbiAgICAgICAgIkVtdWxhdGUzQnV0dG9ucyIgICAgInRydWUiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIlFlbXUgVGFibGV0IgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCIKKyAgICBPcHRpb24gICAgICAgICJVU0IiICAgICAgICAgICAib24iCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIk1vbml0b3IiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIE9wdGlvbiAgICAgICAgIkRQTVMiCisgICAgIyAxMDI0eDYwMCA1OS44NSBIeiAoQ1ZUKSBoc3luYzogMzcuMzUga0h6OyBwY2xrOiA0OS4wMCBNSHoKKyAgICBNb2RlbGluZSAiMTAyNHg2MDBfNjAuMDAiICAgNDkuMDAgIDEwMjQgMTA3MiAxMTY4IDEzMTIgIDYwMCA2MDMgNjEzIDYyNCAtaHN5bmMgK3ZzeW5jCisgICAgIyA2NDB4NDgwIEAgNjBIeiAoSW5kdXN0cnkgc3RhbmRhcmQpIGhzeW5jOiAzMS41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDI1LjIgIDY0MCAgNjU2ICA3NTIgIDgwMCAgICA0ODAgIDQ5MCAgNDkyICA1MjUgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDcySHogKFZFU0EpIGhzeW5jOiAzNy45a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjY0ICA3MDQgIDgzMiAgICA0ODAgIDQ4OSAgNDkxICA1MjAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDc1SHogKFZFU0EpIGhzeW5jOiAzNy41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjU2ICA3MjAgIDg0MCAgICA0ODAgIDQ4MSAgNDg0ICA1MDAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDg1SHogKFZFU0EpIGhzeW5jOiA0My4za0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDM2LjAgIDY0MCAgNjk2ICA3NTIgIDgzMiAgICA0ODAgIDQ4MSAgNDg0ICA1MDkgLWhzeW5jIC12c3luYworRW5kU2VjdGlvbgorCitTZWN0aW9uICJTY3JlZW4iCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgRGV2aWNlICAgICAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBNb25pdG9yICAgICAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIFN1YlNlY3Rpb24gIkRpc3BsYXkiCisgICAgICAgIE1vZGVzICAgICAiNjQweDQ4MCIKKyAgICBFbmRTdWJTZWN0aW9uCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNlcnZlckxheW91dCIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IExheW91dCIKKyAgICBTY3JlZW4gICAgICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBJbnB1dERldmljZSAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICAjIElucHV0RGV2aWNlICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIElucHV0RGV2aWNlICAgICJRRU1VIFRhYmxldCIKKyAgICBPcHRpb24gICAgICAgICAiQWxsb3dFbXB0eUlucHV0IiAibm8iCitFbmRTZWN0aW9uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11eDg2L3hvcmcuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXV4ODYveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZGE5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11eDg2L3hvcmcuY29uZgpAQCAtMCwwICsxLDY0IEBACisKK1NlY3Rpb24gIkZpbGVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVLZXlib2FyZCIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgIi9kZXYvaW5wdXQvYnktcGF0aC9wbGF0Zm9ybS1pODA0Mi1zZXJpby0wLWV2ZW50LWtiZCIKKyAgICBPcHRpb24gICAgICAgICJYa2JSdWxlcyIgICAgInhvcmciCisgICAgT3B0aW9uICAgICAgICAiWGtiTW9kZWwiICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJYa2JMYXlvdXQiICAgICJ1cyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBEcml2ZXIgICAgICAgICJ2bW1vdXNlIgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L21pY2UiCisgICAgT3B0aW9uICAgICAgICAiUHJvdG9jb2wiICAgICAgICAiSW1QUy8yIgorICAgIE9wdGlvbiAgICAgICAgIlpBeGlzTWFwcGluZyIgICAgICAgICI0IDUiCisgICAgT3B0aW9uICAgICAgICAiRW11bGF0ZTNCdXR0b25zIiAgICAidHJ1ZSIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiUWVtdSBUYWJsZXQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIgorICAgIE9wdGlvbiAgICAgICAgIlVTQiIgICAgICAgICAgICJvbiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgT3B0aW9uICAgICAgICAiRFBNUyIKKyAgICAjIDEwMjR4NjAwIDU5Ljg1IEh6IChDVlQpIGhzeW5jOiAzNy4zNSBrSHo7IHBjbGs6IDQ5LjAwIE1IegorICAgIE1vZGVsaW5lICIxMDI0eDYwMF82MC4wMCIgICA0OS4wMCAgMTAyNCAxMDcyIDExNjggMTMxMiAgNjAwIDYwMyA2MTMgNjI0IC1oc3luYyArdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA2MEh6IChJbmR1c3RyeSBzdGFuZGFyZCkgaHN5bmM6IDMxLjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMjUuMiAgNjQwICA2NTYgIDc1MiAgODAwICAgIDQ4MCAgNDkwICA0OTIgIDUyNSAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzJIeiAoVkVTQSkgaHN5bmM6IDM3LjlrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NjQgIDcwNCAgODMyICAgIDQ4MCAgNDg5ICA0OTEgIDUyMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzVIeiAoVkVTQSkgaHN5bmM6IDM3LjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NTYgIDcyMCAgODQwICAgIDQ4MCAgNDgxICA0ODQgIDUwMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgODVIeiAoVkVTQSkgaHN5bmM6IDQzLjNrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzYuMCAgNjQwICA2OTYgIDc1MiAgODMyICAgIDQ4MCAgNDgxICA0ODQgIDUwOSAtaHN5bmMgLXZzeW5jCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBEZXZpY2UgICAgICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIE1vbml0b3IgICAgICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgU3ViU2VjdGlvbiAiRGlzcGxheSIKKyAgICAgICAgTW9kZXMgICAgICI2NDB4NDgwIgorICAgIEVuZFN1YlNlY3Rpb24KK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyTGF5b3V0IgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgTGF5b3V0IgorICAgIFNjcmVlbiAgICAgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIElucHV0RGV2aWNlICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgICMgSW5wdXREZXZpY2UgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgSW5wdXREZXZpY2UgICAgIlFFTVUgVGFibGV0IgorICAgIE9wdGlvbiAgICAgICAgICJBbGxvd0VtcHR5SW5wdXQiICJubyIKK0VuZFNlY3Rpb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3hvcmcuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcveG9yZy5jb25mCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA3YzIwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIGNvbmZpZ3VyYXRpb24gZmlsZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmciCitTRUNUSU9OID0gIngxMS9iYXNlIgorTElDRU5TRSA9ICJNSVQtWCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorUFIgPSAicjMzIgorCitTUkNfVVJJID0gImZpbGU6Ly94b3JnLmNvbmYiCisKK1NSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICJcCisgICAgICAgICAgZmlsZTovLzEwLXByZWxvYWQtbW9kdWxlcy5jb25mIFwKKyIKKworUyA9ICIke1dPUktESVJ9IgorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9YMTEveG9yZy5jb25mIgorQ09ORkZJTEVTXyR7UE59X2FwcGVuZF9saWJjLW11c2wgPSAiICR7c3lzY29uZmRpcn0vWDExL3hvcmcuY29uZi5kLzEwLXByZWxvYWQtbW9kdWxlcy5jb25mIgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworZG9faW5zdGFsbCAoKSB7CisJaWYgdGVzdCAtcyAke1dPUktESVJ9L3hvcmcuY29uZjsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9YMTEKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0veG9yZy5jb25mICR7RH0vJHtzeXNjb25mZGlyfS9YMTEvCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmRfbGliYy1tdXNsICgpIHsKKwlpbnN0YWxsIC1EbSAwNjQ0ICR7V09SS0RJUn0vMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS94b3JnLmNvbmYuZC8xMC1wcmVsb2FkLW1vZHVsZXMuY29uZgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzFjMDJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy5pbmMKQEAgLTAsMCArMSwxNzAgQEAKK1NVTU1BUlkgPSAiVGhlIFguT3JnIFggc2VydmVyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54Lm9yZyIKK1NFQ1RJT04gPSAieDExL2Jhc2UiCitMSUNFTlNFID0gIk1JVC1YIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWRmODc5NTBhZjUxYWMyYzU4MjIwOTQ1NTNlYTE4ODAiCisKKyMgeGY4Ni0qLSogcGFja2FnZXMgZGVwZW5kIG9uIGFuIFggc2VydmVyIGJ1aWx0IHdpdGggdGhlIHhmcmVlODYgRERYCisjIHNvIHdlIGhhdmUgYSB2aXJ0dWFsIHRvIHJlcHJlc2VudCB0aGF0OgorIyBkZXByZWNhdGVkLCB3ZSBzaG91bGQgdXNlIHZpcnR1YWwveHNlcnZlciBpbnN0ZWFkCitQUk9WSURFUyA9ICJ2aXJ0dWFsL3hzZXJ2ZXIteGY4NiIKKworIyBPdGhlciBwYWNrYWdlcyB0ZW5kIHRvIGp1c3QgY2FyZSB0aGF0IHRoZXJlIGlzICphbiogWCBzZXJ2ZXI6CitQUk9WSURFUyArPSAidmlydHVhbC94c2VydmVyIgorCitQRSA9ICIyIgorSU5DX1BSID0gInI4IgorCitYT1JHX1BOID0gInhvcmctc2VydmVyIgorU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL3hzZXJ2ZXIvJHtYT1JHX1BOfS0ke1BWfS50YXIuYnoyIgorU1JDX1VSSSArPSAiZmlsZTovL21hY3JvX3R3ZWFrLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vJHtYT1JHX1BOfS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BST1RPX0RFUFMgPSAicmFuZHJwcm90byByZW5kZXJwcm90byBmaXhlc3Byb3RvIGRhbWFnZXByb3RvIHhleHRwcm90byB4cHJvdG8geGY4NmRnYXByb3RvIHhmODZtaXNjcHJvdG8geGY4NnZpZG1vZGVwcm90byBjb21wb3NpdGVwcm90byByZWNvcmRwcm90byByZXNvdXJjZXByb3RvIHZpZGVvcHJvdG8gc2NybnNhdmVycHJvdG8gIHhpbmVyYW1hcHJvdG8gZm9udHNwcm90byBrYnByb3RvIGlucHV0cHJvdG8gYmlncmVxc3Byb3RvIHhjbWlzY3Byb3RvIHByZXNlbnRwcm90byIKK0xJQl9ERVBTID0gInBpeG1hbiBsaWJ4Zm9udCB4dHJhbnMgbGlieGF1IGxpYnhleHQgbGlieGRtY3AgbGliZHJtIGxpYnhrYmZpbGUgbGlicGNpYWNjZXNzIG9wZW5zc2wgbGliZ2NyeXB0IgorREVQRU5EUyA9ICIke1BST1RPX0RFUFN9ICR7TElCX0RFUFN9IGZvbnQtdXRpbCIKKworIyBTcGxpdCBvdXQgc29tZSBtb2R1bGVzIGFuZCBleHRlbnNpb25zIGZyb20gdGhlIG1haW4gcGFja2FnZQorIyBUaGVzZSBhcmVuJ3QgbmVlZGVkIGZvciBiYXNpYyBvcGVyYXRpb25zIGFuZCBvbmx5IHRha2UgdXAgc3BhY2U6CisjICAzMi4wayAgIGxpYmRyaS5zbworIyAgOTEuMGsgICBsaWJleGEuc28KKyMgIDMzNi4wayAgbGliZ2x4LnNvCisjICAxMzYwayAgIGxpYmludDEwLnNvCisjICAxODAuMGsgIGxpYndmYi5zbworIyAgMzIwLjBrICBsaWJ4YWEuc28KKyMgIDEyNC4wayAgbGlieGYxYnBwLnNvCisjICA4NC4wayAgIGxpYnhmNGJwcC5zbworIyAgICAgICAgICBsaWJyZWNvcmQuc28KKyMgICAgICAgICAgbGliZXh0bW9kLnNvCisjICAgICAgICAgIGxpYmRiZS5zbworCitQQUNLQUdFUyA9KyAiJHtQTn0tc2VjdXJpdHktcG9saWN5IFwKKyAgICAgICAgICAgICAke1BOfS1zZGwgXAorICAgICAgICAgICAgICR7UE59LWZiZGV2IFwKKyAgICAgICAgICAgICAke1BOfS14dmZiIFwKKyAgICAgICAgICAgICAke1BOfS11dGlscyBcCisgICAgICAgICAgICAgJHtQTn0teGVwaHlyIFwKKyAgICAgICAgICAgICAke1BOfS14d2F5bGFuZCBcCisgICAgICAgICAgICAgJHtQTn0tbXVsdGltZWRpYS1tb2R1bGVzIFwKKyAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZHJpIFwKKyAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZHJpMiBcCisgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWdseCBcCisgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLXJlY29yZCBcCisgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWV4dG1vZCBcCisgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRiZSBcCisgICAgICAgICAgICAgJHtQTn0tbW9kdWxlLWxpYmludDEwIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGliYWZiIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGlid2ZiICBcCisgICAgICAgICAgICAgJHtQTn0tbW9kdWxlLWxpYm1mYiBcCisgICAgICAgICAgICAgJHtQTn0tbW9kdWxlLWxpYmNmYiBcCisgICAgICAgICAgICAgJHtQTn0tbW9kdWxlLWV4YSBcCisgICAgICAgICAgICAgJHtQTn0tbW9kdWxlLXhhYSBcCisgICAgICAgICAgICAgJHtQTn0tbW9kdWxlLWxpYnhmMWJwcCBcCisgICAgICAgICAgICAgJHtQTn0tbW9kdWxlLWxpYnhmNGJwcCBcCisgICAgICAgICAgICAgeGY4Ni12aWRlby1tb2Rlc2V0dGluZyIKKworU1VNTUFSWV94Zjg2LXZpZGVvLW1vZGVzZXR0aW5nID0gIlguT3JnIFggc2VydmVyIC0tIG1vZGVzZXR0aW5nIGRpc3BsYXkgZHJpdmVyIgorSU5TQU5FX1NLSVBfeGY4Ni12aWRlby1tb2Rlc2V0dGluZyA9ICJ4b3JnLWRyaXZlci1hYmkiCisKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIke1BOfS1zZWN1cml0eS1wb2xpY3kgeGtleWJvYXJkLWNvbmZpZyByZ2IgeHNlcnZlci14Zjg2LWNvbmZpZyB4a2Jjb21wIgorUkRFUEVORFNfJHtQTn0teHZmYiArPSAieGtleWJvYXJkLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leGEgPSAiJHtQTn0gKD0gJHtFWFRFTkRQS0dWfSkiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfSAke2xpYmRpcn0vWDExL09wdGlvbnMgJHtsaWJkaXJ9L1gxMS9DYXJkcyAke2xpYmRpcn0vWDExL2dldGNvbmZpZyAke2xpYmRpcn0vWDExL2V0YyAke2xpYmRpcn0vbW9kdWxlcy8qLnNvICR7bGliZGlyfS94b3JnL21vZHVsZXMvKi5zbyAvZXRjL1gxMSAke2xpYmRpcn0veG9yZy9wcm90b2NvbC50eHQgJHtkYXRhZGlyfS9YMTEveG9yZy5jb25mLmQiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvKi5sYSAke2xpYmRpcn0veG9yZy9tb2R1bGVzLyovKi5sYSIKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtsaWJkaXJ9L1gxMS9kb2MgJHtkYXRhZGlyfS9YMTEveGtiL2NvbXBpbGVkL1JFQURNRS5jb21waWxlZCAke2xvY2Fsc3RhdGVkaXJ9L2xpYi94a2IvUkVBRE1FLmNvbXBpbGVkIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS94b3JnL21vZHVsZXMvKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0veG9yZy9tb2R1bGVzLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAiCitGSUxFU18ke1BOfS1zZWN1cml0eS1wb2xpY3kgKz0gIiR7bGliZGlyfS94c2VydmVyL1NlY3VyaXR5UG9saWN5IgorRklMRVNfJHtQTn0tc2RsID0gIiR7YmluZGlyfS9Yc2RsIgorRklMRVNfJHtQTn0tZmJkZXYgPSAiJHtiaW5kaXJ9L1hmYmRldiIKK0ZJTEVTXyR7UE59LXh2ZmIgPSAiJHtiaW5kaXJ9L1h2ZmIiCitGSUxFU18ke1BOfS11dGlscyA9ICIke2JpbmRpcn0vc2NhbnBjaSAke2JpbmRpcn0vcGNpdHdlYWsgJHtiaW5kaXJ9L2lvcG9ydCAke2JpbmRpcn0vaW5bYndsXSAke2JpbmRpcn0vb3V0W2J3bF0gJHtiaW5kaXJ9L21tYXBbcnddICR7YmluZGlyfS9ndGYgJHtiaW5kaXJ9L2dldGNvbmZpZyAke2JpbmRpcn0vZ2V0Y29uZmlnLnBsIgorRklMRVNfJHtQTn0teGVwaHlyID0gIiR7YmluZGlyfS9YZXBoeXIiCitGSUxFU18ke1BOfS14d2F5bGFuZCA9ICIke2JpbmRpcn0vWHdheWxhbmQiCitGSUxFU18ke1BOfS1tdWx0aW1lZGlhLW1vZHVsZXMgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9tdWx0aW1lZGlhLypkcnYqIgorRklMRVNfJHtQTn0tZXh0ZW5zaW9uLWRyaSA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2V4dGVuc2lvbnMvbGliZHJpLnNvIgorRklMRVNfJHtQTn0tZXh0ZW5zaW9uLWRyaTIgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9leHRlbnNpb25zL2xpYmRyaTIuc28iCitGSUxFU18ke1BOfS1leHRlbnNpb24tZ2x4ID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvZXh0ZW5zaW9ucy9saWJnbHguc28iCitGSUxFU18ke1BOfS1leHRlbnNpb24tcmVjb3JkID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvZXh0ZW5zaW9ucy9saWJyZWNvcmQuc28iCitGSUxFU18ke1BOfS1leHRlbnNpb24tZXh0bW9kID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvZXh0ZW5zaW9ucy9saWJleHRtb2Quc28iCitGSUxFU18ke1BOfS1leHRlbnNpb24tZGJlID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvZXh0ZW5zaW9ucy9saWJkYmUuc28iCitGSUxFU18ke1BOfS1tb2R1bGUtbGliaW50MTAgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJpbnQxMC5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1saWJhZmIgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJhZmIuc28iCitGSUxFU18ke1BOfS1tb2R1bGUtbGlid2ZiID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvbGlid2ZiLnNvIgorRklMRVNfJHtQTn0tbW9kdWxlLWxpYm1mYiA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYm1mYi5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1saWJjZmIgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJjZmIuc28iCitGSUxFU18ke1BOfS1tb2R1bGUtZXhhID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvbGliZXhhLnNvIgorRklMRVNfJHtQTn0tbW9kdWxlLXhhYSA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYnhhYS5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1saWJ4ZjFicHAgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJ4ZjFicHAuc28iCitGSUxFU18ke1BOfS1tb2R1bGUtbGlieGY0YnBwID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvbGlieGY0YnBwLnNvIgorRklMRVNfeGY4Ni12aWRlby1tb2Rlc2V0dGluZyA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2RyaXZlcnMvbW9kZXNldHRpbmdfZHJ2LnNvIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1mb3A9bm8gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtcGljIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXN0YXRpYyBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1yZWNvcmQgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZG14IFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXhuZXN0IFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUteHZmYiBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWNvbXBvc2l0ZSBcCisgICAgICAgICAgICAgICAgIC0td2l0aG91dC1kdHJhY2UgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtaW50MTA9eDg2ZW11IFwKKyAgICAgICAgICAgICAgICAgLS1zeXNjb25mZGlyPS9ldGMvWDExIFwKKyAgICAgICAgICAgICAgICAgLS1sb2NhbHN0YXRlZGlyPS92YXIgXAorICAgICAgICAgICAgICAgICAtLXdpdGgteGtiLW91dHB1dD0vdmFyL2xpYi94a2IgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtc2hhMT1saWJjcnlwdG8gXAorIgorCitQQUNLQUdFQ09ORklHID8/PSAiZHJpMiB1ZGV2ICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ2RyaSBnbHgnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIndheWxhbmQiLCAieHdheWxhbmQiLCAiIiwgZCl9IFwKKyIKKworUEFDS0FHRUNPTkZJR1t1ZGV2XSA9ICItLWVuYWJsZS1jb25maWctdWRldiwtLWRpc2FibGUtY29uZmlnLXVkZXYsdWRldiIKK1BBQ0tBR0VDT05GSUdbZHJpXSA9ICItLWVuYWJsZS1kcmksLS1kaXNhYmxlLWRyaSxnbHByb3RvIHZpcnR1YWwvbWVzYSB4Zjg2ZHJpcHJvdG8iCitQQUNLQUdFQ09ORklHW2RyaTJdID0gIi0tZW5hYmxlLWRyaTIsLS1kaXNhYmxlLWRyaTIsZHJpMnByb3RvIgorIyBEUkkzIHJlcXVpcmVzIHhzaG1mZW5jZSB0byBhbHNvIGJlIGVuYWJsZWQKK1BBQ0tBR0VDT05GSUdbZHJpM10gPSAiLS1lbmFibGUtZHJpMywtLWRpc2FibGUtZHJpMyxkcmkzcHJvdG8iCitQQUNLQUdFQ09ORklHW2dseF0gPSAiLS1lbmFibGUtZ2x4IC0tZW5hYmxlLWdseC10bHMsLS1kaXNhYmxlLWdseCxnbHByb3RvIHZpcnR1YWwvbGliZ2wgdmlydHVhbC9saWJ4MTEiCitQQUNLQUdFQ09ORklHW3Vud2luZF0gPSAiLS1lbmFibGUtbGlidW53aW5kLC0tZGlzYWJsZS1saWJ1bndpbmQsbGlidW53aW5kIgorUEFDS0FHRUNPTkZJR1t4c2htZmVuY2VdID0gIi0tZW5hYmxlLXhzaG1mZW5jZSwtLWRpc2FibGUteHNobWZlbmNlLGxpYnhzaG1mZW5jZSIKK1BBQ0tBR0VDT05GSUdbeG1sdG9dID0gIi0td2l0aC14bWx0bywgLS13aXRob3V0LXhtbHRvLCB4bWx0by1uYXRpdmUgZG9jYm9vay14bWwtZHRkNC1uYXRpdmUgZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbmF0aXZlIgorUEFDS0FHRUNPTkZJR1tzeXN0ZW1kLWxvZ2luZF0gPSAiLS1lbmFibGUtc3lzdGVtZC1sb2dpbmQ9eWVzLC0tZW5hYmxlLXN5c3RlbWQtbG9naW5kPW5vLGRidXMsIgorUEFDS0FHRUNPTkZJR1t4aW5lcmFtYV0gPSAiLS1lbmFibGUteGluZXJhbWEsLS1kaXNhYmxlLXhpbmVyYW1hLHhpbmVyYW1hcHJvdG8iCitQQUNLQUdFQ09ORklHW3h3YXlsYW5kXSA9ICItLWVuYWJsZS14d2F5bGFuZCwtLWRpc2FibGUteHdheWxhbmQsd2F5bGFuZCBsaWJlcG94eSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCSMgSXRzIGFzc3VtZWQgYmFzZS1maWxlcyBjcmVhdGVzIHRoaXMgZm9yIHVzCisJcm1kaXIgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbG9nLworfQorCisjIEFkZCBydW50aW1lIHByb3ZpZGVzIGZvciB0aGUgQUJJIHZlcnNpb25zIG9mIHRoZSB2aWRlbyBhbmQgaW5wdXQgc3Vic3lzdGVtcywKKyMgc28gdGhhdCBkcml2ZXJzIGNhbiBkZXBlbmQgb24gdGhlIHJlbGV2YW50IHZlcnNpb24uCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgIyBTZXQgUEtHX0NPTkZJR19QQVRIIHNvIHBrZy1jb25maWcgbG9va3MgYXQgdGhlIC5wYyBmaWxlcyB0aGF0IGFyZSBnb2luZworICAgICMgaW50byB0aGUgbmV3IHBhY2thZ2UsIG5vdCB0aGUgc3RhZ2VkIG9uZXMuCisgICAgbmV3ZW52ID0gZGljdChvcy5lbnZpcm9uKQorICAgIG5ld2VudlsiUEtHX0NPTkZJR19QQVRIIl0gPSBkLmV4cGFuZCgiJHtQS0dEfSR7bGliZGlyfS9wa2djb25maWcvIikKKworICAgIGRlZiBnZXRfYWJpKG5hbWUpOgorICAgICAgICBhYmlzID0geworICAgICAgICAgICJ2aWRlbyI6ICJhYmlfdmlkZW9kcnYiLAorICAgICAgICAgICJpbnB1dCI6ICJhYmlfeGlucHV0IgorICAgICAgICB9CisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGFyZ3M9InBrZy1jb25maWcgLS12YXJpYWJsZT0lcyB4b3JnLXNlcnZlciIgJSBhYmlzW25hbWVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlLCBlbnY9bmV3ZW52LCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBvdXRwdXQgPSBwLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAnJworICAgICAgICByZXR1cm4gIiVzeG9yZy1hYmktJXMtJXMiICUgKG1scHJlZml4LCBuYW1lLCBvdXRwdXQuc3BsaXQoIi4iKVswXSkKKworICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBkLmFwcGVuZFZhcigiUlBST1ZJREVTXyIgKyBwbiwgIiAiICsgZ2V0X2FiaSgiaW5wdXQiKSkKKyAgICBkLmFwcGVuZFZhcigiUlBST1ZJREVTXyIgKyBwbiwgIiAiICsgZ2V0X2FiaSgidmlkZW8iKSkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcvMDAwMS11c2UtX19HTElCQ19fLWd1YXJkLWZvci1nbGliYy1zcGVjaWZpYy1jb2RlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy8wMDAxLXVzZS1fX0dMSUJDX18tZ3VhcmQtZm9yLWdsaWJjLXNwZWNpZmljLWNvZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFlNGVkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcvMDAwMS11c2UtX19HTElCQ19fLWd1YXJkLWZvci1nbGliYy1zcGVjaWZpYy1jb2RlLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gZjI0Mjc0MGY2NDg4YTI1ZTZjYTg0OTY4YjBlMjMxOWE5YTM5NzViNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDYgQXByIDIwMTUgMjA6NTI6NTAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdXNlIF9fR0xJQkNfXyBndWFyZCBmb3IgZ2xpYmMgc3BlY2lmaWMgY29kZQorCitVc2luZyBfX2xpbnV4X18gaXMgYSB0YWQgYml0IHdyb25nIGFzc3VtcHRpb24gc2luY2UKK2xpbnV4ICE9IGdsaWJjCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgaHcveGZyZWU4Ni9vcy1zdXBwb3J0L3hmODZfT1NsaWIuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2h3L3hmcmVlODYvb3Mtc3VwcG9ydC94Zjg2X09TbGliLmggYi9ody94ZnJlZTg2L29zLXN1cHBvcnQveGY4Nl9PU2xpYi5oCitpbmRleCBlYjBhMzM4Li5jMzY2ZmZjIDEwMDY0NAorLS0tIGEvaHcveGZyZWU4Ni9vcy1zdXBwb3J0L3hmODZfT1NsaWIuaAorKysrIGIvaHcveGZyZWU4Ni9vcy1zdXBwb3J0L3hmODZfT1NsaWIuaAorQEAgLTE3OCw3ICsxNzgsNyBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgCistI2lmZGVmIF9fbGludXhfXworKyNpZmRlZiBfX0dMSUJDX18KKyAjaW5jbHVkZSA8dGVybWlvLmg+CisgI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX0dMSUJDX18gKi8KKyAjaW5jbHVkZSA8dGVybWlvcy5oPgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnL21hY3JvX3R3ZWFrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy9tYWNyb190d2Vhay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzBlZWE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy9tYWNyb190d2Vhay5wYXRjaApAQCAtMCwwICsxLDI1IEBACitUaGlzIGlzIHRoZSByZXZpc2VkIHZlcnNpb24gb2YgZmlsZXMvbWFjcm9fdHdlYWsucGF0Y2ggZm9yCit4b3JnLXNlcnZlciAxLjguOTkuOTA0IGFuZCBuZXdlci4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFl1IEtlIDxrZS55dUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS94b3JnLXNlcnZlci5tNCBiL3hvcmctc2VydmVyLm00CitpbmRleCBiZGVjZjYyLi4wNDBmZGI4IDEwMDY0NAorLS0tIGEveG9yZy1zZXJ2ZXIubTQKKysrKyBiL3hvcmctc2VydmVyLm00CitAQCAtMjgsMTAgKzI4LDEyIEBAIGRubAorICMgQ2hlY2tzIGZvciB0aGUgJDEgZGVmaW5lIGluIHhvcmctc2VydmVyLmggKGZyb20gdGhlIHNkaykuICBJZiBpdAorICMgaXMgZGVmaW5lZCwgdGhlbiBhZGQgJDEgdG8gJFJFUVVJUkVEX01PRFVMRVMuCisgCisrbTRfcGF0dGVybl9hbGxvdyhQS0dfQ09ORklHX1NZU1JPT1RfRElSKQorKworIEFDX0RFRlVOKFtYT1JHX0RSSVZFUl9DSEVDS19FWFRdLFsKKyAJQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pCisgCVNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgorLQlDRkxBR1M9IiRDRkxBR1MgLUlgJFBLR19DT05GSUcgLS12YXJpYWJsZT1zZGtkaXIgeG9yZy1zZXJ2ZXJgIgorKwlDRkxBR1M9IiRDRkxBR1MgLUkkUEtHX0NPTkZJR19TWVNST09UX0RJUmAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXNka2RpciB4b3JnLXNlcnZlcmAiCisgCUFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyAjaW5jbHVkZSAieG9yZy1zZXJ2ZXIuaCIKKyAjaWYgIWRlZmluZWQgJDEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmdfMS4xNy4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZ18xLjE3LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAzOWQzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmdfMS4xNy4yLmJiCkBAIC0wLDAgKzEsMjggQEAKK3JlcXVpcmUgeHNlcnZlci14b3JnLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS11c2UtX19HTElCQ19fLWd1YXJkLWZvci1nbGliYy1zcGVjaWZpYy1jb2RlLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjM5N2U0MDU1NjY2NTExNTA0OTBmZjQ5M2U0NjNmMWFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY2MTEyMDYxMjcyOGYyYzUwMzQ2NzFkMGNhM2UyMjczNDM4YzYwYWJhOTNiM2RkYTRhOGFhNDBlNmEyNTc5OTMiCisKKyMgVGhlc2UgZXh0ZW5zaW9ucyBhcmUgbm93IGludGVncmF0ZWQgaW50byB0aGUgc2VydmVyLCBzbyBkZWNsYXJlIHRoZSBtaWdyYXRpb24KKyMgcGF0aCBmb3IgaW4tcGxhY2UgdXBncmFkZXMuCisKK1JSRVBMQUNFU18ke1BOfSA9ICAiJHtQTn0tZXh0ZW5zaW9uLWRyaSBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kcmkyIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLXJlY29yZCBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1leHRtb2QgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZGJlIFwKKyAgICAgICAgICAgICAgICAgICAiCitSUFJPVklERVNfJHtQTn0gPSAgIiR7UE59LWV4dGVuc2lvbi1kcmkgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZHJpMiBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1yZWNvcmQgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZXh0bW9kIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRiZSBcCisgICAgICAgICAgICAgICAgICAgIgorUkNPTkZMSUNUU18ke1BOfSA9ICIke1BOfS1leHRlbnNpb24tZHJpIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRyaTIgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tcmVjb3JkIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWV4dG1vZCBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kYmUgXAorICAgICAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hyZXN0b3AveHJlc3RvcF8wLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94cmVzdG9wL3hyZXN0b3BfMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNWRmMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94cmVzdG9wL3hyZXN0b3BfMC40LmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiWFJlczogQSB0b3AtbGlrZSByZXNvdXJjZSB1c2FnZSB0b29sIGZvciBYIgorCitERVNDUklQVElPTiA9ICJ0b3AtbGlrZSBzdGF0aXN0aWNzIG9mIFgxMSBzZXJ2ZXIgcmVzb3VyY2UgdXNhZ2UgYnkgY2xpZW50cyIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS94cmVzdG9wIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94cmVzdG9wLmM7ZW5kbGluZT0xODttZDU9NzMwODc2YzMwZjBkOGE5Mjg2NzZiY2QxMjQyYTNiMzUiCisKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorUFIgPSAicjMiCisKK0RFUEVORFMgPSAibGlieHJlcyBsaWJ4ZXh0IHZpcnR1YWwvbGlieDExIG5jdXJzZXMiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL3hyZXN0b3AveHJlc3RvcC0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkOGE1NDU5NmNiYWYwMzdlNjJiODBjNDU4NWEzY2E5YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2N2MyZmM5NGE3ZWNlZGJhYWUwZDE4MzdlODJlOTNkMWQ5OGY0YTZkNzU5ODI4ODYwZTU1MjExOWFmM2NlMjU3IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsLzMweFRzX0NhbGlicmF0ZS5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvMzB4VHNfQ2FsaWJyYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNDM2MTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsLzMweFRzX0NhbGlicmF0ZS5zaApAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vc2gKKworLiAvZXRjL2Zvcm1mYWN0b3IvY29uZmlnCisKK2lmIFsgIiRIQVZFX1RPVUNIU0NSRUVOIiA9ICIxIiBdOyB0aGVuCisJbj0xCisJd2hpbGUgWyAhIC16ICRUU0xJQl9UU0RFVklDRSBdICYmIFsgISAtZiAvZXRjL3BvaW50ZXJjYWwgXSAmJiBbICRuIC1sZSA1IF0KKwlkbworCSAgIC91c3IvYmluL3h0c2NhbAorCSAgIHNsZWVwIDEKKwkgICBuPSQoKCRuKzEpKQorCWRvbmUKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2NoYW5nZS1jcm9zcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvY2hhbmdlLWNyb3NzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYTc3MTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2NoYW5nZS1jcm9zcy5wYXRjaApAQCAtMCwwICsxLDE4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHRtcC9tYWluLmMub3JpZwkyMDA3LTAxLTAyIDE1OjM5OjU0LjAwMDAwMDAwMCArMDAwMAorKysrIHRtcC9tYWluLmMJMjAwNy0wMS0wMiAxNTozOTo1NC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMzEsOSArMTMxLDEwIEBACisgeworICAgWFJlbmRlckZpbGxSZWN0YW5nbGVzIChkcHksIFBpY3RPcFNyYywgcGljdCwgJnJlY3RfY29sb3IsIHJlY3RhbmdsZXMsIDIpOworIAorLSAgWEZpbGxBcmMgKGRweSwgY3Jvc3NoYWlyX3csIGNyb3NzaGFpcl9nYywgKENST1NTSEFJUl9TSVpFIC8gMikgLSAoV0lEVEggLyAyKSAtIDEsIAorLQkgICAgKENST1NTSEFJUl9TSVpFIC8gMikgLSAoV0lEVEggLyAyKSAtIDEsCistCSAgICBXSURUSCArIDEsIFdJRFRIICsgMSwgMCwgMzYwICogNjQpOworKyAgWEZpbGxSZWN0YW5nbGUgKGRweSwgY3Jvc3NoYWlyX3csIGNyb3NzaGFpcl9nYywKKysJCSAgKENST1NTSEFJUl9TSVpFIC8gMikgLSAoV0lEVEggLyAyKSwKKysJCSAgKENST1NTSEFJUl9TSVpFIC8gMikgLSAoV0lEVEggLyAyKSwKKysJCSAgV0lEVEgsIFdJRFRIKTsKKyB9CisgCisgdm9pZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9jbGVhbnVwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9jbGVhbnVwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YjA4NTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2NsZWFudXAucGF0Y2gKQEAgLTAsMCArMSw2MjEgQEAKKy0tLQorIE1ha2VmaWxlLmFtICB8ICAgIDkgLS0KKyBjb25maWd1cmUuYWMgfCAgICAzIAorIGdwZS1kaXN0LmFtICB8ICAgMTIgLS0tCisgaDM2MDBfdHMuaCAgIHwgIDIxNiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIG1haW4uYyAgICAgICB8ICAyMTAgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgeHRzY2FsLmluICAgIHwgICAxOSAtLS0tLQorIDYgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgNDU1IGRlbGV0aW9ucygtKQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHh0c2NhbC0wLjYuMy94dHNjYWwuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4dHNjYWwtMC42LjMub3JpZy94dHNjYWwuaW4JMjAwNC0wOS0xMCAyMDoxMDozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDE5ICswLDAgQEAKKy0jIS9iaW4vc2gKKy0KKy1tb2R1bGVfaWQoKSB7CistICAgICMgR2V0IG1vZGVsIG5hbWUKKy0gICAgZWNobyBgZ3JlcCAiXkhhcmR3YXJlIiAvcHJvYy9jcHVpbmZvIHwgc2VkIC1lICJzLy4qOiAqLy8iIHwgdHIgYS16IEEtWmAKKy19CistCistY2FzZSBgbW9kdWxlX2lkYCBpbgorLQkiSFAgSVBBUSBIMzEwMCIgfCAiSFAgSVBBUSBIMzgwMCIgKQorLQkJQVJHUz0iLXJvdGF0ZSA5MCIgOzsKKy0JIkhQIElQQVEgSDM2MDAiIHwgIkhQIElQQVEgSDM3MDAiIHwgIkhQIElQQVEgSDM5MDAiIHwgKkNPTExJRSB8ICpQT09ETEUpCistCQlBUkdTPSItcm90YXRlIDI3MCIgOzsKKy0JIyBIMjIwMDogd29ya3Mgd2l0aG91dCByb3RhdGlvbgorLWVzYWMKKy0KKy0jIHRoZSB0aGluZ3Mgd2UgZG8gZm9yIGF1dG9jb25mCistcHJlZml4PUBwcmVmaXhACistZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorLWV4ZWMgQGxpYmV4ZWNkaXJAL3h0c2NhbC5iaW4gJEFSR1MgJCoKK0luZGV4OiB4dHNjYWwtMC42LjMvbWFpbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geHRzY2FsLTAuNi4zLm9yaWcvbWFpbi5jCTIwMDctMDctMDEgMDE6MTI6NTIuMDAwMDAwMDAwICswMTAwCisrKysgeHRzY2FsLTAuNi4zL21haW4uYwkyMDA3LTA3LTAxIDAxOjEyOjU1LjAwMDAwMDAwMCArMDEwMAorQEAgLTIyLDEyICsyMiwxMCBAQAorICNpbmNsdWRlIDxYMTEvWGxpYi5oPgorIAorICNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YcmVuZGVyLmg+CistI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyYW5kci5oPgorICNpbmNsdWRlIDxYMTEvWGZ0L1hmdC5oPgorICNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy94Y2FsaWJyYXRlLmg+CisgI2luY2x1ZGUgPFgxMS9rZXlzeW0uaD4KKyAKKy0jaW5jbHVkZSAiaDM2MDBfdHMuaCIKKyAjaW5jbHVkZSAiY2FsaWJyYXRlLmgiCisgCisgRGlzcGxheSAqZHB5OworQEAgLTQ1LDE1ICs0MywxMSBAQCBYZnRDb2xvciB4ZnRjb2w7CisgWGZ0RHJhdyAqeGZ0ZHJhdzsKKyBYZnRGb250ICp4ZnRmb250OworIGludCBzY3JlZW5feCwgc2NyZWVuX3k7CistaW50IHRzX2ZkOworIGludCBzYW1wbGVzOworIFBpeG1hcCBiZ19waXhtYXA7CisgaW50IGZsYWdfZGVidWc7CistaW50IHJvdGF0aW9uID0gMDsKKyBpbnQgZXJyb3JfYmFzZSwgZXZlbnRfYmFzZTsKKyAKKy1pbnQgdXNpbmdfeGNhbGlicmF0ZTsKKy0KKyBpbnQgbW92aW5nOworIAorICNkZWZpbmUgQ1JPU1NIQUlSX1NJWkUJMjUKK0BAIC02Myw3ICs1Nyw2IEBAIGludCBtb3Zpbmc7CisgI2RlZmluZSBFTk9VR0ggNQorICNkZWZpbmUgTUFYX1NBTVBMRVMgNDAKKyAKKy0jZGVmaW5lIFJBV19ERVZJQ0UgIi9kZXYvaDM2MDBfdHNyYXciCisgI2RlZmluZSBGT05UTkFNRSAic2Fucy0xMCIKKyAKKyBzdHJ1Y3QgcG9pbnQgCitAQCAtMjg3LDEyICsyODAsOCBAQCBzb3J0X2J5X3kgKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQgKmIpCisgdm9pZAorIHNldF9jYWxpYnJhdGlvbiAoY2FsaWJyYXRpb24gKmNhbCkKKyB7CistICBUU19DQUwgdGM7CistICBpbnQgeHRyYW5zLCB5dHJhbnMsIHhzY2FsZSwgeXNjYWxlLCB4eXNjYWxlLCB5eHNjYWxlOworICAgY2FsaWJyYXRpb24gb2NhbCA9ICpjYWw7CisgCistICBpZiAodXNpbmdfeGNhbGlicmF0ZSkKKy0gICAgeworICAgICAgIEZJTEUgKmZwOworICAgICAgIGlmIChmbGFnX2RlYnVnKQorIAlwcmludGYgKCJjb25zdGFudHMgYXJlOiAlZCAlZCAlZCAlZCAlZCAlZCAlZFxuIiwgY2FsLT5hWzFdLCBjYWwtPmFbMl0sIGNhbC0+YVswXSwgY2FsLT5hWzRdLCBjYWwtPmFbNV0sIGNhbC0+YVszXSwgY2FsLT5hWzZdKTsKK0BAIC0zMDQsMjkgKzI5Myw2IEBAIHNldF9jYWxpYnJhdGlvbiAoY2FsaWJyYXRpb24gKmNhbCkKKyAJfQorICAgICAgIGZwcmludGYgKGZwLCAiJWQgJWQgJWQgJWQgJWQgJWQgJWRcbiIsIGNhbC0+YVsxXSwgY2FsLT5hWzJdLCBjYWwtPmFbMF0sIGNhbC0+YVs0XSwgY2FsLT5hWzVdLCBjYWwtPmFbM10sIGNhbC0+YVs2XSk7CisgICAgICAgZmNsb3NlIChmcCk7IAorLSAgICAgIHJldHVybjsKKy0gICAgfQorLQorLSAgeHRyYW5zID0gY2FsLT5hWzBdIC8gY2FsLT5hWzZdOworLSAgeXRyYW5zID0gY2FsLT5hWzNdIC8gY2FsLT5hWzZdOworLSAgeHNjYWxlID0gY2FsLT5hWzFdICogMjU2IC8gY2FsLT5hWzZdOworLSAgeXNjYWxlID0gY2FsLT5hWzVdICogMjU2IC8gY2FsLT5hWzZdOworLSAgeHlzY2FsZSA9IGNhbC0+YVsyXSAqIDI1NiAvIGNhbC0+YVs2XTsKKy0gIHl4c2NhbGUgPSBjYWwtPmFbNF0gKiAyNTYgLyBjYWwtPmFbNl07CistICAKKy0gIHRjLnh0cmFucyA9IHh0cmFuczsKKy0gIHRjLnl0cmFucyA9IHl0cmFuczsKKy0gIHRjLnhzY2FsZSA9IHhzY2FsZTsKKy0gIHRjLnlzY2FsZSA9IHlzY2FsZTsKKy0gIHRjLnh5c3dhcCA9IDA7CistCistICBwcmludGYgKCIlZCAlZCAlZCAlZCAlZFxuIiwgdGMueHNjYWxlLCB0Yy54dHJhbnMsIHRjLnlzY2FsZSwgdGMueXRyYW5zLCB0Yy54eXN3YXApOworLQorLSAgaWYgKGlvY3RsICh0c19mZCwgVFNfU0VUX0NBTCwgKHZvaWQgKikmdGMpICE9IDApCistICAgIHsKKy0gICAgICBwZXJyb3IgKCJUU19TRVRfQ0FMIik7CistICAgICAgZXhpdCAoMSk7CistICAgIH0KKyB9CisgCisgdm9pZAorQEAgLTM5OCw4MCArMzY0LDEzIEBAIGhhbmRsZV90c19ldmVudCAoaW50IHgsIGludCB5LCBpbnQgcHJlc3MKKyB9CisgCisgdm9pZAorLXJlYWRfdHMgKHZvaWQpCisteworLSAgVFNfRVZFTlQgdHNfZXY7CistICBpbnQgcjsKKy0KKy0gIHIgPSByZWFkICh0c19mZCwgJnRzX2V2LCBzaXplb2YgKHRzX2V2KSk7CistICBpZiAociA9PSBzaXplb2YgKHRzX2V2KSkKKy0gICAgaGFuZGxlX3RzX2V2ZW50ICh0c19ldi54LCB0c19ldi55LCB0c19ldi5wcmVzc3VyZSk7CistfQorLQorLXZvaWQKKy1kb19jYWwgKGNoYXIgKiphcmdzKQorLXsKKy0gIFRTX0NBTCB0YzsKKy0KKy0gIHRjLnhzY2FsZSA9IGF0b2kgKGFyZ3NbMF0pOworLSAgdGMueHRyYW5zID0gYXRvaSAoYXJnc1sxXSk7CistICB0Yy55c2NhbGUgPSBhdG9pIChhcmdzWzJdKTsKKy0gIHRjLnl0cmFucyA9IGF0b2kgKGFyZ3NbM10pOworLSAgdGMueHlzd2FwID0gYXRvaSAoYXJnc1s0XSk7CistCistICBpZiAoZmxhZ19kZWJ1ZykKKy0gICAgZnByaW50ZiAoc3RkZXJyLCAic2V0dGluZzogJWQgJWQgJWQgJWQgJWRcbiIsIAorLQkgICAgIHRjLnh0cmFucywgdGMueXRyYW5zLCB0Yy54c2NhbGUsIHRjLnlzY2FsZSwgdGMueHlzd2FwKTsKKy0gICAgCistICBpZiAoaW9jdGwgKHRzX2ZkLCBUU19TRVRfQ0FMLCAodm9pZCAqKSZ0YykgIT0gMCkKKy0gICAgeworLSAgICAgIHBlcnJvciAoIlRTX1NFVF9DQUwiKTsKKy0gICAgICBleGl0ICgxKTsKKy0gICAgfQorLSAgCistICBleGl0ICgwKTsKKy19CistCistdm9pZAorLXNob3dfY2FsICh2b2lkKQorLXsKKy0gIFRTX0NBTCB0YzsKKy0KKy0gIGlmIChpb2N0bCAodHNfZmQsIFRTX0dFVF9DQUwsICh2b2lkICopJnRjKSAhPSAwKQorLSAgICB7CistICAgICAgcGVycm9yICgiVFNfR0VUX0NBTCIpOworLSAgICAgIGV4aXQgKDEpOworLSAgICB9CistCistICBwcmludGYgKCIlZCAlZCAlZCAlZCAlZFxuIiwgdGMueHNjYWxlLCB0Yy54dHJhbnMsIHRjLnlzY2FsZSwgdGMueXRyYW5zLCB0Yy54eXN3YXApOworLX0KKy0KKy12b2lkCisgdXNhZ2UgKGNvbnN0IGNoYXIgKm5hbWUpCisgeworLSAgZnByaW50ZiAoc3RkZXJyLCAidXNhZ2U6ICVzIC12aWV3XG4iLCBuYW1lKTsKKy0gIGZwcmludGYgKHN0ZGVyciwgIiAgICAgICAlcyBbLXJvdGF0ZSA8MCB8IDkwIHwgMTgwIHwgMjcwPl1cbiIsIG5hbWUpOworLSAgZnByaW50ZiAoc3RkZXJyLCAiICAgICAgICVzIC1jYWwgPHhzPiA8eHQ+IDx5cz4gPHl0PiA8eHlzd2FwPlxuIiwgbmFtZSk7CistCisrICBmcHJpbnRmIChzdGRlcnIsICJ1c2FnZTogJXMgWy1kZWJ1Z11cbiIsIG5hbWUpOworICAgZXhpdCAoMSk7CisgfQorIAorIGludAorLXhycl9zdXBwb3J0ZWQgKHZvaWQpCisteworLSAgaW50IHhycl9ldmVudF9iYXNlLCB4cnJfZXJyb3JfYmFzZTsKKy0gIGludCB4cnJfbWFqb3IsIHhycl9taW5vcjsKKy0KKy0gIGlmIChYUlJRdWVyeUV4dGVuc2lvbiAoZHB5LCAmeHJyX2V2ZW50X2Jhc2UsICZ4cnJfZXJyb3JfYmFzZSkgPT0gRmFsc2UKKy0gICAgICB8fCBYUlJRdWVyeVZlcnNpb24gKGRweSwgJnhycl9tYWpvciwgJnhycl9taW5vcikgPT0gMAorLSAgICAgIHx8IHhycl9tYWpvciAhPSAxCistICAgICAgfHwgeHJyX21pbm9yIDwgMSkKKy0gICAgcmV0dXJuIDA7CistCistICByZXR1cm4gMTsKKy19CistCistaW50CisgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CisgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGVzOworQEAgLTQ4MCwzMSArMzc5LDExIEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICBpbnQgbWF4X2ZkOworICAgR0MgYmdfZ2M7CisgICBpbnQgaTsKKy0gIGludCBoYXZlX3hyYW5kcjsKKyAKKyAgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisgICAgIHsKKy0gICAgICBpZiAoIXN0cmNtcCAoYXJndltpXSwgIi12aWV3IikpCistCXsKKy0JICBzaG93X2NhbCAoKTsKKy0JICBleGl0ICgwKTsKKy0JfQorLSAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKGFyZ3ZbaV0sICItZGVidWciKSkKKysgICAgICBpZiAoIXN0cmNtcCAoYXJndltpXSwgIi1kZWJ1ZyIpKQorIAlmbGFnX2RlYnVnID0gMTsKKy0gICAgICBlbHNlIGlmICghc3RyY21wIChhcmd2W2ldLCAiLWNhbCIpKQorLQl7CistCSAgaWYgKGFyZ2MgPiAoaSArIDUpKQorLQkgICAgZG9fY2FsIChhcmd2ICsgaSArIDEpOworLQkgIGVsc2UKKy0JICAgIHVzYWdlIChhcmd2WzBdKTsKKy0JfQorLSAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKGFyZ3ZbaV0sICItcm90YXRlIikpCistCXsKKy0JICBpZiAoYXJnYyA+IChpICsgMSkpCistCSAgICByb3RhdGlvbiA9IGF0b2kgKGFyZ3ZbKytpXSk7CistCSAgZWxzZQorLQkgICAgdXNhZ2UgKGFyZ3ZbMF0pOworLQl9CisgICAgICAgZWxzZQorIAl1c2FnZSAoYXJndlswXSk7CisgICAgIH0KK0BAIC01MzEsNDggKzQxMCwxMSBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkgIGZwcmludGYgKHN0ZGVyciwgImZhaWxlZCB0byBzZXQgcmF3IG1vZGU6IGVycm9yICVkXG4iLCByKTsKKyAJICBleGl0ICgxKTsKKyAJfQorLQorLSAgICAgIHVzaW5nX3hjYWxpYnJhdGUgPSAxOworLSAgICB9CistCistICBoYXZlX3hyYW5kciA9IHhycl9zdXBwb3J0ZWQgKCk7CistICBpZiAoaGF2ZV94cmFuZHIpCistICAgIHsKKy0gICAgICBYUlJTY3JlZW5Db25maWd1cmF0aW9uICpycl9zY3JlZW47CistICAgICAgUm90YXRpb24gY3VycmVudF9yb3RhdGlvbjsKKy0KKy0gICAgICBpZiAoZmxhZ19kZWJ1ZykKKy0JZnByaW50ZiAoc3RkZXJyLCAiWFJBTkRSIGlzIHN1cHBvcnRlZFxuIik7CistCistICAgICAgcnJfc2NyZWVuID0gWFJSR2V0U2NyZWVuSW5mbyAoZHB5LCBSb290V2luZG93IChkcHksIHNjcmVlbikpOworLQorLSAgICAgIFhSUlJvdGF0aW9ucyAoZHB5LCBzY3JlZW4sICZjdXJyZW50X3JvdGF0aW9uKTsKKy0KKy0gICAgICBYUlJGcmVlU2NyZWVuQ29uZmlnSW5mbyAocnJfc2NyZWVuKTsKKy0KKy0gICAgICBpZiAoZmxhZ19kZWJ1ZykKKy0JZnByaW50ZiAoc3RkZXJyLCAiQ3VycmVudCBSQU5EUiByb3RhdGlvbiBpcyAlZFxuIiwgY3VycmVudF9yb3RhdGlvbik7CistCistICAgICAgc3dpdGNoIChjdXJyZW50X3JvdGF0aW9uKQorLQl7CistCWNhc2UgUlJfUm90YXRlXzI3MDoKKy0JICByb3RhdGlvbiArPSA5MDsKKy0JY2FzZSBSUl9Sb3RhdGVfMTgwOgorLQkgIHJvdGF0aW9uICs9IDkwOworLQljYXNlIFJSX1JvdGF0ZV85MDoKKy0JICByb3RhdGlvbiArPSA5MDsKKy0JICByb3RhdGlvbiAlPSAzNjA7CistCWNhc2UgUlJfUm90YXRlXzA6CistCSAgYnJlYWs7CistCWRlZmF1bHQ6CistCSAgZnByaW50ZiAoc3RkZXJyLCAiVW5rbm93biBSQU5EUiByb3RhdGlvbjogJWRcbiIsIGN1cnJlbnRfcm90YXRpb24pOworLQkgIGJyZWFrOworLQl9CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSAgICAgIGlmIChmbGFnX2RlYnVnKQorLQlmcHJpbnRmIChzdGRlcnIsICJYUkFORFIgbm90IHN1cHBvcnRlZFxuIik7CisrICAgICAgcGVycm9yICgiWENBTElCUkFURSBleHRlbnNpb24gbWlzc2luZyIpOworKyAgICAgIGV4aXQgKDEpOworICAgICB9CisgCisgICBhdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gZmxhZ19kZWJ1ZyA/IEZhbHNlIDogVHJ1ZTsKK0BAIC02NjYsNDUgKzUwOCwxNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAorICAgZm9yIChpID0gMDsgaSA8IE5SX1BPSU5UUzsgaSsrKQorICAgICB7CistICAgICAgc3dpdGNoIChyb3RhdGlvbikKKy0JeworLQljYXNlIDA6CistCSAgY2FsLnhmYltpXSA9IGNhbC54c2NyW2ldOworLQkgIGNhbC55ZmJbaV0gPSBjYWwueXNjcltpXTsKKy0JICBicmVhazsKKy0JY2FzZSA5MDoKKy0JICBjYWwueGZiW2ldID0gY2FsLnlzY3JbaV07CistCSAgY2FsLnlmYltpXSA9IHNjcmVlbl94IC0gY2FsLnhzY3JbaV07CistCSAgYnJlYWs7CistCWNhc2UgMTgwOgorLQkgIGNhbC54ZmJbaV0gPSBzY3JlZW5feCAtIGNhbC54c2NyW2ldOworLQkgIGNhbC55ZmJbaV0gPSBzY3JlZW5feSAtIGNhbC55c2NyW2ldOworLQkgIGJyZWFrOworLQljYXNlIDI3MDoKKy0JICBjYWwueGZiW2ldID0gc2NyZWVuX3kgLSBjYWwueXNjcltpXTsKKy0JICBjYWwueWZiW2ldID0gY2FsLnhzY3JbaV07CistCSAgYnJlYWs7CistCX0KKysgICAgICBjYWwueGZiW2ldID0gY2FsLnhzY3JbaV07CisrICAgICAgY2FsLnlmYltpXSA9IGNhbC55c2NyW2ldOworKyAgICAgIFhDYWxpYnJhdGVTY3JlZW5Ub0Nvb3JkIChkcHksICZjYWwueGZiW2ldLCAmY2FsLnlmYltpXSk7CisgCisgICAgICAgaWYgKGZsYWdfZGVidWcpCistCXByaW50ZiAoInJvdGF0aW9uICVkOiAoJWQsJWQpIC0+ICglZCwlZClcbiIsIHJvdGF0aW9uLCAKKysJcHJpbnRmICgicm90YXRpb24gY29udmVyc2lvbjogKCVkLCVkKSAtPiAoJWQsJWQpXG4iLAorIAkJY2FsLnhzY3JbaV0sIGNhbC55c2NyW2ldLCBjYWwueGZiW2ldLCBjYWwueWZiW2ldKTsKKyAgICAgfQorIAorICAgbmV4dF9ldmVudCAoKTsKKyAKKy0gIGlmICghdXNpbmdfeGNhbGlicmF0ZSkKKy0gICAgeworLSAgICAgIHRzX2ZkID0gb3BlbiAoUkFXX0RFVklDRSwgT19SRE9OTFkpOworLSAgICAgIGlmICh0c19mZCA8IDApCistCXsKKy0JICBwZXJyb3IgKFJBV19ERVZJQ0UpOworLQkgIGV4aXQgKDEpOworLQl9CistICAgIH0KKy0KKy0gIG1heF9mZCA9ICh4ZmQgPiB0c19mZCkgPyB4ZmQgOiB0c19mZDsKKy0KKyAgIGZvciAoOzspCisgICAgIHsKKyAgICAgICBmZF9zZXQgZmRzOworQEAgLTcxMywxMiArNTI3LDggQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAKKyAgICAgICBGRF9aRVJPICgmZmRzKTsKKyAgICAgICBGRF9TRVQgKHhmZCwgJmZkcyk7CistICAgICAgaWYgKHRzX2ZkICE9IC0xKQorLQlGRF9TRVQgKHRzX2ZkLCAmZmRzKTsKKyAKKy0gICAgICBzZWxlY3QgKG1heF9mZCArIDEsICZmZHMsIE5VTEwsIE5VTEwsIE5VTEwpOworLSAgICAgIAorLSAgICAgIGlmICh0c19mZCAhPSAtMSAmJiBGRF9JU1NFVCAodHNfZmQsICZmZHMpKQorLQlyZWFkX3RzICgpOworKyAgICAgIHNlbGVjdCAoeGZkICsgMSwgJmZkcywgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgIH0KKyB9CisrCitJbmRleDogeHRzY2FsLTAuNi4zL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHh0c2NhbC0wLjYuMy5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA0LTA5LTEwIDIwOjExOjEyLjAwMDAwMDAwMCArMDEwMAorKysrIHh0c2NhbC0wLjYuMy9jb25maWd1cmUuYWMJMjAwNy0wNy0wMSAwMToxMjo1NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC05LDggKzksNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduIGRpc3QtYnppcDJdKQorICMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KKyBBQ19QUk9HX0NDCisgCistUEtHX0NIRUNLX01PRFVMRVMoWFRTQ0FMLCB4MTEgeGZ0IHhleHQgeHJhbmRyIHhjYWxpYnJhdGUpCisrUEtHX0NIRUNLX01PRFVMRVMoWFRTQ0FMLCB4MTEgeGZ0IHhleHQgeGNhbGlicmF0ZSkKKyAKKyBBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlXSkKKy1BQ19DT05GSUdfRklMRVMoW3h0c2NhbF0pCisgQUNfT1VUUFVUCitJbmRleDogeHRzY2FsLTAuNi4zL2dwZS1kaXN0LmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geHRzY2FsLTAuNi4zLm9yaWcvZ3BlLWRpc3QuYW0JMjAwNC0wNi0wMiAyMzowNzoxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDEyICswLDAgQEAKKy1DVlNUQUcgOj0gJChzaGVsbCBlY2hvICQoUEFDS0FHRSktJChWRVJTSU9OKSB8IHRyIFthLXouXSBbQS1aX10pCistCistZGlzdC11cGxvYWQ6IGRpc3QKKy0Jc2NwICQoUEFDS0FHRSktJChWRVJTSU9OKS50YXIuYnoyICQoVVNFUilAaGFuZGhlbGRzLm9yZzovaG9tZS9mdHAvcHViL3Byb2plY3RzL2dwZS9zb3VyY2UvCistCistdGFnOgorLQljdnMgdGFnICQoQ1ZTVEFHKQorLQorLXJldGFnOgorLQljdnMgdGFnIC1GICQoQ1ZTVEFHKQorLQorLXNvdXJjZTogdGFnIGRpc3QtdXBsb2FkCitJbmRleDogeHRzY2FsLTAuNi4zL2gzNjAwX3RzLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4dHNjYWwtMC42LjMub3JpZy9oMzYwMF90cy5oCTIwMDMtMDctMDUgMTc6Mjc6MTAuMDAwMDAwMDAwICswMTAwCisrKysgL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCitAQCAtMSwyMTYgKzAsMCBAQAorLS8qCistKgorLSogRHJpdmVyIGZvciB0aGUgSDM2MDAgVG91Y2ggU2NyZWVuIGFuZCBvdGhlciBBdG1lbCBjb250cm9sbGVkIGRldmljZXMuCistKgorLSogQ29weXJpZ2h0IDIwMDAgQ29tcGFxIENvbXB1dGVyIENvcnBvcmF0aW9uLgorLSoKKy0qIFVzZSBjb25zaXN0ZW50IHdpdGggdGhlIEdOVSBHUEwgaXMgcGVybWl0dGVkLAorLSogcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKKy0qIHByZXNlcnZlZCBpbiBpdHMgZW50aXJldHkgaW4gYWxsIGNvcGllcyBhbmQgZGVyaXZlZCB3b3Jrcy4KKy0qCistKiBDT01QQVEgQ09NUFVURVIgQ09SUE9SQVRJT04gTUFLRVMgTk8gV0FSUkFOVElFUywgRVhQUkVTU0VEIE9SIElNUExJRUQsCistKiBBUyBUTyBUSEUgVVNFRlVMTkVTUyBPUiBDT1JSRUNUTkVTUyBPRiBUSElTIENPREUgT1IgSVRTCistKiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLgorLSoKKy0qIEF1dGhvcjogQ2hhcmxlcyBGbHlubi4KKy0qCistKi8KKy0KKy0KKy0jaWZuZGVmIF9fSDM2MDBfVFNfSF9fCistI2RlZmluZSBfX0gzNjAwX1RTX0hfXworLQorLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorLQorLWVudW0gaDM2MDBfdHNfbWlub3JfZGV2aWNlcyB7CistCVRTX01JTk9SICAgID0gMCwKKy0JVFNSQVdfTUlOT1IgPSAxLAorLQlLRVlfTUlOT1IgICA9IDIKKy19OworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX2NhbGlicmF0aW9uIHsKKy0gICAgICAgIGludCB4c2NhbGU7CistICAgICAgICBpbnQgeHRyYW5zOworLSAgICAgICAgaW50IHlzY2FsZTsKKy0gICAgICAgIGludCB5dHJhbnM7CistICAgICAgICBpbnQgeHlzd2FwOworLX0gVFNfQ0FMOworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX2V2ZW50IHsKKy0gICAgICAgIHVuc2lnbmVkIHNob3J0IHByZXNzdXJlOworLSAgICAgICAgdW5zaWduZWQgc2hvcnQgeDsKKy0gICAgICAgIHVuc2lnbmVkIHNob3J0IHk7CistICAgICAgICB1bnNpZ25lZCBzaG9ydCBwYWQ7CistfSBUU19FVkVOVDsKKy0KKy0vKiBEZXByZWNhdGVkIC0gZG8gbm90IHVzZSAqLworLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX3JldHVybiB7CistICAgICAgICB1bnNpZ25lZCBzaG9ydCBwcmVzc3VyZTsKKy0gICAgICAgIHVuc2lnbmVkIHNob3J0IHg7CistICAgICAgICB1bnNpZ25lZCBzaG9ydCB5OworLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcGFkOworLX0gVFNfUkVUOworLQorLWVudW0gcG93ZXJfYnV0dG9uX21vZGUgeworLSAgIFBCTV9TVVNQRU5EICAgICAgICAgICA9IDAsCistICAgUEJNX0dFTkVSQVRFX0tFWVBSRVNTID0gMQorLX07CistCistCistLyogKysrKysrKysrKysrKysgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAqLworLQorLXR5cGVkZWYgc3RydWN0IHRoZXJtX2RldiB7CistCXNob3J0IGRhdGE7CistfSBUSEVSTV9ERVY7CistCistI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fQUxLQUxJTkUgICAgICAgIDB4MDEKKy0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9OSUNEICAgICAgICAgICAgMHgwMgorLSNkZWZpbmUgSDM2MDBfQkFUVF9DSEVNX05JTUggICAgICAgICAgICAweDAzCistI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fTElPTiAgICAgICAgICAgIDB4MDQKKy0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9MSVBPTFkgICAgICAgICAgMHgwNQorLSNkZWZpbmUgSDM2MDBfQkFUVF9DSEVNX05PVF9JTlNUQUxMRUQgICAweDA2CistI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fVU5LTk9XTiAgICAgICAgIDB4ZmYKKy0KKy0vKiBUaGVzZSBzaG91bGQgbWF0Y2ggdGhlIGFwbV9iaW9zLmggZGVmaW5pdGlvbnMgKi8KKy0jZGVmaW5lIEgzNjAwX0FDX1NUQVRVU19BQ19PRkZMSU5FCTB4MDAKKy0jZGVmaW5lIEgzNjAwX0FDX1NUQVRVU19BQ19PTkxJTkUJMHgwMQorLSNkZWZpbmUgSDM2MDBfQUNfU1RBVFVTX0FDX0JBQ0tVUAkweDAyICAgLyogV2hhdCBkb2VzIHRoaXMgbWVhbj8gKi8KKy0jZGVmaW5lIEgzNjAwX0FDX1NUQVRVU19BQ19VTktOT1dOCTB4ZmYKKy0KKy0vKiBUaGVzZSBiaXRmaWVsZHMgYXJlIHJhcmVseSAib3InZCIgdG9nZXRoZXIgKi8KKy0jZGVmaW5lIEgzNjAwX0JBVFRfU1RBVFVTX0hJR0gJCTB4MDEKKy0jZGVmaW5lIEgzNjAwX0JBVFRfU1RBVFVTX0xPVwkJMHgwMgorLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfQ1JJVElDQUwJMHgwNAorLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfQ0hBUkdJTkcJMHgwOAorLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfQ0hBUkdFX01BSU4gICAweDEwCistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19ERUFEICAgICAgICAgIDB4MjAgICAvKiBCYXR0ZXJ5IHdpbGwgbm90IGNoYXJnZSAqLworLSNkZWZpbmUgSDM2MDBfQkFUVF9OT1RfSU5TVEFMTEVEICAgICAgICAweDIwICAgLyogRm9yIGV4cGFuc2lvbiBwYWNrIGJhdHRlcmllcyAqLworLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfRlVMTCAgICAgICAgICAweDQwICAgLyogQmF0dGVyeSBmdWxseSBjaGFyZ2VkIChhbmQgY29ubmVjdGVkIHRvIEFDKSAqLworLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfTk9CQVRUCTB4ODAKKy0jZGVmaW5lIEgzNjAwX0JBVFRfU1RBVFVTX1VOS05PV04JMHhmZgorLQorLXN0cnVjdCBiYXR0ZXJ5X2RhdGEgeworLQl1bnNpZ25lZCBjaGFyICBjaGVtaXN0cnk7CistCXVuc2lnbmVkIGNoYXIgIHN0YXR1czsKKy0JdW5zaWduZWQgc2hvcnQgdm9sdGFnZTsgICAgLyogVm9sdGFnZSBmb3IgYmF0dGVyeSAjMDsgdW5rbm93biBmb3IgYmF0dGVyeSAjMSAqLworLQl1bnNpZ25lZCBzaG9ydCBwZXJjZW50YWdlOyAvKiBQZXJjZW50YWdlIG9mIGZ1bGwgY2hhcmdlICovCistCXVuc2lnbmVkIHNob3J0IGxpZmU7ICAgICAgIC8qIExpZmUgcmVtYWluaW5nIGluIG1pbnV0ZXMgKi8KKy19OworLQorLXN0cnVjdCBoMzYwMF9iYXR0ZXJ5IHsKKy0gICAgICAgIHVuc2lnbmVkIGNoYXIgICAgICAgYWNfc3RhdHVzOworLQl1bnNpZ25lZCBjaGFyICAgICAgIGJhdHRlcnlfY291bnQ7ICAvKiBIb3cgbWFueSBiYXR0ZXJpZXMgd2UgaGF2ZSAqLworLQlzdHJ1Y3QgYmF0dGVyeV9kYXRhIGJhdHRlcnlbMl07CistfTsKKy0KKy0vKiAtLS0tLS0tLSBFRVBST00gYW5kIFNQSSBJbnRlcmZhY2VzIC0tLS0tLS0tLS0tLS0tLSovCistCistI2RlZmluZSBFRVBST01fUkRfQlVGU0laIDYJLyogRUVQUk9NIHJlYWRzIGFyZSAxNiBiaXRzICovCistI2RlZmluZSBFRVBST01fV1JfQlVGU0laIDUJLyogQWxsb3cgcm9vbSBmb3IgOGJpdCAnYWRkcicgZmllbGQgaW4gYnVmZmVyKi8gCistI2RlZmluZSBTUElfUkRfQlVGU0laCSAxNgkvKiBTUEkgcmVhZHMgYXJlIDggYml0cyAqLworLSNkZWZpbmUgU1BJX1dSX0JVRlNJWgkgNworLQorLS8qIFRoZSBFRVBST00gaXMgd2hlcmUgaW50ZXJuYWwgcHJvZ3JhbXMgYXJlIHN0b3JlZCBvbiB0aGUgQW10ZWwuCistICAgWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gcmVhZCBvciB3cml0ZSB0aGVzZSB2YWx1ZXMgKi8KKy0KKy10eXBlZGVmIHN0cnVjdCBoMzYwMF9lZXByb21fcmVhZF9yZXF1ZXN0IHsKKy0JdW5zaWduZWQgY2hhciBhZGRyOyAgICAvKiA4Yml0IEFkZHJlc3MgT2Zmc2V0IDAtMjU1ICovCistCXVuc2lnbmVkIGNoYXIgbGVuOyAgICAgLyogTnVtYmVyIG9mIDE2Yml0IHdvcmRzIHRvIHJlYWQgMC0xMjggICovCistCXVuc2lnbmVkIHNob3J0IGJ1ZmZbRUVQUk9NX1JEX0JVRlNJWl07CistfSBFRVBST01fUkVBRDsKKy0KKy10eXBlZGVmIHN0cnVjdCBoMzYwMF9lZXByb21fd3JpdGVfcmVxdWVzdCB7CistCXVuc2lnbmVkIGNoYXIgbGVuOwkvKiB1c2VkIG9ubHkgdG8gY29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNlbmQgKi8KKy0JdW5zaWduZWQgY2hhciBhZGRyOyAgICAvKiAwLTEyOCAgKi8KKy0JdW5zaWduZWQgc2hvcnQgYnVmZltFRVBST01fV1JfQlVGU0laXTsKKy19IEVFUFJPTV9XUklURTsKKy0KKy0vKiBUaGUgU1BJIGJ1cyBjb25uZWN0cyB0byBFRVBST01zIGxvY2F0ZWQgb24gc2xlZXZlcyBwbHVnZ2VkIGludG8KKy0gICB0aGUgaVBBUS4gIFlvdSBtYXkgd2FudCB0byByZWFkIHRoZXNlIHZhbHVlcyAgKi8KKy0KKy10eXBlZGVmIHN0cnVjdCBoMzYwMF9zcGlfcmVhZF9yZXF1ZXN0IHsKKy0JdW5zaWduZWQgc2hvcnQgYWRkcjsgICAgLyogMTZiaXQgQWRkcmVzcyBPZmZzZXQgMC0xMjggKi8KKy0JdW5zaWduZWQgY2hhciBsZW47ICAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgKi8KKy0JdW5zaWduZWQgY2hhciBidWZmW1NQSV9SRF9CVUZTSVpdOworLX0gU1BJX1JFQUQ7CistCistI2RlZmluZSBTUElfUkVBRF9TVEFUVVNfQllURSAgMHhmZmZmICAgLyogVXNlIHRoaXMgYWRkcmVzcyB0byByZWFkIHRoZSBzdGF0dXMgYnl0ZSAqLworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX3NwaV93cml0ZV9yZXF1ZXN0IHsKKy0JdW5zaWduZWQgc2hvcnQgbGVuOwkvKiB1c2VkIG9ubHkgdG8gY29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNlbmQgKi8KKy0JdW5zaWduZWQgc2hvcnQgYWRkcjsJLyogdGhpcyAxNmJpdCBhZGRyZXNzIGFjY2Vzc2VzIGEgc2luZ2xlIGJ5dGUgKi8KKy0JdW5zaWduZWQgY2hhciAgYnVmZltTUElfV1JfQlVGU0laXTsKKy19IFNQSV9XUklURTsKKy0KKy0KKy0vKiAtLS0tLS0tLSBlbmQgb2YgRUVQUk9NIGFuZCBTUEkgSW50ZXJmYWNlcyAtLS0tLS0tLS0tLS0tLS0qLworLQorLS8qIFVzZXIgc3BhY2Ugc3RydWN0dXJlcyBmb3IgSU9DVEwgY2FsbHMgKi8KKy0KKy10eXBlZGVmIHN0cnVjdCBoMzYwMF90c192ZXJzaW9uIHsKKy0JdW5zaWduZWQgY2hhciBob3N0X3ZlcnNpb25bOF07CS8qIGFzY2lpICJ4Lnl5IiAqLworLQl1bnNpZ25lZCBjaGFyIHBhY2tfdmVyc2lvbls4XTsJLyogYXNjaWkgIngueXkiICovCistCXVuc2lnbmVkIGNoYXIgYm9vdF90eXBlOwkJLyogVE9ETyA/PyAqLworLX0gVkVSX1JFVDsKKy0KKy10eXBlZGVmIHN0cnVjdCBoMzYwMF90c19sZWQgeworLSAgICAgICAgdW5zaWduZWQgY2hhciBPZmZPbkJsaW5rOyAgICAgICAvKiAwPW9mZiAxPW9uIDI9QmxpbmsgKi8KKy0gICAgICAgIHVuc2lnbmVkIGNoYXIgVG90YWxUaW1lOyAgICAgICAgLyogVW5pdHMgb2YgNSBzZWNvbmRzICovCistICAgICAgICB1bnNpZ25lZCBjaGFyIE9uVGltZTsgICAgICAgICAgIC8qIHVuaXRzIG9mIDEwMG0vcyAqLworLSAgICAgICAgdW5zaWduZWQgY2hhciBPZmZUaW1lOyAgICAgICAgICAvKiB1bml0cyBvZiAxMDBtL3MgKi8KKy19IExFRF9JTjsKKy0KKy1lbnVtIGZsaXRlX21vZGUgeworLSAgICAgICAgRkxJVEVfTU9ERTEgPSAxLAorLQlGTElURV9BVVRPX01PREUgICA9IDEsICAgICAvKiBmb3IgcmVmZXJlbmNlIG9ubHkgKi8KKy0JRkxJVEVfTUFOVUFMX01PREUgPSAyLCAgICAgLyogVXNlIHRoaXMgbm9ybWFsbHk/ICovCistCUZMSVRFX0dFVF9MSUdIVF9TRU5TT1IgPSAzIC8qIFJldHVybnMgbGlnaHQgcmVhZGluZyBpbiAiYnJpZ2h0bmVzcyIgZmllbGQgKi8KKy19OworLWVudW0gZmxpdGVfcHdyIHsKKy0gICAgICAgIEZMSVRFX1BXUl9PRkYgPSAwLAorLSAgICAgICAgRkxJVEVfUFdSX09OICA9IDEKKy19OworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX2ZsaXRlIHsKKy0gICAgICAgIHVuc2lnbmVkIGNoYXIgbW9kZTsKKy0gICAgICAgIHVuc2lnbmVkIGNoYXIgcHdyOworLSAgICAgICAgdW5zaWduZWQgY2hhciBicmlnaHRuZXNzOworLX0gRkxJVEVfSU47CistCistLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiBVcGRhdGVkICJ1bml2ZXJzYWwiIHN0cnVjdHVyZXMgKioqKioqKioqKioqKioqKioqKi8KKy0KKy0vKiBTZXRzIGJhY2tsaWdodCBmb3IgYm90aCBIMzEwMCBhbmQgSDM2MDAgbW9kZWxzIC0gdGVjaG5pY2FsbHkgImZyb250bGlnaHQiIGZvciBIMzYwMCAqLworLXN0cnVjdCBoMzYwMF90c19iYWNrbGlnaHQgeworLQllbnVtIGZsaXRlX3B3ciBwb3dlcjsgICAgICAgICAgLyogMCA9IG9mZiwgMSA9IG9uICovCistCXVuc2lnbmVkIGNoYXIgIGJyaWdodG5lc3M7ICAgICAvKiAwIC0gMjU1ICAgICAgICAgKi8KKy19OworLQorLXN0cnVjdCBoMzYwMF90c19jb250cmFzdCB7ICAgICAgICAgICAgLyogT25seSB1c2VmdWwgb24gSDMxMDAgbW9kZWwgKi8KKy0JdW5zaWduZWQgY2hhciBjb250cmFzdDsgICAgICAgLyogMCAtIDI1NSAqLworLX07CistCistLyogSU9DVEwgY21kcyAgdXNlciBvciBrZXJuZWwgc3BhY2UgKi8KKy0KKy0vKiBVc2UgJ2YnIGFzIG1hZ2ljIG51bWJlciAqLworLSNkZWZpbmUgSU9DX0gzNjAwX1RTX01BR0lDICAnZicKKy0KKy0vKiBUT0RPOiBTb21lIG9mIHRoZXNlIElPV1IgdmFsdWVzIGFyZSBqdXN0IHBsYWluIHdyb25nICovCistI2RlZmluZSBHRVRfVkVSU0lPTgkJX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsICAxLCBzdHJ1Y3QgaDM2MDBfdHNfdmVyc2lvbiApCistI2RlZmluZSBSRUFEX0VFUFJPTQkJX0lPV1IoSU9DX0gzNjAwX1RTX01BR0lDLCAyLCBzdHJ1Y3QgaDM2MDBfZWVwcm9tX3JlYWRfcmVxdWVzdCkKKy0jZGVmaW5lIFdSSVRFX0VFUFJPTQkJX0lPV1IoSU9DX0gzNjAwX1RTX01BR0lDLCAzLCBzdHJ1Y3QgaDM2MDBfZWVwcm9tX3dyaXRlX3JlcXVlc3QpCistI2RlZmluZSBHRVRfVEhFUk1BTAkJX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsICA0LCBzdHJ1Y3QgdGhlcm1fZGV2KQorLSNkZWZpbmUgTEVEX09OCQkJX0lPVyhJT0NfSDM2MDBfVFNfTUFHSUMsICA1LCBzdHJ1Y3QgaDM2MDBfdHNfbGVkKQorLSNkZWZpbmUgR0VUX0JBVFRFUllfU1RBVFVTCV9JT1IoSU9DX0gzNjAwX1RTX01BR0lDLCAgNiwgc3RydWN0IGgzNjAwX2JhdHRlcnkpCistI2RlZmluZSBGTElURV9PTgkJX0lPVyhJT0NfSDM2MDBfVFNfTUFHSUMsICA3LCBzdHJ1Y3QgaDM2MDBfdHNfZmxpdGUpCistI2RlZmluZSBSRUFEX1NQSQkJX0lPV1IoSU9DX0gzNjAwX1RTX01BR0lDLCA4LCBzdHJ1Y3QgaDM2MDBfc3BpX3JlYWRfcmVxdWVzdCkKKy0jZGVmaW5lIFdSSVRFX1NQSQkJX0lPV1IoSU9DX0gzNjAwX1RTX01BR0lDLCA5LCBzdHJ1Y3QgaDM2MDBfc3BpX3dyaXRlX3JlcXVlc3QpCistI2RlZmluZSBUU19HRVRfQ0FMCQlfSU9SKElPQ19IMzYwMF9UU19NQUdJQywgMTAsIHN0cnVjdCBoMzYwMF90c19jYWxpYnJhdGlvbikKKy0jZGVmaW5lIFRTX1NFVF9DQUwJCV9JT1coSU9DX0gzNjAwX1RTX01BR0lDLCAxMSwgc3RydWN0IGgzNjAwX3RzX2NhbGlicmF0aW9uKQorLQorLS8qIE5ldyBJT0NUTCBpbnRlcmZhY2VzIC0gZGVmaW5lZCB0byBiZSBtb3JlIHVzZXIgZnJpZW5kbHkgKi8KKy0jZGVmaW5lIFRTX0dFVF9CQUNLTElHSFQgICAgICAgIF9JT1IoSU9DX0gzNjAwX1RTX01BR0lDLCAyMCwgc3RydWN0IGgzNjAwX3RzX2JhY2tsaWdodCkKKy0jZGVmaW5lIFRTX1NFVF9CQUNLTElHSFQgICAgICAgIF9JT1coSU9DX0gzNjAwX1RTX01BR0lDLCAyMCwgc3RydWN0IGgzNjAwX3RzX2JhY2tsaWdodCkKKy0jZGVmaW5lIFRTX0dFVF9DT05UUkFTVCAgICAgICAgIF9JT1IoSU9DX0gzNjAwX1RTX01BR0lDLCAyMSwgc3RydWN0IGgzNjAwX3RzX2NvbnRyYXN0KQorLSNkZWZpbmUgVFNfU0VUX0NPTlRSQVNUICAgICAgICAgX0lPVyhJT0NfSDM2MDBfVFNfTUFHSUMsIDIxLCBzdHJ1Y3QgaDM2MDBfdHNfY29udHJhc3QpCistCistI2VuZGlmCitJbmRleDogeHRzY2FsLTAuNi4zL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geHRzY2FsLTAuNi4zLm9yaWcvTWFrZWZpbGUuYW0JMjAwNC0wNi0wMiAyMzowNzoxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyB4dHNjYWwtMC42LjMvTWFrZWZpbGUuYW0JMjAwNy0wNy0wMiAxMjo1MTowMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xLDExICsxLDggQEAKKy1saWJleGVjX1BST0dSQU1TID0geHRzY2FsLmJpbgorLWJpbl9TQ1JJUFRTID0geHRzY2FsCisrYmluX1BST0dSQU1TID0geHRzY2FsCisgCisteHRzY2FsX2Jpbl9TT1VSQ0VTID0gbWFpbi5jIGNhbGlicmF0ZS5jIGNhbGlicmF0ZS5oIGgzNjAwX3RzLmgKKyt4dHNjYWxfU09VUkNFUyA9IG1haW4uYyBjYWxpYnJhdGUuYyBjYWxpYnJhdGUuaAorIAorLXh0c2NhbF9iaW5fTERBREQgPSBAWFRTQ0FMX0xJQlNACisreHRzY2FsX0xEQUREID0gQFhUU0NBTF9MSUJTQAorIAorIElOQ0xVREVTID0gQFhUU0NBTF9DRkxBR1NAIC1ETlJfUE9JTlRTPTUKKyAKKy1pbmNsdWRlIGdwZS1kaXN0LmFtCistCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U0NTMzZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaApAQCAtMCwwICsxLDI3IEBACithZnRlciBnY2MgbGlua2luZyBoYXMgY2hhbmdlZCwgYWxsIHRoZSBsaWJyYXJpZXMgbXVzdCBiZSBleHBsaWNpdGVseSBzcGVjaWZpZWQgCitUaGlzIHBhdGNoIGF2b2lkcyB0aGlzIGxpbmtpbmcgZXJyb3I6CisKK3wgY2NhY2hlIGk1ODYtcG9reS1saW51eC1nY2MgLW1hcmNoPWk1ODYgLS1zeXNyb290PS9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy9pNTg2LXBva3ktbGludXggIC1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZyZW5hbWUtcmVnaXN0ZXJzIC1PMiAtZ2dkYiAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgIC1XbCwtTzEgLVdsLC0taGFzaC1zdHlsZT1nbnUgLVdsLC0tYXMtbmVlZGVkIC1vIHh0c2NhbCBtYWluLm8gY2FsaWJyYXRlLm8gLWxYMTEgLWxYZnQgLWxYZXh0IC1sWGNhbGlicmF0ZV5NCit8IC9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYmV4ZWMvaTU4Ni1wb2t5LWxpbnV4L2djYy9pNTg2LXBva3ktbGludXgvNC41LjEvbGQ6IF4/OiBpbnZhbGlkIERTTyBmb3Igc3ltYm9sIGBYUmVuZGVyQ2hhbmdlUGljdHVyZScgZGVmaW5pdGlvbl5NCit8IC9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy9pNTg2LXBva3ktbGludXgvdXNyL2xpYi9saWJYcmVuZGVyLnNvLjE6IGNvdWxkIG5vdCByZWFkIHN5bWJvbHM6IEJhZCB2YWx1ZV5NCit8IGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzXk0KK3wgbWFrZTogKioqIFt4dHNjYWxdIEVycm9yIDEKKworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK0RhdGU6IDIwMTEvMDEvMTEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB4dHNjYWwtMC42LjMvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geHRzY2FsLTAuNi4zLm9yaWcvY29uZmlndXJlLmFjCisrKysgeHRzY2FsLTAuNi4zL2NvbmZpZ3VyZS5hYworQEAgLTksNyArOSw3IEBAIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gZGlzdC1iemlwMl0pCisgIyBDaGVja3MgZm9yIHByb2dyYW1zLgorIEFDX1BST0dfQ0MKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhYVFNDQUwsIHgxMSB4ZnQgeGV4dCB4Y2FsaWJyYXRlKQorK1BLR19DSEVDS19NT0RVTEVTKFhUU0NBTCwgeDExIHhmdCB4ZXh0IHhjYWxpYnJhdGUgeHJlbmRlcikKKyAKKyBBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlXSkKKyBBQ19PVVRQVVQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWxfMC42LjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsXzAuNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZmRkZjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsXzAuNi4zLmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiVG91Y2hzY3JlZW4gY2FsaWJyYXRpb24gdXRpbGl0eSIKKworREVTQ1JJUFRJT04gPSAiQmFzaWMgdG91Y2hzY3JlZW4gY2FsaWJyYXRpb24gdXRpbGl0eSIKKworSE9NRVBBR0UgPSAiaHR0cDovL2dwZS5saW51eHRvZ28ub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy5saW51eHRvZ28ub3JnIgorTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21haW4uYztlbmRsaW5lPTEwO21kNT04NzIxYmNiMDhhZTlmMjRlNWZlNGM4Mjk0MTg3M2M4NyIKKworU0VDVElPTiA9ICJ4MTEvYmFzZSIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4ZnQgbGlieGNhbGlicmF0ZSIKKworUFIgPSAicjEzIgorCitTUkNfVVJJID0gIiR7R1BFX01JUlJPUn0veHRzY2FsLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vY2hhbmdlLWNyb3NzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NsZWFudXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8zMHhUc19DYWxpYnJhdGUuc2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YmNhYjgwYjQ3NGQ1NDU0NDc3ZDFjYTE2NmE2OGMzNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyN2I5ZGMyMjAzZGU5YjE3MDZjYTM5ZmE2Y2E4MGVjYWI4ODA3OTA5ZWM5MDFjNGEzNDViOGU0MTE3ODgwMGExIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vMzB4VHNfQ2FsaWJyYXRlLnNoICR7RH0ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kLworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHZpZGVvLXRlc3RzL3h2aWRlby10ZXN0c19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dmlkZW8tdGVzdHMveHZpZGVvLXRlc3RzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjNjOWUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHZpZGVvLXRlc3RzL3h2aWRlby10ZXN0c19naXQuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJTaW1wbGUgWFZpZGVvIHRlc3QgYXBwbGljYXRpb24iCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy90ZXN0LXh2aWRlby5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTZhZTNiNGMzYzJmZjllNTFkYmJjMzViYjIzN2FmYTAwIgorREVQRU5EUyA9ICJsaWJ4diIKKworU1JDUkVWID0gImY4ZjMyMGQwMjU0YzA5Y2U0ODNmYzFkOGVlOTllY2Y1YmM5NDA5NjUiCitQViA9ICIwLjErZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvdGVzdC14dmlkZW8iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBsaWJ4diByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2Jsa3RyYWNlL2Jsa3RyYWNlL2xkZmxhZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvYmxrdHJhY2UvYmxrdHJhY2UvbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzdkMTYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2Jsa3RyYWNlL2Jsa3RyYWNlL2xkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSw5MyBAQAorYmxrdHJhY2U6IG9iZXkgTERGTEFHUworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KKwordGhlIHBhdGNoIHdhcyBpbXBvcnRlZCBmcm9tIG1ldGEtbWVudG9yIGxheWVyIG9uIHlvY3RvcHJvamVjdCBnaXQgc2VydmVyCitodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9tZXRhLW1lbnRvciBhcyBvZiBjb21taXQgaWQKK2FlZDQ2MzQxNGUyZTJiZjhjYTQ0YmE1NGVlNTk3M2U3ZWQ1OTllNTcKKworU2lnbmVkLW9mZi1ieTogRmFoYWQgVXNtYW4gPGZhaGFkX3VzbWFuQG1lbnRvci5jb20+CistLS0KKyBNYWtlZmlsZSAgICAgICAgICB8ICAgMTEgKysrKysrLS0tLS0KKyBidHJlcGxheS9NYWtlZmlsZSB8ICAgIDMgKystCisgYnR0L01ha2VmaWxlICAgICAgfCAgICAzICsrLQorIDMgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworLS0tIGdpdC5vcmlnL01ha2VmaWxlCisrKysgZ2l0L01ha2VmaWxlCitAQCAtMSw1ICsxLDYgQEAKKyBDQwk9IGdjYworIENGTEFHUwk9IC1XYWxsIC1PMiAtZyAtVworK0xERkxBR1MgPQorIEFMTF9DRkxBR1MgPSAkKENGTEFHUykgLURfR05VX1NPVVJDRSAtRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKKyBQUk9HUwk9IGJsa3BhcnNlIGJsa3RyYWNlIHZlcmlmeV9ibGtwYXJzZSBibGtyYXd2ZXJpZnkgYmxraW9tb24KKyBMSUJTCT0gLWxwdGhyZWFkCitAQCAtMjMsMTkgKzI0LDE5IEBAIGJ0cmVwbGF5L2J0cmVwbGF5OgorIAkkKENDKSAtbyAkKi5vIC1jICQoQUxMX0NGTEFHUykgJDwKKyAKKyBibGtwYXJzZTogYmxrcGFyc2UubyBibGtwYXJzZV9mbXQubyByYnRyZWUubyBhY3RfbWFzay5vCistCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKQorKwkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMREZMQUdTKQorIAorIGJsa3RyYWNlOiBibGt0cmFjZS5vIGFjdF9tYXNrLm8KKy0JJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTElCUykKKysJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTElCUykgJChMREZMQUdTKQorIAorIHZlcmlmeV9ibGtwYXJzZTogdmVyaWZ5X2Jsa3BhcnNlLm8KKy0JJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pCisrCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExERkxBR1MpCisgCisgYmxrcmF3dmVyaWZ5OiBibGtyYXd2ZXJpZnkubworLQkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikKKysJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTERGTEFHUykKKyAKKyBibGtpb21vbjogYmxraW9tb24ubyByYnRyZWUubworLQkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMSUJTKSAtbHJ0CisrCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpIC1scnQgJChMREZMQUdTKQorIAorICQoUFJPR1MpOiB8IGRlcGVuZAorIAorLS0tIGdpdC5vcmlnL2J0cmVwbGF5L01ha2VmaWxlCisrKysgZ2l0L2J0cmVwbGF5L01ha2VmaWxlCitAQCAtNyw2ICs3LDcgQEAKKyAKKyBDQwk9IGdjYworIENGTEFHUwk9IC1XYWxsIC1XIC1PMiAtZworK0xERkxBR1MgPQorIElOQ1MJPSAtSS4gLUkuLiAtSS4uL2J0dAorIE9DRkxBR1MJPSAtVUNPVU5UX0lPUyAtVURFQlVHIC1ETkRFQlVHCisgWENGTEFHUwk9IC1EX0dOVV9TT1VSQ0UgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0CitAQCAtMzIsMTAgKzMzLDEwIEBAIGNsZWFuOiBkb2NzY2xlYW4KKwkkKENDKSAkKENGTEFHUykgLWMgLW8gJCoubyAkPAorCisgYnRyZWNvcmQ6IGJ0cmVjb3JkLm8KKy0JJChDQykgJChDRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikKKysJJChDQykgJChDRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMREZMQUdTKQorIAorIGJ0cmVwbGF5OiBidHJlcGxheS5vCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTElCUykKKysJJChDQykgJChDRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMSUJTKSAkKExERkxBR1MpCisgCisgZGVwZW5kOgorIAlAJChDQykgLU1NICQoQ0ZMQUdTKSAqLmMgMT4gLmRlcGVuZAorLS0tIGdpdC5vcmlnL2J0dC9NYWtlZmlsZQorKysrIGdpdC9idHQvTWFrZWZpbGUKK0BAIC03LDYgKzcsNyBAQAorIAorIENDCT0gZ2NjCisgQ0ZMQUdTCT0gLVdhbGwgLVcgLU8yIC1nCisrTERGTEFHUyA9CisgSU5DUwk9IC1JLiAtSS4uCisgWENGTEFHUwk9IC1EX0dOVV9TT1VSQ0UgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Cisgb3ZlcnJpZGUgQ0ZMQUdTICs9ICQoSU5DUykgJChYQ0ZMQUdTKQorQEAgLTM4LDcgKzM5LDcgQEAgY2xlYW46IGRvY3NjbGVhbgorIAkkKENDKSAkKENGTEFHUykgLWMgLW8gJCoubyAkPAorIAorIGJ0dDogJChPQkpTKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTElCUykgJChMREZMQUdTKQorIAorIGlmbmVxICgkKHdpbGRjYXJkIC5kZXBlbmQpLCkKKyBpbmNsdWRlIC5kZXBlbmQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9ibGt0cmFjZS9ibGt0cmFjZV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvYmxrdHJhY2UvYmxrdHJhY2VfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMGJlNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvYmxrdHJhY2UvYmxrdHJhY2VfZ2l0LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiR2VuZXJhdGVzIHRyYWNlcyBvZiBJL08gdHJhZmZpYyBvbiBibG9jayBkZXZpY2VzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTM5M2E1Y2E0NDVmNjk2NTg3M2VjYTAyNTlhMTdmODMzIgorCitERVBFTkRTID0gImxpYmFpbyIKKworU1JDUkVWID0gIjQzZmM4NzBjZTA0ZTk2M2RlZjQ1ZGZjMGQxZWQ0ZWEyMWVmMTBkNGIiCisKK1BWID0gIjEuMS4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwuZGsvYmxrdHJhY2UuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2xkZmxhZ3MucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0VYVFJBX09FTUFLRSA9ICJcCisgICAgJ0NDPSR7Q0N9JyBcCisgICAgJ0NGTEFHUz0ke0NGTEFHU30nIFwKKyAgICAnTERGTEFHUz0ke0xERkxBR1N9JyBcCisiCisKKyMgVGhlcmUgYXJlIGEgZmV3IHBhcmFsbGVsIGlzc3VlczoKKyMgMSkgLi4vcmJ0cmVlLm86IGVycm9yIGFkZGluZyBzeW1ib2xzOiBJbnZhbGlkIG9wZXJhdGlvbgorIyBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKyMgTWFrZWZpbGU6NDI6IHJlY2lwZSBmb3IgdGFyZ2V0ICdidHQnIGZhaWxlZAorIyAyKSBnaXQvYmxraW9tb24uYzoyMTY6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHJiX2luc2VydF9jb2xvcicKKyMgY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisjIE1ha2VmaWxlOjI3OiByZWNpcGUgZm9yIHRhcmdldCAnYmxrcGFyc2UnIGZhaWxlZAorIyAzKSBsZDogcmJ0cmVlLm86IGludmFsaWQgc3RyaW5nIG9mZnNldCAxMjggPj0gMTI1IGZvciBzZWN0aW9uIGAuc3RydGFiJworIyA0KSBidHJlcGxheS5vOiBmaWxlIG5vdCByZWNvZ25pemVkOiBGaWxlIHRydW5jYXRlZAorIyBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKyMgYnRyZXBsYXkvYnRyZXBsYXkuYzo0NzoxODogZmF0YWwgZXJyb3I6IGxpc3QuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorUEFSQUxMRUxfTUFLRSA9ICIiCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBBUkNIPSIke0FSQ0h9IiBwcmVmaXg9JHtwcmVmaXh9IFwKKwkJbWFuZGlyPSR7bWFuZGlyfSBERVNURElSPSR7RH0gaW5zdGFsbAorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi1saW51eF8xLjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi1saW51eF8xLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMzODQxZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LWxpbnV4XzEuNy5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIGNyeXB0b2Rldl8ke1BWfS5pbmMKKworU1VNTUFSWSA9ICJBIC9kZXYvY3J5cHRvIGRldmljZSBkcml2ZXIgaGVhZGVyIGZpbGUiCisKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorCisjIEp1c3QgaW5zdGFsbCBjcnlwdG9kZXYuaCB3aGljaCBpcyB0aGUgb25seSBoZWFkZXIgZmlsZSBuZWVkZWQgdG8gYmUgZXhwb3J0ZWQKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtRCAke1N9L2NyeXB0by9jcnlwdG9kZXYuaCAke0R9JHtpbmNsdWRlZGlyfS9jcnlwdG8vY3J5cHRvZGV2LmgKK30KKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LW1vZHVsZV8xLjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi1tb2R1bGVfMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZDUyZWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi1tb2R1bGVfMS43LmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgY3J5cHRvZGV2XyR7UFZ9LmluYworCitTVU1NQVJZID0gIkEgL2Rldi9jcnlwdG8gZGV2aWNlIGRyaXZlciBrZXJuZWwgbW9kdWxlIgorCitpbmhlcml0IG1vZHVsZQorCisjIEhlYWRlciBmaWxlIHByb3ZpZGVkIGJ5IGEgc2VwYXJhdGUgcGFja2FnZQorREVQRU5EUyArPSAiY3J5cHRvZGV2LWxpbnV4IgorCitTUkNfVVJJICs9ICIgXAorZmlsZTovLzAwMDEtRGlzYWJsZS1pbnN0YWxsaW5nLWhlYWRlci1maWxlLXByb3ZpZGVkLWJ5LWFub3RoZXItcC5wYXRjaCBcCitmaWxlOi8vMDAwMS1pb2N0bC5jLUZpeC1idWlsZC1vbi0zLjE5LnBhdGNoIFwKKyIKKworRVhUUkFfT0VNQUtFPSdLRVJORUxfRElSPSIke1NUQUdJTkdfS0VSTkVMX0RJUn0iIFBSRUZJWD0iJHtEfSInCisKK1JDT05GTElDVFNfJHtQTn0gPSAib2NmLWxpbnV4IgorUlJFUExBQ0VTXyR7UE59ID0gIm9jZi1saW51eCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LXRlc3RzXzEuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LXRlc3RzXzEuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmM0MWFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtdGVzdHNfMS43LmJiCkBAIC0wLDAgKzEsMjMgQEAKK3JlcXVpcmUgY3J5cHRvZGV2XyR7UFZ9LmluYworCitTVU1NQVJZID0gIkEgdGVzdCBzdWl0ZSBmb3IgL2Rldi9jcnlwdG8gZGV2aWNlIGRyaXZlciIKKworREVQRU5EUyArPSAib3BlbnNzbCIKKworU1JDX1VSSSArPSAiIFwKK2ZpbGU6Ly8wMDAxLUFkZC10aGUtY29tcGlsZS1hbmQtaW5zdGFsbC1ydWxlcy1mb3ItY3J5cHRvZGV2LXRlc3QucGF0Y2ggXAorZmlsZTovLzAwMDItRml4LXRlc3RzLU1ha2VmaWxlLXVzYWdlLW9mLUxETElCUy12cy4tTERGTEFHUy5wYXRjaCBcCisiCisKK0VYVFJBX09FTUFLRT0nS0VSTkVMX0RJUj0iJHtTVEFHSU5HX0tFUk5FTF9ESVJ9IiBQUkVGSVg9IiR7RH0iJworCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UgdGVzdHByb2dzCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsX3Rlc3RzCit9CisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiaW5kaXJ9L3Rlc3RzX2NyeXB0b2Rldi8uZGVidWciCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vdGVzdHNfY3J5cHRvZGV2LyoiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldl8xLjcuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXZfMS43LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2E2OTI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXZfMS43LmluYwpAQCAtMCwwICsxLDEzIEBACitIT01FUEFHRSA9ICJodHRwOi8vY3J5cHRvZGV2LWxpbnV4Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQuZ25hLm9yZy9jcnlwdG9kZXYtbGludXgvY3J5cHRvZGV2LWxpbnV4LSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjBiNjNiMzQ4MWNmMmM5MDM4NmIzNWYwNTc0ODFkMzZiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQxODgwNTMzYjUzZGU0ZDdiM2YwNTRlMjMwZjU3Njk4OGRhZmI4ZWVkN2JlZjVlYmNmNjQyMmJiMmUzYTNiMjUiCisKK1MgPSAiJHtXT1JLRElSfS9jcnlwdG9kZXYtbGludXgtJHtQVn0iCisKK0NMRUFOQlJPS0VOID0gIjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtQWRkLXRoZS1jb21waWxlLWFuZC1pbnN0YWxsLXJ1bGVzLWZvci1jcnlwdG9kZXYtdGVzdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1BZGQtdGhlLWNvbXBpbGUtYW5kLWluc3RhbGwtcnVsZXMtZm9yLWNyeXB0b2Rldi10ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMDI5OGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtQWRkLXRoZS1jb21waWxlLWFuZC1pbnN0YWxsLXJ1bGVzLWZvci1jcnlwdG9kZXYtdGVzdC5wYXRjaApAQCAtMCwwICsxLDY2IEBACitGcm9tIDE5ODBhOGY0Nzc5YTk1NWU3MzI4NWU3YTBkODY1NDliNjliZWE1YzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBZdSBab25nY2h1biA8YjQwNTI3QGZyZWVzY2FsZS5jb20+CitEYXRlOiBTdW4sIDI4IEFwciAyMDEzIDE0OjM5OjIyICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCB0aGUgY29tcGlsZSBhbmQgaW5zdGFsbCBydWxlcyBmb3IgY3J5cHRvZGV2IHRlc3RzIGZvbGRlcgorCitUaGlzIGlzIHJlcXVpcmVkIHRvIGluc3RhbGwgdGhlIGNyeXB0b2RldiB0ZXN0cyBmb2xkZXIgdG8gcm9vdGZzCisKK1NpZ25lZC1vZmYtYnk6IFl1IFpvbmdjaHVuIDxiNDA1MjdAZnJlZXNjYWxlLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLQorIE1ha2VmaWxlICAgICAgIHwgICAgNiArKysrKysKKyB0ZXN0cy9NYWtlZmlsZSB8ICAgIDggKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCAzMWM0YjNmLi4yZWNmMmE5IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMzQsNiArMzQsOSBAQCBtb2R1bGVzX2luc3RhbGw6CisgCUBlY2hvICJJbnN0YWxsaW5nIGNyeXB0b2Rldi5oIGluICQoUFJFRklYKS91c3IvaW5jbHVkZS9jcnlwdG8gLi4uIgorIAlAaW5zdGFsbCAtRCBjcnlwdG8vY3J5cHRvZGV2LmggJChQUkVGSVgpL3Vzci9pbmNsdWRlL2NyeXB0by9jcnlwdG9kZXYuaAorIAorK2luc3RhbGxfdGVzdHM6CisrCW1ha2UgLUMgdGVzdHMgaW5zdGFsbCBERVNURElSPSQoUFJFRklYKQorKworIGNsZWFuOgorIAltYWtlIC1DICQoS0VSTkVMX0RJUikgU1VCRElSUz1gcHdkYCBjbGVhbgorIAlybSAtZiAkKGhvc3Rwcm9ncykgKn4KK0BAIC00Miw2ICs0NSw5IEBAIGNsZWFuOgorIGNoZWNrOgorIAlDRkxBR1M9JChDUllQVE9ERVZfQ0ZMQUdTKSBLRVJORUxfRElSPSQoS0VSTkVMX0RJUikgbWFrZSAtQyB0ZXN0cyBjaGVjaworIAorK3Rlc3Rwcm9nczoKKysJS0VSTkVMX0RJUj0kKEtFUk5FTF9ESVIpIG1ha2UgLUMgdGVzdHMgdGVzdHByb2dzCisrCisgQ1BPUFRTID0KKyBpZm5lcSAoJHtTSE9XX1RZUEVTfSwpCisgQ1BPUFRTICs9IC0tc2hvdy10eXBlcworZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlIGIvdGVzdHMvTWFrZWZpbGUKK2luZGV4IGM5ZjA0ZTguLmNkMjAyYWYgMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZQorKysrIGIvdGVzdHMvTWFrZWZpbGUKK0BAIC0xOSw2ICsxOSwxMiBAQCBleGFtcGxlLWFzeW5jLWhtYWMtb2JqcyA6PSBhc3luY19obWFjLm8KKyBleGFtcGxlLWFzeW5jLXNwZWVkLW9ianMgOj0gYXN5bmNfc3BlZWQubworIGV4YW1wbGUtaGFzaGNyeXB0LXNwZWVkLW9ianMgOj0gaGFzaGNyeXB0X3NwZWVkLmMKKyAKKytpbnN0YWxsOgorKwlpbnN0YWxsIC1kICAkKERFU1RESVIpL3Vzci9iaW4vdGVzdHNfY3J5cHRvZGV2CisrCWZvciBiaW4gaW4gJChob3N0cHJvZ3MpOyBkbyBcCisrCQlpbnN0YWxsIC1tIDc1NSAkJHtiaW59ICQoREVTVERJUikvdXNyL2Jpbi90ZXN0c19jcnlwdG9kZXYvOyBcCisrCWRvbmUKKysKKyBjaGVjazogJChob3N0cHJvZ3MpCisgCS4vY2lwaGVyCisgCS4vaG1hYworQEAgLTI4LDYgKzM0LDggQEAgY2hlY2s6ICQoaG9zdHByb2dzKQorIAkuL2NpcGhlci1nY20KKyAJLi9jaXBoZXItYWVhZAorIAorK3Rlc3Rwcm9nczogJChob3N0cHJvZ3MpCisrCisgY2xlYW46CisgCXJtIC1mICoubyAqfiAkKGhvc3Rwcm9ncykKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1EaXNhYmxlLWluc3RhbGxpbmctaGVhZGVyLWZpbGUtcHJvdmlkZWQtYnktYW5vdGhlci1wLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLURpc2FibGUtaW5zdGFsbGluZy1oZWFkZXItZmlsZS1wcm92aWRlZC1ieS1hbm90aGVyLXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU4MGZjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1EaXNhYmxlLWluc3RhbGxpbmctaGVhZGVyLWZpbGUtcHJvdmlkZWQtYnktYW5vdGhlci1wLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gOGE4ODRmNTViZDE1MjdiYWE4MmZhYjY4YzE4NmJhNTQ2MjczODYwYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERlbnlzIERteXRyaXllbmtvIDxkZW55c0B0aS5jb20+CitEYXRlOiBTdW4sIDYgQXByIDIwMTQgMTk6NTE6MzkgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gRGlzYWJsZSBpbnN0YWxsaW5nIGhlYWRlciBmaWxlIHByb3ZpZGVkIGJ5IGFub3RoZXIgcGFja2FnZQorCitTaWduZWQtb2ZmLWJ5OiBEZW55cyBEbXl0cml5ZW5rbyA8ZGVueXNAdGkuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgWyBPRSBzcGVjaWZpYyBdCistLS0KKyBNYWtlZmlsZSB8IDIgLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IGQ2NmVmMjYuLjhlOTdjNmEgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0yMyw4ICsyMyw2IEBAIGluc3RhbGw6IG1vZHVsZXNfaW5zdGFsbAorIAorIG1vZHVsZXNfaW5zdGFsbDoKKyAJbWFrZSAtQyAkKEtFUk5FTF9ESVIpIFNVQkRJUlM9YHB3ZGAgbW9kdWxlc19pbnN0YWxsCistCUBlY2hvICJJbnN0YWxsaW5nIGNyeXB0b2Rldi5oIGluICQoUFJFRklYKS91c3IvaW5jbHVkZS9jcnlwdG8gLi4uIgorLQlAaW5zdGFsbCAtRCBjcnlwdG8vY3J5cHRvZGV2LmggJChQUkVGSVgpL3Vzci9pbmNsdWRlL2NyeXB0by9jcnlwdG9kZXYuaAorIAorIGNsZWFuOgorIAltYWtlIC1DICQoS0VSTkVMX0RJUikgU1VCRElSUz1gcHdkYCBjbGVhbgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtaW9jdGwuYy1GaXgtYnVpbGQtb24tMy4xOS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1pb2N0bC5jLUZpeC1idWlsZC1vbi0zLjE5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0Yzg5NzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtaW9jdGwuYy1GaXgtYnVpbGQtb24tMy4xOS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDdkNzExMjQ5OTEwMzBmOTk5NjVlNmU2YWFlZDQyMTExNWYxODVhZGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSaWNhcmRvIFJpYmFsZGEgRGVsZ2FkbyA8cmljYXJkby5yaWJhbGRhQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgOSBGZWIgMjAxNSAxMzo1MTo1NiArMDEwMAorU3ViamVjdDogW1BBVENIXSBpb2N0bC5jOiBGaXggYnVpbGQgb24gMy4xOQorCitnZXRfdW51c2VkX2ZkKCkgTUFDUk8gaGFzIGJlZW4gcmVtb3ZlZCBvbiBrZXJuZWwgMy4xOS4gUmVwbGFjZSBieSB0aGUKK2FjdHVhbCBvdXRwdXQgb2YgdGhlIG1hY3JvLgorCitTaWduZWQtb2ZmLWJ5OiBSaWNhcmRvIFJpYmFsZGEgRGVsZ2FkbyA8cmljYXJkby5yaWJhbGRhQGdtYWlsLmNvbT4KKy0tLQorIGlvY3RsLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9pb2N0bC5jIGIvaW9jdGwuYworaW5kZXggZjI2Y2Y5My4uY2Y4Y2MxNyAxMDA2NDQKKy0tLSBhL2lvY3RsLmMKKysrKyBiL2lvY3RsLmMKK0BAIC01MjksNyArNTI5LDcgQEAgc3RhdGljIGludAorIGNsb25lZmQoc3RydWN0IGZpbGUgKmZpbHApCisgeworIAlpbnQgcmV0OworLQlyZXQgPSBnZXRfdW51c2VkX2ZkKCk7CisrCXJldCA9IGdldF91bnVzZWRfZmRfZmxhZ3MoMCk7CisgCWlmIChyZXQgPj0gMCkgeworIAkJCWdldF9maWxlKGZpbHApOworIAkJCWZkX2luc3RhbGwocmV0LCBmaWxwKTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAyLUZpeC10ZXN0cy1NYWtlZmlsZS11c2FnZS1vZi1MRExJQlMtdnMuLUxERkxBR1MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDItRml4LXRlc3RzLU1ha2VmaWxlLXVzYWdlLW9mLUxETElCUy12cy4tTERGTEFHUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWFiOGI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAyLUZpeC10ZXN0cy1NYWtlZmlsZS11c2FnZS1vZi1MRExJQlMtdnMuLUxERkxBR1MucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSA0N2ZmMWViOWJiNGY4NzJjMWQ3MzFiOTNkMzM0ZWU1ODY1YmYzNDM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGVueXMgRG15dHJpeWVua28gPGRlbnlzQHRpLmNvbT4KK0RhdGU6IFN1biwgNiBBcHIgMjAxNCAyMjoxNjozMCAtMDQwMAorU3ViamVjdDogW1BBVENIXSBGaXggdGVzdHMgTWFrZWZpbGUgdXNhZ2Ugb2YgTERMSUJTIHZzLiBMREZMQUdTCisKK0xpYnJhcmllcyBtdXN0IGNvbWUgYWZ0ZXIgb2JqZWN0cywgYXMgbGluayBvcmRlciBtYXR0ZXJzLCBlc3BlY2lhbGx5Cit3aGVuIHVzaW5nIGxpbmtlciBmbGFncyBsaWtlIC1XbCwtLWFzLW5lZWRlZC4KKworU2lnbmVkLW9mZi1ieTogRGVueXMgRG15dHJpeWVua28gPGRlbnlzQHRpLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyB0ZXN0cy9NYWtlZmlsZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlIGIvdGVzdHMvTWFrZWZpbGUKK2luZGV4IGNkMjAyYWYuLjY3YzNjODMgMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZQorKysrIGIvdGVzdHMvTWFrZWZpbGUKK0BAIC0zOSw1ICszOSw1IEBAIHRlc3Rwcm9nczogJChob3N0cHJvZ3MpCisgY2xlYW46CisgCXJtIC1mICoubyAqfiAkKGhvc3Rwcm9ncykKKyAKKy0ke2NvbXBfcHJvZ3N9OiBMREZMQUdTICs9IC1sc3NsIC1sY3J5cHRvCisrJHtjb21wX3Byb2dzfTogTERMSUJTICs9IC1sc3NsIC1sY3J5cHRvCisgJHtjb21wX3Byb2dzfTogJTogJS5vIG9wZW5zc2xfd3JhcHBlci5vCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzQwOWIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGMuaW5jCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiRGV2aWNlIFRyZWUgQ29tcGlsZXIiCitERVNDUklQVElPTiA9ICJUaGUgRGV2aWNlIFRyZWUgQ29tcGlsZXIgaXMgYSB0b29sIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGUgT3Blbi1GaXJtd2FyZS1saWtlIGRldmljZSB0cmVlIHVzZWQgYnkgUG93ZXJQQyBrZXJuZWxzLiIKK1NFQ1RJT04gPSAiYm9vdGxvYWRlciIKK0xJQ0VOU0UgPSAiR1BMdjIgfCBCU0QiCitERVBFTkRTID0gImZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL3V0aWxzL2R0Yy9kdGMuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL21ha2VfaW5zdGFsbC5wYXRjaCBcCisJICAiCisKK0VYVFJBX09FTUFLRT0nUFJFRklYPSIke3ByZWZpeH0iIExJQkRJUj0iJHtsaWJkaXJ9IiBERVNURElSPSIke0R9IicKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1taXNjIgorRklMRVNfJHtQTn0tbWlzYyA9ICIke2JpbmRpcn0vY29udmVydC1kdHN2MCAke2JpbmRpcn0vZnRkdW1wICR7YmluZGlyfS9kdGRpZmYiCisKK1JERVBFTkRTXyR7UE59LW1pc2MgKz0gImJhc2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Yy9tYWtlX2luc3RhbGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Yy9tYWtlX2luc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyMDYxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjL21ha2VfaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBnaXQvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9NYWtlZmlsZQkyMDExLTExLTAyIDE0OjUyOjE3LjI0MzEwNDc3OSAtMDcwMAorKysrIGdpdC9NYWtlZmlsZQkyMDExLTExLTAyIDE1OjA2OjAxLjU1NTEwNDk4MiAtMDcwMAorQEAgLTE2MSw4ICsxNjEsOCBAQAorIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKEJJTkRJUikKKyAJJChJTlNUQUxMKSAkKEJJTikgJChTQ1JJUFRTKSAkKERFU1RESVIpJChCSU5ESVIpCisgCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQoTElCRElSKQorLQkkKElOU1RBTEwpICQoTElCRkRUX2xpYikgJChERVNURElSKSQoTElCRElSKQorLQlsbiAtc2YgJChub3RkaXIgJChMSUJGRFRfbGliKSkgJChERVNURElSKSQoTElCRElSKS8kKExJQkZEVF9zb25hbWUpCisrCSQoSU5TVEFMTCkgJChMSUJGRFRfbGliKSAkKERFU1RESVIpJChMSUJESVIpLyQoTElCRkRUX3NvbmFtZSkKKysJbG4gLXNmICQoTElCRkRUX3NvbmFtZSkgJChERVNURElSKSQoTElCRElSKS8kKG5vdGRpciAkKExJQkZEVF9saWIpKQorIAlsbiAtc2YgJChMSUJGRFRfc29uYW1lKSAkKERFU1RESVIpJChMSUJESVIpL2xpYmZkdC4kKFNIQVJFRExJQl9FWFQpCisgCSQoSU5TVEFMTCkgLW0gNjQ0ICQoTElCRkRUX2FyY2hpdmUpICQoREVTVERJUikkKExJQkRJUikKKyAJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChJTkNMVURFRElSKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGNfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NDYxNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Y19naXQuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSBkdGMuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0dQTDttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorCQkgICAgZmlsZTovL2xpYmZkdC9saWJmZHQuaDtiZWdpbmxpbmU9MztlbmRsaW5lPTUyO21kNT1mYjM2MDk2MzE1MWY4ZWMyZDZjMDZiMDU1YmNiYjY4YyIKKworU1JDUkVWID0gIjMwMmZjYTlmNGMyODNlMTk5NGNmMGE1YTljZTFjZjQzY2ExNWU2ZDIiCitQViA9ICIxLjQuMStnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tlcm4tdG9vbHMva2Vybi10b29scy1uYXRpdmVfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tlcm4tdG9vbHMva2Vybi10b29scy1uYXRpdmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NTMwOTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2Vybi10b29scy9rZXJuLXRvb2xzLW5hdGl2ZV9naXQuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJUb29scyBmb3IgbWFuYWdpbmcgWW9jdG8gUHJvamVjdCBzdHlsZSBicmFuY2hlZCBrZXJuZWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2dpdC90b29scy9rZ2l0O2JlZ2lubGluZT01O2VuZGxpbmU9OTttZDU9ZDhkMWQ3MjlhNzBjZDVmNTI5NzJmODg4NGI4MDc0M2QiCisKK0RFUEVORFMgPSAiZ2l0LW5hdGl2ZSIKKworU1JDUkVWID0gImJkMTQ0ZDQzY2E1YjFlYWY5ZTcyN2JjZWQ0Y2UzYjYxYjY0MjI5N2MiCitQUiA9ICJyMTIiCitQViA9ICIwLjIrZ2l0JHtTUkNQVn0iCisKK2luaGVyaXQgbmF0aXZlCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLXRvb2xzLmdpdCIKK1MgPSAiJHtXT1JLRElSfSIKKworZG9fY29tcGlsZSgpIHsgCisJOgorfQorCitkb19pbnN0YWxsKCkgeworCWNkICR7U30vZ2l0CisJbWFrZSBERVNURElSPSR7RH0ke2JpbmRpcn0gaW5zdGFsbAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc5N2EyNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy5pbmMKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJLZXhlYyBmYXN0IHJlYm9vdCB0b29scyIKK0RFU0NSSVBUSU9OID0gIktleGVjIGlzIGEgZmFzdCByZWJvb3QgZmVhdHVyZSB0aGF0IGxldHMgeW91IHJlYm9vdCB0byBhIG5ldyBMaW51eCBrZXJuZWwiCitBVVRIT1IgPSAiRXJpYyBCaWVkZXJtYW4iCitIT01FUEFHRSA9ICJodHRwOi8va2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL2tleGVjLyIKK1NFQ1RJT04gPSAia2VybmVsL3VzZXJsYW5kIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVhNWJlZDJmNjBkMzU3NjE4Y2ExNjFhZDUzOWY3YzBhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2tleGVjL2tleGVjLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9YWYxMGY2YWU0YTg3MTU5NjVlNjQ4YWE2ODdhZDNlMDkiCitERVBFTkRTID0gInpsaWIgeHoiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC91dGlscy9rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMtJHtQVn0udGFyLmd6IgorCitQUiA9ICJyMSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjQuKnxpLjg2Lip8YXJtLip8YWFyY2g2NC4qfHBvd2VycGMuKnxtaXBzLiopLShsaW51eHxmcmVlYnNkLiopJworCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJhcmNoIgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgIyBSZW1vdmUgdGhlICcqLmQnIGZpbGUgdG8gbWFrZSBzdXJlIHRoZSByZWNvbXBpbGUgaXMgT0sKKyAgICBmb3IgZGVwIGluIGBmaW5kICR7Qn0gLXR5cGUgZiAtbmFtZSAnKi5kJ2A7IGRvCisgICAgICAgIGRlcF9ub19kPSJgZWNobyAkZGVwIHwgc2VkICdzIy5kJCMjJ2AiCisgICAgICAgICMgUmVtb3ZlIGZpbGUuZCB3aGVuIHRoZXJlIGlzIGEgZmlsZS5vCisgICAgICAgIGlmIFsgLWYgIiRkZXBfbm9fZC5vIiBdOyB0aGVuCisgICAgICAgICAgICBybSAtZiAkZGVwCisgICAgICAgIGZpCisgICAgZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLzAwMDEtcHVyZ2F0b3J5LVBhc3Mtci1kaXJlY3RseS10by1saW5rZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMvMDAwMS1wdXJnYXRvcnktUGFzcy1yLWRpcmVjdGx5LXRvLWxpbmtlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmQwNzdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLzAwMDEtcHVyZ2F0b3J5LVBhc3Mtci1kaXJlY3RseS10by1saW5rZXIucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSBhMTEzNWIzMTcwOTYzYmE5NTZmMjM2NGMxMjgzODY0YzM1NTQxMjk1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNyBTZXAgMjAxNSAwNzo1OTo0NSArMDAwMAorU3ViamVjdDogW1BBVENIXSBwdXJnYXRvcnk6IFBhc3MgLXIgZGlyZWN0bHkgdG8gbGlua2VyCisKK1RoaXMgaGVscHMgY29tcGlsaW5nIHdpdGggY2xhbmcgc2luY2UgLXIgaXMgbm90IGEga25vd24gb3B0aW9uIGZvciBjbGFuZword2hlcmUgYXMgZ2NjIGtub3dzIGhvdyB0byBkZWFsIHdpdGggaXQgYW5kIHBhc3NlcyBpdCBkb3duIHRvIGxpbmtlcgordW5maWx0ZXJlZAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHB1cmdhdG9yeS9NYWtlZmlsZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3B1cmdhdG9yeS9NYWtlZmlsZSBiL3B1cmdhdG9yeS9NYWtlZmlsZQoraW5kZXggMmI1YzA2MS4uYjI1MTM1MyAxMDA2NDQKKy0tLSBhL3B1cmdhdG9yeS9NYWtlZmlsZQorKysrIGIvcHVyZ2F0b3J5L01ha2VmaWxlCitAQCAtNjEsNyArNjEsNyBAQCAkKFBVUkdBVE9SWSk6IENQUEZMQUdTPSQoJChBUkNIKV9QVVJHQVRPUllfRVhUUkFfQ0ZMQUdTKSBcCisgCQkJLUkkKHNoZWxsICQoQ0MpIC1wcmludC1maWxlLW5hbWU9aW5jbHVkZSkKKyAkKFBVUkdBVE9SWSk6IExERkxBR1M9JCgkKEFSQ0gpX1BVUkdBVE9SWV9FWFRSQV9DRkxBR1MpXAorIAkJCS1XbCwtLW5vLXVuZGVmaW5lZCAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiBcCistCQkJLW5vZGVmYXVsdGxpYnMgLWUgcHVyZ2F0b3J5X3N0YXJ0IC1yIFwKKysJCQktbm9kZWZhdWx0bGlicyAtZSBwdXJnYXRvcnlfc3RhcnQgLVdsLC1yIFwKKyAJCQktV2wsLU1hcD0kKFBVUkdBVE9SWV9NQVApCisgCisgJChQVVJHQVRPUlkpOiAkKFBVUkdBVE9SWV9PQkpTKQorLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMvMDAwMi1wb3dlcnBjLWNoYW5nZS10aGUtbWVtb3J5LXNpemUtbGltaXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMvMDAwMi1wb3dlcnBjLWNoYW5nZS10aGUtbWVtb3J5LXNpemUtbGltaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5N2Q5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy8wMDAyLXBvd2VycGMtY2hhbmdlLXRoZS1tZW1vcnktc2l6ZS1saW1pdC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIGIxOWI2OGVhYjU2N2FhNTM0Y2Y4ZGVjNzlmZTE4ZTNkYzBlMTQwNDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBRdWFueWFuZyBXYW5nIDxxdWFueWFuZy53YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE2IEp1biAyMDE1IDEyOjU5OjU3ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHBvd2VycGM6IGNoYW5nZSB0aGUgbWVtb3J5IHNpemUgbGltaXQKKworV2hlbiBydW4gImtleGVjIiBpbiBwb3dlcnBjIGJvYXJkLCB0aGUga2V4ZWMgaGFzIGEgbGltaXQgdGhhdAordGhlIGtlcm5lbCB0ZXh0IGFuZCBic3Mgc2l6ZSBtdXN0IGJlIGxlc3MgdGhhbiAyNE0uIEJ1dCBub3cKK3NvbWUga2VybmVsIHNpemUgZXhjZWVkIHRoZSBsaW1pdC4gU28gd2UgbmVlZCB0byBjaGFuZ2UgdGhlIGxpbWl0LAorZWxzZSB3aWxsIGdldCB0aGUgZXJyb3IgbG9nIGFzIGJlbG93OgorCitteV9sb2FkOjY2OTogZG8KK0NvdWxkIG5vdCBmaW5kIGEgZnJlZSBhcmVhIG9mIG1lbW9yeSBvZiAweDEyNDAwIGJ5dGVzLi4uCitDb3VsZCBub3QgZmluZCBhIGZyZWUgYXJlYSBvZiBtZW1vcnkgb2YgMHgxMzAwMCBieXRlcy4uLgorbG9jYXRlX2hvbGUgZmFpbGVkCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBRdWFueWFuZyBXYW5nIDxxdWFueWFuZy53YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBrZXhlYy9hcmNoL3BwYy9rZXhlYy1wcGMuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL3BwYy9rZXhlYy1wcGMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2tleGVjL2FyY2gvcHBjL2tleGVjLXBwYy5oCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvcHBjL2tleGVjLXBwYy5oCitAQCAtNDIsNyArNDIsNyBAQCB2b2lkIGRvbF9wcGNfdXNhZ2Uodm9pZCk7CisgICogRHVyaW5nIGluaXRhbCBzZXR1cCB0aGUga2VybmVsIGRvZXMgbm90IG1hcCB0aGUgd2hvbGUgbWVtb3J5IGJ1dCBhIHBhcnQgb2YKKyAgKiBpdC4gT24gQm9vay1FIHRoYXQgaXMgNjRNaUIsIDYwMSAyNE1pQiBvciAyNTZNaUIgKGlmIHBvc3NpYmxlKS4KKyAgKi8KKy0jZGVmaW5lIEtFUk5FTF9BQ0NFU1NfVE9QICgyNCAqIDEwMjQgKiAxMDI0KQorKyNkZWZpbmUgS0VSTkVMX0FDQ0VTU19UT1AgKDM2ICogMTAyNCAqIDEwMjQpCisgCisgLyogYm9vdCBibG9jayB2ZXJzaW9uIDE3IGFzIGRlZmluZWQgYnkgdGhlIGxpbnV4IGtlcm5lbCAqLworIHN0cnVjdCBib290YmxvY2sgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLWFhcmNoNjQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMtYWFyY2g2NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDNmNTgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLWFhcmNoNjQucGF0Y2gKQEAgLTAsMCArMSw4MDEgQEAKK0Zyb206IEdlb2ZmIExldmFuZCA8Z2VvZmZAaW5mcmFkZWFkLm9yZz4KK0RhdGU6IE1vbiwgMTUgSnVsIDIwMTMgMjM6MzI6MzYgKzAwMDAgKC0wNzAwKQorU3ViamVjdDogQWRkIGFybTY0IHN1cHBvcnQKK1gtR2l0LVVybDogaHR0cHM6Ly9naXQubGluYXJvLm9yZy9naXR3ZWI/cD1wZW9wbGUlMkZnZW9mZiUyRmtleGVjLXRvb2xzLmdpdDthPWNvbW1pdGRpZmZfcGxhaW47aD1mYmY1YWM2YzJjNzBlYzBmNmRhMmI5ZmY1NjNlNTczOTk5NzUyYzAxCisKK0FkZCBhcm02NCBzdXBwb3J0CisKK1NpZ25lZC1vZmYtYnk6IEdlb2ZmIExldmFuZCA8Z2VvZmZAaW5mcmFkZWFkLm9yZz4KKworR2V0IHBhdGNoIGZyb206CitodHRwczovL2ZlZG9yYXBlb3BsZS5vcmcvfmhydy9hYXJjaDY0L2Zvci1mZWRvcmEva2V4ZWMtYWFyY2g2NC5wYXRjaAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KKworLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyAKKyBrZXhlYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxIAorIGtleGVjL2FyY2gvYXJtNjQvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMTMgKworIGtleGVjL2FyY2gvYXJtNjQvY3Jhc2hkdW1wLWFybTY0LmMgICAgICB8ICAzMDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBrZXhlYy9hcmNoL2FybTY0L2luY2x1ZGUvYXJjaC9vcHRpb25zLmggfCAgIDI2ICsrCisga2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1hcm02NC5jICAgICAgICAgIHwgIDE3NyArKysrKysrKysrKysrKysrKysKKyBrZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmggICAgICAgICAgfCAgIDIwICsrCisga2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1lbGYtYXJtNjQuYyAgICAgIHwgIDExNCArKysrKysrKysrKworIGtleGVjL2tleGVjLXN5c2NhbGwuaCAgICAgICAgICAgICAgICAgICB8ICAgIDkgCisga2V4ZWMva2V4ZWMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiAKKyBwdXJnYXRvcnkvYXJjaC9hcm02NC9NYWtlZmlsZSAgICAgICAgICAgfCAgICA3IAorIDExIGZpbGVzIGNoYW5nZWQsIDY3NSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGtleGVjLXRvb2xzLTIuMC4xMC9jb25maWd1cmUuYWMKK0BAIC0zNiw2ICszNiw5IEBAIGNhc2UgJHRhcmdldF9jcHUgaW4KKyAJCUFSQ0g9InBwYzY0IgorIAkJU1VCQVJDSD0iTEUiCisgCQk7OworKwlhYXJjaDY0KiApCisrCQlBUkNIPSJhcm02NCIKKysJCTs7CisgCWFybSogKQorIAkJQVJDSD0iYXJtIgorIAkJOzsKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9rZXhlYy9NYWtlZmlsZQorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9NYWtlZmlsZQorQEAgLTcxLDYgKzcxLDcgQEAgS0VYRUNfU1JDUwkJCSs9ICQoJChBUkNIKV9GUzJEVCkKKyAKKyBpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9hcmNoL2FscGhhL01ha2VmaWxlCisgaW5jbHVkZSAkKHNyY2Rpcikva2V4ZWMvYXJjaC9hcm0vTWFrZWZpbGUKKytpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9hcmNoL2FybTY0L01ha2VmaWxlCisgaW5jbHVkZSAkKHNyY2Rpcikva2V4ZWMvYXJjaC9pMzg2L01ha2VmaWxlCisgaW5jbHVkZSAkKHNyY2Rpcikva2V4ZWMvYXJjaC9pYTY0L01ha2VmaWxlCisgaW5jbHVkZSAkKHNyY2Rpcikva2V4ZWMvYXJjaC9tNjhrL01ha2VmaWxlCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9NYWtlZmlsZQorQEAgLTAsMCArMSwxMyBAQAorKworK2FybTY0X0tFWEVDX1NSQ1MgKz0gXAorKwlrZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmMgXAorKwlrZXhlYy9hcmNoL2FybTY0L2tleGVjLWVsZi1hcm02NC5jIFwKKysJa2V4ZWMvYXJjaC9hcm02NC9jcmFzaGR1bXAtYXJtNjQuYworKworK2FybTY0X0FSQ0hfUkVVU0VfSU5JVFJEID0KKythcm02NF9BRERfU0VHTUVOVCA9CisrYXJtNjRfVklSVF9UT19QSFlTID0KKysKKytkaXN0ICs9ICQoYXJtNjRfS0VYRUNfU1JDUykgXAorKwlrZXhlYy9hcmNoL2FybTY0L01ha2VmaWxlIFwKKysJa2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1hcm02NC5oCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQvY3Jhc2hkdW1wLWFybTY0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9jcmFzaGR1bXAtYXJtNjQuYworQEAgLTAsMCArMSwzMDUgQEAKKysvKgorKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uICh2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UpLgorKyAqLworKworKyNpbmNsdWRlICIuLi8uLi9rZXhlYy5oIgorKyNpbmNsdWRlICIuLi8uLi9rZXhlYy1lbGYuaCIKKysjaW5jbHVkZSAiLi4vLi4vY3Jhc2hkdW1wLmgiCisrCisraW50IGlzX2NyYXNoa2VybmVsX21lbV9yZXNlcnZlZCh2b2lkKQorK3sKKysJcmV0dXJuIDA7CisrfQorKworKyNpZiAwCisrLyoKKysgKiBVc2VkIHRvIHNhdmUgdmFyaW91cyBtZW1vcnkgcmFuZ2VzL3JlZ2lvbnMgbmVlZGVkIGZvciB0aGUgY2FwdHVyZWQKKysgKiBrZXJuZWwgdG8gYm9vdC4gKGxpbWUgbWVtbWFwPSBvcHRpb24gaW4gb3RoZXIgYXJjaHMpCisrICovCisrc3RhdGljIHN0cnVjdCBtZW1vcnlfcmFuZ2UgY3Jhc2hfbWVtb3J5X3Jhbmdlc1tDUkFTSF9NQVhfTUVNT1JZX1JBTkdFU107Cisrc3RydWN0IG1lbW9yeV9yYW5nZXMgdXNhYmxlbWVtX3JnbnMgPSB7CisrICAgIC5zaXplID0gMCwKKysgICAgLnJhbmdlcyA9IGNyYXNoX21lbW9yeV9yYW5nZXMsCisrfTsKKysKKysvKiBtZW1vcnkgcmFuZ2UgcmVzZXJ2ZWQgZm9yIGNyYXNoa2VybmVsICovCisrc3RhdGljIHN0cnVjdCBtZW1vcnlfcmFuZ2UgY3Jhc2hfcmVzZXJ2ZWRfbWVtOworKworK3N0YXRpYyBzdHJ1Y3QgY3Jhc2hfZWxmX2luZm8gZWxmX2luZm8gPSB7CisrCS5jbGFzcwkJPSBFTEZDTEFTUzMyLAorKwkuZGF0YQkJPSBFTEZEQVRBMkxTQiwKKysJLm1hY2hpbmUJPSBFTV9BUk0sCisrCS5wYWdlX29mZnNldAk9IFBBR0VfT0ZGU0VULAorK307CisrCisrdW5zaWduZWQgbG9uZyBwaHlzX29mZnNldDsKKysKKysvKioKKysgKiBjcmFzaF9yYW5nZV9jYWxsYmFjaygpIC0gY2FsbGJhY2sgY2FsbGVkIGZvciBlYWNoIGlvbWVtIHJlZ2lvbgorKyAqIEBkYXRhOiBub3QgdXNlZAorKyAqIEBucjogbm90IHVzZWQKKysgKiBAc3RyOiBuYW1lIG9mIHRoZSBtZW1vcnkgcmVnaW9uCisrICogQGJhc2U6IHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24KKysgKiBAbGVuZ3RoOiBzaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uCisrICoKKysgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIG1lbW9yeSByZWdpb24gZm91bmQgaW4gL3Byb2MvaW9tZW0uIEl0CisrICogbG9jYXRlcyBzeXN0ZW0gUkFNIGFuZCBjcmFzaGtlcm5lbCByZXNlcnZlZCBtZW1vcnkgYW5kIHBsYWNlcyB0aGVzZSB0bworKyAqIHZhcmlhYmxlczogQGNyYXNoX21lbW9yeV9yYW5nZXMgYW5kIEBjcmFzaF9yZXNlcnZlZF9tZW0uIE51bWJlciBvZiBtZW1vcnkKKysgKiByZWdpb25zIGlzIHBsYWNlZCBpbiBAY3Jhc2hfbWVtb3J5X25yX3Jhbmdlcy4KKysgKi8KKytzdGF0aWMgaW50IGNyYXNoX3JhbmdlX2NhbGxiYWNrKHZvaWQgKlVOVVNFRChkYXRhKSwgaW50IFVOVVNFRChuciksCisrCQkJCWNoYXIgKnN0ciwgdW5zaWduZWQgbG9uZyBiYXNlLAorKwkJCQl1bnNpZ25lZCBsb25nIGxlbmd0aCkKKyt7CisrCXN0cnVjdCBtZW1vcnlfcmFuZ2UgKnJhbmdlOworKworKwlpZiAodXNhYmxlbWVtX3JnbnMuc2l6ZSA+PSBDUkFTSF9NQVhfTUVNT1JZX1JBTkdFUykKKysJCXJldHVybiAxOworKworKwlyYW5nZSA9IHVzYWJsZW1lbV9yZ25zLnJhbmdlcyArIHVzYWJsZW1lbV9yZ25zLnNpemU7CisrCisrCWlmIChzdHJuY21wKHN0ciwgIlN5c3RlbSBSQU1cbiIsIDExKSA9PSAwKSB7CisrCQlyYW5nZS0+c3RhcnQgPSBiYXNlOworKwkJcmFuZ2UtPmVuZCA9IGJhc2UgKyBsZW5ndGggLSAxOworKwkJcmFuZ2UtPnR5cGUgPSBSQU5HRV9SQU07CisrCQl1c2FibGVtZW1fcmducy5zaXplKys7CisrCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsICJDcmFzaCBrZXJuZWxcbiIsIDEzKSA9PSAwKSB7CisrCQljcmFzaF9yZXNlcnZlZF9tZW0uc3RhcnQgPSBiYXNlOworKwkJY3Jhc2hfcmVzZXJ2ZWRfbWVtLmVuZCA9IGJhc2UgKyBsZW5ndGggLSAxOworKwkJY3Jhc2hfcmVzZXJ2ZWRfbWVtLnR5cGUgPSBSQU5HRV9SQU07CisrCX0KKysKKysJcmV0dXJuIDA7CisrfQorKworKy8qKgorKyAqIGNyYXNoX2V4Y2x1ZGVfcmFuZ2UoKSAtIGV4Y2x1ZGVzIG1lbW9yeSByZWdpb24gcmVzZXJ2ZWQgZm9yIGNyYXNoa2VybmVsCisrICoKKysgKiBGdW5jdGlvbiBsb2NhdGVzIHdoZXJlIGNyYXNoa2VybmVsIHJlc2VydmVkIG1lbW9yeSBpcyBhbmQgcmVtb3ZlcyB0aGF0IHJlZ2lvbgorKyAqIGZyb20gdGhlIGF2YWlsYWJsZSBtZW1vcnkgcmVnaW9ucy4KKysgKi8KKytzdGF0aWMgdm9pZCBjcmFzaF9leGNsdWRlX3JhbmdlKHZvaWQpCisreworKwljb25zdCBzdHJ1Y3QgbWVtb3J5X3JhbmdlICpyYW5nZSA9ICZjcmFzaF9yZXNlcnZlZF9tZW07CisrCWludCBpOworKworKwlmb3IgKGkgPSAwOyBpIDwgdXNhYmxlbWVtX3JnbnMuc2l6ZTsgaSsrKSB7CisrCQlzdHJ1Y3QgbWVtb3J5X3JhbmdlICpyID0gdXNhYmxlbWVtX3JnbnMucmFuZ2VzICsgaTsKKysKKysJCS8qCisrCQkgKiBXZSBhc3N1bWUgdGhhdCBjcmFzaCBhcmVhIGlzIGZ1bGx5IGNvbnRhaW5lZCBpbgorKwkJICogc29tZSBsYXJnZXIgbWVtb3J5IGFyZWEuCisrCQkgKi8KKysJCWlmIChyLT5zdGFydCA8PSByYW5nZS0+c3RhcnQgJiYgci0+ZW5kID49IHJhbmdlLT5lbmQpIHsKKysJCQlzdHJ1Y3QgbWVtb3J5X3JhbmdlICpuZXc7CisrCQkJLyoKKysJCQkgKiBMZXQncyBzcGxpdCB0aGlzIGFyZWEgaW50byAyIHNtYWxsZXIgb25lcyBhbmQKKysJCQkgKiByZW1vdmUgZXhjbHVkZWQgcmFuZ2UgZnJvbSBiZXR3ZWVuLiBGaXJzdCBjcmVhdGUKKysJCQkgKiBuZXcgZW50cnkgZm9yIHRoZSByZW1haW5pbmcgYXJlYS4KKysJCQkgKi8KKysJCQluZXcgPSB1c2FibGVtZW1fcmducy5yYW5nZXMgKyB1c2FibGVtZW1fcmducy5zaXplOworKwkJCW5ldy0+c3RhcnQgPSByYW5nZS0+ZW5kICsgMTsKKysJCQluZXctPmVuZCA9IHItPmVuZDsKKysJCQl1c2FibGVtZW1fcmducy5zaXplKys7CisrCQkJLyoKKysJCQkgKiBOZXh0IHVwZGF0ZSB0aGlzIGFyZWEgdG8gZW5kIGJlZm9yZSBleGNsdWRlZCByYW5nZS4KKysJCQkgKi8KKysJCQlyLT5lbmQgPSByYW5nZS0+c3RhcnQgLSAxOworKwkJCWJyZWFrOworKwkJfQorKwl9CisrfQorKworK3N0YXRpYyBpbnQgcmFuZ2VfY21wKGNvbnN0IHZvaWQgKmExLCBjb25zdCB2b2lkICphMikKKyt7CisrCWNvbnN0IHN0cnVjdCBtZW1vcnlfcmFuZ2UgKnIxID0gYTE7CisrCWNvbnN0IHN0cnVjdCBtZW1vcnlfcmFuZ2UgKnIyID0gYTI7CisrCisrCWlmIChyMS0+c3RhcnQgPiByMi0+c3RhcnQpCisrCQlyZXR1cm4gMTsKKysJaWYgKHIxLT5zdGFydCA8IHIyLT5zdGFydCkKKysJCXJldHVybiAtMTsKKysKKysJcmV0dXJuIDA7CisrfQorKworKy8qKgorKyAqIGNyYXNoX2dldF9tZW1vcnlfcmFuZ2VzKCkgLSByZWFkIHN5c3RlbSBwaHlzaWNhbCBtZW1vcnkKKysgKgorKyAqIEZ1bmN0aW9uIHJlYWRzIHRocm91Z2ggc3lzdGVtIHBoeXNpY2FsIG1lbW9yeSBhbmQgc3RvcmVzIGZvdW5kIG1lbW9yeSByZWdpb25zCisrICogaW4gQGNyYXNoX21lbW9yeV9yYW5nZXMuIE51bWJlciBvZiBtZW1vcnkgcmVnaW9ucyBmb3VuZCBpcyBwbGFjZWQgaW4KKysgKiBAY3Jhc2hfbWVtb3J5X25yX3Jhbmdlcy4gUmVnaW9ucyBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci4KKysgKgorKyAqIFJldHVybnMgJTAgaW4gY2FzZSBvZiBzdWNjZXNzIGFuZCAlLTEgb3RoZXJ3aXNlIChlcnJubyBpcyBzZXQpLgorKyAqLworK3N0YXRpYyBpbnQgY3Jhc2hfZ2V0X21lbW9yeV9yYW5nZXModm9pZCkKKyt7CisrCS8qCisrCSAqIEZpcnN0IHJlYWQgYWxsIG1lbW9yeSByZWdpb25zIHRoYXQgY2FuIGJlIGNvbnNpZGVyZWQgYXMKKysJICogc3lzdGVtIG1lbW9yeSBpbmNsdWRpbmcgdGhlIGNyYXNoIGFyZWEuCisrCSAqLworKwlrZXhlY19pb21lbV9mb3JfZWFjaF9saW5lKE5VTEwsIGNyYXNoX3JhbmdlX2NhbGxiYWNrLCBOVUxMKTsKKysKKysJaWYgKHVzYWJsZW1lbV9yZ25zLnNpemUgPCAxKSB7CisrCQllcnJubyA9IEVJTlZBTDsKKysJCXJldHVybiAtMTsKKysJfQorKworKwkvKgorKwkgKiBFeGNsdWRlIG1lbW9yeSByZXNlcnZlZCBmb3IgY3Jhc2hrZXJuZWwgKHRoaXMgbWF5IHJlc3VsdCBhIHNwbGl0IG1lbW9yeQorKwkgKiByZWdpb24pLgorKwkgKi8KKysJY3Jhc2hfZXhjbHVkZV9yYW5nZSgpOworKworKwkvKgorKwkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgbWVtb3J5IHJlZ2lvbnMgYXJlIHNvcnRlZC4KKysJICovCisrCXFzb3J0KHVzYWJsZW1lbV9yZ25zLnJhbmdlcywgdXNhYmxlbWVtX3JnbnMuc2l6ZSwKKysJICAgICAgc2l6ZW9mKCp1c2FibGVtZW1fcmducy5yYW5nZXMpLCByYW5nZV9jbXApOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrLyoqCisrICogY21kbGluZV9hZGRfZWxmY29yZWhkcigpIC0gYWRkcyBlbGZjb3JlaGRyPSB0byBAY21kbGluZQorKyAqIEBjbWRsaW5lOiBidWZmZXIgd2hlcmUgcGFyYW1ldGVyIGlzIHBsYWNlZAorKyAqIEBlbGZjb3JlaGRyOiBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZmNvcmVoZHIKKysgKgorKyAqIEZ1bmN0aW9uIGFwcGVuZHMgJ2VsZmNvcmVoZHI9c3RhcnQnIGF0IHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQgbGluZSBnaXZlbiBpbgorKyAqIEBjbWRsaW5lLiBOb3RlIHRoYXQgQGNtZGxpbmUgbXVzdCBiZSBhdCBsZWFzdCAlQ09NTUFORF9MSU5FX1NJWkUgYnl0ZXMgbG9uZworKyAqIChpbmNsdW5kaW5nICVOVUwpLgorKyAqLworK3N0YXRpYyB2b2lkIGNtZGxpbmVfYWRkX2VsZmNvcmVoZHIoY2hhciAqY21kbGluZSwgdW5zaWduZWQgbG9uZyBlbGZjb3JlaGRyKQorK3sKKysJY2hhciBidWZbQ09NTUFORF9MSU5FX1NJWkVdOworKwlpbnQgYnVmbGVuOworKworKwlidWZsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMgZWxmY29yZWhkcj0lI2x4IiwKKysJCQkgIGNtZGxpbmUsIGVsZmNvcmVoZHIpOworKwlpZiAoYnVmbGVuIDwgMCkKKysJCWRpZSgiRmFpbGVkIHRvIGNvbnN0cnVjdCBlbGZjb3JlaGRyPSBjb21tYW5kIGxpbmUgcGFyYW1ldGVyXG4iKTsKKysJaWYgKGJ1ZmxlbiA+PSBzaXplb2YoYnVmKSkKKysJCWRpZSgiQ29tbWFuZCBsaW5lIG92ZXJmbG93XG4iKTsKKysKKysJKHZvaWQpIHN0cm5jcHkoY21kbGluZSwgYnVmLCBDT01NQU5EX0xJTkVfU0laRSk7CisrCWNtZGxpbmVbQ09NTUFORF9MSU5FX1NJWkUgLSAxXSA9ICdcMCc7CisrfQorKworKy8qKgorKyAqIGNtZGxpbmVfYWRkX21lbSgpIC0gYWRkcyBtZW09IHBhcmFtZXRlciB0byBrZXJuZWwgY29tbWFuZCBsaW5lCisrICogQGNtZGxpbmU6IGJ1ZmZlciB3aGVyZSBwYXJhbWV0ZXIgaXMgcGxhY2VkCisrICogQHNpemU6IHNpemUgb2YgdGhlIGtlcm5lbCByZXNlcnZlZCBtZW1vcnkgKGluIGJ5dGVzKQorKyAqCisrICogVGhpcyBmdW5jdGlvbiBhcHBlbmRzICdtZW09c2l6ZScgYXQgdGhlIGVuZCBvZiB0aGUgY29tbWFuZCBsaW5lIGdpdmVuIGluCisrICogQGNtZGxpbmUuIE5vdGUgdGhhdCBAY21kbGluZSBtdXN0IGJlIGF0IGxlYXN0ICVDT01NQU5EX0xJTkVfU0laRSBieXRlcyBsb25nCisrICogKGluY2x1ZGluZyAlTlVMKS4KKysgKi8KKytzdGF0aWMgdm9pZCBjbWRsaW5lX2FkZF9tZW0oY2hhciAqY21kbGluZSwgdW5zaWduZWQgbG9uZyBzaXplKQorK3sKKysJY2hhciBidWZbQ09NTUFORF9MSU5FX1NJWkVdOworKwlpbnQgYnVmbGVuOworKworKwlidWZsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMgbWVtPSVsZEsiLCBjbWRsaW5lLCBzaXplID4+IDEwKTsKKysJaWYgKGJ1ZmxlbiA8IDApCisrCQlkaWUoIkZhaWxlZCB0byBjb25zdHJ1Y3QgbWVtPSBjb21tYW5kIGxpbmUgcGFyYW1ldGVyXG4iKTsKKysJaWYgKGJ1ZmxlbiA+PSBzaXplb2YoYnVmKSkKKysJCWRpZSgiQ29tbWFuZCBsaW5lIG92ZXJmbG93XG4iKTsKKysKKysJKHZvaWQpIHN0cm5jcHkoY21kbGluZSwgYnVmLCBDT01NQU5EX0xJTkVfU0laRSk7CisrCWNtZGxpbmVbQ09NTUFORF9MSU5FX1NJWkUgLSAxXSA9ICdcMCc7CisrfQorKworK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcmFuZ2Vfc2l6ZShjb25zdCBzdHJ1Y3QgbWVtb3J5X3JhbmdlICpyKQorK3sKKysJcmV0dXJuIHItPmVuZCAtIHItPnN0YXJ0ICsgMTsKKyt9CisrCisrc3RhdGljIHZvaWQgZHVtcF9tZW1vcnlfcmFuZ2VzKHZvaWQpCisreworKwlpbnQgaTsKKysKKysJaWYgKCFrZXhlY19kZWJ1ZykKKysJCXJldHVybjsKKysKKysJZGJncHJpbnRmKCJjcmFzaGtlcm5lbDogWyUjbGx4IC0gJSNsbHhdICglbGRNKVxuIiwKKysJCSAgY3Jhc2hfcmVzZXJ2ZWRfbWVtLnN0YXJ0LCBjcmFzaF9yZXNlcnZlZF9tZW0uZW5kLAorKwkJICAodW5zaWduZWQgbG9uZylyYW5nZV9zaXplKCZjcmFzaF9yZXNlcnZlZF9tZW0pID4+IDIwKTsKKysKKysJZm9yIChpID0gMDsgaSA8IHVzYWJsZW1lbV9yZ25zLnNpemU7IGkrKykgeworKwkJc3RydWN0IG1lbW9yeV9yYW5nZSAqciA9IHVzYWJsZW1lbV9yZ25zLnJhbmdlcyArIGk7CisrCQlkYmdwcmludGYoIm1lbW9yeSByYW5nZTogWyUjbGx4IC0gJSNsbHhdICglbGRNKVxuIiwKKysJCQkgIHItPnN0YXJ0LCByLT5lbmQsICh1bnNpZ25lZCBsb25nKXJhbmdlX3NpemUocikgPj4gMjApOworKwl9CisrfQorKworKy8qKgorKyAqIGxvYWRfY3Jhc2hkdW1wX3NlZ21lbnRzKCkgLSBsb2FkcyBhZGRpdGlvbmFsIHNlZ21lbnRzIG5lZWRlZCBmb3Iga2R1bXAKKysgKiBAaW5mbzoga2V4ZWMgaW5mbyBzdHJ1Y3R1cmUKKysgKiBAbW9kX2NtZGxpbmU6IGtlcm5lbCBjb21tYW5kIGxpbmUKKysgKgorKyAqIFRoaXMgZnVuY3Rpb24gbG9hZHMgYWRkaXRpb25hbCBzZWdtZW50cyB3aGljaCBhcmUgbmVlZGVkIGZvciB0aGUgZHVtcCBjYXB0dXJlCisrICoga2VybmVsLiBJdCBhbHNvIHVwZGF0ZXMga2VybmVsIGNvbW1hbmQgbGluZSBwYXNzZWQgaW4gQG1vZF9jbWRsaW5lIHRvIGhhdmUKKysgKiByaWdodCBwYXJhbWV0ZXJzIGZvciB0aGUgZHVtcCBjYXB0dXJlIGtlcm5lbC4KKysgKgorKyAqIFJldHVybiAlMCBpbiBjYXNlIG9mIHN1Y2Nlc3MgYW5kICUtMSBpbiBjYXNlIG9mIGVycm9yLgorKyAqLworK2ludCBsb2FkX2NyYXNoZHVtcF9zZWdtZW50cyhzdHJ1Y3Qga2V4ZWNfaW5mbyAqaW5mbywgY2hhciAqbW9kX2NtZGxpbmUpCisreworKwl1bnNpZ25lZCBsb25nIGVsZmNvcmVoZHI7CisrCXVuc2lnbmVkIGxvbmcgYnVmc3o7CisrCXZvaWQgKmJ1ZjsKKysJaW50IGVycjsKKysKKysJLyoKKysJICogRmlyc3QgZmV0Y2ggYWxsIHRoZSBtZW1vcnkgKFJBTSkgcmFuZ2VzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIHBhc3MgdG8KKysJICogdGhlIGNyYXNoZHVtcCBrZXJuZWwgZHVyaW5nIHBhbmljLgorKwkgKi8KKysJZXJyID0gY3Jhc2hfZ2V0X21lbW9yeV9yYW5nZXMoKTsKKysJaWYgKGVycikKKysJCXJldHVybiBlcnI7CisrCisrCS8qCisrCSAqIE5vdyB0aGF0IHdlIGhhdmUgbWVtb3J5IHJlZ2lvbnMgc29ydGVkLCB3ZSBjYW4gdXNlIGZpcnN0IG1lbW9yeQorKwkgKiByZWdpb24gYXMgUEhZU19PRkZTRVQuCisrCSAqLworKwlwaHlzX29mZnNldCA9IHVzYWJsZW1lbV9yZ25zLnJhbmdlcy0+c3RhcnQ7CisrCWRiZ3ByaW50ZigicGh5c19vZmZzZXQ6ICUjbHhcbiIsIHBoeXNfb2Zmc2V0KTsKKysKKysJZXJyID0gY3Jhc2hfY3JlYXRlX2VsZjMyX2hlYWRlcnMoaW5mbywgJmVsZl9pbmZvLAorKwkJCQkJIHVzYWJsZW1lbV9yZ25zLnJhbmdlcywKKysJCQkJCSB1c2FibGVtZW1fcmducy5zaXplLCAmYnVmLCAmYnVmc3osCisrCQkJCQkgRUxGX0NPUkVfSEVBREVSX0FMSUdOKTsKKysJaWYgKGVycikKKysJCXJldHVybiBlcnI7CisrCisrCS8qCisrCSAqIFdlIGFsbG9jYXRlIEVMRiBjb3JlIGhlYWRlciBmcm9tIHRoZSBlbmQgb2YgdGhlIG1lbW9yeSBhcmVhIHJlc2VydmVkCisrCSAqIGZvciB0aGUgY3Jhc2hrZXJuZWwuIFdlIGFsaWduIHRoZSBoZWFkZXIgdG8gU0VDVElPTl9TSVpFICh3aGljaCBpcworKwkgKiAxTUIpIHNvIHRoYXQgYXZhaWxhYmxlIG1lbW9yeSBwYXNzZWQgaW4ga2VybmVsIGNvbW1hbmQgbGluZSB3aWxsIGJlCisrCSAqIGFsaWduZWQgdG8gMU1CLiBUaGlzIGlzIGJlY2F1c2Uga2VybmVsIGNyZWF0ZV9tYXBwaW5nKCkgd2FudHMgbWVtb3J5CisrCSAqIHJlZ2lvbnMgdG8gYmUgYWxpZ25lZCB0byBTRUNUSU9OX1NJWkUuCisrCSAqLworKwllbGZjb3JlaGRyID0gYWRkX2J1ZmZlcl9waHlzX3ZpcnQoaW5mbywgYnVmLCBidWZzeiwgYnVmc3osIDEgPDwgMjAsCisrCQkJCQkgIGNyYXNoX3Jlc2VydmVkX21lbS5zdGFydCwKKysJCQkJCSAgY3Jhc2hfcmVzZXJ2ZWRfbWVtLmVuZCwgLTEsIDApOworKworKwlkYmdwcmludGYoImVsZmNvcmVoZHI6ICUjbHhcbiIsIGVsZmNvcmVoZHIpOworKwljbWRsaW5lX2FkZF9lbGZjb3JlaGRyKG1vZF9jbWRsaW5lLCBlbGZjb3JlaGRyKTsKKysKKysJLyoKKysJICogQWRkICdtZW09c2l6ZScgcGFyYW1ldGVyIHRvIGR1bXAgY2FwdHVyZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBUaGlzCisrCSAqIHByZXZlbnRzIHRoZSBkdW1wIGNhcHR1cmUga2VybmVsIGZyb20gdXNpbmcgYW55IG90aGVyIG1lbW9yeSByZWdpb25zCisrCSAqIHdoaWNoIGJlbG9uZyB0byB0aGUgcHJpbWFyeSBrZXJuZWwuCisrCSAqLworKwljbWRsaW5lX2FkZF9tZW0obW9kX2NtZGxpbmUsIGVsZmNvcmVoZHIgLSBjcmFzaF9yZXNlcnZlZF9tZW0uc3RhcnQpOworKworKwlkdW1wX21lbW9yeV9yYW5nZXMoKTsKKysJZGJncHJpbnRmKCJrZXJuZWwgY29tbWFuZCBsaW5lOiBcIiVzXCJcbiIsIG1vZF9jbWRsaW5lKTsKKysKKysJcmV0dXJuIDA7CisrfQorKworKyNlbmRpZgorKworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2luY2x1ZGUvYXJjaC9vcHRpb25zLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9pbmNsdWRlL2FyY2gvb3B0aW9ucy5oCitAQCAtMCwwICsxLDI2IEBACisrI2lmbmRlZiBLRVhFQ19BUkNIX0FSTTY0X09QVElPTlNfSAorKyNkZWZpbmUgS0VYRUNfQVJDSF9BUk02NF9PUFRJT05TX0gKKysKKysvLyNkZWZpbmUgT1BUX0FSQ0hfTUFYCSgoT1BUX01BWCkrMCkKKysKKysjZGVmaW5lIE9QVF9BUFBFTkQJKChPUFRfTUFYKSswKQorKyNkZWZpbmUgT1BUX1JBTURJU0sJKChPUFRfTUFYKSsxKQorKyNkZWZpbmUgT1BUX0RUQgkJKChPUFRfTUFYKSsyKQorKworKyNkZWZpbmUgT1BUX0FSQ0hfTUFYCSgoT1BUX01BWCkrMykKKysKKysKKysjZGVmaW5lIEtFWEVDX0FSQ0hfT1BUSU9OUyBcCisrCUtFWEVDX09QVElPTlMgXAorKwl7ICJhcHBlbmQiLCAgICAgICAxLCBOVUxMLCBPUFRfQVBQRU5EIH0sIFwKKysJeyAiY29tbWFuZC1saW5lIiwgMSwgTlVMTCwgT1BUX0FQUEVORCB9LCBcCisrCXsgImR0YiIsICAgICAgICAgIDEsIE5VTEwsIE9QVF9EVEIgfSwgXAorKwl7ICJpbml0cmQiLCAgICAgICAxLCBOVUxMLCBPUFRfUkFNRElTSyB9LCBcCisrCXsgInJhbWRpc2siLCAgICAgIDEsIE5VTEwsIE9QVF9SQU1ESVNLIH0sIFwKKysKKysjZGVmaW5lIEtFWEVDX0FSQ0hfT1BUX1NUUiBLRVhFQ19PUFRfU1RSIC8qIE9ubHkgYWNjZXB0IGxvbmcgYXJjaCBvcHRpb25zLiAqLworKworKyNkZWZpbmUgS0VYRUNfQUxMX09QVElPTlMgS0VYRUNfQVJDSF9PUFRJT05TCisrI2RlZmluZSBLRVhFQ19BTExfT1BUX1NUUiBLRVhFQ19BUkNIX09QVF9TVFIKKysKKysjZW5kaWYgLyogS0VYRUNfQVJDSF9BUk02NF9PUFRJT05TX0ggKi8KK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1hcm02NC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQva2V4ZWMtYXJtNjQuYworQEAgLTAsMCArMSwxNzcgQEAKKysvKgorKyAqIEFSTTY0IGtleGVjIHN1cHBvcnQuCisrICovCisrCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysvLyNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgorKworKyNpbmNsdWRlICIuLi8uLi9rZXhlYy5oIgorKyNpbmNsdWRlICIuLi8uLi9rZXhlYy1zeXNjYWxsLmgiCisrI2luY2x1ZGUgImtleGVjLWFybTY0LmgiCisrCisrCisrdm9pZCBhcmNoX3VzYWdlKHZvaWQpCisreworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAtPlxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysKKysJcHJpbnRmKAorKyIgICAgIC0tYXBwZW5kPVNUUklORyAgICAgICBTZXQgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgdG8gU1RSSU5HLlxuIgorKyIgICAgIC0tY29tbWFuZC1saW5lPVNUUklORyBTZXQgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgdG8gU1RSSU5HLlxuIgorKyIgICAgIC0tZHRiPUZJTEUgICAgICAgICAgICBVc2UgRklMRSBhcyB0aGUgZGV2aWNlIHRyZWUgYmxvYi5cbiIKKysiICAgICAtLWluaXRyZD1GSUxFICAgICAgICAgVXNlIEZJTEUgYXMgdGhlIGtlcm5lbCBpbml0aWFsIHJhbWRpc2suXG4iCisrIiAgICAgLS1yYW1kaXNrPUZJTEUgICAgICAgIFVzZSBGSUxFIGFzIHRoZSBrZXJuZWwgaW5pdGlhbCByYW1kaXNrLlxuIik7CisrCisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IDwtXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworK30KKysKKytpbnQgYXJjaF9wcm9jZXNzX29wdGlvbnMoaW50IFVOVVNFRChhcmdjKSwgY2hhciAqKlVOVVNFRChhcmd2KSkKKyt7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGRvXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKwlyZXR1cm4gMDsKKyt9CisrCisrY29uc3Qgc3RydWN0IGFyY2hfbWFwX2VudHJ5IGFyY2hlc1tdID0geworKwl7ICJhYXJjaDY0IiwgS0VYRUNfQVJDSF9BUk02NCB9LAorKwl7IE5VTEwsIDAgfSwKKyt9OworKworK3ZvaWQgYXJjaF91cGRhdGVfcHVyZ2F0b3J5KHN0cnVjdCBrZXhlY19pbmZvICpVTlVTRUQoaW5mbykpCisreworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBkb1xuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKyt9CisrCisrdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModW5zaWduZWQgbG9uZyBhZGRyKQorK3sKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogJTAxNmx4IC0+ICUwMTZseFxuIiwgX19mdW5jX18sIF9fTElORV9fLCBhZGRyLAorKwkJYWRkciArIDB4MDgwMDAwMDAwVUwpOworKwlyZXR1cm4gYWRkciArIDB4MDgwMDAwMDAwVUw7CisrfQorKworK3ZvaWQgYWRkX3NlZ21lbnQoc3RydWN0IGtleGVjX2luZm8gKmluZm8sIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZnN6LAorKwl1bnNpZ25lZCBsb25nIGJhc2UsIHNpemVfdCBtZW1zeikKKyt7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IC0+XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKwlhZGRfc2VnbWVudF9waHlzX3ZpcnQoaW5mbywgYnVmLCBidWZzeiwgYmFzZSwgbWVtc3osIDEpOworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiA8LVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKyt9CisrCisrc3RhdGljIGludCBnZXRfbWVtb3J5X3Jhbmdlc18xKHN0cnVjdCBtZW1vcnlfcmFuZ2UgKipyYW5nZSwgaW50ICpyYW5nZXMsCisrCQkJdW5zaWduZWQgbG9uZyBrZXhlY19mbGFncykKKyt7CisrCXN0YXRpYyBzdHJ1Y3QgbWVtb3J5X3JhbmdlIG1lbW9yeV9yYW5nZVtLRVhFQ19TRUdNRU5UX01BWF07CisrCWNvbnN0IGNoYXIgKmlvbWVtOworKwlpbnQgcmFuZ2VfY291bnQgPSAwOworKwljaGFyIGxpbmVbTUFYX0xJTkVdOworKwlGSUxFICpmcDsKKysKKysJaW9tZW0gPSBwcm9jX2lvbWVtKCk7CisrCWZwID0gZm9wZW4oaW9tZW0sICJyIik7CisrCisrCWlmICghZnApIHsKKysJCWZwcmludGYoc3RkZXJyLCAiQ2Fubm90IG9wZW4gJXM6ICVzXG4iLAorKwkJCWlvbWVtLCBzdHJlcnJvcihlcnJubykpOworKwkJcmV0dXJuIC0xOworKwl9CisrCisrCWRiZ3ByaW50ZigibWVtb3J5IHJhbmdlczpcbiIpOworKworKwl3aGlsZShmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSAhPSAwKSB7CisrCQlzdHJ1Y3QgbWVtb3J5X3JhbmdlIHI7CisrCQljaGFyICpzdHI7CisrCQlpbnQgY29uc3VtZWQ7CisrCisrCQlpZiAocmFuZ2VfY291bnQgPj0gS0VYRUNfU0VHTUVOVF9NQVgpCisrCQkJYnJlYWs7CisrCisrCQlpZiAoc3NjYW5mKGxpbmUsICIlTHgtJUx4IDogJW4iLCAmci5zdGFydCwgJnIuZW5kLCAmY29uc3VtZWQpCisrCQkJIT0gMikKKysJCQljb250aW51ZTsKKysKKysJCXN0ciA9IGxpbmUgKyBjb25zdW1lZDsKKysJCXIuZW5kKys7CisrCisrCQlpZiAobWVtY21wKHN0ciwgIlN5c3RlbSBSQU1cbiIsIDExKSkgeworKwkJCWRiZ3ByaW50ZigiIFNraXA6ICUwMTZMeCAtICUwMTZMeCA6ICVzIiwgci5zdGFydCwgci5lbmQsCisrCQkJCXN0cik7CisrCQkJY29udGludWU7CisrCQl9CisrCisrCQlyLnR5cGUgPSBSQU5HRV9SQU07CisrCQltZW1vcnlfcmFuZ2VbcmFuZ2VfY291bnRdID0gcjsKKysJCXJhbmdlX2NvdW50Kys7CisrCisrCQlkYmdwcmludGYoIiBBZGQ6ICAlMDE2THggLSAlMDE2THggOiAlcyIsIHIuc3RhcnQsIHIuZW5kLCBzdHIpOworKwl9CisrCisrCWZjbG9zZShmcCk7CisrCSpyYW5nZSA9IG1lbW9yeV9yYW5nZTsKKysJKnJhbmdlcyA9IHJhbmdlX2NvdW50OworKworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBnZXRfbWVtb3J5X3Jhbmdlc18yKHN0cnVjdCBtZW1vcnlfcmFuZ2UgKipyYW5nZSwgaW50ICpyYW5nZXMsCisrCQkgICAgICB1bnNpZ25lZCBsb25nIFVOVVNFRChrZXhlY19mbGFncykpCisreworKwlzdGF0aWMgc3RydWN0IG1lbW9yeV9yYW5nZSBtZW1vcnlfcmFuZ2VbMl07CisrCisrCW1lbW9yeV9yYW5nZVswXS5zdGFydCA9IDB4MDgwMDAwMDAwOworKwltZW1vcnlfcmFuZ2VbMF0uZW5kICAgPSAweDEwMDAwMDAwMDsKKysJbWVtb3J5X3JhbmdlWzBdLnR5cGUgPSBSQU5HRV9SQU07CisrCisrCW1lbW9yeV9yYW5nZVsxXS5zdGFydCA9IDB4OTAwMDAwMDAwOworKwltZW1vcnlfcmFuZ2VbMV0uZW5kICAgPSAweDg4MDAwMDAwMDsKKysJbWVtb3J5X3JhbmdlWzFdLnR5cGUgPSBSQU5HRV9SQU07CisrCisrCSpyYW5nZSA9IG1lbW9yeV9yYW5nZTsKKysJKnJhbmdlcyA9IHNpemVvZihtZW1vcnlfcmFuZ2UpIC8gc2l6ZW9mKG1lbW9yeV9yYW5nZVswXSk7CisrCisrCXJldHVybiAwOworK30KKysKKytpbnQgZ2V0X21lbW9yeV9yYW5nZXMoc3RydWN0IG1lbW9yeV9yYW5nZSAqKnJhbmdlLCBpbnQgKnJhbmdlcywKKysJCQl1bnNpZ25lZCBsb25nIGtleGVjX2ZsYWdzKQorK3sKKysJLyogRklYTUU6IFNob3VsZCBnZXQgdGhpcyBpbmZvIGZyb20gZGV2aWNlIHRyZWUuICovCisrCQorKwlyZXR1cm4gZ2V0X21lbW9yeV9yYW5nZXNfMShyYW5nZSwgcmFuZ2VzLCBrZXhlY19mbGFncyk7CisrfQorKworK3N0cnVjdCBmaWxlX3R5cGUgZmlsZV90eXBlW10gPSB7CisrCXsgImVsZi1hcm02NCIsIGVsZl9hcm02NF9wcm9iZSwgZWxmX2FybTY0X2xvYWQsIGVsZl9hcm02NF91c2FnZSB9LAorK307CisrCisraW50IGZpbGVfdHlwZXMgPSBzaXplb2YoZmlsZV90eXBlKSAvIHNpemVvZihmaWxlX3R5cGVbMF0pOworKworK2ludCBhcmNoX2NvbXBhdF90cmFtcG9saW5lKHN0cnVjdCBrZXhlY19pbmZvICppbmZvKQorK3sKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogZG9cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrCXJldHVybiAwOworK30KKysKKyt2b2lkIGFyY2hfcmV1c2VfaW5pdHJkKHZvaWQpCisreworK30KKysKKytpbnQgbWFjaGluZV92ZXJpZnlfZWxmX3JlbChzdHJ1Y3QgbWVtX2VoZHIgKmVoZHIpCisreworKwkodm9pZCllaGRyOworKworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBkb1xuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysJcmV0dXJuIDA7CisrfQorKworK3ZvaWQgbWFjaGluZV9hcHBseV9lbGZfcmVsKHN0cnVjdCBtZW1fZWhkciAqZWhkciwgdW5zaWduZWQgbG9uZyByX3R5cGUsCisrCXZvaWQgKmxvY2F0aW9uLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCisreworKwkodm9pZCllaGRyOworKwkodm9pZClyX3R5cGU7CisrCSh2b2lkKWxvY2F0aW9uOworKwkodm9pZClhZGRyZXNzOworKwkodm9pZCl2YWx1ZTsKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogZG9cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrfQorSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1hcm02NC5oCitAQCAtMCwwICsxLDIwIEBACisrLyoKKysgKiBBUk02NCBrZXhlYyBzdXBwb3J0LgorKyAqLworKworKyNpZiAhZGVmaW5lZChLRVhFQ19BUk02NF9IKQorKyNkZWZpbmUgS0VYRUNfQVJNNjRfSAorKworKy8qICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPiBGSVhNRTogdGhpcyBpcyBicm9rZW4gKi8KKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisrI2luY2x1ZGUgIi4uLy4uL2tleGVjLmgiCisrCisrI2RlZmluZSBLRVhFQ19TRUdNRU5UX01BWCAxNiAvKiBGSVhNRTogdGhpcyBzaG91bGQgY29tZSBmcm9tIDxsaW51eC9rZXhlYy5oPiAqLworKworK2ludCBlbGZfYXJtNjRfcHJvYmUoY29uc3QgY2hhciAqYnVmLCBvZmZfdCBsZW4pOworK2ludCBlbGZfYXJtNjRfbG9hZChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKmJ1Ziwgb2ZmX3QgbGVuLAorKwlzdHJ1Y3Qga2V4ZWNfaW5mbyAqaW5mbyk7Cisrdm9pZCBlbGZfYXJtNjRfdXNhZ2Uodm9pZCk7CisrCisrI2VuZGlmCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1lbGYtYXJtNjQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2tleGVjLWVsZi1hcm02NC5jCitAQCAtMCwwICsxLDExNCBAQAorKy8qCisrICogQVJNNjQga2V4ZWMgc3VwcG9ydC4KKysgKi8KKysKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisrI2luY2x1ZGUgPGVsZi5oPgorKyNpbmNsdWRlIDxnZXRvcHQuaD4KKysKKysjaW5jbHVkZSAiLi4vLi4va2V4ZWMtc3lzY2FsbC5oIgorKworKyNpbmNsdWRlICJrZXhlYy1hcm02NC5oIgorKyNpbmNsdWRlICJhcmNoL29wdGlvbnMuaCIKKysKKysjaWYgIWRlZmluZWQoRU1fQUFSQ0g2NCkKKysjIGRlZmluZSBFTV9BQVJDSDY0IDE4MworKyNlbmRpZgorKworK2ludCBlbGZfYXJtNjRfcHJvYmUoY29uc3QgY2hhciAqYnVmLCBvZmZfdCBsZW4pCisreworKwlpbnQgcmVzdWx0OworKwlzdHJ1Y3QgbWVtX2VoZHIgZWhkcjsKKysKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogLT5cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrCQorKwlyZXN1bHQgPSBidWlsZF9lbGZfZXhlY19pbmZvKGJ1ZiwgbGVuLCAmZWhkciwgMCk7CisrCisrCWlmIChyZXN1bHQgPCAwKSB7CisrCQlkYmdwcmludGYoIk5vdCBhbiBFTEYgZXhlY3V0YWJsZVxuIik7CisrCQlnb3RvIG91dDsKKysJfQorKworKwlpZiAoZWhkci5lX21hY2hpbmUgIT0gRU1fQUFSQ0g2NCkgeworKwkJZGJncHJpbnRmKCJOb3QgYW4gQUFSQ0g2NCBleGVjdXRhYmxlXG4iKTsKKysJCXJlc3VsdCA9IC0xOworKwkJZ290byBvdXQ7CisrCX0KKysKKysJcmVzdWx0ID0gMDsKKysKKytvdXQ6CisrCWZyZWVfZWxmX2luZm8oJmVoZHIpOworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiA8LVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysJcmV0dXJuIHJlc3VsdDsKKyt9CisrCisraW50IGVsZl9hcm02NF9sb2FkKGludCBhcmdjLCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqYnVmLCBvZmZfdCBsZW4sCisrCQkJc3RydWN0IGtleGVjX2luZm8gKmluZm8pCisreworKwlzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisrCQlLRVhFQ19BUkNIX09QVElPTlMKKysJCXsgMCB9CisrCX07CisrCXN0YXRpYyBjb25zdCBjaGFyIHNob3J0X29wdGlvbnNbXSA9IEtFWEVDX09QVF9TVFIgIiI7CisrCWNvbnN0IGNoYXIgKmNvbW1hbmRfbGluZSA9IE5VTEw7CisrCXVuc2lnbmVkIGludCBjb21tYW5kX2xpbmVfbGVuID0gMDsKKysJY29uc3QgY2hhciAqcmFtZGlzayA9IE5VTEw7CisrCWNvbnN0IGNoYXIgKmR0YiA9IE5VTEw7CisrCWludCBvcHQ7CisrCXN0cnVjdCBtZW1fZWhkciBlaGRyOworKwlpbnQgcmVzdWx0OworKworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAtPlxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysKKysJd2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBzaG9ydF9vcHRpb25zLCBvcHRpb25zLCAwKSkKKysJCSE9IC0xKSB7CisrCQlzd2l0Y2ggKG9wdCkgeworKwkJZGVmYXVsdDoKKysJCQlpZiAob3B0IDwgT1BUX01BWCkgLyogSWdub3JlIGNvcmUgb3B0aW9ucyAqLworKwkJCQlicmVhazsKKysJCWNhc2UgT1BUX0FQUEVORDoKKysJCQljb21tYW5kX2xpbmUgPSBvcHRhcmc7CisrCQkJY29tbWFuZF9saW5lX2xlbiA9IHN0cmxlbihjb21tYW5kX2xpbmUpICsgMTsKKysJCQlicmVhazsKKysJCWNhc2UgT1BUX1JBTURJU0s6CisrCQkJcmFtZGlzayA9IG9wdGFyZzsKKysJCQlicmVhazsKKysJCWNhc2UgT1BUX0RUQjoKKysJCQlkdGIgPSBvcHRhcmc7CisrCQkJYnJlYWs7CisrCQl9CisrCX0KKysKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogY29tbWFuZF9saW5lOiAlc1xuIiwgX19mdW5jX18sIF9fTElORV9fLCBjb21tYW5kX2xpbmUpOworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiByYW1kaXNrOiAlc1xuIiwgX19mdW5jX18sIF9fTElORV9fLCByYW1kaXNrKTsKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogZHRiOiAlc1xuIiwgX19mdW5jX18sIF9fTElORV9fLCBkdGIpOworKworKwlpZiAoaW5mby0+a2V4ZWNfZmxhZ3MgJiBLRVhFQ19PTl9DUkFTSCkgeworKwkJZnByaW50ZihzdGRlcnIsICJrZXhlYzoga2R1bXAgbm90IHlldCBzdXBwb3J0ZWQgb24gYXJtNjRcbiIpOworKwkJcmV0dXJuIC0xOworKwl9CisrCisrCXJlc3VsdCA9IGJ1aWxkX2VsZl9leGVjX2luZm8oYnVmLCBsZW4sICZlaGRyLCAwKTsKKysKKysJaWYgKHJlc3VsdCA8IDApIHsKKysJCWZyZWVfZWxmX2luZm8oJmVoZHIpOworKwkJZnByaW50ZihzdGRlcnIsICIlczolZDogZnJlZV9lbGZfaW5mbyBmYWlsZWRcbiIsIF9fZnVuY19fLAorKwkJCV9fTElORV9fKTsKKysJCXJldHVybiByZXN1bHQ7CisrCX0KKysKKysJZWxmX2V4ZWNfYnVpbGRfbG9hZChpbmZvLCAmZWhkciwgYnVmLCBsZW4sIDApOworKworKwlpbmZvLT5lbnRyeSA9ICh2b2lkKikweDgwMDgwMDAwVUw7ICAvLyBGSVhNRQorKworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiA8LVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysJcmV0dXJuIDA7CisrfQorKworK3ZvaWQgZWxmX2FybTY0X3VzYWdlKHZvaWQpCisreworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAtPlxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogPC1cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrfQorSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9rZXhlYy1zeXNjYWxsLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9rZXhlYy9rZXhlYy1zeXNjYWxsLmgKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMva2V4ZWMtc3lzY2FsbC5oCitAQCAtMzksOCArMzksOCBAQAorICNpZmRlZiBfX3MzOTBfXworICNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkyNzcKKyAjZW5kaWYKKy0jaWZkZWYgX19hcm1fXworLSNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQlfX05SX1NZU0NBTExfQkFTRSArIDM0NyAgCisrI2lmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FybTY0X18pCisrI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCV9fTlJfU1lTQ0FMTF9CQVNFICsgMzQ3CisgI2VuZGlmCisgI2lmIGRlZmluZWQoX19taXBzX18pCisgI2RlZmluZSBfX05SX2tleGVjX2xvYWQgICAgICAgICAgICAgICAgNDMxMQorQEAgLTEwOCw2ICsxMDgsOCBAQCBzdGF0aWMgaW5saW5lIGxvbmcga2V4ZWNfZmlsZV9sb2FkKGludCBrCisgI2RlZmluZSBLRVhFQ19BUkNIX1BQQzY0ICAgKDIxIDw8IDE2KQorICNkZWZpbmUgS0VYRUNfQVJDSF9JQV82NCAgICg1MCA8PCAxNikKKyAjZGVmaW5lIEtFWEVDX0FSQ0hfQVJNICAgICAoNDAgPDwgMTYpCisrI2RlZmluZSBLRVhFQ19BUkNIX0FSTTY0ICAgKDE4MyA8PCAxNikKKysvKiAjZGVmaW5lIEtFWEVDX0FSQ0hfQUFSQ0g2NCAoMTgzIDw8IDE2KSAqLworICNkZWZpbmUgS0VYRUNfQVJDSF9TMzkwICAgICgyMiA8PCAxNikKKyAjZGVmaW5lIEtFWEVDX0FSQ0hfU0ggICAgICAoNDIgPDwgMTYpCisgI2RlZmluZSBLRVhFQ19BUkNIX01JUFNfTEUgKDEwIDw8IDE2KQorQEAgLTE1Myw1ICsxNTUsOCBAQCBzdGF0aWMgaW5saW5lIGxvbmcga2V4ZWNfZmlsZV9sb2FkKGludCBrCisgI2lmZGVmIF9fbTY4a19fCisgI2RlZmluZSBLRVhFQ19BUkNIX05BVElWRQlLRVhFQ19BUkNIXzY4SworICNlbmRpZgorKyNpZiBkZWZpbmVkKF9fYXJtNjRfXykKKysjZGVmaW5lIEtFWEVDX0FSQ0hfTkFUSVZFCUtFWEVDX0FSQ0hfQVJNNjQKKysjZW5kaWYKKyAKKyAjZW5kaWYgLyogS0VYRUNfU1lTQ0FMTF9IICovCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2tleGVjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9rZXhlYy9rZXhlYy5jCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2tleGVjLmMKK0BAIC02NjQsNiArNjY0LDggQEAgc3RhdGljIGludCBteV9sb2FkKGNvbnN0IGNoYXIgKnR5cGUsIGludAorIAltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisgCWluZm8ua2V4ZWNfZmxhZ3MgPSBrZXhlY19mbGFnczsKKyAKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogZG9cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrCisgCXJlc3VsdCA9IDA7CisgCWlmIChhcmdjIC0gZmlsZWluZCA8PSAwKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwgIk5vIGtlcm5lbCBzcGVjaWZpZWRcbiIpOworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9wdXJnYXRvcnkvYXJjaC9hcm02NC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9wdXJnYXRvcnkvYXJjaC9hcm02NC9NYWtlZmlsZQorQEAgLTAsMCArMSw3IEBACisrIworKyMgUHVyZ2F0b3J5IGFybTY0CisrIworKworK2FybTY0X1BVUkdBVE9SWV9TUkNTID0KKysKKytkaXN0ICs9IHB1cmdhdG9yeS9hcmNoL2FybTY0L01ha2VmaWxlICQoYXJtNjRfUFVSR0FUT1JZX1NSQ1MpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMtdG9vbHMtUmVmaW5lLWtkdW1wLWRldmljZV90cmVlLXNvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMtdG9vbHMtUmVmaW5lLWtkdW1wLWRldmljZV90cmVlLXNvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5OGViNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy10b29scy1SZWZpbmUta2R1bXAtZGV2aWNlX3RyZWUtc29ydC5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitrZXhlYy10b29sczogUmVmaW5lIGtkdW1wIGRldmljZV90cmVlIHNvcnQKKworVGhlIGNvbW1pdCBiMDJkNzM1YmYgd2FzIHRvIHJlYXJyYW5nZSB0aGUgZGV2aWNlLXRyZWUgZW50cmllcywgYW5kCithc3N1bWVkIHRoYXQgdGhlc2UgZW50cmllcyBhcmUgc29ydGVkIGluIHRoZSBhc2NlbmRpbmcgb3JkZXIuIGJ1dAorYWNjdHVhbGx5IHdoZW4gSSB3YXMgdmFsaWRhdGluZyBrZXhlYyBhbmQga2R1bXAsIHRoZSBvcmRlciBvZgorc2VyaWFsIG5vZGUgc3RpbGwgaXMgY2hhbmdlZC4gU28gdGhlIHBhdGNoIGlzIHRvIHNvcnQgdGhlc2UgZW50cmllcworYnkgdGhlIGRpcmVjdG9yeSBuYW1lIGluIGFzY2VuZGluZyBvcmRlci4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFlhbmcgV2VpIDxXZWkuWWFuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBrZXhlYy9hcmNoL3BwYy9mczJkdC5jIHwgICAxMyArKysrKysrKysrLS0tCisga2V4ZWMvZnMyZHQuYyAgICAgICAgICB8ICAgMTMgKysrKysrKysrKy0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL3BwYy9mczJkdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcva2V4ZWMvYXJjaC9wcGMvZnMyZHQuYworKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL3BwYy9mczJkdC5jCitAQCAtMjk2LDYgKzI5Niw5IEBAIHN0YXRpYyBpbnQgY29tcGFyZWZ1bmMoY29uc3Qgdm9pZCAqZGVudHIKKyB7CisgCWNoYXIgKnN0cjEgPSAoKihzdHJ1Y3QgZGlyZW50ICoqKWRlbnRyeTEpLT5kX25hbWU7CisgCWNoYXIgKnN0cjIgPSAoKihzdHJ1Y3QgZGlyZW50ICoqKWRlbnRyeTIpLT5kX25hbWU7CisrCWNoYXIqIHB0cjEgPSBzdHJjaHIoc3RyMSwgJ0AnKTsKKysJY2hhciogcHRyMiA9IHN0cmNocihzdHIyLCAnQCcpOworKwlpbnQgbGVuMSwgbGVuMjsKKyAKKyAJLyoKKyAJICogc3RyY21wIHNjYW5zIGZyb20gbGVmdCB0byByaWdodCBhbmQgZmFpbHMgdG8gaWRldGlmeSBmb3Igc29tZQorQEAgLTMwMyw5ICszMDYsMTMgQEAgc3RhdGljIGludCBjb21wYXJlZnVuYyhjb25zdCB2b2lkICpkZW50cgorIAkgKiBUaGVyZWZvcmUsIHdlIGdldCB0aGUgd3Jvbmcgc29ydGVkIG9yZGVyIGxpa2UgbWVtb3J5QDEwMDAwMDAwIGFuZAorIAkgKiBtZW1vcnlAZjAwMDAwMC4KKyAJICovCistCWlmIChzdHJjaHIoc3RyMSwgJ0AnKSAmJiBzdHJjaHIoc3RyMiwgJ0AnKSAmJgorLQkJKHN0cmxlbihzdHIxKSA+IHN0cmxlbihzdHIyKSkpCistCQlyZXR1cm4gMTsKKysJaWYgKHB0cjEgJiYgcHRyMikgeworKwkJbGVuMSA9IHB0cjEgLSBzdHIxOworKwkJbGVuMiA9IHB0cjIgLSBzdHIyOworKwkJaWYgKCFzdHJuY21wKHN0cjEsIHN0cjIsIGxlbjEgPmxlbjIgPyBsZW4xOiBsZW4yKSAmJgorKwkJCQkJKHN0cmxlbihzdHIxKSA+IHN0cmxlbihzdHIyKSkpCisrCQkJCXJldHVybiAxOworKwl9CisgCisgCXJldHVybiBzdHJjbXAoc3RyMSwgc3RyMik7CisgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLXgzMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy14MzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZkMThlYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy14MzIucGF0Y2gKQEAgLTAsMCArMSw4OCBAQAoreDg2XzY0OiBBZGQgc3VwcG9ydCB0byBidWlsZCBrZXhlYy10b29scyB3aXRoIHgzMiBBQkkKKworU3VtbWFyeSBvZiBjaGFuZ2VzLAorCitjb25maWd1cmUuYWM6IEFkZCB0ZXN0IGZvciBkZXRlY3QgeDMyIEFCSS4KK3B1cmdhdG9yeS9hcmNoL3g4Nl82NC9NYWtlZmlsZTogTm90IHVzZSBtY21vZGVsIGxhcmdlIHdoZW4KKwl4MzIgQUJJIGlzIHNldC4KK2tleGVjL2FyY2gveDg2XzY0L2tleGVjLWVsZi1yZWwteDg2XzY0LmM6IFdoZW4geDMyIEFCSSBpcyBzZXQKKwl1c2UgRUxGQ0xBU1MzMiBpbnN0ZWFkIG9mIEVMRkNMQVNTNjQuCitrZXhlYy9rZXhlYy1zeXNjYWxsLmg6IEFkZCBjb3JyZWN0IHN5c2NhbGwgbnVtYmVyIGZvciB4MzIgQUJJLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcmlhbm8gTG9wZXogPG1hcmlhbm8ubG9wZXpAbGludXguaW50ZWwuY29tPgorCistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOSArKysrKysrKysKKyBrZXhlYy9hcmNoL3g4Nl82NC9rZXhlYy1lbGYtcmVsLXg4Nl82NC5jIHwgNCArKysrCisga2V4ZWMva2V4ZWMtc3lzY2FsbC5oICAgICAgICAgICAgICAgICAgICB8IDQgKysrKworIHB1cmdhdG9yeS9hcmNoL3g4Nl82NC9NYWtlZmlsZSAgICAgICAgICAgfCA0ICsrKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9jb25maWd1cmUuYWMKKysrKyBrZXhlYy10b29scy0yLjAuMTAvY29uZmlndXJlLmFjCitAQCAtNTYsNiArNTYsMTUgQEAgY2FzZSAkdGFyZ2V0X2NwdSBpbgorIAkJOzsKKyAJaWE2NHx4ODZfNjR8YWxwaGF8bTY4ayApCisgCQlBUkNIPSIkdGFyZ2V0X2NwdSIKKysKKysJCWRubCAtLS1UZXN0IGZvciB4MzIgQUJJIGluIHg4Nl82NAorKwkJaWYgdGVzdCAieCRBUkNIIiA9ICJ4eDg2XzY0IiA7IHRoZW4KKysJCQlBQ19FR1JFUF9DUFAoeDMyX3Rlc3QsCisrCQkJWyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQgKF9fSUxQMzJfXykKKysJCQkJeDMyX3Rlc3QKKysJCQkjZW5kaWYKKysJCQldLCBTVUJBUkNIPSd4MzInLCBTVUJBUkNIPSc2NCcpCisrCQlmaQorIAkJOzsKKyAJKiApCisgCQlBQ19NU0dfRVJST1IoW3Vuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSAkdGFyZ2V0X2NwdV0pCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gveDg2XzY0L2tleGVjLWVsZi1yZWwteDg2XzY0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9rZXhlYy9hcmNoL3g4Nl82NC9rZXhlYy1lbGYtcmVsLXg4Nl82NC5jCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gveDg2XzY0L2tleGVjLWVsZi1yZWwteDg2XzY0LmMKK0BAIC04LDcgKzgsMTEgQEAgaW50IG1hY2hpbmVfdmVyaWZ5X2VsZl9yZWwoc3RydWN0IG1lbV9laAorIAlpZiAoZWhkci0+ZWlfZGF0YSAhPSBFTEZEQVRBMkxTQikgeworIAkJcmV0dXJuIDA7CisgCX0KKysjaWZkZWYgX19JTFAzMl9fCisrCWlmIChlaGRyLT5laV9jbGFzcyAhPSBFTEZDTEFTUzMyKSB7CisrI2Vsc2UKKyAJaWYgKGVoZHItPmVpX2NsYXNzICE9IEVMRkNMQVNTNjQpIHsKKysjZW5kaWYKKyAJCXJldHVybiAwOworIAl9CisgCWlmIChlaGRyLT5lX21hY2hpbmUgIT0gRU1fWDg2XzY0KSB7CitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2tleGVjLXN5c2NhbGwuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2tleGVjL2tleGVjLXN5c2NhbGwuaAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9rZXhlYy1zeXNjYWxsLmgKK0BAIC0zMSw4ICszMSwxMiBAQAorICNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkyNjgKKyAjZW5kaWYKKyAjaWZkZWYgX194ODZfNjRfXworKyNpZmRlZiBfX0lMUDMyX18KKysjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJNTI4CisrI2Vsc2UKKyAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjQ2CisgI2VuZGlmCisrI2VuZGlmCisgI2lmZGVmIF9fczM5MHhfXworICNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkyNzcKKyAjZW5kaWYKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAvcHVyZ2F0b3J5L2FyY2gveDg2XzY0L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcvcHVyZ2F0b3J5L2FyY2gveDg2XzY0L01ha2VmaWxlCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL3B1cmdhdG9yeS9hcmNoL3g4Nl82NC9NYWtlZmlsZQorQEAgLTIzLDQgKzIzLDYgQEAgeDg2XzY0X1BVUkdBVE9SWV9TUkNTICs9IHB1cmdhdG9yeS9hcmNoLworIHg4Nl82NF9QVVJHQVRPUllfU1JDUyArPSBwdXJnYXRvcnkvYXJjaC9pMzg2L3ZnYS5jCisgeDg2XzY0X1BVUkdBVE9SWV9TUkNTICs9IHB1cmdhdG9yeS9hcmNoL2kzODYvcGljLmMKKyAKKy14ODZfNjRfUFVSR0FUT1JZX0VYVFJBX0NGTEFHUyA9IC1tY21vZGVsPWxhcmdlCisraWZlcSAoJChTVUJBUkNIKSw2NCkKKysgICAgICAgIHg4Nl82NF9QVVJHQVRPUllfRVhUUkFfQ0ZMQUdTID0gLW1jbW9kZWw9bGFyZ2UKKytlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzXzIuMC4xMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29sc18yLjAuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZkYjk4MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29sc18yLjAuMTAuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSBrZXhlYy10b29scy5pbmMKK2V4cG9ydCBMREZMQUdTID0gIi1MJHtTVEFHSU5HX0xJQkRJUn0iCitFWFRSQV9PRUNPTkYgPSAiIC0td2l0aC16bGliPXllcyIKKworU1JDX1VSSSArPSAiZmlsZTovL2tleGVjLXRvb2xzLVJlZmluZS1rZHVtcC1kZXZpY2VfdHJlZS1zb3J0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9rZXhlYy1hYXJjaDY0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9rZXhlYy14MzIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDItcG93ZXJwYy1jaGFuZ2UtdGhlLW1lbW9yeS1zaXplLWxpbWl0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXB1cmdhdG9yeS1QYXNzLXItZGlyZWN0bHktdG8tbGlua2VyLnBhdGNoIFwKKyAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjZjYjRkMjJiY2VjNzFiNmUwNzBhYThlOWQ5OTBhNWU2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMzMWJiODNkZWVmOTU0N2EyOGU4Y2ZjMWYwOTE2ZTcwZjhlNmI5MmE2YmQyZWY3MDc3ZTEyZTMzMzgyMzlhZjMiCisKK1BBQ0tBR0VTID0rICJrZXhlYyBrZHVtcCB2bWNvcmUtZG1lc2ciCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCitSUkVDT01NRU5EU18ke1BOfSA9ICJrZXhlYyBrZHVtcCB2bWNvcmUtZG1lc2ciCisKK0ZJTEVTX2tleGVjID0gIiR7c2JpbmRpcn0va2V4ZWMiCitGSUxFU19rZHVtcCA9ICIke3NiaW5kaXJ9L2tkdW1wIgorRklMRVNfdm1jb3JlLWRtZXNnID0gIiR7c2JpbmRpcn0vdm1jb3JlLWRtZXNnIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2QvZGVwbW9kd3JhcHBlci1jcm9zc18xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9kZXBtb2R3cmFwcGVyLWNyb3NzXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWNiM2E4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2QvZGVwbW9kd3JhcHBlci1jcm9zc18xLjAuYmIKQEAgLTAsMCArMSw0OCBAQAorU1VNTUFSWSA9ICJXcmFwcGVyIHNjcmlwdCBmb3IgdGhlIExpbnV4IGtlcm5lbCBtb2R1bGUgZGVwZW5kZW5jeSBpbmRleGVyIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworUyA9ICIke1dPUktESVJ9IgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorIyBUaGUga2VybmVsIGFuZCB0aGUgc3RhZ2luZyBkaXIgZm9yIGl0IGlzIG1hY2hpbmUgc3BlY2lmaWMKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGZvciB0aGUgc3N0YXRlIGNvZGUgdG8gcHJvY2VzcyB0aGUgd3JhcHBlcgorU1NUQVRFX1NDQU5fRklMRVMgKz0gImRlcG1vZHdyYXBwZXIiCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8KKworCWNhdCA+ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2RlcG1vZHdyYXBwZXIgPDwgRU9GCisjIS9iaW4vc2gKKyMgRXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGFzOiBkZXBtb2R3cmFwcGVyIC1hIEtFUk5FTF9WRVJTSU9OCitpZiBbICJcJDEiICE9ICItYSIgLW8gIlwkMiIgIT0gIi1iIiBdOyB0aGVuCisgICAgZWNobyAiVXNhZ2U6IGRlcG1vZHdyYXBwZXIgLWEgLWIgcm9vdGZzIEtFUk5FTF9WRVJTSU9OIiA+JjIKKyAgICBleGl0IDEKK2ZpCitpZiBbICEgLXIgJHtQS0dEQVRBX0RJUn0va2VybmVsLWRlcG1vZC9rZXJuZWwtYWJpdmVyc2lvbiBdOyB0aGVuCisgICAgZWNobyAiVW5hYmxlIHRvIHJlYWQ6ICR7UEtHREFUQV9ESVJ9L2tlcm5lbC1kZXBtb2Qva2VybmVsLWFiaXZlcnNpb24iID4mMgorZWxzZQorICAgIGtlcm5lbGFiaT1cJChjYXQgJHtQS0dEQVRBX0RJUn0va2VybmVsLWRlcG1vZC9rZXJuZWwtYWJpdmVyc2lvbikKKyAgICBpZiBbICJcJGtlcm5lbGFiaSIgIT0gIlwkNCIgXTsgdGhlbgorICAgICAgICBlY2hvICJFcnJvcjogS2VybmVsIHZlcnNpb24gXCQ0IGRvZXMgbm90IG1hdGNoIGtlcm5lbC1hYml2ZXJzaW9uIChcJGtlcm5lbGFiaSkiID4mMgorICAgICAgICBleGl0IDEKKyAgICBmaQorZmkKKworaWYgWyAhIC1yICR7UEtHREFUQV9ESVJ9L2tlcm5lbC1kZXBtb2QvU3lzdGVtLm1hcC1cJDQgXTsgdGhlbgorICAgIGVjaG8gIlVuYWJsZSB0byByZWFkOiAke1BLR0RBVEFfRElSfS9rZXJuZWwtZGVwbW9kL1N5c3RlbS5tYXAtXCQ0IiA+JjIKKyAgICBleGVjIGVudiBkZXBtb2QgIlwkMSIgIlwkMiIgIlwkMyIgIlwkNCIKK2Vsc2UKKyAgICBleGVjIGVudiBkZXBtb2QgIlwkMSIgIlwkMiIgIlwkMyIgLUYgIiR7UEtHREFUQV9ESVJ9L2tlcm5lbC1kZXBtb2QvU3lzdGVtLm1hcC1cJDQiICJcJDQiCitmaQorRU9GCisJY2htb2QgK3ggJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vZGVwbW9kd3JhcHBlcgorfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImRlcG1vZHdyYXBwZXJfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitkZXBtb2R3cmFwcGVyX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC1uYXRpdmVfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC1uYXRpdmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZTI3NGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kLW5hdGl2ZV9naXQuYmIKQEAgLTAsMCArMSwxOCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTIgS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIHRoZSB0ZXJtcykKKworcmVxdWlyZSBrbW9kLmluYworCitERVBFTkRTICs9ICJ6bGliLW5hdGl2ZSIKKworaW5oZXJpdCBuYXRpdmUKKworU1JDX1VSSSArPSAiZmlsZTovL0NoYW5nZS10by1jYWxsaW5nLWJzd2FwXy1pbnN0ZWFkLW9mLWh0b2JlLWFuZC1iZS10b2gucGF0Y2ggXAorICAgICAgICAgICAiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpeworCWZvciB0b29sIGluIGRlcG1vZCBpbnNtb2QgbHNtb2QgbW9kaW5mbyBtb2Rwcm9iZSBybW1vZAorCWRvCisJCWxuIC1zIGttb2QgJHtEfSR7YmluZGlyfS8kdG9vbAorCWRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhYTY3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QuaW5jCkBAIC0wLDAgKzEsNDMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCisKK1NVTU1BUlkgPSAiVG9vbHMgZm9yIG1hbmFnaW5nIExpbnV4IGtlcm5lbCBtb2R1bGVzIgorREVTQ1JJUFRJT04gPSAia21vZCBpcyBhIHNldCBvZiB0b29scyB0byBoYW5kbGUgY29tbW9uIHRhc2tzIHdpdGggTGludXgga2VybmVsIG1vZHVsZXMgbGlrZSBcCisgICAgICAgICAgICAgICBpbnNlcnQsIHJlbW92ZSwgbGlzdCwgY2hlY2sgcHJvcGVydGllcywgcmVzb2x2ZSBkZXBlbmRlbmNpZXMgYW5kIGFsaWFzZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3BhY2thZ2VzLnByb2Z1c2lvbi5tb2JpL2ttb2QvIgorTElDRU5TRSA9ICJHUEwtMi4wKyAmIExHUEwtMi4xKyIKK0xJQ0VOU0VfbGlia21vZCA9ICJMR1BMLTIuMSsiCitTRUNUSU9OID0gImJhc2UiCisKK0RFUEVORFMgKz0gInBrZ2NvbmZpZy1uYXRpdmUiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmttb2QvQ09QWUlORzttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMgXAorICAgICAgICAgICAgICAgICAgICIKK2luaGVyaXQgYXV0b3Rvb2xzIGd0ay1kb2MKKworU1JDUkVWID0gIjBkODMzNzE1ZWFhNjU2MzZkZGEyNzA1Yjg5MzU5YTFlMDE1NGRjNTgiCisjIExvb2tvdXQgZm9yIFBWIGJ1bXAgdG9vIHdoZW4gU1JDUkVWIGlzIGNoYW5nZWQKK1BWID0gIjIxK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vdXRpbHMva2VybmVsL2ttb2Qva21vZC5naXQgXAorICAgICAgICAgICBmaWxlOi8vZGVwbW9kLXNlYXJjaC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2F2b2lkX3BhcmFsbGVsX3Rlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1PX0NMT0VYRUMucGF0Y2ggXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1pbnN0YWxsIC0tc3ltbGluayIKK0VYVFJBX09FQ09ORiArPSIgLS1lbmFibGUtdG9vbHMgLS1kaXNhYmxlLW1hbnBhZ2VzIC0td2l0aC16bGliIgorCitQQUNLQUdFQ09ORklHW2RlYnVnXSA9ICItLWVuYWJsZS1kZWJ1ZywtLWRpc2FibGUtZGVidWciCitQQUNLQUdFQ09ORklHW2xvZ2dpbmddID0gIiAtLWVuYWJsZS1sb2dnaW5nLC0tZGlzYWJsZS1sb2dnaW5nIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICAgICAgIGd0a2RvY2l6ZSAtLWRvY2RpciAke1N9L2xpYmttb2QvZG9jcyB8fCB0b3VjaCAke1N9L2xpYmttb2QvZG9jcy9ndGstZG9jLm1ha2UKK30KKworZG9fY29uZmlndXJlX2FwcGVuZCAoKSB7CisJc2VkIC1pICdzI31saWJ0b29sI30ke1RBUkdFVF9TWVN9LWxpYnRvb2wjJyAke0J9L2RvbHRsaWJ0b29sCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL0NoYW5nZS10by1jYWxsaW5nLWJzd2FwXy1pbnN0ZWFkLW9mLWh0b2JlLWFuZC1iZS10b2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL0NoYW5nZS10by1jYWxsaW5nLWJzd2FwXy1pbnN0ZWFkLW9mLWh0b2JlLWFuZC1iZS10b2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcyMjE4MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvQ2hhbmdlLXRvLWNhbGxpbmctYnN3YXBfLWluc3RlYWQtb2YtaHRvYmUtYW5kLWJlLXRvaC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitTdWJqZWN0OiBDaGFuZ2UgdG8gY2FsbGluZyBic3dhcF8qIGluc3RlYWQgb2YgaHRvYmUqIGFuZCBiZSp0b2gKKworV2UgY2FuJ3QgdXNlIGh0b2JlKiBhbmQgYmUqdG9oIGZ1bmN0aW9ucyBiZWNhdXNlIHRoZXkgYXJlIG5vdAorYXZhaWxhYmxlIG9uIG9sZGVyIHZlcnNpb25zIG9mIGdsaWJjLCBGb3IgZXhhbXBsZSwgc2hpcHBlZCBvbiBDZW50b3MgNS41LgorCitDaGFuZ2UgdG8gZGlyZWN0bHkgY2FsbGluZyBic3dhcF8qIGFzIGRlZmluZWQgaW4rYnl0ZXN3YXAuaC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IFRpbmcgTGl1IDxiMjg0OTVAZnJlZXNjYWxlLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmttb2QvbGlia21vZC1zaWduYXR1cmUuYyB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGlia21vZC9saWJrbW9kLXNpZ25hdHVyZS5jIGIvbGlia21vZC9saWJrbW9kLXNpZ25hdHVyZS5jCitpbmRleCA2ZmMwNmZjLi45MTIxODVhIDEwMDY0NAorLS0tIGEvbGlia21vZC9saWJrbW9kLXNpZ25hdHVyZS5jCisrKysgYi9saWJrbW9kL2xpYmttb2Qtc2lnbmF0dXJlLmMKK0BAIC0xOCw2ICsxOCw3IEBACisgICovCisgCisgI2luY2x1ZGUgPGVuZGlhbi5oPgorKyNpbmNsdWRlIDxieXRlc3dhcC5oPgorICNpbmNsdWRlIDxpbnR0eXBlcy5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KK0BAIC0xMjcsNyArMTI4LDcgQEAgYm9vbCBrbW9kX21vZHVsZV9zaWduYXR1cmVfaW5mbyhjb25zdCBzdHJ1Y3Qga21vZF9maWxlICpmaWxlLCBzdHJ1Y3Qga21vZF9zaWduYXQKKyAJCQltb2RzaWctPmhhc2ggPj0gUEtFWV9IQVNIX19MQVNUIHx8CisgCQkJbW9kc2lnLT5pZF90eXBlID49IFBLRVlfSURfVFlQRV9fTEFTVCkKKyAJCXJldHVybiBmYWxzZTsKKy0Jc2lnX2xlbiA9IGJlMzJ0b2goZ2V0X3VuYWxpZ25lZCgmbW9kc2lnLT5zaWdfbGVuKSk7CisrCXNpZ19sZW4gPSBic3dhcF8zMihnZXRfdW5hbGlnbmVkKCZtb2RzaWctPnNpZ19sZW4pKTsKKyAJaWYgKHNpZ19sZW4gPT0gMCB8fAorIAkgICAgc2l6ZSA8IChpbnQ2NF90KShtb2RzaWctPnNpZ25lcl9sZW4gKyBtb2RzaWctPmtleV9pZF9sZW4gKyBzaWdfbGVuKSkKKyAJCXJldHVybiBmYWxzZTsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVhZmNiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorQXZvaWQgcGFyYWxsZWwtdGVzdHMgYXMgaXQgcmVtb3ZlCitidWlsZHRlc3QtVEVTVFMgYW5kIHJ1bnRlc3QtVEVTVFMgdGFyZ2V0cyByZXF1aXJlZCBieSBwdGVzdC4KK0luIGF1dG9tYWtlIDEuMTMuNCBwYXJhbGxlbC10ZXN0cyBpcyBhc3N1bWVkIGJ5IGRlZmF1bHMuCitJbiBvcmRlciB0byBoYXZlIGJ1aWxkdGVzdC1URVNUUyBhbmQgcnVudGVzdC1URVNUUyB0YXJnZXRzCitzZXJpYWwtdGVzdHMgaXMgbm93IHJlcXVpcmVkCisKK1NpZ25lZC1vZmYtYnk6IFR1ZG9yIEZsb3JlYSA8dHVkb3IuZmxvcmVhQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIChkaXNhYmxlIGZlYXR1cmUgaW5jb21wYXRpYmxlIHdpdGggcHRlc3QpIAorCistLS0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGViMGY5ZDEuLmE1Mzk5NjggMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE0LDcgKzE0LDcgQEAgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgQUNfU1lTX0xBUkdFRklMRQorIEFDX1BSRUZJWF9ERUZBVUxUKFsvdXNyXSkKKyBBTV9NQUlOVEFJTkVSX01PREUoW2VuYWJsZV0pCistQU1fSU5JVF9BVVRPTUFLRShbY2hlY2stbmV3cyBmb3JlaWduIDEuMTEgc2lsZW50LXJ1bGVzIHRhci1wYXggbm8tZGlzdC1nemlwIGRpc3QteHogc3ViZGlyLW9iamVjdHMgY29sb3ItdGVzdHMgcGFyYWxsZWwtdGVzdHNdKQorK0FNX0lOSVRfQVVUT01BS0UoW2NoZWNrLW5ld3MgZm9yZWlnbiAxLjExIHNpbGVudC1ydWxlcyB0YXItcGF4IG5vLWRpc3QtZ3ppcCBkaXN0LXh6IHN1YmRpci1vYmplY3RzIGNvbG9yLXRlc3RzIHNlcmlhbC10ZXN0c10pCisgQU1fU0lMRU5UX1JVTEVTKFt5ZXNdKQorIExUX0lOSVQoW2Rpc2FibGUtc3RhdGljIHBpYy1vbmx5XSkKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9kZXBtb2Qtc2VhcmNoLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2RlcG1vZC1zZWFyY2guY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjdjMGJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9kZXBtb2Qtc2VhcmNoLmNvbmYKQEAgLTAsMCArMSw2IEBACisjCisjIC9ldGMvZGVwbW9kLmQvZGVwbW9kLmNvbmYKKyMKKworc2VhcmNoIHVwZGF0ZXMgZXh0cmFtb2R1bGVzIGJ1aWx0LWluCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvZml4LU9fQ0xPRVhFQy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvZml4LU9fQ0xPRVhFQy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTYxZDYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9maXgtT19DTE9FWEVDLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gYmQ0MzM2N2VlZTg2ODA1OTc3MDE4OGZkOWU5ZGIzODUyMGRjNmZmZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAyMiBKYW4gMjAxNCAwMTowNjo0MCAtMDUwMAorU3ViamVjdDogW1BBVENIXSBsaWJrbW9kL2xpYmttb2QtaW50ZXJuYWwuaDogY2hlY2sgd2hldGhlciBPX0NMT0VYRUMgaXMKKyBkZWZpbmVkIG9yIG5vdAorCitPX0NMT0VYRUMgaXMgaW50cm9kdWNlZCBmcm9tIExpbnV4IDIuNi4yMywgc28gb2xkIGtlcm5lbCBkb2Vzbid0IGhhdmUKK2l0LCB3ZSBuZWVkIGNoZWNrIGJlZm9yZSB1c2UuCisKK1RoaXMgcGF0Y2ggaXMgbXVjaCBtb3JlIGxpa2UgYSB3b3JrYXJvdW5kLCBzaW5jZSBpdCBtYXkgbmVlZCBmY250bCgpIHVzZQorRkRfQ0xPRVhFQyB0byByZXBsYWNlLgorCitUaGlzIHByb2JsZW0gd2FzIHJlcG9ydGVkIGJ5ICJUaW5nIExpdSA8YjI4NDk1QGZyZWVzY2FsZS5jb20+IgorU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlia21vZC9saWJrbW9kLWludGVybmFsLmggfCAgICA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJrbW9kL2xpYmttb2QtaW50ZXJuYWwuaCBiL2xpYmttb2QvbGlia21vZC1pbnRlcm5hbC5oCitpbmRleCAwMTgwMTI0Li4xMDBiNDBmIDEwMDY0NAorLS0tIGEvbGlia21vZC9saWJrbW9kLWludGVybmFsLmgKKysrKyBiL2xpYmttb2QvbGlia21vZC1pbnRlcm5hbC5oCitAQCAtOSw2ICs5LDEwIEBACisgI2luY2x1ZGUgIm1hY3JvLmgiCisgI2luY2x1ZGUgImxpYmttb2QuaCIKKyAKKysjaWZuZGVmIE9fQ0xPRVhFQworKyNkZWZpbmUgT19DTE9FWEVDIDAKKysjZW5kaWYKKysKKyBzdGF0aWMgX2Fsd2F5c19pbmxpbmVfIF9wcmludGZfZm9ybWF0XygyLCAzKSB2b2lkCisgCWttb2RfbG9nX251bGwoc3RydWN0IGttb2RfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7fQorIAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL3B0ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzFkYmNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9wdGVzdC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitBZGQgJ2luc3RhbGwtcHRlc3QnIHJ1bGUuCisKK1NpZ25lZC1vZmYtYnk6IFR1ZG9yIEZsb3JlYSA8dHVkb3IuZmxvcmVhQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLXJ1TiBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KKy0tLSBhL01ha2VmaWxlLmFtCTIwMTMtMDctMTIgMTc6MTE6MDUuMjc4MzMxNTU3ICswMjAwCisrKysgYi9NYWtlZmlsZS5hbQkyMDEzLTA3LTEyIDE3OjE0OjI3LjAzMzc4ODAxNiArMDIwMAorQEAgLTIwNCw2ICsyMDQsMTYgQEAKKyAKKyBkaXN0Y2xlYW4tbG9jYWw6ICQoRElTVENMRUFOX0xPQ0FMX0hPT0tTKQorIAorK2luc3RhbGwtcHRlc3Q6CisrCUAkKE1LRElSX1ApICQoREVTVERJUikvdGVzdHN1aXRlCisrCUBmb3IgZmlsZSBpbiAkKFRFU1RTVUlURSk7IGRvIFwKKysJCWluc3RhbGwgJCRmaWxlICQoREVTVERJUikvdGVzdHN1aXRlOyBcCisrCWRvbmU7CisrCUBzZWQgLWUgJ3MvXk1ha2VmaWxlL19NYWtlZmlsZS8nIDwgTWFrZWZpbGUgPiAkKERFU1RESVIpL01ha2VmaWxlCisrCUAkKE1LRElSX1ApICQoREVTVERJUikvdG9vbHMKKysJQGNwICQobm9pbnN0X1NDUklQVFMpICQobm9pbnN0X1BST0dSQU1TKSAkKERFU1RESVIpL3Rvb2xzCisrCUBjcCAtciB0ZXN0c3VpdGUvcm9vdGZzIHRlc3RzdWl0ZS8ubGlicyAkKERFU1RESVIpL3Rlc3RzdWl0ZQorKworICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBjdXN0b20gcmVsZWFzZSBoZWxwZXJzCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTk4ZGQyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCit0b3VjaCB0ZXN0c3VpdGUvc3RhbXAtcm9vdGZzCit0YXIgeGYgdGVzdG1vZHVsZS50YXIKK21ha2UgLWsgcnVudGVzdC1URVNUUyAyPi9kZXYvbnVsbHwgZ3JlcCAtZSBeUEFTUyAtZSBeRkFJTAorZmluZCB0ZXN0c3VpdGUgLW5hbWUgKi5rbyAtZXhlYyBybSAtZiB7fSBcOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTRkODVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZF9naXQuYmIKQEAgLTAsMCArMSw2MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTIgS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIHRoZSB0ZXJtcykKKworcmVxdWlyZSBrbW9kLmluYworCitERVBFTkRTICs9ICJ6bGliIgorUFJPVklERVMgKz0gIm1vZHVsZS1pbml0LXRvb2xzLWluc21vZC1zdGF0aWMgbW9kdWxlLWluaXQtdG9vbHMtZGVwbW9kIG1vZHVsZS1pbml0LXRvb2xzIgorUlBST1ZJREVTXyR7UE59ICs9ICJtb2R1bGUtaW5pdC10b29scy1pbnNtb2Qtc3RhdGljIG1vZHVsZS1pbml0LXRvb2xzLWRlcG1vZCBtb2R1bGUtaW5pdC10b29scyIKK1JDT05GTElDVFNfJHtQTn0gKz0gIm1vZHVsZS1pbml0LXRvb2xzLWluc21vZC1zdGF0aWMgbW9kdWxlLWluaXQtdG9vbHMtZGVwbW9kIG1vZHVsZS1pbml0LXRvb2xzIgorUlJFUExBQ0VTXyR7UE59ICs9ICJtb2R1bGUtaW5pdC10b29scy1pbnNtb2Qtc3RhdGljIG1vZHVsZS1pbml0LXRvb2xzLWRlcG1vZCBtb2R1bGUtaW5pdC10b29scyIKKworIyB0byBmb3JjZSB1c2VyIHRvIHJlbW92ZSBvbGQgbW9kdWxlLWluaXQtdG9vbHMgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGttb2QgdmFyaWFudHMKK1JDT05GTElDVFNfbGlia21vZDIgKz0gIm1vZHVsZS1pbml0LXRvb2xzLWluc21vZC1zdGF0aWMgbW9kdWxlLWluaXQtdG9vbHMtZGVwbW9kIG1vZHVsZS1pbml0LXRvb2xzIgorCisjIGF1dG90b29scyBzZXQgcHJlZml4IHRvIC91c3IsIGhvd2V2ZXIgd2Ugd2FudCB0aGVtIGluIC9iaW4gYW5kIC9zYmluCitiaW5kaXIgPSAiJHtiYXNlX2JpbmRpcn0iCitzYmluZGlyID0gIiR7YmFzZV9zYmluZGlyfSIKKyMgbGliZGlyID0gIiR7YmFzZV9saWJkaXJ9IgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgICAgIGluc3RhbGwgLWRtNzU1ICR7RH0ke2Jhc2VfYmluZGlyfQorICAgICAgICBpbnN0YWxsIC1kbTc1NSAke0R9JHtiYXNlX3NiaW5kaXJ9CisgICAgICAgICMgYWRkIHN5bWxpbmtzIHRvIGttb2QKKyAgICAgICAgbG4gLXMgLi4ke2Jhc2VfYmluZGlyfS9rbW9kICR7RH0ke2Jhc2VfYmluZGlyfS9sc21vZAorICAgICAgICBmb3IgdG9vbCBpbiBpbnNtb2Qgcm1tb2QgZGVwbW9kIG1vZGluZm8gbW9kcHJvYmU7IGRvCisgICAgICAgICAgICAgICAgbG4gLXMgLi4ke2Jhc2VfYmluZGlyfS9rbW9kICR7RH0ke2Jhc2Vfc2JpbmRpcn0vJHt0b29sfQorICAgICAgICBkb25lCisgICAgICAgICMgY29uZmlndXJhdGlvbiBkaXJlY3RvcmllcworICAgICAgICBpbnN0YWxsIC1kbTc1NSAke0R9JHtiYXNlX2xpYmRpcn0vZGVwbW9kLmQKKyAgICAgICAgaW5zdGFsbCAtZG03NTUgJHtEfSR7YmFzZV9saWJkaXJ9L21vZHByb2JlLmQKKyAgICAgICAgaW5zdGFsbCAtZG03NTUgJHtEfSR7c3lzY29uZmRpcn0vZGVwbW9kLmQKKyAgICAgICAgaW5zdGFsbCAtZG03NTUgJHtEfSR7c3lzY29uZmRpcn0vbW9kcHJvYmUuZAorCisgICAgICAgICMgaW5zdGFsbCBkZXBtb2QuZCBmaWxlIGZvciBzZWFyY2gvIGRpcgorICAgICAgICBpbnN0YWxsIC1EbTY0NCAiJHtXT1JLRElSfS9kZXBtb2Qtc2VhcmNoLmNvbmYiICIke0R9JHtiYXNlX2xpYmRpcn0vZGVwbW9kLmQvc2VhcmNoLmNvbmYiCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKyAgICAgICAgICAgIHNlZCAtaSAncy9hY19wd2Q9LyNhY19wd2Q9LycgY29uZmlnLnN0YXR1cyA7IHNlZCAtaSAiLyNhY19wd2Q9L2FcYWNfcHdkPScuJyIgY29uZmlnLnN0YXR1cworfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiNjAiCisKK0FMVEVSTkFUSVZFX2ttb2QgPSAiaW5zbW9kIG1vZHByb2JlIHJtbW9kIG1vZGluZm8gYmluLWxzbW9kIGxzbW9kIGRlcG1vZCIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2luc21vZF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2luc21vZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttb2Rwcm9iZV0gPSAiJHtiYXNlX3NiaW5kaXJ9L21vZHByb2JlIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3JtbW9kXSA9ICIke2Jhc2Vfc2JpbmRpcn0vcm1tb2QiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbW9kaW5mb10gPSAiJHtiYXNlX3NiaW5kaXJ9L21vZGluZm8iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbYmluLWxzbW9kXSA9ICIke2Jhc2VfYmluZGlyfS9sc21vZCIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2xzbW9kXSA9ICIke2Jhc2Vfc2JpbmRpcn0vbHNtb2QiCitBTFRFUk5BVElWRV9UQVJHRVRbbHNtb2RdID0gIiR7YmFzZV9iaW5kaXJ9L2xzbW9kLiR7QlBOfSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2RlcG1vZF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2RlcG1vZCIKKworUEFDS0FHRVMgPSsgImxpYmttb2QgJHtQTn0tYmFzaC1jb21wbGV0aW9uIgorCitGSUxFU19saWJrbW9kID0gIiR7YmFzZV9saWJkaXJ9L2xpYmttb2QqJHtTT0xJQlN9ICR7bGliZGlyfS9saWJrbW9kKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS9kZXBtb2QuZCAke2Jhc2VfbGliZGlyfS9tb2Rwcm9iZS5kIgorRklMRVNfJHtQTn0tYmFzaC1jb21wbGV0aW9uID0gIiR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvMDAwMS1SZWN0aWZ5LXRoZS1mdW5jdGlvbi1zaWduYXR1cmVzLXRvLWZpeC1wcm90b3R5cGUtbWlzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvMDAwMS1SZWN0aWZ5LXRoZS1mdW5jdGlvbi1zaWduYXR1cmVzLXRvLWZpeC1wcm90b3R5cGUtbWlzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNDgxMzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS8wMDAxLVJlY3RpZnktdGhlLWZ1bmN0aW9uLXNpZ25hdHVyZXMtdG8tZml4LXByb3RvdHlwZS1taXMucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSBkYjExMjczOWRjNGY2MDhhOTY4YjgxMDRiMzgyOTU1ZGMzZDk2Y2EzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNyBTZXAgMjAxNSAwNzo0MDoxMCArMDAwMAorU3ViamVjdDogW1BBVENIXSBSZWN0aWZ5IHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIHRvIGZpeCBwcm90b3R5cGUgbWlzbWF0Y2hlcworCitjbGFuZyBpcyBsZXNzIGZvcmdpdmluZyB3aGVuIGl0IGNvbWVzIHRvIGNvZGluZyBzdGFuZGFyZHMsIGNvcnJlY3QgdGhlCitmdW5jdGlvbiBzaWduYXR1cmVzIHRvIHJlZmxlY3QgdGhlIGZ1bmN0aW9uIGxvZ2ljCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgZnN5bmMuYyAgICAgIHwgNyArKysrLS0tCisgbGF0ZW5jeXRvcC5oIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZnN5bmMuYyBiL2ZzeW5jLmMKK2luZGV4IDgyZGZmMGUuLjVjZWZiYTkgMTAwNjQ0CistLS0gYS9mc3luYy5jCisrKysgYi9mc3luYy5jCitAQCAtNTEsNyArNTEsNyBAQCBzdHJ1Y3QgZnN5bmNfZmlsZXMgeworIHN0YXRpYyBHTGlzdCAqZnN5bmNfZGF0YTsKKyAKKyAKKy1zdGF0aWMgY2hhaW5fZmlsZShzdHJ1Y3QgZnN5bmNfcHJvY2VzcyAqcHJvYywgY2hhciAqZmlsZW5hbWUpCisrc3RhdGljIHZvaWQgY2hhaW5fZmlsZShzdHJ1Y3QgZnN5bmNfcHJvY2VzcyAqcHJvYywgY2hhciAqZmlsZW5hbWUpCisgeworIAlzdHJ1Y3QgZnN5bmNfZmlsZXMgKmZpbGU7CisgCUdMaXN0ICppdGVtOworQEAgLTc1LDcgKzc1LDcgQEAgc3RhdGljIGNoYWluX2ZpbGUoc3RydWN0IGZzeW5jX3Byb2Nlc3MgKnByb2MsIGNoYXIgKmZpbGVuYW1lKQorIAlwcm9jLT5maWxlcyA9IGdfbGlzdF9hcHBlbmQocHJvYy0+ZmlsZXMsIGZpbGUpOworIH0KKyAKKy1zdGF0aWMgcmVwb3J0X2ZpbGUoY2hhciAqcHJvY2VzcywgY2hhciAqZmlsZSkKKytzdGF0aWMgdm9pZCByZXBvcnRfZmlsZShjaGFyICpwcm9jZXNzLCBjaGFyICpmaWxlKQorIHsKKyAJc3RydWN0IGZzeW5jX3Byb2Nlc3MgKnByb2M7CisgCUdMaXN0ICppdGVtOworQEAgLTE1Nyw5ICsxNTcsMTAgQEAgaW50IGVuYWJsZV9mc3luY190cmFjZXIodm9pZCkKKyAJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9jdXJyZW50X3RyYWNlciIsICJmc3luYyIpOwkKKyAJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9pdGVyX2N0cmwiLCAiZnRyYWNlX3ByaW50ayIpOwkKKyAJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX29uIiwgIjEiKTsKKysJcmV0dXJuIHJldDsKKyB9CisgCistaW50IGRpc2FibGVfZnN5bmNfdHJhY2VyKHZvaWQpCisrdm9pZCBkaXNhYmxlX2ZzeW5jX3RyYWNlcih2b2lkKQorIHsKKyAJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX29uIiwgIjAiKTsKKyB9CitkaWZmIC0tZ2l0IGEvbGF0ZW5jeXRvcC5oIGIvbGF0ZW5jeXRvcC5oCitpbmRleCA1Mzk0ZDczLi45ZDEwN2E4IDEwMDY0NAorLS0tIGEvbGF0ZW5jeXRvcC5oCisrKysgYi9sYXRlbmN5dG9wLmgKK0BAIC01NCw1ICs1NCw1IEBAIGV4dGVybiBjaGFyICp0cmFuc2xhdGUoY2hhciAqbGluZSk7CisgZXh0ZXJuIHZvaWQgaW5pdF90cmFuc2xhdGlvbnMoY2hhciAqZmlsZW5hbWUpOworIGV4dGVybiBpbnQgZnN5bmNfZGlzcGxheShpbnQgZHVyYXRpb24pOworIGV4dGVybiBpbnQgZW5hYmxlX2ZzeW5jX3RyYWNlcih2b2lkKTsKKy1leHRlcm4gaW50IGRpc2FibGVfZnN5bmNfdHJhY2VyKHZvaWQpOworK2V4dGVybiB2b2lkIGRpc2FibGVfZnN5bmNfdHJhY2VyKHZvaWQpOworIGV4dGVybiB2b2lkIHVwZGF0ZV9saXN0KHZvaWQpOworLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS9sYXRlbmN5dG9wLWZzeW5jLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvbGF0ZW5jeXRvcC1mc3luYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODQ4Y2NmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvbGF0ZW5jeXRvcC1mc3luYy5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitsaW51eDogc3lzZnM6IHVzZSB0cmFjaW5nX29uIGFzIHRyYWNpbmdfZW5hYmxlZCBpcyBkZXByZWNhdGVkCisKK3RyYWNpbmdfZW5hYmxlZCB1c2UgaW4gdGhlIGtlcm5lbCBpcyBiZWluZyBkZXByZWNhdGVkIGFzIHBlciBjb21taXQKKzY3NTJhYjRhOWMzMCBbdHJhY2luZzogRGVwcmVjYXRlIHRyYWNpbmdfZW5hYmxlZCBmb3IgdHJhY2luZ19vbl0gaW4KK3RoZSBsaW51eCBtYWlubGluZSBrZXJuZWwuIHRyYWNpbmdfZW5hYmxlZCB1c2Ugd2lsbCBnZW5lcmF0ZSBhIHdhcm5pbmcKK2FuZCBtYXkgbm8gbG9uZ2VyIGZ1bmN0aW9uIGFzIGV4cGVjdGVkLCB0aGVyZWZvcmUgbW92ZSB0byB1c2UgdHJhY2luZ19vbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IERlbm5pcyBIYWxsIDxkZW5uaXMuaGFsbEB3aW5kcml2ZXIuY29tPgorCitJbmRleDogbGF0ZW5jeXRvcC0wLjUvZnN5bmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxhdGVuY3l0b3AtMC41Lm9yaWcvZnN5bmMuYwkyMDEyLTA4LTAzIDEwOjQ1OjQ5LjAwMDAwMDAwMCAtMDQwMAorKysrIGxhdGVuY3l0b3AtMC41L2ZzeW5jLmMJMjAxMi0wOC0wMyAxMDo0ODozOS4wMDAwMDAwMDAgLTA0MDAKK0BAIC0xNDksMTkgKzE0OSwxOSBAQAorICAqIGNkIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcKKyAgKiBlY2hvIGZzeW5jID4gY3VycmVudF90cmFjZXIKKyAgKiBlY2hvIGZ0cmFjZV9wcmludGsgPiBpdGVyX2N0cmwgCistICogZWNobyAxID4gdHJhY2luZ19lbmFibGVkCisrICogZWNobyAxID4gdHJhY2luZ19vbgorICAqLworIAlyZXQgPSBzeXN0ZW0oIi9iaW4vbW91bnQgLXQgZGVidWdmcyBub25lIC9zeXMva2VybmVsL2RlYnVnLyIpOworIAlpZiAoIXJldCkgCisgCQlyZXR1cm4gLTE7CisgCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvY3VycmVudF90cmFjZXIiLCAiZnN5bmMiKTsJCisgCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvaXRlcl9jdHJsIiwgImZ0cmFjZV9wcmludGsiKTsJCistCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19lbmFibGVkIiwgIjEiKTsKKysJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX29uIiwgIjEiKTsKKyB9CisgCisgaW50IGRpc2FibGVfZnN5bmNfdHJhY2VyKHZvaWQpCisgeworLQl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfZW5hYmxlZCIsICIwIik7CisrCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19vbiIsICIwIik7CisgfQorIAorIAorQEAgLTMzOSw4ICszMzksOCBAQAorIAkJaWYgKGN1cmR1cmF0aW9uID4gNSkKKyAJCQljdXJkdXJhdGlvbiA9IDU7CisgCQkvKiBjbGVhciB0aGUgZnRyYWNlIGJ1ZmZlciAqLworLQkJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX2VuYWJsZWQiLCAiMCIpOworLQkJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX2VuYWJsZWQiLCAiMSIpOworKwkJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX29uIiwgIjAiKTsKKysJCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19vbiIsICIxIik7CisgCQlrZXkgPSBzZWxlY3QoMSwgJnJmZHMsIE5VTEwsIE5VTEwsICZlbmQpOworIAkJcGFyc2VfZnRyYWNlKCk7CisgCQlwcmludF9nbG9iYWxfbGlzdCgpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvbGF0ZW5jeXRvcC1tYWtlZmlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3AtMC41L2xhdGVuY3l0b3AtbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmMjE3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3AtMC41L2xhdGVuY3l0b3AtbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorZGlmZiAtLWdpdCBhL01ha2VmaWxlLm9yaWcgYi9NYWtlZmlsZQoraW5kZXggMTZhMjM2OS4uZmE3OTdhMiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLm9yaWcKKysrKyBiL01ha2VmaWxlCitAQCAtMSwxMCArMSwxMSBAQAorLSMgRklYTUU6IFVzZSBhdXRvY29uZiA/CistSEFTX0dUS19HVUkgPSAxCisrIyBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisrIyBTaWduZWQtb2ZmLWJ5OiBKYWNrIE1pdGNoZWxsIDxqYWNrLm1pdGNoZWxsQGRiYnJvYWRjYXN0LmNvLnVrPgorIAorIERFU1RESVIgPQorIFNCSU5ESVIgPSAvdXNyL3NiaW4KKyBYQ0ZMQUdTID0gLVcgIC1nIGBwa2ctY29uZmlnIC0tY2ZsYWdzIGdsaWItMi4wYCAtRF9GT1JUSUZZX1NPVVJDRT0yIC1Xbm8tc2lnbi1jb21wYXJlCistTERGID0gLVdsLC0tYXMtbmVlZGVkIGBwa2ctY29uZmlnIC0tbGlicyBnbGliLTIuMGAgICAtbG5jdXJzZXN3IAorK0xERiA9IC1XbCwtLWFzLW5lZWRlZCBgcGtnLWNvbmZpZyAtLWxpYnMgZ2xpYi0yLjBgICAgLWxuY3Vyc2VzCisrQ0MgPz0gZ2NjCisgCisgT0JKUz0gbGF0ZW5jeXRvcC5vIHRleHRfZGlzcGxheS5vIHRyYW5zbGF0ZS5vIGZzeW5jLm8KKyAKK0BAIC0yNiwxNiArMjcsMTcgQEAgZW5kaWYKKyAKKyAjIFdlIHdyaXRlIGV4cGxpY2l0eSB0aGlzICJpbXBsaWNpdCBydWxlIgorICUubyA6ICUuYworLQlnY2MgLWMgJChDRkxBR1MpICQoWENGTEFHUykgJDwgLW8gJEAKKysJJChDQykgLWMgJChDRkxBR1MpICQoWENGTEFHUykgJDwgLW8gJEAKKyAKKyBsYXRlbmN5dG9wOiAgJChPQkpTKSBsYXRlbmN5dG9wLmggTWFrZWZpbGUKKy0JZ2NjICQoQ0ZMQUdTKSAkKE9CSlMpICQoTERGKSAtbyBsYXRlbmN5dG9wIAorKwkkKENDKSAkKENGTEFHUykgJChPQkpTKSAkKExERikgLW8gbGF0ZW5jeXRvcAorIAorIGNsZWFuOgorIAlybSAtZiAqfiBsYXRlbmN5dG9wIERFQURKT0UgKi5vCisgCisgaW5zdGFsbDogbGF0ZW5jeXRvcAorIAlta2RpciAtcCAkKERFU1RESVIpL3Vzci9zaGFyZS9sYXRlbmN5dG9wCisrCW1rZGlyIC1wICQoREVTVERJUikvJChTQklORElSKQorIAlpbnN0YWxsIC1tIDA2NDQgbGF0ZW5jeXRvcC50cmFucyAkKERFU1RESVIpL3Vzci9zaGFyZS9sYXRlbmN5dG9wL2xhdGVuY3l0b3AudHJhbnMKKyAJaW5zdGFsbCAtbSAwNjQ0ICoucG5nICQoREVTVERJUikvdXNyL3NoYXJlL2xhdGVuY3l0b3AvCisgCWluc3RhbGwgLW0gMDc1NSBsYXRlbmN5dG9wICQoREVTVERJUikkKFNCSU5ESVIpLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcF8wLjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wXzAuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzFmMWJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcF8wLjUuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJMaW51eCB0b29sIGZvciBtZWFzdXJpbmcgYW5kIGZpeGluZyBsYXRlbmN5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5sYXRlbmN5dG9wLm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9sYXRlbmN5dG9wLmM7ZW5kbGluZT0yMzttZDU9ZWU5ZWE5YjE0MTUzNTZlNTczNGFkYWQ0YTg3ZGM3ZmEiCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJpbnRsIG5jdXJzZXMgZ2xpYi0yLjAiCisKK1BSID0gInIzIgorCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL3JlcG8vcGtncy8ke0JQTn0vJHtCUH0udGFyLmd6LzczYmIzMzcxYzZlZTBiMGU2OGUyNTI4OTAyN2U4NjVjLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgICBmaWxlOi8vbGF0ZW5jeXRvcC1tYWtlZmlsZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbGF0ZW5jeXRvcC1mc3luYy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1SZWN0aWZ5LXRoZS1mdW5jdGlvbi1zaWduYXR1cmVzLXRvLWZpeC1wcm90b3R5cGUtbWlzLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjczYmIzMzcxYzZlZTBiMGU2OGUyNTI4OTAyN2U4NjVjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjllN2Y3MmZiZWE3YmQ5MThlNzEyMTJhMWVhYmFhZDg0ODhkMmM2MDIyMDVkMmUzYzk1ZDYyY2Q1N2U5MjAzZWYiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IgorCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLCxndGsrIgorCitFWFRSQV9PRU1BS0VfWCA9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd4MTEnLCAnSEFTX0dUS19HVUk9MScsICcnLCBkKX0iCisKKyNDRkxBR1MgKz0gIiR7TERGTEFHU30iCisKK2RvX2luc3RhbGwoKSB7CisgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSAke0VYVFJBX09FTUFLRV9YfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpYnBmbS9maWxlcy8wMDAxLU1ha2VmaWxlLUFkZC1MREZMQUdTLXZhcmlhYmxlLXRvLVNMREZMQUdTLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpYnBmbS9maWxlcy8wMDAxLU1ha2VmaWxlLUFkZC1MREZMQUdTLXZhcmlhYmxlLXRvLVNMREZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OWE3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2ZpbGVzLzAwMDEtTWFrZWZpbGUtQWRkLUxERkxBR1MtdmFyaWFibGUtdG8tU0xERkxBR1MucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAyNzJhOGEwNjlhOGY1ZjA2YTFlNWRmYTBlZjEyZjVmOTI5ODQ3MjhiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTm9vciA8bm9vcl9haHNhbkBtZW50b3IuY29tPgorRGF0ZTogV2VkLCAxMiBBdWcgMjAxNSAyMDo1NDowMCArMDUwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZTogQWRkIExERkxBR1MgdmFyaWFibGUgdG8gU0xERkxBR1MuCisKKyogQWRkIExERkxBR1MgdmFyaWFibGUgdG8gU0xERkxBR1Mgc28gdGhhdCBleHRyYSBsaW5rZXIKKyAgZmxhZ3MgY2FuIGJlIHNlbnQgdmlhIHRoaXMgdmFyaWFibGUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtwZXJmbW9uMi1saWJwZm00LWNvbW1pdHNAbGlzdHMuc291cmNlZm9yZ2UubmV0XQorCitTaWduZWQtb2ZmLWJ5OiBOb29yIEFoc2FuIDxub29yX2Foc2FuQG1lbnRvci5jb20+CistLS0KKyBsaWIvTWFrZWZpbGUgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKK2luZGV4IDFjYzg3NjUuLjRiZDkyZWYgMTAwNjQ0CistLS0gYS9saWIvTWFrZWZpbGUKKysrKyBiL2xpYi9NYWtlZmlsZQorQEAgLTE4Nyw3ICsxODcsNyBAQCBDRkxBR1MgKz0gLURDT05GSUdfUEZNTElCX0NFTEwKKyBlbmRpZgorIAorIGlmZXEgKCQoU1lTKSxMaW51eCkKKy1TTERGTEFHUz0tc2hhcmVkIC1XbCwtc29uYW1lIC1XbCwkKFZMSUJQRk0pCisrU0xERkxBR1M9JChMREZMQUdTKSAtc2hhcmVkIC1XbCwtc29uYW1lIC1XbCwkKFZMSUJQRk0pCisgU0xJQlBGTT1saWJwZm0uc28uJChWRVJTSU9OKS4kKFJFVklTSU9OKS4kKEFHRSkKKyBWTElCUEZNPWxpYnBmbS5zby4kKFZFUlNJT04pCisgU09MSUJFWFQ9c28KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2xpYnBmbTRfNC42LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2xpYnBmbTRfNC42LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRmZGE5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vbGlicGZtNF80LjYuMC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIk1vbml0b3JpbmcgdG9vbHMgZXhwbG9pdGluZyB0aGUgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBldmVudHMiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgYSBsaWJyYXJ5LCBjYWxsZWQgbGlicGZtNCB3aGljaCBpcyB1c2VkIHRvIGRldmVsb3AgXAorbW9uaXRvcmluZyB0b29scyBleHBsb2l0aW5nIHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGV2ZW50cyBzdWNoIGFzIHRob3NlIFwKK3Byb3ZpZGVkIGJ5IHRoZSBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIFVuaXQgKFBNVSkgb2YgbW9kZXJuIHByb2Nlc3NvcnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3BlcmZtb24yLnNvdXJjZWZvcmdlLm5ldC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTQ0ODIyJmF0aWQ9NzU5OTUzJnNvdXJjZT1uYXZiYXIiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MGRlNDg4ZjNiZDQ0MjRlMzA4ZTJlMzk5Y2I5OWM3ODgiCisKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK0NPTVBBVElCTEVfSE9TVCA9ICJwb3dlcnBjNjQiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9wZXJmbW9uMi8ke0JQTn0vbGlicGZtLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLU1ha2VmaWxlLUFkZC1MREZMQUdTLXZhcmlhYmxlLXRvLVNMREZMQUdTLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MDc3YjkwMjI0NDBlNDk1MWQ5NmYyZDBlNzNiZDQ4NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1YWIxZTViMDQ3MjU1MGY5MDM3YTg4MDA4MzRmNmJjM2I5Mjc2OTAwNzBmNjlmYWMwYjY3Mjg0YjRiMDVmZDVmIgorCitFWFRSQV9PRU1BS0UgPSAiREVTVERJUj1cIiR7RH1cIiBQUkVGSVg9XCIke3ByZWZpeH1cIiBMSUJESVI9XCIke2xpYmRpcn1cIiBMRENPTkZJRz1cInRydWVcIiIKK0VYVFJBX09FTUFLRV9hcHBlbmRfcG93ZXJwYyA9ICIgQVJDSD1cInBvd2VycGNcIiIKK0VYVFJBX09FTUFLRV9hcHBlbmRfcG93ZXJwYzY0ID0gIiBBUkNIPVwicG93ZXJwY1wiIEJJVE1PREU9XCI2NFwiIgorCitTID0gIiR7V09SS0RJUn0vbGlicGZtLSR7UFZ9IgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1maXJtd2FyZS9saW51eC1maXJtd2FyZV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtZmlybXdhcmUvbGludXgtZmlybXdhcmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmODExN2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtZmlybXdhcmUvbGludXgtZmlybXdhcmVfZ2l0LmJiCkBAIC0wLDAgKzEsNDMzIEBACitTVU1NQVJZID0gIkZpcm13YXJlIGZpbGVzIGZvciB1c2Ugd2l0aCBMaW51eCBrZXJuZWwiCitTRUNUSU9OID0gImtlcm5lbCIKKworTElDRU5TRSA9ICJcCisgICAgRmlybXdhcmUtQWJpbGlzIFwKKyAgICAmIEZpcm13YXJlLWFnZXJlIFwKKyAgICAmIEZpcm13YXJlLWFtZC11Y29kZSBcCisgICAgJiBGaXJtd2FyZS1hdGhlcm9zX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLWJyb2FkY29tX2JjbTQzeHggXAorICAgICYgRmlybXdhcmUtY2EwMTMyIFwKKyAgICAmIEZpcm13YXJlLWNoZWxzaW9fZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtY3cxMjAwIFwKKyAgICAmIEZpcm13YXJlLWRpYjA3MDAgXAorICAgICYgRmlybXdhcmUtZW5lX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLWZ3X3NzdF8wZjI4IFwKKyAgICAmIEZpcm13YXJlLWdvNzAwNyBcCisgICAgJiBGaXJtd2FyZS1pMjQwMG0gXAorICAgICYgRmlybXdhcmUtaWJ0X2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLWl0OTEzeCBcCisgICAgJiBGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLUludGNTU1QyIFwKKyAgICAmIEZpcm13YXJlLU1hcnZlbGwgXAorICAgICYgRmlybXdhcmUtbXdsODMzNSBcCisgICAgJiBGaXJtd2FyZS1teXJpMTBnZV9maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1PTFBDIFwKKyAgICAmIEZpcm13YXJlLXBoYW5mdyBcCisgICAgJiBGaXJtd2FyZS1xYXRfZGg4OTV4Y2NfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtcWxhMnh4eCBcCisgICAgJiBGaXJtd2FyZS1yOGE3Nzl4X3VzYjMgXAorICAgICYgRmlybXdhcmUtcmFkZW9uIFwKKyAgICAmIEZpcm13YXJlLXJhbGlua19hX21lZGlhdGVrX2NvbXBhbnlfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtcmFsaW5rLWZpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLXJ0bHdpZmlfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtdGRhNzcwNi1maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS10aS1jb25uZWN0aXZpdHkgXAorICAgICYgRmlybXdhcmUtdWVhZ2xlLWF0bTQtZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtdmlhX3Z0NjY1NiBcCisgICAgJiBGaXJtd2FyZS13bDEyNTEgXAorICAgICYgRmlybXdhcmUteGM0MDAwIFwKKyAgICAmIEZpcm13YXJlLXhjNTAwMCBcCisgICAgJiBGaXJtd2FyZS14YzUwMDBjIFwKKyAgICAmIEZpcm13YXJlLXNpYW5vIFwKKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgZmlsZTovL0xJQ0VOQ0UuQWJpbGlzO21kNT1iNWVlM2Y0MTA3ODBlNTY3MTFhZDQ4ZWFkYzIyYjhiYyBcCisgICAgZmlsZTovL0xJQ0VOQ0UuYWdlcmU7bWQ1PWFmMDEzM2RlNmI0YTliMjUyMmRlZmQ1ZjE4OGFmZDMxIFwKKyAgICBmaWxlOi8vTElDRU5DRS5hdGhlcm9zX2Zpcm13YXJlO21kNT0zMGExNGM3ODIzYmVlZGFjOWZhMzljNjRmZGQwMWExMyBcCisgICAgZmlsZTovL0xJQ0VOQ0UuYnJvYWRjb21fYmNtNDN4eDttZDU9MzE2MGMxNGRmNzIyODg5MWI4NjgwNjBlMTk1MWRmYmMgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmNhMDEzMjttZDU9MjA5YjMzZTY2ZWU1YmUwNDYxZjEzZDMxZGEzOTIxOTggXAorICAgIGZpbGU6Ly9MSUNFTkNFLmNoZWxzaW9fZmlybXdhcmU7bWQ1PTgxOWFhOGMzZmE0NTNmMWIyNThlZDhkMTY4YTlkOTAzIFwKKyAgICBmaWxlOi8vTElDRU5DRS5jdzEyMDA7bWQ1PWYwZjc3MDg2NGU3YTg0NDRhNWM1YWE5ZDEyYTNhN2VkIFwKKyAgICBmaWxlOi8vTElDRU5DRS5lbmVfZmlybXdhcmU7bWQ1PWVkNjdmMGY2MmY4Zjc5ODEzMGMyOTY3MjBiN2QzOTIxIFwKKyAgICBmaWxlOi8vTElDRU5DRS5md19zc3RfMGYyODttZDU9NjM1MzkzMWM5ODhhZDUyODE4YWU3MzNhYzYxY2QyOTMgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmdvNzAwNzttZDU9YzBiYjlmNmFhYWJhNTViMDUyOWVlOWIzMGFhNjZiZWIgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmkyNDAwbTttZDU9MTRiOTAxOTY5ZTIzYzQxODgxMzI3YzBkOWU0YjdkMzYgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmlidF9maXJtd2FyZTttZDU9ZmRiZWUxZGRmZTBmYjdhYjBiMmZjZDZiNDU0YTM2NmIgXAorICAgIGZpbGU6Ly9MSUNFTkNFLml0OTEzeDttZDU9MWZiZjcyN2JmYjZhOTQ5ODEwYzRkYmZhN2U2Y2U0ZjggXAorICAgIGZpbGU6Ly9MSUNFTkNFLml3bHdpZmlfZmlybXdhcmU7bWQ1PTNmZDg0MjkxMWVhOTNjMjljZDMyNjc5YWEyM2UxYzg4IFwKKyAgICBmaWxlOi8vTElDRU5DRS5JbnRjU1NUMjttZDU9OWU3ZDhiZWE3NzYxMmQ3Y2M3ZDllOWI1NGI2MjMwNjIgXAorICAgIGZpbGU6Ly9MSUNFTkNFLk1hcnZlbGw7bWQ1PTlkZGVhMTczNGE0YmFmM2M3OGQ4NDUxNTFmNDJhMzdhIFwKKyAgICBmaWxlOi8vTElDRU5DRS5td2w4MzM1O21kNT05YTYyNzFlZTBlNjQ0NDA0YjJmZjNjNjFmZDA3MDk4MyBcCisgICAgZmlsZTovL0xJQ0VOQ0UubXlyaTEwZ2VfZmlybXdhcmU7bWQ1PTQyZTMyZmI4OWY2Yjk1OWNhMjIyZTI1YWM4ZGY4ZmVkIFwKKyAgICBmaWxlOi8vTElDRU5DRS5PTFBDO21kNT01YjkxN2Y5ZDhjMDYxOTkxYmU0ZjZmNWYxMDg3MTljZCBcCisgICAgZmlsZTovL0xJQ0VOQ0UucGhhbmZ3O21kNT05NTRkY2VjMGUwNTFmOTQwOTgxMmI1NjFlYTc0M2JmYSBcCisgICAgZmlsZTovL0xJQ0VOQ0UucWF0X2RoODk1eGNjX2Zpcm13YXJlO21kNT05ZTdkOGJlYTc3NjEyZDdjYzdkOWU5YjU0YjYyMzA2MiBcCisgICAgZmlsZTovL0xJQ0VOQ0UucWxhMnh4eDttZDU9ZjVjZTg1MjllYzVjMTdjYjdmOTExZDI3MjFkOTBlOTEgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnI4YTc3OXhfdXNiMzttZDU9NGMxNjcxNjU2MTUzMDI1ZDcwNzYxMDVhNWRhN2U0OTggXAorICAgIGZpbGU6Ly9MSUNFTkNFLnJhbGlua19hX21lZGlhdGVrX2NvbXBhbnlfZmlybXdhcmU7bWQ1PTcyOGYxYTg1ZmQ1M2ZkNjdmYThkN2FmYjA4MGJjNDM1IFwKKyAgICBmaWxlOi8vTElDRU5DRS5yYWxpbmstZmlybXdhcmUudHh0O21kNT1hYjJjMjY5Mjc3YzQ1NDc2ZmI0NDk2NzM5MTFhMmRmZCBcCisgICAgZmlsZTovL0xJQ0VOQ0UucnRsd2lmaV9maXJtd2FyZS50eHQ7bWQ1PTAwZDA2Y2ZkM2VkZGQ1YTI2OTg5NDhlYWQyYWQ1NGE1IFwKKyAgICBmaWxlOi8vTElDRU5DRS50ZGE3NzA2LWZpcm13YXJlLnR4dDttZDU9ODM1OTk3Y2Y1ZTNjMTMxZDBkZGRkNjk1YzdkOTEwM2UgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnRpLWNvbm5lY3Rpdml0eTttZDU9MTg2ZTdhNDNjZjZjMjc0MjgzYWQ4MTI3MmNhMjE4ZWEgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnVlYWdsZS1hdG00LWZpcm13YXJlO21kNT00ZWQ3ZWE2YjUwN2NjYzU4M2I5ZDU5NDQxNzcxNDExOCBcCisgICAgZmlsZTovL0xJQ0VOQ0UudmlhX3Z0NjY1NjttZDU9ZTQxNTk2OTRjYmE0MmQ0Mzc3YTkxMmU3OGE2ZTg1MGYgXAorICAgIGZpbGU6Ly9MSUNFTkNFLndsMTI1MTttZDU9YWQzZjgxOTIyYmI5ZTE5NzAxNGJiMTg3Mjg5ZDNiNWIgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnhjNDAwMDttZDU9MGZmNTFkMmRjNDlmY2UwNDgxNGM5MTU1MDgxMDkyZjAgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnhjNTAwMDttZDU9MWUxNzBjMTMxNzUzMjNjMzJjN2Y0ZDA5OThkNTNmNjYgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnhjNTAwMGM7bWQ1PTEyYjAyZWZhMzA0OWRiNjVkNTI0YWViNDE4ZGQ4N2NhIFwKKyAgICBmaWxlOi8vTElDRU5TRS5hbWQtdWNvZGU7bWQ1PTNhMGRlNDUxMjUzY2MxZWRiZjMwYTNjNjIxZWZmZWUzIFwKKyAgICBmaWxlOi8vTElDRU5TRS5kaWIwNzAwO21kNT1mNzQxMTgyNWM4YTU1NWExYTNlNWVhYjljYTc3MzQzMSBcCisgICAgZmlsZTovL0xJQ0VOU0UucmFkZW9uO21kNT02YzdmOTdjNmM2MmJkZDk1OTZkMDIzOGJiMjA1MTE4YyBcCisgICAgZmlsZTovL0xJQ0VOQ0Uuc2lhbm87bWQ1PTYwMmM3OWFlM2Y5OGYxZTczZDg4MGZkOWY5NDBhNDE4IFwKKyIKKworIyBUaGVzZSBhcmUgbm90IGNvbW1vbiBsaWNlbnNlcywgc2V0IE5PX0dFTkVSSUNfTElDRU5TRSBmb3IgdGhlbQorIyBzbyB0aGF0IHRoZSBsaWNlbnNlIGZpbGVzIHdpbGwgYmUgY29waWVkIGZyb20gZmV0Y2hlZCBzb3VyY2UKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1BYmlsaXNdID0gIkxJQ0VOQ0UuQWJpbGlzIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWFnZXJlXSA9ICJMSUNFTkNFLmFnZXJlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWF0aGVyb3NfZmlybXdhcmVdID0gIkxJQ0VOQ0UuYXRoZXJvc19maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1icm9hZGNvbV9iY200M3h4XSA9ICJMSUNFTkNFLmJyb2FkY29tX2JjbTQzeHgiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtY2EwMTMyXSA9ICJMSUNFTkNFLmNhMDEzMiIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1jaGVsc2lvX2Zpcm13YXJlXSA9ICJMSUNFTkNFLmNoZWxzaW9fZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtY3cxMjAwXSA9ICJMSUNFTkNFLmN3MTIwMCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1lbmVfZmlybXdhcmVdID0gIkxJQ0VOQ0UuZW5lX2Zpcm13YXJlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWZ3X3NzdF8wZjI4XSA9ICJMSUNFTkNFLmZ3X3NzdF8wZjI4IgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWdvNzAwN10gPSAiTElDRU5DRS5nbzcwMDciCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtaTI0MDBtXSA9ICJMSUNFTkNFLmkyNDAwbSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1pYnRfZmlybXdhcmVdID0gIkxJQ0VOQ0UuaWJ0X2Zpcm13YXJlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWl0OTEzeF0gPSAiTElDRU5DRS5pdDkxM3giCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZV0gPSAiTElDRU5DRS5pd2x3aWZpX2Zpcm13YXJlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLUludGNTU1QyXSA9ICJMSUNFTkNFLkludGNTU1QyIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLU1hcnZlbGxdID0gIkxJQ0VOQ0UuTWFydmVsbCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1td2w4MzM1XSA9ICJMSUNFTkNFLm13bDgzMzUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtbXlyaTEwZ2VfZmlybXdhcmVdID0gIkxJQ0VOQ0UubXlyaTEwZ2VfZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtT0xQQ10gPSAiTElDRU5DRS5PTFBDIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXBoYW5md10gPSAiTElDRU5DRS5waGFuZnciCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtcWF0X2RoODk1eGNjX2Zpcm13YXJlXSA9ICJMSUNFTkNFLnFhdF9kaDg5NXhjY19maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1xbGEyeHh4XSA9ICJMSUNFTkNFLnFsYTJ4eHgiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtcjhhNzc5eF91c2IzXSA9ICJMSUNFTkNFLnI4YTc3OXhfdXNiMyIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1yYWxpbmtfYV9tZWRpYXRla19jb21wYW55X2Zpcm13YXJlXSA9ICJMSUNFTkNFLnJhbGlua19hX21lZGlhdGVrX2NvbXBhbnlfZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtcmFsaW5rLWZpcm13YXJlXSA9ICJMSUNFTkNFLnJhbGluay1maXJtd2FyZS50eHQiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtcnRsd2lmaV9maXJtd2FyZV0gPSAiTElDRU5DRS5ydGx3aWZpX2Zpcm13YXJlLnR4dCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS10ZGE3NzA2LWZpcm13YXJlXSA9ICJMSUNFTkNFLnRkYTc3MDYtZmlybXdhcmUudHh0IgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXRpLWNvbm5lY3Rpdml0eV0gPSAiTElDRU5DRS50aS1jb25uZWN0aXZpdHkiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtdWVhZ2xlLWF0bTQtZmlybXdhcmVdID0gIkxJQ0VOQ0UudWVhZ2xlLWF0bTQtZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtdmlhX3Z0NjY1Nl0gPSAiTElDRU5DRS52aWFfdnQ2NjU2IgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXdsMTI1MV0gPSAiTElDRU5DRS53bDEyNTEiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUteGM0MDAwXSA9ICJMSUNFTkNFLnhjNDAwMCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS14YzUwMDBdID0gIkxJQ0VOQ0UueGM1MDAwIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXhjNTAwMGNdID0gIkxJQ0VOQ0UueGM1MDAwYyIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1hbWQtdWNvZGVdID0gIkxJQ0VOU0UuYW1kLXVjb2RlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWRpYjA3MDBdID0gIkxJQ0VOU0UuZGliMDcwMCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1yYWRlb25dID0gIkxJQ0VOU0UucmFkZW9uIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXNpYW5vXSA9ICJMSUNFTkNFLnNpYW5vIgorCitTUkNSRVYgPSAiNzVjYzNlZjhiYTY3MTJmZDcyYzA3M2IxN2E3OTAyODIxMzZjYzc0MyIKK1BFID0gIjEiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2Zpcm13YXJlL2xpbnV4LWZpcm13YXJlLmdpdCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhbGxhcmNoIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworZG9fY29tcGlsZSgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAgJHtEfS9saWIvZmlybXdhcmUvCisJY3AgLXIgKiAke0R9L2xpYi9maXJtd2FyZS8KKworCSMgQXZvaWQgTWFrZWZpbGUgdG8gYmUgZGVwbG95ZWQKKwlybSAke0R9L2xpYi9maXJtd2FyZS9NYWtlZmlsZQorCisJIyBSZW1vdmUgdW5idWlsZCBmaXJtd2FyZSB3aGljaCBuZWVkcyBjbWFrZSBhbmQgYmFzaAorCXJtICR7RH0vbGliL2Zpcm13YXJlL2Nhcmw5MTcwZncgLXJmCisKKwkjIFJlbW92ZSBwb2ludGxlc3MgYmFzaCBzY3JpcHQKKwlybSAke0R9L2xpYi9maXJtd2FyZS9jb25maWd1cmUKKworCSMgTGliZXJ0YXMgc2Q4Njg2CisJbG4gLXNmIGxpYmVydGFzL3NkODY4Nl92OS5iaW4gJHtEfS9saWIvZmlybXdhcmUvc2Q4Njg2LmJpbgorCWxuIC1zZiBsaWJlcnRhcy9zZDg2ODZfdjlfaGVscGVyLmJpbiAke0R9L2xpYi9maXJtd2FyZS9zZDg2ODZfaGVscGVyLmJpbgorCisJIyBmaXh1cCB3bDEyeHggbG9jYXRpb24sIGFmdGVyIDIuNi4zNyB0aGUga2VybmVsIHNlYXJjaGVzIGEgZGlmZmVyZW50IGxvY2F0aW9uIGZvciBpdAorCSggY2QgJHtEfS9saWIvZmlybXdhcmUgOyBsbiAtc2YgdGktY29ubmVjdGl2aXR5LyogLiApCit9CisKKworUEFDS0FHRVMgPSsgIiR7UE59LXJhbGluay1saWNlbnNlICR7UE59LXJhbGluayBcCisgICAgICAgICAgICAgJHtQTn0tcmFkZW9uLWxpY2Vuc2UgJHtQTn0tcmFkZW9uIFwKKyAgICAgICAgICAgICAke1BOfS1tYXJ2ZWxsLWxpY2Vuc2UgJHtQTn0tc2Q4Njg2ICR7UE59LXNkODc4NyAke1BOfS1zZDg3OTcgXAorICAgICAgICAgICAgICR7UE59LXRpLWNvbm5lY3Rpdml0eS1saWNlbnNlICR7UE59LXdsMTJ4eCAke1BOfS13bDE4eHggXAorICAgICAgICAgICAgICR7UE59LXZ0NjY1Ni1saWNlbnNlICR7UE59LXZ0NjY1NiBcCisgICAgICAgICAgICAgJHtQTn0tcnRsLWxpY2Vuc2UgJHtQTn0tcnRsODE5MmN1ICR7UE59LXJ0bDgxOTJjZSAke1BOfS1ydGw4MTkyc3UgXAorICAgICAgICAgICAgICR7UE59LWJyb2FkY29tLWxpY2Vuc2UgJHtQTn0tYmNtNDMyOSAke1BOfS1iY200MzMwICR7UE59LWJjbTQzMzQgXAorICAgICAgICAgICAgICR7UE59LWF0aGVyb3MtbGljZW5zZSAke1BOfS1hcjkxNzAgJHtQTn0tYXIzayAke1BOfS1hdGg2ayAke1BOfS1hdGg5ayBcCisgICAgICAgICAgICAgXAorICAgICAgICAgICAgICR7UE59LWl3bHdpZmktbGljZW5zZSAke1BOfS1pd2x3aWZpLTEzNS02IFwKKyAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLTMxNjAtNyAke1BOfS1pd2x3aWZpLTMxNjAtOCAke1BOfS1pd2x3aWZpLTMxNjAtOSBcCisgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS02MDAwLTQgJHtQTn0taXdsd2lmaS02MDAwZzJhLTUgJHtQTn0taXdsd2lmaS02MDAwZzJhLTYgXAorICAgICAgICAgICAgICR7UE59LWl3bHdpZmktNjAwMGcyYi01ICR7UE59LWl3bHdpZmktNjAwMGcyYi02IFwKKyAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLTYwNTAtNCAke1BOfS1pd2x3aWZpLTYwNTAtNSBcCisgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS03MjYwLTcgJHtQTn0taXdsd2lmaS03MjYwLTggJHtQTn0taXdsd2lmaS03MjYwLTkgXAorICAgICAgICAgICAgICR7UE59LWl3bHdpZmktNzI2NS04ICR7UE59LWl3bHdpZmktNzI2NS05IFwKKyAgICAgICAgICAgICBcCisgICAgICAgICAgICAgJHtQTn0tbGljZW5zZSBcCisgICAgICAgICAgICAgIgorCisjIEZvciBhdGhlcm9zCitMSUNFTlNFXyR7UE59LWFyOTE3MCA9ICJGaXJtd2FyZS1hdGhlcm9zX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1hcjNrID0gIkZpcm13YXJlLWF0aGVyb3NfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWF0aDZrID0gIkZpcm13YXJlLWF0aGVyb3NfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWF0aDlrID0gIkZpcm13YXJlLWF0aGVyb3NfZmlybXdhcmUiCisKK0ZJTEVTXyR7UE59LWF0aGVyb3MtbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOQ0UuYXRoZXJvc19maXJtd2FyZSIKK0ZJTEVTXyR7UE59LWFyOTE3MCA9ICIgXAorICAvbGliL2Zpcm13YXJlL2FyOTE3MCouZncgXAorIgorRklMRVNfJHtQTn0tYXIzayA9ICIgXAorICAvbGliL2Zpcm13YXJlL2FyM2sgXAorIgorRklMRVNfJHtQTn0tYXRoNmsgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9hdGg2ayBcCisiCitGSUxFU18ke1BOfS1hdGg5ayA9ICIgXAorICAvbGliL2Zpcm13YXJlL2FyOTI3MS5mdyBcCisgIC9saWIvZmlybXdhcmUvYXI3MDEwKi5mdyBcCisgIC9saWIvZmlybXdhcmUvaHRjXzkyNzEuZncgXAorICAvbGliL2Zpcm13YXJlL2h0Y183MDEwLmZ3IFwKKyIKKworUkRFUEVORFNfJHtQTn0tYXI5MTcwICs9ICIke1BOfS1hdGhlcm9zLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1hcjNrICs9ICIke1BOfS1hdGhlcm9zLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1hdGg2ayArPSAiJHtQTn0tYXRoZXJvcy1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tYXRoOWsgKz0gIiR7UE59LWF0aGVyb3MtbGljZW5zZSIKKworIyBGb3IgcmFsaW5rCitMSUNFTlNFXyR7UE59LXJhbGluayA9ICJGaXJtd2FyZS1yYWxpbmstZmlybXdhcmUiCisKK0ZJTEVTXyR7UE59LXJhbGluay1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5DRS5yYWxpbmstZmlybXdhcmUudHh0IgorRklMRVNfJHtQTn0tcmFsaW5rID0gIiBcCisgIC9saWIvZmlybXdhcmUvcnQqLmJpbiBcCisiCisKK1JERVBFTkRTXyR7UE59LXJhbGluayArPSAiJHtQTn0tcmFsaW5rLWxpY2Vuc2UiCisKKyMgRm9yIHJhZGVvbgorTElDRU5TRV8ke1BOfS1yYWRlb24gPSAiRmlybXdhcmUtcmFkZW9uIgorCitGSUxFU18ke1BOfS1yYWRlb24tbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOU0UucmFkZW9uIgorRklMRVNfJHtQTn0tcmFkZW9uID0gIiBcCisgIC9saWIvZmlybXdhcmUvcmFkZW9uIFwKKyIKKworUkRFUEVORFNfJHtQTn0tcmFkZW9uICs9ICIke1BOfS1yYWRlb24tbGljZW5zZSIKKworIyBGb3IgbWFydmVsbAorTElDRU5TRV8ke1BOfS1zZDg2ODYgPSAiRmlybXdhcmUtTWFydmVsbCIKK0xJQ0VOU0VfJHtQTn0tc2Q4Nzg3ID0gIkZpcm13YXJlLU1hcnZlbGwiCitMSUNFTlNFXyR7UE59LXNkODc5NyA9ICJGaXJtd2FyZS1NYXJ2ZWxsIgorCitGSUxFU18ke1BOfS1tYXJ2ZWxsLWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLk1hcnZlbGwiCitGSUxFU18ke1BOfS1zZDg2ODYgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9saWJlcnRhcy9zZDg2ODZfdjkqIFwKKyAgL2xpYi9maXJtd2FyZS9zZDg2ODYqIFwKKyIKK0ZJTEVTXyR7UE59LXNkODc4NyA9ICIgXAorICAvbGliL2Zpcm13YXJlL21ydmwvc2Q4Nzg3X3VhcHN0YS5iaW4gXAorIgorRklMRVNfJHtQTn0tc2Q4Nzk3ID0gIiBcCisgIC9saWIvZmlybXdhcmUvbXJ2bC9zZDg3OTdfdWFwc3RhLmJpbiBcCisiCisKK1JERVBFTkRTXyR7UE59LXNkODY4NiArPSAiJHtQTn0tbWFydmVsbC1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tc2Q4Nzg3ICs9ICIke1BOfS1tYXJ2ZWxsLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1zZDg3OTcgKz0gIiR7UE59LW1hcnZlbGwtbGljZW5zZSIKKworIyBGb3IgcnRsCitMSUNFTlNFXyR7UE59LXJ0bDgxOTJjdSA9ICJGaXJtd2FyZS1ydGx3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1ydGw4MTkyY2UgPSAiRmlybXdhcmUtcnRsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0tcnRsODE5MnN1ID0gIkZpcm13YXJlLXJ0bHdpZmlfZmlybXdhcmUiCisKK0ZJTEVTXyR7UE59LXJ0bC1saWNlbnNlID0gIiBcCisgIC9saWIvZmlybXdhcmUvTElDRU5DRS5ydGx3aWZpX2Zpcm13YXJlLnR4dCBcCisiCitGSUxFU18ke1BOfS1ydGw4MTkyY3UgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9ydGx3aWZpL3J0bDgxOTJjdWZ3LmJpbiBcCisiCitGSUxFU18ke1BOfS1ydGw4MTkyY2UgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9ydGx3aWZpL3J0bDgxOTJjZncuYmluIFwKKyIKK0ZJTEVTXyR7UE59LXJ0bDgxOTJzdSA9ICIgXAorICAvbGliL2Zpcm13YXJlL3J0bHdpZmkvcnRsODcxMnUuYmluIFwKKyIKKworUkRFUEVORFNfJHtQTn0tcnRsODE5MmNlICs9ICIke1BOfS1ydGwtbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LXJ0bDgxOTJjdSArPSAiJHtQTn0tcnRsLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1ydGw4MTkyc3UgPSAiJHtQTn0tcnRsLWxpY2Vuc2UiCisKKyMgRm9yIHRpLWNvbm5lY3Rpdml0eQorTElDRU5TRV8ke1BOfS13bDEyeHggPSAiRmlybXdhcmUtdGktY29ubmVjdGl2aXR5IgorTElDRU5TRV8ke1BOfS13bDE4eHggPSAiRmlybXdhcmUtdGktY29ubmVjdGl2aXR5IgorCitGSUxFU18ke1BOfS10aS1jb25uZWN0aXZpdHktbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOQ0UudGktY29ubmVjdGl2aXR5IgorRklMRVNfJHtQTn0td2wxMnh4ID0gIiBcCisgIC9saWIvZmlybXdhcmUvd2wxMiogXAorICAvbGliL2Zpcm13YXJlL1RJKiBcCisgIC9saWIvZmlybXdhcmUvdGktY29ubmVjdGl2aXR5IFwKKyIKK0ZJTEVTXyR7UE59LXdsMTh4eCA9ICIgXAorICAvbGliL2Zpcm13YXJlL3dsMTgqIFwKKyAgL2xpYi9maXJtd2FyZS9USSogXAorICAvbGliL2Zpcm13YXJlL3RpLWNvbm5lY3Rpdml0eSBcCisiCisKK1JERVBFTkRTXyR7UE59LXdsMTJ4eCA9ICIke1BOfS10aS1jb25uZWN0aXZpdHktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LXdsMTh4eCA9ICIke1BOfS10aS1jb25uZWN0aXZpdHktbGljZW5zZSIKKworIyBGb3IgdnQ2NjU2CitMSUNFTlNFXyR7UE59LXZ0NjY1NiA9ICJGaXJtd2FyZS12aWFfdnQ2NjU2IgorCitGSUxFU18ke1BOfS12dDY2NTYtbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOQ0UudmlhX3Z0NjY1NiIKK0ZJTEVTXyR7UE59LXZ0NjY1NiA9ICIgXAorICAvbGliL2Zpcm13YXJlL3ZudHd1c2IuZncgXAorIgorCitSREVQRU5EU18ke1BOfS12dDY2NTYgPSAiJHtQTn0tdnQ2NjU2LWxpY2Vuc2UiCisKKyMgRm9yIGJyb2FkY29tCisjCisjIFdBUk5JTkc6IFRoZSBBTFRFUk5BVElWRV8qIHZhcmlhYmxlcyBhcmUgbm90IHVzaW5nICR7UE59IGJlY2F1c2Ugb2YKKyMgYSBidWcgaW4gYml0YmFrZTsgd2hlbiB0aGlzIGlzIGZpeGVkIGFuZCBiaXRiYWtlIGxlYXJucyBob3cgdG8gcHJvcGVyCisjIHBhc3MgdmFyaWFibGUgZmxhZ3Mgd2l0aCBleHBhbnNpb24gd2UgY2FuIHJld29yayB0aGlzIHBhdGNoLgorCitMSUNFTlNFXyR7UE59LWJjbTQzMjkgPSAiRmlybXdhcmUtYnJvYWRjb21fYmNtNDN4eCIKK0xJQ0VOU0VfJHtQTn0tYmNtNDMzMCA9ICJGaXJtd2FyZS1icm9hZGNvbV9iY200M3h4IgorTElDRU5TRV8ke1BOfS1iY200MzM0ID0gIkZpcm13YXJlLWJyb2FkY29tX2JjbTQzeHgiCisKK0ZJTEVTXyR7UE59LWJyb2FkY29tLWxpY2Vuc2UgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9MSUNFTkNFLmJyb2FkY29tX2JjbTQzeHggXAorIgorRklMRVNfJHtQTn0tYmNtNDMyOSA9ICIgXAorICAvbGliL2Zpcm13YXJlL2JyY20vYnJjbWZtYWM0MzI5LXNkaW8uYmluIFwKKyIKK0ZJTEVTXyR7UE59LWJjbTQzMzAgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjNDMzMC1zZGlvLmJpbiBcCisiCitGSUxFU18ke1BOfS1iY200MzM0ID0gIiBcCisgIC9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYzQzMzQtc2Rpby5iaW4gXAorIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbYnJjbWZtYWMtc2Rpby5iaW5dID0gIi9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYy1zZGlvLmJpbiIKKworQUxURVJOQVRJVkVfbGludXgtZmlybXdhcmUtYmNtNDMzNCA9ICJicmNtZm1hYy1zZGlvLmJpbiIKK0FMVEVSTkFUSVZFX1RBUkdFVF9saW51eC1maXJtd2FyZS1iY200MzM0W2JyY21mbWFjLXNkaW8uYmluXSA9ICIvbGliL2Zpcm13YXJlL2JyY20vYnJjbWZtYWM0MzM0LXNkaW8uYmluIgorQUxURVJOQVRJVkVfbGludXgtZmlybXdhcmUtYmNtNDMyOSA9ICJicmNtZm1hYy1zZGlvLmJpbiIKK0FMVEVSTkFUSVZFX1RBUkdFVF9saW51eC1maXJtd2FyZS1iY200MzI5W2JyY21mbWFjLXNkaW8uYmluXSA9ICIvbGliL2Zpcm13YXJlL2JyY20vYnJjbWZtYWM0MzI5LXNkaW8uYmluIgorQUxURVJOQVRJVkVfbGludXgtZmlybXdhcmUtYmNtNDMzMCA9ICJicmNtZm1hYy1zZGlvLmJpbiIKK0FMVEVSTkFUSVZFX1RBUkdFVF9saW51eC1maXJtd2FyZS1iY200MzMwW2JyY21mbWFjLXNkaW8uYmluXSA9ICIvbGliL2Zpcm13YXJlL2JyY20vYnJjbWZtYWM0MzMwLXNkaW8uYmluIgorCitSREVQRU5EU18ke1BOfS1iY200MzI5ICs9ICIke1BOfS1icm9hZGNvbS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tYmNtNDMzMCArPSAiJHtQTn0tYnJvYWRjb20tbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWJjbTQzMzQgKz0gIiR7UE59LWJyb2FkY29tLWxpY2Vuc2UiCisKKyMgRm9yIGl3bHdpZmkKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS0xMzUtNiAgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS0zMTYwLTcgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS0zMTYwLTggICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS0zMTYwLTkgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDAwLTQgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDAwZzJhLTUgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDAwZzJhLTYgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDAwZzJhLTUgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDAwZzJiLTYgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDUwLTQgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDUwLTUgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS03MjYwLTcgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS03MjYwLTggICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS03MjYwLTkgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS03MjY1LTggICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS03MjY1LTkgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKKworRklMRVNfJHtQTn0taXdsd2lmaS1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5DRS5pd2x3aWZpX2Zpcm13YXJlIgorRklMRVNfJHtQTn0taXdsd2lmaS0xMzUtNiA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktMTM1LTYudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTMxNjAtNyA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktMzE2MC03LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS0zMTYwLTggPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTMxNjAtOC51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktMzE2MC05ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS0zMTYwLTkudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTYwMDAtNCA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNjAwMC00LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS02MDAwZzJhLTUgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTYwMDBnMmEtNS51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNjAwMGcyYS02ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS02MDAwZzJhLTYudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTYwMDBnMmItNSA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNjAwMGcyYi01LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS02MDAwZzJiLTYgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTYwMDBnMmItNi51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNjA1MC00ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS02MDUwLTQudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTYwNTAtNSA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNjA1MC01LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS03MjYwLTcgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTcyNjAtNy51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNzI2MC04ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS03MjYwLTgudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTcyNjAtOSA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNzI2MC05LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS03MjY1LTggPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTcyNjUtOC51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNzI2NS05ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS03MjY1LTkudWNvZGUiCisKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktMTM1LTYgICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktMzE2MC03ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktMzE2MC04ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktMzE2MC05ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNjAwMC00ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNjAwMGcyYS01ID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNjAwMGcyYS02ID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNjAwMGcyYS01ID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNjAwMGcyYi02ID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNjA1MC00ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNjA1MC01ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNzI2MC03ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNzI2MC04ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNzI2MC05ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNzI2NS04ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNzI2NS05ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKKworIyBGb3Igb3RoZXIgZmlybXdhcmVzCisjIE1heWJlIHNwbGl0IG91dCB0byBzZXBhcmF0ZSBwYWNrYWdlcyB3aGVuIG5lZWRlZC4KK0xJQ0VOU0VfJHtQTn0gPSAiXAorICAgIEZpcm13YXJlLUFiaWxpcyBcCisgICAgJiBGaXJtd2FyZS1hZ2VyZSBcCisgICAgJiBGaXJtd2FyZS1hbWQtdWNvZGUgXAorICAgICYgRmlybXdhcmUtY2EwMTMyIFwKKyAgICAmIEZpcm13YXJlLWNoZWxzaW9fZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtY3cxMjAwIFwKKyAgICAmIEZpcm13YXJlLWRpYjA3MDAgXAorICAgICYgRmlybXdhcmUtZW5lX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLWZ3X3NzdF8wZjI4IFwKKyAgICAmIEZpcm13YXJlLWdvNzAwNyBcCisgICAgJiBGaXJtd2FyZS1pMjQwMG0gXAorICAgICYgRmlybXdhcmUtaWJ0X2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLWl0OTEzeCBcCisgICAgJiBGaXJtd2FyZS1td2w4MzM1IFwKKyAgICAmIEZpcm13YXJlLW15cmkxMGdlX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLU9MUEMgXAorICAgICYgRmlybXdhcmUtcGhhbmZ3IFwKKyAgICAmIEZpcm13YXJlLXFhdF9kaDg5NXhjY19maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1xbGEyeHh4IFwKKyAgICAmIEZpcm13YXJlLXI4YTc3OXhfdXNiMyBcCisgICAgJiBGaXJtd2FyZS1yYWxpbmtfYV9tZWRpYXRla19jb21wYW55X2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLXRkYTc3MDYtZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtdWVhZ2xlLWF0bTQtZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtd2wxMjUxIFwKKyAgICAmIEZpcm13YXJlLXhjNDAwMCBcCisgICAgJiBGaXJtd2FyZS14YzUwMDAgXAorICAgICYgRmlybXdhcmUteGM1MDAwYyBcCisiCitGSUxFU18ke1BOfS1saWNlbnNlICs9ICIvbGliL2Zpcm13YXJlL0xJQ0VOKiIKK0ZJTEVTXyR7UE59ICs9ICIvbGliL2Zpcm13YXJlLyoiCitSREVQRU5EU18ke1BOfSArPSAiJHtQTn0tbGljZW5zZSIKKworIyBNYWtlIGxpbnV4LWZpcm13YXJlIGRlcGVuZCBvbiBhbGwgb2YgdGhlIHNwbGl0LW91dCBwYWNrYWdlcy4KK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBmaXJtd2FyZV9wa2dzID0gb2UudXRpbHMucGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCkKKyAgICBkLmFwcGVuZFZhcignUkRFUEVORFNfbGludXgtZmlybXdhcmUnLCAnICcgKyAnICcuam9pbihmaXJtd2FyZV9wa2dzKSkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjZiYzFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnMuaW5jCkBAIC0wLDAgKzEsNzUgQEAKK1NVTU1BUlkgPSAiU2FuaXRpemVkIHNldCBvZiBrZXJuZWwgaGVhZGVycyBmb3IgdGhlIEMgbGlicmFyeSdzIHVzZSIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjICAgICAgICAgICAgICAgICAgICAgICAgUExFQVNFIFJFQUQgCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFlvdSdyZSBwcm9iYWJseSBsb29raW5nIGhlcmUgdGhpbmtpbmcgeW91IG5lZWQgdG8gY3JlYXRlIHNvbWUgbmV3IGNvcHkKKyMgb2YgbGludXgtbGliYy1oZWFkZXJzIHNpbmNlIHlvdSBoYXZlIHlvdXIgb3duIGN1c3RvbSBrZXJuZWwuIFRvIHB1dCAKKyMgdGhpcyBzaW1wbHksIHlvdSBETyBOT1QuCisjCisjIFdoeT8gVGhlc2UgaGVhZGVycyBhcmUgdXNlZCB0byBidWlsZCB0aGUgbGliYy4gSWYgeW91IGN1c3RvbWlzZSB0aGUgCisjIGhlYWRlcnMgeW91IGFyZSBjdXN0b21pc2luZyB0aGUgbGliYyBhbmQgdGhlIGxpYmMgYmVjb21lcyBtYWNoaW5lCisjIHNwZWNpZmljLiBNb3N0IHBlb3BsZSBkbyBub3QgYWRkIGN1c3RvbSBsaWJjIGV4dGVuc2lvbnMgdG8gdGhlIGtlcm5lbAorIyBhbmQgaGF2ZSBhIG1hY2hpbmUgc3BlY2lmaWMgbGliYy4KKyMKKyMgQnV0IHlvdSBoYXZlIHNvbWUga2VybmVsIGhlYWRlcnMgeW91IG5lZWQgZm9yIHNvbWUgZHJpdmVyPyBUaGF0IGlzIGZpbmUKKyMgYnV0IGdldCB0aGVtIGZyb20gU1RBR0lOR19LRVJORUxfRElSIHdoZXJlIHRoZSBrZXJuZWwgaW5zdGFsbHMgaXRzZWxmLgorIyBUaGlzIHdpbGwgbWFrZSB0aGUgcGFja2FnZSB1c2luZyB0aGVtIG1hY2hpbmUgc3BlY2lmaWMgYnV0IHRoaXMgaXMgbXVjaAorIyBiZXR0ZXIgdGhhbiBoYXZpbmcgYSBtYWNoaW5lIHNwZWNpZmljIEMgbGlicmFyeS4gVGhpcyBkb2VzIG1lYW4geW91ciAKKyMgcmVjaXBlIG5lZWRzIGEgREVQRU5EUyArPSAidmlydHVhbC9rZXJuZWwiIGJ1dCBhZ2FpbiwgdGhhdCBpcyBmaW5lIGFuZAorIyBtYWtlcyB0b3RhbCBzZW5zZS4KKyMKKyMgVGhlcmUgY2FuIGFsc28gYmUgYSBjYXNlIHdoZXJlIHlvdXIga2VybmVsIGV4dHJlbWVseSBvbGQgYW5kIHlvdSB3YW50CisjIGFuIG9sZGVyIGxpYmMgQUJJIGZvciB0aGF0IG9sZCBrZXJuZWwuIFRoZSBoZWFkZXJzIGluc3RhbGxlZCBieSB0aGlzCisjIHJlY2lwZSBzaG91bGQgc3RpbGwgYmUgYSBzdGFuZGFyZCBtYWlubGluZSBrZXJuZWwsIG5vdCB5b3VyIG93biBjdXN0b20gCisjIG9uZS4KKyMKKyMgLS0gUlAKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDc4MTBmYWI3NDg3ZmIwYWFkMzI3Yjc2ZjFiZTdjZDciCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgbWFqb3IgPSBkLmdldFZhcigiUFYiLFRydWUpLnNwbGl0KCcuJylbMF0KKyAgICBpZiBtYWpvciA9PSAiMyI6CisgICAgICAgIGQuc2V0VmFyKCJIRUFERVJfRkVUQ0hfVkVSIiwgIjMuMCIpCisgICAgZWxpZiBtYWpvciA9PSAiNCI6CisgICAgICAgIGQuc2V0VmFyKCJIRUFERVJfRkVUQ0hfVkVSIiwgIjQueCIpCisgICAgZWxzZToKKyAgICAgICAgZC5zZXRWYXIoIkhFQURFUl9GRVRDSF9WRVIiLCAiMi42IikKK30KKworaW5oZXJpdCBrZXJuZWwtYXJjaAorCitLT1JHX0FSQ0hJVkVfQ09NUFJFU1NJT04gPz0gImJ6MiIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L2tlcm5lbC92JHtIRUFERVJfRkVUQ0hfVkVSfS9saW51eC0ke1BWfS50YXIuJHtLT1JHX0FSQ0hJVkVfQ09NUFJFU1NJT059IgorCitTID0gIiR7V09SS0RJUn0vbGludXgtJHtQVn0iCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwlvZV9ydW5tYWtlIGFsbG5vY29uZmlnCit9CisKK2RvX2NvbXBpbGUgKCkgeworfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaGVhZGVyc19pbnN0YWxsIElOU1RBTExfSERSX1BBVEg9JHtEfSR7ZXhlY19wcmVmaXh9CisJIyBLZXJuZWwgc2hvdWxkIG5vdCBiZSBleHBvcnRpbmcgdGhpcyBoZWFkZXIKKwlybSAtZiAke0R9JHtleGVjX3ByZWZpeH0vaW5jbHVkZS9zY3NpL3Njc2kuaAorCisJIyBUaGUgLi5pbnN0YWxsLmNtZCBjb25mbGljdHMgYmV0d2VlbiB2YXJpb3VzIGNvbmZpZ3VyZSBydW5zCisJZmluZCAke0R9JHtpbmNsdWRlZGlyfSAtbmFtZSAuLmluc3RhbGwuY21kIHwgeGFyZ3Mgcm0gLWYKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCisKKyNERVBFTkRTID0gImNyb3NzLWxpbmthZ2UiCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0RFUEVORFMgKz0gInVuaWZkZWYtbmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnNfNC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnNfNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MTZlNWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVyc180LjEuYmIKQEAgLTAsMCArMSw3IEBACitLT1JHX0FSQ0hJVkVfQ09NUFJFU1NJT04gPSAieHoiCisKK3JlcXVpcmUgbGludXgtbGliYy1oZWFkZXJzLmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiZmU5ZGMwZjY3MjlmMzY0MDBlYTgxYWE0MWQ2MTRjMzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2FmNTFmMDg1YWFjMWUxY2VhNGQwMGRiYmYzMDkzZWFkMDdiNTUxZmMwN2IzMWIyYTk4OWMwNWY4ZWE3MmQ5ZiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1kZXZzcmMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWRldnNyYy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTZjOGM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1kZXZzcmMuYmIKQEAgLTAsMCArMSw3NiBAQAorU1VNTUFSWSA9ICJMaW51eCBrZXJuZWwgRGV2ZWxvcG1lbnQgU291cmNlIgorREVTQ1JJUFRJT04gPSAiRGV2ZWxvcG1lbnQgc291cmNlIGxpbnV4IGtlcm5lbC4gV2hlbiBidWlsdCwgdGhpcyByZWNpcGUgcGFja2FnZXMgdGhlIFwKK3NvdXJjZSBvZiB0aGUgcHJlZmVycmVkIHZpcnR1YWwva2VybmVsIHByb3ZpZGVyIGFuZCBtYWtlcyBpdCBhdmFpbGFibGUgZm9yIGZ1bGwga2VybmVsIFwKK2RldmVsb3BtZW50IG9yIGV4dGVybmFsIG1vZHVsZSBidWlsZHMiCisKK1NFQ1RJT04gPSAia2VybmVsIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L0dQTC0yLjA7bWQ1PTgwMWY4MDk4MGQxNzFkZDY0MjU2MTA4MzNhMjJkYmU2IgorCitpbmhlcml0IGxpbnV4LWtlcm5lbC1iYXNlCisKKyMgV2hpbHN0IG5vdCBhIG1vZHVsZSwgdGhpcyBlbnN1cmVzIHdlIGRvbid0IGdldCBtdWx0aWxpYiBleHRlbmRlZCAod2hpY2ggd291bGQgbWFrZSBubyBzZW5zZSkKK2luaGVyaXQgbW9kdWxlLWJhc2UKKworIyBXZSBuZWVkIHRoZSBrZXJuZWwgdG8gYmUgc3RhZ2VkICh1bnBhY2tlZCwgcGF0Y2hlZCBhbmQgY29uZmlndXJlZCkgYmVmb3JlCisjIHdlIGNhbiBncmFiIHRoZSBzb3VyY2UgYW5kIG1ha2UgdGhlIHNvdXJjZSBwYWNrYWdlLiBXZSBhbHNvIG5lZWQgdGhlIGJpdHMgZnJvbQorIyAke0J9IG5vdCB0byBjaGFuZ2Ugd2hpbGUgd2UgaW5zdGFsbCwgc28gdmlydHVhbC9rZXJuZWwgbXVzdCBmaW5pc2ggZG9fY29tcGlsZS4KK2RvX2luc3RhbGxbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3NoYXJlZF93b3JrZGlyIgorIyBOZWVkIHRoZSBzb3VyY2UsIG5vdCBqdXN0IHRoZSBvdXRwdXQgb2YgcG9wdWxhdGVfc3lzcm9vdAorZG9faW5zdGFsbFtkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9faW5zdGFsbCIKKworIyBUaGVyZSdzIG5vdGhpbmcgdG8gZG8gaGVyZSwgZXhjZXB0IGluc3RhbGwgdGhlIHNvdXJjZSB3aGVyZSB3ZSBjYW4gcGFja2FnZSBpdAorZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbbm9leGVjXSA9ICIxIgorCisjIERlZmluZSB3aGVyZSB0aGUga2VybmVsIGhlYWRlcnMgYXJlIGluc3RhbGxlZCBvbiB0aGUgdGFyZ2V0IGFzIHdlbGwgYXMgd2hlcmUKKyMgdGhleSBhcmUgc3RhZ2VkLgorS0VSTkVMX1NSQ19QQVRIID0gIi91c3Ivc3JjL2tlcm5lbCIKK1MgPSAiJHtTVEFHSU5HX0tFUk5FTF9ESVJ9IgorQiA9ICIke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSIKKworS0VSTkVMX1ZFUlNJT04gPSAiJHtAZ2V0X2tlcm5lbHZlcnNpb25faGVhZGVycygnJHtTfScpfSIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAga2VybmVsZGlyPSR7RH0ke0tFUk5FTF9TUkNfUEFUSH0KKyAgICAgICAgaW5zdGFsbCAtZCAka2VybmVsZGlyCisKKyAgICAgICAgIworICAgICAgICAjIENvcHkgdGhlIHN0YWdpbmcgZGlyIHNvdXJjZSAoYW5kIG1vZHVsZSBidWlsZCBzdXBwb3J0KSBpbnRvIHRoZSBkZXZzcmMgc3RydWN0dXJlLgorICAgICAgICAjIFdlIGNhbiBrZWVwIHRoaXMgY29weSBzaW1wbGUgYW5kIHRha2UgZXZlcnl0aGluZywgc2luY2UgYSB3ZSdsbCBjbGVhbiB1cCBhbnkgYnVpbGQKKyAgICAgICAgIyBhcnRpZmFjdHMgYWZ0ZXJ3YXJkcywgYW5kIHRoZSBleHRyYSBpL28gaXMgbm90IHNpZ25pZmljYW50CisgICAgICAgICMKKyAgICAgICAgY2QgJHtCfQorICAgICAgICBmaW5kIC4gLXR5cGUgZCAtbmFtZSAnLmdpdConIC1wcnVuZSAtbyAtcGF0aCAnLmRlYnVnJyAtcHJ1bmUgLW8gLXR5cGUgZiAtcHJpbnQwIHwgY3BpbyAtLW51bGwgLXBkbHUgJGtlcm5lbGRpcgorICAgICAgICBjZCAke1N9CisgICAgICAgIGZpbmQgLiAtdHlwZSBkIC1uYW1lICcuZ2l0KicgLXBydW5lIC1vIC10eXBlIGYgLXByaW50MCB8IGNwaW8gLS1udWxsIC1wZGx1ICRrZXJuZWxkaXIKKworICAgICAgICAjIEV4cGxpY2l0bHkgc2V0IEtCVUlMRF9PVVRQVVQgdG8gZW5zdXJlIHRoYXQgdGhlIGltYWdlIGRpcmVjdG9yeSBpcyBjbGVhbmVkIGFuZCBub3QKKyAgICAgICAgIyBUaGUgbWFpbiBidWlsZCBhcnRpZmFjdHMuIFdlIGNsZWFuIHRoZSBkaXJlY3RvcnkgdG8gYXZvaWQgUUEgZXJyb3JzIG9uIG1pc21hdGNoZWQKKyAgICAgICAgIyBhcmNoaXRlY3R1cmUgKHNpbmNlIHNjcmlwdHMgYW5kIGhlbHBlcnMgYXJlIG5hdGl2ZSBmb3JtYXQpLgorICAgICAgICBLQlVJTERfT1VUUFVUPSIka2VybmVsZGlyIgorICAgICAgICBvZV9ydW5tYWtlIC1DICRrZXJuZWxkaXIgQ0M9IiR7S0VSTkVMX0NDfSIgTEQ9IiR7S0VSTkVMX0xEfSIgY2xlYW4gX21ycHJvcGVyX3NjcmlwdHMKKworICAgICAgICAjIEFzIG9mIExpbnV4IGtlcm5lbCB2ZXJzaW9uIDMuMC4xLCB0aGUgY2xlYW4gdGFyZ2V0IHJlbW92ZXMKKyAgICAgICAgIyBhcmNoL3Bvd2VycGMvbGliL2NydHNhdnJlcy5vIHdoaWNoIGlzIHByZXNlbnQgaW4KKyAgICAgICAgIyBLQlVJTERfTERGTEFHU19NT0RVTEUsIG1ha2luZyBpdCByZXF1aXJlZCB0byBidWlsZCBleHRlcm5hbCBtb2R1bGVzLgorICAgICAgICBpZiBbICR7QVJDSH0gPSAicG93ZXJwYyIgXTsgdGhlbgorICAgICAgICAgICAgICAgIG1rZGlyIC1wICRrZXJuZWxkaXIvYXJjaC9wb3dlcnBjL2xpYi8KKyAgICAgICAgICAgICAgICBjcCAke0J9L2FyY2gvcG93ZXJwYy9saWIvY3J0c2F2cmVzLm8gJGtlcm5lbGRpci9hcmNoL3Bvd2VycGMvbGliL2NydHNhdnJlcy5vCisgICAgICAgIGZpCisKKyAgICAgICAgY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKyMgRW5zdXJlIHdlIGRvbid0IHJhY2UgYWdhaW5zdCAibWFrZSBzY3JpcHRzIiBkdXJpbmcgY3BpbworZG9faW5zdGFsbFtsb2NrZmlsZXNdID0gIiR7VE1QRElSfS9rZXJuZWwtc2NyaXB0cy5sb2NrIgorCitQQUNLQUdFUyA9ICJrZXJuZWwtZGV2c3JjIgorRklMRVNfJHtQTn0gPSAiJHtLRVJORUxfU1JDX1BBVEh9IgorUkRFUEVORFNfJHtQTn0gPSAiYmMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHRiLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdGIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlM2E1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHRiLmluYwpAQCAtMCwwICsxLDc5IEBACisjIFN1cHBvcnQgZm9yIGRldmljZSB0cmVlIGdlbmVyYXRpb24KK0ZJTEVTX2tlcm5lbC1kZXZpY2V0cmVlID0gIi8ke0tFUk5FTF9JTUFHRURFU1R9L2RldmljZXRyZWUqIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIGQuYXBwZW5kVmFyKCJQQUNLQUdFUyIsICIga2VybmVsLWRldmljZXRyZWUiKQorfQorCitkb19jb21waWxlX2FwcGVuZCgpIHsKKwlpZiB0ZXN0IC1uICIke0tFUk5FTF9ERVZJQ0VUUkVFfSI7IHRoZW4KKwkJZm9yIERUQiBpbiAke0tFUk5FTF9ERVZJQ0VUUkVFfTsgZG8KKwkJCWlmIGVjaG8gJHtEVEJ9IHwgZ3JlcCAtcSAnL2R0cy8nOyB0aGVuCisJCQkJYmJ3YXJuICIke0RUQn0gY29udGFpbnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgdGhlIGR0cyBmaWxlLCBidXQgb25seSB0aGUgZHRiIG5hbWUgc2hvdWxkIGJlIHVzZWQuIgorCQkJCURUQj1gYmFzZW5hbWUgJHtEVEJ9IHwgc2VkICdzLFwuZHRzJCwuZHRiLGcnYAorCQkJZmkKKwkJCW9lX3J1bm1ha2UgJHtEVEJ9CisJCWRvbmUKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpZiB0ZXN0IC1uICIke0tFUk5FTF9ERVZJQ0VUUkVFfSI7IHRoZW4KKwkJZm9yIERUQiBpbiAke0tFUk5FTF9ERVZJQ0VUUkVFfTsgZG8KKwkJCWlmIGVjaG8gJHtEVEJ9IHwgZ3JlcCAtcSAnL2R0cy8nOyB0aGVuCisJCQkJYmJ3YXJuICIke0RUQn0gY29udGFpbnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgdGhlIGR0cyBmaWxlLCBidXQgb25seSB0aGUgZHRiIG5hbWUgc2hvdWxkIGJlIHVzZWQuIgorCQkJCURUQj1gYmFzZW5hbWUgJHtEVEJ9IHwgc2VkICdzLFwuZHRzJCwuZHRiLGcnYAorCQkJZmkKKwkJCURUQl9CQVNFX05BTUU9YGJhc2VuYW1lICR7RFRCfSAuZHRiYAorCQkJRFRCX1NZTUxJTktfTkFNRT1gZWNobyAke0tFUk5FTF9JTUFHRV9TWU1MSU5LX05BTUV9IHwgc2VkICJzLyR7TUFDSElORX0vJHtEVEJfQkFTRV9OQU1FfS9nImAKKwkJCURUQl9QQVRIPSIke0J9L2FyY2gvJHtBUkNIfS9ib290L2R0cy8ke0RUQn0iCisJCQlpZiBbICEgLWUgIiR7RFRCX1BBVEh9IiBdOyB0aGVuCisJCQkJRFRCX1BBVEg9IiR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QvJHtEVEJ9IgorCQkJZmkKKwkJCWluc3RhbGwgLW0gMDY0NCAke0RUQl9QQVRIfSAke0R9LyR7S0VSTkVMX0lNQUdFREVTVH0vZGV2aWNldHJlZS0ke0RUQl9TWU1MSU5LX05BTUV9LmR0YgorCQlkb25lCisJZmkKK30KKworZG9fZGVwbG95X2FwcGVuZCgpIHsKKwlpZiB0ZXN0IC1uICIke0tFUk5FTF9ERVZJQ0VUUkVFfSI7IHRoZW4KKwkJZm9yIERUQiBpbiAke0tFUk5FTF9ERVZJQ0VUUkVFfTsgZG8KKwkJCWlmIGVjaG8gJHtEVEJ9IHwgZ3JlcCAtcSAnL2R0cy8nOyB0aGVuCisJCQkJYmJ3YXJuICIke0RUQn0gY29udGFpbnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgdGhlIGR0cyBmaWxlLCBidXQgb25seSB0aGUgZHRiIG5hbWUgc2hvdWxkIGJlIHVzZWQuIgorCQkJCURUQj1gYmFzZW5hbWUgJHtEVEJ9IHwgc2VkICdzLFwuZHRzJCwuZHRiLGcnYAorCQkJZmkKKwkJCURUQl9CQVNFX05BTUU9YGJhc2VuYW1lICR7RFRCfSAuZHRiYAorCQkJRFRCX05BTUU9YGVjaG8gJHtLRVJORUxfSU1BR0VfQkFTRV9OQU1FfSB8IHNlZCAicy8ke01BQ0hJTkV9LyR7RFRCX0JBU0VfTkFNRX0vZyJgCisJCQlEVEJfU1lNTElOS19OQU1FPWBlY2hvICR7S0VSTkVMX0lNQUdFX1NZTUxJTktfTkFNRX0gfCBzZWQgInMvJHtNQUNISU5FfS8ke0RUQl9CQVNFX05BTUV9L2ciYAorCQkJRFRCX1BBVEg9IiR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QvZHRzLyR7RFRCfSIKKwkJCWlmIFsgISAtZSAiJHtEVEJfUEFUSH0iIF07IHRoZW4KKwkJCQlEVEJfUEFUSD0iJHtCfS9hcmNoLyR7QVJDSH0vYm9vdC8ke0RUQn0iCisJCQlmaQorCQkJaW5zdGFsbCAtZCAke0RFUExPWURJUn0KKwkJCWluc3RhbGwgLW0gMDY0NCAke0RUQl9QQVRIfSAke0RFUExPWURJUn0vJHtEVEJfTkFNRX0uZHRiCisJCQljZCAke0RFUExPWURJUn0KKwkJCWxuIC1zZiAke0RUQl9OQU1FfS5kdGIgJHtEVEJfU1lNTElOS19OQU1FfS5kdGIKKwkJCWNkIC0KKwkJZG9uZQorCWZpCit9CisKK3BrZ19wb3N0aW5zdF9rZXJuZWwtZGV2aWNldHJlZSAoKSB7CisJY2QgLyR7S0VSTkVMX0lNQUdFREVTVH0KKwlmb3IgRFRCX0ZJTEUgaW4gJHtLRVJORUxfREVWSUNFVFJFRX0KKwlkbworCQlEVEJfQkFTRV9OQU1FPWBiYXNlbmFtZSAke0RUQl9GSUxFfSB8IGF3ayAtRiAiLiIgJ3twcmludCAkMX0nYAorCQlEVEJfU1lNTElOS19OQU1FPWBlY2hvICR7S0VSTkVMX0lNQUdFX1NZTUxJTktfTkFNRX0gfCBzZWQgInMvJHtNQUNISU5FfS8ke0RUQl9CQVNFX05BTUV9L2ciYAorCQl1cGRhdGUtYWx0ZXJuYXRpdmVzIC0taW5zdGFsbCAvJHtLRVJORUxfSU1BR0VERVNUfS8ke0RUQl9CQVNFX05BTUV9LmR0YiAke0RUQl9CQVNFX05BTUV9LmR0YiBkZXZpY2V0cmVlLSR7RFRCX1NZTUxJTktfTkFNRX0uZHRiICR7S0VSTkVMX1BSSU9SSVRZfSB8fCB0cnVlCisJZG9uZQorfQorCitwa2dfcG9zdHJtX2tlcm5lbC1kZXZpY2V0cmVlICgpIHsKKwljZCAvJHtLRVJORUxfSU1BR0VERVNUfQorCWZvciBEVEJfRklMRSBpbiAke0tFUk5FTF9ERVZJQ0VUUkVFfQorCWRvCisJCURUQl9CQVNFX05BTUU9YGJhc2VuYW1lICR7RFRCX0ZJTEV9IHwgYXdrIC1GICIuIiAne3ByaW50ICQxfSdgCisJCURUQl9TWU1MSU5LX05BTUU9YGVjaG8gJHtLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FfSB8IHNlZCAicy8ke01BQ0hJTkV9LyR7RFRCX0JBU0VfTkFNRX0vZyJgCisJCXVwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1yZW1vdmUgJHtEVEJfQkFTRV9OQU1FfS5kdGIgZGV2aWNldHJlZS0ke0RUQl9TWU1MSU5LX05BTUV9LmR0YiAke0tFUk5FTF9QUklPUklUWX0gfHwgdHJ1ZQorCWRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdW1teS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdW1teS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzBlNGU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR1bW15LmJiCkBAIC0wLDAgKzEsNTQgQEAKK1NVTU1BUlkgPSAiRHVtbXkgTGludXgga2VybmVsIgorREVTQ1JJUFRJT04gPSAiRHVtbXkgTGludXgga2VybmVsLCB0byBiZSBzZWxlY3RlZCBhcyB0aGUgcHJlZmVycmVkIFwKK3Byb3ZpZGVyIGZvciB2aXJ0dWFsL2tlcm5lbCB0byBzYXRpc2Z5IGRlcGVuZGVuY2llcyBmb3Igc2l0dWF0aW9ucyBcCit3aGVyZSB5b3Ugd2lzaCB0byBidWlsZCB0aGUga2VybmVsIGV4dGVybmFsbHkgZnJvbSB0aGUgYnVpbGQgc3lzdGVtLiIKK1NFQ1RJT04gPSAia2VybmVsIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtXT1JLRElSfS9DT1BZSU5HLkdQTDttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCisKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL2tlcm5lbCIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXmtlcm5lbC1tb2R1bGUtLioiCitQQUNLQUdFU19EWU5BTUlDICs9ICJea2VybmVsLWltYWdlLS4qIgorUEFDS0FHRVNfRFlOQU1JQyArPSAiXmtlcm5lbC1maXJtd2FyZS0uKiIKKworUEFDS0FHRVMgKz0gImtlcm5lbC1tb2R1bGVzIgorRklMRVNfa2VybmVsLW1vZHVsZXMgPSAiIgorQUxMT1dfRU1QVFlfa2VybmVsLW1vZHVsZXMgPSAiMSIKK0RFU0NSSVBUSU9OX2tlcm5lbC1tb2R1bGVzID0gIktlcm5lbCBtb2R1bGVzIG1ldGEgcGFja2FnZSIKKworI0NPTVBBVElCTEVfTUFDSElORSA9ICJ5b3VyX21hY2hpbmUiCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gImZpbGU6Ly9DT1BZSU5HLkdQTCIKK1MgPSAiJHtXT1JLRElSfSIKKworZG9fY29uZmlndXJlKCkgeworCToKK30KKworZG9fY29tcGlsZSAoKSB7CisJOgorfQorCitkb19zaGFyZWRfd29ya2RpciAoKSB7CisJOgorfQorCitkb19pbnN0YWxsKCkgeworCToKK30KKworZG9fYnVuZGxlX2luaXRyYW1mcygpIHsKKwk6Cit9CisKK2RvX2RlcGxveSgpIHsKKwk6Cit9CisKK2FkZHRhc2sgYnVuZGxlX2luaXRyYW1mcyBhZnRlciBkb19pbnN0YWxsIGJlZm9yZSBkb19kZXBsb3kKK2FkZHRhc2sgZGVwbG95IGFmdGVyIGRvX2luc3RhbGwKK2FkZHRhc2sgc2hhcmVkX3dvcmtkaXIgYWZ0ZXIgZG9fY29tcGlsZSBiZWZvcmUgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR1bW15L0NPUFlJTkcuR1BMIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR1bW15L0NPUFlJTkcuR1BMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTE5MDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHVtbXkvQ09QWUlORy5HUEwKQEAgLTAsMCArMSwzMzkgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZlNDgyYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmIKQEAgLTAsMCArMSw1MSBAQAorIyBUaGlzIHJlY2lwZSB0cmFja3MgdGhlIGxpbnV4LXlvY3RvLWRldiByZXBvc2l0b3J5IGFzIGl0cyB1cHN0cmVhbSBzb3VyY2UuCisjIFNpbmNlIHRoaXMgdHJlZSBpcyBmcmVxdWVudGx5IHVwZGF0ZWQsIGFuZCBwZXJpb2RpY2FsbHkgcmVidWlsdCwgQVVUT1JFViBpcworIyB1c2VkIHRvIHRyYWNrIGl0cyBjb250ZW50cy4KKyMKKyMgVGhpcyByZWNpcGUgaXMganVzdCBsaWtlIG90aGVyIGxpbnV4LXlvY3RvIHZhcmlhbnRzLCB3aXRoIHRoZSBvbmx5IGRpZmZlcmVuY2UKKyMgYmVpbmcgdGhhdCB0byBhdm9pZCBuZXR3b3JrIGFjY2VzcyBkdXJpbmcgaW5pdGlhbCBwYXJzaW5nLCBzdGF0aWMgU1JDUkVWcyBhcmUKKyMgcHJvdmlkZWQgYW5kIG92ZXJyaWRkZW4gaWYgdGhlIHByZWZlcnJlZCBrZXJuZWwgcHJvdmlkZXIgaXMgbGludXgteW9jdG8tZGV2LgorIworIyBUbyBlbmFibGUgdGhpcyByZWNpcGUsIHNldCBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPSAibGludXgteW9jdG8tZGV2IgorCitpbmhlcml0IGtlcm5lbAorcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworIyBwcm92aWRlIHRoaXMgLmluYyB0byBzZXQgc3BlY2lmaWMgcmV2aXNpb25zCitpbmNsdWRlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi1yZXZpc2lvbnMuaW5jCisKKyMgU2tpcCBwcm9jZXNzaW5nIG9mIHRoaXMgcmVjaXBlIGlmIGl0IGlzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBhcyB0aGUKKyMgUFJFRkVSUkVEX1BST1ZJREVSIGZvciB2aXJ0dWFsL2tlcm5lbC4gVGhpcyBhdm9pZHMgbmV0d29yayBhY2Nlc3MgcmVxdWlyZWQKKyMgYnkgdGhlIHVzZSBvZiBBVVRPUkVWIFNSQ1JFVnMsIHdoaWNoIGFyZSB0aGUgZGVmYXVsdCBmb3IgdGhpcyByZWNpcGUuCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwiLCBUcnVlKSAhPSAibGludXgteW9jdG8tZGV2IjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIlNldCBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgdG8gbGludXgteW9jdG8tZGV2IHRvIGVuYWJsZSBpdCIpCit9CisKK0tCUkFOQ0ggPSAic3RhbmRhcmQvYmFzZSIKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLWRldi5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD1tYXN0ZXI7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworIyBTZXQgZGVmYXVsdCBTUkNSRVZzLiBCb3RoIHRoZSBtYWNoaW5lIGFuZCBtZXRhIFNSQ1JFVnMgYXJlIHN0YXRpY2FsbHkgc2V0CisjIHRvIHRoZSBrb3JnIHYzLjcgdGFnLCBhbmQgaGVuY2UgcHJldmVudCBuZXR3b3JrIGFjY2VzcyBkdXJpbmcgcGFyc2luZy4gSWYKKyMgbGludXgteW9jdG8tZGV2IGlzIHRoZSBwcmVmZXJyZWQgcHJvdmlkZXIsIHRoZXkgd2lsbCBiZSBvdmVycmlkZGVuIHRvCisjIEFVVE9SRVYgaW4gZm9sbG93aW5nIGFub255bW91cyBweXRob24gcm91dGluZSBhbmQgcmVzb2x2ZWQgd2hlbiB0aGUKKyMgdmFyaWFibGVzIGFyZSBmaW5hbGl6ZWQuCitTUkNSRVZfbWFjaGluZSA/PSAnJHtAb2UudXRpbHMuY29uZGl0aW9uYWwoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCIsICJsaW51eC15b2N0by1kZXYiLCAiJHtBVVRPUkVWfSIsICIyOTU5NDQwNGQ3ZmU3M2NkODBlYWE0ZWU4YzQzZGNjNTM5NzBjNjBlIiwgZCl9JworU1JDUkVWX21ldGEgPz0gJyR7QG9lLnV0aWxzLmNvbmRpdGlvbmFsKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwiLCAibGludXgteW9jdG8tZGV2IiwgIiR7QVVUT1JFVn0iLCAiMjk1OTQ0MDRkN2ZlNzNjZDgwZWFhNGVlOGM0M2RjYzUzOTcwYzYwZSIsIGQpfScKKworTElOVVhfVkVSU0lPTiA/PSAiNC4yLXJjKyIKK0xJTlVYX1ZFUlNJT05fRVhURU5TSU9OID89ICIteW9jdG9kZXYtJHtMSU5VWF9LRVJORUxfVFlQRX0iCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAiKHFlbXVhcm18cWVtdXg4NnxxZW11cHBjfHFlbXVtaXBzfHFlbXVtaXBzNjR8cWVtdXg4Ni02NCkiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0VYVFJBX0ZFQVRVUkVTID89ICJmZWF0dXJlcy9uZXRmaWx0ZXIvbmV0ZmlsdGVyLnNjYyBmZWF0dXJlcy90YXNrc3RhdHMvdGFza3N0YXRzLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODYtNjQ9IiBjZmcvc291bmQuc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICIgY2ZnL3gzMi5zY2MiLCAiIiAsZCl9IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkM2Q1YzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYgpAQCAtMCwwICsxLDI4IEBACitLQlJBTkNIID89ICJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiCitLQlJBTkNIX3FlbXVwcGMgPz0gInN0YW5kYXJkL3ByZWVtcHQtcnQvcWVtdXBwYyIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworU1JDUkVWX21hY2hpbmUgPz0gIjgyODE5MTU1MjdiYThkNzllNTk5MDZjMDJmMjhlN2FhMTE0MjQ3MjMiCitTUkNSRVZfbWFjaGluZV9xZW11cHBjID89ICI1ZTdkMzcyZWJjMzI3ZjI4NjU2ZmM5NzJmYWI1NTYwNWVlYThhZWMzIgorU1JDUkVWX21ldGEgPz0gIjNhMDliMzhhOWY1MDE1YzU2ZDk5ZDE3YWE3YzJmMjAwYzU2NjI0OWIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xNC5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by0zLjE0O2Rlc3RzdWZmaXg9JHtLTUVUQX0iCisKK0xJTlVYX1ZFUlNJT04gPz0gIjMuMTQuMzYiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK0xJTlVYX0tFUk5FTF9UWVBFID0gInByZWVtcHQtcnQiCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdXg4NnxxZW11eDg2LTY0fHFlbXVhcm18cWVtdXBwY3xxZW11bWlwcykiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0VYVFJBX0ZFQVRVUkVTID89ICJmZWF0dXJlcy9uZXRmaWx0ZXIvbmV0ZmlsdGVyLnNjYyBmZWF0dXJlcy90YXNrc3RhdHMvdGFza3N0YXRzLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODYtNjQ9IiBjZmcvc291bmQuc2NjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF80LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0ODNjMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF80LjEuYmIKQEAgLTAsMCArMSwyNiBAQAorS0JSQU5DSCA/PSAic3RhbmRhcmQvcHJlZW1wdC1ydCIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworU1JDUkVWX21hY2hpbmUgPz0gIjU5YjhjNGY1ZThkZGI5YzMzYzYyZmZmMjIyMDRmZTJiMGQ4YzcwM2UiCitTUkNSRVZfbWV0YSA/PSAiNDI5ZjllMmZmMDY0OWI4YzkzNDEzNDU2MjI1NDVkODc0ZDVlMzAzYSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by00LjEuZ2l0O2JyYW5jaD0ke0tCUkFOQ0h9O25hbWU9bWFjaGluZSBcCisgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tNC4xO2Rlc3RzdWZmaXg9JHtLTUVUQX0iCisKK0xJTlVYX1ZFUlNJT04gPz0gIjQuMS42IgorCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitLTUVUQSA9ICJrZXJuZWwtbWV0YSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgorCitMSU5VWF9LRVJORUxfVFlQRSA9ICJwcmVlbXB0LXJ0IgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAiKHFlbXV4ODZ8cWVtdXg4Ni02NHxxZW11YXJtfHFlbXVwcGN8cWVtdW1pcHMpIgorCisjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKK0tFUk5FTF9FWFRSQV9GRUFUVVJFUyA/PSAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MgZmVhdHVyZXMvdGFza3N0YXRzL3Rhc2tzdGF0cy5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0tFUk5FTF9FWFRSQV9GRUFUVVJFU30iCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODY9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2LTY0PSIgY2ZnL3NvdW5kLnNjYyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMmM4MTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiCkBAIC0wLDAgKzEsMjMgQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL3RpbnkvYmFzZSIKK0xJTlVYX0tFUk5FTF9UWVBFID0gInRpbnkiCitLQ09ORklHX01PREUgPSAiLS1hbGxub2NvbmZpZyIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworTElOVVhfVkVSU0lPTiA/PSAiMy4xNC4zNiIKKworS01FVEEgPSAia2VybmVsLW1ldGEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKKworU1JDUkVWX21hY2hpbmUgPz0gIjU3ODYwMmE3MjJkYmZiMjYwODAxZjNiMzdjNmVhZmQyYWJiMjM0MGQiCitTUkNSRVZfbWV0YSA/PSAiM2EwOWIzOGE5ZjUwMTVjNTZkOTlkMTdhYTdjMmYyMDBjNTY2MjQ5YiIKKworUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by0zLjE0LmdpdDticmFuY2g9JHtLQlJBTkNIfTtuYW1lPW1hY2hpbmU7IFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by0zLjE0O2Rlc3RzdWZmaXg9JHtLTUVUQX0iCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdXg4NikiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0ZFQVRVUkVTID0gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YTU4YTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiCkBAIC0wLDAgKzEsMjMgQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL3RpbnkvYmFzZSIKK0xJTlVYX0tFUk5FTF9UWVBFID0gInRpbnkiCitLQ09ORklHX01PREUgPSAiLS1hbGxub2NvbmZpZyIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworTElOVVhfVkVSU0lPTiA/PSAiMy4xOS41IgorCitLTUVUQSA9ICJrZXJuZWwtbWV0YSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgorCitTUkNSRVZfbWFjaGluZSA/PSAiZTE1MjM0OWRlNTliNDNiMmE3NWYyYzMzMmI0NDE3MWRmNDYxZDVhMCIKK1NSQ1JFVl9tZXRhID89ICIxMDE2NzE0ODY4MjQ5ZDY0ZmMxNjY5MmZkNzY3OTY3MmIxZWZhMTdiIgorCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTMuMTkuZ2l0O2JyYW5jaD0ke0tCUkFOQ0h9O25hbWU9bWFjaGluZSBcCisgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tMy4xOTtkZXN0c3VmZml4PSR7S01FVEF9IgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAiKHFlbXV4ODYpIgorCisjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKK0tFUk5FTF9GRUFUVVJFUyA9ICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYxMjA1ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYgpAQCAtMCwwICsxLDIzIEBACitLQlJBTkNIID89ICJzdGFuZGFyZC90aW55L2Jhc2UiCitMSU5VWF9LRVJORUxfVFlQRSA9ICJ0aW55IgorS0NPTkZJR19NT0RFID0gIi0tYWxsbm9jb25maWciCisKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKK0xJTlVYX1ZFUlNJT04gPz0gIjQuMS42IgorCitLTUVUQSA9ICJrZXJuZWwtbWV0YSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgorCitTUkNSRVZfbWFjaGluZSA/PSAiNTliOGM0ZjVlOGRkYjljMzNjNjJmZmYyMjIwNGZlMmIwZDhjNzAzZSIKK1NSQ1JFVl9tZXRhID89ICI0MjlmOWUyZmYwNjQ5YjhjOTM0MTM0NTYyMjU0NWQ4NzRkNWUzMDNhIgorCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTQuMS5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00LjE7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gIihxZW11eDg2KSIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRkVBVFVSRVMgPSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I0MWE2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKQEAgLTAsMCArMSw1MSBAQAorREVTQ1JJUFRJT04gPSAiWW9jdG8gS2VybmVsIgorU0VDVElPTiA9ICJrZXJuZWwiCitMSUNFTlNFID0gIkdQTHYyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNzgxMGZhYjc0ODdmYjBhYWQzMjdiNzZmMWJlN2NkNyIKKworSU5DX1BSID0gInI0IgorCitERVBFTkRTICs9ICJ4ei1uYXRpdmUgYmMtbmF0aXZlIgorREVQRU5EU19hcHBlbmRfYWFyY2g2NCA9ICIgbGliZ2NjIgorS0VSTkVMX0NDX2FwcGVuZF9hYXJjaDY0ID0gIiAke1RPT0xDSEFJTl9PUFRJT05TfSIKK0tFUk5FTF9MRF9hcHBlbmRfYWFyY2g2NCA9ICIgJHtUT09MQ0hBSU5fT1BUSU9OU30iCisKKyMgQSBLTUFDSElORSBpcyB0aGUgbWFwcGluZyBvZiBhIHlvY3RvICRNQUNISU5FIHRvIHdoYXQgaXMgYnVpbHQKKyMgYnkgdGhlIGtlcm5lbC4gVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGJyYW5jaCB0aGF0IHNob3VsZCBiZSBidWlsdCwKKyMgYW5kIGl0IGNhbiBiZSBzcGVjaWZpYyB0byB0aGUgbWFjaGluZSBvciBzaGFyZWQKKyMgS01BQ0hJTkUgPSAiVU5ERUZJTkVEIgorCitMSU5VWF9LRVJORUxfVFlQRSA/PSAic3RhbmRhcmQiCisKKyMgS01FVEEgPz0gIiIKK0tCUkFOQ0ggPz0gIm1hc3RlciIKK0tNQUNISU5FID89ICIke01BQ0hJTkV9IgorU1JDUkVWX0ZPUk1BVCA/PSAibWV0YV9tYWNoaW5lIiAKKworIyBMRVZFTFM6CisjICAgMDogbm8gcmVwb3J0aW5nCisjICAgMTogcmVwb3J0IG9wdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWVkLCBidXQgbm90IGluIHRoZSBmaW5hbCBjb25maWcKKyMgICAyOiByZXBvcnQgb3B0aW9ucyB0aGF0IGFyZSBub3QgaGFyZHdhcmUgcmVsYXRlZCwgYnV0IHNldCBieSBhIEJTUAorS0NPTkZfQVVESVRfTEVWRUwgPz0gIjEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPz0gIjAiCisKK0xJTlVYX1ZFUlNJT05fRVhURU5TSU9OID89ICIteW9jdG8tJHtMSU5VWF9LRVJORUxfVFlQRX0iCisKKyMgUGljayB1cCBzaGFyZWQgZnVuY3Rpb25zCitpbmhlcml0IGtlcm5lbAoraW5oZXJpdCBrZXJuZWwteW9jdG8KK3JlcXVpcmUgbGludXgtZHRiLmluYworCitCID0gIiR7V09SS0RJUn0vbGludXgtJHtQQUNLQUdFX0FSQ0h9LSR7TElOVVhfS0VSTkVMX1RZUEV9LWJ1aWxkIgorCitkb19pbnN0YWxsX2FwcGVuZCgpeworCWlmIFsgLW4gIiR7S01FVEF9IiBdOyB0aGVuCisJCXJtIC1yZiAke1NUQUdJTkdfS0VSTkVMX0RJUn0vJHtLTUVUQX0KKwlmaQorfQorCisjIGV4dHJhIHRhc2tzCithZGR0YXNrIGtlcm5lbF9saW5rX3ZtbGludXggYWZ0ZXIgZG9fY29tcGlsZSBiZWZvcmUgZG9faW5zdGFsbAorYWRkdGFzayB2YWxpZGF0ZV9icmFuY2hlcyBiZWZvcmUgZG9fcGF0Y2ggYWZ0ZXIgZG9fa2VybmVsX2NoZWNrb3V0CithZGR0YXNrIGtlcm5lbF9jb25maWdjaGVjayBhZnRlciBkb19jb25maWd1cmUgYmVmb3JlIGRvX2NvbXBpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZiMmU1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiCkBAIC0wLDAgKzEsNDEgQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL2Jhc2UiCisKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKKyMgYm9hcmQgc3BlY2lmaWMgYnJhbmNoZXMKK0tCUkFOQ0hfcWVtdWFybSAgPz0gInN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIgorS0JSQU5DSF9xZW11YXJtNjQgPz0gInN0YW5kYXJkL3FlbXVhcm02NCIKK0tCUkFOQ0hfcWVtdW1pcHMgPz0gInN0YW5kYXJkL210aS1tYWx0YTMyIgorS0JSQU5DSF9xZW11cHBjICA/PSAic3RhbmRhcmQvcWVtdXBwYyIKK0tCUkFOQ0hfcWVtdXg4NiAgPz0gInN0YW5kYXJkL2NvbW1vbi1wYy9iYXNlIgorS0JSQU5DSF9xZW11eDg2LTY0ID89ICJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIKK0tCUkFOQ0hfcWVtdW1pcHM2NCA/PSAic3RhbmRhcmQvbXRpLW1hbHRhNjQiCisKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm0gPz0gIjQ4MTc3NDc5MTJiNWM1MGNlNWMzMWVmMjU2NTgzNDBjYTYxNWUxYjQiCitTUkNSRVZfbWFjaGluZV9xZW11YXJtNjQgPz0gIjU3ODYwMmE3MjJkYmZiMjYwODAxZjNiMzdjNmVhZmQyYWJiMjM0MGQiCitTUkNSRVZfbWFjaGluZV9xZW11bWlwcyA/PSAiNmVkNzZlYzI2YjEyMGY2NWY4NTQ3Yzg2MTJiNzMzNGJkMjc0NWVjOSIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVwcGMgPz0gImE4NmFkZTg0YjJlMTQyYzBmZDc1MzZkOTY0NzcxMDdiNmQwN2RiNWMiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2ID89ICJhZjFmN2Y1ODZiZDMyZDM5YzA1N2YxNzYwNjk5MWI4ODdlYWRiMzg5IgorU1JDUkVWX21hY2hpbmVfcWVtdXg4Ni02NCA/PSAiNTc4NjAyYTcyMmRiZmIyNjA4MDFmM2IzN2M2ZWFmZDJhYmIyMzQwZCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzNjQgPz0gImE2M2Q0MGI4NjBhNmQyNTUwMDVhNTQxODk0ZDUzNzI5MDkwYjQwZWEiCitTUkNSRVZfbWFjaGluZSA/PSAiNTc4NjAyYTcyMmRiZmIyNjA4MDFmM2IzN2M2ZWFmZDJhYmIyMzQwZCIKK1NSQ1JFVl9tZXRhID89ICIzYTA5YjM4YTlmNTAxNWM1NmQ5OWQxN2FhN2MyZjIwMGM1NjYyNDliIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTMuMTQuZ2l0O2JyYW5jaD0ke0tCUkFOQ0h9O25hbWU9bWFjaGluZTsgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTMuMTQ7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworTElOVVhfVkVSU0lPTiA/PSAiMy4xNC4zNiIKKworUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworS01FVEEgPSAia2VybmVsLW1ldGEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gInFlbXVhcm18cWVtdWFybTY0fHFlbXV4ODZ8cWVtdXBwY3xxZW11bWlwc3xxZW11bWlwczY0fHFlbXV4ODYtNjQiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0VYVFJBX0ZFQVRVUkVTID89ICJmZWF0dXJlcy9uZXRmaWx0ZXIvbmV0ZmlsdGVyLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODYtNjQ9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICIgY2ZnL3gzMi5zY2MiLCAiIiAsZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGMxNjQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmIKQEAgLTAsMCArMSw0MSBAQAorS0JSQU5DSCA/PSAic3RhbmRhcmQvYmFzZSIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworIyBib2FyZCBzcGVjaWZpYyBicmFuY2hlcworS0JSQU5DSF9xZW11YXJtICA/PSAic3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMiCitLQlJBTkNIX3FlbXVhcm02NCA/PSAic3RhbmRhcmQvcWVtdWFybTY0IgorS0JSQU5DSF9xZW11bWlwcyA/PSAic3RhbmRhcmQvbXRpLW1hbHRhMzIiCitLQlJBTkNIX3FlbXVwcGMgID89ICJzdGFuZGFyZC9xZW11cHBjIgorS0JSQU5DSF9xZW11eDg2ICA/PSAic3RhbmRhcmQvY29tbW9uLXBjIgorS0JSQU5DSF9xZW11eDg2LTY0ID89ICJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIKK0tCUkFOQ0hfcWVtdW1pcHM2NCA/PSAic3RhbmRhcmQvbXRpLW1hbHRhNjQiCisKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm0gPz0gIjk2M2I0ZGY2NjNkYmEyNTg0YWM4NjRlMGMwMTY4MjVkZTAwNDY1NTgiCitTUkNSRVZfbWFjaGluZV9xZW11YXJtNjQgPz0gImUxNTIzNDlkZTU5YjQzYjJhNzVmMmMzMzJiNDQxNzFkZjQ2MWQ1YTAiCitTUkNSRVZfbWFjaGluZV9xZW11bWlwcyA/PSAiY2VkYmJjN2I1ZTcyZGYyZTgyMGJiOWU3ODg1ZjEyMTMyYzVlMmZmZiIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVwcGMgPz0gIjIzYTgzMzg2ZTEwOTg2YTYzZTZjZWY3MTJhMDQ1NDQ1NDk5ZDAwMmIiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2ID89ICJlMTUyMzQ5ZGU1OWI0M2IyYTc1ZjJjMzMyYjQ0MTcxZGY0NjFkNWEwIgorU1JDUkVWX21hY2hpbmVfcWVtdXg4Ni02NCA/PSAiZTE1MjM0OWRlNTliNDNiMmE3NWYyYzMzMmI0NDE3MWRmNDYxZDVhMCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzNjQgPz0gIjNlYjcwY2VhMzUzMmUyMmFiMWI2ZGE5ODY0NDQ2NjIxMjI5ZTY2MTYiCitTUkNSRVZfbWFjaGluZSA/PSAiZTE1MjM0OWRlNTliNDNiMmE3NWYyYzMzMmI0NDE3MWRmNDYxZDVhMCIKK1NSQ1JFVl9tZXRhID89ICIxMDE2NzE0ODY4MjQ5ZDY0ZmMxNjY5MmZkNzY3OTY3MmIxZWZhMTdiIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTMuMTkuZ2l0O25hbWU9bWFjaGluZTticmFuY2g9JHtLQlJBTkNIfTsgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTMuMTk7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworTElOVVhfVkVSU0lPTiA/PSAiMy4xOS41IgorCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitLTUVUQSA9ICJrZXJuZWwtbWV0YSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAicWVtdWFybXxxZW11YXJtNjR8cWVtdXg4NnxxZW11cHBjfHFlbXVtaXBzfHFlbXVtaXBzNjR8cWVtdXg4Ni02NCIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRVhUUkFfRkVBVFVSRVMgPz0gImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtLRVJORUxfRVhUUkFfRkVBVFVSRVN9IgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIiBjZmcveDMyLnNjYyIsICIiICxkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmQ0NjE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYgpAQCAtMCwwICsxLDQxIEBACitLQlJBTkNIID89ICJzdGFuZGFyZC9iYXNlIgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCisjIGJvYXJkIHNwZWNpZmljIGJyYW5jaGVzCitLQlJBTkNIX3FlbXVhcm0gID89ICJzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIKK0tCUkFOQ0hfcWVtdWFybTY0ID89ICJzdGFuZGFyZC9xZW11YXJtNjQiCitLQlJBTkNIX3FlbXVtaXBzID89ICJzdGFuZGFyZC9tdGktbWFsdGEzMiIKK0tCUkFOQ0hfcWVtdXBwYyAgPz0gInN0YW5kYXJkL3FlbXVwcGMiCitLQlJBTkNIX3FlbXV4ODYgID89ICJzdGFuZGFyZC9iYXNlIgorS0JSQU5DSF9xZW11eDg2LTY0ID89ICJzdGFuZGFyZC9iYXNlIgorS0JSQU5DSF9xZW11bWlwczY0ID89ICJzdGFuZGFyZC9tdGktbWFsdGE2NCIKKworU1JDUkVWX21hY2hpbmVfcWVtdWFybSA/PSAiM2MxMjQ1ZDE2MmNjYjU1ZGUxYWY0MmJjZjNkYmY2OTA0NTdiZjllNCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm02NCA/PSAiNTliOGM0ZjVlOGRkYjljMzNjNjJmZmYyMjIwNGZlMmIwZDhjNzAzZSIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzID89ICI0MTMyYTY5MWQwOTA4ZDEwYjhmMDdjZTdlY2UwMmU2ZGM5NGUxN2JjIgorU1JDUkVWX21hY2hpbmVfcWVtdXBwYyA/PSAiNTliOGM0ZjVlOGRkYjljMzNjNjJmZmYyMjIwNGZlMmIwZDhjNzAzZSIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYgPz0gIjU5YjhjNGY1ZThkZGI5YzMzYzYyZmZmMjIyMDRmZTJiMGQ4YzcwM2UiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2LTY0ID89ICI1OWI4YzRmNWU4ZGRiOWMzM2M2MmZmZjIyMjA0ZmUyYjBkOGM3MDNlIgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHM2NCA/PSAiMDMzZTFhYTYzMzQ2NTQ0OWVkZjU0NGViODFhZGRhMGNhZjE2ZWM2MCIKK1NSQ1JFVl9tYWNoaW5lID89ICI1OWI4YzRmNWU4ZGRiOWMzM2M2MmZmZjIyMjA0ZmUyYjBkOGM3MDNlIgorU1JDUkVWX21ldGEgPz0gIjQyOWY5ZTJmZjA2NDliOGM5MzQxMzQ1NjIyNTQ1ZDg3NGQ1ZTMwM2EiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tNC4xLmdpdDtuYW1lPW1hY2hpbmU7YnJhbmNoPSR7S0JSQU5DSH07IFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00LjE7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworTElOVVhfVkVSU0lPTiA/PSAiNC4xLjYiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICJxZW11YXJtfHFlbXVhcm02NHxxZW11eDg2fHFlbXVwcGN8cWVtdW1pcHN8cWVtdW1pcHM2NHxxZW11eDg2LTY0IgorCisjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKK0tFUk5FTF9FWFRSQV9GRUFUVVJFUyA/PSAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0tFUk5FTF9FWFRSQV9GRUFUVVJFU30iCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODY9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2LTY0PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiIGNmZy94MzIuc2NjIiwgIiIgLGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlLzAwMDEtRml4LWludmFsaWQtcG9pbnRlci1mcmVlLXdpdGgtdHJhY2UtY29sbGVjdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlLzAwMDEtRml4LWludmFsaWQtcG9pbnRlci1mcmVlLXdpdGgtdHJhY2UtY29sbGVjdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTJjNGUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2UvMDAwMS1GaXgtaW52YWxpZC1wb2ludGVyLWZyZWUtd2l0aC10cmFjZS1jb2xsZWN0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gZTRjYWQ5MDA5OTRjZjI4NmQ5NzE3OTZhOTQ3ZmVhNzgyZGZjNjY1MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZyYW5jaXMgR2lyYWxkZWF1IDxmcmFuY2lzLmdpcmFsZGVhdUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDE1IEp1biAyMDE1IDExOjQzOjAyIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBpbnZhbGlkIHBvaW50ZXIgZnJlZSB3aXRoIHRyYWNlIGNvbGxlY3Rpb24KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworUGF0Y2ggcHJvcG9zZWQgYnkgTGkgUm9uZ1FpbmcgcmVsYXRlZCB0byBidWcjIDc5MAorCitTaWduZWQtb2ZmLWJ5OiBNaWthZWwgQmVja2l1cyA8bWlrYWVsLmJlY2tpdXNAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEZyYW5jaXMgR2lyYWxkZWF1IDxmcmFuY2lzLmdpcmFsZGVhdUBnbWFpbC5jb20+CistLS0KKyBsaWIvY29udGV4dC5jIHwgOCArKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvY29udGV4dC5jIGIvbGliL2NvbnRleHQuYworaW5kZXggNDVhYWIzNC4uOGQzNzcwZiAxMDA2NDQKKy0tLSBhL2xpYi9jb250ZXh0LmMKKysrKyBiL2xpYi9jb250ZXh0LmMKK0BAIC03OSw3ICs3OSw3IEBAIGludCBidF9jb250ZXh0X2FkZF90cmFjZShzdHJ1Y3QgYnRfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpwYXRoLAorIAlzdHJ1Y3QgYnRfdHJhY2VfZGVzY3JpcHRvciAqdGQ7CisgCXN0cnVjdCBidF9mb3JtYXQgKmZtdDsKKyAJc3RydWN0IGJ0X3RyYWNlX2hhbmRsZSAqaGFuZGxlOworLQlpbnQgcmV0LCBjbG9zZXJldDsKKysJaW50IHJldDsKKyAKKyAJaWYgKCFjdHggfHwgIWZvcm1hdF9uYW1lIHx8ICghcGF0aCAmJiAhc3RyZWFtX2xpc3QpKQorIAkJcmV0dXJuIC1FSU5WQUw7CitAQCAtMTU5LDEwICsxNTksOCBAQCBpbnQgYnRfY29udGV4dF9hZGRfdHJhY2Uoc3RydWN0IGJ0X2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCwKKyAJcmV0dXJuIGhhbmRsZS0+aWQ7CisgCisgZXJyb3I6CistCWNsb3NlcmV0ID0gZm10LT5jbG9zZV90cmFjZSh0ZCk7CistCWlmIChjbG9zZXJldCkgeworLQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBpbiBjbG9zZV90cmFjZSBjYWxsYmFja1xuIik7CistCX0KKysJaWYgKGhhbmRsZSkKKysJCWJ0X2NvbnRleHRfcmVtb3ZlX3RyYWNlKGN0eCwgaGFuZGxlLT5pZCk7CisgZW5kOgorIAlyZXR1cm4gcmV0OworIH0KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2VfMS4yLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZV8xLjIuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzZiZTQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2VfMS4yLjQuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJCYWJlbHRyYWNlIC0gVHJhY2UgRm9ybWF0IEJhYmVsIFRvd2VyIgorREVTQ1JJUFRJT04gPSAiQmFiZWx0cmFjZSBwcm92aWRlcyB0cmFjZSByZWFkIGFuZCB3cml0ZSBsaWJyYXJpZXMgaW4gaG9zdCBzaWRlLCBhcyB3ZWxsIGFzIGEgdHJhY2UgY29udmVydGVyLCB3aGljaCB1c2VkIHRvIGNvbnZlcnQgTFRUbmcgMi4wIHRyYWNlcyBpbnRvIGh1bWFuLXJlYWRhYmxlIGxvZy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmVmZmljaW9zLmNvbS9iYWJlbHRyYWNlLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmx0dG5nLm9yZy9wcm9qZWN0cy9iYWJlbHRyYWNlIgorCitMSUNFTlNFID0gIk1JVCAmIEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NzZiYTE1ZGQ3NmEyNDhlMWRkNTI2YmNhMGUyMTI1ZmEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitERVBFTkRTID0gImdsaWItMi4wIHV0aWwtbGludXggcG9wdCBiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUiCisKK1NSQ1JFViA9ICI5MDM5NTgyNGVmYzAwN2RlODg3ODdhNmI4ZTQwMGEwN2M5ODBiZTFjIgorUFYgPSAiMS4yLjQrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmVmZmljaW9zLmNvbS9iYWJlbHRyYWNlLmdpdDticmFuY2g9c3RhYmxlLTEuMiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1pbnZhbGlkLXBvaW50ZXItZnJlZS13aXRoLXRyYWNlLWNvbGxlY3Rpb24ucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJKCBjZCAke1N9OyAke1N9L2Jvb3RzdHJhcCApCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctbW9kdWxlc19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctbW9kdWxlc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1NDRmZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy1tb2R1bGVzX2dpdC5iYgpAQCAtMCwwICsxLDMzIEBACitTRUNUSU9OID0gImRldmVsIgorU1VNTUFSWSA9ICJMaW51eCBUcmFjZSBUb29sa2l0IEtFUk5FTCBNT0RVTEUiCitERVNDUklQVElPTiA9ICJUaGUgbHR0bmctbW9kdWxlcyAyLjAgcGFja2FnZSBjb250YWlucyB0aGUga2VybmVsIHRyYWNlciBtb2R1bGVzIgorTElDRU5TRSA9ICJMR1BMdjIuMSAmIEdQTHYyICYgTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MTQxMmNhZjVhMWFhOTBkNmE0ODU4OGE0Nzk0YzBlYWMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3BsLTIuMC50eHQ7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xncGwtMi4xLnR4dDttZDU9MjQzYjcyNWQ3MWJiNWRmNGExZTU5MjBiMzQ0Yjg2YWQiCisKK2luaGVyaXQgbW9kdWxlCisKK1NSQ1JFViA9ICI3YTg4ZjhiNTA2OTZkZDcxZTgwYzA4NjYxMTU5Y2FmOGUxMTliZjUxIgorUFYgPSAiMi42LjIrZ2l0JHtTUkNQVn0iCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODZ8cG93ZXJwY3xhYXJjaDY0fG1pcHN8YXJtKS4qLWxpbnV4JworCitTUkNfVVJJID0gImdpdDovL2dpdC5sdHRuZy5vcmcvbHR0bmctbW9kdWxlcy5naXQ7YnJhbmNoPXN0YWJsZS0yLjYiCisKK2V4cG9ydCBJTlNUQUxMX01PRF9ESVI9Imtlcm5lbC9sdHRuZy1tb2R1bGVzIgorCitFWFRSQV9PRU1BS0UgKz0gIktFUk5FTERJUj0nJHtTVEFHSU5HX0tFUk5FTF9ESVJ9JyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBEZWxldGUgZW1wdHkgZGlyZWN0b3JpZXMgdG8gYXZvaWQgUUEgZmFpbHVyZXMgaWYgbm8gbW9kdWxlcyB3ZXJlIGJ1aWx0CisJZmluZCAke0R9L2xpYiAtZGVwdGggLXR5cGUgZCAtZW1wdHkgLWV4ZWMgcm1kaXIge30gXDsKK30KKworcHl0aG9uIGRvX3BhY2thZ2VfcHJlcGVuZCgpIHsKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGQuZ2V0VmFyKCdEJywgVHJ1ZSksICdsaWIvbW9kdWxlcycpKToKKyAgICAgICAgYmIud2FybigiJXM6IG5vIG1vZHVsZXMgd2VyZSBjcmVhdGVkOyB0aGlzIG1heSBiZSBkdWUgdG8gQ09ORklHX1RSQUNFUE9JTlRTIG5vdCBiZWluZyBlbmFibGVkIGluIHlvdXIga2VybmVsLiIgJSBkLmdldFZhcignUE4nLCBUcnVlKSkKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL2V4dGVybi1kZWNscy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9leHRlcm4tZGVjbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk5ZWY1NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9leHRlcm4tZGVjbHMucGF0Y2gKQEAgLTAsMCArMSw0NDIgQEAKK1RoaXMgbWFrZSB0aGUgZGVjbGFyYXRpb25zIHRvIGJlIGV4dGVybiBzbyB0aGV5IGRvbnQgZW5kIHVwCitpbiBkdXBsaWNhdGVzIGluIGRhdGEucmVsLnJvIHNlY3Rpb25zCisKK2F2b2lkIGVycm9ycyBsaWtlCisKK3wgLi4vLi4vLi4vc3JjL2NvbW1vbi8ubGlicy9saWJjb21tb24uYShtaS1sdHRuZy5vKTooLmRhdGEucmVsLnJvLmxvY2FsKzB4MCk6IG11bHRpcGxlIGRlZmluaXRpb24gb2YgYG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3RzJworfCBjb21tYW5kcy9lbmFibGVfZXZlbnRzLm86KC5ic3MrMHg0OCk6IGZpcnN0IGRlZmluZWQgaGVyZQorfCBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKK3wgTWFrZWZpbGU6NTAyOiByZWNpcGUgZm9yIHRhcmdldCAnbHR0bmcnIGZhaWxlZAorfCBtYWtlWzNdOiAqKiogW2x0dG5nXSBFcnJvciAxCisKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogZ2l0L3NyYy9jb21tb24vY29uZmlnL2NvbmZpZy1zZXNzaW9uLWFiaS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL2NvbW1vbi9jb25maWcvY29uZmlnLXNlc3Npb24tYWJpLmgKKysrKyBnaXQvc3JjL2NvbW1vbi9jb25maWcvY29uZmlnLXNlc3Npb24tYWJpLmgKK0BAIC0xOCw5NSArMTgsOTUgQEAKKyAjaWZuZGVmIENPTkZJR19TRVNTSU9OX0lOVEVSTkFMX0gKKyAjZGVmaW5lIENPTkZJR19TRVNTSU9OX0lOVEVSTkFMX0gKKyAKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY2hhbm5lbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY2hhbm5lbHM7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2RvbWFpbjsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZG9tYWluczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZXZlbnQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2V2ZW50czsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29udGV4dDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29udGV4dHM7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2F0dHJpYnV0ZXM7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2V4Y2x1c2lvbjsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZXhjbHVzaW9uczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZnVuY3Rpb25fYXR0cmlidXRlczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfcHJvYmVfYXR0cmlidXRlczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc3ltYm9sX25hbWU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2FkZHJlc3M7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X29mZnNldDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbmFtZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZW5hYmxlZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb3ZlcndyaXRlX21vZGU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3N1YmJ1Zl9zaXplOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9udW1fc3ViYnVmOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zd2l0Y2hfdGltZXJfaW50ZXJ2YWw7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3JlYWRfdGltZXJfaW50ZXJ2YWw7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X291dHB1dDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb3V0cHV0X3R5cGU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3RyYWNlZmlsZV9zaXplOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF90cmFjZWZpbGVfY291bnQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2xpdmVfdGltZXJfaW50ZXJ2YWw7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3R5cGU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2J1ZmZlcl90eXBlOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zZXNzaW9uOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zZXNzaW9uczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfcGVyZjsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29uZmlnOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zdGFydGVkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zbmFwc2hvdF9tb2RlOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9sb2dsZXZlbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbG9nbGV2ZWxfdHlwZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZmlsdGVyOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zbmFwc2hvdF9vdXRwdXRzOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb25zdW1lcl9vdXRwdXQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2Rlc3RpbmF0aW9uOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9wYXRoOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9uZXRfb3V0cHV0OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb250cm9sX3VyaTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZGF0YV91cmk7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X21heF9zaXplOworLQorLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZG9tYWluX3R5cGVfa2VybmVsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZG9tYWluX3R5cGVfdXN0OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZG9tYWluX3R5cGVfanVsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZG9tYWluX3R5cGVfbG9nNGo7CistCistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19idWZmZXJfdHlwZV9wZXJfcGlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfYnVmZmVyX3R5cGVfcGVyX3VpZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2J1ZmZlcl90eXBlX2dsb2JhbDsKKy0KKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX292ZXJ3cml0ZV9tb2RlX2Rpc2NhcmQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19vdmVyd3JpdGVfbW9kZV9vdmVyd3JpdGU7CistCistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19vdXRwdXRfdHlwZV9zcGxpY2U7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19vdXRwdXRfdHlwZV9tbWFwOworLQorLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfbG9nbGV2ZWxfdHlwZV9hbGw7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19sb2dsZXZlbF90eXBlX3JhbmdlOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfbG9nbGV2ZWxfdHlwZV9zaW5nbGU7CistCistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX2FsbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfdHJhY2Vwb2ludDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfcHJvYmU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX2Z1bmN0aW9uOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9mdW5jdGlvbl9lbnRyeTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfbm9vcDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfc3lzY2FsbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfa3Byb2JlOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9rcmV0cHJvYmU7CistCistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3BpZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcHJvY25hbWU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3ByaW87CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X25pY2U7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3ZwaWQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3RpZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfdnRpZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcHBpZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfdnBwaWQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3B0aHJlYWRfaWQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X2hvc3RuYW1lOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9pcDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcGVyZl90aHJlYWRfY291bnRlcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NoYW5uZWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jaGFubmVsczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2RvbWFpbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2RvbWFpbnM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9ldmVudDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2V2ZW50czsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbnRleHQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb250ZXh0czsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2F0dHJpYnV0ZXM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9leGNsdXNpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9leGNsdXNpb25zOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZnVuY3Rpb25fYXR0cmlidXRlczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3Byb2JlX2F0dHJpYnV0ZXM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zeW1ib2xfbmFtZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2FkZHJlc3M7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9vZmZzZXQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9uYW1lOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZW5hYmxlZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X292ZXJ3cml0ZV9tb2RlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc3ViYnVmX3NpemU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9udW1fc3ViYnVmOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc3dpdGNoX3RpbWVyX2ludGVydmFsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfcmVhZF90aW1lcl9pbnRlcnZhbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X291dHB1dDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X291dHB1dF90eXBlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfdHJhY2VmaWxlX3NpemU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF90cmFjZWZpbGVfY291bnQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9saXZlX3RpbWVyX2ludGVydmFsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfdHlwZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2J1ZmZlcl90eXBlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc2Vzc2lvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3Nlc3Npb25zOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfcGVyZjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbmZpZzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3N0YXJ0ZWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zbmFwc2hvdF9tb2RlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbG9nbGV2ZWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9sb2dsZXZlbF90eXBlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZmlsdGVyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc25hcHNob3Rfb3V0cHV0czsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbnN1bWVyX291dHB1dDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2Rlc3RpbmF0aW9uOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfcGF0aDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X25ldF9vdXRwdXQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb250cm9sX3VyaTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2RhdGFfdXJpOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbWF4X3NpemU7CisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZG9tYWluX3R5cGVfa2VybmVsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2RvbWFpbl90eXBlX3VzdDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV9qdWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZG9tYWluX3R5cGVfbG9nNGo7CisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfYnVmZmVyX3R5cGVfcGVyX3BpZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19idWZmZXJfdHlwZV9wZXJfdWlkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2J1ZmZlcl90eXBlX2dsb2JhbDsKKysKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19vdmVyd3JpdGVfbW9kZV9kaXNjYXJkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX292ZXJ3cml0ZV9tb2RlX292ZXJ3cml0ZTsKKysKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19vdXRwdXRfdHlwZV9zcGxpY2U7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfb3V0cHV0X3R5cGVfbW1hcDsKKysKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19sb2dsZXZlbF90eXBlX2FsbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19sb2dsZXZlbF90eXBlX3JhbmdlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2xvZ2xldmVsX3R5cGVfc2luZ2xlOworKworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfYWxsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfdHJhY2Vwb2ludDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX3Byb2JlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfZnVuY3Rpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9mdW5jdGlvbl9lbnRyeTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX25vb3A7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9zeXNjYWxsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfa3Byb2JlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfa3JldHByb2JlOworKworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcGlkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcHJvY25hbWU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wcmlvOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfbmljZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3ZwaWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF90aWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF92dGlkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcHBpZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3ZwcGlkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcHRocmVhZF9pZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X2hvc3RuYW1lOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfaXA7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wZXJmX3RocmVhZF9jb3VudGVyOworIAorICNlbmRpZiAvKiBDT05GSUdfU0VTU0lPTl9JTlRFUk5BTF9IICovCitJbmRleDogZ2l0L3NyYy9jb21tb24vbWktbHR0bmcuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9jb21tb24vbWktbHR0bmcuaAorKysrIGdpdC9zcmMvY29tbW9uL21pLWx0dG5nLmgKK0BAIC00OSwxMzMgKzQ5LDEzMyBAQCBzdHJ1Y3QgbWlfbHR0bmdfdmVyc2lvbiB7CisgfTsKKyAKKyAvKiBTdHJpbmdzIHJlbGF0ZWQgdG8gY29tbWFuZCAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9hY3Rpb247CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9hZGRfY29udGV4dDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2NhbGlicmF0ZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2NyZWF0ZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2Rlc3Ryb3k7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9kaXNhYmxlX2NoYW5uZWw7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9kaXNhYmxlX2V2ZW50OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfZW5hYmxlX2NoYW5uZWxzOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfZW5hYmxlX2V2ZW50OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfbGlzdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2xvYWQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9uYW1lOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfb3V0cHV0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc2F2ZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NldF9zZXNzaW9uOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc25hcHNob3Q7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdF9hZGQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdF9kZWw7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdF9saXN0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc25hcHNob3RfcmVjb3JkOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc3RhcnQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zdG9wOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc3VjY2VzczsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3ZlcnNpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfYWN0aW9uOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2FkZF9jb250ZXh0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2NhbGlicmF0ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9jcmVhdGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfZGVzdHJveTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9kaXNhYmxlX2NoYW5uZWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfZGlzYWJsZV9ldmVudDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9lbmFibGVfY2hhbm5lbHM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfZW5hYmxlX2V2ZW50OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2xpc3Q7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfbG9hZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9uYW1lOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX291dHB1dDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zYXZlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NldF9zZXNzaW9uOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X2FkZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdF9kZWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc25hcHNob3RfbGlzdDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdF9yZWNvcmQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc3RhcnQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc3RvcDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zdWNjZXNzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3ZlcnNpb247CisgCisgLyogU3RyaW5ncyByZWxhdGVkIHRvIHZlcnNpb24gY29tbWFuZCAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb247CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9jb21taXQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9kZXNjcmlwdGlvbjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX2xpY2Vuc2U7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9tYWpvcjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX21pbm9yOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fcGF0Y2hfbGV2ZWw7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9zdHI7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl93ZWI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fY29tbWl0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX2Rlc2NyaXB0aW9uOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX2xpY2Vuc2U7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fbWFqb3I7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fbWlub3I7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fcGF0Y2hfbGV2ZWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fc3RyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX3dlYjsKKyAKKyAvKiBTdHJpbmcgcmVsYXRlZCB0byBhIGx0dG5nX2V2ZW50X2ZpZWxkICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfZXZlbnRfZmllbGQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfZXZlbnRfZmllbGRzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9ldmVudF9maWVsZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfZXZlbnRfZmllbGRzOworIAorIC8qIFN0cmluZyByZWxhdGVkIHRvIGx0dG5nX2V2ZW50X2NvbnRleHQgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfY29udGV4dF90eXBlX3BlcmZfY291bnRlcjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfY29udGV4dF90eXBlX3BlcmZfY3B1X2NvdW50ZXI7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2NvbnRleHRfdHlwZV9wZXJmX3RocmVhZF9jb3VudGVyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfY29udGV4dF90eXBlX3BlcmZfY291bnRlcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2NvbnRleHRfdHlwZV9wZXJmX2NwdV9jb3VudGVyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfY29udGV4dF90eXBlX3BlcmZfdGhyZWFkX2NvdW50ZXI7CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gbHR0bmdfZXZlbnRfcGVyZl9jb3VudGVyX2N0eCAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3BlcmZfY291bnRlcl9jb250ZXh0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9wZXJmX2NvdW50ZXJfY29udGV4dDsKKyAKKyAvKiBTdHJpbmdzIHJlbGF0ZWQgdG8gcGlkICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfcGlkczsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9waWQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfcGlkX2lkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9waWRzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9waWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3BpZF9pZDsKKyAKKyAvKiBTdHJpbmdzIHJlbGF0ZWQgdG8gc2F2ZSBjb21tYW5kICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc2F2ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc2F2ZTsKKyAKKyAvKiBTdHJpbmdzIHJlbGF0ZWQgdG8gbG9hZCBjb21tYW5kICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfbG9hZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfbG9hZDsKKyAKKyAvKiBHZW5lcmFsIGVsZW1lbnQgb2YgbWlfbHR0bmcgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9lbXB0eTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9pZDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9ub3dyaXRlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3N1Y2Nlc3M7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9lbnVtOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3R5cGVfZmxvYXQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9pbnRlZ2VyOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3R5cGVfb3RoZXI7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9zdHJpbmc7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2VtcHR5OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9pZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfbm93cml0ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc3VjY2VzczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9lbnVtOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX2Zsb2F0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX2ludGVnZXI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3R5cGVfb3RoZXI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3R5cGVfc3RyaW5nOworIAorIC8qIFN0cmluZyByZWxhdGVkIHRvIGxvZ2xldmVsICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9hbGVydDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2NyaXQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1ZzsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX2Z1bmN0aW9uOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfbGluZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX21vZHVsZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX3Byb2Nlc3M7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19wcm9ncmFtOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfc3lzdGVtOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfdW5pdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2VtZXJnOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZXJyOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfaW5mbzsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX25vdGljZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX3Vua25vd247CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl93YXJuaW5nOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2FsZXJ0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2NyaXQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWc7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfZnVuY3Rpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfbGluZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19tb2R1bGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfcHJvY2VzczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19wcm9ncmFtOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX3N5c3RlbTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z191bml0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2VtZXJnOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2VycjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9pbmZvOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX25vdGljZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl91bmtub3duOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX3dhcm5pbmc7CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gbG9nbGV2ZWwgSlVMICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfYWxsOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2NvbmZpZzsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9maW5lOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2ZpbmVyOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2ZpbmVzdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9pbmZvOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX29mZjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9zZXZlcmU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfd2FybmluZzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfYWxsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9jb25maWc7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2ZpbmU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2ZpbmVyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9maW5lc3Q7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2luZm87CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX29mZjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfc2V2ZXJlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF93YXJuaW5nOworIAorIC8qIFN0cmluZyByZWxhdGVkIHRvIGxvZ2xldmVsIExvZzRqICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9vZmY7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9mYXRhbDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2Vycm9yOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfd2FybjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2luZm87CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9kZWJ1ZzsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX3RyYWNlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfYWxsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX29mZjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9mYXRhbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9lcnJvcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al93YXJuOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2luZm87CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfZGVidWc7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfdHJhY2U7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfYWxsOworIAorIC8qIFN0cmluZyByZWxhdGVkIHRvIGxvZ2xldmVsIHR5cGUgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfdHlwZV9hbGw7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3R5cGVfcmFuZ2U7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3R5cGVfc2luZ2xlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF90eXBlX3Vua25vd247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF90eXBlX2FsbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3R5cGVfcmFuZ2U7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF90eXBlX3NpbmdsZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3R5cGVfdW5rbm93bjsKKyAKKyAvKiBTdGluZyByZWxhdGVkIHRvIGx0dG5nX2NhbGlicmF0ZSAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NhbGlicmF0ZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jYWxpYnJhdGVfZnVuY3Rpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NhbGlicmF0ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY2FsaWJyYXRlX2Z1bmN0aW9uOworIAorIC8qIFN0cmluZyByZWxhdGVkIHRvIGEgbHR0bmdfc25hcHNob3QgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9jdHJsX3VybDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9kYXRhX3VybDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9tYXhfc2l6ZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9uX3B0cjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9zZXNzaW9uX25hbWU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3RzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9jdHJsX3VybDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3RfZGF0YV91cmw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X21heF9zaXplOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9uX3B0cjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3Rfc2Vzc2lvbl9uYW1lOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdHM7CisgCisgLyogVXRpbGl0eSBzdHJpbmcgZnVuY3Rpb24gICovCisgY29uc3QgY2hhciAqbWlfbHR0bmdfbG9nbGV2ZWxfc3RyaW5nKGludCB2YWx1ZSwgZW51bSBsdHRuZ19kb21haW5fdHlwZSBkb21haW4pOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL2x0dG5nLXRvb2xzLUZpeC1saXZlLXRpbWVyLWNhbGN1bGF0aW9uLWVycm9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL2x0dG5nLXRvb2xzLUZpeC1saXZlLXRpbWVyLWNhbGN1bGF0aW9uLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MTlkOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvbHR0bmctdG9vbHMtRml4LWxpdmUtdGltZXItY2FsY3VsYXRpb24tZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSAxNjE0OTZmYmUxNDY1ODE3YTc3YTUwYTExNzI3MzRkYWU4MWExM2VmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWlrYWVsIEJlY2tpdXMgPG1pa2FlbC5iZWNraXVzQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDEyIE1heSAyMDE1IDExOjExOjQ4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGx0dG5nLXRvb2xzOiBGaXggbGl2ZSB0aW1lciBjYWxjdWxhdGlvbiBlcnJvcgorCitUaGVyZSBpcyBhbiBjYWxjdWxhdGlvbiBlcnJvciBmb3IgbGl2ZSB0aW1lci4gVmFyaWFibGUgc3dpdGNoX3RpbWVyX2ludGVydmFsIGlzCitiYXNlZCBvbiBtaWNyb3NlY29uZCwgYW5kIGl0IGlzIG5vdCByaWdodCB0byBhc3NpZ24gc3dpdGNoX3RpbWVyX2ludGVydmFsIG1vZAorMTAwMDAwMCB0byB2YXIgdHZfbnNlYyB3aGljaCBpcyBiYXNlZCBvbiBuYW5vc2Vjb25kLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWlrYWVsIEJlY2tpdXMgPG1pa2FlbC5iZWNraXVzQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBKaWFuY2h1YW4gV2FuZyA8amlhbmNodWFuLndhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9jb21tb24vY29uc3VtZXItdGltZXIuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uL2NvbnN1bWVyLXRpbWVyLmMgYi9zcmMvY29tbW9uL2NvbnN1bWVyLXRpbWVyLmMKK2luZGV4IDE0MDgwNTIuLmM2MjAyYmEgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uL2NvbnN1bWVyLXRpbWVyLmMKKysrKyBiL3NyYy9jb21tb24vY29uc3VtZXItdGltZXIuYworQEAgLTM2OCw3ICszNjgsNyBAQCB2b2lkIGNvbnN1bWVyX3RpbWVyX3N3aXRjaF9zdGFydChzdHJ1Y3QgbHR0bmdfY29uc3VtZXJfY2hhbm5lbCAqY2hhbm5lbCwKKyAJY2hhbm5lbC0+c3dpdGNoX3RpbWVyX2VuYWJsZWQgPSAxOworIAorIAlpdHMuaXRfdmFsdWUudHZfc2VjID0gc3dpdGNoX3RpbWVyX2ludGVydmFsIC8gMTAwMDAwMDsKKy0JaXRzLml0X3ZhbHVlLnR2X25zZWMgPSBzd2l0Y2hfdGltZXJfaW50ZXJ2YWwgJSAxMDAwMDAwOworKwlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IChzd2l0Y2hfdGltZXJfaW50ZXJ2YWwgJSAxMDAwMDAwKSAqIDEwMDA7CisgCWl0cy5pdF9pbnRlcnZhbC50dl9zZWMgPSBpdHMuaXRfdmFsdWUudHZfc2VjOworIAlpdHMuaXRfaW50ZXJ2YWwudHZfbnNlYyA9IGl0cy5pdF92YWx1ZS50dl9uc2VjOworIAorQEAgLTQyNSw3ICs0MjUsNyBAQCB2b2lkIGNvbnN1bWVyX3RpbWVyX2xpdmVfc3RhcnQoc3RydWN0IGx0dG5nX2NvbnN1bWVyX2NoYW5uZWwgKmNoYW5uZWwsCisgCWNoYW5uZWwtPmxpdmVfdGltZXJfZW5hYmxlZCA9IDE7CisgCisgCWl0cy5pdF92YWx1ZS50dl9zZWMgPSBsaXZlX3RpbWVyX2ludGVydmFsIC8gMTAwMDAwMDsKKy0JaXRzLml0X3ZhbHVlLnR2X25zZWMgPSBsaXZlX3RpbWVyX2ludGVydmFsICUgMTAwMDAwMDsKKysJaXRzLml0X3ZhbHVlLnR2X25zZWMgPSAobGl2ZV90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDApICogMTAwMDsKKyAJaXRzLml0X2ludGVydmFsLnR2X3NlYyA9IGl0cy5pdF92YWx1ZS50dl9zZWM7CisgCWl0cy5pdF9pbnRlcnZhbC50dl9uc2VjID0gaXRzLml0X3ZhbHVlLnR2X25zZWM7CisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU3NTg4MTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL3NoCisKK21ha2UgLUMgdGVzdHMgaW5zdGFsbGNoZWNrCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW50ZXN0LTIuNC4wLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bnRlc3QtMi40LjAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU4YmNlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW50ZXN0LTIuNC4wLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCA1ODRmNTliLi5jMmJjYWJkIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMTIsMyArMTIsOSBAQCBkaXN0X2RvY19EQVRBID0gTElDRU5TRSBcCisgZGlzdF9ub2luc3RfREFUQSA9IENvZGluZ1N0eWxlCisgCisgRVhUUkFfRElTVCA9IGV4dHJhcy9sdHRuZy1iYXNoX2NvbXBsZXRpb24gZ3BsLTIuMC50eHQgbGdwbC0yLjEudHh0CisrCisraW5zdGFsbC1wdGVzdDoKKysJY3AgLXIgJChzcmNkaXIpL3Rlc3RzICQoREVTVERJUikKKysJZm9yIG0gaW4gJCQoZmluZCAkKERFU1RESVIpL3Rlc3RzIC1uYW1lIE1ha2VmaWxlKTsgZG8gXAorKyAgICAgICAgICBzZWQgLWkgLWUgJ3N8Xk1ha2VmaWxlOnxfTWFrZWZpbGU6fCcgJCRtOyBcCisrICAgICAgICBkb25lCitkaWZmIC0tZ2l0IGEvdGVzdHMvcnVuLnNoIGIvdGVzdHMvcnVuLnNoCitpbmRleCBjNmM1MGZkLi42NDU1MzU5IDEwMDc1NQorLS0tIGEvdGVzdHMvcnVuLnNoCisrKysgYi90ZXN0cy9ydW4uc2gKK0BAIC0xOSw0ICsxOSw3IEBACisgCisgWyAteiAiJDEiIF0gJiYgZWNobyAiRXJyb3I6IE5vIHRlc3RsaXN0LiBQbGVhc2Ugc3BlY2lmeSBhIHRlc3RsaXN0IHRvIHJ1bi4iICYmIGV4aXQgMQorIAorLXByb3ZlIC0tbWVyZ2UgLS1leGVjICcnIC0gPCAkMQorK3Byb3ZlIC0tbWVyZ2UgLXYgLS1leGVjICcnIC0gPCAkMSB8IHNlZCBcCisrICAtZSAnc3xeb2sgXCguKlwpfFBBU1M6IFwxfCcgXAorKyAgLWUgJ3N8Xm5vdCBvayBcKC4qXCl8RkFJTDogXDF8JyBcCisrICB8IGVncmVwIC1oICdQQVNTfEZBSUwnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVudGVzdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW50ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NWE1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVudGVzdC5wYXRjaApAQCAtMCwwICsxLDUyIEBACitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggNTg0ZjU5Yi4uYzJiY2FiZCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTEyLDMgKzEyLDkgQEAgZGlzdF9kb2NfREFUQSA9IExJQ0VOU0UgXAorIGRpc3Rfbm9pbnN0X0RBVEEgPSBDb2RpbmdTdHlsZQorIAorIEVYVFJBX0RJU1QgPSBleHRyYXMvbHR0bmctYmFzaF9jb21wbGV0aW9uIGdwbC0yLjAudHh0IGxncGwtMi4xLnR4dAorKworK2luc3RhbGwtcHRlc3Q6CisrCWNwIC1yICQoc3JjZGlyKS90ZXN0cyAkKERFU1RESVIpCisrCWZvciBtIGluICQkKGZpbmQgJChERVNURElSKS90ZXN0cyAtbmFtZSBNYWtlZmlsZSk7IGRvIFwKKysgICAgICAgICAgc2VkIC1pIC1lICdzfF5NYWtlZmlsZTp8X01ha2VmaWxlOnwnICQkbTsgXAorKyAgICAgICAgZG9uZQorZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDZkNWIwMGQuLjM3NzRmOWQgMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0xLDE0ICsxLDE3IEBACisgU1VCRElSUyA9IHV0aWxzIHJlZ3Jlc3Npb24gdW5pdCBzdHJlc3MKKyAKKy1pZiBVU0VfUFlUSE9OCistY2hlY2stYW06CisraW5zdGFsbGNoZWNrLWFtOgorIAkuL3J1bi5zaCB1bml0X3Rlc3RzCisgCS4vcnVuLnNoIGZhc3RfcmVncmVzc2lvbgorK2lmIFVTRV9QWVRIT04KKyAJLi9ydW4uc2ggd2l0aF9iaW5kaW5nc19yZWdyZXNzaW9uCistZWxzZQorK2VuZGlmCisrCisgY2hlY2stYW06CisgCS4vcnVuLnNoIHVuaXRfdGVzdHMKKyAJLi9ydW4uc2ggZmFzdF9yZWdyZXNzaW9uCisraWYgVVNFX1BZVEhPTgorKwkuL3J1bi5zaCB3aXRoX2JpbmRpbmdzX3JlZ3Jlc3Npb24KKyBlbmRpZgorIAorIGRpc3Rfbm9pbnN0X1NDUklQVFMgPSBydW4uc2ggdW5pdF90ZXN0cyBmYXN0X3JlZ3Jlc3Npb24gbG9uZ19yZWdyZXNzaW9uIHJvb3RfcmVncmVzc2lvbiB3aXRoX2JpbmRpbmdzX3JlZ3Jlc3Npb24KK2RpZmYgLS1naXQgYS90ZXN0cy9ydW4uc2ggYi90ZXN0cy9ydW4uc2gKK2luZGV4IGM2YzUwZmQuLjY0NTUzNTkgMTAwNzU1CistLS0gYS90ZXN0cy9ydW4uc2gKKysrKyBiL3Rlc3RzL3J1bi5zaAorQEAgLTE5LDQgKzE5LDcgQEAKKyAKKyBbIC16ICIkMSIgXSAmJiBlY2hvICJFcnJvcjogTm8gdGVzdGxpc3QuIFBsZWFzZSBzcGVjaWZ5IGEgdGVzdGxpc3QgdG8gcnVuLiIgJiYgZXhpdCAxCisgCistcHJvdmUgLS1tZXJnZSAtLWV4ZWMgJycgLSA8ICQxCisrcHJvdmUgLS1tZXJnZSAtdiAtLWV4ZWMgJycgLSA8ICQxIHwgc2VkIFwKKysgIC1lICdzfF5vayBcKC4qXCl8UEFTUzogXDF8JyBcCisrICAtZSAnc3xebm90IG9rIFwoLipcKXxGQUlMOiBcMXwnIFwKKysgIHwgZWdyZXAgLWggJ1BBU1N8RkFJTCcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29sc18yLjYuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29sc18yLjYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzk3YTk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzXzIuNi4wLmJiCkBAIC0wLDAgKzEsODIgQEAKK1NFQ1RJT04gPSAiZGV2ZWwiCitTVU1NQVJZID0gIkxpbnV4IFRyYWNlIFRvb2xraXQgQ29udHJvbCIKK0RFU0NSSVBUSU9OID0gIlRoZSBMaW51eCB0cmFjZSB0b29sa2l0IGlzIGEgc3VpdGUgb2YgdG9vbHMgZGVzaWduZWQgXAordG8gZXh0cmFjdCBwcm9ncmFtIGV4ZWN1dGlvbiBkZXRhaWxzIGZyb20gdGhlIExpbnV4IG9wZXJhdGluZyBzeXN0ZW0gXAorYW5kIGludGVycHJldCB0aGVtLiIKKworTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MDFkN2ZjNDQ5NmFhY2YzN2Q5MGRmOTBiOTBiMGNhYzEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3BsLTIuMC50eHQ7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xncGwtMi4xLnR4dDttZDU9MGYwZDcxNTAwZTZhNTdmZDI0ZDgyNWYzMzI0MmI5Y2EiCisKK0RFUEVORFMgPSAibGlidXJjdSBwb3B0IGx0dG5nLXVzdCBsaWJ4bWwyIgorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIm1ha2UgcGVybCBiYXNoIgorCitTUkNSRVYgPSAiZDUyMmMxZjE0Mjg1ZTJlOGIxMGI3YzBjZDAxMTg0NzY5NmZmZTc3OSIKKworUFlUSE9OX09QVElPTiA9ICJhbV9jdl9weXRob25fcHlleGVjZGlyPScke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMnIFwKKyAgICAgICAgICAgICAgICAgYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcj0nJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9zaXRlLXBhY2thZ2VzJyBcCisgICAgICAgICAgICAgICAgIFBZVEhPTl9JTkNMVURFPSctSSR7U1RBR0lOR19JTkNESVJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfScgXAorIgorUEFDS0FHRUNPTkZJRyA/Pz0gImx0dG5nLXVzdCIKK1BBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICItLWVuYWJsZS1weXRob24tYmluZGluZ3MgJHtQWVRIT05fT1BUSU9OfSwscHl0aG9uIHN3aWctbmF0aXZlIgorUEFDS0FHRUNPTkZJR1tsdHRuZy11c3RdID0gIi0tZW5hYmxlLWx0dG5nLXVzdCwgLS1kaXNhYmxlLWx0dG5nLXVzdCwgbHR0bmctdXN0IgorUEFDS0FHRUNPTkZJR1trbW9kXSA9ICItLWVuYWJsZS1rbW9kLCAtLWRpc2FibGUta21vZCwga21vZCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQubHR0bmcub3JnL2x0dG5nLXRvb2xzLmdpdDticmFuY2g9c3RhYmxlLTIuNiBcCisgICAgICAgICAgIGZpbGU6Ly9ydW50ZXN0LTIuNC4wLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2V4dGVybi1kZWNscy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vbHR0bmctdG9vbHMtRml4LWxpdmUtdGltZXItY2FsY3VsYXRpb24tZXJyb3IucGF0Y2ggXAorCSAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcHRlc3QgcGtnY29uZmlnIHVzZXJhZGQKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gInRyYWNpbmciCisKK2V4cG9ydCBLRVJORUxESVI9IiR7U1RBR0lOR19LRVJORUxfRElSfSIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9sdHRuZy9saWJleGVjLyogJHtkYXRhZGlyfS94bWwvbHR0bmcgXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcy8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vbHR0bmcvbGliZXhlYy8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvLmRlYnVnIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMvKi5hIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMvKi5sYSIKKworIyBTaW5jZSBmaWxlcyBhcmUgaW5zdGFsbGVkIGludG8gJHtsaWJkaXJ9L2x0dG5nL2xpYmV4ZWMgd2UgbWF0Y2ggCisjIHRoZSBsaWJleGVjIGluc2FuZSB0ZXN0IHNvIHNraXAgaXQuCisjIFB5dGhvbiBtb2R1bGUgbmVlZHMgdG8ga2VlcCBfbHR0bmcuc28KK0lOU0FORV9TS0lQXyR7UE59ID0gImxpYmV4ZWMgZGV2LXNvIgorSU5TQU5FX1NLSVBfJHtQTn0tZGJnID0gImxpYmV4ZWMiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIERlbGV0ZSBhIHNoaXBwZWQgbTQgZmlsZSB0aGF0IG92ZXJyaWRlcyBvdXIgcGF0Y2hlZCBvbmUKKwlybSAtZiAke1N9L2NvbmZpZy9saWJ4bWwubTQKK30KKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJY2htb2QgK3ggJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvdXRpbHMvdXRpbHMuc2gKKwlmb3IgaSBpbiBgZmluZCAke0R9JHtQVEVTVF9QQVRIfSAtcGVybSAvdSt4IC10eXBlIGZgOyBkbworCQlzZWQgLWUgInM6XCRURVNURElSLiovc3JjL2Jpbi9sdHRuZy9cJExUVE5HX0JJTjpcJExUVE5HX0JJTjpnIiBcCisJCSAgLWUgInM6XCRURVNURElSLy4uL3NyYy9iaW4vbHR0bmctc2Vzc2lvbmQvXCRTRVNTSU9ORF9CSU46XCRTRVNTSU9ORF9CSU46ZyIgXAorCQkgIC1lICJzOlwkRElSLy4uL3NyYy9iaW4vbHR0bmctc2Vzc2lvbmQvXCRTRVNTSU9ORF9CSU46XCRTRVNTSU9ORF9CSU46ZyIgXAorCQkgIC1lICJzOlwkVEVTVERJUi8uLi9zcmMvYmluL2x0dG5nLWNvbnN1bWVyZC86JHtsaWJkaXJ9L2x0dG5nL2xpYmV4ZWMvOmciIFwKKwkJICAtZSAiczpcJERJUi8uLi9zcmMvYmluL2x0dG5nLWNvbnN1bWVyZC86JHtsaWJkaXJ9L2x0dG5nL2xpYmV4ZWMvOmciIFwKKwkJICAtZSAiczpcJFRFU1RESVIvLi4vc3JjL2Jpbi9sdHRuZy1yZWxheWQvXCRSRUxBWURfQklOOlwkUkVMQVlEX0JJTjpnIiBcCisJCSAgLWUgInM6XCRESVIvLi4vc3JjL2Jpbi9sdHRuZy1zZXNzaW9uZC9sdHRuZy1zZXNzaW9uZDpcJFNFU1NJT05EX0JJTjpnIiBcCisJCSAgLWUgInM6XCRESVIvLi4vc3JjL2Jpbi9sdHRuZy1yZWxheWQvXCRSRUxBWURfQklOOlwkUkVMQVlEX0JJTjpnIiBcCisJCSAgLWUgInM6XCRESVIvLi4vYmluL2x0dG5nLXJlbGF5ZC9cJFJFTEFZRF9CSU46XCRSRUxBWURfQklOOmciIFwKKwkJICAtaSAkaQorCWRvbmUKKworCXNlZCAtZSAiczpzcmMvYmluL2x0dG5nLXNlc3Npb25kOiRiaW5kaXI6ZyIgXAorCSAgICAtZSAiczpzcmMvYmluL2x0dG5nLWNvbnN1bWVyZDoke2xpYmV4ZWNkaXJ9L2xpYmV4ZWMvOmciIFwKKwktaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy9yZWdyZXNzaW9uL3J1bi1yZXBvcnQucHkKKwlzZWQgLWUgInM6c3JjL2JpbjpiaW46ZyIgLWUgInM6bHQtOjpnIiBcCisJLWkgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvdXRpbHMvdXRpbHMuc2gKKwlzZWQgLWUgInM6aW5pX2NvbmZpZzpcLmxpYnNcL2luaV9jb25maWc6IiBcCisJLWkgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvdW5pdC9pbmlfY29uZmlnL3Rlc3RfaW5pX2NvbmZpZworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdC9sdHRuZy11c3QtRml4LWxpdmUtdGltZXItY2FsY3VsYXRpb24tZXJyb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzEyMGZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdC9sdHRuZy11c3QtRml4LWxpdmUtdGltZXItY2FsY3VsYXRpb24tZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSA2ZDAyYTZjMWFlYjFkMDUwZmZlN2M2NjI0YmFiOWFjZmE3NmZjMDVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWlrYWVsIEJlY2tpdXMgPG1pa2FlbC5iZWNraXVzQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDEyIE1heSAyMDE1IDExOjA0OjM0ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGx0dG5nLXVzdDpGaXggbGl2ZSB0aW1lciBjYWxjdWxhdGlvbiBlcnJvcgorCitUaGVyZSBpcyBhbiBjYWxjdWxhdGlvbiBlcnJvciBmb3IgbGl2ZSB0aW1lci4gVmFyaWFibGUgY2hhbi0+c3dpdGNoX3RpbWVyX2ludGVydmFsIGlzCitiYXNlZCBvbiBtaWNyb3NlY29uZCwgYW5kIGl0IGlzIG5vdCByaWdodCB0byBhc3NpZ24gY2hhbi0+c3dpdGNoX3RpbWVyX2ludGVydmFsIG1vZAorMTAwMDAwMCB0byB2YXIgdHZfbnNlYyB3aGljaCBpcyBiYXNlZCBvbiBuYW5vc2Vjb25kLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWlrYWVsIEJlY2tpdXMgPG1pa2FlbC5iZWNraXVzQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBKaWFuY2h1YW4gV2FuZyA8amlhbmNodWFuLndhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYnJpbmdidWZmZXIvcmluZ19idWZmZXJfZnJvbnRlbmQuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJyaW5nYnVmZmVyL3JpbmdfYnVmZmVyX2Zyb250ZW5kLmMgYi9saWJyaW5nYnVmZmVyL3JpbmdfYnVmZmVyX2Zyb250ZW5kLmMKK2luZGV4IGViNGU0ODYuLmUwMzc3YTMgMTAwNjQ0CistLS0gYS9saWJyaW5nYnVmZmVyL3JpbmdfYnVmZmVyX2Zyb250ZW5kLmMKKysrKyBiL2xpYnJpbmdidWZmZXIvcmluZ19idWZmZXJfZnJvbnRlbmQuYworQEAgLTUyOCw3ICs1MjgsNyBAQCB2b2lkIGxpYl9yaW5nX2J1ZmZlcl9jaGFubmVsX3N3aXRjaF90aW1lcl9zdGFydChzdHJ1Y3QgY2hhbm5lbCAqY2hhbikKKyAJfQorIAorIAlpdHMuaXRfdmFsdWUudHZfc2VjID0gY2hhbi0+c3dpdGNoX3RpbWVyX2ludGVydmFsIC8gMTAwMDAwMDsKKy0JaXRzLml0X3ZhbHVlLnR2X25zZWMgPSBjaGFuLT5zd2l0Y2hfdGltZXJfaW50ZXJ2YWwgJSAxMDAwMDAwOworKwlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IChjaGFuLT5zd2l0Y2hfdGltZXJfaW50ZXJ2YWwgJSAxMDAwMDAwKSAqIDEwMDA7CisgCWl0cy5pdF9pbnRlcnZhbC50dl9zZWMgPSBpdHMuaXRfdmFsdWUudHZfc2VjOworIAlpdHMuaXRfaW50ZXJ2YWwudHZfbnNlYyA9IGl0cy5pdF92YWx1ZS50dl9uc2VjOworIAorQEAgLTU4Miw3ICs1ODIsNyBAQCB2b2lkIGxpYl9yaW5nX2J1ZmZlcl9jaGFubmVsX3JlYWRfdGltZXJfc3RhcnQoc3RydWN0IGNoYW5uZWwgKmNoYW4pCisgCX0KKyAKKyAJaXRzLml0X3ZhbHVlLnR2X3NlYyA9IGNoYW4tPnJlYWRfdGltZXJfaW50ZXJ2YWwgLyAxMDAwMDAwOworLQlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IGNoYW4tPnJlYWRfdGltZXJfaW50ZXJ2YWwgJSAxMDAwMDAwOworKwlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IChjaGFuLT5yZWFkX3RpbWVyX2ludGVydmFsICUgMTAwMDAwMCkgKiAxMDAwOworIAlpdHMuaXRfaW50ZXJ2YWwudHZfc2VjID0gaXRzLml0X3ZhbHVlLnR2X3NlYzsKKyAJaXRzLml0X2ludGVydmFsLnR2X25zZWMgPSBpdHMuaXRfdmFsdWUudHZfbnNlYzsKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdC9sdHRuZy11c3QtZG9jLWV4YW1wbGVzLWRpc2FibGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1kb2MtZXhhbXBsZXMtZGlzYWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjhhOTg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdC9sdHRuZy11c3QtZG9jLWV4YW1wbGVzLWRpc2FibGUucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworRG9uJ3QgYnVpbGQgdGhlIGRvYyBleGFtcGxlcyAtIHdlIGRvbid0IG5lZWQgdGhlbSBhbmQgaW4gZmFjdCB0aGV5CituZXZlciBzdWNjZXNzZnVsbHkgYnVpbHQgaW4gcHJldmlvdXMgaXRlcmF0aW9ucyBvZiB0aGUgbHR0bmctdXN0CityZWNpcGUgYW55d2F5LgorCitTaWduZWQtb2ZmLWJ5OiBUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAaW50ZWwuY29tPgorCitJbmRleDogZG9jL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9kb2MvTWFrZWZpbGUuYW0KKysrKyBiL2RvYy9NYWtlZmlsZS5hbQorQEAgLTEsNCArMSw0IEBACistU1VCRElSUyA9IC4gZXhhbXBsZXMKKytTVUJESVJTID0gLgorIAorIGRpc3RfbWFuX01BTlMgPSBtYW4vbHR0bmctZ2VuLXRwLjEgXAorIAltYW4vbHR0bmctdXN0LjMgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTRhZmQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdF9naXQuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJMaW51eCBUcmFjZSBUb29sa2l0IFVzZXJzcGFjZSBUcmFjZXIgMi54IgorREVTQ1JJUFRJT04gPSAiVGhlIExUVG5nIFVTVCAyLnggcGFja2FnZSBjb250YWlucyB0aGUgdXNlcnNwYWNlIHRyYWNlciBsaWJyYXJ5IHRvIHRyYWNlIHVzZXJzcGFjZSBjb2Rlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vbHR0bmcub3JnL3VzdCIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmx0dG5nLm9yZy9wcm9qZWN0cy9sdHRuZy11c3QiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgTUlUICYgR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jOTYzZWIzNjZiNzgxMjUyYjBiZjBmZGYxNjI0ZDllOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zbnByaW50Zi9zbnByaW50Zi5jO2VuZGxpbmU9MzI7bWQ1PWQzZDU0NDk1OWQ4YTM3ODJiMmUwNzQ1MWJlMGE5MDNjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NucHJpbnRmL3ZhcmlvdXMuaDtlbmRsaW5lPTMxO21kNT04OWYyNTA5YjZiNDY4MmM0ZmM5NTI1NWVlYzRhYmU0NCIKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UKKworREVQRU5EUyA9ICJsaWJ1cmN1IHV0aWwtbGludXgiCitSREVQRU5EU18ke1BOfS1iaW4gPSAicHl0aG9uLWNvcmUiCisKKyMgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFmdGVyIHJlbmFtZQorUlBST1ZJREVTXyR7UE59ID0gImx0dG5nMi11c3QiCitSUkVQTEFDRVNfJHtQTn0gPSAibHR0bmcyLXVzdCIKK1JDT05GTElDVFNfJHtQTn0gPSAibHR0bmcyLXVzdCIKKworU1JDUkVWID0gImM0OWVlOTA0MGFkYTY5ODRjODgwNzU2NjE0ZThhNmY3ZmQ2NDViZDYiCitQRSA9ICIyIgorUFYgPSAiMi42LjIrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmx0dG5nLm9yZy9sdHRuZy11c3QuZ2l0O2JyYW5jaD1zdGFibGUtMi42IFwKKyAgICAgICAgICAgZmlsZTovL2x0dG5nLXVzdC1kb2MtZXhhbXBsZXMtZGlzYWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sdHRuZy11c3QtRml4LWxpdmUtdGltZXItY2FsY3VsYXRpb24tZXJyb3IucGF0Y2ggXAorICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkoIGNkICR7U307ICR7U30vYm9vdHN0cmFwICkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9tb2R1dGlscy1pbml0c2NyaXB0cy9maWxlcy9QRC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9tb2R1dGlscy1pbml0c2NyaXB0cy9maWxlcy9QRC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWFjNDljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL21vZHV0aWxzLWluaXRzY3JpcHRzL2ZpbGVzL1BELnBhdGNoCkBAIC0wLDAgKzEsOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK0luZGV4OiBtb2R1dGlscy1pbml0c2NyaXB0cy0xLjAvTElDRU5TRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG1vZHV0aWxzLWluaXRzY3JpcHRzLTEuMC9MSUNFTlNFCTIwMTAtMTItMDYgMTQ6MjY6MDMuNTcwMzM5MDAyIC0wODAwCitAQCAtMCwwICsxIEBACisrUHVibGljIERvbWFpbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL21vZHV0aWxzLWluaXRzY3JpcHRzL2ZpbGVzL21vZHV0aWxzLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL21vZHV0aWxzLWluaXRzY3JpcHRzL2ZpbGVzL21vZHV0aWxzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE3OGFkZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvZmlsZXMvbW9kdXRpbHMuc2gKQEAgLTAsMCArMSw1MiBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBtb2R1bGUtaW5pdC10b29scworIyBSZXF1aXJlZC1TdGFydDogICAgCisjIFJlcXVpcmVkLVN0b3A6ICAgICAKKyMgU2hvdWxkLVN0YXJ0OiAgICAgIGNoZWNrcm9vdAorIyBTaG91bGQtc3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogUHJvY2VzcyAvZXRjL21vZHVsZXMuCisjIERlc2NyaXB0aW9uOiAgICAgICBMb2FkIHRoZSBtb2R1bGVzIGxpc3RlZCBpbiAvZXRjL21vZHVsZXMuCisjIyMgRU5EIElOSVQgSU5GTworCitMT0FEX01PRFVMRT1tb2Rwcm9iZQorWyAtZiAvcHJvYy9tb2R1bGVzIF0gfHwgZXhpdCAwCitbIC1mIC9ldGMvbW9kdWxlcyBdIHx8IFsgLWQgL2V0Yy9tb2R1bGVzLWxvYWQuZCBdIHx8IGV4aXQgMAorWyAtZSAvc2Jpbi9tb2Rwcm9iZSBdIHx8IExPQURfTU9EVUxFPWluc21vZAorCitpZiBbICEgLWYgL2xpYi9tb2R1bGVzL2B1bmFtZSAtcmAvbW9kdWxlcy5kZXAgXTsgdGhlbgorCVsgIiRWRVJCT1NFIiAhPSBubyBdICYmIGVjaG8gIkNhbGN1bGF0aW5nIG1vZHVsZSBkZXBlbmRlbmNpZXMgLi4uIgorCWRlcG1vZCAtQWUKK2ZpCisKK2xvYWRlZF9tb2R1bGVzPSIgIgorCitwcm9jZXNzX2ZpbGUoKSB7CisJZmlsZT0kMQorCisJKGNhdCAkZmlsZTsgZWNobzsgKSB8CisJd2hpbGUgcmVhZCBtb2R1bGUgYXJncworCWRvCisJCWNhc2UgIiRtb2R1bGUiIGluCisJCQlcIyp8IiIpIGNvbnRpbnVlIDs7CisJCWVzYWMKKwkJWyAtbiAiJChlY2hvICRsb2FkZWRfbW9kdWxlcyB8IGdyZXAgIiAkbW9kdWxlICIpIiBdICYmIGNvbnRpbnVlCisJCVsgIiRWRVJCT1NFIiAhPSBubyBdICYmIGVjaG8gLW4gIiRtb2R1bGUgIgorCQlldmFsICIkTE9BRF9NT0RVTEUgJG1vZHVsZSAkYXJncyA+L2Rldi9udWxsIDI+JjEiCisJCWxvYWRlZF9tb2R1bGVzPSIke2xvYWRlZF9tb2R1bGVzfSR7bW9kdWxlfSAiCisJZG9uZQorfQorCitbICIkVkVSQk9TRSIgIT0gbm8gXSAmJiBlY2hvIC1uICJMb2FkaW5nIG1vZHVsZXM6ICIKK1sgLWYgL2V0Yy9tb2R1bGVzIF0gJiYgcHJvY2Vzc19maWxlIC9ldGMvbW9kdWxlcworCitbIC1kIC9ldGMvbW9kdWxlcy1sb2FkLmQgXSB8fCBleGl0IDAKKworZm9yIGYgaW4gL2V0Yy9tb2R1bGVzLWxvYWQuZC8qLmNvbmY7IGRvCisJcHJvY2Vzc19maWxlICRmCitkb25lCitbICIkVkVSQk9TRSIgIT0gbm8gXSAmJiBlY2hvCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL21vZHV0aWxzLWluaXRzY3JpcHRzL21vZHV0aWxzLWluaXRzY3JpcHRzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL21vZHV0aWxzLWluaXRzY3JpcHRzL21vZHV0aWxzLWluaXRzY3JpcHRzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNjcwY2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvbW9kdXRpbHMtaW5pdHNjcmlwdHMuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJJbml0c2NyaXB0IGZvciBhdXRvLWxvYWRpbmcga2VybmVsIG1vZHVsZXMgb24gYm9vdCIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT03YmY4N2ZjMzc5NzZlOTNlYzY2YWQ4NGZhYzU4YzA5OCIKK1NSQ19VUkkgPSAiZmlsZTovL21vZHV0aWxzLnNoIFwKKwkgICBmaWxlOi8vUEQucGF0Y2giCisKK1BSID0gInI3IgorCitTID0gIiR7V09SS0RJUn0iCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJtb2R1dGlscy5zaCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDA1IFMgLiIKKworaW5oZXJpdCB1cGRhdGUtcmMuZAorCitkb19jb21waWxlICgpIHsKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbW9kdXRpbHMuc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworfQorCitERVBFTkRTX2FwcGVuZCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCdzeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUnLCcnLGQpfSIKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCQlpZiBbIC1uICIkRCIgXTsgdGhlbgorCQkJT1BUUz0iLS1yb290PSREIgorCQlmaQorCQlzeXN0ZW1jdGwgJE9QVFMgbWFzayBtb2R1dGlscy5zZXJ2aWNlCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYzU2ZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUuaW5jCkBAIC0wLDAgKzEsNTggQEAKK1NVTU1BUlkgPSAiU3lzdGVtLVdpZGUgUHJvZmlsZXIiCitERVNDUklQVElPTiA9ICJPUHJvZmlsZSBpcyBhIHN5c3RlbS13aWRlIHByb2ZpbGVyIGZvciBMaW51eCBzeXN0ZW1zLCBjYXBhYmxlIFwKK29mIHByb2ZpbGluZyBhbGwgcnVubmluZyBjb2RlIGF0IGxvdyBvdmVyaGVhZC4iCitIT01FUEFHRSA9ICJodHRwOi8vb3Byb2ZpbGUuc291cmNlZm9yZ2UubmV0L25ld3MvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTE2MTkxJmF0aWQ9MTE2MTkxIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlib3BhZ2VudC9vcGFnZW50Lmg7YmVnaW5saW5lPTU7ZW5kbGluZT0yNjttZDU9NGYxNmY3MmM3YTQ5M2Q4YTQ3MDRhYTE4ZDAzZDE1YzYgXAorICAgICAgICAgICAgICAgICAgICIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK0RFUEVORFMgPSAicG9wdCBiaW51dGlscyIKK1JERVBFTkRTXyR7UE59ID0gImJpbnV0aWxzLXN5bWxpbmtzIgorUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLXZtbGludXgiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfSAke2xpYmRpcn0vJHtCUE59L2xpYioke1NPTElCU30gJHtkYXRhZGlyfS8ke0JQTn0iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vbGliKiR7U09MSUJTREVWfSAke2xpYmRpcn0vJHtCUE59L2xpYioubGEiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vbGliKi5hIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hY2luY2x1ZGUubTQgXAorICAgICAgICAgICBmaWxlOi8vYXV0b21ha2UtZm9yZWlnbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9vcHJvZmlsZS1jcm9zcy1jb21waWxlLXRlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9yb290LWhvbWUtZGlyLnBhdGNoIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgcHRlc3QKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1rZXJuZWw9JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSAtLXdpdGhvdXQteCBhY19jdl9wcm9nX1hTTFRQUk9DPSIKK2RvX2NvbmZpZ3VyZSAoKSB7CisJY3AgJHtXT1JLRElSfS9hY2luY2x1ZGUubTQgJHtTfS8KKwlhdXRvdG9vbHNfZG9fY29uZmlndXJlCit9CisKK0VYVFJBX09FTUFLRSA9ICJTUkNESVI9JHtQVEVTVF9QQVRIfS9saWJ1dGlsKysvdGVzdHMiCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgY2hlY2sKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlzdWJkaXJzPSJsaWJkYi90ZXN0cyBsaWJ1dGlsKysvdGVzdHMgbGlicmVnZXgvdGVzdHMgbGlidXRpbC90ZXN0cyBsaWJvcC90ZXN0cyBsaWJkYi90ZXN0cyAiCisJZm9yIHRvb2x0ZXN0IGluICR7c3ViZGlyc30KKwlkbworCQlmaW5kICR7dG9vbHRlc3R9IC1wZXJtIC91PXggLXR5cGUgZnwgY3BpbyAtcHZkdSAke0R9JHtQVEVTVF9QQVRIfQorCWRvbmUKKworCSMgbmVlZGVkIGJ5IHNvbWUgbGlib3AgdGVzdHMKKwljcCAtciBldmVudHMgJHtEfSR7UFRFU1RfUEFUSH0KKworCSMgbmVlZGVkIGJ5IGxpYnJlZ2V4IHJlZ2V4X3Rlc3QKKwljcCBsaWJyZWdleC9zdGwucGF0ICR7RH0ke1BURVNUX1BBVEh9L2xpYnJlZ2V4CisJY3AgbGlicmVnZXgvdGVzdHMvbWFuZ2xlZC1uYW1lICR7RH0ke1BURVNUX1BBVEh9L2xpYnJlZ2V4L3Rlc3RzCisKKwkjIG5lZWRlZCBieSBsaXR1dGlsKysgZmlsZV9tYW5pcF90ZXN0cworCWNwICR7U30vbGlidXRpbCsrL3Rlc3RzL2ZpbGVfbWFuaXBfdGVzdHMuY3BwIFwKKwkJbGlidXRpbCsrL3Rlc3RzL2ZpbGVfbWFuaXBfdGVzdHMubyAke0R9JHtQVEVTVF9QQVRIfS9saWJ1dGlsKysvdGVzdHMKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9hY2luY2x1ZGUubTQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvYWNpbmNsdWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZWNkOTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsNTgxIEBACitkbmwgQVhfS0VSTkVMX09QVElPTihvcHRpb24sIGFjdGlvbi1pZi1mb3VuZCwgYWN0aW9uLWlmLW5vdC1mb3VuZCkKK2RubCBzZWUgaWYgYXV0b2NvbmYuaCBkZWZpbmVzIHRoZSBvcHRpb24KK0FDX0RFRlVOKFtBWF9LRVJORUxfT1BUSU9OXSwgWworU0FWRV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPSItSSRLSU5DIC1PMiAtRF9fS0VSTkVMX18iCitBQ19UUllfQ09NUElMRSggWyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD5dLAorWworI2lmbmRlZiAkMQorYnJlYWtfbWVfaGFyZChcXFwpOworI2VuZGlmCitdLFskMl0sWyQzXSwpCitDRkxBR1M9JFNBVkVfQ0ZMQUdTCitdKQorCitkbmwgSGFuZGxlIHRoZSAyLjQgbW9kdWxlIGluc2lkZSBtb2R1bGUvCitBQ19ERUZVTihbQVhfQ09ORklHX01PRFVMRV0sCitbCitpZiB0ZXN0ICEgLWYgJEtJTkMvbGludXgvYXV0b2NvbmYuaDsgdGhlbgorCUFDX01TR19FUlJPUihbbm8gc3VpdGFibHkgY29uZmlndXJlZCBrZXJuZWwgaW5jbHVkZSB0cmVlIGZvdW5kXSkKK2ZpCisKK2RubCAgLS0tIEdldCBMaW51eCBrZXJuZWwgdmVyc2lvbiBhbmQgY29tcGlsZSBwYXJhbWV0ZXJzIC0tLQorCitBQ19TVUJTVChLVkVSUykKK0FDX01TR19DSEVDS0lORyhbZm9yIGtlcm5lbCB2ZXJzaW9uXSkKK2RubCBpdCdzIGxpa2UgdGhpcyB0byBoYW5kbGUgbWFuZHJha2UncyBmdWJhciB2ZXJzaW9uLmggLSBidWcgIzQ3MTQ0OAorZXZhbCBLVkVSUz1gZ2NjIC1JJEtJTkMgLUUgLWRNICRLSU5DL2xpbnV4L3ZlcnNpb24uaCB8IGdyZXAgLXcgVVRTX1JFTEVBU0UgfCBhd2sgJ3twcmludCAkW10zfSdgCitBQ19NU0dfUkVTVUxUKFskS1ZFUlNdKQorY2FzZSAiJEtWRVJTIiBpbgorMi4yLip8Mi40LiopIDs7CisqKSBBQ19NU0dfRVJST1IoW1Vuc3VwcG9ydGVkIGtlcm5lbCB2ZXJzaW9uXSkKK2VzYWMKKworZG5sIENoZWNrIGZvciB0aGUgbWluaW1hbCBrZXJuZWwgdmVyc2lvbiBzdXBwb3J0ZWQKK0FDX01TR19DSEVDS0lORyhba2VybmVsIHZlcnNpb25dKQorQVhfS0VSTkVMX1ZFUlNJT04oMiwgMiwgMTAsIDw9LCBBQ19NU0dfUkVTVUxUKFtva10pLCBBQ19NU0dfRVJST1IoW2NoZWNrIGh0bWwgZG9jdW1lbnRhdGlvbiBpbnN0YWxsIHNlY3Rpb25dKSkKKworZG5sIGxpbnV4L3NwaW5sb2NrLmggYWRkZWQgYXQgc29tZSBwb2ludCBpbiBwYXN0CitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkS0lOQy9saW51eC9zcGlubG9jay5oXSkKK2lmIHRlc3QgLWYgJEtJTkMvbGludXgvc3BpbmxvY2suaDsgdGhlbgorCUVYVFJBX0NGTEFHU19NT0RVTEU9IiRFWFRSQV9DRkxBR1NfTU9EVUxFIC1ESEFWRV9MSU5VWF9TUElOTE9DS19IRUFERVIiCisJQUNfTVNHX1JFU1VMVChbeWVzXSkKK2Vsc2UKKwlBQ19NU0dfUkVTVUxUKFtub10pCitmaQorCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBydGNfbG9ja10pCitnY2MgLUkkS0lOQyAtRSAkS0lOQy9saW51eC9tYzE0NjgxOHJ0Yy5oIHwgZ3JlcCBydGNfbG9jayA+L2Rldi9udWxsCitpZiB0ZXN0ICIkPyIgLWVxIDA7IHRoZW4KKwlFWFRSQV9DRkxBR1NfTU9EVUxFPSIkRVhUUkFfQ0ZMQUdTX01PRFVMRSAtRFJUQ19MT0NLIgorCUFDX01TR19SRVNVTFQoW3llc10pCitlbHNlCisJQUNfTVNHX1JFU1VMVChbbm9dKQorZmkKKwkgCithcmNoPSJ1bmtub3duIgorQUNfTVNHX0NIRUNLSU5HKGZvciB4ODYtNjQgYXJjaGl0ZWN0dXJlKQorQVhfS0VSTkVMX09QVElPTihDT05GSUdfWDg2XzY0LCB4ODY2ND0xLCB4ODY2ND0wKQorQVhfTVNHX1JFU1VMVF9ZTigkeDg2NjQpCitCVUlMRF9IQU1NRVI9bm8KK2lmIHRlc3QgIiR4ODY2NCIgLWVxIDE7IHRoZW4KKwlhcmNoPSJ4ODYiCisJQlVJTERfSEFNTUVSPXllcworZWxzZQorCUFDX01TR19DSEVDS0lORyhmb3IgeDg2IGFyY2hpdGVjdHVyZSkKKwlBWF9LRVJORUxfT1BUSU9OKENPTkZJR19YODYsIHg4Nj0xLCB4ODY9MCkKKwlBWF9LRVJORUxfT1BUSU9OKENPTkZJR19YODZfV1BfV09SS1NfT0ssIHg4Nj0xLCB4ODY9JHg4NikKKwlBWF9NU0dfUkVTVUxUX1lOKCR4ODYpCisJdGVzdCAiJHg4NiIgPSAxICYmIGFyY2g9Ing4NiIKKwkKKwlpZiB0ZXN0ICIkYXJjaCIgPSAidW5rbm93biI7IHRoZW4KKyAgCQlBQ19NU0dfQ0hFQ0tJTkcoZm9yIGlhNjQgYXJjaGl0ZWN0dXJlKQorICAJCUFYX0tFUk5FTF9PUFRJT04oQ09ORklHX0lBNjQsIGlhNjQ9MSwgaWE2ND0wKQorICAJCUFYX01TR19SRVNVTFRfWU4oJGlhNjQpCisgIAkJdGVzdCAiJGlhNjQiID0gMSAmJiBhcmNoPSJpYTY0IgorCWZpCisKK2ZpCitBQ19TVUJTVChCVUlMRF9IQU1NRVIpCisKK3Rlc3QgIiRhcmNoIiA9ICJ1bmtub3duIiAmJiBBQ19NU0dfRVJST1IoVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlKQorCitkbmwgY2hlY2sgdG8gc2VlIGlmIGtlcm5lbCB2ZXJpb24gYXBwcm9wcmlhdGUgZm9yIGFyY2gKK0FDX01TR19DSEVDS0lORyhhcmNoL2tlcm5lbCB2ZXJzaW9uIGNvbWJpbmF0aW9uKQorY2FzZSAiJGFyY2giIGluCitpYTY0KQorCUFYX0tFUk5FTF9WRVJTSU9OKDIsIDQsIDE4LCA8LCBBQ19NU0dfUkVTVUxUKFtva10pLAorCQlBQ19NU0dfRVJST1IoW3Vuc3VwcG9ydGVkIGFyY2gva2VybmVsXSkpIDs7CisqKSBBQ19NU0dfUkVTVUxUKFtva10pCitlc2FjCisKK2RubCBmb3Igbm93IHdlIGRvIG5vdCBzdXBwb3J0IFBSRUVNUFQgcGF0Y2gKK0FDX01TR19DSEVDS0lORyhbZm9yIHByZWVtcHQgcGF0Y2hdKQorQVhfS0VSTkVMX09QVElPTihDT05GSUdfUFJFRU1QVCxwcmVlbXB0PTEscHJlZW1wdD0wKQorQVhfTVNHX1JFU1VMVF9ZTihbJHByZWVtcHRdKQordGVzdCAiJHByZWVtcHQiID0gMCB8fCBBQ19NU0dfRVJST1IoW3Vuc3VwcG9ydGVkIGtlcm5lbCBjb25maWd1cmF0aW9uIDogQ09ORklHX1BSRUVNUFRdKQorCitBQ19TVUJTVChLSU5DKQorCitNT0RJTlNUQUxMRElSPS9saWIvbW9kdWxlcy8kS1ZFUlMKKyAKK09QUk9GSUxFX01PRFVMRV9BUkNIPSRhcmNoCitBQ19TVUJTVChPUFJPRklMRV9NT0RVTEVfQVJDSCkKK10KKykKKworZG5sIEFYX01TR19SRVNVTFRfWU4oYSkKK2RubCByZXN1bHRzICJ5ZXMiIGlmZiBhPT0xLCAibm8iIGVsc2UKK0FDX0RFRlVOKFtBWF9NU0dfUkVTVUxUX1lOXSwgW3g9bm8KK3Rlc3QgIngkMSIgPSAieDEiICYmIHg9eWVzCitBQ19NU0dfUkVTVUxUKCR4KV0pCisKK2RubCBBWF9NQUxMT0NfQVRUUklCVVRFIC0gc2VlIGlmIGdjYyB3aWxsIHRha2UgX19hdHRyaWJ1dGVfXygobWFsbG9jKSkKK0FDX0RFRlVOKFtBWF9NQUxMT0NfQVRUUklCVVRFXSwKK1sKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBtYWxsb2MgYXR0cmlidXRlIGlzIHVuZGVyc3Rvb2RdKQorU0FWRV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPSItV2Vycm9yICRDRkxBR1MiCitBQ19UUllfQ09NUElMRSgsWwordm9pZCBtb25rZXkoKSBfX2F0dHJpYnV0ZV9fKChtYWxsb2MpKTsKK10sQUNfTVNHX1JFU1VMVChbeWVzXSk7IEFDX0RFRklORShNQUxMT0NfQVRUUklCVVRFX09LLCAxLCBbd2hldGhlciBtYWxsb2MgYXR0cmlidXRlIGlzIHVuZGVyc3Rvb2RdKSwgQUNfTVNHX1JFU1VMVChbbm9dKSkKK0NGTEFHUz0kU0FWRV9DRkxBR1MgCitdCispCisKK2RubCBidWlsdGluX2V4cGVjdCBpcyB1c2VkIGluIG1vZHVsZSB3ZSBjYW4ndCBhZGQgdGhhdCBpbiBjb25maWcuaAorQUNfREVGVU4oW0FYX0JVSUxUSU5fRVhQRUNUXSwKK1sKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBfX2J1aWx0aW5fZXhwZWN0IGlzIHVuZGVyc3Rvb2RdKQorU0FWRV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPSItV2Vycm9yICRDRkxBR1MiCitBQ19UUllfTElOSygsWworaW50IGk7CitpZiAoX19idWlsdGluX2V4cGVjdChpLCAwKSkgeyB9CitdLAorQUNfTVNHX1JFU1VMVChbeWVzXSk7IEVYVFJBX0NGTEFHU19NT0RVTEU9IiRFWFRSQV9DRkxBR1NfTU9EVUxFIC1ERVhQRUNUX09LIiwKK0FDX01TR19SRVNVTFQoW25vXSk7KQorQ0ZMQUdTPSRTQVZFX0NGTEFHUyAKK10KKykgCisKK2RubCBBWF9FWFRSQV9ESVJTIC0gTGV0IHVzZXIgc3BlY2lmeSBleHRyYSBkaXJzIGZvciBpbmNsdWRlL2xpYnMKK0FDX0RFRlVOKFtBWF9FWFRSQV9ESVJTXSwKK1sKK0FDX0FSR19XSVRIKGV4dHJhLWluY2x1ZGVzLAorWyAgLS13aXRoLWV4dHJhLWluY2x1ZGVzPURJUiAgICBhZGQgZXh0cmEgaW5jbHVkZSBwYXRoc10sCisgIHVzZV9leHRyYV9pbmNsdWRlcz0iJHdpdGh2YWwiLAorICB1c2VfZXh0cmFfaW5jbHVkZXM9Tk8KKykKK2lmIHRlc3QgLW4gIiR1c2VfZXh0cmFfaW5jbHVkZXMiICYmIFwKKyAgICAgICAgdGVzdCAiJHVzZV9leHRyYV9pbmNsdWRlcyIgIT0gIk5PIjsgdGhlbgorICBhY19zYXZlX2lmcz0kSUZTCisgIElGUz0nOicKKyAgZm9yIGRpciBpbiAkdXNlX2V4dHJhX2luY2x1ZGVzOyBkbworICAgIGV4dHJhX2luY2x1ZGVzPSIkZXh0cmFfaW5jbHVkZXMgLUkkZGlyIgorICBkb25lCisgIElGUz0kYWNfc2F2ZV9pZnMKKyAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkZXh0cmFfaW5jbHVkZXMiCitmaQorCitBQ19BUkdfV0lUSChleHRyYS1saWJzLAorWyAgLS13aXRoLWV4dHJhLWxpYnM9RElSICAgICAgICBhZGQgZXh0cmEgbGlicmFyeSBwYXRoc10sCisgIHVzZV9leHRyYV9saWJzPSR3aXRodmFsLAorICB1c2VfZXh0cmFfbGlicz1OTworKQoraWYgdGVzdCAtbiAiJHVzZV9leHRyYV9saWJzIiAmJiBcCisgICAgICAgIHRlc3QgIiR1c2VfZXh0cmFfbGlicyIgIT0gIk5PIjsgdGhlbgorICAgYWNfc2F2ZV9pZnM9JElGUworICAgSUZTPSc6JworICAgZm9yIGRpciBpbiAkdXNlX2V4dHJhX2xpYnM7IGRvCisgICAgIGV4dHJhX2xpYnJhcmllcz0iJGV4dHJhX2xpYnJhcmllcyAtTCRkaXIiCisgICBkb25lCisgICBJRlM9JGFjX3NhdmVfaWZzCisgICBMREZMQUdTPSIkTERGTEFHUyAkZXh0cmFfbGlicmFyaWVzIgorZmkKK10KKykKKworZG5sIEFYX1BPUFRfQ09OU1QgLSBjaGVjayBwb3B0IHByb3RvdHlwZQorQUNfREVGVU4oW0FYX1BPUFRfQ09OU1RdLAorWworQUNfTVNHX0NIRUNLSU5HKFtwb3B0IHByb3RvdHlwZV0pCitTQVZFX0NYWEZMQUdTPSRDWFhGTEFHUworQ1hYRkxBR1M9Ii1XZXJyb3IgJENYWEZMQUdTIgorQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxwb3B0Lmg+XSwKK1sKK2ludCBjOyBjaGFyICoqdjsKK3BvcHRHZXRDb250ZXh0KDAsIGMsIHYsIDAsIDApOworXSwKK0FDX01TR19SRVNVTFQoW3Rha2VzIGNoYXIgKipdKTssCitBQ19NU0dfUkVTVUxUKFt0YWtlcyBjb25zdCBjaGFyICoqXSk7IEFDX0RFRklORShDT05TVF9QT1BULCAxLCBbd2hldGhlciBwb3B0IHByb3RvdHlwZSB0YWtlcyBhIGNvbnN0IGNoYXIgKipdKSkKK0NYWEZMQUdTPSIkU0FWRV9DWFhGTEFHUyIKK10KKykKKworZG5sIEFYX0NIRUNLX1NTVFJFQU0gLSBjaGVjayBpZiBsb2NhbCBzc3RyZWFtIGlzIG5lZWRlZCB0byBjb21waWxlIE9LCitBQ19ERUZVTihbQVhfQ0hFQ0tfU1NUUkVBTV0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gdXNlIGluY2x1ZGVkIHNzdHJlYW1dKQorQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzc3RyZWFtPl0sIFtdLCAKK0FDX01TR19SRVNVTFQoW25vXSk7LAorQUNfTVNHX1JFU1VMVChbeWVzXSk7IE9QX0NYWEZMQUdTPSIkT1BfQ1hYRkxBR1MgLUlcJHt0b3Bfc3JjZGlyfS9pbmNsdWRlIikKK10KKykKKworZG5sIEFYX0NIRUNLX1RZUEVERUYodHlwZWRlZl9uYW1lLCB0eXBlLCBhY3Rpb24taWYtdHJ1ZSwgYWN0aW9uLWlmLWZhbHNlKQorZG5sIGV4ZWMgYWN0aW9uLWlmLXRydWUgaWYgdHlwZWRlZl9uYW1lIGlzIGEgdHlwZWRlZiB0byB0eXBlIGVsc2UgZXhlYyAKK2RubCBhY3Rpb24taWYtZmFsc2UKK2RubCBjdXJyZW50bHkgd29yayBvbmx5IHdpdGggdHlwZSB0eXBlZGVmJ2VkIGluIHN0ZGRlZi5oCitBQ19ERUZVTihbQVhfQ0hFQ0tfVFlQRURFRl0sIFsKK2RubCBBQ19MQU5HX1BVU0goQykgbm90IGluIGF1dG9jb25mIDIuMTMKK0FDX0xBTkdfU0FWRQorQUNfTEFOR19DCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1XZXJyb3IgJENGTEFHUyIKKworQUNfVFJZX0NPTVBJTEUoCisgIFsKKyAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICBdLAorICBbCisgIHR5cGVkZWYgdm9pZCAoKmZjdDEpKCQxKTsKKyAgdHlwZWRlZiB2b2lkICgqZmN0MikoJDIpOworICBmY3QxIGYxID0gMDsKKyAgZmN0MiBmMiA9IDA7CisgIGlmIChmMSA9PSBmMikge30KKyAgXSwKK1skM10sWyQ0XSkKKworQ0ZMQUdTPSRTQVZFX0NGTEFHUworQUNfTEFOR19SRVNUT1JFCitdKQorCisKK2RubCBBWF9UWVBFREVGRURfTkFNRSh0eXBlZGVmX25hbWUsIGNhbmRpZGF0ZV9saXN0LCB2YXJfbmFtZSkKK2RubCBzZXQgdmFyX25hbWUgdG8gdGhlIHR5cGVkZWYgbmFtZSBvZiAkMSB3aGljaCBtdXN0IGJlIGluIGNhbmRpdGF0ZV9saXN0CitkbmwgZWxzZSBwcm9kdWNlIGEgZmF0YWwgZXJyb3IKK0FDX0RFRlVOKFtBWF9UWVBFREVGRURfTkFNRV0sIFsKKwlBQ19NU0dfQ0hFQ0tJTkcoW3R5cGUgb2YgJDFdKQorCWZvciBmIGluICQyOyBkbworCQlBWF9DSEVDS19UWVBFREVGKCQxLCAkZiwgJDM9IiRmIiwgJDM9IiIpCisJCWlmIHRlc3QgLW4gIiR7JDN9IjsgdGhlbgorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJaWYgdGVzdCAtbiAiJHskM30iOyB0aGVuCisJCUFDX01TR19SRVNVTFQoWyR7JDN9XSkKKwllbHNlCisJCUFDX01TR19FUlJPUihbbm90IGZvdW5kXSkKKwlmaQorXSkKKworZG5sIGZpbmQgYSBiaW5hcnkgaW4gdGhlIHBhdGgKK0FDX0RFRlVOKFtRVF9GSU5EX1BBVEhdLAorWworCUFDX01TR19DSEVDS0lORyhbZm9yICQxXSkKKwlBQ19DQUNIRV9WQUwocXRfY3ZfcGF0aF8kMSwKKwlbCisJCXF0X2N2X3BhdGhfJDE9Ik5PTkUiCisJCWlmIHRlc3QgLW4gIiQkMiI7IHRoZW4KKwkJCXF0X2N2X3BhdGhfJDE9IiQkMiI7CisJCWVsc2UKKwkJCWRpcnM9IiQzIgorCQkJcXRfc2F2ZV9JRlM9JElGUworCQkJSUZTPSc6JworCQkJZm9yIGRpciBpbiAkUEFUSDsgZG8KKwkJCQlkaXJzPSIkZGlycyAkZGlyIgorCQkJZG9uZQorCQkJSUZTPSRxdF9zYXZlX0lGUworIAorCQkJZm9yIGRpciBpbiAkZGlyczsgZG8KKwkJCQlpZiB0ZXN0IC14ICIkZGlyLyQxIjsgdGhlbgorCQkJCQlpZiB0ZXN0IC1uICIkNSI7IHRoZW4KKwkJCQkJCWV2YWxzdHI9IiRkaXIvJDEgJDUgMj4mMSAiCisJCQkJCQlpZiBldmFsICRldmFsc3RyOyB0aGVuCisJCQkJCQkJcXRfY3ZfcGF0aF8kMT0iJGRpci8kMSIKKwkJCQkJCQlicmVhaworCQkJCQkJZmkKKwkJCQkJZWxzZQorCQkJCQkJcXRfY3ZfcGF0aF8kMT0iJGRpci8kMSIKKwkJCQkJCWJyZWFrCisJCQkJCWZpCisJCQkJZmkKKwkJCWRvbmUKKwkJZmkKKwldKQorIAorCWlmIHRlc3QgLXogIiRxdF9jdl9wYXRoXyQxIiB8fCB0ZXN0ICIkcXRfY3ZfcGF0aF8kMSIgPSAiTk9ORSI7IHRoZW4KKwkJQUNfTVNHX1JFU1VMVChub3QgZm91bmQpCisJCSQ0CisJZWxzZQorCQlBQ19NU0dfUkVTVUxUKCRxdF9jdl9wYXRoXyQxKQorCQkkMj0kcXRfY3ZfcGF0aF8kMQorCWZpCitdKQorCitkbmwgRmluZCB0aGUgdWljIGNvbXBpbGVyIG9uIHRoZSBwYXRoIG9yIGluIHF0X2N2X2RpcgorQUNfREVGVU4oW1FUX0ZJTkRfVUlDXSwKK1sKKwlRVF9GSU5EX1BBVEgodWljLCBhY191aWMsICRxdF9jdl9kaXIvYmluKQorCWlmIHRlc3QgLXogIiRhY191aWMiIC1hICIkRkFUQUwiID0gMTsgdGhlbgorCQlBQ19NU0dfRVJST1IoW3VpYyBiaW5hcnkgbm90IGZvdW5kIGluIFwkUEFUSCBvciAkcXRfY3ZfZGlyL2JpbiAhXSkKKwlmaQorXSkKKyAKK2RubCBGaW5kIHRoZSByaWdodCBtb2MgaW4gcGF0aC9xdF9jdl9kaXIKK0FDX0RFRlVOKFtRVF9GSU5EX01PQ10sCitbCisJUVRfRklORF9QQVRIKG1vYzIsIGFjX21vYzIsICRxdF9jdl9kaXIvYmluKQorCVFUX0ZJTkRfUEFUSChtb2MsIGFjX21vYzEsICRxdF9jdl9kaXIvYmluKQorCisJaWYgdGVzdCAtbiAiJGFjX21vYzEiIC1hIC1uICIkYWNfbW9jMiI7IHRoZW4KKwkJZG5sIGZvdW5kIGJvdGguIFByZWZlciBRdDMncyBpZiBpdCBleGlzdHMgZWxzZSBtb2MyCisJCSRhY19tb2MxIC12IDI+JjEgfCBncmVwICJRdCAzIiA+L2Rldi9udWxsCisJCWlmIHRlc3QgIiQ/IiA9IDA7IHRoZW4KKwkJCWFjX21vYz0kYWNfbW9jMTsKKwkJZWxzZQorCQkJYWNfbW9jPSRhY19tb2MyOworCQlmaQorCWVsc2UKKwkJaWYgdGVzdCAtbiAiJGFjX21vYzEiOyB0aGVuCisJCQlhY19tb2M9JGFjX21vYzE7CisJCWVsc2UKKwkJCWFjX21vYz0kYWNfbW9jMjsKKwkJZmkKKwlmaQorCisJaWYgdGVzdCAteiAiJGFjX21vYyIgIC1hICIkRkFUQUwiID0gMTsgdGhlbgorCQlBQ19NU0dfRVJST1IoW21vYyBiaW5hcnkgbm90IGZvdW5kIGluIFwkUEFUSCBvciAkcXRfY3ZfZGlyL2JpbiAhXSkKKwlmaQorXSkKKworZG5sIGNoZWNrIGEgcGFydGljdWxhciBsaWJuYW1lCitBQ19ERUZVTihbUVRfVFJZX0xJTktdLAorWworCVNBVkVfTElCUz0iJExJQlMiCisJTElCUz0iJExJQlMgJDEiCisJQUNfVFJZX0xJTksoWworCSNpbmNsdWRlIDxxZ2xvYmFsLmg+CisJI2luY2x1ZGUgPHFzdHJpbmcuaD4KKwkJXSwKKwlbCisJUVN0cmluZyBzKCJtYW5nbGVfZmFpbHVyZSIpOworCSNpZiAoUVRfVkVSU0lPTiA8IDIyMSkKKwlicmVha19tZV8oXFxcKTsKKwkjZW5kaWYKKwldLAorCXF0X2N2X2xpYm5hbWU9JDEsCisJKQorCUxJQlM9IiRTQVZFX0xJQlMiCitdKQorIAorZG5sIGNoZWNrIHdlIGNhbiBkbyBhIGNvbXBpbGUKK0FDX0RFRlVOKFtRVF9DSEVDS19DT01QSUxFXSwKK1sKKwlBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBRdCBsaWJyYXJ5IG5hbWVdKQorIAorCUFDX0NBQ0hFX1ZBTChxdF9jdl9saWJuYW1lLAorCVsKKwkJQUNfTEFOR19DUExVU1BMVVMKKwkJU0FWRV9DWFhGTEFHUz0kQ1hYRkxBR1MKKwkJQ1hYRkxBR1M9IiRDWFhGTEFHUyAkUVRfSU5DTFVERVMgJFFUX0xERkxBR1MiIAorCisJCWZvciBsaWJuYW1lIGluIC1scXQtbXQgLWxxdDMgLWxxdDIgLWxxdDsKKwkJZG8KKwkJCVFUX1RSWV9MSU5LKCRsaWJuYW1lKQorCQkJaWYgdGVzdCAtbiAiJHF0X2N2X2xpYm5hbWUiOyB0aGVuCisJCQkJYnJlYWs7CisJCQlmaQorCQlkb25lCisKKwkJQ1hYRkxBR1M9JFNBVkVfQ1hYRkxBR1MKKwldKQorCisJaWYgdGVzdCAteiAiJHF0X2N2X2xpYm5hbWUiOyB0aGVuCisJCUFDX01TR19SRVNVTFQoW2ZhaWxlZF0pIAorCQlpZiB0ZXN0ICIkRkFUQUwiID0gMSA7IHRoZW4KKwkJCUFDX01TR19FUlJPUihbQ2Fubm90IGNvbXBpbGUgYSBzaW1wbGUgUXQgZXhlY3V0YWJsZS4gQ2hlY2sgeW91IGhhdmUgdGhlIHJpZ2h0IFwkUVRESVIgIV0pCisJCWZpCisJZWxzZQorCQlBQ19NU0dfUkVTVUxUKFskcXRfY3ZfbGlibmFtZV0pCisJZmkKK10pCisKK2RubCBnZXQgUXQgdmVyc2lvbiB3ZSdyZSB1c2luZworQUNfREVGVU4oW1FUX0dFVF9WRVJTSU9OXSwKK1sKKwlBQ19DQUNIRV9DSEVDSyhbUXQgdmVyc2lvbl0sbHl4X2N2X3F0dmVyc2lvbiwKKwlbCisJCUFDX0xBTkdfQ1BMVVNQTFVTCisJCVNBVkVfQ1BQRkxBR1M9JENQUEZMQUdTCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgJFFUX0lOQ0xVREVTIgorCisJCWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8cWdsb2JhbC5oPgorIiUlJSJRVF9WRVJTSU9OX1NUUiIlJSUiCitFT0YKKwkJbHl4X2N2X3F0dmVyc2lvbj1gKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfCBcCisJCQlncmVwICdeIiUlJSInICAyPi9kZXYvbnVsbCB8IFwKKwkJCXNlZCAtZSAncy8iJSUlIi8vZycgLWUgJ3MvIi8vZydgCisJCXJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKKwkJQ1BQRkxBR1M9JFNBVkVfQ1BQRkxBR1MKKwldKQorIAorCVFUX1ZFUlNJT049JGx5eF9jdl9xdHZlcnNpb24KKwlBQ19TVUJTVChRVF9WRVJTSU9OKQorXSkKKyAKK2RubCBzdGFydCBoZXJlIAorQUNfREVGVU4oW1FUX0RPX0lUX0FMTF0sCitbCisJZG5sIFBsZWFzZSBsZWF2ZSB0aGlzIGFsb25lLiBJIHVzZSB0aGlzIGZpbGUgaW4KKwlkbmwgb3Byb2ZpbGUuCisJRkFUQUw9MAorCisJQUNfQVJHX1dJVEgocXQtZGlyLCBbICAtLXdpdGgtcXQtZGlyICAgICAgICAgICB3aGVyZSB0aGUgcm9vdCBvZiBRdCBpcyBpbnN0YWxsZWQgXSwKKwkJWyBxdF9jdl9kaXI9YGV2YWwgZWNobyAiJHdpdGh2YWwiL2AgXSkKKwkgCisJQUNfQVJHX1dJVEgocXQtaW5jbHVkZXMsIFsgIC0td2l0aC1xdC1pbmNsdWRlcyAgICAgIHdoZXJlIHRoZSBRdCBpbmNsdWRlcyBhcmUuIF0sCisJCVsgcXRfY3ZfaW5jbHVkZXM9YGV2YWwgZWNobyAiJHdpdGh2YWwiYCBdKQorIAorCUFDX0FSR19XSVRIKHF0LWxpYnJhcmllcywgWyAgLS13aXRoLXF0LWxpYnJhcmllcyAgICAgd2hlcmUgdGhlIFF0IGxpYnJhcnkgaXMgaW5zdGFsbGVkLl0sCisJCVsgIHF0X2N2X2xpYnJhcmllcz1gZXZhbCBlY2hvICIkd2l0aHZhbCJgIF0pCisKKwlkbmwgcGF5IGF0dGVudGlvbiB0byAkUVRESVIgdW5sZXNzIG92ZXJyaWRkZW4KKwlpZiB0ZXN0IC16ICIkcXRfY3ZfZGlyIjsgdGhlbgorCQlxdF9jdl9kaXI9JFFURElSCisJZmkKKyAKKwlkbmwgZGVyaXZlIGluYy9saWIgaWYgbmVlZGVkCisJaWYgdGVzdCAtbiAiJHF0X2N2X2RpciI7IHRoZW4KKwkJaWYgdGVzdCAteiAiJHF0X2N2X2luY2x1ZGVzIjsgdGhlbgorCQkJcXRfY3ZfaW5jbHVkZXM9JHF0X2N2X2Rpci9pbmNsdWRlCisJCWZpCisJCWlmIHRlc3QgLXogIiRxdF9jdl9saWJyYXJpZXMiOyB0aGVuCisJCQlxdF9jdl9saWJyYXJpZXM9JHF0X2N2X2Rpci9saWIKKwkJZmkKKwlmaQorCisJZG5sIGZsYWdzIGZvciBjb21waWxhdGlvbgorCVFUX0lOQ0xVREVTPQorCVFUX0xERkxBR1M9CisJaWYgdGVzdCAtbiAiJHF0X2N2X2luY2x1ZGVzIjsgdGhlbgorCQlRVF9JTkNMVURFUz0iLUkkcXRfY3ZfaW5jbHVkZXMiCisJZmkKKwlpZiB0ZXN0IC1uICIkcXRfY3ZfbGlicmFyaWVzIjsgdGhlbgorCQlRVF9MREZMQUdTPSItTCRxdF9jdl9saWJyYXJpZXMiCisJZmkKKwlBQ19TVUJTVChRVF9JTkNMVURFUykKKwlBQ19TVUJTVChRVF9MREZMQUdTKQorIAorCVFUX0ZJTkRfTU9DCisJTU9DPSRhY19tb2MKKwlBQ19TVUJTVChNT0MpCisJUVRfRklORF9VSUMKKwlVSUM9JGFjX3VpYworCUFDX1NVQlNUKFVJQykKKworCVFUX0NIRUNLX0NPTVBJTEUKKyAKKwlRVF9MSUI9JHF0X2N2X2xpYm5hbWU7CisJQUNfU1VCU1QoUVRfTElCKQorCisJaWYgdGVzdCAtbiAiJHF0X2N2X2xpYm5hbWUiOyB0aGVuCisJCVFUX0dFVF9WRVJTSU9OCisJZmkKK10pCisKK2RubCBBWF9DWFhGTEFHU19PUFRJT05TKHZhci1uYW1lLCBvcHRpb24pCitkbmwgYWRkIG9wdGlvbiB0byB2YXItbmFtZSBpZiAkQ1hYIHN1cHBvcnQgaXQuCitBQ19ERUZVTihbQVhfQ0hFQ0tfUFJFQ09NUElMRURfSEVBREVSXSwgWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyICR7Q1hYfSBzdXBwb3J0IHByZWNvbXBpbGVkIGhlYWRlcl0pCitBQ19MQU5HX1NBVkUKK0FDX0xBTkdfQ1BMVVNQTFVTCitTQVZFX0NYWEZMQUdTPSRDWFhGTEFHUworZG5sIHdlIGNvbnNpZGVyIHRoYW4gaWYgLVdpbnZhbGlkLXBjaCBpcyBhY2NlcHRlZCBwY2ggd2lsbCB3b3JrcyAuLi4KK0NYWEZMQUdTPS1XaW52YWxpZC1wY2gKK2RubCBidXQgd2UgZG9uJ3Qgd2FudCAtV2ludmFsaWQtcGNoIGVsc2UgY29tcGlsYXRpb24gd2lsbCBmYWlsIGR1ZSAtV2Vycm9yIGFuZAorZG5sIHRoZSBmYWN0IHRoYW4gc29tZSBwY2ggd2lsbCBiZSBpbnZhbGlkIGZvciB0aGUgZ2l2ZW4gY29tcGlsYXRpb24gb3B0aW9uCitBQ19UUllfQ09NUElMRSgsWztdLEFDX01TR19SRVNVTFQoW3llc10pOyAkMT0iJHskMX0gLWluY2x1ZGUgYml0cy9zdGRjKysuaCIsIEFDX01TR19SRVNVTFQoW25vXSkpCitDWFhGTEFHUz0kU0FWRV9DWFhGTEFHUworQUNfTEFOR19SRVNUT1JFCitdKQorCitkbmwgQVhfQ0hFQ0tfRE9DQk9PSworQUNfREVGVU4oW0FYX0NIRUNLX0RPQ0JPT0tdLCBbCisjIEl0J3MganVzdCBydWRlIHRvIGdvIG92ZXIgdGhlIG5ldCB0byBidWlsZAorWFNMVFBST0NfRkxBR1M9LS1ub25ldAorRE9DQk9PS19ST09UPQoraWYgdGVzdCAhIC1mIC9ldGMveG1sL2NhdGFsb2c7IHRoZW4KKwlmb3IgaSBpbiAvdXNyL3NoYXJlL3NnbWwvZG9jYm9vay9zdHlsZXNoZWV0L3hzbC9ud2Fsc2ggL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLzsKKwlkbworCQlpZiB0ZXN0IC1kICIkaSI7IHRoZW4KKwkJCURPQ0JPT0tfUk9PVD0kaQorCQlmaQorCWRvbmUKKworCSMgTGFzdCByZXNvcnQgLSB0cnkgbmV0CisJaWYgdGVzdCAteiAiJERPQ0JPT0tfUk9PVCI7IHRoZW4KKwkJWFNMVFBST0NfRkxBR1M9CisJZmkKK2Vsc2UKKwlYTUxfQ0FUQUxPRz0vZXRjL3htbC9jYXRhbG9nCisJQ0FUX0VOVFJZX1NUQVJUPSc8IS0tJworCUNBVF9FTlRSWV9FTkQ9Jy0tPicKK2ZpCisKK0FDX0NIRUNLX1BST0coWFNMVFBST0MseHNsdHByb2MseHNsdHByb2MsKQorWFNMVFBST0NfV09SS1M9bm8KK2lmIHRlc3QgLW4gIiRYU0xUUFJPQyI7IHRoZW4KKwlBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgeHNsdHByb2Mgd29ya3NdKQorCisJaWYgdGVzdCAtbiAiJFhNTF9DQVRBTE9HIjsgdGhlbgorCQlEQl9GSUxFPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudC94aHRtbC9kb2Nib29rLnhzbCIKKwllbHNlCisJCURCX0ZJTEU9IiRET0NCT09LX1JPT1QvZG9jYm9vay54c2wiCisJZmkKKworCSRYU0xUUFJPQyAkWFNMVFBST0NfRkxBR1MgJERCX0ZJTEUgPi9kZXYvbnVsbCAyPiYxIDw8IEVORAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0nSVNPLTg4NTktMSc/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCI+Cis8Ym9vayBpZD0idGVzdCI+Cis8L2Jvb2s+CitFTkQKKwlpZiB0ZXN0ICIkPyIgPSAwOyB0aGVuCisJCVhTTFRQUk9DX1dPUktTPXllcworCWZpCisJQUNfTVNHX1JFU1VMVCgkWFNMVFBST0NfV09SS1MpCitmaQorQU1fQ09ORElUSU9OQUwoaGF2ZV94c2x0cHJvYywgdGVzdCAiJFhTTFRQUk9DX1dPUktTIiA9ICJ5ZXMiKQorCitBQ19TVUJTVChYTUxfQ0FUQUxPRykKK0FDX1NVQlNUKFhTTFRQUk9DX0ZMQUdTKQorQUNfU1VCU1QoRE9DQk9PS19ST09UKQorQUNfU1VCU1QoQ0FUX0VOVFJZX1NUQVJUKQorQUNfU1VCU1QoQ0FUX0VOVFJZX0VORCkKK10pCisKK2RubCBBWF9DRkxBR1NfT1BUSU9OUyh2YXItbmFtZSwgb3B0aW9uKQorZG5sIGFkZCBvcHRpb24gdG8gdmFyLW5hbWUgaWYgJENDIHN1cHBvcnQgaXQuCitBQ19ERUZVTihbQVhfQ0ZMQUdTX09QVElPTl0sIFsKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciAke0NDfSAkMiBpcyB1bmRlcnN0b29kXSkKK0FDX0xBTkdfU0FWRQorQUNfTEFOR19DCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9JDIKK0FDX1RSWV9DT01QSUxFKCxbO10sQUNfTVNHX1JFU1VMVChbeWVzXSk7ICQxPSIkeyQxfSAkMiIsQUNfTVNHX1JFU1VMVChbbm9dKSkKK0NGTEFHUz0kU0FWRV9DRkxBR1MKK0FDX0xBTkdfUkVTVE9SRQorXSkKKworCitkbmwgQVhfQ1hYRkxBR1NfT1BUSU9OUyh2YXItbmFtZSwgb3B0aW9uKQorZG5sIGFkZCBvcHRpb24gdG8gdmFyLW5hbWUgaWYgJENYWCBzdXBwb3J0IGl0LgorQUNfREVGVU4oW0FYX0NYWEZMQUdTX09QVElPTl0sIFsKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciAke0NYWH0gJDIgaXMgdW5kZXJzdG9vZF0pCitBQ19MQU5HX1NBVkUKK0FDX0xBTkdfQ1BMVVNQTFVTCitTQVZFX0NYWEZMQUdTPSRDWFhGTEFHUworQ1hYRkxBR1M9JDIKK0FDX1RSWV9DT01QSUxFKCxbO10sQUNfTVNHX1JFU1VMVChbeWVzXSk7ICQxPSIkeyQxfSAkMiIsQUNfTVNHX1JFU1VMVChbbm9dKSkKK0NYWEZMQUdTPSRTQVZFX0NYWEZMQUdTCitBQ19MQU5HX1JFU1RPUkUKK10pCisKK2RubCBBWF9DT1BZX0lGX0NIQU5HRShzb3VyY2UsIGRlc3QpCitkbmwgY29weSBzb3VyY2UgdG8gZGVzdCBpZiB0aGV5IGRvbid0IGNvbXBhcmUgZXF1YWxseSBvciBpZiBkZXN0IGRvZXNuJ3QgZXhpc3QKK0FDX0RFRlVOKFtBWF9DT1BZX0lGX0NIQU5HRV0sIFsKK2lmIHRlc3QgLXIgJDI7IHRoZW4KKwlpZiBjbXAgJDEgJDIgPiAvZGV2L251bGw7IHRoZW4KKwkJZWNobyAkMiBpcyB1bmNoYW5nZWQKKwllbHNlCisJCWNwIC1mICQxICQyCisJZmkKK2Vsc2UKKwljcCAtZiAkMSAkMgorZmkKK10pCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9hdXRvbWFrZS1mb3JlaWduLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjliYjZjNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9hdXRvbWFrZS1mb3JlaWduLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK29wcm9maWxlIGRvZXNuJ3Qgd2FudCBHTlUtbGV2ZWxzIG9mIGF1dG9tYWtlIHN0cmljdG5lc3Mgc28gdGVsbCBpdCB0byBiZSAiZm9yZWlnbiIuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNTc0MDU4NS4uY2Y2YzMxNiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTYgKzE2IEBAIEFDX0NPTkZJR19TUkNESVIoW2xpYm9wL29wX2NvbmZpZy5oXSkKKy1BTV9JTklUX0FVVE9NQUtFCisrQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvb3Byb2ZpbGUtY3Jvc3MtY29tcGlsZS10ZXN0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9vcHJvZmlsZS1jcm9zcy1jb21waWxlLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZmE5NTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvb3Byb2ZpbGUtY3Jvc3MtY29tcGlsZS10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDk4IEBACitQcmV2ZW50IHJ1bm5pbmcgY2hlY2sgdGVzdHMgb24gaG9zdCBpZiBjcm9zcyBjb21waWxpbmcKKworVGhpcyBwYXRjaCBlbmFibGVzIHJ1bm5pbmcgdGhlICdtYWtlIGNoZWNrJyB0ZXN0cyBvbiB0aGUgdGFyZ2V0CitpbiBhIGNyb3NzLWNvbXBpbGVkIGVudmlyb25tZW50LiBJZiBub3QgY3Jvc3MtY29tcGlsaW5nLCB0aGVuICdtYWtlCisgY2hlY2snIGJ1aWxkcyBhbmQgZXhlY3V0ZXMgdGhlIHRlc3RzOyBubyBjaGFuZ2UgZnJvbSB0aGlzIHBhdGNoLgorSW4gYSBjcm9zcy1jb21waWxpbmcgZW52aXJvbm1lbnQsIHRoZSBtYWtlIHZhcmlhYmxlIENST1NTX0NPTVBJTEUgaXMKK3NldCB3aGljaCBieXBhc3NlcyBhc3NpZ2luZyB0ZXN0cyB0byB0aGUgbWFrZWtmaWxlIHZhcmlhYmxlIFRFU1RTLgorU2luY2UgVEVTVFMgaXMgZW1wdHksIHRoZSAnbWFrZSBjaGVjaycgcHJvY2VzcyBuZXZlciB0cmllcyB0byBydW4gdGhlCit0ZXN0cyBvbiB0aGUgaG9zdHMuICBPbiB0aGUgdGFyZ2V0LCB0aGUgdGVzdHMgbXVzdCBiZSBydW4gbWFudWFsbHkuCisKK0Fsc28sIGluIHRoZSBsaWJ1dGlsKysgdGVzdHMsIGEgbWFrZWZpbGUgdmFyaWFibGUgU1JDRElSIGlzIHBhc3NlZCBpbnRvCit0aGUgY29tcGlsYXRpb24gcGhhc2UsIHBvaW50aW5nIHRvIHRoZSBydW50aW1lIGxvY2F0aW9uIG9mIHRoZSB0ZXN0CisnZmlsZS1tYW5pcC10ZXN0cycuICBUaGUgbWVjaGFuaXNtIHVzZWQgZm9yIGEgaG9zdCB0ZXN0LCBiYXNlZCBvbgorJ3RvcGRpcicgZG9lc24ndCB3b3JrLiAgSW5zdGVhZCwgaWYgQ1JPU1NfQ09NUElMRSBpcyBzZXQsIHRoZQorbWFrZWZpbGUgdGFrZXMgdGhlIHBhdGggb2YgU1JDRElSIGZyb20gdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCBub3QKK2Zyb20gYW4gZXhwcmVzc2lvbiBiYXNlZCBvbiB0aGUgaG9zdCBwYXRoICd0b3BkaXInLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRGF2ZSBMZXJuZXIgPGRhdmUubGVybmVyQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDQxZWNlNjQuLmNlNWExNmYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTM5Miw2ICszOTIsNyBAQCBBQ19BUkdfRU5BQkxFKGFjY291bnQtY2hlY2ssCisgCWVuYWJsZV9hY2NvdW50X2NoZWNrPSRlbmFibGV2YWwsIGVuYWJsZV9hY2NvdW50X2NoZWNrPXllcykKKyAKKyBBTV9DT05ESVRJT05BTChDSEVDS19BQ0NPVU5ULCB0ZXN0ICJ4JGVuYWJsZV9hY2NvdW50X2NoZWNrIiA9ICJ4eWVzIikKKytBTV9DT05ESVRJT05BTChDUk9TU19DT01QSUxFLCB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgPSAieHllcyIpCisgCisgQUNfU1VCU1QoT1BfQ0ZMQUdTKQorIEFDX1NVQlNUKE9QX0NYWEZMQUdTKQorZGlmZiAtLWdpdCBhL2xpYmRiL3Rlc3RzL01ha2VmaWxlLmFtIGIvbGliZGIvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDhhNjkwMDMuLmQ4MjAwOTAgMTAwNjQ0CistLS0gYS9saWJkYi90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvbGliZGIvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0xMyw0ICsxMyw2IEBAIGNoZWNrX1BST0dSQU1TID0gZGJfdGVzdAorIGRiX3Rlc3RfU09VUkNFUyA9IGRiX3Rlc3QuYworIGRiX3Rlc3RfTERBREQgPSAuLi9saWJvZGIuYSAuLi8uLi9saWJ1dGlsL2xpYnV0aWwuYQorIAorK2lmICEgQ1JPU1NfQ09NUElMRQorIFRFU1RTID0gJHtjaGVja19QUk9HUkFNU30KKytlbmRpZgorZGlmZiAtLWdpdCBhL2xpYm9wL3Rlc3RzL01ha2VmaWxlLmFtIGIvbGlib3AvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDhhNzllYjUuLjZkNDE3YzQgMTAwNjQ0CistLS0gYS9saWJvcC90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvbGlib3AvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0zMyw0ICszMyw2IEBAIGxvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KKyBtYW5nbGVfdGVzdHNfU09VUkNFUyA9IG1hbmdsZV90ZXN0cy5jCisgbWFuZ2xlX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KKyAKKytpZiAhIENST1NTX0NPTVBJTEUKKyBURVNUUyA9ICR7Y2hlY2tfUFJPR1JBTVN9IHV0ZjhfY2hlY2tlci5zaAorK2VuZGlmCitkaWZmIC0tZ2l0IGEvbGlicmVnZXgvdGVzdHMvTWFrZWZpbGUuYW0gYi9saWJyZWdleC90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggNmYxOTgzOC4uMWQxNzZmOSAxMDA2NDQKKy0tLSBhL2xpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi9saWJyZWdleC90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTE4LDQgKzE4LDYgQEAgamF2YV90ZXN0X0xEQUREID0gXAorIAorIEVYVFJBX0RJU1QgPSBtYW5nbGVkLW5hbWUuaW4KKyAKKytpZiAhIENST1NTX0NPTVBJTEUKKyBURVNUUyA9ICR7Y2hlY2tfUFJPR1JBTVN9CisrZW5kaWYKK2RpZmYgLS1naXQgYS9saWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUuYW0gYi9saWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDUxYWYwMzEuLmEwMWVhMmQgMTAwNjQ0CistLS0gYS9saWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL2xpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEsNyArMSw5IEBACisgCisgUkVBTFBBVEg9IHJlYWRsaW5rIC1mCisgCisraWYgISBDUk9TU19DT01QSUxFCisgU1JDRElSIDo9ICQoc2hlbGwgJChSRUFMUEFUSCkgJCh0b3BkaXIpL2xpYnV0aWwrKy90ZXN0cy8gKQorK2VuZGlmCisgCisgQU1fQ1BQRkxBR1MgPSBcCisgCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCsrIC1EIFNSQ0RJUj0iXCIkKFNSQ0RJUikvXCIiIEBPUF9DUFBGTEFHU0AKK0BAIC00Niw0ICs0OCw2IEBAIGNhY2hlZF92YWx1ZV90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9CisgdXRpbGl0eV90ZXN0c19TT1VSQ0VTID0gdXRpbGl0eV90ZXN0cy5jcHAKKyB1dGlsaXR5X3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KKyAKKytpZiAhIENST1NTX0NPTVBJTEUKKyBURVNUUyA9ICR7Y2hlY2tfUFJPR1JBTVN9CisrZW5kaWYKK2RpZmYgLS1naXQgYS9saWJ1dGlsL3Rlc3RzL01ha2VmaWxlLmFtIGIvbGlidXRpbC90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggZGZjZDZlYy4uZTg4MzFiNSAxMDA2NDQKKy0tLSBhL2xpYnV0aWwvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL2xpYnV0aWwvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0xMiw0ICsxMiw2IEBAIGZpbGVfdGVzdHNfTERBREQgPSAuLi9saWJ1dGlsLmEKKyBzdHJpbmdfdGVzdHNfU09VUkNFUyA9IHN0cmluZ190ZXN0cy5jCisgc3RyaW5nX3Rlc3RzX0xEQUREID0gLi4vbGlidXRpbC5hCisgCisraWYgISBDUk9TU19DT01QSUxFCisgVEVTVFMgPSAke2NoZWNrX1BST0dSQU1TfQorK2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvcm9vdC1ob21lLWRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9yb290LWhvbWUtZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZmM1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvcm9vdC1ob21lLWRpci5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitvcHJvZmlsZTogRGV0ZXJtaW5lIHRoZSByb290IGhvbWUgZGlyZWN0b3J5IGR5bmFtaWNhbGx5CisKK1RoaXMgY29tbWl0IGRldGVjdHMgdGhlIHJvb3QgaG9tZSBkaXJlY3RvcnkgZHluYW1pY2FsbHkgd2l0aCBjaGFuZ2VzIHRvCit0aGUgb3Byb2ZpbGUgZ3VpIGFwcCBzb3VyY2UuCisKK1RoZSBjb21taXQgcmVwbGFjZXMgYW4gZWFybGllciBmaXggdGhhdCBkZXRlY3RlZCBhbmQgYWRqdXN0ZWQgYQorJ25vbi1zdGFuZGFyZCcgcm9vdCBob21lIGRpcmVjdG9yeSBhdCBidWlsZCB0aW1lLiAgVGhlIGFkdmFudGFnZSBvZiB0aGlzCitwYXRjaCBpcyB0aGF0IHRoZSBvcHJvZmlsZSB0b29scyBhcmUgYWRqdXN0ZWQgdG8gdGhlIGN1cnJlbnQgcnVuLXRpbWUKK3BhdGggdG8gfnJvb3QsIG5vdCB0aGUgYnVpbGQgdGltZSBwYXRoLgorCitVcHN0cmVhbS1TdGF0dXM6IGluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBEYXZlIExlcm5lciA8ZGF2ZS5sZXJuZXJAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IG9wcm9maWxlLTEuMC4wL2RvYy9vcHJvZmlsZS5odG1sCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3Byb2ZpbGUtMS4wLjAub3JpZy9kb2Mvb3Byb2ZpbGUuaHRtbAkyMDE0LTExLTAzIDE3OjU1OjMxLjUxMTAzNDg1NyArMDAwMAorKysrIG9wcm9maWxlLTEuMC4wL2RvYy9vcHJvZmlsZS5odG1sCTIwMTQtMTEtMDMgMTc6NTc6MjYuNDE1MDM3OTg4ICswMDAwCitAQCAtMTU2Myw4ICsxNTYzLDggQEAKKyAJCTxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPm11c3Q8L2VtPjwvc3Bhbj4gc3RvcCBpdCBpbiBhIGNvbnRyb2xsZWQgbWFubmVyIGluIG9yZGVyIHRvIHByb2Nlc3MKKyAJCXRoZSBwcm9maWxlIGRhdGEgaXQgaGFzIGNvbGxlY3RlZC4gIFVzZSA8Y29kZSBjbGFzcz0iY29kZSI+a2lsbCAtU0lHSU5UICZsdDtvcGVyZi1QSUQmZ3Q7PC9jb2RlPgorIAkJZm9yIHRoaXMgcHVycG9zZS4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB3aGVuIHJ1bm5pbmcgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3BlcmY8L3N0cm9uZz48L3NwYW4+CistCQl3aXRoIHRoaXMgb3B0aW9uLCB5b3VyIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgc2hvdWxkIGJlIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3Jvb3Q8L2NvZGU+IG9yIGEgc3ViZGlyZWN0b3J5CistCQlvZiA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9yb290PC9jb2RlPiB0byBhdm9pZCBzdG9yaW5nIHNhbXBsZSBkYXRhIGZpbGVzIGluIGxvY2F0aW9ucyBhY2Nlc3NpYmxlIGJ5IHJlZ3VsYXIgdXNlcnMuCisrCQl3aXRoIHRoaXMgb3B0aW9uLCB5b3VyIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgc2hvdWxkIGJlIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+fnJvb3Q8L2NvZGU+IG9yIGEgc3ViZGlyZWN0b3J5CisrCQlvZiA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPn5yb290PC9jb2RlPiB0byBhdm9pZCBzdG9yaW5nIHNhbXBsZSBkYXRhIGZpbGVzIGluIGxvY2F0aW9ucyBhY2Nlc3NpYmxlIGJ5IHJlZ3VsYXIgdXNlcnMuCisgCQk8L3A+CisgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgPGR0PgorSW5kZXg6IG9wcm9maWxlLTEuMC4wL2RvYy9vcHJvZmlsZS54bWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcHJvZmlsZS0xLjAuMC5vcmlnL2RvYy9vcHJvZmlsZS54bWwJMjAxNC0xMS0wMyAxNzo1NTozMS41MTUwMzQ4NTcgKzAwMDAKKysrKyBvcHJvZmlsZS0xLjAuMC9kb2Mvb3Byb2ZpbGUueG1sCTIwMTQtMTEtMDMgMTc6NTg6MDMuNzE5MDM5MDA1ICswMDAwCitAQCAtNjU0LDggKzY1NCw4IEBACisgCQk8ZW1waGFzaXM+bXVzdDwvZW1waGFzaXM+IHN0b3AgaXQgaW4gYSBjb250cm9sbGVkIG1hbm5lciBpbiBvcmRlciB0byBwcm9jZXNzCisgCQl0aGUgcHJvZmlsZSBkYXRhIGl0IGhhcyBjb2xsZWN0ZWQuICBVc2UgPGNvZGU+a2lsbCAtU0lHSU5UICZsdDtvcGVyZi1QSUQmZ3Q7PC9jb2RlPgorIAkJZm9yIHRoaXMgcHVycG9zZS4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB3aGVuIHJ1bm5pbmcgPGNvbW1hbmQ+b3BlcmY8L2NvbW1hbmQ+CistCQl3aXRoIHRoaXMgb3B0aW9uLCB5b3VyIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgc2hvdWxkIGJlIDxmaWxlbmFtZT4vcm9vdDwvZmlsZW5hbWU+IG9yIGEgc3ViZGlyZWN0b3J5CistCQlvZiA8ZmlsZW5hbWU+L3Jvb3Q8L2ZpbGVuYW1lPiB0byBhdm9pZCBzdG9yaW5nIHNhbXBsZSBkYXRhIGZpbGVzIGluIGxvY2F0aW9ucyBhY2Nlc3NpYmxlIGJ5IHJlZ3VsYXIgdXNlcnMuCisrCQl3aXRoIHRoaXMgb3B0aW9uLCB5b3VyIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgc2hvdWxkIGJlIDxmaWxlbmFtZT5+cm9vdDwvZmlsZW5hbWU+IG9yIGEgc3ViZGlyZWN0b3J5CisrCQlvZiA8ZmlsZW5hbWU+fnJvb3Q8L2ZpbGVuYW1lPiB0byBhdm9pZCBzdG9yaW5nIHNhbXBsZSBkYXRhIGZpbGVzIGluIGxvY2F0aW9ucyBhY2Nlc3NpYmxlIGJ5IHJlZ3VsYXIgdXNlcnMuCisgCQk8L3BhcmE+PC9saXN0aXRlbT4KKyAJPC92YXJsaXN0ZW50cnk+CisgCTx2YXJsaXN0ZW50cnk+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODE0YmU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL3J1bi1wdGVzdApAQCAtMCwwICsxLDE5IEBACisjIS9iaW4vc2gKKworc2F2ZWRfZGlyPSRQV0QKK2ZvciBkaXIgaW4gKi90ZXN0cyA7IGRvCisJY2QgJGRpcgorCWZvciBhdGVzdCBpbiAqIDsgZG8KKwkJaWYgWyBcKCAteCAkYXRlc3QgXCkgLWEgXCggLWYgJGF0ZXN0IFwpIF0gOyB0aGVuCisJCQkuLyRhdGVzdCA+ICR7YXRlc3R9LnN0ZG91dCAyPiAke2F0ZXN0fS5zdGRlcnIKKwkJCWlmIFsgJD8gPSAwIF0gOyB0aGVuCisJCQkJZWNobyAiUEFTUzogJGRpciAkYXRlc3QiCisJCQkJcm0gJHthdGVzdH0uc3Rkb3V0ICR7YXRlc3R9LnN0ZGVycgorCQkJZWxzZQorCQkJCWVjaG8gIkZBSUw6ICR7ZGlyfS8ke2F0ZXN0fSIKKwkJCWZpCisJCWZpCisJZG9uZQorCWNkICRzYXZlZF9kaXIKK2RvbmUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlXzEuMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlXzEuMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYTk0YWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGVfMS4xLjAuYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSBvcHJvZmlsZS5pbmMKKworREVQRU5EUyArPSAidmlydHVhbC9rZXJuZWwiCitERVBFTkRTX2FwcGVuZF9wb3dlcnBjNjQgPSAiIGxpYnBmbTQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyNDhjNGMwNjlmOTQ3NmY0MjdmYTcxOTU1NjNmOTg2NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZjc1OWE2ZGUxYTYwMzNkNWRmYzkzYmRhMTI5YTlmMmUxMjhhZWNjNDIzOGNjNjU3ZmViMDgwMWQxYjAzNjZjIgorCitTID0gIiR7V09SS0RJUn0vb3Byb2ZpbGUtJHtQVn0iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlci9pbml0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjU0NGVhNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlci9pbml0CkBAIC0wLDAgKzEsMzcgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgb3Byb2ZpbGUtc2VydmVyCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkbmV0d29yaworIyBSZXF1aXJlZC1TdG9wOiAgICAgJG5ldHdvcmsKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBPUHJvZmlsZVVJIHNlcnZlcgorIyBEZXNjcmlwdGlvbjogICAgICAgCisjIyMgRU5EIElOSVQgSU5GTworCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgICAgIGVjaG8gIlN0YXJ0aW5nIE9Qcm9maWxlVUkgc2VydmVyIgorCS4gL2V0Yy9wcm9maWxlCisJL3Vzci9iaW4vb3Byb2ZpbGUtc2VydmVyICYKKyAgOzsKKworICBzdG9wKQorICAgICAgICBlY2hvICJTdG9wcGluZyBPUHJvZmlsZVVJIHNlcnZlciIKKyAgICAgICAga2lsbHByb2Mgb3Byb2ZpbGUtc2VydmVyCisgIDs7CisKKyAgcmVzdGFydCkKKwkkMCBzdG9wCisgICAgICAgIHNsZWVwIDEKKyAgICAgICAgJDAgc3RhcnQKKyAgOzsKKworICAqKQorICAgICAgICBlY2hvICJ1c2FnZTogJDAgeyBzdGFydCB8IHN0b3AgfCByZXN0YXJ0IH0iCisgIDs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyL29wcm9maWxldWktc2VydmVyLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvb3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTJjYmU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyL29wcm9maWxldWktc2VydmVyLnNlcnZpY2UKQEAgLTAsMCArMSw2IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPU9Qcm9maWxlVUkgU2VydmVyCitBZnRlcj1uZXR3b3JrLnRhcmdldAorCitbU2VydmljZV0KK0V4ZWNTdGFydD0vYmluL3NoIC1jICIuIEBTWVNDT05GRElSQC9wcm9maWxlOyBAQklORElSQC9vcHJvZmlsZS1zZXJ2ZXIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXJfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjNiNzhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyX2dpdC5iYgpAQCAtMCwwICsxLDM0IEBACityZXF1aXJlIG9wcm9maWxldWkuaW5jCisKK1NSQ1JFViA9ICIzODllMTg3NWFmNDcyMWQ1MmM3ZTY1Y2Y5Y2ZmZmI2OWIwZWQ2YTU5IgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wcm9maWxldWkgXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9vcHJvZmlsZXVpLXNlcnZlci5zZXJ2aWNlICIKKworREVQRU5EUyArPSAiaW50bHRvb2wtbmF0aXZlIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1jbGllbnQgLS1lbmFibGUtc2VydmVyIgorCitSREVQRU5EU18ke1BOfSA9ICJvcHJvZmlsZSBhdmFoaS1kYWVtb24iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvb3Byb2ZpbGV1aS1zZXJ2ZXIKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9vcHJvZmlsZXVpLXNlcnZlci5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCXNlZCAtaSAtZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCisJCS1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9vcHJvZmlsZXVpLXNlcnZlci5zZXJ2aWNlCit9CisKK2luaGVyaXQgdXBkYXRlLXJjLmQgc3lzdGVtZAorCitJTklUU0NSSVBUX05BTUUgPSAib3Byb2ZpbGV1aS1zZXJ2ZXIiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5OSA1IDIgLiBzdG9wIDIwIDAgMSA2IC4iCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJvcHJvZmlsZXVpLXNlcnZlci5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRSA9ICJkaXNhYmxlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWkuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmY2YwMTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS5pbmMKQEAgLTAsMCArMSwxNiBAQAorU1VNTUFSWSA9ICJVc2VyIEludGVyZmFjZSBmb3IgdGhlIFN5c3RlbS1XaWRlIFByb2ZpbGVyIgorREVTQ1JJUFRJT04gPSAiVXNlciBpbnRlcmZhY2UgZm9yIHRoZSBPUHJvZmlsZSB0b29sIgorSE9NRVBBR0UgPSAiaHR0cDovL2xhYnMuby1oYW5kLmNvbS9vcHJvZmlsZXVpLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitTRUNUSU9OID0gIngxMSIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitERVBFTkRTID0gImdsaWItMi4wIGF2YWhpIGludGx0b29sLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1hdmFoaSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWlfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWlfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNjlkNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aV9naXQuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSBvcHJvZmlsZXVpLmluYworCitERVBFTkRTICs9ICJndGsrIGxpYmdsYWRlIGxpYnhtbDIgYXZhaGktdWkgZ2NvbmYiCisKK1NSQ1JFViA9ICIzODllMTg3NWFmNDcyMWQ1MmM3ZTY1Y2Y5Y2ZmZmI2OWIwZWQ2YTU5IgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wcm9maWxldWkiCisKK0VYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtY2xpZW50IC0tZGlzYWJsZS1zZXJ2ZXIiCisKK1BBQ0tBR0VTID0rICJvcHJvZmlsZXVpLXZpZXdlciIKKworRklMRVNfb3Byb2ZpbGV1aS12aWV3ZXIgPSAiJHtiaW5kaXJ9L29wYXJjaGNvbnYgJHtiaW5kaXJ9L29wcm9maWxlLXZpZXdlciAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8gJHtkYXRhZGlyfS9vcHJvZmlsZXVpLyAke2RhdGFkaXJ9L2ljb25zIgorUkRFUEVORFNfb3Byb2ZpbGV1aS12aWV3ZXIgPSAib3Byb2ZpbGUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvcGVyZi9wZXJmLWZlYXR1cmVzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9wZXJmL3BlcmYtZmVhdHVyZXMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ODU5YWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvcGVyZi9wZXJmLWZlYXR1cmVzLmluYwpAQCAtMCwwICsxLDIyIEBACitQRVJGX0ZFQVRVUkVTX0VOQUJMRSA/PSAicGVyZi1zY3JpcHRpbmcgcGVyZi10dWkiCisKK2RlZiBwZXJmX2ZlYXR1cmVfZW5hYmxlZChmZWF0dXJlLCB0cnVldmFsLCBmYWxzZXZhbCwgZCk6CisgICAgIiIiCisgICAgQ2hlY2sgd2hpY2ggcGVyZiBmZWF0dXJlcyBhcmUgZW5hYmxlZC4KKworICAgIFRoZSBQRVJGX0ZFQVRVUkVTX0VOQUJMRSB2YXJpYWJsZSBsaXN0cyB0aGUgcGVyZiBmZWF0dXJlcyB0bworICAgIGVuYWJsZS4gIE92ZXJyaWRlIGl0IGlmIHlvdSB3YW50IHNvbWV0aGluZyBkaWZmZXJlbnQgZnJvbSB3aGF0J3MKKyAgICBsaXN0ZWQgYWJvdmUsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LiAgSWYgZW1wdHksIHRoZSBidWlsZCB3b24ndAorICAgIGVuYWJsZSBhbnkgZmVhdHVyZXMgKHdoaWNoIG1heSBiZSBleGFjdGx5IHdoYXQgeW91IHdhbnQsIGp1c3QgYQorICAgIGJhcmVib25lcyBwZXJmIHdpdGhvdXQgYW55IGV4dHJhIGJhZ2dhZ2UsIHdoYXQgeW91IGdldCBpZiB5b3UKKyAgICBzcGVjaWZ5IGFuIGVtcHR5IGZlYXR1cmUgbGlzdCkuCisKKyAgICBBdmFpbGFibGUgcGVyZiBmZWF0dXJlczoKKyAgICAgIHBlcmYtc2NyaXB0aW5nOiBlbmFibGUgc3VwcG9ydCBmb3IgUGVybCBhbmQgUHl0aG9uIGJpbmRpbmdzCisgICAgICBwZXJmLXR1aTogZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBwZXJmIFRVSSAodmlhIGxpYm5ld3QpCisKKyAgICAiIiIKKyAgICBlbmFibGVkX2ZlYXR1cmVzID0gZC5nZXRWYXIoIlBFUkZfRkVBVFVSRVNfRU5BQkxFIiwgVHJ1ZSkgb3IgIiIKKyAgICBpZiBmZWF0dXJlIGluIGVuYWJsZWRfZmVhdHVyZXM6CisgICAgICAgIHJldHVybiB0cnVldmFsCisgICAgcmV0dXJuIGZhbHNldmFsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvcGVyZi9wZXJmLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3BlcmYvcGVyZi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGIzYTJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3BlcmYvcGVyZi5iYgpAQCAtMCwwICsxLDIxMCBAQAorU1VNTUFSWSA9ICJQZXJmb3JtYW5jZSBhbmFseXNpcyB0b29scyBmb3IgTGludXgiCitERVNDUklQVElPTiA9ICJQZXJmb3JtYW5jZSBjb3VudGVycyBmb3IgTGludXggYXJlIGEgbmV3IGtlcm5lbC1iYXNlZCBcCitzdWJzeXN0ZW0gdGhhdCBwcm92aWRlIGEgZnJhbWV3b3JrIGZvciBhbGwgdGhpbmdzIFwKK3BlcmZvcm1hbmNlIGFuYWx5c2lzLiBJdCBjb3ZlcnMgaGFyZHdhcmUgbGV2ZWwgXAorKENQVS9QTVUsIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCkgZmVhdHVyZXMgXAorYW5kIHNvZnR3YXJlIGZlYXR1cmVzIChzb2Z0d2FyZSBjb3VudGVycywgdHJhY2Vwb2ludHMpIFwKK2FzIHdlbGwuIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDc4MTBmYWI3NDg3ZmIwYWFkMzI3Yjc2ZjFiZTdjZDciCisKK1BSID0gInI5IgorCityZXF1aXJlIHBlcmYtZmVhdHVyZXMuaW5jCisKK0JVSUxEUEVSRl9saWJjLXVjbGliYyA9ICJubyIKKworIyBndWkgc3VwcG9ydCB3YXMgYWRkZWQgd2l0aCBrZXJuZWwgMy42LjM1CisjIHNpbmNlIDMuMTAgbGlibmV3dCB3YXMgcmVwbGFjZWQgYnkgc2xhbmcKKyMgdG8gY292ZXIgYSB3aWRlIHJhbmdlIG9mIGtlcm5lbCB3ZSBhZGQgYm90aCBkZXBlbmRlbmNpZXMKK1RVSV9ERVBFTkRTID0gIiR7QHBlcmZfZmVhdHVyZV9lbmFibGVkKCdwZXJmLXR1aScsICdsaWJuZXd0IHNsYW5nJywgJycsZCl9IgorU0NSSVBUSU5HX0RFUEVORFMgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtc2NyaXB0aW5nJywgJ3BlcmwgcHl0aG9uJywgJycsZCl9IgorTElCVU5XSU5EX0RFUEVORFMgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtbGlidW53aW5kJywgJ2xpYnVud2luZCcsICcnLGQpfSIKKworREVQRU5EUyA9ICIgXAorICAgIHZpcnR1YWwvJHtNTFBSRUZJWH1saWJjIFwKKyAgICAke01MUFJFRklYfWVsZnV0aWxzIFwKKyAgICAke01MUFJFRklYfWJpbnV0aWxzIFwKKyAgICAke1RVSV9ERVBFTkRTfSBcCisgICAgJHtTQ1JJUFRJTkdfREVQRU5EU30gXAorICAgICR7TElCVU5XSU5EX0RFUEVORFN9IFwKKyAgICBiaXNvbiBmbGV4IHh6IFwKKyIKKworZG9fY29uZmlndXJlW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19zaGFyZWRfd29ya2RpciIKKworUFJPVklERVMgPSAidmlydHVhbC9wZXJmIgorCitpbmhlcml0IGxpbnV4LWtlcm5lbC1iYXNlIGtlcm5lbC1hcmNoIHB5dGhvbm5hdGl2ZQorCisjIG5lZWRlZCBmb3IgYnVpbGRpbmcgdGhlIHRvb2xzL3BlcmYgUHl0aG9uIGJpbmRpbmdzCitpbmhlcml0IHB5dGhvbi1kaXIKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorZXhwb3J0IFNUQUdJTkdfTElCRElSCitleHBvcnQgQlVJTERfU1lTCitleHBvcnQgSE9TVF9TWVMKK2V4cG9ydCBQWVRIT05fU0lURVBBQ0tBR0VTX0RJUgorCisja2VybmVsIDMuMSsgc3VwcG9ydHMgV0VSUk9SIHRvIGRpc2FibGUgd2FybmluZ3MgYXMgZXJyb3JzCitleHBvcnQgV0VSUk9SID0gIjAiCisKK2RvX3BvcHVsYXRlX2xpY1tkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fcGF0Y2giCisKKyMgbmVlZGVkIGZvciBidWlsZGluZyB0aGUgdG9vbHMvcGVyZiBQZXJsIGJpbmRpbmcKK2luaGVyaXQgcGVybG5hdGl2ZSBjcGFuLWJhc2UKKyMgRW52IHZhciB3aGljaCB0ZWxscyBwZXJsIGlmIGl0IHNob3VsZCB1c2UgaG9zdCAobm8pIG9yIHRhcmdldCAoeWVzKSBzZXR0aW5ncworZXhwb3J0IFBFUkxDT05GSUdUQVJHRVQgPSAiJHtAaXNfdGFyZ2V0KGQpfSIKK2V4cG9ydCBQRVJMX0lOQyA9ICIke1NUQUdJTkdfTElCRElSfSR7UEVSTF9PV05fRElSfS9wZXJsLyR7QGdldF9wZXJsX3ZlcnNpb24oZCl9L0NPUkUiCitleHBvcnQgUEVSTF9MSUIgPSAiJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfSIKK2V4cG9ydCBQRVJMX0FSQ0hMSUIgPSAiJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfSIKKworaW5oZXJpdCBrZXJuZWxzcmMKKworQiA9ICIke1dPUktESVJ9LyR7QlBOfS0ke1BWfSIKK1NQRFhfUyA9ICIke1N9L3Rvb2xzL3BlcmYiCisKK1NDUklQVElOR19ERUZJTkVTID0gIiR7QHBlcmZfZmVhdHVyZV9lbmFibGVkKCdwZXJmLXNjcmlwdGluZycsICcnLCAnTk9fTElCUEVSTD0xIE5PX0xJQlBZVEhPTj0xJyxkKX0iCitUVUlfREVGSU5FUyA9ICIke0BwZXJmX2ZlYXR1cmVfZW5hYmxlZCgncGVyZi10dWknLCAnJywgJ05PX05FV1Q9MScsZCl9IgorTElCVU5XSU5EX0RFRklORVMgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtbGlidW53aW5kJywgJycsICdOT19MSUJVTldJTkQ9MSBOT19MSUJEV19EV0FSRl9VTldJTkQ9MScsZCl9IgorTElCTlVNQV9ERUZJTkVTID0gIiR7QHBlcmZfZmVhdHVyZV9lbmFibGVkKCdwZXJmLWxpYm51bWEnLCAnJywgJ05PX0xJQk5VTUE9MScsZCl9IgorCisjIFRoZSBMREZMQUdTIGlzIHJlcXVpcmVkIG9yIHNvbWUgb2xkIGtlcm5lbHMgZmFpbHMgZHVlIG1pc3NpbmcKKyMgc3ltYm9scyBhbmQgdGhpcyBpcyBwcmVmZXJyZWQgdGhhbiByZXF1aXJpbmcgcGF0Y2hlcyB0byBldmVyeSBvbGQKKyMgc3VwcG9ydGVkIGtlcm5lbC4KK0xERkxBR1M9Ii1sZGwgLWx1dGlsIgorCitFWFRSQV9PRU1BS0UgPSAnXAorICAgIC1DICR7U30vdG9vbHMvcGVyZiBcCisgICAgTz0ke0J9IFwKKyAgICBDUk9TU19DT01QSUxFPSR7VEFSR0VUX1BSRUZJWH0gXAorICAgIEFSQ0g9JHtBUkNIfSBcCisgICAgQ0M9IiR7Q0N9IiBcCisgICAgQVI9IiR7QVJ9IiBcCisgICAgRVhUUkFfQ0ZMQUdTPSItbGR3IiBcCisgICAgcGVyZmV4ZWNkaXI9JHtsaWJleGVjZGlyfSBcCisgICAgTk9fR1RLMj0xICR7VFVJX0RFRklORVN9IE5PX0RXQVJGPTEgJHtMSUJVTldJTkRfREVGSU5FU30gXAorICAgICR7U0NSSVBUSU5HX0RFRklORVN9ICR7TElCTlVNQV9ERUZJTkVTfSBcCisnCisKK0VYVFJBX09FTUFLRSArPSAiXAorICAgICdwcmVmaXg9JHtwcmVmaXh9JyBcCisgICAgJ2JpbmRpcj0ke2JpbmRpcn0nIFwKKyAgICAnc2hhcmVkaXI9JHtkYXRhZGlyfScgXAorICAgICdzeXNjb25mZGlyPSR7c3lzY29uZmRpcn0nIFwKKyAgICAncGVyZmV4ZWNkaXI9JHtsaWJleGVjZGlyfS9wZXJmLWNvcmUnIFwKKyAgICBcCisgICAgJ0VUQ19QRVJGQ09ORklHPSR7QG9zLnBhdGgucmVscGF0aChzeXNjb25mZGlyLCBwcmVmaXgpfScgXAorICAgICdzaGFyZWRpcj0ke0Bvcy5wYXRoLnJlbHBhdGgoZGF0YWRpciwgcHJlZml4KX0nIFwKKyAgICAnbWFuZGlyPSR7QG9zLnBhdGgucmVscGF0aChtYW5kaXIsIHByZWZpeCl9JyBcCisgICAgJ2luZm9kaXI9JHtAb3MucGF0aC5yZWxwYXRoKGluZm9kaXIsIHByZWZpeCl9JyBcCisiCisKKworZG9fY29tcGlsZSgpIHsKKwkjIExpbnV4IGtlcm5lbCBidWlsZCBzeXN0ZW0gaXMgZXhwZWN0ZWQgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nCisJdW5zZXQgQ0ZMQUdTCisJb2VfcnVubWFrZSBhbGwKK30KKworZG9faW5zdGFsbCgpIHsKKwkjIExpbnV4IGtlcm5lbCBidWlsZCBzeXN0ZW0gaXMgZXhwZWN0ZWQgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nCisJdW5zZXQgQ0ZMQUdTCisJb2VfcnVubWFrZSBERVNURElSPSR7RH0gaW5zdGFsbAorCSMgd2UgYXJlIGNoZWNraW5nIGZvciB0aGlzIG1ha2UgdGFyZ2V0IHRvIGJlIGNvbXBhdGlibGUgd2l0aCBvbGRlciBwZXJmIHZlcnNpb25zCisJaWYgWyAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtc2NyaXB0aW5nJywgMSwgMCwgZCl9IiA9ICIxIiBdICYmIGdyZXAgLXEgaW5zdGFsbC1weXRob25fZXh0ICR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZSo7IHRoZW4KKwkJb2VfcnVubWFrZSBERVNURElSPSR7RH0gaW5zdGFsbC1weXRob25fZXh0CisJZmkKK30KKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworICAgICMgRml4IGZvciByZWJ1aWxkaW5nCisgICAgcm0gLXJmICR7Qn0vCisgICAgbWtkaXIgJHtCfS8KKworICAgICMgSWYgYnVpbGRpbmcgYSBtdWx0bGliIGJhc2VkIHBlcmYsIHRoZSBpbmNvcnJlY3QgbGlicmFyeSBwYXRoIHdpbGwgYmUKKyAgICAjIGRldGVjdGVkIGJ5IHBlcmYsIHNpbmNlIGl0IHRyaWdnZXJzIHZpYTogaWZlcSAoJChBUkNIKSx4ODZfNjQpLiBJbiBhIDMyIGJpdAorICAgICMgYnVpbGQsIHdpdGggYSA2NCBiaXQgbXVsdGlsaWIsIHRoZSBhcmNoIHdvbid0IG1hdGNoIGFuZCB0aGUgZGV0ZWN0aW9uIG9mIGEgCisgICAgIyA2NCBiaXQgYnVpbGQgKGFuZCBsaWJyYXJ5KSBhcmUgbm90IGV4ZWN0ZWQuIFRvIGVuc3VyZSB0aGF0IGxpYnJhcmllcyBhcmUKKyAgICAjIGluc3RhbGxlZCB0byB0aGUgY29ycmVjdCBsb2NhdGlvbiwgd2UgY2FuIHVzZSB0aGUgd2VhayBhc3NpZ25tZW50IGluIHRoZQorICAgICMgY29uZmlnL01ha2VmaWxlLgorICAgICMKKyAgICAjIEFsc28gbmVlZCB0byByZWxvY2F0ZSAuY29uZmlnLWRldGVjdGVkIHRvICQoT1VUUFVUKS9jb25maWctZGV0ZWN0ZWQKKyAgICAjIGZvciBrZXJuZWwgc291cmNlcyB0aGF0IGRvIG5vdCBhbHJlYWR5IGRvIHRoaXMKKyAgICAjIGFzIHR3byBidWlsZHMgKGUuZy4gcGVyZiBhbmQgbGliMzItcGVyZiBmcm9tIG11dGxpbGliIGNhbiBjb25mbGljdAorICAgICMgd2l0aCBlYWNoIG90aGVyIGlmIGl0cyBpbiB0aGUgc2hhcmVkIHNvdXJjZSBkaXJlY3RvcnkKKyAgICAjCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZSIgXTsgdGhlbgorICAgICAgICAjIE1hdGNoICQocHJlZml4KS8kKGxpYikgYW5kICQocHJlZml4KS9saWIKKyAgICAgICAgc2VkIC1pIC1lICdzLF5saWJkaXIgPSBcKCQocHJlZml4KS8uKmxpYlwpLGxpYmRpciA/PSBcMSwnIFwKKyAgICAgICAgICAgICAgIC1lICdzLF5wZXJmZXhlY2RpciA9IFwoLipcKSxwZXJmZXhlY2RpciA/PSBcMSwnIFwKKyAgICAgICAgICAgICAgIC1lICdzLFwgLmNvbmZpZy1kZXRlY3RlZCwgJChPVVRQVVQpL2NvbmZpZy1kZXRlY3RlZCxnJyBcCisgICAgICAgICAgICAke1N9L3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlCisgICAgZmkKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZiIgXTsgdGhlbgorICAgICAgICBzZWQgLWkgLWUgJ3MsXCAuY29uZmlnLWRldGVjdGVkLCAkKE9VVFBVVCkvY29uZmlnLWRldGVjdGVkLGcnIFwKKyAgICAgICAgICAgICR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCisgICAgICAgIHNlZCAtaSAtZSAicyxwcmVmaXg9J1wkKERFU1RESVJfU1EpL3VzcickLHByZWZpeD0nXCQoREVTVERJUl9TUSkvdXNyJyAtLWluc3RhbGwtbGliPSdcJChERVNURElSKVwkKFBZVEhPTl9TSVRFUEFDS0FHRVNfRElSKScsZyIgXAorICAgICAgICAgICAgJHtTfS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKKyAgICBmaQorICAgIHNlZCAtaSAtZSAicywtLXJvb3Q9Jy9cJChERVNURElSX1NRKScsLS1wcmVmaXg9J1wkKERFU1RESVJfU1EpL3VzcicgLS1pbnN0YWxsLWxpYj0nXCQoREVTVERJUilcJChQWVRIT05fU0lURVBBQ0tBR0VTX0RJUiknLGciIFwKKyAgICAgICAgJHtTfS90b29scy9wZXJmL01ha2VmaWxlCisKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL2J1aWxkL01ha2VmaWxlLmJ1aWxkIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAtZSAncyxcIC5jb25maWctZGV0ZWN0ZWQsICQoT1VUUFVUKS9jb25maWctZGV0ZWN0ZWQsZycgXAorICAgICAgICAgICAgJHtTfS90b29scy9idWlsZC9NYWtlZmlsZS5idWlsZAorICAgIGZpCisKKyAgICAjIFdlIG5lZWQgdG8gZW5zdXJlIHRoZSAtLXN5c3Jvb3Qgb3B0aW9uIGluIENDIGlzIHByZXNlcnZlZAorICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAncyxDQyA9ICQoQ1JPU1NfQ09NUElMRSlnY2MsI0NDLCcgJHtTfS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKKyAgICAgICAgc2VkIC1pICdzLEFSID0gJChDUk9TU19DT01QSUxFKWFyLCNBUiwnICR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCisgICAgZmkKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL2xpYi9hcGkvTWFrZWZpbGUiIF07IHRoZW4KKyAgICAgICAgc2VkIC1pICdzLENDID0gJChDUk9TU19DT01QSUxFKWdjYywjQ0MsJyAke1N9L3Rvb2xzL2xpYi9hcGkvTWFrZWZpbGUKKyAgICAgICAgc2VkIC1pICdzLEFSID0gJChDUk9TU19DT01QSUxFKWFyLCNBUiwnICR7U30vdG9vbHMvbGliL2FwaS9NYWtlZmlsZQorICAgIGZpCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy9NYWtlZmlsZSIgXTsgdGhlbgorICAgICAgICBzZWQgLWkgJ3MsQ0MgOj0gJChDUk9TU19DT01QSUxFKWdjYyAtTUQsQ0MgKz0gLU1ELCcgJHtTfS90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy9NYWtlZmlsZQorICAgIGZpCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAncyxDRkxBR1M9LENDPSJcJChDQykiIENGTEFHUz0sJyAke1N9L3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUKKyAgICBmaQorCisgICAgIyAzLjE3LXJjMSsgaGFzIGEgaW5jbHVkZSBpc3N1ZSBmb3IgYXJtL3Bvd2VycGMuIFRlbXBvcmFyaWx5IHNlZCBpbiB0aGUgYXBwcm9wcmlhdGUgaW5jbHVkZQorICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9hcmNoLyRBUkNIL3V0aWwvc2tpcC1jYWxsY2hhaW4taWR4LmMiIF07IHRoZW4KKyAgICAgICAgc2VkIC1pICdzLCNpbmNsdWRlICJ1dGlsL2NhbGxjaGFpbi5oIiwjaW5jbHVkZSAidXRpbC9jYWxsY2hhaW4uaCJcbiNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiLCcgJHtTfS90b29scy9wZXJmL2FyY2gvJEFSQ0gvdXRpbC9za2lwLWNhbGxjaGFpbi1pZHguYworICAgIGZpCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9wZXJmL2FyY2gvYXJtL3V0aWwvdW53aW5kLWxpYnVud2luZC5jIiBdICYmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9hcmNoL2FybS90ZXN0cy9kd2FyZi11bndpbmQuYyIgXTsgdGhlbgorICAgICAgICBzZWQgLWkgJ3MsI2luY2x1ZGUgInRlc3RzL3Rlc3RzLmgiLCNpbmNsdWRlICJ0ZXN0cy90ZXN0cy5oIlxuI2luY2x1ZGUgInV0aWwvZGVidWcuaCIsJyAke1N9L3Rvb2xzL3BlcmYvYXJjaC9hcm0vdGVzdHMvZHdhcmYtdW53aW5kLmMKKyAgICAgICAgc2VkIC1pICdzLCNpbmNsdWRlICJwZXJmX3JlZ3MuaCIsI2luY2x1ZGUgInBlcmZfcmVncy5oIlxuI2luY2x1ZGUgInV0aWwvZGVidWcuaCIsJyAke1N9L3Rvb2xzL3BlcmYvYXJjaC9hcm0vdXRpbC91bndpbmQtbGlidW53aW5kLmMKKyAgICBmaQorfQorCitweXRob24gZG9fcGFja2FnZV9wcmVwZW5kKCkgeworICAgIGQuc2V0VmFyKCdQS0dWJywgZC5nZXRWYXIoIktFUk5FTF9WRVJTSU9OIiwgVHJ1ZSkuc3BsaXQoIi0iKVswXSkKK30KKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworCitQQUNLQUdFUyA9KyAiJHtQTn0tYXJjaGl2ZSAke1BOfS10ZXN0cyAke1BOfS1wZXJsICR7UE59LXB5dGhvbiIKKworUkRFUEVORFNfJHtQTn0gKz0gImVsZnV0aWxzIGJhc2giCitSREVQRU5EU18ke1BOfS1hcmNoaXZlID0rICJiYXNoIgorUkRFUEVORFNfJHtQTn0tcHl0aG9uID0rICJiYXNoIHB5dGhvbiIKK1JERVBFTkRTXyR7UE59LXBlcmwgPSsgImJhc2ggcGVybCBwZXJsLW1vZHVsZXMiCitSREVQRU5EU18ke1BOfS10ZXN0cyA9KyAicHl0aG9uIgorCitSU1VHR0VTVFNfU0NSSVBUSU5HID0gIiR7QHBlcmZfZmVhdHVyZV9lbmFibGVkKCdwZXJmLXNjcmlwdGluZycsICcke1BOfS1wZXJsICR7UE59LXB5dGhvbicsICcnLGQpfSIKK1JTVUdHRVNUU18ke1BOfSArPSAiJHtQTn0tYXJjaGl2ZSAke1BOfS10ZXN0cyAke1JTVUdHRVNUU19TQ1JJUFRJTkd9IgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJleGVjZGlyfS9wZXJmLWNvcmUgJHtleGVjX3ByZWZpeH0vbGliZXhlYy9wZXJmLWNvcmUgJHtsaWJkaXJ9L3RyYWNlZXZlbnQiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvLmRlYnVnIgorRklMRVNfJHtQTn0tYXJjaGl2ZSA9ICIke2xpYmRpcn0vcGVyZi9wZXJmLWNvcmUvcGVyZi1hcmNoaXZlIgorRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtsaWJkaXJ9L3BlcmYvcGVyZi1jb3JlL3Rlc3RzIgorRklMRVNfJHtQTn0tcHl0aG9uID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMgJHtsaWJkaXJ9L3BlcmYvcGVyZi1jb3JlL3NjcmlwdHMvcHl0aG9uIgorRklMRVNfJHtQTn0tcGVybCA9ICIke2xpYmRpcn0vcGVyZi9wZXJmLWNvcmUvc2NyaXB0cy9wZXJsIgorCisKK0lOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVD0iMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9wb3dlcnRvcC9wb3dlcnRvcF8yLjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvcG93ZXJ0b3AvcG93ZXJ0b3BfMi43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYTA3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvcG93ZXJ0b3AvcG93ZXJ0b3BfMi43LmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiUG93ZXIgdXNhZ2UgdG9vbCIKK0RFU0NSSVBUSU9OID0gIkxpbnV4IHRvb2wgdG8gZGlhZ25vc2UgaXNzdWVzIHdpdGggcG93ZXIgY29uc3VtcHRpb24gYW5kIHBvd2VyIG1hbmFnZW1lbnQuIgorSE9NRVBBR0UgPSAiaHR0cDovLzAxLm9yZy9wb3dlcnRvcC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5sZXNzd2F0dHMub3JnLyIKK0RFUEVORFMgPSAibmN1cnNlcyBsaWJubCBwY2l1dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vMDEub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvZG93bmxvYWRzL3Bvd2VydG9wL3Bvd2VydG9wLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImUwZDY4NmU0N2RhYWY3ZTlkODkwMzFmNzc2MzQzMmVmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhkNGIxNDkwZTJiYWFkNDQ2N2MwZGVkM2M0MjNkYjQ0NzJkY2JmN2IyZGQ4ZjhmMmE5MjhmNTQwNDdjNjc4Y2EiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKKyMgd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgd2l0aCBsaWJpbnRsIGluIHVDbGliYyBzeXN0ZW1zCitFWFRSQV9MREZMQUdTID89ICIiCitFWFRSQV9MREZMQUdTX2xpYmMtdWNsaWJjID0gIi1saW50bCIKK0xERkxBR1MgKz0gIiR7RVhUUkFfTERGTEFHU30iCisKKyMgd2UgZG8gbm90IHdhbnQgbGlibmN1cnNlc3cgaWYgd2UgY2FuCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAjIGNvbmZpZ3VyZS5hYyBjaGVja3MgZm9yIGRlbHdpbigpIGluICJuY3Vyc2VzdyBuY3Vyc2VzIiBzbyBsZXQncyBkcm9wIGZpcnN0IG9uZQorICAgIHNlZCAtaSAtZSAicy9uY3Vyc2Vzdy8vZyIgJHtTfS9jb25maWd1cmUuYWMKKyAgICBta2RpciAtcCAke0J9L3NyYy90dW5pbmcvCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworQUxURVJOQVRJVkVfJHtQTn0gPSAicG93ZXJ0b3AiCitBTFRFUk5BVElWRV9UQVJHRVRbcG93ZXJ0b3BdID0gIiR7c2JpbmRpcn0vcG93ZXJ0b3AiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcG93ZXJ0b3BdID0gIiR7c2JpbmRpcn0vcG93ZXJ0b3AiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9kZWZpbmUtTlRfR05VX0JVSUxEX0lELnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvZGVmaW5lLU5UX0dOVV9CVUlMRF9JRC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2MyY2JlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvZGVmaW5lLU5UX0dOVV9CVUlMRF9JRC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitPbiB1Y2xpYmMgZWxmLmggZG9lcyBub3QgaGF2ZSBHTlUgZXh0ZW50aW9ucyBidXQgd2UgbmVlZCB0aGlzIGRlZmluZQorc28gd2UgZGVmaW5lIGl0IGxvY2FsbHkgaWYgaXRzIG5vdCBnZXR0aW5nIGl0IGZyb20gZWxmLmgKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnaXQvZWxmcGFyc2VyLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9lbGZwYXJzZXIuaAkyMDExLTA3LTE2IDE4OjU3OjQxLjAwMDAwMDAwMCAtMDcwMAorKysrIGdpdC9lbGZwYXJzZXIuaAkyMDExLTA3LTE2IDIwOjI4OjU0LjczMzgyOTg5NSAtMDcwMAorQEAgLTE3LDYgKzE3LDEwIEBACisgICovCisgI2luY2x1ZGUgPGdsaWIuaD4KKyAKKysjaWZuZGVmIE5UX0dOVV9CVUlMRF9JRAorKyNkZWZpbmUgTlRfR05VX0JVSUxEX0lEIDMKKysjZW5kaWYKKysKKyB0eXBlZGVmIHN0cnVjdCBFbGZTeW0gRWxmU3ltOworIHR5cGVkZWYgc3RydWN0IEVsZlBhcnNlciBFbGZQYXJzZXI7CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItYXJtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvcm1iLWFybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTNhYzY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvcm1iLWFybS5wYXRjaApAQCAtMCwwICsxLDIxIEBACisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2l0L3V0aWwuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3V0aWwuaAkyMDEwLTEyLTA3IDIyOjQxOjU3LjE1NjI0MzAwMSAtMDYwMAorKysrIGdpdC91dGlsLmgJMjAxMC0xMi0wNyAyMjo0Mzo0Ny42MTYyNDMwMDIgLTA2MDAKK0BAIC0zNyw0ICszNywxMyBAQAorICNkZWZpbmUgY3B1X3JlbGF4KCkgICAgIGFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpOworICNlbmRpZgorIAorKyNpZmRlZiBfX2FybV9fCisrLyoKKysgKiBVc2UgdGhlIF9fa3VzZXJfbWVtb3J5X2JhcnJpZXIgaGVscGVyIGluIHRoZSBDUFUgaGVscGVyIHBhZ2UuIFNlZQorKyAqIGFyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMgaW4gdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGRldGFpbHMuCisrICovCisrI2RlZmluZSBybWIoKQkJKCh2b2lkKCopKHZvaWQpKTB4ZmZmZjBmYTApKCkKKysjZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSgiIjo6OiJtZW1vcnkiKQorKyNlbmRpZgorKworICNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvcm1iLW1pcHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItbWlwcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDU1YjhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvcm1iLW1pcHMucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnaXQvdXRpbC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdXRpbC5oCTIwMTAtMTItMDggMDE6MjI6NDQuNDg2MjQzMDAxIC0wNjAwCisrKysgZ2l0L3V0aWwuaAkyMDEwLTEyLTA4IDAxOjIzOjI3LjgzNjI0MzAwMSAtMDYwMAorQEAgLTM3LDQgKzM3LDE1IEBACisgI2RlZmluZSBjcHVfcmVsYXgoKSAgICAgYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5Iik7CisgI2VuZGlmCisgCisrI2lmZGVmIF9fbWlwc19fCisrI2RlZmluZSBybWIoKQkJYXNtIHZvbGF0aWxlKAkJCQkJXAorKwkJCQkiLnNldAltaXBzMlxuXHQiCQkJXAorKwkJCQkic3luY1xuXHQiCQkJCVwKKysJCQkJIi5zZXQJbWlwczAiCQkJCVwKKysJCQkJOiAvKiBubyBvdXRwdXQgKi8JCQlcCisrCQkJCTogLyogbm8gaW5wdXQgKi8JCQlcCisrCQkJCTogIm1lbW9yeSIpCisrI2RlZmluZSBjcHVfcmVsYXgoKQlhc20gdm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKQorKyNlbmRpZgorKworICNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2Yvc3lzcHJvZl9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9zeXNwcm9mX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWMzZTEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2Yvc3lzcHJvZl9naXQuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJTeXN0ZW0td2lkZSBQZXJmb3JtYW5jZSBQcm9maWxlciBmb3IgTGludXgiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK0RFUEVORFMgPSAiZ3RrKyBsaWJnbGFkZSIKKworU1JDUkVWID0gImNkNDRlZTY2NDRjMzY0MTUwN2ZiNTNiOGEyYTY5MTM3ZjI5NzEyMTkiCitQViA9ICIxLjIuMCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZ25vbWUub3JnL3N5c3Byb2YgXAorICAgICAgICAgICBmaWxlOi8vZGVmaW5lLU5UX0dOVV9CVUlMRF9JRC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9hcm0gID0gIiBmaWxlOi8vcm1iLWFybS5wYXRjaCIKK1NSQ19VUklfYXBwZW5kX2FybWViICA9ICIgZmlsZTovL3JtYi1hcm0ucGF0Y2giCitTUkNfVVJJX2FwcGVuZF9taXBzID0gIiBmaWxlOi8vcm1iLW1pcHMucGF0Y2giCitTUkNfVVJJX2FwcGVuZF9taXBzNjQgPSAiIGZpbGU6Ly9ybWItbWlwcy5wYXRjaCIKK1NSQ19VUklfYXBwZW5kX21pcHM2NG4zMiA9ICIgZmlsZTovL3JtYi1taXBzLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworIyBXZSBkbyBub3QgeWV0IHdvcmsgZm9yIGFhcmNoNjQuCisjCitDT01QQVRJQkxFX0hPU1QgPSAiXig/IWFhcmNoNjQpLioiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwLXVwcm9iZXNfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAtdXByb2Jlc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU4OTA4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwLXVwcm9iZXNfZ2l0LmJiCkBAIC0wLDAgKzEsNDQgQEAKK1NVTU1BUlkgPSAiVVByb2JlcyBrZXJuZWwgbW9kdWxlIGZvciBTeXN0ZW1UYXAiCisKK3JlcXVpcmUgc3lzdGVtdGFwX2dpdC5pbmMKKworREVQRU5EUyA9ICJzeXN0ZW10YXAgdmlydHVhbC9rZXJuZWwiCisKK1BSID0gInIxIgorCisjIE9uIHN5c3RlbXMgd2l0aG91dCBDT05GSUdfVVRSQUNFLCB0aGlzIHBhY2thZ2UgaXMgZW1wdHkuCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitpbmhlcml0IG1vZHVsZS1iYXNlIGdldHRleHQKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vc3lzdGVtdGFwOiIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vc3lzdGVtdGFwL3J1bnRpbWUvdXByb2JlcyIKKworRVhUUkFfT0VNQUtFID0gIiIKKworIyBDb21waWxlIGFuZCBpbnN0YWxsIHRoZSB1cHJvYmVzIGtlcm5lbCBtb2R1bGUgb24gbWFjaGluZXMgd2l0aCB1dHJhY2UKKyMgc3VwcG9ydC4gIE5vdGUgdGhhdCBzdGFwcnVuIGV4cGVjdHMgaXQgaW4gdGhlIHN5c3RlbXRhcC9ydW50aW1lIGRpcmVjdG9yeSwKKyMgbm90IGluIC9saWIvbW9kdWxlcy4KK2RvX2NvbXBpbGUoKSB7CisJaWYgZ3JlcCAtcSAiQ09ORklHX1VUUkFDRT15IiAke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfS8uY29uZmlnCisJdGhlbgorCQl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUyBDQyBMRCBDUFAKKwkJb2VfcnVubWFrZSBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiBcCisJCQkgICBBUj0iJHtLRVJORUxfQVJ9IiBcCisJCQkgICAtQyAke1NUQUdJTkdfS0VSTkVMX0RJUn0gc2NyaXB0cworCQlvZV9ydW5tYWtlIEtESVI9JHtTVEFHSU5HX0tFUk5FTF9ESVJ9ICAgXAorCQkJICAgTT0iJHtTfS9ydW50aW1lL3Vwcm9iZXMvIiBcCisJCQkgICBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiBcCisJCQkgICBBUj0iJHtLRVJORUxfQVJ9IiBcCisJCQkgICAtQyAiJHtTfS9ydW50aW1lL3Vwcm9iZXMvIgorCWZpCit9CisKK2RvX2luc3RhbGwoKSB7CisJaWYgWyAtZSAiJHtTfS9ydW50aW1lL3Vwcm9iZXMvdXByb2Jlcy5rbyIgXQorCXRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9zeXN0ZW10YXAvcnVudGltZS91cHJvYmVzLworCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9ydW50aW1lL3Vwcm9iZXMvdXByb2Jlcy5rbyAke0R9JHtkYXRhZGlyfS9zeXN0ZW10YXAvcnVudGltZS91cHJvYmVzLworCWZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJ2aXJ0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlidmlydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGYyZmJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlidmlydC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIDVlYjEwZDkwYWY5MTc4ZWRiNjVlNjA5MWFlOTM5ZDFiNWIxOWJiNzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMjMgU2VwIDIwMTQgMDQ6NDc6MTAgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gc3lzdGVtdGFwOiBhbGxvdyB0byBkaXNhYmxlIGxpYnZpcnQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgICAxMyArKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYTYzMWFlNy4uY2I0ODg1YiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTI1LDEwICs1MjUsMTUgQEAgZG5sIENoZWNrIGZvciB0aGUgbGlidmlydCBhbmQgbGlieG1sMiBkZXZlbCBwYWNrYWdlcworIAorIGRubCBXZSByZXF1aXJlIGxpYnZpcnQgPj0gMS4wLjIgYmVjYXVzZSBzdGFwdmlydCByZWxpZXMgb24gdGhlCisgZG5sIHZpckRvbWFpbk9wZW5DaGFubmVsIGZ1bmN0aW9uLCB3aGljaCB3YXMgaW1wbGVtZW50ZWQgaW4gMS4wLjIuCistUEtHX0NIRUNLX01PRFVMRVMoW2xpYnZpcnRdLCBbbGlidmlydCA+PSAxLjAuMl0sIFsKKy0gICBoYXZlX2xpYnZpcnQ9eWVzCistICAgQUNfREVGSU5FKFtIQVZFX0xJQlZJUlRdLFsxXSxbRGVmaW5lIHRvIDEgaWYgbGlidmlydCBkZXZlbG9wbWVudCBsaWJyYXJpZXMgYXJlIGluc3RhbGxlZF0pCistICAgXSwgW2hhdmVfbGlidmlydD1ub10pCisrQUNfQVJHX0VOQUJMRShbbGlidmlydF0sCisrICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYnZpcnRdLCBbRG8gbm90IHVzZSBsaWJ2aXJ0IGV2ZW4gaWYgcHJlc2VudF0pKQorKworK2lmIHRlc3QgIiRlbmFibGVfbGlidmlydCIgIT0gbm87IHRoZW4KKysgIFBLR19DSEVDS19NT0RVTEVTKFtsaWJ2aXJ0XSwgW2xpYnZpcnQgPj0gMS4wLjJdLCBbCisrICAgICBoYXZlX2xpYnZpcnQ9eWVzCisrICAgICBBQ19ERUZJTkUoW0hBVkVfTElCVklSVF0sWzFdLFtEZWZpbmUgdG8gMSBpZiBsaWJ2aXJ0IGRldmVsb3BtZW50IGxpYnJhcmllcyBhcmUgaW5zdGFsbGVkXSkKKysgICAgIF0sIFtoYXZlX2xpYnZpcnQ9bm9dKQorK2ZpCisgQU1fQ09ORElUSU9OQUwoW0hBVkVfTElCVklSVF0sIFt0ZXN0ICIke2hhdmVfbGlidmlydH0iID0gInllcyJdKQorIFBLR19DSEVDS19NT0RVTEVTKFtsaWJ4bWwyXSwgW2xpYnhtbC0yLjBdLCBbCisgICAgaGF2ZV9saWJ4bWwyPXllcworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL2RvY3Byb2MtYnVpbGQtZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvZG9jcHJvYy1idWlsZC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNhODk5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL2RvY3Byb2MtYnVpbGQtZml4LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGludGVsLmNvbT4KKworSW5kZXg6IGdpdC9kb2MvU3lzdGVtVGFwX1RhcHNldF9SZWZlcmVuY2UvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9kb2MvU3lzdGVtVGFwX1RhcHNldF9SZWZlcmVuY2UvTWFrZWZpbGUuYW0JMjAxMi0wNC0xMyAwODo0Mzo0Ni4yNjMzMzkwMDMgLTA1MDAKKysrKyBnaXQvZG9jL1N5c3RlbVRhcF9UYXBzZXRfUmVmZXJlbmNlL01ha2VmaWxlLmFtCTIwMTItMDQtMTMgMDk6MzE6MjIuNDcwMDgzOTE1IC0wNTAwCitAQCAtMjcsNiArMjcsMTAgQEAKKyBub2luc3RfUFJPR1JBTVMgPSBkb2Nwcm9jCisgU1JDVFJFRT0kKGFic190b3Bfc3JjZGlyKS8KKyBET0NQUk9DPSQoYWJzX2J1aWxkZGlyKS9kb2Nwcm9jCisrZG9jcHJvY19MSU5LID0gJChDQ19GT1JfQlVJTEQpICQoTERGTEFHU19GT1JfQlVJTEQpIC1vICRACisrCisrZG9jcHJvYy5vOiAkKHNyY2RpcikvZG9jcHJvYy5jCisrCSQoQ0NfRk9SX0JVSUxEKSAtYyAkKENGTEFHU19GT1JfQlVJTEQpIC1vICRAICQoc3JjZGlyKS9kb2Nwcm9jLmMKKyAKKyBhbGw6ICQoUERGRE9DUykgc3RhbXAtaHRtbGRvY3Mgc3RhbXAtbWFuZG9jcworIHRhcHNldHMueG1sOiBkb2Nwcm9jICQoc2hlbGwgZmluZCAkKFNSQ1RSRUUpL3RhcHNldCAtbmFtZSAnKi5zdHAnKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OGNkYTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitJbmRleDogZ2l0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdpdC9jb25maWd1cmUuYWMKK0BAIC0xOSw3ICsxOSw2IEBAIEFDX1BST0dfTE5fUworIEFDX1BST0dfQ0MKKyBBQ19QUk9HX0NYWAorIEFDX1BST0dfQ1BQCistQU1fUFJPR19DQ19TVERDCisgQU1fUFJPR19DQ19DX08KKyBBQ19QUk9HX1JBTkxJQgorIEFDX09CSkVYVApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvc3lzdGVtX21hcF9sb2NhdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL3N5c3RlbV9tYXBfbG9jYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEzYWY1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL3N5c3RlbV9tYXBfbG9jYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorc3lzdGVtdGFwOiBDcm9zcyBjb21waWxhdGlvbiBmaXgKKworVGhpcyBpcyBhIGNyb3NzIGNvbXBpbGF0aW9uIGZpeC4gSXQgYWxsb3dzIHN5c3RlbXRhcCB0byBmaW5kCit0aGUga2VybmVsIG1hcCBmaWxlIGluIHRoZSByaWdodCBwbGFjZSwgaS5lLiBpbiB0aGUga2VybmVsIGJ1aWxkIHRyZWUuCitXaXRob3V0IHRoaXMgZml4IGl0IHRha2VzIGEgbWFwIGZpbGUgZnJvbSB0aGUgYnVpbGQgaG9zdCwgaWYgYXZhaWxhYmxlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWlraGFpbCBEdXJuZXYgPG1pa2hhaWxfZHVybmV2QG1lbnRvci5jb20+CisKK0luZGV4OiBnaXQvc2Vzc2lvbi5jeHgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zZXNzaW9uLmN4eAorKysrIGdpdC9zZXNzaW9uLmN4eAorQEAgLTE2MzQsNyArMTYzNCw3IEBAIHN5c3RlbXRhcF9zZXNzaW9uOjpwYXJzZV9rZXJuZWxfZnVuY3Rpb24KKyAJY2xvZyA8PCBfRigiS2VybmVsIHN5bWJvbCB0YWJsZSAlcyB1bmF2YWlsYWJsZSwgKCVzKSIsCisgCQkgICBzeXN0ZW1fbWFwX3BhdGguY19zdHIoKSwgc3RyZXJyb3IoZXJybm8pKSA8PCBlbmRsOworIAorLSAgICAgIHN5c3RlbV9tYXBfcGF0aCA9ICIvYm9vdC9TeXN0ZW0ubWFwLSIgKyBrZXJuZWxfcmVsZWFzZTsKKysgICAgICBzeXN0ZW1fbWFwX3BhdGggPSBrZXJuZWxfYnVpbGRfdHJlZSArICIvU3lzdGVtLm1hcC0iICsga2VybmVsX3JlbGVhc2U7CisgICAgICAgc3lzdGVtX21hcC5jbGVhcigpOworICAgICAgIHN5c3RlbV9tYXAub3BlbihzeXN0ZW1fbWFwX3BhdGguY19zdHIoKSwgaWZzdHJlYW06OmluKTsKKyAgICAgICBpZiAoISBzeXN0ZW1fbWFwLmlzX29wZW4oKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL3gzMl9hYmlfdGltZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL3gzMl9hYmlfdGltZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGE3ZWFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAveDMyX2FiaV90aW1lLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0ZpeCB0aW1lX3QgcHJpbnQgYmVjYXVzZSBpbiB4MzIgQUJJIGlzIGxvbmcgbG9uZyBpbnQgaW5zdGVhZCBvZiBsb25nIGludC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY2FjaGUuY3h4IGIvY2FjaGUuY3h4CitpbmRleCAzNTQ2YjMwLi4xOWM3N2NhIDEwMDY0NAorLS0tIGEvY2FjaGUuY3h4CisrKysgYi9jYWNoZS5jeHgKK0BAIC0yOTQsNyArMjk0LDExIEBAIGNsZWFuX2NhY2hlKHN5c3RlbXRhcF9zZXNzaW9uJiBzKQorICAgICAgICAgeworICAgICAgICAgICAvL2ludGVydmFsIG5vdCBwYXNzZWQsIGRvbid0IGNvbnRpbnVlCisgICAgICAgICAgIGlmIChzLnZlcmJvc2UgPiAxKQorKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQgKF9fSUxQMzJfXykKKysgICAgICAgICAgICBjbG9nIDw8IF9GKCJDYWNoZSBjbGVhbmluZyBza2lwcGVkLCBpbnRlcnZhbCBub3QgcmVhY2hlZCAlbGxkIHMgLyAlbHUgcy4iLAorKyNlbHNlCisgICAgICAgICAgICAgY2xvZyA8PCBfRigiQ2FjaGUgY2xlYW5pbmcgc2tpcHBlZCwgaW50ZXJ2YWwgbm90IHJlYWNoZWQgJWx1IHMgLyAlbHUgcy4iLAorKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRfdGltZS50dl9zZWMtc2Iuc3RfbXRpbWUpLCBjYWNoZV9jbGVhbl9pbnRlcnZhbCkgIDw8IGVuZGw7CisgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgIH0KK0BAIC0zMDIsNyArMzA2LDExIEBAIGNsZWFuX2NhY2hlKHN5c3RlbXRhcF9zZXNzaW9uJiBzKQorICAgICAgICAgeworICAgICAgICAgICAvL2ludGVydmFsIHJlYWNoZWQsIGNvbnRpbnVlCisgICAgICAgICAgIGlmIChzLnZlcmJvc2UgPiAxKQorKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQgKF9fSUxQMzJfXykKKysgICAgICAgICAgICBjbG9nIDw8IF9GKCJDbGVhbmluZyBjYWNoZSwgaW50ZXJ2YWwgcmVhY2hlZCAlbGxkIHMgPiAlbHUgcy4iLAorKyNlbHNlCisgICAgICAgICAgICAgY2xvZyA8PCBfRigiQ2xlYW5pbmcgY2FjaGUsIGludGVydmFsIHJlYWNoZWQgJWx1IHMgPiAlbHUgcy4iLAorKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRfdGltZS50dl9zZWMtc2Iuc3RfbXRpbWUpLCBjYWNoZV9jbGVhbl9pbnRlcnZhbCkgIDw8IGVuZGw7CisgICAgICAgICB9CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBkZDQyYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIlNjcmlwdC1kaXJlY3RlZCBkeW5hbWljIHRyYWNpbmcgYW5kIHBlcmZvcm1hbmNlIGFuYWx5c2lzIHRvb2wgZm9yIExpbnV4IgorCityZXF1aXJlIHN5c3RlbXRhcF9naXQuaW5jCisKK0RFUEVORFMgPSAiZWxmdXRpbHMgc3FsaXRlMyBzeXN0ZW10YXAtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiZWxmdXRpbHMtbmF0aXZlIHNxbGl0ZTMtbmF0aXZlIGdldHRleHQtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAibmF0aXZlc2RrLWVsZnV0aWxzIG5hdGl2ZXNkay1zcWxpdGUzIG5hdGl2ZXNkay1nZXR0ZXh0IgorCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uIGJhc2giCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgKz0gInB5dGhvbi1uYXRpdmUiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgKz0gInB5dGhvbi1uYXRpdmUiCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLWxpYmVsZj0ke1NUQUdJTkdfRElSX1RBUkdFVH0gLS13aXRob3V0LXJwbSBcCisgICAgICAgICAgICAtLXdpdGhvdXQtbnNzIC0td2l0aG91dC1hdmFoaSAtLXdpdGhvdXQtZHluaW5zdCBcCisgICAgICAgICAgICAtLWRpc2FibGUtc2VydmVyIC0tZGlzYWJsZS1ncmFwaGVyIC0tZW5hYmxlLXByb2xvZ3VlcyBcCisgICAgICAgICAgICBhY19jdl9wcm9nX2hhdmVfamF2YWM9bm8gXAorICAgICAgICAgICAgYWNfY3ZfcHJvZ19oYXZlX2phcj1ubyAiCisKK1NUQVBfRE9DUyA/PSAiLS1kaXNhYmxlLWRvY3MgLS1kaXNhYmxlLXB1YmxpY2FuIC0tZGlzYWJsZS1yZWZkb2NzIgorCitFWFRSQV9PRUNPTkYgKz0gIiR7U1RBUF9ET0NTfSAiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2xpYnZpcnRdID0gIi0tZW5hYmxlLWxpYnZpcnQsLS1kaXNhYmxlLWxpYnZpcnQsbGlidmlydCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vc3lzdGVtdGFwLy5kZWJ1ZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YTU3OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuaW5jCkBAIC0wLDAgKzEsMjggQEAKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKK1NSQ1JFViA9ICJiZjE2MjY2NzgyZTFmMjU4OGI1MTlhNTBkOTY4NDI3OWQ0ZTIxMDM2IgorUFYgPSAiMi43K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL3NvdXJjZXdhcmUub3JnL2dpdC9zeXN0ZW10YXAuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2RvY3Byb2MtYnVpbGQtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXN0ZW1fbWFwX2xvY2F0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1hbGxvdy10by1kaXNhYmxlLWxpYnZpcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8veDMyX2FiaV90aW1lLnBhdGNoIFwKKyAgICAgICAgICAiCisKKyMgc3lzdGVtdGFwIGRvZXNuJ3Qgc3VwcG9ydCBtaXBzCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NHxpLjg2fHBvd2VycGN8YXJtfGFhcmNoNjQpLiotbGludXgnCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKKyMgc3lzdGVtdGFwIGNhbid0IGJlIGJ1aWx0IHdpdGhvdXQgb3B0aW1pemF0aW9uLCBpZiBzb21lb25lIHRyaWVzIHRvIGNvbXBpbGUgYW4KKyMgZW50aXJlIGltYWdlIGFzIC1PMCwgd2Ugb3ZlcnJpZGUgaXQgd2l0aCAtTzIgaGVyZSBhbmQgZ2l2ZSBhIG5vdGUgYWJvdXQgaXQuCitkZWYgZ2V0X29wdGltaXphdGlvbihkKToKKyAgICBzZWxlY3RlZF9vcHRpbWl6YXRpb24gPSBkLmdldFZhcigiU0VMRUNURURfT1BUSU1JWkFUSU9OIiwgVHJ1ZSkKKyAgICBpZiBiYi51dGlscy5jb250YWlucygiU0VMRUNURURfT1BUSU1JWkFUSU9OIiwgIi1PMCIsICJ4IiwgIiIsIGQpID09ICJ4IjoKKyAgICAgICAgYmIubm90ZSgic3lzdGVtdGFwIGNhbid0IGJlIGJ1aWx0IHdpdGggLU8wLCAtTzIgd2lsbCBiZSB1c2VkIGluc3RlYWQuIikKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkX29wdGltaXphdGlvbi5yZXBsYWNlKCItTzAiLCAiLU8yIikKKyAgICByZXR1cm4gc2VsZWN0ZWRfb3B0aW1pemF0aW9uCisKK1NFTEVDVEVEX09QVElNSVpBVElPTiA6PSAiJHtAZ2V0X29wdGltaXphdGlvbihkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL2tlcm5lbHNoYXJrX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQva2VybmVsc2hhcmtfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZWNjYWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL2tlcm5lbHNoYXJrX2dpdC5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIkdyYXBoaWNhbCB0cmFjZSB2aWV3ZXIgZm9yIEZ0cmFjZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK3JlcXVpcmUgdHJhY2UtY21kLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9rZXJuZWwtc2hhcmsuYztiZWdpbmxpbmU9NjtlbmRsaW5lPTg7bWQ1PTJjMjJjOTY1YTY0OWRkZDc5NzNkNzkxM2M1NjM0YTVlIgorCitERVBFTkRTID0gImd0aysgbGlieG1sMiIKK1JERVBFTkRTXyR7UE59ID0gInRyYWNlLWNtZCIKKworRVhUUkFfT0VNQUtFID0gIlwKKyAgICAncHJlZml4PSR7cHJlZml4fScgXAorICAgICdiaW5kaXJfcmVsYXRpdmU9JHtAb2UucGF0aC5yZWxhdGl2ZShwcmVmaXgsIGJpbmRpcil9JyBcCisgICAgJ2xpYmRpcj0ke0BvZS5wYXRoLnJlbGF0aXZlKHByZWZpeCwgbGliZGlyKX0nIFwKKyAgICBOT19QWVRIT049MSBcCisgICAgZ3VpIFwKKyIKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgTWFrZSBzdXJlIHRoZSByZWNvbXBpbGUgaXMgT0sKKyAgICBybSAtZiAke0J9Ly4qLmQKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICBvZV9ydW5tYWtlIERFU1RESVI9IiR7RH0iIGluc3RhbGxfZ3VpCisgICAgcm0gJHtEfSR7YmluZGlyfS90cmFjZS1jbWQKKyAgICBybSAtcmYgJHtEfSR7bGliZGlyfS90cmFjZS1jbWQKKyAgICBybWRpciAke0R9JHtsaWJkaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdlNGE5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kLmluYwpAQCAtMCwwICsxLDEyIEBACitTUkNSRVYgPSAiMDgxMzMzNWQyZTQ5MjkxZTdhYjZhNDM2NWNlYzJiYWEwNTgxM2VkYSIKK1BWID0gIjIuNS4zK2dpdCR7U1JDUFZ9IgorCitpbmhlcml0IHBrZ2NvbmZpZworCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS90cmFjZS1jbWQ6IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9yb3N0ZWR0L3RyYWNlLWNtZC5naXQ7YnJhbmNoPXRyYWNlLWNtZC1zdGFibGUtdjIuNSBcCisgICAgICAgICAgIGZpbGU6Ly9ibGt0cmFjZS1hcGktY29tcGF0aWJpbGl0eS5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZC9ibGt0cmFjZS1hcGktY29tcGF0aWJpbGl0eS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kL2Jsa3RyYWNlLWFwaS1jb21wYXRpYmlsaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMGRiNmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZC9ibGt0cmFjZS1hcGktY29tcGF0aWJpbGl0eS5wYXRjaApAQCAtMCwwICsxLDI5IEBACit0cmFjZS1jbWQ6IEFkZCBibGt0cmFjZV9hcGkgY29tcGF0aWJpbGl0eSBmb3IgVENfQkFSUklFUgorCitOZXdlciBrZXJuZWxzIHJlcGxhY2UgVENfQkFSUklFUiB3aXRoIFRDX0ZMVVNILiBFbnN1cmUgdHJhY2UtY21kCitjYW4gYnVpbGQgcmVnYXJkbGVzcyBvZiB0aGUgbGludXgta2VybmVsLWhlYWRlcnMgdmVyc2lvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtTdG9wIGdhcF0KKworU2lnbmVkLW9mZi1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9wbHVnaW5fYmxrLmMgYi9wbHVnaW5fYmxrLmMKK2luZGV4IDkzMjdiMTcuLmM4ZTVlMWMgMTAwNjQ0CistLS0gYS9wbHVnaW5fYmxrLmMKKysrKyBiL3BsdWdpbl9ibGsuYworQEAgLTQ0LDYgKzQ0LDE1IEBAIHN0cnVjdCBibGtfZGF0YSB7CisgCXVuc2lnbmVkIHNob3J0CQlwZHVfbGVuOworIH07CisgCisrLyoKKysgKiBOZXdlciBrZXJuZWxzIGRvbid0IGRlZmluZSBCTEtfVENfQkFSUklFUiBhbmQgaGF2ZSByZXBsYWNlZCBpdCB3aXRoCisrICogQkxLX1RDX0ZMVVNILiBJbiB0aGlzIGNhc2UsIGRlZmluZSBpdCBoZXJlIGFuZCByZXBvcnQgRkxVU0hFUyBhcyBCQVJSSUVSUyBhcworKyAqIGEgd29ya2Fyb3VuZCwgYXMgZGVzY3JpYmVkIGluOgorKyAqIGh0dHA6Ly9naXQua2VybmVsLm9yZy8/cD1saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LmdpdDthPWNvbW1pdDtoPWMwOWM0N2NhZWRjOTg1NGQ1OTM3OGQ2ZTM0Yzk4OWU1MWNmZGQyYjQKKysgKi8KKysjaWZuZGVmIEJMS19UQ19CQVJSSUVSCisrI2RlZmluZSBCTEtfVENfQkFSUklFUiAxPDwyCisrI2VuZGlmCisgc3RhdGljIHZvaWQgZmlsbF9yd2JzKGNoYXIgKnJ3YnMsIGludCBhY3Rpb24sIHVuc2lnbmVkIGludCBieXRlcykKKyB7CisgCWludCBpID0gMDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWFjNzg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC90cmFjZS1jbWRfZ2l0LmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiVXNlciBpbnRlcmZhY2UgdG8gRnRyYWNlIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorCityZXF1aXJlIHRyYWNlLWNtZC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdHJhY2UtY21kLmM7YmVnaW5saW5lPTY7ZW5kbGluZT04O21kNT0yYzIyYzk2NWE2NDlkZGQ3OTczZDc5MTNjNTYzNGE1ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9YmJiNDYxMjExYTMzYjEzNGQ0MmVkNWVlODAyYjM3ZmYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdHJhY2UtaW5wdXQuYztiZWdpbmxpbmU9NTtlbmRsaW5lPTg7bWQ1PTNlYzgyZjQzYmJlMGNmYjU5NTFmZjQxNGVmNGQ0NGQwIFwKKyIKKworRVhUUkFfT0VNQUtFID0gIlwKKyAgICAncHJlZml4PSR7cHJlZml4fScgXAorICAgICdiaW5kaXI9JHtiaW5kaXJ9JyBcCisgICAgJ21hbl9kaXI9JHttYW5kaXJ9JyBcCisgICAgJ2h0bWxfaW5zdGFsbD0ke2RhdGFkaXJ9L2tlcm5lbHNoYXJrL2h0bWwnIFwKKyAgICAnaW1nX2luc3RhbGw9JHtkYXRhZGlyfS9rZXJuZWxzaGFyay9odG1sL2ltYWdlcycgXAorICAgIFwKKyAgICAnYmluZGlyX3JlbGF0aXZlPSR7QG9lLnBhdGgucmVsYXRpdmUocHJlZml4LCBiaW5kaXIpfScgXAorICAgICdsaWJkaXI9JHtAb2UucGF0aC5yZWxhdGl2ZShwcmVmaXgsIGxpYmRpcil9JyBcCisgICAgXAorICAgIE5PX1BZVEhPTj0xIFwKKyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vdHJhY2UtY21kL3BsdWdpbnMvLmRlYnVnIgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSworICAgIHJtIC1mICR7Qn0vLiouZAorfQorCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIERFU1RESVI9IiR7RH0iIGluc3RhbGwKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9saWJwbmcvbGlicG5nMTJfMS4yLjUzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9saWJwbmcvbGlicG5nMTJfMS4yLjUzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmODYxYTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L2xpYnBuZy9saWJwbmcxMl8xLjIuNTMuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJQTkcgaW1hZ2UgZm9ybWF0IGRlY29kaW5nIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYnBuZy5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMaWJwbmciCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1iZDJhN2ExMzM1NWZjY2E5MmFkODNiZGY3ZTI5NjAxMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wbmcuaDtiZWdpbmxpbmU9MzIyO2VuZGxpbmU9NDM2O21kNT1jYWY5ZWU1NDEyMzRjNjYzYWVlY2RjZmVmMmY3OWFlMSIKK0RFUEVORFMgPSAiemxpYiIKKworUE4gPSAibGlicG5nMTIiCitTID0gIiR7V09SS0RJUn0vbGlicG5nLSR7UFZ9IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0L2xpYnBuZy9saWJwbmcxMi8ke1BWfS9saWJwbmctJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2QxOGE3NGU2ZmQyMDI5YWVlNzZjY2QwMGUwMGE5ZTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjQ1ZTQ5ZjY4OWU3NDUxYmQ1NzY1NjllNmEzNDRmN2UwZDExYzAyZWNiYjc5N2Y0ZGEwZTQzMTUyNjc2NWMwYSIKKworQklOQ09ORklHX0dMT0IgPSAiJHtQTn0tY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWcgcGtnY29uZmlnCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgVGhlIGZvbGxvdyBsaW5rIGZpbGVzIGxpbmsgdG8gY29ycmVzcG9uZGluZyBwbmcxMiouaCBhbmQgbGlicG5nMTIqIGZpbGVzCisJIyBUaGV5IGNvbmZsaWN0IHdpdGggaGlnaGVyIHZlcmlzb24sIHNvIGRyb3AgdGhlbQorCXVubGluayAke0R9LyR7aW5jbHVkZWRpcn0vcG5nLmgKKwl1bmxpbmsgJHtEfS8ke2luY2x1ZGVkaXJ9L3BuZ2NvbmYuaAorCisJdW5saW5rICR7RH0vJHtsaWJkaXJ9L2xpYnBuZy5sYQorCXVubGluayAke0R9LyR7bGliZGlyfS9saWJwbmcuc28KKwl1bmxpbmsgJHtEfS8ke2xpYmRpcn0vbGlicG5nLmEKKwl1bmxpbmsgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnL2xpYnBuZy5wYworCisJdW5saW5rICR7RH0vJHtiaW5kaXJ9L2xpYnBuZy1jb25maWcKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJjbGFzcy1pc2EtcGVybF8wLjM2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmNsYXNzLWlzYS1wZXJsXzAuMzYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzODQxZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJjbGFzcy1pc2EtcGVybF8wLjM2LmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgZm9yIHJlcG9ydGluZyB0aGUgc2VhcmNoIHBhdGggZm9yIGEgY2xhc3MncyBJU0EgdHJlZSIKK0RFU0NSSVBUSU9OID0gIlN1cHBvc2UgeW91IGhhdmUgYSBjbGFzcyAobGlrZSBGb29kOjpGaXNoOjpGaXNoc3RpY2spIHRoYXQgaXMgZGVyaXZlZCwgXAordmlhIGl0cyBASVNBLCBmcm9tIG9uZSBvciBtb3JlIHN1cGVyY2xhc3NlcyAoYXMgRm9vZDo6RmlzaDo6RmlzaHN0aWNrIGlzIGZyb20gRm9vZDo6RmlzaCxcCitMaWZlOjpGdW5ndXMsIGFuZCBDaGVtaWNhbHMpLCBhbmQgc29tZSBvZiB0aG9zZSBzdXBlcmNsYXNzZXMgbWF5IHRoZW1zZWx2ZXMgZWFjaCBiZVwKK2Rlcml2ZWQsIHZpYSBpdHMgQElTQSwgZnJvbSBvbmUgb3IgbW9yZSBzdXBlcmNsYXNzZXMgKGFzIGFib3ZlKS5cCitcCitXaGVuLCB0aGVuLCB5b3UgY2FsbCBhIG1ldGhvZCBpbiB0aGF0IGNsYXNzICgkZmlzaHN0aWNrLT5jYWxvcmllcyksIFBlcmwgZmlyc3Qgc2VhcmNoZXNcCit0aGVyZSBmb3IgdGhhdCBtZXRob2QsIGJ1dCBpZiBpdCdzIG5vdCB0aGVyZSwgaXQgZ29lcyBzZWFyY2hpbmcgaW4gaXRzIHN1cGVyY2xhc3NlcywgYW5kXAorc28gb24sIGluIGEgZGVwdGgtZmlyc3QgKG9yIG1heWJlICJoZWlnaHQtZmlyc3QiIGlzIHRoZSB3b3JkKSBzZWFyY2guIEluIHRoZSBhYm92ZSBleGFtcGxlLFwKK2l0J2QgZmlyc3QgbG9vayBpbiBGb29kOjpGaXNoLCB0aGVuIEZvb2QsIHRoZW4gTWF0dGVyLCB0aGVuIExpZmU6OkZ1bmd1cywgdGhlbiBMaWZlLCB0aGVuXAorQ2hlbWljYWxzLlwKK1wKK1RoaXMgbGlicmFyeSwgQ2xhc3M6OklTQSwgcHJvdmlkZXMgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHRoYXQgbGlzdCAtLSB0aGUgbGlzdFwKKyhpbiBvcmRlcikgb2YgbmFtZXMgb2YgY2xhc3NlcyBQZXJsIHdvdWxkIHNlYXJjaCB0byBmaW5kIGEgbWV0aG9kLCB3aXRoIG5vIGR1cGxpY2F0ZXMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL2Rpc3QvQ2xhc3MtSVNBLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MTA3O2VuZGxpbmU9MTExO21kNT02YTVjNjg0MmE2M2NmZTRkYWIxZjY2ZTIzNTBlNGQyNSIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9TL1NNL1NNVUVMTEVSL0NsYXNzLUlTQS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzYTJhZDIwM2M4ZGM4N2Q2YzlkZTE2MjE1ZDAwYWY0NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ODE2ZjM0ZTlhMzhlODQ5YTEwZGY3NTYwMzBkY2NmOWZlMDYxYTE5NmMxMWFjM2ZhYWZkNzExM2M5MjliOTY0IgorCitTID0gIiR7V09SS0RJUn0vQ2xhc3MtSVNBLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZHVtcHZhbHVlLXBlcmxfMS4xNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJkdW1wdmFsdWUtcGVybF8xLjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNzQ2MTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZHVtcHZhbHVlLXBlcmxfMS4xNy5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIGZvciBwcm92aWRlcyBzY3JlZW4gZHVtcCBvZiBQZXJsIGRhdGEiCisKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfmZsb3JhL0R1bXB2YWx1ZS8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mNzM2YmVjNWFkYTFmYzVlMzliMmE4ZTdlMDZiYmNiYiIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9GL0ZML0ZMT1JBL0R1bXB2YWx1ZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ZWRlOWY2OTNkNGE5YzQ1NTU1NDFjYjFhMWNjMjAwNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZWE3NDYwNmI1NDVmNzY5YTc4N2VjMmFlMjI5NTQ5YTJhZDBhOGUzY2Q0YjE0ZWZmMmNlMzg0MTgzNmIzYmRiIgorCitTID0gIiR7V09SS0RJUn0vRHVtcHZhbHVlLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZW52LXBlcmxfMS4wNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJlbnYtcGVybF8xLjA0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOGUxMTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZW52LXBlcmxfMS4wNC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIHRoYXQgaW1wb3J0cyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXMgc2NhbGFycyBvciBhcnJheXMiCitERVNDUklQVElPTiA9ICJQZXJsIG1haW50YWlucyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gYSBzcGVjaWFsIGhhc2ggbmFtZWQgJUVOVi4gXAorRm9yIHdoZW4gdGhpcyBhY2Nlc3MgbWV0aG9kIGlzIGluY29udmVuaWVudCwgdGhlIFBlcmwgbW9kdWxlIEVudiBhbGxvd3MgZW52aXJvbm1lbnQgXAordmFyaWFibGVzIHRvIGJlIHRyZWF0ZWQgYXMgc2NhbGFyIG9yIGFycmF5IHZhcmlhYmxlcy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfmZsb3JhL0Vudi8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT03NmMxY2JmMThkYjU2YjMzNDBkOTFjYjk0Nzk0M2JkMyIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9GL0ZML0ZMT1JBL0Vudi0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZGJhNWMwNjkwZTY2OTcyYzk2ZmVlMTEyY2Y1ZjI1YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkOTRhM2Q0MTJkZjI0NmFmZGMzMWEyMTk5Y2JkOGFlOTE1MTY3YTNmNDY4NGY3YjcwMTRjZTEyMDAyNTFlYmIwIgorCitTID0gIiR7V09SS0RJUn0vRW52LSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZmlsZS1jaGVja3RyZWUtcGVybF80LjQxLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmZpbGUtY2hlY2t0cmVlLXBlcmxfNC40MS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTM3YzcyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmZpbGUtY2hlY2t0cmVlLXBlcmxfNC40MS5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIHRoYXQgcnVuIG1hbnkgZmlsZXRlc3QgY2hlY2tzIG9uIGEgdHJlZSIKK0RFU0NSSVBUSU9OID0gIlRoZSB2YWxpZGF0ZSgpIHJvdXRpbmUgdGFrZXMgYSBzaW5nbGUgbXVsdGlsaW5lIHN0cmluZyBjb25zaXN0aW5nIFwKK29mIGRpcmVjdGl2ZXMsIGVhY2ggY29udGFpbmluZyBhIGZpbGVuYW1lIHBsdXMgYSBmaWxlIHRlc3QgdG8gdHJ5IG9uIGl0LiAoVGhlIGZpbGUgXAordGVzdCBtYXkgYWxzbyBiZSBhICJjZCIsIGNhdXNpbmcgc3Vic2VxdWVudCByZWxhdGl2ZSBmaWxlbmFtZXMgdG8gYmUgaW50ZXJwcmV0ZWQgXAorcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnkuKSBBZnRlciB0aGUgZmlsZSB0ZXN0IHlvdSBtYXkgcHV0IHx8IGRpZSB0byBtYWtlIGl0IGEgXAorZmF0YWwgZXJyb3IgaWYgdGhlIGZpbGUgdGVzdCBmYWlscy4gVGhlIGRlZmF1bHQgaXMgfHwgd2Fybi4gVGhlIGZpbGUgdGVzdCBtYXkgXAorb3B0aW9uYWxseSBoYXZlIGEgIiEnIHByZXBlbmRlZCB0byB0ZXN0IGZvciB0aGUgb3Bwb3NpdGUgY29uZGl0aW9uLiBJZiB5b3UgZG8gYSBcCitjZCBhbmQgdGhlbiBsaXN0IHNvbWUgcmVsYXRpdmUgZmlsZW5hbWVzLCB5b3UgbWF5IHdhbnQgdG8gaW5kZW50IHRoZW0gc2xpZ2h0bHkgZm9yIFwKK3JlYWRhYmlsaXR5LiBJZiB5b3Ugc3VwcGx5IHlvdXIgb3duIGRpZSgpIG9yIHdhcm4oKSBtZXNzYWdlLCB5b3UgY2FuIHVzZSAkZmlsZSB0byBcCitpbnRlcnBvbGF0ZSB0aGUgZmlsZW5hbWUuIFwKK1wKK0ZpbGV0ZXN0cyBtYXkgYmUgYnVuY2hlZDogIi1yd3giIHRlc3RzIGZvciBhbGwgb2YgLXIsIC13LCBhbmQgLXguIE9ubHkgdGhlIGZpcnN0IGZhaWxlZCBcCit0ZXN0IG9mIHRoZSBidW5jaCB3aWxsIHByb2R1Y2UgYSB3YXJuaW5nLiBcCitcCitUaGUgcm91dGluZSByZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2FybmluZ3MgaXNzdWVkLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+ZmxvcmEvRmlsZS1DaGVja1RyZWUvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YzZmY2FjYzVkZjgwZTAzNzA2MDMwMGE3ZjRiOTNiZjkiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRi9GTC9GTE9SQS9GaWxlLUNoZWNrVHJlZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MTljODJhYTdlNWI3Zjc1MmI0ZGExNGE2YzhhZDc0MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmYzk5YWI2YmI1YWY0NjY0ODMyNzE1OTc0YjVhMTllMzI4MDcxZGM5MjAyYWI3MmU1ZDVhNTk0ZWJkNDZhNzI5IgorCitTID0gIiR7V09SS0RJUn0vRmlsZS1DaGVja1RyZWUtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJpMThuLWNvbGxhdGUtcGVybF8xLjAyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmkxOG4tY29sbGF0ZS1wZXJsXzEuMDIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4MzllMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJpMThuLWNvbGxhdGUtcGVybF8xLjAyLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgdGhhdCBjb21wYXJlIDgtYml0IHNjYWxhciBkYXRhIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBsb2NhbGUiCitERVNDUklQVElPTiA9ICJUaGlzIG1vZHVsZSBwcm92aWRlcyB5b3Ugd2l0aCBvYmplY3RzIHRoYXQgd2lsbCBjb2xsYXRlIGFjY29yZGluZyB0byBcCit5b3VyIG5hdGlvbmFsIGNoYXJhY3RlciBzZXQsIHByb3ZpZGVkIHRoYXQgdGhlIFBPU0lYIHNldGxvY2FsZSgpIGZ1bmN0aW9uIGlzIHN1cHBvcnRlZCBcCitvbiB5b3VyIHN5c3RlbS4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfmZsb3JhL0kxOE4tQ29sbGF0ZS8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mZjZkNjI5MTQ0YTZlYzFlYThjMzAwZjc1NzYwMTg0ZiIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9GL0ZML0ZMT1JBL0kxOE4tQ29sbGF0ZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MmRkYjZkMWM1OWNmZGYzMWFhM2IwNDc5OWI4NmFmMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5MTc0NTA2YmM5MDNlZGE4OTY5MDM5NGUzZjQ1NTU4YWI3ZTAxMzExNDIyNzg5NmQ4NTY5ZDYxNjQ2NDhmZTM3IgorCitTID0gIiR7V09SS0RJUn0vSTE4Ti1Db2xsYXRlLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGlicG9kLXBsYWluZXItcGVybF8xLjA0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYnBvZC1wbGFpbmVyLXBlcmxfMS4wNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2U1OGYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYnBvZC1wbGFpbmVyLXBlcmxfMS4wNC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIlBlcmwgZXh0ZW5zaW9uIGZvciBjb252ZXJ0aW5nIFBvZCB0byBvbGQtc3R5bGUgUG9kIgorREVTQ1JJUFRJT04gPSAiUG9kOjpQbGFpbmVyIHVzZXMgUG9kOjpQYXJzZXIgd2hpY2ggdGFrZXMgUG9kIHdpdGggdGhlIChuZXcpICdDPDwgLi4gPj4nIFwKK2NvbnN0cnVjdHMgYW5kIHJldHVybnMgdGhlIG9sZChlcikgc3R5bGUgd2l0aCBqdXN0ICdDPD4nOyAnPCcgYW5kICc+JyBhcmUgcmVwbGFjZWQgYnkgXAorJ0U8bHQ+JyBhbmQgJ0U8Z3Q+Jy4gXAorXAorVGhpcyBjYW4gYmUgdXNlZCB0byBwcmUtcHJvY2VzcyBQb2QgYmVmb3JlIHVzaW5nIHRvb2xzIHdoaWNoIGRvIG5vdCByZWNvZ25pc2UgdGhlIG5ldyBzdHlsZSBQb2RzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9kaXN0L1BvZC1QbGFpbmVyLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9Mjc7bWQ1PTIyN2NmODM5NzBmYzYxMjY0ODQ1ODI1ZDlkMmJmNmY4IgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL1IvUk0vUk1CQVJLRVIvUG9kLVBsYWluZXItJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjUwMmVhY2QxYTQwODk0YjlkZmVhNTVmYzJjZDVlN2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWJiZmJmN2QxZDQ4NzFlNWE4M2JhYjIxMzdlMjJkMDg5MDc4MjA2ODE1MTkwZWIxZDVjMTI2MGEzNDk5NDU2ZiIKKworUyA9ICIke1dPUktESVJ9L1BvZC1QbGFpbmVyLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1mcHUuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtZnB1LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDQwMjMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtZnB1LmluYwpAQCAtMCwwICsxLDYgQEAKKworZGVmIGdldF9hbHNhX2ZwdV9zZXR0aW5nKGJiLCBkKToKKwlpZiBkLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpIGluIFsgJ3NvZnQnIF06CisJCXJldHVybiAiLS13aXRoLXNvZnRmbG9hdCIKKwlyZXR1cm4gIiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliLzAwMDEtYnVpbGQtRG8tbm90LXRyeS10by1kZXRlY3QtY3Jvc3MtY29tcGlsZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWIvMDAwMS1idWlsZC1Eby1ub3QtdHJ5LXRvLWRldGVjdC1jcm9zcy1jb21waWxlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODNiYzNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliLzAwMDEtYnVpbGQtRG8tbm90LXRyeS10by1kZXRlY3QtY3Jvc3MtY29tcGlsZXIucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSAxN2FlYjM1NjVmNDExZTc3OTZjYWJlNDAzZjkyZDE1OTQ4YThjYTk1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjEgQXVnIDIwMTUgMTQ6NDI6NDUgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gYnVpbGQ6IERvIG5vdCB0cnkgdG8gZGV0ZWN0IGNyb3NzLWNvbXBpbGVyCisKK2Nyb3NzIGNvbXBpbGVycyBhcmUgcGFzc2VkIHZpYSBwYXRoIG1heSBub3QgYmUgYSBnY2MgYmFzZWQgY3Jvc3MKK2NvbXBpbGVyIGluIHN1Y2ggY2FzZXMgdGhpcyBjaGVjayBmYWlscyBhbmQgdHJ5J3MgdG8gZm9yY2UgZ2NjIGJhc2VkCitjcm9zcyBjb21waWxlciBkZXRlY3Rpb24sIFRoaXMgY29kZSBpcyBhIGNvbnZlbmllbmNlIHRoYXQgbGltaXRzIHRoZQorYnVpbGQgc3lzdGVtCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgY29uZmlndXJlLmFjIHwgMTQgLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDMwMjJjZjguLjlkNzc0NDAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI3LDIwICsyNyw2IEBAIEFDX1BSRUZJWF9ERUZBVUxUKC91c3IpCisgCisgZG5sIENoZWNrcyBmb3IgcHJvZ3JhbXMuCisgCistZG5sIHRyeSB0byBndWVzIGNyb3NzLWNvbXBpbGVyIGlmIG5vdCBzZXQKKy1pZiB0ZXN0ICJ4JGhvc3QiICE9ICJ4JGJ1aWxkIiAtYSAteiAiYGVjaG8gJENDIHwgZ3JlcCAtZSAnLWdjYydgIjsKKy10aGVuCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGNyb3NzLWNvbXBpbGVyKQorLQorLSAgd2hpY2ggJHtwcm9ncmFtX3ByZWZpeH1nY2MgPi9kZXYvbnVsbCAyPiYxICYmIENDPSR7cHJvZ3JhbV9wcmVmaXh9Z2NjCistICB3aGljaCAke2hvc3RfY3B1fS0ke2hvc3Rfb3N9LWdjYyA+L2Rldi9udWxsIDI+JjEgXAorLSAgJiYgQ0M9JHtob3N0X2NwdX0tJHtob3N0X29zfS1nY2MKKy0gIHdoaWNoICR7aG9zdF9jcHV9LSR7aG9zdF92ZW5kb3J9LSR7aG9zdF9vc30tZ2NjID4vZGV2L251bGwgMj4mMSBcCistICAmJiBDQz0ke2hvc3RfY3B1fS0ke2hvc3RfdmVuZG9yfS0ke2hvc3Rfb3N9LWdjYworLQorLSAgQUNfTVNHX1JFU1VMVCgkQ0MpCistZmkKKy0JICAgIAorIENGTEFHUz0iJENGTEFHUyAtRF9HTlVfU09VUkNFIgorIAorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWIvQ2hlY2staWYtd29yZGV4cC1mdW5jdGlvbi1pcy1zdXBwb3J0ZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWIvQ2hlY2staWYtd29yZGV4cC1mdW5jdGlvbi1pcy1zdXBwb3J0ZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhNmViOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYi9DaGVjay1pZi13b3JkZXhwLWZ1bmN0aW9uLWlzLXN1cHBvcnRlZC5wYXRjaApAQCAtMCwwICsxLDUxIEBACitGcm9tIGUzMzM1N2I1OWExMGQ0NGU5YmVjNWQyNDEwMGNlMjNjYTMwMGNjNzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSG9uZyBILiBQaGFtIiA8aG9uZy5waGFtQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDI5IEF1ZyAyMDE0IDE3OjEzOjU1ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIENoZWNrIGlmIHdvcmRleHAgZnVuY3Rpb24gaXMgc3VwcG9ydGVkCisKK2VnbGliYyBjb3VsZCBiZSBjb25maWd1cmVkIHRvIGJ1aWxkIHdpdGhvdXQgd29yZGV4cCwgc28gaXQgaXMgbm90IGVub3VnaAordG8gY2hlY2sgaWYgd29yZGV4cC5oIGV4aXN0cyAodGhlIGhlYWRlciBmaWxlIGNvdWxkIGJlIGluc3RhbGxlZCwgYnV0IGl0J3MKK3Bvc3NpYmxlIHRoYXQgdGhlIHdvcmRleHAoKSBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkKS4gIEFuIGFkZGl0aW9uYWwKK2NoZWNrIGlmIHdvcmRleHAoKSBpcyBzdXBwb3J0ZWQgYnkgdGhlIHN5c3RlbSBDIGxpYnJhcnkgaXMgbmVlZGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEhvbmcgSC4gUGhhbSA8aG9uZy5waGFtQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgfCA1ICsrKystCisgc3JjL3VzZXJmaWxlLmMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGI4MzUzYTAuLjc3M2I3MmYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTMxMSw3ICszMTEsMTAgQEAgZmkKKyBBQ19TVUJTVChBTFNBX0RFUExJQlMpCisgCisgZG5sIENoZWNrIGZvciBoZWFkZXJzCistQUNfQ0hFQ0tfSEVBREVSUyhbd29yZGV4cC5oIGVuZGlhbi5oIHN5cy9lbmRpYW4uaF0pCisrQUNfQ0hFQ0tfSEVBREVSUyhbd29yZGV4cC5oIGVuZGlhbi5oIHN5cy9lbmRpYW4uaF0sCisrICBkbmwgTWFrZSBzdXJlIHdvcmRleHAgaXMgc3VwcG9ydGVkIGJ5IHRoZSBDIGxpYnJhcnkKKysgIEFDX0NIRUNLX0ZVTkNTKFt3b3JkZXhwXSkKKyspCisgCisgZG5sIENoZWNrIGZvciByZXNtZ3Igc3VwcG9ydC4uLgorIEFDX01TR19DSEVDS0lORyhmb3IgcmVzbWdyIHN1cHBvcnQpCitkaWZmIC0tZ2l0IGEvc3JjL3VzZXJmaWxlLmMgYi9zcmMvdXNlcmZpbGUuYworaW5kZXggM2E3MzgzNi4uYjhjZTgwOSAxMDA2NDQKKy0tLSBhL3NyYy91c2VyZmlsZS5jCisrKysgYi9zcmMvdXNlcmZpbGUuYworQEAgLTMyLDcgKzMyLDcgQEAKKyAgKiBzdG9yZXMgdGhlIGZpcnN0IG1hdGNoaW5lIG9uZS4gIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgc3RyZHVwJ2VkLgorICAqLworIAorLSNpZmRlZiBIQVZFX1dPUkRFWFBfSAorKyNpZiAoZGVmaW5lZChIQVZFX1dPUkRFWFBfSCkgJiYgZGVmaW5lZChIQVZFX1dPUkRFWFApKQorICNpbmNsdWRlIDx3b3JkZXhwLmg+CisgI2luY2x1ZGUgPGFzc2VydC5oPgorIGludCBzbmRfdXNlcl9maWxlKGNvbnN0IGNoYXIgKmZpbGUsIGNoYXIgKipyZXN1bHQpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYl8xLjAuMjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWJfMS4wLjI5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMGY0MjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWJfMS4wLjI5LmJiCkBAIC0wLDAgKzEsNTEgQEAKK1NVTU1BUlkgPSAiQUxTQSBzb3VuZCBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5hbHNhLXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3RyYWNrLmFsc2EtcHJvamVjdC5vcmcvYWxzYS1idWcvbG9naW5fcGFnZS5waHAiCitTRUNUSU9OID0gImxpYnMvbXVsdGltZWRpYSIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvc29ja2V0LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNjttZDU9MTFmZjg5YThhN2E0YTY5MGE1Yzc4ZWZmZTgxNTk1NDUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworIyBjb25maWd1cmUuaW4gc2V0cyAtRF9fYXJtX18gb24gdGhlIGNvbW1hbmQgbGluZSBmb3IgYW55IGFybSBzeXN0ZW0KKyMgKG5vdCBqdXN0IHRob3NlIHdpdGggdGhlIEFSTSBpbnN0cnVjdGlvbiBzZXQpLCB0aGlzIHNob3VsZCBiZSByZW1vdmVkLAorIyAob3IgcmVwbGFjZWQgYnkgYSBwZXJtaXR0ZWQgI2RlZmluZSkuCisjRklYTUU6IHJlbW92ZSB0aGUgZm9sbG93aW5nCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuYWxzYS1wcm9qZWN0Lm9yZy9wdWIvbGliLyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vQ2hlY2staWYtd29yZGV4cC1mdW5jdGlvbi1pcy1zdXBwb3J0ZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1idWlsZC1Eby1ub3QtdHJ5LXRvLWRldGVjdC1jcm9zcy1jb21waWxlci5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiZGU2N2UwZWNhNzI0NzRkNmIxMTIxMDM3ZGFmZTEwMjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzMwNDNjMzVlYjk2MzZiZTBmNGFmNmEyNDAyMzVjMjEzZjEyYTI1ZmViMWYwNGFlZWFjOGNiN2UzMGZjYmRkMCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK3JlcXVpcmUgYWxzYS1mcHUuaW5jCitFWFRSQV9PRUNPTkYgKz0gIiR7QGdldF9hbHNhX2ZwdV9zZXR0aW5nKGJiLCBkKX0gIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXB5dGhvbiIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS13aXRoLXZlcnNpb25lZD1ubyAiCisKK1BBQ0tBR0VTID0rICJhbHNhLXNlcnZlciBsaWJhc291bmQgYWxzYS1jb25mLWJhc2UgYWxzYS1jb25mIGFsc2EtZG9jIgorRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vc21peGVyLyouc28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke0JQTn0vc21peGVyLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS9zbWl4ZXIvKi5sYSIKK0ZJTEVTX2xpYmFzb3VuZCA9ICIke2xpYmRpcn0vbGliYXNvdW5kLnNvLioiCitGSUxFU19hbHNhLXNlcnZlciA9ICIke2JpbmRpcn0vKiIKK0ZJTEVTX2Fsc2EtY29uZiA9ICIke2RhdGFkaXJ9L2Fsc2EvIgorRklMRVNfYWxzYS1jb25mLWJhc2UgPSAiXAorJHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZiBcCiske2RhdGFkaXJ9L2Fsc2EvY2FyZHMvYWxpYXNlcy5jb25mIFwKKyR7ZGF0YWRpcn0vYWxzYS9wY20vZGVmYXVsdC5jb25mIFwKKyR7ZGF0YWRpcn0vYWxzYS9wY20vZG1peC5jb25mIFwKKyR7ZGF0YWRpcn0vYWxzYS9wY20vZHNub29wLmNvbmYiCisKK1JERVBFTkRTX2xpYmFzb3VuZCA9ICJhbHNhLWNvbmYtYmFzZSBhbHNhLWNvbmYiCisjIHVwZ3JhZGUgcGF0aAorUlBST1ZJREVTXyR7UE59LWRldiA9ICJhbHNhLWRldiIKK1JSRVBMQUNFU18ke1BOfS1kZXYgPSAiYWxzYS1kZXYiCitSQ09ORkxJQ1RTXyR7UE59LWRldiA9ICJhbHNhLWRldiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnMvMDAwMS1hcmNhbS1hdi1JbmNsdWRlLXN5cy1zZWxlY3QuaC1mb3ItZmRfc2V0LWRlZmluaXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zLzAwMDEtYXJjYW0tYXYtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLWZkX3NldC1kZWZpbml0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MGM3MmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zLzAwMDEtYXJjYW0tYXYtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLWZkX3NldC1kZWZpbml0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gZDI4YzY1NWJlM2FjNGZjYjgwMjQ1NTU5ODM4ODRmODMyZWUxODc4NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1heSAyMDE1IDE1OjE3OjMwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGFyY2FtLWF2OiBJbmNsdWRlIHN5cy9zZWxlY3QuaCBmb3IgZmRfc2V0IGRlZmluaXRpb24KKworZml4ZXMgYnVpbGQgZXJyb3JzIG9uIG5vbi1nbGliYyBiYXNlZCBzeXN0ZW1zCisKK2FyY2FtLWF2L2FyY2FtX2F2LmM6Mzg5OjI6IGVycm9yOiB1bmtub3duIHR5cGUgbmFtZSAnZmRfc2V0JworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisgYXJjYW0tYXYvYXJjYW1fYXYuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvYXJjYW0tYXYvYXJjYW1fYXYuYyBiL2FyY2FtLWF2L2FyY2FtX2F2LmMKK2luZGV4IDA0OTFmYzYuLmZmZjk2ZjkgMTAwNjQ0CistLS0gYS9hcmNhbS1hdi9hcmNhbV9hdi5jCisrKysgYi9hcmNhbS1hdi9hcmNhbV9hdi5jCitAQCAtMzEsNiArMzEsNyBAQAorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAKKyAjaW5jbHVkZSA8c3lzL2lwYy5oPgorKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisgI2luY2x1ZGUgPHN5cy9zaG0uaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2lucy8wMDAxLWluY2x1ZGUtc3BlZXhkc3BfdHlwZXMuaC1ub3Qtc3BlZXhfdHlwZXMuaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnMvMDAwMS1pbmNsdWRlLXNwZWV4ZHNwX3R5cGVzLmgtbm90LXNwZWV4X3R5cGVzLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUxOTlmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnMvMDAwMS1pbmNsdWRlLXNwZWV4ZHNwX3R5cGVzLmgtbm90LXNwZWV4X3R5cGVzLmgucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorRnJvbSBjYTQxZTk2YTQ5YTU2ODEyODM1NGY2NWY5MGE3NjlkZWJmNTQzNWYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUaHUsIDkgSnVsIDIwMTUgMTE6NTg6MTIgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gaW5jbHVkZSBzcGVleGRzcF90eXBlcy5oLCBub3Qgc3BlZXhfdHlwZXMuaAorCitTcGVleGRzcCB3YXMgc2VwYXJhdGVkIGZyb20gc3BlZXggaW4gMS4ycmMyLiBzcGVleF90eXBlcy5oIGlzIG5vdAorc2hpcHBlZCBieSBzcGVleGRzcCwgc28gYWxzYS1wbHVnaW5zIHNob3VsZG4ndCB1c2UgdGhhdCBmaWxlLiBzcGVleGRzcAoraGFzIHNwZWV4ZHNwX3R5cGVzLmgsIHdoaWNoIGhhcyB0aGUgc2FtZSBjb250ZW50cyBhcyBzcGVleF90eXBlcy5oLgorCitzcGVleGRzcF90eXBlcy5oIGlzIGEgbmV3IGZpbGUgaW50cm9kdWNlZCBpbiAxLjJyYzIsIHNvIHRoaXMgY2hhbmdlCitidW1wcyB0aGUgbWluaW11bSBzdXBwb3J0ZWQgc3BlZXhkc3AgdmVyc2lvbi4gVGhlIHZlcnNpb24gY2hlY2sgaW4KK2NvbmZpZ3VyZS5hYyB3aWxsIGFjdHVhbGx5IGJyZWFrIGlmIHNwZWV4ZHNwIDEuMiBldmVyIGdldHMgcmVsZWFzZWQsCitiZWNhdXNlIHBrZy1jb25maWcgdGhpbmtzIHRoYXQgIjEuMiIgPCAiMS4ycmMyIiwgYnV0IEkgdGhpbmsgaXQncwordXNlZnVsIHRvIGZhaWwgaWYgdGhlIGluc3RhbGxlZCBzcGVleGRzcCB2ZXJzaW9uIGlzIDEuMnJjMSAod2hpY2ggSQorYmVsaWV2ZSBpcyB2ZXJ5IGNvbW1vbiBvbiBjdXJyZW50IGRpc3RyaWJ1dGlvbnMpLiBJZiBhIG5vbi1yYyB2ZXJzaW9uCitvZiBzcGVleGRzcCB3aWxsIGV2ZXIgZ2V0IHJlbGVhc2VkLCBJIGhvcGUgdmVyc2lvbiBudW1iZXIgMS4yIHdpbGwgYmUKK3NraXBwZWQgZm9yIHRoaXMgcmVhc29uLiAoQSBub24tcmMgdmVyc2lvbiBzZWVtcyB1bmxpa2VseSwgc2luY2UKKzEuMnJjMSB3YXMgcmVsZWFzZWQgeWVhcnMgYWdvLCBzbyBpdCdzIHByZXR0eSBsaWtlbHkgdGhhdCB0aGUgcHJvamVjdAoraXMgc3R1Y2sgb24gc28gY2FsbGVkICJyZWxlYXNlIGNhbmRpZGF0ZXMiIGZvcmV2ZXIuLi4pCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIChodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5saW51eC5hbHNhLmRldmVsLzE0MTE0OSkKKworU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgfCAyICstCisgcHBoL2FyY2guaCAgICAgICAgICAgIHwgMiArLQorIHBwaC9zcGVleF9yZXNhbXBsZXIuaCB8IDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOTAyYTZkNy4uYzU1NGQyMiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTA4LDcgKzEwOCw3IEBAIEFDX1NVQlNUKEFWQ09ERUNfQ0ZMQUdTKQorIEFDX1NVQlNUKEFWQ09ERUNfTElCUykKKyBBQ19TVUJTVChBVkNPREVDX0hFQURFUikKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhzcGVleGRzcCwgW3NwZWV4ZHNwID49IDEuMl0sIFtIQVZFX1NQRUVYRFNQPSJ5ZXMiXSwgW0hBVkVfU1BFRVhEU1A9IiJdKQorK1BLR19DSEVDS19NT0RVTEVTKHNwZWV4ZHNwLCBbc3BlZXhkc3AgPj0gMS4ycmMyXSwgW0hBVkVfU1BFRVhEU1A9InllcyJdLCBbSEFWRV9TUEVFWERTUD0iIl0pCisgQU1fQ09ORElUSU9OQUwoSEFWRV9TUEVFWERTUCwgdGVzdCAiJEhBVkVfU1BFRVhEU1AiID0gInllcyIpCisgCisgQUNfQVJHX1dJVEgoW3NwZWV4XSwKK2RpZmYgLS1naXQgYS9wcGgvYXJjaC5oIGIvcHBoL2FyY2guaAoraW5kZXggZTJkNzMxYS4uYTA3ZDBkOSAxMDA2NDQKKy0tLSBhL3BwaC9hcmNoLmgKKysrKyBiL3BwaC9hcmNoLmgKK0BAIC0zNiw3ICszNiw3IEBACisgI2RlZmluZSBBUkNIX0gKKyAKKyAjaWZuZGVmIE9VVFNJREVfU1BFRVgKKy0jaW5jbHVkZSAic3BlZXgvc3BlZXhfdHlwZXMuaCIKKysjaW5jbHVkZSAic3BlZXgvc3BlZXhkc3BfdHlwZXMuaCIKKyAjZW5kaWYKKyAKKyAjZGVmaW5lIEFCUyh4KSAoKHgpIDwgMCA/ICgtKHgpKSA6ICh4KSkgICAgICAvKio8IEFic29sdXRlIGludGVnZXIgdmFsdWUuICovCitkaWZmIC0tZ2l0IGEvcHBoL3NwZWV4X3Jlc2FtcGxlci5oIGIvcHBoL3NwZWV4X3Jlc2FtcGxlci5oCitpbmRleCBjNDRmYmNkLi5hYTg1YWJiIDEwMDY0NAorLS0tIGEvcHBoL3NwZWV4X3Jlc2FtcGxlci5oCisrKysgYi9wcGgvc3BlZXhfcmVzYW1wbGVyLmgKK0BAIC04Miw3ICs4Miw3IEBACisgICAgICAgCisgI2Vsc2UgLyogT1VUU0lERV9TUEVFWCAqLworIAorLSNpbmNsdWRlICJzcGVleC9zcGVleF90eXBlcy5oIgorKyNpbmNsdWRlICJzcGVleC9zcGVleGRzcF90eXBlcy5oIgorIAorICNlbmRpZiAvKiBPVVRTSURFX1NQRUVYICovCisgCistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnNfMS4wLjI5LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2luc18xLjAuMjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyODYxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnNfMS4wLjI5LmJiCkBAIC0wLDAgKzEsMTA1IEBACitERVNDUklQVElPTiA9ICJBTFNBIFBsdWdpbnMiCitIT01FUEFHRSA9ICJodHRwOi8vYWxzYS1wcm9qZWN0Lm9yZyIKK1NFQ1RJT04gPSAibXVsdGltZWRpYSIKKworIyBUaGUgcHJpbWFyeSBsaWNlbnNlIG9mIGFsc2EtcGx1Z2lucyBpcyBMR1BMdjIuMS4KKyMKKyMgbTQvYXR0cmlidXRlcy5tNCBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MisuIG00L2F0dHJpYnV0ZXMubTQgaXMgcGFydCBvZiB0aGUKKyMgYnVpbGQgc3lzdGVtLCBhbmQgZG9lc24ndCBhZmZlY3QgdGhlIGxpY2Vuc2luZyBvZiB0aGUgYnVpbGQgcmVzdWx0LgorIworIyBUaGUgc2FtcGxlcmF0ZSBwbHVnaW4gc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIrIHRvIGJlIGNvbnNpc3RlbnQKKyMgd2l0aCB0aGUgbGlic2FtcGxlcmF0ZSBsaWNlbnNlLgorTElDRU5TRSA9ICJMR1BMdjIuMSAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgICAgICBmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQgXAorICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEw7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgZmlsZTovL200L2F0dHJpYnV0ZXMubTQ7ZW5kbGluZT0zMzttZDU9YjI1OTU4ZGE0NGMwMjIzMWUzNjQxZjFiY2NlZjUzZWIgXAorICAgICAgICBmaWxlOi8vcmF0ZS9yYXRlX3NhbXBsZXJhdGUuYztlbmRsaW5lPTE5O21kNT1mM2QzY2UwYjE4OTg0NmE0ODY1MTdkOTdhODU0YjI3NiBcCisiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmFsc2EtcHJvamVjdC5vcmcvcHViL3BsdWdpbnMvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWFyY2FtLWF2LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1mZF9zZXQtZGVmaW5pdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWluY2x1ZGUtc3BlZXhkc3BfdHlwZXMuaC1ub3Qtc3BlZXhfdHlwZXMuaC5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiYTY2Nzk3YjQ0NzFlM2NiZTk2NTc1MjA3YmZiZTI1MmMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzI1ZDg1Y2FjMjg1ZjYzMmI4M2UwMTkxYWUzZjM0OGJhZDAzYzFmMDA3YjkzNzA0MmYxNjRhYmI4MWVhNjUzMiIKKworREVQRU5EUyArPSAiYWxzYS1saWIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID8/PSAiXAorICAgICAgICBzYW1wbGVyYXRlIFwKKyAgICAgICAgc3BlZXhkc3AgXAorICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B1bHNlYXVkaW8nLCAncHVsc2VhdWRpbycsICcnLCBkKX0gXAorIgorUEFDS0FHRUNPTkZJR1thdmNvZGVjXSA9ICItLWVuYWJsZS1hdmNvZGVjLC0tZGlzYWJsZS1hdmNvZGVjLGxpYmF2IgorUEFDS0FHRUNPTkZJR1tqYWNrXSA9ICItLWVuYWJsZS1qYWNrLC0tZGlzYWJsZS1qYWNrLGphY2siCitQQUNLQUdFQ09ORklHW21hZW1vLXBsdWdpbl0gPSAiLS1lbmFibGUtbWFlbW8tcGx1Z2luLC0tZGlzYWJsZS1tYWVtby1wbHVnaW4iCitQQUNLQUdFQ09ORklHW21hZW1vLXJlc291cmNlLW1hbmFnZXJdID0gIi0tZW5hYmxlLW1hZW1vLXJlc291cmNlLW1hbmFnZXIsLS1kaXNhYmxlLW1hZW1vLXJlc291cmNlLW1hbmFnZXIsZGJ1cyIKK1BBQ0tBR0VDT05GSUdbcHVsc2VhdWRpb10gPSAiLS1lbmFibGUtcHVsc2VhdWRpbywtLWRpc2FibGUtcHVsc2VhdWRpbyxwdWxzZWF1ZGlvIgorUEFDS0FHRUNPTkZJR1tzYW1wbGVyYXRlXSA9ICItLWVuYWJsZS1zYW1wbGVyYXRlLC0tZGlzYWJsZS1zYW1wbGVyYXRlLGxpYnNhbXBsZXJhdGUwIgorUEFDS0FHRUNPTkZJR1tzcGVleGRzcF0gPSAiLS13aXRoLXNwZWV4PWxpYiwtLXdpdGgtc3BlZXg9bm8sc3BlZXhkc3AiCisKK1BBQ0tBR0VTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwdWxzZWF1ZGlvJywgJ2Fsc2EtcGx1Z2lucy1wdWxzZWF1ZGlvLWNvbmYnLCAnJywgZCl9IgorCitQQUNLQUdFU19EWU5BTUlDID0gIl5saWJhc291bmQtbW9kdWxlLS4qIgorCisjIFRoZSBhbHNhLXBsdWdpbnMgcGFja2FnZSBkb2Vzbid0IGl0c2VsZiBjb250YWluIGFueXRoaW5nLCBpdCBqdXN0IGRlcGVuZHMgb24KKyMgYWxsIGJ1aWx0IHBsdWdpbnMuCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAke0R9JHtsaWJkaXJ9L2Fsc2EtbGliLyoubGEKKworCSMgV2UgdXNlIHRoZSBleGFtcGxlIGFzIGlzLCBzbyBqdXN0IGRyb3AgdGhlIC5leGFtcGxlIHN1ZmZpeC4KKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwdWxzZWF1ZGlvJywgJ3llcycsICdubycsIGQpfSIgPSAieWVzIiBdOyB0aGVuCisJCW12ICR7RH0ke2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mLmQvOTktcHVsc2VhdWRpby1kZWZhdWx0LmNvbmYuZXhhbXBsZSAke0R9JHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZi5kLzk5LXB1bHNlYXVkaW8tZGVmYXVsdC5jb25mCisJZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgcGx1Z2luZGlyID0gYmIuZGF0YS5leHBhbmQoJyR7bGliZGlyfS9hbHNhLWxpYi8nLCBkKQorICAgIHBhY2thZ2VzID0gIiAiLmpvaW4oZG9fc3BsaXRfcGFja2FnZXMoZCwgcGx1Z2luZGlyLCAnXmxpYmFzb3VuZF9tb2R1bGVfKC4qKVwuc28kJywgJ2xpYmFzb3VuZC1tb2R1bGUtJXMnLCAnQWxzYSBwbHVnaW4gZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJykpCisgICAgZC5zZXRWYXIoIlJERVBFTkRTX2Fsc2EtcGx1Z2lucyIsIHBhY2thZ2VzKQorfQorCisjIFRoZSByYXRlIHBsdWdpbnMgY3JlYXRlIHNvbWUgc3ltbGlua3MuIEZvciBleGFtcGxlLCB0aGUgc2FtcGxlcmF0ZSBwbHVnaW4KKyMgY3JlYXRlcyB0aGVzZSBsaW5rcyB0byB0aGUgbWFpbiBwbHVnaW4gZmlsZToKKyMKKyMgICBsaWJhc291bmRfbW9kdWxlX3JhdGVfc2FtcGxlcmF0ZV9iZXN0LnNvCisjICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfbGluZWFyLnNvCisjICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfbWVkaXVtLnNvCisjICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfb3JkZXIuc28KKyMKKyMgVGhlIG90aGVyIHJhdGUgcGx1Z2lucyBjcmVhdGUgc2ltaWxhciBsaW5rcy4gV2UgaGF2ZSB0byBhZGQgdGhlIGxpbmtzIHRvCisjIEZJTEVTIG1hbnVhbGx5LCBiZWNhdXNlIGRvX3NwbGl0X3BhY2thZ2VzKCkgc2tpcHMgdGhlIGxpbmtzICh3aGljaCBpcyBnb29kLAorIyBiZWNhdXNlIHdlIHdvdWxkbid0IHdhbnQgZG9fc3BsaXRfcGFja2FnZXMoKSB0byBjcmVhdGUgc2VwYXJhdGUgcGFja2FnZXMgZm9yCisjIHRoZSBzeW1saW5rcykuCisjCisjIFRoZSBzeW1saW5rcyBjYXVzZSBRQSBlcnJvcnMsIGJlY2F1c2UgdXN1YWxseSBpdCdzIGEgYnVnIGlmIGEgbm9uCisjIC1kZXYvLWRiZy8tbmF0aXZlc2RrIHBhY2thZ2UgY29udGFpbnMgbGlua3MgdG8gLnNvIGZpbGVzLCBidXQgaW4gdGhpcyBjYXNlCisjIHRoZSBlcnJvcnMgYXJlIGZhbHNlIHBvc2l0aXZlcywgc28gd2UgZGlzYWJsZSB0aGUgUUEgY2hlY2tzLgorRklMRVNfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtbGF2Y3JhdGUgKz0gIiR7bGliZGlyfS9hbHNhLWxpYi8qcmF0ZV9sYXZjcmF0ZV8qLnNvIgorRklMRVNfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc2FtcGxlcmF0ZSArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLypyYXRlX3NhbXBsZXJhdGVfKi5zbyIKK0ZJTEVTXyR7TUxQUkVGSVh9bGliYXNvdW5kLW1vZHVsZS1yYXRlLXNwZWV4cmF0ZSArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLypyYXRlX3NwZWV4cmF0ZV8qLnNvIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtbGF2Y3JhdGUgPSAiZGV2LXNvIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc2FtcGxlcmF0ZSA9ICJkZXYtc28iCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1zcGVleHJhdGUgPSAiZGV2LXNvIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9hbHNhLWxpYi8uZGVidWciCisKKyMgNTAtcHVsc2VhdWRpby5jb25mIGRlZmluZXMgYSBkZXZpY2UgbmFtZWQgInB1bHNlIiB0aGF0IGFwcGxpY2F0aW9ucyBjYW4gdXNlCisjIGlmIHRoZXkgZXhwbGljaXRseSB3YW50IHRvIHVzZSB0aGUgUHVsc2VBdWRpbyBwbHVnaW4uCisjIDk5LXB1bHNlYXVkaW8tZGVmYXVsdC5jb25mIGNvbmZpZ3VyZXMgdGhlICJkZWZhdWx0IiBkZXZpY2UgdG8gdXNlIHRoZQorIyBQdWxzZUF1ZGlvIHBsdWdpbi4KK0ZJTEVTXyR7UE59LXB1bHNlYXVkaW8tY29uZiArPSAiXAorICAgICAgICAke2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mLmQvNTAtcHVsc2VhdWRpby5jb25mIFwKKyAgICAgICAgJHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZi5kLzk5LXB1bHNlYXVkaW8tZGVmYXVsdC5jb25mIFwKKyIKKworUkRFUEVORFNfJHtQTn0tcHVsc2VhdWRpby1jb25mICs9ICJcCisgICAgICAgIGxpYmFzb3VuZC1tb2R1bGUtY29uZi1wdWxzZSBcCisgICAgICAgIGxpYmFzb3VuZC1tb2R1bGUtY3RsLXB1bHNlIFwKKyAgICAgICAgbGliYXNvdW5kLW1vZHVsZS1wY20tcHVsc2UgXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvMDAwMS1hczEwazEtTWFrZS1vdXRwdXRfdHJhbV9saW5lLXN0YXRpYy1pbmxpbmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy8wMDAxLWFzMTBrMS1NYWtlLW91dHB1dF90cmFtX2xpbmUtc3RhdGljLWlubGluZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDQ5YTMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvMDAwMS1hczEwazEtTWFrZS1vdXRwdXRfdHJhbV9saW5lLXN0YXRpYy1pbmxpbmUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAxZTU5MjZkZjc0YTM1ZmUyY2Q5MGJjNTlmNTI2NGE4NzE1Yzk0MDQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNyBTZXAgMjAxNSAwODoxNjo1OSArMDAwMAorU3ViamVjdDogW1BBVENIXSBhczEwazE6IE1ha2Ugb3V0cHV0X3RyYW1fbGluZSgpIHN0YXRpYyBpbmxpbmUKKworVGhlIGZ1bmN0aW9uIGlzIG5vdCB1c2VkIGluIGFueSBvdGhlciBmaWxlLCBpdHMgYmV0dGVyIHRvIG1ha2UgaXQgc3RhdGljCitpbmxpbmUgc28gY29tcGlsZXIgaGFzIGEgYmV0dGVyIGNoYW5jZSBvZiBvcHRpbWl6aW5nIGhlcmUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBhczEwazEvYXMxMGsxLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9hczEwazEvYXMxMGsxLmMgYi9hczEwazEvYXMxMGsxLmMKK2luZGV4IDk2YWYwYzMuLmQwNzY2ZmQgMTAwNjQ0CistLS0gYS9hczEwazEvYXMxMGsxLmMKKysrKyBiL2FzMTBrMS9hczEwazEuYworQEAgLTM2Niw3ICszNjYsNyBAQCB2b2lkIGFzX2V4aXQoY29uc3QgY2hhciAqbWVzc2FnZSkKKyAJZXhpdCgxKTsKKyB9CisgCistaW5saW5lIHZvaWQgb3V0cHV0X3RyYW1fbGluZSggc3RydWN0IGxpc3RfaGVhZCAqbGluZV9oZWFkLCBpbnQgdHlwZSl7Cisrc3RhdGljIGlubGluZSB2b2lkIG91dHB1dF90cmFtX2xpbmUoIHN0cnVjdCBsaXN0X2hlYWQgKmxpbmVfaGVhZCwgaW50IHR5cGUpeworICAgICAgICAgCisgICAgICAgICBzdHJ1Y3QgdHJhbSAqdHJhbV9zeW07CisgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKy0tIAorMi41LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvYXV0b3Rvb2xzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvYXV0b3Rvb2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MzkxZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9hdXRvdG9vbHMucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorQWRkIHBhcmFtZXRlcnMgdG8gYXV0b3JlY29uZiB0byBzdXBwb3J0IGNyb3NzIGNvbXBpbGUuCitSZW1vdmUgc29tZSBzdWItY29tcG9uZW50cyB3aGljaCBuZWVkcyBmdXJ0aGVyIHJlY2lwZSBzdXBwb3J0LgorCitTaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2RpZmYgLXJ1TiBhbHNhLXRvb2xzLTEuMC4yNC4xLW9yaWcvL2xkMTBrMS9naXRjb21waWxlIGFsc2EtdG9vbHMtMS4wLjI0LjEvbGQxMGsxL2dpdGNvbXBpbGUKKy0tLSBhbHNhLXRvb2xzLTEuMC4yNC4xLW9yaWcvL2xkMTBrMS9naXRjb21waWxlCTIwMTEtMDctMDYgMTE6Mjc6NDAuMjI3NjY1MDAyICswODAwCisrKysgYWxzYS10b29scy0xLjAuMjQuMS9sZDEwazEvZ2l0Y29tcGlsZQkyMDExLTA3LTE0IDEzOjI2OjE4LjAxNzY2NTAwNCArMDgwMAorQEAgLTEsNiArMSw2IEBACisgIyEvYmluL2Jhc2gKKyAKKy1hdXRvcmVjb25mIC1maSB8fCBleGl0IDEKKythdXRvcmVjb25mICRBQ0xPQ0FMX0ZMQUdTIC1maSB8fCBleGl0IDEKKyBleHBvcnQgQ0ZMQUdTPSctTzIgLVdhbGwgLXBpcGUgLWcnCisgZWNobyAiQ0ZMQUdTPSRDRkxBR1MiCisgZWNobyAiLi9jb25maWd1cmUgJEAiCitkaWZmIC1ydU4gYWxzYS10b29scy0xLjAuMjQuMS1vcmlnLy9NYWtlZmlsZSBhbHNhLXRvb2xzLTEuMC4yNC4xL01ha2VmaWxlCistLS0gYWxzYS10b29scy0xLjAuMjQuMS1vcmlnLy9NYWtlZmlsZQkyMDExLTA3LTA2IDExOjI3OjQwLjIwNzY2NTAwMCArMDgwMAorKysrIGFsc2EtdG9vbHMtMS4wLjI0LjEvTWFrZWZpbGUJMjAxMS0wNy0xNCAxNTowODowOC44Nzc2NjUwMDkgKzA4MDAKK0BAIC0xLDggKzEsOCBAQAorIFZFUlNJT04gPSAxLjAuMjkKKyBUT1AgPSAuCistU1VCRElSUyA9IGFzMTBrMSBlbnZ5MjRjb250cm9sIGhkc3Bsb2FkZXIgaGRzcGNvbmYgaGRzcG1peGVyIFwKKytTVUJESVJTID0gYXMxMGsxIGVudnkyNGNvbnRyb2wgXAorIAkgIG1peGFydGxvYWRlciBwY3hocmxvYWRlciBybWVkaWdpY29udHJvbCBzYjE2X2NzcCBzZXEgc3NjYXBlX2N0bCBcCistCSAgdXM0Mjhjb250cm9sIHVzeDJ5bG9hZGVyIHZ4bG9hZGVyIGVjaG9taXhlciBsZDEwazEgcWxvMTBrMSBcCisrCSAgdXM0Mjhjb250cm9sIHVzeDJ5bG9hZGVyIHZ4bG9hZGVyIGVjaG9taXhlciBcCisgCSAgaHdtaXh2b2x1bWUgaGRhamFja3JldGFzayBoZGEtdmVyYiBoZGFqYWNrc2Vuc2V0ZXN0CisgCisgYWxsOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvZ2l0Y29tcGlsZV9oZGFqYWNrc2Vuc2V0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvZ2l0Y29tcGlsZV9oZGFqYWNrc2Vuc2V0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4MzI4YmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9naXRjb21waWxlX2hkYWphY2tzZW5zZXRlc3QKQEAgLTAsMCArMSwxMyBAQAorIyEvYmluL2Jhc2gKKworYWNsb2NhbCAkQUNMT0NBTF9GTEFHUyB8fCBleGl0IDEKK2F1dG9tYWtlIC0tZm9yZWlnbiAtLWFkZC1taXNzaW5nIHx8IGV4aXQgMQorYXV0b2NvbmYgfHwgZXhpdCAxCitleHBvcnQgQ0ZMQUdTPSctTzIgLVdhbGwgLXBpcGUgLWcnCitlY2hvICJDRkxBR1M9JENGTEFHUyIKK2VjaG8gIi4vY29uZmlndXJlICRAIgorLi9jb25maWd1cmUgJEAgfHwgZXhpdCAxCit1bnNldCBDRkxBR1MKK2lmIFsgLXogIiRHSVRDT01QSUxFX05PX01BS0UiIF07IHRoZW4KKyAgbWFrZSB8fCBleGl0IDEKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9tYWtlZmlsZV9ub19ndGsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9tYWtlZmlsZV9ub19ndGsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1NzYwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzL21ha2VmaWxlX25vX2d0ay5wYXRjaApAQCAtMCwwICsxLDI5IEBACitSZW1vdmUgc29tZSBzdWItY29tcG9uZW50cyB3aGljaCBuZWVkIGd0aysuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogUm9nZXJpbyBOdW5lcyA8cm9udW5lc0BnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorCitVcGRhdGUgcGF0Y2ggZm9yIGFsc2EtdG9vbHMgMS4wLjI5CisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggMjQ1N2ExYy4uNzIzNDZkOSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTEsOSArMSw5IEBACisgVkVSU0lPTiA9IDEuMC4yOQorIFRPUCA9IC4KKy1TVUJESVJTID0gYXMxMGsxIGVudnkyNGNvbnRyb2wgXAorLQkgIG1peGFydGxvYWRlciBwY3hocmxvYWRlciBybWVkaWdpY29udHJvbCBzYjE2X2NzcCBzZXEgc3NjYXBlX2N0bCBcCistCSAgdXM0Mjhjb250cm9sIHVzeDJ5bG9hZGVyIHZ4bG9hZGVyIGVjaG9taXhlciBcCistCSAgaHdtaXh2b2x1bWUgaGRhamFja3JldGFzayBoZGEtdmVyYiBoZGFqYWNrc2Vuc2V0ZXN0CisrU1VCRElSUyA9IGFzMTBrMSBcCisrCSAgbWl4YXJ0bG9hZGVyIHBjeGhybG9hZGVyIHNiMTZfY3NwIHNlcSBzc2NhcGVfY3RsIFwKKysJICB1czQyOGNvbnRyb2wgdXN4Mnlsb2FkZXIgdnhsb2FkZXIgXAorKwkgIGh3bWl4dm9sdW1lIGhkYS12ZXJiIGhkYWphY2tzZW5zZXRlc3QKKyAKKyBhbGw6CisgCUBmb3IgaSBpbiAkKFNVQkRJUlMpOyBkbyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29sc18xLjAuMjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29sc18xLjAuMjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRmMzk2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzXzEuMC4yOS5iYgpAQCAtMCwwICsxLDQyIEBACitTVU1NQVJZID0gIkFkdmFuY2VkIHRvb2xzIGZvciBjZXJ0YWluIEFMU0Egc291bmQgY2FyZCBkcml2ZXJzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5hbHNhLXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3RyYWNrLmFsc2EtcHJvamVjdC5vcmcvYWxzYS1idWcvbG9naW5fcGFnZS5waHAiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyKyIKK0RFUEVORFMgPSAiYWxzYS1saWIgbmN1cnNlcyBnbGliLTIuMCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vaGRzcGxvYWRlci9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9sZDEwazEvQ09QWUlORy5MSUI7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5hbHNhLXByb2plY3Qub3JnL3B1Yi90b29scy8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2F1dG90b29scy5wYXRjaCBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJycsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGU6Ly9tYWtlZmlsZV9ub19ndGsucGF0Y2gnLCBkKX0gXAorICAgICAgICAgICBmaWxlOi8vZ2l0Y29tcGlsZV9oZGFqYWNrc2Vuc2V0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYXMxMGsxLU1ha2Utb3V0cHV0X3RyYW1fbGluZS1zdGF0aWMtaW5saW5lLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmMzM5YTNjZDI0Zjc0OGM5ZDAwN2JkZmYwZTk4Nzc1YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NGFiZjBhYjVhNzNmMDcxMGM3MGQ0ZmIzZGMxMDAzYWY1YmFlMmQyZWQ3MjFkNTlkMjQ1YjQxYWQwZjJmYmQxIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGtnY29uZmlnCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK0VYVFJBX09FTUFLRSArPSAiR0lUQ09NUElMRV9BUkdTPSctLWhvc3Q9JHtIT1NUX1NZU30gLS1idWlsZD0ke0JVSUxEX1NZU30gLS10YXJnZXQ9JHtUQVJHRVRfU1lTfSAtLXdpdGgtbGlidG9vbC1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH0gLS1wcmVmaXg9JHtwcmVmaXh9JyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2d0aysnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tndGsrXSA9ICIsLGd0aysgZ3RrKzMsIgorCisjIGNvbmZpZ3VyZS5hYy8uaW4gZG9lc24ndCBleGlzdCBzbyBmb3JjZSBjb3B5CitBVVRPVE9PTFNfQ09QWUFDTE9DQUwgPSAiMSIKKworZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKyAgICAjQXV0b21ha2UgZGlyIGlzIG5vdCBjb3JyZWN0bHkgZGV0ZWN0ZWQgaW4gY3Jvc3MgY29tcGlsYXRpb24gY2FzZQorICAgIGV4cG9ydCBBVVRPTUFLRV9ESVI9IiQoYXV0b21ha2UgLS1wcmludC1saWJkaXIpIgorICAgIGV4cG9ydCBBQ0xPQ0FMX0ZMQUdTPSItLXN5c3RlbS1hY2Rpcj0ke0FDTE9DQUxESVJ9LyIKKworICAgIGNwICR7V09SS0RJUn0vZ2l0Y29tcGlsZV9oZGFqYWNrc2Vuc2V0ZXN0ICR7U30vaGRhamFja3NlbnNldGVzdC9naXRjb21waWxlCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2xkMTBrMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLXNjcmlwdHNfMS4wLjI5LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMtc2NyaXB0c18xLjAuMjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4ZjliOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLXNjcmlwdHNfMS4wLjI5LmJiCkBAIC0wLDAgKzEsMjEgQEAKK3JlcXVpcmUgYWxzYS11dGlsc18ke1BWfS5iYgorCitTVU1NQVJZID0gIlNoZWxsIHNjcmlwdHMgdGhhdCBzaG93IGhlbHAgaW5mbyBhbmQgY3JlYXRlIEFMU0EgY29uZmlndXJhdGlvbiBmaWxlcyIKK1BST1ZJREVTID0gImFsc2EtdXRpbHMtYWxzYWNvbmYiCisKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2Fsc2EtdXRpbHM6IgorCitQQUNLQUdFUyA9ICIke1BOfSIKK1JERVBFTkRTXyR7UE59ICs9ICJiYXNoIgorCitGSUxFU18ke1BOfSA9ICIke3NiaW5kaXJ9L2Fsc2Fjb25mIFwKKyAgICAgICAgICAgICAgICR7c2JpbmRpcn0vYWxzYS1pbmZvLnNoIFwKKyAgICAgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vYWxzYS11dGlscy0ke1BWfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vYWxzYWNvbmYvYWxzYWNvbmYgJHtEfSR7c2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vYWxzYS1pbmZvL2Fsc2EtaW5mby5zaCAke0R9JHtzYmluZGlyfS8KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLzAwMDEtYWxzYWN0bC1kb24tdC1sZXQtc3lzdGVtZC11bml0LXJlc3RvcmUtdGhlLXZvbHVtZS13aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLzAwMDEtYWxzYWN0bC1kb24tdC1sZXQtc3lzdGVtZC11bml0LXJlc3RvcmUtdGhlLXZvbHVtZS13aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTlkZDUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvMDAwMS1hbHNhY3RsLWRvbi10LWxldC1zeXN0ZW1kLXVuaXQtcmVzdG9yZS10aGUtdm9sdW1lLXdoLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb20gNDNhNTZmYTM2YTEyZjA5Y2NkNzhiM2NmNWU2YWUxOTdmY2FiNTAxZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBGcmksIDI5IEF1ZyAyMDE0IDE4OjU4OjU2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGFsc2FjdGw6IGRvbid0IGxldCBzeXN0ZW1kIHVuaXQgcmVzdG9yZSB0aGUgdm9sdW1lIHdoZW4KKyBhc291bmQuc3RhdGUgaXMgbWlzc2luZworCitUaGlzIGF2b2lkcyBhbiBlcnJvciBvbiBib290dXAKKworRmlsZWQgYXMgaHR0cHM6Ly9idWd0cmFjay5hbHNhLXByb2plY3Qub3JnL2Fsc2EtYnVnL3ZpZXcucGhwP2lkPTU0NTkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorLS0tCisgYWxzYWN0bC9NYWtlZmlsZS5hbSAgICAgICAgICAgICB8IDcgKysrKy0tLQorIGFsc2FjdGwvYWxzYS1yZXN0b3JlLnNlcnZpY2UuaW4gfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2Fsc2FjdGwvTWFrZWZpbGUuYW0gYi9hbHNhY3RsL01ha2VmaWxlLmFtCitpbmRleCA0N2YwNmU5Li5iNzI4YzA2IDEwMDY0NAorLS0tIGEvYWxzYWN0bC9NYWtlZmlsZS5hbQorKysrIGIvYWxzYWN0bC9NYWtlZmlsZS5hbQorQEAgLTQzLDkgKzQzLDEwIEBAIGluc3RhbGwtZGF0YS1ob29rOgorIGVuZGlmCisgCisgZWRpdCA9IFwKKy0JJChTRUQpIC1yIC1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyBcCistCQkgIC1lICdzLEBteWRhdGFkaXJcQCwkKG15ZGF0YWRpciksZycgXAorLQkJICAtZSAncyxAZGFlbW9uc3dpdGNoXEAsJChBTFNBQ1RMX0RBRU1PTlNXSVRDSCksZycgXAorKwkkKFNFRCkgLWUgJ3MsQGxvY2Fsc3RhdGVkaXJcQCwkKGxvY2Fsc3RhdGVkaXIpLGcnIFwKKysJICAgICAgIC1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyBcCisrCSAgICAgICAtZSAncyxAbXlkYXRhZGlyXEAsJChteWRhdGFkaXIpLGcnIFwKKysJICAgICAgIC1lICdzLEBkYWVtb25zd2l0Y2hcQCwkKEFMU0FDVExfREFFTU9OU1dJVENIKSxnJyBcCisgCQkJCQkJCTwgJDwgPiAkQCB8fCBybSAkQAorIAorIGFsc2Etc3RhdGUuc2VydmljZTogYWxzYS1zdGF0ZS5zZXJ2aWNlLmluCitkaWZmIC0tZ2l0IGEvYWxzYWN0bC9hbHNhLXJlc3RvcmUuc2VydmljZS5pbiBiL2Fsc2FjdGwvYWxzYS1yZXN0b3JlLnNlcnZpY2UuaW4KK2luZGV4IDI0NWE0MzkuLmIwMTc4NTQgMTAwNjQ0CistLS0gYS9hbHNhY3RsL2Fsc2EtcmVzdG9yZS5zZXJ2aWNlLmluCisrKysgYi9hbHNhY3RsL2Fsc2EtcmVzdG9yZS5zZXJ2aWNlLmluCitAQCAtMTAsNiArMTAsNyBAQCBEZWZhdWx0RGVwZW5kZW5jaWVzPW5vCisgQWZ0ZXI9YWxzYS1zdGF0ZS5zZXJ2aWNlCisgQmVmb3JlPXNodXRkb3duLnRhcmdldAorIENvbmZsaWN0cz1zaHV0ZG93bi50YXJnZXQKKytDb25kaXRpb25QYXRoRXhpc3RzPUBsb2NhbHN0YXRlZGlyQC9saWIvYWxzYS9hc291bmQuc3RhdGUKKyAKKyBbU2VydmljZV0KKyBUeXBlPW9uZXNob3QKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvYWxzYS11dGlscy1hcGxheS1pbnRlcnJ1cHQtc2lnbmFsLWhhbmRsaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvYWxzYS11dGlscy1hcGxheS1pbnRlcnJ1cHQtc2lnbmFsLWhhbmRsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZjAwNGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy9hbHNhLXV0aWxzLWFwbGF5LWludGVycnVwdC1zaWduYWwtaGFuZGxpbmcucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2FwbGF5L2FyZWNvcmQgKGFsc2EtdXRpbHMgdjEuMC4yOCkgY2Fubm90IGludGVycnVwdCBzdHJlYW1pbmcKK3ZpYSBDVFJMLUMuIEZpeGVkIHRoZSBpc3N1ZSBieSByZXZlcnRpbmcgYnVnZ3kgcGF0Y2hlcyBhbmQKK3Byb3Blcmx5IGhhbmRsaW5nICdpbl9hYm9ydGluZycgZmxhZyBpbiBhcHByb3ByaWF0ZSBmdW5jdGlvbnMuCisKK1NpZ25lZC1vZmYtYnk6IEFuYW50IEFncmF3YWwgPEFuYW50X0FncmF3YWxAbWVudG9yLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1pa2hhaWwgRHVybmV2IDxtaWtoYWlsX2R1cm5ldkBtZW50b3IuY29tPgorCistLS0gYS9hcGxheS9hcGxheS5jCTIwMTQtMDUtMTkgMTY6MjU6MTQuMDAwMDAwMDAwICswNTMwCisrKysgYi9hcGxheS9hcGxheS5jCTIwMTQtMDUtMjAgMTU6MTc6MTQuMzY0ODIzMDA3ICswNTMwCitAQCAtMzkyLDE0ICszOTIsMjIgQEAKKyAJCXB1dGNoYXIoJ1xuJyk7CisgCWlmICghcXVpZXRfbW9kZSkKKyAJCWZwcmludGYoc3RkZXJyLCBfKCJBYm9ydGVkIGJ5IHNpZ25hbCAlcy4uLlxuIiksIHN0cnNpZ25hbChzaWcpKTsKKy0JaWYgKGhhbmRsZSkKKysJaWYgKHN0cmVhbSA9PSBTTkRfUENNX1NUUkVBTV9DQVBUVVJFKSB7CisrCQlpZiAoZm10X3JlY190YWJsZVtmaWxlX3R5cGVdLmVuZCkgeworKwkJCWZtdF9yZWNfdGFibGVbZmlsZV90eXBlXS5lbmQoZmQpOworKwkJCWZkID0gLTE7CisrCQl9CisrCQlzdHJlYW0gPSAtMTsKKysJfQorKwlpZiAoZmQgPiAxKSB7CisrCQljbG9zZShmZCk7CisrCQlmZCA9IC0xOworKwl9CisrCWlmIChoYW5kbGUgJiYgc2lnICE9IFNJR0FCUlQpIHsKKyAJCXNuZF9wY21fYWJvcnQoaGFuZGxlKTsKKy0JaWYgKHNpZyA9PSBTSUdBQlJUKSB7CistCQkvKiBkbyBub3QgY2FsbCBzbmRfcGNtX2Nsb3NlKCkgYW5kIGFib3J0IGltbWVkaWF0ZWx5ICovCisgCQloYW5kbGUgPSBOVUxMOworLQkJcHJnX2V4aXQoRVhJVF9GQUlMVVJFKTsKKyAJfQorLQlzaWduYWwoc2lnLCBzaWduYWxfaGFuZGxlcik7CisrCXByZ19leGl0KEVYSVRfRkFJTFVSRSk7CisgfQorIAorIC8qIGNhbGwgb24gU0lHVVNSMSBzaWduYWwuICovCitAQCAtMjA5Niw3ICsyMTA0LDcgQEAKKyAJc3NpemVfdCByZXN1bHQgPSBjb3VudCwgcjsKKyAJc2l6ZV90IHNpemU7CisgCistCXdoaWxlIChjb3VudCA+IDApIHsKKysJd2hpbGUgKGNvdW50ID4gMCAmJiAhaW5fYWJvcnRpbmcpIHsKKyAJCXNpemUgPSBjb3VudDsKKyAJCWlmIChzaXplID4gY2h1bmtfYnl0ZXMgLSBidWZmZXJfcG9zKQorIAkJCXNpemUgPSBjaHVua19ieXRlcyAtIGJ1ZmZlcl9wb3M7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy9hc3N1bWUtc3RvcmluZy1pcy1zdWNjZXNzLWlmLW5vdC1zb3VuZC1jYXJkLWRldmljZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzL2Fzc3VtZS1zdG9yaW5nLWlzLXN1Y2Nlc3MtaWYtbm90LXNvdW5kLWNhcmQtZGV2aWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NzI4M2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy9hc3N1bWUtc3RvcmluZy1pcy1zdWNjZXNzLWlmLW5vdC1zb3VuZC1jYXJkLWRldmljZS5wYXRjaApAQCAtMCwwICsxLDM0IEBACitbUEFUQ0hdIGFzc3VtZSBzdG9yaW5nIGlzIHN1Y2Nlc3MgaWYgbm90IHNvdW5kIGNhcmQgZGV2aWNlCisKK1Vwc3RyZWFtLVN0YXR1ZTogUGVuZGluZworCitTeXN0ZW1kIHdpbGwgcmVwb3J0IGZhaWx1cmUgd2hlbiBydW4gYWxzYS0qLCBpZiB0aGUgbWFjaGluZSBoYXMgbm90IHRoZQorc291bmQgY2FyZC4gVG8gdm9pZCB0aGlzIGFubm95ZWQgbWVzc2FnZSwgYWxzYS1yZXN0b3JlL2Fsc2Etc3RhdGUgaWdub3JlCithbGwgdGhlIGV4aXQgY29kZXMgYnkgcHJlZml4aW5nICItIiBpbiBFeGVjU3RhcnQsIGxpa2U6CisKKyAgIGFsc2EtdXRpbHMtMS4wLjI5JCBncmVwICI9LSIgLi8gLXJ8Z3JlcCBzZXJ2aWNlLmluCisgICAuL2Fsc2FjdGwvYWxzYS1yZXN0b3JlLnNlcnZpY2UuaW46RXhlY1N0YXJ0PS1Ac2JpbmRpckAvYWxzYWN0bCByZXN0b3JlCisgICAuL2Fsc2FjdGwvYWxzYS1zdGF0ZS5zZXJ2aWNlLmluOkV4ZWNTdGFydD0tQHNiaW5kaXJAL2Fsc2FjdGwgLXMgLW4gMTkgLWMgcmRhZW1vbgorICAgLi9hbHNhY3RsL2Fsc2Etc3RhdGUuc2VydmljZS5pbjpFeGVjU3RvcD0tQHNiaW5kaXJAL2Fsc2FjdGwgLXMga2lsbCBzYXZlX2FuZF9xdWl0CisgICBsc2EtdXRpbHMtMS4wLjI5JAorCitCdXQgYWxzYS1zdG9yZS5zZXJ2aWNlLmluIGlzIG1pc3NpbmcsIGFuZCBiZXR0ZXIgc29sdXRpb24gaXMgdG8gaWdub3JlCit0aGUgZXhpdCBjb2RlIDE5IHdoaWNoIG1lYW5zIG5vdCBzb3VuZCBjYXJkIGRldmljZSwgbm90IGFsbCBleGl0IGNvZGUKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgYWxzYWN0bC9hbHNhLXN0b3JlLnNlcnZpY2UuaW4gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2Fsc2FjdGwvYWxzYS1zdG9yZS5zZXJ2aWNlLmluIGIvYWxzYWN0bC9hbHNhLXN0b3JlLnNlcnZpY2UuaW4KK2luZGV4IGYxYTU2YmIuLjY4Y2E1MjkgMTAwNjQ0CistLS0gYS9hbHNhY3RsL2Fsc2Etc3RvcmUuc2VydmljZS5pbgorKysrIGIvYWxzYWN0bC9hbHNhLXN0b3JlLnNlcnZpY2UuaW4KK0BAIC0xMywzICsxMyw0IEBAIEJlZm9yZT1zaHV0ZG93bi50YXJnZXQKKyBUeXBlPW9uZXNob3QKKyBFeGVjU3RhcnQ9QHNiaW5kaXJAL2Fsc2FjdGwgc3RvcmUKKyBTdGFuZGFyZE91dHB1dD1zeXNsb2cKKytTdWNjZXNzRXhpdFN0YXR1cz0wIDE5CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzXzEuMC4yOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzXzEuMC4yOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2ZlNGIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHNfMS4wLjI5LmJiCkBAIC0wLDAgKzEsOTcgQEAKK1NVTU1BUlkgPSAiQUxTQSBzb3VuZCB1dGlsaXRpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVndHJhY2suYWxzYS1wcm9qZWN0Lm9yZy9hbHNhLWJ1Zy9sb2dpbl9wYWdlLnBocCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYWxzYWN0bC91dGlscy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PWZlOTUyNmIwNTVlMjQ2YjU1NTg4MDlhNWFlMjVjMGI5IgorREVQRU5EUyA9ICJhbHNhLWxpYiBuY3Vyc2VzIGxpYnNhbXBsZXJhdGUwIgorCitQQUNLQUdFQ09ORklHID8/PSAidWRldiIKK1BBQ0tBR0VDT05GSUdbdWRldl0gPSAiLS13aXRoLXVkZXYtcnVsZXMtZGlyPWBwa2ctY29uZmlnIC0tdmFyaWFibGU9dWRldmRpciB1ZGV2YC9ydWxlcy5kLCx1ZGV2IgorUEFDS0FHRUNPTkZJR1t4bWx0b10gPSAiLS1lbmFibGUteG1sdG8sIC0tZGlzYWJsZS14bWx0bywgeG1sdG8tbmF0aXZlIGRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuYWxzYS1wcm9qZWN0Lm9yZy9wdWIvdXRpbHMvYWxzYS11dGlscy0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYWxzYWN0bC1kb24tdC1sZXQtc3lzdGVtZC11bml0LXJlc3RvcmUtdGhlLXZvbHVtZS13aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbHNhLXV0aWxzLWFwbGF5LWludGVycnVwdC1zaWduYWwtaGFuZGxpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXNzdW1lLXN0b3JpbmctaXMtc3VjY2Vzcy1pZi1ub3Qtc291bmQtY2FyZC1kZXZpY2UucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjZiMjg5YmY4NzRjNGM5YTYzZjRiMzk3MzA5M2RkNDA0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUxNjAwNThmM2UxNDQ4M2NlZDVkZTkxOWRkNDczZjkzOTMyMDU5NDU0NTMwYTliN2VmOTdkY2FiZDY4MzNlOWIiCisKKyMgbGF6eSBoYWNrLiBuZWVkcyBwcm9wZXIgZml4aW5nIGluIGdldHRleHQubTQsIHNlZQorIyBodHRwOi8vYnVncy5vcGVuZW1iZWRkZWQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ4CisjIHBsZWFzZSBjbG9zZSBidWcgYW5kIHJlbW92ZSB0aGlzIGNvbW1lbnQgd2hlbiBwcm9wZXJseSBmaXhlZAorIworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLW5scyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworIyBUaGlzIGFyZSBhbGwgcGFja2FnZXMgdGhhdCB3ZSBuZWVkIHRvIG1ha2UuIEFsc28sIHRoZSBub3cgZW1wdHkgYWxzYS11dGlscworIyBpcGsgZGVwZW5kcyBvbiB0aGVtLgorCitBTFNBX1VUSUxTX1BLR1MgPSAiXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYW1peGVyIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLW1pZGkgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYXBsYXkgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYW1peGVyIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFjb25uZWN0IFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWllY3NldCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1zcGVha2VydGVzdCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hc2VxbmV0IFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFzZXFkdW1wIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFsc2FjdGwgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYWxvb3AgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYXVjbSBcCisgICAgICAgICAgICAiCisKK1BBQ0tBR0VTICs9ICIke0FMU0FfVVRJTFNfUEtHU30iCitSREVQRU5EU18ke1BOfSArPSAiJHtBTFNBX1VUSUxTX1BLR1N9IgorCitGSUxFU18ke1BOfSA9ICIiCitGSUxFU19hbHNhLXV0aWxzLWFwbGF5ICAgICAgID0gIiR7YmluZGlyfS9hcGxheSAke2JpbmRpcn0vYXJlY29yZCIKK0ZJTEVTX2Fsc2EtdXRpbHMtYW1peGVyICAgICAgPSAiJHtiaW5kaXJ9L2FtaXhlciIKK0ZJTEVTX2Fsc2EtdXRpbHMtYWxzYW1peGVyICAgPSAiJHtiaW5kaXJ9L2Fsc2FtaXhlciIKK0ZJTEVTX2Fsc2EtdXRpbHMtc3BlYWtlcnRlc3QgPSAiJHtiaW5kaXJ9L3NwZWFrZXItdGVzdCAke2RhdGFkaXJ9L3NvdW5kcy9hbHNhLyAke2RhdGFkaXJ9L2Fsc2Evc3BlYWtlci10ZXN0LyIKK0ZJTEVTX2Fsc2EtdXRpbHMtbWlkaSAgICAgICAgPSAiJHtiaW5kaXJ9L2FwbGF5bWlkaSAke2JpbmRpcn0vYXJlY29yZG1pZGkgJHtiaW5kaXJ9L2FtaWRpIgorRklMRVNfYWxzYS11dGlscy1hY29ubmVjdCAgICA9ICIke2JpbmRpcn0vYWNvbm5lY3QiCitGSUxFU19hbHNhLXV0aWxzLWFzZXFuZXQgICAgID0gIiR7YmluZGlyfS9hc2VxbmV0IgorRklMRVNfYWxzYS11dGlscy1pZWNzZXQgICAgICA9ICIke2JpbmRpcn0vaWVjc2V0IgorRklMRVNfYWxzYS11dGlscy1hbHNhY3RsICAgICA9ICIke3NiaW5kaXJ9L2Fsc2FjdGwgKi91ZGV2L3J1bGVzLmQgKi8qL3VkZXYvcnVsZXMuZCAke3N5c3RlbWRfdW5pdGRpcn0gJHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYSAke2RhdGFkaXJ9L2Fsc2EvaW5pdC8iCitGSUxFU19hbHNhLXV0aWxzLWFzZXFkdW1wICAgID0gIiR7YmluZGlyfS9hc2VxZHVtcCIKK0ZJTEVTX2Fsc2EtdXRpbHMtYWxzYWxvb3AgICAgPSAiJHtiaW5kaXJ9L2Fsc2Fsb29wIgorRklMRVNfYWxzYS11dGlscy1hbHNhdWNtICAgICA9ICIke2JpbmRpcn0vYWxzYXVjbSIKKworCitTVU1NQVJZX2Fsc2EtdXRpbHMtYXBsYXkgICAgICAgID0gIlBsYXkgKGFuZCByZWNvcmQpIHNvdW5kIGZpbGVzIHVzaW5nIEFMU0EiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYW1peGVyICAgICAgID0gIkNvbW1hbmQtbGluZSBjb250cm9sIGZvciBBTFNBIG1peGVyIGFuZCBzZXR0aW5ncyIKK1NVTU1BUllfYWxzYS11dGlscy1hbHNhbWl4ZXIgICAgPSAibmN1cnNlcy1iYXNlZCBjb250cm9sIGZvciBBTFNBIG1peGVyIGFuZCBzZXR0aW5ncyIKK1NVTU1BUllfYWxzYS11dGlscy1zcGVha2VydGVzdCAgPSAiQUxTQSBzdXJyb3VuZCBzcGVha2VyIHRlc3QgdXRpbGl0eSIKK1NVTU1BUllfYWxzYS11dGlscy1taWRpICAgICAgICAgPSAiTWlzY2VsbGFuZW91cyBNSURJIHV0aWxpdGllcyBmb3IgQUxTQSIKK1NVTU1BUllfYWxzYS11dGlscy1hY29ubmVjdCAgICAgPSAiQUxTQSBzZXF1ZW5jZXIgY29ubmVjdGlvbiBtYW5hZ2VyIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFzZXFuZXQgICAgICA9ICJOZXR3b3JrIGNsaWVudC9zZXJ2ZXIgZm9yIEFMU0Egc2VxdWVuY2VyIgorU1VNTUFSWV9hbHNhLXV0aWxzLWllY3NldCAgICAgICA9ICJBTFNBIHV0aWxpdHkgZm9yIHNldHRpbmcvc2hvd2luZyBJRUM5NTggKFMvUERJRikgc3RhdHVzIGJpdHMiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYWxzYWN0bCAgICAgID0gIlNhdmVzL3Jlc3RvcmVzIEFMU0Etc2V0dGluZ3MgaW4gL2V0Yy9hc291bmQuc3RhdGUiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYXNlcWR1bXAgICAgID0gIlNob3dzIHRoZSBldmVudHMgcmVjZWl2ZWQgYXQgYW4gQUxTQSBzZXF1ZW5jZXIgcG9ydCIKK1NVTU1BUllfYWxzYS11dGlscy1hbHNhbG9vcCAgICAgPSAiQUxTQSBQQ00gbG9vcGJhY2sgdXRpbGl0eSIKK1NVTU1BUllfYWxzYS11dGlscy1hbHNhdWNtICAgICAgPSAiQUxTQSBVc2UgQ2FzZSBNYW5hZ2VyIgorCitSUkVDT01NRU5EU19hbHNhLXV0aWxzLWFsc2FjdGwgPSAiYWxzYS1zdGF0ZXMiCisKK0FMTE9XX0VNUFRZX2Fsc2EtdXRpbHMgPSAiMSIKKworZG9faW5zdGFsbCgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBXZSBkb24ndCBzaGlwIHRoaXMgaGVyZSBiZWNhdXNlIGl0IHJlcXVpcmVzIGEgZGVwZW5kZW5jeSBvbiBiYXNoLgorCSMgU2VlIGFsc2EtdXRpbHMtc2NyaXB0c18ke1BWfS5iYgorCXJtICR7RH0ke3NiaW5kaXJ9L2Fsc2Fjb25mCisJcm0gJHtEfSR7c2JpbmRpcn0vYWxzYS1pbmZvLnNoCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd1ZGV2JywgJ2ZhbHNlJywgJ3RydWUnLCBkKX07IHRoZW4KKwkgICAjIFRoaXMgaXMgd2hlcmUgYWxzYS11dGlscyB3aWxsIGluc3RhbGwgaXRzIHJ1bGVzIGlmIHdlIGRvbid0IHRlbGwgaXQgYW55dGhpbmcgZWxzZS4KKwkgICBybSAtcmYgJHtEfS9saWIvdWRldgorCSAgIHJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICR7RH0vbGliCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmxhYy9mbGFjXzEuMy4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mbGFjL2ZsYWNfMS4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1MjcxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmxhYy9mbGFjXzEuMy4xLmJiCkBAIC0wLDAgKzEsNDIgQEAKK1NVTU1BUlkgPSAiRnJlZSBMb3NzbGVzcyBBdWRpbyBDb2RlYyIKK0RFU0NSSVBUSU9OID0gIkZMQUMgc3RhbmRzIGZvciBGcmVlIExvc3NsZXNzIEF1ZGlvIENvZGVjLCBhIGxvc3NsZXNzIGF1ZGlvIGNvbXByZXNzaW9uIGZvcm1hdC4iCitIT01FUEFHRSA9ICJodHRwczovL3hpcGgub3JnL2ZsYWMvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvZmxhYy9idWdzLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR0ZETC0xLjIgJiBHUEx2MisgJiBMR1BMdjIuMSsgJiBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkZETDttZDU9YWQxNDE5ZWNjNTZlMDYwZWNjZjgxODRhODdjNDI4NWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL01ha2VmaWxlLmFtO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PTBhODUzYjgxZDlkNDNkOGFhZDNiNTNiMDVjZmNjMzdlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZmxhYy9tYWluLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xODttZDU9ZDAzYTc2NjU1OGQyMzNmOWNjM2FjNWRmYWZkNDlkZWIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MR1BMO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcGx1Z2luX2NvbW1vbi9hbGwuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTE4O21kNT03YzhhM2I5ZTFlNjZlZDBhYmE3NjViYzZmMzVkYTg1ZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLlhpcGg7bWQ1PWEyYzRiNzFjMDE5ODY4MjM3NmQ0ODNlYjViY2M5MTk3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvRkxBQy9hbGwuaDtiZWdpbmxpbmU9NjU7ZW5kbGluZT03MDttZDU9NjQ0NzRmMmIyMmU5ZTc3YjI4ZDhiOGIyNWM5ODNhNDgiCitERVBFTkRTID0gImxpYm9nZyIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnhpcGgub3JnL3JlbGVhc2VzL2ZsYWMvJHtCUH0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjk5MjJjOWEwMzc4Yzg4ZDNlOTAxYjIzNGY4NTI2OTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDc3M2MwMDk5ZGJhNzY3ZDk2M2ZkOTIxNDMyNjNiZTMzOGM0ODcwMjE3MmU4NzU0YjliYzUxMDNlZmUxYzU2YyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLW9nZ3Rlc3QgXAorICAgICAgICAgICAgICAgIC0td2l0aC1vZ2ctbGlicmFyaWVzPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtb2dnLWluY2x1ZGVzPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUteG1tcy1wbHVnaW4gXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1saWJpY29udi1wcmVmaXggXAorICAgICAgICAgICAgICAgIGFjX2N2X3Byb2dfTkFTTT0iIiBcCisgICAgICAgICAgICAgICAgIgorCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFsdGl2ZWMiLCAiIC0tZW5hYmxlLWFsdGl2ZWMiLCAiIC0tZGlzYWJsZS1hbHRpdmVjIiwgZCl9IgorRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3JlMiIsICIgLS1lbmFibGUtc3NlIiwgIiIsIGQpfSIKK0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29yZWk3IiwgIiAtLWVuYWJsZS1zc2UiLCAiIiwgZCl9IgorCitQQUNLQUdFUyArPSAibGliZmxhYyBsaWJmbGFjKysgbGlib2dnZmxhYyBsaWJvZ2dmbGFjKysiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiIKK0ZJTEVTX2xpYmZsYWMgPSAiJHtsaWJkaXJ9L2xpYkZMQUMuc28uKiIKK0ZJTEVTX2xpYmZsYWMrKyA9ICIke2xpYmRpcn0vbGliRkxBQysrLnNvLioiCitGSUxFU19saWJvZ2dmbGFjID0gIiR7bGliZGlyfS9saWJPZ2dGTEFDLnNvLioiCitGSUxFU19saWJvZ2dmbGFjKysgPSAiJHtsaWJkaXJ9L2xpYk9nZ0ZMQUMrKy5zby4qIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL0FkZC1lcnJvci1zaWduYWwtZW1pc3Npb24tZm9yLW1pc3NpbmctcGx1Z2lucy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvQWRkLWVycm9yLXNpZ25hbC1lbWlzc2lvbi1mb3ItbWlzc2luZy1wbHVnaW5zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMmQ0NmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL0FkZC1lcnJvci1zaWduYWwtZW1pc3Npb24tZm9yLW1pc3NpbmctcGx1Z2lucy5wYXRjaApAQCAtMCwwICsxLDI1MiBAQAorRnJvbSBkNjRjN2VkYjY2ZjRhNjRmZjQ5YzQzMDZjZjc3ZmQyNjliNzA3OWFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IE1vbiwgMTYgTWFyIDIwMTUgMTM6NDU6MzAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIGVycm9yIHNpZ25hbCBlbWlzc2lvbiBmb3IgbWlzc2luZyBwbHVnaW5zCisKK0FkZCBhIG1pc3NpbmcgcGx1Z2lucyBlcnJvciBzaWduYWwgdG8gZ3N0LXBsYXllci4gTm90ZSB0aGF0IHRoaXMgZXJyb3IKK2RvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhlIHBsYXliYWNrIGhhcyBjb21wbGV0ZWx5IGZhaWxlZCwgYnV0IGluCitwcmFjdGljZSB0aGUgdXNlciBleHBlcmllbmNlIHdpbGwgYmUgYmFkICh0aGluaywgZS5nLiBvZiBhIG1wNCBmaWxlCit3aGVyZSBILjI2NCBjb2RlYyBpcyBtaXNzaW5nOiBBQUMgcGxheWJhY2sgc3RpbGwgd29ya3MuLi4pLgorCitVc2UgdGhlIHNpZ25hbCBpbiBndGstcGxheSB0byBzaG93IGEgaW5mb2JhciBpZiBwbHVnaW5zIGFyZSBtaXNzaW5nLgorCitTdWJtaXR0ZWQgdXBzdHJlYW0gYXQgaHR0cHM6Ly9naXRodWIuY29tL3Nkcm9lZ2UvZ3N0LXBsYXllci9wdWxsLzExCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgfCAgMiArLQorIGd0ay9ndGstcGxheS5jICAgICAgICAgICAgIHwgNTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQorIGxpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jIHwgMjIgKysrKysrKysrKysrKysrKysrKworIGxpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oIHwgIDMgKystCisgNCBmaWxlcyBjaGFuZ2VkLCA3OCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5MGFiNzRjLi42Y2RiNGViIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01Myw3ICs1Myw3IEBAIEFDX1NVQlNUKExUX0FHRSkKKyBQS0dfUFJPR19QS0dfQ09ORklHCisgCisgUEtHX0NIRUNLX01PRFVMRVMoR0xJQiwgW2dsaWItMi4wIGdvYmplY3QtMi4wXSkKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhHU1RSRUFNRVIsIFtnc3RyZWFtZXItMS4wID49IDEuNCBnc3RyZWFtZXItdmlkZW8tMS4wID49IDEuNF0pCisrUEtHX0NIRUNLX01PRFVMRVMoR1NUUkVBTUVSLCBbZ3N0cmVhbWVyLTEuMCA+PSAxLjQgZ3N0cmVhbWVyLXZpZGVvLTEuMCA+PSAxLjQgZ3N0cmVhbWVyLXBidXRpbHMtMS4wXSkKKyAKKyBHTElCX1BSRUZJWD0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cHJlZml4IGdsaWItMi4wYCIKKyBBQ19TVUJTVChHTElCX1BSRUZJWCkKK2RpZmYgLS1naXQgYS9ndGsvZ3RrLXBsYXkuYyBiL2d0ay9ndGstcGxheS5jCitpbmRleCBiOTI3NzNiLi5lMmI2MDVhIDEwMDY0NAorLS0tIGEvZ3RrL2d0ay1wbGF5LmMKKysrKyBiL2d0ay9ndGstcGxheS5jCitAQCAtMzAsNiArMzAsOCBAQCB0eXBlZGVmIHN0cnVjdAorICAgR3RrV2lkZ2V0ICpwcmV2X2J1dHRvbiwgKm5leHRfYnV0dG9uOworICAgR3RrV2lkZ2V0ICpzZWVrYmFyOworICAgR3RrV2lkZ2V0ICp2aWRlb19hcmVhOworKyAgR3RrV2lkZ2V0ICppbmZvX2xhYmVsOworKyAgR3RrV2lkZ2V0ICppbmZvX2JhcjsKKyAgIEd0a1dpZGdldCAqdm9sdW1lX2J1dHRvbjsKKyAgIGd1bG9uZyBzZWVrYmFyX3ZhbHVlX2NoYW5nZWRfc2lnbmFsX2lkOworICAgZ2Jvb2xlYW4gcGxheWluZzsKK0BAIC0xNDEsNiArMTQzLDEzIEBAIHBsYXlfcGF1c2VfY2xpY2tlZF9jYiAoR3RrQnV0dG9uICogYnV0dG9uLCBHdGtQbGF5ICogcGxheSkKKyB9CisgCisgc3RhdGljIHZvaWQKKytjbGVhcl9taXNzaW5nX3BsdWdpbnMgKEd0a1BsYXkgKiBwbGF5KQorK3sKKysgIGd0a19sYWJlbF9zZXRfdGV4dCAoR1RLX0xBQkVMIChwbGF5LT5pbmZvX2xhYmVsKSwgIiIpOworKyAgZ3RrX3dpZGdldF9oaWRlIChwbGF5LT5pbmZvX2Jhcik7CisrfQorKworK3N0YXRpYyB2b2lkCisgc2tpcF9wcmV2X2NsaWNrZWRfY2IgKEd0a0J1dHRvbiAqIGJ1dHRvbiwgR3RrUGxheSAqIHBsYXkpCisgeworICAgR0xpc3QgKnByZXY7CitAQCAtMTU1LDYgKzE2NCw3IEBAIHNraXBfcHJldl9jbGlja2VkX2NiIChHdGtCdXR0b24gKiBidXR0b24sIEd0a1BsYXkgKiBwbGF5KQorIAorICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlIChwbGF5LT5uZXh0X2J1dHRvbiwgVFJVRSk7CisgICBnc3RfcGxheWVyX3NldF91cmkgKHBsYXktPnBsYXllciwgcHJldi0+ZGF0YSk7CisrICBjbGVhcl9taXNzaW5nX3BsdWdpbnMgKHBsYXkpOworICAgZ3N0X3BsYXllcl9wbGF5IChwbGF5LT5wbGF5ZXIpOworICAgc2V0X3RpdGxlIChwbGF5LCBwcmV2LT5kYXRhKTsKKyAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSAocGxheS0+cHJldl9idXR0b24sIGdfbGlzdF9wcmV2aW91cyAocHJldikgIT0gTlVMTCk7CitAQCAtMTc1LDYgKzE4NSw3IEBAIHNraXBfbmV4dF9jbGlja2VkX2NiIChHdGtCdXR0b24gKiBidXR0b24sIEd0a1BsYXkgKiBwbGF5KQorIAorICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlIChwbGF5LT5wcmV2X2J1dHRvbiwgVFJVRSk7CisgICBnc3RfcGxheWVyX3NldF91cmkgKHBsYXktPnBsYXllciwgbmV4dC0+ZGF0YSk7CisrICBjbGVhcl9taXNzaW5nX3BsdWdpbnMgKHBsYXkpOworICAgZ3N0X3BsYXllcl9wbGF5IChwbGF5LT5wbGF5ZXIpOworICAgc2V0X3RpdGxlIChwbGF5LCBuZXh0LT5kYXRhKTsKKyAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSAocGxheS0+bmV4dF9idXR0b24sIGdfbGlzdF9uZXh0IChuZXh0KSAhPSBOVUxMKTsKK0BAIC0xOTMsMTAgKzIwNCwxNiBAQCB2b2x1bWVfY2hhbmdlZF9jYiAoR3RrU2NhbGVCdXR0b24gKiBidXR0b24sIGdkb3VibGUgdmFsdWUsIEd0a1BsYXkgKiBwbGF5KQorICAgZ3N0X3BsYXllcl9zZXRfdm9sdW1lIChwbGF5LT5wbGF5ZXIsIHZhbHVlKTsKKyB9CisgCisrdm9pZAorK2luZm9fYmFyX3Jlc3BvbnNlX2NiIChHdGtJbmZvQmFyICogYmFyLCBnaW50IHJlc3BvbnNlLCBHdGtQbGF5ICogcGxheSkKKyt7CisrICBndGtfd2lkZ2V0X2hpZGUgKEdUS19XSURHRVQgKGJhcikpOworK30KKysKKyBzdGF0aWMgdm9pZAorIGNyZWF0ZV91aSAoR3RrUGxheSAqIHBsYXkpCisgeworLSAgR3RrV2lkZ2V0ICpjb250cm9scywgKm1haW5faGJveCwgKm1haW5fdmJveDsKKysgIEd0a1dpZGdldCAqY29udHJvbHMsICptYWluX2hib3gsICptYWluX3Zib3gsICppbmZvX2JhciwgKmNvbnRlbnRfYXJlYTsKKyAKKyAgIHBsYXktPndpbmRvdyA9IGd0a193aW5kb3dfbmV3IChHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChwbGF5LT53aW5kb3cpLCAiZGVsZXRlLWV2ZW50IiwKK0BAIC0yMDgsNiArMjI1LDIwIEBAIGNyZWF0ZV91aSAoR3RrUGxheSAqIHBsYXkpCisgICBnX3NpZ25hbF9jb25uZWN0IChwbGF5LT52aWRlb19hcmVhLCAicmVhbGl6ZSIsCisgICAgICAgR19DQUxMQkFDSyAodmlkZW9fYXJlYV9yZWFsaXplX2NiKSwgcGxheSk7CisgCisrICBwbGF5LT5pbmZvX2JhciA9IGd0a19pbmZvX2Jhcl9uZXcgKCk7CisrICBndGtfaW5mb19iYXJfc2V0X21lc3NhZ2VfdHlwZSAoR1RLX0lORk9fQkFSIChwbGF5LT5pbmZvX2JhciksCisrICAgICAgR1RLX01FU1NBR0VfV0FSTklORyk7CisrICAvL2d0a19pbmZvX2Jhcl9zZXRfc2hvd19jbG9zZV9idXR0b24gKEdUS19JTkZPX0JBUiAocGxheS0+aW5mb19iYXIpLAorKyAgLy8gICAgVFJVRSk7CisrICBndGtfd2lkZ2V0X3NldF9ub19zaG93X2FsbCAocGxheS0+aW5mb19iYXIsIFRSVUUpOworKyAgZ19zaWduYWxfY29ubmVjdCAocGxheS0+aW5mb19iYXIsICJyZXNwb25zZSIsCisrICAgICAgR19DQUxMQkFDSyAoaW5mb19iYXJfcmVzcG9uc2VfY2IpLCBwbGF5KTsKKysKKysgIGNvbnRlbnRfYXJlYSA9IGd0a19pbmZvX2Jhcl9nZXRfY29udGVudF9hcmVhIChHVEtfSU5GT19CQVIgKHBsYXktPmluZm9fYmFyKSk7CisrICBwbGF5LT5pbmZvX2xhYmVsID0gZ3RrX2xhYmVsX25ldyAoIiIpOworKyAgZ3RrX2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKGNvbnRlbnRfYXJlYSksIHBsYXktPmluZm9fbGFiZWwpOworKyAgZ3RrX3dpZGdldF9zaG93IChwbGF5LT5pbmZvX2xhYmVsKTsKKysKKyAgIC8qIFVuaWZpZWQgcGxheS9wYXVzZSBidXR0b24gKi8KKyAgIHBsYXktPnBsYXlfcGF1c2VfYnV0dG9uID0KKyAgICAgICBndGtfYnV0dG9uX25ld19mcm9tX2ljb25fbmFtZSAoIm1lZGlhLXBsYXliYWNrLXBhdXNlIiwKK0BAIC0yNTgsNiArMjg5LDcgQEAgY3JlYXRlX3VpIChHdGtQbGF5ICogcGxheSkKKyAKKyAgIG1haW5fdmJveCA9IGd0a19ib3hfbmV3IChHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDApOworICAgZ3RrX2JveF9wYWNrX3N0YXJ0IChHVEtfQk9YIChtYWluX3Zib3gpLCBtYWluX2hib3gsIFRSVUUsIFRSVUUsIDApOworKyAgZ3RrX2JveF9wYWNrX3N0YXJ0IChHVEtfQk9YIChtYWluX3Zib3gpLCBwbGF5LT5pbmZvX2JhciwgRkFMU0UsIEZBTFNFLCAwKTsKKyAgIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAobWFpbl92Ym94KSwgY29udHJvbHMsIEZBTFNFLCBGQUxTRSwgMCk7CisgICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAocGxheS0+d2luZG93KSwgbWFpbl92Ym94KTsKKyAKK0BAIC0zMjIsNiArMzU0LDcgQEAgZW9zX2NiIChHc3RQbGF5ZXIgKiB1bnVzZWQsIEd0a1BsYXkgKiBwbGF5KQorICAgICAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSAocGxheS0+bmV4dF9idXR0b24sIGdfbGlzdF9uZXh0IChuZXh0KSAhPSBOVUxMKTsKKyAKKyAgICAgICBnc3RfcGxheWVyX3NldF91cmkgKHBsYXktPnBsYXllciwgbmV4dC0+ZGF0YSk7CisrICAgICAgY2xlYXJfbWlzc2luZ19wbHVnaW5zIChwbGF5KTsKKyAgICAgICBnc3RfcGxheWVyX3BsYXkgKHBsYXktPnBsYXllcik7CisgICAgICAgc2V0X3RpdGxlIChwbGF5LCBuZXh0LT5kYXRhKTsKKyAgICAgfSBlbHNlIHsKK0BAIC0zMzAsNiArMzYzLDI0IEBAIGVvc19jYiAoR3N0UGxheWVyICogdW51c2VkLCBHdGtQbGF5ICogcGxheSkKKyAgIH0KKyB9CisgCisrc3RhdGljIHZvaWQKKytlcnJvcl9jYiAoR3N0UGxheWVyICogcGxheWVyLCBHRXJyb3IgKiBlcnIsIEd0a1BsYXkgKiBwbGF5KQorK3sKKysgIGNoYXIgKm1lc3NhZ2U7CisrCisrICBpZiAoZ19lcnJvcl9tYXRjaGVzIChlcnIsIGdzdF9wbGF5ZXJfZXJyb3JfcXVhcmsgKCksCisrICAgICAgR1NUX1BMQVlFUl9FUlJPUl9NSVNTSU5HX1BMVUdJTikpIHsKKysgICAgLy8gYWRkIG1lc3NhZ2UgdG8gZW5kIG9mIGFueSBleGlzdGluZyBtZXNzYWdlOiB0aGVyZSBtYXkgYmUKKysgICAgLy8gbXVsdGlwbGUgbWlzc2luZyBwbHVnaW5zLgorKyAgICBtZXNzYWdlID0gZ19zdHJkdXBfcHJpbnRmICgiJXMlcy4gIiwKKysgICAgICAgIGd0a19sYWJlbF9nZXRfdGV4dCAoR1RLX0xBQkVMIChwbGF5LT5pbmZvX2xhYmVsKSksIGVyci0+bWVzc2FnZSk7CisrICAgIGd0a19sYWJlbF9zZXRfdGV4dCAoR1RLX0xBQkVMIChwbGF5LT5pbmZvX2xhYmVsKSwgbWVzc2FnZSk7CisrICAgIGdfZnJlZSAobWVzc2FnZSk7CisrCisrICAgIGd0a193aWRnZXRfc2hvdyAocGxheS0+aW5mb19iYXIpOworKyAgfQorK30KKysKKyBpbnQKKyBtYWluIChnaW50IGFyZ2MsIGdjaGFyICoqIGFyZ3YpCisgeworQEAgLTQyMiw2ICs0NzMsNyBAQCBtYWluIChnaW50IGFyZ2MsIGdjaGFyICoqIGFyZ3YpCisgICBnX3NpZ25hbF9jb25uZWN0IChwbGF5LnBsYXllciwgInZpZGVvLWRpbWVuc2lvbnMtY2hhbmdlZCIsCisgICAgICAgR19DQUxMQkFDSyAodmlkZW9fZGltZW5zaW9uc19jaGFuZ2VkX2NiKSwgJnBsYXkpOworICAgZ19zaWduYWxfY29ubmVjdCAocGxheS5wbGF5ZXIsICJlbmQtb2Ytc3RyZWFtIiwgR19DQUxMQkFDSyAoZW9zX2NiKSwgJnBsYXkpOworKyAgZ19zaWduYWxfY29ubmVjdCAocGxheS5wbGF5ZXIsICJlcnJvciIsIEdfQ0FMTEJBQ0sgKGVycm9yX2NiKSwgJnBsYXkpOworIAorICAgLyogV2UgaGF2ZSBmaWxlKHMpIHRoYXQgbmVlZCBwbGF5aW5nLiAqLworICAgc2V0X3RpdGxlICgmcGxheSwgZ19saXN0X2ZpcnN0IChwbGF5LnVyaXMpLT5kYXRhKTsKK2RpZmYgLS1naXQgYS9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYyBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jCitpbmRleCBiZDY4MmQ5Li43OGU3YmExIDEwMDY0NAorLS0tIGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMKKysrKyBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jCitAQCAtNDcsNiArNDcsNyBAQAorIAorICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisgI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorKyNpbmNsdWRlIDxnc3QvcGJ1dGlscy9taXNzaW5nLXBsdWdpbnMuaD4KKyAKKyBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfcGxheWVyX2RlYnVnKTsKKyAjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfcGxheWVyX2RlYnVnCitAQCAtMjM4LDYgKzIzOSw3IEBAIGdzdF9wbGF5ZXJfY2xhc3NfaW5pdCAoR3N0UGxheWVyQ2xhc3MgKiBrbGFzcykKKyAgICAgICBnX3NpZ25hbF9uZXcgKCJ2aWRlby1kaW1lbnNpb25zLWNoYW5nZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAorICAgICAgIEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfTk9fUkVDVVJTRSB8IEdfU0lHTkFMX05PX0hPT0tTLCAwLCBOVUxMLAorICAgICAgIE5VTEwsIE5VTEwsIEdfVFlQRV9OT05FLCAyLCBHX1RZUEVfSU5ULCBHX1RZUEVfSU5UKTsKKysKKyB9CisgCisgc3RhdGljIHZvaWQKK0BAIC02MTksNiArNjIxLDIxIEBAIGVycm9yX2NiIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtc2csIGdwb2ludGVyIHVzZXJfZGF0YSkKKyAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+cHJpdi0+bG9jayk7CisgfQorIAorK3N0YXRpYyB2b2lkCisrZWxlbWVudF9jYiAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbXNnLCBncG9pbnRlciB1c2VyX2RhdGEpCisreworKyAgR3N0UGxheWVyICpzZWxmID0gR1NUX1BMQVlFUiAodXNlcl9kYXRhKTsKKysKKysgIGlmIChnc3RfaXNfbWlzc2luZ19wbHVnaW5fbWVzc2FnZSAobXNnKSkgeworKyAgICBnY2hhciAqZGVzYzsKKysKKysgICAgZGVzYyA9IGdzdF9taXNzaW5nX3BsdWdpbl9tZXNzYWdlX2dldF9kZXNjcmlwdGlvbiAobXNnKTsKKysgICAgZW1pdF9lcnJvciAoc2VsZiwgZ19lcnJvcl9uZXcgKEdTVF9QTEFZRVJfRVJST1IsCisrICAgICAgICBHU1RfUExBWUVSX0VSUk9SX01JU1NJTkdfUExVR0lOLCAiTWlzc2luZyBwbHVnaW4gJyVzJyIsIGRlc2MpKTsKKysgICAgZ19mcmVlIChkZXNjKTsKKysgIH0KKyt9CisrCisgc3RhdGljIGdib29sZWFuCisgZW9zX2Rpc3BhdGNoIChncG9pbnRlciB1c2VyX2RhdGEpCisgeworQEAgLTEwNTksNiArMTA3Niw4IEBAIGdzdF9wbGF5ZXJfbWFpbiAoZ3BvaW50ZXIgZGF0YSkKKyAgICAgICBOVUxMLCBOVUxMKTsKKyAgIGdfc291cmNlX2F0dGFjaCAoYnVzX3NvdXJjZSwgc2VsZi0+cHJpdi0+Y29udGV4dCk7CisgCisrICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoYnVzKSwgIm1lc3NhZ2U6OmVsZW1lbnQiLAorKyAgICAgIEdfQ0FMTEJBQ0sgKGVsZW1lbnRfY2IpLCBzZWxmKTsKKyAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChidXMpLCAibWVzc2FnZTo6ZXJyb3IiLCBHX0NBTExCQUNLIChlcnJvcl9jYiksCisgICAgICAgc2VsZik7CisgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoYnVzKSwgIm1lc3NhZ2U6OmVvcyIsIEdfQ0FMTEJBQ0sgKGVvc19jYiksIHNlbGYpOworQEAgLTE1NjAsNiArMTU3OSw3IEBAIGdzdF9wbGF5ZXJfZXJyb3JfZ2V0X3R5cGUgKHZvaWQpCisgICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAgIHtDX0VOVU0gKEdTVF9QTEFZRVJfRVJST1JfRkFJTEVEKSwgIkdTVF9QTEFZRVJfRVJST1JfRkFJTEVEIiwgImZhaWxlZCJ9LAorKyAgICB7Q19FTlVNIChHU1RfUExBWUVSX0VSUk9SX01JU1NJTkdfUExVR0lOKSwgIkdTVF9QTEFZRVJfRVJST1JfTUlTU0lOR19QTFVHSU4iLCAibWlzc2luZy1wbHVnaW4ifSwKKyAgICAgezAsIE5VTEwsIE5VTEx9CisgICB9OworIAorQEAgLTE1NzcsNiArMTU5Nyw4IEBAIGdzdF9wbGF5ZXJfZXJyb3JfZ2V0X25hbWUgKEdzdFBsYXllckVycm9yIGVycm9yKQorICAgc3dpdGNoIChlcnJvcikgeworICAgICBjYXNlIEdTVF9QTEFZRVJfRVJST1JfRkFJTEVEOgorICAgICAgIHJldHVybiAiZmFpbGVkIjsKKysgICAgY2FzZSBHU1RfUExBWUVSX0VSUk9SX01JU1NJTkdfUExVR0lOOgorKyAgICAgIHJldHVybiAibWlzc2luZy1wbHVnaW4iOworICAgfQorIAorICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CitkaWZmIC0tZ2l0IGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmggYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaAoraW5kZXggYzQzODUxMy4uMzVmYjViYiAxMDA2NDQKKy0tLSBhL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oCisrKysgYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaAorQEAgLTQ0LDcgKzQ0LDggQEAgR1R5cGUgICAgICAgIGdzdF9wbGF5ZXJfZXJyb3JfZ2V0X3R5cGUgICAgICAgICAgICAgICAgKHZvaWQpOworICNkZWZpbmUgICAgICBHU1RfVFlQRV9QTEFZRVJfRVJST1IgICAgICAgICAgICAgICAgICAgIChnc3RfcGxheWVyX2Vycm9yX2dldF90eXBlICgpKQorIAorIHR5cGVkZWYgZW51bSB7CistICBHU1RfUExBWUVSX0VSUk9SX0ZBSUxFRCA9IDAKKysgIEdTVF9QTEFZRVJfRVJST1JfRkFJTEVEID0gMCwKKysgIEdTVF9QTEFZRVJfRVJST1JfTUlTU0lOR19QTFVHSU4KKyB9IEdzdFBsYXllckVycm9yOworIAorIGNvbnN0IGdjaGFyICpnc3RfcGxheWVyX2Vycm9yX2dldF9uYW1lICAgICAgICAgICAgICAgIChHc3RQbGF5ZXJFcnJvciBlcnJvcik7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvRml4LXBhdXNlLXBsYXkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL0ZpeC1wYXVzZS1wbGF5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4M2M0MmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL0ZpeC1wYXVzZS1wbGF5LnBhdGNoCkBAIC0wLDAgKzEsMTA3IEBACitGaXggcGF1c2UvcGxheQorCitUaGUgY3VycmVudCBwbGF5ZXIgc3RhdGUgaXMgbm93IG5vdGlmaWVkIHZpYSB0aGUgc3RhdGUtY2hhbmdlZCBzaWduYWwsCithbmQgaW4gdGhlIEdUSyBVSSBpdCB3YXMgb25seSB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGRlc2lyZWQgc3RhdGUuCisKK1RoaXMgaXMgYSBiYWNrcG9ydCBvZiB1cHN0cmVhbSBjb21taXQgNzM4NDc5YzdhMC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKworLS0tCisgZ3RrL2d0ay1wbGF5LmMgICAgICAgICAgICAgfCAgOCArKysrKystLQorIGxpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jIHwgMTIgLS0tLS0tLS0tLS0tCisgbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmggfCAgMiAtLQorIDMgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2d0ay9ndGstcGxheS5jIGIvZ3RrL2d0ay1wbGF5LmMKK2luZGV4IDZlN2EwOTguLmUyYjYwNWEgMTAwNjQ0CistLS0gYS9ndGsvZ3RrLXBsYXkuYworKysrIGIvZ3RrL2d0ay1wbGF5LmMKK0BAIC0zNCw2ICszNCw3IEBAIHR5cGVkZWYgc3RydWN0CisgICBHdGtXaWRnZXQgKmluZm9fYmFyOworICAgR3RrV2lkZ2V0ICp2b2x1bWVfYnV0dG9uOworICAgZ3Vsb25nIHNlZWtiYXJfdmFsdWVfY2hhbmdlZF9zaWduYWxfaWQ7CisrICBnYm9vbGVhbiBwbGF5aW5nOworIH0gR3RrUGxheTsKKyAKKyAvKiBDb21wYXQgc3R1YnMgKi8KK0BAIC0xMTgsMTIgKzExOSwxMyBAQCBwbGF5X3BhdXNlX2NsaWNrZWRfY2IgKEd0a0J1dHRvbiAqIGJ1dHRvbiwgR3RrUGxheSAqIHBsYXkpCisgeworICAgR3RrV2lkZ2V0ICppbWFnZTsKKyAKKy0gIGlmIChnc3RfcGxheWVyX2lzX3BsYXlpbmcgKHBsYXktPnBsYXllcikpIHsKKysgIGlmIChwbGF5LT5wbGF5aW5nKSB7CisgICAgIGdzdF9wbGF5ZXJfcGF1c2UgKHBsYXktPnBsYXllcik7CisgICAgIGltYWdlID0KKyAgICAgICAgIGd0a19pbWFnZV9uZXdfZnJvbV9pY29uX25hbWUgKCJtZWRpYS1wbGF5YmFjay1zdGFydCIsCisgICAgICAgICBHVEtfSUNPTl9TSVpFX0JVVFRPTik7CisgICAgIGd0a19idXR0b25fc2V0X2ltYWdlIChHVEtfQlVUVE9OIChwbGF5LT5wbGF5X3BhdXNlX2J1dHRvbiksIGltYWdlKTsKKysgICAgcGxheS0+cGxheWluZyA9IEZBTFNFOworICAgfSBlbHNlIHsKKyAgICAgZ2NoYXIgKnRpdGxlOworIAorQEAgLTEzNiw2ICsxMzgsNyBAQCBwbGF5X3BhdXNlX2NsaWNrZWRfY2IgKEd0a0J1dHRvbiAqIGJ1dHRvbiwgR3RrUGxheSAqIHBsYXkpCisgICAgIHRpdGxlID0gZ3N0X3BsYXllcl9nZXRfdXJpIChwbGF5LT5wbGF5ZXIpOworICAgICBzZXRfdGl0bGUgKHBsYXksIHRpdGxlKTsKKyAgICAgZ19mcmVlICh0aXRsZSk7CisrICAgIHBsYXktPnBsYXlpbmcgPSBUUlVFOworICAgfQorIH0KKyAKK0BAIC0zMzUsNyArMzM4LDcgQEAgdmlkZW9fZGltZW5zaW9uc19jaGFuZ2VkX2NiIChHc3RQbGF5ZXIgKiB1bnVzZWQsIGdpbnQgd2lkdGgsIGdpbnQgaGVpZ2h0LAorIHN0YXRpYyB2b2lkCisgZW9zX2NiIChHc3RQbGF5ZXIgKiB1bnVzZWQsIEd0a1BsYXkgKiBwbGF5KQorIHsKKy0gIGlmIChnc3RfcGxheWVyX2lzX3BsYXlpbmcgKHBsYXktPnBsYXllcikpIHsKKysgIGlmIChwbGF5LT5wbGF5aW5nKSB7CisgICAgIEdMaXN0ICpuZXh0ID0gTlVMTDsKKyAgICAgZ2NoYXIgKnVyaTsKKyAKK0BAIC00NTIsNiArNDU1LDcgQEAgbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqKiBhcmd2KQorICAgfQorIAorICAgcGxheS5wbGF5ZXIgPSBnc3RfcGxheWVyX25ldyAoKTsKKysgIHBsYXkucGxheWluZyA9IFRSVUU7CisgCisgICBnX29iamVjdF9zZXQgKHBsYXkucGxheWVyLCAiZGlzcGF0Y2gtdG8tbWFpbi1jb250ZXh0IiwgVFJVRSwgTlVMTCk7CisgCitkaWZmIC0tZ2l0IGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMgYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYworaW5kZXggMDY5YjI4NC4uNzhlN2JhMSAxMDA2NDQKKy0tLSBhL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jCisrKysgYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYworQEAgLTE0MjIsMTggKzE0MjIsNiBAQCBnc3RfcGxheWVyX3NldF91cmkgKEdzdFBsYXllciAqIHNlbGYsIGNvbnN0IGdjaGFyICogdmFsKQorICAgZ19vYmplY3Rfc2V0IChzZWxmLCAidXJpIiwgdmFsLCBOVUxMKTsKKyB9CisgCistZ2Jvb2xlYW4KKy1nc3RfcGxheWVyX2lzX3BsYXlpbmcgKEdzdFBsYXllciAqIHNlbGYpCisteworLSAgZ2Jvb2xlYW4gdmFsOworLQorLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QTEFZRVIgKHNlbGYpLCBGQUxTRSk7CistCistICBnX29iamVjdF9nZXQgKHNlbGYsICJpcy1wbGF5aW5nIiwgJnZhbCwgTlVMTCk7CistCistICByZXR1cm4gdmFsOworLX0KKy0KKyBHc3RDbG9ja1RpbWUKKyBnc3RfcGxheWVyX2dldF9wb3NpdGlvbiAoR3N0UGxheWVyICogc2VsZikKKyB7CitkaWZmIC0tZ2l0IGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmggYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaAoraW5kZXggNjkzM2RkNy4uMzVmYjViYiAxMDA2NDQKKy0tLSBhL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oCisrKysgYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaAorQEAgLTkzLDggKzkzLDYgQEAgZ2NoYXIgKiAgICAgIGdzdF9wbGF5ZXJfZ2V0X3VyaSAgICAgICAgICAgICAgICAgICAgICAgKEdzdFBsYXllciAgICAqIHBsYXllcik7Cisgdm9pZCAgICAgICAgIGdzdF9wbGF5ZXJfc2V0X3VyaSAgICAgICAgICAgICAgICAgICAgICAgKEdzdFBsYXllciAgICAqIHBsYXllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICogdXJpKTsKKyAKKy1nYm9vbGVhbiAgICAgZ3N0X3BsYXllcl9pc19wbGF5aW5nICAgICAgICAgICAgICAgICAgICAoR3N0UGxheWVyICAgICogcGxheWVyKTsKKy0KKyBHc3RDbG9ja1RpbWUgZ3N0X3BsYXllcl9nZXRfcG9zaXRpb24gICAgICAgICAgICAgICAgICAoR3N0UGxheWVyICAgICogcGxheWVyKTsKKyBHc3RDbG9ja1RpbWUgZ3N0X3BsYXllcl9nZXRfZHVyYXRpb24gICAgICAgICAgICAgICAgICAoR3N0UGxheWVyICAgICogcGxheWVyKTsKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9maWxlY2hvb3Nlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZmlsZWNob29zZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JmMWIwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZmlsZWNob29zZXIucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Zyb20gNDNkNGIxOWFiNjExZDg0NDE1NmUyNmM0ODQwY2M1NGRkYjczYWUwMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitEYXRlOiBUaHUsIDI2IEZlYiAyMDE1IDE3OjE3OjA1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGd0ay1wbGF5OiBzaG93IGEgZmlsZSBjaG9vc2VyIGlmIG5vIFVSSXMgd2VyZSBwYXNzZWQKKworLS0tCisgZ3RrL2d0ay1wbGF5LmMgfCAgIDI4ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2d0ay9ndGstcGxheS5jIGIvZ3RrL2d0ay1wbGF5LmMKK2luZGV4IGYwMTUwNzcuLjk3NjZhNzIgMTAwNjQ0CistLS0gYS9ndGsvZ3RrLXBsYXkuYworKysrIGIvZ3RrL2d0ay1wbGF5LmMKK0BAIC0zMTksOCArMzE5LDMyIEBAIG1haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiogYXJndikKKyAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgcGxheWxpc3RzIGFuZCBzdHVmZgorICAgLyogUGFyc2UgdGhlIGxpc3Qgb2YgdGhlIGZpbGUgbmFtZXMgd2UgaGF2ZSB0byBwbGF5LiAqLworICAgaWYgKCFmaWxlX25hbWVzKSB7CistICAgIGdfcHJpbnQgKCJVc2FnZTogJXMgRklMRShzKXxVUkkocylcbiIsIEFQUF9OQU1FKTsKKy0gICAgcmV0dXJuIDE7CisrICAgIEd0a1dpZGdldCAqY2hvb3NlcjsKKysgICAgaW50IHJlczsKKysKKysgICAgY2hvb3NlciA9IGd0a19maWxlX2Nob29zZXJfZGlhbG9nX25ldyAoIlNlbGVjdCBmaWxlcyB0byBwbGF5IiwgTlVMTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9PUEVOLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfQ2FuY2VsIiwgR1RLX1JFU1BPTlNFX0NBTkNFTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX09wZW4iLCBHVEtfUkVTUE9OU0VfQUNDRVBULAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworKyAgICBnX29iamVjdF9zZXQgKGNob29zZXIsCisrICAgICAgICAgICAgICAgICAgImxvY2FsLW9ubHkiLCBGQUxTRSwKKysgICAgICAgICAgICAgICAgICAic2VsZWN0LW11bHRpcGxlIiwgVFJVRSwKKysgICAgICAgICAgICAgICAgICBOVUxMKTsKKysKKysgICAgcmVzID0gZ3RrX2RpYWxvZ19ydW4gKEdUS19ESUFMT0cgKGNob29zZXIpKTsKKysgICAgaWYgKHJlcyA9PSBHVEtfUkVTUE9OU0VfQUNDRVBUKSB7CisrICAgICAgR1NMaXN0ICpsOworKworKyAgICAgIGwgPSBndGtfZmlsZV9jaG9vc2VyX2dldF91cmlzIChHVEtfRklMRV9DSE9PU0VSIChjaG9vc2VyKSk7CisrICAgICAgd2hpbGUgKGwpIHsKKysgICAgICAgIHBsYXkudXJpcyA9IGdfbGlzdF9hcHBlbmQgKHBsYXkudXJpcywgbC0+ZGF0YSk7CisrICAgICAgICBsID0gZ19zbGlzdF9kZWxldGVfbGluayAobCwgbCk7CisrICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIGd0a193aWRnZXRfZGVzdHJveSAoY2hvb3Nlcik7CisgICB9IGVsc2UgeworICAgICBndWludCBpOworIAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2dzdC1wbGF5ZXIuZGVza3RvcCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZ3N0LXBsYXllci5kZXNrdG9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZDIwN2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2dzdC1wbGF5ZXIuZGVza3RvcApAQCAtMCwwICsxLDEwIEBACitbRGVza3RvcCBFbnRyeV0KK05hbWU9TWVkaWEgUGxheWVyCitDb21tZW50PUJhc2ljIG1lZGlhIHBsYXllcgorSWNvbj1hdWRpby1wbGF5ZXIKK1RyeUV4ZWM9Z3RrLXBsYXkKK0V4ZWM9Z3RrLXBsYXkKK1N0YXJ0dXBOb3RpZnk9dHJ1ZQorVGVybWluYWw9ZmFsc2UKK1R5cGU9QXBwbGljYXRpb24KK0NhdGVnb3JpZXM9R1RLO0F1ZGlvVmlkZW87CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2d0azIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2d0azIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNkMThiYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZ3RrMi5wYXRjaApAQCAtMCwwICsxLDcxIEBACitBcyB0aGUgcmVzdCBvZiBTYXRvIGlzIEdUSysgMiwgcGF0Y2ggZ3RrLXBsYXkgdG8gdXNlIEdUSysgMi4gIFdoZW4gdGhlIHJlc3Qgb2YKK1NhdG8gaGFzIGJlZW4gcG9ydGVkIHRvIEdUSysgMyB0aGlzIHBhdGNoIGNhbiBiZSBkcm9wcGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYjhhZjEzYi4uOTBhYjc0YyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjAsNyArNjAsNyBAQCBBQ19TVUJTVChHTElCX1BSRUZJWCkKKyBHU1RfUFJFRklYPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1wcmVmaXggZ3N0cmVhbWVyLTEuMGAiCisgQUNfU1VCU1QoR1NUX1BSRUZJWCkKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhHVEssIFtndGsrLTMuMF0sIFtoYXZlX2d0az0ieWVzIl0sIFtoYXZlX2d0az0ibm8iXSkKKytQS0dfQ0hFQ0tfTU9EVUxFUyhHVEssIFtndGsrLTIuMF0sIFtoYXZlX2d0az0ieWVzIl0sIFtoYXZlX2d0az0ibm8iXSkKKyBBTV9DT05ESVRJT05BTChIQVZFX0dUSywgdGVzdCAieCRoYXZlX2d0ayIgIT0gInhubyIpCisgCisgR09CSkVDVF9JTlRST1NQRUNUSU9OX0NIRUNLKFsxLjMxLjFdKQorZGlmZiAtLWdpdCBhL2d0ay9ndGstcGxheS5jIGIvZ3RrL2d0ay1wbGF5LmMKK2luZGV4IGYwMTUwNzcuLjk1NGQ2ZmIgMTAwNjQ0CistLS0gYS9ndGsvZ3RrLXBsYXkuYworKysrIGIvZ3RrL2d0ay1wbGF5LmMKK0BAIC0zNCw2ICszNCw0NiBAQCB0eXBlZGVmIHN0cnVjdAorICAgZ3Vsb25nIHNlZWtiYXJfdmFsdWVfY2hhbmdlZF9zaWduYWxfaWQ7CisgfSBHdGtQbGF5OworIAorKy8qIENvbXBhdCBzdHVicyAqLworK0d0a1dpZGdldCAqCisrZ3RrX2JveF9uZXcgKEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uLAorKyAgICAgICAgICAgICBnaW50IHNwYWNpbmcpCisreworKyAgc3dpdGNoIChvcmllbnRhdGlvbikgeworKyAgY2FzZSBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTDoKKysgICAgcmV0dXJuIGd0a19oYm94X25ldyAoRkFMU0UsIHNwYWNpbmcpOworKyAgY2FzZSBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUw6CisrICAgIHJldHVybiBndGtfdmJveF9uZXcgKEZBTFNFLCBzcGFjaW5nKTsKKysgIH0KKyt9CisrCisrR3RrV2lkZ2V0KgorK2d0a19idXR0b25fbmV3X2Zyb21faWNvbl9uYW1lIChjb25zdCBnY2hhciAqaWNvbl9uYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtJY29uU2l6ZSAgc2l6ZSkKKyt7CisrICBHdGtXaWRnZXQgKmJ1dHRvbjsKKysgIEd0a1dpZGdldCAqaW1hZ2U7CisrCisrICBpbWFnZSA9IGd0a19pbWFnZV9uZXdfZnJvbV9pY29uX25hbWUgKGljb25fbmFtZSwgc2l6ZSk7CisrICBidXR0b24gPSAgZ19vYmplY3RfbmV3IChHVEtfVFlQRV9CVVRUT04sCisrICAgICAgICAgICAgICAgICAgICAgICAgICJpbWFnZSIsIGltYWdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKysgIHJldHVybiBidXR0b247CisrfQorKworK0d0a1dpZGdldCAqCisrZ3RrX3NjYWxlX25ld193aXRoX3JhbmdlIChHdGtPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgbWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSBtYXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlIHN0ZXApCisreworKyAgc3dpdGNoIChvcmllbnRhdGlvbikgeworKyAgY2FzZSBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTDoKKysgICAgcmV0dXJuIGd0a19oc2NhbGVfbmV3X3dpdGhfcmFuZ2UgKG1pbiwgbWF4LCBzdGVwKTsKKysgIGNhc2UgR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMOgorKyAgICByZXR1cm4gZ3RrX3ZzY2FsZV9uZXdfd2l0aF9yYW5nZSAobWluLCBtYXgsIHN0ZXApOworKyAgfQorK30KKyAKKyBzdGF0aWMgdm9pZAorIHNldF90aXRsZSAoR3RrUGxheSAqIHBsYXksIGNvbnN0IGdjaGFyICogdGl0bGUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXJfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Y2ZiYmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyX2dpdC5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZPSJHU3RyZWFtZXIgcGxheWJhY2sgaGVscGVyIGxpYnJhcnkgYW5kIGV4YW1wbGVzIgorCitMSUNFTlNFID0gIkxHUEwtMi4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTk7bWQ1PTAzYWVjYTlkODI5NWY4MTE4MTc5MDkwNzVhMTVmZjY1IgorCitERVBFTkRTID0gImdsaWItMi4wIGdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGd0aysiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9zZHJvZWdlL2dzdC1wbGF5ZXIuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2ZpbGVjaG9vc2VyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2d0azIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vRml4LXBhdXNlLXBsYXkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQWRkLWVycm9yLXNpZ25hbC1lbWlzc2lvbi1mb3ItbWlzc2luZy1wbHVnaW5zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dzdC1wbGF5ZXIuZGVza3RvcCIKKworU1JDUkVWID0gIjUzODZjNWI5ODRkNDBlZjU0MzQ2NzNlZDYyMjA0ZTY5YWFmNTI2NDUiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGd0ay1kb2MgbGliX3BhY2thZ2UgcGtnY29uZmlnCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCXRvdWNoICR7U30vQ2hhbmdlTG9nCit9CisKK0VYVFJBX09FQ09ORiArPSAiYWNfY3ZfcGF0aF9WQUxHUklORD1ubyBhY19jdl9wYXRoX0dEQj1ubyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtbSAwNjQ0IC1EICR7V09SS0RJUn0vZ3N0LXBsYXllci5kZXNrdG9wICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9nc3QtcGxheWVyLmRlc2t0b3AKK30KKworRklMRVNfJHtQTn0tYmluICs9ICIke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8qLmRlc2t0b3AiCisKK1JERVBFTkRTXyR7UE59LWJpbiA9ICJnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXBsYXliYWNrIgorUlJFQ09NTUVORFNfJHtQTn0tYmluID0gImdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtbWV0YSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC1tZXRhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQtbWV0YSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUIiwgImNvbW1lcmNpYWwiLCAiZ3N0cmVhbWVyMS4wLWxpYmF2IiwgIiIsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUIiwgImNvbW1lcmNpYWwiLCAiZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS1tZXRhIiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLXBhY2thZ2UuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtcGFja2FnZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxYmUwNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLXBhY2thZ2UuaW5jCkBAIC0wLDAgKzEsNTggQEAKK1BBQ0tBR0VTUExJVEZVTkNTX3ByZXBlbmQgPSAiIHNwbGl0X2dzdHJlYW1lcjEwX3BhY2thZ2VzICIKK1BBQ0tBR0VTUExJVEZVTkNTX2FwcGVuZCA9ICIgc2V0X21ldGFwa2dfcmRlcGVuZHMgIgorCitweXRob24gc3BsaXRfZ3N0cmVhbWVyMTBfcGFja2FnZXMgKCkgeworICAgIGdzdF9saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2dzdHJlYW1lci0ke0xJQlZ9JykKKyAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwbHVnaW5fcG9zdGluc3QnLCBUcnVlKQorICAgIGdsaWJkaXIgPSBkLmdldFZhcignbGliZGlyJywgVHJ1ZSkKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGdsaWJkaXIsICdebGliKC4qKVwuc29cLionLCAnbGliJXMnLCAnZ3N0cmVhbWVyICVzIGxpYnJhcnknLCBleHRyYV9kZXBlbmRzPScnLCBhbGxvd19saW5rcz1UcnVlKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGdzdF9saWJkaXIsICdsaWJnc3QoLiopXC5zbyQnLCBkLmV4cGFuZCgnJHtQTn0tJXMnKSwgJ0dTdHJlYW1lciBwbHVnaW4gZm9yICVzJywgcG9zdGluc3Q9cG9zdGluc3QsIGV4dHJhX2RlcGVuZHM9JycpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgZ3N0X2xpYmRpciwgJ2xpYmdzdCguKilcLmxhJCcsIGQuZXhwYW5kKCcke1BOfS0lcy1kZXYnKSwgJ0dTdHJlYW1lciBwbHVnaW4gZm9yICVzIChkZXZlbG9wbWVudCBmaWxlcyknLCBleHRyYV9kZXBlbmRzPWQuZXhwYW5kKCcke1BOfS1kZXYnKSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBnc3RfbGliZGlyLCAnbGliZ3N0KC4qKVwuYSQnLCBkLmV4cGFuZCgnJHtQTn0tJXMtc3RhdGljZGV2JyksICdHU3RyZWFtZXIgcGx1Z2luIGZvciAlcyAoc3RhdGljIGRldmVsb3BtZW50IGZpbGVzKScsIGV4dHJhX2RlcGVuZHM9ZC5leHBhbmQoJyR7UE59LXN0YXRpY2RldicpKQorfQorCitweXRob24gc2V0X21ldGFwa2dfcmRlcGVuZHMgKCkgeworICAgIGltcG9ydCBvcworCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIG1ldGFwa2cgPSAgcG4gKyAnLW1ldGEnCisgICAgZC5zZXRWYXIoJ0FMTE9XX0VNUFRZXycgKyBtZXRhcGtnLCAiMSIpCisgICAgZC5zZXRWYXIoJ0ZJTEVTXycgKyBtZXRhcGtnLCAiIikKKyAgICBibGFja2xpc3QgPSBbIHBuLCBwbiArICctbG9jYWxlJywgcG4gKyAnLWRldicsIHBuICsgJy1kYmcnLCBwbiArICctZG9jJywgcG4gKyAnLW1ldGEnIF0KKyAgICBtZXRhcGtnX3JkZXBlbmRzID0gW10KKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXNbMTpdOgorICAgICAgICBpZiBub3QgcGtnIGluIGJsYWNrbGlzdCBhbmQgbm90IHBrZyBpbiBtZXRhcGtnX3JkZXBlbmRzIGFuZCBub3QgcGtnLmVuZHN3aXRoKCctZGV2JykgYW5kIG5vdCBwa2cuZW5kc3dpdGgoJy1kYmcnKSBhbmQgbm90IHBrZy5jb3VudCgnbG9jYWxlJykgYW5kIG5vdCBwa2cuY291bnQoJy1zdGF0aWNkZXYnKToKKyAgICAgICAgICAgICMgU2VlIGlmIHRoZSBwYWNrYWdlIGlzIGVtcHR5IGJ5IGxvb2tpbmcgYXQgdGhlIGNvbnRlbnRzIG9mIGl0cyBQS0dERVNUIHN1YmRpcmVjdG9yeS4gCisgICAgICAgICAgICAjIElmIHRoaXMgc3ViZGlyZWN0b3J5IGlzIGVtcHR5LCB0aGVuIHRoZSBwYWNrYWdlIGlzLgorICAgICAgICAgICAgIyBFbXB0eSBwYWNrYWdlcyBkbyBub3QgZ2V0IGFkZGVkIHRvIHRoZSBtZXRhIHBhY2thZ2UncyBSREVQRU5EUworICAgICAgICAgICAgcGtnZGlyID0gb3MucGF0aC5qb2luKHBrZ2Rlc3QsIHBrZykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBrZ2Rpcik6CisgICAgICAgICAgICAgICAgZGlyX2NvbnRlbnRzID0gb3MubGlzdGRpcihwa2dkaXIpIG9yIFtdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRpcl9jb250ZW50cyA9IFtdCisgICAgICAgICAgICBpc19lbXB0eSA9IGxlbihkaXJfY29udGVudHMpID09IDAKKyAgICAgICAgICAgIGlmIG5vdCBpc19lbXB0eToKKyAgICAgICAgICAgICAgICBtZXRhcGtnX3JkZXBlbmRzLmFwcGVuZChwa2cpCisgICAgZC5zZXRWYXIoJ1JERVBFTkRTXycgKyBtZXRhcGtnLCAnICcuam9pbihtZXRhcGtnX3JkZXBlbmRzKSkKKyAgICBkLnNldFZhcignREVTQ1JJUFRJT05fJyArIG1ldGFwa2csIHBuICsgJyBtZXRhIHBhY2thZ2UnKQorfQorCisjIGVhY2ggcGx1Z2luLWRldiBkZXBlbmRzIG9uIFBOLWRldiwgcGx1Z2luLXN0YXRpY2RldiBvbiBQTi1zdGF0aWNkZXYKKyMgc28gd2UgbmVlZCB0aGVtIGV2ZW4gd2hlbiBlbXB0eSAobGlrZSBpbiBnc3QtcGx1Z2lucy1nb29kIGNhc2UpCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorQUxMT1dfRU1QVFlfJHtQTn0tZGV2ID0gIjEiCitBTExPV19FTVBUWV8ke1BOfS1zdGF0aWNkZXYgPSAiMSIKKworUEFDS0FHRVMgKz0gIiR7UE59LWFwcHMgJHtQTn0tbWV0YSAke1BOfS1nbGliIgorRklMRVNfJHtQTn0tYXBwcyA9ICIke2JpbmRpcn0iCisKK1JERVBFTkRTXyR7UE59LWFwcHMgKz0gInBlcmwiCitSUkVDT01NRU5EU18ke1BOfSArPSAiJHtQTn0tbWV0YSIKKworRklMRVNfJHtQTn0gPSAiIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLSR7TElCVn0vLmRlYnVnIgorRklMRVNfJHtQTn0tZ2xpYiA9ICIke2RhdGFkaXJ9L2dsaWItMi4wIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGU2ZTk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LmluYwpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIkxpYmF2LWJhc2VkIEdTdHJlYW1lciAxLnggcGx1Z2luIgorU0VDVElPTiA9ICJtdWx0aW1lZGlhIgorTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrICYgKCAoR1BMdjIrICYgTEdQTHYyLjErKSB8IChHUEx2MysgJiBMR1BMdjMrKSApIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nc3RyZWFtZXIubmV0LyIKK0RFUEVORFMgPSAiZ3N0cmVhbWVyMS4wIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgemxpYiBiemlwMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKKyMgQ0FVVElPTjogVXNpbmcgdGhlIHN5c3RlbSBsaWJhdiBpcyBub3QgcmVjb21tZW5kZWQuIFNpbmNlIHRoZSBsaWJhdiBBUEkgaXMgY2hhbmdpbmcgYWxsIHRoZSB0aW1lLAorIyBjb21waWxhdGlvbiBlcnJvcnMgKGFuZCBvdGhlciwgbW9yZSBzdWJ0bGUgYnVncykgY2FuIGhhcHBlbi4gSXQgaXMgdXN1YWxseSBiZXR0ZXIgdG8gcmVseSBvbiB0aGUKKyMgbGliYXYgY29weSBpbmNsdWRlZCBpbiB0aGUgZ3N0LWxpYmF2IHBhY2thZ2UuCitQQUNLQUdFQ09ORklHID8/PSAiIG9yYyB5YXNtICIKK1BBQ0tBR0VDT05GSUdbbGliYXZdID0gIi0td2l0aC1zeXN0ZW0tbGliYXYsLGxpYmF2IgorUEFDS0FHRUNPTkZJR1tsZ3BsXSAgPSAiLS1lbmFibGUtbGdwbCwsIgorUEFDS0FHRUNPTkZJR1t5YXNtXSAgPSAiLS1lbmFibGUteWFzbSwtLWRpc2FibGUteWFzbSx5YXNtLW5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdbb3JjXSAgPSAiLS1lbmFibGUtb3JjLC0tZGlzYWJsZS1vcmMsb3JjIgorCisKK0dTVFJFQU1FUl8xXzBfREVCVUcgPz0gIi0tZGlzYWJsZS1kZWJ1ZyIKKworTElCQVZfRVhUUkFfQ09ORklHVVJFID0gIi0td2l0aC1saWJhdi1leHRyYS1jb25maWd1cmUiCitMSUJBVl9FWFRSQV9DT05GSUdVUkVfQ09NTU9OID0gXAorJyR7TElCQVZfRVhUUkFfQ09ORklHVVJFfT0iJHtMSUJBVl9FWFRSQV9DT05GSUdVUkVfQ09NTU9OX0FSR30iJworCitFWFRSQV9PRUNPTkYgPSAiJHtMSUJBVl9FWFRSQV9DT05GSUdVUkVfQ09NTU9OfSIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyouc28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5sYSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5hIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYvMDAwMS1EaXNhYmxlLXlhc20tZm9yLWxpYmF2LXdoZW4tZGlzYWJsZS15YXNtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LzAwMDEtRGlzYWJsZS15YXNtLWZvci1saWJhdi13aGVuLWRpc2FibGUteWFzbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDk5YWQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LzAwMDEtRGlzYWJsZS15YXNtLWZvci1saWJhdi13aGVuLWRpc2FibGUteWFzbS5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDU0YmJhMjI4ZWE1MmQwMWZkODQ5NDFkOTdiZTIzYzAzZjk4NjJiNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CitEYXRlOiBTYXQsIDYgQXByIDIwMTMgMDE6MjI6MjIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gRGlzYWJsZSB5YXNtIGZvciBsaWJhdiB3aGVuIC0tZGlzYWJsZS15YXNtCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CistLS0KKyBjb25maWd1cmUuYWMgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDIyZWRlODguLmVmM2MwNTAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTMwNSw2ICszMDUsMTIgQEAgZWxzZQorICAgICBlbWJsaWJhdl9jb25maWd1cmVfYXJncz0iJGVtYmxpYmF2X2NvbmZpZ3VyZV9hcmdzIC0tZW5hYmxlLWdwbCIKKyAgIGZpCisKKysgIEFDX0FSR19FTkFCTEUoeWFzbSwKKysgICAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXlhc21dLCBbZGlzYWJsZSB1c2Ugb2YgeWFzbSBhc3NlbWJsZXJdKV0pCisrICBpZiB0ZXN0ICJ4JGVuYWJsZV95YXNtIiA9ICJ4bm8iOyB0aGVuCisrICAgIGVtYmxpYmF2X2NvbmZpZ3VyZV9hcmdzPSIkZW1ibGliYXZfY29uZmlndXJlX2FyZ3MgLS1kaXNhYmxlLXlhc20iCisrICBmaQorKworICAgIyBpZiB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLCB0ZWxsIGxpYmF2IHNvCisgICBjYXNlICRob3N0IGluCisgICAgICAgKmFuZHJvaWQqKQorLS0gCisxLjguMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYvd29ya2Fyb3VuZC10by1idWlsZC1nc3QtbGliYXYtZm9yLWk1ODYtd2l0aC1nY2MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYvd29ya2Fyb3VuZC10by1idWlsZC1nc3QtbGliYXYtZm9yLWk1ODYtd2l0aC1nY2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NhZGVhNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdi93b3JrYXJvdW5kLXRvLWJ1aWxkLWdzdC1saWJhdi1mb3ItaTU4Ni13aXRoLWdjYy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitEZXNjcmlwdGlvbjogV29ya2Fyb3VuZCB0byBidWlsZCBsaWJhdiBmb3IgaTU4NiB3aXRoIGdjYyA0LjkuMiBieSBhdm9pZGluZyBtZW1zZXQKK0F1dGhvcjogQmVybmhhcmQg3GJlbGFja2VyIDxiZXJuaGFyZHVAdnItd2ViLmRlPgorCistLS0KK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc4MzA4MgorTGFzdC1VcGRhdGU6IDIwMTUtMDQtMjgKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworLS0tIGdzdC1saWJhdi0xLjQuNS5vcmlnL2dzdC1saWJzL2V4dC9saWJhdi9saWJhdmNvZGVjL2gyNjRfY2FiYWMuYworKysrIGdzdC1saWJhdi0xLjQuNS9nc3QtbGlicy9leHQvbGliYXYvbGliYXZjb2RlYy9oMjY0X2NhYmFjLmMKK0BAIC0yMDIwLDcgKzIwMjAsMTEgQEAgZGVjb2RlX2ludHJhX21iOgorICAgICAgICAgLy8gSW4gZGVibG9ja2luZywgdGhlIHF1YW50aXplciBpcyAwCisgICAgICAgICBoLT5jdXJfcGljLnFzY2FsZV90YWJsZVttYl94eV0gPSAwOworICAgICAgICAgLy8gQWxsIGNvZWZmcyBhcmUgcHJlc2VudAorLSAgICAgICAgbWVtc2V0KGgtPm5vbl96ZXJvX2NvdW50W21iX3h5XSwgMTYsIDQ4KTsKKysgICAgICAgIC8qbWVtc2V0KGgtPm5vbl96ZXJvX2NvdW50W21iX3h5XSwgMTYsIDQ4KTsqLworKyAgICAgICAgICAgIC8qIGF2b2lkaW5nIHRoaXMgbWVtc2V0IGJlY2F1c2UgaXQgbGVhZHMgYXQgbGVhc3Qgd2l0aCBnY2M0LjkuMiB0byBlcnJvcjogJ2FzbScgb3BlcmFuZCBoYXMgaW1wb3NzaWJsZSBjb25zdHJhaW50cyAqLworKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0ODsgaSsrKSB7CisrICAgICAgICAgICAgKCAodW5zaWduZWQgY2hhciopKGgtPm5vbl96ZXJvX2NvdW50W21iX3h5XSkgKSBbaV0gPSAxNjsKKysgICAgICAgIH0KKyAgICAgICAgIGgtPmN1cl9waWMubWJfdHlwZVttYl94eV0gPSBtYl90eXBlOworICAgICAgICAgaC0+bGFzdF9xc2NhbGVfZGlmZiA9IDA7CisgICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl8xLjQuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl8xLjQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2ZjN2VjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2XzEuNC41LmJiCkBAIC0wLDAgKzEsMjcgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLWxpYmF2LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9Njc2MmVkNDQyYjM4MjIzODdhNTFjOTJkOTI4ZWFkMGQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZXh0L2xpYmF2L2dzdGF2Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xODttZDU9YTc1MmMzNTI2N2Q4Mjc2ZmQ5Y2EzZGI2OTk0ZmNhOWMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0xJQ0VOU0U7bWQ1PWVhNjZlOTdhN2FjMWRiOTc4Y2YzNTI5MDY4YThjOTQ4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5HUEx2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuTEdQTHYyLjE7bWQ1PWJkN2E0NDMzMjBhZjhjODEyZTRjMThkMWI3OWRmMDA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkxHUEx2MzttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LWxpYmF2L2dzdC1saWJhdi0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly8wMDAxLURpc2FibGUteWFzbS1mb3ItbGliYXYtd2hlbi1kaXNhYmxlLXlhc20ucGF0Y2ggXAorICAgIGZpbGU6Ly93b3JrYXJvdW5kLXRvLWJ1aWxkLWdzdC1saWJhdi1mb3ItaTU4Ni13aXRoLWdjYy5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiZjQ5MjJhNDZhZGJjYmU3YmQwMTMzMWZmNWRjNzk3OWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjA1YzYyNjI0NjA0ZjNiYjVjODcwODQ0Y2MxZjI3MTE3NzljYzUzM2IwMDRjMmFhMWQ4YzBkNTg1NTdhZmJiYyIKKworTElCQVZfRVhUUkFfQ09ORklHVVJFX0NPTU1PTl9BUkcgPSAiLS10YXJnZXQtb3M9bGludXggXAorICAtLWNjPScke0NDfScgLS1hcz0nJHtDQ30nIC0tbGQ9JyR7Q0N9JyAtLW5tPScke05NfScgLS1hcj0nJHtBUn0nIFwKKyAgLS1yYW5saWI9JyR7UkFOTElCfScgXAorICAke0dTVFJFQU1FUl8xXzBfREVCVUd9IFwKKyAgLS1jcm9zcy1wcmVmaXg9JyR7SE9TVF9QUkVGSVh9JyIKKworUyA9ICIke1dPUktESVJ9L2dzdC1saWJhdi0ke1BWfSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2X2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYxYjg3ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl9naXQuYmIKQEAgLTAsMCArMSwyOSBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIGdzdHJlYW1lcjEuMC1saWJhdi5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2V4dC9saWJhdi9nc3Rhdi5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTg7bWQ1PWE3NTJjMzUyNjdkODI3NmZkOWNhM2RiNjk5NGZjYTljIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9MSUNFTlNFO21kNT0yM2E1NGY1OWI4MjU3MmMyMDNhNTU5MzQ2ZTg5ZWQ1NyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5HUEx2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuR1BMdjM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkxHUEx2Mi4xO21kNT1iZDdhNDQzMzIwYWY4YzgxMmU0YzE4ZDFiNzlkZjAwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5MR1BMdjM7bWQ1PWU2YTYwMGZkNWUxZDljYmRlMmQ5ODM2ODAyMzNhZDAyIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtbGliYXY7YnJhbmNoPW1hc3RlciIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ1JFViA9ICIxMjcyMDJkNmY2NTU4NDg5MWRhYmY5MmJlMDMxZjBkMTcwYjBlN2YxIgorCitMSUJBVl9FWFRSQV9DT05GSUdVUkVfQ09NTU9OX0FSRyA9ICItLXRhcmdldC1vcz1saW51eCBcCisgIC0tY2M9JyR7Q0N9JyAtLWFzPScke0NDfScgLS1sZD0nJHtDQ30nIC0tbm09JyR7Tk19JyAtLWFyPScke0FSfScgXAorICAke0dTVFJFQU1FUl8xXzBfREVCVUd9IFwKKyAgLS1jcm9zcy1wcmVmaXg9JyR7SE9TVF9QUkVGSVh9JyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJY2QgJHtTfQorCS4vYXV0b2dlbi5zaCAtLW5vY29uZmlndXJlCisJY2QgJHtCfQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbWV0YS1iYXNlLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWYxMGMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZS5iYgpAQCAtMCwwICsxLDY1IEBACitERVNDUklQVElPTiA9ICJHc3RyZWFtZXIxLjAgcGFja2FnZSBncm91cHMiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworQ09NTUVSQ0lBTF9QTFVHSU5TID0gIiR7Q09NTUVSQ0lBTF9BVURJT19QTFVHSU5TfSAke0NPTU1FUkNJQUxfVklERU9fUExVR0lOU30iCitERVBFTkRTX1VHTFk9IiR7QCdnc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5JyBpZiAndWdseScgaW4gQ09NTUVSQ0lBTF9QTFVHSU5TLnNwbGl0KCctJykgZWxzZSAnJ30iCitERVBFTkRTX0JBRD0iJHtAJ2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCcgaWYgJ2JhZCcgaW4gQ09NTUVSQ0lBTF9QTFVHSU5TLnNwbGl0KCctJykgZWxzZSAnJ30iCitERVBFTkRTID0gImdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QgJHtERVBFTkRTX1VHTFl9ICR7REVQRU5EU19CQUR9IgorCitQQUNLQUdFUyA9ICJcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZSBcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEteDExLWJhc2UgXAorICAgIGdzdHJlYW1lcjEuMC1tZXRhLWF1ZGlvIFwKKyAgICBnc3RyZWFtZXIxLjAtbWV0YS1kZWJ1ZyBcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtdmlkZW8iCisKK0FMTE9XX0VNUFRZX2dzdHJlYW1lcjEuMC1tZXRhLWJhc2UgPSAiMSIKK0FMTE9XX0VNUFRZX2dzdHJlYW1lcjEuMC1tZXRhLXgxMS1iYXNlID0gIjEiCitBTExPV19FTVBUWV9nc3RyZWFtZXIxLjAtbWV0YS1hdWRpbyA9ICIxIgorQUxMT1dfRU1QVFlfZ3N0cmVhbWVyMS4wLW1ldGEtZGVidWcgPSAiMSIKK0FMTE9XX0VNUFRZX2dzdHJlYW1lcjEuMC1tZXRhLXZpZGVvID0gIjEiCisKK1JERVBFTkRTX2dzdHJlYW1lcjEuMC1tZXRhLWJhc2UgPSAiXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2dzdHJlYW1lcjEuMC1tZXRhLXgxMS1iYXNlJywgJycsIGQpfSBcCisgICAgZ3N0cmVhbWVyMS4wIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXBsYXliYWNrIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLWdpbyBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1hbHNhIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXZvbHVtZSBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1hdWRpb2NvbnZlcnQgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtYXVkaW9yZXNhbXBsZSBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS10eXBlZmluZGZ1bmN0aW9ucyBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS12aWRlb3NjYWxlIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXZpZGVvY29udmVydCBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC1hdXRvZGV0ZWN0IFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLXNvdXBodHRwc3JjIgorCitSUkVDT01NRU5EU19nc3RyZWFtZXIxLjAtbWV0YS14MTEtYmFzZSA9ICJcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS14aW1hZ2VzaW5rIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXh2aW1hZ2VzaW5rIgorCitSREVQRU5EU19nc3RyZWFtZXIxLjAtbWV0YS1hdWRpbyA9ICJcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZSBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS12b3JiaXMgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2Utb2dnIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLXdhdnBhcnNlIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLWZsYWMgXAorICAgICR7Q09NTUVSQ0lBTF9BVURJT19QTFVHSU5TfSIKKworUkRFUEVORFNfZ3N0cmVhbWVyMS4wLW1ldGEtZGVidWcgPSAiXAorICAgIGdzdHJlYW1lcjEuMC1tZXRhLWJhc2UgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QtZGVidWcgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtYXVkaW90ZXN0c3JjIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXZpZGVvdGVzdHNyYyIKKworUkRFUEVORFNfZ3N0cmVhbWVyMS4wLW1ldGEtdmlkZW8gPSAiXAorICAgIGdzdHJlYW1lcjEuMC1tZXRhLWJhc2UgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QtYXZpIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLW1hdHJvc2thIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXRoZW9yYSBcCisgICAgJHtDT01NRVJDSUFMX1ZJREVPX1BMVUdJTlN9IgorCitSUkVDT01NRU5EU19nc3RyZWFtZXIxLjAtbWV0YS12aWRlbyA9ICJcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtYXVkaW8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXguaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OTg5MDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214LmluYwpAQCAtMCwwICsxLDQyIEBACitTVU1NQVJZID0gIk9wZW5NQVggSUwgcGx1Z2lucyBmb3IgR1N0cmVhbWVyIgorU0VDVElPTiA9ICJtdWx0aW1lZGlhIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ3N0cmVhbWVyLm5ldC8iCitERVBFTkRTID0gImdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCIKK1JERVBFTkRTXyR7UE59ID0gImxpYm9teGlsIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCithY3BhdGhzID0gIi1JICR7U30vY29tbW9uL200IC1JICR7U30vbTQiCisKK1BSID0gInIxIgorCitHU1RSRUFNRVJfMV8wX09NWF9UQVJHRVQgPz0gImJlbGxhZ2lvIgorR1NUUkVBTUVSXzFfMF9PTVhfQ09SRV9OQU1FID89ICIke2xpYmRpcn0vbGlib214aWwtYmVsbGFnaW8uc28uMCIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtdmFsZ3JpbmQgLS13aXRoLW9teC10YXJnZXQ9JHtHU1RSRUFNRVJfMV8wX09NWF9UQVJHRVR9IgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIG9teF90YXJnZXQgPSBkLmdldFZhcigiR1NUUkVBTUVSXzFfMF9PTVhfVEFSR0VUIiwgVHJ1ZSkKKyAgICBpZiBvbXhfdGFyZ2V0IGluIFsnZ2VuZXJpYycsICdiZWxsYWdpbyddOgorICAgICAgICBzcmNkaXIgPSBkLmdldFZhcigiUyIsIFRydWUpCisgICAgICAgICMgQmVsbGFnaW8gaGVhZGVycyBhcmUgaW5jb21wbGV0ZSAodGhleSBhcmUgbWlzc2luZyB0aGUgT01YX1ZFUlNJT05fTUFKT1IsIworICAgICAgICAjIE9NWF9WRVJTSU9OX01JTk9SLCBPTVhfVkVSU0lPTl9SRVZJU0lPTiwgYW5kIE9NWF9WRVJTSU9OX1NURVAgbWFjcm9zKTsKKyAgICAgICAgIyBhcHBlbmRpbmcgYSBkaXJlY3RvcnkgcGF0aCB0byBnc3Qtb214JyBpbnRlcm5hbCBPcGVuTUFYIElMIGhlYWRlcnMgZml4ZXMgdGhpcworICAgICAgICBkLmFwcGVuZFZhcigiQ0ZMQUdTIiwgIiAtSSVzL29teC9vcGVubWF4IiAlIHNyY2RpcikKKyAgICBlbGlmIG9teF90YXJnZXQgPT0gInJwaSI6CisgICAgICAgICMgRGVkaWNhdGVkIFJhc3BiZXJyeSBQaSBPcGVuTUFYIElMIHN1cHBvcnQgbWFrZXMgdGhpcyBwYWNrYWdlIG1hY2hpbmUgc3BlY2lmaWMKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VfQVJDSCIsIGQuZ2V0VmFyKCJNQUNISU5FX0FSQ0giLCBUcnVlKSkKK30KKworc2V0X29teF9jb3JlX25hbWUoKSB7CisJc2VkIC1pIC1lICJzO15jb3JlLW5hbWU9Lio7Y29yZS1uYW1lPSR7R1NUUkVBTUVSXzFfMF9PTVhfQ09SRV9OQU1FfTsiICIke0R9JHtzeXNjb25mZGlyfS94ZGcvZ3N0b214LmNvbmYiCit9Citkb19pbnN0YWxsW3Bvc3RmdW5jc10gKz0gIiBzZXRfb214X2NvcmVfbmFtZSAiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLnNvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8uZGVidWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyoubGEiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyouYSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teC8wMDAxLW9teC1maXhlZC10eXBlLWVycm9yLWluLXByaW50Zi1jYWxsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teC8wMDAxLW9teC1maXhlZC10eXBlLWVycm9yLWluLXByaW50Zi1jYWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MjhhYzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214LzAwMDEtb214LWZpeGVkLXR5cGUtZXJyb3ItaW4tcHJpbnRmLWNhbGwucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBmNjI5ZTA0MWU5ZjY3OGZjZDg2YWQ3NjRhMTUxMTdkZmY2M2MyNzFjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgorRGF0ZTogU2F0LCAyNyBBcHIgMjAxMyAwMjo1MDoyNSArMDIwMAorU3ViamVjdDogW1BBVENIXSBvbXg6IGZpeGVkIHR5cGUgZXJyb3IgaW4gcHJpbnRmIGNhbGwKKworJXp1IGV4cGVjdHMgc2l6ZV90CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk5MDA4XQorCitTaWduZWQtb2ZmLWJ5OiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CistLS0KKyBvbXgvZ3N0b214LmMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9vbXgvZ3N0b214LmMgYi9vbXgvZ3N0b214LmMKK2luZGV4IGEyOTQ1ZWQuLjFlY2E3Y2MgMTAwNjQ0CistLS0gYS9vbXgvZ3N0b214LmMKKysrKyBiL29teC9nc3RvbXguYworQEAgLTE2MzAsNyArMTYzMCw3IEBAIGdzdF9vbXhfcG9ydF9hbGxvY2F0ZV9idWZmZXJzX3VubG9ja2VkIChHc3RPTVhQb3J0ICogcG9ydCwKKyAKKyAgIEdTVF9JTkZPX09CSkVDVCAoY29tcC0+cGFyZW50LAorICAgICAgICJBbGxvY2F0aW5nICVkIGJ1ZmZlcnMgb2Ygc2l6ZSAlenUgZm9yICVzIHBvcnQgJXUiLCBuLAorLSAgICAgIHBvcnQtPnBvcnRfZGVmLm5CdWZmZXJTaXplLCBjb21wLT5uYW1lLCAoZ3VpbnQpIHBvcnQtPmluZGV4KTsKKysgICAgICAoc2l6ZV90KSAocG9ydC0+cG9ydF9kZWYubkJ1ZmZlclNpemUpLCBjb21wLT5uYW1lLCAoZ3VpbnQpIHBvcnQtPmluZGV4KTsKKyAKKyAgIGlmICghcG9ydC0+YnVmZmVycykKKyAgICAgcG9ydC0+YnVmZmVycyA9IGdfcHRyX2FycmF5X3NpemVkX25ldyAobik7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teF8xLjIuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXhfMS4yLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU3YzkxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXhfMS4yLjAuYmIKQEAgLTAsMCArMSwxMiBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtb214LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9vbXgvZ3N0b214Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9NWM4ZTFmY2EzMjcwNDQ4OGU3NmQyYmE5ZGRmYTkzNWYiCisKK1NSQ19VUkkgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1vbXgvZ3N0LW9teC0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkMjRlOGMwMTUzYzM1ZGZlZmVlM2UyNmIxYzJjMzVmOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwYjQ4NzQ5NjFlNjQ4OGFkOWU1ODA4MTE0YmQ0ODZlYTk4MWM1NDA5MDcyNjJjYWFiMTQxOTM1NWZkODJkNzQ1IgorCitTID0gIiR7V09SS0RJUn0vZ3N0LW9teC0ke1BWfSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWM4NDY2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXhfZ2l0LmJiCkBAIC0wLDAgKzEsMjYgQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBnc3RyZWFtZXIxLjAtb214LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9vbXgvZ3N0b214Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9NWM4ZTFmY2EzMjcwNDQ4OGU3NmQyYmE5ZGRmYTkzNWYiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LW9teDticmFuY2g9bWFzdGVyO25hbWU9Z3N0LW9teCBcCisgICAgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2NvbW1vbjtkZXN0c3VmZml4PWdpdC9jb21tb247YnJhbmNoPW1hc3RlcjtuYW1lPWNvbW1vbiBcCisgICAgZmlsZTovLzAwMDEtb214LWZpeGVkLXR5cGUtZXJyb3ItaW4tcHJpbnRmLWNhbGwucGF0Y2ggXAorICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDUkVWX2dzdC1vbXggPSAiYTJkYjc2YjA0OGRiMjc4ZWYwYWE3OThlMTA2Yjc1OTQyNjRlMDZjMCIKK1NSQ1JFVl9jb21tb24gPSAiNWVkY2Q4NTdiMjEwN2NkOGI3OGMxNjIzMmRkMTA4Nzc1MTNlYzE1NyIKKworU1JDUkVWX0ZPUk1BVCA9ICJnc3Qtb214IgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwljZCAke1N9CisJLi9hdXRvZ2VuLnNoIC0tbm9jb25maWd1cmUKKwljZCAke0J9Cit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZWRiNjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jCkBAIC0wLDAgKzEsMTM1IEBACityZXF1aXJlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLmluYworCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisgJiBMR1BMdjIuMSsgIgorCitERVBFTkRTICs9ICJnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGxpYnBuZyBqcGVnIgorCitTID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtYmFkLSR7UFZ9IgorCitTUkNfVVJJICs9ICJmaWxlOi8vY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlic3NoMi5wYXRjaCBcCisgICAgICAgICAgICIKKworaW5oZXJpdCBnZXR0ZXh0IGJsdWV0b290aAorCisjIG9wZW5nbCBwYWNrYWdlY29uZmlnIGZhY3RvcmVkIG91dCB0byBtYWtlIGl0IGVhc3kgZm9yIGRpc3Ryb3MKKyMgYW5kIEJTUCBsYXllcnMgdG8gcGljayBlaXRoZXIgKGRlc2t0b3ApIG9wZW5nbCwgZ2xlczIsIG9yIG5vIEdMCitQQUNLQUdFQ09ORklHX0dMID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdnbGVzMicsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIgXAorICAgICR7UEFDS0FHRUNPTkZJR19HTH0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICd3YXlsYW5kJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnYmx1ZXonLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2RpcmVjdGZiJywgJ2RpcmVjdGZiJywgJycsIGQpfSBcCisgICAgb3JjIGN1cmwgdXZjaDI2NCBuZW9uIHNuZGZpbGUgXAorICAgIGhscyBzYmMgZGFzaCBiejIgc21vb3Roc3RyZWFtaW5nIFwKKyAgICAiCisKKyMgZGFzaCA9IER5bmFtaWMgQWRhcHRpdmUgU3RyZWFtaW5nIG92ZXIgSFRUUAorUEFDS0FHRUNPTkZJR1thc3NyZW5kZXJdICAgICAgID0gIi0tZW5hYmxlLWFzc3JlbmRlciwtLWRpc2FibGUtYXNzcmVuZGVyLGxpYmFzcyIKK1BBQ0tBR0VDT05GSUdbY3VybF0gICAgICAgICAgICA9ICItLWVuYWJsZS1jdXJsLC0tZGlzYWJsZS1jdXJsLGN1cmwiCitQQUNLQUdFQ09ORklHW2dsZXMyXSAgICAgICAgICAgPSAiLS1lbmFibGUtZ2xlczIsLS1kaXNhYmxlLWdsZXMyLHZpcnR1YWwvbGliZ2xlczIiCitQQUNLQUdFQ09ORklHW29wZW5nbF0gICAgICAgICAgPSAiLS1lbmFibGUtb3BlbmdsLC0tZGlzYWJsZS1vcGVuZ2wsdmlydHVhbC9saWJnbCBsaWJnbHUiCitQQUNLQUdFQ09ORklHW2ZhYWNdICAgICAgICAgICAgPSAiLS1lbmFibGUtZmFhYywtLWRpc2FibGUtZmFhYyxmYWFjIgorUEFDS0FHRUNPTkZJR1tmYWFkXSAgICAgICAgICAgID0gIi0tZW5hYmxlLWZhYWQsLS1kaXNhYmxlLWZhYWQsZmFhZDIiCitQQUNLQUdFQ09ORklHW2xpYm1tc10gICAgICAgICAgPSAiLS1lbmFibGUtbGlibW1zLC0tZGlzYWJsZS1saWJtbXMsbGlibW1zIgorUEFDS0FHRUNPTkZJR1ttb2RwbHVnXSAgICAgICAgID0gIi0tZW5hYmxlLW1vZHBsdWcsLS1kaXNhYmxlLW1vZHBsdWcsbGlibW9kcGx1ZyIKK1BBQ0tBR0VDT05GSUdbbXBnMTIzXSAgICAgICAgICA9ICItLWVuYWJsZS1tcGcxMjMsLS1kaXNhYmxlLW1wZzEyMyxtcGcxMjMiCitQQUNLQUdFQ09ORklHW29wdXNdICAgICAgICAgICAgPSAiLS1lbmFibGUtb3B1cywtLWRpc2FibGUtb3B1cyxsaWJvcHVzIgorUEFDS0FHRUNPTkZJR1tmbGl0ZV0gICAgICAgICAgID0gIi0tZW5hYmxlLWZsaXRlLC0tZGlzYWJsZS1mbGl0ZSxmbGl0ZS1hbHNhIgorUEFDS0FHRUNPTkZJR1tvcGVuY3ZdICAgICAgICAgID0gIi0tZW5hYmxlLW9wZW5jdiwtLWRpc2FibGUtb3BlbmN2LG9wZW5jdiIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gICAgICAgICA9ICItLWVuYWJsZS13YXlsYW5kIC0tZW5hYmxlLWVnbCwtLWRpc2FibGUtd2F5bGFuZCAtLWRpc2FibGUtZWdsLHdheWxhbmQgdmlydHVhbC9lZ2wiCitQQUNLQUdFQ09ORklHW3V2Y2gyNjRdICAgICAgICAgPSAiLS1lbmFibGUtdXZjaDI2NCwtLWRpc2FibGUtdXZjaDI2NCxsaWJ1c2IxIHVkZXYiCitQQUNLQUdFQ09ORklHW2RpcmVjdGZiXSAgICAgICAgPSAiLS1lbmFibGUtZGlyZWN0ZmIsLS1kaXNhYmxlLWRpcmVjdGZiLGRpcmVjdGZiIgorUEFDS0FHRUNPTkZJR1tuZW9uXSAgICAgICAgICAgID0gIi0tZW5hYmxlLW5lb24sLS1kaXNhYmxlLW5lb24sbmVvbiIKK1BBQ0tBR0VDT05GSUdbb3BlbmFsXSAgICAgICAgICA9ICItLWVuYWJsZS1vcGVuYWwsLS1kaXNhYmxlLW9wZW5hbCxvcGVuYWwtc29mdCIKK1BBQ0tBR0VDT05GSUdbaGxzXSAgICAgICAgICAgICA9ICItLWVuYWJsZS1obHMsLS1kaXNhYmxlLWhscyxnbnV0bHMiCitQQUNLQUdFQ09ORklHW3NiY10gICAgICAgICAgICAgPSAiLS1lbmFibGUtc2JjLC0tZGlzYWJsZS1zYmMsc2JjIgorUEFDS0FHRUNPTkZJR1tkYXNoXSAgICAgICAgICAgID0gIi0tZW5hYmxlLWRhc2gsLS1kaXNhYmxlLWRhc2gsbGlieG1sMiIKK1BBQ0tBR0VDT05GSUdbYnoyXSAgICAgICAgICAgICA9ICItLWVuYWJsZS1iejIsLS1kaXNhYmxlLWJ6MixiemlwMiIKK1BBQ0tBR0VDT05GSUdbZmx1aWRzeW50aF0gICAgICA9ICItLWVuYWJsZS1mbHVpZHN5bnRoLC0tZGlzYWJsZS1mbHVpZHN5bnRoLGZsdWlkc3ludGgiCitQQUNLQUdFQ09ORklHW3NjaHJvZWRpbmdlcl0gICAgPSAiLS1lbmFibGUtc2Nocm8sLS1kaXNhYmxlLXNjaHJvLHNjaHJvZWRpbmdlciIKK1BBQ0tBR0VDT05GSUdbc21vb3Roc3RyZWFtaW5nXSA9ICItLWVuYWJsZS1zbW9vdGhzdHJlYW1pbmcsLS1kaXNhYmxlLXNtb290aHN0cmVhbWluZyxsaWJ4bWwyIgorUEFDS0FHRUNPTkZJR1tibHVlel0gICAgICAgICAgID0gIi0tZW5hYmxlLWJsdWV6LC0tZGlzYWJsZS1ibHVleiwke0JMVUVafSIKK1BBQ0tBR0VDT05GSUdbcnN2Z10gICAgICAgICAgICA9ICItLWVuYWJsZS1yc3ZnLC0tZGlzYWJsZS1yc3ZnLGxpYnJzdmciCitQQUNLQUdFQ09ORklHW3NuZGZpbGVdICAgICAgICAgPSAiLS1lbmFibGUtc25kZmlsZSwtLWRpc2FibGUtc25kZmlsZSxsaWJzbmRmaWxlMSIKK1BBQ0tBR0VDT05GSUdbd2VicF0gICAgICAgICAgICA9ICItLWVuYWJsZS13ZWJwLC0tZGlzYWJsZS13ZWJwLGxpYndlYnAiCitQQUNLQUdFQ09ORklHW3J0bXBdICAgICAgICAgICAgPSAiLS1lbmFibGUtcnRtcCwtLWRpc2FibGUtcnRtcCxydG1wZHVtcCIKK1BBQ0tBR0VDT05GSUdbbGlic3NoMl0gICAgICAgICA9ICItLWVuYWJsZS1saWJzc2gyLC0tZGlzYWJsZS1saWJzc2gyLGxpYnNzaDIiCisKKyMgdGhlc2UgcGx1Z2lucyBoYXZlIG5vdCBiZWVuIHBvcnRlZCB0byAxLjAgKHlldCk6CisjICAgZGlyZWN0ZHJhdyB2Y2QgYXBleHNpbmsgZGMxMzk0IGx2MiBsaW5zeXMgbXVzZXBhY2sgbXl0aHR2CisjICAgbmFzIHRpbWlkaXR5IHRlbGV0ZXh0ZGVjIHNkbCB4dmlkIHdpbmluZXQgYWNtIGdzZXR0aW5ncworIyAgIHNuZGlvIHF0d3JhcHBlciBjZHhhcGFyc2UgZGNjcCBmYWNlb3ZlcmxheSBoZHZwYXJzZSB0dGEKKyMgICBtdmUgbnV2ZGVtdXggb3N4X3ZpZGVvIHBhdGNoZGV0ZWN0IHF1aWNrdGltZSByZWFsIHNkaQorIyAgIHZpZGVvbWVhc3VyZSBnc2V0dGluZ3MKKworIyB0aGVzZSBwbHVnaW5zIGhhdmUgbm8gY29ycmVzcG9uZGluZyBsaWJyYXJ5IGluIE9FLWNvcmUgb3IgbWV0YS1vcGVuZW1iZWRkZWQ6CisjICAgb3Blbm5pMiB3aW5rcyBkaXJlY3QzZCBkaXJlY3RkcmF3IGRpcmVjdHNvdW5kIHdpbnNjcmVlbmNhcCBvc3hfdmlkZW8KKyMgICBhcHBsZV9tZWRpYSBhbmRyb2lkX21lZGlhIGF2YyBjaHJvbWFwcmludCBkYWFsYSBkdHMgZ21lIGdzbSBrYXRlIGxhZHNwYSBtaW1pYworIyAgIG1wZWcyZW5jIG1wbGV4IG9mYSBvcGVuanBlZyBvcGVuc2xlcyBwdnIgcmVzaW5kdmQgcnRtcCBzb3VuZHRvdWNoIHNwYW5kc3Agc3BjCisjICAgc3J0cCB2ZHBhdSB2b2FhY2VuYyB2b2FtcndiZW5jIHdhc2FwaSB6YmFyCisKK0VYVFJBX09FQ09ORiArPSAiIFwKKyAgICAtLWVuYWJsZS1kdmIgXAorICAgIC0tZW5hYmxlLXNobSBcCisgICAgLS1lbmFibGUtZmJkZXYgXAorICAgIC0tZW5hYmxlLWRlY2tsaW5rIFwKKyAgICAtLWRpc2FibGUtYWNtIFwKKyAgICAtLWRpc2FibGUtYW5kcm9pZF9tZWRpYSBcCisgICAgLS1kaXNhYmxlLWFwZXhzaW5rIFwKKyAgICAtLWRpc2FibGUtYXBwbGVfbWVkaWEgXAorICAgIC0tZGlzYWJsZS1hdmMgXAorICAgIC0tZGlzYWJsZS1jaHJvbWFwcmludCBcCisgICAgLS1kaXNhYmxlLWNvY29hIFwKKyAgICAtLWRpc2FibGUtZGFhbGEgXAorICAgIC0tZGlzYWJsZS1kYzEzOTQgXAorICAgIC0tZGlzYWJsZS1kaXJlY3QzZCBcCisgICAgLS1kaXNhYmxlLWRpcmVjdGRyYXcgXAorICAgIC0tZGlzYWJsZS1kaXJlY3Rzb3VuZCBcCisgICAgLS1kaXNhYmxlLWR0cyBcCisgICAgLS1kaXNhYmxlLWdtZSBcCisgICAgLS1kaXNhYmxlLWdzZXR0aW5ncyBcCisgICAgLS1kaXNhYmxlLWdzbSBcCisgICAgLS1kaXNhYmxlLWthdGUgXAorICAgIC0tZGlzYWJsZS1sYWRzcGEgXAorICAgIC0tZGlzYWJsZS1saW5zeXMgXAorICAgIC0tZGlzYWJsZS1sdjIgXAorICAgIC0tZGlzYWJsZS1taW1pYyBcCisgICAgLS1kaXNhYmxlLW1wZWcyZW5jIFwKKyAgICAtLWRpc2FibGUtbXBsZXggXAorICAgIC0tZGlzYWJsZS1tdXNlcGFjayBcCisgICAgLS1kaXNhYmxlLW15dGh0diBcCisgICAgLS1kaXNhYmxlLW5hcyBcCisgICAgLS1kaXNhYmxlLW9mYSBcCisgICAgLS1kaXNhYmxlLW9wZW5qcGVnIFwKKyAgICAtLWRpc2FibGUtb3BlbnNsZXMgXAorICAgIC0tZGlzYWJsZS1vc3hfdmlkZW8gXAorICAgIC0tZGlzYWJsZS1wdnIgXAorICAgIC0tZGlzYWJsZS1xdWlja3RpbWUgXAorICAgIC0tZGlzYWJsZS1yZXNpbmR2ZCBcCisgICAgLS1kaXNhYmxlLXNkbCBcCisgICAgLS1kaXNhYmxlLXNkbHRlc3QgXAorICAgIC0tZGlzYWJsZS1zbmRpbyBcCisgICAgLS1kaXNhYmxlLXNvdW5kdG91Y2ggXAorICAgIC0tZGlzYWJsZS1zcGFuZHNwIFwKKyAgICAtLWRpc2FibGUtc3BjIFwKKyAgICAtLWRpc2FibGUtc3J0cCBcCisgICAgLS1kaXNhYmxlLXRlbGV0ZXh0ZGVjIFwKKyAgICAtLWRpc2FibGUtdGltaWRpdHkgXAorICAgIC0tZGlzYWJsZS12Y2QgXAorICAgIC0tZGlzYWJsZS12ZHBhdSBcCisgICAgLS1kaXNhYmxlLXZvYWFjZW5jIFwKKyAgICAtLWRpc2FibGUtdm9hbXJ3YmVuYyBcCisgICAgLS1kaXNhYmxlLXdhc2FwaSBcCisgICAgLS1kaXNhYmxlLXdpbGRtaWRpIFwKKyAgICAtLWRpc2FibGUtd2luaW5ldCBcCisgICAgLS1kaXNhYmxlLXdpbnNjcmVlbmNhcCBcCisgICAgLS1kaXNhYmxlLXh2aWQgXAorICAgIC0tZGlzYWJsZS16YmFyIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIi0tZGlzYWJsZS15YWRpZiIsICIiLCBkKX0gXAorICAgICIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK0ZJTEVTX2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC1vcGVuY3YgKz0gIiR7ZGF0YWRpcn0vZ3N0LXBsdWdpbnMtYmFkLzEuMC9vcGVuY3YqIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1nbC1kby1ub3QtY2hlY2stZm9yLUdMLUdMVS1FR0wtR0xFUzItbGlicy1pZi1kaXNhYmxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDEtZ2wtZG8tbm90LWNoZWNrLWZvci1HTC1HTFUtRUdMLUdMRVMyLWxpYnMtaWYtZGlzYWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDJhMzJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDEtZ2wtZG8tbm90LWNoZWNrLWZvci1HTC1HTFUtRUdMLUdMRVMyLWxpYnMtaWYtZGlzYWJsZS5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tIGRlYmEwZGE0NWVjODIxMjA5YTdlZDE0OGE0NTIxZDU2MmU2NTEyY2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CitEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDE0OjQ3OjI1ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGdsOiBkbyBub3QgY2hlY2sgZm9yIEdML0dMVS9FR0wvR0xFUzIgbGlicyBpZiBkaXNhYmxlZCBpbgorIGNvbmZpZ3VyYXRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU1MjJdCisKK1NpZ25lZC1vZmYtYnk6IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDE0ICsrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDFhNDZhZmIuLmU4NWQ0YmEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTY2MSwxMCArNjYxLDE2IEBAIGNhc2UgJGhvc3QgaW4KKyAgICAgZmkKKyAgIDs7CisgICAqKQorLSAgICBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEdMLCBHTCwgZ2xUZXhJbWFnZTJELCwgR0wvZ2wuaCkKKy0gICAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihHTFUsIEdMVSwgZ2x1U3BoZXJlLCwgR0wvZ2x1LmgpCistICAgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoR0xFUzIsIEdMRVN2MiwgZ2xUZXhJbWFnZTJELCwgR0xFUzIvZ2wyLmgpCistICAgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoRUdMLCBFR0wsIGVnbEdldEVycm9yLCwgRUdML2VnbC5oKQorKyAgICBpZiB0ZXN0ICJ4JE5FRURfR0wiICE9ICJ4bm8iOyB0aGVuCisrICAgICAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihHTCwgR0wsIGdsVGV4SW1hZ2UyRCwsIEdML2dsLmgpCisrICAgICAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihHTFUsIEdMVSwgZ2x1U3BoZXJlLCwgR0wvZ2x1LmgpCisrICAgIGZpCisrICAgIGlmIHRlc3QgIngkTkVFRF9HTEVTMiIgIT0gInhubyI7IHRoZW4KKysgICAgICBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEdMRVMyLCBHTEVTdjIsIGdsVGV4SW1hZ2UyRCwsIEdMRVMyL2dsMi5oKQorKyAgICBmaQorKyAgICBpZiB0ZXN0ICJ4JE5FRURfRUdMIiAhPSAieG5vIjsgdGhlbgorKyAgICAgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoRUdMLCBFR0wsIGVnbEdldEVycm9yLCwgRUdML2VnbC5oKQorKyAgICBmaQorIAorICAgICBvbGRfTElCUz0kTElCUworICAgICBvbGRfQ0ZMQUdTPSRDRkxBR1MKKy0tIAorMS44LjMuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlic3NoMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJzc2gyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MmFmZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlic3NoMi5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIGY1OWM1MjY5ZjkyZDU5YTUyOTZjYmZlZWI2ODJkNDIwOTVjZDg4YWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMTggU2VwIDIwMTQgMDI6MjQ6MDcgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkOiBhbGxvdyB0byBkaXNhYmxlIGxpYnNzaDIKKworbGlic3NoMiBpcyBhdXRvbWF0aWNhbGx5IGxpbmtlZCB0byBpZiBwcmVzZW50LCB0aGlzIHVuZGV0ZXJtaW5lZAorZGVwZW5kZW5jeSBtYXkgY2F1c2UgYnVpbGQgZXJyb3JzIGxpa2U6CisKKyAgLi4uL3g4Nl82NC1wb2t5LWxpbnV4LzQuOS4wL2xkOiBjYW5ub3QgZmluZCAtbHNzaDIKKworbGlic3NoMiBpc24ndCBhbiBvZS1jb3JlIHJlY2lwZSwgc28gYWxsb3cgdG8gZGlzYWJsZSBpdCBmcm9tCitjb25maWd1cmUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgMjMgKysrKysrKysrKysrKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMGU5NWM1Yy4uMTIxNTNiNCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTkwMSw2ICsxOTAxLDE1IEBAIEFHX0dTVF9DSEVDS19GRUFUVVJFKENIUk9NQVBSSU5ULCBbY2hyb21hcHJpbnRdLCBjaHJvbWFwcmludCwgWworIF0pCisgCisgZG5sICoqKiBDdXJsICoqKgorK0FDX0FSR19FTkFCTEUoW2xpYnNzaDJdLAorKyAgICAgWyAgLS1lbmFibGUtbGlic3NoMgkJZW5hYmxlIExJQlNTSDIgc3VwcG9ydCBAPDpAZGVmYXVsdD1hdXRvQDo+QF0sCisrICAgICBbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgICAgICB5ZXMpICBORUVEX1NTSDI9eWVzIDs7CisrICAgICAgIG5vKSAgIE5FRURfU1NIMj1ubyA7OworKyAgICAgICBhdXRvKSBORUVEX1NTSDI9YXV0byA7OworKyAgICAgICAqKSBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWxpYnNzaDJdKSA7OworKyAgICAgZXNhY10sW05FRURfU1NIMj1hdXRvXSkKKysKKyB0cmFuc2xpdChkbm0sIG0sIGwpIEFNX0NPTkRJVElPTkFMKFVTRV9DVVJMLCB0cnVlKQorIEFHX0dTVF9DSEVDS19GRUFUVVJFKENVUkwsIFtDdXJsIHBsdWdpbl0sIGN1cmwsIFsKKyAgIFBLR19DSEVDS19NT0RVTEVTKENVUkwsIGxpYmN1cmwgPj0gNy4yMS4wLCBbCitAQCAtMTkxNSwxMiArMTkyNCwxNCBAQCBBR19HU1RfQ0hFQ0tfRkVBVFVSRShDVVJMLCBbQ3VybCBwbHVnaW5dLCBjdXJsLCBbCisgICBdKQorICAgQUNfU1VCU1QoQ1VSTF9DRkxBR1MpCisgICBBQ19TVUJTVChDVVJMX0xJQlMpCistICBQS0dfQ0hFQ0tfTU9EVUxFUyhTU0gyLCBsaWJzc2gyID49IDEuNC4zLCBbCistICAgIEhBVkVfU1NIMj0ieWVzIgorLSAgICBBQ19ERUZJTkUoSEFWRV9TU0gyLCAxLCBbRGVmaW5lIGlmIGxpYnNzaDIgaXMgYXZhaWxhYmxlXSkKKy0gIF0sIFsKKy0gICAgSEFWRV9TU0gyPSJubyIKKy0gIF0pCisrICBpZiB0ZXN0ICJ4JE5FRURfU1NIMiIgIT0gInhubyI7IHRoZW4KKysgICAgUEtHX0NIRUNLX01PRFVMRVMoU1NIMiwgbGlic3NoMiA+PSAxLjQuMywgWworKyAgICAgIEhBVkVfU1NIMj0ieWVzIgorKyAgICAgIEFDX0RFRklORShIQVZFX1NTSDIsIDEsIFtEZWZpbmUgaWYgbGlic3NoMiBpcyBhdmFpbGFibGVdKQorKyAgICBdLCBbCisrICAgICAgSEFWRV9TU0gyPSJubyIKKysgICAgXSkKKysgIGZpCisgICBBTV9DT05ESVRJT05BTChVU0VfU1NIMiwgdGVzdCAieCRIQVZFX1NTSDIiID0gInh5ZXMiKQorICAgQUNfU1VCU1QoU1NIMl9DRkxBR1MpCisgICBBQ19TVUJTVChTU0gyX0xJQlMpCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkXzEuNC41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkXzEuNC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MDY1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfMS40LjUuYmIKQEAgLTAsMCArMSwxNCBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTczYTU4NTVhODExOWRlYjAxN2Y1ZjEzY2YzMjcwOTVkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC90dGEvZmlsdGVycy5oO2JlZ2lubGluZT0xMjtlbmRsaW5lPTI5O21kNT04YTA4MjcwNjU2ZjJmOGFkN2JiMzY1NWI4MzEzOGU1YSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MjE2ODJlNGU4ZmVhNTI0MTNmZDI2YzYwYWNiOTA3ZTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3R0YS9jcmMzMi5oO2JlZ2lubGluZT0xMjtlbmRsaW5lPTI5O21kNT0yN2RiMjY5YzU3NWQxZTUzMTdmZmZjYTJkMzNiM2I1MCIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtZ2wtZG8tbm90LWNoZWNrLWZvci1HTC1HTFUtRUdMLUdMRVMyLWxpYnMtaWYtZGlzYWJsZS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImUwYmIzOTQxMmNmNGE0OGZlMDM5N2JjZjNhN2NkNDUxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE1MmZhZDcyNTA2ODNkNzJmOWRlYjM2YzU2ODU0MjgzMzgzNjVmZTRhNGM4N2ZmZTE1ZTM4NzgzYjE0Zjk4M2MiCisKK1MgPSAiJHtXT1JLRElSfS9nc3QtcGx1Z2lucy1iYWQtJHtQVn0iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOTUwNWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfZ2l0LmJiCkBAIC0wLDAgKzEsMjYgQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTczYTU4NTVhODExOWRlYjAxN2Y1ZjEzY2YzMjcwOTVkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC90dGEvZmlsdGVycy5oO2JlZ2lubGluZT0xMjtlbmRsaW5lPTI5O21kNT04YTA4MjcwNjU2ZjJmOGFkN2JiMzY1NWI4MzEzOGU1YSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MjE2ODJlNGU4ZmVhNTI0MTNmZDI2YzYwYWNiOTA3ZTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3R0YS9jcmMzMi5oO2JlZ2lubGluZT0xMjtlbmRsaW5lPTI5O21kNT0yN2RiMjY5YzU3NWQxZTUzMTdmZmZjYTJkMzNiM2I1MCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDUkVWID0gIjZlNWRiNTdkMjQ0NmE3NTNhYWE3NmJlZTI2OGUxZjk1NjAwYjE0Y2UiCisKK1BBQ0tBR0VDT05GSUdbc2JjXSA9ICItLWVuYWJsZS1zYmMsLS1kaXNhYmxlLXNiYyxzYmMiCitQQUNLQUdFQ09ORklHW2hsc10gPSAiLS1lbmFibGUtaGxzLC0tZGlzYWJsZS1obHMsZ251dGxzIgorCitFWFRSQV9PRUNPTkYgKz0gIiBcCisgICAgLWRpc2FibGUtb3BlbmpwZWcgXAorICAgICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJY2QgJHtTfQorCS4vYXV0b2dlbi5zaCAtLW5vY29uZmlndXJlCisJY2QgJHtCfQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZjNmNDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLmluYwpAQCAtMCwwICsxLDM5IEBACityZXF1aXJlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLmluYworCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisiCisKK0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3ZpcnR1YWwvbGlieDExIGxpYnh2JywgJycsIGQpfSIKK0RFUEVORFMgKz0gImZyZWV0eXBlIGxpYm9pbCB1dGlsLWxpbnV4IgorCitpbmhlcml0IGdldHRleHQKKworUEFDS0FHRVNfRFlOQU1JQyA9KyAiXmxpYmdzdC4qIgorCitQQUNLQUdFQ09ORklHID8/PSAiIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2Fsc2EnLCAnYWxzYScsICcnLCBkKX0gXAorICAgIG9yYyBpdm9yYmlzIG9nZyB0aGVvcmEgdm9yYmlzIHBhbmdvIFwKKyAgICAiCisKK1gxMURFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlic20gbGlieHJlbmRlciIKK1gxMUVOQUJMRU9QVFMgPSAiLS1lbmFibGUteCAtLWVuYWJsZS14dmlkZW8gLS1lbmFibGUteHNobSIKK1gxMURJU0FCTEVPUFRTID0gIi0tZGlzYWJsZS14IC0tZGlzYWJsZS14dmlkZW8gLS1kaXNhYmxlLXhzaG0iCitQQUNLQUdFQ09ORklHW3gxMV0gICAgID0gIiR7WDExRU5BQkxFT1BUU30sJHtYMTFESVNBQkxFT1BUU30sJHtYMTFERVBFTkRTfSIKK1BBQ0tBR0VDT05GSUdbYWxzYV0gICAgPSAiLS1lbmFibGUtYWxzYSwtLWRpc2FibGUtYWxzYSxhbHNhLWxpYiIKK1BBQ0tBR0VDT05GSUdbaXZvcmJpc10gPSAiLS1lbmFibGUtaXZvcmJpcywtLWRpc2FibGUtaXZvcmJpcyx0cmVtb3IiCitQQUNLQUdFQ09ORklHW29nZ10gICAgID0gIi0tZW5hYmxlLW9nZywtLWRpc2FibGUtb2dnLGxpYm9nZyIKK1BBQ0tBR0VDT05GSUdbdGhlb3JhXSAgPSAiLS1lbmFibGUtdGhlb3JhLC0tZGlzYWJsZS10aGVvcmEsbGlidGhlb3JhIgorUEFDS0FHRUNPTkZJR1t2b3JiaXNdICA9ICItLWVuYWJsZS12b3JiaXMsLS1kaXNhYmxlLXZvcmJpcyxsaWJ2b3JiaXMiCitQQUNLQUdFQ09ORklHW3BhbmdvXSAgID0gIi0tZW5hYmxlLXBhbmdvLC0tZGlzYWJsZS1wYW5nbyxwYW5nbyIKKworCisjIGNkcGFyYW5vaWEgYW5kIGxpYnZpc3VhbCBkbyBub3Qgc2VlbSB0byBleGlzdCBhbnl3aGVyZSBpbiBPRQorRVhUUkFfT0VDT05GICs9ICIgXAorICAgIC0tZGlzYWJsZS1mcmVldHlwZXRlc3QgXAorICAgIC0tZGlzYWJsZS1jZHBhcmFub2lhIFwKKyAgICAtLWRpc2FibGUtbGlidmlzdWFsIFwKKyIKKworRklMRVNfJHtNTFBSRUZJWH1saWJnc3R0YWctMS4wICs9ICIke2RhdGFkaXJ9L2dzdC1wbHVnaW5zLWJhc2UvMS4wL2xpY2Vuc2UtdHJhbnNsYXRpb25zLmRpY3QiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTX2FwcGVuZF94ODYgPSAiIGFjX2N2X2hlYWRlcl9lbW1pbnRyaW5faD1ubyBhY19jdl9oZWFkZXJfeG1taW50cmluX2g9bm8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDEtYmFzZXRleHRvdmVybGF5LW1ha2UtbWVtb3J5LWNvcHktd2hlbi12aWRlby1idWZmZXItcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMS1iYXNldGV4dG92ZXJsYXktbWFrZS1tZW1vcnktY29weS13aGVuLXZpZGVvLWJ1ZmZlci1zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZGNhOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDEtYmFzZXRleHRvdmVybGF5LW1ha2UtbWVtb3J5LWNvcHktd2hlbi12aWRlby1idWZmZXItcy5wYXRjaApAQCAtMCwwICsxLDEyOSBAQAorRnJvbSAzNzgxZDQwOTQwZDQ2ZDdlNmE1MDIwOTJkMjRhYWM3OTk3ZjZkYTViIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWluZ2tlIFdhbmcgPG1pbmdrZS53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiBUaHUsIDUgTWFyIDIwMTUgMTI6MDY6MjMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzRdIGJhc2V0ZXh0b3ZlcmxheTogbWFrZSBtZW1vcnkgY29weSB3aGVuIHZpZGVvIGJ1ZmZlcidzCisgbWVtb3J5IGlzIHJlYWR5IG9ubHkKKworMS4gc2luY2UgZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIGp1c3QgbG9va3VwIHRoZSByZWZjb3VudCB0byBkZXRlcm1pbmUgaWYKKyAgIGEgYnVmZmVyIGlzIHdyaXRhYmxlLCBhbmQgaXQgd2lsbCB1c2UgX2dzdF9idWZmZXJfY29weSgpIHdoaWNoIGRvbid0CisgICBwZXJmb3JtIGEgZGVlcCBtZW1vcnkgY29weSBldmVuIGlmIHRoZSBmbGFnIG9mIGEgbWVtb3J5IGlzIHNldCB0bworICAgR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLiBTbywgd2UgZGV0ZWN0IHRoZSBtZW1vcnkgZmxhZyBhbmQgdXNlCisgICBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIHdpdGggR1NUX0JVRkZFUl9DT1BZX0RFRVAgcGFyYW1ldGVyIHRvIHBlcmZvcm0KKyAgIGRlZXAgbWVtb3J5IGNvcHkuIGlmIHRoZSBhbGxvY2F0b3Igb2YgYSBtZW1vcnkgZG9uJ3Qgc3VwcG9ydCBtZW1fY29weQorICAgaW50ZXJmYWNlLCB0aGUgaXQgd2lsbCByZXR1cm4gTlVMTCwgaWYgdGhpcyBjYXNlLCB3ZSBjYW4gdXNlCisgICBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUoKSB0byBnZXQgYSBzaGFyZWQgbWVtb3J5IGJ1ZmZlciBvciB0aGUgb3JpZ25hbAorICAgYnVmZmVyIGlmIHRoZSBidWZmZXIncyByZWZjb3VudCBpcyAxLgorMi4gIG5ldyBmZWF0dXJlIGlzIG5vIGFkZGVkIGlmIGNhcHMgaGFzIG5vIGZlYXR1cmUgZHVyaW5nIGNhcHMgbmVnb3RpYXRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc0OTVdCisKK1NpZ25lZC1vZmYtYnk6IE1pbmdrZSBXYW5nIDxtaW5na2Uud2FuZ0BmcmVlc2NhbGUuY29tPgorCitkaWZmIC0tZ2l0IGEvZXh0L3BhbmdvL2dzdGJhc2V0ZXh0b3ZlcmxheS5jIGIvZXh0L3BhbmdvL2dzdGJhc2V0ZXh0b3ZlcmxheS5jCitpbmRleCBjOTE5ODYxLi4zYzBhMWQ3IDEwMDc1NQorLS0tIGEvZXh0L3BhbmdvL2dzdGJhc2V0ZXh0b3ZlcmxheS5jCisrKysgYi9leHQvcGFuZ28vZ3N0YmFzZXRleHRvdmVybGF5LmMKK0BAIC03NDcsNiArNzQ3LDcgQEAgZ3N0X2Jhc2VfdGV4dF9vdmVybGF5X25lZ290aWF0ZSAoR3N0QmFzZVRleHRPdmVybGF5ICogb3ZlcmxheSwgR3N0Q2FwcyAqIGNhcHMpCisgICAgIGlmIChmID09IE5VTEwpIHsKKyAgICAgICBmID0gZ3N0X2NhcHNfZmVhdHVyZXNfbmV3CisgICAgICAgICAgIChHU1RfQ0FQU19GRUFUVVJFX01FVEFfR1NUX1ZJREVPX09WRVJMQVlfQ09NUE9TSVRJT04sIE5VTEwpOworKyAgICAgIGdzdF9jYXBzX3NldF9mZWF0dXJlcyhvdmVybGF5X2NhcHMsIDAsIGYpOworICAgICB9IGVsc2UgeworICAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2FkZCAoZiwKKyAgICAgICAgICAgR1NUX0NBUFNfRkVBVFVSRV9NRVRBX0dTVF9WSURFT19PVkVSTEFZX0NPTVBPU0lUSU9OKTsKK0BAIC0xODkwLDE2ICsxODkxLDcxIEBAIGdzdF9iYXNlX3RleHRfb3ZlcmxheV9wdXNoX2ZyYW1lIChHc3RCYXNlVGV4dE92ZXJsYXkgKiBvdmVybGF5LAorICAgaWYgKGdzdF9wYWRfY2hlY2tfcmVjb25maWd1cmUgKG92ZXJsYXktPnNyY3BhZCkpCisgICAgIGdzdF9iYXNlX3RleHRfb3ZlcmxheV9uZWdvdGlhdGUgKG92ZXJsYXksIE5VTEwpOworIAorLSAgdmlkZW9fZnJhbWUgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKHZpZGVvX2ZyYW1lKTsKKy0KKyAgIGlmIChvdmVybGF5LT5hdHRhY2hfY29tcG9fdG9fYnVmZmVyKSB7CisgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG92ZXJsYXksICJBdHRhY2hpbmcgdGV4dCBvdmVybGF5IGltYWdlIHRvIHZpZGVvIGJ1ZmZlciIpOworKyAgICB2aWRlb19mcmFtZSA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAodmlkZW9fZnJhbWUpOworICAgICBnc3RfYnVmZmVyX2FkZF92aWRlb19vdmVybGF5X2NvbXBvc2l0aW9uX21ldGEgKHZpZGVvX2ZyYW1lLAorICAgICAgICAgb3ZlcmxheS0+Y29tcG9zaXRpb24pOworICAgICAvKiBGSVhNRTogZW11bGF0ZSBzaGFkZWQgYmFja2dyb3VuZCBib3ggaWYgd2FudF9zaGFkaW5nPXRydWUgKi8KKyAgICAgZ290byBkb25lOworICAgfQorIAorKyAgZ2ludCBtID0gZ3N0X2J1ZmZlcl9uX21lbW9yeSh2aWRlb19mcmFtZSk7CisrICBnYm9vbGVhbiBtZW1fcmRvbmx5ID0gRkFMU0U7CisrICBHc3RNZW1vcnkgKm1lbTsKKysgIEdzdEJ1ZmZlciAqb3JpZyA9IHZpZGVvX2ZyYW1lOworKworKyAgd2hpbGUgKC0tbT49MCkgeworKyAgICBtZW0gPSBnc3RfYnVmZmVyX2dldF9tZW1vcnkodmlkZW9fZnJhbWUsIG0pOworKyAgICBpZiAoR1NUX01FTU9SWV9JU19SRUFET05MWShtZW0pKSB7CisrICAgICAgbWVtX3Jkb25seSA9IFRSVUU7CisrICAgICAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBnc3RfbWVtb3J5X3VucmVmIChtZW0pOworKyAgfQorKworKyAgaWYgKG1lbV9yZG9ubHkpIHsKKysgICAgLy8gc2luY2UgZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIGp1c3QgbG9va3VwIHRoZSByZWZjb3VudCB0byBkZXRlcm1pbmUgaWYKKysgICAgLy8gYSBidWZmZXIgaXMgd3JpdGFibGUsIGFuZCBpdCB3aWxsIHVzZSBfZ3N0X2J1ZmZlcl9jb3B5KCkgd2hpY2ggZG9uJ3QKKysgICAgLy8gcGVyZm9ybSBhIGRlZXAgbWVtb3J5IGNvcHkgZXZlbiBpZiB0aGUgZmxhZyBvZiBhIG1lbW9yeSBpcyBzZXQgdG8KKysgICAgLy8gR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLiBTbywgd2UgZGV0ZWN0IHRoZSBtZW1vcnkgZmxhZyBhbmQgdXNlCisrICAgIC8vIGdzdF9idWZmZXJfY29weV9yZWdpb24gd2l0aCBHU1RfQlVGRkVSX0NPUFlfREVFUCBwYXJhbWV0ZXIgdG8gcGVyZm9ybQorKyAgICAvLyBkZWVwIG1lbW9yeSBjb3B5LiBpZiB0aGUgYWxsb2NhdG9yIG9mIGEgbWVtb3J5IGRvbid0IHN1cHBvcnQgbWVtX2NvcHkKKysgICAgLy8gaW50ZXJmYWNlLCB0aGUgaXQgd2lsbCByZXR1cm4gTlVMTCwgaWYgdGhpcyBjYXNlLCB3ZSBjYW4gdXNlCisrICAgIC8vIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpIHRvIGdldCBhIHNoYXJlZCBtZW1vcnkgYnVmZmVyIG9yIHRoZSBvcmlnbmFsCisrICAgIC8vIGJ1ZmZlciBpZiB0aGUgYnVmZmVyJ3MgcmVmY291bnQgaXMgMS4KKysgICAgR3N0QnVmZmVyICpuZXdfYnVmID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAodmlkZW9fZnJhbWUsCisrICAgICAgICBHU1RfQlVGRkVSX0NPUFlfQUxMIHwgR1NUX0JVRkZFUl9DT1BZX0RFRVAsIDAsIC0xKTsKKysKKysgICAgR1NUX0RFQlVHX09CSkVDVCAob3ZlcmxheSwgImNvcHkgJXMgdmlkZW8gZnJhbWUgYnVmZmVyICVwIC0+ICVwIiwKKysgICAgICAgIGdfdHlwZV9uYW1lIChHU1RfTUlOSV9PQkpFQ1RfVFlQRSAodmlkZW9fZnJhbWUpKSwgdmlkZW9fZnJhbWUsIG5ld19idWYpOworKworKyAgICBpZiAoIW5ld19idWYpIHsKKysgICAgICAvL21heWJlIHRoZSBhbGxvY2F0b3IgZG9uJ3Qgc3VwcG9ydCBtZW1fY29weSBpbnRlcmZhY2UsIHRoZSB3ZSBqdXN0IHVzZQorKyAgICAgIC8vZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkgdG8gZ2V0IGEgd3JpdGFibGUgYnVmZmVyLgorKyAgICAgIHZpZGVvX2ZyYW1lID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlICh2aWRlb19mcmFtZSk7CisrICAgIH0gZWxzZSB7CisrICAgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmICh2aWRlb19mcmFtZSk7CisrICAgICAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChuZXdfYnVmLCBHU1RfQlVGRkVSX0ZMQUdfVEFHX01FTU9SWSk7CisrICAgICAgdmlkZW9fZnJhbWUgPSBuZXdfYnVmOworKyAgICB9CisrCisrICAgIGlmICghdmlkZW9fZnJhbWUpIHsKKysgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG92ZXJsYXksICJtYWtlIHdyaXRhYmxlIGJ1ZmZlciBmYWlsZWQiKTsKKysgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisrICAgIH0KKysKKysgICAgbSA9IGdzdF9idWZmZXJfbl9tZW1vcnkodmlkZW9fZnJhbWUpOworKyAgICB3aGlsZSAoLS1tPj0wKSB7CisrICAgICAgbWVtID0gZ3N0X2J1ZmZlcl9nZXRfbWVtb3J5KHZpZGVvX2ZyYW1lLCBtKTsKKysgICAgICBHU1RfTUVNT1JZX0ZMQUdfVU5TRVQgKG1lbSwgR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZKTsKKysgICAgICBnc3RfbWVtb3J5X3VucmVmIChtZW0pOworKyAgICB9CisrICB9IGVsc2UgeworKyAgICB2aWRlb19mcmFtZSA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAodmlkZW9fZnJhbWUpOworKyAgfQorKworICAgaWYgKCFnc3RfdmlkZW9fZnJhbWVfbWFwICgmZnJhbWUsICZvdmVybGF5LT5pbmZvLCB2aWRlb19mcmFtZSwKKyAgICAgICAgICAgR1NUX01BUF9SRUFEV1JJVEUpKQorICAgICBnb3RvIGludmFsaWRfZnJhbWU7CitAQCAtMTkxOCw2ICsxOTc0LDE4IEBAIGdzdF9iYXNlX3RleHRfb3ZlcmxheV9wdXNoX2ZyYW1lIChHc3RCYXNlVGV4dE92ZXJsYXkgKiBvdmVybGF5LAorIAorICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmZnJhbWUpOworIAorKyAgaWYgKG1lbV9yZG9ubHkgJiYgb3JpZyA9PSB2aWRlb19mcmFtZSkgeworKyAgICAvL2lmIHdlIHVzZWQgdGhlIG9yaWdpbmFsIGJ1ZmZlciBhbmQgaXQncyBtZW0gaXMgc2V0IHRvIHJlYWQgb25seSwKKysgICAgLy9yZWNvdmVyIHRoZSBtZW1vcnkgcmVhZHkgb25seSBmbGFnIHNpbmNlIHdlIHVuc2V0IGl0IGJlZm9yZQorKyAgICAvLyBnc3RfdmlkZW9fZnJhbWVfbWFwICgpCisrICAgIG0gPSBnc3RfYnVmZmVyX25fbWVtb3J5KHZpZGVvX2ZyYW1lKTsKKysgICAgd2hpbGUgKC0tbT49MCkgeworKyAgICAgIG1lbSA9IGdzdF9idWZmZXJfZ2V0X21lbW9yeSh2aWRlb19mcmFtZSwgbSk7CisrICAgICAgR1NUX01FTU9SWV9GTEFHUyhtZW0pIHw9IChHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFkpOworKyAgICAgIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7CisrICAgIH0KKysgIH0KKysKKyBkb25lOgorIAorICAgcmV0dXJuIGdzdF9wYWRfcHVzaCAob3ZlcmxheS0+c3JjcGFkLCB2aWRlb19mcmFtZSk7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAxLXZpZGVvLWZyYW1lLURvbi10LXJlZi1idWZmZXJzLXR3aWNlLXdoZW4tbWFwcGluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMS12aWRlby1mcmFtZS1Eb24tdC1yZWYtYnVmZmVycy10d2ljZS13aGVuLW1hcHBpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RiNDcyNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMS12aWRlby1mcmFtZS1Eb24tdC1yZWYtYnVmZmVycy10d2ljZS13aGVuLW1hcHBpbmcucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorRnJvbSAyNjlmNjQyYzQ1ZDg1Y2ZkNjMwZWQ0OTA0NzhlNmJkNmI3MWE3NjdmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP1NlYmFzdGlhbj0yMERyPUMzPUI2Z2U/PSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KK0RhdGU6IFR1ZSwgMTYgU2VwIDIwMTQgMDE6MDc6MTggKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gdmlkZW8tZnJhbWU6IERvbid0IHJlZiBidWZmZXJzIHR3aWNlIHdoZW4gbWFwcGluZworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjUuMV0KKy0tLQorIGdzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYworaW5kZXggMDFmMjNjMC4uOGE5YWU5NiAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jCisrKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYworQEAgLTEwNSw3ICsxMDUsNyBAQCBnc3RfdmlkZW9fZnJhbWVfbWFwX2lkIChHc3RWaWRlb0ZyYW1lICogZnJhbWUsIEdzdFZpZGVvSW5mbyAqIGluZm8sCisgICAgICAgZnJhbWUtPmRhdGFbaV0gPSBmcmFtZS0+bWFwWzBdLmRhdGEgKyBpbmZvLT5vZmZzZXRbaV07CisgICAgIH0KKyAgIH0KKy0gIGZyYW1lLT5idWZmZXIgPSBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKKysgIGZyYW1lLT5idWZmZXIgPSBidWZmZXI7CisgICBpZiAoKGZsYWdzICYgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRikgPT0gMCkKKyAgICAgZ3N0X2J1ZmZlcl9yZWYgKGZyYW1lLT5idWZmZXIpOworIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi1nc3RwbGF5c2luay1kb24tdC1zZXQtYXN5bmMtb2YtY3VzdG9tLXRleHQtc2luay10by1mLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAyLWdzdHBsYXlzaW5rLWRvbi10LXNldC1hc3luYy1vZi1jdXN0b20tdGV4dC1zaW5rLXRvLWYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzljMTQ2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi1nc3RwbGF5c2luay1kb24tdC1zZXQtYXN5bmMtb2YtY3VzdG9tLXRleHQtc2luay10by1mLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gMGE3ODU1NWVhNmM4YzJmMWVlMjdlZTQ3MDdlOGQ3YWEwMGFiN2E2NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1pbmdrZSBXYW5nIDxtaW5na2Uud2FuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogVGh1LCAxOSBNYXIgMjAxNSAxNDoxNToyNSArMDgwMAorU3ViamVjdDogW1BBVENIIDIvNF0gZ3N0cGxheXNpbms6IGRvbid0IHNldCBhc3luYyBvZiBjdXN0b20gdGV4dC1zaW5rIHRvCisgZmFsc2UKKworc2V0IGFzeW5jIHRvIGZhbHNlIGxlYWQgdG8gQS9WIHN5bmMgcHJvYmxlbSB3aGVuIHNlZWtpbmcuCit0aGUgcHJlcm9sbCBuZWVkIHVzZSBHQVAgZXZlbnQgaW5zdGVhZCBvZiBzZXQgYXN5bmMgdG8gZmFsc2UuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3NDk5XQorCitTaWduZWQtb2ZmLWJ5OiBNaW5na2UgV2FuZyA8bWluZ2tlLndhbmdAZnJlZXNjYWxlLmNvbT4KKworZGlmZiAtLWdpdCBhL2dzdC9wbGF5YmFjay9nc3RwbGF5c2luay5jIGIvZ3N0L3BsYXliYWNrL2dzdHBsYXlzaW5rLmMKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CitpbmRleCBmNWEyZDQyLi5mYmEwMTcyCistLS0gYS9nc3QvcGxheWJhY2svZ3N0cGxheXNpbmsuYworKysrIGIvZ3N0L3BsYXliYWNrL2dzdHBsYXlzaW5rLmMKK0BAIC0yNDA4LDcgKzI0MDgsNyBAQCBnZW5fdGV4dF9jaGFpbiAoR3N0UGxheVNpbmsgKiBwbGF5c2luaykKKyAgICAgICAgICAgR19UWVBFX0JPT0xFQU4pOworICAgICAgIGlmIChlbGVtKSB7CisgICAgICAgICAvKiBtYWtlIHN1cmUgdGhlIHNwYXJzZSBzdWJ0aXRsZXMgZG9uJ3QgcGFydGljaXBhdGUgaW4gdGhlIHByZXJvbGwgKi8KKy0gICAgICAgIGdfb2JqZWN0X3NldCAoZWxlbSwgImFzeW5jIiwgRkFMU0UsIE5VTEwpOworKyAgICAgICAgLy9nX29iamVjdF9zZXQgKGVsZW0sICJhc3luYyIsIEZBTFNFLCBOVUxMKTsKKyAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBsYXlzaW5rLCAiYWRkaW5nIGN1c3RvbSB0ZXh0IHNpbmsiKTsKKyAgICAgICAgIGdzdF9iaW5fYWRkIChiaW4sIGNoYWluLT5zaW5rKTsKKyAgICAgICAgIC8qIE5PVEUgc3RyZWFtc3luY2hyb25pemVyIG5lZWRzIHN0cmVhbXMgZGVjb3VwbGVkICovCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAyLXZpZGVvLWZyYW1lLUFkZC1HU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAyLXZpZGVvLWZyYW1lLUFkZC1HU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NjViNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDItdmlkZW8tZnJhbWUtQWRkLUdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYucGF0Y2gKQEAgLTAsMCArMSw4NyBAQAorRnJvbSA0MGEyOTNkNDRkMWFlY2NmNWViOGU4NmYyM2EwYjEzNjY2MTExYzVjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP1NlYmFzdGlhbj0yMERyPUMzPUI2Z2U/PSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KK0RhdGU6IEZyaSwgMTIgU2VwIDIwMTQgMTQ6Mzk6MTYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzNdIHZpZGVvLWZyYW1lOiBBZGQgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRgorCitUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgYnVmZmVyIGlzIG5vdCByZWZmZWQgYW5vdGhlciB0aW1lIHdoZW4KK3N0b3JpbmcgaXQgaW4gdGhlIEdzdFZpZGVvRnJhbWUsIGtlZXBpbmcgaXQgd3JpdGFibGUgaWYgaXQgd2FzCit3cml0YWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMS41LjFdCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MTE4CistLS0KKyBnc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYyB8ICAgIDkgKysrKysrKystCisgZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmggfCAgIDE4ICsrKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYworaW5kZXggNTM3Y2Y3MC4uMDFmMjNjMCAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jCisrKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYworQEAgLTEwNiw2ICsxMDYsOSBAQCBnc3RfdmlkZW9fZnJhbWVfbWFwX2lkIChHc3RWaWRlb0ZyYW1lICogZnJhbWUsIEdzdFZpZGVvSW5mbyAqIGluZm8sCisgICAgIH0KKyAgIH0KKyAgIGZyYW1lLT5idWZmZXIgPSBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKKysgIGlmICgoZmxhZ3MgJiBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGKSA9PSAwKQorKyAgICBnc3RfYnVmZmVyX3JlZiAoZnJhbWUtPmJ1ZmZlcik7CisrCisgICBmcmFtZS0+bWV0YSA9IG1ldGE7CisgCisgICAvKiBidWZmZXIgZmxhZ3MgZW5oYW5jZSB0aGUgZnJhbWUgZmxhZ3MgKi8KK0BAIC0xODksMTEgKzE5MiwxMyBAQCBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKEdzdFZpZGVvRnJhbWUgKiBmcmFtZSkKKyAgIEdzdEJ1ZmZlciAqYnVmZmVyOworICAgR3N0VmlkZW9NZXRhICptZXRhOworICAgZ2ludCBpOworKyAgR3N0TWFwRmxhZ3MgZmxhZ3M7CisgCisgICBnX3JldHVybl9pZl9mYWlsIChmcmFtZSAhPSBOVUxMKTsKKyAKKyAgIGJ1ZmZlciA9IGZyYW1lLT5idWZmZXI7CisgICBtZXRhID0gZnJhbWUtPm1ldGE7CisrICBmbGFncyA9IGZyYW1lLT5tYXBbMF0uZmxhZ3M7CisgCisgICBpZiAobWV0YSkgeworICAgICBmb3IgKGkgPSAwOyBpIDwgZnJhbWUtPmluZm8uZmluZm8tPm5fcGxhbmVzOyBpKyspIHsKK0BAIC0yMDIsNyArMjA3LDkgQEAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwIChHc3RWaWRlb0ZyYW1lICogZnJhbWUpCisgICB9IGVsc2UgeworICAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZmcmFtZS0+bWFwWzBdKTsKKyAgIH0KKy0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisrCisrICBpZiAoKGZsYWdzICYgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRikgPT0gMCkKKysgICAgZ3N0X2J1ZmZlcl91bnJlZiAoZnJhbWUtPmJ1ZmZlcik7CisgfQorIAorIC8qKgorZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5oIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmgKK2luZGV4IDYyN2ZhYjAuLmY4ZTYzMDQgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuaAorKysrIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmgKK0BAIC0xNDksNiArMTQ5LDI0IEBAIHR5cGVkZWYgZW51bSB7CisgICBHU1RfVklERU9fQlVGRkVSX0ZMQUdfTEFTVCAgICAgICAgPSAoR1NUX0JVRkZFUl9GTEFHX0xBU1QgPDwgOCkKKyB9IEdzdFZpZGVvQnVmZmVyRmxhZ3M7CisgCisrLyoqCisrICogR3N0VmlkZW9CdWZmZXJGbGFnczoKKysgKiBAR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRjogIERvbid0IHRha2UgYW5vdGhlciByZWZlcmVuY2Ugb2YgdGhlIGJ1ZmZlciBhbmQgc3RvcmUgaXQgaW4KKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBHc3RWaWRlb0ZyYW1lLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgYnVmZmVyIHN0YXlzCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZSB3aGlsZSB0aGUgZnJhbWUgaXMgbWFwcGVkLCBidXQgcmVxdWlyZXMgdGhhdCB0aGUKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciByZWZlcmVuY2Ugc3RheXMgdmFsaWQgdW50aWwgdGhlIGZyYW1lIGlzIHVubWFwcGVkIGFnYWluLgorKyAqIEBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTEFTVDogICAgT2Zmc2V0IHRvIGRlZmluZSBtb3JlIGZsYWdzCisrICoKKysgKiBBZGRpdGlvbmFsIG1hcHBpbmcgZmxhZ3MgZm9yIGdzdF92aWRlb19mcmFtZV9tYXAoKS4KKysgKgorKyAqIFNpbmNlOiAxLjYKKysgKi8KKyt0eXBlZGVmIGVudW0geworKyAgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRiAgID0gKEdTVF9NQVBfRkxBR19MQVNUIDw8IDApLAorKyAgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX0xBU1QgICAgID0gKEdTVF9NQVBfRkxBR19MQVNUIDw8IDgpCisrICAvKiA4IG1vcmUgZmxhZ3MgcG9zc2libGUgYWZ0ZXJ3YXJkcyAqLworK30gR3N0VmlkZW9GcmFtZU1hcEZsYWdzOworKworIEdfRU5EX0RFQ0xTCisgCisgI2VuZGlmIC8qIF9fR1NUX1ZJREVPX0ZSQU1FX0hfXyAqLworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMy1zc2FwYXJzZS1lbmhhbmNlLVNTQS10ZXh0LWxpbmVzLXBhcnNpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDMtc3NhcGFyc2UtZW5oYW5jZS1TU0EtdGV4dC1saW5lcy1wYXJzaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYmViZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDMtc3NhcGFyc2UtZW5oYW5jZS1TU0EtdGV4dC1saW5lcy1wYXJzaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjI1IEBACitGcm9tIGJlNjE2M2NmYTNhMjU1NDkzZjlkNzViYWQ5NTQxY2JmZTE3MjNmZWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaW5na2UgV2FuZyA8bWluZ2tlLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFRodSwgMTkgTWFyIDIwMTUgMTQ6MTc6MTAgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAzLzRdIHNzYXBhcnNlOiBlbmhhbmNlIFNTQSB0ZXh0IGxpbmVzIHBhcnNpbmcuCisKK3NvbWUgcGFyc2VyIHdpbGwgcGFzcyBpbiB0aGUgb3JpZ2luYWwgc3NhIHRleHQgbGluZSB3aGljaCBzdGFydHMgd2l0aCAiRGlhbG9nOiIKK2FuZCB0aGVyZSdzIGFyZSBtYXliZSBtdWx0aXBsZSBEaWFsb2cgbGluZXMgaW4gb25lIGlucHV0IGJ1ZmZlci4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc0OTZdCisKK1NpZ25lZC1vZmYtYnk6IE1pbmdrZSBXYW5nIDxtaW5na2Uud2FuZ0BmcmVlc2NhbGUuY29tPgorCitkaWZmIC0tZ2l0IGEvZ3N0L3N1YnBhcnNlL2dzdHNzYXBhcnNlLmMgYi9nc3Qvc3VicGFyc2UvZ3N0c3NhcGFyc2UuYworb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2luZGV4IDA2ZWNlZjkuLjBhYjVkY2UKKy0tLSBhL2dzdC9zdWJwYXJzZS9nc3Rzc2FwYXJzZS5jCisrKysgYi9nc3Qvc3VicGFyc2UvZ3N0c3NhcGFyc2UuYworQEAgLTI2MCw2ICsyNjAsNyBAQCBnc3Rfc3NhX3BhcnNlX3JlbW92ZV9vdmVycmlkZV9jb2RlcyAoR3N0U3NhUGFyc2UgKiBwYXJzZSwgZ2NoYXIgKiB0eHQpCisgICogZ3N0X3NzYV9wYXJzZV9wdXNoX2xpbmU6CisgICogQHBhcnNlOiBjYWxsZXIgZWxlbWVudAorICAqIEB0eHQ6IHRleHQgdG8gcHVzaAorKyAqIEBzaXplOiB0ZXh0IHNpemUgbmVlZCB0byBiZSBwYXJzZQorICAqIEBzdGFydDogdGltZXN0YW1wIGZvciB0aGUgYnVmZmVyCisgICogQGR1cmF0aW9uOiBkdXJhdGlvbiBmb3IgdGhlIGJ1ZmZlcgorICAqCitAQCAtMjY5LDI3ICsyNzAsMTMzIEBAIGdzdF9zc2FfcGFyc2VfcmVtb3ZlX292ZXJyaWRlX2NvZGVzIChHc3RTc2FQYXJzZSAqIHBhcnNlLCBnY2hhciAqIHR4dCkKKyAgKiBSZXR1cm5zOiByZXN1bHQgb2YgdGhlIHB1c2ggb2YgdGhlIGNyZWF0ZWQgYnVmZmVyCisgICovCisgc3RhdGljIEdzdEZsb3dSZXR1cm4KKy1nc3Rfc3NhX3BhcnNlX3B1c2hfbGluZSAoR3N0U3NhUGFyc2UgKiBwYXJzZSwgZ2NoYXIgKiB0eHQsCisrZ3N0X3NzYV9wYXJzZV9wdXNoX2xpbmUgKEdzdFNzYVBhcnNlICogcGFyc2UsIGdjaGFyICogdHh0LCBnaW50IHNpemUsCisgICAgIEdzdENsb2NrVGltZSBzdGFydCwgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uKQorIHsKKyAgIEdzdEZsb3dSZXR1cm4gcmV0OworICAgR3N0QnVmZmVyICpidWY7CistICBnY2hhciAqdCwgKmVzY2FwZWQ7CisrICBnY2hhciAqdCwgKnRleHQsICpwLCAqZXNjYXBlZCwgKnBfc3RhcnQsICpwX2VuZDsKKyAgIGdpbnQgbnVtLCBpLCBsZW47CisrICBHc3RDbG9ja1RpbWUgc3RhcnRfdGltZSA9IEdfTUFYVUlOVDY0LCBlbmRfdGltZSA9IDA7CisgCistICBudW0gPSBhdG9pICh0eHQpOworLSAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiUGFyc2luZyBsaW5lICMlZCBhdCAlIiBHU1RfVElNRV9GT1JNQVQsCistICAgICAgbnVtLCBHU1RfVElNRV9BUkdTIChzdGFydCkpOworLQorLSAgLyogc2tpcCBhbGwgbm9uLXRleHQgZmllbGRzIGJlZm9yZSB0aGUgYWN0dWFsIHRleHQgKi8KKysgIHAgPSB0ZXh0ID0gZ19tYWxsb2Moc2l6ZSArIDEpOworKyAgKnAgPSAnXDAnOworICAgdCA9IHR4dDsKKy0gIGZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKy0gICAgdCA9IHN0cmNociAodCwgJywnKTsKKysKKysgIC8qIHRoZXJlIGFyZSBtYXkgaGF2ZSBtdWx0aXBsZSBkaWFsb2d1ZSBsaW5lcyBhdCBhIHRpbWUgKi8KKysgIHdoaWxlICgqdCkgeworKyAgICAvKiBpZ25vcmUgbGVhZGluZyB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzICovCisrICAgIHdoaWxlIChpc3NwYWNlKCp0KSkKKysgICAgICB0Kys7CisrCisrICAgIC8qIGlnbm9yZSBGb3JtYXQ6IGFuZCBTdHlsZTogbGluZXMgKi8KKysgICAgaWYgKHN0cm5jbXAodCwgIkZvcm1hdDoiLCA3KSA9PSAwIHx8IHN0cm5jbXAodCwgIlN0eWxlOiIsIDYpID09IDApIHsKKysgICAgICB3aGlsZSAoKnQgIT0gJ1wwJyAmJiAqdCAhPSAnXG4nKSB7CisrICAgICAgICB0Kys7CisrICAgICAgfQorKyAgICB9CisrCisrICAgIGlmICgqdCA9PSAnXDAnKQorKyAgICAgIGJyZWFrOworKworKyAgICAvKiBjb250aW51ZSB3aXRoIG5leHQgbGluZSAqLworKyAgICBpZiAoKnQgPT0gJ1xuJykgeworKyAgICAgIHQrKzsKKysgICAgICBjb250aW51ZTsKKysgICAgfQorKworKyAgICBpZihzdHJuY21wKHQsICJEaWFsb2d1ZToiLCA5KSAhPSAwKSB7CisrICAgICAgLyogbm90IHN0YXJ0ZWQgd2l0aCAiRGlhbG9ndWU6IiwgaXQgbXVzdCBiZSBhIGxpbmUgdHJpbW1lZCBieSBkZW11eGVyICovCisrICAgICAgbnVtID0gYXRvaSAodCk7CisrICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiUGFyc2luZyBsaW5lICMlZCBhdCAlIiBHU1RfVElNRV9GT1JNQVQsCisrICAgICAgICAgIG51bSwgR1NUX1RJTUVfQVJHUyAoc3RhcnQpKTsKKysKKysgICAgICAvKiBza2lwIGFsbCBub24tdGV4dCBmaWVsZHMgYmVmb3JlIHRoZSBhY3R1YWwgdGV4dCAqLworKyAgICAgIGZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKysgICAgICAgIHQgPSBzdHJjaHIgKHQsICcsJyk7CisrICAgICAgICBpZiAodCA9PSBOVUxMKQorKyAgICAgICAgICBicmVhazsKKysgICAgICAgICsrdDsKKysgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgLyogc3RhcnRlZCB3aXRoICJEaWFsb2d1ZToiLCB1cGRhdGUgdGltZXN0YW1wIGFuZCBkdXJhdGlvbiAqLworKyAgICAgIC8qIHRpbWUgZm9ybWF0IGFyZSBsaWtlIERpYWxvZzpNYXJrLDA6MDA6MDEuMDIsMDowMDowMy4wNCx4eCx4eHgsLi4uICovCisrICAgICAgZ3VpbnQgaG91ciwgbWluLCBzZWMsIG1zZWMsIGxlbjsKKysgICAgICBHc3RDbG9ja1RpbWUgdG1wOworKyAgICAgIGdjaGFyIHRfc3RyWzEyXSA9IHswfTsKKysKKysgICAgICAvKiBmaW5kIHRoZSBmaXJzdCAnLCcgKi8KKysgICAgICBwX3N0YXJ0ID0gc3RyY2hyICh0LCAnLCcpOworKyAgICAgIGlmIChwX3N0YXJ0KQorKyAgICAgICAgcF9lbmQgPSBzdHJjaHIgKCsrcF9zdGFydCwgJywnKTsKKysKKysgICAgICBpZiAocF9zdGFydCAmJiBwX2VuZCkgeworKyAgICAgICAgLyogY29weSB0ZXh0IGJldHdlZW4gZmlyc3QgJywnIGFuZCBzZWNvbmQgJywnICovCisrICAgICAgICBzdHJuY3B5KHRfc3RyLCBwX3N0YXJ0LCBwX2VuZCAtIHBfc3RhcnQpOworKyAgICAgICAgaWYgKHNzY2FuZiAodF9zdHIsICIldToldToldS4ldSIsICZob3VyLCAmbWluLCAmc2VjLCAmbXNlYykgPT0gNCkgeworKyAgICAgICAgICB0bXAgPSAoKGhvdXIqMzYwMCkgKyAobWluKjYwKSArIHNlYykgKiBHU1RfU0VDT05EICsgbXNlYypHU1RfTVNFQ09ORDsKKysgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJHZXQgc3RhcnQgdGltZTolMDJkOiUwMmQ6JTAyZDolMDNkXG4iLAorKyAgICAgICAgICAgICAgaG91ciwgbWluLCBzZWMsIG1zZWMpOworKyAgICAgICAgICBpZiAoc3RhcnRfdGltZSA+IHRtcCkKKysgICAgICAgICAgICBzdGFydF90aW1lID0gdG1wOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwKKysgICAgICAgICAgICAgICJmYWlsZWQgdG8gcGFyc2Ugc3NhIHN0YXJ0IHRpbWVzdGFtcCBzdHJpbmcgOiVzIiwgdF9zdHIpOworKyAgICAgICAgfQorKworKyAgICAgICAgcF9zdGFydCA9IHBfZW5kOworKyAgICAgICAgcF9lbmQgPSBzdHJjaHIgKCsrcF9zdGFydCwgJywnKTsKKysgICAgICAgIGlmIChwX2VuZCkgeworKyAgICAgICAgICAvKiBjb3B5IHRleHQgYmV0d2VlbiBzZWNvbmQgJywnIGFuZCB0aGlyZCAnLCcgKi8KKysgICAgICAgICAgc3RybmNweSh0X3N0ciwgcF9zdGFydCwgcF9lbmQgLSBwX3N0YXJ0KTsKKysgICAgICAgICAgaWYgKHNzY2FuZiAodF9zdHIsICIldToldToldS4ldSIsICZob3VyLCAmbWluLCAmc2VjLCAmbXNlYykgPT0gNCkgeworKyAgICAgICAgICAgIHRtcCA9ICgoaG91ciozNjAwKSArIChtaW4qNjApICsgc2VjKSpHU1RfU0VDT05EICsgbXNlYypHU1RfTVNFQ09ORDsKKysgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBhcnNlLCAiR2V0IGVuZCB0aW1lOiUwMmQ6JTAyZDolMDJkOiUwM2RcbiIsCisrICAgICAgICAgICAgICAgIGhvdXIsIG1pbiwgc2VjLCBtc2VjKTsKKysgICAgICAgICAgICBpZiAoZW5kX3RpbWUgPCB0bXApCisrICAgICAgICAgICAgICBlbmRfdGltZSA9IHRtcDsKKysgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLAorKyAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIHBhcnNlIHNzYSBlbmQgdGltZXN0YW1wIHN0cmluZyA6JXMiLCB0X3N0cik7CisrICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICB9CisrCisrICAgICAgLyogbm93IHNraXAgYWxsIG5vbi10ZXh0IGZpZWxkcyBiZWZvcmUgdGhlIGFjdHVhbCB0ZXh0ICovCisrICAgICAgZm9yIChpID0gMDsgaSA8PSA4OyArK2kpIHsKKysgICAgICAgIHQgPSBzdHJjaHIgKHQsICcsJyk7CisrICAgICAgICBpZiAodCA9PSBOVUxMKQorKyAgICAgICAgICBicmVhazsKKysgICAgICAgICsrdDsKKysgICAgICB9CisrICAgIH0KKysKKysgICAgLyogbGluZSBlbmQgYmVmb3JlIGV4cGVjdGVkIG51bWJlciBvZiAnLCcsIG5vdCBhIERpYWxvZ3VlIGxpbmUgKi8KKyAgICAgaWYgKHQgPT0gTlVMTCkKKy0gICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CistICAgICsrdDsKKysgICAgICBicmVhazsKKysKKysgICAgLyogaWYgbm90IHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHByZXZpb3VzIGxpbmUgaXMgJ1wwJywKKysgICAgICogdGhlbiByZXBsYWNlIGl0IHdpdGggJ1xOJyAqLworKyAgICBpZiAocCAhPSB0ZXh0ICYmICpwID09ICdcMCcpIHsKKysgICAgICAqcCsrID0gJ1xcJzsKKysgICAgICAqcCsrID0gJ04nOworKyAgICB9CisrCisrICAgIC8qIGNvcHkgYWxsIGFjdHVhbCB0ZXh0IG9mIHRoaXMgbGluZSAqLworKyAgICB3aGlsZSAoKCp0ICE9ICdcMCcpICYmICgqdCAhPSAnXG4nKSkKKysgICAgICAqcCsrID0gKnQrKzsKKysKKysgICAgLyogYWRkIGEgdGVybWluYXRvciBhdCB0aGUgZW5kICovCisrICAgICpwID0gJ1wwJzsKKysgIH0KKysKKysgIC8qIG5vdCB2YWxpZCB0ZXh0IGZvdW5kIGluIHRoaXMgYnVmZmVyIHJldHVybiBPSyB0byBsZXQgY2FsbGVyIHVucmVmIGJ1ZmZlciAqLworKyAgaWYgKHN0cmxlbih0ZXh0KSA8PSAwKSB7CisrICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFyc2UsICJOb3QgdmFsaWQgdGV4dCBmb3VuZCBpbiB0aGlzIGJ1ZmZlclxuIik7CisrICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKKyAgIH0KKyAKKysgIHQgPSB0ZXh0OworICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiVGV4dCA6ICVzIiwgdCk7CisgCisgICBpZiAoZ3N0X3NzYV9wYXJzZV9yZW1vdmVfb3ZlcnJpZGVfY29kZXMgKHBhcnNlLCB0KSkgeworQEAgLTMwNywxMyArNDE0LDIyIEBAIGdzdF9zc2FfcGFyc2VfcHVzaF9saW5lIChHc3RTc2FQYXJzZSAqIHBhcnNlLCBnY2hhciAqIHR4dCwKKyAgIGdzdF9idWZmZXJfZmlsbCAoYnVmLCAwLCBlc2NhcGVkLCBsZW4gKyAxKTsKKyAgIGdzdF9idWZmZXJfc2V0X3NpemUgKGJ1ZiwgbGVuKTsKKyAgIGdfZnJlZSAoZXNjYXBlZCk7CisrICBnX2ZyZWUodCk7CisrCisrICBpZiAoc3RhcnRfdGltZSAhPSBHX01BWFVJTlQ2NCkKKysgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikgPSBzdGFydF90aW1lOworKyAgZWxzZQorKyAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSA9IHN0YXJ0OworIAorLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikgPSBzdGFydDsKKy0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPSBkdXJhdGlvbjsKKysgIGlmIChlbmRfdGltZSA+IHN0YXJ0X3RpbWUpCisrICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPSBlbmRfdGltZSAtIHN0YXJ0X3RpbWU7CisrICBlbHNlCisrICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPSBkdXJhdGlvbjsKKyAKKyAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgIlB1c2hpbmcgYnVmZmVyIHdpdGggdGltZXN0YW1wICUiIEdTVF9USU1FX0ZPUk1BVAorLSAgICAgICIgYW5kIGR1cmF0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoc3RhcnQpLAorLSAgICAgIEdTVF9USU1FX0FSR1MgKGR1cmF0aW9uKSk7CisrICAgICAgIiBhbmQgZHVyYXRpb24gJSIgR1NUX1RJTUVfRk9STUFULAorKyAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpKSwKKysgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpKSk7CisgCisgICByZXQgPSBnc3RfcGFkX3B1c2ggKHBhcnNlLT5zcmNwYWQsIGJ1Zik7CisgCitAQCAtMzMzLDYgKzQ0OSw3IEBAIGdzdF9zc2FfcGFyc2VfY2hhaW4gKEdzdFBhZCAqIHNpbmtwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmKQorICAgR3N0Q2xvY2tUaW1lIHRzOworICAgZ2NoYXIgKnR4dDsKKyAgIEdzdE1hcEluZm8gbWFwOworKyAgZ2ludCBzaXplOworIAorICAgaWYgKEdfVU5MSUtFTFkgKCFwYXJzZS0+ZnJhbWVkKSkKKyAgICAgZ290byBub3RfZnJhbWVkOworQEAgLTM1MCwxMyArNDY3LDE0IEBAIGdzdF9zc2FfcGFyc2VfY2hhaW4gKEdzdFBhZCAqIHNpbmtwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmKQorICAgLyogbWFrZSBkb3VibGUtc3VyZSBpdCdzIDAtdGVybWluYXRlZCBhbmQgYWxsICovCisgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOworICAgdHh0ID0gZ19zdHJuZHVwICgoZ2NoYXIgKikgbWFwLmRhdGEsIG1hcC5zaXplKTsKKysgIHNpemUgPSBtYXAuc2l6ZTsKKyAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7CisgCisgICBpZiAodHh0ID09IE5VTEwpCisgICAgIGdvdG8gZW1wdHlfdGV4dDsKKyAKKyAgIHRzID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7CistICByZXQgPSBnc3Rfc3NhX3BhcnNlX3B1c2hfbGluZSAocGFyc2UsIHR4dCwgdHMsIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikpOworKyAgcmV0ID0gZ3N0X3NzYV9wYXJzZV9wdXNoX2xpbmUgKHBhcnNlLCB0eHQsIHNpemUsIHRzLCBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpKTsKKyAKKyAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0sgJiYgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRzKSkgeworICAgICBHc3RTZWdtZW50IHNlZ21lbnQ7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAzLXZpZGVvZmlsdGVyLVVzZS1uZXctR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMy12aWRlb2ZpbHRlci1Vc2UtbmV3LUdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMyYmYwNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMy12aWRlb2ZpbHRlci1Vc2UtbmV3LUdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorRnJvbSAzYTdjZGNkZmM5YzViMGQyMDM5NGZlNTFiM2I4Y2RhMjM5MzFjYTZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP1NlYmFzdGlhbj0yMERyPUMzPUI2Z2U/PSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KK0RhdGU6IEZyaSwgMTIgU2VwIDIwMTQgMTQ6NDE6MDEgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIHZpZGVvZmlsdGVyOiBVc2UgbmV3IEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMS41LjFdCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MTE4CistLS0KKyBnc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuYyB8ICAgMjMgKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2ZpbHRlci5jIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZmlsdGVyLmMKK2luZGV4IGUxZmEyYzEuLjg3NGIyZTggMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuYworKysrIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZmlsdGVyLmMKK0BAIC0yNjAsMjMgKzI2MCwxNSBAQCBnc3RfdmlkZW9fZmlsdGVyX3RyYW5zZm9ybSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RCdWZmZXIgKiBpbmJ1ZiwKKyAgIGlmIChmY2xhc3MtPnRyYW5zZm9ybV9mcmFtZSkgeworICAgICBHc3RWaWRlb0ZyYW1lIGluX2ZyYW1lLCBvdXRfZnJhbWU7CisgCistICAgIGlmICghZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoJmluX2ZyYW1lLCAmZmlsdGVyLT5pbl9pbmZvLCBpbmJ1ZiwgR1NUX01BUF9SRUFEKSkKKysgICAgaWYgKCFnc3RfdmlkZW9fZnJhbWVfbWFwICgmaW5fZnJhbWUsICZmaWx0ZXItPmluX2luZm8sIGluYnVmLAorKyAgICAgICAgICAgIEdTVF9NQVBfUkVBRCB8IEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYpKQorICAgICAgIGdvdG8gaW52YWxpZF9idWZmZXI7CisgCisgICAgIGlmICghZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoJm91dF9mcmFtZSwgJmZpbHRlci0+b3V0X2luZm8sIG91dGJ1ZiwKKy0gICAgICAgICAgICBHU1RfTUFQX1dSSVRFKSkKKysgICAgICAgICAgICBHU1RfTUFQX1dSSVRFIHwgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRikpCisgICAgICAgZ290byBpbnZhbGlkX2J1ZmZlcjsKKyAKKy0gICAgLyogR3N0VmlkZW9GcmFtZSBoYXMgYW5vdGhlciByZWZlcmVuY2UsIHNvIHRoZSBidWZmZXIgbG9va3MgdW53cml0ZWFibGUsCistICAgICAqIG1lYW5pbmcgdGhhdCB3ZSBjYW4ndCBhdHRhY2ggYW55IG1ldGFzIG9yIGFueXRoaW5nIHRvIGl0LiBPdGhlcgorLSAgICAgKiBtYXAoKSBmdW5jdGlvbnMgbGlrZSBnc3RfYnVmZmVyX21hcCgpIGRvbid0IGdldCBhbm90aGVyIHJlZmVyZW5jZQorLSAgICAgKiBvZiB0aGUgYnVmZmVyIGFuZCBleHBlY3QgdGhlIGJ1ZmZlciByZWZlcmVuY2UgdG8gYmUga2VwdCB1bnRpbAorLSAgICAgKiB0aGUgYnVmZmVyIGlzIHVubWFwcGVkIGFnYWluLiAqLworLSAgICBnc3RfYnVmZmVyX3VucmVmIChpbmJ1Zik7CistICAgIGdzdF9idWZmZXJfdW5yZWYgKG91dGJ1Zik7CisgICAgIHJlcyA9IGZjbGFzcy0+dHJhbnNmb3JtX2ZyYW1lIChmaWx0ZXIsICZpbl9mcmFtZSwgJm91dF9mcmFtZSk7CistICAgIGdzdF9idWZmZXJfcmVmIChpbmJ1Zik7CistICAgIGdzdF9idWZmZXJfcmVmIChvdXRidWYpOworIAorICAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKCZvdXRfZnJhbWUpOworICAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKCZpbl9mcmFtZSk7CitAQCAtMzE3LDcgKzMwOSw3IEBAIGdzdF92aWRlb19maWx0ZXJfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEJ1ZmZlciAqIGJ1ZikKKyAgICAgR3N0VmlkZW9GcmFtZSBmcmFtZTsKKyAgICAgR3N0TWFwRmxhZ3MgZmxhZ3M7CisgCistICAgIGZsYWdzID0gR1NUX01BUF9SRUFEOworKyAgICBmbGFncyA9IEdTVF9NQVBfUkVBRCB8IEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUY7CisgCisgICAgIGlmICghZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Bhc3N0aHJvdWdoICh0cmFucykpCisgICAgICAgZmxhZ3MgfD0gR1NUX01BUF9XUklURTsKK0BAIC0zMjUsMTQgKzMxNyw3IEBAIGdzdF92aWRlb19maWx0ZXJfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEJ1ZmZlciAqIGJ1ZikKKyAgICAgaWYgKCFnc3RfdmlkZW9fZnJhbWVfbWFwICgmZnJhbWUsICZmaWx0ZXItPmluX2luZm8sIGJ1ZiwgZmxhZ3MpKQorICAgICAgIGdvdG8gaW52YWxpZF9idWZmZXI7CisgCistICAgIC8qIEdzdFZpZGVvRnJhbWUgaGFzIGFub3RoZXIgcmVmZXJlbmNlLCBzbyB0aGUgYnVmZmVyIGxvb2tzIHVud3JpdGVhYmxlLAorLSAgICAgKiBtZWFuaW5nIHRoYXQgd2UgY2FuJ3QgYXR0YWNoIGFueSBtZXRhcyBvciBhbnl0aGluZyB0byBpdC4gT3RoZXIKKy0gICAgICogbWFwKCkgZnVuY3Rpb25zIGxpa2UgZ3N0X2J1ZmZlcl9tYXAoKSBkb24ndCBnZXQgYW5vdGhlciByZWZlcmVuY2UKKy0gICAgICogb2YgdGhlIGJ1ZmZlciBhbmQgZXhwZWN0IHRoZSBidWZmZXIgcmVmZXJlbmNlIHRvIGJlIGtlcHQgdW50aWwKKy0gICAgICogdGhlIGJ1ZmZlciBpcyB1bm1hcHBlZCBhZ2Fpbi4gKi8KKy0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKKyAgICAgcmVzID0gZmNsYXNzLT50cmFuc2Zvcm1fZnJhbWVfaXAgKGZpbHRlciwgJmZyYW1lKTsKKy0gICAgZ3N0X2J1ZmZlcl9yZWYgKGJ1Zik7CisgCisgICAgIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJmZyYW1lKTsKKyAgIH0gZWxzZSB7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDA0LXN1YnBhcnNlLXNldC1uZWVkX3NlZ21lbnQtYWZ0ZXItc2luay1wYWQtcmVjZWl2ZWQtR1MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDQtc3VicGFyc2Utc2V0LW5lZWRfc2VnbWVudC1hZnRlci1zaW5rLXBhZC1yZWNlaXZlZC1HUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODEzOTE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDA0LXN1YnBhcnNlLXNldC1uZWVkX3NlZ21lbnQtYWZ0ZXItc2luay1wYWQtcmVjZWl2ZWQtR1MucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorRnJvbSBlZDA5YzhmZDJjOWMyYjUzODRiNzJjYzcwYWYzNzI4YmU2Njk0ZTY0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWluZ2tlIFdhbmcgPG1pbmdrZS53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiBUaHUsIDE5IE1hciAyMDE1IDE0OjIwOjI2ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggNC80XSBzdWJwYXJzZTogc2V0IG5lZWRfc2VnbWVudCBhZnRlciBzaW5rIHBhZCByZWNlaXZlZAorIEdTVF9FVkVOVF9TRUdNRU5UCisKK3N1YnBhcnNlIHdvcmtzIGluIHB1c2ggbW9kZSwgY2hhaW4gZnVuY2l0b24gd2lsbCBiZSBjYWxsZWQgb25jZQordXAgc3RyZWFtIGVsZW1lbnQgZmluaXNoZWQgdGhlIHNlZWtpbmcgYW5kIGZsdXNoaW5nLgoraWYgc2V0IG5lZWRfc2VnbWVudCBmbGFnIGluIHNyYyBwYWQgZXZlbnQgaGFuZGxlciwgdGhlIHNlZ21lbnQKK2V2ZW50IHdpbGwgYmUgcHVzaGVkIGVhcmxpZXIsIHJlc3VsdCBpbiB0aGUgc3VidGl0bGUgdGV4dCB3aWxsCitiZSBzZW5kIG91dCB0byBkb3duIHN0cmVhbSBmcm9tIHRoZSBiZWdpbm5pbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3NDk4XQorCitTaWduZWQtb2ZmLWJ5OiBNaW5na2UgV2FuZyA8bWluZ2tlLndhbmdAZnJlZXNjYWxlLmNvbT4KKworZGlmZiAtLWdpdCBhL2dzdC9zdWJwYXJzZS9nc3RzdWJwYXJzZS5jIGIvZ3N0L3N1YnBhcnNlL2dzdHN1YnBhcnNlLmMKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CitpbmRleCBiNTY1ZTkzLi43NzQxY2NjCistLS0gYS9nc3Qvc3VicGFyc2UvZ3N0c3VicGFyc2UuYworKysrIGIvZ3N0L3N1YnBhcnNlL2dzdHN1YnBhcnNlLmMKK0BAIC0yNjYsMjIgKzI2NiwyMCBAQCBnc3Rfc3ViX3BhcnNlX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCisgICAgICAgICBnb3RvIGJlYWNoOworICAgICAgIH0KKyAKKysgICAgICAvKiBBcHBseSB0aGUgc2VlayB0byBvdXIgc2VnbWVudCAqLworKyAgICAgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWxmLT5zZWdtZW50LCByYXRlLCBmb3JtYXQsIGZsYWdzLAorKyAgICAgICAgICBzdGFydF90eXBlLCBzdGFydCwgc3RvcF90eXBlLCBzdG9wLCAmdXBkYXRlKTsKKysKKysgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAic2VnbWVudCBhZnRlciBzZWVrOiAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsCisrICAgICAgICAgICZzZWxmLT5zZWdtZW50KTsKKysKKyAgICAgICAvKiBDb252ZXJ0IHRoYXQgc2VlayB0byBhIHNlZWtpbmcgaW4gYnl0ZXMgYXQgcG9zaXRpb24gMCwKKyAgICAgICAgICBGSVhNRTogY291bGQgdXNlIGFuIGluZGV4ICovCisgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzZWxmLT5zaW5rcGFkLAorICAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZWsgKHJhdGUsIEdTVF9GT1JNQVRfQllURVMsIGZsYWdzLAorICAgICAgICAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIDAsIEdTVF9TRUVLX1RZUEVfTk9ORSwgMCkpOworIAorLSAgICAgIGlmIChyZXQpIHsKKy0gICAgICAgIC8qIEFwcGx5IHRoZSBzZWVrIHRvIG91ciBzZWdtZW50ICovCistICAgICAgICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VsZi0+c2VnbWVudCwgcmF0ZSwgZm9ybWF0LCBmbGFncywKKy0gICAgICAgICAgICBzdGFydF90eXBlLCBzdGFydCwgc3RvcF90eXBlLCBzdG9wLCAmdXBkYXRlKTsKKy0KKy0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJzZWdtZW50IGFmdGVyIHNlZWs6ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwKKy0gICAgICAgICAgICAmc2VsZi0+c2VnbWVudCk7CistCistICAgICAgICBzZWxmLT5uZWVkX3NlZ21lbnQgPSBUUlVFOworLSAgICAgIH0gZWxzZSB7CisrICAgICAgaWYgKCFyZXQpIHsKKyAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc2VsZiwgInNlZWsgdG8gMCBieXRlcyBmYWlsZWQiKTsKKyAgICAgICB9CisgCitAQCAtMTYzMiw4ICsxNjMwLDEwIEBAIGdzdF9zdWJfcGFyc2Vfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCisgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnQgKGV2ZW50LCAmcyk7CisgICAgICAgaWYgKHMtPmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpCisgICAgICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJnNlbGYtPnNlZ21lbnQpOworLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJuZXdzZWdtZW50ICglcykiLAorLSAgICAgICAgICBnc3RfZm9ybWF0X2dldF9uYW1lIChzZWxmLT5zZWdtZW50LmZvcm1hdCkpOworKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJuZXdzZWdtZW50ICglcykgJSIgR1NUX1NFR01FTlRfRk9STUFULAorKyAgICAgICAgICBnc3RfZm9ybWF0X2dldF9uYW1lIChzZWxmLT5zZWdtZW50LmZvcm1hdCksICZzZWxmLT5zZWdtZW50KTsKKysKKysgICAgICBzZWxmLT5uZWVkX3NlZ21lbnQgPSBUUlVFOworIAorICAgICAgIC8qIGlmIG5vdCB0aW1lIGZvcm1hdCwgd2UnbGwgZWl0aGVyIHN0YXJ0IHdpdGggYSAwIHRpbWVzdGFtcCBhbnl3YXkgb3IKKyAgICAgICAgKiBpdCdzIGZvbGxvd2luZyBhIHNlZWsgaW4gd2hpY2ggY2FzZSB3ZSdsbCBoYXZlIHNhdmVkIHRoZSByZXF1ZXN0ZWQKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudC1pZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50LWlmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNTVkZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudC1pZi5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIGI2MDhkMDI3ZmZmNmVmYzJkMTk4OGViZjE2OWNiZTNiMmI0NGE2MWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiB6aG91bWluZyA8YjQyNTg2QGZyZWVzY2FsZS5jb20+CitEYXRlOiBUaHUsIDggTWF5IDIwMTQgMTI6MDE6MTcgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRU5HUjAwMzEyMDM0OiBkbyBub3QgY2hhbmdlIGVvcyBldmVudCB0byBnYXAgZXZlbnQgaWYgbm8KKyBkYXRhIGhhcyBwYXNzZWQgdG8gc3RyZWFtc3luY2hyb25pemVyLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3MDc0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiB6aG91bWluZyA8YjQyNTg2QGZyZWVzY2FsZS5jb20+CistLS0KKyBnc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMgfCAgICA1ICsrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYyBiL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworaW5kZXggMzk5N2QxYi4uM2UxN2M1NSAxMDA2NDQKKy0tLSBhL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworKysrIGIvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jCitAQCAtNDg4LDEyICs0ODgsMTEgQEAgZ3N0X3N0cmVhbV9zeW5jaHJvbml6ZXJfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCisgICAgICAgICB9CisgICAgICAgICBnX3NsaXN0X2ZyZWUgKHBhZHMpOworICAgICAgIH0gZWxzZSB7CistICAgICAgICAvKiBpZiBFT1MsIGJ1dCBubyBkYXRhIGhhcyBwYXNzZWQsIHRoZW4gc2VuZCBzb21ldGhpbmcgdG8gcmVwbGFjZSBFT1MKKy0gICAgICAgICAqIGZvciBwcmVyb2xsIHB1cnBvc2VzICovCisrICAgICAgICAvKiBpZiBFT1MsIGJ1dCBubyBkYXRhIGhhcyBwYXNzZWQsIHRoZW4gc2VuZCBFT1MgZXZlbnQgKi8KKyAgICAgICAgIGlmICghc2Vlbl9kYXRhKSB7CisgICAgICAgICAgIEdzdEV2ZW50ICpnYXBfZXZlbnQ7CisgCistICAgICAgICAgIGdhcF9ldmVudCA9IGdzdF9ldmVudF9uZXdfZ2FwICh0aW1lc3RhbXAsIEdTVF9DTE9DS19USU1FX05PTkUpOworKyAgICAgICAgICBnYXBfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKKyAgICAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdhcF9ldmVudCk7CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICBHc3RFdmVudCAqZ2FwX2V2ZW50OworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50Mi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMjRiYzdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9kby1ub3QtY2hhbmdlLWVvcy1ldmVudC10by1nYXAtZXZlbnQyLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK2NvbW1pdCBmOTUzNjU0NGY1YWQxODJiNGY3OGQwMTQzZDFkYWE0NWRkNjRlNjI0CitBdXRob3I6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBPY3QgOSAxNzozNzo0MyAyMDE0ICswODAwCisKK1tnc3RzdHJlYW1zeW5jaHJvbml6ZXJdIHNlbmQgRU9TIGV2ZW50IGluc3RlcmQgb2YgR0FQIGV2ZW50IGFzIEdBUAorZXZlbnQgaGFzIGlzc3VlIHdoZW4gQS9WIGhhdmUgZGlmZmVyZW50IGR1cmF0aW9uLgorICAgIAorc2VuZCBFT1MgZXZlbnQgaW5zdGVyZCBvZiBHQVAgZXZlbnQgYXMgR0FQIGV2ZW50IGhhcyBpc3N1ZSB3aGVuIEEvViBoYXZlIGRpZmZlcmVudCBkdXJhdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY2NTVdCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CisKK2RpZmYgLS1naXQgYS9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMgYi9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMKK2luZGV4IDNlMTdjNTUuLmZmNDJkNzIgMTAwNjQ0CistLS0gYS9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMKKysrKyBiL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworQEAgLTQ4OCwxOSArNDg4LDI0IEBAIGdzdF9zdHJlYW1fc3luY2hyb25pemVyX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAorICAgICAgICAgfQorICAgICAgICAgZ19zbGlzdF9mcmVlIChwYWRzKTsKKyAgICAgICB9IGVsc2UgeworLSAgICAgICAgLyogaWYgRU9TLCBidXQgbm8gZGF0YSBoYXMgcGFzc2VkLCB0aGVuIHNlbmQgRU9TIGV2ZW50ICovCisrICAgICAgICAvKiBpZiBFT1MsIGJ1dCBubyBkYXRhIGhhcyBwYXNzZWQsIHRoZW4gc2VuZCBzb21ldGhpbmcgdG8gcmVwbGFjZSBFT1MKKysgICAgICAgICAqIGZvciBwcmVyb2xsIHB1cnBvc2VzICovCisgICAgICAgICBpZiAoIXNlZW5fZGF0YSkgeworLSAgICAgICAgICBHc3RFdmVudCAqZ2FwX2V2ZW50OworKyAgICAgICAgICBHc3RFdmVudCAqZW9zX2V2ZW50OworIAorLSAgICAgICAgICBnYXBfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKKy0gICAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdhcF9ldmVudCk7CisrICAgICAgICAgIC8qIEZJWE1FOiBjaGFuZ2UgdG8gRU9TIGV2ZW50IGFzIEdBUCBldmVudCBoYXMgaXNzdWUgd2hlbiBBL1YgaGF2ZQorKyAgICAgICAgICAgKiBkaWZmZXJlbnQgZHVyYXRpb24gKi8KKysgICAgICAgICAgZW9zX2V2ZW50ID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7CisrICAgICAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBlb3NfZXZlbnQpOworICAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgR3N0RXZlbnQgKmdhcF9ldmVudDsKKysgICAgICAgICAgR3N0RXZlbnQgKmVvc19ldmVudDsKKyAKKyAgICAgICAgICAgLyogRklYTUU6IEFsc28gc2VuZCBhIEdBUCBldmVudCB0byBsZXQgYXVkaW8gc2lua3Mgc3RhcnQgdGhlaXIKKyAgICAgICAgICAgICogY2xvY2sgaW4gY2FzZSB0aGV5IGRpZCBub3QgaGF2ZSBlbm91Z2ggZGF0YSB5ZXQgKi8KKy0gICAgICAgICAgZ2FwX2V2ZW50ID0gZ3N0X2V2ZW50X25ld19nYXAgKHRpbWVzdGFtcCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CistICAgICAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBnYXBfZXZlbnQpOworKyAgICAgICAgICAvKiBGSVhNRTogY2hhbmdlIHRvIEVPUyBldmVudCBhcyBHQVAgZXZlbnQgaGFzIGlzc3VlIHdoZW4gQS9WIGhhdmUKKysgICAgICAgICAgICogZGlmZmVyZW50IGR1cmF0aW9uICovCisrICAgICAgICAgIGVvc19ldmVudCA9IGdzdF9ldmVudF9uZXdfZW9zICgpOworKyAgICAgICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZW9zX2V2ZW50KTsKKyAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50My5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50My5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MzFiZTY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9kby1ub3QtY2hhbmdlLWVvcy1ldmVudC10by1nYXAtZXZlbnQzLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK2NvbW1pdCAzZjcwNTJhYWM1ZTAxMThhOWE5ZTA5ZmZmMmY2NTA5MWJlNDQ4OTcyCitBdXRob3I6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBPY3QgMjMgMTM6MzU6MTMgMjAxNCArMDgwMAorCitbc3RyZWFtc3luY2hyb25pemVyXSBPbmUgc3RyZWFtIGNhbiBmaW5pc2ggcGxheWJhY2suCisgIAorQXMgY2hhbmdlZCBHQVAgZXZlbnQgRU9TIGV2ZW50LCBzbyBFT1Mgd2lsbCBzZW5kIG1vcmUgdGltZXMsIHdoaWNoIHdpbGwKK2NhdXNlIHNlbmQgZnVuY3Rpb24gcmV0dXJuIGVycm9yLgorU3RyZWFtc3luY2hyb25pemVyIHdpbGwgZG9u4oCZdCBzZW5kIHNlY29uZCB0cmFjayBFT1MgZXZlbnQgaWYgc2VuZCB0aGUKK2ZpcnN0IHRyYWNrIEVPUyByZXR1cm4gZmFpbC4gRml4ZWQgYnkgaWdub3JlIHRoZSByZXR1cm4gZXJyb3IuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2NjU1XQorCitTaWduZWQtb2ZmLWJ5OiBTb25nIEJpbmcgYjA2NDk4QGZyZWVzY2FsZS5jb20KKworZGlmZiAtLWdpdCBhL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYyBiL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworaW5kZXggZmY0MmQ3Mi4uZDE3MzJjMyAxMDA2NDQKKy0tLSBhL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworKysrIGIvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jCitAQCAtNDgyLDcgKzQ4MiwxMCBAQCBnc3Rfc3RyZWFtX3N5bmNocm9uaXplcl9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKKyAgICAgICAgIHdoaWxlIChlcGFkKSB7CisgICAgICAgICAgIHBhZCA9IGVwYWQtPmRhdGE7CisgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIlB1c2hpbmcgRU9TIik7CistICAgICAgICAgIHJldCA9IHJldCAmJiBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOworKyAgICAgICAgICAvKiBGSVhNRTogcmVtb3ZlIGVycm9yIGNoZWNrIGFzIEdBUCBjaGFuZ2VkIHRvIEVPUyB3aWxsIHNlbmQgRU9TCisrICAgICAgICAgICAqIG1vcmUgdGltZXMsIHdoaWNoIHdpbGwgY2F1c2UgcmV0dXJuIGVycm9yIGFuZCB0aGVuIGRvbid0IHNlbmQKKysgICAgICAgICAgICogRU9TIGV2ZW50IHRvIGZvbGxvd2luZyB0cmFja3MuICovCisrICAgICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7CisgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7CisgICAgICAgICAgIGVwYWQgPSBnX3NsaXN0X25leHQgKGVwYWQpOworICAgICAgICAgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9lbmNvZGViaW4tTmVlZC1tb3JlLWJ1ZmZlcnMtaW4tb3V0cHV0LXF1ZXVlLWZvci1iZXR0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9lbmNvZGViaW4tTmVlZC1tb3JlLWJ1ZmZlcnMtaW4tb3V0cHV0LXF1ZXVlLWZvci1iZXR0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNTY3MTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2VuY29kZWJpbi1OZWVkLW1vcmUtYnVmZmVycy1pbi1vdXRwdXQtcXVldWUtZm9yLWJldHQucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA1NDBlMDJjOTJjNzVlMDhiOTAzMjY4NjNkYzc4N2ZhNWNhZGY5ZGE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IEZyaSwgMTMgTWFyIDIwMTUgMTg6MDQ6MzEgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZW5jb2RlYmluOiBOZWVkIG1vcmUgYnVmZmVycyBpbiBvdXRwdXQgcXVldWUgZm9yIGJldHRlcgorIHBlcmZvcm1hbmNlCisKK05lZWQgbW9yZSBidWZmZXJzIGluIG91dHB1dCBxdWV1ZSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0MTkxXQorCitTaWduZWQtb2ZmLWJ5OiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorLS0tCisgZ3N0L2VuY29kaW5nL2dzdGVuY29kZWJpbi5jIHwgICAgMyArLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nc3QvZW5jb2RpbmcvZ3N0ZW5jb2RlYmluLmMgYi9nc3QvZW5jb2RpbmcvZ3N0ZW5jb2RlYmluLmMKK2luZGV4IDY3MjhlNTguLjMyZGFhZTQgMTAwNjQ0CistLS0gYS9nc3QvZW5jb2RpbmcvZ3N0ZW5jb2RlYmluLmMKKysrKyBiL2dzdC9lbmNvZGluZy9nc3RlbmNvZGViaW4uYworQEAgLTExMzgsOCArMTEzOCw3IEBAIF9jcmVhdGVfc3RyZWFtX2dyb3VwIChHc3RFbmNvZGVCaW4gKiBlYmluLCBHc3RFbmNvZGluZ1Byb2ZpbGUgKiBzcHJvZiwKKyAgICAqIFdlIG9ubHkgdXNlIGEgMWJ1ZmZlciBsb25nIHF1ZXVlIGhlcmUsIHRoZSBhY3R1YWwgcXVldWVpbmcgd2lsbCBiZSBkb25lCisgICAgKiBpbiB0aGUgaW5wdXQgcXVldWUgKi8KKyAgIGxhc3QgPSBzZ3JvdXAtPm91dHF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUiLCBOVUxMKTsKKy0gIGdfb2JqZWN0X3NldCAoc2dyb3VwLT5vdXRxdWV1ZSwgIm1heC1zaXplLWJ1ZmZlcnMiLCAoZ3VpbnQzMikgMSwKKy0gICAgICAibWF4LXNpemUtYnl0ZXMiLCAoZ3VpbnQzMikgMCwgIm1heC1zaXplLXRpbWUiLCAoZ3VpbnQ2NCkgMCwKKysgIGdfb2JqZWN0X3NldCAoc2dyb3VwLT5vdXRxdWV1ZSwgIm1heC1zaXplLXRpbWUiLCAoZ3VpbnQ2NCkgMCwKKyAgICAgICAic2lsZW50IiwgVFJVRSwgTlVMTCk7CisgCisgICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoZWJpbiksIHNncm91cC0+b3V0cXVldWUpOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZml4LWlkM2RlbXV4LXV0ZjE2LXRvLXV0ZjgtaXNzdWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2ZpeC1pZDNkZW11eC11dGYxNi10by11dGY4LWlzc3VlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVmM2Y3NWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2ZpeC1pZDNkZW11eC11dGYxNi10by11dGY4LWlzc3VlLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0F1dGhvcjogTHlvbiBXYW5nIDxiMTI2OTZAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVGh1IE9jdCA5IDE3OjM3OjQzIDIwMTQgKzA4MDAKKworW2lkM3YyZnJhbWVzXSBCdWcgZml4IGZvciBpZDNkZW11eCBpc3N1ZQorCitGaXggdGhlIGlzc3VlIHRoYXQgaWQzIHRhZ3MgdXRmMTYgY2hhcmF0ZXJzIGNhbm5vdCBiZSBleHRyZWFjdGVkIGluIGlkM2RlbXV4Cit3aGVuIEkgdHJpZWQgdG8gZ2V0IHRoZSBpZDN2MiB0YWcgc3VjaCBhcyBUSVQyLCBUQUxCIGV0Yy4gaXQgd2lsbCByZXR1cm4gZXh0cmFjCitmYWlsZWQuCisKK0NoZWNrZWQgaW4gaWQzdjJmcmFtZS5jLCAgV2hlbiBwYXJzZSB0aGUgVVRGLTE2IHN0cmVhbXMsIGl0IHVzZWQgZ19jb252ZXJ0KCkgdG8KK2NvbnZlcnQgdGhlIGJ1ZmZlciBmcm9tIFVURi0xNiB0byBVVEYtOCwgaG93ZXZlciBpdCB3aWxsIHJldHVybiBlcnIgdGhhdCB0aGlzCitjb252ZXJzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2hpY2ggY2F1c2UgdGhlIGV4dHJhY3Rpb24gZmFpbGVkIHdpdGggdGhlc2UgVVRGLTE2CitjaGFyYWN0ZXJzLgorCitJbiB0aGUgcGF0Y2gsIHVzZSBnX3V0ZjE2X3RvX3V0ZjgoKSBpbnN0ZWFkIG9mIGdfY29udmVydCwgd2hpY2ggY2FuIGNvbnZlcnQgdGhlCitjaGFyYWN0ZXIgZm9ybWF0IHN1Y2Nlc3NmdWxseS4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTE0NAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjUuMV0KKworU2lnbmVkLW9mZi1ieTogTHlvbiBXYW5nIDxiMTI2OTZAZnJlZXNjYWxlLmNvbT4KKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC90YWcvaWQzdjJmcmFtZXMuYyBiL2dzdC1saWJzL2dzdC90YWcvaWQzdjJmcmFtZXMuYworb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2luZGV4IDM3ODVjMmEuLjdiOWQ4YWMKKy0tLSBhL2dzdC1saWJzL2dzdC90YWcvaWQzdjJmcmFtZXMuYworKysrIGIvZ3N0LWxpYnMvZ3N0L3RhZy9pZDN2MmZyYW1lcy5jCitAQCAtMTA1NywxNCArMTA1NywxNyBAQCBwYXJzZV9pbnNlcnRfc3RyaW5nX2ZpZWxkIChndWludDggZW5jb2RpbmcsIGdjaGFyICogZGF0YSwgZ2ludCBkYXRhX3NpemUsCisgICAgICAgICBkYXRhX3NpemUgLT0gMjsKKyAgICAgICB9CisgCistICAgICAgZmllbGQgPSBnX2NvbnZlcnQgKGRhdGEsIGRhdGFfc2l6ZSwgIlVURi04IiwgaW5fZW5jb2RlLCBOVUxMLCBOVUxMLCBOVUxMKTsKKy0KKy0gICAgICBpZiAoZmllbGQgPT0gTlVMTCB8fCBnX3V0ZjhfdmFsaWRhdGUgKGZpZWxkLCAtMSwgTlVMTCkgPT0gRkFMU0UpIHsKKy0gICAgICAgIC8qIEFzIGEgZmFsbGJhY2ssIHRyeSBpbnRlcnByZXRpbmcgVVRGLTE2IGluIHRoZSBvdGhlciBlbmRpYW5uZXNzICovCistICAgICAgICBpZiAoaW5fZW5jb2RlID09IHV0ZjE2YmVlbmMpCistICAgICAgICAgIGZpZWxkID0gZ19jb252ZXJ0IChkYXRhLCBkYXRhX3NpemUsICJVVEYtOCIsIHV0ZjE2bGVlbmMsCistICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKKysgICAgICBpZiAoaW5fZW5jb2RlID09IHV0ZjE2YmVlbmMpIHsKKysgICAgICAgICAgIGd1bmljaGFyMiAqZGF0YV91dGYxNjsKKysgICAgICAgICAgIGd1aW50IGk7CisrICAgICAgICAgICBkYXRhX3V0ZjE2ID0gIChndW5pY2hhcjIgKikgZGF0YTsKKysgICAgICAgICAgZm9yIChpPTA7IGk8KGRhdGFfc2l6ZT4+MSk7IGkrKykgeworKyAgICAgICAgICAgIGRhdGFfdXRmMTZbaV0gPSBHVUlOVDE2X1RPX0xFIChkYXRhX3V0ZjE2W2ldKTsKKysgICAgICAgICAgfQorICAgICAgIH0KKysgICAgICAvL2ZpZWxkID0gZ19jb252ZXJ0IChkYXRhLCBkYXRhX3NpemUsICJVVEYtOCIsIGluX2VuY29kZSwgTlVMTCwgTlVMTCwgTlVMTCk7CisrICAgICAgIGZpZWxkID0gZ191dGYxNl90b191dGY4KChndW5pY2hhcjIgKilkYXRhLCAoZ2xvbmcpKGRhdGFfc2l6ZT4+MSksIE5VTEwsIE5VTEwsIE5VTEwpOworKworICAgICB9CisgCisgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2dldC1jYXBzLWZyb20tc3JjLXBhZC13aGVuLXF1ZXJ5LWNhcHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2dldC1jYXBzLWZyb20tc3JjLXBhZC13aGVuLXF1ZXJ5LWNhcHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg0YWJiZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZ2V0LWNhcHMtZnJvbS1zcmMtcGFkLXdoZW4tcXVlcnktY2Fwcy5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIGFmMGRhYzI2ZjYyYWFjZWI0YmYyNjY3MjA5MTE5NTM3OTNlMGZjNWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiB6aG91bWluZyA8YjQyNTg2QGZyZWVzY2FsZS5jb20+CitEYXRlOiBXZWQsIDE0IE1heSAyMDE0IDEwOjE2OjIwICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIEVOR1IwMDMxMjUxNTogZ2V0IGNhcHMgZnJvbSBzcmMgcGFkIHdoZW4gcXVlcnkgY2FwcworCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4MzEyCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiB6aG91bWluZyA8YjQyNTg2QGZyZWVzY2FsZS5jb20+CistLS0KKyBnc3QtbGlicy9nc3QvdGFnL2dzdHRhZ2RlbXV4LmMgfCAgIDEzICsrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKQorIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgZ3N0LWxpYnMvZ3N0L3RhZy9nc3R0YWdkZW11eC5jCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdGFnL2dzdHRhZ2RlbXV4LmMgYi9nc3QtbGlicy9nc3QvdGFnL2dzdHRhZ2RlbXV4LmMKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CitpbmRleCA5YjZjNDc4Li5hZTIyOTRhCistLS0gYS9nc3QtbGlicy9nc3QvdGFnL2dzdHRhZ2RlbXV4LmMKKysrKyBiL2dzdC1saWJzL2dzdC90YWcvZ3N0dGFnZGVtdXguYworQEAgLTE3MDgsNiArMTcwOCwxOSBAQCBnc3RfdGFnX2RlbXV4X3BhZF9xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCisgICAgICAgfQorICAgICAgIGJyZWFrOworICAgICB9CisrICAgIGNhc2UgR1NUX1FVRVJZX0NBUFM6CisrICAgIHsKKysKKysgICAgICAvKiBXZSBjYW4gaGlqYWNrIGNhcHMgcXVlcnkgaWYgd2UgdHlwZWZpbmQgYWxyZWFkeSAqLworKyAgICAgIGlmIChkZW11eC0+cHJpdi0+c3JjX2NhcHMpIHsKKysgICAgICAgIGdzdF9xdWVyeV9zZXRfY2Fwc19yZXN1bHQgKHF1ZXJ5LCBkZW11eC0+cHJpdi0+c3JjX2NhcHMpOworKyAgICAgICAgcmVzID0gVFJVRTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgfQorKworICAgICBkZWZhdWx0OgorICAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKKyAgICAgICBicmVhazsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2hhbmRsZS1hdWRpby12aWRlby1kZWNvZGVyLWVycm9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9oYW5kbGUtYXVkaW8tdmlkZW8tZGVjb2Rlci1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MzNjZTcyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9oYW5kbGUtYXVkaW8tdmlkZW8tZGVjb2Rlci1lcnJvci5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIGJjYjJiOGI2ZjQ5ZTdjNjYxMjRhNGY1ZTA3ZGVhODI5ZDVlYmZlNTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMeW9uIFdhbmcgPGx5b24ud2FuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogTW9uLCAxNSBEZWMgMjAxNCAxNjo1MjowNyArMDgwMAorU3ViamVjdDogW1BBVENIXSBoYW5kbGUgYXVkaW8vdmlkZW8gZGVjb2RlciBlcnJvcgorCitXaGVuIHRoZXJlIGlzIGlucHV0IGRhdGEgYW5kIG5vIG91dHB1dCBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSwgaXQgd2lsbAorc2VuZCBHU1RfRUxFTUVOVF9FUlJPUiwgU28gdGhlIGNsaXBzIHBsYXlpbmcgd2lsbCBxdWl0LgorSG93ZXZlciwgaWYgb25seSBvbmUgb2YgdGhlIHRyYWNrcyBpcyBjb3JydXB0LCB0aGVyZSBpcyBubyBuZWVkIHRvIHF1aXQgb3RoZXIKK3RyYWNrcyBwbGF5aW5nLgorCitUaGUgcGF0Y2ggY29tbWVudHMgdGhlIEdTVF9FTEVNRU5UX0VSUk9SKCkgYW5kIGp1c3QgYWRkIEdTVF9FUlJPUl9PQkpFQ1QoKQoraW5mb3JtYXRpb24gaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDE1NDJdCisKK1NpZ25lZC1vZmYtYnk6IEx5b24gV2FuZyA8bHlvbi53YW5nQGZyZWVzY2FsZS5jb20+CistLS0KKyBnc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMgfCAgICA1ICsrKy0tCisgZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jIHwgICAgNSArKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jCisgbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBnc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMKKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYyBiL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYworb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2luZGV4IGMyZTdhMjguLjg5MWRmMGEKKy0tLSBhL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYworKysrIGIvZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jCitAQCAtMjEyMyw5ICsyMTIzLDEwIEBAIGdzdF9hdWRpb19kZWNvZGVyX3NpbmtfZXZlbnRmdW5jIChHc3RBdWRpb0RlY29kZXIgKiBkZWMsIEdzdEV2ZW50ICogZXZlbnQpCisgICAgICAgR1NUX0FVRElPX0RFQ09ERVJfU1RSRUFNX1VOTE9DSyAoZGVjKTsKKyAKKyAgICAgICBpZiAoZGVjLT5wcml2LT5jdHguaGFkX2lucHV0X2RhdGEgJiYgIWRlYy0+cHJpdi0+Y3R4LmhhZF9vdXRwdXRfZGF0YSkgeworLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGRlYywgU1RSRUFNLCBERUNPREUsCisrICAgICAgICAvKiBHU1RfRUxFTUVOVF9FUlJPUiAoZGVjLCBTVFJFQU0sIERFQ09ERSwKKyAgICAgICAgICAgICAoIk5vIHZhbGlkIGZyYW1lcyBkZWNvZGVkIGJlZm9yZSBlbmQgb2Ygc3RyZWFtIiksCistICAgICAgICAgICAgKCJubyB2YWxpZCBmcmFtZXMgZm91bmQiKSk7CisrICAgICAgICAgICAgKCJubyB2YWxpZCBmcmFtZXMgZm91bmQiKSk7ICovCisrICAgICAgICBHU1RfRVJST1JfT0JKRUNUKGRlYywgIk5vIHZhbGlkIGZyYW1lcyBkZWNvZGVkIGJlZm9yZSBlbmQgb2Ygc3RyZWFtIik7CisgICAgICAgfQorIAorICAgICAgIC8qIHNlbmQgdGFnbGlzdCBpZiBubyB2YWxpZCBmcmFtZSBpcyBkZWNvZGVkIHV0aWwgRU9TICovCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jCitvbGQgbW9kZSAxMDA2NDQKK25ldyBtb2RlIDEwMDc1NQoraW5kZXggYWM1ODFlMS4uNDI3OGJjZAorLS0tIGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jCisrKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMKK0BAIC0xMDY4LDkgKzEwNjgsMTAgQEAgZ3N0X3ZpZGVvX2RlY29kZXJfc2lua19ldmVudF9kZWZhdWx0IChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyLAorIAorICAgICAgIC8qIEVycm9yIG91dCBldmVuIGlmIEVPUyB3YXMgb2sgd2hlbiB3ZSBoYWQgaW5wdXQsIGJ1dCBubyBvdXRwdXQgKi8KKyAgICAgICBpZiAocmV0ICYmIHByaXYtPmhhZF9pbnB1dF9kYXRhICYmICFwcml2LT5oYWRfb3V0cHV0X2RhdGEpIHsKKy0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkZWNvZGVyLCBTVFJFQU0sIERFQ09ERSwKKysgICAgICAgIC8qIEdTVF9FTEVNRU5UX0VSUk9SIChkZWNvZGVyLCBTVFJFQU0sIERFQ09ERSwKKyAgICAgICAgICAgICAoIk5vIHZhbGlkIGZyYW1lcyBkZWNvZGVkIGJlZm9yZSBlbmQgb2Ygc3RyZWFtIiksCistICAgICAgICAgICAgKCJubyB2YWxpZCBmcmFtZXMgZm91bmQiKSk7CisrICAgICAgICAgICAgKCJubyB2YWxpZCBmcmFtZXMgZm91bmQiKSk7ICovCisrICAgICAgICBHU1RfRVJST1JfT0JKRUNUKGRlY29kZXIsICJObyB2YWxpZCBmcmFtZXMgZGVjb2RlZCBiZWZvcmUgZW5kIG9mIHN0cmVhbSIpOworICAgICAgIH0KKyAKKyAgICAgICAvKiBGb3J3YXJkIEVPUyBpbW1lZGlhdGVseS4gVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIG5vCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS90YWdsaXN0LW5vdC1zZW5kLXRvLWRvd24tc3RyZWFtLWlmLWFsbC10aGUtZnJhbWUtY29yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS90YWdsaXN0LW5vdC1zZW5kLXRvLWRvd24tc3RyZWFtLWlmLWFsbC10aGUtZnJhbWUtY29yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYTUyYjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3RhZ2xpc3Qtbm90LXNlbmQtdG8tZG93bi1zdHJlYW0taWYtYWxsLXRoZS1mcmFtZS1jb3IucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSA2OGZhMWIxNDI1YWQyYzVmN2M1MDEzZDA5NDMxNTNhOGE2ZDA5MzRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmlhbiBMaSA8bGoucWZ5LnNoQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjQgU2VwIDIwMTQgMTc6MjE6MDIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gdGFnbGlzdCBub3Qgc2VuZCB0byBkb3duIHN0cmVhbSBpZiBhbGwgdGhlIGZyYW1lIGNvcnJ1cHRlZAorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3MjQ2CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKaWFuIExpIDxsai5xZnkuc2hAZ21haWwuY29tPgorLS0tCisgZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jIHwgICAgOSArKysrKysrKysKKyBnc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMgfCAgICA4ICsrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMgYi9nc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMKK2luZGV4IDM1MDQ2NzguLjNkNjllZmUgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMKKysrKyBiL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYworQEAgLTIwODMsNiArMjA4MywxNSBAQCBnc3RfYXVkaW9fZGVjb2Rlcl9zaW5rX2V2ZW50ZnVuYyAoR3N0QXVkaW9EZWNvZGVyICogZGVjLCBHc3RFdmVudCAqIGV2ZW50KQorICAgICAgIGdzdF9hdWRpb19kZWNvZGVyX2RyYWluIChkZWMpOworICAgICAgIEdTVF9BVURJT19ERUNPREVSX1NUUkVBTV9VTkxPQ0sgKGRlYyk7CisgCisrICAgICAgLyogc2VuZCB0YWdsaXN0IGlmIG5vIHZhbGlkIGZyYW1lIGlzIGRlY29kZWQgdXRpbCBFT1MgKi8KKysgICAgICBpZiAoZGVjLT5wcml2LT50YWdsaXN0ICYmIGRlYy0+cHJpdi0+dGFnbGlzdF9jaGFuZ2VkKSB7CisrICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZWMsICJjb2RlYyB0YWcgJSIgR1NUX1BUUl9GT1JNQVQsIGRlYy0+cHJpdi0+dGFnbGlzdCk7CisrICAgICAgICBpZiAoIWdzdF90YWdfbGlzdF9pc19lbXB0eSAoZGVjLT5wcml2LT50YWdsaXN0KSkKKysgICAgICAgICAgZ3N0X2F1ZGlvX2RlY29kZXJfcHVzaF9ldmVudCAoZGVjLAorKyAgICAgICAgICAgICAgZ3N0X2V2ZW50X25ld190YWcgKGdzdF90YWdfbGlzdF9yZWYgKGRlYy0+cHJpdi0+dGFnbGlzdCkpKTsKKysgICAgICAgIGRlYy0+cHJpdi0+dGFnbGlzdF9jaGFuZ2VkID0gRkFMU0U7CisrICAgICAgfQorKworICAgICAgIC8qIEZvcndhcmQgRU9TIGJlY2F1c2Ugbm8gYnVmZmVyIG9yIHNlcmlhbGl6ZWQgZXZlbnQgd2lsbCBjb21lIGFmdGVyCisgICAgICAgICogRU9TIGFuZCBub3RoaW5nIGNvdWxkIHRyaWdnZXIgYW5vdGhlciBfZmluaXNoX2ZyYW1lKCkgY2FsbC4gKi8KKyAgICAgICByZXQgPSBnc3RfYXVkaW9fZGVjb2Rlcl9wdXNoX2V2ZW50IChkZWMsIGV2ZW50KTsKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMKK2luZGV4IGRkOGFiZTMuLmQ5YmZlNGQgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMKKysrKyBiL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYworQEAgLTEwMjQsNiArMTAyNCwxNCBAQCBnc3RfdmlkZW9fZGVjb2Rlcl9zaW5rX2V2ZW50X2RlZmF1bHQgKEdzdFZpZGVvRGVjb2RlciAqIGRlY29kZXIsCisgICAgICAgICogcGFyZW50IGNsYXNzJyA6OnNpbmtfZXZlbnQoKSB1bnRpbCBhIGxhdGVyIHRpbWUuCisgICAgICAgICovCisgICAgICAgZm9yd2FyZF9pbW1lZGlhdGUgPSBUUlVFOworKworKyAgICAgIC8qIHNlbmQgdGFnbGlzdCBpZiBubyB2YWxpZCBmcmFtZSBpcyBkZWNvZGVkIHV0aWwgRU9TICovCisrICAgICAgaWYgKGRlY29kZXItPnByaXYtPnRhZ3MgJiYgZGVjb2Rlci0+cHJpdi0+dGFnc19jaGFuZ2VkKSB7CisrICAgICAgICBnc3RfdmlkZW9fZGVjb2Rlcl9wdXNoX2V2ZW50IChkZWNvZGVyLAorKyAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfdGFnIChnc3RfdGFnX2xpc3RfcmVmIChkZWNvZGVyLT5wcml2LT50YWdzKSkpOworKyAgICAgICAgZGVjb2Rlci0+cHJpdi0+dGFnc19jaGFuZ2VkID0gRkFMU0U7CisrICAgICAgfQorKworICAgICAgIGJyZWFrOworICAgICB9CisgICAgIGNhc2UgR1NUX0VWRU5UX0dBUDoKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3ZpZGVvYnVmZmVyX3VwZGF0YV9hbGlnbm1lbnRfdXBkYXRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS92aWRlb2J1ZmZlcl91cGRhdGFfYWxpZ25tZW50X3VwZGF0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44Y2ZkYTk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS92aWRlb2J1ZmZlcl91cGRhdGFfYWxpZ25tZW50X3VwZGF0ZS5wYXRjaApAQCAtMCwwICsxLDUzIEBACitjb21taXQgODhkMjUzZWEyM2IwNjI4OWRmNDA0MDExNjBiNjA2MzIzZjE2YzkxMAorQXV0aG9yOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBNb24gRGVjIDE1IDA5OjM0OjM1IDIwMTQgKzA4MDAKKwordmlkZW9wb29sOiB1cGRhdGUgdmlkZW8gYWxpZ25tZW50IGFmdGVyIHZpZGVvIGFsaWdubWVudAorCitWaWRlbyBidWZmZXIgcG9vbCB3aWxsIHVwZGF0ZSB2aWRlbyBhbGlnbm1lbnQgdG8gcmVzcGVjdCBzdHJpZGUgYWxpZ25tZW50CityZXF1aXJlbWVudC4gQnV0IGhhdmVuJ3QgdXBkYXRlIGl0IHRvIHZpZGVvIGFsaWdubWVudCBpbiBjb25maWd1cmUuCitXaGljaCB3aWxsIGNhdXNlIHVzZXIgZ2V0IHdyb25nIHZpZGVvIGFsaWdubWVudC4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTUwMQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjUuMV0KKworU2lnbmVkLW9mZi1ieTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9wb29sLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9wb29sLmMKK2luZGV4IDQ0NzVmNDUuLmFjZWY1OTQgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9wb29sLmMKKysrKyBiL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb3Bvb2wuYworQEAgLTE2Nyw2ICsxNjcsNyBAQCB2aWRlb19idWZmZXJfcG9vbF9zZXRfY29uZmlnIChHc3RCdWZmZXJQb29sICogcG9vbCwgR3N0U3RydWN0dXJlICogY29uZmlnKQorICAgICAvKiBnZXQgYW4gYXBwbHkgdGhlIGFsaWdubWVudCB0byB0aGUgaW5mbyAqLworICAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF92aWRlb19hbGlnbm1lbnQgKGNvbmZpZywgJnByaXYtPnZpZGVvX2FsaWduKTsKKyAgICAgZ3N0X3ZpZGVvX2luZm9fYWxpZ24gKCZpbmZvLCAmcHJpdi0+dmlkZW9fYWxpZ24pOworKyAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF92aWRlb19hbGlnbm1lbnQgKGNvbmZpZywgJnByaXYtPnZpZGVvX2FsaWduKTsKKyAgIH0KKyAgIHByaXYtPmluZm8gPSBpbmZvOworCitkaWZmIC0tZ2l0IGEvc3lzL3hpbWFnZS94aW1hZ2Vwb29sLmMgYi9zeXMveGltYWdlL3hpbWFnZXBvb2wuYworaW5kZXggNmNjMmNmYS4uNmExY2JjOSAxMDA2NDQKKy0tLSBhL3N5cy94aW1hZ2UveGltYWdlcG9vbC5jCisrKysgYi9zeXMveGltYWdlL3hpbWFnZXBvb2wuYworQEAgLTU5Nyw2ICs1OTcsOCBAQCB4aW1hZ2VfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsIEdzdFN0cnVjdHVyZSAqIGNvbmZpZykKKyAgICAgLyogZG8gcGFkZGluZyBhbmQgYWxpZ25tZW50ICovCisgICAgIGdzdF92aWRlb19pbmZvX2FsaWduICgmaW5mbywgJnByaXYtPmFsaWduKTsKKworKyAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF92aWRlb19hbGlnbm1lbnQgKGNvbmZpZywgJnByaXYtPmFsaWduKTsKKysKKyAgICAgLyogd2UgbmVlZCB0aGUgdmlkZW8gbWV0YWRhdGEgdG9vIG5vdyAqLworICAgICBwcml2LT5hZGRfbWV0YXZpZGVvID0gVFJVRTsKKyAgIH0gZWxzZSB7CitkaWZmIC0tZ2l0IGEvc3lzL3h2aW1hZ2UveHZpbWFnZXBvb2wuYyBiL3N5cy94dmltYWdlL3h2aW1hZ2Vwb29sLmMKK2luZGV4IDI0NGE1MWEuLjM0YjFhYjIgMTAwNjQ0CistLS0gYS9zeXMveHZpbWFnZS94dmltYWdlcG9vbC5jCisrKysgYi9zeXMveHZpbWFnZS94dmltYWdlcG9vbC5jCitAQCAtMTI0LDYgKzEyNCw4IEBAIHh2aW1hZ2VfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsIEdzdFN0cnVjdHVyZSAqIGNvbmZpZykKKyAgICAgLyogZG8gcGFkZGluZyBhbmQgYWxpZ25tZW50ICovCisgICAgIGdzdF92aWRlb19pbmZvX2FsaWduICgmaW5mbywgJnByaXYtPmFsaWduKTsKKworKyAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF92aWRlb19hbGlnbm1lbnQgKGNvbmZpZywgJnByaXYtPmFsaWduKTsKKysKKyAgICAgLyogd2UgbmVlZCB0aGUgdmlkZW8gbWV0YWRhdGEgdG9vIG5vdyAqLworICAgICBwcml2LT5hZGRfbWV0YXZpZGVvID0gVFJVRTsKKyAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3ZpZGVvZW5jb2Rlci1LZWVwLXN0aWNreS1ldmVudHMtYXJvdW5kLXdoZW4tZG9pbmctYS1zb2Z0LS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvdmlkZW9lbmNvZGVyLUtlZXAtc3RpY2t5LWV2ZW50cy1hcm91bmQtd2hlbi1kb2luZy1hLXNvZnQtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NzY5NjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3ZpZGVvZW5jb2Rlci1LZWVwLXN0aWNreS1ldmVudHMtYXJvdW5kLXdoZW4tZG9pbmctYS1zb2Z0LS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGMzZjdkMzZiOTkyYTNjYmNlZTMzODZkZWE4NTcyMGYzY2IwNGUxZmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorRGF0ZTogRnJpLCAyNyBNYXIgMjAxNSAxMzozOTo0MyArMDgwMAorU3ViamVjdDogW1BBVENIXSB2aWRlb2VuY29kZXI6IEtlZXAgc3RpY2t5IGV2ZW50cyBhcm91bmQgd2hlbiBkb2luZyBhIHNvZnQKKyByZXNldAorCitUaGUgY3VycmVudCBjb2RlIHdpbGwgZmlyc3QgZGlzY2FyZCBhbGwgZnJhbWVzLCBhbmQgdGhlbiB0cmllcyB0byBjb3B5CithbGwgc3RpY2t5IGV2ZW50cyBmcm9tIHRoZSAobm93IGRpc2NhcmRlZCkgZnJhbWVzLiBMZXQncyBjaGFuZ2UgdGhlIG9yZGVyLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2ODY1CisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQgCisKKy0tLQorIGdzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2VuY29kZXIuYyB8ICAgIDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZW5jb2Rlci5jIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZW5jb2Rlci5jCitpbmRleCA2MTRiYTJkLi40YzViMTExIDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZW5jb2Rlci5jCisrKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9lbmNvZGVyLmMKK0BAIC0zNDAsMTAgKzM0MCw2IEBAIGdzdF92aWRlb19lbmNvZGVyX3Jlc2V0IChHc3RWaWRlb0VuY29kZXIgKiBlbmNvZGVyLCBnYm9vbGVhbiBoYXJkKQorIAorICAgcHJpdi0+ZHJhaW5lZCA9IFRSVUU7CisgCistICBnX2xpc3RfZm9yZWFjaCAocHJpdi0+ZnJhbWVzLCAoR0Z1bmMpIGdzdF92aWRlb19jb2RlY19mcmFtZV91bnJlZiwgTlVMTCk7CistICBnX2xpc3RfZnJlZSAocHJpdi0+ZnJhbWVzKTsKKy0gIHByaXYtPmZyYW1lcyA9IE5VTEw7CistCisgICBwcml2LT5ieXRlcyA9IDA7CisgICBwcml2LT50aW1lID0gMDsKKyAKK0BAIC0zOTIsNiArMzg4LDEwIEBAIGdzdF92aWRlb19lbmNvZGVyX3Jlc2V0IChHc3RWaWRlb0VuY29kZXIgKiBlbmNvZGVyLCBnYm9vbGVhbiBoYXJkKQorICAgICAgICAgZW5jb2Rlci0+cHJpdi0+Y3VycmVudF9mcmFtZV9ldmVudHMpOworICAgfQorIAorKyAgZ19saXN0X2ZvcmVhY2ggKHByaXYtPmZyYW1lcywgKEdGdW5jKSBnc3RfdmlkZW9fY29kZWNfZnJhbWVfdW5yZWYsIE5VTEwpOworKyAgZ19saXN0X2ZyZWUgKHByaXYtPmZyYW1lcyk7CisrICBwcml2LT5mcmFtZXMgPSBOVUxMOworKworICAgR1NUX1ZJREVPX0VOQ09ERVJfU1RSRUFNX1VOTE9DSyAoZW5jb2Rlcik7CisgCisgICByZXR1cm4gcmV0OworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfMS40LjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlXzEuNC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOWMyY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlXzEuNC41LmJiCkBAIC0wLDAgKzEsMzAgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzU0Y2U5MzQ1NzI3MTc1ZmY2NmQxN2I2N2ZmNTFmNTggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTE3O21kNT1hNGUxODMwZmNlMDc4MDI4YzhmMDk3NDE2MTI3MjYwNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9Njc2MmVkNDQyYjM4MjIzODdhNTFjOTJkOTI4ZWFkMGQgXAorICAgICAgICAgICAgICAgICAgICIKKworU1JDX1VSSSArPSAiZmlsZTovL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudC1pZi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZ2V0LWNhcHMtZnJvbS1zcmMtcGFkLXdoZW4tcXVlcnktY2Fwcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdGFnbGlzdC1ub3Qtc2VuZC10by1kb3duLXN0cmVhbS1pZi1hbGwtdGhlLWZyYW1lLWNvci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWlkM2RlbXV4LXV0ZjE2LXRvLXV0ZjgtaXNzdWUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2hhbmRsZS1hdWRpby12aWRlby1kZWNvZGVyLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly92aWRlb2J1ZmZlcl91cGRhdGFfYWxpZ25tZW50X3VwZGF0ZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMi12aWRlby1mcmFtZS1BZGQtR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS12aWRlby1mcmFtZS1Eb24tdC1yZWYtYnVmZmVycy10d2ljZS13aGVuLW1hcHBpbmcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDMtdmlkZW9maWx0ZXItVXNlLW5ldy1HU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly92aWRlb2VuY29kZXItS2VlcC1zdGlja3ktZXZlbnRzLWFyb3VuZC13aGVuLWRvaW5nLWEtc29mdC0ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtYmFzZXRleHRvdmVybGF5LW1ha2UtbWVtb3J5LWNvcHktd2hlbi12aWRlby1idWZmZXItcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMi1nc3RwbGF5c2luay1kb24tdC1zZXQtYXN5bmMtb2YtY3VzdG9tLXRleHQtc2luay10by1mLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAzLXNzYXBhcnNlLWVuaGFuY2UtU1NBLXRleHQtbGluZXMtcGFyc2luZy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwNC1zdWJwYXJzZS1zZXQtbmVlZF9zZWdtZW50LWFmdGVyLXNpbmstcGFkLXJlY2VpdmVkLUdTLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9lbmNvZGViaW4tTmVlZC1tb3JlLWJ1ZmZlcnMtaW4tb3V0cHV0LXF1ZXVlLWZvci1iZXR0LnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjM1NzE2NWFmNjI1YzBjYTM1M2FiNDdjNWQ4NDM5MjBlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc3YmQ4MTk5ZTdhMzEyZDNkNzFkZTliN2RkZjc2MWEzYjc4NTYwYTJjMmE4MDgyOWQwODE1Y2EzOWNiZDU1MWQiCisKK1MgPSAiJHtXT1JLRElSfS9nc3QtcGx1Z2lucy1iYXNlLSR7UFZ9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmUzYTQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV9naXQuYmIKQEAgLTAsMCArMSwxOSBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM1NGNlOTM0NTcyNzE3NWZmNjZkMTdiNjdmZjUxZjU4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGw7YmVnaW5saW5lPTI7ZW5kbGluZT0xNzttZDU9YTRlMTgzMGZjZTA3ODAyOGM4ZjA5NzQxNjEyNzI2MDcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKKyAgICAgICAgICAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ1JFViA9ICI4ZDRjYjY0YTRiOWQ4NGIxMDA3NmJmMzUwZjgwYTBkNmVhNjhlYzJkIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwljZCAke1N9CisJLi9hdXRvZ2VuLnNoIC0tbm9jb25maWd1cmUKKwljZCAke0J9Cit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUzMTZkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QuaW5jCkBAIC0wLDAgKzEsNTcgQEAKK3JlcXVpcmUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErIgorCisjIGxpYmlkM3RhZworREVQRU5EUyArPSAiZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSB6bGliIGJ6aXAyIGxpYmNhcCIKKworaW5oZXJpdCBnZXR0ZXh0CisKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdWxzZWF1ZGlvJywgJ3B1bHNlYXVkaW8nLCAnJywgZCl9IFwKKyAgICBvcmMgY2Fpcm8gZmxhYyBnZGstcGl4YnVmIGd1ZGV2IGpwZWcgbGlicG5nIHNvdXAgc3BlZXggdGFnbGliIFwKKyAgICAiCisKK1gxMURFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlic20gbGlieHJlbmRlciBsaWJ4Zml4ZXMgbGlieGRhbWFnZSIKK1gxMUVOQUJMRU9QVFMgPSAiLS1lbmFibGUteCAtLWVuYWJsZS14c2htIgorWDExRElTQUJMRU9QVFMgPSAiLS1kaXNhYmxlLXggLS1kaXNhYmxlLXhzaG0iCitQQUNLQUdFQ09ORklHW3gxMV0gICAgICAgID0gIiR7WDExRU5BQkxFT1BUU30sJHtYMTFESVNBQkxFT1BUU30sJHtYMTFERVBFTkRTfSIKK1BBQ0tBR0VDT05GSUdbcHVsc2VhdWRpb10gPSAiLS1lbmFibGUtcHVsc2UsLS1kaXNhYmxlLXB1bHNlLHB1bHNlYXVkaW8iCitQQUNLQUdFQ09ORklHW2NhaXJvXSAgICAgID0gIi0tZW5hYmxlLWNhaXJvLC0tZGlzYWJsZS1jYWlybyxjYWlybyIKK1BBQ0tBR0VDT05GSUdbZmxhY10gICAgICAgPSAiLS1lbmFibGUtZmxhYywtLWRpc2FibGUtZmxhYyxmbGFjIgorUEFDS0FHRUNPTkZJR1tnZGstcGl4YnVmXSA9ICItLWVuYWJsZS1nZGtfcGl4YnVmLC0tZGlzYWJsZS1nZGtfcGl4YnVmLGdkay1waXhidWYiCitQQUNLQUdFQ09ORklHW2d1ZGV2XSAgICAgID0gIi0td2l0aC1ndWRldiwtLXdpdGhvdXQtZ3VkZXYsdWRldiIKK1BBQ0tBR0VDT05GSUdbamFja10gICAgICAgPSAiLS1lbmFibGUtamFjaywtLWRpc2FibGUtamFjayxqYWNrIgorUEFDS0FHRUNPTkZJR1tqcGVnXSAgICAgICA9ICItLWVuYWJsZS1qcGVnLC0tZGlzYWJsZS1qcGVnLGpwZWciCitQQUNLQUdFQ09ORklHW2xpYnBuZ10gICAgID0gIi0tZW5hYmxlLWxpYnBuZywtLWRpc2FibGUtbGlicG5nLGxpYnBuZyIKK1BBQ0tBR0VDT05GSUdbc291cF0gICAgICAgPSAiLS1lbmFibGUtc291cCwtLWRpc2FibGUtc291cCxsaWJzb3VwLTIuNCIKK1BBQ0tBR0VDT05GSUdbc3BlZXhdICAgICAgPSAiLS1lbmFibGUtc3BlZXgsLS1kaXNhYmxlLXNwZWV4LHNwZWV4IgorUEFDS0FHRUNPTkZJR1t0YWdsaWJdICAgICA9ICItLWVuYWJsZS10YWdsaWIsLS1kaXNhYmxlLXRhZ2xpYix0YWdsaWIiCitQQUNLQUdFQ09ORklHW3ZweF0gICAgICAgID0gIi0tZW5hYmxlLXZweCwtLWRpc2FibGUtdnB4LGxpYnZweCIKK1BBQ0tBR0VDT05GSUdbd2F2cGFja10gICAgPSAiLS1lbmFibGUtd2F2cGFjaywtLWRpc2FibGUtd2F2cGFjayx3YXZwYWNrIgorCisjIHRoZSAxMzk0IHBsdWdpbnMgcmVxdWlyZSBib3RoIGxpYnJhdzEzOTQgYW5kIGxpYmllYzYxODgzCisjIHRoZSBmb3JtZXIgaXMgaW5jbHVkZWQgaW4gbWV0YS1vZSwgdGhlIGxhdHRlciBpc24ndAorIyAtPiBkaXNhYmxlZAorCitFWFRSQV9PRUNPTkYgKz0gIiBcCisgICAgLS1lbmFibGUtb3NzIFwKKyAgICAtLWVuYWJsZS1nc3RfdjRsMiBcCisgICAgLS13aXRob3V0LWxpYnY0bDIgXAorICAgIC0tZGlzYWJsZS1kaXJlY3Rzb3VuZCBcCisgICAgLS1kaXNhYmxlLXdhdmVmb3JtIFwKKyAgICAtLWRpc2FibGUtb3NzNCBcCisgICAgLS1kaXNhYmxlLXN1bmF1ZGlvIFwKKyAgICAtLWRpc2FibGUtb3N4X2F1ZGlvIFwKKyAgICAtLWRpc2FibGUtb3N4X3ZpZGVvIFwKKyAgICAtLWRpc2FibGUtYWFsaWIgXAorICAgIC0tZGlzYWJsZS1saWJjYWNhIFwKKyAgICAtLWRpc2FibGUtbGliZHYgXAorICAgIC0tZGlzYWJsZS1zaG91dDIgXAorICAgIC0tZGlzYWJsZS1leGFtcGxlcyBcCisgICAgLS1kaXNhYmxlLWR2MTM5NCBcCisiCisKK0ZJTEVTXyR7UE59LWVxdWFsaXplciArPSAiJHtkYXRhZGlyfS9nc3RyZWFtZXItMS4wL3ByZXNldHMvKi5wcnMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QvMDAwMS1nc3RydHBtcDRncGF5LXNldC1kYWZhdWx0LXZhbHVlLWZvci1NUEVHNC13aXRob3V0LWNvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQxOTczZDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIGM3ODJhMzA0ODI5MDhhNGI0ZGQ5Y2Q0YWJmZjlmOWJjNDAxNjY5OGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorRGF0ZTogVHVlLCA1IEF1ZyAyMDE0IDE0OjQwOjQ2ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGdzdHJ0cG1wNGdwYXk6IHNldCBkYWZhdWx0IHZhbHVlIGZvciBNUEVHNCB3aXRob3V0IGNvZGVjCisgZGF0YSBpbiBjYXBzLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0MjYzCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CistLS0KKyBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYyB8ICAgMTkgKysrKysrKysrKysrKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jCitpbmRleCA3OTEzZDlhLi4xNzQ5ZDM5IDEwMDY0NAorLS0tIGEvZ3N0L3J0cC9nc3RydHBtcDRncGF5LmMKKysrKyBiL2dzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jCitAQCAtMzkwLDYgKzM5MCw3IEBAIGdzdF9ydHBfbXA0Z19wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKKyAgIGNvbnN0IEdWYWx1ZSAqY29kZWNfZGF0YTsKKyAgIGNvbnN0IGdjaGFyICptZWRpYV90eXBlID0gTlVMTDsKKyAgIGdib29sZWFuIHJlczsKKysgIGNvbnN0IGdjaGFyICpuYW1lOworIAorICAgcnRwbXA0Z3BheSA9IEdTVF9SVFBfTVA0R19QQVkgKHBheWxvYWQpOworIAorQEAgLTQwMCw3ICs0MDEsNiBAQCBnc3RfcnRwX21wNGdfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCisgICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcDRncGF5LCAiZ290IGNvZGVjX2RhdGEiKTsKKyAgICAgaWYgKEdfVkFMVUVfVFlQRSAoY29kZWNfZGF0YSkgPT0gR1NUX1RZUEVfQlVGRkVSKSB7CisgICAgICAgR3N0QnVmZmVyICpidWZmZXI7CistICAgICAgY29uc3QgZ2NoYXIgKm5hbWU7CisgCisgICAgICAgYnVmZmVyID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIgKGNvZGVjX2RhdGEpOworICAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcDRncGF5LCAiY29uZmlndXJpbmcgY29kZWNfZGF0YSIpOworQEAgLTQyNiw2ICs0MjYsMjMgQEAgZ3N0X3J0cF9tcDRnX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQorIAorICAgICAgIHJ0cG1wNGdwYXktPmNvbmZpZyA9IGdzdF9idWZmZXJfY29weSAoYnVmZmVyKTsKKyAgICAgfQorKyAgfSBlbHNlIHsKKysgICAgbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHN0cnVjdHVyZSk7CisrCisrICAgIGlmICghc3RyY21wIChuYW1lLCAidmlkZW8vbXBlZyIpKSB7CisrICAgICAgcnRwbXA0Z3BheS0+cHJvZmlsZSA9IGdfc3RyZHVwICgiMSIpOworKworKyAgICAgIC8qIGZpeGVkIHJhdGUgKi8KKysgICAgICBydHBtcDRncGF5LT5yYXRlID0gOTAwMDA7CisrICAgICAgLyogdmlkZW8gc3RyZWFtIHR5cGUgKi8KKysgICAgICBydHBtcDRncGF5LT5zdHJlYW10eXBlID0gIjQiOworKyAgICAgIC8qIG5vIHBhcmFtcyBmb3IgdmlkZW8gKi8KKysgICAgICBydHBtcDRncGF5LT5wYXJhbXMgPSBOVUxMOworKyAgICAgIC8qIG1vZGUgKi8KKysgICAgICBydHBtcDRncGF5LT5tb2RlID0gImdlbmVyaWMiOworKworKyAgICAgIG1lZGlhX3R5cGUgPSAidmlkZW8iOworKyAgICB9CisgICB9CisgICBpZiAobWVkaWFfdHlwZSA9PSBOVUxMKQorICAgICBnb3RvIGNvbmZpZ19mYWlsZWQ7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC9kZWNyZWFzZV9hc3Rlcmlza2gyNjNfcmFuay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QvZGVjcmVhc2VfYXN0ZXJpc2toMjYzX3JhbmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjg4NjMxYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QvZGVjcmVhc2VfYXN0ZXJpc2toMjYzX3JhbmsucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorY29tbWl0IGQ3MWQ3NGRhYWM4ZWQ1NDE1NmVkMTAzOTU4YWI0NTVjNjNjNzJiMGUKK0F1dGhvcjogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgTW9uIE5vdiAxMCAxMToyNTo0NyAyMDE0ICswODAwCisKK1thc3Rlcmlza2gyNjNdIGRlY3JlYXNlIHRoZSByYW5rIGFzIHdlIGhhdm4ndCB0aGlzIGtpbmQgb2YgZGVjb2Rlci4KKworRGVjcmVhc2UgdGhlIHJhbmsgYXMgd2UgaGF2bid0IHRoaXMga2luZCBvZiBkZWNvZGVyLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5OTM1CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorCitkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuYyBiL2dzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmMKK2luZGV4IGEwMWZiYzguLjhmYTMxOTQgMTAwNjQ0CistLS0gYS9nc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jCisrKysgYi9nc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jCitAQCAtMjI2LDUgKzIyNiw1IEBAIGdib29sZWFuCisgZ3N0X2FzdGVyaXNraDI2M19wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQorIHsKKyAgIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiYXN0ZXJpc2toMjYzIiwKKy0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX0FTVEVSSVNLX0gyNjMpOworKyAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSAtIDEsIEdTVF9UWVBFX0FTVEVSSVNLX0gyNjMpOworIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfMS40LjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kXzEuNC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0M2FiNjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kXzEuNC41LmJiCkBAIC0wLDAgKzEsMTMgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTE3O21kNT1hNGUxODMwZmNlMDc4MDI4YzhmMDk3NDE2MTI3MjYwNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvcmVwbGF5Z2Fpbi9yZ2FuYWx5c2lzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMzttZDU9YjYwZWJlZmQ1YjJmNWE4ZTBjYWI2YmZlZTM5MWE1ZmUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLWdzdHJ0cG1wNGdwYXktc2V0LWRhZmF1bHQtdmFsdWUtZm9yLU1QRUc0LXdpdGhvdXQtY28ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlY3JlYXNlX2FzdGVyaXNraDI2M19yYW5rLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJlYWYxYTZkYWY3Mzc0OWJjNDIzZmVhYzMwMWQ2MDAzOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3OWIxYjVmM2Y3YmNhYThhNjE1MjAyZWI1ZTE3NjEyMWVlYjgzMzY5NjBmNzA2ODdlNTM2YWQ3OGRiYzdlNjQxIgorCitTID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtZ29vZC0ke1BWfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMwZTBlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfZ2l0LmJiCkBAIC0wLDAgKzEsMTggQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsO2JlZ2lubGluZT0yO2VuZGxpbmU9MTc7bWQ1PWE0ZTE4MzBmY2UwNzgwMjhjOGYwOTc0MTYxMjcyNjA3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC9yZXBsYXlnYWluL3JnYW5hbHlzaXMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIzO21kNT1iNjBlYmVmZDViMmY1YThlMGNhYjZiZmVlMzkxYTVmZSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDUkVWID0gImZkMDEyMzgwMGM4YzFjZjE0NjhjMGZhNWQ1OTJhZDBkMGQ4YjQxNDAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWNkICR7U30KKwkuL2F1dG9nZW4uc2ggLS1ub2NvbmZpZ3VyZQorCWNkICR7Qn0KK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2JhMzE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS5pbmMKQEAgLTAsMCArMSwzMCBAQAorcmVxdWlyZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsgJiBMR1BMdjIrIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorCitERVBFTkRTICs9ICJnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGxpYmlkM3RhZyIKKworaW5oZXJpdCBnZXR0ZXh0CisKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiBcCisgICAgb3JjIGE1MmRlYyBsYW1lIG1hZCBtcGVnMmRlYyBcCisgICAgIgorCitQQUNLQUdFQ09ORklHW2E1MmRlY10gICA9ICItLWVuYWJsZS1hNTJkZWMsLS1kaXNhYmxlLWE1MmRlYyxsaWJhNTIiCitQQUNLQUdFQ09ORklHW2NkaW9dICAgICA9ICItLWVuYWJsZS1jZGlvLC0tZGlzYWJsZS1jZGlvLGxpYmNkaW8iCitQQUNLQUdFQ09ORklHW2R2ZHJlYWRdICA9ICItLWVuYWJsZS1kdmRyZWFkLC0tZGlzYWJsZS1kdmRyZWFkLGxpYmR2ZHJlYWQiCitQQUNLQUdFQ09ORklHW2xhbWVdICAgICA9ICItLWVuYWJsZS1sYW1lLC0tZGlzYWJsZS1sYW1lLGxhbWUiCitQQUNLQUdFQ09ORklHW21hZF0gICAgICA9ICItLWVuYWJsZS1tYWQsLS1kaXNhYmxlLW1hZCxsaWJtYWQiCitQQUNLQUdFQ09ORklHW21wZWcyZGVjXSA9ICItLWVuYWJsZS1tcGVnMmRlYywtLWRpc2FibGUtbXBlZzJkZWMsbXBlZzJkZWMiCitQQUNLQUdFQ09ORklHW3gyNjRdICAgICA9ICItLWVuYWJsZS14MjY0LC0tZGlzYWJsZS14MjY0LHgyNjQiCisKKworRVhUUkFfT0VDT05GICs9ICIgXAorICAgIC0tZGlzYWJsZS1hbXJuYiBcCisgICAgLS1kaXNhYmxlLWFtcndiIFwKKyAgICAtLWRpc2FibGUtc2lkcGxheSBcCisgICAgLS1kaXNhYmxlLXR3b2xhbWUgXAorICAgICIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseV8xLjQuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfMS40LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVjYjI4YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfMS40LjUuYmIKQEAgLTAsMCArMSwxMCBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9jaGVjay9lbGVtZW50cy94aW5nbXV4LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9NGM3NzFiOGFmMTg4NzI0ODU1Y2I5OWNhZGQzOTAwNjggIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjk1NGJlZWQ3YmI5YTkzZTQyNmRlZTU0M2ZmNDYzOTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWNkNWU4MWNmNjE4OTQ0ZjRkYzkzNWYxNjY5YjIxMjVlOGJiMmZlOWNjN2RjOGRjMTViNzIyMzdhY2E0OTA2NyIKKworUyA9ICIke1dPUktESVJ9L2dzdC1wbHVnaW5zLXVnbHktJHtQVn0iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmNWZmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfZ2l0LmJiCkBAIC0wLDAgKzEsMTcgQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9jaGVjay9lbGVtZW50cy94aW5nbXV4LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9NGM3NzFiOGFmMTg4NzI0ODU1Y2I5OWNhZGQzOTAwNjggIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNSRVYgPSAiMDZiOGFjMTBjZWU4NWM1YzMwNGNhMzIwOTk3YWE4ZjQ0Mjk1YTY2ZiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJY2QgJHtTfQorCS4vYXV0b2dlbi5zaCAtLW5vY29uZmlndXJlCisJY2QgJHtCfQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE3ODNiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLmluYwpAQCAtMCwwICsxLDU5IEBACitTVU1NQVJZID0gIlBsdWdpbnMgZm9yIHRoZSBHU3RyZWFtZXIgbXVsdGltZWRpYSBmcmFtZXdvcmsgMS54IgorSE9NRVBBR0UgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9R3N0cmVhbWVyIgorU0VDVElPTiA9ICJtdWx0aW1lZGlhIgorREVQRU5EUyA9ICJnc3RyZWFtZXIxLjAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitHU1RSRUFNRVJfMV8wX0RFQlVHID89ICItLWRpc2FibGUtZGVidWciCitHU1RSRUFNRVJfMV8wX0dJVF9CUkFOQ0ggPz0gIm1hc3RlciIKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtdmFsZ3JpbmQgJHtHU1RSRUFNRVJfMV8wX0RFQlVHfSAtLWRpc2FibGUtZXhhbXBsZXMgIgorCithY3BhdGhzID0gIi1JICR7U30vY29tbW9uL200IC1JICR7U30vbTQiCisKK0xJQlYgPSAiMS4wIgorcmVxdWlyZSBnc3QtcGx1Z2lucy1wYWNrYWdlLmluYworCitQQUNLQUdFQ09ORklHW29yY10gPSAiLS1lbmFibGUtb3JjLC0tZGlzYWJsZS1vcmMsb3JjIG9yYy1uYXRpdmUiCisKK2V4cG9ydCBPUkNDID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyfS9vcmNjIgorCitQQUNLQUdFU19EWU5BTUlDID0gIl4ke1BOfS0uKiIKKworIyBhcHBseSBnc3RyZWFtZXIgaGFjayBhZnRlciBNYWtlZmlsZS5pbi5pbiBpbiBzb3VyY2UgaXMgcmVwbGFjZWQgYnkgb3VyIHZlcnNpb24gZnJvbQorIyAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dldHRleHQvcG8vTWFrZWZpbGUuaW4uaW4sIGJ1dCBiZWZvcmUgY29uZmlndXJlIGlzIGV4ZWN1dGVkIAorIyBodHRwOi8vbGlzdHMubGludXh0b2dvLm9yZy9waXBlcm1haWwvb3BlbmVtYmVkZGVkLWNvcmUvMjAxMi1Ob3ZlbWJlci8wMzIyMzMuaHRtbAorb2VfcnVuY29uZl9wcmVwZW5kKCkgeworCWlmIFsgLWUgJHtTfS9wby9NYWtlZmlsZS5pbi5pbiBdOyB0aGVuCisJCXNlZCAtaSAtZSAiMWFcXCIgLWUgJ0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VAJyAke1N9L3BvL01ha2VmaWxlLmluLmluCisJZmkKK30KKworU1JDX1VSSSA9ICIke0BnZXRfZ3N0X3NyY3VyaShkKX0iCisKK2RlZiBnZXRfZ3N0X3NyY3VyaShkKToKKyAgICAjIGNoZWNrIGlmIGV4cGVjdGVkIHByZWZpeCBpcyBwcmVzZW50CisgICAgcHJlZml4ID0gImdzdHJlYW1lcjEuMC0iCisgICAgYnBuID0gZC5nZXRWYXIoIkJQTiIsIFRydWUpCisgICAgaWYgbm90IGJwbi5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgIGJiLmZhdGFsKCdJbnZhbGlkIEdTdHJlYW1lciAxLjAgcGx1Z2luIHBhY2thZ2UgbmFtZSAiJXMiIDogbXVzdCBzdGFydCB3aXRoICIlcyInICUgKGJwbiwgcHJlZml4KSkKKworICAgICMgcmVwbGFjZWQgcHJlZml4IHdpdGggImdzdC0iLCB3aGljaCBpcyB3aGF0IGlzIHVzZWQgZm9yIHRoZSB0YXJiYWxsIGFuZCByZXBvc2l0b3J5IGZpbGVuYW1lcworICAgIGdzdHBrZ19iYXNlbmFtZSA9ICJnc3QtIiArIGJwbltsZW4ocHJlZml4KTpdCisgICAgcHYgPSBkLmdldFZhcigiUFYiLCBUcnVlKQorICAgIGJyYW5jaCA9IGQuZ2V0VmFyKCJHU1RSRUFNRVJfMV8wX0dJVF9CUkFOQ0giLCBUcnVlKQorCisgICAgaWYgcHYgPT0gImdpdCI6CisgICAgICAgIHMgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyLyVzO2JyYW5jaD0lcyIgJSAoZ3N0cGtnX2Jhc2VuYW1lLCBicmFuY2gpCisgICAgZWxzZToKKyAgICAgICAgcyA9ICJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvJXMvJXMtJXMudGFyLnh6IiAlIChnc3Rwa2dfYmFzZW5hbWUsIGdzdHBrZ19iYXNlbmFtZSwgcHYpCisgICAgcmV0dXJuIHMKKworZGVsZXRlX2xpYmxpbmtfbTRfZmlsZSgpIHsKKwkjIFRoaXMgbTQgZmlsZSBjb250YWlucyBuYXN0aW5lc3Mgd2hpY2ggY29uZmxpY3RzIHdpdGggbGlidG9vbCAyLjIuMgorCXJtICIke1N9L200L2xpYi1saW5rLm00IiB8fCB0cnVlCit9CisKK2RvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gIiBkZWxldGVfbGlibGlua19tNF9maWxlICIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlci5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhhOTQyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlci5pbmMKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJBIGxpYnJhcnkgb24gdG9wIG9mIEdTdHJlYW1lciBmb3IgYnVpbGRpbmcgYW4gUlRTUCBzZXJ2ZXIiCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCitMSUNFTlNFID0gIkxHUEx2MiIKK0hPTUVQQUdFID0gImh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXJ0c3Atc2VydmVyLyIKK0RFUEVORFMgPSAiZ3N0cmVhbWVyMS4wIGxpYmNncm91cCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIgorCitQTlJFQUwgPSAiZ3N0LXJ0c3Atc2VydmVyIgorCitTUkNfVVJJID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy8ke1BOUkVBTH0vJHtQTlJFQUx9LSR7UFZ9LnRhci54eiIKKworUyA9ICIke1dPUktESVJ9LyR7UE5SRUFMfS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXJfMS40LjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXJfMS40LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI5YjQyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlcl8xLjQuNS5iYgpAQCAtMCwwICsxLDYgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCIKKworU1JDX1VSSVttZDVzdW1dID0gImE5ZjliODg5OWVjN2FiMzM2NjNjZGE3NjI3ZGI0MGQzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjMwODkyNTRiZDMxYjdjMWYxY2YyYzAzNGEzYjM1NTFmOTI4NzhmOWUzY2FiNjVjZWYzYTkwMWEwNGMwZjFkMzciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZThhYThmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLmluYwpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIkdTdHJlYW1lciAxLjAgbXVsdGltZWRpYSBmcmFtZXdvcmsiCitERVNDUklQVElPTiA9ICJHU3RyZWFtZXIgaXMgYSBtdWx0aW1lZGlhIGZyYW1ld29yayBmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHZpZGVvIGFuZCBzb3VuZC4gXAorSXQgc3VwcG9ydHMgYSB3aWRlIHJhbmdlIG9mIGZvcm1hdHMgaW5jbHVkaW5nIG1wMywgb2dnLCBhdmksIG1wZWcgYW5kIHF1aWNrdGltZS4iCitIT01FUEFHRSA9ICJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1Hc3RyZWFtZXIiCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCitMSUNFTlNFID0gIkxHUEx2MisiCitERVBFTkRTID0gImdsaWItMi4wIGxpYnhtbDIgYmlzb24tbmF0aXZlIGZsZXgtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCitQQUNLQUdFQ09ORklHW2RlYnVnXSA9ICItLWVuYWJsZS1kZWJ1ZywtLWRpc2FibGUtZGVidWciCitQQUNLQUdFQ09ORklHW2NoZWNrXSA9ICItLWVuYWJsZS1jaGVjaywtLWRpc2FibGUtY2hlY2siCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZG9jYm9vayAtLWRpc2FibGUtZ3RrLWRvYyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1leGFtcGxlcyAtLWRpc2FibGUtdGVzdHMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS12YWxncmluZCBcCisgICAgICAgICAgICAgICAgIgorCitSUkVDT01NRU5EU18ke1BOfV9xZW11eDg2ICAgICs9ICJrZXJuZWwtbW9kdWxlLXNuZC1lbnMxMzcwIGtlcm5lbC1tb2R1bGUtc25kLXJhd21pZGkiCitSUkVDT01NRU5EU18ke1BOfV9xZW11eDg2LTY0ICs9ICJrZXJuZWwtbW9kdWxlLXNuZC1lbnMxMzcwIGtlcm5lbC1tb2R1bGUtc25kLXJhd21pZGkiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9oZWFkZXJfdmFsZ3JpbmRfdmFsZ3JpbmRfaD1ubyIKKworRklMRVNfJHtQTn0gKz0gIiAke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLnNvIgorRklMRVNfJHtQTn0tZGV2ICs9ICIgJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5sYSAke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLmEiCitGSUxFU18ke1BOfS1kYmcgKz0gIiAke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8uZGVidWcvICR7bGliZXhlY2Rpcn0vZ3N0cmVhbWVyLTEuMC8uZGVidWcvIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1GaXgtY3Jhc2gtd2l0aC1nc3QtaW5zcGVjdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC8wMDAxLUZpeC1jcmFzaC13aXRoLWdzdC1pbnNwZWN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZjVjYzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1GaXgtY3Jhc2gtd2l0aC1nc3QtaW5zcGVjdC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDZiMjZmM2RiZjliZjU3N2Q3MTUzNGFiNzQxMGRlNjZkMDZlNDZiYTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CitEYXRlOiBTYXQsIDYgQXByIDIwMTMgMjM6NTI6MTEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGNyYXNoIHdpdGggZ3N0LWluc3BlY3QgQ2hyaXMgTG9yZCA8Y2hyaXNAb3BlbmVkaGFuZC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CistLS0KKyB0b29scy9nc3QtaW5zcGVjdC5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdG9vbHMvZ3N0LWluc3BlY3QuYyBiL3Rvb2xzL2dzdC1pbnNwZWN0LmMKK2luZGV4IDIzYjdjNDQuLmI3OWIwMmUgMTAwNjQ0CistLS0gYS90b29scy9nc3QtaW5zcGVjdC5jCisrKysgYi90b29scy9nc3QtaW5zcGVjdC5jCitAQCAtMTU1Niw3ICsxNTU2LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyAoY3R4LCBvcHRpb25zLCBHRVRURVhUX1BBQ0tBR0UpOworICAgZ19vcHRpb25fY29udGV4dF9hZGRfZ3JvdXAgKGN0eCwgZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCAoKSk7CisgICBpZiAoIWdfb3B0aW9uX2NvbnRleHRfcGFyc2UgKGN0eCwgJmFyZ2MsICZhcmd2LCAmZXJyKSkgeworLSAgICBnX3ByaW50ZXJyICgiRXJyb3IgaW5pdGlhbGl6aW5nOiAlc1xuIiwgZXJyLT5tZXNzYWdlKTsKKysgICAgZ19wcmludGVyciAoIkVycm9yIGluaXRpYWxpemluZzogJXNcbiIsIGVyciA/IGVyci0+bWVzc2FnZSA6ICIobnVsbCkiKTsKKyAgICAgcmV0dXJuIC0xOworICAgfQorICAgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOworLS0gCisxLjguMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1nc3RpbmZvLVNob3J0ZW4tX19GSUxFX18tb24tYWxsLXBsYXRmb3Jtcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC8wMDAxLWdzdGluZm8tU2hvcnRlbi1fX0ZJTEVfXy1vbi1hbGwtcGxhdGZvcm1zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMTNjNGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1nc3RpbmZvLVNob3J0ZW4tX19GSUxFX18tb24tYWxsLXBsYXRmb3Jtcy5wYXRjaApAQCAtMCwwICsxLDU1IEBACitGcm9tIDgxZmVjZDM2N2IwMTZlNWFjNGZiMGMwNGI4NGRhNWM0NzRmMzBkYTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQZXRlciBVcmJhbmVjIDxnaXQudXNlckB1cmJhbmVjLm5ldD4KK0RhdGU6IEZyaSwgMjcgRmViIDIwMTUgMDE6MTY6NTggKzExMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzFdIGdzdGluZm86IFNob3J0ZW4gX19GSUxFX18gb24gYWxsIHBsYXRmb3Jtcy4KKworVGhpcyBpcyB1c2VmdWwgbm90IG9ubHkgZm9yIE1TVkMsIGJ1dCBhbHNvIHdpdGggZ2NjL0xpbnV4IHdoZW4gZG9pbmcKK2Nyb3NzLWNvbXBpbGF0aW9uIGJ1aWxkcyBhbmQgb3V0LW9mLXRyZWUgYnVpbGRzLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTIxM10KKworU2lnbmVkLW9mZi1ieTogUGV0ZXIgVXJiYW5lYyA8Z2l0LnVzZXJAdXJiYW5lYy5uZXQ+CistLS0KKyBnc3QvZ3N0aW5mby5jIHwgMTEgKysrKy0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3N0L2dzdGluZm8uYyBiL2dzdC9nc3RpbmZvLmMKK2luZGV4IGIyYTMwMDUuLjhiNjFkMDkgMTAwNjQ0CistLS0gYS9nc3QvZ3N0aW5mby5jCisrKysgYi9nc3QvZ3N0aW5mby5jCitAQCAtNDQ0LDcgKzQ0NCw2IEBAIGdzdF9kZWJ1Z19sb2cgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXRlZ29yeSwgR3N0RGVidWdMZXZlbCBsZXZlbCwKKyAgIHZhX2VuZCAodmFyX2FyZ3MpOworIH0KKyAKKy0jaWZkZWYgR19PU19XSU4zMgorIC8qIGJhc2VkIG9uIGdfYmFzZW5hbWUoKSwgd2hpY2ggd2UgY2FuJ3QgdXNlIGJlY2F1c2UgaXQgd2FzIGRlcHJlY2F0ZWQgKi8KKyBzdGF0aWMgaW5saW5lIGNvbnN0IGdjaGFyICoKKyBnc3RfcGF0aF9iYXNlbmFtZSAoY29uc3QgZ2NoYXIgKiBmaWxlX25hbWUpCitAQCAtNDY3LDcgKzQ2Niw2IEBAIGdzdF9wYXRoX2Jhc2VuYW1lIChjb25zdCBnY2hhciAqIGZpbGVfbmFtZSkKKyAKKyAgIHJldHVybiBmaWxlX25hbWU7CisgfQorLSNlbmRpZgorIAorIC8qKgorICAqIGdzdF9kZWJ1Z19sb2dfdmFsaXN0OgorQEAgLTQ5NywxMiArNDk1LDExIEBAIGdzdF9kZWJ1Z19sb2dfdmFsaXN0IChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnksIEdzdERlYnVnTGV2ZWwgbGV2ZWwsCisgICBnX3JldHVybl9pZl9mYWlsIChmdW5jdGlvbiAhPSBOVUxMKTsKKyAgIGdfcmV0dXJuX2lmX2ZhaWwgKGZvcm1hdCAhPSBOVUxMKTsKKyAKKy0gIC8qIFRoZSBwcmVkZWZpbmVkIG1hY3JvIF9fRklMRV9fIGlzIGFsd2F5cyB0aGUgZXhhY3QgcGF0aCBnaXZlbiB0byB0aGUKKy0gICAqIGNvbXBpbGVyIHdpdGggTVNWQywgd2hpY2ggbWF5IG9yIG1heSBub3QgYmUgdGhlIGJhc2VuYW1lLiAgV2Ugd29yaworLSAgICogYXJvdW5kIGl0IGF0IHJ1bnRpbWUgdG8gaW1wcm92ZSB0aGUgcmVhZGFiaWxpdHkuICovCistI2lmZGVmIEdfT1NfV0lOMzIKKysgIC8qIFRoZSBwcmVkZWZpbmVkIG1hY3JvIF9fRklMRV9fIGNhbiBiZSBhbiBhYnNvbHV0ZSBwYXRoIGluIHNvbWUgYnVpbGQKKysgICAqIGVudmlyb25tZW50cywgc3VjaCBhcyBNU1ZDIG9yIG91dC1vZi10cmVlIGNyb3NzLWNvbXBpbGVzLiBUaGlzIG1heQorKyAgICogYmUgc2lnbmlmaWNhbnRseSBsb25nZXIgdGhhbiB0aGUgZmlsZW5hbWUuICBXZSB3b3JrIGFyb3VuZCBpdCBhdAorKyAgICogcnVudGltZSB0byBpbXByb3ZlIHRoZSByZWFkYWJpbGl0eS4gKi8KKyAgIGZpbGUgPSBnc3RfcGF0aF9iYXNlbmFtZSAoZmlsZSk7CistI2VuZGlmCisgCisgICBtZXNzYWdlLm1lc3NhZ2UgPSBOVUxMOworICAgbWVzc2FnZS5mb3JtYXQgPSBmb3JtYXQ7CistLSAKKzIuMy4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC8wMDAyLWJhc2VzaW5rLUZpeC1Rb1MtbGF0ZW5lc3MtY2hlY2tpbmctaWYtc3ViY2xhc3MtaW1wbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMi1iYXNlc2luay1GaXgtUW9TLWxhdGVuZXNzLWNoZWNraW5nLWlmLXN1YmNsYXNzLWltcGxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MDVjYmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMi1iYXNlc2luay1GaXgtUW9TLWxhdGVuZXNzLWNoZWNraW5nLWlmLXN1YmNsYXNzLWltcGxlLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK0Zyb20gNjkxNDU2NmVkNmE4OWM5Njk3M2E1NzhhYTVlY2QwMWVlNjhjZGNmZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEppYW4gPEppYW4uTGlAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFRodSwgMTQgTWF5IDIwMTUgMTU6NDk6NDMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gYmFzZXNpbms6IEZpeCBRb1MvbGF0ZW5lc3MgY2hlY2tpbmcgaWYgc3ViY2xhc3MgaW1wbGVtZW50cworIHByZXBhcmUvcHJlcGFyZV9saXN0IHZmdW5jcworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitJbiBiYXNlc2luayBmdW5jdGlvbnMgZ3N0X2Jhc2Vfc2lua19jaGFpbl91bmxvY2tlZCgpLCBiZWxvdyBjb2RlIGlzIHVzZWQgdG8KK2NoZWNraW5nIGlmIGJ1ZmZlciBpcyBsYXRlIGJlZm9yZSBkb2luZyBwcmVwYXJlIGNhbGwgdG8gc2F2ZSBzb21lIGVmZm9ydDoKKyAgICBpZiAoc3luY2FibGUgJiYgZG9fc3luYykKKyAgICAgIGxhdGUgPQorICAgICAgICAgIGdzdF9iYXNlX3NpbmtfaXNfdG9vX2xhdGUgKGJhc2VzaW5rLCBvYmosIHJzdGFydCwgcnN0b3AsCisgICAgICAgICAgR1NUX0NMT0NLX0VBUkxZLCAwLCBGQUxTRSk7CisKKyAgICBpZiAoR19VTkxJS0VMWSAobGF0ZSkpCisgICAgICBnb3RvIGRyb3BwZWQ7CisKK0J1dCB0aGlzIGNvZGUgaGFzIHByb2JsZW0sIGl0IHNob3VsZCBjYWxjdWxhdGUgaml0dGVyIGJhc2VkIG9uIGN1cnJlbnQgbWVkaWEKK2Nsb2NrLCByYXRoZXIgdGhhbiBqdXN0IHBhc3NpbmcgMC4gSSBmb3VuZCBpdCB3aWxsIGRyb3AgYWxsIHRoZSBmcmFtZXMgd2hlbgorcmV3aW5kIGluIHNsb3cgc3BlZWQsIHN1Y2ggYXMgLTJYLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MjU4CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzEuNS4xXQorLS0tCisgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jIHwgICAyNiArKysrKysrKysrKysrKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jIGIvbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jCitpbmRleCBhNTA1Njk1Li41ZmIyZDZhIDEwMDY0NAorLS0tIGEvbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jCisrKysgYi9saWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMKK0BAIC0zMzY5LDEwICszMzY5LDI4IEBAIGdzdF9iYXNlX3NpbmtfY2hhaW5fdW5sb2NrZWQgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdFBhZCAqIHBhZCwKKyAgICAgaWYgKEdfVU5MSUtFTFkgKHN0ZXBwZWQpKQorICAgICAgIGdvdG8gZHJvcHBlZDsKKyAKKy0gICAgaWYgKHN5bmNhYmxlICYmIGRvX3N5bmMpCistICAgICAgbGF0ZSA9CistICAgICAgICAgIGdzdF9iYXNlX3NpbmtfaXNfdG9vX2xhdGUgKGJhc2VzaW5rLCBvYmosIHJzdGFydCwgcnN0b3AsCistICAgICAgICAgIEdTVF9DTE9DS19FQVJMWSwgMCwgRkFMU0UpOworKyAgICBpZiAoc3luY2FibGUgJiYgZG9fc3luYykgeworKyAgICAgIEdzdENsb2NrICpjbG9jazsKKysKKysgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzaW5rKTsKKysgICAgICBjbG9jayA9IEdTVF9FTEVNRU5UX0NMT0NLIChiYXNlc2luayk7CisrICAgICAgaWYgKGNsb2NrICYmIEdTVF9TVEFURSAoYmFzZXNpbmspID09IEdTVF9TVEFURV9QTEFZSU5HKSB7CisrICAgICAgICBHc3RDbG9ja1RpbWUgYmFzZV90aW1lOworKyAgICAgICAgR3N0Q2xvY2tUaW1lIHN0aW1lOworKyAgICAgICAgR3N0Q2xvY2tUaW1lIG5vdzsKKysKKysgICAgICAgIGJhc2VfdGltZSA9IEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKS0+YmFzZV90aW1lOworKyAgICAgICAgc3RpbWUgPSBiYXNlX3RpbWUgKyBnc3RfYmFzZV9zaW5rX2FkanVzdF90aW1lIChiYXNlc2luaywgcnN0YXJ0KTsKKysgICAgICAgIG5vdyA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOworKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzaW5rKTsKKysKKysgICAgICAgIGxhdGUgPQorKyAgICAgICAgICAgIGdzdF9iYXNlX3NpbmtfaXNfdG9vX2xhdGUgKGJhc2VzaW5rLCBvYmosIHJzdGFydCwgcnN0b3AsCisrICAgICAgICAgICAgR1NUX0NMT0NLX0VBUkxZLCBHU1RfQ0xPQ0tfRElGRiAoc3RpbWUsIG5vdyksIEZBTFNFKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzaW5rKTsKKysgICAgICB9CisrICAgIH0KKyAKKyAgICAgaWYgKEdfVU5MSUtFTFkgKGxhdGUpKQorICAgICAgIGdvdG8gZHJvcHBlZDsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvaW5wdXRzZWxlY3Rvci1zdGlja3ktZXZlbnRzLWhhdmVuLXQtc2VuZC1vdXQtd2hlbi1hYy0xLTQtMS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC9pbnB1dHNlbGVjdG9yLXN0aWNreS1ldmVudHMtaGF2ZW4tdC1zZW5kLW91dC13aGVuLWFjLTEtNC0xLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1MGNlNmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvaW5wdXRzZWxlY3Rvci1zdGlja3ktZXZlbnRzLWhhdmVuLXQtc2VuZC1vdXQtd2hlbi1hYy0xLTQtMS5wYXRjaApAQCAtMCwwICsxLDE2NyBAQAorRnJvbSA4M2JlZDkwYzMwNmVkMzE4NWQ0OGZlYmY2NDQxMTc3ZDYzOGY3MzQxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFdlZCwgMjQgRGVjIDIwMTQgMTA6MTM6NTEgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gaW5wdXRzZWxlY3Rvcjogc3RpY2t5IGV2ZW50cyBoYXZlbid0IHNlbmQgb3V0IHdoZW4gYWN0aXZlCisgdHJhY2sgcmVhY2ggRU9TCisKK0VPUyBldmVudCBoYXNuJ3QgYmVlbiBzZW5kIHRvIGRvd24tZWxlbWVudC4gVGhlIHJlc29sdXRpb24gaXMgYmxvY2sgRU9TIGV2ZW50CitvZiBpbmFjdGl2ZSBwYWQsIHNlbmQgdGhlIGV2ZW50IGFmdGVyIHRoZSBwYWQgYWN0aXZlZC4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MDk0OQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjUuMV0KKworU2lnbmVkLW9mZi1ieTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KKy0tLQorIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jIHwgICA1OCArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQorIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oIHwgICAgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmMKK2luZGV4IGZiNTA4MDIuLjQ0NjFmN2MgMTAwNjQ0CistLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYworKysrIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmMKK0BAIC00NDAsNiArNDQwLDE3IEBAIGdzdF9zZWxlY3Rvcl9wYWRfaXRlcmF0ZV9saW5rZWRfcGFkcyAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQpCisgfQorIAorIHN0YXRpYyBnYm9vbGVhbgorK2dzdF9pbnB1dF9zZWxlY3Rvcl9lb3Nfd2FpdCAoR3N0SW5wdXRTZWxlY3RvciAqIHNlbGYsIEdzdFNlbGVjdG9yUGFkICogcGFkKQorK3sKKysgIHdoaWxlICghc2VsZi0+ZW9zICYmICFzZWxmLT5mbHVzaGluZyAmJiAhcGFkLT5mbHVzaGluZykgeworKyAgICAvKiB3ZSBjYW4gYmUgdW5sb2NrZWQgaGVyZSB3aGVuIHdlIGFyZSBzaHV0dGluZyBkb3duIChmbHVzaGluZykgb3Igd2hlbiB3ZQorKyAgICAgKiBnZXQgdW5ibG9ja2VkICovCisrICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9XQUlUIChzZWxmKTsKKysgIH0KKysgIHJldHVybiBzZWxmLT5mbHVzaGluZzsKKyt9CisrCisrc3RhdGljIGdib29sZWFuCisgZ3N0X3NlbGVjdG9yX3BhZF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCisgeworICAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKK0BAIC00ODYsNiArNDk3LDcgQEAgZ3N0X3NlbGVjdG9yX3BhZF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCisgICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgorICAgICAgIC8qIFVuYmxvY2sgdGhlIHBhZCBpZiBpdCdzIHdhaXRpbmcgKi8KKyAgICAgICBzZWxwYWQtPmZsdXNoaW5nID0gVFJVRTsKKysgICAgICBzZWwtPmVvcyA9IEZBTFNFOworICAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9CUk9BRENBU1QgKHNlbCk7CisgICAgICAgYnJlYWs7CisgICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6CitAQCAtNTIzLDIxICs1MzUsMTIgQEAgZ3N0X3NlbGVjdG9yX3BhZF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCisgICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKKyAgICAgICBzZWxwYWQtPmVvcyA9IFRSVUU7CisgCistICAgICAgaWYgKGZvcndhcmQpIHsKKy0gICAgICAgIHNlbHBhZC0+ZW9zX3NlbnQgPSBUUlVFOworLSAgICAgIH0gZWxzZSB7CistICAgICAgICBHc3RTZWxlY3RvclBhZCAqYWN0aXZlX3NlbHBhZDsKKy0KKy0gICAgICAgIC8qIElmIHRoZSBhY3RpdmUgc2lua3BhZCBpcyBpbiBFT1Mgc3RhdGUgYnV0IEVPUworLSAgICAgICAgICogd2FzIG5vdCBzZW50IGRvd25zdHJlYW0gdGhpcyBtZWFucyB0aGF0IHRoZSBwYWQKKy0gICAgICAgICAqIGdvdCBFT1MgYmVmb3JlIGl0IHdhcyBzZXQgYXMgYWN0aXZlIHBhZCBhbmQgdGhhdAorLSAgICAgICAgICogdGhlIHByZXZpb3VzbHkgYWN0aXZlIHBhZCBnb3QgRU9TIGFmdGVyIGl0IHdhcworLSAgICAgICAgICogYWN0aXZlCistICAgICAgICAgKi8KKy0gICAgICAgIGFjdGl2ZV9zZWxwYWQgPSBHU1RfU0VMRUNUT1JfUEFEIChhY3RpdmVfc2lua3BhZCk7CistICAgICAgICBmb3J3YXJkID0gKGFjdGl2ZV9zZWxwYWQtPmVvcyAmJiAhYWN0aXZlX3NlbHBhZC0+ZW9zX3NlbnQpOworLSAgICAgICAgYWN0aXZlX3NlbHBhZC0+ZW9zX3NlbnQgPSBUUlVFOworKyAgICAgIGlmICghZm9yd2FyZCkgeworKyAgICAgICAgLyogYmxvY2tlZCB1bnRpbCBhY3RpdmUgdGhlIHNpbmQgcGFkIG9yIGZsdXNoICovCisrICAgICAgICBnc3RfaW5wdXRfc2VsZWN0b3JfZW9zX3dhaXQgKHNlbCwgc2VscGFkKTsKKysgICAgICAgIGZvcndhcmQgPSBUUlVFOworICAgICAgIH0KKysgICAgICBzZWxwYWQtPmVvc19zZW50ID0gVFJVRTsKKyAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJyZWNlaXZlZCBFT1MiKTsKKyAgICAgICBicmVhazsKKyAgICAgY2FzZSBHU1RfRVZFTlRfR0FQOnsKK0BAIC02NzYsNiArNjc5LDEyIEBAIGdzdF9pbnB1dF9zZWxlY3Rvcl93YWl0X3J1bm5pbmdfdGltZSAoR3N0SW5wdXRTZWxlY3RvciAqIHNlbCwKKyAgICAgICAgIGdzdF9pbnB1dF9zZWxlY3Rvcl9hY3RpdmF0ZV9zaW5rcGFkIChzZWwsIEdTVF9QQURfQ0FTVCAoc2VscGFkKSk7CisgICAgIGFjdGl2ZV9zZWxwYWQgPSBHU1RfU0VMRUNUT1JfUEFEX0NBU1QgKGFjdGl2ZV9zaW5rcGFkKTsKKyAKKysgICAgaWYgKHNlbC0+ZW9zKSB7CisrICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsLCAiTm90IHdhaXRpbmcgYmVjYXVzZSBpbnB1dHNlbGVjdG9yIHJlYWNoIEVPUy4iKTsKKysgICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfVU5MT0NLIChzZWwpOworKyAgICAgIHJldHVybiBGQUxTRTsKKysgICAgfQorKworICAgICBpZiAoc2VnLT5mb3JtYXQgIT0gR1NUX0ZPUk1BVF9USU1FKSB7CisgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VscGFkLAorICAgICAgICAgICAiTm90IHdhaXRpbmcgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgVElNRSBzZWdtZW50Iik7CitAQCAtOTcxLDYgKzk4MCwxMiBAQCBnc3Rfc2VsZWN0b3JfcGFkX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmKQorICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpKSk7CisgCisgICBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyAoc2VsKTsKKysgIGlmIChzZWwtPmVvcykgeworKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJpbnB1dHNlbGVjdG9yIGVvcy4iKTsKKysgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKKysgICAgZ290byBlb3M7CisrICB9CisrCisgICAvKiB3YWl0IG9yIGNoZWNrIGZvciBmbHVzaGluZyAqLworICAgaWYgKGdzdF9pbnB1dF9zZWxlY3Rvcl93YWl0IChzZWwsIHNlbHBhZCkpIHsKKyAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKK0BAIC0xMTUxLDYgKzExNjYsMTMgQEAgZmx1c2hpbmc6CisgICAgIHJlcyA9IEdTVF9GTE9XX0ZMVVNISU5HOworICAgICBnb3RvIGRvbmU7CisgICB9CisrZW9zOgorKyAgeworKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJXZSBhcmUgZW9zLCBkaXNjYXJkIGJ1ZmZlciAlcCIsIGJ1Zik7CisrICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisrICAgIHJlcyA9IEdTVF9GTE9XX0VPUzsKKysgICAgZ290byBkb25lOworKyAgfQorIH0KKyAKKyBzdGF0aWMgdm9pZCBnc3RfaW5wdXRfc2VsZWN0b3JfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7CitAQCAtMTMwOSw2ICsxMzMxLDcgQEAgZ3N0X2lucHV0X3NlbGVjdG9yX2luaXQgKEdzdElucHV0U2VsZWN0b3IgKiBzZWwpCisgICBnX211dGV4X2luaXQgKCZzZWwtPmxvY2spOworICAgZ19jb25kX2luaXQgKCZzZWwtPmNvbmQpOworICAgc2VsLT5ibG9ja2VkID0gRkFMU0U7CisrICBzZWwtPmVvcyA9IEZBTFNFOworIAorICAgLyogbGV0cyBnaXZlIGEgY2hhbmdlIGZvciBkb3duc3RyZWFtIHRvIGRvIHNvbWV0aGluZyBvbgorICAgICogYWN0aXZlLXBhZCBjaGFuZ2UgYmVmb3JlIHdlIHN0YXJ0IHB1c2hpbmcgbmV3IGJ1ZmZlcnMgKi8KK0BAIC0xMzc3LDYgKzE0MDAsMTEgQEAgZ3N0X2lucHV0X3NlbGVjdG9yX3NldF9hY3RpdmVfcGFkIChHc3RJbnB1dFNlbGVjdG9yICogc2VsZiwgR3N0UGFkICogcGFkKQorICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIk5ldyBhY3RpdmUgcGFkIGlzICUiIEdTVF9QVFJfRk9STUFULAorICAgICAgIHNlbGYtPmFjdGl2ZV9zaW5rcGFkKTsKKyAKKysgIGlmIChvbGQgIT0gbmV3ICYmIG5ldy0+ZW9zICYmICFuZXctPmVvc19zZW50KSB7CisrICAgIHNlbGYtPmVvcyA9IFRSVUU7CisrICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9CUk9BRENBU1QgKHNlbGYpOworKyAgfQorKworICAgcmV0dXJuIFRSVUU7CisgfQorIAorQEAgLTE3NzEsNiArMTc5OSw3IEBAIGdzdF9pbnB1dF9zZWxlY3Rvcl9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6CisgICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbGYpOworKyAgICAgIHNlbGYtPmVvcyA9IEZBTFNFOworICAgICAgIHNlbGYtPmJsb2NrZWQgPSBGQUxTRTsKKyAgICAgICBzZWxmLT5mbHVzaGluZyA9IEZBTFNFOworICAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbGYpOworQEAgLTE3NzksNiArMTgwOCw3IEBAIGdzdF9pbnB1dF9zZWxlY3Rvcl9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgICAgIC8qIGZpcnN0IHVubG9jayBiZWZvcmUgd2UgY2FsbCB0aGUgcGFyZW50IHN0YXRlIGNoYW5nZSBmdW5jdGlvbiwgd2hpY2gKKyAgICAgICAgKiB0cmllcyB0byBhY3F1aXJlIHRoZSBzdHJlYW0gbG9jayB3aGVuIGdvaW5nIHRvIHJlYWR5LiAqLworICAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChzZWxmKTsKKysgICAgICBzZWxmLT5lb3MgPSBUUlVFOworICAgICAgIHNlbGYtPmJsb2NrZWQgPSBGQUxTRTsKKyAgICAgICBzZWxmLT5mbHVzaGluZyA9IFRSVUU7CisgICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0JST0FEQ0FTVCAoc2VsZik7CitkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmggYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaAoraW5kZXggOTZjNjgwZi4uOWJmOTI0ZiAxMDA2NDQKKy0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oCisrKysgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaAorQEAgLTc3LDYgKzc3LDcgQEAgc3RydWN0IF9Hc3RJbnB1dFNlbGVjdG9yIHsKKyAgIEdNdXRleCBsb2NrOworICAgR0NvbmQgY29uZDsKKyAgIGdib29sZWFuIGJsb2NrZWQ7CisrICBnYm9vbGVhbiBlb3M7CisgICBnYm9vbGVhbiBmbHVzaGluZzsKKyB9OworIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMF8xLjQuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMF8xLjQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjU4NzU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wXzEuNC41LmJiCkBAIC0wLDAgKzEsMTcgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvZ3N0Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9ZTA1OTEzODQ4MTIwNWVlMmM2ZmMxYzA3OWMwMTZkMGQiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly8wMDAxLUZpeC1jcmFzaC13aXRoLWdzdC1pbnNwZWN0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMS1nc3RpbmZvLVNob3J0ZW4tX19GSUxFX18tb24tYWxsLXBsYXRmb3Jtcy5wYXRjaCBcCisgICAgZmlsZTovL2lucHV0c2VsZWN0b3Itc3RpY2t5LWV2ZW50cy1oYXZlbi10LXNlbmQtb3V0LXdoZW4tYWMtMS00LTEucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAyLWJhc2VzaW5rLUZpeC1Rb1MtbGF0ZW5lc3MtY2hlY2tpbmctaWYtc3ViY2xhc3MtaW1wbGUucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjg4YTkyODljNjRhNDk1MGViYjRmNTQ0OTgwMjM0Mjg5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQwODAxYWE3Zjk3OTAyNDUyNjI1OGEwZTk0NzA3YmE0MmI4YWI2ZjdkMjIwNmU1NmFkYmM0NDMzMTU1Y2IwYWUiCisKK1MgPSAiJHtXT1JLRElSfS9nc3RyZWFtZXItJHtQVn0iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMDBkMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfZ2l0LmJiCkBAIC0wLDAgKzEsMTggQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBnc3RyZWFtZXIxLjAuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC9nc3QuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT1lMDU5MTM4NDgxMjA1ZWUyYzZmYzFjMDc5YzAxNmQwZCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0cmVhbWVyO2JyYW5jaD1tYXN0ZXIiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNSRVYgPSAiM2I4MTgxYThjNTUwZTc0YWNhYmE0ZThjNTViZGM2NDlmYTU1MWRjOSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJY2QgJHtTfQorCS4vYXV0b2dlbi5zaCAtLW5vY29uZmlndXJlCisJY2QgJHtCfQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9sYW1lLTMuOTkuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIueC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lL2xhbWUtMy45OS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi54LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MWExZDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9sYW1lLTMuOTkuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIueC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRml4IHRoaXMga2luZCBvZiBlcnJvcnMgd2l0aCBhdXRvbWFrZSAxLjEyLng6Cit8IGRvYy9tYW4vTWFrZWZpbGUuYW06MzogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCBhdXRvcmVjb25mOiBhdXRvbWFrZSBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorCitTaWduZWQtT2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNy8xMworCitJbmRleDogbGFtZS0zLjk5LjUvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGFtZS0zLjk5LjUub3JpZy9jb25maWd1cmUuaW4KKysrKyBsYW1lLTMuOTkuNS9jb25maWd1cmUuaW4KK0BAIC03Nyw5ICs3Nyw2IEBAIGlmIHRlc3QgIiR7R0NDfSIgPSAieWVzIjsgdGhlbgorIAlBQ19NU0dfUkVTVUxUKCR7R0NDX3ZlcnNpb259KQorIGZpCisgCistZG5sIG1vcmUgYXV0b21ha2Ugc3R1ZmYKKy1BTV9DX1BST1RPVFlQRVMKKy0KKyBBQ19DSEVDS19IRUFERVIoZG1hbGxvYy5oKQorIGlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX2RtYWxsb2NfaH0iID0gInllcyI7IHRoZW4KKyAJQU1fV0lUSF9ETUFMTE9DCitJbmRleDogbGFtZS0zLjk5LjUvZG9jL2h0bWwvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsYW1lLTMuOTkuNS5vcmlnL2RvYy9odG1sL01ha2VmaWxlLmFtCisrKysgbGFtZS0zLjk5LjUvZG9jL2h0bWwvTWFrZWZpbGUuYW0KK0BAIC0xLDYgKzEsNiBAQAorICMjICRJZDogTWFrZWZpbGUuYW0sdiAxLjcgMjAxMC8wOS8zMCAyMDo1ODo0MCBqYXowMDEgRXhwICQKKyAKKy1BVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBhbnNpMmtucgorK0FVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduCisgCisgZG9jZGlyID0gJChkYXRhZGlyKS9kb2MKKyBwa2dkb2NkaXIgPSAkKGRvY2RpcikvJChQQUNLQUdFKQorSW5kZXg6IGxhbWUtMy45OS41L2xpYm1wM2xhbWUvaTM4Ni9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxhbWUtMy45OS41Lm9yaWcvbGlibXAzbGFtZS9pMzg2L01ha2VmaWxlLmFtCisrKysgbGFtZS0zLjk5LjUvbGlibXAzbGFtZS9pMzg2L01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDYgQEAKKyAjIyAkSWQ6IE1ha2VmaWxlLmFtLHYgMS4yNiAyMDExLzA0LzA0IDA5OjQyOjM0IGFsZWlkaW5nZXIgRXhwICQKKyAKKy1BVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiAkKHRvcF9zcmNkaXIpL2Fuc2kya25yCisrQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24KKyAKKyBERUZTID0gQERFRlNAIEBDT05GSUdfREVGU0AKKyAKK0luZGV4OiBsYW1lLTMuOTkuNS9kb2MvbWFuL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGFtZS0zLjk5LjUub3JpZy9kb2MvbWFuL01ha2VmaWxlLmFtCisrKysgbGFtZS0zLjk5LjUvZG9jL21hbi9NYWtlZmlsZS5hbQorQEAgLTEsNiArMSw2IEBACisgIyMgJElkOiBNYWtlZmlsZS5hbSx2IDEuMSAyMDAwLzEwLzIyIDExOjM5OjQ0IGFsZWlkaW5nZXIgRXhwICQKKyAKKy1BVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBhbnNpMmtucgorK0FVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduCisgCisgbWFuX01BTlMgPSBsYW1lLjEKKyBFWFRSQV9ESVNUID0gJHttYW5fTUFOU30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lL25vLWd0azEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9uby1ndGsxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4OGQ3ZjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9uby1ndGsxLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworIyBBY3F1aXJlZCBmcm9tIE9wZW5FbWJlZGRlZAorCistLS0gbGFtZS0zLjk2LjEvY29uZmlndXJlLmlufm5vLWd0azEucGF0Y2gJMjAwNC0wNy0yNSAxNTo1MjoxMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBsYW1lLTMuOTYuMS9jb25maWd1cmUuaW4JMjAwNC0wOS0xMCAxNTo1NDozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNjMsNyArMzYzLDEyIEBACisgCisgZG5sIGNvbmZpZ3VyZSB1c2Ugb2YgZmVhdHVyZXMKKyAKKy1BTV9QQVRIX0dUSygxLjIuMCwgSEFWRV9HVEs9InllcyIsIEhBVkVfR1RLPSJubyIpCisrI0FNX1BBVEhfR1RLKDEuMi4wLCBIQVZFX0dUSz0ieWVzIiwgSEFWRV9HVEs9Im5vIikKKytIQVZFX0dUSz0ibm8iCisrR1RLX0NGTEFHUz0iIgorK0dUS19MSUJTPSIiCisrQUNfU1VCU1QoR1RLX0NGTEFHUykKKytBQ19TVUJTVChHVEtfTElCUykKKworIGRubCBFbGVjdHJpY0ZlbmNlIG1hbGxvYyBkZWJ1Z2dpbmcKKyBBQ19NU0dfQ0hFQ0tJTkcodXNlIG9mIEVsZWN0cmljRmVuY2UgbWFsbG9jIGRlYnVnZ2luZykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lXzMuOTkuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lXzMuOTkuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDc3NjExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9sYW1lL2xhbWVfMy45OS41LmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiSGlnaCBxdWFsaXR5IE1QMyBhdWRpbyBlbmNvZGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL2xhbWUuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0yOTAmYXRpZD0xMDAyOTAiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCisKK0RFUEVORFMgPSAibmN1cnNlcyBnZXR0ZXh0LW5hdGl2ZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzQ2YmRhMDBmZmJiMGJhMWRhYzIyZjhkMDg3ZjU0ZDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9sYW1lLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9YTIyNTgxODJjNTkzYzM5OGQxNWE0ODI2MjEzMGE5MmIgXAorIgorUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xhbWUvbGFtZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbm8tZ3RrMS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sYW1lLTMuOTkuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIueC5wYXRjaCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NDgzNWIzMTNkNGE4YjY4ZjUzNDk4MTZkMzNlMDdjZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNDM0NmI0MTU4ZTRhZjNiZDlmMmUxOTRiYjIzZWI0NzNjNzVmYjczNzcwMTE1MjMzNTMxOTZiMTliOWEyM2ZmIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRVMgKz0gImxpYm1wM2xhbWUgbGlibXAzbGFtZS1kZXYiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vbGFtZSIKK0ZJTEVTX2xpYm1wM2xhbWUgPSAiJHtsaWJkaXJ9L2xpYm1wM2xhbWUuc28uKiIKK0ZJTEVTX2xpYm1wM2xhbWUtZGV2ID0gIiR7aW5jbHVkZWRpcn0gJHtsaWJkaXJ9LyoiCitGSUxFU18ke1BOfS1kZXYgPSAiIgorCitDQUNIRURfQ09ORklHVVJFVkFSU19hcHBlbmRfeDg2ID0gIiBhY19jdl9oZWFkZXJfZW1taW50cmluX2g9bm8gYWNfY3ZfaGVhZGVyX3htbWludHJpbl9oPW5vIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhNTIvbGliYTUyL2J1aWxkY2xlYW51cC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYTUyL2xpYmE1Mi9idWlsZGNsZWFudXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE2ODEwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYTUyL2xpYmE1Mi9idWlsZGNsZWFudXAucGF0Y2gKQEAgLTAsMCArMSw4OSBAQAorSXQgbWFrZXMgbXVjaCBtb3JlIHNlbnNlIHRvIGNvbnRyb2wgb3VyIG93biBDRkxBR1MgYW5kIGF2b2lkaW5nIGZQSUMgYnJlYWtzCitzb21lIGFyY2hlcyB0b28uIEFzc3VtZSB3ZSBrbm93IHdoYXQgd2UncmUgZG9pbmcgYW5kIHJlbW92ZSBhbGwgdGhlIG1lc3NpbmcgCithcm91bmQuCisKK1JQIDIzLzIvMTAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogYTUyZGVjLTAuNy40L2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGE1MmRlYy0wLjcuNC5vcmlnL2NvbmZpZ3VyZS5pbgkyMDEwLTAyLTIzIDE0OjUxOjUwLjAwMDAwMDAwMCArMDAwMAorKysrIGE1MmRlYy0wLjcuNC9jb25maWd1cmUuaW4JMjAxMC0wMi0yMyAxNDo1MjozNi4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNCw2MiArMTQsNiBAQAorIEFDX1BST0dfQ0MKKyBBQ19QUk9HX0dDQ19UUkFESVRJT05BTAorIAorLWlmIHRlc3QgeCIkR0NDIiA9IHgieWVzIjsgdGhlbgorLQorLSAgICBkbmwgR0NDLXNwZWNpZmljIGZsYWdzIC0gdHJ5IHRvIG9wdGltaXplIHRoZW0gc29tZXRpbWUKKy0gICAgZG5sIC1XYWxsIC1XZXJyb3IgbW92ZWQgdG8gdGhlIGVuZCB0byBub3QgZGlzdHVyYiB0aGUgY29uZmlndXJlIHNjcmlwdAorLQorLSAgICBkbmwgLU8zCistICAgIGNoYW5nZXF1b3RlKDw8LD4+KQorLSAgICBPUFRfQ0ZMQUdTPWBlY2hvICIkQ0ZMQUdTInxzZWQgInMvLU9bMC05XSovL2ciYAorLSAgICBjaGFuZ2VxdW90ZShbLF0pCistICAgIE9QVF9DRkxBR1M9IiRPUFRfQ0ZMQUdTIC1PMyIKKy0gICAgQUNfVFJZX0NGTEFHUyhbJE9QVF9DRkxBR1NdLFtDRkxBR1M9JE9QVF9DRkxBR1NdKQorLQorLSAgICBkbmwgLWZvbWl0LWZyYW1lLXBvaW50ZXIKKy0gICAgT1BUX0NGTEFHUz0iJENGTEFHUyAtZm9taXQtZnJhbWUtcG9pbnRlciIKKy0gICAgQUNfVFJZX0NGTEFHUyhbJE9QVF9DRkxBR1NdLFtDRkxBR1M9JE9QVF9DRkxBR1NdKQorLQorLSAgICBkbmwgYXJjaC1zcGVjaWZpYyBmbGFncworLSAgICBjYXNlICIkaG9zdCIgaW4KKy0gICAgaT84Ni0qIHwgaz8tKikKKy0JY2FzZSAiJGhvc3QiIGluCistCWkzODYtKikgT1BUX0NGTEFHUz0iJENGTEFHUyAtbWNwdT1pMzg2Ijs7CistCWk0ODYtKikgT1BUX0NGTEFHUz0iJENGTEFHUyAtbWNwdT1pNDg2Ijs7CistCWk1ODYtKikgT1BUX0NGTEFHUz0iJENGTEFHUyAtbWNwdT1wZW50aXVtIjs7CistCWk2ODYtKikgT1BUX0NGTEFHUz0iJENGTEFHUyAtbWNwdT1wZW50aXVtcHJvIjs7CistCWs2LSopICAgT1BUX0NGTEFHUz0iJENGTEFHUyAtbWNwdT1rNiI7OworLQllc2FjCistCUFDX1RSWV9DRkxBR1MoWyRPUFRfQ0ZMQUdTXSxbQ0ZMQUdTPSRPUFRfQ0ZMQUdTXSk7OworLSAgICBzcGFyYy0qIHwgc3BhcmM2NC0qKQorLQlPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC1tdHVuZT11bHRyYXNwYXJjIgorLQlBQ19UUllfQ0ZMQUdTKFskT1BUX0NGTEFHU10sW0NGTEFHUz0kT1BUX0NGTEFHU10pOzsKKy0gICAgbWlwcy1zZ2ktaXJpeDYuKikJZG5sIGRvIHdlIG5lZWQgdG8gYmUgdGhhdCBzcGVjaWZpYyA/CistCU9QVF9DRkxBR1M9IiRDRkxBR1MgLW1hYmk9NjQiCistCUFDX1RSWV9DRkxBR1MoWyRPUFRfQ0ZMQUdTXSxbQ0ZMQUdTPSRPUFRfQ0ZMQUdTXSk7OworLSAgICBlc2FjCistZWxpZiB0ZXN0IHgiJENDIiA9IHgidGNjIiAtYSB4ImAkQ0MgLXZlcnNpb24gMj4mMSB8IGdyZXAgVGVuRFJBYCIgIT0geCIiOyB0aGVuCistICAgIGRubCBUZW5EUkEgcG9ydGFiaWxpdHkgY2hlY2tpbmcgY29tcGlsZXIKKy0gICAgVEVORFJBPXllcworLSAgICBDRkxBR1M9Ii1YcCAtWWFuc2kgLWZgcHdkYC9pbmNsdWRlL3RlbmRyYS5oIC1ERUxJREVfQ09ERSIKKy0gICAgZW5hYmxlX21saWI9bm8KKy0gICAgZW5hYmxlX29zcz1ubworLSAgICBlbmFibGVfc29sYXJpc19hdWRpbz1ubworLWVsaWYgdGVzdCB4IiRDQyIgPSB4ImljYyIgLWEgeCJgJENDIC1WIDI+JjEgfCBncmVwIEludGVsYCIgIT0geCIiOyB0aGVuCistICAgIGRubCBJbnRlbCBDKysgY29tcGlsZXIKKy0gICAgQ0ZMQUdTPSItZyAtTzMgLXVucm9sbCAtaXAiCistZWxzZQorLSAgICBkbmwgbm9uLWdjYyBmbGFncyAtIHdlIHByb2JhYmx5IG5lZWQgZXhhY3QgY29uZmlndXJhdGlvbiB0cmlwbGV0cyBoZXJlLgorLSAgICBjYXNlICIkaG9zdCIgaW4KKy0gICAgbWlwcy1zZ2ktaXJpeDYuKikKKy0JT1BUX0NGTEFHUz0iJENGTEFHUyAtNjQiCistCUFDX1RSWV9DRkxBR1MoWyRPUFRfQ0ZMQUdTXSxbQ0ZMQUdTPSRPUFRfQ0ZMQUdTXSk7OworLSAgICBzcGFyYy1zdW4tc29sYXJpcyopCistCU9QVF9DRkxBR1M9IiRDRkxBR1MgLXhDQyAtZmFzdCAteE81IgorLQlBQ19UUllfQ0ZMQUdTKFskT1BUX0NGTEFHU10sW0NGTEFHUz0kT1BUX0NGTEFHU10pOzsKKy0gICAgZXNhYworLWZpCistCisgZG5sIENoZWNrcyBmb3IgbGlidG9vbCAtIHRoaXMgbXVzdCBiZSBkb25lIGFmdGVyIHdlIHNldCBjZmxhZ3MKKyBBQ19ESVNBQkxFX1NIQVJFRAorIEFDX0xJQlRPT0xfV0lOMzJfRExMCitJbmRleDogYTUyZGVjLTAuNy40L2xpYmE1Mi9jb25maWd1cmUuaW5jbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGE1MmRlYy0wLjcuNC5vcmlnL2xpYmE1Mi9jb25maWd1cmUuaW5jbAkyMDEwLTAyLTIzIDE0OjUxOjQ0LjAwMDAwMDAwMCArMDAwMAorKysrIGE1MmRlYy0wLjcuNC9saWJhNTIvY29uZmlndXJlLmluY2wJMjAxMC0wMi0yMyAxNDo1MTo1OS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDkgKzEsNiBAQAorIEFDX1NVQlNUKFtMSUJBNTJfQ0ZMQUdTXSkKKyBBQ19TVUJTVChbTElCQTUyX0xJQlNdKQorIAorLWRubCBhdm9pZCAtZlBJQyB3aGVuIHBvc3NpYmxlCistTElCQTUyX0NGTEFHUz0iJExJQkE1Ml9DRkxBR1MgLXByZWZlci1ub24tcGljIgorLQorIEFDX0FSR19FTkFCTEUoW2RvdWJsZV0sCisgICAgIFsgIC0tZW5hYmxlLWRvdWJsZSAgICAgICAgIHVzZSBkb3VibGUtcHJlY2lzaW9uIHNhbXBsZXNdKQorIGlmIHRlc3QgeCIkZW5hYmxlX2RvdWJsZSIgPSB4InllcyI7IHRoZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYTUyL2xpYmE1Ml8wLjcuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYTUyL2xpYmE1Ml8wLjcuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGI2NmIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhNTIvbGliYTUyXzAuNy40LmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiQVRTQyBBLzUyIHN1cnJvdW5kIHNvdW5kIHN0cmVhbSBkZWNvZGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpYmE1Mi5zb3VyY2Vmb3JnZS5uZXQvIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyBcCisJCQlmaWxlOi8vaW5jbHVkZS9hNTIuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTEyO21kNT04MTE1MmNlYjM1NjJiZjIwYTYwZDFiNjAxODE3NWRkMSIKK1NFQ1RJT04gPSAibGlicyIKK1BSID0gInI0IgorCitpbmhlcml0IGF1dG90b29scworCitTUkNfVVJJID0gImh0dHA6Ly9saWJhNTIuc291cmNlZm9yZ2UubmV0L2ZpbGVzL2E1MmRlYy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYnVpbGRjbGVhbnVwLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2FhOWY1YmM0NDIzMmRjOGFlZWE3NzNmZWE1NmJlODAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTIxZDcyNGFiM2IzOTMzMzMwMTk0MzUzNjg3ZGY4MmM0NzViNWRmYjk5NzUxM2VlZjRjMjVkZTZjODY1ZWMzMyIKK1MgPSAiJHtXT1JLRElSfS9hNTJkZWMtJHtQVn0iCisKK0VYVFJBX09FQ09ORiA9ICIgLS1lbmFibGUtc2hhcmVkICIKKworUEFDS0FHRVMgPSsgImE1MmRlYyBhNTJkZWMtZG9jIgorCitGSUxFU19hNTJkZWMgPSAiICR7YmluZGlyfS8qICIKK0ZJTEVTX2E1MmRlYy1kb2MgPSAiICR7bWFuZGlyfS9tYW4xLyogIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYmF2LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2Y0YjFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdi5pbmMKQEAgLTAsMCArMSwxNDYgQEAKK1NVTU1BUlkgPSAiT3BlbiBzb3VyY2UgYXVkaW8gYW5kIHZpZGVvIHByb2Nlc3NpbmcgdG9vbHMgYW5kIGxpYnJhaXJpZXMiCitERVNDUklQVElPTiA9ICJMaWJhdiBpcyBhIGZyaWVuZGx5IGFuZCBjb21tdW5pdHktZHJpdmVuIGVmZm9ydCB0byBwcm92aWRlIGl0cyB1c2VycyBcCisgICAgICAgICAgICAgICB3aXRoIGEgc2V0IG9mIHBvcnRhYmxlLCBmdW5jdGlvbmFsIGFuZCBoaWdoLXBlcmZvcm1hbmNlIGxpYnJhcmllcyBmb3IgXAorICAgICAgICAgICAgICAgZGVhbGluZyB3aXRoIG11bHRpbWVkaWEgZm9ybWF0cyBvZiBhbGwgc29ydHMuIEl0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgXAorICAgICAgICAgICAgICAgRkZtcGVnIGNvZGViYXNlLCBidXQgZ29lcyBpdHMgb3duIHdheSB0aGVzZSBkYXlzLCBwcm92aWRpbmcgaXRzIHVzZXJzIFwKKyAgICAgICAgICAgICAgIHdpdGggcmVsaWFibGUgcmVsZWFzZXMgYW5kIGEgY2xlYXIgdmlzaW9uIGhvdyB0byBnbyBmb3J3YXJkLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9saWJhdi5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5HUEx2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEx2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MR1BMdjIuMTttZDU9YmQ3YTQ0MzMyMGFmOGM4MTJlNGMxOGQxYjc5ZGYwMDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MR1BMdjM7bWQ1PWU2YTYwMGZkNWUxZDljYmRlMmQ5ODM2ODAyMzNhZDAyIgorCitTUkNfVVJJID0gImh0dHA6Ly9saWJhdi5vcmcvcmVsZWFzZXMvJHtCUH0udGFyLnh6IgorCisjIFByb3ZpZGVzIGZmbXBlZyBjb21wYXQsIHNlZSBodHRwOi8vbGliYXYub3JnL2Fib3V0Lmh0bWwKK1BST1ZJREVTID0gImZmbXBlZyIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK0RFUEVORFMgPSAiYWxzYS1saWIgemxpYiBsaWJvZ2cgeWFzbS1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitCID0gIiR7U30vYnVpbGQuJHtIT1NUX1NZU30uJHtUQVJHRVRfU1lTfSIKKworRlVMTF9PUFRJTUlaQVRJT05fYXJtdjdhID0gIi1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU80IC1mZmFzdC1tYXRoIgorQlVJTERfT1BUSU1JWkFUSU9OID0gIiR7RlVMTF9PUFRJTUlaQVRJT059IgorCitFWFRSQV9GRkNPTkZfYXJtdjdhID0gIi0tY3B1PWNvcnRleC1hOCIKK0VYVFJBX0ZGQ09ORiA/PSAiIgorCitQQUNLQUdFQ09ORklHID8/PSAiYnppcDIgeDI2NCB0aGVvcmEgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbYnppcDJdID0gIi0tZW5hYmxlLWJ6bGliLC0tZGlzYWJsZS1iemxpYixiemlwMiIKK1BBQ0tBR0VDT05GSUdbZmFhY10gPSAiLS1lbmFibGUtbGliZmFhYywtLWRpc2FibGUtbGliZmFhYyxmYWFjIgorUEFDS0FHRUNPTkZJR1tnc21dID0gIi0tZW5hYmxlLWxpYmdzbSwtLWRpc2FibGUtbGliZ3NtLGxpYmdzbSIKK1BBQ0tBR0VDT05GSUdbamFja10gPSAiLS1lbmFibGUtaW5kZXY9amFjaywtLWRpc2FibGUtaW5kZXY9amFjayxqYWNrIgorUEFDS0FHRUNPTkZJR1tsaWJ2b3JiaXNdID0gIi0tZW5hYmxlLWxpYnZvcmJpcywtLWRpc2FibGUtbGlidm9yYmlzLGxpYnZvcmJpcyIKK1BBQ0tBR0VDT05GSUdbbXAzbGFtZV0gPSAiLS1lbmFibGUtbGlibXAzbGFtZSwtLWRpc2FibGUtbGlibXAzbGFtZSxsYW1lIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLWVuYWJsZS1vcGVuc3NsLC0tZGlzYWJsZS1vcGVuc3NsLG9wZW5zc2wiCitQQUNLQUdFQ09ORklHW3NjaHJvZWRpbmdlcl0gPSAiLS1lbmFibGUtbGlic2Nocm9lZGluZ2VyLC0tZGlzYWJsZS1saWJzY2hyb2VkaW5nZXIsc2Nocm9lZGluZ2VyIgorUEFDS0FHRUNPTkZJR1tzcGVleF0gPSAiLS1lbmFibGUtbGlic3BlZXgsLS1kaXNhYmxlLWxpYnNwZWV4LHNwZWV4IgorUEFDS0FHRUNPTkZJR1t0aGVvcmFdID0gIi0tZW5hYmxlLWxpYnRoZW9yYSwtLWRpc2FibGUtbGlidGhlb3JhLGxpYnRoZW9yYSIKK1BBQ0tBR0VDT05GSUdbdmFhcGldID0gIi0tZW5hYmxlLXZhYXBpLC0tZGlzYWJsZS12YWFwaSxsaWJ2YSIKK1BBQ0tBR0VDT05GSUdbdnB4XSA9ICItLWVuYWJsZS1saWJ2cHgsLS1kaXNhYmxlLWxpYnZweCxsaWJ2cHgiCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExZ3JhYiwtLWRpc2FibGUteDExZ3JhYix2aXJ0dWFsL2xpYngxMSBsaWJ4Zml4ZXMgbGlieGV4dCB4cHJvdG8gdmlydHVhbC9saWJzZGwiCitQQUNLQUdFQ09ORklHW3gyNjRdID0gIi0tZW5hYmxlLWxpYngyNjQsLS1kaXNhYmxlLWxpYngyNjQseDI2NCIKKworIyBDaGVjayBjb2RlY3MgdGhhdCByZXF1aXJlIC0tZW5hYmxlLW5vbmZyZWUKK1VTRV9OT05GUkVFID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgnUEFDS0FHRUNPTkZJRycsIFsgJ2ZhYWMnLCAnb3BlbnNzbCcgXSwgJ3llcycsICcnLCBkKX0iCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgLS1lbmFibGUtcHRocmVhZHMgXAorICAgIC0tZW5hYmxlLWdwbCBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1VTRV9OT05GUkVFJywgJ3llcycsICctLWVuYWJsZS1ub25mcmVlJywgJycsIGQpfSBcCisgICAgLS1lbmFibGUtYXZmaWx0ZXIgXAorICAgIFwKKyAgICAtLWNyb3NzLXByZWZpeD0ke1RBUkdFVF9QUkVGSVh9IFwKKyAgICAtLXByZWZpeD0ke3ByZWZpeH0gXAorICAgIFwKKyAgICAtLWVuYWJsZS1hdnNlcnZlciBcCisgICAgLS1lbmFibGUtYXZwbGF5IFwKKyAgICAtLWxkPSIke0NDTER9IiBcCisgICAgLS1hcmNoPSR7VEFSR0VUX0FSQ0h9IFwKKyAgICAtLXRhcmdldC1vcz0ibGludXgiIFwKKyAgICAtLWVuYWJsZS1jcm9zcy1jb21waWxlIFwKKyAgICAtLWV4dHJhLWNmbGFncz0iJHtUQVJHRVRfQ0ZMQUdTfSAke0hPU1RfQ0NfQVJDSH0ke1RPT0xDSEFJTl9PUFRJT05TfSIgXAorICAgIC0tZXh0cmEtbGRmbGFncz0iJHtUQVJHRVRfTERGTEFHU30iIFwKKyAgICAtLXN5c3Jvb3Q9IiR7U1RBR0lOR19ESVJfVEFSR0VUfSIgXAorICAgIC0tZW5hYmxlLWhhcmRjb2RlZC10YWJsZXMgXAorICAgICR7RVhUUkFfRkZDT05GfSBcCisgICAgLS1saWJkaXI9JHtsaWJkaXJ9IFwKKyAgICAtLXNobGliZGlyPSR7bGliZGlyfSBcCisiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAjIFdlIGRvbid0IGhhdmUgVEFSR0VUX1BSRUZJWC1wa2djb25maWcKKyAgICBzZWQgLWkgJy9wa2dfY29uZmlnX2RlZmF1bHQ9IiR7Y3Jvc3NfcHJlZml4fSR7cGtnX2NvbmZpZ19kZWZhdWx0fSIvZCcgJHtTfS9jb25maWd1cmUKKyAgICBta2RpciAtcCAke0J9CisgICAgY2QgJHtCfQorICAgICR7U30vY29uZmlndXJlICR7RVhUUkFfT0VDT05GfQorICAgIHNlZCAtaSAtZSBzOk9zOk80OmcgJHtCfS9jb25maWcuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9saWJhdmZpbHRlci8qLmggJHtEfSR7aW5jbHVkZWRpcn0vbGliYXZmaWx0ZXIvCit9CisKK1BBQ0tBR0VTICs9ICIke1BOfS12aG9vay1kYmcgJHtQTn0tdmhvb2sgZmZtcGVnLXgyNjQtcHJlc2V0cyIKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5saWIoYXYoY29kZWN8ZGV2aWNlfGZpbHRlcnxmb3JtYXR8dXRpbCl8c3dzY2FsZSkuKiIKKworUlNVR0dFU1RTXyR7UE59ID0gIm1wbGF5ZXIiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0iCitGSUxFU18ke1BOfS1kZXYgPSAiJHtpbmNsdWRlZGlyfS8ke1BOfSIKKworRklMRVNfJHtQTn0tdmhvb2sgPSAiJHtsaWJkaXJ9L3Zob29rIgorRklMRVNfJHtQTn0tdmhvb2stZGJnICs9ICIke2xpYmRpcn0vdmhvb2svLmRlYnVnIgorCitGSUxFU19mZm1wZWcteDI2NC1wcmVzZXRzID0gIiR7ZGF0YWRpcn0vKi5hdnByZXNldCIKKworTEVBRF9TT05BTUUgPSAibGliYXZjb2RlYy5zbyIKKworRklMRVNfJHtQTn0tZGV2ID0gIiR7aW5jbHVkZWRpcn0iCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIGF2X2xpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0nKQorICAgIGF2X3BrZ2NvbmZpZyA9IGQuZXhwYW5kKCcke2xpYmRpcn0vcGtnY29uZmlnJykKKworICAgICMgUnVudGltZSBwYWNrYWdlCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYXZfbGliZGlyLCAnXmxpYiguKilcLnNvXC4uKicsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49J2xpYiVzJywKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nbGliYXYgJXMgbGlicmFyeScsCisgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGVwZW5kcz0nJywKKyAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfbGlua3M9VHJ1ZSkKKworICAgICMgRGV2ZWxvcG1lbnQgcGFja2FnZXMgKC1kZXYsIC1zdGF0aWNkZXYpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYXZfbGliZGlyLCAnXmxpYiguKilcLnNvJCcsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49J2xpYiVzLWRldicsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J2xpYmF2ICVzIGRldmVsb3BtZW50IHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RlcGVuZHM9JyR7UE59LWRldicsCisgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgIGFsbG93X2xpbmtzPVRydWUpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYXZfcGtnY29uZmlnLCAnXmxpYiguKilcLnBjJCcsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49J2xpYiVzLWRldicsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J2xpYmF2ICVzIGRldmVsb3BtZW50IHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RlcGVuZHM9JyR7UE59LWRldicsCisgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZD1UcnVlKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGF2X2xpYmRpciwgJ15saWIoLiopXC5hJCcsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49J2xpYiVzLXN0YXRpY2RldicsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J2xpYmF2ICVzIGRldmVsb3BtZW50IHBhY2thZ2UgLSBzdGF0aWMgbGlicmFyeScsCisgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGVwZW5kcz0nJHtQTn0tZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfbGlua3M9VHJ1ZSkKKworICAgIGlmIGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpIGluIFsgJ2k1ODYnLCAnaTY4NicgXToKKyAgICAgICAgIyBsaWJhdiBjYW4ndCBiZSBidWlsZCB3aXRoIC1mUElDIGZvciAzMi1iaXQgeDg2CisgICAgICAgIHBrZ3MgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdJTlNBTkVfU0tJUF8lcycgJSBwa2csICcgdGV4dHJlbCcpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYmF2L2xpYmF2LWZpeC1DVkUtMjAxNC05Njc2LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdi9saWJhdi1maXgtQ1ZFLTIwMTQtOTY3Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTMxY2FhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdi9saWJhdi1maXgtQ1ZFLTIwMTQtOTY3Ni5wYXRjaApAQCAtMCwwICsxLDk4IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0JhY2twb3J0IHBhdGNoIHRvIGZpeCBDVkUtMjAxNC05Njc2LgorCitodHRwczovL3NlY3VyaXR5LXRyYWNrZXIuZGViaWFuLm9yZy90cmFja2VyL0NWRS0yMDE0LTk2NzYKK2h0dHBzOi8vZ2l0LmxpYmF2Lm9yZy8/cD1saWJhdi5naXQ7YT1jb21taXQ7aD1iM2YwNDY1NzM2OGEzMmE5OTAzNDA2Mzk1Zjg2NWUyMzBiMWRlMzQ4CisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitGcm9tIGIzZjA0NjU3MzY4YTMyYTk5MDM0MDYzOTVmODY1ZTIzMGIxZGUzNDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMdWNhIEJhcmJhdG8gPGx1X3plcm9AZ2VudG9vLm9yZz4KK0RhdGU6IE1vbiwgNSBKYW4gMjAxNSAxMDo0MDo0MSArMDEwMAorU3ViamVjdDogW1BBVENIXSBzZWdtZW50OiBGaXggdGhlIGZhaWx1cmUgcGF0aHMKKworQSBmYWlsdXJlIGluIHNlZ21lbnRfZW5kKCkgb3Igc2VnbWVudF9zdGFydCgpIHdvdWxkIGxlYWQgdG8gZnJlZWluZworYSBkYW5nbGluZyBwb2ludGVyIGFuZCBpbiBnZW5lcmFsIGZ1cnRoZXIgY2FsbHMgdG8gc2VnX3dyaXRlX3BhY2tldCgpCitvciB0byBzZWdfd3JpdGVfdHJhaWxlcigpIHdvdWxkIGhhdmUgdGhlIHNhbWUgZmF1bHR5IGJlaGF2aW91ci4KKworQ0M6IGxpYmF2LXN0YWJsZUBsaWJhdi5vcmcKK1JlcG9ydGVkLUJ5OiBsdW9kYWxvbmdkZUBnbWFpbC5jb20KKy0tLQorIGxpYmF2Zm9ybWF0L3NlZ21lbnQuYyB8IDMyICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvc2VnbWVudC5jIGIvbGliYXZmb3JtYXQvc2VnbWVudC5jCitpbmRleCA1MmRhNmI5Li5iY2ZkMWY5IDEwMDY0NAorLS0tIGEvbGliYXZmb3JtYXQvc2VnbWVudC5jCisrKysgYi9saWJhdmZvcm1hdC9zZWdtZW50LmMKK0BAIC0xODQsNiArMTg0LDEzIEBAIHN0YXRpYyB2b2lkIGNsb3NlX251bGxfY3R4KEFWSU9Db250ZXh0ICpwYikKKyAgICAgYXZfZnJlZShwYik7CisgfQorIAorK3N0YXRpYyB2b2lkIHNlZ19mcmVlX2NvbnRleHQoU2VnbWVudENvbnRleHQgKnNlZykKKyt7CisrICAgIGF2aW9fY2xvc2VwKCZzZWctPnBiKTsKKysgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KHNlZy0+YXZmKTsKKysgICAgc2VnLT5hdmYgPSBOVUxMOworK30KKysKKyBzdGF0aWMgaW50IHNlZ193cml0ZV9oZWFkZXIoQVZGb3JtYXRDb250ZXh0ICpzKQorIHsKKyAgICAgU2VnbWVudENvbnRleHQgKnNlZyA9IHMtPnByaXZfZGF0YTsKK0BAIC0yNjUsMTIgKzI3Miw5IEBAIHN0YXRpYyBpbnQgc2VnX3dyaXRlX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpCisgICAgIH0KKyAKKyBmYWlsOgorLSAgICBpZiAocmV0KSB7CistICAgICAgICBpZiAoc2VnLT5saXN0KQorLSAgICAgICAgICAgIGF2aW9fY2xvc2Uoc2VnLT5wYik7CistICAgICAgICBpZiAoc2VnLT5hdmYpCistICAgICAgICAgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KHNlZy0+YXZmKTsKKy0gICAgfQorKyAgICBpZiAocmV0IDwgMCkKKysgICAgICAgIHNlZ19mcmVlX2NvbnRleHQoc2VnKTsKKysKKyAgICAgcmV0dXJuIHJldDsKKyB9CisgCitAQCAtMjgyLDYgKzI4Niw5IEBAIHN0YXRpYyBpbnQgc2VnX3dyaXRlX3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCisgICAgIGludDY0X3QgZW5kX3B0cyA9IHNlZy0+cmVjb3JkaW5nX3RpbWUgKiBzZWctPm51bWJlcjsKKyAgICAgaW50IHJldCwgY2FuX3NwbGl0ID0gMTsKKyAKKysgICAgaWYgKCFvYykKKysgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisrCisgICAgIGlmIChzZWctPmhhc192aWRlbykgeworICAgICAgICAgY2FuX3NwbGl0ID0gc3QtPmNvZGVjLT5jb2RlY190eXBlID09IEFWTUVESUFfVFlQRV9WSURFTyAmJgorICAgICAgICAgICAgICAgICAgICAgcGt0LT5mbGFncyAmIEFWX1BLVF9GTEFHX0tFWTsKK0BAIC0zMjIsMTEgKzMyOSw4IEBAIHN0YXRpYyBpbnQgc2VnX3dyaXRlX3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCisgICAgIHJldCA9IGZmX3dyaXRlX2NoYWluZWQob2MsIHBrdC0+c3RyZWFtX2luZGV4LCBwa3QsIHMpOworIAorIGZhaWw6CistICAgIGlmIChyZXQgPCAwKSB7CistICAgICAgICBpZiAoc2VnLT5saXN0KQorLSAgICAgICAgICAgIGF2aW9fY2xvc2Uoc2VnLT5wYik7CistICAgICAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQob2MpOworLSAgICB9CisrICAgIGlmIChyZXQgPCAwKQorKyAgICAgICAgc2VnX2ZyZWVfY29udGV4dChzZWcpOworIAorICAgICByZXR1cm4gcmV0OworIH0KK0BAIC0zMzUsNyArMzM5LDExIEBAIHN0YXRpYyBpbnQgc2VnX3dyaXRlX3RyYWlsZXIoc3RydWN0IEFWRm9ybWF0Q29udGV4dCAqcykKKyB7CisgICAgIFNlZ21lbnRDb250ZXh0ICpzZWcgPSBzLT5wcml2X2RhdGE7CisgICAgIEFWRm9ybWF0Q29udGV4dCAqb2MgPSBzZWctPmF2ZjsKKy0gICAgaW50IHJldDsKKysgICAgaW50IHJldCA9IDA7CisrCisrICAgIGlmICghb2MpCisrICAgICAgICBnb3RvIGZhaWw7CisrCisgICAgIGlmICghc2VnLT53cml0ZV9oZWFkZXJfdHJhaWxlcikgeworICAgICAgICAgaWYgKChyZXQgPSBzZWdtZW50X2VuZChvYywgMCkpIDwgMCkKKyAgICAgICAgICAgICBnb3RvIGZhaWw7CistLSAKKzIuNC4xLjMxNC5nOTUzMmVhZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYmF2XzkuMTguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYmF2XzkuMTguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEwYTY0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYXYvbGliYXZfOS4xOC5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgbGliYXYuaW5jCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3NWU4MzgwNjhhNzVmYjg4ZTFiNGVhMDU0NmJjMTZmMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwODc1ZTgzNWRhNjgzZWVmMWE3YmFjNzVlMTg4NDYzNDE5NDE0OWQ3NDc5ZDE1MzhiYTlmYmUxNjE0ZDA2NmQ3IgorCitTUkNfVVJJICs9ICJmaWxlOi8vbGliYXYtZml4LUNWRS0yMDE0LTk2NzYucGF0Y2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYnBvc3Rwcm9jX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYXYvbGlicG9zdHByb2NfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYWE1MGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYnBvc3Rwcm9jX2dpdC5iYgpAQCAtMCwwICsxLDQ3IEBACitTVU1NQVJZID0gIkZGbXBlZyBkZXJpdmVkIHBvc3Rwcm9jZXNzaW5nIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnZpZGVvbGFuLm9yZy8/cD1saWJwb3N0cHJvYy5naXQ7YT1zdW1tYXJ5IgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJsaWJhdiIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKKyMgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGxpYmF2IHdoaWNoIGhhcyBjb21tZXJjaWFsIGZsYWcKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKKworUFYgPSAiNTIuMy4wK2dpdCR7U1JDUFZ9IgorCitTUkNSRVYgPSAiODExZGIzYjk1N2RmZGUyNGFlZjJkMGY4MmUyOTdlNWJmNTUyZDg3MyIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9sdS16ZXJvL3Bvc3Rwcm9jO3Byb3RvY29sPWh0dHBzIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBwa2djb25maWcKKworRlVMTF9PUFRJTUlaQVRJT05fYXJtdjdhID0gIi1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU80IC1mZmFzdC1tYXRoIgorQlVJTERfT1BUSU1JWkFUSU9OID0gIiR7RlVMTF9PUFRJTUlaQVRJT059IgorCitFWFRSQV9GRkNPTkZfYXJtdjdhID0gIi0tY3B1PWNvcnRleC1hOCIKK0VYVFJBX0ZGQ09ORiA/PSAiIgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgIC0tZW5hYmxlLXB0aHJlYWRzIFwKKyAgICAtLWVuYWJsZS1ncGwgXAorICAgIC0tZW5hYmxlLXBvc3Rwcm9jIFwKKyAgICBcCisgICAgLS1jcm9zcy1wcmVmaXg9JHtUQVJHRVRfUFJFRklYfSBcCisgICAgLS1wcmVmaXg9JHtwcmVmaXh9IFwKKyAgICBcCisgICAgLS1hcmNoPSR7VEFSR0VUX0FSQ0h9IFwKKyAgICAtLXRhcmdldC1vcz0ibGludXgiIFwKKyAgICAtLWVuYWJsZS1jcm9zcy1jb21waWxlIFwKKyAgICAtLWV4dHJhLWNmbGFncz0iJHtUQVJHRVRfQ0ZMQUdTfSAke0hPU1RfQ0NfQVJDSH0ke1RPT0xDSEFJTl9PUFRJT05TfSIgXAorICAgIC0tZXh0cmEtbGRmbGFncz0iJHtUQVJHRVRfTERGTEFHU30iIFwKKyAgICAtLXN5c3Jvb3Q9IiR7U1RBR0lOR19ESVJfVEFSR0VUfSIgXAorICAgIC0tc2hsaWJkaXI9IiR7bGliZGlyfSIgXAorICAgICR7RVhUUkFfRkZDT05GfSBcCisiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAke1N9L2NvbmZpZ3VyZSAke0VYVFJBX09FQ09ORn0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZy9hZGRwa2djb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWcvYWRkcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZDQwYzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWcvYWRkcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGxpYmlkM3RhZy0wLjE1LjFiL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliaWQzdGFnLTAuMTUuMWIub3JpZy9NYWtlZmlsZS5hbQkyMDA5LTA3LTI5IDA5OjI5OjIwLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYmlkM3RhZy0wLjE1LjFiL01ha2VmaWxlLmFtCTIwMDktMDctMjkgMDk6Mjk6NDcuMDAwMDAwMDAwICswMTAwCitAQCAtMjcsNiArMjcsOSBAQAorIGxpYl9MVExJQlJBUklFUyA9CWxpYmlkM3RhZy5sYQorIGluY2x1ZGVfSEVBREVSUyA9CWlkM3RhZy5oCisgCisrcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworK3BrZ2NvbmZpZ19EQVRBID0gaWQzdGFnLnBjCisrCisgIyMgRnJvbSB0aGUgbGlidG9vbCBkb2N1bWVudGF0aW9uIG9uIGxpYnJhcnkgdmVyc2lvbmluZzoKKyAjIworICMjIENVUlJFTlQKK0luZGV4OiBsaWJpZDN0YWctMC4xNS4xYi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpZDN0YWctMC4xNS4xYi5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA5LTA3LTI5IDA5OjI3OjE1LjAwMDAwMDAwMCArMDEwMAorKysrIGxpYmlkM3RhZy0wLjE1LjFiL2NvbmZpZ3VyZS5hYwkyMDA5LTA3LTI5IDA5OjI3OjQ1LjAwMDAwMDAwMCArMDEwMAorQEAgLTIwMSw1ICsyMDEsNSBAQAorIGRubCBBQ19TVUJTVChMVExJQk9CSlMpCisgCisgQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZSBtc3ZjKysvTWFrZWZpbGUgIFwKKy0JbGliaWQzdGFnLmxpc3RdKQorKwlsaWJpZDN0YWcubGlzdCBpZDN0YWcucGNdKQorIEFDX09VVFBVVAorSW5kZXg6IGxpYmlkM3RhZy0wLjE1LjFiL2lkM3RhZy5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGxpYmlkM3RhZy0wLjE1LjFiL2lkM3RhZy5wYy5pbgkyMDA5LTA3LTI5IDA5OjI5OjEwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMSBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorKworK05hbWU6IGlkM3RhZworK0Rlc2NyaXB0aW9uOiBJRDMgdGFnIHJlYWRpbmcgbGlicmFyeQorK1JlcXVpcmVzOgorK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1saWQzdGFnIC1segorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWcvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJpZDN0YWcvbGliaWQzdGFnL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODQ1ZmIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJpZDN0YWcvbGliaWQzdGFnL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/ZnVuYz1kZXRhaWwmYWlkPTM1OTkyODAmZ3JvdXBfaWQ9MTIzNDkmYXRpZD0xMTIzNDldCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIGxpYmlkM3RhZy0wLjE1LjFiL2NvbmZpZ3VyZS5hYyBsaWJpZDN0YWctMC4xNS4xYi9jb25maWd1cmUuYWMKKy0tLSBsaWJpZDN0YWctMC4xNS4xYi9jb25maWd1cmUuYWMJMjAwNC0wMS0yNCAwMToyMjo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJpZDN0YWctMC4xNS4xYi9jb25maWd1cmUuYWMJMjAxMy0wMS0wMyAwNjo0MTowMi43MzQ4MzUwMTQgKzAyMDAKK0BAIC0yOCw3ICsyOCw3IEBACisKKy1BTV9JTklUX0FVVE9NQUtFCisrQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisKKy1BTV9DT05GSUdfSEVBREVSKFtjb25maWcuaF0pCisrQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKKworIGRubCBTeXN0ZW0gdHlwZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZ18wLjE1LjFiLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJpZDN0YWcvbGliaWQzdGFnXzAuMTUuMWIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhOGE0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZ18wLjE1LjFiLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBJRDMgdGFncyBpbiBNUDMgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL21hZC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTIzNDkmYXRpZD0xMTIzNDkiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKwkJCWZpbGU6Ly9DT1BZUklHSFQ7bWQ1PTVlNjI3OWVmYjg3YzI2YzZlNWU3YTY4MzE3YTZhODdhIFwKKwkJCWZpbGU6Ly92ZXJzaW9uLmg7YmVnaW5saW5lPTE7ZW5kbGluZT04O21kNT04NmFjNjhiNjdmMDU0YjdhZmRlOWUxNDliYmMzZmU2MyIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAiemxpYiBncGVyZi1uYXRpdmUiCitQUiA9ICJyNyIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAubWFycy5vcmcvcHViL21wZWcvbGliaWQzdGFnLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hZGRwa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImU1ODA4YWQ5OTdiYTMyYzQ5ODgwMzgyMjA3ODc0OGMzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzZGE0ZjZlNzk5NzI3OGY4YTNmZWY0YzZhMzcyZDM0MmY3MDUwNTFkMWVlYjZhNDZhODZiMDM2MTBlMjYxNTEiCisKK1MgPSAiJHtXT1JLRElSfS9saWJpZDN0YWctJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2FkZC1wa2djb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvYWRkLXBrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDlkYzhjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2FkZC1wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorSGVyZSBpcyBhIHBhdGNoIGZvciBhZGRpbmcgcGtnLWNvbmZpZyBzdXBwb3J0IHRvIGxpYm1hZC4KK0l0IHdvdWxkIG1ha2UgbGlmZSBhIGJpdCBlYXNpZXIgZm9yIGRpc3RybyBtYWludGFpbmVycyBpZiB0aGlzIHdhcyBhcHBsaWVkLgorSW4gY2FzZSB5b3UgZGlkbid0IGtub3csIHBrZy1jb25maWcgaXMgYSB0b29sIGZvciBwcm92aWRpbmcgTERGTEFHUyBhbmQKK0NGTEFHUyBmb3IgcGFja2FnZXMgdXNpbmcgc2hhcmVkIGxpYnJhcmllcy4gSXQncyBvbiBmcmVlZGVza3RvcC5vcmcuCitEZWJpYW4gaGFzIGFscmVhZHkgYmVlbiBkaXN0cmlidXRpbmcgdGhlIHBrZy1jb25maWcgZmlsZSBtYWQucGMgd2l0aAorbGlibWFkIGZvciBzb21lIHRpbWUsIGFuZCBwZW9wbGUgZGV2ZWxvcGluZyBvbiBkZWJpYW4gKG5vdGFibHkgeG1tczIgCitkZXZlbG9wZXJzKSBoYXZlIHN0YXJ0ZWQgcmVseWluZyBvbiB0aGlzIHN1cHBvcnQgYmVpbmcgcHJlc2VudCwgY2F1c2luZworc29tZSBjb25mdXNpb24gZm9yIHBlb3BsZSBpbnN0YWxsaW5nIGZyb20gc291cmNlIGFuZCBvbiBzb21lIEJTRHMgd2hpY2gKK2RvIG5vdCBwcm92aWRlIG1hZC5wYyAoZ29vZ2xlOiBwa2djb25maWcgbGlibWFkKS4KKworRU1ICisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworLS1oMzFnelpFdE5MVHFPamxGCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkKK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSZxdW90O2xpYm1hZC0wLjE1LjFiLXBrZ2NvbmZpZy5wYXRjaCZxdW90OworCitkaWZmIC1OYXVyIGxpYm1hZC0wLjE1LjFiLm9sZC9jb25maWd1cmUuYWMgbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCistLS0gbGlibWFkLTAuMTUuMWIub2xkL2NvbmZpZ3VyZS5hYwkyMDA0LTAxLTIzIDEwOjQxOjMyLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYm1hZC0wLjE1LjFiL2NvbmZpZ3VyZS5hYwkyMDA0LTA4LTA3IDAyOjI1OjI0LjYzMzQ2MjE2OCArMDIwMAorQEAgLTQyOSw1ICs0MjksNSBAQAorIGRubCBBQ19TVUJTVChMVExJQk9CSlMpCisgCisgQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZSBtc3ZjKysvTWFrZWZpbGUgIFwKKy0JbGlibWFkLmxpc3RdKQorKwlsaWJtYWQubGlzdCBtYWQucGNdKQorIEFDX09VVFBVVAorZGlmZiAtTmF1ciBsaWJtYWQtMC4xNS4xYi5vbGQvbWFkLnBjLmluIGxpYm1hZC0wLjE1LjFiL21hZC5wYy5pbgorLS0tIGxpYm1hZC0wLjE1LjFiLm9sZC9tYWQucGMuaW4JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJtYWQtMC4xNS4xYi9tYWQucGMuaW4JMjAwNC0wOC0wNyAwMjowNDo1OS42MTc2OTI4NzIgKzAyMDAKK0BAIC0wLDAgKzEsMTQgQEAKKysjIGxpYm1hZCBwa2ctY29uZmlnIHNvdXJjZSBmaWxlCisrCisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrCisrTmFtZTogbWFkCisrRGVzY3JpcHRpb246IE1QRUcgQXVkaW8gRGVjb2RlcgorK1ZlcnNpb246IEBWRVJTSU9OQAorK1JlcXVpcmVzOgorK0NvbmZsaWN0czoKKytMaWJzOiAtTCR7bGliZGlyfSAtbG1hZCAtbG0KKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorZGlmZiAtTmF1ciBsaWJtYWQtMC4xNS4xYi5vbGQvTWFrZWZpbGUuYW0gbGlibWFkLTAuMTUuMWIvTWFrZWZpbGUuYW0KKy0tLSBsaWJtYWQtMC4xNS4xYi5vbGQvTWFrZWZpbGUuYW0JMjAwNC0wMi0xNyAwMzowMjowMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJtYWQtMC4xNS4xYi9NYWtlZmlsZS5hbQkyMDA0LTA4LTA3IDAyOjAzOjE5Ljg1OTg1ODM2OCArMDIwMAorQEAgLTI0LDYgKzI0LDkgQEAKKyBTVUJESVJTID0JCQorIERJU1RfU1VCRElSUyA9CQltc3ZjKysKKyAKKytwa2djb25maWdkaXIgPQkJJChsaWJkaXIpL3BrZ2NvbmZpZworK3BrZ2NvbmZpZ19EQVRBID0JbWFkLnBjCisrCisgbGliX0xUTElCUkFSSUVTID0JbGlibWFkLmxhCisgaW5jbHVkZV9IRUFERVJTID0JbWFkLmgKKyAKK0BAIC0zNCw3ICszNyw4IEBACisgbWluaW1hZF9MREFERCA9CQlsaWJtYWQubGEKKyAKKyBFWFRSQV9ESVNUID0JCW1hZC5oLnNlZCAgXAorLQkJCUNIQU5HRVMgQ09QWVJJR0hUIENSRURJVFMgUkVBRE1FIFRPRE8gVkVSU0lPTgorKwkJCUNIQU5HRVMgQ09QWVJJR0hUIENSRURJVFMgUkVBRE1FIFRPRE8gVkVSU0lPTiBcCisrCQkJbWFkLnBjLmluCisgCisgZXhwb3J0ZWRfaGVhZGVycyA9CXZlcnNpb24uaCBmaXhlZC5oIGJpdC5oIHRpbWVyLmggc3RyZWFtLmggZnJhbWUuaCAgXAorIAkJCXN5bnRoLmggZGVjb2Rlci5oCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9hdXRvbWFrZS1mb3JlaWduLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U1NDQyNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9hdXRvbWFrZS1mb3JlaWduLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK1Bhc3MgZm9yZWlnbiB0byBBTV9JTklUX0FVVE9NQUtFIHNvIGl0IGRvZXNuJ3QgZW5mb3JjZSBHTlUgc3RyaWN0bmVzcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBlNjAyZmQzLi5lMDc1Yjg2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yOSArMjkgQEAgQUNfQ09ORklHX1NSQ0RJUihbZGVjb2Rlci5oXSkKKy1BTV9JTklUX0FVVE9NQUtFCisrQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvZml4X2Zvcl9taXBzX3dpdGhfZ2NjLTQuNS4wLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2ZpeF9mb3JfbWlwc193aXRoX2djYy00LjUuMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWM3YWEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2ZpeF9mb3JfbWlwc193aXRoX2djYy00LjUuMC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitnY2MgNC40IGRpZCB0aGlzOiBUaGUgTUlQUyBwb3J0IG5vIGxvbmdlciByZWNvZ25pemVzIHRoZSBoICBhc20gY29uc3RyYWludC4gSXQgd2FzIG5lY2Vzc2FyeSB0byByZW1vdmUgdGhpcyBjb25zdHJhaW50IGluIG9yZGVyIHRvIGF2b2lkIGdlbmVyYXRpbmcgdW5wcmVkaWN0YWJsZSBjb2RlIHNlcXVlbmNlcy4gCisKK3NvIHRoZSBsaWJtYWQgYnVpbGQgd2l0aCBnY2MtNC41LjAgd2FzIGZhaWxpbmcuCisKK0ZvdW5kIGEgc29sdXRpb24gaGVyZToKKworaHR0cDovL3VzLmdlbmVyYXRpb24tbnQuY29tL2Fuc3dlci9idWctNTY4NDE4LWxpYm1hZDAtZGV2LW1wZzMyMS1jb21waWxhdGlvbi1lcnJvcnMtbWlwcy1taXBzZWwtYXJjaGl0ZWN0dXJlcy1oZWxwLTE2OTAzMzQ1MS5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisyMDEwLzA3LzI5CitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitJbmRleDogbGlibWFkLTAuMTUuMWIvZml4ZWQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYm1hZC0wLjE1LjFiLm9yaWcvZml4ZWQuaAorKysrIGxpYm1hZC0wLjE1LjFiL2ZpeGVkLmgKK0BAIC0yOTcsNiArMjk3LDE1IEBAIG1hZF9maXhlZF90IG1hZF9mX211bF9pbmxpbmUobWFkX2ZpeGVkX3QKKyAKKyAvKiAtLS0gTUlQUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgCisrIyBlbGlmIGRlZmluZWQoRlBNX01JUFMpICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpCisrICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IHU2NF9kaV90IF9fYXR0cmlidXRlX18gKChtb2RlIChESSkpKTsKKysjICAgZGVmaW5lIE1BRF9GX01MWChoaSwgbG8sIHgsIHkpIFwKKysgICAgZG8geyBcCisrICAgICAgICB1NjRfZGlfdCBfX2xsID0gKHU2NF9kaV90KSAoeCkgKiAoeSk7IFwKKysgICAgICAgIGhpID0gX19sbCA+PiAzMjsgXAorKyAgICAgICAgbG8gPSBfX2xsOyBcCisrICAgICB9IHdoaWxlICgwKQorKworICMgZWxpZiBkZWZpbmVkKEZQTV9NSVBTKQorIAorIC8qCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvbm8tZm9yY2UtbWVtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL25vLWZvcmNlLW1lbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWU2ZDIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL25vLWZvcmNlLW1lbS5wYXRjaApAQCAtMCwwICsxLDE4IEBACitUaGlzIG9wdGlvbiBubyBsb25nZXIgZXhpc3RzIGluIGdjYyAzLjQuMQorCitSUCAtIDE4LzA3LzIwMDgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlibWFkLTAuMTUuMWIub3JpZy9jb25maWd1cmUuYWMJMjAwOC0wNy0xOCAxNTo0NTozMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMJMjAwOC0wNy0xOCAxNTo0NTozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNDAsNyArMTQwLDYgQEAKKyAgICAgY2FzZSAiJG9wdGltaXplIiBpbgorIAktT3wiLU8gIiopCisgCSAgICBvcHRpbWl6ZT0iLU8iCistCSAgICBvcHRpbWl6ZT0iJG9wdGltaXplIC1mZm9yY2UtbWVtIgorIAkgICAgb3B0aW1pemU9IiRvcHRpbWl6ZSAtZmZvcmNlLWFkZHIiCisgCSAgICA6ICN4IG9wdGltaXplPSIkb3B0aW1pemUgLWZpbmxpbmUtZnVuY3Rpb25zIgorIAkgICAgOiAjLSBvcHRpbWl6ZT0iJG9wdGltaXplIC1mc3RyZW5ndGgtcmVkdWNlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4N2QyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTEyMzQ5JmF0aWQ9MTEyMzQ5XQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMgbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCistLS0gbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCTIwMDQtMDEtMjMgMTE6NDE6MzIuMDAwMDAwMDAwICswMjAwCisrKysgbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCTIwMTMtMDEtMDMgMDg6Mjg6MjMuNzE4NjkzNjk3ICswMjAwCitAQCAtMjgsNyArMjgsNyBAQAorCisgQU1fSU5JVF9BVVRPTUFLRQorCistQU1fQ09ORklHX0hFQURFUihbY29uZmlnLmhdKQorK0FDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCisKKyBkbmwgU3lzdGVtIHR5cGUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWRfMC4xNS4xYi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZF8wLjE1LjFiLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMDhiMTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWRfMC4xNS4xYi5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIk1QRUcgQXVkaW8gRGVjb2RlciBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9tYWQvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTEyMzQ5JmF0aWQ9MTEyMzQ5IgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisJCQlmaWxlOi8vQ09QWVJJR0hUO21kNT04ZTU1ZWIxNDg5NGU3ODJiODQ0ODhkNWEyMzliYzIzZCBcCisJCQlmaWxlOi8vdmVyc2lvbi5oO2JlZ2lubGluZT0xO2VuZGxpbmU9ODttZDU9YWEwNzMxMWRkMzkyODhkNDM0OWYyOGUxZGU1MTY0NTQiCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gImxpYmlkM3RhZyIKK1BSID0gInIzIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5tYXJzLm9yZy9wdWIvbXBlZy9saWJtYWQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL25vLWZvcmNlLW1lbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9mb3JfbWlwc193aXRoX2djYy00LjUuMC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXV0b21ha2UtZm9yZWlnbi5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxYmU1NDNiYzMwYzU2ZmI2YmVhMWQ3YmY2YTY0ZTY2YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYmZhYzNlZDZiZmJjMjgyM2QzNzc1ZWJiOTMxMDg3MzcxZTE0MmJiMGU5YmIxYmVlNTFhNzZhNmUwMDc4NjkwIiAKKworUyA9ICIke1dPUktESVJ9L2xpYm1hZC0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItZW5hYmxlLXNwZWVkIC0tZW5hYmxlLXNoYXJlZCIKKyMgVGhlIEFTTydzIGRvbid0IHRha2UgYW55IGFjY291bnQgb2YgdGh1bWIuLi4KK0VYVFJBX09FQ09ORl9hcHBlbmRfdGh1bWIgPSAiIC0tZGlzYWJsZS1hc28gLS1lbmFibGUtZnBtPWRlZmF1bHQiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2FybSA9ICIgLS1lbmFibGUtZnBtPWFybSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworIwlkYW1uIHBpY2t5IGF1dG9tYWtlLi4uCisJdG91Y2ggTkVXUyBBVVRIT1JTIENoYW5nZUxvZworfQorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib2dnL2xpYm9nZ18xLjMuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib2dnL2xpYm9nZ18xLjMuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTQyZTBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvZ2cvbGlib2dnXzEuMy4yLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiT2dnIGJpdHN0cmVhbSBhbmQgZnJhbWluZyBsaWJhcnkiCitERVNDUklQVElPTiA9ICJsaWJvZ2cgaXMgdGhlIGJpdHN0cmVhbSBhbmQgZnJhbWluZyBsaWJyYXJ5IFwKK2ZvciB0aGUgT2dnIHByb2plY3QuIEl0IHByb3ZpZGVzIGZ1bmN0aW9ucyB3aGljaCBhcmUgXAorbmVjZXNzYXJ5IHRvIGNvZGVjIGxpYnJhcmllcyBsaWtlIGxpYnZvcmJpcy4iCitIT01FUEFHRSA9ICJodHRwOi8veGlwaC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL3RyYWMueGlwaC5vcmcvbmV3dGlja2V0IgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kYjFiN2E2NjhiMmE2ZjQ3YjJhZjg4ZmIwMDhhZDU1NSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL29nZy9vZ2cuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTExO21kNT1lZGE4MTI4NTZmMTNhM2IxMzI2ZWI4ZjAyMGNjM2IwYiIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnhpcGgub3JnL3JlbGVhc2VzL29nZy8ke0JQfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1YzNhMzQzMDlkOGI5ODY0MDgyN2U1ZDA5OTFhNDAxNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzZjY4N2NjZGQ1YWM4YjUyZDc2MzI4ZmJiZmViYzcwYzQ1OWE0MGVhODkxZGJmM2RjY2I3NGEyMTA4MjZlNzliIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvY29uZmlndXJlLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvY29uZmlndXJlLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzZlODBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9jb25maWd1cmUtZml4LnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK1RvIGVuYWJsZSAtLWRpc2FibGUtV2Vycm9yIGZvciBsaWJvbXhpbCB0byBhdm9pZCBzb21lIGNvbXBpbGVycyB3aGljaCBjaGVjayBjb2RlIHN0cmljdGx5LgorCitGb3IgZXhhbXBsZSwgYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBlcnJvcnMgaGFwcGVuZWQgdG8gc29tZSBjb21waWxlcnM6CisKKzEpIE9NWF9JTkRFWFRZUEUgaW4gaW5jbHVkZS9PTVhfSW5kZXguaCBJUyBOT1QgT01YX0lOREVYVkVORE9SVFlQRSBpbiBzcmMvYmFzZS9vbXhfYmFzZV9jb21wb25lbnQuaAorfCBpNTg2LXBva3ktbGludXgtbGlidG9vbDogY29tcGlsZTogIGk1ODYtcG9reS1saW51eC1nY2MgLW0zMiAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2hvbWUveW9jdG8tYnVpbGQ1L3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3FlbXV4ODYgLURIQVZFX0NsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLVdhbGwgLVdlcnJvciAtRENPTkZJR19ERUJVR19MRVZFTD0wIC1jIE9NWENvbXBvbmVudFJNRXh0LmMgIC1mUElDIC1EUElDIC1vIC5saWJzL2xpYm9teGJhc2VfbGEtT01YQ29tcG9uZW50Uk1FeHQubworfCBvbXhfYmFzZV9jb21wb25lbnQuYzogSW4gZnVuY3Rpb24gJ29teF9iYXNlX2NvbXBvbmVudF9HZXRQYXJhbWV0ZXInOgorfCBvbXhfYmFzZV9jb21wb25lbnQuYzo5OTE6MzogZXJyb3I6IGNhc2UgdmFsdWUgJzIxMzA3MDY0MzUnIG5vdCBpbiBlbnVtZXJhdGVkIHR5cGUgJ09NWF9JTkRFWFRZUEUnIFstV2Vycm9yPXN3aXRjaF0KK3wgb214X2Jhc2VfY29tcG9uZW50LmM6OTE4OjM6IGVycm9yOiBjYXNlIHZhbHVlICcyMTMwNzA2NDM2JyBub3QgaW4gZW51bWVyYXRlZCB0eXBlICdPTVhfSU5ERVhUWVBFJyBbLVdlcnJvcj1zd2l0Y2hdCisKKzIpCit8IGk1ODYtcG9reS1saW51eC1nY2MgIC1tMzIgICAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2hvbWUveW9jdG8tYnVpbGQ1L3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3FlbXV4ODYgLURIQVZFX0NPTkZJR19IIC1JLiAtSS4uICAgIC1ET01YSUxDT01QT21pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLVdhbGwgLVdlcnJvciAtRENPTkZJR19ERUJVR19MRVZFTD0wIC1jIC1vIG9teHJlZ2lzdGVyX2JlbGxhZ2lvLW9teHJlZ2lzdGVyLm8gYHRlc3QgLWYgJ29teHJlZ2lzdGVyLmMnIHx8IGVjaG8gJy4vJ2BvCit8IG9teHJlZ2lzdGVyLmM6IEluIGZ1bmN0aW9uICdidWlsZENvbXBvbmVudHNMaXN0JzoKK3wgb214cmVnaXN0ZXIuYzoxNzU6NzogZXJyb3I6IHZhcmlhYmxlICdlcnInIHNldCBidXQgbm90IHVzZWQgWy1XZXJyb3I9dW51c2VkLWJ1dC1zZXQtdmFyaWFibGVdCit8IGNjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisKK2RpZmYgLXIgODJkNzQyZDNlYTkwIGNvbmZpZ3VyZS5hYworLS0tIGEvY29uZmlndXJlLmFjCVR1ZSBEZWMgMjcgMTU6MzA6MzUgMjAxMSArMDgwMAorKysrIGIvY29uZmlndXJlLmFjCVR1ZSBEZWMgMjcgMTY6MjY6MDMgMjAxMSArMDgwMAorQEAgLTUsNyArNSw3IEBACisgQUNfUFJFUkVRKFsyLjU5XSkKKyAKKyBBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQorLUNGTEFHUz0iJHtDRkxBR1N9IC1XYWxsIC1XZXJyb3IiCisrQ0ZMQUdTPSIke0NGTEFHU30gLVdhbGwiCisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIFNldCB0aGUgc2hhcmVkIHZlcnNpb25pbmcgaW5mbywgYWNjb3JkaW5nIHRvIHNlY3Rpb24gNi4zIG9mIHRoZSBsaWJ0b29sIGluZm8gIworQEAgLTEyMiw2ICsxMjIsMTQgQEAKKyAgICAgW3dpdGhfYW5kcm9pZD0kZW5hYmxldmFsXSwKKyAgICAgW3dpdGhfYW5kcm9pZD1ub10pCisgCisrQUNfQVJHX0VOQUJMRSgKKysgICAgW1dlcnJvcl0sCisrICAgIFtBQ19IRUxQX1NUUklORygKKysgICAgICAgIFstLWRpc2FibGUtV2Vycm9yXSwKKysgICAgICAgIFt3aGV0aGVyIHRvIGRpYWJsZSB0cmVhdGluZyBnY2Mgd2FybmluZ3MgYXMgZXJyb3JzXSldLAorKyAgICBbd2l0aF9XZXJyb3I9JGVuYWJsZXZhbF0sCisrICAgIFt3aXRoX1dlcnJvcj15ZXNdKQorKworICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIyBDaGVjayBmb3IgcHJvZ3JhbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQEAgLTE5Myw2ICsyMDEsMTAgQEAKKyAgQ0ZHX0RFQlVHX0xFVkVMPTI1NQorIGZpCisgCisraWYgdGVzdCAieCR3aXRoX1dlcnJvciIgPSAieHllcyI7IHRoZW4KKysgQ0ZMQUdTPSIke0NGTEFHU30gLVdlcnJvciIKKytmaQorKworIEFDX1NVQlNUKENGR19ERUJVR19MRVZFTCkKKyBDRkxBR1M9IiR7Q0ZMQUdTfSAtRENPTkZJR19ERUJVR19MRVZFTD0kQ0ZHX0RFQlVHX0xFVkVMIgorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9kaXNhYmxlLXNvLXZlcnNpb25pbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL2Rpc2FibGUtc28tdmVyc2lvbmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDA4ZTRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9kaXNhYmxlLXNvLXZlcnNpb25pbmcucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRGlzYWJsZSBzbyB2ZXJzaW9uaW5nIHNpbmNlIHRoZXkgYXJlIHJlYWxseSBub3QgYSB2ZXJzaW9uZWQgc2hhcmVkIGxpYi4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgQCBodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL29teGlsL2J1Z3MvNTkvCisKK1NpZ25lZC1vZmYtYnk6IERyZXcgTW9zZWxleSA8ZHJld19tb3NlbGV5QG1lbnRvci5jb20+CisKK2RpZmYgLXJ1YiBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy1vcmlnL3NyYy9jb21wb25lbnRzL2F1ZGlvX2VmZmVjdHMvTWFrZWZpbGUuYW0gbGlib214aWwtYmVsbGFnaW8tMC45LjMvc3JjL2NvbXBvbmVudHMvYXVkaW9fZWZmZWN0cy9NYWtlZmlsZS5hbQorLS0tIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zLW9yaWcvc3JjL2NvbXBvbmVudHMvYXVkaW9fZWZmZWN0cy9NYWtlZmlsZS5hbQkyMDE0LTA3LTIwIDE1OjIyOjAwLjg1ODQyNTIzNCAtMDQwMAorKysrIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zL3NyYy9jb21wb25lbnRzL2F1ZGlvX2VmZmVjdHMvTWFrZWZpbGUuYW0JMjAxNC0wNy0yMCAxNToyNTo0Mi42ODc1MjUyMjUgLTA0MDAKK0BAIC0xMCw0ICsxMCw1IEBACisgbGlib214YXVkaW9fZWZmZWN0c19sYV9DRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSBcCisgCQkJCS1JJCh0b3Bfc3JjZGlyKS9zcmMgXAorIAkJCQktSSQodG9wX3NyY2Rpcikvc3JjL2Jhc2UKKytsaWJvbXhhdWRpb19lZmZlY3RzX2xhX0xERkxBR1MgPSAtYXZvaWQtdmVyc2lvbgorIAorZGlmZiAtcnViIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zLW9yaWcvc3JjL2NvbXBvbmVudHMvY2xvY2tzcmMvTWFrZWZpbGUuYW0gbGlib214aWwtYmVsbGFnaW8tMC45LjMvc3JjL2NvbXBvbmVudHMvY2xvY2tzcmMvTWFrZWZpbGUuYW0KKy0tLSBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy1vcmlnL3NyYy9jb21wb25lbnRzL2Nsb2Nrc3JjL01ha2VmaWxlLmFtCTIwMTQtMDctMjAgMTU6MjI6MDAuODU4NDI1MjM0IC0wNDAwCisrKysgbGlib214aWwtYmVsbGFnaW8tMC45LjMvc3JjL2NvbXBvbmVudHMvY2xvY2tzcmMvTWFrZWZpbGUuYW0JMjAxNC0wNy0yMCAxNToyNDo0OS4xNTEyNTk3NTMgLTA0MDAKK0BAIC0xMCw0ICsxMCw0IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSSQodG9wX3NyY2Rpcikvc3JjIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9zcmMvYmFzZQorLQorK2xpYm9teGNsb2Nrc3JjX2xhX0xERkxBR1MgPSAtYXZvaWQtdmVyc2lvbgorZGlmZiAtcnViIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zLW9yaWcvc3JjL2NvbXBvbmVudHMvdmlkZW9zY2hlZHVsZXIvTWFrZWZpbGUuYW0gbGlib214aWwtYmVsbGFnaW8tMC45LjMvc3JjL2NvbXBvbmVudHMvdmlkZW9zY2hlZHVsZXIvTWFrZWZpbGUuYW0KKy0tLSBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy1vcmlnL3NyYy9jb21wb25lbnRzL3ZpZGVvc2NoZWR1bGVyL01ha2VmaWxlLmFtCTIwMTQtMDctMjAgMTU6MjI6MDAuODYyNDI1MjU0IC0wNDAwCisrKysgbGlib214aWwtYmVsbGFnaW8tMC45LjMvc3JjL2NvbXBvbmVudHMvdmlkZW9zY2hlZHVsZXIvTWFrZWZpbGUuYW0JMjAxNC0wNy0yMCAxNToyMjozNi40NjI2MDE3ODYgLTA0MDAKK0BAIC02LDcgKzYsNyBAQAorIAkJCQkJCQkJbGlicmFyeV9lbnRyeV9wb2ludC5jCisgCisgbGlib214dmlkZW9zY2hlZF9sYV9MSUJBREQgPSAkKHRvcF9idWlsZGRpcikvc3JjL2xpYm9teGlsLWJlbGxhZ2lvLmxhCistbGlib214dmlkZW9zY2hlZF9sYV9MREZMQUdTID0gCisrbGlib214dmlkZW9zY2hlZF9sYV9MREZMQUdTID0gLWF2b2lkLXZlcnNpb24KKyBsaWJvbXh2aWRlb3NjaGVkX2xhX0NGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIFwKKyAJCQktSSQodG9wX3NyY2Rpcikvc3JjIFwKKyAJCQktSSQodG9wX3NyY2Rpcikvc3JjL2Jhc2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvZHluYW1pY2xvYWRlci1saW5raW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9keW5hbWljbG9hZGVyLWxpbmtpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3OTUzYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvZHluYW1pY2xvYWRlci1saW5raW5nLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1RoaXMgcGF0Y2ggZml4ZXMgbGluayBpc3N1ZSB3aGVuIGxpYm9teGR5bmFtaWNsb2FkZXIuc28gaXMgbG9hZGVkIDoKK01pc3Npbmcgc3ltYm9sIFJNX0RlaW5pdC4KKworVGhpcyBwYXRjaCBjb21lcyBmcm9tICJodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9jZ2l0L2xpYm9teGlsLWJlbGxhZ2lvLmdpdC9jb21taXQvP2g9ZjE3JmlkPTQ5OTZhOTU4Mjg5NDNkMzQ1ZTUxZGVkNjg3NmMzMTAzNjUzZWVjZjgiCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTw6liYXN0aWVuIE1lbm5ldHJpZXIgPHMubWVubmV0cmllckBpbm5vdGlzLm9yZz4KKworLS0tIGEvc3JjL2R5bmFtaWNfbG9hZGVyL01ha2VmaWxlLmFtCTIwMTQtMDItMjUgMTU6Mjk6MTAuMTI4NTQ5NjM2ICswMTAwCisrKysgYi9zcmMvZHluYW1pY19sb2FkZXIvTWFrZWZpbGUuYW0JMjAxNC0wMi0yNSAxNTozMDoxNS43NTY1NDg4MDggKzAxMDAKK0BAIC0zLDcgKzMsNyBAQAorIG9teGR5bmFtaWNsb2FkZXJfTFRMSUJSQVJJRVMgPSBsaWJvbXhkeW5hbWljbG9hZGVyLmxhCisgbGlib214ZHluYW1pY2xvYWRlcl9sYV9TT1VSQ0VTID0gc3RlX2R5bmFtaWNfY29tcG9uZW50X2xvYWRlci5jIHN0ZV9keW5hbWljX2NvbXBvbmVudF9sb2FkZXIuaAorIAorLWxpYm9teGR5bmFtaWNsb2FkZXJfbGFfTERGTEFHUyA9CisrbGlib214ZHluYW1pY2xvYWRlcl9sYV9MREZMQUdTID0gLWxvbXhpbC1iZWxsYWdpbyAtTCQodG9wX2J1aWxkZGlyKS9zcmMvLmxpYnMKKyBsaWJvbXhkeW5hbWljbG9hZGVyX2xhX0NGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIFwKKyAJCQktSSQodG9wX3NyY2Rpcikvc3JjIFwKKyAJCQktSSQodG9wX3NyY2Rpcikvc3JjL2Jhc2UgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9tYWtlZmlsZS1kb2NkaXItZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9tYWtlZmlsZS1kb2NkaXItZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZThjNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL21ha2VmaWxlLWRvY2Rpci1maXgucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVGhpcyBwYXRjaCBpcyB0byByZW1vdmUgREVTVERJUiBpbiBkb2NkaXIuCitPdGhlcndpc2UsIHdoZW4gdXNlcnMgaW5zdGFsbCBieSBydW5uaW5nIGBtYWtlIGluc3RhbGwgREVTVERJUj0vYWx0ZXJuYXRlL2RpcmVjdG9yeScgc3BlY2lmaWVkIGluIHRoZSBmaWxlIElOU1RBTEwsIHRoZSBkb2Mgd2lsbCBnbyBpbnRvIC9hbHRlcm5hdGUvZGlyZWN0b3J5L2FsdGVybmF0ZS9kaXJlY3RvcnksIHdoaWNoIGlzIG5vdCBleHBlY3RlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorCitkaWZmIC1yIDMwYjU5N2U0ZTcwZCBNYWtlZmlsZS5hbQorLS0tIGEvTWFrZWZpbGUuYW0JV2VkIERlYyAyOCAxNTozODozNSAyMDExICswODAwCisrKysgYi9NYWtlZmlsZS5hbQlXZWQgRGVjIDI4IDE1OjM5OjI1IDIwMTEgKzA4MDAKK0BAIC03LDcgKzcsNyBAQAorIHBrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKyBwa2djb25maWdfREFUQSA9IGxpYm9teGlsLWJlbGxhZ2lvLnBjCisgCistZG9jZGlyID0gJChERVNURElSKSQocHJlZml4KS9zaGFyZS9kb2MvQFBBQ0tBR0VACisrZG9jZGlyID0gJChwcmVmaXgpL3NoYXJlL2RvYy9AUEFDS0FHRUAKKyBkb2NfREFUQSA9IFJFQURNRSBcCisgCSAgIENoYW5nZUxvZyBcCisgCSAgIFRPRE8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvcGFyYWxsZWwtbWFrZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvcGFyYWxsZWwtbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODNjYTEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9wYXJhbGxlbC1tYWtlLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1RoaXMgcGF0Y2ggaXMgdG8gbWFrZSBsaWJvbXhpbCBNYWtlZmlsZSBzdXBwb3J0ICJtYWtlIC1qTiIuCitUaGUgb214cmVnaXN0ZXJfYmVsbGFnaW8gc3R1ZmZzIGRlcGVuZCBvbiBsaWJvbXhpbF9iZWxsYWdpbyBsaWJyYXJ5LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisKK2RpZmYgLXIgZjU5ZDA3N2QzZGQ1IE1ha2VmaWxlLmFtCistLS0gYS9zcmMvTWFrZWZpbGUuYW0JV2VkIERlYyAyOCAxMDo1NDozNiAyMDExICswODAwCisrKysgYi9zcmMvTWFrZWZpbGUuYW0JV2VkIERlYyAyOCAxMDo1NTo0NiAyMDExICswODAwCitAQCAtNyw2ICs3LDcgQEAKKyBvbXhyZWdpc3Rlcl9iZWxsYWdpb19TT1VSQ0VTID0gb214cmVnaXN0ZXIuYyBjb21tb24uYyBjb21tb24uaAorIG9teHJlZ2lzdGVyX2JlbGxhZ2lvX0NGTEFHUyA9IC1ET01YSUxDT01QT05FTlRTUEFUSD1cIiQocGx1Z2luZGlyKS9cIiBcCisgCQkJICAgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKKytvbXhyZWdpc3Rlcl9iZWxsYWdpb19MREFERCA9ICQobGliX0xUTElCUkFSSUVTKQorIG9teHJlZ2lzdGVyX2JlbGxhZ2lvX0xERkxBR1MgPSAtbG9teGlsLWJlbGxhZ2lvIC1MJChidWlsZGRpcikKKyAKKyBsaWJfTFRMSUJSQVJJRVMgPSBsaWJvbXhpbC1iZWxsYWdpby5sYQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbF8wLjkuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWxfMC45LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBkNmRmOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWxfMC45LjMuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJCZWxsYWdpbyBPcGVuTUFYIEludGVncmF0aW9uIExheWVyIChJTCkiCitERVNDUklQVElPTiA9ICJCZWxsYWdpbyBpcyBhbiBvcGVuc291cmNlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBLaHJvbm9zIE9wZW5NQVggXAorICAgICAgICAgICAgICAgSW50ZWdyYXRpb24gTGF5ZXIgQVBJIHRvIGFjY2VzcyBtdWx0aW1lZGlhIGNvbXBvbmVudHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL29teGlsLnNvdXJjZWZvcmdlLm5ldC8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YWU2ZjBmNGRiYzdhYzE5M2I1MGYzMjNhNmFlMTkxY2IgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL29teGNvcmUuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI3O21kNT04MDZiMWU1NTY2YzA2NDg2ZmU4ZTQyYjQ2MWUwM2E5MCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vb214aWwvbGlib214aWwtYmVsbGFnaW8tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWwtbWFrZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlZmlsZS1kb2NkaXItZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2R5bmFtaWNsb2FkZXItbGlua2luZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLXNvLXZlcnNpb25pbmcucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMWRlODI3ZmRiNzVjMDJjODRlNTVmNzQwY2EyN2NiOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1OTNjMDcyOWM4ZWY4YzE0NjdiM2JmZWZjZjM1NWVjMTlhNDZkZDkyZTMxYmZjMjgwZTE3ZDk2YjA5MzRkNzRjIgorCitTID0gIiR7V09SS0RJUn0vJHtCUE59LWJlbGxhZ2lvLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scworCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1kb2MgLS1kaXNhYmxlLVdlcnJvciIKKworIworIyBUaGUgLnNvIGZpbGVzIHVuZGVyICR7bGliZGlyfS9iZWxsYWdpbyBhcmUgbm90IGludGVuZGVkIHRvIGJlIHZlcnNpb25lZCBhbmQgc3ltbGlua2VkLgorIyBNYWtlIHN1cmUgdGhleSBnZXQgcGFja2FnZWQgaW4gdGhlIG1haW4gcGFja2FnZS4KKyMKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vYmVsbGFnaW8vKi5zbyBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L29teGxvYWRlcnMvKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2JlbGxhZ2lvLyouYSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9vbXhsb2FkZXJzLyouYSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2JlbGxhZ2lvLyoubGEgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vb214bG9hZGVycy8qLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L29teGxvYWRlcnMvKiR7U09MSUJTREVWfSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2JlbGxhZ2lvLy5kZWJ1Zy8gXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vb214bG9hZGVycy8uZGVidWcvIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJwbmcvbGlicG5nXzEuNi4xNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlicG5nL2xpYnBuZ18xLjYuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBlNTgwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlicG5nL2xpYnBuZ18xLjYuMTcuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJQTkcgaW1hZ2UgZm9ybWF0IGRlY29kaW5nIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYnBuZy5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMaWJwbmciCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1iOWI3NTM5OWI3MmU0YTg2NTZjZjNhNmRkZmM4NmQ5YSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wbmcuaDtlbmRsaW5lPTE2O21kNT1jYzljMmQxZWFmZGExN2UxMjc3YTZmOTlhOWZjMjljNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wbmcuaDtiZWdpbmxpbmU9MjQyO2VuZGxpbmU9MzU2O21kNT01OTkzMTY4MTlkNTI1ZGRlMmJmZGYyOGZlM2YzMjNhZiIKK0RFUEVORFMgPSAiemxpYiIKK0xJQlYgPSAiMTYiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Byb2plY3QvbGlicG5nL2xpYnBuZyR7TElCVn0vJHtQVn0vbGlicG5nLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjQzMGE5Yjc2Yjc4NTMzMjM1Y2Q0YjliMjZjZTc1YzdlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk4NTA3YjU1ZmJlNWNkNDNjNTE5ODFmMjkyNGU0NjcxZmQ4MWZlMzVkNTJkYzUzMzU3ZTIwZjJjNzdmYTVkZmQiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGlicG5nLWNvbmZpZyAke2JpbmRpcn0vbGlicG5nMTYtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCisKKyMgV29yayBhcm91bmQgbWlzc2luZyBzeW1ib2xzCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibmVvbiIsICItLWVuYWJsZS1hcm0tbmVvbj1vbiIsICItLWVuYWJsZS1hcm0tbmVvbj1vZmYiICxkKX0iCisKK1BBQ0tBR0VTID0rICIke1BOfS10b29scyIKKworRklMRVNfJHtQTn0tdG9vbHMgPSAiJHtiaW5kaXJ9L3BuZy1maXgtaXR4dCAke2JpbmRpcn0vcG5nZml4IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNhbXBsZXJhdGUvbGlic2FtcGxlcmF0ZTBfMC4xLjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNhbXBsZXJhdGUvbGlic2FtcGxlcmF0ZTBfMC4xLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2OTM1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic2FtcGxlcmF0ZS9saWJzYW1wbGVyYXRlMF8wLjEuOC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkF1ZGlvIFNhbXBsZSBSYXRlIENvbnZlcnNpb24gbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWVnYS1uZXJkLmNvbS9TUkMvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvc2FtcGxlcmF0ZS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PWQwODA3YzM1ZmM5MDY0NjZkMjRhNTA0NjM1MzQ4MTVhIgorREVQRU5EUyA9ICJmbGFjIGxpYnNuZGZpbGUxIgorUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5tZWdhLW5lcmQuY29tL1NSQy9saWJzYW1wbGVyYXRlLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjFjN2ZiMjUxOTFiNGU2ZTM2MjhkMTk4YTY2YTg0ZjQ3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkzYjU0YmRmNDZkNWU2ZDIzNTRiNzAzNDM5NWZlMzI5YzIyMmE5NjY3OTBkZTM0NTIwNzAyYmI5NjQyZjFjMDYiCitTID0gIiR7V09SS0RJUn0vbGlic2FtcGxlcmF0ZS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUdbZmZ0d10gPSAiLC0tZGlzYWJsZS1mZnR3LGZmdHciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvZmlsZXMvMDAwMS1zcmMtc2QyLmMtRml4LXNlZ2ZhdWx0LWluLVNEMi1SU1JDLXBhcnNlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9maWxlcy8wMDAxLXNyYy1zZDIuYy1GaXgtc2VnZmF1bHQtaW4tU0QyLVJTUkMtcGFyc2VyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNDg3MTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvZmlsZXMvMDAwMS1zcmMtc2QyLmMtRml4LXNlZ2ZhdWx0LWluLVNEMi1SU1JDLXBhcnNlci5wYXRjaApAQCAtMCwwICsxLDIxMSBAQAorRnJvbSA5MzQxZTljNmU3MGNkM2FkNzZjOTAxYzNjZjA1MmQ0Y2I1MmZkODI3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRXJpayBkZSBDYXN0cm8gTG9wbyA8ZXJpa2RAbWVnYS1uZXJkLmNvbT4KK0RhdGU6IFRodSwgMjcgSnVuIDIwMTMgMTg6MDQ6MDMgKzEwMDAKK1N1YmplY3Q6IFtQQVRDSF0gc3JjL3NkMi5jIDogRml4IHNlZ2ZhdWx0IGluIFNEMiBSU1JDIHBhcnNlci4KKworKFVwc3RyZWFtIGNvbW1pdCA5MzQxZTljNmU3MGNkM2FkNzZjOTAxYzNjZjA1MmQ0Y2I1MmZkODI3KQorCitBIHNwZWNpYWxseSBjcmFmdGVkIHJlc291cmNlIGZvcmsgZm9yIGFuIFNEMiBmaWxlIGNhbiBjYXVzZQordGhlIFNEMiBSU1JDIHBhcnNlciB0byByZWFkIGRhdGEgZnJvbSBvdXRzaWRlIGEgZHluYW1pY2FsbHkKK2RlZmluZWQgYnVmZmVyLiBUaGUgZGF0YSB0aGF0IGlzIHJlYWQgaXMgY29udmVydGVkIGludG8gYQorc2hvcnQgb3IgaW50IGFuZCB1c2VkIGR1cmluZyBmdXJ0aGVyIHByb2Nlc3NpbmcuCisKK1NpbmNlIG5vIHdyaXRlIG9jY3VycywgdGhpcyBpcyB1bmxpa2VseSB0byBiZSBleHBsb2l0YWJsZS4KKworQnVnIHJlcG9ydGVkIGJ5IFRoZSBNYXloZW0gVGVhbSBmcm9tIEN5bGFiLCBDYXJuZWdpZSBNZWxsb24KK1VuaXZlcmlzdHkuIFBhcGVyIGlzOgoraHR0cDovL3VzZXJzLmVjZS5jbXUuZWR1L35hcmViZXJ0L3BhcGVycy9tYXloZW0tb2FrbGFuZC0xMi5wZGYKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDx5dWUudGFvQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvc2QyLmMgfCAgIDkzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNTUgaW5zZXJ0aW9ucygrKSwgMzggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvc2QyLmMgYi9zcmMvc2QyLmMKK2luZGV4IDM1Y2UzNmIuLjZiZTE1MGMgMTAwNjQ0CistLS0gYS9zcmMvc2QyLmMKKysrKyBiL3NyYy9zZDIuYworQEAgLTEsNSArMSw1IEBACisgLyoKKy0qKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBFcmlrIGRlIENhc3RybyBMb3BvIDxlcmlrZEBtZWdhLW5lcmQuY29tPgorKyoqIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEVyaWsgZGUgQ2FzdHJvIExvcG8gPGVyaWtkQG1lZ2EtbmVyZC5jb20+CisgKiogQ29weXJpZ2h0IChDKSAyMDA0IFBhYXZvIEp1bXBwYW5lbgorICoqCisgKiogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK0BAIC0zNzEsNDQgKzM3MSw2MSBAQCBzZDJfd3JpdGVfcnNyY19mb3JrIChTRl9QUklWQVRFICpwc2YsIGludCBVTlVTRUQgKGNhbGNfbGVuZ3RoKSkKKyAqLworIAorIHN0YXRpYyBpbmxpbmUgaW50CistcmVhZF9jaGFyIChjb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSwgaW50IG9mZnNldCkKKy17CXJldHVybiBkYXRhIFtvZmZzZXRdIDsKKy19IC8qIHJlYWRfY2hhciAqLworK3JlYWRfcnNyY19jaGFyIChjb25zdCBTRDJfUlNSQyAqcHJzcmMsIGludCBvZmZzZXQpCisrewljb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSA9IHByc3JjLT5yc3JjX2RhdGEgOworKwlpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPj0gcHJzcmMtPnJzcmNfbGVuKQorKwkJcmV0dXJuIDAgOworKwlyZXR1cm4gZGF0YSBbb2Zmc2V0XSA7CisrfSAvKiByZWFkX3JzcmNfY2hhciAqLworIAorIHN0YXRpYyBpbmxpbmUgaW50CistcmVhZF9zaG9ydCAoY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEsIGludCBvZmZzZXQpCistewlyZXR1cm4gKGRhdGEgW29mZnNldF0gPDwgOCkgKyBkYXRhIFtvZmZzZXQgKyAxXSA7CistfSAvKiByZWFkX3Nob3J0ICovCisrcmVhZF9yc3JjX3Nob3J0IChjb25zdCBTRDJfUlNSQyAqcHJzcmMsIGludCBvZmZzZXQpCisrewljb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSA9IHByc3JjLT5yc3JjX2RhdGEgOworKwlpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgKyAxID49IHByc3JjLT5yc3JjX2xlbikKKysJCXJldHVybiAwIDsKKysJcmV0dXJuIChkYXRhIFtvZmZzZXRdIDw8IDgpICsgZGF0YSBbb2Zmc2V0ICsgMV0gOworK30gLyogcmVhZF9yc3JjX3Nob3J0ICovCisgCisgc3RhdGljIGlubGluZSBpbnQKKy1yZWFkX2ludCAoY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEsIGludCBvZmZzZXQpCistewlyZXR1cm4gKGRhdGEgW29mZnNldF0gPDwgMjQpICsgKGRhdGEgW29mZnNldCArIDFdIDw8IDE2KSArIChkYXRhIFtvZmZzZXQgKyAyXSA8PCA4KSArIGRhdGEgW29mZnNldCArIDNdIDsKKy19IC8qIHJlYWRfaW50ICovCisrcmVhZF9yc3JjX2ludCAoY29uc3QgU0QyX1JTUkMgKnByc3JjLCBpbnQgb2Zmc2V0KQorK3sJY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEgPSBwcnNyYy0+cnNyY19kYXRhIDsKKysJaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICsgMyA+PSBwcnNyYy0+cnNyY19sZW4pCisrCQlyZXR1cm4gMCA7CisrCXJldHVybiAoZGF0YSBbb2Zmc2V0XSA8PCAyNCkgKyAoZGF0YSBbb2Zmc2V0ICsgMV0gPDwgMTYpICsgKGRhdGEgW29mZnNldCArIDJdIDw8IDgpICsgZGF0YSBbb2Zmc2V0ICsgM10gOworK30gLyogcmVhZF9yc3JjX2ludCAqLworIAorIHN0YXRpYyBpbmxpbmUgaW50CistcmVhZF9tYXJrZXIgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhLCBpbnQgb2Zmc2V0KQorLXsKKytyZWFkX3JzcmNfbWFya2VyIChjb25zdCBTRDJfUlNSQyAqcHJzcmMsIGludCBvZmZzZXQpCisrewljb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSA9IHByc3JjLT5yc3JjX2RhdGEgOworKworKwlpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgKyAzID49IHByc3JjLT5yc3JjX2xlbikKKysJCXJldHVybiAwIDsKKysKKyAJaWYgKENQVV9JU19CSUdfRU5ESUFOKQorIAkJcmV0dXJuIChkYXRhIFtvZmZzZXRdIDw8IDI0KSArIChkYXRhIFtvZmZzZXQgKyAxXSA8PCAxNikgKyAoZGF0YSBbb2Zmc2V0ICsgMl0gPDwgOCkgKyBkYXRhIFtvZmZzZXQgKyAzXSA7CistCWVsc2UgaWYgKENQVV9JU19MSVRUTEVfRU5ESUFOKQorKwlpZiAoQ1BVX0lTX0xJVFRMRV9FTkRJQU4pCisgCQlyZXR1cm4gZGF0YSBbb2Zmc2V0XSArIChkYXRhIFtvZmZzZXQgKyAxXSA8PCA4KSArIChkYXRhIFtvZmZzZXQgKyAyXSA8PCAxNikgKyAoZGF0YSBbb2Zmc2V0ICsgM10gPDwgMjQpIDsKKy0JZWxzZQorLQkJcmV0dXJuIDB4NjY2IDsKKy19IC8qIHJlYWRfbWFya2VyICovCisrCisrCXJldHVybiAwIDsKKyt9IC8qIHJlYWRfcnNyY19tYXJrZXIgKi8KKyAKKyBzdGF0aWMgdm9pZAorLXJlYWRfc3RyIChjb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSwgaW50IG9mZnNldCwgY2hhciAqIGJ1ZmZlciwgaW50IGJ1ZmZlcl9sZW4pCistewlpbnQgayA7CisrcmVhZF9yc3JjX3N0ciAoY29uc3QgU0QyX1JTUkMgKnByc3JjLCBpbnQgb2Zmc2V0LCBjaGFyICogYnVmZmVyLCBpbnQgYnVmZmVyX2xlbikKKyt7CWNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhID0gcHJzcmMtPnJzcmNfZGF0YSA7CisrCWludCBrIDsKKyAKKyAJbWVtc2V0IChidWZmZXIsIDAsIGJ1ZmZlcl9sZW4pIDsKKyAKKysJaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICsgYnVmZmVyX2xlbiA+PSBwcnNyYy0+cnNyY19sZW4pCisrCQlyZXR1cm4gOworKworIAlmb3IgKGsgPSAwIDsgayA8IGJ1ZmZlcl9sZW4gLSAxIDsgaysrKQorIAl7CWlmIChwc2ZfaXNwcmludCAoZGF0YSBbb2Zmc2V0ICsga10pID09IDApCisgCQkJcmV0dXJuIDsKKyAJCWJ1ZmZlciBba10gPSBkYXRhIFtvZmZzZXQgKyBrXSA7CisgCQl9IDsKKyAJcmV0dXJuIDsKKy19IC8qIHJlYWRfc3RyICovCisrfSAvKiByZWFkX3JzcmNfc3RyICovCisgCisgc3RhdGljIGludAorIHNkMl9wYXJzZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZikKK0BAIC00MzUsMTcgKzQ1MiwxNyBAQCBzZDJfcGFyc2VfcnNyY19mb3JrIChTRl9QUklWQVRFICpwc2YpCisgCS8qIFJlc2V0IHRoZSBoZWFkZXIgc3RvcmFnZSBiZWNhdXNlIHdlIGhhdmUgY2hhbmdlZCB0byB0aGUgcnNyY2Rlcy4gKi8KKyAJcHNmLT5oZWFkaW5kZXggPSBwc2YtPmhlYWRlbmQgPSByc3JjLnJzcmNfbGVuIDsKKyAKKy0JcnNyYy5kYXRhX29mZnNldCA9IHJlYWRfaW50IChyc3JjLnJzcmNfZGF0YSwgMCkgOworLQlyc3JjLm1hcF9vZmZzZXQgPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDQpIDsKKy0JcnNyYy5kYXRhX2xlbmd0aCA9IHJlYWRfaW50IChyc3JjLnJzcmNfZGF0YSwgOCkgOworLQlyc3JjLm1hcF9sZW5ndGggPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDEyKSA7CisrCXJzcmMuZGF0YV9vZmZzZXQgPSByZWFkX3JzcmNfaW50ICgmcnNyYywgMCkgOworKwlyc3JjLm1hcF9vZmZzZXQgPSByZWFkX3JzcmNfaW50ICgmcnNyYywgNCkgOworKwlyc3JjLmRhdGFfbGVuZ3RoID0gcmVhZF9yc3JjX2ludCAoJnJzcmMsIDgpIDsKKysJcnNyYy5tYXBfbGVuZ3RoID0gcmVhZF9yc3JjX2ludCAoJnJzcmMsIDEyKSA7CisgCisgCWlmIChyc3JjLmRhdGFfb2Zmc2V0ID09IDB4NTE2MDcgJiYgcnNyYy5tYXBfb2Zmc2V0ID09IDB4MjAwMDApCisgCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIlRyeWluZyBvZmZzZXQgb2YgMHg1MiBieXRlcy5cbiIpIDsKKy0JCXJzcmMuZGF0YV9vZmZzZXQgPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDB4NTIgKyAwKSArIDB4NTIgOworLQkJcnNyYy5tYXBfb2Zmc2V0ID0gcmVhZF9pbnQgKHJzcmMucnNyY19kYXRhLCAweDUyICsgNCkgKyAweDUyIDsKKy0JCXJzcmMuZGF0YV9sZW5ndGggPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDB4NTIgKyA4KSA7CistCQlyc3JjLm1hcF9sZW5ndGggPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDB4NTIgKyAxMikgOworKwkJcnNyYy5kYXRhX29mZnNldCA9IHJlYWRfcnNyY19pbnQgKCZyc3JjLCAweDUyICsgMCkgKyAweDUyIDsKKysJCXJzcmMubWFwX29mZnNldCA9IHJlYWRfcnNyY19pbnQgKCZyc3JjLCAweDUyICsgNCkgKyAweDUyIDsKKysJCXJzcmMuZGF0YV9sZW5ndGggPSByZWFkX3JzcmNfaW50ICgmcnNyYywgMHg1MiArIDgpIDsKKysJCXJzcmMubWFwX2xlbmd0aCA9IHJlYWRfcnNyY19pbnQgKCZyc3JjLCAweDUyICsgMTIpIDsKKyAJCX0gOworIAorIAlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiICBkYXRhIG9mZnNldCA6IDB4JTA0WFxuICBtYXAgIG9mZnNldCA6IDB4JTA0WFxuIgorQEAgLTQ4OCw3ICs1MDUsNyBAQCBzZDJfcGFyc2VfcnNyY19mb3JrIChTRl9QUklWQVRFICpwc2YpCisgCQlnb3RvIHBhcnNlX3JzcmNfZm9ya19jbGVhbnVwIDsKKyAJCX0gOworIAorLQlyc3JjLnN0cmluZ19vZmZzZXQgPSByc3JjLm1hcF9vZmZzZXQgKyByZWFkX3Nob3J0IChyc3JjLnJzcmNfZGF0YSwgcnNyYy5tYXBfb2Zmc2V0ICsgMjYpIDsKKysJcnNyYy5zdHJpbmdfb2Zmc2V0ID0gcnNyYy5tYXBfb2Zmc2V0ICsgcmVhZF9yc3JjX3Nob3J0ICgmcnNyYywgcnNyYy5tYXBfb2Zmc2V0ICsgMjYpIDsKKyAJaWYgKHJzcmMuc3RyaW5nX29mZnNldCA+IHJzcmMucnNyY19sZW4pCisgCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIkJhZCBzdHJpbmcgb2Zmc2V0ICglZCkuXG4iLCByc3JjLnN0cmluZ19vZmZzZXQpIDsKKyAJCWVycm9yID0gU0ZFX1NEMl9CQURfUlNSQyA7CitAQCAtNDk3LDcgKzUxNCw3IEBAIHNkMl9wYXJzZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZikKKyAKKyAJcnNyYy50eXBlX29mZnNldCA9IHJzcmMubWFwX29mZnNldCArIDMwIDsKKyAKKy0JcnNyYy50eXBlX2NvdW50ID0gcmVhZF9zaG9ydCAocnNyYy5yc3JjX2RhdGEsIHJzcmMubWFwX29mZnNldCArIDI4KSArIDEgOworKwlyc3JjLnR5cGVfY291bnQgPSByZWFkX3JzcmNfc2hvcnQgKCZyc3JjLCByc3JjLm1hcF9vZmZzZXQgKyAyOCkgKyAxIDsKKyAJaWYgKHJzcmMudHlwZV9jb3VudCA8IDEpCisgCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIkJhZCB0eXBlIGNvdW50LlxuIikgOworIAkJZXJyb3IgPSBTRkVfU0QyX0JBRF9SU1JDIDsKK0BAIC01MTMsMTEgKzUzMCwxMSBAQCBzZDJfcGFyc2VfcnNyY19mb3JrIChTRl9QUklWQVRFICpwc2YpCisgCisgCXJzcmMuc3RyX2luZGV4ID0gLTEgOworIAlmb3IgKGsgPSAwIDsgayA8IHJzcmMudHlwZV9jb3VudCA7IGsgKyspCistCXsJbWFya2VyID0gcmVhZF9tYXJrZXIgKHJzcmMucnNyY19kYXRhLCByc3JjLnR5cGVfb2Zmc2V0ICsgayAqIDgpIDsKKysJewltYXJrZXIgPSByZWFkX3JzcmNfbWFya2VyICgmcnNyYywgcnNyYy50eXBlX29mZnNldCArIGsgKiA4KSA7CisgCisgCQlpZiAobWFya2VyID09IFNUUl9NQVJLRVIpCisgCQl7CXJzcmMuc3RyX2luZGV4ID0gayA7CistCQkJcnNyYy5zdHJfY291bnQgPSByZWFkX3Nob3J0IChyc3JjLnJzcmNfZGF0YSwgcnNyYy50eXBlX29mZnNldCArIGsgKiA4ICsgNCkgKyAxIDsKKysJCQlyc3JjLnN0cl9jb3VudCA9IHJlYWRfcnNyY19zaG9ydCAoJnJzcmMsIHJzcmMudHlwZV9vZmZzZXQgKyBrICogOCArIDQpICsgMSA7CisgCQkJZXJyb3IgPSBwYXJzZV9zdHJfcnNyYyAocHNmLCAmcnNyYykgOworIAkJCWdvdG8gcGFyc2VfcnNyY19mb3JrX2NsZWFudXAgOworIAkJCX0gOworQEAgLTU0OSwyNiArNTY2LDI2IEBAIHBhcnNlX3N0cl9yc3JjIChTRl9QUklWQVRFICpwc2YsIFNEMl9SU1JDICogcnNyYykKKyAJZm9yIChrID0gMCA7IGRhdGFfb2Zmc2V0ICsgZGF0YV9sZW4gPCByc3JjLT5yc3JjX2xlbiA7IGsrKykKKyAJewlpbnQgc2xlbiA7CisgCistCQlzbGVuID0gcmVhZF9jaGFyIChyc3JjLT5yc3JjX2RhdGEsIHN0cl9vZmZzZXQpIDsKKy0JCXJlYWRfc3RyIChyc3JjLT5yc3JjX2RhdGEsIHN0cl9vZmZzZXQgKyAxLCBuYW1lLCBTRl9NSU4gKFNJR05FRF9TSVpFT0YgKG5hbWUpLCBzbGVuICsgMSkpIDsKKysJCXNsZW4gPSByZWFkX3JzcmNfY2hhciAocnNyYywgc3RyX29mZnNldCkgOworKwkJcmVhZF9yc3JjX3N0ciAocnNyYywgc3RyX29mZnNldCArIDEsIG5hbWUsIFNGX01JTiAoU0lHTkVEX1NJWkVPRiAobmFtZSksIHNsZW4gKyAxKSkgOworIAkJc3RyX29mZnNldCArPSBzbGVuICsgMSA7CisgCistCQlyc3JjX2lkID0gcmVhZF9zaG9ydCAocnNyYy0+cnNyY19kYXRhLCByc3JjLT5pdGVtX29mZnNldCArIGsgKiAxMikgOworKwkJcnNyY19pZCA9IHJlYWRfcnNyY19zaG9ydCAocnNyYywgcnNyYy0+aXRlbV9vZmZzZXQgKyBrICogMTIpIDsKKyAKKy0JCWRhdGFfb2Zmc2V0ID0gcnNyYy0+ZGF0YV9vZmZzZXQgKyByZWFkX2ludCAocnNyYy0+cnNyY19kYXRhLCByc3JjLT5pdGVtX29mZnNldCArIGsgKiAxMiArIDQpIDsKKysJCWRhdGFfb2Zmc2V0ID0gcnNyYy0+ZGF0YV9vZmZzZXQgKyByZWFkX3JzcmNfaW50IChyc3JjLCByc3JjLT5pdGVtX29mZnNldCArIGsgKiAxMiArIDQpIDsKKyAJCWlmIChkYXRhX29mZnNldCA8IDAgfHwgZGF0YV9vZmZzZXQgPiByc3JjLT5yc3JjX2xlbikKKyAJCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIkV4aXRpbmcgcGFyc2VyIG9uIGRhdGEgb2Zmc2V0IG9mICVkLlxuIiwgZGF0YV9vZmZzZXQpIDsKKyAJCQlicmVhayA7CisgCQkJfSA7CisgCistCQlkYXRhX2xlbiA9IHJlYWRfaW50IChyc3JjLT5yc3JjX2RhdGEsIGRhdGFfb2Zmc2V0KSA7CisrCQlkYXRhX2xlbiA9IHJlYWRfcnNyY19pbnQgKHJzcmMsIGRhdGFfb2Zmc2V0KSA7CisgCQlpZiAoZGF0YV9sZW4gPCAwIHx8IGRhdGFfbGVuID4gcnNyYy0+cnNyY19sZW4pCisgCQl7CXBzZl9sb2dfcHJpbnRmIChwc2YsICJFeGl0aW5nIHBhcnNlciBvbiBkYXRhIGxlbmd0aCBvZiAlZC5cbiIsIGRhdGFfbGVuKSA7CisgCQkJYnJlYWsgOworIAkJCX0gOworIAorLQkJc2xlbiA9IHJlYWRfY2hhciAocnNyYy0+cnNyY19kYXRhLCBkYXRhX29mZnNldCArIDQpIDsKKy0JCXJlYWRfc3RyIChyc3JjLT5yc3JjX2RhdGEsIGRhdGFfb2Zmc2V0ICsgNSwgdmFsdWUsIFNGX01JTiAoU0lHTkVEX1NJWkVPRiAodmFsdWUpLCBzbGVuICsgMSkpIDsKKysJCXNsZW4gPSByZWFkX3JzcmNfY2hhciAocnNyYywgZGF0YV9vZmZzZXQgKyA0KSA7CisrCQlyZWFkX3JzcmNfc3RyIChyc3JjLCBkYXRhX29mZnNldCArIDUsIHZhbHVlLCBTRl9NSU4gKFNJR05FRF9TSVpFT0YgKHZhbHVlKSwgc2xlbiArIDEpKSA7CisgCisgCQlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiICAweCUwNHggICAgICU0ZCAgICAgJTRkICAgICAlM2QgICAgJyVzJ1xuIiwgZGF0YV9vZmZzZXQsIHJzcmNfaWQsIGRhdGFfbGVuLCBzbGVuLCB2YWx1ZSkgOworIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9maWxlcy8wMDAxLXNyYy1zZDIuYy1GaXgtdHdvLXBvdGVudGlhbC1idWZmZXItcmVhZC1vdmVyZmxvd3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvZmlsZXMvMDAwMS1zcmMtc2QyLmMtRml4LXR3by1wb3RlbnRpYWwtYnVmZmVyLXJlYWQtb3ZlcmZsb3dzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNjQ3M2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvZmlsZXMvMDAwMS1zcmMtc2QyLmMtRml4LXR3by1wb3RlbnRpYWwtYnVmZmVyLXJlYWQtb3ZlcmZsb3dzLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK0Zyb20gZGJlMTRmMDAwMzBhZjVkMzU3N2Y0Y2FiYmY5ODYxZGI1OWU5YzM3OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEVyaWsgZGUgQ2FzdHJvIExvcG8gPGVyaWtkQG1lZ2EtbmVyZC5jb20+CitEYXRlOiBUaHUsIDI1IERlYyAyMDE0IDE5OjIzOjEyICsxMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHNyYy9zZDIuYyA6IEZpeCB0d28gcG90ZW50aWFsIGJ1ZmZlciByZWFkIG92ZXJmbG93cy4KKworKFVwc3RyZWFtIGNvbW1pdCBkYmUxNGYwMDAzMGFmNWQzNTc3ZjRjYWJiZjk4NjFkYjU5ZTljMzc4KQorCitDbG9zZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9lcmlrZC9saWJzbmRmaWxlL2lzc3Vlcy85MworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFl1ZSBUYW8gPHl1ZS50YW9Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9zZDIuYyB8ICAgMTIgKysrKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9zZDIuYyBiL3NyYy9zZDIuYworaW5kZXggMGI0ZTVhZi4uYTcwYTFmMSAxMDA2NDQKKy0tLSBhL3NyYy9zZDIuYworKysrIGIvc3JjL3NkMi5jCitAQCAtNTE3LDYgKzUxNywxMSBAQCBzZDJfcGFyc2VfcnNyY19mb3JrIChTRl9QUklWQVRFICpwc2YpCisgCisgCXJzcmMudHlwZV9vZmZzZXQgPSByc3JjLm1hcF9vZmZzZXQgKyAzMCA7CisgCisrCWlmIChyc3JjLm1hcF9vZmZzZXQgKyAyOCA+IHJzcmMucnNyY19sZW4pCisrCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIkJhZCBtYXAgb2Zmc2V0LlxuIikgOworKwkJZ290byBwYXJzZV9yc3JjX2ZvcmtfY2xlYW51cCA7CisrCQl9IDsKKysKKyAJcnNyYy50eXBlX2NvdW50ID0gcmVhZF9yc3JjX3Nob3J0ICgmcnNyYywgcnNyYy5tYXBfb2Zmc2V0ICsgMjgpICsgMSA7CisgCWlmIChyc3JjLnR5cGVfY291bnQgPCAxKQorIAl7CXBzZl9sb2dfcHJpbnRmIChwc2YsICJCYWQgdHlwZSBjb3VudC5cbiIpIDsKK0BAIC01MzMsNyArNTM4LDEyIEBAIHNkMl9wYXJzZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZikKKyAKKyAJcnNyYy5zdHJfaW5kZXggPSAtMSA7CisgCWZvciAoayA9IDAgOyBrIDwgcnNyYy50eXBlX2NvdW50IDsgayArKykKKy0JewltYXJrZXIgPSByZWFkX3JzcmNfbWFya2VyICgmcnNyYywgcnNyYy50eXBlX29mZnNldCArIGsgKiA4KSA7CisrCXsJaWYgKHJzcmMudHlwZV9vZmZzZXQgKyBrICogOCA+IHJzcmMucnNyY19sZW4pCisrCQl7CXBzZl9sb2dfcHJpbnRmIChwc2YsICJCYWQgcnNyYyBtYXJrZXIuXG4iKSA7CisrCQkJZ290byBwYXJzZV9yc3JjX2ZvcmtfY2xlYW51cCA7CisrCQkJfSA7CisrCisrCQltYXJrZXIgPSByZWFkX3JzcmNfbWFya2VyICgmcnNyYywgcnNyYy50eXBlX29mZnNldCArIGsgKiA4KSA7CisgCisgCQlpZiAobWFya2VyID09IFNUUl9NQVJLRVIpCisgCQl7CXJzcmMuc3RyX2luZGV4ID0gayA7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2xpYnNuZGZpbGUxXzEuMC4yNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9saWJzbmRmaWxlMV8xLjAuMjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UwMmY0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9saWJzbmRmaWxlMV8xLjAuMjUuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJBdWRpbyBmb3JtYXQgQ29udmVyc2lvbiBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tZWdhLW5lcmQuY29tL2xpYnNuZGZpbGUiCitBVVRIT1IgPSAiRXJpayBkZSBDYXN0cm8gTG9wbyIKK0RFUEVORFMgPSAic3FsaXRlMyIKK1NFQ1RJT04gPSAibGlicy9tdWx0aW1lZGlhIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK1BSID0gInIyIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubWVnYS1uZXJkLmNvbS9saWJzbmRmaWxlL2ZpbGVzL2xpYnNuZGZpbGUtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtc3JjLXNkMi5jLUZpeC1zZWdmYXVsdC1pbi1TRDItUlNSQy1wYXJzZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1zcmMtc2QyLmMtRml4LXR3by1wb3RlbnRpYWwtYnVmZmVyLXJlYWQtb3ZlcmZsb3dzLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImUyYjdiYjYzN2UwMTAyMmM3ZDIwZjk1ZjljMzk5MGEyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU5MDE2ZGJkMzI2YWJlN2UyMzY2ZGVkNWMzNDRjODUzODI5YmViZmQxNzAyZWYyNmEwN2VmNjYyZDZhYTQ4ODIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU3N2ZlOTMyMDI3MzZiNDdjMDcwMzU5MTBmNDc5NzRhIgorCitTID0gIiR7V09SS0RJUn0vbGlic25kZmlsZS0ke1BWfSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWxzYScsICdhbHNhJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbYWxzYV0gPSAiLS1lbmFibGUtYWxzYSwtLWRpc2FibGUtYWxzYSxhbHNhLWxpYiIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1leHRlcm5hbC1saWJzIgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBwa2djb25maWcKKworZG9fY29uZmlndXJlX3ByZXBlbmRfYXJtKCkgeworCWV4cG9ydCBhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZT0xCisJZXhwb3J0IGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPTY0CisJYWNfY3Zfc2l6ZW9mX29mZl90PTgKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aGVvcmEvbGlidGhlb3JhLTEuMS4xL25vLWRvY3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRoZW9yYS9saWJ0aGVvcmEtMS4xLjEvbm8tZG9jcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTlmM2QxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aGVvcmEvbGlidGhlb3JhLTEuMS4xL25vLWRvY3MucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogbGlidGhlb3JhLTEuMS4xL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlidGhlb3JhLTEuMS4xLm9yaWcvTWFrZWZpbGUuYW0JMjAwOS0xMS0yNSAyMjowMTo1My41OTM3NzU5MjYgKzAxMDAKKysrKyBsaWJ0aGVvcmEtMS4xLjEvTWFrZWZpbGUuYW0JMjAwOS0xMS0yNSAyMjowMjowMC43Nzc1MjQwMTcgKzAxMDAKK0BAIC04LDcgKzgsNyBAQAorIEVYQU1QTEVTX0RJUiA9CisgZW5kaWYKKyAKKy1TVUJESVJTID0gbGliIGluY2x1ZGUgZG9jIHRlc3RzIG00ICQoRVhBTVBMRVNfRElSKQorK1NVQkRJUlMgPSBsaWIgaW5jbHVkZSB0ZXN0cyBtNCAkKEVYQU1QTEVTX0RJUikKKyAKKyAKKyAjIHdlIGluY2x1ZGUgdGhlIHdob2xlIGRlYmlhbi8gZGlyIGluIEVYVFJBX0RJU1QgYmVjYXVzZSB0aGVyZSdzIGEgcHJvYmxlbQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aGVvcmEvbGlidGhlb3JhXzEuMS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aGVvcmEvbGlidGhlb3JhXzEuMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4Y2IxNjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRoZW9yYS9saWJ0aGVvcmFfMS4xLjEuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJUaGVvcmEgVmlkZW8gQ29kZWMiCitERVNDUklQVElPTiA9ICJUaGUgbGlidGhlb3JhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyB0aGUgc3RhbmRhcmQgZW5jb2RlciBhbmQgZGVjb2RlciB1bmRlciBhIEJTRCBsaWNlbnNlLiIKK0hPTUVQQUdFID0gImh0dHA6Ly94aXBoLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vdHJhYy54aXBoLm9yZy9uZXd0aWNrZXQiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWNmOTE3MThmNTllYjZhODNkMDZkYzdiY2FmNDExMTMyIgorREVQRU5EUyA9ICJsaWJvZ2ciCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueGlwaC5vcmcvcmVsZWFzZXMvdGhlb3JhL2xpYnRoZW9yYS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL25vLWRvY3MucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyOTJhYjY1Y2VkZDUwMjFkNmI3ZGRkMTE3ZTA3Y2Q4ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNmFlMWVlMmZhM2Q0MmFjNDg5Mjg3ZDNlYzM0YzU4ODU3MzBiMTI5NmYwODAxYWU1NzdhMzUxOTNkM2FmZmJjIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1leGFtcGxlcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9saWJ0b29sMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9saWJ0b29sMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTcyMDJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL2xpYnRvb2wyLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworLS0tCisgY29uZmlndXJlLmFjIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogdGlmZi0zLjkuNS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0aWZmLTMuOS41Lm9yaWcvY29uZmlndXJlLmFjCisrKysgdGlmZi0zLjkuNS9jb25maWd1cmUuYWMKK0BAIC0yNyw3ICsyNyw3IEBAIGRubCBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHAKKyBBQ19QUkVSRVEoMi42NCkKKyBBQ19JTklUKFtMaWJUSUZGIFNvZnR3YXJlXSxbMy45LjVdLFt0aWZmQGxpc3RzLm1hcHRvb2xzLm9yZ10sW3RpZmZdKQorIEFDX0NPTkZJR19BVVhfRElSKGNvbmZpZykKKy1BQ19DT05GSUdfTUFDUk9fRElSKG00KQorK2RubCBBQ19DT05GSUdfTUFDUk9fRElSKG00KQorIEFDX0xBTkcoQykKKyAKKyBkbmwgQ29tcHV0ZSB0aGUgY2Fub25pY2FsIGhvc3QgKHJ1bi10aW1lKSBzeXN0ZW0gdHlwZSB2YXJpYWJsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL3RpZmZfNC4wLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvdGlmZl80LjAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjNhNWYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL3RpZmZfNC4wLjQuYmIKQEAgLTAsMCArMSw0NCBAQAorU1VNTUFSWSA9ICJQcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgVGFnIEltYWdlIEZpbGUgRm9ybWF0IChUSUZGKSIKK0xJQ0VOU0UgPSAiQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWVJJR0hUO21kNT0zNGRhM2RiNDZmYWI3NTAxOTkyZjk2MTVkN2UxNThjZiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucmVtb3Rlc2Vuc2luZy5vcmcvbGlidGlmZi8iCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLnJlbW90ZXNlbnNpbmcub3JnL3B1Yi9saWJ0aWZmL3RpZmYtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2xpYnRvb2wyLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YWVlNzEwNzQwOGExMjhjMGM3YjI0Mjg2YzBkYjkwMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4Y2IxZDkwYzk2ZjYxY2RmYzBiY2YwMzZhY2MyNTFjOWRiZTYzMjAzMzRkYTk0MWM3YTgzY2ZlMTU3NmVmODkwIgorCitpbmhlcml0IGF1dG90b29scworCitDQUNIRURfQ09ORklHVVJFVkFSUyA9ICJheF9jdl9jaGVja19nbF9saWJnbD1ubyIKKworUEFDS0FHRUNPTkZJRyA/PSAiY3h4IGpwZWcgemxpYiBsem1hIFwKKyAgICAgICAgICAgICAgICAgIHN0cmlwLWNob3BwaW5nIGV4dHJhc2FtcGxlLWFzLWFscGhhIGNoZWNrLXljYmNyLXN1YnNhbXBsaW5nIgorCitQQUNLQUdFQ09ORklHW2N4eF0gPSAiLS1lbmFibGUtY3h4LC0tZGlzYWJsZS1jeHgsLCIKK1BBQ0tBR0VDT05GSUdbanBlZ10gPSAiLS1lbmFibGUtanBlZywtLWRpc2FibGUtanBlZyxqcGVnLCIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS1lbmFibGUtemxpYiwtLWRpc2FibGUtemxpYix6bGliLCIKK1BBQ0tBR0VDT05GSUdbbHptYV0gPSAiLS1lbmFibGUtbHptYSwtLWRpc2FibGUtbHptYSx4eiwiCisKKyMgQ29udmVydCBzaW5nbGUtc3RyaXAgdW5jb21wcmVzc2VkIGltYWdlcyB0byBtdWx0aXBsZSBzdHJpcHMgb2Ygc3BlY2lmaWVkCisjIHNpemUgKGRlZmF1bHQ6IDgxOTIpIHRvIHJlZHVjZSBtZW1vcnkgdXNhZ2UKK1BBQ0tBR0VDT05GSUdbc3RyaXAtY2hvcHBpbmddID0gIi0tZW5hYmxlLXN0cmlwLWNob3BwaW5nLC0tZGlzYWJsZS1zdHJpcC1jaG9wcGluZywsIgorCisjIFRyZWF0IGEgZm91cnRoIHNhbXBsZSB3aXRoIG5vIEVYVFJBU0FNUExFXyB2YWx1ZSBhcyBiZWluZyBBU1NPQ0FMUEhBCitQQUNLQUdFQ09ORklHW2V4dHJhc2FtcGxlLWFzLWFscGhhXSA9ICItLWVuYWJsZS1leHRyYXNhbXBsZS1hcy1hbHBoYSwtLWRpc2FibGUtZXh0cmFzYW1wbGUtYXMtYWxwaGEsLCIKKworIyBDb250cm9sIHBpY2tpbmcgdXAgWUNiQ3Igc3Vic2FtcGxlIGluZm8uIERpc2FibGUgdG8gc3VwcG9ydCBmaWxlcyBsYWNraW5nCisjIHRoZSB0YWcKK1BBQ0tBR0VDT05GSUdbY2hlY2steWNiY3Itc3Vic2FtcGxpbmddID0gIi0tZW5hYmxlLWNoZWNrLXljYmNyLXN1YnNhbXBsaW5nLC0tZGlzYWJsZS1jaGVjay15Y2Jjci1zdWJzYW1wbGluZywsIgorCisjIFN1cHBvcnQgYSBtZWNoYW5pc20gYWxsb3dpbmcgcmVhZGluZyBsYXJnZSBzdHJpcHMgKHVzdWFsbHkgb25lIHN0cmlwIGZpbGVzKQorIyBpbiBjaHVua3Mgd2hlbiB1c2luZyBUSUZGUmVhZFNjYW5saW5lLiBFeHBlcmltZW50YWwgNC4wKyBmZWF0dXJlCitQQUNLQUdFQ09ORklHW2NodW5reS1zdHJpcC1yZWFkXSA9ICItLWVuYWJsZS1jaHVua3ktc3RyaXAtcmVhZCwtLWRpc2FibGUtY2h1bmt5LXN0cmlwLXJlYWQsLCIKKworUEFDS0FHRVMgPSsgInRpZmZ4eCB0aWZmLXV0aWxzIgorRklMRVNfdGlmZnh4ID0gIiR7bGliZGlyfS9saWJ0aWZmeHguc28uKiIKK0ZJTEVTX3RpZmYtdXRpbHMgPSAiJHtiaW5kaXJ9LyoiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ2b3JiaXMvbGlidm9yYmlzXzEuMy41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ2b3JiaXMvbGlidm9yYmlzXzEuMy41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNmUwZjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnZvcmJpcy9saWJ2b3JiaXNfMS4zLjUuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJPZ2cgVm9yYmlzIEF1ZGlvIENvZGVjIgorREVTQ1JJUFRJT04gPSAiT2dnIFZvcmJpcyBpcyBhIGhpZ2gtcXVhbGl0eSBsb3NzeSBhdWRpbyBjb2RlYyBcCit0aGF0IGlzIGZyZWUgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJlc3RyaWN0aW9ucy4gbGlidm9yYmlzIFwKK2lzIHRoZSBtYWluIHZvcmJpcyBjb2RlYyBsaWJyYXJ5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cudm9yYmlzLmNvbS8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vdHJhYy54aXBoLm9yZyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2QyYzQ4N2QyZmM3ZGQzZTNjN2M0NjVhNWI3ZjYyMTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS92b3JiaXMvdm9yYmlzZW5jLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xMTttZDU9ZDFjMWQxMzg4NjNkNjMxNTEzMTE5M2Q0MDQ2ZDgxY2IiCitERVBFTkRTID0gImxpYm9nZyIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnhpcGgub3JnL3JlbGVhc2VzL3ZvcmJpcy8ke0JQfS50YXIueHoiCitTUkNfVVJJW21kNXN1bV0gPSAiMjhjYjI4MDk3YzA3YTczNWQ2YWY1NmU1OThlMWM5MGYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTRmOTRhOTUyN2ZmMGE4ODQ3N2JlMGE3MWMwYmFiMDlhNGMzZmViZTBlZDg3OGIyNDgyNDkwNmNkNGIwZTFkMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZWcyZGVjL21wZWcyZGVjLTAuNC4xL2FsdGl2ZWNfaF9uZWVkZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZWcyZGVjL21wZWcyZGVjLTAuNC4xL2FsdGl2ZWNfaF9uZWVkZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RjNTY0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvbXBlZzJkZWMtMC40LjEvYWx0aXZlY19oX25lZWRlZC5wYXRjaApAQCAtMCwwICsxLDQzIEBACitBZGQgbmV3IG1ldGhvZCB0byBqdWRnZSB3aGV0aGVyIDxhbHRpdmVjLmg+IGlzIG5lZWRlZAorCitUaGUgb3JpZ2luYWwgbG9naWMgd2lsbCB1c2UgInR5cGVkZWYgdmVjdG9yIGludCB0OyIgdG8ganVkZ2UKK3doZXRoZXIgPGFsdGl2ZWMuaD4gaXMgbmVlZGVkLiBhbHRpdmVjLmggY29udGFpbnMgdGhlIGZvbGxvd2luZworc3RhdGVtZW50OgorCisgI2lmICFkZWZpbmVkKF9fQVBQTEVfQUxUSVZFQ19fKQorICNkZWZpbmUgdmVjdG9yIF9fdmVjdG9yCisgI2RlZmluZSBwaXhlbCBfX3BpeGVsCisgI2RlZmluZSBib29sIAorICNlbmRpZgorCitJbiBnY2MtNC4zLjMsIF9fQVBQTEVfQUxUSVZFQ19fIGlzIG5vdCBkZWZpbmVkIGJ5IGNvbXBpbGVyLCBuZWl0aGVyCithcyB2ZWN0b3IsIHBpeGVsLCBhbmQgYm9vbC4gSW4gb3JkZXIgdG8gbWFrZSAidHlwZWRlZiB2ZWN0b3IgaW50IHQ7IgorcGFzcyB0aGUgY29tcGlsYXRpb24sIHdlIG5lZWQgdG8gaW5jbHVkZSBhbHRpdmVjLmguCisKK0hvd2V2ZXIgaW4gZ2NjLTQuNS4wLCBfX0FQUExFX0FMVElWRUNfXyBpcyBkZWZpbmVkIGJ5IGNvbXBpbGVyLAorc28gYXMgdmVjdG9yLCBwaXhlbCwgYW5kIGJvb2wuIFdlIGNvdWxkIG5vdCBqdWRnZSB3aGV0aGVyCithbHRpdmVjLmggaXMgbmVlZGVkIGJ5ICJ0eXBlZGVmIHZlY3RvciBpbnQgdDsiLgorSGVyZSB3ZSBpbmNsdWRlIGFub3RoZXIgc3RhdGVtZW50ICJpbnQgdG1wID0gX19DUjZfRVE7IiwgaW4KK3doaWNoIF9fQ1I2X0VRIGlzIGRlZmluZWQgaW4gYWx0aXZlYy5oLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworZGlmZiAtcnVOIG1wZWcyZGVjLTAuNC4xLW9yaWcvY29uZmlndXJlLmluIG1wZWcyZGVjLTAuNC4xL2NvbmZpZ3VyZS5pbgorLS0tIG1wZWcyZGVjLTAuNC4xLW9yaWcvY29uZmlndXJlLmluCTIwMTAtMDktMTQgMjA6NTU6NDIuMzk5Njg3NjYzICswODAwCisrKysgbXBlZzJkZWMtMC40LjEvY29uZmlndXJlLmluCTIwMTAtMDktMTQgMjA6NTY6NDMuNDAzMjA0NjQ4ICswODAwCitAQCAtNzUsMTEgKzc1LDExIEBACisgCQkgQ0ZMQUdTPSIkT1BUX0NGTEFHUyAkVFJZX0NGTEFHUyAkQ0ZMQUdTIgorIAkJIEFDX01TR19DSEVDS0lORyhbaWYgPGFsdGl2ZWMuaD4gaXMgbmVlZGVkXSkKKyAJCSBBQ19UUllfQ09NUElMRShbXSwKKy0JCSAgICBbdHlwZWRlZiB2ZWN0b3IgaW50IHQ7CisrCQkgICAgW3R5cGVkZWYgdmVjdG9yIGludCB0OyBpbnQgdG1wID0gX19DUjZfRVE7CisgCQkgICAgIHZlY19sZCgwLCAodW5zaWduZWQgY2hhciAqKTApO10sCisgCQkgICAgW2hhdmVfYWx0aXZlYz15ZXM7IEFDX01TR19SRVNVTFQobm8pXSwKKyAJCSAgICBbQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxhbHRpdmVjLmg+XSwKKy0JCQlbdHlwZWRlZiB2ZWN0b3IgaW50IHQ7IHZlY19sZCgwLCAodW5zaWduZWQgY2hhciAqKTApO10sCisrCQkJW3R5cGVkZWYgdmVjdG9yIGludCB0OyBpbnQgdG1wID0gX19DUjZfRVE7IHZlY19sZCgwLCAodW5zaWduZWQgY2hhciAqKTApO10sCisgCQkJW0FDX0RFRklORShbSEFWRV9BTFRJVkVDX0hdLCwKKyAJCQkgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YWx0aXZlYy5oPiBoZWFkZXIuXSkKKyAJCQkgaGF2ZV9hbHRpdmVjPXllczsgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvbXBlZzJkZWNfMC40LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZWcyZGVjL21wZWcyZGVjXzAuNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZGUyYmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZWcyZGVjL21wZWcyZGVjXzAuNC4xLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBhbmQgdGVzdCBwcm9ncmFtIGZvciBkZWNvZGluZyBNUEVHLTIgYW5kIE1QRUctMSB2aWRlbyBzdHJlYW1zIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpYm1wZWcyLnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvbXBlZzIuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIyO21kNT1lYWQ2MjYwMmQ0NjM4MzI5ZDNiNWI4NmE1NTgwMzE1NCIKKworUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2xpYm1wZWcyLnNvdXJjZWZvcmdlLm5ldC9maWxlcy9tcGVnMmRlYy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWx0aXZlY19oX25lZWRlZC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjc2MzFiMGE0YmNmZGQwZDc4YzBiYjAwODMwODBiMGRjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM3NGE3NjA2OGY4ZWMzNmQ0YmI1OWEwM2JmMTE1N2JlNDQxMThjYTAyMjUyMTgwZThiMzU4YjBiNWUzZWRlZWUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIC0tZGlzYWJsZS1zZGwiCisKK1BBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXgsLS13aXRob3V0LXgsdmlydHVhbC9saWJ4MTEgbGlieGV4dCBsaWJ4diIKKworUEFDS0FHRVMgPSAibXBlZzJkZWMtZGJnIG1wZWcyZGVjIG1wZWcyZGVjLWRvYyBsaWJtcGVnMiBsaWJtcGVnMi1kZXYgbGlibXBlZzJjb252ZXJ0IGxpYm1wZWcyY29udmVydC1kZXYgbGlibXBlZzItc3RhdGljZGV2IGxpYm1wZWcyY29udmVydC1zdGF0aWNkZXYiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qIgorRklMRVNfbGlibXBlZzIgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyLnNvLioiCitGSUxFU19saWJtcGVnMmNvbnZlcnQgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyY29udmVydC5zby4qIgorRklMRVNfbGlibXBlZzItZGV2ID0gIiR7bGliZGlyfS9saWJtcGVnMi5zbyBcCisgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm1wZWcyLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGtnY29uZmlnL2xpYm1wZWcyLnBjIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L21wZWcyZGVjL21wZWcyLmgiCitGSUxFU19saWJtcGVnMi1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyLmEiCitGSUxFU19saWJtcGVnMmNvbnZlcnQtZGV2ID0gIiR7bGliZGlyfS9saWJtcGVnMmNvbnZlcnQuc28gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibXBlZzJjb252ZXJ0LmxhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJtcGVnMmNvbnZlcnQucGMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L21wZWcyZGVjL21wZWcyY29udmVydC5oIgorRklMRVNfbGlibXBlZzJjb252ZXJ0LXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGlibXBlZzJjb252ZXJ0LmEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI4MDZkNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLmluYwpAQCAtMCwwICsxLDE5NyBAQAorU1VNTUFSWSA9ICJTb3VuZCBzZXJ2ZXIgZm9yIExpbnV4IGFuZCBVbml4LWxpa2Ugb3BlcmF0aW5nIHN5c3RlbXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnB1bHNlYXVkaW8ub3JnIgorQVVUSE9SID0gIkxlbm5hcnQgUG9ldHRlcmluZyIKK1NFQ1RJT04gPSAibGlicy9tdWx0aW1lZGlhIgorTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0dQTDttZDU9NDMyNWFmZDM5NmZlYmNiNjU5YzM2YjQ5NTMzMTM1ZDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTEdQTDttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3B1bHNlY29yZS9yZXNhbXBsZXIuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTIxO21kNT0wOTc5NDAxMmFlMTY5MTJjMDI3MGYzMjgwY2M4ZmY4NCIKKworREVQRU5EUyA9ICJsaWJhdG9taWMtb3BzIGxpYm9pbCBsaWJzbmRmaWxlMSBsaWJ0b29sIgorIyBvcHRpb25hbAorREVQRU5EUyArPSAidWRldiBhbHNhLWxpYiBnbGliLTIuMCBnY29uZiIKK0RFUEVORFMgKz0gImpzb24tYyBnZGJtIHNwZWV4ZHNwIGxpYnhtbC1wYXJzZXItcGVybC1uYXRpdmUgbGliY2FwIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXNlcmFkZCBnZXR0ZXh0IHBlcmxuYXRpdmUgYmx1ZXRvb3RoIHN5c3RlbWQKKworIyAqLmRlc2t0b3AgcnVsZXMgd29udCBiZSBnZW5lcmF0ZWQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgd2lsbCBmYWlsCisjIGlmIHVzaW5nIC0tZGlzYWJsZS1ubHMKK1VTRV9OTFMgPSAieWVzIgorCitFWFRSQV9PRUNPTkYgPSAiXAorCQktLWRpc2FibGUtaGFsLWNvbXBhdCBcCisJCS0tZGlzYWJsZS1vcmMgXAorCQktLWVuYWJsZS10Y3B3cmFwPW5vIFwKKwkJLS13aXRoLWFjY2Vzcy1ncm91cD1hdWRpbyBcCisJCS0tZGlzYWJsZS1vcGVuc3NsIFwKKwkJLS1kaXNhYmxlLXhlbiBcCisJCS0td2l0aC1kYXRhYmFzZT1zaW1wbGUgXAorCQktLXdpdGhvdXQtZmZ0dyBcCisJCS0td2l0aG91dC16c2gtY29tcGxldGlvbi1kaXIgXAorCQktLXdpdGgtdWRldi1ydWxlcy1kaXI9YHBrZy1jb25maWcgLS12YXJpYWJsZT11ZGV2ZGlyIHVkZXZgL3J1bGVzLmQgXAorICAgICAgICAgICAgICAgIGFjX2N2X2hlYWRlcl92YWxncmluZF9tZW1jaGVja19oPW5vIFwKKyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJyR7QkxVRVp9JywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd6ZXJvY29uZicsICdhdmFoaScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnM2cnLCAnb2Zvbm8nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnc3lzdGVtZCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgIGRidXMgXAorICAgICAgICAgICAgICAgICAgICIKKworUEFDS0FHRUNPTkZJR1tkYnVzXSA9ICItLWVuYWJsZS1kYnVzLC0tZGlzYWJsZS1kYnVzLGRidXMiCitQQUNLQUdFQ09ORklHW2JsdWV6NF0gPSAiLS1lbmFibGUtYmx1ZXo0LC0tZGlzYWJsZS1ibHVlejQsYmx1ZXo0IHNiYyIKK1BBQ0tBR0VDT05GSUdbYmx1ZXo1XSA9ICItLWVuYWJsZS1ibHVlejUsLS1kaXNhYmxlLWJsdWV6NSxibHVlejUgc2JjIgorUEFDS0FHRUNPTkZJR1tvZm9ub10gPSAiLS1lbmFibGUtYmx1ZXo1LW9mb25vLWhlYWRzZXQsLS1kaXNhYmxlLWJsdWV6NS1vZm9uby1oZWFkc2V0LG9mb25vIgorUEFDS0FHRUNPTkZJR1tndGtdID0gIi0tZW5hYmxlLWd0azMsLS1kaXNhYmxlLWd0azMsZ3RrKzMiCitQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0tZW5hYmxlLXN5c3RlbWQtZGFlbW9uIC0tZW5hYmxlLXN5c3RlbWQtbG9naW4gLS1lbmFibGUtc3lzdGVtZC1qb3VybmFsIC0td2l0aC1zeXN0ZW1kdXNlcnVuaXRkaXI9JHtzeXN0ZW1kX3VzZXJfdW5pdGRpcn0sLS1kaXNhYmxlLXN5c3RlbWQtZGFlbW9uIC0tZGlzYWJsZS1zeXN0ZW1kLWxvZ2luIC0tZGlzYWJsZS1zeXN0ZW1kLWpvdXJuYWwsc3lzdGVtZCIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEsLS1kaXNhYmxlLXgxMSx2aXJ0dWFsL2xpYngxMSBsaWJ4dHN0IGxpYmljZSBsaWJzbSBsaWJ4Y2IiCitQQUNLQUdFQ09ORklHW2F2YWhpXSA9ICItLWVuYWJsZS1hdmFoaSwtLWRpc2FibGUtYXZhaGksYXZhaGkiCitQQUNLQUdFQ09ORklHW2phY2tdID0gIi0tZW5hYmxlLWphY2ssLS1kaXNhYmxlLWphY2ssamFjayIKKyMgU2luY2UgbWFueSBlbWJlZGRlZCBzeXN0ZW1zIGRvbid0IGhhdmUgbm9uLXJvb3QgdXNlcnMsIGl0J3MgdXNlZnVsIHRvIGJlCisjIGFibGUgdG8gdXNlIHB1bHNlYXVkaW8gYXV0b3NwYXduIGZvciByb290IGFzIHdlbGwuCitQQUNLQUdFQ09ORklHW2F1dG9zcGF3bi1mb3Itcm9vdF0gPSAiLCwsIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2FybSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgIiIsICIgLS1lbmFibGUtbmVvbi1vcHQ9bm8iLCBkKX0iCitFWFRSQV9PRUNPTkZfYXBwZW5kX2FybWViID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCAiIiwgIiAtLWVuYWJsZS1uZW9uLW9wdD1ubyIsIGQpfSIKKworCitleHBvcnQgVEFSR0VUX1BGUFUgPSAiJHtUQVJHRVRfRlBVfSIKKworIyBUT0RPOiBVc2UgbW9yZSBmaW5lIGdyYW51bGFyIHZlcnNpb24KKyNPRV9MVF9SUEFUSF9BTExPVz0iOiR7bGliZGlyfS9wdWxzZS0wLjk6IgorT0VfTFRfUlBBVEhfQUxMT1cgPSAiYW55IgorT0VfTFRfUlBBVEhfQUxMT1dbZXhwb3J0XT0iMSIKKworc2V0X2NmZ192YWx1ZSAoKSB7CisJc2VkIC1pIC1lICJzL1woOyAqXClcPyQyID0uKi8kMiA9ICQzLyIgIiQxIgorCWlmICEgZ3JlcCAtcSAiXiQyID0gJDNcJCIgIiQxIjsgdGhlbgorCQlkaWUgIlVzZSBvZiBzZWQgdG8gc2V0ICckMicgdG8gJyQzJyBpbiAnJDEnIGZhaWxlZCIKKwlmaQorfQorCitkb19jb21waWxlX2FwcGVuZCAoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnYXV0b3NwYXduLWZvci1yb290JywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJc2V0X2NmZ192YWx1ZSBzcmMvY2xpZW50LmNvbmYgYWxsb3ctYXV0b3NwYXduLWZvci1yb290IHllcworCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS92b2xhdGlsZXMuMDRfcHVsc2UgICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzL3ZvbGF0aWxlcy4wNF9wdWxzZQorfQorCitVU0VSQUREX1BBQ0tBR0VTID0gInB1bHNlYXVkaW8tc2VydmVyIgorR1JPVVBBRERfUEFSQU1fcHVsc2VhdWRpby1zZXJ2ZXIgPSAicHVsc2UiCitVU0VSQUREX1BBUkFNX3B1bHNlYXVkaW8tc2VydmVyID0gIi0tc3lzdGVtIC0taG9tZSAvdmFyL3J1bi9wdWxzZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW5vLWNyZWF0ZS1ob21lIC0tc2hlbGwgL2Jpbi9mYWxzZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWdyb3VwcyBhdWRpbyxwdWxzZSAtLWdpZCBwdWxzZSBwdWxzZSIKKworIyBUaGUgY29uc29sZS1raXQgbW9kdWxlIGlzIGluY2x1ZGVkIGhlcmUgZXhwbGljaXRseSBzbyBiaXRiYWtlIGNhbiBtYXAgdG8gdGhlCisjIFJERVBFTkRTIHdlIGRlZmluZSBmb3IgaXQgaW4gdGhpcyByZWNpcGUsIGFuZCB0aGVyZWJ5IGVuc3VyZSB0aGF0IHdoZW4KKyMgYWRkaW5nIHRoZSBjb25zb2xlLWtpdCBtb2R1bGUgdG8gYW4gaW1hZ2UsIHdlIGFsc28gZ2V0IHRoZSBuZWNlc3NhcnkKKyMgY29uc29sZWtpdCBwYWNrYWdlIHByb2R1Y2VkLgorUEFDS0FHRVMgPSsgImxpYnB1bHNlY29yZSBsaWJwdWxzZWNvbW1vbiBsaWJwdWxzZSBsaWJwdWxzZS1zaW1wbGUgbGlicHVsc2UtbWFpbmxvb3AtZ2xpYiBcCisgICAgICAgICAgICAgcHVsc2VhdWRpby1zZXJ2ZXIgcHVsc2VhdWRpby1taXNjICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2RidXMnLCAncHVsc2VhdWRpby1tb2R1bGUtY29uc29sZS1raXQnLCAnJywgZCl9IgorCisjdXBncmFkZSBwYXRoOgorUlJFUExBQ0VTX3B1bHNlYXVkaW8tc2VydmVyID0gImxpYnB1bHNlLWJpbiBsaWJwdWxzZS1jb25mIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJecHVsc2VhdWRpby1saWItLiogXnB1bHNlYXVkaW8tbW9kdWxlLS4qIgorCitGSUxFU19saWJwdWxzZWNvcmUgPSAiJHtsaWJkaXJ9L2xpYnB1bHNlY29yZSouc28iCitGSUxFU19saWJwdWxzZWNvbW1vbiA9ICIke2xpYmRpcn0vcHVsc2VhdWRpby9saWJwdWxzZWNvbW1vbiouc28iCisKKyMgY2xpZW50LmNvbmYgY29uZmlndXJlcyB0aGUgYmVoYXZpb3VyIG9mIGxpYnB1bHNlLCBzbyBpdCBiZWxvbmdzIGluIHRoZSBzYW1lCisjIHBhY2thZ2UuCitGSUxFU19saWJwdWxzZSA9ICIke2xpYmRpcn0vbGlicHVsc2Uuc28uKiAke3N5c2NvbmZkaXJ9L3B1bHNlL2NsaWVudC5jb25mIgorCitGSUxFU19saWJwdWxzZS1zaW1wbGUgPSAiJHtsaWJkaXJ9L2xpYnB1bHNlLXNpbXBsZS5zby4qIgorRklMRVNfbGlicHVsc2UtbWFpbmxvb3AtZ2xpYiA9ICIke2xpYmRpcn0vbGlicHVsc2UtbWFpbmxvb3AtZ2xpYi5zby4qIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vcHVsc2UvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3B1bHNlLSR7UFZ9L21vZHVsZXMvLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vcHVsc2UtJHtQVn0vbW9kdWxlcy8qLmxhICR7ZGF0YWRpcn0vdmFsYSAke2xpYmRpcn0vY21ha2UiICAgCitGSUxFU18ke1BOfS1jb25mID0gIiR7c3lzY29uZmRpcn0iCitGSUxFU18ke1BOfS1iaW4gKz0gIiR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMvdm9sYXRpbGVzLjA0X3B1bHNlIgorRklMRVNfJHtQTn0tc2VydmVyID0gIiR7YmluZGlyfS9wdWxzZWF1ZGlvICR7YmluZGlyfS9zdGFydC0qICR7c3lzY29uZmRpcn0gJHtiaW5kaXJ9L3BhY3RsICovdWRldi9ydWxlcy5kLyoucnVsZXMgKi8qL3VkZXYvcnVsZXMuZC8qLnJ1bGVzICR7c3lzdGVtZF91c2VyX3VuaXRkaXJ9LyoiCisKKyNTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LXNlcnZlciIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1zZXJ2ZXIgPSAicHVsc2VhdWRpby5zZXJ2aWNlIgorCitGSUxFU18ke1BOfS1taXNjID0gIiR7YmluZGlyfS8qICR7bGliZGlyfS9wdWxzZWF1ZGlvL2xpYnB1bHNlZHNwLnNvIgorCisjIEFsbG93IHRoZSBwdWxzZWF1ZGlvIHBhY2thZ2UgdG8gYmUgY3JlYXRlZCBlbXB0eSBhcyBhIHBsYWNlaG9sZGVyICgtZGJnIGFuZCAtZGV2IGRlcGVuZCBvbiBpdCkKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK0NPTkZGSUxFU19saWJwdWxzZSA9ICIke3N5c2NvbmZkaXJ9L3B1bHNlL2NsaWVudC5jb25mIgorCitDT05GRklMRVNfcHVsc2VhdWRpby1zZXJ2ZXIgPSAiXCAKKyAgJHtzeXNjb25mZGlyfS9wdWxzZS9kZWZhdWx0LnBhIFwKKyAgJHtzeXNjb25mZGlyfS9wdWxzZS9kYWVtb24uY29uZiBcCisgICR7c3lzY29uZmRpcn0vcHVsc2Uvc3lzdGVtLnBhIFwKKyAgIgorCitwa2dfcG9zdGluc3RfJHtQTn0tc2VydmVyKCkgeworICAgICAgICBpZiBbIC16ICIkRCIgXSAmJiBbIC1lICR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIF0gOyB0aGVuCisgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCB1cGRhdGUKKyAgICAgICAgZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgI2Quc2V0VmFyKCdQS0dfcHVsc2VhdWRpbycsICdwdWxzZWF1ZGlvJykKKworICAgIHBsdWdpbmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vcHVsc2UtJHtQVn0vbW9kdWxlcy8nKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBsdWdpbmRpciwgJ15tb2R1bGUtKC4qKVwuc28kJywgJ3B1bHNlYXVkaW8tbW9kdWxlLSVzJywgJ1B1bHNlQXVkaW8gbW9kdWxlIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycsIHByZXBlbmQ9VHJ1ZSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwbHVnaW5kaXIsICdebGliKC4qKVwuc28kJywgJ3B1bHNlYXVkaW8tbGliLSVzJywgJ1B1bHNlQXVkaW8gbGlicmFyeSBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnLCBwcmVwZW5kPVRydWUpCit9CisKK1JERVBFTkRTX3B1bHNlYXVkaW8tc2VydmVyID0gIiBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtZmlsdGVyLWFwcGx5IFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1maWx0ZXItaGV1cmlzdGljcyBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtdWRldi1kZXRlY3QgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLW51bGwtc2luayBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtZGV2aWNlLXJlc3RvcmUgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLXN0cmVhbS1yZXN0b3JlIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1jYXJkLXJlc3RvcmUgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWF1Z21lbnQtcHJvcGVydGllcyBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtZGV0ZWN0IFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1hbHNhLXNpbmsgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWFsc2Etc291cmNlIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1hbHNhLWNhcmQgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLW5hdGl2ZS1wcm90b2NvbC11bml4IFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1kZWZhdWx0LWRldmljZS1yZXN0b3JlIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1pbnRlbmRlZC1yb2xlcyBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtcmVzY3VlLXN0cmVhbXMgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWFsd2F5cy1zaW5rIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1zdXNwZW5kLW9uLWlkbGUgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLXBvc2l0aW9uLWV2ZW50LXNvdW5kcyBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtcm9sZS1jb3JrIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1zd2l0Y2gtb24tcG9ydC1hdmFpbGFibGUiCisKKyMgSWYgdGhlIHNlcnZlciBpcyBpbnN0YWxsZWQsIGl0J3MgdXN1YWxseSBkZXNpcmFibGUgdG8gbWFrZSBBTFNBIGFwcGxpY2F0aW9ucworIyB1c2UgUHVsc2VBdWRpby4gYWxzYS1wbHVnaW5zLXB1bHNlYXVkaW8tY29uZiB3aWxsIGluc3RhbGwgdGhlIGNvbmZpZ3VyYXRpb24KKyMgdGhhdCBtYWtlcyB0aGUgUHVsc2VBdWRpbyBwbHVnaW4gdGhlIGRlZmF1bHQgQUxTQSBkZXZpY2UuCitSREVQRU5EU19wdWxzZWF1ZGlvLXNlcnZlciArPSAiYWxzYS1wbHVnaW5zLXB1bHNlYXVkaW8tY29uZiIKKworIyBwdWxzZWF1ZGlvLW1vZHVsZS1jb25zb2xlLWtpdCBpcyBidWlsdCB3aGVuZXZlciBkYnVzIGlzIGVuYWJsZWQgYnkgUEFDS0FHRUNPTkZJRworIyBidXQgY29uc29sZWtpdCBkZXBlbmRzIG9uIGxpYngxMSBhbmQgaXMgYXZhaWxhYmxlIG9ubHkgZm9yIERJU1RSTyB3aXRoIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JERVBFTkRTX3B1bHNlYXVkaW8tbW9kdWxlLWNvbnNvbGUta2l0ID0rICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdjb25zb2xla2l0JywgJycsIGQpfSIKK1JERVBFTkRTX3B1bHNlYXVkaW8tbWlzYyArPSAicHVsc2VhdWRpby1tb2R1bGUtY2xpLXByb3RvY29sLXVuaXgiCisKK0ZJTEVTX3B1bHNlYXVkaW8tbW9kdWxlLWdjb25mICs9ICIke2xpYmV4ZWNkaXJ9L3B1bHNlL2djb25mLWhlbHBlciIKK0ZJTEVTX3B1bHNlYXVkaW8tbW9kdWxlLWFsc2EtY2FyZCArPSAiJHtkYXRhZGlyfS9wdWxzZWF1ZGlvL2Fsc2EtbWl4ZXIiCisKKyMgVGhlIGNvbnNvbGUta2l0IG1vZHVsZSBpcyBnb29kIHRvIGhhdmUgb24gWDExIHN5c3RlbXMgKGl0IGtlZXBzIFB1bHNlQXVkaW8KKyMgcnVubmluZyBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB1c2VyIGxvZ2luIHNlc3Npb24pLiBUaGUgZGV2aWNlLW1hbmFnZXIgYW5kCisjIHgxMS0qIG1vZHVsZXMgYXJlIHJlZmVyZW5jZWQgZnJvbSB0aGUgc3RhcnQtcHVsc2VhdWRpby14MTEgc2NyaXB0LCBzbyB0aG9zZQorIyBtb2R1bGVzIG11c3QgYmUgaW5zdGFsbGVkIHdoZW4gWDExIGlzIGVuYWJsZWQuCitSREVQRU5EU19wdWxzZWF1ZGlvLXNlcnZlciArPSAiXAorICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdcCisgICAgICAgICAgICAgICAgcHVsc2VhdWRpby1tb2R1bGUtY29uc29sZS1raXQgXAorICAgICAgICAgICAgICAgIHB1bHNlYXVkaW8tbW9kdWxlLWRldmljZS1tYW5hZ2VyIFwKKyAgICAgICAgICAgICAgICBwdWxzZWF1ZGlvLW1vZHVsZS14MTEtY29yay1yZXF1ZXN0IFwKKyAgICAgICAgICAgICAgICBwdWxzZWF1ZGlvLW1vZHVsZS14MTEtcHVibGlzaCBcCisgICAgICAgICAgICAgICAgcHVsc2VhdWRpby1tb2R1bGUteDExLXhzbXAgXAorICAgICAgICAnLCAnJywgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1jbGllbnQtY29uZi1BZGQtYWxsb3ctYXV0b3NwYXduLWZvci1yb290LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1jbGllbnQtY29uZi1BZGQtYWxsb3ctYXV0b3NwYXduLWZvci1yb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOWViN2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWNsaWVudC1jb25mLUFkZC1hbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3QucGF0Y2gKQEAgLTAsMCArMSw5MiBAQAorRnJvbSAxY2I1NjQ3Zjc2ZGM4Y2Q3YmFjYmNlMmE2NGZhYzllNmMyZGMzYjE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUdWUsIDI4IEFwciAyMDE1IDE0OjMyOjQzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNsaWVudC1jb25mOiBBZGQgYWxsb3ctYXV0b3NwYXduLWZvci1yb290CisKK1VzdWFsbHkgYXV0b3NwYXduaW5nIGZvciByb290IGlzIGEgYmFkIGlkZWEsIHNpbmNlIGl0IGNhbiBlYXNpbHkKK2ludGVyZmVyZSB3aXRoIG90aGVyIHVzZXJzJyBQdWxzZUF1ZGlvIGluc3RhbmNlcywgYnV0IGluIGVtYmVkZGVkCitlbnZpcm9ubWVudHMgd2hlcmUgb25seSByb290IGV4aXN0cywgYXV0b3NwYXduaW5nIGlzIGZpbmUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLmF1ZGlvLnB1bHNlYXVkaW8uZ2VuZXJhbC8yMzU0OV0KKworU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtYW4vcHVsc2UtY2xpZW50LmNvbmYuNS54bWwuaW4gfCA5ICsrKysrKysrKworIHNyYy9wdWxzZS9jbGllbnQtY29uZi5jICAgICAgICB8IDEgKworIHNyYy9wdWxzZS9jbGllbnQtY29uZi5oICAgICAgICB8IDEgKworIHNyYy9wdWxzZS9jbGllbnQuY29uZi5pbiAgICAgICB8IDEgKworIHNyYy9wdWxzZS9jb250ZXh0LmMgICAgICAgICAgICB8IDIgKy0KKyA1IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL21hbi9wdWxzZS1jbGllbnQuY29uZi41LnhtbC5pbiBiL21hbi9wdWxzZS1jbGllbnQuY29uZi41LnhtbC5pbgoraW5kZXggMTAwMmRiZS4uMDA1ODQ5MCAxMDA2NDQKKy0tLSBhL21hbi9wdWxzZS1jbGllbnQuY29uZi41LnhtbC5pbgorKysrIGIvbWFuL3B1bHNlLWNsaWVudC5jb25mLjUueG1sLmluCitAQCAtNzEsNiArNzEsMTUgQEAgTGljZW5zZSBhbG9uZyB3aXRoIFB1bHNlQXVkaW87IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAgICAgPC9vcHRpb24+CisgCisgICAgIDxvcHRpb24+CisrICAgICAgPHA+PG9wdD5hbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3Q9PC9vcHQ+IEFsbG93IGF1dG9zcGF3bmluZyBhbHNvIGZvciByb290LgorKyAgICAgIFRha2VzIGEgYm9vbGVhbiB2YWx1ZSwgZGVmYXVsdHMgdG8gPG9wdD5ubzwvb3B0Pi4gSWYgdGhlIDxvcHQ+YXV0b3NwYXduCisrICAgICAgPC9vcHQ+IG9wdGlvbiBpcyBkaXNhYmxlZCwgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4gQXV0b3NwYXduaW5nIGZvcgorKyAgICAgIHJvb3QgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYmVjYXVzZSBydW5uaW5nIFB1bHNlQXVkaW8gYXMgcm9vdCB3aWxsCisrICAgICAgaW50ZXJmZXJlIHdpdGggcmVndWxhciB1c2VycycgUHVsc2VBdWRpbyBpbnN0YW5jZXMuIFRoaXMgb3B0aW9uIHNob3VsZCBiZQorKyAgICAgIGVuYWJsZWQgb25seSBpbiBlbnZpcm9ubWVudHMgd2hlcmUgdGhlcmUgYXJlIG5vIHJlZ3VsYXIgdXNlcnMgYXQgYWxsLjwvcD4KKysgICAgPC9vcHRpb24+CisrCisrICAgIDxvcHRpb24+CisgICAgICAgPHA+PG9wdD5kYWVtb24tYmluYXJ5PTwvb3B0PiBQYXRoIHRvIHRoZSBQdWxzZUF1ZGlvIGRhZW1vbiB0bworICAgICAgIHJ1biB3aGVuIGF1dG9zcGF3bmluZy4gRGVmYXVsdHMgdG8gYSBwYXRoIGNvbmZpZ3VyZWQgYXQgY29tcGlsZQorICAgICAgIHRpbWUuPC9wPgorZGlmZiAtLWdpdCBhL3NyYy9wdWxzZS9jbGllbnQtY29uZi5jIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMKK2luZGV4IDgzMzMxZjguLjA0NzQ1ODMgMTAwNjQ0CistLS0gYS9zcmMvcHVsc2UvY2xpZW50LWNvbmYuYworKysrIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMKK0BAIC0xMzgsNiArMTM4LDcgQEAgdm9pZCBwYV9jbGllbnRfY29uZl9sb2FkKHBhX2NsaWVudF9jb25mICpjLCBib29sIGxvYWRfZnJvbV94MTEsIGJvb2wgbG9hZF9mcm9tX2UKKyAgICAgICAgIHsgImRlZmF1bHQtc2VydmVyIiwgICAgICAgICBwYV9jb25maWdfcGFyc2Vfc3RyaW5nLCAgICZjLT5kZWZhdWx0X3NlcnZlciwgTlVMTCB9LAorICAgICAgICAgeyAiZGVmYXVsdC1kYnVzLXNlcnZlciIsICAgIHBhX2NvbmZpZ19wYXJzZV9zdHJpbmcsICAgJmMtPmRlZmF1bHRfZGJ1c19zZXJ2ZXIsIE5VTEwgfSwKKyAgICAgICAgIHsgImF1dG9zcGF3biIsICAgICAgICAgICAgICBwYV9jb25maWdfcGFyc2VfYm9vbCwgICAgICZjLT5hdXRvc3Bhd24sIE5VTEwgfSwKKysgICAgICAgIHsgImFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdCIsIHBhX2NvbmZpZ19wYXJzZV9ib29sLCAgICZjLT5hbGxvd19hdXRvc3Bhd25fZm9yX3Jvb3QsIE5VTEwgfSwKKyAgICAgICAgIHsgImNvb2tpZS1maWxlIiwgICAgICAgICAgICBwYV9jb25maWdfcGFyc2Vfc3RyaW5nLCAgICZjLT5jb29raWVfZmlsZV9mcm9tX2NsaWVudF9jb25mLCBOVUxMIH0sCisgICAgICAgICB7ICJkaXNhYmxlLXNobSIsICAgICAgICAgICAgcGFfY29uZmlnX3BhcnNlX2Jvb2wsICAgICAmYy0+ZGlzYWJsZV9zaG0sIE5VTEwgfSwKKyAgICAgICAgIHsgImVuYWJsZS1zaG0iLCAgICAgICAgICAgICBwYV9jb25maWdfcGFyc2Vfbm90X2Jvb2wsICZjLT5kaXNhYmxlX3NobSwgTlVMTCB9LAorZGlmZiAtLWdpdCBhL3NyYy9wdWxzZS9jbGllbnQtY29uZi5oIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmgKK2luZGV4IGVhYzcwNWEuLjEzMTM5M2EgMTAwNjQ0CistLS0gYS9zcmMvcHVsc2UvY2xpZW50LWNvbmYuaAorKysrIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmgKK0BAIC0zOCw2ICszOCw3IEBAIHR5cGVkZWYgc3RydWN0IHBhX2NsaWVudF9jb25mIHsKKyAgICAgY2hhciAqY29va2llX2ZpbGVfZnJvbV9hcHBsaWNhdGlvbjsKKyAgICAgY2hhciAqY29va2llX2ZpbGVfZnJvbV9jbGllbnRfY29uZjsKKyAgICAgYm9vbCBhdXRvc3Bhd24sIGRpc2FibGVfc2htLCBhdXRvX2Nvbm5lY3RfbG9jYWxob3N0LCBhdXRvX2Nvbm5lY3RfZGlzcGxheTsKKysgICAgYm9vbCBhbGxvd19hdXRvc3Bhd25fZm9yX3Jvb3Q7CisgICAgIHNpemVfdCBzaG1fc2l6ZTsKKyB9IHBhX2NsaWVudF9jb25mOworIAorZGlmZiAtLWdpdCBhL3NyYy9wdWxzZS9jbGllbnQuY29uZi5pbiBiL3NyYy9wdWxzZS9jbGllbnQuY29uZi5pbgoraW5kZXggMjZiNzc5MC4uNjk4MzBlZiAxMDA2NDQKKy0tLSBhL3NyYy9wdWxzZS9jbGllbnQuY29uZi5pbgorKysrIGIvc3JjL3B1bHNlL2NsaWVudC5jb25mLmluCitAQCAtMjMsNiArMjMsNyBAQAorIDsgZGVmYXVsdC1kYnVzLXNlcnZlciA9CisgCisgOyBhdXRvc3Bhd24gPSB5ZXMKKys7IGFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdCA9IG5vCisgOyBkYWVtb24tYmluYXJ5ID0gQFBBX0JJTkFSWUAKKyA7IGV4dHJhLWFyZ3VtZW50cyA9IC0tbG9nLXRhcmdldD1zeXNsb2cKKyAKK2RpZmYgLS1naXQgYS9zcmMvcHVsc2UvY29udGV4dC5jIGIvc3JjL3B1bHNlL2NvbnRleHQuYworaW5kZXggNGJjNDQ1Zi4uZDZjM2Y2ZCAxMDA2NDQKKy0tLSBhL3NyYy9wdWxzZS9jb250ZXh0LmMKKysrKyBiL3NyYy9wdWxzZS9jb250ZXh0LmMKK0BAIC05NzYsNyArOTc2LDcgQEAgaW50IHBhX2NvbnRleHRfY29ubmVjdCgKKyAgICAgaWYgKCEoZmxhZ3MgJiBQQV9DT05URVhUX05PQVVUT1NQQVdOKSAmJiBjLT5jb25mLT5hdXRvc3Bhd24pIHsKKyAKKyAjaWZkZWYgSEFWRV9HRVRVSUQKKy0gICAgICAgIGlmIChnZXR1aWQoKSA9PSAwKQorKyAgICAgICAgaWYgKCFjLT5jb25mLT5hbGxvd19hdXRvc3Bhd25fZm9yX3Jvb3QgJiYgZ2V0dWlkKCkgPT0gMCkKKyAgICAgICAgICAgICBwYV9sb2dfZGVidWcoIk5vdCBkb2luZyBhdXRvc3Bhd24gc2luY2Ugd2UgYXJlIHJvb3QuIik7CisgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBjLT5kb19hdXRvc3Bhd24gPSB0cnVlOworLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWNvbmYtcGFyc2VyLWFkZC1zdXBwb3J0LWZvci0uZC1kaXJlY3Rvcmllcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtY29uZi1wYXJzZXItYWRkLXN1cHBvcnQtZm9yLS5kLWRpcmVjdG9yaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZjFiMmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWNvbmYtcGFyc2VyLWFkZC1zdXBwb3J0LWZvci0uZC1kaXJlY3Rvcmllcy5wYXRjaApAQCAtMCwwICsxLDE5NiBAQAorRnJvbSA4Y2I2NDNiYmYwYTI4N2Q2Nzc5NGU2ODBkMjZmNDljNTAzZjMxMDUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUaHUsIDIxIE1heSAyMDE1IDIxOjAwOjU5ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmYtcGFyc2VyOiBhZGQgc3VwcG9ydCBmb3IgLmQgZGlyZWN0b3JpZXMKKworVGhpcyBhbGxvd3MgYSBjb25maWd1cmF0aW9uIHNjaGVtZSB3aGVyZSBwcmlvciB0byBsb2FkaW5nCitjb25maWd1cmF0aW9uIGZyb20gInNvbWVmaWxlIiwgdGhlIHBhcnNlciBmaXJzdCBsb2FkcyBjb25maWd1cmF0aW9uCitmcm9tIGZpbGVzIGluIGRpcmVjdG9yeSAic29tZWZpbGUuZCIuIFRoaXMgZmVhdHVyZSBpcyBjdXJyZW50bHkKK2VuYWJsZWQgb25seSBmb3IgY2xpZW50LmNvbmYgYW5kIGRhZW1vbi5jb25mLgorCitUaGlzIG1ha2VzIGl0IGVhc2llciB0byBjcmVhdGUgY29uZmlndXJhdGlvbiBwYWNrYWdlcyBpbiBkaXN0cmlidXRpb25zCit3aGVuIHRoZXJlJ3MgbmVlZCB0byBoYXZlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIGluIGRpZmZlcmVudCBzZXR1cHMuCitGb3IgZXhhbXBsZSwgdGhlIGdyYXBoaWNhbCBTYXRvIGVudmlyb25tZW50IGluIE9wZW5FbWJlZGRlZC1jb3JlIG5lZWRzCit0byBzZXQgYWxsb3ctYXV0b3NwYXduLWZvci1yb290PXRydWUgaW4gY2xpZW50LmNvbmYsIGJ1dCB0aGUgZGVmYXVsdAorY29uZmlndXJhdGlvbiBpbiBPcGVuRW1iZWRkZWQtY29yZSBzaG91bGQgbm90IHNldCB0aGF0IG9wdGlvbi4gV2l0aAordGhpcyBwYXRjaCwgSSBjYW4gY3JlYXRlIGEgU2F0by1zcGVjaWZpYyBwYWNrYWdlIHRoYXQgc2ltcGx5IGluc3RhbGxzCis1MC1zYXRvLmNvbmYgaW4gL2V0Yy9wdWxzZS9jbGllbnQuY29uZi5kIHdpdGhvdXQgY29uZmxpY3Rpbmcgd2l0aCB0aGUKK21haW4gY2xpZW50LmNvbmYgZmlsZSBjb21pbmcgZnJvbSBhIGRpZmZlcmVudCBwYWNrYWdlLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC5hdWRpby5wdWxzZWF1ZGlvLmdlbmVyYWwvMjM1OTJdCisKK1NpZ25lZC1vZmYtYnk6IFRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPgorLS0tCisgc3JjL2RhZW1vbi9kYWVtb24tY29uZi5jICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvbW9kdWxlcy9hbHNhL2Fsc2EtbWl4ZXIuYyAgICAgICAgICAgfCAgNCArKy0tCisgc3JjL21vZHVsZXMvbW9kdWxlLWF1Z21lbnQtcHJvcGVydGllcy5jIHwgIDIgKy0KKyBzcmMvcHVsc2UvY2xpZW50LWNvbmYuYyAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuYyAgICAgICAgICAgICB8IDQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIHNyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuaCAgICAgICAgICAgICB8ICA4ICsrKysrKy0KKyA2IGZpbGVzIGNoYW5nZWQsIDUyIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZGFlbW9uL2RhZW1vbi1jb25mLmMgYi9zcmMvZGFlbW9uL2RhZW1vbi1jb25mLmMKK2luZGV4IDIxYThlZGIuLjEzMzJmYzYgMTAwNjQ0CistLS0gYS9zcmMvZGFlbW9uL2RhZW1vbi1jb25mLmMKKysrKyBiL3NyYy9kYWVtb24vZGFlbW9uLWNvbmYuYworQEAgLTYxNyw3ICs2MTcsNyBAQCBpbnQgcGFfZGFlbW9uX2NvbmZfbG9hZChwYV9kYWVtb25fY29uZiAqYywgY29uc3QgY2hhciAqZmlsZW5hbWUpIHsKKyAgICAgY2kuZGVmYXVsdF9jaGFubmVsX21hcF9zZXQgPSBjaS5kZWZhdWx0X3NhbXBsZV9zcGVjX3NldCA9IGZhbHNlOworICAgICBjaS5jb25mID0gYzsKKyAKKy0gICAgciA9IGYgPyBwYV9jb25maWdfcGFyc2UoYy0+Y29uZmlnX2ZpbGUsIGYsIHRhYmxlLCBOVUxMLCBOVUxMKSA6IDA7CisrICAgIHIgPSBmID8gcGFfY29uZmlnX3BhcnNlKGMtPmNvbmZpZ19maWxlLCBmLCB0YWJsZSwgTlVMTCwgdHJ1ZSwgTlVMTCkgOiAwOworIAorICAgICBpZiAociA+PSAwKSB7CisgCitkaWZmIC0tZ2l0IGEvc3JjL21vZHVsZXMvYWxzYS9hbHNhLW1peGVyLmMgYi9zcmMvbW9kdWxlcy9hbHNhL2Fsc2EtbWl4ZXIuYworaW5kZXggMjMxNDYxMi4uOTg4YjRmZSAxMDA2NDQKKy0tLSBhL3NyYy9tb2R1bGVzL2Fsc2EvYWxzYS1taXhlci5jCisrKysgYi9zcmMvbW9kdWxlcy9hbHNhL2Fsc2EtbWl4ZXIuYworQEAgLTI0ODMsNyArMjQ4Myw3IEBAIHBhX2Fsc2FfcGF0aCogcGFfYWxzYV9wYXRoX25ldyhjb25zdCBjaGFyICpwYXRoc19kaXIsIGNvbnN0IGNoYXIgKmZuYW1lLCBwYV9hbHNhCisgCisgICAgIGZuID0gcGFfbWF5YmVfcHJlZml4X3BhdGgoZm5hbWUsIHBhdGhzX2Rpcik7CisgCistICAgIHIgPSBwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIGl0ZW1zLCBwLT5wcm9wbGlzdCwgcCk7CisrICAgIHIgPSBwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIGl0ZW1zLCBwLT5wcm9wbGlzdCwgZmFsc2UsIHApOworICAgICBwYV94ZnJlZShmbik7CisgCisgICAgIGlmIChyIDwgMCkKK0BAIC00Mjg4LDcgKzQyODgsNyBAQCBwYV9hbHNhX3Byb2ZpbGVfc2V0KiBwYV9hbHNhX3Byb2ZpbGVfc2V0X25ldyhjb25zdCBjaGFyICpmbmFtZSwgY29uc3QgcGFfY2hhbm5lbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhX3J1bl9mcm9tX2J1aWxkX3RyZWUoKSA/IFBBX1NSQ0RJUiAiL21vZHVsZXMvYWxzYS9taXhlci9wcm9maWxlLXNldHMvIiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFfQUxTQV9QUk9GSUxFX1NFVFNfRElSKTsKKyAKKy0gICAgciA9IHBhX2NvbmZpZ19wYXJzZShmbiwgTlVMTCwgaXRlbXMsIE5VTEwsIHBzKTsKKysgICAgciA9IHBhX2NvbmZpZ19wYXJzZShmbiwgTlVMTCwgaXRlbXMsIE5VTEwsIGZhbHNlLCBwcyk7CisgICAgIHBhX3hmcmVlKGZuKTsKKyAKKyAgICAgaWYgKHIgPCAwKQorZGlmZiAtLWdpdCBhL3NyYy9tb2R1bGVzL21vZHVsZS1hdWdtZW50LXByb3BlcnRpZXMuYyBiL3NyYy9tb2R1bGVzL21vZHVsZS1hdWdtZW50LXByb3BlcnRpZXMuYworaW5kZXggNDJiNmZkOS4uNTQxZjBlNyAxMDA2NDQKKy0tLSBhL3NyYy9tb2R1bGVzL21vZHVsZS1hdWdtZW50LXByb3BlcnRpZXMuYworKysrIGIvc3JjL21vZHVsZXMvbW9kdWxlLWF1Z21lbnQtcHJvcGVydGllcy5jCitAQCAtMjA0LDcgKzIwNCw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9ydWxlKHN0cnVjdCBydWxlICpyKSB7CisgICAgIHRhYmxlWzBdLmRhdGEgPSAmci0+YXBwbGljYXRpb25fbmFtZTsKKyAgICAgdGFibGVbMV0uZGF0YSA9ICZyLT5pY29uX25hbWU7CisgCistICAgIGlmIChwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIHRhYmxlLCBOVUxMLCByKSA8IDApCisrICAgIGlmIChwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIHRhYmxlLCBOVUxMLCBmYWxzZSwgcikgPCAwKQorICAgICAgICAgcGFfbG9nX3dhcm4oIkZhaWxlZCB0byBwYXJzZSAuZGVza3RvcCBmaWxlICVzLiIsIGZuKTsKKyAKKyAgICAgcGFfeGZyZWUoZm4pOworZGlmZiAtLWdpdCBhL3NyYy9wdWxzZS9jbGllbnQtY29uZi5jIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMKK2luZGV4IDgzMzMxZjguLjNjMzM4NGQgMTAwNjQ0CistLS0gYS9zcmMvcHVsc2UvY2xpZW50LWNvbmYuYworKysrIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMKK0BAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBwYV9jbGllbnRfY29uZl9sb2FkKHBhX2NsaWVudF9jb25mICpjLCBib29sIGxvYWRfZnJvbV94MTEsIGJvb2wgbG9hZF9mcm9tX2UKKyAKKyAgICAgZiA9IHBhX29wZW5fY29uZmlnX2ZpbGUoREVGQVVMVF9DTElFTlRfQ09ORklHX0ZJTEUsIERFRkFVTFRfQ0xJRU5UX0NPTkZJR19GSUxFX1VTRVIsIEVOVl9DTElFTlRfQ09ORklHX0ZJTEUsICZmbik7CisgICAgIGlmIChmKSB7CistICAgICAgICBwYV9jb25maWdfcGFyc2UoZm4sIGYsIHRhYmxlLCBOVUxMLCBOVUxMKTsKKysgICAgICAgIHBhX2NvbmZpZ19wYXJzZShmbiwgZiwgdGFibGUsIE5VTEwsIHRydWUsIE5VTEwpOworICAgICAgICAgcGFfeGZyZWUoZm4pOworICAgICAgICAgZmNsb3NlKGYpOworICAgICB9CitkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5jIGIvc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5jCitpbmRleCAyZGNkNDVhLi5kNDczMjMyIDEwMDY0NAorLS0tIGEvc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5jCisrKysgYi9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmMKK0BAIC0yMSw2ICsyMSw3IEBACisgI2luY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CitAQCAtMTAzLDcgKzEwNCw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfbGluZShwYV9jb25maWdfcGFyc2VyX3N0YXRlICpzdGF0ZSkgeworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAKKy0gICAgICAgIHIgPSBwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIHN0YXRlLT5pdGVtX3RhYmxlLCBzdGF0ZS0+cHJvcGxpc3QsIHN0YXRlLT51c2VyZGF0YSk7CisrICAgICAgICByID0gcGFfY29uZmlnX3BhcnNlKGZuLCBOVUxMLCBzdGF0ZS0+aXRlbV90YWJsZSwgc3RhdGUtPnByb3BsaXN0LCBmYWxzZSwgc3RhdGUtPnVzZXJkYXRhKTsKKyAgICAgICAgIHBhX3hmcmVlKHBhdGgpOworICAgICAgICAgcmV0dXJuIHI7CisgICAgIH0KK0BAIC0xNTIsOCArMTUzLDEzIEBAIHN0YXRpYyBpbnQgcGFyc2VfbGluZShwYV9jb25maWdfcGFyc2VyX3N0YXRlICpzdGF0ZSkgeworICAgICAgICAgcmV0dXJuIG5vcm1hbF9hc3NpZ25tZW50KHN0YXRlKTsKKyB9CisgCisrc3RhdGljIGludCBjb25mX2ZpbHRlcihjb25zdCBzdHJ1Y3QgZGlyZW50ICplbnRyeSkgeworKyAgICByZXR1cm4gcGFfZW5kc3dpdGgoZW50cnktPmRfbmFtZSwgIi5jb25mIik7CisrfQorKworIC8qIEdvIHRocm91Z2ggdGhlIGZpbGUgYW5kIHBhcnNlIGVhY2ggbGluZSAqLworLWludCBwYV9jb25maWdfcGFyc2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIEZJTEUgKmYsIGNvbnN0IHBhX2NvbmZpZ19pdGVtICp0LCBwYV9wcm9wbGlzdCAqcHJvcGxpc3QsIHZvaWQgKnVzZXJkYXRhKSB7CisraW50IHBhX2NvbmZpZ19wYXJzZShjb25zdCBjaGFyICpmaWxlbmFtZSwgRklMRSAqZiwgY29uc3QgcGFfY29uZmlnX2l0ZW0gKnQsIHBhX3Byb3BsaXN0ICpwcm9wbGlzdCwgYm9vbCB1c2VfZG90X2QsCisrICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyZGF0YSkgeworICAgICBpbnQgciA9IC0xOworICAgICBib29sIGRvX2Nsb3NlID0gIWY7CisgICAgIHBhX2NvbmZpZ19wYXJzZXJfc3RhdGUgc3RhdGU7CitAQCAtMTYzLDYgKzE2OSwzOCBAQCBpbnQgcGFfY29uZmlnX3BhcnNlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBGSUxFICpmLCBjb25zdCBwYV9jb25maWdfaXRlbSAqdCwgcGFfcAorIAorICAgICBwYV96ZXJvKHN0YXRlKTsKKyAKKysgICAgaWYgKHVzZV9kb3RfZCkgeworKyAgICAgICAgY2hhciAqZGlyX25hbWU7CisrICAgICAgICBpbnQgbjsKKysgICAgICAgIHN0cnVjdCBkaXJlbnQgKiplbnRyaWVzID0gTlVMTDsKKysKKysgICAgICAgIGRpcl9uYW1lID0gcGFfc3ByaW50Zl9tYWxsb2MoIiVzLmQiLCBmaWxlbmFtZSk7CisrCisrICAgICAgICBuID0gc2NhbmRpcihkaXJfbmFtZSwgJmVudHJpZXMsIGNvbmZfZmlsdGVyLCBhbHBoYXNvcnQpOworKyAgICAgICAgaWYgKG4gPj0gMCkgeworKyAgICAgICAgICAgIGludCBpOworKworKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKysgICAgICAgICAgICAgICAgY2hhciAqZmlsZW5hbWUyOworKworKyAgICAgICAgICAgICAgICBmaWxlbmFtZTIgPSBwYV9zcHJpbnRmX21hbGxvYygiJXMiIFBBX1BBVEhfU0VQICIlcyIsIGRpcl9uYW1lLCBlbnRyaWVzW2ldLT5kX25hbWUpOworKyAgICAgICAgICAgICAgICBwYV9jb25maWdfcGFyc2UoZmlsZW5hbWUyLCBOVUxMLCB0LCBwcm9wbGlzdCwgZmFsc2UsIHVzZXJkYXRhKTsKKysgICAgICAgICAgICAgICAgcGFfeGZyZWUoZmlsZW5hbWUyKTsKKysKKysgICAgICAgICAgICAgICAgZnJlZShlbnRyaWVzW2ldKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgZnJlZShlbnRyaWVzKTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgaWYgKGVycm5vID09IEVOT0VOVCkKKysgICAgICAgICAgICAgICAgcGFfbG9nX2RlYnVnKCJzY2FuZGlyKFwiJXNcIikgZmFpbGVkOiAlcyIsIGRpcl9uYW1lLCBwYV9jc3RyZXJyb3IoZXJybm8pKTsKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIHBhX2xvZ193YXJuKCJzY2FuZGlyKFwiJXNcIikgZmFpbGVkOiAlcyIsIGRpcl9uYW1lLCBwYV9jc3RyZXJyb3IoZXJybm8pKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHBhX3hmcmVlKGRpcl9uYW1lKTsKKysgICAgfQorKworICAgICBpZiAoIWYgJiYgIShmID0gcGFfZm9wZW5fY2xvZXhlYyhmaWxlbmFtZSwgInIiKSkpIHsKKyAgICAgICAgIGlmIChlcnJubyA9PSBFTk9FTlQpIHsKKyAgICAgICAgICAgICBwYV9sb2dfZGVidWcoIkZhaWxlZCB0byBvcGVuIGNvbmZpZ3VyYXRpb24gZmlsZSAnJXMnOiAlcyIsIGZpbGVuYW1lLCBwYV9jc3RyZXJyb3IoZXJybm8pKTsKK2RpZmYgLS1naXQgYS9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmggYi9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmgKK2luZGV4IGRiYjZmNWMuLmNjMjBkN2QgMTAwNjQ0CistLS0gYS9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmgKKysrKyBiL3NyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuaAorQEAgLTU5LDYgKzU5LDExIEBAIHN0cnVjdCBwYV9jb25maWdfcGFyc2VyX3N0YXRlIHsKKyAgKiBwYV9jb25maWdfaXRlbXMgaW4gKnQgdGhhdCBpcyB0ZXJtaW5hdGVkIGJ5IGFuIGl0ZW0gd2hlcmUgbHZhbHVlIGlzCisgICogTlVMTC4KKyAgKgorKyAqIElmIHVzZV9kb3RfZCBpcyB0cnVlLCB0aGVuIGJlZm9yZSBwYXJzaW5nIHRoZSBmaWxlIG5hbWVkIGJ5IHRoZSBmaWxlbmFtZQorKyAqIGFyZ3VtZW50LCB0aGUgZnVuY3Rpb24gd2lsbCBwYXJzZSBhbGwgZmlsZXMgZW5kaW5nIHdpdGggIi5jb25mIiBpbgorKyAqIGFscGhhYmV0aWNhbCBvcmRlciBmcm9tIGEgZGlyZWN0b3J5IHdob3NlIG5hbWUgaXMgZmlsZW5hbWUgKyAiLmQiLCBpZiBzdWNoCisrICogZGlyZWN0b3J5IGV4aXN0cy4KKysgKgorICAqIFNvbWUgY29uZmlndXJhdGlvbiBmaWxlcyBtYXkgY29udGFpbiBhIFByb3BlcnRpZXMgc2VjdGlvbiwgd2hpY2gKKyAgKiBpcyBhIGJpdCBzcGVjaWFsLiBOb3JtYWxseSBhbGwgYWNjZXB0ZWQgbHZhbHVlcyBtdXN0IGJlIHByZWRlZmluZWQKKyAgKiBpbiB0aGUgcGFfY29uZmlnX2l0ZW0gdGFibGUsIGJ1dCBpbiB0aGUgUHJvcGVydGllcyBzZWN0aW9uIHRoZQorQEAgLTY4LDcgKzczLDggQEAgc3RydWN0IHBhX2NvbmZpZ19wYXJzZXJfc3RhdGUgeworICAqIHByb3BlcnRpZXMsIGFuZCB0aG9zZSBwcm9wZXJ0aWVzIHdpbGwgYmUgbWVyZ2VkIGludG8gdGhlIGdpdmVuCisgICogcHJvcGxpc3QuIElmIHByb3BsaXN0IGlzIE5VTEwsIHRoZW4gc2VjdGlvbnMgbmFtZWQgIlByb3BlcnRpZXMiCisgICogYXJlIG5vdCBhbGxvd2VkIGF0IGFsbCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiAqLworLWludCBwYV9jb25maWdfcGFyc2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIEZJTEUgKmYsIGNvbnN0IHBhX2NvbmZpZ19pdGVtICp0LCBwYV9wcm9wbGlzdCAqcHJvcGxpc3QsIHZvaWQgKnVzZXJkYXRhKTsKKytpbnQgcGFfY29uZmlnX3BhcnNlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBGSUxFICpmLCBjb25zdCBwYV9jb25maWdfaXRlbSAqdCwgcGFfcHJvcGxpc3QgKnByb3BsaXN0LCBib29sIHVzZV9kb3RfZCwKKysgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJkYXRhKTsKKyAKKyAvKiBHZW5lcmljIHBhcnNlcnMgZm9yIGludGVnZXJzLCBzaXplX3QsIGJvb2xlYW5zIGFuZCBzdHJpbmdzICovCisgaW50IHBhX2NvbmZpZ19wYXJzZV9pbnQocGFfY29uZmlnX3BhcnNlcl9zdGF0ZSAqc3RhdGUpOworLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLXBhZHNwLU1ha2UtaXQtY29tcGlsZS1vbi1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1wYWRzcC1NYWtlLWl0LWNvbXBpbGUtb24tbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTU1OTk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1wYWRzcC1NYWtlLWl0LWNvbXBpbGUtb24tbXVzbC5wYXRjaApAQCAtMCwwICsxLDcwIEBACitGcm9tIGY2YWIzYzNhYTdhMTg0MWM4YWRkMDQ4MjgwMjkzNTZkMmE4Yzg4ZTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA2IEFwciAyMDE1IDIxOjU2OjMxIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHBhZHNwOiBNYWtlIGl0IGNvbXBpbGUgb24gbXVzbAorCiticmVhayBhc3N1bXB0aW9ucyBvbiBnbGliYyBhbmQgdGhlcmUgaXMgbm8gc3RhdDY0IG9uIG5vbgorZ2xpYmMgQyBsaWJyYXJpZXMKKworU2VlIHB1bHNlYXVkaW8gYnVnCisKK2h0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTg1MzE5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy91dGlscy9wYWRzcC5jIHwgMTUgKysrKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy91dGlscy9wYWRzcC5jIGIvc3JjL3V0aWxzL3BhZHNwLmMKK2luZGV4IGU2MTM3M2MuLjY4NDcyMWEgMTAwNjQ0CistLS0gYS9zcmMvdXRpbHMvcGFkc3AuYworKysrIGIvc3JjL3V0aWxzL3BhZHNwLmMKK0BAIC0yMzY4LDcgKzIzNjgsNyBAQCBmYWlsOgorICAgICByZXR1cm4gcmV0OworIH0KKyAKKy0jaWZkZWYgc3VuCisrI2lmbmRlZiBfX0dMSUJDX18KKyBpbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCwgLi4uKSB7CisgI2Vsc2UKKyBpbnQgaW9jdGwoaW50IGZkLCB1bnNpZ25lZCBsb25nIHJlcXVlc3QsIC4uLikgeworQEAgLTI1MDgsMTAgKzI1MDgsMTMgQEAgaW50IHN0YXQoY29uc3QgY2hhciAqcGF0aG5hbWUsIHN0cnVjdCBzdGF0ICpidWYpIHsKKyAKKyAgICAgcmV0dXJuIDA7CisgfQorLQorICNpZmRlZiBIQVZFX09QRU42NAorLQorKyN1bmRlZiBzdGF0NjQKKysjaWZkZWYgX19HTElCQ19fCisgaW50IHN0YXQ2NChjb25zdCBjaGFyICpwYXRobmFtZSwgc3RydWN0IHN0YXQ2NCAqYnVmKSB7CisrI2Vsc2UKKytpbnQgc3RhdDY0KGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKSB7CisrI2VuZGlmCisgICAgIHN0cnVjdCBzdGF0IG9sZGJ1ZjsKKyAgICAgaW50IHJldDsKKyAKK0BAIC0yNTQ0LDcgKzI1NDcsNyBAQCBpbnQgc3RhdDY0KGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBzdHJ1Y3Qgc3RhdDY0ICpidWYpIHsKKyAKKyAgICAgcmV0dXJuIDA7CisgfQorLQorKyN1bmRlZiBvcGVuNjQKKyBpbnQgb3BlbjY0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikgeworICAgICB2YV9saXN0IGFyZ3M7CisgICAgIG1vZGVfdCBtb2RlID0gMDsKK0BAIC0yNjcwLDggKzI2NzMsOCBAQCBGSUxFKiBmb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSkgeworIH0KKyAKKyAjaWZkZWYgSEFWRV9PUEVONjQKKy0KKy1GSUxFICpmb3BlbjY0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlKSB7CisrI3VuZGVmIGZvcGVuNjQKKytGSUxFICpmb3BlbjY0KGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgZmlsZW5hbWUsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgbW9kZSkgeworIAorICAgICBkZWJ1ZyhERUJVR19MRVZFTF9WRVJCT1NFLCBfX0ZJTEVfXyI6IGZvcGVuNjQoJXMpXG4iLCBmaWxlbmFtZT9maWxlbmFtZToiTlVMTCIpOworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby9maXgtZ2l0LXZlcnNpb24tZ2VuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vZml4LWdpdC12ZXJzaW9uLWdlbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDk0MjUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vZml4LWdpdC12ZXJzaW9uLWdlbi5wYXRjaApAQCAtMCwwICsxLDI0IEBACitnaXQtdmVyc2lvbi1nZW4gZ2V0cyBjb25mdXNlZCBpZiBhIHRhcmJhbGwgaXMgYmVpbmcgYnVpbHQgaW5zaWRlIGEgZ2l0IGRpcmVjdG9yeQorKGllIHlvdXIgYnVpbGQgZGlyZWN0b3J5IGlzIGEgc3ViZGlyZWN0b3J5IG9mIGEgcG9reSBjbG9uZSksIGFuZCBlbmRzIHVwIGNhbGxpbmcKK3RoZSByZWxlYXNlIDYuMC1kaXJ0eS4gIEFkZCBhIHNob3J0Y3V0IGV4aXQgc28gaWYgYSB0YXJiYWxsIGlzIGRldGVjdGVkIGl0Citkb2Vzbid0IGF0dGVtcHQgdG8gbG9vayBhdCB0aGUgZ2l0IHN0YXR1cy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgKGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTkwOTM2KQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2dpdC12ZXJzaW9uLWdlbiBiL2dpdC12ZXJzaW9uLWdlbgoraW5kZXggNzU0Njg4NC4uMDc5YjkzZSAxMDA3NTUKKy0tLSBhL2dpdC12ZXJzaW9uLWdlbgorKysrIGIvZ2l0LXZlcnNpb24tZ2VuCitAQCAtODQsNyArODQsMTAgQEAgdGhlbgorICAgICB2PWBjYXQgJHRhcmJhbGxfdmVyc2lvbl9maWxlYCB8fCBleGl0IDEKKyAgICAgY2FzZSAkdiBpbgorIAkqJG5sKikgdj0gOzsgIyByZWplY3QgbXVsdGktbGluZSBvdXRwdXQKKy0JWzAtOV0qKSA7OworKwlbMC05XSopCisrCQllY2hvICIkdiIgfCB0ciAtZCAnXDAxMicKKysJCWV4aXQgMAorKwkJOzsKKyAJKikgdj0gOzsKKyAgICAgZXNhYworICAgICB0ZXN0IC16ICIkdiIgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vdm9sYXRpbGVzLjA0X3B1bHNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vdm9sYXRpbGVzLjA0X3B1bHNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMTk5ODAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby92b2xhdGlsZXMuMDRfcHVsc2UKQEAgLTAsMCArMSwyIEBACisjIDx0eXBlPiA8b3duZXI+IDxncm91cD4gPG1vZGU+IDxwYXRoPiA8bGlua3NvdXJjZT4KK2QgcHVsc2UgcHVsc2UgMDc1NSAvdmFyL3J1bi9wdWxzZSBub25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpb182LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpb182LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFlOTA5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvXzYuMC5iYgpAQCAtMCwwICsxLDE2IEBACityZXF1aXJlIHB1bHNlYXVkaW8uaW5jCisKK1NSQ19VUkkgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9wdWxzZWF1ZGlvL3JlbGVhc2VzLyR7QlB9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBhZHNwLU1ha2UtaXQtY29tcGlsZS1vbi1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY2xpZW50LWNvbmYtQWRkLWFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmYtcGFyc2VyLWFkZC1zdXBwb3J0LWZvci0uZC1kaXJlY3Rvcmllcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZ2l0LXZlcnNpb24tZ2VuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3ZvbGF0aWxlcy4wNF9wdWxzZSBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiYjY5MWU4M2I3NDM0YzY3OGRmZmFjZmEzYTAyNzc1MGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjUwNjQwZTBiODBiMTYwNzYwMGFjY2ZhZDJlNDVhYWJiNzlkMzc5YmY2MzU0Yzk2NzFlZmEyMDY1NDc3ZjZmNiIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgIG1rZGlyIC1wICR7U30vbGlibHRkbAorICAgIGNwICR7U1RBR0lOR19MSUJESVJ9L2xpYmx0ZGwqICR7U30vbGlibHRkbAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zYmMvc2JjXzEuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc2JjL3NiY18xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ3ZjMxYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc2JjL3NiY18xLjMuYmIKQEAgLTAsMCArMSwxNiBAQAorU1VNTUFSWSA9ICJTQkMgQXVkaW8gQ29kZWMiCitERVNDUklQVElPTiA9ICJCbHVldG9vdGggbG93LWNvbXBsZXhpdHksIHN1YmJhbmQgY29kZWMgKFNCQykgbGlicmFyeS4iCitIT01FUEFHRSA9ICJodHRwczovL3d3dy5ibHVlei5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2JjL3NiYy5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjY7bWQ1PTBmNTdkMGRmMjJiMGQ0MDc0NmJkZDI5ODA1YTQzNjFiIgorCitERVBFTkRTID0gImxpYnNuZGZpbGUxIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvYmx1ZXRvb3RoLyR7QlB9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjJkOGI3ODQxZjJjMTFhYjI4NzcxOGQ1NjJmMmI5ODFjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU2MTAyMmNmNTc2ZjE0MTkwMjQxZTcwNzE3NTNmZGFjZGNlNWQxZGVhODlmZmQ3MDQxMTBmYzUwYmU2ODkzMDkiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleF8xLjJyYzIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NwZWV4L3NwZWV4XzEuMnJjMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2QyM2RiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleF8xLjJyYzIuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJTcGVlY2ggQXVkaW8gQ29kZWMiCitERVNDUklQVElPTiA9ICJTcGVleCBpcyBhbiBPcGVuIFNvdXJjZS9GcmVlIFNvZnR3YXJlIHBhdGVudC1mcmVlIGF1ZGlvIGNvbXByZXNzaW9uIGZvcm1hdCBkZXNpZ25lZCBmb3Igc3BlZWNoLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuc3BlZXgub3JnIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zMTQ2NDlkOGJhOWRkNzA0NWRmYjY2ODNmMjk4ZDBhOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3NwZWV4L3NwZWV4Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0zNDttZDU9ZWY4YzhlYTRmNzE5OGQ3MWNmMzUwOWM2ZWQwNWVhNTAiCitERVBFTkRTID0gImxpYm9nZyBzcGVleGRzcCIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnVzLnhpcGgub3JnL3JlbGVhc2VzL3NwZWV4L3NwZWV4LSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjZhZTdkYjNiYWIwMWUxZDRiODZiYWNmYThjYTMzZTgxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNhYTI3YzcyNDdmZjE1Yzg1MjFjMmFlMGVhMjE5ODdjOWU5NzEwYThmMmQzNDQ4ZThiNzlkYTk4MDZiY2U4OTEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBsaWJfcGFja2FnZQorCitFWFRSQV9PRUNPTkYgPSAiXAorICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnVEFSR0VUX0ZQVScsICdzb2Z0JywgJy0tZW5hYmxlLWZpeGVkLXBvaW50IC0tZGlzYWJsZS1mbG9hdC1hcGkgLS1kaXNhYmxlLXZicicsICcnLCBkKX0gXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleGRzcC8wMDAxLURvbi10LXJlbHktb24tSEFWRV9TVERJTlRfSC1ldC1hbC4tYmVpbmctZGVmaW5lZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhkc3AvMDAwMS1Eb24tdC1yZWx5LW9uLUhBVkVfU1RESU5UX0gtZXQtYWwuLWJlaW5nLWRlZmluZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcwNjdkYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhkc3AvMDAwMS1Eb24tdC1yZWx5LW9uLUhBVkVfU1RESU5UX0gtZXQtYWwuLWJlaW5nLWRlZmluZWQucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRnJvbSBjNzMzNzBjZWFmZDEzOGJlY2VlOGNhM2M2ODhiYTc1NzU2ODMwYmZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBTdW4sIDUgSnVsIDIwMTUgMTc6NDg6MTYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gRG9uJ3QgcmVseSBvbiBIQVZFX1NURElOVF9IIGV0IGFsLiBiZWluZyBkZWZpbmVkCisKK05vdCBldmVyeW9uZSB3aG8gaW5jbHVkZXMgc3BlZXhkc3BfY29uZmlnX3R5cGVzLmggd2lsbCBoYXZlIGEgdGVzdAord2hpY2ggZGVmaW5lcyB0aG9zZSwgYW5kIGlmIHdlJ3ZlIGNob3NlbiB0byB1c2UgdGhlIHN0ZGludCB0eXBlcyBhdAorY29uZmlndXJlIHRpbWUgdGhlbiB3ZSBrbm93IGV4YWN0bHkgd2hpY2ggaGVhZGVyKHMpIGFyZSBhdmFpbGFibGUsIHNvCitqdXN0IGNob29zZSB0aGUgYmVzdCBvbmUgdGhlbiBhbmQgZ2VuZXJhdGUgdGhlIGhlYWRlciB0byB1c2UgaXQuCisKK1RoaXMgcGF0Y2gsIGluY2x1ZGluZyB0aGUgYWJvdmUgdGV4dCwgaXMgY29waWVkIGZyb20gYSBjb21taXQgaW4gdGhlCitzcGVleCByZXBvc2l0b3J5WzFdLiBUaGUgb3JpZ2luYWwgY29tbWl0IGZvciBzcGVleCB3YXMgbWFkZSBieSBSb24KKzxyb25AZGViaWFuLm9yZz4uCisKK1sxXSBodHRwczovL2dpdC54aXBoLm9yZy8/cD1zcGVleC5naXQ7YT1jb21taXRkaWZmO2g9Nzc0Yzg3ZDZjYjdkZDhkYWJkZDE3Njc3ZmM2ZGE3NTNlY2Y0YWE4NworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYgKysrKysrCisgaW5jbHVkZS9zcGVleC9zcGVleGRzcF9jb25maWdfdHlwZXMuaC5pbiB8IDggKy0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMmNkMmQxZS4uMWRlMGMyMyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzM0LDYgKzMzNCwxMiBAQCBBQ19TVUJTVChbVVNJWkUxNl0pCisgQUNfU1VCU1QoW1NJWkUzMl0pCisgQUNfU1VCU1QoW1VTSVpFMzJdKQorIAorK0FTX0lGKFt0ZXN0ICIkYWNfY3ZfaGVhZGVyX3N0ZGludF9oIiA9ICJ5ZXMiXSwgICAgW0lOQ0xVREVfU1RESU5UPSIjaW5jbHVkZSA8c3RkaW50Lmg+Il0sCisrICAgICAgW3Rlc3QgIiRhY19jdl9oZWFkZXJfaW50dHlwZXNfaCIgPSAieWVzIl0sICBbSU5DTFVERV9TVERJTlQ9IiNpbmNsdWRlIDxpbnR0eXBlcy5oPiJdLAorKyAgICAgIFt0ZXN0ICIkYWNfY3ZfaGVhZGVyX3N5c190eXBlc19oIiA9ICJ5ZXMiXSwgW0lOQ0xVREVfU1RESU5UPSIjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Il0pCisrCisrQUNfU1VCU1QoW0lOQ0xVREVfU1RESU5UXSkKKysKKyBBQ19DT05GSUdfRklMRVMoWworICAgICAgICAgICAgTWFrZWZpbGUgbGlic3BlZXhkc3AvTWFrZWZpbGUgZG9jL01ha2VmaWxlIFNwZWV4RFNQLnNwZWMKKyAgICAgICAgICAgIGluY2x1ZGUvTWFrZWZpbGUgaW5jbHVkZS9zcGVleC9NYWtlZmlsZSBzcGVleGRzcC5wYworZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3BlZXgvc3BlZXhkc3BfY29uZmlnX3R5cGVzLmguaW4gYi9pbmNsdWRlL3NwZWV4L3NwZWV4ZHNwX2NvbmZpZ190eXBlcy5oLmluCitpbmRleCAwMmI4MmZkLi41ZWE3YjU1IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9zcGVleC9zcGVleGRzcF9jb25maWdfdHlwZXMuaC5pbgorKysrIGIvaW5jbHVkZS9zcGVleC9zcGVleGRzcF9jb25maWdfdHlwZXMuaC5pbgorQEAgLTEsMTMgKzEsNyBAQAorICNpZm5kZWYgX19TUEVFWF9UWVBFU19IX18KKyAjZGVmaW5lIF9fU1BFRVhfVFlQRVNfSF9fCisgCistI2lmIGRlZmluZWQgSEFWRV9TVERJTlRfSAorLSMgIGluY2x1ZGUgPHN0ZGludC5oPgorLSNlbGlmIGRlZmluZWQgSEFWRV9JTlRUWVBFU19ICistIyAgaW5jbHVkZSA8aW50dHlwZXMuaD4KKy0jZWxpZiBkZWZpbmVkIEhBVkVfU1lTX1RZUEVTX0gKKy0jICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jZW5kaWYKKytASU5DTFVERV9TVERJTlRACisgCisgdHlwZWRlZiBAU0laRTE2QCBzcHhfaW50MTZfdDsKKyB0eXBlZGVmIEBVU0laRTE2QCBzcHhfdWludDE2X3Q7CistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhkc3BfMS4ycmMzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleGRzcF8xLjJyYzMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxYWNlZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhkc3BfMS4ycmMzLmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiQSBwYXRlbnQtZnJlZSBEU1AgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlNwZWV4RFNQIGlzIGEgcGF0ZW50LWZyZWUsIE9wZW4gU291cmNlL0ZyZWUgU29mdHdhcmUgRFNQIGxpYnJhcnkuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5zcGVleC5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTMxNDY0OWQ4YmE5ZGQ3MDQ1ZGZiNjY4M2YyOThkMGE4IgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueGlwaC5vcmcvcmVsZWFzZXMvc3BlZXgvc3BlZXhkc3AtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRG9uLXQtcmVseS1vbi1IQVZFX1NURElOVF9ILWV0LWFsLi1iZWluZy1kZWZpbmVkLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzBkOWQzMTE4NGY3ZWI3NjExOTJmZDFlZjBiNzMzMzMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGFlNjg4NjAwMDM5ZjVkMjI0YmRmMmUyMjJkMmZiZGU2NTYwODQ0N2U0YzJmNjgxNTg1ZTRkY2E2ZGY2OTJmMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgICAgIC0tZGlzYWJsZS1leGFtcGxlcyBcCisgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUQVJHRVRfRlBVJywgJ3NvZnQnLCAnLS1lbmFibGUtZml4ZWQtcG9pbnQgLS1kaXNhYmxlLWZsb2F0LWFwaScsICcnLCBkKX0gXAorIgorCisjIFdvcmthcm91bmQgZm9yIGEgYnVpbGQgZmFpbHVyZSB3aGVuIGJ1aWxkaW5nIHdpdGggTUFDSElORT1xZW11YXJtNjQuIEkgdGhpbmsKKyMgYWFyY2g2NCBpcyBzdXBwb3NlZCB0byBzdXBwb3J0IE5FT04ganVzdCBmaW5lLCBidXQgYnVpbGRpbmcgZm9yIHFlbXVhcm02NAorIyBmYWlscyBpbiBORU9OIGNvZGU6CisjCisjIC4uLi9zcGVleGRzcC0xLjJyYzMvbGlic3BlZXhkc3AvcmVzYW1wbGVfbmVvbi5oOjE0ODo1OiBlcnJvcjogaW1wb3NzaWJsZSBjb25zdHJhaW50IGluICdhc20nCisjICAgICAgYXNtIHZvbGF0aWxlICgiICBjbXAgJVtsZW5dLCAjMFxuIgorIyAgICAgIF4KKyMKKyMgSSBzZW50IGFuIGVtYWlsIGFib3V0IHRoZSBpc3N1ZSB0byBzcGVleC1kZXYuIEF0IHRoZSB0aW1lIG9mIHdyaXRpbmcgdGhlcmUKKyMgYXJlIG5vIHJlc3BvbnNlcyB5ZXQ6CisjIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAuYXVkaW8uY29tcHJlc3Npb24uc3BlZXguZGV2ZWwvNzM2MAorRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdhYXJjaDY0JywgJy0tZGlzYWJsZS1uZW9uJywgJycsIGQpfSIKKworIyBzcGVleGRzcCB3YXMgc3BsaXQgb2ZmIGZyb20gc3BlZXggaW4gMS4ycmMyLiBPbGRlciB2ZXJzaW9ucyBvZiBzcGVleCBjYW4ndAorIyBiZSBpbnN0YWxsZWQgdG9nZXRoZXIgd2l0aCBzcGVleGRzcCwgc2luY2UgdGhleSBjb250YWluIG92ZXJsYXBwaW5nIGZpbGVzLgorUkNPTkZMSUNUU18ke1BOfSA9ICJzcGVleCAoPCAxLjJyYzIpIgorUkNPTkZMSUNUU18ke1BOfS1kYmcgPSAic3BlZXgtZGJnICg8IDEuMnJjMikiCitSQ09ORkxJQ1RTXyR7UE59LWRldiA9ICJzcGVleC1kZXYgKDwgMS4ycmMyKSIKK1JDT05GTElDVFNfJHtQTn0tc3RhdGljZGV2ID0gInNwZWV4LXN0YXRpY2RldiAoPCAxLjJyYzIpIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS90cmVtb3IvdHJlbW9yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vci9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U1MTAyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vci9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vdHJhYy54aXBoLm9yZy90aWNrZXQvMTkyMl0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK0luZGV4OiBjb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjb25maWd1cmUuaW4JKHJldmlzaW9uIDE4NzY0KQorKysrIGNvbmZpZ3VyZS5pbgkod29ya2luZyBjb3B5KQorQEAgLTksNyArOSw3IEBACisgQUNfQ0FOT05JQ0FMX0hPU1QKKyBBQ19DQU5PTklDQUxfVEFSR0VUCisKKy1BTV9DT05GSUdfSEVBREVSKFtjb25maWcuaF0pCisrQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKKworIEFNX0lOSVRfQVVUT01BS0UobGlidm9yYmlzaWRlYywxLjIuMSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vci90cmVtb3ItYXJtLXRodW1iMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vci90cmVtb3ItYXJtLXRodW1iMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDQ5NTQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS90cmVtb3IvdHJlbW9yL3RyZW1vci1hcm0tdGh1bWIyLnBhdGNoCkBAIC0wLDAgKzEsMTA0IEBACitGcm9tOiBYaW4gT3V5YW5nIDxYaW4uT3V5YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDE2IEp1bCAyMDEyIDEzOjI5OjM0ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHRyZW1vcjogYWRkIElUIGluc3RydWN0aW9ucyBmb3IgYXJtIHRodW1iMiB0dW5lIGZsYWdzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW4gVGh1bWItMiwgbW9zdCBpbnN0cnVjdGlvbnMgZG8gbm90IGhhdmUgYSBidWlsdCBpbiBjb25kaXRpb24gY29kZSAoZXhjZXB0IGZvciAKK2NvbmRpdGlvbmFsIGJyYW5jaGVzKS4gSW5zdGVhZCwgc2hvcnQgc2VxdWVuY2VzIG9mIGluc3RydWN0aW9ucyB3aGljaCBhcmUgdG8gYmUgCitleGVjdXRlZCBjb25kaXRpb25hbGx5IGNhbiBiZSBwcmVjZWRlZCBieSBhIHNwZWNpYWwgIklUIGluc3RydWN0aW9uIiB3aGljaCAKK2Rlc2NyaWJlcyB0aGUgY29uZGl0aW9uIGFuZCB3aGljaCBvZiB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9ucyBzaG91bGQgYmUgCitleGVjdXRlZCBpZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlIHJlc3BlY3RpdmVseS4gCisKK0ZvciB0aGUgQVJNL1RodW1iIElUKElmLVRoZW4pIGluc3RydWN0aW9uOgoraHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL2luZGV4LmpzcD90b3BpYz0vY29tLmFybS5kb2MuZHVpMDQ4OWMvQ2phYmljY2kuaHRtbAorCitTaWduZWQtb2ZmLWJ5OiBYaW4gT3V5YW5nIDxYaW4uT3V5YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBhc21fYXJtLmggfCAgIDE0ICsrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2FzbV9hcm0uaCBiL2FzbV9hcm0uaAoraW5kZXggYzNiZGEwMC4uODIzYzU0ZiAxMDA3NTUKKy0tLSBhL2FzbV9hcm0uaAorKysrIGIvYXNtX2FybS5oCitAQCAtMTA4LDkgKzEwOCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgWE5QUk9EMzEob2dnX2ludDMyX3QgIGEsIG9nZ19pbnQzMl90ICBiLAorIHN0YXRpYyBpbmxpbmUgb2dnX2ludDMyX3QgQ0xJUF9UT18xNShvZ2dfaW50MzJfdCB4KSB7CisgICBpbnQgdG1wOworICAgYXNtIHZvbGF0aWxlKCJzdWJzCSUxLCAlMCwgIzMyNzY4XG5cdCIKKysJICAgICAgICJpdHQgICAgIHBsXG5cdCIKKyAJICAgICAgICJtb3ZwbAklMCwgIzB4N2YwMFxuXHQiCisgCSAgICAgICAib3JycGwJJTAsICUwLCAjMHhmZlxuIgorIAkgICAgICAgImFkZHMJJTEsICUwLCAjMzI3Njhcblx0IgorKwkgICAgICAgIml0ICAgICAgbWlcblx0IgorIAkgICAgICAgIm1vdm1pCSUwLCAjMHg4MDAwIgorIAkgICAgICAgOiAiK3IiKHgpLCI9ciIodG1wKQorIAkgICAgICAgOgorQEAgLTEzOSwxMCArMTQxLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsc3BfbG9vcF9hc20ob2dnX3VpbnQzMl90ICpxaXAsb2dnX3VpbnQzMl90ICpwaXAsCisgICAgICAgCisgICAgICAgImxkbWRiICAgcjAhLHtyMSxyM307IgorICAgICAgICJzdWJzICAgIHIxLHIxLCU0OyIgICAgICAgICAgLy9pbHNwW2pdLXdpCisrICAgICAgIml0ICAgICAgbWk7IgorICAgICAgICJyc2JtaSAgIHIxLHIxLCMwOyIgICAgICAgICAgLy9sYWJzKGlsc3Bbal0td2kpCisgICAgICAgInVtdWxsICAgJTAscjIscjEsJTA7IiAgICAgICAvL3FpKj1sYWJzKGlsc3Bbal0td2kpCisgICAgICAgCisgICAgICAgInN1YnMgICAgcjEscjMsJTQ7IiAgICAgICAgICAvL2lsc3BbaisxXS13aQorKyAgICAgICJpdCAgICAgIG1pOyIKKyAgICAgICAicnNibWkgICByMSxyMSwjMDsiICAgICAgICAgIC8vbGFicyhpbHNwW2orMV0td2kpCisgICAgICAgInVtdWxsICAgJTEscjMscjEsJTE7IiAgICAgICAvL3BpKj1sYWJzKGlsc3BbaisxXS13aSkKKyAgICAgICAKK0BAIC0xNjcsNiArMTcxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGxzcF9sb29wX2FzbShvZ2dfdWludDMyX3QgKnFpcCxvZ2dfdWludDMyX3QgKnBpcCwKKyAgICAgICAibW92ICAgICByMCwjMHg0MDAwO1xuIgorICAgICAgIAorICAgICAgICJzdWJzICAgIHIxLHIxLCU0O1xuIiAgICAgICAgICAvL2lsc3Bbal0td2kKKysgICAgICAiaXQgICAgICBtaTtcbiIKKyAgICAgICAicnNibWkgICByMSxyMSwjMDtcbiIgICAgICAgICAgLy9sYWJzKGlsc3Bbal0td2kpCisgICAgICAgInVtdWxsICAgJTAscjIscjEsJTA7XG4iICAgICAgIC8vcWkqPWxhYnMoaWxzcFtqXS13aSkKKyAgICAgICAidW11bGwgICAlMSxyMyxyMCwlMTtcbiIgICAgICAgLy9waSo9bGFicyhpbHNwW2orMV0td2kpCitAQCAtMTkwLDE4ICsxOTUsMjMgQEAgc3RhdGljIGlubGluZSB2b2lkIGxzcF9sb29wX2FzbShvZ2dfdWludDMyX3QgKnFpcCxvZ2dfdWludDMyX3QgKnBpcCwKKyAgICAgICAibW92ICAgICByMiwjMDsiCisgICAgICAgIm9yciAgICAgcjEsJTAsJTE7IgorICAgICAgICJ0c3QgICAgIHIxLCMweGZmMDAwMDAwOyIKKysgICAgICAiaXR0ICAgICBuZTsiCisgICAgICAgImFkZG5lICAgcjIscjIsIzg7IgorICAgICAgICJtb3ZuZSAgIHIxLHIxLGxzciAjODsiCisgICAgICAgInRzdCAgICAgcjEsIzB4MDBmMDAwMDA7IgorKyAgICAgICJpdHQgICAgIG5lOyIKKyAgICAgICAiYWRkbmUgICByMixyMiwjNDsiCisgICAgICAgIm1vdm5lICAgcjEscjEsbHNyICM0OyIKKyAgICAgICAidHN0ICAgICByMSwjMHgwMDBjMDAwMDsiCisrICAgICAgIml0dCAgICAgbmU7IgorICAgICAgICJhZGRuZSAgIHIyLHIyLCMyOyIKKyAgICAgICAibW92bmUgICByMSxyMSxsc3IgIzI7IgorICAgICAgICJ0c3QgICAgIHIxLCMweDAwMDIwMDAwOyIKKysgICAgICAiaXR0ICAgICBuZTsiCisgICAgICAgImFkZG5lICAgcjIscjIsIzE7IgorICAgICAgICJtb3ZuZSAgIHIxLHIxLGxzciAjMTsiCisgICAgICAgInRzdCAgICAgcjEsIzB4MDAwMTAwMDA7IgorKyAgICAgICJpdCAgICAgIG5lOyIKKyAgICAgICAiYWRkbmUgICByMixyMiwjMTsiCisgICAgICAgIm1vdiAgICAgJTAsJTAsbHNyIHIyOyIKKyAgICAgICAibW92ICAgICAlMSwlMSxsc3IgcjI7IgorQEAgLTIyMiwxNSArMjMyLDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsc3Bfbm9ybV9hc20ob2dnX3VpbnQzMl90ICpxaXAsb2dnX2ludDMyX3QgKnFleHBwKXsKKyAgIG9nZ19pbnQzMl90IHFleHA9KnFleHBwOworIAorICAgYXNtKCJ0c3QgICAgICUwLCMweDAwMDBmZjAwOyIKKysgICAgICAiaXR0ICAgICBlcTsiCisgICAgICAgIm1vdmVxICAgJTAsJTAsbHNsICM4OyIKKyAgICAgICAic3ViZXEgICAlMSwlMSwjODsiCisgICAgICAgInRzdCAgICAgJTAsIzB4MDAwMGYwMDA7IgorKyAgICAgICJpdHQgICAgIGVxOyIKKyAgICAgICAibW92ZXEgICAlMCwlMCxsc2wgIzQ7IgorICAgICAgICJzdWJlcSAgICUxLCUxLCM0OyIKKyAgICAgICAidHN0ICAgICAlMCwjMHgwMDAwYzAwMDsiCisrICAgICAgIml0dCAgICAgZXE7IgorICAgICAgICJtb3ZlcSAgICUwLCUwLGxzbCAjMjsiCisgICAgICAgInN1YmVxICAgJTEsJTEsIzI7IgorICAgICAgICJ0c3QgICAgICUwLCMweDAwMDA4MDAwOyIKKysgICAgICAiaXR0ICAgICBlcTsiCisgICAgICAgIm1vdmVxICAgJTAsJTAsbHNsICMxOyIKKyAgICAgICAic3ViZXEgICAlMSwlMSwjMTsiCisgICAgICAgOiAiK3IiKHFpKSwiK3IiKHFleHApCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS90cmVtb3IvdHJlbW9yXzIwMTUwMTA3LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS90cmVtb3IvdHJlbW9yXzIwMTUwMTA3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNzg5NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3RyZW1vci90cmVtb3JfMjAxNTAxMDcuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJGaXhlZC1wb2ludCBkZWNvZGVyIgorREVTQ1JJUFRJT04gPSAidHJlbW9yIGlzIGEgZml4ZWQgcG9pbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlIHZvcmJpcyBjb2RlYy4iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWRiMWI3YTY2OGIyYTZmNDdiMmFmODhmYjAwOGFkNTU1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL29zLmg7YmVnaW5saW5lPTM7ZW5kbGluZT0xNDttZDU9NWMwYWY1ZTFiZWRlZjNjZTgxNzhjODlmNDhjZDZmMWYiCitERVBFTkRTID0gImxpYm9nZyIKK1NSQ0RBVEUgPSAiJHtQVn0iCitQUiA9ICJyMSIKKworIyBTVk4gc3VwcG9ydCBmb3IgdXBzdHJlYW0gdmVyc2lvbiBjaGVjayBpc24ndCBpbXBsZW1lbnRlZCB5ZXQKK1JFQ0lQRV9VUFNUUkVBTV9WRVJTSU9OID0gIjIwMTUwMTA3IgorUkVDSVBFX1VQU1RSRUFNX0RBVEUgPSAiSmFuIDA3LCAyMDE1IgorQ0hFQ0tfREFURSA9ICJBdWcgMTIsIDIwMTUiCisKK1NSQ19VUkkgPSAic3ZuOi8vc3ZuLnhpcGgub3JnL3RydW5rO21vZHVsZT1UcmVtb3I7cmV2PTE5NDI3O3Byb3RvY29sPWh0dHAgXAorICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly90cmVtb3ItYXJtLXRodW1iMi5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9UcmVtb3IiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIgorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvd2VicC9saWJ3ZWJwXzAuNC4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS93ZWJwL2xpYndlYnBfMC40LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiODBmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvd2VicC9saWJ3ZWJwXzAuNC4zLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiV2ViUCBpcyBhbiBpbWFnZSBmb3JtYXQgZGVzaWduZWQgZm9yIHRoZSBXZWIiCitERVNDUklQVElPTiA9ICJXZWJQIGlzIGEgbWV0aG9kIG9mIGxvc3N5IGFuZCBsb3NzbGVzcyBjb21wcmVzc2lvbiB0aGF0IGNhbiBiZSBcCisgICAgICAgICAgICAgICB1c2VkIG9uIGEgbGFyZ2UgdmFyaWV0eSBvZiBwaG90b2dyYXBoaWMsIHRyYW5zbHVjZW50IGFuZCBcCisgICAgICAgICAgICAgICBncmFwaGljYWwgaW1hZ2VzIGZvdW5kIG9uIHRoZSB3ZWIuIFRoZSBkZWdyZWUgb2YgbG9zc3kgXAorICAgICAgICAgICAgICAgY29tcHJlc3Npb24gaXMgYWRqdXN0YWJsZSBzbyBhIHVzZXIgY2FuIGNob29zZSB0aGUgdHJhZGUtb2ZmIFwKKyAgICAgICAgICAgICAgIGJldHdlZW4gZmlsZSBzaXplIGFuZCBpbWFnZSBxdWFsaXR5LiBXZWJQIHR5cGljYWxseSBhY2hpZXZlcyBcCisgICAgICAgICAgICAgICBhbiBhdmVyYWdlIG9mIDMwJSBtb3JlIGNvbXByZXNzaW9uIHRoYW4gSlBFRyBhbmQgSlBFRyAyMDAwLCBcCisgICAgICAgICAgICAgICB3aXRob3V0IGxvc3Mgb2YgaW1hZ2UgcXVhbGl0eS4iCitIT01FUEFHRSA9ICJodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9zcGVlZC93ZWJwLyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02ZThkZWU5MzJjMjZmMmRhYjUwM2FiZjcwYzk2ZDhiYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9QQVRFTlRTO21kNT1hZDI1ODBhZWUzNTQ2ODY3NWM0NGQ3YmViYmE2NWNhOCIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLndlYm1wcm9qZWN0Lm9yZy9yZWxlYXNlcy93ZWJwLyR7QlB9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIwODgxMzUyNWVlZWZmZTdlMzA1YjRjYmZhZGU4YWU5YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlZmJlMGQ1OGZkYTkzNmYyZWQ5OWQwYjgzN2VkNzA4N2QwNjRkNjgzODkzMWYyODJjNDYxOGQyYTNmNzM5MGM0IgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAtLWRpc2FibGUtZXhwZXJpbWVudGFsIFwKKyAgICAtLWRpc2FibGUtd2ljIFwKKyAgICAtLWVuYWJsZS1saWJ3ZWJwbXV4IFwKKyAgICAtLWVuYWJsZS1saWJ3ZWJwZGVtdXggXAorICAgIC0tZW5hYmxlLXRocmVhZGluZyBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCisKKyMgbGlid2VicGRlY29kZXIgaXMgYSBzdWJzZXQgb2YgbGlid2VicCwgZG9uJ3QgYnVpbGQgaXQgdW5sZXNzIHJlcXVlc3RlZAorUEFDS0FHRUNPTkZJR1tkZWNvZGVyXSA9ICItLWVuYWJsZS1saWJ3ZWJwZGVjb2RlciwtLWRpc2FibGUtbGlid2VicGRlY29kZXIiCisKKyMgQXBwbHkgZm9yIGV4YW1wbGVzIHByb2dyYW1zOiBjd2VicCBhbmQgZHdlYnAKK1BBQ0tBR0VDT05GSUdbZ2lmXSA9ICItLWVuYWJsZS1naWYsLS1kaXNhYmxlLWdpZixnaWZsaWIiCitQQUNLQUdFQ09ORklHW2pwZWddID0gIi0tZW5hYmxlLWpwZWcsLS1kaXNhYmxlLWpwZWcsanBlZyIKK1BBQ0tBR0VDT05GSUdbcG5nXSA9ICItLWVuYWJsZS1wbmcsLS1kaXNhYmxlLXBuZywsbGlicG5nIgorUEFDS0FHRUNPTkZJR1t0aWZmXSA9ICItLWVuYWJsZS10aWZmLC0tZGlzYWJsZS10aWZmLHRpZmYiCisKKyMgQXBwbHkgb25seSBmb3IgZXhhbXBsZSBwcm9ncmFtIHZ3ZWJwCitQQUNLQUdFQ09ORklHW2dsXSA9ICItLWVuYWJsZS1nbCwtLWRpc2FibGUtZ2wsbWVzYS1nbHV0IgorCitQQUNLQUdFUyA9KyAiJHtQTn0tZ2lmMndlYnAiCisKK0RFU0NSSVBUSU9OXyR7UE59LWdpZjJ3ZWJwID0gIlNpbXBsZSB0b29sIHRvIGNvbnZlcnQgYW5pbWF0ZWQgR0lGcyB0byBXZWJQIgorRklMRVNfJHtQTn0tZ2lmMndlYnAgPSAiJHtiaW5kaXJ9L2dpZjJ3ZWJwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS94MjY0L3gyNjQvZG9uLXQtZGVmYXVsdC10by1jb3J0ZXgtYTktd2l0aC1uZW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS94MjY0L3gyNjQvZG9uLXQtZGVmYXVsdC10by1jb3J0ZXgtYTktd2l0aC1uZW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNzJmY2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3gyNjQveDI2NC9kb24tdC1kZWZhdWx0LXRvLWNvcnRleC1hOS13aXRoLW5lb24ucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorLW1hcmNoIGZsYWcgaXMgbm90IGluIENGTEFHUyBzbyB0aGlzIHdpbGwgYWx3YXlzIGRlZmF1bHQgdG8gLW1jcHU9Y29ydGV4LWE4CistbWZwdT1uZW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggMjkxNjAzNi4uZjRlY2U0MCAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzczLDkgKzc3Myw2IEBAIGlmIFsgJGFzbSA9IGF1dG8gLWEgXCggJEFSQ0ggPSBYODYgLW8gJEFSQ0ggPSBYODZfNjQgXCkgXSA7IHRoZW4KKyBmaQorIAorIGlmIFsgJGFzbSA9IGF1dG8gLWEgJEFSQ0ggPSBBUk0gXSA7IHRoZW4KKy0gICAgIyBzZXQgZmxhZ3Mgc28gbmVvbiBpcyBidWlsdCBieSBkZWZhdWx0CistICAgIGVjaG8gJENGTEFHUyB8IGdyZXAgLUVxICcoLW1jcHV8LW1hcmNofC1tZnB1KScgfHwgQ0ZMQUdTPSIkQ0ZMQUdTIC1tY3B1PWNvcnRleC1hOCAtbWZwdT1uZW9uIgorLQorICAgICBpZiAgY2NfY2hlY2sgJycgJycgJ19fYXNtX18oInJldiBpcCwgaXAiKTsnIDsgdGhlbiAgICAgIGRlZmluZSBIQVZFX0FSTVY2CisgICAgICAgICBjY19jaGVjayAnJyAnJyAnX19hc21fXygibW92dCByMCwgIzAiKTsnICAgICAgICAgJiYgZGVmaW5lIEhBVkVfQVJNVjZUMgorICAgICAgICAgY2NfY2hlY2sgJycgJycgJ19fYXNtX18oInZhZGQuaTE2IHEwLCBxMCwgcTAiKTsnICYmIGRlZmluZSBIQVZFX05FT04KK0BAIC03ODgsOCArNzg1LDYgQEAgaWYgWyAkYXNtID0gYXV0byAtYSAkQVJDSCA9IEFSTSBdIDsgdGhlbgorIGZpCisgCisgaWYgWyAkYXNtID0gYXV0byAtYSAkQVJDSCA9IEFBUkNINjQgXSA7IHRoZW4KKy0gICAgIyBzZXQgZmxhZ3Mgc28gbmVvbiBpcyBidWlsdCBieSBkZWZhdWx0CistICAgIGVjaG8gJENGTEFHUyB8IGdyZXAgLUVxICcoLW1jcHV8LW1hcmNofC1tZnB1fC1hcmNoKScgfHwgQ0ZMQUdTPSIkQ0ZMQUdTIC1hcmNoIGFybTY0IC1tZnB1PW5lb24iCisgCisgICAgIGlmICBjY19jaGVjayAnJyAnJyAnX19hc21fXygiY21lcSB2MC44aCwgdjAuOGgsICMwIik7JyA7IHRoZW4gZGVmaW5lIEhBVkVfTkVPTgorICAgICAgICAgQVNGTEFHUz0iJEFTRkxBR1MgLWMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3gyNjQveDI2NF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3gyNjQveDI2NF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE2OTkwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEveDI2NC94MjY0X2dpdC5iYgpAQCAtMCwwICsxLDU1IEBACitTVU1NQVJZID0gIkguMjY0L01QRUctNCBBVkMgdmlkZW8gZW5jb2RlciIKK0RFU0NSSVBUSU9OID0gIkEgZnJlZSBzb2Z0d2FyZSBsaWJyYXJ5IGFuZCBhcHBsaWNhdGlvbiBmb3IgZW5jb2RpbmcgdmlkZW8gc3RyZWFtcyBpbnRvIHRoZSBILjI2NC9NUEVHLTQgQVZDIGZvcm1hdC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnZpZGVvbGFuLm9yZy9kZXZlbG9wZXJzL3gyNjQuaHRtbCIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitERVBFTkRTID0gInlhc20tbmF0aXZlIgorCitTUkNfVVJJID0gImdpdDovL2dpdC52aWRlb2xhbi5vcmcveDI2NC5naXQgXAorICAgICAgICAgICBmaWxlOi8vZG9uLXQtZGVmYXVsdC10by1jb3J0ZXgtYTktd2l0aC1uZW9uLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNSRVYgPSAiYzhhNzczZWJmY2ExNDhlZjA0ZjVhNjBkNDJjYmQ3MzM2YWYwYmFmNiIKKworUFYgPSAicjI0OTErZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgbGliX3BhY2thZ2UgcGtnY29uZmlnIHBlcmxuYXRpdmUKKworWDI2NF9ESVNBQkxFX0FTTSA9ICIiCitYMjY0X0RJU0FCTEVfQVNNX2FybXY0ID0gIi0tZGlzYWJsZS1hc20iCitYMjY0X0RJU0FCTEVfQVNNX2FybXY1ID0gIi0tZGlzYWJsZS1hc20iCitYMjY0X0RJU0FCTEVfQVNNX3Bvd2VycGMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAic3BlIiwgIi0tZGlzYWJsZS1hc20iLCAiIiwgZCl9IgorCitFWFRSQV9PRUNPTkYgPSAnLS1wcmVmaXg9JHtwcmVmaXh9IFwKKyAgICAgICAgICAgICAgICAtLWhvc3Q9JHtIT1NUX1NZU30gXAorICAgICAgICAgICAgICAgIC0tbGliZGlyPSR7bGliZGlyfSBcCisgICAgICAgICAgICAgICAgLS1jcm9zcy1wcmVmaXg9JHtUQVJHRVRfUFJFRklYfSBcCisgICAgICAgICAgICAgICAgLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1zdGF0aWMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1sYXZmIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtc3dzY2FsZSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtcGljIFwKKyAgICAgICAgICAgICAgICAke1gyNjRfRElTQUJMRV9BU019IFwKKyAgICAgICAgICAgICAgICcKKworZG9fY29uZmlndXJlKCkgeworICAgIC4vY29uZmlndXJlICR7RVhUUkFfT0VDT05GfQorfQorCisjIEdldCByaWQgb2YgLWUKK0VYVFJBX09FTUFLRSA9ICIiCitBUyA9ICIke1RBUkdFVF9QUkVGSVh9Z2NjIgorCitkb19pbnN0YWxsKCkgeworICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0KK30KKworIyBQSUMgY2FuJ3QgYmUgZW5hYmxlZCBmb3IgMzItYml0IHg4NgorSU5TQU5FX1NLSVBfJHtQTn1fYXBwZW5kX3g4NiA9ICIgdGV4dHJlbCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvaW1hZ2VzL3F0NGUtZGVtby1pbWFnZS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L2ltYWdlcy9xdDRlLWRlbW8taW1hZ2UuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ1MTg0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L2ltYWdlcy9xdDRlLWRlbW8taW1hZ2UuYmIKQEAgLTAsMCArMSwxNCBAQAorREVTQ1JJUFRJT04gPSAiQW4gaW1hZ2UgdGhhdCB3aWxsIGxhdW5jaCBpbnRvIHRoZSBkZW1vIGFwcGxpY2F0aW9uIGZvciB0aGUgZW1iZWRkZWQgKG5vdCBiYXNlZCBvbiBYMTEpIHZlcnNpb24gb2YgUXQuIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyMyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK0lNQUdFX0lOU1RBTEwgKz0gIlwKKwkke0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMfSBcCisJcGFja2FnZWdyb3VwLWNvcmUtcXQ0ZSBcCisiCisKK2luaGVyaXQgY29yZS1pbWFnZQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvbWV0YS9tZXRhLXRvb2xjaGFpbi1xdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTAxMDNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvbWV0YS9tZXRhLXRvb2xjaGFpbi1xdC5iYgpAQCAtMCwwICsxLDUgQEAKKyMgUXQgdG9vbGNoYWluCitRVE5BTUUgPSAicXQiCitRVF9ESVJfTkFNRSA9ICJxdDQiCisKK3JlcXVpcmUgbWV0YS10b29sY2hhaW4tcXQuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L21ldGEvbWV0YS10b29sY2hhaW4tcXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNzVkOTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0LmluYwpAQCAtMCwwICsxLDM1IEBACitUT09MQ0hBSU5fSE9TVF9UQVNLID0gIm5hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtJHtRVE5BTUV9LXRvb2xjaGFpbi1ob3N0IHBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi0ke01BQ0hJTkV9IgorVE9PTENIQUlOX1RBUkdFVF9UQVNLID0gInBhY2thZ2Vncm91cC0ke1FUTkFNRX0tdG9vbGNoYWluLXRhcmdldCIKK1RPT0xDSEFJTl9PVVRQVVROQU1FID0gIiR7U0RLX05BTUV9LXRvb2xjaGFpbi0ke1FUTkFNRX0tJHtESVNUUk9fVkVSU0lPTn0iCisKK3JlcXVpcmUgcmVjaXBlcy1jb3JlL21ldGEvbWV0YS10b29sY2hhaW4uYmIKKworUVRfVE9PTFNfUFJFRklYID0gIiRPRUNPUkVfTkFUSVZFX1NZU1JPT1Qke2JpbmRpcl9uYXRpdmVzZGt9IgorCitjcmVhdGVfc2RrX2ZpbGVzX2FwcGVuZCgpIHsKKyAgICBta2RpciAtcCAke1NES19PVVRQVVR9JHtTREtQQVRITkFUSVZFfS9lbnZpcm9ubWVudC1zZXR1cC5kLworICAgIHNjcmlwdD0ke1NES19PVVRQVVR9JHtTREtQQVRITkFUSVZFfS9lbnZpcm9ubWVudC1zZXR1cC5kLyR7UVRfRElSX05BTUV9LnNoCisKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfQ0ZMQUdTPSIkQ0ZMQUdTIicgPiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX0NYWEZMQUdTPSIkQ1hYRkxBR1MiJyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX0xERkxBR1M9IiRMREZMQUdTIicgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9DQz0kQ0MnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfQ1hYPSRDWFgnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfTElOSz0kQ1hYJyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX0FSPSRBUicgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9MSUJESVJfUVQ9JE9FQ09SRV9UQVJHRVRfU1lTUk9PVCR7bGliZGlyfScgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9JTkNESVJfUVQ9JE9FQ09SRV9UQVJHRVRfU1lTUk9PVCR7aW5jbHVkZWRpcn0vJHtRVF9ESVJfTkFNRX0nID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfTU9DPSR7UVRfVE9PTFNfUFJFRklYfS9tb2M0JyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX1VJQz0ke1FUX1RPT0xTX1BSRUZJWH0vdWljNCcgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9VSUMzPSR7UVRfVE9PTFNfUFJFRklYfS91aWMzNCcgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9SQ0M9JHtRVF9UT09MU19QUkVGSVh9L3JjYzQnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfUURCVVNDUFAyWE1MPSR7UVRfVE9PTFNfUFJFRklYfS9xZGJ1c2NwcDJ4bWw0JyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX1FEQlVTWE1MMkNQUD0ke1FUX1RPT0xTX1BSRUZJWH0vcWRidXN4bWwyY3BwNCcgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9RVF9DT05GSUc9JE9FQ09SRV9UQVJHRVRfU1lTUk9PVCR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vbWtzcGVjcy9xY29uZmlnLnByaScgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBRTUFLRVNQRUM9JE9FQ09SRV9UQVJHRVRfU1lTUk9PVCR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vbWtzcGVjcy9saW51eC1nKysnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgUVRfQ09ORl9QQVRIPSRPRUNPUkVfTkFUSVZFX1NZU1JPT1Qke3N5c2NvbmZkaXJ9L3F0LmNvbmYnID4+ICRzY3JpcHQKKworICAgICMgbWFrZSBhIHN5bWJvbGljIGxpbmsgdG8gbWtzcGVjcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFF0IFNESworICAgICMgYW5kIFF0IENyZWF0b3IKKyAgICAoY2QgJHtTREtfT1VUUFVUfS8ke1NES1BBVEhOQVRJVkV9JHtiaW5kaXJfbmF0aXZlc2RrfS8uLjsgbG4gLXMgJHtTREtUQVJHRVRTWVNST09UfS91c3Ivc2hhcmUvJHtRVF9ESVJfTkFNRX0vbWtzcGVjcyBta3NwZWNzOykKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L21ldGEvbWV0YS10b29sY2hhaW4tcXRlLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvbWV0YS9tZXRhLXRvb2xjaGFpbi1xdGUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTExM2Y0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L21ldGEvbWV0YS10b29sY2hhaW4tcXRlLmJiCkBAIC0wLDAgKzEsNiBAQAorIyBRdCBFbWJlZGRlZCB0b29sY2hhaW4KK1BSID0gInI2IgorUVROQU1FID0gInF0ZSIKK1FUX0RJUl9OQU1FID0gInF0b3BpYSIKKworcmVxdWlyZSBtZXRhLXRvb2xjaGFpbi1xdC5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4taG9zdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4taG9zdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTVjYzVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi1ob3N0LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSBuYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi1ob3N0LmluYworCitTVU1NQVJZID0gIkhvc3QgcGFja2FnZXMgZm9yIFF0IFNESyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4taG9zdC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYzI3NWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QuaW5jCkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZSByZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXNkay1ob3N0LmJiCisKK0RFU0NSSVBUSU9OID0gIkhvc3QgcGFja2FnZXMgZm9yIFF0IEVtYmVkZGVkIFNESyIKK0xJQ0VOU0UgPSAiTUlUIgorCitSREVQRU5EU18ke1BOfSArPSAibmF0aXZlc2RrLXF0NC10b29scyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLWhvc3QuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXRlLXRvb2xjaGFpbi1ob3N0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NmU0YjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXRlLXRvb2xjaGFpbi1ob3N0LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSBuYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi1ob3N0LmluYworCitTVU1NQVJZID0gIkhvc3QgcGFja2FnZXMgZm9yIFF0IEVtYmVkZGVkIFNESyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtcXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXF0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MWY4YTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXF0LmJiCkBAIC0wLDAgKzEsMjIgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwICBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZAorIworCitTVU1NQVJZID0gIlF0IHBhY2thZ2UgZ3JvdXBzIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyNCIKKworIyBRdDQgY291bGQgTk9UIGJlIGJ1aWx0IG9uIE1JUFM2NCB3aXRoIDY0IGJpdHMgdXNlcnNwYWNlCitDT01QQVRJQkxFX0hPU1RfbWlwczY0ID0gIm51bGwiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBxdWlja3kgYW5kIGZvdG93YWxsIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1BBQ0tBR0VTID0gIiR7UE59LWRlbW9hcHBzIgorCitRVERFTU9TID89ICJxdWlja3kgJHtDT01NRVJDSUFMX1FUfSBmb3Rvd2FsbCIKKworU1VNTUFSWV8ke1BOfS1kZW1vYXBwcyA9ICJRdCBkZW1vIGFwcGxpY2F0aW9ucyIKK1JERVBFTkRTXyR7UE59LWRlbW9hcHBzID0gIiR7UVRERU1PU30iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXF0NGUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXF0NGUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI1ZmExZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtcXQ0ZS5iYgpAQCAtMCwwICsxLDUyIEBACitTVU1NQVJZID0gIlF0IGZvciBFbWJlZGRlZCBMaW51eCAoUXQgd2l0aG91dCBYMTEpIgorUFIgPSAicjIiCitMSUNFTlNFID0gIk1JVCIKKworIyBRdDQgY291bGQgTk9UIGJlIGJ1aWx0IG9uIE1JUFM2NCB3aXRoIDY0IGJpdHMgdXNlcnNwYWNlCitDT01QQVRJQkxFX0hPU1RfbWlwczY0ID0gIm51bGwiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1RPVUNIID0gJyAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJ0b3VjaHNjcmVlbiIsICJ0c2xpYiB0c2xpYi1jYWxpYnJhdGUgdHNsaWItdGVzdHMiLCAiIixkKX0nCisKK1JERVBFTkRTXyR7UE59ID0gIiBcCisJcXQ0LWVtYmVkZGVkIFwKKwlsaWJxdC1lbWJlZGRlZDNzdXBwb3J0NCBcCisJbGlicXQtZW1iZWRkZWRjbHVjZW5lNCBcCisJbGlicXQtZW1iZWRkZWRjb3JlNCBcCisJbGlicXQtZW1iZWRkZWRkYnVzNCBcCisJbGlicXQtZW1iZWRkZWRndWk0IFwKKwlsaWJxdC1lbWJlZGRlZGhlbHA0IFwKKwlsaWJxdC1lbWJlZGRlZG11bHRpbWVkaWE0IFwKKwlsaWJxdC1lbWJlZGRlZG5ldHdvcms0IFwKKwlsaWJxdC1lbWJlZGRlZHNjcmlwdDQgXAorCWxpYnF0LWVtYmVkZGVkc2NyaXB0dG9vbHM0IFwKKwlsaWJxdC1lbWJlZGRlZHNxbDQgXAorCWxpYnF0LWVtYmVkZGVkc3ZnNCBcCisJbGlicXQtZW1iZWRkZWR0ZXN0NCBcCisJbGlicXQtZW1iZWRkZWR3ZWJraXQ0IFwKKwlsaWJxdC1lbWJlZGRlZHhtbDQgXAorCXF0NC1lbWJlZGRlZC1mb250cy10dGYtZGVqYXZ1IFwKKwlxdDQtZW1iZWRkZWQtZm9udHMtdHRmLXZlcmEgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4taWNvbmVuZ2luZS1zdmdpY29uIFwKKwlxdDQtZW1iZWRkZWQtcGx1Z2luLWltYWdlZm9ybWF0LWdpZiBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1pbWFnZWZvcm1hdC1pY28gXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4taW1hZ2Vmb3JtYXQtanBlZyBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1pbWFnZWZvcm1hdC1tbmcgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4taW1hZ2Vmb3JtYXQtc3ZnIFwKKwlxdDQtZW1iZWRkZWQtcGx1Z2luLWltYWdlZm9ybWF0LXRpZmYgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4tbW91c2Vkcml2ZXItdHNsaWIgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4tc2NyaXB0LWRidXMgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4tc3FsZHJpdmVyLXNxbGl0ZSBcCisJJHtUT1VDSH0gXAorICAgICAgICBxdDQtZW1iZWRkZWQtZGVtb3MgXAorICAgICAgICBxdDQtZW1iZWRkZWQtZXhhbXBsZXMgXAorICAgICAgICBxdC1kZW1vLWluaXQgXAorICAgICAgICBxdDQtZW1iZWRkZWQtYXNzaXN0YW50IFwKKyIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiIFwKKwlsaWJxdC1lbWJlZGRlZHhtbHBhdHRlcm5zNCBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1waG9ub24tYmFja2VuZC1nc3RyZWFtZXIgXAorIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLXRhcmdldC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzJjMTUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLXRhcmdldC5iYgpAQCAtMCwwICsxLDE1IEBACitTVU1NQVJZID0gIlRhcmdldCBwYWNrYWdlcyBmb3IgUXQgU0RLIgorCitRVExJQlBSRUZJWCA9ICIiCisKK3JlcXVpcmUgcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi10YXJnZXQuaW5jCisKK2luaGVyaXQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gcXQ0LXgxMS1mcmVlCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitSREVQRU5EU18ke1BOfSArPSAiIFwKKyAgICAgICAgcXQ0LXgxMS1mcmVlLWRldiBcCisgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ2xpYnF0b3BlbmdsNC1kZXYnLCAnJywgZCl9IFwKKyAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVudmcnLCAnbGlicXRvcGVudmc0LWRldicsICcnLCBkKX0gXAorICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi10YXJnZXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOTc4MmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmluYwpAQCAtMCwwICsxLDM5IEBACitMSUNFTlNFID0gIk1JVCIKKworIyBRdDQgY291bGQgTk9UIGJlIGJ1aWx0IG9uIE1JUFM2NCB3aXRoIDY0IGJpdHMgdXNlcnNwYWNlCitDT01QQVRJQkxFX0hPU1RfbWlwczY0ID0gIm51bGwiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1BBQ0tBR0VHUk9VUF9ESVNBQkxFX0NPTVBMRU1FTlRBUlkgPSAiMSIKKworUkRFUEVORFNfJHtQTn0gKz0gIiBcCisgICAgICAgIHBhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldCBcCisgICAgICAgIHF0NCR7UVRMSUJQUkVGSVh9LW1rc3BlY3MgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9bXVsdGltZWRpYTQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfTNzdXBwb3J0NC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9Y2x1Y2VuZTQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfWNvcmU0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1kYnVzNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9ZGVzaWduZXJjb21wb25lbnRzNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9ZGVzaWduZXI0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH11aXRvb2xzNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9Z3VpNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9aGVscDQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfW5ldHdvcms0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1zY3JpcHQ0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1zY3JpcHR0b29sczQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXNxbDQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXN2ZzQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXRlc3Q0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH13ZWJraXQ0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH14bWw0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1kZWNsYXJhdGl2ZTQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXhtbHBhdHRlcm5zNC1kZXYgXAorICAgICAgICBsaWJzcWxpdGUzLWRldiBcCisgICAgICAgIGV4cGF0LWRldiBcCisgICAgICAgICIKKworUlJFQ09NTUVORFNfJHtQTn0gKz0gIiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1waG9ub240LWRldiBcCisgICAgICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4tdGFyZ2V0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtcXRlLXRvb2xjaGFpbi10YXJnZXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJlZDIzNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4tdGFyZ2V0LmJiCkBAIC0wLDAgKzEsNyBAQAorU1VNTUFSWSA9ICJUYXJnZXQgcGFja2FnZXMgZm9yIFF0IEVtYmVkZGVkIFNESyIKKworUFIgPSAicjciCisKK1FUTElCUFJFRklYID0gIi1lbWJlZGRlZCIKKworcmVxdWlyZSBwYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLXRhcmdldC5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvZm90b3dhbGwvRXhwb3J0V2l6YXJkLWRlcGVuZHMtb24tdWlfd2l6YXJkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9mb3Rvd2FsbC9FeHBvcnRXaXphcmQtZGVwZW5kcy1vbi11aV93aXphcmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhiMmIyMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvZm90b3dhbGwvRXhwb3J0V2l6YXJkLWRlcGVuZHMtb24tdWlfd2l6YXJkLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK0FwcC9FeHBvcnRXaXphcmQuY3BwIGRlcGVuZHMgb24gd2l6YXJkLmggd2hpY2ggZGVwZW5kcyBvbiB1aV93aXphcmQuIFRoZSBsYXN0IG9uZQorc2hvdWxkIGJlIGFscmVhZHkgZ2VuZXJhdGVkIGJlZm9yZSBjb21waWxpbmcgRXhwb3J0V2l6YXJkLmNwcC4KKworU2lnbmVkLW9mZi1ieTogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBGb3Rvd2FsbC0wLjkvQXBwL0V4cG9ydFdpemFyZC5jcHAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBGb3Rvd2FsbC0wLjkub3JpZy9BcHAvRXhwb3J0V2l6YXJkLmNwcAkyMDA5LTExLTMwIDEzOjIxOjMxLjAwMDAwMDAwMCArMDIwMAorKysrIEZvdG93YWxsLTAuOS9BcHAvRXhwb3J0V2l6YXJkLmNwcAkyMDEyLTA1LTEwIDE3OjEyOjA2Ljc2NTIzMDgzMCArMDMwMAorQEAgLTIzLDYgKzIzLDcgQEAKKyAjaW5jbHVkZSAiaW1hZ2Vsb2FkZXJxdC5oIgorICNpbmNsdWRlICJwb3N0ZXJhem9yY29yZS5oIgorICNpbmNsdWRlICJ3aXphcmQuaCIKKysjaW5jbHVkZSAidWlfd2l6YXJkLmgiCisgCisgI2luY2x1ZGUgPFFEZXNrdG9wU2VydmljZXM+CisgI2luY2x1ZGUgPFFEZXNrdG9wV2lkZ2V0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9mb3Rvd2FsbF8wLjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL2ZvdG93YWxsXzAuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWYwMjY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9mb3Rvd2FsbF8wLjkuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJDcmVhdGl2ZSBwaG90byBkaXNwbGF5IGFwcGxpY2F0aW9uIgorREVTQ1JJUFRJT04gPSAiRm90b3dhbGwgaXMgYSBjcmVhdGl2ZSB0b29sIHRoYXQgYWxsb3dzIHlvdSB0byBsYXlvdXQgeW91ciBwaG90b3Mgb3IgcGljdHVyZXMgXAoraW4gYSBwZXJzb25hbCB3YXkuIFlvdSBjYW4gYWRkIHBpY3R1cmVzLCB0aGVuIHJlc2l6ZSwgbW92ZSwgY2hhbmdlIGNvbG9ycywgdGV4dCwgc2hhZG93cywgZXRjLi4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZW5yaWNvcm9zLmNvbS9vcGVuc291cmNlL2ZvdG93YWxsIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9HUExfVjI7bWQ1PTc5ODA4Mzk3YzMzNTVmMTYzYzAxMjYxNjEyNWM5ZTI2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21haW4uY3BwO2JlZ2lubGluZT02O2VuZGxpbmU9MTE7bWQ1PWI1NjlhY2MyYmY4OTc0YTMwODJiNThmYzUzYjlkOGRjIgorU0VDVElPTiA9ICJ4MTEvYXBwcyIKKworUFIgPSAicjQiCisKK1NSQ1JFViA9ICIwNmQ1YTQxNDJjNTk5NjA0ZDlhOWZkNjQ3MjdiNjk0NWViOGNkM2RhIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2Vucmljb3Jvcy9mb3Rvd2FsbC5naXQgXAorICAgICAgICAgICBmaWxlOi8vRXhwb3J0V2l6YXJkLWRlcGVuZHMtb24tdWlfd2l6YXJkLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IHF0NHgxMQorCitFWFRSQV9RTUFLRVZBUlNfUFJFID0gIkNPTkZJRys9bm8td2ViY2FtIgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgSU5TVEFMTF9ST09UPSR7RH0gaW5zdGFsbAorfQorCisjIEVuc3VyZSB3ZSBoYXZlIHNvbWUgcGx1Z2lucyBmb3Igc29tZSB1c2VmdWwgaW1hZ2UgZm9ybWF0cworUlJFQ09NTUVORFNfJHtQTn0gKz0gInF0NC1wbHVnaW4taW1hZ2Vmb3JtYXQtZ2lmIHF0NC1wbHVnaW4taW1hZ2Vmb3JtYXQtanBlZyBxdDQtcGx1Z2luLWltYWdlZm9ybWF0LXRpZmYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3FtbXAvbm8taG9zdC1wYXRocy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvcW1tcC9uby1ob3N0LXBhdGhzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYjViYjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3FtbXAvbm8taG9zdC1wYXRocy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitEbyBub3QgaW5jbHVkZSAvdXNyL2luY2x1ZGUgaG9zdCBwYXRocworCitUaGVzZSB3ZXJlIGFkZGVkIHVwc3RyZWFtIGFwcGFyZW50bHkgZm9yIGZyZWVic2Qgc3VwcG9ydCwgYnV0IHRyaWdnZXIKK2NvbXBpbGVyIHdhcm5pbmdzIGR1cmluZyB0aGUgYnVpbGQgYW5kIGNvdWxkIGJlIGRhbmdlcm91cywgc28gcmVtb3ZlCit0aGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Nyb3NzXQorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworVXBkYXRlIHBhdGNoIGZvciB2ZXJzaW9uIDAuNy40LgorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworLS0tIHFtbXAtMC43LjQvQ01ha2VMaXN0cy50eHQJMjAxNC0wMS0xMCAwOTo1OTo0NC45NzE4Mzc3NDYgKzA4MDAKKysrKyBxbW1wLTAuNy40L0NNYWtlTGlzdHMudHh0Lm5ldwkyMDE0LTAxLTEwIDEwOjI0OjUxLjg1NTgzNzU2NiArMDgwMAorQEAgLTEsOSArMSw1IEBACisgY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuNi4wKQorIAorLSNmcmVlYnNkIHN1cHBvcnQKKy1pbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTSAvdXNyL2xvY2FsL2luY2x1ZGUpCistU0VUKENNQUtFX1JFUVVJUkVEX0lOQ0xVREVTICR7Q01BS0VfUkVRVUlSRURfSU5DTFVERVN9IC91c3IvbG9jYWwvaW5jbHVkZSkKKy0KKyAjZXh0cmFjdCB2ZXJzaW9uIGZyb20gcW1tcC5oCisgRklMRShTVFJJTkdTICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc3JjL3FtbXAvcW1tcC5oIgorICAgICAgUU1NUF9WRVJTSU9OX0RBVEEgUkVHRVggIl4jZGVmaW5lWyBcdF0rUU1NUF9WRVJTSU9OX1tBLVpdK1sgXHRdK1swLTldKy4qJCIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3FtbXBfMC44LjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3FtbXBfMC44LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY4YWQwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvcW1tcF8wLjguNi5iYgpAQCAtMCwwICsxLDc2IEBACitTVU1NQVJZID0gIlF0LWJhc2VkIE11bHRpbWVkaWEgUGxheWVyIgorREVTQ1JJUFRJT04gPSAiUW1tcCBpcyBhbiBhdWRpbyBwbGF5ZXIsIHdyaXR0ZW4gd2l0aCB0aGUgaGVscCBvZiB0aGUgUXQgbGlicmFyeS4gVGhlIHVzZXIgaW50ZXJmYWNlIGlzIHNpbWlsYXIgdG8gV2luYW1wIG9yIFhNTVMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3FtbXAueWxzb2Z0d2FyZS5jb20iCitMSUNFTlNFID0gIkdQTHYyIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCisKK0RFUEVORFMgPSAidGFnbGliIGxpYm1hZCBsaWJ2b3JiaXMgbGlib2dnIGFsc2EtbGliIGxpYnNuZGZpbGUxIGxpYnNhbXBsZXJhdGUwIGN1cmwiCisKK1NSQ19VUkkgPSAiaHR0cDovL3FtbXAueWxzb2Z0d2FyZS5jb20vZmlsZXMvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9uby1ob3N0LXBhdGhzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2N2U5NmU4OWM2MWI3NDMyZTVhMTJmNTU1ZGI3MDJiMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZGFlYTNmMGEwZGY3YjM0MDg5NTEzYzJjNTc0MTNjODI4MTZhYjg4OTJiZGRhYmY0OWMxOGE3OTU2MjU1NDQ5IgoraW5oZXJpdCBjbWFrZSBxdDR4MTEKKworUU1NUF9QTFVHSU5fT1BUSU9OUyA/Pz0gIlwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX01NUzpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX01QQzpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX01PRFBMVUc6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9XQVZQQUNLOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfRkZNUEVHOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfQUFDOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfQ0RBOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfTUlESTpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX0dNRTpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX09TUzQ6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9KQUNLOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfQlMyQjpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX1BST0pFQ1RNOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfRU5DQTpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICIKKworZXhwb3J0IEVYVFJBX09FQ01BS0UgPSAiLURRVF9RTUFLRV9FWEVDVVRBQkxFPSR7T0VfUU1BS0VfUU1BS0V9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EUVRfTFJFTEVBU0VfRVhFQ1VUQUJMRT0ke09FX1FNQUtFX0xSRUxFQVNFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX01PQ19FWEVDVVRBQkxFPSR7T0VfUU1BS0VfTU9DfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX1VJQ19FWEVDVVRBQkxFPSR7T0VfUU1BS0VfVUlDfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX1JDQ19FWEVDVVRBQkxFPSR7T0VfUU1BS0VfUkNDfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX0xJQlJBUllfRElSPSR7T0VfUU1BS0VfTElCRElSX1FUfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX0hFQURFUlNfRElSPSR7T0VfUU1BS0VfSU5DRElSX1FUfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX1FUQ09SRV9JTkNMVURFX0RJUj0ke09FX1FNQUtFX0lOQ0RJUl9RVH0vUXRDb3JlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7UU1NUF9QTFVHSU5fT1BUSU9OU30gXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorCitkb19jb25maWd1cmUoKSB7CisJIyBFbnN1cmUgd2UgZ2V0IHRoZSBjbWFrZSBjb25maWd1cmUgYW5kIG5vdCBxbWFrZQorCWNtYWtlX2RvX2NvbmZpZ3VyZQorfQorCitQQUNLQUdFU19EWU5BTUlDICs9ICJecW1tcC1wbHVnaW4tLiogIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgcW1tcF9saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L3FtbXAnKQorICAgIGdkID0gZC5leHBhbmQoJyR7RH0vJHtsaWJkaXJ9L3FtbXAnKQorICAgIHBsdWdfZGlycyA9IG9zLmxpc3RkaXIoZ2QpCisKKyAgICBmb3IgcGx1Z19kaXIgaW4gcGx1Z19kaXJzOgorICAgICAgICBnX3BsdWdfZGlyID0gb3MucGF0aC5qb2luKHFtbXBfbGliZGlyLHBsdWdfZGlyKQorICAgICAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBnX3BsdWdfZGlyLCAnXmxpYiguKilcLnNvJCcsICdxbW1wLXBsdWdpbi0nICsgcGx1Z19kaXIubG93ZXIoKSArICctJXMnLCAnUW1tcCAnICsgcGx1Z19kaXIgICsgJyBwbHVnaW4gZm9yICVzJykKK30KKworRklMRVNfJHtQTn0gPSAiXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS9xbW1wIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliKiR7U09MSUJTfSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9pY29ucy8qIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3FtbXAvaW1hZ2VzLyogXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyogXAorICAgICAgICAgICAgICAgICIKKworRklMRVNfJHtQTn0tZGJnICs9ICJcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3FtbXAvKi8uZGVidWcvKiBcCisgICAgICAgICAgICAgICAiCisKK1JERVBFTkRTXyR7UE59ICs9ICJ0YWdsaWIgYWxzYS1saWIgbGlibWFkIGN1cmwgbGliaWN1aTE4biIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvcXVpY2t5XzAuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvcXVpY2t5XzAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2FhNTYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9xdWlja3lfMC40LmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiQSBzaW1wbGUgbm90ZS10YWtpbmcgYXBwbGljYXRpb24gd2l0aCBXaWtpLXN0eWxlIHN5bnRheCBhbmQgYmVoYXZpb3VyIgorSE9NRVBBR0UgPSAiaHR0cDovL3F0LWFwcHMub3JnL2NvbnRlbnQvc2hvdy5waHAvUXVpY2t5P2NvbnRlbnQ9ODAzMjUiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3ZlcnNpb24uaDtlbmRsaW5lPTE5O21kNT04NzhiZGFmZjQzOGRhYjg2Mjk4MzAxZmQxYTIxMGUxNCIKK1NFQ1RJT04gPSAieDExL2FwcHMiCisKK1BSID0gInIyIgorCitTUkNfVVJJID0gImh0dHA6Ly9xdC1hcHBzLm9yZy9DT05URU5UL2NvbnRlbnQtZmlsZXMvODAzMjUtcXVpY2t5LTAuNC50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4MjRkOWU0NzdlZTljNDk5NGY3M2EzY2IyMTUxNjFkOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5YzY2Mzc2ZTAwMzVkNDQ1NDc2MTJiZjYyOTg5MDc2OWE2MTc4YzNlN2VhZmJjZjk1ZjFjNjIwN2FjMGYzNTJhIgorCitpbmhlcml0IHF0NHgxMQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1N9LyR7QlBOfSAke0R9JHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1kZW1vL3F0LWRlbW8taW5pdC9xdGRlbW8taW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWRlbW8vcXQtZGVtby1pbml0L3F0ZGVtby1pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZjAyNzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1kZW1vL3F0LWRlbW8taW5pdC9xdGRlbW8taW5pdApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKworc2V0IC1lCisKK2lmIFsgLXggL3Vzci9iaW4vcXRkZW1vIF07IHRoZW4KKwlRVERFTU89InF0ZGVtbyIKK2Vsc2UKKwlRVERFTU89InF0ZGVtb0UgLXF3cyIKK2ZpCisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwllY2hvICJTdGFydGluZyBxdGRlbW8iCisJaWYgWyAtZiAvZXRjL3Byb2ZpbGUuZC90c2xpYi5zaCBdOyB0aGVuCisJCS4gL2V0Yy9wcm9maWxlLmQvdHNsaWIuc2gKKwlmaQorCWlmIFsgLWUgIiRUU0xJQl9UU0RFVklDRSIgXTsgdGhlbgorCQlpZiBbICEgLWYgL2V0Yy9wb2ludGVyY2FsIF07IHRoZW4KKwkJCS91c3IvYmluL3RzX2NhbGlicmF0ZQorCQlmaQorCQlpZiBbICIkUVRERU1PIiA9ICJxdGRlbW8iIF07IHRoZW4KKwkJCVhvcmcgJgorCQkJZXhwb3J0IERJU1BMQVk9OjAKKwkJCSRRVERFTU8gJgorCQllbHNlCisJCQlRV1NfTU9VU0VfUFJPVE89dHNsaWI6JFRTTElCX1RTREVWSUNFICRRVERFTU8gJgorCQlmaQorCWVsc2UKKwkJaWYgWyAiJFFUREVNTyIgPSAicXRkZW1vIiBdOyB0aGVuCisJCQlYb3JnICYKKwkJCWV4cG9ydCBESVNQTEFZPTowCisJCWZpCisJCSRRVERFTU8gJgorCWZpCisJOzsKKyAgc3RvcCkKKwllY2hvICJTdG9wcGluZyBxdGRlbW8iCisJaWYgWyAiJFFUREVNTyIgPSAicXRkZW1vIiBdOyB0aGVuCisJCWtpbGxhbGwgWG9yZworCQlraWxsYWxsIHF0ZGVtbworCWVsc2UKKwkJa2lsbGFsbCBxdGRlbW9FCisJZmkKKwk7OworICByZXN0YXJ0KQorCSQwIHN0b3AKKwkkMCBzdGFydAorCTs7CisgICopCisJZWNobyAidXNhZ2U6ICQwIHsgc3RhcnQgfCBzdG9wIHwgcmVzdGFydCB9IiA+JjIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWRlbW8vcXQtZGVtby1pbml0XzAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWRlbW8vcXQtZGVtby1pbml0XzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTFiMGI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQtZGVtby9xdC1kZW1vLWluaXRfMC4xLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiSW5pdCBzY3JpcHQgZm9yIHF0ZGVtbyIKK0xJQ0VOU0UgPSAiTUlUIgorU1JDX1VSSSA9ICJmaWxlOi8vcXRkZW1vLWluaXQiCitQUiA9ICJyMyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9xdGRlbW8taW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvcXRkZW1vCit9CisKK2luaGVyaXQgdXBkYXRlLXJjLmQgYWxsYXJjaAorCitJTklUU0NSSVBUX05BTUUgPSAicXRkZW1vIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTkgNSAyIC4gc3RvcCAxOSAwIDEgNiAuIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0LWdyYXBoaWNzLXN5c3RlbS9xdDQtZ3JhcGhpY3Mtc3lzdGVtXzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC1ncmFwaGljcy1zeXN0ZW0vcXQ0LWdyYXBoaWNzLXN5c3RlbV8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYzZjNkYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC1ncmFwaGljcy1zeXN0ZW0vcXQ0LWdyYXBoaWNzLXN5c3RlbV8xLjAuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJTZXRzIGRlZmF1bHQgUXQ0IEdyYXBoaWNzIFN5c3RlbSB0byAke1FUX0dSQVBISUNTX1NZU1RFTX0iCitTRUNUSU9OID0gIngxMS9iYXNlIgorTElDRU5TRSA9ICJNSVQtWCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitQUiA9ICJyMSIKKworUVRfR1JBUEhJQ1NfU1lTVEVNID89ICJyYXN0ZXIiCisKK2RlZiBfZ2V0X2V4dHJhX3JkZXBlbmRzKGQpOgorICAgIGdzID0gZC5nZXRWYXIoJ1FUX0dSQVBISUNTX1NZU1RFTScsIFRydWUpCisgICAgaWYgZ3MgPT0gIm9wZW5nbCI6CisgICAgICAgIHJldHVybiAicXQ0LXBsdWdpbi1ncmFwaGljc3N5c3RlbXMtZ2xncmFwaGljc3N5c3RlbSIKKworICAgIHJldHVybiAiIgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9wcm9maWxlLmQvCisJY2ZnX2ZpbGU9JHtEfS8ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZC9xdC1ncmFwaGljc3N5c3RlbQorCWVjaG8gImV4cG9ydCBRVF9HUkFQSElDU1NZU1RFTT0ke1FUX0dSQVBISUNTX1NZU1RFTX0iID4gJGNmZ19maWxlCit9CisKK1JERVBFTkRTXyR7UE59ID0gIiR7QF9nZXRfZXh0cmFfcmRlcGVuZHMoZCl9IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L25hdGl2ZXNkay1xdDQtdG9vbHMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L25hdGl2ZXNkay1xdDQtdG9vbHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NzAwOGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvbmF0aXZlc2RrLXF0NC10b29scy5pbmMKQEAgLTAsMCArMSwxMjUgQEAKK1NVTU1BUlkgPSAiU0RLIHRvb2xzIGZvciBRdCB2ZXJzaW9uIDQueCIKK0RFUEVORFMgPSAibmF0aXZlc2RrLXpsaWIgbmF0aXZlc2RrLWRidXMgcXQ0LW5hdGl2ZSAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd2aXJ0dWFsL25hdGl2ZXNkay1saWJ4MTEnLCAnJywgZCl9IgorU0VDVElPTiA9ICJsaWJzIgorSE9NRVBBR0UgPSAiaHR0cDovL3F0LXByb2plY3Qub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgfCBHUEx2MyIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vcXQ0LSR7UFZ9OiIKKworaW5oZXJpdCBuYXRpdmVzZGsgcW1ha2UyCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLnF0LXByb2plY3Qub3JnL29mZmljaWFsX3JlbGVhc2VzL3F0LzQuOC8ke1BWfS9xdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXFsaWJyYXJ5aW5mby1hbGxvdy10by1zZXQtcXQuY29uZi1mcm9tLXRoZS1vdXRzaWRlLXUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1jb25maWd1cmUtcW1ha2UtaXMtYWxyZWFkeS1idWlsdC1pbi1xdDQtdG9vbHMtbmF0aXZlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtY29uZmlndXJlLXNldC1MRkxBR1MtdG8tcGljay11cC16bGliLWZyb20tc3RhZ2luZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA2LWNvbmZpZ3VyZS1Vc2UtT0VfUU1BS0VfLXZhbHVlcy10by1zcGVjaWZ5LVF0LXV0aWxpdHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNy1kYnVzLVJlbW92ZS1jb25zdC11c2FnZS10aGF0LWNhdXNlcy1jb21waWxlLWZhaWx1cmUtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDgtcW1ha2UucHJvLUFsbG93LWJ1aWxkaW5nLWEtc2VwYXJhdGUtcW1ha2UtZm9yLXRoZS10YS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nKysuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9saW51eC5jb25mIgorCitTID0gIiR7V09SS0RJUn0vcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy0ke1BWfSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS5MR1BMO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLkdQTDM7bWQ1PTZlMTY5NGVlMzM4ZGI0MTA0MTc1MTc4ODQ5MThkNGQyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xHUExfRVhDRVBUSU9OLnR4dDttZDU9MDE0NWM0ZDFiNmY5NmE2NjFjMmMxMzlkZmIyNjhmYjYiCisKK3JlcXVpcmUgcXQ0X2FyY2guaW5jCisKKyMgRklYTUU6IG1ha2UgaXQgd29yayB3aXRoICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcGtnLWNvbmZpZyAtLWNmbGFncyBkYnVzLTEiCitFWFRSQV9PRUNPTkYgPSAiLXByZWZpeCAke3ByZWZpeH0gXAorICAgICAgICAgICAgICAgIC1xdC1saWJqcGVnIC1zeXN0ZW0temxpYiBcCisgICAgICAgICAgICAgICAgLW5vLWxpYmpwZWcgLW5vLWxpYnBuZyAtbm8tbGlibW5nIC1uby1saWJ0aWZmIFwKKyAgICAgICAgICAgICAgICAtbm8tYWNjZXNzaWJpbGl0eSBcCisgICAgICAgICAgICAgICAgLW5vLWN1cHMgXAorICAgICAgICAgICAgICAgIC1uby1leGNlcHRpb25zICBcCisgICAgICAgICAgICAgICAgLW5vLW5hcy1zb3VuZCBcCisgICAgICAgICAgICAgICAgLW5vLW5pcyAtbm8tb3BlbnNzbCBcCisgICAgICAgICAgICAgICAgLXZlcmJvc2UgLXJlbGVhc2UgLWZhc3QgLXN0YXRpYyBcCisgICAgICAgICAgICAgICAgLXBsYXRmb3JtICR7VEFSR0VUX09TfS1vZS1nKysgXAorICAgICAgICAgICAgICAgIC14cGxhdGZvcm0gJHtUQVJHRVRfT1N9LW9lLWcrKyBcCisgICAgICAgICAgICAgICAgLWFyY2ggJHtRVF9BUkNIfSBcCisgICAgICAgICAgICAgICAgLWVtYmVkZGVkIC1uby1mcmVldHlwZSAtbm8tZ2xpYiAtbm8taWNvbnYgXAorICAgICAgICAgICAgICAgIC1xdDNzdXBwb3J0IFwKKyAgICAgICAgICAgICAgICAtSSR7U1RBR0lOR19ESVJfSE9TVH0ke1NES1BBVEhOQVRJVkV9L3Vzci9pbmNsdWRlL2RidXMtMS4wIFwKKyAgICAgICAgICAgICAgICAtSSR7U1RBR0lOR19ESVJfSE9TVH0ke1NES1BBVEhOQVRJVkV9L3Vzci9saWIvZGJ1cy0xLjAvaW5jbHVkZSIKKworIyB5YW5rIGRlZmF1bHQgLWUsIG90aGVyd2lzZSB3ZSBnZXQgdGhlIGZvbGxvd2luZyBlcnJvcjoKKyMgbW9jX3FidWZmZXIuY3BwOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitFWFRSQV9PRU1BS0UgPSAiICIKKworZG9fY29uZmlndXJlKCkgeworICAgICMgQXZvaWQgcHJvYmxlbXMgd2l0aCBRdCA0LjguMCBjb25maWd1cmUgc2V0dGluZyBRTUFLRV9MSU5LIGZyb20gTEQgKHNpbmNlIHdlIHdhbnQgdGhlIGxpbmtlciB0byBiZSBnKyspCisgICAgdW5zZXQgTEQKKworICAgIGlmIFsgISAtZSBta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysgXTsgdGhlbgorICAgICAgICBsbiAtc2YgbGludXgtZysrIG1rc3BlY3MvJHtUQVJHRVRfT1N9LW9lLWcrKworICAgIGZpCisKKyAgICBjcCAuLi9nKysuY29uZiBta3NwZWNzL2NvbW1vbgorICAgIGNwIC4uL2xpbnV4LmNvbmYgbWtzcGVjcy9jb21tb24KKworICAgIGlmIFsgLWYgbWtzcGVjcy9jb21tb24vZysrLWJhc2UuY29uZiBdIDsgdGhlbgorICAgICAgICAjIGRvbid0IHVzZSBob3N0IGcrKyBldmVuIGR1cmluZyBjb25maWd1cmUgKDQuOC4wKykKKyAgICAgICAgc2VkIC1pIC1lICJzIz0gZysrIz0gJHtDWFh9IyIgbWtzcGVjcy9jb21tb24vZysrLWJhc2UuY29uZgorICAgICAgICBzZWQgLWkgLWUgInMjPSBnY2MjPSAke0NDfSMiIG1rc3BlY3MvY29tbW9uL2crKy1iYXNlLmNvbmYKKyAgICBmaQorCisgICAgIyBVc2UgcW1ha2UgZnJvbSBxdDQtbmF0aXZlIGZvciBidWlsZGluZworICAgIGlmIFsgISAtZSBiaW4vcW1ha2UgXTsgdGhlbgorICAgICAgICBsbiAtc2YgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3FtYWtlMiBiaW4vcW1ha2UKKyAgICBmaQorICAgIHNldF9hcmNoCisgICAgKGVjaG8gbzsgZWNobyB5ZXMpIHwgQ0M9IiR7Q0N9IiBDWFg9IiR7Q1hYfSIgLi9jb25maWd1cmUgJHtFWFRSQV9PRUNPTkZ9IHx8IGRpZSAiQ29uZmlndXJpbmcgcXQgZmFpbGVkLiBFWFRSQV9PRUNPTkYgd2FzICR7RVhUUkFfT0VDT05GfSIKK30KKworVE9CVUlMRCA9ICJcCisgIHNyYy90b29scy9ib290c3RyYXAgXAorICBzcmMvdG9vbHMvbW9jIFwKKyAgc3JjL2NvcmVsaWIgXAorICBzcmMvc3FsIFwKKyAgc3JjL2RidXMgXAorICBzcmMvcXQzc3VwcG9ydCBcCisgIHNyYy94bWwgXAorICBzcmMvdG9vbHMvdWljIFwKKyAgc3JjL3Rvb2xzL3JjYyBcCisgIHNyYy9uZXR3b3JrIFwKKyAgc3JjL2d1aSBcCisgIHNyYy90b29scy91aWMzIFwKKyAgdG9vbHMvbGluZ3Vpc3QvbHJlbGVhc2UgXAorICB0b29scy9saW5ndWlzdC9sdXBkYXRlIFwKKyAgdG9vbHMvcWRidXMgXAorIgorCitkb19jb21waWxlKCkgeworICAgIGZvciBpIGluICR7VE9CVUlMRH07IGRvCisgICAgICAgIGNkICR7U30vJGkgJiYgb2VfcnVubWFrZSBDQz0iJHtDQ30iIENYWD0iJHtDWFh9IgorICAgIGRvbmUKKworICAgICMgQnVpbGQgbmF0aXZlc2RrIHFtYWtlCisgICAgZXhwb3J0IFFNQUtFU1BFQz0iJHtTfS9ta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysiCisgICAgY2QgJHtTfS9xbWFrZQorICAgICR7T0VfUU1BS0VfUU1BS0V9CisgICAgb2VfcnVubWFrZSBDQz0iJHtDQ30iIENYWD0iJHtDWFh9IgorICAgIGNkICR7U30KK30KKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgYmluL3FtYWtlMiAke0R9JHtiaW5kaXJ9L3FtYWtlMgorICAgIGZvciBpIGluIG1vYyB1aWMgdWljMyByY2MgbHJlbGVhc2UgbHVwZGF0ZSBxZGJ1c2NwcDJ4bWwgcWRidXN4bWwyY3BwOyBkbworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgYmluLyR7aX0gJHtEfSR7YmluZGlyfS8ke2l9NAorICAgIGRvbmUKKworICAgIChjZCAke0R9JHtiaW5kaXJ9OyBcCisgICAgbG4gLXMgcW1ha2UyIHFtYWtlOyBcCisgICAgZm9yIGkgaW4gbW9jIHVpYyB1aWMzIHJjYyBscmVsZWFzZSBsdXBkYXRlIHFkYnVzY3BwMnhtbCBxZGJ1c3htbDJjcHA7IGRvIFwKKyAgICAgICAgbG4gLXMgJHtpfTQgJHtpfTsgXAorICAgIGRvbmUpCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgY2F0ID4ke0R9JHtzeXNjb25mZGlyfS9xdC5jb25mIDw8RU9GCitbUGF0aHNdCitQcmVmaXggPSAke3ByZWZpeH0KK0VPRgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L25hdGl2ZXNkay1xdDQtdG9vbHNfNC44LjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvbmF0aXZlc2RrLXF0NC10b29sc180LjguNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGJhMDdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L25hdGl2ZXNkay1xdDQtdG9vbHNfNC44LjcuYmIKQEAgLTAsMCArMSw2IEBACityZXF1aXJlIG5hdGl2ZXNkay1xdDQtdG9vbHMuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDA5LXFtYWtlLWZpeC1zb3VyY2UtZmlsZS1yZWZlcmVuY2VzLWluLXFtYWtlLnByaS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImQ5OTBlZTY2YmY3YWIwYzc4NTU4OTc3NmYzNWJhNmFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUyODgyMjk1MDk3ZTQ3ZmUwODlmOGFjNzQxYTk1ZmVmNDdlMGE3M2EzZjNjZGYyMWI1Njk5MDYzOGY2MjZlYTAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNTdlNzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LmluYwpAQCAtMCwwICsxLDY4IEBACitMSUNFTlNFID0gIkxHUEx2Mi4xIHwgR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLkxHUEw7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UuR1BMMzttZDU9NmUxNjk0ZWUzMzhkYjQxMDQxNzUxNzg4NDkxOGQ0ZDIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTEdQTF9FWENFUFRJT04udHh0O21kNT0wMTQ1YzRkMWI2Zjk2YTY2MWMyYzEzOWRmYjI2OGZiNiIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vcXQ0LSR7UFZ9OiIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQucXQtcHJvamVjdC5vcmcvb2ZmaWNpYWxfcmVsZWFzZXMvcXQvNC44LyR7UFZ9L3F0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtd2Via2l0Mi1zZXQtT1VUUFVUX0RJUi12YWx1ZS1pZi1lbXB0eS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LWNvbmZpZ3VyZS1xbWFrZS1pcy1hbHJlYWR5LWJ1aWx0LWluLXF0NC10b29scy1uYXRpdmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1xbWFrZS5wcm8tQWxsb3ctYnVpbGRpbmctYS1zZXBhcmF0ZS1xbWFrZS1mb3ItdGhlLXRhLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktcW1ha2UtZml4LXNvdXJjZS1maWxlLXJlZmVyZW5jZXMtaW4tcW1ha2UucHJpLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTAtY29uZmlndXJlLUhhY2stdG8tbm90LXVzZS10aGUtcGdfY29uZmlnLW9mLXRoZS1ob3N0LS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDExLWZyZWV0eXBlLWhvc3QtaW5jbHVkZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMi1BZGQtMmJwcC1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTMtY29uZmlndXJlLWFkZC1jcm9zc2FyY2gtb3B0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTQtdHJhbnNsYXRpb25zLWZpeC1waG9ueS10cmFuc2xhdGlvbi1saW5raW5nLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTUtY29uZmlndXJlLWFkZC1ub3N0cmlwLWZvci1kZWJ1Zy1wYWNrYWdlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE2LWNvbmZpZ3VyZS1ldmFsLVFNQUtFX0NYWC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE3LWNvbmZpZ3VyZS1lbnN1cmUtd2UtaWRlbnRpZnktdGhlLWNvbXBpbGVyLWFzLWctaW4tY28ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOC1jb25maWd1cmUtbWFrZS1wdWxzZWF1ZGlvLWEtY29uZmlndXJhYmxlLW9wdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE5LUZpeGVzLWZvci1nY2MtNC43LjAtcGFydGljdWxhcmx5LW9uLXFlbXV4ODYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNy10b29scy5wcm8tZGlzYWJsZS1xbWVlZ29ncmFwaGljc3N5c3RlbWhlbHBlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI4LURvbi10LWNyYXNoLW9uLWJyb2tlbi1HSUYtaW1hZ2VzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzAtYWFyY2g2NF9hcm02NF9xYXRvbWljX3N1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMS1hYXJjaDY0X2FybTY0X21rc3BlY3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMi1hYXJjaDY0X2FkZF9oZWFkZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vRml4LVFXU0xvY2staW52YWxpZC1hcmd1bWVudC1sb2dzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkZF9jaGVja19mb3JfYWFyY2g2NF8zMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nKysuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9saW51eC5jb25mIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDk5MGVlNjZiZjdhYjBjNzg1NTg5Nzc2ZjM1YmE2YWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTI4ODIyOTUwOTdlNDdmZTA4OWY4YWM3NDFhOTVmZWY0N2UwYTczYTNmM2NkZjIxYjU2OTkwNjM4ZjYyNmVhMCIKKworUyA9ICIke1dPUktESVJ9L3F0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtJHtQVn0iCisKKyMgZGlzYWJsZSB3ZWJraXQgZm9yIG1pcHM2NCBuMzIgdGVtcG9yYXJpbHkgdGhhdCBmYWlscyB0byBjb21waWxlLAorIyBxdCB1cHN0cmVhbSBkZWZlY3Q6CisjIGh0dHBzOi8vYnVncmVwb3J0cy5xdC1wcm9qZWN0Lm9yZy9icm93c2UvUVRCVUctMzkyMjQKK1FUX0NPTkZJR19GTEFHU19hcHBlbmRfbWlwczY0bjMyID0gIiAtbm8td2Via2l0IgorCisjIGRpc2FibGUgd2Via2l0IGZvciBhYXJjaDY0IHRlbXBvcmFyaWx5IHRoYXQgZmFpbHMgdG8gY29tcGlsZQorUVRfQ09ORklHX0ZMQUdTX2FwcGVuZF9hYXJjaDY0ID0gIiAtbm8td2Via2l0IgorCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tdG9vbHNfYXBwZW5kICAgICA9ICIgJHtiaW5kaXJ9L3FtbCAke2JpbmRpcn0vcW1scGx1Z2luZHVtcCIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS10b29scy1kYmdfYXBwZW5kID0gIiAke2JpbmRpcn0vLmRlYnVnL3FtbCAke2JpbmRpcn0vLmRlYnVnL3FtbHBsdWdpbmR1bXAiCisKK1BBQ0tBR0VTX2FwcGVuZCA9ICIgJHtRVF9CQVNFX05BTUV9LXRlc3RzLWRiZyAke1FUX0JBU0VfTkFNRX0tdGVzdHMiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tdGVzdHMtZGJnICAgICAgICA9ICIke3ByZWZpeH0vdGVzdHMvcXQ0LyovLmRlYnVnIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXRlc3RzICAgICAgICAgICAgPSAiJHtwcmVmaXh9L3Rlc3RzL3F0NC8qIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzZWQgLWkgJ3M6cXRQcmVwYXJlVG9vbChMUkVMRUFTRSwgbHJlbGVhc2UpOkxSRUxFQVNFID0gJHtPRV9RTUFLRV9MUkVMRUFTRX06ZycgXAorICAgICAgICAke1N9L3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMucHJvCisKKyAgICBzZWQgLWkgXAorICAgIC1lIC9RTUFLRV9NT0NcIC9kIFwKKyAgICAtZSAvUU1BS0VfVUlDXCAvZCBcCisgICAgLWUgL1FNQUtFX1VJQzNcIC9kIFwKKyAgICAtZSAvUU1BS0VfUkNDXCAvZCBcCisgICAgJHtTfS9jb25maWd1cmUKKworICAgICMgQXZvaWQgcHJvYmxlbXMgd2l0aCBRdCA0LjguMCBjb25maWd1cmUgc2V0dGluZyBRTUFLRV9MSU5LIGZyb20gTEQgKHNpbmNlIHdlIHdhbnQgdGhlIGxpbmtlciB0byBiZSBnKyspCisgICAgdW5zZXQgTEQKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAxLXFsaWJyYXJ5aW5mby1hbGxvdy10by1zZXQtcXQuY29uZi1mcm9tLXRoZS1vdXRzaWRlLXUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDEtcWxpYnJhcnlpbmZvLWFsbG93LXRvLXNldC1xdC5jb25mLWZyb20tdGhlLW91dHNpZGUtdS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGIwYTA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAxLXFsaWJyYXJ5aW5mby1hbGxvdy10by1zZXQtcXQuY29uZi1mcm9tLXRoZS1vdXRzaWRlLXUucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA1NTA5N2QyN2U4Yjc0NmIzZDVmZjQzNzkzOWNhZjFmYTQzYzBkNjJiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9sZ2VyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMTc6MjI6MzAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwMS8yMV0gcWxpYnJhcnlpbmZvOiBhbGxvdyB0byBzZXQgcXQuY29uZiBmcm9tIHRoZSBvdXRzaWRlCisgdXNpbmcgdGhlIGVudmlyb25tZW50CisKK0FsbG93IHRvIHNldCBhIHF0LmNvbmYgZnJvbSB0aGUgb3V0c2lkZSB1c2luZyB0aGUgZW52aXJvbm1lbnQuIFRoaXMgYWxsb3dzCit0byBpbmplY3QgbmV3IHByZWZpeGVzIGFuZCBvdGhlciBwYXRocyBpbnRvIHFtYWtlLiBUaGlzIGlzIG5lZWRlZCB3aGVuIHVzaW5nCit0aGUgc2FtZSBxbWFrZSBiaW5hcnkgdG8gYnVpbGQgcXQveDExIGFuZCBxdC9lbWJlZGRlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2NvcmVsaWIvZ2xvYmFsL3FsaWJyYXJ5aW5mby5jcHAgfCA1ICsrKysrCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2NvcmVsaWIvZ2xvYmFsL3FsaWJyYXJ5aW5mby5jcHAgYi9zcmMvY29yZWxpYi9nbG9iYWwvcWxpYnJhcnlpbmZvLmNwcAoraW5kZXggMTgwZGMzOS4uNGFkYWQzNSAxMDA2NDQKKy0tLSBhL3NyYy9jb3JlbGliL2dsb2JhbC9xbGlicmFyeWluZm8uY3BwCisrKysgYi9zcmMvY29yZWxpYi9nbG9iYWwvcWxpYnJhcnlpbmZvLmNwcAorQEAgLTU0LDYgKzU0LDcgQEAKKyBRVF9CRUdJTl9OQU1FU1BBQ0UKKyBleHRlcm4gUVN0cmluZyBxbWFrZV9saWJyYXJ5SW5mb0ZpbGUoKTsKKyBRVF9FTkRfTkFNRVNQQUNFCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNlbHNlCisgIyBpbmNsdWRlICJxY29yZWFwcGxpY2F0aW9uLmgiCisgI2VuZGlmCitAQCAtMTEyLDYgKzExMywxMCBAQCBRU2V0dGluZ3MgKlFMaWJyYXJ5SW5mb1ByaXZhdGU6OmZpbmRDb25maWd1cmF0aW9uKCkKKyAjaWZkZWYgQk9PVFNUUkFQUElORworICAgICBpZighUUZpbGU6OmV4aXN0cyhxdGNvbmZpZykpCisgICAgICAgICBxdGNvbmZpZyA9IHFtYWtlX2xpYnJhcnlJbmZvRmlsZSgpOworKyAgICBpZiAoIVFGaWxlOjpleGlzdHMocXRjb25maWcpKSB7CisrICAgICAgICBRQnl0ZUFycmF5IGNvbmZpZyA9IGdldGVudigiUVRfQ09ORl9QQVRIIik7CisrICAgICAgICBxdGNvbmZpZyA9IFFGaWxlOjpkZWNvZGVOYW1lKGNvbmZpZyk7CisrICAgIH0KKyAjZWxzZQorICAgICBpZiAoIVFGaWxlOjpleGlzdHMocXRjb25maWcpICYmIFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCkpIHsKKyAjaWZkZWYgUV9PU19NQUMKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAyLXFrYmR0dHlfcXdzLWZpeC1idWlsZC13aXRoLW9sZC1rZXJuZWwtaGVhZGVycy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwMi1xa2JkdHR5X3F3cy1maXgtYnVpbGQtd2l0aC1vbGQta2VybmVsLWhlYWRlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmYzg4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwMi1xa2JkdHR5X3F3cy1maXgtYnVpbGQtd2l0aC1vbGQta2VybmVsLWhlYWRlcnMucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorRnJvbSA1ZTZiMTA1MWFmYTMwOTlhMDJhNzU4YjA1OTYyMzY3NTlkNzA2NzBlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjE4OjA4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDIvMjFdIHFrYmR0dHlfcXdzOiBmaXggYnVpbGQgd2l0aCBvbGQga2VybmVsIGhlYWRlcnMKKworVGhpcyBpc3N1ZSBpcyB0aGF0IHdpdGggQysrIGNvbXBpbGVyIHByb2Nlc3MgYW4gb2xkIHZlcnNpb24gb2Yga2VybmVsCitoZWFkZXIgZmlsZSwgY29pbmNpZGVudGx5IHRoYXQgZmlsZSBoYXMgYSB2YXJpYWJsZSBuYW1lZCAnbmV3JzoKKworKiAnZW1iZWRkZWQvcWtiZHR0eV9xd3MuY3BwJyBpbmNsdWRlICdsaW51eC92dC5oJzsKKyogJy91c3IvaW5jbHVkZS9saW51eC92dC5oJyBoYXMgYmVsb3cgY29kZSBvbiBTTEVELTExLng6CisgICAgKyB1bnNpZ25lZCBpbnQgbmV3OworCitPbiBtb3N0bHkgaG9zdHMgaXQgaGFzIGJlZW4gY2hhbmdlZCB0bzogbmV3IC0+IG5ld2V2LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvZ3VpL2VtYmVkZGVkL3FrYmR0dHlfcXdzLmNwcCB8IDEyICsrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZ3VpL2VtYmVkZGVkL3FrYmR0dHlfcXdzLmNwcCBiL3NyYy9ndWkvZW1iZWRkZWQvcWtiZHR0eV9xd3MuY3BwCitpbmRleCBhNDY4MTFiLi43NjIxMzhmIDEwMDY0NAorLS0tIGEvc3JjL2d1aS9lbWJlZGRlZC9xa2JkdHR5X3F3cy5jcHAKKysrKyBiL3NyYy9ndWkvZW1iZWRkZWQvcWtiZHR0eV9xd3MuY3BwCitAQCAtNTQsOCArNTQsMjAgQEAKKyAKKyAjaWYgZGVmaW5lZCBRX09TX0xJTlVYCisgIyAgaW5jbHVkZSA8bGludXgva2QuaD4KKysKKysvKiBXb3JrYXJvdW5kIGtlcm5lbCBoZWFkZXJzIHVzaW5nICJuZXciIGFzIHZhcmlhYmxlIG5hbWUuIFRoZSBwcm9ibGVtCisrIGlzIHNwZWNpZmljIHRvIFNMRUQtMTEsIG90aGVyIGRpc3Ryb3MgdXNlICJuZXdldiIgcmF0aGVyIHRoYW4gIm5ldyIgKi8KKysjaWZkZWYgX19jcGx1c3BsdXMKKysjd2FybmluZyAid29ya2Fyb3VuZCBrZXJuZWwgaGVhZGVycyB1c2luZyBuZXcgYXMgdmFyaWFibGUgbmFtZSBvbiBTTEVEIDExIgorKyNkZWZpbmUgbmV3IG5ld2V2CisrI2VuZGlmCisrCisgIyAgaW5jbHVkZSA8bGludXgvdnQuaD4gLy9UT0RPOiBtb3ZlIHZ0IGhhbmRsaW5nIHNvbWV3aGVyZSBlbHNlIChRTGludXhGYlNjcmVlbj8pCisgCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrI3VuZGVmIG5ldworKyNlbmRpZgorKworICMgIGluY2x1ZGUgInFzY3JlZW5fcXdzLmgiCisgIyAgaW5jbHVkZSAicXdpbmRvd3N5c3RlbV9xd3MuaCIKKyAjICBpbmNsdWRlICJxYXBwbGljYXRpb24uaCIKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAzLXdlYmtpdDItc2V0LU9VVFBVVF9ESVItdmFsdWUtaWYtZW1wdHkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDMtd2Via2l0Mi1zZXQtT1VUUFVUX0RJUi12YWx1ZS1pZi1lbXB0eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2FlYTUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAzLXdlYmtpdDItc2V0LU9VVFBVVF9ESVItdmFsdWUtaWYtZW1wdHkucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSBiNjgwNWU4ODNjMDc4Zjc2NDdkOTIzNGFjYTRlMzUxM2ViZDFjOWJmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogVHVlLCAxIE1heSAyMDEyIDA3OjQ4OjE1ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMjFdIHdlYmtpdDI6IHNldCBPVVRQVVRfRElSIHZhbHVlIGlmIGVtcHR5CisKK1dpdGhvdXQgdGhpcyBkb19jb25maWd1cmUgd2FzIHRyeWluZyB0byBjcmVhdGUgL2luY2x1ZGUvV2ViQ29yZS9saWJkdW1teS5wcmwgaW4gcm9vdCBvZiBidWlsZCBob3N0IGZpbGVzeXN0ZW0KK25vdyBpdCdzIGluIHByb3BlciBwbGFjZSAke1dPUktESVJ9L3F0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtNC44LjEvc3JjLzNyZHBhcnR5L3dlYmtpdC9pbmNsdWRlL1dlYkNvcmUvbGliZHVtbXkucHJsCisKK0ZpcnN0IHJlcG9ydGVkIGhlcmU6CitodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vb3BlbmVtYmVkZGVkLWRldmVsQGxpc3RzLm9wZW5lbWJlZGRlZC5vcmcvbXNnMjQ0MzYuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8gfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8gYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybworaW5kZXggMDA2YTg4Yy4uNWUxNzE5MyAxMDA2NDQKKy0tLSBhL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCisrKysgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybworQEAgLTMsNiArMyw4IEBAIFRBUkdFVCA9IGR1bW15CisgCisgQ09ORklHIC09IGRlYnVnX2FuZF9yZWxlYXNlCisgCisraXNFbXB0eShPVVRQVVRfRElSKTogT1VUUFVUX0RJUiA9IC4uLy4uCisrCisgQ09ORklHKHN0YW5kYWxvbmVfcGFja2FnZSkgeworICAgICBpc0VtcHR5KFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSKTpXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUiA9ICQkUFdEL2dlbmVyYXRlZAorICAgICBpc0VtcHR5KFdDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUik6V0NfR0VORVJBVEVEX1NPVVJDRVNfRElSID0gJCRQV0QvLi4vV2ViQ29yZS9nZW5lcmF0ZWQKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA0LWNvbmZpZ3VyZS1xbWFrZS1pcy1hbHJlYWR5LWJ1aWx0LWluLXF0NC10b29scy1uYXRpdmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDQtY29uZmlndXJlLXFtYWtlLWlzLWFscmVhZHktYnVpbHQtaW4tcXQ0LXRvb2xzLW5hdGl2ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWI4YTU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA0LWNvbmZpZ3VyZS1xbWFrZS1pcy1hbHJlYWR5LWJ1aWx0LWluLXF0NC10b29scy1uYXRpdmUucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSBhZjY5OWM2ZThjZjlmYjI4ZDZmOGI3ODliZjMzZDUzYjQ3ZWRhZWM3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWljaGFlbCBLcmVsaW4gPGhhY2tlckBrbGV2ZXIubmV0PgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDoyNDoyMCArMDIwMAorU3ViamVjdDogW1BBVENIIDA0LzIxXSBjb25maWd1cmU6IHFtYWtlIGlzIGFscmVhZHkgYnVpbHQgaW4gcXQ0LXRvb2xzLW5hdGl2ZSwKKyBzbyBkaXNhYmxlIGl0CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBlM2Q0NjRiLi5jYzA0YjI3IDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC00ODk5LDcgKzQ4OTksNyBAQCBzZXRCb290c3RyYXBWYXJpYWJsZSgpCisgfQorIAorICMgYnVpbGQgcW1ha2UKKy1pZiB0cnVlOyB0aGVuICMjI1sgJyEnIC1mICIkb3V0cGF0aC9iaW4vcW1ha2UiIF07CisraWYgZmFsc2U7IHRoZW4gIyMjWyAnIScgLWYgIiRvdXRwYXRoL2Jpbi9xbWFrZSIgXTsKKyAgICAgZWNobyAiQ3JlYXRpbmcgcW1ha2UuIFBsZWFzZSB3YWl0Li4uIgorIAorICAgICBPTERfUUNPTkZJR19IPQorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDUtY29uZmlndXJlLXNldC1MRkxBR1MtdG8tcGljay11cC16bGliLWZyb20tc3RhZ2luZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNS1jb25maWd1cmUtc2V0LUxGTEFHUy10by1waWNrLXVwLXpsaWItZnJvbS1zdGFnaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhOGYyYjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDUtY29uZmlndXJlLXNldC1MRkxBR1MtdG8tcGljay11cC16bGliLWZyb20tc3RhZ2luZy5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIGFjOTMyMzdiYzkwZWE3NzczYzBlZjUyNzU5NjJiYWJhMDFkNGE5YzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/SmVyZW15PTIwTGFpbj1DMz1BOT89IDxqZXJlbXkubGFpbmVAbTR4Lm9yZz4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6Mjc6NDQgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8yMV0gY29uZmlndXJlOiBzZXQgTEZMQUdTIHRvIHBpY2sgdXAgemxpYiBmcm9tIHN0YWdpbmcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggY2MwNGIyNy4uNWE3YzRlZSAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNjkwLDcgKzY5MCw3IEBAIGZpCisgIyBpbml0YWxpemUgdmFyaWFibGVzCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKy1TWVNURU1fVkFSSUFCTEVTPSJSQU5MSUIgU1RSSVAgT0JKRFVNUCBMRCBDQyBDWFggQ0ZMQUdTIENYWEZMQUdTIExERkxBR1MiCisrU1lTVEVNX1ZBUklBQkxFUz0iUkFOTElCIFNUUklQIE9CSkRVTVAgTEQgQ0MgQ1hYIENGTEFHUyBDWFhGTEFHUyBMREZMQUdTIExGTEFHUyIKKyBmb3IgdmFybmFtZSBpbiAkU1lTVEVNX1ZBUklBQkxFUzsgZG8KKyAgICAgcW1ha2V2YXJuYW1lPSIke3Zhcm5hbWV9IgorICAgICAjIHVzZSBMREZMQUdTIGZvciBhdXRvY29uZiBjb21wYXQsIGJ1dCBxbWFrZSB1c2VzIFFNQUtFX0xGTEFHUworLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDYtY29uZmlndXJlLVVzZS1PRV9RTUFLRV8tdmFsdWVzLXRvLXNwZWNpZnktUXQtdXRpbGl0eS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNi1jb25maWd1cmUtVXNlLU9FX1FNQUtFXy12YWx1ZXMtdG8tc3BlY2lmeS1RdC11dGlsaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZWJmNzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDYtY29uZmlndXJlLVVzZS1PRV9RTUFLRV8tdmFsdWVzLXRvLXNwZWNpZnktUXQtdXRpbGl0eS5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDBiYzBkYjgzODEyYjU5MDBkYzRlNmZmYTk2YmRlYWI0NmI2YWRjYWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6Mjk6MDkgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwNi8yMV0gY29uZmlndXJlOiBVc2UgT0VfUU1BS0VfKiB2YWx1ZXMgdG8gc3BlY2lmeSBRdCB1dGlsaXR5CisgcGF0aHMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA1YTdjNGVlLi5kYjRkMDQ0IDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC04NjgzLDExICs4NjgzLDExIEBAIFFNQUtFX0FCU09MVVRFX1NPVVJDRV9ST09UID0gXCRcJFFUX1NPVVJDRV9UUkVFCisgUU1BS0VfTU9DX1NSQyAgICA9IFwkXCRRVF9CVUlMRF9UUkVFL3NyYy9tb2MKKyAKKyAjbG9jYWwgcGF0aHMgdGhhdCBjYW5ub3QgYmUgcXVlcmllZCBmcm9tIHRoZSBRVF9JTlNUQUxMXyogcHJvcGVydGllcyB3aGlsZSBidWlsZGluZyBRVERJUgorLVFNQUtFX01PQyAgICAgICAgPSBcJFwkUVRfQlVJTERfVFJFRS9iaW4vbW9jCistUU1BS0VfVUlDICAgICAgICA9IFwkXCRRVF9CVUlMRF9UUkVFL2Jpbi91aWMKKy1RTUFLRV9VSUMzICAgICAgID0gXCRcJFFUX0JVSUxEX1RSRUUvYmluL3VpYzMKKy1RTUFLRV9SQ0MgICAgICAgID0gXCRcJFFUX0JVSUxEX1RSRUUvYmluL3JjYworLVFNQUtFX1FEQlVTWE1MMkNQUCA9IFwkXCRRVF9CVUlMRF9UUkVFL2Jpbi9xZGJ1c3htbDJjcHAKKytRTUFLRV9NT0MgICAgICAgID0gXCR7T0VfUU1BS0VfTU9DfQorK1FNQUtFX1VJQyAgICAgICAgPSBcJHtPRV9RTUFLRV9VSUN9CisrUU1BS0VfVUlDMyAgICAgICA9IFwke09FX1FNQUtFX1VJQzN9CisrUU1BS0VfUkNDICAgICAgICA9IFwke09FX1FNQUtFX1JDQ30KKytRTUFLRV9RREJVU1hNTDJDUFAgPSBcJHtPRV9RTUFLRV9RREJVU1hNTDJDUFB9CisgUU1BS0VfSU5DRElSX1FUICA9IFwkXCRRVF9CVUlMRF9UUkVFL2luY2x1ZGUKKyBRTUFLRV9MSUJESVJfUVQgID0gXCRcJFFUX0JVSUxEX1RSRUUvbGliCisgCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNy1kYnVzLVJlbW92ZS1jb25zdC11c2FnZS10aGF0LWNhdXNlcy1jb21waWxlLWZhaWx1cmUtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA3LWRidXMtUmVtb3ZlLWNvbnN0LXVzYWdlLXRoYXQtY2F1c2VzLWNvbXBpbGUtZmFpbHVyZS0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyM2M5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNy1kYnVzLVJlbW92ZS1jb25zdC11c2FnZS10aGF0LWNhdXNlcy1jb21waWxlLWZhaWx1cmUtLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gMjAxMWJiODAyOTQ4MGFmMWQxMjY2ZjI1OGU1YTVmNWNlZjczOTJkMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdmVsIEhlaW1saWNoIDx0cm9waWtoYWptYUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjMxOjEwICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvMjFdIGRidXM6IFJlbW92ZSAiY29uc3QiIHVzYWdlIHRoYXQgY2F1c2VzIGNvbXBpbGUgZmFpbHVyZQorIGJ1aWxkaW5nIG5hdGl2ZXNkay1xdDQtdG9vbHMKKworUGF0Y2ggaGFzIGFwcGFyZW50bHkgYmVlbiByZWplY3RlZCB1cHN0cmVhbSwgbm90IGJlY2F1c2UgaXQgaXMgaW52YWxpZAorYnV0IGJlY2F1c2UgdGhlIHN1Ym1pdHRlciBkaWQgbm90IHN1Ym1pdCBhIG1lcmdlIHJlcXVlc3QgZm9yIGl0LCBzbyB0aGUKK3ZhbGlkaXR5IG9mIHRoZSBwYXRjaCB1cHN0cmVhbSBpcyB1bmNlcnRhaW4uIEZvciBmdXJ0aGVyIGRldGFpbHMgc2VlOgoraHR0cHM6Ly9idWdyZXBvcnRzLnF0LXByb2plY3Qub3JnL2Jyb3dzZS9RVEJVRy0xNzk2MgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZCBbcG9zc2libGUgcmV0cnldCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9kYnVzL3FkYnVzaW50ZWdyYXRvci5jcHAgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZGJ1cy9xZGJ1c2ludGVncmF0b3IuY3BwIGIvc3JjL2RidXMvcWRidXNpbnRlZ3JhdG9yLmNwcAoraW5kZXggMGYwYjY0Ny4uYWE0Y2JhYiAxMDA2NDQKKy0tLSBhL3NyYy9kYnVzL3FkYnVzaW50ZWdyYXRvci5jcHAKKysrKyBiL3NyYy9kYnVzL3FkYnVzaW50ZWdyYXRvci5jcHAKK0BAIC03Myw3ICs3Myw3IEBAIFFUX0JFR0lOX05BTUVTUEFDRQorIHN0YXRpYyBib29sIGlzRGVidWdnaW5nOworICNkZWZpbmUgcURCdXNEZWJ1ZyAgICAgICAgICAgICAgaWYgKCE6OmlzRGVidWdnaW5nKTsgZWxzZSBxRGVidWcKKyAKKy1RX0dMT0JBTF9TVEFUSUNfV0lUSF9BUkdTKGNvbnN0IFFTdHJpbmcsIG9yZ0ZyZWVkZXNrdG9wREJ1c1N0cmluZywgKFFMYXRpbjFTdHJpbmcoREJVU19TRVJWSUNFX0RCVVMpKSkKKytRX0dMT0JBTF9TVEFUSUNfV0lUSF9BUkdTKFFTdHJpbmcsIG9yZ0ZyZWVkZXNrdG9wREJ1c1N0cmluZywgKFFMYXRpbjFTdHJpbmcoREJVU19TRVJWSUNFX0RCVVMpKSkKKyAKKyBzdGF0aWMgaW5saW5lIFFTdHJpbmcgZGJ1c1NlcnZpY2VTdHJpbmcoKQorIHsgcmV0dXJuICpvcmdGcmVlZGVza3RvcERCdXNTdHJpbmcoKTsgfQorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDgtcW1ha2UucHJvLUFsbG93LWJ1aWxkaW5nLWEtc2VwYXJhdGUtcW1ha2UtZm9yLXRoZS10YS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwOC1xbWFrZS5wcm8tQWxsb3ctYnVpbGRpbmctYS1zZXBhcmF0ZS1xbWFrZS1mb3ItdGhlLXRhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMDdmNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDgtcW1ha2UucHJvLUFsbG93LWJ1aWxkaW5nLWEtc2VwYXJhdGUtcW1ha2UtZm9yLXRoZS10YS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDY0Y2U1ZDBlN2MxOTQzNmI5MjhhMmEwZDlkMTkyZjU2YmUzYzliYjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6MzI6NDEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8yMV0gcW1ha2UucHJvOiBBbGxvdyBidWlsZGluZyBhIHNlcGFyYXRlIHFtYWtlIGZvciB0aGUKKyB0YXJnZXQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWddCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgcW1ha2UvcW1ha2UucHJvIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9xbWFrZS9xbWFrZS5wcm8gYi9xbWFrZS9xbWFrZS5wcm8KK2luZGV4IDM4ZTBmY2UuLjUzYjFmZmIgMTAwNjQ0CistLS0gYS9xbWFrZS9xbWFrZS5wcm8KKysrKyBiL3FtYWtlL3FtYWtlLnBybworQEAgLTcsNiArNyw3IEBAIENPTkZJRyArPSBjb25zb2xlIGJvb3RzdHJhcAorIENPTkZJRyAtPSBxdCBzaGFyZWQgYXBwX2J1bmRsZSB1aWMKKyBERUZJTkVTICs9IFFUX0JVSUxEX1FNQUtFIFFUX0JPT1RTVFJBUFBFRAorIERFU1RESVIgPSAuLi9iaW4vCisrVEFSR0VUID0gcW1ha2UyCisgCisgT0JKRUNUU19ESVIgPSAuCisgTU9DX0RJUiA9IC4KKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA5LXFtYWtlLWZpeC1zb3VyY2UtZmlsZS1yZWZlcmVuY2VzLWluLXFtYWtlLnByaS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwOS1xbWFrZS1maXgtc291cmNlLWZpbGUtcmVmZXJlbmNlcy1pbi1xbWFrZS5wcmkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDViOGMxMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwOS1xbWFrZS1maXgtc291cmNlLWZpbGUtcmVmZXJlbmNlcy1pbi1xbWFrZS5wcmkucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbSBlMTI5ZGMwZDZjZGU2OWRkMTVkMTgzNmM0MTExZTA1MjZmYzI5MTYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjMzOjQ5ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMjFdIHFtYWtlOiBmaXggc291cmNlIGZpbGUgcmVmZXJlbmNlcyBpbiBxbWFrZS5wcmkKKworRml4IGR1cGxpY2F0ZSBlbnRyaWVzIGluIFNPVVJDRVMgYW5kIEhFQURFUlMsIGFuZCBmaXggdGhlIHNvdXJjZSBmaWxlCitsaXN0IGZvciB0aGUgc3BsaXQgb2YgcWxvY2FsZS5jcHAuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHFtYWtlL3FtYWtlLnByaSB8IDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcW1ha2UvcW1ha2UucHJpIGIvcW1ha2UvcW1ha2UucHJpCitpbmRleCAzMWY2N2Y0Li45MDgxNjY5IDEwMDY0NAorLS0tIGEvcW1ha2UvcW1ha2UucHJpCisrKysgYi9xbWFrZS9xbWFrZS5wcmkKK0BAIC0yMiw4ICsyMiw3IEBAIFNPVVJDRVMgKz0gcHJvamVjdC5jcHAgcHJvcGVydHkuY3BwIG1haW4uY3BwIGdlbmVyYXRvcnMvbWFrZWZpbGUuY3BwIFwKKyAgICAgICAgICAgIGdlbmVyYXRvcnMvc3ltYmlhbi9pbml0cHJvamVjdGRlcGxveV9zeW1iaWFuLmNwcCBcCisgICAgICAgICAgICBnZW5lcmF0b3JzL2ludGVncml0eS9nYnVpbGQuY3BwIFwKKyAgICAgICAgICAgIHdpbmRvd3MvcmVnaXN0cnkuY3BwIFwKKy0gICAgICAgICAgIHN5bWJpYW4vZXBvY3Jvb3QuY3BwIFwKKy0gICAgICAgICAgIGdlbmVyYXRvcnMvaW50ZWdyaXR5L2didWlsZC5jcHAKKysgICAgICAgICAgIHN5bWJpYW4vZXBvY3Jvb3QuY3BwCisgCisgSEVBREVSUyArPSBwcm9qZWN0LmggcHJvcGVydHkuaCBnZW5lcmF0b3JzL21ha2VmaWxlLmggXAorICAgICAgICAgICAgZ2VuZXJhdG9ycy91bml4L3VuaXhtYWtlLmggbWV0YS5oIG9wdGlvbi5oIGNhY2hla2V5cy5oIFwKK0BAIC00MCw4ICszOSw3IEBAIEhFQURFUlMgKz0gcHJvamVjdC5oIHByb3BlcnR5LmggZ2VuZXJhdG9ycy9tYWtlZmlsZS5oIFwKKyAgICAgICAgICAgIGdlbmVyYXRvcnMvc3ltYmlhbi9pbml0cHJvamVjdGRlcGxveV9zeW1iaWFuLmggXAorICAgICAgICAgICAgZ2VuZXJhdG9ycy9pbnRlZ3JpdHkvZ2J1aWxkLmggXAorICAgICAgICAgICAgd2luZG93cy9yZWdpc3RyeV9wLmggXAorLSAgICAgICAgICAgc3ltYmlhbi9lcG9jcm9vdF9wLmggXAorLSAgICAgICAgICAgZ2VuZXJhdG9ycy9pbnRlZ3JpdHkvZ2J1aWxkLmgKKysgICAgICAgICAgIHN5bWJpYW4vZXBvY3Jvb3RfcC5oCisgCisgY29udGFpbnMoUVRfRURJVElPTiwgT3BlblNvdXJjZSkgeworICAgIERFRklORVMgKz0gUU1BS0VfT1BFTlNPVVJDRV9FRElUSU9OCitAQCAtNzIsNiArNzAsOCBAQCBib290c3RyYXAgeyAjUXQgY29kZQorICAgICAgICAgcWxpc3QuY3BwIFwKKyAgICAgICAgIHFsaW5rZWRsaXN0LmNwcCBcCisgICAgICAgICBxbG9jYWxlLmNwcCBcCisrICAgICAgICBxbG9jYWxlX3Rvb2xzLmNwcCBcCisrICAgICAgICBxbG9jYWxlX3VuaXguY3BwIFwKKyAgICAgICAgIHFtYWxsb2MuY3BwIFwKKyAgICAgICAgIHFtYXAuY3BwIFwKKyAgICAgICAgIHFtZXRhdHlwZS5jcHAgXAorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTAtY29uZmlndXJlLUhhY2stdG8tbm90LXVzZS10aGUtcGdfY29uZmlnLW9mLXRoZS1ob3N0LS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMC1jb25maWd1cmUtSGFjay10by1ub3QtdXNlLXRoZS1wZ19jb25maWctb2YtdGhlLWhvc3QtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNmEwYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTAtY29uZmlndXJlLUhhY2stdG8tbm90LXVzZS10aGUtcGdfY29uZmlnLW9mLXRoZS1ob3N0LS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDQ4ODg3OTFkMTg5OWY3ODFhZjcxMGRkODgxMzg4N2RlYTUyZmRhNTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb2xnZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDozNjozOCArMDIwMAorU3ViamVjdDogW1BBVENIIDEwLzIxXSBjb25maWd1cmU6IEhhY2sgdG8gbm90IHVzZSB0aGUgcGdfY29uZmlnIG9mIHRoZSBob3N0Cisgc3lzdGVtIHdoaWNoIHdpbGwgYWRkIC91c3IvaW5jbHVkZQorCitwZ19jb25maWcgaXMgYSBuYXRpdmUgYmluYXJ5IHNvIHVzaW5nIHRoYXQgd2hlbiBjcm9zcyBjb21waWxpbmcKK3dpbGwgYWx3YXlzIGZhaWwuICBUaGUgY29tbWVudGVkIG91dCBmaXggd291bGQgZG8sIGJ1dCBmb3IgT0UKK291ciAtcGxhdGZvcm0gYW5kIC14cGxhdGZvcm0gaXMgdGhlIHNhbWUgc28gd2UgYXJlIGFjdHVhbGx5IG5vdAorcmVhbGx5IGNyb3NzIGNvbXBpbGluZy4gSnVzdCBjb21tZW50IG91dCB0aGUgdGVzdCwgd2UgYXJlIHBhc3NpbmcKK3RoZSBsb2NhdGlvbiB0byB0aGUgcG9zdGdyZXMgaGVhZGVycyBhbmQgaWYgdGhleSBhcmUgb2theSB3ZQord2lsbCBwYWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCitVcGRhdGUgZm9yIHF0IDQuOC43LgorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBkYjRkMDQ0Li4zNWE4ZmU3IDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC01NTc0LDEwICs1NTc0LDEwIEBACisgICAgICAgICAgICAgaWYgWyAiJENGR19TUUxfcHNxbCIgIT0gIm5vIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgIFsgLXogIiRDRkdfUFNRTF9DT05GSUciIF0gJiYgQ0ZHX1BTUUxfQ09ORklHPWAiJFdISUNIIiBwZ19jb25maWdgCisgICAgICAgICAgICAgICAgICMgQmUgY2FyZWZ1bCBub3QgdG8gdXNlIG5hdGl2ZSBwZ19jb25maWcgd2hlbiBjcm9zcyBidWlsZGluZy4KKy0gICAgICAgICAgICAgICAgaWYgWyAiJFhQTEFURk9STV9NSU5HVyIgIT0gInllcyIgXSAmJiBbIC14ICIkQ0ZHX1BTUUxfQ09ORklHIiBdOyB0aGVuCistICAgICAgICAgICAgICAgICAgICBRVF9DRkxBR1NfUFNRTD1gJENGR19QU1FMX0NPTkZJRyAtLWluY2x1ZGVkaXIgMj4vZGV2L251bGxgCistICAgICAgICAgICAgICAgICAgICBRVF9MRkxBR1NfUFNRTD1gJENGR19QU1FMX0NPTkZJRyAtLWxpYmRpciAyPi9kZXYvbnVsbGAKKy0gICAgICAgICAgICAgICAgZmkKKysjICAgICAgICAgICAgICAgIGlmIFsgIiRYUExBVEZPUk1fTUlOR1ciICE9ICJ5ZXMiIF0gJiYgWyAteCAiJENGR19QU1FMX0NPTkZJRyIgXTsgdGhlbgorKyMgICAgICAgICAgICAgICAgICAgIFFUX0NGTEFHU19QU1FMPWAkQ0ZHX1BTUUxfQ09ORklHIC0taW5jbHVkZWRpciAyPi9kZXYvbnVsbGAKKysjICAgICAgICAgICAgICAgICAgICBRVF9MRkxBR1NfUFNRTD1gJENGR19QU1FMX0NPTkZJRyAtLWxpYmRpciAyPi9kZXYvbnVsbGAKKysjICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgIFsgLXogIiRRVF9DRkxBR1NfUFNRTCIgXSB8fCBRVF9DRkxBR1NfUFNRTD0iLUkkUVRfQ0ZMQUdTX1BTUUwiCisgICAgICAgICAgICAgICAgIFsgLXogIiRRVF9MRkxBR1NfUFNRTCIgXSB8fCBRVF9MRkxBR1NfUFNRTD0iLUwkUVRfTEZMQUdTX1BTUUwiCisgICAgICAgICAgICAgICAgICMgQnV0LCByZXNwZWN0IFBTUUxfTElCUyBpZiBzZXQKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDExLWZyZWV0eXBlLWhvc3QtaW5jbHVkZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTEtZnJlZXR5cGUtaG9zdC1pbmNsdWRlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDg3OWM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDExLWZyZWV0eXBlLWhvc3QtaW5jbHVkZXMucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSAzZmNmZmE3OWU2YTVmMDQ0OGNiZmUyYmIzM2ZlMTIxOGY1ZGFlNjFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWljaGFlbCBLcmVsaW4gPGhhY2tlckBrbGV2ZXIubmV0PgorRGF0ZTogTW9uLCA0IEp1biAyMDA3IDE0OjQ4OjUwICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMjFdIGZyZWV0eXBlIGhvc3QgaW5jbHVkZXMKKworSG9zdCBpbmNsdWRlIHBhdGggc2hvdWxkIG5vdCBiZSB1c2VkIGluIGNyb3NzIGNvbXBpbGluZyBjYXNlLgorCitQb3J0ZWQgZnJvbSBPRSBieTogWXUgS2UgPGtlLnl1QGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWcudGVzdHMvdW5peC9mcmVldHlwZS9mcmVldHlwZS5wcmkgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWcudGVzdHMvdW5peC9mcmVldHlwZS9mcmVldHlwZS5wcmkgYi9jb25maWcudGVzdHMvdW5peC9mcmVldHlwZS9mcmVldHlwZS5wcmkKK2luZGV4IDdlZjFjZjkuLmIzNjJmY2QgMTAwNjQ0CistLS0gYS9jb25maWcudGVzdHMvdW5peC9mcmVldHlwZS9mcmVldHlwZS5wcmkKKysrKyBiL2NvbmZpZy50ZXN0cy91bml4L2ZyZWV0eXBlL2ZyZWV0eXBlLnByaQorQEAgLTEsNSArMSw1IEBACisgIWNyb3NzX2NvbXBpbGUgeworLSAgICBUUllfSU5DTFVERVBBVEhTID0gL2luY2x1ZGUgL3Vzci9pbmNsdWRlICQkUU1BS0VfSU5DRElSICQkUU1BS0VfSU5DRElSX1gxMSAkJElOQ0xVREVQQVRICisrICAgIFRSWV9JTkNMVURFUEFUSFMgPSAkJFFNQUtFX0lOQ0RJUiAkJFFNQUtFX0lOQ0RJUl9YMTEgJCRJTkNMVURFUEFUSAorICAgICAjIExTQiBkb2Vzbid0IGFsbG93IHVzaW5nIGhlYWRlcnMgZnJvbSAvaW5jbHVkZSBvciAvdXNyL2luY2x1ZGUKKyAgICAgbGludXgtbHNiLWcrKzpUUllfSU5DTFVERVBBVEhTID0gJCRRTUFLRV9JTkNESVIgJCRRTUFLRV9JTkNESVJfWDExICQkSU5DTFVERVBBVEgKKyAgICAgZm9yKHAsIFRSWV9JTkNMVURFUEFUSFMpIHsKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEyLUFkZC0yYnBwLXN1cHBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTItQWRkLTJicHAtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTQxMWYzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEyLUFkZC0yYnBwLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwzMTggQEAKK0Zyb20gODc0NDI3M2ZjNDUyZWI1NGJiZWViN2QxNTgyMzAwOWNlOTI2YzZmYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9KZXJlbXk9MjBMYWluPUMzPUE5Pz0gPGplcmVteS5sYWluZUBtNHgub3JnPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDozOToyMSArMDIwMAorU3ViamVjdDogW1BBVENIIDEyLzIxXSBBZGQgMmJwcCBzdXBwb3J0CisKK1N1Ym1pdHRlZCB1cHN0cmVhbSBidXQgcmVqZWN0ZWQgYXMgYmVpbmcgIm91dCBvZiBzY29wZSI6CitodHRwczovL2J1Z3JlcG9ydHMucXQtcHJvamVjdC5vcmcvYnJvd3NlL1FUQlVHLTM0NjgKKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1ICstCisgc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVuX3F3cy5jcHAgICAgICAgIHwgMjExICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVubGludXhmYl9xd3MuY3BwIHwgICA0ICstCisgMyBmaWxlcyBjaGFuZ2VkLCAyMTYgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggMzVhOGZlNy4uNzljMWM3YiAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzA2Myw2ICs3MDYzLDcgQEAgaWYgWyAiJENGR19RV1NfREVQVEhTIiA9ICJwcm9tcHRlZCIgLWEgIiRQUk9NUFRfRk9SX0RFUFRIUyIgPSAieWVzIiBdOyB0aGVuCisgICAgIGVjaG8gIkNob29zZSBwaXhlbC1kZXB0aHMgdG8gc3VwcG9ydDoiCisgICAgIGVjaG8KKyAgICAgZWNobyAiICAgMS4gMWJwcCwgYmxhY2svd2hpdGUiCisrICAgIGVjaG8gIiAgIDIuIDJicHAsIGdyYXlzY2FsZSIKKyAgICAgZWNobyAiICAgNC4gNGJwcCwgZ3JheXNjYWxlIgorICAgICBlY2hvICIgICA4LiA4YnBwLCBwYWxldHRlZCIKKyAgICAgZWNobyAiICAxMi4gMTJicHAsIHJnYiA0LTQtNCIKK0BAIC03MDgxLDExICs3MDgyLDExIEBAIGlmIFsgIiRDRkdfUVdTX0RFUFRIUyIgPSAicHJvbXB0ZWQiIC1hICIkUFJPTVBUX0ZPUl9ERVBUSFMiID0gInllcyIgXTsgdGhlbgorIGZpCisgaWYgWyAtbiAiJENGR19RV1NfREVQVEhTIiAtYSAiJFBMQVRGT1JNX1FXUyIgPSAieWVzIiBdOyB0aGVuCisgICAgIGlmIFsgIiRDRkdfUVdTX0RFUFRIUyIgPSAiYWxsIiBdOyB0aGVuCistICAgICAgICBDRkdfUVdTX0RFUFRIUz0iMSA0IDggMTIgMTUgMTYgMTggMjQgMzIgZ2VuZXJpYyIKKysgICAgICAgIENGR19RV1NfREVQVEhTPSIxIDIgNCA4IDEyIDE1IDE2IDE4IDI0IDMyIGdlbmVyaWMiCisgICAgIGZpCisgICAgIGZvciBEIGluIGBlY2hvICIkQ0ZHX1FXU19ERVBUSFMiIHwgc2VkIC1lICdzLywvIC9nJ2A7IGRvCisgCWNhc2UgJEQgaW4KKy0JICAgIDF8NHw4fDEyfDE1fDE2fDE4fDI0fDMyKSBRQ09ORklHX0ZMQUdTPSIkUUNPTkZJR19GTEFHUyBRVF9RV1NfREVQVEhfJEQiOzsKKysJICAgIDF8Mnw0fDh8MTJ8MTV8MTZ8MTh8MjR8MzIpIFFDT05GSUdfRkxBR1M9IiRRQ09ORklHX0ZMQUdTIFFUX1FXU19ERVBUSF8kRCI7OworIAkgICAgZ2VuZXJpYykgUUNPTkZJR19GTEFHUz0iJFFDT05GSUdfRkxBR1MgUVRfUVdTX0RFUFRIX0dFTkVSSUMiOzsKKyAJZXNhYworICAgICBkb25lCitkaWZmIC0tZ2l0IGEvc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVuX3F3cy5jcHAgYi9zcmMvZ3VpL2VtYmVkZGVkL3FzY3JlZW5fcXdzLmNwcAoraW5kZXggYjMwN2JmMi4uODg5NTBiMyAxMDA2NDQKKy0tLSBhL3NyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbl9xd3MuY3BwCisrKysgYi9zcmMvZ3VpL2VtYmVkZGVkL3FzY3JlZW5fcXdzLmNwcAorQEAgLTQ2OSw2ICs0NjksNTggQEAgc3RhdGljIHZvaWQgc29saWRGaWxsX2dyYXk0KFFTY3JlZW4gKnNjcmVlbiwgY29uc3QgUUNvbG9yICZjb2xvciwKKyB9CisgI2VuZGlmIC8vIFFUX1FXU19ERVBUSF80CisgCisrI2lmZGVmIFFUX1FXU19ERVBUSF8yCisrc3RhdGljIGlubGluZSB2b2lkIHF0X3JlY3RmaWxsX2dyYXkyKHF1aW50OCAqZGVzdCwgcXVpbnQ4IHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmlkZSkKKyt7CisrICAgIGNvbnN0IGludCBwaXhlbHNQZXJCeXRlID0gNDsKKysgICAgY29uc3QgaW50IGFsaWduV2lkdGggPSBxTWluKHdpZHRoLCAoNCAtICh4ICYgMykpICYgMyk7CisrICAgIGNvbnN0IGludCBkb0FsaWduID0gKGFsaWduV2lkdGggPiAwID8gMSA6IDApOworKyAgICBjb25zdCBpbnQgYWxpZ25TdGFydCA9IHBpeGVsc1BlckJ5dGUgLSAxIC0gKHggJiAzKTsKKysgICAgY29uc3QgaW50IGFsaWduU3RvcCA9IGFsaWduU3RhcnQgLSAoYWxpZ25XaWR0aCAtIDEpOworKyAgICBjb25zdCBxdWludDggYWxpZ25NYXNrID0gKCgxIDw8ICgyICogYWxpZ25XaWR0aCkpIC0gMSkgPDwgKDIgKiBhbGlnblN0b3ApOworKyAgICBjb25zdCBpbnQgdGFpbFdpZHRoID0gKHdpZHRoIC0gYWxpZ25XaWR0aCkgJiAzOworKyAgICBjb25zdCBpbnQgZG9UYWlsID0gKHRhaWxXaWR0aCA+IDAgPyAxIDogMCk7CisrICAgIGNvbnN0IHF1aW50OCB0YWlsTWFzayA9ICgxIDw8ICgyICogKHBpeGVsc1BlckJ5dGUgLSB0YWlsV2lkdGgpKSkgLSAxOworKyAgICBjb25zdCBpbnQgd2lkdGg4ID0gKHdpZHRoIC0gYWxpZ25XaWR0aCkgLyBwaXhlbHNQZXJCeXRlOworKworKyAgICBkZXN0ICs9IHkgKiBzdHJpZGUgKyB4IC8gcGl4ZWxzUGVyQnl0ZTsKKysgICAgc3RyaWRlIC09IChkb0FsaWduICsgd2lkdGg4KTsKKysKKysgICAgZm9yIChpbnQgaiA9IDA7IGogPCBoZWlnaHQ7ICsraikgeworKyAgICAgICAgaWYgKGRvQWxpZ24pIHsKKysgICAgICAgICAgICAqZGVzdCA9ICgqZGVzdCAmIH5hbGlnbk1hc2spIHwgKHZhbHVlICYgYWxpZ25NYXNrKTsKKysgICAgICAgICAgICArK2Rlc3Q7CisrICAgICAgICB9CisrICAgICAgICBpZiAod2lkdGg4KSB7CisrICAgICAgICAgICAgcXRfbWVtZmlsbDxxdWludDg+KGRlc3QsIHZhbHVlLCB3aWR0aDgpOworKyAgICAgICAgICAgIGRlc3QgKz0gd2lkdGg4OworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGRvVGFpbCkKKysgICAgICAgICAgICAqZGVzdCA9ICgqZGVzdCAmIHRhaWxNYXNrKSB8ICh2YWx1ZSAmIH50YWlsTWFzayk7CisrICAgICAgICBkZXN0ICs9IHN0cmlkZTsKKysgICAgfQorK30KKysKKytzdGF0aWMgdm9pZCBzb2xpZEZpbGxfZ3JheTIoUVNjcmVlbiAqc2NyZWVuLCBjb25zdCBRQ29sb3IgJmNvbG9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRUmVnaW9uICZyZWdpb24pCisreworKyAgICBxdWludDggKmRlc3QgPSByZWludGVycHJldF9jYXN0PHF1aW50OCo+KHNjcmVlbi0+YmFzZSgpKTsKKysgICAgY29uc3QgcXVpbnQ4IGMgPSBxR3JheShjb2xvci5yZ2JhKCkpID4+IDY7CisrICAgIGNvbnN0IHF1aW50OCBjOCA9IChjIDw8IDYpIHwgKGMgPDwgNCkgfCAoYyA8PCAyKSB8IGM7CisrCisrICAgIGNvbnN0IGludCBzdHJpZGUgPSBzY3JlZW4tPmxpbmVzdGVwKCk7CisrICAgIGNvbnN0IFFWZWN0b3I8UVJlY3Q+IHJlY3RzID0gcmVnaW9uLnJlY3RzKCk7CisrCisrICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kpIHsKKysgICAgICAgIGNvbnN0IFFSZWN0IHIgPSByZWN0cy5hdChpKTsKKysgICAgICAgIHF0X3JlY3RmaWxsX2dyYXkyKGRlc3QsIGM4LCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlkZSk7CisrICAgIH0KKyt9CisrI2VuZGlmIC8vIFFUX1FXU19ERVBUSF8yCisrCisgI2lmZGVmIFFUX1FXU19ERVBUSF8xCisgc3RhdGljIGlubGluZSB2b2lkIHF0X3JlY3RmaWxsX21vbm8ocXVpbnQ4ICpkZXN0LCBxdWludDggdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCitAQCAtNTc2LDYgKzYyOCwxMSBAQCB2b2lkIHF0X3NvbGlkRmlsbF9zZXR1cChRU2NyZWVuICpzY3JlZW4sIGNvbnN0IFFDb2xvciAmY29sb3IsCisgICAgICAgICBzY3JlZW4tPmRfcHRyLT5zb2xpZEZpbGwgPSBzb2xpZEZpbGxfZ3JheTQ7CisgICAgICAgICBicmVhazsKKyAjZW5kaWYKKysjaWZkZWYgUVRfUVdTX0RFUFRIXzIKKysgICAgY2FzZSAyOgorKyAgICAgICAgc2NyZWVuLT5kX3B0ci0+c29saWRGaWxsID0gc29saWRGaWxsX2dyYXkyOworKyAgICAgICAgYnJlYWs7CisrI2VuZGlmCisgI2lmZGVmIFFUX1FXU19ERVBUSF8xCisgICAgIGNhc2UgMToKKyAgICAgICAgIHNjcmVlbi0+ZF9wdHItPnNvbGlkRmlsbCA9IHNvbGlkRmlsbF9tb25vOworQEAgLTEwMDYsNiArMTA2MywxNDkgQEAgc3RhdGljIHZvaWQgYmxpdF80KFFTY3JlZW4gKnNjcmVlbiwgY29uc3QgUUltYWdlICZpbWFnZSwKKyB9CisgI2VuZGlmIC8vIFFUX1FXU19ERVBUSF80CisgCisrI2lmZGVmIFFUX1FXU19ERVBUSF8yCisrCisrc3RydWN0IHFncmF5MiB7IHF1aW50OCBkdW1teTsgfSBRX1BBQ0tFRDsKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgU1JDPgorK3N0YXRpYyBpbmxpbmUgcXVpbnQ4IHF0X2NvbnZlcnRUb0dyYXkyKFNSQyBjb2xvcik7CisrCisrdGVtcGxhdGUgPD4KKytpbmxpbmUgcXVpbnQ4IHF0X2NvbnZlcnRUb0dyYXkyKHF1aW50MzIgY29sb3IpCisreworKyAgICByZXR1cm4gcUdyYXkoY29sb3IpID4+IDY7CisrfQorKworK3RlbXBsYXRlIDw+CisraW5saW5lIHF1aW50OCBxdF9jb252ZXJ0VG9HcmF5MihxdWludDE2IGNvbG9yKQorK3sKKysgICAgY29uc3QgaW50IHIgPSAoY29sb3IgJiAweGY4MDApID4+IDExOworKyAgICBjb25zdCBpbnQgZyA9IChjb2xvciAmIDB4MDdlMCkgPj4gNjsgLy8gb25seSBrZWVwIDUgYml0CisrICAgIGNvbnN0IGludCBiID0gKGNvbG9yICYgMHgwMDFmKTsKKysgICAgcmV0dXJuIChyICogMTEgKyBnICogMTYgKyBiICogNSkgPj4gODsKKyt9CisrCisrdGVtcGxhdGUgPD4KKytpbmxpbmUgcXVpbnQ4IHF0X2NvbnZlcnRUb0dyYXkyKHFyZ2I0NDQgY29sb3IpCisreworKyAgICByZXR1cm4gcXRfY29udmVydFRvR3JheTIocXVpbnQzMihjb2xvcikpOworK30KKysKKyt0ZW1wbGF0ZSA8PgorK2lubGluZSBxdWludDggcXRfY29udmVydFRvR3JheTIocWFyZ2I0NDQ0IGNvbG9yKQorK3sKKysgICAgcmV0dXJuIHF0X2NvbnZlcnRUb0dyYXkyKHF1aW50MzIoY29sb3IpKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFNSQz4KKytzdGF0aWMgaW5saW5lIHZvaWQgcXRfcmVjdGNvbnZlcnRfZ3JheTIocWdyYXkyICpkZXN0MiwgY29uc3QgU1JDICpzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHN0U3RyaWRlLCBpbnQgc3JjU3RyaWRlKQorK3sKKysgICAgY29uc3QgaW50IHBpeGVsc1BlckJ5dGUgPSA0OworKyAgICBxdWludDggKmRlc3Q4ID0gcmVpbnRlcnByZXRfY2FzdDxxdWludDgqPihkZXN0MikKKysgICAgICAgICAgICAgICAgICAgICsgeSAqIGRzdFN0cmlkZSArIHggLyBwaXhlbHNQZXJCeXRlOworKyAgICBjb25zdCBpbnQgYWxpZ25XaWR0aCA9IHFNaW4od2lkdGgsICg0IC0gKHggJiAzKSkgJiAzKTsKKysgICAgY29uc3QgaW50IGRvQWxpZ24gPSAoYWxpZ25XaWR0aCA+IDAgPyAxIDogMCk7CisrICAgIGNvbnN0IGludCBhbGlnblN0YXJ0ID0gcGl4ZWxzUGVyQnl0ZSAtIDEgLSAoeCAmIDMpOworKyAgICBjb25zdCBpbnQgYWxpZ25TdG9wID0gYWxpZ25TdGFydCAtIChhbGlnbldpZHRoIC0gMSk7CisrICAgIGNvbnN0IHF1aW50OCBhbGlnbk1hc2sgPSAoKDEgPDwgKDIgKiBhbGlnbldpZHRoKSkgLSAxKSA8PCAoMiAqIGFsaWduU3RvcCk7CisrICAgIGNvbnN0IGludCB0YWlsV2lkdGggPSAod2lkdGggLSBhbGlnbldpZHRoKSAmIDM7CisrICAgIGNvbnN0IGludCBkb1RhaWwgPSAodGFpbFdpZHRoID4gMCA/IDEgOiAwKTsKKysgICAgY29uc3QgcXVpbnQ4IHRhaWxNYXNrID0gKDEgPDwgKDIgKiAocGl4ZWxzUGVyQnl0ZSAtIHRhaWxXaWR0aCkpKSAtIDE7CisrICAgIGNvbnN0IGludCB3aWR0aDggPSAod2lkdGggLSBhbGlnbldpZHRoKSAvIHBpeGVsc1BlckJ5dGU7CisrCisrICAgIHNyY1N0cmlkZSA9IHNyY1N0cmlkZSAvIHNpemVvZihTUkMpIC0gKHdpZHRoOCAqIHBpeGVsc1BlckJ5dGUgKyBhbGlnbldpZHRoKTsKKysgICAgZHN0U3RyaWRlIC09ICh3aWR0aDggKyBkb0FsaWduKTsKKysKKysgICAgZm9yIChpbnQgaiA9IDA7ICBqIDwgaGVpZ2h0OyArK2opIHsKKysgICAgICAgIGlmIChkb0FsaWduKSB7CisrICAgICAgICAgICAgcXVpbnQ4IGQgPSAqZGVzdDggJiB+YWxpZ25NYXNrOworKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBhbGlnblN0YXJ0OyBpID49IGFsaWduU3RvcDsgLS1pKQorKyAgICAgICAgICAgICAgICBkIHw9IHF0X2NvbnZlcnRUb0dyYXkyPFNSQz4oKnNyYysrKSA8PCAoMiAqIGkpOworKyAgICAgICAgICAgICpkZXN0OCsrID0gZDsKKysgICAgICAgIH0KKysgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGg4OyArK2kpIHsKKysgICAgICAgICAgICAqZGVzdDggPSAocXRfY29udmVydFRvR3JheTI8U1JDPihzcmNbMF0pIDw8IDYpCisrICAgICAgICAgICAgICAgICAgICAgfCAocXRfY29udmVydFRvR3JheTI8U1JDPihzcmNbMV0pIDw8IDQpCisrICAgICAgICAgICAgICAgICAgICAgfCAocXRfY29udmVydFRvR3JheTI8U1JDPihzcmNbMl0pIDw8IDIpCisrICAgICAgICAgICAgICAgICAgICAgfCAocXRfY29udmVydFRvR3JheTI8U1JDPihzcmNbM10pKTsKKysgICAgICAgICAgICBzcmMgKz0gNDsKKysgICAgICAgICAgICArK2Rlc3Q4OworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGRvVGFpbCkgeworKyAgICAgICAgICAgIHF1aW50OCBkID0gKmRlc3Q4ICYgdGFpbE1hc2s7CisrICAgICAgICAgICAgc3dpdGNoICh0YWlsV2lkdGgpIHsKKysgICAgICAgICAgICBjYXNlIDM6IGQgfD0gcXRfY29udmVydFRvR3JheTI8U1JDPihzcmNbMl0pIDw8IDI7CisrICAgICAgICAgICAgY2FzZSAyOiBkIHw9IHF0X2NvbnZlcnRUb0dyYXkyPFNSQz4oc3JjWzFdKSA8PCA0OworKyAgICAgICAgICAgIGNhc2UgMTogZCB8PSBxdF9jb252ZXJ0VG9HcmF5MjxTUkM+KHNyY1swXSkgPDwgNjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgKmRlc3Q4ID0gZDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGRlc3Q4ICs9IGRzdFN0cmlkZTsKKysgICAgICAgIHNyYyArPSBzcmNTdHJpZGU7CisrICAgIH0KKyt9CisrCisrdGVtcGxhdGUgPD4KKyt2b2lkIHF0X3JlY3Rjb252ZXJ0KHFncmF5MiAqZGVzdCwgY29uc3QgcXVpbnQzMiAqc3JjLAorKyAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICBpbnQgZHN0U3RyaWRlLCBpbnQgc3JjU3RyaWRlKQorK3sKKysgICAgcXRfcmVjdGNvbnZlcnRfZ3JheTI8cXVpbnQzMj4oZGVzdCwgc3JjLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RTdHJpZGUsIHNyY1N0cmlkZSk7CisrfQorKworK3RlbXBsYXRlIDw+Cisrdm9pZCBxdF9yZWN0Y29udmVydChxZ3JheTIgKmRlc3QsIGNvbnN0IHF1aW50MTYgKnNyYywKKysgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgaW50IGRzdFN0cmlkZSwgaW50IHNyY1N0cmlkZSkKKyt7CisrICAgIHF0X3JlY3Rjb252ZXJ0X2dyYXkyPHF1aW50MTY+KGRlc3QsIHNyYywgeCwgeSwgd2lkdGgsIGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0U3RyaWRlLCBzcmNTdHJpZGUpOworK30KKysKKyt0ZW1wbGF0ZSA8PgorK3ZvaWQgcXRfcmVjdGNvbnZlcnQocWdyYXkyICpkZXN0LCBjb25zdCBxcmdiNDQ0ICpzcmMsCisrICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgIGludCBkc3RTdHJpZGUsIGludCBzcmNTdHJpZGUpCisreworKyAgICBxdF9yZWN0Y29udmVydF9ncmF5MjxxcmdiNDQ0PihkZXN0LCBzcmMsIHgsIHksIHdpZHRoLCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFN0cmlkZSwgc3JjU3RyaWRlKTsKKyt9CisrCisrdGVtcGxhdGUgPD4KKyt2b2lkIHF0X3JlY3Rjb252ZXJ0KHFncmF5MiAqZGVzdCwgY29uc3QgcWFyZ2I0NDQ0ICpzcmMsCisrICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgIGludCBkc3RTdHJpZGUsIGludCBzcmNTdHJpZGUpCisreworKyAgICBxdF9yZWN0Y29udmVydF9ncmF5MjxxYXJnYjQ0NDQ+KGRlc3QsIHNyYywgeCwgeSwgd2lkdGgsIGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RTdHJpZGUsIHNyY1N0cmlkZSk7CisrfQorKworK3N0YXRpYyB2b2lkIGJsaXRfMihRU2NyZWVuICpzY3JlZW4sIGNvbnN0IFFJbWFnZSAmaW1hZ2UsCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IFFQb2ludCAmdG9wTGVmdCwgY29uc3QgUVJlZ2lvbiAmcmVnaW9uKQorK3sKKysgICAgc3dpdGNoIChpbWFnZS5mb3JtYXQoKSkgeworKyAgICBjYXNlIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkOgorKyAgICAgICAgYmxpdF90ZW1wbGF0ZTxxZ3JheTIsIHF1aW50MzI+KHNjcmVlbiwgaW1hZ2UsIHRvcExlZnQsIHJlZ2lvbik7CisrICAgICAgICByZXR1cm47CisrICAgIGNhc2UgUUltYWdlOjpGb3JtYXRfUkdCMTY6CisrICAgICAgICBibGl0X3RlbXBsYXRlPHFncmF5MiwgcXVpbnQxNj4oc2NyZWVuLCBpbWFnZSwgdG9wTGVmdCwgcmVnaW9uKTsKKysgICAgICAgIHJldHVybjsKKysgICAgY2FzZSBRSW1hZ2U6OkZvcm1hdF9SR0I0NDQ6CisrICAgICAgICBibGl0X3RlbXBsYXRlPHFncmF5MiwgcXJnYjQ0ND4oc2NyZWVuLCBpbWFnZSwgdG9wTGVmdCwgcmVnaW9uKTsKKysgICAgICAgIHJldHVybjsKKysgICAgY2FzZSBRSW1hZ2U6OkZvcm1hdF9BUkdCNDQ0NF9QcmVtdWx0aXBsaWVkOgorKyAgICAgICAgYmxpdF90ZW1wbGF0ZTxxZ3JheTIsIHFhcmdiNDQ0ND4oc2NyZWVuLCBpbWFnZSwgdG9wTGVmdCwgcmVnaW9uKTsKKysgICAgICAgIHJldHVybjsKKysgICAgZGVmYXVsdDoKKysgICAgICAgIHFDcml0aWNhbCgiYmxpdF8yKCk6IEltYWdlIGZvcm1hdCAlZCBub3Qgc3VwcG9ydGVkISIsIGltYWdlLmZvcm1hdCgpKTsKKysgICAgfQorK30KKysjZW5kaWYgLy8gUVRfUVdTX0RFUFRIXzIKKysKKyAjaWZkZWYgUVRfUVdTX0RFUFRIXzEKKyAKKyBzdHJ1Y3QgcW1vbm8geyBxdWludDggZHVtbXk7IH0gUV9QQUNLRUQ7CitAQCAtMTI1OSw2ICsxNDU5LDExIEBAIHZvaWQgcXRfYmxpdF9zZXR1cChRU2NyZWVuICpzY3JlZW4sIGNvbnN0IFFJbWFnZSAmaW1hZ2UsCisgICAgICAgICBzY3JlZW4tPmRfcHRyLT5ibGl0ID0gYmxpdF80OworICAgICAgICAgYnJlYWs7CisgI2VuZGlmCisrI2lmZGVmIFFUX1FXU19ERVBUSF8yCisrICAgIGNhc2UgMjoKKysgICAgICAgIHNjcmVlbi0+ZF9wdHItPmJsaXQgPSBibGl0XzI7CisrICAgICAgICBicmVhazsKKysjZW5kaWYKKyAjaWZkZWYgUVRfUVdTX0RFUFRIXzEKKyAgICAgY2FzZSAxOgorICAgICAgICAgc2NyZWVuLT5kX3B0ci0+YmxpdCA9IGJsaXRfMTsKK0BAIC0yMTQ2LDYgKzIzNTEsOCBAQCBpbnQgUVNjcmVlbjo6YWxsb2ModW5zaWduZWQgaW50IHIsdW5zaWduZWQgaW50IGcsdW5zaWduZWQgaW50IGIpCisgICAgICAgICB9CisgICAgIH0gZWxzZSBpZiAoZCA9PSA0KSB7CisgICAgICAgICByZXQgPSBxR3JheShyLCBnLCBiKSA+PiA0OworKyAgICB9IGVsc2UgaWYgKGQgPT0gMikgeworKyAgICAgICAgcmV0ID0gcUdyYXkociwgZywgYikgPj4gNjsKKyAgICAgfSBlbHNlIGlmIChkID09IDEpIHsKKyAgICAgICAgIHJldCA9IHFHcmF5KHIsIGcsIGIpID49IDEyODsKKyAgICAgfSBlbHNlIHsKK0BAIC0yMjE2LDYgKzI0MjMsMTAgQEAgYm9vbCBRU2NyZWVuOjpzdXBwb3J0c0RlcHRoKGludCBkKSBjb25zdAorICAgICB9IGVsc2UgaWYoZD09MSkgeworICAgICAgICAgcmV0dXJuIHRydWU7CisgI2VuZGlmCisrI2lmZGVmIFFUX1FXU19ERVBUSF8yCisrICAgIH0gZWxzZSBpZihkPT0yKSB7CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysjZW5kaWYKKyAjaWZkZWYgUVRfUVdTX0RFUFRIXzQKKyAgICAgfSBlbHNlIGlmKGQ9PTQpIHsKKyAgICAgICAgIHJldHVybiB0cnVlOworZGlmZiAtLWdpdCBhL3NyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbmxpbnV4ZmJfcXdzLmNwcCBiL3NyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbmxpbnV4ZmJfcXdzLmNwcAoraW5kZXggNmYzY2FhZC4uMTQxNTllZSAxMDA2NDQKKy0tLSBhL3NyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbmxpbnV4ZmJfcXdzLmNwcAorKysrIGIvc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVubGludXhmYl9xd3MuY3BwCitAQCAtNDY2LDggKzQ2Niw4IEBAIGJvb2wgUUxpbnV4RmJTY3JlZW46OmNvbm5lY3QoY29uc3QgUVN0cmluZyAmZGlzcGxheVNwZWMpCisgICAgICAgICBzZXR1cE9mZlNjcmVlbigpOworIAorICAgICAvLyBOb3cgcmVhZCBpbiBwYWxldHRlCistICAgIGlmKCh2aW5mby5iaXRzX3Blcl9waXhlbD09OCkgfHwgKHZpbmZvLmJpdHNfcGVyX3BpeGVsPT00KSkgeworLSAgICAgICAgc2NyZWVuY29scz0gKHZpbmZvLmJpdHNfcGVyX3BpeGVsPT04KSA/IDI1NiA6IDE2OworKyAgICBpZigodmluZm8uYml0c19wZXJfcGl4ZWw9PTgpIHx8ICh2aW5mby5iaXRzX3Blcl9waXhlbD09NCkgfHwgKHZpbmZvLmJpdHNfcGVyX3BpeGVsPT0yKSkgeworKyAgICAgICAgc2NyZWVuY29scz0gMSA8PCB2aW5mby5iaXRzX3Blcl9waXhlbDsKKyAgICAgICAgIGludCBsb29wYzsKKyAgICAgICAgIDo6ZmJfY21hcCBzdGFydGNtYXA7CisgICAgICAgICBzdGFydGNtYXAuc3RhcnQ9MDsKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEzLWNvbmZpZ3VyZS1hZGQtY3Jvc3NhcmNoLW9wdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMy1jb25maWd1cmUtYWRkLWNyb3NzYXJjaC1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYyY2RhZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMy1jb25maWd1cmUtYWRkLWNyb3NzYXJjaC1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorRnJvbSA1NDkzNDJmYTM4MGVkMmE5YWQ0MWJlM2QwNGVlMmYwNTg1ZjZhNDY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWljaGFlbCBMYXVlciA8bWlja2V5QHZhbmlsbGUtbWVkaWEuZGU+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjQxOjMyICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTMvMjFdIGNvbmZpZ3VyZTogYWRkICItY3Jvc3NhcmNoIiBvcHRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworVXBkYXRlIGZvciBxdCA0LjguNworCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDcgKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggNGViNGEzZC4uYTRkYWNlYyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtMTE2MCw3ICsxMTYwLDcgQEAgd2hpbGUgWyAiJCMiIC1ndCAwIF07IGRvCisgICAgICAgICBzaGlmdAorICAgICAgICAgVkFMPSQxCisgICAgICAgICA7OworLSAgICAtcHJlZml4fC1kb2NkaXJ8LWhlYWRlcmRpcnwtcGx1Z2luZGlyfC1pbXBvcnRkaXJ8LWRhdGFkaXJ8LWxpYmRpcnwtYmluZGlyfC10cmFuc2xhdGlvbmRpcnwtc3lzY29uZmRpcnwtZXhhbXBsZXNkaXJ8LWRlbW9zZGlyfC1kZXB0aHN8LW1ha2V8LW5vbWFrZXwtcGxhdGZvcm18LXhwbGF0Zm9ybXwtZGV2aWNlLW9wdGlvbnwtYnVpbGRrZXl8LXNka3wtYXJjaHwtaG9zdC1hcmNofC1teXNxbF9jb25maWd8LXBzcWxfY29uZmlnfC1zeXNyb290KQorKyAgICAtcHJlZml4fC1kb2NkaXJ8LWhlYWRlcmRpcnwtcGx1Z2luZGlyfC1pbXBvcnRkaXJ8LWRhdGFkaXJ8LWxpYmRpcnwtYmluZGlyfC10cmFuc2xhdGlvbmRpcnwtc3lzY29uZmRpcnwtZXhhbXBsZXNkaXJ8LWRlbW9zZGlyfC1kZXB0aHN8LW1ha2V8LW5vbWFrZXwtcGxhdGZvcm18LXhwbGF0Zm9ybXwtZGV2aWNlLW9wdGlvbnwtYnVpbGRrZXl8LXNka3wtYXJjaHwtaG9zdC1hcmNofC1teXNxbF9jb25maWd8LXBzcWxfY29uZmlnfC1zeXNyb290fC1jcm9zc2FyY2gpCisgICAgICAgICBWQVI9YGVjaG8gJDEgfCBzZWQgInMsXi1cKC4qXCksXDEsImAKKyAgICAgICAgIHNoaWZ0CisgICAgICAgICBWQUw9IiQxIgorQEAgLTE3MTksNiArMTcxOSw5IEBAIHdoaWxlIFsgIiQjIiAtZ3QgMCBdOyBkbworICAgICAgICAgREVWX1ZBTD1gZWNobyAkVkFMIHwgc2VkICJzLF4uKj1cKC4qXCksXDEsImAKKyAgICAgICAgIERldmljZVZhciBzZXQgJERFVl9WQVIgJERFVl9WQUwKKyAgICAgICAgIDs7CisrICAgIGNyb3NzYXJjaCkKKysgICAgICAgIENST1NTQVJDSD0iJFZBTCIKKysgICAgICAgIDs7CisgICAgIGRlYnVnLWFuZC1yZWxlYXNlKQorICAgICAgICAgaWYgWyAiJFZBTCIgPSAieWVzIiBdIHx8IFsgIiRWQUwiID0gIm5vIiBdOyB0aGVuCisgICAgICAgICAgICAgQ0ZHX0RFQlVHX1JFTEVBU0U9IiRWQUwiCitAQCAtMzMzMyw2ICszMzM2LDggQEAgYXJtKikKKyAgICAgOzsKKyBlc2FjCisgCisrQ0ZHX0FSQ0g9IiRDUk9TU0FSQ0giCisrCisgaWYgWyAtZCAiJHJlbHBhdGgvc3JjL2NvcmVsaWIvYXJjaC8kQ0ZHX0FSQ0giIF07IHRoZW4KKyAgICAgaWYgWyAiJE9QVF9WRVJCT1NFIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgIGVjaG8gIiAgICAnJENGR19BUkNIJyBpcyBzdXBwb3J0ZWQiCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNC10cmFuc2xhdGlvbnMtZml4LXBob255LXRyYW5zbGF0aW9uLWxpbmtpbmctZXJyb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTQtdHJhbnNsYXRpb25zLWZpeC1waG9ueS10cmFuc2xhdGlvbi1saW5raW5nLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NzI0YTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTQtdHJhbnNsYXRpb25zLWZpeC1waG9ueS10cmFuc2xhdGlvbi1saW5raW5nLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gMjFhZjhmNmQyMWIyOGE1MzA0MWFmZmIxMWI1OGQ2MzE2MDIzZmE5MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjQ1OjEwICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTQvMjFdIHRyYW5zbGF0aW9uczogZml4IHBob255IHRyYW5zbGF0aW9uIGxpbmtpbmcgZXJyb3IKKworICB8IC4uLi91c3IvbGliL2NydDEubzogSW4gZnVuY3Rpb24gYF9zdGFydCc6CisgIHwgLi4uLy4uL3N5c2RlcHMvaTM4Ni9lbGYvc3RhcnQuUzoxMTU6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYG1haW4nCisgIHwgY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHRyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMucHJvIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMucHJvIGIvdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy5wcm8KK2luZGV4IGRjOTliZWIuLjBkOTg4MjkgMTAwNjQ0CistLS0gYS90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb25zLnBybworKysrIGIvdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy5wcm8KK0BAIC0xMDEsNyArMTAxLDcgQEAgdXBkYXRlcW0ubmFtZSA9IExSRUxFQVNFICR7UU1BS0VfRklMRV9JTn0KKyB1cGRhdGVxbS5DT05GSUcgKz0gbm9fbGluaworIFFNQUtFX0VYVFJBX0NPTVBJTEVSUyArPSB1cGRhdGVxbQorIAorLWlzRW1wdHkodmNwcm9qKSB7CisrIWlzRW1wdHkodmNwcm9qKSB7CisgICAgIFFNQUtFX0xJTksgPSBAOiBJR05PUkUgVEhJUyBMSU5FCisgICAgIE9CSkVDVFNfRElSID0KKyAgICAgd2luMzI6Q09ORklHIC09IGVtYmVkX21hbmlmZXN0X2V4ZQorQEAgLTExMSw3ICsxMTEsNyBAQCBpc0VtcHR5KHZjcHJvaikgeworICAgICBwaG9ueV9zcmMuaW5wdXQgPSBQSE9OWV9ERVBTCisgICAgIHBob255X3NyYy5vdXRwdXQgPSBwaG9ueS5jCisgICAgIHBob255X3NyYy52YXJpYWJsZV9vdXQgPSBHRU5FUkFURURfU09VUkNFUworLSAgICBwaG9ueV9zcmMuY29tbWFuZHMgPSBlY2hvIGludCBtYWluKCkgeyByZXR1cm4gMDsgfSA+IHBob255LmMKKysgICAgcGhvbnlfc3JjLmNvbW1hbmRzID0gZWNobyBcImludCBtYWluKCkgeyByZXR1cm4gMDsgfVwiID4gcGhvbnkuYworICAgICBwaG9ueV9zcmMubmFtZSA9IENSRUFURSBwaG9ueS5jCisgICAgIHBob255X3NyYy5DT05GSUcgKz0gY29tYmluZQorICAgICBRTUFLRV9FWFRSQV9DT01QSUxFUlMgKz0gcGhvbnlfc3JjCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNS1jb25maWd1cmUtYWRkLW5vc3RyaXAtZm9yLWRlYnVnLXBhY2thZ2VzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE1LWNvbmZpZ3VyZS1hZGQtbm9zdHJpcC1mb3ItZGVidWctcGFja2FnZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVkYjQ5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNS1jb25maWd1cmUtYWRkLW5vc3RyaXAtZm9yLWRlYnVnLXBhY2thZ2VzLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gOTI1MGZlZDA4NmE0YThhNjQ1YTk3Mjc2NGE5YmYzNGU0NTY2ZWMyZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZhdGhpIEJvdWRyYSA8ZmFib0BkZWJpYW4ub3JnPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDo0NjoxNCArMDIwMAorU3ViamVjdDogW1BBVENIIDE1LzIxXSBjb25maWd1cmU6IGFkZCBub3N0cmlwIGZvciBkZWJ1ZyBwYWNrYWdlcworCitRdCBpcyBidWlsdCBpbiByZWxlYXNlIG1vZGUgYW5kIHN0cmlwIGZpbGVzIGJ5IGRlZmF1bHQuCitTZXQgQ09ORklHKz1ub3N0cmlwIHRvIGF2b2lkIHRoZSBzdHJpcHBpbmcgYW5kCitsZXQgZGhfc3RyaXAgZG8gaXQgdG8gZ2VuZXJhdGUgZGVidWcgcGFja2FnZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbQ29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggNzk4M2MzZC4uZDAyODI0YiAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzEwLDYgKzcxMCw4IEBAIG1rZGlyIC1wICIkb3V0cGF0aC9jb25maWcudGVzdHMiCisgcm0gLWYgIiRvdXRwYXRoL2NvbmZpZy50ZXN0cy8ucW1ha2UuY2FjaGUiCisgY3AgIiRRTUFLRV9WQVJTX0ZJTEUiICIkb3V0cGF0aC9jb25maWcudGVzdHMvLnFtYWtlLmNhY2hlIgorIAorK1FNYWtlVmFyIGFkZCBDT05GSUcgbm9zdHJpcAorKworIFFNYWtlVmFyIGFkZCBzdHlsZXMgImNkZSBtYWMgbW90aWYgcGxhc3RpcXVlIGNsZWFubG9va3Mgd2luZG93cyIKKyBRTWFrZVZhciBhZGQgZGVjb3JhdGlvbnMgImRlZmF1bHQgd2luZG93cyBzdHlsZWQiCisgUU1ha2VWYXIgYWRkIG1vdXNlLWRyaXZlcnMgInBjIgorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTYtY29uZmlndXJlLWV2YWwtUU1BS0VfQ1hYLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE2LWNvbmZpZ3VyZS1ldmFsLVFNQUtFX0NYWC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzNkZTQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE2LWNvbmZpZ3VyZS1ldmFsLVFNQUtFX0NYWC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIDg0MDM2MzRhNzFmMDY3ZWVjNTE0YjZkMjE5M2NmNDFlMjgxZGZmOGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6NDc6MDggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxNi8yMV0gY29uZmlndXJlOiBldmFsIFFNQUtFX0NYWAorCitBbGxvdyBleHBhbnNpb24gb2YgJCguLi4pIHJlZmVyZW5jZXMgaW4gUU1BS0VfQ1hYIChjdXJyZW50bHkgaXRzIHZhbHVlCitpcyAkKE9FX1FNQUtFX0NYWCkpIGluIG9yZGVyIHRvIGFsbG93IGNvbXBpbGVyIHZlcnNpb24gY2hlY2sgdG8gc3VjY2VlZAord2hpY2ggYWxsb3dzIFdlYktpdCB0byBiZSBlbmFibGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKK0NvbmZsaWN0czoKKwljb25maWd1cmUKKy0tLQorIGNvbmZpZ3VyZSB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBkMDI4MjRiLi44OTFkNmU3IDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0zNDA5LDcgKzM0MDksOCBAQCBlbHNlCisgICAgIENGR19GUkFNRVdPUks9bm8KKyBmaQorIAorLVFNQUtFX0NPTkZfQ09NUElMRVI9YGdldFhRTWFrZUNvbmYgUU1BS0VfQ1hYYAorK1FNQUtFX0NPTkZfQ09NUElMRVI9YGdldFhRTWFrZUNvbmYgUU1BS0VfQ1hYIHwgc2VkIC1uICdzLyRbKF1cKFswLTlhLXpBLVpfXSpcKVspXS8kXDEvcGcnYAorK1FNQUtFX0NPTkZfQ09NUElMRVI9YGV2YWwgImVjaG8gJFFNQUtFX0NPTkZfQ09NUElMRVIiYAorIFRFU1RfQ09NUElMRVI9IiRDWFgiCisgCisgWyAteiAiJFRFU1RfQ09NUElMRVIiIF0gJiYgVEVTVF9DT01QSUxFUj0kUU1BS0VfQ09ORl9DT01QSUxFUgorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTctY29uZmlndXJlLWVuc3VyZS13ZS1pZGVudGlmeS10aGUtY29tcGlsZXItYXMtZy1pbi1jby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNy1jb25maWd1cmUtZW5zdXJlLXdlLWlkZW50aWZ5LXRoZS1jb21waWxlci1hcy1nLWluLWNvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NzE5NjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTctY29uZmlndXJlLWVuc3VyZS13ZS1pZGVudGlmeS10aGUtY29tcGlsZXItYXMtZy1pbi1jby5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGQyYmI3MDFiNTUxNDAyZjBiZWZkZGQwZTkwNjQyMzU5NmJkYzBkZjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6NDg6MzcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxNy8yMV0gY29uZmlndXJlOiBlbnN1cmUgd2UgaWRlbnRpZnkgdGhlIGNvbXBpbGVyIGFzIGcrKyBpbgorIGNvbmZpZ3VyZQorCitPdXIgUExBVEZPUk0gaW4gT0UgaXMgJHtUQVJHRVRfT1N9LW9lLWcrKywgYW5kIHByZXZpb3VzbHkgdGhlIGNvbmZpZ3VyZQorc2NyaXB0IHdhcyBpbnRlcnByZXRpbmcgZnJvbSB0aGlzIHRoYXQgdGhlIGNvbXBpbGVyIHdhcyAib2UtZysrIiBhbmQKK3RodXMKK2crKyBzcGVjaWZpYyBjaGVja3Mgd2VyZSBub3QgYmVpbmcgcnVuIHNpbmNlIHRoaXMgc3RyaW5nIGRpZCBub3QgbWF0Y2g7CithbW9uZyBvdGhlciB0aGluZ3MgdGhpcyByZXN1bHRlZCBpbiBhIGNvbXBpbGVyIHZlcnNpb24gY2hlY2sgaW4gdGhlCitRdFdlYktpdCBidWlsZCBjb2RlIG5vdCB3b3JraW5nLCBhbmQgaGVuY2UgdGhlIGZvbGxvd2luZyBlcnJvciBhdCBidWlsZAordGltZToKKworLi93dGYvTnVsbFB0ci5oOjQ4OjE6IGVycm9yOiBpZGVudGlmaWVyICdudWxscHRyJyB3aWxsIGJlY29tZSBhIGtleXdvcmQKK2luIEMrKzB4IFstV2Vycm9yPWMrKzB4LWNvbXBhdF0KKworVGhlIGVhc2llc3QgdGhpbmcgc2luY2Ugb3VyIFBMQVRGT1JNIGlzIGVudGlyZWx5IGFydGlmaWNpYWwgaXMgdG8ganVzdAorZm9yY2UgQ09NUElMRVIgdG8gImcrKyIgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgaWYgaXQgaXMgZGV0ZWN0ZWQgYXMKKyJvZS1nKysiLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDg5MWQ2ZTcuLjcwMzE4OTggMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTc1OTIsNiArNzU5Miw5IEBAIGVsaWYgWyAiJFhQTEFURk9STSIgIT0gIiRQTEFURk9STSIgXTsgdGhlbgorIGVsc2UKKyAgICAgQ09NUElMRVI9YGVjaG8gJFBMQVRGT1JNIHwgY3V0IC1mIDItIC1kLWAKKyBmaQorK2Nhc2UgJENPTVBJTEVSIGluCisrICAgICpvZS1nKyspIENPTVBJTEVSPSJnKysiIDs7CisrZXNhYworIGlmIFsgIiRDRkdfRVhDRVBUSU9OUyIgPSAidW5zcGVjaWZpZWQiIC1hICIkUExBVEZPUk1fUVdTIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgQ0ZHX0VYQ0VQVElPTlM9bm8KKyBmaQorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTgtY29uZmlndXJlLW1ha2UtcHVsc2VhdWRpby1hLWNvbmZpZ3VyYWJsZS1vcHRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTgtY29uZmlndXJlLW1ha2UtcHVsc2VhdWRpby1hLWNvbmZpZ3VyYWJsZS1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTljZGQ0YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxOC1jb25maWd1cmUtbWFrZS1wdWxzZWF1ZGlvLWEtY29uZmlndXJhYmxlLW9wdGlvbi5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGQ2ZGMxYTdkNjU5NGQ3ZTM5NTM0NzczMmEzZTU1M2ZjODJjY2FiM2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMjggRmViIDIwMTIgMTU6MTA6MjQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxOC8yMV0gY29uZmlndXJlOiBtYWtlIHB1bHNlYXVkaW8gYSBjb25maWd1cmFibGUgb3B0aW9uCisKK0FsbG93cyBkaXNhYmxpbmcgcHVsc2VhdWRpbyBzdXBwb3J0IHdpdGhpbiBwaG9ub24gYXQgY29uZmlndXJlIHRpbWUuCisoVGhpcyBpcyB0aGUgUXQgNC44LjAgdmVyc2lvbi4pCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDkgKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA3MDMxODk4Li5hNGE0MmYxIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0xMTM5LDcgKzExMzksNyBAQCB3aGlsZSBbICIkIyIgLWd0IDAgXTsgZG8KKyAgICAgICAgIFZBTD1ubworICAgICAgICAgOzsKKyAgICAgI1F0IHN0eWxlIHllcyBvcHRpb25zCistICAgIC1pbmNyZW1lbnRhbHwtcXZmYnwtcHJvZmlsZXwtc2hhcmVkfC1zdGF0aWN8LXNtfC14aW5lcmFtYXwteHNoYXBlfC14c3luY3wteGlucHV0fC1lZ2x8LXJlZHVjZS1leHBvcnRzfC1wY2h8LXNlcGFyYXRlLWRlYnVnLWluZm98LXN0bHwtZnJlZXR5cGV8LXhjdXJzb3J8LXhmaXhlc3wteHJhbmRyfC14cmVuZGVyfC1taXRzaG18LWZvbnRjb25maWd8LXhrYnwtbmlzfC1xZGJ1c3wtZGJ1c3wtZGJ1cy1saW5rZWR8LWdsaWJ8LWdzdHJlYW1lcnwtZ3Rrc3R5bGV8LWN1cHN8LWljb252fC1sYXJnZWZpbGV8LWh8LWhlbHB8LXZ8LXZlcmJvc2V8LWRlYnVnfC1yZWxlYXNlfC1mYXN0fC1hY2Nlc3NpYmlsaXR5fC1jb25maXJtLWxpY2Vuc2V8LWdudW1ha2V8LWZyYW1ld29ya3wtcXQzc3VwcG9ydHwtZGVidWctYW5kLXJlbGVhc2V8LWV4Y2VwdGlvbnN8LWNvY29hfC1jYXJib258LXVuaXZlcnNhbHwtaGFyZmJ1enp8LXByZWZpeC1pbnN0YWxsfC1zaWxlbnR8LWFybWZwYXwtb3B0aW1pemVkLXFtYWtlfC1kd2FyZjJ8LXJlZHVjZS1yZWxvY2F0aW9uc3wtc3NlfC1vcGVuc3NsfC1vcGVuc3NsLWxpbmtlZHwtcHRtYWxsb2N8LXhtbHBhdHRlcm5zfC1waG9ub258LXBob25vbi1iYWNrZW5kfC1tdWx0aW1lZGlhfC1hdWRpby1iYWNrZW5kfC1zdmd8LWRlY2xhcmF0aXZlfC1kZWNsYXJhdGl2ZS1kZWJ1Z3wtamF2YXNjcmlwdC1qaXR8LXNjcmlwdHwtc2NyaXB0dG9vbHN8LXJwYXRofC1mb3JjZS1wa2ctY29uZmlnfC1zNjB8LXVzZWRlZmZpbGVzfC1pY3UpCisrICAgIC1pbmNyZW1lbnRhbHwtcXZmYnwtcHJvZmlsZXwtc2hhcmVkfC1zdGF0aWN8LXNtfC14aW5lcmFtYXwteHNoYXBlfC14c3luY3wteGlucHV0fC1lZ2x8LXJlZHVjZS1leHBvcnRzfC1wY2h8LXNlcGFyYXRlLWRlYnVnLWluZm98LXN0bHwtZnJlZXR5cGV8LXhjdXJzb3J8LXhmaXhlc3wteHJhbmRyfC14cmVuZGVyfC1taXRzaG18LWZvbnRjb25maWd8LXhrYnwtbmlzfC1xZGJ1c3wtZGJ1c3wtZGJ1cy1saW5rZWR8LWdsaWJ8LWdzdHJlYW1lcnwtcHVsc2VhdWRpb3wtZ3Rrc3R5bGV8LWN1cHN8LWljb252fC1sYXJnZWZpbGV8LWh8LWhlbHB8LXZ8LXZlcmJvc2V8LWRlYnVnfC1yZWxlYXNlfC1mYXN0fC1hY2Nlc3NpYmlsaXR5fC1jb25maXJtLWxpY2Vuc2V8LWdudW1ha2V8LWZyYW1ld29ya3wtcXQzc3VwcG9ydHwtZGVidWctYW5kLXJlbGVhc2V8LWV4Y2VwdGlvbnN8LWNvY29hfC1jYXJib258LXVuaXZlcnNhbHwtaGFyZmJ1enp8LXByZWZpeC1pbnN0YWxsfC1zaWxlbnR8LWFybWZwYXwtb3B0aW1pemVkLXFtYWtlfC1kd2FyZjJ8LXJlZHVjZS1yZWxvY2F0aW9uc3wtc3NlfC1vcGVuc3NsfC1vcGVuc3NsLWxpbmtlZHwtcHRtYWxsb2N8LXhtbHBhdHRlcm5zfC1waG9ub258LXBob25vbi1iYWNrZW5kfC1tdWx0aW1lZGlhfC1hdWRpby1iYWNrZW5kfC1zdmd8LWRlY2xhcmF0aXZlfC1kZWNsYXJhdGl2ZS1kZWJ1Z3wtamF2YXNjcmlwdC1qaXR8LXNjcmlwdHwtc2NyaXB0dG9vbHN8LXJwYXRofC1mb3JjZS1wa2ctY29uZmlnfC1zNjB8LXVzZWRlZmZpbGVzfC1pY3UpCisgICAgICAgICBWQVI9YGVjaG8gJDEgfCBzZWQgInMsXi1cKC4qXCksXDEsImAKKyAgICAgICAgIFZBTD15ZXMKKyAgICAgICAgIDs7CitAQCAtMjEyMCw2ICsyMTIwLDEzIEBAIHdoaWxlIFsgIiQjIiAtZ3QgMCBdOyBkbworICAgICAgICAgICAgIFVOS05PV05fT1BUPXllcworICAgICAgICAgZmkKKyAgICAgICAgIDs7CisrICAgIHB1bHNlYXVkaW8pCisrICAgICAgICBpZiBbICIkVkFMIiA9ICJ5ZXMiIF0gfHwgWyAiJFZBTCIgPSAibm8iIF07IHRoZW4KKysgICAgICAgICAgICBDRkdfUFVMU0VBVURJTz0iJFZBTCIKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBVTktOT1dOX09QVD15ZXMKKysgICAgICAgIGZpCisrICAgICAgICA7OworICAgICBndGtzdHlsZSkKKyAgICAgICAgIGlmIFsgIiRWQUwiID0gInllcyIgXSB8fCBbICIkVkFMIiA9ICJubyIgXTsgdGhlbgorICAgICAgICAgICAgIENGR19RR1RLU1RZTEU9IiRWQUwiCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxOS1GaXhlcy1mb3ItZ2NjLTQuNy4wLXBhcnRpY3VsYXJseS1vbi1xZW11eDg2LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE5LUZpeGVzLWZvci1nY2MtNC43LjAtcGFydGljdWxhcmx5LW9uLXFlbXV4ODYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzZDI0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxOS1GaXhlcy1mb3ItZ2NjLTQuNy4wLXBhcnRpY3VsYXJseS1vbi1xZW11eDg2LnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK0Zyb20gMWYxZGEyZjI0ZDMwMjhiMjUwZGJjMmU5OGUyYjdlMzc4NjJiMzc3MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDo1NDozOCArMDIwMAorU3ViamVjdDogW1BBVENIIDE5LzIxXSBGaXhlcyBmb3IgZ2NjIDQuNy4wLCBwYXJ0aWN1bGFybHkgb24gcWVtdXg4NgorCitPcmlnaW46IHVwc3RyZWFtLCBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC85MzYzMQorT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTEzODQ4CisKK0J1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTY4CitCdWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzU4NAorCitSUCAyMDEyLzA0LzMwCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgICAgICAgICAgICAgICAgICAgICAgfCAyICstCisgc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwICAgICAgICAgICAgfCAyICstCisgLi4uL3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oICAgfCAxICsKKyAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKK2luZGV4IDMyZTQ3Y2EuLmI4ZTczODkgMTAwNjQ0CistLS0gYS9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysrIGIvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKK0BAIC0xMDgwLDcgKzEwODAsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKKyB7CisgICAgIC8vIFJlZiBjdXJyZW50U3R5bGUgaW4gY2FzZSBpdCB3b3VsZCBvdGhlcndpc2UgYmUgZGVsZXRlZCB3aGVuIHNldFJlbmRlclN0eWxlKCkgaXMgY2FsbGVkLgorICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGN1cnJlbnRTdHlsZShyZW5kZXJTdHlsZSgpKTsKKy0gICAgYm9vbCBoYXNQYXJlbnRTdHlsZSA9IHBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpID8gcGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCktPnJlbmRlclN0eWxlKCkgOiBmYWxzZTsKKysgICAgYm9vbCBoYXNQYXJlbnRTdHlsZSA9IHBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpID8gc3RhdGljX2Nhc3Q8Ym9vbD4ocGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCktPnJlbmRlclN0eWxlKCkpIDogZmFsc2U7CisgICAgIGJvb2wgaGFzRGlyZWN0QWRqYWNlbnRSdWxlcyA9IGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUtPmNoaWxkcmVuQWZmZWN0ZWRCeURpcmVjdEFkamFjZW50UnVsZXMoKTsKKyAgICAgYm9vbCBoYXNJbmRpcmVjdEFkamFjZW50UnVsZXMgPSBjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5jaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgCitkaWZmIC0tZ2l0IGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwIGIvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCitpbmRleCBkNjYwNzVlLi5hYjhmMTExIDEwMDY0NAorLS0tIGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCisrKysgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKK0BAIC03NCw3ICs3NCw3IEBAIFBhc3NSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4gSFRNTEltYWdlRWxlbWVudDo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3RvcihEb2N1bWVudCoKKyAgICAgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IGltYWdlID0gYWRvcHRSZWYobmV3IEhUTUxJbWFnZUVsZW1lbnQoaW1nVGFnLCBkb2N1bWVudCkpOworICAgICBpZiAob3B0aW9uYWxXaWR0aCkKKyAgICAgICAgIGltYWdlLT5zZXRXaWR0aCgqb3B0aW9uYWxXaWR0aCk7CistICAgIGlmIChvcHRpb25hbEhlaWdodCA+IDApCisrICAgIGlmIChvcHRpb25hbEhlaWdodCkKKyAgICAgICAgIGltYWdlLT5zZXRIZWlnaHQoKm9wdGlvbmFsSGVpZ2h0KTsKKyAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKKyB9CitkaWZmIC0tZ2l0IGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIGIvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oCitpbmRleCA2MDg3ZWMzLi42ZDc0OGY2IDEwMDY0NAorLS0tIGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oCisrKysgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgKK0BAIC0yNSw2ICsyNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKKyAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgY2xhc3MgVGlsZWRCYWNraW5nU3RvcmVDbGllbnQgeworIHB1YmxpYzoKKysgICAgdmlydHVhbCB+VGlsZWRCYWNraW5nU3RvcmVDbGllbnQoKSB7IH0KKyAgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpID0gMDsKKyAgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSkgPSAwOworLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjEtY29uZmlndXJlLW1ha2UtcXQ0LW5hdGl2ZS13b3JrLXdpdGgtbG9uZy1idWlsZGluZy1wYS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAyMS1jb25maWd1cmUtbWFrZS1xdDQtbmF0aXZlLXdvcmstd2l0aC1sb25nLWJ1aWxkaW5nLXBhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYzkwMjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjEtY29uZmlndXJlLW1ha2UtcXQ0LW5hdGl2ZS13b3JrLXdpdGgtbG9uZy1idWlsZGluZy1wYS5wYXRjaApAQCAtMCwwICsxLDk1IEBACitGcm9tIDY3NDJhYzdlYTZmZDFlOWM4MmVjYjUzMDVmODRlNzIxMjQyZjg1N2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDUgRGVjIDIwMTIgMDc6NDg6MTUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAyMS8yMV0gY29uZmlndXJlOiBtYWtlIHF0NC1uYXRpdmUgd29yayB3aXRoIGxvbmcgYnVpbGRpbmcKKyBwYXRoLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitSZWZlcmVuY2U6IGh0dHBzOi8vYnVncmVwb3J0cy5xdC1wcm9qZWN0Lm9yZy9icm93c2UvUVRCVUctMjgyOTIKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgNTIgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggYTRhNDJmMS4uMjM1ODU2MyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNDc3OSw4ICs0Nzc5LDggQEAgREVNT1NfUEFUSF9TVFI9YCIkcmVscGF0aC9jb25maWcudGVzdHMvdW5peC9wYWRzdHJpbmciIDI2OCAicXRfZGVtb3BhdGg9JFFUX0lOU1QKKyBUT0RBWT1gZGF0ZSArJVktJW0tJWRgCisgY2F0ID4gIiRvdXRwYXRoL3NyYy9jb3JlbGliL2dsb2JhbC9xY29uZmlnLmNwcC5uZXciIDw8RU9GCisgLyogTGljZW5zZSBJbmZvICovCistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2xpY2Vuc2VlX3N0ciAgICAgICAgICBbMjU2ICsgMTJdID0gIiRMSUNFTlNFX1VTRVJfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfbGljZW5zZWRfcHJvZHVjdHNfc3RyIFsyNTYgKyAxMl0gPSAiJExJQ0VOU0VfUFJPRFVDVFNfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfbGljZW5zZWVfc3RyICAgICAgICAgIFs1MTIgKyAxMl0gPSAiJExJQ0VOU0VfVVNFUl9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9saWNlbnNlZF9wcm9kdWN0c19zdHIgWzUxMiArIDEyXSA9ICIkTElDRU5TRV9QUk9EVUNUU19TVFIiOworIAorIC8qIEluc3RhbGxhdGlvbiBkYXRlICovCisgc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2luc3RhbGxhdGlvbiAgICAgICAgICBbMTIrMTFdICAgID0gInF0X2luc3RkYXRlPSRUT0RBWSI7CitAQCAtNDgwNSwzNiArNDgwNSwzNiBAQCBpZiBbICEgLXogIiRRVF9IT1NUX1BSRUZJWCIgXTsgdGhlbgorIAorICNpZiBkZWZpbmVkKFFUX0JPT1RTVFJBUFBFRCkgfHwgZGVmaW5lZChRVF9CVUlMRF9RTUFLRSkKKyAvKiBJbnN0YWxsYXRpb24gSW5mbyAqLworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9wcmVmaXhfcGF0aF9zdHIgICAgICAgWzI1NiArIDEyXSA9ICIkSE9TVFBSRUZJWF9QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RvY3VtZW50YXRpb25fcGF0aF9zdHJbMjU2ICsgMTJdID0gIiRIT1NURE9DVU1FTlRBVElPTl9QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2hlYWRlcnNfcGF0aF9zdHIgICAgICBbMjU2ICsgMTJdID0gIiRIT1NUSEVBREVSU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2xpYnJhcmllc19wYXRoX3N0ciAgICBbMjU2ICsgMTJdID0gIiRIT1NUTElCUkFSSUVTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfYmluYXJpZXNfcGF0aF9zdHIgICAgIFsyNTYgKyAxMl0gPSAiJEhPU1RCSU5BUklFU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3BsdWdpbnNfcGF0aF9zdHIgICAgICBbMjU2ICsgMTJdID0gIiRIT1NUUExVR0lOU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2ltcG9ydHNfcGF0aF9zdHIgICAgICBbMjU2ICsgMTJdID0gIiRIT1NUSU1QT1JUU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RhdGFfcGF0aF9zdHIgICAgICAgICBbMjU2ICsgMTJdID0gIiRIT1NUREFUQV9QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3RyYW5zbGF0aW9uc19wYXRoX3N0ciBbMjU2ICsgMTJdID0gIiRIT1NUVFJBTlNMQVRJT05TX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfc2V0dGluZ3NfcGF0aF9zdHIgICAgIFsyNTYgKyAxMl0gPSAiJEhPU1RTRVRUSU5HU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2V4YW1wbGVzX3BhdGhfc3RyICAgICBbMjU2ICsgMTJdID0gIiRIT1NURVhBTVBMRVNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kZW1vc19wYXRoX3N0ciAgICAgICAgWzI1NiArIDEyXSA9ICIkSE9TVERFTU9TX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfcHJlZml4X3BhdGhfc3RyICAgICAgIFs1MTIgKyAxMl0gPSAiJEhPU1RQUkVGSVhfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kb2N1bWVudGF0aW9uX3BhdGhfc3RyWzUxMiArIDEyXSA9ICIkSE9TVERPQ1VNRU5UQVRJT05fUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9oZWFkZXJzX3BhdGhfc3RyICAgICAgWzUxMiArIDEyXSA9ICIkSE9TVEhFQURFUlNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9saWJyYXJpZXNfcGF0aF9zdHIgICAgWzUxMiArIDEyXSA9ICIkSE9TVExJQlJBUklFU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2JpbmFyaWVzX3BhdGhfc3RyICAgICBbNTEyICsgMTJdID0gIiRIT1NUQklOQVJJRVNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9wbHVnaW5zX3BhdGhfc3RyICAgICAgWzUxMiArIDEyXSA9ICIkSE9TVFBMVUdJTlNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9pbXBvcnRzX3BhdGhfc3RyICAgICAgWzUxMiArIDEyXSA9ICIkSE9TVElNUE9SVFNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kYXRhX3BhdGhfc3RyICAgICAgICAgWzUxMiArIDEyXSA9ICIkSE9TVERBVEFfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV90cmFuc2xhdGlvbnNfcGF0aF9zdHIgWzUxMiArIDEyXSA9ICIkSE9TVFRSQU5TTEFUSU9OU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3NldHRpbmdzX3BhdGhfc3RyICAgICBbNTEyICsgMTJdID0gIiRIT1NUU0VUVElOR1NfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9leGFtcGxlc19wYXRoX3N0ciAgICAgWzUxMiArIDEyXSA9ICIkSE9TVEVYQU1QTEVTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZGVtb3NfcGF0aF9zdHIgICAgICAgIFs1MTIgKyAxMl0gPSAiJEhPU1RERU1PU19QQVRIX1NUUiI7CisgI2Vsc2UgLy8gUVRfQk9PVFNUUkFQUEVECisgRU9GCisgZmkKKyAKKyBjYXQgPj4gIiRvdXRwYXRoL3NyYy9jb3JlbGliL2dsb2JhbC9xY29uZmlnLmNwcC5uZXciIDw8RU9GCisgLyogSW5zdGFsbGF0aW9uIEluZm8gKi8KKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfcHJlZml4X3BhdGhfc3RyICAgICAgIFsyNTYgKyAxMl0gPSAiJFBSRUZJWF9QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RvY3VtZW50YXRpb25fcGF0aF9zdHJbMjU2ICsgMTJdID0gIiRET0NVTUVOVEFUSU9OX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfaGVhZGVyc19wYXRoX3N0ciAgICAgIFsyNTYgKyAxMl0gPSAiJEhFQURFUlNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9saWJyYXJpZXNfcGF0aF9zdHIgICAgWzI1NiArIDEyXSA9ICIkTElCUkFSSUVTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfYmluYXJpZXNfcGF0aF9zdHIgICAgIFsyNTYgKyAxMl0gPSAiJEJJTkFSSUVTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfcGx1Z2luc19wYXRoX3N0ciAgICAgIFsyNTYgKyAxMl0gPSAiJFBMVUdJTlNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9pbXBvcnRzX3BhdGhfc3RyICAgICAgWzI1NiArIDEyXSA9ICIkSU1QT1JUU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RhdGFfcGF0aF9zdHIgICAgICAgICBbMjU2ICsgMTJdID0gIiREQVRBX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfdHJhbnNsYXRpb25zX3BhdGhfc3RyIFsyNTYgKyAxMl0gPSAiJFRSQU5TTEFUSU9OU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3NldHRpbmdzX3BhdGhfc3RyICAgICBbMjU2ICsgMTJdID0gIiRTRVRUSU5HU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2V4YW1wbGVzX3BhdGhfc3RyICAgICBbMjU2ICsgMTJdID0gIiRFWEFNUExFU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RlbW9zX3BhdGhfc3RyICAgICAgICBbMjU2ICsgMTJdID0gIiRERU1PU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3ByZWZpeF9wYXRoX3N0ciAgICAgICBbNTEyICsgMTJdID0gIiRQUkVGSVhfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kb2N1bWVudGF0aW9uX3BhdGhfc3RyWzUxMiArIDEyXSA9ICIkRE9DVU1FTlRBVElPTl9QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2hlYWRlcnNfcGF0aF9zdHIgICAgICBbNTEyICsgMTJdID0gIiRIRUFERVJTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfbGlicmFyaWVzX3BhdGhfc3RyICAgIFs1MTIgKyAxMl0gPSAiJExJQlJBUklFU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2JpbmFyaWVzX3BhdGhfc3RyICAgICBbNTEyICsgMTJdID0gIiRCSU5BUklFU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3BsdWdpbnNfcGF0aF9zdHIgICAgICBbNTEyICsgMTJdID0gIiRQTFVHSU5TX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfaW1wb3J0c19wYXRoX3N0ciAgICAgIFs1MTIgKyAxMl0gPSAiJElNUE9SVFNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kYXRhX3BhdGhfc3RyICAgICAgICAgWzUxMiArIDEyXSA9ICIkREFUQV9QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3RyYW5zbGF0aW9uc19wYXRoX3N0ciBbNTEyICsgMTJdID0gIiRUUkFOU0xBVElPTlNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9zZXR0aW5nc19wYXRoX3N0ciAgICAgWzUxMiArIDEyXSA9ICIkU0VUVElOR1NfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9leGFtcGxlc19wYXRoX3N0ciAgICAgWzUxMiArIDEyXSA9ICIkRVhBTVBMRVNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kZW1vc19wYXRoX3N0ciAgICAgICAgWzUxMiArIDEyXSA9ICIkREVNT1NfUEFUSF9TVFIiOworIEVPRgorIAorIGlmIFsgISAteiAiJFFUX0hPU1RfUFJFRklYIiBdOyB0aGVuCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAyNy10b29scy5wcm8tZGlzYWJsZS1xbWVlZ29ncmFwaGljc3N5c3RlbWhlbHBlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAyNy10b29scy5wcm8tZGlzYWJsZS1xbWVlZ29ncmFwaGljc3N5c3RlbWhlbHBlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTMwYWVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDI3LXRvb2xzLnByby1kaXNhYmxlLXFtZWVnb2dyYXBoaWNzc3lzdGVtaGVscGVyLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gMDQ2MGUyYTVmMTNhYWYwMDgxYzNjOWZlYzg5MjgwMDQ2ODQyZGRiYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAzIEp1bCAyMDEzIDE3OjQ4OjMwICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHRvb2xzLnBybzogZGlzYWJsZSBxbWVlZ29ncmFwaGljc3N5c3RlbWhlbHBlcgorCitXZSBkb24ndCB3YW50IHRoaXMgZW5hYmxlZCBqdXN0IGJlY2F1c2Ugd2UgaGF2ZSBFR0wgYW5kIE9wZW5HTCBFUyAyLjAKK2VuYWJsZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlnXQorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIHRvb2xzL3Rvb2xzLnBybyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rvb2xzL3Rvb2xzLnBybyBiL3Rvb2xzL3Rvb2xzLnBybworaW5kZXggMGUyNzA1My4uMmQzZjM2ZCAxMDA2NDQKKy0tLSBhL3Rvb2xzL3Rvb2xzLnBybworKysrIGIvdG9vbHMvdG9vbHMucHJvCitAQCAtNDksNCArNDksNCBAQCBRVERJUl9idWlsZDpSRVFVSVJFUyA9ICJjb250YWlucyhRVF9DT05GSUcsIGZ1bGwtY29uZmlnKSIKKyAKKyAhd2luMzI6IWVtYmVkZGVkOiFtYWM6IXN5bWJpYW46Q09ORklHICs9IHgxMQorIAorLXgxMTpjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbGVzMik6Y29udGFpbnMoUVRfQ09ORklHLCBlZ2wpOlNVQkRJUlMgKz0gcW1lZWdvZ3JhcGhpY3NzeXN0ZW1oZWxwZXIKKysjeDExOmNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKTpjb250YWlucyhRVF9DT05GSUcsIGVnbCk6U1VCRElSUyArPSBxbWVlZ29ncmFwaGljc3N5c3RlbWhlbHBlcgorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAyOC1Eb24tdC1jcmFzaC1vbi1icm9rZW4tR0lGLWltYWdlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAyOC1Eb24tdC1jcmFzaC1vbi1icm9rZW4tR0lGLWltYWdlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDZlMmZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDI4LURvbi10LWNyYXNoLW9uLWJyb2tlbi1HSUYtaW1hZ2VzLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gZjFiNzZjMTI2YzQ3NmMxNTVhZjhjNDA0Yjk3YzQyY2QxYTcwOTMzMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExhcnMgS25vbGwgPGxhcnMua25vbGxAZGlnaWEuY29tPgorRGF0ZTogVGh1LCAyNCBBcHIgMjAxNCAxNTozMzoyNyArMDIwMAorU3ViamVjdDogW1BBVENIXSBEb24ndCBjcmFzaCBvbiBicm9rZW4gR0lGIGltYWdlcworCitCcm9rZW4gR0lGIGltYWdlcyBjb3VsZCBzZXQgaW52YWxpZCB3aWR0aCBhbmQgaGVpZ2h0Cit2YWx1ZXMgaW5zaWRlIHRoZSBpbWFnZSwgbGVhZGluZyB0byBRdCBjcmVhdGluZyBhIG51bGwKK1FJbWFnZSBmb3IgaXQuIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGFib3J0IGRlY29kaW5nCit0aGUgaW1hZ2UgYW5kIHJldHVybiBhbiBlcnJvci4KKworSW5pdGlhbCBwYXRjaCBieSBSaWNoIE1vb3JlLgorCitCYWNrcG9ydCBvZiBJZDgyYTQwMzZmNDc4YmQ2ZTQ5YzQwMmQ2NTk4ZjU3ZTdlNWJiNWUxZSBmcm9tIFF0IDUKKworVGFzay1udW1iZXI6IFFUQlVHLTM4MzY3CitDaGFuZ2UtSWQ6IEkwNjgwNzQwMDE4YWFhODM1NmQyNjdiN2FmM2YwMWZhYzM2OTczMTJhCitTZWN1cml0eS1hZHZpc29yeTogQ1ZFLTIwMTQtMDE5MAorUmV2aWV3ZWQtYnk6IFJpY2hhcmQgSi4gTW9vcmUgPHJpY2hAa2RlLm9yZz4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKKy0tLQorIHNyYy9ndWkvaW1hZ2UvcWdpZmhhbmRsZXIuY3BwIHwgNyArKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2d1aS9pbWFnZS9xZ2lmaGFuZGxlci5jcHAgYi9zcmMvZ3VpL2ltYWdlL3FnaWZoYW5kbGVyLmNwcAoraW5kZXggMzMyNGYwNC4uNTE5OWRkMyAxMDA2NDQKKy0tLSBhL3NyYy9ndWkvaW1hZ2UvcWdpZmhhbmRsZXIuY3BwCisrKysgYi9zcmMvZ3VpL2ltYWdlL3FnaWZoYW5kbGVyLmNwcAorQEAgLTM1OSw2ICszNTksMTMgQEAgaW50IFFHSUZGb3JtYXQ6OmRlY29kZShRSW1hZ2UgKmltYWdlLCBjb25zdCB1Y2hhciAqYnVmZmVyLCBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KGJpdHMsIDAsIGltYWdlLT5ieXRlQ291bnQoKSk7CisgICAgICAgICAgICAgICAgIH0KKyAKKysgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHByZXZpb3VzIGF0dGVtcHQgdG8gY3JlYXRlIHRoZSBpbWFnZSBmYWlsZWQuIElmIGl0CisrICAgICAgICAgICAgICAgIC8vIGRpZCB0aGVuIHRoZSBpbWFnZSBpcyBicm9rZW4gYW5kIHdlIHNob3VsZCBnaXZlIHVwLgorKyAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzTnVsbCgpKSB7CisrICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IEVycm9yOworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgICAgICAgICB9CisrCisgICAgICAgICAgICAgICAgIGRpc3Bvc2VQcmV2aW91cyhpbWFnZSk7CisgICAgICAgICAgICAgICAgIGRpc3Bvc2VkID0gZmFsc2U7CisgCistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMC1hYXJjaDY0X2FybTY0X3FhdG9taWNfc3VwcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMC1hYXJjaDY0X2FybTY0X3FhdG9taWNfc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTRjMmE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMwLWFhcmNoNjRfYXJtNjRfcWF0b21pY19zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNDkxIEBACitGcm9tIDI5NDAxMGI1NjJjOTg0NmJiMmJjNGVlOWM2M2ZmNzhhZGM3YzFmNGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/TGlzYW5kcm89MjBEYW1pPUMzPUExbj0yME5pY2Fub3I9MjBQPUMzPUE5cmV6PTIwTWV5ZXI/PQorIDxwZXJlem1leWVyQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMTUgTWFyIDIwMTQgMTU6NDA6NDkgLTAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHFhdG9taWMgc3VwcG9ydCBmb3IgQUFyY2g2NCAoYWthIGFybTY0KS4KKworUGF0Y2ggYnkgTWFyayBTYWx0ZXIgPG1zYWx0ZXJAcmVkaGF0LmNvbT4KK2xpY2Vuc2VkIHVuZGVyIEJTRDoKKworPGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9NzM1NDg4IzE5NT4KKworVGhpcyBwYXRjaCBpcyBrbm93biB0byBub3QgYmUgdGhlIG1vc3QgY29ycmVjdCB3YXkKK3RvIGltcGxlbWVudCB0aGVtLCBhcyBpdCBzZWVtcyB0byBiZSBwb3NzaWJsZSB0byBkbyBpdCBpbiBhIGZhc3RlciB3YXksCitidXQgc2hvdWxkIHdvcmsgbm9uIHRoZSBsZXNzIHVudGlsIHdlIGNhbiBwcm92aWRlIHNvbWV0aGluZyBiZXR0ZXIuCisKK0NoYW5nZS1JZDogSWIzOTJiMjdkYzU0NjkxZmQ0YzJlYTk4OTYyNDBhZDcxZmI4MTI4Y2MKKworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLQorIHNyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9hcmNoLnByaSAgICAgICAgICAgIHwgICA0ICsKKyBzcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvcWF0b21pY19hYXJjaDY0LmNwcCB8ICA3MCArKysrKysKKyBzcmMvY29yZWxpYi9hcmNoL2FyY2gucHJpICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQorIHNyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hYXJjaDY0LmggICAgICAgICAgIHwgMzM1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKworIHNyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hcmNoLmggICAgICAgICAgICAgIHwgICAyICsKKyA1IGZpbGVzIGNoYW5nZWQsIDQxNCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9hcmNoLnByaQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvcWF0b21pY19hYXJjaDY0LmNwcAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYWFyY2g2NC5oCisKK2RpZmYgLS1naXQgYS9zcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvYXJjaC5wcmkgYi9zcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvYXJjaC5wcmkKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42MzUyM2Q5CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvYXJjaC5wcmkKK0BAIC0wLDAgKzEsNCBAQAorKyMKKysjIEFBcmNoNjQgYXJjaGl0ZWN0dXJlCisrIworK1NPVVJDRVMgKz0gJCRRVF9BUkNIX0NQUC9xYXRvbWljX2FhcmNoNjQuY3BwCitkaWZmIC0tZ2l0IGEvc3JjL2NvcmVsaWIvYXJjaC9hYXJjaDY0L3FhdG9taWNfYWFyY2g2NC5jcHAgYi9zcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvcWF0b21pY19hYXJjaDY0LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmZjODUxYjkKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9xYXRvbWljX2FhcmNoNjQuY3BwCitAQCAtMCwwICsxLDcwIEBACisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysqKgorKyoqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorKyoqIENvbnRhY3Q6IGh0dHA6Ly93d3cucXQtcHJvamVjdC5vcmcvbGVnYWwKKysqKgorKyoqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBRdENvcmUgbW9kdWxlIG9mIHRoZSBRdCBUb29sa2l0LgorKyoqCisrKiogJFFUX0JFR0lOX0xJQ0VOU0U6TEdQTCQKKysqKiBDb21tZXJjaWFsIExpY2Vuc2UgVXNhZ2UKKysqKiBMaWNlbnNlZXMgaG9sZGluZyB2YWxpZCBjb21tZXJjaWFsIFF0IGxpY2Vuc2VzIG1heSB1c2UgdGhpcyBmaWxlIGluCisrKiogYWNjb3JkYW5jZSB3aXRoIHRoZSBjb21tZXJjaWFsIGxpY2Vuc2UgYWdyZWVtZW50IHByb3ZpZGVkIHdpdGggdGhlCisrKiogU29mdHdhcmUgb3IsIGFsdGVybmF0aXZlbHksIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgY29udGFpbmVkIGluCisrKiogYSB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIHlvdSBhbmQgRGlnaWEuICBGb3IgbGljZW5zaW5nIHRlcm1zIGFuZAorKyoqIGNvbmRpdGlvbnMgc2VlIGh0dHA6Ly9xdC5kaWdpYS5jb20vbGljZW5zaW5nLiAgRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24KKysqKiB1c2UgdGhlIGNvbnRhY3QgZm9ybSBhdCBodHRwOi8vcXQuZGlnaWEuY29tL2NvbnRhY3QtdXMuCisrKioKKysqKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVXNhZ2UKKysqKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyCisrKiogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKysqKiBGb3VuZGF0aW9uIGFuZCBhcHBlYXJpbmcgaW4gdGhlIGZpbGUgTElDRU5TRS5MR1BMIGluY2x1ZGVkIGluIHRoZQorKyoqIHBhY2thZ2luZyBvZiB0aGlzIGZpbGUuICBQbGVhc2UgcmV2aWV3IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gdG8KKysqKiBlbnN1cmUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSByZXF1aXJlbWVudHMKKysqKiB3aWxsIGJlIG1ldDogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9sZ3BsLTIuMS5odG1sLgorKyoqCisrKiogSW4gYWRkaXRpb24sIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIERpZ2lhIGdpdmVzIHlvdSBjZXJ0YWluIGFkZGl0aW9uYWwKKysqKiByaWdodHMuICBUaGVzZSByaWdodHMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgRGlnaWEgUXQgTEdQTCBFeGNlcHRpb24KKysqKiB2ZXJzaW9uIDEuMSwgaW5jbHVkZWQgaW4gdGhlIGZpbGUgTEdQTF9FWENFUFRJT04udHh0IGluIHRoaXMgcGFja2FnZS4KKysqKgorKyoqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFVzYWdlCisrKiogQWx0ZXJuYXRpdmVseSwgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrKiogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMuMCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKysqKiBGb3VuZGF0aW9uIGFuZCBhcHBlYXJpbmcgaW4gdGhlIGZpbGUgTElDRU5TRS5HUEwgaW5jbHVkZWQgaW4gdGhlCisrKiogcGFja2FnaW5nIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSByZXZpZXcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB0bworKyoqIGVuc3VyZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLjAgcmVxdWlyZW1lbnRzIHdpbGwgYmUKKysqKiBtZXQ6IGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbC4KKysqKgorKyoqCisrKiogJFFUX0VORF9MSUNFTlNFJAorKyoqCisrKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysjaW5jbHVkZSA8UXRDb3JlL3FnbG9iYWwuaD4KKysKKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2lmZGVmIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HCisrIyBpbmNsdWRlIDxzY2hlZC5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDx0aW1lLmg+CisrCisrUVRfQkVHSU5fTkFNRVNQQUNFCisrCisrUVRfVVNFX05BTUVTUEFDRQorKworK1FfQ09SRV9FWFBPUlQgdm9pZCBxdF9hdG9taWNfeWllbGQoaW50ICpjb3VudCkKKyt7CisrI2lmZGVmIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HCisrICAgIGlmICgoKmNvdW50KSsrIDwgNTApIHsKKysgICAgICAgIHNjaGVkX3lpZWxkKCk7CisrICAgIH0gZWxzZQorKyNlbmRpZgorKyAgICB7CisrICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdG07CisrICAgICAgICB0bS50dl9zZWMgPSAwOworKyAgICAgICAgdG0udHZfbnNlYyA9IDIwMDAwMDE7CisrICAgICAgICBuYW5vc2xlZXAoJnRtLCBOVUxMKTsKKysgICAgICAgICpjb3VudCA9IDA7CisrICAgIH0KKyt9CisrCisrUVRfRU5EX05BTUVTUEFDRQorZGlmZiAtLWdpdCBhL3NyYy9jb3JlbGliL2FyY2gvYXJjaC5wcmkgYi9zcmMvY29yZWxpYi9hcmNoL2FyY2gucHJpCitpbmRleCBjZDIzZTVlLi5mNTBmY2E3IDEwMDY0NAorLS0tIGEvc3JjL2NvcmVsaWIvYXJjaC9hcmNoLnByaQorKysrIGIvc3JjL2NvcmVsaWIvYXJjaC9hcmNoLnByaQorQEAgLTMxLDcgKzMxLDkgQEAgaW50ZWdyaXR5OkhFQURFUlMgKz0gYXJjaC9xYXRvbWljX2ludGVncml0eS5oCisgICAgICAgICAgICAgICAgICAgICAgICBhcmNoL3FhdG9taWNfczM5MC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyY2gvcWF0b21pY194ODZfNjQuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICBhcmNoL3FhdG9taWNfc2guaCBcCistICAgICAgICAgICAgICAgICAgICAgICBhcmNoL3FhdG9taWNfc2g0YS5oCisrICAgICAgICAgICAgICAgICAgICAgICBhcmNoL3FhdG9taWNfc2g0YS5oIFwKKysgICAgICAgICAgICAgICAgICAgICAgIGFyY2gvcWF0b21pY19hYXJjaDY0LmggXAorKworIAorIFFUX0FSQ0hfQ1BQID0gJCRRVF9TT1VSQ0VfVFJFRS9zcmMvY29yZWxpYi9hcmNoLyQkUVRfQVJDSAorIERFUEVORFBBVEggKz0gJCRRVF9BUkNIX0NQUAorZGlmZiAtLWdpdCBhL3NyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hYXJjaDY0LmggYi9zcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYWFyY2g2NC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZGU2MWNhOAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FhcmNoNjQuaAorQEAgLTAsMCArMSwzMzUgQEAKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyoqCisrKiogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisrKiogQ29udGFjdDogaHR0cDovL3d3dy5xdC1wcm9qZWN0Lm9yZy9sZWdhbAorKyoqCisrKiogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFF0Q29yZSBtb2R1bGUgb2YgdGhlIFF0IFRvb2xraXQuCisrKioKKysqKiAkUVRfQkVHSU5fTElDRU5TRTpMR1BMJAorKyoqIENvbW1lcmNpYWwgTGljZW5zZSBVc2FnZQorKyoqIExpY2Vuc2VlcyBob2xkaW5nIHZhbGlkIGNvbW1lcmNpYWwgUXQgbGljZW5zZXMgbWF5IHVzZSB0aGlzIGZpbGUgaW4KKysqKiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbW1lcmNpYWwgbGljZW5zZSBhZ3JlZW1lbnQgcHJvdmlkZWQgd2l0aCB0aGUKKysqKiBTb2Z0d2FyZSBvciwgYWx0ZXJuYXRpdmVseSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBjb250YWluZWQgaW4KKysqKiBhIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBEaWdpYS4gIEZvciBsaWNlbnNpbmcgdGVybXMgYW5kCisrKiogY29uZGl0aW9ucyBzZWUgaHR0cDovL3F0LmRpZ2lhLmNvbS9saWNlbnNpbmcuICBGb3IgZnVydGhlciBpbmZvcm1hdGlvbgorKyoqIHVzZSB0aGUgY29udGFjdCBmb3JtIGF0IGh0dHA6Ly9xdC5kaWdpYS5jb20vY29udGFjdC11cy4KKysqKgorKyoqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBVc2FnZQorKyoqIEFsdGVybmF0aXZlbHksIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIKKysqKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorKyoqIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUgZmlsZSBMSUNFTlNFLkxHUEwgaW5jbHVkZWQgaW4gdGhlCisrKiogcGFja2FnaW5nIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSByZXZpZXcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB0bworKyoqIGVuc3VyZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIHJlcXVpcmVtZW50cworKyoqIHdpbGwgYmUgbWV0OiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2xncGwtMi4xLmh0bWwuCisrKioKKysqKiBJbiBhZGRpdGlvbiwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgRGlnaWEgZ2l2ZXMgeW91IGNlcnRhaW4gYWRkaXRpb25hbAorKyoqIHJpZ2h0cy4gIFRoZXNlIHJpZ2h0cyBhcmUgZGVzY3JpYmVkIGluIHRoZSBEaWdpYSBRdCBMR1BMIEV4Y2VwdGlvbgorKyoqIHZlcnNpb24gMS4xLCBpbmNsdWRlZCBpbiB0aGUgZmlsZSBMR1BMX0VYQ0VQVElPTi50eHQgaW4gdGhpcyBwYWNrYWdlLgorKyoqCisrKiogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVXNhZ2UKKysqKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKysqKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMy4wIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorKyoqIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUgZmlsZSBMSUNFTlNFLkdQTCBpbmNsdWRlZCBpbiB0aGUKKysqKiBwYWNrYWdpbmcgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHJldmlldyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHRvCisrKiogZW5zdXJlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMuMCByZXF1aXJlbWVudHMgd2lsbCBiZQorKyoqIG1ldDogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sLgorKyoqCisrKioKKysqKiAkUVRfRU5EX0xJQ0VOU0UkCisrKioKKysqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKyNpZm5kZWYgUUFUT01JQ19BQVJDSDY0X0gKKysjZGVmaW5lIFFBVE9NSUNfQUFSQ0g2NF9ICisrCisrUVRfQkVHSU5fSEVBREVSCisrCisrUVRfQkVHSU5fTkFNRVNQQUNFCisrCisrI2RlZmluZSBRX0FUT01JQ19JTlRfUkVGRVJFTkNFX0NPVU5USU5HX0lTX0FMV0FZU19OQVRJVkUKKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmlzUmVmZXJlbmNlQ291bnRpbmdOYXRpdmUoKQorK3sgcmV0dXJuIHRydWU7IH0KKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmlzUmVmZXJlbmNlQ291bnRpbmdXYWl0RnJlZSgpCisreyByZXR1cm4gZmFsc2U7IH0KKysKKysjZGVmaW5lIFFfQVRPTUlDX0lOVF9URVNUX0FORF9TRVRfSVNfQUxXQVlTX05BVElWRQorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6aXNUZXN0QW5kU2V0TmF0aXZlKCkKKyt7IHJldHVybiB0cnVlOyB9CisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojppc1Rlc3RBbmRTZXRXYWl0RnJlZSgpCisreyByZXR1cm4gZmFsc2U7IH0KKysKKysjZGVmaW5lIFFfQVRPTUlDX0lOVF9GRVRDSF9BTkRfU1RPUkVfSVNfQUxXQVlTX05BVElWRQorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6aXNGZXRjaEFuZFN0b3JlTmF0aXZlKCkKKyt7IHJldHVybiB0cnVlOyB9CisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojppc0ZldGNoQW5kU3RvcmVXYWl0RnJlZSgpCisreyByZXR1cm4gZmFsc2U7IH0KKysKKysjZGVmaW5lIFFfQVRPTUlDX0lOVF9GRVRDSF9BTkRfQUREX0lTX0FMV0FZU19OQVRJVkUKKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmlzRmV0Y2hBbmRBZGROYXRpdmUoKQorK3sgcmV0dXJuIHRydWU7IH0KKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmlzRmV0Y2hBbmRBZGRXYWl0RnJlZSgpCisreyByZXR1cm4gZmFsc2U7IH0KKysKKysjZGVmaW5lIFFfQVRPTUlDX1BPSU5URVJfVEVTVF9BTkRfU0VUX0lTX0FMV0FZU19OQVRJVkUKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmlzVGVzdEFuZFNldE5hdGl2ZSgpCisreyByZXR1cm4gdHJ1ZTsgfQorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIGJvb2wgUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6aXNUZXN0QW5kU2V0V2FpdEZyZWUoKQorK3sgcmV0dXJuIGZhbHNlOyB9CisrCisrI2RlZmluZSBRX0FUT01JQ19QT0lOVEVSX0ZFVENIX0FORF9TVE9SRV9JU19BTFdBWVNfTkFUSVZFCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojppc0ZldGNoQW5kU3RvcmVOYXRpdmUoKQorK3sgcmV0dXJuIHRydWU7IH0KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmlzRmV0Y2hBbmRTdG9yZVdhaXRGcmVlKCkKKyt7IHJldHVybiBmYWxzZTsgfQorKworKyNkZWZpbmUgUV9BVE9NSUNfUE9JTlRFUl9GRVRDSF9BTkRfQUREX0lTX0FMV0FZU19OQVRJVkUKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmlzRmV0Y2hBbmRBZGROYXRpdmUoKQorK3sgcmV0dXJuIHRydWU7IH0KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmlzRmV0Y2hBbmRBZGRXYWl0RnJlZSgpCisreyByZXR1cm4gZmFsc2U7IH0KKysKKysjaWZuZGVmIFFfREFUQV9NRU1PUllfQkFSUklFUgorKyMgZGVmaW5lIFFfREFUQV9NRU1PUllfQkFSUklFUiBhc20gdm9sYXRpbGUoImRtYiBzeVxuIjo6OiJtZW1vcnkiKQorKyNlbmRpZgorKyNpZm5kZWYgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUgorKyMgZGVmaW5lIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVIgYXNtIHZvbGF0aWxlKCIiOjo6Im1lbW9yeSIpCisrI2VuZGlmCisrCisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50OjpyZWYoKQorK3sKKysgICAgaW50IG5ld1ZhbHVlOworKworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICBuZXdWYWx1ZSA9IF9fYXRvbWljX2FkZF9mZXRjaCgmX3FfdmFsdWUsIDEsIF9fQVRPTUlDX0FDUV9SRUwpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKworKyAgICByZXR1cm4gbmV3VmFsdWUgIT0gMDsKKyt9CisrCisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50OjpkZXJlZigpCisreworKyAgICBpbnQgbmV3VmFsdWU7CisrCisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIG5ld1ZhbHVlID0gX19hdG9taWNfc3ViX2ZldGNoKCZfcV92YWx1ZSwgMSwgX19BVE9NSUNfQUNRX1JFTCk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrCisrICAgIHJldHVybiBuZXdWYWx1ZSAhPSAwOworK30KKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OnRlc3RBbmRTZXRSZWxheGVkKGludCBleHBlY3RlZFZhbHVlLCBpbnQgbmV3VmFsdWUpCisreworKyAgICBib29sIHZhbDsKKysKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgdmFsID0gIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbiAoJl9xX3ZhbHVlLCAmZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBfX0FUT01JQ19SRUxBWEVELCBfX0FUT01JQ19SRUxBWEVEKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHZhbDsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kU3RvcmVSZWxheGVkKGludCBuZXdWYWx1ZSkKKyt7CisrICAgIGludCB2YWw7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHZhbCA9IF9fYXRvbWljX2V4Y2hhbmdlX24oJl9xX3ZhbHVlLCBuZXdWYWx1ZSwgX19BVE9NSUNfUkVMQVhFRCk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiB2YWw7CisrfQorKworK2lubGluZSBpbnQgUUJhc2ljQXRvbWljSW50OjpmZXRjaEFuZEFkZFJlbGF4ZWQoaW50IHZhbHVlVG9BZGQpCisreworKyAgICBpbnQgdmFsOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICB2YWwgPSBfX2F0b21pY19mZXRjaF9hZGQoJl9xX3ZhbHVlLCB2YWx1ZVRvQWRkLCBfX0FUT01JQ19SRUxBWEVEKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHZhbDsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojp0ZXN0QW5kU2V0UmVsYXhlZChUICpleHBlY3RlZFZhbHVlLCBUICpuZXdWYWx1ZSkKKyt7CisrICAgIGJvb2wgdmFsOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICB2YWwgPSAgX19hdG9taWNfY29tcGFyZV9leGNoYW5nZV9uICgmX3FfdmFsdWUsICZleHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIF9fQVRPTUlDX1JFTEFYRUQsIF9fQVRPTUlDX1JFTEFYRUQpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gdmFsOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBUICpRQmFzaWNBdG9taWNQb2ludGVyPFQ+OjpmZXRjaEFuZFN0b3JlUmVsYXhlZChUICpuZXdWYWx1ZSkKKyt7CisrICAgIFQgKnZhbDsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgdmFsID0gX19hdG9taWNfZXhjaGFuZ2VfbigmX3FfdmFsdWUsIG5ld1ZhbHVlLCBfX0FUT01JQ19SRUxBWEVEKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHZhbDsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgVCAqUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6ZmV0Y2hBbmRBZGRSZWxheGVkKHFwdHJkaWZmIHZhbHVlVG9BZGQpCisreworKyAgICBUICp2YWw7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHZhbCA9IF9fYXRvbWljX2ZldGNoX2FkZCgmX3FfdmFsdWUsIHZhbHVlVG9BZGQsIF9fQVRPTUlDX1JFTEFYRUQpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gdmFsOworK30KKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OnRlc3RBbmRTZXRBY3F1aXJlKGludCBleHBlY3RlZFZhbHVlLCBpbnQgbmV3VmFsdWUpCisreworKyAgICBib29sIHJldHVyblZhbHVlID0gdGVzdEFuZFNldFJlbGF4ZWQoZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUpOworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojp0ZXN0QW5kU2V0UmVsZWFzZShpbnQgZXhwZWN0ZWRWYWx1ZSwgaW50IG5ld1ZhbHVlKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gdGVzdEFuZFNldFJlbGF4ZWQoZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUpOworK30KKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OnRlc3RBbmRTZXRPcmRlcmVkKGludCBleHBlY3RlZFZhbHVlLCBpbnQgbmV3VmFsdWUpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB0ZXN0QW5kU2V0UmVsYXhlZChleHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kU3RvcmVBY3F1aXJlKGludCBuZXdWYWx1ZSkKKyt7CisrICAgIGludCByZXR1cm5WYWx1ZSA9IGZldGNoQW5kU3RvcmVSZWxheGVkKG5ld1ZhbHVlKTsKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworK2lubGluZSBpbnQgUUJhc2ljQXRvbWljSW50OjpmZXRjaEFuZFN0b3JlUmVsZWFzZShpbnQgbmV3VmFsdWUpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiBmZXRjaEFuZFN0b3JlUmVsYXhlZChuZXdWYWx1ZSk7CisrfQorKworK2lubGluZSBpbnQgUUJhc2ljQXRvbWljSW50OjpmZXRjaEFuZFN0b3JlT3JkZXJlZChpbnQgbmV3VmFsdWUpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIGludCByZXR1cm5WYWx1ZSA9IGZldGNoQW5kU3RvcmVSZWxheGVkKG5ld1ZhbHVlKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKytpbmxpbmUgaW50IFFCYXNpY0F0b21pY0ludDo6ZmV0Y2hBbmRBZGRBY3F1aXJlKGludCB2YWx1ZVRvQWRkKQorK3sKKysgICAgaW50IHJldHVyblZhbHVlID0gZmV0Y2hBbmRBZGRSZWxheGVkKHZhbHVlVG9BZGQpOworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kQWRkUmVsZWFzZShpbnQgdmFsdWVUb0FkZCkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIGZldGNoQW5kQWRkUmVsYXhlZCh2YWx1ZVRvQWRkKTsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kQWRkT3JkZXJlZChpbnQgdmFsdWVUb0FkZCkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgaW50IHJldHVyblZhbHVlID0gZmV0Y2hBbmRBZGRSZWxheGVkKHZhbHVlVG9BZGQpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIGJvb2wgUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6dGVzdEFuZFNldEFjcXVpcmUoVCAqZXhwZWN0ZWRWYWx1ZSwgVCAqbmV3VmFsdWUpCisreworKyAgICBib29sIHJldHVyblZhbHVlID0gdGVzdEFuZFNldFJlbGF4ZWQoZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUpOworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojp0ZXN0QW5kU2V0UmVsZWFzZShUICpleHBlY3RlZFZhbHVlLCBUICpuZXdWYWx1ZSkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHRlc3RBbmRTZXRSZWxheGVkKGV4cGVjdGVkVmFsdWUsIG5ld1ZhbHVlKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojp0ZXN0QW5kU2V0T3JkZXJlZChUICpleHBlY3RlZFZhbHVlLCBUICpuZXdWYWx1ZSkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgYm9vbCByZXR1cm5WYWx1ZSA9IHRlc3RBbmRTZXRBY3F1aXJlKGV4cGVjdGVkVmFsdWUsIG5ld1ZhbHVlKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBUICpRQmFzaWNBdG9taWNQb2ludGVyPFQ+OjpmZXRjaEFuZFN0b3JlQWNxdWlyZShUICpuZXdWYWx1ZSkKKyt7CisrICAgIFQgKnJldHVyblZhbHVlID0gZmV0Y2hBbmRTdG9yZVJlbGF4ZWQobmV3VmFsdWUpOworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgVCAqUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6ZmV0Y2hBbmRTdG9yZVJlbGVhc2UoVCAqbmV3VmFsdWUpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiBmZXRjaEFuZFN0b3JlUmVsYXhlZChuZXdWYWx1ZSk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIFQgKlFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmZldGNoQW5kU3RvcmVPcmRlcmVkKFQgKm5ld1ZhbHVlKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICBUICpyZXR1cm5WYWx1ZSA9IGZldGNoQW5kU3RvcmVSZWxheGVkKG5ld1ZhbHVlKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBUICpRQmFzaWNBdG9taWNQb2ludGVyPFQ+OjpmZXRjaEFuZEFkZEFjcXVpcmUocXB0cmRpZmYgdmFsdWVUb0FkZCkKKyt7CisrICAgIFQgKnJldHVyblZhbHVlID0gZmV0Y2hBbmRBZGRSZWxheGVkKHZhbHVlVG9BZGQpOworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgVCAqUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6ZmV0Y2hBbmRBZGRSZWxlYXNlKHFwdHJkaWZmIHZhbHVlVG9BZGQpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiBmZXRjaEFuZEFkZFJlbGF4ZWQodmFsdWVUb0FkZCk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIFQgKlFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmZldGNoQW5kQWRkT3JkZXJlZChxcHRyZGlmZiB2YWx1ZVRvQWRkKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICBUICpyZXR1cm5WYWx1ZSA9IGZldGNoQW5kQWRkUmVsYXhlZCh2YWx1ZVRvQWRkKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKysjdW5kZWYgUV9EQVRBX01FTU9SWV9CQVJSSUVSCisrI3VuZGVmIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVIKKysKKytRVF9FTkRfTkFNRVNQQUNFCisrCisrUVRfRU5EX0hFQURFUgorKworKyNlbmRpZiAvLyBRQVRPTUlDX0FBUkNINjRfSAorZGlmZiAtLWdpdCBhL3NyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hcmNoLmggYi9zcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYXJjaC5oCitpbmRleCAxNDE3MjZjLi4zZTk2OTI2IDEwMDY0NAorLS0tIGEvc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FyY2guaAorKysrIGIvc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FyY2guaAorQEAgLTk0LDYgKzk0LDggQEAgUVRfQkVHSU5fSEVBREVSCisgIyAgaW5jbHVkZSAiUXRDb3JlL3FhdG9taWNfc2g0YS5oIgorICNlbGlmIGRlZmluZWQoUVRfQVJDSF9OQUNMKQorICMgIGluY2x1ZGUgIlF0Q29yZS9xYXRvbWljX2dlbmVyaWMuaCIKKysjZWxpZiBkZWZpbmVkKFFUX0FSQ0hfQUFSQ0g2NCkKKysjICBpbmNsdWRlICJRdENvcmUvcWF0b21pY19hYXJjaDY0LmgiCisgI2Vsc2UKKyAjICBlcnJvciAiUXQgaGFzIG5vdCBiZWVuIHBvcnRlZCB0byB0aGlzIGFyY2hpdGVjdHVyZSIKKyAjZW5kaWYKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMxLWFhcmNoNjRfYXJtNjRfbWtzcGVjcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMS1hYXJjaDY0X2FybTY0X21rc3BlY3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAxZTdhZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMS1hYXJjaDY0X2FybTY0X21rc3BlY3MucGF0Y2gKQEAgLTAsMCArMSwxMjQgQEAKK0Zyb20gNzA5MGZjODBmZjYzMDcxMmE5MGRlOTI0MDMxOTBmNjQ3ZGQzOGEzOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9MaXNhbmRybz0yMERhbWk9QzM9QTFuPTIwTmljYW5vcj0yMFA9QzM9QTlyZXo9MjBNZXllcj89CisgPHBlcmV6bWV5ZXJAZ21haWwuY29tPgorRGF0ZTogU2F0LCAxNSBNYXIgMjAxNCAxNTozNTowMCAtMDMwMAorU3ViamVjdDogW1BBVENIXSBta3NwZWNzIGZvciBBQXJjaDY0IChha2EgYXJtNjQpLgorCitQYXRjaCBieSBNYXJjaW4gSnVzemtpZXdpY3ogPG1hcmNpbkBqdXN6a2lld2ljei5jb20ucGw+CitsaWNlbnNlZCB1bmRlciBlaXRoZXIgUHVibGljIERvbWFpbiBvciBCU0Q6CisKKzxodHRwczovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTczNTQ4OCMxNzk+CisKK0NoYW5nZS1JZDogSTIxZjE3OTUzMjM0Y2ZiMTc2YmFjMDIzZTUyZWNkYzkyN2ZjNWMxYTkKKworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLQorIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMgKysrCisgbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xbWFrZS5jb25mICAgICAgfCAyNyArKysrKysrKysrKysrKysrKysrKworIG1rc3BlY3MvbGludXgtZysrLWFhcmNoNjQvcXBsYXRmb3JtZGVmcy5oIHwgNDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgNzIgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FtYWtlLmNvbmYKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xcGxhdGZvcm1kZWZzLmgKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggYTliYTdjOC4uZTU3ZDA1MyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtMjgwOCw2ICsyODA4LDkgQEAgaWYgWyAiJENGR19FTUJFRERFRCIgIT0gIm5vIiBdOyB0aGVuCisgICAgICAgICAgICAgKjg2XzY0KQorICAgICAgICAgICAgICAgICBQTEFURk9STT1xd3MvbGludXgteDg2XzY0LWcrKworICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgIGFhcmNoNjQpCisrICAgICAgICAgICAgICAgIFBMQVRGT1JNPWxpbnV4LWFhcmNoNjQtZysrCisrICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgUExBVEZPUk09cXdzL2xpbnV4LWdlbmVyaWMtZysrCisgICAgICAgICAgICAgICAgIDs7CitkaWZmIC0tZ2l0IGEvbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xbWFrZS5jb25mIGIvbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xbWFrZS5jb25mCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZWJjMGE5MgorLS0tIC9kZXYvbnVsbAorKysrIGIvbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xbWFrZS5jb25mCitAQCAtMCwwICsxLDI3IEBACisrIworKyMgcW1ha2UgY29uZmlndXJhdGlvbiBmb3IgbGludXgtZysrCisrIworKyMgV3JpdHRlbiBmb3IgR05VL0xpbnV4IHBsYXRmb3JtcyB0aGF0IGhhdmUgYm90aCBsaWIgYW5kIGxpYjY0IGRpcmVjdG9yaWVzLAorKyMgbGlrZSB0aGUgQU1EIE9wdGVyb24uCisrIworKworK01BS0VGSUxFX0dFTkVSQVRPUiAgICA9IFVOSVgKKytUQVJHRVRfUExBVEZPUk0gICAgICAgPSB1bml4CisrVEVNUExBVEUgICAgICAgICAgICAgID0gYXBwCisrQ09ORklHICAgICAgICAgICAgICAgKz0gcXQgd2Fybl9vbiByZWxlYXNlIGluY3JlbWVudGFsIGxpbmtfcHJsIGdkYl9kd2FyZl9pbmRleAorK1FUICAgICAgICAgICAgICAgICAgICs9IGNvcmUgZ3VpCisrUU1BS0VfSU5DUkVNRU5UQUxfU1RZTEUgPSBzdWJsaWIKKysKKytRTUFLRV9DRkxBR1MgICAgID0KKytRTUFLRV9MRkxBR1MgICAgID0KKysKKytRTUFLRV9DRkxBR1NfUkVMRUFTRSAgICs9IC1PMgorKworK2luY2x1ZGUoLi4vY29tbW9uL2xpbnV4LmNvbmYpCisraW5jbHVkZSguLi9jb21tb24vZ2NjLWJhc2UtdW5peC5jb25mKQorK2luY2x1ZGUoLi4vY29tbW9uL2crKy11bml4LmNvbmYpCisrCisrUU1BS0VfTElCRElSX1gxMSAgICAgID0gL3Vzci9YMTFSNi9saWI2NAorK1FNQUtFX0xJQkRJUl9PUEVOR0wgICA9IC91c3IvWDExUjYvbGliNjQKKysKKytsb2FkKHF0X2NvbmZpZykKK2RpZmYgLS1naXQgYS9ta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FwbGF0Zm9ybWRlZnMuaCBiL21rc3BlY3MvbGludXgtZysrLWFhcmNoNjQvcXBsYXRmb3JtZGVmcy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNTYyMTI4YgorLS0tIC9kZXYvbnVsbAorKysrIGIvbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xcGxhdGZvcm1kZWZzLmgKK0BAIC0wLDAgKzEsNDIgQEAKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyoqCisrKiogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisrKiogQ29udGFjdDogaHR0cDovL3d3dy5xdC1wcm9qZWN0Lm9yZy9sZWdhbAorKyoqCisrKiogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHFtYWtlIHNwZWMgb2YgdGhlIFF0IFRvb2xraXQuCisrKioKKysqKiAkUVRfQkVHSU5fTElDRU5TRTpMR1BMJAorKyoqIENvbW1lcmNpYWwgTGljZW5zZSBVc2FnZQorKyoqIExpY2Vuc2VlcyBob2xkaW5nIHZhbGlkIGNvbW1lcmNpYWwgUXQgbGljZW5zZXMgbWF5IHVzZSB0aGlzIGZpbGUgaW4KKysqKiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbW1lcmNpYWwgbGljZW5zZSBhZ3JlZW1lbnQgcHJvdmlkZWQgd2l0aCB0aGUKKysqKiBTb2Z0d2FyZSBvciwgYWx0ZXJuYXRpdmVseSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBjb250YWluZWQgaW4KKysqKiBhIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBEaWdpYS4gIEZvciBsaWNlbnNpbmcgdGVybXMgYW5kCisrKiogY29uZGl0aW9ucyBzZWUgaHR0cDovL3F0LmRpZ2lhLmNvbS9saWNlbnNpbmcuICBGb3IgZnVydGhlciBpbmZvcm1hdGlvbgorKyoqIHVzZSB0aGUgY29udGFjdCBmb3JtIGF0IGh0dHA6Ly9xdC5kaWdpYS5jb20vY29udGFjdC11cy4KKysqKgorKyoqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBVc2FnZQorKyoqIEFsdGVybmF0aXZlbHksIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIKKysqKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorKyoqIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUgZmlsZSBMSUNFTlNFLkxHUEwgaW5jbHVkZWQgaW4gdGhlCisrKiogcGFja2FnaW5nIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSByZXZpZXcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB0bworKyoqIGVuc3VyZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIHJlcXVpcmVtZW50cworKyoqIHdpbGwgYmUgbWV0OiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2xncGwtMi4xLmh0bWwuCisrKioKKysqKiBJbiBhZGRpdGlvbiwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgRGlnaWEgZ2l2ZXMgeW91IGNlcnRhaW4gYWRkaXRpb25hbAorKyoqIHJpZ2h0cy4gIFRoZXNlIHJpZ2h0cyBhcmUgZGVzY3JpYmVkIGluIHRoZSBEaWdpYSBRdCBMR1BMIEV4Y2VwdGlvbgorKyoqIHZlcnNpb24gMS4xLCBpbmNsdWRlZCBpbiB0aGUgZmlsZSBMR1BMX0VYQ0VQVElPTi50eHQgaW4gdGhpcyBwYWNrYWdlLgorKyoqCisrKiogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVXNhZ2UKKysqKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKysqKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMy4wIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorKyoqIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUgZmlsZSBMSUNFTlNFLkdQTCBpbmNsdWRlZCBpbiB0aGUKKysqKiBwYWNrYWdpbmcgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHJldmlldyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHRvCisrKiogZW5zdXJlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMuMCByZXF1aXJlbWVudHMgd2lsbCBiZQorKyoqIG1ldDogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sLgorKyoqCisrKioKKysqKiAkUVRfRU5EX0xJQ0VOU0UkCisrKioKKysqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKyNpbmNsdWRlICIuLi9saW51eC1nKysvcXBsYXRmb3JtZGVmcy5oIgorLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzItYWFyY2g2NF9hZGRfaGVhZGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMyLWFhcmNoNjRfYWRkX2hlYWRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzhmNzg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMyLWFhcmNoNjRfYWRkX2hlYWRlci5wYXRjaApAQCAtMCwwICsxLDE4IEBACitBZGQgbWlzc2luZyBoZWFkZXIgZm9yIGFhcmNoNjQuIEFuZCBpbnN0YWxsIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FhcmNoNjQuaC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitkaWZmIC1OcnUgcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy00LjguNi5vcmlnL2luY2x1ZGUvUXRDb3JlL3FhdG9taWNfYWFyY2g2NC5oIHF0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtNC44LjYvaW5jbHVkZS9RdENvcmUvcWF0b21pY19hYXJjaDY0LmgKKy0tLSBxdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLTQuOC42Lm9yaWcvaW5jbHVkZS9RdENvcmUvcWF0b21pY19hYXJjaDY0LmgJMTk3MC0wMS0wMSAwODozMDowMC4wMDAwMDAwMDAgKzA4MzAKKysrKyBxdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLTQuOC42L2luY2x1ZGUvUXRDb3JlL3FhdG9taWNfYWFyY2g2NC5oCTIwMTQtMDktMDkgMTc6MTg6MDMuNzY4MzUyNTUxICswODAwCitAQCAtMCwwICsxIEBACisrI2luY2x1ZGUgIi4uLy4uL3NyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hYXJjaDY0LmgiCistLS0gcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy00LjguNi9pbmNsdWRlL1F0Q29yZS9oZWFkZXJzLnByaS5vcmlnCTIwMTQtMDktMDkgMTg6MDU6MzcuMTAwNDMwMzExICswODAwCisrKysgcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy00LjguNi9pbmNsdWRlL1F0Q29yZS9oZWFkZXJzLnByaQkyMDE0LTA5LTA5IDE4OjA1OjU5LjExMjQzMDkxMSArMDgwMAorQEAgLTEsMyArMSwzIEBACistU1lOQ1FULkhFQURFUl9GSUxFUyA9IC4uL2NvcmVsaWIva2VybmVsL3FhYnN0cmFjdGV2ZW50ZGlzcGF0Y2hlci5oIC4uL2NvcmVsaWIva2VybmVsL3FhYnN0cmFjdGl0ZW1tb2RlbC5oIC4uL2NvcmVsaWIva2VybmVsL3FiYXNpY3RpbWVyLmggLi4vY29yZWxpYi9rZXJuZWwvcWNvcmVhcHBsaWNhdGlvbi5oIC4uL2NvcmVsaWIva2VybmVsL3Fjb3JlZXZlbnQuaCAuLi9jb3JlbGliL2tlcm5lbC9xZXZlbnRsb29wLmggLi4vY29yZWxpYi9rZXJuZWwvcWZ1bmN0aW9uc19uYWNsLmggLi4vY29yZWxpYi9rZXJuZWwvcWZ1bmN0aW9uc192eHdvcmtzLmggLi4vY29yZWxpYi9rZXJuZWwvcWZ1bmN0aW9uc193aW5jZS5oIC4uL2NvcmVsaWIva2VybmVsL3FtYXRoLmggLi4vY29yZWxpYi9rZXJuZWwvcW1ldGFvYmplY3QuaCAuLi9jb3JlbGliL2tlcm5lbC9xbWV0YXR5cGUuaCAuLi9jb3JlbGliL2tlcm5lbC9xbWltZWRhdGEuaCAuLi9jb3JlbGliL2tlcm5lbC9xb2JqZWN0LmggLi4vY29yZWxpYi9rZXJuZWwvcW9iamVjdGNsZWFudXBoYW5kbGVyLmggLi4vY29yZWxpYi9rZXJuZWwvcW9iamVjdGRlZnMuaCAuLi9jb3JlbGliL2tlcm5lbC9xcG9pbnRlci5oIC4uL2NvcmVsaWIva2VybmVsL3FzaGFyZWRtZW1vcnkuaCAuLi9jb3JlbGliL2tlcm5lbC9xc2lnbmFsbWFwcGVyLmggLi4vY29yZWxpYi9rZXJuZWwvcXNvY2tldG5vdGlmaWVyLmggLi4vY29yZWxpYi9rZXJuZWwvcXN5c3RlbXNlbWFwaG9yZS5oIC4uL2NvcmVsaWIva2VybmVsL3F0aW1lci5oIC4uL2NvcmVsaWIva2VybmVsL3F0cmFuc2xhdG9yLmggLi4vY29yZWxpYi9rZXJuZWwvcXZhcmlhbnQuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xYWJzdHJhY3RhbmltYXRpb24uaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xYW5pbWF0aW9uZ3JvdXAuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xcGFyYWxsZWxhbmltYXRpb25ncm91cC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FwYXVzZWFuaW1hdGlvbi5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3Fwcm9wZXJ0eWFuaW1hdGlvbi5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FzZXF1ZW50aWFsYW5pbWF0aW9uZ3JvdXAuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xdmFyaWFudGFuaW1hdGlvbi5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FscGhhLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJjaC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FybS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FybXY1LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJtdjYuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcm12Ny5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2F2cjMyLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYmZpbi5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2Jvb3RzdHJhcC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2dlbmVyaWMuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19pMzg2LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfaWE2NC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2ludGVncml0eS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX202OGsuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19tYWNvc3guaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19taXBzLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfcGFyaXNjLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfcG93ZXJwYy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3MzOTAuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19zaC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3NoNGEuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19zcGFyYy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3N5bWJpYW4uaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY192eHdvcmtzLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfd2luZG93cy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3dpbmRvd3NjZS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3g4Nl82NC5oIC4uL2NvcmVsaWIvdG9vbHMvcWFsZ29yaXRobXMuaCAuLi9jb3JlbGliL3Rvb2xzL3FiaXRhcnJheS5oIC4uL2NvcmVsaWIvdG9vbHMvcWJ5dGVhcnJheS5oIC4uL2NvcmVsaWIvdG9vbHMvcWJ5dGVhcnJheW1hdGNoZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FjYWNoZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWNoYXIuaCAuLi9jb3JlbGliL3Rvb2xzL3Fjb250YWluZXJmd2QuaCAuLi9jb3JlbGliL3Rvb2xzL3Fjb250aWd1b3VzY2FjaGUuaCAuLi9jb3JlbGliL3Rvb2xzL3FjcnlwdG9ncmFwaGljaGFzaC5oIC4uL2NvcmVsaWIvdG9vbHMvcWRhdGV0aW1lLmggLi4vY29yZWxpYi90b29scy9xZWFzaW5nY3VydmUuaCAuLi9jb3JlbGliL3Rvb2xzL3FlbGFwc2VkdGltZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FoYXNoLmggLi4vY29yZWxpYi90b29scy9xaXRlcmF0b3IuaCAuLi9jb3JlbGliL3Rvb2xzL3FsaW5lLmggLi4vY29yZWxpYi90b29scy9xbGlua2VkbGlzdC5oIC4uL2NvcmVsaWIvdG9vbHMvcWxpc3QuaCAuLi9jb3JlbGliL3Rvb2xzL3Fsb2NhbGUuaCAuLi9jb3JlbGliL3Rvb2xzL3Fsb2NhbGVfYmxhY2tiZXJyeS5oIC4uL2NvcmVsaWIvdG9vbHMvcW1hcC5oIC4uL2NvcmVsaWIvdG9vbHMvcW1hcmdpbnMuaCAuLi9jb3JlbGliL3Rvb2xzL3FwYWlyLmggLi4vY29yZWxpYi90b29scy9xcG9pbnQuaCAuLi9jb3JlbGliL3Rvb2xzL3FxdWV1ZS5oIC4uL2NvcmVsaWIvdG9vbHMvcXJlY3QuaCAuLi9jb3JlbGliL3Rvb2xzL3FyZWdleHAuaCAuLi9jb3JlbGliL3Rvb2xzL3FzY29wZWRwb2ludGVyLmggLi4vY29yZWxpYi90b29scy9xc2NvcGVkdmFsdWVyb2xsYmFjay5oIC4uL2NvcmVsaWIvdG9vbHMvcXNldC5oIC4uL2NvcmVsaWIvdG9vbHMvcXNoYXJlZGRhdGEuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaGFyZWRwb2ludGVyLmggLi4vY29yZWxpYi90b29scy9xc2hhcmVkcG9pbnRlcl9pbXBsLmggLi4vY29yZWxpYi90b29scy9xc2l6ZS5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0YWNrLmggLi4vY29yZWxpYi90b29scy9xc3RyaW5nLmggLi4vY29yZWxpYi90b29scy9xc3RyaW5nYnVpbGRlci5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0cmluZ2xpc3QuaCAuLi9jb3JlbGliL3Rvb2xzL3FzdHJpbmdtYXRjaGVyLmggLi4vY29yZWxpYi90b29scy9xdGV4dGJvdW5kYXJ5ZmluZGVyLmggLi4vY29yZWxpYi90b29scy9xdGltZWxpbmUuaCAuLi9jb3JlbGliL3Rvb2xzL3F2YXJsZW5ndGhhcnJheS5oIC4uL2NvcmVsaWIvdG9vbHMvcXZlY3Rvci5oIC4uL2NvcmVsaWIvcGx1Z2luL3FmYWN0b3J5aW50ZXJmYWNlLmggLi4vY29yZWxpYi9wbHVnaW4vcWxpYnJhcnkuaCAuLi9jb3JlbGliL3BsdWdpbi9xcGx1Z2luLmggLi4vY29yZWxpYi9wbHVnaW4vcXBsdWdpbmxvYWRlci5oIC4uL2NvcmVsaWIvcGx1Z2luL3F1dWlkLmggLi4vY29yZWxpYi94bWwvcXhtbHN0cmVhbS5oIC4uL2NvcmVsaWIvdGhyZWFkL3FhdG9taWMuaCAuLi9jb3JlbGliL3RocmVhZC9xYmFzaWNhdG9taWMuaCAuLi9jb3JlbGliL3RocmVhZC9xbXV0ZXguaCAuLi9jb3JlbGliL3RocmVhZC9xcmVhZHdyaXRlbG9jay5oIC4uL2NvcmVsaWIvdGhyZWFkL3FzZW1hcGhvcmUuaCAuLi9jb3JlbGliL3RocmVhZC9xdGhyZWFkLmggLi4vY29yZWxpYi90aHJlYWQvcXRocmVhZHN0b3JhZ2UuaCAuLi9jb3JlbGliL3RocmVhZC9xd2FpdGNvbmRpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FhYnN0cmFjdHN0YXRlLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWFic3RyYWN0dHJhbnNpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FldmVudHRyYW5zaXRpb24uaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xZmluYWxzdGF0ZS5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FoaXN0b3J5c3RhdGUuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc2lnbmFsdHJhbnNpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzdGF0ZS5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzdGF0ZW1hY2hpbmUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJlaW50ZXJmYWNlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FmdXR1cmVzeW5jaHJvbml6ZXIuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZXdhdGNoZXIuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXJ1bm5hYmxlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGNvbXBpbGVydGVzdC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRleGNlcHRpb24uaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50ZmlsdGVyLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGZpbHRlcmtlcm5lbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRmdW5jdGlvbndyYXBwZXJzLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGl0ZXJhdGVrZXJuZWwuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50bWFwLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudG1hcGtlcm5lbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRtZWRpYW4uaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50cmVkdWNla2VybmVsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHJlc3VsdHN0b3JlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHJ1bi5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRydW5iYXNlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHN0b3JlZGZ1bmN0aW9uY2FsbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnR0aHJlYWRlbmdpbmUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRocmVhZHBvb2wuaCAuLi9jb3JlbGliL2lvL3FhYnN0cmFjdGZpbGVlbmdpbmUuaCAuLi9jb3JlbGliL2lvL3FidWZmZXIuaCAuLi9jb3JlbGliL2lvL3FkYXRhc3RyZWFtLmggLi4vY29yZWxpYi9pby9xZGVidWcuaCAuLi9jb3JlbGliL2lvL3FkaXIuaCAuLi9jb3JlbGliL2lvL3FkaXJpdGVyYXRvci5oIC4uL2NvcmVsaWIvaW8vcWZpbGUuaCAuLi9jb3JlbGliL2lvL3FmaWxlaW5mby5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyLmggLi4vY29yZWxpYi9pby9xZnNmaWxlZW5naW5lLmggLi4vY29yZWxpYi9pby9xaW9kZXZpY2UuaCAuLi9jb3JlbGliL2lvL3Fwcm9jZXNzLmggLi4vY29yZWxpYi9pby9xcmVzb3VyY2UuaCAuLi9jb3JlbGliL2lvL3FzZXR0aW5ncy5oIC4uL2NvcmVsaWIvaW8vcXRlbXBvcmFyeWZpbGUuaCAuLi9jb3JlbGliL2lvL3F0ZXh0c3RyZWFtLmggLi4vY29yZWxpYi9pby9xdXJsLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1kaXN0LmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1sYXJnZS5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWctbWVkaXVtLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1taW5pbWFsLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1uYWNsLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1zbWFsbC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FlbmRpYW4uaCAuLi9jb3JlbGliL2dsb2JhbC9xZmVhdHVyZXMuaCAuLi9jb3JlbGliL2dsb2JhbC9xZ2xvYmFsLmggLi4vY29yZWxpYi9nbG9iYWwvcWxpYnJhcnlpbmZvLmggLi4vY29yZWxpYi9nbG9iYWwvcW5hbWVzcGFjZS5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FudW1lcmljLmggLi4vY29yZWxpYi9nbG9iYWwvcXRfd2luZG93cy5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWcuaCAuLi9jb3JlbGliL2NvZGVjcy9xdGV4dGNvZGVjLmggLi4vY29yZWxpYi9jb2RlY3MvcXRleHRjb2RlY3BsdWdpbi5oIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0Q29yZSAKKytTWU5DUVQuSEVBREVSX0ZJTEVTID0gLi4vY29yZWxpYi9rZXJuZWwvcWFic3RyYWN0ZXZlbnRkaXNwYXRjaGVyLmggLi4vY29yZWxpYi9rZXJuZWwvcWFic3RyYWN0aXRlbW1vZGVsLmggLi4vY29yZWxpYi9rZXJuZWwvcWJhc2ljdGltZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZWFwcGxpY2F0aW9uLmggLi4vY29yZWxpYi9rZXJuZWwvcWNvcmVldmVudC5oIC4uL2NvcmVsaWIva2VybmVsL3FldmVudGxvb3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xZnVuY3Rpb25zX25hY2wuaCAuLi9jb3JlbGliL2tlcm5lbC9xZnVuY3Rpb25zX3Z4d29ya3MuaCAuLi9jb3JlbGliL2tlcm5lbC9xZnVuY3Rpb25zX3dpbmNlLmggLi4vY29yZWxpYi9rZXJuZWwvcW1hdGguaCAuLi9jb3JlbGliL2tlcm5lbC9xbWV0YW9iamVjdC5oIC4uL2NvcmVsaWIva2VybmVsL3FtZXRhdHlwZS5oIC4uL2NvcmVsaWIva2VybmVsL3FtaW1lZGF0YS5oIC4uL2NvcmVsaWIva2VybmVsL3FvYmplY3QuaCAuLi9jb3JlbGliL2tlcm5lbC9xb2JqZWN0Y2xlYW51cGhhbmRsZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xb2JqZWN0ZGVmcy5oIC4uL2NvcmVsaWIva2VybmVsL3Fwb2ludGVyLmggLi4vY29yZWxpYi9rZXJuZWwvcXNoYXJlZG1lbW9yeS5oIC4uL2NvcmVsaWIva2VybmVsL3FzaWduYWxtYXBwZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xc29ja2V0bm90aWZpZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xc3lzdGVtc2VtYXBob3JlLmggLi4vY29yZWxpYi9rZXJuZWwvcXRpbWVyLmggLi4vY29yZWxpYi9rZXJuZWwvcXRyYW5zbGF0b3IuaCAuLi9jb3JlbGliL2tlcm5lbC9xdmFyaWFudC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FhYnN0cmFjdGFuaW1hdGlvbi5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FhbmltYXRpb25ncm91cC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FwYXJhbGxlbGFuaW1hdGlvbmdyb3VwLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXBhdXNlYW5pbWF0aW9uLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXByb3BlcnR5YW5pbWF0aW9uLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXNlcXVlbnRpYWxhbmltYXRpb25ncm91cC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3F2YXJpYW50YW5pbWF0aW9uLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYWxwaGEuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcmNoLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJtLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJtdjUuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcm12Ni5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FybXY3LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYWFyY2g2NC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2F2cjMyLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYmZpbi5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2Jvb3RzdHJhcC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2dlbmVyaWMuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19pMzg2LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfaWE2NC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2ludGVncml0eS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX202OGsuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19tYWNvc3guaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19taXBzLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfcGFyaXNjLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfcG93ZXJwYy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3MzOTAuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19zaC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3NoNGEuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19zcGFyYy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3N5bWJpYW4uaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY192eHdvcmtzLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfd2luZG93cy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3dpbmRvd3NjZS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3g4Nl82NC5oIC4uL2NvcmVsaWIvdG9vbHMvcWFsZ29yaXRobXMuaCAuLi9jb3JlbGliL3Rvb2xzL3FiaXRhcnJheS5oIC4uL2NvcmVsaWIvdG9vbHMvcWJ5dGVhcnJheS5oIC4uL2NvcmVsaWIvdG9vbHMvcWJ5dGVhcnJheW1hdGNoZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FjYWNoZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWNoYXIuaCAuLi9jb3JlbGliL3Rvb2xzL3Fjb250YWluZXJmd2QuaCAuLi9jb3JlbGliL3Rvb2xzL3Fjb250aWd1b3VzY2FjaGUuaCAuLi9jb3JlbGliL3Rvb2xzL3FjcnlwdG9ncmFwaGljaGFzaC5oIC4uL2NvcmVsaWIvdG9vbHMvcWRhdGV0aW1lLmggLi4vY29yZWxpYi90b29scy9xZWFzaW5nY3VydmUuaCAuLi9jb3JlbGliL3Rvb2xzL3FlbGFwc2VkdGltZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FoYXNoLmggLi4vY29yZWxpYi90b29scy9xaXRlcmF0b3IuaCAuLi9jb3JlbGliL3Rvb2xzL3FsaW5lLmggLi4vY29yZWxpYi90b29scy9xbGlua2VkbGlzdC5oIC4uL2NvcmVsaWIvdG9vbHMvcWxpc3QuaCAuLi9jb3JlbGliL3Rvb2xzL3Fsb2NhbGUuaCAuLi9jb3JlbGliL3Rvb2xzL3Fsb2NhbGVfYmxhY2tiZXJyeS5oIC4uL2NvcmVsaWIvdG9vbHMvcW1hcC5oIC4uL2NvcmVsaWIvdG9vbHMvcW1hcmdpbnMuaCAuLi9jb3JlbGliL3Rvb2xzL3FwYWlyLmggLi4vY29yZWxpYi90b29scy9xcG9pbnQuaCAuLi9jb3JlbGliL3Rvb2xzL3FxdWV1ZS5oIC4uL2NvcmVsaWIvdG9vbHMvcXJlY3QuaCAuLi9jb3JlbGliL3Rvb2xzL3FyZWdleHAuaCAuLi9jb3JlbGliL3Rvb2xzL3FzY29wZWRwb2ludGVyLmggLi4vY29yZWxpYi90b29scy9xc2NvcGVkdmFsdWVyb2xsYmFjay5oIC4uL2NvcmVsaWIvdG9vbHMvcXNldC5oIC4uL2NvcmVsaWIvdG9vbHMvcXNoYXJlZGRhdGEuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaGFyZWRwb2ludGVyLmggLi4vY29yZWxpYi90b29scy9xc2hhcmVkcG9pbnRlcl9pbXBsLmggLi4vY29yZWxpYi90b29scy9xc2l6ZS5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0YWNrLmggLi4vY29yZWxpYi90b29scy9xc3RyaW5nLmggLi4vY29yZWxpYi90b29scy9xc3RyaW5nYnVpbGRlci5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0cmluZ2xpc3QuaCAuLi9jb3JlbGliL3Rvb2xzL3FzdHJpbmdtYXRjaGVyLmggLi4vY29yZWxpYi90b29scy9xdGV4dGJvdW5kYXJ5ZmluZGVyLmggLi4vY29yZWxpYi90b29scy9xdGltZWxpbmUuaCAuLi9jb3JlbGliL3Rvb2xzL3F2YXJsZW5ndGhhcnJheS5oIC4uL2NvcmVsaWIvdG9vbHMvcXZlY3Rvci5oIC4uL2NvcmVsaWIvcGx1Z2luL3FmYWN0b3J5aW50ZXJmYWNlLmggLi4vY29yZWxpYi9wbHVnaW4vcWxpYnJhcnkuaCAuLi9jb3JlbGliL3BsdWdpbi9xcGx1Z2luLmggLi4vY29yZWxpYi9wbHVnaW4vcXBsdWdpbmxvYWRlci5oIC4uL2NvcmVsaWIvcGx1Z2luL3F1dWlkLmggLi4vY29yZWxpYi94bWwvcXhtbHN0cmVhbS5oIC4uL2NvcmVsaWIvdGhyZWFkL3FhdG9taWMuaCAuLi9jb3JlbGliL3RocmVhZC9xYmFzaWNhdG9taWMuaCAuLi9jb3JlbGliL3RocmVhZC9xbXV0ZXguaCAuLi9jb3JlbGliL3RocmVhZC9xcmVhZHdyaXRlbG9jay5oIC4uL2NvcmVsaWIvdGhyZWFkL3FzZW1hcGhvcmUuaCAuLi9jb3JlbGliL3RocmVhZC9xdGhyZWFkLmggLi4vY29yZWxpYi90aHJlYWQvcXRocmVhZHN0b3JhZ2UuaCAuLi9jb3JlbGliL3RocmVhZC9xd2FpdGNvbmRpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FhYnN0cmFjdHN0YXRlLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWFic3RyYWN0dHJhbnNpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FldmVudHRyYW5zaXRpb24uaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xZmluYWxzdGF0ZS5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FoaXN0b3J5c3RhdGUuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc2lnbmFsdHJhbnNpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzdGF0ZS5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzdGF0ZW1hY2hpbmUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJlaW50ZXJmYWNlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FmdXR1cmVzeW5jaHJvbml6ZXIuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZXdhdGNoZXIuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXJ1bm5hYmxlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGNvbXBpbGVydGVzdC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRleGNlcHRpb24uaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50ZmlsdGVyLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGZpbHRlcmtlcm5lbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRmdW5jdGlvbndyYXBwZXJzLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGl0ZXJhdGVrZXJuZWwuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50bWFwLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudG1hcGtlcm5lbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRtZWRpYW4uaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50cmVkdWNla2VybmVsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHJlc3VsdHN0b3JlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHJ1bi5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRydW5iYXNlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHN0b3JlZGZ1bmN0aW9uY2FsbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnR0aHJlYWRlbmdpbmUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRocmVhZHBvb2wuaCAuLi9jb3JlbGliL2lvL3FhYnN0cmFjdGZpbGVlbmdpbmUuaCAuLi9jb3JlbGliL2lvL3FidWZmZXIuaCAuLi9jb3JlbGliL2lvL3FkYXRhc3RyZWFtLmggLi4vY29yZWxpYi9pby9xZGVidWcuaCAuLi9jb3JlbGliL2lvL3FkaXIuaCAuLi9jb3JlbGliL2lvL3FkaXJpdGVyYXRvci5oIC4uL2NvcmVsaWIvaW8vcWZpbGUuaCAuLi9jb3JlbGliL2lvL3FmaWxlaW5mby5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyLmggLi4vY29yZWxpYi9pby9xZnNmaWxlZW5naW5lLmggLi4vY29yZWxpYi9pby9xaW9kZXZpY2UuaCAuLi9jb3JlbGliL2lvL3Fwcm9jZXNzLmggLi4vY29yZWxpYi9pby9xcmVzb3VyY2UuaCAuLi9jb3JlbGliL2lvL3FzZXR0aW5ncy5oIC4uL2NvcmVsaWIvaW8vcXRlbXBvcmFyeWZpbGUuaCAuLi9jb3JlbGliL2lvL3F0ZXh0c3RyZWFtLmggLi4vY29yZWxpYi9pby9xdXJsLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1kaXN0LmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1sYXJnZS5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWctbWVkaXVtLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1taW5pbWFsLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1uYWNsLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1zbWFsbC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FlbmRpYW4uaCAuLi9jb3JlbGliL2dsb2JhbC9xZmVhdHVyZXMuaCAuLi9jb3JlbGliL2dsb2JhbC9xZ2xvYmFsLmggLi4vY29yZWxpYi9nbG9iYWwvcWxpYnJhcnlpbmZvLmggLi4vY29yZWxpYi9nbG9iYWwvcW5hbWVzcGFjZS5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FudW1lcmljLmggLi4vY29yZWxpYi9nbG9iYWwvcXRfd2luZG93cy5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWcuaCAuLi9jb3JlbGliL2NvZGVjcy9xdGV4dGNvZGVjLmggLi4vY29yZWxpYi9jb2RlY3MvcXRleHRjb2RlY3BsdWdpbi5oIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0Q29yZSAKKyBTWU5DUVQuSEVBREVSX0NMQVNTRVMgPSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RFdmVudERpc3BhdGNoZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1vZGVsSW5kZXggLi4vLi4vaW5jbHVkZS9RdENvcmUvUVBlcnNpc3RlbnRNb2RlbEluZGV4IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNb2RlbEluZGV4TGlzdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RJdGVtTW9kZWwgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0VGFibGVNb2RlbCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RMaXN0TW9kZWwgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJhc2ljVGltZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNvcmVBcHBsaWNhdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdENsZWFuVXBGdW5jdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRXZlbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRpbWVyRXZlbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNoaWxkRXZlbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUN1c3RvbUV2ZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FEeW5hbWljUHJvcGVydHlDaGFuZ2VFdmVudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRXZlbnRMb29wIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhTWV0aG9kIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhRW51bSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YVByb3BlcnR5IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhQ2xhc3NJbmZvIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhVHlwZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YVR5cGVJZCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YVR5cGVJZDIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1pbWVEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FPYmplY3RMaXN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FPYmplY3REYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FPYmplY3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU9iamVjdFVzZXJEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FPYmplY3RDbGVhbnVwSGFuZGxlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RR2VuZXJpY0FyZ3VtZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FHZW5lcmljUmV0dXJuQXJndW1lbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFyZ3VtZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FSZXR1cm5Bcmd1bWVudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YU9iamVjdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YU9iamVjdEFjY2Vzc29yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhT2JqZWN0RXh0cmFEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTaGFyZWRNZW1vcnkgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNpZ25hbE1hcHBlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU29ja2V0Tm90aWZpZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN5c3RlbVNlbWFwaG9yZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGltZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRyYW5zbGF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZhcmlhbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZhcmlhbnRMaXN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWYXJpYW50TWFwIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWYXJpYW50SGFzaCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmFyaWFudENvbXBhcmlzb25IZWxwZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0QW5pbWF0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBbmltYXRpb25Ecml2ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFuaW1hdGlvbkdyb3VwIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQYXJhbGxlbEFuaW1hdGlvbkdyb3VwIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQYXVzZUFuaW1hdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUHJvcGVydHlBbmltYXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNlcXVlbnRpYWxBbmltYXRpb25Hcm91cCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmFyaWFudEFuaW1hdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdEFsZ29yaXRobXMgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJpdEFycmF5IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCaXRSZWYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJ5dGVBcnJheSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQnl0ZVJlZiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQnl0ZUFycmF5TWF0Y2hlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ2FjaGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxhdGluMUNoYXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNoYXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRDb250YWluZXJGd2QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNvbnRpZ3VvdXNDYWNoZURhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNvbnRpZ3VvdXNDYWNoZVR5cGVkRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ29udGlndW91c0NhY2hlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDcnlwdG9ncmFwaGljSGFzaCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRGF0ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGltZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRGF0ZVRpbWUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUVhc2luZ0N1cnZlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FFbGFwc2VkVGltZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUhhc2hEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FIYXNoRHVtbXlWYWx1ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSGFzaER1bW15Tm9kZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSGFzaE5vZGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUhhc2ggLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11bHRpSGFzaCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSGFzaEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRhYmxlSGFzaEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaW5lIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaW5lRiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGlua2VkTGlzdERhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpbmtlZExpc3ROb2RlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaW5rZWRMaXN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaW5rZWRMaXN0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGFibGVMaW5rZWRMaXN0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpc3REYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaXN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaXN0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGFibGVMaXN0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN5c3RlbUxvY2FsZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTG9jYWxlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCQlN5c3RlbUxvY2FsZURhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1hcERhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1hcE5vZGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1hcFBheWxvYWROb2RlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNYXAgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11bHRpTWFwIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNYXBJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZU1hcEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNYXJnaW5zIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQYWlyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQb2ludCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUG9pbnRGIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FRdWV1ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUmVjdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUmVjdEYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVJlZ0V4cCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2NvcGVkUG9pbnRlckRlbGV0ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNjb3BlZFBvaW50ZXJBcnJheURlbGV0ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNjb3BlZFBvaW50ZXJQb2REZWxldGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTY29wZWRQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTY29wZWRBcnJheVBvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNjb3BlZFZhbHVlUm9sbGJhY2sgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNldCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2V0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGFibGVTZXRJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2hhcmVkRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2hhcmVkRGF0YVBvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUV4cGxpY2l0bHlTaGFyZWREYXRhUG9pbnRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2hhcmVkUG9pbnRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RV2Vha1BvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNpemUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNpemVGIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdGFjayAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RkV1N0cmluZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RyaW5nIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMYXRpbjFTdHJpbmcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNoYXJSZWYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNvbnN0U3RyaW5nIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdHJpbmdSZWYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxhdGluMUxpdGVyYWwgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0Q29uY2F0ZW5hYmxlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDb25jYXRlbmFibGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN0cmluZ0J1aWxkZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN0cmluZ0xpc3RJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZVN0cmluZ0xpc3RJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RyaW5nTGlzdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RyaW5nTWF0Y2hlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dEJvdW5kYXJ5RmluZGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUaW1lTGluZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmFyTGVuZ3RoQXJyYXkgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZlY3RvckRhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZlY3RvclR5cGVkRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmVjdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWZWN0b3JJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZVZlY3Rvckl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGYWN0b3J5SW50ZXJmYWNlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaWJyYXJ5IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0UGx1Z2luIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0UGx1Z2luSW5zdGFuY2VGdW5jdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUGx1Z2luTG9hZGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FVdWlkIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1TdHJpbmdSZWYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbUF0dHJpYnV0ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtQXR0cmlidXRlcyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbU5hbWVzcGFjZURlY2xhcmF0aW9ucyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtTm90YXRpb25EZWNsYXJhdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtTm90YXRpb25EZWNsYXJhdGlvbnMgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbUVudGl0eURlY2xhcmF0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1FbnRpdHlEZWNsYXJhdGlvbnMgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbUVudGl0eVJlc29sdmVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1SZWFkZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbVdyaXRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQXRvbWljSW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBdG9taWNQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCYXNpY0F0b21pY0ludCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQmFzaWNBdG9taWNQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRleCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0ZXhMb2NrZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGV4RGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUmVhZFdyaXRlTG9jayAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUmVhZExvY2tlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RV3JpdGVMb2NrZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNlbWFwaG9yZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGhyZWFkIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUaHJlYWRTdG9yYWdlRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGhyZWFkU3RvcmFnZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RV2FpdENvbmRpdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RTdGF0ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RUcmFuc2l0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FFdmVudFRyYW5zaXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZpbmFsU3RhdGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUhpc3RvcnlTdGF0ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2lnbmFsVHJhbnNpdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RhdGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN0YXRlTWFjaGluZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRnV0dXJlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGdXR1cmVJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZUZ1dHVyZUl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGdXR1cmVJbnRlcmZhY2VCYXNlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGdXR1cmVJbnRlcmZhY2UgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZ1dHVyZVN5bmNocm9uaXplciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRnV0dXJlV2F0Y2hlckJhc2UgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZ1dHVyZVdhdGNoZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVJ1bm5hYmxlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0Q29uY3VycmVudEZpbHRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdENvbmN1cnJlbnRNYXAgLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRDb25jdXJyZW50UnVuIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUaHJlYWRQb29sIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBYnN0cmFjdEZpbGVFbmdpbmUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0RmlsZUVuZ2luZUhhbmRsZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0RmlsZUVuZ2luZUl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCdWZmZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUURhdGFTdHJlYW0gLi4vLi4vaW5jbHVkZS9RdENvcmUvUXREZWJ1ZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRGVidWcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU5vRGVidWcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUURpciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRGlySXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZpbGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZpbGVJbmZvIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGaWxlSW5mb0xpc3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZpbGVJbmZvTGlzdEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGaWxlU3lzdGVtV2F0Y2hlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRlNGaWxlRW5naW5lIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FJT0RldmljZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX1BJRCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUHJvY2Vzc0Vudmlyb25tZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQcm9jZXNzIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FSZXNvdXJjZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2V0dGluZ3MgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRlbXBvcmFyeUZpbGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRTdHJlYW0gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRTdHJlYW1GdW5jdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dFN0cmVhbU1hbmlwdWxhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUUyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dElTdHJlYW0gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRPU3RyZWFtIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FVcmwgLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRFbmRpYW4gLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRHbG9iYWwgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUludGVnZXJGb3JTaXplIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FOb0ltcGxpY2l0Qm9vbENhc3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9JTlQ4IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfVUlOVDggLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9JTlQxNiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX1VJTlQxNiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX0lOVDMyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfVUlOVDMyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfSU5UNjQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9VSU5UNjQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9MTE9ORyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX1VMTE9ORyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX0xPTkcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9VTE9ORyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3lzSW5mbyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdE1zZ0hhbmRsZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUdsb2JhbFN0YXRpYyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RR2xvYmFsU3RhdGljRGVsZXRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQm9vbCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVHlwZUluZm8gLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZsYWcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUluY29tcGF0aWJsZUZsYWcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZsYWdzIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGb3JlYWNoQ29udGFpbmVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGb3JlYWNoQ29udGFpbmVyQmFzZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGlicmFyeUluZm8gLi4vLi4vaW5jbHVkZS9RdENvcmUvUXQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUludGVybmFsIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDT09SRCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdENvbmZpZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dENvZGVjIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZXh0RW5jb2RlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dERlY29kZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRDb2RlY0ZhY3RvcnlJbnRlcmZhY2UgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRDb2RlY1BsdWdpbiAKKyBTWU5DUVQuUFJJVkFURV9IRUFERVJfRklMRVMgPSAuLi9jb3JlbGliL2tlcm5lbC9xYWJzdHJhY3RldmVudGRpc3BhdGNoZXJfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FhYnN0cmFjdGl0ZW1tb2RlbF9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWNvcmVfbWFjX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZV9zeW1iaWFuX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZV91bml4X3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZWFwcGxpY2F0aW9uX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZWNtZGxpbmVhcmdzX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZWdsb2JhbGRhdGFfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FjcmFzaGhhbmRsZXJfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FldmVudGRpc3BhdGNoZXJfYmxhY2tiZXJyeV9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWV2ZW50ZGlzcGF0Y2hlcl9nbGliX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xZXZlbnRkaXNwYXRjaGVyX3N5bWJpYW5fcC5oIC4uL2NvcmVsaWIva2VybmVsL3FldmVudGRpc3BhdGNoZXJfdW5peF9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWV2ZW50ZGlzcGF0Y2hlcl93aW5fcC5oIC4uL2NvcmVsaWIva2VybmVsL3FmdW5jdGlvbnNfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FtZXRhb2JqZWN0X3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xb2JqZWN0X3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xc2hhcmVkbWVtb3J5X3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xc3lzdGVtZXJyb3JfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FzeXN0ZW1zZW1hcGhvcmVfcC5oIC4uL2NvcmVsaWIva2VybmVsL3F0cmFuc2xhdG9yX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xdmFyaWFudF9wLmggLi4vY29yZWxpYi9rZXJuZWwvcXdpbmV2ZW50bm90aWZpZXJfcC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FhYnN0cmFjdGFuaW1hdGlvbl9wLmggLi4vY29yZWxpYi9hbmltYXRpb24vcWFuaW1hdGlvbmdyb3VwX3AuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xcGFyYWxsZWxhbmltYXRpb25ncm91cF9wLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXByb3BlcnR5YW5pbWF0aW9uX3AuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xc2VxdWVudGlhbGFuaW1hdGlvbmdyb3VwX3AuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xdmFyaWFudGFuaW1hdGlvbl9wLmggLi4vY29yZWxpYi90b29scy9xYnl0ZWRhdGFfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcWRhdGV0aW1lX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3FoYXJmYnV6el9wLmggLi4vY29yZWxpYi90b29scy9xbG9jYWxlX2RhdGFfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcWxvY2FsZV9wLmggLi4vY29yZWxpYi90b29scy9xbG9jYWxlX3Rvb2xzX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3Fwb2RsaXN0X3AuaCAuLi9jb3JlbGliL3Rvb2xzL3FyaW5nYnVmZmVyX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3FzY29wZWRwb2ludGVyX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaW1kX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3F0b29sc19wLmggLi4vY29yZWxpYi90b29scy9xdW5pY29kZXRhYmxlc19wLmggLi4vY29yZWxpYi9wbHVnaW4vcWVsZnBhcnNlcl9wLmggLi4vY29yZWxpYi9wbHVnaW4vcWZhY3Rvcnlsb2FkZXJfcC5oIC4uL2NvcmVsaWIvcGx1Z2luL3FsaWJyYXJ5X3AuaCAuLi9jb3JlbGliL3BsdWdpbi9xc3lzdGVtbGlicmFyeV9wLmggLi4vY29yZWxpYi94bWwvcXhtbHN0cmVhbV9wLmggLi4vY29yZWxpYi94bWwvcXhtbHV0aWxzX3AuaCAuLi9jb3JlbGliL3RocmVhZC9xbXV0ZXhfcC5oIC4uL2NvcmVsaWIvdGhyZWFkL3FtdXRleHBvb2xfcC5oIC4uL2NvcmVsaWIvdGhyZWFkL3FvcmRlcmVkbXV0ZXhsb2NrZXJfcC5oIC4uL2NvcmVsaWIvdGhyZWFkL3FyZWFkd3JpdGVsb2NrX3AuaCAuLi9jb3JlbGliL3RocmVhZC9xdGhyZWFkX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xYWJzdHJhY3RzdGF0ZV9wLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWFic3RyYWN0dHJhbnNpdGlvbl9wLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWV2ZW50dHJhbnNpdGlvbl9wLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWhpc3RvcnlzdGF0ZV9wLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcXNpZ25hbGV2ZW50Z2VuZXJhdG9yX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc2lnbmFsdHJhbnNpdGlvbl9wLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcXN0YXRlX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc3RhdGVtYWNoaW5lX3AuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZWludGVyZmFjZV9wLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FmdXR1cmV3YXRjaGVyX3AuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRocmVhZHBvb2xfcC5oIC4uL2NvcmVsaWIvaW8vcWFic3RyYWN0ZmlsZWVuZ2luZV9wLmggLi4vY29yZWxpYi9pby9xZGF0YXN0cmVhbV9wLmggLi4vY29yZWxpYi9pby9xZGF0YXVybF9wLmggLi4vY29yZWxpYi9pby9xZGlyX3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlX3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlaW5mb19wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbWVuZ2luZV9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbWVudHJ5X3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtaXRlcmF0b3JfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW1tZXRhZGF0YV9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXJfZG5vdGlmeV9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXJfZnNldmVudHNfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyX2lub3RpZnlfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyX2txdWV1ZV9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXJfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyX3N5bWJpYW5fcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyX3dpbl9wLmggLi4vY29yZWxpYi9pby9xZnNmaWxlZW5naW5lX2l0ZXJhdG9yX3AuaCAuLi9jb3JlbGliL2lvL3Fmc2ZpbGVlbmdpbmVfcC5oIC4uL2NvcmVsaWIvaW8vcWlvZGV2aWNlX3AuaCAuLi9jb3JlbGliL2lvL3Fub25jb250aWd1b3VzYnl0ZWRldmljZV9wLmggLi4vY29yZWxpYi9pby9xcHJvY2Vzc19wLmggLi4vY29yZWxpYi9pby9xcmVzb3VyY2VfaXRlcmF0b3JfcC5oIC4uL2NvcmVsaWIvaW8vcXJlc291cmNlX3AuaCAuLi9jb3JlbGliL2lvL3FzZXR0aW5nc19wLmggLi4vY29yZWxpYi9pby9xdGxkdXJsX3AuaCAuLi9jb3JlbGliL2lvL3F1cmx0bGRzX3AuaCAuLi9jb3JlbGliL2lvL3F3aW5kb3dzcGlwZXdyaXRlcl9wLmggLi4vY29yZWxpYi9nbG9iYWwvcW51bWVyaWNfcC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3F0X3BjaC5oIC4uL2NvcmVsaWIvY29kZWNzL3Fmb250bGFvY29kZWNfcC5oIC4uL2NvcmVsaWIvY29kZWNzL3FpY29udmNvZGVjX3AuaCAuLi9jb3JlbGliL2NvZGVjcy9xaXNjaWljb2RlY19wLmggLi4vY29yZWxpYi9jb2RlY3MvcWxhdGluY29kZWNfcC5oIC4uL2NvcmVsaWIvY29kZWNzL3FzaW1wbGVjb2RlY19wLmggLi4vY29yZWxpYi9jb2RlY3MvcXRleHRjb2RlY19wLmggLi4vY29yZWxpYi9jb2RlY3MvcXRzY2lpY29kZWNfcC5oIC4uL2NvcmVsaWIvY29kZWNzL3F1dGZjb2RlY19wLmggCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzMtY29uZmlndXJlLXN1cHBvcnQtYy0weC1zdGFuZGFyZC1mb3ItZGlyZWN0ZmQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzMtY29uZmlndXJlLXN1cHBvcnQtYy0weC1zdGFuZGFyZC1mb3ItZGlyZWN0ZmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNmYWNlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMy1jb25maWd1cmUtc3VwcG9ydC1jLTB4LXN0YW5kYXJkLWZvci1kaXJlY3RmZC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitjb25maWd1cmU6IHN1cHBvcnQgYysrMHggc3RhbmRhcmQgZm9yIGRpcmVjdGZkCisKK1doaWxlIGRpcmVjdGZkIHVwZ3JhZGUgdG8gMS43LjYsIGl0IGFsd2F5cyBpbmNsdWRlcyBkaXJlY3RmYisrIHV0aWxzCit3aGVuIEMrKyBpcyB1c2VkIGFuZCBzZXQgYysrMHggYXMgYysrIHN0YW5kYXJkLgorKEluIGdpdDovL2dpdC5kaXJlY3RmYi5vcmcvZ2l0L2RpcmVjdGZiL2NvcmUvRGlyZWN0RkIuZ2l0Citjb21taXQgYjQ0NGJjYWUzMTk3YmU5ZmFmODgzNDYwZGNjMjM5ZWY3NTdkNTkyMiwgYW5kIGNvbW1pdAorNTIyYmVlYjc2ZjJhOGQyZGVlMzBkOTI4ZDJhNTk1NWJkMDZjZjI1YykKKworVGhlIGRpcmVjdGZkIGluIHF0NCBpcyBjKyssIGFuZCB0aGVyZSB3YXMgYSBidWlsZCBmYWlsdXJlOgorLi4uCit8IHFkaXJlY3RmYndpbmRvd3N1cmZhY2UuY3BwOjMzNjo2OTogZXJyb3I6IGluIEMrKzk4ICdyZWN0JyBtdXN0IGJlCitpbml0aWFsaXplZCBieSBjb25zdHJ1Y3Rvciwgbm90IGJ5ICd7Li4ufScKK3wgICAgICBjb25zdCBERkJSZWN0YW5nbGUgcmVjdCA9IHsgci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgfTsKKy4uLgorCitUaGUgZysrIHVzZWQgYysrOTggYXMgZGVmYXVsdCBjKysgc3RhbmRhcmQsIHdlIHNob3VsZAorZXhwbGljaXRseSBzZXQgYysrMHggZm9yIGRpcmVjdGZkIGluIHF0NC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA1NzI0YmQ2Li5lY2MyZjhiIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC02NjU2LDYgKzY2NTYsNyBAQCBpZiBbICIkUExBVEZPUk1fUVdTIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgaWYgWyAiJHtzY3JlZW59IiA9ICJkaXJlY3RmYiIgXSAmJiBbICIke0NGR19DT05GSUdVUkVfRVhJVF9PTl9FUlJPUn0iID0gInllcyIgXTsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmICIkUEtHX0NPTkZJRyIgLS1leGlzdHMgZGlyZWN0ZmIgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgICBRVF9DRkxBR1NfRElSRUNURkI9YCRQS0dfQ09ORklHIC0tY2ZsYWdzIGRpcmVjdGZiIDI+L2Rldi9udWxsYAorKyAgICAgICAgICAgICAgIFFUX0NGTEFHU19ESVJFQ1RGQj0iJFFUX0NGTEFHU19ESVJFQ1RGQiAtc3RkPWMrKzB4IgorICAgICAgICAgICAgICAgIFFUX0xJQlNfRElSRUNURkI9YCRQS0dfQ09ORklHIC0tbGlicyBkaXJlY3RmYiAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgIGVsaWYgZGlyZWN0ZmItY29uZmlnIC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgICAgICAgICBRVF9DRkxBR1NfRElSRUNURkI9YGRpcmVjdGZiLWNvbmZpZyAtLWNmbGFncyAyPi9kZXYvbnVsbGAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9GaXgtUVdTTG9jay1pbnZhbGlkLWFyZ3VtZW50LWxvZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L0ZpeC1RV1NMb2NrLWludmFsaWQtYXJndW1lbnQtbG9ncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjVmMDBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9GaXgtUVdTTG9jay1pbnZhbGlkLWFyZ3VtZW50LWxvZ3MucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorRnJvbSA1MmMzNDAwMWJhZDg1YzMwMzI2MTgwNzBiMWQ2YjJhM2M2ODgwNzE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmVpbCBKZXJyYW0gPG4uLi5Ab3NzYXUuaG9tZWxpbnV4Lm5ldD4KK0RhdGU6IFRodSwgOCBOb3YgMjAxMiAwODoxODozMiArMDAwMAorU3ViamVjdDogW1BBVENIXSBGaXggUVdTTG9jayAiaW52YWxpZCBhcmd1bWVudCIgbG9ncworCitUaGVyZSB3YXMgbm8ga25vd24gYWN0dWFsIHByb2JsZW0gYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGxvZ3MsIGJ1dCB0aGV5Cit3ZXJlIHNwYW1taW5nIHRoZSBsb2csIHNvIEkgdGhvdWdodCBpdCB3b3J0aCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhbmQKK2ZpeCB0aGVtLgorCitUaGUgY29uZnVzaW9uIGlzIHRoYXQgdGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgd2F5cyBvZiBjcmVhdGluZyBRV1NMb2NrCitvYmplY3RzLiAgIlFXU0xvY2soKSIgY3JlYXRlcyBhbiBvYmplY3QgdGhhdCBjcmVhdGVzIGEgbmV3IHNldCBvZgorc2VtYXBob3Jlcywgd2hlcmVhcyAiUVdTTG9jayhpZCkiIGNyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgYWxpYXNlcyB0aGUKK2V4aXN0aW5nIHNldCBvZiBzZW1hcGhvcmVzIHdpdGggSUQgaWQuICBXaGF0IHNlZW1zIHRvIGhhcHBlbiBpcyB0aGF0CitlYWNoIGFwcGxpY2F0aW9uIGNyZWF0ZXMgYSBzZW1hcGhvcmUgc2V0IHNjb3BlZCB0byB0aGF0CithcHBsaWNhdGlvbiAoUVdTRGlzcGxheTo6RGF0YTo6Y2xpZW50TG9jayBpbiBxYXBwbGljYXRpb25fcXdzLmNwcCksCit0aGVuIHRoaXMgc2VtYXBob3JlIHNldCBpcyBwYXNzZWQgYnkgY29tcGxleCBtZWFucyB0bworcGxhY2VzIChRV1NDbGllbnRQcml2YXRlIGFuZCBRV1NNZW1vcnlTdXJmYWNlKSB0aGF0IHVzZSB0aGUgc2VtYXBob3JlcworZm9yIGEgc2hvcnQgcGVyaW9kIGFuZCB0aGVuIGRlbGV0ZSB0aGVpciBRV1NMb2NrIG9iamVjdHMuCisKK1RoZSBwcm9ibGVtIHdhcyB0aGF0IHRoZSBRV1NMb2NrIGRlc3RydWN0b3IgYWx3YXlzIGRlc3Ryb3llZCB0aGUKK3NlbWFwaG9yZSBzZXQsIGV2ZW4gd2hlbiB0aGF0IFFXU0xvY2sgaGFkbid0IGNyZWF0ZSB0aGUgc2VtYXBob3JlcworaXRzZWxmLCBoZW5jZSBtYWtpbmcgdGhlIHNlbWFwaG9yZXMgaW52YWxpZCBmb3Igb3RoZXIgUVdTTG9jayBvYmplY3RzCitzdGlsbCByZWZlcmVuY2luZyB0aGUgc2FtZSBzZXQuCisKK0NsZWFybHkgYSBRV1NMb2NrIG9iamVjdCBzaG91bGRuJ3QgZGVzdHJveSB0aGUgc2VtYXBob3JlIHNldCBpZiBpdAorZGlkbid0IGNyZWF0ZSBpdCBpdHNlbGYsIGFuZCB0aGF0IGlzIGNvbmZpcm1lZCBieSB0aGUgZmFjdCB0aGF0IG9uZSBvZgordGhlIGltcGxlbWVudGF0aW9ucyBpbnNpZGUgUVdTTG9jayBhbHJlYWR5IGltcGxlbWVudHMgdGhpcyBsb2dpYywgd2l0aAordGhlICdvd25lZCcgZmxhZy4gIFRoZSBmaXggaXMgdG8gaW1wbGVtZW50IHRoaXMgZm9yIHRoZSAjaWZuZGVmCitRVF9QT1NJWF9JUEMgY2FzZSAtIHdoaWNoIGlzIHdoYXQgaXMgdXNlZCBpbiBRdE1va28gLSBqdXN0IGFzIGlzCithbHJlYWR5IGltcGxlbWVudGVkIGZvciB0aGUgI2lmZGVmIFFUX1BPU0lYX0lQQyBjYXNlLgorCitPcmlnaW5hbCBwYXRjaCBjYW4gYmUgZm91bmQgaGVyZToKKyBodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vY29tbXVuaXR5QGxpc3RzLm9wZW5tb2tvLm9yZy9tc2c2NTUxMi5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IE1pa2UgTG9vaWptYW5zIDxtaWtlLmxvb2lqbWFuc0B0b3BpYy5ubD4KKyAoUmVtb3ZlZCB0aGUgY29tbWVudGVkLW91dCBkZWJ1ZyBzdGF0ZW1lbnRzIGZyb20gdGhlIG9yaWdpbmFsIHBhdGNoLikKKworLS0tCisKK2RpZmYgLS1naXQgYS9zcmMvZ3VpL2VtYmVkZGVkL3F3c2xvY2suY3BwIGIvc3JjL2d1aS9lbWJlZGRlZC9xd3Nsb2NrLmNwcAoraW5kZXggOTkxNGEyNC4uMTA1NTc4NSAxMDA2NDQKKy0tLSBhL3NyYy9ndWkvZW1iZWRkZWQvcXdzbG9jay5jcHAKKysrKyBiL3NyYy9ndWkvZW1iZWRkZWQvcXdzbG9jay5jcHAKK0BAIC04Myw5ICs4MywxMiBAQCBRV1NMb2NrOjpRV1NMb2NrKGludCBpZCkgOiBzZW1JZChpZCkKKyAgICAgUVdTU2lnbmFsSGFuZGxlcjo6aW5zdGFuY2UoKS0+YWRkV1NMb2NrKHRoaXMpOworICNlbmRpZgorIAorKyAgICBvd25lZCA9IGZhbHNlOworKworICNpZm5kZWYgUVRfUE9TSVhfSVBDCisgICAgIGlmIChzZW1JZCA9PSAtMSkgeworICAgICAgICAgc2VtSWQgPSBzZW1nZXQoSVBDX1BSSVZBVEUsIDMsIElQQ19DUkVBVCB8IDA2NjYpOworKyAgICAgICAgb3duZWQgPSB0cnVlOworICAgICAgICAgaWYgKHNlbUlkID09IC0xKSB7CisgICAgICAgICAgICAgcGVycm9yKCJRV1NMb2NrOjpRV1NMb2NrIik7CisgICAgICAgICAgICAgcUZhdGFsKCJVbmFibGUgdG8gY3JlYXRlIHNlbWFwaG9yZSIpOworQEAgLTEwMCw3ICsxMDQsNiBAQCBRV1NMb2NrOjpRV1NMb2NrKGludCBpZCkgOiBzZW1JZChpZCkKKyAgICAgfQorICNlbHNlCisgICAgIHNlbXNbMF0gPSBzZW1zWzFdID0gc2Vtc1syXSA9IFNFTV9GQUlMRUQ7CistICAgIG93bmVkID0gZmFsc2U7CisgCisgICAgIGlmIChzZW1JZCA9PSAtMSkgeworICAgICAgICAgLy8gIyMjIGdlbmVyYXRlIHJlYWxseSB1bmlxdWUgSURzCitAQCAtMTM0LDkgKzEzNywxMSBAQCBRV1NMb2NrOjp+UVdTTG9jaygpCisgCisgICAgIGlmIChzZW1JZCAhPSAtMSkgeworICNpZm5kZWYgUVRfUE9TSVhfSVBDCistICAgICAgICBxdF9zZW11biBzZW12YWw7CistICAgICAgICBzZW12YWwudmFsID0gMDsKKy0gICAgICAgIHNlbWN0bChzZW1JZCwgMCwgSVBDX1JNSUQsIHNlbXZhbCk7CisrCWlmIChvd25lZCkgeworKwkgICAgcXRfc2VtdW4gc2VtdmFsOworKwkgICAgc2VtdmFsLnZhbCA9IDA7CisrCSAgICBzZW1jdGwoc2VtSWQsIDAsIElQQ19STUlELCBzZW12YWwpOworKwl9CisgICAgICAgICBzZW1JZCA9IC0xOworICNlbHNlCisgICAgICAgICAvLyBlbXVsYXRlIHRoZSBTRU1fVU5ETyBiZWhhdmlvciBmb3IgdGhlIEJhY2tpbmdTdG9yZSBsb2NrCitkaWZmIC0tZ2l0IGEvc3JjL2d1aS9lbWJlZGRlZC9xd3Nsb2NrX3AuaCBiL3NyYy9ndWkvZW1iZWRkZWQvcXdzbG9ja19wLmgKK2luZGV4IGQzMjRlNGYuLmQ4NjdkMjAgMTAwNjQ0CistLS0gYS9zcmMvZ3VpL2VtYmVkZGVkL3F3c2xvY2tfcC5oCisrKysgYi9zcmMvZ3VpL2VtYmVkZGVkL3F3c2xvY2tfcC5oCitAQCAtODYsOCArODYsOCBAQCBwcml2YXRlOgorICAgICBpbnQgbG9ja0NvdW50WzJdOworICNpZmRlZiBRVF9QT1NJWF9JUEMKKyAgICAgc2VtX3QgKnNlbXNbM107CistICAgIGJvb2wgb3duZWQ7CisgI2VuZGlmCisrICAgIGJvb2wgb3duZWQ7CisgfTsKKyAKKyBRVF9FTkRfTkFNRVNQQUNFCisgCistLSAKKzEuNy4xMC40CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2FkZF9jaGVja19mb3JfYWFyY2g2NF8zMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvYWRkX2NoZWNrX2Zvcl9hYXJjaDY0XzMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNTEwM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2FkZF9jaGVja19mb3JfYWFyY2g2NF8zMi5wYXRjaApAQCAtMCwwICsxLDU1IEBACitBdXRob3I6IEtyaXNobmFuamFuYXBwYSwgSmFnYWRlZXNoIDxqYWdhZGVlc2gua3Jpc2huYW5qYW5hcHBhQGNhdml1bW5ldHdvcmtzLmNvbT4KK0RhdGU6ICAgU3VuIEFwciAxMiAxOToyNzoxMCAyMDE1ICswNTMwCisKK1tQQVRDSF0gYWRkIGNoZWNraW5nIGZvciBBQXJjaDY0IGlscDMyCisKK0Nyb3NzLWNvbXBpbGluZyBxdDQtZW1iZWRkZWQgYW5kIHF0NC14MTEtZnJlZSBhcHBsaWNhdGlvbnMgZm9yIEFBcmNoNjQgaWxwMzIKKyhib3RoIGJpZyBhbmQgbGl0dGxlIGVuZGlhbikgZmFpbHMgd2l0aCBiZWxvdyBlcnJvciwKKworKHNuaXApCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuaDozMTowLAorICAgICAgICAgICAgICAgICBmcm9tIC4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmg6MzIsCisgICAgICAgICAgICAgICAgIGZyb20gLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6MjYsCisgICAgICAgICAgICAgICAgIGZyb20gLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaDoyNiwKKyAgICAgICAgICAgICAgICAgZnJvbSAuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0Lmg6MjcsCisgICAgICAgICAgICAgICAgIGZyb20gLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oOjMwLAorICAgICAgICAgICAgICAgICBmcm9tIC4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwOjI3OgorLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvd3RmL1N0ZExpYkV4dHJhcy5oOiBJbiBpbnN0YW50aWF0aW9uIG9mICdUTyBRVFdURjo6Yml0d2lzZV9jYXN0KEZST00pIFt3CisuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tZWRpYXRlLmg6NTI6NDk6IHJlcXVpcmVkIGZyb20gaGVyZQorLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvd3RmL1N0ZExpYkV4dHJhcy5oOjYzOjE6IGVycm9yOiBzaXplIG9mIGFycmF5IGlzIG5lZ2F0aXZlCisuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RkTGliRXh0cmFzLmg6IEluIGluc3RhbnRpYXRpb24gb2YgJ1RPIFFUV1RGOjpiaXR3aXNlX2Nhc3QoRlJPTSkgW3cKKy4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW1lZGlhdGUuaDo1Nzo0NzogcmVxdWlyZWQgZnJvbSBoZXJlCisuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RkTGliRXh0cmFzLmg6NjM6MTogZXJyb3I6IHNpemUgb2YgYXJyYXkgaXMgbmVnYXRpdmUKK21ha2VbMV06ICoqKiBbb2JqL3JlbGVhc2UvSlNDYWxsYmFja0NvbnN0cnVjdG9yLm9dIEVycm9yIDEKKy0tIENVVCAtLQorCit0aGUgZXJyb3IgaXMgYmVjYXVzZSBvZiBKU1ZBTFVFNjQgaXMgYmVpbmcgZGVmaW5lZCB3aGlsZSBjb21waWxpbmcgcHJvZ3JhbXMKK2ZvciBBQXJjaDY0IGlscDMyLiBUaGlzIG1ha2VzIGVxdWFsIGNvbmRpdGlvbiBjaGVja2luZyBvZiBpbnRwdHJfdCBhbmQgZG91YmxlCitkYXRhdHlwZXMgYXMgZmFsc2UsIGFuZCByZXN1bHRzIGluIC0xIChuZWdhdGl2ZSkgYXMgYXJyYXkgc2l6ZSBpbiBiaXR3aXNlX2Nhc3QKK2Z1bmN0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS3Jpc2huYW5qYW5hcHBhLCBKYWdhZGVlc2ggPGphZ2FkZWVzaC5rcmlzaG5hbmphbmFwcGFAY2F2aXVtbmV0d29ya3MuY29tPgorCistLS0gYS9zcmMvM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJMjAxNC0wNC0xMSAwMDowNzoxMi4wMDAwMDAwMDAgKzA1MzAKKysrKyBiL3NyYy8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkyMDE1LTA0LTEwIDIyOjE5OjUxLjA2NjI3OTQyNiArMDUzMAorQEAgLTIxNCw2ICsyMTQsOSBAQAorICNkZWZpbmUgV1RGX0NQVV9BQVJDSDY0IDEKKyAjaWYgZGVmaW5lZChfX0FBUkNINjRFQl9fKQorICNkZWZpbmUgV1RGX0NQVV9CSUdfRU5ESUFOIDEKKysjaWYgIWRlZmluZWQoX19MUDY0X18pCisrI2RlZmluZSBXVEZfQ1BVX0FBUkNINjRfMzIgMQorKyNlbmRpZgorICNlbmRpZgorICNlbmRpZgorIAorQEAgLTkwMyw3ICs5MDYsNyBAQAorICNlbmRpZgorIAorICNpZiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUU2NCkgJiYgIWRlZmluZWQoV1RGX1VTRV9KU1ZBTFVFMzIpICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyXzY0KQorLSNpZiAoQ1BVKFg4Nl82NCkgJiYgKE9TKFVOSVgpIHx8IE9TKFdJTkRPV1MpIHx8IE9TKFNPTEFSSVMpIHx8IE9TKEhQVVgpKSkgfHwgKENQVShJQTY0KSAmJiAhQ1BVKElBNjRfMzIpKSB8fCBDUFUoQUxQSEEpIHx8IENQVShBSVg2NCkgfHwgQ1BVKFNQQVJDNjQpIHx8IENQVShNSVBTNjQpIHx8IENQVShBQVJDSDY0KQorKyNpZiAoQ1BVKFg4Nl82NCkgJiYgKE9TKFVOSVgpIHx8IE9TKFdJTkRPV1MpIHx8IE9TKFNPTEFSSVMpIHx8IE9TKEhQVVgpKSkgfHwgKENQVShJQTY0KSAmJiAhQ1BVKElBNjRfMzIpKSB8fCBDUFUoQUxQSEEpIHx8IENQVShBSVg2NCkgfHwgQ1BVKFNQQVJDNjQpIHx8IENQVShNSVBTNjQpIHx8IChDUFUoQUFSQ0g2NCkgJiYgIUNQVShBQVJDSDY0XzMyKSkKKyAjZGVmaW5lIFdURl9VU0VfSlNWQUxVRTY0IDEKKyAjZWxpZiBDUFUoQVJNKSB8fCBDUFUoUFBDNjQpCisgI2RlZmluZSBXVEZfVVNFX0pTVkFMVUUzMiAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2crKy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9nKysuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTc4YzI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9nKysuY29uZgpAQCAtMCwwICsxLDQwIEBACisjCisjIHFtYWtlIGNvbmZpZ3VyYXRpb24gZm9yIGNvbW1vbiBnY2MKKyMKKworUU1BS0VfQ09NUElMRVIgPSBnY2MKKworUU1BS0VfQ0MgICAgICAgPSAkKE9FX1FNQUtFX0NDKQorUU1BS0VfQ0ZMQUdTICAgICAgICs9ICQoT0VfUU1BS0VfQ0ZMQUdTKQorUU1BS0VfQ0ZMQUdTX1JFTEVBU0VfV0lUSF9ERUJVR0lORk8gKz0gJChPRV9RTUFLRV9DRkxBR1MpCitRTUFLRV9DRkxBR1NfUFJFQ09NUElMRSArPSAteCBjLWhlYWRlciAtYyAke1FNQUtFX1BDSF9JTlBVVH0gLW8gJHtRTUFLRV9QQ0hfT1VUUFVUfQorUU1BS0VfQ0ZMQUdTX1VTRV9QUkVDT01QSUxFICs9IC1pbmNsdWRlICR7UU1BS0VfUENIX09VVFBVVF9CQVNFfQorCitRTUFLRV9DWFggICAgICA9ICQoT0VfUU1BS0VfQ1hYKQorUU1BS0VfQ1hYRkxBR1MgICAgICs9ICQoT0VfUU1BS0VfQ1hYRkxBR1MpCitRTUFLRV9DWFhGTEFHU19SRUxFQVNFX1dJVEhfREVCVUdJTkZPICs9ICQkUU1BS0VfQ0ZMQUdTX1JFTEVBU0VfV0lUSF9ERUJVR0lORk8KK1FNQUtFX0NYWEZMQUdTX1BSRUNPTVBJTEUgKz0gLXggYysrLWhlYWRlciAtYyAke1FNQUtFX1BDSF9JTlBVVH0gLW8gJHtRTUFLRV9QQ0hfT1VUUFVUfQorUU1BS0VfQ1hYRkxBR1NfVVNFX1BSRUNPTVBJTEUgPSAkJFFNQUtFX0NGTEFHU19VU0VfUFJFQ09NUElMRQorCitRTUFLRV9MSU5LICAgICA9ICQoT0VfUU1BS0VfTElOSykKK1FNQUtFX0xJTktfU0hMSUIgICA9ICQoT0VfUU1BS0VfTElOSykKK1FNQUtFX0xJTktfQwkJPSAkKE9FX1FNQUtFX0xJTkspCitRTUFLRV9MSU5LX0NfU0hMSUIJPSAkKE9FX1FNQUtFX0xJTkspCitRTUFLRV9MRkxBR1MgICAgICAgKz0gJChPRV9RTUFLRV9MREZMQUdTKQorUU1BS0VfTEZMQUdTX05PVU5ERUYJKz0gLVdsLC0tbm8tdW5kZWZpbmVkCitRTUFLRV9MRkxBR1NfUlBBVEggICAgICAgID0gLVdsLC1ycGF0aC1saW5rLAorCitRTUFLRV9QQ0hfT1VUUFVUX0VYVCAgICA9IC5nY2gKKworIyAtQnN5bWJvbGljLWZ1bmN0aW9ucyAobGQpIHN1cHBvcnQKK1FNQUtFX0xGTEFHU19CU1lNQk9MSUNfRlVOQyA9IC1XbCwtQnN5bWJvbGljLWZ1bmN0aW9ucworUU1BS0VfTEZMQUdTX0RZTkFNSUNfTElTVCA9IC1XbCwtLWR5bmFtaWMtbGlzdCwKKworIyBkbyBub3QgZGVwZW5kIG9uIGdkYgorQ09ORklHIC09IGdkYl9kd2FyZl9pbmRleAorCisjIHNvbWUgbGlua2luZyBoZWxwZXIuLi4KK0NPTkZJRyArPSBycGF0aF9saWJkaXJzCisKKyMgZm9yIHRoZSBTREsKK2lzRW1wdHkoUU1BS0VfUVRfQ09ORklHKTpRTUFLRV9RVF9DT05GSUcgPSAkKE9FX1FNQUtFX1FUX0NPTkZJRykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvbGludXguY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvbGludXguY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjcwMzgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9saW51eC5jb25mCkBAIC0wLDAgKzEsNjYgQEAKKyMKKyMgcW1ha2UgY29uZmlndXJhdGlvbiBmb3IgY29tbW9uIGxpbnV4CisjCisKK1FNQUtFX0NGTEFHU19USFJFQUQJKz0gLURfUkVFTlRSQU5UCitRTUFLRV9DWFhGTEFHU19USFJFQUQJKz0gJCRRTUFLRV9DRkxBR1NfVEhSRUFECisKK1FNQUtFX0lOQ0RJUiAgICAgICAgICA9CitRTUFLRV9MSUJESVIgICAgICAgICAgPQorUU1BS0VfSU5DRElSX1gxMSAgICAgID0KK1FNQUtFX0xJQkRJUl9YMTEgICAgICA9CitRTUFLRV9JTkNESVJfUVQgICAgICAgPSAkKE9FX1FNQUtFX0lOQ0RJUl9RVCkKK1FNQUtFX0xJQkRJUl9RVCAgICAgICA9ICQoT0VfUU1BS0VfTElCRElSX1FUKQorUU1BS0VfSU5DRElSX09QRU5HTCAgID0KK1FNQUtFX0xJQkRJUl9PUEVOR0wgICA9CitRTUFLRV9JTkNESVJfT1BFTkdMX0VTMSA9ICQkUU1BS0VfSU5DRElSX09QRU5HTAorUU1BS0VfTElCRElSX09QRU5HTF9FUzEgPSAkJFFNQUtFX0xJQkRJUl9PUEVOR0wKK1FNQUtFX0lOQ0RJUl9PUEVOR0xfRVMyID0gJCRRTUFLRV9JTkNESVJfT1BFTkdMCitRTUFLRV9MSUJESVJfT1BFTkdMX0VTMiA9ICQkUU1BS0VfTElCRElSX09QRU5HTAorUU1BS0VfSU5DRElSX0VHTCAgICAgID0KK1FNQUtFX0xJQkRJUl9FR0wgICAgICA9CitRTUFLRV9JTkNESVJfT1BFTlZHICAgPQorUU1BS0VfTElCRElSX09QRU5WRyAgID0KKworCitRTUFLRV9MSUJTICAgICAgICAgICAgPQorUU1BS0VfTElCU19EWU5MT0FEICAgID0gLWxkbAorUU1BS0VfTElCU19YMTEgICAgICAgID0gJChPRV9RTUFLRV9MSUJTX1gxMSkKK1FNQUtFX0xJQlNfWDExU00gICAgICA9ICQoT0VfUU1BS0VfTElCU19YMTFTTSkKK1FNQUtFX0xJQlNfTklTICAgICAgICA9IC1sbnNsCitRTUFLRV9MSUJTX0VHTCAgICAgICAgPSAtbEVHTAorUU1BS0VfTElCU19PUEVOR0wgICAgID0gLWxHTAorUU1BS0VfTElCU19PUEVOR0xfUVQgID0gLWxHTAorUU1BS0VfTElCU19PUEVOR0xfRVMxID0gLWxHTEVTX0NNCitRTUFLRV9MSUJTX09QRU5HTF9FUzIgPSAtbEdMRVN2MgorUU1BS0VfTElCU19PUEVOVkcgICAgID0gLWxPcGVuVkcKK1FNQUtFX0xJQlNfVEhSRUFEICAgICA9IC1scHRocmVhZAorCitRTUFLRV9NT0MgICAgICAgICAgICAgPSAkKE9FX1FNQUtFX01PQykKK1FNQUtFX1VJQyAgICAgICAgICAgICA9ICQoT0VfUU1BS0VfVUlDKQorUU1BS0VfVUlDMyAgICAgICAgICAgID0gJChPRV9RTUFLRV9VSUMzKQorUU1BS0VfUkNDICAgICAgICAgICAgID0gJChPRV9RTUFLRV9SQ0MpCitRTUFLRV9RREJVU0NQUDJYTUwgICAgPSAkKE9FX1FNQUtFX1FEQlVTQ1BQMlhNTCkKK1FNQUtFX1FEQlVTWE1MMkNQUCAgICA9ICQoT0VfUU1BS0VfUURCVVNYTUwyQ1BQKQorCitRTUFLRV9BUiAgICAgICAgICAgICAgPSAkKE9FX1FNQUtFX0FSKSBjcXMKK1FNQUtFX09CSkNPUFkgICAgICAgICA9IG9iamNvcHkKK1FNQUtFX1JBTkxJQiAgICAgICAgICA9CisKK1FNQUtFX1RBUiAgICAgICAgICAgICA9IHRhciAtY2YKK1FNQUtFX0daSVAgICAgICAgICAgICA9IGd6aXAgLTlmCisKK1FNQUtFX0NPUFkgICAgICAgICAgICA9IGNwIC1mCitRTUFLRV9DT1BZX0ZJTEUgICAgICAgPSAkKENPUFkpCitRTUFLRV9DT1BZX0RJUiAgICAgICAgPSAkKENPUFkpIC1yCitRTUFLRV9NT1ZFICAgICAgICAgICAgPSBtdiAtZgorUU1BS0VfREVMX0ZJTEUgICAgICAgID0gcm0gLWYKK1FNQUtFX0RFTF9ESVIgICAgICAgICA9IHJtZGlyCitRTUFLRV9TVFJJUCAgICAgICAgICAgPSAkKE9FX1FNQUtFX1NUUklQKQorUU1BS0VfU1RSSVBGTEFHU19MSUIgKz0gLS1zdHJpcC11bm5lZWRlZAorUU1BS0VfQ0hLX0RJUl9FWElTVFMgID0gdGVzdCAtZAorUU1BS0VfTUtESVIgICAgICAgICAgID0gbWtkaXIgLXAKK1FNQUtFX0lOU1RBTExfRklMRSAgICA9IGluc3RhbGwgLW0gNjQ0IC1wCitRTUFLRV9JTlNUQUxMX1BST0dSQU0gPSBpbnN0YWxsIC1tIDc1NSAtcAorCitpbmNsdWRlKHVuaXguY29uZikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvcXRlLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9xdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFkNmVjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvcXRlLnNoCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL3NoCisKK2lmIFsgLWUgL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAgXQordGhlbgorICAgIFFXU19NT1VTRV9QUk9UTz1Uc2xpYjovZGV2L2lucHV0L3RvdWNoc2NyZWVuMAorICAgIGV4cG9ydCBRV1NfTU9VU0VfUFJPVE8KK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LWVtYmVkZGVkLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtZW1iZWRkZWQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NjkwNjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LWVtYmVkZGVkLmluYwpAQCAtMCwwICsxLDc0IEBACitTVU1NQVJZID0gIkNyb3NzLXBsYXRmb3JtIFVJIHRvb2xraXQgYW5kIGFwcGxpY2F0aW9uIGZyYW1ld29yayAoZnJhbWVidWZmZXIgdmVyc2lvbikiCitERVNDUklQVElPTiA9ICJRdCBpcyBhIHZlcnNhdGlsZSBjcm9zcy1wbGF0Zm9ybSBhcHBsaWNhdGlvbiBmcmFtZXdvcmsgLS0gdGhpcyBpcyB0aGUgZW1iZWRkZWQgKGZyYW1lYnVmZmVyKSB2ZXJzaW9uLiIKK1NFQ1RJT04gPSAibGlicyIKK0hPTUVQQUdFID0gImh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy8iCitERVBFTkRTICs9ICJkaXJlY3RmYiB0c2xpYiIKKworUVQ0RURFUEVORFMgPSAiIgorUVRfQkFTRV9MSUIgID89ICJsaWJxdC1lbWJlZGRlZCIKKworIyBTZXQgbmVjZXNzYXJ5IHZhcmlhYmxlcyBpbiB0aGUgcHJvZmlsZQorU1JDX1VSSSArPSAiZmlsZTovL3F0ZS5zaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAzMy1jb25maWd1cmUtc3VwcG9ydC1jLTB4LXN0YW5kYXJkLWZvci1kaXJlY3RmZC5wYXRjaCBcCisiCisKK1FUX0VNQkVEREVEX0ZMQUdTID89ICIgXAorICAgIC1lbWJlZGRlZCAkUVRfQVJDSCBcCisgICAgLXF0bGliaW5maXggJHtRVF9MSUJJTkZJWH0gXAorIgorUVRfRU1CRURERURfRVhUUkFfRkxBR1MgPz0gIiBcCisgICAgLXBsdWdpbi1nZngtdHJhbnNmb3JtZWQgLXBsdWdpbi1nZngtcXZmYiAtcGx1Z2luLWdmeC12bmMgLXBsdWdpbi1nZngtZGlyZWN0ZmIgXAorICAgIC1wbHVnaW4tbW91c2UtdHNsaWIgLXF0LW1vdXNlLXBjIC1xdC1tb3VzZS1xdmZiIC1xdC1tb3VzZS1saW51eGlucHV0IFwKKyAgICAtcXQta2JkLXR0eSAtcXQta2JkLWxpbnV4aW5wdXQgXAorIgorUVRfRU1CRURERURfS0VZUEFEX0ZMQUdTID89ICIgXAorICAgIC1EUVRfS0VZUEFEX05BVklHQVRJT04gXAorIgorCitRVF9DT05GSUdfRkxBR1MgKz0gIiR7UVRfRU1CRURERURfRkxBR1N9ICR7UVRfRU1CRURERURfRVhUUkFfRkxBR1N9ICR7UVRfRU1CRURERURfS0VZUEFEX0ZMQUdTfSIKKworcmVxdWlyZSBxdDQuaW5jCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vZm9udHMKKyAgICB0b3VjaCAke0R9LyR7bGliZGlyfS9mb250cy9mb250ZGlyCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZC8KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9xdGUuc2ggJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZS5kLworfQorCisjIFdlIHB1dCB0aGUgcXRlIHByb2ZpbGUgaW50byBpdCdzIG93biBwYWNrYWdlIGFzIHdlIGRvbid0IHdhbnQgdG8gaW5zdGFsbCBhbGwgcXQgc3R1ZmYKKyMgd2l0aCBkZXBlbmRpbmcgb24gdGhlIGdsb2JhbCBwYWNrYWdlIHF0NC1lbWJlZGRlZAorUEFDS0FHRVMgKz0gIiAke1BOfS1jb25mIgorRklMRVNfJHtQTn0tY29uZiArPSAiICR7c3lzY29uZmRpcn0vcHJvZmlsZS5kL3F0ZS5zaCIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIgJHtQTn0tY29uZiIKKworT1RIRVJfUEFDS0FHRVMgKz0gIlwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZm9udHMgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy10dGYtdmVyYSBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXR0Zi1kZWphdnUgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy1wZmEgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy1wZmIgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy1xcGYiCisKK1JSRUNPTU1FTkRTXyR7UVRfQkFTRV9OQU1FfS1mb250cyA9ICIgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy10dGYtdmVyYSBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXR0Zi1kZWphdnUgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy1wZmEgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy1wZmIgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy1xcGYiCitSUkVDT01NRU5EU18ke1FUX0JBU0VfTkFNRX0tZGVtb3MgKz0gIiBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZm9udHMiCisKK0FMTE9XX0VNUFRZXyR7UVRfQkFTRV9OQU1FfS1mb250cyA9ICIxIgorUEFDS0FHRVNfRFlOQU1JQyArPSAiXiR7UVRfQkFTRV9OQU1FfS1mb250cy0uKiIKKworRklMRVNfJHtRVF9CQVNFX05BTUV9LWZvbnRzLXR0Zi12ZXJhICAgICAgID0gIiR7bGliZGlyfS9mb250cy9WZXJhKi50dGYiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZm9udHMtdHRmLWRlamF2dSAgICAgPSAiJHtsaWJkaXJ9L2ZvbnRzL0RlamFWdSoudHRmIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWZvbnRzLXBmYSAgICAgICAgICAgID0gIiR7bGliZGlyfS9mb250cy8qLnBmYSIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1mb250cy1wZmIgICAgICAgICAgICA9ICIke2xpYmRpcn0vZm9udHMvKi5wZmIiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZm9udHMtcXBmICAgICAgICAgICAgPSAiJHtsaWJkaXJ9L2ZvbnRzLyoucXBmKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1mb250cyAgICAgICAgICAgICAgICA9ICIke2xpYmRpcn0vZm9udHMvUkVBRE1FICR7bGliZGlyfS9mb250cy9mb250ZGlyIgorCitpbmhlcml0IHF0NGUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1lbWJlZGRlZF80LjguNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtZW1iZWRkZWRfNC44LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzNWQ4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtZW1iZWRkZWRfNC44LjcuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIHF0NC0ke1BWfS5pbmMKK3JlcXVpcmUgcXQ0LWVtYmVkZGVkLmluYworCitRVF9DT05GSUdfRkxBR1NfYXBwZW5kX2FybSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgIiIsICIgLW5vLW5lb24iICxkKX0iCisKK1FUX0NPTkZJR19GTEFHUyArPSAiIFwKKyAtZXhjZXB0aW9ucyBcCisiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtbmF0aXZlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtbmF0aXZlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTQxZjhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1uYXRpdmUuaW5jCkBAIC0wLDAgKzEsMTEyIEBACitTVU1NQVJZID0gIlF0IHZlcnNpb24gNCB0b29scyBhbmQgc3VwcG9ydCBmaWxlcyBmb3IgdGhlIGJ1aWxkIGhvc3QiCitERVBFTkRTID0gInpsaWItbmF0aXZlIGRidXMtbmF0aXZlIgorU0VDVElPTiA9ICJsaWJzIgorSE9NRVBBR0UgPSAiaHR0cDovL3F0LXByb2plY3Qub3JnLyIKK1BST1ZJREVTID0gInF0NC10b29scy1uYXRpdmUiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgfCBHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuTEdQTDttZDU9ZmJjMDkzOTAxODU3ZmNkMTE4ZjA2NWY5MDA5ODJjMjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS5HUEwzO21kNT02ZTE2OTRlZTMzOGRiNDEwNDE3NTE3ODg0OTE4ZDRkMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MR1BMX0VYQ0VQVElPTi50eHQ7bWQ1PTAxNDVjNGQxYjZmOTZhNjYxYzJjMTM5ZGZiMjY4ZmI2IgorCitpbmhlcml0IG5hdGl2ZQorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5xdC1wcm9qZWN0Lm9yZy9vZmZpY2lhbF9yZWxlYXNlcy9xdC80LjgvJHtQVn0vcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1xbGlicmFyeWluZm8tYWxsb3ctdG8tc2V0LXF0LmNvbmYtZnJvbS10aGUtb3V0c2lkZS11LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItcWtiZHR0eV9xd3MtZml4LWJ1aWxkLXdpdGgtb2xkLWtlcm5lbC1oZWFkZXJzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtd2Via2l0Mi1zZXQtT1VUUFVUX0RJUi12YWx1ZS1pZi1lbXB0eS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIxLWNvbmZpZ3VyZS1tYWtlLXF0NC1uYXRpdmUtd29yay13aXRoLWxvbmctYnVpbGRpbmctcGEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZysrLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vbGludXguY29uZiBcCisJIgorUyA9ICIke1dPUktESVJ9L3F0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtJHtQVn0iCisKK0VYVFJBX09FQ09ORiA9ICItcHJlZml4ICR7cHJlZml4fSBcCisgICAgICAgICAgICAgICAgLWJpbmRpciAke2JpbmRpcn0gXAorICAgICAgICAgICAgICAgIC1saWJkaXIgJHtsaWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAtZGF0YWRpciAke2RhdGFkaXJ9L3F0NCBcCisgICAgICAgICAgICAgICAgLXN5c2NvbmZkaXIgJHtzeXNjb25mZGlyfS9xdDQgXAorICAgICAgICAgICAgICAgIC1kb2NkaXIgJHtkb2NkaXJ9L3F0NCBcCisgICAgICAgICAgICAgICAgLWhlYWRlcmRpciAke2luY2x1ZGVkaXJ9L3F0NCBcCisgICAgICAgICAgICAgICAgLXBsdWdpbmRpciAke2xpYmRpcn0vcXQ0L3BsdWdpbnMgXAorICAgICAgICAgICAgICAgIC1pbXBvcnRkaXIgJHtsaWJkaXJ9L3F0NC9pbXBvcnRzIFwKKyAgICAgICAgICAgICAgICAtdHJhbnNsYXRpb25kaXIgJHtkYXRhZGlyfS9xdDQvdHJhbnNsYXRpb25zIFwKKyAgICAgICAgICAgICAgICAtZXhhbXBsZXNkaXIgJHtiaW5kaXJ9L3F0NC9leGFtcGxlcyBcCisgICAgICAgICAgICAgICAgLWRlbW9zZGlyICR7YmluZGlyfS9xdDQvZGVtb3MgXAorICAgICAgICAgICAgICAgIC1MICR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSBcCisgICAgICAgICAgICAgICAgLUkgJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IFwKKyAgICAgICAgICAgICAgICAtcXQtbGlianBlZyAtc3lzdGVtLXpsaWIgXAorICAgICAgICAgICAgICAgIC1uby1saWJqcGVnIC1uby1saWJwbmcgLW5vLWxpYm1uZyAtbm8tbGlidGlmZiBcCisgICAgICAgICAgICAgICAgLW5vLWFjY2Vzc2liaWxpdHkgXAorICAgICAgICAgICAgICAgIC1uby1jdXBzIFwKKyAgICAgICAgICAgICAgICAtbm8tbmFzLXNvdW5kIFwKKyAgICAgICAgICAgICAgICAtbm8tbmlzIC1uby1vcGVuc3NsIFwKKyAgICAgICAgICAgICAgICAtdmVyYm9zZSAtcmVsZWFzZSBcCisgICAgICAgICAgICAgICAgLWVtYmVkZGVkIC1uby1mcmVldHlwZSAtbm8tZ2xpYiAtbm8taWNvbnYgXAorICAgICAgICAgICAgICAgIC1leGNlcHRpb25zIC14bWxwYXR0ZXJucyBcCisgICAgICAgICAgICAgICAgLXF0M3N1cHBvcnQgXAorICAgICAgICAgICAgICAgIC1uby1mYXN0IC1zaWxlbnQgLW5vLXJwYXRoIgorCisjIHlhbmsgZGVmYXVsdCAtZSwgb3RoZXJ3aXNlIHdlIGdldCB0aGUgZm9sbG93aW5nIGVycm9yOgorIyBtb2NfcWJ1ZmZlci5jcHA6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK0VYVFJBX09FTUFLRSA9ICIgIgorCitkb19jb25maWd1cmUoKSB7CisJIyBBdm9pZCBwcm9ibGVtcyB3aXRoIFF0IDQuOC4wIGNvbmZpZ3VyZSBzZXR0aW5nIFFNQUtFX0xJTksgZnJvbSBMRCAoc2luY2Ugd2Ugd2FudCB0aGUgbGlua2VyIHRvIGJlIGcrKykKKwl1bnNldCBMRAorCisJKGVjaG8gbzsgZWNobyB5ZXMpIHwgLi9jb25maWd1cmUgJHtFWFRSQV9PRUNPTkZ9IHx8IGRpZSAiQ29uZmlndXJpbmcgcXQgZmFpbGVkLiBFWFRSQV9PRUNPTkYgd2FzICR7RVhUUkFfT0VDT05GfSIKK30KKworVE9CVUlMRCA9ICJcCisgIHNyYy90b29scy9tb2MgXAorICBzcmMvY29yZWxpYiBcCisgIHNyYy9zcWwgXAorICBzcmMveG1sIFwKKyAgc3JjL25ldHdvcmsgXAorICBzcmMvdG9vbHMvdWljIFwKKyAgc3JjL3Rvb2xzL3JjYyBcCisgIHNyYy94bWxwYXR0ZXJucyBcCisgIHNyYy9kYnVzIFwKKyAgc3JjL2d1aSBcCisgIHNyYy90ZXN0bGliIFwKKyAgc3JjL3F0M3N1cHBvcnQgXAorICBzcmMvdG9vbHMvdWljMyBcCisgIHRvb2xzL2xpbmd1aXN0L2xjb252ZXJ0IFwKKyAgdG9vbHMvbGluZ3Vpc3QvbHJlbGVhc2UgXAorICB0b29scy9saW5ndWlzdC9sdXBkYXRlIFwKKyAgdG9vbHMvcWRidXMvcWRidXNjcHAyeG1sIFwKKyAgdG9vbHMvcWRidXMvcWRidXN4bWwyY3BwIFwKKyAgdG9vbHMveG1scGF0dGVybnMgXAorIgorCitkb19jb21waWxlKCkgeworCWZvciBpIGluICR7VE9CVUlMRH07IGRvCisJCWNkICR7U30vJGkgJiYgb2VfcnVubWFrZSBDQz0iJHtDQ30iIENYWD0iJHtDWFh9IgorCWRvbmUKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9xbWFrZSAke0R9JHtiaW5kaXJ9L3FtYWtlMgorCWZvciBpIGluIG1vYyB1aWMgdWljMyByY2MgbGNvbnZlcnQgbHJlbGVhc2UgbHVwZGF0ZSBxZGJ1c2NwcDJ4bWwgcWRidXN4bWwyY3BwIHhtbHBhdHRlcm5zOyBkbworCQlpbnN0YWxsIC1tIDA3NTUgYmluLyR7aX0gJHtEfSR7YmluZGlyfS8ke2l9NAorCWRvbmUKKyAgICAKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3F0NC8KKwljcCAtUGZSIG1rc3BlY3MgJHtEfSR7ZGF0YWRpcn0vcXQ0LworCWxuIC1zZiBsaW51eC1nKysgJHtEfSR7ZGF0YWRpcn0vcXQ0L21rc3BlY3MvJHtCVUlMRF9PU30tb2UtZysrCisJaWYgWyAtZiAke0R9JHtkYXRhZGlyfS9xdDQvbWtzcGVjcy9jb21tb24vZysrLXVuaXguY29uZiBdIDsgdGhlbgorCQkjIG1rc3BlY3Mgd2VyZSByZWZhY3RvcmVkIGZvciA0LjguMAorCQljcCAtZiAke1dPUktESVJ9L2crKy5jb25mICR7RH0ke2RhdGFkaXJ9L3F0NC9ta3NwZWNzL2NvbW1vbi9nKystdW5peC5jb25mCisJZWxzZQorCQljcCAtZiAke1dPUktESVJ9L2crKy5jb25mICR7RH0ke2RhdGFkaXJ9L3F0NC9ta3NwZWNzL2NvbW1vbi9nKysuY29uZgorCWZpCisJY3AgLWYgJHtXT1JLRElSfS9saW51eC5jb25mICR7RH0ke2RhdGFkaXJ9L3F0NC9ta3NwZWNzL2NvbW1vbi8KKworCWluc3RhbGwgLW0gMDY0NCB0b29scy9wb3J0aW5nL3NyYy9xM3BvcnRpbmcueG1sICR7RH0ke2RhdGFkaXJ9L3F0NC8KKworCWZvciBpIGluICR7VE9CVUlMRH07IGRvCisJCWNkICR7U30vJGkgJiYgb2VfcnVubWFrZSBpbnN0YWxsIElOU1RBTExfUk9PVD0ke0R9CisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1uYXRpdmVfNC44LjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LW5hdGl2ZV80LjguNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTRkNjYzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1uYXRpdmVfNC44LjcuYmIKQEAgLTAsMCArMSw2IEBACityZXF1aXJlIHF0NC1uYXRpdmUuaW5jCisKK1RPQlVJTEQgOj0gInNyYy90b29scy9ib290c3RyYXAgJHtUT0JVSUxEfSIKKworU1JDX1VSSVttZDVzdW1dID0gImQ5OTBlZTY2YmY3YWIwYzc4NTU4OTc3NmYzNWJhNmFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUyODgyMjk1MDk3ZTQ3ZmUwODlmOGFjNzQxYTk1ZmVmNDdlMGE3M2EzZjNjZGYyMWI1Njk5MDYzOGY2MjZlYTAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LXgxMS1mcmVlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQteDExLWZyZWUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YTE3MzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LXgxMS1mcmVlLmluYwpAQCAtMCwwICsxLDM4IEBACityZXF1aXJlIHF0NC5pbmMKKworU1VNTUFSWSA9ICJDcm9zcy1wbGF0Zm9ybSBVSSB0b29sa2l0IGFuZCBhcHBsaWNhdGlvbiBmcmFtZXdvcmsgKFgxMSB2ZXJzaW9uKSIKK0RFU0NSSVBUSU9OID0gIlF0IGlzIGEgdmVyc2F0aWxlIGNyb3NzLXBsYXRmb3JtIGFwcGxpY2F0aW9uIGZyYW1ld29yayAtLSB0aGlzIGlzIHRoZSBYMTEgdmVyc2lvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vcXQtcHJvamVjdC5vcmcvIgorU0VDVElPTiA9ICJ4MTEvbGlicyIKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIGZvbnRjb25maWcgbGlieGZ0IGxpYnhleHQgbGlieHJlbmRlciBsaWJ4cmFuZHIgbGlieGN1cnNvciIKK0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ3ZpcnR1YWwvbGliZ2wnLCAnJywgZCl9IgorUFJPVklERVMgKz0gInF0NC14MTEiCitRVDRERVBFTkRTID0gIiIKKworUVRfR0xGTEFHUyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnLW9wZW5nbCcsICctbm8tb3BlbmdsJywgZCl9ICIKK1FUX0dMRkxBR1NfcWVtdXg4NiA9ICItb3BlbmdsIgorUVRfR0xGTEFHU19xZW11cHBjID0gIi1vcGVuZ2wiCitRVF9YMTFfRkxBR1MgPz0gIi1uby14aW5lcmFtYSAtbm8teGtiIC1uby1ndGtzdHlsZSIKK1FUX0NPTkZJR19GTEFHUyArPSAiJHtRVF9YMTFfRkxBR1N9IgorUVRfQkFTRV9MSUIgID89ICJsaWJxdCIKKworIyByZXF1aXJlZCBieSBrZGVsaWJzNAorUVRfS0RFX0ZMQUdTID89ICItYWNjZXNzaWJpbGl0eSAtc20iCitRVF9ESVNUUk9fRkxBR1MgPz0gIiR7UVRfS0RFX0ZMQUdTfSIKKworaW5oZXJpdCBxdDR4MTEKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICMgZml4IHBrZ2NvbmZpZywgbGlidG9vbCBhbmQgcHJsIGZpbGVzCisgIHNlZCAtaSAtZSAncyNJL3Vzci9pbmNsdWRlI0lpbmNsdWRlZGlyfSNnJyBcIAorICAgIC1lICdzI0lpbiNJJHtpbiNnJyBcCisgICAgJHtEfSR7bGliZGlyfS8qLmxhICR7RH0ke2xpYmRpcn0vKi5wcmwgJHtEfSR7bGliZGlyfS9wa2djb25maWcvKi5wYworCisgICMgUVQgYWJ1c2VzICRpbmNsdWRlZGlyIHRvIHBvaW50IHRvIGl0cyBoZWFkZXJzLCB3aGljaCBicmVha3MgcGtnY29uZmlnIHN5c3Jvb3QsIHNvCisgICMgbWFudWFsbHkgZml4IGl0IHVwIGhlcmU6CisgIGZvciBwYyBpbiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8qLnBjIDsgZG8KKyAgICBzZWQgLWkgLWUgInM6cHJlZml4fWluY2x1ZGUvJHtRVF9CQVNFX05BTUV9LyQoYmFzZW5hbWUgJHBjIC5wYyk6cHJlZml4fS9pbmNsdWRlOiIgXAorICAgICAgLWUgInMsQ2ZsYWdzOiAsQ2ZsYWdzOiAtSVB7aW5jbHVkZWRpcn0vJHtRVF9CQVNFX05BTUV9LyQoYmFzZW5hbWUgJHBjIC5wYykgLCIgXAorICAgICAgLWUgJ3M6SVB7OkkkezpnJyAkcGMKKyAgZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC14MTEtZnJlZV80LjguNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQteDExLWZyZWVfNC44LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNiNWU2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQteDExLWZyZWVfNC44LjcuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIHF0NC14MTEtZnJlZS5pbmMKK3JlcXVpcmUgcXQ0LSR7UFZ9LmluYworCitRVF9DT05GSUdfRkxBR1NfYXBwZW5kX2FybSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgIiIsICIgLW5vLW5lb24iICxkKX0iCisKK1FUX0NPTkZJR19GTEFHUyArPSAiIFwKKyAtbm8tZW1iZWRkZWQgXAorIC14cmFuZHIgXAorIC14MTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNThlNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LmluYwpAQCAtMCwwICsxLDM5MSBAQAoraW5oZXJpdCBxbWFrZV9iYXNlCisKK0RFUEVORFMgKz0gInF0NC10b29scy1uYXRpdmUgZnJlZXR5cGUganBlZyBsaWJwbmcgemxpYiBkYnVzIG9wZW5zc2wgZ2xpYi0yLjAgc3FsaXRlMyB0aWZmIGljdSIKK0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHVsc2VhdWRpbycsICdwdWxzZWF1ZGlvJywgJycsIGQpfSIKKworcmVxdWlyZSBxdDRfYXJjaC5pbmMKKworUVRfRElTVFJPX0ZMQUdTID89ICItbm8tYWNjZXNzaWJpbGl0eSAtbm8tc20iCitRVF9ESVNUUk9fRkxBR1NfbGludXhzdGRiYXNlID0gIi1zbSIKKworUVRfU1FMX0RSSVZFUl9GTEFHUyA/PSAiLW5vLXNxbC1pYmFzZSAtbm8tc3FsLW15c3FsIC1uby1zcWwtcHNxbCAtbm8tc3FsLW9kYmMgLW5vLXNxbC1zcWxpdGUyIC1wbHVnaW4tc3FsLXNxbGl0ZSAtc3lzdGVtLXNxbGl0ZSIKKworUVRfR0xGTEFHUyA/PSAiIgorCisgIAorUVRfUVQzU1VQUE9SVCA/PSAiLXF0M3N1cHBvcnQiCitRVF9YTUwgPz0gIi14bWxwYXR0ZXJucyIKK1FUX1dFQktJVCA/PSAiLXdlYmtpdCIKK1FUX1BIT05PTiA/PSAiLW5vLXBob25vbiIKK1FUX0RCVVMgPz0gIi1xZGJ1cyIKK1FUX01VTFRJTUVESUEgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHVsc2VhdWRpbycsICctcHVsc2VhdWRpbycsICctbm8tcHVsc2VhdWRpbycsIGQpfSIKKyAKK1FUX0NPTkZJR19GTEFHUyArPSAiLXJlbGVhc2UgLW5vLWN1cHMgLXJlZHVjZS1yZWxvY2F0aW9ucyBcCisgICAgICAgICAgICAgICAgICAgIC1zaGFyZWQgLW5vLW5hcy1zb3VuZCAtbm8tbmlzIFwKKyAgICAgICAgICAgICAgICAgICAgLXN5c3RlbS1saWJqcGVnIC1zeXN0ZW0tbGlicG5nIC1zeXN0ZW0tbGlidGlmZiAtc3lzdGVtLXpsaWIgXAorICAgICAgICAgICAgICAgICAgICAtbm8tcGNoIC1zdGwgLWdsaWIgLWljdSBcCisgICAgICAgICAgICAgICAgICAgIC1uby1ycGF0aCAtc2lsZW50IFwKKwkJICAgIC1EIFVTRV9RVE1VTFRJTUVESUE9MSBcCisgICAgICAgICAgICAgICAgICAgICR7UVRfREJVU30gXAorICAgICAgICAgICAgICAgICAgICAke1FUX1FUM1NVUFBPUlR9IFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9XRUJLSVR9IFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9QSE9OT059IFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9YTUx9IFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9NVUxUSU1FRElBfSBcCisgICAgICAgICAgICAgICAgICAgICR7UVRfU1FMX0RSSVZFUl9GTEFHU30gXAorICAgICAgICAgICAgICAgICAgICAke1FUX0RJU1RST19GTEFHU30gXAorICAgICAgICAgICAgICAgICAgICAke1FUX0dMRkxBR1N9IgorCitFWFRSQV9PRU1BS0UgPSAiLWUiCisKK0VYVFJBX0VOViA9ICdRTUFLRT0iJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3FtYWtlMiAtYWZ0ZXIgXAorICAgICAgICAgICAgIElOQ1BBVEgrPSR7U1RBR0lOR19JTkNESVJ9L2ZyZWV0eXBlMiBMSUJTKz0tTCR7U1RBR0lOR19MSUJESVJ9IiBcCisgICAgICAgICAgICAgUU1BS0VTUEVDPSIke1FNQUtFU1BFQ30iIExJTks9IiR7Q1hYfSAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUn0iIFwKKyAgICAgICAgICAgICBBUj0iJHtUQVJHRVRfUFJFRklYfWFyIGNxcyIgXAorICAgICAgICAgICAgIE1PQz0iJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L21vYzQiIFVJQz0iJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3VpYzQiIE1BS0U9Im1ha2UgLWUiJworCitleHBvcnQgUVRfQ09ORl9QQVRIPSIke1dPUktESVJ9L3F0LmNvbmYiCisKKyMgTGlicmFyeSBwYWNrYWdlcworUVRfTElCX05BTUVTID0gIlF0M1N1cHBvcnQgUXRBc3Npc3RhbnRDbGllbnQgUXRDTHVjZW5lIFF0Q29yZSBRdERCdXMgUXREZXNpZ25lciBRdERlc2lnbmVyQ29tcG9uZW50cyBRdEd1aSBRdEhlbHAgUXROZXR3b3JrIFF0T3BlbkdMIFF0U2NyaXB0IFF0U2NyaXB0VG9vbHMgUXRTcWwgUXRTdmcgUXRUZXN0IFF0VWlUb29scyBRdFdlYktpdCBRdFhtbCBRdFhtbFBhdHRlcm5zIHBob25vbiBRdE11bHRpbWVkaWEgUXRPcGVuVkcgUXRNZWRpYVNlcnZpY2VzIFF0RGVjbGFyYXRpdmUiCisKK1FUX0VYVFJBX0xJQlMgPSAicHZyUVdTV1NFR0wiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgbGliX3BhY2thZ2VzID0gW10KKyAgICBkZXZfcGFja2FnZXMgPSBbXQorICAgIGRiZ19wYWNrYWdlcyA9IFtdCisgICAgc3RhdGljZGV2X3BhY2thZ2VzID0gW10KKyAgICBmb3IgbmFtZSBpbiBkLmdldFZhcigiUVRfTElCX05BTUVTIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgcGtnID0gZC5nZXRWYXIoIlFUX0JBU0VfTElCIiwgVHJ1ZSkgKyBuYW1lLmxvd2VyKCkucmVwbGFjZSgicXQiLCAiIikucmVwbGFjZSgiXyIsICItIikgKyAiNCIKKyAgICAgICAgIyBOT1RFOiB0aGUgaGVhZGVycyBmb3IgUXRBc3Npc3RhbnRDbGllbnQgYXJlIGRpZmZlcmVudAorICAgICAgICBpbmNuYW1lID0gbmFtZS5yZXBsYWNlKCJRdEFzc2lzdGFudENsaWVudCIsICJRdEFzc2lzdGFudCIpCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcyIgJSBwa2csICIke2xpYmRpcn0vbGliJShuYW1lKXMke1FUX0xJQklORklYfS5zby4qIiAlIGxvY2FscygpKQorICAgICAgICBkLnNldFZhcigiRklMRVNfJXMtZGV2IiAlIHBrZywgIiIiJHtsaWJkaXJ9L2xpYiUobmFtZSlzJHtRVF9MSUJJTkZJWH0ucHJsCisgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliJShuYW1lKXMke1FUX0xJQklORklYfS5sYQorICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYiUobmFtZSlzJHtRVF9MSUJJTkZJWH0uc28KKyAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vJHtRVF9ESVJfTkFNRX0vJShpbmNuYW1lKXMKKyAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wa2djb25maWcvJShuYW1lKXMke1FUX0xJQklORklYfS5wYyIiIiAlIGxvY2FscygpKQorICAgICAgICBkLnNldFZhcigiRklMRVNfJXMtc3RhdGljZGV2IiAlIHBrZywgIiR7bGliZGlyfS9saWIlKG5hbWUpcyR7UVRfTElCSU5GSVh9LmEiICUgbG9jYWxzKCkpCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcy1kYmciICUgcGtnLCAiJHtsaWJkaXJ9Ly5kZWJ1Zy9saWIlKG5hbWUpcyR7UVRfTElCSU5GSVh9LnNvKiIgJSBsb2NhbHMoKSkKKyAgICAgICAgZC5zZXRWYXIoIlJSRUNPTU1FTkRTXyVzLWRiZyIgJSBwa2csICIke1BOfS1kYmciKQorICAgICAgICBsaWJfcGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgZGV2X3BhY2thZ2VzLmFwcGVuZCgiJXMtZGV2IiAlIHBrZykKKyAgICAgICAgZGJnX3BhY2thZ2VzLmFwcGVuZCgiJXMtZGJnIiAlIHBrZykKKyAgICAgICAgc3RhdGljZGV2X3BhY2thZ2VzLmFwcGVuZCgiJXMtc3RhdGljZGV2IiAlIHBrZykKKyAgICBmb3IgbmFtZSBpbiBkLmdldFZhcigiT1RIRVJfUEFDS0FHRVMiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBkYmdfcGFja2FnZXMuYXBwZW5kKCIlcy1kYmciICUgbmFtZSkKKyAgICAgICAgc3RhdGljZGV2X3BhY2thZ2VzLmFwcGVuZCgiJXMtc3RhdGljZGV2IiAlIG5hbWUpCisKKyAgICBmb3IgbmFtZSBpbiBkLmdldFZhcigiUVRfRVhUUkFfTElCUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIHBrZyA9IGQuZ2V0VmFyKCJRVF9CQVNFX0xJQiIsIFRydWUpICsgbmFtZS5sb3dlcigpLnJlcGxhY2UoInF0IiwgIiIpLnJlcGxhY2UoIl8iLCAiLSIpICsgIjQiCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcyIgJSBwa2csICIke2xpYmRpcn0vbGliJShuYW1lKXMuc28uKiIgJSBsb2NhbHMoKSkKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzLXN0YXRpY2RldiIgJSBwa2csICIke2xpYmRpcn0vbGliJShuYW1lKXMuYSIgJSBsb2NhbHMoKSkKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzLWRldiIgJSBwa2csICIiIiR7bGliZGlyfS9saWIlKG5hbWUpcy5wcmwKKyAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWIlKG5hbWUpcy5sYQorICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYiUobmFtZSlzLnNvCisgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9LyR7UVRfRElSX05BTUV9LyUoaW5jbmFtZSlzCisgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGtnY29uZmlnLyUobmFtZSlzLnBjIiIiICUgbG9jYWxzKCkpCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcy1kYmciICUgcGtnLCAiJHtsaWJkaXJ9Ly5kZWJ1Zy9saWIlKG5hbWUpcy5zbyoiICUgbG9jYWxzKCkpCisgICAgICAgIGQuc2V0VmFyKCJSUkVDT01NRU5EU18lcy1kYmciICUgcGtnLCAiJHtQTn0tZGJnIikKKyAgICAgICAgbGliX3BhY2thZ2VzLmFwcGVuZChwa2cpCisgICAgICAgIGRldl9wYWNrYWdlcy5hcHBlbmQoIiVzLWRldiIgJSBwa2cpCisgICAgICAgIGRiZ19wYWNrYWdlcy5hcHBlbmQoIiVzLWRiZyIgJSBwa2cpCisgICAgICAgIHN0YXRpY2Rldl9wYWNrYWdlcy5hcHBlbmQoIiVzLXN0YXRpY2RldiIgJSBwa2cpCisKKyAgICBkLnNldFZhcigiTElCX1BBQ0tBR0VTIiwgIiAiLmpvaW4obGliX3BhY2thZ2VzKSkKKyAgICBkLnNldFZhcigiREVWX1BBQ0tBR0VTIiwgIiAiLmpvaW4oZGV2X3BhY2thZ2VzKSkKKyAgICBkLnNldFZhcigiREJHX1BBQ0tBR0VTIiwgIiAiLmpvaW4oZGJnX3BhY2thZ2VzKSkKKyAgICBkLnNldFZhcigiU1RBVElDREVWX1BBQ0tBR0VTIiwgIiAiLmpvaW4oc3RhdGljZGV2X3BhY2thZ2VzKSkKK30KKworT1RIRVJfUEFDS0FHRVMgPSAiXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS10b29scyBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWFzc2lzdGFudCBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWNvbW1vbiBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWRidXMgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1kZW1vcyBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWRlc2lnbmVyIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1saW5ndWlzdCBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LW1ha2VxcGYgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1ta3NwZWNzIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcGl4ZWx0b29sIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcW1sdmlld2VyIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0teG1scGF0dGVybnMgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1xdDN0bzQgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1xbWwtcGx1Z2lucyIKKworI1dlIHByZXBlbmQgc28gJHtRVF9CQVNFX05BTUV9LWRlbW9zLWRvYyBjb21lcyBiZWZvcmUgJHtQTn0tZG9jLHNvIHRoZSBwYWNrYWdpbmcgb2YgRklMRVNfIGdldCBkb25lIGJlZm9yZS4KK1BBQ0tBR0VTID0rICIke1FUX0JBU0VfTkFNRX0tZGVtb3MtZG9jIgorUEFDS0FHRVMgKz0gIiBcCisgICAgICAgICAgICAgJHtMSUJfUEFDS0FHRVN9IFwKKyAgICAgICAgICAgICAke0RFVl9QQUNLQUdFU30gXAorICAgICAgICAgICAgICR7REJHX1BBQ0tBR0VTfSBcCisgICAgICAgICAgICAgJHtTVEFUSUNERVZfUEFDS0FHRVN9IFwKKyAgICAgICAgICAgICAke09USEVSX1BBQ0tBR0VTfSIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXiR7UVRfQkFTRV9OQU1FfS1wbHVnaW4tLiogXiR7UVRfQkFTRV9OQU1FfS10cmFuc2xhdGlvbi0uKiBeJHtRVF9CQVNFX05BTUV9LXBocmFzZWJvb2stLioiCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCitGSUxFU18ke1BOfSAgICAgPSAiIgorRklMRVNfJHtQTn0tZGV2ID0gIiR7aW5jbHVkZWRpcn0vJHtRVF9ESVJfTkFNRX0vUXQvKiIKK0ZJTEVTXyR7UE59LWRiZyA9ICIvdXNyL3NyYy9kZWJ1Zy8iCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZGVtb3MtZG9jID0gIiR7ZG9jZGlyfS8ke1FUX0RJUl9OQU1FfS9xY2gvcXQucWNoIgorUlJFQ09NTUVORFNfJHtQTn0gPSAiJHtMSUJfUEFDS0FHRVN9ICR7T1RIRVJfUEFDS0FHRVN9IgorUlJFQ09NTUVORFNfJHtQTn0tZGV2ID0gIiR7REVWX1BBQ0tBR0VTfSIKK1JSRUNPTU1FTkRTXyR7UE59LWRiZyA9ICIke0RCR19QQUNLQUdFU30iCitSUkVDT01NRU5EU18ke1FUX0JBU0VfTElCfWNvcmU0X2FwcGVuZF9saWJjLWdsaWJjID0gIiBnbGliYy1nY29udi11dGYtMTYiCitSUkVDT01NRU5EU18ke1FUX0JBU0VfTkFNRX0tZGVtb3MgKz0gIiBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXBsdWdpbi1zcWxkcml2ZXItc3FsaXRlIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1wbHVnaW4taW1hZ2Vmb3JtYXQtanBlZyBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcW1sLXBsdWdpbnMgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWFzc2lzdGFudCBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZGVtb3MtZG9jIgorUlJFQ09NTUVORFNfJHtRVF9CQVNFX05BTUV9LWV4YW1wbGVzICs9ICIgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXBsdWdpbi1zcWxkcml2ZXItc3FsaXRlIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1wbHVnaW4taW1hZ2Vmb3JtYXQtanBlZyBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcW1sLXBsdWdpbnMiCitSUkVDT01NRU5EU18ke1FUX0JBU0VfTkFNRX0tcW1sdmlld2VyICs9ICIgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXFtbC1wbHVnaW5zIgorUlJFQ09NTUVORFNfJHtRVF9CQVNFX05BTUV9LWRvYyArPSAiIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1kZW1vcy1kb2MiCisKK1JQUk9WSURFU18ke1FUX0JBU0VfTkFNRX0tdG9vbHMgKz0gInFtYWtlMiIKK1JSRVBMQUNFU18ke1FUX0JBU0VfTkFNRX0tdG9vbHMgKz0gInFtYWtlMiIKKworRklMRVNfJHtRVF9CQVNFX05BTUV9LXRvb2xzICAgICAgICAgICAgICAgID0gIiR7YmluZGlyfS9xdHRyYWNlcmVwbGF5ICR7YmluZGlyfS9xZG9jKiAke2JpbmRpcn0vcW1ha2UgJHtiaW5kaXJ9L21vYyAke2JpbmRpcn0vdWljKiAke2JpbmRpcn0vcmNjIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXRvb2xzLWRiZyAgICAgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvcXR0cmFjZXJlcGxheSAke2JpbmRpcn0vLmRlYnVnL3Fkb2MqICR7YmluZGlyfS8uZGVidWcvcW1ha2UgJHtiaW5kaXJ9Ly5kZWJ1Zy91aWMqICR7YmluZGlyfS8uZGVidWcvbW9jICR7YmluZGlyfS8uZGVidWcvcmNjIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWFzc2lzdGFudCAgICAgICAgICAgID0gIiR7YmluZGlyfS8qYXNzaXN0YW50KiAke2JpbmRpcn0vcWNvbGxlY3Rpb25nZW5lcmF0b3IgJHtiaW5kaXJ9L3FoZWxwY29udmVydGVyICR7YmluZGlyfS9xaGVscGdlbmVyYXRvciIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1hc3Npc3RhbnQtZGJnICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnLyphc3Npc3RhbnQqICR7YmluZGlyfS8uZGVidWcvcWNvbGxlY3Rpb25nZW5lcmF0b3IgJHtiaW5kaXJ9Ly5kZWJ1Zy9xaGVscGNvbnZlcnRlciAke2JpbmRpcn0vLmRlYnVnL3FoZWxwZ2VuZXJhdG9yIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWNvbW1vbiAgICAgICAgICAgICAgID0gIiR7YmluZGlyfS9xdGNvbmZpZyIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1jb21tb24tZGJnICAgICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnL3F0Y29uZmlnIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWRidXMgICAgICAgICAgICAgICAgID0gIiR7YmluZGlyfS9xZGJ1cyAke2JpbmRpcn0vcWRidXN4bWwyY3BwICR7YmluZGlyfS9xZGJ1c2NwcDJ4bWwgJHtiaW5kaXJ9L3FkYnVzdmlld2VyIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWRidXMtZGJnICAgICAgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvcWRidXMgJHtiaW5kaXJ9Ly5kZWJ1Zy9xZGJ1c3htbDJjcHAgJHtiaW5kaXJ9Ly5kZWJ1Zy9xZGJ1c2NwcDJ4bWwgJHtiaW5kaXJ9Ly5kZWJ1Zy9xZGJ1c3ZpZXdlciIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kZW1vcyAgICAgICAgICAgICAgICA9ICIke2JpbmRpcn0vcXRkZW1vKiAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZGVtb3MvKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kZW1vcy1zdGF0aWNkZXYgICAgICA9ICIke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZGVtb3Mvc2hhcmVkL2xpYmRlbW9fc2hhcmVkLmEiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZGVtb3MtZGJnICAgICAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy9xdGRlbW8qICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9kZW1vcy8uZGVidWcvKiAgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2RlbW9zLyovLmRlYnVnICAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZGVtb3MvKi8qLy5kZWJ1ZyAgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2RlbW9zLyovKi8qLy5kZWJ1ZyIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kZXNpZ25lciAgICAgICAgICAgICA9ICIke2JpbmRpcn0vKmRlc2lnbmVyKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kZXNpZ25lci1kYmcgICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnLypkZXNpZ25lcioiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMgICAgICAgICAgICAgPSAiJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzLyoiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMtc3RhdGljZGV2ICAgPSAiJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzL3Rvb2xzL3BsdWdhbmRwYWludC9wbHVnaW5zL2xpYnBucF9iYXNpY3Rvb2xzLmEiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMtZGJnICAgICAgICAgPSAiJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzLy5kZWJ1ZyAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvKi8uZGVidWcgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzLyovKi8uZGVidWcgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzLyovKi8qLy5kZWJ1ZyAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvKi8qLyovKi8uZGVidWcgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzL2RlY2xhcmF0aXZlLyovKi8qLyovKi8uZGVidWcvKiAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvZGVjbGFyYXRpdmUvKi8qLyovKi8uZGVidWcvKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1saW5ndWlzdCAgICAgICAgICAgICA9ICIke2JpbmRpcn0vKmxpbmd1aXN0KiAke2JpbmRpcn0vbHJlbGVhc2UgJHtiaW5kaXJ9L2x1cGRhdGUgJHtiaW5kaXJ9L2xjb252ZXJ0ICR7YmluZGlyfS9xbTJ0cyIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1saW5ndWlzdC1kYmcgICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnLypsaW5ndWlzdCogJHtiaW5kaXJ9Ly5kZWJ1Zy9scmVsZWFzZSAke2JpbmRpcn0vLmRlYnVnL2x1cGRhdGUgJHtiaW5kaXJ9Ly5kZWJ1Zy9sY29udmVydCAke2JpbmRpcn0vLmRlYnVnL3FtMnRzIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXBpeGVsdG9vbCAgICAgICAgICAgID0gIiR7YmluZGlyfS9waXhlbHRvb2wiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcGl4ZWx0b29sLWRiZyAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy9waXhlbHRvb2wiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcXQzdG80ICAgICAgICAgICAgICAgPSAiJHtiaW5kaXJ9L3F0M3RvNCAke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L3EzcG9ydGluZy54bWwiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcXQzdG80LWRiZyAgICAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy9xdDN0bzQiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcW1sdmlld2VyICAgICAgICAgICAgPSAiJHtiaW5kaXJ9L3FtbHZpZXdlciIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1xbWx2aWV3ZXItZGJnICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnL3FtbHZpZXdlciIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1tYWtlcXBmICAgICAgICAgICAgICA9ICIke2JpbmRpcn0vbWFrZXFwZiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1tYWtlcXBmLWRiZyAgICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnL21ha2VxcGYiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tbWtzcGVjcyAgICAgICAgICAgICAgPSAiJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzLyogJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9lbnZpcm9ubWVudC1zZXR1cCIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS14bWxwYXR0ZXJucyAgICAgICAgICA9ICIke2JpbmRpcn0veG1scGF0dGVybnMqIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXhtbHBhdHRlcm5zLWRiZyAgICAgID0gIiR7YmluZGlyfS8uZGVidWcveG1scGF0dGVybnMqIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXFtbC1wbHVnaW5zICAgICAgICAgID0gIiR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9pbXBvcnRzLyogJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L3BsdWdpbnMvcW1sdG9vbGluZy8qIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXFtbC1wbHVnaW5zLWRiZyAgICAgID0gIiR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9pbXBvcnRzLyovKi8qLy5kZWJ1Zy8qICR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9pbXBvcnRzLyovLmRlYnVnICR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9wbHVnaW5zL3FtbHRvb2xpbmcvLmRlYnVnIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH0ke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMgICAgICArPSAibGliZGlyIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH0ke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMtZGJnICArPSAibGliZGlyIgorCisjIExpY2Vuc2Ugb3B0aW9ucywgdG8gYmUgc2V0IGJ5IHRoZSByZWNpcGUgaWYgZGlmZmVyZW50IHZhbHVlcyBhcmUgbmVlZGVkCitRVF9MSUNFTlNFX0ZJTEUgPz0gIiIKK1FUX0xJQ0VOU0VfRkxBR1MgPz0gIi1vcGVuc291cmNlIgorCitkb19jb25maWd1cmUoKSB7CisJdW5zZXQgUU1BS0VTUEVDCisJdW5zZXQgUVRESVIKKworCXNldF9hcmNoCisJc2V0X2VuZGlhbgorCisJaWYgWyAhIC1lIGJpbi9xbWFrZSBdOyB0aGVuCisJCWxuIC1zZiAke1NUQUdJTkdfQklORElSX05BVElWRX0vcW1ha2UyIGJpbi9xbWFrZQorCWZpCisKKwlpZiBbICEgLWUgbWtzcGVjcy8ke1RBUkdFVF9PU30tb2UtZysrIF07IHRoZW4KKwkJbG4gLXNmIGxpbnV4LWcrKyBta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysKKwlmaQorCisJaWYgWyAtZiBta3NwZWNzL2NvbW1vbi9nKystdW5peC5jb25mIF0gOyB0aGVuCisJCSMgbWtzcGVjcyB3ZXJlIHJlZmFjdG9yZWQgZm9yIDQuOC4wCisJCWNwIC1mICR7V09SS0RJUn0vZysrLmNvbmYgbWtzcGVjcy9jb21tb24vZysrLXVuaXguY29uZgorCWVsc2UKKwkJY3AgLWYgJHtXT1JLRElSfS9nKysuY29uZiBta3NwZWNzL2NvbW1vbi9nKysuY29uZgorCWZpCisJY3AgLWYgJHtXT1JLRElSfS9saW51eC5jb25mIG1rc3BlY3MvY29tbW9uLworCisJZWNobyAiW1BhdGhzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+ICRRVF9DT05GX1BBVEgKKwllY2hvICJQcmVmaXg9JHtwcmVmaXh9IiAgICAgICAgICAgICAgICAgICAgICAgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIkRvY3VtZW50YXRpb249JHtkb2NkaXJ9LyR7UVRfRElSX05BTUV9IiA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiSGVhZGVycz0ke2luY2x1ZGVkaXJ9LyR7UVRfRElSX05BTUV9IiAgID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJMaWJyYXJpZXM9JHtsaWJkaXJ9IiAgICAgICAgICAgICAgICAgICAgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIkJpbmFyaWVzPSR7YmluZGlyfSIgICAgICAgICAgICAgICAgICAgICA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiUGx1Z2lucz0ke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vcGx1Z2lucyIgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIkltcG9ydHM9JHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L2ltcG9ydHMiID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJEYXRhPSR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0iICAgICAgICAgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIlRyYW5zbGF0aW9ucz0ke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L3RyYW5zbGF0aW9ucyIgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIlNldHRpbmdzPSR7c3lzY29uZmRpcn0vJHtRVF9ESVJfTkFNRX0iICA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiRXhhbXBsZXM9JHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzIiA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiRGVtb3M9JHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2RlbW9zIiAgID4+ICRRVF9DT05GX1BBVEgKKworCSR7RVhUUkFfUU1BS0VfTVVOR0V9fHwgdHJ1ZQorCisJZWNobyB5ZXMgfCBRVF9MSUNFTlNFX0ZJTEU9IiR7UVRfTElDRU5TRV9GSUxFfSIgLi9jb25maWd1cmUgLXYgXAorCQkJLXByZWZpeCAke3ByZWZpeH0gXAorCQkJLWJpbmRpciAke2JpbmRpcn0gXAorCQkJLWxpYmRpciAke2xpYmRpcn0gXAorCQkJLWRhdGFkaXIgJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfSBcCisJCQktc3lzY29uZmRpciAke3N5c2NvbmZkaXJ9LyR7UVRfRElSX05BTUV9IFwKKwkJCS1kb2NkaXIgJHtkb2NkaXJ9LyR7UVRfRElSX05BTUV9IFwKKwkJCS1oZWFkZXJkaXIgJHtpbmNsdWRlZGlyfS8ke1FUX0RJUl9OQU1FfSBcCisJCQktcGx1Z2luZGlyICR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9wbHVnaW5zIFwKKwkJCS1pbXBvcnRkaXIgJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L2ltcG9ydHMgXAorCQkJLXRyYW5zbGF0aW9uZGlyICR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vdHJhbnNsYXRpb25zIFwKKwkJCS1leGFtcGxlc2RpciAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMgXAorCQkJLWRlbW9zZGlyICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9kZW1vcyBcCisJCQktcGxhdGZvcm0gJHtUQVJHRVRfT1N9LW9lLWcrKyBcCisJCQkteHBsYXRmb3JtICR7VEFSR0VUX09TfS1vZS1nKysgXAorCQkJJHtRVF9FTkRJQU59IFwKKwkJCS1jcm9zc2FyY2ggJHtRVF9BUkNIfSBcCisJCQkke1FUX0xJQ0VOU0VfRkxBR1N9IFwKKwkJCSR7UVRfQ09ORklHX0ZMQUdTfSAtbm8tZmFzdCBcCisJCQktTCR7U1RBR0lOR19MSUJESVJ9IC1JJHtTVEFHSU5HX0lOQ0RJUn0gXAorCQkJLUkke1NUQUdJTkdfSU5DRElSfS9mcmVldHlwZTIKK30KKworZG9fY29tcGlsZSgpIHsKKyAgICAjIEZpeHVwIG1pc3Npbmcgd3NlZ2wgaGVhZGVyIGluIHNvbWUgU0dYIFNES3MKKyAgICBpZiAhIFsgLWUgJHtTVEFHSU5HX0lOQ0RJUn0vd3NlZ2wuaCBdIDsgdGhlbgorICAgICAgICBjcCBzcmMvM3JkcGFydHkvcG93ZXJ2ci93c2VnbC5oIHNyYy9wbHVnaW5zL2dmeGRyaXZlcnMvcG93ZXJ2ci9RV1NXU0VHTC8KKyAgICBmaQorCisgICAgdW5zZXQgQ0ZMQUdTIENYWEZMQUdTCisKKyAgICBvZV9ydW5tYWtlICR7RVhUUkFfRU5WfQorCisgICAgIyBCdWlsZCB0YXJnZXQgcW1ha2UKKyAgICBleHBvcnQgUU1BS0VTUEVDPSIke1N9L21rc3BlY3MvJHtUQVJHRVRfT1N9LW9lLWcrKyIKKyAgICBjZCAke1N9L3FtYWtlCisgICAgJHtPRV9RTUFLRV9RTUFLRX0KKyAgICBvZV9ydW5tYWtlIENDPSIke0NDfSIgQ1hYPSIke0NYWH0iCisgICAgY2QgJHtTfQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICB0cmFuc2xhdGlvbl9kaXIgPSBkLmV4cGFuZCgnJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS90cmFuc2xhdGlvbnMvJykKKyAgICB0cmFuc2xhdGlvbl9uYW1lID0gZC5leHBhbmQoJyR7UVRfQkFTRV9OQU1FfS10cmFuc2xhdGlvbi0lcycpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgdHJhbnNsYXRpb25fZGlyLCAnXihhc3Npc3RhbnR8ZGVzaWduZXJ8bGluZ3Vpc3R8cXR8cXRjb25maWd8cXZmYnxxdHNjcmlwdClfKC4qKVwucW0kJywgdHJhbnNsYXRpb25fbmFtZSwgJyR7UE59IHRyYW5zbGF0aW9uIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycgKQorIAorICAgIHBocmFzZWJvb2tfZGlyID0gZC5leHBhbmQoJyR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vcGhyYXNlYm9va3MvJykKKyAgICBwaHJhc2Vib29rX25hbWUgPSBkLmV4cGFuZCgnJHtRVF9CQVNFX05BTUV9LXBocmFzZWJvb2stJXMnKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMoIiVzJXMiICUgKGQuZXhwYW5kKCcke0R9JyksIHBocmFzZWJvb2tfZGlyKSk6CisgICAgICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBocmFzZWJvb2tfZGlyLCAnXiguKilcLnFwaCQnLCBwaHJhc2Vib29rX25hbWUsICcke1BOfSBwaHJhc2Vib29rIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycgKQorICAgIGVsc2U6CisgICAgICAgIGJiLm5vdGUoIlRoZSBwYXRoIGRvZXMgbm90IGV4aXN0OiIsIGQuZXhwYW5kKCcke0R9JyksIHBocmFzZWJvb2tfZGlyKQorIAorICAgICMgUGFja2FnZSBhbGwgdGhlIHBsdWdpbnMgYW5kIHRoZWlyIC1kYmcgdmVyc2lvbiBhbmQgY3JlYXRlIGEgbWV0YSBwYWNrYWdlCisgICAgZGVmIHF0b3BpYV9zcGxpdChwYXRoLCBuYW1lLCBnbG9iKToKKyAgICAgICAgIiIiCisgICAgICAgIFNwbGl0IHRoZSBwYWNrYWdlIGludG8gYSBub3JtYWwgYW5kIC1kYmcgcGFja2FnZSBhbmQgdGhlbiBhZGQgdGhlCisgICAgICAgIG5ldyBwYWNrYWdlcyB0byB0aGUgbWV0YSBwYWNrYWdlLgorICAgICAgICAiIiIKKyAgICAgICAgcGx1Z2luX2RpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vcGx1Z2lucy8lcy8nICUgcGF0aCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCIlcyVzIiAlIChkLmV4cGFuZCgnJHtEfScpLCBwbHVnaW5fZGlyKSk6CisgICAgICAgICAgICBiYi5ub3RlKCJUaGUgcGF0aCBkb2VzIG5vdCBleGlzdDoiLCBkLmV4cGFuZCgnJHtEfScpLCBwbHVnaW5fZGlyKQorICAgICAgICAgICAgcmV0dXJuCisgCisgICAgICAgIHBsdWdpbl9uYW1lID0gZC5leHBhbmQoJyR7UVRfQkFTRV9OQU1FfS1wbHVnaW4tJXMtJSVzJyAlIG5hbWUpCisgICAgICAgIGRldl9wYWNrYWdlcyA9IFtdCisgICAgICAgIGRldl9ob29rID0gbGFtYmRhIGZpbGUscGtnLGIsYyxkOmRldl9wYWNrYWdlcy5hcHBlbmQoKGZpbGUscGtnKSkKKyAgICAgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGx1Z2luX2RpciwgZ2xvYiwgcGx1Z2luX25hbWUsICcke1BOfSAlcyBmb3IgJSVzJyAlIG5hbWUsIGV4dHJhX2RlcGVuZHM9JycsIGhvb2s9ZGV2X2hvb2spCisgICAgICAgICMgQ3JlYXRlIGEgLWRiZyBwYWNrYWdlIGFzIHdlbGwKKyAgICAgICAgcGx1Z2luX2Rpcl9kYmcgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L3BsdWdpbnMvJXMvLmRlYnVnJyAlIHBhdGgpCisgICAgICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgRmFsc2UpCisgICAgICAgIGZvciAoZmlsZSxwYWNrYWdlKSBpbiBkZXZfcGFja2FnZXM6CisgICAgICAgICAgICBwYWNrYWdlcyA9ICIlcyAlcy1kYmciICUgKHBhY2thZ2VzLCBwYWNrYWdlKQorICAgICAgICAgICAgZmlsZV9uYW1lID0gb3MucGF0aC5qb2luKHBsdWdpbl9kaXJfZGJnLCBvcy5wYXRoLmJhc2VuYW1lKGZpbGUpKQorICAgICAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzLWRiZyIgJSBwYWNrYWdlLCBmaWxlX25hbWUpCisgICAgICAgICAgICBkLnNldFZhcigiREVTQ1JJUFRJT05fJXMtZGJnIiAlIHBhY2thZ2UsICIke1BOfSAlcyBmb3IgJXMiICUgKG5hbWUsIHBhY2thZ2UpKQorCisgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsIHBhY2thZ2VzKQorCisgICAgcXRvcGlhX3NwbGl0KCdhY2Nlc3NpYmxlJywgICAgJ2FjY2Vzc2libGUnLCAgICAnXmxpYnEoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnY29kZWNzJywgICAgICAgICdjb2RlYycsICAgICAgICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2RlY29yYXRpb25zJywgICAnZGVjb3JhdGlvbicsICAgICdebGlicWRlY29yYXRpb24oLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnZGVzaWduZXInLCAgICAgICdkZXNpZ25lcicsICAgICAgJ15saWIoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnZ2Z4ZHJpdmVycycsICAgICdnZnhkcml2ZXInLCAgICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2dyYXBoaWNzc3lzdGVtcycsJ2dyYXBoaWNzc3lzdGVtcycsICdebGlicSguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdrYmRkcml2ZXJzJywgICAgJ2tiZGRyaXZlcicsICAgICAnXmxpYnEoLiopa2JkZHJpdmVyXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnbW91c2Vkcml2ZXJzJywgICdtb3VzZWRyaXZlcicsICAgJ15saWJxKC4qKW1vdXNlZHJpdmVyXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnaWNvbmVuZ2luZXMnLCAgICdpY29uZW5naW5lJywgICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2ltYWdlZm9ybWF0cycsICAnaW1hZ2Vmb3JtYXQnLCAgICdebGlicSguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdpbnB1dG1ldGhvZHMnLCAgJ2lucHV0bWV0aG9kJywgICAnXmxpYnEoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnc3FsZHJpdmVycycsICAgICdzcWxkcml2ZXInLCAgICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ3NjcmlwdCcsICAgICAgICAnc2NyaXB0JywgICAgICAgICdebGlicXRzY3JpcHQoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnc3R5bGVzJywgICAgICAgICdzdHlsZScsICAgICAgICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ3Bob25vbl9iYWNrZW5kJywncGhvbm9uLWJhY2tlbmQnLCdebGlicGhvbm9uXyguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdiZWFyZXInLCAgICAgICAgJ2JlYXJlcicsICAgICAgICAnXmxpYnEoLiopYmVhcmVyXC5zbyQnKQorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBJTlNUQUxMX1JPT1Q9JHtEfQorCisJIyBJbnN0YWxsIGEgcHJvcGVyIHRhcmdldCB2ZXJzaW9uIG9mIHFtYWtlCisJcm0gJHtEfS8ke2JpbmRpcn0vcW1ha2UKKwlpbnN0YWxsIC1tIDA3NTUgYmluL3FtYWtlMiAke0R9JHtiaW5kaXJ9L3FtYWtlCisKKwkjIGZpeCBwa2djb25maWcsIGxpYnRvb2wgYW5kIHBybCBmaWxlcworCXNlZCAtaSAtZSAncyMtTCR7U30vbGliL1w/IyNnJyBcCisJCQktZSAncyMtTCR7U1RBR0lOR19MSUJESVJ9L1w/IyNnJyBcCisJCQktZSAncyNTVEFHSU5HX0xJQkRJUn0jbGliZGlyfScjZyBcCisJCQktZSAncyMtTCR7bGliZGlyfS9cPyMjZycgXAorCQkJLWUgcyMnJChPRV9RTUFLRV9MSUJTX1gxMSknIyIke09FX1FNQUtFX0xJQlNfWDExfSIjZyBcCisJCQktZSAncyMiIC1XbCwtcnBhdGgtbGluaywke1N9L2xpYi9cPyIjI2cnIFwKKwkJCS1lICdzIyIgLVdsLC1ycGF0aC1saW5rLCR7bGliZGlyfS9cPyIjI2cnIFwKKwkJCS1lICdzI0lpbiNJJHtpbiNnJyBcCisJCQktZSAncyMtTFwuXC4vXC5cLi9XZWJDb3JlL3JlbGVhc2Vcc1wrLUxcLlwuL1wuXC4vSmF2YVNjcmlwdENvcmUvcmVsZWFzZVxzXCstbHdlYmNvcmUjI2cnIFwKKwkJCS1lICdzIy1sanNjb3JlIyNnJyBcCisJCQkke0R9JHtsaWJkaXJ9LyoubGEgJHtEfSR7bGliZGlyfS8qLnBybCAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8qLnBjCisKKwkjIGZpeCBwa2djb25maWcgZmlsZXMKKwlzZWQgLWkgLWUgcyMibW9jX2xvY2F0aW9uPS4qJCIjIm1vY19sb2NhdGlvbj0ke2JpbmRpcn0vbW9jNCIjIFwKKwkJCS1lIHMjInVpY19sb2NhdGlvbj0uKiQiIyJ1aWNfbG9jYXRpb249JHtiaW5kaXJ9L3VpYzQiIyBcCisJCQkke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8qLnBjCisJZm9yIG5hbWUgaW4gJHtRVF9MSUJfTkFNRVN9OyBkbworCQlzZWQgLWkgLWUgL1JlcXVpcmVzL3MjIiR7bmFtZX0iIyIke25hbWV9JHtRVF9MSUJJTkZJWH0iI2cgJHtEfSR7bGliZGlyfS9wa2djb25maWcvKi5wYworCWRvbmUKKworCSMgUVQgYWJ1c2VzICRpbmNsdWRlZGlyIHRvIHBvaW50IHRvIGl0cyBoZWFkZXJzLCB3aGljaCBicmVha3MgcGtnY29uZmlnIHN5c3Jvb3QsIHNvIG1hbnVhbGx5IGZpeCBpdCB1cCBoZXJlOgorCWZvciBwYyBpbiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8qLnBjIDsgZG8KKwkJc2VkIC1pIC1lICJzOnByZWZpeH0vaW5jbHVkZS8ke1FUX0RJUl9OQU1FfS8kKGJhc2VuYW1lICRwYyAucGMpOnByZWZpeH0vaW5jbHVkZToiIFwKKwkJCQktZSAnczpJUHs6SSR7OmcnICRwYworCWRvbmUKKworCSNBcHBlbmQgYW4gRSB0byB0aGUgcXRkZW1vIGZpbGUKKwlpZiBbIC1uICIke1FUX0xJQklORklYfSIgXSA7IHRoZW4KKwkJWyAtZiAke0R9JHtiaW5kaXJ9L3F0ZGVtbyBdICYmIG12ICR7RH0ke2JpbmRpcn0vcXRkZW1vICR7RH0ke2JpbmRpcn0vcXRkZW1vJHtRVF9MSUJJTkZJWH0KKwlmaQorCisJc2NyaXB0PSIke0R9LyR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vZW52aXJvbm1lbnQtc2V0dXAiCisJdG91Y2ggJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBRVF9ESVJfTkFNRT0ke1FUX0RJUl9OQU1FfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBRVF9MSUJJTkZJWD0ke1FUX0xJQklORklYfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9BUj1hcicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9DQz1nY2MnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfQ1hYPWcrKycgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9MSU5LPWcrKycgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9MSUJESVJfUVQ9JHtsaWJkaXJ9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX0lOQ0RJUl9RVD0ke2luY2x1ZGVkaXJ9LyR7UVRfRElSX05BTUV9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX01PQz0ke2JpbmRpcn0vbW9jJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX1VJQz0ke2JpbmRpcn0vdWljJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX1VJQzM9JHtiaW5kaXJ9L3VpYzMnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfUkNDPSR7YmluZGlyfS9yY2MnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfUURCVVNDUFAyWE1MPSR7YmluZGlyfS9xZGJ1c2NwcDJ4bWwnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfUURCVVNYTUwyQ1BQPSR7YmluZGlyfS9xZGJ1c3htbDJjcHAnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfUVRfQ09ORklHPSR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vbWtzcGVjcy9xY29uZmlnLnByaScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBRTUFLRVNQRUM9JHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzL2xpbnV4LWcrKycgPj4gJHNjcmlwdAorCWNobW9kIDA3NTUgJHNjcmlwdAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NF9hcmNoLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDRfYXJjaC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk0YzI4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDRfYXJjaC5pbmMKQEAgLTAsMCArMSwyMiBAQAoraW5oZXJpdCBzaXRlaW5mbworCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworc2V0X2FyY2goKSB7CisgICBjYXNlICR7VEFSR0VUX0FSQ0h9IGluCisgICAgICAgYWFyY2g2NCopIFFUX0FSQ0g9YWFyY2g2NCA7OworICAgICAgIGFybSopICAgICBRVF9BUkNIPWFybSA7OworICAgICAgIGkqODYqKSAgICBRVF9BUkNIPWkzODYgOzsKKyAgICAgICBtaXBzKikgICAgUVRfQVJDSD1taXBzIDs7CisgICAgICAgcG93ZXJwYyopIFFUX0FSQ0g9cG93ZXJwYyA7OworICAgICAgIHg4Nl82NCopICBRVF9BUkNIPXg4Nl82NCA7OworICAgZXNhYworfQorCitzZXRfZW5kaWFuKCkgeworICAgIGlmIFsgJHtTSVRFSU5GT19FTkRJQU5ORVNTfSA9ICJsZSIgXSA7IHRoZW4KKyAgICAgICAgUVRfRU5ESUFOPSItbGl0dGxlLWVuZGlhbiIKKyAgICBlbGlmIFsgJHtTSVRFSU5GT19FTkRJQU5ORVNTfSA9ICJiZSIgXSA7IHRoZW4KKyAgICAgICAgUVRfRU5ESUFOPSItYmlnLWVuZGlhbiIKKyAgICBmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvUkVBRE1FIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNzU1OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9SRUFETUUKQEAgLTAsMCArMSwxMyBAQAorVGhlIHJlY2lwZXMtcnQgcmVjaXBlcyBwcm92aWRlIHBhY2thZ2UgYW5kIGltYWdlIHJlY2lwZXMgZm9yIHVzaW5nIGFuZCB0ZXN0aW5nCit0aGUgUFJFRU1QVF9SVCBrZXJuZWwuIFRoZSBjb3JlLWltYWdlLXJ0Ki5iYiBpbWFnZXMgYXJlIG1pbmltYWwgaW1hZ2VzIHdpdGgKK2EgY291cGxlIGV4dHJhIHBhY2thZ2VzLCBpbmNsdWRpbmcgcnQtdGVzdHMuIEluIG9yZGVyIHRvIGJ1aWxkIHRoZSBpbWFnZSB3aXRoCit0aGUgbGludXgteW9jdG8tcnQga2VybmVsLCBiZSBzdXJlIHRvIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBsaW5lIGluIHlvdXIKK2xvY2FsLmNvbmYsIGJibGF5ZXJzLmNvbmYsIG9yIHlvdXIgJE1BQ0hJTkUuY29uZi4KKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID0gImxpbnV4LXlvY3RvLXJ0IgorCitJZiB5b3UgYXJlIGNyZWF0aW5nIGEgbmV3IEJTUCB3aGljaCBzaG91bGQgdXNlIGxpbnV4LXlvY3RvLXJ0IGJ5IGRlZmF1bHQsCit1c2UgdGhlIGxpbmUgYWJvdmUgaW4gdGhlICRNQUNISU5FLmNvbmYgaW4geW91ciBCU1AgbGF5ZXIsIGFuZCBzcGVjaWZ5IHRoZQorZm9sbG93aW5nIGluIGEgbGludXgteW9jdG8tcnQgYmJhcHBlbmQgcmVjaXBlOgorCitDT01QQVRJQkxFX01BQ0hJTkVfJE1BQ0hJTkUgPSAkTUFDSElORQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQtc2RrLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQtc2RrLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiN2Q1ODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9pbWFnZXMvY29yZS1pbWFnZS1ydC1zZGsuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSByZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC5iYgorCitERVNDUklQVElPTiA9ICJTbWFsbCBpbWFnZSBjYXBhYmxlIG9mIGJvb3RpbmcgYSBkZXZpY2Ugd2l0aCBhIHRlc3Qgc3VpdGUgYW5kIFwKK3Rvb2xzIGZvciByZWFsLXRpbWUgdXNlLiBJdCBpbmNsdWRlcyB0aGUgZnVsbCBtZXRhLXRvb2xjaGFpbiwgZGV2ZWxvcG1lbnQgXAoraGVhZGVycyBhbmQgbGlicmFyaWVzIHRvIGZvcm0gYSBzdGFuZGFsb25lIFNESy4iCitERVBFTkRTID0gImxpbnV4LXlvY3RvLXJ0IgorCitJTUFHRV9GRUFUVVJFUyArPSAiZGV2LXBrZ3MgdG9vbHMtc2RrIHRvb2xzLWRlYnVnIGVjbGlwc2UtZGVidWcgdG9vbHMtcHJvZmlsZSB0b29scy10ZXN0YXBwcyBkZWJ1Zy10d2Vha3MiCisKK0lNQUdFX0lOU1RBTEwgKz0gInJ0LXRlc3RzIGh3bGF0ZGV0ZWN0IGtlcm5lbC1kZXYiCisKK0xJQ0VOU0UgPSAiTUlUIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9pbWFnZXMvY29yZS1pbWFnZS1ydC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWI2ZjhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIHJlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiCisKK0RFU0NSSVBUSU9OID0gIkEgc21hbGwgaW1hZ2UganVzdCBjYXBhYmxlIG9mIGFsbG93aW5nIGEgZGV2aWNlIHRvIGJvb3QgcGx1cyBhIFwKK3JlYWwtdGltZSB0ZXN0IHN1aXRlIGFuZCB0b29scyBhcHByb3ByaWF0ZSBmb3IgcmVhbC10aW1lIHVzZS4iCitERVBFTkRTID0gImxpbnV4LXlvY3RvLXJ0IgorCitJTUFHRV9JTlNUQUxMICs9ICJydC10ZXN0cyBod2xhdGRldGVjdCIKKworTElDRU5TRSA9ICJNSVQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy8wMDAxLXJ0LXRlc3RzLUFsbG93LWZvci11c2VyLXNwZWNpZmllZC1QWUxJQi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzLzAwMDEtcnQtdGVzdHMtQWxsb3ctZm9yLXVzZXItc3BlY2lmaWVkLVBZTElCLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNDkzZWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy8wMDAxLXJ0LXRlc3RzLUFsbG93LWZvci11c2VyLXNwZWNpZmllZC1QWUxJQi5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDY2NzY1NTIyYjYzNDk1MjM0NmYxYTNhYjdkMDBjNzIyMmExZjkzNjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitNZXNzYWdlLUlkOiA8NjY3NjU1MjJiNjM0OTUyMzQ2ZjFhM2FiN2QwMGM3MjIyYTFmOTM2MS4xMzQ3NDE5NTk3LmdpdC5kdmhhcnRAbGludXguaW50ZWwuY29tPgorRnJvbTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUdWUsIDExIFNlcCAyMDEyIDE1OjE5OjMwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBydC10ZXN0czogQWxsb3cgZm9yIHVzZXItc3BlY2lmaWVkIFBZTElCCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK0FsbG93IHVzZXJzIChidWlsZCBzeXN0ZW1zKSB0byBzcGVjaWZ5IFBZTElCLiBUaGlzIGFsbG93cyBmb3IgYQorY3Jvc3MtYnVpbGQtc3lzdGVtIHRvIHNwZWNpZnkgdGhlIHRhcmdldCBQWUxJQiByYXRoZXIgdGhhbiB0aGUgaG9zdAorUFlMSUIuCisKK1NpZ25lZC1vZmYtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorQ0M6IENsYXJrIFdpbGxpYW1zIDx3aWxsaWFtc0ByZWRoYXQuY29tPgorQ0M6IEpvaG4gS2FjdXIgPGprYWN1ckByZWRoYXQuY29tPgorLS0tCisgTWFrZWZpbGUgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCAzYTgyNDA3Li42MWUyZjlmIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMjMsNyArMjMsNyBAQCBlbmRpZgorIENGTEFHUyA/PSAtRF9HTlVfU09VUkNFIC1XYWxsIC1Xbm8tbm9ubnVsbCAtSXNyYy9pbmNsdWRlCisgTERGTEFHUyA/PQorIAorLVBZTElCICA6PSAkKHNoZWxsIHB5dGhvbiAtYyAnaW1wb3J0IGRpc3R1dGlscy5zeXNjb25maWc7ICBwcmludCBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKCknKQorK1BZTElCICA/PSAkKHNoZWxsIHB5dGhvbiAtYyAnaW1wb3J0IGRpc3R1dGlscy5zeXNjb25maWc7ICBwcmludCBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKCknKQorIAorIGlmbmRlZiBERUJVRworIAlDRkxBR1MJKz0gLU8yCistLSAKKzEuNy4xMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzLzAwMDItcnQtdGVzdHMtQnJlYWstb3V0LWluc3RhbGxfaHdsYXRkZXRlY3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy8wMDAyLXJ0LXRlc3RzLUJyZWFrLW91dC1pbnN0YWxsX2h3bGF0ZGV0ZWN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNjEzNmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy8wMDAyLXJ0LXRlc3RzLUJyZWFrLW91dC1pbnN0YWxsX2h3bGF0ZGV0ZWN0LnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK0Zyb20gYWY5M2U1ODBkMDA1YTJiYmE2ZWQzNjUyODAwM2FmNGNmNjMxYWRiOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK01lc3NhZ2UtSWQ6IDxhZjkzZTU4MGQwMDVhMmJiYTZlZDM2NTI4MDAzYWY0Y2Y2MzFhZGI4LjEzNDc0MTk1OTcuZ2l0LmR2aGFydEBsaW51eC5pbnRlbC5jb20+CitJbi1SZXBseS1UbzogPDY2NzY1NTIyYjYzNDk1MjM0NmYxYTNhYjdkMDBjNzIyMmExZjkzNjEuMTM0NzQxOTU5Ny5naXQuZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KK1JlZmVyZW5jZXM6IDw2Njc2NTUyMmI2MzQ5NTIzNDZmMWEzYWI3ZDAwYzcyMjJhMWY5MzYxLjEzNDc0MTk1OTcuZ2l0LmR2aGFydEBsaW51eC5pbnRlbC5jb20+CitGcm9tOiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMTEgU2VwIDIwMTIgMTQ6NTE6MTAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIHJ0LXRlc3RzOiBCcmVhayBvdXQgaW5zdGFsbF9od2xhdGRldGVjdAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitBbGxvdyBod2xhdGRldGVjdCB0byBiZSBpbnN0YWxsZWQgaW5kZXBlbmRlbnRseSBvZiB0aGUgcmVzdCBvZiB0aGUKK3Rlc3RzLiBUaGlzIGlzIGNvbnZlbmllbnQgZm9yIGJ1aWxkIHN5c3RlbXMgdGhhdCBwYWNrYWdlIGl0IHNlcGFyYXRlbHkKK2R1ZSB0byB0aGUgcHl0aG9uIGRlcGVuZGVuY3kuCisKK1NpZ25lZC1vZmYtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorQ0M6IENsYXJrIFdpbGxpYW1zIDx3aWxsaWFtc0ByZWRoYXQuY29tPgorQ0M6IEpvaG4gS2FjdXIgPGprYWN1ckByZWRoYXQuY29tPgorLS0tCisgTWFrZWZpbGUgfCAxOCArKysrKysrKysrKy0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDYxZTJmOWYuLjYzNmU2M2IgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0xMTksMjEgKzExOSwxNSBAQCBjaGFuZ2Vsb2c6CisgCWdpdCBsb2cgPkNoYW5nZUxvZworIAorIC5QSE9OWTogaW5zdGFsbAorLWluc3RhbGw6IGFsbAorK2luc3RhbGw6IGFsbCBpbnN0YWxsX2h3bGF0ZGV0ZWN0CisgCW1rZGlyIC1wICIkKERFU1RESVIpJChiaW5kaXIpIiAiJChERVNURElSKSQobWFuZGlyKS9tYW40IgorIAlta2RpciAtcCAiJChERVNURElSKSQoc3JjZGlyKSIgIiQoREVTVERJUikkKG1hbmRpcikvbWFuOCIKKyAJY3AgJChUQVJHRVRTKSAiJChERVNURElSKSQoYmluZGlyKSIKKy0JaWYgdGVzdCAtbiAiJChQWUxJQikiIDsgdGhlbiBcCistCQlpbnN0YWxsIC1EIC1tIDc1NSBzcmMvaHdsYXRkZXRlY3QvaHdsYXRkZXRlY3QucHkgJChERVNURElSKSQoUFlMSUIpL2h3bGF0ZGV0ZWN0LnB5IDsgXAorLQkJcm0gLWYgIiQoREVTVERJUikkKGJpbmRpcikvaHdsYXRkZXRlY3QiIDsgXAorLQkJbG4gLXMgJChQWUxJQikvaHdsYXRkZXRlY3QucHkgIiQoREVTVERJUikkKGJpbmRpcikvaHdsYXRkZXRlY3QiIDsgXAorLQlmaQorIAlpbnN0YWxsIC1EIC1tIDY0NCBzcmMvYmFja2ZpcmUvYmFja2ZpcmUuYyAiJChERVNURElSKSQoc3JjZGlyKS9iYWNrZmlyZS9iYWNrZmlyZS5jIgorIAlpbnN0YWxsIC1tIDY0NCBzcmMvYmFja2ZpcmUvTWFrZWZpbGUgIiQoREVTVERJUikkKHNyY2RpcikvYmFja2ZpcmUvTWFrZWZpbGUiCisgCWd6aXAgc3JjL2JhY2tmaXJlL2JhY2tmaXJlLjQgLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjQvYmFja2ZpcmUuNC5neiIKKyAJZ3ppcCBzcmMvY3ljbGljdGVzdC9jeWNsaWN0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvY3ljbGljdGVzdC44Lmd6IgorIAlnemlwIHNyYy9waV90ZXN0cy9waV9zdHJlc3MuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9waV9zdHJlc3MuOC5neiIKKy0JZ3ppcCBzcmMvaHdsYXRkZXRlY3QvaHdsYXRkZXRlY3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9od2xhdGRldGVjdC44Lmd6IgorIAlnemlwIHNyYy9wdHNlbWF0ZXN0L3B0c2VtYXRlc3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9wdHNlbWF0ZXN0LjguZ3oiCisgCWd6aXAgc3JjL3NpZ3dhaXR0ZXN0L3NpZ3dhaXR0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvc2lnd2FpdHRlc3QuOC5neiIKKyAJZ3ppcCBzcmMvc3ZzZW1hdGVzdC9zdnNlbWF0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvc3ZzZW1hdGVzdC44Lmd6IgorQEAgLTE0MSw2ICsxMzUsMTYgQEAgaW5zdGFsbDogYWxsCisgCWd6aXAgc3JjL2JhY2tmaXJlL3NlbmRtZS44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3NlbmRtZS44Lmd6IgorIAlnemlwIHNyYy9oYWNrYmVuY2gvaGFja2JlbmNoLjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvaGFja2JlbmNoLjguZ3oiCisgCisrLlBIT05ZOiBpbnN0YWxsX2h3bGF0ZGV0ZWN0CisraW5zdGFsbF9od2xhdGRldGVjdDogaHdsYXRkZXRlY3QKKysJaWYgdGVzdCAtbiAiJChQWUxJQikiIDsgdGhlbiBcCisrCQlta2RpciAtcCAiJChERVNURElSKSQoYmluZGlyKSIgIiQoREVTVERJUikkKG1hbmRpcikvbWFuOCIgOyBcCisrCQlpbnN0YWxsIC1EIC1tIDc1NSBzcmMvaHdsYXRkZXRlY3QvaHdsYXRkZXRlY3QucHkgJChERVNURElSKSQoUFlMSUIpL2h3bGF0ZGV0ZWN0LnB5IDsgXAorKwkJcm0gLWYgIiQoREVTVERJUikkKGJpbmRpcikvaHdsYXRkZXRlY3QiIDsgXAorKwkJbG4gLXMgJChQWUxJQikvaHdsYXRkZXRlY3QucHkgIiQoREVTVERJUikkKGJpbmRpcikvaHdsYXRkZXRlY3QiIDsgXAorKwkJZ3ppcCBzcmMvaHdsYXRkZXRlY3QvaHdsYXRkZXRlY3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9od2xhdGRldGVjdC44Lmd6IiA7IFwKKysJZmkKKysKKyAuUEhPTlk6IHJlbGVhc2UKKyByZWxlYXNlOiBjbGVhbiBjaGFuZ2Vsb2cKKyAJbWtkaXIgLXAgcmVsZWFzZXMKKy0tIAorMS43LjExLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvTWFrZWZpbGUtZml4LWd6aXAtY29tbWFuZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL01ha2VmaWxlLWZpeC1nemlwLWNvbW1hbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEzNWRkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL01ha2VmaWxlLWZpeC1nemlwLWNvbW1hbmQucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSAwN2I1ZWQ0MmQ3MDQxY2NjMDg0ODg5ZWFhOTY4MTdhYTA5N2JmNDYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDMgRmViIDIwMTUgMDM6MTA6MjUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGU6IGZpeCBnemlwIGNvbW1hbmQKKworVGhlICItYyIgZG9lc24ndCB3b3JrIGluIGNvbW1hbmQgImd6aXAgZmlsZSAtYyIsIG5lZWQgdXNlICJnemlwIC1jIGZpbGUiCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggMjE5YTU5MS4uYzdkMTQ3YSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTE0NCw3ICsxNDQsNyBAQCBpbnN0YWxsX2h3bGF0ZGV0ZWN0OiBod2xhdGRldGVjdAorIAkJaW5zdGFsbCAtRCAtbSA3NTUgc3JjL2h3bGF0ZGV0ZWN0L2h3bGF0ZGV0ZWN0LnB5ICQoREVTVERJUikkKFBZTElCKS9od2xhdGRldGVjdC5weSA7IFwKKyAJCXJtIC1mICIkKERFU1RESVIpJChiaW5kaXIpL2h3bGF0ZGV0ZWN0IiA7IFwKKyAJCWxuIC1zICQoUFlMSUIpL2h3bGF0ZGV0ZWN0LnB5ICIkKERFU1RESVIpJChiaW5kaXIpL2h3bGF0ZGV0ZWN0IiA7IFwKKy0JCWd6aXAgc3JjL2h3bGF0ZGV0ZWN0L2h3bGF0ZGV0ZWN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvaHdsYXRkZXRlY3QuOC5neiIgOyBcCisrCQlnemlwIC1jIHNyYy9od2xhdGRldGVjdC9od2xhdGRldGVjdC44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2h3bGF0ZGV0ZWN0LjguZ3oiIDsgXAorIAlmaQorIAorIC5QSE9OWTogcmVsZWFzZQorLS0gCisyLjAuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9maXgtcmUtaW5zdGFsbC1mYWlsdXJlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvZml4LXJlLWluc3RhbGwtZmFpbHVyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzhlYzkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvZml4LXJlLWluc3RhbGwtZmFpbHVyZS5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitDdXJyZW50bHkgZ3ppcCBvbiBob3N0IGlzIHVzZWQuIElmIGhvc3QgZ3ppcCBpcyBwcm92aWRlZCBieSBwaWd6LCBpdCBmYWlscyB0bworcmVkbyBpbnN0YWxsIHRoYXQgcGlneiBjYW4ndCBoYW5kbGUgdGhlIG9wdGlvbiBhZnRlciBmaWxlIG5hbWUuIFdoZW4gcnVuOgorCitnemlwIHNyYy9iYWNrZmlyZS9iYWNrZmlyZS40IC1jID4gT1VUUFVUX0ZJTEUKKworRmlsZSBzcmMvYmFja2ZpcmUvYmFja2ZpcmUuNCBpcyB6aXBwZWQgaW50byBiYWNrZmlyZS40Lmd6IGJ1dCB0aGUgT1VUUFVUX0ZJTEUKK2lzIGVtcHR5LiBXaGVuIHJlcnVuIGRvX2luc3RhbGwsIGl0IHNob3dzIHdhcm5pbmc6CisKK3wgZ3ppcDogc3JjL2JhY2tmaXJlL2JhY2tmaXJlLjQgZG9lcyBub3QgZXhpc3QgLS0gc2tpcHBpbmcKKworYW5kIGVtcHR5IG1hbnVhbCBnemlwIGZpbGVzIGFyZSBjcmVhdGVkOgorCiskIGZpbGUgaW1hZ2UvdXNyL3NoYXJlL21hbi9tYW40L2JhY2tmaXJlLjQuZ3oKK2ltYWdlL3Vzci9zaGFyZS9tYW4vbWFuNC9iYWNrZmlyZS40Lmd6OiBlbXB0eQorCitGaXggaXQgYnkgcHV0dGluZyBvcHRpb24gJy1jJyBiZWZvcmUgdGhlIGZpbGUgbmFtZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCistLS0gZ2l0L01ha2VmaWxlLm9yaWcJMjAxNC0xMS0xNCAxNTo0NzoyNi40MDY2Mzg0MTkgKzA4MDAKKysrKyBnaXQvTWFrZWZpbGUJMjAxNC0xMS0xNCAxNTo0Njo1My44OTA2Mzc1MzMgKzA4MDAKK0BAIC0xMjcsMTUgKzEyNywxNSBAQAorIAljcCAkKFRBUkdFVFMpICIkKERFU1RESVIpJChiaW5kaXIpIgorIAlpbnN0YWxsIC1EIC1tIDY0NCBzcmMvYmFja2ZpcmUvYmFja2ZpcmUuYyAiJChERVNURElSKSQoc3JjZGlyKS9iYWNrZmlyZS9iYWNrZmlyZS5jIgorIAlpbnN0YWxsIC1tIDY0NCBzcmMvYmFja2ZpcmUvTWFrZWZpbGUgIiQoREVTVERJUikkKHNyY2RpcikvYmFja2ZpcmUvTWFrZWZpbGUiCistCWd6aXAgc3JjL2JhY2tmaXJlL2JhY2tmaXJlLjQgLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjQvYmFja2ZpcmUuNC5neiIKKy0JZ3ppcCBzcmMvY3ljbGljdGVzdC9jeWNsaWN0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvY3ljbGljdGVzdC44Lmd6IgorLQlnemlwIHNyYy9waV90ZXN0cy9waV9zdHJlc3MuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9waV9zdHJlc3MuOC5neiIKKy0JZ3ppcCBzcmMvcHRzZW1hdGVzdC9wdHNlbWF0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcHRzZW1hdGVzdC44Lmd6IgorLQlnemlwIHNyYy9zaWd3YWl0dGVzdC9zaWd3YWl0dGVzdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3NpZ3dhaXR0ZXN0LjguZ3oiCistCWd6aXAgc3JjL3N2c2VtYXRlc3Qvc3ZzZW1hdGVzdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3N2c2VtYXRlc3QuOC5neiIKKy0JZ3ppcCBzcmMvcG1xdGVzdC9wbXF0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcG1xdGVzdC44Lmd6IgorLQlnemlwIHNyYy9iYWNrZmlyZS9zZW5kbWUuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9zZW5kbWUuOC5neiIKKy0JZ3ppcCBzcmMvaGFja2JlbmNoL2hhY2tiZW5jaC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2hhY2tiZW5jaC44Lmd6IgorKwlnemlwIC1jIHNyYy9iYWNrZmlyZS9iYWNrZmlyZS40ID4iJChERVNURElSKSQobWFuZGlyKS9tYW40L2JhY2tmaXJlLjQuZ3oiCisrCWd6aXAgLWMgc3JjL2N5Y2xpY3Rlc3QvY3ljbGljdGVzdC44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2N5Y2xpY3Rlc3QuOC5neiIKKysJZ3ppcCAtYyBzcmMvcGlfdGVzdHMvcGlfc3RyZXNzLjggPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcGlfc3RyZXNzLjguZ3oiCisrCWd6aXAgLWMgc3JjL3B0c2VtYXRlc3QvcHRzZW1hdGVzdC44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3B0c2VtYXRlc3QuOC5neiIKKysJZ3ppcCAtYyBzcmMvc2lnd2FpdHRlc3Qvc2lnd2FpdHRlc3QuOCA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9zaWd3YWl0dGVzdC44Lmd6IgorKwlnemlwIC1jIHNyYy9zdnNlbWF0ZXN0L3N2c2VtYXRlc3QuOCA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9zdnNlbWF0ZXN0LjguZ3oiCisrCWd6aXAgLWMgc3JjL3BtcXRlc3QvcG1xdGVzdC44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3BtcXRlc3QuOC5neiIKKysJZ3ppcCAtYyBzcmMvYmFja2ZpcmUvc2VuZG1lLjggPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvc2VuZG1lLjguZ3oiCisrCWd6aXAgLWMgc3JjL2hhY2tiZW5jaC9oYWNrYmVuY2guOCA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9oYWNrYmVuY2guOC5neiIKKyAKKyAuUEhPTlk6IGluc3RhbGxfaHdsYXRkZXRlY3QKKyBpbnN0YWxsX2h3bGF0ZGV0ZWN0OiBod2xhdGRldGVjdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvaGFja2JlbmNoLWZpeC1lcnJvci1jaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL2hhY2tiZW5jaC1maXgtZXJyb3ItY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE3ZmRmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL2hhY2tiZW5jaC1maXgtZXJyb3ItY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorY2hpbGRpbmZvX3QgaXMgYSB1bmlvbiB0aGF0IGNvbnRhaW5zIGJvdGggc2lnbmVkIChlcnJvcikgYW5kIHVuc2lnbmVkCisodGhyZWFkaWQpIG1lbWJlcnMuIFRodXMgYSBsYXJnZSB0aHJlYWRpZCBjb3VsZCBhcHBlYXIgYXMgYSBuZWdhdGl2ZSBlcnJvcgordmFsdWUsIHdoaWNoIHdpbGwgY2F1c2UgdW5leHBlY3RlZCBmYWlsdXJlcy4KKworY2hpbGRpbmZvX3Qgc2hvdWxkIGJlIGNoYW5nZWQgdG8gYSBzdHJ1Y3QsIGJ1dCBpdCBjb3VsZCBwb3RlbnRpYWxseSBhZmZlY3QgdGhlCitwZXJmb3JtYW5jZS4gU28gd2Uga2VlcCBpdCBhcyBhIHVuaW9uIGJ1dCBvbmx5IGNoZWNrIGVycm9yIGFnYWluc3QgLTEuIFRoZXJlIGlzCitzdGlsbCBhIGNoYW5jZSBvZiBmYWxzZSBhbGFybSBidXQgaXQncyBzbWFsbC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcuTGkgPFNvbmcuTGlAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEplc3NlIFpoYW5nIDxzZW4uemhhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9oYWNrYmVuY2gvaGFja2JlbmNoLmMgfCAgICA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2hhY2tiZW5jaC9oYWNrYmVuY2guYyBiL3NyYy9oYWNrYmVuY2gvaGFja2JlbmNoLmMKK2luZGV4IDhiYWViMjMuLmRjMGRlOGYgMTAwNjQ0CistLS0gYS9zcmMvaGFja2JlbmNoL2hhY2tiZW5jaC5jCisrKysgYi9zcmMvaGFja2JlbmNoL2hhY2tiZW5jaC5jCitAQCAtMzE3LDcgKzMxNyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ3JvdXAoY2hpbGRpbmZvX3QgKmNoaWxkLAorIAkJY3R4LT53YWtlZmQgPSB3YWtlZmQ7CisgCisgCQljaGlsZFt0YWJfb2Zmc2V0K2ldID0gY3JlYXRlX3dvcmtlcihjdHgsICh2b2lkICopKHZvaWQgKilyZWNlaXZlcik7CistCQlpZiggY2hpbGRbdGFiX29mZnNldCtpXS5lcnJvciA8IDAgKSB7CisrCQlpZiggY2hpbGRbdGFiX29mZnNldCtpXS5lcnJvciA9PSAtMSApIHsKKyAJCQlyZXR1cm4gKGkgPiAwID8gaS0xIDogMCk7CisgCQl9CisgCQlzbmRfY3R4LT5vdXRfZmRzW2ldID0gZmRzWzFdOworQEAgLTMzMiw3ICszMzIsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdyb3VwKGNoaWxkaW5mb190ICpjaGlsZCwKKyAJCXNuZF9jdHgtPm51bV9mZHMgPSBudW1fZmRzOworIAorIAkJY2hpbGRbdGFiX29mZnNldCtudW1fZmRzK2ldID0gY3JlYXRlX3dvcmtlcihzbmRfY3R4LCAodm9pZCAqKSh2b2lkICopc2VuZGVyKTsKKy0JCWlmKCBjaGlsZFt0YWJfb2Zmc2V0K251bV9mZHMraV0uZXJyb3IgPCAwICkgeworKwkJaWYoIGNoaWxkW3RhYl9vZmZzZXQrbnVtX2ZkcytpXS5lcnJvciA9PSAtMSApIHsKKyAJCQlyZXR1cm4gKG51bV9mZHMraSktMTsKKyAJCX0KKyAJfQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J0X2JtYXJrLnB5IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvcnRfYm1hcmsucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTIyODBlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J0X2JtYXJrLnB5CkBAIC0wLDAgKzEsNDEyIEBACisjIS91c3IvYmluL3B5dGhvbgorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKworIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogICAgIEJTRC0zLUNsYXVzZQorIyBDb3B5cmlnaHQgKEMpIDIwMTUgRW5lYSBTb2Z0d2FyZSBBQgorIyBBdXRob3I6IFRob21hcyBMdW5kc3Ryw7ZtIDx0aG9tYXMubHVuZHN0cm9tQGVuZWEuY29tPgorCisjIFRoZSBzY3JpcHQgbWVhc3VyZXMgaW50ZXJydXB0IGxhdGVuY3kgdG9nZXRoZXIgd2l0aCBkaWZmZXJlbnQgdHlwZXMgb2YKKyMgc3lzdGVtIGxvYWQuIFRoaXMgaXMgZG9uZSB1c2luZyB0aGUgcHJvZ3JhbXMgY3ljbGljdGVzdCBhbmQgc3RyZXNzLgorIworIyBUaGUgbWFpbiBvdXRwdXQgaXM6CisjCisjICAgQmVzdCBjYXNlIChtaW4pIGxhdGVuY3kKKyMgICAgIFRoaXMgaGFzIHZlcnkgbGltaXRlZCB2YWx1ZSwgYnV0IGlzIHByZXNlbnRlZCBzaW5jZSBpdCBjYW4gYmUgZG9uZQorIyAgICAgZWFzaWx5CisjCisjICAgQXZlcmFnZSBsYXRlbmN5CisjICAgICBUaGlzIHZhbHVlIGlzIG9mIGludGVycmVzdCBmb3IgdGhyb3VnaHB1dCBvcmllbnRlZCBzeXN0ZW1zLiBMaW1pdGVkCisjICAgICB2YWx1ZSBmb3IgYSByZWFsLXRpbWUgc3lzdGVtLiBBbHNvIHByZXNlbnRlZCBiZWNhdXNlIGl0IGlzIGVhc3kgdG8gZG8uCisjCisjICAgV29yc3QgY2FzZSAobWF4KSBsYXRlbmN5CisjICAgICBUaGlzIGlzIHRoZSBpbnRlcmVzdGluZyBudW1iZXIgZm9yIGEgcmVhbC10aW1lIHN5c3RlbS4gVGhlIG51bWJlcgorIyAgICAgcHJlc2VudGVkIGlzIChvZiBjb3VyY2UpIHRoZSBsYXJnZXN0IG51bWJlciBvYnNlcnZlZC4gVGhlIGNoYWxsZW5nZQorIyAgICAgaXMgdG8ga25vdyBob3cgdGhlIG9ic2VydmVkIHdvcnN0IGNhc2UgcmVsYXRlcyB0byB0aGUgYWN0dWFsIHdvcnN0IGNhc2UuCisjCisjICAgICBUbyBnZXQgYW4gaW5kaWNhdGlvbiBvZiB0aGUgY29uZmlkZW5jZSwgdGhlIGZvbGxvd2luZyBtZXRob2QgaXMgdXNlZDoKKyMgICAgIDEpIEluc3RlYWQgb2Ygb25lIGxvbmcgcnVuLCB0aGUgbWVhc3VyZW1lbnQgaXMgbWFkZSBhcyBhIHNldCBvZiBzaG9ydGVyCisjICAgICAgICBydW5zLiBUaGUgbnVtYmVyIG9mIHJ1bnMgbXVzdCBiZSBhIHBvd2VyIG9mIDIgZm9yIHJlYXNvbnMgdGhhdCB3aWxsCisjICAgICAgICBzaG9ybHR5IGJlIG9idmlvdXMKKyMKKyMgICAgIDIpIEZpcnN0LCBhIGxpc3Qgb2YgdGhlIG1heCB2YWx1ZXMgYXJlIGNyZWF0ZWQuCisjCisjICAgICAzKSBUaGUgc21hbGxlc3QgdmFsdWUgaW4gdGhhdCBsaXN0IGlzIHJlY29yZGVkLgorIworIyAgICAgNCkgVGhlbiBhIG5ldyBsaXN0IGlzIGNyZWF0ZSBieSB0YWtpbmcgdGhlIG1heCB2YWx1ZSBvZiBlYWNoIHBhaXIgb2YKKyMgICAgICAgIHZhbHVlcyBpbiB0aGUgb3JpZ2luYWwgbGlzdC4gSW4gdGhpcyBsaXN0IHRoZSBzbWFsbGVzdCB2YWx1ZSBpcworIyAgICAgICAgcmVjb3JkZWQuCisjCisjICAgICA1KSBTdGVwIDMgaXMgcmVwZWF0ZWQgdW50aWwgdGhlcmUgaXMgb25seSBvbmUgdmFsdWUgaW4gdGhlIGxpc3QuIFNlZQorIyAgICAgICAgZXhhbXBsZSBiZWxvdzoKKyMKKyMgICAgICAgIFNhbXBsZXM6CisjICAgICAgICAgIHwgIDQ0IHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAgNzcgfCAgNzcgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8IDExOCB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTE5IHwgMTE5IHwgMTE5IHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxMzggfCAgICAgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8ICA1NyB8IDEzOCB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTc1IHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxMzAgfCAxNzUgfCAxNzUgfCAxNzUgfCAgICAgfAorIyAgICAgICAgICB8ICA1NCB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTUwIHwgMTUwIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAgNDcgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8ICA1OSB8ICA1OSB8IDE1MCB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTk5IHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxMTUgfCAxOTkgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8IDE3NyB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTI5IHwgMTc3IHwgMTk5IHwgMTk5IHwgMTk5IHwKKyMKKyMgICAgICAgIFNtYWxsZXN0IHZhbHVlOgorIyAgICAgICAgICB8ICA0NCB8ICA1OSB8IDExOSB8IDE3NSB8IDE5OSB8CisjCisjICAgICA2KSBUaGUgZ2VuZXJhdGVkIGxpc3Qgb2Ygc21hbGxlc3QgdmFsdWVzIGlzIGFuYWx5emVkLiBJbiB0aGlzIGNhc2UsIGl0CisjICAgICAgICBjYW4gYmUgb2JzZXJ2ZWQgdGhhdCB0aGUgdmFsdWVzIGFyZSBpbmNyZWFzaW5nIHNpZ25pZmljYW50bHkgdGhyb3VnaAorIyAgICAgICAgdGhlIGVudGlyZSBsaXN0LCB3aGljaCBsZWFkcyB0byB0aGUgY29uY2x1c2lvbiB0aGF0IHRoZSBudW1iZXIgb2YKKyMgICAgICAgIHNhbXBsZXMgaXMgdG9vIHNtYWxsLgorIyAgICAgICAgSWYgaW5zdGVhZCB0aGUgbGlzdCBoYWQgYmVlbiAoMTY3LCAxOTEsIDE5NiwgMTk5LCAxOTkpLCB0aGVyZSBoYWQKKyMgICAgICAgIGJlZW4gYSB2ZXJ5IHNtYWxsLCBvciBubywgaW5jcmVhc2UgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdC4gV2UgbWlnaHQKKyMgICAgICAgIHRoZW4gc3VzcGVjdCB0aGF0IHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBpcyBwcm9iYWJseSBsYXJnZSBlbm91Z2guCisjICAgICAgICBUaGVyZSBpcyBob3dldmVyIG5vIGd1YXJhbnRlZSBmb3IgdGhhdC4KKyMKKyMgICAgIFN0ZXBzIDEtMiBhcmUgZG9uZSBpbiBydW5fY3ljbGljdGVzdF9zdWl0ZQorIyAgICAgU3RlcHMgMy01IGFyZSBkb25lIGluIGdlbl9taW5tYXhfbGlzdC4KKyMgICAgIFN0ZXAgNiBuZWVkcyB0byBiZSBkb25lIG1hbnVhbGx5IHNpbmNlIHRoZXJlIGlzICh5ZXQpIG5vIHdlbGwgZGVmaW5lZAorIyAgICAgRkFJTCBjcml0ZXJpb24gYW5kIGEgdGhlb3JldGljYWxseSBzb2xpZCBQQVNTIGNyaXRlcmlvbiBtYXkgbmV2ZXIgYmUKKyMgICAgIGF2YWlsYWJsZS4KKworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGltZQoraW1wb3J0IHRyYWNlYmFjaworCisjIFNlZSBjb21tZW50IG9uIHRoZSBmdW5jdGlvbiBzZXRfaHVuZ190bW8KK2hhc19odW5nX3Rhc2tfZGV0ZWN0aW9uID0gVHJ1ZQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0RmFpbChFeGNlcHRpb24pOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnKToKKyAgICAgICAgICAgICAgICBzZWxmLm1zZyA9IG1zZworCisgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiVGVzdCBmYWlsdXJlOiAoIiArIHNlbGYubXNnICsgIikiCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiB0Y19uYW1lKHN1Yl9uYW1lKToKKyAgICAgICAgcmV0dXJuICJydF9ibWFyay5pbnRsYXQuIiArIHN1Yl9uYW1lCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGxvZygpIGRvZXMgdGhlIHNhbWUgam9iIGFzIHByaW50IGV4Y2VwdCB0aGF0IGEgJyMnIGlzIGFkZGVkIGF0IHRoZSBiZWdpbm5pbmcKKyMgb2YgZWFjaCBsaW5lLiBUaGlzIGNhdXNlcyBURUZFTCB0byBpZ25vcmUgaXQKKworZGVmIGxvZygqbXNnKToKKyAgICAgICAgdG1wID0gIiIuam9pbihtYXAoc3RyLCBtc2cpKSAjICdtYXAoc3RyLCAuLi4nIGFsbG93cyBudW1iZXJzCisgICAgICAgIGZvciBsaW5lIGluIHRtcC5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgICAgICBwcmludCAiIyIsIGxpbmUKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlrZSBsb2coKSwgYnV0IHdpdGggYSB0aW1lc3RhbXAgYWRkZWQKKworZGVmIGxvZ190cygqbXNnKToKKyAgICAgICAgdHMgPSB0aW1lLmxvY2FsdGltZSgpCisgICAgICAgIHN0YW1wID0gIiUyZDolMDJkOiUwMmQ6ICIgJSAodHMudG1faG91ciwgdHMudG1fbWluLCB0cy50bV9zZWMpCisgICAgICAgIGxvZyhzdGFtcCwgKm1zZykKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIGxvZ190ZXN0X2hlYWRlcihzZXFfbm8sIG5yX29mX3Rlc3RzLCBuYW1lKToKKyAgICAgICAgbG9nKCI9IiAqIDc4KQorICAgICAgICBsb2coKQorICAgICAgICBsb2coIiAgVGVzdCBjYXNlICglZC8lZCk6ICVzIiAlIChzZXFfbm8sIG5yX29mX3Rlc3RzLCB0Y19uYW1lKG5hbWUpKSkKKyAgICAgICAgbG9nKCkKKyAgICAgICAgbG9nKCIuIiAqIDc4KQorICAgICAgICBsb2coKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgc3RhcnRfc3RyZXNzKCphcmdzKToKKyAgICAgICAgc3RyZXNzX2NtZCAgICAgICAgID0gWyAic3RyZXNzIiBdCisgICAgICAgIGFkZGVkX3N0cmVzc190eXBlcyA9IFtdCisgICAgICAgIHJlcV9zdHJlc3NfdHlwZXMgICA9IHNldChhcmdzKQorICAgICAgICBjcHVfY250ICAgICAgICAgICAgPSBzdHIobXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpKQorCisgICAgICAgICMgVGhlIGZ1bmN0aW9uIGNvbmRfYWRkX3N0cmVzcyBhcHBlbmRzIHRoZSBvcHRpb25zIHRvIHRoZSBzdHJlc3MKKyAgICAgICAgIyBjb21tYW5kIGlmIHRoZSBzdHJlc3MgdHlwZSBpcyBpbiB0aGUgc2V0IG9mIHJlcXVlc3RlZCBzdHJlc3MgdHlwZXMKKworICAgICAgICBkZWYgY29uZF9hZGRfc3RyZXNzKHN0cmVzc190eXBlLCBvcHRpb25zKToKKyAgICAgICAgICAgICAgICBpZiBzdHJlc3NfdHlwZSBpbiByZXFfc3RyZXNzX3R5cGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVxX3N0cmVzc190eXBlcy5yZW1vdmUoc3RyZXNzX3R5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZF9zdHJlc3NfdHlwZXMuYXBwZW5kKHN0cmVzc190eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXNzX2NtZC5leHRlbmQob3B0aW9ucykKKworICAgICAgICAjLS0tLS0tLS0tLQorCisgICAgICAgIGNvbmRfYWRkX3N0cmVzcygiaW8iLCAgWyItaSIsIGNwdV9jbnRdKQorICAgICAgICBjb25kX2FkZF9zdHJlc3MoImNwdSIsIFsiLWMiLCBjcHVfY250XSkKKyAgICAgICAgY29uZF9hZGRfc3RyZXNzKCJoZGQiLCBbIi1kIiwgY3B1X2NudCwgIi0taGRkLWJ5dGVzIiwgIjIwTSJdKQorICAgICAgICBjb25kX2FkZF9zdHJlc3MoInZtIiwgIFsiLW0iLCBjcHVfY250LCAiLS12bS1ieXRlcyIsICIxME0iXSkKKworICAgICAgICB1bmtub3duID0gIiwgIi5qb2luKHJlcV9zdHJlc3NfdHlwZXMpCisgICAgICAgIGlmIHVua25vd24gIT0gIiI6CisgICAgICAgICAgICByYWlzZSBUZXN0RmFpbCgiVW5rbm93biBzdHJlc3MgdHlwZShzKTogJXMiICUgdW5rbm93bikKKworICAgICAgICBpZiBub3QgYWRkZWRfc3RyZXNzX3R5cGVzOgorICAgICAgICAgICAgICAgIGxvZygiTm8gc3RyZXNzIHJlcXVlc3RlZCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBhZGRlZCAgICAgICAgICA9ICIrIi5qb2luKGFkZGVkX3N0cmVzc190eXBlcykKKyAgICAgICAgc3RyZXNzX2NtZF9zdHIgPSAiICIuam9pbihzdHJlc3NfY21kKQorCisgICAgICAgIGxvZygiU3RhcnRpbmcgc3RyZXNzKCIsIGFkZGVkLCAiKSIpCisgICAgICAgIGxvZygiICBDb21tYW5kOiAnIiwgc3RyZXNzX2NtZF9zdHIsICInIikKKyAgICAgICAgbG9nKCkKKworICAgICAgICAjIHByZWV4ZWNfZm49b3Muc2V0c2lkIGNhdXNlcyBzdHJlc3MgdG8gYmUgZXhlY3V0ZWQgaW4gYSBzZXBhcmF0ZQorICAgICAgICAjIHNlc3Npb24sID0+IGl0IGdldHMgYSBuZXcgcHJvY2VzcyBncm91cCAoaW5jbC4gY2hpbGRyZW4pLiBJdAorICAgICAgICAjIGNhbiB0aGVuIGJlIHRlcm1pbmF0ZWQgdXNpbmcgb3Mua2lsbHBnIGluIGVuZF9zdHJlc3Mgd2l0aG91dAorICAgICAgICAjIHRlcm1pbmF0aW5nIHRoaXMgc2NyaXB0LgorCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKHN0cmVzc19jbWQsIHByZWV4ZWNfZm49b3Muc2V0c2lkKQorCisgICAgICAgIHJldHVybiBwCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBlbmRfc3RyZXNzKHApOgorICAgICAgICBpZiBwIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBUaGUgdmFsdWUgTm9uZSBpbmRpY2F0ZXMgdGhhdCBubyBzdHJlc3Mgc2NlbmFyaW8gd2FzIHN0YXJ0ZWQKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBwLnBvbGwoKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBUZXN0RmFpbCgic3RyZXNzIHByZW1hdHVyZWx5IHRlcm1pbmF0ZWQuIikKKworICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChwLnBpZCksIHNpZ25hbC5TSUdURVJNKQorICAgICAgICBsb2coIlRlcm1pbmF0ZWQgc3RyZXNzIikKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHVzMmhtc19zdHIodXMpOgorICAgICAgICBzID0gKHVzKzUwMDAwMCkgLy8gMTAwMDAwMCAjIFJvdW5kIG1pY3Jvc2Vjb25kcyB0byBzCisgICAgICAgIG0gPSBzLy82MAorICAgICAgICBzIC09IDYwKm07CisgICAgICAgIGggPSBtLy82MAorICAgICAgICBtIC09IDYwKmgKKworICAgICAgICByZXR1cm4gIiVkOiUwMmQ6JTAyZCIgJSAoaCwgbSwgcykKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU29tZXRpbWUgdGhlIGh1bmcgdGFzayBzdXBlcnZpc2lvbiBpcyB0cmlnZ2VyZWQgZHVyaW5nIGV4ZWN1dGlvbiBvZgorIyBjeWNsaWN0ZXN0IChjeWNsaWN0ZXN0IHN0YXJ2ZXMgc3RyZXNzKS4gVG8gYXZvaWQgdGhhdCwgdGhlIHN1cGVydmlzaW9uCisjIGlzIHRlbXBvcmFyaWx5IGRpc2FibGVkCisKK2RlZiBzZXRfaHVuZ190bW8obmV3X3Rtbyk6CisgICAgICAgIGdsb2JhbCBoYXNfaHVuZ190YXNrX2RldGVjdGlvbgorCisgICAgICAgIHRtb19maWxlID0gIi9wcm9jL3N5cy9rZXJuZWwvaHVuZ190YXNrX3RpbWVvdXRfc2VjcyIKKworICAgICAgICBpZiBub3QgaGFzX2h1bmdfdGFza19kZXRlY3Rpb246CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IG9zLmFjY2Vzcyh0bW9fZmlsZSwgb3MuV19PSyk6CisgICAgICAgICAgICAgICAgbG9nKCJIdW5nIHRhc2sgZGV0ZWN0aW9uIG5vdCBzdXBwb3J0ZWQiKQorICAgICAgICAgICAgICAgIGxvZygiICAoRmlsZSAiLCB0bW9fZmlsZSwgIiBub3QgZm91bmQpIikKKyAgICAgICAgICAgICAgICBoYXNfaHVuZ190YXNrX2RldGVjdGlvbiA9IEZhbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgb3JpZ190bW8gPSBpbnQoc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJjYXQiLCB0bW9fZmlsZV0pLnN0cmlwKCkpCisgICAgICAgIGlmIG5ld190bW8gIT0gb3JpZ190bW86CisgICAgICAgICAgICAgICAgY21kID0gKCAiZWNobyAiICsgc3RyKG5ld190bW8pICsgIiA+ICIgKyB0bW9fZmlsZSApCisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgICAgIGxvZygiQ2hhbmdlZCB0aW1lb3V0IGZvciBkZXRlY3Rpb24gb2YgaHVuZyB0YXNrczogIiwKKyAgICAgICAgICAgICAgICAgICAgb3JpZ190bW8sICIgLT4gIiwgbmV3X3RtbykKKworICAgICAgICByZXR1cm4gb3JpZ190bW8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIGdlbl9taW5tYXhfbGlzdChtYXhfbGlzdCk6CisgICAgICAgIHJlcyA9IFttaW4obWF4X2xpc3QpXQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdG1wID0gbWF4X2xpc3QKKyAgICAgICAgICAgICAgICBtYXhfbGlzdCA9IFtdCisgICAgICAgICAgICAgICAgd2hpbGUgdG1wOgorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpc3QuYXBwZW5kKG1heCh0bXAucG9wKDApLCB0bXAucG9wKDApKSkKKworICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQobWluKG1heF9saXN0KSkKKworICAgICAgICAgICAgICAgIGlmIGxlbihtYXhfbGlzdCkgPCAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQYXJhbWV0ZXJzIGZvciBjeWNsaWN0ZXN0OgorIworIyBPbiB0aGUgLVMgb3B0aW9uIChmcm9tIGN5Y2xpY3Rlc3QuYyk6CisjICAtUyBpbXBsaWVzIG9wdGlvbnMgLWEgLXQgLW4gYW5kIHNhbWUgcHJpb3JpdHkgb2YgYWxsIHRocmVhZHMKKyMgICAgLWE6IE9uZSB0aHJlYWQgcGVyIGNvcmUKKyMgICAgLW46IHVzZSBjbG9ja19uYW5vc2xlZXAgaW5zdGVhZCBvZiBwb3NpeCBpbnRlcnZhbCB0aW1lcnMKKyMgICAgLXQ6ICh3aXRob3V0IGFyZ3VtZW50KSBTZXQgbnVtYmVyIG9mIHRocmVhZHMgdG8gdGhlIG51bWJlcgorIyAgICAgICAgIG9mIGNwdXMKKworaW50ZXJ2YWxfY29yZV8wID0gMTAwICAgICAjIFRpbWVyIGludGVydmFsIG9uIGNvcmUgMCBbdXNdCitpbnRlcnZhbF9kZWx0YSAgPSAyMCAgICAgICMgSW50ZXJ2YWwgaW5jcmVtZW50IGZvciBlYWNoIGNvcmUgW3VzXQorbG9vcF9jb3VudCAgICAgID0gMzAwMDAgICAjIE51bWJlciBvZiBsb29wcyAob24gY29yZSAwKS4KKworY21kID0gKCJjeWNsaWN0ZXN0IiwKKyAgICAgICAiLVMiLCAgICAgICAgICAgICAjIFN0YW5kYXJkIFNNUCB0ZXN0aW5nLiBTZWUgYmVsb3cKKyAgICAgICAiLXAiLCAiOTkiLCAgICAgICAjIFJUIHByaW9yaXR5IDk5CisgICAgICAgIi1xIiwgICAgICAgICAgICAgIyBRdWlldCBtb2RlLCBpLmUuIHByaW50IG9ubHkgYSBzdW1tYXJ5CisgICAgICAgIi1pIiwgc3RyKGludGVydmFsX2NvcmVfMCksCisgICAgICAgIi1kIiwgc3RyKGludGVydmFsX2RlbHRhKSwKKyAgICAgICAiLWwiLCBzdHIobG9vcF9jb3VudCkKKyAgICAgICApCityZXggPSByZS5jb21waWxlKCJDOlxzKihcZCspLipNaW46XHMqKFxkKykuKkF2ZzpccyooXGQrKS4qTWF4OlxzKihcZCspIikKKworZGVmIHJ1bl9jeWNsaWN0ZXN0X29uY2UoKToKKyAgICAgICAgcmVzID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kKQorCisgICAgICAgICMgbWlubGlzdCBhbmQgbWF4bGlzdCBhcmUgbGlzdHMgd2l0aCB0aGUgZXh0cmVtZXMgZm9yIGVhY2ggY29yZQorICAgICAgICAjIGF2Z19jbnQgaXMgdGhlIHN1bSBvZiBjeWNsZXMgZm9yIGFsbCBjb3JlcworICAgICAgICAjIGF2Z19zdW0gaXMgdGhlIHN1bSBvZiAoY3ljbGUgY291bnQqYXZlcmFnZSkgZm9yIGVhY2ggY29yZQorICAgICAgICAjICAgICBTaW5jZSBjeWNsaWN0ZXN0IHJ1bnMgZGlmZmVyZW50IG51bWJlciBvZiBjeWNsZXMgb24KKyAgICAgICAgIyAgICAgZGlmZmVyZW50IGNvcmVzLCBhdmdfc3VtL2F2Z19jbnQgZ2l2ZXMgYSBtb3JlIGFjY3VyYXRlCisgICAgICAgICMgICAgIHZhbHVlIG9mIHRoZSBvdmVyYWxsIGF2ZXJhZ2UgdGhhbiBqdXN0IHRha2luZyB0aGUgYXZlcmFnZQorICAgICAgICAjICAgICBvZiBlYWNoIGNvcmUncyBhdmVyYWdlcworCisgICAgICAgIG1pbmxpc3QgPSBbXQorICAgICAgICBtYXhsaXN0ID0gW10KKyAgICAgICAgYXZnX3N1bSA9IDAKKyAgICAgICAgYXZnX2NudCA9IDAKKworICAgICAgICBmb3IgbGluZSBpbiByZXMuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAgICAgbSA9IHJleC5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgbWlubGlzdC5hcHBlbmQoaW50KG0uZ3JvdXAoMikpKQorICAgICAgICAgICAgICAgICAgICAgICAgbWF4bGlzdC5hcHBlbmQoaW50KG0uZ3JvdXAoNCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGludChtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgYXZnX3N1bSArPSBuICogaW50KG0uZ3JvdXAoMykpCisgICAgICAgICAgICAgICAgICAgICAgICBhdmdfY250ICs9IG4KKworICAgICAgICByZXR1cm4gbWluKG1pbmxpc3QpLCBbYXZnX3N1bSwgYXZnX2NudF0sIG1heChtYXhsaXN0KQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBIHByZWNvbmRpdGlvbiBmb3IgdGhlIHRyYWNraW5nIG9mIG1pbi1tYXggdmFsdWVzIGlzIHRoYXQKKyMgdGhlIHN1aXRlIHNpemUgb3MgYSBwb3dlciBvZiAyLgorCitOICAgICAgICAgID0gNQorc3VpdGVfc2l6ZSA9IDIqKk4KKworZXN0X2V4ZWNfdGltZV9vbmNlICA9IGludGVydmFsX2NvcmVfMCAqIGxvb3BfY291bnQKK2VzdF9leGVjX3RpbWVfc3VpdGUgPSBzdWl0ZV9zaXplICogZXN0X2V4ZWNfdGltZV9vbmNlCisKK2RlZiBydW5fY3ljbGljdGVzdF9zdWl0ZSgpOgorICAgICAgICBsb2coIlN0YXJ0aW5nIGN5Y2xpY3Rlc3QiKQorICAgICAgICBsb2coIiAgQ29tbWFuZCAgICAgICAgICA6ICIsICIgIi5qb2luKGNtZCkpCisgICAgICAgIGxvZygiICBOdW1iZXIgb2YgY3ljbGVzIDogIiwgbG9vcF9jb3VudCpzdWl0ZV9zaXplLAorICAgICAgICAgICAgIiAoIiwgc3VpdGVfc2l6ZSwgIiBzZXRzIG9mICIsIGxvb3BfY291bnQsICIgY3ljbGVzKSIpCisgICAgICAgIGxvZygiICBFeGVjLiB0aW1lIChlc3QpIDogIiwgdXMyaG1zX3N0cihlc3RfZXhlY190aW1lX3N1aXRlKSkKKyAgICAgICAgbG9nKCkKKworICAgICAgICBvcmlnX3RtbyA9IHNldF9odW5nX3RtbygwKSAjIDAgPT4gRGlzYWJsZQorCisgICAgICAgICMgZmxvYXQoJ2luZicpIGVtdWxhdGVzIGluZmluaXR5LiBBdCBsZWFzdCBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBpcworICAgICAgICAjIGd1YXJhbnRlZWQgdG8gYmUgbGFyZ2VyIHRoYW4gYW55IGFjdHVhbCBudW1iZXIuCisgICAgICAgIGFja19taW4gPSBmbG9hdCgnaW5mJykKKyAgICAgICAgYWNrX2F2ZyA9IFswLCAwXQorCisgICAgICAgIGxvZygpCisgICAgICAgIGxvZ190cygiU3RhcnQgb2YgZXhlY3V0aW9uIikKKyAgICAgICAgdCA9IHRpbWUudGltZSgpCisgICAgICAgIG1heF9saXN0ID0gW10KKworICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgc3VpdGVfc2l6ZSk6CisgICAgICAgICAgICAgICAgdG1wX21pbiwgdG1wX2F2ZywgdG1wX21heCA9IHJ1bl9jeWNsaWN0ZXN0X29uY2UoKQorCisgICAgICAgICAgICAgICAgbXNnID0gIiUyZC8lMmQ6IiAlIChpKzEsIHN1aXRlX3NpemUpCisgICAgICAgICAgICAgICAgbXNnICs9ICIgbWluOiAlNGQiICUgdG1wX21pbgorICAgICAgICAgICAgICAgIG1zZyArPSAiIGF2ZzogJTUuMWYiICUgKGZsb2F0KHRtcF9hdmdbMF0pL3RtcF9hdmdbMV0pCisgICAgICAgICAgICAgICAgbXNnICs9ICIgbWF4OiAlNGQiICUgdG1wX21heAorICAgICAgICAgICAgICAgIGxvZ190cyhtc2cpCisKKyAgICAgICAgICAgICAgICAjIFRyYWNrIG1pbmltdW0gdmFsdWUKKyAgICAgICAgICAgICAgICBpZiB0bXBfbWluIDwgYWNrX21pbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFja19taW4gPSB0bXBfbWluCisKKyAgICAgICAgICAgICAgICAjIFRyYWNrIHNtYWxsZXN0IG1heCB2YWx1ZQorICAgICAgICAgICAgICAgIG1heF9saXN0LmFwcGVuZCh0bXBfbWF4KQorCisgICAgICAgICAgICAgICAgYWNrX2F2Z1swXSArPSB0bXBfYXZnWzBdCisgICAgICAgICAgICAgICAgYWNrX2F2Z1sxXSArPSB0bXBfYXZnWzFdCisKKyAgICAgICAgdCA9IHRpbWUudGltZSgpLXQKKyAgICAgICAgbG9nX3RzKCJDeWNsaWN0ZXN0IGNvbXBsZXRlZC4gQWN0dWFsIGV4ZWN1dGlvbiB0aW1lOiIsCisgICAgICAgICAgICAgICB1czJobXNfc3RyKHQqMTAwMDAwMCkpCisgICAgICAgIGxvZygpCisgICAgICAgIHNldF9odW5nX3RtbyhvcmlnX3RtbykKKworICAgICAgICByZXR1cm4gYWNrX21pbiwgZmxvYXQoYWNrX2F2Z1swXSkvYWNrX2F2Z1sxXSwgZ2VuX21pbm1heF9saXN0KG1heF9saXN0KQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBjeWNsaWN0ZXN0X3J1bm5lcjoKKyAgICAgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHNlcV9ubywgbnJfb2ZfdGVzdHMsIG5hbWUsIHN0cmVzc3BhcmFtcyk6CisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dfdGVzdF9oZWFkZXIoc2VxX25vLCBucl9vZl90ZXN0cywgbmFtZSkKKworICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHN0YXJ0X3N0cmVzcygqc3RyZXNzcGFyYW1zKQorCisgICAgICAgICAgICAgICAgICAgICAgICBibV9taW4sIGJtX2F2ZywgYm1fbWF4X2xpc3QgPSBydW5fY3ljbGljdGVzdF9zdWl0ZSgpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9zdHJlc3MocCkKKworICAgICAgICAgICAgICAgICAgICAgICAgYm1fbWF4ID0gYm1fbWF4X2xpc3RbLTFdCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIk1pbjogJWQgdXMiICUgYm1fbWluKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJBdmc6ICUuMWYgdXMiICUgYm1fYXZnKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJNYXg6ICVkIHVzIiAlIGJtX21heCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIk1heCBsaXN0OiAiLCBibV9tYXhfbGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIlBBU1MiKQorCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludAorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgdGNfbmFtZShuYW1lKSwgIltNaW4vdXMsQXZnL3VzLE1heC91c106IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIlZCwlLjFmLCVkIiAlIChibV9taW4sYm1fYXZnLCBibV9tYXgpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiUEFTUzoiLCB0Y19uYW1lKG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludAorCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIkV4Y2VwdGlvbiEiKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiVHJhY2ViYWNrOiIsIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJXRDogIiwgb3MuZ2V0Y3dkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJGQUlMIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiRkFJTDoiLCB0Y19uYW1lKG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitydW5uZXIgPSBjeWNsaWN0ZXN0X3J1bm5lcigpCisKK3Rlc3RzID0gKCgibm9fc3RyZXNzIiwgW10pLAorICAgICAgICAgKCJjcHUiLCAgWyJjcHUiXSksCisgICAgICAgICAoImhkZCIsICBbImhkZCJdKSwKKyAgICAgICAgICgiaW8iLCAgIFsiaW8iXSksCisgICAgICAgICAoInZtIiwgICBbInZtIl0pLAorICAgICAgICAgKCJmdWxsIiwgWyJpbyIsICJjcHUiLCAiaGRkIiwgInZtIl0pLAorICAgICAgICAgKQorCitucl9vZl90ZXN0cyA9IGxlbih0ZXN0cykKK2ZvciBzZXFfbm8sIHBhcmFtcyBpbiBlbnVtZXJhdGUodGVzdHMsIHN0YXJ0PTEpOgorICAgICAgICBydW5uZXIucnVuX3Rlc3Qoc2VxX25vLCBucl9vZl90ZXN0cywgKnBhcmFtcykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTZkM2UzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK3B5dGhvbiAuL3J0X2JtYXJrLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9od2xhdGRldGVjdF8wLjkyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvaHdsYXRkZXRlY3RfMC45Mi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzE5ZWI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvaHdsYXRkZXRlY3RfMC45Mi5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkhhcmR3YXJlIGxhdGVuY3kgZGV0ZWN0b3IiCitERVNDUklQVElPTiA9ICJQeXRob24gdXRpbGl0eSBmb3IgY29udHJvbGxpbmcgdGhlIGtlcm5lbCBoYXJkd2FyZSBsYXRlbmN5IGRldGVjdGlvbiBtb2R1bGUgKGh3bGF0X2RldGVjdG9yLmtvKS4iCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvP3A9bGludXgva2VybmVsL2dpdC9jbHJrd2xsbXMvcnQtdGVzdHMuZ2l0IgorU0VDVElPTiA9ICJ0ZXN0cyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworcmVxdWlyZSBydC10ZXN0cy5pbmMKKworRVhUUkFfT0VNQUtFICs9ICJQWUxJQj0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L2Rpc3QtcGFja2FnZXMiCisKK2RvX2NvbXBpbGUoKSB7CisJb2VfcnVubWFrZSBod2xhdGRldGVjdAorfQorCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGxfaHdsYXRkZXRlY3QgREVTVERJUj0ke0R9IFNCSU5ESVI9JHtzYmluZGlyfSBcCisJICAgICAgICAgICBNQU5ESVI9JHttYW5kaXJ9IElOQ0xVREVESVI9JHtpbmNsdWRlZGlyfQorfQorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9kaXN0LXBhY2thZ2VzL2h3bGF0ZGV0ZWN0LnB5IgorUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uIHB5dGhvbi1zdWJwcm9jZXNzIHB5dGhvbi10ZXh0dXRpbHMiCitSUkVDT01NRU5EU18ke1BOfSA9ICJrZXJuZWwtbW9kdWxlLWh3bGF0LWRldGVjdG9yIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MWRiMTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9ydC10ZXN0cy5pbmMKQEAgLTAsMCArMSwxOSBAQAorIyBWZXJzaW9uIHYwLjkyCitQViA9ICIwLjkyIgorU1JDUkVWID0gIjVmOWYxZTNmZTMyNzQ0MGE5ZDQwNWY0YWY4ZmViMTZmZjdhOTA5ZWIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2Nscmt3bGxtcy9ydC10ZXN0cy5naXQgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1ydC10ZXN0cy1BbGxvdy1mb3ItdXNlci1zcGVjaWZpZWQtUFlMSUIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1ydC10ZXN0cy1CcmVhay1vdXQtaW5zdGFsbF9od2xhdGRldGVjdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9oYWNrYmVuY2gtZml4LWVycm9yLWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLWZpeC1nemlwLWNvbW1hbmQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXJlLWluc3RhbGwtZmFpbHVyZS5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKKyMgbmVlZCB0byBhcHBlbmQgcnQtdGVzdHMnIGRlZmF1bHQgQ0ZMQUdTIHRvIG91cnMKK0NGTEFHUyArPSAiLUkke1N9L3NyYy9pbmNsdWRlIC1EX0dOVV9TT1VSQ0UgLVdhbGwgLVduby1ub25udWxsIgorCisjIGNhbGxpbmcgJ3VuYW1lIC1tJyBpcyBicm9rZW4gb24gY3Jvc3NidWlsZHMKK0VYVFJBX09FTUFLRSA9ICJOVU1BPTAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9ydC10ZXN0c18wLjkyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHNfMC45Mi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmUyZjY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHNfMC45Mi5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIlJlYWwtVGltZSBwcmVlbXB0aW9uIHRlc3RjYXNlcyIKK0hPTUVQQUdFID0gImh0dHBzOi8vcnQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9DeWNsaWN0ZXN0IgorU0VDVElPTiA9ICJ0ZXN0cyIKK0RFUEVORFMgPSAibGludXgtbGliYy1oZWFkZXJzIHZpcnR1YWwvbGliYyIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvY3ljbGljdGVzdC9jeWNsaWN0ZXN0LmM7YmVnaW5saW5lPTc7ZW5kbGluZT05O21kNT1lNzY4YjhkYTQ0NTU1ZmU2M2Y2NWU1YzQ5Nzg0NGNiNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcGlfdGVzdHMvcGlfc3RyZXNzLmM7YmVnaW5saW5lPTY7ZW5kbGluZT0xOTttZDU9YmQ0MjZhNjM0YTQzZWM2MTJlOWZiZjEyNWRmY2M5NDkiCisKK3JlcXVpcmUgcnQtdGVzdHMuaW5jCitpbmhlcml0IHB0ZXN0CisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAgZmlsZTovL3J0X2JtYXJrLnB5IFwKKyAgICAgICAgICAgIgorIyBEbyBub3QgaW5zdGFsbCBod2xhdGRldGVjdAorRVhUUkFfT0VNQUtFICs9ICJQWUxJQj0nJyIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBTQklORElSPSR7c2JpbmRpcn0gTUFORElSPSR7bWFuZGlyfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkNMVURFRElSPSR7aW5jbHVkZWRpcn0KK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKyAgICAgICAgY3AgJHtXT1JLRElSfS9ydF9ibWFyay5weSAke0R9JHtQVEVTVF9QQVRIfQorfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiIHN0cmVzcyBweXRob24gcHl0aG9uLXN1YnByb2Nlc3MgcHl0aG9uLW11bHRpcHJvY2Vzc2luZyBweXRob24tZGF0ZXRpbWUgcHl0aG9uLXJlIHB5dGhvbi1sYW5nIgorCitGSUxFU18ke1BOfSArPSAiJHtwcmVmaXh9L3NyYy9iYWNrZmlyZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vZ3RrLWVuZ2luZXMvZ3RrLXNhdG8tZW5naW5lLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vZ3RrLWVuZ2luZXMvZ3RrLXNhdG8tZW5naW5lLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTM3ZmYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9ndGstZW5naW5lcy9ndGstc2F0by1lbmdpbmUuaW5jCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiU2F0byB0aGVtZSBlbmdpbmUgZm9yIEdUSysiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm8taGFuZC5jb20iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSAmIExHUEx2MisiCisKK1NFQ1RJT04gPSAieDExL2Jhc2UiCitERVBFTkRTID0gImd0aysiCitSREVQRU5EU19ndGstdGhlbWUtc2F0byA9ICJndGstc2F0by1lbmdpbmUiCisKK1BBQ0tBR0VTICs9ICJndGstdGhlbWUtc2F0byIKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9ndGstMi4wLyovZW5naW5lcy8qLnNvICIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2xpYmRpcn0vZ3RrLTIuMC8qL2VuZ2luZXMvKi5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiICR7bGliZGlyfS9ndGstMi4wLyovZW5naW5lcy8uZGVidWciCitGSUxFU19ndGstdGhlbWUtc2F0byA9ICIke2RhdGFkaXJ9L2ljb25zICR7ZGF0YWRpcn0vdGhlbWVzIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGtnY29uZmlnCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWZvciBpIGluIGBscyBndGstY29tbW9uYDsgZG8KKwkJbG4gLXNmIC4uL2d0ay1jb21tb24vJGkgZ3RrMi1lbmdpbmUvJGkKKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE0ZDk4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vZ3RrLWVuZ2luZXMvZ3RrLXNhdG8tZW5naW5lX2dpdC5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIGd0ay1zYXRvLWVuZ2luZS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9zYXRvLXV0aWxzLmg7ZW5kbGluZT0yNDttZDU9NzA4ZjI4Y2ZlN2ZlMDI4ZDQ5N2FhZjQzODliODBiNjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3NhdG8tbWFpbi5jO2VuZGxpbmU9MjQ7bWQ1PWI1ZTVkZGRlYmNhNTcwMjc1YmVjYjUxYjUyNmU0YzVhIgorCitTUkNSRVYgPSAiNDc0MGFkOGQ1M2FiYTQzNjhjZTNlMDNiMDZjZmRjNjllYjg2ZGNkYyIKK1BWID0gIjAuMy4zK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdxdmdhJywgJy0td2l0aC1tb2RlPXF2Z2EnLCAnJyxkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8tZGV2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLWRldi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmE2OWQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLWRldi5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgY29yZS1pbWFnZS1zYXRvLmJiCisKK0RFU0NSSVBUSU9OID0gIkltYWdlIHdpdGggU2F0byBmb3IgZGV2ZWxvcG1lbnQgd29yay4gSXQgaW5jbHVkZXMgZXZlcnl0aGluZyBcCit3aXRoaW4gY29yZS1pbWFnZS1zYXRvIHBsdXMgYSBuYXRpdmUgdG9vbGNoYWluLCBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBhbmQgXAordGVzdGluZyBsaWJyYXJpZXMsIHByb2ZpbGluZyBhbmQgZGVidWcgc3ltYm9scy4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJkZXYtcGtncyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by1zZGsuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8tc2RrLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyODM2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8tc2RrLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgY29yZS1pbWFnZS1zYXRvLmJiCisKK0RFU0NSSVBUSU9OID0gIkltYWdlIHdpdGggU2F0byBzdXBwb3J0IHRoYXQgaW5jbHVkZXMgZXZlcnl0aGluZyB3aXRoaW4gXAorY29yZS1pbWFnZS1zYXRvIHBsdXMgbWV0YS10b29sY2hhaW4sIGRldmVsb3BtZW50IGhlYWRlcnMgYW5kIGxpYnJhcmllcyB0byBcCitmb3JtIGEgc3RhbmRhbG9uZSBTREsuIgorCitRVDRQS0cgPSAicXQ0LXBrZ3MiCitRVDRQS0dfbWlwczY0ID0gIiIKK1FUNFBLR19taXBzNjRuMzIgPSAiIgorCitJTUFHRV9GRUFUVVJFUyArPSAiZGV2LXBrZ3MgdG9vbHMtc2RrICR7UVQ0UEtHfSBcCisJdG9vbHMtZGVidWcgZWNsaXBzZS1kZWJ1ZyB0b29scy1wcm9maWxlIHRvb2xzLXRlc3RhcHBzIGRlYnVnLXR3ZWFrcyBzc2gtc2VydmVyLW9wZW5zc2giCisKK0lNQUdFX0lOU1RBTEwgKz0gImtlcm5lbC1kZXZzcmMiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzI0NmQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLmJiCkBAIC0wLDAgKzEsMTEgQEAKK0RFU0NSSVBUSU9OID0gIkltYWdlIHdpdGggU2F0bywgYSBtb2JpbGUgZW52aXJvbm1lbnQgYW5kIHZpc3VhbCBzdHlsZSBmb3IgXAorbW9iaWxlIGRldmljZXMuIFRoZSBpbWFnZSBzdXBwb3J0cyBYMTEgd2l0aCBhIFNhdG8gdGhlbWUsIFBpbWxpY28gXAorYXBwbGljYXRpb25zLCBhbmQgY29udGFpbnMgdGVybWluYWwsIGVkaXRvciwgYW5kIGZpbGUgbWFuYWdlci4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJzcGxhc2ggcGFja2FnZS1tYW5hZ2VtZW50IHgxMS1iYXNlIHgxMS1zYXRvIHNzaC1zZXJ2ZXItZHJvcGJlYXIgaHdjb2RlY3MiCisKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IGNvcmUtaW1hZ2UKKworSU1BR0VfSU5TVEFMTCArPSAicGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8tZ2FtZXMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvbGVhZnBhZC5kZXNrdG9wIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2ZpbGVzL2xlYWZwYWQuZGVza3RvcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2UyZDViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2ZpbGVzL2xlYWZwYWQuZGVza3RvcApAQCAtMCwwICsxLDEwIEBACitbRGVza3RvcCBFbnRyeV0KK05hbWU9Tm90ZXMKK0V4ZWM9L3Vzci9iaW4vbGVhZnBhZAorQ29tbWVudD1UZXh0IEVkaXRvcgorSWNvbj1hY2Nlc3Nvcmllcy10ZXh0LWVkaXRvcgorVGVybWluYWw9ZmFsc2UKK1R5cGU9QXBwbGljYXRpb24KK0NhdGVnb3JpZXM9R1RLO1V0aWxpdHk7VGV4dEVkaXRvcjsKK1gtTUItU2luZ2xlSW5zdGFuY2U9dHJ1ZQorU3RhcnR1cE5vdGlmeT10cnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvb3dsLW1lbnUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvb3dsLW1lbnUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViZjc0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9maWxlcy9vd2wtbWVudS5wYXRjaApAQCAtMCwwICsxLDYzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VuYWJsZSBmZWF0dXJlXQorCistLS0gdG1wL3NyYy9tZW51LmMub3JpZwkyMDA3LTA0LTIzIDEyOjA4OjQxLjAwMDAwMDAwMCArMDEwMAorKysrIHRtcC9zcmMvbWVudS5jCTIwMDctMDQtMjMgMTI6MDg6NDEuMDAwMDAwMDAwICswMTAwCitAQCAtMTUyLDcgKzE1Miw3IEBACisgCX0KKyAJCisgCWFjY2VsX2dyb3VwID0gZ3RrX2FjY2VsX2dyb3VwX25ldygpOworLQlpZmFjdG9yeSA9IGd0a19pdGVtX2ZhY3RvcnlfbmV3KEdUS19UWVBFX01FTlVfQkFSLCAiPG1haW4+IiwgYWNjZWxfZ3JvdXApOworKwlpZmFjdG9yeSA9IGd0a19pdGVtX2ZhY3RvcnlfbmV3KEdUS19UWVBFX01FTlUsICI8bWFpbj4iLCBhY2NlbF9ncm91cCk7CisgCWd0a19pdGVtX2ZhY3Rvcnlfc2V0X3RyYW5zbGF0ZV9mdW5jKGlmYWN0b3J5LCBtZW51X3RyYW5zbGF0ZSwgTlVMTCwgTlVMTCk7CisgCWd0a19pdGVtX2ZhY3RvcnlfY3JlYXRlX2l0ZW1zKGlmYWN0b3J5LCBubWVudV9pdGVtcywgbWVudV9pdGVtcywgTlVMTCk7CisgCWd0a193aW5kb3dfYWRkX2FjY2VsX2dyb3VwKEdUS19XSU5ET1cod2luZG93KSwgYWNjZWxfZ3JvdXApOworCistLS0gdG1wL3NyYy93aW5kb3cuYy5vcmlnCTIwMDctMDQtMjMgMTI6MTQ6MDcuMDAwMDAwMDAwICswMTAwCisrKysgdG1wL3NyYy93aW5kb3cuYwkyMDA3LTA0LTIzIDEyOjE0OjA3LjAwMDAwMDAwMCArMDEwMAorQEAgLTE4LDYgKzE4LDggQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSAibGVhZnBhZC5oIgorKyNpbmNsdWRlIDxsaWJvd2wvb3dsd2luZG93bWVudS5oPgorKworIC8qCisgc3RhdGljIHZvaWQgY2Jfc2Nyb2xsX2V2ZW50KEd0a0FkanVzdG1lbnQgKmFkaiwgR3RrV2lkZ2V0ICp2aWV3KQorIHsKK0BAIC01Miw3ICs1NCw2IEBACisgCWd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7CisgCQorIAltZW51YmFyID0gY3JlYXRlX21lbnVfYmFyKHdpbmRvdyk7CistCWd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBtZW51YmFyLCBGQUxTRSwgRkFMU0UsIDApOworIAkKKyAJc3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKKyAJZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc3cpLAorCistLS0gdG1wL3NyYy9tYWluLmMub3JpZwkyMDA3LTA0LTIzIDEyOjE1OjAzLjAwMDAwMDAwMCArMDEwMAorKysrIHRtcC9zcmMvbWFpbi5jCTIwMDctMDQtMjMgMTI6MTU6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtMjQ0LDYgKzI0NCw3IEBACisgCUNvbmYgKmNvbmY7CisgCUd0a0l0ZW1GYWN0b3J5ICppZmFjdG9yeTsKKyAJZ2NoYXIgKnN0ZGluX2RhdGEgPSBOVUxMOworKwlHdGtXaWRnZXQgKm1lbnU7CisgCQorIAliaW5kdGV4dGRvbWFpbihQQUNLQUdFLCBMT0NBTEVESVIpOworIAliaW5kX3RleHRkb21haW5fY29kZXNldChQQUNLQUdFLCAiVVRGLTgiKTsKK0BAIC0yOTMsNyArMjk0LDEwIEBACisgCQljb25mLT5hdXRvaW5kZW50KTsKKyAJCisgCWd0a193aWRnZXRfc2hvd19hbGwocHViLT5tdy0+d2luZG93KTsKKysJb3dsX3NldF93aW5kb3dfbWVudSAoR1RLX1dJTkRPVyhwdWItPm13LT53aW5kb3cpLAorKwkJCSAgICAgR1RLX01FTlUocHViLT5tdy0+bWVudWJhcikpOworKwkKKyAJZ19mcmVlKGNvbmYtPmZvbnRuYW1lKTsKKyAJZ19mcmVlKGNvbmYpOworIAkKKworLS0tIHRtcC9zcmMvTWFrZWZpbGUuYW0ub3JpZwkyMDA3LTA0LTIzIDEyOjE3OjU0LjAwMDAwMDAwMCArMDEwMAorKysrIHRtcC9zcmMvTWFrZWZpbGUuYW0JMjAwNy0wNC0yMyAxMjoxNzo1NC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNyw0ICsyNyw0IEBACisgCWkxOG4uaAorIAorIGxlYWZwYWRfQ0ZMQUdTICA9ICQoR1RLX0NGTEFHUykgJChHTk9NRVBSSU5UX0NGTEFHUykKKy1sZWFmcGFkX0xEQUREICAgPSAkKEdUS19MSUJTKSAkKElOVExMSUJTKSAkKEdOT01FUFJJTlRfTElCUykKKytsZWFmcGFkX0xEQUREICAgPSAkKEdUS19MSUJTKSAkKElOVExMSUJTKSAkKEdOT01FUFJJTlRfTElCUykgLWxvd2wKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9sZWFmcGFkXzAuOC4xOC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2xlYWZwYWRfMC44LjE4LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcxNTE0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9sZWFmcGFkXzAuOC4xOC4xLmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiU2ltcGxlIEdUSysgVGV4dCBFZGl0b3IiCitIT01FUEFHRSA9ICJodHRwOi8vdGFyb3QuZnJlZXNoZWxsLm9yZy9sZWFmcGFkLyIKKworTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9sZWFmcGFkLmg7ZW5kbGluZT0yMDttZDU9ZDNkNmE4OWY1ZTYxZThiMTNiZGVhNTM3NTExYmExZmEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3V0aWxzLmM7ZW5kbGluZT0yMDttZDU9MGQyY2M2NTg0YmEzMjAyNDQ4YmIyNzRmNjI3Mzk1NzEiCisKK0RFUEVORFMgPSAiZ3RrKyBpbnRsdG9vbC1uYXRpdmUgbGlib3dsIgorIyBUaGUgbGlib3dsIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9OT05HTlVfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiBcCisJICAgZmlsZTovL2xlYWZwYWQuZGVza3RvcCIKKworU1JDX1VSSVttZDVzdW1dID0gIjI1NGE3MmZjNjc1MDVlM2FhNTI4ODRjNzI5Y2Q3Yjk3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk1OWQyMmFlMDdmMjI4MDNiYzY2ZmY0MGQzNzNhODU0NTMyYTZlNDczMjY4MGJmOGE5NmEzZmJjYjlmODBhMmMiCitQUiA9ICJyMiIKKworU1JDX1VSSV9hcHBlbmRfcG9reSA9ICIgZmlsZTovL293bC1tZW51LnBhdGNoO2FwcGx5PXllcyAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworRVhUUkFfT0VDT05GID0gIiAtLWVuYWJsZS1jaG9vc2VyIC0tZGlzYWJsZS1lbWFjcyAtLWRpc2FibGUtcHJpbnQiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xlYWZwYWQuZGVza3RvcCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9sZWFmcGFkLmRlc2t0b3AiCisKK1BBQ0tBR0VTICs9ICJsZWFmcGFkLXN0b2NrLWljb25zIgorRklMRVNfbGVhZnBhZC1zdG9jay1pY29ucyA9ICIke2RhdGFkaXJ9L2ljb25zL2hpY29sb3IvIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9saWJvd2wvbGlib3dsX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGlib3dsL2xpYm93bF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNjNDdkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGlib3dsL2xpYm93bF9naXQuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJPcGVuZWRIYW5kIFdpZGdldCBMaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vLWhhbmQuY29tIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlib3dsL293bHBhbmVkLmg7ZW5kbGluZT0yMDttZDU9N2ZlZjg0NGM0Y2MwMWIxMDU0MWE3YWI2YWI1OTcxYWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlib3dsL293bHRyZWVtb2RlbHNsaWNlLmg7ZW5kbGluZT0yMDttZDU9YTU0MjFmMmNkYWU4ZGViZTVlNGM0OGMwOWEwMmJlYjkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlib3dsL293bGNvbG91cnN3YXRjaC5oO2VuZGxpbmU9MjQ7bWQ1PTA2M2M0MTVjNTg3MTlkNTM2OTkwY2E4ZjYwNmI1NzMwIgorCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gImd0aysiCitTUkNSRVYgPSAiNmViYzhhYzhmODU3NTI3OGRkNDBhNTM1Y2FkZWZhMjYzNzRlNDRiMSIKK1BWID0gIjAuMStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBSZXF1aXJlcyBnZGsvZ2RreC5oIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IGd0ayB3aGVuIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvZmlsZXMvbm8taGFuZGVkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL2ZpbGVzL25vLWhhbmRlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjU2OTQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL2ZpbGVzL25vLWhhbmRlZC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBhcHBlYXJhbmNlL21iLWFwcGVhcmFuY2UuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwcGVhcmFuY2UvbWItYXBwZWFyYW5jZS5jCShyZXZpc2lvbiAxNjE0KQorKysrIGFwcGVhcmFuY2UvbWItYXBwZWFyYW5jZS5jCSh3b3JraW5nIGNvcHkpCitAQCAtMzAwLDExICszMDAsMTMgQEAKKyAgICAgZ3RrX2ZvbnRfYnV0dG9uX3NldF9mb250X25hbWUgKEdUS19GT05UX0JVVFRPTiAoZm9udF9idXR0b24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbmZfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKKyAgIH0gZWxzZSBpZiAoc3RyY21wIChrZXksIEhBTkRFRF9LRVkpID09IDApIHsKKysjaWYgMAorICAgICBHRW51bVZhbHVlICplOworICAgICBlID0gZ19lbnVtX2dldF92YWx1ZV9ieV9uYW1lIChnX3R5cGVfY2xhc3NfcmVmIChHVEtfVFlQRV9DT1JORVJfVFlQRSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25mX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSk7CisgICAgIGd0a190b2dnbGVfYnV0dG9uX3NldF9hY3RpdmUgKEdUS19UT0dHTEVfQlVUVE9OIChoYW5kZWRfY2hlY2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52YWx1ZSA9PSBHVEtfQ09STkVSX1RPUF9SSUdIVCk7CisrI2VuZGlmCisgICB9CisgfQorIAorQEAgLTM5NSwxMiArMzk3LDEzIEBACisgICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAoYWxpZ24pLCBmb250X2J1dHRvbik7CisgCisgICAvKiBMZWZ0L1JpZ2h0IEhhbmRlZCAqLworLSAgCisrI2lmIDAKKyAgIGZyYW1lID0gbmV3X2ZyYW1lIChfKCJPcmllbnRhdGlvbiIpLCAmYWxpZ24pOworICAgZ3RrX2JveF9wYWNrX3N0YXJ0IChHVEtfQk9YIChib3gpLCBmcmFtZSwgVFJVRSwgVFJVRSwgMCk7CisgICBoYW5kZWRfY2hlY2sgPSBndGtfY2hlY2tfYnV0dG9uX25ld193aXRoX21uZW1vbmljIChfKCJfTGVmdC1oYW5kZWQiKSk7CisgICBnX3NpZ25hbF9jb25uZWN0IChoYW5kZWRfY2hlY2ssICJ0b2dnbGVkIiwgR19DQUxMQkFDSyAob25faGFuZGVkX3NldCksIE5VTEwpOworICAgZ3RrX2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKGFsaWduKSwgaGFuZGVkX2NoZWNrKTsKKysjZW5kaWYKKyAKKyAgIGdjb25mX2NsaWVudF9hZGRfZGlyIChnY29uZiwgSU5URVJGQUNFX0RJUiwgR0NPTkZfQ0xJRU5UX1BSRUxPQURfT05FTEVWRUwsIE5VTEwpOworICAgZ19zaWduYWxfY29ubmVjdCAoZ2NvbmYsICJ2YWx1ZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyAob25fZ2NvbmZfdmFsdWVfY2hhbmdlZCksIE5VTEwpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL21hdGNoYm94LWNvbmZpZy1ndGtfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL21hdGNoYm94LWNvbmZpZy1ndGtfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNzNhNGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvbWF0Y2hib3gtY29uZmlnLWd0a19naXQuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCBHVEsrIHRoZW1lIGNvbmZpZ3VyYXRpb24gYXBwbGljYXRpb24iCitIT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hcHBlYXJhbmNlL21iLWFwcGVhcmFuY2UuYztlbmRsaW5lPTI1O21kNT1lYTkyMzMzY2Y4YTY4MDI2MzlkNjJkODc0YzExNGEyOCIKKworREVQRU5EUyA9ICJnY29uZiBndGsrIgorUkRFUEVORFNfJHtQTn0gPSAic2V0dGluZ3MtZGFlbW9uIgorCitTUkNSRVYgPSAiM2VkNzRkZmI3YzU3YmUwODhhNWFiMzZlNDQ2YzBjY2RlOWZhMTAyOCIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0gXAorICAgICAgICBmaWxlOi8vbm8taGFuZGVkLnBhdGNoO3N0cmlwbGV2ZWw9MCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBzZXR0aW5ncy1kYWVtb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC1zYXRvL21hdGNoYm94LWRlc2t0b3Atc2F0b19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3Atc2F0by9tYXRjaGJveC1kZXNrdG9wLXNhdG9fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NzljYmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3Atc2F0by9tYXRjaGJveC1kZXNrdG9wLXNhdG9fZ2l0LmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggZGVza3RvcCBmb2xkZXJzIGZvciB0aGUgU2F0byBlbnZpcm9ubWVudCIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCisKK1NFQ1RJT04gPSAieDExIgorREVQRU5EUyA9ICIiCitSQ09ORkxJQ1RTXyR7UE59ID0gIm1hdGNoYm94LWNvbW1vbiIKKworU1JDUkVWID0gIjgxMGIwYjA4ZWI3OWU0Njg1MjAyZGEyZWMzNDdiOTkwYmI0NjdlMDciCitQViA9ICIwLjErZ2l0JHtTUkNQVn0iCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9tYXRjaGJveC1kZXNrdG9wX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9tYXRjaGJveC1kZXNrdG9wX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMThkMmUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL21hdGNoYm94LWRlc2t0b3BfZ2l0LmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggV2luZG93IE1hbmFnZXIgRGVza3RvcCIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlidGFrdS9lZ2dzZXF1ZW5jZS5oO2VuZGxpbmU9MjA7bWQ1PWI5MWY2OGY3NjQyYTE0NTlmYTFmNGM5ZGY5NGE4ZjE1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9kZXNrdG9wLmM7ZW5kbGluZT0yMDttZDU9MzZjOWJmMjk1ZTYwMDdmMzQyMzA5NWY0MDVhZjVhMmQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uYztlbmRsaW5lPTE5O21kNT0yMDQ0MjQ0Zjk3YTE5NWMyNWI3ZGM2MDJhYzdlOWEwMCIKKworREVQRU5EUyA9ICJndGsrIHN0YXJ0dXAtbm90aWZpY2F0aW9uIGRidXMiCitTRUNUSU9OID0gIngxMS93bSIKK1NSQ1JFViA9ICI3MWUzZTZlMDQyNzFlOWQ1YTE0ZjFjMjMxZWYxMDBjN2YzMjAxMzRkIgorUFYgPSAiMi4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfS0yIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24gLS13aXRoLWRidXMiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgc3RhcnR1cC1ub3RpZmljYXRpb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvZmlsZXMvODBtYXRjaGJveGtleWJvYXJkLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1rZXlib2FyZC9maWxlcy84MG1hdGNoYm94a2V5Ym9hcmQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNmMTg4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvZmlsZXMvODBtYXRjaGJveGtleWJvYXJkLnNoCkBAIC0wLDAgKzEsMjEgQEAKKyMhL2Jpbi9zaAorCisuIC9ldGMvZm9ybWZhY3Rvci9jb25maWcKKworQ01EPSIiCisKK2lmIFsgIiRIQVZFX0tFWUJPQVJEIiA9ICIwIiBdOyB0aGVuCisgICAgQ01EPSJtYXRjaGJveC1rZXlib2FyZCAtZCIKK2VsaWYgWyAiJERJU1BMQVlfQ0FOX1JPVEFURSIgPSAiMSIgXTsgdGhlbgorICAgIGlmIFsgIiRIQVZFX0tFWUJPQVJEX1BPUlRSQUlUIiA9ICIxIiAtYSAiJEhBVkVfS0VZQk9BUkRfTEFORFNDQVBFIiA9ICIwIiBdOyB0aGVuCisgICAgICAgIENNRD0ibWF0Y2hib3gta2V5Ym9hcmQgLWQgLW8gbGFuZHNjYXBlIgorICAgIGVsaWYgWyAiJEhBVkVfS0VZQk9BUkRfTEFORFNDQVBFIiA9ICIxIiAtYSAiJEhBVkVfS0VZQk9BUkRfUE9SVFJBSVQiID0gIjAiIF07IHRoZW4KKyAgICAgICAgQ01EPSJtYXRjaGJveC1rZXlib2FyZCAtZCAtbyBwb3J0cmFpdCIKKyAgICBmaQorZmkKKworaWYgWyAiJENNRCIgXTsgdGhlbgorICAgICMgRGVsYXkgdG8gbWFrZSBzdXJlIHRoZSB3aW5kb3cgbWFuYWdlciBpcyBhY3RpdmUKKyAgICAjIGJ5IHdhaXRpbmcgZm9yIHRoZSBkZXNrdG9wIHRvIHNheSBpdHMgZmluaXNoZWQgbG9hZGluZworICAgIGRidXMtd2FpdCBvcmcubWF0Y2hib3hfcHJvamVjdC5kZXNrdG9wIExvYWRlZCAmJiAkQ01EICYKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL2ZpbGVzL3NpbmdsZS1pbnN0YW5jZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvZmlsZXMvc2luZ2xlLWluc3RhbmNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YjZjNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL2ZpbGVzL3NpbmdsZS1pbnN0YW5jZS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitNdWx0aXBsZSBtYXRjaGJveC1rZXlib2FyZCBpbnN0YW5jZXMgd291bGQgb2NjdXB5IHdob2xlIHNjcmVlbiBhbmQgY2F1c2UgWAord2luZG93IHNlZ2ZhdWx0KEJ1ZyA1MDkpLiBNYWtpbmcgbWF0Y2hib3gta2V5Ym9hcmQgc2luZ2xldG9uIGlzIG9uZSB3b3JrCithcm91bmQuCisKK1RoaXMgcGF0Y2ggYWxsb3cgb25seSBvbmUgaW5zdGFuY2Ugb2YgbWF0Y2hib3gta2V5Ym9hcmQgYmFzZWQgb24gc29tZSBtZWNoYW5pc20KK2luIG1hdGNoYm94LWRlc2t0b3AuIEluIGZ1dHVyZSwgYW4gYXBwbGV0IGFuZCBHVEstSU0gbW9kdWxlcyBpbgorbWF0Y2hib3gta2V5Ym9hcmQgY2FuIGJlIHVzZWQgdG8gYXV0b21hdGljYWxseSBtYXAvdW5tYXAgdGhlIHZpcnR1YWwga2V5Ym9hcmQKK29uIGRlbWFuZC4KKworU2lnbmVkLW9mZi1ieTogWmhhaSBFZHdpbiA8ZWR3aW4uemhhaUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IG1hdGNoYm94LWtleWJvYXJkL21hdGNoYm94LWtleWJvYXJkLmRlc2t0b3AKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtYXRjaGJveC1rZXlib2FyZC5vcmlnL21hdGNoYm94LWtleWJvYXJkLmRlc2t0b3AJMjAxMC0xMi0yMiAyMDo0MTo0MC4wMDAwMDAwMDAgKzA4MDAKKysrKyBtYXRjaGJveC1rZXlib2FyZC9tYXRjaGJveC1rZXlib2FyZC5kZXNrdG9wCTIwMTAtMTItMjIgMjA6NDI6MTIuMDAwMDAwMDAwICswODAwCitAQCAtNiwzICs2LDUgQEAKKyBJY29uPW1hdGNoYm94LWtleWJvYXJkLnBuZworIENhdGVnb3JpZXM9UGFuZWw7VXRpbGl0eTtNQgorIFgtTUItSU5QVVQtTUVDSEFOU0lNPVRydWUKKytYLU1CLVNpbmdsZUluc3RhbmNlPXRydWUKKytTdGFydHVwTm90aWZ5PXRydWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvbWF0Y2hib3gta2V5Ym9hcmRfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1rZXlib2FyZC9tYXRjaGJveC1rZXlib2FyZF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQzMjFkMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvbWF0Y2hib3gta2V5Ym9hcmRfZ2l0LmJiCkBAIC0wLDAgKzEsNTYgQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggdmlydHVhbCBrZXlib2FyZCBmb3IgWDExIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCitTRUNUSU9OID0gIngxMSIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYXRjaGJveC1rZXlib2FyZC5oO2VuZGxpbmU9MTc7bWQ1PTlkNjU4NmM2OWU0YTkyNmYzY2IwYjQ0MjVmMjRiYTNjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2FwcGxldC9hcHBsZXQuYztlbmRsaW5lPTE4O21kNT00YTBmNzIxNzI0NzQ2YjE0ZDk1YjUxZGRkNDJiOTVlNyIKKworREVQRU5EUyA9ICJsaWJmYWtla2V5IGV4cGF0IGxpYnhmdCBndGsrIG1hdGNoYm94LXBhbmVsLTIiCisKK1NSQ1JFViA9ICIyMTdmMWJmZTE0YzQxY2Y3ZTI5MWQwNGE2M2FhMmQ3OWNjMTNkMDYzIgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorUFIgPSAicjQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59O2JyYW5jaD1tYXRjaGJveC1rZXlib2FyZC0wLTEgXAorICAgICAgICAgICBmaWxlOi8vc2luZ2xlLWluc3RhbmNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzgwbWF0Y2hib3hrZXlib2FyZC5zaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgZ3RrLWltbW9kdWxlcy1jYWNoZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgbGlieGZ0LCBsaWJmYWtla2V5IGFuZCBtYXRjaGJveC1wYW5lbC0yIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtY2Fpcm8gLS1lbmFibGUtZ3RrLWltIC0tZW5hYmxlLWFwcGxldCIKKworUEFDS0FHRVMgKz0gIiR7UE59LWltICR7UE59LWFwcGxldCIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyBcCisJICAgICAgICR7c3lzY29uZmRpcn0gXAorCSAgICAgICAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucyBcCisJICAgICAgICR7ZGF0YWRpcn0vcGl4bWFwcyBcCisJICAgICAgICR7ZGF0YWRpcn0vbWF0Y2hib3gta2V5Ym9hcmQiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2d0ay0yLjAvKi9pbW1vZHVsZXMvLmRlYnVnIgorCitGSUxFU18ke1BOfS1pbSA9ICIke2xpYmRpcn0vZ3RrLTIuMC8qL2ltbW9kdWxlcy8qLnNvIgorCitGSUxFU18ke1BOfS1hcHBsZXQgPSAiJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyouc28iCisKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kLworCWluc3RhbGwgLW0gNzU1ICR7V09SS0RJUn0vODBtYXRjaGJveGtleWJvYXJkLnNoICR7RH0vJHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KKworCXJtIC1mICR7RH0ke2xpYmRpcn0vZ3RrLTIuMC8qL2ltbW9kdWxlcy8qLmxhCisJcm0gLWYgJHtEfSR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLmxhCit9CisKK0dUS0lNTU9EVUxFU19QQUNLQUdFUyA9ICIke1BOfS1pbSIKKworUkRFUEVORFNfJHtQTn0gPSAiZm9ybWZhY3RvciBkYnVzLXdhaXQiCitSUkVDT01NRU5EU18ke1BOfSA9ICIke1BOfS1hcHBsZXQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvZmlsZXMvc2lsZW5jZS13YXJuaW5ncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9maWxlcy9zaWxlbmNlLXdhcm5pbmdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YmE5YTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvZmlsZXMvc2lsZW5jZS13YXJuaW5ncy5wYXRjaApAQCAtMCwwICsxLDY0IEBACitEb24ndCB3YXJuIGlmIHRoZSBtYWNoaW5lIGRvZXNuJ3QgYWN0dWFsbHkgaGF2ZSBhIGJhdHRlcnksIG9yIGlmIHRoZSBhcHBsZXRzCitzdHJpbmcgY29udGFpbnMgY29uc2VjdXRpdmUgc2VwYXJhdG9ycy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFjcGkuYyBiL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFjcGkuYworaW5kZXggNjUxNWNiMC4uYzQ0ZGQxMiAxMDA2NDQKKy0tLSBhL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFjcGkuYworKysrIGIvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYWNwaS5jCitAQCAtMTQsOCArMTQsNiBAQCBpbnQgYmF0dF9zdGF0ZSwgYWNfc3RhdGU7CisgaW50IHBtX3N1cHBvcnQodm9pZCkKKyB7CisgCWlmKGNoZWNrX2FjcGlfc3VwcG9ydCgpID09IE5PVF9TVVBQT1JURUQpeworLQkJZ193YXJuaW5nKCJObyBBQ1BJIHN1cHBvcnRcbiIpOworLQorIAkJcmV0dXJuIDA7CisgCX0KKyAKK0BAIC0zMiw4ICszMCw5IEBAIGNvbnN0IGNoYXIqIHBtX2JhdHRlcnlfaWNvbih2b2lkKQorIAljb25zdCBjaGFyICppY29uOworIAliYXR0ZXJ5X3QgKmJpbmZvOworIAorKyAgICAgICAgLyogTm8gYmF0dGVyeSBhdmFpbGFibGUgKG5vdCBwcmVzZW50LCBkaXNhYmxlZCwgb3Igc29tZXRoaW5nCisrICAgICAgICAgICBlbHNlLiBTaWxlbnRseSBkbyBub3RoaW5nLiAqLworIAlpZiAoYmF0dF9zdGF0ZSAhPSBTVUNDRVNTKSB7CistCQlnX3dhcm5pbmcoIkNvdWxkbnQgaW5pdGlhbGl6ZSBBQ1BJIGJhdHRlcnlcbiIpOworIAkJcmV0dXJuIE5VTEw7CisgCX0KKyAKK2RpZmYgLS1naXQgYS9hcHBsZXRzL2JhdHRlcnkvYmF0dGVyeS1hcG0uYyBiL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFwbS5jCitpbmRleCA1NDY3NDM4Li4yZjM5Y2I2IDEwMDY0NAorLS0tIGEvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYXBtLmMKKysrKyBiL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFwbS5jCitAQCAtMTAsOCArMTAsNiBAQAorIGludCBwbV9zdXBwb3J0KHZvaWQpCisgeworIAlpZiAoMSA9PSBhcG1fZXhpc3RzICgpKSB7CistICAgICAgICAgICAgICAgIGdfd2FybmluZyAoIk5vIEFQTSBzdXBwb3J0Iik7CistCisgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgfQorIAorZGlmZiAtLWdpdCBhL21hdGNoYm94LXBhbmVsL21iLXBhbmVsLmMgYi9tYXRjaGJveC1wYW5lbC9tYi1wYW5lbC5jCitpbmRleCAyZDhjYWZkLi44MjhhMzZkIDEwMDY0NAorLS0tIGEvbWF0Y2hib3gtcGFuZWwvbWItcGFuZWwuYworKysrIGIvbWF0Y2hib3gtcGFuZWwvbWItcGFuZWwuYworQEAgLTExMCwxMCArMTEwLDE1IEBAIGxvYWRfYXBwbGV0cyAoY29uc3QgY2hhciAgICAqYXBwbGV0c19kZXNjLAorICAgICAgICAgYXBwbGV0cyA9IGdfc3Ryc3BsaXQgKGFwcGxldHNfZGVzYywgIiwiLCAtMSk7CisgCisgICAgICAgICBmb3IgKGkgPSAwOyBhcHBsZXRzW2ldOyBpKyspIHsKKysgICAgICAgICAgICAgICAgY2hhciAqczsKKyAgICAgICAgICAgICAgICAgY2hhciAqKmJpdHM7CisgICAgICAgICAgICAgICAgIEd0a1dpZGdldCAqYXBwbGV0OworIAorLSAgICAgICAgICAgICAgICBiaXRzID0gZ19zdHJzcGxpdCAoYXBwbGV0c1tpXSwgIjoiLCAyKTsKKysgICAgICAgICAgICAgICAgcyA9IGFwcGxldHNbaV07CisrICAgICAgICAgICAgICAgIGlmIChzID09IE5VTEwgfHwgc1swXSA9PSAnXDAnKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKworKyAgICAgICAgICAgICAgICBiaXRzID0gZ19zdHJzcGxpdCAocywgIjoiLCAyKTsKKyAKKyAgICAgICAgICAgICAgICAgYXBwbGV0ID0gbG9hZF9hcHBsZXQgKGJpdHNbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzWzFdLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL21hdGNoYm94LXBhbmVsLTJfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL21hdGNoYm94LXBhbmVsLTJfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZDczNjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvbWF0Y2hib3gtcGFuZWwtMl9naXQuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJTaW1wbGUgR1RLKyBiYXNlZCBwYW5lbCBmb3IgaGFuZGhlbGQgZGV2aWNlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21hdGNoYm94LXBhbmVsL21iLXBhbmVsLmg7ZW5kbGluZT0xMDttZDU9MGI3ZGIyOGY0YjY4NjNmYjg1M2QwNDY3ZTU5MDAxOWEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXBwbGV0cy9zdGFydHVwL3N0YXJ0dXAuYztlbmRsaW5lPTIyO21kNT1iMGE2NGZiZWYzMDk3ZDc5ZjgyNjRlNjkwN2E5OGYwMyIKKworREVQRU5EUyA9ICJnbm9tZS1jb21tb24gZ3RrKyBzdGFydHVwLW5vdGlmaWNhdGlvbiBkYnVzIGRidXMtZ2xpYiIKK0RFUEVORFMgKz0gIiAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhY3BpIiwgImxpYmFjcGkiLCAiIixkKX0iCitERVBFTkRTICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiYXBtIiwgImFwbWQiLCAiIixkKX0iCisKKyMgVGhlIHN0YXJ0dXAtbm90aWZpY2F0aW9uIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ1JFViA9ICIyNmEzYTY3YjQxYzUwZTBhZTE2M2Q4ZmU4NmNjZjdhMGYwYTY3MWFlIgorUFYgPSAiMi4wK2dpdCR7U1JDUFZ9IgorCitSUFJPVklERVNfJHtQTn0gPSAibWF0Y2hib3gtcGFuZWwiCitSUkVQTEFDRVNfJHtQTn0gPSAibWF0Y2hib3gtcGFuZWwiCitSQ09ORkxJQ1RTXyR7UE59ID0gIm1hdGNoYm94LXBhbmVsIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSBcCisgICAgICAgICAgIGZpbGU6Ly9zaWxlbmNlLXdhcm5pbmdzLnBhdGNoIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24gLS1lbmFibGUtZGJ1cyIKK0VYVFJBX09FQ09ORiArPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFjcGkiLCAiLS13aXRoLWJhdHRlcnk9YWNwaSIsICIiLGQpfSIKK0VYVFJBX09FQ09ORiArPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFwbSIsICItLXdpdGgtYmF0dGVyeT1hcG0iLCAiIixkKX0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5zbyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9tYXRjaGJveC1wYW5lbC9icmlnaHRuZXNzLyoucG5nIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21hdGNoYm94LXBhbmVsL3N0YXJ0dXAvKi5wbmcgIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5sYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjawpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0by9zZXNzaW9uIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0by9zZXNzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyY2U0ODMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXNhdG8vbWF0Y2hib3gtc2Vzc2lvbi1zYXRvL3Nlc3Npb24KQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9mb3JtZmFjdG9yL2NvbmZpZworCitpZiBbICIkSEFWRV9UT1VDSFNDUkVFTiIgPSAiMSIgXTsgdGhlbgorICAgIFNIT1dDVVJTT1I9Im5vIgorZWxzZQorICAgIFNIT1dDVVJTT1I9InllcyIKK2ZpCisKK2lmIFsgIiRIQVZFX0tFWUJPQVJEIiA9ICIxIiBdOyB0aGVuCisgICAgS0VZQk9BUkRfQVBQTEVUPSIiCitlbHNlCisgICAgS0VZQk9BUkRfQVBQTEVUPSJrZXlib2FyZCIKK2ZpCisKKyMgVGVsbCBHVEsrMyB3ZSByZWFsbHkgd2FudCBzZXJ2ZXIgc2lkZSBkZWNvcmF0aW9ucywgZXZlbiB3aXRoCisjIEd0a0hlYWRlckJhciB1c2luZyBhcHBsaWNhdGlvbnM6IFdpdGhvdXQgdGhhdCBtYi1wYW5lbCB3aWxsIHJlbmRlcgorIyBvbiB0b3Agb2YgdGhlIGNsaWVudCBzaWRlIGRlY29yYXRpb25zLgorZXhwb3J0IEdUS19DU0Q9MAorCittYXRjaGJveC1kZXNrdG9wICYKKworIyBMaW5lcyBjb250YWluaW5nIGZlYXR1cmUtW2Zvb10gYXJlIHJlbW92ZWQgYXQgYnVpbGQgdGltZSBpZiB0aGUgbWFjaGluZQorIyBkb2Vzbid0IGhhdmUgdGhlIGZlYXR1cmUgImZvbyIuCisKK1NUQVJUX0FQUExFVFM9c2hvd2Rlc2t0b3Asd2luZG93c2VsZWN0b3IKK0VORF9BUFBMRVRTPWNsb2NrLGJhdHRlcnksJEtFWUJPQVJEX0FQUExFVCxzeXN0cmF5LHN0YXJ0dXAtbm90aWZ5LG5vdGlmeQorRU5EX0FQUExFVFM9b3Blbm1va28tcGFuZWwtZ3NtLCRFTkRfQVBQTEVUUyAjIGZlYXR1cmUtcGhvbmUKKworbWF0Y2hib3gtcGFuZWwgLS10aXRsZWJhciAtLXN0YXJ0LWFwcGxldHMgJFNUQVJUX0FQUExFVFMgLS1lbmQtYXBwbGV0cyAkRU5EX0FQUExFVFMgJgorCitleGVjIG1hdGNoYm94LXdpbmRvdy1tYW5hZ2VyIC10aGVtZSBTYXRvIC11c2VfZGVza3RvcF9tb2RlIGRlY29yYXRlZCAtdXNlX2N1cnNvciAkU0hPV0NVUlNPUiAkQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0b18wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXNhdG8vbWF0Y2hib3gtc2Vzc2lvbi1zYXRvXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmRlMThhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0b18wLjEuYmIKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJDdXN0b20gTWF0Y2hib3ggc2Vzc2lvbiBmaWxlcyBmb3IgdGhlIFNhdG8gZW52aXJvbm1lbnQiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyLjArIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc2Vzc2lvbjtlbmRsaW5lPTM7bWQ1PWY4YTVjNWI5YzI3OWU1MmRjMDk0ZDEwZTExYzJiZTYzIgorCitTRUNUSU9OID0gIngxMSIKK0RFUEVORFMgPSAiZ2NvbmYtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAiZm9ybWZhY3RvciBndGstc2F0by1lbmdpbmUgbWF0Y2hib3gtdGhlbWUtc2F0byBndGstdGhlbWUtc2F0byBtYXRjaGJveC1wYW5lbC0yIG1hdGNoYm94LWRlc2t0b3Atc2F0byBtYXRjaGJveC1zZXNzaW9uIGdjb25mIgorUFIgPSAicjMwIgorCisjIFRoaXMgcGFja2FnZSBpcyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgYmVjYXVzZSB0aGUgc2Vzc2lvbiBzY3JpcHQgaXMgbW9kaWZpZWQKKyMgYmFzZWQgb24gdGhlIG1hY2hpbmUgYXJjaGl0ZWN0dXJlLgorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgbWF0Y2hib3gtdGhlbWUtc2F0byByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTUkNfVVJJID0gImZpbGU6Ly9zZXNzaW9uIgorUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCSMgVGhpcyBpcyB0aGUgc2V0IG9mIG1hY2hpbmUgZmVhdHVyZXMgdGhhdCB0aGUgc2NyaXB0IGhhcyBtYXJrZXJzIGZvcgorCUZFQVRVUkVTPSJwaG9uZSIKKwlTQ1JJUFQ9IiR7U30vc2VkZGVyIgorCXJtIC1mICRTQ1JJUFQKKwl0b3VjaCAkU0NSSVBUCisJZm9yIEZFQVQgaW4gJEZFQVRVUkVTOyBkbworCQlpZiBlY2hvICR7TUFDSElORV9GRUFUVVJFU30gfCBhd2sgIi8kRkVBVC8ge2V4aXQgMX0iOyB0aGVuCisJCQllY2hvICIvZmVhdHVyZS0kRkVBVC9kIiA+PiAkU0NSSVBUCisJCWZpCisJZG9uZQorCisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vbWF0Y2hib3gKKwlzZWQgLWYgIiRTQ1JJUFQiICR7U30vc2Vzc2lvbiA+ICR7RH0vJHtzeXNjb25mZGlyfS9tYXRjaGJveC9zZXNzaW9uCisgICAgICAgIGNobW9kICt4ICR7RH0vJHtzeXNjb25mZGlyfS9tYXRjaGJveC9zZXNzaW9uCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJc2V0X3ZhbHVlKCkgeworCQkjdHlwZSwgbmFtZSwgdmFsdWUKKwkJZ2NvbmZ0b29sLTIgLS1jb25maWctc291cmNlPXhtbDo6JEQke3N5c2NvbmZkaXJ9L2djb25mL2djb25mLnhtbC5kZWZhdWx0cyAtLWRpcmVjdCAtLXR5cGUgJDEgLS1zZXQgL2Rlc2t0b3AvcG9reS9pbnRlcmZhY2UvJDIgIiQzIgorCX0KKwlzZXRfdmFsdWUgc3RyaW5nIHRoZW1lIFNhdG8KKwlzZXRfdmFsdWUgc3RyaW5nIGljb25fdGhlbWUgU2F0bworCXNldF92YWx1ZSBib29sIHRvdWNoc2NyZWVuIHRydWUKKwlzZXRfdmFsdWUgc3RyaW5nIGZvbnRfbmFtZSAiU2FucyA5IgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10ZXJtaW5hbC9tYXRjaGJveC10ZXJtaW5hbF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRlcm1pbmFsL21hdGNoYm94LXRlcm1pbmFsX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWZkMTUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10ZXJtaW5hbC9tYXRjaGJveC10ZXJtaW5hbF9naXQuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJMaWdodHdlaWdodCBHVEsrIHRlcm1pbmFsIGFwcGxpY2F0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tYWluLmM7ZW5kbGluZT0yMDttZDU9OTZlMzkxNzZkOWUzNTU2MzlhMGI4YjFjN2E4NDA4MjAiCisKK0RFUEVORFMgPSAiZ3RrKyB2dGUiCitTRUNUSU9OID0gIngxMS91dGlscyIKK1NSQ1JFViA9ICI0NTJiY2EyNTM0OTJhOTdhNTg3ZjQ0MDI4OWI5YWIyN2QyMTczNTNlIgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk0N2UxYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvLmluYwpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIk1hdGNoYm94IHdpbmRvdyBtYW5hZ2VyIFNhdG8gdGhlbWVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJDQy1CWS1TQS0zLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hYWU4NmJiMzRiMGE4MzcxNmNhMDlmNGU3ODNkNmJhNCIKKworREVQRU5EUyA9ICJtYXRjaGJveC13bSIKK1NFQ1RJT04gPSAieDExL3dtIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3RoZW1lcyIKKworIyBUaGUgbWF0Y2hib3gtd20gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvXzAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjc4NmRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG9fMC4xLmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSBtYXRjaGJveC10aGVtZS1zYXRvLmluYworCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJodHRwOi8vcG9reWxpbnV4Lm9yZy9yZWxlYXNlcy9zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8tMC4xLnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjcyYWUyNzJlZjc4MDMxNDFhM2RjYjY5ZTY3MGNmZjk3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjViNTlmOTY0NmVkYmZiOTA3YTMwOTMzMmRiM2JkNmZhNzA4MGRjMWZlMjRkZjU0OTQ4MGNmYWU3ZDk3NGEzZmIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQzNTY5ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvX2dpdC5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIG1hdGNoYm94LXRoZW1lLXNhdG8uaW5jCisKK1NSQ1JFViA9ICJmNzJjZjRlZDdkNzFhZDllNDdiMGYyZDNkYmM1OTNiYzJmM2U3NmY4IgorUFYgPSAiMC4yK2dpdCR7U1JDUFZ9IgorCitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbWF0Y2hib3gtc2F0byIKKworRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdxdmdhJywgJy0td2l0aC1tb2RlPXF2Z2EnLCAnJyxkKX0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8uYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8uYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY3OWRiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0by5iYgpAQCAtMCwwICsxLDY2IEBACisjCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE9wZW5lZEhhbmQgTHRkLgorIworCitTVU1NQVJZID0gIlNhdG8gZGVza3RvcCIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjMzIgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHBhY2thZ2Vncm91cCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgcmRlcGVuZHMgb24geDExdm5jCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFUyA9ICIke1BOfSAke1BOfS1iYXNlICR7UE59LWFwcHMgJHtQTn0tZ2FtZXMiCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICAke1BOfS1iYXNlIFwKKyAgICAke1BOfS1hcHBzIFwKKyAgICAke1BOfS1nYW1lcyBcCisgICAgIgorCitORVRXT1JLX01BTkFHRVIgPz0gImNvbm5tYW4tZ25vbWUiCitORVRXT1JLX01BTkFHRVJfbGliYy11Y2xpYmMgPSAiIgorCitTVU1NQVJZXyR7UE59LWJhc2UgPSAiU2F0byBkZXNrdG9wIC0gYmFzZSBwYWNrYWdlcyIKK1JERVBFTkRTXyR7UE59LWJhc2UgPSAiXAorICAgIG1hdGNoYm94LWRlc2t0b3AgXAorICAgIG1hdGNoYm94LXNlc3Npb24tc2F0byBcCisgICAgbWF0Y2hib3gta2V5Ym9hcmQgXAorICAgIG1hdGNoYm94LWtleWJvYXJkLWFwcGxldCBcCisgICAgbWF0Y2hib3gta2V5Ym9hcmQtaW0gXAorICAgIG1hdGNoYm94LWNvbmZpZy1ndGsgXAorICAgIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUgXAorICAgIHNhdG8taWNvbi10aGVtZSBcCisgICAgc2V0dGluZ3MtZGFlbW9uIFwKKyAgICBndGstc2F0by1lbmdpbmUgXAorICAgIHNodXRkb3duLWRlc2t0b3AgXAorICAgIGxpYnNkbCBcCisgICAgJHtORVRXT1JLX01BTkFHRVJ9IFwKKyAgICB1ZGV2LWV4dHJhY29uZiBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdWxzZWF1ZGlvJywgJ3B1bHNlYXVkaW8tc2VydmVyIHB1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0bycsICcnLCBkKX0gXAorICAgICIKKworIyBwY21hbmZtIGRvZXNuJ3Qgd29yayBvbiBtaXBzCitGSUxFTUFOQUdFUiA/PSAicGNtYW5mbSIKK0ZJTEVNQU5BR0VSX21pcHMgPz0gIiIKKworV0VCID89ICIiCisjV0VCID0gImVwaXBoYW55IgorCitTVU1NQVJZXyR7UE59LWFwcHMgPSAiU2F0byBkZXNrdG9wIC0gYXBwbGljYXRpb25zIgorUkRFUEVORFNfJHtQTn0tYXBwcyA9ICJcCisgICAgbGVhZnBhZCBcCisgICAgZ3N0LXBsYXllci1iaW4gXAorICAgIHgxMXZuYyBcCisgICAgbWF0Y2hib3gtdGVybWluYWwgXAorICAgIHNhdG8tc2NyZWVuc2hvdCBcCisgICAgJHtGSUxFTUFOQUdFUn0gXAorICAgICR7V0VCfSBcCisgICAgIgorCitTVU1NQVJZXyR7UE59LWdhbWVzID0gIlNhdG8gZGVza3RvcCAtIGdhbWVzIgorUkRFUEVORFNfJHtQTn0tZ2FtZXMgPSAiXAorICAgIG9oLXB1enpsZXMgXAorICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9lbWJsZW0tc3ltYm9saWMtbGluay5wbmcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZW1ibGVtLXN5bWJvbGljLWxpbmsucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZTU1OTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZW1ibGVtLXN5bWJvbGljLWxpbmsucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1mcy1kaXJlY3RvcnkucG5nIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL2dub21lLWZzLWRpcmVjdG9yeS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU5MjFhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1mcy1kaXJlY3RvcnkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1mcy1yZWd1bGFyLnBuZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1mcy1yZWd1bGFyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTc3YThlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL2dub21lLWZzLXJlZ3VsYXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1taW1lLXRleHQtcGxhaW4ucG5nIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL2dub21lLW1pbWUtdGV4dC1wbGFpbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlNGJhZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1taW1lLXRleHQtcGxhaW4ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9uby1kZXNrdG9wLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL25vLWRlc2t0b3AucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzZDZkMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9uby1kZXNrdG9wLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK0Rpc2FibGUgdGhlIGRlc2t0b3AgcHJlZmVyZW5jZXMgbGF1bmNoZXIgYXMgd2UgZG9uJ3QgdXNlIHRoZSBwY21hbmZtIGRlc2t0b3AgaW4KK1NhdG8uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2RhdGEvcGNtYW5mbS1kZXNrdG9wLXByZWYuZGVza3RvcCBiL2RhdGEvcGNtYW5mbS1kZXNrdG9wLXByZWYuZGVza3RvcAoraW5kZXggY2NmOGFiYi4uM2Y2ZmMxYyAxMDA2NDQKKy0tLSBhL2RhdGEvcGNtYW5mbS1kZXNrdG9wLXByZWYuZGVza3RvcC5pbgorKysrIGIvZGF0YS9wY21hbmZtLWRlc2t0b3AtcHJlZi5kZXNrdG9wLmluCitAQCAtNywzICs3LDQgQEAgRXhlYz1wY21hbmZtIC0tZGVza3RvcC1wcmVmCisgU3RhcnR1cE5vdGlmeT10cnVlCisgVGVybWluYWw9ZmFsc2UKKyBOb3RTaG93SW49R05PTUU7WEZDRTtLREU7CisrTm9EaXNwbGF5PXRydWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9wY21hbmZtXzEuMi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL3BjbWFuZm1fMS4yLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ2NzMwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9wY21hbmZtXzEuMi4zLmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiRmFzdCBsaWdodHdlaWdodCB0YWJiZWQgZmlsZW1hbmFnZXIiCitIT01FUEFHRSA9ICJodHRwOi8vcGNtYW5mbS5zb3VyY2Vmb3JnZS5uZXQvIgorCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3BjbWFuZm0uaDtlbmRsaW5lPTIyO21kNT00MTdiMzg1NTc3MWEzYTg3ZjhhZDc1M2Q5OTQ0OTFmMCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZ3NlYWwtZ3RrLWNvbXBhdC5oO2VuZGxpbmU9MjE7bWQ1PTQ2OTIyYzg2OTFmNThkMTI0Zjk0MjBmZTE2MTQ5Y2UyIgorCitTRUNUSU9OID0gIngxMSIKK0RFUEVORFMgPSAiZ3RrKyBzdGFydHVwLW5vdGlmaWNhdGlvbiBsaWJmbSBpbnRsdG9vbC1uYXRpdmUiCitERVBFTkRTX2FwcGVuZF9wb2t5ID0gIiBsaWJvd2wiCisKKworQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjQuKnxpLjg2Lip8YWFyY2g2NC4qfGFybS4qfG1pcHMuKnxwb3dlcnBjLip8c2guKiktKGxpbnV4fGZyZWVic2QuKiknCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3BjbWFuZm0vcGNtYW5mbS0ke1BWfS50YXIueHogXAorCSAgIGZpbGU6Ly9nbm9tZS1mcy1kaXJlY3RvcnkucG5nIFwKKwkgICBmaWxlOi8vZ25vbWUtZnMtcmVndWxhci5wbmcgXAorCSAgIGZpbGU6Ly9nbm9tZS1taW1lLXRleHQtcGxhaW4ucG5nIFwKKwkgICBmaWxlOi8vZW1ibGVtLXN5bWJvbGljLWxpbmsucG5nIFwKKwkgICBmaWxlOi8vbm8tZGVza3RvcC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImM5OTM0MDJkNDA3YjBhM2ZjMDc2Zjg0MmFjMWJjNWM5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNmYThkODJmYzYzYmUxNDcwNDUxNzRiZWYwNzQ4MDdlMWUzMmNlOGM2YmY0ZGJkOGZhZDQ5ZTI2MGJjZjYzODAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgc3RhcnR1cC1ub3RpZmljYXRpb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9CisJaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vcGl4bWFwcy8KKworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9LyoucG5nICR7RH0vJHtkYXRhZGlyfS9waXhtYXBzCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vcGNtYW5mbSIKKworUlJFQ09NTUVORFNfJHtQTn0gKz0gImFkd2FpdGEtaWNvbi10aGVtZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHVsc2VhdWRpby1zYXRvL3B1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0by81MC1zYXRvLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1bHNlYXVkaW8tc2F0by9wdWxzZWF1ZGlvLWNsaWVudC1jb25mLXNhdG8vNTAtc2F0by5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NDkyZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1bHNlYXVkaW8tc2F0by9wdWxzZWF1ZGlvLWNsaWVudC1jb25mLXNhdG8vNTAtc2F0by5jb25mCkBAIC0wLDAgKzEsNyBAQAorIyBXZSByZWx5IG9uIFB1bHNlQXVkaW8ncyBhdXRvc3Bhd24gZmVhdHVyZSB0byBhdXRvbWF0aWNhbGx5IHN0YXJ0IHRoZSBkYWVtb24KKyMgaW4gU2F0by4gVGhlIGdyYXBoaWNhbCBzZXNzaW9uIGluIFNhdG8gcnVucyB1bmRlciByb290LCBob3dldmVyLCBhbmQKKyMgUHVsc2VBdWRpbyBkaXNhYmxlcyBhdXRvc3Bhd25pbmcgZm9yIHJvb3QgYnkgZGVmYXVsdC4gSW4gYSBub3JtYWwgc2V0dXAgaXQncworIyBub3QgZGVzaXJhYmxlIHRvIGF1dG9zcGF3biBmb3Igcm9vdCwgYmVjYXVzZSBpdCBjYW4gZWFzaWx5IGludGVyZmVyZSB3aXRoCisjIG90aGVyIHVzZXJzJyBQdWxzZUF1ZGlvIGluc3RhbmNlcywgYnV0IGluIFNhdG8gdGhlcmUgYXJlIG5vIG90aGVyIHVzZXJzLCBzbworIyBpdCdzIE9LIHRvIGVuYWJsZSB0aGlzIGluIFNhdG8uCithbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3QgPSB5ZXMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHVsc2VhdWRpby1zYXRvL3B1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0b18xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdWxzZWF1ZGlvLXNhdG8vcHVsc2VhdWRpby1jbGllbnQtY29uZi1zYXRvXzEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI3MzM5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHVsc2VhdWRpby1zYXRvL3B1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0b18xLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiL2V0Yy9wdWxzZS9jbGllbnQuY29uZiB0YWlsb3JlZCBmb3IgU2F0byIKK1NFQ1RJT04gPSAibXVsdGltZWRpYSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiZmlsZTovLzUwLXNhdG8uY29uZiIKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBhbGxhcmNoCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wdWxzZS9jbGllbnQuY29uZi5kCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vNTAtc2F0by5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3B1bHNlL2NsaWVudC5jb25mLmQvNTAtc2F0by5jb25mCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vcHVsc2UvY2xpZW50LmNvbmYuZC81MC1zYXRvLmNvbmYiCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9wdWxzZS9jbGllbnQuY29uZi5kLzUwLXNhdG8uY29uZiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy8wMDAxLVVzZS1sYWJzLWluc3RlYWQtb2YtYWJzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzLzAwMDEtVXNlLWxhYnMtaW5zdGVhZC1vZi1hYnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQzZDFkZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy8wMDAxLVVzZS1sYWJzLWluc3RlYWQtb2YtYWJzLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gOTgwOGRjMDllMDg5MzdjOWJmZmQ4NThkM2RlZDQyODIyNWE0MzEyYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDcgU2VwIDIwMTUgMDk6MDI6MzggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gVXNlIGxhYnMgaW5zdGVhZCBvZiBhYnMKKworY2x1ZXZhbHMgaXMgYXJyYXkgb2YgbG9uZ3Mgc28gd2UgaGF2ZSB0byB1c2UgbGFicygpIGluc3RlYWQgb2YgYWJzKCkKK3NpbmNlIGFicygpIHJldHVybnMgaW50CisKK0ZpeGVzCisKK2tlZW4uYzoxNDU4OjE3OiBlcnJvcjogYWJzb2x1dGUgdmFsdWUgZnVuY3Rpb24gJ2FicycgZ2l2ZW4gYW4gYXJndW1lbnQKK29mIHR5cGUgJ2xvbmcnIGJ1dCBoYXMgcGFyYW1ldGVyIG9mIHR5cGUgJ2ludCcgd2hpY2ggbWF5IGNhdXNlCit0cnVuY2F0aW9uIG9mIHZhbHVlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisga2Vlbi5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2tlZW4uYyBiL2tlZW4uYworaW5kZXggYTZhNzIzOC4uMTYzMTk5MiAxMDA2NDQKKy0tLSBhL2tlZW4uYworKysrIGIva2Vlbi5jCitAQCAtMTA0Myw3ICsxMDQzLDcgQEAgZG9uZQorIAkJICAgIGNsdWV2YWxzW2pdICo9IGdyaWRbaV07CisgCQkgICAgYnJlYWs7CisgCQkgIGNhc2UgQ19TVUI6CistCQkgICAgY2x1ZXZhbHNbal0gPSBhYnMoY2x1ZXZhbHNbal0gLSBncmlkW2ldKTsKKysJCSAgICBjbHVldmFsc1tqXSA9IGxhYnMoY2x1ZXZhbHNbal0gLSBncmlkW2ldKTsKKyAJCSAgICBicmVhazsKKyAJCSAgY2FzZSBDX0RJVjoKKyAJCSAgICB7CitAQCAtMTQ1NSw3ICsxNDU1LDcgQEAgc3RhdGljIGludCBjaGVja19lcnJvcnMoY29uc3QgZ2FtZV9zdGF0ZSAqc3RhdGUsIGxvbmcgKmVycm9ycykKKyAJCWNsdWV2YWxzW2pdICo9IHN0YXRlLT5ncmlkW2ldOworIAkJYnJlYWs7CisgCSAgICAgIGNhc2UgQ19TVUI6CistCQljbHVldmFsc1tqXSA9IGFicyhjbHVldmFsc1tqXSAtIHN0YXRlLT5ncmlkW2ldKTsKKysJCWNsdWV2YWxzW2pdID0gbGFicyhjbHVldmFsc1tqXSAtIHN0YXRlLT5ncmlkW2ldKTsKKyAJCWJyZWFrOworIAkgICAgICBjYXNlIENfRElWOgorIAkJeworLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvZml4LWNvbXBpbGluZy1mYWlsdXJlLXdpdGgtb3B0aW9uLWctTy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy9maXgtY29tcGlsaW5nLWZhaWx1cmUtd2l0aC1vcHRpb24tZy1PLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNDZmZWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvZml4LWNvbXBpbGluZy1mYWlsdXJlLXdpdGgtb3B0aW9uLWctTy5wYXRjaApAQCAtMCwwICsxLDUyIEBACitndGsuYzogZml4IGNvbXBpbGluZyBmYWlsdXJlIHdpdGggb3B0aW9uIC1nIC1PCisKK1RoZXJlIHdlcmUgY29tcGlsaW5nIGZhaWx1cmUgd2l0aCBvcHRpb24gLWcgLU8KKy4uLgorLi8uL2d0ay5jOiBJbiBmdW5jdGlvbiAnY29uZmlndXJlX2FyZWEnOgorLi8uL2d0ay5jOjM5NzoyOiBlcnJvcjogJ2NyJyBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rpb24gWy1XZXJyb3I9bWF5YmUtdW5pbml0aWFsaXplZF0KKyAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsCisgIF4KKy4vLi9ndGsuYzozODQ6MTQ6IG5vdGU6ICdjcicgd2FzIGRlY2xhcmVkIGhlcmUKKyAgICAgY2Fpcm9fdCAqY3I7CisgICAgICAgICAgICAgIF4KKy4vLi9ndGsuYzogSW4gZnVuY3Rpb24gJ21haW4nOgorLi8uL2d0ay5jOjI5MTE6NjogZXJyb3I6ICdlcnJvcicgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uIFstV2Vycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWRdCisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xuIiwgcG5hbWUsIGVycm9yKTsKKyAgICAgIF4KK2NjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCisuLi4KKworSW5pdGlhbGl6ZWQgcG9pbnRlciAnY3InIGFuZCAnZXJyb3InIHdpdGggTlVMTAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgZ3RrLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3RrLmMgYi9ndGsuYworaW5kZXggYTJlYmEyYy4uYzU0YmY2MyAxMDA2NDQKKy0tLSBhL2d0ay5jCisrKysgYi9ndGsuYworQEAgLTM4MSw3ICszODEsNyBAQCBzdGF0aWMgdm9pZCBjbGVhcl9iYWNraW5nX3N0b3JlKGZyb250ZW5kICpmZSkKKyAKKyBzdGF0aWMgdm9pZCBzZXR1cF9iYWNraW5nX3N0b3JlKGZyb250ZW5kICpmZSkKKyB7CistICAgIGNhaXJvX3QgKmNyOworKyAgICBjYWlyb190ICpjciA9IE5VTEw7CisgICAgIGludCBpOworIAorICAgICBmZS0+cGl4bWFwID0gZ2RrX3BpeG1hcF9uZXcoZmUtPmFyZWEtPndpbmRvdywgZmUtPnB3LCBmZS0+cGgsIC0xKTsKK0BAIC0yNDgxLDcgKzI0ODEsNyBAQCBjaGFyICpmZ2V0bGluZShGSUxFICpmcCkKKyBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgeworICAgICBjaGFyICpwbmFtZSA9IGFyZ3ZbMF07CistICAgIGNoYXIgKmVycm9yOworKyAgICBjaGFyICplcnJvciA9IE5VTEw7CisgICAgIGludCBuZ2VuZXJhdGUgPSAwLCBwcmludCA9IEZBTFNFLCBweCA9IDEsIHB5ID0gMTsKKyAgICAgaW50IHRpbWVfZ2VuZXJhdGlvbiA9IEZBTFNFLCB0ZXN0X3NvbHZlID0gRkFMU0UsIGxpc3RfcHJlc2V0cyA9IEZBTFNFOworICAgICBpbnQgc29sbiA9IEZBTFNFLCBjb2xvdXIgPSBGQUxTRTsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzL29oLXB1enpsZXMtb3dsLW1lbnUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvb2gtcHV6emxlcy1vd2wtbWVudS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTJjM2FiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzL29oLXB1enpsZXMtb3dsLW1lbnUucGF0Y2gKQEAgLTAsMCArMSwyMDMgQEAKK1RoaXMgcGF0Y2ggZW5hYmxlIG93bCBtZW51LCB3aGljaCBpcyBoaWRkZW4gaW4gdGhlIHRpdGxlIGJhciB0byBzYXZlIHNwYWNlIG9uCitzbWFsbCBzY3JlZW4uIEl0IGhhcyBub3QgYmVlbiB1c2VkIGZvciBhIGxvbmcgdGltZSwgcmViYXNlIG5lZWRlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbmFibGUgZmVhdHVyZV0KKworSW5kZXg6IHNyYy9ndGsuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9ndGsuYwkocmV2aXNpb24gMjIpCisrKysgc3JjL2d0ay5jCSh3b3JraW5nIGNvcHkpCitAQCAtMjgsNiArMjgsOCBAQAorICNpbmNsdWRlIDxnZGsvZ2RreC5oPgorICNpbmNsdWRlIDxnZGstcGl4YnVmL2dkay1waXhidWYuaD4KKyAKKysjaW5jbHVkZSA8bGlib3dsL293bHdpbmRvd21lbnUuaD4KKysKKyAjaW5jbHVkZSA8bGlicnN2Zy9yc3ZnLmg+CisgCisgI2luY2x1ZGUgPFgxMS9YbGliLmg+CitAQCAtMTIzNyw2ICsxMjM5LDcgQEAKKyAgICAgfQorIH0KKyAKKysjaWYgMAorIHN0YXRpYyB2b2lkCisgYWRkX3dpZGdldCAoR3RrVUlNYW5hZ2VyICptZXJnZSwKKyAJICAgIEd0a1dpZGdldCAqd2lkZ2V0LAorQEAgLTEyNDcsMTAgKzEyNTAsMTEgQEAKKyAgICAgZ3RrX2JveF9wYWNrX3N0YXJ0IChib3gsIHdpZGdldCwgRkFMU0UsIEZBTFNFLCAwKTsKKyAKKyAgICAgdG9wbGV2ZWwgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbCAoR1RLX1dJREdFVCAoYm94KSk7CistICAgIGd0a193aWRnZXRfc2hvd19hbGwgKHRvcGxldmVsKTsKKyB9CisrI2VuZGlmCisgCisgc3RhdGljIEd0a0FjdGlvbkVudHJ5IHRvcGxldmVsX2FjdGlvbnNbXSA9IHsKKysgICAgeyAiVG9wIiwgTlVMTCwgIiIgfSwKKyAgICAgeyAiR2FtZSIsIE5VTEwsIE5fKCJHYW1lIikgfSwKKyAgICAgeyAiU2V0dGluZ3MiLCBOVUxMLCBOXygiU2V0dGluZ3MiKSB9LAorICAgICB7ICJIZWxwIiwgTlVMTCwgTl8oIkhlbHAiKSB9LAorQEAgLTEzMDMsMTEgKzEzMDcsMTMgQEAKKyAJCQlmcm9udGVuZCAqZmUpCisgeworICAgICBHU3RyaW5nICp4bWw7CisrICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworICAgICBnYm9vbGVhbiBwcmVzZXRzID0gRkFMU0U7CisgICAgIEdTTGlzdCAqcmFkaW9fZ3JvdXAgPSBOVUxMOworICAgICBpbnQgaTsKKyAKKy0gICAgeG1sID0gZ19zdHJpbmdfbmV3ICgiPHVpPjxtZW51YmFyPjxwbGFjZWhvbGRlciBuYW1lPVwiVHlwZVBsYWNlaG9sZGVyXCI+IgorKyAgICB4bWwgPSBnX3N0cmluZ19uZXcgKCI8dWk+PG1lbnViYXI+PG1lbnUgbmFtZT1cIlRvcE1lbnVcIiBhY3Rpb249XCJUb3BcIj4iCisrCQkJIjxwbGFjZWhvbGRlciBuYW1lPVwiVHlwZVBsYWNlaG9sZGVyXCI+IgorIAkJCSI8bWVudSBuYW1lPVwiU2V0dGluZ3NNZW51XCIgYWN0aW9uPVwiU2V0dGluZ3NcIj4iKTsKKyAKKyAgICAgZm9yIChpID0gMDsgaSA8IG1pZGVuZF9udW1fcHJlc2V0cyhmZS0+bWUpOyBpKyspIHsKK0BAIC0xMzU5LDggKzEzNjUsMTQgQEAKKyAJCQkgIjxtZW51aXRlbSBuYW1lPVwiQ3VzdG9tTWVudVwiIGFjdGlvbj1cIkN1c3RvbVwiLz4iKTsKKyAgICAgfQorICAgICAKKy0gICAgZ19zdHJpbmdfYXBwZW5kICh4bWwsICI8L21lbnU+PC9wbGFjZWhvbGRlcj48L21lbnViYXI+PC91aT4iKTsKKy0gICAgZ3RrX3VpX21hbmFnZXJfYWRkX3VpX2Zyb21fc3RyaW5nIChtZXJnZSwgeG1sLT5zdHIsIC0xLCBOVUxMKTsKKysgICAgZ19zdHJpbmdfYXBwZW5kICh4bWwsICI8L21lbnU+PC9wbGFjZWhvbGRlcj48L21lbnU+PC9tZW51YmFyPjwvdWk+Iik7CisrCisrICAgIGd0a191aV9tYW5hZ2VyX2FkZF91aV9mcm9tX3N0cmluZyAobWVyZ2UsIHhtbC0+c3RyLCAtMSwgJmVycm9yKTsKKysgICAgaWYgKGVycm9yICE9IE5VTEwpIHsKKysJZ193YXJuaW5nICgiRXJyb3IgYWRkaW5nIGN1c3RvbTogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisrCWdfZXJyb3JfZnJlZSAoZXJyb3IpOworKyAgICB9CisrCisgICAgIGdfc3RyaW5nX2ZyZWUgKHhtbCwgVFJVRSk7CisgfQorIAorQEAgLTE0MzQsNiArMTQ0Niw3IEBACisgbmV3X3dpbmRvdyhjaGFyICphcmcsIGNoYXIgKiplcnJvcikKKyB7CisgICAgIGZyb250ZW5kICpmZTsKKysgICAgR0Vycm9yICplcnIgPSBOVUxMOworICAgICBHdGtCb3ggKnZib3g7CisgICAgIEd0a1VJTWFuYWdlciAqbWVyZ2U7CisgICAgIEd0a0FjdGlvbkdyb3VwICphY3Rpb25zOworQEAgLTE0OTYsOCArMTUwOSw2IEBACisgICAgIGd0a193aW5kb3dfYWRkX2FjY2VsX2dyb3VwKEdUS19XSU5ET1coZmUtPndpbmRvdyksIGZlLT5hY2NlbGdyb3VwKTsKKyAKKyAgICAgbWVyZ2UgPSBndGtfdWlfbWFuYWdlcl9uZXcgKCk7CistICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChtZXJnZSksICJhZGRfd2lkZ2V0IiwKKy0JCSAgICAgIEdfQ0FMTEJBQ0sgKGFkZF93aWRnZXQpLCB2Ym94KTsKKyAKKyAgICAgYWN0aW9ucyA9IGd0a19hY3Rpb25fZ3JvdXBfbmV3ICgiUHV6emxlQWN0aW9ucyIpOworICAgICBndGtfYWN0aW9uX2dyb3VwX2FkZF9hY3Rpb25zIChhY3Rpb25zLCB0b3BsZXZlbF9hY3Rpb25zLAorQEAgLTE1MDksMjIgKzE1MjAsMzkgQEAKKyAKKyAgICAgZ3RrX3VpX21hbmFnZXJfaW5zZXJ0X2FjdGlvbl9ncm91cCAobWVyZ2UsIGFjdGlvbnMsIDApOworICAgICAKKy0gICAgZ3RrX3VpX21hbmFnZXJfYWRkX3VpX2Zyb21fZmlsZSAobWVyZ2UsIERBVEFESVIgIi9vaC1wdXp6bGVzL3VpL21lbnUueG1sIiwgTlVMTCk7CisrICAgIGd0a191aV9tYW5hZ2VyX2FkZF91aV9mcm9tX2ZpbGUgKG1lcmdlLCBEQVRBRElSICIvb2gtcHV6emxlcy91aS9tZW51LnhtbCIsIAorKwkJCQkgICAgICZlcnIpOworKyAgICBpZiAoZXJyICE9IE5VTEwpIHsKKysJZ193YXJuaW5nICgiRXJyb3IgbWFraW5nIFVJOiAlcyIsIGVyci0+bWVzc2FnZSk7CisrCWdfZXJyb3JfZnJlZSAoZXJyKTsKKysJZXJyID0gTlVMTDsKKysgICAgfQorIAorICAgICBpZiAodGhlZ2FtZS5jYW5fc29sdmUpIHsKKy0JICAgIGNoYXIgKnN0ciA9ICI8dWk+PG1lbnViYXI+PG1lbnUgbmFtZT1cIkdhbWVNZW51XCIgYWN0aW9uPVwiR2FtZVwiPiIKKysJY2hhciAqc3RyID0gIjx1aT48bWVudWJhcj48bWVudSBuYW1lPVwiVG9wTWVudVwiIGFjdGlvbj1cIlRvcFwiPiIKKysJICAgICI8bWVudSBuYW1lPVwiR2FtZU1lbnVcIiBhY3Rpb249XCJHYW1lXCI+IgorIAkgICAgIjxwbGFjZWhvbGRlciBuYW1lPVwiU29sdmVQbGFjZWhvbGRlclwiPiIKKyAJICAgICI8c2VwYXJhdG9yIG5hbWU9XCJTb2x2ZVNlcFwiLz4iCisgCSAgICAiPG1lbnVpdGVtIG5hbWU9XCJTb2x2ZU1lbnVcIiBhY3Rpb249XCJTb2x2ZVwiLz4iCistCSAgICAiPC9wbGFjZWhvbGRlcj48L21lbnU+PC9tZW51YmFyPjwvdWk+IjsKKysJICAgICI8L3BsYWNlaG9sZGVyPjwvbWVudT48L21lbnU+PC9tZW51YmFyPjwvdWk+IjsKKyAKKy0JZ3RrX3VpX21hbmFnZXJfYWRkX3VpX2Zyb21fc3RyaW5nIChtZXJnZSwgc3RyLCAtMSwgTlVMTCk7CisrCWd0a191aV9tYW5hZ2VyX2FkZF91aV9mcm9tX3N0cmluZyAobWVyZ2UsIHN0ciwgLTEsICZlcnIpOworKwlpZiAoZXJyICE9IE5VTEwpIHsKKysJICAgIGdfd2FybmluZyAoIkVycm9yIGFkZGluZyBzb2x2ZS4gJXMiLCBlcnItPm1lc3NhZ2UpOworKwkgICAgZ19lcnJvcl9mcmVlIChlcnIpOworKwl9CisgICAgIH0KKyAKKyAgICAgaWYgKChuID0gbWlkZW5kX251bV9wcmVzZXRzKGZlLT5tZSkpID4gMCB8fCB0aGVnYW1lLmNhbl9jb25maWd1cmUpIHsKKyAJZ2VuZXJhdGVfc2V0dGluZ3NfbWVudSAobWVyZ2UsIGFjdGlvbnMsIGZlKTsKKyAgICAgfQorIAorKyAgICAvKiBEbyB0aGlzIHNvIHRoYXQgdGhlIG1lbnUgaXMgcGFja2VkIG5vdyBpbnN0ZWFkIG9mIGluIHRoZSBpZGxlIGxvb3AgKi8KKysgICAgZ3RrX3VpX21hbmFnZXJfZW5zdXJlX3VwZGF0ZSAobWVyZ2UpOworKworKyAgICBvd2xfc2V0X3dpbmRvd19tZW51X2l0ZW0gKEdUS19XSU5ET1cgKGZlLT53aW5kb3cpLAorKwkJCSAgICAgIEdUS19NRU5VX0lURU0gKGd0a191aV9tYW5hZ2VyX2dldF93aWRnZXQgKG1lcmdlLCAiL21lbnViYXIvVG9wTWVudSIpKSk7CisrICAgIAorICAgICBzZXR1cF9jb2xvdXJzIChmZSk7CisgICAgIHNldHVwX3BpeGJ1ZnMgKGZlKTsKKyAKK0BAIC0xNTcyLDcgKzE2MDAsNyBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RLX0JVVFRPTl9SRUxFQVNFX01BU0sgfAorIAkJCSAgR0RLX0JVVFRPTl9NT1RJT05fTUFTSyk7CisgCistICAgIC8qIFRoZSB3aW5kb3cgaXMgc2hvd24gb25jZSB0aGUgbWVudWJhciBoYXMgYmVlbiBhZGRlZCAqLworKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsIChmZS0+d2luZG93KTsKKyAgICAgcmV0dXJuIGZlOworIH0KKyAKK0luZGV4OiBzcmMvbWVudS54bWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzcmMvbWVudS54bWwJKHJldmlzaW9uIDIyKQorKysrIHNyYy9tZW51LnhtbAkod29ya2luZyBjb3B5KQorQEAgLTEsMjYgKzEsMjUgQEAKKyA8dWk+CisgPG1lbnViYXI+CistPG1lbnUgbmFtZT0iR2FtZU1lbnUiIGFjdGlvbj0iR2FtZSI+CistCTxtZW51aXRlbSBuYW1lPSJOZXdNZW51IiBhY3Rpb249Ik5ldyIvPgorLQk8bWVudWl0ZW0gbmFtZT0iUmVzdGFydE1lbnUiIGFjdGlvbj0iUmVzdGFydCIvPgorLTwhLS0JPG1lbnVpdGVtIG5hbWU9IlNwZWNpZmljTWVudSIgYWN0aW9uPSJTcGVjaWZpYyIvPiAtLT4KKy0JPG1lbnVpdGVtIG5hbWU9IlJhbmRvbU1lbnUiIGFjdGlvbj0iUmFuZG9tIi8+CistCTxzZXBhcmF0b3IgbmFtZT0iR2FtZVNlcDEiLz4KKy0JPG1lbnVpdGVtIG5hbWU9IkxvYWRNZW51IiBhY3Rpb249IkxvYWQiLz4KKy0JPG1lbnVpdGVtIG5hbWU9IlNhdmVNZW51IiBhY3Rpb249IlNhdmUiLz4KKy0JPHNlcGFyYXRvciBuYW1lPSJHYW1lU2VwMiIvPgorLQk8bWVudWl0ZW0gbmFtZT0iVW5kb01lbnUiIGFjdGlvbj0iVW5kbyIvPgorLQk8bWVudWl0ZW0gbmFtZT0iUmVkb01lbnUiIGFjdGlvbj0iUmVkbyIvPgorLQk8cGxhY2Vob2xkZXIgbmFtZT0iQ29weVBsYWNlaG9sZGVyIi8+CistCTxwbGFjZWhvbGRlciBuYW1lPSJTb2x2ZVBsYWNlaG9sZGVyIi8+CistCTxzZXBhcmF0b3IgbmFtZT0iR2FtZVNlcDMiLz4KKy0JPG1lbnVpdGVtIG5hbWU9IlF1aXRNZW51IiBhY3Rpb249IlF1aXQiLz4KKy08L21lbnU+CisrPG1lbnUgbmFtZT0iVG9wTWVudSIgYWN0aW9uPSJUb3AiPgorKwk8bWVudSBuYW1lPSJHYW1lTWVudSIgYWN0aW9uPSJHYW1lIj4KKysJCTxtZW51aXRlbSBuYW1lPSJOZXdNZW51IiBhY3Rpb249Ik5ldyIvPgorKwkJPG1lbnVpdGVtIG5hbWU9IlJlc3RhcnRNZW51IiBhY3Rpb249IlJlc3RhcnQiLz4KKysJPCEtLQk8bWVudWl0ZW0gbmFtZT0iU3BlY2lmaWNNZW51IiBhY3Rpb249IlNwZWNpZmljIi8+IC0tPgorKwkJPG1lbnVpdGVtIG5hbWU9IlJhbmRvbU1lbnUiIGFjdGlvbj0iUmFuZG9tIi8+CisrCQk8c2VwYXJhdG9yIG5hbWU9IkdhbWVTZXAxIi8+CisrCQk8bWVudWl0ZW0gbmFtZT0iTG9hZE1lbnUiIGFjdGlvbj0iTG9hZCIvPgorKwkJPG1lbnVpdGVtIG5hbWU9IlNhdmVNZW51IiBhY3Rpb249IlNhdmUiLz4KKysJCTxzZXBhcmF0b3IgbmFtZT0iR2FtZVNlcDIiLz4KKysJCTxtZW51aXRlbSBuYW1lPSJVbmRvTWVudSIgYWN0aW9uPSJVbmRvIi8+CisrCQk8bWVudWl0ZW0gbmFtZT0iUmVkb01lbnUiIGFjdGlvbj0iUmVkbyIvPgorKwkJPHBsYWNlaG9sZGVyIG5hbWU9IkNvcHlQbGFjZWhvbGRlciIvPgorKwkJPHBsYWNlaG9sZGVyIG5hbWU9IlNvbHZlUGxhY2Vob2xkZXIiLz4KKysJPC9tZW51PgorIAorLTxwbGFjZWhvbGRlciBuYW1lPSJUeXBlUGxhY2Vob2xkZXIiLz4KKy0KKy08bWVudSBuYW1lPSJIZWxwTWVudSIgYWN0aW9uPSJIZWxwIj4KKysJPHBsYWNlaG9sZGVyIG5hbWU9IlR5cGVQbGFjZWhvbGRlciIvPgorIAk8bWVudWl0ZW0gbmFtZT0iQWJvdXRNZW51IiBhY3Rpb249IkFib3V0Ii8+CisrCTxtZW51aXRlbSBuYW1lPSJRdWl0TWVudSIgYWN0aW9uPSJRdWl0Ii8+CisrCisgPC9tZW51PgorIDwvbWVudWJhcj4KKyA8L3VpPgorSW5kZXg6IHNyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9NYWtlZmlsZS5hbQkocmV2aXNpb24gMjIpCisrKysgc3JjL01ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCitAQCAtMTAsNyArMTAsNyBAQAorIAlsaWdodHVwIGxvb3B5IG1hcCBtaW5lcyBuZXQgbmV0c2xpZGUgcGF0dGVybiBwZWdzIHJlY3Qgc2FtZWdhbWUgXAorIAlzaXh0ZWVuIHNsYW50IHNvbG8gdGVudHMgdHdpZGRsZSB1bnRhbmdsZQorIAorLWxpYnB1enpsZXNfbGFfTElCQUREID0gJChQVVpaTEVTX0xJQlMpCisrbGlicHV6emxlc19sYV9MSUJBREQgPSAkKFBVWlpMRVNfTElCUykgLWxvd2wKKyBsaWJwdXp6bGVzX2xhX1NPVVJDRVMgPSBjb21iaS5jIFwKKyAJCQljb25maWd1cmF0aW9uLmMgXAorIAkJCWRyYXdpbmcuYyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvb2gtcHV6emxlc19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvb2gtcHV6emxlc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjZDJjYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9vaC1wdXp6bGVzX2dpdC5iYgpAQCAtMCwwICsxLDc0IEBACitTVU1NQVJZID0gIlBvcnRhYmxlIFB1enpsZSBDb2xsZWN0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL28taGFuZC5jb20vIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5DRTttZDU9ZjU2ZWM2NzcyZGQxYzdjMzY3MDY3YmJlYThlYTE2NzUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3RyZWUyMzQuaDtlbmRsaW5lPTI4O21kNT1hMTg4ZTZkMjUwNDMwY2EwOTRhNTRhODJmNDg0NzJhNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvdHJlZTIzNC5jO2VuZGxpbmU9Mjg7bWQ1PWI0ZmViMTk3NmZlZWJmOGYxMzc5MDkzZWQ1MmYyOTQ1IgorCitTRUNUSU9OID0gIngxMSIKK0RFUEVORFMgPSAiZ3RrKyBnY29uZiBpbnRsdG9vbC1uYXRpdmUgbGlicnN2ZyIKKworIyBsaWJvd2wgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworREVQRU5EU19hcHBlbmRfcG9reSA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnbGlib3dsJywgJycsIGQpfSIKKworIyBSZXF1aXJlcyBnZGsvZ2RreC5oIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IGd0ayB3aGVuIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ1JFViA9ICI5MmYxYTIwZTRiNzJlZWQ3YTM1YjAwOTg0ZDk3OTNiNTFkYzJmYjNiIgorUFYgPSAiMC4yK2dpdCR7U1JDUFZ9IgorUFIgPSAicjEwIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKK1NSQ19VUklfYXBwZW5kX3Bva3kgPSAiIGZpbGU6Ly9vaC1wdXp6bGVzLW93bC1tZW51LnBhdGNoO3N0cmlwbGV2ZWw9MCAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworYmluZGlyID0gIi91c3IvZ2FtZXMiCisKK0VYVFJBX09FTUFLRSArPSAiR0NPTkZfRElTQUJMRV9NQUtFRklMRV9TQ0hFTUFfSU5TVEFMTD0xIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLworCisgICAgY2QgJHtEfS8ke3ByZWZpeH0vZ2FtZXMKKyAgICBmb3IgcHJvZyBpbiAqOyBkbworCWlmIFsgLXggJHByb2cgXTsgdGhlbgorICAgICAgICAgICAgIyBDb252ZXJ0IHByb2cgdG8gVGl0bGUgQ2FzZQorICAgICAgICAgICAgdGl0bGU9JChlY2hvICRwcm9nIHwgc2VkICdzL1woXlx8IFwpLi9cVSYvZycpCisJICAgIGVjaG8gIm1ha2luZyAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyRwcm9nLmRlc2t0b3AiCisJICAgIGNhdCA8PFNUT1AgPiAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyRwcm9nLmRlc2t0b3AKK1tEZXNrdG9wIEVudHJ5XQorTmFtZT0kdGl0bGUKK0V4ZWM9JHtwcmVmaXh9L2dhbWVzLyRwcm9nCitJY29uPWFwcGxpY2F0aW9ucy1nYW1lcworVGVybWluYWw9ZmFsc2UKK1R5cGU9QXBwbGljYXRpb24KK0NhdGVnb3JpZXM9R2FtZTsKK1N0YXJ0dXBOb3RpZnk9dHJ1ZQorWC1NQi1TaW5nbGVJbnN0YW5jZT10cnVlCitDb21tZW50PVBsYXkgJHRpdGxlLgorU1RPUAorICAgICAgICBmaQorICAgIGRvbmUKK30KKworUEFDS0FHRVMgKz0gIiR7UE59LWV4dHJhIgorUkRFUEVORFNfJHtQTn0tZXh0cmEgKz0gIm9oLXB1enpsZXMiCisKK0ZJTEVTXyR7UE59ID0gIi91c3Ivc2hhcmUvcGl4bWFwcyAvdXNyL3NoYXJlL29oLXB1enpsZXMvIgorRklMRVNfJHtQTn0tZGJnICs9ICIvdXNyL2dhbWVzLy5kZWJ1Zy8qIgorRklMRVNfJHtQTn0tZXh0cmEgPSAiL3Vzci9nYW1lcy8gL3Vzci9zaGFyZS9hcHBsaWNhdGlvbnMgL2V0Yy9nY29uZi9zY2hlbWFzIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIHZhciA9IGJiLmRhdGEuZXhwYW5kKCJGSUxFU18ke1BOfSIsIGQsIDEpCisgICAgZGF0YSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkKKyAgICBmb3IgbmFtZSBpbiAoImJyaWRnZXMiLCAiZmlmdGVlbiIsICJpbmVydGlhIiwgIm1hcCIsICJzYW1lZ2FtZSIsICJzbGFudCIpOgorICAgICAgICBkYXRhID0gZGF0YSArICIgL3Vzci9nYW1lcy8lcyIgJSBuYW1lCisgICAgICAgIGRhdGEgPSBkYXRhICsgIiAvdXNyL3NoYXJlL2FwcGxpY2F0aW9ucy8lcy5kZXNrdG9wIiAlIG5hbWUKKyAgICAgICAgZGF0YSA9IGRhdGEgKyAiIC9ldGMvZ2NvbmYvc2NoZW1hcy8lcy5zY2hlbWFzIiAlIG5hbWUKKyAgICBkLnNldFZhcih2YXIsIGRhdGEpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvcHV6emxlc19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvcHV6emxlc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU4MjZjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9wdXp6bGVzX2dpdC5iYgpAQCAtMCwwICsxLDYxIEBACitTVU1NQVJZID0gIlNpbW9uIFRhdGhhbSdzIFBvcnRhYmxlIFB1enpsZSBDb2xsZWN0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9wdXp6bGVzLyIKKworREVQRU5EUyA9ICJndGsrIGxpYnh0IgorCisjIFRoZSBsaWJ4dCByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOQ0U7bWQ1PTMzYmNkNGJjZThmM2MxOTdmMmFlZmJkYmQyZDI5OWJjIgorCitTUkNfVVJJID0gImdpdDovL2dpdC50YXJ0YXJ1cy5vcmcvc2ltb24vcHV6emxlcy5naXQgXAorICAgICAgICAgICBmaWxlOi8vZml4LWNvbXBpbGluZy1mYWlsdXJlLXdpdGgtb3B0aW9uLWctTy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVzZS1sYWJzLWluc3RlYWQtb2YtYWJzLnBhdGNoIFwKKyIKK1NSQ1JFViA9ICJjMjk2MzAxYTA2Y2U0OWI4N2M5NTRjOWQxNTQ1MjUyMWRmZWRkZjFhIgorUEUgPSAiMSIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICAgLi9ta2ZpbGVzLnBsCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7cHJlZml4fS9iaW4vKiAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke3ByZWZpeH0vYmluLy5kZWJ1ZyIKKworZG9faW5zdGFsbCAoKSB7CisgICAgcm0gLXJmICR7RH0vKgorICAgIGV4cG9ydCBwcmVmaXg9JHtEfQorICAgIGV4cG9ydCBERVNURElSPSR7RH0KKyAgICBpbnN0YWxsIC1kICR7RH0vJHtwcmVmaXh9L2Jpbi8KKyAgICBvZV9ydW5tYWtlIGluc3RhbGwKKworCisgICAgaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLworCisgICAgIyBDcmVhdGUgZGVza3RvcCBzaG9ydGN1dHMKKyAgICBjZCAke0R9LyR7cHJlZml4fS9iaW4KKyAgICBmb3IgcHJvZyBpbiAqOyBkbworCWlmIFsgLXggJHByb2cgXTsgdGhlbgorICAgICAgICAgICAgIyBDb252ZXJ0IHByb2cgdG8gVGl0bGUgQ2FzZQorICAgICAgICAgICAgdGl0bGU9JChlY2hvICRwcm9nIHwgc2VkICdzL1woXlx8IFwpLi9cVSYvZycpCisJICAgIGVjaG8gIm1ha2luZyAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyRwcm9nLmRlc2t0b3AiCisJICAgIGNhdCA8PFNUT1AgPiAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyRwcm9nLmRlc2t0b3AKK1tEZXNrdG9wIEVudHJ5XQorTmFtZT0kdGl0bGUKK0V4ZWM9JHtwcmVmaXh9L2Jpbi8kcHJvZworSWNvbj1hcHBsaWNhdGlvbnMtZ2FtZXMKK1Rlcm1pbmFsPWZhbHNlCitUeXBlPUFwcGxpY2F0aW9uCitDYXRlZ29yaWVzPUdhbWU7CitTdGFydHVwTm90aWZ5PXRydWUKK1gtTUItU2luZ2xlSW5zdGFuY2U9dHJ1ZQorU1RPUAorICAgICAgICBmaQorICAgIGRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YTQzYzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUuaW5jCkBAIC0wLDAgKzEsNTggQEAKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorU1VNTUFSWSA9ICJyeHZ0IHRlcm1pbmFsIGNsb25lIHN1cHBvcnRpbmcgdW5pY29kZSIKK0RFU0NSSVBUSU9OID0gInJ4dnQtdW5pY29kZSBpcyBhIGNsb25lIG9mIHRoZSB3ZWxsIGtub3duIFwKK3Rlcm1pbmFsIGVtdWxhdG9yIHJ4dnQsIG1vZGlmaWVkIHRvIHN0b3JlIHRleHQgaW4gVW5pY29kZSBcCisoZWl0aGVyIFVDUy0yIG9yIFVDUy00KSBhbmQgdG8gdXNlIGxvY2FsZS1jb3JyZWN0IGlucHV0IGFuZCBcCitvdXRwdXQuIEl0IGFsc28gc3VwcG9ydHMgbWl4aW5nIG11bHRpcGxlIGZvbnRzIGF0IHRoZSBcCitzYW1lIHRpbWUsIGluY2x1ZGluZyBYZnQgZm9udHMuIgorREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4dCBsaWJ4ZnQgZ2RrLXBpeGJ1ZiIKKworU1JDX1VSSSA9ICJodHRwOi8vZGlzdC5zY2htb3JwLmRlL3J4dnQtdW5pY29kZS9BdHRpYy9yeHZ0LXVuaWNvZGUtJHtQVn0udGFyLmJ6MiBcCisJICAgZmlsZTovL3h3Yy5wYXRjaCBcCisJICAgZmlsZTovL3J4dnQuZGVza3RvcCBcCisJICAgZmlsZTovL3J4dnQucG5nIgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK1BST1ZJREVTID0gInZpcnR1YWwveC10ZXJtaW5hbC1lbXVsYXRvciIKK0FMVEVSTkFUSVZFXyR7UE59ID0gIngtdGVybWluYWwtZW11bGF0b3IiCitBTFRFUk5BVElWRV9UQVJHRVRbeC10ZXJtaW5hbC1lbXVsYXRvcl0gPSAiJHtiaW5kaXJ9L3J4dnQiCisKK0NGTEFHU19hcHBlbmQgPSAiIC1mcGVybWlzc2l2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXhpbSBcCisJCS0tZW5hYmxlLXV0bXAgLS1lbmFibGUtd3RtcCAtLWVuYWJsZS1sYXN0bG9nIFwKKwkJLS13aXRoLXRlcm09cnh2dCAtLWVuYWJsZS1rZWVwc2Nyb2xsaW5nIFwKKwkJLS1lbmFibGUteGZ0IC0td2l0aC1uYW1lPXJ4dnQgLS1lbmFibGUtZnJpbGxzIFwKKwkJLS1lbmFibGUtc3dhcHNjcmVlbiAtLWVuYWJsZS10cmFuc3BhcmVuY3kgXAorCQktLXdpdGgtY29kZXNldHM9ZXUgLS1lbmFibGUtcG9pbnRlci1ibGFuayBcCisJCS0tZW5hYmxlLXRleHQtYmxpbmsgLS1lbmFibGUtcnh2dC1zY3JvbGwgXAorCQktLWVuYWJsZS1jb21iaW5pbmcgLS1kaXNhYmxlLXBlcmwgXAorCQktLXdpdGgteD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tzdGFydHVwXSA9ICItLWVuYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbiwtLWRpc2FibGUtc3RhcnR1cC1ub3RpZmljYXRpb24sc3RhcnR1cC1ub3RpZmljYXRpb24sIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJaWYgWyAhIC1lICR7U30vYWNpbmNsdWRlLm00IF07IHRoZW4KKwkJY3AgJHtTfS9hY2xvY2FsLm00ICR7U30vYWNpbmNsdWRlLm00CisJZmkKK30KKworZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKwllY2hvICcjZGVmaW5lIFVUTVBfRklMRSAiJHtsb2NhbHN0YXRlZGlyfS9ydW4vdXRtcCInID4+IGNvbmZpZy5oCisJZWNobyAnI2RlZmluZSBXVE1QX0ZJTEUgIiR7bG9jYWxzdGF0ZWRpcn0vbG9nL3d0bXAiJyA+PiBjb25maWcuaAorCWVjaG8gJyNkZWZpbmUgTEFTVExPR19GSUxFICIke2xvY2Fsc3RhdGVkaXJ9L2xvZy9sYXN0bG9nIicgPj4gY29uZmlnLmgKKwllY2hvICcjZGVmaW5lIEhBVkVfWExPQ0FMRSAxJyA+PiBjb25maWcuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0KKwlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMKKwlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9waXhtYXBzLworCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcnh2dC5wbmcgJHtEfS8ke2RhdGFkaXJ9L3BpeG1hcHMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9yeHZ0LmRlc2t0b3AgJHtEfS8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucworfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvcnh2dC5kZXNrdG9wICR7ZGF0YWRpcn0vcGl4bWFwcy9yeHZ0LnBuZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS9yeHZ0LmRlc2t0b3AgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUvcnh2dC5kZXNrdG9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MmVhNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUvcnh2dC5kZXNrdG9wCkBAIC0wLDAgKzEsOSBAQAorW0Rlc2t0b3AgRW50cnldCitWZXJzaW9uPTEuMAorTmFtZT1UZXJtaW5hbAorQ29tbWVudD1BIHVuaWNvZGUgY2FwYWJsZSByeHZ0IGNsb25lCitFeGVjPXJ4dnQKK0ljb249dGVybWluYWwKK1Rlcm1pbmFsPWZhbHNlCitUeXBlPUFwcGxpY2F0aW9uCitDYXRlZ29yaWVzPVV0aWxpdHk7VGVybWluYWxFbXVsYXRvcjsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS9yeHZ0LnBuZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS9yeHZ0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTZmYTJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlL3J4dnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS94d2MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUveHdjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZWZlZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUveHdjLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitkaWZmIC1ydU4gcnh2dC11bmljb2RlLTkuMTAtb3JpZy8vc3JjL3NjcmVlbi5DIHJ4dnQtdW5pY29kZS05LjEwL3NyYy9zY3JlZW4uQworLS0tIHJ4dnQtdW5pY29kZS05LjEwLW9yaWcvL3NyYy9zY3JlZW4uQwkyMDExLTA0LTE5IDEzOjM0OjAxLjMyNzY2NDk4NCArMDgwMAorKysrIHJ4dnQtdW5pY29kZS05LjEwL3NyYy9zY3JlZW4uQwkyMDExLTA0LTE5IDEzOjM0OjQ3LjAzNzY2NTAwMSArMDgwMAorQEAgLTMxNTIsNyArMzE1Miw3IEBACisgICAgICAgcmV0dXJuIGZhbHNlOworICAgICB9CisgCistI2lmIDAKKysjaWYgSEFWRV9YV0MKKyAgIFhUZXh0UHJvcGVydHkgY3Q7CisgCisgICBpZiAoWHdjVGV4dExpc3RUb1RleHRQcm9wZXJ0eSAoZHB5LCAmc2VsZWN0aW9uLnRleHQsIDEsIFhTdHJpbmdTdHlsZSwgJmN0KSA+PSAwKQorQEAgLTM3MzQsOSArMzczNCwxMSBAQAorICAgICAgICAgfQorICAgICAgIGVsc2UKKyAjZW5kaWYKKysjaWZkZWYgSEFWRV9YV0MKKyAgICAgICBpZiAoWHdjVGV4dExpc3RUb1RleHRQcm9wZXJ0eSAoZHB5LCAmY2wsIDEsIChYSUNDRW5jb2RpbmdTdHlsZSkgc3R5bGUsICZjdCkgPj0gMCkKKyAgICAgICAgIGZyZWVjdCA9IDE7CisgICAgICAgZWxzZQorKyNlbmRpZgorICAgICAgICAgeworICAgICAgICAgICAvKiBpZiB3ZSBmYWlsZWQgdG8gY29udmVydCB0aGVuIHNlbmQgaXQgcmF3ICovCisgICAgICAgICAgIGN0LnZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKiljbDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZV85LjIwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlXzkuMjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4MGVjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZV85LjIwLmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSByeHZ0LXVuaWNvZGUuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uQztiZWdpbmxpbmU9MTtlbmRsaW5lPTMxO21kNT03NzU0ODUzOThhMDlmYTdhZWU2ZjkwNDY0YWY4ODQzMiIKKworU1JDX1VSSVttZDVzdW1dID0gIjRhNWI4MjNmMDhkMjEwMzZmOTRhNmM1MWU5NGQwMjViIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU3M2UxM2ZlNjRiNTlmZDNjOGU2ZTIwYzAwZjE0OWQzODg3NDFmMTQxYjgxNTVlNDcwMGQzZWQ0MGFhOTRiNGUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGVfOS4yMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZV85LjIxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNDk0OTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGVfOS4yMS5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgcnh2dC11bmljb2RlLmluYworCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uQztiZWdpbmxpbmU9MTtlbmRsaW5lPTMxO21kNT03ZGFjMDM5NTgwNjU3MDg1NmUwMzdmOThhYmE4NTEzYiIKKworU1JDX1VSSVttZDVzdW1dID0gImE5YTA2YzYwODI1OGM1ZmQyNDdjMzcyNWQ4ZjQ0NTgyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc1MjcwZWQ3MmJjNTg5NWE2NGExZDczOTJiZjQ1YTYyMjIwNDE5MjM3MWMzOTY1YmQzZGQ5NzhkYzA4ODk1NmIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NhdG8taWNvbi10aGVtZS9zYXRvLWljb24tdGhlbWUvMDAwMS1Jbmhlcml0LXRoZS1HTk9NRS1pY29uLXRoZW1lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lLzAwMDEtSW5oZXJpdC10aGUtR05PTUUtaWNvbi10aGVtZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzE3NmVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lLzAwMDEtSW5oZXJpdC10aGUtR05PTUUtaWNvbi10aGVtZS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIGI5ZjAyOTg5MzEwYTNjOTIwNTg5ZjFhYTY0NmJjYmYxNmIyNTcyYTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogV2VkLCAxMyBKdW4gMjAxMiAxMTowNzozMyArMDEwMAorU3ViamVjdDogW1BBVENIXSBJbmhlcml0IHRoZSBHTk9NRSBpY29uIHRoZW1lCisKK0lmIHRoZSBHTk9NRSBpY29uIHRoZW1lIGlzbid0IGluc3RhbGxlZCB0aGlzIGlzIGEgbm8tb3AsIGJ1dCBpZiBpdCBpcyB0aGVuCit5b3UnbGwgZ2V0IGZhbGxiYWNrIGZyb20gU2F0byB0byBHTk9NRSBmb3IgaWNvbnMgdGhhdCBhcmUgbm90IGluIFNhdG8uCisKK0FzIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0aGUgZnVsbCBHTk9NRSBpY29uIHRoZW1lIGRlcGVuZCBvbiBnbm9tZS1pY29uLXRoZW1lLAordGhpcyBqdXN0IHdvcmtzLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CistLS0KKyBpbmRleC50aGVtZSB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvaW5kZXgudGhlbWUgYi9pbmRleC50aGVtZQoraW5kZXggYzRiMDNhNy4uNjg4ZmJiZiAxMDA2NDQKKy0tLSBhL2luZGV4LnRoZW1lCisrKysgYi9pbmRleC50aGVtZQorQEAgLTEsNiArMSw3IEBACisgW0ljb24gVGhlbWVdCisgTmFtZT1TYXRvCisgQ29tbWVudD1TYXRvIGljb24gdGhlbWUKKytJbmhlcml0cz1BZHdhaXRhCisgCisgRGlyZWN0b3JpZXM9MTZ4MTYvYXBwcywxNngxNi9zdGF0dXMsMTZ4MTYvc3RvY2ssMTZ4MTYvcGxhY2VzLDE2eDE2L21pbWV0eXBlcywxNngxNi9kZXZpY2VzLDE2eDE2L2FjdGlvbnMsMjJ4MjIvYXBwcywyMngyMi9zdGF0dXMsMjJ4MjIvc3RvY2ssMjJ4MjIvcGxhY2VzLDIyeDIyL21pbWV0eXBlcywyMngyMi9kZXZpY2VzLDIyeDIyL2FjdGlvbnMsMzJ4MzIvYXBwcywzMngzMi9zdGF0dXMsMzJ4MzIvc3RvY2ssMzJ4MzIvcGxhY2VzLDMyeDMyL21pbWV0eXBlcywzMngzMi9kZXZpY2VzLDMyeDMyL2FjdGlvbnMsNDh4NDgvYXBwcyw0OHg0OC9zdGF0dXMsNDh4NDgvc3RvY2ssNDh4NDgvcGxhY2VzLDQ4eDQ4L21pbWV0eXBlcyw0OHg0OC9kZXZpY2VzLDQ4eDQ4L2FjdGlvbnMsNjR4NjQvYXBwcyw2NHg2NC9zdGF0dXMsNjR4NjQvc3RvY2ssNjR4NjQvcGxhY2VzLDY0eDY0L21pbWV0eXBlcyw2NHg2NC9kZXZpY2VzLDY0eDY0L2FjdGlvbnMsCisgCistLSAKKzEuNy4xMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NhdG8taWNvbi10aGVtZS9zYXRvLWljb24tdGhlbWVfMC40LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NhdG8taWNvbi10aGVtZS9zYXRvLWljb24tdGhlbWVfMC40LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VkNzM1ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1pY29uLXRoZW1lL3NhdG8taWNvbi10aGVtZV8wLjQuMS5iYgpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIlNhdG8gaWNvbiB0aGVtZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuby1oYW5kLmNvbSIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkNDLUJZLVNBLTMuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU2YTgzMGJiZTZlNDY5N2ZlNmNiYmFlMDFiYjdjMmIyIgorU0VDVElPTiA9ICJ4MTEiCisKK1BSID0gInI2IgorCitERVBFTkRTID0gImljb24tbmFtaW5nLXV0aWxzLW5hdGl2ZSBsaWJ4bWwtc2ltcGxlLXBlcmwtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly9wb2t5bGludXgub3JnL3JlbGVhc2VzL3NhdG8vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUluaGVyaXQtdGhlLUdOT01FLWljb24tdGhlbWUucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NmE4NDdmMzEyOGE0M2E5Y2YyM2I3MDI5YTY1NmY1MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwYjBhMjgwN2E2YTk2OTE4YWM3OTlhODYwOTRlYzNlOGUyYzg5MmJlMGZkNjc5YTQyMzJjMmE3N2YyZjYxNzMyIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYWxsYXJjaCBndGstaWNvbi1jYWNoZSBwZXJsbmF0aXZlCisKKyMgVGhlIGNvbmZpZ3VyZSBzY3JpcHQgdXNlcyBwa2ctY29uZmlnIHRvIGZpbmQgbmF0aXZlIGJpbmFyaWVzIHRvIGV4ZWN1dGUsIHNvCisjIHRlbGwgaXQgdG8gdXNlIG91ciBwa2ctY29uZmlnLW5hdGl2ZSB3cmFwcGVyLgorZXhwb3J0IFBLR19DT05GSUcgPSAicGtnLWNvbmZpZy1uYXRpdmUiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2ljb25zL1NhdG8iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWZpbmQgJHtEfSR7ZGF0YWRpcn0vaWNvbnMvU2F0by8gLW1heGRlcHRoIDEgLXR5cGUgZCAtZXhlYyBsbiAtcyBwcmVmZXJlbmNlcy1zeXN0ZW0ucG5nIHt9L2FwcHMvcHJlZmVyZW5jZXMtZGVza3RvcC5wbmcgXDsKKwlmaW5kICR7RH0ke2RhdGFkaXJ9L2ljb25zL1NhdG8vIC1tYXhkZXB0aCAxIC10eXBlIGQgLWV4ZWMgbG4gLXMgZmlsZS1tYW5hZ2VyLnBuZyB7fS9hcHBzL3N5c3RlbS1maWxlLW1hbmFnZXIucG5nIFw7CisJZmluZCAke0R9JHtkYXRhZGlyfS9pY29ucy9TYXRvLyAtbWF4ZGVwdGggMSAtdHlwZSBkIC1leGVjIGxuIC1zIC4uL2FwcHMvdGVybWluYWwucG5nIHt9L3BsYWNlcy9jb21wdXRlci5wbmcgXDsKK30KKworIyBFeHBsaWN0bHkgc2V0dGluZyAiU2F0byIgYXMgdGhlIGRlZmF1bHQgaWNvbiB0aGVtZSB0byBhdm9pZCBmbGlja2VyaW5nIGZyb20KKyMgdGhlIGRlc2t0b3AgYW5kIHNldHRpbmdzIGRhZW1vbiByYWNpbmcuICBUaGlzIHNob3VsZG4ndCBiZSBkb25lIGhlcmUgYnV0IGluIHRoZSBzYXRvIGltYWdlCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworICAgIG1rZGlyIC1wICREL2V0Yy9ndGstMi4wCisKKyAgICBncmVwIC1zIC1xIC1lIF5ndGstaWNvbi10aGVtZS1uYW1lLipcIlNhdG9cIiAkRC9ldGMvZ3RrLTIuMC9ndGtyYyB8fCBcCisgICAgICAgIGVjaG8gJ2d0ay1pY29uLXRoZW1lLW5hbWUgPSAiU2F0byInID4+ICREL2V0Yy9ndGstMi4wL2d0a3JjCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NhdG8tc2NyZWVuc2hvdC9zYXRvLXNjcmVlbnNob3RfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLXNjcmVlbnNob3Qvc2F0by1zY3JlZW5zaG90X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Nzk0MDMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLXNjcmVlbnNob3Qvc2F0by1zY3JlZW5zaG90X2dpdC5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIlVsdHJhLXNpbXBsZSBzY3JlZW4gY2FwdHVyZSB1dGlsaXR5LCBhaW1lZCBhdCBoYW5kaGVsZCBkZXZpY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vLWhhbmQuY29tIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tYWluLmM7ZW5kbGluZT05O21kNT0wMjNlMTRkNjQwNGQwYTk2MWViOTdjYmQwMTFmYzE0MSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zY3JlZW5zaG90LXVpLmg7ZW5kbGluZT05O21kNT02MzhkOWZmYTgzZTkzMjVhMzZkZjIyNDE2NmVkNmFkMCIKKworREVQRU5EUyA9ICJtYXRjaGJveC1wYW5lbC0yIgorU1JDUkVWID0gIjNhOTY4OGU4YTAxYjYzYTc4ZjQwMmI0ZTdjMGI4YjAwNWZjZGZhMjkiCitQViA9ICIwLjErZ2l0JHtTUkNQVn0iCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9zY3JlZW5zaG90IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5zbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLy5kZWJ1ZyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXJtICR7RH0ke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5sYQorfQorCisjIFRoZSBtYXRjaGJveC1wYW5lbC0yIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy83MHNldHRpbmdzLWRhZW1vbi5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzLzcwc2V0dGluZ3MtZGFlbW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Mzc0MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy83MHNldHRpbmdzLWRhZW1vbi5zaApAQCAtMCwwICsxIEBACisvdXNyL2Jpbi9zZXR0aW5ncy1kYWVtb24gJgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vZmlsZXMvYWRkc291bmRrZXlzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vZmlsZXMvYWRkc291bmRrZXlzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZjA2ZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy9hZGRzb3VuZGtleXMucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBzZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzZXR0aW5ncy1kYWVtb24ub3JpZy9zZXR0aW5ncy1kYWVtb24uYwkyMDA5LTA1LTIyIDE0OjU3OjA1LjAwMDAwMDAwMCArMDEwMAorKysrIHNldHRpbmdzLWRhZW1vbi9zZXR0aW5ncy1kYWVtb24uYwkyMDA5LTA1LTIyIDE0OjU4OjIyLjAwMDAwMDAwMCArMDEwMAorQEAgLTE4Nyw2ICsxODcsMTAgQEAKKyAgICAgR0NPTkZfVkFMVUVfU1RSSU5HLCB0cmFuc2xhdGVfc3RyaW5nX3N0cmluZyB9LAorICAgeyAiL2Rlc2t0b3AvcG9reS9pbnRlcmZhY2UvZ3RrX2NvbG9yX3NjaGVtZSIsICJHdGsvQ29sb3JTY2hlbWUiLAorICAgICBHQ09ORl9WQUxVRV9TVFJJTkcsIHRyYW5zbGF0ZV9zdHJpbmdfc3RyaW5nIH0sCisrICB7ICIvZGVza3RvcC9nbm9tZS9zb3VuZC90aGVtZV9uYW1lIiwgIk5ldC9Tb3VuZFRoZW1lTmFtZSIsCisrICAgIEdDT05GX1ZBTFVFX1NUUklORywgICB0cmFuc2xhdGVfc3RyaW5nX3N0cmluZyB9LAorKyAgeyAiL2Rlc2t0b3AvZ25vbWUvc291bmQvZXZlbnRfc291bmRzIiwgIk5ldC9FbmFibGVFdmVudFNvdW5kcyIgLAorKyAgICBHQ09ORl9WQUxVRV9CT09MLCAgICAgdHJhbnNsYXRlX2Jvb2xfaW50IH0sCisgfTsKKyAKKyBzdGF0aWMgY29uc3QgVHJhbnNsYXRpb25FbnRyeSoKK0luZGV4OiBzZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uLnNjaGVtYXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzZXR0aW5ncy1kYWVtb24ub3JpZy9zZXR0aW5ncy1kYWVtb24uc2NoZW1hcwkyMDA5LTA1LTIyIDE1OjQ5OjE3LjAwMDAwMDAwMCArMDEwMAorKysrIHNldHRpbmdzLWRhZW1vbi9zZXR0aW5ncy1kYWVtb24uc2NoZW1hcwkyMDA5LTA1LTIyIDE1OjUxOjMxLjAwMDAwMDAwMCArMDEwMAorQEAgLTE5Niw2ICsxOTYsMjcgQEAKKyAgICAgPC9sb2NhbGU+CisgICA8L3NjaGVtYT4KKyAKKysgIDxzY2hlbWE+CisrICAgIDxrZXk+L3NjaGVtYXMvZGVza3RvcC9nbm9tZS9zb3VuZC90aGVtZV9uYW1lPC9rZXk+CisrICAgIDxhcHBseXRvPi9kZXNrdG9wL2dub21lL3NvdW5kL3RoZW1lX25hbWU8L2FwcGx5dG8+CisrICAgIDxvd25lcj5nbm9tZTwvb3duZXI+CisrICAgIDx0eXBlPnN0cmluZzwvdHlwZT4KKysgICAgPGRlZmF1bHQ+ZnJlZWRlc2t0b3A8L2RlZmF1bHQ+CisrICAgIDxsb2NhbGUgbmFtZT0iQyI+CisrICAgICAgPHNob3J0PlNvdW5kIFRoZW1lIE5hbWU8L3Nob3J0PgorKyAgICA8L2xvY2FsZT4KKysgIDwvc2NoZW1hPgorKworKyAgPHNjaGVtYT4KKysgICAgPGtleT4vc2NoZW1hcy9kZXNrdG9wL2dub21lL3NvdW5kL2V2ZW50X3NvdW5kczwva2V5PgorKyAgICA8YXBwbHl0bz4vZGVza3RvcC9nbm9tZS9zb3VuZC9ldmVudF9zb3VuZHM8L2FwcGx5dG8+CisrICAgIDxvd25lcj5nbm9tZTwvb3duZXI+CisrICAgIDx0eXBlPmJvb2w8L3R5cGU+CisrICAgIDxkZWZhdWx0PnRydWU8L2RlZmF1bHQ+CisrICAgIDxsb2NhbGUgbmFtZT0iQyI+CisrICAgICAgPHNob3J0PkVuYWJsZSBTb3VuZCBFdmVudHM8L3Nob3J0PgorKyAgICA8L2xvY2FsZT4KKysgIDwvc2NoZW1hPgorIAorIDwvc2NoZW1hbGlzdD4KKyA8L2djb25mc2NoZW1hZmlsZT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NDM3NDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworYWZ0ZXIgZ2NjIGxpbmtpbmcgaGFzIGNoYW5nZWQsIGFsbCB0aGUgbGlicmFyaWVzIG11c3QgYmUgZXhwbGljaXRlbHkgc3BlY2lmaWVkIHRvIGZvciBsaW5raW5nLiAKK1RoaXMgcGF0Y2ggYXZvaWRzIHRoaXMgbGlua2luZyBlcnJvcjoKKworfCBtYWtlICBhbGwtYW1eTQorfCBtYWtlWzFdOiBFbnRlcmluZyBkaXJlY3RvcnkgYC9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9zZXR0aW5ncy1kYWVtb24tMC4wK3N2bnIyMDU5LXIzL3NldHRpbmdzLWRhZW1vbideTQorfCBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eCAtV2FsbCAtZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mcmVuYW1lLXJlZ2lzdGVycyAtTzIgLWdnZGIgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzICAtV2wsLU8xIC1XbCwtLWhhc2gtc3R5bGU9Z251IC1XbCwtLWFzLW5lZWRlZCAtbyBzZXR0aW5ncy1kYWVtb24gc2V0dGluZ3NfZGFlbW9uLXhzZXR0aW5ncy1jb21tb24ubyBzZXR0aW5nc19kYWVtb24teHNldHRpbmdzLW1hbmFnZXIubyBzZXR0aW5nc19kYWVtb24tc2V0dGluZ3MtZGFlbW9uLm8gLXB0aHJlYWQgLWxnY29uZi0yIC1sZGJ1cy1nbGliLTEgLWxkYnVzLTEgLWxwdGhyZWFkIC1sZ2RrLXgxMS0yLjAgLWxnZGtfcGl4YnVmLTIuMCAtbHBhbmdvY2Fpcm8tMS4wIC1scGFuZ28tMS4wIC1sY2Fpcm8gLWxnb2JqZWN0LTIuMCAtbGdtb2R1bGUtMi4wIC1sZ3RocmVhZC0yLjAgLWxydCAtbGdsaWItMi4wXk0KK3wgL2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliZXhlYy9pNTg2LXBva3ktbGludXgvZ2NjL2k1ODYtcG9reS1saW51eC80LjUuMS9sZDogKl5BOiBpbnZhbGlkIERTTyBmb3Igc3ltYm9sIGBYQ3JlYXRlU2ltcGxlV2luZG93JyBkZWZpbml0aW9uXk0KK3wgL2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eC91c3IvbGliL2xpYlgxMS5zby42OiBjb3VsZCBub3QgcmVhZCBzeW1ib2xzOiBCYWQgdmFsdWVeTQorfCBjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1c15NCit8IG1ha2VbMV06ICoqKiBbc2V0dGluZ3MtZGFlbW9uXSBFcnJvciAxXk0KK3wgbWFrZVsxXTogTGVhdmluZyBkaXJlY3RvcnkgYC9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9zZXR0aW5ncy1kYWVtb24tMC4wK3N2bnIyMDU5LXIzL3NldHRpbmdzLWRhZW1vbideTQorfCBtYWtlOiAqKiogW2FsbF0gRXJyb3IgMl5NCisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitEYXRlOiAyMDExLzAxLzExCisKK0luZGV4OiBzZXR0aW5ncy1kYWVtb24vY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2V0dGluZ3MtZGFlbW9uLm9yaWcvY29uZmlndXJlLmFjCisrKysgc2V0dGluZ3MtZGFlbW9uL2NvbmZpZ3VyZS5hYworQEAgLTE0LDcgKzE0LDcgQEAgQUNfUFJPR19DQworIAorIAorIGRubCBUT0RPOiBtYWtlIGdjb25mIG9wdGlvbmFsCistUEtHX0NIRUNLX01PRFVMRVMoQVBQLCBbZ2NvbmYtMi4wIGdkay14MTEtMi4wXSkKKytQS0dfQ0hFQ0tfTU9EVUxFUyhBUFAsIFtnY29uZi0yLjAgZ2RrLXgxMS0yLjAgeDExXSkKKyAKKyAKKyBBQ19TVUJTVChBUFBfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL3NldHRpbmdzLWRhZW1vbl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA2MTU1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL3NldHRpbmdzLWRhZW1vbl9naXQuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJQcm92aWRlcyBhIGJyaWRnZSBiZXR3ZWVuIGdjb25mIGFuZCB4c2V0dGluZ3MiCitIT01FUEFHRSA9ICJodHRwOi8vc3ZuLm8taGFuZC5jb20vdmlldy9tYXRjaGJveC90cnVuay9zZXR0aW5ncy1kYWVtb24vIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3hzZXR0aW5ncy1tYW5hZ2VyLmg7ZW5kbGluZT0yMjttZDU9N2NmYWM5ZDJkNGRjMzY5NGNjN2ViNjA1Y2YzMmE2OWIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veHNldHRpbmdzLWNvbW1vbi5oO2VuZGxpbmU9MjI7bWQ1PTdjZmFjOWQyZDRkYzM2OTRjYzdlYjYwNWNmMzJhNjliIgorREVQRU5EUyA9ICJnY29uZiBnbGliLTIuMCBndGsrIgorU0VDVElPTiA9ICJ4MTEiCitTUkNSRVYgPSAiOWE5OTUyOGIwMjI1NTQ1MGRiODExNzZhYmQ5YmJjYzFkYWI5YTRjMSIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3hzZXR0aW5ncy1kYWVtb24gXAorICAgICAgICAgICBmaWxlOi8vYWRkc291bmRrZXlzLnBhdGNoO2FwcGx5PXllcyBcCisgICAgICAgICAgIGZpbGU6Ly83MHNldHRpbmdzLWRhZW1vbi5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2NvbmYgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK0ZJTEVTXyR7UE59ID0gCSIke2JpbmRpcn0vKiAke3N5c2NvbmZkaXJ9IgorCisjIFJlcXVpcmVzIGdkay14MTEtMi4wIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IGd0ayB3aGVuIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZAorCWluc3RhbGwgLW0gNzU1ICR7V09SS0RJUn0vNzBzZXR0aW5ncy1kYWVtb24uc2ggJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kLworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLWRlc2t0b3AuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NodXRkb3duLWRlc2t0b3Avc2h1dGRvd24tZGVza3RvcC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmRkNmQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLWRlc2t0b3AuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJQcm92aWRlcyBhbiBpY29uIHRvIHNodXQgZG93biB0aGUgc3lzdGVtIGNsZWFubHkiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTUkNfVVJJID0gImZpbGU6Ly9zaHV0ZG93bi5kZXNrdG9wIgorCitQUiA9ICJyMSIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCisJaW5zdGFsbCAtbSAwNjQ0IHNodXRkb3duLmRlc2t0b3AgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLworCisJc2VkIC1pICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9zaHV0ZG93bi5kZXNrdG9wIC1lICdzI15FeGVjPVwoLipcKSNFeGVjPSR7YmFzZV9zYmluZGlyfS9cMSMnCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisgICAgZ3JlcCAtcSBxZW11YXJtICREJHtzeXNjb25mZGlyfS9ob3N0bmFtZSAmJiBcCisgICAgICAgIHNlZCAtaSAkRCR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL3NodXRkb3duLmRlc2t0b3AgLWUgJ3MjXkV4ZWM9XCguKlwpL2hhbHQjRXhlYz1cMS9yZWJvb3QjJyBcCisgICAgICAgIHx8IHRydWUKK30KKworaW5oZXJpdCBhbGxhcmNoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NodXRkb3duLWRlc2t0b3Avc2h1dGRvd24tZGVza3RvcC9zaHV0ZG93bi5kZXNrdG9wIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLWRlc2t0b3Avc2h1dGRvd24uZGVza3RvcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjI2NTlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLWRlc2t0b3Avc2h1dGRvd24uZGVza3RvcApAQCAtMCwwICsxLDEwIEBACitbRGVza3RvcCBFbnRyeV0KK0VuY29kaW5nPVVURi04CitUeXBlPUFwcGxpY2F0aW9uCitOYW1lPVNodXRkb3duCitDb21tZW50PUNsb3NlIGRvd24gdGhlIG1hY2hpbmUgc2FmZWx5CitFeGVjPXBvd2Vyb2ZmCitJY29uPXN5c3RlbS1zaHV0ZG93bgorVGVybWluYWw9ZmFsc2UKK0NhdGVnb3JpZXM9VXRpbGl0eTsKK1N0YXJ0dXBOb3RpZnk9dHJ1ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvMDAwMS1UaGlzLXBhdGNoLWZpeGVzLWEtY29tbWFuZC1saW5lLXRoYXQtaXMtdG9vLWxvbmctb3ZlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvMDAwMS1UaGlzLXBhdGNoLWZpeGVzLWEtY29tbWFuZC1saW5lLXRoYXQtaXMtdG9vLWxvbmctb3ZlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YjM0MjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLVRoaXMtcGF0Y2gtZml4ZXMtYS1jb21tYW5kLWxpbmUtdGhhdC1pcy10b28tbG9uZy1vdmUucGF0Y2gKQEAgLTAsMCArMSw5MSBAQAorRnJvbSAyMmQ1MDYzYzU1MWQzYzA4YzBhNGFkOGI4MGUwOGI3OTNkNTMwOTNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDEwIFNlcCAyMDE1IDE2OjIzOjI3ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFRoaXMgcGF0Y2ggZml4ZXMgYSBjb21tYW5kIGxpbmUgdGhhdCBpcyB0b28gbG9uZyAob3ZlciAxMDBLISkKKyBhbmQgaXMgcmVqZWN0ZWQgYnkgL2Jpbi9zaC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbc2hvdWxkIGFwcGVhciBpbiAyLjEwLCBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xODQ4NTZdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKworLS0tCisgU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UgICAgICAgICAgICAgICAgICAgfCAxMSArKysrKystLS0tLQorIFRvb2xzL2d0ay9nZW5lcmF0ZS1pbnNwZWN0b3ItZ3Jlc291cmNlLW1hbmlmZXN0LnB5IHwgMTYgKysrKysrKysrKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKK2luZGV4IGExM2FmN2MuLjA1OGMyNDEgMTAwNjQ0CistLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKK0BAIC00MDgsNyArNDA4LDcgQEAgc2V0KFdlYktpdDJXZWJFeHRlbnNpb25fSU5TVEFMTEVEX0hFQURFUlMKKyAgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmgKKyApCisgCistZmlsZShHTE9CIEluc3BlY3RvckZpbGVzCisrc2V0KEluc3BlY3RvckZpbGVzCisgICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvKi5odG1sCisgICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS8qLmpzCisgICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvKi5jc3MKK0BAIC00MjMsMTMgKzQyMywxNCBAQCBmaWxlKEdMT0IgSW5zcGVjdG9yRmlsZXMKKyAgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy8qLmpzCisgICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW1hZ2VzL2d0ay8qLnBuZworICAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0ltYWdlcy9ndGsvKi5zdmcKKy0pCistCistbGlzdChBUFBFTkQgSW5zcGVjdG9yRmlsZXMKKyAgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzCisgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQklOU1BFQ1RPUlVJX0RJUn0vVXNlckludGVyZmFjZS9Qcm90b2NvbC9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKyApCisgCisrZmlsZShHTE9CIEluc3BlY3RvckZpbGVzRGVwZW5kZW5jaWVzCisrICAgICR7SW5zcGVjdG9yRmlsZXN9CisrKQorKworICMgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvZiBhIGNvbmZsaWN0IGJldHdlZW4gdGhlIEdUSysgQVBJIFdlYktpdFZlcnNpb24uaCBhbmQgb25lIGdlbmVyYXRlZCBieSBXZWJDb3JlLgorIGxpc3QoSU5TRVJUIFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUyAwCisgICAgICIke0ZPUldBUkRJTkdfSEVBREVSU19XRUJLSVQyR1RLX0RJUn0iCitAQCAtNTY0LDcgKzU2NSw3IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKKyAKKyBhZGRfY3VzdG9tX2NvbW1hbmQoCisgICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19XRUJLSVQyR1RLX0RJUn0vSW5zcGVjdG9yR1Jlc291cmNlQnVuZGxlLnhtbAorLSAgICBERVBFTkRTICR7SW5zcGVjdG9yRmlsZXN9CisrICAgIERFUEVORFMgJHtJbnNwZWN0b3JGaWxlc0RlcGVuZGVuY2llc30KKyAgICAgICAgICAgICAke1RPT0xTX0RJUn0vZ3RrL2dlbmVyYXRlLWluc3BlY3Rvci1ncmVzb3VyY2UtbWFuaWZlc3QucHkKKyAgICAgQ09NTUFORCAke1RPT0xTX0RJUn0vZ3RrL2dlbmVyYXRlLWluc3BlY3Rvci1ncmVzb3VyY2UtbWFuaWZlc3QucHkgLS1vdXRwdXQ9JHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUMkdUS19ESVJ9L0luc3BlY3RvckdSZXNvdXJjZUJ1bmRsZS54bWwgJHtJbnNwZWN0b3JGaWxlc30KKyAgICAgVkVSQkFUSU0KK2RpZmYgLS1naXQgYS9Ub29scy9ndGsvZ2VuZXJhdGUtaW5zcGVjdG9yLWdyZXNvdXJjZS1tYW5pZmVzdC5weSBiL1Rvb2xzL2d0ay9nZW5lcmF0ZS1pbnNwZWN0b3ItZ3Jlc291cmNlLW1hbmlmZXN0LnB5CitpbmRleCAwNjg3YzRjLi4wMzA2MGNmIDEwMDc1NQorLS0tIGEvVG9vbHMvZ3RrL2dlbmVyYXRlLWluc3BlY3Rvci1ncmVzb3VyY2UtbWFuaWZlc3QucHkKKysrKyBiL1Rvb2xzL2d0ay9nZW5lcmF0ZS1pbnNwZWN0b3ItZ3Jlc291cmNlLW1hbmlmZXN0LnB5CitAQCAtMTYsNiArMTYsNyBAQAorICMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgCisgaW1wb3J0IGFyZ3BhcnNlCisraW1wb3J0IGdsb2IKKyBpbXBvcnQgb3MKKyBpbXBvcnQgc3lzCisgCitAQCAtMjYsMTAgKzI3LDE3IEBAIEJBU0VfRElSID0gJ1dlYkluc3BlY3RvclVJLycKKyBkZWYgZ2V0X2ZpbGVuYW1lcyhhcmdzKToKKyAgICAgZmlsZW5hbWVzID0gW10KKyAKKy0gICAgZm9yIGZpbGVuYW1lIGluIGFyZ3M6CistICAgICAgICBiYXNlX2Rpcl9pbmRleCA9IGZpbGVuYW1lLnJmaW5kKEJBU0VfRElSKQorLSAgICAgICAgaWYgYmFzZV9kaXJfaW5kZXggIT0gLTE6CistICAgICAgICAgICAgZmlsZW5hbWVzLmFwcGVuZChmaWxlbmFtZVtiYXNlX2Rpcl9pbmRleCArIGxlbihCQVNFX0RJUik6XSkKKysgICAgZm9yIHBhdHRlcm4gaW4gYXJnczoKKysgICAgICAgIHBhdGhzID0gZ2xvYi5nbG9iKHBhdHRlcm4pCisrICAgICAgICBmb3IgZmlsZW5hbWUgaW4gcGF0aHM6CisrICAgICAgICAgICAgYmFzZV9kaXJfaW5kZXggPSBmaWxlbmFtZS5yZmluZChCQVNFX0RJUikKKysgICAgICAgICAgICBpZiBiYXNlX2Rpcl9pbmRleCAhPSAtMToKKysgICAgICAgICAgICAgICAgbmFtZSA9IGZpbGVuYW1lW2Jhc2VfZGlyX2luZGV4ICsgbGVuKEJBU0VfRElSKTpdCisrICAgICAgICAgICAgICAgICMgVGhlIHJlc3VsdCBzaG91bGQgdXNlIGZvcndhcmQgc2xhc2hlcywgdGh1cyBtYWtlIHN1cmUgYW55IG9zLXNwZWNpZmljCisrICAgICAgICAgICAgICAgICMgc2VwYXJhdG9yLCBhZGRlZCBieSB0aGUgZ2xvYi5nbG9iKCkgY2FsbCwgaXMgcHJvcGVybHkgcmVwbGFjZWQKKysgICAgICAgICAgICAgICAgaWYgb3Muc2VwICE9ICcvJzoKKysgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2Uob3Muc2VwLCAnLycpCisrICAgICAgICAgICAgICAgIGZpbGVuYW1lcy5hcHBlbmQobmFtZSkKKyAgICAgcmV0dXJuIGZpbGVuYW1lcworIAorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGsvZ2NjNS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0ay9nY2M1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NTFhODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGsvZ2NjNS5wYXRjaApAQCAtMCwwICsxLDI2IEBACitKU09iamVjdDogQ3JlYXRlIGV4cGxpY2l0IGluc3RhbnRpYXRpb24gb2YgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhvdXRBdHRyaWJ1dGVzCisKK1JlYXNvbiBmb3IgY2hhbmdlOiBuZXdlciBnY2MgbWlnaHQgb3B0aW1pemUgYXdheSB0aGUgdGVtcGxhdGVzCithbmQgdGhleSB3b250IGJlIGF2YWlsYWJsZSBmb3Igb3RoZXIgLmNwcCBmaWxlcyB0byB1c2UgYXMgdGhlc2UKK2FyZSB1c2VkIGluIGEgZGlmZmVyZW50IC5jcHAgd2UgbmVlZCB0byB0ZWxsIGNvbXBpbGVyIHRvIGV4cGxpY2l0bHkKK2luc3RhbnRpYXRlIHRoZW0uCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogd2Via2l0Z3RrLTIuOC41L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlYmtpdGd0ay0yLjguNS5vcmlnL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorKysrIHdlYmtpdGd0ay0yLjguNS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKK0BAIC0xOTY1LDYgKzE5NjUsMTAgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgorICAgICB9CisgfQorIAorK3RlbXBsYXRlIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0cmlidXRlczxJbnQzMlNoYXBlPihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpOworK3RlbXBsYXRlIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0cmlidXRlczxEb3VibGVTaGFwZT4oRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKTsKKyt0ZW1wbGF0ZSB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91dEF0dHJpYnV0ZXM8Q29udGlndW91c1NoYXBlPihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpOworKworIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQorIHsKKyAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0a18yLjguNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0a18yLjguNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmQ2NzBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrXzIuOC41LmJiCkBAIC0wLDAgKzEsNTggQEAKK1NVTU1BUlkgPSAiV2ViS2l0IHdlYiByZW5kZXJpbmcgZW5naW5lIGZvciB0aGUgR1RLKyBwbGF0Zm9ybSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLndlYmtpdC5vcmcvIgorCitMSUNFTlNFID0gIkJTRCAmIExHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ09QWUlORy5MSUI7bWQ1PWQwYzZkNjM5N2E1ZDg0Mjg2ZGRhNzU4ZGE1N2JkNjkxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1NvdXJjZS9XZWJLaXQvTElDRU5TRTttZDU9NDY0NmY5MDA4MmM0MGJjZjI5OGMyODVmOGJhYjBiMTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vU291cmNlL1dlYkNvcmUvTElDRU5TRS1BUFBMRTttZDU9NDY0NmY5MDA4MmM0MGJjZjI5OGMyODVmOGJhYjBiMTIgXAorCQkgICAgZmlsZTovL1NvdXJjZS9XZWJDb3JlL0xJQ0VOU0UtTEdQTC0yO21kNT0zNjM1N2ZmZGUyYjY0YWUxNzdiMjQ5NDQ0NWI3OWQyMSBcCisJCSAgICBmaWxlOi8vU291cmNlL1dlYkNvcmUvTElDRU5TRS1MR1BMLTIuMTttZDU9YTc3OGEzM2VmMzM4YWJiYWY4YjhhN2MzNmI2ZWVjODAgXAorCQkgICAiCisKK1NSQ19VUkkgPSAiXAorICBodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgIGZpbGU6Ly8wMDAxLVRoaXMtcGF0Y2gtZml4ZXMtYS1jb21tYW5kLWxpbmUtdGhhdC1pcy10b28tbG9uZy1vdmUucGF0Y2ggXAorICBmaWxlOi8vZ2NjNS5wYXRjaCBcCisgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkZjc5OTkxODQ4YTUwOTZkM2E3NTI4OWViY2U1NDdhZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzZDFmMGM1MzQ5MzVmNDNmZDc0ZGY5MGYyNjQ4ZmNlZTY3MmQ2MGYxZjU3YTMwZmE1NTdhNzc4OTFhZTA0ZDIwIgorCitpbmhlcml0IGNtYWtlIGxpYl9wYWNrYWdlIHBrZ2NvbmZpZyBwZXJsbmF0aXZlIHB5dGhvbm5hdGl2ZQorCitERVBFTkRTID0gInpsaWIgZW5jaGFudCBsaWJzb3VwLTIuNCBjdXJsIGxpYnhtbDIgY2Fpcm8gbGlieHNsdCBsaWJ4dCBsaWJpZG4gZ251dGxzIFwKKyAgICAgICAgICAgZ3RrKyBndGsrMyBnc3RyZWFtZXIxLjAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSBmbGV4LW5hdGl2ZSBncGVyZi1uYXRpdmUgc3FsaXRlMyBcCisJICAgcGFuZ28gaWN1IGJpc29uLW5hdGl2ZSBnbm9tZS1jb21tb24gZ2F3ayBpbnRsdG9vbC1uYXRpdmUgbGlid2VicCBcCisJICAgYXRrIHVkZXYgaGFyZmJ1enoganBlZyBsaWJwbmcgcHVsc2VhdWRpbyBsaWJyc3ZnIGxpYnRoZW9yYSBsaWJ2b3JiaXMgbGlieGNvbXBvc2l0ZSBsaWJ4dHN0IFwKKwkgICBydWJ5LW5hdGl2ZSBsaWJzZWNyZXQgbGlibm90aWZ5IGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCBcCisgICAgICAgICAgIgorREVQRU5EUyArPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ3ZpcnR1YWwvbGliZ2wnLCAnJywgZCl9IgorCitFWFRSQV9PRUNNQUtFID0gIiBcCisJCS1EUE9SVD1HVEsgXAorCQktRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSBcCisJCS1ERU5BQkxFX0lOVFJPU1BFQ1RJT049RmFsc2UgXAorCQktREVOQUJMRV9NSU5JQlJPV1NFUj1UcnVlIFwKKwkgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJy1ERU5BQkxFX1dFQkdMPVRydWUnLCAnLURFTkFCTEVfV0VCR0w9RmFsc2UnLCBkKX0gXAorCQkiCisKKyMgSmF2YXNjcmlwdCBKSVQgaXMgbm90IHN1cHBvcnRlZCBvbiBwb3dlcnBjCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9wb3dlcnBjID0gIiAtREVOQUJMRV9KSVQ9RmFsc2UgIgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfcG93ZXJwYzY0ID0gIiAtREVOQUJMRV9KSVQ9RmFsc2UgIgorCisjIEFSTSBKSVQgY29kZSBkb2VzIG5vdCBidWlsZCBvbiBBUk12NS82IGFueW1vcmUsIGFwcGFyZW50bHkgdGhleSB0ZXN0IG9ubHkgb24gdjcgb253YXJkcworRVhUUkFfT0VDTUFLRV9hcHBlbmRfYXJtdjUgPSAiIC1ERU5BQkxFX0pJVD1GYWxzZSAiCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9hcm12NiA9ICIgLURFTkFCTEVfSklUPUZhbHNlICIKKworIyBiaW51dGlscyAyLjI1LjEgaGFzIGEgYnVnIG9uIGFhcmNoNjQ6CisjIGh0dHBzOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTE4NDMwCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9hYXJjaDY0ID0gIiAtRFVTRV9MRF9HT0xEPUZhbHNlICIKKworIyBKSVQgbm90IHN1cHBvcnRlZCBvbiBNSVBTIGVpdGhlcgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfbWlwcyA9ICIgLURFTkFCTEVfSklUPUZhbHNlICIKK0VYVFJBX09FQ01BS0VfYXBwZW5kX21pcHM2NCA9ICIgLURFTkFCTEVfSklUPUZhbHNlICIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS93ZWJraXQyZ3RrLTQuMC9pbmplY3RlZC1idW5kbGUvbGlid2Via2l0Mmd0a2luamVjdGVkYnVuZGxlLnNvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vd2Via2l0Mmd0ay00LjAvaW5qZWN0ZWQtYnVuZGxlLy5kZWJ1Zy9saWJ3ZWJraXQyZ3RraW5qZWN0ZWRidW5kbGUuc28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS93ZWJraXRndGsvd2Via2l0Mmd0ay00LjAvLmRlYnVnLyoiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsL2NvbmZpZ2ZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsL2NvbmZpZ2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmIxMTQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWwvY29uZmlnZml4LnBhdGNoCkBAIC0wLDAgKzEsNTEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGFwci11dGlsLTEuMy40L2FwdS1jb25maWcuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHItdXRpbC0xLjMuNC5vcmlnL2FwdS1jb25maWcuaW4JMjAwOS0wMS0xMiAxNzowODowNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBhcHItdXRpbC0xLjMuNC9hcHUtY29uZmlnLmluCTIwMDktMDEtMTIgMTc6MDk6MDAuMDAwMDAwMDAwICswMDAwCitAQCAtMTM0LDE0ICsxMzQsNyBAQAorICAgICBleGl0IDAKKyAgICAgOzsKKyAgICAgLS1pbmNsdWRlcykKKy0gICAgaWYgdGVzdCAiJGxvY2F0aW9uIiA9ICJpbnN0YWxsZWQiOyB0aGVuCisgICAgICAgICBmbGFncz0iJGZsYWdzIC1JJGluY2x1ZGVkaXIgJElOQ0xVREVTIgorLSAgICBlbGlmIHRlc3QgIiRsb2NhdGlvbiIgPSAic291cmNlIjsgdGhlbgorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAtSSRBUFVfU09VUkNFX0RJUi9pbmNsdWRlICRJTkNMVURFUyIKKy0gICAgZWxzZQorLSAgICAgICAgIyB0aGlzIGlzIGZvciBWUEFUSCBidWlsZHMKKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUkkQVBVX0JVSUxEX0RJUi9pbmNsdWRlIC1JJEFQVV9TT1VSQ0VfRElSL2luY2x1ZGUgJElOQ0xVREVTIgorLSAgICBmaQorICAgICA7OworICAgICAtLWxkZmxhZ3MpCisgICAgIGZsYWdzPSIkZmxhZ3MgJExERkxBR1MiCitAQCAtMTU1LDI4ICsxNDgsMTAgQEAKKyAgICAgZXhpdCAwCisgICAgIDs7CisgICAgIC0tbGluay1sZCkKKy0gICAgaWYgdGVzdCAiJGxvY2F0aW9uIiA9ICJpbnN0YWxsZWQiOyB0aGVuCistICAgICAgICAjIyMgYXZvaWQgdXNpbmcgLUwgaWYgbGliZGlyIGlzIGEgInN0YW5kYXJkIiBsb2NhdGlvbiBsaWtlIC91c3IvbGliCisgICAgICAgICBmbGFncz0iJGZsYWdzIC1MJGxpYmRpciAtbCRBUFJVVElMX0xJQk5BTUUiCistICAgIGVsc2UKKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUwkQVBVX0JVSUxEX0RJUiAtbCRBUFJVVElMX0xJQk5BTUUiCistICAgIGZpCisgICAgIDs7CisgICAgIC0tbGluay1saWJ0b29sKQorLSAgICAjIElmIHRoZSBMQV9GSUxFIGV4aXN0cyB3aGVyZSB3ZSB0aGluayBpdCBzaG91bGQgYmUsIHVzZSBpdC4gIElmIHdlJ3JlCistICAgICMgaW5zdGFsbGVkIGFuZCB0aGUgTEFfRklMRSBkb2VzIG5vdCBleGlzdCwgYXNzdW1lIHRvIHVzZSAtTC8tbAorLSAgICAjICh0aGUgTEFfRklMRSBtYXkgbm90IGhhdmUgYmVlbiBpbnN0YWxsZWQpLiAgSWYgd2UncmUgYnVpbGRpbmcgb3Vyc2VsdmVzLAorLSAgICAjIHdlJ2xsIGFzc3VtZSB0aGF0IGF0IHNvbWUgcG9pbnQgdGhlIC5sYSBmaWxlIGJlIGNyZWF0ZWQuCistICAgIGlmIHRlc3QgLWYgIiRMQV9GSUxFIjsgdGhlbgorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAkTEFfRklMRSIKKy0gICAgZWxpZiB0ZXN0ICIkbG9jYXRpb24iID0gImluc3RhbGxlZCI7IHRoZW4KKy0gICAgICAgICMjIyBhdm9pZCB1c2luZyAtTCBpZiBsaWJkaXIgaXMgYSAic3RhbmRhcmQiIGxvY2F0aW9uIGxpa2UgL3Vzci9saWIKKy0gICAgICAgICMgU2luY2UgdGhlIHVzZXIgaXMgc3BlY2lmeWluZyB0aGV5IGFyZSBsaW5raW5nIHdpdGggbGlidG9vbCwgd2UKKy0gICAgICAgICMgKmtub3cqIHRoYXQgLVIgd2lsbCBiZSByZWNvZ25pemVkIGJ5IGxpYnRvb2wuCistICAgICAgICBmbGFncz0iJGZsYWdzIC1MJGxpYmRpciAtUiRsaWJkaXIgLWwkQVBSVVRJTF9MSUJOQU1FIgorLSAgICBlbHNlCistICAgICAgICBmbGFncz0iJGZsYWdzICRMQV9GSUxFIgorLSAgICBmaQorKyAgICAgICAgZmxhZ3M9IiRmbGFncyAtbCRBUFJVVElMX0xJQk5BTUUiCisgICAgIDs7CisgICAgIC0tYXB1LWxhLWZpbGUpCisgICAgIGlmIHRlc3QgLWYgIiRMQV9GSUxFIjsgdGhlbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWwvY29uZmlndXJlX2ZpeGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWwvY29uZmlndXJlX2ZpeGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZTI0NGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbC9jb25maWd1cmVfZml4ZXMucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogYXByLXV0aWwtMS40LjEvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXByLXV0aWwtMS40LjEub3JpZy9jb25maWd1cmUuaW4JMjAwOS0xMi0xOCAwMzoxNToxOS4wMDAwMDAwMDAgKzA4MDAKKysrKyBhcHItdXRpbC0xLjQuMS9jb25maWd1cmUuaW4JMjAxMS0xMi0zMCAxMzozMjowNy4wMDAwMDAwMDAgKzA4MDAKK0BAIC04LDE1ICs4LDE1IEBACisgQUNfQ09ORklHX0hFQURFUihpbmNsdWRlL3ByaXZhdGUvYXB1X2NvbmZpZy5oKQorIEFDX0NPTkZJR19BVVhfRElSKGJ1aWxkKQorIAorLXNpbmNsdWRlKGJ1aWxkL2FwdS1jb25mLm00KQorLXNpbmNsdWRlKGJ1aWxkL2FwdS1pY29udi5tNCkKKy1zaW5jbHVkZShidWlsZC9hcHUtaGludHMubTQpCistc2luY2x1ZGUoYnVpbGQvYXByX2NvbW1vbi5tNCkKKy1zaW5jbHVkZShidWlsZC9maW5kX2Fwci5tNCkKKy1zaW5jbHVkZShidWlsZC9jcnlwdG8ubTQpCistc2luY2x1ZGUoYnVpbGQvZGJtLm00KQorLXNpbmNsdWRlKGJ1aWxkL2RiZC5tNCkKKy1zaW5jbHVkZShidWlsZC9kc28ubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2FwdS1jb25mLm00KQorKyNzaW5jbHVkZShidWlsZC9hcHUtaWNvbnYubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2FwdS1oaW50cy5tNCkKKysjc2luY2x1ZGUoYnVpbGQvYXByX2NvbW1vbi5tNCkKKysjc2luY2x1ZGUoYnVpbGQvZmluZF9hcHIubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2NyeXB0by5tNCkKKysjc2luY2x1ZGUoYnVpbGQvZGJtLm00KQorKyNzaW5jbHVkZShidWlsZC9kYmQubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2Rzby5tNCkKKyAKKyBkbmwgR2VuZXJhdGUgLi9jb25maWcubmljZSBmb3IgcmVwcm9kdWNpbmcgcnVucyBvZiBjb25maWd1cmUKKyBkbmwgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxOWExZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsL3J1bi1wdGVzdApAQCAtMCwwICsxLDYgQEAKKyMhL2Jpbi9zaAorCitjZCB0ZXN0CisuL3Rlc3RhbGwgfHNlZCBcCisgIC1lICdzfFwoLipcKTogIFNVQ0NFU1N8UEFTUzogXDF8JyBcCisgIC1lICdzfFwoLipcKTogIEZBSUxFRHxGQUlMOiBcMXwnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbF8xLjUuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsXzEuNS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMTRkMTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbF8xLjUuNC5iYgpAQCAtMCwwICsxLDgxIEBACitTVU1NQVJZID0gIkFwYWNoZSBQb3J0YWJsZSBSdW50aW1lIChBUFIpIGNvbXBhbmlvbiBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL2Fwci5hcGFjaGUub3JnLyIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAiYXByIGV4cGF0IGdkYm0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworTElDRU5TRSA9ICJBcGFjaGUtMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NTE5ZTBhMThlMDNmN2MwMjMwNzA1NjhjMTRiMDc3YmIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9hcHVfdmVyc2lvbi5oO2VuZGxpbmU9MTc7bWQ1PTgwNjY4NWE4NGU3MWYxMGM4MDE0NGM0OGViMzVkZjQyIgorCitTUkNfVVJJID0gIiR7QVBBQ0hFX01JUlJPUn0vYXByLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlnZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZV9maXhlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODY2ODI1YzA0ZGE4MjdjNmU1ZjUzZGFmZjU1NjlmNDIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTc2YTEyYTU5YmMyODZkNjM0YTIxZDdiZTA4NDFjYzc0Mjg5ZWE5MDc3YWExYWY0NmJlMTlkMWE2ZTg0NGMxOSIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1hcHI9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30vYXByLTEtY29uZmlnIFwgCisJCS0td2l0aG91dC1vZGJjIFwKKwkJLS13aXRob3V0LXBnc3FsIFwKKwkJLS13aXRoLWRibT1nZGJtIFwKKwkJLS13aXRoLWdkYm09JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSBcCisJCS0td2l0aG91dC1zcWxpdGUyIFwKKwkJLS13aXRob3V0LXNxbGl0ZTMgXAorCQktLXdpdGgtZXhwYXQ9JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSIKKworCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBiaW5jb25maWcKKworUFIgPSAicjEiCisKK09FX0JJTkNPTkZJR19FWFRSQV9NQU5HTEUgPSAiIC1lICdzOmxvY2F0aW9uPXNvdXJjZTpsb2NhdGlvbj1pbnN0YWxsZWQ6JyIKKworZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwlpZiBbICIke0NMQVNTT1ZFUlJJREV9IiA9ICJjbGFzcy10YXJnZXQiIF07IHRoZW4KKwkJY3AgJHtTVEFHSU5HX0RBVEFESVJ9L2Fwci9hcHJfcnVsZXMubWsgJHtCfS9idWlsZC9ydWxlcy5taworCWZpCit9Citkb19jb25maWd1cmVfcHJlcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJbWtkaXIgJHtCfS9idWlsZAorCWNwICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vYXByL2Fwcl9ydWxlcy5tayAke0J9L2J1aWxkL3J1bGVzLm1rCit9Citkb19jb25maWd1cmVfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlzZWQgLWkgInMjTElCVE9PTD1cJChTSEVMTCkgXCQoYXByX2J1aWxkZGlyKSNMSUJUT09MPVwkKFNIRUxMKSAke1NUQUdJTkdfQklORElSX05BVElWRX0jIiAke0J9L2J1aWxkL3J1bGVzLm1rCisJIyBzb21ldGltZXMgdGhlcmUgaXNuJ3QgU0hFTEwKKwlzZWQgLWkgInMjTElCVE9PTD1cJChhcHJfYnVpbGRkaXIpI0xJQlRPT0w9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IyIgJHtCfS9idWlsZC9ydWxlcy5taworfQorCitkb19jb25maWd1cmVfcHJlcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJY3AgJHtTVEFHSU5HX0RBVEFESVJ9L2Fwci9hcHJfcnVsZXMubWsgJHtTfS9idWlsZC9ydWxlcy5taworfQorCitkb19jb25maWd1cmVfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwlzZWQgLWkgInMjXChhcHJfYnVpbGRkaXJcKT0uKiNcMT0ke1NUQUdJTkdfREFUQURJUn0vYnVpbGQtMSMiICR7U30vYnVpbGQvcnVsZXMubWsKKwlzZWQgLWkgInMjXChhcHJfYnVpbGRlcnNcKT0uKiNcMT0ke1NUQUdJTkdfREFUQURJUn0vYnVpbGQtMSMiICR7U30vYnVpbGQvcnVsZXMubWsKKwlzZWQgLWkgInMjXCh0b3BfYnVpbGRkaXJcKT0uKiNcMT0ke1NUQUdJTkdfREFUQURJUn0vYnVpbGQtMSMiICR7U30vYnVpbGQvcnVsZXMubWsKKwlzZWQgLWkgInMjXChMSUJUT09MPVwkKGFwcl9idWlsZGRpcilcKS4qI1wxL2xpYnRvb2wjIiAke1N9L2J1aWxkL3J1bGVzLm1rCit9CisKK0ZJTEVTXyR7UE59ICAgICArPSAiJHtsaWJkaXJ9L2Fwci11dGlsLTEvYXByX2RibV9nZGJtLTEuc28iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9hcHJ1dGlsLmV4cCAke2xpYmRpcn0vYXByLXV0aWwtMS9hcHJfZGJtX2dkYm0uc28qICR7bGliZGlyfS9hcHItdXRpbC0xL2Fwcl9kYm1fZ2RibS5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2Fwci11dGlsLTEvLmRlYnVnLyoiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9hcHItdXRpbC0xL2Fwcl9kYm1fZ2RibS5hIgorCitpbmhlcml0IHB0ZXN0CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJY2QgJHtCfS90ZXN0CisJb2VfcnVubWFrZQorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXQ9JHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCW1rZGlyICR0CisJZm9yIGkgaW4gdGVzdGFsbCBkYXRhOyBkbyBcCisJICBjcCAtciAke0J9L3Rlc3QvJGkgJHQ7IFwKKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvRml4LXBhY2tldC1kaXNjYXJkcy1IVFRQLXJlZGlyZWN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL0ZpeC1wYWNrZXQtZGlzY2FyZHMtSFRUUC1yZWRpcmVjdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODA1YjhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL0ZpeC1wYWNrZXQtZGlzY2FyZHMtSFRUUC1yZWRpcmVjdC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGaXggcGFja2V0IGRpc2NhcmRzIEhUVFAgcmVkaXJlY3QuCisKK0Rpc2Nvbm5lY3QgdGhlIGNvbm5lY3Rpb24gYnkgcG9sbCgpIHRpbWVvdXQuCitJZiB0aW1lb3V0PTAgYW5kIGFwcl93YWl0X2Zvcl9pb19vcl90aW1lb3V0KCk9QVBSX1RJTUVVUCB0aGVuCithcHJfc29ja2V0X3JlY3YoKSByZXR1cm5zIEVBR0FJTi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE5vcmlha2kgWW9zaGl0YW5lIDx5b3NoaXRhbmUubnJzQGNudC5uY29zLm5lYy5jby5qcD4KK1NpZ25lZC1vZmYtYnk6IExpIFdhbmcgPGxpLndhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIG5ldHdvcmtfaW8vdW5peC9zZW5kcmVjdi5jIHwgICAgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbmV0d29ya19pby91bml4L3NlbmRyZWN2LmMgYi9uZXR3b3JrX2lvL3VuaXgvc2VuZHJlY3YuYworaW5kZXggYzEzM2EyNi4uZThmYWYxNSAxMDA2NDQKKy0tLSBhL25ldHdvcmtfaW8vdW5peC9zZW5kcmVjdi5jCisrKysgYi9uZXR3b3JrX2lvL3VuaXgvc2VuZHJlY3YuYworQEAgLTg1LDYgKzg1LDEwIEBAIGFwcl9zdGF0dXNfdCBhcHJfc29ja2V0X3JlY3YoYXByX3NvY2tldF90ICpzb2NrLCBjaGFyICpidWYsIGFwcl9zaXplX3QgKmxlbikKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgKHNvY2stPnRpbWVvdXQgPiAwKSkgeworIGRvX3NlbGVjdDoKKyAgICAgICAgIGFydiA9IGFwcl93YWl0X2Zvcl9pb19vcl90aW1lb3V0KE5VTEwsIHNvY2ssIDEpOworKyAgICAgICAgaWYgKChhcnYgPT0gQVBSX1RJTUVVUCkgJiYgKHNvY2stPnRpbWVvdXQgPT0gMCkpIHsKKysgICAgICAgICAgICAqbGVuID0gMDsKKysgICAgICAgICAgICByZXR1cm4gRUFHQUlOOworKyAgICAgICAgfQorICAgICAgICAgaWYgKGFydiAhPSBBUFJfU1VDQ0VTUykgeworICAgICAgICAgICAgICpsZW4gPSAwOworICAgICAgICAgICAgIHJldHVybiBhcnY7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NsZWFudXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvY2xlYW51cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjc4NGUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NsZWFudXAucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogYXByLTEuNC4yL2J1aWxkL2J1aWxkY2hlY2suc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHItMS40LjIub3JpZy9idWlsZC9idWlsZGNoZWNrLnNoCTIwMDktMTEtMTMgMDg6Mjc6MTYuMDAwMDAwMDAwICswODAwCisrKysgYXByLTEuNC4yL2J1aWxkL2J1aWxkY2hlY2suc2gJMjAxMC0xMS0yNiAxNTo0NDowMC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0zMiwzNSArMzIsNCBAQAorIGVjaG8gImJ1aWxkY29uZjogYXV0b2NvbmYgdmVyc2lvbiAkYWNfdmVyc2lvbiAob2spIgorIGZpCisgCistIyBTYW1wbGUgbGlidG9vbCAtLXZlcnNpb24gb3V0cHV0czoKKy0jIGx0bWFpbi5zaCAoR05VIGxpYnRvb2wpIDEuMy4zICgxLjM4NS4yLjE4MSAxOTk5LzA3LzAyIDE1OjQ5OjExKQorLSMgbHRtYWluLnNoIChHTlUgbGlidG9vbCAxLjEzNjEgMjAwNC8wMS8wMiAyMzoxMDo1MikgMS41YQorLSMgb3V0cHV0IGlzIG11bHRpbGluZSBmcm9tIDEuNSBvbndhcmRzCistCistIyBSZXF1aXJlIGxpYnRvb2wgMS40IG9yIG5ld2VyCistbGlidG9vbD1gYnVpbGQvUHJpbnRQYXRoIGdsaWJ0b29sMSBnbGlidG9vbCBsaWJ0b29sIGxpYnRvb2wxNSBsaWJ0b29sMTRgCistbHRfcHZlcnNpb249YCRsaWJ0b29sIC0tdmVyc2lvbiAyPi9kZXYvbnVsbHxzZWQgLWUgJ3MvKFteKV0qKS8vZztzL15bXjAtOV0qLy87cy9bLSBdLiovL2c7cSdgCistaWYgdGVzdCAteiAiJGx0X3B2ZXJzaW9uIjsgdGhlbgorLWVjaG8gImJ1aWxkY29uZjogbGlidG9vbCBub3QgZm91bmQuIgorLWVjaG8gIiAgICAgICAgICAgWW91IG5lZWQgbGlidG9vbCB2ZXJzaW9uIDEuNCBvciBuZXdlciBpbnN0YWxsZWQiCistZWNobyAiICAgICAgICAgICB0byBidWlsZCBBUFIgZnJvbSBTVk4uIgorLWV4aXQgMQorLWZpCistbHRfdmVyc2lvbj1gZWNobyAkbHRfcHZlcnNpb258c2VkIC1lICdzL1woW2Etel0qXCkkLy5cMS8nYAorLUlGUz0uOyBzZXQgJGx0X3ZlcnNpb247IElGUz0nICcKKy1sdF9zdGF0dXM9Imdvb2QiCistaWYgdGVzdCAiJDEiID0gIjEiOyB0aGVuCistICAgaWYgdGVzdCAiJDIiIC1sdCAiNCI7IHRoZW4KKy0gICAgICBsdF9zdGF0dXM9ImJhZCIKKy0gICBmaQorLWZpCistaWYgdGVzdCAkbHRfc3RhdHVzID0gImdvb2QiOyB0aGVuCistICAgZWNobyAiYnVpbGRjb25mOiBsaWJ0b29sIHZlcnNpb24gJGx0X3B2ZXJzaW9uIChvaykiCistICAgZXhpdCAwCistZmkKKy0KKy1lY2hvICJidWlsZGNvbmY6IGxpYnRvb2wgdmVyc2lvbiAkbHRfcHZlcnNpb24gZm91bmQuIgorLWVjaG8gIiAgICAgICAgICAgWW91IG5lZWQgbGlidG9vbCB2ZXJzaW9uIDEuNCBvciBuZXdlciBpbnN0YWxsZWQiCistZWNobyAiICAgICAgICAgICB0byBidWlsZCBBUFIgZnJvbSBTVk4uIgorLQorLWV4aXQgMQorK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NvbmZpZ2ZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9jb25maWdmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA1YzRmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9jb25maWdmaXgucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogYXByLTEuMy4zL2Fwci1jb25maWcuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHItMS4zLjMub3JpZy9hcHItY29uZmlnLmluCTIwMDktMDEtMTIgMTU6MTY6MzEuMDAwMDAwMDAwICswMDAwCisrKysgYXByLTEuMy4zL2Fwci1jb25maWcuaW4JMjAwOS0wMS0xMiAxNToxOToyNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNTIsMTQgKzE1Miw3IEBACisgICAgIGZsYWdzPSIkZmxhZ3MgJExERkxBR1MiCisgICAgIDs7CisgICAgIC0taW5jbHVkZXMpCistICAgIGlmIHRlc3QgIiRsb2NhdGlvbiIgPSAiaW5zdGFsbGVkIjsgdGhlbgorICAgICAgICAgZmxhZ3M9IiRmbGFncyAtSSRpbmNsdWRlZGlyICRFWFRSQV9JTkNMVURFUyIKKy0gICAgZWxpZiB0ZXN0ICIkbG9jYXRpb24iID0gInNvdXJjZSI7IHRoZW4KKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUkkQVBSX1NPVVJDRV9ESVIvaW5jbHVkZSAkRVhUUkFfSU5DTFVERVMiCistICAgIGVsc2UKKy0gICAgICAgICMgdGhpcyBpcyBmb3IgVlBBVEggYnVpbGRzCistICAgICAgICBmbGFncz0iJGZsYWdzIC1JJEFQUl9CVUlMRF9ESVIvaW5jbHVkZSAtSSRBUFJfU09VUkNFX0RJUi9pbmNsdWRlICRFWFRSQV9JTkNMVURFUyIKKy0gICAgZmkKKyAgICAgOzsKKyAgICAgLS1zcmNkaXIpCisgICAgIGVjaG8gJEFQUl9TT1VSQ0VfRElSCitAQCAtMTgxLDI5ICsxNjcsMTQgQEAKKyAgICAgZXhpdCAwCisgICAgIDs7CisgICAgIC0tbGluay1sZCkKKy0gICAgaWYgdGVzdCAiJGxvY2F0aW9uIiA9ICJpbnN0YWxsZWQiOyB0aGVuCistICAgICAgICAjIyMgYXZvaWQgdXNpbmcgLUwgaWYgbGliZGlyIGlzIGEgInN0YW5kYXJkIiBsb2NhdGlvbiBsaWtlIC91c3IvbGliCistICAgICAgICBmbGFncz0iJGZsYWdzIC1MJGxpYmRpciAtbCR7QVBSX0xJQk5BTUV9IgorLSAgICBlbHNlCistICAgICAgICAjIyMgdGhpcyBzdXJlbHkgY2FuJ3Qgd29yayBzaW5jZSB0aGUgbGlicmFyeSBpcyBpbiAubGlicz8KKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUwkQVBSX0JVSUxEX0RJUiAtbCR7QVBSX0xJQk5BTUV9IgorLSAgICBmaQorKyAgICAgICAgZmxhZ3M9IiRmbGFncyAtbCR7QVBSX0xJQk5BTUV9IgorICAgICA7OworICAgICAtLWxpbmstbGlidG9vbCkKKyAgICAgIyBJZiB0aGUgTEFfRklMRSBleGlzdHMgd2hlcmUgd2UgdGhpbmsgaXQgc2hvdWxkIGJlLCB1c2UgaXQuICBJZiB3ZSdyZQorICAgICAjIGluc3RhbGxlZCBhbmQgdGhlIExBX0ZJTEUgZG9lcyBub3QgZXhpc3QsIGFzc3VtZSB0byB1c2UgLUwvLWwKKyAgICAgIyAodGhlIExBX0ZJTEUgbWF5IG5vdCBoYXZlIGJlZW4gaW5zdGFsbGVkKS4gIElmIHdlJ3JlIGJ1aWxkaW5nIG91cnNlbHZlcywKKyAgICAgIyB3ZSdsbCBhc3N1bWUgdGhhdCBhdCBzb21lIHBvaW50IHRoZSAubGEgZmlsZSBiZSBjcmVhdGVkLgorLSAgICBpZiB0ZXN0IC1mICIkTEFfRklMRSI7IHRoZW4KKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgJExBX0ZJTEUiCistICAgIGVsaWYgdGVzdCAiJGxvY2F0aW9uIiA9ICJpbnN0YWxsZWQiOyB0aGVuCistICAgICAgICAjIyMgYXZvaWQgdXNpbmcgLUwgaWYgbGliZGlyIGlzIGEgInN0YW5kYXJkIiBsb2NhdGlvbiBsaWtlIC91c3IvbGliCistICAgICAgICAjIFNpbmNlIHRoZSB1c2VyIGlzIHNwZWNpZnlpbmcgdGhleSBhcmUgbGlua2luZyB3aXRoIGxpYnRvb2wsIHdlCistICAgICAgICAjICprbm93KiB0aGF0IC1SIHdpbGwgYmUgcmVjb2duaXplZCBieSBsaWJ0b29sLgorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAtTCRsaWJkaXIgLVIkbGliZGlyIC1sJHtBUFJfTElCTkFNRX0iCistICAgIGVsc2UKKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgJExBX0ZJTEUiCistICAgIGZpCisrICAgICAgICBmbGFncz0iJGZsYWdzIC1sJHtBUFJfTElCTkFNRX0iCisgICAgIDs7CisgICAgIC0tc2hsaWItcGF0aC12YXIpCisgICAgIGVjaG8gIiRTSExJQlBBVEhfVkFSIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NvbmZpZ3VyZV9maXhlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9jb25maWd1cmVfZml4ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUxNDAwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9jb25maWd1cmVfZml4ZXMucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogYXByLTEuMy4zL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwci0xLjMuMy5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIGFwci0xLjMuMy9jb25maWd1cmUuaW4KK0BAIC03OTQsMzkgKzc5NCw2IEBAIEFDX0NIRUNLX0ZVTkNTKFttbWFwIG11bm1hcCBzaG1fb3BlbiBzaG0KKyAgICAgICAgICAgICAgICAgY3JlYXRlX2FyZWFdKQorIAorIEFQUl9DSEVDS19ERUZJTkUoTUFQX0FOT04sIHN5cy9tbWFuLmgpCistQUNfQ0hFQ0tfRklMRSgvZGV2L3plcm8pCistCistIyBOb3QgYWxsIHN5c3RlbXMgY2FuIG1tYXAgL2Rldi96ZXJvIChzdWNoIGFzIEhQLVVYKS4gIENoZWNrIGZvciB0aGF0LgorLWlmIHRlc3QgIiRhY19jdl9mdW5jX21tYXAiID0gInllcyIgJiYKKy0gICB0ZXN0ICIkYWNfY3ZfZmlsZV9fZGV2X3plcm8iID0gInllcyI7IHRoZW4KKy0gICAgQUNfTVNHX0NIRUNLSU5HKGZvciBtbWFwIHRoYXQgY2FuIG1hcCAvZGV2L3plcm8pCistICAgIEFDX1RSWV9SVU4oWworLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KKy0jaW5jbHVkZSA8ZmNudGwuaD4KKy0jaWZkZWYgSEFWRV9TWVNfTU1BTl9ICistI2luY2x1ZGUgPHN5cy9tbWFuLmg+CistI2VuZGlmCistICAgIGludCBtYWluKCkKKy0gICAgeworLSAgICAgICAgaW50IGZkOworLSAgICAgICAgdm9pZCAqbTsKKy0gICAgICAgIGZkID0gb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKTsKKy0gICAgICAgIGlmIChmZCA8IDApIHsKKy0gICAgICAgICAgICByZXR1cm4gMTsKKy0gICAgICAgIH0KKy0gICAgICAgIG0gPSBtbWFwKDAsIHNpemVvZih2b2lkKiksIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7CistICAgICAgICBpZiAobSA9PSAodm9pZCAqKS0xKSB7ICAvKiBha2EgTUFQX0ZBSUxFRCAqLworLSAgICAgICAgICAgIHJldHVybiAyOworLSAgICAgICAgfQorLSAgICAgICAgaWYgKG11bm1hcChtLCBzaXplb2Yodm9pZCopKSA8IDApIHsKKy0gICAgICAgICAgICByZXR1cm4gMzsKKy0gICAgICAgIH0KKy0gICAgICAgIHJldHVybiAwOworLSAgICB9XSwgW10sIFthY19jdl9maWxlX19kZXZfemVybz1ub10sIFthY19jdl9maWxlX19kZXZfemVybz1ub10pCistCistICAgIEFDX01TR19SRVNVTFQoJGFjX2N2X2ZpbGVfX2Rldl96ZXJvKQorLWZpCisgCisgIyBOb3cgd2UgZGV0ZXJtaW5lIHdoaWNoIG9uZSBpcyBvdXIgYW5vbnltb3VzIHNobWVtIHByZWZlcmVuY2UuCisgaGF2ZXNobWdldGFub249IjAiCitAQCAtMTUxOCwxMyArMTQ4NSwxNCBAQCBlbHNlCisgICAgIGJpZ2VuZGlhbj0wCisgZmkKKyAKKy1BUFJfQ0hFQ0tfU0laRU9GX0VYVEVOREVEKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy91aW8uaD5dLHN0cnVjdCBpb3ZlYywwKQorLWlmIHRlc3QgIiRhY19jdl9zaXplb2Zfc3RydWN0X2lvdmVjIiA9ICIwIjsgdGhlbgorLSAgICBoYXZlX2lvdmVjPTAKKy1lbHNlCistICAgIGhhdmVfaW92ZWM9MQorLWZpCisrI0FQUl9DSEVDS19TSVpFT0ZfRVhURU5ERUQoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjI2luY2x1ZGUgPHN5cy91aW8uaD5dLHN0cnVjdCBpb3ZlYywwKQorKyNpZiB0ZXN0ICIkYWNfY3Zfc2l6ZW9mX3N0cnVjdF9pb3ZlYyIgPSAiMCI7IHRoZW4KKysjICAgIGhhdmVfaW92ZWM9MAorKyNlbHNlCisrIyAgICBoYXZlX2lvdmVjPTEKKysjZmkKKytoYXZlX2lvdmVjPTEKKyAKKyBBQ19TVUJTVCh2b2lkcF9zaXplKQorIEFDX1NVQlNUKHNob3J0X3ZhbHVlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxOWExZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9ydW4tcHRlc3QKQEAgLTAsMCArMSw2IEBACisjIS9iaW4vc2gKKworY2QgdGVzdAorLi90ZXN0YWxsIHxzZWQgXAorICAtZSAnc3xcKC4qXCk6ICBTVUNDRVNTfFBBU1M6IFwxfCcgXAorICAtZSAnc3xcKC4qXCk6ICBGQUlMRUR8RkFJTDogXDF8JwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL3VwZ3JhZGUtYW5kLWZpeC0xLjUuMS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci91cGdyYWRlLWFuZC1maXgtMS41LjEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU2OTY0NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci91cGdyYWRlLWFuZC1maXgtMS41LjEucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorTWFrZWZpbGUuaW46IGZpeCBjcm9zcyBjb21waWxpbmcgZmFpbGVkCisKK1RoZSB0b29scy9nZW5fdGVzdF9jaGFyIHdhcyBpbnZva2VkIGF0IGJ1aWxkIHRpbWUsCithbmQgaXQgZGlkbid0IHdvcmsgZm9yIHRoZSBjcm9zcyBjb21waWxpbmcsIHNvIHdlCitjb21waWxlIGl0IHdpdGggJEJVSUxEX0NDLgorCitSZW1vdmUgdGhlICd0b29scycgZGlyIGNyZWF0aW9uLCBpdCBhbHdheXMgZXhpc3RlZC4KK0FuZCBpdCBjYXVzZWQgZ2VuX3Rlc3RfY2hhciB1bmV4cGVjdGVkIHJlYnVpbHQgYXQKK2RvX2luc3RhbGwgdGltZS4KKworVXBzdHJlYW0tU3RhdHVzOiBpbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAxMCArKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGEyYTUxOTQuLjVmZTAyOGYgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC00Niw3ICs0Niw2IEBAIExUX1ZFUlNJT04gPSBATFRfVkVSU0lPTkAKKyAKKyBDTEVBTl9UQVJHRVRTID0gYXByLWNvbmZpZy5vdXQgYXByLmV4cCBleHBvcnRzLmMgZXhwb3J0X3ZhcnMuYyAubWFrZS5kaXJzIFwKKyAJYnVpbGQvYXByX3J1bGVzLm91dCB0b29scy9nZW5fdGVzdF9jaGFyQEVYRUVYVEAgXAorLQl0b29scy9nZW5fdGVzdF9jaGFyLm8gdG9vbHMvZ2VuX3Rlc3RfY2hhci5sbyBcCisgCWluY2x1ZGUvcHJpdmF0ZS9hcHJfZXNjYXBlX3Rlc3RfY2hhci5oCisgRElTVENMRUFOX1RBUkdFVFMgPSBjb25maWcuY2FjaGUgY29uZmlnLmxvZyBjb25maWcuc3RhdHVzIFwKKyAJaW5jbHVkZS9hcHIuaCBpbmNsdWRlL2FyY2gvdW5peC9hcHJfcHJpdmF0ZS5oIFwKK0BAIC0xMjksMTMgKzEyOCw4IEBAIGNoZWNrOiAkKFRBUkdFVF9MSUIpCisgZXRhZ3M6CisgCWV0YWdzIGBmaW5kIC4gLW5hbWUgJyouW2NoXSdgCisgCistT0JKRUNUU19nZW5fdGVzdF9jaGFyID0gdG9vbHMvZ2VuX3Rlc3RfY2hhci5sbyAkKExPQ0FMX0xJQlMpCistdG9vbHMvZ2VuX3Rlc3RfY2hhci5sbzogdG9vbHMvZ2VuX3Rlc3RfY2hhci5jCistCSQoQVBSX01LRElSKSB0b29scworLQkkKExUX0NPTVBJTEUpCistCistdG9vbHMvZ2VuX3Rlc3RfY2hhckBFWEVFWFRAOiAkKE9CSkVDVFNfZ2VuX3Rlc3RfY2hhcikKKy0JJChMSU5LX1BST0cpICQoT0JKRUNUU19nZW5fdGVzdF9jaGFyKSAkKEFMTF9MSUJTKQorK3Rvb2xzL2dlbl90ZXN0X2NoYXJARVhFRVhUQDogdG9vbHMvZ2VuX3Rlc3RfY2hhci5jCisrCSQoQlVJTERfQ0MpICQoQ0ZMQUdTX0ZPUl9CVUlMRCkgJDwgLW8gJEAKKyAKKyBpbmNsdWRlL3ByaXZhdGUvYXByX2VzY2FwZV90ZXN0X2NoYXIuaDogdG9vbHMvZ2VuX3Rlc3RfY2hhckBFWEVFWFRACisgCSQoQVBSX01LRElSKSBpbmNsdWRlL3ByaXZhdGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwcl8xLjUuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwcl8xLjUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWY3ZjM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByXzEuNS4yLmJiCkBAIC0wLDAgKzEsOTYgQEAKK1NVTU1BUlkgPSAiQXBhY2hlIFBvcnRhYmxlIFJ1bnRpbWUgKEFQUikgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly9hcHIuYXBhY2hlLm9yZy8iCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gInV0aWwtbGludXgiCisKK0xJQ0VOU0UgPSAiQXBhY2hlLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTRkZmQ0Y2QyMTY4MjhjOGNhZTVkZTVhMTJmMzg0NGM4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvYXByX2xpYi5oO2VuZGxpbmU9MTc7bWQ1PWVlNDJmYTc1NzVkYzQwNTgwYTllMDFjMWI3NWZhZTk2IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUkkgPSAiJHtBUEFDSEVfTUlSUk9SfS9hcHIvJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlX2ZpeGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NsZWFudXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29uZmlnZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly91cGdyYWRlLWFuZC1maXgtMS41LjEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vRml4LXBhY2tldC1kaXNjYXJkcy1IVFRQLXJlZGlyZWN0LnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjRlOTc2OWYzMzQ5ZmUxMWZjMGE1ZTFiMjI0YzIzNmFhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdkMDNlZDI5YzIyYTcxNTJiZTQ1YjhlNTA0MzEwNjM3MzZkZjllMWRhYTFkZGY5M2Y2YTU0N2JhN2EyOGY2N2EiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBsaWJfcGFja2FnZSBiaW5jb25maWcgbXVsdGlsaWJfaGVhZGVyIHB0ZXN0CisKK09FX0JJTkNPTkZJR19FWFRSQV9NQU5HTEUgPSAiIC1lICdzOmxvY2F0aW9uPXNvdXJjZTpsb2NhdGlvbj1pbnN0YWxsZWQ6JyIKKworIyBBZGRlZCB0byBmaXggc29tZSBpc3N1ZXMgd2l0aCBjbWFrZS4gUmVmZXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL2Jtd2Nhcml0L21ldGEtcm9zL2lzc3Vlcy82OCNpc3N1ZWNvbW1lbnQtMTk4OTY5MjgKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhcHJfY3ZfbXV0ZXhfcmVjdXJzaXZlPXllcyIKKworIyBBbHNvIHN1cHByZXNzIHRyeWluZyB0byB1c2Ugc2N0cC4KKyMKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9bm8gYWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD1ubyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyBBdm9pZCBhYnNvbHV0ZSBwYXRocyBmb3IgZ3JlcCBzaW5jZSBpdCBjYXVzZXMgZmFpbHVyZXMKKwkjIHdoZW4gdXNpbmcgc3N0YXRlIGJldHdlZW4gZGlmZmVyZW50IGhvc3RzIHdpdGggZGlmZmVyZW50CisJIyBpbnN0YWxsIHBhdGhzIGZvciBncmVwLgorCWV4cG9ydCBHUkVQPSJncmVwIgorCisJY2QgJHtTfQorCS4vYnVpbGRjb25mCit9CisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2Fwci5leHAgJHtkYXRhZGlyfS9idWlsZC0xLyoiCitSREVQRU5EU18ke1BOfS1kZXYgKz0gImJhc2giCisKKyNmb3Igc29tZSByZWFzb24sIGJ1aWxkL2xpYnRvb2wubTQgaGFuZGxlZCBieSBidWlsZGNvbmYgc3RpbGwgYmUgb3ZlcndyaXR0ZW4KKyN3aGVuIGF1dG9jb25mLCBzbyBoYW5kbGUgaXQgYWdhaW4uCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCXNlZCAtaSAtZSAncy9MSUJUT09MPVwoLipcKXRvcF9idWlsZC9MSUJUT09MPVwxYXByX2J1aWxkLycgJHtTfS9idWlsZC9saWJ0b29sLm00CisJc2VkIC1pIC1lICdzL0xJQlRPT0w9XCguKlwpdG9wX2J1aWxkL0xJQlRPT0w9XDFhcHJfYnVpbGQvJyAke1N9L2J1aWxkL2Fwcl9ydWxlcy5taworfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlvZV9tdWx0aWxpYl9oZWFkZXIgYXByLmgKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2FwcgorCWNwICR7U30vJHtIT1NUX1NZU30tbGlidG9vbCAke0R9JHtkYXRhZGlyfS9idWlsZC0xL2xpYnRvb2wKK30KKworU1NUQVRFX1NDQU5fRklMRVMgKz0gImFwcl9ydWxlcy5tayBsaWJ0b29sIgorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImFwcl9zeXNyb290X3ByZXByb2Nlc3MiCisKK2Fwcl9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCWQ9JHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9hcHIKKwlpbnN0YWxsIC1kICRkLworCWNwICR7U30vYnVpbGQvYXByX3J1bGVzLm1rICRkLworCXNlZCAtaSBzLGFwcl9idWlsZGRpcj0uKixhcHJfYnVpbGRkaXI9LGcgJGQvYXByX3J1bGVzLm1rCisJc2VkIC1pIHMsYXByX2J1aWxkZXJzPS4qLGFwcl9idWlsZGVycz0sZyAkZC9hcHJfcnVsZXMubWsKKwlzZWQgLWkgcyxMSUJUT09MPS4qLExJQlRPT0w9JHtIT1NUX1NZU30tbGlidG9vbCxnICRkL2Fwcl9ydWxlcy5taworCXNlZCAtaSBzLFwkXChhcHJfYnVpbGRlcnNcKSwke1NUQUdJTkdfREFUQURJUn0vYXByLyxnICRkL2Fwcl9ydWxlcy5taworCWNwICR7U30vYnVpbGQvbWtkaXIuc2ggJGQvCisJY3AgJHtTfS9idWlsZC9tYWtlX2V4cG9ydHMuYXdrICRkLworCWNwICR7U30vYnVpbGQvbWFrZV92YXJfZXhwb3J0LmF3ayAkZC8KK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwljZCAke1N9L3Rlc3QKKwlvZV9ydW5tYWtlCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdD0ke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJbWtkaXIgLXAgJHQvLmxpYnMKKwljcCAtciAke1N9L3Rlc3QvZGF0YSAkdC8KKwljcCAtciAke1N9L3Rlc3QvLmxpYnMvKi5zbyAkdC8ubGlicy8KKwljcCAke1N9L3Rlc3QvcHJvY19jaGlsZCAkdC8KKwljcCAke1N9L3Rlc3QvcmVhZGNoaWxkICR0LworCWNwICR7U30vdGVzdC9zb2NrY2hpbGQgJHQvCisJY3AgJHtTfS90ZXN0L3NvY2twZXJmICR0LworCWNwICR7U30vdGVzdC90ZXN0YWxsICR0LworCWNwICR7U30vdGVzdC90cnlyZWFkICR0LworfQorCitleHBvcnQgQ09ORklHX1NIRUxMPSIvYmluL2Jhc2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2FzcGVsbC9hc3BlbGxfMC42MC42LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2FzcGVsbC9hc3BlbGxfMC42MC42LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NmMTdkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXNwZWxsL2FzcGVsbF8wLjYwLjYuMS5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkdOVSBBc3BlbGwgc3BlbGwtY2hlY2tlciIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworTElDRU5TRSA9ICJMR1BMdjIgfCBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2FzcGVsbC9hc3BlbGwtJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gImU2NmE5YzlhZjZhNjBkYzQ2MTM0ZmRhY2Y2Y2U5N2Q3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY1MjU4M2E4M2E2MzYzMzcwMWM1ZjcxZGIzZGM0MGFhYjg3YjdmNzZiMjk3MjNhZWIyNzk0MWVmZjQyZGY2ZTEiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2N1cnNlc10gPSAiLS1lbmFibGUtY3Vyc2VzLC0tZGlzYWJsZS1jdXJzZXMsbmN1cnNlcyIKKworUEFDS0FHRVMgKz0gImxpYmFzcGVsbCBsaWJwc3BlbGwgYXNwZWxsLXV0aWxzIgorCitSREVQRU5EU18ke1BOfS11dGlscyArPSAicGVybCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vYXNwZWxsLTAuNjAvLmRlYnUqIgorRklMRVNfbGliYXNwZWxsID0gIiR7bGliZGlyfS9saWJhc3BlbGwuc28uKiAke2xpYmRpcn0vYXNwZWxsKiIKK0ZJTEVTX2FzcGVsbC11dGlscyA9ICIke2JpbmRpcn0vd29yZC1saXN0LWNvbXByZXNzICR7YmluZGlyfS9hc3BlbGwtaW1wb3J0ICR7YmluZGlyfS9ydW4td2l0aC1hc3BlbGwgJHtiaW5kaXJ9L3ByZSoiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vYXNwZWxsIgorRklMRVNfbGlicHNwZWxsID0gIiR7bGliZGlyfS9saWJwc3BlbGwuc28uKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L3BzcGVsbC1jb25maWciCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgoraW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGdldHRleHQgdGV4aW5mbyBiaW5jb25maWctZGlzYWJsZWQKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9wc3BlbGwtY29uZmlnIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1hdGtfMi4xNi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1hdGtfMi4xNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkOTVmZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWF0a18yLjE2LjAuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJBVC1TUEkgMiBUb29sa2l0IEJyaWRnZSIKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTlmMjg4YmE5ODJkNjA1MThmMzc1YjU4OTgyODM4ODYiCisKK01BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LyR7TUFKX1ZFUn0vJHtCUE59LSR7UFZ9LnRhci54eiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI4OTM2NDg4YzhjZGNlMGUxNThmODBiMmUyNDc1MjdmOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3OGVmYzQ1ZWMzNjM4M2JmNzg1Zjg2MzZlNjRhOGQ4NjZkZWZlYjAyMGUwMGEwOGY5Mjk3OGYxZmMzNzcyZmY5IgorCitERVBFTkRTID0gImRidXMgZ2xpYi0yLjAgYXRrIGF0LXNwaTItY29yZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBhdC1zcGkyLWNvcmUgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWdub21lICR7UE59LWd0azIiCisKK0ZJTEVTXyR7UE59LWdub21lID0gIiR7bGliZGlyfS9nbm9tZS1zZXR0aW5ncy1kYWVtb24tMy4wL2d0ay1tb2R1bGVzIgorRklMRVNfJHtQTn0tZ3RrMiA9ICIke2xpYmRpcn0vZ3RrLTIuMC9tb2R1bGVzL2xpYmF0ay1icmlkZ2UuKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2d0ay0yLjAvbW9kdWxlcy8uZGVidWciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmUvMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItY29yZS8wMDAxLW5scy5tNC1UYWtlLWl0LWZyb20tZ2V0dGV4dC0wLjE1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YTUxZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmUvMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGMzMjA3OTljOTQxZDQyYTliN2UzNTE4MDUzNTk2OTRlYTNiMzZkMmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCA1IEFwciAyMDE1IDA5OjA4OjM4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIG5scy5tNDogVGFrZSBpdCBmcm9tIGdldHRleHQtMC4xNQorCitJdCBvdGhlcndpc2UgZXhwZWN0cyBnZXR0ZXh0IHRvIHByb3ZpZGUgaXQuIExldHMgZ28gaW5kZXBlbmRlbnQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBtNC9ubHMubTQgfCAzMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBtNC9ubHMubTQKKworZGlmZiAtLWdpdCBhL200L25scy5tNCBiL200L25scy5tNAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjJjOGZlNjkKKy0tLSAvZGV2L251bGwKKysrKyBiL200L25scy5tNAorQEAgLTAsMCArMSwzMCBAQAorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMywgMjAwNS0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSBub3QgaW4gdGhlIHB1YmxpYyBkb21haW4uCisrCisrZG5sIEF1dGhvcnM6CisrZG5sIFVscmljaCBEcmVwcGVyIGRyZXBwZXJAY3lnbnVzLmNvbSwgMTk5NS0yMDAwLgorK2RubCBCcnVubyBIYWlibGUgaGFpYmxlQGNsaXNwLmNvbnMub3JnLCAyMDAwLTIwMDMuCisrCisrQUNfUFJFUkVRKDIuNTApCisrCisrQUNfREVGVU4oW0FNX05MU10sCisrWworK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkXSkKKytkbmwgRGVmYXVsdCBpcyBlbmFibGVkIE5MUworK0FDX0FSR19FTkFCTEUobmxzLAorK1sgLS1kaXNhYmxlLW5scyBkbyBub3QgdXNlIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0XSwKKytVU0VfTkxTPSRlbmFibGV2YWwsIFVTRV9OTFM9eWVzKQorK0FDX01TR19SRVNVTFQoJFVTRV9OTFMpCisrQUNfU1VCU1QoVVNFX05MUykKKytdKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmVfMi4xNi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlXzIuMTYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzNjYmU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlXzIuMTYuMC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkFzc2lzdGl2ZSBUZWNobm9sb2d5IFNlcnZpY2UgUHJvdmlkZXIgSW50ZXJmYWNlIChkYnVzIGNvcmUpIgorTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lOWYyODhiYTk4MmQ2MDUxOGYzNzViNTg5ODI4Mzg4NiIKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbmxzLm00LVRha2UtaXQtZnJvbS1nZXR0ZXh0LTAuMTUucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImJlNmVlZWEzNzBmOTEzYjc2MzliNjA5OTEzYjJjZjAyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFjMGI3N2ZiOGNlODFhYmJmMWQ4MGMwYWZlZTk4NThiM2Y5MjI5ZjY3M2I3ODgxOTk1ZmUwZmMxNmIxYTc0ZDAiCisKK0RFUEVORFMgPSAiZGJ1cyBnbGliLTIuMCB2aXJ0dWFsL2xpYngxMSBsaWJ4aSBsaWJ4dHN0IGludGx0b29sLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ3RrLWRvYyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiAtLWRpc2FibGUteGV2aWUgLS13aXRoLWRidXMtZGFlbW9uZGlyPSR7YmluZGlyfSIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzLyouc2VydmljZSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvYWNjZXNzaWJpbGl0eS1zZXJ2aWNlcy8qLnNlcnZpY2UiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdGtfMi4xNi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXRrXzIuMTYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjhmOWI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXRrXzIuMTYuMC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkFjY2Vzc2liaWxpdHkgdG9vbGtpdCBmb3IgR05PTUUiCitIT01FUEFHRSA9ICJodHRwOi8vbGl2ZS5nbm9tZS5vcmcvR0FQLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorU0VDVElPTiA9ICJ4MTEvbGlicyIKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXRrL2F0a3V0aWwuYztlbmRsaW5lPTE4O21kNT02ZmQzMWNkMmZkYzliMzBmNjE5Y2E4ZDgxOWJjMTJkMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdGsvYXRrLmg7ZW5kbGluZT0xODttZDU9ZmNkNzcxMDE4N2UwZWFlNDg1ZTM1NmMzMGQxYjBjM2IiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCisKK2luaGVyaXQgZ25vbWViYXNlIGd0ay1kb2MKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYzdjNTAwMmJkNmU1OGI0NzIzYTE2NWYxYmYzMTIxMTYiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIwOTVmOTg2MDYwYTZhMGIyMmViMTVlZWY4NGFlOWYxNGExY2Y4MDgyNDg4ZmFhNjg4NmQ5NGMzNzQzOGFlNTYyIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1nbGlidGVzdCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYmM4YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsLmluYwpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBmb3IgbWFuYWdpbmcgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCitIT01FUEFHRSA9ICJodHRwOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9wcm9qZWN0cy9hY2wvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIEdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0gPSAiR1BMdjIrIgorTElDRU5TRV9saWIke0JQTn0gPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZG9jL0NPUFlJTkc7bWQ1PWM3ODFkNzBlZDJiNGQ0ODk5NWI3OTA0MDMyMTdhMjQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvYy9DT1BZSU5HLkxHUEw7bWQ1PTllOWEyMDY5MTdmOGFmMTEyZGE2MzRjZTNhYjQxNzY0IgorCitERVBFTkRTID0gImF0dHIiCitTUkNfVVJJID0gIiR7U0FWQU5OQUhfR05VX01JUlJPUn0vYWNsLyR7QlB9LnNyYy50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2FjbC1maXgtdGhlLW9yZGVyLW9mLWV4cGVjdGVkLW91dHB1dC1vZi1nZXRmYWNsLnBhdGNoIFwKKyIKKworcmVxdWlyZSBlYS1hY2wuaW5jCisKKyMgYXZvaWQgUlBBVEggaGFyZGNvZGUgdG8gc3RhZ2luZyBkaXIKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJc2VkIC1pICR7U30vY29uZmlnLnN0YXR1cyAtZSBzLF5cXFwoaGFyZGNvZGVfaW50b19saWJzPVxcXCkuKiQsXFwxXCdub1wnLAorCSR7U30vY29uZmlnLnN0YXR1cworfQorCisjIGxpYmRpciBzaG91bGQgcG9pbnQgdG8gLmxhCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlzZWQgLWkgJHtEfSR7bGliZGlyfS9saWJhY2wubGEgLWUgXAorCSAgICBzLF5saWJkaXI9XCcke2Jhc2VfbGliZGlyfVwnJCxsaWJkaXI9XCcke2xpYmRpcn1cJywKK30KKworaW5oZXJpdCBwdGVzdAorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXRhciAtY2YgLSB0ZXN0LyAtLWV4Y2x1ZGUgbmZzIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCW1rZGlyICR7RH0ke1BURVNUX1BBVEh9L2luY2x1ZGUKKwljcCAke1N9L2luY2x1ZGUvYnVpbGRkZWZzICR7U30vaW5jbHVkZS9idWlsZG1hY3JvcyAke1N9L2luY2x1ZGUvYnVpbGRydWxlcyAke0R9JHtQVEVTVF9QQVRIfS9pbmNsdWRlLworfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCA9ICJhY2wgYmFzaCBjb3JldXRpbHMgcGVybCBwZXJsLW1vZHVsZS1maWxlaGFuZGxlIHBlcmwtbW9kdWxlLWdldG9wdC1zdGQgcGVybC1tb2R1bGUtcG9zaXggc2hhZG93IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC9hY2wtZml4LXRoZS1vcmRlci1vZi1leHBlY3RlZC1vdXRwdXQtb2YtZ2V0ZmFjbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvYWNsLWZpeC10aGUtb3JkZXItb2YtZXhwZWN0ZWQtb3V0cHV0LW9mLWdldGZhY2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3NjVmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvYWNsLWZpeC10aGUtb3JkZXItb2YtZXhwZWN0ZWQtb3V0cHV0LW9mLWdldGZhY2wucGF0Y2gKQEAgLTAsMCArMSwxOTggQEAKK2FjbDogZml4IHRoZSBvcmRlciBvZiBleHBlY3RlZCBvdXRwdXQgb2YgZ2V0ZmFjbAorCitUaGUgcmVzdWx0IG9mIGdldGZhY2wgaXMgc29ydGVkIGJ5IHVzZXIgaWQuCitJbiBDZW50b3Mgb3IgUkhFTCwgYmluIHVzZXIgaWQgaXMgMSBhbmQgZGFlbW9uIHVzZXIgaWQgaXMgMi4KK0J1dCBpbiBvdXIgaW1hZ2UsIGJpbiB1c2VyIGlkIGlzIDIgYW5kIGRhZW1vbiB1c2VyIGlkIGlzIDEuCitUaGUgcGF0Y2ggZml4ZXMgdGhpcyBpc3N1ZSB0byBtYWtlIHB0ZXN0IHBhc3MuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdC9taXNjLnRlc3QgfCAgIDM4ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdC9taXNjLnRlc3QgYi90ZXN0L21pc2MudGVzdAoraW5kZXggNmU5ODA1My4uNTNhZTViMCAxMDA2NDQKKy0tLSBhL3Rlc3QvbWlzYy50ZXN0CisrKysgYi90ZXN0L21pc2MudGVzdAorQEAgLTc5LDggKzc5LDggQEAgTXVsdGlwbGUgdXNlcnMKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZgorIAk+IHVzZXI6OnJ3LQorLQk+IHVzZXI6YmluOnJ3LQorIAk+IHVzZXI6ZGFlbW9uOnItLQorKwk+IHVzZXI6YmluOnJ3LQorIAk+IGdyb3VwOjpyLS0KKyAJPiBtYXNrOjpydy0KKyAJPiBvdGhlcjo6ci0tCitAQCAtOTQsOCArOTQsOCBAQCBNdWx0aXBsZSBncm91cHMKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZgorIAk+IHVzZXI6OnJ3LQorLQk+IHVzZXI6YmluOnJ3LQorIAk+IHVzZXI6ZGFlbW9uOnItLQorKwk+IHVzZXI6YmluOnJ3LQorIAk+IGdyb3VwOjpyLS0KKyAJPiBncm91cDpkYWVtb246ci0tCisgCT4gZ3JvdXA6dXNlcnM6cnctCitAQCAtMTExLDggKzExMSw4IEBAIFJlbW92ZSBvbmUgZ3JvdXAKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZgorIAk+IHVzZXI6OnJ3LQorLQk+IHVzZXI6YmluOnJ3LQorIAk+IHVzZXI6ZGFlbW9uOnItLQorKwk+IHVzZXI6YmluOnJ3LQorIAk+IGdyb3VwOjpyLS0KKyAJPiBncm91cDpkYWVtb246ci0tCisgCT4gbWFzazo6cnctCitAQCAtMTQ2LDggKzE0Niw4IEBAIERlZmF1bHQgQUNMCisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQKKyAJPiB1c2VyOjpyd3gKKy0JPiB1c2VyOmJpbjpyd3gKKyAJPiB1c2VyOmRhZW1vbjpydy0KKysJPiB1c2VyOmJpbjpyd3gKKyAJPiBncm91cDo6ci14CisgCT4gbWFzazo6cnd4CisgCT4gb3RoZXI6Oi0tLQorQEAgLTIzNiwxNiArMjM2LDE2IEBAIEFkZCBzb21lIHVzZXJzIGFuZCBncm91cHMKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZC9kCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gdXNlcjpkYWVtb246ci14CisrCT4gdXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZ3JvdXA6OnIteAorIAk+IGdyb3VwOmRhZW1vbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBncm91cDp1c2VyczpyLXgKKyAJPiBtYXNrOjpyLXgKKyAJPiBvdGhlcjo6LS0tCisgCT4gZGVmYXVsdDp1c2VyOjpyd3gKKy0JPiBkZWZhdWx0OnVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IGRlZmF1bHQ6dXNlcjpkYWVtb246ci14CisrCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBkZWZhdWx0Omdyb3VwOjpyLXgKKyAJPiBkZWZhdWx0Om1hc2s6OnIteAorIAk+IGRlZmF1bHQ6b3RoZXI6Oi0tLQorQEAgLTI2MiwxNiArMjYyLDE2IEBAIFN5bWxpbmsgaW4gZGlyZWN0b3J5IHdpdGggZGVmYXVsdCBBQ0w/CisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQvbAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IHVzZXI6ZGFlbW9uOnIteAorKwk+IHVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IGdyb3VwOjpyLXgKKyAJPiBncm91cDpkYWVtb246cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZ3JvdXA6dXNlcnM6ci14CisgCT4gbWFzazo6ci14CisgCT4gb3RoZXI6Oi0tLQorIAk+IGRlZmF1bHQ6dXNlcjo6cnd4CistCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBkZWZhdWx0OnVzZXI6ZGFlbW9uOnIteAorKwk+IGRlZmF1bHQ6dXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZGVmYXVsdDpncm91cDo6ci14CisgCT4gZGVmYXVsdDptYXNrOjpyLXgKKyAJPiBkZWZhdWx0Om90aGVyOjotLS0KK0BAIC0yODcsMTYgKzI4NywxNiBAQCBEb2VzIG1hc2sgbWFuaXB1bGF0aW9uIHdvcms/CisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQvZAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnIteAorIAk+IHVzZXI6ZGFlbW9uOnIteAorKwk+IHVzZXI6YmluOnIteAorIAk+IGdyb3VwOjpyLXgKKyAJPiBncm91cDpkYWVtb246ci14CisgCT4gZ3JvdXA6dXNlcnM6ci14CisgCT4gbWFzazo6ci14CisgCT4gb3RoZXI6Oi0tLQorIAk+IGRlZmF1bHQ6dXNlcjo6cnd4CistCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBkZWZhdWx0OnVzZXI6ZGFlbW9uOnIteAorKwk+IGRlZmF1bHQ6dXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZGVmYXVsdDpncm91cDo6ci14CisgCT4gZGVmYXVsdDptYXNrOjpyLXgKKyAJPiBkZWZhdWx0Om90aGVyOjotLS0KK0BAIC0zMDgsMTYgKzMwOCwxNiBAQCBEb2VzIG1hc2sgbWFuaXB1bGF0aW9uIHdvcms/CisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQvZAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnIteAorIAk+IHVzZXI6ZGFlbW9uOnIteAorKwk+IHVzZXI6YmluOnIteAorIAk+IGdyb3VwOjpyLXgKKyAJPiBncm91cDpkYWVtb246ci14CisgCT4gZ3JvdXA6dXNlcnM6ci14CisgCT4gbWFzazo6ci14CisgCT4gb3RoZXI6Oi0tLQorIAk+IGRlZmF1bHQ6dXNlcjo6cnd4CistCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gKKyAJPiBkZWZhdWx0OnVzZXI6ZGFlbW9uOnIteAorKwk+IGRlZmF1bHQ6dXNlcjpiaW46cnd4CisgCT4gZGVmYXVsdDpncm91cDo6ci14CisgCT4gZGVmYXVsdDptYXNrOjpyd3gKKyAJPiBkZWZhdWx0Om90aGVyOjotLS0KK0BAIC0zMzMsOCArMzMzLDggQEAgUmVtb3ZlIHRoZSBkZWZhdWx0IEFDTAorIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBkCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46cnd4CisgCT4gdXNlcjpkYWVtb246cnctCisrCT4gdXNlcjpiaW46cnd4CisgCT4gZ3JvdXA6OnIteAorIAk+IG1hc2s6OnJ3eAorIAk+IG90aGVyOjotLS0KK0BAIC0zNzMsMTQgKzM3MywxNCBAQCBOb3csIGNobW9kIHNob3VsZCBjaGFuZ2UgdGhlIGdyb3VwX29iaiBlbnRyeQorIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBkCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46ci14CisgCT4gdXNlcjpkYWVtb246cnd4CisrCT4gdXNlcjpiaW46ci14CisgCT4gZ3JvdXA6OnJ3eAorIAk+IG1hc2s6OnJ3eAorIAk+IG90aGVyOjpyLXgKKyAJPiBkZWZhdWx0OnVzZXI6OnJ3eAorLQk+IGRlZmF1bHQ6dXNlcjpiaW46ci14CisgCT4gZGVmYXVsdDp1c2VyOmRhZW1vbjpyd3gKKysJPiBkZWZhdWx0OnVzZXI6YmluOnIteAorIAk+IGRlZmF1bHQ6Z3JvdXA6OnJ3eAorIAk+IGRlZmF1bHQ6bWFzazo6cnd4CisgCT4gZGVmYXVsdDpvdGhlcjo6ci14CitAQCAtMzkyLDE0ICszOTIsMTQgQEAgTm93LCBjaG1vZCBzaG91bGQgY2hhbmdlIHRoZSBncm91cF9vYmogZW50cnkKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnIteAorIAk+IHVzZXI6ZGFlbW9uOnJ3eAkjZWZmZWN0aXZlOnIteAorKwk+IHVzZXI6YmluOnIteAorIAk+IGdyb3VwOjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBtYXNrOjpyLXgKKyAJPiBvdGhlcjo6LS0tCisgCT4gZGVmYXVsdDp1c2VyOjpyd3gKKy0JPiBkZWZhdWx0OnVzZXI6YmluOnIteAorIAk+IGRlZmF1bHQ6dXNlcjpkYWVtb246cnd4CisrCT4gZGVmYXVsdDp1c2VyOmJpbjpyLXgKKyAJPiBkZWZhdWx0Omdyb3VwOjpyd3gKKyAJPiBkZWZhdWx0Om1hc2s6OnJ3eAorIAk+IGRlZmF1bHQ6b3RoZXI6OnIteAorQEAgLTQxMSwxNCArNDExLDE0IEBAIE5vdywgY2htb2Qgc2hvdWxkIGNoYW5nZSB0aGUgZ3JvdXBfb2JqIGVudHJ5CisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQKKyAJPiB1c2VyOjpyd3gKKy0JPiB1c2VyOmJpbjpyLXgKKyAJPiB1c2VyOmRhZW1vbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKysJPiB1c2VyOmJpbjpyLXgKKyAJPiBncm91cDo6cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gbWFzazo6ci14CisgCT4gb3RoZXI6Oi0tLQorIAk+IGRlZmF1bHQ6dXNlcjo6cnd4CistCT4gZGVmYXVsdDp1c2VyOmJpbjpyLXgKKyAJPiBkZWZhdWx0OnVzZXI6ZGFlbW9uOnJ3eAorKwk+IGRlZmF1bHQ6dXNlcjpiaW46ci14CisgCT4gZGVmYXVsdDpncm91cDo6cnd4CisgCT4gZGVmYXVsdDptYXNrOjpyd3gKKyAJPiBkZWZhdWx0Om90aGVyOjpyLXgKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL2FkZC1taXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvYWRkLW1pc3NpbmctY29uZmlndXJlLmFjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNjk3OWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL2FkZC1taXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaApAQCAtMCwwICsxLDU5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtjb25maWd1cmUuYWMgaXMgbWlzc2luZyBmcm9tIHRhcmJhbGxdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGFjbC0yLjIuNTIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgYWNsLTIuMi41Mi9jb25maWd1cmUuYWMKK0BAIC0wLDAgKzEsNTAgQEAKKysKKysjIENvcHlyaWdodCAoQykgMjAwOSAgQW5kcmVhcyBHcnVlbmJhY2hlciA8YWdydWVuQHN1c2UuZGU+CisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysjCisrQUNfSU5JVChpbmNsdWRlL2FjbC5oKQorK0FDX0NPTkZJR19BVVhfRElSKFsuXSkKKytBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCisrQUNfQ09ORklHX0hFQURFUihpbmNsdWRlL2NvbmZpZy5oKQorK0FDX1BSRUZJWF9ERUZBVUxUKC91c3IpCisrCisrQUNfUFJPR19MSUJUT09MCisrCisrQUNfQVJHX0VOQUJMRShzaGFyZWQsCisrWyAtLWVuYWJsZS1zaGFyZWQ9W3llcy9ub10gRW5hYmxlIHVzZSBvZiBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PXllc11dLCwKKysJZW5hYmxlX3NoYXJlZD15ZXMpCisrQUNfU1VCU1QoZW5hYmxlX3NoYXJlZCkKKysKKytBQ19BUkdfRU5BQkxFKGdldHRleHQsCisrWyAtLWVuYWJsZS1nZXR0ZXh0PVt5ZXMvbm9dIEVuYWJsZSBhbHRlcm5hdGUgbGFuZ3VhZ2Ugc3VwcG9ydCBbZGVmYXVsdD15ZXNdXSwsCisrCWVuYWJsZV9nZXR0ZXh0PXllcykKKytBQ19TVUJTVChlbmFibGVfZ2V0dGV4dCkKKysKKytBQ19BUkdfRU5BQkxFKGxpYjY0LAorK1sgLS1lbmFibGUtbGliNjQ9W3llcy9ub10gRW5hYmxlIGxpYjY0IHN1cHBvcnQgW2RlZmF1bHQ9bm9dXSwsCisrCWVuYWJsZV9saWI2ND1ubykKKytBQ19TVUJTVChlbmFibGVfbGliNjQpCisrCisrQUNfUEFDS0FHRV9HTE9CQUxTKGFjbCkKKytBQ19QQUNLQUdFX1VUSUxJVElFUyhhY2wpCisrQUNfUEFDS0FHRV9ORUVEX0FUVFJfWEFUVFJfSAorK0FDX1BBQ0tBR0VfTkVFRF9BVFRSX0VSUk9SX0gKKytBQ19NVUxUSUxJQigkZW5hYmxlX2xpYjY0KQorK0FDX1BBQ0tBR0VfTkVFRF9HRVRYQVRUUl9MSUJBVFRSCisrQUNfTUFOVUFMX0ZPUk1BVAorKworK0FDX0ZVTkNfR0NDX1ZJU0lCSUxJVFkKKysKKytBQ19PVVRQVVQoaW5jbHVkZS9idWlsZGRlZnMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMzFjYzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL3J1bi1wdGVzdApAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9zaAorCitncGFzc3dkIC1hIGRhZW1vbiBiaW4KK21ha2UgLUMgdGVzdCAtayB0ZXN0cyByb290LXRlc3RzIHxzZWQgXAorIC1lICdzfF5cWy4qXF0gXCguKlwpIC0tIG9rJHxQQVNTOiBcMXwnIFwKKyAtZSAnc3xeXFsuKlxdIFwoLipcKSAtLSBmYWlsZWR8RkFJTDogXDF8JworZ3Bhc3N3ZCAtZCBkYWVtb24gYmluCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsXzIuMi41Mi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2xfMi4yLjUyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZGJkYjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsXzIuMi41Mi5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgYWNsLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vYWRkLW1pc3NpbmctY29uZmlndXJlLmFjLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTYxNDE1MzEyNDI2ZTljMjIxMmJkN2RjNzkyOWFiZGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTc5MDc0YmIwNTgwYzA2YzRiNDEzN2JlNGM1YTkyYTcwMTU4MzI3Nzk2N2FjZGI1NTQ2MDQzYzc4NzRlMGQyMyIKKworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0ci5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0ci5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhjNzUwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyLmluYwpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBmb3IgbWFuaXB1bGF0aW5nIGZpbGVzeXN0ZW0gZXh0ZW5kZWQgYXR0cmlidXRlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL2F0dHIvIgorU0VDVElPTiA9ICJsaWJzIgorCitERVBFTkRTID0gIm5jdXJzZXMgdmlydHVhbC9saWJpbnRsIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIEdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0gPSAiR1BMdjIrIgorTElDRU5TRV9saWIke0JQTn0gPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZG9jL0NPUFlJTkc7bWQ1PTJkMGFhMTRiM2ZjZTQ2OTRlNGY2MTVlMzAxODYzMzVmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F0dHIvYXR0ci5jO2VuZGxpbmU9MTc7bWQ1PWJlMDQwMzI2MWYwODQ3ZTVmNDNlZDViMDhkMTk1OTNjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmF0dHIvbGliYXR0ci5jO2VuZGxpbmU9MTc7bWQ1PTc5NzBmNzcwNDlmOGZhMTE5OWZmZjYyYTdhYjcyNGZiIgorCitTUkNfVVJJID0gIiR7U0FWQU5OQUhfR05VX01JUlJPUn0vYXR0ci8ke0JQfS5zcmMudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK3JlcXVpcmUgZWEtYWNsLmluYworCisjIGxpYmRpciBzaG91bGQgcG9pbnQgdG8gLmxhCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlzZWQgLWkgJHtEfSR7bGliZGlyfS9saWJhdHRyLmxhIC1lIFwKKwkgICAgcyxebGliZGlyPVwnJHtiYXNlX2xpYmRpcn1cJyQsbGliZGlyPVwnJHtsaWJkaXJ9XCcsCit9CisKK2luaGVyaXQgcHRlc3QKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0YXIgLWNmIC0gdGVzdC8gLS1leGNsdWRlIGV4dCB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKKwlta2RpciAke0R9JHtQVEVTVF9QQVRIfS9pbmNsdWRlCisJZm9yIGkgaW4gYnVpbGRkZWZzIGJ1aWxkbWFjcm9zIGJ1aWxkcnVsZXM7IFwKKwkgIGRvIGNwICR7U30vaW5jbHVkZS8kaSAke0R9JHtQVEVTVF9QQVRIfS9pbmNsdWRlLzsgXAorCWRvbmUKKwlzZWQgLWUgJ3N8OyBAZWNob3w7IGVjaG98JyAtaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0L01ha2VmaWxlCit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gImNvcmV1dGlscyBwZXJsLW1vZHVsZS1maWxlaGFuZGxlIHBlcmwtbW9kdWxlLWdldG9wdC1zdGQgcGVybC1tb2R1bGUtcG9zaXgiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0cl8yLjQuNDcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0cl8yLjQuNDcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ0MGM5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyXzIuNC40Ny5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIGF0dHIuaW5jCisKKyMgY29uZmlndXJlLmFjIHdhcyBtaXNzaW5nIGZyb20gdGhlIHJlbGVhc2UgdGFyYmFsbC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgaW4KKyMgZnV0dXJlIHJlbGVhc2VzIG9mIGF0dHIsIHJlbW92ZSB0aGlzIHdoZW4gdXBkYXRpbmcgdGhlIHJlY2lwZS4KK1NSQ19VUklfYXBwZW5kICs9ICJmaWxlOi8vYXR0ci1NaXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjg0ZjU4ZGVjMDBiNjBmMmRjOGZkMWM5NzA5MjkxY2M3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI1NzcyZjY1M2FjNWIyZTNjZWViODlkZjUwZTQ2ODg4OTFlMjFmNzIzYzQ2MDYzNjU0ODk3MTY1MmFmMGE4NTkiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9lYS1hY2wuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2VhLWFjbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcwZTE2ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9lYS1hY2wuaW5jCkBAIC0wLDAgKzEsNTIgQEAKKyMgdGhpcyBidWlsZCBzeXN0ZW0gaXMgbW9zdGx5IHNoYXJlZCBieSBhdHRyIGFuZCBhY2wKKworU1JDX1VSSSArPSAiZmlsZTovL3JlbGF0aXZlLWxpYmRpci5wYXRjaDtzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBnZXR0ZXh0CisKKyMgdGhlIHBhY2thZ2UgY29tZXMgd2l0aCBhIGN1c3RvbSBjb25maWcuaC5pbiwgaXQgY2Fubm90IGJlCisjIG92ZXJ3cml0dGVuIGJ5IGF1dG9oZWFkZXIKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0tZXhjbHVkZT1hdXRvaGVhZGVyIgorRVhUUkFfT0VDT05GID0gIklOU1RBTExfVVNFUj1yb290IElOU1RBTExfR1JPVVA9cm9vdCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLWVuYWJsZS1nZXR0ZXh0PW5vIgorCitFWFRSQV9PRU1BS0UgPSAiUEtHX0xJQl9ESVI9JHtiYXNlX2xpYmRpcn0gUEtHX0RFVkxJQl9ESVI9JHtsaWJkaXJ9IgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwgaW5zdGFsbC1saWIgaW5zdGFsbC1kZXYgRElTVF9ST09UPSIke0R9IgorfQorCitQQUNLQUdFUyA9KyAibGliJHtCUE59IgorCitGSUxFU19saWIke0JQTn0gPSAiJHtiYXNlX2xpYmRpcn0vbGliKiR7U09MSUJTfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisjIE9ubHkgYXBwZW5kIGxkZmxhZ3MgZm9yIHRhcmdldCByZWNpcGUgYW5kIGlmIFVTRV9OTFMgaXMgZW5hYmxlZAorTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmNfY2xhc3MtdGFyZ2V0ID0gIiR7QFsnJywgJyAtbGludGwgJ11bKGQuZ2V0VmFyKCdVU0VfTkxTJywgVHJ1ZSkgPT0gJ3llcycpXX0iCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjX2NsYXNzLXRhcmdldCA9ICIke0BbJycsICcgLS1kaXNhYmxlLWdldHRleHQgJ11bKGQuZ2V0VmFyKCdVU0VfTkxTJywgVHJ1ZSkgPT0gJ25vJyldfSIKKworZml4X3N5bWxpbmsgKCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiAhPSAicG9wdWxhdGVfc3lzcm9vdCIgLWEgIiR7QkJfQ1VSUkVOVFRBU0t9IiAhPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorCXRoZW4KKwkJcmV0dXJuCisJZmkKKworCWlmIHRlc3QgIiR7bGliZGlyfSIgPSAiJHtiYXNlX2xpYmRpcn0iIDsgdGhlbgorCQlyZXR1cm4KKwlmaQorCSMgUmVtb3ZlIGJhZCBzeW1saW5rcyAmIGNyZWF0ZSB0aGUgY29ycmVjdCBzeW1saW5rcworCWlmIHRlc3QgLUwgJHtsaWJkaXJ9L2xpYiR7QlBOfS5zbyA7IHRoZW4KKwkJcm0gLXJmICR7bGliZGlyfS9saWIke0JQTn0uc28KKwkJbG4gLXNmICR7YmFzZV9saWJkaXJ9L2xpYiR7QlBOfS5zbyAke2xpYmRpcn0vbGliJHtCUE59LnNvCisJZmkKKwlpZiB0ZXN0IC1MICR7YmFzZV9saWJkaXJ9L2xpYiR7QlBOfS5hIDsgdGhlbgorCQlybSAtcmYgJHtiYXNlX2xpYmRpcn0vbGliJHtCUE59LmEKKwkJbG4gLXNmICR7bGliZGlyfS9saWIke0JQTn0uYSAke2Jhc2VfbGliZGlyfS9saWIke0JQTn0uYQorCWZpCisJaWYgdGVzdCAtTCAgJHtiYXNlX2xpYmRpcn0vbGliJHtCUE59LmxhIDsgdGhlbgorCQlybSAtcmYgJHtiYXNlX2xpYmRpcn0vbGliJHtCUE59LmxhCisJCWxuIC1zZiAke2xpYmRpcn0vbGliJHtCUE59LmxhICR7YmFzZV9saWJkaXJ9L2xpYiR7QlBOfS5sYQorCWZpCit9CitTU1RBVEVQT1NUSU5TVEZVTkNTX2NsYXNzLW5hdGl2ZSArPSAiZml4X3N5bWxpbmsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvYXR0ci1NaXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9maWxlcy9hdHRyLU1pc3NpbmctY29uZmlndXJlLmFjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZmNjM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvYXR0ci1NaXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaApAQCAtMCwwICsxLDYzIEBACitTdWJqZWN0OiBbUEFUQ0hdIGF0dHI6IE1pc3NpbmcgY29uZmlndXJlLmFjCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW1Vwc3RyZWFtIHJlbGVhc2VkIHRhcmJhbGwgbWlzc2luZyB0aGlzIGZpbGVdCitTaWduZWQtb2ZmLWJ5OiBOYXRoYW4gUm9zc2kgPG5hdGhhbi5yb3NzaUB4aWxpbnguY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgICA0OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNDggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb25maWd1cmUuYWMKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmI5NjZkMGUKKy0tLSAvZGV2L251bGwKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTAsMCArMSw0OCBAQAorKyMgQ29weXJpZ2h0IChDKSAyMDA5ICBBbmRyZWFzIEdydWVuYmFjaGVyIDxhZ3J1ZW5Ac3VzZS5kZT4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKyMKKytBQ19JTklUKGluY2x1ZGUvYXR0cmlidXRlcy5oKQorK0FDX0NPTkZJR19BVVhfRElSKFsuXSkKKytBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCisrQUNfQ09ORklHX0hFQURFUihpbmNsdWRlL2NvbmZpZy5oKQorK0FDX1BSRUZJWF9ERUZBVUxUKC91c3IpCisrCisrQUNfUFJPR19MSUJUT09MCisrCisrQUNfQVJHX0VOQUJMRShzaGFyZWQsCisrWyAtLWVuYWJsZS1zaGFyZWQ9W3llcy9ub10gRW5hYmxlIHVzZSBvZiBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PXllc11dLCwKKysJZW5hYmxlX3NoYXJlZD15ZXMpCisrQUNfU1VCU1QoZW5hYmxlX3NoYXJlZCkKKysKKytBQ19BUkdfRU5BQkxFKGdldHRleHQsCisrWyAtLWVuYWJsZS1nZXR0ZXh0PVt5ZXMvbm9dIEVuYWJsZSBhbHRlcm5hdGUgbGFuZ3VhZ2Ugc3VwcG9ydCBbZGVmYXVsdD15ZXNdXSwsCisrCWVuYWJsZV9nZXR0ZXh0PXllcykKKytBQ19TVUJTVChlbmFibGVfZ2V0dGV4dCkKKysKKytBQ19BUkdfRU5BQkxFKGxpYjY0LAorK1sgLS1lbmFibGUtbGliNjQ9W3llcy9ub10gRW5hYmxlIGxpYjY0IHN1cHBvcnQgW2RlZmF1bHQ9bm9dXSwsCisrCWVuYWJsZV9saWI2ND1ubykKKytBQ19TVUJTVChlbmFibGVfbGliNjQpCisrCisrQUNfUEFDS0FHRV9HTE9CQUxTKGF0dHIpCisrQUNfUEFDS0FHRV9VVElMSVRJRVMoYXR0cikKKytBQ19NQU5VQUxfRk9STUFUCisrQUNfTVVMVElMSUIoJGVuYWJsZV9saWI2NCkKKysKKytBQ19DX0NPTlNUCisrQUNfVFlQRV9NT0RFX1QKKytBQ19GVU5DX0FMTE9DQQorKworK0FDX09VVFBVVChpbmNsdWRlL2J1aWxkZGVmcykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9maWxlcy9yZWxhdGl2ZS1saWJkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvcmVsYXRpdmUtbGliZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MmJmMTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvcmVsYXRpdmUtbGliZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCit1c2UgcmVsYXRpdmUgcGF0aCBpbiBzeW1ib2xpYyBsaW5rcywgb3IgaXQgZmFpbHMgaW4gc3RhZ2luZworc2VkIGV4cHJlc3Npb24gZnJvbSB1ZGV2CisKKzcvMjkvMjAxMCAtIGNyZWF0ZWQgYnkgUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK2RpZmYgLXUgaW5jbHVkZS5vcmlnL2J1aWxkbWFjcm9zIGluY2x1ZGUvYnVpbGRtYWNyb3MKKy0tLSBpbmNsdWRlLm9yaWcvYnVpbGRtYWNyb3MJMjAxMC0wNy0yOSAxNzozOTo0OC4wMDAwMDAwMDAgKzA4MDAKKysrKyBpbmNsdWRlL2J1aWxkbWFjcm9zCTIwMTAtMDctMjkgMTg6MjA6MzQuMDAwMDAwMDAwICswODAwCitAQCAtODgsOSArODgsMTEgQEAKKyAJLi4vJChJTlNUQUxMKSAtbSA3NTUgLWQgJChQS0dfTElCX0RJUik7IFwKKyAJLi4vJChJTlNUQUxMKSAtVCBzb19iYXNlICQoTElCTkFNRSkubGFpICQoUEtHX0xJQl9ESVIpOyBcCisgCWlmIHRlc3QgIngkKFBLR19ERVZMSUJfRElSKSIgIT0gIngkKFBLR19MSUJfRElSKSIgOyB0aGVuIFwKKy0JLi4vJChJTlNUQUxMKSAtUyAkKFBLR19ERVZMSUJfRElSKS8kKExJQk5BTUUpLmEgJChQS0dfTElCX0RJUikvJChMSUJOQU1FKS5hOyBcCistCS4uLyQoSU5TVEFMTCkgLVMgJChQS0dfREVWTElCX0RJUikvJChMSUJOQU1FKS5sYSAkKFBLR19MSUJfRElSKS8kKExJQk5BTUUpLmxhOyBcCistCS4uLyQoSU5TVEFMTCkgLVMgJChQS0dfTElCX0RJUikvJChMSUJOQU1FKS5zbyAkKFBLR19ERVZMSUJfRElSKS8kKExJQk5BTUUpLnNvOyBcCisrCXJlbF9saWJfcHJlZml4PSQkKGVjaG8gJChQS0dfTElCX0RJUikgfCBzZWQgJ3MsXCheL1x8XClbXi9dW14vXSosLi4sZycpOyBcCisrCS4uLyQoSU5TVEFMTCkgLVMgJCRyZWxfbGliX3ByZWZpeCQoUEtHX0RFVkxJQl9ESVIpLyQoTElCTkFNRSkuYSAkKFBLR19MSUJfRElSKS8kKExJQk5BTUUpLmE7IFwKKysJLi4vJChJTlNUQUxMKSAtUyAkJHJlbF9saWJfcHJlZml4JChQS0dfREVWTElCX0RJUikvJChMSUJOQU1FKS5sYSAkKFBLR19MSUJfRElSKS8kKExJQk5BTUUpLmxhOyBcCisrCXJlbF9kZXZsaWJfcHJlZml4PSQkKGVjaG8gJChQS0dfREVWTElCX0RJUikgfCBzZWQgJ3MsXCheL1x8XClbXi9dW14vXSosLi4sZycpOyBcCisrCS4uLyQoSU5TVEFMTCkgLVMgJCRyZWxfZGV2bGliX3ByZWZpeCQoUEtHX0xJQl9ESVIpLyQoTElCTkFNRSkuc28gJChQS0dfREVWTElCX0RJUikvJChMSUJOQU1FKS5zbzsgXAorIAlmaQorIGVsc2UKKyBJTlNUQUxMX0xUTElCX0RFViA9ICQoSU5TVEFMTF9MVExJQl9TVEFUSUMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmM2ODY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2ZpbGVzL3J1bi1wdGVzdApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCittYWtlIC1DIHRlc3QgLWsgdGVzdHMgcm9vdC10ZXN0cyB8c2VkIFwKKyAtZSAnc3xeXFsuKlxdIFwoLipcKSAtLSBvayR8UEFTUzogXDF8JyBcCisgLWUgJ3N8XlxbLipcXSBcKC4qXCkgLS0gZmFpbGVkfEZBSUw6IFwxfCcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2MvMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnYy8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5MDdmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2MvMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gODI5YTg5ZTdmNTc4NTIzOWE5Mzg0ZTNhZmQ0NmM5MDBmOWQ3NmFkYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDMxIEF1ZyAyMDE1IDE5OjU1OjMyICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBidWlsZCB3aXRoIG11c2wKKworc2lnbmFsLmggYWxyZWFkeSBpbmNsdWRlcyBiaXRzL3NpZ2NvbnRleHQuaAorRG9jdW1lbnRhdGlvbiBzZWVtcyB0byBpbmRpY2F0ZSB0aGF0IGlmIHlvdSBuZWVkIHRoZSBkZWZpbml0aW9ucyBpbgorc2lnY29udGV4dC5oLCB5b3UgYXJlIHN1cHBvc2VkIHRvIGluY2x1ZGUgc2lnbmFsLmggYW5kIG5vdCBzaWdjb250ZXh0LmguCisKK2EgZ29vZCBmaXggc2hvdWxkIGJlIHRvIHJlbW92ZSBnbGliYworc3BlY2lmaWMgdW5kZXJzdGFuZGluZywgaW4gdGhvc2UgaWZkZWYncworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIG9zX2RlcC5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvb3NfZGVwLmMgYi9vc19kZXAuYworaW5kZXggMDhjNTAxZC4uNWNiNzg3MyAxMDA2NDQKKy0tLSBhL29zX2RlcC5jCisrKysgYi9vc19kZXAuYworQEAgLTQxLDcgKzQxLDcgQEAKKyAjICAgZWxzZSAvKiBfX0dMSUJDX18gPCAyICovCisgICAgICAgLyogbGliYzUgZG9lc24ndCBoYXZlIDxzaWdjb250ZXh0Lmg+OiBnbyBkaXJlY3RseSB3aXRoIHRoZSBrZXJuZWwgICAqLworICAgICAgIC8qIG9uZS4gIENoZWNrIExJTlVYX1ZFUlNJT05fQ09ERSB0byBzZWUgd2hpY2ggd2Ugc2hvdWxkIHJlZmVyZW5jZS4gKi8KKy0jICAgICBpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorKyMgICAgIGluY2x1ZGUgPHNpZ25hbC5oPgorICMgICBlbmRpZiAvKiBfX0dMSUJDX18gPCAyICovCisgIyBlbmRpZgorICNlbmRpZiAvKiBMSU5VWCAmJiAhUE9XRVJQQyAqLworLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djXzcuNC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnY183LjQuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWUzNThmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnY183LjQuMi5iYgpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIkEgZ2FyYmFnZSBjb2xsZWN0b3IgZm9yIEMgYW5kIEMrKyIKKworREVTQ1JJUFRJT04gPSAiVGhlIEJvZWhtLURlbWVycy1XZWlzZXIgY29uc2VydmF0aXZlIGdhcmJhZ2UgY29sbGVjdG9yIGNhbiBiZVwKKyB1c2VkIGFzIGEgZ2FyYmFnZSBjb2xsZWN0aW5nIHJlcGxhY2VtZW50IGZvciBDIG1hbGxvYyBvciBDKysgbmV3LiBJdCBhbGxvd3NcCisgeW91IHRvIGFsbG9jYXRlIG1lbW9yeSBiYXNpY2FsbHkgYXMgeW91IG5vcm1hbGx5IHdvdWxkLCB3aXRob3V0IGV4cGxpY2l0bHlcCisgZGVhbGxvY2F0aW5nIG1lbW9yeSB0aGF0IGlzIG5vIGxvbmdlciB1c2VmdWwuIFRoZSBjb2xsZWN0b3IgYXV0b21hdGljYWxseVwKKyByZWN5Y2xlcyBtZW1vcnkgd2hlbiBpdCBkZXRlcm1pbmVzIHRoYXQgaXQgY2FuIG5vIGxvbmdlciBiZSBvdGhlcndpc2VcCisgYWNjZXNzZWQuXAorICBUaGUgY29sbGVjdG9yIGlzIGFsc28gdXNlZCBieSBhIG51bWJlciBvZiBwcm9ncmFtbWluZyBsYW5ndWFnZVwKKyBpbXBsZW1lbnRhdGlvbnMgdGhhdCBlaXRoZXIgdXNlIEMgYXMgaW50ZXJtZWRpYXRlIGNvZGUsIHdhbnQgdG8gZmFjaWxpdGF0ZVwKKyBlYXNpZXIgaW50ZXJvcGVyYXRpb24gd2l0aCBDIGxpYnJhcmllcywgb3IganVzdCBwcmVmZXIgdGhlIHNpbXBsZSBjb2xsZWN0b3JcCisgaW50ZXJmYWNlLlwKKyAgQWx0ZXJuYXRpdmVseSwgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIG1heSBiZSB1c2VkIGFzIGEgbGVhayBkZXRlY3RvciBmb3IgQ1wKKyBvciBDKysgcHJvZ3JhbXMsIHRob3VnaCB0aGF0IGlzIG5vdCBpdHMgcHJpbWFyeSBnb2FsLlwKKyAgRW1waXJpY2FsbHksIHRoaXMgY29sbGVjdG9yIHdvcmtzIHdpdGggbW9zdCB1bm1vZGlmaWVkIEMgcHJvZ3JhbXMsIHNpbXBseVwKKyBieSByZXBsYWNpbmcgbWFsbG9jIHdpdGggR0NfbWFsbG9jIGNhbGxzLCByZXBsYWNpbmcgcmVhbGxvYyB3aXRoIEdDX3JlYWxsb2NcCisgY2FsbHMsIGFuZCByZW1vdmluZyBmcmVlIGNhbGxzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5oYm9laG0uaW5mby9nYy8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUUuUVVJQ0s7bWQ1PTU1ZjUwODhmOTBhOTgyZmVkN2FmOWE0ODk3MDQ3ZWY3IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuaGJvZWhtLmluZm8vZ2MvZ2Nfc291cmNlL2djLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjEyYzA1ZmQyODExZDk4OTM0MWQ4YzZkODFmNjZhZjg3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzMzIwYWQ3YzQ1NDYwZTRhNDBlMDNmNWFhNGM2ODkzNzgzZjIxYTE2NDE2YzMyODJiOTk0ZjkzMzMxMmFmYTIiCitGSUxFU18ke1BOfS1kb2MgPSAiL3Vzci9zaGFyZSIKKworUkVBTF9QViA9ICIke0BbZC5nZXRWYXIoJ1BWJywxKVs6LTFdLCBkLmdldFZhcignUFYnLDEpXVsoZC5nZXRWYXIoJ1BWJywxKVstMV0pLmlzZGlnaXQoKV19IgorUyA9ICIke1dPUktESVJ9L2djLSR7UkVBTF9QVn0iCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworIyBieSBkZWZhdWx0IHVzZSBleHRlcm5hbCBsaWJhdG9taWMtb3BzCitQQUNLQUdFQ09ORklHID8/PSAibGliYXRvbWljLW9wcyIKK1BBQ0tBR0VDT05GSUdbbGliYXRvbWljLW9wc10gPSAiLS13aXRoLWxpYmF0b21pYy1vcHM9eWVzLC0td2l0aC1saWJhdG9taWMtb3BzPW5vLGxpYmF0b21pYy1vcHMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvYWRkLW9wdGlvbi1kZXYtZHNwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9hZGQtb3B0aW9uLWRldi1kc3AucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMyOThjZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvYWRkLW9wdGlvbi1kZXYtZHNwLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0FkZCBjb25maWcgb3B0aW9uIC0td2l0aC1kZXYtZHNwLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWmhhbmcgWGlhbyA8eGlhby56aGFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEwNiw2ICsxMDYsMTYgQEAgQUNfQVJHX1dJVEgocHl0aG9uLFsgIC0td2l0aC1weXRob25bWz1BUgorICAgZmkKKyAgIF0pCisgCisrQUNfQVJHX1dJVEgoZGV2LWRzcCxbICAtLXdpdGgtZGV2LWRzcCAgICAgICAgICBlbmFibGVzIGRldi9kc3AgZm9yIGVudHJvcHkgcHJvZHVjaW5nLiBhdXRvIGZvciBhdXRvLWRldGVjdGluZyBkZXYvZGVwIG9uIGhvc3QuIFtbZGVmYXVsdD1ub11dXSxbCisrICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKFtIQVZFX0RFVl9EU1BdLCAxKQorKyAgZWxzZQorKyAgICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSBhdXRvOyAgdGhlbgorKyAgICAgIGFjX2RldGVjdF9kZXZfZHNwPXllcworKyAgICBmaQorKyAgZmkKKysgIF0sW2FjX2RldGVjdF9kZXZfZHNwPW5vXSkKKysKKyAjIENoZWNrIGZvciBleHBlcnQgbW9kZQorIGlmIHRlc3QgIiRhY19lbmFibGVfZXhwZXJ0X21vZGUiID0geWVzOyB0aGVuCisgICBCRUVfRVhQRVJUX01PREUKK0BAIC00NjQsNyArNDc0LDcgQEAgbGludXgqKQorICAgICAgIGFjX2N2X2hhdmVfZGV2X2RzcD1ubworICAgICBmaQorICAgICBdKQorLSAgaWYgdGVzdCAiJGFjX2N2X2hhdmVfZGV2X2RzcCIgPSB5ZXM7IHRoZW4KKysgIGlmIHRlc3QgIiRhY19jdl9oYXZlX2Rldl9kc3AiID0geWVzICYmIHRlc3QgIiRhY19kZXRlY3RfZGV2X2RzcCIgPSB5ZXM7IHRoZW4KKyAgICAgQUNfREVGSU5FKFtIQVZFX0RFVl9EU1BdLCAxKQorICAgZmkKKyAgIDs7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2JlZWNyeXB0LWVuYWJsZS1wdGVzdC1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9iZWVjcnlwdC1lbmFibGUtcHRlc3Qtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTU1MTNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9iZWVjcnlwdC1lbmFibGUtcHRlc3Qtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitiZWVjcnlwdDogZW5hYmxlIHB0ZXN0IHN1cHBvcnQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworQWRkIGluc3RhbGwtcHRlc3QgcnVsZXMuCisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gICAgICAgfCAzICsrKworIHRlc3RzL01ha2VmaWxlLmFtIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggYjdlNzg2OS4uNTA3NmY1OSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTczLDMgKzczLDYgQEAgRElTVENMRUFORklMRVMgPSBtcG9wdC5zIGJsb3dmaXNob3B0LnMgc2hhMW9wdC5zCisgCisgYmVuY2g6CisgCShjZCB0ZXN0cyAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBiZW5jaCkKKysKKytpbnN0YWxsLXB0ZXN0OgorKwkoY2QgdGVzdHMgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2tfUFJPR1JBTVMpCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggMTYwNGU1ZS4uZDhkYjhkOCAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEwMSwzICsxMDEsNiBAQCBiZW5jaDogYmVuY2htZSBiZW5jaHJzYSBiZW5jaGhmIGJlbmNoYmMKKyAJLi9iZW5jaGJjIEFFUyAxMjgKKyAJLi9iZW5jaGJjIEJsb3dmaXNoIDEyOAorIAkuL2JlbmNoYmMgQmxvd2Zpc2ggMTI4CisrCisrY2hlY2tfUFJPR1JBTVM6CisrCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoY2hlY2tfUFJPR1JBTVMpCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9kaXNhYmxlLWljdS1jaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZGlzYWJsZS1pY3UtY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiMWZhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZGlzYWJsZS1pY3UtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorV2UgYXJlIHVuYWJsZSB0byBydW4gY29kZSBhdCBjb25maWd1cmUgdGltZSBpbiBhIGNyb3NzIGVudmlyb25lbW50LCBidXQgYXMgd2UKK2NvbnRyb2wgdGhlIGJ1aWxkIHdlIGNhbiBiZSBmYWlybHkgY2VydGFpbiB0aGlzIGRlcGVuZGVuY3kgaXMgbWV0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitKTCAwNS8wNy8xMAorSW5kZXg6IGJlZWNyeXB0LTQuMi4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJlZWNyeXB0LTQuMi4xLm9yaWcvY29uZmlndXJlLmFjCTIwMTAtMTEtMjYgMTc6MTI6MjUuMDAwMDAwMDAwICswODAwCisrKysgYmVlY3J5cHQtNC4yLjEvY29uZmlndXJlLmFjCTIwMTAtMTEtMjYgMTc6MTI6MzAuMDAwMDAwMDAwICswODAwCitAQCAtMjkyLDMyICsyOTIsNiBAQAorICMgUHJlZGVmaW5lcyBhbmQgY2hlY2tzIGZvciBDKysgQVBJIHN1cHBvcnQKKyBBSF9URU1QTEFURShbQ1BQR0xVRV0sW0RlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgdGhlIEMrKyBjb2RlXSkKKyAKKy1pZiB0ZXN0ICIkYWNfd2l0aF9jcGx1c3BsdXMiID0geWVzOyB0aGVuCistICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBJQk0ncyBJQ1UgbGlicmFyeSB2ZXJzaW9uID49IDIuOF0pCistICBBQ19MQU5HX1BVU0goQykKKy0gIEFDX1JVTl9JRkVMU0UoWworLSAgICBBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pY29kZS91dmVyc2lvbi5oPl1dLFtbCistICAgICAgI2lmIFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNIDwgMgorLSAgICAgIGV4aXQoMSk7CistICAgICAgI2VsaWYgVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPT0gMgorLSAgICAgICMgaWYgVV9JQ1VfVkVSU0lPTl9NSU5PUl9OVU0gPCA4CistICAgICAgZXhpdCgxKTsKKy0gICAgICAjIGVsc2UKKy0gICAgICBleGl0KDApOworLSAgICAgICMgZW5kaWYKKy0gICAgICAjZWxzZQorLSAgICAgIGV4aXQoMCk7CistICAgICAgI2VuZGlmCistICAgIF1dKV0sWworLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorLSAgICBdLFsKKy0gICAgQUNfTVNHX1JFU1VMVChbbm9dKQorLSAgICBBQ19NU0dfV0FSTihbZGlzYWJsaW5nIGNwbHVzcGx1c10pCistICAgIGFjX3dpdGhfY3BsdXNwbHVzPW5vCistICAgIF0pCistICBBQ19MQU5HX1BPUChDKQorLWZpCistCisgQU1fQ09ORElUSU9OQUwoW1dJVEhfQ1BMVVNQTFVTXSxbdGVzdCAiJGFjX3dpdGhfY3BsdXNwbHVzIiA9IHllc10pCisgCisgaWYgdGVzdCAiJGFjX3dpdGhfY3BsdXNwbHVzIiA9IHllcyA7IHRoZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LWZvci1nY2MtNC43LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9maXgtZm9yLWdjYy00LjcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE0NGUzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LWZvci1nY2MtNC43LnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKKworZ2NjLTQuNyBzZWVtcyB0byBiZSBzdHJpY3RlciBhYm91dCBzb21lIHRoaW5ncywgc28gZm9sbG93Cit0aGUgc3VnZ2VzdGlvbiBmcm9tIHRoZSBlcnJvci9ub3RlIGluZm9ybWF0aW9uLgorCisgICAgLi4vLi4veDg2XzY0LWxpbnV4LWxpYnRvb2wgLS10YWc9Q1hYICAgLS1tb2RlPWNvbXBpbGUgZysrIC1ESEFWRV9DT05GSUdfSCAtSS4gLUkuLi8uLiAKKyAgICB4ODZfNjQtbGludXgtbGlidG9vbDogY29tcGlsZTogIGcrKyAtREhBVkVfQ09ORklHX0ggLUkuIC1JLi4vLi4gLUkuLi8uLi9pbmNsdWRlIC1pc3lzdAorICAgIEluIGZpbGUgaW5jbHVkZWQgZnJvbSAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0hhc2h0YWJsZS5oOjQyOjAsCisgICAgICAgICAgICAgICAgICAgICBmcm9tIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvUHJvcGVydGllcy5oOjM2LAorICAgICAgICAgICAgICAgICAgICAgZnJvbSBQcm9wZXJ0aWVzLmN4eDoyNToKKyAgICAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0Lmg6IEluIGluc3RhbnRpYXRpb24gb2YgJ2Jvb2wgYmVlY3J5cHQ6OnV0aQorICAgIFByb3BlcnRpZXMuY3h4OjIyODoxOiAgIHJlcXVpcmVkIGZyb20gaGVyZQorICAgIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaDo1OToyNzogZXJyb3I6ICdjb250YWluc0FsbCcgd2FzIG5vdCBkZWNsCisgICAgLi4vLi4vaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oOjU5OjI3OiBub3RlOiBkZWNsYXJhdGlvbnMgaW4gZGVwZW5kZW50IGIKKyAgICAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0Lmg6NTk6Mjc6IG5vdGU6IHVzZSAndGhpcy0+Y29udGFpbnNBbGwnIGlucworICAgIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaDogSW4gaW5zdGFudGlhdGlvbiBvZiAnYm9vbCBiZWVjcnlwdDo6dXRpCisgICAgUHJvcGVydGllcy5jeHg6MjI4OjE6ICAgcmVxdWlyZWQgZnJvbSBoZXJlCisgICAgLi4vLi4vaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oOjU5OjI3OiBlcnJvcjogJ2NvbnRhaW5zQWxsJyB3YXMgbm90IGRlY2wKKyAgICAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0Lmg6NTk6Mjc6IG5vdGU6IGRlY2xhcmF0aW9ucyBpbiBkZXBlbmRlbnQgYgorICAgIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaDo1OToyNzogbm90ZTogdXNlICd0aGlzLT5jb250YWluc0FsbCcgaW5zCisgICAgCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKKworSW5kZXg6IGJlZWNyeXB0LTQuMi4xL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJlZWNyeXB0LTQuMi4xLm9yaWcvaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oCisrKysgYmVlY3J5cHQtNC4yLjEvaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oCitAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgYmVlY3J5cHQgeworIAkJCQkJaWYgKGMtPnNpemUoKSAhPSBzaXplKCkpCisgCQkJCQkJcmV0dXJuIGZhbHNlOworIAorLQkJCQkJcmV0dXJuIGNvbnRhaW5zQWxsKCpjKTsKKysJCQkJCXJldHVybiB0aGlzLT5jb250YWluc0FsbCgqYyk7CisgCQkJCX0KKyAJCQkJcmV0dXJuIGZhbHNlOworIAkJCX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LXNlY3VyaXR5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9maXgtc2VjdXJpdHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNiMGMwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LXNlY3VyaXR5LnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0ZpeCB2aXNpYmlsaXR5IG9mIHZhcmlvdXMgQysrIGZ1bmN0aW9ucywgaW5zcGlyZWQgYnkgYSBzaW1pbGFyIHBhdGNoIGluIHRoZSBGaW5rCitwcm9qZWN0OiAKK2h0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9maW5rLWNvbW1pdHNAbGlzdHMuc291cmNlZm9yZ2UubmV0L21zZzc1NzQyLmh0bWwKKworSkwgMDUvMDcvMTAgCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogYmVlY3J5cHQtNC4yLjEvaW5jbHVkZS9iZWVjcnlwdC9jKysvYmVleW9uZC9CZWVDZXJ0aWZpY2F0ZS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYmVlY3J5cHQtNC4yLjEub3JpZy9pbmNsdWRlL2JlZWNyeXB0L2MrKy9iZWV5b25kL0JlZUNlcnRpZmljYXRlLmgJMjAxMC0xMS0yNiAxNzoyMjo1Ny4wMDAwMDAwMDAgKzA4MDAKKysrKyBiZWVjcnlwdC00LjIuMS9pbmNsdWRlL2JlZWNyeXB0L2MrKy9iZWV5b25kL0JlZUNlcnRpZmljYXRlLmgJMjAxMC0xMS0yNiAxNzoyMzowMS4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xNDcsMTMgKzE0NywxMyBAQAorIAkJCW11dGFibGUgYnl0ZWFycmF5KiBlbmM7CisgCisgCQkJQmVlQ2VydGlmaWNhdGUoKTsKKy0JCQlCZWVDZXJ0aWZpY2F0ZShJbnB1dFN0cmVhbSYgaW4pIHRocm93IChJT0V4Y2VwdGlvbik7CisgCisgCQkJdm9pZCBlbmNvZGVUQlMoRGF0YU91dHB1dFN0cmVhbSYgb3V0KSBjb25zdCB0aHJvdyAoSU9FeGNlcHRpb24pOworIAorIAkJCWJ5dGVhcnJheSogZW5jb2RlVEJTKCkgY29uc3QgdGhyb3cgKENlcnRpZmljYXRlRW5jb2RpbmdFeGNlcHRpb24pOworIAorIAkJcHVibGljOgorKwkJCUJlZUNlcnRpZmljYXRlKElucHV0U3RyZWFtJiBpbikgdGhyb3cgKElPRXhjZXB0aW9uKTsKKyAJCQlCZWVDZXJ0aWZpY2F0ZShjb25zdCBCZWVDZXJ0aWZpY2F0ZSYpIHRocm93IChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbik7CisgCQkJdmlydHVhbCB+QmVlQ2VydGlmaWNhdGUoKTsKKyAKK0luZGV4OiBiZWVjcnlwdC00LjIuMS9pbmNsdWRlL2JlZWNyeXB0L2MrKy9zZWN1cml0eS9TZWN1cml0eS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYmVlY3J5cHQtNC4yLjEub3JpZy9pbmNsdWRlL2JlZWNyeXB0L2MrKy9zZWN1cml0eS9TZWN1cml0eS5oCTIwMTAtMTEtMjYgMTc6MjA6NTUuMDAwMDAwMDAwICswODAwCisrKysgYmVlY3J5cHQtNC4yLjEvaW5jbHVkZS9iZWVjcnlwdC9jKysvc2VjdXJpdHkvU2VjdXJpdHkuaAkyMDEwLTExLTI2IDE3OjIxOjM2LjAwMDAwMDAwMCArMDgwMAorQEAgLTYxLDcgKzYxLDYgQEAKKyAJCQlmcmllbmQgY2xhc3MgU2VjdXJlUmFuZG9tOworIAkJCWZyaWVuZCBjbGFzcyBTaWduYXR1cmU7CisgCistCQlwcml2YXRlOgorIAkJCXN0cnVjdCBzcGkKKyAJCQl7CisgCQkJCU9iamVjdCogY3NwaTsKK0BAIC03Niw2ICs3NSw3IEBACisgCQkJc3RhdGljIHNwaSogZ2V0U3BpKGNvbnN0IFN0cmluZyYgYWxnbywgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBQcm92aWRlciYpIHRocm93IChOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24pOworIAkJCXN0YXRpYyBzcGkqIGdldEZpcnN0U3BpKGNvbnN0IFN0cmluZyYgdHlwZSk7CisgCisrCQlwcml2YXRlOgorIAkJCXN0YXRpYyBjb25zdCBTdHJpbmcmIGdldEtleVN0b3JlRGVmYXVsdCgpOworIAorIAkJCXN0YXRpYyBib29sIF9pbml0OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWUyOTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9ydW4tcHRlc3QKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKworY2QgdGVzdHMKK2ZvciBpIGluIGBsc2A7IGRvIC4vJGk7IGlmIFsgJD8gLWVxIDAgXTsgdGhlbiBlY2hvICJQQVNTOiAkaSI7IFwKKyAgICBlbHNlIGVjaG8gIkZBSUw6ICRpIjsgZmk7IGRvbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHRfNC4yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0XzQuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNjI2ZjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0XzQuMi4xLmJiCkBAIC0wLDAgKzEsNDggQEAKKyMgQmVlY3J5cHQgT0UgYnVpbGQgZmlsZQorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQorCitTVU1NQVJZID0gIkEgZ2VuZXJhbC1wdXJwb3NlIGNyeXB0b2dyYXBoeSBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9iZWVjcnlwdCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vYmVlY3J5cHQvYmVlY3J5cHQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtaWN1LWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1zZWN1cml0eS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZm9yLWdjYy00LjcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2JlZWNyeXB0LWVuYWJsZS1wdGVzdC1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1vcHRpb24tZGV2LWRzcC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODQ0MWMwMTQxNzA4MjNmMmRmZjk3ZTMzZGY1NWFmMWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjg2ZjFmNTYwODBkMWE2YjFkMDI0MDAzYTVmYTIxNThmNGZmODJjYWUwYzY4MjlkM2M0NzZhNGI1ODk4YzU1ZCIKKworTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTg5NDM3MGFmZDVkZmU3ZDAyYjhkMTQzMTllNzI5YTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWRjZjNjODI1NjU5ZTgyNTM5NjQ1ZGE0MWE3OTA4NTg5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvYmVlY3J5cHQvYmVlY3J5cHQuaDtlbmRsaW5lPTIwO21kNT00N2E5M2VlZjUzOWFhYzIzN2VlZjg2Mjk3YTRkNzFjMSIKKworUFIgPSAicjMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIG11bHRpbGliX2hlYWRlciBwdGVzdAorYWNwYXRocz0iIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlvZV9tdWx0aWxpYl9oZWFkZXIgYmVlY3J5cHQvZ251LmgKK30KKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1weXRob24gLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLXN0YXRpYyAtLWRpc2FibGUtb3Blbm1wIC0td2l0aC1qYXZhPW5vIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tjcGx1c3BsdXNdID0gIi0td2l0aC1jcGx1c3BsdXMsLS13aXRob3V0LWNwbHVzcGx1cyxpY3UiCisKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0gJHtsaWJkaXJ9Lyouc28uKiAke2xpYmRpcn0vJHtCUE59Lyouc28uKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qLnNvICR7bGliZGlyfS8ke0JQTn0vKi5sYSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qLmEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJbWtkaXIgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMKKwljcCAtciAke0J9L3Rlc3RzLy5saWJzL3Rlc3QqICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2JqYW0tbmF0aXZlXzEuNTguMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYmphbS1uYXRpdmVfMS41OC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNjQ2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2JqYW0tbmF0aXZlXzEuNTguMC5iYgpAQCAtMCwwICsxLDE4IEBACitpbmNsdWRlIGJvb3N0LSR7UFZ9LmluYworCitTVU1NQVJZID0gIlBvcnRhYmxlIEJvb3N0LkphbSBidWlsZCB0b29sIGZvciBib29zdCIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK2luaGVyaXQgbmF0aXZlCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9iamFtLW5hdGl2ZS1idWlsZC1iamFtLmRlYnVnLnBhdGNoIgorCitkb19jb21waWxlKCkgeworICAgIC4vYm9vdHN0cmFwLnNoIC0td2l0aC10b29sc2V0PWdjYworfQorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KKyAgICAjIGluc3RhbGwgdW5zdHJpcHBlZCB2ZXJzaW9uIGZvciBiamFtCisgICAgaW5zdGFsbCAtYyAtbSA3NTUgYmphbS5kZWJ1ZyAke0R9JHtiaW5kaXJ9L2JqYW0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QtMS41OC4wLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QtMS41OC4wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDdkMDkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC0xLjU4LjAuaW5jCkBAIC0wLDAgKzEsMjIgQEAKKyMgVGhlIEJvb3N0IHdlYiBzaXRlIHByb3ZpZGVzIGZyZWUgcGVlci1yZXZpZXdlZCBwb3J0YWJsZQorIyBDKysgc291cmNlIGxpYnJhcmllcy4gVGhlIGVtcGhhc2lzIGlzIG9uIGxpYnJhcmllcyB3aGljaAorIyB3b3JrIHdlbGwgd2l0aCB0aGUgQysrIFN0YW5kYXJkIExpYnJhcnkuIFRoZSBsaWJyYXJpZXMgYXJlCisjIGludGVuZGVkIHRvIGJlIHdpZGVseSB1c2VmdWwsIGFuZCBhcmUgaW4gcmVndWxhciB1c2UgYnkKKyMgdGhvdXNhbmRzIG9mIHByb2dyYW1tZXJzIGFjcm9zcyBhIGJyb2FkIHNwZWN0cnVtIG9mIGFwcGxpY2F0aW9ucy4KK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYm9vc3Qub3JnLyIKK0xJQ0VOU0UgPSAiQlNMLTEuMCAmIE1JVCAmIFB5dGhvbi0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFXzFfMC50eHQ7bWQ1PWU0MjI0Y2NhZWNiMTRkOTQyYzcxZDMxYmVmMjBkNzhjIgorCitCT09TVF9WRVIgPSAiJHtAIl8iLmpvaW4oZC5nZXRWYXIoIlBWIiwxKS5zcGxpdCgiLiIpKX0iCitCT09TVF9NQUogPSAiJHtAIl8iLmpvaW4oZC5nZXRWYXIoIlBWIiwxKS5zcGxpdCgiLiIpWzA6Ml0pfSIKK0JPT1NUX1AgPSAiYm9vc3RfJHtCT09TVF9WRVJ9IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9ib29zdC8ke0JPT1NUX1B9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1taXBzMS1maXgtYWRkZWQtZ2NjLmphbS13YXMtcGFzc2luZy10aGUtb3B0aW9ucy1tMzItLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItRG9uLXQtcGFzcy1tMzItbTY0LXdoZXJlLWl0LXMtbm90LXN1cHBvcnRlZC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiODgzOTY1MGU2MWU5YzFjMGE4OWYzNzFkZDQ3NTU0NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZGZjMjA0ZmMzM2VjNzljOTliOWE3NDk0NGMzZTU0YmQ3OGJlNGY3ZjE1ZTI2MGMwZTI3MDBhMzZkYzdkM2U1IgorCitTID0gIiR7V09SS0RJUn0vJHtCT09TVF9QfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI4OGU4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QuaW5jCkBAIC0wLDAgKzEsMTkyIEBACitTVU1NQVJZID0gIkZyZWUgcGVlci1yZXZpZXdlZCBwb3J0YWJsZSBDKysgc291cmNlIGxpYnJhcmllcyIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAiYmphbS1uYXRpdmUgemxpYiBiemlwMiIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK0JPT1NUX0xJQlMgPSAiXAorCWF0b21pYyBcCisJY2hyb25vIFwKKwlkYXRlX3RpbWUgXAorCWZpbGVzeXN0ZW0gXAorCWdyYXBoIFwKKwlpb3N0cmVhbXMgXAorCWxvZyBcCisJcHJvZ3JhbV9vcHRpb25zIFwKKwlyYW5kb20gXAorCXJlZ2V4IFwKKwlzZXJpYWxpemF0aW9uIFwKKwlzaWduYWxzIFwKKwlzeXN0ZW0gXAorCXRlc3QgXAorCXRocmVhZCBcCisJIgorCisjIG9wdGlvbmFsIGJvb3N0LXB5dGhvbiBsaWJyYXJ5CitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIiwscHl0aG9uIHB5dGhvbjMiCitCT09TVF9MSUJTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdweXRob24nLCAncHl0aG9uIHB5dGhvbjMnLCAnJywgZCl9IgoraW5oZXJpdCBweXRob24tZGlyCitQWVRIT05fUk9PVCA9ICIke1NUQUdJTkdfRElSX0hPU1R9LyR7cHJlZml4fSIKKworIyBNYWtlIGEgcGFja2FnZSBmb3IgZWFjaCBsaWJyYXJ5LCBwbHVzIC1kZXYKK1BBQ0tBR0VTID0gIiR7UE59LWRiZyAke0JPT1NUX1BBQ0tBR0VTfSIKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgcGFja2FnZXMgPSBbXQorICAgIGV4dHJhcyA9IFtdCisgICAgZm9yIGxpYiBpbiBkLmdldFZhcignQk9PU1RfTElCUycsIFRydWUpLnNwbGl0KCApOgorICAgICAgICAjIEJKQU0gZG9lcyBub3Qga25vdyAnLS13aXRoLXB5dGhvbjMnIChvbmx5IC0td2l0aC1weXRob24pCisgICAgICAgIGlmIGxpYiAhPSAicHl0aG9uMyI6CisgICAgICAgICAgICBleHRyYXMuYXBwZW5kKCItLXdpdGgtJXMiICUgbGliKQorICAgICAgICBwa2cgPSAiYm9vc3QtJXMiICUgbGliLnJlcGxhY2UoIl8iLCAiLSIpCisgICAgICAgIHBhY2thZ2VzLmFwcGVuZChwa2cpCisgICAgICAgIGlmIGxpYiA9PSAicHl0aG9uIjoKKyAgICAgICAgICAgICMgc3BlY2lhbDogcHl0aG9uKi5zbyBtYXRjaGVzIHB5dGhvbjMuc28gISEKKyAgICAgICAgICAgIGlmIG5vdCBkLmdldFZhcigiRklMRVNfJXMiICUgcGtnLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzIiAlIHBrZywgIiR7bGliZGlyfS9saWJib29zdF8lcy5zby4qIiAlIGxpYikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBkLmdldFZhcigiRklMRVNfJXMiICUgcGtnLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzIiAlIHBrZywgIiR7bGliZGlyfS9saWJib29zdF8lcyouc28uKiIgJSBsaWIpCisgICAgZC5zZXRWYXIoIkJPT1NUX1BBQ0tBR0VTIiwgIiAiLmpvaW4ocGFja2FnZXMpKQorICAgIGQuc2V0VmFyKCJCSkFNX0VYVFJBIiwgIiAiLmpvaW4oZXh0cmFzKSkKK30KKworIyBPdmVycmlkZSB0aGUgY29udGVudHMgb2Ygc3BlY2lmaWMgcGFja2FnZXMKK0ZJTEVTX2Jvb3N0LXNlcmlhbGl6YXRpb24gPSAiJHtsaWJkaXJ9L2xpYmJvb3N0X3NlcmlhbGl6YXRpb24qLnNvLiogXAorCSR7bGliZGlyfS9saWJib29zdF93c2VyaWFsaXphdGlvbiouc28uKiIKK0ZJTEVTX2Jvb3N0LXRlc3QgPSAiJHtsaWJkaXJ9L2xpYmJvb3N0X3ByZ19leGVjX21vbml0b3IqLnNvLiogXAorCSR7bGliZGlyfS9saWJib29zdF91bml0X3Rlc3RfZnJhbWV3b3JrKi5zby4qIgorCisjIC1kZXYgbGFzdCB0byBwaWNrIHVwIHRoZSByZW1haW5pbmcgc3R1ZmYKK1BBQ0tBR0VTICs9ICIke1BOfS1kZXYgJHtQTn0tc3RhdGljZGV2IgorRklMRVNfJHtQTn0tZGV2ID0gIiR7aW5jbHVkZWRpcn0gJHtsaWJkaXJ9L2xpYmJvb3N0Xyouc28iCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYmJvb3N0XyouYSIKKworIyAiYm9vc3QiIGlzIGEgbWV0YXBhY2thZ2Ugd2hpY2ggcHVsbHMgaW4gYWxsIGJvb3N0IGxpYnJhYnJpZXMKK1BBQ0tBR0VTICs9ICIke1BOfSIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIke0JPT1NUX1BBQ0tBR0VTfSIKK1JSRUNPTU1FTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCisjIHRvIGF2b2lkIEdOVV9IQVNIIFFBIGVycm9ycyBhZGRlZCBMREZMQUdTIHRvIEFSQ0g7IGEgbGl0dGxlIGJpdCBkaXJ0eSBidXQgYXQgbGVhc3QgaXQgd29ya3MKK1RBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorCisjIE9oIHlpcHBlZSwgYSBuZXcgYnVpbGQgc3lzdGVtLCBpdCdzIHNvb28gY29vb29sIEkgY291bGQgZWF0IG15IG93bgorIyBmb290LiAgaW5saW5pbmc9b24gbGV0cyB0aGUgY29tcGlsZXIgY2hvb3NlLCBJIHRoaW5rLiAgQXQgbGVhc3QgdGhpcworIyBzdHVmZiBpcyBkb2N1bWVudGVkLi4uCisjIE5PVEU6IGlmIHlvdSBsZWF2ZSA8ZGVidWctc3ltYm9scz5vbiB0aGVuIGluIGEgZGVidWcgYnVpbGQgdGhlIGJ1aWxkIHN5cworIyBvYmpjb3B5IHdpbGwgYmUgaW52b2tlZCwgYW5kIHRoYXQgd29uJ3Qgd29yay4gIEJ1aWxkaW5nIGRlYnVnIGFwcGFyZW50bHkKKyMgcmVxdWlyZXMgaGFja2luZyBnY2MtdG9vbHMuamFtCisjCisjIFNvbWV0aW1lcyBJIHdha2UgdXAgc2NyZWFtaW5nLiAgRmFtb3VzIGZpZ3VyZXMgYXJlIGdhdGhlcmVkIGluIHRoZSBuaWdodG1hcmUsCisjIFN0ZXZlIEJvdXJuZSwgTGFycnkgV2FsbCwgdGhlIHdob2xlIG9mIHRoZSBBTlNJIEMgY29tbWl0dGVlLiAgVGhleSdyZSBqdXN0CisjIHN0YW5kaW5nIHRoZXJlLCB3YWl0aW5nLCBidXQgdGhlIHRydWVseSB0ZXJyaWZ5aW5nIHRoaW5nIGlzIHdoYXQgdGhleSBjYXJyeQorIyBpbiB0aGVpciBoYW5kcy4gIEF0IGZpcnN0IHNpZ2h0IGVhY2ggc2VlbXMgdG8gYmVhciB0aGUgc2FtZSB0aGluZywgYnV0IGl0IGlzCisjIG5vdCBzbyBmb3IgdGhlIGZvcm1zIGluIHRoZWlyIGdyYXNwIGFyZSBldmVyIHNvIHNsaWdodGx5IGRpZmZlcmVudCBvbmUgZnJvbQorIyB0aGUgb3RoZXIuICBFYWNoIGlzIHR3aXN0ZWQgaW4gc29tZSBncm90ZXNxdWUgd2F5IGZyb20gdGhlIG90aGVyIHRvIG1ha2UgZWFjaAorIyBhbiB1bnNwZWFrYWJsZSBwZXJ2ZXJzaW9uIGltcG9zc2libGUgdG8gcGVyY2VpdmUgd2l0aG91dCB0aGUgb25zZXQgb2YgbWFkbmVzcy4KKyMgVHJ1ZSBpbnNhbml0eSBhd2FpdHMgYW55b25lIHdobyBwZXJjZWl2ZXMgYWxsIG9mIHRoZXNlIGhvcnJvcnMgdG9nZXRoZXIuCisjCisjIFF1b3RhdGlvbiBtYXJrcywgdGhlcmUgbWlnaHQgYmUgYW4gZWFzaWVyIHdheSB0byBkbyB0aGlzLCBidXQgSSBjYW4ndCBmaW5kCisjIGl0LiAgVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgdXNlci5ocHAgY29uZmlndXJhdGlvbiBmaWxlIG11c3QgcmVjZWl2ZSBhCisjIHByZS1wcm9jZXNzb3IgbWFjcm8gZGVmaW5lZCBhcyB0aGUgYXBwcm9wcmlhdGUgc3RyaW5nIC0gY29tcGxldGUgd2l0aCAiJ3MKKyMgYXJvdW5kIGl0LiAgKDw+IGlzIGEgcG9zc2liaWxpdHkgaGVyZSBidXQgdGhlIGRhbmdlciB0byB0aGF0IGlzIHRoYXQgdGhlCisjIGZhaWx1cmUgY2FzZSBpbnRlcnByZXRzIHRoZSA8IGFuZCA+IGFzIHNoZWxsIHJlZGlyZWN0aW9ucywgY3JlYXRpbmcKKyMgcmFuZG9tIGZpbGVzIGluIHRoZSBzb3VyY2UgdHJlZS4pCisjCisjYmphbTogJy1EQk9PU1RfUExBVEZPUk1fQ09ORklHPVwiY29uZmlnXCInCisjZG9fY29tcGlsZTogJy1zR0NDPS4uLiAnIictREJPT1NUX1BMQVRGT1JNX0NPTkZJRz1cImNvbmZpZ1wiJyIKK1NRRCA9ICciJworRVFEID0gJ1wiJworI2Jvb3N0LmJiOiAgICIuLi4gICctc0dDQz0uLi4gJyR7U1FEfSctREJPT1NUX1BMQVRGT1JNX0NPTkZJRz0ke0VRRH1jb25maWcke0VRRH0nJHtTUUR9IC4uLiIKK0JKQU1fQ09ORiA9ICIke1NRRH0nLURCT09TVF9QTEFURk9STV9DT05GSUc9JHtFUUR9Ym9vc3QvY29uZmlnL3BsYXRmb3JtLyR7VEFSR0VUX09TfS5ocHAke0VRRH0nJHtTUUR9IgorCitCSkFNX1RPT0xTICAgPSAiLS1pZ25vcmUtc2l0ZS1jb25maWcgXAorCQknLXNUT09MUz1nY2MnIFwKKwkJJy1zR0NDPSR7Q0N9ICcke0JKQU1fQ09ORn0gXAorCQknLXNHWFg9JHtDWFh9ICcke0JKQU1fQ09ORn0gXAorCQknLXNHQ0NfSU5DTFVERV9ESVJFQ1RPUlk9JHtTVEFHSU5HX0lOQ0RJUn0nIFwKKwkJJy1zR0NDX1NURExJQl9ESVJFQ1RPUlk9JHtTVEFHSU5HX0xJQkRJUn0nIFwKKwkJJy1zQlVJTEQ9cmVsZWFzZSA8b3B0aW1pemF0aW9uPnNwYWNlIDx0aHJlYWRpbmc+bXVsdGkgPGlubGluaW5nPm9uIDxkZWJ1Zy1zeW1ib2xzPm9mZicgXAorCQknLXNQWVRIT05fUk9PVD0ke1BZVEhPTl9ST09UfScgXAorCQknLS1sYXlvdXQ9c3lzdGVtJyBcCisJCSIKKworIyB1c2UgUEFSQUxMRUxfTUFLRSB0byBzcGVlZCB1cCB0aGUgYnVpbGQsIGJ1dCBsaW1pdCBpdCBieSAtaiA2NCwgZ3JlYXRlciBwYXJhbGVsaXNtIGNhdXNlcyBiamFtIHRvIHNlZ2ZhdWx0IG9yIHRvIGlnbm9yZSAtagorIyBodHRwczovL3N2bi5ib29zdC5vcmcvdHJhYy9ib29zdC90aWNrZXQvNzYzNAorZGVmIGdldF9ib29zdF9wYXJhbGxlbF9tYWtlKGJiLCBkKToKKyAgICBwbSA9IGQuZ2V0VmFyKCdQQVJBTExFTF9NQUtFJywgVHJ1ZSkKKyAgICBpZiBwbToKKyAgICAgICAgIyBsb29rIGZvciAnLWonIGFuZCB0aHJvdyBvdGhlciBvcHRpb25zIChlLmcuICctbCcpIGF3YXkKKyAgICAgICAgIyBiZWNhdXNlIHRoZXkgbWlnaHQgaGF2ZSBkaWZmZXJlbnQgbWVhbmluZyBpbiBiamFtCisgICAgICAgIHBtID0gcG0uc3BsaXQoKQorICAgICAgICB3aGlsZSBwbToKKyAgICAgICAgICAgIHYgPSBOb25lCisgICAgICAgICAgICBvcHQgPSBwbS5wb3AoMCkKKyAgICAgICAgICAgIGlmIG9wdCA9PSAnLWonOgorICAgICAgICAgICAgICAgIHYgPSBwbS5wb3AoMCkKKyAgICAgICAgICAgIGVsaWYgb3B0LnN0YXJ0c3dpdGgoJy1qJyk6CisgICAgICAgICAgICAgICAgdiA9IG9wdFsyOl0uc3RyaXAoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2ID0gTm9uZQorCisgICAgICAgICAgICBpZiB2OgorICAgICAgICAgICAgICAgIHYgPSBtaW4oNjQsIGludCh2KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJy1qJyArIHN0cih2KQorCisgICAgcmV0dXJuICIiCisKK0JPT1NUX1BBUkFMTEVMX01BS0UgPSAiJHtAZ2V0X2Jvb3N0X3BhcmFsbGVsX21ha2UoYmIsIGQpfSIKK0JKQU1fT1BUUyAgICA9ICcke0JPT1NUX1BBUkFMTEVMX01BS0V9IFwKKwkJJHtCSkFNX1RPT0xTfSBcCisJCS1zQk9PU1RfQlVJTERfVVNFUl9DT05GSUc9JHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbSBcCisJCS0tYnVpbGRkaXI9JHtTfS8ke1RBUkdFVF9TWVN9IFwKKwkJLS1kaXNhYmxlLWljdSBcCisJCSR7QkpBTV9FWFRSQX0nCisKKyMgTmF0aXZlIGNvbXBpbGF0aW9uIG9mIGJ6aXAyIGlzbid0IHdvcmtpbmcKK0JKQU1fT1BUU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gJyAtc05PX0JaSVAyPTEnCisKK2RvX2Jvb3N0Y29uZmlnKCkgeworCWNwIC1mIGJvb3N0L2NvbmZpZy9wbGF0Zm9ybS9saW51eC5ocHAgYm9vc3QvY29uZmlnL3BsYXRmb3JtL2xpbnV4LWdudWVhYmkuaHBwCisKKwkjIEQyMTk0OkZpeGluZyB0aGUgZmFpbHVyZSBvZiAiZXJyb3I6IGR1cGxpY2F0ZSBpbml0aWFsaXphdGlvbiBvZiBnY2Mgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMiIGR1cmluZyBjb21waWxhdGlvbi4KKwlzZWQgLWkgIi9edXNpbmcgZ2NjIDogNC4zLjEvZCIgJHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbQorCXNlZCAtaSAiL151c2luZyBweXRob24gOiAke1BZVEhPTl9CQVNFVkVSU0lPTn0iL2QgJHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbQorCWVjaG8gJ3VzaW5nIGdjYyA6IDQuMy4xIDogJHtDWFh9IDogPGNmbGFncz4iJHtDRkxBR1N9IiA8Y3h4ZmxhZ3M+IiR7Q1hYRkxBR1N9IiA8bGlua2ZsYWdzPiIke0xERkxBR1N9IiA7JyA+PiAke1N9L3Rvb2xzL2J1aWxkL2V4YW1wbGUvdXNlci1jb25maWcuamFtCisJZWNobyAidXNpbmcgcHl0aG9uIDogJHtQWVRIT05fQkFTRVZFUlNJT059IDogOiAke1NUQUdJTkdfSU5DRElSfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0gOyIgPj4gJHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbQorCWVjaG8gInVzaW5nIHB5dGhvbiA6IDMuNCA6IDogJHtTVEFHSU5HX0lOQ0RJUn0vcHl0aG9uMy40bSA7IiA+PiAke1N9L3Rvb2xzL2J1aWxkL2V4YW1wbGUvdXNlci1jb25maWcuamFtCisKKwlDQz0iJHtCVUlMRF9DQ30iIENGTEFHUz0iJHtCVUlMRF9DRkxBR1N9IiAuL2Jvb3RzdHJhcC5zaCAtLXdpdGgtYmphbT1iamFtIC0td2l0aC10b29sc2V0PWdjYyAtLXdpdGgtcHl0aG9uLXJvb3Q9JHtQWVRIT05fUk9PVH0KKwlzZWQgLWkgJy9edXNpbmcgcHl0aG9uL2QnIHByb2plY3QtY29uZmlnLmphbQorfQorCitkb19ib29zdGNvbmZpZ1tkaXJzXSA9ICIke1N9IgorYWRkdGFzayBkb19ib29zdGNvbmZpZyBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fY29uZmlndXJlCisKK2RvX2NvbXBpbGUoKSB7CisJc2V0IC1leAorCWJqYW0gJHtCSkFNX09QVFN9IC0tcHJlZml4PSR7cHJlZml4fSBcCisJCS0tZXhlYy1wcmVmaXg9JHtleGVjX3ByZWZpeH0gXAorCQktLWxpYmRpcj0ke2xpYmRpcn0gXAorCQktLWluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfQorfQorCitkb19pbnN0YWxsKCkgeworCXNldCAtZXgKKwliamFtICR7QkpBTV9PUFRTfSBcCisJCS0tbGliZGlyPSR7RH0ke2xpYmRpcn0gXAorCQktLWluY2x1ZGVkaXI9JHtEfSR7aW5jbHVkZWRpcn0gXAorCQlpbnN0YWxsCisJZm9yIGxpYiBpbiAke0JPT1NUX0xJQlN9OyBkbworCQlpZiBbIC1lICR7RH0ke2xpYmRpcn0vbGliYm9vc3RfJHtsaWJ9LmEgXTsgdGhlbgorCQkJbG4gLXMgbGliYm9vc3RfJHtsaWJ9LmEgJHtEfSR7bGliZGlyfS9saWJib29zdF8ke2xpYn0tbXQuYQorCQlmaQorCQlpZiBbIC1lICR7RH0ke2xpYmRpcn0vbGliYm9vc3RfJHtsaWJ9LnNvIF07IHRoZW4KKwkJCWxuIC1zIGxpYmJvb3N0XyR7bGlifS5zbyAke0R9JHtsaWJkaXJ9L2xpYmJvb3N0XyR7bGlifS1tdC5zbworCQlmaQorCWRvbmUKKworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0L2FybS1pbnRyaW5zaWNzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC9hcm0taW50cmluc2ljcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTg1YzY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC9hcm0taW50cmluc2ljcy5wYXRjaApAQCAtMCwwICsxLDU1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKzgvMTcvMjAxMCAtIHJlYmFzZWQgdG8gMS40NCBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvYXRvbWljX2NvdW50X3N5bmMuaHBwIGIvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9hdG9taWNfY291bnRfc3luYy5ocHAKK2luZGV4IGI2MzU5YjUuLjc4YjFjYzIgMTAwNjQ0CistLS0gYS9ib29zdC9zbWFydF9wdHIvZGV0YWlsL2F0b21pY19jb3VudF9zeW5jLmhwcAorKysrIGIvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9hdG9taWNfY291bnRfc3luYy5ocHAKK0BAIC0zMywxNyArMzMsNDYgQEAgcHVibGljOgorIAorICAgICBsb25nIG9wZXJhdG9yKysoKQorICAgICB7CisrI2lmZGVmIF9fQVJNX0FSQ0hfN0FfXworKyAgICAgICBpbnQgdjEsIHRtcDsKKysgICAgICAgYXNtIHZvbGF0aWxlICgiMTogICAgICAgICAgICAgICAgIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgImxkcmV4ICAgJTAsICUxICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJhZGQgICAgICUwICwlMCwgIzEgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAic3RyZXggICAlMiwgJTAsICUxIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgImNtcCAgICAgJTIsICMwICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJibmUgICAgIDFiICAgICAgICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICA6ICI9JnIiICh2MSksICIrUSIodmFsdWVfKSwgIj0mciIodG1wKQorKyAgICAgICAgICAgICAgICAgICAgKTsKKysjZWxzZQorICAgICAgICAgcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoKCAmdmFsdWVfLCAxICk7CisrI2VuZGlmCisgICAgIH0KKyAKKyAgICAgbG9uZyBvcGVyYXRvci0tKCkKKyAgICAgeworKyNpZmRlZiBfX0FSTV9BUkNIXzdBX18KKysgICAgICAgaW50IHYxLCB0bXA7CisrICAgICAgIGFzbSB2b2xhdGlsZSAoIjE6ICAgICAgICAgICAgICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJsZHJleCAgICUwLCAlMSAgICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAic3ViICAgICAlMCAsJTAsICMxIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgInN0cmV4ICAgJTIsICUwLCAlMSBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJjbXAgICAgICUyLCAjMCAgICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAiYm5lICAgICAxYiAgICAgICAgIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgOiAiPSZyIiAodjEpLCAiK1EiKHZhbHVlXyksICI9JnIiKHRtcCkKKysgICAgICAgICAgICAgICAgICAgICk7CisrICAgICAgIHJldHVybiB2YWx1ZV87CisrI2Vsc2UKKyAgICAgICAgIHJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaCggJnZhbHVlXywgLTEgKTsKKysjZW5kaWYKKyAgICAgfQorIAorICAgICBvcGVyYXRvciBsb25nKCkgY29uc3QKKyAgICAgeworKyNpZiBfX0FSTV9BUkNIXzdBX18KKysgICAgICAgIHJldHVybiB2YWx1ZV87CisrI2Vsc2UKKyAgICAgICAgIHJldHVybiBfX3N5bmNfZmV0Y2hfYW5kX2FkZCggJnZhbHVlXywgMCApOworKyNlbmRpZgorICAgICB9CisgCisgcHJpdmF0ZToKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS41OC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdF8xLjU4LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA5ZDVmNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS41OC4wLmJiCkBAIC0wLDAgKzEsNiBAQAoraW5jbHVkZSBib29zdC0ke1BWfS5pbmMKK2luY2x1ZGUgYm9vc3QuaW5jCisKK1NSQ19VUkkgKz0gIlwKKyAgICBmaWxlOi8vYXJtLWludHJpbnNpY3MucGF0Y2ggXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy8wMDAxLW1pcHMxLWZpeC1hZGRlZC1nY2MuamFtLXdhcy1wYXNzaW5nLXRoZS1vcHRpb25zLW0zMi0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2ZpbGVzLzAwMDEtbWlwczEtZml4LWFkZGVkLWdjYy5qYW0td2FzLXBhc3NpbmctdGhlLW9wdGlvbnMtbTMyLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjliNGMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy8wMDAxLW1pcHMxLWZpeC1hZGRlZC1nY2MuamFtLXdhcy1wYXNzaW5nLXRoZS1vcHRpb25zLW0zMi0ucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA4MTdhZWQwZDc1NWJmOGMwYmE0ZWY2YTc3ZDQxNTM4ZTUwYjU3MWZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogY2xheW1vcmUgPGNhcmxvc21mLnB0QGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjQgQXByIDIwMTUgMDI6Mjg6NDcgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIG1pcHMxIGZpeCBhZGRlZCBnY2MuamFtIHdhcyBwYXNzaW5nIHRoZSBvcHRpb25zIC1tMzIgYW5kCisgLW02NCB0byBtaXBzIGNyb3NzLWNvbXBpbGVycywgd2hlbiB0aG9zZSBkbyBub3QgdXNlCisgc3VjaCBvcHRpb25zIFRoaXMgbW9kaWZpY2F0aW9uIHNvbHZlcyBpdCBieSBhZGRpbmcgbWlwcworIGFzIGFuIGV4Y2VwdGlvbgorCitTaWduZWQtb2ZmLWJ5OiBDYXJsb3MgTS4gRmVycmVpcmEgY2FybG9zbWYucHRAZ21haWwuY29tCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCistLS0KKyB0b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtIGIvdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0KK2luZGV4IGRiMDQ1MzQuLmVmZjk1YWUgMTAwNjQ0CistLS0gYS90b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbQorKysrIGIvdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0KK0BAIC00NTEsNyArNDUxLDcgQEAgcnVsZSBzZXR1cC1hZGRyZXNzLW1vZGVsICggdGFyZ2V0cyAqIDogc291cmNlcyAqIDogcHJvcGVydGllcyAqICkKKyAgICAgICAgIGVsc2UKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBsb2NhbCBhcmNoID0gWyBmZWF0dXJlLmdldC12YWx1ZXMgYXJjaGl0ZWN0dXJlIDogJChwcm9wZXJ0aWVzKSBdIDsKKy0gICAgICAgICAgICBpZiAkKGFyY2gpICE9IGFybQorKyAgICAgICAgICAgIGlmICQoYXJjaCkgIT0gYXJtICYmICQoYXJjaCkgIT0gbWlwczEKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIGlmICQobW9kZWwpID0gMzIKKyAgICAgICAgICAgICAgICAgeworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvMDAwMi1Eb24tdC1wYXNzLW0zMi1tNjQtd2hlcmUtaXQtcy1ub3Qtc3VwcG9ydGVkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy8wMDAyLURvbi10LXBhc3MtbTMyLW02NC13aGVyZS1pdC1zLW5vdC1zdXBwb3J0ZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNmN2U1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvMDAwMi1Eb24tdC1wYXNzLW0zMi1tNjQtd2hlcmUtaXQtcy1ub3Qtc3VwcG9ydGVkLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gZjgyNTYzNGE1NmIxMTlkZmE5ZDcxMjExOWE2NjI3OWNjNzYzNTk3OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9KPUMzPUI2cmc9MjBLcmF1c2U/PSA8am9lcmcua3JhdXNlQGVtYmVkZGVkLnJvY2tzPgorRGF0ZTogU2F0LCAyIE1heSAyMDE1IDE0OjI0OjAyICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBEb24ndCBwYXNzIC1tMzIvLW02NCB3aGVyZSBpdCdzIG5vdCBzdXBwb3J0ZWQuCisKK09ubHkgUG93ZXJQQywgU1BBUkMsIGFuZCB4ODYgZG8gc3VwcG9ydCB0aGUgLW0zMiBhbmQgLW02NCBjb21waWxlciBvcHRpb25zIFsxXS4KKworUmF0aGVyIHRoZW4gZXhjbHVkaW5nIGFsbCBhcmNoaXRlY3R1cmVzIG5vdCBzdXBwb3J0aW5nIHRoZXNlIG9wdGlvbnMgYXMgaXQgaXMKK2RvbmUgaW4gY29tbWl0IGMwNjM0MzQxZDllZTJjMDJkM2E1NWM5MWRhZmI5ODhhZmMwNjZjNDkgWzJdLCBpbmNsdWRlIGFsbAorYXJjaGl0ZWN0dXJlcyB0aGF0IGRvIHN1cHBvcnQgdGhlbS4KKworVGhpcyB3aWxsIGZpeCBidWlsZGluZyBCb29zdCBmb3IgdGhlIFN1cGVySCBhcmNoaXRlY3R1cmUgd2l0aCBCdWlsZHJvb3QgWzNdLgorCitbMV0gaHR0cHM6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9PcHRpb24tU3VtbWFyeS5odG1sCitbMl0gaHR0cHM6Ly9naXRodWIuY29tL2Jvb3N0b3JnL2J1aWxkL2NvbW1pdC9jMDYzNDM0MWQ5ZWUyYzAyZDNhNTVjOTFkYWZiOTg4YWZjMDY2YzQ5CitbM10gaHR0cDovL2F1dG9idWlsZC5idWlsZHJvb3QubmV0L3Jlc3VsdHMvY2NkL2NjZDVjODM5NjMwMzJiYTQ5YjE2MjdiMWRmZjM5ZTM0YTk0ODY5NDMvYnVpbGQtZW5kLmxvZworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworLS0tCisgdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbSBiL3Rvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtCitpbmRleCBlZmY5NWFlLi4yZjZhZjkzIDEwMDY0NAorLS0tIGEvdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0KKysrKyBiL3Rvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtCitAQCAtNDUxLDcgKzQ1MSw3IEBAIHJ1bGUgc2V0dXAtYWRkcmVzcy1tb2RlbCAoIHRhcmdldHMgKiA6IHNvdXJjZXMgKiA6IHByb3BlcnRpZXMgKiApCisgICAgICAgICBlbHNlCisgICAgICAgICB7CisgICAgICAgICAgICAgbG9jYWwgYXJjaCA9IFsgZmVhdHVyZS5nZXQtdmFsdWVzIGFyY2hpdGVjdHVyZSA6ICQocHJvcGVydGllcykgXSA7CistICAgICAgICAgICAgaWYgJChhcmNoKSAhPSBhcm0gJiYgJChhcmNoKSAhPSBtaXBzMQorKyAgICAgICAgICAgIGlmICQoYXJjaCkgPSBwb3dlciB8fCAkKGFyY2gpID0gc3BhcmMgfHwgJChhcmNoKSA9IHg4NgorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgaWYgJChtb2RlbCkgPSAzMgorICAgICAgICAgICAgICAgICB7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy9iamFtLW5hdGl2ZS1idWlsZC1iamFtLmRlYnVnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy9iamFtLW5hdGl2ZS1idWlsZC1iamFtLmRlYnVnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmOGI3ZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2ZpbGVzL2JqYW0tbmF0aXZlLWJ1aWxkLWJqYW0uZGVidWcucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorRnJvbSA2MTlhZGEzMTRhYjI2YzBjOWNiZmU1NzAyY2Q5YzBjYWE4ZjY0MTVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDMgQXVnIDIwMTUgMTc6MTI6MzMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gYmphbS1uYXRpdmU6IGJ1aWxkIGJqYW0uZGVidWcKKworYmphbSBpcyBzdHJpcHBlZCBieSBkZWZhdWx0LCB0aGlzIGNhdXNlcyBRQSB3YXJuaW5nIHdoaWxlIHN0cmlwcGluZyBpdAorZnJvbSBkb19wb3B1bGF0ZV9zeXNyb290KCk6CisKKyAgV0FSTklORzogRmlsZSAnLi4uL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2Jpbi9iamFtJyBcCisgICAgZnJvbSBiamFtLW5hdGl2ZSB3YXMgYWxyZWFkeSBzdHJpcHBlZCwgXAorICAgIHRoaXMgd2lsbCBwcmV2ZW50IGZ1dHVyZSBkZWJ1Z2dpbmchCisKK1RoZSBKQU0gc2NyaXB0cyBhbGxvdyB0byBidWlsZCB1bnN0cmlwcGVkIHZlcnNpb24gd2l0aCAnLS1kZWJ1ZycuIEp1c3QKK2J1aWxkIGFuZCBpbnN0YWxsIHRoZSBiamFtLmRlYnVnIHRvIHN0b3AgYmphbSBmcm9tIGJlaW5nIHN0cmlwcGVkIGluCitjb21waWxlIHN0ZXAuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KKyBib290c3RyYXAuc2ggICAgICAgICAgICAgICAgICAgIHwgMSArCisgdG9vbHMvYnVpbGQvc3JjL2VuZ2luZS9idWlsZC5zaCB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYm9vdHN0cmFwLnNoIGIvYm9vdHN0cmFwLnNoCitpbmRleCA5OGNmODhiLi41NDY5MGFhIDEwMDc1NQorLS0tIGEvYm9vdHN0cmFwLnNoCisrKysgYi9ib290c3RyYXAuc2gKK0BAIC0yMjgsNiArMjI4LDcgQEAgaWYgdGVzdCAieCRCSkFNIiA9IHg7IHRoZW4KKyAgIGVjaG8gInRvb2xzL2J1aWxkL3NyYy9lbmdpbmUvJGFyY2gvYjIiCisgICBjcCAiJEJKQU0iIC4KKyAgIGNwICIkbXlfZGlyL3Rvb2xzL2J1aWxkL3NyYy9lbmdpbmUvJGFyY2gvYmphbSIgLgorKyAgY3AgIiRteV9kaXIvdG9vbHMvYnVpbGQvc3JjL2VuZ2luZS8ke2FyY2h9LmRlYnVnL2JqYW0iIGJqYW0uZGVidWcKKyAKKyBmaQorIAorZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL3NyYy9lbmdpbmUvYnVpbGQuc2ggYi90b29scy9idWlsZC9zcmMvZW5naW5lL2J1aWxkLnNoCitpbmRleCA2ZGJjNzA2Li5jNjlmZGM3IDEwMDc1NQorLS0tIGEvdG9vbHMvYnVpbGQvc3JjL2VuZ2luZS9idWlsZC5zaAorKysrIGIvdG9vbHMvYnVpbGQvc3JjL2VuZ2luZS9idWlsZC5zaAorQEAgLTMxMiw1ICszMTIsNSBAQCBpZiB0ZXN0IC14ICIuL2Jvb3RzdHJhcC9qYW0wIiA7IHRoZW4KKyAgICAgaWYgdGVzdCAiJHtCSkFNX1VQREFURX0iICE9ICJ1cGRhdGUiIDsgdGhlbgorICAgICAgICAgZWNob19ydW4gLi9ib290c3RyYXAvamFtMCAtZiBidWlsZC5qYW0gLS10b29sc2V0PSRCT09TVF9KQU1fVE9PTFNFVCAiLS10b29sc2V0LXJvb3Q9JEJPT1NUX0pBTV9UT09MU0VUX1JPT1QiICIkQCIgY2xlYW4KKyAgICAgZmkKKy0gICAgZWNob19ydW4gLi9ib290c3RyYXAvamFtMCAtZiBidWlsZC5qYW0gLS10b29sc2V0PSRCT09TVF9KQU1fVE9PTFNFVCAiLS10b29sc2V0LXJvb3Q9JEJPT1NUX0pBTV9UT09MU0VUX1JPT1QiICIkQCIKKysgICAgZWNob19ydW4gLi9ib290c3RyYXAvamFtMCAtZiBidWlsZC5qYW0gLS10b29sc2V0PSRCT09TVF9KQU1fVE9PTFNFVCAiLS10b29sc2V0LXJvb3Q9JEJPT1NUX0pBTV9UT09MU0VUX1JPT1QiICIkQCIgLS1kZWJ1ZworIGZpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtZG9uLXQtdXNlLURlYmlhbmlzbXMtaW4tcnVuLXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLWRvbi10LXVzZS1EZWJpYW5pc21zLWluLXJ1bi1wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNGIyODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLWRvbi10LXVzZS1EZWJpYW5pc21zLWluLXJ1bi1wLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK2NhLWNlcnRpZmljYXRlcyBpcyBhIHBhY2thZ2UgZnJvbSBEZWJpYW4sIGJ1dCBzb21lIGhvc3QgZGlzdHJvcyBzdWNoIGFzIEZlZG9yYQoraGF2ZSBhIGxlYW5lciBydW4tcGFydHMgcHJvdmlkZWQgYnkgY3JvbiB3aGljaCBkb2Vzbid0IHN1cHBvcnQgLS12ZXJib3NlIG9yIHRoZQorIC0tIHNlcGFyYXRvciBiZXR3ZWVuIGFyZ3VtZW50cyBhbmQgcGF0aHMuCisKK1RoaXMgc29sdmVzIGVycm9ycyBzdWNoIGFzCisKK3wgUnVubmluZyBob29rcyBpbiBbLi4uXS9yb290ZnMvZXRjL2NhLWNlcnRpZmljYXRlcy91cGRhdGUuZC4uLgorfCBbLi4uXS91c3Ivc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzOiBsaW5lIDE5NDogTm90OiBjb21tYW5kIG5vdCBmb3VuZAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CistLS0KKyBzYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMgfCA0ICstLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDMgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCisrKysgZ2l0L3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworQEAgLTE5MSw5ICsxOTEsNyBAQCBpZiBbIC1kICIkSE9PS1NESVIiIF0KKyB0aGVuCisgCisgICBlY2hvICJSdW5uaW5nIGhvb2tzIGluICRIT09LU0RJUi4uLiIKKy0gIFZFUkJPU0VfQVJHPQorLSAgWyAiJHZlcmJvc2UiID0gMCBdIHx8IFZFUkJPU0VfQVJHPSItLXZlcmJvc2UiCistICBldmFsIHJ1bi1wYXJ0cyAiJFZFUkJPU0VfQVJHIiAtLXRlc3QgLS0gIiRIT09LU0RJUiIgfCB3aGlsZSByZWFkIGhvb2sKKysgIGV2YWwgcnVuLXBhcnRzIC0tdGVzdCAtLSAiJEhPT0tTRElSIiB8IHdoaWxlIHJlYWQgaG9vaworICAgZG8KKyAgICAgKCBjYXQgIiRBRERFRCIKKyAgICAgICBjYXQgIiRSRU1PVkVEIiApIHwgIiRob29rIiB8fCBlY2hvICJFOiAkaG9vayBleGl0ZWQgd2l0aCBjb2RlICQ/LiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtcmVtb3ZlLWMtcmVoYXNoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1yZW1vdmUtYy1yZWhhc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwMjcyMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtcmVtb3ZlLWMtcmVoYXNoLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGcm9tIDExMWU5MDVmZTkzMWRhMWEzODAwYWNjZmM2NzVjYzAxYzhlZTA4MGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBVbGYgU2FtdWVsc3NvbiA8dWxmQGVtYWdpaS5jb20+CitEYXRlOiBUdWUsIDI4IEZlYiAyMDEyIDA2OjQyOjU4ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXM6IHJlbW92ZSBjIHJlaGFzaAorCitVcGRhdGVkIGVhcmxpZXIgcGF0Y2ggdG8gYXBwbHkgY2xlYW4gb24gMjAxMi0wMi0xMgorU2lnbmVkLW9mZi1ieTogVWxmIFNhbXVlbHNzb24gPHVsZkBlbWFnaWkuY29tPgorLS0tCisgc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzIHwgICAyMCArKysrKysrKysrLS0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMgYi9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKK2luZGV4IDUzNzU5NTAuLmM1NjdlM2QgMTAwNzU1CistLS0gYS9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKKysrKyBiL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworQEAgLTEzMiwxNiArMTMyLDE2IEBAIHJtIC1mICIkQ0VSVEJVTkRMRSIKKyBBRERFRF9DTlQ9JCh3YyAtbCA8ICIkQURERUQiKQorIFJFTU9WRURfQ05UPSQod2MgLWwgPCAiJFJFTU9WRUQiKQorCistaWYgWyAiJEFEREVEX0NOVCIgLWd0IDAgXSB8fCBbICIkUkVNT1ZFRF9DTlQiIC1ndCAwIF0KKy10aGVuCistICAjIG9ubHkgcnVuIGlmIHNldCBvZiBmaWxlcyBoYXMgY2hhbmdlZAorLSAgaWYgWyAiJHZlcmJvc2UiID0gMCBdCistICB0aGVuCistICAgIGNfcmVoYXNoIC4gPiAvZGV2L251bGwKKy0gIGVsc2UKKy0gICAgY19yZWhhc2ggLgorLSAgZmkKKy1maQorKyNpZiBbICIkQURERURfQ05UIiAtZ3QgMCBdIHx8IFsgIiRSRU1PVkVEX0NOVCIgLWd0IDAgXQorKyN0aGVuCisrIyAgIyBvbmx5IHJ1biBpZiBzZXQgb2YgZmlsZXMgaGFzIGNoYW5nZWQKKysjICBpZiBbICIkdmVyYm9zZSIgPSAwIF0KKysjICB0aGVuCisrIyAgICBjX3JlaGFzaCAuID4gL2Rldi9udWxsCisrIyAgZWxzZQorKyMgICAgY19yZWhhc2ggLgorKyMgIGZpCisrI2ZpCisKKyBjaG1vZCAwNjQ0ICIkVEVNUEJVTkRMRSIKKyBtdiAtZiAiJFRFTVBCVU5ETEUiICIkQ0VSVEJVTkRMRSIKKy0tCisxLjcuNC4xCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMi11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXVzZS1TWVNST09ULnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzLzAwMDItdXBkYXRlLWNhLWNlcnRpZmljYXRlcy11c2UtU1lTUk9PVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTJiNDAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzLzAwMDItdXBkYXRlLWNhLWNlcnRpZmljYXRlcy11c2UtU1lTUk9PVC5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRnJvbSA3MjRjYjE1M2NhMGY2MDdmYjM4YjNhOGRiM2ViYjI3NDI2MDFjZDgxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmVhcyBPYmVycml0dGVyIDxvYmlAb3BlbmRyZWFtYm94Lm9yZz4KK0RhdGU6IFR1ZSwgMTkgTWFyIDIwMTMgMTc6MTQ6MzMgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIHVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXM6IHVzZSAkU1lTUk9PVAorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE9iZXJyaXR0ZXIgPG9iaUBvcGVuZHJlYW1ib3gub3JnPgorLS0tCisgc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzIHwgICAxNCArKysrKysrLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCisrKysgZ2l0L3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworQEAgLTI0LDEyICsyNCwxMiBAQAorIHZlcmJvc2U9MAorIGZyZXNoPTAKKyBkZWZhdWx0PTAKKy1DRVJUU0NPTkY9L2V0Yy9jYS1jZXJ0aWZpY2F0ZXMuY29uZgorLUNFUlRTRElSPS91c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzCistTE9DQUxDRVJUU0RJUj0vdXNyL2xvY2FsL3NoYXJlL2NhLWNlcnRpZmljYXRlcworK0NFUlRTQ09ORj0kU1lTUk9PVC9ldGMvY2EtY2VydGlmaWNhdGVzLmNvbmYKKytDRVJUU0RJUj0kU1lTUk9PVC91c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzCisrTE9DQUxDRVJUU0RJUj0kU1lTUk9PVC91c3IvbG9jYWwvc2hhcmUvY2EtY2VydGlmaWNhdGVzCisgQ0VSVEJVTkRMRT1jYS1jZXJ0aWZpY2F0ZXMuY3J0CistRVRDQ0VSVFNESVI9L2V0Yy9zc2wvY2VydHMKKy1IT09LU0RJUj0vZXRjL2NhLWNlcnRpZmljYXRlcy91cGRhdGUuZAorK0VUQ0NFUlRTRElSPSRTWVNST09UL2V0Yy9zc2wvY2VydHMKKytIT09LU0RJUj0kU1lTUk9PVC9ldGMvY2EtY2VydGlmaWNhdGVzL3VwZGF0ZS5kCisgCisgd2hpbGUgWyAkIyAtZ3QgMCBdOworIGRvCitAQCAtOTIsOSArOTIsOSBAQCBhZGQoKSB7CisgICBQRU09IiRFVENDRVJUU0RJUi8kKGJhc2VuYW1lICIkQ0VSVCIgLmNydCB8IHNlZCAtZSAncy8gL18vZycgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvWygpXS89L2cnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzLywvXy9nJykucGVtIgorLSAgaWYgISB0ZXN0IC1lICIkUEVNIiB8fCBbICIkKHJlYWRsaW5rICIkUEVNIikiICE9ICIkQ0VSVCIgXQorKyAgaWYgISB0ZXN0IC1lICIkUEVNIiB8fCBbICIkKHJlYWRsaW5rICIkUEVNIikiICE9ICIke0NFUlQjIyRTWVNST09UfSIgXQorICAgdGhlbgorLSAgICBsbiAtc2YgIiRDRVJUIiAiJFBFTSIKKysgICAgbG4gLXNmICIke0NFUlQjIyRTWVNST09UfSIgIiRQRU0iCisgICAgIGVjaG8gIiskUEVNIiA+PiAiJEFEREVEIgorICAgZmkKKyAgICMgQWRkIHRyYWlsaW5nIG5ld2xpbmUgdG8gY2VydGlmaWNhdGUsIGlmIGl0IGlzIG1pc3NpbmcgKCM2MzU1NzApCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvZGVmYXVsdC1zeXNyb290LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzL2RlZmF1bHQtc3lzcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGIwNzkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzL2RlZmF1bHQtc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDUwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwordXBkYXRlLWNhLWNlcnRpZmljYXRlczogZmluZCBTWVNST09UIHJlbGF0aXZlIHRvIGl0cyBvd24gbG9jYXRpb24KKworVGhpcyBtYWtlcyB0aGUgc2NyaXB0IHJlbG9jYXRhYmxlLgorCitJbmRleDogZ2l0L3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworKysrIGdpdC9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKK0BAIC02Niw2ICs2NiwzOSBAQCBkbworICAgc2hpZnQKKyBkb25lCisgCisraWYgWyAteiAiJFNZU1JPT1QiIF07IHRoZW4KKysgIGxvY2FsX3doaWNoICgpIHsKKysgICAgaWYgWyAkIyAtbHQgMSBdOyB0aGVuCisrICAgICAgcmV0dXJuIDEKKysgICAgZmkKKysKKysgICAgKAorKyAgICAgIElGUz06CisrICAgICAgZm9yIGVudHJ5IGluICRQQVRIOyBkbworKyAgICAgICAgaWYgWyAteCAiJGVudHJ5LyQxIiBdOyB0aGVuCisrICAgICAgICAgIGVjaG8gIiRlbnRyeS8kMSIKKysgICAgICAgICAgZXhpdCAwCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgICBleGl0IDEKKysgICAgKQorKyAgfQorKworKyAgY2FzZSAiJDAiIGluCisrICAgICovKikKKysgICAgICBzYmluZGlyPSQoY2QgJHswJS8qfSAmJiBwd2QpCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzYmluZGlyPSQoY2QgJChkaXJuYW1lICQobG9jYWxfd2hpY2ggJDApKSAmJiBwd2QpCisrICAgICAgOzsKKysgIGVzYWMKKysgIHByZWZpeD0ke3NiaW5kaXIlLyp9CisrICBTWVNST09UPSR7cHJlZml4JS8qfQorKyAgaWYgWyAhIC1kICIkU1lTUk9PVC91c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzIiBdOyB0aGVuCisrICAgIFNZU1JPT1Q9CisrICBmaQorK2ZpCisrCisgaWYgWyAhIC1zICIkQ0VSVFNDT05GIiBdCisgdGhlbgorICAgZnJlc2g9MQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzL3NiaW5kaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvc2JpbmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTEzZmE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzL3NiaW5kaXIucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0xldCB1cyBhbHRlciB0aGUgaW5zdGFsbCBkZXN0aW5hdGlvbiBvZiB0aGUgc2NyaXB0IHZpYSBTQklORElSCisKKy0tLSBjYS1jZXJ0aWZpY2F0ZXMtMjAxMzAxMTkub3JpZy9zYmluL01ha2VmaWxlCisrKysgY2EtY2VydGlmaWNhdGVzLTIwMTMwMTE5L3NiaW4vTWFrZWZpbGUKK0BAIC0zLDkgKzMsMTIgQEAKKyAjCisgIworCisrU0JJTkRJUiA9IC91c3Ivc2JpbgorKworIGFsbDoKKworIGNsZWFuOgorCisgaW5zdGFsbDoKKy0JaW5zdGFsbCAtbTc1NSB1cGRhdGUtY2EtY2VydGlmaWNhdGVzICQoREVTVERJUikvdXNyL3NiaW4vCisrCWluc3RhbGwgLWQgJChERVNURElSKSQoU0JJTkRJUikKKysJaW5zdGFsbCAtbTc1NSB1cGRhdGUtY2EtY2VydGlmaWNhdGVzICQoREVTVERJUikkKFNCSU5ESVIpLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzXzIwMTUwNDI2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzXzIwMTUwNDI2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNmUzZGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXNfMjAxNTA0MjYuYmIKQEAgLTAsMCArMSw4MCBAQAorU1VNTUFSWSA9ICJDb21tb24gQ0EgY2VydGlmaWNhdGVzIgorREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIGluY2x1ZGVzIFBFTSBmaWxlcyBvZiBDQSBjZXJ0aWZpY2F0ZXMgdG8gYWxsb3cgXAorU1NMLWJhc2VkIGFwcGxpY2F0aW9ucyB0byBjaGVjayBmb3IgdGhlIGF1dGhlbnRpY2l0eSBvZiBTU0wgY29ubmVjdGlvbnMuIFwKK1RoaXMgZGVyaXZlZCBmcm9tIERlYmlhbidzIENBIENlcnRpZmljYXRlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMuZGViaWFuLm9yZy9zaWQvY2EtY2VydGlmaWNhdGVzIgorU0VDVElPTiA9ICJtaXNjIgorTElDRU5TRSA9ICJHUEwtMi4wKyAmIE1QTC0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kZWJpYW4vY29weXJpZ2h0O21kNT00OGQyYmFmOTc5ODY5OTllNzc2YjQzYzhkZDllMGM1YSIKKworIyBUaGlzIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIHJ1biB0aGUgcG9zdGluc3QgYXQgaW1hZ2UgY3JlYXRpb24gdGltZQorREVQRU5EUyA9ICJjYS1jZXJ0aWZpY2F0ZXMtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorCisjIHRhZzogZGViaWFuLzIwMTUwNDI2ICsgMgorU1JDUkVWID0gImQ0NzkwZDI4MzJhYWFjOTE1MmY0NTBlMDY2NjE1MTEwNjc1OTIyMjciCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbnNjbS5kZWJpYW4ub3JnL2NvbGxhYi1tYWludC9jYS1jZXJ0aWZpY2F0ZXMuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1yZW1vdmUtYy1yZWhhc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXVzZS1TWVNST09ULnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1kb24tdC11c2UtRGViaWFuaXNtcy1pbi1ydW4tcC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZhdWx0LXN5c3Jvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2JpbmRpci5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhbGxhcmNoCisKK0VYVFJBX09FTUFLRSA9ICJcCisgICAgJ0NFUlRTRElSPSR7ZGF0YWRpcn0vY2EtY2VydGlmaWNhdGVzJyBcCisgICAgJ1NCSU5ESVI9JHtzYmluZGlyfScgXAorIgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgb2VfcnVubWFrZSBjbGVhbgorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2NhLWNlcnRpZmljYXRlcyBcCisgICAgICAgICAgICAgICAke0R9JHtzeXNjb25mZGlyfS9zc2wvY2VydHMgXAorICAgICAgICAgICAgICAgJHtEfSR7c3lzY29uZmRpcn0vY2EtY2VydGlmaWNhdGVzL3VwZGF0ZS5kCisgICAgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOAorICAgIGluc3RhbGwgLW0gMDY0NCBzYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMuOCAke0R9JHttYW5kaXJ9L21hbjgvCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgeworICAgICAgICBlY2hvICIjIExpbmVzIHN0YXJ0aW5nIHdpdGggIyB3aWxsIGJlIGlnbm9yZWQiCisgICAgICAgIGVjaG8gIiMgTGluZXMgc3RhcnRpbmcgd2l0aCAhIHdpbGwgcmVtb3ZlIGNlcnRpZmljYXRlIG9uIG5leHQgdXBkYXRlIgorICAgICAgICBlY2hvICIjIgorICAgICAgICBmaW5kICR7RH0ke2RhdGFkaXJ9L2NhLWNlcnRpZmljYXRlcyAtdHlwZSBmIC1uYW1lICcqLmNydCcgfCBcCisgICAgICAgICAgICBzZWQgJ3MsXiR7RH0ke2RhdGFkaXJ9L2NhLWNlcnRpZmljYXRlcy8sLCcKKyAgICB9ID4ke0R9JHtzeXNjb25mZGlyfS9jYS1jZXJ0aWZpY2F0ZXMuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQgKCkgeworICAgIHNlZCAtaSAtZSAncywvZXRjLywke3N5c2NvbmZkaXJ9LywnIFwKKyAgICAgICAgICAgLWUgJ3MsL3Vzci9zaGFyZS8sJHtkYXRhZGlyfS8sJyBcCisgICAgICAgICAgIC1lICdzLC91c3IvbG9jYWwsJHtwcmVmaXh9L2xvY2FsLCcgXAorICAgICAgICAke0R9JHtzYmluZGlyfS91cGRhdGUtY2EtY2VydGlmaWNhdGVzIFwKKyAgICAgICAgJHtEfSR7bWFuZGlyfS9tYW44L3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMuOAorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworICAgIFNZU1JPT1Q9IiREIiB1cGRhdGUtY2EtY2VydGlmaWNhdGVzCit9CisKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9jYS1jZXJ0aWZpY2F0ZXMuY29uZiIKKworIyBQb3N0aW5zdHMgZG9uJ3Qgc2VlbSB0byBiZSBydW4gZm9yIG5hdGl2ZXNkayBwYWNrYWdlcyB3aGVuIHBvcHVsYXRpbmcgU0RLcy4KK0NPTkZGSUxFU18ke1BOfV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiAke3N5c2NvbmZkaXJ9L3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0ZXMuY3J0IgorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKKyAgICBTWVNST09UPSIke0R9JHtTREtQQVRITkFUSVZFfSIgdXBkYXRlLWNhLWNlcnRpZmljYXRlcworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworICAgIFNZU1JPT1Q9IiR7RH0ke2Jhc2VfcHJlZml4fSIgJHtEfSR7c2JpbmRpcn0vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworfQorCitCQkNMQVNTRVhURU5EICs9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXQvYWRkLXBvbGtpdC1jb25maWd1cmUtYXJndW1lbnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdC9hZGQtcG9sa2l0LWNvbmZpZ3VyZS1hcmd1bWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDg3OWQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXQvYWRkLXBvbGtpdC1jb25maWd1cmUtYXJndW1lbnQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBDb25zb2xlS2l0LTAuNC42Lm9yaWcvY29uZmlndXJlLmFjCisrKysgQ29uc29sZUtpdC0wLjQuNi9jb25maWd1cmUuYWMKK0BAIC01NiwxMCArNTYsMjQgQEAgUEtHX0NIRUNLX01PRFVMRVMoQ09OU09MRV9LSVQsCisgICBndGhyZWFkLTIuMCA+PSAkR0xJQl9SRVFVSVJFRF9WRVJTSU9OCisgKQorCistUEtHX0NIRUNLX01PRFVMRVMoUE9MS0lULAorLSAgcG9sa2l0LWdvYmplY3QtMSA+PSAkUE9MS0lUX1JFUVVJUkVEX1ZFUlNJT04sCistICBoYXZlX3BvbGtpdD15ZXMsCistICBoYXZlX3BvbGtpdD1ubykKKytBQ19BUkdfV0lUSChbcG9sa2l0XSwKKysgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXBvbGtpdF0sCisrICAgIFtzdXBwb3J0IFBvbGljeUtpdCBAPDpAZGVmYXVsdD1jaGVja0A6PkBdKV0sCisrICBbXSwKKysgIFt3aXRoX3BvbGtpdD1jaGVja10pCisrCisrQVNfSUYoW3Rlc3QgIngkd2l0aF9wb2xraXQiICE9IHhub10sCisrICBbUEtHX0NIRUNLX01PRFVMRVMoUE9MS0lULAorKyAgICAgcG9sa2l0LWdvYmplY3QtMSA+PSAkUE9MS0lUX1JFUVVJUkVEX1ZFUlNJT04sCisrICAgICBoYXZlX3BvbGtpdD15ZXMsCisrICAgICBbaWYgdGVzdCAieCR3aXRoX3BvbGtpdCIgIT0geGNoZWNrOyB0aGVuCisrICAgICAgIEFDX01TR19GQUlMVVJFKAorKyAgICAgICAgIFstLXdpdGgtcG9sa2l0IHdhcyBnaXZlbiwgYnV0IHRlc3QgZm9yIHBvbGtpdCBmYWlsZWRdKQorKyAgICAgIGVsc2UKKysgICAgICAgIGhhdmVfcG9sa2l0PW5vCisrICAgICAgZmkKKysgICAgIF0pXSkKKysKKyBpZiB0ZXN0ICJ4JGhhdmVfcG9sa2l0IiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgQUNfREVGSU5FKEhBVkVfUE9MS0lULCBbXSwgW0RlZmluZSBpZiB3ZSBoYXZlIHBvbGtpdF0pCisgZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0L3NlcGJ1aWxkZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXQvc2VwYnVpbGRmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJmOWI5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0L3NlcGJ1aWxkZml4LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0ZpeCBidWlsZHMgaW4gdGhlIGNhc2Ugb2Ygc2VwcmF0ZSBzb3VyY2UgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5LgorCitSUCAyMDEzLzQvMTcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBwYW0tY2stY29ubmVjdG9yL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY29uc29sZWtpdC9wYW0tY2stY29ubmVjdG9yLm9yaWcvTWFrZWZpbGUuYW0JMjAxMC0wOS0wMyAxMzo1NDozMS4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb25zb2xla2l0L3BhbS1jay1jb25uZWN0b3IvTWFrZWZpbGUuYW0JMjAxMy0wNC0xNyAwOTowNjo0OS4wOTM1MjQ5MTggKzAwMDAKK0BAIC00LDcgKzQsNyBAQAorIAorIElOQ0xVREVTID0gCQkJCQlcCisgCSQoTElCREJVU19DRkxBR1MpCQkJXAorLQktSSQodG9wX2J1aWxkZGlyKS9saWJjay1jb25uZWN0b3IJXAorKwktSSQodG9wX3NyY2RpcikvbGliY2stY29ubmVjdG9yCVwKKyAJJChOVUxMKQorIAorIHBhbWxpYmRpciA9ICQoUEFNX01PRFVMRV9ESVIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdF8wLjQuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0XzAuNC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YTg5MmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdF8wLjQuNi5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIkZyYW1ld29yayBmb3IgZGVmaW5pbmcgYW5kIHRyYWNraW5nIHVzZXJzLCBsb2dpbiBzZXNzaW9ucywgYW5kIHNlYXRzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9Db25zb2xlS2l0IgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2J1Z2xpc3QuY2dpP3F1ZXJ5X2Zvcm1hdD1zcGVjaWZpYyZwcm9kdWN0PUNvbnNvbGVLaXQiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uYztlbmRsaW5lPTIxO21kNT0wYTk5NGUwOTc2OTc4MDIyMDE2MzI1NWQ4ZjkwNzFjMyIKKworREVQRU5EUyA9ICJnbGliLTIuMCBnbGliLTIuMC1uYXRpdmUgZGJ1cyBkYnVzLWdsaWIgdmlydHVhbC9saWJ4MTEiCitSREVQRU5EU18ke1BOfSArPSAiYmFzZS1maWxlcyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL0NvbnNvbGVLaXQvZGlzdC9Db25zb2xlS2l0LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9zZXBidWlsZGZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtcG9sa2l0LWNvbmZpZ3VyZS1hcmd1bWVudC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2MTE3OTJiNGQ2MTYyNTNhNWJkZWM5MTc1ZjhiNzY3OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNDFkMTdlMDZmODAwNTk1ODlmYmVlZmU5NmFkMDdiY2M1NjRjNDllNjU1MTZkYTFjYWY5NzUxNDY0NzU1NjVjIgorCitTID0gIiR7V09SS0RJUn0vQ29uc29sZUtpdC0ke1BWfSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1twYW1dID0gIi0tZW5hYmxlLXBhbS1tb2R1bGUgLS13aXRoLXBhbS1tb2R1bGUtZGlyPSR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5LC0tZGlzYWJsZS1wYW0tbW9kdWxlLGxpYnBhbSIKK1BBQ0tBR0VDT05GSUdbcG9saWN5a2l0XSA9ICItLXdpdGgtcG9sa2l0LC0td2l0aG91dC1wb2xraXQscG9sa2l0IgorUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8sLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSIKKworRklMRVNfJHtQTn0gKz0gIiR7bG9jYWxzdGF0ZWRpcn0vbG9nL0NvbnNvbGVLaXQgJHtleGVjX3ByZWZpeH0vbGliL0NvbnNvbGVLaXQgXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS9Db25zb2xlS2l0ICAke3N5c3RlbWRfdW5pdGRpcn0gJHtiYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xICR7ZGF0YWRpcn0vUG9saWN5S2l0ICR7ZGF0YWRpcn0vcG9sa2l0KiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvLmRlYnVnIgorCitQQUNLQUdFUyA9KyAicGFtLXBsdWdpbi1jay1jb25uZWN0b3IiCitGSUxFU19wYW0tcGx1Z2luLWNrLWNvbm5lY3RvciArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5zbyIKK1JERVBFTkRTX3BhbS1wbHVnaW4tY2stY29ubmVjdG9yICs9ICIke1BOfSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kCisJCWVjaG8gImQgJHtsb2NhbHN0YXRlZGlyfS9sb2cvQ29uc29sZUtpdCAtIC0gLSAtIiBcCisJCQk+ICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvY29uc29sZWtpdC5jb25mCisJZmkKKworCSMgUmVtb3ZlIC92YXIvcnVuIGZyb20gcGFja2FnZSBhcyBjb25zb2xlLWtpdC1kYWVtb24gd2lsbCBwb3B1bGF0ZSBpdCBvbiBzdGFydHVwCisJcm0gLWZyICIke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4iCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLWRicGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8tZGJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNzU1OTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLWRicGF0aC5wYXRjaApAQCAtMCwwICsxLDYxIEBACitjcmVhdGVyZXBvOiBJbXBsZW1lbnQgLS1kYnBhdGggY29tbWFuZCBsaW5lIG9wdGlvbgorCistLWRicGF0aCBvcHRpb24gYWxsb3dzIHRvIHNwZWNpZnkgcGF0aCB0byB0aGUgZGlyZWN0b3J5Cit3aXRoIHJwbSBkYXRhYmFzZS4gQnkgZGVmYXVsdCBjcmVhdGVyZXBvIHVzZXMgb3IgY3JlYXRlcworcnBtIGRhdGFiYXNlIGluIC92YXIvbGliL3JwbS8KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEVkIEJhcnRvc2ggPGVkLmJhcnRvc2hAbGludXguaW50ZWwuY29tPgorCistLS0gY3JlYXRlcmVwby0wLjQuMTEub3JpZy9nZW5wa2dtZXRhZGF0YS5weSAyMDE1LTAzLTMwIDIyOjE4OjE5LjkwNDAwMDAwMCArMDMwMAorKysrIGNyZWF0ZXJlcG8tMC40LjExL2dlbnBrZ21ldGFkYXRhLnB5IDIwMTUtMDMtMzAgMjI6Mjg6NDkuMjA4MDAwMDAwICswMzAwCitAQCAtNjUsNiArNjUsNyBAQAorICAgICAgLXAsIC0tcHJldHR5ID0gb3V0cHV0IHhtbCBmaWxlcyBpbiBwcmV0dHkgZm9ybWF0LgorICAgICAgLS11cGRhdGUgPSB1cGRhdGUgZXhpc3RpbmcgbWV0YWRhdGEgKGlmIHByZXNlbnQpCisgICAgICAtZCwgLS1kYXRhYmFzZSA9IGdlbmVyYXRlIHRoZSBzcWxpdGUgZGF0YWJhc2VzLgorKyAgICAgLS1kYnBhdGggPGRpcj4gPSBzcGVjaWZ5IHBhdGggdG8gcnBtIGRiIGRpcmVjdG9yeS4KKyAgICAgIiIiKQorIAorICAgICBzeXMuZXhpdChyZXR2YWwpCitAQCAtNzIsMTAgKzczLDEzIEBACisgY2xhc3MgTWV0YURhdGFHZW5lcmF0b3I6CisgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbWRzKToKKyAgICAgICAgIHNlbGYuY21kcyA9IGNtZHMKKy0gICAgICAgIHNlbGYudHMgPSBycG0uVHJhbnNhY3Rpb25TZXQoKQorICAgICAgICAgc2VsZi5wa2djb3VudCA9IDAKKyAgICAgICAgIHNlbGYuZmlsZXMgPSBbXQorIAorKyAgICAgICAgaWYgc2VsZi5jbWRzWydkYnBhdGgnXToKKysgICAgICAgICAgICBycG0uYWRkTWFjcm8oIl9kYnBhdGgiLCBzZWxmLmNtZHNbJ2RicGF0aCddKQorKyAgICAgICAgc2VsZi50cyA9IHJwbS5UcmFuc2FjdGlvblNldCgpCisrCisgICAgIGRlZiBfb3NfcGF0aF93YWxrKHNlbGYsIHRvcCwgZnVuYywgYXJnKToKKyAgICAgICAgICIiIkRpcmVjdG9yeSB0cmVlIHdhbGsgd2l0aCBjYWxsYmFjayBmdW5jdGlvbi4KKyAgICAgICAgICBjb3B5IG9mIG9zLnBhdGgud2FsaywgZml4ZXMgdGhlIGxpbmsvc3RhdGluZyBwcm9ibGVtCitAQCAtNDM1LDYgKzQzOSw3IEBACisgICAgIGNtZHNbJ2Rpci1wYXR0ZXJuLW1hdGNoJ10gPSBbJy4qYmluXC8uKicsICdeXC9ldGNcLy4qJ10KKyAgICAgY21kc1snc2tpcC1zeW1saW5rcyddID0gRmFsc2UKKyAgICAgY21kc1sncGtnbGlzdCddID0gW10KKysgICAgY21kc1snZGJwYXRoJ10gPSBOb25lCisgCisgICAgIHRyeToKKyAgICAgICAgIGdvcHRzLCBhcmdzbGVmdCA9IGdldG9wdC5nZXRvcHQoYXJncywgJ3BocVZ2bmRnOnM6eDp1OmM6bzpDU2k6JywgWydoZWxwJywgJ2V4Y2x1ZGU9JywKK0BAIC00NDIsNyArNDQ3LDcgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFzZXVybD0nLCAnZ3JvdXBmaWxlPScsICdjaGVja3N1bT0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2ZXJzaW9uJywgJ3ByZXR0eScsICdzcGxpdCcsICdvdXRwdXRkaXI9JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9lcG9jaCcsICdjaGVja3RzJywgJ2RhdGFiYXNlJywgJ3VwZGF0ZScsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NraXAtc3ltbGlua3MnLCAncGtnbGlzdD0nXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2tpcC1zeW1saW5rcycsICdwa2dsaXN0PScsICdkYnBhdGg9J10pCisgICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIGU6CisgICAgICAgICBlcnJvcnByaW50KF8oJ09wdGlvbnMgRXJyb3I6ICVzLicpICUgZSkKKyAgICAgICAgIHVzYWdlKCkKK0BAIC01MTYsNiArNTIxLDggQEAKKyAgICAgICAgICAgICAgICAgY21kc1snc2tpcC1zeW1saW5rcyddID0gVHJ1ZQorICAgICAgICAgICAgIGVsaWYgYXJnIGluIFsnLWknLCAnLS1wa2dsaXN0J106CisgICAgICAgICAgICAgICAgIGNtZHNbJ3BrZ2xpc3QnXSA9IGEKKysgICAgICAgICAgICBlbGlmIGFyZyA9PSAnLS1kYnBhdGgnOgorKyAgICAgICAgICAgICAgICBjbWRzWydkYnBhdGgnXSA9IG9zLnBhdGgucmVhbHBhdGgoYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgIGVycm9ycHJpbnQoXygnT3B0aW9ucyBFcnJvcjogJXMnKSAlIGUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLXJwbTU0OS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8tcnBtNTQ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNzIwMGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLXJwbTU0OS5wYXRjaApAQCAtMCwwICsxLDIyIEBACitkdW1wTWV0YWRhdGEucHk6IEZpeCBmb3IgUlBNNSAtIDUuNC45IGludGVncmF0aW9uCisKK1JQTTUgbm8gbG9uZ2VyIGhhcyBhIHN3aXRjaCB0byBkaXNhYmxlIHNpZ25hdHVyZSB2YWxpZGF0aW9uLiAgKER1ZSB0byBzZWN1cml0eQordmFsaWRhdGlvbiBjb25jZXJucy4pCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCisgIGNyZWF0ZXJlcG8gZG9lcyBub3Qgc3VwcG9ydCBSUE01IHVwc3RyZWFtCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtdSBjcmVhdGVyZXBvLTAuNC4xMS5vcmlnL2R1bXBNZXRhZGF0YS5weSBjcmVhdGVyZXBvLTAuNC4xMS9kdW1wTWV0YWRhdGEucHkKKy0tLSBjcmVhdGVyZXBvLTAuNC4xMS5vcmlnL2R1bXBNZXRhZGF0YS5weQkyMDEyLTA2LTA1IDEwOjEyOjU1LjY4Nzk2NDIyMiAtMDUwMAorKysrIGNyZWF0ZXJlcG8tMC40LjExL2R1bXBNZXRhZGF0YS5weQkyMDEyLTA2LTA1IDEwOjQwOjA4LjE1NDA2MDYwMCAtMDUwMAorQEAgLTkyLDcgKzkyLDcgQEAKKyAgICAgICAgICAgICBmZG5vID0gcGFja2FnZSAjIGxldCdzIGFzc3VtZSB0aGlzIGlzIGFuIGZkbm8gYW5kIGdvIHdpdGggaXQgOikKKyAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICByYWlzZSBNREVycm9yLCAiRXJyb3Igb3BlbmluZyBmaWxlIgorLSAgICB0cy5zZXRWU0ZsYWdzKChycG0uX1JQTVZTRl9OT1NJR05BVFVSRVN8cnBtLlJQTVZTRl9OT01ENXxycG0uUlBNVlNGX05FRURQQVlMT0FEKSkKKysgICAgdHMuc2V0VlNGbGFncygocnBtLlJQTVZTRl9OT01ENXxycG0uUlBNVlNGX05FRURQQVlMT0FEKSkKKyAgICAgdHJ5OgorICAgICAgICAgaGRyID0gdHMuaGRyRnJvbUZkbm8oZmRubykKKyAgICAgZXhjZXB0IHJwbS5lcnJvcjoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2R1bXBNZXRhZGF0YS1kaXNhYmxlLXNpZ25hdHVyZS12YWxpZGF0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vZHVtcE1ldGFkYXRhLWRpc2FibGUtc2lnbmF0dXJlLXZhbGlkYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1NTMxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2R1bXBNZXRhZGF0YS1kaXNhYmxlLXNpZ25hdHVyZS12YWxpZGF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK2R1bXBNZXRhZGF0YTogZGlzYWJsZSBzaWduYXR1cmUgdmFsaWRhdGlvbgorCitNYWtlcyBpdCBwb3NzaWJsZSB0byB3b3JrIG9uIFJQTSByZXBvc2l0b3JpZXMgdGhhdCBjb250YWluIHNpZ25lZCBwYWNrYWdlcword2l0aG91dCB0aGUgbmVlZCBvZiBpbXBvcnRpbmcgdGhlIHB1YmxpYyBwYXJ0IG9mIHRoZSBzaWduaW5nIGtleSBpbnRvIHRoZSBSUE0KK2RhdGFiYXNlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFya3VzIExlaHRvbmVuIDxtYXJrdXMubGVodG9uZW5AbGludXguaW50ZWwuY29tPgorLS0tCisgZHVtcE1ldGFkYXRhLnB5IHwgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZHVtcE1ldGFkYXRhLnB5IGIvZHVtcE1ldGFkYXRhLnB5CitpbmRleCBlNDBlOGFjLi5jYTZhODJkIDEwMDY0NAorLS0tIGEvZHVtcE1ldGFkYXRhLnB5CisrKysgYi9kdW1wTWV0YWRhdGEucHkKK0BAIC05Miw3ICs5Miw5IEBAIGRlZiByZXR1cm5IZHIodHMsIHBhY2thZ2UpOgorICAgICAgICAgICAgIGZkbm8gPSBwYWNrYWdlICMgbGV0J3MgYXNzdW1lIHRoaXMgaXMgYW4gZmRubyBhbmQgZ28gd2l0aCBpdCA6KQorICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgIHJhaXNlIE1ERXJyb3IsICJFcnJvciBvcGVuaW5nIGZpbGUiCistICAgIHRzLnNldFZTRmxhZ3MoKHJwbS5SUE1WU0ZfTk9NRDV8cnBtLlJQTVZTRl9ORUVEUEFZTE9BRCkpCisrICAgIHRzLnNldFZTRmxhZ3MoKHJwbS5SUE1WU0ZfTk9NRDV8cnBtLlJQTVZTRl9ORUVEUEFZTE9BRHwKKysgICAgICAgICAgICAgICAgICAgcnBtLlJQTVZTRl9OT0RTQXxycG0uUlBNVlNGX05PUlNBfAorKyAgICAgICAgICAgICAgICAgICBycG0uUlBNVlNGX05PRFNBSEVBREVSfHJwbS5SUE1WU0ZfTk9SU0FIRUFERVIpKQorICAgICB0cnk6CisgICAgICAgICBoZHIgPSB0cy5oZHJGcm9tRmRubyhmZG5vKQorICAgICBleGNlcHQgcnBtLmVycm9yOgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9maXgtbmF0aXZlLWluc3RhbGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9maXgtbmF0aXZlLWluc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgyMDJhNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2ZpeC1uYXRpdmUtaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDE2MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitEYXRlOiBKYW4gMzEsIDIwMTEKKworVGhlcmUgYXJlIHR3byBmaXhlczoKKyAgMS4gLW5hdGl2ZSBuZWVkcyB0byBjdXN0b21pemUgcHJlZml4CisgIDIuIG5lZWRzIHRvIGNoYW5nZSBweXRob24gcmVmZXJlbmNlIGluIGJpbmFyaWVzCisKK1NpZ25lZC1vZmYtYnk6IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggYjJkMWEzMi4uM2MzNjM5ZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTMsMjIgKzMsMjIgQEAgVkVSU0lPTiA9IDAuNC4xMQorIFNIRUxMID0gL2Jpbi9zaAorIHRvcF9zcmNkaXIgPSAuCisgc3JjZGlyID0gLgorLXByZWZpeCA9IC91c3IKKy1leGVjX3ByZWZpeCA9ICR7cHJlZml4fQorLQorLWJpbmRpciA9ICR7ZXhlY19wcmVmaXh9L2JpbgorLXNiaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9zYmluCistbGliZXhlY2RpciA9ICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMKKy1kYXRhZGlyID0gJHtwcmVmaXh9L3NoYXJlCistc3lzY29uZmRpciA9ICR7cHJlZml4fS9ldGMKKy1zaGFyZWRzdGF0ZWRpciA9ICR7cHJlZml4fS9jb20KKy1sb2NhbHN0YXRlZGlyID0gJHtwcmVmaXh9L3ZhcgorLWxpYmRpciA9ICR7ZXhlY19wcmVmaXh9L2xpYgorLWluZm9kaXIgPSAke3ByZWZpeH0vaW5mbworK3ByZWZpeCA/PSAvdXNyCisrZXhlY19wcmVmaXggPz0gJHtwcmVmaXh9CisrCisrYmluZGlyID89ICR7ZXhlY19wcmVmaXh9L2JpbgorK3NiaW5kaXIgPz0gJHtleGVjX3ByZWZpeH0vc2JpbgorK2xpYmV4ZWNkaXIgPz0gJHtleGVjX3ByZWZpeH0vbGliZXhlYworK2RhdGFkaXIgPz0gJHtwcmVmaXh9L3NoYXJlCisrc3lzY29uZmRpciA/PSAke3ByZWZpeH0vZXRjCisrc2hhcmVkc3RhdGVkaXIgPz0gJHtwcmVmaXh9L2NvbQorK2xvY2Fsc3RhdGVkaXIgPz0gJHtwcmVmaXh9L3ZhcgorK2xpYmRpciA/PSAke2V4ZWNfcHJlZml4fS9saWIKKytpbmZvZGlyID89ICR7cHJlZml4fS9pbmZvCisgZG9jZGlyID0gCistaW5jbHVkZWRpciA9ICR7cHJlZml4fS9pbmNsdWRlCisraW5jbHVkZWRpciA/PSAke3ByZWZpeH0vaW5jbHVkZQorIG9sZGluY2x1ZGVkaXIgPSAvdXNyL2luY2x1ZGUKKy1tYW5kaXIgPSAke3ByZWZpeH0vc2hhcmUvbWFuCisrbWFuZGlyID89ICR7cHJlZml4fS9zaGFyZS9tYW4KKyAKKyBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS8kKFBBQ0tBR0UpCisgcGtnbGliZGlyID0gJChsaWJkaXIpLyQoUEFDS0FHRSkKK2RpZmYgLS1naXQgYS9iaW4vTWFrZWZpbGUgYi9iaW4vTWFrZWZpbGUKK2luZGV4IDUyYzFmNTAuLmUzMDYxMGUgMTAwNjQ0CistLS0gYS9iaW4vTWFrZWZpbGUKKysrKyBiL2Jpbi9NYWtlZmlsZQorQEAgLTEsMjIgKzEsMjIgQEAKKyBTSEVMTCA9IC9iaW4vc2gKKyB0b3Bfc3JjZGlyID0gLi4KKyBzcmNkaXIgPSAuLi9iaW4KKy1wcmVmaXggPSAvdXNyCistZXhlY19wcmVmaXggPSAke3ByZWZpeH0KKy0KKy1iaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9iaW4KKy1zYmluZGlyID0gJHtleGVjX3ByZWZpeH0vc2JpbgorLWxpYmV4ZWNkaXIgPSAke2V4ZWNfcHJlZml4fS9saWJleGVjCistZGF0YWRpciA9ICR7cHJlZml4fS9zaGFyZQorLXN5c2NvbmZkaXIgPSAke3ByZWZpeH0vZXRjCistc2hhcmVkc3RhdGVkaXIgPSAke3ByZWZpeH0vY29tCistbG9jYWxzdGF0ZWRpciA9ICR7cHJlZml4fS92YXIKKy1saWJkaXIgPSAke2V4ZWNfcHJlZml4fS9saWIKKy1pbmZvZGlyID0gJHtwcmVmaXh9L2luZm8KKytwcmVmaXggPz0gL3VzcgorK2V4ZWNfcHJlZml4ID89ICR7cHJlZml4fQorKworK2JpbmRpciA/PSAke2V4ZWNfcHJlZml4fS9iaW4KKytzYmluZGlyID89ICR7ZXhlY19wcmVmaXh9L3NiaW4KKytsaWJleGVjZGlyID89ICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMKKytkYXRhZGlyID89ICR7cHJlZml4fS9zaGFyZQorK3N5c2NvbmZkaXIgPz0gJHtwcmVmaXh9L2V0YworK3NoYXJlZHN0YXRlZGlyID89ICR7cHJlZml4fS9jb20KKytsb2NhbHN0YXRlZGlyID89ICR7cHJlZml4fS92YXIKKytsaWJkaXIgPz0gJHtleGVjX3ByZWZpeH0vbGliCisraW5mb2RpciA/PSAke3ByZWZpeH0vaW5mbworIGRvY2RpciA9IAorLWluY2x1ZGVkaXIgPSAke3ByZWZpeH0vaW5jbHVkZQorK2luY2x1ZGVkaXIgPz0gJHtwcmVmaXh9L2luY2x1ZGUKKyBvbGRpbmNsdWRlZGlyID0gL3Vzci9pbmNsdWRlCistbWFuZGlyID0gJHtwcmVmaXh9L21hbgorK21hbmRpciA/PSAke3ByZWZpeH0vbWFuCisgCisgcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvJChQQUNLQUdFKQorIHBrZ2xpYmRpciA9ICQobGliZGlyKS8kKFBBQ0tBR0UpCitAQCAtNDAsOCArNDAsMTEgQEAgYWxsOiAkKHNyY2RpcikvJChQQUNLQUdFKQorIAorIAorIGluc3RhbGw6IGFsbCBpbnN0YWxsZGlycworLQkkKElOU1RBTExfQklOKSAkKHNyY2RpcikvJChQQUNLQUdFKSAkKERFU1RESVIpJChiaW5kaXIpLyQoUEFDS0FHRSkKKy0JJChJTlNUQUxMX0JJTikgJChzcmNkaXIpL21vZGlmeXJlcG8gJChERVNURElSKSQoYmluZGlyKS9tb2RpZnlyZXBvCisrCXNlZCAtZSAic3xAREFUQURJUkB8JChkYXRhZGlyKXwiICQoc3JjZGlyKS8kKFBBQ0tBR0UpID4gJChzcmNkaXIpLyQoUEFDS0FHRSkudG1wCisrCXNlZCAtZSAic3xAREFUQURJUkB8JChkYXRhZGlyKXwiICQoc3JjZGlyKS9tb2RpZnlyZXBvID4gJChzcmNkaXIpL21vZGlmeXJlcG8udG1wCisrCSQoSU5TVEFMTF9CSU4pICQoc3JjZGlyKS8kKFBBQ0tBR0UpLnRtcCAkKERFU1RESVIpJChiaW5kaXIpLyQoUEFDS0FHRSkKKysJJChJTlNUQUxMX0JJTikgJChzcmNkaXIpL21vZGlmeXJlcG8udG1wICQoREVTVERJUikkKGJpbmRpcikvbW9kaWZ5cmVwbworKwlybSAtZiAkKHNyY2RpcikvJChQQUNLQUdFKS50bXAgJChzcmNkaXIpL21vZGlmeXJlcG8udG1wCisgCisgCisgdW5pbnN0YWxsOgorZGlmZiAtLWdpdCBhL2Jpbi9jcmVhdGVyZXBvIGIvYmluL2NyZWF0ZXJlcG8KK2luZGV4IGIwZGU1MTUuLmVhYWNiMzkgMTAwNzU1CistLS0gYS9iaW4vY3JlYXRlcmVwbworKysrIGIvYmluL2NyZWF0ZXJlcG8KK0BAIC0xLDIgKzEsMiBAQAorICMhL2Jpbi9zaAorLWV4ZWMgL3Vzci9zaGFyZS9jcmVhdGVyZXBvL2dlbnBrZ21ldGFkYXRhLnB5ICIkQCIKKytleGVjIEBEQVRBRElSQC9jcmVhdGVyZXBvL2dlbnBrZ21ldGFkYXRhLnB5ICIkQCIKK2RpZmYgLS1naXQgYS9iaW4vbW9kaWZ5cmVwbyBiL2Jpbi9tb2RpZnlyZXBvCitpbmRleCBjOTczMmQ4Li42ZjdjMWQ0IDEwMDc1NQorLS0tIGEvYmluL21vZGlmeXJlcG8KKysrKyBiL2Jpbi9tb2RpZnlyZXBvCitAQCAtMSwyICsxLDIgQEAKKyAjIS9iaW4vc2gKKy1leGVjIC91c3Ivc2hhcmUvY3JlYXRlcmVwby9tb2RpZnlyZXBvLnB5ICIkQCIKKytleGVjIEBEQVRBRElSQC9jcmVhdGVyZXBvL21vZGlmeXJlcG8ucHkgIiRAIgorZGlmZiAtLWdpdCBhL2RvY3MvTWFrZWZpbGUgYi9kb2NzL01ha2VmaWxlCitpbmRleCAwYTQxMTc5Li5lMTI4Yzg1IDEwMDY0NAorLS0tIGEvZG9jcy9NYWtlZmlsZQorKysrIGIvZG9jcy9NYWtlZmlsZQorQEAgLTEsMjIgKzEsMjIgQEAKKyBTSEVMTCA9IC9iaW4vc2gKKyB0b3Bfc3JjZGlyID0gLi4KKyBzcmNkaXIgPSAuLi9kb2NzCistcHJlZml4ID0gL3VzcgorLWV4ZWNfcHJlZml4ID0gJHtwcmVmaXh9CistCistYmluZGlyID0gJHtleGVjX3ByZWZpeH0vYmluCistc2JpbmRpciA9ICR7ZXhlY19wcmVmaXh9L3NiaW4KKy1saWJleGVjZGlyID0gJHtleGVjX3ByZWZpeH0vbGliZXhlYworLWRhdGFkaXIgPSAke3ByZWZpeH0vc2hhcmUKKy1zeXNjb25mZGlyID0gJHtwcmVmaXh9L2V0YworLXNoYXJlZHN0YXRlZGlyID0gJHtwcmVmaXh9L2NvbQorLWxvY2Fsc3RhdGVkaXIgPSAke3ByZWZpeH0vdmFyCistbGliZGlyID0gJHtleGVjX3ByZWZpeH0vbGliCistaW5mb2RpciA9ICR7cHJlZml4fS9pbmZvCisrcHJlZml4ID89IC91c3IKKytleGVjX3ByZWZpeCA/PSAke3ByZWZpeH0KKysKKytiaW5kaXIgPz0gJHtleGVjX3ByZWZpeH0vYmluCisrc2JpbmRpciA/PSAke2V4ZWNfcHJlZml4fS9zYmluCisrbGliZXhlY2RpciA/PSAke2V4ZWNfcHJlZml4fS9saWJleGVjCisrZGF0YWRpciA/PSAke3ByZWZpeH0vc2hhcmUKKytzeXNjb25mZGlyID89ICR7cHJlZml4fS9ldGMKKytzaGFyZWRzdGF0ZWRpciA/PSAke3ByZWZpeH0vY29tCisrbG9jYWxzdGF0ZWRpciA/PSAke3ByZWZpeH0vdmFyCisrbGliZGlyID89ICR7ZXhlY19wcmVmaXh9L2xpYgorK2luZm9kaXIgPz0gJHtwcmVmaXh9L2luZm8KKyBkb2NkaXIgPSAKKy1pbmNsdWRlZGlyID0gJHtwcmVmaXh9L2luY2x1ZGUKKytpbmNsdWRlZGlyID89ICR7cHJlZml4fS9pbmNsdWRlCisgb2xkaW5jbHVkZWRpciA9IC91c3IvaW5jbHVkZQorLW1hbmRpciA9ICR7ZGF0YWRpcn0vbWFuCisrbWFuZGlyID89ICR7ZGF0YWRpcn0vbWFuCisgCisgcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvJChQQUNLQUdFKQorIHBrZ2xpYmRpciA9ICQobGliZGlyKS8kKFBBQ0tBR0UpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9weXRob24tc2NyaXB0cy1zaG91bGQtdXNlLWludGVycHJldGVyLWZyb20tZW52LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vcHl0aG9uLXNjcmlwdHMtc2hvdWxkLXVzZS1pbnRlcnByZXRlci1mcm9tLWVudi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDIwNWExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vcHl0aG9uLXNjcmlwdHMtc2hvdWxkLXVzZS1pbnRlcnByZXRlci1mcm9tLWVudi5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitBdXRob3I6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KKworUHl0aG9uIGludGVycHJldGVyIHNob3VsZCBiZSB1c2UgZnJvbSBQQVRIIC0gbmF0aXZlIHB5dGhvbiAtIGFuZCBub3QgdGhlIG9uZSBmcm9tCitob3N0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBjcmVhdGVyZXBvLTAuNC4xMS9nZW5wa2dtZXRhZGF0YS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNyZWF0ZXJlcG8tMC40LjExLm9yaWcvZ2VucGtnbWV0YWRhdGEucHkJMjAxMi0wNC0xMCAxNzoxNDowNS4yNzg2NDkzODQgKzAzMDAKKysrKyBjcmVhdGVyZXBvLTAuNC4xMS9nZW5wa2dtZXRhZGF0YS5weQkyMDEyLTA0LTEwIDE3OjE0OjIyLjI5MDY0ODg4NiArMDMwMAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24gLXQKKysjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisgIyBwcmltYXJ5IGZ1bmN0aW9ucyBhbmQgZ2x1ZSBmb3IgZ2VuZXJhdGluZyB0aGUgcmVwb3NpdG9yeSBtZXRhZGF0YQorICMKKyAKK0luZGV4OiBjcmVhdGVyZXBvLTAuNC4xMS9tb2RpZnlyZXBvLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY3JlYXRlcmVwby0wLjQuMTEub3JpZy9tb2RpZnlyZXBvLnB5CTIwMTItMDQtMTAgMTc6MTQ6MDkuMTA2NjQ5MjcyICswMzAwCisrKysgY3JlYXRlcmVwby0wLjQuMTEvbW9kaWZ5cmVwby5weQkyMDEyLTA0LTEwIDE3OjE0OjI3LjgxODY0ODcyNSArMDMwMAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisrIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorICMgJElkJAorICMKKyAjIFRoaXMgdG9vbHMgaXMgdXNlZCB0byBpbnNlcnQgYXJiaXRyYXJ5IG1ldGFkYXRhIGludG8gYW4gUlBNIHJlcG9zaXRvcnkuCitJbmRleDogY3JlYXRlcmVwby0wLjQuMTEvZHVtcE1ldGFkYXRhLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY3JlYXRlcmVwby0wLjQuMTEub3JpZy9kdW1wTWV0YWRhdGEucHkJMjAxMi0wNC0xMCAxNzoxOToyMy44NzQ2NDAwNjggKzAzMDAKKysrKyBjcmVhdGVyZXBvLTAuNC4xMS9kdW1wTWV0YWRhdGEucHkJMjAxMi0wNC0xMCAxNzoxOTozNC41MDI2Mzk3NTYgKzAzMDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uIC10CisrIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorICMgYmFzZSBjbGFzc2VzIGFuZCBmdW5jdGlvbnMgZm9yIGR1bXBpbmcgb3V0IHBhY2thZ2UgTWV0YWRhdGEKKyAjCisgIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorSW5kZXg6IGNyZWF0ZXJlcG8tMC40LjExL3JlYWRNZXRhZGF0YS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNyZWF0ZXJlcG8tMC40LjExLm9yaWcvcmVhZE1ldGFkYXRhLnB5CTIwMTItMDQtMTAgMTc6MTk6MTkuNjI2NjQwMTkzICswMzAwCisrKysgY3JlYXRlcmVwby0wLjQuMTEvcmVhZE1ldGFkYXRhLnB5CTIwMTItMDQtMTAgMTc6MTk6NDAuMTk4NjM5NTkwICswMzAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbiAtdAorKyMhIC91c3IvYmluL2VudiBweXRob24KKyAKKyAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vcmVjb21tZW5kcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL3JlY29tbWVuZHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM1ZGUyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL3JlY29tbWVuZHMucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorY3JlYXRlcmVwbzogaW1wbGVtZW50IHJlY29tbWVuZHMgc3VwcG9ydAorCitSZWNvcmQgYWdhaW5zdCB0aGUgY29ycmVzcG9uZGluZyByZXF1aXJlcyBlbnRyeSBpbiB0aGUgb3V0cHV0IG1ldGFkYXRhCitpZiBhIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwIGlzIG1hcmtlZCB3aXRoIHRoZSBSUE1TRU5TRV9NSVNTSU5HT0sgZmxhZworKGluZGljYXRpbmcgaXQgaXMgYSByZWNvbW1lbmRhdGlvbiwgcmF0aGVyIHRoYW4gYSBoYXJkIGRlcGVuZGVuY3kpLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9kdW1wTWV0YWRhdGEucHkgYi9kdW1wTWV0YWRhdGEucHkKK2luZGV4IDcwYmIyZDguLmU0MGU4YWMgMTAwNjQ0CistLS0gYS9kdW1wTWV0YWRhdGEucHkKKysrKyBiL2R1bXBNZXRhZGF0YS5weQorQEAgLTMxOSw2ICszMTksMjMgQEAgY2xhc3MgUnBtTWV0YURhdGE6CisgICAgICAgICAgICAgICAgICAgICByZXFzLmFwcGVuZCgwKQorICAgICAgICAgcmV0dXJuIHJlcXMKKyAKKysgICAgZGVmIF9jaGVja01pc3NpbmdPayhzZWxmLCBmbGFncyk6CisrICAgICAgICByZXFzPVtdCisrICAgICAgICBpZiBmbGFncyBpcyBOb25lOgorKyAgICAgICAgICAgIHJldHVybiByZXFzCisrCisrICAgICAgICBpZiB0eXBlKGZsYWdzKSBpcyBub3QgdHlwZXMuTGlzdFR5cGU6CisrICAgICAgICAgICAgZmxhZ3MgPSBbZmxhZ3NdCisrICAgICAgICBmb3IgZmxhZyBpbiBmbGFnczoKKysgICAgICAgICAgICBuZXdmbGFnID0gZmxhZworKyAgICAgICAgICAgIGlmIGZsYWcgaXMgbm90IE5vbmU6CisrICAgICAgICAgICAgICAgIG5ld2ZsYWcgPSBmbGFnICYgcnBtLlJQTVNFTlNFX01JU1NJTkdPSworKyAgICAgICAgICAgICAgICBpZiBuZXdmbGFnOgorKyAgICAgICAgICAgICAgICAgICAgcmVxcy5hcHBlbmQoMSkKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIHJlcXMuYXBwZW5kKDApCisrICAgICAgICByZXR1cm4gcmVxcworKworIAorICAgICBkZWYgX2NvcnJlY3RWZXJzaW9uKHNlbGYsIHZlcnMpOgorICAgICAgICAgcmV0dXJudmVycyA9IFtdCitAQCAtNTM3LDkgKzU1NCwxMCBAQCBjbGFzcyBScG1NZXRhRGF0YToKKyAgICAgICAgIHRtcGZsYWdzID0gc2VsZi5oZHJbcnBtLlJQTVRBR19SRVFVSVJFRkxBR1NdCisgICAgICAgICBmbGFncyA9IHNlbGYuX2NvcnJlY3RGbGFncyh0bXBmbGFncykKKyAgICAgICAgIHByZXJlcSA9IHNlbGYuX2NoZWNrUHJlUmVxKHRtcGZsYWdzKQorKyAgICAgICAgbWlzc2luZ29rID0gc2VsZi5fY2hlY2tNaXNzaW5nT2sodG1wZmxhZ3MpCisgICAgICAgICB2ZXIgPSBzZWxmLl9jb3JyZWN0VmVyc2lvbihzZWxmLmhkcltycG0uUlBNVEFHX1JFUVVJUkVWRVJTSU9OXSkKKyAgICAgICAgIGlmIG5hbWVzIGlzIG5vdCBOb25lOgorLSAgICAgICAgICAgIGxzdCA9IHppcChuYW1lcywgZmxhZ3MsIHZlciwgcHJlcmVxKQorKyAgICAgICAgICAgIGxzdCA9IHppcChuYW1lcywgZmxhZ3MsIHZlciwgcHJlcmVxLCBtaXNzaW5nb2spCisgICAgICAgICByZXR1cm4gc2VsZi5fdW5pcShsc3QpCisgICAgICAgICAKKyAgICAgZGVmIG9ic29sZXRlc0xpc3Qoc2VsZik6CitAQCAtNjkyLDcgKzcxMCw3IEBAIGRlZiBnZW5lcmF0ZVhNTChkb2MsIG5vZGUsIGZvcm1hdG5zLCBycG1PYmosIHN1bXR5cGUpOgorICAgICBkZXBzTGlzdCA9IHJwbU9iai5kZXBzTGlzdCgpCisgICAgIGlmIGxlbihkZXBzTGlzdCkgPiAwOgorICAgICAgICAgcnBjb25vZGUgPSBmb3JtYXQubmV3Q2hpbGQoZm9ybWF0bnMsICdyZXF1aXJlcycsIE5vbmUpICAgIAorLSAgICAgICAgZm9yIChuYW1lLCBmbGFncywgKGUsdixyKSwgcHJlcmVxKSBpbiBkZXBzTGlzdDoKKysgICAgICAgIGZvciAobmFtZSwgZmxhZ3MsIChlLHYsciksIHByZXJlcSwgbWlzc2luZ29rKSBpbiBkZXBzTGlzdDoKKyAgICAgICAgICAgICBlbnRyeSA9IHJwY29ub2RlLm5ld0NoaWxkKGZvcm1hdG5zLCAnZW50cnknLCBOb25lKQorICAgICAgICAgICAgIGVudHJ5Lm5ld1Byb3AoJ25hbWUnLCBuYW1lKQorICAgICAgICAgICAgIGlmIGZsYWdzICE9IDA6CitAQCAtNzExLDYgKzcyOSw4IEBAIGRlZiBnZW5lcmF0ZVhNTChkb2MsIG5vZGUsIGZvcm1hdG5zLCBycG1PYmosIHN1bXR5cGUpOgorICAgICAgICAgICAgICAgICAgICAgZW50cnkubmV3UHJvcCgncmVsJywgc3RyKHIpKQorICAgICAgICAgICAgIGlmIHByZXJlcSA9PSAxOgorICAgICAgICAgICAgICAgICBlbnRyeS5uZXdQcm9wKCdwcmUnLCBzdHIocHJlcmVxKSkKKysgICAgICAgICAgICBpZiBtaXNzaW5nb2s6CisrICAgICAgICAgICAgICAgIGVudHJ5Lm5ld1Byb3AoJ21pc3NpbmdvaycsICcxJykKKyAgICAgICAgIAorICAgICBmb3IgZmlsZSBpbiBycG1PYmoudXNlZnVsRmlsZXMoKToKKyAgICAgICAgIGZpbGVzID0gZm9ybWF0Lm5ld0NoaWxkKE5vbmUsICdmaWxlJywgTm9uZSkKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9ycG0tY3JlYXRlc29sdmVkYi5weSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL3JwbS1jcmVhdGVzb2x2ZWRiLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE1YjYxYmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9ycG0tY3JlYXRlc29sdmVkYi5weQpAQCAtMCwwICsxLDY0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgVGhpcyBzY3JpcHQgZ2VuZXJhdGVzIGEgc29sdXRpb24gZGF0YWJhc2UgZm9yIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgcnBtIHBhY2thZ2VzCisjIGJ1dCB0cmllcyB0byBiZSBlZmZpY2llbnQgYWJvdXQgdGhpcywgb25seSBkb2luZyBzbyB3aGVuIHRoZSBwYWNrYWdlcyBoYXZlIGNoYW5nZWQKKyMgaW4gc29tZSB3YXkuCisjCisjIEl0IGlzIGFzc3VtZWQgc29tZXRoaW5nIGFscmVhZHkgd2VudCB0aHJvdWdoIGFuZCByZW1vdmVkIGFsbCB0aGUgc29sdmVkYi5kb25lIHN0YW1wIGZpbGVzCisjIGluIGFkdmFuY2UuCisjCisjIEZpcnN0IGFyZ3VtZW50IC0gdGhlIHJwbSBiaW5hcnkgdG8gdXNlCisjIFN1YnNlcXVlbnQgYXJndW1lbnRzIC0gcGF0aHMgdG8gcHJvY2VzcyBzb2x1dGlvbiBkYXRhYmFzZXMgZm9yCisjCisKK2ltcG9ydCBzeXMsIG9zCitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IHN0YXQKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2lmIGxlbihzeXMuYXJndikgPCAxOgorICAgIHByaW50KCJFcnJvciwgcnBtIGNvbW1hbmQgbm90IHNwZWNpZmllZCIpCisgICAgc3lzLmV4aXQoMSkKKworaWYgbGVuKHN5cy5hcmd2KSA8IDI6CisgICAgcHJpbnQoIkVycm9yLCBubyBwYXRocyBzcGVjaWZpZWQiKQorICAgIHN5cy5leGl0KDEpCisKK3BhdGhzID0gc3lzLmFyZ3ZbMjpdCisKK2ZvciBwYXRoIGluIHBhdGhzOgorICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGggKyAiL3NvbHZlZGIuZG9uZSIpOgorICAgICAgICBjb250aW51ZQorICAgIGRhdGEgPSAiIgorICAgIG1hbmlmZXN0ID0gW10KKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwYXRoKToKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKHJvb3QsIGZpbGUpCisgICAgICAgICAgICBpZiBmLnN0YXJ0c3dpdGgocGF0aCArICIvIiArICJzb2x2ZWRiIik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgc3RyKG9zLnN0YXQoZilbc3RhdC5TVF9NVElNRV0pCisgICAgICAgICAgICBtYW5pZmVzdC5hcHBlbmQoZikKKyAgICBjaGVja3N1bSA9IGhhc2hsaWIubWQ1KGRhdGEpLmhleGRpZ2VzdCgpCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoICsgIi9zb2x2ZWRiLmNoZWNrc3VtIikgYW5kIG9wZW4ocGF0aCArICIvc29sdmVkYi5jaGVja3N1bSIsICJyIikucmVhZCgpID09IGNoZWNrc3VtOgorICAgICAgICBvcGVuKHBhdGggKyAiL3NvbHZlZGIuZG9uZSIsICJ3IikKKyAgICAgICAgY29udGludWUKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGggKyAiL3NvbHZlZGIiKToKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCJybSAtcmYgJXMiICUgKHBhdGggKyAiL3NvbHZlZGIiKSwgc2hlbGw9VHJ1ZSkKKyAgICBvcy5ta2RpcihwYXRoICsgIi9zb2x2ZWRiIikKKyAgICBtID0gb3BlbihwYXRoICsgIi9zb2x2ZWRiL21hbmlmZXN0IiwgInciKQorICAgIG0ud3JpdGUoIiMgRHluYW1pY2FsbHkgZ2VuZXJhdGVkIHNvbHZlIG1hbmlmZXN0XG4iKQorICAgIGZvciBmIGluIG1hbmlmZXN0OgorICAgICAgICBtLndyaXRlKGYgKyAiXG4iKQorICAgIG0uY2xvc2UoKQorCisgICAgY21kID0gc3lzLmFyZ3ZbMV0gKyAnIC1pIC0tcmVwbGFjZXBrZ3MgLS1yZXBsYWNlZmlsZXMgLS1vbGRwYWNrYWdlIC1EICJfZGJwYXRoICcgKyBwYXRoICsgJy9zb2x2ZWRiIiAtLWp1c3RkYiBcCisJCQktLW5vYWlkIC0tbm9kZXBzIC0tbm9vcmRlciAtLW5vc2NyaXB0cyAtLW5vdHJpZ2dlcnMgLS1ub3BhcmVudGRpcnMgLS1ub2xpbmt0b3MgLS1zdGF0cyBcCisJCQktLWlnbm9yZXNpemUgLS1ub3NpZ25hdHVyZSAtLW5vZGlnZXN0IC1EICJfX2RiaV90eG4gY3JlYXRlIG5vZnN5bmMiIFwKKwkJCScgKyBwYXRoICsgJy9zb2x2ZWRiL21hbmlmZXN0JworICAgIHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpCisKKyAgICBvcGVuKHBhdGggKyAiL3NvbHZlZGIuY2hlY2tzdW0iLCAidyIpLndyaXRlKGNoZWNrc3VtKQorICAgIG9wZW4ocGF0aCArICIvc29sdmVkYi5kb25lIiwgInciKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwb18wLjQuMTEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwb18wLjQuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY5ZWNmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvXzAuNC4xMS5iYgpAQCAtMCwwICsxLDUwIEBACitTVU1NQVJZID0gIkNyZWF0ZXMgbWV0YWRhdGEgaW5kZXhlcyBmb3IgUlBNIHBhY2thZ2UgcmVwb3NpdG9yaWVzIgorSE9NRVBBR0UgPSAiaHR0cDovL2NyZWF0ZXJlcG8uYmFzZXVybC5vcmcvIgorCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICJWZXJzaW9ucyBhZnRlciAwLjkuKiB1c2UgWVVNLCBzbyB3ZSBob2xkIGF0IDAuNC4xMSIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xODgxMDY2OWYxM2I4NzM0ODQ1OWU2MTFkMzFhYjc2MCIKKworREVQRU5EU19jbGFzcy1uYXRpdmUgKz0gImxpYnhtbDItbmF0aXZlIHJwbS1uYXRpdmUiCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgPSAibGlieG1sMi1weXRob24iCisKK1BSID0gInI5IgorCitTUkNfVVJJID0gImh0dHA6Ly9jcmVhdGVyZXBvLmJhc2V1cmwub3JnL2Rvd25sb2FkLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtbmF0aXZlLWluc3RhbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHl0aG9uLXNjcmlwdHMtc2hvdWxkLXVzZS1pbnRlcnByZXRlci1mcm9tLWVudi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jcmVhdGVyZXBvLXJwbTU0OS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZWNvbW1lbmRzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NyZWF0ZXJlcG8tZGJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2R1bXBNZXRhZGF0YS1kaXNhYmxlLXNpZ25hdHVyZS12YWxpZGF0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JwbS1jcmVhdGVzb2x2ZWRiLnB5IFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2U5Y2NmNGFiY2ZmZTNmNDlhZjA3OGM4MzYxMWVkYTIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTczYWUxMWEwZGNkZThiZGUzNmQ5MDBiYzNmN2Y4ZjEwODNiYTc1MmM3MGE1YzYxYjcyZDFlMWU3NjA4ZjIxYiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgLWUgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3JwbS1jcmVhdGVzb2x2ZWRiLnB5ICR7RH0ke2JpbmRpcn0vCit9CisKKyMgV3JhcCB0aGUgcHl0aG9uIHNjcmlwdCBzaW5jZSB0aGUgbmF0aXZlIHB5dGhvbiBpcworIyAke2JpbmRpcn0vcHl0aG9uLW5hdGl2ZS9weXRob24sIGFuZCB0aGUgIiMhIC91c3IvYmluL2VudiBweXRob24iIGNhbid0CisjIGZpbmQgaXQgc2luY2UgaXQgaXMgbm90IGluIFBBVEguCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworCSMgTm90IGFsbCB0aGUgcHl0aG9uIHNjcmlwdHMgc2hvdWxkIGJlIHdyYXBwZWQgc2luY2Ugc29tZSBvZgorCSMgdGhlbSBhcmUgbW9kdWxlcyAoYmUgaW1wb3J0ZWQpLgorCWZvciBpIGluICR7RH0ke2RhdGFkaXJ9L2NyZWF0ZXJlcG8vZ2VucGtnbWV0YWRhdGEucHkgXAorCQkgJHtEfSR7ZGF0YWRpcn0vY3JlYXRlcmVwby9tb2RpZnlyZXBvLnB5IFwKKwkJICR7RH0ke2JpbmRpcn0vcnBtLWNyZWF0ZXNvbHZlZGIucHkgOyBkbworCQlzZWQgLWkgLWUgJ3N8XiMhLiovdXNyL2Jpbi9lbnYgcHl0aG9ufCMhIC91c3IvYmluL2VudiBuYXRpdmVweXRob258JyAkaQorCWRvbmUKKworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2NyZWF0ZXJlcG8gXAorCQkJUlBNX1VTUkxJQlJQTT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vcnBtIFwKKwkJCVJQTV9FVENSUE09JHtTVEFHSU5HX0VUQ0RJUl9OQVRJVkV9L3JwbSBcCisJCQlSUE1fTE9DQUxFRElSUlBNPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vbG9jYWxlCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9jb25maWd1cmVfYWMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9jb25maWd1cmVfYWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhiZDMwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsL2NvbmZpZ3VyZV9hYy5wYXRjaApAQCAtMCwwICsxLDEzIEBACitVcHN0cmVhbS1TdGF0dXM6ICBQZW5kaW5nCisKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjgxLDcgKzI4MSw3IEBAIGRubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAKKyBDVVJMX0NIRUNLX0NPTVBJTEVSCisgQ1VSTF9TRVRfQ09NUElMRVJfQkFTSUNfT1BUUworLUNVUkxfU0VUX0NPTVBJTEVSX0RFQlVHX09QVFMKKytkbmwgQ1VSTF9TRVRfQ09NUElMRVJfREVCVUdfT1BUUworIENVUkxfU0VUX0NPTVBJTEVSX09QVElNSVpFX09QVFMKKyBDVVJMX1NFVF9DT01QSUxFUl9XQVJOSU5HX09QVFMKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsL3BrZ2NvbmZpZ19maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9wa2djb25maWdfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkODc2OWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9wa2djb25maWdfZml4LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbcGFja2FnaW5nXQorCitkaWZmIC1OdXJkIGN1cmwtNy4yOS4wL2NvbmZpZ3VyZS5hYyBjdXJsLTcuMjkuMC9jb25maWd1cmUuYWMKKy0tLSBjdXJsLTcuMjkuMC9jb25maWd1cmUuYWMJMjAxMy0wMi0wNiAxMTo0NzoxOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBjdXJsLTcuMjkuMC9jb25maWd1cmUuYWMJMjAxMy0wMi0xNiAxMjozMjoyMi4xMzIzMjc3NjQgKzAyMDAKK0BAIC0xODgzLDYgKzE4ODMsNyBAQAorICAgICAgICBBQ19TVUJTVChVU0VfR05VVExTLCBbMV0pCisgICAgICAgIEdOVVRMU19FTkFCTEVEPTEKKyAgICAgICAgVVNFX0dOVVRMUz0ieWVzIgorKyAgICAgICBHTlVUTFNfUkVRVUlSRUQ9ImdudXRscyIKKyAgICAgICAgY3VybF9zc2xfbXNnPSJlbmFibGVkIChHbnVUTFMpIgorICAgICAgICBdLAorICAgICAgICBbCitAQCAtMTk1Myw2ICsxOTU0LDggQEAKKyAgICBdKQorIGZpCisgCisrQUNfU1VCU1QoR05VVExTX1JFUVVJUkVEKQorKworIGRubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZG5sIGNoZWNrIGZvciBQb2xhclNTTAorIGRubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkaWZmIC1OdXJkIGN1cmwtNy4yOS4wL2xpYmN1cmwucGMuaW4gY3VybC03LjI5LjAvbGliY3VybC5wYy5pbgorLS0tIGN1cmwtNy4yOS4wL2xpYmN1cmwucGMuaW4JMjAxMi0xMi0xMiAwMDozMjoyMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBjdXJsLTcuMjkuMC9saWJjdXJsLnBjLmluCTIwMTMtMDItMTYgMTI6MzM6MjcuMDYzODQ0MzM3ICswMjAwCitAQCAtMzUsNSArMzUsNSBAQAorIERlc2NyaXB0aW9uOiBMaWJyYXJ5IHRvIHRyYW5zZmVyIGZpbGVzIHdpdGggZnRwLCBodHRwLCBldGMuCisgVmVyc2lvbjogQENVUkxWRVJTSU9OQAorIExpYnM6IC1MJHtsaWJkaXJ9IC1sY3VybAorLUxpYnMucHJpdmF0ZTogQExJQkNVUkxfTElCU0AKKytMaWJzLnByaXZhdGU6IC1sZGwgLWx6CisgQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0gQENQUEZMQUdfQ1VSTF9TVEFUSUNMSUJACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybF83LjQ0LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybF83LjQ0LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI5MzMwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsXzcuNDQuMC5iYgpAQCAtMCwwICsxLDUzIEBACitTVU1NQVJZID0gIkNvbW1hbmQgbGluZSB0b29sIGFuZCBsaWJyYXJ5IGZvciBjbGllbnQtc2lkZSBVUkwgdHJhbnNmZXJzIgorSE9NRVBBR0UgPSAiaHR0cDovL2N1cmwuaGF4eC5zZS8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saXN0LmNnaT9saXN0PWN1cmwtdHJhY2tlciIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO2JlZ2lubGluZT03O21kNT0zYTM0OTQyZjRhZTNmYmYxYTMwMzE2MDcxNGU2NjRhYyIKKworU1JDX1VSSSA9ICJodHRwOi8vY3VybC5oYXh4LnNlL2Rvd25sb2FkL2N1cmwtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWdfZml4LnBhdGNoIFwKKyAgICAgICAgICAiCisKKyMgY3VybCBsaWtlcyB0byBzZXQgLWcwIGluIENGTEFHUywgc28gd2Ugc3RvcCBpdAorIyBmcm9tIG11Y2tpbmcgYXJvdW5kIHdpdGggZGVidWcgb3B0aW9ucworIworU1JDX1VSSSArPSAiIGZpbGU6Ly9jb25maWd1cmVfYWMucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2Yjk1MmNhMDBlNTQ3M2IxNmExMWYwNWYwNmFhOGRhZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZTI1NDFiYWU2NTgyYmI2OTdjMGZiYWU0OWUxZDNlNmZhZDVkMDVkNWFhODBkYmQ2ZjA3MmUwYTQ0MzQxODE0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYmluY29uZmlnIG11bHRpbGliX2hlYWRlcgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJpcHY2IiwgImlwdjYiLCAiIiwgZCl9IGdudXRscyB6bGliIgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPSAiaXB2NiBzc2wgemxpYiIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlc2RrID0gImlwdjYgc3NsIHpsaWIiCisKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCitQQUNLQUdFQ09ORklHW3NzbF0gPSAiLS13aXRoLXNzbCAtLXdpdGgtcmFuZG9tPS9kZXYvdXJhbmRvbSwtLXdpdGhvdXQtc3NsLG9wZW5zc2wiCitQQUNLQUdFQ09ORklHW2dudXRsc10gPSAiLS13aXRoLWdudXRscywtLXdpdGhvdXQtZ251dGxzLGdudXRscyIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS13aXRoLXpsaWI9JHtTVEFHSU5HX0xJQkRJUn0vLi4vLC0td2l0aG91dC16bGliLHpsaWIiCitQQUNLQUdFQ09ORklHW3J0bXBkdW1wXSA9ICItLXdpdGgtbGlicnRtcCwtLXdpdGhvdXQtbGlicnRtcCxydG1wZHVtcCIKK1BBQ0tBR0VDT05GSUdbbGlic3NoMl0gPSAiLS13aXRoLWxpYnNzaDIsLS13aXRob3V0LWxpYnNzaDIsbGlic3NoMiIKK1BBQ0tBR0VDT05GSUdbc21iXSA9ICItLWVuYWJsZS1zbWIsLS1kaXNhYmxlLXNtYiwiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtbGliaWRuIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1jcnlwdG8tYXV0aCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxkYXAgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1sZGFwcyBcCisgICAgICAgICAgICAgICAgLS13aXRoLWNhLWJ1bmRsZT0ke3N5c2NvbmZkaXJ9L3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0ZXMuY3J0IFwKKyIKKyMgc2VlIGh0dHBzOi8vbGlzdHMueW9jdG9wcm9qZWN0Lm9yZy9waXBlcm1haWwvcG9reS8yMDEzLURlY2VtYmVyLzAwOTQzNS5odG1sCisjIFdlIHNob3VsZCBpZGVhbGx5IGRyb3AgYWNfY3Zfc2l6ZW9mX29mZl90IGZyb20gc2l0ZSBmaWxlcyBidXQgdW50aWwgdGhlbgorRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xhcmdlZmlsZScsICdhY19jdl9zaXplb2Zfb2ZmX3Q9OCcsICcnLCBkKX0iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW9lX211bHRpbGliX2hlYWRlciBjdXJsL2N1cmxidWlsZC5oCit9CisKK1BBQ0tBR0VTID0rICJsaWIke0JQTn0iCisKK0ZJTEVTX2xpYiR7QlBOfSA9ICIke2xpYmRpcn0vbGliKi5zby4qIgorUlJFQ09NTUVORFNfbGliJHtCUE59ICs9ICJjYS1jZXJ0aWZpY2F0ZXMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvTWFrZWZpbGUtbGV0LWxpYnNvX3RhcmdldC1kZXBlbmQtb24tYnRfcmVjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9NYWtlZmlsZS1sZXQtbGlic29fdGFyZ2V0LWRlcGVuZC1vbi1idF9yZWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI5YmZmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvTWFrZWZpbGUtbGV0LWxpYnNvX3RhcmdldC1kZXBlbmQtb24tYnRfcmVjLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYzY0MGZmOTM0MGYzNThhMDA4MzU4MTZkMGZlYTAzZDI3YTdiZTk3OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAzMSBNYXIgMjAxNSAwMDo1Njo0NCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZTogbGV0IGxpYnNvX3RhcmdldCBkZXBlbmQgb24gYnRfcmVjCisKK0ZpeGVkIHBhcmFsbGVsIGlzc3VlOgorbGlidG9vbDogbGluazogYGJ0X3JlYy5sbycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QKK01ha2VmaWxlOjg2NzogcmVjaXBlIGZvciB0YXJnZXQgJ2xpYmRiLTYuMC5sYScgZmFpbGVkCittYWtlOiAqKiogW2xpYmRiLTYuMC5sYV0gRXJyb3IgMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGU0NTFmNzAuLjBhNDIzNzUgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC04NjMsNyArODYzLDcgQEAgJChsaWJkYl92ZXJzaW9uKTogJChDX09CSlMpCisgCSQoTE4pIC1zICQobGliZGJfdmVyc2lvbikgJChsaWJkYikKKyAKKyAjIFNoYXJlZCBDIGxpYnJhcnkuCistJChsaWJzb190YXJnZXQpOiAkKENfT0JKUykKKyskKGxpYnNvX3RhcmdldCk6ICQoQ19PQkpTKSBidF9yZWNAb0AKKyAJJChTT0xJTkspICQoU09GTEFHUykgJChMREZMQUdTKSAtbyAkQCAkKENfT0JKUykgXAorIAkJJChMSUJDU09fTElCUykKKyAJJChSTSkgJChsaWJkYikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvYXJtLXRodW1iLW11dGV4X2RiNS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvYXJtLXRodW1iLW11dGV4X2RiNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGU4ZGI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9hcm0tdGh1bWItbXV0ZXhfZGI1LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK09yaWdpbmFsIHBhdGNoIHN1Ym1pdHRlZCBieSBqYm93bGVyQG5zbHUyLWxpbnV4Lm9yZyBvbiAyMDA1LTExLTE3OgorCitkYjogZml4IHRodW1iIHVjbGliYyBvcGVyYXRpb24gaW4gNC4zLjI5CisgIC0gdWNsaWJjIHRodW1iIGJ1aWxkcyB3ZXJlIHVzaW5nIGxpYnB0aHJlYWQgdG8gaW1wbGVtZW50IG11dGV4ZXMsIHRoZQorICAtIHVjbGliYyB2ZXJzaW9uIHNlZW1zIHRvIGJlIGEgc3R1YiAoYXQgbGVhc3Qgb24gdGh1bWIpLiAgVGhpcyBjb21taXQKKyAgLSBmaXhlcyB0aGUgQVJNL2djYy1hc3NlbWJseSBtdXRleCBpbXBsZW1lbnRhdGlvbiBzbyB0aGF0IGl0IGhhcyB0aHVtYgorICAtIHN1cHBvcnQgYW5kIHRoZSByZXN1bHRhbnQgZGI0IHdvcmtzICh0ZXN0ZWQgb24gTEUgVGh1bWIgdWNsaWJjKQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitBdXRob3I6IGpib3dsZXJAbnNsdTItbGludXgub3JnCisKKy0tLSBkYi01LjEuMTkvc3JjL2RiaW5jL211dGV4X2ludC5oLm9yaWcJMjAxMS0wMS0wNSAxOToyMTo0Mi4xODE4MDUzNjYgLTA2MDAKKysrKyBkYi01LjEuMTkvc3JjL2RiaW5jL211dGV4X2ludC5oCTIwMTEtMDEtMDUgMTk6MjQ6NTMuMTQxODUzMTE3IC0wNjAwCitAQCAtNDc0LDYgKzQ3NCwyNSBAQAorIAorICNpZmRlZiBMT0FEX0FDVFVBTF9NVVRFWF9DT0RFCisgLyogZ2NjL2FybTogMCBpcyBjbGVhciwgMSBpcyBzZXQuICovCisrI2lmIGRlZmluZWQgX190aHVtYl9fCisrI2RlZmluZQlNVVRFWF9TRVQodHNsKSAoewkJCQkJCVwKKysJaW50IF9fciwgX19wOwkJCQkJCQlcCisrCV9fYXNtX18gdm9sYXRpbGUoCQkJCQkJXAorKwkJIi5hbGlnbiAyXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkiYnggICAgIHBjXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSJub3Bcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJIi5hcm1cblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkic3dwYiAgICUwLCAlMiwgWyUzXVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSJlb3IgICAgJTAsICUwLCAjMVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJIm9yciAgICAlMSwgcGMsICMxXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkiYnggICAgICUxXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSIuZm9yY2VfdGh1bWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkgICAgOiAiPSZyIiAoX19yKSwgIj1yIiAoX19wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkgICAgOiAiciIgKDEpLCAiciIgKHRzbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwlfX3IgJiAxOwkJCQkJCQlcCisrfSkKKysjZWxzZQorICNkZWZpbmUJTVVURVhfU0VUKHRzbCkgKHsJCQkJCQlcCisgCWludCBfX3I7CQkJCQkJCVwKKyAJX19hc21fXyB2b2xhdGlsZSgJCQkJCQlcCitAQCAtNDg0LDYgKzUwMyw3IEBACisgCSAgICApOwkJCQkJCQkJXAorIAlfX3IgJiAxOwkJCQkJCQlcCisgfSkKKysjZW5kaWYKKyAKKyAjZGVmaW5lCU1VVEVYX1VOU0VUKHRzbCkJKCoodm9sYXRpbGUgdHNsX3QgKikodHNsKSA9IDApCisgI2RlZmluZQlNVVRFWF9JTklUKHRzbCkgICAgICAgICAoTVVURVhfVU5TRVQodHNsKSwgMCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3ZjFlMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1dpdGggaGlnaGVyIHBhcmFsZWxpc20gaXQgc29tZXRpbWVzIGZhaWxzIHdpdGg6CitsaWJ0b29sOiBsaW5rOiBgdXRpbF9sb2cubG8nIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0CittYWtlOiAqKiogW2RiX3JlcGxpY2F0ZV0gRXJyb3IgMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCistLS0gZGlzdC5vcmlnL01ha2VmaWxlLmluCTIwMTItMDUtMTEgMTk6NTc6NDguMDAwMDAwMDAwICswMjAwCisrKysgZGlzdC9NYWtlZmlsZS5pbgkyMDEzLTEwLTMxIDE4OjE3OjExLjg3NTUzMjUyMiArMDEwMAorQEAgLTEwMzQsNyArMTAzNCw3IEBACisgCSAgICBkYl9yZWNvdmVyQG9AIHV0aWxfc2lnQG9AICQoREVGX0xJQikgJChMSUJTKQorIAkkKFBPU1RMSU5LKSAkQAorIAorLWRiX3JlcGxpY2F0ZTogZGJfcmVwbGljYXRlQG9AIHV0aWxfc2lnQG9AICQoREVGX0xJQikKKytkYl9yZXBsaWNhdGU6IGRiX3JlcGxpY2F0ZUBvQCB1dGlsX2xvZ0BvQCB1dGlsX3NpZ0BvQCAkKERFRl9MSUIpCisgCSQoQ0NMSU5LKSAtbyAkQCAkKExERkxBR1MpIFwKKyAJICAgIGRiX3JlcGxpY2F0ZUBvQCB1dGlsX2xvZ0BvQCB1dGlsX3NpZ0BvQCAkKERFRl9MSUIpICQoTElCUykKKyAJJChQT1NUTElOSykgJEAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNS4zLjI4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl81LjMuMjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiODE0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNS4zLjI4LmJiCkBAIC0wLDAgKzEsMTE2IEBACisjIFZlcnNpb24gNSBvZiB0aGUgQmVya2VsZXkgREIgZnJvbSBTbGVlcHljYXQKKyMKKyMgQXQgcHJlc2VudCB0aGlzIHBhY2thZ2Ugb25seSBpbnN0YWxscyB0aGUgREIgY29kZQorIyBpdHNlbGYgKHNoYXJlZCBsaWJyYXJpZXMsIC5hIGluIHRoZSBkZXYgcGFja2FnZSksCisjIGRvY3VtZW50YXRpb24gYW5kIGhlYWRlcnMuCisjCisjIFRoZSBoZWFkZXJzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhvc2UgYXMgdjMKKyMgb2YgdGhlIERCLCBvbmx5IG9uZSB2ZXJzaW9uIGNhbiBiZSB1c2VkICpmb3IgZGV2KgorIyBhdCBvbmNlIC0gREIzIGFuZCBEQjUgY2FuIGJvdGggYmUgaW5zdGFsbGVkIG9uIHRoZQorIyBzYW1lIHN5c3RlbSBhdCB0aGUgc2FtZSB0aW1lIGlmIHJlYWxseSBuZWNlc3NhcnkuCitTRUNUSU9OID0gImxpYnMiCitTVU1NQVJZID0gIkJlcmtlbGV5IERhdGFiYXNlIHY1IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2hub2xvZ3kvcHJvZHVjdHMvYmVya2VsZXktZGIvZGIvaW5kZXguaHRtbCIKK0xJQ0VOU0UgPSAiU2xlZXB5Y2F0IgorVklSVFVBTF9OQU1FID89ICJ2aXJ0dWFsL2RiIgorUkNPTkZMSUNUU18ke1BOfSA9ICJkYjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLm9yYWNsZS5jb20vYmVya2VsZXktZGIvZGItJHtQVn0udGFyLmd6IgorU1JDX1VSSSArPSAiZmlsZTovL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2g7cGF0Y2hkaXI9Li4gXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImI5OTQ1NDU2NGQ1YjQ0Nzk3NTA1NjcwMzFkNjZmZTI0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUwYTk5MmQ3NDA3MDk4OTJlODFmOWQ5M2YwNmRhZjMwNWNmNzNmYjgxYjU0NWFmZTcyNDc4MDQzMTcyYzM2MjgiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL0xJQ0VOU0U7bWQ1PWVkMTE1OGUzMTQzN2Y0Zjg3Y2RkNGFiMmI4NjEzOTU1IgorCitpbmhlcml0IGF1dG90b29scworCisjIFB1dCB2aXJ0dWFsL2RiIGluIGFueSBhcHByb3ByaWF0ZSBwcm92aWRlciBvZiBhCisjIHJlbGF0aW9uYWwgZGF0YWJhc2UsIHVzZSBpdCBhcyBhIGRlcGVuZGVuY3kgaW4KKyMgcGxhY2Ugb2YgYSBzcGVjaWZpYyBkYiBhbmQgdXNlOgorIworIyBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9kYgorIworIyB0byBzZWxlY3QgdGhlIGNvcnJlY3QgZGIgaW4gdGhlIGJ1aWxkIChkaXN0cm8pIC5jb25mCitQUk9WSURFUyArPSAiJHtWSVJUVUFMX05BTUV9IgorCisjIGJpdGJha2UgaXNuJ3QgcXVpdGUgY2xldmVyIGVub3VnaCB0byBkZWFsIHdpdGggc2xlZXB5Y2F0LAorIyB0aGUgZGlzdHJpYnV0aW9uIHNpdHMgaW4gdGhlIGV4cGVjdGVkIGRpcmVjdG9yeSwgYnV0IGFsbAorIyB0aGUgYnVpbGRzIG11c3Qgb2NjdXIgZnJvbSBhIHN1Yi1kaXJlY3RvcnkuICBUaGUgZm9sbG93aW5nCisjIHBlcnN1YWRlcyBiaXRiYWtlIHRvIGdvIHRvIHRoZSByaWdodCBwbGFjZQorUyA9ICIke1dPUktESVJ9L2RiLSR7UFZ9L2Rpc3QiCitCID0gIiR7V09SS0RJUn0vZGItJHtQVn0vYnVpbGRfdW5peCIKK1NQRFhfUyA9ICIke1dPUktESVJ9L2RiLSR7UFZ9IgorCisjIFRoZSBleGVjdXRhYmxlcyBnbyBpbiBhIHNlcGFyYXRlIHBhY2thZ2UgLSB0eXBpY2FsbHkgdGhlcmUKKyMgaXMgbm8gbmVlZCB0byBpbnN0YWxsIHRoZXNlIHVubGVzcyBkb2luZyByZWFsIGRhdGFiYXNlCisjIG1hbmFnZW1lbnQgb24gdGhlIHN5c3RlbS4KK2luaGVyaXQgbGliX3BhY2thZ2UKKworUEFDS0FHRVMgPSsgIiR7UE59LWN4eCIKK0ZJTEVTXyR7UE59LWN4eCA9ICIke2xpYmRpcn0vKmN4eCpzbyIKKworCisjIFRoZSBkZXYgcGFja2FnZSBoYXMgdGhlIC5zbyBsaW5rIChhcyBpbiBkYjMpIGFuZCB0aGUgLmEncyAtCisjIGl0IGlzIHRoZXJlZm9yZSBpbmNvbXBhdGlibGUgKGNhbm5vdCBiZSBpbnN0YWxsZWQgYXQgdGhlCisjIHNhbWUgdGltZSkgYXMgdGhlIGRiMyBwYWNrYWdlCisjIHNvcnQgb3V0IHRoZSAuc28gc2luY2UgdGhleSBkbyB2ZXJzaW9uIHByaW9yIHRvIHRoZSAuc28KK1NPTElCUyA9ICItNSouc28iCitGSUxFU19TT0xJQlNERVYgPSAiJHtsaWJkaXJ9L2xpYmRiLnNvICR7bGliZGlyfS9saWJkYl9jeHguc28iCisKKyNjb25maWd1cmF0aW9uIC0gc2V0IGluIGxvY2FsLmNvbmYgdG8gb3ZlcnJpZGUKKyMgQWxsIHRoZSAtLWRpc2FibGUtKiBvcHRpb25zIHJlcGxhY2UgLS1lbmFibGUtc21hbGxidWlsZCwgd2hpY2ggYnJlYWtzIGEgYnVuY2ggb2Ygc3R1ZmYgKGVnLiBwb3N0Zml4KQorREI1X0NPTkZJRyA/PSAiLS1lbmFibGUtb19kaXJlY3QgLS1kaXNhYmxlLWNyeXB0b2dyYXBoeSAtLWRpc2FibGUtcXVldWUgLS1kaXNhYmxlLXJlcGxpY2F0aW9uIC0tZGlzYWJsZS12ZXJpZnkgLS1kaXNhYmxlLWNvbXBhdDE4NSAtLWRpc2FibGUtc3FsIgorCitFWFRSQV9PRUNPTkYgPSAiJHtEQjVfQ09ORklHfSAtLWVuYWJsZS1zaGFyZWQgLS1lbmFibGUtY3h4IC0td2l0aC1zeXNyb290IgorCisjIE92ZXJyaWRlIHRoZSBNVVRFWCBzZXR0aW5nIGhlcmUsIHRoZSBQT1NJWCBsaWJyYXJ5IGlzCisjIHRoZSBkZWZhdWx0IC0gIlBPU0lYL3B0aHJlYWRzL2xpYnJhcnkiLgorIyBEb24ndCBpZ25vcmUgdGhlIG5pY2UgU1dQIGluc3RydWN0aW9uIG9uIHRoZSBBUk06CisjIFRoZXNlIGVuYWJsZSB0aGUgQVJNIGFzc2VtYmxlciBtdXRleCBjb2RlLCB0aGlzIHdvbid0CisjIHdvcmsgd2l0aCB0aHVtYiBjb21waWxhdGlvbi4uLgorQVJNX01VVEVYID0gIi0td2l0aC1tdXRleD1BUk0vZ2NjLWFzc2VtYmx5IgorTVVURVggPSAiIgorTVVURVhfYXJtID0gIiR7QVJNX01VVEVYfSIKK01VVEVYX2FybWViID0gIiR7QVJNX01VVEVYfSIKK0VYVFJBX09FQ09ORiArPSAiJHtNVVRFWH0iCisKKyMgQ2FuY2VsIHRoZSBzaXRlIHN0dWZmIC0gaXQncyBzZXQgZm9yIGRiMyBhbmQgZGVzdHJveXMgdGhlCisjIGNvbmZpZ3VyZS4KK0NPTkZJR19TSVRFID0gIiIKK2RvX2NvbmZpZ3VyZSgpIHsKKwlnbnUtY29uZmlnaXplIC0tZm9yY2UgJHtTfQorCWV4cG9ydCBTVFJJUD0idHJ1ZSIKKwlvZV9ydW5jb25mCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwlzZWQgLWkgLWUgJ3N8aGFyZGNvZGVfaW50b19saWJzPXllc3xoYXJkY29kZV9pbnRvX2xpYnM9bm98JyBcCisJCSR7Qn0vbGlidG9vbAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlta2RpciAtcCAke0R9LyR7aW5jbHVkZWRpcn0vZGI1MQorCW12ICR7RH0vJHtpbmNsdWRlZGlyfS9kYi5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYjUxLy4KKwltdiAke0R9LyR7aW5jbHVkZWRpcn0vZGJfY3h4LmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiNTEvLgorCWxuIC1zIGRiNTEvZGIuaCAke0R9LyR7aW5jbHVkZWRpcn0vZGIuaAorCWxuIC1zIGRiNTEvZGJfY3h4LmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiX2N4eC5oCisKKwkjIFRoZSBkb2NzIGVuZCB1cCBpbiAvdXNyL2RvY3MgLSBub3QgcmlnaHQuCisJaWYgdGVzdCAtZCAiJHtEfS8ke3ByZWZpeH0vZG9jcyIKKwl0aGVuCisJCW1rZGlyIC1wICIke0R9LyR7ZGF0YWRpcn0iCisJCXRlc3QgISAtZCAiJHtEfS8ke2RvY2Rpcn0iIHx8IHJtIC1yZiAiJHtEfS8ke2RvY2Rpcn0iCisJCW12ICIke0R9LyR7cHJlZml4fS9kb2NzIiAiJHtEfS8ke2RvY2Rpcn0iCisJZmkKKworCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisKK0lOU0FORV9TS0lQXyR7UE59ID0gImRldi1zbyIKK0lOU0FORV9TS0lQXyR7UE59LWN4eCA9ICJkZXYtc28iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl82LjAuMzAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiXzYuMC4zMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDlkZjYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl82LjAuMzAuYmIKQEAgLTAsMCArMSwxMTggQEAKKyMgVmVyc2lvbiA2IG9mIHRoZSBCZXJrZWxleSBEQiBmcm9tIE9yYWNsZSAoZm9ybWVybHkgU2xlZXB5Y2F0KQorIworIyBBdCBwcmVzZW50IHRoaXMgcGFja2FnZSBvbmx5IGluc3RhbGxzIHRoZSBEQiBjb2RlCisjIGl0c2VsZiAoc2hhcmVkIGxpYnJhcmllcywgLmEgaW4gdGhlIGRldiBwYWNrYWdlKSwKKyMgZG9jdW1lbnRhdGlvbiBhbmQgaGVhZGVycy4KKyMKKyMgVGhlIGhlYWRlcnMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aG9zZSBhcyB2MworIyBvZiB0aGUgREIsIG9ubHkgb25lIHZlcnNpb24gY2FuIGJlIHVzZWQgKmZvciBkZXYqCisjIGF0IG9uY2UgLSBEQjMgYW5kIERCNiBjYW4gYm90aCBiZSBpbnN0YWxsZWQgb24gdGhlCisjIHNhbWUgc3lzdGVtIGF0IHRoZSBzYW1lIHRpbWUgaWYgcmVhbGx5IG5lY2Vzc2FyeS4KK1NFQ1RJT04gPSAibGlicyIKK1NVTU1BUlkgPSAiQmVya2VsZXkgRGF0YWJhc2UgdjYiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9yYWNsZS5jb20vdGVjaG5vbG9neS9wcm9kdWN0cy9iZXJrZWxleS1kYi9kYi9pbmRleC5odG1sIgorTElDRU5TRSA9ICJBR1BMLTMuMCIKK1ZJUlRVQUxfTkFNRSA/PSAidmlydHVhbC9kYiIKK1JDT05GTElDVFNfJHtQTn0gPSAiZGIzIgorCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICJVcGRhdGluZyB0byA2LjEueCByZXF1aXJlcyBhbHNvIHVwZGF0aW5nIHJwbSB0byA1LjQuMTUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLm9yYWNsZS5jb20vYmVya2VsZXktZGIvZGItJHtQVn0udGFyLmd6IgorU1JDX1VSSSArPSAiZmlsZTovL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2g7cGF0Y2hkaXI9Li4gXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUtbGV0LWxpYnNvX3RhcmdldC1kZXBlbmQtb24tYnRfcmVjLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYWQyOGViODZhZDMyMDNiNTQyMjg0NGRiMTc5YzU4NWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjA4ZTRiMWNmMzkwZTliZjU0YzBlZjAwYzViZDljYTc2ZDM2ZTIyNjFiOWY0ZDMzZDU0NTE2ZjNmNmEyMGZkMiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vTElDRU5TRTttZDU9MWVjOGIwYjE3Y2MzMTUxM2ZlMzVhYjEwNzE2Zjg0OTAiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgUHV0IHZpcnR1YWwvZGIgaW4gYW55IGFwcHJvcHJpYXRlIHByb3ZpZGVyIG9mIGEKKyMgcmVsYXRpb25hbCBkYXRhYmFzZSwgdXNlIGl0IGFzIGEgZGVwZW5kZW5jeSBpbgorIyBwbGFjZSBvZiBhIHNwZWNpZmljIGRiIGFuZCB1c2U6CisjCisjIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2RiCisjCisjIHRvIHNlbGVjdCB0aGUgY29ycmVjdCBkYiBpbiB0aGUgYnVpbGQgKGRpc3RybykgLmNvbmYKK1BST1ZJREVTICs9ICIke1ZJUlRVQUxfTkFNRX0iCisKKyMgYml0YmFrZSBpc24ndCBxdWl0ZSBjbGV2ZXIgZW5vdWdoIHRvIGRlYWwgd2l0aCBzbGVlcHljYXQsCisjIHRoZSBkaXN0cmlidXRpb24gc2l0cyBpbiB0aGUgZXhwZWN0ZWQgZGlyZWN0b3J5LCBidXQgYWxsCisjIHRoZSBidWlsZHMgbXVzdCBvY2N1ciBmcm9tIGEgc3ViLWRpcmVjdG9yeS4gIFRoZSBmb2xsb3dpbmcKKyMgcGVyc3VhZGVzIGJpdGJha2UgdG8gZ28gdG8gdGhlIHJpZ2h0IHBsYWNlCitTID0gIiR7V09SS0RJUn0vZGItJHtQVn0vZGlzdCIKK0IgPSAiJHtXT1JLRElSfS9kYi0ke1BWfS9idWlsZF91bml4IgorU1BEWF9TID0gIiR7V09SS0RJUn0vZGItJHtQVn0iCisKKyMgVGhlIGV4ZWN1dGFibGVzIGdvIGluIGEgc2VwYXJhdGUgcGFja2FnZSAtIHR5cGljYWxseSB0aGVyZQorIyBpcyBubyBuZWVkIHRvIGluc3RhbGwgdGhlc2UgdW5sZXNzIGRvaW5nIHJlYWwgZGF0YWJhc2UKKyMgbWFuYWdlbWVudCBvbiB0aGUgc3lzdGVtLgoraW5oZXJpdCBsaWJfcGFja2FnZQorCitQQUNLQUdFUyA9KyAiJHtQTn0tY3h4IgorRklMRVNfJHtQTn0tY3h4ID0gIiR7bGliZGlyfS8qY3h4KnNvIgorCisKKyMgVGhlIGRldiBwYWNrYWdlIGhhcyB0aGUgLnNvIGxpbmsgKGFzIGluIGRiMykgYW5kIHRoZSAuYSdzIC0KKyMgaXQgaXMgdGhlcmVmb3JlIGluY29tcGF0aWJsZSAoY2Fubm90IGJlIGluc3RhbGxlZCBhdCB0aGUKKyMgc2FtZSB0aW1lKSBhcyB0aGUgZGIzIHBhY2thZ2UKKyMgc29ydCBvdXQgdGhlIC5zbyBzaW5jZSB0aGV5IGRvIHZlcnNpb24gcHJpb3IgdG8gdGhlIC5zbworU09MSUJTID0gIi02Ki5zbyIKK0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliZGIuc28gJHtsaWJkaXJ9L2xpYmRiX2N4eC5zbyIKKworI2NvbmZpZ3VyYXRpb24gLSBzZXQgaW4gbG9jYWwuY29uZiB0byBvdmVycmlkZQorIyBBbGwgdGhlIC0tZGlzYWJsZS0qIG9wdGlvbnMgcmVwbGFjZSAtLWVuYWJsZS1zbWFsbGJ1aWxkLCB3aGljaCBicmVha3MgYSBidW5jaCBvZiBzdHVmZiAoZWcuIHBvc3RmaXgpCitEQjZfQ09ORklHID89ICItLWVuYWJsZS1vX2RpcmVjdCAtLWRpc2FibGUtY3J5cHRvZ3JhcGh5IC0tZGlzYWJsZS1xdWV1ZSAtLWRpc2FibGUtcmVwbGljYXRpb24gLS1kaXNhYmxlLXZlcmlmeSAtLWRpc2FibGUtY29tcGF0MTg1IC0tZGlzYWJsZS1zcWwiCisKK0VYVFJBX09FQ09ORiA9ICIke0RCNl9DT05GSUd9IC0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS1jeHggLS13aXRoLXN5c3Jvb3QiCisKKyMgT3ZlcnJpZGUgdGhlIE1VVEVYIHNldHRpbmcgaGVyZSwgdGhlIFBPU0lYIGxpYnJhcnkgaXMKKyMgdGhlIGRlZmF1bHQgLSAiUE9TSVgvcHRocmVhZHMvbGlicmFyeSIuCisjIERvbid0IGlnbm9yZSB0aGUgbmljZSBTV1AgaW5zdHJ1Y3Rpb24gb24gdGhlIEFSTToKKyMgVGhlc2UgZW5hYmxlIHRoZSBBUk0gYXNzZW1ibGVyIG11dGV4IGNvZGUKK0FSTV9NVVRFWCA9ICItLXdpdGgtbXV0ZXg9QVJNL2djYy1hc3NlbWJseSIKK01VVEVYID0gIiIKK01VVEVYX2FybSA9ICIke0FSTV9NVVRFWH0iCitNVVRFWF9hcm1lYiA9ICIke0FSTV9NVVRFWH0iCitFWFRSQV9PRUNPTkYgKz0gIiR7TVVURVh9IgorCisjIENhbmNlbCB0aGUgc2l0ZSBzdHVmZiAtIGl0J3Mgc2V0IGZvciBkYjMgYW5kIGRlc3Ryb3lzIHRoZQorIyBjb25maWd1cmUuCitDT05GSUdfU0lURSA9ICIiCitkb19jb25maWd1cmUoKSB7CisJZ251LWNvbmZpZ2l6ZSAtLWZvcmNlICR7U30KKwlleHBvcnQgU1RSSVA9InRydWUiCisJb2VfcnVuY29uZgorfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJc2VkIC1pIC1lICdzfGhhcmRjb2RlX2ludG9fbGlicz15ZXN8aGFyZGNvZGVfaW50b19saWJzPW5vfCcgXAorCQkke0J9L2xpYnRvb2wKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbWtkaXIgLXAgJHtEfS8ke2luY2x1ZGVkaXJ9L2RiNjAKKwltdiAke0R9LyR7aW5jbHVkZWRpcn0vZGIuaCAke0R9LyR7aW5jbHVkZWRpcn0vZGI2MC8uCisJbXYgJHtEfS8ke2luY2x1ZGVkaXJ9L2RiX2N4eC5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYjYwLy4KKwlsbiAtcyBkYjYwL2RiLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiLmgKKwlsbiAtcyBkYjYwL2RiX2N4eC5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYl9jeHguaAorCisJIyBUaGUgZG9jcyBlbmQgdXAgaW4gL3Vzci9kb2NzIC0gbm90IHJpZ2h0LgorCWlmIHRlc3QgLWQgIiR7RH0vJHtwcmVmaXh9L2RvY3MiCisJdGhlbgorCQlta2RpciAtcCAiJHtEfS8ke2RhdGFkaXJ9IgorCQl0ZXN0ICEgLWQgIiR7RH0vJHtkb2NkaXJ9IiB8fCBybSAtcmYgIiR7RH0vJHtkb2NkaXJ9IgorCQltdiAiJHtEfS8ke3ByZWZpeH0vZG9jcyIgIiR7RH0vJHtkb2NkaXJ9IgorCWZpCisKKwljaG93biAtUiByb290OnJvb3QgJHtEfQorfQorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJkZXYtc28iCitJTlNBTkVfU0tJUF8ke1BOfS1jeHggPSAiZGV2LXNvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGViaWFudXRpbHMvZGViaWFudXRpbHNfNC41LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RlYmlhbnV0aWxzL2RlYmlhbnV0aWxzXzQuNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNjY1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RlYmlhbnV0aWxzL2RlYmlhbnV0aWxzXzQuNS4xLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiTWlzY2VsbGFuZW91cyB1dGlsaXRpZXMgc3BlY2lmaWMgdG8gRGViaWFuIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiAmIFNNQUlMX0dQTCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PWYwMWE1MjAzZDUwNTEyZmM0ODMwYjQzMzJiNjk2YTlmIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9kLyR7QlBOfS8ke0JQTn1fJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDg3NTI0NTE4Y2Q1ODMzYTZhNGY3MDA3YjVkMWJkNWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTUzMWMyM2UwMTA1ZmUwMWNmYTkyODQ1N2E4MzQzYTFlOTQ3ZTI2MjFiM2NkNGQwNWY0ZTk2NTYwMjBjNjNiNyIKKworUyA9ICIke1dPUktESVJ9LyR7QlBOfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcworCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzZWQgLWkgLWUgJ3M6dGVtcGZpbGUuMSB3aGljaC4xOndoaWNoLjE6ZycgJHtTfS9NYWtlZmlsZS5hbQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpZiBbICIke2Jhc2VfYmluZGlyfSIgIT0gIiR7YmluZGlyfSIgXTsgdGhlbgorICAgICAgICAjIERlYmlhbiBwbGFjZXMgc29tZSB1dGlscyBpbnRvICR7YmFzZV9iaW5kaXJ9IGFzIGRvZXMgYnVzeWJveAorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorICAgICAgICBmb3IgYXBwIGluIHJ1bi1wYXJ0cyB0ZW1wZmlsZTsgZG8KKyAgICAgICAgICAgIG12ICR7RH0ke2JpbmRpcn0vJGFwcCAke0R9JHtiYXNlX2JpbmRpcn0vJGFwcAorICAgICAgICBkb25lCisgICAgZmkKK30KKworIyBOb3RlIHRoYXQgd2UgcGFja2FnZSB0aGUgdXBkYXRlLWFsdGVybmF0aXZlcyBuYW1lLgorIworUEFDS0FHRVMgPSsgIiR7UE59LXJ1bi1wYXJ0cyIKK0ZJTEVTXyR7UE59LXJ1bi1wYXJ0cyA9ICIke2Jhc2VfYmluZGlyfS9ydW4tcGFydHMuZGViaWFudXRpbHMiCisKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1ydW4tcGFydHMiCisKKworQUxURVJOQVRJVkVfUFJJT1JJVFk9IjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImFkZC1zaGVsbCBpbnN0YWxsa2VybmVsIHJlbW92ZS1zaGVsbCBzYXZlbG9nIHRlbXBmaWxlIHdoaWNoIgorQUxURVJOQVRJVkVfJHtQTn0tcnVuLXBhcnRzID0gInJ1bi1wYXJ0cyIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2FkZC1zaGVsbF09IiR7c2JpbmRpcn0vYWRkLXNoZWxsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2luc3RhbGxrZXJuZWxdPSIke3NiaW5kaXJ9L2luc3RhbGxrZXJuZWwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcmVtb3ZlLXNoZWxsXT0iJHtzYmluZGlyfS9yZW1vdmUtc2hlbGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcnVuLXBhcnRzXT0iJHtiYXNlX2JpbmRpcn0vcnVuLXBhcnRzIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3NhdmVsb2ddPSIke2JpbmRpcn0vc2F2ZWxvZyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt0ZW1wZmlsZV09IiR7YmFzZV9iaW5kaXJ9L3RlbXBmaWxlIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3doaWNoXT0iJHtiaW5kaXJ9L3doaWNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9lbmNoYW50L2VuY2hhbnRfMS42LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2VuY2hhbnQvZW5jaGFudF8xLjYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2E0NzYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9lbmNoYW50L2VuY2hhbnRfMS42LjAuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJFbmNoYW50IFNwZWxsIGNoZWNrZXIgQVBJIExpYnJhcnkiCitTRUNUSU9OID0gImxpYnMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmFiaXNvdXJjZS5jb20vcHJvamVjdHMvZW5jaGFudC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5hYmlzb3VyY2UuY29tL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1FbmNoYW50IgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT1kZmNiYWJmOTEzMWRjOWE5NWZlYmVmNjc1M2EyOTU4YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZW5jaGFudC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjk7bWQ1PThkODgxY2FhMWQzNzUyMzU2N2UxZDhmNzI2Njc1YTE4IgorCitERVBFTkRTID0gImFzcGVsbCBnbGliLTIuMCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BSID0gInIzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuYWJpc291cmNlLmNvbS9kb3dubG9hZHMvZW5jaGFudC8ke1BWfS9lbmNoYW50LSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImRlMTEwMTFhZmY4MDFkYzYxMDQyODI4MDQxZmI1OWM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJmYWM5ZTdiZTdlOTQyNGIyYzU1NzBkOGFmZmU1NjhkYjM5Zjc1NzJjMTBlZDQ4ZDRlMTNjZGRmMDNmNzA5N2YiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtYXNwZWxsLXByZWZpeD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IFwKKwkJLS1lbmFibGUtYXNwZWxsIGJyX2N2X2JpbnJlbG9jPW5vIFwKKwkJIgorCitleHBvcnQgQ1hYRkxBR1MgKz0gIiAtTCR7U1RBR0lOR19MSUJESVJ9IC1sc3RkYysrICIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9ICR7bGliZGlyfS8qJHtTT0xJQlN9ICR7ZGF0YWRpcn0vJHtCUE59ICR7bGliZGlyfS8ke0JQTn0vKi5zbyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qe1NPTElCU0RFVn0gJHtsaWJkaXJ9LyR7QlBOfS8qLmxhIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59LyouYSIKKworUkRFUEVORFNfJHtQTn0gKz0gImFzcGVsbCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2ZpbGVzL3B0ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2ZpbGVzL3B0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MjM2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZmlsZXMvcHRlc3QucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorQWRkIGluc3RhbGwtcHRlc3QgcnVsZXMuCisKK1NpZ25lZC1vZmYtYnk6IEpvc2VwIFB1aWdkZW1vbnQgPGpvc2VwLnB1aWdkZW1vbnRAZW5lYS5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLXVyIGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQorLS0tIGEvTWFrZWZpbGUuYW0JMjAxMS0wOC0xNiAxMDoxMzoxMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBiL01ha2VmaWxlLmFtCTIwMTMtMDQtMTIgMTg6MDI6MTYuNDczNzE1ODczICswMjAwCitAQCAtMzEsMyArMzEsOCBAQAorIAlkPWBkYXRlICcrJWQvJW0vJVknYDsgXAorIAlzZWQgJ3N8L1wqQERJU1RfREFURUBcKi98IiciJCRkIicifCcgJChzcmNkaXIpL3NyYy92ZXJzaW9uLmMgPiBcCisgCQkkKGRpc3RkaXIpL3NyYy92ZXJzaW9uLmMKKysKKytpbnN0YWxsLXB0ZXN0OgorKwlAZm9yIHN1YmRpciBpbiAkKFNVQkRJUlMpOyBkbyBcCisrCQkkKE1BS0UpIC1DICQkc3ViZGlyIERFU1RESVI9JChERVNURElSKS8kJHN1YmRpciAkQDsgXAorKwlkb25lCitkaWZmIC11ciBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCTIwMTEtMTEtMTEgMTk6Mzk6NDIuMDAwMDAwMDAwICswMTAwCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQkyMDEzLTA0LTEyIDE4OjMwOjU3LjA2NjMwMTAzNyArMDIwMAorQEAgLTEzMiw0ICsxMzIsMTQgQEAKKyBkdGRlbF9MREFERCA9IC4uL3NyYy9saWJnZGJtLmxhIC4uL2NvbXBhdC9saWJnZGJtX2NvbXBhdC5sYQorIGRfY3JlYXRfY2VfTERBREQgPSAuLi9zcmMvbGliZ2RibS5sYSAuLi9jb21wYXQvbGliZ2RibV9jb21wYXQubGEKKyAKKytidWlsZHRlc3RzOiAkKGNoZWNrX1BST0dSQU1TKSAkKFRFU1RTVUlURSkKKyAKKytpbnN0YWxsLXB0ZXN0OiAkKGNoZWNrX1BST0dSQU1TKSAkKFRFU1RTVUlURSkKKysJQCQoSU5TVEFMTCkgLWQgJChERVNURElSKQorKwlAZm9yIGZpbGUgaW4gJF47IGRvIFwKKysJCWlmIFsgLXggLmxpYnMvJCRmaWxlIF07IHRoZW4gXAorKwkJCSQoSU5TVEFMTF9QUk9HUkFNKSAubGlicy8kJGZpbGUgJChERVNURElSKS8kJGZpbGU7IFwKKysJCWVsc2UgXAorKwkJCSQoSU5TVEFMTF9QUk9HUkFNKSAkJGZpbGUgJChERVNURElSKSA7IFwKKysJCWZpIFwKKysJZG9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2ZpbGVzL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9maWxlcy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjE1ZGE4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9maWxlcy9ydW4tcHRlc3QKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vc2gKKyMKKyMgVGhpcyBzY3JpcHQgaXMgdXNlZCB0byBydW4gdGhlIGdtZGIgdGVzdCBzdWl0ZQorCitjZCB0ZXN0cworCisuL3Rlc3RzdWl0ZSBBVVRPVEVTVF9QQVRIPSRQV0QgYWJzX2J1aWxkZGlyPSRQV0QgQ09NUEFUPTEgfCBzZWQgJ3MvXlteMC05XSpcKFswLTldXCtcKTogXCguKlwpXChva1x8cGFzc1x8c2tpcHBlZFx8ZmFpbFx8RkFJTEVEXClcKC4qXCkkL1wzOiBcMiBcNC87cy8gXCsvIC9nO3MvXm9rL1BBU1MvO3MvXnNraXBwZWQvU0tJUC87cy9eZmFpbC9GQUlMLztzL15GQUlMRUQvRkFJTC8nCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibS0xLjguMy9sZGZsYWdzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2NiNDNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitPYmV5IExERkxBR1MKKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2xkIHZlcnNpb25dCisKKy0tLSBnZGJtLTEuOC4zLm9yaWcvTWFrZWZpbGUuaW4KKysrKyBnZGJtLTEuOC4zL01ha2VmaWxlLmluCitAQCAtMTU2LDEyICsxNTYsMTIgQEAgaW5zdGFsbC1jb21wYXQ6CisKKyBsaWJnZGJtLmxhOiAkKExPQkpTKSBnZGJtLmgKKwlybSAtZiBsaWJnZGJtLmxhCistCSQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgLW8gbGliZ2RibS5sYSAtcnBhdGggJChsaWJkaXIpIFwKKysJJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENDKSAkKExERkxBR1MpIC1vIGxpYmdkYm0ubGEgLXJwYXRoICQobGliZGlyKSBcCisJCS12ZXJzaW9uLWluZm8gJChTSExJQl9WRVIpICQoTE9CSlMpCisKKyBsaWJnZGJtX2NvbXBhdC5sYTogJChDX0xPQkpTKSBnZGJtLmgKKwlybSAtZiBsaWJnZGJtX2NvbXBhdC5sYQorLQkkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpIC1vIGxpYmdkYm1fY29tcGF0LmxhIC1ycGF0aCAkKGxpYmRpcikgXAorKwkkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpICQoTERGTEFHUykgLW8gbGliZ2RibV9jb21wYXQubGEgLXJwYXRoICQobGliZGlyKSBcCisJCS12ZXJzaW9uLWluZm8gJChTSExJQl9WRVIpICQoQ19MT0JKUykKKworIGdkYm0uaDoJZ2RibS5wcm90byBnZGJtZXJybm8uaCBnZGJtLnByb3RvMgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbGlidG9vbC1tb2RlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbGlidG9vbC1tb2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmOWQwNGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibS0xLjguMy9saWJ0b29sLW1vZGUucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBnZGJtLTEuOC4zL01ha2VmaWxlLmluLm9yaWcJMjAwNi0wMi0xNiAxNToxNzoyNS4wMDAwMDAwMDAgKzAwMDAKKysrKyBnZGJtLTEuOC4zL01ha2VmaWxlLmluCTIwMDYtMDItMTYgMTU6MTg6MDguMDAwMDAwMDAwICswMDAwCitAQCAtMTMxLDcgKzEzMSw3IEBACisgCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoREVTVERJUikkKGxpYmRpcikgXAorIAkJJChERVNURElSKSQoaW5jbHVkZWRpcikgJChERVNURElSKSQobWFuM2RpcikgXAorIAkJJChERVNURElSKSQoaW5mb2RpcikKKy0JJChMSUJUT09MKSAkKElOU1RBTEwpIC1jIGxpYmdkYm0ubGEgJChERVNURElSKSQobGliZGlyKS9saWJnZGJtLmxhCisrCSQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAtYyBsaWJnZGJtLmxhICQoREVTVERJUikkKGxpYmRpcikvbGliZ2RibS5sYQorIAkkKElOU1RBTExfREFUQSkgZ2RibS5oIFwKKyAJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpL2dkYm0uaAorIAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2dkYm0uMyBcCitAQCAtMTQyLDcgKzE0Miw3IEBACisgaW5zdGFsbC1jb21wYXQ6CisgCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoREVTVERJUikkKGxpYmRpcikgXAorIAkJJChERVNURElSKSQoaW5jbHVkZWRpcikKKy0JJChMSUJUT09MKSAkKElOU1RBTEwpIC1jIGxpYmdkYm1fY29tcGF0LmxhIFwKKysJJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpIC1jIGxpYmdkYm1fY29tcGF0LmxhIFwKKyAJCSQoREVTVERJUikkKGxpYmRpcikvbGliZ2RibV9jb21wYXQubGEKKyAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9kYm0uaCBcCisgCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKS9kYm0uaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbWFrZWZpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibS0xLjguMy9tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjkxNDVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSw2MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3Lm1uLWxvZ2lzdGlrLmRlL3Vuc3VwcG9ydGVkL3B4YTI1MC9wYXRjaGVyCisjCisKKy0tLSBnZGJtLTEuOC4zL01ha2VmaWxlLmlufm1ha2VmaWxlCisrKysgZ2RibS0xLjguMy9NYWtlZmlsZS5pbgorQEAgLTIyLDYgKzIyLDcgQEAKKyBURVhJMkRWSSA9IHRleGkyZHZpCisgCisgREVGUyA9CisrREVTVERJUiA9CisgCisgIyBXaGVyZSB0aGUgc3lzdGVtIFtuXWRibSByb3V0aW5lcyBhcmUuLi4KKyBMSUJTID0gQExJQlNAIC1sYworQEAgLTEyNywyNiArMTI4LDI2IEBACisgcHJvZ3M6ICQoUFJPR1MpCisgCisgaW5zdGFsbDogbGliZ2RibS5sYSBnZGJtLmggZ2RibS5pbmZvCistCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoSU5TVEFMTF9ST09UKSQobGliZGlyKSBcCistCQkkKElOU1RBTExfUk9PVCkkKGluY2x1ZGVkaXIpICQoSU5TVEFMTF9ST09UKSQobWFuM2RpcikgXAorLQkJJChJTlNUQUxMX1JPT1QpJChpbmZvZGlyKQorLQkkKExJQlRPT0wpICQoSU5TVEFMTCkgLWMgbGliZ2RibS5sYSAkKElOU1RBTExfUk9PVCkkKGxpYmRpcikvbGliZ2RibS5sYQorLQkkKElOU1RBTExfREFUQSkgLW8gJChCSU5PV04pIC1nICQoQklOR1JQKSBnZGJtLmggXAorLQkJJChJTlNUQUxMX1JPT1QpJChpbmNsdWRlZGlyKS9nZGJtLmgKKy0JJChJTlNUQUxMX0RBVEEpIC1vICQoQklOT1dOKSAtZyAkKEJJTkdSUCkgJChzcmNkaXIpL2dkYm0uMyBcCistCQkkKElOU1RBTExfUk9PVCkkKG1hbjNkaXIpL2dkYm0uMworLQkkKElOU1RBTExfREFUQSkgLW8gJChCSU5PV04pIC1nICQoQklOR1JQKSAkKHNyY2RpcikvZ2RibS5pbmZvIFwKKy0JCSQoSU5TVEFMTF9ST09UKSQoaW5mb2RpcikvZ2RibS5pbmZvCisrCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoREVTVERJUikkKGxpYmRpcikgXAorKwkJJChERVNURElSKSQoaW5jbHVkZWRpcikgJChERVNURElSKSQobWFuM2RpcikgXAorKwkJJChERVNURElSKSQoaW5mb2RpcikKKysJJChMSUJUT09MKSAkKElOU1RBTEwpIC1jIGxpYmdkYm0ubGEgJChERVNURElSKSQobGliZGlyKS9saWJnZGJtLmxhCisrCSQoSU5TVEFMTF9EQVRBKSBnZGJtLmggXAorKwkJJChERVNURElSKSQoaW5jbHVkZWRpcikvZ2RibS5oCisrCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZ2RibS4zIFwKKysJCSQoREVTVERJUikkKG1hbjNkaXIpL2dkYm0uMworKwkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2dkYm0uaW5mbyBcCisrCQkkKERFU1RESVIpJChpbmZvZGlyKS9nZGJtLmluZm8KKyAKKyBpbnN0YWxsLWNvbXBhdDoKKy0JJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChJTlNUQUxMX1JPT1QpJChsaWJkaXIpIFwKKy0JCSQoSU5TVEFMTF9ST09UKSQoaW5jbHVkZWRpcikKKysJJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKSQobGliZGlyKSBcCisrCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKQorIAkkKExJQlRPT0wpICQoSU5TVEFMTCkgLWMgbGliZ2RibV9jb21wYXQubGEgXAorLQkJJChJTlNUQUxMX1JPT1QpJChsaWJkaXIpL2xpYmdkYm1fY29tcGF0LmxhCistCSQoSU5TVEFMTF9EQVRBKSAtbyAkKEJJTk9XTikgLWcgJChCSU5HUlApICQoc3JjZGlyKS9kYm0uaCBcCistCQkkKElOU1RBTExfUk9PVCkkKGluY2x1ZGVkaXIpL2RibS5oCistCSQoSU5TVEFMTF9EQVRBKSAtbyAkKEJJTk9XTikgLWcgJChCSU5HUlApICQoc3JjZGlyKS9uZGJtLmggXAorLQkJJChJTlNUQUxMX1JPT1QpJChpbmNsdWRlZGlyKS9uZGJtLmgKKysJCSQoREVTVERJUikkKGxpYmRpcikvbGliZ2RibV9jb21wYXQubGEKKysJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9kYm0uaCBcCisrCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKS9kYm0uaAorKwkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL25kYm0uaCBcCisrCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKS9uZGJtLmgKKyAKKyAjbGliZ2RibS5hOiAkKE9CSlMpIGdkYm0uaAorICMJcm0gLWYgbGliZ2RibS5hCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibV8xLjExLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGY4YzViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS4xMS5iYgpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIktleS92YWx1ZSBkYXRhYmFzZSBsaWJyYXJ5IHdpdGggZXh0ZW5zaWJsZSBoYXNoaW5nIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dkYm0vIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI0MWRhMWI5ZmU0MmU2NDJjYmIyYzI0ZDVlMGM0ZDI0IgorCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nZGJtL2dkYm0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9wdGVzdC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzJjODMyNjgwY2YwOTk5Y2FlZGJlNWIyNjVjOGMxYmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGQ5MTJmNDRmMDVkMGIxNWE0YTVkOTZhNzZmODUyZTkwNWQwNTFiYjg4MDIyZmNkZmQ5OGI0M2JlMDkzZTNjMyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIGxpYl9wYWNrYWdlIHB0ZXN0CisKKyMgTmVlZGVkIGZvciBkYm0gcHl0aG9uIG1vZHVsZQorRVhUUkFfT0VDT05GID0gIi1lbmFibGUtbGliZ2RibS1jb21wYXQiCisKKyMgU3RvcCBwcmVzZW5jZSBvZiBkYm0vbmJkbSBvbiB0aGUgaG9zdCBjb250YW1pbmF0aW5nIGJ1aWxkcworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2xpYl9uZGJtX21haW49bm8gYWNfY3ZfbGliX2RibV9tYWluPW5vIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAjIENyZWF0ZSBhIHN5bWxpbmsgdG8gbmRibS5oIGFuZCBnZGJtLmggaW4gaW5jbHVkZS9nZGJtIHRvIGxldCBvdGhlciBwYWNrYWdlcyB0byBmaW5kCisgICAgIyB0aGVzZSBoZWFkZXJzCisgICAgaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfS9nZGJtCisgICAgbG4gLXNmIC4uL25kYm0uaCAke0R9LyR7aW5jbHVkZWRpcn0vZ2RibS9uZGJtLmgKKyAgICBsbiAtc2YgLi4vZ2RibS5oICR7RH0vJHtpbmNsdWRlZGlyfS9nZGJtL2dkYm0uaAorfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiZGlmZnV0aWxzIgorCitkb19jb21waWxlX3B0ZXN0KCkgeworICAgIG9lX3J1bm1ha2UgLUMgdGVzdHMgYnVpbGR0ZXN0cworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tY29tcGF0IFwKKyAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59LWNvbXBhdCA9ICIke2xpYmRpcn0vbGliZ2RibV9jb21wYXQke1NPTElCU30gXAorICAgICAgICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS44LjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibV8xLjguMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjAxYjZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS44LjMuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJLZXkvdmFsdWUgZGF0YWJhc2UgbGlicmFyeSB3aXRoIGV4dGVuc2libGUgaGFzaGluZyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nZGJtLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDhlMjBlZWNlMjE0ZGY4ZWY5NTNlZDU4NTc4NjIxNTAiCisKK1BSID0gInI0IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2RibS9nZGJtLSR7UFZ9LnRhci5neiBcCisJICAgZmlsZTovL21ha2VmaWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnRvb2wtbW9kZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sZGZsYWdzLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWQxYjFkNWMwMjQ1YjFjMDBhZmY5MmRhNzUxZTlhYTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2MzNDAzMzhhMmUyOGI0MDA1OGFiOWViNTM1NGEyMWQ1M2Y4OGExNTgyZWEyMWJhMGJiMTg1YzM3YTI4MWRjOSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9L2dkYm0KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9kYm0uaCAke0R9JHtpbmNsdWRlZGlyfS8KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9uZGJtLmggJHtEfSR7aW5jbHVkZWRpcn0vCisgICAgIyBDcmVhdGUgYSBzeW1saW5rIHRvIG5kYm0uaCBhbmQgZ2RibS5oIGluIGluY2x1ZGUvZ2RibSB0byBsZXQgb3RoZXIgcGFja2FnZXMgdG8gZmluZAorICAgICMgdGhlc2UgaGVhZGVycworICAgIGxuIC1zZiAuLi9uZGJtLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2dkYm0vbmRibS5oCisgICAgbG4gLXNmIC4uL2dkYm0uaCAke0R9LyR7aW5jbHVkZWRpcn0vZ2RibS9nZGJtLmgKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC00LjIuMS9kaXNhYmxlLXN0ZGMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZGlzYWJsZS1zdGRjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZWNiMWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZGlzYWJsZS1zdGRjLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1RoaXMgcGF0Y2ggd2FzIHJlbW92ZWQgaW4gZjE4MWM2Y2U4YjMgd2hlbiBnbXAgNC4yLjEgd2FzIG1pc3Rha2VubHkKK2Ryb3BwZWQuCisKK1Vwc3RyZWFtIGlzIG5vdCBpbnRlcmVzdGVkIGluIHBhdGNoZXMgZm9yIGFuY2llbnQgdmVyc2lvbnMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKworIyAiZXh0ZXJuIGlubGluZSIgaW4gdHJhZGl0aW9uYWwgZ2NjIG1lYW5zIHRoYXQgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSAKKyMgaW5saW5lZCB3aGVyZXZlciBpdCdzIHNlZW4sIHdoaWxlIGluIEM5OSwgImV4dGVybiBpbmxpbmUiIG1lYW5zIHRoYXQgaQorIyB0aGUgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgaW5saW5lZCB3aGVyZSB0aGUgaW5saW5lIGRlZmluaXRpb24gaXMgCisjIHNlZW4gd2hpbGUgaW4gb3RoZXIgcGxhY2VzIGl0J3Mgbm90IGlubGluZWQ6CisjIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MvMjAwNi0xMS9tc2cwMDAwNi5odG1sCisjCisjIGdtcCBjaGVja3MgIi0tc3RkPWdudTk5IiB0byB1c2UgQzk5IGNvbnZlbnRpb24gaG93ZXZlciBpdCBpbnRlcm5hbGx5IAorIyBkZWZpbmVzIHNvbWUgImV4dGVybiBpbmxpbmUiIGZ1bmN0aW9ucyBpbiBnbXAuaCwgd2hpY2ggaXMgaW5jbHVkZWQKKyMgYnkgbWFpbmx5IC5jIGZpbGVzIGFuZCBmaW5hbGx5IGxlYWQgYSBmbG9vZCBvZiByZWRlZmluaXRpb24gZnVuY3Rpb24KKyMgZXJyb3JzIHdoZW4gbGlua2luZyBvYmplY3RzIHRvZ2V0aGVyLgorIworIyBTbyBkaXNhYmxlIEM5OS9BTlNJIGRldGVjdGlvbiB0byBzdGljayB0byB0cmFuZGl0aW9uYWwgZ2NjIGJlaGF2aW9yCisjCisjIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wOC0xMworIworIyAodGhpcyBwYXRjaCBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MispCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IDQ1MGNjOTIuLmFhYjBiNTkgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTE4NjksOSArMTg2OSw3IEBAIEFDX1NVQlNUKERFRk5fTE9OR19MT05HX0xJTUIpCisgCisgIyBUaGUgQyBjb21waWxlciBhbmQgcHJlcHJvY2Vzc29yLCBwdXQgaW50byBBTlNJIG1vZGUgaWYgcG9zc2libGUuCisgQUNfUFJPR19DQworLUFDX1BST0dfQ0NfU1REQworIEFDX1BST0dfQ1BQCistR01QX0hfQU5TSQorIAorIAorICMgVGhlIEMgY29tcGlsZXIgb24gdGhlIGJ1aWxkIHN5c3RlbSwgYW5kIGFzc29jaWF0ZWQgdGVzdHMuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZ21wX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC00LjIuMS9nbXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYWVkMDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZ21wX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDU2IEBACithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5pbjoyMjQwOiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCit8IE1ha2VmaWxlLmFtOjI4OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzAyCisKKworVGhpcyBwYXRjaCB3YXMgcmVtb3ZlZCBpbiBmMTgxYzZjZThiMyB3aGVuIGdtcCA0LjIuMSB3YXMgbWlzdGFrZW5seQorZHJvcHBlZC4KKworVXBzdHJlYW0gaXMgbm90IGludGVyZXN0ZWQgaW4gcGF0Y2hlcyBmb3IgYW5jaWVudCB2ZXJzaW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorCisKK0luZGV4OiBnbXAtNC4yLjEvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ21wLTQuMi4xLm9yaWcvY29uZmlndXJlLmluCisrKysgZ21wLTQuMi4xL2NvbmZpZ3VyZS5pbgorQEAgLTY3LDcgKzY3LDcgQEAgZG5sCisgZG5sICBOb3RlIHRoYXQgdGhlcmUncyBhIGNvcHkgb2YgdGhlc2Ugb3B0aW9ucyBpbiB0aGUgdG9wLWxldmVsIE1ha2VmaWxlLmFtLAorIGRubCAgc28gdXBkYXRlIHRoZXJlIHRvbyBpZiBjaGFuZ2luZyBhbnl0aGluZy4KKyBkbmwKKy1BTV9JTklUX0FVVE9NQUtFKFsxLjggZ251IG5vLWRlcGVuZGVuY2llcyAkKHRvcF9idWlsZGRpcikvYW5zaTJrbnJdKQorK0FNX0lOSVRfQVVUT01BS0UoWzEuOCBnbnUgbm8tZGVwZW5kZW5jaWVzXSkKKyBBTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oOmNvbmZpZy5pbikKKyBBTV9NQUlOVEFJTkVSX01PREUKKyAKK0BAIC0yMDIyLDkgKzIwMjIsNiBAQCBmaQorIGVjaG8gIiAgICAgIE1QTl9QQVRIPVwiJHBhdGhcIiIKKyAKKyAKKy0jIEF1dG9tYWtlIGFuc2kya25yIHN1cHBvcnQuCistQU1fQ19QUk9UT1RZUEVTCistCisgR01QX1BST0dfQVIKKyBHTVBfUFJPR19OTQorIAorSW5kZXg6IGdtcC00LjIuMS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdtcC00LjIuMS5vcmlnL01ha2VmaWxlLmFtCisrKysgZ21wLTQuMi4xL01ha2VmaWxlLmFtCitAQCAtMjcsNyArMjcsNyBAQAorICMgTWFrZWZpbGVzIGluIHN1YmRpcmVjdG9yaWVzLCBidXQgaGVyZSB3ZSBtdXN0IG9taXQgaXQgc28gYXV0b21ha2UgZ2l2ZXMKKyAjIHRoZSBhY3R1YWwgYW5zaTJrbnIgYnVpbGQgcnVsZSwgbm90ICJjZCAkKHRvcF9idWlsZGRpcikgJiYgbWFrZSBhbnNpMmtuciIuCisgIworLUFVVE9NQUtFX09QVElPTlMgPSAxLjggZ251IG5vLWRlcGVuZGVuY2llcyBhbnNpMmtucgorK0FVVE9NQUtFX09QVElPTlMgPSAxLjggZ251IG5vLWRlcGVuZGVuY2llcworIAorIAorICMgTGlidG9vbCAtdmVyc2lvbi1pbmZvIGZvciBsaWJnbXAubGEgYW5kIGxpYm1wLmxhLiAgU2VlICJWZXJzaW9uaW5nIiBpbiB0aGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9hbWQ2NC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9hbWQ2NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjRkMTJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL2FtZDY0LnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ21wLTUuMC4zL2xvbmdsb25nLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbXAtNS4wLjMub3JpZy9sb25nbG9uZy5oCisrKysgZ21wLTUuMC4zL2xvbmdsb25nLmgKK0BAIC05OTQsOCArOTk0LDEwIEBAIGV4dGVybiBVV3R5cGUgX19NUE4odWRpdl9xcm5uZCkgX1BST1RPICgKKyAgICBjb3VudCBpcyBvbmx5IGFuIGludC4gKi8KKyAjZGVmaW5lIGNvdW50X3RyYWlsaW5nX3plcm9zKGNvdW50LCB4KQkJCQkJXAorICAgZG8gewkJCQkJCQkJCVwKKysgICAgVURJdHlwZSBfX2NidG1wOwkJCQkJCQlcCisgICAgIEFTU0VSVCAoKHgpICE9IDApOwkJCQkJCQlcCistICAgIF9fYXNtX18gKCJic2ZxICUxLCVxMCIgOiAiPXIiIChjb3VudCkgOiAicm0iICgoVURJdHlwZSkoeCkpKTsJXAorKyAgICBfX2FzbV9fICgiYnNmcSAlMSwlMCIgOiAiPXIiIChfX2NidG1wKSA6ICJybSIgKChVREl0eXBlKSh4KSkpOwlcCisrICAgIChjb3VudCkgPSBfX2NidG1wOwkJCQkJCQlcCisgICB9IHdoaWxlICgwKQorICNlbmRpZiAvKiB4ODZfNjQgKi8KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9hcHBlbmRfdXNlcl9wcm92aWRlZF9mbGFncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9hcHBlbmRfdXNlcl9wcm92aWRlZF9mbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTEzODZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL2FwcGVuZF91c2VyX3Byb3ZpZGVkX2ZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitBcHBlbmQgdGhlIHVzZXIgcHJvdmlkZWQgZmxhZ3MgdG8gdGhlIGF1dG8tZGV0ZWN0ZWQgb25lcy4KKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorCitJbmRleDogZ21wLTUuMS4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdtcC01LjEuMS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDE0LTAyLTExIDE1OjA1OjQ0LjkyNTIwMjQwMyArMDIwMAorKysrIGdtcC01LjEuMS9jb25maWd1cmUuYWMJMjAxNC0wMi0xMSAxNToxOTowMy45MTg1MTEzOTggKzAyMDAKK0BAIC0xNzQ1LDggKzE3NDUsMTIgQEAKKyBFT0YKKyAKKyAKKy10ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CistdGVzdF9DUFBGTEFHUz0ke0NQUEZMQUdTK3NldH0KKyt0ZXN0X0NGTEFHUz0KKyt0ZXN0X0NQUEZMQUdTPQorKworK3VzZXJfQ0ZMQUdTPSRDRkxBR1MKKyt1c2VyX0NQUEZMQUdTPSRDUFBGTEFHUworK3VzZXJfQ1hYRkxBR1M9JENYWEZMQUdTCisgCisgZm9yIGFiaSBpbiAkYWJpbGlzdDsgZG8KKyAgIGFiaV9sYXN0PSIkYWJpIgorQEAgLTIxNzUsNyArMjE3OSw3IEBACisgd2FudF9jeHg9bm8KKyBBQ19QUk9HX0NYWAorIGlmIHRlc3QgJGVuYWJsZV9jeHggIT0gbm87IHRoZW4KKy0gIHRlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9CisrICB0ZXN0X0NYWEZMQUdTPQorIAorICAgZWNobyAiQ1hYRkxBR1MgY2hvc2VuIGJ5IGF1dG9jb25mOiAkQ1hYRkxBR1MiID4mQVNfTUVTU0FHRV9MT0dfRkQoKQorICAgY3h4ZmxhZ3NfYWNfcHJvZ19jeHg9JENYWEZMQUdTCitAQCAtMjIwMiw3ICsyMjA2LDcgQEAKKyAgICMgQXV0b21ha2UgaW5jbHVkZXMgJENQUEZMQUdTIGluIGEgQysrIGNvbXBpbGUsIHNvIHdlIGRvIHRoZSBzYW1lIGhlcmUuCisgICAjCisgICBmb3IgY3h4ZmxhZ3NfY2hvaWNlIGluICRjeHhmbGFnc19saXN0OyBkbworLSAgICBldmFsIENYWEZMQUdTPVwiXCRjeHhmbGFnc18kY3h4ZmxhZ3NfY2hvaWNlXCIKKysgICAgZXZhbCBDWFhGTEFHUz1cIlwkY3h4ZmxhZ3NfJGN4eGZsYWdzX2Nob2ljZSAkdXNlcl9DWFhGTEFHU1wiCisgICAgIEdNUF9QUk9HX0NYWF9XT1JLUygkQ1hYICRDUFBGTEFHUyAkQ1hYRkxBR1MsCisgICAgICAgW3dhbnRfY3h4PXllcworICAgICAgIGJyZWFrXSkKK0BAIC0yMjkyLDYgKzIyOTYsOCBAQAorICMgIGRvbmUKKyBmaQorIAorK0NGTEFHUz0iJENGTEFHUyAkdXNlcl9DRkxBR1MiCisrQ1BQRkxBR1M9IiRDUFBGTEFHUyAkdXNlcl9DUFBGTEFHUyIKKyAKKyBjYXQgPiZBU19NRVNTQUdFX0xPR19GRCgpIDw8RU9GCisgRGVjaWRlZDoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9jb25maWd1cmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0OWRhM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMjIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVXBkYXRlZCB0byBhcHBseSB0byBnbXAtNS4xLjAKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKworLS0tCisgYWNpbmNsdWRlLm00IHwgMzIgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KKyBjb25maWd1cmUuYWMgfCAyNiArKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9hY2luY2x1ZGUubTQgYi9hY2luY2x1ZGUubTQKK2luZGV4IDIyNzcxMmEuLjE5OWFhNmYgMTAwNjQ0CistLS0gYS9hY2luY2x1ZGUubTQKKysrKyBiL2FjaW5jbHVkZS5tNAorQEAgLTQwLDI5ICs0MCwyOSBAQCBkbmwgICAgYV9vdXQuZXhlIC0gT3BlblZNUyBERUMgQyBjYWxsZWQgdmlhIEdOViB3cmFwcGVyIChnbnYuc291cmNlZm9yZ2UubmV0KQorIGRubCAgICBjb25mdGVzdC5leGUgLSB2YXJpb3VzIERPUyBjb21waWxlcnMKKyAKKyAKKy1kZWZpbmUoSUE2NF9QQVRURVJOLAorK2RlZmluZShbSUE2NF9QQVRURVJOXSwKKyBbW2lhNjQqLSotKiB8IGl0YW5pdW0tKi0qIHwgaXRhbml1bTItKi0qXV0pCisgCisgZG5sICBOZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIG1hdGNoIG02ODExLCBtNjgxMiwgbTY4aGMxMSBhbmQgbTY4aGMxMiwgYWxsCisgZG5sICBvZiB3aGljaCBjb25maWcuc3ViIGFjY2VwdHMuICAoVGhvdWdoIG5vbmUgb2Ygd2hpY2ggYXJlIGxpa2VseSB0byB3b3JrCisgZG5sICB3aXRoIEdNUC4pCisgZG5sCistZGVmaW5lKE02OEtfUEFUVEVSTiwKKytkZWZpbmUoW002OEtfUEFUVEVSTl0sCisgW1ttNjhrLSotKiB8IG02OFswLTldWzAtOV1bMC05XS0qLSpdXSkKKyAKKy1kZWZpbmUoUE9XRVJQQzY0X1BBVFRFUk4sCisrZGVmaW5lKFtQT1dFUlBDNjRfUEFUVEVSTl0sCisgW1twb3dlcnBjNjQtKi0qIHwgcG93ZXJwYzY0bGUtKi0qIHwgcG93ZXJwYzYyMC0qLSogfCBwb3dlcnBjNjMwLSotKiB8IHBvd2VycGM5NzAtKi0qIHwgcG93ZXJbMy05XS0qLSpdXSkKKyAKKy1kZWZpbmUoUzM5MF9QQVRURVJOLAorK2RlZmluZShbUzM5MF9QQVRURVJOXSwKKyBbW3MzOTAtKi0qIHwgejkwMGVzYS0qLSogfCB6OTkwZXNhLSotKiB8IHo5ZXNhLSotKiB8IHoxMGVzYS0qLSogfCB6MTk2ZXNhLSotKl1dKQorIAorLWRlZmluZShTMzkwWF9QQVRURVJOLAorK2RlZmluZShbUzM5MFhfUEFUVEVSTl0sCisgW1tzMzkweC0qLSogfCB6OTAwLSotKiB8IHo5OTAtKi0qIHwgejktKi0qIHwgejEwLSotKiB8IHoxOTYtKi0qXV0pCisgCistZGVmaW5lKFg4Nl9QQVRURVJOLAorK2RlZmluZShbWDg2X1BBVFRFUk5dLAorIFtbaT84NiotKi0qIHwga1s1LThdKi0qLSogfCBwZW50aXVtKi0qLSogfCBhdGhsb24tKi0qIHwgdmlhYzMqLSotKiB8IGdlb2RlKi0qLSogfCBhdG9tLSotKl1dKQorIAorLWRlZmluZShYODZfNjRfUEFUVEVSTiwKKytkZWZpbmUoW1g4Nl82NF9QQVRURVJOXSwKKyBbW2F0aGxvbjY0LSotKiB8IGs4LSotKiB8IGsxMC0qLSogfCBib2JjYXQtKi0qIHwgamFndWFyLSotKiB8IGJ1bGxkb3plci0qLSogfCBwaWxlZHJpdmVyLSotKiB8IHN0ZWFtcm9sbGVyLSotKiB8IGV4Y2F2YXRvci0qLSogfCBwZW50aXVtNC0qLSogfCBhdG9tLSotKiB8IGNvcmUyLSotKiB8IGNvcmVpKi0qLSogfCB4ODZfNjQtKi0qIHwgbmFuby0qLSpdXSkKKyAKKyBkbmwgIEdNUF9GQVRfU1VGRklYKERTVFZBUiwgRElSRUNUT1JZKQorQEAgLTgwLDcgKzgwLDcgQEAgZG5sICAgICAgeDg2ICAgICAgICAgLT4gIHg4NgorIGRubCAgICAgIHg4Ni9rNiAgICAgIC0+ICBrNgorIGRubCAgICAgIHg4Ni9rNi9tbXggIC0+ICBrNl9tbXgKKyAKKy1kZWZpbmUoR01QX0ZBVF9TVUZGSVgsCisrZGVmaW5lKFtHTVBfRkFUX1NVRkZJWF0sCisgW1skMT1gZWNobyAkMiB8IHNlZCAtZSAnL1wvL3M6XlteL10qLzo6JyAtZSAnczpbXFwvXTpfOmcnYF1dKQorIAorIAorQEAgLTg5LDcgKzg5LDcgQEAgZG5sICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZG5sICBFbWl0IGNvZGUgdG8gcmVtb3ZlIGFueSBvY2N1cnJlbmNlIG9mIElURU0gZnJvbSAkTElTVFZBUi4gIElURU0gY2FuIGJlIGEKKyBkbmwgIHNoZWxsIGV4cHJlc3Npb24gbGlrZSAkZm9vIGlmIGRlc2lyZWQuCisgCistZGVmaW5lKEdNUF9SRU1PVkVfRlJPTV9MSVNULAorK2RlZmluZShbR01QX1JFTU9WRV9GUk9NX0xJU1RdLAorIFtyZW1vdmVfZnJvbV9saXN0X3RtcD0KKyBmb3IgcmVtb3ZlX2Zyb21fbGlzdF9pIGluICRbXVskMV07IGRvCisgICBpZiB0ZXN0ICRyZW1vdmVfZnJvbV9saXN0X2kgPSBbJDJdOyB0aGVuIDo7CitAQCAtMTA1LDEyICsxMDUsMTIgQEAgZG5sICBHTVBfU1RSSVBfUEFUSChzdWJkaXIpCisgZG5sICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZG5sICBTdHJpcCBlbnRyaWVzICovc3ViZGlyIGZyb20gJHBhdGggYW5kICRmYXRfcGF0aC4KKyAKKy1kZWZpbmUoR01QX1NUUklQX1BBVEgsCisrZGVmaW5lKFtHTVBfU1RSSVBfUEFUSF0sCisgW0dNUF9TVFJJUF9QQVRIX1ZBUihwYXRoLCBbJDFdKQorIEdNUF9TVFJJUF9QQVRIX1ZBUihmYXRfcGF0aCwgWyQxXSkKKyBdKQorIAorLWRlZmluZShHTVBfU1RSSVBfUEFUSF9WQVIsCisrZGVmaW5lKFtHTVBfU1RSSVBfUEFUSF9WQVJdLAorIFt0bXBfcGF0aD0KKyBmb3IgaSBpbiAkW11bJDFdOyBkbworICAgY2FzZSAkaSBpbgorQEAgLTEzMSw3ICsxMzEsNyBAQCBkbmwKKyBkbmwgIER1bW15IHZhbHVlIGZvciBHTVBfTElNQl9CSVRTIGlzIGVub3VnaAorIGRubCAgZm9yIGFsbCBjdXJyZW50IGNvbmZpZ3VyZS10aW1lIHVzZXMgb2YgZ21wLmguCisgCistZGVmaW5lKEdNUF9JTkNMVURFX0dNUF9ILAorK2RlZmluZShbR01QX0lOQ0xVREVfR01QX0hdLAorIFtbI2RlZmluZSBfX0dNUF9XSVRISU5fQ09ORklHVVJFIDEgICAvKiBpZ25vcmUgdGVtcGxhdGUgc3R1ZmYgKi8KKyAjZGVmaW5lIEdNUF9OQUlMX0JJVFMgJEdNUF9OQUlMX0JJVFMKKyAjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMTIzCitAQCAtMTQ2LDcgKzE0Niw3IEBAIGRubCAgRXhwYW5kIGF0IGF1dG9jb25mIHRpbWUgdG8gdGhlIHZhbHVlIG9mIGEgIiNkZWZpbmUgTkFNRSIgZnJvbSB0aGUgZ2l2ZW4KKyBkbmwgIEZJTEUuICBUaGUgcmVnZXhwcyBoZXJlIGFyZW4ndCB2ZXJ5IHJ1Z2dlZCwgYnV0IGFyZSBlbm91Z2ggZm9yIGdtcC4KKyBkbmwgIC9kZXYvbnVsbCBhcyBhIHBhcmFtZXRlciBwcmV2ZW50cyBhIGhhbmcgaWYgJDIgaXMgYWNjaWRlbnRhbGx5IG9taXR0ZWQuCisgCistZGVmaW5lKEdNUF9IRUFERVJfR0VUVkFMLAorK2RlZmluZShbR01QX0hFQURFUl9HRVRWQUxdLAorIFtwYXRzdWJzdChwYXRzdWJzdCgKKyBlc3lzY21kKFtncmVwICJeI2RlZmluZSAkMSAiICQyIC9kZXYvbnVsbCAyPi9kZXYvbnVsbF0pLAorIFteLiokMVsgCV0rXSxbXSksCitAQCAtMTYwLDcgKzE2MCw3IEBAIGRubCAgVGhlIGdtcCB2ZXJzaW9uIG51bWJlciwgZXh0cmFjdGVkIGZyb20gdGhlICNkZWZpbmVzIGluIGdtcC1oLmluIGF0CisgZG5sICBhdXRvY29uZiB0aW1lLiAgVHdvIGRpZ2l0cyBsaWtlIDMuMCBpZiBwYXRjaGxldmVsIDw9IDAsIG9yIHRocmVlIGRpZ2l0cworIGRubCAgbGlrZSAzLjAuMSBpZiBwYXRjaGxldmVsID4gMC4KKyAKKy1kZWZpbmUoR01QX1ZFUlNJT04sCisrZGVmaW5lKFtHTVBfVkVSU0lPTl0sCisgW0dNUF9IRUFERVJfR0VUVkFMKF9fR05VX01QX1ZFUlNJT04sZ21wLWguaW4pW11kbmwKKyAuR01QX0hFQURFUl9HRVRWQUwoX19HTlVfTVBfVkVSU0lPTl9NSU5PUixnbXAtaC5pbilbXWRubAorIC5HTVBfSEVBREVSX0dFVFZBTChfX0dOVV9NUF9WRVJTSU9OX1BBVENITEVWRUwsZ21wLWguaW4pXSkKK0BAIC0xNTI0LDcgKzE1MjQsOSBAQCBlc2FjCisgZWNobyBbImRlZmluZSg8Q09ORklHX1RPUF9TUkNESVI+LDxcYCR0bXAnPikiXSA+PiRnbXBfdG1wY29uZmlnbTQKKyAKKyAjIEFsbCBDUFVzIHVzZSBhc20tZGVmcy5tNAorLWVjaG8gWyJpbmNsdWRlXVsoQ09ORklHX1RPUF9TUkNESVJcYC9tcG4vYXNtLWRlZnMubTQnKSJdID4+JGdtcF90bXBjb25maWdtNGkKKytlY2hvIC1uIFsiaW5jbHVkZSgiXSA+PiRnbXBfdG1wY29uZmlnbTRpCisrZWNobyAtbiBbIkNPTkZJR19UT1BfU1JDRElSXGAvbXBuL2FzbS1kZWZzLm00JyJdID4+JGdtcF90bXBjb25maWdtNGkKKytlY2hvIFsiKSJdID4+JGdtcF90bXBjb25maWdtNGkKKyBdKQorIAorIAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNjRiMmM1MC4uZjA3YjgyMSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzksMTQgKzM5LDYgQEAgQUNfUkVWSVNJT04oJFJldmlzaW9uJCkKKyBBQ19QUkVSRVEoMi41OSkKKyBBQ19JTklUKEdOVSBNUCwgR01QX1ZFUlNJT04sIFtnbXAtYnVnc0BnbXBsaWIub3JnLCBzZWUgaHR0cHM6Ly9nbXBsaWIub3JnL21hbnVhbC9SZXBvcnRpbmctQnVncy5odG1sXSwgZ21wKQorIEFDX0NPTkZJR19TUkNESVIoZ21wLWltcGwuaCkKKy1tNF9wYXR0ZXJuX2ZvcmJpZChbXlsgXHRdKkdNUF9dKQorLW00X3BhdHRlcm5fYWxsb3coR01QX0xERkxBR1MpCistbTRfcGF0dGVybl9hbGxvdyhHTVBfTElNQl9CSVRTKQorLW00X3BhdHRlcm5fYWxsb3coR01QX01QQVJBTV9IX1NVR0dFU1QpCistbTRfcGF0dGVybl9hbGxvdyhHTVBfTkFJTF9CSVRTKQorLW00X3BhdHRlcm5fYWxsb3coR01QX05VTUJfQklUUykKKy1tNF9wYXR0ZXJuX2FsbG93KEdNUF9OT05TVERfQUJJKQorLW00X3BhdHRlcm5fYWxsb3coR01QX0NQVV9UWVBFKQorIAorICMgSWYgLS10YXJnZXQgaXMgbm90IHVzZWQgdGhlbiAkdGFyZ2V0X2FsaWFzIGlzIGVtcHR5LCBidXQgaWYgc2F5CisgIyAiLi9jb25maWd1cmUgYXRobG9uLXBjLWZyZWVic2QzLjUiIGlzIHVzZWQsIHRoZW4gYWxsIHRocmVlIG9mCitAQCAtMzQ4LDcgKzM0MCw3IEBAIEFIX1ZFUkJBVElNKFtIQVZFX0hPU1RfQ1BVXzFdLAorICMgQWZ0ZXIgR01QIHNwZWNpZmljIHNlYXJjaGVzIGFuZCB0ZXN0cywgdGhlIHN0YW5kYXJkIGF1dG9jb25mIEFDX1BST0dfQ0MgaXMKKyAjIGNhbGxlZC4gIFVzZXIgc2VsZWN0aW9ucyBvZiBDQyBldGMgYXJlIHJlc3BlY3RlZC4KKyAjCistIyBDYXJlIGlzIHRha2VuIG5vdCB0byB1c2UgbWFjcm9zIGxpa2UgQUNfVFJZX0NPTVBJTEUgZHVyaW5nIHRoZSBHTVAKKysjIENhcmUgaXMgdGFrZW4gbm90IHRvIHVzZSBtYWNyb3MgbGlrZSBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbXV0pXSxbXSxbXSkgZHVyaW5nIHRoZSBHTVAKKyAjIHByZS10ZXN0aW5nLCBzaW5jZSB0aGV5IG9mIGNvdXJzZSBkZXBlbmQgb24gQUNfUFJPR19DQywgYW5kIGFsc28gc29tZSBvZgorICMgdGhlbSBjYWNoZSB0aGVpciByZXN1bHRzLCB3aGljaCBpcyBub3Qgd2FudGVkLgorICMKK0BAIC00NDAsNyArNDMyLDcgQEAgYWJpbGlzdD0ic3RhbmRhcmQiCisgIyBGSVhNRTogV2UnZCBsaWtlIHRvIHByZWZlciBhbiBBTlNJIGNvbXBpbGVyLCBwZXJoYXBzIGJ5IHByZWZlcnJpbmcKKyAjIGM4OSBvdmVyIGNjIGhlcmUuICBCdXQgbm90ZSB0aGF0IG9uIEhQLVVYIGM4OSBwcm92aWRlcyBhIGNhc3RyYXRlZAorICMgZW52aXJvbm1lbnQsIGFuZCB3b3VsZCB3YW50IHRvIGJlIGV4Y2x1ZGVkIHNvbWVob3cuICBNYXliZQorLSMgQUNfUFJPR19DQ19TVERDIGFscmVhZHkgZG9lcyBlbm91Z2ggdG8gc3RpY2sgY2MgaW50byBBTlNJIG1vZGUgYW5kCisrIyAgYWxyZWFkeSBkb2VzIGVub3VnaCB0byBzdGljayBjYyBpbnRvIEFOU0kgbW9kZSBhbmQKKyAjIHdlIGRvbid0IG5lZWQgdG8gd29ycnkuCisgIworIGNjbGlzdD0iZ2NjIGNjIgorQEAgLTE4NDMsNyArMTgzNSw3IEBAIGVzYWMKKyBDRkxBR1Nfb3JfdW5zZXQ9JHtDRkxBR1MtJyh1bnNldCknfQorIENQUEZMQUdTX29yX3Vuc2V0PSR7Q1BQRkxBR1MtJyh1bnNldCknfQorIAorLWNhdCA+JkFDX0ZEX0NDIDw8RU9GCisrY2F0ID4mQVNfTUVTU0FHRV9MT0dfRkQoKSA8PEVPRgorIFVzZXI6CisgQUJJPSRBQkkKKyBDQz0kQ0MKK0BAIC0yMjY0LDcgKzIyNTYsNiBAQCBBQ19TVUJTVChERUZOX0xPTkdfTE9OR19MSU1CKQorIAorICMgVGhlIEMgY29tcGlsZXIgYW5kIHByZXByb2Nlc3NvciwgcHV0IGludG8gQU5TSSBtb2RlIGlmIHBvc3NpYmxlLgorIEFDX1BST0dfQ0MKKy1BQ19QUk9HX0NDX1NUREMKKyBBQ19QUk9HX0NQUAorIAorIAorQEAgLTIyODYsMTEgKzIyNzcsMTEgQEAgQUNfU1VCU1QoQ0NBUykKKyAKKyAjIFRoZSBDKysgY29tcGlsZXIsIGlmIGRlc2lyZWQuCisgd2FudF9jeHg9bm8KKytBQ19QUk9HX0NYWAorIGlmIHRlc3QgJGVuYWJsZV9jeHggIT0gbm87IHRoZW4KKyAgIHRlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9CistICBBQ19QUk9HX0NYWAorIAorLSAgZWNobyAiQ1hYRkxBR1MgY2hvc2VuIGJ5IGF1dG9jb25mOiAkQ1hYRkxBR1MiID4mQUNfRkRfQ0MKKysgIGVjaG8gIkNYWEZMQUdTIGNob3NlbiBieSBhdXRvY29uZjogJENYWEZMQUdTIiA+JkFTX01FU1NBR0VfTE9HX0ZEKCkKKyAgIGN4eGZsYWdzX2FjX3Byb2dfY3h4PSRDWFhGTEFHUworICAgY3h4ZmxhZ3NfbGlzdD1hY19wcm9nX2N4eAorIAorQEAgLTI0MTIsNyArMjQwMyw3IEBAIGlmIHRlc3QgIiRlbmFibGVfYXNzZW1ibHkiID0gIm5vIjsgdGhlbgorIGZpCisgCisgCistY2F0ID4mQUNfRkRfQ0MgPDxFT0YKKytjYXQgPiZBU19NRVNTQUdFX0xPR19GRCgpIDw8RU9GCisgRGVjaWRlZDoKKyBBQkk9JEFCSQorIENDPSRDQworQEAgLTM3ODEsNyArMzc3Miw3IEBAIEdNUF9GSU5JU0gKKyAjIEZJWE1FOiBVcGNvbWluZyB2ZXJzaW9uIG9mIGF1dG9jb25mL2F1dG9tYWtlIG1heSBub3QgbGlrZSBicm9rZW4gbGluZXMuCisgIyAgICAgICAgUmlnaHQgbm93IGF1dG9tYWtlIGlzbid0IGFjY2VwdGluZyB0aGUgbmV3IEFDX0NPTkZJR19GSUxFUyBzY2hlbWUuCisgCistQUNfT1VUUFVUKE1ha2VmaWxlCQkJCQkJCVwKKytBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlCQkJCQkJCVwKKyAgIG1wZi9NYWtlZmlsZSBtcG4vTWFrZWZpbGUgbXBxL01ha2VmaWxlCQkJCVwKKyAgIG1wei9NYWtlZmlsZSBwcmludGYvTWFrZWZpbGUgc2NhbmYvTWFrZWZpbGUgcmFuZC9NYWtlZmlsZSBjeHgvTWFrZWZpbGUgXAorICAgdGVzdHMvTWFrZWZpbGUgdGVzdHMvZGV2ZWwvTWFrZWZpbGUJCQkJCVwKK0BAIC0zNzkwLDcgKzM3ODEsOCBAQCBBQ19PVVRQVVQoTWFrZWZpbGUJCQkJCQkJXAorICAgdGVzdHMvY3h4L01ha2VmaWxlCQkJCQkJCVwKKyAgIGRvYy9NYWtlZmlsZSB0dW5lL01ha2VmaWxlCQkJCQkJXAorICAgZGVtb3MvTWFrZWZpbGUgZGVtb3MvY2FsYy9NYWtlZmlsZSBkZW1vcy9leHByL01ha2VmaWxlCQlcCistICBnbXAuaDpnbXAtaC5pbikKKysgIGdtcC5oOmdtcC1oLmluXSkKKytBQ19PVVRQVVQKKyAKKyBBQ19NU0dfTk9USUNFKFtzdW1tYXJ5IG9mIGJ1aWxkIG9wdGlvbnM6CisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9nbXAtNi4wLjAtcHBjNjQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvZ21wLTYuMC4wLXBwYzY0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMTNiNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvZ21wLTYuMC4wLXBwYzY0LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKKworU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyODA4QGdtYWlsLmNvbT4KKworVGhpcyBwYXRjaCB3aXRoIHB1bGxlZCBmcm9tIGdtcC4KK2h0dHBzOi8vZ21wbGliLm9yZy9yZXBvL2dtcC9yZXYvNGE2ZDI1OGI0NjdmCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyMgSEcgY2hhbmdlc2V0IHBhdGNoCisjIFVzZXIgVG9yYmpvcm4gR3Jhbmx1bmQgPHRlZ2VAZ21wbGliLm9yZz4KKyMgRGF0ZSAxMzk1ODM1MDY4IC0zNjAwCisjIE5vZGUgSUQgNGE2ZDI1OGI0NjdmNjYxZGEwODk0Y2M2MGVjZDA2MGYyZTNjNjdjNworIyBQYXJlbnQgIDMwMWNlMjc4ODgyNmEyZDRkMjcyNWJkNWNmMDFlOTk4NjM4ZGIzN2EKK1Byb3ZpZGUgZGVmYXVsdCBmb3IgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRC4KKworZGlmZiAtciAzMDFjZTI3ODg4MjYgLXIgNGE2ZDI1OGI0NjdmIG1wbi9wb3dlcnBjNjQvbW9kZTY0L2djZF8xLmFzbQorLS0tIGEvbXBuL3Bvd2VycGM2NC9tb2RlNjQvZ2NkXzEuYXNtICAgIFR1ZSBNYXIgMjUgMTU6MzQ6NTIgMjAxNCArMDEwMAorKysrIGIvbXBuL3Bvd2VycGM2NC9tb2RlNjQvZ2NkXzEuYXNtICAgIFdlZCBNYXIgMjYgMTI6NTc6NDggMjAxNCArMDEwMAorQEAgLTQzLDYgKzQzLDkgQEAKKyBkZWZpbmUoYG4nLCAgICAgYHI0JykKKyBkZWZpbmUoYHYwJywgICAgYHI1JykKKworK2lmZGVmKGBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEJywsCisrICBgZGVmaW5lKGBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEJywzMCknKQorKworIEVYVEVSTl9GVU5DKG1wbl9tb2RfMSkKKyBFWFRFUk5fRlVOQyhtcG5fbW9kZXhhY3RfMWNfb2RkKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL3VzZS1pbmNsdWRlZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL3VzZS1pbmNsdWRlZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OTA0YTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvdXNlLWluY2x1ZGVkaXIucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnbXAtNC4yLjQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbXAtNC4yLjQub3JpZy9NYWtlZmlsZS5hbQkyMDA4LTA5LTEwIDE5OjMxOjI3LjAwMDAwMDAwMCArMDAwMAorKysrIGdtcC00LjIuNC9NYWtlZmlsZS5hbQkyMDA5LTA3LTA2IDIwOjE5OjE5LjAwMDAwMDAwMCArMDAwMAorQEAgLTEwNiw3ICsxMDYsNyBAQAorICMgYnV0IGFueW9uZSBrbm93bGVkZ2FibGUgZW5vdWdoIHRvIGJlIHBsYXlpbmcgd2l0aCBleGVjX3ByZWZpeCB3aWxsIGJlIGFibGUKKyAjIHRvIGFkZHJlc3MgdGhhdC4KKyAjCistaW5jbHVkZWV4ZWNkaXIgPSAkKGV4ZWNfcHJlZml4KS9pbmNsdWRlCisraW5jbHVkZWV4ZWNkaXIgPSAkKGluY2x1ZGVkaXIpCisgaW5jbHVkZV9IRUFERVJTID0gJChHTVBYWF9IRUFERVJTX09QVElPTikKKyBub2Rpc3RfaW5jbHVkZWV4ZWNfSEVBREVSUyA9IGdtcC5oICQoTVBCU0RfSEVBREVSU19PUFRJT04pCisgbGliX0xUTElCUkFSSUVTID0gbGliZ21wLmxhICQoR01QWFhfTFRMSUJSQVJJRVNfT1BUSU9OKSAkKE1QQlNEX0xUTElCUkFSSUVTX09QVElPTikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NTJhMzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAuaW5jCkBAIC0wLDAgKzEsMTYgQEAKK1NFQ1RJT04gPSAiZGV2ZWwiCitTVU1NQVJZID0gIkdOVSBtdWx0aXByZWNpc2lvbiBhcml0aG1ldGljIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJHTVAgaXMgYSBmcmVlIGxpYnJhcnkgZm9yIGFyYml0cmFyeSBwcmVjaXNpb24gYXJpdGhtZXRpYywgb3BlcmF0aW5nIG9uIHNpZ25lZCBpbnRlZ2VycywgcmF0aW9uYWwgbnVtYmVycywgYW5kIGZsb2F0aW5nIHBvaW50IG51bWJlcnMiCitIT01FUEFHRSA9ICJodHRwOi8vZ21wbGliLm9yZy8iCisKK1JFVklTSU9OID89ICIiCitTUkNfVVJJID0gImh0dHBzOi8vZ21wbGliLm9yZy9kb3dubG9hZC8ke0JQTn0vJHtCUH0ke1JFVklTSU9OfS50YXIuYnoyIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3JlYWRsaW5lXSA9ICItLXdpdGgtcmVhZGxpbmU9eWVzLC0td2l0aC1yZWFkbGluZT1ubyxyZWFkbGluZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF80LjIuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF80LjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjhjMDFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wXzQuMi4xLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgZ21wLmluYworCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIEdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0gPSAiTEdQTHYyLjErIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04OTJmNTY5YTU1NWJhOWMwN2E1NjhhN2MwYzRmYTYzYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZmJjMDkzOTAxODU3ZmNkMTE4ZjA2NWY5MDA5ODJjMjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ21wLWguaW47YmVnaW5saW5lPTY7ZW5kbGluZT0yMTttZDU9ZTA1NmY3NGExMmMzMjc3ZDczMGRiY2ZiODVkMmNhMzQiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kaXNhYmxlLXN0ZGMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2dtcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDkxYzU2ZTBlMWNjYTZiMDliMTdiNjlkNDdlZjE4ZTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDA3ZmZjYjM3ZWVjZWMzNWM1ZWM3MjUxNmQxMGIzNWZkZjZlNmZlZjFmY2YxZGNkMzdlMzBiOGNiZjhiZjk0MSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF82LjAuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF82LjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWI2M2U1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wXzYuMC4wLmJiCkBAIC0wLDAgKzEsMzMgQEAKK3JlcXVpcmUgZ21wLmluYworCitMSUNFTlNFPSJHUEx2MisgfCBMR1BMdjMrIgorCitSRVZJU0lPTj0iYSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUnYzO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiBcCisgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkd2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorIgorCitTUkNfVVJJICs9ICJmaWxlOi8vY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hbWQ2NC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdXNlLWluY2x1ZGVkaXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FwcGVuZF91c2VyX3Byb3ZpZGVkX2ZsYWdzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9nbXAtNi4wLjAtcHBjNjQucGF0Y2ggXAorICAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gImI3ZmYyZDg4Y2FlN2Y4MDg1YmQ1MDA2MDk2ZWVkNDcwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdmOGU5YTgwNGI5YzZkMDcxNjRjZjc1NDIwN2JlODM4ZWNlMTIxOTQyNWQ2NGUyOGNmYTNlNzBkNWM3NTlhYWYiCisKK2FjcGF0aHMgPSAiIgorCitFWFRSQV9PRUNPTkYgKz0gIiAtLWVuYWJsZS1jeHg9ZGV0ZWN0IgorCitQQUNLQUdFUyA9KyAibGliZ21weHgiCitGSUxFU19saWJnbXB4eCA9ICIke2xpYmRpcn0vbGliZ21weHgke1NPTElCU30iCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKKyAgICAgICAgc2VkIC1pICJzfC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9fHxnIiAke0R9JHtpbmNsdWRlZGlyfS9nbXAuaAorfQorCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiZ21wLmgiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ25vbWUtZGVza3RvcC10ZXN0aW5nL2dub21lLWRlc2t0b3AtdGVzdGluZy8wMDAxLWdzeXN0ZW0tc3VicHJvY2Vzcy5jLUVuYWJsZS1HTlUtZXh0ZW5zaW9ucy1pbi1zeXN0ZW0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dub21lLWRlc2t0b3AtdGVzdGluZy9nbm9tZS1kZXNrdG9wLXRlc3RpbmcvMDAwMS1nc3lzdGVtLXN1YnByb2Nlc3MuYy1FbmFibGUtR05VLWV4dGVuc2lvbnMtaW4tc3lzdGVtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MDY2NmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dub21lLWRlc2t0b3AtdGVzdGluZy9nbm9tZS1kZXNrdG9wLXRlc3RpbmcvMDAwMS1nc3lzdGVtLXN1YnByb2Nlc3MuYy1FbmFibGUtR05VLWV4dGVuc2lvbnMtaW4tc3lzdGVtLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gYjFkZTJjNjI5MGJjMDY1MWZlODdhOGM0ZmI1MmU3YTBhNWZlNjMyMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDUgT2N0IDIwMTQgMTY6MDE6NDkgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gZ3N5c3RlbS1zdWJwcm9jZXNzLmM6IEVuYWJsZSBHTlUgZXh0ZW5zaW9ucyBpbiBzeXN0ZW0gIEMKKyBsaWJyYXJ5CisKK1RoaXMgc2hvdWxkIGV4cG9ydCBPX0NMT0VYRUMgd2hlcmUgaXQgaXMgb25seQorYXZhaWxhYmxlIHdoZW4gX0dOVV9TT1VSQ0UgaXMgZGVmaW5lZCAuZS5nLiB1Y2xpYmMgYmFzZWQgc3lzdGVtcworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tCisgc3JjL2xpYmdzeXN0ZW0vZ3N5c3RlbS1zdWJwcm9jZXNzLmMgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvbGliZ3N5c3RlbS9nc3lzdGVtLXN1YnByb2Nlc3MuYyBiL3NyYy9saWJnc3lzdGVtL2dzeXN0ZW0tc3VicHJvY2Vzcy5jCitpbmRleCBhOTY3ODk2Li5hNTJhMzYyIDEwMDY0NAorLS0tIGEvc3JjL2xpYmdzeXN0ZW0vZ3N5c3RlbS1zdWJwcm9jZXNzLmMKKysrKyBiL3NyYy9saWJnc3lzdGVtL2dzeXN0ZW0tc3VicHJvY2Vzcy5jCitAQCAtMTgsNiArMTgsMTAgQEAKKyAKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgCisrI2lmbmRlZiBfR05VX1NPVVJDRQorKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysjZW5kaWYKKysKKyAjZGVmaW5lIF9HU1lTVEVNX05PX0xPQ0FMX0FMTE9DCisgI2luY2x1ZGUgImxpYmdzeXN0ZW0uaCIKKyAKKy0tIAorMi4xLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbm9tZS1kZXNrdG9wLXRlc3RpbmcvZ25vbWUtZGVza3RvcC10ZXN0aW5nXzIwMTQuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ25vbWUtZGVza3RvcC10ZXN0aW5nL2dub21lLWRlc2t0b3AtdGVzdGluZ18yMDE0LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgyZGU5OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ25vbWUtZGVza3RvcC10ZXN0aW5nL2dub21lLWRlc2t0b3AtdGVzdGluZ18yMDE0LjEuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJUZXN0IHJ1bm5lciBmb3IgR05PTUUtc3R5bGUgaW5zdGFsbGVkIHRlc3RzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93aWtpLmdub21lLm9yZy9Hbm9tZUdvYWxzL0luc3RhbGxlZFRlc3RzIgorTElDRU5TRSA9ICJMR1BMdjIrIgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtQVn0vJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWdzeXN0ZW0tc3VicHJvY2Vzcy5jLUVuYWJsZS1HTlUtZXh0ZW5zaW9ucy1pbi1zeXN0ZW0ucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNjA4YWQ3MmE3N2UyM2ExYWVjZGZkOGQwN2E5NGJhZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYTNlZWQ3MzY3OGRkMjJkMDlkNmE3ZWM0Zjg5OTU1N2RmM2U4YjRhODAyYWZmYTc2ZDBmMTYzYjMxMjg2NTM5IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZ25vbWUtZGVza3RvcC10ZXN0aW5nLXJ1bm5lci5jO2VuZGxpbmU9MTk7bWQ1PTY3MzExYTYwMGI4M2ZkMDA2OGRmYzdlNWI4NGZmYjNmIgorCitERVBFTkRTID0gImdsaWItMi4wIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUFIgPSAicjEiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2pvdXJuYWxkXSA9ICItLXdpdGgtc3lzdGVtZC1qb3VybmFsLC0td2l0aG91dC1zeXN0ZW1kLWpvdXJuYWwsc3lzdGVtZCxzeXN0ZW1kIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9DVkUtMjAxMy00MjQyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9DVkUtMjAxMy00MjQyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YWRkY2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0NWRS0yMDEzLTQyNDIucGF0Y2gKQEAgLTAsMCArMSw2MiBAQAorRnJvbSBlMjIwMmZmMmI3MDQ2MjNlZmM2Mjc3ZmI1MjU2ZTRlMTViYWM1Njc2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2VybmVyIEtvY2ggPHdrQGdudXBnLm9yZz4KK0RhdGU6IFRodSwgMjUgSnVsIDIwMTMgMTE6MTc6NTIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gTWl0aWdhdGUgYSBmbHVzaCtyZWxvYWQgY2FjaGUgYXR0YWNrIG9uIFJTQSBzZWNyZXQKKyBleHBvbmVudHMuCisKK2NvbW1pdCBlMjIwMmZmMmI3MDQ2MjNlZmM2Mjc3ZmI1MjU2ZTRlMTViYWM1Njc2IGZyb20KK2dpdDovL2dpdC5nbnVwZy5vcmcvbGliZ2NyeXB0LmdpdAorCisqIG1waS9tcGktcG93LmMgKGdjcnlfbXBpX3Bvd20pOiBBbHdheXMgcGVyZnJvbSB0aGUgbXBpX211bCBmb3IKK2V4cG9uZW50cyBpbiBzZWN1cmUgbWVtb3J5LgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0KKworVGhlIGF0dGFjayBpcyBwdWJsaXNoZWQgYXMgaHR0cDovL2VwcmludC5pYWNyLm9yZy8yMDEzLzQ0OCA6CisKK0ZsdXNoK1JlbG9hZDogYSBIaWdoIFJlc29sdXRpb24sIExvdyBOb2lzZSwgTDMgQ2FjaGUgU2lkZS1DaGFubmVsCitBdHRhY2sgYnkgWXV2YWwgWWFyb20gYW5kIEthdHJpbmEgRmFsa25lci4gMTggSnVseSAyMDEzLgorCisgIEZsdXNoK1JlbG9hZCBpcyBhIGNhY2hlIHNpZGUtY2hhbm5lbCBhdHRhY2sgdGhhdCBtb25pdG9ycyBhY2Nlc3MgdG8KKyAgZGF0YSBpbiBzaGFyZWQgcGFnZXMuIEluIHRoaXMgcGFwZXIgd2UgZGVtb25zdHJhdGUgaG93IHRvIHVzZSB0aGUKKyAgYXR0YWNrIHRvIGV4dHJhY3QgcHJpdmF0ZSBlbmNyeXB0aW9uIGtleXMgZnJvbSBHbnVQRy4gIFRoZSBoaWdoCisgIHJlc29sdXRpb24gYW5kIGxvdyBub2lzZSBvZiB0aGUgRmx1c2grUmVsb2FkIGF0dGFjayBlbmFibGVzIGEgc3B5CisgIHByb2dyYW0gdG8gcmVjb3ZlciBvdmVyIDk4JSBvZiB0aGUgYml0cyBvZiB0aGUgcHJpdmF0ZSBrZXkgaW4gYQorICBzaW5nbGUgZGVjcnlwdGlvbiBvciBzaWduaW5nIHJvdW5kLiBVbmxpa2UgcHJldmlvdXMgYXR0YWNrcywgdGhlCisgIGF0dGFjayB0YXJnZXRzIHRoZSBsYXN0IGxldmVsIEwzIGNhY2hlLiBDb25zZXF1ZW50bHksIHRoZSBzcHkKKyAgcHJvZ3JhbSBhbmQgdGhlIHZpY3RpbSBkbyBub3QgbmVlZCB0byBzaGFyZSB0aGUgZXhlY3V0aW9uIGNvcmUgb2YKKyAgdGhlIENQVS4gVGhlIGF0dGFjayBpcyBub3QgbGltaXRlZCB0byBhIHRyYWRpdGlvbmFsIE9TIGFuZCBjYW4gYmUKKyAgdXNlZCBpbiBhIHZpcnR1YWxpc2VkIGVudmlyb25tZW50LCB3aGVyZSBpdCBjYW4gYXR0YWNrIHByb2dyYW1zCisgIGV4ZWN1dGluZyBpbiBhIGRpZmZlcmVudCBWTS4KKworSW5kZXg6IGdudXBnLTEuNC43L21waS9tcGktcG93LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL21waS9tcGktcG93LmMKKysrKyBnbnVwZy0xLjQuNy9tcGkvbXBpLXBvdy5jCitAQCAtMjEyLDcgKzIxMiwxMyBAQCBtcGlfcG93bSggTVBJIHJlcywgTVBJIGJhc2UsIE1QSSBleHBvbmVuCisgCQl0cCA9IHJwOyBycCA9IHhwOyB4cCA9IHRwOworIAkJcnNpemUgPSB4c2l6ZTsKKyAKKy0JCWlmKCAobXBpX2xpbWJfc2lnbmVkX3QpZSA8IDAgKSB7CisrICAgICAgICAgICAgLyogVG8gbWl0aWdhdGUgdGhlIFlhcm9tL0ZhbGtuZXIgZmx1c2grcmVsb2FkIGNhY2hlCisrICAgICAgICAgICAgICogc2lkZS1jaGFubmVsIGF0dGFjayBvbiB0aGUgUlNBIHNlY3JldCBleHBvbmVudCwgd2UgZG8KKysgICAgICAgICAgICAgKiB0aGUgbXVsdGlwbGljYXRpb24gcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgdGhlCisrICAgICAgICAgICAgICogaGlnaC1iaXQgb2YgRS4gIEJ1dCB0byBhdm9pZCB0aGlzIHBlcmZvcm1hbmNlIHBlbmFsdHkKKysgICAgICAgICAgICAgKiB3ZSBkbyBpdCBvbmx5IGlmIHRoZSBleHBvbmVudCBoYXMgYmVlbiBzdG9yZWQgaW4gc2VjdXJlCisrICAgICAgICAgICAgICogbWVtb3J5IGFuZCB3ZSBjYW4gdGh1cyBhc3N1bWUgaXQgaXMgYSBzZWNyZXQgZXhwb25lbnQuICAqLworKwkJaWYgKGVzZWMgfHwgKG1waV9saW1iX3NpZ25lZF90KWUgPCAwKSB7CisgCQkgICAgLyptcGloZWxwX211bCggeHAsIHJwLCByc2l6ZSwgYnAsIGJzaXplICk7Ki8KKyAJCSAgICBpZiggYnNpemUgPCBLQVJBVFNVQkFfVEhSRVNIT0xEICkgeworIAkJCW1waWhlbHBfbXVsKCB4cCwgcnAsIHJzaXplLCBicCwgYnNpemUgKTsKK0BAIC0yMjcsNiArMjMzLDggQEAgbXBpX3Bvd20oIE1QSSByZXMsIE1QSSBiYXNlLCBNUEkgZXhwb25lbgorIAkJCW1waWhlbHBfZGl2cmVtKHhwICsgbXNpemUsIDAsIHhwLCB4c2l6ZSwgbXAsIG1zaXplKTsKKyAJCQl4c2l6ZSA9IG1zaXplOworIAkJICAgIH0KKysJCX0KKysJCWlmICggKG1waV9saW1iX3NpZ25lZF90KWUgPCAwICkgeworIAorIAkJICAgIHRwID0gcnA7IHJwID0geHA7IHhwID0gdHA7CisgCQkgICAgcnNpemUgPSB4c2l6ZTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDM1MS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDM1MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjllZGU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9DVkUtMjAxMy00MzUxLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGdudXBnLTEuNC43L2cxMC9nZXRrZXkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvZzEwL2dldGtleS5jCTIwMDctMDMtMDUgMTY6NTQ6NDEuMDAwMDAwMDAwICswODAwCisrKysgZ251cGctMS40LjcvZzEwL2dldGtleS5jCTIwMTMtMTEtMjggMTQ6NDE6NTkuNjQwMjEyMjQwICswODAwCitAQCAtMTQ1NCw3ICsxNDU0LDExIEBACisgCisgICAgICAgaWYoZmxhZ3MpCisgCWtleV91c2FnZSB8PSBQVUJLRVlfVVNBR0VfVU5LTk9XTjsKKysgICAgICBpZiAoIWtleV91c2FnZSkKKysJa2V5X3VzYWdlIHw9IFBVQktFWV9VU0FHRV9OT05FOworICAgICB9CisrICBlbHNlIGlmIChwKQorKyAgICBrZXlfdXNhZ2UgfD0gUFVCS0VZX1VTQUdFX05PTkU7CisgCisgICAvKiBXZSBzZXQgUFVCS0VZX1VTQUdFX1VOS05PV04gdG8gaW5kaWNhdGUgdGhhdCB0aGlzIGtleSBoYXMgYQorICAgICAgY2FwYWJpbGl0eSB0aGF0IHdlIGRvIG5vdCBoYW5kbGUuICBUaGlzIHNlcnZlcyB0byBkaXN0aW5ndWlzaAorSW5kZXg6IGdudXBnLTEuNC43L2cxMC9rZXlnZW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvZzEwL2tleWdlbi5jCTIwMDctMDItMDUgMDA6Mjc6NDAuMDAwMDAwMDAwICswODAwCisrKysgZ251cGctMS40LjcvZzEwL2tleWdlbi5jCTIwMTMtMTEtMjggMTQ6NDM6MDUuMDE2NjcwMDkyICswODAwCitAQCAtMjA5LDkgKzIwOSw2IEBACisgICAgIGlmICh1c2UgJiBQVUJLRVlfVVNBR0VfQVVUSCkKKyAgICAgICAgIGJ1ZlswXSB8PSAweDIwOworIAorLSAgICBpZiAoIWJ1ZlswXSkgCistICAgICAgICByZXR1cm47CistCisgICAgIGJ1aWxkX3NpZ19zdWJwa3QgKHNpZywgU0lHU1VCUEtUX0tFWV9GTEFHUywgYnVmLCAxKTsKKyB9CisgCitJbmRleDogZ251cGctMS40LjcvaW5jbHVkZS9jaXBoZXIuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvaW5jbHVkZS9jaXBoZXIuaAkyMDA2LTA0LTIxIDIwOjM5OjQ5LjAwMDAwMDAwMCArMDgwMAorKysrIGdudXBnLTEuNC43L2luY2x1ZGUvY2lwaGVyLmgJMjAxMy0xMS0yOCAxNDo0OToyNC4xNTkzMjI3NDQgKzA4MDAKK0BAIC01Miw2ICs1Miw3IEBACisgI2RlZmluZSBQVUJLRVlfVVNBR0VfQ0VSVCAgICA0ICAgICAgLyoga2V5IGlzIGFsc28gZ29vZCB0byBjZXJ0aWZ5IG90aGVyIGtleXMqLworICNkZWZpbmUgUFVCS0VZX1VTQUdFX0FVVEggICAgOCAgICAgIC8qIGtleSBpcyBnb29kIGZvciBhdXRoZW50aWNhdGlvbiAqLworICNkZWZpbmUgUFVCS0VZX1VTQUdFX1VOS05PV04gMTI4ICAgIC8qIGtleSBoYXMgYW4gdW5rbm93biB1c2FnZSBiaXQgKi8KKysjZGVmaW5lIFBVQktFWV9VU0FHRV9OT05FICAgIDI1NiAgICAvKiBObyB1c2FnZSBnaXZlbi4gKi8KKyAKKyAjZGVmaW5lIERJR0VTVF9BTEdPX01ENSAgICAgICAxCisgI2RlZmluZSBESUdFU1RfQUxHT19TSEExICAgICAgMgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9DVkUtMjAxMy00NTc2LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9DVkUtMjAxMy00NTc2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTIyZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0NWRS0yMDEzLTQ1NzYucGF0Y2gKQEAgLTAsMCArMSwxNTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGdudXBnLTEuNC43L2NpcGhlci9kc2EuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvY2lwaGVyL2RzYS5jCTIwMDYtMTItMTIgMDI6Mjc6MjEuMDAwMDAwMDAwICswODAwCisrKysgZ251cGctMS40LjcvY2lwaGVyL2RzYS5jCTIwMTQtMDEtMjMgMTE6MzA6MTcuMzAwOTE1OTE5ICswODAwCitAQCAtMjg3LDYgKzI4Nyw4IEBACisgICAgIE1QSSBraW52OworICAgICBNUEkgdG1wOworIAorKyAgICBtcGlfbm9ybWFsaXplIChoYXNoKTsKKysKKyAgICAgLyogc2VsZWN0IGEgcmFuZG9tIGsgd2l0aCAwIDwgayA8IHEgKi8KKyAgICAgayA9IGdlbl9rKCBza2V5LT5xICk7CisgCitJbmRleDogZ251cGctMS40LjcvY2lwaGVyL2VsZ2FtYWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvY2lwaGVyL2VsZ2FtYWwuYwkyMDA2LTEyLTEyIDAzOjA4OjA1LjAwMDAwMDAwMCArMDgwMAorKysrIGdudXBnLTEuNC43L2NpcGhlci9lbGdhbWFsLmMJMjAxNC0wMS0yMyAxMTozMDoxNy4zMDA5MTU5MTkgKzA4MDAKK0BAIC0zNzYsNiArMzc2LDkgQEAKKyB7CisgICAgIE1QSSB0MSA9IG1waV9hbGxvY19zZWN1cmUoIG1waV9nZXRfbmxpbWJzKCBza2V5LT5wICkgKTsKKyAKKysgICAgbXBpX25vcm1hbGl6ZSAoYSk7CisrICAgIG1waV9ub3JtYWxpemUgKGIpOworKworICAgICAvKiBvdXRwdXQgPSBiLyhhXngpIG1vZCBwICovCisgICAgIG1waV9wb3dtKCB0MSwgYSwgc2tleS0+eCwgc2tleS0+cCApOworICAgICBtcGlfaW52bSggdDEsIHQxLCBza2V5LT5wICk7CitJbmRleDogZ251cGctMS40LjcvY2lwaGVyL3JhbmRvbS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9jaXBoZXIvcmFuZG9tLmMJMjAwNi0xMS0wMyAxODowOTozOS4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbnVwZy0xLjQuNy9jaXBoZXIvcmFuZG9tLmMJMjAxNC0wMS0yMyAxMTozMTo1My45OTM0OTU0NjIgKzA4MDAKK0BAIC0yNzMsNiArMjczLDE4IEBACisgfQorIAorIAorKy8qIFJhbmRvbWl6ZSB0aGUgTVBJICovIAorK3ZvaWQKKytyYW5kb21pemVfbXBpIChNUEkgbXBpLCBzaXplX3QgbmJpdHMsIGludCBsZXZlbCkKKyt7CisrICB1bnNpZ25lZCBjaGFyICpidWZmZXI7CisrCisrICBidWZmZXIgPSBnZXRfcmFuZG9tX2JpdHMgKG5iaXRzLCBsZXZlbCwgbXBpX2lzX3NlY3VyZSAobXBpKSk7CisrICBtcGlfc2V0X2J1ZmZlciAobXBpLCBidWZmZXIsIChuYml0cys3KS84LCAwKTsKKysgIHhmcmVlIChidWZmZXIpOworK30KKysKKysKKyBpbnQKKyByYW5kb21faXNfZmFrZWQoKQorIHsKK0luZGV4OiBnbnVwZy0xLjQuNy9jaXBoZXIvcmFuZG9tLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2NpcGhlci9yYW5kb20uaAkyMDA2LTAyLTA5IDE5OjI5OjI5LjAwMDAwMDAwMCArMDgwMAorKysrIGdudXBnLTEuNC43L2NpcGhlci9yYW5kb20uaAkyMDE0LTAxLTIzIDExOjMwOjE3LjMwMDkxNTkxOSArMDgwMAorQEAgLTMyLDYgKzMyLDcgQEAKKyBpbnQgIHJhbmRvbV9pc19mYWtlZCh2b2lkKTsKKyB2b2lkIHJhbmRvbV9kaXNhYmxlX2xvY2tpbmcgKHZvaWQpOworIHZvaWQgcmFuZG9taXplX2J1ZmZlciggYnl0ZSAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCBpbnQgbGV2ZWwgKTsKKyt2b2lkIHJhbmRvbWl6ZV9tcGkgKE1QSSBtcGksIHNpemVfdCBuYml0cywgaW50IGxldmVsKTsKKyBieXRlICpnZXRfcmFuZG9tX2JpdHMoIHNpemVfdCBuYml0cywgaW50IGxldmVsLCBpbnQgc2VjdXJlICk7Cisgdm9pZCBmYXN0X3JhbmRvbV9wb2xsKCB2b2lkICk7CisgCitJbmRleDogZ251cGctMS40LjcvY2lwaGVyL3JzYS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9jaXBoZXIvcnNhLmMJMjAwNi0xMi0xMiAwMzowOTowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbnVwZy0xLjQuNy9jaXBoZXIvcnNhLmMJMjAxNC0wMS0yMyAxMTozNTowNC4zMzA2MzkxMjUgKzA4MDAKK0BAIC0zMDEsOSArMzAxLDI2IEBACisgI2lmIDAKKyAgICAgbXBpX3Bvd20oIG91dHB1dCwgaW5wdXQsIHNrZXktPmQsIHNrZXktPm4gKTsKKyAjZWxzZQorLSAgICBNUEkgbTEgICA9IG1waV9hbGxvY19zZWN1cmUoIG1waV9nZXRfbmxpbWJzKHNrZXktPm4pKzEgKTsKKy0gICAgTVBJIG0yICAgPSBtcGlfYWxsb2Nfc2VjdXJlKCBtcGlfZ2V0X25saW1icyhza2V5LT5uKSsxICk7CistICAgIE1QSSBoICAgID0gbXBpX2FsbG9jX3NlY3VyZSggbXBpX2dldF9ubGltYnMoc2tleS0+bikrMSApOworKyAgICBpbnQgbmxpbWJzID0gbXBpX2dldF9ubGltYnMgKHNrZXktPm4pKzE7CisrICAgIE1QSSBtMSAgID0gbXBpX2FsbG9jX3NlY3VyZSAobmxpbWJzKTsKKysgICAgTVBJIG0yICAgPSBtcGlfYWxsb2Nfc2VjdXJlIChubGltYnMpOworKyAgICBNUEkgaCAgICA9IG1waV9hbGxvY19zZWN1cmUgKG5saW1icyk7CisrIyBpZiAxCisrICAgIE1QSSBiZGF0YT0gbXBpX2FsbG9jX3NlY3VyZSAobmxpbWJzKTsKKysgICAgTVBJIHIgICAgPSBtcGlfYWxsb2Nfc2VjdXJlIChubGltYnMpOworKyMgZW5kaWYKKysKKysgICAgLyogUmVtb3ZlIHN1cGVyZmx1b3VzIGxlYWRpbmcgemVyb2VzIGZyb20gSU5QVVQuICAqLworKyAgICBtcGlfbm9ybWFsaXplIChpbnB1dCk7CisrCisrIyBpZiAxIAorKyAgICAvKiBCbGluZDogIGJkYXRhID0gKGRhdGEgKiByXmUpIG1vZCBuICAgKi8KKysgICAgcmFuZG9taXplX21waSAociwgbXBpX2dldF9uYml0cyAoc2tleS0+biksIDApOworKyAgICBtcGlfZmRpdl9yIChyLCByLCBza2V5LT5uKTsKKysgICAgbXBpX3Bvd20gKGJkYXRhLCByLCBza2V5LT5lLCBza2V5LT5uKTsKKysgICAgbXBpX211bG0gKGJkYXRhLCBiZGF0YSwgaW5wdXQsIHNrZXktPm4pOworKyAgICBpbnB1dCA9IGJkYXRhOworKyMgZW5kaWYKKyAKKyAgICAgLyogbTEgPSBjIF4gKGQgbW9kIChwLTEpKSBtb2QgcCAqLworICAgICBtcGlfc3ViX3VpKCBoLCBza2V5LT5wLCAxICApOworQEAgLTMyMSw4ICszMzgsMTUgQEAKKyAgICAgLyogbSA9IG0yICsgaCAqIHAgKi8KKyAgICAgbXBpX211bCAoIGgsIGgsIHNrZXktPnAgKTsKKyAgICAgbXBpX2FkZCAoIG91dHB1dCwgbTEsIGggKTsKKy0gICAgLyogcmVhZHkgKi8KKy0gICAgCisrCisrIyBpZiAxCisrICAgIG1waV9mcmVlIChiZGF0YSk7CisrICAgIC8qIFVuYmxpbmQ6IG91dHB1dCA9IChvdXRwdXQgKiByXigtMSkpIG1vZCBuICAqLworKyAgICBtcGlfaW52bSAociwgciwgc2tleS0+bik7CisrICAgIG1waV9tdWxtIChvdXRwdXQsIG91dHB1dCwgciwgc2tleS0+bik7CisrICAgIG1waV9mcmVlIChyKTsKKysjIGVuZGlmCisrCisgICAgIG1waV9mcmVlICggaCApOworICAgICBtcGlfZnJlZSAoIG0xICk7CisgICAgIG1waV9mcmVlICggbTIgKTsKK0BAIC0zOTcsNiArNDIxLDcgQEAKKyByc2FfZGVjcnlwdCggaW50IGFsZ28sIE1QSSAqcmVzdWx0LCBNUEkgKmRhdGEsIE1QSSAqc2tleSApCisgeworICAgICBSU0Ffc2VjcmV0X2tleSBzazsKKysgICAgTVBJIGlucHV0OworIAorICAgICBpZiggYWxnbyAhPSAxICYmIGFsZ28gIT0gMiApCisgCXJldHVybiBHMTBFUlJfUFVCS0VZX0FMR087CitAQCAtNDA3LDggKzQzMiwxNCBAQAorICAgICBzay5wID0gc2tleVszXTsKKyAgICAgc2sucSA9IHNrZXlbNF07CisgICAgIHNrLnUgPSBza2V5WzVdOworLSAgICAqcmVzdWx0ID0gbXBpX2FsbG9jX3NlY3VyZSggbXBpX2dldF9ubGltYnMoIHNrLm4gKSApOworLSAgICBzZWNyZXQoICpyZXN1bHQsIGRhdGFbMF0sICZzayApOworKworKyAgICAvKiBNaXRpZ2F0ZXMgc2lkZS1jaGFubmVsIGF0dGFja3MgKENWRS0yMDEzLTQ1NzYpLiAgKi8KKysgICAgaW5wdXQgPSBtcGlfYWxsb2MgKDApOworKyAgICBtcGlfbm9ybWFsaXplIChkYXRhWzBdKTsKKysgICAgbXBpX2ZkaXZfciAoaW5wdXQsIGRhdGFbMF0sIHNrLm4pOworKyAgICAqcmVzdWx0ID0gbXBpX2FsbG9jX3NlY3VyZSAobXBpX2dldF9ubGltYnMgKHNrLm4pKTsKKysgICAgc2VjcmV0ICgqcmVzdWx0LCBpbnB1dCwgJnNrKTsKKysgICAgbXBpX2ZyZWUgKGlucHV0KTsKKyAgICAgcmV0dXJuIDA7CisgfQorIAorSW5kZXg6IGdudXBnLTEuNC43L2cxMC9ncGd2LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2cxMC9ncGd2LmMJMjAwNi0xMi0xMyAxOToyNTowNC4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbnVwZy0xLjQuNy9nMTAvZ3Bndi5jCTIwMTQtMDEtMjMgMTE6MzA6MTcuMzAwOTE1OTE5ICswODAwCitAQCAtMzkwLDYgKzM5MCw3IEBACisgdm9pZCByYW5kb21fZHVtcF9zdGF0cyh2b2lkKSB7fQorIGludCBxdWlja19yYW5kb21fZ2VuKCBpbnQgb25vZmYgKSB7IHJldHVybiAtMTt9Cisgdm9pZCByYW5kb21pemVfYnVmZmVyKCBieXRlICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIGludCBsZXZlbCApIHt9Cisrdm9pZCByYW5kb21pemVfbXBpIChNUEkgbXBpLCBzaXplX3QgbmJpdHMsIGludCBsZXZlbCkge30KKyBpbnQgcmFuZG9tX2lzX2Zha2VkKCkgeyByZXR1cm4gLTE7fQorIGJ5dGUgKmdldF9yYW5kb21fYml0cyggc2l6ZV90IG5iaXRzLCBpbnQgbGV2ZWwsIGludCBzZWN1cmUgKSB7IHJldHVybiBOVUxMO30KKyB2b2lkIHNldF9yYW5kb21fc2VlZF9maWxlKCBjb25zdCBjaGFyICpuYW1lICkge30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvR251UEcxLUNWRS0yMDEyLTYwODUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0dudVBHMS1DVkUtMjAxMi02MDg1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNWQ5YTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0dudVBHMS1DVkUtMjAxMi02MDg1LnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK2NvbW1pdCBmMGIzM2I2ZmI4ZTA1ODZlOTU4NGE3YTQwOWRjYzMxMjYzNzc2YTY3CitBdXRob3I6IFdlcm5lciBLb2NoIDx3a0BnbnVwZy5vcmc+CitEYXRlOiAgIFRodSBEZWMgMjAgMDk6NDM6NDEgMjAxMiArMDEwMAorCisgICAgZ3BnOiBJbXBvcnQgb25seSBwYWNrZXRzIHdoaWNoIGFyZSBhbGxvd2VkIGluIGEga2V5YmxvY2suCisgICAgCisgICAgKiBnMTAvaW1wb3J0LmMgKHZhbGlkX2tleWJsb2NrX3BhY2tldCk6IE5ldy4KKyAgICAocmVhZF9ibG9jayk6IFN0b3JlIG9ubHkgdmFsaWQgcGFja2V0cy4KKyAgICAtLQorICAgIAorICAgIEEgY29ycnVwdGVkIGtleSwgd2hpY2ggZm9yIGV4YW1wbGUgaW5jbHVkZWQgYSBtYW5nbGVkIHB1YmxpYyBrZXkKKyAgICBlbmNyeXB0ZWQgcGFja2V0LCB1c2VkIHRvIGNvcnJ1cHQgdGhlIGtleXJpbmcuICBUaGlzIGNoYW5nZSBza2lwcyBhbGwKKyAgICBwYWNrZXRzIHdoaWNoIGFyZSBub3QgYWxsb3dlZCBpbiBhIGtleWJsb2NrLgorICAgIAorICAgIEdudVBHLWJ1Zy1pZDogMTQ1NQorICAgIAorICAgIChjaGVycnktcGlja2VkIGZyb20gY29tbWl0IGY3OTVhMGQ1OWUxOTc0NTVmODcyM2MzMDBlZWJmNTllMDk4NTNlZmEpCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvZzEwL2ltcG9ydC5jIGIvZzEwL2ltcG9ydC5jCitpbmRleCBiZmUwMmViLi5hNTdiMzJlIDEwMDY0NAorLS0tIGEvZzEwL2ltcG9ydC5jCisrKysgYi9nMTAvaW1wb3J0LmMKK0BAIC0zODQsNiArMzg0LDI3IEBAIGltcG9ydF9wcmludF9zdGF0cyAodm9pZCAqaGQpCisgfQorIAorIAorKy8qIFJldHVybiB0cnVlIGlmIFBLVFRZUEUgaXMgdmFsaWQgaW4gYSBrZXlibG9jay4gICovCisrc3RhdGljIGludAorK3ZhbGlkX2tleWJsb2NrX3BhY2tldCAoaW50IHBrdHR5cGUpCisreworKyAgc3dpdGNoIChwa3R0eXBlKQorKyAgICB7CisrICAgIGNhc2UgUEtUX1BVQkxJQ19LRVk6CisrICAgIGNhc2UgUEtUX1BVQkxJQ19TVUJLRVk6CisrICAgIGNhc2UgUEtUX1NFQ1JFVF9LRVk6CisrICAgIGNhc2UgUEtUX1NFQ1JFVF9TVUJLRVk6CisrICAgIGNhc2UgUEtUX1NJR05BVFVSRToKKysgICAgY2FzZSBQS1RfVVNFUl9JRDoKKysgICAgY2FzZSBQS1RfQVRUUklCVVRFOgorKyAgICBjYXNlIFBLVF9SSU5HX1RSVVNUOgorKyAgICAgIHJldHVybiAxOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiAwOworKyAgICB9CisrfQorKworKworIC8qKioqKioqKioqKioqKioqCisgICogUmVhZCB0aGUgbmV4dCBrZXlibG9jayBmcm9tIHN0cmVhbSBBLgorICAqIFBFTkRJTkdfUEtUIHNob3VsZCBiZSBpbml0aWFsemVkIHRvIE5VTEwKK0BAIC00NjEsNyArNDgyLDcgQEAgcmVhZF9ibG9jayggSU9CVUYgYSwgUEFDS0VUICoqcGVuZGluZ19wa3QsIEtCTk9ERSAqcmV0X3Jvb3QgKQorIAkgICAgfQorIAkgICAgaW5fY2VydCA9IDE7CisgCSAgZGVmYXVsdDoKKy0JICAgIGlmKCBpbl9jZXJ0ICkgeworKwkgICAgaWYgKGluX2NlcnQgJiYgdmFsaWRfa2V5YmxvY2tfcGFja2V0IChwa3QtPnBrdHR5cGUpKSB7CisgCQlpZiggIXJvb3QgKQorIAkJICAgIHJvb3QgPSBuZXdfa2Jub2RlKCBwa3QgKTsKKyAJCWVsc2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvY29uZmlndXJlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAwNWFjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBnbnVwZy0xLjQuNy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdudXBnLTEuNC43L2NvbmZpZ3VyZS5hYworQEAgLTgyNyw3ICs4MjcsNiBAQCBlbHNlCisgICBBQ19TVUJTVChVU0VfTkxTKQorICAgQUNfU1VCU1QoVVNFX0lOQ0xVREVEX0xJQklOVEwpCisgICBBQ19TVUJTVChCVUlMRF9JTkNMVURFRF9MSUJJTlRMKQorLSAgQU1fUE9fU1VCRElSUworIGZpCisgCisgaWYgdGVzdCAiJHRyeV9leHRlbnNpb25zIiA9IHllcyB8fCB0ZXN0IHgiJGNhcmRfc3VwcG9ydCIgPSB4eWVzIDsgdGhlbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9jdXJsX3R5cGVvZl9maXhfYmFja3BvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L2N1cmxfdHlwZW9mX2ZpeF9iYWNrcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWZiMjRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9jdXJsX3R5cGVvZl9maXhfYmFja3BvcnQucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorCitUaGlzIGhhcyBiZWVuIGRpc2N1c3NlZCBpbiBhIGNvdXBsZSBvZiBkaWZmZXJlbnQgYnVnIHJlcG9ydGVkCit1cHN0cmVhbToKKworaHR0cDovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTQ4NjI1MAoraHR0cDovL2J1Z3Muc291cmNlbWFnZS5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDQ2CisKK0ZpeDoKK2h0dHA6Ly9saXN0cy5nbnVwZy5vcmcvcGlwZXJtYWlsL2dudXBnLWRldmVsLzIwMDgtQXByaWwvMDI0MzQ0Lmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbRGViaWFuXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBnbnVwZy0xLjQuNy9rZXlzZXJ2ZXIvZ3Bna2V5c19jdXJsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2tleXNlcnZlci9ncGdrZXlzX2N1cmwuYworKysrIGdudXBnLTEuNC43L2tleXNlcnZlci9ncGdrZXlzX2N1cmwuYworQEAgLTI4Niw3ICsyODYsNyBAQCBtYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkKKyAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsQ1VSTE9QVF9WRVJCT1NFLDEpOworICAgICB9CisgCistICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUixvcHQtPmZsYWdzLmNoZWNrX2NlcnQpOworKyAgY3VybF9lYXN5X3NldG9wdChjdXJsLENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsKGxvbmcpb3B0LT5mbGFncy5jaGVja19jZXJ0KTsKKyAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCxDVVJMT1BUX0NBSU5GTyxvcHQtPmNhX2NlcnRfZmlsZSk7CisgCisgICBpZihwcm94eSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvbG9uZy1sb25nLXRodW1iLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9sb25nLWxvbmctdGh1bWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg1NWNhYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvbG9uZy1sb25nLXRodW1iLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK09yaWduYWwgUGF0Y2ggY2FtZSBmcm9tIE9wZW5XcnQgdmlhIE9FLUNsYXNzaWMKK2h0dHBzOi8vZGV2Lm9wZW53cnQub3JnL2Jyb3dzZXIvcGFja2FnZXMvdXRpbHMvZ251cGcvcGF0Y2hlcy8wMDEtbWlwc19nY2M0LjQKK3doaWNoIGlzIG5vIGxvbmdlciBhIHZhbGlkIHJldmlzaW9uIQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKworLS0tIGdudXBnL21waS9sb25nbG9uZy5ofiAgICAgIDIwMDYtMDItMTQgMTA6MDk6NTUuMDAwMDAwMDAwICswMDAwCisrKysgZ251cGcvbXBpL2xvbmdsb25nLmggICAgICAgMjAwOC0xMC0yNyAxMzoxMTowOS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xODEsNyArMTgxLDcgQEAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoqKioqKioqKioqKioqICBBUk0gICoqKioqKioqKioqKioqKioqKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistI2lmIGRlZmluZWQgKF9fYXJtX18pICYmIFdfVFlQRV9TSVpFID09IDMyCisrI2lmIGRlZmluZWQgKF9fYXJtX18pICYmIFdfVFlQRV9TSVpFID09IDMyICYmICFkZWZpbmVkKF9fdGh1bWJfXykKKyAjZGVmaW5lIGFkZF9zc2FhYWEoc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgXAorICAgX19hc21fXyAoImFkZHMgJTEsICU0LCAlNVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAiYWRjICAlMCwgJTIsICUzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L21pcHNfZ2NjNC40LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9taXBzX2djYzQuNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTAzYjJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9taXBzX2djYzQuNC5wYXRjaApAQCAtMCwwICsxLDUwIEBACisKK0Zyb20gT3BlbmVtYmVkZGVkLUNsYXNzaWMKKworICAgIGdudXBnLTEuNC4xMDogUmVhZGQgdGhlIEFSTSBUaHVtYiBwYXRjaCBhcyBkZWJpYW4gaGFzIG5vIHRodW1iIHN1cHBvcnQKKworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkLXNwZWNpZmljXQorCitJbmRleDogZ251cGctMS40LjEwL21waS9sb25nbG9uZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40LjEwLm9yaWcvbXBpL2xvbmdsb25nLmgJMjAwOC0xMi0xMSAxNzozOTo0My4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbnVwZy0xLjQuMTAvbXBpL2xvbmdsb25nLmgJMjAxMC0wMy0yNyAxNDoyNzo1My4wMDAwMDAwMDAgKzAxMDAKK0BAIC03MDYsMTggKzcwNiwzNSBAQAorICNlbmRpZiAvKiBfX204ODExMF9fICovCisgI2VuZGlmIC8qIF9fbTg4MDAwX18gKi8KKyAKKysvKiBUZXN0IGZvciBnY2MgPj0gbWFqLm1pbiwgYXMgcGVyIF9fR05VQ19QUkVSRVEgaW4gZ2xpYmMgKi8KKysjaWYgZGVmaW5lZCAoX19HTlVDX18pICYmIGRlZmluZWQgKF9fR05VQ19NSU5PUl9fKQorKyNkZWZpbmUgX19HTlVDX1BSRVJFUShtYWosIG1pbikgXAorKwkoKF9fR05VQ19fIDw8IDE2KSArIF9fR05VQ19NSU5PUl9fID49ICgobWFqKSA8PCAxNikgKyAobWluKSkKKysjZWxzZQorKyNkZWZpbmUgX19HTlVDX1BSRVJFUShtYWosIG1pbikgIDAKKysjZW5kaWYKKysKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoqKioqKioqKioqKioqICBNSVBTICAqKioqKioqKioqKioqKioqKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgI2lmIGRlZmluZWQgKF9fbWlwc19fKSAmJiBXX1RZUEVfU0laRSA9PSAzMgorLSNpZiBfX0dOVUNfXyA+IDIgfHwgX19HTlVDX01JTk9SX18gPj0gNworKyNpZiBfX0dOVUNfUFJFUkVRICg0LDQpCisrI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KSBcCisrICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCVVESXR5cGUgX19sbCA9IChVREl0eXBlKSh1KSAqICh2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCXcxID0gX19sbCA+PiAzMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCXcwID0gX19sbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9IHdoaWxlICgwKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCAodW11bF9wcG1tKSAmJiBfX0dOVUNfUFJFUkVRICgyLDcpCisgI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KSBcCisgICBfX2FzbV9fICgibXVsdHUgJTIsJTMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkgICA6ICI9bCIgKChVU0l0eXBlKSh3MCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkgICAgICI9aCIgKChVU0l0eXBlKSh3MSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkgICA6ICJkIiAoKFVTSXR5cGUpKHUpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkgICAgICJkIiAoKFVTSXR5cGUpKHYpKSkKKy0jZWxzZQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCAodW11bF9wcG1tKQorICNkZWZpbmUgdW11bF9wcG1tKHcxLCB3MCwgdSwgdikgXAorICAgX19hc21fXyAoIm11bHR1ICUyLCUzIFxuIiBcCisgCSAgICJtZmxvICUwIFxuIiAgICAgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9kaXJtbmdyLXVzZXMtbGliZ3BnLWVycm9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9kaXJtbmdyLXVzZXMtbGliZ3BnLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZjE5NTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL2Rpcm1uZ3ItdXNlcy1saWJncGctZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitJbmRleDogZ251cGctMi4xLjAvZGlybW5nci9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTIuMS4wLm9yaWcvZGlybW5nci9NYWtlZmlsZS5hbQorKysrIGdudXBnLTIuMS4wL2Rpcm1uZ3IvTWFrZWZpbGUuYW0KK0BAIC03OCw3ICs3OCw4IEBAIGVuZGlmCisgZGlybW5ncl9MREFERCA9ICQobGliY29tbW9udGxzbnB0aCkgJChsaWJjb21tb25wdGgpIFwKKyAgICAgICAgICQoRE5TTElCUykgJChMSUJBU1NVQU5fTElCUykgXAorIAkkKExJQkdDUllQVF9MSUJTKSAkKEtTQkFfTElCUykgJChOUFRIX0xJQlMpIFwKKy0JJChOVEJUTFNfTElCUykgJChMSUJHTlVUTFNfTElCUykgJChMSUJJTlRMKSAkKExJQklDT05WKQorKwkkKE5UQlRMU19MSUJTKSAkKExJQkdOVVRMU19MSUJTKSAkKExJQklOVEwpICQoTElCSUNPTlYpIFwKKysJJChHUEdfRVJST1JfTElCUykKKyBpZiBVU0VfTERBUAorIGRpcm1uZ3JfTERBREQgKz0gJChsZGFwbGlicykKKyBlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9wa2djb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTU4NjAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSw5MCBAQAorVXNlIHBrZy1jb25maWcgdG8gZmluZCBwdGggaW5zdGVhZCBvZiBwdGgtY29uZmlnLgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAorW25vdCBzdWJtaXR0ZWQgYnV0IHRoZXkndmUgYmVlbiBjbGVhciB0aGV5IGRvbid0IHdhbnQgYSBwa2ctY29uZmlnIGRlcGVuZGVuY3ldCisKK1JQIDIwMTQvNS8yMgorCitJbmRleDogZ251cGctMi4xLjAvbTQvZ251cGctcHRoLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMi4xLjAub3JpZy9tNC9nbnVwZy1wdGgubTQKKysrKyBnbnVwZy0yLjEuMC9tNC9nbnVwZy1wdGgubTQKK0BAIC0xNywzMyArMTcsOSBAQCBkbmwgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAjIFRha2VuIGFuZCBtb2RpZmllZCBmcm9tIHRoZSBtNCBtYWNyb3Mgd2hpY2ggY29tZSB3aXRoIFB0aC4KKyBBQ19ERUZVTihbR05VUEdfUFRIX1ZFUlNJT05fQ0hFQ0tdLAorICAgWworLSAgICBfcHRoX3ZlcnNpb249YCRQVEhfQ09ORklHIC0tdmVyc2lvbiB8IGF3ayAnTlI9PTEge3ByaW50IFskXTN9J2AKKyAgICAgX3JlcV92ZXJzaW9uPSJpZmVsc2UoWyQxXSwsMS4yLjAsJDEpIgorKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhQVEgsIFtwdGggPj0gJF9yZXFfdmVyc2lvbl0sIFtoYXZlX3B0aD15ZXNdLCBbaGF2ZV9wdGg9bm9dKQorIAorLSAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIFBUSCAtIHZlcnNpb24gPj0gJF9yZXFfdmVyc2lvbikKKy0gICAgZm9yIF92YXIgaW4gX3B0aF92ZXJzaW9uIF9yZXFfdmVyc2lvbjsgZG8KKy0gICAgICAgIGV2YWwgIl92YWw9XCJcJCR7X3Zhcn1cIiIKKy0gICAgICAgIF9tYWpvcj1gZWNobyAkX3ZhbCB8IHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwoW1thYi5dXVwpXChbWzAtOV1dKlwpL1wxLydgCistICAgICAgICBfbWlub3I9YGVjaG8gJF92YWwgfCBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcKFtbYWIuXV1cKVwoW1swLTldXSpcKS9cMi8nYAorLSAgICAgICAgX3J0eXBlPWBlY2hvICRfdmFsIHwgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXChbW2FiLl1dXClcKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAgICAgIF9taWNybz1gZWNobyAkX3ZhbCB8IHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwoW1thYi5dXVwpXChbWzAtOV1dKlwpL1w0LydgCistICAgICAgICBjYXNlICRfcnR5cGUgaW4KKy0gICAgICAgICAgICAiYSIgKSBfcnR5cGU9MCA7OworLSAgICAgICAgICAgICJiIiApIF9ydHlwZT0xIDs7CistICAgICAgICAgICAgIi4iICkgX3J0eXBlPTIgOzsKKy0gICAgICAgIGVzYWMKKy0gICAgICAgIF9oZXg9YGVjaG8gZHVtbXkgfCBhd2sgJ3sgcHJpbnRmKCIlZCUwMmQlMWQlMDJkIiwgbWFqb3IsIG1pbm9yLCBydHlwZSwgbWljcm8pOyB9JyBcCistICAgICAgICAgICAgICAibWFqb3I9JF9tYWpvciIgIm1pbm9yPSRfbWlub3IiICJydHlwZT0kX3J0eXBlIiAibWljcm89JF9taWNybyJgCistICAgICAgICBldmFsICIke192YXJ9X2hleD1cIlwkX2hleFwiIgorLSAgICBkb25lCistICAgIGhhdmVfcHRoPW5vCistICAgIGlmIHRlc3QgIi4kX3B0aF92ZXJzaW9uX2hleCIgIT0gLjsgdGhlbgorLSAgICAgICAgaWYgdGVzdCAiLiRfcmVxX3ZlcnNpb25faGV4IiAhPSAuOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAkX3B0aF92ZXJzaW9uX2hleCAtZ2UgJF9yZXFfdmVyc2lvbl9oZXg7IHRoZW4KKy0gICAgICAgICAgICAgICAgaGF2ZV9wdGg9eWVzCistICAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgIGZpCisgICAgIGlmIHRlc3QgJGhhdmVfcHRoID0geWVzOyB0aGVuCisgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgUFRIIGluc3RhbGxhdGlvbiBpcyBzYW5lXSkKK0BAIC01MSw5ICsyNyw5IEBAIEFDX0RFRlVOKFtHTlVQR19QVEhfVkVSU0lPTl9DSEVDS10sCisgICAgICAgICAgX2dudXBnX3B0aF9zYXZlX2NmbGFncz0kQ0ZMQUdTCisgICAgICAgICAgX2dudXBnX3B0aF9zYXZlX2xkZmxhZ3M9JExERkxBR1MKKyAgICAgICAgICBfZ251cGdfcHRoX3NhdmVfbGlicz0kTElCUworLSAgICAgICAgIENGTEFHUz0iJENGTEFHUyBgJFBUSF9DT05GSUcgLS1jZmxhZ3NgIgorLSAgICAgICAgIExERkxBR1M9IiRMREZMQUdTIGAkUFRIX0NPTkZJRyAtLWxkZmxhZ3NgIgorLSAgICAgICAgIExJQlM9IiRMSUJTIGAkUFRIX0NPTkZJRyAtLWxpYnMgLS1hbGxgIgorKyAgICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIX0NGTEFHUyIKKysgICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAkUFRIX0xERkxBR1MiCisrICAgICAgICAgTElCUz0iJExJQlMgJFBUSF9MSUJTIgorICAgICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDxwdGguaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbWyBwdGhfaW5pdCAoKTtdXSldLAorQEAgLTgwLDI2ICs1NiwxMyBAQCBBQ19ERUZVTihbR05VUEdfUFRIX1ZFUlNJT05fQ0hFQ0tdLAorICMgUFRIX0NMRkFHUyBhbmQgUFRIX0xJQlMgYXJlIEFTX1NVQlNULgorICMKKyBBQ19ERUZVTihbR05VUEdfUEFUSF9QVEhdLAorLVsgQUNfQVJHX1dJVEgocHRoLXByZWZpeCwKKy0gICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1wdGgtcHJlZml4PVBGWF0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeCB3aGVyZSBHTlUgUHRoIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCistICAgICBwdGhfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCBwdGhfY29uZmlnX3ByZWZpeD0iIikKKy0gIGlmIHRlc3QgeCRwdGhfY29uZmlnX3ByZWZpeCAhPSB4IDsgdGhlbgorLSAgICAgUFRIX0NPTkZJRz0iJHB0aF9jb25maWdfcHJlZml4L2Jpbi9wdGgtY29uZmlnIgorLSAgZmkKKy0gIEFDX1BBVEhfUFJPRyhQVEhfQ09ORklHLCBwdGgtY29uZmlnLCBubykKKytbCisgICB0bXA9aWZlbHNlKFskMV0sICwxLjMuNywkMSkKKy0gIGlmIHRlc3QgIiRQVEhfQ09ORklHIiAhPSAibm8iOyB0aGVuCistICAgIEdOVVBHX1BUSF9WRVJTSU9OX0NIRUNLKCR0bXApCistICAgIGlmIHRlc3QgJGhhdmVfcHRoID0geWVzOyB0aGVuICAgICAgCistICAgICAgIFBUSF9DRkxBR1M9YCRQVEhfQ09ORklHIC0tY2ZsYWdzYAorLSAgICAgICBQVEhfTElCUz1gJFBUSF9DT05GSUcgLS1sZGZsYWdzYAorLSAgICAgICBQVEhfTElCUz0iJFBUSF9MSUJTIGAkUFRIX0NPTkZJRyAtLWxpYnMgLS1hbGxgIgorLSAgICAgICBBQ19ERUZJTkUoSEFWRV9QVEgsIDEsCisrICBHTlVQR19QVEhfVkVSU0lPTl9DSEVDSygkdG1wKQorKyAgaWYgdGVzdCAkaGF2ZV9wdGggPSB5ZXM7IHRoZW4KKysgICAgICBBQ19ERUZJTkUoSEFWRV9QVEgsIDEsCisgICAgICAgICAgICAgICAgIFtEZWZpbmVkIGlmIHRoZSBHTlUgUHRoIGlzIGF2YWlsYWJsZV0pCistICAgIGZpCisgICBmaQorICAgQUNfU1VCU1QoUFRIX0NGTEFHUykKKyAgIEFDX1NVQlNUKFBUSF9MSUJTKQorIF0pCistCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL3VzZS1wa2djb25maWctaW5zdGVhZC1vZi1ucHRoLWNvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvdXNlLXBrZ2NvbmZpZy1pbnN0ZWFkLW9mLW5wdGgtY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZGJmMWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL3VzZS1wa2djb25maWctaW5zdGVhZC1vZi1ucHRoLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDcyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29wZW5lbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCisKK0luZGV4OiBnbnVwZy0yLjEuMC9tNC9ucHRoLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMi4xLjAub3JpZy9tNC9ucHRoLm00CisrKysgZ251cGctMi4xLjAvbTQvbnB0aC5tNAorQEAgLTE3LDEwICsxNywxMCBAQCBBQ19ERUZVTihbX0FNX1BBVEhfTlBUSF9DT05GSUddLAorICAgaWYgdGVzdCAieCRucHRoX2NvbmZpZ19wcmVmaXgiICE9IHggOyB0aGVuCisgICAgICAgTlBUSF9DT05GSUc9IiRucHRoX2NvbmZpZ19wcmVmaXgvYmluL25wdGgtY29uZmlnIgorICAgZmkKKy0gIEFDX1BBVEhfUFJPRyhOUFRIX0NPTkZJRywgbnB0aC1jb25maWcsIG5vKQorKyAgQUNfUEFUSF9QUk9HKFBLR0NPTkZJRywgcGtnLWNvbmZpZywgbm8pCisgCistICBpZiB0ZXN0ICIkTlBUSF9DT05GSUciICE9ICJubyIgOyB0aGVuCistICAgIG5wdGhfdmVyc2lvbj1gJE5QVEhfQ09ORklHIC0tdmVyc2lvbmAKKysgIGlmIHRlc3QgIiRQS0dDT05GSUciICE9ICJubyIgOyB0aGVuCisrICAgIG5wdGhfdmVyc2lvbj1gJFBLR0NPTkZJRyAtLW1vZHZlcnNpb24gbnB0aGAKKyAgIGZpCisgICBucHRoX3ZlcnNpb25fbWFqb3I9YGVjaG8gJG5wdGhfdmVyc2lvbiB8IFwKKyAgICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorQEAgLTQ1LDcgKzQ1LDcgQEAgQUNfREVGVU4oW0FNX1BBVEhfTlBUSF0sCisgCisgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIE5QVEggLSB2ZXJzaW9uID49ICRtaW5fbnB0aF92ZXJzaW9uKQorICAgb2s9bm8KKy0gIGlmIHRlc3QgIiROUFRIX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKysgIGlmIHRlc3QgIiRQS0dDT05GSUciICE9ICJubyIgOyB0aGVuCisgICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX25wdGhfdmVyc2lvbiB8IFwKKyAgICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKKyAgICAgcmVxX21pbm9yPWBlY2hvICRtaW5fbnB0aF92ZXJzaW9uIHwgXAorQEAgLTY2LDI4ICs2Niw5IEBAIEFDX0RFRlVOKFtBTV9QQVRIX05QVEhdLAorICAgZmkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgIEFDX01TR19SRVNVTFQoW3llcyAoJG5wdGhfdmVyc2lvbildKQorLSAgZWxzZQorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorLSAgZmkKKy0gIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgICAjIElmIHdlIGhhdmUgYSByZWNlbnQgTlBUSCwgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUKKy0gICAgICMgQVBJIGlzIGNvbXBhdGlibGUuCistICAgICBpZiB0ZXN0ICIkcmVxX25wdGhfYXBpIiAtZ3QgMCA7IHRoZW4KKy0gICAgICAgIHRtcD1gJE5QVEhfQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorLSAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCistICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW05QVEggQVBJIHZlcnNpb25dKQorLSAgICAgICAgICAgaWYgdGVzdCAiJHJlcV9ucHRoX2FwaSIgLWVxICIkdG1wIiA7IHRoZW4KKy0gICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbb2theV0pCistICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgIG9rPW5vCistICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoW2RvZXMgbm90IG1hdGNoLiB3YW50PSRyZXFfbnB0aF9hcGkgZ290PSR0bXBdKQorLSAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgICBmaQorLSAgZmkKKy0gIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIE5QVEhfQ0ZMQUdTPWAkTlBUSF9DT05GSUcgLS1jZmxhZ3NgCistICAgIE5QVEhfTElCUz1gJE5QVEhfQ09ORklHIC0tbGlic2AKKysgICAgTlBUSF9DRkxBR1M9YCRQS0dDT05GSUcgLS1jZmxhZ3MgbnB0aGAKKysgICAgTlBUSF9MSUJTPWAkUEtHQ09ORklHIC0tbGlicyBucHRoYAorKyAgICBBQ19NU0dfV0FSTihbW0dPVCBIRVJFIC0gJE5QVEhfTElCUyBdXSkKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKyAgICAgbnB0aF9jb25maWdfaG9zdD1gJE5QVEhfQ09ORklHIC0taG9zdCAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vbmVgCisgICAgIGlmIHRlc3QgeCIkbnB0aF9jb25maWdfaG9zdCIgIT0geG5vbmUgOyB0aGVuCitAQCAtMTAzLDYgKzg0LDcgQEAgQUNfREVGVU4oW0FNX1BBVEhfTlBUSF0sCisgICAgICAgZmkKKyAgICAgZmkKKyAgIGVsc2UKKysgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgTlBUSF9DRkxBR1M9IiIKKyAgICAgTlBUSF9MSUJTPSIiCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnXzEuNC43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18xLjQuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTk5ZjgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18xLjQuNy5iYgpAQCAtMCwwICsxLDEwNSBAQAorU1VNTUFSWSA9ICJHTlUgUHJpdmFjeSBHdWFyZCAtIGVuY3J5cHRpb24gYW5kIHNpZ25pbmcgdG9vbHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy8iCitERVBFTkRTID0gInpsaWIgYnppcDIgcmVhZGxpbmUiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIgorCitQUiA9ICJyOSIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9nbnVwZy9nbnVwZy0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2xvbmctbG9uZy10aHVtYi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWlwc19nY2M0LjQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vR251UEcxLUNWRS0yMDEyLTYwODUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY3VybF90eXBlb2ZfZml4X2JhY2twb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDEzLTQzNTEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTMtNDU3Ni5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxMy00MjQyLnBhdGNoIFwKKwkgICIKKworU1JDX1VSSVttZDVzdW1dID0gImIwNmExNDFjY2E1Y2QxYTU1YmJkZDI1YWI4MzMzMDNjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY5ZDE4YjdkMTkzZjYyY2EyN2VkNGZlYmNiNGM5MDQ0YWEwYzk1MzA1ZDMyNThmZTkwMmUyZmFlNWZjNjQ2OGQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCisjICAgLS13aXRoLWVnZC1zb2NrZXQ9TkFNRSAgdXNlIE5BTUUgZm9yIHRoZSBFR0Qgc29ja2V0CisjICAgLS13aXRoLXBob3RvLXZpZXdlcj1GSVhFRF9WSUVXRVIgIHNldCBhIGZpeGVkIHBob3RvIElEIHZpZXdlcgorIyAgIC0td2l0aC1pbmNsdWRlZC16bGliICAgIHVzZSB0aGUgemxpYiBjb2RlIGluY2x1ZGVkIGhlcmUKKyMgICAtLXdpdGgtY2FwYWJpbGl0aWVzICAgICB1c2UgbGludXggY2FwYWJpbGl0aWVzIGRlZmF1bHQ9bm8KKyMgICAtLXdpdGgtbWFpbHByb2c9TkFNRSAgICB1c2UgIk5BTUUgLXQiIGZvciBtYWlsIHRyYW5zcG9ydAorIyAgIC0td2l0aC1saWJpY29udi1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliaWNvbnYgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKyMgICAtLXdpdGhvdXQtbGliaWNvbnYtcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYmljb252IGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcgorIyAgIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0IHVzZSB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpbmNsdWRlZCBoZXJlCisjICAgLS13aXRoLWxpYmludGwtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYmludGwgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKyMgICAtLXdpdGhvdXQtbGliaW50bC1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliaW50bCBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXIKKyMgICAtLXdpdGhvdXQtcmVhZGxpbmUgICAgICBkbyBub3Qgc3VwcG9ydCBmYW5jeSBjb21tYW5kIGxpbmUgZWRpdGluZworIyAgIC0td2l0aC1pbmNsdWRlZC1yZWdleCAgIHVzZSB0aGUgaW5jbHVkZWQgR05VIHJlZ2V4IGxpYnJhcnkKKyMgICAtLXdpdGgtemxpYj1ESVIgICAgICAgICB1c2UgbGlieiBpbiBESVIKKyMgICAtLXdpdGgtYnppcDI9RElSICAgICAgICBsb29rIGZvciBiemlwMiBpbiBESVIKKyMgICAtLWVuYWJsZS1zdGF0aWMtcm5kPWVnZHx1bml4fGxpbnV4fGF1dG8KKyMgICAtLWRpc2FibGUtZGV2LXJhbmRvbSAgICBkaXNhYmxlIHRoZSB1c2Ugb2YgZGV2IHJhbmRvbQorIyAgIC0tZGlzYWJsZS1hc20gICAgICAgICAgIGRvIG5vdCB1c2UgYXNzZW1ibGVyIG1vZHVsZXMKKyMgICAtLWVuYWJsZS1tLWd1YXJkICAgICAgICBlbmFibGUgbWVtb3J5IGd1YXJkIGZhY2lsaXR5CisjICAgLS1lbmFibGUtc2VsaW51eC1zdXBwb3J0CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlIFNFTGludXggc3VwcG9ydAorIyAgIC0tZGlzYWJsZS1jYXJkLXN1cHBvcnQgIGRpc2FibGUgT3BlblBHUCBjYXJkIHN1cHBvcnQKKyMgICAtLWRpc2FibGUtZ251cGctaWNvbnYgICBkaXNhYmxlIHRoZSBuZXcgaWNvbnYgY29kZQorIyAgIC0tZW5hYmxlLWJhY2tzaWdzICAgICAgIGVuYWJsZSB0aGUgZXhwZXJpbWVudGFsIGJhY2tzaWdzIGNvZGUKKyMgICAtLWVuYWJsZS1taW5pbWFsICAgICAgICBidWlsZCB0aGUgc21hbGxlc3QgZ3BnIGJpbmFyeSBwb3NzaWJsZQorIyAgIC0tZGlzYWJsZS1yc2EgICAgICAgICAgIGRpc2FibGUgdGhlIFJTQSBwdWJsaWMga2V5IGFsZ29yaXRobQorIyAgIC0tZGlzYWJsZS1pZGVhICAgICAgICAgIGRpc2FibGUgdGhlIElERUEgY2lwaGVyCisjICAgLS1kaXNhYmxlLWNhc3Q1ICAgICAgICAgZGlzYWJsZSB0aGUgQ0FTVDUgY2lwaGVyCisjICAgLS1kaXNhYmxlLWJsb3dmaXNoICAgICAgZGlzYWJsZSB0aGUgQkxPV0ZJU0ggY2lwaGVyCisjICAgLS1kaXNhYmxlLWFlcyAgICAgICAgICAgZGlzYWJsZSB0aGUgQUVTLCBBRVMxOTIsIGFuZCBBRVMyNTYgY2lwaGVycworIyAgIC0tZGlzYWJsZS10d29maXNoICAgICAgIGRpc2FibGUgdGhlIFRXT0ZJU0ggY2lwaGVyCisjICAgLS1kaXNhYmxlLXNoYTI1NiAgICAgICAgZGlzYWJsZSB0aGUgU0hBLTI1NiBkaWdlc3QKKyMgICAtLWRpc2FibGUtc2hhNTEyICAgICAgICBkaXNhYmxlIHRoZSBTSEEtMzg0IGFuZCBTSEEtNTEyIGRpZ2VzdHMKKyMgICAtLWRpc2FibGUtYnppcDIgICAgICAgICBkaXNhYmxlIHRoZSBCWklQMiBjb21wcmVzc2lvbiBhbGdvcml0aG0KKyMgICAtLWRpc2FibGUtZXhlYyAgICAgICAgICBkaXNhYmxlIGFsbCBleHRlcm5hbCBwcm9ncmFtIGV4ZWN1dGlvbgorIyAgIC0tZGlzYWJsZS1waG90by12aWV3ZXJzIGRpc2FibGUgcGhvdG8gSUQgdmlld2VycworIyAgIC0tZGlzYWJsZS1rZXlzZXJ2ZXItaGVscGVycyAgZGlzYWJsZSBhbGwgZXh0ZXJuYWwga2V5c2VydmVyIHN1cHBvcnQKKyMgICAtLWRpc2FibGUtbGRhcCAgICAgICAgICBkaXNhYmxlIExEQVAga2V5c2VydmVyIGludGVyZmFjZQorIyAgIC0tZGlzYWJsZS1oa3AgICAgICAgICAgIGRpc2FibGUgSEtQIGtleXNlcnZlciBpbnRlcmZhY2UKKyMgICAtLWRpc2FibGUtaHR0cCAgICAgICAgICBkaXNhYmxlIEhUVFAga2V5IGZldGNoaW5nIGludGVyZmFjZQorIyAgIC0tZGlzYWJsZS1maW5nZXIgICAgICAgIGRpc2FibGUgRmluZ2VyIGtleSBmZXRjaGluZyBpbnRlcmZhY2UKKyMgICAtLWRpc2FibGUtbWFpbHRvICAgICAgICBkaXNhYmxlIGVtYWlsIGtleXNlcnZlciBpbnRlcmZhY2UKKyMgICAtLWRpc2FibGUta2V5c2VydmVyLXBhdGggZGlzYWJsZSB0aGUgZXhlYy1wYXRoIG9wdGlvbiBmb3Iga2V5c2VydmVyIGhlbHBlcnMKKyMgICAtLWVuYWJsZS1rZXktY2FjaGU9U0laRSBTZXQga2V5IGNhY2hlIHRvIFNJWkUgKGRlZmF1bHQgNDA5NikKKyMgICAtLWRpc2FibGUtbGFyZ2VmaWxlICAgICBvbWl0IHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzCisjICAgLS1kaXNhYmxlLWRucy1zcnYgICAgICAgZGlzYWJsZSB0aGUgdXNlIG9mIEROUyBTUlYgaW4gSEtQIGFuZCBIVFRQCisjICAgLS1kaXNhYmxlLW5scyAgICAgICAgICAgZG8gbm90IHVzZSBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIyAgIC0tZGlzYWJsZS1yZWdleCAgICAgICAgIGRvIG5vdCBoYW5kbGUgcmVndWxhciBleHByZXNzaW9ucyBpbiB0cnVzdCBzaWdzCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtbGRhcCBcCisJCS0td2l0aC16bGliPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKwkJLS13aXRoLWJ6aXAyPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKwkJLS1kaXNhYmxlLXNlbGludXgtc3VwcG9ydCBcCisgICAgICAgICAgICAgICAgLS13aXRoLXJlYWRsaW5lPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKyAgICAgICAgICAgICAgICBhY19jdl9zeXNfc3ltYm9sX3VuZGVyc2NvcmU9bm8gXAorCQkiCisKKyMgRm9yY2UgZ2NjJ3MgdHJhZGl0aW9uYWwgaGFuZGxpbmcgb2YgaW5saW5lIHRvIGF2b2lkIGlzc3VlcyB3aXRoIGdjYyA1CitDRkxBR1MgKz0gIi1mZ251ODktaW5saW5lIgorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7ZG9jZGlyfS8ke0JQTn0KKwltdiAke0R9JHtkYXRhZGlyfS8ke0JQTn0vKiAke0R9LyR7ZG9jZGlyfS8ke0JQTn0vIHx8IDoKKwltdiAke0R9JHtwcmVmaXh9L2RvYy8qICR7RH0vJHtkb2NkaXJ9LyR7QlBOfS8gfHwgOgorfQorCisjIHNwbGl0IG91dCBncGd2IGZyb20gbWFpbiBwYWNrYWdlCitSREVQRU5EU18ke1BOfSA9ICJncGd2IgorUEFDS0FHRVMgPSsgImdwZ3YiCitGSUxFU19ncGd2ID0gIiR7YmluZGlyfS9ncGd2IgorCisjIEV4Y2x1ZGUgZGVidWcgZmlsZXMgZnJvbSB0aGUgbWFpbiBwYWNrYWdlcworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyogJHtkYXRhZGlyfS8ke0JQTn0gJHtsaWJleGVjZGlyfS8ke0JQTn0vKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS8ke0JQTn0vLmRlYnVnIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tjdXJsXSA9ICItLXdpdGgtbGliY3VybD0ke1NUQUdJTkdfTElCRElSfSwtLXdpdGhvdXQtbGliY3VybCxjdXJsIgorUEFDS0FHRUNPTkZJR1tsaWJ1c2JdID0gIi0td2l0aC1saWJ1c2I9JHtTVEFHSU5HX0xJQkRJUn0sLS13aXRob3V0LWxpYnVzYixsaWJ1c2ItY29tcGF0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18yLjEuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMi4xLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhjN2M5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMi4xLjcuYmIKQEAgLTAsMCArMSw0MSBAQAorU1VNTUFSWSA9ICJHTlUgUHJpdmFjeSBHdWFyZCAtIGVuY3J5cHRpb24gYW5kIHNpZ25pbmcgdG9vbHMgKDIueCkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy8iCitMSUNFTlNFID0gIkdQTHYzICYgTEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IgorCitERVBFTkRTID0gIm5wdGggbGliYXNzdWFuIGxpYmtzYmEgemxpYiBiemlwMiByZWFkbGluZSBsaWJnY3J5cHQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyBwa2djb25maWcKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VzZS1wa2djb25maWctaW5zdGVhZC1vZi1ucHRoLWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXJtbmdyLXVzZXMtbGliZ3BnLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlYmRmOTJiMTViOGJjZDg1NzliNjQzYzdmNDFhMzIzOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjMThhMzc3NmQ0N2ZlYzk4ODkyZDUxZDI4YjY1NzRlZjE2YmYwYTI1ZWFiYjA5NTYyMzEwNThhYWYyZTc4NDZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWxkYXAgXAorCQktLWRpc2FibGUtY2NpZC1kcml2ZXIgXAorCQktLXdpdGgtemxpYj0ke1NUQUdJTkdfTElCRElSfS8uLiBcCisJCS0td2l0aC1iemlwMj0ke1NUQUdJTkdfTElCRElSfS8uLiBcCisgICAgICAgICAgICAgICAgLS13aXRoLXJlYWRsaW5lPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKyAgICAgICAgICAgICAgICIKK1JSRUNPTU1FTkRTXyR7UE59ID0gInBpbmVudHJ5IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBFbHNlIHRoZXNlIGNvdWxkIGJlIHVzZWQgaW4gcHJlZmVybmNlIHRvIHRob3NlIGluIGFjbG9jYWwtY29weQorCXJtIC1mICR7U30vbTQvZ3BnLWVycm9yLm00CisJcm0gLWYgJHtTfS9tNC9saWJhc3N1YW4ubTQKKwlybSAtZiAke1N9L200L2tzYmEubTQKKwlybSAtZiAke1N9L200L2xpYmdjcnlwdC5tNAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlsbiAtc2YgZ3BnMiAke0R9JHtiaW5kaXJ9L2dwZworCWxuIC1zZiBncGd2MiAke0R9JHtiaW5kaXJ9L2dwZ3YKK30KKworUkRFUEVORFNfJHtQTn0gPSAiZ251dGxzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliMTM4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy5pbmMKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJHTlUgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IExpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ251dGxzLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9zYXZhbm5haC5nbnUub3JnL3N1cHBvcnQvP2dyb3VwPWdudXRscyIKK0RFUEVORFMgPSAibmV0dGxlIgorCitMSUNFTlNFID0gIkdQTHYzKyAmIExHUEx2Mi4xKyIKK0xJQ0VOU0VfJHtQTn0gPSAiTEdQTHYyLjErIgorTElDRU5TRV8ke1BOfS14eCA9ICJMR1BMdjIuMSsiCitMSUNFTlNFXyR7UE59LWJpbiA9ICJHUEx2MysiCitMSUNFTlNFXyR7UE59LW9wZW5zc2wgPSAiR1BMdjMrIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUjttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMiCisKKworU0hSVF9WRVIgPSAiJHtAZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLicpWzBdfS4ke0BkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMV19IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnV0bHMub3JnL2djcnlwdC9nbnV0bHMvdiR7U0hSVF9WRVJ9L2dudXRscy0ke1BWfS50YXIueHoiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gYmluY29uZmlnIHBrZ2NvbmZpZyBnZXR0ZXh0IGxpYl9wYWNrYWdlCisKK0VYVFJBX09FQ09ORj0iLS1kaXNhYmxlLXJwYXRoIFwKKyAgICAgICAgICAgICAgLS13aXRoLWluY2x1ZGVkLWxpYnRhc24xIFwKKyAgICAgICAgICAgICAgLS1lbmFibGUtbG9jYWwtbGlib3B0cyBcCisgICAgICAgICAgICAgIC0td2l0aC1saWJwdGhyZWFkLXByZWZpeD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IFwKKyAgICAgICAgICAgICAgLS1kaXNhYmxlLWd1aWxlIFwKKyAgICAgICAgICAgICAgLS1kaXNhYmxlLWNyeXdyYXAgXAorICAgICAgICAgICAgICAtLXdpdGhvdXQtcDExLWtpdCBcCisgICAgICAgICAgICAgICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJZm9yIGRpciBpbiAuIGxpYjsgZG8KKwkJcm0gLWYgJHtkaXJ9L2FjbG9jYWwubTQgJHtkaXJ9L200L2xpYnRvb2wubTQgJHtkaXJ9L200L2x0Ki5tNAorCWRvbmUKK30KKworUEFDS0FHRUNPTkZJRyA/Pz0gInpsaWIiCitQQUNLQUdFQ09ORklHW3RwbV0gPSAiLS13aXRoLXRwbSwgLS13aXRob3V0LXRwbSwgdHJvdXNlcnMiCitQQUNLQUdFQ09ORklHW3psaWJdID0gIi0td2l0aC16bGliLCAtLXdpdGhvdXQtemxpYiwgemxpYiIKKworUEFDS0FHRVMgPSsgIiR7UE59LW9wZW5zc2wgJHtQTn0teHgiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2dudXRscy1jbGktZGVidWciCitGSUxFU18ke1BOfS1vcGVuc3NsID0gIiR7bGliZGlyfS9saWJnbnV0bHMtb3BlbnNzbC5zby4qIgorRklMRVNfJHtQTn0teHggPSAiJHtsaWJkaXJ9L2xpYmdudXRsc3h4LnNvLioiCisKK0xERkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjICs9ICIgLXB0aHJlYWQiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9jb25maWd1cmUuYWMtZml4LXNlZC1jb21tYW5kLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL2NvbmZpZ3VyZS5hYy1maXgtc2VkLWNvbW1hbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRhOTkzNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9jb25maWd1cmUuYWMtZml4LXNlZC1jb21tYW5kLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gZWI5M2FhN2I5ODZjODRkYTYwYTNkYjQwYWZiMjlkMWE3MGM1MDIyMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogU2F0LCAxNyBKYW4gMjAxNSAxNzowMjoxNSArMDAwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmUuYWM6IGZpeCBzZWQgY29tbWFuZAorCitUaGUgInNlZCAncy8uYmFrLy9nJyIgbWF0Y2hzICJiaXRiYWtlIiwgd2hpY2ggd291bGQgY2F1c2Ugc3RyYW5nZSBlcnJvcnMKK3doZW4gdGhlIFMgY29udGFpbnMgImJpdGJha2UiLCBmaXggdG8gInNlZCAncy9cLmJhayQvLydgIgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGM2ODE4YTAuLjFjNDU4MmQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTQ2Niw3ICs0NjYsNyBAQCBpZiB0ZXN0ICIkTkVFRF9MSUJPUFRTX0RJUiIgPSAidHJ1ZSI7dGhlbgorIAlkbmwgcmVwbGFjZSBsaWJvcHRzLWdlbmVyYXRlZCBmaWxlcyB3aXRoIGRpc3RyaWJ1dGVkIGJhY2t1cHMsIGlmIHByZXNlbnQKKyAJbWlzc2luZ19iYWtzPQorIAlmb3IgaSBpbiAke3NyY2Rpcn0vc3JjLyotYXJncy5jLmJhayAke3NyY2Rpcn0vc3JjLyotYXJncy5oLmJhazsgZG8KKy0JCW5hbT1gZWNobyAkaXxzZWQgJ3MvLmJhay8vZydgCisrCQluYW09YGVjaG8gJGl8c2VkICdzL1wuYmFrJC8vJ2AKKyAJCWlmIHRlc3QgLWYgJGk7dGhlbgorIAkJCWNwIC1mICRpICRuYW0KKyAJCWVsc2UKKy0tIAorMi4wLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL2NvcnJlY3RfcnBsX2dldHRpbWVvZmRheV9zaWduYXR1cmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvY29ycmVjdF9ycGxfZ2V0dGltZW9mZGF5X3NpZ25hdHVyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQ1MmM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL2NvcnJlY3RfcnBsX2dldHRpbWVvZmRheV9zaWduYXR1cmUucGF0Y2gKQEAgLTAsMCArMSw2NyBAQAorRnJvbSBhZTMzNzA3ODhlZDM0NDdiYmExNjk2OWQ5ZWIxYmYxYjk2MzFlMWI3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVmFsZW50aW4gUG9wYSA8dmFsZW50aW4ucG9wYUBpbnRlbC5jb20+CitEYXRlOiBGcmksIDI1IEFwciAyMDE0IDEzOjU4OjU1ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIENvcnJlY3QgcnBsX2dldHRpbWVvZmRheSBzaWduYXR1cmUKKworQ3VycmVudGx5IHdlIGZhaWwgb24gdWNsaWJjIGxpa2UgYmVsb3cKKworfCBJbiBmaWxlIGluY2x1ZGVkIGZyb20gL2hvbWUva3Jhai93b3JrL2FuZ3N0cm9tL3NvdXJjZXMvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLXVjbGliYy9zeXNyb290cy9xZW11YXJtL3Vzci9pbmNsdWRlL3N5cy9wcm9jZnMuaDozMjowLAorfCAgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUva3Jhai93b3JrL2FuZ3N0cm9tL3NvdXJjZXMvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLXVjbGliYy9zeXNyb290cy9xZW11YXJtL3Vzci9pbmNsdWRlL3N5cy91Y29udGV4dC5oOjI2LAorfCAgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUva3Jhai93b3JrL2FuZ3N0cm9tL3NvdXJjZXMvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLXVjbGliYy9zeXNyb290cy9xZW11YXJtL3Vzci9pbmNsdWRlL3NpZ25hbC5oOjM5MiwKK3wgICAgICAgICAgICAgICAgICBmcm9tIC4uLy4uL2dsL3NpZ25hbC5oOjUyLAorfCAgICAgICAgICAgICAgICAgIGZyb20gLi4vLi4vZ2wvc3lzL3NlbGVjdC5oOjU4LAorfCAgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUva3Jhai93b3JrL2FuZ3N0cm9tL3NvdXJjZXMvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLXVjbGliYy9zeXNyb290cy9xZW11YXJtL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oOjIyMCwKK3wgICAgICAgICAgICAgICAgICBmcm9tIC4uLy4uL2dsL3N5cy90eXBlcy5oOjI4LAorfCAgICAgICAgICAgICAgICAgIGZyb20gLi4vLi4vbGliL2luY2x1ZGVzL2dudXRscy9nbnV0bHMuaDo0NiwKK3wgICAgICAgICAgICAgICAgICBmcm9tIGV4LWN4eC5jcHA6MzoKK3wgLi4vLi4vZ2wvc3lzL3RpbWUuaDozOTY6NjY6IGVycm9yOiBjb25mbGljdGluZyBkZWNsYXJhdGlvbiAndm9pZCogcmVzdHJpY3QnCit8IC4uLy4uL2dsL3N5cy90aW1lLmg6Mzk2OjUwOiBlcnJvcjogJ3Jlc3RyaWN0JyBoYXMgYSBwcmV2aW91cyBkZWNsYXJhdGlvbiBhcyAndGltZXZhbCogcmVzdHJpY3QnCit8IG1ha2VbNF06ICoqKiBbZXgtY3h4Lm9dIEVycm9yIDEKK3wgbWFrZVs0XTogKioqIFdhaXRpbmcgZm9yIHVuZmluaXNoZWQgam9icy4uLi4KKworR0NDIGRldGVjdHMgdGhhdCB3ZSBjYWxsICdyZXN0cmljdCcgYXMgcGFyYW0gbmFtZSBpbiBmdW5jdGlvbgorc2lnbmF0dXJlcyBhbmQgY29tcGxhaW5zIHNpbmNlIGJvdGggcGFyYW1zIGFyZSBjYWxsZWQgJ3Jlc3RyaWN0JwordGhlcmVmb3JlIHdlIHVzZSBfX3Jlc3RyaWN0IHRvIGRlbm90ZSB0aGUgQzk5IGtleXdvcmsKKworVGhpcyBvbmx5IGhhcHBlbnMgb2YgdWNsaWJjIHNpbmNlIHRoaXMgY29kZSBpcyBub3QgZXhjZXJjaXNlZCB3aXRoCitlZ2xpYmMgb3RoZXJ3aXNlIHdlIHdpbGwgaGF2ZSBzYW1lIGlzc3VlIHRoZXJlIHRvbworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdsL3N5c190aW1lLmluLmggfCA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dsL3N5c190aW1lLmluLmggYi9nbC9zeXNfdGltZS5pbi5oCitpbmRleCA4NGExN2M5Li42Y2VhZGMzIDEwMDY0NAorLS0tIGEvZ2wvc3lzX3RpbWUuaW4uaAorKysrIGIvZ2wvc3lzX3RpbWUuaW4uaAorQEAgLTkzLDIwICs5MywyMCBAQCBzdHJ1Y3QgdGltZXZhbAorICMgICBkZWZpbmUgZ2V0dGltZW9mZGF5IHJwbF9nZXR0aW1lb2ZkYXkKKyAjICBlbmRpZgorIF9HTF9GVU5DREVDTF9SUEwgKGdldHRpbWVvZmRheSwgaW50LAorLSAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqcmVzdHJpY3QsIHZvaWQgKnJlc3RyaWN0KQorKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCwgdm9pZCAqX19yZXN0cmljdCkKKyAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIF9HTF9DWFhBTElBU19SUEwgKGdldHRpbWVvZmRheSwgaW50LAorLSAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqcmVzdHJpY3QsIHZvaWQgKnJlc3RyaWN0KSk7CisrICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0LCB2b2lkICpfX3Jlc3RyaWN0KSk7CisgIyBlbHNlCisgIyAgaWYgIUBIQVZFX0dFVFRJTUVPRkRBWUAKKyBfR0xfRlVOQ0RFQ0xfU1lTIChnZXR0aW1lb2ZkYXksIGludCwKKy0gICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKnJlc3RyaWN0LCB2b2lkICpyZXN0cmljdCkKKysgICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QsIHZvaWQgKl9fcmVzdHJpY3QpCisgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAjICBlbmRpZgorIC8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBnbGliYyBzeXN0ZW1zLCBieSBkZWZhdWx0LCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXpvbmUgKi4gICovCisgX0dMX0NYWEFMSUFTX1NZU19DQVNUIChnZXR0aW1lb2ZkYXksIGludCwKKy0gICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqcmVzdHJpY3QsIHZvaWQgKnJlc3RyaWN0KSk7CisrICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QsIHZvaWQgKl9fcmVzdHJpY3QpKTsKKyAjIGVuZGlmCisgX0dMX0NYWEFMSUFTV0FSTiAoZ2V0dGltZW9mZGF5KTsKKyAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy91c2UtcGtnLWNvbmZpZy10by1sb2NhdGUtemxpYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy91c2UtcGtnLWNvbmZpZy10by1sb2NhdGUtemxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTFiN2M4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL3VzZS1wa2ctY29uZmlnLXRvLWxvY2F0ZS16bGliLnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK0Zyb20gY2VlODBhZjFmZTkzZjViNzY3NjVhZmVlYmZjYzNiOTAyNzY4ZjVkNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDI2IE1heSAyMDE1IDIxOjQxOjI0IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHVzZSBwa2ctY29uZmlnIHRvIGxvY2F0ZSB6bGliCisKK0FDX0xJQl9IQVZFX0xJTktGTEFHUyBjYW4gc29tZXRpbWVzIGZpbmQgaG9zdCBsaWJzIGFuZCBpcyB0aGVyZWZvcmUgbm90Cityb2J1c3Qgd2hlbiBjcm9zcy1jb21waWxpbmcuIFJlbW92ZSBpdCBmb3IgemxpYiBhbmQgdXNlIFBLR19DSEVDS19NT0RVTEVTCitpbnN0ZWFkLgorCitSZW1vdmluZyBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgZm9yIHpsaWIgYWxzbyByZW1vdmVzIHRoZSAtLXdpdGgtbGliei1wcmVmaXgKK2NvbmZpZ3VyZSBvcHRpb24uIElmIHpsaWIgc3VwcG9ydCBpcyBlbmFibGVkLCB0aGVuIGZhaWx1cmUgdG8gZmluZCB6bGliIHZpYQorcGtnLWNvbmZpZyBpcyBub3cgdHJlYXRlZCBhcyBhIGZhdGFsIGVycm9yLgorCitDaGFuZ2UgYmFzZWQgb24gQ2hyb21lT1MgZ251dGxzIDIuMTIuMjMgY3Jvc3MtY29tcGlsZSBmaXhlcyBwYXRjaDoKKworICBodHRwczovL2Nocm9taXVtLXJldmlldy5nb29nbGVzb3VyY2UuY29tLyMvYy8yNzE2NjEvCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDI0ICsrKysrKysrKystLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMWI1NjFkNS4uMGM3ODdkYyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTA4LDI1ICs1MDgsMjEgQEAgQUNfQVJHX1dJVEgoemxpYiwgQVNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC16bGliXSwKKyBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gaW5jbHVkZSB6bGliIGNvbXByZXNzaW9uIHN1cHBvcnRdKQorIGlmIHRlc3QgeCRhY196bGliICE9IHhubzsgdGhlbgorICBBQ19NU0dfUkVTVUxUKHllcykKKy0gQUNfTElCX0hBVkVfTElOS0ZMQUdTKHosLCBbI2luY2x1ZGUgPHpsaWIuaD5dLCBbY29tcHJlc3MgKDAsIDAsIDAsIDApO10pCistIGlmIHRlc3QgeCRhY19jdl9saWJ6ICE9IHh5ZXM7IHRoZW4KKy0gICBBQ19NU0dfV0FSTigKKy0qKiogCistKioqIFpMSUIgd2FzIG5vdCBmb3VuZC4gWW91IHdpbGwgbm90IGJlIGFibGUgdG8gdXNlIFpMSUIgY29tcHJlc3Npb24uKQorLSBmaQorIGVsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKKyBmaQorIAorLVBLR19DSEVDS19FWElTVFMoemxpYiwgWkxJQl9IQVNfUEtHQ09ORklHPXksIFpMSUJfSEFTX1BLR0NPTkZJRz1uKQorLQorIGlmIHRlc3QgeCRhY196bGliICE9IHhubzsgdGhlbgorLSAgaWYgdGVzdCAiJFpMSUJfSEFTX1BLR0NPTkZJRyIgPSAieSIgOyB0aGVuCistICAgIGlmIHRlc3QgIngkR05VVExTX1JFUVVJUkVTX1BSSVZBVEUiID0geDsgdGhlbgorLSAgICAgIEdOVVRMU19SRVFVSVJFU19QUklWQVRFPSJSZXF1aXJlcy5wcml2YXRlOiB6bGliIgorLSAgICBlbHNlCistICAgICAgR05VVExTX1JFUVVJUkVTX1BSSVZBVEU9IiRHTlVUTFNfUkVRVUlSRVNfUFJJVkFURSwgemxpYiIKKy0gICAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKFpMSUIsIHpsaWIpCisrICBIQVZFX0xJQlo9eWVzCisrICBBQ19ERUZJTkUoW0hBVkVfTElCWl0sIFsxXSwgW3psaWIgaXMgZW5hYmxlZF0pCisrICBBQ19TVUJTVChIQVZFX0xJQlopCisrICBMVExJQlo9JFpMSUJfTElCUworKyAgQUNfU1VCU1QoTFRMSUJaKQorKyAgaWYgdGVzdCAieCRHTlVUTFNfUkVRVUlSRVNfUFJJVkFURSIgPSB4OyB0aGVuCisrICAgIEdOVVRMU19SRVFVSVJFU19QUklWQVRFPSJSZXF1aXJlcy5wcml2YXRlOiB6bGliIgorKyAgZWxzZQorKyAgICBHTlVUTFNfUkVRVUlSRVNfUFJJVkFURT0iJEdOVVRMU19SRVFVSVJFU19QUklWQVRFLCB6bGliIgorICAgZmkKKyBmaQorIEFDX1NVQlNUKEdOVVRMU19SRVFVSVJFU19QUklWQVRFKQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHNfMy4zLjE3LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHNfMy4zLjE3LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4NTc5NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRsc18zLjMuMTcuMS5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgZ251dGxzLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vY29ycmVjdF9ycGxfZ2V0dGltZW9mZGF5X3NpZ25hdHVyZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLmFjLWZpeC1zZWQtY29tbWFuZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdXNlLXBrZy1jb25maWctdG8tbG9jYXRlLXpsaWIucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiOGQwMWM3ZTdmMmNiYzU4NzFmZGNhODMyZDIyNjBiNmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjQwZjE1ODAzMGE5MmY0NTBhMDdiMjAzMDBhMzk5NjcxMGNhMTk4MDA4NDhkOWY2ZmQ2MjQ5MzE3MGM1YmJiNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjEvZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFjODlmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBsaWJ0YXNuMS0yLjE0L2RvYy9NYWtlZmlsZS5hbSBsaWJ0YXNuMS0yLjE0L2RvYy9NYWtlZmlsZS5hbQorLS0tIGxpYnRhc24xLTIuMTQvZG9jL01ha2VmaWxlLmFtCTIwMTItMDktMjQgMTU6MDg6NDIuMDAwMDAwMDAwICswMzAwCisrKysgbGlidGFzbjEtMi4xNC9kb2MvTWFrZWZpbGUuYW0JMjAxMy0wMS0wMyAwNzozNToyNi43MDI3NjM0MDMgKzAyMDAKK0BAIC0zMSw3ICszMSw3IEBACisgQU1fTUFLRUlORk9IVE1MRkxBR1MgPSAkKEFNX01BS0VJTkZPRkxBR1MpIFwKKwktLW5vLXNwbGl0IC0tbnVtYmVyLXNlY3Rpb25zIC0tY3NzLWluY2x1ZGU9dGV4aW5mby5jc3MKKworLWRpc3RfbWFuX01BTlMgPSAkKGdkb2NfTUFOUykgYXNuMVBhcnNlci4xIGFzbjFDb2RpbmcuMSBhc24xRGVjb2RpbmcuMQorK2Rpc3RfbWFuX01BTlMgPSAkKGdkb2NfTUFOUykKKworIEhFTFAyTUFOX09QVFMgPSAtLWluZm8tcGFnZSBsaWJ0YXNuMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjFfNC41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjFfNC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NzQ1NzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMV80LjUuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBBU04uMSBhbmQgREVSIG1hbmlwdWxhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJ0YXNuMS8iCisKK0xJQ0VOU0UgPSAiR1BMdjMrICYgTEdQTHYyLjErIgorTElDRU5TRV8ke1BOfS1iaW4gPSAiR1BMdjMrIgorTElDRU5TRV8ke1BOfSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vUkVBRE1FO2VuZGxpbmU9ODttZDU9YzM4MDNhM2U4Y2E1YWI1ZWIxZTU5MTJmYWE0MDUzNTEiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9saWJ0YXNuMS9saWJ0YXNuMS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4MWQyNzI2OTc1NDVlODJkMzlmNmJkMTQ4NTRiNjhmMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4OWIzYjVkY2UxMTkyNzM0MzE1NDRlY2IzMDUwODFmMzUzMDkxMTAwMWJiMTJlNWQ3NjU4ODkwN2VkYjcxYmRhIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGJpbmNvbmZpZyBsaWJfcGFja2FnZQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvZ3BnbWUucGMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lL2dwZ21lLnBjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYTRkNTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lL2dwZ21lLnBjCkBAIC0wLDAgKzEsMTAgQEAKK3ByZWZpeD0vdXNyCitsaWJkaXI9JHtwcmVmaXh9L2xpYgoraW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZQorCitOYW1lOiBncGdtZQorRGVzY3JpcHRpb246IEdOVSBQcml2YWN5IEd1YXJkIE1hZGUgRWFzeQorVmVyc2lvbjogMS40LjMKK1JlcXVpcmVzOgorTGliczogLUwke2xpYmRpcn0gLWxncGdtZSAtbGFzc3VhbiAtbGdwZy1lcnJvcgorQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmMWY0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMjc5IEBACitVcGRhdGUgZ3BnbWUgdG8gdXNlIHBrZ2NvbmZpZyBpbnN0ZWFkIG9mIC1jb25maWcgZmlsZXMgc2luY2UgaXRzCitzaW1wbGVyIGFuZCBsZXNzIGVycm9yIHByb25lIHdoZW4gY3Jvc3MgY29tcGlsaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZCBbVXBzdHJlYW0gbm90IGludGVyZXN0ZWQgaW4gcGtnLWNvbmZpZyBzdXBwb3J0XQorUlAgMjAxNS80LzE3CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDI5OGEyMmIuLmM3NzhiNjEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTYyMiw2ICs2MjIsNyBAQCBBQ19DT05GSUdfRklMRVMoTWFrZWZpbGUgc3JjL01ha2VmaWxlCisgICAgICAgICAgICAgICAgIHNyYy92ZXJzaW9uaW5mby5yYworICAgICAgICAgICAgICAgICBzcmMvZ3BnbWUuaCkKKyBBQ19DT05GSUdfRklMRVMoc3JjL2dwZ21lLWNvbmZpZywgY2htb2QgK3ggc3JjL2dwZ21lLWNvbmZpZykKKytBQ19DT05GSUdfRklMRVMoc3JjL2dwZ21lLnBjIHNyYy9ncGdtZS1wdGhyZWFkLnBjKQorIEFDX0NPTkZJR19GSUxFUyhbbGFuZy9NYWtlZmlsZSBsYW5nL2NsL01ha2VmaWxlIGxhbmcvY2wvZ3BnbWUuYXNkXSkKKyBBQ19PVVRQVVQKKyAKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KK2luZGV4IDU4OTIyZjkuLjQwZDBkY2EgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9NYWtlZmlsZS5hbQorQEAgLTIwLDExICsyMCwxMyBAQAorIAorICMgTm90ZTogbW9jX2tkcGlwZWlvZGV2aWNlIHNob3VsZCBhY3R1YWxseSBiZSBhIGRlcGVuZGVjeSBiZWxvdy4KKyBFWFRSQV9ESVNUID0gZ3BnbWUtY29uZmlnLmluIGdwZ21lLm00IGxpYmdwZ21lLnZlcnMgQ2hhbmdlTG9nLTIwMTEgXAorLQkgICAgIGdwZ21lLmguaW4gdmVyc2lvbmluZm8ucmMuaW4gZ3BnbWUuZGVmIG1vY19rZHBpcGVpb2RldmljZS5jcHAKKysJICAgICBncGdtZS5oLmluIHZlcnNpb25pbmZvLnJjLmluIGdwZ21lLmRlZiBtb2Nfa2RwaXBlaW9kZXZpY2UuY3BwIGdwZ21lLnBjLmluIGdwZ21lLXB0aHJlYWQucGMuaW4KKyAKKyBiaW5fU0NSSVBUUyA9IGdwZ21lLWNvbmZpZworIG00ZGF0YWRpciA9ICQoZGF0YWRpcikvYWNsb2NhbAorIG00ZGF0YV9EQVRBID0gZ3BnbWUubTQKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBncGdtZS5wYyBncGdtZS1wdGhyZWFkLnBjCisgbm9kaXN0X2luY2x1ZGVfSEVBREVSUyA9IGdwZ21lLmgKKyAKKyBiaW5fUFJPR1JBTVMgPSBncGdtZS10b29sCitkaWZmIC0tZ2l0IGEvc3JjL2dwZ21lLXB0aHJlYWQucGMuaW4gYi9zcmMvZ3BnbWUtcHRocmVhZC5wYy5pbgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjk4MGE0OGUKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9ncGdtZS1wdGhyZWFkLnBjLmluCitAQCAtMCwwICsxLDE1IEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrCisrIyBBUEkgaW5mbworK2FwaV92ZXJzaW9uPUBHUEdNRV9DT05GSUdfQVBJX1ZFUlNJT05ACisraG9zdD1AR1BHTUVfQ09ORklHX0hPU1RACisrCisrTmFtZTogZ3BnbWUKKytEZXNjcmlwdGlvbjogR251UEcgTWFkZSBFYXN5IChHUEdNRSkgaXMgYSBDIGxhbmd1YWdlIGxpYnJhcnkgdGhhdCBhbGxvd3MgdG8gYWRkc3VwcG9ydCBmb3IgY3J5cHRvZ3JhcGh5IHRvIGEgcHJvZ3JhbSAodGhyZWFkZWQgdmVyc2lvbikKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGdwZ21lLXB0aHJlYWQgLWxwdGhyZWFkCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KKytSZXF1aXJlczogbGliYXNzdWFuIGdwZy1lcnJvcgorZGlmZiAtLWdpdCBhL3NyYy9ncGdtZS5tNCBiL3NyYy9ncGdtZS5tNAoraW5kZXggNmMyYmU0NC4uZDhhNzVjYiAxMDA2NDQKKy0tLSBhL3NyYy9ncGdtZS5tNAorKysrIGIvc3JjL2dwZ21lLm00CitAQCAtNzksNyArNzksNyBAQCBkbmwgY29uZmlnIHNjcmlwdCBkb2VzIG5vdCBtYXRjaCB0aGUgaG9zdCBzcGVjaWZpY2F0aW9uIHRoZSBzY3JpcHQKKyBkbmwgaXMgYWRkZWQgdG8gdGhlIGdwZ19jb25maWdfc2NyaXB0X3dhcm4gdmFyaWFibGUuCisgZG5sCisgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVdLAorLVsgQUNfUkVRVUlSRShbX0FNX1BBVEhfR1BHTUVfQ09ORklHXSlkbmwKKytbCisgICB0bXA9aWZlbHNlKFskMV0sICwxOjAuNC4yLCQxKQorICAgaWYgZWNobyAiJHRtcCIgfCBncmVwICc6JyA+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgdGhlbgorICAgICAgcmVxX2dwZ21lX2FwaT1gZWNobyAiJHRtcCIgICAgIHwgc2VkICdzL1woLipcKTpcKC4qXCkvXDEvJ2AKK0BAIC04OSwzNiArODksMTIgQEAgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVdLAorICAgICAgbWluX2dwZ21lX3ZlcnNpb249IiR0bXAiCisgICBmaQorIAorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBHUEdNRSAtIHZlcnNpb24gPj0gJG1pbl9ncGdtZV92ZXJzaW9uKQorLSAgb2s9bm8KKy0gIGlmIHRlc3QgIiRHUEdNRV9DT05GSUciICE9ICJubyIgOyB0aGVuCistICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgcmVxX21pbm9yPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICByZXFfbWljcm89YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wzLydgCistICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICBvaz15ZXMKKy0gICAgZWxzZQorLSAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWFqb3IiIC1lcSAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taW5vciIgLWd0ICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taW5vciIgLWVxICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taWNybyIgLWdlICIkcmVxX21pY3JvIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgIGZpCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoR1BHTUUsIFtncGdtZSA+PSAkbWluX2dwZ21lX3ZlcnNpb25dLCBbb2s9eWVzXSwgW29rPW5vXSkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgICAjIElmIHdlIGhhdmUgYSByZWNlbnQgR1BHTUUsIHdlIHNob3VsZCBhbHNvIGNoZWNrIHRoYXQgdGhlCisgICAgICAjIEFQSSBpcyBjb21wYXRpYmxlLgorICAgICAgaWYgdGVzdCAiJHJlcV9ncGdtZV9hcGkiIC1ndCAwIDsgdGhlbgorLSAgICAgICAgdG1wPWAkR1BHTUVfQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorKyAgICAgICAgdG1wPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWFwaV92ZXJzaW9uIGdwZ21lIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKyAgICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAiJHJlcV9ncGdtZV9hcGkiIC1uZSAiJHRtcCIgOyB0aGVuCisgICAgICAgICAgICAgIG9rPW5vCitAQCAtMTI3LDE5ICsxMDMsMTEgQEAgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVdLAorICAgICAgZmkKKyAgIGZpCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBHUEdNRV9DRkxBR1M9YCRHUEdNRV9DT05GSUcgLS1jZmxhZ3NgCistICAgIEdQR01FX0xJQlM9YCRHUEdNRV9DT05GSUcgLS1saWJzYAorLSAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKyAgICAgX0FNX1BBVEhfR1BHTUVfQ09ORklHX0hPU1RfQ0hFQ0sKKyAgIGVsc2UKKy0gICAgR1BHTUVfQ0ZMQUdTPSIiCistICAgIEdQR01FX0xJQlM9IiIKKy0gICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKyAgIGZpCistICBBQ19TVUJTVChHUEdNRV9DRkxBR1MpCistICBBQ19TVUJTVChHUEdNRV9MSUJTKQorIF0pCisgCisgZG5sIEFNX1BBVEhfR1BHTUVfUFRIUkVBRChbTUlOSU1VTS1WRVJTSU9OLAorQEAgLTE0OCw3ICsxMTYsNyBAQCBkbmwgVGVzdCBmb3IgbGliZ3BnbWUgYW5kIGRlZmluZSBHUEdNRV9QVEhSRUFEX0NGTEFHUworIGRubCAgYW5kIEdQR01FX1BUSFJFQURfTElCUy4KKyBkbmwKKyBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV9QVEhSRUFEXSwKKy1bIEFDX1JFUVVJUkUoW19BTV9QQVRIX0dQR01FX0NPTkZJR10pZG5sCisrWworICAgdG1wPWlmZWxzZShbJDFdLCAsMTowLjQuMiwkMSkKKyAgIGlmIGVjaG8gIiR0bXAiIHwgZ3JlcCAnOicgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAgIHJlcV9ncGdtZV9hcGk9YGVjaG8gIiR0bXAiICAgICB8IHNlZCAncy9cKC4qXCk6XCguKlwpL1wxLydgCitAQCAtMTU4LDM4ICsxMjYsMTIgQEAgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVfUFRIUkVBRF0sCisgICAgICBtaW5fZ3BnbWVfdmVyc2lvbj0iJHRtcCIKKyAgIGZpCisgCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdQR01FIHB0aHJlYWQgLSB2ZXJzaW9uID49ICRtaW5fZ3BnbWVfdmVyc2lvbikKKy0gIG9rPW5vCistICBpZiB0ZXN0ICIkR1BHTUVfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorLSAgICBpZiBgJEdQR01FX0NPTkZJRyAtLXRocmVhZD1wdGhyZWFkIDI+IC9kZXYvbnVsbGAgOyB0aGVuCistICAgICAgcmVxX21ham9yPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICAgIHJlcV9taW5vcj1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgICByZXFfbWljcm89YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wzLydgCistICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWFqb3IiIC1ndCAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgIG9rPXllcworLSAgICAgIGVsc2UKKy0gICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pbm9yIiAtZ3QgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taW5vciIgLWVxICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWljcm8iIC1nZSAiJHJlcV9taWNybyI7IHRoZW4KKy0gICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGZpCistICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICAgIGZpCistICAgIGZpCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoR1BHTUVfUFRIUkVBRCwgW2dwZ21lLXB0aHJlYWQgPj0gJG1pbl9ncGdtZV92ZXJzaW9uXSwgW29rPXllc10sIFtvaz1ub10pCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorICAgICAgIyBJZiB3ZSBoYXZlIGEgcmVjZW50IEdQR01FLCB3ZSBzaG91bGQgYWxzbyBjaGVjayB0aGF0IHRoZQorICAgICAgIyBBUEkgaXMgY29tcGF0aWJsZS4KKyAgICAgIGlmIHRlc3QgIiRyZXFfZ3BnbWVfYXBpIiAtZ3QgMCA7IHRoZW4KKy0gICAgICAgIHRtcD1gJEdQR01FX0NPTkZJRyAtLWFwaS12ZXJzaW9uIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKysgICAgICAgIHRtcD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1hcGlfdmVyc2lvbiBncGdtZS1wdGhyZWFkIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKyAgICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAiJHJlcV9ncGdtZV9hcGkiIC1uZSAiJHRtcCIgOyB0aGVuCisgICAgICAgICAgICAgIG9rPW5vCitAQCAtMTk4LDE5ICsxNDAsMTEgQEAgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVfUFRIUkVBRF0sCisgICAgICBmaQorICAgZmkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEdQR01FX1BUSFJFQURfQ0ZMQUdTPWAkR1BHTUVfQ09ORklHIC0tdGhyZWFkPXB0aHJlYWQgLS1jZmxhZ3NgCistICAgIEdQR01FX1BUSFJFQURfTElCUz1gJEdQR01FX0NPTkZJRyAtLXRocmVhZD1wdGhyZWFkIC0tbGlic2AKKy0gICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCisgICAgIF9BTV9QQVRIX0dQR01FX0NPTkZJR19IT1NUX0NIRUNLCisgICBlbHNlCistICAgIEdQR01FX1BUSFJFQURfQ0ZMQUdTPSIiCistICAgIEdQR01FX1BUSFJFQURfTElCUz0iIgorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorICAgZmkKKy0gIEFDX1NVQlNUKEdQR01FX1BUSFJFQURfQ0ZMQUdTKQorLSAgQUNfU1VCU1QoR1BHTUVfUFRIUkVBRF9MSUJTKQorIF0pCisgCisgCitAQCAtMjI5LDM2ICsxNjMsMTIgQEAgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVfR0xJQl0sCisgICAgICBtaW5fZ3BnbWVfdmVyc2lvbj0iJHRtcCIKKyAgIGZpCisgCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdQR01FIC0gdmVyc2lvbiA+PSAkbWluX2dwZ21lX3ZlcnNpb24pCistICBvaz1ubworLSAgaWYgdGVzdCAiJEdQR01FX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKy0gICAgcmVxX21ham9yPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wyLydgCistICAgIHJlcV9taWNybz1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWFqb3IiIC1ndCAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgIG9rPXllcworLSAgICBlbHNlCistICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9tYWpvciIgLWVxICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pbm9yIiAtZ3QgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pbm9yIiAtZXEgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pY3JvIiAtZ2UgIiRyZXFfbWljcm8iOyB0aGVuCistICAgICAgICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgZmkKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhHUEdNRV9HTElCLCBbZ3BnbWUgPj0gJG1pbl9ncGdtZV92ZXJzaW9uIGdsaWItMi4wXSwgW29rPXllc10sIFtvaz1ub10pICAKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgICAjIElmIHdlIGhhdmUgYSByZWNlbnQgR1BHTUUsIHdlIHNob3VsZCBhbHNvIGNoZWNrIHRoYXQgdGhlCisgICAgICAjIEFQSSBpcyBjb21wYXRpYmxlLgorICAgICAgaWYgdGVzdCAiJHJlcV9ncGdtZV9hcGkiIC1ndCAwIDsgdGhlbgorLSAgICAgICAgdG1wPWAkR1BHTUVfQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorKyAgICAgICAgdG1wPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWFwaV92ZXJzaW9uIGdwZ21lIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKyAgICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAiJHJlcV9ncGdtZV9hcGkiIC1uZSAiJHRtcCIgOyB0aGVuCisgICAgICAgICAgICAgIG9rPW5vCitAQCAtMjY3LDE3ICsxNzcsOSBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV9HTElCXSwKKyAgICAgIGZpCisgICBmaQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgR1BHTUVfR0xJQl9DRkxBR1M9YCRHUEdNRV9DT05GSUcgLS1nbGliIC0tY2ZsYWdzYAorLSAgICBHUEdNRV9HTElCX0xJQlM9YCRHUEdNRV9DT05GSUcgLS1nbGliIC0tbGlic2AKKy0gICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCisgICAgIF9BTV9QQVRIX0dQR01FX0NPTkZJR19IT1NUX0NIRUNLCisgICBlbHNlCistICAgIEdQR01FX0dMSUJfQ0ZMQUdTPSIiCistICAgIEdQR01FX0dMSUJfTElCUz0iIgorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorICAgZmkKKy0gIEFDX1NVQlNUKEdQR01FX0dMSUJfQ0ZMQUdTKQorLSAgQUNfU1VCU1QoR1BHTUVfR0xJQl9MSUJTKQorIF0pCitkaWZmIC0tZ2l0IGEvc3JjL2dwZ21lLnBjLmluIGIvc3JjL2dwZ21lLnBjLmluCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjY5NTM5ZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dwZ21lLnBjLmluCitAQCAtMCwwICsxLDE1IEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrCisrIyBBUEkgaW5mbworK2FwaV92ZXJzaW9uPUBHUEdNRV9DT05GSUdfQVBJX1ZFUlNJT05ACisraG9zdD1AR1BHTUVfQ09ORklHX0hPU1RACisrCisrTmFtZTogZ3BnbWUKKytEZXNjcmlwdGlvbjogR251UEcgTWFkZSBFYXN5IChHUEdNRSkgaXMgYSBDIGxhbmd1YWdlIGxpYnJhcnkgdGhhdCBhbGxvd3MgdG8gYWRkc3VwcG9ydCBmb3IgY3J5cHRvZ3JhcGh5IHRvIGEgcHJvZ3JhbS4KKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGdwZ21lCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KKytSZXF1aXJlczogbGliYXNzdWFuIGdwZy1lcnJvcgorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lXzEuNS40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZV8xLjUuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTk4Mzc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZV8xLjUuNC5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkhpZ2gtbGV2ZWwgR251UEcgZW5jcnlwdGlvbi9zaWduaW5nIEFQSSIKK0RFU0NSSVBUSU9OID0gIkdudVBHIE1hZGUgRWFzeSAoR1BHTUUpIGlzIGEgbGlicmFyeSBkZXNpZ25lZCB0byBtYWtlIGFjY2VzcyB0byBHbnVQRyBlYXNpZXIgZm9yIGFwcGxpY2F0aW9ucy4gSXQgcHJvdmlkZXMgYSBIaWdoLUxldmVsIENyeXB0byBBUEkgZm9yIGVuY3J5cHRpb24sIGRlY3J5cHRpb24sIHNpZ25pbmcsIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gYW5kIGtleSBtYW5hZ2VtZW50IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvZ3BnbWUuaHRtbCIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmcxMGNvZGUuY29tL2dudXBnL2luZGV4IgorCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSO21kNT1iYmI0NjEyMTFhMzNiMTM0ZDQyZWQ1ZWU4MDJiMzdmZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZ3BnbWUuaC5pbjtlbmRsaW5lPTIzO21kNT03MWJhMmFlOGQ2Y2EwMzRlZDEwYmQwOTlhOGNmNDczYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZW5naW5lLmg7ZW5kbGluZT0yMjttZDU9NGI2ZDhiYTMxM2Q5YjU2NGNjNGQ0Y2ZiMTY0MGFmOWQiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvZ3BnbWUvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9ncGdtZS5wYyBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImZlYWZhMDNlYTA2NGUxZDFkYzExYmMyYjg4NDA0NjIzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJiMzhjMGVjODgxNWM5ZTk0ZTYwNDdiNDg0OTg0ODA4YThkYWQ5ZDZiZWM4ZGYzM2RjNTMzOWZkNTVmZmVhNmMiCisKK0RFUEVORFMgPSAibGliZ3BnLWVycm9yIGxpYmFzc3VhbiIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9ncGdtZS1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZworCitQQUNLQUdFUyA9KyAiJHtQTn0tcHRocmVhZCIKK0ZJTEVTXyR7UE59LXB0aHJlYWQgPSAiJHtsaWJkaXJ9L2xpYmdwZ21lLXB0aHJlYWQuc28uKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9jb21tb24tbGlzcC9zb3VyY2UvZ3BnbWUvKiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgRWxzZSB0aGVzZSBjb3VsZCBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gdGhvc2UgaW4gYWNsb2NhbC1jb3B5CisJcm0gLWYgJHtTfS9tNC9ncGctZXJyb3IubTQKKwlybSAtZiAke1N9L200L2xpYmFzc3Vhbi5tNAorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wa2djb25maWcKKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZ3BnbWUucGMgJHtEfSR7bGliZGlyfS9wa2djb25maWcvCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzZmMjIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1LmluYwpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIkludGVybmF0aW9uYWwgQ29tcG9uZW50IGZvciBVbmljb2RlIGxpYnJhcmllcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBJbnRlcm5hdGlvbmFsIENvbXBvbmVudCBmb3IgVW5pY29kZSAoSUNVKSBpcyBhIG1hdHVyZSwgXAorcG9ydGFibGUgc2V0IG9mIEMvQysrIGFuZCBKYXZhIGxpYnJhcmllcyBmb3IgVW5pY29kZSBzdXBwb3J0LCBzb2Z0d2FyZSBcCitpbnRlcm5hdGlvbmFsaXphdGlvbiAoSTE4TikgYW5kIGdsb2JhbGl6YXRpb24gKEcxMU4pLCBnaXZpbmcgYXBwbGljYXRpb25zIHRoZSBcCitzYW1lIHJlc3VsdHMgb24gYWxsIHBsYXRmb3Jtcy4iCitIT01FUEFHRSA9ICJodHRwOi8vc2l0ZS5pY3UtcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIklDVSIKK0RFUEVORFMgPSAiaWN1LW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKKworUyA9ICIke1dPUktESVJ9L2ljdS9zb3VyY2UiCitTUERYX1MgPSAiJHtXT1JLRElSfS9pY3UiCitTVEFHSU5HX0lDVV9ESVJfTkFUSVZFID0gIiR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vJHtCUE59LyR7UFZ9IgorCitDUFBGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1EVV9USU1FWk9ORT0wIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2ljdS1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBiaW5jb25maWcKKworIyBJQ1UgbmVlZHMgdGhlIG5hdGl2ZSBidWlsZCBkaXJlY3RvcnkgYXMgYW4gYXJndW1lbnQgdG8gaXRzIC0td2l0aC1jcm9zcy1idWlsZCBvcHRpb24gd2hlbgorIyBjcm9zcy1jb21waWxpbmcuIFRha2VuIHRoZSBzaXR1YXRpb24gdGhhdCBkaWZmZXJlbnQgYnVpbGRzIG1heSBzaGFyZSBhIGNvbW1vbiBzc3RhdGUtY2FjaGUKKyMgaW50byBjb25zaWRlcmF0aW9uLCB0aGUgbmF0aXZlIGJ1aWxkIGRpcmVjdG9yeSBuZWVkcyB0byBiZSBzdGFnZWQuCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWNyb3NzLWJ1aWxkPSR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0iCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIiIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiLS13aXRoLWNyb3NzLWJ1aWxkPSR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0iCisKK1BSRVBST0NFU1NfUkVMT0NBVEVfRElSUyA9ICIke2RhdGFkaXJ9LyR7QlBOfS8ke1BWfSIKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlta2RpciAtcCAke0R9LyR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0vY29uZmlnCisJY3AgLXIgJHtCfS9jb25maWcvaWN1Y3Jvc3MubWsgJHtEfS8ke1NUQUdJTkdfSUNVX0RJUl9OQVRJVkV9L2NvbmZpZworCWNwIC1yICR7Qn0vY29uZmlnL2ljdWNyb3NzLmluYyAke0R9LyR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0vY29uZmlnCisJY3AgLXIgJHtCfS9saWIgJHtEfS8ke1NUQUdJTkdfSUNVX0RJUl9OQVRJVkV9CisJY3AgLXIgJHtCfS9iaW4gJHtEfS8ke1NUQUdJTkdfSUNVX0RJUl9OQVRJVkV9CisJY3AgLXIgJHtCfS90b29scyAke0R9LyR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0KK30KKworUEFDS0FHRVMgPSsgImxpYmljdWRhdGEgbGliaWN1dWMgbGliaWN1aTE4biBsaWJpY3VsZSBsaWJpY3VseCBsaWJpY3V0dSBsaWJpY3VpbyIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59LyIKKworRklMRVNfbGliaWN1ZGF0YSA9ICIke2xpYmRpcn0vbGliaWN1ZGF0YS5zby4qIgorRklMRVNfbGliaWN1dWMgPSAiJHtsaWJkaXJ9L2xpYmljdXVjLnNvLioiCitGSUxFU19saWJpY3VpMThuID0gIiR7bGliZGlyfS9saWJpY3VpMThuLnNvLioiCitGSUxFU19saWJpY3VsZSA9ICIke2xpYmRpcn0vbGliaWN1bGUuc28uKiIKK0ZJTEVTX2xpYmljdWx4ID0gIiR7bGliZGlyfS9saWJpY3VseC5zby4qIgorRklMRVNfbGliaWN1dHUgPSAiJHtsaWJkaXJ9L2xpYmljdXR1LnNvLioiCitGSUxFU19saWJpY3VpbyA9ICIke2xpYmRpcn0vbGliaWN1aW8uc28uKiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1LzAwMDEtRGlzYWJsZS1MREZMQUdTSUNVRFQtZm9yLUxpbnV4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1LzAwMDEtRGlzYWJsZS1MREZMQUdTSUNVRFQtZm9yLUxpbnV4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NjhkNTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UvMDAwMS1EaXNhYmxlLUxERkxBR1NJQ1VEVC1mb3ItTGludXgucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSAwYzgyZDZhYTAyYzA4ZTQxYjEzYzgzYjE0NzgyYmQ3MDI0ZTI1ZDU5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMTUgRmViIDIwMTQgMjE6MDY6NDIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gRGlzYWJsZSBMREZMQUdTSUNVRFQgZm9yIExpbnV4CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbIE9FIENvbmZpZ3VyYXRpb24gXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc291cmNlL2NvbmZpZy9taC1saW51eCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZy9taC1saW51eCBiL2NvbmZpZy9taC1saW51eAoraW5kZXggMzY2ZjBjYy4uMjY4OWFhYiAxMDA2NDQKKy0tLSBhL2NvbmZpZy9taC1saW51eAorKysrIGIvY29uZmlnL21oLWxpbnV4CitAQCAtMjEsNyArMjEsNyBAQCBMRF9SUEFUSD0gLVdsLC16b3JpZ2luLC1ycGF0aCwnJCQnT1JJR0lOCisgTERfUlBBVEhfUFJFID0gLVdsLC1ycGF0aCwKKyAKKyAjIyBUaGVzZSBhcmUgdGhlIGxpYnJhcnkgc3BlY2lmaWMgTERGTEFHUworLUxERkxBR1NJQ1VEVD0tbm9kZWZhdWx0bGlicyAtbm9zdGRsaWIKKysjIExERkxBR1NJQ1VEVD0tbm9kZWZhdWx0bGlicyAtbm9zdGRsaWIKKyAKKyAjIyBDb21waWxlciBzd2l0Y2ggdG8gZW1iZWQgYSBsaWJyYXJ5IG5hbWUKKyAjIFRoZSBpbml0aWFsIHRhYiBpbiB0aGUgbmV4dCBsaW5lIGlzIHRvIHByZXZlbnQgaWN1LWNvbmZpZyBmcm9tIHJlYWRpbmcgaXQuCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS9pY3UtcGtnZGF0YS1sYXJnZS1jbWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UvaWN1LXBrZ2RhdGEtbGFyZ2UtY21kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNDA2NTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UvaWN1LXBrZ2RhdGEtbGFyZ2UtY21kLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK3BrZ2RhdGEuY3BwOiB1c2UgTEFSR0VfQlVGRkVSX01BWF9TSVpFIGZvciBjbWQKKworVXNlIExBUkdFX0JVRkZFUl9NQVhfU0laRSBmb3IgY21kIHJhdGhlciB0aGFuIFNNQUxMX0JVRkZFUl9NQVhfU0laRSwKK290aGVyd2lzZSB0aGVyZSB3YXMgYSBTZWdtZW50YXRpb24gZmF1bHQgZXJyb3Igd2hlbiB0aGUgY29tbWFuZCBsaW5lIGlzCitsb25nLCB0aGlzIHNob3VsZCBiZSBhIG1pc3BsYXkgc2luY2Ugb3RoZXIgY21kIHVzZXMKK0xBUkdFX0JVRkZFUl9NQVhfU0laRS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgdG9vbHMvcGtnZGF0YS9wa2dkYXRhLmNwcCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rvb2xzL3BrZ2RhdGEvcGtnZGF0YS5jcHAgYi90b29scy9wa2dkYXRhL3BrZ2RhdGEuY3BwCistLS0gYS90b29scy9wa2dkYXRhL3BrZ2RhdGEuY3BwCisrKysgYi90b29scy9wa2dkYXRhL3BrZ2RhdGEuY3BwCitAQCAtMTAxOSw3ICsxMDE5LDcgQEAgbm9ybWFsX3N5bWxpbmtfbW9kZToKKyAKKyBzdGF0aWMgaW50MzJfdCBwa2dfaW5zdGFsbExpYnJhcnkoY29uc3QgY2hhciAqaW5zdGFsbERpciwgY29uc3QgY2hhciAqdGFyZ2V0RGlyLCBVQm9vbCBub1ZlcnNpb24pIHsKKyAgICAgaW50MzJfdCByZXN1bHQgPSAwOworLSAgICBjaGFyIGNtZFtTTUFMTF9CVUZGRVJfTUFYX1NJWkVdOworKyAgICBjaGFyIGNtZFtMQVJHRV9CVUZGRVJfTUFYX1NJWkVdOworIAorICAgICBzcHJpbnRmKGNtZCwgImNkICVzICYmICVzICVzICVzJXMlcyIsCisgICAgICAgICAgICAgdGFyZ2V0RGlyLAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3VfNTUuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdV81NS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2M2E5YmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3VfNTUuMS5iYgpAQCAtMCwwICsxLDIxIEBACityZXF1aXJlIGljdS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vbGljZW5zZS5odG1sO21kNT02NGVmZjRhYWRmZjRkMTA0ZDZkNDM3YzRmZGUwZTZkNyIKKworZGVmIGljdV9kb3dubG9hZF92ZXJzaW9uKGQpOgorICAgIHB2c3BsaXQgPSBkLmdldFZhcignUFYnLCBUcnVlKS5zcGxpdCgnLicpCisgICAgcmV0dXJuIHB2c3BsaXRbMF0gKyAiXyIgKyBwdnNwbGl0WzFdCisKK0lDVV9QViA9ICIke0BpY3VfZG93bmxvYWRfdmVyc2lvbihkKX0iCisKK0JBU0VfU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQuaWN1LXByb2plY3Qub3JnL2ZpbGVzL2ljdTRjLyR7UFZ9L2ljdTRjLSR7SUNVX1BWfS1zcmMudGd6IgorU1JDX1VSSSA9ICIke0JBU0VfU1JDX1VSSX0gXAorICAgICAgICAgICBmaWxlOi8vaWN1LXBrZ2RhdGEtbGFyZ2UtY21kLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICJcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURpc2FibGUtTERGTEFHU0lDVURULWZvci1MaW51eC5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gImUyZDUyM2RmNzlkNmNiNzg1NWMyZmJlMjg0ZjRkYjI5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUxNmIyMmNiZWZkZDM1NGJlYzExNDU0MWY3ODQ5YTEyZjhmYzIwMTUzMjBjYTUyODJlZTRmZDc4NzU3MTQ1N2IiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaXNvLWNvZGVzL2lzby1jb2Rlc18zLjU4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pc28tY29kZXMvaXNvLWNvZGVzXzMuNTguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExMmU0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaXNvLWNvZGVzL2lzby1jb2Rlc18zLjU4LmJiCkBAIC0wLDAgKzEsMTUgQEAKK1NVTU1BUlkgPSAiSVNPIGxhbmd1YWdlLCB0ZXJyaXRvcnksIGN1cnJlbmN5LCBzY3JpcHQgY29kZXMgYW5kIHRoZWlyIHRyYW5zbGF0aW9ucyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCIKKworU1JDX1VSSSA9ICJodHRwczovL3BrZy1pc29jb2Rlcy5hbGlvdGguZGViaWFuLm9yZy9kb3dubG9hZHMvaXNvLWNvZGVzLSR7UFZ9LnRhci54eiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNDA5N2EwMDg1ZjA5NzllMjhmOWRiNjZlYzI3NGM1ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4NmFmNTczNWRjZTZlNGVmZjJiOTgzZTVkOGFhOWEzZGVhMWI4ZGI3MDIzMzNmZjIwYmU4OWU0NWY3ZjM1YTcyIgorCisjIGluaGVyaXQgZ2V0dGV4dCBjYW5ub3QgYmUgdXNlZCwgYmVjYXVzZSBpdCBhZGRzIGdldHRleHQtbmF0aXZlIHRvIEJBU0VERVBFTkRTIHdoaWNoCisjIGFyZSBpbmhpYml0ZWQgYnkgYWxsYXJjaAorREVQRU5EUyA9ICJnZXR0ZXh0LW5hdGl2ZSIKKworaW5oZXJpdCBhbGxhcmNoIGF1dG90b29scworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS94bWwvIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuL2xpYmFzc3Vhbi1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmFzc3Vhbi9saWJhc3N1YW4vbGliYXNzdWFuLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmNjZGRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuL2xpYmFzc3Vhbi1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxNTggQEAKK0FkZCBwa2djb25maWcgc3VwcG9ydCB0byBsaWJhc3N1YW4uCitUaGlzIHBhdGNoIGlzIHJlamVjdGVkIGJ5IHVwc3RyZWFtIGZvciB0aGUgcmVhc29uIGJlbG93OgorVGhleSB0aGluayBwa2djb25maWcgYWRkcyBubyBwb3J0YWJpbGl0eSBhbmQgbWFpbnRhaW5pbmcgdGhlbSBpcyBub3Qgd29ydGh3aGlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworSW5kZXg6IGxpYmFzc3Vhbi0yLjEuMi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFzc3Vhbi0yLjEuMi5vcmlnL01ha2VmaWxlLmFtCisrKysgbGliYXNzdWFuLTIuMS4yL01ha2VmaWxlLmFtCitAQCAtMjQsMTAgKzI0LDEzIEBAIEFVVE9NQUtFX09QVElPTlMgPSBkaXN0LWJ6aXAyIG5vLWRpc3QtZ3oKKyAjIChBIHN1aXRhYmxlIGdpdGxvZy10by1jaGFuZ2Vsb2cgc2NyaXB0IGNhbiBiZSBmb3VuZCBpbiBHbnVQRyBtYXN0ZXIuKQorIEdJVExPR19UT19DSEFOR0VMT0c9Z2l0bG9nLXRvLWNoYW5nZWxvZworIAorK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9IGxpYmFzc3Vhbi5wYworKworIEVYVFJBX0RJU1QgPSBhdXRvZ2VuLnNoIGF1dG9nZW4ucmMgUkVBRE1FLkdJVCAgICAgICAgIAkgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBDaGFuZ2VMb2ctMjAxMSBkb2MvQ2hhbmdlTG9nLTIwMTEgc3JjL0NoYW5nZUxvZy0yMDExIAlcCisgICAgICAgICAgICAgIHRlc3RzL0NoYW5nZUxvZy0yMDExIGNvbnRyaWIvQ2hhbmdlTG9nLTIwMTEgICAgIAkJXAorLSAgICAgICAgICAgICBidWlsZC1hdXgvZ2l0LWxvZy1mb290ZXIgYnVpbGQtYXV4L2dpdC1sb2ctZml4CisrICAgICAgICAgICAgIGJ1aWxkLWF1eC9naXQtbG9nLWZvb3RlciBidWlsZC1hdXgvZ2l0LWxvZy1maXggbGliYXNzdWFuLnBjLmluCisgCisgU1VCRElSUyA9IG00IHNyYyBkb2MgdGVzdHMKKyAKK0luZGV4OiBsaWJhc3N1YW4tMi4xLjIvbGliYXNzdWFuLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgbGliYXNzdWFuLTIuMS4yL2xpYmFzc3Vhbi5wYy5pbgorQEAgLTAsMCArMSwxNCBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorK2FwaV92ZXJzaW9uPUBMSUJBU1NVQU5fQ09ORklHX0FQSV9WRVJTSU9OQAorK2hvc3Q9QExJQkFTU1VBTl9DT05GSUdfSE9TVEAKKysKKytOYW1lOiBsaWJhc3N1YW4KKytEZXNjcmlwdGlvbjogSVBDIGxpYnJhcnkgdXNlZCBieSBHbnVQRyBhbmQgR1BHTUUKKytSZXF1aXJlczoKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGFzc3VhbgorK0xpYnMucHJpdmF0ZTogLWxncGctZXJyb3IKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorSW5kZXg6IGxpYmFzc3Vhbi0yLjEuMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhc3N1YW4tMi4xLjIub3JpZy9jb25maWd1cmUuYWMKKysrKyBsaWJhc3N1YW4tMi4xLjIvY29uZmlndXJlLmFjCitAQCAtNDM5LDcgKzQzOSw3IEBAIEFDX0NPTkZJR19GSUxFUyhbZG9jL01ha2VmaWxlXSkKKyBBQ19DT05GSUdfRklMRVMoW3Rlc3RzL01ha2VmaWxlXSkKKyBBQ19DT05GSUdfRklMRVMoW3NyYy9saWJhc3N1YW4tY29uZmlnXSwgW2NobW9kICt4IHNyYy9saWJhc3N1YW4tY29uZmlnXSkKKyBBQ19DT05GSUdfRklMRVMoW3NyYy92ZXJzaW9uaW5mby5yY10pCistCisrQUNfQ09ORklHX0ZJTEVTKFtsaWJhc3N1YW4ucGNdKQorIEFDX09VVFBVVAorIAorIGVjaG8gIgorSW5kZXg6IGxpYmFzc3Vhbi0yLjEuMi9zcmMvbGliYXNzdWFuLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYXNzdWFuLTIuMS4yLm9yaWcvc3JjL2xpYmFzc3Vhbi5tNAorKysrIGxpYmFzc3Vhbi0yLjEuMi9zcmMvbGliYXNzdWFuLm00CitAQCAtMTUsMTggKzE1LDYgQEAgZG5sIFJldHVybnMgb2sgc2V0IHRvIHllcyBvciBuby4KKyBkbmwKKyBBQ19ERUZVTihbX0FNX1BBVEhfTElCQVNTVUFOX0NPTU1PTl0sCisgWyBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCistICBBQ19BUkdfV0lUSChsaWJhc3N1YW4tcHJlZml4LAorLSAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJhc3N1YW4tcHJlZml4PVBGWF0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlZml4IHdoZXJlIExJQkFTU1VBTiBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0pLAorLSAgICAgbGliYXNzdWFuX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwgbGliYXNzdWFuX2NvbmZpZ19wcmVmaXg9IiIpCistICBpZiB0ZXN0IHgkbGliYXNzdWFuX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKy0gICAgbGliYXNzdWFuX2NvbmZpZ19hcmdzPSIkbGliYXNzdWFuX2NvbmZpZ19hcmdzIC0tcHJlZml4PSRsaWJhc3N1YW5fY29uZmlnX3ByZWZpeCIKKy0gICAgaWYgdGVzdCB4JHtMSUJBU1NVQU5fQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKy0gICAgICBMSUJBU1NVQU5fQ09ORklHPSRsaWJhc3N1YW5fY29uZmlnX3ByZWZpeC9iaW4vbGliYXNzdWFuLWNvbmZpZworLSAgICBmaQorLSAgZmkKKy0KKy0gIEFDX1BBVEhfVE9PTChMSUJBU1NVQU5fQ09ORklHLCBsaWJhc3N1YW4tY29uZmlnLCBubykKKyAKKyAgIHRtcD1pZmVsc2UoWyQxXSwgLDE6MC45LjIsJDEpCisgICBpZiBlY2hvICIkdG1wIiB8IGdyZXAgJzonID4vZGV2L251bGwgMj4vZGV2L251bGwgOyB0aGVuCitAQCAtMzcsNTEgKzI1LDEyIEBAIEFDX0RFRlVOKFtfQU1fUEFUSF9MSUJBU1NVQU5fQ09NTU9OXSwKKyAgICAgbWluX2xpYmFzc3Vhbl92ZXJzaW9uPSIkdG1wIgorICAgZmkKKyAKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgTElCQVNTVUFOIC0gdmVyc2lvbiA+PSAkbWluX2xpYmFzc3Vhbl92ZXJzaW9uKQorLSAgb2s9bm8KKy0gIGlmIHRlc3QgIiRMSUJBU1NVQU5fQ09ORklHIiAhPSAibm8iIFwKKy0gICAgICYmIHRlc3QgLWYgIiRMSUJBU1NVQU5fQ09ORklHIiA7IHRoZW4KKy0gICAgcmVxX21ham9yPWBlY2hvICRtaW5fbGliYXNzdWFuX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgcmVxX21pbm9yPWBlY2hvICRtaW5fbGliYXNzdWFuX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgcmVxX21pY3JvPWBlY2hvICRtaW5fbGliYXNzdWFuX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKy0KKy0gICAgbGliYXNzdWFuX2NvbmZpZ192ZXJzaW9uPWAkTElCQVNTVUFOX0NPTkZJRyAtLXZlcnNpb25gCistICAgIG1ham9yPWBlY2hvICRsaWJhc3N1YW5fY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorLSAgICBtaW5vcj1gZWNobyAkbGliYXNzdWFuX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDIvJ2AKKy0gICAgbWljcm89YGVjaG8gJGxpYmFzc3Vhbl9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wzLydgCistCistICAgIGlmIHRlc3QgIiRtYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgb2s9eWVzCistICAgIGVsc2UgCistICAgICAgICBpZiB0ZXN0ICIkbWFqb3IiIC1lcSAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgICAgICBpZiB0ZXN0ICIkbWlub3IiIC1ndCAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZXEgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRtaWNybyIgLWdlICIkcmVxX21pY3JvIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgIGZpCistICBmaQorLQorLSAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgQUNfTVNHX1JFU1VMVChbeWVzICgkbGliYXNzdWFuX2NvbmZpZ192ZXJzaW9uKV0pCistICBlbHNlCistICAgIEFDX01TR19SRVNVTFQobm8pCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoTElCQVNTVUFOLCBbbGliYXNzdWFuID49ICRtaW5fbGliYXNzdWFuX3ZlcnNpb25dLCBbb2s9eWVzXSwgW29rPW5vXSkKKyAKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgIGlmIHRlc3QgIiRyZXFfbGliYXNzdWFuX2FwaSIgLWd0IDAgOyB0aGVuCisgICAgICAgdG1wPWAkTElCQVNTVUFOX0NPTkZJRyAtLWFwaS12ZXJzaW9uIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKysgICAgICB0bXA9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YXBpX3ZlcnNpb24gbGliYXNzdWFuYAorICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtMSUJBU1NVQU4gQVBJIHZlcnNpb25dKQorICAgICAgICAgaWYgdGVzdCAiJHJlcV9saWJhc3N1YW5fYXBpIiAtZXEgIiR0bXAiIDsgdGhlbgorQEAgLTk2LDcgKzQ1LDcgQEAgQUNfREVGVU4oW19BTV9QQVRIX0xJQkFTU1VBTl9DT01NT05dLAorIAorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgaWYgdGVzdCB4IiRob3N0IiAhPSB4IDsgdGhlbgorLSAgICAgIGxpYmFzc3Vhbl9jb25maWdfaG9zdD1gJExJQkFTU1VBTl9DT05GSUcgLS1ob3N0IDI+L2Rldi9udWxsIHx8IGVjaG8gbm9uZWAKKysgICAgICBsaWJhc3N1YW5fY29uZmlnX2hvc3Q9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9aG9zdCBsaWJhc3N1YW5gCisgICAgICAgaWYgdGVzdCB4IiRsaWJhc3N1YW5fY29uZmlnX2hvc3QiICE9IHhub25lIDsgdGhlbgorICAgICAgICAgaWYgdGVzdCB4IiRsaWJhc3N1YW5fY29uZmlnX2hvc3QiICE9IHgiJGhvc3QiIDsgdGhlbgorICAgQUNfTVNHX1dBUk4oW1sKK0BAIC0xMzcsMTIgKzg2LDggQEAgZG5sCisgQUNfREVGVU4oW0FNX1BBVEhfTElCQVNTVUFOXSwKKyBbIF9BTV9QQVRIX0xJQkFTU1VBTl9DT01NT04oJDEpCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBMSUJBU1NVQU5fQ0ZMQUdTPWAkTElCQVNTVUFOX0NPTkZJRyAkbGliYXNzdWFuX2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAorLSAgICBMSUJBU1NVQU5fTElCUz1gJExJQkFTU1VBTl9DT05GSUcgJGxpYmFzc3Vhbl9jb25maWdfYXJncyAtLWxpYnNgCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCisgICBlbHNlCistICAgIExJQkFTU1VBTl9DRkxBR1M9IiIKKy0gICAgTElCQVNTVUFOX0xJQlM9IiIKKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKyAgIGZpCisgICBBQ19TVUJTVChMSUJBU1NVQU5fQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuXzIuMi4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuXzIuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YWU0M2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmFzc3Vhbi9saWJhc3N1YW5fMi4yLjEuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJJUEMgbGlicmFyeSB1c2VkIGJ5IEdudVBHIGFuZCBHUEdNRSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL3JlbGF0ZWRfc29mdHdhcmUvbGliYXNzdWFuLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmcxMGNvZGUuY29tL2dudXBnL2luZGV4IgorCitMSUNFTlNFID0gIkdQTHYzICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9hc3N1YW4uYztlbmRsaW5lPTIwO21kNT0wZjQ2NTU0NDE4MzQwNTA1NWVjMTc5ODY5ZmM1YjViYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvYXNzdWFuLWRlZnMuaDtlbmRsaW5lPTIwO21kNT0yMGNkNTU1MzUyNjBjYTE3NzllZGFlNWM3YjgwYjIxZSIKKworREVQRU5EUyA9ICJsaWJncGctZXJyb3IiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvbGliYXNzdWFuL2xpYmFzc3Vhbi0ke1BWfS50YXIuYnoyIFwKKwkgICBmaWxlOi8vbGliYXNzdWFuLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjYyOTBlNzUwZWU4N2JlM2JmZDk1NzlmYzQ0YzZhMTg2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk0OTI4NWJiNzkzNDUzNjJjYjcyYTQwYzc5OGRlZmVmYzAwNzAzMWM2MGYyZjEwMjUxNzIwYmY2MGE5ZGUyZGUiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGliYXNzdWFuLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIEVsc2UgdGhlc2UgY291bGQgYmUgdXNlZCBpbiBwcmVmZXJuY2UgdG8gdGhvc2UgaW4gYWNsb2NhbC1jb3B5CisJcm0gLWYgJHtTfS9tNC8qLm00Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhdG9taWMtb3BzL2xpYmF0b21pYy1vcHNfNy40LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmF0b21pYy1vcHMvbGliYXRvbWljLW9wc183LjQuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDBlMjk5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhdG9taWMtb3BzL2xpYmF0b21pYy1vcHNfNy40LjIuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJBIGxpYnJhcnkgZm9yIGF0b21pYyBpbnRlZ2VyIG9wZXJhdGlvbnMiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vaXZtYWkvbGliYXRvbWljX29wcy8iCitTRUNUSU9OID0gIm9wdGlvbmFsIgorUFJPVklERVMgKz0gImxpYmF0b21pY3Mtb3BzIgorTElDRU5TRSA9ICJHUEx2MiAmIE1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvYy9MSUNFTlNJTkcudHh0O21kNT1lMDBkZDVjOGFjMDNhMTRjNWFlNTIyNWE0NTI1ZmEyZCBcCisJCSAgICIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lml2bWFpc29mdC5jb20vX2Jpbi9hdG9taWNfb3BzL2xpYmF0b21pY19vcHMtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWQ2NTM4NjA0YjMxNGQyZmNjZGY4NjkxNWU1YzA4NTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDRmYTYxNWY2Mjk5MjU0N2JjYmRhNTYyMjYwZTI4YjUwNGJjNGMwNmUyZjk4NWYyNjdmM2FkZTMwMzA0YjVkZCIKKworUyA9ICIke1dPUktESVJ9L2xpYmF0b21pY19vcHMtJHtQVn0iCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyB0aG9zZSBjb250YWluIG9ubHkgZG9jcywgbm90IG5lY2Vzc2FyeSBmb3Igbm93LgorCWluc3RhbGwgLW0gMDc1NSAtZCAke0R9JHtkb2NkaXJ9CisJbXYgJHtEfSR7ZGF0YWRpcn0vbGliYXRvbWljX29wcyAke0R9JHtkb2NkaXJ9LyR7QlBOfQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmJzZC9saWJic2RfMC43LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmJzZC9saWJic2RfMC43LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAyNjY2ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYnNkL2xpYmJzZF8wLjcuMC5iYgpAQCAtMCwwICsxLDIxIEBACisjIENvcHlyaWdodCAoQykgMjAxMyBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCBmb3IgdGhlIHRlcm1zKQorCitTVU1NQVJZID0gIkxpYnJhcnkgb2YgdXRpbGl0eSBmdW5jdGlvbnMgZnJvbSBCU0Qgc3lzdGVtcyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgbGlicmFyeSBwcm92aWRlcyB1c2VmdWwgZnVuY3Rpb25zIGNvbW1vbmx5IGZvdW5kIG9uIEJTRCBzeXN0ZW1zLCBcCisgICAgICAgICAgICAgICBhbmQgbGFja2luZyBvbiBvdGhlcnMgbGlrZSBHTlUgc3lzdGVtcywgdGh1cyBtYWtpbmcgaXQgZWFzaWVyIHRvIHBvcnQgXAorICAgICAgICAgICAgICAgcHJvamVjdHMgd2l0aCBzdHJvbmcgQlNEIG9yaWdpbnMsIHdpdGhvdXQgbmVlZGluZyB0byBlbWJlZCB0aGUgc2FtZSBcCisgICAgICAgICAgICAgICBjb2RlIG92ZXIgYW5kIG92ZXIgYWdhaW4gb24gZWFjaCBwcm9qZWN0LiIKKworSE9NRVBBR0UgPSAiaHR0cDovL2xpYmJzZC5mcmVlZGVza3RvcC5vcmcvd2lraS8iCitMSUNFTlNFID0gIkJTRC00LUNsYXVzZSAmIE1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYxNTMwZWE5MmFlYWExYzVlMjU0N2NmZDQzOTA1ZDhjIgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2xpYmJzZC5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImZjY2ViNGU2NmZkNDQ4Y2E0ZWQ0MmJhMjJhOGJhYmIwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBmM2IwZTE3ZTVjMzRjMDM4MTI2ZTBhMDQzNTFiMTFlMjNjNjEwMWE3ZDBjZTNiZWVhYjI5YmI2NDE1YzEwYmIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAtbmcvbGliY2FwLW5nL3B5dGhvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwLW5nL2xpYmNhcC1uZy9weXRob24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1OTFlYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwLW5nL2xpYmNhcC1uZy9weXRob24ucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorRnJvbSBiMDFiYjI2OTRmNjZjZDk4MWU2ZDYxNTIzNDMzZGMzZWI1ZWQzMmYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGkgeGluIDxsaXhpbi5mbnN0QGNuLmZ1aml0c3UuY29tPgorRGF0ZTogU2F0LCAxOCBKdWwgMjAxNSAyMzowMzozMCArMDkwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmUuYWMgLSBBdm9pZCBhbiBpbmNvcnJlY3QgY2hlY2sgZm9yIHB5dGhvbi4KKyBNYWtlZmlsZS5hbSAtIGF2b2lkIGhhcmQgY29kZWQgaG9zdCBpbmNsdWRlIHBhdGhzLgorCitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogTGkgWGluIDxsaXhpbi5mbnN0QGNuLmZ1aml0c3UuY29tPgorLS0tCisgYmluZGluZ3MvcHl0aG9uL01ha2VmaWxlLmFtIHwgIDMgKystCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgIHwgMTUgKystLS0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmluZGluZ3MvcHl0aG9uL01ha2VmaWxlLmFtIGIvYmluZGluZ3MvcHl0aG9uL01ha2VmaWxlLmFtCitpbmRleCA4MmI5YmI4Li5mOWZlN2E4IDEwMDY0NAorLS0tIGEvYmluZGluZ3MvcHl0aG9uL01ha2VmaWxlLmFtCisrKysgYi9iaW5kaW5ncy9weXRob24vTWFrZWZpbGUuYW0KK0BAIC0yMyw3ICsyMyw4IEBAIFNVQkRJUlMgPSB0ZXN0CisgQ09ORklHX0NMRUFOX0ZJTEVTID0gKi5sb1QgKi5yZWogKi5vcmlnCisgQU1fQ0ZMQUdTID0gLWZQSUMgLURQSUMKKyBQWUxJQlZFUiA/PSBweXRob24kKFBZVEhPTl9WRVJTSU9OKQorLUFNX0NQUEZMQUdTID0gLUkuIC1JJCh0b3BfYnVpbGRkaXIpIC1JQFBZSU5DTFVERURJUkAKKytQWUlOQyA/PSAvdXNyL2luY2x1ZGUvJChQWUxJQlZFUikKKytBTV9DUFBGTEFHUyA9IC1JLiAtSSQodG9wX2J1aWxkZGlyKSAtSSQoUFlJTkMpCisgTElCUyA9ICQodG9wX2J1aWxkZGlyKS9zcmMvbGliY2FwLW5nLmxhCisgU1dJR19GTEFHUyA9IC1weXRob24KKyBTV0lHX0lOQ0xVREVTID0gJHtBTV9DUFBGTEFHU30KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDFkNzc3ZDUuLjlkOTBmNjQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEyMywxOSArMTIzLDggQEAgaWYgdGVzdCB4JHVzZV9weXRob24gPSB4bm8gOyB0aGVuCisgZWxzZQorIEFDX01TR19SRVNVTFQodGVzdGluZykKKyBBTV9QQVRIX1BZVEhPTgorLVBZSU5DTFVERURJUj1gcHl0aG9uJHthbV9jdl9weXRob25fdmVyc2lvbn0gLWMgImZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWc7IHByaW50KHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignSU5DTFVERVBZJykpImAKKy1pZiB0ZXN0IC1mICR7UFlJTkNMVURFRElSfS9QeXRob24uaCA7IHRoZW4KKy0JcHl0aG9uX2ZvdW5kPSJ5ZXMiCistCUFDX1NVQlNUKFBZSU5DTFVERURJUikKKy0JQUNfTVNHX05PVElDRShQeXRob24gYmluZGluZ3Mgd2lsbCBiZSBidWlsdCkKKy1lbHNlCistCXB5dGhvbl9mb3VuZD0ibm8iCistCWlmIHRlc3QgeCR1c2VfcHl0aG9uID0geHllcyA7IHRoZW4KKy0JCUFDX01TR19FUlJPUihbUHl0aG9uIGV4cGxpY2l0bHkgcmVxdWlyZWQgYW5kIHB5dGhvbiBoZWFkZXJzIGZvdW5kXSkKKy0JZWxzZQorLQkJQUNfTVNHX1dBUk4oIlB5dGhvbiBoZWFkZXJzIG5vdCBmb3VuZCAtIHB5dGhvbiBiaW5kaW5ncyB3aWxsIG5vdCBiZSBtYWRlIikKKy0JZmkKKy1maQorK3B5dGhvbl9mb3VuZD0ieWVzIgorK0FDX01TR19OT1RJQ0UoUHl0aG9uIGJpbmRpbmdzIHdpbGwgYmUgYnVpbHQpCisgZmkKKyBBTV9DT05ESVRJT05BTChIQVZFX1BZVEhPTiwgdGVzdCAke3B5dGhvbl9mb3VuZH0gPSAieWVzIikKKyAKKy0tIAorMS44LjQuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC1uZy9saWJjYXAtbmdfMC43LjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC1uZy9saWJjYXAtbmdfMC43LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMxZDVkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwLW5nL2xpYmNhcC1uZ18wLjcuNy5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkFuIGFsdGVybmF0ZSBwb3NpeCBjYXBhYmlsaXRpZXMgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlRoZSBsaWJjYXAtbmcgbGlicmFyeSBpcyBpbnRlbmRlZCB0byBtYWtlIHByb2dyYW1taW5nIFwKK3dpdGggUE9TSVggY2FwYWJpbGl0aWVzIG11Y2ggZWFzaWVyIHRoYW4gdGhlIHRyYWRpdGlvbmFsIGxpYmNhcCBsaWJyYXJ5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9mcmVlY29kZS5jb20vcHJvamVjdHMvbGliY2FwLW5nIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisJCSAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWUzZWRhMDFkOTgxNWY4ZDI0YWFlMmRiZDg5YjY4YjA2IgorCitTUkNfVVJJID0gImh0dHA6Ly9wZW9wbGUucmVkaGF0LmNvbS9zZ3J1YmIvbGliY2FwLW5nL2xpYmNhcC1uZy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcHl0aG9uLnBhdGNoIgorCitpbmhlcml0IGxpYl9wYWNrYWdlIGF1dG90b29scyBweXRob25uYXRpdmUKKworU1JDX1VSSVttZDVzdW1dID0gIjNkN2QxMjZiMjllMjg2OWEwMjU3YzE3YzhiMGQ5YjJlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYxNTU0OWNlMzliMzMzZjZiNzhiYWVlMGMwYjRlZjE4YmM3MjZjNmJmMWNjYTEyM2RmZDg5ZGQ5NjNmNmQwNmIiCisKK0RFUEVORFMgKz0gInN3aWctbmF0aXZlIHB5dGhvbiIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtcHl0aG9uMyIKKworRVhUUkFfT0VNQUtFICs9ICJQWUxJQlZFUj0ncHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059JyBQWUlOQz0nJHtTVEFHSU5HX0lOQ0RJUn0vJHtQWUxJQlZFUn0nIgorCitQQUNLQUdFUyArPSAiJHtQTn0tcHl0aG9uIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vKi8uZGVidWciCitGSUxFU18ke1BOfS1weXRob24gPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgTW92aW5nIGxpYmNhcC1uZyB0byBiYXNlX2xpYmRpcgorCWlmIFsgISAke0R9JHtsaWJkaXJ9IC1lZiAke0R9JHtiYXNlX2xpYmRpcn0gXTsgdGhlbgorCQlta2RpciAtcCAke0R9LyR7YmFzZV9saWJkaXJ9LworCQltdiAtZiAke0R9JHtsaWJkaXJ9L2xpYmNhcC1uZy5zby4qICR7RH0ke2Jhc2VfbGliZGlyfS8KKwkJcmVscGF0aD0ke0Bvcy5wYXRoLnJlbHBhdGgoIiR7YmFzZV9saWJkaXJ9IiwgIiR7bGliZGlyfSIpfQorCQlsbiAtc2YgJHtyZWxwYXRofS9saWJjYXAtbmcuc28uMC4wLjAgJHtEfSR7bGliZGlyfS9saWJjYXAtbmcuc28KKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvbGliY2FwXzIuMjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC9saWJjYXBfMi4yNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmI5NGVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvbGliY2FwXzIuMjQuYmIKQEAgLTAsMCArMSw3NyBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBnZXR0aW5nL3NldHRpbmcgUE9TSVguMWUgY2FwYWJpbGl0aWVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9mdWxseWNhcGFibGUvIgorCisjIG5vIHNwZWNpZmljIEdQTCB2ZXJzaW9uIHJlcXVpcmVkCitMSUNFTlNFID0gIkJTRCB8IEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTGljZW5zZTttZDU9M2Y4NGZkNmYyOWQ0NTNhNTY1MTRjYjdlNGVhZDI1ZjEiCisKK0RFUEVORFMgPSAicGVybC1uYXRpdmUtcnVudGltZSIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L2xpYnMvc2VjdXJpdHkvbGludXgtcHJpdnMvJHtCUE59Mi8ke0JQTn0tJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDQzYWI5ZjY4MDQzNWE3ZmZmMzViNGFjZThkNDViODAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2VlNDU2OGY3OGRjODUxZDcyNmZjOTNmMjVmNGVkOTFjYzIyM2IxZmU4MjU5ZGFhNGE3NzE1OGQxNzRlNmM2NSIKKworaW5oZXJpdCBsaWJfcGFja2FnZQorCisjIGRvIE5PVCBwYXNzIHRhcmdldCBjZmxhZ3MgdG8gaG9zdCBjb21waWxhdGlvbnMKKyMKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIGxpYmNhcCB1c2VzIDo9IGZvciBjb21waWxlcnMsIGZvcnR1bmF0ZWx5LCBpdCBnaXZlcyB1cyBhIGhpbnQKKwkjIG9uIHdoYXQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggPz0KKwlzZWQgLWUgJ3MsOj0sPz0sZycgLWkgTWFrZS5SdWxlcworCXNlZCAtZSAncyxeQlVJTERfQ0ZMQUdTID89ICQoLipDRkxBR1MpLEJVSUxEX0NGTEFHUyA6PSAkKEJVSUxEX0NGTEFHUyksJyAtaSBNYWtlLlJ1bGVzCisKKwkjIGRpc2FibGUgZ3BlcmYgZGV0ZWN0aW9uCisJc2VkIC1lICcvc2hlbGwgZ3BlcmYvY2lmZXEgKCx5ZXMpJyAtaSBsaWJjYXAvTWFrZWZpbGUKK30KKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneGF0dHInLCAnYXR0cicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA/Pz0gIiIKKworUEFDS0FHRUNPTkZJR1thdHRyXSA9ICJMSUJBVFRSPXllcyxMSUJBVFRSPW5vLGF0dHIiCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiUEFNX0NBUD15ZXMsUEFNX0NBUD1ubyxsaWJwYW0iCisKK0VYVFJBX09FTUFLRSA9ICIgXAorICBJTkRFTlQ9ICBcCisgIGxpYj0ke0Bvcy5wYXRoLmJhc2VuYW1lKCcke2xpYmRpcn0nKX0gXAorICBSQUlTRV9TRVRGQ0FQPW5vIFwKKyAgRFlOQU1JQz15ZXMgXAorIgorCitFWFRSQV9PRU1BS0VfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgU1lTVEVNX0hFQURFUlM9JHtTVEFHSU5HX0lOQ0RJUn0iCisKKyMgdGhlc2UgYXJlIHByZXNlbnQgaW4gdGhlIGxpYmNhcCBkZWZhdWx0cywgc28gaW5jbHVkZSBpbiBvdXIgQ0ZMQUdTIHRvbworQ0ZMQUdTICs9ICItRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCIKKworZG9fY29tcGlsZSgpIHsKKwlvZV9ydW5tYWtlICR7RVhUUkFfT0VDT05GfQorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBcCisJCSR7RVhUUkFfT0VDT05GfSBcCisJCURFU1RESVI9IiR7RH0iIFwKKwkJcHJlZml4PSIke3ByZWZpeH0iIFwKKwkJU0JJTkRJUj0iJHtEfSR7c2JpbmRpcn0iCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgTW92ZSB0aGUgbGlicmFyeSB0byBiYXNlX2xpYmRpcgorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9saWJkaXJ9CisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCW12ICR7RH0ke2xpYmRpcn0vbGliY2FwKiAke0R9JHtiYXNlX2xpYmRpcn0KKyAgICAgICAgICAgICAgICBpZiBbIC1kICR7RH0ke2xpYmRpcn0vc2VjdXJpdHkgXTsgdGhlbgorCQkJbXYgJHtEfSR7bGliZGlyfS9zZWN1cml0eSAke0R9JHtiYXNlX2xpYmRpcn0KKwkJZmkKKwlmaQorfQorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9Lyouc28iCisKKyMgcGFtIGZpbGVzCitGSUxFU18ke1BOfSArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5zbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvLmRlYnVnLyouc28iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2hlY2svbGliY2hlY2tfMC4xMC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjaGVjay9saWJjaGVja18wLjEwLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBiNDU5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2hlY2svbGliY2hlY2tfMC4xMC4wLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgID0gIkNoZWNrIC0gdW5pdCB0ZXN0aW5nIGZyYW1ld29yayBmb3IgQyBjb2RlIgorSE9NRVBBR0UgPSAiaHR0cDovL2NoZWNrLnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImRldmVsIgorCitMSUNFTlNFICA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxFU1NFUjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2NoZWNrL2NoZWNrLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTNjNWU1Yzc3ZDA5MGUxMDNhMTdmM2VkN2ZkN2Q4YjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjVmNTA3NjZhYTZmOGZlNWEyZGY3NTI2NjZjYTAxYTk1MGFkZDQ1MDc5YWEwNjQxNmI4Mzc2NWIxY2Y3MTA1MiIKKworUyA9ICIke1dPUktESVJ9L2NoZWNrLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdGV4aW5mbworCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9BV0tfUEFUSD0ke2JpbmRpcn0vZ2F3ayIKKworUlJFUExBQ0VTXyR7UE59ID0gImNoZWNrICg8PSAwLjkuNSkiCitSREVQRU5EU18ke1BOfSArPSAiZ2F3ayIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjcm9jby9saWJjcm9jb18wLjYuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY3JvY28vbGliY3JvY29fMC42LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIxYjkxMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY3JvY28vbGliY3JvY29fMC42LjguYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJDYXNjYWRpbmcgU3R5bGUgU2hlZXQgKENTUykgcGFyc2luZyBhbmQgbWFuaXB1bGF0aW9uIHRvb2xraXQiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU1Y2E4MTdjY2I3ZDViNWI2NjM1NTY5MGU5YWJjNjA1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9jci1yZ2IuYztlbmRsaW5lPTIyO21kNT0zMWQ1ZjA5NDRkNTU2Yzg1ODlkMDRlYTYwNTVmY2M2NiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9jci10ZXN0LXV0aWxzLmM7ZW5kbGluZT0yMTttZDU9MjM4MmMyNzkzNGNhZTFkMzc5MmZjYjE3YTYxNDJjNGUiCisKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorREVQRU5EUyA9ICJnbGliLTIuMCBsaWJ4bWwyIHpsaWIiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKK0VYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtQnN5bWJvbGljPWF1dG8iCitQUiA9ICJyMiIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9jcm9jby0wLjYtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ25vbWViYXNlIGd0ay1kb2MgYmluY29uZmlnLWRpc2FibGVkCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjc2N2U3M2M0MTc0Zjc1Yjk5Njk1ZDQ1MzBmZDliYjgwIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZWE2ZTFiODU4YzU1MjE5Y2VmZDcxMDk3NTZiZmY1YmMxYTc3NGJhN2E1NWY3ZDNjY2Q3MzRkNmI4NzFiODU3MCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZGFlbW9uL2xpYmRhZW1vbi9maXgtaW5jbHVkZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmRhZW1vbi9saWJkYWVtb24vZml4LWluY2x1ZGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMjdhZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmRhZW1vbi9saWJkYWVtb24vZml4LWluY2x1ZGVzLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK211c2wgY29tcGxhaW5zCitmYXRhbCBlcnJvcjogc3lzL3VuaXN0ZC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CithbmQgcmlnaHRseSBzbworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBsaWJkYWVtb24tMC4xNC5vcmlnL2V4YW1wbGVzL3Rlc3RkLmMKKysrKyBsaWJkYWVtb24tMC4xNC9leGFtcGxlcy90ZXN0ZC5jCitAQCAtMjEsOSArMjEsOSBAQAorICNpbmNsdWRlIDxzaWduYWwuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKy0jaW5jbHVkZSA8c3lzL3VuaXN0ZC5oPgorICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisgCisgI2luY2x1ZGUgPGxpYmRhZW1vbi9kZm9yay5oPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJkYWVtb24vbGliZGFlbW9uXzAuMTQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmRhZW1vbi9saWJkYWVtb25fMC4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzBlZTE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJkYWVtb24vbGliZGFlbW9uXzAuMTQuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJMaWdodHdlaWdodCBDIGxpYnJhcnkgd2hpY2ggZWFzZXMgdGhlIHdyaXRpbmcgb2YgVU5JWCBkYWVtb25zIgorU0VDVElPTiA9ICJsaWJzIgorQVVUSE9SID0gIkxlbm5hcnQgUG9ldHRlcmluZyA8bGVubmFydEBwb2V0dGVyaW5nLm5ldD4iCitIT01FUEFHRSA9ICJodHRwOi8vMHBvaW50ZXIuZGUvbGVubmFydC9wcm9qZWN0cy9saWJkYWVtb24vIgorTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJkYWVtb24vZGFlbW9uLmg7YmVnaW5saW5lPTk7ZW5kbGluZT0yMTttZDU9YmQ5ZmJlNTdjZDk2ZDFhNTg0OGE4YmExMmQ5YTZiZjQiCisKK1NSQ19VUkkgPSAiaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvcHJvamVjdHMvbGliZGFlbW9uL2xpYmRhZW1vbi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LWluY2x1ZGVzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MDlkYzI3MTA3YzIxYmNkOWZiZjJmOTVmNTY2OTU2MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZDIzZWI1ZjZmOTg2ZGNjN2U3MDgzMDczNTViYTMyODlhYmUwM2NjMzgxZmM0N2E4MGJjYTRhNTBhYTZiODM0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1seW54IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmRldi9saWJldmRldl8xLjQuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZkZXYvbGliZXZkZXZfMS40LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg1MTMwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZkZXYvbGliZXZkZXZfMS40LjIuYmIKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJXcmFwcGVyIGxpYnJhcnkgZm9yIGV2ZGV2IGRldmljZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2xpYmV2ZGV2LyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJNSVQtWCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1YWFlMGQzOGZlZWE2ZmRhOTdjYTM4MWNiOTEzMmViIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmV2ZGV2L2xpYmV2ZGV2Lmg7ZW5kbGluZT0yMTttZDU9N2ZmNGYwYjUxMTMyNTJjMmYxYTgyOGUwYmJhZDk4ZDEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvbGliZXZkZXYvJHtCUH0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZGViZmNkNTE1MzU1OGViYTI1YThlNzFlYjI1MzRhZTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2M3N2IyMTNmMDc1NzA2ZDQyOGEyYWY1NGI2NmJmODZiMDNhNjhlOWZiMzkwZTdlYzQ4Y2Y1NTA2NTk3MDY0MyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50L3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZlbnQvbGliZXZlbnQvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjE2ODgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50L3J1bi1wdGVzdApAQCAtMCwwICsxLDE4IEBACisjIS9iaW4vc2gKKworZmFpbD0wCitmb3IgdGVzdCBpbiAuL3Rlc3QvKgorZG8KKwkkdGVzdAorCWlmIFsgJD8gLWVxIDAgXQorCXRoZW4KKwkJZmFpbD0xCisJZmkKK2RvbmUKKworaWYgWyAkZmFpbCAtZXEgMCBdCit0aGVuCisJZWNobyAiUEFTUzogbGliZXZlbnQiCitlbHNlCisJZWNobyAiRkFJTDogbGliZXZlbnQiCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudF8yLjAuMjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50XzIuMC4yMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGMyNjNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudF8yLjAuMjIuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJBbiBhc3luY2hyb25vdXMgZXZlbnQgbm90aWZpY2F0aW9uIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vbGliZXZlbnQub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD01MDg4NCZhdGlkPTQ2MTMyMiIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT00NWM1MzE2ZmY2ODRiY2ZlMmY5Zjg2ZDhiMTI3OTU1OSIKKworU1JDX1VSSSA9ICIgXAorICAgICR7U09VUkNFRk9SR0VfTUlSUk9SfS9sZXZlbnQvJHtCUH0tc3RhYmxlLnRhci5neiBcCisgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjNGM1NmY5ODZhYTk4NTY3N2NhMWRiODk2MzBhMmUxMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MWMyYzQ5ZjBhZGFkYWNmZGJlNjMzMmEzNzJjMzhjZjljOGI3ODk1YmI3M2RhYmVhYTUzY2RjYzFkNGUxZmEzIgorCitTID0gIiR7V09SS0RJUn0vJHtCUE59LSR7UFZ9LXN0YWJsZSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS1lbmFibGUtb3BlbnNzbCwtLWRpc2FibGUtb3BlbnNzbCxvcGVuc3NsIgorCitpbmhlcml0IGF1dG90b29scworCisjIE5lZWRlZCBmb3IgRGViaWFuIHBhY2thZ2luZworTEVBRF9TT05BTUUgPSAibGliZXZlbnQtMi4wLnNvIgorCitpbmhlcml0IHB0ZXN0CisKK0RFUEVORFMgPSAiemxpYiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWluc3RhbGwgLWQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCWZvciBmaWxlIGluICR7Qn0vdGVzdC8ubGlicy9yZWdyZXNzICR7Qn0vdGVzdC8ubGlicy90ZXN0KgorCWRvCisJCWluc3RhbGwgLW0gMDc1NSAkZmlsZSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJleGlmL2xpYmV4aWZfMC42LjIxLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJleGlmL2xpYmV4aWZfMC42LjIxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZjRjYWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV4aWYvbGliZXhpZl8wLjYuMjEuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciByZWFkaW5nIGV4dGVuZGVkIGltYWdlIGluZm9ybWF0aW9uIChFWElGKSBmcm9tIEpQRUcgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYmV4aWYiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjQzYjcyNWQ3MWJiNWRmNGExZTU5MjBiMzQ0Yjg2YWQiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xpYmV4aWYvbGliZXhpZi0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjczMzliODk4NTBmMjhjOGYxYzIzN2YyMzNlMDViMjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTZjZGFlYjYyZWIzZTZkZmFiMjQzNWY3ZDdiY2NkMmYzNzQzOGQyMWM1MjE4ZWM0ZTU4ZWZhOTE1N2Q0ZDQxYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCXNlZCAtaSBzOmRvY1wgYmluYXJ5OmJpbmFyeTpnIE1ha2VmaWxlCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm0tZXh0cmEvMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm0tZXh0cmEvMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWE1MWQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmbS9saWJmbS1leHRyYS8wMDAxLW5scy5tNC1UYWtlLWl0LWZyb20tZ2V0dGV4dC0wLjE1LnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gYzMyMDc5OWM5NDFkNDJhOWI3ZTM1MTgwNTM1OTY5NGVhM2IzNmQyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDUgQXByIDIwMTUgMDk6MDg6MzggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gbmxzLm00OiBUYWtlIGl0IGZyb20gZ2V0dGV4dC0wLjE1CisKK0l0IG90aGVyd2lzZSBleHBlY3RzIGdldHRleHQgdG8gcHJvdmlkZSBpdC4gTGV0cyBnbyBpbmRlcGVuZGVudAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIG00L25scy5tNCB8IDMwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG00L25scy5tNAorCitkaWZmIC0tZ2l0IGEvbTQvbmxzLm00IGIvbTQvbmxzLm00CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMmM4ZmU2OQorLS0tIC9kZXYvbnVsbAorKysrIGIvbTQvbmxzLm00CitAQCAtMCwwICsxLDMwIEBACisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAzLCAyMDA1LTIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisrZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisrZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKytkbmwKKytkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKytkbmwgZnVuY3Rpb25hbGl0eS4KKytkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKytkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrZG5sIFRoZXkgYXJlIG5vdCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgVWxyaWNoIERyZXBwZXIgZHJlcHBlckBjeWdudXMuY29tLCAxOTk1LTIwMDAuCisrZG5sIEJydW5vIEhhaWJsZSBoYWlibGVAY2xpc3AuY29ucy5vcmcsIDIwMDAtMjAwMy4KKysKKytBQ19QUkVSRVEoMi41MCkKKysKKytBQ19ERUZVTihbQU1fTkxTXSwKKytbCisrQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWRdKQorK2RubCBEZWZhdWx0IGlzIGVuYWJsZWQgTkxTCisrQUNfQVJHX0VOQUJMRShubHMsCisrWyAtLWRpc2FibGUtbmxzIGRvIG5vdCB1c2UgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnRdLAorK1VTRV9OTFM9JGVuYWJsZXZhbCwgVVNFX05MUz15ZXMpCisrQUNfTVNHX1JFU1VMVCgkVVNFX05MUykKKytBQ19TVUJTVChVU0VfTkxTKQorK10pCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm0tZXh0cmFfMS4yLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtLWV4dHJhXzEuMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZDJkNjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtLWV4dHJhXzEuMi4zLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgZmlsZSBtYW5hZ2VtZW50IgorSE9NRVBBR0UgPSAiaHR0cDovL3BjbWFuZm0uc291cmNlZm9yZ2UubmV0LyIKKworTElDRU5TRSA9ICJMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3JjL2ZtLWV4dHJhLmg7YmVnaW5saW5lPTg7ZW5kbGluZT0yMTttZDU9ZWYxZjg0ZGE2NGIzYzAxY2NhNDQ3MjEyZjdlZjYwMDciCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitERVBFTkRTID0gImdsaWItMi4wIGludGx0b29sLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcGNtYW5mbS9saWJmbS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2ZmMzgyMDA3MDE2NThmN2U4MGUyNWVkMzk1ZDkyZGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzY5MmYxNjI0YTRjYmM4ZDFkZDU1ZjNiM2YzMzY5ZmJmNWQyNmY2M2E5MTZlMmMyOTUyMzBiMjM0NGUxZmJmOSIKKworUyA9ICIke1dPUktESVJ9L2xpYmZtLSR7UFZ9IgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWV4dHJhLW9ubHkgLS13aXRoLWd0az1ubyIKKworUFIgPSAicjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBndGstZG9jCisKK2RvX2NvbmZpZ3VyZVtkaXJzXSA9KyAiJHtTfS9tNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm1fMS4yLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtXzEuMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOTUwMmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtXzEuMi4zLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgZmlsZSBtYW5hZ2VtZW50IgorSE9NRVBBR0UgPSAiaHR0cDovL3BjbWFuZm0uc291cmNlZm9yZ2UubmV0LyIKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2ZtLmg7YmVnaW5saW5lPTg7ZW5kbGluZT0yMTttZDU9ZWYxZjg0ZGE2NGIzYzAxY2NhNDQ3MjEyZjdlZjYwMDcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2Jhc2UvZm0tY29uZmlnLmg7YmVnaW5saW5lPTEwO2VuZGxpbmU9MjM7bWQ1PWVmMWY4NGRhNjRiM2MwMWNjYTQ0NzIxMmY3ZWY2MDA3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9mbS1ndGsuaDtiZWdpbmxpbmU9NjtlbmRsaW5lPTE5O21kNT02NDZiYWE0OTU1YzA0ZmU3NjhmMmNhMjdiOTJhYzhkZCIKKworCitTRUNUSU9OID0gIngxMS9saWJzIgorREVQRU5EUyA9ICJnbGliLTIuMCBwYW5nbyBndGsrIG1lbnUtY2FjaGUgaW50bHRvb2wtbmF0aXZlIGxpYmV4aWYgbGliZm0tZXh0cmEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3BjbWFuZm0vbGliZm0tJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2ZmMzgyMDA3MDE2NThmN2U4MGUyNWVkMzk1ZDkyZGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzY5MmYxNjI0YTRjYmM4ZDFkZDU1ZjNiM2YzMzY5ZmJmNWQyNmY2M2E5MTZlMmMyOTUyMzBiMjM0NGUxZmJmOSIKKworUFIgPSAicjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBndGstZG9jCisKK2RvX2NvbmZpZ3VyZVtkaXJzXSA9KyAiJHtTfS9tNCIKKworUEFDS0FHRVMgKz0gIiR7UE59LW1pbWUiCitGSUxFU18ke1BOfS1taW1lID0gIiR7ZGF0YWRpcn0vbWltZS8iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9saWJmbS9tb2R1bGVzLy5kZWJ1ZyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgICMgcmVtb3ZlIGZpbGVzIHdoaWNoIGFyZSBwYXJ0IG9mIGxpYmZtLWV4dHJhCisgICAgcm0gLWYgJHtEfSR7aW5jbHVkZWRpcn0vbGliZm0tMS4wL2ZtLXhtbC1maWxlLmgKKyAgICBybSAtZiAke0R9JHtpbmNsdWRlZGlyfS9saWJmbS0xLjAvZm0tdmVyc2lvbi5oCisgICAgcm0gLWYgJHtEfSR7aW5jbHVkZWRpcn0vbGliZm0tMS4wL2ZtLWV4dHJhLmgKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJmbS1leHRyYS5wYworICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vbGliZm0tZXh0cmEuc28qCisgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9saWJmbS1leHRyYS5hCisgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9saWJmbS1leHRyYS5sYQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZGRmYzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxNTEgQEAKK0FkZCBhbmQgdXNlIHBrZy1jb25maWcgZm9yIGxpYmdjcnlwdCBpbnN0ZWFkIG9mIC1jb25maWcgc2NyaXB0cy4KKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW3Vwc3RyZWFtIGhhdmUgaW5kaWNhdGVkIHRoZXkgZG9uJ3Qgd2FudCBhIHBrZy1jb25maWcgZGVwZW5kZW5jeV0KKworUlAgMjAxNC81LzIyCisKK0luZGV4OiBsaWJnY3J5cHQtMS4yLjQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliZ2NyeXB0LTEuMi40Lm9yaWcvY29uZmlndXJlLmFjCTIwMDgtMDMtMTkgMjI6MTQ6NTAuMDAwMDAwMDAwICswMDAwCisrKysgbGliZ2NyeXB0LTEuMi40L2NvbmZpZ3VyZS5hYwkyMDA4LTAzLTE5IDIyOjE0OjU4LjAwMDAwMDAwMCArMDAwMAorQEAgLTgwNyw2ICs4MDcsNyBAQAorIGRvYy9NYWtlZmlsZQorIHNyYy9NYWtlZmlsZQorIHNyYy9nY3J5cHQuaAorK3NyYy9saWJnY3J5cHQucGMKKyBzcmMvbGliZ2NyeXB0LWNvbmZpZworIHRlc3RzL01ha2VmaWxlCisgdzMyLWRsbC9NYWtlZmlsZQorSW5kZXg6IGxpYmdjcnlwdC0xLjIuNC9zcmMvbGliZ2NyeXB0LnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgbGliZ2NyeXB0LTEuMi40L3NyYy9saWJnY3J5cHQucGMuaW4JMjAwOC0wMy0xOSAyMjoxNDo1OC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsMzMgQEAKKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIHBrZy1jb25maWcgbWV0YWRhdGEgZmlsZS4KKysjIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKysjIEF1dGhvcjogU2ltb24gSm9zZWZzc29uCisrIworKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdGhlIGF1dGhvciBnaXZlcworKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisrIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKysjCisrIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrIyBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0IGV2ZW4gdGhlCisrIyBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKysKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKysKKysjIEFQSSBpbmZvCisrYXBpX3ZlcnNpb249QExJQkdDUllQVF9DT05GSUdfQVBJX1ZFUlNJT05ACisraG9zdD1ATElCR0NSWVBUX0NPTkZJR19IT1NUQAorKworKyMgTWlzYyBpbmZvcm1hdGlvbi4KKytzeW1tZXRyaWNfY2lwaGVycz1ATElCR0NSWVBUX0NJUEhFUlNACisrYXN5bW1ldHJpY19jaXBoZXJzPUBMSUJHQ1JZUFRfUFVCS0VZX0NJUEhFUlNACisrZGlnZXN0cz1ATElCR0NSWVBUX0RJR0VTVFNACisrCisrTmFtZTogbGliZ2NyeXB0CisrRGVzY3JpcHRpb246IEdOVSBjcnlwdG8gbGlicmFyeQorK1VSTDogaHR0cDovL3d3dy5nbnVwZy5vcmcKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGdjcnlwdAorK0xpYnMucHJpdmF0ZTogLUwke2xpYmRpcn0gLWxncGctZXJyb3IKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSAKK0luZGV4OiBsaWJnY3J5cHQtMS42LjEvc3JjL2xpYmdjcnlwdC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmdjcnlwdC0xLjYuMS5vcmlnL3NyYy9saWJnY3J5cHQubTQJMjAxMy0xMi0xNiAxNzo0NDozMi4wMDAwMDAwMDAgKzAwMDAKKysrKyBsaWJnY3J5cHQtMS42LjEvc3JjL2xpYmdjcnlwdC5tNAkyMDE0LTA1LTEzIDIxOjI1OjM3LjQ3ODM4OTgzMyArMDAwMAorQEAgLTIyLDE3ICsyMiw3IEBACisgZG5sCisgQUNfREVGVU4oW0FNX1BBVEhfTElCR0NSWVBUXSwKKyBbIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKy0gIEFDX0FSR19XSVRIKGxpYmdjcnlwdC1wcmVmaXgsCistICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJnY3J5cHQtcHJlZml4PVBGWF0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeCB3aGVyZSBMSUJHQ1JZUFQgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldKSwKKy0gICAgIGxpYmdjcnlwdF9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIGxpYmdjcnlwdF9jb25maWdfcHJlZml4PSIiKQorLSAgaWYgdGVzdCB4JGxpYmdjcnlwdF9jb25maWdfcHJlZml4ICE9IHggOyB0aGVuCistICAgICBpZiB0ZXN0IHgke0xJQkdDUllQVF9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorLSAgICAgICAgTElCR0NSWVBUX0NPTkZJRz0kbGliZ2NyeXB0X2NvbmZpZ19wcmVmaXgvYmluL2xpYmdjcnlwdC1jb25maWcKKy0gICAgIGZpCistICBmaQorIAorLSAgQUNfUEFUSF9UT09MKExJQkdDUllQVF9DT05GSUcsIGxpYmdjcnlwdC1jb25maWcsIG5vKQorICAgdG1wPWlmZWxzZShbJDFdLCAsMToxLjIuMCwkMSkKKyAgIGlmIGVjaG8gIiR0bXAiIHwgZ3JlcCAnOicgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAgIHJlcV9saWJnY3J5cHRfYXBpPWBlY2hvICIkdG1wIiAgICAgfCBzZWQgJ3MvXCguKlwpOlwoLipcKS9cMS8nYAorQEAgLTQyLDQ4ICszMiwxMyBAQAorICAgICAgbWluX2xpYmdjcnlwdF92ZXJzaW9uPSIkdG1wIgorICAgZmkKKyAKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgTElCR0NSWVBUIC0gdmVyc2lvbiA+PSAkbWluX2xpYmdjcnlwdF92ZXJzaW9uKQorLSAgb2s9bm8KKy0gIGlmIHRlc3QgIiRMSUJHQ1JZUFRfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorLSAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9saWJnY3J5cHRfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9saWJnY3J5cHRfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICByZXFfbWljcm89YGVjaG8gJG1pbl9saWJnY3J5cHRfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMy8nYAorLSAgICBsaWJnY3J5cHRfY29uZmlnX3ZlcnNpb249YCRMSUJHQ1JZUFRfQ09ORklHIC0tdmVyc2lvbmAKKy0gICAgbWFqb3I9YGVjaG8gJGxpYmdjcnlwdF9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wxLydgCistICAgIG1pbm9yPWBlY2hvICRsaWJnY3J5cHRfY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMi8nYAorLSAgICBtaWNybz1gZWNobyAkbGliZ2NyeXB0X2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDMvJ2AKKy0gICAgaWYgdGVzdCAiJG1ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICBvaz15ZXMKKy0gICAgZWxzZQorLSAgICAgICAgaWYgdGVzdCAiJG1ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZ3QgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgIGlmIHRlc3QgIiRtaW5vciIgLWVxICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbWljcm8iIC1nZSAiJHJlcV9taWNybyI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICBmaQorLSAgZmkKKy0gIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEFDX01TR19SRVNVTFQoW3llcyAoJGxpYmdjcnlwdF9jb25maWdfdmVyc2lvbildKQorLSAgZWxzZQorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKExJQkdDUllQVCwgW2xpYmdjcnlwdCA+PSAkbWluX2xpYmdjcnlwdF92ZXJzaW9uXSwgW29rPXllc10sIFtvaz1ub10pCisrCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorICAgICAgIyBJZiB3ZSBoYXZlIGEgcmVjZW50IGxpYmdjcnlwdCwgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUKKyAgICAgICMgQVBJIGlzIGNvbXBhdGlibGUKKyAgICAgIGlmIHRlc3QgIiRyZXFfbGliZ2NyeXB0X2FwaSIgLWd0IDAgOyB0aGVuCistICAgICAgICB0bXA9YCRMSUJHQ1JZUFRfQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorKyAgICAgICAgdG1wPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWFwaV92ZXJzaW9uIGxpYmdjcnlwdGAKKyAgICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtMSUJHQ1JZUFQgQVBJIHZlcnNpb25dKQorICAgICAgICAgICAgaWYgdGVzdCAiJHJlcV9saWJnY3J5cHRfYXBpIiAtZXEgIiR0bXAiIDsgdGhlbgorQEAgLTk2LDEwICs1MSw4IEBACisgICAgICBmaQorICAgZmkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIExJQkdDUllQVF9DRkxBR1M9YCRMSUJHQ1JZUFRfQ09ORklHIC0tY2ZsYWdzYAorLSAgICBMSUJHQ1JZUFRfTElCUz1gJExJQkdDUllQVF9DT05GSUcgLS1saWJzYAorICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorLSAgICBsaWJnY3J5cHRfY29uZmlnX2hvc3Q9YCRMSUJHQ1JZUFRfQ09ORklHIC0taG9zdCAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vbmVgCisrICAgIGxpYmdjcnlwdF9jb25maWdfaG9zdD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1ob3N0IGxpYmdjcnlwdGAKKyAgICAgaWYgdGVzdCB4IiRsaWJnY3J5cHRfY29uZmlnX2hvc3QiICE9IHhub25lIDsgdGhlbgorICAgICAgIGlmIHRlc3QgeCIkbGliZ2NyeXB0X2NvbmZpZ19ob3N0IiAhPSB4IiRob3N0IiA7IHRoZW4KKyAgIEFDX01TR19XQVJOKFtbCitAQCAtMTEzLDggKzY2LDYgQEAKKyAgICAgICBmaQorICAgICBmaQorICAgZWxzZQorLSAgICBMSUJHQ1JZUFRfQ0ZMQUdTPSIiCistICAgIExJQkdDUllQVF9MSUJTPSIiCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisgICBmaQorICAgQUNfU1VCU1QoTElCR0NSWVBUX0NGTEFHUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2ZpeC1JQ0UtZmFpbHVyZS1vbi1taXBzLXdpdGgtb3B0aW9uLU8tYW5kLWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9maXgtSUNFLWZhaWx1cmUtb24tbWlwcy13aXRoLW9wdGlvbi1PLWFuZC1nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MmU2MmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9maXgtSUNFLWZhaWx1cmUtb24tbWlwcy13aXRoLW9wdGlvbi1PLWFuZC1nLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK3Rlc3RzL2JlbmNoLXNsb3BlLmM6IHdvcmthcm91bmQgSUNFIGZhaWx1cmUgb24gbWlwcyB3aXRoICctTyAtZycKKworSGl0IGEgSUNFIGFuZCBjb3VsZCByZWR1Y2UgaXQgdG8gdGhlIGZvbGxvd2luZyBtaW5pbWFsIGV4YW1wbGU6CisKKzEuIE9ubHkgdGhlIHNpemUgb2YgYXJyYXkgYXNzaWduZWQgd2l0aCAyIGNhdXNlZCB0aGUgaXNzdWU6CiskIGNhdCA+IG1pcGdjYy10ZXN0LmMgPDwgRU5ECisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgICAgIGNoYXIgKnBTdHJBcnJ5W0FSUkFZX1NJWkVfTUFYXSA9IHsiaGVsbG8ifTsKKyAgICAgICAgaW50IGkgPSAwOworCisgICAgICAgIHdoaWxlKHBTdHJBcnJ5W2ldICYmIGk8QVJSQVlfU0laRV9NQVgpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCBwU3RyQXJyeVtpXSk7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK0VORAorCisyLiBPbmx5IC1PMSBhbmQgLWcgb24gbWlwcyBjYXVzZWQgdGhlIGlzc3VlOgorJCBtaXBzLXBva3ktbGludXgtZ2NjIC1PMSAtZyAtbyBtaXBnY2MtdGVzdCBtaXBnY2MtdGVzdC5jCittaXBnY2MtdGVzdC5jOiBJbiBmdW5jdGlvbiAnbWFpbic6CittaXBnY2MtdGVzdC5jOjE4OjE6IGludGVybmFsIGNvbXBpbGVyIGVycm9yOiBpbiBkd2FyZjJvdXRfdmFyX2xvY2F0aW9uLCBhdCBkd2FyZjJvdXQuYzoyMDgxMAorIH0KKyBeCitQbGVhc2Ugc3VibWl0IGEgZnVsbCBidWcgcmVwb3J0LAord2l0aCBwcmVwcm9jZXNzZWQgc291cmNlIGlmIGFwcHJvcHJpYXRlLgorU2VlIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVncy5odG1sPiBmb3IgaW5zdHJ1Y3Rpb25zCisKKzMuIFRoZSBxdWljayB3b3Jrcm91bmQgaXMgdHJ5aW5nIHRvIGVubGFyZ2UgdGhlIHNpemUgb2YgYXJyYXkgd2l0aCBsYXJnZXIKK3RoYW4gMi4KKworNC4gRmlsZSBhIGJ1ZyB0byBHTlUsIGJ1dCBpdCBjb3VsZCBub3QgYmUgcmVwcm9kdWNlZCBvbiB0aGVyZSBlbnZpcm9ubWVudC4KK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjA2NDMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdHMvYmVuY2gtc2xvcGUuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0cy9iZW5jaC1zbG9wZS5jIGIvdGVzdHMvYmVuY2gtc2xvcGUuYworaW5kZXggYmQwNTA2NC4uMjhjMjQzOCAxMDA2NDQKKy0tLSBhL3Rlc3RzL2JlbmNoLXNsb3BlLmMKKysrKyBiL3Rlc3RzL2JlbmNoLXNsb3BlLmMKK0BAIC0xMTk3LDcgKzExOTcsNyBAQCBzdGF0aWMgc3RydWN0IGJlbmNoX29wcyBoYXNoX29wcyA9IHsKKyB9OworIAorIAorLXN0YXRpYyBzdHJ1Y3QgYmVuY2hfaGFzaF9tb2RlIGhhc2hfbW9kZXNbXSA9IHsKKytzdGF0aWMgc3RydWN0IGJlbmNoX2hhc2hfbW9kZSBoYXNoX21vZGVzWzNdID0geworICAgeyIiLCAmaGFzaF9vcHN9LAorICAgezB9LAorIH07CitAQCAtMTM0OSw3ICsxMzQ5LDcgQEAgc3RhdGljIHN0cnVjdCBiZW5jaF9vcHMgbWFjX29wcyA9IHsKKyB9OworIAorIAorLXN0YXRpYyBzdHJ1Y3QgYmVuY2hfbWFjX21vZGUgbWFjX21vZGVzW10gPSB7Cisrc3RhdGljIHN0cnVjdCBiZW5jaF9tYWNfbW9kZSBtYWNfbW9kZXNbM10gPSB7CisgICB7IiIsICZtYWNfb3BzfSwKKyAgIHswfSwKKyB9OworLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2xpYmdjcnlwdC1maXgtYnVpbGRpbmctZXJyb3Itd2l0aC1PMi1pbi1zeXNyb290LXBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9saWJnY3J5cHQtZml4LWJ1aWxkaW5nLWVycm9yLXdpdGgtTzItaW4tc3lzcm9vdC1wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZTU0MDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9saWJnY3J5cHQtZml4LWJ1aWxkaW5nLWVycm9yLXdpdGgtTzItaW4tc3lzcm9vdC1wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitsaWJnY3J5cHQ6IGZpeCBidWlsZGluZyBlcnJvciB3aXRoICctTzInIGluIHN5c3Jvb3QgcGF0aAorCitDaGFyYWN0ZXJzIGxpa2UgJy1PMicgb3IgJy1PZmFzdCcgd2lsbCBiZSByZXBsYWNlZCBieSAnLU8xJyB3aGVuIGNvbXBpbGluZyBjaXBoZXIuCitJZiB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIGxpYmdjcnlwdCBhbmQgc3lzcm9vdCBjb250YWlucyBzdWNoIGNoYXJhY3RlcnMsIHdlIHdvdWxkCitnZXQgY29tcGlsZSBlcnJvcnMgYmVjYXVzZSB0aGUgc3lzcm9vdCBwYXRoIGhhcyBiZWVuIG1vZGlmaWVkLgorCitGaXggdGhpcyBieSBhZGRpbmcgYmxhbmsgc3BhY2VzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9yaWdpbmFsIG1hdGNoaW5nIHBhdHRlcm4gaW4gdGhlCitzZWQgY29tbWFuZC4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgY2lwaGVyL01ha2VmaWxlLmFtIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY2lwaGVyL01ha2VmaWxlLmFtIGIvY2lwaGVyL01ha2VmaWxlLmFtCitpbmRleCA3NmNkYzk2Li45YTg5NzkyIDEwMDY0NAorLS0tIGEvY2lwaGVyL01ha2VmaWxlLmFtCisrKysgYi9jaXBoZXIvTWFrZWZpbGUuYW0KK0BAIC02OSw3ICs2OSw3IEBAIHJmYzIyNjguYyBcCisgY2FtZWxsaWEuYyBjYW1lbGxpYS5oIGNhbWVsbGlhLWdsdWUuYworIAorIGlmIEVOQUJMRV9PX0ZMQUdfTVVOR0lORworLW9fZmxhZ19tdW5naW5nID0gc2VkIC1lICdzLy1PXChbMi05c11bMi05c10qXCkvLU8xLycgLWUgJ3MvLU9mYXN0Ly1PMS9nJworK29fZmxhZ19tdW5naW5nID0gc2VkIC1lICdzLyAtT1woWzItOXNdWzItOXNdKlwpIC8gLU8xIC8nIC1lICdzLyAtT2Zhc3QgLyAtTzEgL2cnCisgZWxzZQorIG9fZmxhZ19tdW5naW5nID0gY2F0CisgZW5kaWYKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHQuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODNiZTc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0LmluYwpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIkdlbmVyYWwgcHVycG9zZSBjcnlwdG9ncmFwaGljIGxpYnJhcnkgYmFzZWQgb24gdGhlIGNvZGUgZnJvbSBHbnVQRyIKK0hPTUVQQUdFID0gImh0dHA6Ly9kaXJlY3RvcnkuZnNmLm9yZy9wcm9qZWN0L2xpYmdjcnlwdC8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5nMTBjb2RlLmNvbS9nbnVwZy9pbmRleCIKK1NFQ1RJT04gPSAibGlicyIKKworIyBoZWxwZXIgcHJvZ3JhbSBnY3J5cHRybmQgYW5kIGdldHJhbmRvbSBhcmUgdW5kZXIgR1BMLCByZXN0IExHUEwKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErICYgR1BMdjMrIgorTElDRU5TRV8ke1BOfSA9ICJMR1BMdjIuMSsiCitMSUNFTlNFXyR7UE59LWRldiA9ICJHUEx2MisgJiBMR1BMdjIuMSsiCitMSUNFTlNFX2R1bXBzZXhwLWRldiA9ICJHUEx2MysiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1iYmI0NjEyMTFhMzNiMTM0ZDQyZWQ1ZWU4MDJiMzdmZiIKKworREVQRU5EUyA9ICJsaWJncGctZXJyb3IgbGliY2FwIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0L2xpYmdjcnlwdC9saWJnY3J5cHQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJnY3J5cHQtZml4LWJ1aWxkaW5nLWVycm9yLXdpdGgtTzItaW4tc3lzcm9vdC1wYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1JQ0UtZmFpbHVyZS1vbi1taXBzLXdpdGgtb3B0aW9uLU8tYW5kLWcucGF0Y2ggXAorIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2xpYmdjcnlwdC1jb25maWciCisKK1BSID0gInIxIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1hc20gLS13aXRoLWNhcGFiaWxpdGllcyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgRWxzZSB0aGlzIGNvdWxkIGJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aGUgb25lIGluIGFjbG9jYWwtY29weQorCXJtIC1mICR7U30vbTQvZ3BnLWVycm9yLm00Cit9CisKKyMgbGliZ2NyeXB0LnBjIGlzIGFkZGVkIGxvY2FsbHkgYW5kIHRodXMgaW5zdGFsbGVkIGhlcmUKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnCisJaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vc3JjL2xpYmdjcnlwdC5wYyAke0R9LyR7bGliZGlyfS9wa2djb25maWcvCit9CisKK1BBQ0tBR0VTID0rICJkdW1wc2V4cC1kZXYiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2htYWMyNTYiCitGSUxFU19kdW1wc2V4cC1kZXYgKz0gIiR7YmluZGlyfS9kdW1wc2V4cCIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0XzEuNi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0XzEuNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMDZjZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHRfMS42LjMuYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIGxpYmdjcnlwdC5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gImRlMDNiODY3ZDAyZmRmMTE1YTFiYWM4YmI4YjVjM2EzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY5ZTk0ZTFhNzA4NGQ5NGUxYTZjYTI2ZDQzNjA2OGNiNzQ4NjJkMTBhNzM1M2NmYWU1NzlhMmQ4ODY3NGZmMDkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3IvcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yL3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmZlZWRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yL3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDE1MCBAQAorCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5tbi1sb2dpc3Rpay5kZS91bnN1cHBvcnRlZC9weGEyNTAvcGF0Y2hlcgorIworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGxpYmdwZy1lcnJvci0xLjE3L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmdwZy1lcnJvci0xLjE3Lm9yaWcvY29uZmlndXJlLmFjCisrKysgbGliZ3BnLWVycm9yLTEuMTcvY29uZmlndXJlLmFjCitAQCAtNTI5LDYgKzUyOSw3IEBAIEFDX0NPTkZJR19GSUxFUyhbc3JjL01ha2VmaWxlIHRlc3RzL01ha2UKKyBBQ19DT05GSUdfRklMRVMoW2xhbmcvTWFrZWZpbGUgbGFuZy9jbC9NYWtlZmlsZSBsYW5nL2NsL2dwZy1lcnJvci5hc2RdKQorIEFDX0NPTkZJR19GSUxFUyhbc3JjL3ZlcnNpb25pbmZvLnJjIHNyYy9ncGctZXJyb3IudzMyLW1hbmlmZXN0XSkKKyBBQ19DT05GSUdfRklMRVMoW3NyYy9ncGctZXJyb3ItY29uZmlnXSwgW2NobW9kICt4IHNyYy9ncGctZXJyb3ItY29uZmlnXSkKKytBQ19DT05GSUdfRklMRVMoW3NyYy9ncGctZXJyb3IucGNdKQorIAorIEFDX09VVFBVVAorIAorSW5kZXg6IGxpYmdwZy1lcnJvci0xLjE3L3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmdwZy1lcnJvci0xLjE3Lm9yaWcvc3JjL01ha2VmaWxlLmFtCisrKysgbGliZ3BnLWVycm9yLTEuMTcvc3JjL01ha2VmaWxlLmFtCitAQCAtNzUsNiArNzUsOCBAQCBub2Rpc3RfaW5jbHVkZV9IRUFERVJTID0gZ3BnLWVycm9yLmgKKyBiaW5fU0NSSVBUUyA9IGdwZy1lcnJvci1jb25maWcKKyBtNGRhdGFkaXIgPSAkKGRhdGFkaXIpL2FjbG9jYWwKKyBtNGRhdGFfREFUQSA9IGdwZy1lcnJvci5tNAorK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9IGdwZy1lcnJvci5wYworIAorIEVYVFJBX0RJU1QgPSBta3N0cnRhYmxlLmF3ayBlcnItc291cmNlcy5oLmluIGVyci1jb2Rlcy5oLmluIFwKKyAJbWtlcnJub3MuYXdrIGVycm5vcy5pbiBSRUFETUUgXAorQEAgLTgyLDcgKzg0LDcgQEAgRVhUUkFfRElTVCA9IG1rc3RydGFibGUuYXdrIGVyci1zb3VyY2VzLgorIAlta2hlYWRlci5jIGdwZy1lcnJvci5oLmluIG1rdzMyZXJybWFwLmMgdzMyLWFkZC5oIHczMmNlLWFkZC5oIFwKKyAJZXJyLXNvdXJjZXMuaCBlcnItY29kZXMuaCBncGctZXJyb3ItY29uZmlnLmluIGdwZy1lcnJvci5tNCBcCisgCWdwZy1lcnJvci52ZXJzIGdwZy1lcnJvci5kZWYuaW4gXAorLSAgICAgICAgdmVyc2lvbmluZm8ucmMuaW4gZ3BnLWVycm9yLnczMi1tYW5pZmVzdC5pbiBcCisrICAgICAgICB2ZXJzaW9uaW5mby5yYy5pbiBncGctZXJyb3IudzMyLW1hbmlmZXN0LmluIGdwZy1lcnJvci5wYyBcCisgCSQobG9ja19vYmpfcHViKQorIAorIEJVSUxUX1NPVVJDRVMgPSBlcnItc291cmNlcy5oIGVyci1jb2Rlcy5oIGNvZGUtdG8tZXJybm8uaCBjb2RlLWZyb20tZXJybm8uaCBcCitJbmRleDogbGliZ3BnLWVycm9yLTEuMTcvc3JjL2dwZy1lcnJvci5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmdwZy1lcnJvci0xLjE3Lm9yaWcvc3JjL2dwZy1lcnJvci5tNAorKysrIGxpYmdwZy1lcnJvci0xLjE3L3NyYy9ncGctZXJyb3IubTQKK0BAIC0yNiw3MyArMjYsMTMgQEAgZG5sIGlzIGFkZGVkIHRvIHRoZSBncGdfY29uZmlnX3NjcmlwdF93YQorIGRubAorIEFDX0RFRlVOKFtBTV9QQVRIX0dQR19FUlJPUl0sCisgWyBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCistICBncGdfZXJyb3JfY29uZmlnX3ByZWZpeD0iIgorLSAgZG5sIC0td2l0aC1saWJncGctZXJyb3ItcHJlZml4PVBGWCBpcyB0aGUgcHJlZmVycmVkIG5hbWUgZm9yIHRoaXMgb3B0aW9uLAorLSAgZG5sIHNpbmNlIHRoYXQgaXMgY29uc2lzdGVudCB3aXRoIGhvdyBvdXIgdGhyZWUgc2libGluZ3MgdXNlIHRoZSBkaXJlY3RvcnkvCistICBkbmwgcGFja2FnZSBuYW1lIGluIC0td2l0aC0kZGlyX25hbWUtcHJlZml4PVBGWC4KKy0gIEFDX0FSR19XSVRIKGxpYmdwZy1lcnJvci1wcmVmaXgsCistICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWxpYmdwZy1lcnJvci1wcmVmaXg9UEZYXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXggd2hlcmUgR1BHIEVycm9yIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCistICAgICAgICAgICAgICBbZ3BnX2Vycm9yX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIl0pCistCistICBkbmwgQWNjZXB0IC0td2l0aC1ncGctZXJyb3ItcHJlZml4IGFuZCBtYWtlIGl0IHdvcmsgdGhlIHNhbWUgYXMKKy0gIGRubCAtLXdpdGgtbGliZ3BnLWVycm9yLXByZWZpeCBhYm92ZSwgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LAorLSAgZG5sIGJ1dCBkbyBub3QgZG9jdW1lbnQgdGhpcyBvbGQsIGluY29uc2lzdGVudGx5LW5hbWVkIG9wdGlvbi4KKy0gIEFDX0FSR19XSVRIKGdwZy1lcnJvci1wcmVmaXgsLAorLSAgICAgICAgICAgICAgW2dwZ19lcnJvcl9jb25maWdfcHJlZml4PSIkd2l0aHZhbCJdKQorKyAgbWluX2dwZ19lcnJvcl92ZXJzaW9uPWlmZWxzZShbJDFdLCAsMC4wLCQxKQorIAorLSAgaWYgdGVzdCB4IiR7R1BHX0VSUk9SX0NPTkZJR30iID0geCA7IHRoZW4KKy0gICAgIGlmIHRlc3QgeCIke2dwZ19lcnJvcl9jb25maWdfcHJlZml4fSIgIT0geCA7IHRoZW4KKy0gICAgICAgIEdQR19FUlJPUl9DT05GSUc9IiR7Z3BnX2Vycm9yX2NvbmZpZ19wcmVmaXh9L2Jpbi9ncGctZXJyb3ItY29uZmlnIgorLSAgICAgZWxzZQorLSAgICAgICBjYXNlICIke1NZU1JPT1R9IiBpbgorLSAgICAgICAgIC8qKQorLSAgICAgICAgICAgaWYgdGVzdCAteCAiJHtTWVNST09UfS9iaW4vZ3BnLWVycm9yLWNvbmZpZyIgOyB0aGVuCistICAgICAgICAgICAgIEdQR19FUlJPUl9DT05GSUc9IiR7U1lTUk9PVH0vYmluL2dwZy1lcnJvci1jb25maWciCistICAgICAgICAgICBmaQorLSAgICAgICAgICAgOzsKKy0gICAgICAgICAnJykKKy0gICAgICAgICAgIDs7CistICAgICAgICAgICopCistICAgICAgICAgICBBQ19NU0dfV0FSTihbSWdub3JpbmcgXCRTWVNST09UIGFzIGl0IGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoLl0pCistICAgICAgICAgICA7OworLSAgICAgICBlc2FjCistICAgICBmaQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKEdQR19FUlJPUiwgW2dwZy1lcnJvciA+PSAkbWluX2dwZ19lcnJvcl92ZXJzaW9uXSwgW29rPXllc10sIFtvaz1ub10pCisgCistICBBQ19QQVRIX1BST0coR1BHX0VSUk9SX0NPTkZJRywgZ3BnLWVycm9yLWNvbmZpZywgbm8pCistICBtaW5fZ3BnX2Vycm9yX3ZlcnNpb249aWZlbHNlKFskMV0sICwwLjAsJDEpCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdQRyBFcnJvciAtIHZlcnNpb24gPj0gJG1pbl9ncGdfZXJyb3JfdmVyc2lvbikKKy0gIG9rPW5vCistICBpZiB0ZXN0ICIkR1BHX0VSUk9SX0NPTkZJRyIgIT0gIm5vIiBcCistICAgICAmJiB0ZXN0IC1mICIkR1BHX0VSUk9SX0NPTkZJRyIgOyB0aGVuCistICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX2dwZ19lcnJvcl92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9ncGdfZXJyb3JfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgZ3BnX2Vycm9yX2NvbmZpZ192ZXJzaW9uPWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0tdmVyc2lvbmAKKy0gICAgbWFqb3I9YGVjaG8gJGdwZ19lcnJvcl9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorLSAgICBtaW5vcj1gZWNobyAkZ3BnX2Vycm9yX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wyLydgCistICAgIGlmIHRlc3QgIiRtYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgb2s9eWVzCistICAgIGVsc2UKKy0gICAgICAgIGlmIHRlc3QgIiRtYWpvciIgLWVxICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgICAgIGlmIHRlc3QgIiRtaW5vciIgLWdlICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICBmaQorLSAgZmkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEdQR19FUlJPUl9DRkxBR1M9YCRHUEdfRVJST1JfQ09ORklHICRncGdfZXJyb3JfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCistICAgIEdQR19FUlJPUl9MSUJTPWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0tbGlic2AKKy0gICAgR1BHX0VSUk9SX01UX0NGTEFHUz1gJEdQR19FUlJPUl9DT05GSUcgJGdwZ19lcnJvcl9jb25maWdfYXJncyAtLW10IC0tY2ZsYWdzIDI+L2Rldi9udWxsYAorLSAgICBHUEdfRVJST1JfTVRfTElCUz1gJEdQR19FUlJPUl9DT05GSUcgJGdwZ19lcnJvcl9jb25maWdfYXJncyAtLW10IC0tbGlicyAyPi9kZXYvbnVsbGAKKy0gICAgQUNfTVNHX1JFU1VMVChbeWVzICgkZ3BnX2Vycm9yX2NvbmZpZ192ZXJzaW9uKV0pCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCistICAgIGdwZ19lcnJvcl9jb25maWdfaG9zdD1gJEdQR19FUlJPUl9DT05GSUcgJGdwZ19lcnJvcl9jb25maWdfYXJncyAtLWhvc3QgMj4vZGV2L251bGwgfHwgZWNobyBub25lYAorKyAgICBncGdfZXJyb3JfY29uZmlnX2hvc3Q9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9aG9zdCBncGctZXJyb3JgCisgICAgIGlmIHRlc3QgeCIkZ3BnX2Vycm9yX2NvbmZpZ19ob3N0IiAhPSB4bm9uZSA7IHRoZW4KKyAgICAgICBpZiB0ZXN0IHgiJGdwZ19lcnJvcl9jb25maWdfaG9zdCIgIT0geCIkaG9zdCIgOyB0aGVuCisgICBBQ19NU0dfV0FSTihbWworQEAgLTEwNywxMSArNDcsNiBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdfRVJST1JdLAorICAgICAgIGZpCisgICAgIGZpCisgICBlbHNlCistICAgIEdQR19FUlJPUl9DRkxBR1M9IiIKKy0gICAgR1BHX0VSUk9SX0xJQlM9IiIKKy0gICAgR1BHX0VSUk9SX01UX0NGTEFHUz0iIgorLSAgICBHUEdfRVJST1JfTVRfTElCUz0iIgorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorICAgZmkKKyAgIEFDX1NVQlNUKEdQR19FUlJPUl9DRkxBR1MpCitJbmRleDogbGliZ3BnLWVycm9yLTEuMTcvc3JjL2dwZy1lcnJvci5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGxpYmdwZy1lcnJvci0xLjE3L3NyYy9ncGctZXJyb3IucGMuaW4KK0BAIC0wLDAgKzEsMTEgQEAKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKytob3N0PUBHUEdfRVJST1JfQ09ORklHX0hPU1RACisrCisrTmFtZTogZ3BnLWVycm9yCisrRGVzY3JpcHRpb246IGEgbGlicmFyeSB0aGF0IGRlZmluZXMgY29tbW9uIGVycm9yIHZhbHVlcyBmb3IgYWxsIEdudVBHIGNvbXBvbmVudHMKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGdwZy1lcnJvcgorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3JfMS4xOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvcl8xLjE5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZGJiY2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3JfMS4xOS5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIlNtYWxsIGxpYnJhcnkgdGhhdCBkZWZpbmVzIGNvbW1vbiBlcnJvciB2YWx1ZXMgZm9yIGFsbCBHbnVQRyBjb21wb25lbnRzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvcmVsYXRlZF9zb2Z0d2FyZS9saWJncGctZXJyb3IvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZzEwY29kZS5jb20vZ251cGcvaW5kZXgiCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9ncGctZXJyb3IuaC5pbjtlbmRsaW5lPTIzO21kNT04YjIwNDkxOGYwY2E3MDcxMzYzOTRkOGJiMjBjN2ViYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvaW5pdC5jO2VuZGxpbmU9MjA7bWQ1PThmNWE5YjU5NjM0ZjRhZWJjZDBlYzlkM2ViZDUzYmZlIgorCisKK1NFQ1RJT04gPSAibGlicyIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIgorU1JDX1VSSVttZDVzdW1dID0gImMwNGMxNjI0NWI5MjgyOTI4MWY0M2I1YmVmN2QxNmRhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUzMTIwZTEzMzNkNWM1ZDI4ZDg3ZmYyODU0ZTllOTg3MTljOGUyMTQxNTJmMTdhZDUyOTE3MDRkMjVjNDk3OGIiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vZ3BnLWVycm9yLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZyBnZXR0ZXh0CitDUFBGTEFHUyArPSAiLVAiCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJVEFSR0VUX0ZJTEU9bGludXgtZ251CisJaWYgWyAke1RBUkdFVF9PU30gIT0gImxpbnV4IiBdOyB0aGVuCisJCVRBUkdFVF9GSUxFPSR7VEFSR0VUX09TfQorCWZpCisKKwljYXNlICR7VEFSR0VUX0FSQ0h9IGluCisJICBhYXJjaDY0X2JlKSBUVVBMRT1hYXJjaDY0LXVua25vd24tbGludXgtZ251IDs7CisJICBhcm0pCSAgICAgIFRVUExFPWFybS11bmtub3duLWxpbnV4LWdudWVhYmkgOzsKKwkgIGFybWViKSAgICAgIFRVUExFPWFybS11bmtub3duLWxpbnV4LWdudWVhYmkgOzsKKwkgIGk1ODZ8aTY4NikgIFRVUExFPWk2ODYtcGMtbGludXgtZ251IDs7CisJICBtaXBzNjRlbCkgICBUVVBMRT1taXBzZWwtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgIG1pcHM2NCkgICAgIFRVUExFPW1pcHMtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgIHg4Nl82NCkgICAgIFRVUExFPXg4Nl82NC1wYy1saW51eC1nbnUgOzsKKwkgICopICAgICAgICAgIFRVUExFPSR7VEFSR0VUX0FSQ0h9LXVua25vd24tbGludXgtZ251IDs7IAorCWVzYWMKKworCWNwICR7U30vc3JjL3N5c2NmZy9sb2NrLW9iai1wdWIuJFRVUExFLmggXAorCSAgJHtTfS9zcmMvc3lzY2ZnL2xvY2stb2JqLXB1Yi4kVEFSR0VUX0ZJTEUuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIHdlIGRvbid0IGhhdmUgY29tbW9uIGxpc3AgaW4gT0UKKwlybSAtcmYgIiR7RH0ke2RhdGFkaXJ9L2NvbW1vbi1saXNwLyIKK30KKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vZ3BnLWVycm9yIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNhbC9saWJpY2FsXzEuMC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY2FsL2xpYmljYWxfMS4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU2YjYzNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNhbC9saWJpY2FsXzEuMC4wLmJiCkBAIC0wLDAgKzEsMTMgQEAKK1NVTU1BUlkgPSAiaUNhbCBhbmQgc2NoZWR1bGluZyAoUkZDIDI0NDUsIDI0NDYsIDI0NDcpIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vbGliaWNhbC9saWJpY2FsIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2dpdGh1Yi5jb20vbGliaWNhbC9saWJpY2FsL2lzc3VlcyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgfCBNUEwtMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ0ZmM1ODMwOWQ4ZWQ0NjU4N2FjNjNiYjQ0OWQ4MmY4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xJQ0VOU0U7bWQ1PWQxYTA4OTFjZDNlNTgyYjNlMmVjOGZlNjNiYWRiYmI2IgorU0VDVElPTiA9ICJsaWJzIgorCitTUkNfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS8ke0JQTn0vJHtCUE59L2FyY2hpdmUvdiR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNGI4ZTMzYWU1ZWZiMmYwMjVlYjQzY2U2OTY4MmEzNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMDcyZTgzODM0MDkyMzE1NzcyZTY3MTliODVmYzhiMTE1MzBiMWZmNTNmNGQxMDgzMTVmYjM4Y2RkYmNlOGMyIgorCitpbmhlcml0IGF1dG90b29scwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjExLjEvYXV0b2NvbmYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTEuMS9hdXRvY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2JmNTQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjExLjEvYXV0b2NvbmYucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorSXQgYWRkcyB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIG5lZWRlZAorZm9yIGF1dG9jb25mIDIuNjUgdG8gcmVjb25maWd1cmUgbGliaWNvbnYgYW5kIGRlZmluZXMgdGhlIG00IG1hY3JvcyAKK2RpcmVjdG9yeS4gSXRzIGltcG9ydGVkIGZyb20gT0UuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogbGliaWNvbnYtMS4xMS4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmljb252LTEuMTEuMS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGxpYmljb252LTEuMTEuMS9jb25maWd1cmUuYWMKK0BAIC0yMyw3ICsyMyw3IEBAIEFDX0NPTkZJR19BVVhfRElSKGJ1aWxkLWF1eCkKKyBBTV9JTklUX0FVVE9NQUtFKGxpYmljb252LCAxLjExKQorIEFDX0NPTkZJR19IRUFERVJTKGNvbmZpZy5oIGxpYi9jb25maWcuaCkKKyBBQ19QUk9HX01BS0VfU0VUCistCisrQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorIGRubCAgICAgICAgICAgY2hlY2tzIGZvciBiYXNpYyBwcm9ncmFtcworIAorIEFDX1BST0dfQ0MKK0luZGV4OiBsaWJpY29udi0xLjExLjEvbGliY2hhcnNldC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpY29udi0xLjExLjEub3JpZy9saWJjaGFyc2V0L2NvbmZpZ3VyZS5hYworKysrIGxpYmljb252LTEuMTEuMS9saWJjaGFyc2V0L2NvbmZpZ3VyZS5hYworQEAgLTE2LDE3ICsxNiwxNyBAQCBkbmwgYWxvbmcgd2l0aCB0aGUgR05VIENIQVJTRVQgTGlicmFyeTsKKyBkbmwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LAorIGRubCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgCistQUNfUFJFUkVRKDIuMTMpCisrQUNfUFJFUkVRKDIuNjEpCisrQUNfSU5JVChbbGliY2hhcnNldF0sWzEuNF0gKQorK0FDX0NPTkZJR19TUkNESVIoW2xpYi9sb2NhbGNoYXJzZXQuY10pCisgCistUEFDS0FHRT1saWJjaGFyc2V0CistVkVSU0lPTj0xLjQKKy0KKy1BQ19JTklUKGxpYi9sb2NhbGNoYXJzZXQuYykKKyBBQ19DT05GSUdfQVVYX0RJUihidWlsZC1hdXgpCisgQUNfQ09ORklHX0hFQURFUihjb25maWcuaCkKKyBBQ19QUk9HX01BS0VfU0VUCistQUNfU1VCU1QoUEFDS0FHRSkKKy1BQ19TVUJTVChWRVJTSU9OKQorK2RubCBBQ19TVUJTVChQQUNLQUdFKQorK2RubCBBQ19TVUJTVChWRVJTSU9OKQorKworK0FDX0NPTkZJR19NQUNST19ESVIoW200XSkKKyAKKyBkbmwgICAgICAgICAgIGNoZWNrcyBmb3IgYmFzaWMgcHJvZ3JhbXMKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xMS4xL3NoYXJlZF9wcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xMS4xL3NoYXJlZF9wcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjA3ZjczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjExLjEvc2hhcmVkX3ByZWxvYWRhYmxlX2xpYmljb252X2xpbnV4LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1dpdGggbGlidG9vbCBnZW5lcmF0aW5nIHNoYXJlZCBhbmQgc3RhdGljIHZlcnNpb24gb2YgbGlicmFyaWVzIG5lZWRzIC1mUElDIGZsYWdzCit3aXRob3V0IHRoaXMgaXQgd2lsbCBub3QgZ2VuZXJhdGUgdGhlIGNvbW1hbmRzIHRvIGNyZWF0ZSBzaGFyZWQgbGlua2VkIGxpYnJhcnkKK0l0cyBtb3JlIGVuZm9yY2VkIGJ5IGxpYnRvb2wgMi40LiBJIGhhdmUgbm90IGNoZWNrZWQgaXQgd2l0aCBvbGRlciBsaWJ0b29sCitsaWJpY29udiAxLjExLnggaXMgcmVsYXRpdmVseSBvbGQgcmVsZWFzZSBhbmQgbGlidG9vbCAyLjQgZGlkIG5vdCBleGlzdCB3aGVuIGl0Cit3YXMgcmVsZWFzZWQgdGhlc2Uga2luZCBvZiBwcm9ibGVtIGFyZSBtb3JlIGxpa2VseQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGxpYmljb252LTEuMTEuMS9saWIvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpY29udi0xLjExLjEub3JpZy9saWIvTWFrZWZpbGUuaW4KKysrKyBsaWJpY29udi0xLjExLjEvbGliL01ha2VmaWxlLmluCitAQCAtNzAsOSArNzAsOSBAQCBwcmVsb2FkYWJsZV9saWJpY29udi5zbyA6IHByZWxvYWRhYmxlX2xpCisgCisgcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXguc28gOiAkKFNPVVJDRVMpCisgCWlmIHRlc3QgLW4gIkBHQ0NAIjsgdGhlbiBcCistCSAgJChMSUJUT09MX0xJTkspICQoQ0MpICQoTERGTEFHUykgJChJTkNMVURFUykgJChDRkxBR1MpICQoQ1BQRkxBR1MpICQoREVGUykgLWZQSUMgLURQSUMgLURMSUJJQ09OVl9QTFVHICQoU09VUkNFUykgLXNoYXJlZCAtbyBwcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5zbzsgXAorKwkgICQoTElCVE9PTF9MSU5LKSAkKENDKSAkKExERkxBR1MpICQoSU5DTFVERVMpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKERFRlMpIC1mUElDIC1EUElDIC1ETElCSUNPTlZfUExVRyAkKFNPVVJDRVMpIC1ycGF0aCAkKGxpYmRpcikgLW8gbGlicHJlbG9hZF9pY29udi5sYSAmJiBjcCAubGlicy9saWJwcmVsb2FkX2ljb252LnNvIHByZWxvYWRhYmxlX2xpYmljb252X2xpbnV4LnNvOyBcCisgCWVsc2UgXAorLQkgICQoTElCVE9PTF9MSU5LKSAkKENDKSAkKExERkxBR1MpICQoSU5DTFVERVMpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKERFRlMpIC1LUElDIC1EUElDIC1ETElCSUNPTlZfUExVRyAkKFNPVVJDRVMpIC1zaGFyZWQgLW8gcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXguc287IFwKKysJICAkKExJQlRPT0xfTElOSykgJChDQykgJChMREZMQUdTKSAkKElOQ0xVREVTKSAkKENGTEFHUykgJChDUFBGTEFHUykgJChERUZTKSAtS1BJQyAtRFBJQyAtRExJQklDT05WX1BMVUcgJChTT1VSQ0VTKSAtcnBhdGggJChsaWJkaXIpIC1vIGxpYnByZWxvYWRfaWNvbnYubGEgJiYgY3AgLmxpYnMvbGlicHJlbG9hZF9pY29udi5zbyBwcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5zbzsgXAorIAlmaQorIAorIHByZWxvYWRhYmxlX2xpYmljb252X3NvbGFyaXMuc28gOiAkKFNPVVJDRVMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTQvYWRkLXJlbG9jYXRhYmxlLW1vZHVsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xNC9hZGQtcmVsb2NhdGFibGUtbW9kdWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZjM3N2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTQvYWRkLXJlbG9jYXRhYmxlLW1vZHVsZS5wYXRjaApAQCAtMCwwICsxLDUwMDggQEAKK1RoaXMgcGF0Y2ggaXMgbmVlZGVkIHRvIHNvbHZlIGlzc3VlcyBsaWtlCit8IGljb252Lm86IEluIGZ1bmN0aW9uIGBtYWluJzoKK3wgL2hvbWUvamFtZXMvc3R1ZmYvYmVhZ2xlL3RtcC1lZ2xpYmMvd29yay9hcm12N2EtdmZwLW5lb24tb2UtbGludXgtZ251ZWFiaS9saWJpY29udi0xLjE0LXIwL2xpYmljb252LTEuMTQvc3JjLy4vaWNvbnYuYzo4NjE6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHJlbG9jYXRlJworfCAuLi9zcmNsaWIvbGliaWNydC5hKHByb2dyZWxvYy5vKTogSW4gZnVuY3Rpb24gYHByZXBhcmVfcmVsb2NhdGUnOgorfCAvaG9tZS9qYW1lcy9zdHVmZi9iZWFnbGUvdG1wLWVnbGliYy93b3JrL2FybXY3YS12ZnAtbmVvbi1vZS1saW51eC1nbnVlYWJpL2xpYmljb252LTEuMTQtcjAvbGliaWNvbnYtMS4xNC9zcmNsaWIvcHJvZ3JlbG9jLmM6Mjk3OiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBjb21wdXRlX2N1cnJfcHJlZml4JworfCAvaG9tZS9qYW1lcy9zdHVmZi9iZWFnbGUvdG1wLWVnbGliYy93b3JrL2FybXY3YS12ZnAtbmVvbi1vZS1saW51eC1nbnVlYWJpL2xpYmljb252LTEuMTQtcjAvbGliaWNvbnYtMS4xNC9zcmNsaWIvcHJvZ3JlbG9jLmM6MzAyOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBzZXRfcmVsb2NhdGlvbl9wcmVmaXgnCit8IGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCit8IG1ha2VbMV06ICoqKiBbaW5zdGFsbF0gRXJyb3IgMQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZyBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9hcmctbm9ubnVsbC5oIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L2FyZy1ub25udWxsLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L2FyZy1ub25udWxsLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrKyBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9hcmctbm9ubnVsbC5oCTIwMTItMDEtMDggMDI6MDc6MzkuOTMwNDg0NDM4IC0wODAwCitAQCAtMCwwICsxLDI2IEBACisrLyogQSBDIG1hY3JvIGZvciBkZWNsYXJpbmcgdGhhdCBzcGVjaWZpYyBhcmd1bWVudHMgbXVzdCBub3QgYmUgTlVMTC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisrCisrLyogX0dMX0FSR19OT05OVUxMKChuLC4uLixtKSkgdGVsbHMgdGhlIGNvbXBpbGVyIGFuZCBzdGF0aWMgYW5hbHl6ZXIgdG9vbHMKKysgICB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkIGFzIGFyZ3VtZW50cyBuLCAuLi4sIG0gbXVzdCBiZSBub24tTlVMTCBwb2ludGVycy4KKysgICBuID0gMSBzdGFuZHMgZm9yIHRoZSBmaXJzdCBhcmd1bWVudCwgbiA9IDIgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgZXRjLiAgKi8KKysjaWZuZGVmIF9HTF9BUkdfTk9OTlVMTAorKyMgaWYgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMykgfHwgX19HTlVDX18gPiAzCisrIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpIF9fYXR0cmlidXRlX18gKChfX25vbm51bGxfXyBwYXJhbXMpKQorKyMgZWxzZQorKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKQorKyMgZW5kaWYKKysjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvYysrZGVmcy5oIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L2MrK2RlZnMuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvYysrZGVmcy5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKysgbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvYysrZGVmcy5oCTIwMTItMDEtMDggMDI6MDc6MzkuOTQyNDg0NDM4IC0wODAwCitAQCAtMCwwICsxLDI3MSBAQAorKy8qIEMrKyBjb21wYXRpYmxlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIG1hY3Jvcy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisrCisrI2lmbmRlZiBfR0xfQ1hYREVGU19ICisrI2RlZmluZSBfR0xfQ1hYREVGU19ICisrCisrLyogVGhlIHRocmVlIG1vc3QgZnJlcXVlbnQgdXNlIGNhc2VzIG9mIHRoZXNlIG1hY3JvcyBhcmU6CisrCisrICAgKiBGb3IgcHJvdmlkaW5nIGEgc3Vic3RpdHV0ZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorKyAgICAgcGxhdGZvcm1zLCBidXQgaXMgZGVjbGFyZWQgYW5kIHdvcmtzIGZpbmUgb24gdGhlIHBsYXRmb3JtcyBvbiB3aGljaAorKyAgICAgaXQgZXhpc3RzOgorKworKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisrICAgICAgICMgaWYgIUBIQVZFX0ZPT0AKKysgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworKyAgICAgICAjIGVuZGlmCisrICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKysgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKysgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworKyAgICAgICAuLi4KKysgICAgICAgI2VuZGlmCisrCisrICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gYWxsIHBsYXRmb3JtcywKKysgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIHBsYXRmb3JtczoKKysKKysgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKysgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKysgICAgICAgIyAgIHVuZGVmIGZvbworKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisrICAgICAgICMgIGVuZGlmCisrICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKysgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworKyAgICAgICAjIGVsc2UKKysgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworKyAgICAgICAjIGVuZGlmCisrICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisrICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKysgICAgICAgLi4uCisrICAgICAgICNlbmRpZgorKworKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIHNvbWUgcGxhdGZvcm1zCisrICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBvZiB0aGVtIGFuZAorKyAgICAgaXMgYWRkaXRpb25hbGx5IGVpdGhlciBtaXNzaW5nIG9yIHVuZGVjbGFyZWQgb24gc29tZSBvdGhlciBwbGF0Zm9ybXM6CisrCisrICAgICAgICNpZiBAR05VTElCX0ZPT0AKKysgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisrICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisrICAgICAgICMgICB1bmRlZiBmb28KKysgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworKyAgICAgICAjICBlbmRpZgorKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisrICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKysgICAgICAgIyBlbHNlCisrICAgICAgICMgIGlmICFASEFWRV9GT09AICAgb3IgICBpZiAhQEhBVkVfREVDTF9GT09ACisrICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKysgICAgICAgIyAgZW5kaWYKKysgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworKyAgICAgICAjIGVuZGlmCisrICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisrICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKysgICAgICAgLi4uCisrICAgICAgICNlbmRpZgorKyovCisrCisrLyogX0dMX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisrI2lmIGRlZmluZWQgX19jcGx1c3BsdXMKKysjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuICJDIgorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybgorKyNlbmRpZgorKworKy8qIF9HTF9GVU5DREVDTF9SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworKyAgIGRlY2xhcmVzIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24sIG5hbWVkIHJwbF9mdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisrICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisrICAgRXhhbXBsZToKKysgICAgIF9HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKysgKi8KKysjZGVmaW5lIF9HTF9GVU5DREVDTF9SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKysgIF9HTF9GVU5DREVDTF9SUExfMSAocnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykKKysjZGVmaW5lIF9HTF9GVU5DREVDTF9SUExfMShycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKysgIF9HTF9FWFRFUk5fQyByZXR0eXBlIHJwbF9mdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKysKKysvKiBfR0xfRlVOQ0RFQ0xfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKysgICBkZWNsYXJlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uLCBuYW1lZCBmdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisrICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisrICAgRXhhbXBsZToKKysgICAgIF9HTF9GVU5DREVDTF9TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKysgKi8KKysjZGVmaW5lIF9HTF9GVU5DREVDTF9TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKysgIF9HTF9FWFRFUk5fQyByZXR0eXBlIGZ1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworKworKy8qIF9HTF9DWFhBTElBU19SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisrICAgdGhhdCByZWRpcmVjdHMgdG8gcnBsX2Z1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UgaXMgZGVmaW5lZC4KKysgICBFeGFtcGxlOgorKyAgICAgX0dMX0NYWEFMSUFTX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisrICovCisrI2RlZmluZSBfR0xfQ1hYQUxJQVNfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpCisrI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OnJwbF9mdW5jOyAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2Vsc2UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZW5kaWYKKysKKysvKiBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIHJwbF9mdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50CisrICAgZGVjbGFyYXRpb24uICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvcgorKyAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpycGxfZnVuYyk7ICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZWxzZQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2VuZGlmCisrCisrLyogX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisrICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKysgICB0aGF0IHJlZGlyZWN0cyB0byB0aGUgc3lzdGVtIHByb3ZpZGVkIGZ1bmN0aW9uIGZ1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UKKysgICBpcyBkZWZpbmVkLgorKyAgIEV4YW1wbGU6CisrICAgICBfR0xfQ1hYQUxJQVNfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKysgKi8KKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKysgIC8qIElmIHdlIHdlcmUgdG8gd3JpdGUKKysgICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7CisrICAgICBsaWtlIGFib3ZlIGluIF9HTF9DWFhBTElBU19SUExfMSwgdGhlIGNvbXBpbGVyIGNvdWxkIG9wdGltaXplIGNhbGxzCisrICAgICBiZXR0ZXIgKHJlbW92ZSBhbiBpbmRpcmVjdGlvbiB0aHJvdWdoIGEgJ3N0YXRpYycgcG9pbnRlciB2YXJpYWJsZSksCisrICAgICBidXQgdGhlbiB0aGUgX0dMX0NYWEFMSUFTV0FSTiBtYWNybyBiZWxvdyB3b3VsZCBjYXVzZSBhIHdhcm5pbmcgbm90IG9ubHkKKysgICAgIGZvciB1c2VzIG9mIDo6ZnVuYyBidXQgYWxzbyBmb3IgdXNlcyBvZiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jLiAgKi8KKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7ICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbmRpZgorKworKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisrICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisrICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBkZWNsYXJhdGlvbi4KKysgICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvciB0aGF0IHdvdWxkCisrICAgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKysgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgIFwKKysgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6ZnVuYyk7IFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZWxzZQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbmRpZgorKworKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMsIHJldHR5cGUyLCBwYXJhbWV0ZXJzMik7CisrICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisrICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gaXMgcGlja2VkIGFtb25nIGEgc2V0IG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zLAorKyAgIG5hbWVseSB0aGUgb25lIHdpdGggcmV0dHlwZTIgYW5kIHBhcmFtZXRlcnMyLiAgVHdvIGNvbnNlY3V0aXZlIGNhc3RzCisrICAgYXJlIHVzZWQgdG8gc2lsZW5jZSB0aGUgImNhbm5vdCBmaW5kIGEgbWF0Y2giIGFuZCAiaW52YWxpZCBjb252ZXJzaW9uIgorKyAgIGVycm9ycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisrI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisrICAvKiBUaGUgb3V0ZXIgY2FzdCBtdXN0IGJlIGEgcmVpbnRlcnByZXRfY2FzdC4KKysgICAgIFRoZSBpbm5lciBjYXN0OiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2V0IG9mIG92ZXJsb2FkZWQKKysgICAgIGZ1bmN0aW9ucywgaXQgd29ya3MgYXMgYSBzdGF0aWNfY2FzdDw+LCBjaG9vc2luZyB0aGUgZGVzaWduYXRlZCB2YXJpYW50LgorKyAgICAgV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNpbmdsZSB2YXJpYW50LCBpdCB3b3JrcyBhcyBhCisrICAgICByZWludGVycHJldF9jYXN0PD4uIFRoZSBwYXJlbnRoZXNpemVkIGNhc3Qgc3ludGF4IHdvcmtzIGJvdGggd2F5cy4gICovCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHJldHR5cGUyKCopcGFyYW1ldGVyczIpKDo6ZnVuYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbmRpZgorKworKy8qIF9HTF9DWFhBTElBU1dBUk4gKGZ1bmMpOworKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIDo6ZnVuYyBpcyB1c2VkIGJ1dCBub3Qgd2hlbgorKyAgIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gIGZ1bmMgbXVzdCBiZSBkZWZpbmVkIHdpdGhvdXQgb3ZlcmxvYWRlZAorKyAgIHZhcmlhbnRzLiAgKi8KKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKysgICBfR0xfQ1hYQUxJQVNXQVJOXzEgKGZ1bmMsIEdOVUxJQl9OQU1FU1BBQ0UpCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8xKGZ1bmMsbmFtZXNwYWNlKSBcCisrICAgX0dMX0NYWEFMSUFTV0FSTl8yIChmdW5jLCBuYW1lc3BhY2UpCisrLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisrICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisrIyBpZiAhX19PUFRJTUlaRV9fCisrIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorKyAgICBfR0xfV0FSTl9PTl9VU0UgKGZ1bmMsIFwKKysgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisrICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKysjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisrIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKysjIGVsc2UKKysjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisrICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyMgZW5kaWYKKysjZWxzZQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbmRpZgorKworKy8qIF9HTF9DWFhBTElBU1dBUk4xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKysgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgZ2l2ZW4gb3ZlcmxvYWRlZCB2YXJpYW50IG9mIDo6ZnVuYworKyAgIGlzIHVzZWQgYnV0IG5vdCB3aGVuIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gICovCisrI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKysgICBfR0xfQ1hYQUxJQVNXQVJOMV8xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgR05VTElCX05BTUVTUEFDRSkKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorKyAgIF9HTF9DWFhBTElBU1dBUk4xXzIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIG5hbWVzcGFjZSkKKysvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKysgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKysjIGlmICFfX09QVElNSVpFX18KKysjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKysgICAgX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisrIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKysjIGVsc2UKKysjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKysgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrIyBlbmRpZgorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZW5kaWYKKysKKysjZW5kaWYgLyogX0dMX0NYWERFRlNfSCAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmggbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgJMjAxMS0wOC0wNyAwNjoyMjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKK0BAIC0xLDI2ICswLDAgQEAKKy0vKiBBIEMgbWFjcm8gZm9yIGRlY2xhcmluZyB0aGF0IHNwZWNpZmljIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSBOVUxMLgorLSAgIENvcHlyaWdodCAoQykgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKy0KKy0vKiBfR0xfQVJHX05PTk5VTEwoKG4sLi4uLG0pKSB0ZWxscyB0aGUgY29tcGlsZXIgYW5kIHN0YXRpYyBhbmFseXplciB0b29scworLSAgIHRoYXQgdGhlIHZhbHVlcyBwYXNzZWQgYXMgYXJndW1lbnRzIG4sIC4uLiwgbSBtdXN0IGJlIG5vbi1OVUxMIHBvaW50ZXJzLgorLSAgIG4gPSAxIHN0YW5kcyBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LCBuID0gMiBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCBldGMuICAqLworLSNpZm5kZWYgX0dMX0FSR19OT05OVUxMCistIyBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDMKKy0jICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykgX19hdHRyaWJ1dGVfXyAoKF9fbm9ubnVsbF9fIHBhcmFtcykpCistIyBlbHNlCistIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCistIyBlbmRpZgorLSNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaCBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgJMjAxMS0wOC0wNyAwNjoyMjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorQEAgLTEsMjcxICswLDAgQEAKKy0vKiBDKysgY29tcGF0aWJsZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBtYWNyb3MuCistICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCistICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworLQorLSNpZm5kZWYgX0dMX0NYWERFRlNfSAorLSNkZWZpbmUgX0dMX0NYWERFRlNfSAorLQorLS8qIFRoZSB0aHJlZSBtb3N0IGZyZXF1ZW50IHVzZSBjYXNlcyBvZiB0aGVzZSBtYWNyb3MgYXJlOgorLQorLSAgICogRm9yIHByb3ZpZGluZyBhIHN1YnN0aXR1dGUgZm9yIGEgZnVuY3Rpb24gdGhhdCBpcyBtaXNzaW5nIG9uIHNvbWUKKy0gICAgIHBsYXRmb3JtcywgYnV0IGlzIGRlY2xhcmVkIGFuZCB3b3JrcyBmaW5lIG9uIHRoZSBwbGF0Zm9ybXMgb24gd2hpY2gKKy0gICAgIGl0IGV4aXN0czoKKy0KKy0gICAgICAgI2lmIEBHTlVMSUJfRk9PQAorLSAgICAgICAjIGlmICFASEFWRV9GT09ACistICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKy0gICAgICAgIyBlbmRpZgorLSAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CistICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CistICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy0gICAgICAgLi4uCistICAgICAgICNlbmRpZgorLQorLSAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIGFsbCBwbGF0Zm9ybXMsCistICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBwbGF0Zm9ybXM6CistCistICAgICAgICNpZiBAR05VTElCX0ZPT0AKKy0gICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACistICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCistICAgICAgICMgICB1bmRlZiBmb28KKy0gICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworLSAgICAgICAjICBlbmRpZgorLSAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CistICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKy0gICAgICAgIyBlbHNlCistICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKy0gICAgICAgIyBlbmRpZgorLSAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworLSAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCistICAgICAgIC4uLgorLSAgICAgICAjZW5kaWYKKy0KKy0gICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBzb21lIHBsYXRmb3JtcworLSAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgb2YgdGhlbSBhbmQKKy0gICAgIGlzIGFkZGl0aW9uYWxseSBlaXRoZXIgbWlzc2luZyBvciB1bmRlY2xhcmVkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zOgorLQorLSAgICAgICAjaWYgQEdOVUxJQl9GT09ACistICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorLSAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorLSAgICAgICAjICAgdW5kZWYgZm9vCistICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKy0gICAgICAgIyAgZW5kaWYKKy0gICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworLSAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CistICAgICAgICMgZWxzZQorLSAgICAgICAjICBpZiAhQEhBVkVfRk9PQCAgIG9yICAgaWYgIUBIQVZFX0RFQ0xfRk9PQAorLSAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CistICAgICAgICMgIGVuZGlmCistICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKy0gICAgICAgIyBlbmRpZgorLSAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworLSAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCistICAgICAgIC4uLgorLSAgICAgICAjZW5kaWYKKy0qLworLQorLS8qIF9HTF9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKy0gICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCistIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybiAiQyIKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4KKy0jZW5kaWYKKy0KKy0vKiBfR0xfRlVOQ0RFQ0xfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKy0gICBkZWNsYXJlcyBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uLCBuYW1lZCBycGxfZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorLSAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorLSAgIEV4YW1wbGU6CistICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CistICovCistI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCistICBfR0xfRlVOQ0RFQ0xfUlBMXzEgKHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpCistI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMXzEocnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCistICBfR0xfRVhURVJOX0MgcmV0dHlwZSBycGxfZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCistCistLyogX0dMX0ZVTkNERUNMX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CistICAgZGVjbGFyZXMgdGhlIHN5c3RlbSBmdW5jdGlvbiwgbmFtZWQgZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorLSAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorLSAgIEV4YW1wbGU6CistICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CistICovCistI2RlZmluZSBfR0xfRlVOQ0RFQ0xfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCistICBfR0xfRVhURVJOX0MgcmV0dHlwZSBmdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKy0KKy0vKiBfR0xfQ1hYQUxJQVNfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKy0gICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworLSAgIHRoYXQgcmVkaXJlY3RzIHRvIHJwbF9mdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFIGlzIGRlZmluZWQuCistICAgRXhhbXBsZToKKy0gICAgIF9HTF9DWFhBTElBU19SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworLSAqLworLSNkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKQorLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpycGxfZnVuYzsgICAgICAgICAgXAorLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbHNlCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2VuZGlmCistCistLyogX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKy0gICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKy0gICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBycGxfZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudAorLSAgIGRlY2xhcmF0aW9uLiAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IKKy0gICB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKy0gICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6cnBsX2Z1bmMpOyAgICAgICAgXAorLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2Vsc2UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbmRpZgorLQorLS8qIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworLSAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCistICAgdGhhdCByZWRpcmVjdHMgdG8gdGhlIHN5c3RlbSBwcm92aWRlZCBmdW5jdGlvbiBmdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFCistICAgaXMgZGVmaW5lZC4KKy0gICBFeGFtcGxlOgorLSAgICAgX0dMX0NYWEFMSUFTX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CistICovCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCistICAvKiBJZiB3ZSB3ZXJlIHRvIHdyaXRlCistICAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOworLSAgICAgbGlrZSBhYm92ZSBpbiBfR0xfQ1hYQUxJQVNfUlBMXzEsIHRoZSBjb21waWxlciBjb3VsZCBvcHRpbWl6ZSBjYWxscworLSAgICAgYmV0dGVyIChyZW1vdmUgYW4gaW5kaXJlY3Rpb24gdGhyb3VnaCBhICdzdGF0aWMnIHBvaW50ZXIgdmFyaWFibGUpLAorLSAgICAgYnV0IHRoZW4gdGhlIF9HTF9DWFhBTElBU1dBUk4gbWFjcm8gYmVsb3cgd291bGQgY2F1c2UgYSB3YXJuaW5nIG5vdCBvbmx5CistICAgICBmb3IgdXNlcyBvZiA6OmZ1bmMgYnV0IGFsc28gZm9yIHVzZXMgb2YgR05VTElCX05BTUVTUEFDRTo6ZnVuYy4gICovCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOyAgXAorLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZW5kaWYKKy0KKy0vKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworLSAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworLSAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGZ1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgZGVjbGFyYXRpb24uCistICAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IgdGhhdCB3b3VsZAorLSAgIG90aGVyd2lzZSBvY2N1ci4gICovCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCistICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICBcCistICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OmZ1bmMpOyBcCistICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2Vsc2UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZW5kaWYKKy0KKy0vKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzLCByZXR0eXBlMiwgcGFyYW1ldGVyczIpOworLSAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworLSAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGlzIHBpY2tlZCBhbW9uZyBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywKKy0gICBuYW1lbHkgdGhlIG9uZSB3aXRoIHJldHR5cGUyIGFuZCBwYXJhbWV0ZXJzMi4gIFR3byBjb25zZWN1dGl2ZSBjYXN0cworLSAgIGFyZSB1c2VkIHRvIHNpbGVuY2UgdGhlICJjYW5ub3QgZmluZCBhIG1hdGNoIiBhbmQgImludmFsaWQgY29udmVyc2lvbiIKKy0gICBlcnJvcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorLSAgLyogVGhlIG91dGVyIGNhc3QgbXVzdCBiZSBhIHJlaW50ZXJwcmV0X2Nhc3QuCistICAgICBUaGUgaW5uZXIgY2FzdDogV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBvdmVybG9hZGVkCistICAgICBmdW5jdGlvbnMsIGl0IHdvcmtzIGFzIGEgc3RhdGljX2Nhc3Q8PiwgY2hvb3NpbmcgdGhlIGRlc2lnbmF0ZWQgdmFyaWFudC4KKy0gICAgIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzaW5nbGUgdmFyaWFudCwgaXQgd29ya3MgYXMgYQorLSAgICAgcmVpbnRlcnByZXRfY2FzdDw+LiBUaGUgcGFyZW50aGVzaXplZCBjYXN0IHN5bnRheCB3b3JrcyBib3RoIHdheXMuICAqLworLSMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKy0gICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIChyZXR0eXBlMigqKXBhcmFtZXRlcnMyKSg6OmZ1bmMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZW5kaWYKKy0KKy0vKiBfR0xfQ1hYQUxJQVNXQVJOIChmdW5jKTsKKy0gICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiA6OmZ1bmMgaXMgdXNlZCBidXQgbm90IHdoZW4KKy0gICBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICBmdW5jIG11c3QgYmUgZGVmaW5lZCB3aXRob3V0IG92ZXJsb2FkZWQKKy0gICB2YXJpYW50cy4gICovCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCistICAgX0dMX0NYWEFMSUFTV0FSTl8xIChmdW5jLCBHTlVMSUJfTkFNRVNQQUNFKQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMShmdW5jLG5hbWVzcGFjZSkgXAorLSAgIF9HTF9DWFhBTElBU1dBUk5fMiAoZnVuYywgbmFtZXNwYWNlKQorLS8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorLSAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworLSMgaWYgIV9fT1BUSU1JWkVfXworLSMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKy0gICAgX0dMX1dBUk5fT05fVVNFIChmdW5jLCBcCistICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorLSAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCistIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLSMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKy0gICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCistIyBlbHNlCistIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorLSAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jIGVuZGlmCistI2Vsc2UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZW5kaWYKKy0KKy0vKiBfR0xfQ1hYQUxJQVNXQVJOMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CistICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gdGhlIGdpdmVuIG92ZXJsb2FkZWQgdmFyaWFudCBvZiA6OmZ1bmMKKy0gICBpcyB1c2VkIGJ1dCBub3Qgd2hlbiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICAqLworLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCistICAgX0dMX0NYWEFMSUFTV0FSTjFfMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorLSAgICAgICAgICAgICAgICAgICAgICAgIEdOVUxJQl9OQU1FU1BBQ0UpCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKy0gICBfR0xfQ1hYQUxJQVNXQVJOMV8yIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBuYW1lc3BhY2UpCistLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCistICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCistIyBpZiAhX19PUFRJTUlaRV9fCistIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCistICAgIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorLSMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy0jICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKy0gICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCistIyBlbHNlCistIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCistICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSMgZW5kaWYKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2VuZGlmCistCistI2VuZGlmIC8qIF9HTF9DWFhERUZTX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaCBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oCTIwMTEtMDgtMDcgMDY6MjI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorQEAgLTEsMTAgKzAsMCBAQAorLSNpZm5kZWYgX05vcmV0dXJuCistIyBpZiAoMyA8PSBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gMiAmJiA4IDw9IF9fR05VQ19NSU5PUl9fKSBcCistICAgICAgfHwgMHg1MTEwIDw9IF9fU1VOUFJPX0MpCistIyAgZGVmaW5lIF9Ob3JldHVybiBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkKKy0jIGVsaWYgMTIwMCA8PSBfTVNDX1ZFUgorLSMgIGRlZmluZSBfTm9yZXR1cm4gX19kZWNsc3BlYyAobm9yZXR1cm4pCistIyBlbHNlCistIyAgZGVmaW5lIF9Ob3JldHVybgorLSMgZW5kaWYKKy0jZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oCTIwMTEtMDgtMDcgMDY6MjI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCitAQCAtMSwxMDkgKzAsMCBAQAorLS8qIEEgQyBtYWNybyBmb3IgZW1pdHRpbmcgd2FybmluZ3MgaWYgYSBmdW5jdGlvbiBpcyB1c2VkLgorLSAgIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKy0KKy0vKiBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAibGl0ZXJhbCBzdHJpbmciKSBpc3N1ZXMgYSBkZWNsYXJhdGlvbgorLSAgIGZvciBGVU5DVElPTiB3aGljaCB3aWxsIHRoZW4gdHJpZ2dlciBhIGNvbXBpbGVyIHdhcm5pbmcgY29udGFpbmluZworLSAgIHRoZSB0ZXh0IG9mICJsaXRlcmFsIHN0cmluZyIgYW55d2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQsIGlmCistICAgc3VwcG9ydGVkIGJ5IHRoZSBjb21waWxlci4gIElmIHRoZSBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMKKy0gICBmZWF0dXJlLCB0aGUgbWFjcm8gZXhwYW5kcyB0byBhbiB1bnVzZWQgZXh0ZXJuIGRlY2xhcmF0aW9uLgorLQorLSAgIFRoaXMgbWFjcm8gaXMgdXNlZnVsIGZvciBtYXJraW5nIGEgZnVuY3Rpb24gYXMgYSBwb3RlbnRpYWwKKy0gICBwb3J0YWJpbGl0eSB0cmFwLCB3aXRoIHRoZSBpbnRlbnQgdGhhdCAibGl0ZXJhbCBzdHJpbmciIGluY2x1ZGUKKy0gICBpbnN0cnVjdGlvbnMgb24gdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQKKy0gICBpbnN0ZWFkLiAgSG93ZXZlciwgb25lIG9mIHRoZSByZWFzb25zIHRoYXQgYSBmdW5jdGlvbiBpcyBhCistICAgcG9ydGFiaWxpdHkgdHJhcCBpcyBpZiBpdCBoYXMgdGhlIHdyb25nIHNpZ25hdHVyZS4gIERlY2xhcmluZworLSAgIEZVTkNUSU9OIHdpdGggYSBkaWZmZXJlbnQgc2lnbmF0dXJlIGluIEMgaXMgYSBjb21waWxhdGlvbiBlcnJvciwgc28KKy0gICB0aGlzIG1hY3JvIG11c3QgdXNlIHRoZSBzYW1lIHR5cGUgYXMgYW55IGV4aXN0aW5nIGRlY2xhcmF0aW9uIHNvCistICAgdGhhdCBwcm9ncmFtcyB0aGF0IGF2b2lkIHRoZSBwcm9ibGVtYXRpYyBGVU5DVElPTiBkbyBub3QgZmFpbCB0bworLSAgIGNvbXBpbGUgbWVyZWx5IGJlY2F1c2UgdGhleSBpbmNsdWRlZCBhIGhlYWRlciB0aGF0IHBvaXNvbmVkIHRoZQorLSAgIGZ1bmN0aW9uLiAgQnV0IHRoaXMgaW1wbGllcyB0aGF0IF9HTF9XQVJOX09OX1VTRSBpcyBvbmx5IHNhZmUgdG8KKy0gICB1c2UgaWYgRlVOQ1RJT04gaXMga25vd24gdG8gYWxyZWFkeSBoYXZlIGEgZGVjbGFyYXRpb24uICBVc2Ugb2YKKy0gICB0aGlzIG1hY3JvIGltcGxpZXMgdGhhdCB0aGVyZSBtdXN0IG5vdCBiZSBhbnkgb3RoZXIgbWFjcm8gaGlkaW5nCistICAgdGhlIGRlY2xhcmF0aW9uIG9mIEZVTkNUSU9OOyBidXQgdW5kZWZpbmluZyBGVU5DVElPTiBmaXJzdCBpcyBwYXJ0CistICAgb2YgdGhlIHBvaXNvbmluZyBwcm9jZXNzIGFueXdheSAoYWx0aG91Z2ggZm9yIHN5bWJvbHMgdGhhdCBhcmUKKy0gICBwcm92aWRlZCBvbmx5IHZpYSBhIG1hY3JvLCB0aGUgcmVzdWx0IGlzIGEgY29tcGlsYXRpb24gZXJyb3IgcmF0aGVyCistICAgdGhhbiBhIHdhcm5pbmcgY29udGFpbmluZyAibGl0ZXJhbCBzdHJpbmciKS4gIEFsc28gbm90ZSB0aGF0IGluCistICAgQysrLCBpdCBpcyBvbmx5IHNhZmUgdG8gdXNlIGlmIEZVTkNUSU9OIGhhcyBubyBvdmVybG9hZHMuCistCistICAgRm9yIGFuIGV4YW1wbGUsIGl0IGlzIHBvc3NpYmxlIHRvIHBvaXNvbiAnZ2V0bGluZScgYnk6CistICAgLSBhZGRpbmcgYSBjYWxsIHRvIGdsX1dBUk5fT05fVVNFX1BSRVBBUkUoW1sjaW5jbHVkZSA8c3RkaW8uaD5dXSwKKy0gICAgIFtnZXRsaW5lXSkgaW4gY29uZmlndXJlLmFjLCB3aGljaCBwb3RlbnRpYWxseSBkZWZpbmVzCistICAgICBIQVZFX1JBV19ERUNMX0dFVExJTkUKKy0gICAtIGFkZGluZyB0aGlzIGNvZGUgdG8gYSBoZWFkZXIgdGhhdCB3cmFwcyB0aGUgc3lzdGVtIDxzdGRpby5oPjoKKy0gICAgICN1bmRlZiBnZXRsaW5lCistICAgICAjaWYgSEFWRV9SQVdfREVDTF9HRVRMSU5FCistICAgICBfR0xfV0FSTl9PTl9VU0UgKGdldGxpbmUsICJnZXRsaW5lIGlzIHJlcXVpcmVkIGJ5IFBPU0lYIDIwMDgsIGJ1dCIKKy0gICAgICAgIm5vdCB1bml2ZXJzYWxseSBwcmVzZW50OyB1c2UgdGhlIGdudWxpYiBtb2R1bGUgZ2V0bGluZSIpOworLSAgICAgI2VuZGlmCistCistICAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIGRpcmVjdGx5IHBvaXNvbiBnbG9iYWwgdmFyaWFibGVzLiAgQnV0IGl0IGlzCistICAgcG9zc2libGUgdG8gd3JpdGUgYSB3cmFwcGVyIGFjY2Vzc29yIGZ1bmN0aW9uLCBhbmQgcG9pc29uIHRoYXQKKy0gICAobGVzcyBjb21tb24gdXNhZ2UsIGxpa2UgJmVudmlyb24sIHdpbGwgY2F1c2UgYSBjb21waWxhdGlvbiBlcnJvcgorLSAgIHJhdGhlciB0aGFuIGlzc3VlIHRoZSBuaWNlIHdhcm5pbmcsIGJ1dCB0aGUgZW5kIHJlc3VsdCBvZiBpbmZvcm1pbmcKKy0gICB0aGUgZGV2ZWxvcGVyIGFib3V0IHRoZWlyIHBvcnRhYmlsaXR5IHByb2JsZW0gaXMgc3RpbGwgYWNoaWV2ZWQpOgorLSAgICNpZiBIQVZFX1JBV19ERUNMX0VOVklST04KKy0gICBzdGF0aWMgaW5saW5lIGNoYXIgKioqcnBsX2Vudmlyb24gKHZvaWQpIHsgcmV0dXJuICZlbnZpcm9uOyB9CistICAgX0dMX1dBUk5fT05fVVNFIChycGxfZW52aXJvbiwgImVudmlyb24gaXMgbm90IGFsd2F5cyBwcm9wZXJseSBkZWNsYXJlZCIpOworLSAgICMgdW5kZWYgZW52aXJvbgorLSAgICMgZGVmaW5lIGVudmlyb24gKCpycGxfZW52aXJvbiAoKSkKKy0gICAjZW5kaWYKKy0gICAqLworLSNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCistCistIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKy0vKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCistIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorLWV4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24gX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtZXNzYWdlKSkpCistIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLS8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCistIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorLWV4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKy0jIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworLSMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKKy1fR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCistIyBlbmRpZgorLSNlbmRpZgorLQorLS8qIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmN0aW9uLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCAic3RyaW5nIikKKy0gICBpcyBsaWtlIF9HTF9XQVJOX09OX1VTRSAoZnVuY3Rpb24sICJzdHJpbmciKSwgZXhjZXB0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzCistICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorLSAgIGFuZCBhdHRyaWJ1dGVzLgorLSAgIFRoaXMgdmFyaWFudCBpcyB1c2VmdWwgZm9yIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGluIEMrKy4gX0dMX1dBUk5fT05fVVNFIGRvZXMKKy0gICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworLSNpZm5kZWYgX0dMX1dBUk5fT05fVVNFX0NYWAorLSMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCistIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorLWV4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMgXAorLSAgICAgX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtc2cpKSkKKy0jIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCistLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKy0jICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCistZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworLSMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCistIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorLV9HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKy0jIGVuZGlmCistI2VuZGlmCistCistLyogX0dMX1dBUk5fRVhURVJOX0MgZGVjbGFyYXRpb247CistICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKy0jaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCistIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCistIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybiAiQyIKKy0jIGVsc2UKKy0jICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuCistIyBlbmRpZgorLSNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC93YXJuLW9uLXVzZS5oIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3dhcm4tb24tdXNlLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3dhcm4tb24tdXNlLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrKyBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC93YXJuLW9uLXVzZS5oCTIwMTItMDEtMDggMDI6MDc6MzkuOTUwNDg0NDM5IC0wODAwCitAQCAtMCwwICsxLDEwOSBAQAorKy8qIEEgQyBtYWNybyBmb3IgZW1pdHRpbmcgd2FybmluZ3MgaWYgYSBmdW5jdGlvbiBpcyB1c2VkLgorKyAgIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysvKiBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAibGl0ZXJhbCBzdHJpbmciKSBpc3N1ZXMgYSBkZWNsYXJhdGlvbgorKyAgIGZvciBGVU5DVElPTiB3aGljaCB3aWxsIHRoZW4gdHJpZ2dlciBhIGNvbXBpbGVyIHdhcm5pbmcgY29udGFpbmluZworKyAgIHRoZSB0ZXh0IG9mICJsaXRlcmFsIHN0cmluZyIgYW55d2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQsIGlmCisrICAgc3VwcG9ydGVkIGJ5IHRoZSBjb21waWxlci4gIElmIHRoZSBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMKKysgICBmZWF0dXJlLCB0aGUgbWFjcm8gZXhwYW5kcyB0byBhbiB1bnVzZWQgZXh0ZXJuIGRlY2xhcmF0aW9uLgorKworKyAgIFRoaXMgbWFjcm8gaXMgdXNlZnVsIGZvciBtYXJraW5nIGEgZnVuY3Rpb24gYXMgYSBwb3RlbnRpYWwKKysgICBwb3J0YWJpbGl0eSB0cmFwLCB3aXRoIHRoZSBpbnRlbnQgdGhhdCAibGl0ZXJhbCBzdHJpbmciIGluY2x1ZGUKKysgICBpbnN0cnVjdGlvbnMgb24gdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQKKysgICBpbnN0ZWFkLiAgSG93ZXZlciwgb25lIG9mIHRoZSByZWFzb25zIHRoYXQgYSBmdW5jdGlvbiBpcyBhCisrICAgcG9ydGFiaWxpdHkgdHJhcCBpcyBpZiBpdCBoYXMgdGhlIHdyb25nIHNpZ25hdHVyZS4gIERlY2xhcmluZworKyAgIEZVTkNUSU9OIHdpdGggYSBkaWZmZXJlbnQgc2lnbmF0dXJlIGluIEMgaXMgYSBjb21waWxhdGlvbiBlcnJvciwgc28KKysgICB0aGlzIG1hY3JvIG11c3QgdXNlIHRoZSBzYW1lIHR5cGUgYXMgYW55IGV4aXN0aW5nIGRlY2xhcmF0aW9uIHNvCisrICAgdGhhdCBwcm9ncmFtcyB0aGF0IGF2b2lkIHRoZSBwcm9ibGVtYXRpYyBGVU5DVElPTiBkbyBub3QgZmFpbCB0bworKyAgIGNvbXBpbGUgbWVyZWx5IGJlY2F1c2UgdGhleSBpbmNsdWRlZCBhIGhlYWRlciB0aGF0IHBvaXNvbmVkIHRoZQorKyAgIGZ1bmN0aW9uLiAgQnV0IHRoaXMgaW1wbGllcyB0aGF0IF9HTF9XQVJOX09OX1VTRSBpcyBvbmx5IHNhZmUgdG8KKysgICB1c2UgaWYgRlVOQ1RJT04gaXMga25vd24gdG8gYWxyZWFkeSBoYXZlIGEgZGVjbGFyYXRpb24uICBVc2Ugb2YKKysgICB0aGlzIG1hY3JvIGltcGxpZXMgdGhhdCB0aGVyZSBtdXN0IG5vdCBiZSBhbnkgb3RoZXIgbWFjcm8gaGlkaW5nCisrICAgdGhlIGRlY2xhcmF0aW9uIG9mIEZVTkNUSU9OOyBidXQgdW5kZWZpbmluZyBGVU5DVElPTiBmaXJzdCBpcyBwYXJ0CisrICAgb2YgdGhlIHBvaXNvbmluZyBwcm9jZXNzIGFueXdheSAoYWx0aG91Z2ggZm9yIHN5bWJvbHMgdGhhdCBhcmUKKysgICBwcm92aWRlZCBvbmx5IHZpYSBhIG1hY3JvLCB0aGUgcmVzdWx0IGlzIGEgY29tcGlsYXRpb24gZXJyb3IgcmF0aGVyCisrICAgdGhhbiBhIHdhcm5pbmcgY29udGFpbmluZyAibGl0ZXJhbCBzdHJpbmciKS4gIEFsc28gbm90ZSB0aGF0IGluCisrICAgQysrLCBpdCBpcyBvbmx5IHNhZmUgdG8gdXNlIGlmIEZVTkNUSU9OIGhhcyBubyBvdmVybG9hZHMuCisrCisrICAgRm9yIGFuIGV4YW1wbGUsIGl0IGlzIHBvc3NpYmxlIHRvIHBvaXNvbiAnZ2V0bGluZScgYnk6CisrICAgLSBhZGRpbmcgYSBjYWxsIHRvIGdsX1dBUk5fT05fVVNFX1BSRVBBUkUoW1sjaW5jbHVkZSA8c3RkaW8uaD5dXSwKKysgICAgIFtnZXRsaW5lXSkgaW4gY29uZmlndXJlLmFjLCB3aGljaCBwb3RlbnRpYWxseSBkZWZpbmVzCisrICAgICBIQVZFX1JBV19ERUNMX0dFVExJTkUKKysgICAtIGFkZGluZyB0aGlzIGNvZGUgdG8gYSBoZWFkZXIgdGhhdCB3cmFwcyB0aGUgc3lzdGVtIDxzdGRpby5oPjoKKysgICAgICN1bmRlZiBnZXRsaW5lCisrICAgICAjaWYgSEFWRV9SQVdfREVDTF9HRVRMSU5FCisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGdldGxpbmUsICJnZXRsaW5lIGlzIHJlcXVpcmVkIGJ5IFBPU0lYIDIwMDgsIGJ1dCIKKysgICAgICAgIm5vdCB1bml2ZXJzYWxseSBwcmVzZW50OyB1c2UgdGhlIGdudWxpYiBtb2R1bGUgZ2V0bGluZSIpOworKyAgICAgI2VuZGlmCisrCisrICAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIGRpcmVjdGx5IHBvaXNvbiBnbG9iYWwgdmFyaWFibGVzLiAgQnV0IGl0IGlzCisrICAgcG9zc2libGUgdG8gd3JpdGUgYSB3cmFwcGVyIGFjY2Vzc29yIGZ1bmN0aW9uLCBhbmQgcG9pc29uIHRoYXQKKysgICAobGVzcyBjb21tb24gdXNhZ2UsIGxpa2UgJmVudmlyb24sIHdpbGwgY2F1c2UgYSBjb21waWxhdGlvbiBlcnJvcgorKyAgIHJhdGhlciB0aGFuIGlzc3VlIHRoZSBuaWNlIHdhcm5pbmcsIGJ1dCB0aGUgZW5kIHJlc3VsdCBvZiBpbmZvcm1pbmcKKysgICB0aGUgZGV2ZWxvcGVyIGFib3V0IHRoZWlyIHBvcnRhYmlsaXR5IHByb2JsZW0gaXMgc3RpbGwgYWNoaWV2ZWQpOgorKyAgICNpZiBIQVZFX1JBV19ERUNMX0VOVklST04KKysgICBzdGF0aWMgaW5saW5lIGNoYXIgKioqcnBsX2Vudmlyb24gKHZvaWQpIHsgcmV0dXJuICZlbnZpcm9uOyB9CisrICAgX0dMX1dBUk5fT05fVVNFIChycGxfZW52aXJvbiwgImVudmlyb24gaXMgbm90IGFsd2F5cyBwcm9wZXJseSBkZWNsYXJlZCIpOworKyAgICMgdW5kZWYgZW52aXJvbgorKyAgICMgZGVmaW5lIGVudmlyb24gKCpycGxfZW52aXJvbiAoKSkKKysgICAjZW5kaWYKKysgICAqLworKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCisrCisrIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKysvKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCisrIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24gX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtZXNzYWdlKSkpCisrIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisrIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKysjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKKytfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisrIyBlbmRpZgorKyNlbmRpZgorKworKy8qIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmN0aW9uLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCAic3RyaW5nIikKKysgICBpcyBsaWtlIF9HTF9XQVJOX09OX1VTRSAoZnVuY3Rpb24sICJzdHJpbmciKSwgZXhjZXB0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzCisrICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorKyAgIGFuZCBhdHRyaWJ1dGVzLgorKyAgIFRoaXMgdmFyaWFudCBpcyB1c2VmdWwgZm9yIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGluIEMrKy4gX0dMX1dBUk5fT05fVVNFIGRvZXMKKysgICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFX0NYWAorKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisrIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMgXAorKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtc2cpKSkKKysjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisrLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKysjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCisrZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisrIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyogX0dMX1dBUk5fRVhURVJOX0MgZGVjbGFyYXRpb247CisrICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKysjaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCisrIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisrIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybiAiQyIKKysjIGVsc2UKKysjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuCisrIyBlbmRpZgorKyNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9hbGxvY2F0b3IuaCBsaWJpY29udi0xLjE0L3NyY2xpYi9hbGxvY2F0b3IuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvYWxsb2NhdG9yLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9hbGxvY2F0b3IuaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjA1MDQ4NDQ0NCAtMDgwMAorQEAgLTQ1LDExICs0NSwxMCBAQCBzdHJ1Y3QgYWxsb2NhdG9yCisgICAvKiBDYWxsIEZSRUUgdG8gZnJlZSBtZW1vcnksIGxpa2UgJ2ZyZWUnLiAgKi8KKyAgIHZvaWQgKCpmcmVlKSAodm9pZCAqKTsKKyAKKy0gIC8qIElmIG5vbm51bGwsIGNhbGwgRElFIChTSVpFKSBpZiBNQUxMT0MgKFNJWkUpIG9yIFJFQUxMT0MgKC4uLiwKKy0gICAgIFNJWkUpIGZhaWxzLiAgRElFIHNob3VsZCBub3QgcmV0dXJuLiAgU0laRSBzaG91bGQgZXF1YWwgU0laRV9NQVgKKy0gICAgIGlmIHNpemVfdCBvdmVyZmxvdyB3YXMgZGV0ZWN0ZWQgd2hpbGUgY2FsY3VsYXRpbmcgc2l6ZXMgdG8gYmUKKy0gICAgIHBhc3NlZCB0byBNQUxMT0Mgb3IgUkVBTExPQy4gICovCistICB2b2lkICgqZGllKSAoc2l6ZV90KTsKKysgIC8qIElmIG5vbm51bGwsIGNhbGwgRElFIGlmIE1BTExPQyBvciBSRUFMTE9DIGZhaWxzLiAgRElFIHNob3VsZCBub3QKKysgICAgIHJldHVybi4gIERJRSBjYW4gYmUgdXNlZCBieSBjb2RlIHRoYXQgZGV0ZWN0cyBtZW1vcnkgb3ZlcmZsb3cKKysgICAgIHdoaWxlIGNhbGN1bGF0aW5nIHNpemVzIHRvIGJlIHBhc3NlZCB0byBNQUxMT0Mgb3IgUkVBTExPQy4gICovCisrICB2b2lkICgqZGllKSAodm9pZCk7CisgfTsKKyAKKyAvKiBBbiBhbGxvY2F0b3IgdXNpbmcgdGhlIHN0ZGxpYiBmdW5jdGlvbnMgYW5kIGEgbnVsbCBESUUgZnVuY3Rpb24uICAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9jYW5vbmljYWxpemUtbGdwbC5jIGxpYmljb252LTEuMTQvc3JjbGliL2Nhbm9uaWNhbGl6ZS1sZ3BsLmMKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2Nhbm9uaWNhbGl6ZS1sZ3BsLmMJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9jYW5vbmljYWxpemUtbGdwbC5jCTIwMTItMDEtMDggMDI6MDc6NDAuMDk0NDg0NDQ2IC0wODAwCitAQCAtMTI1LDcgKzEyNSw3IEBAIF9fcmVhbHBhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnJlc28KKyAjZWxzZQorICAgcGF0aF9tYXggPSBwYXRoY29uZiAobmFtZSwgX1BDX1BBVEhfTUFYKTsKKyAgIGlmIChwYXRoX21heCA8PSAwKQorLSAgICBwYXRoX21heCA9IDgxOTI7CisrICAgIHBhdGhfbWF4ID0gMTAyNDsKKyAjZW5kaWYKKyAKKyAgIGlmIChyZXNvbHZlZCA9PSBOVUxMKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9jYXJlYWRsaW5rYXQuYyBsaWJpY29udi0xLjE0L3NyY2xpYi9jYXJlYWRsaW5rYXQuYworLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvY2FyZWFkbGlua2F0LmMJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9jYXJlYWRsaW5rYXQuYwkyMDEyLTAxLTA4IDAyOjA3OjQwLjEwMjQ4NDQ0NSAtMDgwMAorQEAgLTEzMyw3ICsxMzMsNiBAQCBjYXJlYWRsaW5rYXQgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZW5hCisgICAgICAgICAgIGlmIChidWYgPT0gc3RhY2tfYnVmKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGNoYXIgKmIgPSAoY2hhciAqKSBhbGxvYy0+YWxsb2NhdGUgKGxpbmtfc2l6ZSk7CistICAgICAgICAgICAgICBidWZfc2l6ZSA9IGxpbmtfc2l6ZTsKKyAgICAgICAgICAgICAgIGlmICghIGIpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgbWVtY3B5IChiLCBidWYsIGxpbmtfc2l6ZSk7CitAQCAtMTU3LDExICsxNTYsNiBAQCBjYXJlYWRsaW5rYXQgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZW5hCisgICAgICAgICBidWZfc2l6ZSAqPSAyOworICAgICAgIGVsc2UgaWYgKGJ1Zl9zaXplIDwgYnVmX3NpemVfbWF4KQorICAgICAgICAgYnVmX3NpemUgPSBidWZfc2l6ZV9tYXg7CistICAgICAgZWxzZSBpZiAoYnVmX3NpemVfbWF4IDwgU0laRV9NQVgpCistICAgICAgICB7CistICAgICAgICAgIGVycm5vID0gRU5BTUVUT09MT05HOworLSAgICAgICAgICByZXR1cm4gTlVMTDsKKy0gICAgICAgIH0KKyAgICAgICBlbHNlCisgICAgICAgICBicmVhazsKKyAgICAgICBidWYgPSAoY2hhciAqKSBhbGxvYy0+YWxsb2NhdGUgKGJ1Zl9zaXplKTsKK0BAIC0xNjksNyArMTYzLDcgQEAgY2FyZWFkbGlua2F0IChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGVuYQorICAgd2hpbGUgKGJ1Zik7CisgCisgICBpZiAoYWxsb2MtPmRpZSkKKy0gICAgYWxsb2MtPmRpZSAoYnVmX3NpemUpOworKyAgICBhbGxvYy0+ZGllICgpOworICAgZXJybm8gPSBFTk9NRU07CisgICByZXR1cm4gTlVMTDsKKyB9CitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2Vycm5vLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvZXJybm8uaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvZXJybm8uaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL2Vycm5vLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4xMjI0ODQ0NDYgLTA4MDAKK0BAIC0xNiw3ICsxNiw3IEBACisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfRVJSTk9fSAorKyNpZm5kZWYgX0dMX0VSUk5PX0gKKyAKKyAjaWYgX19HTlVDX18gPj0gMworIEBQUkFHTUFfU1lTVEVNX0hFQURFUkAKK0BAIC0yNiw4ICsyNiw4IEBACisgLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworICNASU5DTFVERV9ORVhUQCBATkVYVF9FUlJOT19IQAorIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX0VSUk5PX0gKKy0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9FUlJOT19ICisrI2lmbmRlZiBfR0xfRVJSTk9fSAorKyNkZWZpbmUgX0dMX0VSUk5PX0gKKyAKKyAKKyAvKiBPbiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMsIG1hbnkgbWFjcm9zIGFyZSBub3QgZGVmaW5lZC4gICovCitAQCAtMTQ3LDE2ICsxNDcsNiBAQAorICMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FTk9UU1VQIDEKKyAjIGVuZGlmCisgCistIyBpZm5kZWYgRU5FVFJFU0VUCistIyAgZGVmaW5lIEVORVRSRVNFVCAyMDExCistIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VORVRSRVNFVCAxCistIyBlbmRpZgorLQorLSMgaWZuZGVmIEVDT05OQUJPUlRFRAorLSMgIGRlZmluZSBFQ09OTkFCT1JURUQgMjAxMgorLSMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FQ09OTkFCT1JURUQgMQorLSMgZW5kaWYKKy0KKyAjIGlmbmRlZiBFU1RBTEUKKyAjICBkZWZpbmUgRVNUQUxFICAgIDIwMDkKKyAjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRVNUQUxFIDEKK0BAIC0xNzMsNSArMTYzLDUgQEAKKyAjIGVuZGlmCisgCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9FUlJOT19IICovCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9FUlJOT19IICovCisrI2VuZGlmIC8qIF9HTF9FUlJOT19IICovCisrI2VuZGlmIC8qIF9HTF9FUlJOT19IICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2Vycm9yLmMgbGliaWNvbnYtMS4xNC9zcmNsaWIvZXJyb3IuYworLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvZXJyb3IuYwkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL2Vycm9yLmMJMjAxMi0wMS0wOCAwMjowNzo0MC4xMzQ0ODQ0NDggLTA4MDAKK0BAIC05NywxNSArOTcsMTEgQEAgZXh0ZXJuIHZvaWQgX19lcnJvcl9hdF9saW5lIChpbnQgc3RhdHVzLAorIC8qIFRoZSBnbnVsaWIgb3ZlcnJpZGUgb2YgZmNudGwgaXMgbm90IG5lZWRlZCBpbiB0aGlzIGZpbGUuICAqLworICMgdW5kZWYgZmNudGwKKyAKKy0jIGlmICFIQVZFX0RFQ0xfU1RSRVJST1JfUgorKyMgaWYgIUhBVkVfREVDTF9TVFJFUlJPUl9SICYmIFNUUkVSUk9SX1JfQ0hBUl9QCisgIyAgaWZuZGVmIEhBVkVfREVDTF9TVFJFUlJPUl9SCisgInRoaXMgY29uZmlndXJlLXRpbWUgZGVjbGFyYXRpb24gdGVzdCB3YXMgbm90IHJ1biIKKyAjICBlbmRpZgorLSMgIGlmIFNUUkVSUk9SX1JfQ0hBUl9QCisgY2hhciAqc3RyZXJyb3JfciAoKTsKKy0jICBlbHNlCistaW50IHN0cmVycm9yX3IgKCk7CistIyAgZW5kaWYKKyAjIGVuZGlmCisgCisgLyogVGhlIGNhbGxpbmcgcHJvZ3JhbSBzaG91bGQgZGVmaW5lIHByb2dyYW1fbmFtZSBhbmQgc2V0IGl0IHRvIHRoZQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9mY250bC5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL2ZjbnRsLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2ZjbnRsLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9mY250bC5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuMTU0NDg0NDQ5IC0wODAwCitAQCAtNDAsNyArNDAsNyBAQAorICNlbHNlCisgLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfRkNOVExfSAorKyNpZm5kZWYgX0dMX0ZDTlRMX0gKKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogT24gc29tZSBzeXN0ZW1zIG90aGVyIHRoYW4gZ2xpYmMsIDxzeXMvc3RhdC5oPiBpcyBhIHByZXJlcXVpc2l0ZSBvZgorQEAgLTU1LDggKzU1LDggQEAKKyAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisgI0BJTkNMVURFX05FWFRAIEBORVhUX0ZDTlRMX0hACisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfRkNOVExfSAorLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX0ZDTlRMX0gKKysjaWZuZGVmIF9HTF9GQ05UTF9ICisrI2RlZmluZSBfR0xfRkNOVExfSAorIAorICNpZm5kZWYgX19HTElCQ19fIC8qIEF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24gb24gZ2xpYmMgc3lzdGVtcy4gICovCisgIyBpbmNsdWRlIDx1bmlzdGQuaD4KK0BAIC0zMjAsNiArMzIwLDYgQEAgX0dMX1dBUk5fT05fVVNFIChvcGVuYXQsICJvcGVuYXQgaXMgbm90CisgI2VuZGlmCisgCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9GQ05UTF9IICovCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9GQ05UTF9IICovCisrI2VuZGlmIC8qIF9HTF9GQ05UTF9IICovCisrI2VuZGlmIC8qIF9HTF9GQ05UTF9IICovCisgI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2ludHByb3BzLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvaW50cHJvcHMuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvaW50cHJvcHMuaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL2ludHByb3BzLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4xNzQ0ODQ0NTAgLTA4MDAKK0BAIC0yMiwxMyArMjIsMTQgQEAKKyAKKyAjaW5jbHVkZSA8bGltaXRzLmg+CisgCistLyogUmV0dXJuIGFuIGludGVnZXIgdmFsdWUsIGNvbnZlcnRlZCB0byB0aGUgc2FtZSB0eXBlIGFzIHRoZSBpbnRlZ2VyCistICAgZXhwcmVzc2lvbiBFIGFmdGVyIGludGVnZXIgdHlwZSBwcm9tb3Rpb24uICBWIGlzIHRoZSB1bmNvbnZlcnRlZCB2YWx1ZS4gICovCistI2RlZmluZSBfR0xfSU5UX0NPTlZFUlQoZSwgdikgKDAgKiAoZSkgKyAodikpCisrLyogUmV0dXJuIGEgaW50ZWdlciB2YWx1ZSwgY29udmVydGVkIHRvIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGludGVnZXIKKysgICBleHByZXNzaW9uIEUgYWZ0ZXIgaW50ZWdlciB0eXBlIHByb21vdGlvbi4gIFYgaXMgdGhlIHVuY29udmVydGVkIHZhbHVlLgorKyAgIEUgc2hvdWxkIG5vdCBoYXZlIHNpZGUgZWZmZWN0cy4gICovCisrI2RlZmluZSBfR0xfSU5UX0NPTlZFUlQoZSwgdikgKChlKSAtIChlKSArICh2KSkKKyAKKyAvKiBBY3QgbGlrZSBfR0xfSU5UX0NPTlZFUlQgKEUsIC1WKSBidXQgd29yayBhcm91bmQgYSBidWcgaW4gSVJJWCA2LjUgY2M7IHNlZQorICAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWdudWxpYi8yMDExLTA1L21zZzAwNDA2Lmh0bWw+LiAgKi8KKy0jZGVmaW5lIF9HTF9JTlRfTkVHQVRFX0NPTlZFUlQoZSwgdikgKDAgKiAoZSkgLSAodikpCisrI2RlZmluZSBfR0xfSU5UX05FR0FURV9DT05WRVJUKGUsIHYpICgoZSkgLSAoZSkgLSAodikpCisgCisgLyogVGhlIGV4dHJhIGNhc3RzIGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zIHdvcmsgYXJvdW5kIGNvbXBpbGVyIGJ1Z3MsCisgICAgZS5nLiwgaW4gQ3JheSBDIDUuMC4zLjAuICAqLworQEAgLTUyLDcgKzUzLDcgQEAKKyAjZGVmaW5lIFRZUEVfU0lHTkVEKHQpICghICgodCkgMCA8ICh0KSAtMSkpCisgCisgLyogUmV0dXJuIDEgaWYgdGhlIGludGVnZXIgZXhwcmVzc2lvbiBFLCBhZnRlciBpbnRlZ2VyIHByb21vdGlvbiwgaGFzCistICAgYSBzaWduZWQgdHlwZS4gICovCisrICAgYSBzaWduZWQgdHlwZS4gIEUgc2hvdWxkIG5vdCBoYXZlIHNpZGUgZWZmZWN0cy4gICovCisgI2RlZmluZSBfR0xfSU5UX1NJR05FRChlKSAoX0dMX0lOVF9ORUdBVEVfQ09OVkVSVCAoZSwgMSkgPCAwKQorIAorIAorQEAgLTMxMCwxMCArMzExLDEzIEBACisgLyogUmV0dXJuIDEgaWYgdGhlIGV4cHJlc3Npb24gQSA8b3A+IEIgd291bGQgb3ZlcmZsb3csCisgICAgd2hlcmUgT1BfUkVTVUxUX09WRVJGTE9XIChBLCBCLCBNSU4sIE1BWCkgZG9lcyB0aGUgYWN0dWFsIHRlc3QsCisgICAgYXNzdW1pbmcgTUlOIGFuZCBNQVggYXJlIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGZvciB0aGUgcmVzdWx0IHR5cGUuCistICAgQXJndW1lbnRzIHNob3VsZCBiZSBmcmVlIG9mIHNpZGUgZWZmZWN0cy4gICovCisrCisrICAgVGhpcyBtYWNybyBhc3N1bWVzIHRoYXQgQSB8IEIgaXMgYSB2YWxpZCBpbnRlZ2VyIGlmIGJvdGggQSBhbmQgQiBhcmUsCisrICAgd2hpY2ggaXMgdHJ1ZSBvZiBhbGwga25vd24gcHJhY3RpY2FsIGhvc3RzLiAgSWYgdGhpcyBpcyBhIHByb2JsZW0KKysgICBmb3IgeW91LCBwbGVhc2UgbGV0IHVzIGtub3cgaG93IHRvIGZpeCBpdCBmb3IgeW91ciBob3N0LiAgKi8KKyAjZGVmaW5lIF9HTF9CSU5BUllfT1BfT1ZFUkZMT1coYSwgYiwgb3BfcmVzdWx0X292ZXJmbG93KSAgICAgICAgXAorICAgb3BfcmVzdWx0X292ZXJmbG93IChhLCBiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgICAgIF9HTF9JTlRfTUlOSU1VTSAoMCAqIChiKSArIChhKSksICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAgICAgX0dMX0lOVF9NQVhJTVVNICgwICogKGIpICsgKGEpKSkKKysgICAgICAgICAgICAgICAgICAgICAgX0dMX0lOVF9NSU5JTVVNICgoYSkgfCAoYikpLCAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICBfR0xfSU5UX01BWElNVU0gKChhKSB8IChiKSkpCisgCisgI2VuZGlmIC8qIF9HTF9JTlRQUk9QU19IICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL01ha2VmaWxlLmdudWxpYiBsaWJpY29udi0xLjE0L3NyY2xpYi9NYWtlZmlsZS5nbnVsaWIKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL01ha2VmaWxlLmdudWxpYgkyMDEyLTAxLTA4IDAyOjA1OjE4Ljc1NDQ3NzYwNiAtMDgwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL01ha2VmaWxlLmdudWxpYgkyMDEyLTAxLTA4IDAyOjA3OjQzLjEzODQ4NDU5MiAtMDgwMAorQEAgLTksNyArOSw3IEBACisgIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorICMKKyAjIEdlbmVyYXRlZCBieSBnbnVsaWItdG9vbC4KKy0jIFJlcHJvZHVjZSBieTogZ251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxvY2FsLWRpcj1nbnVsaWItbG9jYWwgLS1saWI9bGliaWNydCAtLXNvdXJjZS1iYXNlPXNyY2xpYiAtLW00LWJhc2U9c3JjbTQgLS1kb2MtYmFzZT1kb2MgLS10ZXN0cy1iYXNlPXRlc3RzIC0tYXV4LWRpcj1idWlsZC1hdXggLS1tYWtlZmlsZS1uYW1lPU1ha2VmaWxlLmdudWxpYiAtLW5vLWNvbmRpdGlvbmFsLWRlcGVuZGVuY2llcyAtLW5vLWxpYnRvb2wgLS1tYWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxlcyBiaW5hcnktaW8gZXJyb3IgZ2V0dGV4dCBnZXR0ZXh0LWggbGliaWNvbnYtbWlzYyBtYnN0YXRlIG1lbW1vdmUgcHJvZ25hbWUgcmVsb2NhdGFibGUtcHJvZyBzYWZlLXJlYWQgc2lncGlwZSBzdGRpbyBzdGRsaWIgc3RyZXJyb3IgdW5pc3RkIHVuaXdpZHRoL3dpZHRoIHVubG9ja2VkLWlvIHhhbGxvYworKyMgUmVwcm9kdWNlIGJ5OiBnbnVsaWItdG9vbCAtLWltcG9ydCAtLWRpcj0uIC0tbG9jYWwtZGlyPWdudWxpYi1sb2NhbCAtLWxpYj1saWJpY3J0IC0tc291cmNlLWJhc2U9c3JjbGliIC0tbTQtYmFzZT1zcmNtNCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJhc2U9dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLW1ha2VmaWxlLW5hbWU9TWFrZWZpbGUuZ251bGliIC0tbm8tbGlidG9vbCAtLW1hY3JvLXByZWZpeD1nbCAtLW5vLXZjLWZpbGVzIGJpbmFyeS1pbyBlcnJvciBnZXR0ZXh0IGdldHRleHQtaCBsaWJpY29udi1taXNjIG1ic3RhdGUgbWVtbW92ZSBwcm9nbmFtZSByZWxvY2F0YWJsZSByZWxvY2F0YWJsZS1wcm9nIHNhZmUtcmVhZCBzaWdwaXBlIHN0ZGlvIHN0ZGxpYiBzdHJlcnJvciB1bmlzdGQgdW5pd2lkdGgvd2lkdGggdW5sb2NrZWQtaW8geGFsbG9jCisgCisgCisgTU9TVExZQ0xFQU5GSUxFUyArPSBjb3JlICouc3RhY2tkdW1wCitAQCAtNjAsMTIgKzYwLDYwIEBAIEVYVFJBX0RJU1QgKz0gYXJlYWRsaW5rLmgKKyAKKyAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGFyZWFkbGluaworIAorKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgYXJnLW5vbm51bGwKKysKKysjIFRoZSBCVUlMVF9TT1VSQ0VTIGNyZWF0ZWQgYnkgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGFyZSBub3QgdXNlZCB2aWEgI2luY2x1ZGUKKysjIHN0YXRlbWVudHMgYnV0IHRocm91Z2ggZGlyZWN0IGZpbGUgcmVmZXJlbmNlLiBUaGVyZWZvcmUgdGhpcyBzbmlwcGV0IG11c3QgYmUKKysjIHByZXNlbnQgaW4gYWxsIE1ha2VmaWxlLmFtIHRoYXQgbmVlZCBpdC4gVGhpcyBpcyBlbnN1cmVkIGJ5IHRoZSBhcHBsaWNhYmlsaXR5CisrIyAnYWxsJyBkZWZpbmVkIGFib3ZlLgorKworK0JVSUxUX1NPVVJDRVMgKz0gYXJnLW5vbm51bGwuaAorKyMgVGhlIGFyZy1ub25udWxsLmggdGhhdCBnZXRzIGluc2VydGVkIGludG8gZ2VuZXJhdGVkIC5oIGZpbGVzIGlzIHRoZSBzYW1lIGFzCisrIyBidWlsZC1hdXgvYXJnLW5vbm51bGwuaCwgZXhjZXB0IHRoYXQgaXQgaGFzIHRoZSBjb3B5cmlnaHQgaGVhZGVyIGN1dCBvZmYuCisrYXJnLW5vbm51bGwuaDogJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvYXJnLW5vbm51bGwuaAorKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorKwlzZWQgLW4gLWUgJy9HTF9BUkdfTk9OTlVMTC8sJCRwJyBcCisrCSAgPCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9hcmctbm9ubnVsbC5oIFwKKysJICA+ICRALXQgJiYgXAorKwltdiAkQC10ICRACisrTU9TVExZQ0xFQU5GSUxFUyArPSBhcmctbm9ubnVsbC5oIGFyZy1ub25udWxsLmgtdAorKworK0FSR19OT05OVUxMX0g9YXJnLW5vbm51bGwuaAorKworK0VYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvYXJnLW5vbm51bGwuaAorKworKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgYXJnLW5vbm51bGwKKysKKyAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGJpbmFyeS1pbworIAorIGxpYmljcnRfYV9TT1VSQ0VTICs9IGJpbmFyeS1pby5oCisgCisgIyMgZW5kICAgZ251bGliIG1vZHVsZSBiaW5hcnktaW8KKyAKKysjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGMrK2RlZnMKKysKKysjIFRoZSBCVUlMVF9TT1VSQ0VTIGNyZWF0ZWQgYnkgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGFyZSBub3QgdXNlZCB2aWEgI2luY2x1ZGUKKysjIHN0YXRlbWVudHMgYnV0IHRocm91Z2ggZGlyZWN0IGZpbGUgcmVmZXJlbmNlLiBUaGVyZWZvcmUgdGhpcyBzbmlwcGV0IG11c3QgYmUKKysjIHByZXNlbnQgaW4gYWxsIE1ha2VmaWxlLmFtIHRoYXQgbmVlZCBpdC4gVGhpcyBpcyBlbnN1cmVkIGJ5IHRoZSBhcHBsaWNhYmlsaXR5CisrIyAnYWxsJyBkZWZpbmVkIGFib3ZlLgorKworK0JVSUxUX1NPVVJDRVMgKz0gYysrZGVmcy5oCisrIyBUaGUgYysrZGVmcy5oIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIGdlbmVyYXRlZCAuaCBmaWxlcyBpcyB0aGUgc2FtZSBhcworKyMgYnVpbGQtYXV4L2MrK2RlZnMuaCwgZXhjZXB0IHRoYXQgaXQgaGFzIHRoZSBjb3B5cmlnaHQgaGVhZGVyIGN1dCBvZmYuCisrYysrZGVmcy5oOiAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9jKytkZWZzLmgKKysJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKysJc2VkIC1uIC1lICcvX0dMX0NYWERFRlMvLCQkcCcgXAorKwkgIDwgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvYysrZGVmcy5oIFwKKysJICA+ICRALXQgJiYgXAorKwltdiAkQC10ICRACisrTU9TVExZQ0xFQU5GSUxFUyArPSBjKytkZWZzLmggYysrZGVmcy5oLXQKKysKKytDWFhERUZTX0g9YysrZGVmcy5oCisrCisrRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9jKytkZWZzLmgKKysKKysjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGMrK2RlZnMKKysKKyAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGNhbm9uaWNhbGl6ZS1sZ3BsCisgCisgCitAQCAtMTAwLDggKzE0OCw3IEBAIGlmIEdMX0dFTkVSQVRFX0VSUk5PX0gKKyBlcnJuby5oOiBlcnJuby5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9FUlJOT19IJydAfCQoTkVYVF9FUlJOT19IKXxnJyBcCitAQCAtMTQyLDE1ICsxODksMTQgQEAgQlVJTFRfU09VUkNFUyArPSBmY250bC5oCisgZmNudGwuaDogZmNudGwuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfRkNOVExfSCcnQHwkKE5FWFRfRkNOVExfSCl8ZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkNOVEwnJ0AvJChHTlVMSUJfRkNOVEwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX05PTkJMT0NLSU5HJydALyQoR05VTElCX05PTkJMT0NLSU5HKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9PUEVOJydALyQoR05VTElCX09QRU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX09QRU5BVCcnQC8kKEdOVUxJQl9PUEVOQVQpL2cnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZDTlRMJydAfCQoR05VTElCX0ZDTlRMKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9OT05CTE9DS0lORycnQHwkKEdOVUxJQl9OT05CTE9DS0lORyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfT1BFTicnQHwkKEdOVUxJQl9PUEVOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9PUEVOQVQnJ0B8JChHTlVMSUJfT1BFTkFUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfRkNOVEwnJ0B8JChIQVZFX0ZDTlRMKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfT1BFTkFUJydAfCQoSEFWRV9PUEVOQVQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GQ05UTCcnQHwkKFJFUExBQ0VfRkNOVEwpfGcnIFwKK0BAIC0yOTcsNyArMzQzLDcgQEAgRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9jbworICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgcmVsb2NhdGFibGUtcHJvZy13cmFwcGVyCisgCisgCistRVhUUkFfRElTVCArPSBhbGxvY2F0b3IuYyBhbGxvY2F0b3IuaCBhcmVhZGxpbmsuYyBhcmVhZGxpbmsuaCBjLWN0eXBlLmMgYy1jdHlwZS5oIGNhbm9uaWNhbGl6ZS1sZ3BsLmMgY2FyZWFkbGlua2F0LmMgY2FyZWFkbGlua2F0LmggbWFsbG9jYS5jIG1hbGxvY2EuaCBwcm9nbmFtZS5jIHByb2duYW1lLmggcHJvZ3JlbG9jLmMgcmVhZGxpbmsuYyByZWxvY2F0YWJsZS5jIHJlbG9jYXRhYmxlLmggcmVsb2N3cmFwcGVyLmMgc2V0ZW52LmMKKytFWFRSQV9ESVNUICs9IGFsbG9jYXRvci5jIGFsbG9jYXRvci5oIGFyZWFkbGluay5jIGFyZWFkbGluay5oIGMtY3R5cGUuYyBjLWN0eXBlLmggY2Fub25pY2FsaXplLWxncGwuYyBjYXJlYWRsaW5rYXQuYyBjYXJlYWRsaW5rYXQuaCBtYWxsb2NhLmMgbWFsbG9jYS5oIHByb2duYW1lLmMgcHJvZ25hbWUuaCBwcm9ncmVsb2MuYyByZWFkbGluay5jIHJlbG9jYXRhYmxlLmMgcmVsb2NhdGFibGUuaCByZWxvY3dyYXBwZXIuYyBzZXRlbnYuYyBzdHJlcnJvci5jCisgCisgRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9pbnN0YWxsLXJlbG9jCisgCitAQCAtMzA1LDkgKzM1MSwxMCBAQCBFWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2luCisgCisgIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzYWZlLXJlYWQKKyAKKy1saWJpY3J0X2FfU09VUkNFUyArPSBzYWZlLXJlYWQuYworIAorLUVYVFJBX0RJU1QgKz0gc2FmZS1yZWFkLmgKKytFWFRSQV9ESVNUICs9IHNhZmUtcmVhZC5jIHNhZmUtcmVhZC5oCisrCisrRVhUUkFfbGliaWNydF9hX1NPVVJDRVMgKz0gc2FmZS1yZWFkLmMKKyAKKyAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNhZmUtcmVhZAorIAorQEAgLTMyMCwyNCArMzY3LDIwIEBAIEJVSUxUX1NPVVJDRVMgKz0gc2lnbmFsLmgKKyBzaWduYWwuaDogc2lnbmFsLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfU0lHTkFMX0gnJ0B8JChORVhUX1NJR05BTF9IKXxnJyBcCistCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QVEhSRUFEX1NJR01BU0snJ0B8JChHTlVMSUJfUFRIUkVBRF9TSUdNQVNLKXxnJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TSUdOQUxfSF9TSUdQSVBFJydALyQoR05VTElCX1NJR05BTF9IX1NJR1BJUEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NJR1BST0NNQVNLJydALyQoR05VTElCX1NJR1BST0NNQVNLKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TSUdBQ1RJT04nJ0AvJChHTlVMSUJfU0lHQUNUSU9OKS9nJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TSUdOQUxfSF9TSUdQSVBFJydAfCQoR05VTElCX1NJR05BTF9IX1NJR1BJUEUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NJR1BST0NNQVNLJydAfCQoR05VTElCX1NJR1BST0NNQVNLKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TSUdBQ1RJT04nJ0B8JChHTlVMSUJfU0lHQUNUSU9OKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkcnJ0B8JChIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HKXxnJyBcCistCSAgICAgIC1lICdzfEAnJ0hBVkVfUFRIUkVBRF9TSUdNQVNLJydAfCQoSEFWRV9QVEhSRUFEX1NJR01BU0spfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9TSUdTRVRfVCcnQHwkKEhBVkVfU0lHU0VUX1QpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9TSUdJTkZPX1QnJ0B8JChIQVZFX1NJR0lORk9fVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX1NJR0FDVElPTicnQHwkKEhBVkVfU0lHQUNUSU9OKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT04nJ0B8JChIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfVFlQRV9WT0xBVElMRV9TSUdfQVRPTUlDX1QnJ0B8JChIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfU0lHSEFORExFUl9UJydAfCQoSEFWRV9TSUdIQU5ETEVSX1QpfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9QVEhSRUFEX1NJR01BU0snJ0B8JChSRVBMQUNFX1BUSFJFQURfU0lHTUFTSyl8ZycgXAorIAkgICAgICAtZSAnL2RlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwvciAkKENYWERFRlNfSCknIFwKKyAJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTC9yICQoQVJHX05PTk5VTExfSCknIFwKKyAJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRS9yICQoV0FSTl9PTl9VU0VfSCknIFwKK0BAIC0zNjgsODcgKzQxMSw2IEBAIEVYVFJBX2xpYmljcnRfYV9TT1VSQ0VTICs9IHNpZ3Byb2NtYXNrLmMKKyAKKyAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNpZ3Byb2NtYXNrCisgCistIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzbmlwcGV0L19Ob3JldHVybgorLQorLSMgQmVjYXVzZSB0aGlzIE1ha2VmaWxlIHNuaXBwZXQgZGVmaW5lcyBhIHZhcmlhYmxlIHVzZWQgYnkgb3RoZXIKKy0jIGdudWxpYiBNYWtlZmlsZSBzbmlwcGV0cywgaXQgbXVzdCBiZSBwcmVzZW50IGluIGFsbCBNYWtlZmlsZS5hbSB0aGF0CistIyBuZWVkIGl0LiBUaGlzIGlzIGVuc3VyZWQgYnkgdGhlIGFwcGxpY2FiaWxpdHkgJ2FsbCcgZGVmaW5lZCBhYm92ZS4KKy0KKy1fTk9SRVRVUk5fSD0kKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oCistCistRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oCistCistIyMgZW5kICAgZ251bGliIG1vZHVsZSBzbmlwcGV0L19Ob3JldHVybgorLQorLSMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc25pcHBldC9hcmctbm9ubnVsbAorLQorLSMgVGhlIEJVSUxUX1NPVVJDRVMgY3JlYXRlZCBieSB0aGlzIE1ha2VmaWxlIHNuaXBwZXQgYXJlIG5vdCB1c2VkIHZpYSAjaW5jbHVkZQorLSMgc3RhdGVtZW50cyBidXQgdGhyb3VnaCBkaXJlY3QgZmlsZSByZWZlcmVuY2UuIFRoZXJlZm9yZSB0aGlzIHNuaXBwZXQgbXVzdCBiZQorLSMgcHJlc2VudCBpbiBhbGwgTWFrZWZpbGUuYW0gdGhhdCBuZWVkIGl0LiBUaGlzIGlzIGVuc3VyZWQgYnkgdGhlIGFwcGxpY2FiaWxpdHkKKy0jICdhbGwnIGRlZmluZWQgYWJvdmUuCistCistQlVJTFRfU09VUkNFUyArPSBhcmctbm9ubnVsbC5oCistIyBUaGUgYXJnLW5vbm51bGwuaCB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgLmggZmlsZXMgaXMgdGhlIHNhbWUgYXMKKy0jIGJ1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgsIGV4Y2VwdCB0aGF0IGl0IGhhcyB0aGUgY29weXJpZ2h0IGhlYWRlciBjdXQKKy0jIG9mZi4KKy1hcmctbm9ubnVsbC5oOiAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgKKy0JJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKy0Jc2VkIC1uIC1lICcvR0xfQVJHX05PTk5VTEwvLCQkcCcgXAorLQkgIDwgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oIFwKKy0JICA+ICRALXQgJiYgXAorLQltdiAkQC10ICRACistTU9TVExZQ0xFQU5GSUxFUyArPSBhcmctbm9ubnVsbC5oIGFyZy1ub25udWxsLmgtdAorLQorLUFSR19OT05OVUxMX0g9YXJnLW5vbm51bGwuaAorLQorLUVYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCistCistIyMgZW5kICAgZ251bGliIG1vZHVsZSBzbmlwcGV0L2FyZy1ub25udWxsCistCistIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzbmlwcGV0L2MrK2RlZnMKKy0KKy0jIFRoZSBCVUlMVF9TT1VSQ0VTIGNyZWF0ZWQgYnkgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGFyZSBub3QgdXNlZCB2aWEgI2luY2x1ZGUKKy0jIHN0YXRlbWVudHMgYnV0IHRocm91Z2ggZGlyZWN0IGZpbGUgcmVmZXJlbmNlLiBUaGVyZWZvcmUgdGhpcyBzbmlwcGV0IG11c3QgYmUKKy0jIHByZXNlbnQgaW4gYWxsIE1ha2VmaWxlLmFtIHRoYXQgbmVlZCBpdC4gVGhpcyBpcyBlbnN1cmVkIGJ5IHRoZSBhcHBsaWNhYmlsaXR5CistIyAnYWxsJyBkZWZpbmVkIGFib3ZlLgorLQorLUJVSUxUX1NPVVJDRVMgKz0gYysrZGVmcy5oCistIyBUaGUgYysrZGVmcy5oIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIGdlbmVyYXRlZCAuaCBmaWxlcyBpcyB0aGUgc2FtZSBhcworLSMgYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oLCBleGNlcHQgdGhhdCBpdCBoYXMgdGhlIGNvcHlyaWdodCBoZWFkZXIgY3V0IG9mZi4KKy1jKytkZWZzLmg6ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oCistCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCistCXNlZCAtbiAtZSAnL19HTF9DWFhERUZTLywkJHAnIFwKKy0JICA8ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oIFwKKy0JICA+ICRALXQgJiYgXAorLQltdiAkQC10ICRACistTU9TVExZQ0xFQU5GSUxFUyArPSBjKytkZWZzLmggYysrZGVmcy5oLXQKKy0KKy1DWFhERUZTX0g9YysrZGVmcy5oCistCistRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaAorLQorLSMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc25pcHBldC9jKytkZWZzCistCistIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzbmlwcGV0L3dhcm4tb24tdXNlCistCistQlVJTFRfU09VUkNFUyArPSB3YXJuLW9uLXVzZS5oCistIyBUaGUgd2Fybi1vbi11c2UuaCB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgLmggZmlsZXMgaXMgdGhlIHNhbWUgYXMKKy0jIGJ1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmgsIGV4Y2VwdCB0aGF0IGl0IGhhcyB0aGUgY29weXJpZ2h0IGhlYWRlciBjdXQKKy0jIG9mZi4KKy13YXJuLW9uLXVzZS5oOiAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmgKKy0JJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKy0Jc2VkIC1uIC1lICcvXi5pZm5kZWYvLCQkcCcgXAorLQkgIDwgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oIFwKKy0JICA+ICRALXQgJiYgXAorLQltdiAkQC10ICRACistTU9TVExZQ0xFQU5GSUxFUyArPSB3YXJuLW9uLXVzZS5oIHdhcm4tb24tdXNlLmgtdAorLQorLVdBUk5fT05fVVNFX0g9d2Fybi1vbi11c2UuaAorLQorLUVYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oCistCistIyMgZW5kICAgZ251bGliIG1vZHVsZSBzbmlwcGV0L3dhcm4tb24tdXNlCistCisgIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzdGF0CisgCisgCitAQCAtNDkxLDggKzQ1Myw3IEBAIGlmIEdMX0dFTkVSQVRFX1NURERFRl9ICisgc3RkZGVmLmg6IHN0ZGRlZi5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9TVERERUZfSCcnQHwkKE5FWFRfU1REREVGX0gpfGcnIFwKK0BAIC01MjEsOCArNDgyLDcgQEAgaWYgR0xfR0VORVJBVEVfU1RESU5UX0gKKyBzdGRpbnQuaDogc3RkaW50LmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAncy9AJydIQVZFX1NURElOVF9IJydALyQoSEFWRV9TVERJTlRfSCkvZycgXAorKwkgIHNlZCAtZSAncy9AJydIQVZFX1NURElOVF9IJydALyQoSEFWRV9TVERJTlRfSCkvZycgXAorIAkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorQEAgLTU3MCw2MyArNTMwLDYyIEBAIEJVSUxUX1NPVVJDRVMgKz0gc3RkaW8uaAorIHN0ZGlvLmg6IHN0ZGlvLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfU1RESU9fSCcnQHwkKE5FWFRfU1RESU9fSCl8ZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRFBSSU5URicnQC8kKEdOVUxJQl9EUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQ0xPU0UnJ0AvJChHTlVMSUJfRkNMT1NFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GRkxVU0gnJ0AvJChHTlVMSUJfRkZMVVNIKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GR0VUQycnQC8kKEdOVUxJQl9GR0VUQykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkdFVFMnJ0AvJChHTlVMSUJfRkdFVFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZPUEVOJydALyQoR05VTElCX0ZPUEVOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUFJJTlRGJydALyQoR05VTElCX0ZQUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZQUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfRlBSSU5URl9QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlBVUkdFJydALyQoR05VTElCX0ZQVVJHRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlBVVEMnJ0AvJChHTlVMSUJfRlBVVEMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZQVVRTJydALyQoR05VTElCX0ZQVVRTKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUkVBRCcnQC8kKEdOVUxJQl9GUkVBRCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlJFT1BFTicnQC8kKEdOVUxJQl9GUkVPUEVOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GU0NBTkYnJ0AvJChHTlVMSUJfRlNDQU5GKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GU0VFSycnQC8kKEdOVUxJQl9GU0VFSykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlNFRUtPJydALyQoR05VTElCX0ZTRUVLTykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlRFTEwnJ0AvJChHTlVMSUJfRlRFTEwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZURUxMTycnQC8kKEdOVUxJQl9GVEVMTE8pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZXUklURScnQC8kKEdOVUxJQl9GV1JJVEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVEMnJ0AvJChHTlVMSUJfR0VUQykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUQ0hBUicnQC8kKEdOVUxJQl9HRVRDSEFSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRERUxJTScnQC8kKEdOVUxJQl9HRVRERUxJTSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUTElORScnQC8kKEdOVUxJQl9HRVRMSU5FKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRTJydALyQoR05VTElCX0dFVFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX09CU1RBQ0tfUFJJTlRGJydALyQoR05VTElCX09CU1RBQ0tfUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUEVSUk9SJydALyQoR05VTElCX1BFUlJPUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUE9QRU4nJ0AvJChHTlVMSUJfUE9QRU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BSSU5URicnQC8kKEdOVUxJQl9QUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9QUklOVEZfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BVVEMnJ0AvJChHTlVMSUJfUFVUQykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFVUQ0hBUicnQC8kKEdOVUxJQl9QVVRDSEFSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QVVRTJydALyQoR05VTElCX1BVVFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFTU9WRScnQC8kKEdOVUxJQl9SRU1PVkUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFTkFNRScnQC8kKEdOVUxJQl9SRU5BTUUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFTkFNRUFUJydALyQoR05VTElCX1JFTkFNRUFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TQ0FORicnQC8kKEdOVUxJQl9TQ0FORikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU05QUklOVEYnJ0AvJChHTlVMSUJfU05QUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NQUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfU1BSSU5URl9QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RESU9fSF9OT05CTE9DS0lORycnQC8kKEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVERJT19IX1NJR1BJUEUnJ0AvJChHTlVMSUJfU1RESU9fSF9TSUdQSVBFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9UTVBGSUxFJydALyQoR05VTElCX1RNUEZJTEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZBU1BSSU5URicnQC8kKEdOVUxJQl9WQVNQUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZEUFJJTlRGJydALyQoR05VTElCX1ZEUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WRlBSSU5URicnQC8kKEdOVUxJQl9WRlBSSU5URikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVkZQUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfVkZQUklOVEZfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZGU0NBTkYnJ0AvJChHTlVMSUJfVkZTQ0FORikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVlNDQU5GJydALyQoR05VTElCX1ZTQ0FORikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVlBSSU5URicnQC8kKEdOVUxJQl9WUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WUFJJTlRGX1BPU0lYJydALyQoR05VTElCX1ZQUklOVEZfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZTTlBSSU5URicnQC8kKEdOVUxJQl9WU05QUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZTUFJJTlRGX1BPU0lYJydALyQoR05VTElCX1ZTUFJJTlRGX1BPU0lYKS9nJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9EUFJJTlRGJydAfCQoR05VTElCX0RQUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZDTE9TRScnQHwkKEdOVUxJQl9GQ0xPU0UpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZGTFVTSCcnQHwkKEdOVUxJQl9GRkxVU0gpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZHRVRDJydAfCQoR05VTElCX0ZHRVRDKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GR0VUUycnQHwkKEdOVUxJQl9GR0VUUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRk9QRU4nJ0B8JChHTlVMSUJfRk9QRU4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZQUklOVEYnJ0B8JChHTlVMSUJfRlBSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlBSSU5URl9QT1NJWCcnQHwkKEdOVUxJQl9GUFJJTlRGX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GUFVSR0UnJ0B8JChHTlVMSUJfRlBVUkdFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GUFVUQycnQHwkKEdOVUxJQl9GUFVUQyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlBVVFMnJ0B8JChHTlVMSUJfRlBVVFMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZSRUFEJydAfCQoR05VTElCX0ZSRUFEKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GUkVPUEVOJydAfCQoR05VTElCX0ZSRU9QRU4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZTQ0FORicnQHwkKEdOVUxJQl9GU0NBTkYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZTRUVLJydAfCQoR05VTElCX0ZTRUVLKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GU0VFS08nJ0B8JChHTlVMSUJfRlNFRUtPKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GVEVMTCcnQHwkKEdOVUxJQl9GVEVMTCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlRFTExPJydAfCQoR05VTElCX0ZURUxMTyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRldSSVRFJydAfCQoR05VTElCX0ZXUklURSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUQycnQHwkKEdOVUxJQl9HRVRDKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRDSEFSJydAfCQoR05VTElCX0dFVENIQVIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVERFTElNJydAfCQoR05VTElCX0dFVERFTElNKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRMSU5FJydAfCQoR05VTElCX0dFVExJTkUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVFMnJ0B8JChHTlVMSUJfR0VUUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfT0JTVEFDS19QUklOVEYnJ0B8JChHTlVMSUJfT0JTVEFDS19QUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYJydAfCQoR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QRVJST1InJ0B8JChHTlVMSUJfUEVSUk9SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QT1BFTicnQHwkKEdOVUxJQl9QT1BFTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFJJTlRGJydAfCQoR05VTElCX1BSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFJJTlRGX1BPU0lYJydAfCQoR05VTElCX1BSSU5URl9QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFVUQycnQHwkKEdOVUxJQl9QVVRDKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QVVRDSEFSJydAfCQoR05VTElCX1BVVENIQVIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BVVFMnJ0B8JChHTlVMSUJfUFVUUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVNT1ZFJydAfCQoR05VTElCX1JFTU9WRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVOQU1FJydAfCQoR05VTElCX1JFTkFNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVOQU1FQVQnJ0B8JChHTlVMSUJfUkVOQU1FQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NDQU5GJydAfCQoR05VTElCX1NDQU5GKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TTlBSSU5URicnQHwkKEdOVUxJQl9TTlBSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1BSSU5URl9QT1NJWCcnQHwkKEdOVUxJQl9TUFJJTlRGX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HJydAfCQoR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkcpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NURElPX0hfU0lHUElQRScnQHwkKEdOVUxJQl9TVERJT19IX1NJR1BJUEUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1RNUEZJTEUnJ0B8JChHTlVMSUJfVE1QRklMRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVkFTUFJJTlRGJydAfCQoR05VTElCX1ZBU1BSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVkRQUklOVEYnJ0B8JChHTlVMSUJfVkRQUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZGUFJJTlRGJydAfCQoR05VTElCX1ZGUFJJTlRGKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WRlBSSU5URl9QT1NJWCcnQHwkKEdOVUxJQl9WRlBSSU5URl9QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVkZTQ0FORicnQHwkKEdOVUxJQl9WRlNDQU5GKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WU0NBTkYnJ0B8JChHTlVMSUJfVlNDQU5GKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WUFJJTlRGJydAfCQoR05VTElCX1ZQUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZQUklOVEZfUE9TSVgnJ0B8JChHTlVMSUJfVlBSSU5URl9QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVlNOUFJJTlRGJydAfCQoR05VTElCX1ZTTlBSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVlNQUklOVEZfUE9TSVgnJ0B8JChHTlVMSUJfVlNQUklOVEZfUE9TSVgpfGcnIFwKKyAJICAgICAgPCAkKHNyY2Rpcikvc3RkaW8uaW4uaCB8IFwKKyAJICBzZWQgLWUgJ3N8QCcnSEFWRV9ERUNMX0ZQVVJHRScnQHwkKEhBVkVfREVDTF9GUFVSR0UpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0ZTRUVLTycnQHwkKEhBVkVfREVDTF9GU0VFS08pfGcnIFwKK0BAIC02OTEsNDMgKzY1MCw0MSBAQCBCVUlMVF9TT1VSQ0VTICs9IHN0ZGxpYi5oCisgCisgIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDxzdGRsaWIuaD4gd2hlbiB0aGUgc3lzdGVtCisgIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCistc3RkbGliLmg6IHN0ZGxpYi5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSBcCistICAkKF9OT1JFVFVSTl9IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKytzdGRsaWIuaDogc3RkbGliLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfU1RETElCX0gnJ0B8JChORVhUX1NURExJQl9IKXxnJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9fRVhJVCcnQC8kKEdOVUxJQl9fRVhJVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfQVRPTEwnJ0AvJChHTlVMSUJfQVRPTEwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0NBTExPQ19QT1NJWCcnQC8kKEdOVUxJQl9DQUxMT0NfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0NBTk9OSUNBTElaRV9GSUxFX05BTUUnJ0AvJChHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUTE9BREFWRycnQC8kKEdOVUxJQl9HRVRMT0FEQVZHKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRTVUJPUFQnJ0AvJChHTlVMSUJfR0VUU1VCT1BUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HUkFOVFBUJydALyQoR05VTElCX0dSQU5UUFQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01BTExPQ19QT1NJWCcnQC8kKEdOVUxJQl9NQUxMT0NfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CVE9XQycnQC8kKEdOVUxJQl9NQlRPV0MpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LRFRFTVAnJ0AvJChHTlVMSUJfTUtEVEVNUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtPU1RFTVAnJ0AvJChHTlVMSUJfTUtPU1RFTVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LT1NURU1QUycnQC8kKEdOVUxJQl9NS09TVEVNUFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LU1RFTVAnJ0AvJChHTlVMSUJfTUtTVEVNUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtTVEVNUFMnJ0AvJChHTlVMSUJfTUtTVEVNUFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BUU05BTUUnJ0AvJChHTlVMSUJfUFRTTkFNRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFVURU5WJydALyQoR05VTElCX1BVVEVOVikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkFORE9NX1InJ0AvJChHTlVMSUJfUkFORE9NX1IpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFQUxMT0NfUE9TSVgnJ0AvJChHTlVMSUJfUkVBTExPQ19QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkVBTFBBVEgnJ0AvJChHTlVMSUJfUkVBTFBBVEgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JQTUFUQ0gnJ0AvJChHTlVMSUJfUlBNQVRDSCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU0VURU5WJydALyQoR05VTElCX1NFVEVOVikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSVE9EJydALyQoR05VTElCX1NUUlRPRCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSVE9MTCcnQC8kKEdOVUxJQl9TVFJUT0xMKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJUT1VMTCcnQC8kKEdOVUxJQl9TVFJUT1VMTCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1lTVEVNX1BPU0lYJydALyQoR05VTElCX1NZU1RFTV9QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVU5MT0NLUFQnJ0AvJChHTlVMSUJfVU5MT0NLUFQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VOU0VURU5WJydALyQoR05VTElCX1VOU0VURU5WKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1RPTUInJ0AvJChHTlVMSUJfV0NUT01CKS9nJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9fRVhJVCcnQHwkKEdOVUxJQl9fRVhJVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfQVRPTEwnJ0B8JChHTlVMSUJfQVRPTEwpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0NBTExPQ19QT1NJWCcnQHwkKEdOVUxJQl9DQUxMT0NfUE9TSVgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0NBTk9OSUNBTElaRV9GSUxFX05BTUUnJ0B8JChHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUTE9BREFWRycnQHwkKEdOVUxJQl9HRVRMT0FEQVZHKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRTVUJPUFQnJ0B8JChHTlVMSUJfR0VUU1VCT1BUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HUkFOVFBUJydAfCQoR05VTElCX0dSQU5UUFQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01BTExPQ19QT1NJWCcnQHwkKEdOVUxJQl9NQUxMT0NfUE9TSVgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CVE9XQycnQHwkKEdOVUxJQl9NQlRPV0MpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LRFRFTVAnJ0B8JChHTlVMSUJfTUtEVEVNUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtPU1RFTVAnJ0B8JChHTlVMSUJfTUtPU1RFTVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LT1NURU1QUycnQHwkKEdOVUxJQl9NS09TVEVNUFMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LU1RFTVAnJ0B8JChHTlVMSUJfTUtTVEVNUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtTVEVNUFMnJ0B8JChHTlVMSUJfTUtTVEVNUFMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BUU05BTUUnJ0B8JChHTlVMSUJfUFRTTkFNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFVURU5WJydAfCQoR05VTElCX1BVVEVOVil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkFORE9NX1InJ0B8JChHTlVMSUJfUkFORE9NX1IpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFQUxMT0NfUE9TSVgnJ0B8JChHTlVMSUJfUkVBTExPQ19QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVBTFBBVEgnJ0B8JChHTlVMSUJfUkVBTFBBVEgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JQTUFUQ0gnJ0B8JChHTlVMSUJfUlBNQVRDSCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU0VURU5WJydAfCQoR05VTElCX1NFVEVOVil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSVE9EJydAfCQoR05VTElCX1NUUlRPRCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSVE9MTCcnQHwkKEdOVUxJQl9TVFJUT0xMKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJUT1VMTCcnQHwkKEdOVUxJQl9TVFJUT1VMTCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1lTVEVNX1BPU0lYJydAfCQoR05VTElCX1NZU1RFTV9QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVU5MT0NLUFQnJ0B8JChHTlVMSUJfVU5MT0NLUFQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1VOU0VURU5WJydAfCQoR05VTElCX1VOU0VURU5WKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9XQ1RPTUInJ0B8JChHTlVMSUJfV0NUT01CKXxnJyBcCisgCSAgICAgIDwgJChzcmNkaXIpL3N0ZGxpYi5pbi5oIHwgXAorIAkgIHNlZCAtZSAnc3xAJydIQVZFX19FWElUJydAfCQoSEFWRV9fRVhJVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0FUT0xMJydAfCQoSEFWRV9BVE9MTCl8ZycgXAorQEAgLTc2Niw3ICs3MjMsNiBAQCBzdGRsaWIuaDogc3RkbGliLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvCisgCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfVU5TRVRFTlYnJ0B8JChSRVBMQUNFX1VOU0VURU5WKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfV0NUT01CJydAfCQoUkVQTEFDRV9XQ1RPTUIpfGcnIFwKKyAJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCistCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfTm9yZXR1cm4vciAkKF9OT1JFVFVSTl9IKScgXAorIAkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxML3IgJChBUkdfTk9OTlVMTF9IKScgXAorIAkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFL3IgJChXQVJOX09OX1VTRV9IKSc7IFwKKyAJfSA+ICRALXQgJiYgXAorQEAgLTc5MywxNSArNzQ5LDYgQEAgRVhUUkFfbGliaWNydF9hX1NPVVJDRVMgKz0gc3RyZXJyb3IuYworIAorICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RyZXJyb3IKKyAKKy0jIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0cmVycm9yLW92ZXJyaWRlCistCistCistRVhUUkFfRElTVCArPSBzdHJlcnJvci1vdmVycmlkZS5jIHN0cmVycm9yLW92ZXJyaWRlLmgKKy0KKy1FWFRSQV9saWJpY3J0X2FfU09VUkNFUyArPSBzdHJlcnJvci1vdmVycmlkZS5jCistCistIyMgZW5kICAgZ251bGliIG1vZHVsZSBzdHJlcnJvci1vdmVycmlkZQorLQorICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3RyaW5nCisgCisgQlVJTFRfU09VUkNFUyArPSBzdHJpbmcuaAorQEAgLTgxMSw1MiArNzU4LDQ3IEBAIEJVSUxUX1NPVVJDRVMgKz0gc3RyaW5nLmgKKyBzdHJpbmcuaDogc3RyaW5nLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfU1RSSU5HX0gnJ0B8JChORVhUX1NUUklOR19IKXxnJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GRlNMJydALyQoR05VTElCX0ZGU0wpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZGU0xMJydALyQoR05VTElCX0ZGU0xMKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNMRU4nJ0AvJChHTlVMSUJfTUJTTEVOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNOTEVOJydALyQoR05VTElCX01CU05MRU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU0NIUicnQC8kKEdOVUxJQl9NQlNDSFIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1JDSFInJ0AvJChHTlVMSUJfTUJTUkNIUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTU1RSJydALyQoR05VTElCX01CU1NUUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTQ0FTRUNNUCcnQC8kKEdOVUxJQl9NQlNDQVNFQ01QKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNOQ0FTRUNNUCcnQC8kKEdOVUxJQl9NQlNOQ0FTRUNNUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTUENBU0VDTVAnJ0AvJChHTlVMSUJfTUJTUENBU0VDTVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU0NBU0VTVFInJ0AvJChHTlVMSUJfTUJTQ0FTRVNUUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTQ1NQTicnQC8kKEdOVUxJQl9NQlNDU1BOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNQQlJLJydALyQoR05VTElCX01CU1BCUkspL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1NQTicnQC8kKEdOVUxJQl9NQlNTUE4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1NFUCcnQC8kKEdOVUxJQl9NQlNTRVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1RPS19SJydALyQoR05VTElCX01CU1RPS19SKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NRU1DSFInJ0AvJChHTlVMSUJfTUVNQ0hSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NRU1NRU0nJ0AvJChHTlVMSUJfTUVNTUVNKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NRU1QQ1BZJydALyQoR05VTElCX01FTVBDUFkpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01FTVJDSFInJ0AvJChHTlVMSUJfTUVNUkNIUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkFXTUVNQ0hSJydALyQoR05VTElCX1JBV01FTUNIUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RQQ1BZJydALyQoR05VTElCX1NUUENQWSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RQTkNQWScnQC8kKEdOVUxJQl9TVFBOQ1BZKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJDSFJOVUwnJ0AvJChHTlVMSUJfU1RSQ0hSTlVMKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJEVVAnJ0AvJChHTlVMSUJfU1RSRFVQKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJOQ0FUJydALyQoR05VTElCX1NUUk5DQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUk5EVVAnJ0AvJChHTlVMSUJfU1RSTkRVUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSTkxFTicnQC8kKEdOVUxJQl9TVFJOTEVOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJQQlJLJydALyQoR05VTElCX1NUUlBCUkspL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlNFUCcnQC8kKEdOVUxJQl9TVFJTRVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlNUUicnQC8kKEdOVUxJQl9TVFJTVFIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkNBU0VTVFInJ0AvJChHTlVMSUJfU1RSQ0FTRVNUUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSVE9LX1InJ0AvJChHTlVMSUJfU1RSVE9LX1IpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkVSUk9SJydALyQoR05VTElCX1NUUkVSUk9SKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJFUlJPUl9SJydALyQoR05VTElCX1NUUkVSUk9SX1IpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlNJR05BTCcnQC8kKEdOVUxJQl9TVFJTSUdOQUwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlZFUlNDTVAnJ0AvJChHTlVMSUJfU1RSVkVSU0NNUCkvZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTTEVOJydAfCQoR05VTElCX01CU0xFTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTTkxFTicnQHwkKEdOVUxJQl9NQlNOTEVOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNDSFInJ0B8JChHTlVMSUJfTUJTQ0hSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNSQ0hSJydAfCQoR05VTElCX01CU1JDSFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1NUUicnQHwkKEdOVUxJQl9NQlNTVFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU0NBU0VDTVAnJ0B8JChHTlVMSUJfTUJTQ0FTRUNNUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTTkNBU0VDTVAnJ0B8JChHTlVMSUJfTUJTTkNBU0VDTVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1BDQVNFQ01QJydAfCQoR05VTElCX01CU1BDQVNFQ01QKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNDQVNFU1RSJydAfCQoR05VTElCX01CU0NBU0VTVFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU0NTUE4nJ0B8JChHTlVMSUJfTUJTQ1NQTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTUEJSSycnQHwkKEdOVUxJQl9NQlNQQlJLKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNTUE4nJ0B8JChHTlVMSUJfTUJTU1BOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNTRVAnJ0B8JChHTlVMSUJfTUJTU0VQKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNUT0tfUicnQHwkKEdOVUxJQl9NQlNUT0tfUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUVNQ0hSJydAfCQoR05VTElCX01FTUNIUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUVNTUVNJydAfCQoR05VTElCX01FTU1FTSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUVNUENQWScnQHwkKEdOVUxJQl9NRU1QQ1BZKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NRU1SQ0hSJydAfCQoR05VTElCX01FTVJDSFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JBV01FTUNIUicnQHwkKEdOVUxJQl9SQVdNRU1DSFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUENQWScnQHwkKEdOVUxJQl9TVFBDUFkpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUE5DUFknJ0B8JChHTlVMSUJfU1RQTkNQWSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSQ0hSTlVMJydAfCQoR05VTElCX1NUUkNIUk5VTCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSRFVQJydAfCQoR05VTElCX1NUUkRVUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSTkNBVCcnQHwkKEdOVUxJQl9TVFJOQ0FUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJORFVQJydAfCQoR05VTElCX1NUUk5EVVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUk5MRU4nJ0B8JChHTlVMSUJfU1RSTkxFTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSUEJSSycnQHwkKEdOVUxJQl9TVFJQQlJLKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJTRVAnJ0B8JChHTlVMSUJfU1RSU0VQKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJTVFInJ0B8JChHTlVMSUJfU1RSU1RSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJDQVNFU1RSJydAfCQoR05VTElCX1NUUkNBU0VTVFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlRPS19SJydAfCQoR05VTElCX1NUUlRPS19SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJFUlJPUicnQHwkKEdOVUxJQl9TVFJFUlJPUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSRVJST1JfUicnQHwkKEdOVUxJQl9TVFJFUlJPUl9SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJTSUdOQUwnJ0B8JChHTlVMSUJfU1RSU0lHTkFMKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJWRVJTQ01QJydAfCQoR05VTElCX1NUUlZFUlNDTVApfGcnIFwKKyAJICAgICAgPCAkKHNyY2Rpcikvc3RyaW5nLmluLmggfCBcCistCSAgc2VkIC1lICdzfEAnJ0hBVkVfRkZTTCcnQHwkKEhBVkVfRkZTTCl8ZycgXAorLQkgICAgICAtZSAnc3xAJydIQVZFX0ZGU0xMJydAfCQoSEFWRV9GRlNMTCl8ZycgXAorLQkgICAgICAtZSAnc3xAJydIQVZFX01CU0xFTicnQHwkKEhBVkVfTUJTTEVOKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0hBVkVfTUJTTEVOJydAfCQoSEFWRV9NQlNMRU4pfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9NRU1DSFInJ0B8JChIQVZFX01FTUNIUil8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTUVNTUVNJydAfCQoSEFWRV9ERUNMX01FTU1FTSl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX01FTVBDUFknJ0B8JChIQVZFX01FTVBDUFkpfGcnIFwKK0BAIC05MTIsMjMgKzg1NCwyMiBAQCBzeXMvc3RhdC5oOiBzeXNfc3RhdC5pbi5oICQodG9wX2J1aWxkZGlyCisgCSQoQU1fVl9hdCkkKE1LRElSX1ApIHN5cworIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCistCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCistCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorIAkgICAgICAtZSAnc3xAJydORVhUX1NZU19TVEFUX0gnJ0B8JChORVhUX1NZU19TVEFUX0gpfGcnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZDSE1PREFUJydALyQoR05VTElCX0ZDSE1PREFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GU1RBVEFUJydALyQoR05VTElCX0ZTVEFUQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZVVElNRU5TJydALyQoR05VTElCX0ZVVElNRU5TKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MQ0hNT0QnJ0AvJChHTlVMSUJfTENITU9EKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MU1RBVCcnQC8kKEdOVUxJQl9MU1RBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtESVJBVCcnQC8kKEdOVUxJQl9NS0RJUkFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS0ZJRk8nJ0AvJChHTlVMSUJfTUtGSUZPKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS0ZJRk9BVCcnQC8kKEdOVUxJQl9NS0ZJRk9BVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtOT0QnJ0AvJChHTlVMSUJfTUtOT0QpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LTk9EQVQnJ0AvJChHTlVMSUJfTUtOT0RBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RBVCcnQC8kKEdOVUxJQl9TVEFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VVElNRU5TQVQnJ0AvJChHTlVMSUJfVVRJTUVOU0FUKS9nJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GQ0hNT0RBVCcnQHwkKEdOVUxJQl9GQ0hNT0RBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlNUQVRBVCcnQHwkKEdOVUxJQl9GU1RBVEFUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GVVRJTUVOUycnQHwkKEdOVUxJQl9GVVRJTUVOUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTENITU9EJydAfCQoR05VTElCX0xDSE1PRCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTFNUQVQnJ0B8JChHTlVMSUJfTFNUQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LRElSQVQnJ0B8JChHTlVMSUJfTUtESVJBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtGSUZPJydAfCQoR05VTElCX01LRklGTyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtGSUZPQVQnJ0B8JChHTlVMSUJfTUtGSUZPQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LTk9EJydAfCQoR05VTElCX01LTk9EKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS05PREFUJydAfCQoR05VTElCX01LTk9EQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUQVQnJ0B8JChHTlVMSUJfU1RBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVVRJTUVOU0FUJydAfCQoR05VTElCX1VUSU1FTlNBVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0ZDSE1PREFUJydAfCQoSEFWRV9GQ0hNT0RBVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0ZTVEFUQVQnJ0B8JChIQVZFX0ZTVEFUQVQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9GVVRJTUVOUycnQHwkKEhBVkVfRlVUSU1FTlMpfGcnIFwKK0BAIC05NzEsMTYgKzkxMiwxNSBAQCBCVUlMVF9TT1VSQ0VTICs9IHRpbWUuaAorIHRpbWUuaDogdGltZS5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCistCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCistCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorIAkgICAgICAtZSAnc3xAJydORVhUX1RJTUVfSCcnQHwkKE5FWFRfVElNRV9IKXxnJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS1RJTUUnJ0AvJChHTlVMSUJfTUtUSU1FKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9OQU5PU0xFRVAnJ0AvJChHTlVMSUJfTkFOT1NMRUVQKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJQVElNRScnQC8kKEdOVUxJQl9TVFJQVElNRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVElNRUdNJydALyQoR05VTElCX1RJTUVHTSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVElNRV9SJydALyQoR05VTElCX1RJTUVfUikvZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtUSU1FJydAfCQoR05VTElCX01LVElNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTkFOT1NMRUVQJydAfCQoR05VTElCX05BTk9TTEVFUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSUFRJTUUnJ0B8JChHTlVMSUJfU1RSUFRJTUUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1RJTUVHTScnQHwkKEdOVUxJQl9USU1FR00pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1RJTUVfUicnQHwkKEdOVUxJQl9USU1FX1IpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0xPQ0FMVElNRV9SJydAfCQoSEFWRV9ERUNMX0xPQ0FMVElNRV9SKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfTkFOT1NMRUVQJydAfCQoSEFWRV9OQU5PU0xFRVApfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJQVElNRScnQHwkKEhBVkVfU1RSUFRJTUUpfGcnIFwKK0BAIC0xMDEzLDU2ICs5NTMsNTUgQEAgQlVJTFRfU09VUkNFUyArPSB1bmlzdGQuaAorIHVuaXN0ZC5oOiB1bmlzdGQuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSEFWRV9VTklTVERfSCcnQHwkKEhBVkVfVU5JU1REX0gpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSEFWRV9VTklTVERfSCcnQHwkKEhBVkVfVU5JU1REX0gpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9VTklTVERfSCcnQHwkKE5FWFRfVU5JU1REX0gpfGcnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0NIT1dOJydALyQoR05VTElCX0NIT1dOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9DTE9TRScnQC8kKEdOVUxJQl9DTE9TRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRFVQMicnQC8kKEdOVUxJQl9EVVAyKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9EVVAzJydALyQoR05VTElCX0RVUDMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0VOVklST04nJ0AvJChHTlVMSUJfRU5WSVJPTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRVVJREFDQ0VTUycnQC8kKEdOVUxJQl9FVUlEQUNDRVNTKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQUNDRVNTQVQnJ0AvJChHTlVMSUJfRkFDQ0VTU0FUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQ0hESVInJ0AvJChHTlVMSUJfRkNIRElSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQ0hPV05BVCcnQC8kKEdOVUxJQl9GQ0hPV05BVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlNZTkMnJ0AvJChHTlVMSUJfRlNZTkMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZUUlVOQ0FURScnQC8kKEdOVUxJQl9GVFJVTkNBVEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVENXRCcnQC8kKEdOVUxJQl9HRVRDV0QpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVERPTUFJTk5BTUUnJ0AvJChHTlVMSUJfR0VURE9NQUlOTkFNRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VURFRBQkxFU0laRScnQC8kKEdOVUxJQl9HRVREVEFCTEVTSVpFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRHUk9VUFMnJ0AvJChHTlVMSUJfR0VUR1JPVVBTKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRIT1NUTkFNRScnQC8kKEdOVUxJQl9HRVRIT1NUTkFNRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUTE9HSU4nJ0AvJChHTlVMSUJfR0VUTE9HSU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVExPR0lOX1InJ0AvJChHTlVMSUJfR0VUTE9HSU5fUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUUEFHRVNJWkUnJ0AvJChHTlVMSUJfR0VUUEFHRVNJWkUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVFVTRVJTSEVMTCcnQC8kKEdOVUxJQl9HRVRVU0VSU0hFTEwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dST1VQX01FTUJFUicnQC8kKEdOVUxJQl9HUk9VUF9NRU1CRVIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0xDSE9XTicnQC8kKEdOVUxJQl9MQ0hPV04pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0xJTksnJ0AvJChHTlVMSUJfTElOSykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTElOS0FUJydALyQoR05VTElCX0xJTktBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTFNFRUsnJ0AvJChHTlVMSUJfTFNFRUspL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BJUEUnJ0AvJChHTlVMSUJfUElQRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUElQRTInJ0AvJChHTlVMSUJfUElQRTIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BSRUFEJydALyQoR05VTElCX1BSRUFEKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QV1JJVEUnJ0AvJChHTlVMSUJfUFdSSVRFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRUFEJydALyQoR05VTElCX1JFQUQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFQURMSU5LJydALyQoR05VTElCX1JFQURMSU5LKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRUFETElOS0FUJydALyQoR05VTElCX1JFQURMSU5LQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JNRElSJydALyQoR05VTElCX1JNRElSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TTEVFUCcnQC8kKEdOVUxJQl9TTEVFUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1lNTElOSycnQC8kKEdOVUxJQl9TWU1MSU5LKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TWU1MSU5LQVQnJ0AvJChHTlVMSUJfU1lNTElOS0FUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9UVFlOQU1FX1InJ0AvJChHTlVMSUJfVFRZTkFNRV9SKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VTklTVERfSF9HRVRPUFQnJ0AvJChHTlVMSUJfVU5JU1REX0hfR0VUT1BUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VTklTVERfSF9OT05CTE9DS0lORycnQC8kKEdOVUxJQl9VTklTVERfSF9OT05CTE9DS0lORykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVU5JU1REX0hfU0lHUElQRScnQC8kKEdOVUxJQl9VTklTVERfSF9TSUdQSVBFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VTkxJTksnJ0AvJChHTlVMSUJfVU5MSU5LKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VTkxJTktBVCcnQC8kKEdOVUxJQl9VTkxJTktBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVVNMRUVQJydALyQoR05VTElCX1VTTEVFUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfV1JJVEUnJ0AvJChHTlVMSUJfV1JJVEUpL2cnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0NIT1dOJydAfCQoR05VTElCX0NIT1dOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9DTE9TRScnQHwkKEdOVUxJQl9DTE9TRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRFVQMicnQHwkKEdOVUxJQl9EVVAyKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9EVVAzJydAfCQoR05VTElCX0RVUDMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0VOVklST04nJ0B8JChHTlVMSUJfRU5WSVJPTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRVVJREFDQ0VTUycnQHwkKEdOVUxJQl9FVUlEQUNDRVNTKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GQUNDRVNTQVQnJ0B8JChHTlVMSUJfRkFDQ0VTU0FUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GQ0hESVInJ0B8JChHTlVMSUJfRkNIRElSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GQ0hPV05BVCcnQHwkKEdOVUxJQl9GQ0hPV05BVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlNZTkMnJ0B8JChHTlVMSUJfRlNZTkMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZUUlVOQ0FURScnQHwkKEdOVUxJQl9GVFJVTkNBVEUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVENXRCcnQHwkKEdOVUxJQl9HRVRDV0QpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVERPTUFJTk5BTUUnJ0B8JChHTlVMSUJfR0VURE9NQUlOTkFNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VURFRBQkxFU0laRScnQHwkKEdOVUxJQl9HRVREVEFCTEVTSVpFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRHUk9VUFMnJ0B8JChHTlVMSUJfR0VUR1JPVVBTKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRIT1NUTkFNRScnQHwkKEdOVUxJQl9HRVRIT1NUTkFNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUTE9HSU4nJ0B8JChHTlVMSUJfR0VUTE9HSU4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVExPR0lOX1InJ0B8JChHTlVMSUJfR0VUTE9HSU5fUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUUEFHRVNJWkUnJ0B8JChHTlVMSUJfR0VUUEFHRVNJWkUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVFVTRVJTSEVMTCcnQHwkKEdOVUxJQl9HRVRVU0VSU0hFTEwpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dST1VQX01FTUJFUicnQHwkKEdOVUxJQl9HUk9VUF9NRU1CRVIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0xDSE9XTicnQHwkKEdOVUxJQl9MQ0hPV04pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0xJTksnJ0B8JChHTlVMSUJfTElOSyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTElOS0FUJydAfCQoR05VTElCX0xJTktBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTFNFRUsnJ0B8JChHTlVMSUJfTFNFRUspfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BJUEUnJ0B8JChHTlVMSUJfUElQRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUElQRTInJ0B8JChHTlVMSUJfUElQRTIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BSRUFEJydAfCQoR05VTElCX1BSRUFEKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QV1JJVEUnJ0B8JChHTlVMSUJfUFdSSVRFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRUFEJydAfCQoR05VTElCX1JFQUQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFQURMSU5LJydAfCQoR05VTElCX1JFQURMSU5LKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRUFETElOS0FUJydAfCQoR05VTElCX1JFQURMSU5LQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JNRElSJydAfCQoR05VTElCX1JNRElSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TTEVFUCcnQHwkKEdOVUxJQl9TTEVFUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1lNTElOSycnQHwkKEdOVUxJQl9TWU1MSU5LKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TWU1MSU5LQVQnJ0B8JChHTlVMSUJfU1lNTElOS0FUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9UVFlOQU1FX1InJ0B8JChHTlVMSUJfVFRZTkFNRV9SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VTklTVERfSF9HRVRPUFQnJ0B8JChHTlVMSUJfVU5JU1REX0hfR0VUT1BUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VTklTVERfSF9OT05CTE9DS0lORycnQHwkKEdOVUxJQl9VTklTVERfSF9OT05CTE9DS0lORyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVU5JU1REX0hfU0lHUElQRScnQHwkKEdOVUxJQl9VTklTVERfSF9TSUdQSVBFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VTkxJTksnJ0B8JChHTlVMSUJfVU5MSU5LKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VTkxJTktBVCcnQHwkKEdOVUxJQl9VTkxJTktBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVVNMRUVQJydAfCQoR05VTElCX1VTTEVFUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfV1JJVEUnJ0B8JChHTlVMSUJfV1JJVEUpfGcnIFwKKyAJICAgICAgPCAkKHNyY2RpcikvdW5pc3RkLmluLmggfCBcCisgCSAgc2VkIC1lICdzfEAnJ0hBVkVfQ0hPV04nJ0B8JChIQVZFX0NIT1dOKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfRFVQMicnQHwkKEhBVkVfRFVQMil8ZycgXAorQEAgLTExOTgsNiArMTEzNywyNSBAQCBFWFRSQV9ESVNUICs9IHZlcmlmeS5oCisgCisgIyMgZW5kICAgZ251bGliIG1vZHVsZSB2ZXJpZnkKKyAKKysjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHdhcm4tb24tdXNlCisrCisrQlVJTFRfU09VUkNFUyArPSB3YXJuLW9uLXVzZS5oCisrIyBUaGUgd2Fybi1vbi11c2UuaCB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgLmggZmlsZXMgaXMgdGhlIHNhbWUgYXMKKysjIGJ1aWxkLWF1eC93YXJuLW9uLXVzZS5oLCBleGNlcHQgdGhhdCBpdCBoYXMgdGhlIGNvcHlyaWdodCBoZWFkZXIgY3V0IG9mZi4KKyt3YXJuLW9uLXVzZS5oOiAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC93YXJuLW9uLXVzZS5oCisrCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisrCXNlZCAtbiAtZSAnL14uaWZuZGVmLywkJHAnIFwKKysJICA8ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3dhcm4tb24tdXNlLmggXAorKwkgID4gJEAtdCAmJiBcCisrCW12ICRALXQgJEAKKytNT1NUTFlDTEVBTkZJTEVTICs9IHdhcm4tb24tdXNlLmggd2Fybi1vbi11c2UuaC10CisrCisrV0FSTl9PTl9VU0VfSD13YXJuLW9uLXVzZS5oCisrCisrRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC93YXJuLW9uLXVzZS5oCisrCisrIyMgZW5kICAgZ251bGliIG1vZHVsZSB3YXJuLW9uLXVzZQorKworICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgeGFsbG9jCisgCisgbGliaWNydF9hX1NPVVJDRVMgKz0geGFsbG9jLmggeG1hbGxvYy5jIHhzdHJkdXAuYworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9wYXRobWF4LmggbGliaWNvbnYtMS4xNC9zcmNsaWIvcGF0aG1heC5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9wYXRobWF4LmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9wYXRobWF4LmgJMjAxMi0wMS0wOCAwMjowNzo0MC4yMTg0ODQ0NTEgLTA4MDAKK0BAIC0xOSwyNyArMTksNiBAQAorICNpZm5kZWYgX1BBVEhNQVhfSAorICMgZGVmaW5lIF9QQVRITUFYX0gKKyAKKy0vKiBQT1NJWDoyMDA4IGRlZmluZXMgUEFUSF9NQVggdG8gYmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIGEgZmlsZW5hbWUsCistICAgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUwgYnl0ZS4KKy0gICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvYmFzZWRlZnMvbGltaXRzLmguaHRtbD4KKy0gICBQQVRIX01BWCBpcyBub3QgZGVmaW5lZCBvbiBzeXN0ZW1zIHdoaWNoIGhhdmUgbm8gbGltaXQgb24gZmlsZW5hbWUgbGVuZ3RoLAorLSAgIHN1Y2ggYXMgR05VL0h1cmQuCistCistICAgVGhpcyBmaWxlIGRvZXMgKm5vdCogZGVmaW5lIFBBVEhfTUFYIGFsd2F5cy4gIFByb2dyYW1zIHRoYXQgdXNlIHRoaXMgZmlsZQorLSAgIGNhbiBoYW5kbGUgdGhlIEdOVS9IdXJkIGNhc2UgaW4gc2V2ZXJhbCB3YXlzOgorLSAgICAgLSBFaXRoZXIgd2l0aCBhIHBhY2thZ2Utd2lkZSBoYW5kbGluZywgb3Igd2l0aCBhIHBlci1maWxlIGhhbmRsaW5nLAorLSAgICAgLSBFaXRoZXIgdGhyb3VnaCBhCistICAgICAgICAgI2lmZGVmIFBBVEhfTUFYCistICAgICAgIG9yIHRocm91Z2ggYSBmYWxsYmFjayBsaWtlCistICAgICAgICAgI2lmbmRlZiBQQVRIX01BWAorLSAgICAgICAgICMgZGVmaW5lIFBBVEhfTUFYIDgxOTIKKy0gICAgICAgICAjZW5kaWYKKy0gICAgICAgb3IgdGhyb3VnaCBhIGZhbGxiYWNrIGxpa2UKKy0gICAgICAgICAjaWZuZGVmIFBBVEhfTUFYCistICAgICAgICAgIyBkZWZpbmUgUEFUSF9NQVggcGF0aGNvbmYgKCIvIiwgX1BDX1BBVEhfTUFYKQorLSAgICAgICAgICNlbmRpZgorLSAqLworLQorICMgaW5jbHVkZSA8dW5pc3RkLmg+CisgCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KK0BAIC00OCw2ICsyNywxMSBAQAorICMgIGRlZmluZSBfUE9TSVhfUEFUSF9NQVggMjU2CisgIyBlbmRpZgorIAorKyMgaWYgIWRlZmluZWQgUEFUSF9NQVggJiYgZGVmaW5lZCBfUENfUEFUSF9NQVggJiYgZGVmaW5lZCBIQVZFX1BBVEhDT05GCisrIyAgZGVmaW5lIFBBVEhfTUFYIChwYXRoY29uZiAoIi8iLCBfUENfUEFUSF9NQVgpIDwgMSA/IDEwMjQgXAorKyAgICAgICAgICAgICAgICAgICAgOiBwYXRoY29uZiAoIi8iLCBfUENfUEFUSF9NQVgpKQorKyMgZW5kaWYKKysKKyAvKiBEb24ndCBpbmNsdWRlIHN5cy9wYXJhbS5oIGlmIGl0IGFscmVhZHkgaGFzIGJlZW4uICAqLworICMgaWYgZGVmaW5lZCBIQVZFX1NZU19QQVJBTV9IICYmICFkZWZpbmVkIFBBVEhfTUFYICYmICFkZWZpbmVkIE1BWFBBVEhMRU4KKyAjICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KK0BAIC01NywxMyArNDEsOCBAQAorICMgIGRlZmluZSBQQVRIX01BWCBNQVhQQVRITEVOCisgIyBlbmRpZgorIAorLSMgaWZkZWYgX19ocHV4CistLyogT24gSFAtVVgsIFBBVEhfTUFYIGRlc2lnbmF0ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIGEgZmlsZW5hbWUsCistICAgKm5vdCogaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUwgYnl0ZSwgYW5kIGlzIHNldCB0byAxMDIzLgorLSAgIEFkZGl0aW9uYWxseSwgd2hlbiBfWE9QRU5fU09VUkNFIGlzIGRlZmluZWQgdG8gNTAwIG9yIG1vcmUsIFBBVEhfTUFYIGlzCistICAgbm90IGRlZmluZWQgYXQgYWxsIGFueSBtb3JlLiAgKi8KKy0jICB1bmRlZiBQQVRIX01BWAorLSMgIGRlZmluZSBQQVRIX01BWCAxMDI0CisrIyBpZm5kZWYgUEFUSF9NQVgKKysjICBkZWZpbmUgUEFUSF9NQVggX1BPU0lYX1BBVEhfTUFYCisgIyBlbmRpZgorIAorICNlbmRpZiAvKiBfUEFUSE1BWF9IICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3JlbG9jd3JhcHBlci5jIGxpYmljb252LTEuMTQvc3JjbGliL3JlbG9jd3JhcHBlci5jCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9yZWxvY3dyYXBwZXIuYwkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3JlbG9jd3JhcHBlci5jCTIwMTItMDEtMDggMDI6MDc6NDAuMjgyNDg0NDU1IC0wODAwCitAQCAtMjksNiArMjksNyBAQAorICAgICAtPiByZWxvY2F0YWJsZQorICAgICAtPiBzZXRlbnYKKyAgICAgICAgLT4gbWFsbG9jYQorKyAgICAtPiBzdHJlcnJvcgorICAgICAtPiBjLWN0eXBlCisgCisgICAgTWFjcm9zIHRoYXQgbmVlZCB0byBiZSBzZXQgd2hpbGUgY29tcGlsaW5nIHRoaXMgZmlsZToKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc2FmZS1yZWFkLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc2FmZS1yZWFkLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3NhZmUtcmVhZC5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc2FmZS1yZWFkLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4yOTg0ODQ0NTUgLTA4MDAKK0BAIC0xNCwxOSArMTQsNiBAQAorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorLS8qIFNvbWUgc3lzdGVtIGNhbGxzIG1heSBiZSBpbnRlcnJ1cHRlZCBhbmQgZmFpbCB3aXRoIGVycm5vID0gRUlOVFIgaW4gdGhlCistICAgZm9sbG93aW5nIHNpdHVhdGlvbnM6CistICAgICAtIFRoZSBwcm9jZXNzIGlzIHN0b3BwZWQgYW5kIHJlc3RhcnRlZCAoc2lnbmFsIFNJR1NUT1AgYW5kIFNJR0NPTlQsIHVzZXIKKy0gICAgICAgdHlwZXMgQ3RybC1aKSBvbiBzb21lIHBsYXRmb3JtczogTWFjT1MgWC4KKy0gICAgIC0gVGhlIHByb2Nlc3MgcmVjZWl2ZXMgYSBzaWduYWwgZm9yIHdoaWNoIGEgc2lnbmFsIGhhbmRsZXIgd2FzIGluc3RhbGxlZAorLSAgICAgICB3aXRoIHNpZ2FjdGlvbigpIHdpdGggYW4gc2FfZmxhZ3MgZmllbGQgdGhhdCBkb2VzIG5vdCBjb250YWluCistICAgICAgIFNBX1JFU1RBUlQuCistICAgICAtIFRoZSBwcm9jZXNzIHJlY2VpdmVzIGEgc2lnbmFsIGZvciB3aGljaCBhIHNpZ25hbCBoYW5kbGVyIHdhcyBpbnN0YWxsZWQKKy0gICAgICAgd2l0aCBzaWduYWwoKSBhbmQgZm9yIHdoaWNoIG5vIGNhbGwgdG8gc2lnaW50ZXJydXB0KHNpZywwKSB3YXMgZG9uZSwKKy0gICAgICAgb24gc29tZSBwbGF0Zm9ybXM6IEFJWCwgSFAtVVgsIElSSVgsIE9TRi8xLCBTb2xhcmlzLgorLQorLSAgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgd3JhcHBlciBhcm91bmQgcmVhZCgpIHRoYXQgaGFuZGxlcyBFSU5UUi4gICovCistCisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorIAorICNpZmRlZiBfX2NwbHVzcGx1cworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zaWduYWwuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zaWduYWwuaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc2lnbmFsLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zaWduYWwuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjMxNDQ4NDQ1NiAtMDgwMAorQEAgLTIwLDQ5ICsyMCwyMSBAQAorICNlbmRpZgorIEBQUkFHTUFfQ09MVU1OU0AKKyAKKy0jaWYgZGVmaW5lZCBfX25lZWRfc2lnX2F0b21pY190IHx8IGRlZmluZWQgX19uZWVkX3NpZ3NldF90IHx8IGRlZmluZWQgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1NJR05BTF9IIHx8IChkZWZpbmVkIF9TSUdOQUxfSCAmJiAhZGVmaW5lZCBfX1NJWkVPRl9QVEhSRUFEX01VVEVYX1QpCistLyogU3BlY2lhbCBpbnZvY2F0aW9uIGNvbnZlbnRpb246CistICAgLSBJbnNpZGUgZ2xpYmMgaGVhZGVyIGZpbGVzLgorLSAgIC0gT24gZ2xpYmMgc3lzdGVtcyB3ZSBoYXZlIGEgc2VxdWVuY2Ugb2YgbmVzdGVkIGluY2x1ZGVzCistICAgICA8c2lnbmFsLmg+IC0+IDx1Y29udGV4dC5oPiAtPiA8c2lnbmFsLmg+LgorLSAgICAgSW4gdGhpcyBzaXR1YXRpb24sIHRoZSBmdW5jdGlvbnMgYXJlIG5vdCB5ZXQgZGVjbGFyZWQsIHRoZXJlZm9yZSB3ZSBjYW5ub3QKKy0gICAgIHByb3ZpZGUgdGhlIEMrKyBhbGlhc2VzLgorLSAgIC0gT24gZ2xpYmMgc3lzdGVtcyB3aXRoIEdDQyA0LjMgd2UgaGF2ZSBhIHNlcXVlbmNlIG9mIG5lc3RlZCBpbmNsdWRlcworLSAgICAgPGNzaWduYWw+IC0+IDwvdXNyL2luY2x1ZGUvc2lnbmFsLmg+IC0+IDxzeXMvdWNvbnRleHQuaD4gLT4gPHNpZ25hbC5oPi4KKy0gICAgIEluIHRoaXMgc2l0dWF0aW9uLCBzb21lIG9mIHRoZSBmdW5jdGlvbnMgYXJlIG5vdCB5ZXQgZGVjbGFyZWQsIHRoZXJlZm9yZQorLSAgICAgd2UgY2Fubm90IHByb3ZpZGUgdGhlIEMrKyBhbGlhc2VzLiAgKi8KKysjaWYgZGVmaW5lZCBfX25lZWRfc2lnX2F0b21pY190IHx8IGRlZmluZWQgX19uZWVkX3NpZ3NldF90CisrLyogU3BlY2lhbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24gaW5zaWRlIGdsaWJjIGhlYWRlciBmaWxlcy4gICovCisgCisgIyBASU5DTFVERV9ORVhUQCBATkVYVF9TSUdOQUxfSEAKKyAKKyAjZWxzZQorIC8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NJR05BTF9ICistCistI2RlZmluZSBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU0lHTkFMX0gKKy0KKy0vKiBEZWZpbmUgcGlkX3QsIHVpZF90LgorLSAgIEFsc28sIG1pbmd3IGRlZmluZXMgc2lnc2V0X3Qgbm90IGluIDxzaWduYWwuaD4sIGJ1dCBpbiA8c3lzL3R5cGVzLmg+LgorLSAgIE9uIFNvbGFyaXMgMTAsIDxzaWduYWwuaD4gaW5jbHVkZXMgPHN5cy90eXBlcy5oPiwgd2hpY2ggZXZlbnR1YWxseSBpbmNsdWRlcworLSAgIHVzOyBzbyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gbm93LCBiZWZvcmUgdGhlIHNlY29uZCBpbmNsdXNpb24gZ3VhcmQuICAqLworLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaWZuZGVmIF9HTF9TSUdOQUxfSAorIAorIC8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyAjQElOQ0xVREVfTkVYVEAgQE5FWFRfU0lHTkFMX0hACisgCistI3VuZGVmIF9HTF9BTFJFQURZX0lOQ0xVRElOR19TSUdOQUxfSAorLQorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NJR05BTF9ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU0lHTkFMX0gKKy0KKy0vKiBNYWNPUyBYIDEwLjMsIEZyZWVCU0QgNi40LCBPcGVuQlNEIDMuOCwgT1NGLzEgNC4wLCBTb2xhcmlzIDIuNiBkZWNsYXJlCistICAgcHRocmVhZF9zaWdtYXNrIGluIDxwdGhyZWFkLmg+LCBub3QgaW4gPHNpZ25hbC5oPi4KKy0gICBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiovCistI2lmIChAR05VTElCX1BUSFJFQURfU0lHTUFTS0AgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgXAorLSAgICAmJiAoKGRlZmluZWQgX19BUFBMRV9fICYmIGRlZmluZWQgX19NQUNIX18pIHx8IGRlZmluZWQgX19GcmVlQlNEX18gfHwgZGVmaW5lZCBfX09wZW5CU0RfXyB8fCBkZWZpbmVkIF9fb3NmX18gfHwgZGVmaW5lZCBfX3N1bikgXAorLSAgICAmJiAhIGRlZmluZWQgX19HTElCQ19fCistIyBpbmNsdWRlIDxwdGhyZWFkLmg+CistI2VuZGlmCisrI2lmbmRlZiBfR0xfU0lHTkFMX0gKKysjZGVmaW5lIF9HTF9TSUdOQUxfSAorIAorIC8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKyAKK0BAIC03MCw2ICs0MiwxMCBAQAorIAorIC8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRSBpcyBjb3BpZWQgaGVyZS4gICovCisgCisrLyogRGVmaW5lIHBpZF90LCB1aWRfdC4KKysgICBBbHNvLCBtaW5ndyBkZWZpbmVzIHNpZ3NldF90IG5vdCBpbiA8c2lnbmFsLmg+LCBidXQgaW4gPHN5cy90eXBlcy5oPi4gICovCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworIC8qIE9uIEFJWCwgc2lnX2F0b21pY190IGFscmVhZHkgaW5jbHVkZXMgdm9sYXRpbGUuICBDOTkgcmVxdWlyZXMgdGhhdAorICAgICd2b2xhdGlsZSBzaWdfYXRvbWljX3QnIGlnbm9yZSB0aGUgZXh0cmEgbW9kaWZpZXIsIGJ1dCBDODkgZGlkIG5vdC4KKyAgICBIZW5jZSwgcmVkZWZpbmUgdGhpcyB0byBhIG5vbi12b2xhdGlsZSB0eXBlIGFzIG5lZWRlZC4gICovCitAQCAtMTI0LDM0ICsxMDAsNiBAQCB0eXBlZGVmIHZvaWQgKCpzaWdoYW5kbGVyX3QpIChpbnQpOworICNlbmRpZgorIAorIAorLSNpZiBAR05VTElCX1BUSFJFQURfU0lHTUFTS0AKKy0jIGlmIEBSRVBMQUNFX1BUSFJFQURfU0lHTUFTS0AKKy0jICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorLSMgICB1bmRlZiBwdGhyZWFkX3NpZ21hc2sKKy0jICAgZGVmaW5lIHB0aHJlYWRfc2lnbWFzayBycGxfcHRocmVhZF9zaWdtYXNrCistIyAgZW5kaWYKKy1fR0xfRlVOQ0RFQ0xfUlBMIChwdGhyZWFkX3NpZ21hc2ssIGludCwKKy0gICAgICAgICAgICAgICAgICAoaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKm5ld19tYXNrLCBzaWdzZXRfdCAqb2xkX21hc2spKTsKKy1fR0xfQ1hYQUxJQVNfUlBMIChwdGhyZWFkX3NpZ21hc2ssIGludCwKKy0gICAgICAgICAgICAgICAgICAoaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKm5ld19tYXNrLCBzaWdzZXRfdCAqb2xkX21hc2spKTsKKy0jIGVsc2UKKy0jICBpZiAhQEhBVkVfUFRIUkVBRF9TSUdNQVNLQAorLV9HTF9GVU5DREVDTF9TWVMgKHB0aHJlYWRfc2lnbWFzaywgaW50LAorLSAgICAgICAgICAgICAgICAgIChpbnQgaG93LCBjb25zdCBzaWdzZXRfdCAqbmV3X21hc2ssIHNpZ3NldF90ICpvbGRfbWFzaykpOworLSMgIGVuZGlmCistX0dMX0NYWEFMSUFTX1NZUyAocHRocmVhZF9zaWdtYXNrLCBpbnQsCistICAgICAgICAgICAgICAgICAgKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpuZXdfbWFzaywgc2lnc2V0X3QgKm9sZF9tYXNrKSk7CistIyBlbmRpZgorLV9HTF9DWFhBTElBU1dBUk4gKHB0aHJlYWRfc2lnbWFzayk7CistI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLSMgdW5kZWYgcHRocmVhZF9zaWdtYXNrCistIyBpZiBIQVZFX1JBV19ERUNMX1BUSFJFQURfU0lHTUFTSworLV9HTF9XQVJOX09OX1VTRSAocHRocmVhZF9zaWdtYXNrLCAicHRocmVhZF9zaWdtYXNrIGlzIG5vdCBwb3J0YWJsZSAtICIKKy0gICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwdGhyZWFkX3NpZ21hc2sgZm9yIHBvcnRhYmlsaXR5Iik7CistIyBlbmRpZgorLSNlbmRpZgorLQorLQorICNpZiBAR05VTElCX1NJR1BST0NNQVNLQAorICMgaWYgIUBIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HQAorIAorQEAgLTQyMyw2ICszNzEsNiBAQCBfR0xfV0FSTl9PTl9VU0UgKHNpZ2FjdGlvbiwgInNpZ2FjdGlvbiBpCisgI2VuZGlmCisgCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TSUdOQUxfSCAqLworLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU0lHTkFMX0ggKi8KKysjZW5kaWYgLyogX0dMX1NJR05BTF9IICovCisrI2VuZGlmIC8qIF9HTF9TSUdOQUxfSCAqLworICNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGF0LmMgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RhdC5jCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGF0LmMJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGF0LmMJMjAxMi0wMS0wOCAwMjowNzo0MC4zMzA0ODQ0NTcgLTA4MDAKK0BAIC0zOCw3ICszOCw2IEBAIG9yaWdfc3RhdCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdAorICNpbmNsdWRlIDxzdGRib29sLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlICJkb3NuYW1lLmgiCistI2luY2x1ZGUgInZlcmlmeS5oIgorIAorIC8qIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IE5BTUUgaW50byBTVC4gIFdvcmsgYXJvdW5kIGJ1Z3Mgd2l0aAorICAgIHRyYWlsaW5nIHNsYXNoZXMuICBNaW5ndyBoYXMgb3RoZXIgYnVncyAoc3VjaCBhcyBzdF9pbm8gYWx3YXlzCitAQCAtNjQsMTIgKzYzLDYgQEAgcnBsX3N0YXQgKGNoYXIgY29uc3QgKm5hbWUsIHN0cnVjdCBzdGF0CisgICAgIH0KKyAjZW5kaWYgLyogUkVQTEFDRV9GVU5DX1NUQVRfRklMRSAqLworICNpZiBSRVBMQUNFX0ZVTkNfU1RBVF9ESVIKKy0gIC8qIFRoZSBvbmx5IGtub3duIHN5c3RlbXMgd2hlcmUgUkVQTEFDRV9GVU5DX1NUQVRfRElSIGlzIG5lZWRlZCBhbHNvCistICAgICBoYXZlIGEgY29uc3RhbnQgUEFUSF9NQVguICAqLworLSMgaWZuZGVmIFBBVEhfTUFYCistIyAgZXJyb3IgIlBsZWFzZSBwb3J0IHRoaXMgcmVwbGFjZW1lbnQgdG8geW91ciBwbGF0Zm9ybSIKKy0jIGVuZGlmCistCisgICBpZiAocmVzdWx0ID09IC0xICYmIGVycm5vID09IEVOT0VOVCkKKyAgICAgeworICAgICAgIC8qIER1ZSB0byBtaW5ndydzIG9kZGl0aWVzLCB0aGVyZSBhcmUgc29tZSBkaXJlY3RvcmllcyAobGlrZQorQEAgLTg0LDcgKzc3LDYgQEAgcnBsX3N0YXQgKGNoYXIgY29uc3QgKm5hbWUsIHN0cnVjdCBzdGF0CisgICAgICAgY2hhciBmaXhlZF9uYW1lW1BBVEhfTUFYICsgMV0gPSB7MH07CisgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAobmFtZSk7CisgICAgICAgYm9vbCBjaGVja19kaXIgPSBmYWxzZTsKKy0gICAgICB2ZXJpZnkgKFBBVEhfTUFYIDw9IDQwOTYpOworICAgICAgIGlmIChQQVRIX01BWCA8PSBsZW4pCisgICAgICAgICBlcnJubyA9IEVOQU1FVE9PTE9ORzsKKyAgICAgICBlbHNlIGlmIChsZW4pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGRlZi5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3N0ZGRlZi5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGRkZWYuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0ZGRlZi5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuMzQ2NDg0NDU4IC0wODAwCitAQCAtMzgsOSArMzgsOSBAQAorICAgIHJlbWVtYmVyIGlmIHNwZWNpYWwgaW52b2NhdGlvbiBoYXMgZXZlciBiZWVuIHVzZWQgdG8gb2J0YWluIHdpbnRfdCwKKyAgICBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gY2xlYW4gdXAgTlVMTCB5ZXQgYWdhaW4uICAqLworIAorLSMgaWYgIShkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9TVERERUZfSCAmJiBkZWZpbmVkIF9HTF9TVERERUZfV0lOVF9UKQorKyMgaWYgIShkZWZpbmVkIF9HTF9TVERERUZfSCAmJiBkZWZpbmVkIF9HTF9TVERERUZfV0lOVF9UKQorICMgIGlmZGVmIF9fbmVlZF93aW50X3QKKy0jICAgdW5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURERFRl9ICisrIyAgIHVuZGVmIF9HTF9TVERERUZfSAorICMgICBkZWZpbmUgX0dMX1NURERFRl9XSU5UX1QKKyAjICBlbmRpZgorICMgIEBJTkNMVURFX05FWFRAIEBORVhUX1NURERFRl9IQAorQEAgLTQ5LDE0ICs0OSwxNCBAQAorICNlbHNlCisgLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisgCistIyBpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURERFRl9ICisrIyBpZm5kZWYgX0dMX1NURERFRl9ICisgCisgLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworIAorICMgIEBJTkNMVURFX05FWFRAIEBORVhUX1NURERFRl9IQAorIAorLSMgIGlmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1REREVGX0gKKy0jICAgZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TVERERUZfSAorKyMgIGlmbmRlZiBfR0xfU1REREVGX0gKKysjICAgZGVmaW5lIF9HTF9TVERERUZfSAorIAorIC8qIE9uIE5ldEJTRCA1LjAsIHRoZSBkZWZpbml0aW9uIG9mIE5VTEwgbGFja3MgcHJvcGVyIHBhcmVudGhlc2VzLiAgKi8KKyAjaWYgQFJFUExBQ0VfTlVMTEAKK0BAIC04Miw2ICs4Miw2IEBACisgIyBkZWZpbmUgd2NoYXJfdCBpbnQKKyAjZW5kaWYKKyAKKy0jICBlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1REREVGX0ggKi8KKy0jIGVuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVERERUZfSCAqLworKyMgIGVuZGlmIC8qIF9HTF9TVERERUZfSCAqLworKyMgZW5kaWYgLyogX0dMX1NURERFRl9IICovCisgI2VuZGlmIC8qIF9fbmVlZF9YWFggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkaW50LmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkaW50LmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGludC5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkaW50LmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4zNTg0ODQ0NTggLTA4MDAKK0BAIC0yMSw3ICsyMSw3IEBACisgICogPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hiZC9zdGRpbnQuaC5odG1sPgorICAqLworIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURElOVF9ICisrI2lmbmRlZiBfR0xfU1RESU5UX0gKKyAKKyAjaWYgX19HTlVDX18gPj0gMworIEBQUkFHTUFfU1lTVEVNX0hFQURFUkAKK0BAIC01MiwxMyArNTIsMTMgQEAKKyAgIC8qIE90aGVyIHN5c3RlbXMgbWF5IGhhdmUgYW4gaW5jb21wbGV0ZSBvciBidWdneSA8c3RkaW50Lmg+LgorICAgICAgSW5jbHVkZSBpdCBiZWZvcmUgPGludHR5cGVzLmg+LCBzaW5jZSBhbnkgIiNpbmNsdWRlIDxzdGRpbnQuaD4iCisgICAgICBpbiA8aW50dHlwZXMuaD4gd291bGQgcmVpbmNsdWRlIHVzLCBza2lwcGluZyBvdXIgY29udGVudHMgYmVjYXVzZQorLSAgICAgX0BHVUFSRF9QUkVGSVhAX1NURElOVF9IIGlzIGRlZmluZWQuCisrICAgICBfR0xfU1RESU5UX0ggaXMgZGVmaW5lZC4KKyAgICAgIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyAjIEBJTkNMVURFX05FWFRAIEBORVhUX1NURElOVF9IQAorICNlbmRpZgorIAorLSNpZiAhIGRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1NURElOVF9IICYmICEgZGVmaW5lZCBfR0xfSlVTVF9JTkNMVURFX1NZU1RFTV9TVERJTlRfSAorLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1NURElOVF9ICisrI2lmICEgZGVmaW5lZCBfR0xfU1RESU5UX0ggJiYgISBkZWZpbmVkIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX1NURElOVF9ICisrI2RlZmluZSBfR0xfU1RESU5UX0gKKyAKKyAvKiA8c3lzL3R5cGVzLmg+IGRlZmluZXMgc29tZSBvZiB0aGUgc3RkaW50LmggdHlwZXMgYXMgd2VsbCwgb24gZ2xpYmMsCisgICAgSVJJWCA2LjUsIGFuZCBPcGVuQlNEIDMuOCAodmlhIDxtYWNoaW5lL3R5cGVzLmg+KS4KK0BAIC0yNzAsMzYgKzI3MCwyNiBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IGdsX3VpbnRwdHJfdDsKKyAvKiBOb3RlOiBUaGVzZSB0eXBlcyBhcmUgY29tcGlsZXIgZGVwZW5kZW50LiBJdCBtYXkgYmUgdW53aXNlIHRvIHVzZSB0aGVtIGluCisgICAgcHVibGljIGhlYWRlciBmaWxlcy4gKi8KKyAKKy0vKiBJZiB0aGUgc3lzdGVtIGRlZmluZXMgSU5UTUFYX01BWCwgYXNzdW1lIHRoYXQgaW50bWF4X3Qgd29ya3MsIGFuZAorLSAgIHNpbWlsYXJseSBmb3IgVUlOVE1BWF9NQVggYW5kIHVpbnRtYXhfdC4gIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdpdGgKKy0gICBhc3N1bWluZyBvbmUgdHlwZSB3aGVyZSBhbm90aGVyIGlzIHVzZWQgYnkgdGhlIHN5c3RlbS4gICovCistCistI2lmbmRlZiBJTlRNQVhfTUFYCistIyB1bmRlZiBJTlRNQVhfQworLSMgdW5kZWYgaW50bWF4X3QKKy0jIGlmIEBIQVZFX0xPTkdfTE9OR19JTlRAICYmIExPTkdfTUFYID4+IDMwID09IDEKKysjdW5kZWYgaW50bWF4X3QKKysjaWYgQEhBVkVfTE9OR19MT05HX0lOVEAgJiYgTE9OR19NQVggPj4gMzAgPT0gMQorIHR5cGVkZWYgbG9uZyBsb25nIGludCBnbF9pbnRtYXhfdDsKKy0jICBkZWZpbmUgaW50bWF4X3QgZ2xfaW50bWF4X3QKKy0jIGVsaWYgZGVmaW5lZCBHTF9JTlQ2NF9UCistIyAgZGVmaW5lIGludG1heF90IGludDY0X3QKKy0jIGVsc2UKKysjIGRlZmluZSBpbnRtYXhfdCBnbF9pbnRtYXhfdAorKyNlbGlmIGRlZmluZWQgR0xfSU5UNjRfVAorKyMgZGVmaW5lIGludG1heF90IGludDY0X3QKKysjZWxzZQorIHR5cGVkZWYgbG9uZyBpbnQgZ2xfaW50bWF4X3Q7CistIyAgZGVmaW5lIGludG1heF90IGdsX2ludG1heF90CistIyBlbmRpZgorKyMgZGVmaW5lIGludG1heF90IGdsX2ludG1heF90CisgI2VuZGlmCisgCistI2lmbmRlZiBVSU5UTUFYX01BWAorLSMgdW5kZWYgVUlOVE1BWF9DCistIyB1bmRlZiB1aW50bWF4X3QKKy0jIGlmIEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRAICYmIFVMT05HX01BWCA+PiAzMSA9PSAxCisrI3VuZGVmIHVpbnRtYXhfdAorKyNpZiBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQCAmJiBVTE9OR19NQVggPj4gMzEgPT0gMQorIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBnbF91aW50bWF4X3Q7CistIyAgZGVmaW5lIHVpbnRtYXhfdCBnbF91aW50bWF4X3QKKy0jIGVsaWYgZGVmaW5lZCBHTF9VSU5UNjRfVAorLSMgIGRlZmluZSB1aW50bWF4X3QgdWludDY0X3QKKy0jIGVsc2UKKysjIGRlZmluZSB1aW50bWF4X3QgZ2xfdWludG1heF90CisrI2VsaWYgZGVmaW5lZCBHTF9VSU5UNjRfVAorKyMgZGVmaW5lIHVpbnRtYXhfdCB1aW50NjRfdAorKyNlbHNlCisgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBnbF91aW50bWF4X3Q7CistIyAgZGVmaW5lIHVpbnRtYXhfdCBnbF91aW50bWF4X3QKKy0jIGVuZGlmCisrIyBkZWZpbmUgdWludG1heF90IGdsX3VpbnRtYXhfdAorICNlbmRpZgorIAorIC8qIFZlcmlmeSB0aGF0IGludG1heF90IGFuZCB1aW50bWF4X3QgaGF2ZSB0aGUgc2FtZSBzaXplLiAgVG9vIG11Y2ggY29kZQorQEAgLTQ0MSwyMyArNDMxLDIxIEBAIHR5cGVkZWYgaW50IF92ZXJpZnlfaW50bWF4X3NpemVbc2l6ZW9mICgKKyAKKyAvKiA3LjE4LjIuNS4gTGltaXRzIG9mIGdyZWF0ZXN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KKyAKKy0jaWZuZGVmIElOVE1BWF9NQVgKKy0jIHVuZGVmIElOVE1BWF9NSU4KKy0jIGlmZGVmIElOVDY0X01BWAorLSMgIGRlZmluZSBJTlRNQVhfTUlOICBJTlQ2NF9NSU4KKy0jICBkZWZpbmUgSU5UTUFYX01BWCAgSU5UNjRfTUFYCistIyBlbHNlCistIyAgZGVmaW5lIElOVE1BWF9NSU4gIElOVDMyX01JTgorLSMgIGRlZmluZSBJTlRNQVhfTUFYICBJTlQzMl9NQVgKKy0jIGVuZGlmCisrI3VuZGVmIElOVE1BWF9NSU4KKysjdW5kZWYgSU5UTUFYX01BWAorKyNpZmRlZiBJTlQ2NF9NQVgKKysjIGRlZmluZSBJTlRNQVhfTUlOICBJTlQ2NF9NSU4KKysjIGRlZmluZSBJTlRNQVhfTUFYICBJTlQ2NF9NQVgKKysjZWxzZQorKyMgZGVmaW5lIElOVE1BWF9NSU4gIElOVDMyX01JTgorKyMgZGVmaW5lIElOVE1BWF9NQVggIElOVDMyX01BWAorICNlbmRpZgorIAorLSNpZm5kZWYgVUlOVE1BWF9NQVgKKy0jIGlmZGVmIFVJTlQ2NF9NQVgKKy0jICBkZWZpbmUgVUlOVE1BWF9NQVggIFVJTlQ2NF9NQVgKKy0jIGVsc2UKKy0jICBkZWZpbmUgVUlOVE1BWF9NQVggIFVJTlQzMl9NQVgKKy0jIGVuZGlmCisrI3VuZGVmIFVJTlRNQVhfTUFYCisrI2lmZGVmIFVJTlQ2NF9NQVgKKysjIGRlZmluZSBVSU5UTUFYX01BWCAgVUlOVDY0X01BWAorKyNlbHNlCisrIyBkZWZpbmUgVUlOVE1BWF9NQVggIFVJTlQzMl9NQVgKKyAjZW5kaWYKKyAKKyAvKiA3LjE4LjMuIExpbWl0cyBvZiBvdGhlciBpbnRlZ2VyIHR5cGVzICovCitAQCAtNTgwLDI3ICs1NjgsMjUgQEAgdHlwZWRlZiBpbnQgX3ZlcmlmeV9pbnRtYXhfc2l6ZVtzaXplb2YgKAorIAorIC8qIDcuMTguNC4yLiBNYWNyb3MgZm9yIGdyZWF0ZXN0LXdpZHRoIGludGVnZXIgY29uc3RhbnRzICovCisgCistI2lmbmRlZiBJTlRNQVhfQworLSMgaWYgQEhBVkVfTE9OR19MT05HX0lOVEAgJiYgTE9OR19NQVggPj4gMzAgPT0gMQorLSMgIGRlZmluZSBJTlRNQVhfQyh4KSAgIHgjI0xMCistIyBlbGlmIGRlZmluZWQgR0xfSU5UNjRfVAorLSMgIGRlZmluZSBJTlRNQVhfQyh4KSAgIElOVDY0X0MoeCkKKy0jIGVsc2UKKy0jICBkZWZpbmUgSU5UTUFYX0MoeCkgICB4IyNMCistIyBlbmRpZgorKyN1bmRlZiBJTlRNQVhfQworKyNpZiBASEFWRV9MT05HX0xPTkdfSU5UQCAmJiBMT05HX01BWCA+PiAzMCA9PSAxCisrIyBkZWZpbmUgSU5UTUFYX0MoeCkgICB4IyNMTAorKyNlbGlmIGRlZmluZWQgR0xfSU5UNjRfVAorKyMgZGVmaW5lIElOVE1BWF9DKHgpICAgSU5UNjRfQyh4KQorKyNlbHNlCisrIyBkZWZpbmUgSU5UTUFYX0MoeCkgICB4IyNMCisgI2VuZGlmCisgCistI2lmbmRlZiBVSU5UTUFYX0MKKy0jIGlmIEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRAICYmIFVMT05HX01BWCA+PiAzMSA9PSAxCistIyAgZGVmaW5lIFVJTlRNQVhfQyh4KSAgeCMjVUxMCistIyBlbGlmIGRlZmluZWQgR0xfVUlOVDY0X1QKKy0jICBkZWZpbmUgVUlOVE1BWF9DKHgpICBVSU5UNjRfQyh4KQorLSMgZWxzZQorLSMgIGRlZmluZSBVSU5UTUFYX0MoeCkgIHgjI1VMCistIyBlbmRpZgorKyN1bmRlZiBVSU5UTUFYX0MKKysjaWYgQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAgJiYgVUxPTkdfTUFYID4+IDMxID09IDEKKysjIGRlZmluZSBVSU5UTUFYX0MoeCkgIHgjI1VMTAorKyNlbGlmIGRlZmluZWQgR0xfVUlOVDY0X1QKKysjIGRlZmluZSBVSU5UTUFYX0MoeCkgIFVJTlQ2NF9DKHgpCisrI2Vsc2UKKysjIGRlZmluZSBVSU5UTUFYX0MoeCkgIHgjI1VMCisgI2VuZGlmCisgCisgI2VuZGlmIC8qICFkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX19TVERDX0NPTlNUQU5UX01BQ1JPUyAqLworIAorLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RESU5UX0ggKi8KKy0jZW5kaWYgLyogIWRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1NURElOVF9IICYmICFkZWZpbmVkIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX1NURElOVF9IICovCisrI2VuZGlmIC8qIF9HTF9TVERJTlRfSCAqLworKyNlbmRpZiAvKiAhZGVmaW5lZCBfR0xfU1RESU5UX0ggJiYgIWRlZmluZWQgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fU1RESU5UX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkaW8uaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGRpby5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGRpby5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkaW8uaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjM3ODQ4NDQ1OSAtMDgwMAorQEAgLTM1LDcgKzM1LDcgQEAKKyAjZWxzZQorIC8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURElPX0gKKysjaWZuZGVmIF9HTF9TVERJT19ICisgCisgI2RlZmluZSBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU1RESU9fSAorIAorQEAgLTQ0LDggKzQ0LDggQEAKKyAKKyAjdW5kZWYgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1NURElPX0gKKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERJT19ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1RESU9fSAorKyNpZm5kZWYgX0dMX1NURElPX0gKKysjZGVmaW5lIF9HTF9TVERJT19ICisgCisgLyogR2V0IHZhX2xpc3QuICBOZWVkZWQgb24gbWFueSBzeXN0ZW1zLCBpbmNsdWRpbmcgZ2xpYmMgMi44LiAgKi8KKyAjaW5jbHVkZSA8c3RkYXJnLmg+CitAQCAtNDYxLDYgKzQ2MSwyNSBAQCBfR0xfRlVOQ0RFQ0xfU1lTIChmc2Vla28sIGludCwgKEZJTEUgKmZwCisgX0dMX0NYWEFMSUFTX1NZUyAoZnNlZWtvLCBpbnQsIChGSUxFICpmcCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKSk7CisgIyBlbmRpZgorIF9HTF9DWFhBTElBU1dBUk4gKGZzZWVrbyk7CisrIyBpZiAoQFJFUExBQ0VfRlNFRUtPQCB8fCAhQEhBVkVfRlNFRUtPQCkgJiYgIUBHTlVMSUJfRlNFRUtACisrICAgLyogUHJvdmlkZSBhbiBmc2VlayBmdW5jdGlvbiB0aGF0IGlzIGNvbnNpc3RlbnQgd2l0aCBmc2Vla28uICAqLworKyAgIC8qIEluIG9yZGVyIHRvIGF2b2lkIHRoYXQgZnNlZWsgZ2V0cyBkZWZpbmVkIGFzIGEgbWFjcm8gaGVyZSwgdGhlCisrICAgICAgZGV2ZWxvcGVyIGNhbiByZXF1ZXN0IHRoZSAnZnNlZWsnIG1vZHVsZS4gICovCisrIyAgaWYgIUdOVUxJQl9kZWZpbmVkX2ZzZWVrX2Z1bmN0aW9uCisrIyAgIHVuZGVmIGZzZWVrCisrIyAgIGRlZmluZSBmc2VlayBycGxfZnNlZWsKKytzdGF0aWMgaW5saW5lIGludCBfR0xfQVJHX05PTk5VTEwgKCgxKSkKKytycGxfZnNlZWsgKEZJTEUgKmZwLCBsb25nIG9mZnNldCwgaW50IHdoZW5jZSkKKyt7CisrIyAgIGlmIEBSRVBMQUNFX0ZTRUVLT0AKKysgIHJldHVybiBycGxfZnNlZWtvIChmcCwgb2Zmc2V0LCB3aGVuY2UpOworKyMgICBlbHNlCisrICByZXR1cm4gZnNlZWtvIChmcCwgb2Zmc2V0LCB3aGVuY2UpOworKyMgICBlbmRpZgorK30KKysjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX2ZzZWVrX2Z1bmN0aW9uIDEKKysjICBlbmRpZgorKyMgZW5kaWYKKyAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgIyBkZWZpbmUgX0dMX0ZTRUVLX1dBUk4gLyogQ2F0ZWdvcnkgMSwgYWJvdmUuICAqLworICMgdW5kZWYgZnNlZWsKK0BAIC01MjAsNiArNTM5LDI1IEBAIF9HTF9GVU5DREVDTF9TWVMgKGZ0ZWxsbywgb2ZmX3QsIChGSUxFICoKKyBfR0xfQ1hYQUxJQVNfU1lTIChmdGVsbG8sIG9mZl90LCAoRklMRSAqZnApKTsKKyAjIGVuZGlmCisgX0dMX0NYWEFMSUFTV0FSTiAoZnRlbGxvKTsKKysjIGlmIChAUkVQTEFDRV9GVEVMTE9AIHx8ICFASEFWRV9GVEVMTE9AKSAmJiAhQEdOVUxJQl9GVEVMTEAKKysgICAvKiBQcm92aWRlIGFuIGZ0ZWxsIGZ1bmN0aW9uIHRoYXQgaXMgY29uc2lzdGVudCB3aXRoIGZ0ZWxsby4gICovCisrICAgLyogSW4gb3JkZXIgdG8gYXZvaWQgdGhhdCBmdGVsbCBnZXRzIGRlZmluZWQgYXMgYSBtYWNybyBoZXJlLCB0aGUKKysgICAgICBkZXZlbG9wZXIgY2FuIHJlcXVlc3QgdGhlICdmdGVsbCcgbW9kdWxlLiAgKi8KKysjICBpZiAhR05VTElCX2RlZmluZWRfZnRlbGxfZnVuY3Rpb24KKysjICAgdW5kZWYgZnRlbGwKKysjICAgZGVmaW5lIGZ0ZWxsIHJwbF9mdGVsbAorK3N0YXRpYyBpbmxpbmUgbG9uZyBfR0xfQVJHX05PTk5VTEwgKCgxKSkKKytycGxfZnRlbGwgKEZJTEUgKmYpCisreworKyMgICBpZiBAUkVQTEFDRV9GVEVMTE9ACisrICByZXR1cm4gcnBsX2Z0ZWxsbyAoZik7CisrIyAgIGVsc2UKKysgIHJldHVybiBmdGVsbG8gKGYpOworKyMgICBlbmRpZgorK30KKysjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX2Z0ZWxsX2Z1bmN0aW9uIDEKKysjICBlbmRpZgorKyMgZW5kaWYKKyAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgIyBkZWZpbmUgX0dMX0ZURUxMX1dBUk4gLyogQ2F0ZWdvcnkgMSwgYWJvdmUuICAqLworICMgdW5kZWYgZnRlbGwKK0BAIC0xMzA3LDYgKzEzNDUsNiBAQCBfR0xfV0FSTl9PTl9VU0UgKHZzcHJpbnRmLCAidnNwcmludGYgaXMKKyAjZW5kaWYKKyAKKyAKKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURElPX0ggKi8KKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURElPX0ggKi8KKysjZW5kaWYgLyogX0dMX1NURElPX0ggKi8KKysjZW5kaWYgLyogX0dMX1NURElPX0ggKi8KKyAjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkbGliLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkbGliLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGxpYi5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkbGliLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4zOTA0ODQ0NTkgLTA4MDAKK0BAIC0yOCwxMyArMjgsMTMgQEAKKyAjZWxzZQorIC8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURExJQl9ICisrI2lmbmRlZiBfR0xfU1RETElCX0gKKyAKKyAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisgI0BJTkNMVURFX05FWFRAIEBORVhUX1NURExJQl9IQAorIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURExJQl9ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1RETElCX0gKKysjaWZuZGVmIF9HTF9TVERMSUJfSAorKyNkZWZpbmUgX0dMX1NURExJQl9ICisgCisgLyogTmV0QlNEIDUuMCBtaXMtZGVmaW5lcyBOVUxMLiAgKi8KKyAjaW5jbHVkZSA8c3RkZGVmLmg+CitAQCAtODksNyArODksMTEgQEAgc3RydWN0IHJhbmRvbV9kYXRhCisgIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyAjZW5kaWYKKyAKKy0vKiBUaGUgZGVmaW5pdGlvbiBvZiBfTm9yZXR1cm4gaXMgY29waWVkIGhlcmUuICAqLworKyNpZiAzIDw9IF9fR05VQ19fIHx8IF9fR05VQ19fID09IDIgJiYgOCA8PSBfX0dOVUNfTUlOT1JfXworKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfTk9SRVRVUk4gX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpCisrI2Vsc2UKKysjIGRlZmluZSBfR0xfQVRUUklCVVRFX05PUkVUVVJOCisrI2VuZGlmCisgCisgLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworIAorQEAgLTExNiw3ICsxMjAsNyBAQCBzdHJ1Y3QgcmFuZG9tX2RhdGEKKyAvKiBUZXJtaW5hdGUgdGhlIGN1cnJlbnQgcHJvY2VzcyB3aXRoIHRoZSBnaXZlbiByZXR1cm4gY29kZSwgd2l0aG91dCBydW5uaW5nCisgICAgdGhlICdhdGV4aXQnIGhhbmRsZXJzLiAgKi8KKyAjIGlmICFASEFWRV9fRVhJVEAKKy1fR0xfRlVOQ0RFQ0xfU1lTIChfRXhpdCwgX05vcmV0dXJuIHZvaWQsIChpbnQgc3RhdHVzKSk7CisrX0dMX0ZVTkNERUNMX1NZUyAoX0V4aXQsIHZvaWQsIChpbnQgc3RhdHVzKSBfR0xfQVRUUklCVVRFX05PUkVUVVJOKTsKKyAjIGVuZGlmCisgX0dMX0NYWEFMSUFTX1NZUyAoX0V4aXQsIHZvaWQsIChpbnQgc3RhdHVzKSk7CisgX0dMX0NYWEFMSUFTV0FSTiAoX0V4aXQpOworQEAgLTc1Nyw2ICs3NjEsNiBAQCBfR0xfQ1hYQUxJQVNXQVJOICh3Y3RvbWIpOworICNlbmRpZgorIAorIAorLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RETElCX0ggKi8KKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURExJQl9IICovCisrI2VuZGlmIC8qIF9HTF9TVERMSUJfSCAqLworKyNlbmRpZiAvKiBfR0xfU1RETElCX0ggKi8KKyAjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyZXJyb3IuYyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdHJlcnJvci5jCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdHJlcnJvci5jCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyZXJyb3IuYwkyMDEyLTAxLTA4IDAyOjA3OjQwLjQwNjQ4NDQ2MSAtMDgwMAorQEAgLTE3LDU0ICsxNywzNDAgQEAKKyAKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgCistLyogU3BlY2lmaWNhdGlvbi4gICovCisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorLSNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxzdGRpby5oPgorLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lmIFJFUExBQ0VfU1RSRVJST1IKKysKKysjIGluY2x1ZGUgPGVycm5vLmg+CisrIyBpbmNsdWRlIDxzdGRpby5oPgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRVNPQ0sgLyogbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zICovCisrIyAgaWYgSEFWRV9XSU5TT0NLMl9ICisrIyAgIGluY2x1ZGUgPHdpbnNvY2syLmg+CisrIyAgZW5kaWYKKysjIGVuZGlmCisgCistI2luY2x1ZGUgImludHByb3BzLmgiCistI2luY2x1ZGUgInN0cmVycm9yLW92ZXJyaWRlLmgiCistI2luY2x1ZGUgInZlcmlmeS5oIgorKyMgaW5jbHVkZSAiaW50cHJvcHMuaCIKKyAKKyAvKiBVc2UgdGhlIHN5c3RlbSBmdW5jdGlvbnMsIG5vdCB0aGUgZ251bGliIG92ZXJyaWRlcyBpbiB0aGlzIGZpbGUuICAqLworLSN1bmRlZiBzcHJpbnRmCisrIyB1bmRlZiBzcHJpbnRmCisrCisrIyB1bmRlZiBzdHJlcnJvcgorKyMgaWYgISBIQVZFX0RFQ0xfU1RSRVJST1IKKysjICBkZWZpbmUgc3RyZXJyb3IobikgTlVMTAorKyMgZW5kaWYKKyAKKyBjaGFyICoKKy1zdHJlcnJvciAoaW50IG4pCistI3VuZGVmIHN0cmVycm9yCisrcnBsX3N0cmVycm9yIChpbnQgbikKKyB7CistICBzdGF0aWMgY2hhciBidWZbU1RBQ0tCVUZfTEVOXTsKKy0gIHNpemVfdCBsZW47CisrICBjaGFyIGNvbnN0ICptc2cgPSBOVUxMOworKyAgLyogVGhlc2UgZXJyb3IgbWVzc2FnZXMgYXJlIHRha2VuIGZyb20gZ2xpYmMvc3lzZGVwcy9nbnUvZXJybGlzdC5jLiAgKi8KKysgIHN3aXRjaCAobikKKysgICAgeworKyMgaWYgR05VTElCX2RlZmluZWRfRVRYVEJTWQorKyAgICBjYXNlIEVUWFRCU1k6CisrICAgICAgbXNnID0gIlRleHQgZmlsZSBidXN5IjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FU09DSyAvKiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMgKi8KKysgICAgLyogRVdPVUxEQkxPQ0sgaXMgdGhlIHNhbWUgYXMgRUFHQUlOLiAgKi8KKysgICAgY2FzZSBFSU5QUk9HUkVTUzoKKysgICAgICBtc2cgPSAiT3BlcmF0aW9uIG5vdyBpbiBwcm9ncmVzcyI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUFMUkVBRFk6CisrICAgICAgbXNnID0gIk9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTk9UU09DSzoKKysgICAgICBtc2cgPSAiU29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0IjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFREVTVEFERFJSRVE6CisrICAgICAgbXNnID0gIkRlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVNU0dTSVpFOgorKyAgICAgIG1zZyA9ICJNZXNzYWdlIHRvbyBsb25nIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFUFJPVE9UWVBFOgorKyAgICAgIG1zZyA9ICJQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVOT1BST1RPT1BUOgorKyAgICAgIG1zZyA9ICJQcm90b2NvbCBub3QgYXZhaWxhYmxlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFUFJPVE9OT1NVUFBPUlQ6CisrICAgICAgbXNnID0gIlByb3RvY29sIG5vdCBzdXBwb3J0ZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVTT0NLVE5PU1VQUE9SVDoKKysgICAgICBtc2cgPSAiU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU9QTk9UU1VQUDoKKysgICAgICBtc2cgPSAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVQRk5PU1VQUE9SVDoKKysgICAgICBtc2cgPSAiUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVBRk5PU1VQUE9SVDoKKysgICAgICBtc2cgPSAiQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUFERFJJTlVTRToKKysgICAgICBtc2cgPSAiQWRkcmVzcyBhbHJlYWR5IGluIHVzZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUFERFJOT1RBVkFJTDoKKysgICAgICBtc2cgPSAiQ2Fubm90IGFzc2lnbiByZXF1ZXN0ZWQgYWRkcmVzcyI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU5FVERPV046CisrICAgICAgbXNnID0gIk5ldHdvcmsgaXMgZG93biI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU5FVFVOUkVBQ0g6CisrICAgICAgbXNnID0gIk5ldHdvcmsgaXMgdW5yZWFjaGFibGUiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVORVRSRVNFVDoKKysgICAgICBtc2cgPSAiTmV0d29yayBkcm9wcGVkIGNvbm5lY3Rpb24gb24gcmVzZXQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVDT05OQUJPUlRFRDoKKysgICAgICBtc2cgPSAiU29mdHdhcmUgY2F1c2VkIGNvbm5lY3Rpb24gYWJvcnQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVDT05OUkVTRVQ6CisrICAgICAgbXNnID0gIkNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU5PQlVGUzoKKysgICAgICBtc2cgPSAiTm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUlTQ09OTjoKKysgICAgICBtc2cgPSAiVHJhbnNwb3J0IGVuZHBvaW50IGlzIGFscmVhZHkgY29ubmVjdGVkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTk9UQ09OTjoKKysgICAgICBtc2cgPSAiVHJhbnNwb3J0IGVuZHBvaW50IGlzIG5vdCBjb25uZWN0ZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVTSFVURE9XTjoKKysgICAgICBtc2cgPSAiQ2Fubm90IHNlbmQgYWZ0ZXIgdHJhbnNwb3J0IGVuZHBvaW50IHNodXRkb3duIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFVE9PTUFOWVJFRlM6CisrICAgICAgbXNnID0gIlRvbyBtYW55IHJlZmVyZW5jZXM6IGNhbm5vdCBzcGxpY2UiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVUSU1FRE9VVDoKKysgICAgICBtc2cgPSAiQ29ubmVjdGlvbiB0aW1lZCBvdXQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVDT05OUkVGVVNFRDoKKysgICAgICBtc2cgPSAiQ29ubmVjdGlvbiByZWZ1c2VkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTE9PUDoKKysgICAgICBtc2cgPSAiVG9vIG1hbnkgbGV2ZWxzIG9mIHN5bWJvbGljIGxpbmtzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFSE9TVERPV046CisrICAgICAgbXNnID0gIkhvc3QgaXMgZG93biI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUhPU1RVTlJFQUNIOgorKyAgICAgIG1zZyA9ICJObyByb3V0ZSB0byBob3N0IjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFUFJPQ0xJTToKKysgICAgICBtc2cgPSAiVG9vIG1hbnkgcHJvY2Vzc2VzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFVVNFUlM6CisrICAgICAgbXNnID0gIlRvbyBtYW55IHVzZXJzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFRFFVT1Q6CisrICAgICAgbXNnID0gIkRpc2sgcXVvdGEgZXhjZWVkZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVTVEFMRToKKysgICAgICBtc2cgPSAiU3RhbGUgTkZTIGZpbGUgaGFuZGxlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFUkVNT1RFOgorKyAgICAgIG1zZyA9ICJPYmplY3QgaXMgcmVtb3RlIjsKKysgICAgICBicmVhazsKKysjICBpZiBIQVZFX1dJTlNPQ0syX0gKKysgICAgLyogV1NBX0lOVkFMSURfSEFORExFIG1hcHMgdG8gRUJBREYgKi8KKysgICAgLyogV1NBX05PVF9FTk9VR0hfTUVNT1JZIG1hcHMgdG8gRU5PTUVNICovCisrICAgIC8qIFdTQV9JTlZBTElEX1BBUkFNRVRFUiBtYXBzIHRvIEVJTlZBTCAqLworKyAgICBjYXNlIFdTQV9PUEVSQVRJT05fQUJPUlRFRDoKKysgICAgICBtc2cgPSAiT3ZlcmxhcHBlZCBvcGVyYXRpb24gYWJvcnRlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBX0lPX0lOQ09NUExFVEU6CisrICAgICAgbXNnID0gIk92ZXJsYXBwZWQgSS9PIGV2ZW50IG9iamVjdCBub3QgaW4gc2lnbmFsZWQgc3RhdGUiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQV9JT19QRU5ESU5HOgorKyAgICAgIG1zZyA9ICJPdmVybGFwcGVkIG9wZXJhdGlvbnMgd2lsbCBjb21wbGV0ZSBsYXRlciI7CisrICAgICAgYnJlYWs7CisrICAgIC8qIFdTQUVJTlRSIG1hcHMgdG8gRUlOVFIgKi8KKysgICAgLyogV1NBRUJBREYgbWFwcyB0byBFQkFERiAqLworKyAgICAvKiBXU0FFQUNDRVMgbWFwcyB0byBFQUNDRVMgKi8KKysgICAgLyogV1NBRUZBVUxUIG1hcHMgdG8gRUZBVUxUICovCisrICAgIC8qIFdTQUVJTlZBTCBtYXBzIHRvIEVJTlZBTCAqLworKyAgICAvKiBXU0FFTUZJTEUgbWFwcyB0byBFTUZJTEUgKi8KKysgICAgLyogV1NBRVdPVUxEQkxPQ0sgbWFwcyB0byBFV09VTERCTE9DSyAqLworKyAgICAvKiBXU0FFSU5QUk9HUkVTUyBpcyBFSU5QUk9HUkVTUyAqLworKyAgICAvKiBXU0FFQUxSRUFEWSBpcyBFQUxSRUFEWSAqLworKyAgICAvKiBXU0FFTk9UU09DSyBpcyBFTk9UU09DSyAqLworKyAgICAvKiBXU0FFREVTVEFERFJSRVEgaXMgRURFU1RBRERSUkVRICovCisrICAgIC8qIFdTQUVNU0dTSVpFIGlzIEVNU0dTSVpFICovCisrICAgIC8qIFdTQUVQUk9UT1RZUEUgaXMgRVBST1RPVFlQRSAqLworKyAgICAvKiBXU0FFTk9QUk9UT09QVCBpcyBFTk9QUk9UT09QVCAqLworKyAgICAvKiBXU0FFUFJPVE9OT1NVUFBPUlQgaXMgRVBST1RPTk9TVVBQT1JUICovCisrICAgIC8qIFdTQUVTT0NLVE5PU1VQUE9SVCBpcyBFU09DS1ROT1NVUFBPUlQgKi8KKysgICAgLyogV1NBRU9QTk9UU1VQUCBpcyBFT1BOT1RTVVBQICovCisrICAgIC8qIFdTQUVQRk5PU1VQUE9SVCBpcyBFUEZOT1NVUFBPUlQgKi8KKysgICAgLyogV1NBRUFGTk9TVVBQT1JUIGlzIEVBRk5PU1VQUE9SVCAqLworKyAgICAvKiBXU0FFQUREUklOVVNFIGlzIEVBRERSSU5VU0UgKi8KKysgICAgLyogV1NBRUFERFJOT1RBVkFJTCBpcyBFQUREUk5PVEFWQUlMICovCisrICAgIC8qIFdTQUVORVRET1dOIGlzIEVORVRET1dOICovCisrICAgIC8qIFdTQUVORVRVTlJFQUNIIGlzIEVORVRVTlJFQUNIICovCisrICAgIC8qIFdTQUVORVRSRVNFVCBpcyBFTkVUUkVTRVQgKi8KKysgICAgLyogV1NBRUNPTk5BQk9SVEVEIGlzIEVDT05OQUJPUlRFRCAqLworKyAgICAvKiBXU0FFQ09OTlJFU0VUIGlzIEVDT05OUkVTRVQgKi8KKysgICAgLyogV1NBRU5PQlVGUyBpcyBFTk9CVUZTICovCisrICAgIC8qIFdTQUVJU0NPTk4gaXMgRUlTQ09OTiAqLworKyAgICAvKiBXU0FFTk9UQ09OTiBpcyBFTk9UQ09OTiAqLworKyAgICAvKiBXU0FFU0hVVERPV04gaXMgRVNIVVRET1dOICovCisrICAgIC8qIFdTQUVUT09NQU5ZUkVGUyBpcyBFVE9PTUFOWVJFRlMgKi8KKysgICAgLyogV1NBRVRJTUVET1VUIGlzIEVUSU1FRE9VVCAqLworKyAgICAvKiBXU0FFQ09OTlJFRlVTRUQgaXMgRUNPTk5SRUZVU0VEICovCisrICAgIC8qIFdTQUVMT09QIGlzIEVMT09QICovCisrICAgIC8qIFdTQUVOQU1FVE9PTE9ORyBtYXBzIHRvIEVOQU1FVE9PTE9ORyAqLworKyAgICAvKiBXU0FFSE9TVERPV04gaXMgRUhPU1RET1dOICovCisrICAgIC8qIFdTQUVIT1NUVU5SRUFDSCBpcyBFSE9TVFVOUkVBQ0ggKi8KKysgICAgLyogV1NBRU5PVEVNUFRZIG1hcHMgdG8gRU5PVEVNUFRZICovCisrICAgIC8qIFdTQUVQUk9DTElNIGlzIEVQUk9DTElNICovCisrICAgIC8qIFdTQUVVU0VSUyBpcyBFVVNFUlMgKi8KKysgICAgLyogV1NBRURRVU9UIGlzIEVEUVVPVCAqLworKyAgICAvKiBXU0FFU1RBTEUgaXMgRVNUQUxFICovCisrICAgIC8qIFdTQUVSRU1PVEUgaXMgRVJFTU9URSAqLworKyAgICBjYXNlIFdTQVNZU05PVFJFQURZOgorKyAgICAgIG1zZyA9ICJOZXR3b3JrIHN1YnN5c3RlbSBpcyB1bmF2YWlsYWJsZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBVkVSTk9UU1VQUE9SVEVEOgorKyAgICAgIG1zZyA9ICJXaW5zb2NrLmRsbCB2ZXJzaW9uIG91dCBvZiByYW5nZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBTk9USU5JVElBTElTRUQ6CisrICAgICAgbXNnID0gIlN1Y2Nlc3NmdWwgV1NBU3RhcnR1cCBub3QgeWV0IHBlcmZvcm1lZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBRURJU0NPTjoKKysgICAgICBtc2cgPSAiR3JhY2VmdWwgc2h1dGRvd24gaW4gcHJvZ3Jlc3MiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQUVOT01PUkU6IGNhc2UgV1NBX0VfTk9fTU9SRToKKysgICAgICBtc2cgPSAiTm8gbW9yZSByZXN1bHRzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FFQ0FOQ0VMTEVEOiBjYXNlIFdTQV9FX0NBTkNFTExFRDoKKysgICAgICBtc2cgPSAiQ2FsbCB3YXMgY2FuY2VsZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQUVJTlZBTElEUFJPQ1RBQkxFOgorKyAgICAgIG1zZyA9ICJQcm9jZWR1cmUgY2FsbCB0YWJsZSBpcyBpbnZhbGlkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FFSU5WQUxJRFBST1ZJREVSOgorKyAgICAgIG1zZyA9ICJTZXJ2aWNlIHByb3ZpZGVyIGlzIGludmFsaWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQUVQUk9WSURFUkZBSUxFRElOSVQ6CisrICAgICAgbXNnID0gIlNlcnZpY2UgcHJvdmlkZXIgZmFpbGVkIHRvIGluaXRpYWxpemUiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQVNZU0NBTExGQUlMVVJFOgorKyAgICAgIG1zZyA9ICJTeXN0ZW0gY2FsbCBmYWlsdXJlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FTRVJWSUNFX05PVF9GT1VORDoKKysgICAgICBtc2cgPSAiU2VydmljZSBub3QgZm91bmQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQVRZUEVfTk9UX0ZPVU5EOgorKyAgICAgIG1zZyA9ICJDbGFzcyB0eXBlIG5vdCBmb3VuZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBRVJFRlVTRUQ6CisrICAgICAgbXNnID0gIkRhdGFiYXNlIHF1ZXJ5IHdhcyByZWZ1c2VkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FIT1NUX05PVF9GT1VORDoKKysgICAgICBtc2cgPSAiSG9zdCBub3QgZm91bmQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQVRSWV9BR0FJTjoKKysgICAgICBtc2cgPSAiTm9uYXV0aG9yaXRhdGl2ZSBob3N0IG5vdCBmb3VuZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBTk9fUkVDT1ZFUlk6CisrICAgICAgbXNnID0gIk5vbnJlY292ZXJhYmxlIGVycm9yIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FOT19EQVRBOgorKyAgICAgIG1zZyA9ICJWYWxpZCBuYW1lLCBubyBkYXRhIHJlY29yZCBvZiByZXF1ZXN0ZWQgdHlwZSI7CisrICAgICAgYnJlYWs7CisrICAgIC8qIFdTQV9RT1NfKiBvbWl0dGVkICovCisrIyAgZW5kaWYKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FTk9NU0cKKysgICAgY2FzZSBFTk9NU0c6CisrICAgICAgbXNnID0gIk5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FSURSTQorKyAgICBjYXNlIEVJRFJNOgorKyAgICAgIG1zZyA9ICJJZGVudGlmaWVyIHJlbW92ZWQiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VOT0xJTksKKysgICAgY2FzZSBFTk9MSU5LOgorKyAgICAgIG1zZyA9ICJMaW5rIGhhcyBiZWVuIHNldmVyZWQiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VQUk9UTworKyAgICBjYXNlIEVQUk9UTzoKKysgICAgICBtc2cgPSAiUHJvdG9jb2wgZXJyb3IiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VNVUxUSUhPUAorKyAgICBjYXNlIEVNVUxUSUhPUDoKKysgICAgICBtc2cgPSAiTXVsdGlob3AgYXR0ZW1wdGVkIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FQkFETVNHCisrICAgIGNhc2UgRUJBRE1TRzoKKysgICAgICBtc2cgPSAiQmFkIG1lc3NhZ2UiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VPVkVSRkxPVworKyAgICBjYXNlIEVPVkVSRkxPVzoKKysgICAgICBtc2cgPSAiVmFsdWUgdG9vIGxhcmdlIGZvciBkZWZpbmVkIGRhdGEgdHlwZSI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRU5PVFNVUAorKyAgICBjYXNlIEVOT1RTVVA6CisrICAgICAgbXNnID0gIk5vdCBzdXBwb3J0ZWQiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VTVEFMRQorKyAgICBjYXNlIEVTVEFMRToKKysgICAgICBtc2cgPSAiU3RhbGUgTkZTIGZpbGUgaGFuZGxlIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FRFFVT1QKKysgICAgY2FzZSBFRFFVT1Q6CisrICAgICAgbXNnID0gIkRpc2sgcXVvdGEgZXhjZWVkZWQiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VDQU5DRUxFRAorKyAgICBjYXNlIEVDQU5DRUxFRDoKKysgICAgICBtc2cgPSAiT3BlcmF0aW9uIGNhbmNlbGVkIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrICAgIH0KKyAKKy0gIC8qIENhc3QgYXdheSBjb25zdCwgZHVlIHRvIHRoZSBoaXN0b3JpY2FsIHNpZ25hdHVyZSBvZiBzdHJlcnJvcjsKKy0gICAgIGNhbGxlcnMgc2hvdWxkIG5vdCBiZSBtb2RpZnlpbmcgdGhlIHN0cmluZy4gICovCistICBjb25zdCBjaGFyICptc2cgPSBzdHJlcnJvcl9vdmVycmlkZSAobik7CisgICBpZiAobXNnKQorICAgICByZXR1cm4gKGNoYXIgKikgbXNnOworIAorLSAgbXNnID0gc3RyZXJyb3IgKG4pOworKyAgeworKyAgICBjaGFyICpyZXN1bHQgPSBzdHJlcnJvciAobik7CisgCistICAvKiBPdXIgc3RyZXJyb3JfciBpbXBsZW1lbnRhdGlvbiBtaWdodCB1c2UgdGhlIHN5c3RlbSdzIHN0cmVycm9yCistICAgICBidWZmZXIsIHNvIGFsbCBvdGhlciBjbGllbnRzIG9mIHN0cmVycm9yIGhhdmUgdG8gc2VlIHRoZSBlcnJvcgorLSAgICAgY29waWVkIGludG8gYSBidWZmZXIgdGhhdCB3ZSBtYW5hZ2UuICBUaGlzIGlzIG5vdCB0aHJlYWQtc2FmZSwKKy0gICAgIGV2ZW4gaWYgdGhlIHN5c3RlbSBzdHJlcnJvciBpcywgYnV0IHBvcnRhYmxlIHByb2dyYW1zIHNob3VsZG4ndAorLSAgICAgYmUgdXNpbmcgc3RyZXJyb3IgaWYgdGhleSBjYXJlIGFib3V0IHRocmVhZC1zYWZldHkuICAqLworLSAgaWYgKCFtc2cgfHwgISptc2cpCistICAgIHsKKy0gICAgICBzdGF0aWMgY2hhciBjb25zdCBmbXRbXSA9ICJVbmtub3duIGVycm9yICVkIjsKKy0gICAgICB2ZXJpZnkgKHNpemVvZiBidWYgPj0gc2l6ZW9mIChmbXQpICsgSU5UX1NUUkxFTl9CT1VORCAobikpOworLSAgICAgIHNwcmludGYgKGJ1ZiwgZm10LCBuKTsKKy0gICAgICBlcnJubyA9IEVJTlZBTDsKKy0gICAgICByZXR1cm4gYnVmOworLSAgICB9CisrICAgIGlmIChyZXN1bHQgPT0gTlVMTCB8fCByZXN1bHRbMF0gPT0gJ1wwJykKKysgICAgICB7CisrICAgICAgICBzdGF0aWMgY2hhciBjb25zdCBmbXRbXSA9ICJVbmtub3duIGVycm9yICglZCkiOworKyAgICAgICAgc3RhdGljIGNoYXIgbXNnX2J1ZltzaXplb2YgZm10ICsgSU5UX1NUUkxFTl9CT1VORCAobildOworKyAgICAgICAgc3ByaW50ZiAobXNnX2J1ZiwgZm10LCBuKTsKKysgICAgICAgIHJldHVybiBtc2dfYnVmOworKyAgICAgIH0KKyAKKy0gIC8qIEZpeCBTVEFDS0JVRl9MRU4gaWYgdGhpcyBldmVyIGFib3J0cy4gICovCistICBsZW4gPSBzdHJsZW4gKG1zZyk7CistICBpZiAoc2l6ZW9mIGJ1ZiA8PSBsZW4pCistICAgIGFib3J0ICgpOworLQorLSAgcmV0dXJuIG1lbWNweSAoYnVmLCBtc2csIGxlbiArIDEpOworKyAgICByZXR1cm4gcmVzdWx0OworKyAgfQorIH0KKysKKysjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuYyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdHJlcnJvci1vdmVycmlkZS5jCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdHJlcnJvci1vdmVycmlkZS5jCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuYwkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorQEAgLTEsMjc5ICswLDAgQEAKKy0vKiBzdHJlcnJvci1vdmVycmlkZS5jIC0tLSBQT1NJWCBjb21wYXRpYmxlIHN5c3RlbSBlcnJvciByb3V0aW5lCistCistICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCistICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworLQorLS8qIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDEwLiAgKi8KKy0KKy0jaW5jbHVkZSA8Y29uZmlnLmg+CistCistI2luY2x1ZGUgInN0cmVycm9yLW92ZXJyaWRlLmgiCistCistI2luY2x1ZGUgPGVycm5vLmg+CistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VTT0NLIC8qIG5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcyAqLworLSMgaWYgSEFWRV9XSU5TT0NLMl9ICistIyAgaW5jbHVkZSA8d2luc29jazIuaD4KKy0jIGVuZGlmCistI2VuZGlmCistCistLyogSWYgRVJSTlVNIG1hcHMgdG8gYW4gZXJybm8gdmFsdWUgZGVmaW5lZCBieSBnbnVsaWIsIHJldHVybiBhIHN0cmluZworLSAgIGRlc2NyaWJpbmcgdGhlIGVycm9yLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KKy1jb25zdCBjaGFyICoKKy1zdHJlcnJvcl9vdmVycmlkZSAoaW50IGVycm51bSkKKy17CistICAvKiBUaGVzZSBlcnJvciBtZXNzYWdlcyBhcmUgdGFrZW4gZnJvbSBnbGliYy9zeXNkZXBzL2dudS9lcnJsaXN0LmMuICAqLworLSAgc3dpdGNoIChlcnJudW0pCistICAgIHsKKy0jaWYgUkVQTEFDRV9TVFJFUlJPUl8wCistICAgIGNhc2UgMDoKKy0gICAgICByZXR1cm4gIlN1Y2Nlc3MiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FVFhUQlNZCistICAgIGNhc2UgRVRYVEJTWToKKy0gICAgICByZXR1cm4gIlRleHQgZmlsZSBidXN5IjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRVNPQ0sgLyogbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zICovCistICAgICAgLyogRVdPVUxEQkxPQ0sgaXMgdGhlIHNhbWUgYXMgRUFHQUlOLiAgKi8KKy0gICAgY2FzZSBFSU5QUk9HUkVTUzoKKy0gICAgICByZXR1cm4gIk9wZXJhdGlvbiBub3cgaW4gcHJvZ3Jlc3MiOworLSAgICBjYXNlIEVBTFJFQURZOgorLSAgICAgIHJldHVybiAiT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MiOworLSAgICBjYXNlIEVOT1RTT0NLOgorLSAgICAgIHJldHVybiAiU29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0IjsKKy0gICAgY2FzZSBFREVTVEFERFJSRVE6CistICAgICAgcmV0dXJuICJEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkIjsKKy0gICAgY2FzZSBFTVNHU0laRToKKy0gICAgICByZXR1cm4gIk1lc3NhZ2UgdG9vIGxvbmciOworLSAgICBjYXNlIEVQUk9UT1RZUEU6CistICAgICAgcmV0dXJuICJQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQiOworLSAgICBjYXNlIEVOT1BST1RPT1BUOgorLSAgICAgIHJldHVybiAiUHJvdG9jb2wgbm90IGF2YWlsYWJsZSI7CistICAgIGNhc2UgRVBST1RPTk9TVVBQT1JUOgorLSAgICAgIHJldHVybiAiUHJvdG9jb2wgbm90IHN1cHBvcnRlZCI7CistICAgIGNhc2UgRVNPQ0tUTk9TVVBQT1JUOgorLSAgICAgIHJldHVybiAiU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZCI7CistICAgIGNhc2UgRU9QTk9UU1VQUDoKKy0gICAgICByZXR1cm4gIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIjsKKy0gICAgY2FzZSBFUEZOT1NVUFBPUlQ6CistICAgICAgcmV0dXJuICJQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZCI7CistICAgIGNhc2UgRUFGTk9TVVBQT1JUOgorLSAgICAgIHJldHVybiAiQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCI7CistICAgIGNhc2UgRUFERFJJTlVTRToKKy0gICAgICByZXR1cm4gIkFkZHJlc3MgYWxyZWFkeSBpbiB1c2UiOworLSAgICBjYXNlIEVBRERSTk9UQVZBSUw6CistICAgICAgcmV0dXJuICJDYW5ub3QgYXNzaWduIHJlcXVlc3RlZCBhZGRyZXNzIjsKKy0gICAgY2FzZSBFTkVURE9XTjoKKy0gICAgICByZXR1cm4gIk5ldHdvcmsgaXMgZG93biI7CistICAgIGNhc2UgRU5FVFVOUkVBQ0g6CistICAgICAgcmV0dXJuICJOZXR3b3JrIGlzIHVucmVhY2hhYmxlIjsKKy0gICAgY2FzZSBFTkVUUkVTRVQ6CistICAgICAgcmV0dXJuICJOZXR3b3JrIGRyb3BwZWQgY29ubmVjdGlvbiBvbiByZXNldCI7CistICAgIGNhc2UgRUNPTk5BQk9SVEVEOgorLSAgICAgIHJldHVybiAiU29mdHdhcmUgY2F1c2VkIGNvbm5lY3Rpb24gYWJvcnQiOworLSAgICBjYXNlIEVDT05OUkVTRVQ6CistICAgICAgcmV0dXJuICJDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIiOworLSAgICBjYXNlIEVOT0JVRlM6CistICAgICAgcmV0dXJuICJObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIjsKKy0gICAgY2FzZSBFSVNDT05OOgorLSAgICAgIHJldHVybiAiVHJhbnNwb3J0IGVuZHBvaW50IGlzIGFscmVhZHkgY29ubmVjdGVkIjsKKy0gICAgY2FzZSBFTk9UQ09OTjoKKy0gICAgICByZXR1cm4gIlRyYW5zcG9ydCBlbmRwb2ludCBpcyBub3QgY29ubmVjdGVkIjsKKy0gICAgY2FzZSBFU0hVVERPV046CistICAgICAgcmV0dXJuICJDYW5ub3Qgc2VuZCBhZnRlciB0cmFuc3BvcnQgZW5kcG9pbnQgc2h1dGRvd24iOworLSAgICBjYXNlIEVUT09NQU5ZUkVGUzoKKy0gICAgICByZXR1cm4gIlRvbyBtYW55IHJlZmVyZW5jZXM6IGNhbm5vdCBzcGxpY2UiOworLSAgICBjYXNlIEVUSU1FRE9VVDoKKy0gICAgICByZXR1cm4gIkNvbm5lY3Rpb24gdGltZWQgb3V0IjsKKy0gICAgY2FzZSBFQ09OTlJFRlVTRUQ6CistICAgICAgcmV0dXJuICJDb25uZWN0aW9uIHJlZnVzZWQiOworLSAgICBjYXNlIEVMT09QOgorLSAgICAgIHJldHVybiAiVG9vIG1hbnkgbGV2ZWxzIG9mIHN5bWJvbGljIGxpbmtzIjsKKy0gICAgY2FzZSBFSE9TVERPV046CistICAgICAgcmV0dXJuICJIb3N0IGlzIGRvd24iOworLSAgICBjYXNlIEVIT1NUVU5SRUFDSDoKKy0gICAgICByZXR1cm4gIk5vIHJvdXRlIHRvIGhvc3QiOworLSAgICBjYXNlIEVQUk9DTElNOgorLSAgICAgIHJldHVybiAiVG9vIG1hbnkgcHJvY2Vzc2VzIjsKKy0gICAgY2FzZSBFVVNFUlM6CistICAgICAgcmV0dXJuICJUb28gbWFueSB1c2VycyI7CistICAgIGNhc2UgRURRVU9UOgorLSAgICAgIHJldHVybiAiRGlzayBxdW90YSBleGNlZWRlZCI7CistICAgIGNhc2UgRVNUQUxFOgorLSAgICAgIHJldHVybiAiU3RhbGUgTkZTIGZpbGUgaGFuZGxlIjsKKy0gICAgY2FzZSBFUkVNT1RFOgorLSAgICAgIHJldHVybiAiT2JqZWN0IGlzIHJlbW90ZSI7CistIyBpZiBIQVZFX1dJTlNPQ0syX0gKKy0gICAgICAvKiBXU0FfSU5WQUxJRF9IQU5ETEUgbWFwcyB0byBFQkFERiAqLworLSAgICAgIC8qIFdTQV9OT1RfRU5PVUdIX01FTU9SWSBtYXBzIHRvIEVOT01FTSAqLworLSAgICAgIC8qIFdTQV9JTlZBTElEX1BBUkFNRVRFUiBtYXBzIHRvIEVJTlZBTCAqLworLSAgICBjYXNlIFdTQV9PUEVSQVRJT05fQUJPUlRFRDoKKy0gICAgICByZXR1cm4gIk92ZXJsYXBwZWQgb3BlcmF0aW9uIGFib3J0ZWQiOworLSAgICBjYXNlIFdTQV9JT19JTkNPTVBMRVRFOgorLSAgICAgIHJldHVybiAiT3ZlcmxhcHBlZCBJL08gZXZlbnQgb2JqZWN0IG5vdCBpbiBzaWduYWxlZCBzdGF0ZSI7CistICAgIGNhc2UgV1NBX0lPX1BFTkRJTkc6CistICAgICAgcmV0dXJuICJPdmVybGFwcGVkIG9wZXJhdGlvbnMgd2lsbCBjb21wbGV0ZSBsYXRlciI7CistICAgICAgLyogV1NBRUlOVFIgbWFwcyB0byBFSU5UUiAqLworLSAgICAgIC8qIFdTQUVCQURGIG1hcHMgdG8gRUJBREYgKi8KKy0gICAgICAvKiBXU0FFQUNDRVMgbWFwcyB0byBFQUNDRVMgKi8KKy0gICAgICAvKiBXU0FFRkFVTFQgbWFwcyB0byBFRkFVTFQgKi8KKy0gICAgICAvKiBXU0FFSU5WQUwgbWFwcyB0byBFSU5WQUwgKi8KKy0gICAgICAvKiBXU0FFTUZJTEUgbWFwcyB0byBFTUZJTEUgKi8KKy0gICAgICAvKiBXU0FFV09VTERCTE9DSyBtYXBzIHRvIEVXT1VMREJMT0NLICovCistICAgICAgLyogV1NBRUlOUFJPR1JFU1MgaXMgRUlOUFJPR1JFU1MgKi8KKy0gICAgICAvKiBXU0FFQUxSRUFEWSBpcyBFQUxSRUFEWSAqLworLSAgICAgIC8qIFdTQUVOT1RTT0NLIGlzIEVOT1RTT0NLICovCistICAgICAgLyogV1NBRURFU1RBRERSUkVRIGlzIEVERVNUQUREUlJFUSAqLworLSAgICAgIC8qIFdTQUVNU0dTSVpFIGlzIEVNU0dTSVpFICovCistICAgICAgLyogV1NBRVBST1RPVFlQRSBpcyBFUFJPVE9UWVBFICovCistICAgICAgLyogV1NBRU5PUFJPVE9PUFQgaXMgRU5PUFJPVE9PUFQgKi8KKy0gICAgICAvKiBXU0FFUFJPVE9OT1NVUFBPUlQgaXMgRVBST1RPTk9TVVBQT1JUICovCistICAgICAgLyogV1NBRVNPQ0tUTk9TVVBQT1JUIGlzIEVTT0NLVE5PU1VQUE9SVCAqLworLSAgICAgIC8qIFdTQUVPUE5PVFNVUFAgaXMgRU9QTk9UU1VQUCAqLworLSAgICAgIC8qIFdTQUVQRk5PU1VQUE9SVCBpcyBFUEZOT1NVUFBPUlQgKi8KKy0gICAgICAvKiBXU0FFQUZOT1NVUFBPUlQgaXMgRUFGTk9TVVBQT1JUICovCistICAgICAgLyogV1NBRUFERFJJTlVTRSBpcyBFQUREUklOVVNFICovCistICAgICAgLyogV1NBRUFERFJOT1RBVkFJTCBpcyBFQUREUk5PVEFWQUlMICovCistICAgICAgLyogV1NBRU5FVERPV04gaXMgRU5FVERPV04gKi8KKy0gICAgICAvKiBXU0FFTkVUVU5SRUFDSCBpcyBFTkVUVU5SRUFDSCAqLworLSAgICAgIC8qIFdTQUVORVRSRVNFVCBpcyBFTkVUUkVTRVQgKi8KKy0gICAgICAvKiBXU0FFQ09OTkFCT1JURUQgaXMgRUNPTk5BQk9SVEVEICovCistICAgICAgLyogV1NBRUNPTk5SRVNFVCBpcyBFQ09OTlJFU0VUICovCistICAgICAgLyogV1NBRU5PQlVGUyBpcyBFTk9CVUZTICovCistICAgICAgLyogV1NBRUlTQ09OTiBpcyBFSVNDT05OICovCistICAgICAgLyogV1NBRU5PVENPTk4gaXMgRU5PVENPTk4gKi8KKy0gICAgICAvKiBXU0FFU0hVVERPV04gaXMgRVNIVVRET1dOICovCistICAgICAgLyogV1NBRVRPT01BTllSRUZTIGlzIEVUT09NQU5ZUkVGUyAqLworLSAgICAgIC8qIFdTQUVUSU1FRE9VVCBpcyBFVElNRURPVVQgKi8KKy0gICAgICAvKiBXU0FFQ09OTlJFRlVTRUQgaXMgRUNPTk5SRUZVU0VEICovCistICAgICAgLyogV1NBRUxPT1AgaXMgRUxPT1AgKi8KKy0gICAgICAvKiBXU0FFTkFNRVRPT0xPTkcgbWFwcyB0byBFTkFNRVRPT0xPTkcgKi8KKy0gICAgICAvKiBXU0FFSE9TVERPV04gaXMgRUhPU1RET1dOICovCistICAgICAgLyogV1NBRUhPU1RVTlJFQUNIIGlzIEVIT1NUVU5SRUFDSCAqLworLSAgICAgIC8qIFdTQUVOT1RFTVBUWSBtYXBzIHRvIEVOT1RFTVBUWSAqLworLSAgICAgIC8qIFdTQUVQUk9DTElNIGlzIEVQUk9DTElNICovCistICAgICAgLyogV1NBRVVTRVJTIGlzIEVVU0VSUyAqLworLSAgICAgIC8qIFdTQUVEUVVPVCBpcyBFRFFVT1QgKi8KKy0gICAgICAvKiBXU0FFU1RBTEUgaXMgRVNUQUxFICovCistICAgICAgLyogV1NBRVJFTU9URSBpcyBFUkVNT1RFICovCistICAgIGNhc2UgV1NBU1lTTk9UUkVBRFk6CistICAgICAgcmV0dXJuICJOZXR3b3JrIHN1YnN5c3RlbSBpcyB1bmF2YWlsYWJsZSI7CistICAgIGNhc2UgV1NBVkVSTk9UU1VQUE9SVEVEOgorLSAgICAgIHJldHVybiAiV2luc29jay5kbGwgdmVyc2lvbiBvdXQgb2YgcmFuZ2UiOworLSAgICBjYXNlIFdTQU5PVElOSVRJQUxJU0VEOgorLSAgICAgIHJldHVybiAiU3VjY2Vzc2Z1bCBXU0FTdGFydHVwIG5vdCB5ZXQgcGVyZm9ybWVkIjsKKy0gICAgY2FzZSBXU0FFRElTQ09OOgorLSAgICAgIHJldHVybiAiR3JhY2VmdWwgc2h1dGRvd24gaW4gcHJvZ3Jlc3MiOworLSAgICBjYXNlIFdTQUVOT01PUkU6IGNhc2UgV1NBX0VfTk9fTU9SRToKKy0gICAgICByZXR1cm4gIk5vIG1vcmUgcmVzdWx0cyI7CistICAgIGNhc2UgV1NBRUNBTkNFTExFRDogY2FzZSBXU0FfRV9DQU5DRUxMRUQ6CistICAgICAgcmV0dXJuICJDYWxsIHdhcyBjYW5jZWxlZCI7CistICAgIGNhc2UgV1NBRUlOVkFMSURQUk9DVEFCTEU6CistICAgICAgcmV0dXJuICJQcm9jZWR1cmUgY2FsbCB0YWJsZSBpcyBpbnZhbGlkIjsKKy0gICAgY2FzZSBXU0FFSU5WQUxJRFBST1ZJREVSOgorLSAgICAgIHJldHVybiAiU2VydmljZSBwcm92aWRlciBpcyBpbnZhbGlkIjsKKy0gICAgY2FzZSBXU0FFUFJPVklERVJGQUlMRURJTklUOgorLSAgICAgIHJldHVybiAiU2VydmljZSBwcm92aWRlciBmYWlsZWQgdG8gaW5pdGlhbGl6ZSI7CistICAgIGNhc2UgV1NBU1lTQ0FMTEZBSUxVUkU6CistICAgICAgcmV0dXJuICJTeXN0ZW0gY2FsbCBmYWlsdXJlIjsKKy0gICAgY2FzZSBXU0FTRVJWSUNFX05PVF9GT1VORDoKKy0gICAgICByZXR1cm4gIlNlcnZpY2Ugbm90IGZvdW5kIjsKKy0gICAgY2FzZSBXU0FUWVBFX05PVF9GT1VORDoKKy0gICAgICByZXR1cm4gIkNsYXNzIHR5cGUgbm90IGZvdW5kIjsKKy0gICAgY2FzZSBXU0FFUkVGVVNFRDoKKy0gICAgICByZXR1cm4gIkRhdGFiYXNlIHF1ZXJ5IHdhcyByZWZ1c2VkIjsKKy0gICAgY2FzZSBXU0FIT1NUX05PVF9GT1VORDoKKy0gICAgICByZXR1cm4gIkhvc3Qgbm90IGZvdW5kIjsKKy0gICAgY2FzZSBXU0FUUllfQUdBSU46CistICAgICAgcmV0dXJuICJOb25hdXRob3JpdGF0aXZlIGhvc3Qgbm90IGZvdW5kIjsKKy0gICAgY2FzZSBXU0FOT19SRUNPVkVSWToKKy0gICAgICByZXR1cm4gIk5vbnJlY292ZXJhYmxlIGVycm9yIjsKKy0gICAgY2FzZSBXU0FOT19EQVRBOgorLSAgICAgIHJldHVybiAiVmFsaWQgbmFtZSwgbm8gZGF0YSByZWNvcmQgb2YgcmVxdWVzdGVkIHR5cGUiOworLSAgICAgIC8qIFdTQV9RT1NfKiBvbWl0dGVkICovCistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FTk9NU0cKKy0gICAgY2FzZSBFTk9NU0c6CistICAgICAgcmV0dXJuICJObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZSI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VJRFJNCistICAgIGNhc2UgRUlEUk06CistICAgICAgcmV0dXJuICJJZGVudGlmaWVyIHJlbW92ZWQiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FTk9MSU5LCistICAgIGNhc2UgRU5PTElOSzoKKy0gICAgICByZXR1cm4gIkxpbmsgaGFzIGJlZW4gc2V2ZXJlZCI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VQUk9UTworLSAgICBjYXNlIEVQUk9UTzoKKy0gICAgICByZXR1cm4gIlByb3RvY29sIGVycm9yIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRU1VTFRJSE9QCistICAgIGNhc2UgRU1VTFRJSE9QOgorLSAgICAgIHJldHVybiAiTXVsdGlob3AgYXR0ZW1wdGVkIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRUJBRE1TRworLSAgICBjYXNlIEVCQURNU0c6CistICAgICAgcmV0dXJuICJCYWQgbWVzc2FnZSI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VPVkVSRkxPVworLSAgICBjYXNlIEVPVkVSRkxPVzoKKy0gICAgICByZXR1cm4gIlZhbHVlIHRvbyBsYXJnZSBmb3IgZGVmaW5lZCBkYXRhIHR5cGUiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FTk9UU1VQCistICAgIGNhc2UgRU5PVFNVUDoKKy0gICAgICByZXR1cm4gIk5vdCBzdXBwb3J0ZWQiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FTkVUUkVTRVQKKy0gICAgY2FzZSBFTkVUUkVTRVQ6CistICAgICAgcmV0dXJuICJOZXR3b3JrIGRyb3BwZWQgY29ubmVjdGlvbiBvbiByZXNldCI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VDT05OQUJPUlRFRAorLSAgICBjYXNlIEVDT05OQUJPUlRFRDoKKy0gICAgICByZXR1cm4gIlNvZnR3YXJlIGNhdXNlZCBjb25uZWN0aW9uIGFib3J0IjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRVNUQUxFCistICAgIGNhc2UgRVNUQUxFOgorLSAgICAgIHJldHVybiAiU3RhbGUgTkZTIGZpbGUgaGFuZGxlIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRURRVU9UCistICAgIGNhc2UgRURRVU9UOgorLSAgICAgIHJldHVybiAiRGlzayBxdW90YSBleGNlZWRlZCI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VDQU5DRUxFRAorLSAgICBjYXNlIEVDQU5DRUxFRDoKKy0gICAgICByZXR1cm4gIk9wZXJhdGlvbiBjYW5jZWxlZCI7CistI2VuZGlmCistCistICAgIGRlZmF1bHQ6CistICAgICAgcmV0dXJuIE5VTEw7CistICAgIH0KKy19CitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0cmVycm9yLW92ZXJyaWRlLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0cmVycm9yLW92ZXJyaWRlLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKK0BAIC0xLDUyICswLDAgQEAKKy0vKiBzdHJlcnJvci1vdmVycmlkZS5oIC0tLSBQT1NJWCBjb21wYXRpYmxlIHN5c3RlbSBlcnJvciByb3V0aW5lCistCistICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCistICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworLQorLSNpZm5kZWYgX0dMX1NUUkVSUk9SX09WRVJSSURFX0gKKy0jIGRlZmluZSBfR0xfU1RSRVJST1JfT1ZFUlJJREVfSAorLQorLSMgaW5jbHVkZSA8ZXJybm8uaD4KKy0jIGluY2x1ZGUgPHN0ZGRlZi5oPgorLQorLS8qIFJlYXNvbmFibGUgYnVmZmVyIHNpemUgdGhhdCBzaG91bGQgbmV2ZXIgdHJpZ2dlciBFUkFOR0U7IGlmIHRoaXMKKy0gICBwcm92ZXMgdG9vIHNtYWxsLCB3ZSBpbnRlbnRpb25hbGx5IGFib3J0KCksIHRvIHJlbWluZCB1cyB0byBmaXgKKy0gICB0aGlzIHZhbHVlLiAgKi8KKy0jIGRlZmluZSBTVEFDS0JVRl9MRU4gMjU2CistCistLyogSWYgRVJSTlVNIG1hcHMgdG8gYW4gZXJybm8gdmFsdWUgZGVmaW5lZCBieSBnbnVsaWIsIHJldHVybiBhIHN0cmluZworLSAgIGRlc2NyaWJpbmcgdGhlIGVycm9yLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KKy0jIGlmIFJFUExBQ0VfU1RSRVJST1JfMCBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FVFhUQlNZIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VTT0NLIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VOT01TRyBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FSURSTSBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FTk9MSU5LIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VQUk9UTyBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FTVVMVElIT1AgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRUJBRE1TRyBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FT1ZFUkZMT1cgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRU5PVFNVUCBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FTkVUUkVTRVQgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRUNPTk5BQk9SVEVEIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VTVEFMRSBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FRFFVT1QgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRUNBTkNFTEVECistZXh0ZXJuIGNvbnN0IGNoYXIgKnN0cmVycm9yX292ZXJyaWRlIChpbnQgZXJybnVtKTsKKy0jIGVsc2UKKy0jICBkZWZpbmUgc3RyZXJyb3Jfb3ZlcnJpZGUoaWdub3JlZCkgTlVMTAorLSMgZW5kaWYKKy0KKy0jZW5kaWYgLyogX0dMX1NUUkVSUk9SX09WRVJSSURFX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyaW5nLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyaW5nLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0cmluZy5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyaW5nLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC40MTg0ODQ0NjEgLTA4MDAKK0BAIC0xNiw3ICsxNiw3IEBACisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0gKKysjaWZuZGVmIF9HTF9TVFJJTkdfSAorIAorICNpZiBfX0dOVUNfXyA+PSAzCisgQFBSQUdNQV9TWVNURU1fSEVBREVSQAorQEAgLTI2LDggKzI2LDggQEAKKyAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisgI0BJTkNMVURFX05FWFRAIEBORVhUX1NUUklOR19IQAorIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NUUklOR19ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0gKKysjaWZuZGVmIF9HTF9TVFJJTkdfSAorKyNkZWZpbmUgX0dMX1NUUklOR19ICisgCisgLyogTmV0QlNEIDUuMCBtaXMtZGVmaW5lcyBOVUxMLiAgKi8KKyAjaW5jbHVkZSA8c3RkZGVmLmg+CitAQCAtNTksMzYgKzU5LDYgQEAKKyAvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworIAorIAorLS8qIEZpbmQgdGhlIGluZGV4IG9mIHRoZSBsZWFzdC1zaWduaWZpY2FudCBzZXQgYml0LiAgKi8KKy0jaWYgQEdOVUxJQl9GRlNMQAorLSMgaWYgIUBIQVZFX0ZGU0xACistX0dMX0ZVTkNERUNMX1NZUyAoZmZzbCwgaW50LCAobG9uZyBpbnQgaSkpOworLSMgZW5kaWYKKy1fR0xfQ1hYQUxJQVNfU1lTIChmZnNsLCBpbnQsIChsb25nIGludCBpKSk7CistX0dMX0NYWEFMSUFTV0FSTiAoZmZzbCk7CistI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLSMgdW5kZWYgZmZzbAorLSMgaWYgSEFWRV9SQVdfREVDTF9GRlNMCistX0dMX1dBUk5fT05fVVNFIChmZnNsLCAiZmZzbCBpcyBub3QgcG9ydGFibGUgLSB1c2UgdGhlIGZmc2wgbW9kdWxlIik7CistIyBlbmRpZgorLSNlbmRpZgorLQorLQorLS8qIEZpbmQgdGhlIGluZGV4IG9mIHRoZSBsZWFzdC1zaWduaWZpY2FudCBzZXQgYml0LiAgKi8KKy0jaWYgQEdOVUxJQl9GRlNMTEAKKy0jIGlmICFASEFWRV9GRlNMTEAKKy1fR0xfRlVOQ0RFQ0xfU1lTIChmZnNsbCwgaW50LCAobG9uZyBsb25nIGludCBpKSk7CistIyBlbmRpZgorLV9HTF9DWFhBTElBU19TWVMgKGZmc2xsLCBpbnQsIChsb25nIGxvbmcgaW50IGkpKTsKKy1fR0xfQ1hYQUxJQVNXQVJOIChmZnNsbCk7CistI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLSMgdW5kZWYgZmZzbGwKKy0jIGlmIEhBVkVfUkFXX0RFQ0xfRkZTTEwKKy1fR0xfV0FSTl9PTl9VU0UgKGZmc2xsLCAiZmZzbGwgaXMgbm90IHBvcnRhYmxlIC0gdXNlIHRoZSBmZnNsbCBtb2R1bGUiKTsKKy0jIGVuZGlmCistI2VuZGlmCistCistCisgLyogUmV0dXJuIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBDIHdpdGhpbiBOIGJ5dGVzIG9mIFMsIG9yIE5VTEwuICAqLworICNpZiBAR05VTElCX01FTUNIUkAKKyAjIGlmIEBSRVBMQUNFX01FTUNIUkAKK0BAIC0xMDA3LDUgKzk3Nyw1IEBAIF9HTF9XQVJOX09OX1VTRSAoc3RydmVyc2NtcCwgInN0cnZlcnNjbXAKKyAjZW5kaWYKKyAKKyAKKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NUUklOR19IICovCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVFJJTkdfSCAqLworKyNlbmRpZiAvKiBfR0xfU1RSSU5HX0ggKi8KKysjZW5kaWYgLyogX0dMX1NUUklOR19IICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N5c19zdGF0LmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3lzX3N0YXQuaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3lzX3N0YXQuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N5c19zdGF0LmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC40MzA0ODQ0NjEgLTA4MDAKK0BAIC0zNCw3ICszNCw3IEBACisgI2Vsc2UKKyAvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TWVNfU1RBVF9ICisrI2lmbmRlZiBfR0xfU1lTX1NUQVRfSAorIAorIC8qIEdldCBubGlua190LiAgKi8KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitAQCAtNDUsOCArNDUsOCBAQAorIC8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyAjQElOQ0xVREVfTkVYVEAgQE5FWFRfU1lTX1NUQVRfSEAKKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TWVNfU1RBVF9ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1lTX1NUQVRfSAorKyNpZm5kZWYgX0dMX1NZU19TVEFUX0gKKysjZGVmaW5lIF9HTF9TWVNfU1RBVF9ICisgCisgLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworIAorQEAgLTY1Myw2ICs2NTMsNiBAQCBfR0xfV0FSTl9PTl9VU0UgKHV0aW1lbnNhdCwgInV0aW1lbnNhdCBpCisgI2VuZGlmCisgCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TWVNfU1RBVF9IICovCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TWVNfU1RBVF9IICovCisrI2VuZGlmIC8qIF9HTF9TWVNfU1RBVF9IICovCisrI2VuZGlmIC8qIF9HTF9TWVNfU1RBVF9IICovCisgI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3RpbWUuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi90aW1lLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3RpbWUuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3RpbWUuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjQzODQ4NDQ2MiAtMDgwMAorQEAgLTI4LDEzICsyOCwxMyBAQAorICAgIHdpdGhvdXQgYWRkaW5nIG91ciBvd24gZGVjbGFyYXRpb25zLiAgKi8KKyAjaWYgKGRlZmluZWQgX19uZWVkX3RpbWVfdCB8fCBkZWZpbmVkIF9fbmVlZF9jbG9ja190IFwKKyAgICAgIHx8IGRlZmluZWQgX19uZWVkX3RpbWVzcGVjIFwKKy0gICAgIHx8IGRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1RJTUVfSCkKKysgICAgIHx8IGRlZmluZWQgX0dMX1RJTUVfSCkKKyAKKyAjIEBJTkNMVURFX05FWFRAIEBORVhUX1RJTUVfSEAKKyAKKyAjZWxzZQorIAorLSMgZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9USU1FX0gKKysjIGRlZmluZSBfR0xfVElNRV9ICisgCisgIyBASU5DTFVERV9ORVhUQCBATkVYVF9USU1FX0hACisgCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3VuaXN0ZC5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3VuaXN0ZC5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi91bmlzdGQuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3VuaXN0ZC5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuNDUwNDg0NDYyIC0wODAwCitAQCAtMzYsNyArMzYsNyBAQAorICMgZGVmaW5lIF9HTF9XSU5TT0NLMl9IX1dJVE5FU1MKKyAKKyAvKiBOb3JtYWwgaW52b2NhdGlvbi4gICovCistI2VsaWYgIWRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1VOSVNURF9ICisrI2VsaWYgIWRlZmluZWQgX0dMX1VOSVNURF9ICisgCisgLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworICNpZiBASEFWRV9VTklTVERfSEAKK0BAIC01MSw4ICs1MSw4IEBACisgIyB1bmRlZiBfR0xfSU5DTFVESU5HX1dJTlNPQ0syX0gKKyAjZW5kaWYKKyAKKy0jaWYgIWRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1VOSVNURF9IICYmICFkZWZpbmVkIF9HTF9JTkNMVURJTkdfV0lOU09DSzJfSAorLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1VOSVNURF9ICisrI2lmICFkZWZpbmVkIF9HTF9VTklTVERfSCAmJiAhZGVmaW5lZCBfR0xfSU5DTFVESU5HX1dJTlNPQ0syX0gKKysjZGVmaW5lIF9HTF9VTklTVERfSAorIAorIC8qIE5ldEJTRCA1LjAgbWlzLWRlZmluZXMgTlVMTC4gIEFsc28gZ2V0IHNpemVfdC4gICovCisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorQEAgLTExNyw3NyArMTE3LDc4IEBACisgLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKyAKKyAKKy0vKiBIaWRlIHNvbWUgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZyb20gPHdpbnNvY2syLmg+LiAgKi8KKy0KKy0jaWYgQEdOVUxJQl9HRVRIT1NUTkFNRUAgJiYgQFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSEAKKy0jIGlmICFkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9TWVNfU09DS0VUX0gKKy0jICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorLSMgICB1bmRlZiBzb2NrZXQKKy0jICAgZGVmaW5lIHNvY2tldCAgICAgICAgICAgICAgc29ja2V0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIGNvbm5lY3QKKy0jICAgZGVmaW5lIGNvbm5lY3QgICAgICAgICAgICAgY29ubmVjdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBhY2NlcHQKKy0jICAgZGVmaW5lIGFjY2VwdCAgICAgICAgICAgICAgYWNjZXB0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIGJpbmQKKy0jICAgZGVmaW5lIGJpbmQgICAgICAgICAgICAgICAgYmluZF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBnZXRwZWVybmFtZQorLSMgICBkZWZpbmUgZ2V0cGVlcm5hbWUgICAgICAgICBnZXRwZWVybmFtZV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBnZXRzb2NrbmFtZQorLSMgICBkZWZpbmUgZ2V0c29ja25hbWUgICAgICAgICBnZXRzb2NrbmFtZV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBnZXRzb2Nrb3B0CistIyAgIGRlZmluZSBnZXRzb2Nrb3B0ICAgICAgICAgIGdldHNvY2tvcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgbGlzdGVuCistIyAgIGRlZmluZSBsaXN0ZW4gICAgICAgICAgICAgIGxpc3Rlbl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiByZWN2CistIyAgIGRlZmluZSByZWN2ICAgICAgICAgICAgICAgIHJlY3ZfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgc2VuZAorLSMgICBkZWZpbmUgc2VuZCAgICAgICAgICAgICAgICBzZW5kX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIHJlY3Zmcm9tCistIyAgIGRlZmluZSByZWN2ZnJvbSAgICAgICAgICAgIHJlY3Zmcm9tX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIHNlbmR0bworLSMgICBkZWZpbmUgc2VuZHRvICAgICAgICAgICAgICBzZW5kdG9fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgc2V0c29ja29wdAorLSMgICBkZWZpbmUgc2V0c29ja29wdCAgICAgICAgICBzZXRzb2Nrb3B0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIHNodXRkb3duCistIyAgIGRlZmluZSBzaHV0ZG93biAgICAgICAgICAgIHNodXRkb3duX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgZWxzZQorLSAgICBfR0xfV0FSTl9PTl9VU0UgKHNvY2tldCwKKy0gICAgICAgICAgICAgICAgICAgICAic29ja2V0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKGNvbm5lY3QsCistICAgICAgICAgICAgICAgICAgICAgImNvbm5lY3QoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoYWNjZXB0LAorLSAgICAgICAgICAgICAgICAgICAgICJhY2NlcHQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoYmluZCwKKy0gICAgICAgICAgICAgICAgICAgICAiYmluZCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChnZXRwZWVybmFtZSwKKy0gICAgICAgICAgICAgICAgICAgICAiZ2V0cGVlcm5hbWUoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0c29ja25hbWUsCistICAgICAgICAgICAgICAgICAgICAgImdldHNvY2tuYW1lKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHNvY2tvcHQsCistICAgICAgICAgICAgICAgICAgICAgImdldHNvY2tvcHQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAobGlzdGVuLAorLSAgICAgICAgICAgICAgICAgICAgICJsaXN0ZW4oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAocmVjdiwKKy0gICAgICAgICAgICAgICAgICAgICAicmVjdigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChzZW5kLAorLSAgICAgICAgICAgICAgICAgICAgICJzZW5kKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKHJlY3Zmcm9tLAorLSAgICAgICAgICAgICAgICAgICAgICJyZWN2ZnJvbSgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChzZW5kdG8sCistICAgICAgICAgICAgICAgICAgICAgInNlbmR0bygpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChzZXRzb2Nrb3B0LAorLSAgICAgICAgICAgICAgICAgICAgICJzZXRzb2Nrb3B0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKHNodXRkb3duLAorLSAgICAgICAgICAgICAgICAgICAgICJzaHV0ZG93bigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysjaWYgQEdOVUxJQl9HRVRIT1NUTkFNRUAKKysvKiBHZXQgYWxsIHBvc3NpYmxlIGRlY2xhcmF0aW9ucyBvZiBnZXRob3N0bmFtZSgpLiAgKi8KKysjIGlmIEBVTklTVERfSF9IQVZFX1dJTlNPQ0syX0hACisrIyAgaWYgIWRlZmluZWQgX0dMX1NZU19TT0NLRVRfSAorKyMgICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorKyMgICAgdW5kZWYgc29ja2V0CisrIyAgICBkZWZpbmUgc29ja2V0ICAgICAgICAgICAgICBzb2NrZXRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIGNvbm5lY3QKKysjICAgIGRlZmluZSBjb25uZWN0ICAgICAgICAgICAgIGNvbm5lY3RfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIGFjY2VwdAorKyMgICAgZGVmaW5lIGFjY2VwdCAgICAgICAgICAgICAgYWNjZXB0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiBiaW5kCisrIyAgICBkZWZpbmUgYmluZCAgICAgICAgICAgICAgICBiaW5kX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiBnZXRwZWVybmFtZQorKyMgICAgZGVmaW5lIGdldHBlZXJuYW1lICAgICAgICAgZ2V0cGVlcm5hbWVfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIGdldHNvY2tuYW1lCisrIyAgICBkZWZpbmUgZ2V0c29ja25hbWUgICAgICAgICBnZXRzb2NrbmFtZV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgZ2V0c29ja29wdAorKyMgICAgZGVmaW5lIGdldHNvY2tvcHQgICAgICAgICAgZ2V0c29ja29wdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgbGlzdGVuCisrIyAgICBkZWZpbmUgbGlzdGVuICAgICAgICAgICAgICBsaXN0ZW5fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIHJlY3YKKysjICAgIGRlZmluZSByZWN2ICAgICAgICAgICAgICAgIHJlY3ZfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIHNlbmQKKysjICAgIGRlZmluZSBzZW5kICAgICAgICAgICAgICAgIHNlbmRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIHJlY3Zmcm9tCisrIyAgICBkZWZpbmUgcmVjdmZyb20gICAgICAgICAgICByZWN2ZnJvbV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgc2VuZHRvCisrIyAgICBkZWZpbmUgc2VuZHRvICAgICAgICAgICAgICBzZW5kdG9fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIHNldHNvY2tvcHQKKysjICAgIGRlZmluZSBzZXRzb2Nrb3B0ICAgICAgICAgIHNldHNvY2tvcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIHNodXRkb3duCisrIyAgICBkZWZpbmUgc2h1dGRvd24gICAgICAgICAgICBzaHV0ZG93bl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICBlbHNlCisrICAgICBfR0xfV0FSTl9PTl9VU0UgKHNvY2tldCwKKysgICAgICAgICAgICAgICAgICAgICAgInNvY2tldCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoY29ubmVjdCwKKysgICAgICAgICAgICAgICAgICAgICAgImNvbm5lY3QoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGFjY2VwdCwKKysgICAgICAgICAgICAgICAgICAgICAgImFjY2VwdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoYmluZCwKKysgICAgICAgICAgICAgICAgICAgICAgImJpbmQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHBlZXJuYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAiZ2V0cGVlcm5hbWUoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHNvY2tuYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAiZ2V0c29ja25hbWUoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHNvY2tvcHQsCisrICAgICAgICAgICAgICAgICAgICAgICJnZXRzb2Nrb3B0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChsaXN0ZW4sCisrICAgICAgICAgICAgICAgICAgICAgICJsaXN0ZW4oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKHJlY3YsCisrICAgICAgICAgICAgICAgICAgICAgICJyZWN2KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChzZW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAic2VuZCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAocmVjdmZyb20sCisrICAgICAgICAgICAgICAgICAgICAgICJyZWN2ZnJvbSgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoc2VuZHRvLAorKyAgICAgICAgICAgICAgICAgICAgICAic2VuZHRvKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChzZXRzb2Nrb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoc2h1dGRvd24sCisrICAgICAgICAgICAgICAgICAgICAgICJzaHV0ZG93bigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysjICAgZW5kaWYKKyAjICBlbmRpZgorLSMgZW5kaWYKKy0jIGlmICFkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9TWVNfU0VMRUNUX0gKKy0jICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorLSMgICB1bmRlZiBzZWxlY3QKKy0jICAgZGVmaW5lIHNlbGVjdCAgICAgICAgICAgICAgc2VsZWN0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NlbGVjdF9oCistIyAgZWxzZQorLSAgICBfR0xfV0FSTl9PTl9VU0UgKHNlbGVjdCwKKy0gICAgICAgICAgICAgICAgICAgICAic2VsZWN0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NlbGVjdC5oPiIpOworKyMgIGlmICFkZWZpbmVkIF9HTF9TWVNfU0VMRUNUX0gKKysjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKysjICAgIHVuZGVmIHNlbGVjdAorKyMgICAgZGVmaW5lIHNlbGVjdCAgICAgICAgICAgICAgc2VsZWN0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NlbGVjdF9oCisrIyAgIGVsc2UKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoc2VsZWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAic2VsZWN0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NlbGVjdC5oPiIpOworKyMgICBlbmRpZgorICMgIGVuZGlmCisgIyBlbmRpZgorICNlbmRpZgorQEAgLTEwNjEsNyArMTA2Miw2IEBAIF9HTF9XQVJOX09OX1VTRSAocGlwZTIsICJwaXBlMiBpcyB1bnBvcnQKKyAgICBzcGVjaWZpY2F0aW9uIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4c2gvcHJlYWQuaHRtbD4uICAqLworICMgaWYgQFJFUExBQ0VfUFJFQURACisgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKy0jICAgdW5kZWYgcHJlYWQKKyAjICAgZGVmaW5lIHByZWFkIHJwbF9wcmVhZAorICMgIGVuZGlmCisgX0dMX0ZVTkNERUNMX1JQTCAocHJlYWQsIHNzaXplX3QsCitAQCAtMTA5Niw3ICsxMDk2LDYgQEAgX0dMX1dBUk5fT05fVVNFIChwcmVhZCwgInByZWFkIGlzIHVucG9ydAorICAgIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4c2gvcHdyaXRlLmh0bWw+LiAgKi8KKyAjIGlmIEBSRVBMQUNFX1BXUklURUAKKyAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorLSMgICB1bmRlZiBwd3JpdGUKKyAjICAgZGVmaW5lIHB3cml0ZSBycGxfcHdyaXRlCisgIyAgZW5kaWYKKyBfR0xfRlVOQ0RFQ0xfUlBMIChwd3JpdGUsIHNzaXplX3QsCitAQCAtMTQxNyw1ICsxNDE2LDUgQEAgX0dMX0NYWEFMSUFTV0FSTiAod3JpdGUpOworICNlbmRpZgorIAorIAorLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfVU5JU1REX0ggKi8KKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1VOSVNURF9IICovCisrI2VuZGlmIC8qIF9HTF9VTklTVERfSCAqLworKyNlbmRpZiAvKiBfR0xfVU5JU1REX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvdmVyaWZ5LmggbGliaWNvbnYtMS4xNC9zcmNsaWIvdmVyaWZ5LmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3ZlcmlmeS5oCTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvdmVyaWZ5LmgJMjAxMi0wMS0wOCAwMjowNzo0MC40OTQ0ODQ0NjQgLTA4MDAKK0BAIC0xNjQsMTMgKzE2NCwxMCBAQAorICAgICAoISFzaXplb2YgKF9HTF9WRVJJRllfVFlQRSAoUiwgRElBR05PU1RJQykpKQorIAorICMgaWZkZWYgX19jcGx1c3BsdXMKKy0jICBpZiAhR05VTElCX2RlZmluZWRfc3RydWN0X19nbF92ZXJpZnlfdHlwZQorIHRlbXBsYXRlIDxpbnQgdz4KKyAgIHN0cnVjdCBfZ2xfdmVyaWZ5X3R5cGUgeworICAgICB1bnNpZ25lZCBpbnQgX2dsX3ZlcmlmeV9lcnJvcl9pZl9uZWdhdGl2ZTogdzsKKyAgIH07CistIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9zdHJ1Y3RfX2dsX3ZlcmlmeV90eXBlIDEKKy0jICBlbmRpZgorICMgIGRlZmluZSBfR0xfVkVSSUZZX1RZUEUoUiwgRElBR05PU1RJQykgXAorICAgICBfZ2xfdmVyaWZ5X3R5cGU8KFIpID8gMSA6IC0xPgorICMgZWxpZiBkZWZpbmVkIF9HTF9IQVZFX19TVEFUSUNfQVNTRVJUCitAQCAtMjA5LDcgKzIwNiw3IEBAIHRlbXBsYXRlIDxpbnQgdz4KKyAjICBlbmRpZgorICMgZW5kaWYKKyAKKy0vKiBAYXNzZXJ0Lmggb21pdCBzdGFydEAgICovCisrIyBpZmRlZiBfR0xfVkVSSUZZX0gKKyAKKyAvKiBFYWNoIG9mIHRoZXNlIG1hY3JvcyB2ZXJpZmllcyB0aGF0IGl0cyBhcmd1bWVudCBSIGlzIG5vbnplcm8uICBUbworICAgIGJlIHBvcnRhYmxlLCBSIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGNvbnN0YW50IGV4cHJlc3Npb24uICBVbmxpa2UKK0BAIC0yMjEsMjMgKzIxOCwxNSBAQCB0ZW1wbGF0ZSA8aW50IHc+CisgICAgY29udGV4dHMsIGUuZy4sIHRoZSB0b3AgbGV2ZWwuICAqLworIAorIC8qIFZlcmlmeSByZXF1aXJlbWVudCBSIGF0IGNvbXBpbGUtdGltZSwgYXMgYW4gaW50ZWdlciBjb25zdGFudCBleHByZXNzaW9uLgorLSAgIFJldHVybiAxLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHZlcmlmeV9leHByIChSLCAxKS4KKy0KKy0gICB2ZXJpZnlfdHJ1ZSBpcyBvYnNvbGVzY2VudDsgcGxlYXNlIHVzZSB2ZXJpZnlfZXhwciBpbnN0ZWFkLiAgKi8KKy0KKy0jIGRlZmluZSB2ZXJpZnlfdHJ1ZShSKSBfR0xfVkVSSUZZX1RSVUUgKFIsICJ2ZXJpZnlfdHJ1ZSAoIiAjUiAiKSIpCisrICAgUmV0dXJuIDEuICAqLworIAorLS8qIFZlcmlmeSByZXF1aXJlbWVudCBSIGF0IGNvbXBpbGUtdGltZS4gIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlCistICAgZXhwcmVzc2lvbiBFLiAgKi8KKy0KKy0jIGRlZmluZSB2ZXJpZnlfZXhwcihSLCBFKSBcCistICAgIChfR0xfVkVSSUZZX1RSVUUgKFIsICJ2ZXJpZnlfZXhwciAoIiAjUiAiLCAiICNFICIpIikgPyAoRSkgOiAoRSkpCisrIyAgZGVmaW5lIHZlcmlmeV90cnVlKFIpIF9HTF9WRVJJRllfVFJVRSAoUiwgInZlcmlmeV90cnVlICgiICNSICIpIikKKyAKKyAvKiBWZXJpZnkgcmVxdWlyZW1lbnQgUiBhdCBjb21waWxlLXRpbWUsIGFzIGEgZGVjbGFyYXRpb24gd2l0aG91dCBhCisgICAgdHJhaWxpbmcgJzsnLiAgKi8KKyAKKy0jIGRlZmluZSB2ZXJpZnkoUikgX0dMX1ZFUklGWSAoUiwgInZlcmlmeSAoIiAjUiAiKSIpCisrIyAgZGVmaW5lIHZlcmlmeShSKSBfR0xfVkVSSUZZIChSLCAidmVyaWZ5ICgiICNSICIpIikKKyAKKy0vKiBAYXNzZXJ0Lmggb21pdCBlbmRAICAqLworKyMgZW5kaWYKKyAKKyAjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9jYW5vbmljYWxpemUubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9jYW5vbmljYWxpemUubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvY2Fub25pY2FsaXplLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9jYW5vbmljYWxpemUubTQJMjAxMi0wMS0wOCAwMjowNzo0MC41NjY0ODQ0NjkgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgY2Fub25pY2FsaXplLm00IHNlcmlhbCAyMworKyMgY2Fub25pY2FsaXplLm00IHNlcmlhbCAyMQorIAorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNywgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorQEAgLTEwLDYgKzEwLDggQEAgZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsbworICMgbm90IHByb3ZpZGUgb3IgZml4IHJlYWxwYXRoLgorIEFDX0RFRlVOKFtnbF9GVU5DX0NBTk9OSUNBTElaRV9GSUxFTkFNRV9NT0RFXSwKKyBbCisrICBBQ19MSUJPQkooW2Nhbm9uaWNhbGl6ZV0pCisrCisgICBBQ19SRVFVSVJFKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorICAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbY2Fub25pY2FsaXplX2ZpbGVfbmFtZV0pCisgICBBQ19SRVFVSVJFKFtnbF9ET1VCTEVfU0xBU0hfUk9PVF0pCitAQCAtMjgsMTQgKzMwLDE2IEBAIEFDX0RFRlVOKFtnbF9DQU5PTklDQUxJWkVfTEdQTF0sCisgICBBQ19SRVFVSVJFKFtnbF9DQU5PTklDQUxJWkVfTEdQTF9TRVBBUkFURV0pCisgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2Nhbm9uaWNhbGl6ZV9maWxlX25hbWUgPSBubzsgdGhlbgorICAgICBIQVZFX0NBTk9OSUNBTElaRV9GSUxFX05BTUU9MAorKyAgICBBQ19MSUJPQkooW2Nhbm9uaWNhbGl6ZS1sZ3BsXSkKKyAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19yZWFscGF0aCA9IG5vOyB0aGVuCisgICAgICAgSEFWRV9SRUFMUEFUSD0wCisgICAgIGVsaWYgdGVzdCAiJGdsX2N2X2Z1bmNfcmVhbHBhdGhfd29ya3MiICE9IHllczsgdGhlbgorICAgICAgIFJFUExBQ0VfUkVBTFBBVEg9MQorICAgICBmaQorICAgZWxpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19yZWFscGF0aF93b3JrcyIgIT0geWVzOyB0aGVuCistICAgIFJFUExBQ0VfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRT0xCisrICAgIEFDX0xJQk9CSihbY2Fub25pY2FsaXplLWxncGxdKQorICAgICBSRVBMQUNFX1JFQUxQQVRIPTEKKysgICAgUkVQTEFDRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FPTEKKyAgIGZpCisgXSkKKyAKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9lcnJub19oLm00IGxpYmljb252LTEuMTQvc3JjbTQvZXJybm9faC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9lcnJub19oLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9lcnJub19oLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNTkwNDg0NDY5IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIGVycm5vX2gubTQgc2VyaWFsIDEwCisrIyBlcnJub19oLm00IHNlcmlhbCA5CisgZG5sIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTM0LDEyICszNCw2IEBAIGJvb2JvbworICNpZiAhZGVmaW5lZCBFTk9UU1VQCisgYm9vYm9vCisgI2VuZGlmCistI2lmICFkZWZpbmVkIEVORVRSRVNFVAorLWJvb2JvbworLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBFQ09OTkFCT1JURUQKKy1ib29ib28KKy0jZW5kaWYKKyAjaWYgIWRlZmluZWQgRVNUQUxFCisgYm9vYm9vCisgI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZXJyb3IubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9lcnJvci5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9lcnJvci5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvZXJyb3IubTQJMjAxMi0wMS0wOCAwMjowNzo0MC41OTg0ODQ0NzAgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSNzZXJpYWwgMTQKKysjc2VyaWFsIDEzCisgCisgIyBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OCwgMjAwMS0yMDA0LCAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIworQEAgLTgsOCArOCwxNiBAQAorIAorIEFDX0RFRlVOKFtnbF9FUlJPUl0sCisgWworLSAgZG5sIFdlIGRvbid0IHVzZSBBQ19GVU5DX0VSUk9SX0FUX0xJTkUgYW55IG1vcmUsIGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyCistICBkbmwgbWFpbnRhaW5lZCBpbiBBdXRvY29uZiBhbmQgYmVjYXVzZSBpdCBpbnZva2VzIEFDX0xJQk9CSi4KKysgIEFDX0ZVTkNfRVJST1JfQVRfTElORQorKyAgZG5sIE5vdGU6IEFDX0ZVTkNfRVJST1JfQVRfTElORSBkb2VzIEFDX0xJQlNPVVJDRVMoW2Vycm9yLmgsIGVycm9yLmNdKS4KKysgIGdsX1BSRVJFUV9FUlJPUgorK10pCisrCisrIyBSZWRlZmluZSBBQ19GVU5DX0VSUk9SX0FUX0xJTkUsIGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyIG1haW50YWluZWQgaW4KKysjIEF1dG9jb25mLgorK0FDX0RFRlVOKFtBQ19GVU5DX0VSUk9SX0FUX0xJTkVdLAorK1sKKysgIEFDX0xJQlNPVVJDRVMoW2Vycm9yLmgsIGVycm9yLmNdKWRubAorICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBlcnJvcl9hdF9saW5lXSwgW2FjX2N2X2xpYl9lcnJvcl9hdF9saW5lXSwKKyAgICAgW0FDX0xJTktfSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorQEAgLTE3LDYgKzI1LDkgQEAgQUNfREVGVU4oW2dsX0VSUk9SXSwKKyAgICAgICAgICAgW1tlcnJvcl9hdF9saW5lICgwLCAwLCAiIiwgMCwgImFuIGVycm9yIG9jY3VycmVkIik7XV0pXSwKKyAgICAgICAgW2FjX2N2X2xpYl9lcnJvcl9hdF9saW5lPXllc10sCisgICAgICAgIFthY19jdl9saWJfZXJyb3JfYXRfbGluZT1ub10pXSkKKysgIGlmIHRlc3QgJGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lID0gbm87IHRoZW4KKysgICAgQUNfTElCT0JKKFtlcnJvcl0pCisrICBmaQorIF0pCisgCisgIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9lcnJvci5jLgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2V4dGVuc2lvbnMubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9leHRlbnNpb25zLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2V4dGVuc2lvbnMubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L2V4dGVuc2lvbnMubTQJMjAxMi0wMS0wOCAwMjowNzo0MC42MDY0ODQ0NzEgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgc2VyaWFsIDEwICAtKi0gQXV0b2NvbmYgLSotCisrIyBzZXJpYWwgOSAgLSotIEF1dG9jb25mIC0qLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbS4KKyAKKyAjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNi0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQEAgLTY3LDEwICs2Nyw2IEBAIEFDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pZG5sCisgI2lmbmRlZiBfQUxMX1NPVVJDRQorICMgdW5kZWYgX0FMTF9TT1VSQ0UKKyAjZW5kaWYKKy0vKiBFbmFibGUgZ2VuZXJhbCBleHRlbnNpb25zIG9uIE1hY09TIFguICAqLworLSNpZm5kZWYgX0RBUldJTl9DX1NPVVJDRQorLSMgdW5kZWYgX0RBUldJTl9DX1NPVVJDRQorLSNlbmRpZgorIC8qIEVuYWJsZSBHTlUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSB0aGVtLiAgKi8KKyAjaWZuZGVmIF9HTlVfU09VUkNFCisgIyB1bmRlZiBfR05VX1NPVVJDRQorQEAgLTk5LDcgKzk1LDYgQEAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSlkbmwKKyAgIHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fID0geWVzICYmCisgICAgIEFDX0RFRklORShbX19FWFRFTlNJT05TX19dKQorICAgQUNfREVGSU5FKFtfQUxMX1NPVVJDRV0pCistICBBQ19ERUZJTkUoW19EQVJXSU5fQ19TT1VSQ0VdKQorICAgQUNfREVGSU5FKFtfR05VX1NPVVJDRV0pCisgICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCisgICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9nbnVsaWItY2FjaGUubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9nbnVsaWItY2FjaGUubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZ251bGliLWNhY2hlLm00CTIwMTEtMDgtMDcgMDY6NDI6MTEuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9nbnVsaWItY2FjaGUubTQJMjAxMi0wMS0wOCAwMjowNzo0My4xNTQ0ODQ1OTMgLTA4MDAKK0BAIC0xNSw3ICsxNSw3IEBACisgCisgCisgIyBTcGVjaWZpY2F0aW9uIGluIHRoZSBmb3JtIG9mIGEgY29tbWFuZC1saW5lIGludm9jYXRpb246CistIyAgIGdudWxpYi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1sb2NhbC1kaXI9Z251bGliLWxvY2FsIC0tbGliPWxpYmljcnQgLS1zb3VyY2UtYmFzZT1zcmNsaWIgLS1tNC1iYXNlPXNyY200IC0tZG9jLWJhc2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAtLWF1eC1kaXI9YnVpbGQtYXV4IC0tbWFrZWZpbGUtbmFtZT1NYWtlZmlsZS5nbnVsaWIgLS1uby1jb25kaXRpb25hbC1kZXBlbmRlbmNpZXMgLS1uby1saWJ0b29sIC0tbWFjcm8tcHJlZml4PWdsIC0tbm8tdmMtZmlsZXMgYmluYXJ5LWlvIGVycm9yIGdldHRleHQgZ2V0dGV4dC1oIGxpYmljb252LW1pc2MgbWJzdGF0ZSBtZW1tb3ZlIHByb2duYW1lIHJlbG9jYXRhYmxlLXByb2cgc2FmZS1yZWFkIHNpZ3BpcGUgc3RkaW8gc3RkbGliIHN0cmVycm9yIHVuaXN0ZCB1bml3aWR0aC93aWR0aCB1bmxvY2tlZC1pbyB4YWxsb2MKKysjICAgZ251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxvY2FsLWRpcj1nbnVsaWItbG9jYWwgLS1saWI9bGliaWNydCAtLXNvdXJjZS1iYXNlPXNyY2xpYiAtLW00LWJhc2U9c3JjbTQgLS1kb2MtYmFzZT1kb2MgLS10ZXN0cy1iYXNlPXRlc3RzIC0tYXV4LWRpcj1idWlsZC1hdXggLS1tYWtlZmlsZS1uYW1lPU1ha2VmaWxlLmdudWxpYiAtLW5vLWxpYnRvb2wgLS1tYWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxlcyBiaW5hcnktaW8gZXJyb3IgZ2V0dGV4dCBnZXR0ZXh0LWggbGliaWNvbnYtbWlzYyBtYnN0YXRlIG1lbW1vdmUgcHJvZ25hbWUgcmVsb2NhdGFibGUgcmVsb2NhdGFibGUtcHJvZyBzYWZlLXJlYWQgc2lncGlwZSBzdGRpbyBzdGRsaWIgc3RyZXJyb3IgdW5pc3RkIHVuaXdpZHRoL3dpZHRoIHVubG9ja2VkLWlvIHhhbGxvYworIAorICMgU3BlY2lmaWNhdGlvbiBpbiB0aGUgZm9ybSBvZiBhIGZldyBnbnVsaWItdG9vbC5tNCBtYWNybyBpbnZvY2F0aW9uczoKKyBnbF9MT0NBTF9ESVIoW2dudWxpYi1sb2NhbF0pCitAQCAtMjgsNiArMjgsNyBAQCBnbF9NT0RVTEVTKFsKKyAgIG1ic3RhdGUKKyAgIG1lbW1vdmUKKyAgIHByb2duYW1lCisrICByZWxvY2F0YWJsZQorICAgcmVsb2NhdGFibGUtcHJvZworICAgc2FmZS1yZWFkCisgICBzaWdwaXBlCitAQCAtNDksNSArNTAsNCBAQCBnbF9MSUIoW2xpYmljcnRdKQorIGdsX01BS0VGSUxFX05BTUUoW01ha2VmaWxlLmdudWxpYl0pCisgZ2xfTUFDUk9fUFJFRklYKFtnbF0pCisgZ2xfUE9fRE9NQUlOKFtdKQorLWdsX1dJVE5FU1NfQ19ET01BSU4oW10pCisgZ2xfVkNfRklMRVMoW2ZhbHNlXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9nbnVsaWItY29tbW9uLm00IGxpYmljb252LTEuMTQvc3JjbTQvZ251bGliLWNvbW1vbi5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9nbnVsaWItY29tbW9uLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9nbnVsaWItY29tbW9uLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNjM0NDg0NDcxIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIGdudWxpYi1jb21tb24ubTQgc2VyaWFsIDI5CisrIyBnbnVsaWItY29tbW9uLm00IHNlcmlhbCAyNAorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0xMiwxOSArMTIsNiBAQCBBQ19ERUZVTihbZ2xfQ09NTU9OXSwgWworICAgQUNfUkVRVUlSRShbZ2xfQ09NTU9OX0JPRFldKQorIF0pCisgQUNfREVGVU4oW2dsX0NPTU1PTl9CT0RZXSwgWworLSAgQUhfVkVSQkFUSU0oW19Ob3JldHVybl0sCistWy8qIFRoZSBfTm9yZXR1cm4ga2V5d29yZCBvZiBkcmFmdCBDMVguICAqLworLSNpZm5kZWYgX05vcmV0dXJuCistIyBpZiAoMyA8PSBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gMiAmJiA4IDw9IF9fR05VQ19NSU5PUl9fKSBcCistICAgICAgfHwgMHg1MTEwIDw9IF9fU1VOUFJPX0MpCistIyAgZGVmaW5lIF9Ob3JldHVybiBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkKKy0jIGVsaWYgMTIwMCA8PSBfTVNDX1ZFUgorLSMgIGRlZmluZSBfTm9yZXR1cm4gX19kZWNsc3BlYyAobm9yZXR1cm4pCistIyBlbHNlCistIyAgZGVmaW5lIF9Ob3JldHVybgorLSMgZW5kaWYKKy0jZW5kaWYKKy1dKQorICAgQUhfVkVSQkFUSU0oW2lzb2M5OV9pbmxpbmVdLAorIFsvKiBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBBcHBsZSBHQ0MgNC4wLjEgYnVpbGQgNTQ2NTogSW4gQzk5IG1vZGUsIGl0IHN1cHBvcnRzCisgICAgdGhlIElTTyBDIDk5IHNlbWFudGljcyBvZiAnZXh0ZXJuIGlubGluZScgKHVubGlrZSB0aGUgR05VIEMgc2VtYW50aWNzIG9mCitAQCAtNDcsMjAgKzM0LDYgQEAgQUNfREVGVU4oW2dsX0NPTU1PTl9CT0RZXSwgWworIC8qIFRoZSBuYW1lIF9VTlVTRURfUEFSQU1FVEVSXyBpcyBhbiBlYXJsaWVyIHNwZWxsaW5nLCBhbHRob3VnaCB0aGUgbmFtZQorICAgIGlzIGEgbWlzbm9tZXIgb3V0c2lkZSBvZiBwYXJhbWV0ZXIgbGlzdHMuICAqLworICNkZWZpbmUgX1VOVVNFRF9QQVJBTUVURVJfIF9HTF9VTlVTRUQKKy0KKy0vKiBUaGUgX19wdXJlX18gYXR0cmlidXRlIHdhcyBhZGRlZCBpbiBnY2MgMi45Ni4gICovCistI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NikKKy0jIGRlZmluZSBfR0xfQVRUUklCVVRFX1BVUkUgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSAvKiBlbXB0eSAqLworLSNlbmRpZgorLQorLS8qIFRoZSBfX2NvbnN0X18gYXR0cmlidXRlIHdhcyBhZGRlZCBpbiBnY2MgMi45NS4gICovCistI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NSkKKy0jIGRlZmluZSBfR0xfQVRUUklCVVRFX0NPTlNUIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKQorLSNlbHNlCistIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9DT05TVCAvKiBlbXB0eSAqLworLSNlbmRpZgorIF0pCisgICBkbmwgUHJlcGFyYXRpb24gZm9yIHJ1bm5pbmcgdGVzdCBwcm9ncmFtczoKKyAgIGRubCBUZWxsIGdsaWJjIHRvIHdyaXRlIGRpYWdub3N0aWNzIGZyb20gLURfRk9SVElGWV9TT1VSQ0U9MiB0byBzdGRlcnIsIG5vdAorQEAgLTc0LDQ5ICs0NywxNiBAQCBBQ19ERUZVTihbZ2xfQ09NTU9OX0JPRFldLCBbCisgIyBleHBhbmRzIHRvIGEgQyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byAxIG9yIDAsIGRlcGVuZGluZworICMgd2hldGhlciBhIGdudWxpYiBtb2R1bGUgdGhhdCBoYXMgYmVlbiByZXF1ZXN0ZWQgc2hhbGwgYmUgY29uc2lkZXJlZCBwcmVzZW50CisgIyBvciBub3QuCistbTRfZGVmaW5lKFtnbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTl0sIFsxXSkKKytBQ19ERUZVTihbZ2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT05dLCBbMV0pCisgCisgIyBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRShbbW9kdWxlbmFtZV0pCisgIyBzZXRzIHRoZSBzaGVsbCB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyB0aGUgcHJlc2VuY2Ugb2YgdGhlIGdpdmVuIG1vZHVsZSB0bworICMgYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgd2lsbCBldmFsdWF0ZSB0byAxLgorIEFDX0RFRlVOKFtnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV0sCisgWworLSAgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVfQVVYKAorLSAgICBbR05VTElCX1tdbTRfdHJhbnNsaXQoW1skMV1dLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSwKKy0gICAgW2dsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OXSkKKy1dKQorLQorLSMgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVfQVVYKFt2YXJpYWJsZV0pCistIyBtb2RpZmllcyB0aGUgc2hlbGwgdmFyaWFibGUgdG8gaW5jbHVkZSB0aGUgZ2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT04uCistIyBUaGUgc2hlbGwgdmFyaWFibGUncyB2YWx1ZSBpcyBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMKKy0jIHRvIDAgb3IgMS4KKy1BQ19ERUZVTihbZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVfQVVYXSwKKy1bCistICBtNF9pZihtNF9kZWZuKFtnbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTl0pLCBbMV0sCistICAgIFsKKy0gICAgIGRubCBTaW1wbGlmeSB0aGUgZXhwcmVzc2lvbiBWQUxVRSB8fCAxIHRvIDEuCistICAgICAkMT0xCistICAgIF0sCistICAgIFtnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV9BVVhfT1IoWyQxXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT05dKV0pCistXSkKKy0KKy0jIGdsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFX0FVWF9PUihbdmFyaWFibGVdLCBbY29uZGl0aW9uXSkKKy0jIG1vZGlmaWVzIHRoZSBzaGVsbCB2YXJpYWJsZSB0byBpbmNsdWRlIHRoZSBnaXZlbiBjb25kaXRpb24uICBUaGUgc2hlbGwKKy0jIHZhcmlhYmxlJ3MgdmFsdWUgaXMgYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDAgb3IgMS4KKy1BQ19ERUZVTihbZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVfQVVYX09SXSwKKy1bCistICBkbmwgU2ltcGxpZnkgdGhlIGV4cHJlc3Npb24gMSB8fCBDT05ESVRJT04gdG8gMS4KKy0gIGlmIHRlc3QgIiRbXSQxIiAhPSAxOyB0aGVuCistICAgIGRubCBTaW1wbGlmeSB0aGUgZXhwcmVzc2lvbiAwIHx8IENPTkRJVElPTiB0byBDT05ESVRJT04uCistICAgIGlmIHRlc3QgIiRbXSQxIiA9IDA7IHRoZW4KKy0gICAgICAkMT0kMgorLSAgICBlbHNlCistICAgICAgJDE9IigkW10kMSB8fCAkMikiCistICAgIGZpCistICBmaQorKyAgR05VTElCX1tdbTRfdHJhbnNsaXQoW1skMV1dLAorKyAgICBbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorKyAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKT1nbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTgorIF0pCisgCisgIyBnbF9NT0RVTEVfSU5ESUNBVE9SKFttb2R1bGVuYW1lXSkKK0BAIC0yMTEsMzUgKzE1MSw2IEBAIG00X2lmbmRlZihbQVNfVkFSX0lGXSwKKyBbbTRfZGVmaW5lKFtBU19WQVJfSUZdLAorIFtBU19JRihbdGVzdCB4IkFTX1ZBUl9HRVQoWyQxXSkiID0geCIiJDJdLCBbJDNdLCBbJDRdKV0pXSkKKyAKKy0jIGdsX1BST0dfQVJfUkFOTElCCistIyBEZXRlcm1pbmVzIHRoZSB2YWx1ZXMgZm9yIEFSLCBBUkZMQUdTLCBSQU5MSUIgdGhhdCBmaXQgd2l0aCB0aGUgY29tcGlsZXIuCistQUNfREVGVU4oW2dsX1BST0dfQVJfUkFOTElCXSwKKy1bCistICBkbmwgTWluaXggMyBjb21lcyB3aXRoIHR3byB0b29sY2hhaW5zOiBUaGUgQW1zdGVyZGFtIENvbXBpbGVyIEtpdCBjb21waWxlcgorLSAgZG5sIGFzICJjYyIsIGFuZCBHQ0MgYXMgImdjYyIuIFRoZXkgaGF2ZSBkaWZmZXJlbnQgb2JqZWN0IGZpbGUgZm9ybWF0cyBhbmQKKy0gIGRubCBsaWJyYXJ5IGZvcm1hdHMuIEluIHBhcnRpY3VsYXIsIHRoZSBHTlUgYmludXRpbHMgcHJvZ3JhbXMgYXIsIHJhbmxpYgorLSAgZG5sIHByb2R1Y2UgbGlicmFyaWVzIHRoYXQgd29yayBvbmx5IHdpdGggZ2NjLCBub3Qgd2l0aCBjYy4KKy0gIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorLSAgQUNfRUdSRVBfQ1BQKFtBbXN0ZXJkYW1dLAorLSAgICBbCistI2lmZGVmIF9fQUNLX18KKy1BbXN0ZXJkYW0KKy0jZW5kaWYKKy0gICAgXSwKKy0gICAgW0FSPSdjYyAtYy5hJworLSAgICAgQVJGTEFHUz0nLW8nCistICAgICBSQU5MSUI9JzonCistICAgIF0sCistICAgIFtkbmwgVXNlIHRoZSBBdXRvbWFrZS1kb2N1bWVudGVkIGRlZmF1bHQgdmFsdWVzIGZvciBBUiBhbmQgQVJGTEFHUy4KKy0gICAgIEFSPSdhcicKKy0gICAgIEFSRkxBR1M9J2NydScKKy0gICAgIGRubCBVc2UgdGhlIHJhbmxpYiBwcm9ncmFtIGlmIGl0IGlzIGF2YWlsYWJsZS4KKy0gICAgIEFDX1BST0dfUkFOTElCCistICAgIF0pCistICBBQ19TVUJTVChbQVJdKQorLSAgQUNfU1VCU1QoW0FSRkxBR1NdKQorLV0pCistCisgIyBBQ19QUk9HX01LRElSX1AKKyAjIGlzIGEgYmFja3BvcnQgb2YgYXV0b2NvbmYtMi42MCdzIEFDX1BST0dfTUtESVJfUCwgd2l0aCBhIGZpeAorICMgZm9yIGludGVyb3BlcmFiaWxpdHkgd2l0aCBhdXRvbWFrZS0xLjkuNiBmcm9tIGF1dG9jb25mLTIuNjIuCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZ251bGliLWNvbXAubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9nbnVsaWItY29tcC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9nbnVsaWItY29tcC5tNAkyMDExLTA4LTA3IDA2OjQyOjEyLjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvZ251bGliLWNvbXAubTQJMjAxMi0wMS0wOCAwMjowNzo0My45MjI0ODQ2MzAgLTA4MDAKK0BAIC0yNSwxMiArMjUsMTQgQEAgQUNfREVGVU4oW2dsX0VBUkxZXSwKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9FUyRdKWRubCBhIHZhbGlkIGxvY2FsZSBuYW1lCisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTElCT0JKUyRdKWRubCBhIHZhcmlhYmxlCisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTFRMSUJPQkpTJF0pZG5sIGEgdmFyaWFibGUKKy0gIEFDX1JFUVVJUkUoW2dsX1BST0dfQVJfUkFOTElCXSkKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfUkFOTElCXSkKKyAgIEFDX1JFUVVJUkUoW0FNX1BST0dfQ0NfQ19PXSkKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBhbGxvY2Etb3B0OgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGFsbG9jYXRvcjoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBhcmVhZGxpbms6CisrICAjIENvZGUgZnJvbSBtb2R1bGUgYXJnLW5vbm51bGw6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgYmluYXJ5LWlvOgorKyAgIyBDb2RlIGZyb20gbW9kdWxlIGMrK2RlZnM6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgY2Fub25pY2FsaXplLWxncGw6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgY2FyZWFkbGlua2F0OgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGRvc25hbWU6CitAQCAtNDYsNyArNDgsNiBAQCBBQ19ERUZVTihbZ2xfRUFSTFldLAorICAgIyBDb2RlIGZyb20gbW9kdWxlIGhhdmVsaWI6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgaW5jbHVkZV9uZXh0OgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGludHByb3BzOgorLSAgIyBDb2RlIGZyb20gbW9kdWxlIGxhcmdlZmlsZToKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBsaWJpY29udi1taXNjOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGxzdGF0OgorICAgIyBDb2RlIGZyb20gbW9kdWxlIG1hbGxvY2E6CitAQCAtNjQsMTAgKzY1LDYgQEAgQUNfREVGVU4oW2dsX0VBUkxZXSwKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzaWduYWw6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc2lncGlwZToKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzaWdwcm9jbWFzazoKKy0gICMgQ29kZSBmcm9tIG1vZHVsZSBzbmlwcGV0L19Ob3JldHVybjoKKy0gICMgQ29kZSBmcm9tIG1vZHVsZSBzbmlwcGV0L2FyZy1ub25udWxsOgorLSAgIyBDb2RlIGZyb20gbW9kdWxlIHNuaXBwZXQvYysrZGVmczoKKy0gICMgQ29kZSBmcm9tIG1vZHVsZSBzbmlwcGV0L3dhcm4tb24tdXNlOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHNzaXplX3Q6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc3RhdDoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzdGRib29sOgorQEAgLTc3LDcgKzc0LDYgQEAgQUNfREVGVU4oW2dsX0VBUkxZXSwKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzdGRsaWI6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyZXE6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyZXJyb3I6CistICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyZXJyb3Itb3ZlcnJpZGU6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyaW5nOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHN5c19zdGF0OgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHRpbWU6CitAQCAtODcsNiArODMsNyBAQCBBQ19ERUZVTihbZ2xfRUFSTFldLAorICAgIyBDb2RlIGZyb20gbW9kdWxlIHVuaXdpZHRoL3dpZHRoOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHVubG9ja2VkLWlvOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHZlcmlmeToKKysgICMgQ29kZSBmcm9tIG1vZHVsZSB3YXJuLW9uLXVzZToKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSB4YWxsb2M6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgeHJlYWRsaW5rOgorIF0pCitAQCAtMTA5LDkgKzEwNiw2IEBAIEFDX0RFRlVOKFtnbF9JTklUXSwKKyAgIGdsX3NvdXJjZV9iYXNlPSdzcmNsaWInCisgZ2xfRlVOQ19BTExPQ0EKKyBnbF9DQU5PTklDQUxJWkVfTEdQTAorLWlmIHRlc3QgJEhBVkVfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSA9IDAgfHwgdGVzdCAkUkVQTEFDRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FID0gMTsgdGhlbgorLSAgQUNfTElCT0JKKFtjYW5vbmljYWxpemUtbGdwbF0pCistZmkKKyBnbF9NT0RVTEVfSU5ESUNBVE9SKFtjYW5vbmljYWxpemUtbGdwbF0pCisgZ2xfU1RETElCX01PRFVMRV9JTkRJQ0FUT1IoW2Nhbm9uaWNhbGl6ZV9maWxlX25hbWVdKQorIGdsX1NURExJQl9NT0RVTEVfSU5ESUNBVE9SKFtyZWFscGF0aF0pCitAQCAtMTIxLDEwICsxMTUsNiBAQCBnbF9FTlZJUk9OCisgZ2xfVU5JU1REX01PRFVMRV9JTkRJQ0FUT1IoW2Vudmlyb25dKQorIGdsX0hFQURFUl9FUlJOT19ICisgZ2xfRVJST1IKKy1pZiB0ZXN0ICRhY19jdl9saWJfZXJyb3JfYXRfbGluZSA9IG5vOyB0aGVuCistICBBQ19MSUJPQkooW2Vycm9yXSkKKy0gIGdsX1BSRVJFUV9FUlJPUgorLWZpCisgbTRfaWZkZWYoW0FNX1hHRVRURVhUX09QVElPTl0sCisgICBbQU1fXVtYR0VUVEVYVF9PUFRJT04oWy0tZmxhZz1lcnJvcjozOmMtZm9ybWF0XSkKKyAgICBBTV9dW1hHRVRURVhUX09QVElPTihbLS1mbGFnPWVycm9yX2F0X2xpbmU6NTpjLWZvcm1hdF0pXSkKK0BAIC0xMzQsNDMgKzEyNCwyNiBAQCBBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKFswLjE4LjFdKQorIEFDX1NVQlNUKFtMSUJJTlRMXSkKKyBBQ19TVUJTVChbTFRMSUJJTlRMXSkKKyBnbF9GVU5DX0xTVEFUCistaWYgdGVzdCAkUkVQTEFDRV9MU1RBVCA9IDE7IHRoZW4KKy0gIEFDX0xJQk9CSihbbHN0YXRdKQorLSAgZ2xfUFJFUkVRX0xTVEFUCistZmkKKyBnbF9TWVNfU1RBVF9NT0RVTEVfSU5ESUNBVE9SKFtsc3RhdF0pCisgZ2xfTUFMTE9DQQorIEFDX1RZUEVfTUJTVEFURV9UCisgZ2xfRlVOQ19NRU1NT1ZFCistaWYgdGVzdCAkYWNfY3ZfZnVuY19tZW1tb3ZlID0gbm87IHRoZW4KKy0gIEFDX0xJQk9CSihbbWVtbW92ZV0pCistICBnbF9QUkVSRVFfTUVNTU9WRQorLWZpCisgZ2xfTVVMVElBUkNICisgZ2xfUEFUSE1BWAorIEFDX0NIRUNLX0RFQ0xTKFtwcm9ncmFtX2ludm9jYXRpb25fbmFtZV0sIFtdLCBbXSwgWyNpbmNsdWRlIDxlcnJuby5oPl0pCisgQUNfQ0hFQ0tfREVDTFMoW3Byb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lXSwgW10sIFtdLCBbI2luY2x1ZGUgPGVycm5vLmg+XSkKKyBnbF9GVU5DX1JFQUQKKy1pZiB0ZXN0ICRSRVBMQUNFX1JFQUQgPSAxOyB0aGVuCistICBBQ19MSUJPQkooW3JlYWRdKQorLWZpCisgZ2xfVU5JU1REX01PRFVMRV9JTkRJQ0FUT1IoW3JlYWRdKQorIGdsX0ZVTkNfUkVBRExJTksKKy1pZiB0ZXN0ICRIQVZFX1JFQURMSU5LID0gMCB8fCB0ZXN0ICRSRVBMQUNFX1JFQURMSU5LID0gMTsgdGhlbgorLSAgQUNfTElCT0JKKFtyZWFkbGlua10pCistICBnbF9QUkVSRVFfUkVBRExJTksKKy1maQorIGdsX1VOSVNURF9NT0RVTEVfSU5ESUNBVE9SKFtyZWFkbGlua10pCisgZ2xfUkVMT0NBVEFCTEUoWyRnbF9zb3VyY2VfYmFzZV0pCistaWYgdGVzdCAkUkVMT0NBVEFCTEUgPSB5ZXM7IHRoZW4KKy0gIEFDX0xJQk9CSihbcHJvZ3JlbG9jXSkKKy1maQorIGdsX0ZVTkNfUkVBRExJTktfU0VQQVJBVEUKKyBnbF9DQU5PTklDQUxJWkVfTEdQTF9TRVBBUkFURQorIGdsX01BTExPQ0EKKy1nbF9SRUxPQ0FUQUJMRV9MSUJSQVJZCisrZ2xfUkVMT0NBVEFCTEVfTElCUkFSWV9TRVBBUkFURQorIGdsX0ZVTkNfU0VURU5WX1NFUEFSQVRFCistZ2xfUFJFUkVRX1NBRkVfUkVBRAorK2dsX0ZVTkNfU1RSRVJST1JfU0VQQVJBVEUKKytnbF9TQUZFX1JFQUQKKyBnbF9TSUdOQUxfSAorIGdsX1NJR05BTF9TSUdQSVBFCisgZG5sIERlZmluZSB0aGUgQyBtYWNybyBHTlVMSUJfU0lHUElQRSB0byAxLgorQEAgLTE4NiwxNyArMTU5LDkgQEAgZG5sIERlZmluZSB0aGUgc3Vic3RpdHV0ZWQgdmFyaWFibGUgR05VTAorIEFDX1JFUVVJUkUoW2dsX1VOSVNURF9IX0RFRkFVTFRTXSkKKyBHTlVMSUJfVU5JU1REX0hfU0lHUElQRT0xCisgZ2xfU0lHTkFMQkxPQ0tJTkcKKy1pZiB0ZXN0ICRIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HID0gMDsgdGhlbgorLSAgQUNfTElCT0JKKFtzaWdwcm9jbWFza10pCistICBnbF9QUkVSRVFfU0lHUFJPQ01BU0sKKy1maQorIGdsX1NJR05BTF9NT0RVTEVfSU5ESUNBVE9SKFtzaWdwcm9jbWFza10pCisgZ3RfVFlQRV9TU0laRV9UCisgZ2xfRlVOQ19TVEFUCistaWYgdGVzdCAkUkVQTEFDRV9TVEFUID0gMTsgdGhlbgorLSAgQUNfTElCT0JKKFtzdGF0XSkKKy0gIGdsX1BSRVJFUV9TVEFUCistZmkKKyBnbF9TWVNfU1RBVF9NT0RVTEVfSU5ESUNBVE9SKFtzdGF0XSkKKyBBTV9TVERCT09MX0gKKyBnbF9TVERERUZfSAorQEAgLTIwNCwxNyArMTY5LDcgQEAgZ2xfU1RESU5UX0gKKyBnbF9TVERJT19ICisgZ2xfU1RETElCX0gKKyBnbF9GVU5DX1NUUkVSUk9SCistaWYgdGVzdCAkUkVQTEFDRV9TVFJFUlJPUiA9IDE7IHRoZW4KKy0gIEFDX0xJQk9CSihbc3RyZXJyb3JdKQorLWZpCistZ2xfTU9EVUxFX0lORElDQVRPUihbc3RyZXJyb3JdKQorIGdsX1NUUklOR19NT0RVTEVfSU5ESUNBVE9SKFtzdHJlcnJvcl0pCistQUNfUkVRVUlSRShbZ2xfSEVBREVSX0VSUk5PX0hdKQorLUFDX1JFUVVJUkUoW2dsX0ZVTkNfU1RSRVJST1JfMF0pCistaWYgdGVzdCAtbiAiJEVSUk5PX0giIHx8IHRlc3QgJFJFUExBQ0VfU1RSRVJST1JfMCA9IDE7IHRoZW4KKy0gIEFDX0xJQk9CSihbc3RyZXJyb3Itb3ZlcnJpZGVdKQorLSAgZ2xfUFJFUkVRX1NZU19IX1dJTlNPQ0syCistZmkKKyBnbF9IRUFERVJfU1RSSU5HX0gKKyBnbF9IRUFERVJfU1lTX1NUQVRfSAorIEFDX1BST0dfTUtESVJfUAorQEAgLTM2NCwxNCArMzE5LDEzIEBAIEFDX0RFRlVOKFtnbHRlc3RzX0xJQlNPVVJDRVNdLCBbCisgIyBUaGlzIG1hY3JvIHJlY29yZHMgdGhlIGxpc3Qgb2YgZmlsZXMgd2hpY2ggaGF2ZSBiZWVuIGluc3RhbGxlZCBieQorICMgZ251bGliLXRvb2wgYW5kIG1heSBiZSByZW1vdmVkIGJ5IGZ1dHVyZSBnbnVsaWItdG9vbCBpbnZvY2F0aW9ucy4KKyBBQ19ERUZVTihbZ2xfRklMRV9MSVNUXSwgWworKyAgYnVpbGQtYXV4L2FyZy1ub25udWxsLmgKKysgIGJ1aWxkLWF1eC9jKytkZWZzLmgKKyAgIGJ1aWxkLWF1eC9jb25maWcubGlicGF0aAorICAgYnVpbGQtYXV4L2NvbmZpZy5ycGF0aAorICAgYnVpbGQtYXV4L2luc3RhbGwtcmVsb2MKKyAgIGJ1aWxkLWF1eC9yZWxvYy1sZGZsYWdzCistICBidWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaAorLSAgYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaAorLSAgYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oCistICBidWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oCisrICBidWlsZC1hdXgvd2Fybi1vbi11c2UuaAorICAgZG9jL3JlbG9jYXRhYmxlLnRleGkKKyAgIGxpYi9hbGxvY2EuaW4uaAorICAgbGliL2FsbG9jYXRvci5jCitAQCAtNDE5LDggKzM3Myw2IEBAIEFDX0RFRlVOKFtnbF9GSUxFX0xJU1RdLCBbCisgICBsaWIvc3RkaW8uaW4uaAorICAgbGliL3N0ZGxpYi5pbi5oCisgICBsaWIvc3RyZXEuaAorLSAgbGliL3N0cmVycm9yLW92ZXJyaWRlLmMKKy0gIGxpYi9zdHJlcnJvci1vdmVycmlkZS5oCisgICBsaWIvc3RyZXJyb3IuYworICAgbGliL3N0cmluZy5pbi5oCisgICBsaWIvc3lzX3N0YXQuaW4uaAorQEAgLTQ2Myw3ICs0MTUsNiBAQCBBQ19ERUZVTihbZ2xfRklMRV9MSVNUXSwgWworICAgbTQvaW50bWF4Lm00CisgICBtNC9pbnR0eXBlcy1wcmkubTQKKyAgIG00L2ludHR5cGVzX2gubTQKKy0gIG00L2xhcmdlZmlsZS5tNAorICAgbTQvbGNtZXNzYWdlLm00CisgICBtNC9saWItbGQubTQKKyAgIG00L2xpYi1saW5rLm00CitAQCAtNTAyLDcgKzQ1Myw2IEBAIEFDX0RFRlVOKFtnbF9GSUxFX0xJU1RdLCBbCisgICBtNC9zdGRsaWJfaC5tNAorICAgbTQvc3RyZXJyb3IubTQKKyAgIG00L3N0cmluZ19oLm00CistICBtNC9zeXNfc29ja2V0X2gubTQKKyAgIG00L3N5c19zdGF0X2gubTQKKyAgIG00L3RocmVhZGxpYi5tNAorICAgbTQvdGltZV9oLm00CitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvaW5jbHVkZV9uZXh0Lm00IGxpYmljb252LTEuMTQvc3JjbTQvaW5jbHVkZV9uZXh0Lm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2luY2x1ZGVfbmV4dC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvaW5jbHVkZV9uZXh0Lm00CTIwMTItMDEtMDggMDI6MDc6NDAuNjUwNDg0NDcyIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIGluY2x1ZGVfbmV4dC5tNCBzZXJpYWwgMjAKKysjIGluY2x1ZGVfbmV4dC5tNCBzZXJpYWwgMTgKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMTc1LDEzICsxNzUsMTEgQEAgQUNfREVGVU4oW2dsX05FWFRfSEVBREVSU19JTlRFUk5BTF0sCisgICAgIFtBQ19DSEVDS19IRUFERVJTX09OQ0UoWyQxXSkKKyAgICAgXSkKKyAKKy1kbmwgRklYTUU6IGdsX25leHRfaGVhZGVyIGFuZCBnbF9oZWFkZXJfZXhpc3RzIG11c3QgYmUgdXNlZCB1bnF1b3RlZAorLWRubCB1bnRpbCB3ZSBjYW4gYXNzdW1lIGF1dG9jb25mIDIuNjQgb3IgbmV3ZXIuCisgICBtNF9mb3JlYWNoX3coW2dsX0hFQURFUl9OQU1FXSwgWyQxXSwKKyAgICAgW0FTX1ZBUl9QVVNIREVGKFtnbF9uZXh0X2hlYWRlcl0sCisgICAgICAgICAgICAgICAgICAgICBbZ2xfY3ZfbmV4dF9dbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKSkKKyAgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuCistICAgICAgIEFTX1ZBUl9TRVQoZ2xfbmV4dF9oZWFkZXIsIFsnPCdnbF9IRUFERVJfTkFNRSc+J10pCisrICAgICAgIEFTX1ZBUl9TRVQoW2dsX25leHRfaGVhZGVyXSwgWyc8J2dsX0hFQURFUl9OQU1FJz4nXSkKKyAgICAgIGVsc2UKKyAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soCisgICAgICAgICAgW2Fic29sdXRlIG5hbWUgb2YgPF1tNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pWz5dLAorQEAgLTIxMCw3ICsyMDgsNyBAQCBkbmwgdW50aWwgd2UgY2FuIGFzc3VtZSBhdXRvY29uZiAyLjY0IG9yCisgICAgICAgICAgICAgICAgZG5sIGV2YWwgaXMgbmVjZXNzYXJ5IHRvIGV4cGFuZCBnbF9hYnNuYW1lX2NwcC4KKyAgICAgICAgICAgICAgICBkbmwgVWx0cml4IGFuZCBQeXJhbWlkIHNoIHJlZnVzZSB0byByZWRpcmVjdCBvdXRwdXQgb2YgZXZhbCwKKyAgICAgICAgICAgICAgICBkbmwgc28gdXNlIHN1YnNoZWxsLgorLSAgICAgICAgICAgICAgIEFTX1ZBUl9TRVQoZ2xfbmV4dF9oZWFkZXIsCisrICAgICAgICAgICAgICAgQVNfVkFSX1NFVChbZ2xfbmV4dF9oZWFkZXJdLAorICAgICAgICAgICAgICAgICAgWyciJ2AoZXZhbCAiJGdsX2Fic25hbWVfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiZBU19NRVNTQUdFX0xPR19GRCB8CisgICAgICAgICAgICAgICAgICAgc2VkIC1uICdcIy9dbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKVsjeworICAgICAgICAgICAgICAgICAgICAgcyMuKiJcKC4qL11tNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pW1wpIi4qI1wxIworQEAgLTIyMCwyMCArMjE4LDIwIEBAIGRubCB1bnRpbCB3ZSBjYW4gYXNzdW1lIGF1dG9jb25mIDIuNjQgb3IKKyAgICAgICAgICAgICAgICAgICB9J2AnIiddKQorICAgICAgICAgICBtNF9pZihbJDJdLCBbY2hlY2tdLAorICAgICAgICAgICAgIFtlbHNlCistICAgICAgICAgICAgICAgQVNfVkFSX1NFVChnbF9uZXh0X2hlYWRlciwgWyc8J2dsX0hFQURFUl9OQU1FJz4nXSkKKysgICAgICAgICAgICAgICBBU19WQVJfU0VUKFtnbF9uZXh0X2hlYWRlcl0sIFsnPCdnbF9IRUFERVJfTkFNRSc+J10pCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgXSkKKyAgICAgICAgICBdKQorICAgICAgZmkKKyAgICAgIEFDX1NVQlNUKAorICAgICAgICBBU19UUl9DUFAoW05FWFRfXW00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSkpLAorLSAgICAgICBbQVNfVkFSX0dFVChnbF9uZXh0X2hlYWRlcildKQorKyAgICAgICBbQVNfVkFSX0dFVChbZ2xfbmV4dF9oZWFkZXJdKV0pCisgICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IGJ1Z2d5OyB0aGVuCisgICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9uZXh0JworICAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCdnbF9IRUFERVJfTkFNRSc+JworICAgICAgZWxzZQorICAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnCistICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPUFTX1ZBUl9HRVQoZ2xfbmV4dF9oZWFkZXIpCisrICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPUFTX1ZBUl9HRVQoW2dsX25leHRfaGVhZGVyXSkKKyAgICAgIGZpCisgICAgICBBQ19TVUJTVCgKKyAgICAgICAgQVNfVFJfQ1BQKFtORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9dbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKSksCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvbGFyZ2VmaWxlLm00IGxpYmljb252LTEuMTQvc3JjbTQvbGFyZ2VmaWxlLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2xhcmdlZmlsZS5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvbGFyZ2VmaWxlLm00CTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCitAQCAtMSwxMDQgKzAsMCBAQAorLSMgRW5hYmxlIGxhcmdlIGZpbGVzIG9uIHN5c3RlbXMgd2hlcmUgdGhpcyBpcyBub3QgdGhlIGRlZmF1bHQuCistCistIyBDb3B5cmlnaHQgMTk5Mi0xOTk2LCAxOTk4LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKy0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKy0KKy0jIFRoZSBmb2xsb3dpbmcgaW1wbGVtZW50YXRpb24gd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBhdXRvY29uZiA8PSAyLjY4OworLSMgQUNfU1lTX0xBUkdFRklMRSBkb2VzIG5vdCBjb25maWd1cmUgZm9yIGxhcmdlIGlub2RlcyBvbiBNYWMgT1MgWCAxMC41LgorLW00X3ZlcnNpb25fcHJlcmVxKFsyLjY5XSwgW10gLFsKKy0KKy0jIF9BQ19TWVNfTEFSR0VGSUxFX1RFU1RfSU5DTFVERVMKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1tNF9kZWZpbmUoW19BQ19TWVNfTEFSR0VGSUxFX1RFU1RfSU5DTFVERVNdLAorLVtAJTpAaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorLSAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCistICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKy0gICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworLUAlOkBkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorLSAgaW50IG9mZl90X2lzX2xhcmdlW1soTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorLQkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorLQkJICAgICAgPyAxIDogLTFdXTtbXWRubAorLV0pCistCistCistIyBfQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRShDLU1BQ1JPLCBWQUxVRSwKKy0jCQkJCUNBQ0hFLVZBUiwKKy0jCQkJCURFU0NSSVBUSU9OLAorLSMJCQkJUFJPTE9HVUUsIFtGVU5DVElPTi1CT0RZXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistbTRfZGVmaW5lKFtfQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRV0sCistW0FDX0NBQ0hFX0NIRUNLKFtmb3IgJDEgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlc10sIFskM10sCistW3doaWxlIDo7IGRvCistICBtNF9pZnZhbChbJDZdLCBbQUNfTElOS19JRkVMU0VdLCBbQUNfQ09NUElMRV9JRkVMU0VdKSgKKy0gICAgW0FDX0xBTkdfUFJPR1JBTShbJDVdLCBbJDZdKV0sCistICAgIFskMz1ubzsgYnJlYWtdKQorLSAgbTRfaWZ2YWwoWyQ2XSwgW0FDX0xJTktfSUZFTFNFXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkoCistICAgIFtBQ19MQU5HX1BST0dSQU0oW0AlOkBkZWZpbmUgJDEgJDIKKy0kNV0sIFskNl0pXSwKKy0gICAgWyQzPSQyOyBicmVha10pCistICAkMz11bmtub3duCistICBicmVhaworLWRvbmVdKQorLWNhc2UgJCQzIGluICMoCistICBubyB8IHVua25vd24pIDs7CistICAqKSBBQ19ERUZJTkVfVU5RVU9URUQoWyQxXSwgWyQkM10sIFskNF0pOzsKKy1lc2FjCistcm0gLXJmIGNvbmZ0ZXN0KltdZG5sCistXSkjIF9BQ19TWVNfTEFSR0VGSUxFX01BQ1JPX1ZBTFVFCistCistCistIyBBQ19TWVNfTEFSR0VGSUxFCistIyAtLS0tLS0tLS0tLS0tLS0tCistIyBCeSBkZWZhdWx0LCBtYW55IGhvc3RzIHdvbid0IGxldCBwcm9ncmFtcyBhY2Nlc3MgbGFyZ2UgZmlsZXM7CistIyBvbmUgbXVzdCB1c2Ugc3BlY2lhbCBjb21waWxlciBvcHRpb25zIHRvIGdldCBsYXJnZS1maWxlIGFjY2VzcyB0byB3b3JrLgorLSMgRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGlzIGJyYWluIGRhbWFnZSBwbGVhc2Ugc2VlOgorLSMgaHR0cDovL3d3dy51bml4LXN5c3RlbXMub3JnL3ZlcnNpb24yL3doYXRzbmV3L2xmczIwbWFyLmh0bWwKKy1BQ19ERUZVTihbQUNfU1lTX0xBUkdFRklMRV0sCistW0FDX0FSR19FTkFCTEUobGFyZ2VmaWxlLAorLQkgICAgICAgWyAgLS1kaXNhYmxlLWxhcmdlZmlsZSAgICAgb21pdCBzdXBwb3J0IGZvciBsYXJnZSBmaWxlc10pCistaWYgdGVzdCAiJGVuYWJsZV9sYXJnZWZpbGUiICE9IG5vOyB0aGVuCistCistICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNwZWNpYWwgQyBjb21waWxlciBvcHRpb25zIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXNdLAorLSAgICBhY19jdl9zeXNfbGFyZ2VmaWxlX0NDLAorLSAgICBbYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQz1ubworLSAgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCistICAgICAgIGFjX3NhdmVfQ0M9JENDCistICAgICAgIHdoaWxlIDo7IGRvCistCSAjIElSSVggNi4yIGFuZCBsYXRlciBkbyBub3Qgc3VwcG9ydCBsYXJnZSBmaWxlcyBieSBkZWZhdWx0LAorLQkgIyBzbyB1c2UgdGhlIEMgY29tcGlsZXIncyAtbjMyIG9wdGlvbiBpZiB0aGF0IGhlbHBzLgorLQkgQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19QUk9HUkFNKFtfQUNfU1lTX0xBUkdFRklMRV9URVNUX0lOQ0xVREVTXSldKQorLQkgQUNfQ09NUElMRV9JRkVMU0UoW10sIFticmVha10pCistCSBDQz0iJENDIC1uMzIiCistCSBBQ19DT01QSUxFX0lGRUxTRShbXSwgW2FjX2N2X3N5c19sYXJnZWZpbGVfQ0M9JyAtbjMyJzsgYnJlYWtdKQorLQkgYnJlYWsKKy0gICAgICAgZG9uZQorLSAgICAgICBDQz0kYWNfc2F2ZV9DQworLSAgICAgICBybSAtZiBjb25mdGVzdC4kYWNfZXh0CistICAgIGZpXSkKKy0gIGlmIHRlc3QgIiRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDIiAhPSBubzsgdGhlbgorLSAgICBDQz0kQ0MkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQworLSAgZmkKKy0KKy0gIF9BQ19TWVNfTEFSR0VGSUxFX01BQ1JPX1ZBTFVFKF9GSUxFX09GRlNFVF9CSVRTLCA2NCwKKy0gICAgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMsCistICAgIFtOdW1iZXIgb2YgYml0cyBpbiBhIGZpbGUgb2Zmc2V0LCBvbiBob3N0cyB3aGVyZSB0aGlzIGlzIHNldHRhYmxlLl0sCistICAgIFtfQUNfU1lTX0xBUkdFRklMRV9URVNUX0lOQ0xVREVTXSkKKy0gIGlmIHRlc3QgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzID0gdW5rbm93bjsgdGhlbgorLSAgICBfQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRShfTEFSR0VfRklMRVMsIDEsCistICAgICAgYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzLAorLSAgICAgIFtEZWZpbmUgZm9yIGxhcmdlIGZpbGVzLCBvbiBBSVgtc3R5bGUgaG9zdHMuXSwKKy0gICAgICBbX0FDX1NZU19MQVJHRUZJTEVfVEVTVF9JTkNMVURFU10pCistICBmaQorLQorLSAgQUhfVkVSQkFUSU0oW19EQVJXSU5fVVNFXzY0X0JJVF9JTk9ERV0sCistWy8qIEVuYWJsZSBsYXJnZSBpbm9kZSBudW1iZXJzIG9uIE1hYyBPUyBYLiAgKi8KKy0jaWZuZGVmIF9EQVJXSU5fVVNFXzY0X0JJVF9JTk9ERQorLSMgZGVmaW5lIF9EQVJXSU5fVVNFXzY0X0JJVF9JTk9ERSAxCistI2VuZGlmXSkKKy1maQorLV0pIyBBQ19TWVNfTEFSR0VGSUxFCistCistXSkjIG00X3ZlcnNpb25fcHJlcmVxIDIuNjkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9sc3RhdC5tNCBsaWJpY29udi0xLjE0L3NyY200L2xzdGF0Lm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2xzdGF0Lm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9sc3RhdC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjcyMjQ4NDQ3NiAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBzZXJpYWwgMjMKKysjIHNlcmlhbCAyMQorIAorICMgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDEsIDIwMDMtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjCitAQCAtMTUsMjggKzE1LDI0IEBAIEFDX0RFRlVOKFtnbF9GVU5DX0xTVEFUXSwKKyAgIGRubCAiI2RlZmluZSBsc3RhdCBzdGF0IiwgYW5kIGxzdGF0LmMgaXMgYSBuby1vcC4KKyAgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW2xzdGF0XSkKKyAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbHN0YXQgPSB5ZXM7IHRoZW4KKy0gICAgQUNfUkVRVUlSRShbZ2xfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOS10pCistICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayA9IG5vOyB0aGVuCisrICAgIEFDX1JFUVVJUkUoW0FDX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTktdKQorKyAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmsgPSBubzsgdGhlbgorKyAgICAgIGRubCBOb3RlOiBBQ19GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LIGRvZXMgQUNfTElCT0JKKFtsc3RhdF0pLgorICAgICAgIFJFUExBQ0VfTFNUQVQ9MQorICAgICBmaQorKyAgICAjIFByZXJlcXVpc2l0ZXMgb2YgbGliL2xzdGF0LmMuCisrICAgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKyAgIGVsc2UKKyAgICAgSEFWRV9MU1RBVD0wCisgICBmaQorIF0pCisgCistIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9sc3RhdC5jLgorLUFDX0RFRlVOKFtnbF9QUkVSRVFfTFNUQVRdLAorKyMgUmVkZWZpbmUgQUNfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOSywgYmVjYXVzZSBpdCBpcyBubyBsb25nZXIKKysjIG1haW50YWluZWQgaW4gQXV0b2NvbmYuCisrQUNfREVGVU4oW0FDX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTktdLAorIFsKKy0gIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKy0gIDoKKy1dKQorLQorLUFDX0RFRlVOKFtnbF9GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LXSwKKy1bCistICBkbmwgV2UgZG9uJ3QgdXNlIEFDX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTksgYW55IG1vcmUsIGJlY2F1c2UgaXQKKy0gIGRubCBpcyBubyBsb25nZXIgbWFpbnRhaW5lZCBpbiBBdXRvY29uZiBhbmQgYmVjYXVzZSBpdCBpbnZva2VzIEFDX0xJQk9CSi4KKyAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGxzdGF0IGNvcnJlY3RseSBoYW5kbGVzIHRyYWlsaW5nIHNsYXNoXSwKKy0gICAgW2dsX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGlua10sCisrICAgIFthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmtdLAorICAgICBbcm0gLWYgY29uZnRlc3Quc3ltIGNvbmZ0ZXN0LmZpbGUKKyAgICAgIGVjaG8gPmNvbmZ0ZXN0LmZpbGUKKyAgICAgIGlmIHRlc3QgIiRhc19sbl9zIiA9ICJsbiAtcyIgJiYgbG4gLXMgY29uZnRlc3QuZmlsZSBjb25mdGVzdC5zeW07IHRoZW4KK0BAIC00OSwyMiArNDUsMjUgQEAgQUNfREVGVU4oW2dsX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEXworICAgICAgICAgICAgICAgICAgaGF2ZSB0byBjb21waWxlIGFuZCB1c2UgdGhlIGxzdGF0IHdyYXBwZXIuICAqLworICAgICAgICAgICAgICAgcmV0dXJuIGxzdGF0ICgiY29uZnRlc3Quc3ltLyIsICZzYnVmKSA9PSAwOworICAgICAgICAgICAgIF1dKV0sCistICAgICAgICAgW2dsX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz15ZXNdLAorLSAgICAgICAgIFtnbF9jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9bm9dLAorKyAgICAgICAgIFthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzXSwKKysgICAgICAgICBbYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vXSwKKyAgICAgICAgICBbIyBXaGVuIGNyb3NzLWNvbXBpbGluZywgYmUgcGVzc2ltaXN0aWMgc28gd2Ugd2lsbCBlbmQgdXAgdXNpbmcgdGhlCisgICAgICAgICAgICMgcmVwbGFjZW1lbnQgdmVyc2lvbiBvZiBsc3RhdCB0aGF0IGNoZWNrcyBmb3IgdHJhaWxpbmcgc2xhc2hlcyBhbmQKKyAgICAgICAgICAgIyBjYWxscyBsc3RhdCBhIHNlY29uZCB0aW1lIHdoZW4gbmVjZXNzYXJ5LgorLSAgICAgICAgICBnbF9jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9bm8KKysgICAgICAgICAgYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vCisgICAgICAgICAgXSkKKyAgICAgIGVsc2UKKyAgICAgICAgIyBJZiB0aGUgJ2xuIC1zJyBjb21tYW5kIGZhaWxlZCwgdGhlbiB3ZSBwcm9iYWJseSBkb24ndCBldmVuCisgICAgICAgICMgaGF2ZSBhbiBsc3RhdCBmdW5jdGlvbi4KKy0gICAgICAgZ2xfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vCisrICAgICAgIGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz1ubworICAgICAgZmkKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LnN5bSBjb25mdGVzdC5maWxlCisgICAgIF0pCistICB0ZXN0ICRnbF9jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmsgPSB5ZXMgJiYKKysgIHRlc3QgJGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayA9IHllcyAmJgorICAgICBBQ19ERUZJTkVfVU5RVU9URUQoW0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LXSwgWzFdLAorICAgICAgIFtEZWZpbmUgdG8gMSBpZiBgbHN0YXQnIGRlcmVmZXJlbmNlcyBhIHN5bWxpbmsgc3BlY2lmaWVkCisgICAgICAgIHdpdGggYSB0cmFpbGluZyBzbGFzaC5dKQorKyAgaWYgdGVzdCAieCRhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmsiID0geG5vOyB0aGVuCisrICAgIEFDX0xJQk9CSihbbHN0YXRdKQorKyAgZmkKKyBdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L21lbW1vdmUubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9tZW1tb3ZlLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L21lbW1vdmUubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L21lbW1vdmUubTQJMjAxMi0wMS0wOCAwMjowNzo0MC43Mzg0ODQ0NzcgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgbWVtbW92ZS5tNCBzZXJpYWwgNAorKyMgbWVtbW92ZS5tNCBzZXJpYWwgMworIGRubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC02LDcgKzYsMTAgQEAgZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsbworIAorIEFDX0RFRlVOKFtnbF9GVU5DX01FTU1PVkVdLAorIFsKKy0gIEFDX0NIRUNLX0ZVTkNTKFttZW1tb3ZlXSkKKysgIEFDX1JFUExBQ0VfRlVOQ1MoW21lbW1vdmVdKQorKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19tZW1tb3ZlID0gbm87IHRoZW4KKysgICAgZ2xfUFJFUkVRX01FTU1PVkUKKysgIGZpCisgXSkKKyAKKyAjIFByZXJlcXVpc2l0ZXMgb2YgbGliL21lbW1vdmUuYy4KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9wYXRobWF4Lm00IGxpYmljb252LTEuMTQvc3JjbTQvcGF0aG1heC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9wYXRobWF4Lm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9wYXRobWF4Lm00CTIwMTItMDEtMDggMDI6MDc6NDAuNzU4NDg0NDc4IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHBhdGhtYXgubTQgc2VyaWFsIDkKKysjIHBhdGhtYXgubTQgc2VyaWFsIDgKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIDIwMDUtMjAwNiwgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyBkbmwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorQEAgLTgsNSArOCw2IEBAIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG8KKyBBQ19ERUZVTihbZ2xfUEFUSE1BWF0sCisgWworICAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL3BhdGhtYXguaC4KKysgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW3BhdGhjb25mXSkKKyAgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbc3lzL3BhcmFtLmhdKQorIF0pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcG8ubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9wby5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9wby5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvcG8ubTQJMjAxMi0wMS0wOCAwMjowNzo0MC43NjY0ODQ0NzcgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgcG8ubTQgc2VyaWFsIDE3YQorKyMgcG8ubTQgc2VyaWFsIDE3IChnZXR0ZXh0LTAuMTgpCisgZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTExOCw4ICsxMTgsNyBAQCBjaGFuZ2VxdW90ZShbLF0pZG5sCisgICAgICAgICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iOyB0aGVuCisgICAgICAgICAgIHJtIC1mICIkYWNfZGlyL1BPVEZJTEVTIgorICAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIgfHwgZWNobyAiY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIKKy0gICAgICAgICAgZ3RfdGFiPWBwcmludGYgJ1x0J2AKKy0gICAgICAgICAgY2F0ICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iIHwgc2VkIC1lICIvXiMvZCIgLWUgIi9eWyAke2d0X3RhYn1dKlwkL2QiIC1lICJzLC4qLCAgICAgJHRvcF9zcmNkaXIvJiBcXFxcLCIgfCBzZWQgLWUgIlwkcy9cKC4qXCkgXFxcXC9cMS8iID4gIiRhY19kaXIvUE9URklMRVMiCisrICAgICAgICAgIGNhdCAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIiB8IHNlZCAtZSAiL14jL2QiIC1lICIvXlsgCV0qXCQvZCIgLWUgInMsLiosICAgICAkdG9wX3NyY2Rpci8mIFxcXFwsIiB8IHNlZCAtZSAiXCRzL1woLipcKSBcXFxcL1wxLyIgPiAiJGFjX2Rpci9QT1RGSUxFUyIKKyAgICAgICAgICAgUE9NQUtFRklMRURFUFM9IlBPVEZJTEVTLmluIgorICAgICAgICAgICAjIEFMTF9MSU5HVUFTLCBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTIGRlcGVuZAorICAgICAgICAgICAjIG9uICRhY19kaXIgYnV0IGRvbid0IGRlcGVuZCBvbiB1c2VyLXNwZWNpZmllZCBjb25maWd1cmF0aW9uCitAQCAtMjU1LDcgKzI1NCw2IEBAIEVPVAorICAgZmkKKyAKKyAgICMgQSBzZWQgc2NyaXB0IHRoYXQgZXh0cmFjdHMgdGhlIHZhbHVlIG9mIFZBUklBQkxFIGZyb20gYSBNYWtlZmlsZS4KKy0gIHRhYj1gcHJpbnRmICdcdCdgCisgICBzZWRfeF92YXJpYWJsZT0nCisgIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5LgorIHgKK0BAIC0yNjMsOSArMjYxLDkgQEAgcy9QL1AvCisgeAorIHRhCisgIyBZZXMgaXQgd2FzIGVtcHR5LiBMb29rIGlmIHdlIGhhdmUgdGhlIGV4cGVjdGVkIHZhcmlhYmxlIGRlZmluaXRpb24uCistL15bJyIke3RhYn0iJyBdKlZBUklBQkxFWyciJHt0YWJ9IicgXSo9L3sKKysvXlsJIF0qVkFSSUFCTEVbCSBdKj0veworICAgIyBTZWVuIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uLgorLSAgcy9eWyciJHt0YWJ9IicgXSpWQVJJQUJMRVsnIiR7dGFifSInIF0qPS8vCisrICBzL15bCSBdKlZBUklBQkxFWwkgXSo9Ly8KKyAgIGJhCisgfQorIGJkCitAQCAtNDA3LDE1ICs0MDUsMTQgQEAgY2hhbmdlcXVvdGUoWyxdKWRubAorICAgZmkKKyAKKyAgIHNlZCAtZSAic3xAUE9URklMRVNfREVQU0B8JFBPVEZJTEVTX0RFUFN8ZyIgLWUgInN8QFBPRklMRVNAfCRQT0ZJTEVTfGciIC1lICJzfEBVUERBVEVQT0ZJTEVTQHwkVVBEQVRFUE9GSUxFU3xnIiAtZSAic3xARFVNTVlQT0ZJTEVTQHwkRFVNTVlQT0ZJTEVTfGciIC1lICJzfEBHTU9GSUxFU0B8JEdNT0ZJTEVTfGciIC1lICJzfEBQUk9QRVJUSUVTRklMRVNAfCRQUk9QRVJUSUVTRklMRVN8ZyIgLWUgInN8QENMQVNTRklMRVNAfCRDTEFTU0ZJTEVTfGciIC1lICJzfEBRTUZJTEVTQHwkUU1GSUxFU3xnIiAtZSAic3xATVNHRklMRVNAfCRNU0dGSUxFU3xnIiAtZSAic3xAUkVTT1VSQ0VTRExMRklMRVNAfCRSRVNPVVJDRVNETExGSUxFU3xnIiAtZSAic3xAQ0FUQUxPR1NAfCRDQVRBTE9HU3xnIiAtZSAic3xASkFWQUNBVEFMT0dTQHwkSkFWQUNBVEFMT0dTfGciIC1lICJzfEBRVENBVEFMT0dTQHwkUVRDQVRBTE9HU3xnIiAtZSAic3xAVENMQ0FUQUxPR1NAfCRUQ0xDQVRBTE9HU3xnIiAtZSAic3xAQ1NIQVJQQ0FUQUxPR1NAfCRDU0hBUlBDQVRBTE9HU3xnIiAtZSAncyxeI2Rpc3RkaXI6LGRpc3RkaXI6LCcgPCAiJGFjX2ZpbGUiID4gIiRhY19maWxlLnRtcCIKKy0gIHRhYj1gcHJpbnRmICdcdCdgCisgICBpZiBncmVwIC1sICdAVENMQ0FUQUxPR1NAJyAiJGFjX2ZpbGUiID4gL2Rldi9udWxsOyB0aGVuCisgICAgICMgQWRkIGRlcGVuZGVuY2llcyB0aGF0IGNhbm5vdCBiZSBmb3JtdWxhdGVkIGFzIGEgc2ltcGxlIHN1ZmZpeCBydWxlLgorICAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKyAgICAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKKyAkZnJvYmJlZGxhbmcubXNnOiAkbGFuZy5wbworLSR7dGFifUBlY2hvICJcJChNU0dGTVQpIC1jIC0tdGNsIC1kIFwkKHNyY2RpcikgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIjsgXAorLSR7dGFifVwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KKysJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8iOyBcCisrCVwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KKyBFT0YKKyAgICAgZG9uZQorICAgZmkKK0BAIC00MjUsOCArNDIyLDggQEAgRU9GCisgICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnIC1lICdzL15zci1DUy9zci1TUC8nIC1lICdzL0BsYXRpbiQvLUxhdG4vJyAtZSAncy9AY3lyaWxsaWMkLy1DeXJsLycgLWUgJ3MvXnNyLVNQJC9zci1TUC1MYXRuLycgLWUgJ3MvXnV6LVVaJC91ei1VWi1MYXRuLydgCisgICAgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCisgJGZyb2JiZWRsYW5nL1wkKERPTUFJTikucmVzb3VyY2VzLmRsbDogJGxhbmcucG8KKy0ke3RhYn1AZWNobyAiXCQoTVNHRk1UKSAtYyAtLWNzaGFycCAtZCBcJChzcmNkaXIpIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyAtciBcJChET01BSU4pIjsgXAorLSR7dGFifVwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyAtciAiXCQoRE9NQUlOKSIgfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9CisrCUBlY2hvICJcJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kIFwkKHNyY2RpcikgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIC1yIFwkKERPTUFJTikiOyBcCisrCVwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyAtciAiXCQoRE9NQUlOKSIgfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9CisgRU9GCisgICAgIGRvbmUKKyAgIGZpCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVhZGxpbmsubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWFkbGluay5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWFkbGluay5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvcmVhZGxpbmsubTQJMjAxMi0wMS0wOCAwMjowNzo0MC43OTA0ODQ0NzkgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgcmVhZGxpbmsubTQgc2VyaWFsIDExCisrIyByZWFkbGluay5tNCBzZXJpYWwgMTAKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMTAsNiArMTAsOCBAQCBBQ19ERUZVTihbZ2xfRlVOQ19SRUFETElOS10sCisgICBBQ19DSEVDS19GVU5DU19PTkNFKFtyZWFkbGlua10pCisgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3JlYWRsaW5rID0gbm87IHRoZW4KKyAgICAgSEFWRV9SRUFETElOSz0wCisrICAgIEFDX0xJQk9CSihbcmVhZGxpbmtdKQorKyAgICBnbF9QUkVSRVFfUkVBRExJTksKKyAgIGVsc2UKKyAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgcmVhZGxpbmsgc2lnbmF0dXJlIGlzIGNvcnJlY3RdLAorICAgICAgIFtnbF9jdl9kZWNsX3JlYWRsaW5rX3dvcmtzXSwKK0BAIC0zOCw4ICs0MCwxMCBAQCBBQ19ERUZVTihbZ2xfRlVOQ19SRUFETElOS10sCisgICAgICAgQUNfREVGSU5FKFtSRUFETElOS19UUkFJTElOR19TTEFTSF9CVUddLCBbMV0sIFtEZWZpbmUgdG8gMSBpZiByZWFkbGluaworICAgICAgICAgZmFpbHMgdG8gcmVjb2duaXplIGEgdHJhaWxpbmcgc2xhc2guXSkKKyAgICAgICBSRVBMQUNFX1JFQURMSU5LPTEKKysgICAgICBBQ19MSUJPQkooW3JlYWRsaW5rXSkKKyAgICAgZWxpZiB0ZXN0ICIkZ2xfY3ZfZGVjbF9yZWFkbGlua193b3JrcyIgIT0geWVzOyB0aGVuCisgICAgICAgUkVQTEFDRV9SRUFETElOSz0xCisrICAgICAgQUNfTElCT0JKKFtyZWFkbGlua10pCisgICAgIGZpCisgICBmaQorIF0pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVhZC5tNCBsaWJpY29udi0xLjE0L3NyY200L3JlYWQubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVhZC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvcmVhZC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjc4MjQ4NDQ3OCAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyByZWFkLm00IHNlcmlhbCAyCisrIyByZWFkLm00IHNlcmlhbCAxCisgZG5sIENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0xNCw2ICsxNCw3IEBAIEFDX0RFRlVOKFtnbF9GVU5DX1JFQURdLAorICAgICBnbF9OT05CTE9DS0lOR19JTworICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX25vbmJsb2NraW5nICE9IHllczsgdGhlbgorICAgICAgIFJFUExBQ0VfUkVBRD0xCisrICAgICAgQUNfTElCT0JKKFtyZWFkXSkKKyAgICAgZmkKKyAgIF0pCisgXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWxvY2F0YWJsZS1saWIubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWxvY2F0YWJsZS1saWIubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVsb2NhdGFibGUtbGliLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWxvY2F0YWJsZS1saWIubTQJMjAxMi0wMS0wOCAwMjowNzo0MC43OTg0ODQ0ODAgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgcmVsb2NhdGFibGUtbGliLm00IHNlcmlhbCA2CisrIyByZWxvY2F0YWJsZS1saWIubTQgc2VyaWFsIDUKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMDcsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0xMCw2ICsxMCw5IEBAIGRubCBTdXBwb3J0IGZvciByZWxvY2F0YWJsZSBsaWJyYXJpZXMuCisgQUNfREVGVU4oW2dsX1JFTE9DQVRBQkxFX0xJQlJBUlldLAorIFsKKyAgIEFDX1JFUVVJUkUoW2dsX1JFTE9DQVRBQkxFX0xJQlJBUllfQk9EWV0pCisrICBpZiB0ZXN0ICRSRUxPQ0FUQUJMRSA9IHllczsgdGhlbgorKyAgICBBQ19MSUJPQkooW3JlbG9jYXRhYmxlXSkKKysgIGZpCisgXSkKKyBBQ19ERUZVTihbZ2xfUkVMT0NBVEFCTEVfTElCUkFSWV9CT0RZXSwKKyBbCitAQCAtMjksNiArMzIsMTMgQEAgQUNfREVGVU4oW2dsX1JFTE9DQVRBQkxFX0xJQlJBUllfQk9EWV0sCisgICBmaQorIF0pCisgCisrZG5sIExpa2UgZ2xfUkVMT0NBVEFCTEVfTElCUkFSWSwgZXhjZXB0IHByZXBhcmUgZm9yIHNlcGFyYXRlIGNvbXBpbGF0aW9uCisrZG5sIChubyBBQ19MSUJPQkopLgorK0FDX0RFRlVOKFtnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZX1NFUEFSQVRFXSwKKytbCisrICBBQ19SRVFVSVJFKFtnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZX0JPRFldKQorK10pCisrCisgZG5sIFN1cHBvcnQgZm9yIHJlbG9jYXRhYmxlIHBhY2thZ2VzIGZvciB3aGljaCBpdCBpcyBhIG5vcC4KKyBBQ19ERUZVTihbZ2xfUkVMT0NBVEFCTEVfTk9QXSwKKyBbCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVsb2NhdGFibGUubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWxvY2F0YWJsZS5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWxvY2F0YWJsZS5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvcmVsb2NhdGFibGUubTQJMjAxMi0wMS0wOCAwMjowNzo0MC44MDI0ODQ0NzkgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgcmVsb2NhdGFibGUubTQgc2VyaWFsIDE3CisrIyByZWxvY2F0YWJsZS5tNCBzZXJpYWwgMTYKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMDcsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0xNCw2ICsxNCw5IEBAIEFDX0RFRlVOKFtnbF9SRUxPQ0FUQUJMRV0sCisgWworICAgQUNfUkVRVUlSRShbZ2xfUkVMT0NBVEFCTEVfQk9EWV0pCisgICBnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZCisrICBpZiB0ZXN0ICRSRUxPQ0FUQUJMRSA9IHllczsgdGhlbgorKyAgICBBQ19MSUJPQkooW3Byb2dyZWxvY10pCisrICBmaQorICAgOiAke1JFTE9DQVRBQkxFX0NPTkZJR19IX0RJUj0nJCh0b3BfYnVpbGRkaXIpJ30KKyAgIFJFTE9DQVRBQkxFX1NSQ19ESVI9IlwkKHRvcF9zcmNkaXIpLyRnbF9zb3VyY2VfYmFzZSIKKyAgIFJFTE9DQVRBQkxFX0JVSUxEX0RJUj0iXCQodG9wX2J1aWxkZGlyKS8kZ2xfc291cmNlX2Jhc2UiCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc2FmZS1yZWFkLm00IGxpYmljb252LTEuMTQvc3JjbTQvc2FmZS1yZWFkLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NhZmUtcmVhZC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvc2FmZS1yZWFkLm00CTIwMTItMDEtMDggMDI6MDc6NDAuODEwNDg0NDgwIC0wODAwCitAQCAtMSwxMCArMSwxNyBAQAorLSMgc2FmZS1yZWFkLm00IHNlcmlhbCA2CisrIyBzYWZlLXJlYWQubTQgc2VyaWFsIDUKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIDIwMDUtMjAwNiwgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyBkbmwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCisrQUNfREVGVU4oW2dsX1NBRkVfUkVBRF0sCisrWworKyAgQUNfTElCT0JKKFtzYWZlLXJlYWRdKQorKworKyAgZ2xfUFJFUkVRX1NBRkVfUkVBRAorK10pCisrCisgIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zYWZlLXJlYWQuYy4KKyBBQ19ERUZVTihbZ2xfUFJFUkVRX1NBRkVfUkVBRF0sCisgWworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NldGVudi5tNCBsaWJpY29udi0xLjE0L3NyY200L3NldGVudi5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zZXRlbnYubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3NldGVudi5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjgxODQ4NDQ4MSAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBzZXRlbnYubTQgc2VyaWFsIDI0CisrIyBzZXRlbnYubTQgc2VyaWFsIDIyCisgZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDA0LCAyMDA2LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMzgsNiArMzgsOSBAQCBBQ19ERUZVTihbZ2xfRlVOQ19TRVRFTlZdLAorICAgICAgIFJFUExBQ0VfU0VURU5WPTEKKyAgICAgZmkKKyAgIGZpCisrICBpZiB0ZXN0ICRIQVZFX1NFVEVOViRSRVBMQUNFX1NFVEVOViAhPSAxMDsgdGhlbgorKyAgICBBQ19MSUJPQkooW3NldGVudl0pCisrICBmaQorIF0pCisgCisgIyBMaWtlIGdsX0ZVTkNfU0VURU5WLCBleGNlcHQgcHJlcGFyZSBmb3Igc2VwYXJhdGUgY29tcGlsYXRpb24KK0BAIC02Miw5ICs2NSw5IEBAIEFDX0RFRlVOKFtnbF9GVU5DX1VOU0VURU5WXSwKKyAgIGZpCisgICBBQ19DSEVDS19GVU5DUyhbdW5zZXRlbnZdKQorICAgaWYgdGVzdCAkYWNfY3ZfZnVuY191bnNldGVudiA9IG5vOyB0aGVuCistICAgIEhBVkVfVU5TRVRFTlY9MAorKyAgICBBQ19MSUJPQkooW3Vuc2V0ZW52XSkKKysgICAgZ2xfUFJFUkVRX1VOU0VURU5WCisgICBlbHNlCistICAgIEhBVkVfVU5TRVRFTlY9MQorICAgICBkbmwgU29tZSBCU0RzIHJldHVybiB2b2lkLCBmYWlsaW5nIHRvIGRvIGVycm9yIGNoZWNraW5nLgorICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIHVuc2V0ZW52KCkgcmV0dXJuIHR5cGVdLCBbZ3RfY3ZfZnVuY191bnNldGVudl9yZXRdLAorICAgICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKK0BAIC05MCw2ICs5Myw3IEBAIGludCB1bnNldGVudigpOworICAgICAgIEFDX0RFRklORShbVk9JRF9VTlNFVEVOVl0sIFsxXSwgW0RlZmluZSB0byAxIGlmIHVuc2V0ZW52IHJldHVybnMgdm9pZAorICAgICAgICBpbnN0ZWFkIG9mIGludC5dKQorICAgICAgIFJFUExBQ0VfVU5TRVRFTlY9MQorKyAgICAgIEFDX0xJQk9CSihbdW5zZXRlbnZdKQorICAgICBmaQorIAorICAgICBkbmwgU29sYXJpcyAxMCB1bnNldGVudiBkb2VzIG5vdCByZW1vdmUgYWxsIGNvcGllcyBvZiBhIG5hbWUuCitAQCAtMTIyLDYgKzEyNiw3IEBAIGludCB1bnNldGVudigpOworICAgICAgIFtnbF9jdl9mdW5jX3Vuc2V0ZW52X3dvcmtzPSJndWVzc2luZyBubyJdKV0pCisgICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX3Vuc2V0ZW52X3dvcmtzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICBSRVBMQUNFX1VOU0VURU5WPTEKKysgICAgICBBQ19MSUJPQkooW3Vuc2V0ZW52XSkKKyAgICAgZmkKKyAgIGZpCisgXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zaWduYWxibG9ja2luZy5tNCBsaWJpY29udi0xLjE0L3NyY200L3NpZ25hbGJsb2NraW5nLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NpZ25hbGJsb2NraW5nLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zaWduYWxibG9ja2luZy5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjgzNDQ4NDQ4MiAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBzaWduYWxibG9ja2luZy5tNCBzZXJpYWwgMTIKKysjIHNpZ25hbGJsb2NraW5nLm00IHNlcmlhbCAxMAorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgMjAwNi0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTEyLDE0ICsxMiwzMSBAQCBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvCisgQUNfREVGVU4oW2dsX1NJR05BTEJMT0NLSU5HXSwKKyBbCisgICBBQ19SRVFVSVJFKFtnbF9TSUdOQUxfSF9ERUZBVUxUU10pCistICBBQ19SRVFVSVJFKFtnbF9DSEVDS19UWVBFX1NJR1NFVF9UXSkKKy0gIGlmIHRlc3QgJGdsX2N2X3R5cGVfc2lnc2V0X3QgPSB5ZXM7IHRoZW4KKysgIHNpZ25hbHNfbm90X3Bvc2l4PQorKyAgQUNfRUdSRVBfSEVBREVSKFtzaWdzZXRfdF0sIFtzaWduYWwuaF0sICwgW3NpZ25hbHNfbm90X3Bvc2l4PTFdKQorKyAgaWYgdGVzdCAteiAiJHNpZ25hbHNfbm90X3Bvc2l4IjsgdGhlbgorICAgICBBQ19DSEVDS19GVU5DKFtzaWdwcm9jbWFza10sIFtnbF9jdl9mdW5jX3NpZ3Byb2NtYXNrPTFdKQorICAgZmkKKyAgIGlmIHRlc3QgLXogIiRnbF9jdl9mdW5jX3NpZ3Byb2NtYXNrIjsgdGhlbgorICAgICBIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HPTAKKysgICAgQUNfTElCT0JKKFtzaWdwcm9jbWFza10pCisrICAgIGdsX1BSRVJFUV9TSUdQUk9DTUFTSworICAgZmkKKyBdKQorIAorLSMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc2lncHJvY21hc2suYy4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1NJR1BST0NNQVNLXSwgWzpdKQorKyMgUHJlcmVxdWlzaXRlcyBvZiB0aGUgcGFydCBvZiBsaWIvc2lnbmFsLmluLmggYW5kIG9mIGxpYi9zaWdwcm9jbWFzay5jLgorK0FDX0RFRlVOKFtnbF9QUkVSRVFfU0lHUFJPQ01BU0tdLAorK1sKKysgIEFDX1JFUVVJUkUoW2dsX1NJR05BTF9IX0RFRkFVTFRTXSkKKysgIEFDX0NIRUNLX1RZUEVTKFtzaWdzZXRfdF0sCisrICAgIFtnbF9jdl90eXBlX3NpZ3NldF90PXllc10sIFtnbF9jdl90eXBlX3NpZ3NldF90PW5vXSwKKysgICAgWyNpbmNsdWRlIDxzaWduYWwuaD4KKysvKiBNaW5ndyBkZWZpbmVzIHNpZ3NldF90IG5vdCBpbiA8c2lnbmFsLmg+LCBidXQgaW4gPHN5cy90eXBlcy5oPi4gICovCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0pCisrICBpZiB0ZXN0ICRnbF9jdl90eXBlX3NpZ3NldF90ICE9IHllczsgdGhlbgorKyAgICBIQVZFX1NJR1NFVF9UPTAKKysgIGZpCisrICBkbmwgSEFWRV9TSUdTRVRfVCBpcyAxIGlmIHRoZSBzeXN0ZW0gbGFja3MgdGhlIHNpZ3Byb2NtYXNrIGZ1bmN0aW9uIGJ1dCBoYXMKKysgIGRubCB0aGUgc2lnc2V0X3QgdHlwZS4KKysgIEFDX1NVQlNUKFtIQVZFX1NJR1NFVF9UXSkKKytdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NpZ25hbF9oLm00IGxpYmljb252LTEuMTQvc3JjbTQvc2lnbmFsX2gubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc2lnbmFsX2gubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3NpZ25hbF9oLm00CTIwMTItMDEtMDggMDI6MDc6NDAuODI2NDg0NDgwIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNpZ25hbF9oLm00IHNlcmlhbCAxNgorKyMgc2lnbmFsX2gubTQgc2VyaWFsIDEyCisgZG5sIENvcHlyaWdodCAoQykgMjAwNy0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTcsNyArNyw2IEBAIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG8KKyBBQ19ERUZVTihbZ2xfU0lHTkFMX0hdLAorIFsKKyAgIEFDX1JFUVVJUkUoW2dsX1NJR05BTF9IX0RFRkFVTFRTXSkKKy0gIEFDX1JFUVVJUkUoW2dsX0NIRUNLX1RZUEVfU0lHU0VUX1RdKQorICAgZ2xfTkVYVF9IRUFERVJTKFtzaWduYWwuaF0pCisgCisgIyBBSVggZGVjbGFyZXMgc2lnX2F0b21pY190IHRvIGFscmVhZHkgaW5jbHVkZSB2b2xhdGlsZSwgYW5kIEM4OSBjb21waWxlcnMKK0BAIC0yOCwyNSArMjcsMTAgQEAgQUNfREVGVU4oW2dsX1NJR05BTF9IXSwKKyAgIGRubCBDaGVjayBmb3IgZGVjbGFyYXRpb25zIG9mIGFueXRoaW5nIHdlIHdhbnQgdG8gcG9pc29uIGlmIHRoZQorICAgZG5sIGNvcnJlc3BvbmRpbmcgZ251bGliIG1vZHVsZSBpcyBub3QgaW4gdXNlLgorICAgZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxzaWduYWwuaD4KKy0gICAgXV0sIFtwdGhyZWFkX3NpZ21hc2sgc2lnYWN0aW9uCistICAgIHNpZ2FkZHNldCBzaWdkZWxzZXQgc2lnZW1wdHlzZXQgc2lnZmlsbHNldCBzaWdpc21lbWJlcgorKyAgICBdXSwgW3NpZ2FjdGlvbiBzaWdhZGRzZXQgc2lnZGVsc2V0IHNpZ2VtcHR5c2V0IHNpZ2ZpbGxzZXQgc2lnaXNtZW1iZXIKKyAgICAgc2lncGVuZGluZyBzaWdwcm9jbWFza10pCisgXSkKKyAKKy1BQ19ERUZVTihbZ2xfQ0hFQ0tfVFlQRV9TSUdTRVRfVF0sCistWworLSAgQUNfQ0hFQ0tfVFlQRVMoW3NpZ3NldF90XSwKKy0gICAgW2dsX2N2X3R5cGVfc2lnc2V0X3Q9eWVzXSwgW2dsX2N2X3R5cGVfc2lnc2V0X3Q9bm9dLAorLSAgICBbWworLSAgICAgICNpbmNsdWRlIDxzaWduYWwuaD4KKy0gICAgICAvKiBNaW5ndyBkZWZpbmVzIHNpZ3NldF90IG5vdCBpbiA8c2lnbmFsLmg+LCBidXQgaW4gPHN5cy90eXBlcy5oPi4gICovCistICAgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSAgICBdXSkKKy0gIGlmIHRlc3QgJGdsX2N2X3R5cGVfc2lnc2V0X3QgIT0geWVzOyB0aGVuCistICAgIEhBVkVfU0lHU0VUX1Q9MAorLSAgZmkKKy1dKQorLQorIEFDX0RFRlVOKFtnbF9TSUdOQUxfTU9EVUxFX0lORElDQVRPUl0sCisgWworICAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGV4cGFuZGVkIG9uY2Ugb25seS4KK0BAIC01OCwxMyArNDIsMTEgQEAgQUNfREVGVU4oW2dsX1NJR05BTF9NT0RVTEVfSU5ESUNBVE9SXSwKKyAKKyBBQ19ERUZVTihbZ2xfU0lHTkFMX0hfREVGQVVMVFNdLAorIFsKKy0gIEdOVUxJQl9QVEhSRUFEX1NJR01BU0s9MDsgICAgQUNfU1VCU1QoW0dOVUxJQl9QVEhSRUFEX1NJR01BU0tdKQorICAgR05VTElCX1NJR05BTF9IX1NJR1BJUEU9MDsgICBBQ19TVUJTVChbR05VTElCX1NJR05BTF9IX1NJR1BJUEVdKQorICAgR05VTElCX1NJR1BST0NNQVNLPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX1NJR1BST0NNQVNLXSkKKyAgIEdOVUxJQl9TSUdBQ1RJT049MDsgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TSUdBQ1RJT05dKQorICAgZG5sIEFzc3VtZSBwcm9wZXIgR05VIGJlaGF2aW9yIHVubGVzcyBhbm90aGVyIG1vZHVsZSBzYXlzIG90aGVyd2lzZS4KKyAgIEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkc9MTsgQUNfU1VCU1QoW0hBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkddKQorLSAgSEFWRV9QVEhSRUFEX1NJR01BU0s9MTsgICAgICBBQ19TVUJTVChbSEFWRV9QVEhSRUFEX1NJR01BU0tdKQorICAgSEFWRV9TSUdTRVRfVD0xOyAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9TSUdTRVRfVF0pCisgICBIQVZFX1NJR0lORk9fVD0xOyAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NJR0lORk9fVF0pCisgICBIQVZFX1NJR0FDVElPTj0xOyAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NJR0FDVElPTl0pCitAQCAtNzMsNSArNTUsNCBAQCBBQ19ERUZVTihbZ2xfU0lHTkFMX0hfREVGQVVMVFNdLAorICAgSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVD0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVF0pCisgICBIQVZFX1NJR0hBTkRMRVJfVD0xOyAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NJR0hBTkRMRVJfVF0pCistICBSRVBMQUNFX1BUSFJFQURfU0lHTUFTSz0wOyAgIEFDX1NVQlNUKFtSRVBMQUNFX1BUSFJFQURfU0lHTUFTS10pCisgXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zdGF0Lm00IGxpYmljb252LTEuMTQvc3JjbTQvc3RhdC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zdGF0Lm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zdGF0Lm00CTIwMTItMDEtMDggMDI6MDc6NDAuODU0NDg0NDgzIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNlcmlhbCA4CisrIyBzZXJpYWwgNworIAorICMgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIworQEAgLTU4LDExICs1OCw5IEBAIEFDX0RFRlVOKFtnbF9GVU5DX1NUQVRdLAorICAgICAgIEFDX0RFRklORShbUkVQTEFDRV9GVU5DX1NUQVRfRklMRV0sIFsxXSwgW0RlZmluZSB0byAxIGlmIHN0YXQgbmVlZHMKKyAgICAgICAgIGhlbHAgd2hlbiBwYXNzZWQgYSBmaWxlIG5hbWUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoXSk7OworICAgZXNhYworLV0pCistCistIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zdGF0LmMuCistQUNfREVGVU4oW2dsX1BSRVJFUV9TVEFUXSwKKy1bCistICBBQ19SRVFVSVJFKFtBQ19DX0lOTElORV0pCistICA6CisrICBpZiB0ZXN0ICRSRVBMQUNFX1NUQVQgPSAxOyB0aGVuCisrICAgIEFDX0xJQk9CSihbc3RhdF0pCisrICAgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zdGF0LmMuCisrICAgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKysgIGZpCisgXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zdHJlcnJvci5tNCBsaWJpY29udi0xLjE0L3NyY200L3N0cmVycm9yLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3N0cmVycm9yLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zdHJlcnJvci5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjg5MDQ4NDQ4NCAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBzdHJlcnJvci5tNCBzZXJpYWwgMTYKKysjIHN0cmVycm9yLm00IHNlcmlhbCA5CisgZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNy0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTYsNzMgKzYsNjMgQEAgZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsbworIAorIEFDX0RFRlVOKFtnbF9GVU5DX1NUUkVSUk9SXSwKKyBbCisrICBBQ19SRVFVSVJFKFtnbF9GVU5DX1NUUkVSUk9SX1NFUEFSQVRFXSkKKysgIGlmIHRlc3QgJFJFUExBQ0VfU1RSRVJST1IgPSAxOyB0aGVuCisrICAgIEFDX0xJQk9CSihbc3RyZXJyb3JdKQorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoW1JFUExBQ0VfU1RSRVJST1JdLCBbJFJFUExBQ0VfU1RSRVJST1JdLAorKyAgICAgIFtEZWZpbmUgdGhpcyB0byAxIGlmIHN0cmVycm9yIGlzIGJyb2tlbi5dKQorKyAgZmkKKytdKQorKworKyMgTGlrZSBnbF9GVU5DX1NUUkVSUk9SLCBleGNlcHQgcHJlcGFyZSBmb3Igc2VwYXJhdGUgY29tcGlsYXRpb24gKG5vIEFDX0xJQk9CSikuCisrQUNfREVGVU4oW2dsX0ZVTkNfU1RSRVJST1JfU0VQQVJBVEVdLAorK1sKKyAgIEFDX1JFUVVJUkUoW2dsX0hFQURFUl9TVFJJTkdfSF9ERUZBVUxUU10pCisgICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfRVJSTk9fSF0pCistICBBQ19SRVFVSVJFKFtnbF9GVU5DX1NUUkVSUk9SXzBdKQorLSAgbTRfaWZkZWYoW2dsX0ZVTkNfU1RSRVJST1JfUl9XT1JLU10sIFsKKy0gICAgQUNfUkVRVUlSRShbZ2xfRlVOQ19TVFJFUlJPUl9SX1dPUktTXSkKKy0gIF0pCistICBpZiB0ZXN0ICIkRVJSTk9fSDokUkVQTEFDRV9TVFJFUlJPUl8wIiA9IDowOyB0aGVuCisrICBpZiB0ZXN0IC16ICIkRVJSTk9fSCI7IHRoZW4KKyAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3b3JraW5nIHN0cmVycm9yIGZ1bmN0aW9uXSwKKyAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3JdLAorICAgICAgW0FDX1JVTl9JRkVMU0UoCisgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICAgW1sjaW5jbHVkZSA8c3RyaW5nLmg+CisgICAgICAgICAgICBdXSwKKy0gICAgICAgICAgIFtbaWYgKCEqc3RyZXJyb3IgKC0yKSkgcmV0dXJuIDE7XV0pXSwKKysgICAgICAgICAgIFtbcmV0dXJuICEqc3RyZXJyb3IgKC0yKTtdXSldLAorICAgICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcj15ZXNdLAorICAgICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcj1ub10sCistICAgICAgICBbZG5sIEJlIHBlc3NpbWlzdGljIG9uIGNyb3NzLWNvbXBpbGVzIGZvciBub3cuCistICAgICAgICAgZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yPSJndWVzc2luZyBubyJdKQorKyAgICAgICAgW2RubCBBc3N1bWUgY3Jvc3NidWlsZCB3b3JrcyBpZiBpdCBjb21waWxlcy4KKysgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKysgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisrICAgICAgICAgICAgICBbWyNpbmNsdWRlIDxzdHJpbmcuaD4KKysgICAgICAgICAgICAgIF1dLAorKyAgICAgICAgICAgICAgW1tyZXR1cm4gISpzdHJlcnJvciAoLTIpO11dKV0sCisrICAgICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yPXllc10sCisrICAgICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yPW5vXSkKKysgICAgICBdKQorICAgICBdKQorLSAgICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yIiAhPSB5ZXM7IHRoZW4KKysgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yID0gbm87IHRoZW4KKyAgICAgICBkbmwgVGhlIHN5c3RlbSdzIHN0cmVycm9yKCkgZmFpbHMgdG8gcmV0dXJuIGEgc3RyaW5nIGZvciBvdXQtb2YtcmFuZ2UKKyAgICAgICBkbmwgaW50ZWdlcnMuIFJlcGxhY2UgaXQuCisgICAgICAgUkVQTEFDRV9TVFJFUlJPUj0xCisgICAgIGZpCistICAgIG00X2lmZGVmKFtnbF9GVU5DX1NUUkVSUk9SX1JfV09SS1NdLCBbCistICAgICAgZG5sIElmIHRoZSBzeXN0ZW0ncyBzdHJlcnJvcl9yIG9yIF9feHBnX3N0cmVycm9yX3IgY2xvYmJlcnMgc3RyZXJyb3IncworLSAgICAgIGRubCBidWZmZXIsIHdlIG11c3QgcmVwbGFjZSBzdHJlcnJvci4KKy0gICAgICBjYXNlICIkZ2xfY3ZfZnVuY19zdHJlcnJvcl9yX3dvcmtzIiBpbgorLSAgICAgICAgKm5vKSBSRVBMQUNFX1NUUkVSUk9SPTEgOzsKKy0gICAgICBlc2FjCistICAgIF0pCisgICBlbHNlCisgICAgIGRubCBUaGUgc3lzdGVtJ3Mgc3RyZXJyb3IoKSBjYW5ub3Qga25vdyBhYm91dCB0aGUgbmV3IGVycm5vIHZhbHVlcyB3ZSBhZGQKKy0gICAgZG5sIHRvIDxlcnJuby5oPiwgb3IgYW55IGZpeCBmb3Igc3RyZXJyb3IoMCkuIFJlcGxhY2UgaXQuCisrICAgIGRubCB0byA8ZXJybm8uaD4uIFJlcGxhY2UgaXQuCisgICAgIFJFUExBQ0VfU1RSRVJST1I9MQorICAgZmkKKysgIGlmIHRlc3QgJFJFUExBQ0VfU1RSRVJST1IgPSAxOyB0aGVuCisrICAgIGdsX1BSRVJFUV9TVFJFUlJPUgorKyAgZmkKKyBdKQorIAorLWRubCBEZXRlY3QgaWYgc3RyZXJyb3IoMCkgcGFzc2VzICh0aGF0IGlzLCBkb2VzIG5vdCBzZXQgZXJybm8sIGFuZCBkb2VzIG5vdAorLWRubCByZXR1cm4gYSBzdHJpbmcgdGhhdCBtYXRjaGVzIHN0cmVycm9yKC0xKSkuCistQUNfREVGVU4oW2dsX0ZVTkNfU1RSRVJST1JfMF0sCistWworLSAgUkVQTEFDRV9TVFJFUlJPUl8wPTAKKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHN0cmVycm9yKDApIHN1Y2NlZWRzXSwKKy0gICBbZ2xfY3ZfZnVuY19zdHJlcnJvcl8wX3dvcmtzXSwKKy0gICBbQUNfUlVOX0lGRUxTRSgKKy0gICAgICBbQUNfTEFOR19QUk9HUkFNKAorLSAgICAgICAgIFtbI2luY2x1ZGUgPHN0cmluZy5oPgorLSAgICAgICAgICAgI2luY2x1ZGUgPGVycm5vLmg+CistICAgICAgICAgXV0sCistICAgICAgICAgW1tpbnQgcmVzdWx0ID0gMDsKKy0gICAgICAgICAgIGNoYXIgKnN0cjsKKy0gICAgICAgICAgIGVycm5vID0gMDsKKy0gICAgICAgICAgIHN0ciA9IHN0cmVycm9yICgwKTsKKy0gICAgICAgICAgIGlmICghKnN0cikgcmVzdWx0IHw9IDE7CistICAgICAgICAgICBpZiAoZXJybm8pIHJlc3VsdCB8PSAyOworLSAgICAgICAgICAgaWYgKHN0cnN0ciAoc3RyLCAibmtub3duIikgfHwgc3Ryc3RyIChzdHIsICJuZGVmaW5lZCIpKQorLSAgICAgICAgICAgICByZXN1bHQgfD0gNDsKKy0gICAgICAgICAgIHJldHVybiByZXN1bHQ7XV0pXSwKKy0gICAgICBbZ2xfY3ZfZnVuY19zdHJlcnJvcl8wX3dvcmtzPXllc10sCistICAgICAgW2dsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3Jrcz1ub10sCistICAgICAgW2RubCBCZSBwZXNzaW1pc3RpYyBvbiBjcm9zcy1jb21waWxlcyBmb3Igbm93LgorLSAgICAgICBnbF9jdl9mdW5jX3N0cmVycm9yXzBfd29ya3M9Imd1ZXNzaW5nIG5vIl0pCistICBdKQorLSAgaWYgdGVzdCAiJGdsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3JrcyIgIT0geWVzOyB0aGVuCistICAgIFJFUExBQ0VfU1RSRVJST1JfMD0xCistICAgIEFDX0RFRklORShbUkVQTEFDRV9TVFJFUlJPUl8wXSwgWzFdLCBbRGVmaW5lIHRvIDEgaWYgc3RyZXJyb3IoMCkKKy0gICAgICBkb2VzIG5vdCByZXR1cm4gYSBtZXNzYWdlIGltcGx5aW5nIHN1Y2Nlc3MuXSkKKysjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3N0cmVycm9yLmMuCisrQUNfREVGVU4oW2dsX1BSRVJFUV9TVFJFUlJPUl0sIFsKKysgIEFDX0NIRUNLX0RFQ0xTKFtzdHJlcnJvcl0pCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3N5cy9zb2NrZXQuaF0pCisrICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3NvY2tldF9oICE9IHllczsgdGhlbgorKyAgICBkbmwgV2UgY2Fubm90IHVzZSBBQ19DSEVDS19IRUFERVJTX09OQ0UgaGVyZSwgYmVjYXVzZSB0aGF0IHdvdWxkIG1ha2UKKysgICAgZG5sIHRoZSBjaGVjayBmb3IgdGhvc2UgaGVhZGVycyB1bmNvbmRpdGlvbmFsOyB5ZXQgY3lnd2luIHJlcG9ydHMKKysgICAgZG5sIHRoYXQgdGhlIGhlYWRlcnMgYXJlIHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCAoc2luY2Ugb24KKysgICAgZG5sIGN5Z3dpbiwgYWxsIHNvY2tldCBpbmZvcm1hdGlvbiBzaG91bGQgY29tZSBmcm9tIHN5cy9zb2NrZXQuaCkuCisrICAgIEFDX0NIRUNLX0hFQURFUlMoW3dpbnNvY2syLmhdKQorICAgZmkKKyBdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3N0cmluZ19oLm00IGxpYmljb252LTEuMTQvc3JjbTQvc3RyaW5nX2gubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc3RyaW5nX2gubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3N0cmluZ19oLm00CTIwMTItMDEtMDggMDI6MDc6NDAuODk0NDg0NDg1IC0wODAwCitAQCAtNSw3ICs1LDcgQEAKKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisgIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCistIyBzZXJpYWwgMjEKKysjIHNlcmlhbCAyMAorIAorICMgV3JpdHRlbiBieSBQYXVsIEVnZ2VydC4KKyAKK0BAIC0yNyw5ICsyNyw5IEBAIEFDX0RFRlVOKFtnbF9IRUFERVJfU1RSSU5HX0hfQk9EWV0sCisgICBkbmwgZ3VhcmFudGVlZCBieSBDODkuCisgICBnbF9XQVJOX09OX1VTRV9QUkVQQVJFKFtbI2luY2x1ZGUgPHN0cmluZy5oPgorICAgICBdXSwKKy0gICAgW2Zmc2wgZmZzbGwgbWVtbWVtIG1lbXBjcHkgbWVtcmNociByYXdtZW1jaHIgc3RwY3B5IHN0cG5jcHkgc3RyY2hybnVsCistICAgICBzdHJkdXAgc3RybmNhdCBzdHJuZHVwIHN0cm5sZW4gc3RycGJyayBzdHJzZXAgc3RyY2FzZXN0ciBzdHJ0b2tfcgorLSAgICAgc3RyZXJyb3JfciBzdHJzaWduYWwgc3RydmVyc2NtcF0pCisrICAgIFttZW1tZW0gbWVtcGNweSBtZW1yY2hyIHJhd21lbWNociBzdHBjcHkgc3RwbmNweSBzdHJjaHJudWwgc3RyZHVwCisrICAgICBzdHJuY2F0IHN0cm5kdXAgc3RybmxlbiBzdHJwYnJrIHN0cnNlcCBzdHJjYXNlc3RyIHN0cnRva19yIHN0cmVycm9yX3IKKysgICAgIHN0cnNpZ25hbCBzdHJ2ZXJzY21wXSkKKyBdKQorIAorIEFDX0RFRlVOKFtnbF9TVFJJTkdfTU9EVUxFX0lORElDQVRPUl0sCitAQCAtNDMsOCArNDMsNiBAQCBBQ19ERUZVTihbZ2xfU1RSSU5HX01PRFVMRV9JTkRJQ0FUT1JdLAorIAorIEFDX0RFRlVOKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdLAorIFsKKy0gIEdOVUxJQl9GRlNMPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX0ZGU0xdKQorLSAgR05VTElCX0ZGU0xMPTA7ICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRkZTTExdKQorICAgR05VTElCX01FTUNIUj0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUVNQ0hSXSkKKyAgIEdOVUxJQl9NRU1NRU09MDsgICAgICBBQ19TVUJTVChbR05VTElCX01FTU1FTV0pCisgICBHTlVMSUJfTUVNUENQWT0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9NRU1QQ1BZXSkKK0BAIC04Miw4ICs4MCw2IEBAIEFDX0RFRlVOKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdLAorICAgR05VTElCX1NUUlZFUlNDTVA9MDsgIEFDX1NVQlNUKFtHTlVMSUJfU1RSVkVSU0NNUF0pCisgICBIQVZFX01CU0xFTj0wOyAgICAgICAgQUNfU1VCU1QoW0hBVkVfTUJTTEVOXSkKKyAgIGRubCBBc3N1bWUgcHJvcGVyIEdOVSBiZWhhdmlvciB1bmxlc3MgYW5vdGhlciBtb2R1bGUgc2F5cyBvdGhlcndpc2UuCistICBIQVZFX0ZGU0w9MTsgICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9GRlNMXSkKKy0gIEhBVkVfRkZTTEw9MTsgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0ZGU0xMXSkKKyAgIEhBVkVfTUVNQ0hSPTE7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX01FTUNIUl0pCisgICBIQVZFX0RFQ0xfTUVNTUVNPTE7ICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX01FTU1FTV0pCisgICBIQVZFX01FTVBDUFk9MTsgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9NRU1QQ1BZXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zeXNfc29ja2V0X2gubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9zeXNfc29ja2V0X2gubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc3lzX3NvY2tldF9oLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zeXNfc29ja2V0X2gubTQJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKK0BAIC0xLDE3NyArMCwwIEBACistIyBzeXNfc29ja2V0X2gubTQgc2VyaWFsIDIyCistZG5sIENvcHlyaWdodCAoQykgMjAwNS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCistCistZG5sIEZyb20gU2ltb24gSm9zZWZzc29uLgorLQorLUFDX0RFRlVOKFtnbF9IRUFERVJfU1lTX1NPQ0tFVF0sCistWworLSAgQUNfUkVRVUlSRShbZ2xfU1lTX1NPQ0tFVF9IX0RFRkFVTFRTXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKy0KKy0gIGRubCBPbiBPU0YvMSwgdGhlIGZ1bmN0aW9ucyByZWN2KCksIHNlbmQoKSwgcmVjdmZyb20oKSwgc2VuZHRvKCkgaGF2ZQorLSAgZG5sIG9sZC1zdHlsZSBkZWNsYXJhdGlvbnMgKHdpdGggcmV0dXJuIHR5cGUgJ2ludCcgaW5zdGVhZCBvZiAnc3NpemVfdCcpCistICBkbmwgdW5sZXNzIF9QT1NJWF9QSUlfU09DS0VUIGlzIGRlZmluZWQuCistICBjYXNlICIkaG9zdF9vcyIgaW4KKy0gICAgb3NmKikKKy0gICAgICBBQ19ERUZJTkUoW19QT1NJWF9QSUlfU09DS0VUXSwgWzFdLAorLSAgICAgICAgW0RlZmluZSB0byAxIGluIG9yZGVyIHRvIGdldCB0aGUgUE9TSVggY29tcGF0aWJsZSBkZWNsYXJhdGlvbnMKKy0gICAgICAgICBvZiBzb2NrZXQgZnVuY3Rpb25zLl0pCistICAgICAgOzsKKy0gIGVzYWMKKy0KKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIDxzeXMvc29ja2V0Lmg+IGlzIHNlbGYtY29udGFpbmVkXSwKKy0gICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2VsZmNvbnRhaW5lZF0sCistICAgIFsKKy0gICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dXSwgW1tdXSldLAorLSAgICAgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2VsZmNvbnRhaW5lZD15ZXNdLAorLSAgICAgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2VsZmNvbnRhaW5lZD1ub10pCistICAgIF0pCistICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NlbGZjb250YWluZWQgPSB5ZXM7IHRoZW4KKy0gICAgZG5sIElmIHRoZSBzaHV0ZG93biBmdW5jdGlvbiBleGlzdHMsIDxzeXMvc29ja2V0Lmg+IHNob3VsZCBkZWZpbmUKKy0gICAgZG5sIFNIVVRfUkQsIFNIVVRfV1IsIFNIVVRfUkRXUi4KKy0gICAgQUNfQ0hFQ0tfRlVOQ1MoW3NodXRkb3duXSkKKy0gICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zaHV0ZG93biA9IHllczsgdGhlbgorLSAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIDxzeXMvc29ja2V0Lmg+IGRlZmluZXMgdGhlIFNIVVRfKiBtYWNyb3NdLAorLSAgICAgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2h1dF0sCistICAgICAgICBbCistICAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorLSAgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl1dLAorLSAgICAgICAgICAgICAgIFtbaW50IGFbXSA9IHsgU0hVVF9SRCwgU0hVVF9XUiwgU0hVVF9SRFdSIH07XV0pXSwKKy0gICAgICAgICAgICBbZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zaHV0PXllc10sCistICAgICAgICAgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2h1dD1ub10pCistICAgICAgICBdKQorLSAgICAgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2h1dCA9IG5vOyB0aGVuCistICAgICAgICBTWVNfU09DS0VUX0g9J3N5cy9zb2NrZXQuaCcKKy0gICAgICBmaQorLSAgICBmaQorLSAgZmkKKy0gICMgV2UgbmVlZCB0byBjaGVjayBmb3Igd3MydGNwaXAuaCBub3cuCistICBnbF9QUkVSRVFfU1lTX0hfU09DS0VUCistICBBQ19DSEVDS19UWVBFUyhbc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UsIHNhX2ZhbWlseV90XSwsLFsKKy0gIC8qIHN5cy90eXBlcy5oIGlzIG5vdCBuZWVkZWQgYWNjb3JkaW5nIHRvIFBPU0lYLCBidXQgdGhlCistICAgICBzeXMvc29ja2V0LmggaW4gaTM4Ni11bmtub3duLWZyZWVic2Q0LjEwIGFuZAorLSAgICAgcG93ZXJwYy1hcHBsZS1kYXJ3aW41LjUgcmVxdWlyZWQgaXQuICovCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CistI2VuZGlmCistI2lmZGVmIEhBVkVfV1MyVENQSVBfSAorLSNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorLSNlbmRpZgorLV0pCistICBpZiB0ZXN0ICRhY19jdl90eXBlX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlID0gbm87IHRoZW4KKy0gICAgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRT0wCistICBmaQorLSAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9zYV9mYW1pbHlfdCA9IG5vOyB0aGVuCistICAgIEhBVkVfU0FfRkFNSUxZX1Q9MAorLSAgZmkKKy0gIGlmIHRlc3QgJGFjX2N2X3R5cGVfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UgIT0gbm87IHRoZW4KKy0gICAgQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Uuc3NfZmFtaWx5XSwKKy0gICAgICBbXSwKKy0gICAgICBbSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9TU19GQU1JTFk9MF0sCistICAgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0gICAgICAgI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICistICAgICAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CistICAgICAgICNlbmRpZgorLSAgICAgICAjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICistICAgICAgICNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorLSAgICAgICAjZW5kaWYKKy0gICAgICBdKQorLSAgZmkKKy0gIGlmIHRlc3QgJEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UgPSAwIHx8IHRlc3QgJEhBVkVfU0FfRkFNSUxZX1QgPSAwIFwKKy0gICAgIHx8IHRlc3QgJEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZID0gMDsgdGhlbgorLSAgICBTWVNfU09DS0VUX0g9J3N5cy9zb2NrZXQuaCcKKy0gIGZpCistICBnbF9QUkVSRVFfU1lTX0hfV0lOU09DSzIKKy0KKy0gIGRubCBDaGVjayBmb3IgZGVjbGFyYXRpb25zIG9mIGFueXRoaW5nIHdlIHdhbnQgdG8gcG9pc29uIGlmIHRoZQorLSAgZG5sIGNvcnJlc3BvbmRpbmcgZ251bGliIG1vZHVsZSBpcyBub3QgaW4gdXNlLgorLSAgZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWworLS8qIFNvbWUgc3lzdGVtcyByZXF1aXJlIHByZXJlcXVpc2l0ZSBoZWFkZXJzLiAgKi8KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKy0gICAgXV0sIFtzb2NrZXQgY29ubmVjdCBhY2NlcHQgYmluZCBnZXRwZWVybmFtZSBnZXRzb2NrbmFtZSBnZXRzb2Nrb3B0CistICAgIGxpc3RlbiByZWN2IHNlbmQgcmVjdmZyb20gc2VuZHRvIHNldHNvY2tvcHQgc2h1dGRvd24gYWNjZXB0NF0pCistXSkKKy0KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1NZU19IX1NPQ0tFVF0sCistWworLSAgZG5sIENoZWNrIHByZXJlcXVpc2l0ZXMgb2YgdGhlIDxzeXMvc29ja2V0Lmg+IHJlcGxhY2VtZW50LgorLSAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfU09DS0VUX0hFQURFUlNdKQorLSAgZ2xfQ0hFQ0tfTkVYVF9IRUFERVJTKFtzeXMvc29ja2V0LmhdKQorLSAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaCA9IHllczsgdGhlbgorLSAgICBIQVZFX1NZU19TT0NLRVRfSD0xCistICAgIEhBVkVfV1MyVENQSVBfSD0wCistICBlbHNlCistICAgIEhBVkVfU1lTX1NPQ0tFVF9IPTAKKy0gICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2ggPSB5ZXM7IHRoZW4KKy0gICAgICBIQVZFX1dTMlRDUElQX0g9MQorLSAgICBlbHNlCistICAgICAgSEFWRV9XUzJUQ1BJUF9IPTAKKy0gICAgZmkKKy0gIGZpCistICBBQ19TVUJTVChbSEFWRV9TWVNfU09DS0VUX0hdKQorLSAgQUNfU1VCU1QoW0hBVkVfV1MyVENQSVBfSF0pCistXSkKKy0KKy0jIENvbW1vbiBwcmVyZXF1aXNpdGVzIG9mIHRoZSA8c3lzL3NvY2tldC5oPiByZXBsYWNlbWVudCBhbmQgb2YgdGhlCistIyA8c3lzL3NlbGVjdC5oPiByZXBsYWNlbWVudC4KKy0jIFNldHMgYW5kIHN1YnN0aXR1dGVzIEhBVkVfV0lOU09DSzJfSC4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1NZU19IX1dJTlNPQ0syXSwKKy1bCistICBtNF9pZmRlZihbZ2xfVU5JU1REX0hfREVGQVVMVFNdLCBbQUNfUkVRVUlSRShbZ2xfVU5JU1REX0hfREVGQVVMVFNdKV0pCistICBtNF9pZmRlZihbZ2xfU1lTX0lPQ1RMX0hfREVGQVVMVFNdLCBbQUNfUkVRVUlSRShbZ2xfU1lTX0lPQ1RMX0hfREVGQVVMVFNdKV0pCistICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3N5cy9zb2NrZXQuaF0pCistICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3NvY2tldF9oICE9IHllczsgdGhlbgorLSAgICBkbmwgV2UgY2Fubm90IHVzZSBBQ19DSEVDS19IRUFERVJTX09OQ0UgaGVyZSwgYmVjYXVzZSB0aGF0IHdvdWxkIG1ha2UKKy0gICAgZG5sIHRoZSBjaGVjayBmb3IgdGhvc2UgaGVhZGVycyB1bmNvbmRpdGlvbmFsOyB5ZXQgY3lnd2luIHJlcG9ydHMKKy0gICAgZG5sIHRoYXQgdGhlIGhlYWRlcnMgYXJlIHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCAoc2luY2Ugb24KKy0gICAgZG5sIGN5Z3dpbiwgYWxsIHNvY2tldCBpbmZvcm1hdGlvbiBzaG91bGQgY29tZSBmcm9tIHN5cy9zb2NrZXQuaCkuCistICAgIEFDX0NIRUNLX0hFQURFUlMoW3dpbnNvY2syLmhdKQorLSAgZmkKKy0gIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfd2luc29jazJfaCIgPSB5ZXM7IHRoZW4KKy0gICAgSEFWRV9XSU5TT0NLMl9IPTEKKy0gICAgVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IPTEKKy0gICAgU1lTX0lPQ1RMX0hfSEFWRV9XSU5TT0NLMl9IPTEKKy0gIGVsc2UKKy0gICAgSEFWRV9XSU5TT0NLMl9IPTAKKy0gIGZpCistICBBQ19TVUJTVChbSEFWRV9XSU5TT0NLMl9IXSkKKy1dKQorLQorLUFDX0RFRlVOKFtnbF9TWVNfU09DS0VUX01PRFVMRV9JTkRJQ0FUT1JdLAorLVsKKy0gIGRubCBVc2UgQUNfUkVRVUlSRSBoZXJlLCBzbyB0aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSBleHBhbmRlZCBvbmNlIG9ubHkuCistICBBQ19SRVFVSVJFKFtnbF9TWVNfU09DS0VUX0hfREVGQVVMVFNdKQorLSAgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEUoWyQxXSkKKy0gIGRubCBEZWZpbmUgaXQgYWxzbyBhcyBhIEMgbWFjcm8sIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgdW5pdCB0ZXN0cy4KKy0gIGdsX01PRFVMRV9JTkRJQ0FUT1JfRk9SX1RFU1RTKFskMV0pCistXSkKKy0KKy1BQ19ERUZVTihbZ2xfU1lTX1NPQ0tFVF9IX0RFRkFVTFRTXSwKKy1bCistICBHTlVMSUJfU09DS0VUPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TT0NLRVRdKQorLSAgR05VTElCX0NPTk5FQ1Q9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfQ09OTkVDVF0pCistICBHTlVMSUJfQUNDRVBUPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9BQ0NFUFRdKQorLSAgR05VTElCX0JJTkQ9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfQklORF0pCistICBHTlVMSUJfR0VUUEVFUk5BTUU9MDsgQUNfU1VCU1QoW0dOVUxJQl9HRVRQRUVSTkFNRV0pCistICBHTlVMSUJfR0VUU09DS05BTUU9MDsgQUNfU1VCU1QoW0dOVUxJQl9HRVRTT0NLTkFNRV0pCistICBHTlVMSUJfR0VUU09DS09QVD0wOyAgQUNfU1VCU1QoW0dOVUxJQl9HRVRTT0NLT1BUXSkKKy0gIEdOVUxJQl9MSVNURU49MDsgICAgICBBQ19TVUJTVChbR05VTElCX0xJU1RFTl0pCistICBHTlVMSUJfUkVDVj0wOyAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9SRUNWXSkKKy0gIEdOVUxJQl9TRU5EPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX1NFTkRdKQorLSAgR05VTElCX1JFQ1ZGUk9NPTA7ICAgIEFDX1NVQlNUKFtHTlVMSUJfUkVDVkZST01dKQorLSAgR05VTElCX1NFTkRUTz0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU0VORFRPXSkKKy0gIEdOVUxJQl9TRVRTT0NLT1BUPTA7ICBBQ19TVUJTVChbR05VTElCX1NFVFNPQ0tPUFRdKQorLSAgR05VTElCX1NIVVRET1dOPTA7ICAgIEFDX1NVQlNUKFtHTlVMSUJfU0hVVERPV05dKQorLSAgR05VTElCX0FDQ0VQVDQ9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfQUNDRVBUNF0pCistICBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFPTE7IEFDX1NVQlNUKFtIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFXSkKKy0gIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZPTE7CistICAgICAgICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZXSkKKy0gIEhBVkVfU0FfRkFNSUxZX1Q9MTsgICBBQ19TVUJTVChbSEFWRV9TQV9GQU1JTFlfVF0pCistICBIQVZFX0FDQ0VQVDQ9MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfQUNDRVBUNF0pCistXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC93YXJuLW9uLXVzZS5tNCBsaWJpY29udi0xLjE0L3NyY200L3dhcm4tb24tdXNlLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3dhcm4tb24tdXNlLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC93YXJuLW9uLXVzZS5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjkzNDQ4NDQ4NyAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyB3YXJuLW9uLXVzZS5tNCBzZXJpYWwgNAorKyMgd2Fybi1vbi11c2UubTQgc2VyaWFsIDIKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMjcsOCArMjcsNiBAQCBBQ19ERUZVTihbZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRV0sCisgICAgIFtBSF9URU1QTEFURShbSEFWRV9SQVdfREVDTF9dQVNfVFJfQ1BQKG00X2RlZm4oW2dsX2RlY2xdKSksCisgICAgICAgW0RlZmluZSB0byAxIGlmIF1tNF9kZWZuKFtnbF9kZWNsXSlbIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIKKyAgICAgICAgdW5kZWZpbmluZyBtYWNyb3MuXSldKWRubAorLWRubCBGSVhNRTogZ2xfU3ltYm9sIG11c3QgYmUgdXNlZCB1bnF1b3RlZCB1bnRpbCB3ZSBjYW4gYXNzdW1lCistZG5sIGF1dG9jb25mIDIuNjQgb3IgbmV3ZXIuCisgICBmb3IgZ2xfZnVuYyBpbiBtNF9mbGF0dGVuKFskMl0pOyBkbworICAgICBBU19WQVJfUFVTSERFRihbZ2xfU3ltYm9sXSwgW2dsX2N2X2hhdmVfcmF3X2RlY2xfJGdsX2Z1bmNdKWRubAorICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm9dLAorQEAgLTM3LDggKzM1LDggQEAgZG5sIGF1dG9jb25mIDIuNjQgb3IgbmV3ZXIuCisgW0AlOkB1bmRlZiAkZ2xfZnVuYworICAgKHZvaWQpICRnbF9mdW5jO10pXSwKKyAgICAgICAgIFtBU19WQVJfU0VUKGdsX1N5bWJvbCwgW3llc10pXSwgW0FTX1ZBUl9TRVQoZ2xfU3ltYm9sLCBbbm9dKV0pXSkKKy0gICAgQVNfVkFSX0lGKGdsX1N5bWJvbCwgW3llc10sCistICAgICAgW0FDX0RFRklORV9VTlFVT1RFRChBU19UUl9DUFAoW0hBVkVfUkFXX0RFQ0xfJGdsX2Z1bmNdKSwgWzFdKQorKyAgICAgQVNfVkFSX0lGKGdsX1N5bWJvbCwgW3llc10sCisrICAgICAgIFtBQ19ERUZJTkVfVU5RVU9URUQoQVNfVFJfQ1BQKFtIQVZFX1JBV19ERUNMXyRnbF9mdW5jXSksIFsxXSkKKyAgICAgICAgZG5sIHNob3J0Y3V0IC0gaWYgdGhlIHJhdyBkZWNsYXJhdGlvbiBleGlzdHMsIHRoZW4gc2V0IGEgY2FjaGUKKyAgICAgICAgZG5sIHZhcmlhYmxlIHRvIGFsbG93IHNraXBwaW5nIGFueSBsYXRlciBBQ19DSEVDS19ERUNMIGVmZm9ydHMKKyAgICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1bmM9eWVzXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xNC9hdXRvY29uZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xNC9hdXRvY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDM0Y2U3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjE0L2F1dG9jb25mLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0l0IGFkZHMgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSBuZWVkZWQKK2ZvciBhdXRvY29uZiAyLjY1IHRvIHJlY29uZmlndXJlIGxpYmljb252IGFuZCBkZWxldGUgdGhlIG00IG1hY3JvcworZGlyZWN0b3J5LiBJdHMgaW1wb3J0ZWQgZnJvbSBPRS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBsaWJpY29udi0xLjEzLjEvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliaWNvbnYtMS4xMy4xLm9yaWcvY29uZmlndXJlLmFjCisrKysgbGliaWNvbnYtMS4xMy4xL2NvbmZpZ3VyZS5hYworQEAgLTIzLDcgKzIzLDcgQEAgQUNfQ09ORklHX0FVWF9ESVIoW2J1aWxkLWF1eF0pCisgQU1fSU5JVF9BVVRPTUFLRShbbGliaWNvbnZdLCBbMS4xMy4xXSkKKyBBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmggbGliL2NvbmZpZy5oXSkKKyBBQ19QUk9HX01BS0VfU0VUCistCisrQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorIGRubCAgICAgICAgICAgY2hlY2tzIGZvciBiYXNpYyBwcm9ncmFtcworIAorIEFDX1BST0dfQ0MKK0luZGV4OiBsaWJpY29udi0xLjEzLjEvbGliY2hhcnNldC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpY29udi0xLjEzLjEub3JpZy9saWJjaGFyc2V0L2NvbmZpZ3VyZS5hYworKysrIGxpYmljb252LTEuMTMuMS9saWJjaGFyc2V0L2NvbmZpZ3VyZS5hYworQEAgLTE2LDE3ICsxNiwxNyBAQCBkbmwgYWxvbmcgd2l0aCB0aGUgR05VIENIQVJTRVQgTGlicmFyeTsKKyBkbmwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LAorIGRubCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgCistQUNfUFJFUkVRKFsyLjEzXSkKKytBQ19QUkVSRVEoMi42MSkKKytBQ19JTklUKFtsaWJjaGFyc2V0XSxbMS40XSApCisrQUNfQ09ORklHX1NSQ0RJUihbbGliL2xvY2FsY2hhcnNldC5jXSkKKyAKKy1QQUNLQUdFPWxpYmNoYXJzZXQKKy1WRVJTSU9OPTEuNAorLQorLUFDX0lOSVQoW2xpYi9sb2NhbGNoYXJzZXQuY10pCisgQUNfQ09ORklHX0FVWF9ESVIoW2J1aWxkLWF1eF0pCisgQUNfQ09ORklHX0hFQURFUihbY29uZmlnLmhdKQorIEFDX1BST0dfTUFLRV9TRVQKKy1BQ19TVUJTVChbUEFDS0FHRV0pCistQUNfU1VCU1QoW1ZFUlNJT05dKQorK2RubCBBQ19TVUJTVChQQUNLQUdFKQorK2RubCBBQ19TVUJTVChWRVJTSU9OKQorKworK0FDX0NPTkZJR19NQUNST19ESVIoW200XSkKKyAKKyBkbmwgICAgICAgICAgIGNoZWNrcyBmb3IgYmFzaWMgcHJvZ3JhbXMKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xMS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udl8xLjExLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlNGI5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xMS4xLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiQ2hhcmFjdGVyIGVuY29kaW5nIHN1cHBvcnQgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkdOVSBsaWJpY29udiAtIGxpYmljb252IGlzIGZvciB5b3UgaWYgeW91ciBhcHBsaWNhdGlvbiBuZWVkcyB0byBzdXBwb3J0IFwKK211bHRpcGxlIGNoYXJhY3RlciBlbmNvZGluZ3MsIGJ1dCB0aGF0IHN1cHBvcnQgbGFja3MgZnJvbSB5b3VyIHN5c3RlbS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWNvbnYiCitTRUNUSU9OID0gImxpYnMiCitOT1RFUyA9ICJOZWVkcyB0byBiZSBzdHJpcHBlZCBkb3duIHRvOiBhc2NpaSBpc284ODU5LTEgZXVjanAgaXNvLTIwMjJqcCBnYiB1dGY4IgorUFJPVklERVMgPSAidmlydHVhbC9saWJpY29udiIKKworTElDRU5TRSA9ICJMR1BMdjIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJjaGFyc2V0L0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2F1dG9jb25mLnBhdGNoIFwKKwkgICBmaWxlOi8vc2hhcmVkX3ByZWxvYWRhYmxlX2xpYmljb252X2xpbnV4LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNDJiOTdmNmVmNWRkMGJhNDQ2OWQ1MjBlZDczMmZlZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlNzhjMzQ3YTFhMGNiMTVmMjY0ODUxOWU5Nzk5MTUxZjRiNGE5MzRiNjFhZDllZTc0MjQ0NzhlZmUyYjgyNTdmIgorCitTID0gIiR7V09SS0RJUn0vbGliaWNvbnYtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0CisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBkLmdldFZhcigiVENMSUJDIiwgVHJ1ZSkgPT0gImdsaWJjIjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImxpYmljb252IGlzIHByb3ZpZGVkIGZvciB1c2Ugd2l0aCB1Q2xpYmMgb25seSAtIGdsaWJjIGFscmVhZHkgcHJvdmlkZXMgaWNvbnYiKQorfQorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS1zdGF0aWMgLS1lbmFibGUtcmVsb2NhdGFibGUiCisKK0xFQURfU09OQU1FID0gImxpYmljb252LnNvIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9tNC9saWJ0b29sLm00ICR7U30vbTQvbHRvcHRpb25zLm00ICR7U30vbTQvbHRzdWdhci5tNCAke1N9L200L2x0dmVyc2lvbi5tNCAke1N9L200L2x0fm9ic29sZXRlLm00ICR7U30vbGliY2hhcnNldC9tNC9saWJ0b29sLm00ICR7U30vbGliY2hhcnNldC9tNC9sdG9wdGlvbnMubTQgJHtTfS9saWJjaGFyc2V0L200L2x0c3VnYXIubTQgJHtTfS9saWJjaGFyc2V0L200L2x0dmVyc2lvbi5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbHR+b2Jzb2xldGUubTQKK30KKworZG9fY29uZmlndXJlX2FwcGVuZCAoKSB7CisgICAgICAgICMgZm9yY2libHkgcmVtb3ZlIFJQQVRIIGZyb20gbGlidG9vbAorICAgICAgICBzZWQgLWkgJ3N8XmhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Lip8aGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iInxnJyAqbGlidG9vbAorICAgICAgICBzZWQgLWkgJ3N8XnJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRIfHJ1bnBhdGhfdmFyPV9OT19SUEFUSF98ZycgKmxpYnRvb2wKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L3ByZWxvYWRhYmxlX2xpYmljb252LnNvCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vY2hhcnNldC5hbGlhcworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udl8xLjE0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udl8xLjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNmZlMDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252XzEuMTQuYmIKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJDaGFyYWN0ZXIgZW5jb2Rpbmcgc3VwcG9ydCBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiR05VIGxpYmljb252IC0gbGliaWNvbnYgaXMgZm9yIHlvdSBpZiB5b3VyIGFwcGxpY2F0aW9uIG5lZWRzIHRvIHN1cHBvcnQgXAorbXVsdGlwbGUgY2hhcmFjdGVyIGVuY29kaW5ncywgYnV0IHRoYXQgc3VwcG9ydCBsYWNrcyBmcm9tIHlvdXIgc3lzdGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpY29udiIKK1NFQ1RJT04gPSAibGlicyIKK05PVEVTID0gIk5lZWRzIHRvIGJlIHN0cmlwcGVkIGRvd24gdG86IGFzY2lpIGlzbzg4NTktMSBldWNqcCBpc28tMjAyMmpwIGdiIHV0ZjgiCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYmljb252IgorUFIgPSAicjEiCitMSUNFTlNFID0gIkxHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJjaGFyc2V0L0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2F1dG9jb25mLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1yZWxvY2F0YWJsZS1tb2R1bGUucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImUzNDUwOWIxNjIzY2VjNDQ5ZGZlYjczZDdjZTljNmM2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcyYjI0ZGVkMTdkNjg3MTkzYzMzNjZkMGViZTdjZGUxZTZiMThmMGRmOGM1NTQzOGFjOTViZTM5ZThhMzA2MTMiCisKK1MgPSAiJHtXT1JLRElSfS9saWJpY29udi0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGlmIGQuZ2V0VmFyKCJUQVJHRVRfT1MiLCBUcnVlKSAhPSAibGludXgiOgorICAgICAgICByZXR1cm4KKyAgICBpZiBkLmdldFZhcigiVENMSUJDIiwgVHJ1ZSkgPT0gImdsaWJjIjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImxpYmljb252IGlzIHByb3ZpZGVkIGZvciB1c2Ugd2l0aCB1Q2xpYmMgb25seSAtIGdsaWJjIGFscmVhZHkgcHJvdmlkZXMgaWNvbnYiKQorfQorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS1zdGF0aWMgLS1lbmFibGUtcmVsb2NhdGFibGUiCisKK0xFQURfU09OQU1FID0gImxpYmljb252LnNvIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9tNC9saWJ0b29sLm00ICR7U30vbTQvbHRvcHRpb25zLm00ICR7U30vbTQvbHRzdWdhci5tNCAke1N9L200L2x0dmVyc2lvbi5tNCAke1N9L200L2x0fm9ic29sZXRlLm00ICR7U30vbGliY2hhcnNldC9tNC9saWJ0b29sLm00ICR7U30vbGliY2hhcnNldC9tNC9sdG9wdGlvbnMubTQgJHtTfS9saWJjaGFyc2V0L200L2x0c3VnYXIubTQgJHtTfS9saWJjaGFyc2V0L200L2x0dmVyc2lvbi5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbHR+b2Jzb2xldGUubTQKK30KKworZG9fY29uZmlndXJlX2FwcGVuZCAoKSB7CisgICAgICAgICMgZm9yY2libHkgcmVtb3ZlIFJQQVRIIGZyb20gbGlidG9vbAorICAgICAgICBzZWQgLWkgJ3N8XmhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Lip8aGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iInxnJyAqbGlidG9vbAorICAgICAgICBzZWQgLWkgJ3N8XnJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRIfHJ1bnBhdGhfdmFyPV9OT19SUEFUSF98ZycgKmxpYnRvb2wKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L3ByZWxvYWRhYmxlX2xpYmljb252LnNvCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vY2hhcnNldC5hbGlhcworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhL2tzYmEtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJrc2JhL2xpYmtzYmEva3NiYS1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4ODZjNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhL2tzYmEtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTUyIEBACitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAorCitBZGQgcGtnY29uZmlnIHN1cHBvcnQgdG8gbGlia3NiYS4KK1RoaXMgcGF0Y2ggaXMgcmVqZWN0ZWQgYnkgdXBzdHJlYW0gZm9yIHRoZSByZWFzb24gYmVsb3c6CitUaGV5IHRoaW5rIHBrZ2NvbmZpZyBhZGRzIG5vIHBvcnRhYmlsaXR5IGFuZCBtYWludGFpbmluZyB0aGVtIGlzIG5vdCB3b3J0aHdoaWxlLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBsaWJrc2JhLTEuMy4wL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlia3NiYS0xLjMuMC5vcmlnL01ha2VmaWxlLmFtCTIwMTQtMDUtMTMgMjE6Mzk6MjIuMzkwMzg1NjQ2ICswMDAwCisrKysgbGlia3NiYS0xLjMuMC9NYWtlZmlsZS5hbQkyMDE0LTA1LTEzIDIxOjM5OjIyLjQ2MjM4NTY0NiArMDAwMAorQEAgLTIxLDYgKzIxLDkgQEAKKyBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNCAtSSBnbC9tNAorIEFVVE9NQUtFX09QVElPTlMgPSBkaXN0LWJ6aXAyIG5vLWRpc3QtZ3ppcAorIAorK3BrZ2NvbmZpZ2RpciA9ICR7bGliZGlyfS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9IGtzYmEucGMKKysKKyAjIChBIHN1aXRhYmxlIGdpdGxvZy10by1jaGFuZ2Vsb2cgc2NyaXB0IGNhbiBiZSBmb3VuZCBpbiBHbnVQRyBtYXN0ZXIuKQorIEdJVExPR19UT19DSEFOR0VMT0c9Z2l0bG9nLXRvLWNoYW5nZWxvZworIAorSW5kZXg6IGxpYmtzYmEtMS4zLjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlia3NiYS0xLjMuMC5vcmlnL2NvbmZpZ3VyZS5hYwkyMDE0LTA1LTEzIDIxOjM5OjIyLjM5MDM4NTY0NiArMDAwMAorKysrIGxpYmtzYmEtMS4zLjAvY29uZmlndXJlLmFjCTIwMTQtMDUtMTMgMjE6Mzk6MjIuNDYyMzg1NjQ2ICswMDAwCitAQCAtNDAwLDYgKzQwMCw3IEBACisgc3JjL01ha2VmaWxlCisgc3JjL2tzYmEtY29uZmlnCisgc3JjL3ZlcnNpb25pbmZvLnJjCisra3NiYS5wYworIHRlc3RzL01ha2VmaWxlCisgZG9jL01ha2VmaWxlCisgXSkKK0luZGV4OiBsaWJrc2JhLTEuMy4wL2tzYmEucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBsaWJrc2JhLTEuMy4wL2tzYmEucGMuaW4JMjAxNC0wNS0xMyAyMTozOToyMi40NjIzODU2NDYgKzAwMDAKK0BAIC0wLDAgKzEsMTcgQEAKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKysKKysjIEFQSSBpbmZvCisrYXBpX3ZlcnNpb249QEtTQkFfQ09ORklHX0FQSV9WRVJTSU9OQAorK2hvc3Q9QEtTQkFfQ09ORklHX0hPU1RACisrCisrTmFtZToga3NiYQorK0Rlc2NyaXB0aW9uOiBMaWJrc2JhIHByb3ZpZGVzIGFuIGVhc3kgQVBJIHRvIGNyZWF0ZSBhbmQgcGFyc2UgWC41MDkgYW5kIENNUyByZWxhdGVkIG9iamVjdHMKKytSZXF1aXJlczoKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGtzYmEKKytMaWJzLnByaXZhdGU6IC1Me2xpYmRpcn0gLWxncGctZXJyb3IKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorKworSW5kZXg6IGxpYmtzYmEtMS4zLjAvc3JjL2tzYmEubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJrc2JhLTEuMy4wLm9yaWcvc3JjL2tzYmEubTQJMjAxNC0wNS0xMyAyMTozOToyMi4zOTAzODU2NDYgKzAwMDAKKysrKyBsaWJrc2JhLTEuMy4wL3NyYy9rc2JhLm00CTIwMTQtMDUtMTMgMjE6NDk6MDMuNjUwMzgyNjk2ICswMDAwCitAQCAtMjIsMTggKzIyLDcgQEAKKyBkbmwKKyBBQ19ERUZVTihbQU1fUEFUSF9LU0JBXSwKKyBbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorLSBBQ19BUkdfV0lUSChrc2JhLXByZWZpeCwKKy0gICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWtzYmEtcHJlZml4PVBGWF0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeCB3aGVyZSBLU0JBIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCistICAgICBrc2JhX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwga3NiYV9jb25maWdfcHJlZml4PSIiKQorLSAgaWYgdGVzdCB4JGtzYmFfY29uZmlnX3ByZWZpeCAhPSB4IDsgdGhlbgorLSAgICAga3NiYV9jb25maWdfYXJncz0iJGtzYmFfY29uZmlnX2FyZ3MgLS1wcmVmaXg9JGtzYmFfY29uZmlnX3ByZWZpeCIKKy0gICAgIGlmIHRlc3QgeCR7S1NCQV9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorLSAgICAgICAgS1NCQV9DT05GSUc9JGtzYmFfY29uZmlnX3ByZWZpeC9iaW4va3NiYS1jb25maWcKKy0gICAgIGZpCistICBmaQorIAorLSAgQUNfUEFUSF9QUk9HKEtTQkFfQ09ORklHLCBrc2JhLWNvbmZpZywgbm8pCisgICB0bXA9aWZlbHNlKFskMV0sICwxOjEuMC4wLCQxKQorICAgaWYgZWNobyAiJHRtcCIgfCBncmVwICc6JyA+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgdGhlbgorICAgICAgcmVxX2tzYmFfYXBpPWBlY2hvICIkdG1wIiAgICAgfCBzZWQgJ3MvXCguKlwpOlwoLipcKS9cMS8nYAorQEAgLTQzLDQ4ICszMiwxMyBAQAorICAgICAgbWluX2tzYmFfdmVyc2lvbj0iJHRtcCIKKyAgIGZpCisgCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEtTQkEgLSB2ZXJzaW9uID49ICRtaW5fa3NiYV92ZXJzaW9uKQorLSAgb2s9bm8KKy0gIGlmIHRlc3QgIiRLU0JBX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKy0gICAgcmVxX21ham9yPWBlY2hvICRtaW5fa3NiYV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCistICAgIHJlcV9taW5vcj1gZWNobyAkbWluX2tzYmFfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICByZXFfbWljcm89YGVjaG8gJG1pbl9rc2JhX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAga3NiYV9jb25maWdfdmVyc2lvbj1gJEtTQkFfQ09ORklHICRrc2JhX2NvbmZpZ19hcmdzIC0tdmVyc2lvbmAKKy0gICAgbWFqb3I9YGVjaG8gJGtzYmFfY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorLSAgICBtaW5vcj1gZWNobyAka3NiYV9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wyLydgCistICAgIG1pY3JvPWBlY2hvICRrc2JhX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDMvJ2AKKy0gICAgaWYgdGVzdCAiJG1ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICBvaz15ZXMKKy0gICAgZWxzZQorLSAgICAgICAgaWYgdGVzdCAiJG1ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZ3QgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgIGlmIHRlc3QgIiRtaW5vciIgLWVxICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbWljcm8iIC1nZSAiJHJlcV9taWNybyI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICBmaQorLSAgZmkKKy0gIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEFDX01TR19SRVNVTFQoW3llcyAoJGtzYmFfY29uZmlnX3ZlcnNpb24pXSkKKy0gIGVsc2UKKy0gICAgQUNfTVNHX1JFU1VMVChubykKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhLU0JBLCBba3NiYSA+PSAkbWluX2tzYmFfdmVyc2lvbl0sIFtvaz15ZXNdLCBbb2s9bm9dKQorKworICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgICMgRXZlbiBpZiB3ZSBoYXZlIGEgcmVjZW50IGxpYmtzYmEsIHdlIHNob3VsZCBjaGVjayB0aGF0IHRoZQorICAgICAgIyBBUEkgaXMgY29tcGF0aWJsZS4KKyAgICAgIGlmIHRlc3QgIiRyZXFfa3NiYV9hcGkiIC1ndCAwIDsgdGhlbgorLSAgICAgICAgdG1wPWAkS1NCQV9DT05GSUcgLS1hcGktdmVyc2lvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCisrICAgICAgICB0bXA9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YXBpX3ZlcnNpb24ga3NiYWAKKyAgICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtLU0JBIEFQSSB2ZXJzaW9uXSkKKyAgICAgICAgICAgIGlmIHRlc3QgIiRyZXFfa3NiYV9hcGkiIC1lcSAiJHRtcCIgOyB0aGVuCitAQCAtOTcsMTAgKzUxLDggQEAKKyAgICAgIGZpCisgICBmaQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgS1NCQV9DRkxBR1M9YCRLU0JBX0NPTkZJRyAka3NiYV9jb25maWdfYXJncyAtLWNmbGFnc2AKKy0gICAgS1NCQV9MSUJTPWAkS1NCQV9DT05GSUcgJGtzYmFfY29uZmlnX2FyZ3MgLS1saWJzYAorICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorLSAgICBsaWJrc2JhX2NvbmZpZ19ob3N0PWAkTElCS1NCQV9DT05GSUcgJGtzYmFfY29uZmlnX2FyZ3MgLS1ob3N0IDI+L2Rldi9udWxsIHx8IGVjaG8gbm9uZWAKKysgICAgbGlia3NiYV9jb25maWdfaG9zdD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1ob3N0IGtzYmFgCisgICAgIGlmIHRlc3QgeCIkbGlia3NiYV9jb25maWdfaG9zdCIgIT0geG5vbmUgOyB0aGVuCisgICAgICAgaWYgdGVzdCB4IiRsaWJrc2JhX2NvbmZpZ19ob3N0IiAhPSB4IiRob3N0IiA7IHRoZW4KKyAgIEFDX01TR19XQVJOKFtbCitAQCAtMTE0LDggKzY2LDYgQEAKKyAgICAgICBmaQorICAgICBmaQorICAgZWxzZQorLSAgICBLU0JBX0NGTEFHUz0iIgorLSAgICBLU0JBX0xJQlM9IiIKKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKyAgIGZpCisgICBBQ19TVUJTVChLU0JBX0NGTEFHUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhXzEuMy4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJrc2JhL2xpYmtzYmFfMS4zLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMyMTE2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhXzEuMy4zLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiRWFzeSBBUEkgdG8gY3JlYXRlIGFuZCBwYXJzZSBYLjUwOSBhbmQgQ01TIHJlbGF0ZWQgb2JqZWN0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL3JlbGF0ZWRfc29mdHdhcmUvbGlia3NiYS8iCitMSUNFTlNFID0gIkdQTHYyKyB8IExHUEx2MysgfCBHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mZDU0MWQ4M2Y3NWQwMzhjNGUwNjE3YjY3MmVkOGJkYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTHYzO21kNT0yZjMxYjI2NmQzNDQwZGQ3ZWU1MGY5MmNmNjdkOGU2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEx2MzttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIgXAorICAgICAgICAgICAgICAgICAgICIKKworREVQRU5EUyA9ICJsaWJncGctZXJyb3IiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0va3NiYS1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcgdGV4aW5mbworCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9rc2JhLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImE1ZGQzYzU3ZmNhMjU0OTM1ZjVjZjhkYjI2ZTM5MDY1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBjN2Y1ZmZlMzRkMDQxNGY2OTUxZDk4ODBhNDZmY2MyOTg1YzQ4N2Y3YzM2MzY5YjlmMTFhZDQxMTMxYzc3ODYiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIEVsc2UgdGhlc2UgY291bGQgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRob3NlIGluIGFjbG9jYWwtY29weQorCXJtIC1mICR7U30vbTQvZ3BnLWVycm9yLm00Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm1wYy9saWJtcGMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJtcGMvbGlibXBjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzc0MjU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJtcGMvbGlibXBjLmluYwpAQCAtMCwwICsxLDcgQEAKK1NVTU1BUlkgPSAiQyBsaWJyYXJ5IGZvciBjb21wbGV4IG51bWJlciBhcml0aG1ldGljIHdpdGggYXJiaXRyYXJ5IHByZWNpc2lvbiBhbmQgY29ycmVjdCByb3VuZGluZyIKK0RFU0NSSVBUSU9OID0gIk1wYyBpcyBhIEMgbGlicmFyeSBmb3IgdGhlIGFyaXRobWV0aWMgb2YgY29tcGxleCBudW1iZXJzIHdpdGggYXJiaXRyYXJpbHkgaGlnaCBwcmVjaXNpb24gYW5kIGNvcnJlY3Qgcm91bmRpbmcgb2YgdGhlIHJlc3VsdC4gSXQgaXMgYnVpbHQgdXBvbiBhbmQgZm9sbG93cyB0aGUgc2FtZSBwcmluY2lwbGVzIGFzIE1wZnIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm11bHRpcHJlY2lzaW9uLm9yZy8iCitMSUNFTlNFID0gIkxHUEx2MyIKK1NFQ1RJT04gPSAibGlicyIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJtcGMvbGlibXBjXzEuMC4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJtcGMvbGlibXBjXzEuMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZTVhMTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm1wYy9saWJtcGNfMS4wLjMuYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSBsaWJtcGMuaW5jCisKK0RFUEVORFMgPSAiZ21wIG1wZnIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTEVTU0VSO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiIKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5tdWx0aXByZWNpc2lvbi5vcmcvbXBjL2Rvd25sb2FkL21wYy0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNmExZDVmOGRkZWEzYWJkMmNjM2U5OGY1ODM1MmQyNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MTdkZWNjNmVhMDk4ODlmYjA4ZWRlMzMwOTE3YTAwYjE2ODA5YjhkYjg4YzI5YzMxYmZiYjQ5Y2JmODhlY2MzIgorCitTID0gIiR7V09SS0RJUn0vbXBjLSR7UFZ9IgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sL2ZpeC1wYy1maWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC9maXgtcGMtZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZThiODMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC9maXgtcGMtZmlsZS5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU29tZSBwYWNrYWdlcyBhcmUgYXNraW5nIG9ubHkgZm9yIGxpYm5sLTIuMCwgYnV0IGV4cGVjdHMgdG8gZ2V0IGFsc28KK2xpYm5sLWdlbmwsIGxpYm5sLW5mIGxpYm5sLXJvdXRlLCBlYXNpZXN0IHdheSB0byBmaXggdGhlbSBpcyBoZXJlLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPG1hcnRpbi5qYW5zYUBnbWFpbC5jb20+CitJbmRleDogbGlibmwtMy4yLjE0L2xpYm5sLTMuMC5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYm5sLTMuMi4xNC5vcmlnL2xpYm5sLTMuMC5wYy5pbgorKysrIGxpYm5sLTMuMi4xNC9saWJubC0zLjAucGMuaW4KK0BAIC02LDUgKzYsNSBAQCBpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorIE5hbWU6IGxpYm5sCisgRGVzY3JpcHRpb246IENvbnZlbmllbmNlIGxpYnJhcnkgZm9yIG5ldGxpbmsgc29ja2V0cworIFZlcnNpb246IEBQQUNLQUdFX1ZFUlNJT05ACistTGliczogLUwke2xpYmRpcn0gLWxubC1ATUFKX1ZFUlNJT05ACisrTGliczogLUwke2xpYmRpcn0gLWxubC1ATUFKX1ZFUlNJT05AIC1sbmwtZ2VubC1ATUFKX1ZFUlNJT05AIC1sbmwtbmYtQE1BSl9WRVJTSU9OQCAtbG5sLXJvdXRlLUBNQUpfVkVSU0lPTkAKKyBDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9saWJubEBNQUpfVkVSU0lPTkAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvZml4LXBrdGxvY19zeW50YXhfaC1yYWNlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC9maXgtcGt0bG9jX3N5bnRheF9oLXJhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlhYTBiZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvZml4LXBrdGxvY19zeW50YXhfaC1yYWNlLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworbGlibmwgaGFzIHByb2dyZXNzZWQgdG8gMC4zLjIgYW5kIHRoZXJlIGRvZXMgbm90IGFwcGVhciB0byBiZSBhbnkKKyJtYWtlIC1qIiBpc3N1ZXMgd2l0aCB0aGlzIGJ1aWxkIGFmdGVyIG15IGxpbWl0ZWQgdGVzdGluZyBvbiB0aGF0CituZXdlciB2ZXJzaW9uIHNvIHdlIGNhbiBhc3N1bWUgdGhpcyBpc3N1ZSBpcyBmaXhlZCB1cHN0cmVhbQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPG1hcnRpbi5qYW5zYUBnbWFpbC5jb20+CisKK0luZGV4OiBsaWJubC0zLjIuMjUvbGliL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlibmwtMy4yLjI1Lm9yaWcvbGliL01ha2VmaWxlLmFtCisrKysgbGlibmwtMy4yLjI1L2xpYi9NYWtlZmlsZS5hbQorQEAgLTQ2LDkgKzQ2LDEyIEBAIENMRUFORklMRVMgPSBcCisgCisgIyBIYWNrIHRvIGF2b2lkIHVzaW5nIHlsd3JhcC4gSXQgZG9lcyBub3QgZnVuY3Rpb24gY29ycmVjdGx5IGluIGNvbWJpbmF0aW9uCisgIyB3aXRoIC0taGVhZGVyLWZpbGU9Cisrcm91dGUvcGt0bG9jLmxvOiByb3V0ZS9wa3Rsb2Nfc3ludGF4Lmggcm91dGUvcGt0bG9jX2dyYW1tYXIuaAorK3JvdXRlL3BrdGxvY19ncmFtbWFyLmg6IHJvdXRlL3BrdGxvY19ncmFtbWFyLmMKKyByb3V0ZS9wa3Rsb2NfZ3JhbW1hci5jOiByb3V0ZS9wa3Rsb2NfZ3JhbW1hci5sCisgCSQoQU1fVl9HRU4pICQoTUtESVJfUCkgcm91dGU7ICQoRkxFWCkgLS1oZWFkZXItZmlsZT1yb3V0ZS9wa3Rsb2NfZ3JhbW1hci5oICQoTEZMQUdTKSAtbyAkQCAkXgorIAorK3JvdXRlL3BrdGxvY19zeW50YXguaDogcm91dGUvcGt0bG9jX3N5bnRheC5jCisgcm91dGUvcGt0bG9jX3N5bnRheC5jOiByb3V0ZS9wa3Rsb2Nfc3ludGF4LnkKKyAJJChBTV9WX0dFTikgJChNS0RJUl9QKSByb3V0ZTsgJChZQUNDKSAtZCAkKFlGTEFHUykgLW8gJEAgJF4KKyAKK0BAIC0xMDIsNyArMTA1LDkgQEAgQlVJTFRfU09VUkNFUyA9IFwKKyAJcm91dGUvY2xzL2VtYXRjaF9ncmFtbWFyLmMgXAorIAlyb3V0ZS9jbHMvZW1hdGNoX3N5bnRheC5jIFwKKyAJcm91dGUvcGt0bG9jX2dyYW1tYXIuYyBcCistCXJvdXRlL3BrdGxvY19zeW50YXguYworKyAgIHJvdXRlL3BrdGxvY19zeW50YXguYyBcCisrICAgcm91dGUvcGt0bG9jX3N5bnRheC5oIFwKKysgICByb3V0ZS9wa3Rsb2NfZ3JhbW1hci5oCisgCisgRVhUUkFfRElTVCA9IFwKKyAJcm91dGUvcGt0bG9jX2dyYW1tYXIubCBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sXzMuMi4yNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmxfMy4yLjI1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ODE0ZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sXzMuMi4yNS5iYgpAQCAtMCwwICsxLDQ0IEBACitTVU1NQVJZID0gIkEgbGlicmFyeSBmb3IgYXBwbGljYXRpb25zIGRlYWxpbmcgd2l0aCBuZXRsaW5rIHNvY2tldHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmluZnJhZGVhZC5vcmcvfnRnci9saWJubC8iCitTRUNUSU9OID0gImxpYnMvbmV0d29yayIKKworUEUgPSAiMSIKK1BSID0gInIxIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuaW5mcmFkZWFkLm9yZy9+dGdyLyR7QlBOfS9maWxlcy8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LXBrdGxvY19zeW50YXhfaC1yYWNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1wYy1maWxlLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwM2Y3NGQwY2Q1MDM3Y2FkYzhjZGZhMzEzYmJkMTk1YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4YmViNzU5MDY3NDk1N2I5MzFkZTZiN2Y4MWM1MzBiODVkYzdjMWFkOGZiZGEwMTUzOThiYzFlOGQxY2U4ZWM1IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYm5sLTMuc28uKiBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibmwuc28uKiBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9IgorUlJFUExBQ0VTXyR7UE59ID0gImxpYm5sMiIKK1JDT05GTElDVFNfJHtQTn0gPSAibGlibmwyIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vbGlibmwvY2xpLyovLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vbGlibmwvY2xpLyovKi5zbyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJubC9jbGkvKi8qLmxhIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vbGlibmwvY2xpLyovKi5hIgorCitQQUNLQUdFUyArPSAiJHtQTn0tY2xpICR7UE59LXJvdXRlICR7UE59LW5mICR7UE59LWdlbmwgJHtQTn0taWRpYWciCitGSUxFU18ke1BOfS1jbGkgICA9ICIke2xpYmRpcn0vbGlibmwtY2xpLTMuc28uKiBcCisgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibmwvY2xpLyovKi5zby4qIFwKKyAgICAgICAgICAgICAgICAgICAgICR7c2JpbmRpcn0vbmwtKiIKK0ZJTEVTXyR7UE59LXJvdXRlID0gIiR7bGliZGlyfS9saWJubC1yb3V0ZS0zLnNvLioiCitGSUxFU18ke1BOfS1pZGlhZyA9ICIke2xpYmRpcn0vbGlibmwtaWRpYWctMy5zby4qIgorRklMRVNfJHtQTn0tbmYgICAgPSAiJHtsaWJkaXJ9L2xpYm5sLW5mLTMuc28uKiIKK0ZJTEVTXyR7UE59LWdlbmwgID0gIiR7bGliZGlyfS9saWJubC1nZW5sLTMuc28uKiBcCisgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibmwtZ2VubC5zby4qIFwKKyAgICAgICAgICAgICAgICAgICAgICR7c2JpbmRpcn0vZ2VubC1jdHJsLWxpc3QiCitSUkVQTEFDRVNfJHtQTn0tZ2VubCA9ICJsaWJubC1nZW5sMiBsaWJubC1nZW5sLTMtMjAwIgorUkNPTkZMSUNUU18ke1BOfS1nZW5sID0gImxpYm5sLWdlbmwyIGxpYm5sLWdlbmwtMy0yMDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3LzAwMDEtRml4LWVuYWJsZS12ZnAtZmxhZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvMDAwMS1GaXgtZW5hYmxlLXZmcC1mbGFnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZjFjYjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3LzAwMDEtRml4LWVuYWJsZS12ZnAtZmxhZy5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0Zyb20gMTkyMTQ5OGJjYzA2NDA4ZThiMDUxYTNhOWU5Y2U0MTgyOTk4Zjc0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorRGF0ZTogRnJpLCA4IEFwciAyMDExIDEwOjA1OjQ5IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMTBdIEZpeCAtLWVuYWJsZS12ZnAgZmxhZworCitQYXRjaCBmcm9tIENocmlzdG9waGUgTHlvbiwgZml4ZXMgIzM2MDg0LgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgICB8ICAgIDQgKystLQorIGxpYm9pbC9hcm0vTWFrZWZpbGUuYW0gfCAgICAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOThjODFmYi4uNDA3ZDg4YyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTg4LDggKzE4OCw4IEBAIGZpCisgQUNfQVJHX0VOQUJMRSh2ZnAsCisgICBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmZwXSxbY29tcGlsZSB3aXRoIFZlY3RvciBGbG9hdGluZy1wb2ludCB1bml0IHN1cHBvcnRdKSwKKyAgIGVuYWJsZV92ZnA9JGVuYWJsZXZhbCxlbmFibGVfdmZwPXllcykKKy1pZiB0ZXN0ICJ4JGVuYWJsZS12ZnAiID0geHllcyAtYSB4JEhBVkVfR0NDX0FTTSA9IHh5ZXMgLWEgeCRIQVZFX0FSTSA9IHh5ZXM7IHRoZW4KKy0gIEFTX0NPTVBJTEVSX0ZMQUcoWyItV2EsLW1mcHU9dmZwIl0sCisraWYgdGVzdCAieCRlbmFibGVfdmZwIiA9IHh5ZXMgLWEgeCRIQVZFX0dDQ19BU00gPSB4eWVzIC1hIHgkSEFWRV9BUk0gPSB4eWVzOyB0aGVuCisrICBBU19DT01QSUxFUl9GTEFHKFsiLW1mcHU9dmZwIl0sCisgICAgIFtWRlBfQ0ZMQUdTPSIkVkZQX0NGTEFHUyAtbWZwdT12ZnAiXSwKKyAgICAgdHJ1ZSkKKyAgICNBU19DT01QSUxFUl9GTEFHKFsiLVdhLC1tZmxvYXQtYWJpPXNvZnRmcCJdLAorZGlmZiAtLWdpdCBhL2xpYm9pbC9hcm0vTWFrZWZpbGUuYW0gYi9saWJvaWwvYXJtL01ha2VmaWxlLmFtCitpbmRleCBlYWQwOGVkLi5jZDhkOWZhIDEwMDY0NAorLS0tIGEvbGlib2lsL2FybS9NYWtlZmlsZS5hbQorKysrIGIvbGlib2lsL2FybS9NYWtlZmlsZS5hbQorQEAgLTYsNCArNiw1IEBAIGxpYmFybV9sYV9TT1VSQ0VTID0gXAorIAltYXRoX3ZmcF9hc20uUworIAorIGxpYmFybV9sYV9DRkxBR1MgPSAkKExJQk9JTF9DRkxBR1MpICQoVkZQX0NGTEFHUykKKytsaWJhcm1fbGFfQ0NBU0ZMQUdTID0gJChMSUJPSUxfQ0ZMQUdTKSAkKFZGUF9DRkxBR1MpCisgCistLSAKKzEuNy42CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvZml4LXVuYWxpZ25lZC13aGl0ZWxpc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3L2ZpeC11bmFsaWduZWQtd2hpdGVsaXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZTNjMWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3L2ZpeC11bmFsaWduZWQtd2hpdGVsaXN0LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtOiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTM1OAorCitjb25maWd1cmU6IGZpeCB3aGl0ZWxpc3Rpbmcgb2YgeDg2XzY0IHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzCisKK0ZpeCB0eXBvIGluIHdoaXRlbGlzdCBzbyBjcm9zcy1jb21waWxlIHdvcmtzIGZvciB4ODZfNjQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworLS0tIGxpYm9pbC0wLjMuMTcvbTQvYXMtdW5hbGlnbmVkLWFjY2Vzcy5tNC5vcmlnCTIwMDktMDItMjYgMTQ6NDA6MDguMDAwMDAwMDAwIC0wNTAwCisrKysgbGlib2lsLTAuMy4xNy9tNC9hcy11bmFsaWduZWQtYWNjZXNzLm00CTIwMTAtMTEtMDMgMTI6MTk6NTUuMDAwMDAwMDAwIC0wNDAwCitAQCAtOSw3ICs5LDcgQEAKKyAgICAgICAgIF9BU19FQ0hPX04oWyhibGFja2xpc3RlZCkgXSkKKyAgICAgICAgIGFzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9bm8KKyAJOzsKKy0gICAgICBpPzg2Knx4ODZfNjR8YW1kNjR8cG93ZXJwYyp8bTY4ayp8Y3JpcyopCisrICAgICAgaT84Nip8eDg2XzY0KnxhbWQ2NCp8cG93ZXJwYyp8bTY4ayp8Y3JpcyopCisgICAgICAgICBfQVNfRUNIT19OKFsod2hpdGVsaXN0ZWQpIF0pCisgICAgICAgICBhc19jdl91bmFsaWduZWRfYWNjZXNzPXllcworIAk7OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy9saWJvaWxfZml4X2Zvcl94MzIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3L2xpYm9pbF9maXhfZm9yX3gzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzMzODBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy9saWJvaWxfZml4X2Zvcl94MzIucGF0Y2gKQEAgLTAsMCArMSwyMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitNYWtlIHRoZSBhc3NlbWJseSBzeW50YXggY29tcGF0aWJsZSB3aXRoIHgzMiBnY2MuIE90aGV3aXNlIHgzMiBnY2MgdGhyb3dzIGVycm9ycy4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTEvMTIvMDEKKworCitJbmRleDogbGlib2lsLTAuMy4xNy9saWJvaWwvYW1kNjQvd2F2ZWxldC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlib2lsLTAuMy4xNy5vcmlnL2xpYm9pbC9hbWQ2NC93YXZlbGV0LmMKKysrKyBsaWJvaWwtMC4zLjE3L2xpYm9pbC9hbWQ2NC93YXZlbGV0LmMKK0BAIC0yMSwxNCArMjEsMTQgQEAgZGVpbnRlcmxlYXZlMl9hc20gKGludDE2X3QgKmQxLCBpbnQxNl90IAorICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgc3ViICQyLCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdncgKCUxLCUlcmN4LDQpLCAlJWF4XG4iCistICAgICAgIiAgbW92dyAlJWF4LCAoJTAsJSVyY3gsMilcbiIKKy0gICAgICAiICBtb3Z3IDIoJTEsJSVyY3gsNCksICUlYXhcbiIKKy0gICAgICAiICBtb3Z3ICUlYXgsICglMiwlJXJjeCwyKVxuIgorLSAgICAgICIgIG1vdncgNCglMSwlJXJjeCw0KSwgJSVheFxuIgorLSAgICAgICIgIG1vdncgJSVheCwgMiglMCwlJXJjeCwyKVxuIgorLSAgICAgICIgIG1vdncgNiglMSwlJXJjeCw0KSwgJSVheFxuIgorLSAgICAgICIgIG1vdncgJSVheCwgMiglMiwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdncgKCVxMSwlJXJjeCw0KSwgJSVheFxuIgorKyAgICAgICIgIG1vdncgJSVheCwgKCVxMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdncgMiglcTEsJSVyY3gsNCksICUlYXhcbiIKKysgICAgICAiICBtb3Z3ICUlYXgsICglcTIsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3Z3IDQoJXExLCUlcmN4LDQpLCAlJWF4XG4iCisrICAgICAgIiAgbW92dyAlJWF4LCAyKCVxMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdncgNiglcTEsJSVyY3gsNCksICUlYXhcbiIKKysgICAgICAiICBtb3Z3ICUlYXgsIDIoJXEyLCUlcmN4LDIpXG4iCisgICAgICAgIiAgc3ViICQyLCAlJXJjeFxuIgorICAgICAgICIgIGpnZSAxYlxuIgorICAgICAgIDogIityIiAoZDEpLCAiK3IiIChzXzJ4biksICIrciIgKGQyKSwgIitjIiAobikKK0BAIC01MywyMCArNTMsMjAgQEAgZGVpbnRlcmxlYXZlMl9tbXggKGludDE2X3QgKmQxLCBpbnQxNl90IAorICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdnEgKCUxLCUlcmN4LDQpLCAlJW1tMFxuIgorLSAgICAgICIgIG1vdnEgOCglMSwlJXJjeCw0KSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsNCksICUlbW0wXG4iCisrICAgICAgIiAgbW92cSA4KCVxMSwlJXJjeCw0KSwgJSVtbTFcbiIKKyAgICAgICAiICBwc2xsZCAkMTYsICUlbW0wXG4iCisgICAgICAgIiAgcHNsbGQgJDE2LCAlJW1tMVxuIgorICAgICAgICIgIHBzcmFkICQxNiwgJSVtbTBcbiIKKyAgICAgICAiICBwc3JhZCAkMTYsICUlbW0xXG4iCisgICAgICAgIiAgcGFja3NzZHcgJSVtbTEsICUlbW0wXG4iCistICAgICAgIiAgbW92cSAlJW1tMCwgKCUwLCUlcmN4LDIpXG4iCistICAgICAgIiAgbW92cSAoJTEsJSVyY3gsNCksICUlbW0wXG4iCistICAgICAgIiAgbW92cSA4KCUxLCUlcmN4LDQpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTAsICglcTAsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsNCksICUlbW0wXG4iCisrICAgICAgIiAgbW92cSA4KCVxMSwlJXJjeCw0KSwgJSVtbTFcbiIKKyAgICAgICAiICBwc3JhZCAkMTYsICUlbW0wXG4iCisgICAgICAgIiAgcHNyYWQgJDE2LCAlJW1tMVxuIgorICAgICAgICIgIHBhY2tzc2R3ICUlbW0xLCAlJW1tMFxuIgorLSAgICAgICIgIG1vdnEgJSVtbTAsICglMiwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTAsICglcTIsJSVyY3gsMilcbiIKKyAgICAgICAiICBhZGQgJDQsICUlcmN4XG4iCisgICAgICAgIiAgY21wICUzLCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCitAQCAtOTMsMTAgKzkzLDEwIEBAIGRlaW50ZXJsZWF2ZTJfbW14XzIgKGludDE2X3QgKmQxLCBpbnQxNl8KKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBwc2h1ZncgJDB4ZDgsICglMSwlJXJjeCw0KSwgJSVtbTBcbiIKKy0gICAgICAiICBtb3ZkICUlbW0wLCAoJTAsJSVyY3gsMilcbiIKKy0gICAgICAiICBwc2h1ZncgJDB4OGQsICglMSwlJXJjeCw0KSwgJSVtbTBcbiIKKy0gICAgICAiICBtb3ZkICUlbW0wLCAoJTIsJSVyY3gsMilcbiIKKysgICAgICAiICBwc2h1ZncgJDB4ZDgsICglcTEsJSVyY3gsNCksICUlbW0wXG4iCisrICAgICAgIiAgbW92ZCAlJW1tMCwgKCVxMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIHBzaHVmdyAkMHg4ZCwgKCVxMSwlJXJjeCw0KSwgJSVtbTBcbiIKKysgICAgICAiICBtb3ZkICUlbW0wLCAoJXEyLCUlcmN4LDIpXG4iCisgICAgICAgIiAgYWRkICQyLCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlMywgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgorQEAgLTEyMywxNiArMTIzLDE2IEBAIGRlaW50ZXJsZWF2ZTJfbW14XzMgKGludDE2X3QgKmQxLCBpbnQxNl8KKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBtb3ZxICglMSwlJXJjeCw0KSwgJSVtbTFcbiIKKy0gICAgICAiICBtb3ZxICglMSwlJXJjeCw0KSwgJSVtbTJcbiIKKy0gICAgICAiICBtb3ZxIDgoJTEsJSVyY3gsNCksICUlbW0wXG4iCisrICAgICAgIiAgbW92cSAoJXExLCUlcmN4LDQpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgKCVxMSwlJXJjeCw0KSwgJSVtbTJcbiIKKysgICAgICAiICBtb3ZxIDgoJXExLCUlcmN4LDQpLCAlJW1tMFxuIgorICAgICAgICIgIHB1bnBja2x3ZCAlJW1tMCwgJSVtbTFcbiIKKyAgICAgICAiICBwdW5wY2tod2QgJSVtbTAsICUlbW0yXG4iCisgICAgICAgIiAgbW92cSAlJW1tMSwgJSVtbTBcbiIKKyAgICAgICAiICBwdW5wY2tsd2QgJSVtbTIsICUlbW0wXG4iCisgICAgICAgIiAgcHVucGNraHdkICUlbW0yLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgJSVtbTAsICglMCwlJXJjeCwyKVxuIgorLSAgICAgICIgIG1vdnEgJSVtbTEsICglMiwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTAsICglcTAsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3ZxICUlbW0xLCAoJXEyLCUlcmN4LDIpXG4iCisgICAgICAgIiAgYWRkICQ0LCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlMywgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgorQEAgLTE1OSwyNiArMTU5LDI2IEBAIGRlaW50ZXJsZWF2ZTJfbW14XzQgKGludDE2X3QgKmQxLCBpbnQxNl8KKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBtb3ZxICglMSwlJXJjeCw0KSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsNCksICUlbW0xXG4iCisgICAgICAgIiAgbW92cSAlJW1tMSwgJSVtbTJcbiIKKy0gICAgICAiICBtb3ZxIDgoJTEsJSVyY3gsNCksICUlbW0wXG4iCistICAgICAgIiAgIG1vdnEgMTYoJTEsJSVyY3gsNCksICUlbW01XG4iCisrICAgICAgIiAgbW92cSA4KCVxMSwlJXJjeCw0KSwgJSVtbTBcbiIKKysgICAgICAiICAgbW92cSAxNiglcTEsJSVyY3gsNCksICUlbW01XG4iCisgICAgICAgIiAgcHVucGNrbHdkICUlbW0wLCAlJW1tMVxuIgorICAgICAgICIgICBtb3ZxICUlbW01LCAlJW1tNlxuIgorICAgICAgICIgIHB1bnBja2h3ZCAlJW1tMCwgJSVtbTJcbiIKKy0gICAgICAiICAgbW92cSAyNCglMSwlJXJjeCw0KSwgJSVtbTRcbiIKKysgICAgICAiICAgbW92cSAyNCglcTEsJSVyY3gsNCksICUlbW00XG4iCisgICAgICAgIiAgbW92cSAlJW1tMSwgJSVtbTBcbiIKKyAgICAgICAiICAgcHVucGNrbHdkICUlbW00LCAlJW1tNVxuIgorICAgICAgICIgIHB1bnBja2x3ZCAlJW1tMiwgJSVtbTBcbiIKKyAgICAgICAiICAgcHVucGNraHdkICUlbW00LCAlJW1tNlxuIgorICAgICAgICIgIHB1bnBja2h3ZCAlJW1tMiwgJSVtbTFcbiIKKyAgICAgICAiICAgbW92cSAlJW1tNSwgJSVtbTRcbiIKKy0gICAgICAiICBtb3ZxICUlbW0wLCAoJTAsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3ZxICUlbW0wLCAoJXEwLCUlcmN4LDIpXG4iCisgICAgICAgIiAgIHB1bnBja2x3ZCAlJW1tNiwgJSVtbTRcbiIKKy0gICAgICAiICBtb3ZxICUlbW0xLCAoJTIsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3ZxICUlbW0xLCAoJXEyLCUlcmN4LDIpXG4iCisgICAgICAgIiAgIHB1bnBja2h3ZCAlJW1tNiwgJSVtbTVcbiIKKy0gICAgICAiICAgbW92cSAlJW1tNCwgOCglMCwlJXJjeCwyKVxuIgorLSAgICAgICIgICBtb3ZxICUlbW01LCA4KCUyLCUlcmN4LDIpXG4iCisrICAgICAgIiAgIG1vdnEgJSVtbTQsIDgoJXEwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgIG1vdnEgJSVtbTUsIDgoJXEyLCUlcmN4LDIpXG4iCisgICAgICAgIiAgYWRkICQ4LCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlMywgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgorQEAgLTI1MiwxMyArMjUyLDEzIEBAIGludGVybGVhdmUyX21teCAoaW50MTZfdCAqZF8yeG4sIGludDE2X3QKKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBtb3ZxICglMSwlJXJjeCwyKSwgJSVtbTBcbiIKKy0gICAgICAiICBtb3ZxICglMiwlJXJjeCwyKSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsMiksICUlbW0wXG4iCisrICAgICAgIiAgbW92cSAoJXEyLCUlcmN4LDIpLCAlJW1tMVxuIgorICAgICAgICIgIG1vdnEgJSVtbTAsICUlbW0yXG4iCisgICAgICAgIiAgcHVucGNraHdkICUlbW0xLCAlJW1tMFxuIgorICAgICAgICIgIHB1bnBja2x3ZCAlJW1tMSwgJSVtbTJcbiIKKy0gICAgICAiICBtb3ZxICUlbW0yLCAoJTAsJSVyY3gsNClcbiIKKy0gICAgICAiICBtb3ZxICUlbW0wLCA4KCUwLCUlcmN4LDQpXG4iCisrICAgICAgIiAgbW92cSAlJW1tMiwgKCVxMCwlJXJjeCw0KVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTAsIDgoJXEwLCUlcmN4LDQpXG4iCisgICAgICAgIiAgYWRkICQ0LCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlMywgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgorQEAgLTI4NSwxMiArMjg1LDEyIEBAIGxpZnRfYWRkX3NoaWZ0MV9tbXggKGludDE2X3QgKmQsIGludDE2X3QKKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBtb3ZxICglMiwlJXJjeCwyKSwgJSVtbTFcbiIKKy0gICAgICAiICBtb3ZxICglMywlJXJjeCwyKSwgJSVtbTJcbiIKKysgICAgICAiICBtb3ZxICglcTIsJSVyY3gsMiksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAoJXEzLCUlcmN4LDIpLCAlJW1tMlxuIgorICAgICAgICIgIHBhZGR3ICUlbW0yLCAlJW1tMVxuIgorICAgICAgICIgIHBzcmF3ICQxLCAlJW1tMVxuIgorLSAgICAgICIgIHBhZGR3ICglMSwlJXJjeCwyKSwgJSVtbTFcbiIKKy0gICAgICAiICBtb3ZxICUlbW0xLCAoJTAsJSVyY3gsMilcbiIKKysgICAgICAiICBwYWRkdyAoJXExLCUlcmN4LDIpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTEsICglcTAsJSVyY3gsMilcbiIKKyAgICAgICAiICBhZGQgJDQsICUlcmN4XG4iCisgICAgICAgIiAgY21wICU0LCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCitAQCAtMzE3LDEzICszMTcsMTMgQEAgbGlmdF9zdWJfc2hpZnQxX21teCAoaW50MTZfdCAqZCwgaW50MTZfdAorICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdnEgKCUyLCUlcmN4LDIpLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgKCUzLCUlcmN4LDIpLCAlJW1tMlxuIgorLSAgICAgICIgIG1vdnEgKCUxLCUlcmN4LDIpLCAlJW1tMFxuIgorKyAgICAgICIgIG1vdnEgKCVxMiwlJXJjeCwyKSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTMsJSVyY3gsMiksICUlbW0yXG4iCisrICAgICAgIiAgbW92cSAoJXExLCUlcmN4LDIpLCAlJW1tMFxuIgorICAgICAgICIgIHBhZGR3ICUlbW0yLCAlJW1tMVxuIgorICAgICAgICIgIHBzcmF3ICQxLCAlJW1tMVxuIgorICAgICAgICIgIHBzdWJ3ICUlbW0xLCAlJW1tMFxuIgorLSAgICAgICIgIG1vdnEgJSVtbTAsICglMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTAsICglcTAsJSVyY3gsMilcbiIKKyAgICAgICAiICBhZGQgJDQsICUlcmN4XG4iCisgICAgICAgIiAgY21wICU0LCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCitAQCAtMzUwLDEyICszNTAsMTIgQEAgbGlmdF9hZGRfc2hpZnQyX21teCAoaW50MTZfdCAqZCwgaW50MTZfdAorICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdnEgKCUyLCUlcmN4LDIpLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgKCUzLCUlcmN4LDIpLCAlJW1tMlxuIgorKyAgICAgICIgIG1vdnEgKCVxMiwlJXJjeCwyKSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTMsJSVyY3gsMiksICUlbW0yXG4iCisgICAgICAgIiAgcGFkZHcgJSVtbTIsICUlbW0xXG4iCisgICAgICAgIiAgcHNyYXcgJDIsICUlbW0xXG4iCistICAgICAgIiAgcGFkZHcgKCUxLCUlcmN4LDIpLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgJSVtbTEsICglMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIHBhZGR3ICglcTEsJSVyY3gsMiksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAlJW1tMSwgKCVxMCwlJXJjeCwyKVxuIgorICAgICAgICIgIGFkZCAkNCwgJSVyY3hcbiIKKyAgICAgICAiICBjbXAgJTQsICUlZWN4XG4iCisgICAgICAgIiAgamwgMWJcbiIKK0BAIC0zODIsMTMgKzM4MiwxMyBAQCBsaWZ0X3N1Yl9zaGlmdDJfbW14IChpbnQxNl90ICpkLCBpbnQxNl90CisgICBhc20gdm9sYXRpbGUgKCJcbiIKKyAgICAgICAiICB4b3IgJSVyY3gsICUlcmN4XG4iCisgICAgICAgIjE6XG4iCistICAgICAgIiAgbW92cSAoJTIsJSVyY3gsMiksICUlbW0xXG4iCistICAgICAgIiAgbW92cSAoJTMsJSVyY3gsMiksICUlbW0yXG4iCistICAgICAgIiAgbW92cSAoJTEsJSVyY3gsMiksICUlbW0wXG4iCisrICAgICAgIiAgbW92cSAoJXEyLCUlcmN4LDIpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgKCVxMywlJXJjeCwyKSwgJSVtbTJcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsMiksICUlbW0wXG4iCisgICAgICAgIiAgcGFkZHcgJSVtbTIsICUlbW0xXG4iCisgICAgICAgIiAgcHNyYXcgJDIsICUlbW0xXG4iCisgICAgICAgIiAgcHN1YncgJSVtbTEsICUlbW0wXG4iCistICAgICAgIiAgbW92cSAlJW1tMCwgKCUwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92cSAlJW1tMCwgKCVxMCwlJXJjeCwyKVxuIgorICAgICAgICIgIGFkZCAkNCwgJSVyY3hcbiIKKyAgICAgICAiICBjbXAgJTQsICUlZWN4XG4iCisgICAgICAgIiAgamwgMWJcbiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvbm8tdGVzdHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3L25vLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MmQ0NDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3L25vLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCistLS0gbGlib2lsLTAuMy45L2xpYm9pbC9saWJvaWxmdW5jdGlvbi5jLm9sZAkyMDA2LTA5LTE4IDEzOjAzOjIwLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYm9pbC0wLjMuOS9saWJvaWwvbGlib2lsZnVuY3Rpb24uYwkyMDA2LTA5LTE4IDEzOjA0OjEwLjAwMDAwMDAwMCArMDEwMAorQEAgLTM0NSw3ICszNDUsOSBAQAorICAgICByZXR1cm47CisgICB9CisgCistICB0ZXN0ID0gb2lsX3Rlc3RfbmV3IChrbGFzcyk7CisrICBrbGFzcy0+Y2hvc2VuX2ltcGwgPSBrbGFzcy0+cmVmZXJlbmNlX2ltcGw7CisrICBrbGFzcy0+ZnVuYyA9IGtsYXNzLT5yZWZlcmVuY2VfaW1wbC0+ZnVuYzsKKysvKiAgdGVzdCA9IG9pbF90ZXN0X25ldyAoa2xhc3MpOworICAgaWYgKHRlc3QgPT0gTlVMTCkgeworICAgICBPSUxfRVJST1IgKCJmYWlsZWQgdG8gdGVzdCBmdW5jdGlvbiBjbGFzcyAlcyIsIGtsYXNzLT5uYW1lKTsKKyAgICAgcmV0dXJuOworQEAgLTM4NSw3ICszODcsNyBAQAorICAga2xhc3MtPmNob3Nlbl9pbXBsID0gbWluX2ltcGw7CisgICBrbGFzcy0+ZnVuYyA9IG1pbl9pbXBsLT5mdW5jOworIAorLSAgb2lsX3Rlc3RfZnJlZSAodGVzdCk7CisrICBvaWxfdGVzdF9mcmVlICh0ZXN0KTsqLworIH0KKyAKKyBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsXzAuMy4xNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbF8wLjMuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNiNzc4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbF8wLjMuMTcuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IG9mIHNpbXBsZSBmdW5jdGlvbnMgb3B0aW1pemVkIGZvciB2YXJpb3VzIENQVXMiCitIT01FUEFHRSA9ICJodHRwOi8vbGlib2lsLmZyZWVkZXNrdG9wLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWFkODA3ODBkOWM1MjA1ZDYzNDgxYTAxODRlMTk5YTE1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm9pbC9saWJvaWwuaDtlbmRsaW5lPTI4O21kNT05NWM3OTRhNjZiODg4MDBkOTQ5ZmVkMTdlNDM3ZDlmYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJvaWwvbGlib2lsY3B1LmM7ZW5kbGluZT0yODttZDU9ODlkYTY5YTYxZDg4ZWVkY2JhMDY2ZjQyMzUzZmI3NWEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZXhhbXBsZXMvZXhhbXBsZTEuYztlbmRsaW5lPTI5O21kNT05ZDRkYWQ5ZmNiYmRmMDQ0MWVlMDYzZjhhZjUxNzBjOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0c3VpdGUvdHJhbnMuYztlbmRsaW5lPTI5O21kNT0zODBlY2Q0MzEyMWZlM2RjYzBkOGQ3ZTU5ODRmMjgzZCIKKworREVQRU5EUyA9ICJnbGliLTIuMCIKK1BSID0gInI1IgorCitTUkNfVVJJID0gImh0dHA6Ly9saWJvaWwuZnJlZWRlc2t0b3Aub3JnL2Rvd25sb2FkLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbm8tdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXVuYWxpZ25lZC13aGl0ZWxpc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtZW5hYmxlLXZmcC1mbGFnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYm9pbF9maXhfZm9yX3gzMi5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDdkYzczNGY4MmZhZWIyOTY0ZDk3NzcxY2ZkMmU3MDEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTA1ZjAyMDc5YjBiNTAwMzRjNzU5ZGIzNGI0NzNlY2I1NzA0ZmZhMjBhNTQ4NmI2MGE4Yjc2OTgxMjhiZmM2OSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvTWFrZWZpbGUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDhkODA3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvTWFrZWZpbGUKQEAgLTAsMCArMSwxODMgQEAKK1RFU1RTID0gcGNyZV9zdHJpbmdwaWVjZV91bml0dGVzdCBSdW5UZXN0IFJ1bkdyZXBUZXN0CitzdWJkaXIgPSAuCithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX190dHlfY29sb3JzX2R1bW15ID0gXAorICBtZ249IHJlZD0gZ3JuPSBsZ249IGJsdT0gYnJnPSBzdGQ9OyBcCisgIGFtX19jb2xvcl90ZXN0cz1ubworYW1fX3R0eV9jb2xvcnMgPSB7IFwKKyAgJChhbV9fdHR5X2NvbG9yc19kdW1teSk7IFwKKyAgaWYgdGVzdCAiWCQoQU1fQ09MT1JfVEVTVFMpIiA9IFhubzsgdGhlbiBcCisgICAgYW1fX2NvbG9yX3Rlc3RzPW5vOyBcCisgIGVsaWYgdGVzdCAiWCQoQU1fQ09MT1JfVEVTVFMpIiA9IFhhbHdheXM7IHRoZW4gXAorICAgIGFtX19jb2xvcl90ZXN0cz15ZXM7IFwKKyAgZWxpZiB0ZXN0ICJYJCRURVJNIiAhPSBYZHVtYiAmJiB7IHRlc3QgLXQgMTsgfSAyPi9kZXYvbnVsbDsgdGhlbiBcCisgICAgYW1fX2NvbG9yX3Rlc3RzPXllczsgXAorICBmaTsgXAorICBpZiB0ZXN0ICQkYW1fX2NvbG9yX3Rlc3RzID0geWVzOyB0aGVuIFwKKyAgICByZWQ9JxtbMDszMW0nOyBcCisgICAgZ3JuPScbWzA7MzJtJzsgXAorICAgIGxnbj0nG1sxOzMybSc7IFwKKyAgICBibHU9JxtbMTszNG0nOyBcCisgICAgbWduPScbWzA7MzVtJzsgXAorICAgIGJyZz0nG1sxbSc7IFwKKyAgICBzdGQ9JxtbbSc7IFwKKyAgZmk7IFwKK30KK2FtX19yc3RfdGl0bGUgPSB7IHNlZCAncy8uKi8gICAmICAgLztoO3MvLi89L2c7cDt4O3MvICokJC8vO3A7ZycgJiYgZWNobzsgfQorYW1fX3NoX2Vfc2V0dXAgPSBjYXNlICQkLSBpbiAqZSopIHNldCArZTs7IGVzYWMKK2FtX19jb21tb25fZHJpdmVyX2ZsYWdzID0gXAorICAtLWNvbG9yLXRlc3RzICIkJGFtX19jb2xvcl90ZXN0cyIgXAorICAtLWVuYWJsZS1oYXJkLWVycm9ycyAiJCRhbV9fZW5hYmxlX2hhcmRfZXJyb3JzIiBcCisgIC0tZXhwZWN0LWZhaWx1cmUgIiQkYW1fX2V4cGVjdF9mYWlsdXJlIgorYW1fX2NoZWNrX3ByZSA9IFwKKyQoYW1fX3NoX2Vfc2V0dXApOyBcCiskKGFtX192cGF0aF9hZGpfc2V0dXApICQoYW1fX3ZwYXRoX2FkaikgXAorJChhbV9fdHR5X2NvbG9ycyk7IFwKK3NyY2Rpcj0kKHNyY2Rpcik7IGV4cG9ydCBzcmNkaXI7IFwKK2Nhc2UgIiRAIiBpbiBcCisgICovKikgYW1fX29kaXI9YGVjaG8gIi4vJEAiIHwgc2VkICdzfC9bXi9dKiQkfHwnYDs7IFwKKyAgICAqKSBhbV9fb2Rpcj0uOzsgXAorZXNhYzsgXAordGVzdCAieCQkYW1fX29kaXIiID0geCIuIiB8fCB0ZXN0IC1kICIkJGFtX19vZGlyIiBcCisgIHx8ICQoTUtESVJfUCkgIiQkYW1fX29kaXIiIHx8IGV4aXQgJCQ/OyBcCitpZiB0ZXN0IC1mICIuLyQkZiI7IHRoZW4gZGlyPS4vOyBcCitlbGlmIHRlc3QgLWYgIiQkZiI7IHRoZW4gZGlyPTsgXAorZWxzZSBkaXI9IiQoc3JjZGlyKS8iOyBmaTsgXAordHN0PSQkZGlyJCRmOyBsb2c9JyRAJzsgXAoraWYgdGVzdCAtbiAnJChESVNBQkxFX0hBUkRfRVJST1JTKSc7IHRoZW4gXAorICBhbV9fZW5hYmxlX2hhcmRfZXJyb3JzPW5vOyBcCitlbHNlIFwKKyAgYW1fX2VuYWJsZV9oYXJkX2Vycm9ycz15ZXM7IFwKK2ZpOworYW1fX3NldF9URVNUU19iYXNlcyA9IFwKKyAgYmFzZXM9JyQoVEVTVF9MT0dTKSc7IFwKKyAgYmFzZXM9YGZvciBpIGluICQkYmFzZXM7IGRvIGVjaG8gJCRpOyBkb25lIHwgc2VkICdzL1wubG9nJCQvLydgOyBcCisgIGJhc2VzPWBlY2hvICQkYmFzZXNgCitSRUNIRUNLX0xPR1MgPSAkKFRFU1RfTE9HUykKK1RFU1RfU1VJVEVfTE9HID0gdGVzdC1zdWl0ZS5sb2cKK1RFU1RfRVhURU5TSU9OUyA9ICAudGVzdAorTE9HX0RSSVZFUiA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvdGVzdC1kcml2ZXIKK2FtX190ZXN0X2xvZ3MxID0gJChURVNUUzo9LmxvZykKK2FtX190ZXN0X2xvZ3MyID0gJChhbV9fdGVzdF9sb2dzMToubG9nPS5sb2cpCitURVNUX0xPR1MgPSAkKGFtX190ZXN0X2xvZ3MyOi50ZXN0LmxvZz0ubG9nKQorTUtESVJfUCA9IC9iaW4vbWtkaXIgLXAKK1BBQ0tBR0VfU1RSSU5HID0gUENSRSA4LjM2CitTSEVMTCA9IC9iaW4vc2gKK3NyY2RpciA9IC4KK3RvcF9zcmNkaXIgPSAuCiskKFRFU1RfU1VJVEVfTE9HKTogJChURVNUX0xPR1MpCisJQCQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKKwlhbV9fZl9vayAoKSB7IHRlc3QgLWYgIiQkMSIgJiYgdGVzdCAtciAiJCQxIjsgfTsgXAorCXJlZG9fYmFzZXM9YGZvciBpIGluICQkYmFzZXM7IGRvIFwKKwkgICAgICAgICAgICAgIGFtX19mX29rICQkaS50cnMgJiYgYW1fX2Zfb2sgJCRpLmxvZyB8fCBlY2hvICQkaTsgXAorCSAgICAgICAgICAgIGRvbmVgOyBcCisJc3Q9MDsgIFwKKwllcnJtc2c9ImZhdGFsOiBtYWtpbmcgJChURVNUX1NVSVRFX0xPRyk6IGZhaWxlZCB0byBjcmVhdGUiOyBcCisJZm9yIGkgaW4gJCRyZWRvX2Jhc2VzOyBkbyBcCisJICB0ZXN0IC1mICQkaS50cnMgJiYgdGVzdCAtciAkJGkudHJzIFwKKwkgICAgfHwgeyBlY2hvICIkJGVycm1zZyAkJGkudHJzIiA+JjI7IHN0PTE7IH07IFwKKwkgIHRlc3QgLWYgJCRpLmxvZyAmJiB0ZXN0IC1yICQkaS5sb2cgXAorCSAgICB8fCB7IGVjaG8gIiQkZXJybXNnICQkaS5sb2ciID4mMjsgc3Q9MTsgfTsgXAorCWRvbmU7IFwKKwl0ZXN0ICQkc3QgLWVxIDAgfHwgZXhpdCAxOworCUAkKGFtX19zaF9lX3NldHVwKTsgJChhbV9fdHR5X2NvbG9ycyk7ICQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKKwl3cz0nWyAJXSc7IFwKKwlyZXN1bHRzPWBmb3IgYiBpbiAkJGJhc2VzOyBkbyBlY2hvICQkYi50cnM7IGRvbmVgOyBcCisJdGVzdCAtbiAiJCRyZXN1bHRzIiB8fCByZXN1bHRzPS9kZXYvbnVsbDsgXAorCWFsbD1gICBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6IiAgICAgICAgICAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJcGFzcz1gIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlBBU1MiICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlmYWlsPWAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqRkFJTCIgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCXNraXA9YCBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypTS0lQIiAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJeGZhaWw9YGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlhGQUlMIiAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwl4cGFzcz1gZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqWFBBU1MiICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCWVycm9yPWBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypFUlJPUiIgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJaWYgdGVzdCBgZXhwciAkJGZhaWwgKyAkJHhwYXNzICsgJCRlcnJvcmAgLWVxIDA7IHRoZW4gXAorCSAgc3VjY2Vzcz10cnVlOyBcCisJZWxzZSBcCisJICBzdWNjZXNzPWZhbHNlOyBcCisJZmk7IFwKKwlicj0nPT09PT09PT09PT09PT09PT09PSc7IGJyPSQkYnIkJGJyJCRiciQkYnI7IFwKKwlyZXN1bHRfY291bnQgKCkgXAorCXsgXAorCSAgICBpZiB0ZXN0IHgiJCQxIiA9IHgiLS1tYXliZS1jb2xvciI7IHRoZW4gXAorCSAgICAgIG1heWJlX2NvbG9yaXplPXllczsgXAorCSAgICBlbGlmIHRlc3QgeCIkJDEiID0geCItLW5vLWNvbG9yIjsgdGhlbiBcCisJICAgICAgbWF5YmVfY29sb3JpemU9bm87IFwKKwkgICAgZWxzZSBcCisJICAgICAgZWNobyAiJEA6IGludmFsaWQgJ3Jlc3VsdF9jb3VudCcgdXNhZ2UiID4mMjsgZXhpdCA0OyBcCisJICAgIGZpOyBcCisJICAgIHNoaWZ0OyBcCisJICAgIGRlc2M9JCQxIGNvdW50PSQkMjsgXAorCSAgICBpZiB0ZXN0ICQkbWF5YmVfY29sb3JpemUgPSB5ZXMgJiYgdGVzdCAkJGNvdW50IC1ndCAwOyB0aGVuIFwKKwkgICAgICBjb2xvcl9zdGFydD0kJDMgY29sb3JfZW5kPSQkc3RkOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGNvbG9yX3N0YXJ0PSBjb2xvcl9lbmQ9OyBcCisJICAgIGZpOyBcCisJICAgIGVjaG8gIiQke2NvbG9yX3N0YXJ0fSMgJCRkZXNjICQkY291bnQkJHtjb2xvcl9lbmR9IjsgXAorCX07IFwKKwljcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAoKSBcCisJeyBcCisJICByZXN1bHRfY291bnQgJCQxICJUT1RBTDoiICQkYWxsICAgIiQkYnJnIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiUEFTUzogIiAkJHBhc3MgICIkJGdybiI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlNLSVA6ICIgJCRza2lwICAiJCRibHUiOyBcCisJICByZXN1bHRfY291bnQgJCQxICJYRkFJTDoiICQkeGZhaWwgIiQkbGduIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiRkFJTDogIiAkJGZhaWwgICIkJHJlZCI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlhQQVNTOiIgJCR4cGFzcyAiJCRyZWQiOyBcCisJICByZXN1bHRfY291bnQgJCQxICJFUlJPUjoiICQkZXJyb3IgIiQkbWduIjsgXAorCX07IFwKKwl7CQkJCQkJCQlcCisJICBlY2hvICIkKFBBQ0tBR0VfU1RSSU5HKTogJChzdWJkaXIpLyQoVEVTVF9TVUlURV9MT0cpIiB8CVwKKwkgICAgJChhbV9fcnN0X3RpdGxlKTsJCQkJCQlcCisJICBjcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAtLW5vLWNvbG9yOwkJCQlcCisJICBlY2hvOwkJCQkJCQkJXAorCSAgZWNobyAiLi4gY29udGVudHM6OiA6ZGVwdGg6IDIiOwkJCQlcCisJICBlY2hvOwkJCQkJCQkJXAorCSAgZm9yIGIgaW4gJCRiYXNlczsgZG8gZWNobyAkJGI7IGRvbmU7CQkJCVwKKwl9ID4kKFRFU1RfU1VJVEVfTE9HKS50bXAgfHwgZXhpdCAxOwkJCQlcCisJbXYgJChURVNUX1NVSVRFX0xPRykudG1wICQoVEVTVF9TVUlURV9MT0cpOwkJCVwKKwlpZiAkJHN1Y2Nlc3M7IHRoZW4JCQkJCQlcCisJICBjb2w9IiQkZ3JuIjsJCQkJCQkJXAorCSBlbHNlCQkJCQkJCQlcCisJICBjb2w9IiQkcmVkIjsJCQkJCQkJXAorCSAgdGVzdCB4IiQkVkVSQk9TRSIgPSB4IHx8IGNhdCAkKFRFU1RfU1VJVEVfTE9HKTsJCVwKKwlmaTsJCQkJCQkJCVwKKwllY2hvICIkJHtjb2x9JCRiciQke3N0ZH0iOyAJCQkJCVwKKwllY2hvICIkJHtjb2x9VGVzdHN1aXRlIHN1bW1hcnkgZm9yICQoUEFDS0FHRV9TVFJJTkcpJCR7c3RkfSI7CVwKKwllY2hvICIkJHtjb2x9JCRiciQke3N0ZH0iOyAJCQkJCVwKKwljcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAtLW1heWJlLWNvbG9yOwkJCQlcCisJZWNobyAiJCRjb2wkJGJyJCRzdGQiOwkJCQkJCVwKKwlpZiAkJHN1Y2Nlc3M7IHRoZW4gOjsgZWxzZQkJCQkJXAorCSAgZWNobyAiJCR7Y29sfVNlZSAkKHN1YmRpcikvJChURVNUX1NVSVRFX0xPRykkJHtzdGR9IjsJCVwKKwkgIGVjaG8gIiQkY29sJCRiciQkc3RkIjsJCQkJCVwKKwlmaTsJCQkJCQkJCVwKKwkkJHN1Y2Nlc3MgfHwgZXhpdCAxCitjaGVjay1URVNUUzoKKwlAbGlzdD0nJChSRUNIRUNLX0xPR1MpJzsgICAgICAgICAgIHRlc3QgLXogIiQkbGlzdCIgfHwgcm0gLWYgJCRsaXN0CisJQHRlc3QgLXogIiQoVEVTVF9TVUlURV9MT0cpIiB8fCBybSAtZiAkKFRFU1RfU1VJVEVfTE9HKQorCUBzZXQgK2U7ICQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKKwlsb2dfbGlzdD1gZm9yIGkgaW4gJCRiYXNlczsgZG8gZWNobyAkJGkubG9nOyBkb25lYDsgXAorCWxvZ19saXN0PWBlY2hvICQkbG9nX2xpc3RgOyBcCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChURVNUX1NVSVRFX0xPRykgVEVTVF9MT0dTPSIkJGxvZ19saXN0IjsgXAorCWV4aXQgJCQ/OworcGNyZV9zdHJpbmdwaWVjZV91bml0dGVzdC5sb2c6IHBjcmVfc3RyaW5ncGllY2VfdW5pdHRlc3QkKEVYRUVYVCkKKwlAcD0ncGNyZV9zdHJpbmdwaWVjZV91bml0dGVzdCQoRVhFRVhUKSc7IFwKKwliPSdwY3JlX3N0cmluZ3BpZWNlX3VuaXR0ZXN0JzsgXAorCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCisJLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCisJJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgLS0gIiQkdHN0IgorUnVuVGVzdC5sb2c6IFJ1blRlc3QKKwlAcD0nUnVuVGVzdCc7IFwKKwliPSdSdW5UZXN0JzsgXAorCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCisJLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCisJJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgLS0gIiQkdHN0IgorUnVuR3JlcFRlc3QubG9nOiBSdW5HcmVwVGVzdAorCUBwPSdSdW5HcmVwVGVzdCc7IFwKKwliPSdSdW5HcmVwVGVzdCc7IFwKKwkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAorCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAorCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpIC0tICIkJHRzdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL2ZpeC1wY3JlLW5hbWUtY29sbGlzaW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvZml4LXBjcmUtbmFtZS1jb2xsaXNpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODliNDRmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL2ZpeC1wY3JlLW5hbWUtY29sbGlzaW9uLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuIHBhdGNoXQorCitUaGlzIHBhdGNoIGFkZHJlc3MgYSBuYW1lc3BhY2UgY29sbGlzaW9uIHdpdGggbGliYy4KKworQWx0aG91Z2ggdGhlcmUgaXMgbm8gIiNpbmNsdWRlIDxyZWdleC5oPiIgaW4gdGhlIHNvdXJjZSBmaWxlLCBhdAorcnVudGltZSwgaXQncyB1bmludGVudGlvbmFsbHkgbGlua2VkIHRvIHRoZSBsaWJjIHZlcnNpb24sIHRoZSByZWdjb21wIG9mCitsaWJjIGlzIGNhbGxlZCBpbnN0ZWFkIHRoZSBwY3JlIG9uZSB1c2luZyBwY3JlJ3MgZGF0YSBzdHJ1Y3R1cmUuLi4KK3RoYXQgbG9va3MgbGlrZSBhIGRpc2FzdGVyLgorCitDYW4gcGF0Y2ggaXMgZnJvbSBEZWJpYW4gKGFuZCBVYnVudHUgMTEuMDRhbHBoYSBoYXMgaXQgYWxzbykuCisKK1tzZ3c6IGFkZGVkIHBhdGNoIGNvbW1lbnRdCitTaWduZWQtb2ZmLWJ5OiBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworLS0tIGEvcGNyZXBvc2l4LmgJMjAxMC0wNS0xNyAwMDoxNzoyMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBiL3BjcmVwb3NpeC5oCTIwMDktMDEtMTUgMDQ6MzI6MTcuMDAwMDAwMDAwICswODAwCitAQCAtMTMzLDE0ICsxMzAsMTkgQEAKKyAKKyAvKiBUaGUgZnVuY3Rpb25zICovCisgCistUENSRVBPU0lYX0VYUF9ERUNMIGludCByZWdjb21wKHJlZ2V4X3QgKiwgY29uc3QgY2hhciAqLCBpbnQpOworLVBDUkVQT1NJWF9FWFBfREVDTCBpbnQgcmVnZXhlYyhjb25zdCByZWdleF90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LAorK1BDUkVQT1NJWF9FWFBfREVDTCBpbnQgcGNyZXBvc2l4X3JlZ2NvbXAocmVnZXhfdCAqLCBjb25zdCBjaGFyICosIGludCk7CisrUENSRVBPU0lYX0VYUF9ERUNMIGludCBwY3JlcG9zaXhfcmVnZXhlYyhjb25zdCByZWdleF90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgIHJlZ21hdGNoX3QgKiwgaW50KTsKKy1QQ1JFUE9TSVhfRVhQX0RFQ0wgc2l6ZV90IHJlZ2Vycm9yKGludCwgY29uc3QgcmVnZXhfdCAqLCBjaGFyICosIHNpemVfdCk7CistUENSRVBPU0lYX0VYUF9ERUNMIHZvaWQgcmVnZnJlZShyZWdleF90ICopOworK1BDUkVQT1NJWF9FWFBfREVDTCBzaXplX3QgcGNyZXBvc2l4X3JlZ2Vycm9yKGludCwgY29uc3QgcmVnZXhfdCAqLCBjaGFyICosIHNpemVfdCk7CisrUENSRVBPU0lYX0VYUF9ERUNMIHZvaWQgcGNyZXBvc2l4X3JlZ2ZyZWUocmVnZXhfdCAqKTsKKyAKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyB9ICAgLyogZXh0ZXJuICJDIiAqLworICNlbmRpZgorIAorKyNkZWZpbmUgcmVnY29tcCBwY3JlcG9zaXhfcmVnY29tcAorKyNkZWZpbmUgcmVnZXhlYyBwY3JlcG9zaXhfcmVnZXhlYworKyNkZWZpbmUgcmVnZXJyb3IgcGNyZXBvc2l4X3JlZ2Vycm9yCisrI2RlZmluZSByZWdmcmVlIHBjcmVwb3NpeF9yZWdmcmVlCisrCisgI2VuZGlmIC8qIEVuZCBvZiBwY3JlcG9zaXguaCAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvcGNyZS1jcm9zcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL3BjcmUtY3Jvc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM4ODBmNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL3BjcmUtY3Jvc3MucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBwY3JlLTguMzIub3JpZy9NYWtlZmlsZS5hbQorKysrIHBjcmUtOC4zMi9NYWtlZmlsZS5hbQorQEAgLTE5Nyw4ICsxOTcsMTggQEAgYmluX1NDUklQVFMgPSBwY3JlLWNvbmZpZworIAorK0NDX0ZPUl9CVUlMRCA9IEBDQ19GT1JfQlVJTERACisrQ0ZMQUdTX0ZPUl9CVUlMRCA9IEBDRkxBR1NfRk9SX0JVSUxEQAorK0NDTERfRk9SX0JVSUxEID0gQENDTERfRk9SX0JVSUxEQAorK0xERkxBR1NfRk9SX0JVSUxEID0gQExERkxBR1NfRk9SX0JVSUxEQAorKworIGlmIFdJVEhfUkVCVUlMRF9DSEFSVEFCTEVTCisgCisgbm9pbnN0X1BST0dSQU1TICs9IGRmdGFibGVzCisgZGZ0YWJsZXNfU09VUkNFUyA9IGRmdGFibGVzLmMKKytkZnRhYmxlc19MSU5LID0gJChDQ0xEX0ZPUl9CVUlMRCkgLW8gJEAKKytkZnRhYmxlc19MREZMQUdTID0gJChMREZMQUdTX0ZPUl9CVUlMRCkKKysKKytkZnRhYmxlcy5vOiAkKHNyY2RpcikvZGZ0YWJsZXMuYworKwkkKENDX0ZPUl9CVUlMRCkgLWMgJChDRkxBR1NfRk9SX0JVSUxEKSAtbyAkQCAkKHNyY2RpcikvZGZ0YWJsZXMuYworIAorIHBjcmVfY2hhcnRhYmxlcy5jOiBkZnRhYmxlcyQoRVhFRVhUKQorIAkuL2RmdGFibGVzJChFWEVFWFQpICRACistLS0gcGNyZS04LjMyLm9yaWcvY29uZmlndXJlLmFjCisrKysgcGNyZS04LjMyL2NvbmZpZ3VyZS5hYworQEAgLTcyLDYgKzcyLDIyIEBAIHRoZW4KKyAgIGZpCisgZmkKKyAKKytpZiB0ZXN0IHgiJGNyb3NzX2NvbXBpbGluZyIgPSB4eWVzOyB0aGVuCisrICAgIENDX0ZPUl9CVUlMRD0iJHtDQ19GT1JfQlVJTEQtZ2NjfSIKKysgICAgQ0NMRF9GT1JfQlVJTEQ9IiR7Q0NMRF9GT1JfQlVJTEQtZ2NjfSIKKysgICAgQ0ZMQUdTX0ZPUl9CVUlMRD0iJHtDRkxBR1NfRk9SX0JVSUxEfSIKKysgICAgTERGTEFHU19GT1JfQlVJTEQ9IiR7TERGTEFHU19GT1JfQlVJTER9IgorK2Vsc2UKKysgICAgQ0NfRk9SX0JVSUxEPSIke0NDX0ZPUl9CVUlMRC1cJChDQyl9IgorKyAgICBDQ0xEX0ZPUl9CVUlMRD0iJHtDQ0xEX0ZPUl9CVUlMRC1cJChDQ0xEKX0iCisrICAgIENGTEFHU19GT1JfQlVJTEQ9IiR7Q0ZMQUdTX0ZPUl9CVUlMRC1cJChDRkxBR1MpfSIKKysgICAgTERGTEFHU19GT1JfQlVJTEQ9IiR7TERGTEFHU19GT1JfQlVJTEQtXCQoTERGTEFHUyl9IgorK2ZpCisrQUNfQVJHX1ZBUihDQ19GT1JfQlVJTEQsIFtidWlsZCBzeXN0ZW0gQyBjb21waWxlcl0pCisrQUNfQVJHX1ZBUihDQ0xEX0ZPUl9CVUlMRCwgW2J1aWxkIHN5c3RlbSBDIGxpbmtlciBmcm9udGVuZF0pCisrQUNfQVJHX1ZBUihDRkxBR1NfRk9SX0JVSUxELCBbYnVpbGQgc3lzdGVtIEMgY29tcGlsZXIgYXJndW1lbnRzXSkKKytBQ19BUkdfVkFSKExERkxBR1NfRk9SX0JVSUxELCBbYnVpbGQgc3lzdGVtIEMgbGlua2VyIGZyb250ZW5kIGFyZ3VtZW50c10pCisrCisgIyBBQ19QUk9HX0NYWCB3aWxsIHJldHVybiAiZysrIiBldmVuIGlmIG5vIGMrKyBjb21waWxlciBpcyBpbnN0YWxsZWQuCisgIyBDaGVjayBmb3IgdGhhdCBjYXNlLCBhbmQganVzdCBkaXNhYmxlIGMrKyBjb2RlIGlmIGcrKyBkb2Vzbid0IHJ1bi4KKyBBQ19MQU5HX1BVU0goQysrKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MGQ0YTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZS9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworbWFrZSBjaGVjay1URVNUUwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmVfOC4zNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlXzguMzcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNmYzllOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlXzguMzcuYmIKQEAgLTAsMCArMSw3MyBAQAorREVTQ1JJUFRJT04gPSAiVGhlIFBDUkUgbGlicmFyeSBpcyBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgcmVndWxhciBcCitleHByZXNzaW9uIHBhdHRlcm4gbWF0Y2hpbmcgdXNpbmcgdGhlIHNhbWUgc3ludGF4IGFuZCBzZW1hbnRpY3MgYXMgUGVybCA1LiBQQ1JFIFwKK2hhcyBpdHMgb3duIG5hdGl2ZSBBUEksIGFzIHdlbGwgYXMgYSBzZXQgb2Ygd3JhcHBlciBmdW5jdGlvbnMgdGhhdCBjb3JyZXNwb25kIFwKK3RvIHRoZSBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24gQVBJLiIKK1NVTU1BUlkgPSAiUGVybCBDb21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnBjcmUub3JnIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5DRTttZDU9N2U0OTM3ODE0YWVlMTQ3NThjMWM5NWI1OWM4MGM0NGQiCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0L3BjcmUvcGNyZS8ke1BWfS9wY3JlLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGNyZS1jcm9zcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcGNyZS1uYW1lLWNvbGxpc2lvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWQ5MWJlMjkyY2IwMWQyMWJjN2U1MjY4MTZjMjY5ODEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTE2NzllYTgwMDZjZTMxMzc5ZmIwODYwZTQ2ZGQ4NjY2NWQ4NjRiNTAyMGZjOWNkMTllNzEyNjBlZWY0Nzg5ZCIKKworUyA9ICIke1dPUktESVJ9L3BjcmUtJHtQVn0iCisKK1BST1ZJREVTICs9ICJwY3JlIgorREVQRU5EUyArPSAiYnppcDIgemxpYiIKKworUEFDS0FHRUNPTkZJR1twY3JldGVzdC1yZWFkbGluZV0gPSAiLS1lbmFibGUtcGNyZXRlc3QtbGlicmVhZGxpbmUsLS1kaXNhYmxlLXBjcmV0ZXN0LWxpYnJlYWRsaW5lLHJlYWRsaW5lLCIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9wY3JlLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHB0ZXN0CisKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgLS1lbmFibGUtbmV3bGluZS1pcy1sZiBcCisgICAgLS1lbmFibGUtcmVidWlsZC1jaGFydGFibGVzIFwKKyAgICAtLWVuYWJsZS11dGY4IFwKKyAgICAtLXdpdGgtbGluay1zaXplPTIgXAorICAgIC0td2l0aC1tYXRjaC1saW1pdD0xMDAwMDAwMCBcCisiCisKKyMgU2V0IExJTktfU0laRSBpbiBCVUlMRF9DRkxBR1MgZ2l2ZW4gdGhhdCB0aGUgYXV0b3Rvb2xzIGJiY2xhc3MgdXNlIGl0IHRvCisjIHNldCBDRkxBR1NfRk9SX0JVSUxELCByZXF1aXJlZCBmb3IgdGhlIGxpYnBjcmUgYnVpbGQuCitCVUlMRF9DRkxBR1MgPSsgIi1ETElOS19TSVpFPTIgLUkke0J9IgorQ0ZMQUdTICs9ICItRF9SRUVOVFJBTlQiCitDWFhGTEFHU19hcHBlbmRfcG93ZXJwYyA9ICIgLWxzdGRjKysiCisKK1BBQ0tBR0VTID0rICJsaWJwY3JlY3BwIGxpYnBjcmVwb3NpeCBwY3JlZ3JlcCBwY3JlZ3JlcC1kb2MgcGNyZXRlc3QgcGNyZXRlc3QtZG9jIgorCitTVU1NQVJZX2xpYnBjcmVjcHAgPSAiJHtTVU1NQVJZfSAtIEMrKyB3cmFwcGVyIGZ1bmN0aW9ucyIKK1NVTU1BUllfbGlicGNyZXBvc2l4ID0gIiR7U1VNTUFSWX0gLSBDIHdyYXBwZXIgZnVuY3Rpb25zIGJhc2VkIG9uIHRoZSBQT1NJWCByZWdleCBBUEkiCitTVU1NQVJZX3BjcmVncmVwID0gImdyZXAgdXRpbGl0eSB0aGF0IHVzZXMgcGVybCA1IGNvbXBhdGlibGUgcmVnZXhlcyIKK1NVTU1BUllfcGNyZWdyZXAtZG9jID0gImdyZXAgdXRpbGl0eSB0aGF0IHVzZXMgcGVybCA1IGNvbXBhdGlibGUgcmVnZXhlcyAtIGRvY3MiCitTVU1NQVJZX3BjcmV0ZXN0ID0gInByb2dyYW0gZm9yIHRlc3RpbmcgUGVybC1jb21hdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIKK1NVTU1BUllfcGNyZXRlc3QtZG9jID0gInByb2dyYW0gZm9yIHRlc3RpbmcgUGVybC1jb21hdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAtIGRvY3MiCisKK0ZJTEVTX2xpYnBjcmVjcHAgPSAiJHtsaWJkaXJ9L2xpYnBjcmVjcHAuc28uKiIKK0ZJTEVTX2xpYnBjcmVwb3NpeCA9ICIke2xpYmRpcn0vbGlicGNyZXBvc2l4LnNvLioiCitGSUxFU19wY3JlZ3JlcCA9ICIke2JpbmRpcn0vcGNyZWdyZXAiCitGSUxFU19wY3JlZ3JlcC1kb2MgPSAiJHttYW5kaXJ9L21hbjEvcGNyZWdyZXAuMSIKK0ZJTEVTX3BjcmV0ZXN0ID0gIiR7YmluZGlyfS9wY3JldGVzdCIKK0ZJTEVTX3BjcmV0ZXN0LWRvYyA9ICIke21hbmRpcn0vbWFuMS9wY3JldGVzdC4xIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdD0ke0R9JHtQVEVTVF9QQVRIfQorCWNwICR7V09SS0RJUn0vTWFrZWZpbGUgJHQKKwljcCAtciAke1N9L3Rlc3RkYXRhICR0CisJZm9yIGkgaW4gcGNyZV9zdHJpbmdwaWVjZV91bml0dGVzdCBwY3JlZ3JlcCBwY3JldGVzdDsgXAorCSAgZG8gY3AgJHtCfS8ubGlicy8kaSAkdDsgXAorCWRvbmUKKwlmb3IgaSBpbiBSdW5UZXN0IFJ1bkdyZXBUZXN0IHRlc3QtZHJpdmVyOyBcCisJICBkbyBjcCAke1N9LyRpICR0OyBcCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwcm94eS9saWJwcm94eS8wMDAxLXRlc3QtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLXNlbGVjdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHkvMDAwMS10ZXN0LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1zZWxlY3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFlNTJmMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHkvMDAwMS10ZXN0LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1zZWxlY3QucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSBmNWYyYzIyODllYjM1ZWI4MDRjMWMzNWU0NmNhNDFiNThlNGNhZTAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNiBBcHIgMjAxNSAxNDoxMzo0OSAtMDcwMAorU3ViamVjdDogW1BBVENIXSB0ZXN0OiBJbmNsdWRlIDxzeXMvc2VsZWN0Lmg+IGZvciBzZWxlY3QoKQorCitBcyBwZXIgcG9zaXggd2UgbmVlZCB0byBpbmNsdWRlIHRoaXMgZmlsZSBvdGhlcndpc2Ugd2UgZW5kIHVwIHdpdGggZXJyb3JzIGxpa2UKKworL2hvbWUva3Jhai93b3JrL2JsZWVkaW5nL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1tdXNsL3dvcmsvbWlwczMycjItb2UtbGludXgtbXVzbC9saWJwcm94eS8wLjQuMTEtcjAvbGlicHJveHktMC40LjExL2xpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcDogSW4gbWVtYmVyIGZ1bmN0aW9uICdib29sIFRlc3RTZXJ2ZXI6Omxvb3AoKSc6CisvaG9tZS9rcmFqL3dvcmsvYmxlZWRpbmcvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLW11c2wvd29yay9taXBzMzJyMi1vZS1saW51eC1tdXNsL2xpYnByb3h5LzAuNC4xMS1yMC9saWJwcm94eS0wLjQuMTEvbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwOjgwOjQ6IGVycm9yOiAnZmRfc2V0JyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKKyAgICBmZF9zZXQgZmRzOworICAgIF4KKy9ob21lL2tyYWovd29yay9ibGVlZGluZy9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtbXVzbC93b3JrL21pcHMzMnIyLW9lLWxpbnV4LW11c2wvbGlicHJveHkvMC40LjExLXIwL2xpYnByb3h5LTAuNC4xMS9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHA6ODk6MTQ6IGVycm9yOiAnZmRzJyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKKyAgICBGRF9aRVJPICgmZmRzKTsKKzxKSVJBIFRJQ0tFVCAjMT4sIDxKSVJBIFRJQ0tFVCAjMj4sIDxKSVJBIFRJQ0tFVCAjbj4gOiA8b25lIGxpbmUgc3VtbWFyeSBvZiBjaGFuZ2U+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHAgYi9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHAKK2luZGV4IGE2MWZjNGIuLmJkYTQ2NDYgMTAwNjQ0CistLS0gYS9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHAKKysrKyBiL2xpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcAorQEAgLTMsNiArMyw3IEBACisgI2luY2x1ZGUgPHNzdHJlYW0+CisgI2luY2x1ZGUgPHN0cmluZz4KKyAKKysjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHlfMC40LjExLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwcm94eS9saWJwcm94eV8wLjQuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkMGI5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHlfMC40LjExLmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBwcm92aWRpbmcgYXV0b21hdGljIHByb3h5IGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCIKK0hPTUVQQUdFID0gImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9saWJwcm94eS8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9saWJwcm94eS9pc3N1ZXMvbGlzdCIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdXRpbHMvcHJveHkuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTE4O21kNT01NTE1MmExMDA2ZDdkYWZiZWYzMmJhZjljMzBhOTljMCIKKworREVQRU5EUyA9ICJnY29uZiBnbGliLTIuMCIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vbGlicC8ke0JQTn0vJHtCUE59XyR7UFZ9Lm9yaWcudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdGVzdC1JbmNsdWRlLXN5cy1zZWxlY3QuaC1mb3Itc2VsZWN0LnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiM2NkMWFlMmE0YWJlY2Y0NGIzZjI0ZDY2MzlkMmNkODQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGMzZjMzZGU1NDE2MzcxOGY4MmIzZTdjNDk2YTdkZTk3Zjg4NjI1Nzg0MTRiOGVjYWFkM2NiZmU0ODIxODY0YiIKKworaW5oZXJpdCBjbWFrZSBwa2djb25maWcKKworRVhUUkFfT0VDTUFLRSA9ICItRFdJVEhfV0VCS0lUPW5vIC1EV0lUSF9HTk9NRT15ZXMgLURXSVRIX0tERTQ9bm8gXAorCSAgICAgIC1EV0lUSF9QWVRIT049bm8gLURXSVRIX1BFUkw9bm8gLURXSVRIX01PWkpTPW5vIC1EV0lUSF9OTT1ubyAtRExJQl9JTlNUQUxMX0RJUj0ke2xpYmRpcn0gLURMSUJFWEVDX0lOU1RBTExfRElSPSR7bGliZXhlY2Rpcn0iCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vJHtCUE59LyR7UFZ9L21vZHVsZXMiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vY21ha2UiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke0JQTn0vJHtQVn0vcGx1Z2lucy8uZGVidWcvICR7bGliZGlyfS8ke0JQTn0vJHtQVn0vbW9kdWxlcy8uZGVidWcvIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlleHBvcnQgSE9TVF9TWVM9JHtIT1NUX1NZU30KKwlleHBvcnQgQlVJTERfU1lTPSR7QlVJTERfU1lTfQorfQorCitweXRob24oKSB7CisgICAgaWYgaW5jb21wYXRpYmxlX2xpY2Vuc2VfY29udGFpbnMoIkdQTHYzIiwgIngiLCAiIiwgZCkgPT0gIngiIG9yIGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAieDExIiwgIngiLCAiIiwgZCkgPT0gIiI6CisgICAgICAgIGQuc2V0VmFyKCJFWFRSQV9PRUNNQUtFIiwgZC5nZXRWYXIoIkVYVFJBX09FQ01BS0UiLCBGYWxzZSkucmVwbGFjZSgiLURXSVRIX0dOT01FPXllcyIsICItRFdJVEhfR05PTUU9bm8iKSkKKyAgICAgICAgZC5zZXRWYXIoIkRFUEVORFMiLCAiICIuam9pbihpIGZvciBpIGluIGQuZ2V0VmFyKCJERVBFTkRTIiwgRmFsc2UpLnNwbGl0KCkgaWYgaSAhPSAiZ2NvbmYiKSkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlic291cC9saWJzb3VwLTIuNF8yLjUwLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnNvdXAvbGlic291cC0yLjRfMi41MC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NGRiMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnNvdXAvbGlic291cC0yLjRfMi41MC4wLmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiQW4gSFRUUCBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIGluIEMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKKworU0VDVElPTiA9ICJ4MTEvZ25vbWUvbGlicyIKKworREVQRU5EUyA9ICJnbGliLTIuMCBnbnV0bHMgbGlieG1sMiBzcWxpdGUzIGludGx0b29sLW5hdGl2ZSIKKworIyBsaWJzb3VwLWdub21lIGlzIGVudGlyZWx5IGRlcHJlY2F0ZWQgYW5kIGp1c3Qgc3R1YnMgaW4gMi40MiBvbndhcmRzLiAgRW5hYmxlCisjIGJ5IGRlZmF1bHQgYnV0IGxldCBpdCBiZSBlYXNpbHkgZGlzYWJsZWQuCitQQUNLQUdFQ09ORklHID8/PSAiZ25vbWUiCitQQUNLQUdFQ09ORklHW2dub21lXSA9ICItLXdpdGgtZ25vbWUsLS13aXRob3V0LWdub21lIgorCitTSFJUX1ZFUiA9ICIke0BiYi5kYXRhLmdldFZhcignUFYnLGQsMSkuc3BsaXQoJy4nKVswXX0uJHtAYmIuZGF0YS5nZXRWYXIoJ1BWJyxkLDEpLnNwbGl0KCcuJylbMV19IgorU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vbGlic291cC8ke1NIUlRfVkVSfS9saWJzb3VwLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjlhODRkNjZlMWI3Y2NkM2JkMzQwNTc0YjExZWNjYzE1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFlMDEzNjVhYzRhZjM4MTcxODdlYTg0N2Y5ZDM1ODhjMjdlZWUwMWZjNTE5YTVhN2NiMjEyYmI3OGIwZjY2N2IiCisKK1MgPSAiJHtXT1JLRElSfS9saWJzb3VwLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCisjIGdsaWItbmV0d29ya2luZyBpcyBuZWVkZWQgZm9yIFNTTCwgcHJveGllcywgZXRjLgorUlJFQ09NTUVORFNfJHtQTn0gPSAiZ2xpYi1uZXR3b3JraW5nIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVuaXN0cmluZy9saWJ1bmlzdHJpbmcvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWVhY2I4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogbGlidW5pc3RyaW5nLTAuOS40L2xpYi9NYWtlZmlsZS5nbnVsaWIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ1bmlzdHJpbmctMC45LjQub3JpZy9saWIvTWFrZWZpbGUuZ251bGliCisrKysgbGlidW5pc3RyaW5nLTAuOS40L2xpYi9NYWtlZmlsZS5nbnVsaWIKK0BAIC0zODAsNyArMzgwLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZy9pY29udi1tNC1yZW1vdmUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVuaXN0cmluZy9saWJ1bmlzdHJpbmcvaWNvbnYtbTQtcmVtb3ZlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NDg5MTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVuaXN0cmluZy9saWJ1bmlzdHJpbmcvaWNvbnYtbTQtcmVtb3ZlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gOGQ5OWEzNjg2MTU2NTZhODM1ZjU1MDIzMjZhZmQzMWNlYzJjZWJmZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDE2IFNlcCAyMDEzIDE4OjE2OjEyICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHJlbW92ZSB0aGUgdGVzdCB0byBjb252ZXJ0IGV1Yy1qcAorCitSZW1vdmUgdGhlIHRlc3QgIlRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6CitObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMgcHJvdmlkZWQiCitzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IEhQLVVYIGFuZCBpZiB0aGUgZXVjLWpwIGlzIG5vdAoraW5zdGFsbGVkIG9uIHRoZSBob3N0LCBsaWJ1bmlzdHJpbmcgd2lsbCBiZSBidWlsdCB3aXRob3V0CitpY29udiBzdXBwb3J0IGFuZCB3aWxsIGNhdXNlIGd1aWxkLW5hdGl2ZSBjb25maWd1cmUgZmFpbC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdudWxpYi1tNC9pY29udi5tNCB8ICAgMTEgLS0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK0luZGV4OiBsaWJ1bmlzdHJpbmctMC45LjQvZ251bGliLW00L2ljb252Lm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlidW5pc3RyaW5nLTAuOS40Lm9yaWcvZ251bGliLW00L2ljb252Lm00CTIwMTQtMTEtMDMgMTc6NDE6MjkuNzU1MDExOTE3ICswMDAwCisrKysgbGlidW5pc3RyaW5nLTAuOS40L2dudWxpYi1tNC9pY29udi5tNAkyMDE0LTExLTAzIDE3OjQzOjAzLjc5NTAxNDQ4MCArMDAwMAorQEAgLTE1OSwxNyArMTU5LDYgQEAKKyAgICAgICB9CisgICB9CisgI2VuZGlmCistICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMKKy0gICAgIHByb3ZpZGVkLiAgKi8KKy0gIGlmICgvKiBUcnkgc3RhbmRhcmRpemVkIG5hbWVzLiAgKi8KKy0gICAgICBpY29udl9vcGVuICgiVVRGLTgiLCAiRVVDLUpQIikgPT0gKGljb252X3QpKC0xKQorLSAgICAgIC8qIFRyeSBJUklYLCBPU0YvMSBuYW1lcy4gICovCistICAgICAgJiYgaWNvbnZfb3BlbiAoIlVURi04IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKQorLSAgICAgIC8qIFRyeSBBSVggbmFtZXMuICAqLworLSAgICAgICYmIGljb252X29wZW4gKCJVVEYtOCIsICJJQk0tZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpCistICAgICAgLyogVHJ5IEhQLVVYIG5hbWVzLiAgKi8KKy0gICAgICAmJiBpY29udl9vcGVuICgidXRmOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkpCistICAgIHJlc3VsdCB8PSAxNjsKKyAgIHJldHVybiByZXN1bHQ7CisgfV1dKV0sCisgICAgICAgICBbYW1fY3ZfZnVuY19pY29udl93b3Jrcz15ZXNdLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nXzAuOS41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nXzAuOS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2Y2MzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVuaXN0cmluZy9saWJ1bmlzdHJpbmdfMC45LjUuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgQyBhbmQgVW5pY29kZSBzdHJpbmdzIgorCitERVNDUklQVElPTiA9ICJUZXh0IGZpbGVzIGFyZSBub3dhZGF5cyB1c3VhbGx5IGVuY29kZWQgaW4gVW5pY29kZSwgYW5kIG1heVwKKyBjb25zaXN0IG9mIHZlcnkgZGlmZmVyZW50IHNjcmlwdHMgZnJvbSBMYXRpbiBsZXR0ZXJzIHRvIENoaW5lc2UgSGFuemlcCisgd2l0aCBtYW55IGtpbmRzIG9mIHNwZWNpYWwgY2hhcmFjdGVycyBhY2NlbnRzLCByaWdodC10by1sZWZ0IHdyaXRpbmdcCisgbWFya3MsIGh5cGhlbnMsIFJvbWFuIG51bWJlcnMsIGFuZCBtdWNoIG1vcmUuIEJ1dCB0aGUgUE9TSVggcGxhdGZvcm1cCisgQVBJcyBmb3IgdGV4dCBkbyBub3QgY29udGFpbiBhZGVxdWF0ZSBmdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aFwKKyBwYXJ0aWN1bGFyIHByb3BlcnRpZXMgb2YgbWFueSBVbmljb2RlIGNoYXJhY3RlcnMuIEluIGZhY3QsIHRoZSBQT1NJWFwKKyBBUElzIGZvciB0ZXh0IGhhdmUgc2V2ZXJhbCBhc3N1bXB0aW9ucyBhdCB0aGVpciBiYXNlIHdoaWNoIGRvbid0IGhvbGRcCisgZm9yIFVuaWNvZGUgdGV4dC4gIFRoaXMgbGlicmFyeSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIG1hbmlwdWxhdGluZ1wKKyBVbmljb2RlIHN0cmluZ3MgYW5kIGZvciBtYW5pcHVsYXRpbmcgQyBzdHJpbmdzIGFjY29yZGluZyB0byB0aGUgVW5pY29kZVwKKyBzdGFuZGFyZC4gIFRoaXMgcGFja2FnZSBjb250YWlucyBkb2N1bWVudGF0aW9uLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnVuaXN0cmluZy8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MyAmIExHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2xpYnVuaXN0cmluZy9saWJ1bmlzdHJpbmctJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ljb252LW00LXJlbW92ZS10aGUtdGVzdC10by1jb252ZXJ0LWV1Yy1qcC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICIxYTcwNWJjZGNiODM3OTlkNTQ0MTM3NjE3YjM3N2NmZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYThjMDc3MjQ2Nzg1MGJlZjcxOTczMThhOTVmNDRhYmJiNjc4ZWE4M2NiZjExOWEzNTAwY2M3ODQ4Mjc2YTE3IgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xLzAwMDEtSW52YWxpZC1kd2FyZi1vcGNvZGVzLWNhbi1jYXVzZS1yZWZlcmVuY2VzLWJleW9uZC10aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvMDAwMS1JbnZhbGlkLWR3YXJmLW9wY29kZXMtY2FuLWNhdXNlLXJlZmVyZW5jZXMtYmV5b25kLXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOTcyZjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xLzAwMDEtSW52YWxpZC1kd2FyZi1vcGNvZGVzLWNhbi1jYXVzZS1yZWZlcmVuY2VzLWJleW9uZC10aC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDM5NmI2YzdhYjczN2UyYmZmMjQ0ZDY0MDYwMWM0MzZhMjYyNjBjYTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBcnVuIFNoYXJtYSA8YXJ1bkBzaGFybWEtaG9tZS5uZXQ+CitEYXRlOiBGcmksIDE5IEp1biAyMDE1IDE5OjQ3OjIyIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIEludmFsaWQgZHdhcmYgb3Bjb2RlcyBjYW4gY2F1c2UgcmVmZXJlbmNlcyBiZXlvbmQgdGhlIGVuZCBvZgorIHRoZSBhcnJheS4KKworVXBzdHJlYW0tU3RhdHVzOiBiYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBMaSBaaG91IDxsaS56aG91QHdpbmRyaXZlci5jb20+CistLS0KKyBpbmNsdWRlL2R3YXJmX2kuaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHdhcmZfaS5oIGIvaW5jbHVkZS9kd2FyZl9pLmgKK2luZGV4IDFlNjIzMWUuLjRhMDJhN2QgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2R3YXJmX2kuaAorKysrIGIvaW5jbHVkZS9kd2FyZl9pLmgKK0BAIC0yMCw3ICsyMCw3IEBACisgZXh0ZXJuIGNvbnN0IHVpbnQ4X3QgZHdhcmZfdG9fdW53X3JlZ251bV9tYXBbRFdBUkZfUkVHTlVNX01BUF9MRU5HVEhdOworIC8qIFJFRyBpcyBldmFsdWF0ZWQgbXVsdGlwbGUgdGltZXM7IGl0IGJldHRlciBiZSBzaWRlLWVmZmVjdHMgZnJlZSEgICovCisgIyBkZWZpbmUgZHdhcmZfdG9fdW53X3JlZ251bShyZWcpCQkJCQkgIFwKKy0gICgoKHJlZykgPD0gRFdBUkZfUkVHTlVNX01BUF9MRU5HVEgpID8gZHdhcmZfdG9fdW53X3JlZ251bV9tYXBbcmVnXSA6IDApCisrICAoKChyZWcpIDwgRFdBUkZfUkVHTlVNX01BUF9MRU5HVEgpID8gZHdhcmZfdG9fdW53X3JlZ251bV9tYXBbcmVnXSA6IDApCisgI2VuZGlmCisgCisgI2lmZGVmIFVOV19MT0NBTF9PTkxZCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9BQXJjaDY0LXBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0FBcmNoNjQtcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjhlYzMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9BQXJjaDY0LXBvcnQucGF0Y2gKQEAgLTAsMCArMSwyNTI5IEBACitGcm9tIGFjNmMwYTY1MzU5NzVmMWRjMmRhNmU0ZTI3NjY2MTRiYWFjMmExNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBZdmFuIFJvdXggPHl2YW4ucm91eEBsaW5hcm8ub3JnPgorRGF0ZTogU2F0LCAxMSBNYXkgMjAxMyAwOToxODoyMyAtMDYwMAorU3ViamVjdDogW1BBVENIXSBBQXJjaDY0IHBvcnQuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworLS0tCisgTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiAKKyBSRUFETUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxIAorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgCisgaW5jbHVkZS9saWJ1bndpbmQtYWFyY2g2NC5oICAgICAgICAgIHwgIDE4NyArKysrKysrKysrKysrKysrKysrKysrCisgaW5jbHVkZS9saWJ1bndpbmQuaC5pbiAgICAgICAgICAgICAgIHwgICAgNCAKKyBpbmNsdWRlL3RkZXAtYWFyY2g2NC9kd2FyZi1jb25maWcuaCAgfCAgIDUyICsrKysrKworIGluY2x1ZGUvdGRlcC1hYXJjaDY0L2ptcGJ1Zi5oICAgICAgICB8ICAgMzMgKysrCisgaW5jbHVkZS90ZGVwLWFhcmNoNjQvbGlidW53aW5kX2kuaCAgIHwgIDI5NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGluY2x1ZGUvdGRlcC9kd2FyZi1jb25maWcuaCAgICAgICAgICB8ICAgIDQgCisgaW5jbHVkZS90ZGVwL2ptcGJ1Zi5oICAgICAgICAgICAgICAgIHwgICAgMiAKKyBpbmNsdWRlL3RkZXAvbGlidW53aW5kX2kuaC5pbiAgICAgICAgfCAgICA0IAorIHNyYy9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAgMzkgKysrKworIHNyYy9hYXJjaDY0L0djcmVhdGVfYWRkcl9zcGFjZS5jICAgICB8ICAgNjAgKysrKysrKworIHNyYy9hYXJjaDY0L0dnZXRfcHJvY19pbmZvLmMgICAgICAgICB8ICAgMzkgKysrKworIHNyYy9hYXJjaDY0L0dnZXRfc2F2ZV9sb2MuYyAgICAgICAgICB8ICAxMDAgKysrKysrKysrKysKKyBzcmMvYWFyY2g2NC9HZ2xvYmFsLmMgICAgICAgICAgICAgICAgfCAgIDU3ICsrKysrKworIHNyYy9hYXJjaDY0L0dpbml0LmMgICAgICAgICAgICAgICAgICB8ICAxODcgKysrKysrKysrKysrKysrKysrKysrKworIHNyYy9hYXJjaDY0L0dpbml0X2xvY2FsLmMgICAgICAgICAgICB8ICAgNTUgKysrKysrCisgc3JjL2FhcmNoNjQvR2luaXRfcmVtb3RlLmMgICAgICAgICAgIHwgICA0NSArKysrKworIHNyYy9hYXJjaDY0L0dpc19zaWduYWxfZnJhbWUuYyAgICAgICB8ICAgNjQgKysrKysrKworIHNyYy9hYXJjaDY0L0dyZWdzLmMgICAgICAgICAgICAgICAgICB8ICAxMTMgKysrKysrKysrKysrKworIHNyYy9hYXJjaDY0L0dyZXN1bWUuYyAgICAgICAgICAgICAgICB8ICAxNzcgKysrKysrKysrKysrKysrKysrKysrCisgc3JjL2FhcmNoNjQvR3N0ZXAuYyAgICAgICAgICAgICAgICAgIHwgIDEyOSArKysrKysrKysrKysrKysKKyBzcmMvYWFyY2g2NC9MY3JlYXRlX2FkZHJfc3BhY2UuYyAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xnZXRfcHJvY19pbmZvLmMgICAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTGdldF9zYXZlX2xvYy5jICAgICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9MZ2xvYmFsLmMgICAgICAgICAgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xpbml0LmMgICAgICAgICAgICAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTGluaXRfbG9jYWwuYyAgICAgICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9MaW5pdF9yZW1vdGUuYyAgICAgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xpc19zaWduYWxfZnJhbWUuYyAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTHJlZ3MuYyAgICAgICAgICAgICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9McmVzdW1lLmMgICAgICAgICAgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xzdGVwLmMgICAgICAgICAgICAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvZ2VuLW9mZnNldHMuYyAgICAgICAgICAgIHwgICA2OCArKysrKysrKworIHNyYy9hYXJjaDY0L2luaXQuaCAgICAgICAgICAgICAgICAgICB8ICAxMjcgKysrKysrKysrKysrKysrCisgc3JjL2FhcmNoNjQvaXNfZnByZWcuYyAgICAgICAgICAgICAgIHwgICAzMiArKysKKyBzcmMvYWFyY2g2NC9vZmZzZXRzLmggICAgICAgICAgICAgICAgfCAgIDQ5ICsrKysrCisgc3JjL2FhcmNoNjQvcmVnbmFtZS5jICAgICAgICAgICAgICAgIHwgIDEwNiArKysrKysrKysrKysKKyBzcmMvYWFyY2g2NC9zaWdsb25nam1wLlMgICAgICAgICAgICAgfCAgIDEyICsKKyBzcmMvYWFyY2g2NC91bndpbmRfaS5oICAgICAgICAgICAgICAgfCAgIDQzICsrKysrCisgc3JjL2NvcmVkdW1wL19VQ0RfYWNjZXNzX3JlZ19saW51eC5jIHwgICAgNSAKKyBzcmMvcHRyYWNlL19VUFRfcmVnX29mZnNldC5jICAgICAgICAgfCAgIDM2ICsrKysKKyA0MyBmaWxlcyBjaGFuZ2VkLCAyMTg0IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGlidW53aW5kLWFhcmNoNjQuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3RkZXAtYWFyY2g2NC9kd2FyZi1jb25maWcuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3RkZXAtYWFyY2g2NC9qbXBidWYuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3RkZXAtYWFyY2g2NC9saWJ1bndpbmRfaS5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0djcmVhdGVfYWRkcl9zcGFjZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dnZXRfcHJvY19pbmZvLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2dldF9zYXZlX2xvYy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dnbG9iYWwuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HaW5pdC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dpbml0X2xvY2FsLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2luaXRfcmVtb3RlLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2lzX3NpZ25hbF9mcmFtZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dyZWdzLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR3Jlc3VtZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dzdGVwLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGNyZWF0ZV9hZGRyX3NwYWNlLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGdldF9wcm9jX2luZm8uYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MZ2V0X3NhdmVfbG9jLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGdsb2JhbC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xpbml0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGluaXRfbG9jYWwuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MaW5pdF9yZW1vdGUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MaXNfc2lnbmFsX2ZyYW1lLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTHJlZ3MuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9McmVzdW1lLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTHN0ZXAuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9nZW4tb2Zmc2V0cy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L2luaXQuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9pc19mcHJlZy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L29mZnNldHMuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9yZWduYW1lLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvc2lnbG9uZ2ptcC5TCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L3Vud2luZF9pLmgKKworLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMiw2ICsyLDkgQEAgaW5jbHVkZV9IRUFERVJTID0gaW5jbHVkZS9saWJ1bndpbmQtZHluYQorICAgICBpbmNsdWRlL2xpYnVud2luZC1wdHJhY2UuaCBcCisgICAgIGluY2x1ZGUvbGlidW53aW5kLWNvcmVkdW1wLmgKKyAKKytpZiBBUkNIX0FBUkNINjQKKytpbmNsdWRlX0hFQURFUlMgKz0gaW5jbHVkZS9saWJ1bndpbmQtYWFyY2g2NC5oCisrZW5kaWYKKyBpZiBBUkNIX0FSTQorIGluY2x1ZGVfSEVBREVSUyArPSBpbmNsdWRlL2xpYnVud2luZC1hcm0uaAorIGVuZGlmCitAQCAtNDEsNiArNDQsOSBAQCBTVUJESVJTID0gc3JjIHRlc3RzIGRvYworIG5vaW5zdF9IRUFERVJTID0gaW5jbHVkZS9kd2FyZi5oIGluY2x1ZGUvZHdhcmZfaS5oIGluY2x1ZGUvZHdhcmYtZWguaAlcCisgCWluY2x1ZGUvY29tcGlsZXIuaCBpbmNsdWRlL2xpYnVud2luZF9pLmggaW5jbHVkZS9tZW1wb29sLmgJXAorIAlpbmNsdWRlL3JlbW90ZS5oCQkJCQkJXAorKwlpbmNsdWRlL3RkZXAtYWFyY2g2NC9kd2FyZi1jb25maWcuaAkJCQlcCisrCWluY2x1ZGUvdGRlcC1hYXJjaDY0L2ptcGJ1Zi5oCQkJCQlcCisrCWluY2x1ZGUvdGRlcC1hYXJjaDY0L2xpYnVud2luZF9pLmgJCQkJXAorIAlpbmNsdWRlL3RkZXAtYXJtL2R3YXJmLWNvbmZpZy5oCWluY2x1ZGUvdGRlcC1hcm0vZXhfdGFibGVzLmgJXAorIAlpbmNsdWRlL3RkZXAtYXJtL2ptcGJ1Zi5oIGluY2x1ZGUvdGRlcC1hcm0vbGlidW53aW5kX2kuaAlcCisgCWluY2x1ZGUvdGRlcC1pYTY0L2ptcGJ1Zi5oIGluY2x1ZGUvdGRlcC1pYTY0L3JzZS5oIAkJXAorLS0tIGEvUkVBRE1FCisrKysgYi9SRUFETUUKK0BAIC05LDYgKzksNyBAQCBzZXZlcmFsIGFyY2hpdGVjdHVyZS9vcGVyYXRpbmctc3lzdGVtIGNvCisgIExpbnV4L0lBLTY0OglGdWxseSB0ZXN0ZWQgYW5kIHN1cHBvcnRlZC4KKyAgTGludXgvUEFSSVNDOglXb3JrcyB3ZWxsLCBidXQgQyBsaWJyYXJ5IG1pc3NpbmcgdW53aW5kLWluZm8uCisgIEhQLVVYL0lBLTY0OglNb3N0bHkgd29ya3MgYnV0IGtub3duIHRvIGhhdmUgc29tZSBzZXJpb3VzIGxpbWl0YXRpb25zLgorKyBMaW51eC9BQXJjaDY0OglOZXdseSBhZGRlZC4KKyAgTGludXgvUFBDNjQ6CU5ld2x5IGFkZGVkLgorICBMaW51eC9TdXBlckg6CU5ld2x5IGFkZGVkLgorICBGcmVlQlNEL2kzODY6CU5ld2x5IGFkZGVkLgorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMDQsNyArMTA0LDcgQEAgU0VUX0FSQ0goWyR0YXJnZXRfY3B1XSxbdGFyZ2V0X2FyY2hdKQorIAorIEFDX0FSR19FTkFCTEUoY29yZWR1bXAsCisgCUFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jb3JlZHVtcF0sW2J1aWxkaW5nIGxpYnVud2luZC1jb3JlZHVtcCBsaWJyYXJ5XSksLAorLSAgICAgICAgW0FTX0NBU0UoWyRob3N0X2FyY2hdLCBbYXJtKnxtaXBzKnxzaCp8eDg2Kl0sIFtlbmFibGVfY29yZWR1bXA9eWVzXSwgW2VuYWJsZV9jb3JlZHVtcD1ub10pXQorKyAgICAgICAgW0FTX0NBU0UoWyRob3N0X2FyY2hdLCBbYWFyY2g2NCp8YXJtKnxtaXBzKnxzaCp8eDg2Kl0sIFtlbmFibGVfY29yZWR1bXA9eWVzXSwgW2VuYWJsZV9jb3JlZHVtcD1ub10pXQorICkKKyAKKyBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIHNob3VsZCBidWlsZCBsaWJ1bndpbmQtY29yZWR1bXBdKQorQEAgLTEyMSw2ICsxMjEsNyBAQCBBQ19NU0dfUkVTVUxUKFskdGFyZ2V0X29zXSkKKyAKKyBBTV9DT05ESVRJT05BTChCVUlMRF9DT1JFRFVNUCwgdGVzdCB4JGVuYWJsZV9jb3JlZHVtcCA9IHh5ZXMpCisgQU1fQ09ORElUSU9OQUwoUkVNT1RFX09OTFksIHRlc3QgeCR0YXJnZXRfYXJjaCAhPSB4JGhvc3RfYXJjaCkKKytBTV9DT05ESVRJT05BTChBUkNIX0FBUkNINjQsIHRlc3QgeCR0YXJnZXRfYXJjaCA9IHhhYXJjaDY0KQorIEFNX0NPTkRJVElPTkFMKEFSQ0hfQVJNLCB0ZXN0IHgkdGFyZ2V0X2FyY2ggPSB4YXJtKQorIEFNX0NPTkRJVElPTkFMKEFSQ0hfSUE2NCwgdGVzdCB4JHRhcmdldF9hcmNoID0geGlhNjQpCisgQU1fQ09ORElUSU9OQUwoQVJDSF9IUFBBLCB0ZXN0IHgkdGFyZ2V0X2FyY2ggPSB4aHBwYSkKK0BAIC0xMzcsNyArMTM4LDcgQEAgQU1fQ09ORElUSU9OQUwoT1NfRlJFRUJTRCwgZXhwciB4JHRhcmdldAorIEFDX01TR19DSEVDS0lORyhbZm9yIEVMRiBoZWxwZXIgd2lkdGhdKQorIGNhc2UgIiR7dGFyZ2V0X2FyY2h9IiBpbgorIChhcm18aHBwYXxwcGMzMnx4ODZ8c2gpIHVzZV9lbGYzMj15ZXM7IEFDX01TR19SRVNVTFQoWzMyXSk7OworLShpYTY0fHBwYzY0fHg4Nl82NCkgICAgdXNlX2VsZjY0PXllczsgQUNfTVNHX1JFU1VMVChbNjRdKTs7CisrKGFhcmNoNjR8aWE2NHxwcGM2NHx4ODZfNjQpICAgIHVzZV9lbGY2ND15ZXM7IEFDX01TR19SRVNVTFQoWzY0XSk7OworIChtaXBzKSAgICAgICAgICAgICAgICAgdXNlX2VsZnh4PXllczsgQUNfTVNHX1JFU1VMVChbeHhdKTs7CisgKikgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW1Vua25vd24gRUxGIHRhcmdldDogJHt0YXJnZXRfYXJjaH1dKQorIGVzYWMKK0BAIC0xODYsNiArMTg3LDcgQEAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWN4eC1leGNlcHRpb25zXQorICMgQysrIGV4Y2VwdGlvbiBoYW5kbGluZyBkb2Vzbid0IHdvcmsgdG9vIHdlbGwgb24geDg2CisgY2FzZSAkdGFyZ2V0X2FyY2ggaW4KKyAgIHg4NiopIGVuYWJsZV9jeHhfZXhjZXB0aW9ucz1ubzs7CisrICBhYXJjaDY0KikgZW5hYmxlX2N4eF9leGNlcHRpb25zPW5vOzsKKyAgIGFybSopIGVuYWJsZV9jeHhfZXhjZXB0aW9ucz1ubzs7CisgICBtaXBzKikgZW5hYmxlX2N4eF9leGNlcHRpb25zPW5vOzsKKyAgICopIGVuYWJsZV9jeHhfZXhjZXB0aW9ucz15ZXM7OworLS0tIC9kZXYvbnVsbAorKysrIGIvaW5jbHVkZS9saWJ1bndpbmQtYWFyY2g2NC5oCitAQCAtMCwwICsxLDE4NyBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBIZXdsZXR0LVBhY2thcmQgQ28KKysJQ29udHJpYnV0ZWQgYnkgRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2lmbmRlZiBMSUJVTldJTkRfSAorKyNkZWZpbmUgTElCVU5XSU5EX0gKKysKKysjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChjX3BsdXNwbHVzKQorK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysjaW5jbHVkZSA8dWNvbnRleHQuaD4KKysKKysjZGVmaW5lIFVOV19UQVJHRVQJYWFyY2g2NAorKyNkZWZpbmUgVU5XX1RBUkdFVF9BQVJDSDY0CTEKKysKKysjZGVmaW5lIF9VX1RERVBfUVBfVFJVRQkwCS8qIHNlZSBsaWJ1bndpbmQtZHluYW1pYy5oICAqLworKworKy8qIFRoaXMgbmVlZHMgdG8gYmUgYmlnIGVub3VnaCB0byBhY2NvbW1vZGF0ZSAic3RydWN0IGN1cnNvciIsIHdoaWxlCisrICAgbGVhdmluZyBzb21lIHNsYWNrIGZvciBmdXR1cmUgZXhwYW5zaW9uLiAgQ2hhbmdpbmcgdGhpcyB2YWx1ZSB3aWxsCisrICAgcmVxdWlyZSByZWNvbXBpbGluZyBhbGwgdXNlcnMgb2YgdGhpcyBsaWJyYXJ5LiAgU3RhY2sgYWxsb2NhdGlvbiBpcworKyAgIHJlbGF0aXZlbHkgY2hlYXAgYW5kIHVud2luZC1zdGF0ZSBjb3B5aW5nIGlzIHJlbGF0aXZlbHkgcmFyZSwgc28gd2UKKysgICB3YW50IHRvIGVyciBvbiBtYWtpbmcgaXQgcmF0aGVyIHRvbyBiaWcgdGhhbiB0b28gc21hbGwuICAqLworKworKyNkZWZpbmUgVU5XX1RERVBfQ1VSU09SX0xFTgk0MDk2CisrCisrdHlwZWRlZiB1aW50NjRfdCB1bndfd29yZF90OworK3R5cGVkZWYgaW50NjRfdCB1bndfc3dvcmRfdDsKKysKKyt0eXBlZGVmIGxvbmcgZG91YmxlIHVud190ZGVwX2ZwcmVnX3Q7CisrCisrdHlwZWRlZiBzdHJ1Y3QKKysgIHsKKysgICAgLyogbm8gYWFyY2g2NC1zcGVjaWZpYyBhdXhpbGlhcnkgcHJvYy1pbmZvICovCisrICB9CisrdW53X3RkZXBfcHJvY19pbmZvX3Q7CisrCisrdHlwZWRlZiBlbnVtCisrICB7CisrICAgIC8qIDY0LWJpdCBnZW5lcmFsIHJlZ2lzdGVycy4gICovCisrICAgIFVOV19BQVJDSDY0X1gwLAorKyAgICBVTldfQUFSQ0g2NF9YMSwKKysgICAgVU5XX0FBUkNINjRfWDIsCisrICAgIFVOV19BQVJDSDY0X1gzLAorKyAgICBVTldfQUFSQ0g2NF9YNCwKKysgICAgVU5XX0FBUkNINjRfWDUsCisrICAgIFVOV19BQVJDSDY0X1g2LAorKyAgICBVTldfQUFSQ0g2NF9YNywKKysgICAgVU5XX0FBUkNINjRfWDgsCisrCisrICAgIC8qIFRlbXBvcmFyeSByZWdpc3RlcnMuICAqLworKyAgICBVTldfQUFSQ0g2NF9YOSwKKysgICAgVU5XX0FBUkNINjRfWDEwLAorKyAgICBVTldfQUFSQ0g2NF9YMTEsCisrICAgIFVOV19BQVJDSDY0X1gxMiwKKysgICAgVU5XX0FBUkNINjRfWDEzLAorKyAgICBVTldfQUFSQ0g2NF9YMTQsCisrICAgIFVOV19BQVJDSDY0X1gxNSwKKysKKysgICAgLyogSW50cmEtcHJvY2VkdXJlLWNhbGwgdGVtcG9yYXJ5IHJlZ2lzdGVycy4gICovCisrICAgIFVOV19BQVJDSDY0X1gxNiwKKysgICAgVU5XX0FBUkNINjRfWDE3LAorKworKyAgICAvKiBDYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzLiAgKi8KKysgICAgVU5XX0FBUkNINjRfWDE4LAorKyAgICBVTldfQUFSQ0g2NF9YMTksCisrICAgIFVOV19BQVJDSDY0X1gyMCwKKysgICAgVU5XX0FBUkNINjRfWDIxLAorKyAgICBVTldfQUFSQ0g2NF9YMjIsCisrICAgIFVOV19BQVJDSDY0X1gyMywKKysgICAgVU5XX0FBUkNINjRfWDI0LAorKyAgICBVTldfQUFSQ0g2NF9YMjUsCisrICAgIFVOV19BQVJDSDY0X1gyNiwKKysgICAgVU5XX0FBUkNINjRfWDI3LAorKyAgICBVTldfQUFSQ0g2NF9YMjgsCisrCisrICAgIC8qIDY0LWJpdCBmcmFtZSBwb2ludGVyLiAgKi8KKysgICAgVU5XX0FBUkNINjRfWDI5LAorKworKyAgICAvKiA2NC1iaXQgbGluayByZWdpc3Rlci4gICovCisrICAgIFVOV19BQVJDSDY0X1gzMCwKKysKKysgICAgLyogNjQtYml0IHN0YWNrIHBvaW50ZXIuICAqLworKyAgICBVTldfQUFSQ0g2NF9TUCA9ICAzMSwKKysgICAgVU5XX0FBUkNINjRfUEMsCisrICAgIFVOV19BQVJDSDY0X1BTVEFURSwKKysKKysgICAgLyogMTI4LWJpdCBGUC9BZHZhbmNlZCBTSU1EIHJlZ2lzdGVycy4gICovCisrICAgIFVOV19BQVJDSDY0X1YwID0gNjQsCisrICAgIFVOV19BQVJDSDY0X1YxLAorKyAgICBVTldfQUFSQ0g2NF9WMiwKKysgICAgVU5XX0FBUkNINjRfVjMsCisrICAgIFVOV19BQVJDSDY0X1Y0LAorKyAgICBVTldfQUFSQ0g2NF9WNSwKKysgICAgVU5XX0FBUkNINjRfVjYsCisrICAgIFVOV19BQVJDSDY0X1Y3LAorKyAgICBVTldfQUFSQ0g2NF9WOCwKKysgICAgVU5XX0FBUkNINjRfVjksCisrICAgIFVOV19BQVJDSDY0X1YxMCwKKysgICAgVU5XX0FBUkNINjRfVjExLAorKyAgICBVTldfQUFSQ0g2NF9WMTIsCisrICAgIFVOV19BQVJDSDY0X1YxMywKKysgICAgVU5XX0FBUkNINjRfVjE0LAorKyAgICBVTldfQUFSQ0g2NF9WMTUsCisrICAgIFVOV19BQVJDSDY0X1YxNiwKKysgICAgVU5XX0FBUkNINjRfVjE3LAorKyAgICBVTldfQUFSQ0g2NF9WMTgsCisrICAgIFVOV19BQVJDSDY0X1YxOSwKKysgICAgVU5XX0FBUkNINjRfVjIwLAorKyAgICBVTldfQUFSQ0g2NF9WMjEsCisrICAgIFVOV19BQVJDSDY0X1YyMiwKKysgICAgVU5XX0FBUkNINjRfVjIzLAorKyAgICBVTldfQUFSQ0g2NF9WMjQsCisrICAgIFVOV19BQVJDSDY0X1YyNSwKKysgICAgVU5XX0FBUkNINjRfVjI2LAorKyAgICBVTldfQUFSQ0g2NF9WMjcsCisrICAgIFVOV19BQVJDSDY0X1YyOCwKKysgICAgVU5XX0FBUkNINjRfVjI5LAorKyAgICBVTldfQUFSQ0g2NF9WMzAsCisrICAgIFVOV19BQVJDSDY0X1YzMSwKKysKKysgICAgVU5XX0FBUkNINjRfRlBTUiwKKysgICAgVU5XX0FBUkNINjRfRlBDUiwKKysKKysgICAgLyogRm9yIEFBcmNoNjQsIHRoZSBDRkEgaXMgdGhlIHZhbHVlIG9mIFNQICh4MzEpIGF0IHRoZSBjYWxsIHNpdGUgb2YgdGhlCisrICAgICAgIHByZXZpb3VzIGZyYW1lLiAgKi8KKysgICAgVU5XX0FBUkNINjRfQ0ZBID0gVU5XX0FBUkNINjRfU1AsCisrCisrICAgIFVOV19UREVQX0xBU1RfUkVHID0gVU5XX0FBUkNINjRfRlBDUiwKKysKKysgICAgVU5XX1RERVBfSVAgPSBVTldfQUFSQ0g2NF9YMzAsCisrICAgIFVOV19UREVQX1NQID0gVU5XX0FBUkNINjRfU1AsCisrICAgIFVOV19UREVQX0VIID0gVU5XX0FBUkNINjRfWDAsCisrCisrICB9CisrYWFyY2g2NF9yZWdudW1fdDsKKysKKysvKiBVc2UgUjAgdGhyb3VnaCBSMyB0byBwYXNzIGV4Y2VwdGlvbiBoYW5kbGluZyBpbmZvcm1hdGlvbi4gICovCisrI2RlZmluZSBVTldfVERFUF9OVU1fRUhfUkVHUwk0CisrCisrdHlwZWRlZiBzdHJ1Y3QgdW53X3RkZXBfc2F2ZV9sb2MKKysgIHsKKysgICAgLyogQWRkaXRpb25hbCB0YXJnZXQtZGVwZW5kZW50IGluZm8gb24gYSBzYXZlIGxvY2F0aW9uLiAgKi8KKysgIH0KKyt1bndfdGRlcF9zYXZlX2xvY190OworKworKworKy8qIE9uIEFBcmNoNjQsIHdlIGNhbiBkaXJlY3RseSB1c2UgdWNvbnRleHRfdCBhcyB0aGUgdW53aW5kIGNvbnRleHQuICAqLworK3R5cGVkZWYgdWNvbnRleHRfdCB1bndfdGRlcF9jb250ZXh0X3Q7CisrCisrI2luY2x1ZGUgImxpYnVud2luZC1jb21tb24uaCIKKysjaW5jbHVkZSAibGlidW53aW5kLWR5bmFtaWMuaCIKKysKKysjZGVmaW5lIHVud190ZGVwX2dldGNvbnRleHQodWMpICAgICAgICAgKGdldGNvbnRleHQgKHVjKSwgMCkKKysjZGVmaW5lIHVud190ZGVwX2lzX2ZwcmVnCQlVTldfQVJDSF9PQkooaXNfZnByZWcpCisrCisrZXh0ZXJuIGludCB1bndfdGRlcF9pc19mcHJlZyAoaW50KTsKKysKKysjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChjX3BsdXNwbHVzKQorK30KKysjZW5kaWYKKysKKysjZW5kaWYgLyogTElCVU5XSU5EX0ggKi8KKy0tLSBhL2luY2x1ZGUvbGlidW53aW5kLmguaW4KKysrKyBiL2luY2x1ZGUvbGlidW53aW5kLmguaW4KK0BAIC0zLDcgKzMsOSBAQAorIAorICNpZm5kZWYgVU5XX1JFTU9URV9PTkxZCisgCistI2lmIGRlZmluZWQgX19hcm1fXworKyNpZiBkZWZpbmVkIF9fYWFyY2g2NF9fCisrI2luY2x1ZGUgImxpYnVud2luZC1hYXJjaDY0LmgiCisrI2VsaWYgZGVmaW5lZCBfX2FybV9fCisgIyBpbmNsdWRlICJsaWJ1bndpbmQtYXJtLmgiCisgI2VsaWYgZGVmaW5lZCBfX2hwcGFfXworICMgaW5jbHVkZSAibGlidW53aW5kLWhwcGEuaCIKKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvdGRlcC1hYXJjaDY0L2R3YXJmLWNvbmZpZy5oCitAQCAtMCwwICsxLDUyIEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaWZuZGVmIGR3YXJmX2NvbmZpZ19oCisrI2RlZmluZSBkd2FyZl9jb25maWdfaAorKworKy8qIFRoaXMgbWF0Y2hlcyB0aGUgdmFsdWUgdWRlcyBieSBHQ0MgKHNlZQorKyAgIGdjYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0Lmg6RFdBUkZfRlJBTUVfUkVHSVNURVJTLiAgKi8KKysjZGVmaW5lIERXQVJGX05VTV9QUkVTRVJWRURfUkVHUwk5NworKworKy8qIFJldHVybiBUUlVFIGlmIHRoZSBBRERSX1NQQUNFIHVzZXMgYmlnLWVuZGlhbiBieXRlLW9yZGVyLiAgKi8KKysjZGVmaW5lIGR3YXJmX2lzX2JpZ19lbmRpYW4oYWRkcl9zcGFjZSkJMAorKworKyNkZWZpbmUgZHdhcmZfdG9fdW53X3JlZ251bShyZWcpICgoKHJlZykgPD0gVU5XX0FBUkNINjRfVjMxKSA/IChyZWcpIDogMCkKKysKKysvKiBDb252ZXJ0IGEgcG9pbnRlciB0byBhIGR3YXJmX2N1cnNvciBzdHJ1Y3R1cmUgdG8gYSBwb2ludGVyIHRvCisrICAgdW53X2N1cnNvcl90LiAgKi8KKysjZGVmaW5lIGR3YXJmX3RvX2N1cnNvcihjKQkoKHVud19jdXJzb3JfdCAqKSAoYykpCisrCisrdHlwZWRlZiBzdHJ1Y3QgZHdhcmZfbG9jCisrICB7CisrICAgIHVud193b3JkX3QgdmFsOworKyNpZm5kZWYgVU5XX0xPQ0FMX09OTFkKKysgICAgdW53X3dvcmRfdCB0eXBlOwkJLyogc2VlIERXQVJGX0xPQ19UWVBFXyogbWFjcm9zLiAgKi8KKysjZW5kaWYKKysgIH0KKytkd2FyZl9sb2NfdDsKKysKKysjZW5kaWYgLyogZHdhcmZfY29uZmlnX2ggKi8KKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvdGRlcC1hYXJjaDY0L2ptcGJ1Zi5oCitAQCAtMCwwICsxLDMzIEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKy8qIFVzZSBnbGliYydzIGp1bXAtYnVmZmVyIGluZGljZXM7IE5QVEwgcGVla3MgYXQgU1A6ICovCisrCisrLyogRklYTUUgZm9yIEFBcmNoNjQgICovCisrCisrI2RlZmluZSBKQl9TUAkJMTMKKysjZGVmaW5lIEpCX1JQCQkxNAorKyNkZWZpbmUgSkJfTUFTS19TQVZFRAkxNQorKyNkZWZpbmUgSkJfTUFTSwkJMTYKKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvdGRlcC1hYXJjaDY0L2xpYnVud2luZF9pLmgKK0BAIC0wLDAgKzEsMjk0IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDA1IEhld2xldHQtUGFja2FyZCBDbworKwlDb250cmlidXRlZCBieSBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaWZuZGVmIEFBUkNINjRfTElCVU5XSU5EX0lfSAorKyNkZWZpbmUgQUFSQ0g2NF9MSUJVTldJTkRfSV9ICisrCisrLyogVGFyZ2V0LWRlcGVuZGVudCBkZWZpbml0aW9ucyB0aGF0IGFyZSBpbnRlcm5hbCB0byBsaWJ1bndpbmQgYnV0IG5lZWQKKysgICB0byBiZSBzaGFyZWQgd2l0aCB0YXJnZXQtaW5kZXBlbmRlbnQgY29kZS4gICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysKKysjaW5jbHVkZSAiZWxmNjQuaCIKKysjaW5jbHVkZSAibWVtcG9vbC5oIgorKyNpbmNsdWRlICJkd2FyZi5oIgorKworK3R5cGVkZWYgc3RydWN0CisrICB7CisrICAgIC8qIG5vIGFhcmNoNjQtc3BlY2lmaWMgZmFzdCB0cmFjZSAqLworKyAgfQorK3Vud190ZGVwX2ZyYW1lX3Q7CisrCisrI2lmZGVmIFVOV19MT0NBTF9PTkxZCisrCisrdHlwZWRlZiB1bndfd29yZF90IGFhcmNoNjRfbG9jX3Q7CisrCisrI2Vsc2UgLyogIVVOV19MT0NBTF9PTkxZICovCisrCisrdHlwZWRlZiBzdHJ1Y3QgYWFyY2g2NF9sb2MKKysgIHsKKysgICAgdW53X3dvcmRfdCB3MCwgdzE7CisrICB9CisrYWFyY2g2NF9sb2NfdDsKKysKKysjZW5kaWYgLyogIVVOV19MT0NBTF9PTkxZICovCisrCisrc3RydWN0IHVud19hZGRyX3NwYWNlCisrICB7CisrICAgIHN0cnVjdCB1bndfYWNjZXNzb3JzIGFjYzsKKysgICAgaW50IGJpZ19lbmRpYW47CisrICAgIHVud19jYWNoaW5nX3BvbGljeV90IGNhY2hpbmdfcG9saWN5OworKyNpZmRlZiBIQVZFX0FUT01JQ19PUFNfSAorKyAgICBBT190IGNhY2hlX2dlbmVyYXRpb247CisrI2Vsc2UKKysgICAgdWludDMyX3QgY2FjaGVfZ2VuZXJhdGlvbjsKKysjZW5kaWYKKysgICAgdW53X3dvcmRfdCBkeW5fZ2VuZXJhdGlvbjsgICAgICAgICAgLyogc2VlIGR5bi1jb21tb24uaCAqLworKyAgICB1bndfd29yZF90IGR5bl9pbmZvX2xpc3RfYWRkcjsJLyogKGNhY2hlZCkgZHluX2luZm9fbGlzdF9hZGRyICovCisrICAgIHN0cnVjdCBkd2FyZl9yc19jYWNoZSBnbG9iYWxfY2FjaGU7CisrICAgIHN0cnVjdCB1bndfZGVidWdfZnJhbWVfbGlzdCAqZGVidWdfZnJhbWVzOworKyAgIH07CisrCisrc3RydWN0IGN1cnNvcgorKyAgeworKyAgICBzdHJ1Y3QgZHdhcmZfY3Vyc29yIGR3YXJmOyAgICAgICAgICAvKiBtdXN0IGJlIGZpcnN0ICovCisrICAgIGVudW0KKysgICAgICB7CisrICAgICAgICBBQVJDSDY0X1NDRl9OT05FLAorKyAgICAgICAgQUFSQ0g2NF9TQ0ZfTElOVVhfUlRfU0lHRlJBTUUsCisrICAgICAgfQorKyAgICBzaWdjb250ZXh0X2Zvcm1hdDsKKysgICAgdW53X3dvcmRfdCBzaWdjb250ZXh0X2FkZHI7CisrICAgIHVud193b3JkX3Qgc2lnY29udGV4dF9zcDsKKysgICAgdW53X3dvcmRfdCBzaWdjb250ZXh0X3BjOworKyAgfTsKKysKKysjZGVmaW5lIERXQVJGX0dFVF9MT0MobCkgICAgICAgICgobCkudmFsKQorKworKyNpZmRlZiBVTldfTE9DQUxfT05MWQorKyMgZGVmaW5lIERXQVJGX05VTExfTE9DICAgICAgICAgRFdBUkZfTE9DICgwLCAwKQorKyMgZGVmaW5lIERXQVJGX0lTX05VTExfTE9DKGwpICAgKERXQVJGX0dFVF9MT0MgKGwpID09IDApCisrIyBkZWZpbmUgRFdBUkZfTE9DKHIsIHQpICAgICAgICAoKGR3YXJmX2xvY190KSB7IC52YWwgPSAocikgfSkKKysjIGRlZmluZSBEV0FSRl9JU19SRUdfTE9DKGwpICAgIDAKKysjIGRlZmluZSBEV0FSRl9SRUdfTE9DKGMscikgICAgIChEV0FSRl9MT0MoKHVud193b3JkX3QpICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwX3VjX2FkZHIoKGMpLT5hc19hcmcsIChyKSksIDApKQorKyMgZGVmaW5lIERXQVJGX01FTV9MT0MoYyxtKSAgICAgRFdBUkZfTE9DICgobSksIDApCisrIyBkZWZpbmUgRFdBUkZfRlBSRUdfTE9DKGMscikgICAoRFdBUkZfTE9DKCh1bndfd29yZF90KSAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcF91Y19hZGRyKChjKS0+YXNfYXJnLCAocikpLCAwKSkKKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX2dldGZwIChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud19mcHJlZ190ICp2YWwpCisreworKyAgaWYgKCFEV0FSRl9HRVRfTE9DIChsb2MpKQorKyAgICByZXR1cm4gLTE7CisrICAqdmFsID0gKih1bndfZnByZWdfdCAqKSBEV0FSRl9HRVRfTE9DIChsb2MpOworKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbmxpbmUgaW50CisrZHdhcmZfcHV0ZnAgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X2ZwcmVnX3QgdmFsKQorK3sKKysgIGlmICghRFdBUkZfR0VUX0xPQyAobG9jKSkKKysgICAgcmV0dXJuIC0xOworKyAgKih1bndfZnByZWdfdCAqKSBEV0FSRl9HRVRfTE9DIChsb2MpID0gdmFsOworKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbmxpbmUgaW50CisrZHdhcmZfZ2V0IChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud193b3JkX3QgKnZhbCkKKyt7CisrICBpZiAoIURXQVJGX0dFVF9MT0MgKGxvYykpCisrICAgIHJldHVybiAtMTsKKysgICp2YWwgPSAqKHVud193b3JkX3QgKikgRFdBUkZfR0VUX0xPQyAobG9jKTsKKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX3B1dCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfd29yZF90IHZhbCkKKyt7CisrICBpZiAoIURXQVJGX0dFVF9MT0MgKGxvYykpCisrICAgIHJldHVybiAtMTsKKysgICoodW53X3dvcmRfdCAqKSBEV0FSRl9HRVRfTE9DIChsb2MpID0gdmFsOworKyAgcmV0dXJuIDA7CisrfQorKworKyNlbHNlIC8qICFVTldfTE9DQUxfT05MWSAqLworKyMgZGVmaW5lIERXQVJGX0xPQ19UWVBFX0ZQICAgICAgKDEgPDwgMCkKKysjIGRlZmluZSBEV0FSRl9MT0NfVFlQRV9SRUcgICAgICgxIDw8IDEpCisrIyBkZWZpbmUgRFdBUkZfTlVMTF9MT0MgICAgICAgICBEV0FSRl9MT0MgKDAsIDApCisrIyBkZWZpbmUgRFdBUkZfSVNfTlVMTF9MT0MobCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAoeyBkd2FyZl9sb2NfdCBfbCA9IChsKTsgX2wudmFsID09IDAgJiYgX2wudHlwZSA9PSAwOyB9KQorKyMgZGVmaW5lIERXQVJGX0xPQyhyLCB0KSAgICAgICAgKChkd2FyZl9sb2NfdCkgeyAudmFsID0gKHIpLCAudHlwZSA9ICh0KSB9KQorKyMgZGVmaW5lIERXQVJGX0lTX1JFR19MT0MobCkgICAgKCgobCkudHlwZSAmIERXQVJGX0xPQ19UWVBFX1JFRykgIT0gMCkKKysjIGRlZmluZSBEV0FSRl9JU19GUF9MT0MobCkgICAgICgoKGwpLnR5cGUgJiBEV0FSRl9MT0NfVFlQRV9GUCkgIT0gMCkKKysjIGRlZmluZSBEV0FSRl9SRUdfTE9DKGMscikgICAgIERXQVJGX0xPQygociksIERXQVJGX0xPQ19UWVBFX1JFRykKKysjIGRlZmluZSBEV0FSRl9NRU1fTE9DKGMsbSkgICAgIERXQVJGX0xPQyAoKG0pLCAwKQorKyMgZGVmaW5lIERXQVJGX0ZQUkVHX0xPQyhjLHIpICAgRFdBUkZfTE9DKChyKSwgKERXQVJGX0xPQ19UWVBFX1JFRyAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERXQVJGX0xPQ19UWVBFX0ZQKSkKKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX2dldGZwIChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud19mcHJlZ190ICp2YWwpCisreworKyAgY2hhciAqdmFscCA9IChjaGFyICopICZ2YWw7CisrICB1bndfd29yZF90IGFkZHI7CisrICBpbnQgcmV0OworKworKyAgaWYgKERXQVJGX0lTX05VTExfTE9DIChsb2MpKQorKyAgICByZXR1cm4gLVVOV19FQkFEUkVHOworKworKyAgaWYgKERXQVJGX0lTX1JFR19MT0MgKGxvYykpCisrICAgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX2ZwcmVnKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLCAwLCBjLT5hc19hcmcpOworKworKyAgYWRkciA9IERXQVJGX0dFVF9MT0MgKGxvYyk7CisrICBpZiAoKHJldCA9ICgqYy0+YXMtPmFjYy5hY2Nlc3NfbWVtKSAoYy0+YXMsIGFkZHIgKyAwLCAodW53X3dvcmRfdCAqKSB2YWxwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGMtPmFzX2FyZykpIDwgMCkKKysgICAgcmV0dXJuIHJldDsKKysKKysgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX21lbSkgKGMtPmFzLCBhZGRyICsgNCwgKHVud193b3JkX3QgKikgdmFscCArIDEsIDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5hc19hcmcpOworK30KKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX3B1dGZwIChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud19mcHJlZ190IHZhbCkKKyt7CisrICBjaGFyICp2YWxwID0gKGNoYXIgKikgJnZhbDsKKysgIHVud193b3JkX3QgYWRkcjsKKysgIGludCByZXQ7CisrCisrICBpZiAoRFdBUkZfSVNfTlVMTF9MT0MgKGxvYykpCisrICAgIHJldHVybiAtVU5XX0VCQURSRUc7CisrCisrICBpZiAoRFdBUkZfSVNfUkVHX0xPQyAobG9jKSkKKysgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfZnByZWcpIChjLT5hcywgRFdBUkZfR0VUX0xPQyAobG9jKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFsLCAxLCBjLT5hc19hcmcpOworKworKyAgYWRkciA9IERXQVJGX0dFVF9MT0MgKGxvYyk7CisrICBpZiAoKHJldCA9ICgqYy0+YXMtPmFjYy5hY2Nlc3NfbWVtKSAoYy0+YXMsIGFkZHIgKyAwLCAodW53X3dvcmRfdCAqKSB2YWxwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGMtPmFzX2FyZykpIDwgMCkKKysgICAgcmV0dXJuIHJldDsKKysKKysgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX21lbSkgKGMtPmFzLCBhZGRyICsgNCwgKHVud193b3JkX3QgKikgdmFscCArIDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBjLT5hc19hcmcpOworK30KKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX2dldCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfd29yZF90ICp2YWwpCisreworKyAgaWYgKERXQVJGX0lTX05VTExfTE9DIChsb2MpKQorKyAgICByZXR1cm4gLVVOV19FQkFEUkVHOworKworKyAgLyogSWYgYSBjb2RlLWdlbmVyYXRvciB3ZXJlIHRvIHNhdmUgYSB2YWx1ZSBvZiB0eXBlIHVud193b3JkX3QgaW4gYQorKyAgICAgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIsIHdlIHdvdWxkIGhhdmUgdG8gc3VwcG9ydCB0aGlzIGNhc2UuICBJCisrICAgICBzdXBwb3NlIGl0IGNvdWxkIGhhcHBlbiB3aXRoIE1NWCByZWdpc3RlcnMsIGJ1dCBkb2VzIGl0IHJlYWxseQorKyAgICAgaGFwcGVuPyAgKi8KKysgIGFzc2VydCAoIURXQVJGX0lTX0ZQX0xPQyAobG9jKSk7CisrCisrICBpZiAoRFdBUkZfSVNfUkVHX0xPQyAobG9jKSkKKysgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfcmVnKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksIHZhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgYy0+YXNfYXJnKTsKKysgIGVsc2UKKysgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfbWVtKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksIHZhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgYy0+YXNfYXJnKTsKKyt9CisrCisrc3RhdGljIGlubGluZSBpbnQKKytkd2FyZl9wdXQgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X3dvcmRfdCB2YWwpCisreworKyAgaWYgKERXQVJGX0lTX05VTExfTE9DIChsb2MpKQorKyAgICByZXR1cm4gLVVOV19FQkFEUkVHOworKworKyAgLyogSWYgYSBjb2RlLWdlbmVyYXRvciB3ZXJlIHRvIHNhdmUgYSB2YWx1ZSBvZiB0eXBlIHVud193b3JkX3QgaW4gYQorKyAgICAgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIsIHdlIHdvdWxkIGhhdmUgdG8gc3VwcG9ydCB0aGlzIGNhc2UuICBJCisrICAgICBzdXBwb3NlIGl0IGNvdWxkIGhhcHBlbiB3aXRoIE1NWCByZWdpc3RlcnMsIGJ1dCBkb2VzIGl0IHJlYWxseQorKyAgICAgaGFwcGVuPyAgKi8KKysgIGFzc2VydCAoIURXQVJGX0lTX0ZQX0xPQyAobG9jKSk7CisrCisrICBpZiAoRFdBUkZfSVNfUkVHX0xPQyAobG9jKSkKKysgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfcmVnKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksICZ2YWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGMtPmFzX2FyZyk7CisrICBlbHNlCisrICAgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX21lbSkgKGMtPmFzLCBEV0FSRl9HRVRfTE9DIChsb2MpLCAmdmFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBjLT5hc19hcmcpOworK30KKysKKysjZW5kaWYgLyogIVVOV19MT0NBTF9PTkxZICovCisrCisrCisrCisrI2RlZmluZSB0ZGVwX2dldGNvbnRleHRfdHJhY2UgICAgICAgICAgIHVud19nZXRjb250ZXh0CisrI2RlZmluZSB0ZGVwX2luaXRfZG9uZQkJCVVOV19PQkooaW5pdF9kb25lKQorKyNkZWZpbmUgdGRlcF9pbml0CQkJVU5XX09CSihpbml0KQorKy8qIFBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgVU5XX0lORk9fRk9STUFUX1RBQkxFIG5lZWQgdG8gZGVmaW5lCisrICAgdGRlcF9zZWFyY2hfdW53aW5kX3RhYmxlLiAgKi8KKysjZGVmaW5lIHRkZXBfc2VhcmNoX3Vud2luZF90YWJsZQlkd2FyZl9zZWFyY2hfdW53aW5kX3RhYmxlCisrI2RlZmluZSB0ZGVwX2ZpbmRfdW53aW5kX3RhYmxlCSAgICAgICAgZHdhcmZfZmluZF91bndpbmRfdGFibGUKKysjZGVmaW5lIHRkZXBfdWNfYWRkcgkJCVVOV19PQkoodWNfYWRkcikKKysjZGVmaW5lIHRkZXBfZ2V0X2VsZl9pbWFnZQkJVU5XX0FSQ0hfT0JKKGdldF9lbGZfaW1hZ2UpCisrI2RlZmluZSB0ZGVwX2FjY2Vzc19yZWcJCQlVTldfT0JKKGFjY2Vzc19yZWcpCisrI2RlZmluZSB0ZGVwX2FjY2Vzc19mcHJlZwkJVU5XX09CSihhY2Nlc3NfZnByZWcpCisrI2RlZmluZSB0ZGVwX2ZldGNoX2ZyYW1lKGMsaXAsbikJZG8ge30gd2hpbGUoMCkKKysjZGVmaW5lIHRkZXBfY2FjaGVfZnJhbWUoYyxycykJCWRvIHt9IHdoaWxlKDApCisrI2RlZmluZSB0ZGVwX3JldXNlX2ZyYW1lKGMscnMpCQlkbyB7fSB3aGlsZSgwKQorKyNkZWZpbmUgdGRlcF9zdGFzaF9mcmFtZShjLHJzKQkJZG8ge30gd2hpbGUoMCkKKysjZGVmaW5lIHRkZXBfdHJhY2UoY3VyLGFkZHIsbikJCSgtVU5XX0VOT0lORk8pCisrCisrI2lmZGVmIFVOV19MT0NBTF9PTkxZCisrIyBkZWZpbmUgdGRlcF9maW5kX3Byb2NfaW5mbyhjLGlwLG4pICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGR3YXJmX2ZpbmRfcHJvY19pbmZvKChjKS0+YXMsIChpcCksICYoYyktPnBpLCAobiksICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjKS0+YXNfYXJnKQorKyMgZGVmaW5lIHRkZXBfcHV0X3Vud2luZF9pbmZvKGFzLHBpLGFyZykgICAgICAgICAgICAgICAgXAorKyAgICAgICAgZHdhcmZfcHV0X3Vud2luZF9pbmZvKChhcyksIChwaSksIChhcmcpKQorKyNlbHNlCisrIyBkZWZpbmUgdGRlcF9maW5kX3Byb2NfaW5mbyhjLGlwLG4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgKCooYyktPmFzLT5hY2MuZmluZF9wcm9jX2luZm8pKChjKS0+YXMsIChpcCksICYoYyktPnBpLCAobiksICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYyktPmFzX2FyZykKKysjIGRlZmluZSB0ZGVwX3B1dF91bndpbmRfaW5mbyhhcyxwaSxhcmcpICAgICAgICAgICAgICAgIFwKKysgICAgICAgICgqKGFzKS0+YWNjLnB1dF91bndpbmRfaW5mbykoKGFzKSwgKHBpKSwgKGFyZykpCisrI2VuZGlmCisrCisrI2RlZmluZSB0ZGVwX2dldF9hcyhjKSAgICAgICAgICAgICAgICAgICgoYyktPmR3YXJmLmFzKQorKyNkZWZpbmUgdGRlcF9nZXRfYXNfYXJnKGMpICAgICAgICAgICAgICAoKGMpLT5kd2FyZi5hc19hcmcpCisrI2RlZmluZSB0ZGVwX2dldF9pcChjKSAgICAgICAgICAgICAgICAgICgoYyktPmR3YXJmLmlwKQorKyNkZWZpbmUgdGRlcF9iaWdfZW5kaWFuKGFzKSAgICAgICAgICAgICAoKGFzKS0+YmlnX2VuZGlhbikKKysKKytleHRlcm4gaW50IHRkZXBfaW5pdF9kb25lOworKworK2V4dGVybiB2b2lkIHRkZXBfaW5pdCAodm9pZCk7CisrZXh0ZXJuIGludCB0ZGVwX3NlYXJjaF91bndpbmRfdGFibGUgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud193b3JkX3QgaXAsCisrCQkJCSAgICAgdW53X2R5bl9pbmZvX3QgKmRpLCB1bndfcHJvY19pbmZvX3QgKnBpLAorKwkJCQkgICAgIGludCBuZWVkX3Vud2luZF9pbmZvLCB2b2lkICphcmcpOworK2V4dGVybiB2b2lkICp0ZGVwX3VjX2FkZHIgKHVud190ZGVwX2NvbnRleHRfdCAqdWMsIGludCByZWcpOworK2V4dGVybiBpbnQgdGRlcF9nZXRfZWxmX2ltYWdlIChzdHJ1Y3QgZWxmX2ltYWdlICplaSwgcGlkX3QgcGlkLCB1bndfd29yZF90IGlwLAorKwkJCSAgICAgICB1bnNpZ25lZCBsb25nICpzZWdiYXNlLCB1bnNpZ25lZCBsb25nICptYXBvZmYsCisrCQkJICAgICAgIGNoYXIgKnBhdGgsIHNpemVfdCBwYXRobGVuKTsKKytleHRlcm4gaW50IHRkZXBfYWNjZXNzX3JlZyAoc3RydWN0IGN1cnNvciAqYywgdW53X3JlZ251bV90IHJlZywKKysJCQkgICAgdW53X3dvcmRfdCAqdmFscCwgaW50IHdyaXRlKTsKKytleHRlcm4gaW50IHRkZXBfYWNjZXNzX2ZwcmVnIChzdHJ1Y3QgY3Vyc29yICpjLCB1bndfcmVnbnVtX3QgcmVnLAorKwkJCSAgICAgIHVud19mcHJlZ190ICp2YWxwLCBpbnQgd3JpdGUpOworKworKyNlbmRpZiAvKiBBQVJDSDY0X0xJQlVOV0lORF9JX0ggKi8KKy0tLSBhL2luY2x1ZGUvdGRlcC9kd2FyZi1jb25maWcuaAorKysrIGIvaW5jbHVkZS90ZGVwL2R3YXJmLWNvbmZpZy5oCitAQCAtMSw3ICsxLDkgQEAKKyAvKiBQcm92aWRlIGEgcmVhbCBmaWxlIC0gbm90IGEgc3ltbGluayAtIGFzIGl0IHdvdWxkIGNhdXNlIG11bHRpYXJjaCBjb25mbGljdHMKKyAgICB3aGVuIG11bHRpcGxlIGRpZmZlcmVudCBhcmNoIHJlbGVhc2VzIGFyZSBpbnN0YWxsZWQgc2ltdWx0YW5lb3VzbHkuICAqLworIAorLSNpZiBkZWZpbmVkIF9fYXJtX18KKysjaWYgZGVmaW5lZCBfX2FhcmNoNjRfXworKyMgaW5jbHVkZSAidGRlcC1hYXJjaDY0L2R3YXJmLWNvbmZpZy5oIgorKyNlbGlmIGRlZmluZWQgX19hcm1fXworICMgaW5jbHVkZSAidGRlcC1hcm0vZHdhcmYtY29uZmlnLmgiCisgI2VsaWYgZGVmaW5lZCBfX2hwcGFfXworICMgaW5jbHVkZSAidGRlcC1ocHBhL2R3YXJmLWNvbmZpZy5oIgorLS0tIGEvaW5jbHVkZS90ZGVwL2ptcGJ1Zi5oCisrKysgYi9pbmNsdWRlL3RkZXAvam1wYnVmLmgKK0BAIC0zLDYgKzMsOCBAQAorIAorICNpZm5kZWYgVU5XX1JFTU9URV9PTkxZCisgCisrI2lmIGRlZmluZWQgX19hYXJjaDY0X18KKysjIGluY2x1ZGUgInRkZXAtYWFyY2g2NC9qbXBidWYuaCIKKyAjaWYgZGVmaW5lZCBfX2FybV9fCisgIyBpbmNsdWRlICJ0ZGVwLWFybS9qbXBidWYuaCIKKyAjZWxpZiBkZWZpbmVkIF9faHBwYV9fCistLS0gYS9pbmNsdWRlL3RkZXAvbGlidW53aW5kX2kuaC5pbgorKysrIGIvaW5jbHVkZS90ZGVwL2xpYnVud2luZF9pLmguaW4KK0BAIC0zLDcgKzMsOSBAQAorIAorICNpZm5kZWYgVU5XX1JFTU9URV9PTkxZCisgCistI2lmIGRlZmluZWQgX19hcm1fXworKyNpZiBkZWZpbmVkIF9fYWFyY2g2NF9fCisrIyBpbmNsdWRlICJ0ZGVwLWFhcmNoNjQvbGlidW53aW5kX2kuaCIKKysjZWxpZiBkZWZpbmVkIF9fYXJtX18KKyAjIGluY2x1ZGUgInRkZXAtYXJtL2xpYnVud2luZF9pLmgiCisgI2VsaWYgZGVmaW5lZCBfX2hwcGFfXworICMgaW5jbHVkZSAidGRlcC1ocHBhL2xpYnVud2luZF9pLmgiCistLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9NYWtlZmlsZS5hbQorQEAgLTE3MCw2ICsxNzAsMjggQEAgbGlidW53aW5kX2VsZnh4X2xhX1NPVVJDRVMgPSBlbGZ4eC5jCisgbm9pbnN0X0xUTElCUkFSSUVTICs9ICQoTElCVU5XSU5EX0VMRikKKyBsaWJ1bndpbmRfbGFfTElCQUREICs9ICQoTElCVU5XSU5EX0VMRikKKyAKKysjIFRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgZ28gaW50byBsaWJ1bndpbmQgYW5kIGxpYnVud2luZC1hYXJjaDY0OgorK25vaW5zdF9IRUFERVJTICs9IGFhcmNoNjQvaW5pdC5oIGFhcmNoNjQvb2Zmc2V0cy5oIGFhcmNoNjQvdW53aW5kX2kuaAorK2xpYnVud2luZF9sYV9TT1VSQ0VTX2FhcmNoNjRfY29tbW9uID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19jb21tb24pCSAgICBcCisrCWFhcmNoNjQvaXNfZnByZWcuYyBhYXJjaDY0L3JlZ25hbWUuYworKworKyMgVGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBnbyBpbnRvIGxpYnVud2luZDoKKytsaWJ1bndpbmRfbGFfU09VUkNFU19hYXJjaDY0ID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19hYXJjaDY0X2NvbW1vbikJICAgIFwKKysJJChsaWJ1bndpbmRfbGFfU09VUkNFU19sb2NhbCkJCQkJCSAgICBcCisrCWFhcmNoNjQvTGNyZWF0ZV9hZGRyX3NwYWNlLmMgYWFyY2g2NC9MZ2V0X3Byb2NfaW5mby5jIAkJICAgIFwKKysJYWFyY2g2NC9MZ2V0X3NhdmVfbG9jLmMgYWFyY2g2NC9MZ2xvYmFsLmMgYWFyY2g2NC9MaW5pdC5jCSAgICBcCisrCWFhcmNoNjQvTGluaXRfbG9jYWwuYyBhYXJjaDY0L0xpbml0X3JlbW90ZS5jIAkJCSAgICBcCisrCWFhcmNoNjQvTGlzX3NpZ25hbF9mcmFtZS5jIGFhcmNoNjQvTHJlZ3MuYyBhYXJjaDY0L0xyZXN1bWUuYyAJICAgIFwKKysJYWFyY2g2NC9Mc3RlcC5jCisrCisrbGlidW53aW5kX2FhcmNoNjRfbGFfU09VUkNFU19hYXJjaDY0ID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19hYXJjaDY0X2NvbW1vbikgXAorKwkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2dlbmVyaWMpCQkJCQkgICAgICBcCisrCWFhcmNoNjQvR2NyZWF0ZV9hZGRyX3NwYWNlLmMgYWFyY2g2NC9HZ2V0X3Byb2NfaW5mby5jIAkJICAgICAgXAorKwlhYXJjaDY0L0dnZXRfc2F2ZV9sb2MuYyBhYXJjaDY0L0dnbG9iYWwuYyBhYXJjaDY0L0dpbml0LmMgCSAgICAgIFwKKysJYWFyY2g2NC9HaW5pdF9sb2NhbC5jIGFhcmNoNjQvR2luaXRfcmVtb3RlLmMJCQkgICAgICBcCisrCWFhcmNoNjQvR2lzX3NpZ25hbF9mcmFtZS5jIGFhcmNoNjQvR3JlZ3MuYyBhYXJjaDY0L0dyZXN1bWUuYwkgICAgICBcCisrCWFhcmNoNjQvR3N0ZXAuYworKworICMgVGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBnbyBpbnRvIGxpYnVud2luZCBhbmQgbGlidW53aW5kLWFybToKKyBub2luc3RfSEVBREVSUyArPSBhcm0vaW5pdC5oIGFybS9vZmZzZXRzLmggYXJtL3Vud2luZF9pLmgKKyBsaWJ1bndpbmRfbGFfU09VUkNFU19hcm1fY29tbW9uID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19jb21tb24pCSAgICBcCitAQCAtNDE4LDYgKzQ0MCwxOCBAQCBpZiBPU19GUkVFQlNECisgIGxpYnVud2luZF9jb3JlZHVtcF9sYV9TT1VSQ0VTICs9IGNvcmVkdW1wL19VQ0RfYWNjZXNzX3JlZ19mcmVlYnNkLmMKKyBlbmRpZgorIAorK2lmIEFSQ0hfQUFSQ0g2NAorKyBsaWJfTFRMSUJSQVJJRVMgKz0gbGlidW53aW5kLWFhcmNoNjQubGEKKysgbGlidW53aW5kX2xhX1NPVVJDRVMgPSAkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FhcmNoNjQpCisrIGxpYnVud2luZF9hYXJjaDY0X2xhX1NPVVJDRVMgPSAkKGxpYnVud2luZF9hYXJjaDY0X2xhX1NPVVJDRVNfYWFyY2g2NCkKKysgbGlidW53aW5kX2FhcmNoNjRfbGFfTERGTEFHUyA9ICQoQ09NTU9OX1NPX0xERkxBR1MpIC12ZXJzaW9uLWluZm8gJChTT1ZFUlNJT04pCisrIGxpYnVud2luZF9hYXJjaDY0X2xhX0xJQkFERCA9IGxpYnVud2luZC1kd2FyZi1nZW5lcmljLmxhCisrIGxpYnVud2luZF9hYXJjaDY0X2xhX0xJQkFERCArPSBsaWJ1bndpbmQtZWxmNjQubGEKKytpZiAhUkVNT1RFX09OTFkKKysgbGlidW53aW5kX2FhcmNoNjRfbGFfTElCQUREICs9IGxpYnVud2luZC5sYSAtbGMKKytlbmRpZgorKyBsaWJ1bndpbmRfc2V0am1wX2xhX1NPVVJDRVMgKz0gYWFyY2g2NC9zaWdsb25nam1wLlMKKytlbHNlCisgaWYgQVJDSF9BUk0KKyAgbGliX0xUTElCUkFSSUVTICs9IGxpYnVud2luZC1hcm0ubGEKKyAgbGlidW53aW5kX2xhX1NPVVJDRVMgPSAkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FybSkKK0BAIC01NDUsNiArNTc5LDcgQEAgZW5kaWYgIyBBUkNIX01JUFMKKyBlbmRpZiAjIEFSQ0hfSFBQQQorIGVuZGlmICMgQVJDSF9JQTY0CisgZW5kaWYgIyBBUkNIX0FSTQorK2VuZGlmICMgQVJDSF9BQVJDSDY0CisgCisgIyBsaWJ1bndpbmQtc2V0am1wIGRlcGVuZHMgb24gbGlidW53aW5kLSQoYXJjaCkuIFRoZXJlZm9yZSBtdXN0IGJlIGFkZGVkCisgIyBhdCB0aGUgZW5kLgorQEAgLTU2Nyw3ICs2MDIsOCBAQCBBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIC1JCisgQU1fQ0NBU0ZMQUdTID0gJChBTV9DUFBGTEFHUykKKyBub2luc3RfSEVBREVSUyArPSB1bndpbmQvdW53aW5kLWludGVybmFsLmgKKyAKKy1FWFRSQV9ESVNUID0JJChsaWJ1bndpbmRfbGFfU09VUkNFU19hcm0pCQkJXAorK0VYVFJBX0RJU1QgPQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FhcmNoNjQpCQkJXAorKwkJJChsaWJ1bndpbmRfbGFfU09VUkNFU19hcm0pCQkJXAorIAkJJChsaWJ1bndpbmRfbGFfU09VUkNFU19ocHBhKQkJCVwKKyAJCSQobGlidW53aW5kX2xhX1NPVVJDRVNfaWE2NCkJCQlcCisgCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX21pcHMpCQkJXAorQEAgLTU3OSw2ICs2MTUsNyBAQCBFWFRSQV9ESVNUID0JJChsaWJ1bndpbmRfbGFfU09VUkNFU19hcm0pCisgCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2NvbW1vbikJCQlcCisgCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2xvY2FsKQkJCVwKKyAJCSQobGlidW53aW5kX2xhX1NPVVJDRVNfZ2VuZXJpYykJCQlcCisrCQkkKGxpYnVud2luZF9hYXJjaDY0X2xhX1NPVVJDRVNfYWFyY2g2NCkJCVwKKyAJCSQobGlidW53aW5kX2FybV9sYV9TT1VSQ0VTX2FybSkJCQlcCisgCQkkKGxpYnVud2luZF9ocHBhX2xhX1NPVVJDRVNfaHBwYSkJCVwKKyAJCSQobGlidW53aW5kX2lhNjRfbGFfU09VUkNFU19pYTY0KQkJXAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR2NyZWF0ZV9hZGRyX3NwYWNlLmMKK0BAIC0wLDAgKzEsNjAgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKytQUk9URUNURUQgdW53X2FkZHJfc3BhY2VfdAorK3Vud19jcmVhdGVfYWRkcl9zcGFjZSAodW53X2FjY2Vzc29yc190ICphLCBpbnQgYnl0ZV9vcmRlcikKKyt7CisrI2lmZGVmIFVOV19MT0NBTF9PTkxZCisrICByZXR1cm4gTlVMTDsKKysjZWxzZQorKyAgdW53X2FkZHJfc3BhY2VfdCBhczsKKysKKysgIC8qIEFBcmNoNjQgc3VwcG9ydHMgbGl0dGxlLWVuZGlhbiBhbmQgYmlnLWVuZGlhbi4gKi8KKysgIGlmIChieXRlX29yZGVyICE9IDAgJiYgYnl0ZV9vcmRlciAhPSBfX0xJVFRMRV9FTkRJQU4KKysgICAgICAmJiBieXRlX29yZGVyICE9IF9fQklHX0VORElBTikKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBhcyA9IG1hbGxvYyAoc2l6ZW9mICgqYXMpKTsKKysgIGlmICghYXMpCisrICAgIHJldHVybiBOVUxMOworKworKyAgbWVtc2V0IChhcywgMCwgc2l6ZW9mICgqYXMpKTsKKysKKysgIGFzLT5hY2MgPSAqYTsKKysKKysgIC8qIERlZmF1bHQgdG8gbGl0dGxlLWVuZGlhbiBmb3IgQUFyY2g2NC4gKi8KKysgIGlmIChieXRlX29yZGVyID09IDAgfHwgYnl0ZV9vcmRlciA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIGFzLT5iaWdfZW5kaWFuID0gMDsKKysgIGVsc2UKKysgICAgYXMtPmJpZ19lbmRpYW4gPSAxOworKworKyAgcmV0dXJuIGFzOworKyNlbmRpZgorK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dnZXRfcHJvY19pbmZvLmMKK0BAIC0wLDAgKzEsMzkgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrUFJPVEVDVEVEIGludAorK3Vud19nZXRfcHJvY19pbmZvICh1bndfY3Vyc29yX3QgKmN1cnNvciwgdW53X3Byb2NfaW5mb190ICpwaSkKKyt7CisrICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOworKyAgaW50IHJldDsKKysKKysgIHJldCA9IGR3YXJmX21ha2VfcHJvY19pbmZvICgmYy0+ZHdhcmYpOworKyAgaWYgKHJldCA8IDApCisrICAgIHJldHVybiByZXQ7CisrCisrICAqcGkgPSBjLT5kd2FyZi5waTsKKysgIHJldHVybiAwOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dnZXRfc2F2ZV9sb2MuYworQEAgLTAsMCArMSwxMDAgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfZ2V0X3NhdmVfbG9jICh1bndfY3Vyc29yX3QgKmN1cnNvciwgaW50IHJlZywgdW53X3NhdmVfbG9jX3QgKnNsb2MpCisreworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysgIGR3YXJmX2xvY190IGxvYzsKKysKKysgIHN3aXRjaCAocmVnKQorKyAgICB7CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDA6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDM6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDQ6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDU6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDY6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDc6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDg6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDk6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDEwOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTI6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDEzOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTU6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE2OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTg6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE5OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjE6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDIyOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjQ6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI1OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjc6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI4OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyOToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMzA6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfU1A6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfUEM6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfUFNUQVRFOgorKyAgICAgIGxvYyA9IGMtPmR3YXJmLmxvY1tyZWddOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIGxvYyA9IERXQVJGX05VTExfTE9DOwkvKiBkZWZhdWx0IHRvICJub3Qgc2F2ZWQiICovCisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgIG1lbXNldCAoc2xvYywgMCwgc2l6ZW9mICgqc2xvYykpOworKworKyAgaWYgKERXQVJGX0lTX05VTExfTE9DIChsb2MpKQorKyAgICB7CisrICAgICAgc2xvYy0+dHlwZSA9IFVOV19TTFRfTk9ORTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyNpZiAhZGVmaW5lZChVTldfTE9DQUxfT05MWSkKKysgIGlmIChEV0FSRl9JU19SRUdfTE9DIChsb2MpKQorKyAgICB7CisrICAgICAgc2xvYy0+dHlwZSA9IFVOV19TTFRfUkVHOworKyAgICAgIHNsb2MtPnUucmVnbnVtID0gRFdBUkZfR0VUX0xPQyAobG9jKTsKKysgICAgfQorKyAgZWxzZQorKyNlbmRpZgorKyAgICB7CisrICAgICAgc2xvYy0+dHlwZSA9IFVOV19TTFRfTUVNT1JZOworKyAgICAgIHNsb2MtPnUuYWRkciA9IERXQVJGX0dFVF9MT0MgKGxvYyk7CisrICAgIH0KKysgIHJldHVybiAwOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dnbG9iYWwuYworQEAgLTAsMCArMSw1NyBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrI2luY2x1ZGUgImR3YXJmX2kuaCIKKysKKytISURERU4gZGVmaW5lX2xvY2sgKGFhcmNoNjRfbG9jayk7CisrSElEREVOIGludCB0ZGVwX2luaXRfZG9uZTsKKysKKytISURERU4gdm9pZAorK3RkZXBfaW5pdCAodm9pZCkKKyt7CisrICBpbnRybWFza190IHNhdmVkX21hc2s7CisrCisrICBzaWdmaWxsc2V0ICgmdW53aV9mdWxsX21hc2spOworKworKyAgbG9ja19hY3F1aXJlICgmYWFyY2g2NF9sb2NrLCBzYXZlZF9tYXNrKTsKKysgIHsKKysgICAgaWYgKHRkZXBfaW5pdF9kb25lKQorKyAgICAgIC8qIGFub3RoZXIgdGhyZWFkIGVsc2UgYmVhdCB1cyB0byBpdC4uLiAqLworKyAgICAgIGdvdG8gb3V0OworKworKyAgICBtaV9pbml0ICgpOworKworKyAgICBkd2FyZl9pbml0ICgpOworKworKyNpZm5kZWYgVU5XX1JFTU9URV9PTkxZCisrICAgIGFhcmNoNjRfbG9jYWxfYWRkcl9zcGFjZV9pbml0ICgpOworKyNlbmRpZgorKyAgICB0ZGVwX2luaXRfZG9uZSA9IDE7CS8qIHNpZ25hbCB0aGF0IHdlJ3JlIGluaXRpYWxpemVkLi4uICovCisrICB9CisrIG91dDoKKysgIGxvY2tfcmVsZWFzZSAoJmFhcmNoNjRfbG9jaywgc2F2ZWRfbWFzayk7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR2luaXQuYworQEAgLTAsMCArMSwxODcgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrI2lmZGVmIFVOV19SRU1PVEVfT05MWQorKworKy8qIHVud19sb2NhbF9hZGRyX3NwYWNlIGlzIGEgTlVMTCBwb2ludGVyIGluIHRoaXMgY2FzZS4gICovCisrUFJPVEVDVEVEIHVud19hZGRyX3NwYWNlX3QgdW53X2xvY2FsX2FkZHJfc3BhY2U7CisrCisrI2Vsc2UgLyogIVVOV19SRU1PVEVfT05MWSAqLworKworK3N0YXRpYyBzdHJ1Y3QgdW53X2FkZHJfc3BhY2UgbG9jYWxfYWRkcl9zcGFjZTsKKysKKytQUk9URUNURUQgdW53X2FkZHJfc3BhY2VfdCB1bndfbG9jYWxfYWRkcl9zcGFjZSA9ICZsb2NhbF9hZGRyX3NwYWNlOworKworK3N0YXRpYyBpbmxpbmUgdm9pZCAqCisrdWNfYWRkciAodWNvbnRleHRfdCAqdWMsIGludCByZWcpCisreworKyAgaWYgKHJlZyA+PSBVTldfQUFSQ0g2NF9YMCAmJiByZWcgPD0gVU5XX0FBUkNINjRfVjMxKQorKyAgICByZXR1cm4gJnVjLT51Y19tY29udGV4dC5yZWdzW3JlZ107CisrICBlbHNlCisrICAgIHJldHVybiBOVUxMOworK30KKysKKysjIGlmZGVmIFVOV19MT0NBTF9PTkxZCisrCisrSElEREVOIHZvaWQgKgorK3RkZXBfdWNfYWRkciAodWNvbnRleHRfdCAqdWMsIGludCByZWcpCisreworKyAgcmV0dXJuIHVjX2FkZHIgKHVjLCByZWcpOworK30KKysKKysjIGVuZGlmIC8qIFVOV19MT0NBTF9PTkxZICovCisrCisrSElEREVOIHVud19keW5faW5mb19saXN0X3QgX1VfZHluX2luZm9fbGlzdDsKKysKKysvKiBYWFggZml4IG1lOiB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIGxvY2F0ZSB0aGUgZHluLWluZm8gbGlzdAorKyAgICAgICBieSBhIHJlbW90ZSB1bndpbmRlci4gIE9uIGlhNjQsIHRoaXMgaXMgZG9uZSB2aWEgYSBzcGVjaWFsCisrICAgICAgIHVud2luZC10YWJsZSBlbnRyeS4gIFBlcmhhcHMgc29tZXRoaW5nIHNpbWlsYXIgY2FuIGJlIGRvbmUgd2l0aAorKyAgICAgICBEV0FSRjIgdW53aW5kIGluZm8uICAqLworKworK3N0YXRpYyB2b2lkCisrcHV0X3Vud2luZF9pbmZvICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfcHJvY19pbmZvX3QgKnByb2NfaW5mbywgdm9pZCAqYXJnKQorK3sKKysgIC8qIGl0J3MgYSBuby1vcCAqLworK30KKysKKytzdGF0aWMgaW50CisrZ2V0X2R5bl9pbmZvX2xpc3RfYWRkciAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X3dvcmRfdCAqZHluX2luZm9fbGlzdF9hZGRyLAorKwkJCXZvaWQgKmFyZykKKyt7CisrICAqZHluX2luZm9fbGlzdF9hZGRyID0gKHVud193b3JkX3QpICZfVV9keW5faW5mb19saXN0OworKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQKKythY2Nlc3NfbWVtICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfd29yZF90IGFkZHIsIHVud193b3JkX3QgKnZhbCwgaW50IHdyaXRlLAorKwkgICAgdm9pZCAqYXJnKQorK3sKKysgIGlmICh3cml0ZSkKKysgICAgeworKyAgICAgIERlYnVnICgxNiwgIm1lbVslbHhdIDwtICVseFxuIiwgYWRkciwgKnZhbCk7CisrICAgICAgKih1bndfd29yZF90ICopIGFkZHIgPSAqdmFsOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAqdmFsID0gKih1bndfd29yZF90ICopIGFkZHI7CisrICAgICAgRGVidWcgKDE2LCAibWVtWyVseF0gLT4gJWx4XG4iLCBhZGRyLCAqdmFsKTsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQKKythY2Nlc3NfcmVnICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfcmVnbnVtX3QgcmVnLCB1bndfd29yZF90ICp2YWwsIGludCB3cml0ZSwKKysJICAgIHZvaWQgKmFyZykKKyt7CisrICB1bndfd29yZF90ICphZGRyOworKyAgdWNvbnRleHRfdCAqdWMgPSBhcmc7CisrCisrICBpZiAodW53X2lzX2ZwcmVnIChyZWcpKQorKyAgICBnb3RvIGJhZHJlZzsKKysKKysgIGlmICghKGFkZHIgPSB1Y19hZGRyICh1YywgcmVnKSkpCisrICAgIGdvdG8gYmFkcmVnOworKworKyAgaWYgKHdyaXRlKQorKyAgICB7CisrICAgICAgKih1bndfd29yZF90ICopIGFkZHIgPSAqdmFsOworKyAgICAgIERlYnVnICgxMiwgIiVzIDwtICVseFxuIiwgdW53X3JlZ25hbWUgKHJlZyksICp2YWwpOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAqdmFsID0gKih1bndfd29yZF90ICopIGFkZHI7CisrICAgICAgRGVidWcgKDEyLCAiJXMgLT4gJWx4XG4iLCB1bndfcmVnbmFtZSAocmVnKSwgKnZhbCk7CisrICAgIH0KKysgIHJldHVybiAwOworKworKyBiYWRyZWc6CisrICBEZWJ1ZyAoMSwgImJhZCByZWdpc3RlciBudW1iZXIgJXVcbiIsIHJlZyk7CisrICByZXR1cm4gLVVOV19FQkFEUkVHOworK30KKysKKytzdGF0aWMgaW50CisrYWNjZXNzX2ZwcmVnICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfcmVnbnVtX3QgcmVnLCB1bndfZnByZWdfdCAqdmFsLAorKwkgICAgICBpbnQgd3JpdGUsIHZvaWQgKmFyZykKKyt7CisrICB1Y29udGV4dF90ICp1YyA9IGFyZzsKKysgIHVud19mcHJlZ190ICphZGRyOworKworKyAgaWYgKCF1bndfaXNfZnByZWcgKHJlZykpCisrICAgIGdvdG8gYmFkcmVnOworKworKyAgaWYgKCEoYWRkciA9IHVjX2FkZHIgKHVjLCByZWcpKSkKKysgICAgZ290byBiYWRyZWc7CisrCisrICBpZiAod3JpdGUpCisrICAgIHsKKysgICAgICBEZWJ1ZyAoMTIsICIlcyA8LSAlMDhseC4lMDhseC4lMDhseFxuIiwgdW53X3JlZ25hbWUgKHJlZyksCisrCSAgICAgKChsb25nICopdmFsKVswXSwgKChsb25nICopdmFsKVsxXSwgKChsb25nICopdmFsKVsyXSk7CisrICAgICAgKih1bndfZnByZWdfdCAqKSBhZGRyID0gKnZhbDsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgKnZhbCA9ICoodW53X2ZwcmVnX3QgKikgYWRkcjsKKysgICAgICBEZWJ1ZyAoMTIsICIlcyAtPiAlMDhseC4lMDhseC4lMDhseFxuIiwgdW53X3JlZ25hbWUgKHJlZyksCisrCSAgICAgKChsb25nICopdmFsKVswXSwgKChsb25nICopdmFsKVsxXSwgKChsb25nICopdmFsKVsyXSk7CisrICAgIH0KKysgIHJldHVybiAwOworKworKyBiYWRyZWc6CisrICBEZWJ1ZyAoMSwgImJhZCByZWdpc3RlciBudW1iZXIgJXVcbiIsIHJlZyk7CisrICAvKiBhdHRlbXB0IHRvIGFjY2VzcyBhIG5vbi1wcmVzZXJ2ZWQgcmVnaXN0ZXIgKi8KKysgIHJldHVybiAtVU5XX0VCQURSRUc7CisrfQorKworK3N0YXRpYyBpbnQKKytnZXRfc3RhdGljX3Byb2NfbmFtZSAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X3dvcmRfdCBpcCwKKysJCSAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIHVud193b3JkX3QgKm9mZnAsCisrCQkgICAgICB2b2lkICphcmcpCisreworKyAgcmV0dXJuIF9VZWxmNjRfZ2V0X3Byb2NfbmFtZSAoYXMsIGdldHBpZCAoKSwgaXAsIGJ1ZiwgYnVmX2xlbiwgb2ZmcCk7CisrfQorKworK0hJRERFTiB2b2lkCisrYWFyY2g2NF9sb2NhbF9hZGRyX3NwYWNlX2luaXQgKHZvaWQpCisreworKyAgbWVtc2V0ICgmbG9jYWxfYWRkcl9zcGFjZSwgMCwgc2l6ZW9mIChsb2NhbF9hZGRyX3NwYWNlKSk7CisrICBsb2NhbF9hZGRyX3NwYWNlLmNhY2hpbmdfcG9saWN5ID0gVU5XX0NBQ0hFX0dMT0JBTDsKKysgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLmZpbmRfcHJvY19pbmZvID0gZHdhcmZfZmluZF9wcm9jX2luZm87CisrICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5wdXRfdW53aW5kX2luZm8gPSBwdXRfdW53aW5kX2luZm87CisrICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5nZXRfZHluX2luZm9fbGlzdF9hZGRyID0gZ2V0X2R5bl9pbmZvX2xpc3RfYWRkcjsKKysgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLmFjY2Vzc19tZW0gPSBhY2Nlc3NfbWVtOworKyAgbG9jYWxfYWRkcl9zcGFjZS5hY2MuYWNjZXNzX3JlZyA9IGFjY2Vzc19yZWc7CisrICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5hY2Nlc3NfZnByZWcgPSBhY2Nlc3NfZnByZWc7CisrICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5yZXN1bWUgPSBhYXJjaDY0X2xvY2FsX3Jlc3VtZTsKKysgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLmdldF9wcm9jX25hbWUgPSBnZXRfc3RhdGljX3Byb2NfbmFtZTsKKysgIHVud19mbHVzaF9jYWNoZSAoJmxvY2FsX2FkZHJfc3BhY2UsIDAsIDApOworK30KKysKKysjZW5kaWYgLyogIVVOV19SRU1PVEVfT05MWSAqLworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR2luaXRfbG9jYWwuYworQEAgLTAsMCArMSw1NSBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKyNpbmNsdWRlICJpbml0LmgiCisrCisrI2lmZGVmIFVOV19SRU1PVEVfT05MWQorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfaW5pdF9sb2NhbCAodW53X2N1cnNvcl90ICpjdXJzb3IsIHVud19jb250ZXh0X3QgKnVjKQorK3sKKysgIHJldHVybiAtVU5XX0VJTlZBTDsKKyt9CisrCisrI2Vsc2UgLyogIVVOV19SRU1PVEVfT05MWSAqLworKworK1BST1RFQ1RFRCBpbnQKKyt1bndfaW5pdF9sb2NhbCAodW53X2N1cnNvcl90ICpjdXJzb3IsIHVud19jb250ZXh0X3QgKnVjKQorK3sKKysgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7CisrCisrICBpZiAoIXRkZXBfaW5pdF9kb25lKQorKyAgICB0ZGVwX2luaXQgKCk7CisrCisrICBEZWJ1ZyAoMSwgIihjdXJzb3I9JXApXG4iLCBjKTsKKysKKysgIGMtPmR3YXJmLmFzID0gdW53X2xvY2FsX2FkZHJfc3BhY2U7CisrICBjLT5kd2FyZi5hc19hcmcgPSB1YzsKKysKKysgIHJldHVybiBjb21tb25faW5pdCAoYywgMSk7CisrfQorKworKyNlbmRpZiAvKiAhVU5XX1JFTU9URV9PTkxZICovCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9HaW5pdF9yZW1vdGUuYworQEAgLTAsMCArMSw0NSBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAiaW5pdC5oIgorKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfaW5pdF9yZW1vdGUgKHVud19jdXJzb3JfdCAqY3Vyc29yLCB1bndfYWRkcl9zcGFjZV90IGFzLCB2b2lkICphc19hcmcpCisreworKyNpZmRlZiBVTldfTE9DQUxfT05MWQorKyAgcmV0dXJuIC1VTldfRUlOVkFMOworKyNlbHNlIC8qICFVTldfTE9DQUxfT05MWSAqLworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysKKysgIGlmICghdGRlcF9pbml0X2RvbmUpCisrICAgIHRkZXBfaW5pdCAoKTsKKysKKysgIERlYnVnICgxLCAiKGN1cnNvcj0lcClcbiIsIGMpOworKworKyAgYy0+ZHdhcmYuYXMgPSBhczsKKysgIGMtPmR3YXJmLmFzX2FyZyA9IGFzX2FyZzsKKysgIHJldHVybiBjb21tb25faW5pdCAoYywgMCk7CisrI2VuZGlmIC8qICFVTldfTE9DQUxfT05MWSAqLworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dpc19zaWduYWxfZnJhbWUuYworQEAgLTAsMCArMSw2NCBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKysvKiBUaGUgcmVzdG9yZXIgc3R1YiB3aWxsIGFsd2F5cyBoYXZlIHRoZSBmb3JtOgorKworKyAgIGQyODAxMTY4ICAgICAgICBtb3Z6ICAgIHg4LCAjMHg4YgorKyAgIGQ0MDAwMDAxICAgICAgICBzdmMgICAgICMweDAKKysqLworKworK1BST1RFQ1RFRCBpbnQKKyt1bndfaXNfc2lnbmFsX2ZyYW1lICh1bndfY3Vyc29yX3QgKmN1cnNvcikKKyt7CisrI2lmZGVmIF9fbGludXhfXworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysgIHVud193b3JkX3QgdzAsIGlwOworKyAgdW53X2FkZHJfc3BhY2VfdCBhczsKKysgIHVud19hY2Nlc3NvcnNfdCAqYTsKKysgIHZvaWQgKmFyZzsKKysgIGludCByZXQ7CisrCisrICBhcyA9IGMtPmR3YXJmLmFzOworKyAgYSA9IHVud19nZXRfYWNjZXNzb3JzIChhcyk7CisrICBhcmcgPSBjLT5kd2FyZi5hc19hcmc7CisrCisrICBpcCA9IGMtPmR3YXJmLmlwOworKworKyAgcmV0ID0gKCphLT5hY2Nlc3NfbWVtKSAoYXMsIGlwLCAmdzAsIDAsIGFyZyk7CisrICBpZiAocmV0IDwgMCkKKysgICAgcmV0dXJuIHJldDsKKysKKysgIC8qIEZJWE1FOiBkaXN0aW5ndWlzaCAzMmJpdCBpbnNuIHZzIDY0Yml0IHJlZ2lzdGVycy4gICovCisrICBpZiAodzAgIT0gMHhkNDAwMDAwMWQyODAxMTY4KQorKyAgICByZXR1cm4gMDsKKysKKysgIHJldHVybiAxOworKworKyNlbHNlCisrICByZXR1cm4gLVVOV19FTk9JTkZPOworKyNlbmRpZgorK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dyZWdzLmMKK0BAIC0wLDAgKzEsMTEzIEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKytISURERU4gaW50CisrdGRlcF9hY2Nlc3NfcmVnIChzdHJ1Y3QgY3Vyc29yICpjLCB1bndfcmVnbnVtX3QgcmVnLCB1bndfd29yZF90ICp2YWxwLAorKwkJIGludCB3cml0ZSkKKyt7CisrICBkd2FyZl9sb2NfdCBsb2MgPSBEV0FSRl9OVUxMX0xPQzsKKysgIHVuc2lnbmVkIGludCBtYXNrOworKworKyAgc3dpdGNoIChyZWcpCisrICAgIHsKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMzoKKysgICAgICBtYXNrID0gMSA8PCByZWc7CisrICAgICAgaWYgKHdyaXRlKQorKyAgICAgICAgeworKyAgICAgICAgICBjLT5kd2FyZi5laF9hcmdzW3JlZ10gPSAqdmFscDsKKysgICAgICAgICAgYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayB8PSBtYXNrOworKyAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgICBlbHNlIGlmICgoYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayAmIG1hc2spICE9IDApCisrICAgICAgICB7CisrICAgICAgICAgICp2YWxwID0gYy0+ZHdhcmYuZWhfYXJnc1tyZWddOworKyAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICBsb2MgPSBjLT5kd2FyZi5sb2NbcmVnXTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YODoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YOToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTA6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDExOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTM6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE0OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTY6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE3OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxODoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTk6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDIwOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjI6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDIzOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjU6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI2OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjg6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI5OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gzMDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9QQzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9QU1RBVEU6CisrICAgICAgbG9jID0gYy0+ZHdhcmYubG9jW3JlZ107CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgVU5XX0FBUkNINjRfU1A6CisrICAgICAgaWYgKHdyaXRlKQorKyAgICAgICAgcmV0dXJuIC1VTldfRVJFQURPTkxZUkVHOworKyAgICAgICp2YWxwID0gYy0+ZHdhcmYuY2ZhOworKyAgICAgIHJldHVybiAwOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIERlYnVnICgxLCAiYmFkIHJlZ2lzdGVyIG51bWJlciAldVxuIiwgcmVnKTsKKysgICAgICByZXR1cm4gLVVOV19FQkFEUkVHOworKyAgICB9CisrCisrICBpZiAod3JpdGUpCisrICAgIHJldHVybiBkd2FyZl9wdXQgKCZjLT5kd2FyZiwgbG9jLCAqdmFscCk7CisrICBlbHNlCisrICAgIHJldHVybiBkd2FyZl9nZXQgKCZjLT5kd2FyZiwgbG9jLCB2YWxwKTsKKyt9CisrCisrSElEREVOIGludAorK3RkZXBfYWNjZXNzX2ZwcmVnIChzdHJ1Y3QgY3Vyc29yICpjLCB1bndfcmVnbnVtX3QgcmVnLCB1bndfZnByZWdfdCAqdmFscCwKKysJCSAgIGludCB3cml0ZSkKKyt7CisrICBEZWJ1ZyAoMSwgImJhZCByZWdpc3RlciBudW1iZXIgJXVcbiIsIHJlZyk7CisrICByZXR1cm4gLVVOV19FQkFEUkVHOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dyZXN1bWUuYworQEAgLTAsMCArMSwxNzcgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIExpbmFybyBMaW1pdGVkCisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrI2luY2x1ZGUgIm9mZnNldHMuaCIKKysKKysjaWZuZGVmIFVOV19SRU1PVEVfT05MWQorKworK0hJRERFTiBpbmxpbmUgaW50CisrYWFyY2g2NF9sb2NhbF9yZXN1bWUgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud19jdXJzb3JfdCAqY3Vyc29yLCB2b2lkICphcmcpCisreworKyNpZmRlZiBfX2xpbnV4X18KKysgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7CisrICB1bndfdGRlcF9jb250ZXh0X3QgKnVjID0gYy0+ZHdhcmYuYXNfYXJnOworKworKyAgaWYgKGMtPnNpZ2NvbnRleHRfZm9ybWF0ID09IEFBUkNINjRfU0NGX05PTkUpCisrICAgIHsKKysgICAgICAvKiBTaW5jZSB0aGVyZSBhcmUgbm8gc2lnbmFscyBpbnZvbHZlZCBoZXJlIHdlIHJlc3RvcmUgdGhlIG5vbiBzY3JhdGNoCisrCSByZWdpc3RlcnMgb25seS4gICovCisrICAgICAgdW5zaWduZWQgbG9uZyByZWdzWzExXTsKKysgICAgICByZWdzWzBdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTldOworKyAgICAgIHJlZ3NbMV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syMF07CisrICAgICAgcmVnc1syXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIxXTsKKysgICAgICByZWdzWzNdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjJdOworKyAgICAgIHJlZ3NbNF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syM107CisrICAgICAgcmVnc1s1XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI0XTsKKysgICAgICByZWdzWzZdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjVdOworKyAgICAgIHJlZ3NbN10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syNl07CisrICAgICAgcmVnc1s4XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI3XTsKKysgICAgICByZWdzWzldID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjhdOworKyAgICAgIHJlZ3NbMTBdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMzBdOyAvKiBMUiAqLworKyAgICAgIHVuc2lnbmVkIGxvbmcgc3AgPSB1Yy0+dWNfbWNvbnRleHQuc3A7CisrCisrICAgICAgc3RydWN0IHJlZ3Nfb3ZlcmxheSB7CisrICAgICAgICBjaGFyIHhbc2l6ZW9mKHJlZ3MpXTsKKysgICAgICB9OworKworKyAgICAgIGFzbSB2b2xhdGlsZSAoCisrICAgICAgICAibGRwIHgxOSwgeDIwLCBbJTBdXG4iCisrICAgICAgICAibGRwIHgyMSwgeDIyLCBbJTAsMTZdXG4iCisrICAgICAgICAibGRwIHgyMywgeDI0LCBbJTAsMzJdXG4iCisrICAgICAgICAibGRwIHgyNSwgeDI2LCBbJTAsNDhdXG4iCisrICAgICAgICAibGRwIHgyNywgeDI4LCBbJTAsNjRdXG4iCisrICAgICAgICAibGRyIHgzMCwgWyUwLDgwXVxuIgorKyAgICAgICAgIm1vdiBzcCwgJTFcbiIKKysgICAgICAgICJyZXQgXG4iCisrICAgICAgICA6CisrICAgICAgICA6ICJyIiAocmVncyksCisrICAgICAgICAgICJyIiAoc3ApLAorKyAgICAgICAgICAibSIgKCooc3RydWN0IHJlZ3Nfb3ZlcmxheSAqKXJlZ3MpCisrICAgICAgKTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgc3RydWN0IHNpZ2NvbnRleHQgKnNjID0gKHN0cnVjdCBzaWdjb250ZXh0ICopIGMtPnNpZ2NvbnRleHRfYWRkcjsKKysKKysgICAgICBpZiAoYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayAmIDB4MSkgc2MtPnJlZ3NbMF0gPSBjLT5kd2FyZi5laF9hcmdzWzBdOworKyAgICAgIGlmIChjLT5kd2FyZi5laF92YWxpZF9tYXNrICYgMHgyKSBzYy0+cmVnc1sxXSA9IGMtPmR3YXJmLmVoX2FyZ3NbMV07CisrICAgICAgaWYgKGMtPmR3YXJmLmVoX3ZhbGlkX21hc2sgJiAweDQpIHNjLT5yZWdzWzJdID0gYy0+ZHdhcmYuZWhfYXJnc1syXTsKKysgICAgICBpZiAoYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayAmIDB4OCkgc2MtPnJlZ3NbM10gPSBjLT5kd2FyZi5laF9hcmdzWzNdOworKworKyAgICAgIHNjLT5yZWdzWzRdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbNF07CisrICAgICAgc2MtPnJlZ3NbNV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1s1XTsKKysgICAgICBzYy0+cmVnc1s2XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzZdOworKyAgICAgIHNjLT5yZWdzWzddID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbN107CisrICAgICAgc2MtPnJlZ3NbOF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1s4XTsKKysgICAgICBzYy0+cmVnc1s5XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzldOworKyAgICAgIHNjLT5yZWdzWzEwXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzEwXTsKKysgICAgICBzYy0+cmVnc1sxMV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxMV07CisrICAgICAgc2MtPnJlZ3NbMTJdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTJdOworKyAgICAgIHNjLT5yZWdzWzEzXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzEzXTsKKysgICAgICBzYy0+cmVnc1sxNF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxNF07CisrICAgICAgc2MtPnJlZ3NbMTVdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTVdOworKyAgICAgIHNjLT5yZWdzWzE2XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzE2XTsKKysgICAgICBzYy0+cmVnc1sxN10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxN107CisrICAgICAgc2MtPnJlZ3NbMThdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMThdOworKyAgICAgIHNjLT5yZWdzWzE5XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzE5XTsKKysgICAgICBzYy0+cmVnc1syMF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syMF07CisrICAgICAgc2MtPnJlZ3NbMjFdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjFdOworKyAgICAgIHNjLT5yZWdzWzIyXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIyXTsKKysgICAgICBzYy0+cmVnc1syM10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syM107CisrICAgICAgc2MtPnJlZ3NbMjRdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjRdOworKyAgICAgIHNjLT5yZWdzWzI1XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI1XTsKKysgICAgICBzYy0+cmVnc1syNl0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syNl07CisrICAgICAgc2MtPnJlZ3NbMjddID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjddOworKyAgICAgIHNjLT5yZWdzWzI4XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI4XTsKKysgICAgICBzYy0+cmVnc1syOV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syOV07CisrICAgICAgc2MtPnJlZ3NbMzBdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMzBdOworKyAgICAgIHNjLT5zcCA9IHVjLT51Y19tY29udGV4dC5zcDsKKysgICAgICBzYy0+cGMgPSB1Yy0+dWNfbWNvbnRleHQucGM7CisrICAgICAgc2MtPnBzdGF0ZSA9IHVjLT51Y19tY29udGV4dC5wc3RhdGU7CisrCisrICAgICAgYXNtIHZvbGF0aWxlICgKKysgICAgICAgICJtb3Ygc3AsICUwXG4iCisrICAgICAgICAicmV0ICUxXG4iCisrICAgICAgICA6IDogInIiIChjLT5zaWdjb250ZXh0X3NwKSwgInIiIChjLT5zaWdjb250ZXh0X3BjKQorKyAgICAgICk7CisrICAgfQorKyAgdW5yZWFjaGFibGUoKTsKKysjZWxzZQorKyAgcHJpbnRmICgiJXM6IGltcGxlbWVudCBtZVxuIiwgX19GVU5DVElPTl9fKTsKKysjZW5kaWYKKysgIHJldHVybiAtVU5XX0VJTlZBTDsKKyt9CisrCisrI2VuZGlmIC8qICFVTldfUkVNT1RFX09OTFkgKi8KKysKKytzdGF0aWMgaW5saW5lIHZvaWQKKytlc3RhYmxpc2hfbWFjaGluZV9zdGF0ZSAoc3RydWN0IGN1cnNvciAqYykKKyt7CisrICB1bndfYWRkcl9zcGFjZV90IGFzID0gYy0+ZHdhcmYuYXM7CisrICB2b2lkICphcmcgPSBjLT5kd2FyZi5hc19hcmc7CisrICB1bndfZnByZWdfdCBmcHZhbDsKKysgIHVud193b3JkX3QgdmFsOworKyAgaW50IHJlZzsKKysKKysgIERlYnVnICg4LCAiY29weWluZyBvdXQgY3Vyc29yIHN0YXRlXG4iKTsKKysKKysgIGZvciAocmVnID0gMDsgcmVnIDw9IFVOV19BQVJDSDY0X1BTVEFURTsgKytyZWcpCisrICAgIHsKKysgICAgICBEZWJ1ZyAoMTYsICJjb3B5aW5nICVzICVkXG4iLCB1bndfcmVnbmFtZSAocmVnKSwgcmVnKTsKKysgICAgICBpZiAodW53X2lzX2ZwcmVnIChyZWcpKQorKwl7CisrCSAgaWYgKHRkZXBfYWNjZXNzX2ZwcmVnIChjLCByZWcsICZmcHZhbCwgMCkgPj0gMCkKKysJICAgIGFzLT5hY2MuYWNjZXNzX2ZwcmVnIChhcywgcmVnLCAmZnB2YWwsIDEsIGFyZyk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBpZiAodGRlcF9hY2Nlc3NfcmVnIChjLCByZWcsICZ2YWwsIDApID49IDApCisrCSAgICBhcy0+YWNjLmFjY2Vzc19yZWcgKGFzLCByZWcsICZ2YWwsIDEsIGFyZyk7CisrCX0KKysgICAgfQorK30KKysKKytQUk9URUNURUQgaW50CisrdW53X3Jlc3VtZSAodW53X2N1cnNvcl90ICpjdXJzb3IpCisreworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysKKysgIERlYnVnICgxLCAiKGN1cnNvcj0lcClcbiIsIGMpOworKworKyAgaWYgKCFjLT5kd2FyZi5pcCkKKysgICAgeworKyAgICAgIC8qIFRoaXMgY2FuIGhhcHBlbiBlYXNpbHkgd2hlbiB0aGUgZnJhbWUtY2hhaW4gZ2V0cyB0cnVuY2F0ZWQKKysJIGR1ZSB0byBiYWQgb3IgbWlzc2luZyB1bndpbmQtaW5mby4gICovCisrICAgICAgRGVidWcgKDEsICJyZWZ1c2luZyB0byByZXN1bWUgZXhlY3V0aW9uIGF0IGFkZHJlc3MgMFxuIik7CisrICAgICAgcmV0dXJuIC1VTldfRUlOVkFMOworKyAgICB9CisrCisrICBlc3RhYmxpc2hfbWFjaGluZV9zdGF0ZSAoYyk7CisrCisrICByZXR1cm4gKCpjLT5kd2FyZi5hcy0+YWNjLnJlc3VtZSkgKGMtPmR3YXJmLmFzLCAodW53X2N1cnNvcl90ICopIGMsCisrCQkJCSAgICAgYy0+ZHdhcmYuYXNfYXJnKTsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9Hc3RlcC5jCitAQCAtMCwwICsxLDEyOSBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgTGluYXJvIExpbWl0ZWQKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysjaW5jbHVkZSAib2Zmc2V0cy5oIgorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfaGFuZGxlX3NpZ25hbF9mcmFtZSAodW53X2N1cnNvcl90ICpjdXJzb3IpCisreworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysgIGludCByZXQ7CisrICB1bndfd29yZF90IHNjX2FkZHIsIHNwLCBzcF9hZGRyID0gYy0+ZHdhcmYuY2ZhOworKyAgc3RydWN0IGR3YXJmX2xvYyBzcF9sb2MgPSBEV0FSRl9MT0MgKHNwX2FkZHIsIDApOworKworKyAgaWYgKChyZXQgPSBkd2FyZl9nZXQgKCZjLT5kd2FyZiwgc3BfbG9jLCAmc3ApKSA8IDApCisrICAgIHJldHVybiAtVU5XX0VVTlNQRUM7CisrCisrICByZXQgPSB1bndfaXNfc2lnbmFsX2ZyYW1lIChjdXJzb3IpOworKyAgRGVidWcoMSwgInVud19pc19zaWduYWxfZnJhbWUoKT0lZFxuIiwgcmV0KTsKKysKKysgIC8qIFNhdmUgdGhlIFNQIGFuZCBQQyB0byBiZSBhYmxlIHRvIHJldHVybiBleGVjdXRpb24gYXQgdGhpcyBwb2ludAorKyAgICAgbGF0ZXIgaW4gdGltZSAodW53X3Jlc3VtZSkuICAqLworKyAgYy0+c2lnY29udGV4dF9zcCA9IGMtPmR3YXJmLmNmYTsKKysgIGMtPnNpZ2NvbnRleHRfcGMgPSBjLT5kd2FyZi5pcDsKKysKKysgIGlmIChyZXQpCisrICAgIHsKKysgICAgICBjLT5zaWdjb250ZXh0X2Zvcm1hdCA9IEFBUkNINjRfU0NGX0xJTlVYX1JUX1NJR0ZSQU1FOworKyAgICAgIHNjX2FkZHIgPSBzcF9hZGRyICsgc2l6ZW9mIChzaWdpbmZvX3QpICsgTElOVVhfVUNfTUNPTlRFWFRfT0ZGOworKyAgICB9CisrICBlbHNlCisrICAgIHJldHVybiAtVU5XX0VVTlNQRUM7CisrCisrICBjLT5zaWdjb250ZXh0X2FkZHIgPSBzY19hZGRyOworKworKyAgLyogVXBkYXRlIHRoZSBkd2FyZiBjdXJzb3IuCisrICAgICBTZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSByZWdpc3RlcnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYWRkcmVzc2VzIG9mIHRoZQorKyAgICAgdWNfbWNvbnRleHQgLyBzaWdjb250ZXh0IHN0cnVjdHVyZSBjb250ZW50cy4gICovCisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDBdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gwX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDFdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDJdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDNdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gzX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDRdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g0X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDVdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g1X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDZdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g2X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDddICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g3X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDhdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g4X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDldICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g5X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEwXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxMF9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxMV0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTFfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTJdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDEyX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEzXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxM19PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxNF0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTRfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTVdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDE1X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE2XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxNl9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxN10gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTdfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMThdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDE4X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE5XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxOV9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyMF0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjBfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjFdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDIxX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIyXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyMl9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyM10gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjNfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjRdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDI0X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI1XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyNV9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyNl0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjZfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjddID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDI3X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI4XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyOF9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyOV0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjlfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMzBdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDMwX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfU1BdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1NQX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfUENdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1BDX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfUFNUQVRFXSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19QU1RBVEVfT0ZGLCAwKTsKKysKKysgIC8qIFNldCBTUC9DRkEgYW5kIFBDL0lQLiAgKi8KKysgIGR3YXJmX2dldCAoJmMtPmR3YXJmLCBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfU1BdLCAmYy0+ZHdhcmYuY2ZhKTsKKysgIGR3YXJmX2dldCAoJmMtPmR3YXJmLCBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfUENdLCAmYy0+ZHdhcmYuaXApOworKworKyAgYy0+ZHdhcmYucGlfdmFsaWQgPSAwOworKworKyAgcmV0dXJuIDE7CisrfQorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfc3RlcCAodW53X2N1cnNvcl90ICpjdXJzb3IpCisreworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysgIGludCByZXQ7CisrCisrICBEZWJ1ZyAoMSwgIihjdXJzb3I9JXAsIGlwPTB4JTAxNmx4LCBjZmE9MHglMDE2bHgpKVxuIiwKKysJIGMsIGMtPmR3YXJmLmlwLCBjLT5kd2FyZi5jZmEpOworKworKyAgLyogQ2hlY2sgaWYgdGhpcyBpcyBhIHNpZ25hbCBmcmFtZS4gKi8KKysgIGlmICh1bndfaXNfc2lnbmFsX2ZyYW1lIChjdXJzb3IpKQorKyAgICByZXR1cm4gdW53X2hhbmRsZV9zaWduYWxfZnJhbWUgKGN1cnNvcik7CisrCisrICByZXQgPSBkd2FyZl9zdGVwICgmYy0+ZHdhcmYpOworKyAgRGVidWcoMSwgImR3YXJmX3N0ZXAoKT0lZFxuIiwgcmV0KTsKKysKKysgIGlmICh1bmxpa2VseSAocmV0ID09IC1VTldfRVNUT1BVTldJTkQpKQorKyAgICByZXR1cm4gcmV0OworKworKyAgaWYgKHVubGlrZWx5IChyZXQgPCAwKSkKKysgICAgcmV0dXJuIDA7CisrCisrICByZXR1cm4gKGMtPmR3YXJmLmlwID09IDApID8gMCA6IDE7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTGNyZWF0ZV9hZGRyX3NwYWNlLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2NyZWF0ZV9hZGRyX3NwYWNlLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9MZ2V0X3Byb2NfaW5mby5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdnZXRfcHJvY19pbmZvLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9MZ2V0X3NhdmVfbG9jLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2dldF9zYXZlX2xvYy5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTGdsb2JhbC5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdnbG9iYWwuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xpbml0LmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2luaXQuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xpbml0X2xvY2FsLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2luaXRfbG9jYWwuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xpbml0X3JlbW90ZS5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdpbml0X3JlbW90ZS5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTGlzX3NpZ25hbF9mcmFtZS5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdpc19zaWduYWxfZnJhbWUuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xyZWdzLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR3JlZ3MuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xyZXN1bWUuYworQEAgLTAsMCArMSw1IEBACisrI2RlZmluZSBVTldfTE9DQUxfT05MWQorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQorKyNpbmNsdWRlICJHcmVzdW1lLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9Mc3RlcC5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdzdGVwLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9nZW4tb2Zmc2V0cy5jCitAQCAtMCwwICsxLDY4IEBACisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDx1Y29udGV4dC5oPgorKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorKworKyNkZWZpbmUgVUMoTixYKSBcCisrICBwcmludGYgKCIjZGVmaW5lIExJTlVYX1VDXyIgTiAiX09GRlx0MHglWFxuIiwgb2Zmc2V0b2YgKHVjb250ZXh0X3QsIFgpKQorKworKyNkZWZpbmUgU0MoTixYKSBcCisrICBwcmludGYgKCIjZGVmaW5lIExJTlVYX1NDXyIgTiAiX09GRlx0MHglWFxuIiwgb2Zmc2V0b2YgKHN0cnVjdCBzaWdjb250ZXh0LCBYKSkKKysKKytpbnQKKyttYWluICh2b2lkKQorK3sKKysgIHByaW50ZiAoCisrIi8qIExpbnV4LXNwZWNpZmljIGRlZmluaXRpb25zOiAqL1xuXG4iCisrCisrIi8qIERlZmluZSB2YXJpb3VzIHN0cnVjdHVyZSBvZmZzZXRzIHRvIHNpbXBsaWZ5IGNyb3NzLWNvbXBpbGF0aW9uLiAgKi9cblxuIgorKworKyIvKiBPZmZzZXRzIGZvciBBQXJjaDY0IExpbnV4IFwidWNvbnRleHRfdFwiOiAgKi9cblxuIik7CisrCisrICBVQyAoIkZMQUdTIiwgdWNfZmxhZ3MpOworKyAgVUMgKCJMSU5LIiwgdWNfbGluayk7CisrICBVQyAoIlNUQUNLIiwgdWNfc3RhY2spOworKyAgVUMgKCJNQ09OVEVYVCIsIHVjX21jb250ZXh0KTsKKysgIFVDICgiU0lHTUFTSyIsIHVjX3NpZ21hc2spOworKworKyAgcHJpbnRmICgiXG4vKiBPZmZzZXRzIGZvciBBQXJjaDY0IExpbnV4IFwic3RydWN0IHNpZ2NvbnRleHRcIjogICovXG5cbiIpOworKworKyAgU0MgKCJSMCIsICByZWdzWzBdKTsKKysgIFNDICgiUjEiLCAgcmVnc1sxXSk7CisrICBTQyAoIlIyIiwgIHJlZ3NbMl0pOworKyAgU0MgKCJSMyIsICByZWdzWzNdKTsKKysgIFNDICgiUjQiLCAgcmVnc1s0XSk7CisrICBTQyAoIlI1IiwgIHJlZ3NbNV0pOworKyAgU0MgKCJSNiIsICByZWdzWzZdKTsKKysgIFNDICgiUjciLCAgcmVnc1s3XSk7CisrICBTQyAoIlI4IiwgIHJlZ3NbOF0pOworKyAgU0MgKCJSOSIsICByZWdzWzldKTsKKysgIFNDICgiUjEwIiwgcmVnc1sxMF0pOworKyAgU0MgKCJSMTEiLCByZWdzWzExXSk7CisrICBTQyAoIlIxMiIsIHJlZ3NbMTJdKTsKKysgIFNDICgiUjEzIiwgcmVnc1sxM10pOworKyAgU0MgKCJSMTQiLCByZWdzWzE0XSk7CisrICBTQyAoIlIxNSIsIHJlZ3NbMTVdKTsKKysgIFNDICgiUjE2IiwgcmVnc1sxNl0pOworKyAgU0MgKCJSMTciLCByZWdzWzE3XSk7CisrICBTQyAoIlIxOCIsIHJlZ3NbMThdKTsKKysgIFNDICgiUjE5IiwgcmVnc1sxOV0pOworKyAgU0MgKCJSMjAiLCByZWdzWzIwXSk7CisrICBTQyAoIlIyMSIsIHJlZ3NbMjFdKTsKKysgIFNDICgiUjIyIiwgcmVnc1syMl0pOworKyAgU0MgKCJSMjMiLCByZWdzWzIzXSk7CisrICBTQyAoIlIyNCIsIHJlZ3NbMjRdKTsKKysgIFNDICgiUjI1IiwgcmVnc1syNV0pOworKyAgU0MgKCJSMjYiLCByZWdzWzI2XSk7CisrICBTQyAoIlIyNyIsIHJlZ3NbMjddKTsKKysgIFNDICgiUjI4IiwgcmVnc1syOF0pOworKyAgU0MgKCJSMjkiLCByZWdzWzI5XSk7CisrICBTQyAoIlIzMCIsIHJlZ3NbMzBdKTsKKysgIFNDICgiUjMxIiwgcmVnc1szMV0pOworKworKyAgU0MgKCJQQyIsIHBjKTsKKysgIFNDICgiU1AiLCBzcCk7CisrICBTQyAoIkZhdWx0IiwgZmF1bHRfYWRkcmVzcyk7CisrICBTQyAoInN0YXRlIiwgcHN0YXRlKTsKKysgIHJldHVybiAwOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L2luaXQuaAorQEAgLTAsMCArMSwxMjcgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrc3RhdGljIGlubGluZSBpbnQKKytjb21tb25faW5pdCAoc3RydWN0IGN1cnNvciAqYywgdW5zaWduZWQgdXNlX3ByZXZfaW5zdHIpCisreworKyAgaW50IHJldCwgaTsKKysKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMF0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDFdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDEpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YM10gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDRdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDQpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g1XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1g1KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YNl0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YNik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDddICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDcpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g4XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1g4KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YOV0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YOSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEwXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDEwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTFdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTEpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxMl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxMik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEzXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDEzKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTRdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTQpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxNV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxNSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE2XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDE2KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTddID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTcpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxOF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxOCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE5XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDE5KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjBdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyMV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyMSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIyXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDIyKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjNdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjMpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyNF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyNCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI1XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDI1KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjZdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjYpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyN10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyNyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI4XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDI4KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjldID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjkpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gzMF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gzMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfU1BdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfU1ApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1BDXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1BDKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9QU1RBVEVdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTldfQUFSQ0g2NF9QU1RBVEUpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YwXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMV0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjJdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjIpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YzXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YzKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WNF0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WNCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjVdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjUpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1Y2XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1Y2KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WN10gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WNyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjhdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjgpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1Y5XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1Y5KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTBdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxMV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxMSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjEyXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjEyKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTNdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTMpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxNF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxNCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjE1XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjE1KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTZdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTYpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxN10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxNyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjE4XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjE4KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTldID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTkpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyMF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjIxXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjIxKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjJdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjIpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyM10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyMyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjI0XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjI0KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjVdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjUpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyNl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyNik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjI3XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjI3KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjhdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjgpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyOV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyOSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjMwXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjMwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMzFdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMzEpOworKworKyAgZm9yIChpID0gVU5XX0FBUkNINjRfUFNUQVRFICsgMTsgaSA8IFVOV19BQVJDSDY0X1YwOyArK2kpCisrICAgIGMtPmR3YXJmLmxvY1tpXSA9IERXQVJGX05VTExfTE9DOworKworKyAgcmV0ID0gZHdhcmZfZ2V0ICgmYy0+ZHdhcmYsIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9QQ10sICZjLT5kd2FyZi5pcCk7CisrICBpZiAocmV0IDwgMCkKKysgICAgcmV0dXJuIHJldDsKKysKKysgIHJldCA9IGR3YXJmX2dldCAoJmMtPmR3YXJmLCBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfU1BdLCAmYy0+ZHdhcmYuY2ZhKTsKKysgIGlmIChyZXQgPCAwKQorKyAgICByZXR1cm4gcmV0OworKworKyAgYy0+c2lnY29udGV4dF9mb3JtYXQgPSBBQVJDSDY0X1NDRl9OT05FOworKyAgYy0+c2lnY29udGV4dF9hZGRyID0gMDsKKysgIGMtPnNpZ2NvbnRleHRfc3AgPSAwOworKyAgYy0+c2lnY29udGV4dF9wYyA9IDA7CisrCisrICBjLT5kd2FyZi5hcmdzX3NpemUgPSAwOworKyAgYy0+ZHdhcmYucmV0X2FkZHJfY29sdW1uID0gMDsKKysgIGMtPmR3YXJmLnN0YXNoX2ZyYW1lcyA9IDA7CisrICBjLT5kd2FyZi51c2VfcHJldl9pbnN0ciA9IHVzZV9wcmV2X2luc3RyOworKyAgYy0+ZHdhcmYucGlfdmFsaWQgPSAwOworKyAgYy0+ZHdhcmYucGlfaXNfZHluYW1pYyA9IDA7CisrICBjLT5kd2FyZi5oaW50ID0gMDsKKysgIGMtPmR3YXJmLnByZXZfcnMgPSAwOworKworKyAgcmV0dXJuIDA7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvaXNfZnByZWcuYworQEAgLTAsMCArMSwzMiBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAibGlidW53aW5kX2kuaCIKKysKKytQUk9URUNURUQgaW50CisrdW53X2lzX2ZwcmVnIChpbnQgcmVnbnVtKQorK3sKKysgIHJldHVybiAocmVnbnVtID49IFVOV19BQVJDSDY0X1YwICYmIHJlZ251bSA8PSBVTldfQUFSQ0g2NF9WMzEpOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L29mZnNldHMuaAorQEAgLTAsMCArMSw0OSBAQAorKy8qIExpbnV4LXNwZWNpZmljIGRlZmluaXRpb25zOiAqLworKworKy8qIERlZmluZSB2YXJpb3VzIHN0cnVjdHVyZSBvZmZzZXRzIHRvIHNpbXBsaWZ5IGNyb3NzLWNvbXBpbGF0aW9uLiAgKi8KKysKKysvKiBPZmZzZXRzIGZvciBBQXJjaDY0IExpbnV4ICJ1Y29udGV4dF90IjogICovCisrCisrI2RlZmluZSBMSU5VWF9VQ19GTEFHU19PRkYJMHgwCisrI2RlZmluZSBMSU5VWF9VQ19MSU5LX09GRgkweDgKKysjZGVmaW5lIExJTlVYX1VDX1NUQUNLX09GRgkweDEwCisrI2RlZmluZSBMSU5VWF9VQ19TSUdNQVNLX09GRgkweDI4CisrI2RlZmluZSBMSU5VWF9VQ19NQ09OVEVYVF9PRkYJMHhiMAorKworKy8qIE9mZnNldHMgZm9yIEFBcmNoNjQgTGludXggInN0cnVjdCBzaWdjb250ZXh0IjogICovCisrCisrI2RlZmluZSBMSU5VWF9TQ19GQVVMVEFERFJFU1NfT0ZGCTB4MDAKKysjZGVmaW5lIExJTlVYX1NDX1gwX09GRgkJMHgwMDgKKysjZGVmaW5lIExJTlVYX1NDX1gxX09GRgkJMHgwMTAKKysjZGVmaW5lIExJTlVYX1NDX1gyX09GRgkJMHgwMTgKKysjZGVmaW5lIExJTlVYX1NDX1gzX09GRgkJMHgwMjAKKysjZGVmaW5lIExJTlVYX1NDX1g0X09GRgkJMHgwMjgKKysjZGVmaW5lIExJTlVYX1NDX1g1X09GRgkJMHgwMzAKKysjZGVmaW5lIExJTlVYX1NDX1g2X09GRgkJMHgwMzgKKysjZGVmaW5lIExJTlVYX1NDX1g3X09GRgkJMHgwNDAKKysjZGVmaW5lIExJTlVYX1NDX1g4X09GRgkJMHgwNDgKKysjZGVmaW5lIExJTlVYX1NDX1g5X09GRgkJMHgwNTAKKysjZGVmaW5lIExJTlVYX1NDX1gxMF9PRkYJMHgwNTgKKysjZGVmaW5lIExJTlVYX1NDX1gxMV9PRkYJMHgwNjAKKysjZGVmaW5lIExJTlVYX1NDX1gxMl9PRkYJMHgwNjgKKysjZGVmaW5lIExJTlVYX1NDX1gxM19PRkYJMHgwNzAKKysjZGVmaW5lIExJTlVYX1NDX1gxNF9PRkYJMHgwNzgKKysjZGVmaW5lIExJTlVYX1NDX1gxNV9PRkYJMHgwODAKKysjZGVmaW5lIExJTlVYX1NDX1gxNl9PRkYJMHgwODgKKysjZGVmaW5lIExJTlVYX1NDX1gxN19PRkYJMHgwOTAKKysjZGVmaW5lIExJTlVYX1NDX1gxOF9PRkYJMHgwOTgKKysjZGVmaW5lIExJTlVYX1NDX1gxOV9PRkYJMHgwYTAKKysjZGVmaW5lIExJTlVYX1NDX1gyMF9PRkYJMHgwYTgKKysjZGVmaW5lIExJTlVYX1NDX1gyMV9PRkYJMHgwYjAKKysjZGVmaW5lIExJTlVYX1NDX1gyMl9PRkYJMHgwYjgKKysjZGVmaW5lIExJTlVYX1NDX1gyM19PRkYJMHgwYzAKKysjZGVmaW5lIExJTlVYX1NDX1gyNF9PRkYJMHgwYzgKKysjZGVmaW5lIExJTlVYX1NDX1gyNV9PRkYJMHgwZDAKKysjZGVmaW5lIExJTlVYX1NDX1gyNl9PRkYJMHgwZDgKKysjZGVmaW5lIExJTlVYX1NDX1gyN19PRkYJMHgwZTAKKysjZGVmaW5lIExJTlVYX1NDX1gyOF9PRkYJMHgwZTgKKysjZGVmaW5lIExJTlVYX1NDX1gyOV9PRkYJMHgwZjAKKysjZGVmaW5lIExJTlVYX1NDX1gzMF9PRkYJMHgwZjgKKysjZGVmaW5lIExJTlVYX1NDX1NQX09GRgkJMHgxMDAKKysjZGVmaW5lIExJTlVYX1NDX1BDX09GRgkJMHgxMDgKKysjZGVmaW5lIExJTlVYX1NDX1BTVEFURV9PRkYJMHgxMTAKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L3JlZ25hbWUuYworQEAgLTAsMCArMSwxMDYgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHJlZ25hbWVbXSA9CisrICB7CisrICAgIFtVTldfQUFSQ0g2NF9YMF0gPSAieDAiLAorKyAgICBbVU5XX0FBUkNINjRfWDFdID0gIngxIiwKKysgICAgW1VOV19BQVJDSDY0X1gyXSA9ICJ4MiIsCisrICAgIFtVTldfQUFSQ0g2NF9YM10gPSAieDMiLAorKyAgICBbVU5XX0FBUkNINjRfWDRdID0gIng0IiwKKysgICAgW1VOV19BQVJDSDY0X1g1XSA9ICJ4NSIsCisrICAgIFtVTldfQUFSQ0g2NF9YNl0gPSAieDYiLAorKyAgICBbVU5XX0FBUkNINjRfWDddID0gIng3IiwKKysgICAgW1VOV19BQVJDSDY0X1g4XSA9ICJ4OCIsCisrICAgIFtVTldfQUFSQ0g2NF9YOV0gPSAieDkiLAorKyAgICBbVU5XX0FBUkNINjRfWDEwXSA9ICJ4MTAiLAorKyAgICBbVU5XX0FBUkNINjRfWDExXSA9ICJ4MTEiLAorKyAgICBbVU5XX0FBUkNINjRfWDEyXSA9ICJ4MTIiLAorKyAgICBbVU5XX0FBUkNINjRfWDEzXSA9ICJ4MTMiLAorKyAgICBbVU5XX0FBUkNINjRfWDE0XSA9ICJ4MTQiLAorKyAgICBbVU5XX0FBUkNINjRfWDE1XSA9ICJ4MTUiLAorKyAgICBbVU5XX0FBUkNINjRfWDE2XSA9ICJpcDAiLAorKyAgICBbVU5XX0FBUkNINjRfWDE3XSA9ICJpcDEiLAorKyAgICBbVU5XX0FBUkNINjRfWDE4XSA9ICJ4MTgiLAorKyAgICBbVU5XX0FBUkNINjRfWDE5XSA9ICJ4MTkiLAorKyAgICBbVU5XX0FBUkNINjRfWDIwXSA9ICJ4MjAiLAorKyAgICBbVU5XX0FBUkNINjRfWDIxXSA9ICJ4MjEiLAorKyAgICBbVU5XX0FBUkNINjRfWDIyXSA9ICJ4MjIiLAorKyAgICBbVU5XX0FBUkNINjRfWDIzXSA9ICJ4MjMiLAorKyAgICBbVU5XX0FBUkNINjRfWDI0XSA9ICJ4MjQiLAorKyAgICBbVU5XX0FBUkNINjRfWDI1XSA9ICJ4MjUiLAorKyAgICBbVU5XX0FBUkNINjRfWDI2XSA9ICJ4MjYiLAorKyAgICBbVU5XX0FBUkNINjRfWDI3XSA9ICJ4MjciLAorKyAgICBbVU5XX0FBUkNINjRfWDI4XSA9ICJ4MjgiLAorKyAgICBbVU5XX0FBUkNINjRfWDI5XSA9ICJmcCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMzBdID0gImxyIiwKKysgICAgW1VOV19BQVJDSDY0X1NQXSA9ICJzcCIsCisrICAgIFtVTldfQUFSQ0g2NF9QQ10gPSAicGMiLAorKyAgICBbVU5XX0FBUkNINjRfVjBdID0gInYwIiwKKysgICAgW1VOV19BQVJDSDY0X1YxXSA9ICJ2MSIsCisrICAgIFtVTldfQUFSQ0g2NF9WMl0gPSAidjIiLAorKyAgICBbVU5XX0FBUkNINjRfVjNdID0gInYzIiwKKysgICAgW1VOV19BQVJDSDY0X1Y0XSA9ICJ2NCIsCisrICAgIFtVTldfQUFSQ0g2NF9WNV0gPSAidjUiLAorKyAgICBbVU5XX0FBUkNINjRfVjZdID0gInY2IiwKKysgICAgW1VOV19BQVJDSDY0X1Y3XSA9ICJ2NyIsCisrICAgIFtVTldfQUFSQ0g2NF9WOF0gPSAidjgiLAorKyAgICBbVU5XX0FBUkNINjRfVjldID0gInY5IiwKKysgICAgW1VOV19BQVJDSDY0X1YxMF0gPSAidjEwIiwKKysgICAgW1VOV19BQVJDSDY0X1YxMV0gPSAidjExIiwKKysgICAgW1VOV19BQVJDSDY0X1YxMl0gPSAidjEyIiwKKysgICAgW1VOV19BQVJDSDY0X1YxM10gPSAidjEzIiwKKysgICAgW1VOV19BQVJDSDY0X1YxNF0gPSAidjE0IiwKKysgICAgW1VOV19BQVJDSDY0X1YxNV0gPSAidjE1IiwKKysgICAgW1VOV19BQVJDSDY0X1YxNl0gPSAidjE2IiwKKysgICAgW1VOV19BQVJDSDY0X1YxN10gPSAidjE3IiwKKysgICAgW1VOV19BQVJDSDY0X1YxOF0gPSAidjE4IiwKKysgICAgW1VOV19BQVJDSDY0X1YxOV0gPSAidjE5IiwKKysgICAgW1VOV19BQVJDSDY0X1YyMF0gPSAidjIwIiwKKysgICAgW1VOV19BQVJDSDY0X1YyMV0gPSAidjIxIiwKKysgICAgW1VOV19BQVJDSDY0X1YyMl0gPSAidjIyIiwKKysgICAgW1VOV19BQVJDSDY0X1YyM10gPSAidjIzIiwKKysgICAgW1VOV19BQVJDSDY0X1YyNF0gPSAidjI0IiwKKysgICAgW1VOV19BQVJDSDY0X1YyNV0gPSAidjI1IiwKKysgICAgW1VOV19BQVJDSDY0X1YyNl0gPSAidjI2IiwKKysgICAgW1VOV19BQVJDSDY0X1YyN10gPSAidjI3IiwKKysgICAgW1VOV19BQVJDSDY0X1YyOF0gPSAidjI4IiwKKysgICAgW1VOV19BQVJDSDY0X1YyOV0gPSAidjI5IiwKKysgICAgW1VOV19BQVJDSDY0X1YzMF0gPSAidjMwIiwKKysgICAgW1VOV19BQVJDSDY0X1YzMV0gPSAidjMxIiwKKysgICAgW1VOV19BQVJDSDY0X0ZQU1JdID0gImZwc3IiLAorKyAgICBbVU5XX0FBUkNINjRfRlBDUl0gPSAiZnBjciIsCisrICB9OworKworK1BST1RFQ1RFRCBjb25zdCBjaGFyICoKKyt1bndfcmVnbmFtZSAodW53X3JlZ251bV90IHJlZykKKyt7CisrICBpZiAocmVnIDwgKHVud19yZWdudW1fdCkgQVJSQVlfU0laRSAocmVnbmFtZSkgJiYgcmVnbmFtZVtyZWddICE9IE5VTEwpCisrICAgIHJldHVybiByZWduYW1lW3JlZ107CisrICBlbHNlCisrICAgIHJldHVybiAiPz8/IjsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9zaWdsb25nam1wLlMKK0BAIC0wLDAgKzEsMTIgQEAKKysJLyogRHVtbXkgaW1wbGVtZW50YXRpb24gZm9yIG5vdy4gICovCisrCisrCS5nbG9iYWwgX1VJX3NpZ2xvbmdqbXBfY29udAorKwkuZ2xvYmFsIF9VSV9sb25nam1wX2NvbnQKKysKKytfVUlfc2lnbG9uZ2ptcF9jb250OgorK19VSV9sb25nam1wX2NvbnQ6CisrCXJldAorKyNpZmRlZiBfX2xpbnV4X18KKysgLyogV2UgZG8gbm90IG5lZWQgZXhlY3V0YWJsZSBzdGFjay4gICovCisrIC5zZWN0aW9uICAubm90ZS5HTlUtc3RhY2ssIiIsJXByb2diaXRzCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC91bndpbmRfaS5oCitAQCAtMCwwICsxLDQzIEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpZm5kZWYgdW53aW5kX2lfaAorKyNkZWZpbmUgdW53aW5kX2lfaAorKworKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysKKysjaW5jbHVkZSA8bGlidW53aW5kLWFhcmNoNjQuaD4KKysKKysjaW5jbHVkZSAibGlidW53aW5kX2kuaCIKKysKKysjZGVmaW5lIGFhcmNoNjRfbG9jawkJCVVOV19PQkoobG9jaykKKysjZGVmaW5lIGFhcmNoNjRfbG9jYWxfcmVzdW1lCQlVTldfT0JKKGxvY2FsX3Jlc3VtZSkKKysjZGVmaW5lIGFhcmNoNjRfbG9jYWxfYWRkcl9zcGFjZV9pbml0CVVOV19PQkoobG9jYWxfYWRkcl9zcGFjZV9pbml0KQorKworK2V4dGVybiB2b2lkIGFhcmNoNjRfbG9jYWxfYWRkcl9zcGFjZV9pbml0ICh2b2lkKTsKKytleHRlcm4gaW50IGFhcmNoNjRfbG9jYWxfcmVzdW1lICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfY3Vyc29yX3QgKmN1cnNvciwKKysJCQkgICAgIHZvaWQgKmFyZyk7CisrCisrI2VuZGlmIC8qIHVud2luZF9pX2ggKi8KKy0tLSBhL3NyYy9jb3JlZHVtcC9fVUNEX2FjY2Vzc19yZWdfbGludXguYworKysrIGIvc3JjL2NvcmVkdW1wL19VQ0RfYWNjZXNzX3JlZ19saW51eC5jCitAQCAtMzksNyArMzksMTAgQEAgX1VDRF9hY2Nlc3NfcmVnICh1bndfYWRkcl9zcGFjZV90IGFzLAorICAgICAgIHJldHVybiAtVU5XX0VJTlZBTDsKKyAgICAgfQorIAorLSNpZiBkZWZpbmVkKFVOV19UQVJHRVRfQVJNKQorKyNpZiBkZWZpbmVkKFVOV19UQVJHRVRfQUFSQ0g2NCkKKysgIGlmIChyZWdudW0gPCAwIHx8IHJlZ251bSA+PSBVTldfQUFSQ0g2NF9GUENSKQorKyAgICBnb3RvIGJhZHJlZzsKKysjZWxpZiBkZWZpbmVkKFVOV19UQVJHRVRfQVJNKQorICAgaWYgKHJlZ251bSA8IDAgfHwgcmVnbnVtID49IDE2KQorICAgICBnb3RvIGJhZHJlZzsKKyAjZWxpZiBkZWZpbmVkKFVOV19UQVJHRVRfU0gpCistLS0gYS9zcmMvcHRyYWNlL19VUFRfcmVnX29mZnNldC5jCisrKysgYi9zcmMvcHRyYWNlL19VUFRfcmVnX29mZnNldC5jCitAQCAtMSw2ICsxLDcgQEAKKyAvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisgICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgSGV3bGV0dC1QYWNrYXJkIENvCisgCUNvbnRyaWJ1dGVkIGJ5IERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKyAKKyBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisgCitAQCAtNTAxLDYgKzUwMiw0MSBAQCBjb25zdCBpbnQgX1VQVF9yZWdfb2Zmc2V0W1VOV19SRUdfTEFTVCArCisgICAgIFtVTldfQVJNX1IxNV0gICAgICA9IDB4M2MsCisgI2VsaWYgZGVmaW5lZChVTldfVEFSR0VUX01JUFMpCisgI2VsaWYgZGVmaW5lZChVTldfVEFSR0VUX1NIKQorKyNlbGlmIGRlZmluZWQoVU5XX1RBUkdFVF9BQVJDSDY0KQorKyAgICBbVU5XX0FBUkNINjRfWDBdICAgICAgID0gMHgwMCwKKysgICAgW1VOV19BQVJDSDY0X1gxXSAgICAgICA9IDB4MDgsCisrICAgIFtVTldfQUFSQ0g2NF9YMl0gICAgICAgPSAweDEwLAorKyAgICBbVU5XX0FBUkNINjRfWDNdICAgICAgID0gMHgxOCwKKysgICAgW1VOV19BQVJDSDY0X1g0XSAgICAgICA9IDB4MjAsCisrICAgIFtVTldfQUFSQ0g2NF9YNV0gICAgICAgPSAweDI4LAorKyAgICBbVU5XX0FBUkNINjRfWDZdICAgICAgID0gMHgzMCwKKysgICAgW1VOV19BQVJDSDY0X1g3XSAgICAgICA9IDB4MzgsCisrICAgIFtVTldfQUFSQ0g2NF9YOF0gICAgICAgPSAweDQwLAorKyAgICBbVU5XX0FBUkNINjRfWDldICAgICAgID0gMHg0OCwKKysgICAgW1VOV19BQVJDSDY0X1gxMF0gICAgICA9IDB4NTAsCisrICAgIFtVTldfQUFSQ0g2NF9YMTFdICAgICAgPSAweDU4LAorKyAgICBbVU5XX0FBUkNINjRfWDEyXSAgICAgID0gMHg2MCwKKysgICAgW1VOV19BQVJDSDY0X1gxM10gICAgICA9IDB4NjgsCisrICAgIFtVTldfQUFSQ0g2NF9YMTRdICAgICAgPSAweDcwLAorKyAgICBbVU5XX0FBUkNINjRfWDE1XSAgICAgID0gMHg3OCwKKysgICAgW1VOV19BQVJDSDY0X1gxNl0gICAgICA9IDB4ODAsCisrICAgIFtVTldfQUFSQ0g2NF9YMTddICAgICAgPSAweDg4LAorKyAgICBbVU5XX0FBUkNINjRfWDE4XSAgICAgID0gMHg5MCwKKysgICAgW1VOV19BQVJDSDY0X1gxOV0gICAgICA9IDB4OTgsCisrICAgIFtVTldfQUFSQ0g2NF9YMjBdICAgICAgPSAweGEwLAorKyAgICBbVU5XX0FBUkNINjRfWDIxXSAgICAgID0gMHhhOCwKKysgICAgW1VOV19BQVJDSDY0X1gyMl0gICAgICA9IDB4YjAsCisrICAgIFtVTldfQUFSQ0g2NF9YMjNdICAgICAgPSAweGI4LAorKyAgICBbVU5XX0FBUkNINjRfWDI0XSAgICAgID0gMHhjMCwKKysgICAgW1VOV19BQVJDSDY0X1gyNV0gICAgICA9IDB4YzgsCisrICAgIFtVTldfQUFSQ0g2NF9YMjZdICAgICAgPSAweGQwLAorKyAgICBbVU5XX0FBUkNINjRfWDI3XSAgICAgID0gMHhkOCwKKysgICAgW1VOV19BQVJDSDY0X1gyOF0gICAgICA9IDB4ZTAsCisrICAgIFtVTldfQUFSQ0g2NF9YMjldICAgICAgPSAweGU4LAorKyAgICBbVU5XX0FBUkNINjRfWDMwXSAgICAgID0gMHhmMCwKKysgICAgW1VOV19BQVJDSDY0X1NQXSAgICAgICA9IDB4ZjgsCisrICAgIFtVTldfQUFSQ0g2NF9QQ10gICAgICAgPSAweDEwMCwKKysgICAgW1VOV19BQVJDSDY0X1BTVEFURV0gICA9IDB4MTA4CisgI2Vsc2UKKyAjIGVycm9yIEZpeCBtZS4KKyAjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvRml4LXRlc3QtY2FzZS1saW5rLWZhaWx1cmUtb24tUG93ZXJQQy1zeXN0ZW1zLXdpdGgtQWx0aXZlYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvRml4LXRlc3QtY2FzZS1saW5rLWZhaWx1cmUtb24tUG93ZXJQQy1zeXN0ZW1zLXdpdGgtQWx0aXZlYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzBmNWMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9GaXgtdGVzdC1jYXNlLWxpbmstZmFpbHVyZS1vbi1Qb3dlclBDLXN5c3RlbXMtd2l0aC1BbHRpdmVjLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0ZpeCB0ZXN0IGNhc2UgbGluayBmYWlsdXJlIG9uIFBvd2VyUEMgc3lzdGVtcyB3aXRoIEFsdGl2ZWMKKworVXBzdHJlYW0tU3RhdHVzOmJhY2twb3J0CisKK09uIHN5c3RlbXMgd2hlcmUgdGhlIHN5c3RlbSBjb21waWxlciBzdXBwb3J0cyBBbHRpdmVjIGJ5IGRlZmF1bHQsCit0aGUgbGlidW53aW5kIE1ha2VmaWxlIHdpbGwgYXR0ZW1wdCB0byBidWlsZCBhbiBleHRyYSB0ZXN0IGNhc2UKK3BwYzY0LXRlc3QtYWx0aXZlYy4gIFVuZm9ydHVuYXRlbHksIHRoZSBsaW5rIHN0ZXAgd2lsbCBmYWlsIHNpbmNlCit0aGUgTWFrZWZpbGUgZG9lcyBub3QgYWN0dWFsbHkgbGluayBhZ2FpbnN0IHRoZSBsaWJ1bndpbmQgbGlicmFyeS4KKworRml4ZWQgYnkgYWRkaW5nIHRoZSBhcHByb3ByaWF0ZSBMREFERCBtYWNyby4KKworU2lnbmVkLW9mZi1ieTogVWxyaWNoIFdlaWdhbmQgPGFkZHJlc3NAaGlkZGVuPgorLS0tCisgdGVzdHMvTWFrZWZpbGUuYW0gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDBlMzA1MzYuLjljNzY2MjggMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0yMDEsMyArMjAxLDQgQEAgTGlhNjRfdGVzdF9yYnNfTERBREQgPSAkKExJQlVOV0lORF9sb2NhbCkKKyBMaWE2NF90ZXN0X3JlYWRvbmx5X0xEQUREID0gJChMSUJVTldJTkRfbG9jYWwpCisgaWE2NF90ZXN0X2R5bjFfTERBREQgPSAkKExJQlVOV0lORCkKKyBpYTY0X3Rlc3Rfc2lnX0xEQUREID0gJChMSUJVTldJTkQpCisrcHBjNjRfdGVzdF9hbHRpdmVjX0xEQUREID0gJChMSUJVTldJTkQpCistLSAKKzEuOC41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvTGluay1saWJ1bndpbmQtdG8tbGliZ2NjX3MtcmF0aGVyLXRoYW4tbGliZ2NjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9MaW5rLWxpYnVud2luZC10by1saWJnY2Nfcy1yYXRoZXItdGhhbi1saWJnY2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1NWM5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvTGluay1saWJ1bndpbmQtdG8tbGliZ2NjX3MtcmF0aGVyLXRoYW4tbGliZ2NjLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gNTA4Y2ExN2E3YmUwMWQxY2M5NjBkOWEwN2QwYWY0NTEzOTQ4ZmI4ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRoaWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5jb20+CitEYXRlOiBGcmksIDI3IEp1biAyMDE0IDA4OjQwOjMzICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIExpbmsgbGlidW53aW5kIHRvIGxpYmdjY19zIHJhdGhlciB0aGFuIGxpYmdjYworCitGb3Igc29tZSBhcmNoaXRlY3R1cmVzLCAtbGdjYyBhbmQgLWxnY2NfcyBhcmUgbm90IGVxdWl2YWxlbnQuIE9uIEFSTSBmb3IKK2V4YW1wbGUsIGxpYmdjY19zLnNvLjEgY29udGFpbnMgc29tZSBzeW1ib2xzIG5lZWRlZCBieSBsaWJ1bndpbmQgd2hpY2gKK2FyZSBub3QgcHJlc2VudCBpbiBsaWJnY2MuCisKK1RoaXMgY2F1c2VzIHRoZSBmb2xsb3dpbmcgbGluayBlcnJvciB3aGVuIGJ1aWxkaW5nIHRoZSBYLk9yZyBYIHNlcnZlcgord2l0aCBsaWJ1bndpbmQgc3VwcG9ydDoKKworCSAgQ0NMRCAgICAgWG9yZworCS91c3IvbGliL2xpYnVud2luZC5zbzogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19hZWFiaV91bndpbmRfY3BwX3ByMCcKKwkvdXNyL2xpYi9saWJ1bndpbmQuc286IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fYWVhYmlfdW53aW5kX2NwcF9wcjEnCisKK0xpbmtpbmcgYWdhaW5zdCBsaWJnY2NfcyBleHBsaWNpdGx5IHNvbHZlcyB0aGlzIHByb2JsZW0uCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggY2ZmZTE5Yi4uM2JlYjVmMiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjU4LDcgKzI1OCw3IEBAIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1sjaWZuZGVmIF9fSU5URUxfQ09NUElMRVIKKyAKKyBpZiB0ZXN0IHgkR0NDID0geHllcyAtYSB4JGludGVsX2NvbXBpbGVyICE9IHh5ZXM7IHRoZW4KKyAgIENGTEFHUz0iJHtDRkxBR1N9IC1mZXhjZXB0aW9ucyAtV2FsbCAtV3NpZ24tY29tcGFyZSIKKy0gIExJQkNSVFM9Ii1sZ2NjIgorKyAgTElCQ1JUUz0iLWxnY2NfcyIKKyBmaQorIEFDX01TR19SRVNVTFQoWyRpbnRlbF9jb21waWxlcl0pCisgCistLSAKKzIuMy4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvU3VwcG9ydC1idWlsZGluZy13aXRoLW9sZGVyLWNvbXBpbGVycy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvU3VwcG9ydC1idWlsZGluZy13aXRoLW9sZGVyLWNvbXBpbGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjhiNzAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9TdXBwb3J0LWJ1aWxkaW5nLXdpdGgtb2xkZXItY29tcGlsZXJzLnBhdGNoCkBAIC0wLDAgKzEsNzIgQEAKK0Zyb20gMTBiMDY0ZmZlOTAyZDVhZjMxYmI0OWJkOGU0ZjAzYzU0NWY4ZDQ2MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExhZGlzbGF2IE1pY2hsIDxsYWRpc0BsaW51eC1taXBzLm9yZz4KK0RhdGU6IFR1ZSwgMTMgTm92IDIwMTIgMTE6MTk6NDcgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gU3VwcG9ydCBidWlsZGluZyB3aXRoIG9sZGVyIGNvbXBpbGVycy4KKworQWRkIGEgY2hlY2sgZm9yIF9fYnVpbHRpbl91bnJlYWNoYWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgfCAgIDExICsrKysrKysrKysrCisgaW5jbHVkZS9saWJ1bndpbmRfaS5oIHwgICAgNiArKysrKysKKyBzcmMvYXJtL0dyZXN1bWUuYyAgICAgfCAgICAyICstCisgc3JjL3NoL0dyZXN1bWUuYyAgICAgIHwgICAgMiArLQorIDQgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yODUsNiArMjg1LDE3IEBAIGlmIHRlc3QgeCRoYXZlX19idWlsdGluX19fY2xlYXJfY2FjaGUgPQorIGZpCisgQUNfTVNHX1JFU1VMVChbJGhhdmVfX2J1aWx0aW5fX19jbGVhcl9jYWNoZV0pCisgCisrQUNfTVNHX0NIRUNLSU5HKFtmb3IgX19idWlsdGluX3VucmVhY2hhYmxlXSkKKytBQ19MSU5LX0lGRUxTRSgKKysgIFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tfX2J1aWx0aW5fdW5yZWFjaGFibGUoKV1dKV0sCisrICBbaGF2ZV9fYnVpbHRpbl91bnJlYWNoYWJsZT15ZXNdLAorKyAgW2hhdmVfX2J1aWx0aW5fdW5yZWFjaGFibGU9bm9dKQorK2lmIHRlc3QgeCRoYXZlX19idWlsdGluX3VucmVhY2hhYmxlID0geHllczsgdGhlbgorKyAgQUNfREVGSU5FKFtIQVZFX19CVUlMVElOX1VOUkVBQ0hBQkxFXSwgWzFdLAorKyAgICAgICAgICAgIFtEZWZpbmVkIGlmIF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpIGlzIGF2YWlsYWJsZV0pCisrZmkKKytBQ19NU0dfUkVTVUxUKFskaGF2ZV9fYnVpbHRpbl91bnJlYWNoYWJsZV0pCisrCisgQUNfTVNHX0NIRUNLSU5HKFtmb3IgX19zeW5jIGF0b21pY3NdKQorIEFDX0xJTktfSUZFTFNFKAorICAgW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbWworLS0tIGEvaW5jbHVkZS9saWJ1bndpbmRfaS5oCisrKysgYi9pbmNsdWRlL2xpYnVud2luZF9pLmgKK0BAIC03Miw2ICs3MiwxMiBAQCBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFCisgIyBlbmRpZgorICNlbmRpZgorIAorKyNpZiBkZWZpbmVkKEhBVkVfX0JVSUxUSU5fVU5SRUFDSEFCTEUpCisrIyBkZWZpbmUgdW5yZWFjaGFibGUoKSBfX2J1aWx0aW5fdW5yZWFjaGFibGUoKQorKyNlbHNlCisrIyBkZWZpbmUgdW5yZWFjaGFibGUoKSBkbyB7IH0gd2hpbGUgKDEpCisrI2VuZGlmCisrCisgI2lmZGVmIERFQlVHCisgIyBkZWZpbmUgVU5XX0RFQlVHCTEKKyAjZWxzZQorLS0tIGEvc3JjL2FybS9HcmVzdW1lLmMKKysrKyBiL3NyYy9hcm0vR3Jlc3VtZS5jCitAQCAtOTYsNyArOTYsNyBAQCBhcm1fbG9jYWxfcmVzdW1lICh1bndfYWRkcl9zcGFjZV90IGFzLCB1CisgCTogOiAiciIgKGMtPnNpZ2NvbnRleHRfc3ApLCAiciIgKGMtPnNpZ2NvbnRleHRfcGMpCisgICAgICAgKTsKKyAgICB9CistICBfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTsKKysgIHVucmVhY2hhYmxlKCk7CisgI2Vsc2UKKyAgIHByaW50ZiAoIiVzOiBpbXBsZW1lbnQgbWVcbiIsIF9fRlVOQ1RJT05fXyk7CisgI2VuZGlmCistLS0gYS9zcmMvc2gvR3Jlc3VtZS5jCisrKysgYi9zcmMvc2gvR3Jlc3VtZS5jCitAQCAtMTA5LDcgKzEwOSw3IEBAIHNoX2xvY2FsX3Jlc3VtZSAodW53X2FkZHJfc3BhY2VfdCBhcywgdW4KKyAJICAiciIgKGMtPnNpZ2NvbnRleHRfcGMpCisgICAgICAgKTsKKyAgICB9CistICBfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTsKKysgIHVucmVhY2hhYmxlKCk7CisgI2VuZGlmCisgICByZXR1cm4gLVVOV19FSU5WQUw7CisgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY2MGFmMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC5pbmMKQEAgLTAsMCArMSwzMSBAQAorREVTQ1JJUFRJT04gPSAiYSBwb3J0YWJsZSBhbmQgZWZmaWNpZW50IEMgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIChBUEkpIHRvIGRldGVybWluZSB0aGUgY2FsbC1jaGFpbiBvZiBhIHByb2dyYW0iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm5vbmdudS5vcmcvbGlidW53aW5kIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0zZmNlZDExZDZkZjcxOWI0NzUwNTgzN2E1MWMxNmFlNSIKK0RFUEVORFMgKz0gImxpYmF0b21pYy1vcHMiCisKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9OT05HTlVfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbHptYV0gPSAiLS1lbmFibGUtbWluaWRlYnVnaW5mbywtLWRpc2FibGUtbWluaWRlYnVnaW5mbyx4eiIKKworRVhUUkFfT0VDT05GX2FybSA9ICItLWVuYWJsZS1kZWJ1Zy1mcmFtZSIKK0VYVFJBX09FQ09ORl9hYXJjaDY0ID0gIi0tZW5hYmxlLWRlYnVnLWZyYW1lIgorCitDRkxBR1MgKz0gIiR7QVRPTUlDT1BTfSIKK0FUT01JQ09QU19hcm12NSA9ICItREFPX1VTRV9QVEhSRUFEX0RFRlM9MSIKK0FUT01JQ09QU19hcm12NCA9ICItREFPX1VTRV9QVEhSRUFEX0RFRlM9MSIKK0FUT01JQ09QUyA/PSAiIgorCitMREZMQUdTX2FwcGVuZF94ODYgPSAiIC1mdXNlLWxkPWdvbGQiCitMREZMQUdTX2FwcGVuZF94ODYtNjQgPSAiIC1mdXNlLWxkPWdvbGQiCisKK0xERkxBR1NfYXBwZW5kX2FybSA9ICIgLWZ1c2UtbGQ9Z29sZCIKK0xERkxBR1NfYXBwZW5kX2FhcmNoNjQgPSAiIC1mdXNlLWxkPWdvbGQiCisKK0xERkxBR1NfYXBwZW5kX3Bvd2VycGMgPSAiIC1mdXNlLWxkPWdvbGQiCitMREZMQUdTX2FwcGVuZF9wb3dlcnBjNjQgPSAiIC1mdXNlLWxkPWdvbGQiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kXzEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZF8xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI4MmMxYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZF8xLjEuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBsaWJ1bndpbmQuaW5jCisKK1NSQ19VUkkgKz0gIlwKKyAgICBmaWxlOi8vU3VwcG9ydC1idWlsZGluZy13aXRoLW9sZGVyLWNvbXBpbGVycy5wYXRjaCBcCisgICAgZmlsZTovL0FBcmNoNjQtcG9ydC5wYXRjaCBcCisgICAgZmlsZTovL0ZpeC10ZXN0LWNhc2UtbGluay1mYWlsdXJlLW9uLVBvd2VyUEMtc3lzdGVtcy13aXRoLUFsdGl2ZWMucGF0Y2ggXAorICAgIGZpbGU6Ly9MaW5rLWxpYnVud2luZC10by1saWJnY2Nfcy1yYXRoZXItdGhhbi1saWJnY2MucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLUludmFsaWQtZHdhcmYtb3Bjb2Rlcy1jYW4tY2F1c2UtcmVmZXJlbmNlcy1iZXlvbmQtdGgucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmI0ZWEyZjZmYmJlNDViZjAzMmNkMzZlNTg2ODgzY2UiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWRmZTBmY2FlMmE4NjZkZTlkMzk0MmM2Njk5NWU0YjQ2MDIzMDQ0Njg4N2RiZGFiMzAyZDQxYThhZWU4ZDA5YSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1LzAwMDEtdWF0b21pYy1TcGVjaWZ5LWNvbXBsZXRlLXR5cGVzLWZvci1hdG9taWMtZnVuY3Rpb24tYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1LzAwMDEtdWF0b21pYy1TcGVjaWZ5LWNvbXBsZXRlLXR5cGVzLWZvci1hdG9taWMtZnVuY3Rpb24tYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWQwYmJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvMDAwMS11YXRvbWljLVNwZWNpZnktY29tcGxldGUtdHlwZXMtZm9yLWF0b21pYy1mdW5jdGlvbi1jLnBhdGNoCkBAIC0wLDAgKzEsMTU4IEBACitGcm9tIDZhZjc5MDgxOGQwNzRjMTAzYzQ3OTdmMWNlNzY0ODk2ZjE4M2UwMjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAyMiBBdWcgMjAxNSAyMTozNTowMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSB1YXRvbWljOiBTcGVjaWZ5IGNvbXBsZXRlIHR5cGVzIGZvciBhdG9taWMgZnVuY3Rpb24gY2FsbHMKKworVGhpcyB3YXMgdW5lYXJ0aGVkIGJ5IGNsYW5nIGNvbXBpbGVyIHdoZXJlIGl0IGNvbXBsYWluZWQgYWJvdXQgcGFyYW1ldGVyCittaXNtYXRjaCwgZ2NjIGRvZXNudCBub3RpY2UgdGhpcworCit1cmN1L3VhdG9taWMvZ2VuZXJpYy5oOjE5MDoxMDogZXJyb3I6IGFkZHJlc3MgYXJndW1lbnQgdG8gYXRvbWljIGJ1aWx0aW4KK211c3QgYmUgYSBwb2ludGVyIHRvIGludGVnZXIgb3IgcG9pbnRlciAoJ3ZvaWQgKicgaW52YWxpZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2hfNChhZGRyLCB2YWwpOworCitGaXhlZCBhbGwgaW5zdGFuY2VzIHRodXNseQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisgdXJjdS91YXRvbWljL2dlbmVyaWMuaCB8IDQwICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS91cmN1L3VhdG9taWMvZ2VuZXJpYy5oIGIvdXJjdS91YXRvbWljL2dlbmVyaWMuaAoraW5kZXggMzdmNTljYy4uMDA0NmZmZCAxMDA2NDQKKy0tLSBhL3VyY3UvdWF0b21pYy9nZW5lcmljLmgKKysrKyBiL3VyY3UvdWF0b21pYy9nZW5lcmljLmgKK0BAIC02NSwxNyArNjUsMTcgQEAgdW5zaWduZWQgbG9uZyBfdWF0b21pY19jbXB4Y2hnKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgb2xkLAorIAlzd2l0Y2ggKGxlbikgeworICNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfQllURQorIAljYXNlIDE6CistCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzEoYWRkciwgb2xkLCBfbmV3KTsKKysJCXJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfMSgodW5zaWduZWQgY2hhciAqKWFkZHIsIG9sZCwgX25ldyk7CisgI2VuZGlmCisgI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19TSE9SVAorIAljYXNlIDI6CistCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzIoYWRkciwgb2xkLCBfbmV3KTsKKysJCXJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfMigodW5zaWduZWQgc2hvcnQgaW50ICopYWRkciwgb2xkLCBfbmV3KTsKKyAjZW5kaWYKKyAJY2FzZSA0OgorLQkJcmV0dXJuIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF80KGFkZHIsIG9sZCwgX25ldyk7CisrCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzQoKHVuc2lnbmVkIGludCAqKWFkZHIsIG9sZCwgX25ldyk7CisgI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2NCkKKyAJY2FzZSA4OgorLQkJcmV0dXJuIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF84KGFkZHIsIG9sZCwgX25ldyk7CisrCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzgoKHVuc2lnbmVkIGxvbmcgKilhZGRyLCBvbGQsIF9uZXcpOworICNlbmRpZgorIAl9CisgCV91YXRvbWljX2xpbmtfZXJyb3IoKTsKK0BAIC0xMDAsMjAgKzEwMCwyMCBAQCB2b2lkIF91YXRvbWljX2FuZCh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwKKyAJc3dpdGNoIChsZW4pIHsKKyAjaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX0JZVEUKKyAJY2FzZSAxOgorLQkJX19zeW5jX2FuZF9hbmRfZmV0Y2hfMShhZGRyLCB2YWwpOworKwkJX19zeW5jX2FuZF9hbmRfZmV0Y2hfMSgodW5zaWduZWQgY2hhciAqKWFkZHIsIHZhbCk7CisgCQlyZXR1cm47CisgI2VuZGlmCisgI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19TSE9SVAorIAljYXNlIDI6CistCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF8yKGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF8yKCh1bnNpZ25lZCBzaG9ydCBpbnQgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNlbmRpZgorIAljYXNlIDQ6CistCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF80KGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF80KCh1bnNpZ25lZCBpbnQgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0gNjQpCisgCWNhc2UgODoKKy0JCV9fc3luY19hbmRfYW5kX2ZldGNoXzgoYWRkciwgdmFsKTsKKysJCV9fc3luY19hbmRfYW5kX2ZldGNoXzgoKHVuc2lnbmVkIGxvbmcgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNlbmRpZgorIAl9CitAQCAtMTM5LDIwICsxMzksMjAgQEAgdm9pZCBfdWF0b21pY19vcih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwKKyAJc3dpdGNoIChsZW4pIHsKKyAjaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX0JZVEUKKyAJY2FzZSAxOgorLQkJX19zeW5jX29yX2FuZF9mZXRjaF8xKGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfb3JfYW5kX2ZldGNoXzEoKHVuc2lnbmVkIGNoYXIgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNlbmRpZgorICNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfU0hPUlQKKyAJY2FzZSAyOgorLQkJX19zeW5jX29yX2FuZF9mZXRjaF8yKGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfb3JfYW5kX2ZldGNoXzIoKHVuc2lnbmVkIHNob3J0IGludCAqKWFkZHIsIHZhbCk7CisgCQlyZXR1cm47CisgI2VuZGlmCisgCWNhc2UgNDoKKy0JCV9fc3luY19vcl9hbmRfZmV0Y2hfNChhZGRyLCB2YWwpOworKwkJX19zeW5jX29yX2FuZF9mZXRjaF80KCh1bnNpZ25lZCBpbnQgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0gNjQpCisgCWNhc2UgODoKKy0JCV9fc3luY19vcl9hbmRfZmV0Y2hfOChhZGRyLCB2YWwpOworKwkJX19zeW5jX29yX2FuZF9mZXRjaF84KCh1bnNpZ25lZCBsb25nICopYWRkciwgdmFsKTsKKyAJCXJldHVybjsKKyAjZW5kaWYKKyAJfQorQEAgLTE4MCwxNyArMTgwLDE3IEBAIHVuc2lnbmVkIGxvbmcgX3VhdG9taWNfYWRkX3JldHVybih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwKKyAJc3dpdGNoIChsZW4pIHsKKyAjaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX0JZVEUKKyAJY2FzZSAxOgorLQkJcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoXzEoYWRkciwgdmFsKTsKKysJCXJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF8xKCh1bnNpZ25lZCBjaGFyICopYWRkciwgdmFsKTsKKyAjZW5kaWYKKyAjaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX1NIT1JUCisgCWNhc2UgMjoKKy0JCXJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF8yKGFkZHIsIHZhbCk7CisrCQlyZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2hfMigodW5zaWduZWQgc2hvcnQgaW50ICopYWRkciwgdmFsKTsKKyAjZW5kaWYKKyAJY2FzZSA0OgorLQkJcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoXzQoYWRkciwgdmFsKTsKKysJCXJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF80KCh1bnNpZ25lZCBpbnQgKilhZGRyLCB2YWwpOworICNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0gNjQpCisgCWNhc2UgODoKKy0JCXJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF84KGFkZHIsIHZhbCk7CisrCQlyZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2hfOCgodW5zaWduZWQgbG9uZyAqKWFkZHIsIHZhbCk7CisgI2VuZGlmCisgCX0KKyAJX3VhdG9taWNfbGlua19lcnJvcigpOworQEAgLTIxOCw3ICsyMTgsNyBAQCB1bnNpZ25lZCBsb25nIF91YXRvbWljX2V4Y2hhbmdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLCBpbnQgbGVuKQorIAorIAkJZG8geworIAkJCW9sZCA9IHVhdG9taWNfcmVhZCgodW5zaWduZWQgY2hhciAqKWFkZHIpOworLQkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfMShhZGRyLCBvbGQsIHZhbCkpOworKwkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfMSgodW5zaWduZWQgY2hhciAqKWFkZHIsIG9sZCwgdmFsKSk7CisgCisgCQlyZXR1cm4gb2xkOworIAl9CitAQCAtMjMwLDcgKzIzMCw3IEBAIHVuc2lnbmVkIGxvbmcgX3VhdG9taWNfZXhjaGFuZ2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwsIGludCBsZW4pCisgCisgCQlkbyB7CisgCQkJb2xkID0gdWF0b21pY19yZWFkKCh1bnNpZ25lZCBzaG9ydCAqKWFkZHIpOworLQkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfMihhZGRyLCBvbGQsIHZhbCkpOworKwkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfMigodW5zaWduZWQgc2hvcnQgaW50ICopYWRkciwgb2xkLCB2YWwpKTsKKyAKKyAJCXJldHVybiBvbGQ7CisgCX0KK0BAIC0yNDEsNyArMjQxLDcgQEAgdW5zaWduZWQgbG9uZyBfdWF0b21pY19leGNoYW5nZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwgaW50IGxlbikKKyAKKyAJCWRvIHsKKyAJCQlvbGQgPSB1YXRvbWljX3JlYWQoKHVuc2lnbmVkIGludCAqKWFkZHIpOworLQkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfNChhZGRyLCBvbGQsIHZhbCkpOworKwkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfNCgodW5zaWduZWQgaW50ICopYWRkciwgb2xkLCB2YWwpKTsKKyAKKyAJCXJldHVybiBvbGQ7CisgCX0KK0BAIC0yNTIsNyArMjUyLDcgQEAgdW5zaWduZWQgbG9uZyBfdWF0b21pY19leGNoYW5nZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwgaW50IGxlbikKKyAKKyAJCWRvIHsKKyAJCQlvbGQgPSB1YXRvbWljX3JlYWQoKHVuc2lnbmVkIGxvbmcgKilhZGRyKTsKKy0JCX0gd2hpbGUgKCFfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwXzgoYWRkciwgb2xkLCB2YWwpKTsKKysJCX0gd2hpbGUgKCFfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwXzgoKHVuc2lnbmVkIGxvbmcgKilhZGRyLCBvbGQsIHZhbCkpOworIAorIAkJcmV0dXJuIG9sZDsKKyAJfQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS9SZXZlcnQtQmxhY2tsaXN0LUFSTS1nY2MtNC44LjAtNC44LjEtNC44LjIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS9SZXZlcnQtQmxhY2tsaXN0LUFSTS1nY2MtNC44LjAtNC44LjEtNC44LjIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1YTczOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1L1JldmVydC1CbGFja2xpc3QtQVJNLWdjYy00LjguMC00LjguMS00LjguMi5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIDdiM2RmMTAwMzQ2MTI4ZDc4MGYyMThiODgxZDU2M2QxZmQxMmUzMTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CitEYXRlOiBNb24sIDIwIE9jdCAyMDE0IDEzOjQ2OjEwICsxMTAwCitTdWJqZWN0OiBbUEFUQ0hdIFJldmVydCAiQmxhY2tsaXN0IEFSTSBnY2MgNC44LjAsIDQuOC4xLCA0LjguMiIKKworVGhpcyByZXZlcnRzIGNvbW1pdCA0Yjc5MzEwYWEzZDQwOGJhMzBmZWUwMmNjNDk3YTY4MDcyZDM4YTk5LgorT0UtQ29yZSBpcyB1c2luZyBhIHBhdGNoZWQgR0NDIDQuOC4yIHdoaWNoIGlzIGFibGUgdG8gY29tcGlsZSBsaWJ1cmN1Citwcm9wZXJseS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorLS0tCisgdXJjdS9jb21waWxlci5oIHwgMTkgLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3VyY3UvY29tcGlsZXIuaCBiL3VyY3UvY29tcGlsZXIuaAoraW5kZXggMWUzMDkwMy4uMTk1MzRmMCAxMDA2NDQKKy0tLSBhL3VyY3UvY29tcGlsZXIuaAorKysrIGIvdXJjdS9jb21waWxlci5oCitAQCAtMTA4LDIzICsxMDgsNCBAQAorIAorICNkZWZpbmUgQ0FBX0FSUkFZX1NJWkUoeCkJKHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKQorIAorLS8qCistICogRG9uJ3QgYWxsb3cgY29tcGlsaW5nIHdpdGggYnVnZ3kgY29tcGlsZXIuCistICovCistCistI2lmZGVmIF9fR05VQ19fCistIyBkZWZpbmUgVVJDVV9HQ0NfVkVSU0lPTgkoX19HTlVDX18gKiAxMDAwMCBcCistCQkJCSsgX19HTlVDX01JTk9SX18gKiAxMDAgXAorLQkJCQkrIF9fR05VQ19QQVRDSExFVkVMX18pCistCistLyoKKy0gKiBodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU4ODU0CistICovCistIyBpZmRlZiBfX0FSTUVMX18KKy0jICBpZiBVUkNVX0dDQ19WRVJTSU9OID49IDQwODAwICYmIFVSQ1VfR0NDX1ZFUlNJT04gPD0gNDA4MDIKKy0jICAgZXJyb3IgWW91ciBnY2MgdmVyc2lvbiBwcm9kdWNlcyBjbG9iYmVyZWQgZnJhbWUgYWNjZXNzZXMKKy0jICBlbmRpZgorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKyAjZW5kaWYgLyogX1VSQ1VfQ09NUElMRVJfSCAqLworLS0gCisyLjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS9hYXJjaDY0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvYWFyY2g2NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmNjOGMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvYWFyY2g2NC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitsaWJ1Y3J1OiByZWNvZ25pemUgYWFyY2g2NAorCitNYWtlIHRoZSBzYW1lIGFzICJhcm0iIGludGVybmFsbHkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBqb2Uuc2xhdGVyQHdpbmRyaXZlci5jb20KKworCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTc3LDYgKzc3LDcgQEAgQVNfQ0FTRShbJGhvc3RfY3B1XSwKKyAJW2FscGhhKl0sIFtBUkNIVFlQRT0iYWxwaGEiXSwKKyAJW2lhNjRdLCBbQVJDSFRZUEU9ImdjYyJdLAorIAlbYXJtKl0sIFtBUkNIVFlQRT0iYXJtIl0sCisrCVthYXJjaDY0XSwgW0FSQ0hUWVBFPSJhcm0iXSwKKyAJW21pcHMqXSwgW0FSQ0hUWVBFPSJtaXBzIl0sCisgCVt0aWxlKl0sIFtBUkNIVFlQRT0iZ2NjIl0sCisgCVtBUkNIVFlQRT0idW5rbm93biJdCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdV8wLjguNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1XzAuOC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZjRmNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdV8wLjguNy5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlVzZXJzcGFjZSBSQ1UgKHJlYWQtY29weS11cGRhdGUpIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vbHR0bmcub3JnL3VyY3UiCitCVUdUUkFDS0VSID0gImh0dHA6Ly9sdHRuZy5vcmcvcHJvamVjdC9pc3N1ZXMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MGYwNjBjMzBhMjc5MjJjZTljMGQ1NTdhNjM5YjRmYTMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdXJjdS5oO2JlZ2lubGluZT00O2VuZGxpbmU9MzI7bWQ1PTRkZTBkNjhkM2E5OTc2NDM3MTUwMzZkMjIwOWFlMWQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3VyY3UvdWF0b21pYy94ODYuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTIxO21kNT0yMjA1NTJmNzJjNTViMTAyZjJlZTM1OTI5NzM0ZWY0MiIKKworU1JDX1VSSSA9ICJodHRwOi8vbHR0bmcub3JnL2ZpbGVzL3VyY3UvdXNlcnNwYWNlLXJjdS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL1JldmVydC1CbGFja2xpc3QtQVJNLWdjYy00LjguMC00LjguMS00LjguMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hYXJjaDY0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdWF0b21pYy1TcGVjaWZ5LWNvbXBsZXRlLXR5cGVzLWZvci1hdG9taWMtZnVuY3Rpb24tYy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2E2ZWUxNzg3MWQzMTIyNmRiM2Y2MThlMjgzNTFkMjIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjUyM2YyMmM0NzI2Y2E2YmI3N2E3N2QyNThlNzZkOGMzM2M4OTcyNDQzM2JkNjUzMTMwMjRiOThlNTVjNDI5NSIKKworUyA9ICIke1dPUktESVJ9L3VzZXJzcGFjZS1yY3UtJHtQVn0iCitDRkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtRF9HTlVfU09VUkNFIgoraW5oZXJpdCBhdXRvdG9vbHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYi1jb21wYXQvMDAwMS11c2IuaC1JbmNsdWRlLXN5cy10eXBlcy5oLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1c2IvbGlidXNiLWNvbXBhdC8wMDAxLXVzYi5oLUluY2x1ZGUtc3lzLXR5cGVzLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4NDQwZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYi1jb21wYXQvMDAwMS11c2IuaC1JbmNsdWRlLXN5cy10eXBlcy5oLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gMzQwZjkxMWY5ZTNmNGZmNmIwMTY4MmM1MzQxYzk1OTA2MDc4MmFmMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDIgQXByIDIwMTUgMTk6MTg6NDUgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdXNiLmg6IEluY2x1ZGUgc3lzL3R5cGVzLmgKKworV2UgbmVlZCB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoaW5ncyBsaWtlIHVfaW50WF90CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGlidXNiL3VzYi5oIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnVzYi91c2IuaCBiL2xpYnVzYi91c2IuaAoraW5kZXggODRlNzMwZi4uY2FmZmFlMiAxMDA2NDQKKy0tLSBhL2xpYnVzYi91c2IuaAorKysrIGIvbGlidXNiL3VzYi5oCitAQCAtMzEsNiArMzEsOCBAQAorIAorICNpbmNsdWRlIDxkaXJlbnQuaD4KKyAKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisgLyoKKyAgKiBVU0Igc3BlYyBpbmZvcm1hdGlvbgorICAqCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYi1jb21wYXRfMC4xLjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVzYi9saWJ1c2ItY29tcGF0XzAuMS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0Njg3MmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVzYi9saWJ1c2ItY29tcGF0XzAuMS41LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAibGlidXNiLTAuMSBjb21wYXRpYmlsaXR5IGxheWVyIGZvciBsaWJ1c2IxIgorREVTQ1JJUFRJT04gPSAibGlidXNiLTAuMSBjb21wYXRpYmxlIGxheWVyIGZvciBsaWJ1c2IxLCBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgXAordGhhdCBhaW1zIHRvIGxvb2ssIGZlZWwgYW5kIGJlaGF2ZSBleGFjdGx5IGxpa2UgbGlidXNiLTAuMSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGlidXNiLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly93d3cubGlidXNiLm9yZy9yZXBvcnQiCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZjJhYzVmM2FjNDgzNWU4ZjkxMzI0YTI2YTU5MGE0MjMiCitERVBFTkRTID0gImxpYnVzYjEiCisKKyMgRmV3IHBhY2thZ2VzIGFyZSBrbm93biBub3QgdG8gd29yayB3aXRoIGxpYnVzYi1jb21wYXQgKGUuZy4gbGlibXRwLTEuMC4wKSwKKyMgc28gaGVyZSBsaWJ1c2ItMC4xIGlzIHJlbW92ZWQgY29tcGxldGVseSBpbnN0ZWFkIG9mIGFkZGluZyB2aXJ0dWFsL2xpYnVzYjAuCisjIEJlc2lkZXMsIGxpYnVzYi0wLjEgdXNlcyBhIHBlciAxbXMgcG9sbGluZyB0aGF0IGh1cnRzIGEgbG90IHRvIHBvd2VyCisjIGNvbnN1bXB0aW9uLgorUFJPVklERVMgPSAibGlidXNiIHZpcnR1YWwvbGlidXNiMCIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEUgPSAiMSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbGlidXNiL2xpYnVzYi1jb21wYXQtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVzYi5oLUluY2x1ZGUtc3lzLXR5cGVzLmgucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjI3ODBiNmE3NThhMWUyYzI5NDNiZGJmN2ZhZjc0MGU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQwNGVmNGI2YjMyNGJlNzlhYzFiZmIzZDgzOWVhYzg2MGZiYzkyOWU2YWNiMWVmODg3OTNhNmVhMzI4YmM1NWEiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGlidXNiLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGJpbmNvbmZpZy1kaXNhYmxlZCBsaWJfcGFja2FnZQorCitFWFRSQV9PRUNPTkYgPSAiLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfQorCWlmIFsgISAke0R9JHtsaWJkaXJ9IC1lZiAke0R9JHtiYXNlX2xpYmRpcn0gXTsgdGhlbgorCQltdiAke0R9JHtiYXNlX2xpYmRpcn0vcGtnY29uZmlnICR7RH0ke2xpYmRpcn0KKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1c2IvbGlidXNiMV8xLjAuMTkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVzYi9saWJ1c2IxXzEuMC4xOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjBlMWZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1c2IvbGlidXNiMV8xLjAuMTkuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJVc2Vyc3BhY2UgbGlicmFyeSB0byBhY2Nlc3MgVVNCICh2ZXJzaW9uIDEuMCkiCitIT01FUEFHRSA9ICJodHRwOi8vbGlidXNiLnNmLm5ldCIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3d3dy5saWJ1c2Iub3JnL3JlcG9ydCIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9saWJ1c2IvbGlidXNiLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImY5ZTJiYjU4Nzk5Njg0NjdlNWNhNzU2Y2I0ZTFmYTdlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZjNTAyYzgxNjAwMmY5MGQ0Zjc2MDUwYTY0MjljM2E3ZTBkODQyMDQyMjJjYmZmMmRjZTk1ZGQ3NzNiYTY4NDAiCisKK1MgPSAiJHtXT1JLRElSfS9saWJ1c2ItJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCisjIERvbid0IGNvbmZpZ3VyZSB1ZGV2IGJ5IGRlZmF1bHQgc2luY2UgaXQgd2lsbCBjYXVzZSBhIGNpcmN1bGFyCisjIGRlcGVuZGVjeSB3aXRoIHVkZXYgcGFja2FnZSwgd2hpY2ggZGVwZW5kcyBvbiBsaWJ1c2IKK0VYVFJBX09FQ09ORiA9ICItLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSAtLWRpc2FibGUtdWRldiIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9CisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCW12ICR7RH0ke2Jhc2VfbGliZGlyfS9wa2djb25maWcgJHtEfSR7bGliZGlyfQorCWZpCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS8qLnNvLioiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiYXNlX2xpYmRpcn0vKi5zbyAke2Jhc2VfbGliZGlyfS8qLmxhIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZDE0YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdC9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwxMTggQEAKK1VzZSBwa2ctY29uZmlnIHRvIGZpbmQgZ2NyeXB0IGFuZCBsaWJ4bWwyLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW2xpYnhtbDIgaXMgdXBzdHJlYW1hYmxlXQorCitSUCAyMDE0LzUvMjIKKworSW5kZXg6IGxpYnhzbHQtMS4xLjI4L2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnhzbHQtMS4xLjI4Lm9yaWcvY29uZmlndXJlLmluCTIwMTQtMDUtMTMgMTY6NDY6MDIuMjc4NDc0OTY3ICswMDAwCisrKysgbGlieHNsdC0xLjEuMjgvY29uZmlndXJlLmluCTIwMTQtMDUtMTMgMTY6NTM6NTYuNTEwNDcyNTYxICswMDAwCitAQCAtMzc2LDYgKzM3Niw4IEBACisgQUNfU1VCU1QoUFlUSE9OX1NVQkRJUikKKyBBQ19TVUJTVChQWVRIT05fTElCUykKKyAKKytQS0dfUFJPR19QS0dfQ09ORklHCisrCisgQUNfQVJHX1dJVEgoY3J5cHRvLCBbICAtLXdpdGgtY3J5cHRvICAgICAgICAgICBBZGQgY3J5cHRvIHN1cHBvcnQgdG8gZXhzbHQgKG9uKV0pCisgV0lUSF9DUllQVE89MAorIGlmIHRlc3QgIiR3aXRoX2NyeXB0byIgPSAibm8iIDsgdGhlbgorQEAgLTM5MSwyNiArMzkzLDEzIEBACisgICAgIFdJVEhfQ1JZUFRPPTEKKyAgICAgOzsKKyAgICopCistICAgIEFDX1BBVEhfUFJPRyhMSUJHQ1JZUFRfQ09ORklHLCBsaWJnY3J5cHQtY29uZmlnLCBubykKKy0gICAgaWYgdGVzdCAiJExJQkdDUllQVF9DT05GSUciICE9ICJubyIgOyB0aGVuCistICAgICAgTElCR0NSWVBUX1ZFUlNJT049YCRMSUJHQ1JZUFRfQ09ORklHIC0tdmVyc2lvbmAKKy0gICAgICBpZiB0ZXN0IFZFUlNJT05fVE9fTlVNQkVSKGVjaG8gJExJQkdDUllQVF9WRVJTSU9OKSAtbHQgVkVSU0lPTl9UT19OVU1CRVIoZWNobyAiMS4xLjQyIikKKy0gICAgICB0aGVuCistICAgICAgICBMSUJHQ1JZUFRfQ0ZMQUdTPSIiCistICAgICAgICBMSUJHQ1JZUFRfTElCUz0iIgorLSAgICAgICAgZWNobyAnZ2NyeXB0IGxpYnJhcnkgdmVyc2lvbiA8IDEuMS40MiAtIENyeXB0byBleHRlbnNpb25zIHdpbGwgbm90IGJlIGF2YWlsYWJsZS4nCistICAgICAgZWxzZQorLSAgICAgICAgTElCR0NSWVBUX0NGTEFHUz1gJExJQkdDUllQVF9DT05GSUcgJGxpYmdjcnlwdF9jb25maWdfYXJncyAtLWNmbGFnc2AKKy0gICAgICAgIExJQkdDUllQVF9MSUJTPWAkTElCR0NSWVBUX0NPTkZJRyAkbGliZ2NyeXB0X2NvbmZpZ19hcmdzIC0tbGlic2AKKy0gICAgICAgIEFDX0RFRklORShIQVZFX0dDUllQVCwgMSwgW0RlZmluZSBpZiBnY3J5cHQgbGlicmFyeSBpcyBhdmFpbGFibGUuXSkKKy0gICAgICAgIGVjaG8gJ0NyeXB0byBleHRlbnNpb25zIHdpbGwgYmUgYXZhaWxhYmxlLicKKysgICAgUEtHX0NIRUNLX01PRFVMRVMoTElCR0NSWVBULCBbbGliZ2NyeXB0ID49IDEuMS40Ml0sIFsKKysgICAgICAgICAgQUNfREVGSU5FKEhBVkVfR0NSWVBULCAxLCBbRGVmaW5lIGlmIGdjcnlwdCBsaWJyYXJ5IGlzIGF2YWlsYWJsZS5dKQorKyAgICAgICAgICBlY2hvICdDcnlwdG8gZXh0ZW5zaW9ucyB3aWxsIGJlIGF2YWlsYWJsZS4nCisgCQlXSVRIX0NSWVBUTz0xCistICAgICAgZmkKKy0gICAgZWxzZQorLSAgICAgIExJQkdDUllQVF9DRkxBR1M9IiIKKy0gICAgICBMSUJHQ1JZUFRfTElCUz0iIgorLSAgICAgIGVjaG8gJ0NyeXB0byBleHRlbnNpb25zIHdpbGwgbm90IGJlIGF2YWlsYWJsZS4gSW5zdGFsbCBsaWJnY3J5cHQgYW5kIHJlY29uZmlndXJlIHRvIG1ha2UgYXZhaWxhYmxlLicKKy0gICAgZmkKKysJXSwgWworKyAgICAgICAgICBlY2hvICdDcnlwdG8gZXh0ZW5zaW9ucyB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIEluc3RhbGwgbGliZ2NyeXB0ID49IDEuMS40MiBhbmQgcmVjb25maWd1cmUgdG8gbWFrZSBhdmFpbGFibGUuJworKyAgICAgICAgXSkKKyBlc2FjCisgZmkKKyBBQ19TVUJTVChXSVRIX0NSWVBUTykKK0BAIC00NzEsMjQgKzQ2MCw4IEBACisgZG5sIHNvbWUgdHdlYWtpbmcgLSBEYXZpZCBIw6RyZGVtYW4gMzAvMTAvMjAwMQorIGRubAorIAorLUxJQlhNTF9DT05GSUdfUFJFRklYPSIiCisgTElCWE1MX1NSQz0iIgorIAorLUFDX0FSR19XSVRIKGxpYnhtbC1wcmVmaXgsCistICAgICAgICBbICAtLXdpdGgtbGlieG1sLXByZWZpeD1bUEZYXQkJU3BlY2lmeSBsb2NhdGlvbiBvZiBsaWJ4bWwgY29uZmlnXSwKKy0JTElCWE1MX0NPTkZJR19QUkVGSVg9JHdpdGh2YWwKKy0pCistICAgICAgICAKKy1BQ19BUkdfV0lUSChsaWJ4bWwtaW5jbHVkZS1wcmVmaXgsCistICAgICAgICBbICAtLXdpdGgtbGlieG1sLWluY2x1ZGUtcHJlZml4PVtQRlhdCVNwZWNpZnkgbG9jYXRpb24gb2YgbGlieG1sIGhlYWRlcnNdLAorLSAgICAgICAgTElCWE1MX0NGTEFHUz0iLUkkd2l0aHZhbCIKKy0pCistCistQUNfQVJHX1dJVEgobGlieG1sLWxpYnMtcHJlZml4LAorLSAgICAgICAgWyAgLS13aXRoLWxpYnhtbC1saWJzLXByZWZpeD1bUEZYXQlTcGVjaWZ5IGxvY2F0aW9uIG9mIGxpYnhtbCBsaWJzXSwKKy0gICAgICAgIExJQlhNTF9MSUJTPSItTCR3aXRodmFsIgorLSkKKy0KKyBBQ19BUkdfV0lUSChsaWJ4bWwtc3JjLAorIAlbICAtLXdpdGgtbGlieG1sLXNyYz1bRElSXSAgICAgICAgICAgICAgRm9yIGxpYnhtbCB0aGF0cyBub3QgaW5zdGFsbGVkIHlldCAoc2V0cyBhbGwgdGhyZWUgYWJvdmUpXSwKKyAJTElCWE1MX1NSQz0iJHdpdGh2YWwiCitAQCAtNTUxLDI4ICs1MjQsOSBAQAorIAlmaQorIGZpCisgCistZG5sCistZG5sIG1ha2Ugc3VyZSB4bWwyLWNvbmZpZyBpcyBleGVjdXRhYmxlLAorLWRubCB0ZXN0IHZlcnNpb24gYW5kIGluaXQgb3VyIHZhcmlhYmxlcworLWRubAorLQorLWlmICR7WE1MX0NPTkZJR30gLS1saWJzIHByaW50ID4gL2Rldi9udWxsIDI+JjEKKy10aGVuCistCVhNTFZFUlM9YCRYTUxfQ09ORklHIC0tdmVyc2lvbmAKKy0JaWYgdGVzdCBWRVJTSU9OX1RPX05VTUJFUihlY2hvICRYTUxWRVJTKSAtZ2UgVkVSU0lPTl9UT19OVU1CRVIoZWNobyAkTElCWE1MX1JFUVVJUkVEX1ZFUlNJT04pCistCXRoZW4KKy0JCUFDX01TR19SRVNVTFQoJFhNTFZFUlMgZm91bmQpCistCWVsc2UKKy0JCUFDX01TR19FUlJPUihWZXJzaW9uICRYTUxWRVJTIGZvdW5kLiBZb3UgbmVlZCBhdCBsZWFzdCBsaWJ4bWwyICRMSUJYTUxfUkVRVUlSRURfVkVSU0lPTiBmb3IgdGhpcyB2ZXJzaW9uIG9mIGxpYnhzbHQpCistCWZpCistCUxJQlhNTF9MSUJTPSIkTElCWE1MX0xJQlMgYCRYTUxfQ09ORklHIC0tbGlic2AiCistCWlmIHRlc3QgIngkTElCWE1MX1NSQyIgPSAieCI7IHRoZW4KKy0JCUxJQlhNTF9DRkxBR1M9IiRMSUJYTUxfQ0ZMQUdTIGAkWE1MX0NPTkZJRyAtLWNmbGFnc2AiCistCWZpCistZWxzZQorLQlBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBmaW5kIGxpYnhtbDIgYW55d2hlcmUsIGNoZWNrIGZ0cDovL3htbHNvZnQub3JnLy5dKQorLWZpCistCisrUEtHX0NIRUNLX01PRFVMRVMoTElCWE1MLCBbbGlieG1sLTIuMCA+PSAkTElCWE1MX1JFUVVJUkVEX1ZFUlNJT05dLCwKKysgICAgW0FDX01TR19FUlJPUihbQ291bGQgbm90IGZpbmQgbGlieG1sLTIuMCA+PSAkTElCWE1MX1JFUVVJUkVEX1ZFUlNJT04gYW55d2hlcmUsIGNoZWNrIGZ0cDovL3htbHNvZnQub3JnLy5dKV0KKyspCisgCisgQUNfU1VCU1QoQ0ZMQUdTKQorIEFDX1NVQlNUKENQUEZMQUdTKQorQEAgLTU5Nyw3ICs1NTEsNyBAQAorIAorIGlmIHRlc3QgIiR3aXRoX3BsdWdpbnMiID0gInllcyIgOyB0aGVuCisgICBBQ19NU0dfQ0hFQ0tJTkcoW2xpYnhtbDIgbW9kdWxlIHN1cHBvcnRdKQorLSAgV0lUSF9NT0RVTEVTPSJgJFhNTF9DT05GSUcgLS1tb2R1bGVzYCIKKysgIFdJVEhfTU9EVUxFUz0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9bW9kdWxlcyBsaWJ4bWwtMi4wYCIKKyAgIGlmIHRlc3QgIiR7V0lUSF9NT0RVTEVTfSIgPSAiMSI7IHRoZW4KKyAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICBlbHNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdC9wa2djb25maWdfZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvcGtnY29uZmlnX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmE4MDEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvcGtnY29uZmlnX2ZpeC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBsaWJ4c2x0LTEuMS4yNy9saWJleHNsdC5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnhzbHQtMS4xLjI3Lm9yaWcvbGliZXhzbHQucGMuaW4KKysrKyBsaWJ4c2x0LTEuMS4yNy9saWJleHNsdC5wYy5pbgorQEAgLTgsNSArOCw1IEBAIE5hbWU6IGxpYmV4c2x0CisgVmVyc2lvbjogQExJQkVYU0xUX1ZFUlNJT05ACisgRGVzY3JpcHRpb246IEVYU0xUIEV4dGVuc2lvbiBsaWJyYXJ5CisgUmVxdWlyZXM6IGxpYnhtbC0yLjAKKy1MaWJzOiBARVhTTFRfTElCRElSQCBARVhTTFRfTElCU0AKKytMaWJzOiAtbGV4c2x0IEBFWFNMVF9MSUJESVJAIEBFWFNMVF9MSUJTQAorIENmbGFnczogQEVYU0xUX0lOQ0xVREVESVJACitJbmRleDogbGlieHNsdC0xLjEuMjcvbGlieHNsdC5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnhzbHQtMS4xLjI3Lm9yaWcvbGlieHNsdC5wYy5pbgorKysrIGxpYnhzbHQtMS4xLjI3L2xpYnhzbHQucGMuaW4KK0BAIC04LDUgKzgsNSBAQCBOYW1lOiBsaWJ4c2x0CisgVmVyc2lvbjogQFZFUlNJT05ACisgRGVzY3JpcHRpb246IFhTTFQgbGlicmFyeSB2ZXJzaW9uIDIuCisgUmVxdWlyZXM6IGxpYnhtbC0yLjAKKy1MaWJzOiBAWFNMVF9MSUJESVJAIEBYU0xUX0xJQlNAIEBFWFRSQV9MSUJTQAorK0xpYnM6IC1seHNsdCBAWFNMVF9MSUJESVJAIEBYU0xUX0xJQlNAIEBFWFRSQV9MSUJTQAorIENmbGFnczogQFhTTFRfSU5DTFVERURJUkAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0XzEuMS4yOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0XzEuMS4yOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjZiY2Q4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHRfMS4xLjI4LmJiCkBAIC0wLDAgKzEsNDYgQEAKK1NVTU1BUlkgPSAiR05PTUUgWFNMVCBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3htbHNvZnQub3JnL1hTTFQvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ29weXJpZ2h0O21kNT0wY2Q5YTA3YWZiZWIyNDAyNmM5YjAzYWVjZmViYTQ1OCIKKworU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJsaWJ4bWwyIgorCitTUkNfVVJJID0gImZ0cDovL3htbHNvZnQub3JnL2xpYnhzbHQvL2xpYnhzbHQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZ19maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTY2N2JmNmY5MzEwYjk1NzI1NGZkY2Y2NTk2NjAwYjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWZjNzE1MWE1N2I4OWMwM2Q3YjgyNWRmNWEwZmFlMGE4ZDVmMDU2NzRjMGU3Y2YyOTM3ZWNlYzRkNTRhMDI4YyIKK1MgPSAiJHtXT1JLRElSfS9saWJ4c2x0LSR7UFZ9IgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L3hzbHQtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYmluY29uZmlnLWRpc2FibGVkIGxpYl9wYWNrYWdlCisKKyMgV2UgZG9uJ3QgREVQRU5EIG9uIGJpbnV0aWxzIGZvciBhbnNpZGVjbC5oIHNvIGVuc3VyZSB3ZSBkb24ndCB1c2UgdGhlIGhlYWRlcgorZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXNlZCAtaSAtZSAncy9hbnNpZGVjbC5oLy8nICR7U30vY29uZmlndXJlLmluCisKKwkjIFRoZSB0aW1lc3RhbXBzIGluIHRoZSAxLjEuMjggdGFyYmFsbCBhcmUgbWVzc2VkIHVwIGNhdXNpbmcgdGhpcyBmaWxlIHRvCisJIyBhcHBlYXIgb3V0IG9mIGRhdGUuICBUb3VjaCBpdCBzbyB0aGF0IHdlIGRvbid0IHRyeSB0byByZWdlbmVyYXRlIGl0LgorCXRvdWNoICR7U30vZG9jL3hzbHRwcm9jLjEKK30KKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1weXRob24gLS13aXRob3V0LWRlYnVnIC0td2l0aG91dC1tZW0tZGVidWcgLS13aXRob3V0LWNyeXB0byIKKyMgb2xkZXIgdmVyc2lvbnMgb2YgdGhpcyByZWNpcGUgaGFkICR7UE59LXV0aWxzCitSUFJPVklERVNfJHtQTn0tYmluICs9ICIke1BOfS11dGlscyIKK1JDT05GTElDVFNfJHtQTn0tYmluICs9ICIke1BOfS11dGlscyIKK1JSRVBMQUNFU18ke1BOfS1iaW4gKz0gIiR7UE59LXV0aWxzIgorCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0veHNsdHByb2MgWE1MX0NBVEFMT0dfRklMRVM9JHtzeXNjb25mZGlyfS94bWwvY2F0YWxvZy54bWwKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9saWJ4c2x0LXBsdWdpbnMiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS94c2x0Q29uZi5zaCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ5YW1sL2ZpbGVzL2xpYnlhbWwtQ1ZFLTIwMTQtOTEzMC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9maWxlcy9saWJ5YW1sLUNWRS0yMDE0LTkxMzAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M0YTAwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9maWxlcy9saWJ5YW1sLUNWRS0yMDE0LTkxMzAucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorIyBIRyBjaGFuZ2VzZXQgcGF0Y2gKKyMgVXNlciBLaXJpbGwgU2ltb25vdiA8eGlAcmVzb2x2ZW50Lm5ldD4KKyMgRGF0ZSAxNDE3MTk3MzEyIDIxNjAwCisjIE5vZGUgSUQgMmI5MTU2NzU2NDIzZTk2N2NmZDA5YTYxZDEyNWQ4ODNmY2E2ZjRmMgorIyBQYXJlbnQgIDA1M2Y1M2EzODFmZjZhZGJiYzkzYTMxYWI3ZmRlZTA2YTE2YzhhMzMKK1JlbW92ZWQgaW52YWxpZCBzaW1wbGUga2V5IGFzc2VydGlvbiAodGhhbmsgdG8gSm9uYXRoYW4gR3JheSkuCisKK1RoZSBwYXRjaCBjb21lcyBmcm9tIAorCitodHRwczovL2JpdGJ1Y2tldC5vcmcveGkvbGlieWFtbC9jb21taXRzLzJiOTE1Njc1NjQyM2U5NjdjZmQwOWE2MWQxMjVkODgzZmNhNmY0ZjIKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDx5dWUudGFvQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLXIgMDUzZjUzYTM4MWZmIC1yIDJiOTE1Njc1NjQyMyBzcmMvc2Nhbm5lci5jCistLS0gYS9zcmMvc2Nhbm5lci5jCVdlZCBNYXIgMjYgMTM6NTU6NTQgMjAxNCAtMDUwMAorKysrIGIvc3JjL3NjYW5uZXIuYwlGcmkgTm92IDI4IDExOjU1OjEyIDIwMTQgLTA2MDAKK0BAIC0xMTA2LDEzICsxMTA2LDYgQEAKKyAgICAgICAgICAgICAmJiBwYXJzZXItPmluZGVudCA9PSAocHRyZGlmZl90KXBhcnNlci0+bWFyay5jb2x1bW4pOworIAorICAgICAvKgorLSAgICAgKiBBIHNpbXBsZSBrZXkgaXMgcmVxdWlyZWQgb25seSB3aGVuIGl0IGlzIHRoZSBmaXJzdCB0b2tlbiBpbiB0aGUgY3VycmVudAorLSAgICAgKiBsaW5lLiAgVGhlcmVmb3JlIGl0IGlzIGFsd2F5cyBhbGxvd2VkLiAgQnV0IHdlIGFkZCBhIGNoZWNrIGFueXdheS4KKy0gICAgICovCistCistICAgIGFzc2VydChwYXJzZXItPnNpbXBsZV9rZXlfYWxsb3dlZCB8fCAhcmVxdWlyZWQpOyAgICAvKiBJbXBvc3NpYmxlLiAqLworLQorLSAgICAvKgorICAgICAgKiBJZiB0aGUgY3VycmVudCBwb3NpdGlvbiBtYXkgc3RhcnQgYSBzaW1wbGUga2V5LCBzYXZlIGl0LgorICAgICAgKi8KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9saWJ5YW1sXzAuMS42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ5YW1sL2xpYnlhbWxfMC4xLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAxNTU3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9saWJ5YW1sXzAuMS42LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiTGliWUFNTCBpcyBhIFlBTUwgMS4xIHBhcnNlciBhbmQgZW1pdHRlciB3cml0dGVuIGluIEMuIgorREVTQ1JJUFRJT04gPSAiTGliWUFNTCBpcyBhIEMgbGlicmFyeSBmb3IgcGFyc2luZyBhbmQgZW1pdHRpbmcgZGF0YSBpbiBZQU1MIDEuMSwgXAorYSBodW1hbi1yZWFkYWJsZSBkYXRhIHNlcmlhbGl6YXRpb24gZm9ybWF0LiAiCitIT01FUEFHRSA9ICJodHRwOi8vcHl5YW1sLm9yZy93aWtpL0xpYllBTUwiCitTRUNUSU9OID0gImxpYnMvZGV2ZWwiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NjAxNWYwODg3NTliMTBlMGJjMmJmNjQ4OThkNGFlMTciCisKK1NSQ19VUkkgPSAiaHR0cDovL3B5eWFtbC5vcmcvZG93bmxvYWQvbGlieWFtbC95YW1sLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9saWJ5YW1sLUNWRS0yMDE0LTkxMzAucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjVmZTAwY2RhMThjYTVkYWViNDM3NjJiODBjMzhlMDZlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdkYTY5NzFiNGJkMDhhOTg2ZGQyYTYxMzUzYmM0MjIzNjJiZDBlZGNjNjdkN2ViYWFjNjhjOTVmNzQxODI3NDkiCisKK1MgPSAiJHtXT1JLRElSfS95YW1sLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHo0L2x6NC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHo0L2x6NC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGU1NmQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sejQvbHo0LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiRXh0cmVtZWx5IEZhc3QgQ29tcHJlc3Npb24gYWxnb3JpdGhtIgorREVTQ1JJUFRJT04gPSAiTFo0IGlzIGEgdmVyeSBmYXN0IGxvc3NsZXNzIGNvbXByZXNzaW9uIGFsZ29yaXRobSwgcHJvdmlkaW5nIGNvbXByZXNzaW9uIHNwZWVkIGF0IDQwMCBNQi9zIHBlciBjb3JlLCBzY2FsYWJsZSB3aXRoIG11bHRpLWNvcmVzIENQVS4gSXQgYWxzbyBmZWF0dXJlcyBhbiBleHRyZW1lbHkgZmFzdCBkZWNvZGVyLCB3aXRoIHNwZWVkIGluIG11bHRpcGxlIEdCL3MgcGVyIGNvcmUsIHR5cGljYWxseSByZWFjaGluZyBSQU0gc3BlZWQgbGltaXRzIG9uIG11bHRpLWNvcmUgc3lzdGVtcy4iCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbGliL0xJQ0VOU0U7bWQ1PTBiMGQwNjNmMzdhNDQ3N2I1NGFmMjQ1OTQ3N2RjYWZkIgorCitTUkNSRVYgPSAiZDg2ZGM5MTY3NzFjMTI2YWZiNzk3NjM3ZGRhOWY2NDIxYzBjYjk5OCIKKworUFYgPSAiMTMxK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vQ3lhbjQ5NzMvbHo0LmdpdCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VNQUtFID0gIlBSRUZJWD0ke3ByZWZpeH0gQ0M9JyR7Q0N9JyBERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfSBJTkNMVURFRElSPSR7aW5jbHVkZWRpcn0iCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgKz0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vMDAwMS1Vc2UtbWVtY3B5LWluc3RlYWQtb2YtcmVpbnZlbnRpbmctaXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vMDAwMS1Vc2UtbWVtY3B5LWluc3RlYWQtb2YtcmVpbnZlbnRpbmctaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIzYTcwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by8wMDAxLVVzZS1tZW1jcHktaW5zdGVhZC1vZi1yZWludmVudGluZy1pdC5wYXRjaApAQCAtMCwwICsxLDcwIEBACitGcm9tOiBTaW1vbiBNY1ZpdHRpZSA8c21jdkBkZWJpYW4ub3JnPgorRGF0ZTogU3VuLCAyMyBOb3YgMjAxNCAyMjo1MDozMyArMDAwMAorU3ViamVjdDogVXNlIG1lbWNweSgpIGluc3RlYWQgb2YgcmVpbnZlbnRpbmcgaXQKKworZ2NjIGlubGluZXMgbWVtY3B5KCkgd2l0aCByZXN1bHRzIGFzIGZhc3QgYXMgaGFuZHdyaXR0ZW4gY29kZSAoYXQKK2xlYXN0IGluIG15IGJyaWVmIHRlc3Rpbmcgd2l0aCBsem9wKSwgYW5kIGtub3dzIHRoZSBhbGlnbm1lbnQKK2NvbnN0cmFpbnRzIGZvciBvdXIgYXJjaGl0ZWN0dXJlcy4KKworQ2hhbmdlIHN1Z2dlc3RlZCBieSBKdWxpYW4gVGF5bG9yLgorCitCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTc1NzAzNworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pbmlsem8vbWluaWx6by5jIHwgMTQgKysrKysrKysrKysrKysKKyBzcmMvbHpvX2Z1bmMuaCAgICB8IDE0ICsrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspCisKKworZGlmZiAtLWdpdCBhL21pbmlsem8vbWluaWx6by5jIGIvbWluaWx6by9taW5pbHpvLmMKK2luZGV4IGFiMmJlNWYuLjY5MTNjMmYgMTAwNjQ0CistLS0gYS9taW5pbHpvL21pbmlsem8uYworKysrIGIvbWluaWx6by9taW5pbHpvLmMKK0BAIC0zNTIzLDYgKzM1MjMsMjAgQEAgTFpPX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKHNpemVvZigqKGx6b19tZW1vcHNfVFU4cCkwKT09OCkKKyAgICAgaWYgKCh2b2lkKTAsIG5fX24gPiAwKSBkbyB7ICpkX19uKysgPSAqc19fbisrOyB9IHdoaWxlICgtLW5fX24gPiAwKTsgXAorICAgICBMWk9fQkxPQ0tfRU5ECisgCisrLyogRGViaWFuLXNwZWNpZmljIGNoYW5nZTogd2Uga25vdyB0aGF0IG91ciBjb21waWxlciBpbmxpbmVzIG1lbWNweSgpIHdpdGgKKysgKiBjb25zdGFudCBuIHRvIGJlIGFzIGZhc3QgYXMgaGFuZHdyaXR0ZW4gY29kZSwgYW5kIGtub3dzIHdoaWNoIGFyY2hpdGVjdHVyZXMKKysgKiBuZWVkIHRoaW5ncyBjb3JyZWN0bHkgYWxpZ25lZC4gKi8KKysjdW5kZWYgTFpPX01FTU9QU19DT1BZMQorKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFkyCisrI3VuZGVmIExaT19NRU1PUFNfQ09QWTQKKysjdW5kZWYgTFpPX01FTU9QU19DT1BZOAorKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFlOCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFkxKGRkLHNzKSBtZW1jcHkoZGQsIHNzLCAxKQorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZMihkZCxzcykgbWVtY3B5KGRkLCBzcywgMikKKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWTQoZGQsc3MpIG1lbWNweShkZCwgc3MsIDQpCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFk4KGRkLHNzKSBtZW1jcHkoZGQsIHNzLCA4KQorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZTihkZCxzcyxubikgbWVtY3B5KGRkLCBzcywgbm4pCisrCisgX19sem9fc3RhdGljX2ZvcmNlaW5saW5lIGx6b191aW50MTZfdCBsem9fbWVtb3BzX2dldF9sZTE2KGNvbnN0IGx6b192b2lkcCBzcykKKyB7CisgICAgIGx6b191aW50MTZfdCB2OworZGlmZiAtLWdpdCBhL3NyYy9sem9fZnVuYy5oIGIvc3JjL2x6b19mdW5jLmgKK2luZGV4IGRmYWE2NzYuLjFjYzFiNTMgMTAwNjQ0CistLS0gYS9zcmMvbHpvX2Z1bmMuaAorKysrIGIvc3JjL2x6b19mdW5jLmgKK0BAIC0zMzMsNiArMzMzLDIwIEBAIExaT19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihzaXplb2YoKihsem9fbWVtb3BzX1RVOHApMCk9PTgpCisgICAgIGlmICgodm9pZCkwLCBuX19uID4gMCkgZG8geyAqZF9fbisrID0gKnNfX24rKzsgfSB3aGlsZSAoLS1uX19uID4gMCk7IFwKKyAgICAgTFpPX0JMT0NLX0VORAorIAorKy8qIERlYmlhbi1zcGVjaWZpYyBjaGFuZ2U6IHdlIGtub3cgdGhhdCBvdXIgY29tcGlsZXIgaW5saW5lcyBtZW1jcHkoKSB3aXRoCisrICogY29uc3RhbnQgbiB0byBiZSBhcyBmYXN0IGFzIGhhbmR3cml0dGVuIGNvZGUsIGFuZCBrbm93cyB3aGljaCBhcmNoaXRlY3R1cmVzCisrICogbmVlZCB0aGluZ3MgY29ycmVjdGx5IGFsaWduZWQuICovCisrI3VuZGVmIExaT19NRU1PUFNfQ09QWTEKKysjdW5kZWYgTFpPX01FTU9QU19DT1BZMgorKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFk0CisrI3VuZGVmIExaT19NRU1PUFNfQ09QWTgKKysjdW5kZWYgTFpPX01FTU9QU19DT1BZTgorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZMShkZCxzcykgbWVtY3B5KGRkLCBzcywgMSkKKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWTIoZGQsc3MpIG1lbWNweShkZCwgc3MsIDIpCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFk0KGRkLHNzKSBtZW1jcHkoZGQsIHNzLCA0KQorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZOChkZCxzcykgbWVtY3B5KGRkLCBzcywgOCkKKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWU4oZGQsc3Msbm4pIG1lbWNweShkZCwgc3MsIG5uKQorKworIF9fbHpvX3N0YXRpY19mb3JjZWlubGluZSBsem9fdWludDE2X3QgbHpvX21lbW9wc19nZXRfbGUxNihjb25zdCBsem9fdm9pZHAgc3MpCisgeworICAgICBsem9fdWludDE2X3QgdjsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by9hY2luY2x1ZGUubTQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vYWNpbmNsdWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZDJjY2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsMzU4IEBACisKK0FDX0RFRlVOKFttZnhfQUNDX0NIRUNLX0VORElBTl0sIFsKK0FDX0NfQklHRU5ESUFOKFtBQ19ERUZJTkUoQUNDX0FCSV9CSUdfRU5ESUFOLDEsW0RlZmluZSB0byAxIGlmIHlvdXIgbWFjaGluZSBpcyBiaWcgZW5kaWFuLl0pXSxbQUNfREVGSU5FKEFDQ19BQklfTElUVExFX0VORElBTiwxLFtEZWZpbmUgdG8gMSBpZiB5b3VyIG1hY2hpbmUgaXMgbGl0dGxlIGVuZGlhbi5dKV0pCitdKSMKKworQUNfREVGVU4oW21meF9BQ0NfQ0hFQ0tfSEVBREVSU10sIFsKK0FDX0hFQURFUl9USU1FCitBQ19DSEVDS19IRUFERVJTKFthc3NlcnQuaCBjdHlwZS5oIGRpcmVudC5oIGVycm5vLmggZmNudGwuaCBmbG9hdC5oIGxpbWl0cy5oIG1hbGxvYy5oIG1lbW9yeS5oIHNldGptcC5oIHNpZ25hbC5oIHN0ZGFyZy5oIHN0ZGRlZi5oIHN0ZGludC5oIHN0ZGlvLmggc3RkbGliLmggc3RyaW5nLmggc3RyaW5ncy5oIHRpbWUuaCB1bmlzdGQuaCB1dGltZS5oIHN5cy9zdGF0Lmggc3lzL3RpbWUuaCBzeXMvdHlwZXMuaCBzeXMvd2FpdC5oXSkKK10pIworCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19GVU5DU10sIFsKK0FDX0NIRUNLX0ZVTkNTKGFjY2VzcyBhbGxvY2EgYXRleGl0IGF0b2kgYXRvbCBjaG1vZCBjaG93biBjdGltZSBkaWZmdGltZSBmc3RhdCBnZXR0aW1lb2ZkYXkgZ210aW1lIGxvY2FsdGltZSBsb25nam1wIGxzdGF0IG1lbWNtcCBtZW1jcHkgbWVtbW92ZSBtZW1zZXQgbWt0aW1lIHFzb3J0IHJhaXNlIHNldGptcCBzaWduYWwgc25wcmludGYgc3RyY2FzZWNtcCBzdHJjaHIgc3RyZHVwIHN0cmVycm9yIHN0cmZ0aW1lIHN0cmljbXAgc3RybmNhc2VjbXAgc3RybmljbXAgc3RycmNociBzdHJzdHIgdGltZSB1bWFzayB1dGltZSB2c25wcmludGYpCitdKSMKKworCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19TSVpFT0ZdLCBbCitBQ19DSEVDS19TSVpFT0Yoc2hvcnQpCitBQ19DSEVDS19TSVpFT0YoaW50KQorQUNfQ0hFQ0tfU0laRU9GKGxvbmcpCisKK0FDX0NIRUNLX1NJWkVPRihsb25nIGxvbmcpCitBQ19DSEVDS19TSVpFT0YoX19pbnQxNikKK0FDX0NIRUNLX1NJWkVPRihfX2ludDMyKQorQUNfQ0hFQ0tfU0laRU9GKF9faW50NjQpCisKK0FDX0NIRUNLX1NJWkVPRih2b2lkICopCitBQ19DSEVDS19TSVpFT0Yoc2l6ZV90KQorQUNfQ0hFQ0tfU0laRU9GKHB0cmRpZmZfdCkKK10pIworCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIENoZWNrIGZvciBBQ0NfY29uZm9ybWFuY2UKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitBQ19ERUZVTihbbWZ4X0FDQ19BQ0NDSEtdLCBbCittZnhfdG1wPSQxCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK2RubCBpbiBNYWtlZmlsZS5pbiAkKElOQ0xVREVTKSB3aWxsIGJlIGJlZm9yZSAkKENQUEZMQUdTKSwgc28gd2UgbWltaWMgdGhpcyBoZXJlCit0ZXN0ICJYJG1meF90bXAiID0gIlgiIHx8IENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB5b3VyIGNvbXBpbGVyIHBhc3NlcyB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3RdKQorCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitbWyNkZWZpbmUgQUNDX0NPTkZJR19OT19IRUFERVIgMQorI2luY2x1ZGUgImFjYy9hY2MuaCIKKyNpbmNsdWRlICJhY2MvYWNjX2luY2QuaCIKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihleHByKQorI2luY2x1ZGUgImFjYy9hY2NfY2hrLmNoIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKK3N0YXRpYyB2b2lkIHRlc3RfYWNjX2NvbXBpbGVfdGltZV9hc3NlcnQodm9pZCkgeworI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVChleHByKQorI2luY2x1ZGUgImFjYy9hY2NfY2hrLmNoIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKK30KKyN1bmRlZiBOREVCVUcKKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYyBpbnQgdGVzdF9hY2NfcnVuX3RpbWVfYXNzZXJ0KGludCByKSB7CisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIGFzc2VydChleHByKTsKKyNpbmNsdWRlICJhY2MvYWNjX2Noay5jaCIKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCityZXR1cm4gcjsKK30KK11dLCBbWwordGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCgpOworaWYgKHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydCgxKSAhPSAxKSByZXR1cm4gMTsKK11dCispXSkKKworbWZ4X3RtcD1GQUlMRUQKK19BQ19DT01QSUxFX0lGRUxTRShbXSwgW21meF90bXA9eWVzXSkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorCitDUFBGTEFHUz0kbWZ4X3NhdmVfQ1BQRkxBR1MKKworQUNfTVNHX1JFU1VMVChbJG1meF90bXBdKQorY2FzZSB4JG1meF90bXAgaW4KKyAgeHBhc3NlZCB8IHh5ZXMpIDs7CisgICopCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfTk9USUNFKFtZb3VyIGNvbXBpbGVyIGZhaWxlZCB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3QgLSBmb3IgZGV0YWlscyBzZWUgXSkKKyAgICBBQ19NU0dfTk9USUNFKFtgY29uZmlnLmxvZycuIFBsZWFzZSBjaGVjayB0aGF0IGxvZyBmaWxlIGFuZCBjb25zaWRlciBzZW5kaW5nXSkKKyAgICBBQ19NU0dfTk9USUNFKFthIHBhdGNoIG9yIGJ1Zy1yZXBvcnQgdG8gPCR7UEFDS0FHRV9CVUdSRVBPUlR9Pi5dKQorICAgIEFDX01TR19OT1RJQ0UoW1RoYW5rcyBmb3IgeW91ciBzdXBwb3J0Ll0pCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfRVJST1IoW0FDQyBjb25mb3JtYW5jZSB0ZXN0IGZhaWxlZC4gU3RvcC5dKQorZG5sICAgIEFTX0VYSVQKKyAgICA7OworZXNhYworXSkjIG1meF9BQ0NfQUNDQ0hLCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gQ2hlY2sgZm9yIEFDQ19jb25mb3JtYW5jZQorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0FDX0RFRlVOKFttZnhfTUlOSUFDQ19BQ0NDSEtdLCBbCittZnhfdG1wPSQxCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK2RubCBpbiBNYWtlZmlsZS5pbiAkKElOQ0xVREVTKSB3aWxsIGJlIGJlZm9yZSAkKENQUEZMQUdTKSwgc28gd2UgbWltaWMgdGhpcyBoZXJlCit0ZXN0ICJYJG1meF90bXAiID0gIlgiIHx8IENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB5b3VyIGNvbXBpbGVyIHBhc3NlcyB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3RdKQorCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitbWyNkZWZpbmUgQUNDX0NPTkZJR19OT19IRUFERVIgMQorI2RlZmluZSBBQ0NfV0FOVF9BQ0NfSU5DRF9IIDEKKyNpbmNsdWRlICQyCisKKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVF9IRUFERVIoZXhwcikKKyNpbmNsdWRlICQyCisKKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVChleHByKQorc3RhdGljIHZvaWQgdGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCh2b2lkKSB7CisjaW5jbHVkZSAkMgorfQorCisjdW5kZWYgTkRFQlVHCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZGVmaW5lIEFDQ19XQU5UX0FDQ19DSEtfQ0ggMQorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgYXNzZXJ0KGV4cHIpOworc3RhdGljIGludCB0ZXN0X2FjY19ydW5fdGltZV9hc3NlcnQoaW50IHIpIHsKKyNpbmNsdWRlICQyCityZXR1cm4gcjsKK30KK11dLCBbWwordGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCgpOworaWYgKHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydCgxKSAhPSAxKSByZXR1cm4gMTsKK11dCispXSkKKworbWZ4X3RtcD1GQUlMRUQKK19BQ19DT01QSUxFX0lGRUxTRShbXSwgW21meF90bXA9eWVzXSkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorCitDUFBGTEFHUz0kbWZ4X3NhdmVfQ1BQRkxBR1MKKworQUNfTVNHX1JFU1VMVChbJG1meF90bXBdKQorY2FzZSB4JG1meF90bXAgaW4KKyAgeHBhc3NlZCB8IHh5ZXMpIDs7CisgICopCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfTk9USUNFKFtZb3VyIGNvbXBpbGVyIGZhaWxlZCB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3QgLSBmb3IgZGV0YWlscyBzZWUgXSkKKyAgICBBQ19NU0dfTk9USUNFKFtgY29uZmlnLmxvZycuIFBsZWFzZSBjaGVjayB0aGF0IGxvZyBmaWxlIGFuZCBjb25zaWRlciBzZW5kaW5nXSkKKyAgICBBQ19NU0dfTk9USUNFKFthIHBhdGNoIG9yIGJ1Zy1yZXBvcnQgdG8gPCR7UEFDS0FHRV9CVUdSRVBPUlR9Pi5dKQorICAgIEFDX01TR19OT1RJQ0UoW1RoYW5rcyBmb3IgeW91ciBzdXBwb3J0Ll0pCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfRVJST1IoW0FDQyBjb25mb3JtYW5jZSB0ZXN0IGZhaWxlZC4gU3RvcC5dKQorZG5sICAgIEFTX0VYSVQKKyAgICA7OworZXNhYworXSkjIG1meF9NSU5JQUNDX0FDQ0NISworCisKKworIyBzZXJpYWwgMQorCitBQ19ERUZVTihbbWZ4X1BST0dfQ1BQRkxBR1NdLCBbCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIEMgcHJlcHJvY2Vzc29yIG5lZWRzIHNwZWNpYWwgZmxhZ3NdKQorCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitbWyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiAoMzI3NjcgPj0gNDI5NDk2NzI5NXVsKSB8fCAoNjU1MzV1ID49IDQyOTQ5NjcyOTV1bCkKKyMgIGluY2x1ZGUgInlvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDEiCisjZWxpZiAoMHhmZmZmdSA9PSAweGZmZmZmZmZmdWwpCisjICBpbmNsdWRlICJ5b3VyIEMgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAyIgorI2VsaWYgKDMyNzY3ID49IFVMT05HX01BWCkgfHwgKDY1NTM1dSA+PSBVTE9OR19NQVgpCisjICBpbmNsdWRlICJ5b3VyIEMgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAzIgorI2VuZGlmCitdXSwgW1sgXV0KKyldKQorCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK21meF90bXA9RVJST1IKK2ZvciBtZnhfYXJnIGluICIiIC1uby1jcHAtcHJlY29tcAorZG8KKyAgQ1BQRkxBR1M9IiRtZnhfYXJnICRtZnhfc2F2ZV9DUFBGTEFHUyIKKyAgX0FDX0NPTVBJTEVfSUZFTFNFKFtdLAorW21meF90bXA9JG1meF9hcmcKK2JyZWFrXSkKK2RvbmUKK0NQUEZMQUdTPSRtZnhfc2F2ZV9DUFBGTEFHUworcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CitjYXNlIHgkbWZ4X3RtcCBpbgorICB4KQorICAgIEFDX01TR19SRVNVTFQoW25vbmUgbmVlZGVkXSkgOzsKKyAgeEVSUk9SKQorICAgIEFDX01TR19SRVNVTFQoW0VSUk9SXSkKKyAgICBBQ19NU0dfRVJST1IoW3lvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIC0gZm9yIGRldGFpbHMgc2VlIGNvbmZpZy5sb2ddKQorICAgIDs7CisgICopCisgICAgQUNfTVNHX1JFU1VMVChbJG1meF90bXBdKQorICAgIENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisgICAgOzsKK2VzYWMKK10pIyBtZnhfUFJPR19DUFBGTEFHUworCisKKworIyBzZXJpYWwgMworCitBQ19ERUZVTihbbWZ4X0NIRUNLX0hFQURFUl9TQU5FX0xJTUlUU19IXSwgWworQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbGltaXRzLmggaXMgc2FuZV0sCittZnhfY3ZfaGVhZGVyX3NhbmVfbGltaXRzX2gsCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiAoMzI3NjcgPj0gNDI5NDk2NzI5NXVsKSB8fCAoNjU1MzV1ID49IDQyOTQ5NjcyOTV1bCkKKyMgIGlmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKF9fR05VQ19fKQorIyAgICBlcnJvciAieW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIC0gdXNlIGNvbXBpbGVyIG9wdGlvbiAtbm8tY3BwLXByZWNvbXAiCisjICBlbHNlCisjICAgIGluY2x1ZGUgInlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiIKKyMgIGVuZGlmCisjZW5kaWYKKyNkZWZpbmUgTUZYXzB4ZmZmZiAgICAgICAgICAweGZmZmYKKyNkZWZpbmUgTUZYXzB4ZmZmZmZmZmZMICAgICA0Mjk0OTY3Mjk1dWwKKyNpZiAhZGVmaW5lZChDSEFSX0JJVCkgfHwgKENIQVJfQklUICE9IDgpCisjICBpbmNsdWRlICJlcnJvciBDSEFSX0JJVCIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVDSEFSX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVDSEFSX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVVNIUlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVVNIUlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVSU5UX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVTE9OR19NQVgpCisjICBpbmNsdWRlICJlcnJvciBVTE9OR19NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNIUlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgU0hSVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKElOVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBJTlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMT05HX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIExPTkdfTUFYIDEiCisjZW5kaWYKKyNpZiAoVUNIQVJfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVDSEFSX01BWCAyIgorI2VuZGlmCisjaWYgKFVTSFJUX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggMiIKKyNlbmRpZgorI2lmIChVSU5UX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVSU5UX01BWCAyIgorI2VuZGlmCisjaWYgKFVMT05HX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVTE9OR19NQVggMiIKKyNlbmRpZgorI2lmIChVQ0hBUl9NQVggPCAweGZmKQorIyAgaW5jbHVkZSAiZXJyb3IgVUNIQVJfTUFYIDMiCisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYIDwgTUZYXzB4ZmZmZikKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCAzIgorI2VuZGlmCisjaWYgKFVJTlRfTUFYIDwgTUZYXzB4ZmZmZikKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIDMiCisjZW5kaWYKKyNpZiAoVUxPTkdfTUFYIDwgTUZYXzB4ZmZmZmZmZmZMKQorIyAgaW5jbHVkZSAiZXJyb3IgVUxPTkdfTUFYIDMiCisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYID4gVUlOVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggdnMgVUlOVF9NQVgiCisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPiBVTE9OR19NQVgpCisjICBpbmNsdWRlICJlcnJvciBVSU5UX01BWCB2cyBVTE9OR19NQVgiCisjZW5kaWYKK11dLCBbWworI2lmIChVU0hSVF9NQVggPT0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQyYVsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA9PSAyKV07IH0KKyNlbGlmIChVU0hSVF9NQVggPj0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQyYlsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA+IDIpXTsgfQorI2VuZGlmCisjaWYgKFVJTlRfTUFYID09IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2ludDJhWzEgLSAyICogIShzaXplb2YoaW50KSA9PSAyKV07IH0KKyNlbGlmIChVSU5UX01BWCA+PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQyYlsxIC0gMiAqICEoc2l6ZW9mKGludCkgPiAyKV07IH0KKyNlbmRpZgorI2lmIChVTE9OR19NQVggPT0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfbG9uZzJhWzEgLSAyICogIShzaXplb2YobG9uZykgPT0gMildOyB9CisjZWxpZiAoVUxPTkdfTUFYID49IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2xvbmcyYlsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID4gMildOyB9CisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYID09IE1GWF8weGZmZmZmZmZmTCkKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQ0YVsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA9PSA0KV07IH0KKyNlbGlmIChVU0hSVF9NQVggPj0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDRiWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID4gNCldOyB9CisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPT0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQ0YVsxIC0gMiAqICEoc2l6ZW9mKGludCkgPT0gNCldOyB9CisjZWxpZiAoVUlOVF9NQVggPj0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQ0YlsxIC0gMiAqICEoc2l6ZW9mKGludCkgPiA0KV07IH0KKyNlbmRpZgorI2lmIChVTE9OR19NQVggPT0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nNGFbMSAtIDIgKiAhKHNpemVvZihsb25nKSA9PSA0KV07IH0KKyNlbGlmIChVTE9OR19NQVggPj0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nNGJbMSAtIDIgKiAhKHNpemVvZihsb25nKSA+IDQpXTsgfQorI2VuZGlmCitdXSldLAorW21meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaD15ZXNdLAorW21meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaD1ub10pXSkKK10pCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIHN0YW5kYXJkCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQUNfREVGVU4oW21meF9MWk9fQ0hFQ0tfRU5ESUFOXSwgWworQUNfQ19CSUdFTkRJQU4oW0FDX0RFRklORShMWk9fQUJJX0JJR19FTkRJQU4sMSxbRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGJpZyBlbmRpYW4uXSldLFtBQ19ERUZJTkUoTFpPX0FCSV9MSVRUTEVfRU5ESUFOLDEsW0RlZmluZSB0byAxIGlmIHlvdXIgbWFjaGluZSBpcyBsaXR0bGUgZW5kaWFuLl0pXSkKK10pIworCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZG5sIG1vcmUgdHlwZXMgd2hpY2ggYXJlIG5vdCB5ZXQgY292ZXJlZCBieSBBQ0MKKworQUNfREVGVU4oW21meF9DSEVDS19TSVpFT0ZdLCBbCitBQ19DSEVDS19TSVpFT0YoX19pbnQzMikKK0FDX0NIRUNLX1NJWkVPRihpbnRtYXhfdCkKK0FDX0NIRUNLX1NJWkVPRih1aW50bWF4X3QpCitBQ19DSEVDS19TSVpFT0YoaW50cHRyX3QpCitBQ19DSEVDS19TSVpFT0YodWludHB0cl90KQorCitBQ19DSEVDS19TSVpFT0YoZmxvYXQpCitBQ19DSEVDS19TSVpFT0YoZG91YmxlKQorQUNfQ0hFQ0tfU0laRU9GKGxvbmcgZG91YmxlKQorCitBQ19DSEVDS19TSVpFT0YoZGV2X3QpCitBQ19DSEVDS19TSVpFT0YoZnBvc190KQorQUNfQ0hFQ0tfU0laRU9GKG1vZGVfdCkKK0FDX0NIRUNLX1NJWkVPRihvZmZfdCkKK0FDX0NIRUNLX1NJWkVPRihzc2l6ZV90KQorQUNfQ0hFQ0tfU0laRU9GKHRpbWVfdCkKK10pIworCisKKworQUNfREVGVU4oW21meF9DSEVDS19MSUJfV0lOTU1dLCBbCitpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzOyB0aGVuCitjYXNlICRob3N0X29zIGluCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgIHRlc3QgIlgkTElCUyIgIT0gIlgiICYmIExJQlM9IiRMSUJTICIKKyAgICAgTElCUz0iJHtMSUJTfS1sd2lubW0iIDs7CisqKQorICAgICA7OworZXNhYworZmkKK10pIworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWE3NzQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvL3J1bi1wdGVzdApAQCAtMCwwICsxLDggQEAKKyMhL2Jpbi9zaAorCisuL2x6b3Rlc3QgLW1hdmFpbCAtbjEwIC1xIC9ldGMvc2VydmljZXMKK0xaT1RFU1Q9Li9sem90ZXN0IC9iaW4vc2ggLWUgIi4vY2hlY2suc2giICIvZXRjIgorLi9hbGlnbgorLi9jaGtzdW0KKy4vc2ltcGxlCisuL3Rlc3RtaW5pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem9fMi4wOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6b18yLjA5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5Nzg2MTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem9fMi4wOS5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIkxvc3NsZXNzIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9sem9faW5pdC5jO2JlZ2lubGluZT01O2VuZGxpbmU9MjU7bWQ1PTM1NTAyMzgzNWE5YjllZWI3MGFiODk1Mzk1ZTk1MWZmIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by9kb3dubG9hZC9sem8tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVXNlLW1lbWNweS1pbnN0ZWFkLW9mLXJlaW52ZW50aW5nLWl0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FjaW5jbHVkZS5tNCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjN2ZmYzlhMTAzYWZlMmQxYmJhMGIwMTVlN2FhODg3ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmMjk0YTdjZWQzMTMwNjNjMDU3YzUwNDI1N2Y0MzdjODMzNWM0MWJmZWVkMjM1MzFlZTRlNmEyYjg3YmNiMzRjIgorCitpbmhlcml0IGF1dG90b29scyBwdGVzdAorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJY3AgJHtXT1JLRElSfS9hY2luY2x1ZGUubTQgJHtTfS8KK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0PSR7RH0ke1BURVNUX1BBVEh9CisJY3AgJHtTfS91dGlsL2NoZWNrLnNoICR0CisJY3AgJHtCfS9taW5pbHpvL3Rlc3RtaW5pICR0CisJZm9yIGkgaW4gdGVzdHMvYWxpZ24gdGVzdHMvY2hrc3VtIGx6b3Rlc3QvbHpvdGVzdCBleGFtcGxlcy9zaW1wbGUKKwkJZG8gY3AgJHtCfS9gZGlybmFtZSAkaWAvLmxpYnMvYGJhc2VuYW1lICRpYCAkdDsgXAorCWRvbmUKK30KKworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC8wMDAxLXVzZS1zdGF0aWMtaW5saW5lcy1hcy10aGUtZXh0ZXJuYWwtaW5saW5lLWRlZmluaXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC8wMDAxLXVzZS1zdGF0aWMtaW5saW5lcy1hcy10aGUtZXh0ZXJuYWwtaW5saW5lLWRlZmluaXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY3Yjg4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wLzAwMDEtdXNlLXN0YXRpYy1pbmxpbmVzLWFzLXRoZS1leHRlcm5hbC1pbmxpbmUtZGVmaW5pdGlvbi5wYXRjaApAQCAtMCwwICsxLDEwMCBAQAorRnJvbSBlY2NjYmNmNjZkYTUzNzc5ZDg4ZTM4ZTJhZjdmODJlZmY4ZGRlN2Y4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTYgQXVnIDIwMTUgMTA6MzU6NDcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdXNlIHN0YXRpYyBpbmxpbmVzIGFzIHRoZSBleHRlcm5hbCBpbmxpbmUgZGVmaW5pdGlvbiBoYXMKKyBjaGFuZ2VkIHdpdGggZ2NjNQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHNyYy9taW5pYWNjLmggfCAyNCArKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9taW5pYWNjLmggYi9zcmMvbWluaWFjYy5oCitpbmRleCAwOWU2ZjBjLi5jYWU5OGQxIDEwMDY0NAorLS0tIGEvc3JjL21pbmlhY2MuaAorKysrIGIvc3JjL21pbmlhY2MuaAorQEAgLTI4ODAsOCArMjg4MCw3IEBAIHR5cGVkZWYgdm9pZCAoX19hY2NfY2RlY2xfc2lnaGFuZGxlciAqYWNjX3NpZ2hhbmRsZXJfdCkoYWNjX3NpZ25vX3QpOworICNpZiAhKEFDQ19DRkdfTk9fSU5MSU5FX0FTTSkgJiYgKF9fYWNjX0hBVkVfZm9yY2VpbmxpbmUpCisgI2lmIChBQ0NfQVJDSF9QT1dFUlBDICYmIEFDQ19BQklfQklHX0VORElBTikgJiYgKEFDQ19DQ19HTlVDKQorICNpZiAhZGVmaW5lZChBQ0NfVUFfR0VUX0xFMTYpCistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApOworLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApIHsKKyAgICAgX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQxNmVfdCogcCA9IChfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDE2ZV90KikgcHA7CisgICAgIHVuc2lnbmVkIGxvbmcgdjsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImxoYnJ4ICUwLDAsJTEiIDogIj1yIiAodikgOiAiciIgKHApLCAibSIgKCpwKSk7CitAQCAtMjg5MCw4ICsyODg5LDcgQEAgZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QKKyAjZGVmaW5lIEFDQ19VQV9HRVRfTEUxNihwKSAgICAgIF9fQUNDX1VBX0dFVF9MRTE2KHApCisgI2VuZGlmCisgI2lmICFkZWZpbmVkKEFDQ19VQV9TRVRfTEUxNikKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KTsKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworICAgICBfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDE2ZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MTZlX3QqKSBwcDsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aGJyeCAlMiwwLCUxIiA6ICI9bSIgKCpwKSA6ICJyIiAocCksICJyIiAodikpOworIH0KK0BAIC0yOTE2LDggKzI5MTQsNyBAQCBleHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaQorICNpZiAhKEFDQ19DRkdfTk9fSU5MSU5FX0FTTSkgJiYgKF9fYWNjX0hBVkVfZm9yY2VpbmxpbmUpCisgI2lmIChBQ0NfQVJDSF9QT1dFUlBDICYmIEFDQ19BQklfQklHX0VORElBTikgJiYgKEFDQ19DQ19HTlVDKQorICNpZiAhZGVmaW5lZChBQ0NfVUFfR0VUX0xFMzIpCistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApOworLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApIHsKKyAgICAgX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQzMmVfdCogcCA9IChfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDMyZV90KikgcHA7CisgICAgIHVuc2lnbmVkIGxvbmcgdjsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImx3YnJ4ICUwLDAsJTEiIDogIj1yIiAodikgOiAiciIgKHApLCAibSIgKCpwKSk7CitAQCAtMjkyNiw4ICsyOTIzLDcgQEAgZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QKKyAjZGVmaW5lIEFDQ19VQV9HRVRfTEUzMihwKSAgICAgIF9fQUNDX1VBX0dFVF9MRTMyKHApCisgI2VuZGlmCisgI2lmICFkZWZpbmVkKEFDQ19VQV9TRVRfTEUzMikKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KTsKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworICAgICBfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDMyZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MzJlX3QqKSBwcDsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0d2JyeCAlMiwwLCUxIiA6ICI9bSIgKCpwKSA6ICJyIiAocCksICJyIiAodikpOworIH0KK0BAIC0zMzA3LDggKzMzMDMsNyBAQCB0eXBlZGVmIHZvaWQgKF9fYWNjX2NkZWNsX3NpZ2hhbmRsZXIgKmFjY19zaWdoYW5kbGVyX3QpKGFjY19zaWdub190KTsKKyAjaWYgIShBQ0NfQ0ZHX05PX0lOTElORV9BU00pICYmIChfX2FjY19IQVZFX2ZvcmNlaW5saW5lKQorICNpZiAoQUNDX0FSQ0hfUE9XRVJQQyAmJiBBQ0NfQUJJX0JJR19FTkRJQU4pICYmIChBQ0NfQ0NfR05VQykKKyAjaWYgIWRlZmluZWQoQUNDX1VBX0dFVF9MRTE2KQorLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKTsKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCkgeworK3N0YXRpYyBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKSB7CisgICAgIF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50MTZlX3QqIHAgPSAoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQxNmVfdCopIHBwOworICAgICB1bnNpZ25lZCBsb25nIHY7CisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsaGJyeCAlMCwwLCUxIiA6ICI9ciIgKHYpIDogInIiIChwKSwgIm0iICgqcCkpOworQEAgLTMzMTcsOCArMzMxMiw3IEBAIGV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0CisgI2RlZmluZSBBQ0NfVUFfR0VUX0xFMTYocCkgICAgICBfX0FDQ19VQV9HRVRfTEUxNihwKQorICNlbmRpZgorICNpZiAhZGVmaW5lZChBQ0NfVUFfU0VUX0xFMTYpCistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdik7CistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworK3N0YXRpYyBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpIHsKKyAgICAgX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQxNmVfdCogcCA9IChfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDE2ZV90KikgcHA7CisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJzdGhicnggJTIsMCwlMSIgOiAiPW0iICgqcCkgOiAiciIgKHApLCAiciIgKHYpKTsKKyB9CitAQCAtMzM0Myw4ICszMzM3LDcgQEAgZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2kKKyAjaWYgIShBQ0NfQ0ZHX05PX0lOTElORV9BU00pICYmIChfX2FjY19IQVZFX2ZvcmNlaW5saW5lKQorICNpZiAoQUNDX0FSQ0hfUE9XRVJQQyAmJiBBQ0NfQUJJX0JJR19FTkRJQU4pICYmIChBQ0NfQ0NfR05VQykKKyAjaWYgIWRlZmluZWQoQUNDX1VBX0dFVF9MRTMyKQorLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKTsKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCkgeworK3N0YXRpYyBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKSB7CisgICAgIF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50MzJlX3QqIHAgPSAoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQzMmVfdCopIHBwOworICAgICB1bnNpZ25lZCBsb25nIHY7CisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsd2JyeCAlMCwwLCUxIiA6ICI9ciIgKHYpIDogInIiIChwKSwgIm0iICgqcCkpOworQEAgLTMzNTMsOCArMzM0Niw3IEBAIGV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0CisgI2RlZmluZSBBQ0NfVUFfR0VUX0xFMzIocCkgICAgICBfX0FDQ19VQV9HRVRfTEUzMihwKQorICNlbmRpZgorICNpZiAhZGVmaW5lZChBQ0NfVUFfU0VUX0xFMzIpCistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdik7CistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworK3N0YXRpYyBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpIHsKKyAgICAgX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQzMmVfdCogcCA9IChfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDMyZV90KikgcHA7CisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJzdHdicnggJTIsMCwlMSIgOiAiPW0iICgqcCkgOiAiciIgKHApLCAiciIgKHYpKTsKKyB9CistLSAKKzIuNS4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wL2FjaW5jbHVkZS5tNCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wL2FjaW5jbHVkZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDI5YzE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3AvYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsMzkwIEBACisKK0FDX0RFRlVOKFttZnhfQUNDX0NIRUNLX0VORElBTl0sIFsKK0FDX0NfQklHRU5ESUFOKFtBQ19ERUZJTkUoQUNDX0FCSV9CSUdfRU5ESUFOLDEsW0RlZmluZSB0byAxIGlmIHlvdXIgbWFjaGluZSBpcyBiaWcgZW5kaWFuLl0pXSxbQUNfREVGSU5FKEFDQ19BQklfTElUVExFX0VORElBTiwxLFtEZWZpbmUgdG8gMSBpZiB5b3VyIG1hY2hpbmUgaXMgbGl0dGxlIGVuZGlhbi5dKV0pCitdKSMKKworQUNfREVGVU4oW21meF9BQ0NfQ0hFQ0tfSEVBREVSU10sIFsKK0FDX0hFQURFUl9USU1FCitBQ19DSEVDS19IRUFERVJTKFthc3NlcnQuaCBjdHlwZS5oIGRpcmVudC5oIGVycm5vLmggZmNudGwuaCBmbG9hdC5oIGxpbWl0cy5oIG1hbGxvYy5oIG1lbW9yeS5oIHNldGptcC5oIHNpZ25hbC5oIHN0ZGFyZy5oIHN0ZGRlZi5oIHN0ZGludC5oIHN0ZGlvLmggc3RkbGliLmggc3RyaW5nLmggc3RyaW5ncy5oIHRpbWUuaCB1bmlzdGQuaCB1dGltZS5oIHN5cy9zdGF0Lmggc3lzL3RpbWUuaCBzeXMvdHlwZXMuaCBzeXMvd2FpdC5oXSkKK10pIworCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19GVU5DU10sIFsKK0FDX0NIRUNLX0ZVTkNTKGFjY2VzcyBhbGxvY2EgYXRleGl0IGF0b2kgYXRvbCBjaG1vZCBjaG93biBjdGltZSBkaWZmdGltZSBmc3RhdCBnZXR0aW1lb2ZkYXkgZ210aW1lIGxvY2FsdGltZSBsb25nam1wIGxzdGF0IG1lbWNtcCBtZW1jcHkgbWVtbW92ZSBtZW1zZXQgbWt0aW1lIHFzb3J0IHJhaXNlIHNldGptcCBzaWduYWwgc25wcmludGYgc3RyY2FzZWNtcCBzdHJjaHIgc3RyZHVwIHN0cmVycm9yIHN0cmZ0aW1lIHN0cmljbXAgc3RybmNhc2VjbXAgc3RybmljbXAgc3RycmNociBzdHJzdHIgdGltZSB1bWFzayB1dGltZSB2c25wcmludGYpCitdKSMKKworCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19TSVpFT0ZdLCBbCitBQ19DSEVDS19TSVpFT0Yoc2hvcnQpCitBQ19DSEVDS19TSVpFT0YoaW50KQorQUNfQ0hFQ0tfU0laRU9GKGxvbmcpCisKK0FDX0NIRUNLX1NJWkVPRihsb25nIGxvbmcpCitBQ19DSEVDS19TSVpFT0YoX19pbnQxNikKK0FDX0NIRUNLX1NJWkVPRihfX2ludDMyKQorQUNfQ0hFQ0tfU0laRU9GKF9faW50NjQpCisKK0FDX0NIRUNLX1NJWkVPRih2b2lkICopCitBQ19DSEVDS19TSVpFT0Yoc2l6ZV90KQorQUNfQ0hFQ0tfU0laRU9GKHB0cmRpZmZfdCkKK10pIworCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIENoZWNrIGZvciBBQ0NfY29uZm9ybWFuY2UKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitBQ19ERUZVTihbbWZ4X0FDQ19BQ0NDSEtdLCBbCittZnhfdG1wPSQxCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK2RubCBpbiBNYWtlZmlsZS5pbiAkKElOQ0xVREVTKSB3aWxsIGJlIGJlZm9yZSAkKENQUEZMQUdTKSwgc28gd2UgbWltaWMgdGhpcyBoZXJlCit0ZXN0ICJYJG1meF90bXAiID0gIlgiIHx8IENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB5b3VyIGNvbXBpbGVyIHBhc3NlcyB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3RdKQorCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitbWyNkZWZpbmUgQUNDX0NPTkZJR19OT19IRUFERVIgMQorI2luY2x1ZGUgImFjYy9hY2MuaCIKKyNpbmNsdWRlICJhY2MvYWNjX2luY2QuaCIKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihleHByKQorI2luY2x1ZGUgImFjYy9hY2NfY2hrLmNoIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKK3N0YXRpYyB2b2lkIHRlc3RfYWNjX2NvbXBpbGVfdGltZV9hc3NlcnQodm9pZCkgeworI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVChleHByKQorI2luY2x1ZGUgImFjYy9hY2NfY2hrLmNoIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKK30KKyN1bmRlZiBOREVCVUcKKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYyBpbnQgdGVzdF9hY2NfcnVuX3RpbWVfYXNzZXJ0KGludCByKSB7CisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIGFzc2VydChleHByKTsKKyNpbmNsdWRlICJhY2MvYWNjX2Noay5jaCIKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCityZXR1cm4gcjsKK30KK11dLCBbWwordGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCgpOworaWYgKHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydCgxKSAhPSAxKSByZXR1cm4gMTsKK11dCispXSkKKworbWZ4X3RtcD1GQUlMRUQKK19BQ19DT01QSUxFX0lGRUxTRShbXSwgW21meF90bXA9eWVzXSkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorCitDUFBGTEFHUz0kbWZ4X3NhdmVfQ1BQRkxBR1MKKworQUNfTVNHX1JFU1VMVChbJG1meF90bXBdKQorY2FzZSB4JG1meF90bXAgaW4KKyAgeHBhc3NlZCB8IHh5ZXMpIDs7CisgICopCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfTk9USUNFKFtZb3VyIGNvbXBpbGVyIGZhaWxlZCB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3QgLSBmb3IgZGV0YWlscyBzZWUgXSkKKyAgICBBQ19NU0dfTk9USUNFKFtgY29uZmlnLmxvZycuIFBsZWFzZSBjaGVjayB0aGF0IGxvZyBmaWxlIGFuZCBjb25zaWRlciBzZW5kaW5nXSkKKyAgICBBQ19NU0dfTk9USUNFKFthIHBhdGNoIG9yIGJ1Zy1yZXBvcnQgdG8gPCR7UEFDS0FHRV9CVUdSRVBPUlR9Pi5dKQorICAgIEFDX01TR19OT1RJQ0UoW1RoYW5rcyBmb3IgeW91ciBzdXBwb3J0Ll0pCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfRVJST1IoW0FDQyBjb25mb3JtYW5jZSB0ZXN0IGZhaWxlZC4gU3RvcC5dKQorZG5sICAgIEFTX0VYSVQKKyAgICA7OworZXNhYworXSkjIG1meF9BQ0NfQUNDQ0hLCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gQ2hlY2sgZm9yIEFDQ19jb25mb3JtYW5jZQorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0FDX0RFRlVOKFttZnhfTUlOSUFDQ19BQ0NDSEtdLCBbCittZnhfdG1wPSQxCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK2RubCBpbiBNYWtlZmlsZS5pbiAkKElOQ0xVREVTKSB3aWxsIGJlIGJlZm9yZSAkKENQUEZMQUdTKSwgc28gd2UgbWltaWMgdGhpcyBoZXJlCit0ZXN0ICJYJG1meF90bXAiID0gIlgiIHx8IENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB5b3VyIGNvbXBpbGVyIHBhc3NlcyB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3RdKQorCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitbWyNkZWZpbmUgQUNDX0NPTkZJR19OT19IRUFERVIgMQorI2RlZmluZSBBQ0NfV0FOVF9BQ0NfSU5DRF9IIDEKKyNpbmNsdWRlICQyCisKKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVF9IRUFERVIoZXhwcikKKyNpbmNsdWRlICQyCisKKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVChleHByKQorc3RhdGljIHZvaWQgdGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCh2b2lkKSB7CisjaW5jbHVkZSAkMgorfQorCisjdW5kZWYgTkRFQlVHCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZGVmaW5lIEFDQ19XQU5UX0FDQ19DSEtfQ0ggMQorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgYXNzZXJ0KGV4cHIpOworc3RhdGljIGludCB0ZXN0X2FjY19ydW5fdGltZV9hc3NlcnQoaW50IHIpIHsKKyNpbmNsdWRlICQyCityZXR1cm4gcjsKK30KK11dLCBbWwordGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCgpOworaWYgKHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydCgxKSAhPSAxKSByZXR1cm4gMTsKK11dCispXSkKKworbWZ4X3RtcD1GQUlMRUQKK19BQ19DT01QSUxFX0lGRUxTRShbXSwgW21meF90bXA9eWVzXSkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorCitDUFBGTEFHUz0kbWZ4X3NhdmVfQ1BQRkxBR1MKKworQUNfTVNHX1JFU1VMVChbJG1meF90bXBdKQorY2FzZSB4JG1meF90bXAgaW4KKyAgeHBhc3NlZCB8IHh5ZXMpIDs7CisgICopCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfTk9USUNFKFtZb3VyIGNvbXBpbGVyIGZhaWxlZCB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3QgLSBmb3IgZGV0YWlscyBzZWUgXSkKKyAgICBBQ19NU0dfTk9USUNFKFtgY29uZmlnLmxvZycuIFBsZWFzZSBjaGVjayB0aGF0IGxvZyBmaWxlIGFuZCBjb25zaWRlciBzZW5kaW5nXSkKKyAgICBBQ19NU0dfTk9USUNFKFthIHBhdGNoIG9yIGJ1Zy1yZXBvcnQgdG8gPCR7UEFDS0FHRV9CVUdSRVBPUlR9Pi5dKQorICAgIEFDX01TR19OT1RJQ0UoW1RoYW5rcyBmb3IgeW91ciBzdXBwb3J0Ll0pCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfRVJST1IoW0FDQyBjb25mb3JtYW5jZSB0ZXN0IGZhaWxlZC4gU3RvcC5dKQorZG5sICAgIEFTX0VYSVQKKyAgICA7OworZXNhYworXSkjIG1meF9NSU5JQUNDX0FDQ0NISworCisKKworIyBzZXJpYWwgMQorCitBQ19ERUZVTihbbWZ4X1BST0dfQ1BQRkxBR1NdLCBbCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIEMgcHJlcHJvY2Vzc29yIG5lZWRzIHNwZWNpYWwgZmxhZ3NdKQorCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitbWyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiAoMzI3NjcgPj0gNDI5NDk2NzI5NXVsKSB8fCAoNjU1MzV1ID49IDQyOTQ5NjcyOTV1bCkKKyMgIGluY2x1ZGUgInlvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDEiCisjZWxpZiAoMHhmZmZmdSA9PSAweGZmZmZmZmZmdWwpCisjICBpbmNsdWRlICJ5b3VyIEMgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAyIgorI2VsaWYgKDMyNzY3ID49IFVMT05HX01BWCkgfHwgKDY1NTM1dSA+PSBVTE9OR19NQVgpCisjICBpbmNsdWRlICJ5b3VyIEMgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAzIgorI2VuZGlmCitdXSwgW1sgXV0KKyldKQorCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK21meF90bXA9RVJST1IKK2ZvciBtZnhfYXJnIGluICIiIC1uby1jcHAtcHJlY29tcAorZG8KKyAgQ1BQRkxBR1M9IiRtZnhfYXJnICRtZnhfc2F2ZV9DUFBGTEFHUyIKKyAgX0FDX0NPTVBJTEVfSUZFTFNFKFtdLAorW21meF90bXA9JG1meF9hcmcKK2JyZWFrXSkKK2RvbmUKK0NQUEZMQUdTPSRtZnhfc2F2ZV9DUFBGTEFHUworcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CitjYXNlIHgkbWZ4X3RtcCBpbgorICB4KQorICAgIEFDX01TR19SRVNVTFQoW25vbmUgbmVlZGVkXSkgOzsKKyAgeEVSUk9SKQorICAgIEFDX01TR19SRVNVTFQoW0VSUk9SXSkKKyAgICBBQ19NU0dfRVJST1IoW3lvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIC0gZm9yIGRldGFpbHMgc2VlIGNvbmZpZy5sb2ddKQorICAgIDs7CisgICopCisgICAgQUNfTVNHX1JFU1VMVChbJG1meF90bXBdKQorICAgIENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisgICAgOzsKK2VzYWMKK10pIyBtZnhfUFJPR19DUFBGTEFHUworCisKKworIyBzZXJpYWwgMworCitBQ19ERUZVTihbbWZ4X0NIRUNLX0hFQURFUl9TQU5FX0xJTUlUU19IXSwgWworQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbGltaXRzLmggaXMgc2FuZV0sCittZnhfY3ZfaGVhZGVyX3NhbmVfbGltaXRzX2gsCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiAoMzI3NjcgPj0gNDI5NDk2NzI5NXVsKSB8fCAoNjU1MzV1ID49IDQyOTQ5NjcyOTV1bCkKKyMgIGlmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKF9fR05VQ19fKQorIyAgICBlcnJvciAieW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIC0gdXNlIGNvbXBpbGVyIG9wdGlvbiAtbm8tY3BwLXByZWNvbXAiCisjICBlbHNlCisjICAgIGluY2x1ZGUgInlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiIKKyMgIGVuZGlmCisjZW5kaWYKKyNkZWZpbmUgTUZYXzB4ZmZmZiAgICAgICAgICAweGZmZmYKKyNkZWZpbmUgTUZYXzB4ZmZmZmZmZmZMICAgICA0Mjk0OTY3Mjk1dWwKKyNpZiAhZGVmaW5lZChDSEFSX0JJVCkgfHwgKENIQVJfQklUICE9IDgpCisjICBpbmNsdWRlICJlcnJvciBDSEFSX0JJVCIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVDSEFSX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVDSEFSX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVVNIUlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVVNIUlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVSU5UX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVTE9OR19NQVgpCisjICBpbmNsdWRlICJlcnJvciBVTE9OR19NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNIUlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgU0hSVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKElOVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBJTlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMT05HX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIExPTkdfTUFYIDEiCisjZW5kaWYKKyNpZiAoVUNIQVJfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVDSEFSX01BWCAyIgorI2VuZGlmCisjaWYgKFVTSFJUX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggMiIKKyNlbmRpZgorI2lmIChVSU5UX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVSU5UX01BWCAyIgorI2VuZGlmCisjaWYgKFVMT05HX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVTE9OR19NQVggMiIKKyNlbmRpZgorI2lmIChVQ0hBUl9NQVggPCAweGZmKQorIyAgaW5jbHVkZSAiZXJyb3IgVUNIQVJfTUFYIDMiCisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYIDwgTUZYXzB4ZmZmZikKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCAzIgorI2VuZGlmCisjaWYgKFVJTlRfTUFYIDwgTUZYXzB4ZmZmZikKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIDMiCisjZW5kaWYKKyNpZiAoVUxPTkdfTUFYIDwgTUZYXzB4ZmZmZmZmZmZMKQorIyAgaW5jbHVkZSAiZXJyb3IgVUxPTkdfTUFYIDMiCisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYID4gVUlOVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggdnMgVUlOVF9NQVgiCisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPiBVTE9OR19NQVgpCisjICBpbmNsdWRlICJlcnJvciBVSU5UX01BWCB2cyBVTE9OR19NQVgiCisjZW5kaWYKK11dLCBbWworI2lmIChVU0hSVF9NQVggPT0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQyYVsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA9PSAyKV07IH0KKyNlbGlmIChVU0hSVF9NQVggPj0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQyYlsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA+IDIpXTsgfQorI2VuZGlmCisjaWYgKFVJTlRfTUFYID09IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2ludDJhWzEgLSAyICogIShzaXplb2YoaW50KSA9PSAyKV07IH0KKyNlbGlmIChVSU5UX01BWCA+PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQyYlsxIC0gMiAqICEoc2l6ZW9mKGludCkgPiAyKV07IH0KKyNlbmRpZgorI2lmIChVTE9OR19NQVggPT0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfbG9uZzJhWzEgLSAyICogIShzaXplb2YobG9uZykgPT0gMildOyB9CisjZWxpZiAoVUxPTkdfTUFYID49IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2xvbmcyYlsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID4gMildOyB9CisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYID09IE1GWF8weGZmZmZmZmZmTCkKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQ0YVsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA9PSA0KV07IH0KKyNlbGlmIChVU0hSVF9NQVggPj0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDRiWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID4gNCldOyB9CisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPT0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQ0YVsxIC0gMiAqICEoc2l6ZW9mKGludCkgPT0gNCldOyB9CisjZWxpZiAoVUlOVF9NQVggPj0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQ0YlsxIC0gMiAqICEoc2l6ZW9mKGludCkgPiA0KV07IH0KKyNlbmRpZgorI2lmIChVTE9OR19NQVggPT0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nNGFbMSAtIDIgKiAhKHNpemVvZihsb25nKSA9PSA0KV07IH0KKyNlbGlmIChVTE9OR19NQVggPj0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nNGJbMSAtIDIgKiAhKHNpemVvZihsb25nKSA+IDQpXTsgfQorI2VuZGlmCitdXSldLAorW21meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaD15ZXNdLAorW21meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaD1ub10pXSkKK10pCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIHN0YW5kYXJkCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQUNfREVGVU4oW21meF9MWk9fQ0hFQ0tfRU5ESUFOXSwgWworQUNfQ19CSUdFTkRJQU4oW0FDX0RFRklORShMWk9fQUJJX0JJR19FTkRJQU4sMSxbRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGJpZyBlbmRpYW4uXSldLFtBQ19ERUZJTkUoTFpPX0FCSV9MSVRUTEVfRU5ESUFOLDEsW0RlZmluZSB0byAxIGlmIHlvdXIgbWFjaGluZSBpcyBsaXR0bGUgZW5kaWFuLl0pXSkKK10pIworCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZG5sIG1vcmUgdHlwZXMgd2hpY2ggYXJlIG5vdCB5ZXQgY292ZXJlZCBieSBBQ0MKKworQUNfREVGVU4oW21meF9DSEVDS19TSVpFT0ZdLCBbCitBQ19DSEVDS19TSVpFT0YoX19pbnQzMikKK0FDX0NIRUNLX1NJWkVPRihpbnRtYXhfdCkKK0FDX0NIRUNLX1NJWkVPRih1aW50bWF4X3QpCitBQ19DSEVDS19TSVpFT0YoaW50cHRyX3QpCitBQ19DSEVDS19TSVpFT0YodWludHB0cl90KQorCitBQ19DSEVDS19TSVpFT0YoZmxvYXQpCitBQ19DSEVDS19TSVpFT0YoZG91YmxlKQorQUNfQ0hFQ0tfU0laRU9GKGxvbmcgZG91YmxlKQorCitBQ19DSEVDS19TSVpFT0YoZGV2X3QpCitBQ19DSEVDS19TSVpFT0YoZnBvc190KQorQUNfQ0hFQ0tfU0laRU9GKG1vZGVfdCkKK0FDX0NIRUNLX1NJWkVPRihvZmZfdCkKK0FDX0NIRUNLX1NJWkVPRihzc2l6ZV90KQorQUNfQ0hFQ0tfU0laRU9GKHRpbWVfdCkKK10pIworCisKKworQUNfREVGVU4oW21meF9DSEVDS19MSUJfV0lOTU1dLCBbCitpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzOyB0aGVuCitjYXNlICRob3N0X29zIGluCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgIHRlc3QgIlgkTElCUyIgIT0gIlgiICYmIExJQlM9IiRMSUJTICIKKyAgICAgTElCUz0iJHtMSUJTfS1sd2lubW0iIDs7CisqKQorICAgICA7OworZXNhYworZmkKK10pIworCisjc2VyaWFsIDYKKworZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisKKyMgRGVmaW5lIFNUX01USU1fTlNFQyB0byBiZSB0aGUgbmFub3NlY29uZHMgbWVtYmVyIG9mIHN0cnVjdCBzdGF0J3Mgc3RfbXRpbSwKKyMgaWYgaXQgZXhpc3RzLgorCitBQ19ERUZVTihbQUNfU1RSVUNUX1NUX01USU1fTlNFQ10sCisgW0FDX0NBQ0hFX0NIRUNLKFtmb3IgbmFub3NlY29uZHMgbWVtYmVyIG9mIHN0cnVjdCBzdGF0LnN0X210aW1dLAorICAgYWNfY3Zfc3RydWN0X3N0X210aW1fbnNlYywKKyAgIFthY19zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgYWNfY3Zfc3RydWN0X3N0X210aW1fbnNlYz1ubworICAgICMgdHZfbnNlYyAtLSB0aGUgdXN1YWwgY2FzZQorICAgICMgX3R2X25zZWMgLS0gU29sYXJpcyAyLjYsIGlmCisgICAgIwkoZGVmaW5lZCBfWE9QRU5fU09VUkNFICYmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgPT0gMQorICAgICMJICYmICFkZWZpbmVkIF9fRVhURU5TSU9OU19fKQorICAgICMgc3RfX3RpbS50dl9uc2VjIC0tIFVuaXhXYXJlIDIuMS4yCisgICAgZm9yIGFjX3ZhbCBpbiB0dl9uc2VjIF90dl9uc2VjIHN0X190aW0udHZfbnNlYzsgZG8KKyAgICAgIENQUEZMQUdTPSIkYWNfc2F2ZV9DUFBGTEFHUyAtRFNUX01USU1fTlNFQz0kYWNfdmFsIgorICAgICAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPl0sIFtzdHJ1Y3Qgc3RhdCBzOyBzLnN0X210aW0uU1RfTVRJTV9OU0VDO10sCisgICAgICAgIFthY19jdl9zdHJ1Y3Rfc3RfbXRpbV9uc2VjPSRhY192YWw7IGJyZWFrXSkKKyAgICBkb25lCisgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIl0pCisKKyAgaWYgdGVzdCAkYWNfY3Zfc3RydWN0X3N0X210aW1fbnNlYyAhPSBubzsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChTVF9NVElNX05TRUMsICRhY19jdl9zdHJ1Y3Rfc3RfbXRpbV9uc2VjLAorICAgICAgW0RlZmluZSB0byBiZSB0aGUgbmFub3NlY29uZHMgbWVtYmVyIG9mIHN0cnVjdCBzdGF0J3Mgc3RfbXRpbSwKKyAgICAgICBpZiBpdCBleGlzdHMuXSkKKyAgZmkKKyBdCispCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC94MzJfYWJpX21pbmlhY2NfaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wL3gzMl9hYmlfbWluaWFjY19oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOWJlODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC94MzJfYWJpX21pbmlhY2NfaC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGaXggZ2V0IG9mIEZMQUdTIHJlZ2lzdGVyIGluIHgzMiBBQkksCisKK3gzMiBBQkkgcmVxdWlyZXMgdG8gaGF2ZSA2NC1iaXQgdmFyaWFibGUgdG8gc3RvcmUgRkxBR1MgcmVnaXN0ZXIKK2luc3RlYWQgb2Ygc2l6ZV90IHRoYXQgaXMgMzItYml0IHZhcmlhYmxlLCB0aGlzIGZpeCBvcGVyYW5kCit0eXBlIG1pc21hdGNoIHdoZW4gdHJ5IHRvIHBvcCBwcmV2aW91cyBwdXNoZiB2YWx1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBsem9wLTEuMDMvc3JjL21pbmlhY2MuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGx6b3AtMS4wMy5vcmlnL3NyYy9taW5pYWNjLmgKKysrKyBsem9wLTEuMDMvc3JjL21pbmlhY2MuaAorQEAgLTc1NCw2ICs3NTQsOSBAQAorICNlbGlmIGRlZmluZWQoX19hbWQ2NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX01fQU1ENjQpCisgIyAgZGVmaW5lIEFDQ19BUkNIX0FNRDY0ICAgICAgICAgICAgMQorICMgIGRlZmluZSBBQ0NfSU5GT19BUkNIICAgICAgICAgICAgICJhbWQ2NCIKKysjICBpZiBkZWZpbmVkKF9fSUxQMzJfXykKKysjICAgIGRlZmluZSBBQ0NfQVJDSF9BTUQ2NF9YMzIgICAgICAxCisrIyAgZW5kaWYKKyAjZWxpZiBkZWZpbmVkKF9fdGh1bWJfXykgfHwgKGRlZmluZWQoX01fQVJNKSAmJiBkZWZpbmVkKF9NX1RIVU1CKSkKKyAjICBkZWZpbmUgQUNDX0FSQ0hfQVJNICAgICAgICAgICAgICAxCisgIyAgZGVmaW5lIEFDQ19BUkNIX0FSTV9USFVNQiAgICAgICAgMQorQEAgLTY3ODcsNyArNjc5MCwxMSBAQCBBQ0NMSUJfUFVCTElDX05PSU5MSU5FKHZvaWQsIGFjY19kZWJ1Z19uCisgQUNDTElCX1BVQkxJQ19OT0lOTElORShpbnQsIGFjY19kZWJ1Z19hbGlnbl9jaGVja19xdWVyeSkgKHZvaWQpCisgeworICNpZiAoQUNDX0FSQ0hfQU1ENjQgfHwgQUNDX0FSQ0hfSTM4NikgJiYgKEFDQ19BU01fU1lOVEFYX0dOVUMpCisrIyAgaWYgZGVmaW5lZChBQ0NfQVJDSF9BTUQ2NF9YMzIpCisrICAgIHVuc2lnbmVkIGxvbmcgbG9uZyByOworKyMgIGVsc2UKKyAgICAgc2l6ZV90IHI7CisrIyAgZW5kaWYKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hmXG4gcG9wICUwXG4iIDogIj1hIiAocikgOiA6IF9fQUNDX0FTTV9DTE9CQkVSKTsKKyAgICAgcmV0dXJuIChpbnQpKHIgPj4gMTgpICYgMTsKKyAjZWxpZiAoQUNDX0FSQ0hfSTM4NikgJiYgKEFDQ19BU01fU1lOVEFYX01TQykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wXzEuMDMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcF8xLjAzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZDYyODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcF8xLjAzLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiUmVhbC10aW1lIGZpbGUgY29tcHJlc3NvciIKK0RFU0NSSVBUSU9OID0gImx6b3AgaXMgYSBjb21wcmVzc2lvbiB1dGlsaXR5IHdoaWNoIGlzIGRlc2lnbmVkIHRvIGJlIGEgY29tcGFuaW9uIHRvIGd6aXAuIFxuXAorSXQgaXMgYmFzZWQgb24gdGhlIExaTyBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkgYW5kIGl0cyBtYWluIGFkdmFudGFnZXMgb3ZlciBcblwKK2d6aXAgYXJlIG11Y2ggaGlnaGVyIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHNwZWVkIGF0IHRoZSBjb3N0IG9mIHNvbWUgXG5cCitjb21wcmVzc2lvbiByYXRpby4gVGhlIGx6b3AgY29tcHJlc3Npb24gdXRpbGl0eSB3YXMgZGVzaWduZWQgd2l0aCB0aGUgZ29hbHMgXG5cCitvZiByZWxpYWJpbGl0eSwgc3BlZWQsIHBvcnRhYmlsaXR5IGFuZCB3aXRoIHJlYXNvbmFibGUgZHJvcC1pbiBjb21wYXRpYmlsaXR5IFxuXAordG8gZ3ppcC4iCitERVBFTkRTICs9ICJsem8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGZlYWYzZGM0YmVlZjRmNWE3YmRiYzM1YjE5N2YzOWUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2x6b3AuYztiZWdpbmxpbmU9NTtlbmRsaW5lPTIxO21kNT02Nzk3YmQzZWQwYTFhNDkzMjdiN2ViZjkzNjZlYmQ4NiIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lmx6b3Aub3JnL2Rvd25sb2FkLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hY2luY2x1ZGUubTQgXAorICAgICAgICAgICBmaWxlOi8veDMyX2FiaV9taW5pYWNjX2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11c2Utc3RhdGljLWlubGluZXMtYXMtdGhlLWV4dGVybmFsLWlubGluZS1kZWZpbml0aW9uLnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiMDA2YzVlMjdmYjc4Y2RkMTRhNjI4ZmRmYTVhYTE5MDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzE0MjViOGM3N2Q0OWY1YTY3OWQ1YTEyNmM5MGVhNmFkOTk1ODVhNTVlMzM1YTYxM2NhZTU5ZTkwOWRiYjJjOSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9fY29uZmlndXJlICgpIHsKKyAgICBsbiAtc2YgIC4uL2FjaW5jbHVkZS5tNCAke1N9L2FjaW5jbHVkZS5tNAorICAgIGF1dG90b29sc19kb19jb25maWd1cmUKK30KKworQkJDTEFTU0VYVEVORCArPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyLTMuMS4zL2xvbmctbG9uZy10aHVtYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyLTMuMS4zL2xvbmctbG9uZy10aHVtYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTcxMDBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnItMy4xLjMvbG9uZy1sb25nLXRodW1iLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gODQwMjFiMWUyMzY1MDgxNjliZTY1ZTgwMmE5YzBhMjVmYzlhODgyNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBoaWwgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CitEYXRlOiBNb24sIDI3IE9jdCAyMDA4IDIyOjI2OjM1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIG1wZnI6IGNydXNhZGUgYWdhaW5zdCBpbmxpbmUgYXNzZW1ibGVyCisKK1dpdGhvdXQgdGhpcywgYnVpbGQgZmFpbHMgZm9yIHRodW1iOgorfCB7c3RhbmRhcmQgaW5wdXR9OiBBc3NlbWJsZXIgbWVzc2FnZXM6Cit8IHtzdGFuZGFyZCBpbnB1dH06MTk5OiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgc2wscjAscjIscjEnCit8IHtzdGFuZGFyZCBpbnB1dH06MjE0OiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgc2wscjIscjEsZnAnCit8IHtzdGFuZGFyZCBpbnB1dH06MjE5OiBFcnJvcjogaW5zdHJ1Y3Rpb24gbm90IHN1cHBvcnRlZCBpbiBUaHVtYjE2IG1vZGUgLS0gYGFkZHMgZnAscjAsc2wnCit8IHtzdGFuZGFyZCBpbnB1dH06MjIwOiBFcnJvcjogdW5zaGlmdGVkIHJlZ2lzdGVyIHJlcXVpcmVkIC0tIGBhZGMgcjIscjIsIzAnCit8IHtzdGFuZGFyZCBpbnB1dH06MjM1OiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgcjAsc2wscjEscjMnCit8IHtzdGFuZGFyZCBpbnB1dH06MjQ0OiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgZnAsaXAscjEscjMnCit8IHtzdGFuZGFyZCBpbnB1dH06MjUzOiBFcnJvcjogaW5zdHJ1Y3Rpb24gbm90IHN1cHBvcnRlZCBpbiBUaHVtYjE2IG1vZGUgLS0gYGFkZHMgcjMsc2wsZnAnCit8IHtzdGFuZGFyZCBpbnB1dH06MjU0OiBFcnJvcjogdW5zaGlmdGVkIHJlZ2lzdGVyIHJlcXVpcmVkIC0tIGBhZGMgaXAsaXAsIzAnCit8IHtzdGFuZGFyZCBpbnB1dH06MjU5OiBFcnJvcjogaW5zdHJ1Y3Rpb24gbm90IHN1cHBvcnRlZCBpbiBUaHVtYjE2IG1vZGUgLS0gYGFkZHMgc2wscjEscjAnCit8IHtzdGFuZGFyZCBpbnB1dH06NjQyOiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgcjAscjIscjMscjEnCit8IC4uL2FybS1vZS1saW51eC1nbnVlYWJpLWxpYnRvb2wgLS10YWc9Q0MgICAtLW1vZGU9Y29tcGlsZSBhcm0tb2UtbGludXgtZ251ZWFiaS1nY2MgIC1tYXJjaD1hcm12NXRlICAtbXRodW1iIC1tdGh1bWItaW50ZXJ3b3JrICAtbXR1bmU9eHNjYWxlIC0tc3lzcm9vdD0vT0Uvc2hyLWNvcmUvdG1wLWVnbGliYy9zeXNyb290cy9zcGl0eiAtREhBVkVfSU5UVFlQRVNfSD0xIC1ESEFWRV9TVERJTlRfSD0xIC1EVElNRV9XSVRIX1NZU19USU1FPTEgLURIQVZFX0xPQ0FMRV9IPTEgLURIQVZFX1dDSEFSX0g9MSAtREhBVkVfU1REQVJHPTEgLURIQVZFX1NZU19USU1FX0g9MSAtREhBVkVfQUxMT0NBX0g9MSAtREhBVkVfU1RESU5UX0g9MSAtREhBVkVfVkFfQ09QWT0xIC1ESEFWRV9TRVRMT0NBTEU9MSAtREhBVkVfR0VUVElNRU9GREFZPTEgLURIQVZFX0xPTkdfTE9ORz0xIC1ESEFWRV9JTlRNQVhfVD0xIC1ETVBGUl9IQVZFX0lOVE1BWF9NQVg9MSAtRE1QRlJfSEFWRV9GRVNFVFJPVU5EPTEgLURIQVZFX1JPVU5EPTEgLURIQVZFX1RSVU5DPTEgLURIQVZFX0ZMT09SPTEgLURIQVZFX0NFSUw9MSAtREhBVkVfTkVBUkJZSU5UPTEgLURMVF9PQkpESVI9XCIubGlicy9cIiAtREhBVkVfQVRUUklCVVRFX01PREU9MSAtREhBVkVfX19HTVBOX1JPT1RSRU09MSAtREhBVkVfX19HTVBOX1NCUEkxX0RJVkFQUFJfUT0xIC1JLiAgICAgLU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtZmZsb2F0LXN0b3JlIC1jIC1vIHBvdy5sbyBwb3cuYworfCB7c3RhbmRhcmQgaW5wdXR9OjExNTQ6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBUaHVtYiBtb2RlIGB1bXVsbCByMCxyMSxzbCxpcCcKK3wge3N0YW5kYXJkIGlucHV0fToxMTY2OiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgcjMscjIsaXAscjAnCit8IHtzdGFuZGFyZCBpbnB1dH06MTE3MTogRXJyb3I6IGluc3RydWN0aW9uIG5vdCBzdXBwb3J0ZWQgaW4gVGh1bWIxNiBtb2RlIC0tIGBhZGRzIHIwLHIxLHIzJworfCB7c3RhbmRhcmQgaW5wdXR9OjExNzI6IEVycm9yOiB1bnNoaWZ0ZWQgcmVnaXN0ZXIgcmVxdWlyZWQgLS0gYGFkYyByMixyMiwjMCcKK3wgbWFrZVsyXTogKioqIFttdWwubG9dIEVycm9yIDEKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIG1wZnIub2xkL3NyYy9tcGZyLWxvbmdsb25nLmgJMjAwOC0wMS0wMSAwMzoyOTowOS4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyL3NyYy9tcGZyLWxvbmdsb25nLmgJMjAwOC0xMC0yNyAyMTo0Njo0NC4wMDAwMDAwMDAgKzAwMDAKK0BAIC00MDYsNyArNDA2LDcgQEAKKyAJICAgICAicklKIiAoKFVTSXR5cGUpIChibCkpKQorICNlbmRpZgorIAorLSNpZiBkZWZpbmVkIChfX2FybV9fKSAmJiBXX1RZUEVfU0laRSA9PSAzMgorKyNpZiBkZWZpbmVkIChfX2FybV9fKSAmJiBXX1RZUEVfU0laRSA9PSAzMiAmJiAhZGVmaW5lZChfX3RodW1iX18pCisgI2RlZmluZSBhZGRfc3NhYWFhKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIFwKKyAgIF9fYXNtX18gKCJhZGRzXHQlMSwgJTQsICU1XG5cdGFkY1x0JTAsICUyLCAlMyIJCQlcCisgCSAgIDogIj1yIiAoc2gpLCAiPSZyIiAoc2wpCQkJCQlcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmci5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmci5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YzZjkxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyLmluYwpAQCAtMCwwICsxLDYgQEAKK1NVTU1BUlkgPSAiQyBsaWJyYXJ5IGZvciBtdWx0aXBsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgY29tcHV0YXRpb25zIHdpdGggZXhhY3Qgcm91bmRpbmciCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1wZnIub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYzKyIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyXzMuMS4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnJfMy4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYxOWI1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyXzMuMS4zLmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgbXBmci5pbmMKKworTElDRU5TRSA9ICJHUEx2MyAmIExHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYiCitERVBFTkRTID0gImdtcCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm1wZnIub3JnL21wZnItJHtQVn0vbXBmci0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbG9uZy1sb25nLXRodW1iLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjk2OTM5OGNkMmZiYzU2YTZhZjU3MGI1MjczYzU2YTkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjgzNWEwOGJkOTkyYzgyNTc2NDE3OTFlOWE2YTJiMzViMDIzMzZjOGRlMjZkMGE4NTc3OTUzNzQ3ZTUxNGExNiIKKworUyA9ICIke1dPUktESVJ9L21wZnItJHtQVn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmVvbi9uZW9uL2dudXRsc180LjNfZml4dXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25lb24vbmVvbi9nbnV0bHNfNC4zX2ZpeHVwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OWY1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25lb24vbmVvbi9nbnV0bHNfNC4zX2ZpeHVwLnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK3JlcGxhY2UgZGVwcmVjYXRlZCBHbnVUTFMgZnVuY3Rpb25zIHdpdGggbmV3ZXIgb25lcyBpZiBhdmFpbGFibGUgCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXI4MDhAZ21haWwuY29tPgorCitJbmRleDogbmVvbi0wLjMwLjEvbWFjcm9zL25lb24ubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuZW9uLTAuMzAuMS5vcmlnL21hY3Jvcy9uZW9uLm00CisrKysgbmVvbi0wLjMwLjEvbWFjcm9zL25lb24ubTQKK0BAIC05ODcsNiArOTg3LDEwIEBAIGdudXRscykKKyAgICAgICAgICAgICAgICAgICBnbnV0bHNfY2VydGlmaWNhdGVfZ2V0X3g1MDlfY2FzIFwKKyAgICAgICAgICAgICAgICAgICBnbnV0bHNfeDUwOV9jcnRfc2lnbjJdKQorIAorKyAgICMgZ251dGxzIDQuMyBjaGVjaworKyAgIEFDX0NIRUNLX0xJQihnbnV0bHMsIGdudXRsc19nbG9iYWxfaW5pdCkKKysgICBBQ19DSEVDS19GVU5DUyhnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3JldHJpZXZlX2Z1bmN0aW9uLCwpCisrCisgICAgIyBmYWlsIGlmIGdudXRsc194NTA5X2NydF9zaWduMiBpcyBub3QgZm91bmQgKGl0IHdhcyBpbnRyb2R1Y2VkIGluIDEuMi4wLCB3aGljaCBpcyByZXF1aXJlZCkKKyAgICBpZiB0ZXN0IHgke2FjX2N2X2Z1bmNfZ251dGxzX3g1MDlfY3J0X3NpZ24yfSAhPSB4eWVzOyB0aGVuCisgICAgICAgIEFDX01TR19FUlJPUihbR251VExTIHZlcnNpb24gcHJlZGF0ZXMgZ251dGxzX3g1MDlfY3J0X3NpZ24yLCBuZXdlciB2ZXJzaW9uIHJlcXVpcmVkIChhdCBsZWFzdCAxLjIuMCldKQorSW5kZXg6IG5lb24tMC4zMC4xL3NyYy9uZV9nbnV0bHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG5lb24tMC4zMC4xLm9yaWcvc3JjL25lX2dudXRscy5jCisrKysgbmVvbi0wLjMwLjEvc3JjL25lX2dudXRscy5jCitAQCAtNTUzLDcgKzU1MywxMyBAQCBkdXBfZXJyb3I6Cisgc3RhdGljIGludCBwcm92aWRlX2NsaWVudF9jZXJ0KGdudXRsc19zZXNzaW9uX3Qgc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ251dGxzX2RhdHVtX3QgKnJlcV9jYV9yZG4sIGludCBucmVxcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ251dGxzX3BrX2FsZ29yaXRobV90ICpzaWduX2FsZ29zLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2lnbl9hbGdvc19sZW5ndGgsIGdudXRsc19yZXRyX3N0ICpzdCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpZ25fYWxnb3NfbGVuZ3RoLAorKyNpZiBIQVZFX0dOVVRMU19DRVJUSUZJQ0FURV9TRVRfUkVUUklFVkVfRlVOQ1RJT04KKysgICAgZ251dGxzX3JldHIyX3N0KiBzdAorKyNlbHNlCisrICAgIGdudXRsc19yZXRyX3N0ICpzdAorKyNlbmRpZgorKyAgICApCisgeworICAgICBuZV9zZXNzaW9uICpzZXNzID0gZ251dGxzX3Nlc3Npb25fZ2V0X3B0cihzZXNzaW9uKTsKKyAgICAgCitAQCAtNjE3LDggKzYyMywxMSBAQCBzdGF0aWMgaW50IHByb3ZpZGVfY2xpZW50X2NlcnQoZ251dGxzX3NlCisgI2VuZGlmCisgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgTkVfREVCVUcoTkVfREJHX1NTTCwgIlN1cHBseWluZyBjbGllbnQgY2VydGlmaWNhdGUuXG4iKTsKKy0KKysjaWYgSEFWRV9HTlVUTFNfQ0VSVElGSUNBVEVfU0VUX1JFVFJJRVZFX0ZVTkNUSU9OCisrICAgICAgICAgICAgc3QtPmNlcnRfdHlwZSA9IHR5cGU7CisrI2Vsc2UKKyAgICAgICAgICAgICBzdC0+dHlwZSA9IHR5cGU7CisrI2VuZGlmCisgICAgICAgICAgICAgc3QtPm5jZXJ0cyA9IDE7CisgICAgICAgICAgICAgc3QtPmNlcnQueDUwOSA9ICZzZXNzLT5jbGllbnRfY2VydC0+Y2VydC5zdWJqZWN0OworICAgICAgICAgICAgIHN0LT5rZXkueDUwOSA9IHNlc3MtPmNsaWVudF9jZXJ0LT5wa2V5OworQEAgLTY0OSw4ICs2NTgsMTQgQEAgbmVfc3NsX2NvbnRleHQgKm5lX3NzbF9jb250ZXh0X2NyZWF0ZShpbgorICAgICBuZV9zc2xfY29udGV4dCAqY3R4ID0gbmVfY2FsbG9jKHNpemVvZiAqY3R4KTsKKyAgICAgZ251dGxzX2NlcnRpZmljYXRlX2FsbG9jYXRlX2NyZWRlbnRpYWxzKCZjdHgtPmNyZWQpOworICAgICBpZiAoZmxhZ3MgPT0gTkVfU1NMX0NUWF9DTElFTlQpIHsKKysKKysjaWYgSEFWRV9HTlVUTFNfQ0VSVElGSUNBVEVfU0VUX1JFVFJJRVZFX0ZVTkNUSU9OCisrICAgICAgICBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3JldHJpZXZlX2Z1bmN0aW9uKGN0eC0+Y3JlZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZV9jbGllbnRfY2VydCk7CisrI2Vsc2UKKyAgICAgICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9jbGllbnRfc2V0X3JldHJpZXZlX2Z1bmN0aW9uKGN0eC0+Y3JlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVfY2xpZW50X2NlcnQpOworKyNlbmRpZgorICAgICB9CisgICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfdmVyaWZ5X2ZsYWdzKGN0eC0+Y3JlZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOVVRMU19WRVJJRllfQUxMT1dfWDUwOV9WMV9DQV9DUlQpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZW9uL25lb24vcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZW9uL25lb24vcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOWRiYTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25lb24vbmVvbi9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0KKyBuZW9uLnBjLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCistLS0gbmVvbi0wLjMwLjEub3JpZy9uZW9uLnBjLmluCisrKysgbmVvbi0wLjMwLjEvbmVvbi5wYy5pbgorQEAgLTcsNSArNyw1IEBAIE5hbWU6IG5lb24KKyBEZXNjcmlwdGlvbjogSFRUUC9XZWJEQVYgY2xpZW50IGxpYnJhcnkKKyBWZXJzaW9uOiBATkVPTl9WRVJTSU9OQAorIExpYnM6IC1MJHtsaWJkaXJ9IC1sbmVvbiBATkVPTl9QQ19MSUJTQAorLUxpYnMucHJpdmF0ZTogQE5FT05fTElCU0AKKytMaWJzLnByaXZhdGU6IC1MJHtsaWJkaXJ9IC1seiAtbGdjcnlwdCAtbGdwZy1lcnJvciAtbGV4cGF0IC1sZ251dGxzCisgQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0vbmVvbiBATkVPTl9DRkxBR1NACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25lb24vbmVvbl8wLjMwLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25lb24vbmVvbl8wLjMwLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI0NDMxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmVvbi9uZW9uXzAuMzAuMS5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIkFuIEhUVFAgYW5kIFdlYkRBViBjbGllbnQgbGlicmFyeSB3aXRoIGEgQyBpbnRlcmZhY2UiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LndlYmRhdi5vcmcvbmVvbi8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMvQ09QWUlORy5MSUI7bWQ1PWYzMGE5NzE2ZWYzNzYyZTM0NjdhMmY2MmJmNzkwZjBhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9uZV91dGlscy5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTJjYWNhNjA5NTM4ZWRkYWE2ZjZhZGYxMjBhMjE4MDM3IgorREVQRU5EUyA9ICJ6bGliIGxpYnhtbDIgZXhwYXQgdGltZSBnbnV0bHMgbGlicHJveHkiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ6bGliLW5hdGl2ZSBsaWJ4bWwyLW5hdGl2ZSBleHBhdC1uYXRpdmUgZ251dGxzLW5hdGl2ZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy53ZWJkYXYub3JnLyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nbnV0bHNfNC4zX2ZpeHVwLnBhdGNoIgorU1JDX1VSSVttZDVzdW1dID0gIjIzMWFkZWJlNWMyZjc4ZmRlZDNlM2RmNmU5NTg4NzhlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAwYzYyNmMwZGMxOGQwOTRhYjM3NGRiZDlhMzU0OTE1YmZlNDc3NjQzMzI4OTM4NmVkNDg5YzJlYzA4NDVjZGQiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbmVvbi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBsaWJfcGFja2FnZSBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1zc2w9Z251dGxzIC0td2l0aC1saWJ4bWwyIC0td2l0aC1leHBhdCAtLWVuYWJsZS1zaGFyZWQiCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1nc3NhcGkiCisKK2RvX2NvbXBpbGVfYXBwZW5kKCkgeworCW9lX3J1bm1ha2UgLUMgdGVzdAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvZmlsZXMvQWRkLXRhcmdldC10by1vbmx5LWJ1aWxkLXRlc3RzLW5vdC1ydW4tdGhlbS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL2ZpbGVzL0FkZC10YXJnZXQtdG8tb25seS1idWlsZC10ZXN0cy1ub3QtcnVuLXRoZW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkYTc3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL2ZpbGVzL0FkZC10YXJnZXQtdG8tb25seS1idWlsZC10ZXN0cy1ub3QtcnVuLXRoZW0ucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSA0NmVkZjAxY2M5OGRiOWY5ZmVlYzk4NDg5NzgzNmRmZGQyNmJkYzhkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMTIgQXVnIDIwMTUgMjM6Mjc6MjcgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHRhcmdldCB0byBvbmx5IGJ1aWxkIHRlc3RzIChub3QgcnVuIHRoZW0pCisKK05vdCBzZW5kaW5nIHVwc3RyZWFtIGFzIHRoaXMgaXMgb25seSBhIHN0YXJ0IG9mIGEgc29sdXRpb24gdG8KK2luc3RhbGxhYmxlIHRlc3RzOiBJdCdzIHVzZWZ1bCBmb3IgdXMgYWxyZWFkeSBhcyBpcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtub3QgYSBjb21wbGV0ZSBzb2x1dGlvbl0KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluICAgICAgICAgICB8IDMgKysrCisgdGVzdHN1aXRlL01ha2VmaWxlLmluIHwgMiArKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAwOGVmYjdkLi43OTA5MzQyIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNTUsNiArNTUsOSBAQCBjbGVhbiBkaXN0Y2xlYW4gbW9zdGx5Y2xlYW4gbWFpbnRhaW5lci1jbGVhbiB0YWdzOgorIAkgIGVjaG8gIk1ha2luZyAkQCBpbiAkJGQiIDsgKGNkICQkZCAmJiAkKE1BS0UpICRAKTsgZG9uZQorIAkkKE1BS0UpICRALWhlcmUKKyAKKytidWlsZHRlc3Q6CisrCWVjaG8gIk1ha2luZyAkQCBpbiB0ZXN0c3VpdGUiIDsgKGNkIHRlc3RzdWl0ZSAmJiAkKE1BS0UpICRAKQorKworIGNoZWNrLWhlcmU6CisgCXRydWUKKyAKK2RpZmYgLS1naXQgYS90ZXN0c3VpdGUvTWFrZWZpbGUuaW4gYi90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KK2luZGV4IDZiYzE5MDcuLmJiNjViZjAgMTAwNjQ0CistLS0gYS90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KKysrKyBiL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgorQEAgLTExNiw2ICsxMTYsOCBAQCAkKFRBUkdFVFMpICQoRVhUUkFfVEFSR0VUUyk6IHRlc3R1dGlscy4kKE9CSkVYVCkgLi4vbmV0dGxlLWludGVybmFsLiQoT0JKRVhUKSBcCisgIyBkYXRhLgorIFZBTEdSSU5EID0gdmFsZ3JpbmQgLS1lcnJvci1leGl0Y29kZT0xIC0tbGVhay1jaGVjaz1mdWxsIC0tc2hvdy1yZWFjaGFibGU9eWVzIEBJRl9BU01AIC0tcGFydGlhbC1sb2Fkcy1vaz15ZXMKKyAKKytidWlsZHRlc3Q6ICQoVFNfQUxMKQorKworICMgVGhlIFBBVEggdXBkYXRlIGlzIGZvciBsb2NhdGluZyBkbGxzIG9uIHcqbmRvd3MuCisgY2hlY2s6ICQoVFNfQUxMKQorIAlMRF9MSUJSQVJZX1BBVEg9Li4vLmxpYiBQQVRIPSIuLi8ubGliOiQkUEFUSCIgc3JjZGlyPSIkKHNyY2RpcikiIFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvZmlsZXMvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvZmlsZXMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MGJlZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9maWxlcy9ydW4tcHRlc3QKQEAgLTAsMCArMSwzNiBAQAorIyEgL2Jpbi9zaAorCitjZCB0ZXN0c3VpdGUKKworZmFpbGVkPTAKK2FsbD0wCisKK2ZvciBmIGluICotdGVzdDsgZG8KKyAgICBpZiBbICIkZiIgPSAic2hhMS1odWdlLXRlc3QiIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIlNLSVA6ICRmIChza2lwcGVkIGZvciBsdWRpY3JvdXMgcnVuIHRpbWUpIgorICAgICAgICBjb250aW51ZQorICAgIGZpCisKKyAgICAiLi8kZiIKKyAgICBjYXNlICIkPyIgaW4KKyAgICAgICAgMCkKKyAgICAgICAgICAgIGVjaG8gIlBBU1M6ICRmIgorICAgICAgICAgICAgYWxsPSQoKGFsbCArIDEpKQorICAgICAgICAgICAgOzsKKyAgICAgICAgNzcpCisgICAgICAgICAgICBlY2hvICJTS0lQOiAkZiIKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICBlY2hvICJGQUlMOiAkZiIKKyAgICAgICAgICAgIGZhaWxlZD0kKChmYWlsZWQgKyAxKSkKKyAgICAgICAgICAgIGFsbD0kKChhbGwgKyAxKSkKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworZG9uZQorCitpZiBbICIkZmFpbGVkIiAtZXEgMCBdIDsgdGhlbgorICBlY2hvICJBbGwgJGFsbCB0ZXN0cyBwYXNzZWQiCitlbHNlCisgIGVjaG8gIiRmYWlsZWQgb2YgJGFsbCB0ZXN0cyBmYWlsZWQiCitmaQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGUuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWZmZjZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlLmluYwpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIkEgbG93IGxldmVsIGNyeXB0b2dyYXBoaWMgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubHlzYXRvci5saXUuc2Uvfm5pc3NlL25ldHRsZS8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zZXJwZW50LWRlY3J5cHQuYztiZWdpbmxpbmU9NTM7ZW5kbGluZT02NzttZDU9YmNmZDQ3NDVkNTNjYTU3ZjgyOTA3MDg5ODk4ZTM5MGQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VycGVudC1zZXQta2V5LmM7YmVnaW5saW5lPTU2O2VuZGxpbmU9NzA7bWQ1PWJjZmQ0NzQ1ZDUzY2E1N2Y4MjkwNzA4OTg5OGUzOTBkIgorCitERVBFTkRTICs9ICJnbXAiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5seXNhdG9yLmxpdS5zZS9+bmlzc2UvYXJjaGl2ZS8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vQWRkLXRhcmdldC10by1vbmx5LWJ1aWxkLXRlc3RzLW5vdC1ydW4tdGhlbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMDNkNTE0NzkxMTMxNzkzMWRkNDUzNTIwZWIyMzRhNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYzcxZWJkNDM0MzU1MzdkNzY3Nzk5ZTQxNGZjZTg4ZTUyMWI3Mjc4ZDQ4Yzg2MDY1MTIxNmUxZmM2NTU1YjQwIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLW9wZW5zc2wiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0CisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICAgIGlmIFsgISAtZSAke1N9L2FjaW5jbHVkZS5tNCAtYSAtZSAke1N9L2FjbG9jYWwubTQgXTsgdGhlbgorICAgICAgICAgICAgICAgY3AgJHtTfS9hY2xvY2FsLm00ICR7U30vYWNpbmNsdWRlLm00CisgICAgICAgZmkKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSBidWlsZHRlc3QKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0c3VpdGUvCisgICAgICAgIGluc3RhbGwgJHtTfS90ZXN0c3VpdGUvZ29sZC1idWcudHh0ICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzdWl0ZS8KKyAgICAgICAgaW5zdGFsbCAke1N9L3Rlc3RzdWl0ZS8qLXRlc3QgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHN1aXRlLworICAgICAgICAjIHRvb2xzIGNhbiBiZSBmb3VuZCBpbiBQQVRILCBub3QgaW4gLi4vdG9vbHMvCisgICAgICAgIHNlZCAtaSAtZSAnc3wuLi90b29scy98fCcgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHN1aXRlLyotdGVzdAorICAgICAgICBpbnN0YWxsICR7Qn0vdGVzdHN1aXRlLyotdGVzdCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0c3VpdGUvCit9CisKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlXzIuNy4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlXzIuNy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMjU3NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGVfMi43LjEuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBuZXR0bGUuaW5jCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgJiBHUEx2MiIKK0xJQ0VOU0VfJHtQTn0gPSAiTEdQTHYyLjErIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VycGVudC1kZWNyeXB0LmM7YmVnaW5saW5lPTUzO2VuZGxpbmU9Njc7bWQ1PWJjZmQ0NzQ1ZDUzY2E1N2Y4MjkwNzA4OTg5OGUzOTBkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NlcnBlbnQtc2V0LWtleS5jO2JlZ2lubGluZT01NjtlbmRsaW5lPTcwO21kNT1iY2ZkNDc0NWQ1M2NhNTdmODI5MDcwODk4OThlMzkwZCIKKworU1JDX1VSSVttZDVzdW1dID0gIjAwM2Q1MTQ3OTExMzE3OTMxZGQ0NTM1MjBlYjIzNGE1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJjNzFlYmQ0MzQzNTUzN2Q3Njc3OTllNDE0ZmNlODhlNTIxYjcyNzhkNDhjODYwNjUxMjE2ZTFmYzY1NTViNDAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8zLjEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8zLjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDcxMzRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlXzMuMS4xLmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgbmV0dGxlLmluYworCitMSUNFTlNFID0gIkxHUEx2MysgfCBHUEx2MisiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTEVTU0VSdjM7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkd2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VycGVudC1kZWNyeXB0LmM7YmVnaW5saW5lPTE0O2VuZGxpbmU9MzY7bWQ1PWNhMGQyMjBiYzQxM2UxODQyZWNjNTA3NjkwY2U0MTZlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NlcnBlbnQtc2V0LWtleS5jO2JlZ2lubGluZT0xNDtlbmRsaW5lPTM2O21kNT1jYTBkMjIwYmM0MTNlMTg0MmVjYzUwNzY5MGNlNDE2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gImI0MGZhODhkYzMyZjM3YTE4MmI2YjQyMDkyZWJiMTQ0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVmZDRkMjVkNjRkOGRkY2I4NWQwZDg5NzU3MmFmNzNiMDViNGQxNjNjNmNjNDk0MzhhNWJmYmI4ZmYyOTNkNGMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25wdGgvbnB0aC9wa2djb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25wdGgvbnB0aC9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZhMTJlNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnB0aC9ucHRoL3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitBZGRlZCBucHRoIHBrZ2NvbmZpZyBmaWxlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBucHRoLTEuMS9zcmMvbnB0aC5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIG5wdGgtMS4xL3NyYy9ucHRoLnBjLmluCitAQCAtMCwwICsxLDEwIEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrCisrTmFtZTogbnB0aAorK0Rlc2NyaXB0aW9uOiBhIG5ldyBwb3J0YWJsZSBwb3NpeCB0aHJlYWRpbmcgbGlicmFyeQorK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sbnB0aCAtbHB0aHJlYWQKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorSW5kZXg6IG5wdGgtMS4xL3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG5wdGgtMS4xLm9yaWcvc3JjL01ha2VmaWxlLmFtCisrKysgbnB0aC0xLjEvc3JjL01ha2VmaWxlLmFtCitAQCAtMjcsOCArMjcsMTAgQEAKKyAjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAKKyAjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBucHRoLnBjCisgCistRVhUUkFfRElTVCA9IGxpYm5wdGgudmVycworK0VYVFJBX0RJU1QgPSBsaWJucHRoLnZlcnMgbnB0aC5wYworICMJICAgICB2ZXJzaW9uaW5mby5yYy5pbgorIG5vZGlzdF9pbmNsdWRlX0hFQURFUlMgPSBucHRoLmgKKyAKK0luZGV4OiBucHRoLTEuMS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBucHRoLTEuMS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIG5wdGgtMS4xL2NvbmZpZ3VyZS5hYworQEAgLTMzNyw2ICszMzcsNyBAQCBzcmMvTWFrZWZpbGUKKyB3MzIvTWFrZWZpbGUKKyB0ZXN0cy9NYWtlZmlsZV0pCisgQUNfQ09ORklHX0ZJTEVTKG5wdGgtY29uZmlnLCBjaG1vZCAreCBucHRoLWNvbmZpZykKKytBQ19DT05GSUdfRklMRVMoW3NyYy9ucHRoLnBjXSkKKyBBQ19PVVRQVVQKKyAKKyBlY2hvICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnB0aC9ucHRoXzEuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnB0aC9ucHRoXzEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjM5NjJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGhfMS4yLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiTmV3IEdOVSBQb3J0YWJsZSBUaHJlYWRzIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy9zb2Z0d2FyZS9wdGgvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjMrICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlXAorICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjZcCisgICAgIgorU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9ucHRoL25wdGgtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjIyNmJhYzczNzRiOTQ2NmM2ZWMyNmIxYzM0ZGFiODQ0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZkZGJkZGRiMmNmNDlhNDcyM2Y5ZDFhZDY1NjNjNDgwZDY3NjBkY2I2M2NiNzcyNmI4ZmMzYmMyZTFiNmMwOGEiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbnB0aC1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZAorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGlibnB0aC5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vbnB0aC1jb25maWciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9maXgtYnVpbGQtb24teDg2XzY0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvZml4LWJ1aWxkLW9uLXg4Nl82NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmI3MjU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvZml4LWJ1aWxkLW9uLXg4Nl82NC5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGaXggYnVpbGQgZmFpbHVyZSBvbiB4ODZfNjQKKworV2hlbiB0aGUgdGFyZ2V0X2NwdSBpcyB4ODZfNjQsIHdlIHNob3VsZCBhc3N1bWUgdGhhdCB0aGUgcGtnIHVzZXMgNjRiaXQsCitvbmx5IGlmIFVTRV9OMzIgaXMgc2V0LCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhlIHBrZyB1c2VzIDMyYml0LiBJdCB1c2VkIGEKK29wcG9zaXRlIGxvZ2ljIGJlZm9yZS4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgY29uZmlndXJlLmluIHwgICAxMiArKysrKystLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworSW5kZXg6IG5zcHIvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbnNwci5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIG5zcHIvY29uZmlndXJlLmluCitAQCAtMTg3NSwyOCArMTg3NSwyNCBAQCB0b29scyBhcmUgc2VsZWN0ZWQgZHVyaW5nIHRoZSBYY29kZS9EZXZlCisgICAgICAgICBQUl9NRF9BU0ZJTEVTPW9zX0xpbnV4X2lhNjQucworICAgICAgICAgOzsKKyAgICAgeDg2XzY0KQorLSAgICAgICAgaWYgdGVzdCAtbiAiJFVTRV82NCI7IHRoZW4KKy0gICAgICAgICAgICBQUl9NRF9BU0ZJTEVTPW9zX0xpbnV4X3g4Nl82NC5zCistICAgICAgICBlbGlmIHRlc3QgLW4gIiRVU0VfWDMyIjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAtbiAiJFVTRV9YMzIiOyB0aGVuCisrICAgICAgICAgICAgQUNfREVGSU5FKGkzODYpCisgICAgICAgICAgICAgUFJfTURfQVNGSUxFUz1vc19MaW51eF94ODZfNjQucworICAgICAgICAgICAgIENDPSIkQ0MgLW14MzIiCisgICAgICAgICAgICAgQ1hYPSIkQ1hYIC1teDMyIgorICAgICAgICAgZWxzZQorLSAgICAgICAgICAgIEFDX0RFRklORShpMzg2KQorLSAgICAgICAgICAgIFBSX01EX0FTRklMRVM9b3NfTGludXhfeDg2LnMKKy0gICAgICAgICAgICBDQz0iJENDIC1tMzIiCistICAgICAgICAgICAgQ1hYPSIkQ1hYIC1tMzIiCisrICAgICAgICAgICAgUFJfTURfQVNGSUxFUz1vc19MaW51eF94ODZfNjQucworICAgICAgICAgZmkKKyAgICAgICAgIDs7CisgICAgIHBwY3xwb3dlcnBjKQorICAgICAgICAgUFJfTURfQVNGSUxFUz1vc19MaW51eF9wcGMucworICAgICAgICAgOzsKKyAgICAgcG93ZXJwYzY0KQorLSAgICAgICAgaWYgdGVzdCAtbiAiJFVTRV82NCI7IHRoZW4KKysgICAgICAgIGlmIHRlc3QgLW4gIiRVU0VfTjMyIjsgdGhlbgorKyAgICAgICAgICAgIFBSX01EX0FTRklMRVM9b3NfTGludXhfcHBjLnMKKysgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBDQz0iJENDIC1tNjQiCisgICAgICAgICAgICAgQ1hYPSIkQ1hYIC1tNjQiCistICAgICAgICBlbHNlCistICAgICAgICAgICAgUFJfTURfQVNGSUxFUz1vc19MaW51eF9wcGMucworICAgICAgICAgZmkKKyAgICAgICAgIDs7CisgICAgIG02OGspCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9uc3ByLnBjLmluIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvbnNwci5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzdkMGJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvbnNwci5wYy5pbgpAQCAtMCwwICsxLDExIEBACitvc19saWJzPS1scHRocmVhZCAtbGRsCitwcmVmaXg9T0VQUkVGSVgKK2V4ZWNfcHJlZml4PU9FRVhFQ1BSRUZJWAorbGliZGlyPU9FTElCRElSCitpbmNsdWRlZGlyPU9FSU5DRElSCisKK05hbWU6IE5TUFIKK0Rlc2NyaXB0aW9uOiBUaGUgTmV0c2NhcGUgUG9ydGFibGUgUnVudGltZQorVmVyc2lvbjogNC45LjUKK0xpYnM6IC1MJHtsaWJkaXJ9IC1scGxkczQgLWxwbGM0IC1sbnNwcjQgLWxwdGhyZWFkIC1sZGwKK0NmbGFnczoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL3JlbW92ZS1ycGF0aC1mcm9tLXRlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvcmVtb3ZlLXJwYXRoLWZyb20tdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdlNzg1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL3JlbW92ZS1ycGF0aC1mcm9tLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK0F1dGhvcjogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorRGF0ZTogICBUaHUgRmViIDkgMDA6MDM6MzggMjAxMiArMDIwMAorCitBdm9pZCBRQSB3YXJuaW5ncyBieSByZW1vdmluZyBoYXJkY29kZWQgcnBhdGggZnJvbSBiaW5hcmllcy4KKworWy4uLl0KK1dBUk5JTkc6IFFBIElzc3VlOiBwYWNrYWdlIG5zcHIgY29udGFpbnMgYmFkIFJQQVRIIHtidWlsZGRpcn0vdG1wL3dvcmsvYXJtdjV0ZS1wb2t5LWxpbnV4LWdudWVhYmkvbnNwci00LjguOS1yMS9uc3ByLTQuOC45L21vemlsbGEvbnNwcnB1Yi9wci90ZXN0cy8uLi8uLi9kaXN0L2xpYgoraW4gZmlsZSB7YnVpbGRkaXJ9L3RtcC93b3JrL2FybXY1dGUtcG9reS1saW51eC1nbnVlYWJpL25zcHItNC44LjktcjEvcGFja2FnZXMtc3BsaXQvbnNwci91c3IvbGliL25zcHIvdGVzdHMvbXVsdGl3YWl0CitbLi4uXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IG5zcHItNC44LjkvbW96aWxsYS9uc3BycHViL3ByL3Rlc3RzL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbnNwcnB1Yi5vcmlnL3ByL3Rlc3RzL01ha2VmaWxlLmluCTIwMTItMDItMTEgMDA6MDE6MTAuNDc2MjIwNTA1ICswMjAwCisrKysgbnNwcnB1Yi9wci90ZXN0cy9NYWtlZmlsZS5pbgkyMDEyLTAyLTEwIDIzOjU3OjQwLjAwMDAwMDAwMCArMDIwMAorQEAgLTM3OSw3ICszNzksNyBAQAorIGVuZGlmCisgCisgaWZlcSAoLCQoZmlsdGVyLW91dCBMaW51eCBHTlUgR05VXyUsJChPU19BUkNIKSkpCistICAgIExET1BUUyArPSAtWGxpbmtlciAtcnBhdGggJChBQlNPTFVURV9MSUJfRElSKQorKyAgICBMRE9QVFMgKz0gLVhsaW5rZXIKKyAgICAgaWZlcSAoJChVU0VfUFRIUkVBRFMpLDEpCisgICAgICAgICBFWFRSQV9MSUJTID0gLWxwdGhyZWFkCisgICAgIGVuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9yZW1vdmUtc3JjZGlyLWZyb20tY29uZmlndXJlLWluLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvcmVtb3ZlLXNyY2Rpci1mcm9tLWNvbmZpZ3VyZS1pbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGU3MTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvcmVtb3ZlLXNyY2Rpci1mcm9tLWNvbmZpZ3VyZS1pbi5wYXRjaApAQCAtMCwwICsxLDE5IEBACit0aGUgJHNyY2RpciBpcyBub3QgZGVmaW5lZCBhdCB0aGUgdGltZSBvZiBnbnUtY29uZmlndXJpemUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogbnNwci9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuc3ByLm9yaWcvY29uZmlndXJlLmluCisrKysgbnNwci9jb25maWd1cmUuaW4KK0BAIC04LDcgKzgsNyBAQCBBQ19QUkVSRVEoMi42MSkKKyBBQ19JTklUCisgQUNfQ09ORklHX1NSQ0RJUihbcHIvaW5jbHVkZS9uc3ByLmhdKQorIAorLUFDX0NPTkZJR19BVVhfRElSKCR7c3JjZGlyfS9idWlsZC9hdXRvY29uZikKKytBQ19DT05GSUdfQVVYX0RJUihidWlsZC9hdXRvY29uZikKKyBBQ19DQU5PTklDQUxfVEFSR0VUCisgCisgZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwcl80LjEwLjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwcl80LjEwLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ0OTk0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwcl80LjEwLjguYmIKQEAgLTAsMCArMSwxNzYgQEAKK1NVTU1BUlkgPSAiTmV0c2NhcGUgUG9ydGFibGUgUnVudGltZSBMaWJyYXJ5IgorSE9NRVBBR0UgPSAgImh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvbnNwci8iCitMSUNFTlNFID0gIkdQTC0yLjAgfCBNUEwtMi4wIHwgTEdQTC0yLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9jb25maWd1cmUuaW47YmVnaW5saW5lPTM7ZW5kbGluZT02O21kNT05MGMyZmRlZTM4ZTQ1ZDYzMDJhYmNmZTQ3NWM4YjVjNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5pbjtiZWdpbmxpbmU9NDtlbmRsaW5lPTM4O21kNT1iZWRhMWRiYjk4YTUxNWY1NTdkM2U1OGVmMDZiY2E5OSIKK1NFQ1RJT04gPSAibGlicy9uZXR3b3JrIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5tb3ppbGxhLm9yZy9wdWIvbW96aWxsYS5vcmcvbnNwci9yZWxlYXNlcy92JHtQVn0vc3JjL25zcHItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS1ycGF0aC1mcm9tLXRlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1idWlsZC1vbi14ODZfNjQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXNyY2Rpci1mcm9tLWNvbmZpZ3VyZS1pbi5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJICs9ICJmaWxlOi8vbnNwci5wYy5pbiIKKworU1JDX1VSSVttZDVzdW1dID0gIjhkN2M1YmQwYTViMGE3ZDBlNzA1YmU2NjQ3OTAzMGEwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUwN2VhNTdjNTI1YzBjNTI0ZGFlNDg1N2E2NDJiNGVmNWM5ZDc5NTUxODc1NGM3ZjgzNDIyZDIyZmU1NDRhMTUiCisKK1MgPSAiJHtXT1JLRElSfS9uc3ByLSR7UFZ9L25zcHIiCisKK1JERVBFTkRTXyR7UE59LWRldiArPSAicGVybCIKK1RBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorCitURVNUUyA9ICIgXAorICAgIGFjY2VwdCBcCisgICAgYWNjZXB0cmVhZCBcCisgICAgYWNjZXB0cmVhZGVtdSBcCisgICAgYWZmaW5pdHkgXAorICAgIGFsYXJtIFwKKyAgICBhbm9uZm0gXAorICAgIGF0b21pYyBcCisgICAgYXR0YWNoIFwKKyAgICBiaWdmaWxlIFwKKyAgICBjbGVhbnVwIFwKKyAgICBjbHRzcnYgIFwKKyAgICBjb25jdXIgXAorICAgIGN2YXIgXAorICAgIGN2YXIyIFwKKyAgICBkbGx0ZXN0IFwKKyAgICBkdG9hIFwKKyAgICBlcnJjb2RlcyBcCisgICAgZXhpdCBcCisgICAgZmRjYWNoIFwKKyAgICBmaWxlaW8gXAorICAgIGZvcmVpZ24gXAorICAgIGZvcm1hdHRtIFwKKyAgICBmc3luYyBcCisgICAgZ2V0aG9zdCBcCisgICAgZ2V0cHJvdG8gXAorICAgIGkybCBcCisgICAgaW5pdGNsayBcCisgICAgaW5ydmFsIFwKKyAgICBpbnN0cnVtdCBcCisgICAgaW50cmlvIFwKKyAgICBpbnRydXB0IFwKKyAgICBpb190aW1lb3V0IFwKKyAgICBpb2NvbnRociBcCisgICAgam9pbiBcCisgICAgam9pbmtrIFwKKyAgICBqb2lua3UgXAorICAgIGpvaW51ayBcCisgICAgam9pbnV1IFwKKyAgICBsYXllciBcCisgICAgbGF6eWluaXQgXAorICAgIGxpYmZpbGVuYW1lIFwKKyAgICBsbHRlc3QgXAorICAgIGxvY2sgXAorICAgIGxvY2tmaWxlIFwKKyAgICBsb2dmaWxlIFwKKyAgICBsb2dnZXIgXAorICAgIG1hbnlfY3YgXAorICAgIG11bHRpd2FpdCBcCisgICAgbmFtZXNobTEgXAorICAgIG5ibGF5ZXIgXAorICAgIG5vbmJsb2NrIFwKKyAgICBudGlvdG8gXAorICAgIG50b2ggXAorICAgIG9wXzJsb25nIFwKKyAgICBvcF9leGNsIFwKKyAgICBvcF9maWxuZiBcCisgICAgb3BfZmlsb2sgXAorICAgIG9wX25vZmlsIFwKKyAgICBwYXJlbnQgXAorICAgIHBhcnNldG0gXAorICAgIHBlZWsgXAorICAgIHBlcmYgXAorICAgIHBpcGVwaW5nIFwKKyAgICBwaXBlcGluZzIgXAorICAgIHBpcGVzZWxmIFwKKyAgICBwb2xsX25tIFwKKyAgICBwb2xsX3RvIFwKKyAgICBwb2xsYWJsZSBcCisgICAgcHJmdGVzdCBcCisgICAgcHJpbWJsb2sgXAorICAgIHByb3ZpZGVyIFwKKyAgICBwcnBvbGxtbCBcCisgICAgcmFuZmlsZSBcCisgICAgcmFuZHNlZWQgXAorICAgIHJlaW5pdCBcCisgICAgcndsb2NrdGVzdCBcCisgICAgc2VsX3NwZCBcCisgICAgc2VsY3RfZXIgXAorICAgIHNlbGN0X25tIFwKKyAgICBzZWxjdF90byBcCisgICAgc2VsaW50ciBcCisgICAgc2VtYSBcCisgICAgc2VtYWVyciBcCisgICAgc2VtYXBpbmcgXAorICAgIHNlbmR6bGYgXAorICAgIHNlcnZlcl90ZXN0IFwKKyAgICBzZXJ2cl9rayBcCisgICAgc2VydnJfdWsgXAorICAgIHNlcnZyX2t1IFwKKyAgICBzZXJ2cl91dSBcCisgICAgc2hvcnRfdGhyZWFkIFwKKyAgICBzaWdwaXBlIFwKKyAgICBzb2NrZXQgXAorICAgIHNvY2tvcHQgXAorICAgIHNvY2twaW5nIFwKKyAgICBzcHJpbnRmIFwKKyAgICBzdGFjayBcCisgICAgc3RkaW8gXAorICAgIHN0cjJhZGRyIFwKKyAgICBzdHJvZCBcCisgICAgc3dpdGNoIFwKKyAgICBzeXN0ZW0gXAorICAgIHRlc3RiaXQgXAorICAgIHRlc3RmaWxlIFwKKyAgICB0aHJlYWRzIFwKKyAgICB0aW1lbWFjIFwKKyAgICB0aW1ldGVzdCBcCisgICAgdHBkIFwKKyAgICB1ZHBzcnYgXAorICAgIHZlcmNoZWNrIFwKKyAgICB2ZXJzaW9uIFwKKyAgICB3cml0ZXYgXAorICAgIHhub3RpZnkgXAorICAgIHplcm9sZW4iCisKK1BSID0gInIxIgorCitpbmhlcml0IGF1dG90b29scworCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJb2VfcnVubWFrZSBDUk9TU19DT01QSUxFPTEgQ0ZMQUdTPSItRFhQX1VOSVgiIExERkxBR1M9IiIgQ0M9Z2NjIC1DIGNvbmZpZyBleHBvcnQKK30KKworZG9fY29tcGlsZV9hcHBlbmQoKSB7CisJb2VfcnVubWFrZSAtQyBwci90ZXN0cworfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1EICR7V09SS0RJUn0vbnNwci5wYy5pbiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3ByLnBjCisgICAgc2VkIC1pIHM6T0VQUkVGSVg6JHtwcmVmaXh9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNwci5wYworICAgIHNlZCAtaSBzOk9FTElCRElSOiR7bGliZGlyfTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcHIucGMKKyAgICBzZWQgLWkgczpPRUlOQ0RJUjoke2luY2x1ZGVkaXJ9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNwci5wYworICAgIHNlZCAtaSBzOk9FRVhFQ1BSRUZJWDoke2V4ZWNfcHJlZml4fTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcHIucGMKKworICAgIG1rZGlyIC1wICR7RH0ke2xpYmRpcn0vbnNwci90ZXN0cworICAgIGluc3RhbGwgLW0gMDc1NSAke1N9L3ByL3Rlc3RzL3J1bnRlc3RzLnBsICR7RH0ke2xpYmRpcn0vbnNwci90ZXN0cworICAgIGluc3RhbGwgLW0gMDc1NSAke1N9L3ByL3Rlc3RzL3J1bnRlc3RzLnNoICR7RH0ke2xpYmRpcn0vbnNwci90ZXN0cworICAgIGNkICR7Qn0vcHIvdGVzdHMKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtURVNUU30gJHtEfSR7bGliZGlyfS9uc3ByL3Rlc3RzCisKKyAgICAjIGRlbGV0ZSBjb21waWxlLWV0LnBsIGFuZCBwZXJyLnByb3BlcnRpZXMgZnJvbSAke2JpbmRpcn0gYmVjYXVzZSB0aGVzZSBhcmUKKyAgICAjIG9ubHkgdXNlZCB0byBnZW5lcmF0ZSBwcmVyci5jIGFuZCBwcmVyci5oIGZpbGVzIGZyb20gcHJlcnIuZXQgYXQgY29tcGlsZQorICAgICMgdGltZQorICAgIHJtICR7RH0ke2JpbmRpcn0vY29tcGlsZS1ldC5wbCAke0R9JHtiaW5kaXJ9L3ByZXJyLnByb3BlcnRpZXMKK30KKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYiouc28iCitGSUxFU18ke1BOfS1kZXYgPSAiJHtiaW5kaXJ9LyogJHtsaWJkaXJ9L25zcHIvdGVzdHMvKiAke2xpYmRpcn0vcGtnY29uZmlnIFwKKyAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9LyogJHtkYXRhZGlyfS9hY2xvY2FsLyogIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vbnNwci90ZXN0cy8uZGVidWcvKiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MtbXlob3N0bmFtZS9uc3MtbXlob3N0bmFtZV8wLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy1teWhvc3RuYW1lL25zcy1teWhvc3RuYW1lXzAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmNlOWU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MtbXlob3N0bmFtZS9uc3MtbXlob3N0bmFtZV8wLjMuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJOYW1lIFNlcnZpY2UgU3dpdGNoIG1vZHVsZSBmb3IgcmVzb2x2aW5nIHRoZSBsb2NhbCBob3N0bmFtZSIKK0RFU0NSSVBUSU9OID0gInBsdWdpbiBmb3IgdGhlIEdOVSBOYW1lIFNlcnZpY2UgU3dpdGNoIChOU1MpIGZ1bmN0aW9uYWxpdHkgb2YgXAordGhlIEdOVSBDIExpYnJhcnkgKGdsaWJjKSBwcm92aWRpbmcgaG9zdCBuYW1lIHJlc29sdXRpb24gZm9yIHRoZSBsb2NhbGx5IFwKK2NvbmZpZ3VyZWQgc3lzdGVtIGhvc3RuYW1lIGFzIHJldHVybmVkIGJ5IGdldGhvc3RuYW1lKDIpLiIKK0hPTUVQQUdFID0gImh0dHA6Ly8wcG9pbnRlci5kZS9sZW5uYXJ0L3Byb2plY3RzL25zcy1teWhvc3RuYW1lLyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSIKKworU1JDX1VSSSA9ICJodHRwOi8vMHBvaW50ZXIuZGUvbGVubmFydC9wcm9qZWN0cy9uc3MtbXlob3N0bmFtZS9uc3MtbXlob3N0bmFtZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNGFiOWFjMzZjMDUzYWI4ZmI4MzZkYjFjYmQ0YTQ4ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyYmE3NDRlYThkNTc4ZDFjNTdjODU4ODRlOTRhMzA0MmVlMTc4NDNhNTI5NDQzNGQzYTdmNmM0ZDY3ZTdjYWYyIgorCitpbmhlcml0IGF1dG90b29scyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgc3lzdGVtZCBoYXMgaXRzIG93biBjb3B5IG9mIG5zcy1teWhvc3RuYW1lCitDT05GTElDVF9ESVNUUk9fRkVBVFVSRVMgPSAic3lzdGVtZCIKKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlzZWQgLWUgJy9eaG9zdHM6L3MvXHMqXDxteWhvc3RuYW1lXD4vLycgXAorCQktZSAncy9cKF5ob3N0czouKlwpXChcPGZpbGVzXD5cKVwoLipcKVwoXDxkbnNcPlwpXCguKlwpL1wxXDIgbXlob3N0bmFtZSBcM1w0XDUvJyBcCisJCS1pICREJHtzeXNjb25mZGlyfS9uc3N3aXRjaC5jb25mCit9CisKK3BrZ19wcmVybV8ke1BOfSAoKSB7CisJc2VkIC1lICcvXmhvc3RzOi9zL1xzKlw8bXlob3N0bmFtZVw+Ly8nIFwKKwkJLWUgJy9eaG9zdHM6L3MvXHMqbXlob3N0bmFtZS8vJyBcCisJCS1pICREJHtzeXNjb25mZGlyfS9uc3N3aXRjaC5jb25mCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1pbmNvcnJlY3Qtc2hlYmFuZy1vZi1wZXJsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtaW5jb3JyZWN0LXNoZWJhbmctb2YtcGVybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDc1OTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtaW5jb3JyZWN0LXNoZWJhbmctb2YtcGVybC5wYXRjaApAQCAtMCwwICsxLDExMCBAQAorbnNzOiBmaXggaW5jb3JyZWN0IHNoZWJhbmcgb2YgcGVybAorCitSZXBsYWNlIGluY29ycmVjdCBzaGViYW5nIG9mIHBlcmwgd2l0aCBgIyEvdXNyL2Jpbi9lbnYgcGVybCcuCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbnNzL2NtZC9zbWltZXRvb2xzL3NtaW1lICB8IDIgKy0KKyBuc3MvY29yZWNvbmYvY3BkaXN0LnBsICAgIHwgMiArLQorIG5zcy9jb3JlY29uZi9pbXBvcnQucGwgICAgfCAyICstCisgbnNzL2NvcmVjb25mL2puaXJlZ2VuLnBsICB8IDIgKy0KKyBuc3MvY29yZWNvbmYvb3V0b2ZkYXRlLnBsIHwgMiArLQorIG5zcy9jb3JlY29uZi9yZWxlYXNlLnBsICAgfCAyICstCisgbnNzL2NvcmVjb25mL3ZlcnNpb24ucGwgICB8IDIgKy0KKyBuc3MvdGVzdHMvY2xlYW5fdGJ4ICAgICAgIHwgMiArLQorIG5zcy90ZXN0cy9wYXRoX3VuaXEgICAgICAgfCAyICstCisgOSBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9uc3MvY21kL3NtaW1ldG9vbHMvc21pbWUgYi9uc3MvY21kL3NtaW1ldG9vbHMvc21pbWUKKy0tLSBhL25zcy9jbWQvc21pbWV0b29scy9zbWltZQorKysrIGIvbnNzL2NtZC9zbWltZXRvb2xzL3NtaW1lCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvbG9jYWwvYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgCisgIyBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisgIyBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCitkaWZmIC0tZ2l0IGEvbnNzL2NvcmVjb25mL2NwZGlzdC5wbCBiL25zcy9jb3JlY29uZi9jcGRpc3QucGwKK2luZGV4IDgwMGVkZmIuLjY1MjE4N2YgMTAwNzU1CistLS0gYS9uc3MvY29yZWNvbmYvY3BkaXN0LnBsCisrKysgYi9uc3MvY29yZWNvbmYvY3BkaXN0LnBsCitAQCAtMSw0ICsxLDQgQEAKKy0jISAvdXNyL2xvY2FsL2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMKKyAjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvaW1wb3J0LnBsIGIvbnNzL2NvcmVjb25mL2ltcG9ydC5wbAoraW5kZXggZGQyZDE3Ny4uNDI4ZWFhNSAxMDA3NTUKKy0tLSBhL25zcy9jb3JlY29uZi9pbXBvcnQucGwKKysrKyBiL25zcy9jb3JlY29uZi9pbXBvcnQucGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhIC91c3IvbG9jYWwvYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgIworICMgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICMgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworZGlmZiAtLWdpdCBhL25zcy9jb3JlY29uZi9qbmlyZWdlbi5wbCBiL25zcy9jb3JlY29uZi9qbmlyZWdlbi5wbAoraW5kZXggMjAzOTE4MC4uNWY0ZjY5YyAxMDA3NTUKKy0tLSBhL25zcy9jb3JlY29uZi9qbmlyZWdlbi5wbAorKysrIGIvbnNzL2NvcmVjb25mL2puaXJlZ2VuLnBsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvbG9jYWwvYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgIworICMgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICMgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworZGlmZiAtLWdpdCBhL25zcy9jb3JlY29uZi9vdXRvZmRhdGUucGwgYi9uc3MvY29yZWNvbmYvb3V0b2ZkYXRlLnBsCitpbmRleCAzM2Q4MGJiLi4wMWZjMDk3IDEwMDc1NQorLS0tIGEvbnNzL2NvcmVjb25mL291dG9mZGF0ZS5wbAorKysrIGIvbnNzL2NvcmVjb25mL291dG9mZGF0ZS5wbAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2xvY2FsL2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMKKyAjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvcmVsZWFzZS5wbCBiL25zcy9jb3JlY29uZi9yZWxlYXNlLnBsCitpbmRleCA3Y2RlMTlkLi5iNWRmMmY2IDEwMDc1NQorLS0tIGEvbnNzL2NvcmVjb25mL3JlbGVhc2UucGwKKysrKyBiL25zcy9jb3JlY29uZi9yZWxlYXNlLnBsCitAQCAtMSw0ICsxLDQgQEAKKy0jISAvdXNyL2xvY2FsL2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMKKyAjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvdmVyc2lvbi5wbCBiL25zcy9jb3JlY29uZi92ZXJzaW9uLnBsCitpbmRleCBkMmE0OTQyLi43OTM1OWZlIDEwMDY0NAorLS0tIGEvbnNzL2NvcmVjb25mL3ZlcnNpb24ucGwKKysrKyBiL25zcy9jb3JlY29uZi92ZXJzaW9uLnBsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3Ivc2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMKKyAjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKK2RpZmYgLS1naXQgYS9uc3MvdGVzdHMvY2xlYW5fdGJ4IGIvbnNzL3Rlc3RzL2NsZWFuX3RieAoraW5kZXggNGRlOTU1NS4uYTdkZWY5ZiAxMDA3NTUKKy0tLSBhL25zcy90ZXN0cy9jbGVhbl90YngKKysrKyBiL25zcy90ZXN0cy9jbGVhbl90YngKK0BAIC0xLDQgKzEsNCBAQAorLSMhIC9iaW4vcGVybAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMKK2RpZmYgLS1naXQgYS9uc3MvdGVzdHMvcGF0aF91bmlxIGIvbnNzL3Rlc3RzL3BhdGhfdW5pcQoraW5kZXggZjI5ZjYwYS4uMDhmYmZmYSAxMDA3NTUKKy0tLSBhL25zcy90ZXN0cy9wYXRoX3VuaXEKKysrKyBiL25zcy90ZXN0cy9wYXRoX3VuaXEKK0BAIC0xLDQgKzEsNCBAQAorLSMhIC9iaW4vcGVybAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NmRlMDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1uc2luc3RhbGwtYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRml4IG5zcyBtdWx0aWxpYiBidWlsZCBvbiBvcGVuU1VTRSAxMS54IDMyYml0CisKK1doaWxlIGJ1aWxkaW5nIGxpYjY0LW5zcyBvbiBvcGVuU1VTRSAxMS54IDMyYml0LCB0aGUgbnNpbnN0YWxsIHdpbGwKK2ZhaWwgd2l0aCBlcnJvcjoKKworKiBuc2luc3RhbGwuYzoxOjA6IHNvcnJ5LCB1bmltcGxlbWVudGVkOiA2NC1iaXQgbW9kZSBub3QgY29tcGlsZWQKKworSXQgY2F1c2VkIGJ5IHRoZSAnLW02NCcgb3B0aW9uIHdoaWNoIHBhc3NlZCB0byBob3N0IGdjYy4KKworVGhlIG5zaW5zdGFsbCB3YXMgYnVpbHQgZmlyc3Qgd2hpbGUgbnNzIHN0YXJ0aW5nIHRvIGJ1aWxkLCBpdCBvbmx5IHJ1bnMKK29uIGhvc3QgdG8gaW5zdGFsbCBidWlsdCBmaWxlcywgaXQgZG9lc24ndCBuZWVkIGFueSBjcm9zcy1jb21wbGluZyBvcgorbXVsdGlsaWIgYnVpbGQgb3B0aW9ucy4gSnVzdCBjbGVhbiB0aGUgQVJDSEZMQUcgYW5kIExERkxBR1MgdG8gZml4IHRoaXMKK2Vycm9yLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvbnNpbnN0YWxsL01ha2VmaWxlIGIvbnNzL2NvcmVjb25mL25zaW5zdGFsbC9NYWtlZmlsZQoraW5kZXggMTg1MGJjYi4uNWFlZTg0ZiAxMDA2NDQKKy0tLSBhL25zcy9jb3JlY29uZi9uc2luc3RhbGwvTWFrZWZpbGUKKysrKyBiL25zcy9jb3JlY29uZi9uc2luc3RhbGwvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCwxMiBAQCBJTlRFUk5BTF9UT09MUyAgPSAxCisgCisgaW5jbHVkZSAkKERFUFRIKS9jb3JlY29uZi9jb25maWcubWsKKyAKKysjIG5zaW5zdGFsbCBpcyB1bmZpdCBmb3IgY3Jvc3MtY29tcGlsaW5nL211bHRpbGliLWJ1aWxkIHNpbmNlIGl0IHdhcworKyMgYWx3YXlzIHJ1biBvbiBsb2NhbCBob3N0IHRvIGluc3RhbGwgYnVpbHQgZmlsZXMuIFRoaXMgY2hhbmdlIGludGVuZHMKKysjIHRvIGNsZWFuIHRoZSAnLW02NCcgZnJvbSBBUkNIRkxBRyBhbmQgTERGTEFHUy4KKytBUkNIRkxBRyA9CisrTERGTEFHUyA9CisrCisgaWZlcSAoLCQoZmlsdGVyLW91dCBPUzIgV0lOJSwkKE9TX1RBUkdFVCkpKQorIFBST0dSQU0JCT0KKyBlbHNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1zdXBwb3J0LWNyb3NzLWNvbXBpbGluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LXN1cHBvcnQtY3Jvc3MtY29tcGlsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYjM1NTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1zdXBwb3J0LWNyb3NzLWNvbXBpbGluZy5wYXRjaApAQCAtMCwwICsxLDcxIEBACituc3M6IGZpeCBzdXBwb3J0IGNyb3NzIGNvbXBpbGluZworCitMZXQgc29tZSBtYWtlIHZhcmlhYmxlcyBiZSBhc3NpZ25lZCBmcm9tIG91dHNpZGUgbWFrZWZpbGUuCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIG5zcy9jb3JlY29uZi9MaW51eC5tayAgIHwgMTIgKysrKysrKysrKystCisgbnNzL2NvcmVjb25mL2FyY2gubWsgICAgfCAgMiArLQorIG5zcy9saWIvZnJlZWJsL01ha2VmaWxlIHwgIDYgKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbnNzL2NvcmVjb25mL0xpbnV4Lm1rIGIvbnNzL2NvcmVjb25mL0xpbnV4Lm1rCistLS0gYS9uc3MvY29yZWNvbmYvTGludXgubWsKKysrKyBiL25zcy9jb3JlY29uZi9MaW51eC5taworQEAgLTE2LDExICsxNiwyMSBAQCBpZmVxICgkKFVTRV9QVEhSRUFEUyksMSkKKyAJSU1QTF9TVFJBVEVHWSA9IF9QVEgKKyBlbmRpZgorIAorK2lmbmRlZiBDQworIENDCQkJPSBnY2MKKytlbmRpZgorKworK2lmZGVmIENYWAorK0NDQwkJCT0gJChDWFgpCisrZWxzZQorIENDQwkJCT0gZysrCisrZW5kaWYKKysKKytpZm5kZWYgUkFOTElCCisgUkFOTElCCQkJPSByYW5saWIKKytlbmRpZgorIAorLURFRkFVTFRfQ09NUElMRVIgPSBnY2MKKytERUZBVUxUX0NPTVBJTEVSID0gJChDQykKKyAKKyBpZmVxICgkKE9TX1RBUkdFVCksQW5kcm9pZCkKKyBpZm5kZWYgQU5EUk9JRF9OREsKK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvYXJjaC5tayBiL25zcy9jb3JlY29uZi9hcmNoLm1rCitpbmRleCA2NTU3MzQ4Li5iNzIyNDEyIDEwMDY0NAorLS0tIGEvbnNzL2NvcmVjb25mL2FyY2gubWsKKysrKyBiL25zcy9jb3JlY29uZi9hcmNoLm1rCitAQCAtMzcsNyArMzcsNyBAQCBPU19URVNUIDo9ICQoc2hlbGwgdW5hbWUgLW0pCisgaWZlcSAoJChPU19URVNUKSxpODZwYykKKyAgICAgT1NfUkVMRUFTRSA6PSAkKHNoZWxsIHVuYW1lIC1yKV8kKE9TX1RFU1QpCisgZWxzZQorLSAgICBPU19SRUxFQVNFIDo9ICQoc2hlbGwgdW5hbWUgLXIpCisrICAgIE9TX1JFTEVBU0UgPz0gJChzaGVsbCB1bmFtZSAtcikKKyBlbmRpZgorIAorICMKK2RpZmYgLS1naXQgYS9uc3MvbGliL2ZyZWVibC9NYWtlZmlsZSBiL25zcy9saWIvZnJlZWJsL01ha2VmaWxlCitpbmRleCAwZDI5M2YxLi42NzhmNTA2IDEwMDY0NAorLS0tIGEvbnNzL2xpYi9mcmVlYmwvTWFrZWZpbGUKKysrKyBiL25zcy9saWIvZnJlZWJsL01ha2VmaWxlCitAQCAtMzYsNiArMzYsMTIgQEAgaWZkZWYgVVNFXzY0CisgCURFRklORVMgKz0gLUROU1NfVVNFXzY0CisgZW5kaWYKKyAKKytpZmVxICgkKE9TX1RFU1QpLG1pcHMpCisraWZuZGVmIFVTRV82NAorKwlERUZJTkVTICs9IC1ETlNfUFRSX0xFXzMyCisrZW5kaWYKKytlbmRpZgorKworIGlmZGVmIFVTRV9BQkkzMl9GUFUKKyAJREVGSU5FUyArPSAtRE5TU19VU0VfQUJJMzJfRlBVCisgZW5kaWYKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLW5vLXJwYXRoLWZvci1jcm9zcy1jb21waWxpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLW5vLXJwYXRoLWZvci1jcm9zcy1jb21waWxpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY2MWRjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3Mtbm8tcnBhdGgtZm9yLWNyb3NzLWNvbXBpbGluZy5wYXRjaApAQCAtMCwwICsxLDI2IEBACituc3M6bm8gcnBhdGggZm9yIGNyb3NzIGNvbXBpbGluZworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBuc3MvY21kL3BsYXRsaWJzLm1rIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL25zcy9jbWQvcGxhdGxpYnMubWsgYi9uc3MvY21kL3BsYXRsaWJzLm1rCistLS0gYS9uc3MvY21kL3BsYXRsaWJzLm1rCisrKysgYi9uc3MvY21kL3BsYXRsaWJzLm1rCitAQCAtMTgsOSArMTgsOSBAQCBlbmRpZgorIAorIGlmZXEgKCQoT1NfQVJDSCksIExpbnV4KQorIGlmZXEgKCQoVVNFXzY0KSwgMSkKKy1FWFRSQV9TSEFSRURfTElCUyArPSAtV2wsLXJwYXRoLCckJE9SSUdJTi8uLi9saWI2NDovb3B0L3N1bi9wcml2YXRlL2xpYjY0OiQkT1JJR0lOLy4uL2xpYicKKysjRVhUUkFfU0hBUkVEX0xJQlMgKz0gLVdsLC1ycGF0aCwnJCRPUklHSU4vLi4vbGliNjQ6L29wdC9zdW4vcHJpdmF0ZS9saWI2NDokJE9SSUdJTi8uLi9saWInCisgZWxzZQorLUVYVFJBX1NIQVJFRF9MSUJTICs9IC1XbCwtcnBhdGgsJyQkT1JJR0lOLy4uL2xpYjovb3B0L3N1bi9wcml2YXRlL2xpYicKKysjRVhUUkFfU0hBUkVEX0xJQlMgKz0gLVdsLC1ycGF0aCwnJCRPUklHSU4vLi4vbGliOi9vcHQvc3VuL3ByaXZhdGUvbGliJworIGVuZGlmCisgZW5kaWYKKyAKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLnBjLmluIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDBmNjM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy5wYy5pbgpAQCAtMCwwICsxLDExIEBACitwcmVmaXg9T0VQUkVGSVgKK2V4ZWNfcHJlZml4PU9FRVhFQ1BSRUZJWAorbGliZGlyPU9FTElCRElSCitpbmNsdWRlZGlyPU9FSU5DRElSCisKK05hbWU6IE5TUworRGVzY3JpcHRpb246IE5ldHdvcmsgU2VjdXJpdHkgU2VydmljZXMKK1ZlcnNpb246ICVOU1NfVkVSU0lPTiUKK1JlcXVpcmVzOiBuc3ByID49ICVOU1BSX1ZFUlNJT04lCitMaWJzOiAtbHNzbDMgLWxzbWltZTMgLWxuc3MzIC1sc29mdG9rbjMgLWxuc3N1dGlsMworQ2ZsYWdzOiAtSU9FSU5DRElSCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3Mvc2lnbmxpYnMuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3Mvc2lnbmxpYnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc0ZTQ5OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9zaWdubGlicy5zaApAQCAtMCwwICsxLDIwIEBACisjIS9iaW4vc2gKKworIyBzaWdubGlicy5zaAorIworIyAoYykyMDEwIFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorIworIyByZWdlbmVyYXRlcyB0aGUgLmNoayBmaWxlcyBmb3IgdGhlIE5TUyBsaWJyYXJpZXMgdGhhdCByZXF1aXJlIGl0CisjIHNpbmNlIHRoZSBvbmVzIHRoYXQgYXJlIGJ1aWx0IGhhdmUgaW5jb3JyZWN0IGNoZWNrc3VtcyB0aGF0IHdlcmUKKyMgY2FsY3VsYXRlZCBvbiB0aGUgaG9zdCB3aGVyZSB0aGV5IHJlYWxseSBuZWVkIHRvIGJlIGRvbmUgb24gdGhlCisjIHRhcmdldAorCitDSEtfRklMRVM9YGxzIC9saWIqLyouY2hrIC91c3IvbGliKi8qLmNoayAyPi9kZXYvbnVsbGAKK1NJR05fQklOQVJZPWB3aGljaCBzaGxpYnNpZ25gCitmb3IgSSBpbiAkQ0hLX0ZJTEVTCitkbworICAgICAgIEROPWBkaXJuYW1lICRJYAorICAgICAgIEJOPWBiYXNlbmFtZSAkSSAuY2hrYAorICAgICAgIEZOPSRETi8kQk4uc28KKyAgICAgICAkU0lHTl9CSU5BUlkgLWkgJEZOCitkb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3NfMy4xOS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzXzMuMTkuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2E0YTFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzXzMuMTkuMi5iYgpAQCAtMCwwICsxLDIyMyBAQAorU1VNTUFSWSA9ICJNb3ppbGxhJ3MgU1NMIGFuZCBUTFMgaW1wbGVtZW50YXRpb24iCitERVNDUklQVElPTiA9ICJOZXR3b3JrIFNlY3VyaXR5IFNlcnZpY2VzIChOU1MpIGlzIGEgc2V0IG9mIGxpYnJhcmllcyBcCitkZXNpZ25lZCB0byBzdXBwb3J0IGNyb3NzLXBsYXRmb3JtIGRldmVsb3BtZW50IG9mIFwKK3NlY3VyaXR5LWVuYWJsZWQgY2xpZW50IGFuZCBzZXJ2ZXIgYXBwbGljYXRpb25zLiBcCitBcHBsaWNhdGlvbnMgYnVpbHQgd2l0aCBOU1MgY2FuIHN1cHBvcnQgU1NMIHYyIGFuZCB2MywgXAorVExTLCBQS0NTIDUsIFBLQ1MgNywgUEtDUyAxMSwgUEtDUyAxMiwgUy9NSU1FLCBYLjUwOSBcCit2MyBjZXJ0aWZpY2F0ZXMsIGFuZCBvdGhlciBzZWN1cml0eSBzdGFuZGFyZHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9zZWN1cml0eS9wa2kvbnNzLyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJNUEwtMi4wIHwgKE1QTC0yLjAgJiBHUEwtMi4wKykgfCAoTVBMLTIuMCAmIExHUEwtMi4xKykiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL25zcy9DT1BZSU5HO21kNT0zYjFlODhlMWI5YzBiNWE0YjI4ODFkNDZjY2UwNmExOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9uc3MvbGliL2ZyZWVibC9tcGkvZG9jL0xJQ0VOU0U7bWQ1PTQ5MWYxNThkMDlkOTQ4NDY2YWZjZTg1ZDZmMWZlMThmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL25zcy9saWIvZnJlZWJsL21waS9kb2MvTElDRU5TRS1NUEw7bWQ1PTVkNDI1YzhmMzE1N2RiZjIxMmRiMmVjNTNkOWU1MTMyIgorCitTUkNfVVJJID0gIlwKKyAgICBodHRwOi8vZnRwLm1vemlsbGEub3JnL3B1Yi9tb3ppbGxhLm9yZy9zZWN1cml0eS9uc3MvcmVsZWFzZXMvTlNTXzNfMTlfMl9SVE0vc3JjLyR7QlB9LnRhci5neiBcCisgICAgZmlsZTovL25zcy1maXgtc3VwcG9ydC1jcm9zcy1jb21waWxpbmcucGF0Y2ggXAorICAgIGZpbGU6Ly9uc3Mtbm8tcnBhdGgtZm9yLWNyb3NzLWNvbXBpbGluZy5wYXRjaCBcCisgICAgZmlsZTovL25zcy1maXgtaW5jb3JyZWN0LXNoZWJhbmctb2YtcGVybC5wYXRjaCBcCisgICAgZmlsZTovL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoIFwKKyAgICBmaWxlOi8vbnNzLnBjLmluIFwKKyAgICBmaWxlOi8vc2lnbmxpYnMuc2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjAyZmZkMWU4ZThlZjVmODUxMmZhMDJkOGNhOWRiM2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTMwNjY2M2U4ZjYxZDg0NDlhZDhjYmNmZmFiNzQzYTYwNGRjZDlmNmYzNDIzMmMyMTA4NDdjNTFkY2UyYzlhZSIKKworaW5oZXJpdCBzaXRlaW5mbworCitERVBFTkRTID0gInNxbGl0ZTMgbnNwciB6bGliIG5zcy1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJzcWxpdGUzLW5hdGl2ZSBuc3ByLW5hdGl2ZSB6bGliLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59LXNtaW1lID0gInBlcmwiCisKK1REID0gIiR7U30vdGVudGF0aXZlLWRpc3QiCitURFMgPSAiJHtTfS90ZW50YXRpdmUtZGlzdC1zdGFnaW5nIgorCitUQVJHRVRfQ0NfQVJDSCArPSAiJHtMREZMQUdTfSIKKworZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKyAgICBleHBvcnQgTlNQUl9JTkNMVURFX0RJUj0ke1NUQUdJTkdfSU5DRElSX05BVElWRX0KKyAgICBleHBvcnQgTlNQUl9MSUJfRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfQorfQorCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworICAgIGV4cG9ydCBMREZMQUdTPSIiCit9CisKK2RvX2NvbXBpbGUoKSB7CisgICAgZXhwb3J0IENST1NTX0NPTVBJTEU9MQorICAgIGV4cG9ydCBOQVRJVkVfQ0M9ImdjYyIKKyAgICBleHBvcnQgQlVJTERfT1BUPTEKKworICAgIGV4cG9ydCBGUkVFQkxfTk9fREVQRU5EPTEKKyAgICBleHBvcnQgRlJFRUJMX0xPV0hBU0g9MQorCisgICAgZXhwb3J0IExJQkRJUj0ke2xpYmRpcn0KKyAgICBleHBvcnQgTU9aSUxMQV9DTElFTlQ9MQorICAgIGV4cG9ydCBOU19VU0VfR0NDPTEKKyAgICBleHBvcnQgTlNTX1VTRV9TWVNURU1fU1FMSVRFPTEKKyAgICBleHBvcnQgTlNTX0VOQUJMRV9FQ0M9MQorCisgICAgZXhwb3J0IE9TX1JFTEVBU0U9My40CisgICAgZXhwb3J0IE9TX1RBUkdFVD1MaW51eAorICAgIGV4cG9ydCBPU19BUkNIPUxpbnV4CisKKyAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYyIgXTsgdGhlbgorICAgICAgICBPU19URVNUPXBwYworICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gInBvd2VycGM2NCIgXTsgdGhlbgorICAgICAgICBPU19URVNUPXBwYzY0CisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAibWlwcyIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzZWwiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwczY0IiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHM2NGVsIiBdOyB0aGVuCisgICAgICAgIE9TX1RFU1Q9bWlwcworICAgIGVsc2UKKyAgICAgICAgT1NfVEVTVD0iJHtUQVJHRVRfQVJDSH0iCisgICAgZmkKKworICAgIGlmIFsgIiR7U0lURUlORk9fQklUU30iID0gIjY0IiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBVU0VfNjQ9MQorICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgLWEgIiR7U0lURUlORk9fQklUU30iID0gIjMyIiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBVU0VfWDMyPTEKKyAgICBmaQorCisgICAgIyBXZSBjYW4gbW9kaWZ5IENDIGluIHRoZSBlbnZpcm9ubWVudCwgYnV0IGlmIHdlIHNldCBpdCB2aWEgYW4KKyAgICAjIGFyZ3VtZW50IHRvIG1ha2UsIG5zaW5zdGFsbCwgYSBob3N0IHByb2dyYW0sIHdpbGwgYWxzbyBidWlsZCB3aXRoIGl0IQorICAgICMKKyAgICBleHBvcnQgQ0M9IiR7Q0N9IC1nIgorICAgIG1ha2UgLUMgLi9uc3MgQ0NDPSIke0NYWH0gLWciIFwKKyAgICAgICAgT1NfVEVTVD0ke09TX1RFU1R9Cit9CisKKworZG9faW5zdGFsbF9wcmVwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKyAgICBleHBvcnQgTERGTEFHUz0iIgorfQorCitkb19pbnN0YWxsKCkgeworICAgIGV4cG9ydCBDUk9TU19DT01QSUxFPTEKKyAgICBleHBvcnQgTkFUSVZFX0NDPSJnY2MiCisgICAgZXhwb3J0IEJVSUxEX09QVD0xCisKKyAgICBleHBvcnQgRlJFRUJMX05PX0RFUEVORD0xCisKKyAgICBleHBvcnQgTElCRElSPSR7bGliZGlyfQorICAgIGV4cG9ydCBNT1pJTExBX0NMSUVOVD0xCisgICAgZXhwb3J0IE5TX1VTRV9HQ0M9MQorICAgIGV4cG9ydCBOU1NfVVNFX1NZU1RFTV9TUUxJVEU9MQorICAgIGV4cG9ydCBOU1NfRU5BQkxFX0VDQz0xCisKKyAgICBleHBvcnQgT1NfUkVMRUFTRT0zLjQKKyAgICBleHBvcnQgT1NfVEFSR0VUPUxpbnV4CisgICAgZXhwb3J0IE9TX0FSQ0g9TGludXgKKworICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjIiBdOyB0aGVuCisgICAgICAgIE9TX1RFU1Q9cHBjCisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYzY0IiBdOyB0aGVuCisgICAgICAgIE9TX1RFU1Q9cHBjNjQKKyAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzIiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHNlbCIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzNjQiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwczY0ZWwiIF07IHRoZW4KKyAgICAgICAgT1NfVEVTVD1taXBzCisgICAgZWxzZQorICAgICAgICBPU19URVNUPSIke1RBUkdFVF9BUkNIfSIKKyAgICBmaQorICAgIGlmIFsgIiR7U0lURUlORk9fQklUU30iID0gIjY0IiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBVU0VfNjQ9MQorICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgLWEgIiR7U0lURUlORk9fQklUU30iID0gIjMyIiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBVU0VfWDMyPTEKKyAgICBmaQorCisgICAgbWFrZSAtQyAuL25zcyBcCisgICAgICAgIENDQz0iJHtDWFh9IiBcCisgICAgICAgIE9TX1RFU1Q9JHtPU19URVNUfSBcCisgICAgICAgIFNPVVJDRV9MSUJfRElSPSIke1REfS8ke2xpYmRpcn0iIFwKKyAgICAgICAgU09VUkNFX0JJTl9ESVI9IiR7VER9LyR7YmluZGlyfSIgXAorICAgICAgICBpbnN0YWxsCisKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtsaWJkaXJ9LworICAgIGZvciBmaWxlIGluICR7U30vZGlzdC8qLk9CSi9saWIvKi5zbzsgZG8KKyAgICAgICAgZWNobyAiSW5zdGFsbGluZyBgYmFzZW5hbWUgJGZpbGVgLi4uIgorICAgICAgICBjcCAkZmlsZSAgJHtEfS8ke2xpYmRpcn0vCisgICAgZG9uZQorCisgICAgZm9yIHNoYXJlZF9saWIgaW4gJHtURH0vJHtsaWJkaXJ9Lyouc28uKjsgZG8KKyAgICAgICAgaWYgWyAtZiAkc2hhcmVkX2xpYiBdOyB0aGVuCisgICAgICAgICAgICBjcCAkc2hhcmVkX2xpYiAke0R9LyR7bGliZGlyfQorICAgICAgICAgICAgbG4gLXNmICQoYmFzZW5hbWUgJHNoYXJlZF9saWIpICR7RH0vJHtsaWJkaXJ9LyQoYmFzZW5hbWUgJHNoYXJlZF9saWIgLjFvZSkKKyAgICAgICAgZmkKKyAgICBkb25lCisgICAgZm9yIHNoYXJlZF9saWIgaW4gJHtURH0vJHtsaWJkaXJ9Lyouc287IGRvCisgICAgICAgIGlmIFsgLWYgJHNoYXJlZF9saWIgLWEgISAtZSAke0R9LyR7bGliZGlyfS8kc2hhcmVkX2xpYiBdOyB0aGVuCisgICAgICAgICAgICBjcCAkc2hhcmVkX2xpYiAke0R9LyR7bGliZGlyfQorICAgICAgICBmaQorICAgIGRvbmUKKworICAgIGluc3RhbGwgLWQgJHtEfS8ke2luY2x1ZGVkaXJ9L25zczMKKyAgICBpbnN0YWxsIC1tIDY0NCAtdCAke0R9LyR7aW5jbHVkZWRpcn0vbnNzMyBkaXN0L3B1YmxpYy9uc3MvKgorCisgICAgaW5zdGFsbCAtZCAke0R9LyR7YmluZGlyfQorICAgIGZvciBiaW5hcnkgaW4gJHtURH0vJHtiaW5kaXJ9Lyo7IGRvCisgICAgICAgIGluc3RhbGwgLW0gNzU1IC10ICR7RH0vJHtiaW5kaXJ9ICRiaW5hcnkKKyAgICBkb25lCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICMgQ3JlYXRlIGVtcHR5IC5jaGsgZmlsZXMgZm9yIHRoZSBOU1MgbGlicmFyaWVzIGF0IGJ1aWxkIHRpbWUuIFRoZXkgY291bGQKKyAgICAjIGJlIHJlZ2VuZXJhdGVkIGF0IHRhcmdldCdzIGJvb3QgdGltZS4KKyAgICBmb3IgZmlsZSBpbiBsaWJzb2Z0b2tuMy5jaGsgbGliZnJlZWJsMy5jaGsgbGlibnNzZGJtMy5jaGs7IGRvCisgICAgICAgIHRvdWNoICR7RH0vJHtsaWJkaXJ9LyRmaWxlCisgICAgICAgIGNobW9kIDc1NSAke0R9LyR7bGliZGlyfS8kZmlsZQorICAgIGRvbmUKKyAgICBpbnN0YWxsIC1EIC1tIDc1NSAke1dPUktESVJ9L3NpZ25saWJzLnNoICR7RH0vJHtiaW5kaXJ9L3NpZ25saWJzLnNoCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLworICAgIHNlZCAncy8lTlNTX1ZFUlNJT04lLyR7UFZ9LycgJHtXT1JLRElSfS9uc3MucGMuaW4gfCBzZWQgJ3MvJU5TUFJfVkVSU0lPTiUvNC45LjIvJyA+ICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FUFJFRklYOiR7cHJlZml4fTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FRVhFQ1BSRUZJWDoke2V4ZWNfcHJlZml4fTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FTElCRElSOiR7bGliZGlyfTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FSU5DRElSOiR7aW5jbHVkZWRpcn0vbnNzMzpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisgICAgIyBDcmVhdGUgYSBibGFuayBjZXJ0aWZpY2F0ZQorICAgIG1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L3BraS9uc3NkYi8KKyAgICB0b3VjaCAuL2VtcHR5X3Bhc3N3b3JkCisgICAgY2VydHV0aWwgLU4gLWQgJHtEfSR7c3lzY29uZmRpcn0vcGtpL25zc2RiLyAtZiAuL2VtcHR5X3Bhc3N3b3JkCisgICAgY2htb2QgNjQ0ICR7RH0ke3N5c2NvbmZkaXJ9L3BraS9uc3NkYi8qLmRiCisgICAgcm0gLi9lbXB0eV9wYXNzd29yZAorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworICAgIGlmIFsgLW4gIiREIiBdOyB0aGVuCisgICAgICAgIGZvciBJIGluICRELyR7bGliZGlyfS9saWIqLmNoazsgZG8KKyAgICAgICAgICAgIEROPWBkaXJuYW1lICRJYAorICAgICAgICAgICAgQk49YGJhc2VuYW1lICRJIC5jaGtgCisgICAgICAgICAgICBGTj0kRE4vJEJOLnNvCisgICAgICAgICAgICBzaGxpYnNpZ24gLWkgJEZOCisJICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCSAgICAgICBleGl0IDEKKwkgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgICBleGl0IDAKKyAgICBmaQorICAgIHNpZ25saWJzLnNoCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1zbWltZSIKK0ZJTEVTXyR7UE59LXNtaW1lID0gIlwKKyAgICAke2JpbmRpcn0vc21pbWUgXAorIgorRklMRVNfJHtQTn0gPSAiXAorICAgICR7c3lzY29uZmRpcn0gXAorICAgICR7YmluZGlyfSBcCisgICAgJHtsaWJkaXJ9L2xpYiouY2hrIFwKKyAgICAke2xpYmRpcn0vbGliKi5zbyBcCisgICAgIgorRklMRVNfJHtQTn0tZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbnNzIFwKKyAgICAke2xpYmRpcn0vcGtnY29uZmlnLyogXAorICAgICR7aW5jbHVkZWRpcn0vKiBcCisgICAgIgorIyBGSUxFU18ke1BOfS1kYmcgaXMgcG9wdWxhdGVkIGF1dG9tYXRpY2FsbHkKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3AxMS1raXQvcDExLWtpdF8wLjIyLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3AxMS1raXQvcDExLWtpdF8wLjIyLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FkOTYyNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcDExLWtpdC9wMTEta2l0XzAuMjIuMS5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlByb3ZpZGVzIGEgd2F5IHRvIGxvYWQgYW5kIGVudW1lcmF0ZSBQS0NTIzExIG1vZHVsZXMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTAyOTMzODg3ZjYwOTgwN2ZiYjU3YWE0MjM3ZDE0YTUwIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCitERVBFTkRTID0gImxpYnRhc24xIGxpYmZmaSIKKworU1JDX1VSSSA9ICJodHRwOi8vcDExLWdsdWUuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzLyR7QlB9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZTliZWExMTA2NjI4ZmZiODIwYmRhZDI0YTgxOWZhYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlZjNhMzM5ZmNmNmFhMGUzMmM4YzIzZjc5YmE3MTkxZTU3MzEyYmUyYmRhOGIyNGU2ZDEyMWMyNjcwNTM5YTVjIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiBcCisgICAgJHtsaWJkaXJ9L3AxMS1raXQtcHJveHkuc28gXAorICAgICR7bGliZGlyfS9wa2NzMTEvcDExLWtpdC10cnVzdC5zbyBcCisiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9wa2NzMTEvKi5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3BrY3MxMS8uZGVidWciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BpbmVudHJ5L3BpbmVudHJ5XzAuOS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9waW5lbnRyeS9waW5lbnRyeV8wLjkuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODM2Y2E0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9waW5lbnRyeS9waW5lbnRyeV8wLjkuMi5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIkNvbGxlY3Rpb24gb2Ygc2ltcGxlIFBJTiBvciBwYXNzcGhyYXNlIGVudHJ5IGRpYWxvZ3MiCitERVNDUklQVElPTiA9ICJcCisJUGluZW50cnkgaXMgYSBjb2xsZWN0aW9uIG9mIHNpbXBsZSBQSU4gb3IgcGFzc3BocmFzZSBlbnRyeSBkaWFsb2dzIHdoaWNoIFwKKwl1dGlsaXplIHRoZSBBc3N1YW4gcHJvdG9jb2wgYXMgZGVzY3JpYmVkIGJ5IHRoZSBhZWd5cHRlbiBwcm9qZWN0OyBzZWUgXAorCWh0dHA6Ly93d3cuZ251cGcub3JnL2FlZ3lwdGVuLyBmb3IgZGV0YWlscy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL3JlbGF0ZWRfc29mdHdhcmUvcGluZW50cnkvaW5kZXguZW4uaHRtbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jYmJkNzk0ZTJhMGEyODliOWRmY2M5ZjUxM2QxOTk2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNTFkNDU0ZjkyMTExMWI1MTU2YTIyOTFjYmY3MDI3OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZDhiYzE1OTJjZWIyMmJiNDkyYjA3Y2IyOWIxYjE0MGJiODgyYzg1OWU2NTAzYjk3NDI1NGMwYTRiNDEzNGQxIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXJwYXRoIFwKKwkJICAgICAgICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyBcCisgICAgICAgICAgICAgICAiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJuY3Vyc2VzIGxpYmNhcCIKKworUEFDS0FHRUNPTkZJR1tuY3Vyc2VzXSA9ICItLWVuYWJsZS1uY3Vyc2VzICAtLXdpdGgtbmN1cnNlcy1pbmNsdWRlLWRpcj0ke1NUQUdJTkdfSU5DRElSfSwgLS1kaXNhYmxlLW5jdXJzZXMsIG5jdXJzZXMiCitQQUNLQUdFQ09ORklHW2xpYmNhcF0gPSAiLS13aXRoLWxpYmNhcCwgLS13aXRob3V0LWxpYmNhcCwgbGliY2FwIgorUEFDS0FHRUNPTkZJR1txdDRdID0gIi0tZW5hYmxlLXBpbmVudHJ5LXF0NCwgLS1kaXNhYmxlLXBpbmVudHJ5LXF0NCwgcXQ0LXgxMSIKK1BBQ0tBR0VDT05GSUdbcXQ0X2NsaXBib2FyZF0gPSAiLS1lbmFibGUtcGluZW50cnktcXQ0LWNsaXBib2FyZCAtLWVuYWJsZS1waW5lbnRyeS1xdDQsIC0tZGlzYWJsZS1waW5lbnRyeS1xdDQtY2xpcGJvYXJkLCBxdDQteDExIgorUEFDS0FHRUNPTkZJR1tndGsyXSA9ICItLWVuYWJsZS1waW5lbnRyeS1ndGsyLCAtLWRpc2FibGUtcGluZW50cnktZ3RrMiwgZ3RrKyBnbGliLTIuMCIKKworI1RvIHVzZSBsaWJzZWNyZXQsIGFkZCBtZXRhLWdub21lCitQQUNLQUdFQ09ORklHW3NlY3JldF0gPSAiLS1lbmFibGUtbGlic2VjcmV0LCAtLWRpc2FibGUtbGlic2VjcmV0LCBsaWJzZWNyZXQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdC9kaXNhYmxlX3Rlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvZGlzYWJsZV90ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTZjZjY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvZGlzYWJsZV90ZXN0cy5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVc2Ugb2YgJCh0b3Bfc3JjZGlyKSBpbiBURVNUUyBpcyBhbiBlcnJvciB3aGljaCBjYXVzZXMKK2F1dG9tYWtlLTEuMTMgdG8gYWJvcnQuIEp1c3QgcmVtb3ZlIHRlc3RzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgcG9wdC0xLjE2L01ha2VmaWxlLmFtIHBvcHQtMS4xNi9NYWtlZmlsZS5hbQorLS0tIHBvcHQtMS4xNi9NYWtlZmlsZS5hbQkyMDEwLTA1LTA0IDIzOjU1OjU0LjAwMDAwMDAwMCArMDMwMAorKysrIHBvcHQtMS4xNi9NYWtlZmlsZS5hbQkyMDEzLTAxLTAyIDEzOjM0OjI5LjU0MDM2MTM5MSArMDIwMAorQEAgLTM0LDExICszNCw2IEBACisKKyBub2luc3RfU0NSSVBUUyA9IHRlc3RpdC5zaAorCistVEVTVFNfRU5WSVJPTk1FTlQgPSBcCistdGVzdDE9IiQodG9wX2J1aWxkZGlyKS90ZXN0MSIKKy0KKy1URVNUUyA9ICQodG9wX3NyY2RpcikvdGVzdGl0LnNoCistCisgaW5jbHVkZV9IRUFERVJTID0gcG9wdC5oCisKKyB1c3JsaWJkaXIgPSAkKGxpYmRpcikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BrZ2NvbmZpZ19maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdC9wa2djb25maWdfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZGRiZjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdC9wa2djb25maWdfZml4LnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbnN0YWxsIHRoZSBwa2djb25maWcgZmlsZSBpbnRvIGxpYmRpci4KKworLS0tIHBvcHQtMS4xNi5vcmlnL01ha2VmaWxlLmFtCTIwMTItMDQtMjYgMTM6NDI6NTQuMDIxMTM5ODEzICswODAwCisrKysgcG9wdC0xLjE2L01ha2VmaWxlLmFtCTIwMTItMDQtMjYgMTM6MzY6MDMuNTUyMDk2OTEyICswODAwCitAQCAtNDcsNyArNDcsNyBAQAorIGxpYnBvcHRfbGFfU09VUkNFUyA9IHBvcHQuYyBwb3B0cGFyc2UuYyBwb3B0Y29uZmlnLmMgcG9wdGhlbHAuYyBwb3B0aW50LmMKKyBsaWJwb3B0X2xhX0xERkxBR1MgPSAtbm8tdW5kZWZpbmVkIEBMVExJQklOVExAIEBMVExJQklDT05WQAorIAorLXBrZ2NvbmZpZ2RpciA9ICQocHJlZml4KS9saWIvcGtnY29uZmlnCisrcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworIHBrZ2NvbmZpZ19EQVRBID0gcG9wdC5wYworIAorIGlmIEhBVkVfTERfVkVSU0lPTl9TQ1JJUFQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BvcHRfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvcG9wdF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiY2E5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BvcHRfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworCitUaGlzIHBhdGNoIGF2b2lkcyB0aGlzIGVycm9yIHdpdGggYXV0b21ha2UgMS4xMjoKKworfCBjb25maWd1cmUuYWM6NDk6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDIKKworSW5kZXg6IHBvcHQtMS4xNi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwb3B0LTEuMTYub3JpZy9jb25maWd1cmUuYWMKKysrKyBwb3B0LTEuMTYvY29uZmlndXJlLmFjCitAQCAtNDYsNyArNDYsNiBAQCBBQ19HQ0NfVFJBRElUSU9OQUwKKyBBQ19TWVNfTEFSR0VGSUxFCisgCisgQUNfSVNDX1BPU0lYCistQU1fQ19QUk9UT1RZUEVTCisgCisgQUNfQ0hFQ0tfSEVBREVSUyhmbG9hdC5oIGZubWF0Y2guaCBnbG9iLmggbGFuZ2luZm8uaCBsaWJpbnRsLmggbWNoZWNrLmggdW5pc3RkLmgpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdF8xLjE2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHRfMS4xNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjEzYTgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHRfMS4xNi5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIHBhcnNpbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMiCitIT01FUEFHRSA9ICJodHRwOi8vcnBtNS5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWNiMDYxM2MzMGFmMmE4MjQ5YjhkY2M2N2QzZWRiMDZkIgorUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3JwbTUub3JnL2ZpbGVzL3BvcHQvcG9wdC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wb3B0X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX3Rlc3RzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNzQzYmVlZmEzZGQ2MjQ3YTczZjhmN2EzMmMxNGMzMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlNzI4ZWQyOTZmZTlmMDY5YTBlMDA1MDAzYzNkNmIyZGRlM2Q5Y2FkNDUzNDIyYTEwZDY1NTg2MTZkMzA0Y2M4IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL2ZpbGVzL3B0ZXN0LXJ1bm5lciBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL2ZpbGVzL3B0ZXN0LXJ1bm5lcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjE4ZjExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGVzdC1ydW5uZXIvZmlsZXMvcHRlc3QtcnVubmVyCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorQU5ZRkFJTEVEPW5vCitlY2hvICJTVEFSVDogJDAiCisKK2ZvciBsaWJkaXIgaW4gL3Vzci9saWIqCitkbworCisgICAgWyAhIC1kICIkbGliZGlyIiBdICYmIGNvbnRpbnVlCisKKyAgICBmb3IgeCBpbiBgbHMgLWQgJGxpYmRpci8qL3B0ZXN0IDI+L2Rldi9udWxsYAorICAgIGRvCisgICAgICAgIFsgISAtZiAkeC9ydW4tcHRlc3QgXSAmJiBjb250aW51ZQorICAgICAgICBbIC1oIGBkaXJuYW1lICR4YCBdICYmIGNvbnRpbnVlCisKKyAgICAgICAgZGF0ZSAiKyVZLSVtLSVkVCVIOiVNIgorICAgICAgICBlY2hvICJCRUdJTjogJHgiCisgICAgICAgIGNkICIkeCIKKyAgICAgICAgLi9ydW4tcHRlc3QgfHwgQU5ZRkFJTEVEPXllcworICAgICAgICBlY2hvICJFTkQ6ICR4IgorICAgICAgICBkYXRlICIrJVktJW0tJWRUJUg6JU0iCisgICAgZG9uZQorZG9uZQorZWNobyAiU1RPUDogJDAiCitpZiBbICIkQU5ZRkFJTEVEIiA9ICJ5ZXMiICBdOyB0aGVuCisgICAgZXhpdCAxCitmaQorZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0ZXN0LXJ1bm5lci9wdGVzdC1ydW5uZXJfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGVzdC1ydW5uZXIvcHRlc3QtcnVubmVyXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzFiMGE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGVzdC1ydW5uZXIvcHRlc3QtcnVubmVyXzEuMC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkEgc2ltcGxlIHNoZWxsIHNjcmlwdCB0byBydW4gYWxsIGluc3RhbGxlZCBwdGVzdHMiCitERVNDUklQVElPTiA9ICJUaGUgcHRlc3QtcnVubmVyIHBhY2thZ2UgaW5zdGFsbHMgYSBwdGVzdC1ydW5uZXIgXAorc2hlbGwgc2NyaXB0IHdoaWNoIGxvb3BzIHRocm91Z2ggYWxsIGluc3RhbGxlZCBwdGVzdCB0ZXN0IHN1aXRlcyBhbmQgXAorcnVucyB0aGVtIGluIHNlcXVlbmNlLiIKK0hPTUVQQUdFID0gImh0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvUHRlc3QiCitTUkNfVVJJICs9ICJmaWxlOi8vcHRlc3QtcnVubmVyIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwgKCkgeworICAgIG1rZGlyIC1wICR7RH0ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wdGVzdC1ydW5uZXIgJHtEfSR7YmluZGlyfQorfQorCitkb19wYXRjaFtub2V4ZWNdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCitkb19idWlsZFtub2V4ZWNdID0gIjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9maWxlcy9wdGgtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGgvZmlsZXMvcHRoLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2EyOGFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGgvZmlsZXMvcHRoLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDEwNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FkZCBwa2djb25maWcgc3VwcG9ydCB0byBwdGguCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKworSW5kZXg6IE1ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNDcsNiArNDcsOSBAQCBkYXRhZGlyICAgICA9IEBkYXRhZGlyQAorIAorIERFU1RESVIgICAgID0KKyAKKytwa2djb25maWdkaXIgPSAke2xpYmRpcn0vcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBwdGgucGMKKysKKyAjIworICMjICBfX19fIFRPT0wgREVGSU5JVElPTlMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICMjCitAQCAtMjE2LDcgKzIxOSw3IEBAIHRlc3RfcHRocmVhZDogdGVzdF9wdGhyZWFkLm8gdGVzdF9jb21tb24ubyBsaWJwdGhyZWFkLmxhCisgCisgIyAgIGluc3RhbGwgdGhlIHBhY2thZ2UKKyBpbnN0YWxsOiBhbGwtZm9yLWluc3RhbGwKKy0JQCQoTUFLRSkgJChNS0ZMQUdTKSBpbnN0YWxsLWRpcnMgaW5zdGFsbC1wdGggQElOU1RBTExfUFRIUkVBREAKKysJQCQoTUFLRSkgJChNS0ZMQUdTKSBpbnN0YWxsLWRpcnMgaW5zdGFsbC1wdGggQElOU1RBTExfUFRIUkVBREAgaW5zdGFsbC1wa2djb25maWdEQVRBCisgCUB0b3VjaCAuZG9uZS1pbnN0YWxsID4vZGV2L251bGwgMj4mMSB8fCAkKFRSVUUpCisgCUAkKE1BS0UpICQoTUtGTEFHUykgd2hhdC1uZXh0CisgaW5zdGFsbC1kaXJzOgorQEAgLTIyNyw2ICsyMzAsNyBAQCBpbnN0YWxsLWRpcnM6CisgCSQoU0hUT09MKSBta2RpciAtZiAtcCAtbSA3NTUgJChERVNURElSKSQobWFuZGlyKS9tYW4xCisgCSQoU0hUT09MKSBta2RpciAtZiAtcCAtbSA3NTUgJChERVNURElSKSQobWFuZGlyKS9tYW4zCisgCSQoU0hUT09MKSBta2RpciAtZiAtcCAtbSA3NTUgJChERVNURElSKSQoZGF0YWRpcikvYWNsb2NhbAorKwkkKFNIVE9PTCkgbWtkaXIgLWYgLXAgLW0gNzU1ICQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikKKyBpbnN0YWxsLXB0aDoKKyAJJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNzU1IHB0aC1jb25maWcgJChERVNURElSKSQoYmluZGlyKS9wdGgtY29uZmlnCisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKFMpcHRoLWNvbmZpZy4xICQoREVTVERJUikkKG1hbmRpcikvbWFuMS9wdGgtY29uZmlnLjEKK0BAIC0yNDIsMTIgKzI0NiwxNiBAQCBpbnN0YWxsLXB0aHJlYWQ6CisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKFMpcHRocmVhZC4zICQoREVTVERJUikkKG1hbmRpcikvbWFuMy9wdGhyZWFkLjMKKyAJQHVtYXNrIDAyMjsgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCBcCisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIGxpYnB0aHJlYWQubGEgJChERVNURElSKSQobGliZGlyKS9saWJwdGhyZWFkLmxhCisraW5zdGFsbC1wa2djb25maWdEQVRBOiAkKHBrZ2NvbmZpZ19EQVRBKQorKwkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgJChwa2djb25maWdfREFUQSkgJChERVNURElSKSQocGtnY29uZmlnZGlyKS8kKHBrZ2NvbmZpZ19EQVRBKQorIAorICMgICB1bmluc3RhbGwgdGhlIHBhY2thZ2UKKyB1bmluc3RhbGw6CistCUAkKE1BS0UpICQoTUtGTEFHUykgQFVOSU5TVEFMTF9QVEhSRUFEQCB1bmluc3RhbGwtcHRoIHVuaW5zdGFsbC1kaXJzCisrCUAkKE1BS0UpICQoTUtGTEFHUykgdW5pbnN0YWxsLXBrZ2NvbmZpZ0RBVEEgQFVOSU5TVEFMTF9QVEhSRUFEQCB1bmluc3RhbGwtcHRoIHVuaW5zdGFsbC1kaXJzCisgCUB0b3VjaCAuZG9uZS11bmluc3RhbGwgPi9kZXYvbnVsbCAyPiYxIHx8ICQoVFJVRSkKKyAJQCQoTUFLRSkgJChNS0ZMQUdTKSB3aGF0LW5leHQKKyt1bmluc3RhbGwtcGtnY29uZmlnREFUQToKKysJJChSTSkgJChERVNURElSKSQocGtnY29uZmlnZGlyKS8kKHBrZ2NvbmZpZ19EQVRBKQorIHVuaW5zdGFsbC1wdGhyZWFkOgorIAkkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL3B0aHJlYWQtY29uZmlnCisgCSQoUk0pICQoREVTVERJUikkKG1hbmRpcikvbWFuMS9wdGhyZWFkLWNvbmZpZy4xCitAQCAtMjcxLDYgKzI3OSw3IEBAIHVuaW5zdGFsbC1kaXJzOgorIAktJChSTURJUikgJChERVNURElSKSQoaW5jbHVkZWRpcikgPi9kZXYvbnVsbCAyPiYxIHx8ICQoVFJVRSkKKyAJLSQoUk1ESVIpICQoREVTVERJUikkKGJpbmRpcikgPi9kZXYvbnVsbCAyPiYxIHx8ICQoVFJVRSkKKyAJLSQoUk1ESVIpICQoREVTVERJUikkKHByZWZpeCkgPi9kZXYvbnVsbCAyPiYxIHx8ICQoVFJVRSkKKysJLSQoUk1ESVIpICQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikgPiAvZGV2L251bGwgMj4mMSB8fCQoVFJVRSkKKyAKKyAjICAgc3RyaXAgZG93biB0aGUgc291cmNlIHRyZWUgdG8gaXRzIG1pbmltdW0KKyBzdHJpcHRlYXNlOgorSW5kZXg6IGNvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjU2LDYgKzY1NiwxMyBAQCBwdGhfYWNtYWMuaCBkbmwKKyBjaG1vZCArcnggcHRocmVhZC1jb25maWcKKyBjaG1vZCArcnggcHRoLWNvbmZpZworIClkbmwKKysKKytQVEhfVkVSU0lPTj1gZWNobyAkUFRIX1ZFUlNJT05fU1RSIHwgY3V0IC1kJyAnIC1mMWAKKytBQ19TVUJTVChQVEhfVkVSU0lPTikKKysKKytBQ19DT05GSUdfRklMRVMoW3B0aC5wY10pCisrQUNfT1VUUFVUCisrCisgaWYgdGVzdCAiLiRlbmFibGVfcHRocmVhZCIgPSAubm87IHRoZW4KKyAgICAgcm0gLWYgcHRocmVhZC1jb25maWcKKyAgICAgcm0gLWYgcHRocmVhZC5oCitJbmRleDogcHRoLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGIvcHRoLnBjLmluCitAQCAtMCwwICsxLDE2IEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrYmluZGlyPUBiaW5kaXJACisrbWFuZGlyPUBtYW5kaXJACisrZGF0YWRpcj1AZGF0YWRpckAKKythY2Rpcj1AZGF0YWRpckAvYWNsb2NhbAorKworK05hbWU6IHB0aAorK0Rlc2NyaXB0aW9uOiBHTlUgUG9ydGFibGUgVGhyZWFkcworK1JlcXVpcmVzOgorK1ZlcnNpb246IEBQVEhfVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbHB0aAorK0xpYnMucHJpdmF0ZTogCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KKy0tIAorMS43LjUuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9maWxlcy9wdGgtZml4LXBhcmFsbGVsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGgvZmlsZXMvcHRoLWZpeC1wYXJhbGxlbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGVkYWZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGgvZmlsZXMvcHRoLWZpeC1wYXJhbGxlbC5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitGcm9tIGRmMDZiODE3MDc0NWVhYzM0N2FjYjk1ZjlmMzc0ZjI1NzYyMTI1NGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMjkgSmFuIDIwMTUgMTg6MTE6MDAgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGUuaW46IGZpeCBmb3IgcGFyYWxsZWwgYnVpbGQKKworRml4ZWQ6CisqIGRvX2NvbXBpbGUKKyBwdGhfdWN0eC5jOjMxOjE5OiBmYXRhbCBlcnJvcjogcHRoX3AuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICNpbmNsdWRlICJwdGhfcC5oIgorICAgICAgICAgICAgICAgICAgIF4KK2NvbXBpbGF0aW9uIHRlcm1pbmF0ZWQuCittYWtlOiAqKiogW3B0aF91Y3R4LmxvXSBFcnJvciAxCisKKyogZG9faW5zdGFsbDoKKyAgY3A6IGNhbm5vdCBjcmVhdGUgcmVndWxhciBmaWxlIGBpbWFnZS91c3IvbGliL3BrZ2NvbmZpZy8jSU5TVEAxNTUwNyMnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8ICAgIDUgKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggZGUwMzkwZC4uMzgxYTBlZSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTIxOSw3ICsyMTksOCBAQCB0ZXN0X3B0aHJlYWQ6IHRlc3RfcHRocmVhZC5vIHRlc3RfY29tbW9uLm8gbGlicHRocmVhZC5sYQorIAorICMgICBpbnN0YWxsIHRoZSBwYWNrYWdlCisgaW5zdGFsbDogYWxsLWZvci1pbnN0YWxsCistCUAkKE1BS0UpICQoTUtGTEFHUykgaW5zdGFsbC1kaXJzIGluc3RhbGwtcHRoIEBJTlNUQUxMX1BUSFJFQURAIGluc3RhbGwtcGtnY29uZmlnREFUQQorKwlAJChNQUtFKSAkKE1LRkxBR1MpIGluc3RhbGwtZGlycworKwlAJChNQUtFKSAkKE1LRkxBR1MpIGluc3RhbGwtcHRoIEBJTlNUQUxMX1BUSFJFQURAIGluc3RhbGwtcGtnY29uZmlnREFUQQorIAlAdG91Y2ggLmRvbmUtaW5zdGFsbCA+L2Rldi9udWxsIDI+JjEgfHwgJChUUlVFKQorIAlAJChNQUtFKSAkKE1LRkxBR1MpIHdoYXQtbmV4dAorIGluc3RhbGwtZGlyczoKK0BAIC00MzIsNyArNDMzLDcgQEAgVEFHUzoKKyAjIyAgKEFVVE9NQVRJQ0FMTFkgVVBEQVRFRCAtIERPIE5PVCBFRElUKQorICMjCisgCistJChMT0JKUyk6IE1ha2VmaWxlCisrJChMT0JKUyk6IE1ha2VmaWxlIHB0aF9wLmgKKyAKKyAjIERPIE5PVCBSRU1PVkUKKyBwdGhfYXR0ci5sbzogcHRoX2F0dHIuYyBwdGhfcC5oIHB0aF92ZXJzLmMgcHRoLmggcHRoX2FjZGVmLmggcHRoX2FjbWFjLmgKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9wdGhfMi4wLjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9wdGhfMi4wLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAzNzc2OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRoL3B0aF8yLjAuNy5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIkdOVSBQb3J0YWJsZSBUaHJlYWRzIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcHRoLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORztiZWdpbmxpbmU9MTI7ZW5kbGluZT0xNTttZDU9YTQ4YWYxMTRhODBjMjIyY2FmZDM3ZjI0MzcwYTc3YjEiCitQUiA9ICJyMyIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICB1Y19vcyA9IChyZS5tYXRjaCgnLip1Y2xpYmMqJywgZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpKSAhPSBOb25lKQorICAgIGlmIHVjX29zOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiaW5jb21wYXRpYmxlIHdpdGggdUNsaWJjIikKK30KKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3B0aC9wdGgtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICBmaWxlOi8vcHRoLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3B0aC1maXgtcGFyYWxsZWwucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjljYjRhMjUzMzFhNGM0ZGI4NjZhMzFjYmU1MDdjNzkzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcyMzUzNjYwYzVhMmNhYWZkNjAxYjIwZTEyZTc1ZDg2NWZkODhmNmNmMWEwODhiMzA2YTM5NjNmMGJjNzcyMzIiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vcHRoLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZworCitkb19jb25maWd1cmUoKSB7CisJKCBjZCAke1N9OyBnbnUtY29uZmlnaXplICkKKwkoIGNkICR7U307IGF1dG9jb25mICkKKwlvZV9ydW5jb25mCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZi9lbnYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZi9lbnYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQwNzNlOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmL2Vudi5wYXRjaApAQCAtMCwwICsxLDI4IEBACisnc2NvbnMnIGNsZWFucyB0aGUgZW52aXJvbm1lbnQgd2hpY2ggYnJlYWtzIGNjYWNoZSBidWlsZHMgYmVjYXVzZQorQ0NBQ0hFRElSIGNhbiBwb2ludCB0byBhbiB1bmV4cGVjdGVkIGxvY2F0aW9uOgorCit8IGNjYWNoZSBhcm0tbGludXgtZ251ZWFiaS1nY2MgLi4uIGNvbnRleHQuYworfCBjY2FjaGU6IGZhaWxlZCB0byBjcmVhdGUgLi4uL3NlcmYvMS4zLjYtcjAvLmhvbWUvLmNjYWNoZSAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkKKworSXNzdWUgaXMgZGVzY3JpYmVkIGluCisKKyAgaHR0cDovL3d3dy5zY29ucy5vcmcvd2lraS9JbXBvcnRpbmdFbnZpcm9ubWVudFNldHRpbmdzCisKK2FuZCBiZWNhdXNlICdiaXRiYWtlJyBjbGVhbnMgZW52aXJvbm1lbnQgd2UgY2FuIHBhc3MgaXQgY29tcGxldGVseQoraW5zdGVhZCBvZiB0cnlpbmcgdG8gZW51bWVyYXRlIG5lZWRlZCBlbnYuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCisKK0luZGV4OiBzZXJmLTEuMy42L1NDb25zdHJ1Y3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzZXJmLTEuMy42Lm9yaWcvU0NvbnN0cnVjdAorKysrIHNlcmYtMS4zLjYvU0NvbnN0cnVjdAorQEAgLTE0OSw2ICsxNDksNyBAQCBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyBlbnYgPSBFbnZpcm9ubWVudCh2YXJpYWJsZXM9b3B0cywKKyAgICAgICAgICAgICAgICAgICB0b29scz0oJ2RlZmF1bHQnLCAndGV4dGZpbGUnLCksCisgICAgICAgICAgICAgICAgICAgQ1BQUEFUSD1bJy4nLCBdLAorKyAgICAgICAgICAgICAgICAgIEVOViA9IG9zLmVudmlyb24sCisgICAgICAgICAgICAgICAgICAgKQorCisgZW52LkFwcGVuZChCVUlMREVSUyA9IHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmL25vcnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZi9ub3JwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MGY1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZi9ub3JwYXRoLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1RoZSBSUEFUSCBoYW5kbGluZyBpbiBzZXJmIGlzIGFsbCB3cm9uZyBmb3IgdXMgYW5kIHdlIGRvbid0IG5lZWQgaXQgCithbnl3YXkgc28gaGFjayBhcm91bmQgaXQgYnkgcmVtb3ZpbmcgdGhpcyBmb3Igbm93LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworUlAgMjAxNC83LzE3CisKK0luZGV4OiBzZXJmLTEuMy42L1NDb25zdHJ1Y3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzZXJmLTEuMy42Lm9yaWcvU0NvbnN0cnVjdAkyMDE0LTA3LTE3IDE5OjU3OjU3LjcyNDM4OTE1MCArMDAwMAorKysrIHNlcmYtMS4zLjYvU0NvbnN0cnVjdAkyMDE0LTA3LTE3IDIwOjA0OjIxLjc4NDM5OTYxNiArMDAwMAorQEAgLTIxOCw4ICsyMTgsNyBAQAorIGVsc2U6CisgICBMSUJOQU1FU1RBVElDID0gJ3NlcmYtJHtNQUpPUn0nCisgCistZW52LkFwcGVuZChSUEFUSD1saWJkaXIsCistICAgICAgICAgICBQREI9JyR7VEFSR0VULmZpbGViYXNlfS5wZGInKQorK2Vudi5BcHBlbmQoUERCPScke1RBUkdFVC5maWxlYmFzZX0ucGRiJykKKyAKKyAjZm9yIGkgaW4gZW52OgorICMgICAgcHJpbnQoc3RyKGVudltpXSkpCitAQCAtMzcxLDEyICszNzAsNiBAQAorIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgZW52LkFwcGVuZChDUFBERUZJTkVTPVsnU0VSRl9IQVZFX1NTUEknXSkKKyAKKy0jIE9uIHNvbWUgc3lzdGVtcywgdGhlIC1SIHZhbHVlcyB0aGF0IEFQUiBkZXNjcmliZXMgbmV2ZXIgbWFrZSBpdCBpbnRvIGFjdHVhbAorLSMgUlBBVEggZmxhZ3MuIFdlJ2xsIG1hbnVhbGx5IG1hcCBhbGwgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpbnRvIG5ldworLSMgZmxhZ3MgdG8gc2V0IFJQQVRIIHZhbHVlcy4KKy1mb3IgZCBpbiBlbnZbJ0xJQlBBVEgnXToKKy0gIGVudi5BcHBlbmQoUlBBVEg9JzonK2QpCistCisgIyBTZXQgdXAgdGhlIGNvbnN0cnVjdGlvbiBvZiBzZXJmLSoucGMKKyBwa2djb25maWcgPSBlbnYuVGV4dGZpbGUoJ3NlcmYtJWQucGMnICUgKE1BSk9SLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVudi5GaWxlKCdidWlsZC9zZXJmLnBjLmluJyksCitAQCAtNDQ2LDcgKzQzOSw2IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlY9eydQQVRIJyA6IG9zLmVudmlyb25bJ1BBVEgnXX0pKQorIAorICMgRmluZCB0aGUgKGR5bmFtaWMpIGxpYnJhcnkgaW4gdGhpcyBkaXJlY3RvcnkKKy10ZW52LlJlcGxhY2UoUlBBVEg9dGhpc2RpcikKKyB0ZW52LlByZXBlbmQoTElCUz1bTElCTkFNRVNUQVRJQywgXSwKKyAgICAgICAgICAgICAgTElCUEFUSD1bdGhpc2RpciwgXSkKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmXzEuMy44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zZXJmL3NlcmZfMS4zLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwNTlkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmXzEuMy44LmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiSGlnaC1QZXJmb3JtYW5jZSBBc3luY2hyb25vdXMgSFRUUCBDbGllbnQgTGlicmFyeSIKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL3MvJHtCUE59LyR7QlBOfV8ke1BWfS5vcmlnLnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ub3JwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Vudi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjcxM2JlYWYwNWQ3ZjMzMjlkZTEyMWUyMThlMmZjYjkzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc3MTM0Y2Q1MDEwNjY0Y2EwMjM1ODViY2U1MDk3OGJkNDAwNTkwNmVkMjgwZmY4ODlmNTkxZjg2ZGY3YzU5ZTQiCisKK0xJQ0VOU0UgPSAiQXBhY2hlLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTg2ZDNmM2E5NWMzMjRjOTQ3OWJkODk4Njk2OGY0MzI3IgorCitERVBFTkRTID0gInB5dGhvbi1zY29ucy1uYXRpdmUgb3BlbnNzbCBhcHIgYXByLXV0aWwgdXRpbC1saW51eCBleHBhdCIKKworZG9fY29tcGlsZSgpIHsKKwkke1NUQUdJTkdfQklORElSX05BVElWRX0vc2NvbnMgJHtQQVJBTExFTF9NQUtFfSBQUkVGSVg9JHtwcmVmaXh9IFwKKwkJQ0M9IiR7Q0N9IiBcCisJCUFQUj1gd2hpY2ggYXByLTEtY29uZmlnYCBBUFU9YHdoaWNoIGFwdS0xLWNvbmZpZ2AgXAorCQlDRkxBR1M9IiR7Q0ZMQUdTfSIgTElOS0ZMQUdTPSIke0xERkxBR1N9IiBcCisJCU9QRU5TU0w9IiR7U1RBR0lOR19FWEVDUFJFRklYRElSfSIKK30KKworZG9faW5zdGFsbCgpIHsKKwkke1NUQUdJTkdfQklORElSX05BVElWRX0vc2NvbnMgUFJFRklYPSR7RH0ke3ByZWZpeH0gTElCRElSPSR7RH0ke2xpYmRpcn0gaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWVkYjZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm8uaW5jCkBAIC0wLDAgKzEsMzYgQEAKK1NVTU1BUlkgPSAiU2hhcmVkIE1JTUUgdHlwZSBkYXRhYmFzZSBhbmQgc3BlY2lmaWNhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9zaGFyZWQtbWltZS1pbmZvIgorU0VDVElPTiA9ICJiYXNlIgorCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworREVQRU5EUyA9ICJsaWJ4bWwyIGludGx0b29sLW5hdGl2ZSBnbGliLTIuMCBzaGFyZWQtbWltZS1pbmZvLW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImxpYnhtbDItbmF0aXZlIGludGx0b29sLW5hdGl2ZSBnbGliLTIuMC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy9+aGFkZXNzL3NoYXJlZC1taW1lLWluZm8tJHtQVn0udGFyLnh6IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXVwZGF0ZS1taW1lZGIiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L21pbWUiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vcGtnY29uZmlnL3NoYXJlZC1taW1lLWluZm8ucGMiCisKKyMgZnJlZWRlc2t0b3Aub3JnLnhtbCBpcyBvbmx5IHJlcXVpcmVkIHdoZW4gdXBkYXRpbmcgdGhlIG1pbWUgZGF0YWJhc2UsCisjIHBhY2thZ2UgaXQgc2VwYXJhdGVseQorUEFDS0FHRVMgPSsgInNoYXJlZC1taW1lLWluZm8tZGF0YSIKK0ZJTEVTX3NoYXJlZC1taW1lLWluZm8tZGF0YSA9ICIke2RhdGFkaXJ9L21pbWUvcGFja2FnZXMvZnJlZWRlc2t0b3Aub3JnLnhtbCIKK1JERVBFTkRTX3NoYXJlZC1taW1lLWluZm8tZGF0YSA9ICJzaGFyZWQtbWltZS1pbmZvIgorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJdXBkYXRlLW1pbWUtZGF0YWJhc2UgJHtEfSR7ZGF0YWRpcn0vbWltZQorfQorCitkb19pbnN0YWxsX2NsYXNzLW5hdGl2ZSAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby9pbnN0YWxsLWRhdGEtaG9vay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvL2luc3RhbGwtZGF0YS1ob29rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOWYxZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby9pbnN0YWxsLWRhdGEtaG9vay5wYXRjaApAQCAtMCwwICsxLDIzIEBACitmaXggc2hhcmVkLW1pbWUtaW5mbyBidWlsZCByYWNlIGNvbmRpdGlvbgorCitUaGUgZGVmaW5pdGlvbiBvZiBpbnN0YWxsLWRhdGEtaG9vayBpbiBNYWtlZmlsZS5hbSBsZWFkcwordG8gbXVsdGlwbGUsIG92ZXJsYXBwaW5nLCBleGVjdXRpb25zIG9mIGluc3RhbGwtYmluUFJPR1JBTVMKK3RhcmdldC4gIFdlIG1vZGlmeSB0aGUgZGVmaW5pdGlvbiB0byBhdm9pZCB0aGF0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSm9lIFNsYXRlciA8anNsYXRlckB3aW5kcml2ZXIuY29tPgorCistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC00NCw3ICs0NCw5IEBAICQocGtnY29uZmlnX0RBVEEpOiBjb25maWcuc3RhdHVzCisgQElOVExUT09MX1hNTF9SVUxFQAorIEBJTlRMVE9PTF9ERVNLVE9QX1JVTEVACisgCistaW5zdGFsbC1kYXRhLWhvb2s6IGluc3RhbGwtYmluUFJPR1JBTVMKKysjIGRvIE5PVCBtYWtlIHRoaXMgZGVwZW5kZW50IG9uIGFueXRoaW5nIQorKyMKKytpbnN0YWxsLWRhdGEtaG9vazoKKyBpZiBFTkFCTEVfVVBEQVRFX01JTUVEQgorIAkkKERFU1RESVIpIiQoYmluZGlyKS91cGRhdGUtbWltZS1kYXRhYmFzZSIgLVYgIiQoREVTVERJUikkKGRhdGFkaXIpL21pbWUiCisgZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvL3BhcmFsbGVsbWFrZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvL3BhcmFsbGVsbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGM0ZDAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm8vcGFyYWxsZWxtYWtlLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1RoZSBNYWtlZmlsZSB1c2VkIGJ5IHNoYXJlZC1taW1lLWluZm8gaXMgb25lIGJpZyByYWNlIHdpdGggdGhlIFNVQkRJUlMgCitvcHRpb24gYW5kIHRoZSBkZXBlbmRlbmN5IHNwZWNpZmljYWxseSBjYWxsaW5nIG1ha2UgYWxsIGNvbWJpbmluZyB0bworY3JlYXRlIG11bHRpcGxlIG1ha2UgaW5zdGFuY2VzIGFsbCBvZiB3aGljaCBtYXkgdHJ5IGFuZCBidWlsZCB0YXJnZXRzCitsaWtlIHVwZGF0ZS1taW1lLWRhdGFiYXNlLgorCitUaGlzIHBhdGNoIHJlbW92ZXMgdGhvc2Ugb3B0aW9ucyBtZWFuaW5nIG1ha2UgY2FuIGNvcnJlY3RseSBpZGVudGlmeQorZGVwZW5kZW5jaWVzIGFuZCBzdG9wIGl0c2VsZiByYWNpbmcgaXRzZWxmLgorCitSUCAxMC8xMC8yMDExCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogc2hhcmVkLW1pbWUtaW5mby0xLjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzaGFyZWQtbWltZS1pbmZvLTEuMC5vcmlnL01ha2VmaWxlLmFtCisrKysgc2hhcmVkLW1pbWUtaW5mby0xLjAvTWFrZWZpbGUuYW0KK0BAIC0xLDUgKzEsMyBAQAorLVNVQkRJUlM9LiBwbworLQorIEFNX0NQUEZMQUdTID0gJChBTExfQ0ZMQUdTKQorIAorIHBhY2thZ2VzZGlyID0gJChkYXRhZGlyKS9taW1lL3BhY2thZ2VzCitAQCAtNzIsOCArNzAsNyBAQCB1bmluc3RhbGwtaG9vazoKKyAKKyBhbGw6ICQoZGVmYXVsdG1ha2VkZXBzKQorIAorLWNyZWF0ZS1wb3Q6CistCSQoQU1fVl9HRU4pICQoTUFLRSkgLUMgcG8gc2hhcmVkLW1pbWUtaW5mby5wb3QKKytjcmVhdGUtcG90OiBwbworIAorIGNoZWNrOiBjcmVhdGUtcG90IGZyZWVkZXNrdG9wLm9yZy54bWwgdXBkYXRlLW1pbWUtZGF0YWJhc2UgY2hlY2stdHJhbnNsYXRpb25zCisgCWlmIHRlc3QgLWUgJCh0b3BfYnVpbGRkaXIpL2ZyZWVkZXNrdG9wLm9yZy54bWw7IHRoZW4gXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm9fMS40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm9fMS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNGZkZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mb18xLjQuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIHNoYXJlZC1taW1lLWluZm8uaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9wYXJhbGxlbG1ha2UucGF0Y2ggXAorCSAgICBmaWxlOi8vaW5zdGFsbC1kYXRhLWhvb2sucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNmMwMmY3YjY1OGZmZjJhOWMyMDc0MDZkMzg4ZWEzMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYmMwYmQwMjNmNDk3ZGZkNzVlMWNhNzM0NDFjYmJiNWE2MzYxN2Q5ZTE0ZjI3OTBiODY4MzYxY2MwNTViNWIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvZmlsZXMvMDAwMS11c2luZy10aGUtZHluYW1pYy1saWJyYXJ5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvZmlsZXMvMDAwMS11c2luZy10aGUtZHluYW1pYy1saWJyYXJ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYmZkNWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9maWxlcy8wMDAxLXVzaW5nLXRoZS1keW5hbWljLWxpYnJhcnkucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorW1BBVENIXSB1c2luZyB0aGUgZHluYW1pYyBsaWJyYXJ5CisKK1Vwc3RyZWFtLVN0YXR1czogIEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2J1aWxkaW5nIHN0YXRpY2FsbHktbGlua2VkIHNxbGl0ZTMgZmFpbGVkIHNpbmNlIHNxbGl0ZTMubyBpcyBnZW5lcmF0ZWQgaW4gCitkaWZmZXJlbnQgZGlyLCBldmVuIGlmIGxpbmsgc3VjY2Vzc2VzLCB0aGUgc2l6ZSBvZiBzcWxpdGUzIGlzIGJlY29tZSBsYXJnZXIsCitzbyB1c2UgdGhlIGR5bmFtaWMgbGluaywgcmVmOiBodHRwOi8vcGF0Y2h3b3JrLm9wZW5lbWJlZGRlZC5vcmcvcGF0Y2gvOTMyOTMvCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCA4OGJjMjNkLi5mZTUwZjIwIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtNyw3ICs3LDggQEAgbGlic3FsaXRlM19sYV9MREZMQUdTID0gLW5vLXVuZGVmaW5lZCAtdmVyc2lvbi1pbmZvIDg6Njo4CisgCisgYmluX1BST0dSQU1TID0gc3FsaXRlMworIHNxbGl0ZTNfU09VUkNFUyA9IHNoZWxsLmMgc3FsaXRlMy5oCistc3FsaXRlM19MREFERCA9IHNxbGl0ZTMuJChPQkpFWFQpIEBSRUFETElORV9MSUJTQAorK3NxbGl0ZTNfTERBREQgPSBAUkVBRExJTkVfTElCU0AgbGlic3FsaXRlMy5sYQorKworIAorIGluY2x1ZGVfSEVBREVSUyA9IHNxbGl0ZTMuaCBzcWxpdGUzZXh0LmgKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlMy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTM3OTFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlMy5pbmMKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJFbWJlZGRhYmxlIFNRTCBkYXRhYmFzZSBlbmdpbmUiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnNxbGl0ZS5vcmciCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gInJlYWRsaW5lIG5jdXJzZXMiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitMSUNFTlNFID0gIlBEIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS10aHJlYWRzYWZlIgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLWVuYWJsZS1zaGFyZWQgLS1lbmFibGUtdGhyZWFkc2FmZSAtLWRpc2FibGUtcmVhZGxpbmUiCitleHBvcnQgY29uZmlnX0JVSUxEX0NDID0gIiR7QlVJTERfQ0N9IgorZXhwb3J0IGNvbmZpZ19CVUlMRF9DRkxBR1MgPSAiJHtCVUlMRF9DRkxBR1N9IgorZXhwb3J0IGNvbmZpZ19CVUlMRF9MSUJTID0gIiR7QlVJTERfTERGTEFHU30iCitleHBvcnQgY29uZmlnX1RBUkdFVF9DQyA9ICIke0NDfSIKK2V4cG9ydCBjb25maWdfVEFSR0VUX0xJTksgPSAiJHtDQ0xEfSIKK2V4cG9ydCBjb25maWdfVEFSR0VUX0NGTEFHUyA9ICIke0NGTEFHU30iCitleHBvcnQgY29uZmlnX1RBUkdFVF9MRkxBR1MgPSAiJHtMREZMQUdTfSIKKworIyBwcmVhZCgpIGlzIGluIFBPU0lYLjEtMjAwMSBzbyBhbnkgcmVhc29uYWJsZSBzeXN0ZW0gbXVzdCBzdXJlbHkgc3VwcG9ydCBpdAorQlVJTERfQ0ZMQUdTICs9ICItRFVTRV9QUkVBRCIKK1RBUkdFVF9DRkxBR1MgKz0gIi1EVVNFX1BSRUFEIgorCitQQUNLQUdFUyA9ICJsaWIke0JQTn0gbGliJHtCUE59LWRldiBsaWIke0JQTn0tZG9jICR7UE59LWRiZyBsaWIke0JQTn0tc3RhdGljZGV2ICR7UE59IgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiIKK0ZJTEVTX2xpYiR7QlBOfSA9ICIke2xpYmRpcn0vKi5zby4qIgorRklMRVNfbGliJHtCUE59LWRldiA9ICIke2xpYmRpcn0vKi5sYSAke2xpYmRpcn0vKi5zbyBcCisJICAgICAgICAgICAgICAgIAkgICAke2xpYmRpcn0vcGtnY29uZmlnICR7aW5jbHVkZWRpcn0iCitGSUxFU19saWIke0JQTn0tZG9jID0gIiR7ZG9jZGlyfSAke21hbmRpcn0gJHtpbmZvZGlyfSIKK0ZJTEVTX2xpYiR7QlBOfS1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYiouYSIKK0FVVE9fTElCTkFNRV9QS0dTID0gIiR7TUxQUkVGSVh9bGliJHtCUE59IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzXzMuOC4xMC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlM18zLjguMTAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzJhZDUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlM18zLjguMTAuMi5iYgpAQCAtMCwwICsxLDIzIEBACityZXF1aXJlIHNxbGl0ZTMuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NxbGl0ZTMuaDtlbmRsaW5lPTExO21kNT02NWYwYTU3Y2E2OTI4NzEwYjQxOGMwOTRiMzU3MGJiMCIKKworZGVmIHNxbGl0ZV9kb3dubG9hZF92ZXJzaW9uKGQpOgorICAgIHB2c3BsaXQgPSBkLmdldFZhcignUFYnLCBUcnVlKS5zcGxpdCgnLicpCisgICAgcmV0dXJuIHB2c3BsaXRbMF0gKyAnJy5qb2luKFtwYXJ0LnJqdXN0KDIsJzAnKSBmb3IgcGFydCBpbiBwdnNwbGl0WzE6XV0pCisKK1BFID0gIjMiCitTUUxJVEVfUFYgPSAiJHtAc3FsaXRlX2Rvd25sb2FkX3ZlcnNpb24oZCl9IgorU1JDX1VSSSA9ICJodHRwOi8vd3d3LnNxbGl0ZS5vcmcvMjAxNS9zcWxpdGUtYXV0b2NvbmYtJHtTUUxJVEVfUFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVzaW5nLXRoZS1keW5hbWljLWxpYnJhcnkucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTE4YmZjMDE1Y2Q0OWExZTdhOTYxYjdiNzdiYzNiMzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODM4MmU1NWE0ZTdkODUzYzkzMDM4NTYyY2EzZGQwMDMwNzkzN2ZjY2YxYzZiNjVkZGQ4MTNlNTAzYTU2ZDYyNiIKKworUyA9ICIke1dPUktESVJ9L3NxbGl0ZS1hdXRvY29uZi0ke1NRTElURV9QVn0iCisKKyMgUHJvdmlkZSBjb2x1bW4gbWV0YS1kYXRhIEFQSQorQlVJTERfQ0ZMQUdTICs9ICItRFNRTElURV9FTkFCTEVfQ09MVU1OX01FVEFEQVRBIgorVEFSR0VUX0NGTEFHUyArPSAiLURTUUxJVEVfRU5BQkxFX0NPTFVNTl9NRVRBREFUQSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC90YWdsaWIvdGFnbGliXzEuOS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC90YWdsaWIvdGFnbGliXzEuOS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMjc4MTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3RhZ2xpYi90YWdsaWJfMS45LjEuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciByZWFkaW5nIGFuZCBlZGl0aW5nIHRoZSBtZXRhLWRhdGEgb2YgcG9wdWxhciBhdWRpbyBmb3JtYXRzIgorU0VDVElPTiA9ICJsaWJzL211bHRpbWVkaWEiCitIT01FUEFHRSA9ICJodHRwOi8vdGFnbGliLmdpdGh1Yi5pby8iCitMSUNFTlNFID0gIkxHUEx2Mi4xIHwgTVBMLTEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxHUEw7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTVBMO21kNT1iZmUxZjc1ZDYwNjkxMmE0MTExYzkwNzQzZDZjNzMyNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90YWdsaWIvYXVkaW9wcm9wZXJ0aWVzLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yNDttZDU9OWRmMmM3Mzk5NTE5YjczMTA1NjhhN2M1NTA0MmVjZWUiCisKK0RFUEVORFMgPSAiemxpYiIKKworU1JDX1VSSSA9ICJodHRwOi8vdGFnbGliLmdpdGh1Yi5pby9yZWxlYXNlcy8ke0JQfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiMGQzNWRmOTY4MjJiYmQ1NjRjNTUwNGNiM2MyZTRkODYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzJkMzcxY2QxNDE5YTg3YWUyMDA0NDdhNTNiZmYyYmUyMTkyODMwNzFlODBmZDEyMzM3OTI4Y2M5NjdkYzcxYSIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS90YWdsaWItY29uZmlnIgorCitpbmhlcml0IGNtYWtlIHBrZ2NvbmZpZyBiaW5jb25maWctZGlzYWJsZWQKKworUEFDS0FHRVMgPSsgIiR7UE59LWMiCitGSUxFU18ke1BOfS1jID0gIiR7bGliZGlyfS9saWJ0YWdfYy5zby4qIgorCitFWFRSQV9PRUNNQUtFID0gIi1ETElCX1NVRkZJWD0ke0BkLmdldFZhcignYmFzZWxpYicsIFRydWUpLnJlcGxhY2UoJ2xpYicsICcnKX0iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L2FkbWluL2x0bWFpbi5zaAorCXJtIC1mICR7U30vYWRtaW4vbGlidG9vbC5tNC5pbgorCSMgRG9uJ3QgaGF2ZSBhIGZsb2F0aW5nIGRlcGVuZGVueSBvbiBib29zdAorCXNlZCAtaSAtZSAicy9hdG9taWMuaHBwL2F0b21pYy1ub3QtZXhpc3QuaHBwLyIgJHtTfS9Db25maWd1cmVDaGVja3MuY21ha2UgJHtTfS90YWdsaWIvdG9vbGtpdC90cmVmY291bnRlci5jcHAKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC91c2VyLWNyZWF0aW9uL3h1c2VyLWFjY291bnRfMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC91c2VyLWNyZWF0aW9uL3h1c2VyLWFjY291bnRfMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YmE5N2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3VzZXItY3JlYXRpb24veHVzZXItYWNjb3VudF8wLjEuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJDcmVhdGVzIGFuICd4dXNlcicgYWNjb3VudCB1c2VkIGZvciBydW5uaW5nIFgxMSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiIgorCitpbmhlcml0IGFsbGFyY2ggdXNlcmFkZAorCitkb19jb25maWd1cmUoKSB7CisgICAgOgorfQorCitkb19jb21waWxlKCkgeworICAgIDoKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICA6Cit9CisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitHUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSBzaHV0ZG93biIKK1VTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1jcmVhdGUtaG9tZSBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tZ3JvdXBzIHZpZGVvLHR0eSxhdWRpbyxpbnB1dCxzaHV0ZG93bixkaXNrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIHh1c2VyIgorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLTAuMjguMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUtMC4yOC4yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzYzZDM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLTAuMjguMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTE1NDVdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIHZ0ZS0wLjI4LjIvZ25vbWUtcHR5LWhlbHBlci9jb25maWd1cmUuaW4gdnRlLTAuMjguMi9nbm9tZS1wdHktaGVscGVyL2NvbmZpZ3VyZS5pbgorLS0tIHZ0ZS0wLjI4LjIvZ25vbWUtcHR5LWhlbHBlci9jb25maWd1cmUuaW4JMjAxMC0wNy0xNSAyMDowODo0NC4wMDAwMDAwMDAgKzAzMDAKKysrKyB2dGUtMC4yOC4yL2dub21lLXB0eS1oZWxwZXIvY29uZmlndXJlLmluCTIwMTMtMDEtMTEgMTQ6NTA6MzQuOTcxMDI3NDQwICswMjAwCitAQCAtOCw3ICs4LDYgQEAKKyBBQ19JU0NfUE9TSVgKKyBBQ19QUk9HX0NDCisgQUNfU1REQ19IRUFERVJTCistQU1fUFJPR19DQ19TVERDCisKKyBpZiB0ZXN0IC16ICIkZW5hYmxlX21haW50YWluZXJfbW9kZSI7IHRoZW4KKyAgIGVuYWJsZV9tYWludGFpbmVyX21vZGU9eWVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzQwNjJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLmluYwpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIlZpcnR1YWwgdGVybWluYWwgZW11bGF0b3IgR1RLKyB3aWRnZXQgbGlicmFyeSIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvYnVnbGlzdC5jZ2k/cHJvZHVjdD12dGUiCitMSUNFTlNFID0gIkxHUEx2Mi4wIgorREVQRU5EUyA9ICIgZ2xpYi0yLjAgZ3RrKyBpbnRsdG9vbC1uYXRpdmUgbmN1cnNlcyBnb2JqZWN0LWludHJvc3BlY3Rpb24tc3R1YiIKK1JERVBFTkRTX2xpYnZ0ZSA9ICJ2dGUtdGVybWNhcCIKKworaW5oZXJpdCBnbm9tZSBndGstZG9jCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtcHl0aG9uIC0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIgorCitQQUNLQUdFUyA9KyAibGlidnRlIHZ0ZS10ZXJtY2FwIgorRklMRVNfbGlidnRlID0gIiR7bGliZGlyfS8qLnNvLiogJHtsaWJleGVjZGlyfS9nbm9tZS1wdHktaGVscGVyIgorRklMRVNfJHtQTn0tZGJnID0rICIke2xpYmV4ZWNkaXJ9Ly5kZWJ1ZyAke3ByZWZpeH0vc3JjICR7YmluZGlyfS8uZGVidWcgXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9Ly5kZWJ1ZyIKK0ZJTEVTX3Z0ZS10ZXJtY2FwID0gIiR7ZGF0YWRpcn0vdnRlL3Rlcm1jYXAtMC4wIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGVfMC4yOC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlXzAuMjguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTAyNWNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlXzAuMjguMi5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHZ0ZS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTciCisKK1BSID0gInI2IgorCitTUkNfVVJJICs9ICJmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIgorCitDRkxBR1MgKz0gIi1EX0dOVV9TT1VSQ0UiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjQ5N2YyNmU0NTczMDg2NDllNmVjZTMyYjNiYjE0MmZmIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiODZjZjBiODFhYTAyM2ZhOTNlZDQxNTY1M2Q1MWM5Njc2N2YyMGIyZDczMzRjODkzY2FiYTcxZTQyNjU0YjBhZSIKKworUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAibWF0Y2hib3gtdGVybWluYWwgbmVlZHMgdG8gYmUgcG9ydGVkIG92ZXIgdG8gbmV3IHZ0ZSBmaXJzdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLnR4dCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDUzODZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMudHh0CkBAIC0wLDAgKzEsMTUgQEAKK3JlY2lwZXMtYnNwICAgICAgICAgIC0gQW55dGhpbmcgd2l0aCBsaW5rcyB0byBzcGVjaWZpYyBoYXJkd2FyZSBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCityZWNpcGVzLWNvbm5lY3Rpdml0eSAtIExpYnJhcmllcyBhbmQgYXBwbGljYXRpb25zIHJlbGF0ZWQgdG8gY29tbXVuaWNhdGlvbiB3aXRoIG90aGVyIGRldmljZXMgCityZWNpcGVzLWNvcmUgICAgICAgICAtIFdoYXQncyBuZWVkZWQgdG8gYnVpbGQgYSBiYXNpYyB3b3JraW5nIExpbnV4IGltYWdlIGluY2x1ZGluZyBjb21tb25seSB1c2VkIGRlcGVuZGVuY2llcworcmVjaXBlcy1kZXZ0b29scyAgICAgLSBUb29scyBwcmltYXJpbHkgdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtIChidXQgY2FuIGFsc28gYmUgdXNlZCBvbiB0YXJnZXRzKQorcmVjaXBlcy1leHRlbmRlZCAgICAgLSBBcHBsaWNhdGlvbnMgd2hpY2ggd2hpbHN0IG5vdCBlc3NlbnRpYWwgYWRkIGZlYXR1cmVzIGNvbXBhcmVkIHRvIHRoZSBhbHRlcm5hdGl2ZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgY29yZS4gTWF5IGJlIG5lZWRlZCBmb3IgZnVsbCB0b29sIGZ1bmN0aW9uYWxpdHkgb3IgTFNCIGNvbXBsaWFuY2UuCityZWNpcGVzLWdub21lICAgICAgICAtIEFsbCB0aGluZ3MgcmVsYXRlZCB0byB0aGUgR1RLKyBhcHBsaWNhdGlvbiBmcmFtZXdvcmsKK3JlY2lwZXMtZ3JhcGhpY3MgICAgIC0gWCBhbmQgb3RoZXIgZ3JhcGhpY2FsbHkgcmVsYXRlZCBzeXN0ZW0gbGlicmFyaWVzICAKK3JlY2lwZXMta2VybmVsICAgICAgIC0gVGhlIGtlcm5lbCBhbmQgZ2VuZXJpYyBhcHBsaWNhdGlvbnMvbGlicmFyaWVzIHdpdGggc3Ryb25nIGtlcm5lbCBkZXBlbmRlbmNpZXMKK3JlY2lwZXMtbHNiNCAgICAgICAgIC0gUmVjaXBlcyBhZGRlZCBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBzdXBwb3J0aW5nIHRoZSBMaW51eCBTdGFuZGFyZCBCYXNlIChMU0IpIDQueAorcmVjaXBlcy1tdWx0aW1lZGlhICAgLSBDb2RlY3MgYW5kIHN1cHBvcnQgdXRpbHRpZXMgZm9yIGF1ZGlvLCBpbWFnZXMgYW5kIHZpZGVvCityZWNpcGVzLXJ0ICAgICAgICAgICAtIFByb3ZpZGVzIHBhY2thZ2UgYW5kIGltYWdlIHJlY2lwZXMgZm9yIHVzaW5nIGFuZCB0ZXN0aW5nIHRoZSBQUkVFTVBUX1JUIGtlcm5lbAorcmVjaXBlcy1xdCAgICAgICAgICAgLSBBbGwgdGhpbmdzIHJlbGF0ZWQgdG8gdGhlIFF0IGFwcGxpY2F0aW9uIGZyYW1ld29yaworcmVjaXBlcy1zYXRvICAgICAgICAgLSBUaGUgU2F0byBkZW1vL3JlZmVyZW5jZSBVSS9VWCwgaXRzIGFzc29jaWF0ZWQgYXBwcyBhbmQgY29uZmlndXJhdGlvbiAKK3JlY2lwZXMtc3VwcG9ydCAgICAgIC0gUmVjaXBlcyB1c2VkIGJ5IG90aGVyIHJlY2lwZXMgYnV0IHRoYXQgYXJlIG5vdCBkaXJlY3RseSBpbmNsdWRlZCBpbiBpbWFnZXMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS0zMiBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS0zMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWZkOGQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtLTMyCkBAIC0wLDAgKzEsNDcgQEAKKyMgZGVmaW5pdGlvbnMgYXNzdW1pbmcgMzItYml0IGFybSBhcmNoaXRlY3R1cmUKKworIyBhcGFjaGUKK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfc3NpemVfdD0ke2FjX2N2X3NpemVvZl9zc2l6ZV90PTR9CisKKyMgZ2xpYgorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9JHtnbGliX2N2X3NpemVvZl9pbnRtYXhfdD04fQorZ2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CitnbGliX2N2X3NpemVvZl9zaXplX3Q9JHtnbGliX2N2X3NpemVvZl9zaXplX3Q9NH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz00CisKKyMgamlrZXMKK2FjX2N2X3NpemVvZl93Y2hhcl90PTQKKworIyBPUkJpdDIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfYm9vbGVhbj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9kb3VibGU9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9mbG9hdD00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmc9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2RvdWJsZT04CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfbG9uZz04CithY19jdl9hbGlnbm9mX0NPUkJBX29jdGV0PTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfcG9pbnRlcj00CithY19jdl9hbGlnbm9mX0NPUkJBX3Nob3J0PTIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfd2NoYXI9MgorCisjIGF0LXNwaTItY29yZQorYWNfY3ZfYWxpZ25vZl9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfZGJpbmRfcG9pbnRlcj00CithY19jdl9hbGlnbm9mX2RiaW5kX3N0cnVjdD0xCithY19jdl9hbGlnbm9mX2RidXNfYm9vbF90PTQKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQxNl90PTIKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQzMl90PTQKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQ2NF90PTgKK2FjX2N2X2FsaWdub2ZfZG91YmxlPTgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS02NCBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS02NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGMwOWIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtLTY0CkBAIC0wLDAgKzEsNDYgQEAKKyMgZGVmaW5pdGlvbnMgYXNzdW1pbmcgNjQtYml0IGFybSBhcmNoaXRlY3R1cmUKKworIyBnZW5lcmFsCithY19jdl9zaXplb2Zfd2NoYXJfdD00CithY19jdl9zaXplb2Zfc2l6ZV90PTgKK2FjX2N2X3NpemVvZl9zc2l6ZV90PTgKK2FjX2N2X2FsaWdub2ZfY2hhcj0xCithY19jdl9hbGlnbm9mX2RvdWJsZT04CisKKyMgZ2xpYgorI2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KKyNnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorI2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KKworIyBnbGliLTIuMAorI2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KKyNnbGliX2N2X3NpemVvZl9pbnRtYXhfdD0ke2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PTh9CisjZ2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CisjZ2xpYl9jdl9zaXplb2Zfc2l6ZV90PSR7Z2xpYl9jdl9zaXplb2Zfc2l6ZV90PTR9CisjZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTgKKworIyBPUkJpdDIgKHNob3VsZCBiZSBpbiBtZXRhLWdub21lL3NpdGUvYXJtLTY0KQorI2FjX2N2X2FsaWdub2ZfQ09SQkFfYm9vbGVhbj0xCisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9jaGFyPTEKKyNhY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT04CisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9mbG9hdD00CisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nPTQKKyNhY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTgKKyNhY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfbG9uZz04CisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9vY3RldD0xCisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTQKKyNhY19jdl9hbGlnbm9mX0NPUkJBX3Nob3J0PTIKKyNhY19jdl9hbGlnbm9mX0NPUkJBX3N0cnVjdD0xCisjYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKKyMgYXQtc3BpMi1jb3JlCithY19jdl9hbGlnbm9mX2RiaW5kX3BvaW50ZXI9OAorYWNfY3ZfYWxpZ25vZl9kYmluZF9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9kYnVzX2Jvb2xfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50MTZfdD0yCithY19jdl9hbGlnbm9mX2RidXNfaW50MzJfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50NjRfdD04CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS1jb21tb24gYi95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tY29tbW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZTVkNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tY29tbW9uCkBAIC0wLDAgKzEsMTU5IEBACisjIGdlbmVyYWwKK2FjX2N2X3ZhX3ZhbF9jb3B5PSR7YWNfY3ZfdmFfdmFsX2NvcHk9eWVzfQorYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPSR7YWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc30KK2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD0ke2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPW5vfQorYWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF9oPSR7YWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF9oPW5vfQorYWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD0ke2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfdWlvX2g9bm99CithY19jdl9zY3RwPSR7YWNfY3Zfc2N0cD1ub30KKworIyBhcGFjaGUKK2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPSR7YWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9eWVzfQorYXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPSR7YXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPW5vfQorYXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz0ke2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9eWVzfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPXllc30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPW1pc3Npbmd9CisKKyMgY29yZXV0aWxzCit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxOX0KKworIyBjdnMKK2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9JHtjdnNfY3ZfZnVuY19wcmludGZfcHRyPXllc30KKworIyBkYiAoc2xlZXB5Y2F0KQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBlZGIKK2RiX2N2X3NwaW5sb2Nrcz0ke2RiX2N2X3NwaW5sb2Nrcz1ub30KKworIyBldHRlcmNhcAorZXR0ZXJjYXBfY3ZfdHlwZV9zb2NrbGVuX3Q9JHtldHRlcmNhcF9jdl90eXBlX3NvY2tsZW5fdD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9Citjb21wYXRfY3ZfZnVuY19iYXNlbmFtZV93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX2Jhc2VuYW1lX3dvcmtzPW5vfQorY29tcGF0X2N2X2Z1bmNfZGlybmFtZV93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX2Rpcm5hbWVfd29ya3M9bm99CisKKyMgZm5tYXRjaAorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBnbGliCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT15ZXN9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD15ZXN9CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3Zfc3lzX3VzZV9waWRfbmljZW5lc3Nfc3Vycm9nYXRlPSR7Z2xpYl9jdl9zeXNfdXNlX3BpZF9uaWNlbmVzc19zdXJyb2dhdGU9eWVzfQorCisjZ3N0cmVhbWVyCithc19jdl91bmFsaWduZWRfYWNjZXNzPSR7YXNfY3ZfdW5hbGlnbmVkX2FjY2Vzcz1ub30KKworIyBodHRwcGMKK2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9JHthY19jdl9zdHJlcnJvcl9yX1NVU3YzPW5vfQorCisjIGxmdHAKK2FjX2N2X25lZWRfdHJpbz0ke2FjX2N2X25lZWRfdHJpbz1ub30KK2xmdHBfY3ZfdmFfdmFsX2NvcHk9JHtsZnRwX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBsaWJlc210cAorYWN4X3dvcmtpbmdfc25wcmludGY9JHthY3hfd29ya2luZ19zbnByaW50Zj15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIGxpYm5ldCAKK2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9JHthY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PXllc30KKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIGxpYnhmY2U0dXRpbAord2l0aF9icm9rZW5fcHV0ZW52PSR7d2l0aF9icm9rZW5fcHV0ZW52PW5vfQorCisjIGxpbmtzCithY19jdl9saWJfcG5nX3BuZ19jcmVhdGVfaW5mb19zdHJ1Y3Q9JHthY19jdl9saWJfcG5nX3BuZ19jcmVhdGVfaW5mb19zdHJ1Y3Q9eWVzfQorCisjIG15c3FsCitteXNxbF9jdl9mdW5jX2F0b21pY19zdWI9JHtteXNxbF9jdl9mdW5jX2F0b21pY19zdWI9bm99CitteXNxbF9jdl9mdW5jX2F0b21pY19hZGQ9JHtteXNxbF9jdl9mdW5jX2F0b21pY19hZGQ9bm99CisKKyMgbmFubworYWNfY3ZfcmVnZXhlY19zZWdmYXVsdF9lbXB0eXN0cj0ke2FjX2N2X3JlZ2V4ZWNfc2VnZmF1bHRfZW1wdHlzdHI9bm99CituYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPSR7bmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj1ub30KKworIyBwaHAKK2FjX2N2X3ByZWFkPSR7YWNfY3ZfcHJlYWQ9bm99CithY19jdl9wd3JpdGU9JHthY19jdl9wd3JpdGU9bm99CitwaHBfY3ZfbGliX2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9JHtwaHBfY3ZfbGliX2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9eWVzfQorCisjIHJzeW5jCityc3luY19jdl9IQVZFX0JST0tFTl9MQVJHRUZJTEU9JHtyc3luY19jdl9IQVZFX0JST0tFTl9MQVJHRUZJTEU9bm99Cityc3luY19jdl9IQVZFX1NPQ0tFVFBBSVI9JHtyc3luY19jdl9IQVZFX1NPQ0tFVFBBSVI9eWVzfQorcnN5bmNfY3ZfSEFWRV9MT05HTE9ORz0ke3JzeW5jX2N2X0hBVkVfTE9OR0xPTkc9eWVzfQorcnN5bmNfY3ZfSEFWRV9PRkY2NF9UPSR7cnN5bmNfY3ZfSEFWRV9PRkY2NF9UPW5vfQorcnN5bmNfY3ZfSEFWRV9TSE9SVF9JTk9fVD0ke3JzeW5jX2N2X0hBVkVfU0hPUlRfSU5PX1Q9bm99Cityc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9JHtyc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9bm99Cityc3luY19jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7cnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj1ub30KK3JzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7cnN5bmNfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorcnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7cnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KK3JzeW5jX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtyc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7cnN5bmNfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99Cityc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9BVE9OPW5vfQorCisjIHNjcmVlbgorc2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPSR7c2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPXllc30KK3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9JHtzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD0ke3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD15ZXN9CisKKyMgc2xybgorc2xybl9jdl92YV92YWxfY29weT0ke3Nscm5fY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIHNvY2F0CithY19jdl9pc3BlZWRfb2Zmc2V0PSR7YWNfY3ZfaXNwZWVkX29mZnNldD0xM30KK3NjX2N2X3Rlcm1pb3NfaXNwZWVkPSR7c2NfY3ZfdGVybWlvc19pc3BlZWQ9eWVzfQorCisjIHNzaAorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2RpcmVudF9oYXZlX3NwYWNlX2RfbmFtZT15ZXN9CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPXllc30KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPXllcworCisjIHhmZm0KK2ptX2N2X2Z1bmNfd29ya2luZ19yZWFkZGlyPXllcworCisjIGV2b2x1dGlvbi1kYXRhLXNlcnZlcgorYWNfY3ZfbGliaWNvbnZfdXRmOD0ke2FjX2N2X2xpYmljb252X3V0Zjg9eWVzfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tZGFyd2luIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtLWRhcndpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWZmMDk3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtLWRhcndpbgpAQCAtMCwwICsxLDExIEBACithY19jdl9saWJfbV9zaW49JHthY19jdl9saWJfbV9zaW49eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9zcGF3bj0ke2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd249bm99CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9bm99CithY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9bm99CitiYXNoX2N2X2hhdmVfbWJzdGF0ZV90PSR7YmFzaF9jdl9oYXZlX21ic3RhdGVfdD15ZXN9CithY19jdl9mdW5jX3N0cmVycm9yX3I9JHthY19jdl9mdW5jX3N0cmVycm9yX3I9bm99CithY19jdl92YV9jb3B5PSR7YWNfY3ZfdmFfY29weT15ZXN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tZGFyd2luOCBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS1kYXJ3aW44Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZmYwOTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tZGFyd2luOApAQCAtMCwwICsxLDExIEBACithY19jdl9saWJfbV9zaW49JHthY19jdl9saWJfbV9zaW49eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9zcGF3bj0ke2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd249bm99CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9bm99CithY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9bm99CitiYXNoX2N2X2hhdmVfbWJzdGF0ZV90PSR7YmFzaF9jdl9oYXZlX21ic3RhdGVfdD15ZXN9CithY19jdl9mdW5jX3N0cmVycm9yX3I9JHthY19jdl9mdW5jX3N0cmVycm9yX3I9bm99CithY19jdl92YV9jb3B5PSR7YWNfY3ZfdmFfY29weT15ZXN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tbGludXggYi95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiMTg4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS1saW51eApAQCAtMCwwICsxLDE2MCBAQAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vCithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2Zfd2NoYXJfdD0ke2FjX2N2X3NpemVvZl93Y2hhcl90PTF9CithY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyPTF9CithY19jdl9zaXplb2ZfYm9vbD0ke2FjX2N2X3NpemVvZl9ib29sPTF9CithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2ludF9wPTR9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX2ludF9wPSR7YWNfY3Zfc2l6ZW9mX2ludF9wPTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfb2ZmX3Q9JHthY19jdl9zaXplb2Zfb2ZmX3Q9NH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfcD0ke2FjX2N2X3NpemVvZl9sb25nX3A9NH0KK2FjX2N2X3NpemVvZl9mbG9hdD0ke2FjX2N2X3NpemVvZl9mbG9hdD00fQorYWNfY3Zfc2l6ZW9mX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9kb3VibGU9OH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT04fQorYWNfY3Zfc2l6ZW9mX3B0cmRpZmZfdD0ke2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2ZfdW5zaWduZWQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPSR7YWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPTF9CisKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CithY19jdl90aW1lX3JfdHlwZT0ke2FjX2N2X3RpbWVfcl90eXBlPVBPU0lYfQorCisjIHNhbWJhCitzYW1iYV9jdl9CUk9LRU5fTklTUExVU19JTkNMVURFX0ZJTEVTPSR7c2FtYmFfY3ZfQlJPS0VOX05JU1BMVVNfSU5DTFVERV9GSUxFUz15ZXN9CitzYW1iYV9jdl9CUk9LRU5fUkVESEFUXzdfU1lTVEVNX0hFQURFUlM9JHtzYW1iYV9jdl9CUk9LRU5fUkVESEFUXzdfU1lTVEVNX0hFQURFUlM9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0xJTlVYX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fTElOVVhfU0VOREZJTEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9eWVzfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUl9OQU1FPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUl9OQU1FPW5vfQorc2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7c2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KK3NhbWJhX2N2X0hBVkVfREVWNjRfVD0ke3NhbWJhX2N2X0hBVkVfREVWNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0RRQl9GU09GVExJTUlUPSR7c2FtYmFfY3ZfSEFWRV9EUUJfRlNPRlRMSU1JVD1ub30KK3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9JHtzYW1iYV9jdl9IQVZFX0VYUExJQ0lUX0xBUkdFRklMRV9TVVBQT1JUPXllc30KK3NhbWJhX2N2X0hBVkVfRkFNX0g9JHtzYW1iYV9jdl9IQVZFX0ZBTV9IPW5vfQorc2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPSR7c2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPXllc30KK3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD0ke3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD15ZXN9CitzYW1iYV9jdl9IQVZFX0ZVTkNUSU9OX01BQ1JPPSR7c2FtYmFfY3ZfSEFWRV9GVU5DVElPTl9NQUNSTz15ZXN9CitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3NhbWJhX2N2X0hBVkVfSU5PNjRfVD0ke3NhbWJhX2N2X0hBVkVfSU5PNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfSU5UMTZfRlJPTV9SUENfUlBDX0g9JHtzYW1iYV9jdl9IQVZFX0lOVDE2X0ZST01fUlBDX1JQQ19IPW5vfQorc2FtYmFfY3ZfSEFWRV9JTlQzMl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfSU5UMzJfRlJPTV9SUENfUlBDX0g9bm99CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KK3NhbWJhX2N2X0hBVkVfTUFLRURFVj0ke3NhbWJhX2N2X0hBVkVfTUFLRURFVj15ZXN9CitzYW1iYV9jdl9IQVZFX01NQVA9JHtzYW1iYV9jdl9IQVZFX01NQVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9OQVRJVkVfSUNPTlY9JHtzYW1iYV9jdl9IQVZFX05BVElWRV9JQ09OVj15ZXN9CitzYW1iYV9jdl9IQVZFX09GRjY0X1Q9JHtzYW1iYV9jdl9IQVZFX09GRjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX1JPT1Q9JHtzYW1iYV9jdl9IQVZFX1JPT1Q9eWVzfQorc2FtYmFfY3ZfSEFWRV9SUENfQVVUSF9FUlJPUl9DT05GTElDVD0ke3NhbWJhX2N2X0hBVkVfUlBDX0FVVEhfRVJST1JfQ09ORkxJQ1Q9bm99CitzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7c2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRT15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TT0NLX1NJTl9MRU49JHtzYW1iYV9jdl9IQVZFX1NPQ0tfU0lOX0xFTj1ub30KK3NhbWJhX2N2X0hBVkVfU1RBVF9TVF9CTEtTSVpFPSR7c2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMS1NJWkU9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMT0NLUz0ke3NhbWJhX2N2X0hBVkVfU1RBVF9TVF9CTE9DS1M9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVI2ND1ub30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUkVOVDY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD0ke3NhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9bm99CitzYW1iYV9jdl9IQVZFX1VJTlQxNl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfVUlOVDE2X0ZST01fUlBDX1JQQ19IPW5vfQorc2FtYmFfY3ZfSEFWRV9VSU5UMzJfRlJPTV9SUENfUlBDX0g9JHtzYW1iYV9jdl9IQVZFX1VJTlQzMl9GUk9NX1JQQ19SUENfSD1ub30KK3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj15ZXN9CitzYW1iYV9jdl9IQVZFX1VUSU1CVUY9JHtzYW1iYV9jdl9IQVZFX1VUSU1CVUY9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9BRERSPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9BRERSPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfRVhJVD0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfRVhJVD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX0hPU1Q9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX0hPU1Q9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9JRD0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfSUQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9OQU1FPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9OQU1FPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfUElEPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9QSUQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9USU1FPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9USU1FPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfVFY9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1RWPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfVFlQRT0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfVFlQRT15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX1VTRVI9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1VTRVI9eWVzfQorc2FtYmFfY3ZfSEFWRV9VWF9VVF9TWVNMRU49JHtzYW1iYV9jdl9IQVZFX1VYX1VUX1NZU0xFTj1ub30KK3NhbWJhX2N2X0hBVkVfVkFfQ09QWT0ke3NhbWJhX2N2X0hBVkVfVkFfQ09QWT15ZXN9CitzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9JHtzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9eWVzfQorc2FtYmFfY3ZfSEFWRV9XZXJyb3I9JHtzYW1iYV9jdl9IQVZFX1dlcnJvcj15ZXN9CitzYW1iYV9jdl9QVVRVVExJTkVfUkVUVVJOU19VVE1QPSR7c2FtYmFfY3ZfUFVUVVRMSU5FX1JFVFVSTlNfVVRNUD15ZXN9CitzYW1iYV9jdl9RVU9UQV9XT1JLUz0ke3NhbWJhX2N2X1FVT1RBX1dPUktTPXllc30KK3NhbWJhX2N2X1JFQUxQQVRIX1RBS0VTX05VTEw9JHtzYW1iYV9jdl9SRUFMUEFUSF9UQUtFU19OVUxMPXllc30KK3NhbWJhX2N2X1JFUExBQ0VfR0VUUEFTUz0ke3NhbWJhX2N2X1JFUExBQ0VfR0VUUEFTUz15ZXN9CitzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorc2FtYmFfY3ZfUkVQTEFDRV9SRUFERElSPSR7c2FtYmFfY3ZfUkVQTEFDRV9SRUFERElSPW5vfQorc2FtYmFfY3ZfUlVOX1FVT1RBX1RFU1RTPSR7c2FtYmFfY3ZfUlVOX1FVT1RBX1RFU1RTPXllc30KK3NhbWJhX2N2X1NFRUtESVJfUkVUVVJOU19WT0lEPSR7c2FtYmFfY3ZfU0VFS0RJUl9SRVRVUk5TX1ZPSUQ9eWVzfQorc2FtYmFfY3ZfU0laRU9GX0RFVl9UPSR7c2FtYmFfY3ZfU0laRU9GX0RFVl9UPXllc30KK3NhbWJhX2N2X1NJWkVPRl9JTk9fVD0ke3NhbWJhX2N2X1NJWkVPRl9JTk9fVD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9eWVzfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19OR1JPVVBTX01BWD0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfTkdST1VQU19NQVg9eWVzfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19OUFJPQ0VTU09SU19PTkxOPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19OUFJPQ0VTU09SU19PTkxOPXllc30KK3NhbWJhX2N2X1NZU0NPTkZfU0NfTlBST0NfT05MTj0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfTlBST0NfT05MTj1ub30KK3NhbWJhX2N2X1NZU0NPTkZfU0NfUEFHRVNJWkU9JHtzYW1iYV9jdl9TWVNDT05GX1NDX1BBR0VTSVpFPXllc30KK3NhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPSR7c2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9eWVzfQorc2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9JHtzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz15ZXN9CitzYW1iYV9jdl9TWVNRVU9UQV9XT1JLU19YRlM9JHtzYW1iYV9jdl9TWVNRVU9UQV9XT1JLU19YRlM9eWVzfQorc2FtYmFfY3ZfVFJZX1FVT1RBUz0ke3NhbWJhX2N2X1RSWV9RVU9UQVM9bm99CitzYW1iYV9jdl9UUllfU1lTX1FVT1RBUz0ke3NhbWJhX2N2X1RSWV9TWVNfUVVPVEFTPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KK3NhbWJhX2N2X1dFX1VTRV9TWVNfUVVPVEFTPSR7c2FtYmFfY3ZfV0VfVVNFX1NZU19RVU9UQVM9eWVzfQorc2FtYmFfY3ZfV0lUSF9BRlM9JHtzYW1iYV9jdl9XSVRIX0FGUz1ub30KK3NhbWJhX2N2X1dJVEhfRkFLRV9LQVNFUlZFUj0ke3NhbWJhX2N2X1dJVEhfRkFLRV9LQVNFUlZFUj1ub30KK3NhbWJhX2N2X1dJVEhfUVVPVEFTPSR7c2FtYmFfY3ZfV0lUSF9RVU9UQVM9YXV0b30KK3NhbWJhX2N2X1dJVEhfU1lTX1FVT1RBUz0ke3NhbWJhX2N2X1dJVEhfU1lTX1FVT1RBUz1hdXRvfQorc2FtYmFfY3ZfV0lUSF9WRlNfQUZTQUNMPSR7c2FtYmFfY3ZfV0lUSF9WRlNfQUZTQUNMPW5vfQorc2FtYmFfY3ZfY29tcGlsZXJfc3VwcG9ydHNfbGw9JHtzYW1iYV9jdl9jb21waWxlcl9zdXBwb3J0c19sbD15ZXN9CitzYW1iYV9jdl9mb3VuZF94ZnNfaGVhZGVyPSR7c2FtYmFfY3ZfZm91bmRfeGZzX2hlYWRlcj15ZXN9CitzYW1iYV9jdl9oYXZlX2xvbmdsb25nPSR7c2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQorc2FtYmFfY3ZfaW1tZWRpYXRlX3N0cnVjdHVyZXM9JHtzYW1iYV9jdl9pbW1lZGlhdGVfc3RydWN0dXJlcz15ZXN9CitzYW1iYV9jdl9vcHRpbWl6ZV9vdXRfZnVuY2F0aW9uX2NhbGxzPSR7c2FtYmFfY3Zfb3B0aW1pemVfb3V0X2Z1bmNhdGlvbl9jYWxscz15ZXN9CitzYW1iYV9jdl9zaWdfYXRvbWljX3Q9JHtzYW1iYV9jdl9zaWdfYXRvbWljX3Q9eWVzfQorc2FtYmFfY3Zfc29ja2xlbl90PSR7c2FtYmFfY3Zfc29ja2xlbl90PXllc30KK3NhbWJhX2N2X3N0cnVjdF90aW1lc3BlYz0ke3NhbWJhX2N2X3N0cnVjdF90aW1lc3BlYz15ZXN9CitzYW1iYV9jdl9zeXNxdW90YXNfZmlsZT0ke3NhbWJhX2N2X3N5c3F1b3Rhc19maWxlPWxpYi9zeXNxdW90YXNfbGludXguY30KK3NhbWJhX2N2X3VuaXhzb2NrZXQ9JHtzYW1iYV9jdl91bml4c29ja2V0PXllc30KK3NhbWJhX2N2X3ZvbGF0aWxlPSR7c2FtYmFfY3Zfdm9sYXRpbGU9eWVzfQorCisjb2xkZXIgc2FtYmUgZGVmaW5lcworc2FtYmFfY3ZfVVNFX1NFVEVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VURVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFVJRFg9JHtzYW1iYV9jdl9VU0VfU0VUVUlEWD15ZXN9CitzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD0ke3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPXllc30KKworIyBjbGFtYXYKK2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz0ke2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz15ZXN9CitjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9JHtjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9eWVzfQorY2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PSR7Y2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PXllc30KK2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9JHthY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPXllc30KKworI2RidXMKK2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz0ke2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz15ZXN9CisKKyMgbGZ0cAorYWNfY3ZfZmlsZV9fX2Rldl9wdGNfPXllcworCisjIGd1aWxlCithY19jdl9mdW5jX3B0aHJlYWRfYXR0cl9nZXRzdGFjaz0ke2FjX2N2X2Z1bmNfcHRocmVhZF9hdHRyX2dldHN0YWNrPXllc30KKworIyBnbmV0CithY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3NhX2xlbj0ke2FjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfc2FfbGVuPW5vfQorYWNfY3ZfZ25ldF9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9nbmV0X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz1ub30KK2duZXRfc29ja2FkZHJfZmFtaWx5X2ZpZWxkX25hbWU9JHtnbmV0X3NvY2thZGRyX2ZhbWlseV9maWVsZF9uYW1lPXNzX2ZhbWlseX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS1saW51eC11Y2xpYmMgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tbGludXgtdWNsaWJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZTdjNmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tbGludXgtdWNsaWJjCkBAIC0wLDAgKzEsMTA1IEBACithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm8KK2FjX2N2X3NpemVvZl9fX2ludDY0PSR7YWNfY3Zfc2l6ZW9mX19faW50NjQ9MH0KK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2Zfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9NH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT04fQorCithY19jdl91Y2hhcj0ke2FjX2N2X3VjaGFyPW5vfQorYWNfY3ZfdWludD0ke2FjX2N2X3VpbnQ9eWVzfQorYWNfY3ZfdWxvbmc9JHthY19jdl91bG9uZz15ZXN9CithY19jdl91c2hvcnQ9JHthY19jdl91c2hvcnQ9eWVzfQorCithY19jdl90aW1lX3JfdHlwZT0ke2FjX2N2X3RpbWVfcl90eXBlPVBPU0lYfQorCisjIHNhbWJhCitzYW1iYV9jdl9CUk9LRU5fTklTUExVU19JTkNMVURFX0ZJTEVTPSR7c2FtYmFfY3ZfQlJPS0VOX05JU1BMVVNfSU5DTFVERV9GSUxFUz15ZXN9CitzYW1iYV9jdl9CUk9LRU5fUkVESEFUXzdfU1lTVEVNX0hFQURFUlM9JHtzYW1iYV9jdl9CUk9LRU5fUkVESEFUXzdfU1lTVEVNX0hFQURFUlM9bm99CitzYW1iYV9jdl9GVFJVTkNBVEVfTkVFRFNfUk9PVD0ke3NhbWJhX2N2X0ZUUlVOQ0FURV9ORUVEU19ST09UPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9MSU5VWF9TRU5ERklMRT0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0xJTlVYX1NFTkRGSUxFPXllc30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPW5vfQorc2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7c2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KK3NhbWJhX2N2X0hBVkVfREVWNjRfVD0ke3NhbWJhX2N2X0hBVkVfREVWNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0RRQl9GU09GVExJTUlUPSR7c2FtYmFfY3ZfSEFWRV9EUUJfRlNPRlRMSU1JVD1ub30KK3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9JHtzYW1iYV9jdl9IQVZFX0VYUExJQ0lUX0xBUkdFRklMRV9TVVBQT1JUPXllc30KK3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz0ke3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz15ZXN9CitzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9JHtzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9GVU5DVElPTl9NQUNSTz0ke3NhbWJhX2N2X0hBVkVfRlVOQ1RJT05fTUFDUk89eWVzfQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CitzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9JHtzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX0lOVDE2X0ZST01fUlBDX1JQQ19IPSR7c2FtYmFfY3ZfSEFWRV9JTlQxNl9GUk9NX1JQQ19SUENfSD1ub30KK3NhbWJhX2N2X0hBVkVfSU5UMzJfRlJPTV9SUENfUlBDX0g9JHtzYW1iYV9jdl9IQVZFX0lOVDMyX0ZST01fUlBDX1JQQ19IPW5vfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz15ZXN9CitzYW1iYV9jdl9IQVZFX01NQVA9JHtzYW1iYV9jdl9IQVZFX01NQVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9OQVRJVkVfSUNPTlY9JHtzYW1iYV9jdl9IQVZFX05BVElWRV9JQ09OVj15ZXN9CitzYW1iYV9jdl9IQVZFX09GRjY0X1Q9JHtzYW1iYV9jdl9IQVZFX09GRjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX1FVT1RBQ1RMXzRBPSR7c2FtYmFfY3ZfSEFWRV9RVU9UQUNUTF80QT15ZXN9CitzYW1iYV9jdl9IQVZFX1JPT1Q9JHtzYW1iYV9jdl9IQVZFX1JPT1Q9bm99CitzYW1iYV9jdl9IQVZFX1JQQ19BVVRIX0VSUk9SX0NPTkZMSUNUPSR7c2FtYmFfY3ZfSEFWRV9SUENfQVVUSF9FUlJPUl9DT05GTElDVD1ub30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPW5vfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PW5vfQorc2FtYmFfY3ZfSEFWRV9TT0NLX1NJTl9MRU49JHtzYW1iYV9jdl9IQVZFX1NPQ0tfU0lOX0xFTj1ub30KK3NhbWJhX2N2X0hBVkVfU1RBVF9TVF9CTEtTSVpFPSR7c2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMS1NJWkU9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMT0NLUz0ke3NhbWJhX2N2X0hBVkVfU1RBVF9TVF9CTE9DS1M9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVJFTlQ2ND1ub30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0lGX0RRQkxLPSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfSUZfRFFCTEs9bm99CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9NRU1fRFFCTEs9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9NRU1fRFFCTEs9bm99CitzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPSR7c2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD1ub30KK3NhbWJhX2N2X0hBVkVfVUlOVDE2X0ZST01fUlBDX1JQQ19IPSR7c2FtYmFfY3ZfSEFWRV9VSU5UMTZfRlJPTV9SUENfUlBDX0g9bm99CitzYW1iYV9jdl9IQVZFX1VJTlQzMl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfVUlOVDMyX0ZST01fUlBDX1JQQ19IPW5vfQorc2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7c2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPXllc30KK3NhbWJhX2N2X0hBVkVfVVRJTUJVRj0ke3NhbWJhX2N2X0hBVkVfVVRJTUJVRj15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX0FERFI9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX0FERFI9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9FWElUPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9FWElUPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfSE9TVD0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfSE9TVD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX0lEPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9JRD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX05BTUU9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX05BTUU9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9QSUQ9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1BJRD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX1RJTUU9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1RJTUU9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9UVj0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfVFY9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9UWVBFPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9UWVBFPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfVVNFUj0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfVVNFUj15ZXN9CitzYW1iYV9jdl9IQVZFX1VYX1VUX1NZU0xFTj0ke3NhbWJhX2N2X0hBVkVfVVhfVVRfU1lTTEVOPW5vfQorc2FtYmFfY3ZfSEFWRV9WQV9DT1BZPSR7c2FtYmFfY3ZfSEFWRV9WQV9DT1BZPXllc30KK3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD0ke3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD1ub30KK3NhbWJhX2N2X0hBVkVfV2Vycm9yPSR7c2FtYmFfY3ZfSEFWRV9XZXJyb3I9eWVzfQorc2FtYmFfY3ZfUFVUVVRMSU5FX1JFVFVSTlNfVVRNUD0ke3NhbWJhX2N2X1BVVFVUTElORV9SRVRVUk5TX1VUTVA9eWVzfQorc2FtYmFfY3ZfUVVPVEFfV09SS1M9JHtzYW1iYV9jdl9RVU9UQV9XT1JLUz15ZXN9CitzYW1iYV9jdl9SRVBMQUNFX0dFVFBBU1M9JHtzYW1iYV9jdl9SRVBMQUNFX0dFVFBBU1M9eWVzfQorc2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9JHtzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT1ub30KK3NhbWJhX2N2X1JVTl9RVU9UQV9URVNUUz0ke3NhbWJhX2N2X1JVTl9RVU9UQV9URVNUUz1hdXRvfQorc2FtYmFfY3ZfU0VFS0RJUl9SRVRVUk5TX1ZPSUQ9JHtzYW1iYV9jdl9TRUVLRElSX1JFVFVSTlNfVk9JRD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9eWVzfQorc2FtYmFfY3ZfU0laRU9GX09GRl9UPSR7c2FtYmFfY3ZfU0laRU9GX09GRl9UPXllc30KK3NhbWJhX2N2X1NZU0NPTkZfU0NfTkdST1VQU19NQVg9JHtzYW1iYV9jdl9TWVNDT05GX1NDX05HUk9VUFNfTUFYPXllc30KK3NhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPSR7c2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9eWVzfQorc2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9JHtzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz15ZXN9CitzYW1iYV9jdl9UUllfUVVPVEFTPSR7c2FtYmFfY3ZfVFJZX1FVT1RBUz1ub30KK3NhbWJhX2N2X1RSWV9TWVNfUVVPVEFTPSR7c2FtYmFfY3ZfVFJZX1NZU19RVU9UQVM9bm99CitzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9CitzYW1iYV9jdl9XSVRIX1FVT1RBUz0ke3NhbWJhX2N2X1dJVEhfUVVPVEFTPWF1dG99CitzYW1iYV9jdl9XSVRIX1NZU19RVU9UQVM9JHtzYW1iYV9jdl9XSVRIX1NZU19RVU9UQVM9YXV0b30KK3NhbWJhX2N2X2NvbXBpbGVyX3N1cHBvcnRzX2xsPSR7c2FtYmFfY3ZfY29tcGlsZXJfc3VwcG9ydHNfbGw9eWVzfQorc2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz0ke3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPXllc30KK3NhbWJhX2N2X2ltbWVkaWF0ZV9zdHJ1Y3R1cmVzPSR7c2FtYmFfY3ZfaW1tZWRpYXRlX3N0cnVjdHVyZXM9eWVzfQorc2FtYmFfY3Zfb3B0aW1pemVfb3V0X2Z1bmNhdGlvbl9jYWxscz0ke3NhbWJhX2N2X29wdGltaXplX291dF9mdW5jYXRpb25fY2FsbHM9eWVzfQorc2FtYmFfY3Zfc2lnX2F0b21pY190PSR7c2FtYmFfY3Zfc2lnX2F0b21pY190PXllc30KK3NhbWJhX2N2X3NvY2tsZW5fdD0ke3NhbWJhX2N2X3NvY2tsZW5fdD15ZXN9CitzYW1iYV9jdl91bml4c29ja2V0PSR7c2FtYmFfY3ZfdW5peHNvY2tldD15ZXN9CitzYW1iYV9jdl92b2xhdGlsZT0ke3NhbWJhX2N2X3ZvbGF0aWxlPXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybWViLWxpbnV4IGIveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtZWItbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyMWZmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybWViLWxpbnV4CkBAIC0wLDAgKzEsNDMgQEAKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ubworYWNfY3Zfc2l6ZW9mX19faW50NjQ9JHthY19jdl9zaXplb2ZfX19pbnQ2ND0wfQorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTh9CithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2NoYXJfcD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkPTR9CithY19jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CisKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CisKK2FjX2N2X3RpbWVfcl90eXBlPSR7YWNfY3ZfdGltZV9yX3R5cGU9UE9TSVh9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVEVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VURVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFVJRFg9JHtzYW1iYV9jdl9VU0VfU0VUVUlEWD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRT0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PXllc30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KK3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPSR7c2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9eWVzfQorc2FtYmFfY3ZfU1RBVF9TVEFUVkZTNjQ9JHtzYW1iYV9jdl9TVEFUX1NUQVRWRlM2ND15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9eWVzfQorc2FtYmFfY3ZfU0laRU9GX0lOT19UPSR7c2FtYmFfY3ZfU0laRU9GX0lOT19UPXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybWViLWxpbnV4LXVjbGliYyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybWViLWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzFlODU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtZWItbGludXgtdWNsaWJjCkBAIC0wLDAgKzEsMzggQEAKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ubworYWNfY3Zfc2l6ZW9mX19faW50NjQ9JHthY19jdl9zaXplb2ZfX19pbnQ2ND0wfQorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTh9CithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2NoYXJfcD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkPTR9CithY19jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CisKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CisKK2FjX2N2X3RpbWVfcl90eXBlPSR7YWNfY3ZfdGltZV9yX3R5cGU9UE9TSVh9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVEVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VURVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFVJRFg9JHtzYW1iYV9jdl9VU0VfU0VUVUlEWD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRT0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PXllc30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbiBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2NjMTRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uCkBAIC0wLDAgKzEsMjEgQEAKKyMgbGliZWxmCittcl9jdl90YXJnZXRfZWxmPSR7bXJfY3ZfdGFyZ2V0X2VsZj15ZXN9CisKKyMgTm9ybWFsbHkga2VybmVscyBoYXZlIC9kZXYvcmFuZG9tIGVuYWJsZWQKK2FjX2N2X2ZpbGVfX2Rldl9yYW5kb209JHthY19jdl9maWxlX19kZXZfcmFuZG9tPXllc30KKworIyBBdm9pZCBzdWRvIHRvIGFzc3VtZSB2b2lkIGZvciB1bnNldGVudiBpbiBjcm9zcyBlbnZpcm9ubWVudCwgb3IgZWxzZSBpdCBjb25mbGljdHMgd2l0aAorIyB0YXJnZXQgc3RkbGliLmggcHJvdG90eXBlIHdoaWNoIGZvbGxvd3MgUE9TSVggY29tcGlsaWFuY2UuIE1hcmsgZm9yIHVwc3RyZWFtLgorc3Vkb19jdl9mdW5jX3Vuc2V0ZW52X3ZvaWQ9bm8KKworIyBzaGFkb3cgZGlyIGluZm8sIHRvIGF2b2lkIHNlYXJjaGluZyBidWlsZCBzeXN0ZW0KK3NoYWRvd19jdl9tYWlsZGlyPSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvbWFpbAorc2hhZG93X2N2X21haWxmaWxlPU1haWxib3gKK3NoYWRvd19jdl91dG1wZGlyPSR7bG9jYWxzdGF0ZWRpcn0vcnVuCitzaGFkb3dfY3ZfbG9nZGlyPSR7bG9jYWxzdGF0ZWRpcn0vbG9nCitzaGFkb3dfY3ZfcGFzc3dkX2Rpcj0ke2JpbmRpcn0KKworIyBweXRob246IGRlYWN0aXZhdGUgYSBydW50aW1lIGNoZWNrIGZvciBpcHY2LXN1cHBvcnQgaW4gcHl0aG9uID49Mi43LjEgdGhhdCBmYWlscyB3aGVuIGNyb3NzLWNvbXBpbGluZworYWNfY3ZfYnVnZ3lfZ2V0YWRkcmluZm89bm8KKworYWNfY3ZfcGF0aF9TRUQ9c2VkCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tZGFyd2luIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLWRhcndpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDJkODk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLWRhcndpbgpAQCAtMCwwICsxLDIgQEAKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9eWVzfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLWdsaWJjIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLWdsaWJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NDNmOGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tZ2xpYmMKQEAgLTAsMCArMSw4NiBAQAorIyBnZW5lcmFsCithY19jdl9oYXZlX2RlY2xfc3lzX3NpZ2xpc3Q9JHthY19jdl9oYXZlX2RlY2xfc3lzX3NpZ2xpc3Q9eWVzfQorYWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzPSR7YWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzPXllc30KK2FjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9JHthY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPXllc30KK2FjX2N2X2Z1bmNfbWFsbG9jX3dvcmtzPSR7YWNfY3ZfZnVuY19tYWxsb2Nfd29ya3M9eWVzfQorYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPSR7YWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPXllc30KK2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9JHthY19jdl9mdW5jX21lbWNtcF93b3JraW5nPXllc30KK2FjX2N2X2Z1bmNfZ2V0cGdycF92b2lkPXllcworYWNfY3ZfZnVuY19zZXRwZ3JwX3ZvaWQ9eWVzCithY19jdl9mdW5jX3NldGdyZW50X3ZvaWQ9eWVzCithY19jdl9mdW5jX2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfZnVuY19nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19nZXRwd3VpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfdHlwZV91aWRfdD17YWNfY3ZfdHlwZV91aWRfdD15ZXN9CithY19jdl9mdW5jX2dldGFkZHJpbmZvPSR7YWNfY3ZfZnVuY19nZXRhZGRyaW5mbz15ZXN9CisKKyMgYmFzaAorYmFzaF9jdl91bmRlcl9zeXNfc2lnbGlzdD0ke2Jhc2hfY3ZfdW5kZXJfc3lzX3NpZ2xpc3Q9eWVzfQorYmFzaF9jdl9zeXNfc2lnbGlzdD0ke2Jhc2hfY3Zfc3lzX3NpZ2xpc3Q9eWVzfQorYmFzaF9jdl9nZXRjd2RfbWFsbG9jPSR7YmFzaF9jdl9nZXRjd2RfbWFsbG9jPXllc30KKworIyBjbGFtYXYKK2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz0ke2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz15ZXN9CitjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9JHtjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9eWVzfQorY2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PSR7Y2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PXllc30KK2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9JHthY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPXllc30KKworIyBjb3JldXRpbHMKK2Z1X2N2X3N5c19zdGF0X3N0YXRmczJfYnNpemU9JHtmdV9jdl9zeXNfc3RhdF9zdGF0ZnMyX2JzaXplPXllc30KKworIyBnbGliCitnbGliX2N2X3N0cmxjcHk9JHtnbGliX2N2X3N0cmxjcHk9bm99CithY19jdl9mdW5jX3ByaW50Zl91bml4OTg9JHthY19jdl9mdW5jX3ByaW50Zl91bml4OTg9eWVzfQorYWNfY3ZfZnVuY19zbnByaW50Zl9jOTk9JHthY19jdl9mdW5jX3NucHJpbnRmX2M5OT15ZXN9CithY19jdl9mdW5jX3ZzbnByaW50Zl9jOTk9JHthY19jdl9mdW5jX3ZzbnByaW50Zl9jOTk9eWVzfQorZ2xpYl9jdl9jb21wbGlhbnRfcG9zaXhfbWVtYWxpZ249JHtnbGliX2N2X2NvbXBsaWFudF9wb3NpeF9tZW1hbGlnbj0xfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorIyBnbGliLTEueCByZXF1aXJlcyB0aGlzIGFuZCBwa2djb25maWctbmF0aXZlIC8gcGtnY29uZmlnLW5hdGl2ZXNkayB1c2UKKyMgdGhhdCB0byBhdm9pZCBhIGRlcGVuZGVuY3kgbG9vcC4KK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl92YV9jb3B5PSR7Z2xpYl9jdl92YV9jb3B5PXllc30KK2dsaWJfY3ZfaGF2ZV9xc29ydF9yPSR7Z2xpYl9jdl9oYXZlX3Fzb3J0X3I9eWVzfQorCisjZGJ1cy1nbGliCithY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9eWVzfQorCisjIGdudWNhc2gKK2FtX2N2X3NjYW5mX2xsZD0ke2FtX2N2X3NjYW5mX2xsZD15ZXN9CisKKyMgZ3VpbGUKK2FjX2N2X2Z1bmNfcHRocmVhZF9hdHRyX2dldHN0YWNrPSR7YWNfY3ZfZnVuY19wdGhyZWFkX2F0dHJfZ2V0c3RhY2s9eWVzfQorCisjZ2NjLXpsaWIKK2FjX2N2X2Z1bmNfZ2V0cGFnZXNpemU9JHthY19jdl9mdW5jX2dldHBhZ2VzaXplPXllc30KK2FjX2N2X2Z1bmNfbWVtY3B5PSR7YWNfY3ZfZnVuY19tZW1jcHk9eWVzfQorYWNfY3ZfZnVuY19zdHJlcnJvcj0ke2FjX2N2X2Z1bmNfc3RyZXJyb3I9eWVzfQorCisjIHNxdWlkCithY19jdl9hZl91bml4X2xhcmdlX2RncmFtPSR7YWNfY3ZfYWZfdW5peF9sYXJnZV9kZ3JhbT15ZXN9CithY19jdl9mdW5jX3NldHJlc3VpZD0ke2FjX2N2X2Z1bmNfc2V0cmVzdWlkPXllc30KK2FjX2N2X2Z1bmNfdmFfY29weT0ke2FjX2N2X2Z1bmNfdmFfY29weT15ZXN9CithY19jdl9mdW5jX19fdmFfY29weT0ke2FjX2N2X2Z1bmNfX192YV9jb3B5PXllc30KK2FjX2N2X2Vwb2xsX3dvcmtzPSR7YWNfY3ZfZXBvbGxfd29ya3M9eWVzfQorCithY19jdl9jaGVja19zamxqPXNzamxqCisKKyMgbTQKK2d0X2N2X2xvY2FsZV9mcj0ke2d0X2N2X2xvY2FsZV9mcj1mcl9GUn0KK2dsX2N2X2Z1bmNfYnRvd2NfZW9mPSR7Z2xfY3ZfZnVuY19idG93Y19lb2Y9eWVzfQorZ2xfY3ZfZnVuY193Y3J0b21iX3JldHZhbD0ke2dsX2N2X2Z1bmNfd2NydG9tYl9yZXR2YWw9eWVzfQorZ2xfY3ZfZnVuY193Y3RvYl93b3Jrcz0ke2dsX2N2X2Z1bmNfd2N0b2Jfd29ya3M9eWVzfQorZ2xfY3ZfZnVuY19tYnJ0b3djX2luY29tcGxldGVfc3RhdGU9JHtnbF9jdl9mdW5jX21icnRvd2NfaW5jb21wbGV0ZV9zdGF0ZT15ZXN9CitnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2s9JHtnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2s9eWVzfQorZ2xfY3ZfZnVuY19tYnJ0b3djX251bGxfYXJnPSR7Z2xfY3ZfZnVuY19tYnJ0b3djX251bGxfYXJnPXllc30KK2dsX2N2X2Z1bmNfbWJydG93Y19yZXR2YWw9JHtnbF9jdl9mdW5jX21icnRvd2NfcmV0dmFsPXllc30KK2dsX2N2X2Z1bmNfbWJydG93Y19udWxfcmV0dmFsPSR7Z2xfY3ZfZnVuY19tYnJ0b3djX251bF9yZXR2YWw9eWVzfQorCisjIHZhX2NvcHkgYW5kIF92YV9jb3B5CithY19jdl92YV9jb3B5PSR7YWNfY3ZfdmFfY29weT15ZXN9CithY19jdl9fX3ZhX2NvcHk9JHthY19jdl9fX3ZhX2NvcHk9eWVzfQorYWNfY3ZfZnVuY192YV9jb3B5PSR7YWNfY3ZfZnVuY192YV9jb3B5PXllc30KK2FjX2N2X2Z1bmNfX192YV9jb3B5PSR7YWNfY3ZfZnVuY19fX3ZhX2NvcHk9eWVzfQorCisjIFhvcmcKK3hvcmdfY3ZfbWFsbG9jMF9yZXR1cm5zX251bGw9JHt4b3JnX2N2X21hbGxvYzBfcmV0dXJuc19udWxsPXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbi1saW51eCBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbi1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjViZTY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLWxpbnV4CkBAIC0wLDAgKzEsNTIgQEAKKyMgYXByCithY19jdl9maWxlX19kZXZfemVybz0ke2FjX2N2X2ZpbGVfX2Rldl96ZXJvPXllc30KK2FjX2N2X3NpemVvZl9waWRfdD0ke2FjX2N2X3NpemVvZl9waWRfdD00fQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0lGQUNFX0FJWD0ke3NhbWJhX2N2X0hBVkVfSUZBQ0VfQUlYPW5vfQorc2FtYmFfY3ZfSEFWRV9JRkFDRV9JRkNPTkY9JHtzYW1iYV9jdl9IQVZFX0lGQUNFX0lGQ09ORj15ZXN9CitzYW1iYV9jdl9IQVZFX0lGQUNFX0lGUkVRPSR7c2FtYmFfY3ZfSEFWRV9JRkFDRV9JRlJFUT15ZXN9CitzYW1iYV9jdl9IQVZFX0lSSVhfU1BFQ0lGSUNfQ0FQQUJJTElUSUVTPSR7c2FtYmFfY3ZfSEFWRV9JUklYX1NQRUNJRklDX0NBUEFCSUxJVElFUz1ub30KKworIyBkYgorZGJfY3ZfcGF0aF9hcj0ke2RiX2N2X3BhdGhfYXI9L3Vzci9iaW4vYXJ9CitkYl9jdl9wYXRoX2NobW9kPSR7ZGJfY3ZfcGF0aF9jaG1vZD0vYmluL2NobW9kfQorZGJfY3ZfcGF0aF9jcD0ke2RiX2N2X3BhdGhfY3A9L2Jpbi9jcH0KK2RiX2N2X3BhdGhfbG49JHtkYl9jdl9wYXRoX2xuPS9iaW4vbG59CitkYl9jdl9wYXRoX21rZGlyPSR7ZGJfY3ZfcGF0aF9ta2Rpcj0vYmluL21rZGlyfQorZGJfY3ZfcGF0aF9yYW5saWI9JHtkYl9jdl9wYXRoX3JhbmxpYj0vdXNyL2Jpbi9yYW5saWJ9CitkYl9jdl9wYXRoX3JtPSR7ZGJfY3ZfcGF0aF9ybT0vYmluL3JtfQorZGJfY3ZfcGF0aF9zaD0ke2RiX2N2X3BhdGhfc2g9L2Jpbi9zaH0KK2RiX2N2X3BhdGhfc3RyaXA9JHtkYl9jdl9wYXRoX3N0cmlwPS91c3IvYmluL3N0cmlwfQorCisjIGJhc2gKK2Jhc2hfY3ZfaGF2ZV9tYnN0YXRlX3Q9JHtiYXNoX2N2X2hhdmVfbWJzdGF0ZV90PXllc30KK2Jhc2hfY3ZfbXVzdF9yZWluc3RhbGxfc2lnaGFuZGxlcnM9JHtiYXNoX2N2X211c3RfcmVpbnN0YWxsX3NpZ2hhbmRsZXJzPW5vfQorYmFzaF9jdl9mdW5jX3N0cmNvbGxfYnJva2VuPSR7YmFzaF9jdl9mdW5jX3N0cmNvbGxfYnJva2VuPW5vfQorYmFzaF9jdl9kdXAyX2Jyb2tlbj0ke2Jhc2hfY3ZfZHVwMl9icm9rZW49bm99CitiYXNoX2N2X29wZW5kaXJfbm90X3JvYnVzdD0ke2Jhc2hfY3Zfb3BlbmRpcl9ub3Rfcm9idXN0PW5vfQorYmFzaF9jdl90eXBlX3JsaW1pdD0ke2Jhc2hfY3ZfdHlwZV9ybGltaXQ9cmxpbV90fQorYmFzaF9jdl9nZXRlbnZfcmVkZWY9JHtiYXNoX2N2X2dldGVudl9yZWRlZj15ZXN9CitiYXNoX2N2X3VsaW1pdF9tYXhmZHM9JHtiYXNoX2N2X3VsaW1pdF9tYXhmZHM9eWVzfQorYmFzaF9jdl9nZXRjd2RfY2FsbHNfcG9wZW49JHtiYXNoX2N2X2dldGN3ZF9jYWxsc19wb3Blbj1ub30KK2Jhc2hfY3ZfcHJpbnRmX2FfZm9ybWF0PSR7YmFzaF9jdl9wcmludGZfYV9mb3JtYXQ9eWVzfQorYmFzaF9jdl9wZ3JwX3BpcGU9JHtiYXNoX2N2X3BncnBfcGlwZT1ub30KK2Jhc2hfY3Zfam9iX2NvbnRyb2xfbWlzc2luZz0ke2Jhc2hfY3Zfam9iX2NvbnRyb2xfbWlzc2luZz1wcmVzZW50fQorYmFzaF9jdl9zeXNfbmFtZWRfcGlwZXM9JHtiYXNoX2N2X3N5c19uYW1lZF9waXBlcz1wcmVzZW50fQorYmFzaF9jdl91bnVzYWJsZV9ydHNpZ3M9JHtiYXNoX2N2X3VudXNhYmxlX3J0c2lncz1ub30KKworIyBjb3JldXRpbHMKK2dsX2N2X2Z1bmNfZnN0YXRhdF96ZXJvX2ZsYWc9JHtnbF9jdl9mdW5jX2ZzdGF0YXRfemVyb19mbGFnPXllc30KKworIyBteXNxbAorYWNfY3Zfc3lzX3Jlc3RhcnRhYmxlX3N5c2NhbGxzPSR7YWNfY3Zfc3lzX3Jlc3RhcnRhYmxlX3N5c2NhbGxzPXllc30KK2FjX2N2X2NvbnZfbG9uZ2xvbmdfdG9fZmxvYXQ9JHthY19jdl9jb252X2xvbmdsb25nX3RvX2Zsb2F0PXllc30KKworIyBUQ0wKK3RjbF9jdl9hcGlfc2VyaWFsPSR7dGNsX2N2X2FwaV9zZXJpYWw9dGVybWlvc30KKworIyBweXRob24KK2FjX2N2X2hhdmVfbG9uZ19sb25nX2Zvcm1hdD15ZXMKKworIyBhcGFjaGUKK2FjX2N2X29fbm9uYmxvY2tfaW5oZXJpdGVkPSR7YWNfY3Zfb19ub25ibG9ja19pbmhlcml0ZWQ9bm99CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tbWluZ3cgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tbWluZ3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMzN2MzNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbi1taW5ndwpAQCAtMCwwICsxLDIgQEAKKyMgZXhwYXQKK2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9bm8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbi1tdXNsIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLW11c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmYzEwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbi1tdXNsCkBAIC0wLDAgKzEsNTIgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfaGF2ZV9kZWNsX3N5c19zaWdsaXN0PSR7YWNfY3ZfaGF2ZV9kZWNsX3N5c19zaWdsaXN0PW5vfQorYWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzPSR7YWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzPXllc30KK2FjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9JHthY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPXllc30KK2FjX2N2X2Z1bmNfbWFsbG9jX3dvcmtzPSR7YWNfY3ZfZnVuY19tYWxsb2Nfd29ya3M9eWVzfQorYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPSR7YWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPXllc30KK2FjX2N2X2Z1bmNfZ2V0cGdycF92b2lkPXllcworYWNfY3ZfZnVuY19zZXRwZ3JwX3ZvaWQ9eWVzCithY19jdl9mdW5jX3NldGdyZW50X3ZvaWQ9eWVzCithY19jdl9mdW5jX2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfZnVuY19nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19nZXRwd3VpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfZnVuY19nZXRhZGRyaW5mbz0ke2FjX2N2X2Z1bmNfZ2V0YWRkcmluZm89eWVzfQorCisjIGdsaWIKK2dsaWJfY3Zfc3RybGNweT0ke2dsaWJfY3Zfc3RybGNweT1ub30KK2FjX2N2X2Z1bmNfcHJpbnRmX3VuaXg5OD0ke2FjX2N2X2Z1bmNfcHJpbnRmX3VuaXg5OD15ZXN9CithY19jdl9mdW5jX3NucHJpbnRmX2M5OT0ke2FjX2N2X2Z1bmNfc25wcmludGZfYzk5PXllc30KK2FjX2N2X2Z1bmNfdnNucHJpbnRmX2M5OT0ke2FjX2N2X2Z1bmNfdnNucHJpbnRmX2M5OT15ZXN9CitnbGliX2N2X2NvbXBsaWFudF9wb3NpeF9tZW1hbGlnbj0ke2dsaWJfY3ZfY29tcGxpYW50X3Bvc2l4X21lbWFsaWduPTF9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X2hhdmVfcXNvcnRfcj0ke2dsaWJfY3ZfaGF2ZV9xc29ydF9yPW5vfQorCisjZGJ1cy1nbGliCithY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9eWVzfQorCisjIGJhc2gKK2Jhc2hfY3ZfdW5kZXJfc3lzX3NpZ2xpc3Q9JHtiYXNoX2N2X3VuZGVyX3N5c19zaWdsaXN0PW5vfQorYmFzaF9jdl9zeXNfc2lnbGlzdD0ke2Jhc2hfY3Zfc3lzX3NpZ2xpc3Q9bm99CisKKyMgY29yZXV0aWxzCitmdV9jdl9zeXNfc3RhdF9zdGF0ZnMyX2JzaXplPSR7ZnVfY3Zfc3lzX3N0YXRfc3RhdGZzMl9ic2l6ZT15ZXN9CitnbF9jdl9mdW5jX2dldHRpbWVvZmRheV9jbG9iYmVyPSR7Z2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfY2xvYmJlcj1ub30KK2dsX2N2X2Z1bmNfdHpzZXRfY2xvYmJlcj0ke2dsX2N2X2Z1bmNfdHpzZXRfY2xvYmJlcj1ub30KK2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X3Bvc2l4X3NpZ25hdHVyZT0ke2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X3Bvc2l4X3NpZ25hdHVyZT15ZXN9CithY19jdl9mdW5jX3Bvc2l4X3NwYXduPSR7YWNfY3ZfZnVuY19wb3NpeF9zcGF3bj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzPSR7YWNfY3ZfZnVuY19wb3NpeF9zcGF3bl93b3Jrcz15ZXN9CisKKyMgdmFfY29weSBhbmQgX3ZhX2NvcHkKK2FjX2N2X3ZhX2NvcHk9JHthY19jdl92YV9jb3B5PXllc30KK2FjX2N2X19fdmFfY29weT0ke2FjX2N2X19fdmFfY29weT15ZXN9CithY19jdl9mdW5jX3ZhX2NvcHk9JHthY19jdl9mdW5jX3ZhX2NvcHk9eWVzfQorYWNfY3ZfZnVuY19fX3ZhX2NvcHk9JHthY19jdl9mdW5jX19fdmFfY29weT15ZXN9CisKKyMgcG9zaXhfZ2V0cHd1aWRfciBwb3NpeF9nZXRncmdpZF9yIHBvc2l4X2dldHB3bmFtX3IKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBYb3JnCit4b3JnX2N2X21hbGxvYzBfcmV0dXJuc19udWxsPSR7eG9yZ19jdl9tYWxsb2MwX3JldHVybnNfbnVsbD15ZXN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tdWNsaWJjIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmZjMTAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLXVjbGliYwpAQCAtMCwwICsxLDUyIEBACisjIGdlbmVyYWwKK2FjX2N2X2hhdmVfZGVjbF9zeXNfc2lnbGlzdD0ke2FjX2N2X2hhdmVfZGVjbF9zeXNfc2lnbGlzdD1ub30KK2FjX2N2X2Z1bmNfcmVhbGxvY193b3Jrcz0ke2FjX2N2X2Z1bmNfcmVhbGxvY193b3Jrcz15ZXN9CithY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPSR7YWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbD15ZXN9CithY19jdl9mdW5jX21hbGxvY193b3Jrcz0ke2FjX2N2X2Z1bmNfbWFsbG9jX3dvcmtzPXllc30KK2FjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbD0ke2FjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbD15ZXN9CithY19jdl9mdW5jX2dldHBncnBfdm9pZD15ZXMKK2FjX2N2X2Z1bmNfc2V0cGdycF92b2lkPXllcworYWNfY3ZfZnVuY19zZXRncmVudF92b2lkPXllcworYWNfY3ZfZnVuY19nZXRncmdpZF9yPSR7YWNfY3ZfZnVuY19nZXRncmdpZF9yPXllc30KK2FjX2N2X2Z1bmNfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPXllc30KK2FjX2N2X2Z1bmNfZ2V0YWRkcmluZm89JHthY19jdl9mdW5jX2dldGFkZHJpbmZvPXllc30KKworIyBnbGliCitnbGliX2N2X3N0cmxjcHk9JHtnbGliX2N2X3N0cmxjcHk9bm99CithY19jdl9mdW5jX3ByaW50Zl91bml4OTg9JHthY19jdl9mdW5jX3ByaW50Zl91bml4OTg9eWVzfQorYWNfY3ZfZnVuY19zbnByaW50Zl9jOTk9JHthY19jdl9mdW5jX3NucHJpbnRmX2M5OT15ZXN9CithY19jdl9mdW5jX3ZzbnByaW50Zl9jOTk9JHthY19jdl9mdW5jX3ZzbnByaW50Zl9jOTk9eWVzfQorZ2xpYl9jdl9jb21wbGlhbnRfcG9zaXhfbWVtYWxpZ249JHtnbGliX2N2X2NvbXBsaWFudF9wb3NpeF9tZW1hbGlnbj0xfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9oYXZlX3Fzb3J0X3I9JHtnbGliX2N2X2hhdmVfcXNvcnRfcj1ub30KKworI2RidXMtZ2xpYgorYWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPSR7YWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPXllc30KKworIyBiYXNoCitiYXNoX2N2X3VuZGVyX3N5c19zaWdsaXN0PSR7YmFzaF9jdl91bmRlcl9zeXNfc2lnbGlzdD1ub30KK2Jhc2hfY3Zfc3lzX3NpZ2xpc3Q9JHtiYXNoX2N2X3N5c19zaWdsaXN0PW5vfQorCisjIGNvcmV1dGlscworZnVfY3Zfc3lzX3N0YXRfc3RhdGZzMl9ic2l6ZT0ke2Z1X2N2X3N5c19zdGF0X3N0YXRmczJfYnNpemU9eWVzfQorZ2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfY2xvYmJlcj0ke2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X2Nsb2JiZXI9bm99CitnbF9jdl9mdW5jX3R6c2V0X2Nsb2JiZXI9JHtnbF9jdl9mdW5jX3R6c2V0X2Nsb2JiZXI9bm99CitnbF9jdl9mdW5jX2dldHRpbWVvZmRheV9wb3NpeF9zaWduYXR1cmU9JHtnbF9jdl9mdW5jX2dldHRpbWVvZmRheV9wb3NpeF9zaWduYXR1cmU9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9zcGF3bj0ke2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd249eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9zcGF3bl93b3Jrcz0ke2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd25fd29ya3M9eWVzfQorCisjIHZhX2NvcHkgYW5kIF92YV9jb3B5CithY19jdl92YV9jb3B5PSR7YWNfY3ZfdmFfY29weT15ZXN9CithY19jdl9fX3ZhX2NvcHk9JHthY19jdl9fX3ZhX2NvcHk9eWVzfQorYWNfY3ZfZnVuY192YV9jb3B5PSR7YWNfY3ZfZnVuY192YV9jb3B5PXllc30KK2FjX2N2X2Z1bmNfX192YV9jb3B5PSR7YWNfY3ZfZnVuY19fX3ZhX2NvcHk9eWVzfQorCisjIHBvc2l4X2dldHB3dWlkX3IgcG9zaXhfZ2V0Z3JnaWRfciBwb3NpeF9nZXRwd25hbV9yCithY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgWG9yZworeG9yZ19jdl9tYWxsb2MwX3JldHVybnNfbnVsbD0ke3hvcmdfY3ZfbWFsbG9jMF9yZXR1cm5zX251bGw9eWVzfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvZW5kaWFuLWJpZyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2VuZGlhbi1iaWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5ZTk2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2VuZGlhbi1iaWcKQEAgLTAsMCArMSw4IEBACithY19jdl9jX2xpdHRsZWVuZGlhbj0ke2FjX2N2X2NfbGl0dGxlZW5kaWFuPW5vfQorYWNfY3ZfY19iaWdlbmRpYW49JHthY19jdl9jX2JpZ2VuZGlhbj15ZXN9CisKKyMgbGlibmV0CithY19jdl9saWJuZXRfZW5kaWFuZXNzPSR7YWNfY3ZfbGlibmV0X2VuZGlhbmVzcz1iaWd9CisKKyMgbGlibWVtY2FjaGVkCithY19jdl9jX2VuZGlhbj1iaWcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2VuZGlhbi1saXR0bGUgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9lbmRpYW4tbGl0dGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OGRiNzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9lbmRpYW4tbGl0dGxlCkBAIC0wLDAgKzEsOCBAQAorYWNfY3ZfY19saXR0bGVlbmRpYW49JHthY19jdl9jX2xpdHRsZWVuZGlhbj15ZXN9CithY19jdl9jX2JpZ2VuZGlhbj0ke2FjX2N2X2NfYmlnZW5kaWFuPW5vfQorCisjIGxpYm5ldAorYWNfY3ZfbGlibmV0X2VuZGlhbmVzcz0ke2FjX2N2X2xpYm5ldF9lbmRpYW5lc3M9bGlsfQorCisjIGxpYm1lbWNhY2hlZAorYWNfY3ZfY19lbmRpYW49bGl0dGxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9peDg2LWNvbW1vbiBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2l4ODYtY29tbW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZDJjZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9peDg2LWNvbW1vbgpAQCAtMCwwICsxLDIzMiBAQAorIyBnZW5lcmFsCithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyPTF9CithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2NoYXJfcD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXJfcD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyX3A9NH0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD00fQorYWNfY3Zfc2l6ZW9mX2ludF9wPSR7YWNfY3Zfc2l6ZW9mX2ludF9wPTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3NzaXplX3Q9JHthY19jdl9zaXplb2Zfc3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9NH0KK2FjX2N2X3NpemVvZl9sb25nX3A9JHthY19jdl9zaXplb2ZfbG9uZ19wPTR9CithY19jdl9zaXplb2ZfZmxvYXQ9JHthY19jdl9zaXplb2ZfZmxvYXQ9NH0KK2FjX2N2X3NpemVvZl9vZmZfdD0ke2FjX2N2X3NpemVvZl9vZmZfdD00fQorYWNfY3Zfc2l6ZW9mX3VpZF90PSR7YWNfY3Zfc2l6ZW9mX3VpZF90PTR9CithY19jdl9zaXplb2ZfZ2lkX3Q9JHthY19jdl9zaXplb2ZfZ2lkX3Q9NH0KK2FjX2N2X3NpemVvZl9pbm9fdD0ke2FjX2N2X3NpemVvZl9pbm9fdD00fQorYWNfY3Zfc2l6ZW9mX2Rldl90PSR7YWNfY3Zfc2l6ZW9mX2Rldl90PTh9CithY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9JHthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzfQorYWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9JHthY19jdl9mdW5jX3B0aHJlYWRfa2V5X2RlbGV0ZT15ZXN9CithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CithY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9JHthY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD1ub30KK2FjX2N2X3ZhX3ZhbF9jb3B5PSR7YWNfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9JHthY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9bm99CithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPSR7YWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD1ub30KK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CithY19jdl9zY3RwPSR7YWNfY3Zfc2N0cD1ub30KKworYXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPSR7YXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPW5vfQorYXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz0ke2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9eWVzfQorCithY19jdl9wYXRoX0VTRF9DT05GSUc9bm8KK2xmX2N2X3NhbmVfcmVhbGxvYz15ZXMKK2ptX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X2Nsb2JiZXI9bm8KK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllcworYmZfbHNiZj0xCithY19jdl91Y2hhcj0ke2FjX2N2X3VjaGFyPW5vfQorYWNfY3ZfdWludD0ke2FjX2N2X3VpbnQ9eWVzfQorYWNfY3ZfdWxvbmc9JHthY19jdl91bG9uZz15ZXN9CithY19jdl91c2hvcnQ9JHthY19jdl91c2hvcnQ9eWVzfQorCisjIGF1ZGFjaXR5CithY19jdl9maWxlX2xpYl9zcmNfbGlibWFkX2ZyYW1lX2g9JHthY19jdl9maWxlX2xpYl9zcmNfbGlibWFkX2ZyYW1lX2g9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9eWVzfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9bWlzc2luZ30KKworIyBjbGFtYXYKK2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz0ke2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz15ZXN9CitjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9JHtjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9eWVzfQorY2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PSR7Y2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PXllc30KK2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9JHthY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPXllc30KKworIyBjdnMKK2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9JHtjdnNfY3ZfZnVuY19wcmludGZfcHRyPXllc30KKworIyBkYgorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBldHRlcmNhcAorZXR0ZXJjYXBfY3ZfdHlwZV9zb2NrbGVuX3Q9JHtldHRlcmNhcF9jdl90eXBlX3NvY2tsZW5fdD15ZXN9CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PXllc30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT15ZXN9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj15ZXN9CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTQKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz00CisKKyMgZ3VpbGUKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyMgamlrZXMtbmF0aXZlCithY19jdl9zaXplb2Zfd2NoYXJfdD00CisKKyMgbGZ0cAorYWNfY3ZfbmVlZF90cmlvPSR7YWNfY3ZfbmVlZF90cmlvPW5vfQorbGZ0cF9jdl92YV92YWxfY29weT0ke2xmdHBfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBsaWJuZXQgCithY19jdl9sYmxfdW5hbGlnbmVkX2ZhaWw9JHthY19jdl9sYmxfdW5hbGlnbmVkX2ZhaWw9bm99CithY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PSR7YWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD15ZXN9CisKKyMgbGlieGZjZTR1dGlsCit3aXRoX2Jyb2tlbl9wdXRlbnY9JHt3aXRoX2Jyb2tlbl9wdXRlbnY9bm99CisKKyMgbXlzcWwKK215c3FsX2N2X2Z1bmNfYXRvbWljX3N1Yj0ke215c3FsX2N2X2Z1bmNfYXRvbWljX3N1Yj15ZXN9CitteXNxbF9jdl9mdW5jX2F0b21pY19hZGQ9JHtteXNxbF9jdl9mdW5jX2F0b21pY19hZGQ9eWVzfQorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT00CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKKyMgcGhwCithY19jdl9wcmVhZD0ke2FjX2N2X3ByZWFkPW5vfQorYWNfY3ZfcHdyaXRlPSR7YWNfY3ZfcHdyaXRlPW5vfQorcGhwX2N2X2xpYl9jb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PSR7cGhwX2N2X2xpYl9jb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PXllc30KKworIyByc3luYworcnN5bmNfY3ZfSEFWRV9CUk9LRU5fTEFSR0VGSUxFPSR7cnN5bmNfY3ZfSEFWRV9CUk9LRU5fTEFSR0VGSUxFPW5vfQorcnN5bmNfY3ZfSEFWRV9TT0NLRVRQQUlSPSR7cnN5bmNfY3ZfSEFWRV9TT0NLRVRQQUlSPXllc30KK3JzeW5jX2N2X0hBVkVfTE9OR0xPTkc9JHtyc3luY19jdl9IQVZFX0xPTkdMT05HPXllc30KK3JzeW5jX2N2X0hBVkVfT0ZGNjRfVD0ke3JzeW5jX2N2X0hBVkVfT0ZGNjRfVD1ub30KK3JzeW5jX2N2X0hBVkVfU0hPUlRfSU5PX1Q9JHtyc3luY19jdl9IQVZFX1NIT1JUX0lOT19UPW5vfQorcnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7cnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPW5vfQorcnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3JzeW5jX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9bm99Cityc3luY19jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3JzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3JzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3JzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9Cityc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7cnN5bmNfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9Cityc3luY19jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorcnN5bmNfY3ZfUkVQTEFDRV9JTkVUX0FUT049JHtyc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj1ub30KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CisKKyMgc2NyZWVuCitzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9eWVzfQorc2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD0ke3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPSR7c2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPXllc30KKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT15ZXN9CisKKyMgc3NoCithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfZGlyZW50X2hhdmVfc3BhY2VfZF9uYW1lPXllc30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl90eXBlX3N0cnVjdF90aW1lc3BlYz0ke2FjX2N2X3R5cGVfc3RydWN0X3RpbWVzcGVjPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz15ZXN9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz15ZXMKKworIyB4ZmZtCitqbV9jdl9mdW5jX3dvcmtpbmdfcmVhZGRpcj15ZXMKKworIyB4b3JnIFgxMVI3CithY19jdl9zeXNfbGlua2VyX2g9JHthY19jdl9zeXNfbGlua2VyX2g9bm99CithY19jdl9maWxlX191c3Jfc2hhcmVfWDExX3NnbWxfZGVmc19lbnQ9JHthY19jdl9maWxlX191c3Jfc2hhcmVfWDExX3NnbWxfZGVmc19lbnQ9bm99CisKKyMgZXZvbHV0aW9uLWRhdGEtc2VydmVyCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CisKKyNkYnVzCithY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9eWVzfQorCisjbGlicGNpYWNjZXNzCitoYXZlX210cnJfaD15ZXMKKworI21vemlsbGEKK21vel9jdl9zaXplX29mX0pTX0JZVEVTX1BFUl9XT1JEPTQKK21vel9jdl9hbGlnbl9vZl9KU19BTElHTl9PRl9QT0lOVEVSPTQKK21vel9jdl9zaXplX29mX0pTX0JZVEVTX1BFUl9ET1VCTEU9OAorCisjb2Zvbm8KK2FjX2N2X2xpYl9jX3NpZ25hbGZkPSR7YWNfY3ZfbGliX2Nfc2lnbmFsZmQ9eWVzfQorCisjdW5mczMKK25mc2RfY3ZfYnJva2VuX3NldGZzdWlkPSR7bmZzZF9jdl9icm9rZW5fc2V0ZnN1aWQ9MH0KK25mc2RfY3ZfZnVuY19zdGF0ZnM9JHtuZnNkX2N2X2Z1bmNfc3RhdGZzPXN0YXRmczJfYnNpemV9CituZnNkX2N2X2JzZF9zaWduYWxzPSR7bmZzZF9jdl9ic2Rfc2lnbmFscz15ZXN9CisKKyMgYXQtc3BpMi1jb3JlCithY19jdl9hbGlnbm9mX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9kYmluZF9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfZGJpbmRfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfZGJ1c19ib29sX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDE2X3Q9MgorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDMyX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDY0X3Q9NAorYWNfY3ZfYWxpZ25vZl9kb3VibGU9NApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwcy1jb21tb24gYi95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzLWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWQ3MmNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwcy1jb21tb24KQEAgLTAsMCArMSw1NiBAQAorIyBnZW5lcmFsCithY19jdl92YV92YWxfY29weT0ke2FjX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBjdnMKK2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9JHtjdnNfY3ZfZnVuY19wcmludGZfcHRyPXllc30KKworIyBzY3JlZW4KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9vY3RldD0xCithY19jdl9hbGlnbm9mX0NPUkJBX2Jvb2xlYW49MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfd2NoYXI9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zaG9ydD0yCithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmc9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2xvbmc9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9mbG9hdD00CithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT04CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfcG9pbnRlcj00CithY19jdl9hbGlnbm9mX0NPUkJBX3N0cnVjdD0xCisKKyMgYXBhY2hlCithY19jdl9mdW5jX3B0aHJlYWRfa2V5X2RlbGV0ZT0ke2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPXllc30KK2Fwcl9jdl9wcm9jZXNzX3NoYXJlZF93b3Jrcz0ke2Fwcl9jdl9wcm9jZXNzX3NoYXJlZF93b3Jrcz1ub30KK2FjX2N2X3NpemVvZl9zc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NzaXplX3Q9NH0KK2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9JHthcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPXllc30KKworIyBnbGliCitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz00CisKKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT15ZXN9CisKKyMgYXQtc3BpMi1jb3JlCithY19jdl9hbGlnbm9mX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9kYmluZF9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfZGJpbmRfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfZGJ1c19ib29sX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDE2X3Q9MgorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDMyX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDY0X3Q9OAorYWNfY3ZfYWxpZ25vZl9kb3VibGU9OApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwcy1saW51eCBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHMtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhNTRmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHMtbGludXgKQEAgLTAsMCArMSw3OSBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQorCisjIGRiCitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIHJyZHRvb2wKK3JkX2N2X2llZWVfd29ya3M9JHtyZF9jdl9pZWVlX3dvcmtzPXllc30KKyMgYWNfY3ZfcGF0aF9QRVJMPSR7YWNfY3ZfcGF0aF9QRVJMPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KKworIyB2aW0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyMgbG1iZW5jaAorYWNfY3ZfdWludD0ke2FjX2N2X3VuaXQ9eWVzfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGV2b2x1dGlvbi1kYXRhLXNlcnZlcgorYWNfY3ZfbGliaWNvbnZfdXRmOD0ke2FjX2N2X2xpYmljb252X3V0Zjg9eWVzfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzLWxpbnV4LXVjbGliYyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHMtbGludXgtdWNsaWJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzM2M2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzLWxpbnV4LXVjbGliYwpAQCAtMCwwICsxLDgwIEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9Cit3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPSR7d2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz15ZXN9CisKKyMgZGIKK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CisKKyMgcnJkdG9vbAorcmRfY3ZfaWVlZV93b3Jrcz0ke3JkX2N2X2llZWVfd29ya3M9eWVzfQorIyBhY19jdl9wYXRoX1BFUkw9JHthY19jdl9wYXRoX1BFUkw9bm99CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorCisjIHZpbQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KKworIyBpbnRlcmNvbQorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworIyBsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZXZvbHV0aW9uLWRhdGEtc2VydmVyCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHM2NC1saW51eCBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHM2NC1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDBmYmJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0LWxpbnV4CkBAIC0wLDAgKzEsODMgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04CithY19jdl9zaXplb2Zfc3NpemVfdD04CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbmNmdHAKK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KKworIyBkYgorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KKworIyBycmR0b29sCityZF9jdl9pZWVlX3dvcmtzPSR7cmRfY3ZfaWVlZV93b3Jrcz15ZXN9CisjIGFjX2N2X3BhdGhfUEVSTD0ke2FjX2N2X3BhdGhfUEVSTD1ub30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CisKKyMgdmltCithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorCisjIGludGVyY29tCithY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQorCisjIGxtYmVuY2gKK2FjX2N2X3VpbnQ9JHthY19jdl91bml0PXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBlZHMtZGJ1cworYWNfY3ZfbGliaWNvbnZfdXRmOD0ke2FjX2N2X2xpYmljb252X3V0Zjg9eWVzfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzNjQtbGludXgtdWNsaWJjIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0LWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmJhNTUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0LWxpbnV4LXVjbGliYwpAQCAtMCwwICsxLDgzIEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9OAorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9Cit3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPSR7d2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz15ZXN9CisKKyMgZGIKK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CisKKyMgcnJkdG9vbAorcmRfY3ZfaWVlZV93b3Jrcz0ke3JkX2N2X2llZWVfd29ya3M9eWVzfQorIyBhY19jdl9wYXRoX1BFUkw9JHthY19jdl9wYXRoX1BFUkw9bm99CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorCisjIHZpbQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KKworIyBpbnRlcmNvbQorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworIyBsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZWRzLWRidXMKK2FjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXggYi95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzNjRlbC1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjYxZWIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXgKQEAgLTAsMCArMSw4MiBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTgKKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQord2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz0ke3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9eWVzfQorCisjIGRiCitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIHJyZHRvb2wKK3JkX2N2X2llZWVfd29ya3M9JHtyZF9jdl9pZWVlX3dvcmtzPXllc30KKyMgYWNfY3ZfcGF0aF9QRVJMPSR7YWNfY3ZfcGF0aF9QRVJMPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KKworIyB2aW0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyNsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZWRzLWRidXMKK2FjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHM2NGVsLWxpbnV4LXVjbGliYyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHM2NGVsLWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTA0OTlkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXgtdWNsaWJjCkBAIC0wLDAgKzEsMTA4IEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9OAorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9Cit3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPSR7d2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz15ZXN9CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKKyMgZnJvbSBzYW1iYSAzLjAuMTRhIG9uIDUvMjkvMjAwNQorYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz0ke2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9eWVzfQorYWNfY3ZfaGF2ZV9hc3ByaW50Zl9kZWNsPSR7YWNfY3ZfaGF2ZV9hc3ByaW50Zl9kZWNsPXllc30KK2FjX2N2X2hhdmVfc2V0cmVzZ2lkX2RlY2w9JHthY19jdl9oYXZlX3NldHJlc2dpZF9kZWNsPXllc30KK2FjX2N2X2hhdmVfc2V0cmVzdWlkX2RlY2w9JHthY19jdl9oYXZlX3NldHJlc3VpZF9kZWNsPXllc30KK2FjX2N2X2hhdmVfdmFzcHJpbnRmX2RlY2w9JHthY19jdl9oYXZlX3Zhc3ByaW50Zl9kZWNsPXllc30KK2Z1X2N2X3N5c19zdGF0X3N0YXR2ZnM2ND0ke2Z1X2N2X3N5c19zdGF0X3N0YXR2ZnM2ND15ZXN9CitzYW1iYV9jdl9GVFJVTkNBVEVfTkVFRFNfUk9PVD0ke3NhbWJhX2N2X0ZUUlVOQ0FURV9ORUVEU19ST09UPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj1ub30KK3NhbWJhX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3NhbWJhX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9CitzYW1iYV9jdl9IQVZFX0RFVjY0X1Q9JHtzYW1iYV9jdl9IQVZFX0RFVjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPXllc30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9FWFBMSUNJVF9MQVJHRUZJTEVfU1VQUE9SVD0ke3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPSR7c2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPXllc30KK3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD0ke3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD15ZXN9CitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3NhbWJhX2N2X0hBVkVfSU5PNjRfVD0ke3NhbWJhX2N2X0hBVkVfSU5PNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9eWVzfQorc2FtYmFfY3ZfSEFWRV9NQUtFREVWPSR7c2FtYmFfY3ZfSEFWRV9NQUtFREVWPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX09GRjY0X1Q9JHtzYW1iYV9jdl9IQVZFX09GRjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX1FVT1RBQ1RMXzRBPSR7c2FtYmFfY3ZfSEFWRV9RVU9UQUNUTF80QT15ZXN9CitzYW1iYV9jdl9IQVZFX1JPT1Q9JHtzYW1iYV9jdl9IQVZFX1JPT1Q9bm99CitzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7c2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVJFTlQ2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPSR7c2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD1ub30KK3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj1ub30KK3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD0ke3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD1ub30KK3NhbWJhX2N2X0hBVkVfV2Vycm9yPSR7c2FtYmFfY3ZfSEFWRV9XZXJyb3I9eWVzfQorc2FtYmFfY3ZfUkVBTFBBVEhfVEFLRVNfTlVMTD0ke3NhbWJhX2N2X1JFQUxQQVRIX1RBS0VTX05VTEw9bm99CitzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorc2FtYmFfY3ZfU0laRU9GX0lOT19UPSR7c2FtYmFfY3ZfU0laRU9GX0lOT19UPXllc30KK3NhbWJhX2N2X1NJWkVPRl9PRkZfVD0ke3NhbWJhX2N2X1NJWkVPRl9PRkZfVD15ZXN9CitzYW1iYV9jdl9TWVNDT05GX1NDX05HUk9VUFNfTUFYPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19OR1JPVVBTX01BWD15ZXN9CitzYW1iYV9jdl9TWVNDT05GX1NDX05QUk9DX09OTE49JHtzYW1iYV9jdl9TWVNDT05GX1NDX05QUk9DX09OTE49bm99CitzYW1iYV9jdl9TWVNRVU9UQV9GT1VORD0ke3NhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPXllc30KK3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTPSR7c2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz0ke3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPXllc30KK3NhbWJhX2N2X3N5c3F1b3Rhc19maWxlPSR7c2FtYmFfY3Zfc3lzcXVvdGFzX2ZpbGU9bGliL3N5c3F1b3Rhc180QS5jfQorIyBUaGlzIGNhY2hlZCB2YWx1ZSBuZWVkcyBhIGxvY2FsIHBhdGNoIHRvIHBpY2sgaXQgdXAsIHVwc3RyZWFtIDMuMC4xNGEKKyMgZG9lc24ndCBjYWNoZSBpdC4KK3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPSR7c2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9eWVzfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2VsLWxpbnV4IGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2VsLWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NmIxYmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzZWwtbGludXgKQEAgLTAsMCArMSw3OSBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQord2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz0ke3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9eWVzfQorCisjIGRiCitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIHJyZHRvb2wKK3JkX2N2X2llZWVfd29ya3M9JHtyZF9jdl9pZWVlX3dvcmtzPXllc30KKyMgYWNfY3ZfcGF0aF9QRVJMPSR7YWNfY3ZfcGF0aF9QRVJMPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KKworIyB2aW0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyNsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZXZvbHV0aW9uLWRhdGEtc2VydmVyCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzZWwtbGludXgtdWNsaWJjIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2VsLWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTIxY2RhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2VsLWxpbnV4LXVjbGliYwpAQCAtMCwwICsxLDEwMCBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQord2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz0ke3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9eWVzfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCisjIGZyb20gc2FtYmEgMy4wLjE0YSBvbiA1LzI5LzIwMDUKK2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9JHthY19jdl9mdW5jX21lbWNtcF93b3JraW5nPXllc30KK2FjX2N2X2hhdmVfYXNwcmludGZfZGVjbD0ke2FjX2N2X2hhdmVfYXNwcmludGZfZGVjbD15ZXN9CithY19jdl9oYXZlX3NldHJlc2dpZF9kZWNsPSR7YWNfY3ZfaGF2ZV9zZXRyZXNnaWRfZGVjbD15ZXN9CithY19jdl9oYXZlX3NldHJlc3VpZF9kZWNsPSR7YWNfY3ZfaGF2ZV9zZXRyZXN1aWRfZGVjbD15ZXN9CithY19jdl9oYXZlX3Zhc3ByaW50Zl9kZWNsPSR7YWNfY3ZfaGF2ZV92YXNwcmludGZfZGVjbD15ZXN9CitmdV9jdl9zeXNfc3RhdF9zdGF0dmZzNjQ9JHtmdV9jdl9zeXNfc3RhdF9zdGF0dmZzNjQ9eWVzfQorc2FtYmFfY3ZfRlRSVU5DQVRFX05FRURTX1JPT1Q9JHtzYW1iYV9jdl9GVFJVTkNBVEVfTkVFRFNfUk9PVD1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9bm99CitzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9JHtzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9ERVY2NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPXllc30KK3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9JHtzYW1iYV9jdl9IQVZFX0VYUExJQ0lUX0xBUkdFRklMRV9TVVBQT1JUPXllc30KK3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz0ke3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz15ZXN9CitzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9JHtzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CitzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9JHtzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KK3NhbWJhX2N2X0hBVkVfTUFLRURFVj0ke3NhbWJhX2N2X0hBVkVfTUFLRURFVj15ZXN9CitzYW1iYV9jdl9IQVZFX01NQVA9JHtzYW1iYV9jdl9IQVZFX01NQVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9PRkY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9PRkY2NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9RVU9UQUNUTF80QT0ke3NhbWJhX2N2X0hBVkVfUVVPVEFDVExfNEE9eWVzfQorc2FtYmFfY3ZfSEFWRV9ST09UPSR7c2FtYmFfY3ZfSEFWRV9ST09UPW5vfQorc2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUkVOVDY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD0ke3NhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9bm99CitzYW1iYV9jdl9IQVZFX1VOU0lHTkVEX0NIQVI9JHtzYW1iYV9jdl9IQVZFX1VOU0lHTkVEX0NIQVI9bm99CitzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9JHtzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9bm99CitzYW1iYV9jdl9IQVZFX1dlcnJvcj0ke3NhbWJhX2N2X0hBVkVfV2Vycm9yPXllc30KK3NhbWJhX2N2X1JFQUxQQVRIX1RBS0VTX05VTEw9JHtzYW1iYV9jdl9SRUFMUEFUSF9UQUtFU19OVUxMPW5vfQorc2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9JHtzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT1ub30KK3NhbWJhX2N2X1NJWkVPRl9JTk9fVD0ke3NhbWJhX2N2X1NJWkVPRl9JTk9fVD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9eWVzfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19OR1JPVVBTX01BWD0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfTkdST1VQU19NQVg9eWVzfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19OUFJPQ19PTkxOPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19OUFJPQ19PTkxOPW5vfQorc2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9JHtzYW1iYV9jdl9TWVNRVU9UQV9GT1VORD15ZXN9CitzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz0ke3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KK3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9JHtzYW1iYV9jdl9oYXZlX2xvbmdsb25nPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD15ZXN9CitzYW1iYV9jdl9zeXNxdW90YXNfZmlsZT0ke3NhbWJhX2N2X3N5c3F1b3Rhc19maWxlPWxpYi9zeXNxdW90YXNfNEEuY30KKyMgVGhpcyBjYWNoZWQgdmFsdWUgbmVlZHMgYSBsb2NhbCBwYXRjaCB0byBwaWNrIGl0IHVwLCB1cHN0cmVhbSAzLjAuMTRhCisjIGRvZXNuJ3QgY2FjaGUgaXQuCitzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD0ke3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL25hdGl2ZSBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL25hdGl2ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGZiMWNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbmF0aXZlCkBAIC0wLDAgKzEgQEAKK2FjX2N2X3BhdGhfU0VEPXNlZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvcG93ZXJwYy1jb21tb24gYi95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjLWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmEyOTljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvcG93ZXJwYy1jb21tb24KQEAgLTAsMCArMSwxNCBAQAorIyBnbGliCithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz00CisKKyMgYXQtc3BpMi1jb3JlCithY19jdl9hbGlnbm9mX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9kYmluZF9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfZGJpbmRfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfZGJ1c19ib29sX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDE2X3Q9MgorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDMyX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDY0X3Q9OAorYWNfY3ZfYWxpZ25vZl9kb3VibGU9OApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvcG93ZXJwYy1kYXJ3aW4gYi95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjLWRhcndpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODVmNTBiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvcG93ZXJwYy1kYXJ3aW4KQEAgLTAsMCArMSw3IEBACisjIHBrZ2NvbmZpZy1uYXRpdmUgZm9yIE9TIFggYnVpZAorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjLWxpbnV4IGIveW9jdG8tcG9reS9tZXRhL3NpdGUvcG93ZXJwYy1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWY4OWNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvcG93ZXJwYy1saW51eApAQCAtMCwwICsxLDE2IEBACisjIGdlbmVyYWwKK2FjX2N2X3ZhX3ZhbF9jb3B5PSR7YWNfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9eWVzCisKKyMgZ2xpYgorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIGxmdHAKK2xmdHBfY3ZfdmFfdmFsX2NvcHk9JHtsZnRwX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT15ZXN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjMzItbGludXggYi95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjMzItbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5MjlhYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL3Bvd2VycGMzMi1saW51eApAQCAtMCwwICsxLDI3NSBAQAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vCithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfYm9vbD0ke2FjX2N2X3NpemVvZl9ib29sPTF9CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2NoYXJfcD00fQorYWNfY3Zfc2l6ZW9mX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9kb3VibGU9OH0KK2FjX2N2X3NpemVvZl9mbG9hdD0ke2FjX2N2X3NpemVvZl9mbG9hdD00fQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9pbnRfcD0ke2FjX2N2X3NpemVvZl9pbnRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfcD0ke2FjX2N2X3NpemVvZl9sb25nX3A9NH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0xNn0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZ19pbnQ9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXI9MX0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQ9OH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9CithY19jdl9zaXplb2Zfd2NoYXJfdD0ke2FjX2N2X3NpemVvZl93Y2hhcl90PTR9CithY19jdl90eXBlX19faW50NjQ9JHthY19jdl90eXBlX19faW50NjQ9bm99CithY19jdl90eXBlX3NpemVfdD0ke2FjX2N2X3R5cGVfc2l6ZV90PXllc30KK2FjX2N2X3R5cGVfdm9pZF9wPSR7YWNfY3ZfdHlwZV92b2lkX3A9eWVzfQorYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KK2FjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KK2FjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQorYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KK2FjX2N2X3RpbWVfcl90eXBlPSR7YWNfY3ZfdGltZV9yX3R5cGU9UE9TSVh9Citjb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PSR7Y29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD15ZXN9CisKKworIyBhcGFjaGUKK2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPSR7YWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9eWVzfQorYXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPSR7YXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPW5vfQorYWNfY3Zfc2l6ZW9mX3NzaXplX3Q9JHthY19jdl9zaXplb2Zfc3NpemVfdD00fQorCithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9JHthY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9bm99CithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPSR7YWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD1ub30KK2FjX2N2X3NjdHA9JHthY19jdl9zY3RwPW5vfQorCisjIHNzaAorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2RpcmVudF9oYXZlX3NwYWNlX2RfbmFtZT15ZXN9CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfdHlwZV9zdHJ1Y3RfdGltZXNwZWM9JHthY19jdl90eXBlX3N0cnVjdF90aW1lc3BlYz15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9eWVzfQorCisjIGNvcmV1dGlscwordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTl9CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBuYW5vCithY19jdl9yZWdleGVjX3NlZ2ZhdWx0X2VtcHR5c3RyPSR7YWNfY3ZfcmVnZXhlY19zZWdmYXVsdF9lbXB0eXN0cj1ub30KK25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9JHtuYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPW5vfQorCisKKyMgbGlibmV0CithY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PSR7YWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD15ZXN9CisKKyMgc2NyZWVuCitzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9eWVzfQorc2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD0ke3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPSR7c2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPXllc30KKworYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPSR7YWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc30KK2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD0ke2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPW5vfQorCisjIHNvY2F0CithY19jdl9pc3BlZWRfb2Zmc2V0PSR7YWNfY3ZfaXNwZWVkX29mZnNldD0xM30KK3NjX2N2X3Rlcm1pb3NfaXNwZWVkPSR7c2NfY3ZfdGVybWlvc19pc3BlZWQ9eWVzfQorCisjIGxpbmtzCithY19jdl9saWJfcG5nX3BuZ19jcmVhdGVfaW5mb19zdHJ1Y3Q9JHthY19jdl9saWJfcG5nX3BuZ19jcmVhdGVfaW5mb19zdHJ1Y3Q9eWVzfQorCisjIGRiCitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorCisjIHBocAorYWNfY3ZfcHJlYWQ9JHthY19jdl9wcmVhZD1ub30KK2FjX2N2X3B3cml0ZT0ke2FjX2N2X3B3cml0ZT1ub30KK3BocF9jdl9saWJfY29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD0ke3BocF9jdl9saWJfY29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD15ZXN9CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9eWVzfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3N5c19wdGhyZWFkX211dGV4X3RyeWxvY2tfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX211dGV4X3RyeWxvY2tfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9eWVzfQorCisjIGV0dGVyY2FwCitldHRlcmNhcF9jdl90eXBlX3NvY2tsZW5fdD0ke2V0dGVyY2FwX2N2X3R5cGVfc29ja2xlbl90PXllc30KKworIyBsaWJlc210cAorYWN4X3dvcmtpbmdfc25wcmludGY9JHthY3hfd29ya2luZ19zbnByaW50Zj15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZ2xpYiAyLjAKK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PSR7Z2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9OH0KK2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD0ke2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD00fQorZ2xpYl9jdl9zaXplb2Zfc2l6ZV90PSR7Z2xpYl9jdl9zaXplb2Zfc2l6ZV90PTR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zeXNfdXNlX3BpZF9uaWNlbmVzc19zdXJyb2dhdGU9JHtnbGliX2N2X3N5c191c2VfcGlkX25pY2VuZXNzX3N1cnJvZ2F0ZT15ZXN9CisKK2dsaWJfY3Zfc3RybGNweT0ke2dsaWJfY3Zfc3RybGNweT1ub30KKworIyBodHRwcGMKK2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9JHthY19jdl9zdHJlcnJvcl9yX1NVU3YzPW5vfQorCisjIGxmdHAKK2FjX2N2X25lZWRfdHJpbz0ke2FjX2N2X25lZWRfdHJpbz1ub30KK2xmdHBfY3ZfdmFfdmFsX2NvcHk9JHtsZnRwX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBlZGIKK2RiX2N2X3NwaW5sb2Nrcz0ke2RiX2N2X3NwaW5sb2Nrcz1ub30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KK2NvbXBhdF9jdl9mdW5jX2Jhc2VuYW1lX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfYmFzZW5hbWVfd29ya3M9bm99Citjb21wYXRfY3ZfZnVuY19kaXJuYW1lX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfZGlybmFtZV93b3Jrcz1ub30KKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT00CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKKyMgY3ZzCitjdnNfY3ZfZnVuY19wcmludGZfcHRyPSR7Y3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj15ZXN9CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9eWVzfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9bWlzc2luZ30KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2Jyb2tlbl9kaXJuYW1lPSR7YWNfY3ZfaGF2ZV9icm9rZW5fZGlybmFtZT0neWVzJ30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSdubyd9CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSdubyd9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9J3llcyd9CithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9J25vJ30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSd5ZXMnfQorCisjIHZpbQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9JzQnfQorCisjbW9kcGhwIAorYWNfY3ZfY19iaWdlbmRpYW5fcGhwPSR7YWNfY3ZfY19iaWdlbmRpYW5fcGhwPXllc30KK2FjX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHthY19jdl9zaXplb2ZfcHRyZGlmZl90PTR9CisKKyMgYXBhY2hlMiAobm90ZSBvdGhlciBhcGFjaGUgc3RhbnphIGluIHRoaXMgZmlsZSkKK2FwX3ZvaWRfcHRyX2x0X2xvbmc9JHthcF92b2lkX3B0cl9sdF9sb25nPW5vfQorYXByX2N2X3VzZV9sZnM2ND0ke2Fwcl9jdl91c2VfbGZzNjQ9eWVzfQorYXByX2N2X2Vwb2xsPSR7YXByX2N2X2Vwb2xsPXllc30KK2Fwcl9jdl9wdGhyZWFkc19jZmxhZ3M9JHthcHJfY3ZfcHRocmVhZHNfY2ZsYWdzPS1wdGhyZWFkfQorYXByX2N2X3B0aHJlYWRzX2xpYj0ke2Fwcl9jdl9wdGhyZWFkc19saWI9LWxwdGhyZWFkfQorYWNfY3ZfZnVuY19tbWFwPSR7YWNfY3ZfZnVuY19tbWFwPXllc30KK2FjX2N2X2ZpbGVfX2Rldl96ZXJvPSR7YWNfY3ZfZmlsZV9fZGV2X3plcm89eWVzfQorYWNfY3Zfc2l6ZW9mX29mZl90PSR7YWNfY3Zfc2l6ZW9mX29mZl90PTR9CithY19jdl9zaXplb2ZfcGlkX3Q9JHthY19jdl9zaXplb2ZfcGlkX3Q9NH0KK2FjX2N2X3NvY2tsZW5fdD0ke2FjX2N2X3NvY2tsZW5fdD15ZXN9CithY19jdl9zdHJ1Y3RfcmxpbWl0PSR7YWNfY3Zfc3RydWN0X3JsaW1pdD15ZXN9CithY19jdl9uZWdhdGl2ZV9lYWk9JHthY19jdl9uZWdhdGl2ZV9lYWk9eWVzfQorYXByX2N2X2dhaV9hZGRyY29uZmlnPSR7YXByX2N2X2dhaV9hZGRyY29uZmlnPW5vfQorYXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz0ke2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9eWVzfQorCisjIGJpbnV0aWxzIChsaWJpYmVydHkpCithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3ZfdHlwZV9pbnQ9JHthY19jdl90eXBlX2ludD15ZXN9CithY19jdl90eXBlX3VpbnRwdHJfdD0ke2FjX2N2X3R5cGVfdWludHB0cl90PXllc30KK2xpYmVydHlfY3ZfdWludDY0PSR7bGliZXJ0eV9jdl91aW50NjQ9dWludDY0X3R9CisKKyNzYW1iYQorYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz0ke2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9eWVzfQorZnVfY3Zfc3lzX3N0YXRfc3RhdHZmczY0PSR7ZnVfY3Zfc3lzX3N0YXRfc3RhdHZmczY0PXllc30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9eWVzfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUl9OQU1FPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUl9OQU1FPW5vfQorc2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7c2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KK3NhbWJhX2N2X0hBVkVfREVWNjRfVD0ke3NhbWJhX2N2X0hBVkVfREVWNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9JHtzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9eWVzfQorc2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPSR7c2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPXllc30KK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorc2FtYmFfY3ZfSEFWRV9JTk82NF9UPSR7c2FtYmFfY3ZfSEFWRV9JTk82NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz15ZXN9CitzYW1iYV9jdl9IQVZFX01BS0VERVY9JHtzYW1iYV9jdl9IQVZFX01BS0VERVY9eWVzfQorc2FtYmFfY3ZfSEFWRV9NTUFQPSR7c2FtYmFfY3ZfSEFWRV9NTUFQPXllc30KK3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD0ke3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRT15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPSR7c2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD1ub30KK3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj15ZXN9CitzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9JHtzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9eWVzfQorc2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9JHtzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD15ZXN9CitzYW1iYV9jdl9SRUFMUEFUSF9UQUtFU19OVUxMPSR7c2FtYmFfY3ZfUkVBTFBBVEhfVEFLRVNfTlVMTD15ZXN9CitzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorc2FtYmFfY3ZfUkVQTEFDRV9SRUFERElSPSR7c2FtYmFfY3ZfUkVQTEFDRV9SRUFERElSPW5vfQorc2FtYmFfY3ZfU0laRU9GX0RFVl9UPSR7c2FtYmFfY3ZfU0laRU9GX0RFVl9UPXllc30KK3NhbWJhX2N2X1NJWkVPRl9JTk9fVD0ke3NhbWJhX2N2X1NJWkVPRl9JTk9fVD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9eWVzfQorc2FtYmFfY3ZfU1RBVF9TVEFUVkZTNjQ9JHtzYW1iYV9jdl9TVEFUX1NUQVRWRlM2ND15ZXN9CitzYW1iYV9jdl9VU0VfU0VURVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRFVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUVUlEWD0ke3NhbWJhX2N2X1VTRV9TRVRVSURYPXllc30KK3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9JHtzYW1iYV9jdl9oYXZlX2xvbmdsb25nPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD15ZXN9CisKKyMgbXlzcWwKK215c3FsX2N2X2Z1bmNfYXRvbWljX3N1Yj0ke215c3FsX2N2X2Z1bmNfYXRvbWljX3N1Yj1ub30KK215c3FsX2N2X2Z1bmNfYXRvbWljX2FkZD0ke215c3FsX2N2X2Z1bmNfYXRvbWljX2FkZD1ub30KKworCisjIGxpYmMKK2xpYmNfY3ZfcHBjX21hY2hpbmU9JHtsaWJjX2N2X3BwY19tYWNoaW5lPXllc30KK2xpYmNfY3ZfbWxvbmdfZG91YmxlXzEyOGlibT0ke2xpYmNfY3ZfbWxvbmdfZG91YmxlXzEyOGlibT15ZXN9CitsaWJjX2N2X21hYmlfaWJtbG9uZ2RvdWJsZT0ke2xpYmNfY3ZfbWFiaV9pYm1sb25nZG91YmxlPXllc30KK2xpYmNfY3ZfbWxvbmdfZG91YmxlXzEyOD0ke2xpYmNfY3ZfbWxvbmdfZG91YmxlXzEyOD15ZXN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjNjQtbGludXggYi95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjNjQtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0ZTIzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL3Bvd2VycGM2NC1saW51eApAQCAtMCwwICsxLDM5IEBACithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2NoYXJfcD04fQorYWNfY3Zfc2l6ZW9mX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9kb3VibGU9OH0KK2FjX2N2X3NpemVvZl9mbG9hdD0ke2FjX2N2X3NpemVvZl9mbG9hdD00fQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0xNn0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD04fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZ19pbnQ9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXI9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9OH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2ludD04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nX2ludD04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9OH0KKworIyBzY3JlZW4KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgYXByCithcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPSR7YXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz15ZXN9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL3NoLWNvbW1vbiBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL3NoLWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGU0MTZhMmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9zaC1jb21tb24KQEAgLTAsMCArMSwyMzggQEAKKyMgZ2VuZXJhbAorYWNfY3ZfdmFfdmFsX2NvcHk9JHthY19jdl92YV92YWxfY29weT15ZXN9CithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm8KK2FjX2N2X3NpemVvZl9fX2ludDY0PSR7YWNfY3Zfc2l6ZW9mX19faW50NjQ9MH0KK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2Zfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9NH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0xfQorCisjIGx6bworYWNfY3Zfc2l6ZW9mX2NoYXJfcD0ke2FjX2N2X3NpemVvZl9jaGFyX3A9NH0KKworYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KK2FjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KK2FjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQorYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KKworYWNfY3ZfdGltZV9yX3R5cGU9JHthY19jdl90aW1lX3JfdHlwZT1QT1NJWH0KKworIyBhcGFjaGUKK2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPSR7YWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9eWVzfQorYXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPSR7YXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPW5vfQorYXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz0ke2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9eWVzfQorYWNfY3Zfc2l6ZW9mX3NzaXplX3Q9JHthY19jdl9zaXplb2Zfc3NpemVfdD00fQorCithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9JHthY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9bm99CithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPSR7YWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD1ub30KK2FjX2N2X3NjdHA9JHthY19jdl9zY3RwPW5vfQorCisjIHNzaAorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2RpcmVudF9oYXZlX3NwYWNlX2RfbmFtZT15ZXN9CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPXllc30KKworIyBjb3JldXRpbHMKK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE5fQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgbmFubworYWNfY3ZfcmVnZXhlY19zZWdmYXVsdF9lbXB0eXN0cj0ke2FjX2N2X3JlZ2V4ZWNfc2VnZmF1bHRfZW1wdHlzdHI9bm99CituYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPSR7bmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj1ub30KKworIyBzY3JlZW4KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQorCithY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9JHthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzfQorYWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPSR7YWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9bm99CisKKyMgc29jYXQKK2FjX2N2X2lzcGVlZF9vZmZzZXQ9JHthY19jdl9pc3BlZWRfb2Zmc2V0PTEzfQorc2NfY3ZfdGVybWlvc19pc3BlZWQ9JHtzY19jdl90ZXJtaW9zX2lzcGVlZD15ZXN9CisKKyMgbGlua3MKK2FjX2N2X2xpYl9wbmdfcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdD0ke2FjX2N2X2xpYl9wbmdfcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdD15ZXN9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVEVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VURVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFVJRFg9JHtzYW1iYV9jdl9VU0VfU0VUVUlEWD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRT0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PXllc30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KK3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPSR7c2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9eWVzfQorc2FtYmFfY3ZfU1RBVF9TVEFUVkZTNjQ9JHtzYW1iYV9jdl9TVEFUX1NUQVRWRlM2ND15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9eWVzfQorc2FtYmFfY3ZfU0laRU9GX0lOT19UPSR7c2FtYmFfY3ZfU0laRU9GX0lOT19UPXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PXllc30KKworIyBkYgorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KKworIyBwaHAKK2FjX2N2X3ByZWFkPSR7YWNfY3ZfcHJlYWQ9bm99CithY19jdl9wd3JpdGU9JHthY19jdl9wd3JpdGU9bm99CitwaHBfY3ZfbGliX2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9JHtwaHBfY3ZfbGliX2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9eWVzfQorCisjIGdsaWIKK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT15ZXN9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD15ZXN9CisKKyMgZXR0ZXJjYXAKK2V0dGVyY2FwX2N2X3R5cGVfc29ja2xlbl90PSR7ZXR0ZXJjYXBfY3ZfdHlwZV9zb2NrbGVuX3Q9eWVzfQorCisjIGxpYmVzbXRwCithY3hfd29ya2luZ19zbnByaW50Zj0ke2FjeF93b3JraW5nX3NucHJpbnRmPXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBnbGliIDIuMAorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9JHtnbGliX2N2X3NpemVvZl9pbnRtYXhfdD04fQorZ2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CitnbGliX2N2X3NpemVvZl9zaXplX3Q9JHtnbGliX2N2X3NpemVvZl9zaXplX3Q9NH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N5c191c2VfcGlkX25pY2VuZXNzX3N1cnJvZ2F0ZT0ke2dsaWJfY3Zfc3lzX3VzZV9waWRfbmljZW5lc3Nfc3Vycm9nYXRlPXllc30KKworZ2xpYl9jdl9zdHJsY3B5PSR7Z2xpYl9jdl9zdHJsY3B5PW5vfQorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9eWVzfQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9NAorCisjIGh0dHBwYworYWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz0ke2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9bm99CisKKyMgamlrZXMKK2FjX2N2X3NpemVvZl93Y2hhcl90PTQKKworIyBsZnRwCithY19jdl9uZWVkX3RyaW89JHthY19jdl9uZWVkX3RyaW89bm99CitsZnRwX2N2X3ZhX3ZhbF9jb3B5PSR7bGZ0cF9jdl92YV92YWxfY29weT15ZXN9CisKKyMgZWRiCitkYl9jdl9zcGlubG9ja3M9JHtkYl9jdl9zcGlubG9ja3M9bm99CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9Citjb21wYXRfY3ZfZnVuY19iYXNlbmFtZV93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX2Jhc2VuYW1lX3dvcmtzPW5vfQorY29tcGF0X2N2X2Z1bmNfZGlybmFtZV93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX2Rpcm5hbWVfd29ya3M9bm99CisKKyMgc2xybgorc2xybl9jdl92YV92YWxfY29weT0ke3Nscm5fY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9eWVzCisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT00CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKKyMgY3ZzCitjdnNfY3ZfZnVuY19wcmludGZfcHRyPSR7Y3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj15ZXN9CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9eWVzfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9bWlzc2luZ30KKworIyBteXNxbAorbXlzcWxfY3ZfZnVuY19hdG9taWNfc3ViPSR7bXlzcWxfY3ZfZnVuY19hdG9taWNfc3ViPW5vfQorbXlzcWxfY3ZfZnVuY19hdG9taWNfYWRkPSR7bXlzcWxfY3ZfZnVuY19hdG9taWNfYWRkPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIGZubWF0Y2gKK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyMgcnN5bmMKK3JzeW5jX2N2X0hBVkVfQlJPS0VOX0xBUkdFRklMRT0ke3JzeW5jX2N2X0hBVkVfQlJPS0VOX0xBUkdFRklMRT1ub30KK3JzeW5jX2N2X0hBVkVfU09DS0VUUEFJUj0ke3JzeW5jX2N2X0hBVkVfU09DS0VUUEFJUj15ZXN9Cityc3luY19jdl9IQVZFX0xPTkdMT05HPSR7cnN5bmNfY3ZfSEFWRV9MT05HTE9ORz15ZXN9Cityc3luY19jdl9IQVZFX09GRjY0X1Q9JHtyc3luY19jdl9IQVZFX09GRjY0X1Q9bm99Cityc3luY19jdl9IQVZFX1NIT1JUX0lOT19UPSR7cnN5bmNfY3ZfSEFWRV9TSE9SVF9JTk9fVD1ub30KK3JzeW5jX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3JzeW5jX2N2X0hBVkVfVU5TSUdORURfQ0hBUj1ub30KK3JzeW5jX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9JHtyc3luY19jdl9IQVZFX0JST0tFTl9SRUFERElSPW5vfQorcnN5bmNfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtyc3luY19jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9Cityc3luY19jdl9IQVZFX0M5OV9WU05QUklOVEY9JHtyc3luY19jdl9IQVZFX0M5OV9WU05QUklOVEY9eWVzfQorcnN5bmNfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3JzeW5jX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorcnN5bmNfY3ZfUkVQTEFDRV9JTkVUX05UT0E9JHtyc3luY19jdl9SRVBMQUNFX0lORVRfTlRPQT1ub30KK3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9BVE9OPSR7cnN5bmNfY3ZfUkVQTEFDRV9JTkVUX0FUT049bm99CisKKyMgbGlieGZjZTR1dGlsCit3aXRoX2Jyb2tlbl9wdXRlbnY9JHt3aXRoX2Jyb2tlbl9wdXRlbnY9bm99CisKKyMgY2xhbWF2CitjbGFtYXZfYXZfZnVuY193b3JraW5nX3NucHJpbnRmX2xvbmc9JHtjbGFtYXZfYXZfZnVuY193b3JraW5nX3NucHJpbnRmX2xvbmc9eWVzfQorY2xhbWF2X2F2X2hhdmVfaW5fcG9ydF90PSR7Y2xhbWF2X2F2X2hhdmVfaW5fcG9ydF90PXllc30KK2NsYW1hdl9hdl9oYXZlX2luX2FkZHJfdD0ke2NsYW1hdl9hdl9oYXZlX2luX2FkZHJfdD15ZXN9CithY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPSR7YWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD15ZXN9CisKKyMgbGlibmV0IAorYWNfY3ZfbGJsX3VuYWxpZ25lZF9mYWlsPSR7YWNfY3ZfbGJsX3VuYWxpZ25lZF9mYWlsPW5vfQorYWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD0ke2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9eWVzfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvc3BhcmMtbGludXggYi95b2N0by1wb2t5L21ldGEvc2l0ZS9zcGFyYy1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWQwZDlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvc3BhcmMtbGludXgKQEAgLTAsMCArMSw0OCBAQAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vCithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9CithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9OH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2lnbmVkX2NoYXI9JHthY19jdl9zaXplb2Zfc2lnbmVkX2NoYXI9MX0KKworYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTh9CitsaWJjX2N2X21sb25nX2RvdWJsZV8xMjhpYm09JHtsaWJjX2N2X21sb25nX2RvdWJsZV8xMjhpYm09eWVzfQorbGliY19jdl9tbG9uZ19kb3VibGVfMTI4PSR7bGliY19jdl9tbG9uZ19kb3VibGVfMTI4PXllc30KK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19kb3VibGU9NAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9eWVzfQorCisKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CisKK2FjX2N2X3RpbWVfcl90eXBlPSR7YWNfY3ZfdGltZV9yX3R5cGU9UE9TSVh9Citjb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PSR7Y29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD15ZXN9CisKKyMgbWluaWNvbQorYW1fY3Zfc3lzX3Bvc2l4X3Rlcm1pb3M9JHthbV9jdl9zeXNfcG9zaXhfdGVybWlvcz15ZXN9CisKKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworI2dsaWIKK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9IAorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorCisjbGludXgKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS94MzItbGludXggYi95b2N0by1wb2t5L21ldGEvc2l0ZS94MzItbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZlZTY4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL3gzMi1saW51eApAQCAtMCwwICsxLDEwIEBACisjIGdlbmVyYWwKK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0xNn0KK2FjX2N2X3NpemVvZl9vZmZfdD0ke2FjX2N2X3NpemVvZl9vZmZfdD04fQorYWNfY3Zfc2l6ZW9mX2lub190PSR7YWNfY3Zfc2l6ZW9mX2lub190PTh9CithY19jdl9zaXplb2ZfZGV2X3Q9JHthY19jdl9zaXplb2ZfZGV2X3Q9OH0KK2FjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPSR7YWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9NjR9CithY19jdl9hbGlnbm9mX2RvdWJsZT04CisKKyMgZ2xpYgorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTMyfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUveDg2XzY0LWxpbnV4IGIveW9jdG8tcG9reS9tZXRhL3NpdGUveDg2XzY0LWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3M2E5MDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS94ODZfNjQtbGludXgKQEAgLTAsMCArMSwxMzYgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfdmFfdmFsX2NvcHk9JHthY19jdl92YV92YWxfY29weT1ub30KK2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz0ke2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz15ZXN9CithY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorYWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPSR7YWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9bm99CithY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PSR7YWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD15ZXN9CithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorYWNfY3ZfbmVlZF90cmlvPSR7YWNfY3ZfbmVlZF90cmlvPW5vfQorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PTR9CithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTh9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPTh9CithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9MTZ9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9OH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfb2ZmX3Q9JHthY19jdl9zaXplb2Zfb2ZmX3Q9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9OH0KK2FjX2N2X3NpemVvZl91aWRfdD0ke2FjX2N2X3NpemVvZl91aWRfdD00fQorYWNfY3Zfc2l6ZW9mX2dpZF90PSR7YWNfY3Zfc2l6ZW9mX2dpZF90PTR9CithY19jdl9zaXplb2ZfaW5vX3Q9JHthY19jdl9zaXplb2ZfaW5vX3Q9OH0KK2FjX2N2X3NpemVvZl9kZXZfdD0ke2FjX2N2X3NpemVvZl9kZXZfdD04fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9OH0KK2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9JHthY19jdl9zdHJlcnJvcl9yX1NVU3YzPW5vfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPXllc30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTQwfQorZ2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9JHtnbGliX2N2X3NpemVvZl9pbnRtYXhfdD04fQorZ2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTh9CitnbGliX2N2X3NpemVvZl9zaXplX3Q9JHtnbGliX2N2X3NpemVvZl9zaXplX3Q9OH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTh9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD15ZXN9CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9bm99CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04CisKK25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9JHtuYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPW5vfQorc2FtYmFfY3ZfSEFWRV9WQV9DT1BZPSR7c2FtYmFfY3ZfSEFWRV9WQV9DT1BZPXllc30KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyNnY2MKK2FjX2N2X2xpYl9tX3Npbj0ke2FjX2N2X2xpYl9tX3Npbj15ZXN9CisKKyNvcmJpdAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGwKKworIyBiYXNoCitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT04CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKK2xmX2N2X3NhbmVfcmVhbGxvYz15ZXMKK2FzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9JHthc19jdl91bmFsaWduZWRfYWNjZXNzPXllc30KKworI3VuZnMzCituZnNkX2N2X2Jyb2tlbl9zZXRmc3VpZD0ke25mc2RfY3ZfYnJva2VuX3NldGZzdWlkPTB9CituZnNkX2N2X2Z1bmNfc3RhdGZzPSR7bmZzZF9jdl9mdW5jX3N0YXRmcz1zdGF0ZnMyX2JzaXplfQorbmZzZF9jdl9ic2Rfc2lnbmFscz0ke25mc2RfY3ZfYnNkX3NpZ25hbHM9eWVzfQorCisjYXByCithcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPSR7YXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz15ZXN9CisKKyMgbGZ0cAorbGZ0cF9jdl92YV92YWxfY29weT0ke2xmdHBfY3ZfdmFfdmFsX2NvcHk9bm99CisKKyMgc2xybgorc2xybl9jdl92YV92YWxfY29weT0ke3Nscm5fY3ZfdmFfdmFsX2NvcHk9bm99CisKKyMgZ3J1YgorYWNfY3ZfZnVuY19fX2FzaGxkaTM9bm8KK2FjX2N2X2Z1bmNfX19hc2hyZGkzPW5vCithY19jdl9mdW5jX19fYnN3YXBkaTI9bm8KK2FjX2N2X2Z1bmNfX19ic3dhcHNpMj1ubworYWNfY3ZfZnVuY19fX2xzaHJkaTM9bm8KK2FjX2N2X2Z1bmNfX190cmFtcG9saW5lX3NldHVwPW5vCithY19jdl9mdW5jX19fdWNtcGRpMj1ubworYWNfY3ZfZnVuY19fcmVzdGdwcl8xNF94PW5vCisKKyMgY3ZzCitjdnNfY3ZfZnVuY19wcmludGZfcHRyPSR7Y3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj15ZXN9CisKKyMgYXQtc3BpMi1jb3JlCithY19jdl9hbGlnbm9mX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9kYmluZF9wb2ludGVyPTgKK2FjX2N2X2FsaWdub2ZfZGJpbmRfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfZGJ1c19ib29sX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDE2X3Q9MgorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDMyX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDY0X3Q9OAorYWNfY3ZfYWxpZ25vZl9kb3VibGU9OApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUveDg2XzY0LWxpbnV4LXVjbGliYyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL3g4Nl82NC1saW51eC11Y2xpYmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQyNjlmNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL3g4Nl82NC1saW51eC11Y2xpYmMKQEAgLTAsMCArMSw5MSBAQAorIyBnZW5lcmFsCithY19jdl92YV92YWxfY29weT0ke2FjX2N2X3ZhX3ZhbF9jb3B5PW5vfQorYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPSR7YWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc30KK2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CithY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9JHthY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD1ub30KK2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9JHthY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PXllc30KK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CithY19jdl9uZWVkX3RyaW89JHthY19jdl9uZWVkX3RyaW89bm99CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX19faW50NjQ9JHthY19jdl9zaXplb2ZfX19pbnQ2ND0wfQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTE2fQorYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTh9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9OH0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTh9CithY19jdl9zdHJlcnJvcl9yX1NVU3YzPSR7YWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz1ub30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPXllc30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTQwfQorZ2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9JHtnbGliX2N2X3NpemVvZl9pbnRtYXhfdD04fQorZ2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTh9CitnbGliX2N2X3NpemVvZl9zaXplX3Q9JHtnbGliX2N2X3NpemVvZl9zaXplX3Q9OH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTh9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD15ZXN9CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9bm99CituYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPSR7bmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj1ub30KK3NhbWJhX2N2X0hBVkVfVkFfQ09QWT0ke3NhbWJhX2N2X0hBVkVfVkFfQ09QWT15ZXN9CitzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9eWVzfQorc2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD0ke3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPSR7c2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPXllc30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIGdsaWItMi4wCitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT00CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGZ0cAorbGZ0cF9jdl92YV92YWxfY29weT0ke2xmdHBfY3ZfdmFfdmFsX2NvcHk9bm99CisKKyMgc2xybgorc2xybl9jdl92YV92YWxfY29weT0ke3Nscm5fY3ZfdmFfdmFsX2NvcHk9bm99CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L29lLWluaXQtYnVpbGQtZW52IGIveW9jdG8tcG9reS9vZS1pbml0LWJ1aWxkLWVudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZmVlNWY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9vZS1pbml0LWJ1aWxkLWVudgpAQCAtMCwwICsxLDYyIEBACisjIS9iaW4vc2gKKworIyBPRSBCdWlsZCBFbnZpcm9ubWVudCBTZXR1cCBTY3JpcHQKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTEgTGludXggRm91bmRhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKyMKKyMgTm9ybWFsbHkgdGhpcyBpcyBjYWxsZWQgYXMgJy4gLi9vZS1pbml0LWJ1aWxkLWVudiBidWlsZGRpcicKKyMKKyMgVGhpcyB3b3JrcyBpbiBtb3N0IHNoZWxscyAobm90IGRhc2gpLCBidXQgbm90IGFsbCBvZiB0aGVtIHBhc3MgYXJnMSB3aGVuCisjIGJlaW5nIHNvdXJjZWQuICAgVG8gd29ya2Fyb3VuZCB0aGUgc2hlbGwgbGltaXRhdGlvbiB1c2UgInNldCBhcmcxIiBwcmlvciAKKyMgdG8gc291cmNpbmcgdGhpcyBzY3JpcHQuCisjCitpZiBbIC1uICIkQkFTSF9TT1VSQ0UiIF07IHRoZW4KKyAgIE9FUk9PVD0iYGRpcm5hbWUgJEJBU0hfU09VUkNFYCIKK2VsaWYgWyAtbiAiJFpTSF9OQU1FIiBdOyB0aGVuCisgICBPRVJPT1Q9ImBkaXJuYW1lICQwYCIKK2Vsc2UKKyAgIE9FUk9PVD0iYHB3ZGAiCitmaQoraWYgWyAtbiAiJEJCU0VSVkVSIiBdOyB0aGVuCisgICB1bnNldCBCQlNFUlZFUgorZmkKK1RISVNfU0NSSVBUPSRPRVJPT1Qvb2UtaW5pdC1idWlsZC1lbnYKKworaWYgWyAteiAiJFpTSF9OQU1FIiBdICYmIFsgIiQwIiA9ICIkVEhJU19TQ1JJUFQiIF07IHRoZW4KKyAgIGVjaG8gIkVycm9yOiBUaGlzIHNjcmlwdCBuZWVkcyB0byBiZSBzb3VyY2VkLiBQbGVhc2UgcnVuIGFzICcuICRUSElTX1NDUklQVCciCisgICBleGl0IDEKK2ZpCisKK09FUk9PVD1gcmVhZGxpbmsgLWYgIiRPRVJPT1QiYAorZXhwb3J0IE9FUk9PVAorLiAkT0VST09UL3NjcmlwdHMvb2UtYnVpbGRlbnYtaW50ZXJuYWwgJiYgXAorICAgICAkT0VST09UL3NjcmlwdHMvb2Utc2V0dXAtYnVpbGRkaXIgJiYgXAorICAgICBbIC1uICIkQlVJTERESVIiIF0gJiYgY2QgIiRCVUlMRERJUiIKK3Vuc2V0IE9FUk9PVAordW5zZXQgQkJQQVRICit1bnNldCBUSElTX1NDUklQVAorCisjIFNodXRkb3duIGFueSBiaXRiYWtlIHNlcnZlciBpZiB0aGUgQkJTRVJWRVIgdmFyaWFibGUgaXMgbm90IHNldAoraWYgWyAteiAiJEJCU0VSVkVSIiBdICYmIFsgLWYgYml0YmFrZS5sb2NrIF0gOyB0aGVuCisgICAgZ3JlcCAiOiIgYml0YmFrZS5sb2NrID4gL2Rldi9udWxsICYmIEJCU0VSVkVSPWBjYXQgYml0YmFrZS5sb2NrYCBiaXRiYWtlIC0tc3RhdHVzLW9ubHkKKyAgICBpZiBbICQ/ID0gMCBdIDsgdGhlbgorCWVjaG8gIlNodXR0aW5nIGRvd24gYml0YmFrZSBtZW1vcnkgcmVzaWRlbnQgc2VydmVyIHdpdGggYml0YmFrZSAtbSIKKwlCQlNFUlZFUj1gY2F0IGJpdGJha2UubG9ja2AgYml0YmFrZSAtbQorICAgIGZpCitmaQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L29lLWluaXQtYnVpbGQtZW52LW1lbXJlcyBiL3lvY3RvLXBva3kvb2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxZGM0ZmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L29lLWluaXQtYnVpbGQtZW52LW1lbXJlcwpAQCAtMCwwICsxLDg0IEBACisjIS9iaW4vc2gKKworIyBPRSBCdWlsZCBFbnZpcm9ubWVudCBTZXR1cCBTY3JpcHQKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTEgTGludXggRm91bmRhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKyMKKyMgTm9ybWFsbHkgdGhpcyBpcyBjYWxsZWQgYXMgJy4gLi9vZS1pbml0LWJ1aWxkLWVudiBidWlsZGRpciA8cG9ydG51bWJlcj4gPGJ1aWxkZGlyPicKKyMKKyMgVGhpcyB3b3JrcyBpbiBtb3N0IHNoZWxscyAobm90IGRhc2gpLCBidXQgbm90IGFsbCBvZiB0aGVtIHBhc3MgYXJnMSB3aGVuCisjIGJlaW5nIHNvdXJjZWQuICAgVG8gd29ya2Fyb3VuZCB0aGUgc2hlbGwgbGltaXRhdGlvbiB1c2UgInNldCBhcmcxIiBwcmlvciAKKyMgdG8gc291cmNpbmcgdGhpcyBzY3JpcHQuCisjCitpZiBbIC16ICIkMSIgXTsgdGhlbgorICAgIGVjaG8gIk5vIHBvcnQgc3BlY2lmaWVkLCB1c2luZyBkeW5hbWljYWxseSBzZWxlY3RlZCBwb3J0IgorICAgIHBvcnQ9LTEKK2Vsc2UKKyAgICBwb3J0PSQxCisgICAgc2hpZnQKK2ZpCisKK2lmIFsgLW4gIiRCQVNIX1NPVVJDRSIgXTsgdGhlbgorICBPRVJPT1Q9ImBkaXJuYW1lICRCQVNIX1NPVVJDRWAiCitlbGlmIFsgLW4gIiRaU0hfTkFNRSIgXTsgdGhlbgorICBPRVJPT1Q9ImBkaXJuYW1lICQwYCIKK2Vsc2UKKyAgT0VST09UPSJgcHdkYCIKK2ZpCitpZiBbIC1uICIkQkJTRVJWRVIiIF07IHRoZW4KKyAgdW5zZXQgQkJTRVJWRVIKK2ZpCisKK1RISVNfU0NSSVBUPSRPRVJPT1Qvb2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzCitpZiBbIC16ICIkWlNIX05BTUUiIF0gJiYgWyAieCQwIiA9ICJ4JFRISVNfU0NSSVBUIiBdOyB0aGVuCisgICBlY2hvICJFcnJvcjogVGhpcyBzY3JpcHQgbmVlZHMgdG8gYmUgc291cmNlZC4gUGxlYXNlIHJ1biBhcyAnLiAkVEhJU19TQ1JJUFQnIgorICAgZXhpdCAxCitmaQorCitPRVJPT1Q9YHJlYWRsaW5rIC1mICIkT0VST09UImAKK2V4cG9ydCBPRVJPT1QKKy4gJE9FUk9PVC9zY3JpcHRzL29lLWJ1aWxkZW52LWludGVybmFsICYmIFwKKyAgICAkT0VST09UL3NjcmlwdHMvb2Utc2V0dXAtYnVpbGRkaXIgJiYgXAorICAgIFsgLW4gIiRCVUlMRERJUiIgXSAmJiBjZCAkQlVJTERESVIKK3Vuc2V0IE9FUk9PVAordW5zZXQgQkJQQVRICit1bnNldCBUSElTX1NDUklQVAorCityZXM9MQoraWYgWyAtZSBiaXRiYWtlLmxvY2sgXSAmJiBncmVwIDogYml0YmFrZS5sb2NrID4gL2Rldi9udWxsIDsgdGhlbgorICAgIEJCU0VSVkVSPWBjYXQgYml0YmFrZS5sb2NrYCBiaXRiYWtlIC0tc3RhdHVzLW9ubHkKKyAgICByZXM9JD8KK2ZpCisKK2lmIFsgJHJlcyAhPSAwIF0gOyB0aGVuCisgICAgYml0YmFrZSAtLXNlcnZlci1vbmx5IC10IHhtbHJwYyAtQiBsb2NhbGhvc3Q6JHBvcnQKK2ZpCisKK2lmIFsgJHBvcnQgPSAtMSBdIDsgdGhlbgorICAgIGV4cG9ydCBCQlNFUlZFUj1sb2NhbGhvc3Q6LTEKKyAgICBlY2hvICJCaXRiYWtlIHNlcnZlciBzdGFydGVkIG9uIGRlbWFuZCBhcyBuZWVkZWQsIHVzZSBiaXRiYWtlIC1tIHRvIHNodXQgaXQgZG93biIKK2Vsc2UKKyAgICBleHBvcnQgQkJTRVJWRVI9YGNhdCBiaXRiYWtlLmxvY2tgCisKKyAgICBpZiBbICRyZXMgPSAwIF0gOyB0aGVuCisJZWNobyAiVXNpbmcgZXhpc3RpbmcgYml0YmFrZSBzZXJ2ZXIgYXQ6ICRCQlNFUlZFUiwgdXNlIGJpdGJha2UgLW0gdG8gc2h1dCBpdCBkb3duIgorICAgIGVsc2UKKwllY2hvICJCaXRiYWtlIHNlcnZlciBzdGFydGVkIGF0OiAkQkJTRVJWRVIsIHVzZSBiaXRiYWtlIC1tIHRvIHNodXQgaXQgZG93biIKKyAgICBmaQorICAgIHVuc2V0IHJlcworZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9SRUFETUUgYi95b2N0by1wb2t5L3NjcmlwdHMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiOGQxMjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvUkVBRE1FCkBAIC0wLDAgKzEgQEAKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIFZhcmlvdXMgdXNlZnVsIHNjcmlwdHMgZm9yIHdvcmtpbmcgd2l0aCBPRSBidWlsZHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9iaXRiYWtlLXByc2Vydi10b29sIGIveW9jdG8tcG9reS9zY3JpcHRzL2JpdGJha2UtcHJzZXJ2LXRvb2wKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjhjMjQxNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9iaXRiYWtlLXByc2Vydi10b29sCkBAIC0wLDAgKzEsMTAzIEBACisjIS91c3IvYmluL2VudiBiYXNoCisKK2hlbHAgKCkKK3sKKyAgICBiYXNlPWBiYXNlbmFtZSAkMGAKKyAgICBlY2hvIC1lICJVc2FnZTogJGJhc2UgY29tbWFuZCIKKyAgICBlY2hvICJBdmFsaWFibGUgY29tbWFuZHM6IgorICAgIGVjaG8gLWUgIlx0ZXhwb3J0IDxmaWxlLmNvbmY+OiBleHBvcnQgYW5kIGxvY2sgZG93biB0aGUgQVVUT1BSIHZhbHVlcyBmcm9tIHRoZSBQUiBzZXJ2aWNlIGludG8gYSBmaWxlIGZvciByZWxlYXNlLiIKKyAgICBlY2hvIC1lICJcdGltcG9ydCA8ZmlsZS5jb25mPjogaW1wb3J0IHRoZSBBVVRPUFIgdmFsdWVzIGZyb20gdGhlIGV4cG9ydGVkIGZpbGUgaW50byB0aGUgUFIgc2VydmljZS4iCit9CisKK2NsZWFuX2NhY2hlKCkKK3sKKyAgICBzPWBiaXRiYWtlIC1lIHwgZ3JlcCBeQ0FDSEU9IHwgY3V0IC1mMiAtZFwiYAorICAgIGlmIFsgIngke3N9IiAhPSAieCIgXTsgdGhlbgorICAgICAgICBybSAtcmYgJHtzfQorICAgIGZpCit9CisKK2RvX2V4cG9ydCAoKQoreworICAgIGZpbGU9JDEKKyAgICBbICJ4JHtmaWxlfSIgPT0gIngiIF0gJiYgaGVscCAmJiBleGl0IDEKKyAgICBybSAtZiAke2ZpbGV9CisKKyAgICBjbGVhbl9jYWNoZQorICAgIGJpdGJha2UgLVIgY29uZi9wcmV4cG9ydC5jb25mIC1wCisgICAgcz1gYml0YmFrZSAtUiBjb25mL3ByZXhwb3J0LmNvbmYgLWUgfCBncmVwIF5QUlNFUlZfRFVNUEZJTEU9IHwgY3V0IC1mMiAtZFwiYAorICAgIGlmIFsgIngke3N9IiAhPSAieCIgXTsKKyAgICB0aGVuCisgICAgICAgWyAtZSAkcyBdICYmIG12IC1mICRzICRmaWxlICYmIGVjaG8gIkV4cG9ydGluZyB0byBmaWxlICRmaWxlIHN1Y2NlZWRlZCEiCisgICAgICAgcmV0dXJuIDAKKyAgICBmaQorICAgIGVjaG8gIkV4cG9ydGluZyB0byBmaWxlICRmaWxlIGZhaWxlZCEiCisgICAgcmV0dXJuIDEKK30KKworZG9faW1wb3J0ICgpCit7CisgICAgZmlsZT0kMQorICAgIFsgIngke2ZpbGV9IiA9PSAieCIgXSAmJiBoZWxwICYmIGV4aXQgMQorCisgICAgY2xlYW5fY2FjaGUKKyAgICBiaXRiYWtlIC1SIGNvbmYvcHJpbXBvcnQuY29uZiAtUiAkZmlsZSAtcAorICAgIHJldD0kPworICAgIFsgJHJldCAtZXEgMCBdICYmIGVjaG8gIkltcG9ydGluZyBmcm9tIGZpbGUgJGZpbGUgc3VjY2VlZGVkISIgfHwgZWNobyAiSW1wb3J0aW5nIGZyb20gZmlsZSAkZmlsZSBmYWlsZWQhIgorICAgIHJldHVybiAkcmV0Cit9CisKK2RvX21pZ3JhdGVfbG9jYWxjb3VudCAoKQoreworICAgIGRmPWBiaXRiYWtlIC1SIGNvbmYvbWlncmF0ZV9sb2NhbGNvdW50LmNvbmYgLWUgfCBcCisgICAgICAgICAgICAgICAgZ3JlcCBeTE9DQUxDT1VOVF9EVU1QRklMRT0gfCBjdXQgLWYyIC1kXCJgCisgICAgaWYgWyAieCR7ZGZ9IiA9PSAieCIgXTsKKyAgICB0aGVuCisgICAgICAgIGVjaG8gIkxPQ0FMQ09VTlRfRFVNUEZJTEUgaXMgbm90IGRlZmluZWQhIgorICAgICAgICByZXR1cm4gMQorICAgIGZpCisKKyAgICBybSAtcmYgJGRmCisgICAgY2xlYW5fY2FjaGUKKyAgICBlY2hvICJFeHBvcnRpbmcgTE9DQUxDT1VOVCB0byBBVVRPSU5Dcy4uLiIKKyAgICBiaXRiYWtlIC1SIGNvbmYvbWlncmF0ZV9sb2NhbGNvdW50LmNvbmYgLXAKKyAgICBbICEgJD8gLWVxIDAgXSAmJiBlY2hvICJFeHBvcnRpbmcgdG8gZmlsZSAkZGYgZmFpbGVkISIgJiYgZXhpdCAxCisKKyAgICBpZiBbIC1lICRkZiBdOworICAgIHRoZW4KKyAgICAgICAgZWNobyAiRXhwb3J0aW5nIHRvIGZpbGUgJGRmIHN1Y2NlZWRlZCEiCisgICAgZWxzZQorICAgICAgICBlY2hvICJFeHBvcnRpbmcgdG8gZmlsZSAkZGYgZmFpbGVkISIKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICAKKyAgICBlY2hvICJJbXBvcnRpbmcgZ2VuZXJhdGVkIEFVVE9JTkMgZW50cmllcy4uLiIKKyAgICBbIC1lICRkZiBdICYmIGRvX2ltcG9ydCAkZGYKKworICAgIGlmIFsgISAkPyAtZXEgMCBdCisgICAgdGhlbgorICAgICAgICBlY2hvICJNaWdyYXRpb24gZnJvbSBMT0NBTENPVU5UIHRvIEFVVE9JTkNzIGZhaWxlZCEiCisgICAgICAgIHJldHVybiAxCisgICAgZmkKKworICAgIGVjaG8gIk1pZ3JhdGlvbiBmcm9tIExPQ0FMQ09VTlQgdG8gQVVUT0lOQ3Mgc3VjY2VlZGVkISIKKyAgICByZXR1cm4gMAorfQorCitbICQjIC1lcSAwIF0gJiYgaGVscCAgJiYgZXhpdCAxCisKK2Nhc2UgJDEgaW4KK2V4cG9ydCkKKyAgICBkb19leHBvcnQgJDIKKyAgICA7OworaW1wb3J0KQorICAgIGRvX2ltcG9ydCAkMgorICAgIDs7CittaWdyYXRlX2xvY2FsY291bnQpCisgICAgZG9fbWlncmF0ZV9sb2NhbGNvdW50CisgICAgOzsKKyopCisgICAgaGVscAorICAgIGV4aXQgMQorICAgIDs7Citlc2FjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvYml0YmFrZS13aGF0Y2hhbmdlZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9iaXRiYWtlLXdoYXRjaGFuZ2VkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU1Y2ZlNGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvYml0YmFrZS13aGF0Y2hhbmdlZApAQCAtMCwwICsxLDMzOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorCisjIENvcHlyaWdodCAoYykgMjAxMyBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgZ2V0b3B0CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgcmUKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IHN1YnByb2Nlc3MKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorCitzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpKQorbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKK3N5cy5wYXRoID0gc3lzLnBhdGggKyBbbGliX3BhdGhdCisKK2ltcG9ydCBzY3JpcHRwYXRoCisKKyMgRmlndXJlIG91dCB3aGVyZSBpcyB0aGUgYml0YmFrZS9saWIvYmIgc2luY2Ugd2UgbmVlZCBiYi5zaWdnZW4gYW5kIGJiLnByb2Nlc3MKK2JpdGJha2VwYXRoID0gc2NyaXB0cGF0aC5hZGRfYml0YmFrZV9saWJfcGF0aCgpCitpZiBub3QgYml0YmFrZXBhdGg6CisgICAgc3lzLnN0ZGVyci53cml0ZSgiVW5hYmxlIHRvIGZpbmQgYml0YmFrZSBieSBzZWFyY2hpbmcgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGlzIHNjcmlwdCBvciBQQVRIXG4iKQorICAgIHN5cy5leGl0KDEpCisKK2ltcG9ydCBiYi5zaWdnZW4KK2ltcG9ydCBiYi5wcm9jZXNzCisKKyMgTWF0Y2ggdGhlIHN0YW1wJ3MgZmlsZW5hbWUKKyMgZ3JvdXAoMSk6IFBFX1BWIChtYXkgbm8gUEUpCisjIGdyb3VwKDIpOiBQUgorIyBncm91cCgzKTogVEFTSworIyBncm91cCg0KTogSEFTSAorc3RhbXBfcmUgPSByZS5jb21waWxlKCIoP1A8cHY+LiopLSg/UDxwcj5yXGQrKVwuKD9QPHRhc2s+ZG9fXHcrKVwuKD9QPGhhc2g+W15cLl0qKSIpCitzaWdkYXRhX3JlID0gcmUuY29tcGlsZSgiLipcLnNpZ2RhdGFcLi4qIikKKworZGVmIGdlbl9kaWN0KHN0YW1wcyk6CisgICAgIiIiCisgICAgR2VuZXJhdGUgdGhlIGRpY3QgZnJvbSB0aGUgc3RhbXBzIGRpci4KKyAgICBUaGUgb3V0cHV0IGRpY3QgZm9ybWF0IGlzOgorICAgIHtmYWtlX2Y6IHtwbjogUE4sIHB2OiBQViwgcHI6IFBSLCB0YXNrOiBUQVNLLCBwYXRoOiBQQVRIfX0KKyAgICBXaGVyZToKKyAgICBmYWtlX2Y6IHB2ICsgdGFzayArIGhhc2gKKyAgICBwYXRoOiB0aGUgcGF0aCB0byB0aGUgc3RhbXAgZmlsZQorICAgICIiIgorICAgICMgVGhlIG1lbWJlciBvZiB0aGUgc3ViIGRpY3QgKEEgInBhdGgiIHdpbGwgYmUgYXBwZW5kZWQgYmVsb3cpCisgICAgc3ViX21lbSA9ICgicHYiLCAicHIiLCAidGFzayIpCisgICAgZCA9IHt9CisgICAgZm9yIGRpcnBhdGgsIF8sIGZpbGVzIGluIG9zLndhbGsoc3RhbXBzKToKKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAjIFRoZSAiYml0YmFrZSAtUyIgd291bGQgZ2VuZXJhdGUgIi5zaWdkYXRhIiwgYnV0IG5vICJfc2V0c2NlbmUiLgorICAgICAgICAgICAgZmFrZV9mID0gcmUuc3ViKCdfc2V0c2NlbmUuJywgJy4nLCBmKQorICAgICAgICAgICAgZmFrZV9mID0gcmUuc3ViKCcuc2lnZGF0YScsICcnLCBmYWtlX2YpCisgICAgICAgICAgICBzdWJkaWN0ID0ge30KKyAgICAgICAgICAgIHRtcCA9IHN0YW1wX3JlLm1hdGNoKGZha2VfZikKKyAgICAgICAgICAgIGlmIHRtcDoKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiBzdWJfbWVtOgorICAgICAgICAgICAgICAgICAgICBzdWJkaWN0W2ldID0gdG1wLmdyb3VwKGkpCisgICAgICAgICAgICAgICAgaWYgbGVuKHN1YmRpY3QpICE9IDA6CisgICAgICAgICAgICAgICAgICAgIHBuID0gb3MucGF0aC5iYXNlbmFtZShkaXJwYXRoKQorICAgICAgICAgICAgICAgICAgICBzdWJkaWN0WydwbiddID0gcG4KKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgcGF0aCB3aWxsIGJlIHVzZWQgYnkgb3Muc3RhdCgpIGFuZCBiYi5zaWdnZW4KKyAgICAgICAgICAgICAgICAgICAgc3ViZGljdFsncGF0aCddID0gZGlycGF0aCArICIvIiArIGYKKyAgICAgICAgICAgICAgICAgICAgZmFrZV9mID0gdG1wLmdyb3VwKCdwdicpICsgdG1wLmdyb3VwKCd0YXNrJykgKyB0bXAuZ3JvdXAoJ2hhc2gnKQorICAgICAgICAgICAgICAgICAgICBkW2Zha2VfZl0gPSBzdWJkaWN0CisgICAgcmV0dXJuIGQKKworIyBSZS1jb25zdHJ1Y3QgdGhlIGRpY3QKK2RlZiByZWNvbl9kaWN0KGRpY3RfaW4pOgorICAgICIiIgorICAgIFRoZSBvdXRwdXQgZGljdCBmb3JtYXQgaXM6CisgICAge3BuX3Rhc2s6IHtwdjogUFYsIHByOiBQUiwgcGF0aDogUEFUSH19CisgICAgIiIiCisgICAgZGljdF9vdXQgPSB7fQorICAgIGZvciBrIGluIGRpY3RfaW4ua2V5cygpOgorICAgICAgICBzdWJkaWN0ID0ge30KKyAgICAgICAgIyBUaGUga2V5CisgICAgICAgIHBuX3Rhc2sgPSAiJXNfJXMiICUgKGRpY3RfaW4uZ2V0KGspLmdldCgncG4nKSwgZGljdF9pbi5nZXQoaykuZ2V0KCd0YXNrJykpCisgICAgICAgICMgSWYgbW9yZSB0aGFuIG9uZSBzdGFtcHMgYXJlIGZvdW5kLCB1c2UgdGhlIGxhdGVzdCBvbmUuCisgICAgICAgIGlmIHBuX3Rhc2sgaW4gZGljdF9vdXQ6CisgICAgICAgICAgICBmdWxsX3BhdGhfcHJlID0gZGljdF9vdXQuZ2V0KHBuX3Rhc2spLmdldCgncGF0aCcpCisgICAgICAgICAgICBmdWxsX3BhdGhfY3VyID0gZGljdF9pbi5nZXQoaykuZ2V0KCdwYXRoJykKKyAgICAgICAgICAgIGlmIG9zLnN0YXQoZnVsbF9wYXRoX3ByZSkuc3RfbXRpbWUgPiBvcy5zdGF0KGZ1bGxfcGF0aF9jdXIpLnN0X210aW1lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHN1YmRpY3RbJ3B2J10gPSBkaWN0X2luLmdldChrKS5nZXQoJ3B2JykKKyAgICAgICAgc3ViZGljdFsncHInXSA9IGRpY3RfaW4uZ2V0KGspLmdldCgncHInKQorICAgICAgICBzdWJkaWN0WydwYXRoJ10gPSBkaWN0X2luLmdldChrKS5nZXQoJ3BhdGgnKQorICAgICAgICBkaWN0X291dFtwbl90YXNrXSA9IHN1YmRpY3QKKworICAgIHJldHVybiBkaWN0X291dAorCitkZWYgc3BsaXRfcG50YXNrKHMpOgorICAgICIiIgorICAgIFNwbGl0IHRoZSBwbl90YXNrIGluIHRvIChwbiwgdGFzaykgYW5kIHJldHVybiBpdAorICAgICIiIgorICAgIHRtcCA9IHJlLm1hdGNoKCIoLiopXyhkb18uKikiLCBzKQorICAgIHJldHVybiAodG1wLmdyb3VwKDEpLCB0bXAuZ3JvdXAoMikpCisKKworZGVmIHByaW50X2FkZGVkKGRfbmV3ID0gTm9uZSwgZF9vbGQgPSBOb25lKToKKyAgICAiIiIKKyAgICBQcmludCB0aGUgbmV3bHkgYWRkZWQgdGFza3MKKyAgICAiIiIKKyAgICBhZGRlZCA9IHt9CisgICAgZm9yIGsgaW4gZF9uZXcua2V5cygpOgorICAgICAgICBpZiBrIG5vdCBpbiBkX29sZDoKKyAgICAgICAgICAgICMgQWRkIHRoZSBuZXcgb25lIHRvIGFkZGVkIGRpY3QsIGFuZCByZW1vdmUgaXQgZnJvbQorICAgICAgICAgICAgIyBkX25ldywgc28gdGhlIHJlbWFpbmluZyBvbmVzIGFyZSB0aGUgY2hhbmdlZCBvbmVzCisgICAgICAgICAgICBhZGRlZFtrXSA9IGRfbmV3LmdldChrKQorICAgICAgICAgICAgZGVsKGRfbmV3W2tdKQorCisgICAgaWYgbm90IGFkZGVkOgorICAgICAgICByZXR1cm4gMAorCisgICAgIyBGb3JtYXQgdGhlIG91dHB1dCwgdGhlIGRpY3QgZm9ybWF0IGlzOgorICAgICMge3BuOiB0YXNrMSwgdGFzazIgLi4ufQorICAgIGFkZGVkX2Zvcm1hdCA9IHt9CisgICAgY291bnRlciA9IDAKKyAgICBmb3IgayBpbiBhZGRlZC5rZXlzKCk6CisgICAgICAgIHBuLCB0YXNrID0gc3BsaXRfcG50YXNrKGspCisgICAgICAgIGlmIHBuIGluIGFkZGVkX2Zvcm1hdDoKKyAgICAgICAgICAgICMgQXBwZW5kIHRoZSB2YWx1ZQorICAgICAgICAgICAgYWRkZWRfZm9ybWF0W3BuXSA9ICIlcyAlcyIgJSAoYWRkZWRfZm9ybWF0LmdldChwbiksIHRhc2spCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhZGRlZF9mb3JtYXRbcG5dID0gdGFzaworICAgICAgICBjb3VudGVyICs9IDEKKyAgICBwcmludCgiPT09IE5ld2x5IGFkZGVkIHRhc2tzOiAoJXMgdGFza3MpIiAlIGNvdW50ZXIpCisgICAgZm9yIGsgaW4gYWRkZWRfZm9ybWF0LmtleXMoKToKKyAgICAgICAgcHJpbnQoIiAgJXM6ICVzIiAlIChrLCBhZGRlZF9mb3JtYXQuZ2V0KGspKSkKKworICAgIHJldHVybiBjb3VudGVyCisKK2RlZiBwcmludF92cmNoYW5nZWQoZF9uZXcgPSBOb25lLCBkX29sZCA9IE5vbmUsIHZyID0gTm9uZSk6CisgICAgIiIiCisgICAgUHJpbnQgdGhlIHB2IG9yIHByIGNoYW5nZWQgdGFza3MuCisgICAgVGhlIGFyZyAidnIiIGlzICJwdiIgb3IgInByIgorICAgICIiIgorICAgIHB2Y2hhbmdlZCA9IHt9CisgICAgY291bnRlciA9IDAKKyAgICBmb3IgayBpbiBkX25ldy5rZXlzKCk6CisgICAgICAgIGlmIGRfbmV3LmdldChrKS5nZXQodnIpICE9IGRfb2xkLmdldChrKS5nZXQodnIpOgorICAgICAgICAgICAgY291bnRlciArPSAxCisgICAgICAgICAgICBwbiwgdGFzayA9IHNwbGl0X3BudGFzayhrKQorICAgICAgICAgICAgaWYgcG4gbm90IGluIHB2Y2hhbmdlZDoKKyAgICAgICAgICAgICAgICAjIEZvcm1hdCB0aGUgb3V0cHV0LCB3ZSBvbmx5IHByaW50IHBuIChubyB0YXNrKSBzaW5jZQorICAgICAgICAgICAgICAgICMgYWxsIHRoZSB0YXNrcyB3b3VsZCBiZSBjaGFuZ2VkIHdoZW4gcG4gb3IgcHIgY2hhbmdlZCwKKyAgICAgICAgICAgICAgICAjIHRoZSBkaWN0IGZvcm1hdCBpczoKKyAgICAgICAgICAgICAgICAjIHtwbjogcHYvcHJfb2xkIC0+IHB2L3ByX25ld30KKyAgICAgICAgICAgICAgICBwdmNoYW5nZWRbcG5dID0gIiVzIC0+ICVzIiAlIChkX29sZC5nZXQoaykuZ2V0KHZyKSwgZF9uZXcuZ2V0KGspLmdldCh2cikpCisgICAgICAgICAgICBkZWwoZF9uZXdba10pCisKKyAgICBpZiBub3QgcHZjaGFuZ2VkOgorICAgICAgICByZXR1cm4gMAorCisgICAgcHJpbnQoIlxuPT09ICVzIGNoYW5nZWQ6ICglcyB0YXNrcykiICUgKHZyLnVwcGVyKCksIGNvdW50ZXIpKQorICAgIGZvciBrIGluIHB2Y2hhbmdlZC5rZXlzKCk6CisgICAgICAgIHByaW50KCIgICVzOiAlcyIgJSAoaywgcHZjaGFuZ2VkLmdldChrKSkpCisKKyAgICByZXR1cm4gY291bnRlcgorCitkZWYgcHJpbnRfZGVwY2hhbmdlZChkX25ldyA9IE5vbmUsIGRfb2xkID0gTm9uZSwgdmVyYm9zZSA9IEZhbHNlKToKKyAgICAiIiIKKyAgICBQcmludCB0aGUgZGVwZW5kZW5jeSBjaGFuZ2VzCisgICAgIiIiCisgICAgZGVwY2hhbmdlZCA9IHt9CisgICAgY291bnRlciA9IDAKKyAgICBmb3IgayBpbiBkX25ldy5rZXlzKCk6CisgICAgICAgIGNvdW50ZXIgKz0gMQorICAgICAgICBwbiwgdGFzayA9IHNwbGl0X3BudGFzayhrKQorICAgICAgICBpZiAodmVyYm9zZSk6CisgICAgICAgICAgICBmdWxsX3BhdGhfb2xkID0gZF9vbGQuZ2V0KGspLmdldCgicGF0aCIpCisgICAgICAgICAgICBmdWxsX3BhdGhfbmV3ID0gZF9uZXcuZ2V0KGspLmdldCgicGF0aCIpCisgICAgICAgICAgICAjIE5vIGNvdW50ZXIgc2luY2UgaXQgaXMgbm90IHJlYWR5IGhlcmUKKyAgICAgICAgICAgIGlmIHNpZ2RhdGFfcmUubWF0Y2goZnVsbF9wYXRoX29sZCkgYW5kIHNpZ2RhdGFfcmUubWF0Y2goZnVsbF9wYXRoX25ldyk6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gYmIuc2lnZ2VuLmNvbXBhcmVfc2lnZmlsZXMoZnVsbF9wYXRoX29sZCwgZnVsbF9wYXRoX25ldykKKyAgICAgICAgICAgICAgICBpZiBvdXRwdXQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJcbj09PSBUaGUgdmVyYm9zZSBjaGFuZ2VzIG9mICVzLmRvXyVzOiIgJSAocG4sIHRhc2spKQorICAgICAgICAgICAgICAgICAgICBwcmludCgnXG4nLmpvaW4ob3V0cHV0KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgRm9ybWF0IHRoZSBvdXRwdXQsIHRoZSBmb3JtYXQgaXM6CisgICAgICAgICAgICAjIHtwbjogdGFzazEsIHRhc2syLCAuLi59CisgICAgICAgICAgICBpZiBwbiBpbiBkZXBjaGFuZ2VkOgorICAgICAgICAgICAgICAgIGRlcGNoYW5nZWRbcG5dID0gIiVzICVzIiAlIChkZXBjaGFuZ2VkLmdldChwbiksIHRhc2spCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlcGNoYW5nZWRbcG5dID0gdGFzaworCisgICAgaWYgbGVuKGRlcGNoYW5nZWQpID4gMDoKKyAgICAgICAgcHJpbnQoIlxuPT09IERlcGVuZGVuY2llcyBjaGFuZ2VkOiAoJXMgdGFza3MpIiAlIGNvdW50ZXIpCisgICAgICAgIGZvciBrIGluIGRlcGNoYW5nZWQua2V5cygpOgorICAgICAgICAgICAgcHJpbnQoIiAgJXM6ICVzIiAlIChrLCBkZXBjaGFuZ2VkW2tdKSkKKworICAgIHJldHVybiBjb3VudGVyCisKKworZGVmIG1haW4oKToKKyAgICAiIiIKKyAgICBQcmludCB3aGF0IHdpbGwgYmUgZG9uZSBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCBsYXN0IGJ1aWxkczoKKyAgICAxKSBSdW4gIlNUQU1QU19ESVI9PHBhdGg+IGJpdGJha2UgLVMgcmVjaXBlIiB0byByZS1nZW5lcmF0ZSB0aGUgc3RhbXBzCisgICAgMikgRmlndXJlIG91dCB3aGF0IGFyZSBuZXdseSBhZGRlZCBhbmQgY2hhbmdlZCwgY2FuJ3QgZmlndXJlIG91dAorICAgICAgIHdoYXQgYXJlIHJlbW92ZWQgc2luY2Ugd2UgY2FuJ3Qga25vdyB0aGUgcHJldmlvdXMgc3RhbXBzCisgICAgICAgY2xlYXJseSwgZm9yIGV4YW1wbGUsIGlmIHRoZXJlIGFyZSBzZXZlcmFsIGJ1aWxkcywgd2UgY2FuJ3Qga25vdworICAgICAgIHdoaWNoIHN0YW1wcyB0aGUgbGFzdCBidWlsZCBoYXMgdXNlZCBleGFjdGx5LgorICAgIDMpIFVzZSBiYi5zaWdnZW4uY29tcGFyZV9zaWdmaWxlcyB0byBkaWZmIHRoZSBvbGQgYW5kIG5ldyBzdGFtcHMKKyAgICAiIiIKKworICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcigKKyAgICAgICAgdmVyc2lvbiA9ICIxLjAiLAorICAgICAgICB1c2FnZSA9ICIiIiVwcm9nIFtvcHRpb25zXSBbcGFja2FnZSAuLi5dCitwcmludCB3aGF0IHdpbGwgYmUgZG9uZSBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCBsYXN0IGJ1aWxkcywgZm9yIGV4YW1wbGU6CisKKyAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvCisgICAgIyBFZGl0IHRoZSByZWNpcGVzCisgICAgJCBiaXRiYWtlLXdoYXRjaGFuZ2VkIGNvcmUtaW1hZ2Utc2F0bworCitUaGUgY2hhbmdlcyB3aWxsIGJlIHByaW50ZWQiCisKK05vdGU6CisgICAgVGhlIGFtb3VudCBvZiB0YXNrcyBpcyBub3QgYWNjdXJhdGUgd2hlbiB0aGUgdGFzayBpcyAiZG9fYnVpbGQiIHNpbmNlCisgICAgaXQgdXN1YWxseSBkZXBlbmRzIG9uIG90aGVyIHRhc2tzLgorICAgIFRoZSAibm9zdGFtcCIgdGFzayBpcyBub3QgaW5jbHVkZWQuCisiIiIKKykKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXYiLCAiLS12ZXJib3NlIiwgaGVscCA9ICJwcmludCB0aGUgdmVyYm9zZSBjaGFuZ2VzIiwKKyAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJ2ZXJib3NlIikKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhzeXMuYXJndikKKworICAgIHZlcmJvc2UgPSBvcHRpb25zLnZlcmJvc2UKKworICAgIGlmIGxlbihhcmdzKSAhPSAyOgorICAgICAgICBwYXJzZXIuZXJyb3IoIkluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIikKKyAgICBlbHNlOgorICAgICAgICByZWNpcGUgPSBhcmdzWzFdCisKKyAgICAjIEdldCB0aGUgU1RBTVBTX0RJUgorICAgIHByaW50KCJGaWd1cmluZyBvdXQgdGhlIFNUQU1QU19ESVIgLi4uIikKKyAgICBjbWRsaW5lID0gImJpdGJha2UgLWUgfCBzZWQgLW5lICdzL15TVEFNUFNfRElSPVwiXCguKlwpXCIvXFwxL3AnIgorICAgIHRyeToKKyAgICAgICAgc3RhbXBzZGlyLCBlcnIgPSBiYi5wcm9jZXNzLnJ1bihjbWRsaW5lKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcmFpc2UKKyAgICBpZiBub3Qgc3RhbXBzZGlyOgorICAgICAgICBwcmludCgiRVJST1I6IE5vIFNUQU1QU19ESVIgZm91bmQgZm9yICclcyciICUgcmVjaXBlLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIHJldHVybiAyCisgICAgc3RhbXBzZGlyID0gc3RhbXBzZGlyLnJzdHJpcCgiXG4iKQorICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHN0YW1wc2Rpcik6CisgICAgICAgIHByaW50KCJFUlJPUjogc3RhbXBzIGRpcmVjdG9yeSBcIiVzXCIgbm90IGZvdW5kISIgJSBzdGFtcHNkaXIsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgcmV0dXJuIDIKKworICAgICMgVGhlIG5ldyBzdGFtcHMgZGlyCisgICAgbmV3X3N0YW1wc2RpciA9IHN0YW1wc2RpciArICIuYmJzIgorICAgIGlmIG9zLnBhdGguZXhpc3RzKG5ld19zdGFtcHNkaXIpOgorICAgICAgICBwcmludCgiRVJST1I6ICVzIGFscmVhZHkgZXhpc3RzISIgJSBuZXdfc3RhbXBzZGlyLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIHJldHVybiAyCisKKyAgICB0cnk6CisgICAgICAgICMgR2VuZXJhdGUgdGhlIG5ldyBzdGFtcHMgZGlyCisgICAgICAgIHByaW50KCJHZW5lcmF0aW5nIHRoZSBuZXcgc3RhbXBzIC4uLiAobmVlZCBzZXZlcmFsIG1pbnV0ZXMpIikKKyAgICAgICAgY21kbGluZSA9ICJTVEFNUFNfRElSPSVzIGJpdGJha2UgLVMgbm9uZSAlcyIgJSAobmV3X3N0YW1wc2RpciwgcmVjaXBlKQorICAgICAgICAjIEZJWE1FCisgICAgICAgICMgVGhlICJiaXRiYWtlIC1TIiBtYXkgZmFpbCwgbm90IGZhdGFsIGVycm9yLCB0aGUgc3RhbXBzIHdpbGwgc3RpbGwKKyAgICAgICAgIyBiZSBnZW5lcmF0ZWQsIHRoaXMgbWlnaHQgYmUgYSBidWcgb2YgImJpdGJha2UgLVMiLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bihjbWRsaW5lKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHByaW50KGV4YykKKworICAgICAgICAjIFRoZSBkaWN0IGZvciB0aGUgbmV3IGFuZCBvbGQgc3RhbXBzLgorICAgICAgICBvbGRfZGljdCA9IGdlbl9kaWN0KHN0YW1wc2RpcikKKyAgICAgICAgbmV3X2RpY3QgPSBnZW5fZGljdChuZXdfc3RhbXBzZGlyKQorCisgICAgICAgICMgUmVtb3ZlIHRoZSBzYW1lIG9uZSBmcm9tIGJvdGggc3RhbXBzLgorICAgICAgICBjbnRfdW5jaGFuZ2VkID0gMAorICAgICAgICBmb3IgayBpbiBuZXdfZGljdC5rZXlzKCk6CisgICAgICAgICAgICBpZiBrIGluIG9sZF9kaWN0OgorICAgICAgICAgICAgICAgIGNudF91bmNoYW5nZWQgKz0gMQorICAgICAgICAgICAgICAgIGRlbChuZXdfZGljdFtrXSkKKyAgICAgICAgICAgICAgICBkZWwob2xkX2RpY3Rba10pCisKKyAgICAgICAgIyBSZS1jb25zdHJ1Y3QgdGhlIGRpY3QgdG8gZWFzaWx5IGZpbmQgb3V0IHdoYXQgaXMgYWRkZWQgb3IgY2hhbmdlZC4KKyAgICAgICAgIyBUaGUgZGljdCBmb3JtYXQgaXM6CisgICAgICAgICMge3BuX3Rhc2s6IHtwdjogUFYsIHByOiBQUiwgcGF0aDogUEFUSH19CisgICAgICAgIG5ld19yZWNvbiA9IHJlY29uX2RpY3QobmV3X2RpY3QpCisgICAgICAgIG9sZF9yZWNvbiA9IHJlY29uX2RpY3Qob2xkX2RpY3QpCisKKyAgICAgICAgZGVsIG5ld19kaWN0CisgICAgICAgIGRlbCBvbGRfZGljdAorCisgICAgICAgICMgRmlndXJlIG91dCB3aGF0IGFyZSBjaGFuZ2VkLCB0aGUgbmV3X3JlY29uIHdvdWxkIGJlIGNoYW5nZWQKKyAgICAgICAgIyBieSB0aGUgcHJpbnRfeHh4IGZ1bmN0aW9uLgorICAgICAgICAjIE5ld2x5IGFkZGVkCisgICAgICAgIGNudF9hZGRlZCA9IHByaW50X2FkZGVkKG5ld19yZWNvbiwgb2xkX3JlY29uKQorCisgICAgICAgICMgUFYgKGluY2x1ZGluZyBQRSkgYW5kIFBSIGNoYW5nZWQKKyAgICAgICAgIyBMZXQgdGhlIGJiLnNpZ2dlbiBoYW5kbGUgdGhlbSBpZiB2ZXJib3NlCisgICAgICAgIGNudF9ydiA9IHt9CisgICAgICAgIGlmIG5vdCB2ZXJib3NlOgorICAgICAgICAgICAgZm9yIGkgaW4gKCdwdicsICdwcicpOgorICAgICAgICAgICAgICAgY250X3J2W2ldID0gcHJpbnRfdnJjaGFuZ2VkKG5ld19yZWNvbiwgb2xkX3JlY29uLCBpKQorCisgICAgICAgICMgRGVwZW5kZW5jaWVzIGNoYW5nZWQgKHVzZSBiaXRiYWtlLWRpZmZzaWdzKQorICAgICAgICBjbnRfZGVwID0gcHJpbnRfZGVwY2hhbmdlZChuZXdfcmVjb24sIG9sZF9yZWNvbiwgdmVyYm9zZSkKKworICAgICAgICB0b3RhbF9jaGFuZ2VkID0gY250X2FkZGVkICsgKGNudF9ydi5nZXQoJ3B2Jykgb3IgMCkgKyAoY250X3J2LmdldCgncHInKSBvciAwKSArIGNudF9kZXAKKworICAgICAgICBwcmludCgiXG49PT0gU3VtbWFyeTogKCVzIGNoYW5nZWQsICVzIHVuY2hhbmdlZCkiICUgKHRvdGFsX2NoYW5nZWQsIGNudF91bmNoYW5nZWQpKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoIk5ld2x5IGFkZGVkOiAlc1xuRGVwZW5kZW5jaWVzIGNoYW5nZWQ6ICVzXG4iICUgXAorICAgICAgICAgICAgICAgIChjbnRfYWRkZWQsIGNudF9kZXApKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIk5ld2x5IGFkZGVkOiAlc1xuUFYgY2hhbmdlZDogJXNcblBSIGNoYW5nZWQ6ICVzXG5EZXBlbmRlbmNpZXMgY2hhbmdlZDogJXNcbiIgJSBcCisgICAgICAgICAgICAgICAgKGNudF9hZGRlZCwgY250X3J2LmdldCgncHYnKSBvciAwLCBjbnRfcnYuZ2V0KCdwcicpIG9yIDAsIGNudF9kZXApKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcHJpbnQoIkVSUk9SIG9jY3VycmVkISIpCisgICAgICAgIHJhaXNlCisgICAgZmluYWxseToKKyAgICAgICAgIyBSZW1vdmUgdGhlIG5ld2x5IGdlbmVyYXRlZCBzdGFtcHMgZGlyCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG5ld19zdGFtcHNkaXIpOgorICAgICAgICAgICAgcHJpbnQoIlJlbW92aW5nIHRoZSBuZXdseSBnZW5lcmF0ZWQgc3RhbXBzIGRpciAuLi4iKQorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShuZXdfc3RhbXBzZGlyKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9idWlsZGhpc3RvcnktY29sbGVjdC1zcmNyZXZzIGIveW9jdG8tcG9reS9zY3JpcHRzL2J1aWxkaGlzdG9yeS1jb2xsZWN0LXNyY3JldnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNThhMjcwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9idWlsZGhpc3RvcnktY29sbGVjdC1zcmNyZXZzCkBAIC0wLDAgKzEsMTA5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29sbGVjdHMgdGhlIHJlY29yZGVkIFNSQ1JFViB2YWx1ZXMgZnJvbSBidWlsZGhpc3RvcnkgYW5kIHJlcG9ydHMgb24gdGhlbQorIworIyBDb3B5cmlnaHQgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIyBBdXRob3JlZC1ieTogIFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IG9zLCBzeXMKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKworZGVmIGxvZ2dlcl9jcmVhdGUoKToKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiYnVpbGRoaXN0b3J5IikKKyAgICBsb2dnZXJoYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKKyAgICBsb2dnZXJoYW5kbGVyLnNldEZvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKSkKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihsb2dnZXJoYW5kbGVyKQorICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgcmV0dXJuIGxvZ2dlcgorCitsb2dnZXIgPSBsb2dnZXJfY3JlYXRlKCkKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCisgICAgICAgIGRlc2NyaXB0aW9uID0gIkNvbGxlY3RzIHRoZSByZWNvcmRlZCBTUkNSRVYgdmFsdWVzIGZyb20gYnVpbGRoaXN0b3J5IGFuZCByZXBvcnRzIG9uIHRoZW0uIiwKKyAgICAgICAgdXNhZ2UgPSAiIiIKKyAgICAlcHJvZyBbb3B0aW9uc10iIiIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWEiLCAiLS1yZXBvcnQtYWxsIiwKKyAgICAgICAgICAgIGhlbHAgPSAiUmVwb3J0IGFsbCBTUkNSRVYgdmFsdWVzLCBub3QganVzdCBvbmVzIHdoZXJlIEFVVE9SRVYgaGFzIGJlZW4gdXNlZCIsCisgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJyZXBvcnRhbGwiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItZiIsICItLWZvcmNldmFyaWFibGUiLAorICAgICAgICAgICAgaGVscCA9ICJVc2UgZm9yY2V2YXJpYWJsZSBvdmVycmlkZSBmb3IgYWxsIG91dHB1dCBsaW5lcyIsCisgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJmb3JjZXZhcmlhYmxlIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXAiLCAiLS1idWlsZGhpc3RvcnktZGlyIiwKKyAgICAgICAgICAgIGhlbHAgPSAiU3BlY2lmeSBwYXRoIHRvIGJ1aWxkaGlzdG9yeSBkaXJlY3RvcnkgKGRlZmF1bHRzIHRvIGJ1aWxkaGlzdG9yeS8gdW5kZXIgY3dkKSIsCisgICAgICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0iYnVpbGRoaXN0b3J5X2RpciIsIGRlZmF1bHQ9J2J1aWxkaGlzdG9yeS8nKQorCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHN5cy5hcmd2KQorCisgICAgaWYgbGVuKGFyZ3MpID4gMToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnSW52YWxpZCBhcmd1bWVudChzKSBzcGVjaWZpZWQ6ICVzXG5cbicgJSAnICcuam9pbihhcmdzWzE6XSkpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcHRpb25zLmJ1aWxkaGlzdG9yeV9kaXIpOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdCdWlsZGhpc3RvcnkgZGlyZWN0b3J5ICIlcyIgZG9lcyBub3QgZXhpc3RcblxuJyAlIG9wdGlvbnMuYnVpbGRoaXN0b3J5X2RpcikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgb3B0aW9ucy5mb3JjZXZhcmlhYmxlOgorICAgICAgICBmb3JjZXZhcmlhYmxlID0gJ19mb3JjZXZhcmlhYmxlJworICAgIGVsc2U6CisgICAgICAgIGZvcmNldmFyaWFibGUgPSAnJworCisgICAgbGFzdGRpciA9ICcnCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsob3B0aW9ucy5idWlsZGhpc3RvcnlfZGlyKToKKyAgICAgICAgaWYgJy5naXQnIGluIGRpcnM6CisgICAgICAgICAgICBkaXJzLnJlbW92ZSgnLmdpdCcpCisgICAgICAgIGZvciBmbiBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIGZuID09ICdsYXRlc3Rfc3JjcmV2JzoKKyAgICAgICAgICAgICAgICBjdXJkaXIgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGguZGlybmFtZShyb290KSkKKyAgICAgICAgICAgICAgICBpZiBsYXN0ZGlyICE9IGN1cmRpcjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyMgJXMnICUgY3VyZGlyKQorICAgICAgICAgICAgICAgICAgICBsYXN0ZGlyID0gY3VyZGlyCisgICAgICAgICAgICAgICAgZnVsbHBhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCwgZm4pCisgICAgICAgICAgICAgICAgcG4gPSBvcy5wYXRoLmJhc2VuYW1lKHJvb3QpCisgICAgICAgICAgICAgICAgc3JjcmV2ID0gTm9uZQorICAgICAgICAgICAgICAgIG9yaWdfc3JjcmV2ID0gTm9uZQorICAgICAgICAgICAgICAgIG9yaWdfc3JjcmV2cyA9IHt9CisgICAgICAgICAgICAgICAgc3JjcmV2cyA9IHt9CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZ1bGxwYXRoKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJz0nIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR2YWwgPSBsaW5lLnNwbGl0KCc9JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNwbGl0dmFsWzFdLnN0cmlwKCciIFx0XG5ccicpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMgU1JDUkVWID0gJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ19zcmNyZXYgPSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJyMgU1JDUkVWXycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsID0gbGluZS5zcGxpdCgnPScpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHNwbGl0dmFsWzBdLnNwbGl0KCdfJylbMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdfc3JjcmV2c1tuYW1lXSA9IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnU1JDUkVWID0nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNyZXYgPSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ1NSQ1JFVl8nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gc3BsaXR2YWxbMF0uc3BsaXQoJ18nKVsxXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjcmV2c1tuYW1lXSA9IHZhbHVlCisgICAgICAgICAgICAgICAgaWYgc3JjcmV2IGFuZCAob3B0aW9ucy5yZXBvcnRhbGwgb3Igc3JjcmV2ICE9IG9yaWdfc3JjcmV2KToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ1NSQ1JFVl9wbi0lcyVzID0gIiVzIicgJSAocG4sIGZvcmNldmFyaWFibGUsIHNyY3JldikpCisgICAgICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHNyY3JldnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgb3JpZyA9IG9yaWdfc3JjcmV2cy5nZXQobmFtZSwgb3JpZ19zcmNyZXYpCisgICAgICAgICAgICAgICAgICAgIGlmIG9wdGlvbnMucmVwb3J0YWxsIG9yIHZhbHVlICE9IG9yaWc6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnU1JDUkVWXyVzX3BuLSVzJXMgPSAiJXMiJyAlIChuYW1lLCBwbiwgZm9yY2V2YXJpYWJsZSwgdmFsdWUpKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvYnVpbGRoaXN0b3J5LWRpZmYgYi95b2N0by1wb2t5L3NjcmlwdHMvYnVpbGRoaXN0b3J5LWRpZmYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGZlYmNkZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9idWlsZGhpc3RvcnktZGlmZgpAQCAtMCwwICsxLDEwMCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgUmVwb3J0IHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGluIHRoZSBidWlsZGhpc3RvcnkgcmVwb3NpdG9yeSBzaW5jZSBhIHNwZWNpZmljIHJldmlzaW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIyBBdXRob3I6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBvcHRwYXJzZQorZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCisKKyMgRW5zdXJlIFB5dGhvbkdpdCBpcyBpbnN0YWxsZWQgKGJ1aWxkaGlzdG9yeV9hbmFseXNpcyBuZWVkcyBpdCkKK3RyeToKKyAgICBpbXBvcnQgZ2l0CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcHJpbnQoIlBsZWFzZSBpbnN0YWxsIEdpdFB5dGhvbiAocHl0aG9uLWdpdCkgMC4zLjEgb3IgbGF0ZXIgaW4gb3JkZXIgdG8gdXNlIHRoaXMgc2NyaXB0IikKKyAgICBzeXMuZXhpdCgxKQorCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKKyAgICAgICAgZGVzY3JpcHRpb24gPSAiUmVwb3J0cyBzaWduaWZpY2FudCBkaWZmZXJlbmNlcyBpbiB0aGUgYnVpbGRoaXN0b3J5IHJlcG9zaXRvcnkuIiwKKyAgICAgICAgdXNhZ2UgPSAiIiIKKyAgICAlcHJvZyBbb3B0aW9uc10gW2Zyb20tcmV2aXNpb24gW3RvLXJldmlzaW9uXV0KKyhpZiBub3Qgc3BlY2lmaWVkLCBmcm9tLXJldmlzaW9uIGRlZmF1bHRzIHRvIGJ1aWxkLW1pbnVzLTEsIGFuZCB0by1yZXZpc2lvbiBkZWZhdWx0cyB0byBIRUFEKSIiIikKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcCIsICItLWJ1aWxkaGlzdG9yeS1kaXIiLAorICAgICAgICAgICAgaGVscCA9ICJTcGVjaWZ5IHBhdGggdG8gYnVpbGRoaXN0b3J5IGRpcmVjdG9yeSAoZGVmYXVsdHMgdG8gYnVpbGRoaXN0b3J5LyB1bmRlciBjd2QpIiwKKyAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJidWlsZGhpc3RvcnlfZGlyIiwgZGVmYXVsdD0nYnVpbGRoaXN0b3J5LycpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi12IiwgIi0tcmVwb3J0LXZlcnNpb24iLAorICAgICAgICAgICAgaGVscCA9ICJSZXBvcnQgY2hhbmdlcyBpbiBQS0dFL1BLR1YvUEtHUiBldmVuIHdoZW4gdGhlIHZhbHVlcyBhcmUgc3RpbGwgdGhlIGRlZmF1bHQgKFBFL1BWL1BSKSIsCisgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJyZXBvcnRfdmVyIiwgZGVmYXVsdD1GYWxzZSkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWEiLCAiLS1yZXBvcnQtYWxsIiwKKyAgICAgICAgICAgIGhlbHAgPSAiUmVwb3J0IGFsbCBjaGFuZ2VzLCBub3QganVzdCB0aGUgZGVmYXVsdCBzaWduaWZpY2FudCBvbmVzIiwKKyAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InJlcG9ydF9hbGwiLCBkZWZhdWx0PUZhbHNlKQorCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHN5cy5hcmd2KQorCisgICAgaWYgbGVuKGFyZ3MpID4gMzoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnSW52YWxpZCBhcmd1bWVudChzKSBzcGVjaWZpZWQ6ICVzXG5cbicgJSAnICcuam9pbihhcmdzWzM6XSkpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIExvb3NlVmVyc2lvbihnaXQuX192ZXJzaW9uX18pIDwgJzAuMy4xJzoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiVmVyc2lvbiBvZiBHaXRQeXRob24gaXMgdG9vIG9sZCwgcGxlYXNlIGluc3RhbGwgR2l0UHl0aG9uIChweXRob24tZ2l0KSAwLjMuMSBvciBsYXRlciBpbiBvcmRlciB0byB1c2UgdGhpcyBzY3JpcHRcbiIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3B0aW9ucy5idWlsZGhpc3RvcnlfZGlyKToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnQnVpbGRoaXN0b3J5IGRpcmVjdG9yeSAiJXMiIGRvZXMgbm90IGV4aXN0XG5cbicgJSBvcHRpb25zLmJ1aWxkaGlzdG9yeV9kaXIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHNjcmlwdHNfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKSkpCisgICAgbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKKyAgICBzeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQorCisgICAgaW1wb3J0IHNjcmlwdHBhdGgKKworICAgICMgU2V0IHBhdGggdG8gT0UgbGliIGRpciBzbyB3ZSBjYW4gaW1wb3J0IHRoZSBidWlsZGhpc3RvcnlfYW5hbHlzaXMgbW9kdWxlCisgICAgc2NyaXB0cGF0aC5hZGRfb2VfbGliX3BhdGgoKQorICAgICMgU2V0IHBhdGggdG8gYml0YmFrZSBsaWIgZGlyIHNvIHRoZSBidWlsZGhpc3RvcnlfYW5hbHlzaXMgbW9kdWxlIGNhbiBsb2FkIGJiLnV0aWxzCisgICAgYml0YmFrZXBhdGggPSBzY3JpcHRwYXRoLmFkZF9iaXRiYWtlX2xpYl9wYXRoKCkKKyAgICBpZiBub3QgYml0YmFrZXBhdGg6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlVuYWJsZSB0byBmaW5kIGJpdGJha2UgYnkgc2VhcmNoaW5nIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhpcyBzY3JpcHQgb3IgUEFUSFxuIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGltcG9ydCBvZS5idWlsZGhpc3RvcnlfYW5hbHlzaXMKKworICAgIGZyb21yZXYgPSAnYnVpbGQtbWludXMtMScKKyAgICB0b3JldiA9ICdIRUFEJworICAgIGlmIGxlbihhcmdzKSA+IDE6CisgICAgICAgIGlmIGxlbihhcmdzKSA9PSAyIGFuZCAnLi4nIGluIGFyZ3NbMV06CisgICAgICAgICAgICByZXZzID0gYXJnc1sxXS5zcGxpdCgnLi4nKQorICAgICAgICAgICAgZnJvbXJldiA9IHJldnNbMF0KKyAgICAgICAgICAgIGlmIHJldnNbMV06CisgICAgICAgICAgICAgICAgdG9yZXYgPSByZXZzWzFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmcm9tcmV2ID0gYXJnc1sxXQorICAgIGlmIGxlbihhcmdzKSA+IDI6CisgICAgICAgIHRvcmV2ID0gYXJnc1syXQorCisgICAgaW1wb3J0IGdpdGRiCisgICAgdHJ5OgorICAgICAgICBjaGFuZ2VzID0gb2UuYnVpbGRoaXN0b3J5X2FuYWx5c2lzLnByb2Nlc3NfY2hhbmdlcyhvcHRpb25zLmJ1aWxkaGlzdG9yeV9kaXIsIGZyb21yZXYsIHRvcmV2LCBvcHRpb25zLnJlcG9ydF9hbGwsIG9wdGlvbnMucmVwb3J0X3ZlcikKKyAgICBleGNlcHQgZ2l0ZGIuZXhjLkJhZE9iamVjdCBhcyBlOgorICAgICAgICBpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlVuYWJsZSB0byBmaW5kIHByZXZpb3VzIGJ1aWxkIHJldmlzaW9uIGluIGJ1aWxkaGlzdG9yeSByZXBvc2l0b3J5XG5cbiIpCisgICAgICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdTcGVjaWZpZWQgZ2l0IHJldmlzaW9uICIlcyIgaXMgbm90IHZhbGlkXG4nICUgZS5hcmdzWzBdKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZm9yIGNoZyBpbiBjaGFuZ2VzOgorICAgICAgICBwcmludCgnJXMnICUgY2hnKQorCisgICAgc3lzLmV4aXQoMCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NsZWFudXAtd29ya2RpciBiL3lvY3RvLXBva3kvc2NyaXB0cy9jbGVhbnVwLXdvcmtkaXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTdmNWEzYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jbGVhbnVwLXdvcmtkaXIKQEAgLTAsMCArMSwxOTggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENvcHlyaWdodCAoYykgMjAxMiBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzaHV0aWwKKworcGtnX2N1cl9kaXJzID0ge30KK29ic29sZXRlX2RpcnMgPSBbXQorcGFyc2VyID0gTm9uZQorCitkZWYgZXJyX3F1aXQobXNnKToKKyAgICBwcmludCBtc2cKKyAgICBwYXJzZXIucHJpbnRfdXNhZ2UoKQorICAgIHN5cy5leGl0KDEpCisKK2RlZiBwYXJzZV92ZXJzaW9uKHZlcnN0cik6CisgICAgZWxlbXMgPSB2ZXJzdHIuc3BsaXQoJzonKQorICAgIGVwb2NoID0gZWxlbXNbMF0KKyAgICBpZiBsZW4oZXBvY2gpID09IDA6CisgICAgICAgIHJldHVybiBlbGVtc1sxXQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBlcG9jaCArICdfJyArIGVsZW1zWzFdCisKK2RlZiBydW5fY29tbWFuZChjbWQpOgorICAgIHBpcGUgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc2hlbGw9VHJ1ZSkKKyAgICBvdXRwdXQgPSBwaXBlLmNvbW11bmljYXRlKClbMF0KKyAgICBpZiBwaXBlLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgcHJpbnQgIkV4ZWN1dGUgY29tbWFuZCAnJXMnIGZhaWxlZC4iICUgY21kCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgcmV0dXJuIG91dHB1dAorCitkZWYgZ2V0X2N1cl9hcmNoX2RpcnMod29ya2RpciwgYXJjaF9kaXJzKToKKyAgICBwYXR0ZXJuID0gd29ya2RpciArICcvKC4qPykvJworCisgICAgY21kID0gImJpdGJha2UgLWUgfCBncmVwIF5TREtfQVJDSD0iCisgICAgb3V0cHV0ID0gcnVuX2NvbW1hbmQoY21kKQorICAgIHNka19hcmNoID0gb3V0cHV0LnNwbGl0KCciJylbMV0KKworICAgICMgc2VsZWN0IHRoZXN0IDUgcGFja2FnZXMgdG8gZ2V0IHRoZSBkaXJzIG9mIGN1cnJlbnQgYXJjaAorICAgIHBrZ3MgPSBbJ2hpY29sb3ItaWNvbi10aGVtZScsICdiYXNlLWZpbGVzJywgJ2FjbC1uYXRpdmUnLCAnYmludXRpbHMtY3Jvc3NzZGstJyArIHNka19hcmNoLCAnbmF0aXZlc2RrLWF1dG9jb25mJ10KKworICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgY21kID0gImJpdGJha2UgLWUgIiArIHBrZyArICIgfCBncmVwIF5JTUFHRV9ST09URlM9IgorICAgICAgICBvdXRwdXQgPSBydW5fY29tbWFuZChjbWQpCisgICAgICAgIG91dHB1dCA9IG91dHB1dC5zcGxpdCgnIicpWzFdCisgICAgICAgIG0gPSByZS5tYXRjaChwYXR0ZXJuLCBvdXRwdXQpCisgICAgICAgIGFyY2hfZGlycy5hcHBlbmQobS5ncm91cCgxKSkKKworZGVmIG1haW4oKToKKyAgICBnbG9iYWwgcGFyc2VyCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICB1c2FnZSA9ICIiIiVwcm9nCisKKyVwcm9nIHJlbW92ZXMgdGhlIG9ic29sZXRlIHBhY2thZ2VzJyBidWlsZCBkaXJlY3RvcmllcyBpbiBXT1JLRElSLgorVGhpcyBzY3JpcHQgbXVzdCBiZSByYW4gdW5kZXIgQlVJTERESVIgYWZ0ZXIgc291cmNlIGZpbGUgXCJvZS1pbml0LWJ1aWxkLWVudlwiLgorCitBbnkgZmlsZSBvciBkaXJlY3RvcnkgdW5kZXIgV09SS0RJUiB3aGljaCBpcyBub3QgY3JlYXRlZCBieSBZb2N0bword2lsbCBiZSBkZWxldGVkLiBCZSBDQVVUSU9VUy4iIiIpCisKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisKKyAgICBidWlsZGRpciA9IHJ1bl9jb21tYW5kKCdlY2hvICRCVUlMRERJUicpLnN0cmlwKCkKKyAgICBpZiBsZW4oYnVpbGRkaXIpID09IDA6CisgICAgICAgIGVycl9xdWl0KCJQbGVhc2Ugc291cmNlIGZpbGUgXCJvZS1pbml0LWJ1aWxkLWVudlwiIGZpcnN0LlxuIikKKworICAgIGlmIG9zLmdldGN3ZCgpICE9IGJ1aWxkZGlyOgorICAgICAgICBlcnJfcXVpdCgiUGxlYXNlIHJ1biAlcyB1bmRlcjogJXNcbiIgJSAob3MucGF0aC5iYXNlbmFtZShhcmdzWzBdKSwgYnVpbGRkaXIpKQorCisgICAgcHJpbnQgJ1VwZGF0aW5nIGJpdGJha2UgY2FjaGVzLi4uJworICAgIGNtZCA9ICJiaXRiYWtlIC1zIgorICAgIG91dHB1dCA9IHJ1bl9jb21tYW5kKGNtZCkKKworICAgIG91dHB1dCA9IG91dHB1dC5zcGxpdCgnXG4nKQorICAgIGluZGV4ID0gMAorICAgIHdoaWxlIGxlbihvdXRwdXRbaW5kZXhdKSA+IDA6CisgICAgICAgIGluZGV4ICs9IDEKKyAgICBhbGxsaW5lcyA9IG91dHB1dFtpbmRleCsxOl0KKworICAgIGZvciBsaW5lIGluIGFsbGxpbmVzOgorICAgICAgICAjIGVtcHR5IGFnYWluIG1lYW5zIGVuZCBvZiB0aGUgdmVyc2lvbnMgb3V0cHV0CisgICAgICAgIGlmIGxlbihsaW5lKSA9PSAwOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBsaW5lID0gcmUuc3ViKCdccysnLCAnICcsIGxpbmUpCisgICAgICAgIGVsZW1zID0gbGluZS5zcGxpdCgnICcpCisgICAgICAgIGlmIGxlbihlbGVtcykgPT0gMjoKKyAgICAgICAgICAgIHZlcnNpb24gPSBwYXJzZV92ZXJzaW9uKGVsZW1zWzFdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmVyc2lvbiA9IHBhcnNlX3ZlcnNpb24oZWxlbXNbMl0pCisgICAgICAgIHBrZ19jdXJfZGlyc1tlbGVtc1swXV0gPSB2ZXJzaW9uCisKKyAgICBjbWQgPSAiYml0YmFrZSAtZSIKKyAgICBvdXRwdXQgPSBydW5fY29tbWFuZChjbWQpCisKKyAgICB0bXBkaXIgPSBOb25lCisgICAgaW1hZ2Vfcm9vdGZzID0gTm9uZQorICAgIG91dHB1dCA9IG91dHB1dC5zcGxpdCgnXG4nKQorICAgIGZvciBsaW5lIGluIG91dHB1dDoKKyAgICAgICAgaWYgdG1wZGlyIGFuZCBpbWFnZV9yb290ZnM6CisgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIG5vdCB0bXBkaXI6CisgICAgICAgICAgICBtID0gcmUubWF0Y2goJ1RNUERJUj0iKC4qKSInLCBsaW5lKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICB0bXBkaXIgPSBtLmdyb3VwKDEpCisKKyAgICAgICAgaWYgbm90IGltYWdlX3Jvb3RmczoKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgnSU1BR0VfUk9PVEZTPSIoLiopIicsIGxpbmUpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIGltYWdlX3Jvb3RmcyA9IG0uZ3JvdXAoMSkKKworICAgICMgd29uJ3QgZmFpbCBqdXN0IGluIGNhc2UKKyAgICBpZiBub3QgdG1wZGlyIG9yIG5vdCBpbWFnZV9yb290ZnM6CisgICAgICAgIHByaW50ICJDYW4ndCBnZXQgVE1QRElSIG9yIElNQUdFX1JPT1RGUy4iCisgICAgICAgIHJldHVybiAxCisKKyAgICBwYXR0ZXJuID0gdG1wZGlyICsgJy8oLio/KS8oLio/KS8nCisgICAgbSA9IHJlLm1hdGNoKHBhdHRlcm4sIGltYWdlX3Jvb3RmcykKKyAgICBpZiBub3QgbToKKyAgICAgICAgcHJpbnQgIkNhbid0IGdldCBXT1JLRElSLiIKKyAgICAgICAgcmV0dXJuIDEKKworICAgIHdvcmtkaXIgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCBtLmdyb3VwKDEpKQorCisgICAgIyB3ZSBvbmx5IGRlYWwgdGhlIGRpcnMgb2YgY3VycmVudCBhcmNoLCB0b3RhbCBudW1iZXJzIG9mIGRpcnMgYXJlIDYKKyAgICBjdXJfYXJjaF9kaXJzID0gW20uZ3JvdXAoMildCisgICAgZ2V0X2N1cl9hcmNoX2RpcnMod29ya2RpciwgY3VyX2FyY2hfZGlycykKKworICAgIGZvciB3b3Jrcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh3b3JrZGlyKToKKyAgICAgICAgIyBGb3IgdGhlIGZpbGVzLCB0aGV5IHNob3VsZCBOT1QgZXhpc3QgaW4gV09SS0RJUi4gUmVtb3ZlIHRoZW0uCisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgb2Jzb2xldGVfZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHdvcmtyb290LCBmKSkKKworICAgICAgICBmb3IgZCBpbiBkaXJzOgorICAgICAgICAgICAgaWYgZCBub3QgaW4gY3VyX2FyY2hfZGlyczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmb3IgcGtncm9vdCwgcGtnZGlycywgZmlsZW5hbWVzIGluIG9zLndhbGsob3MucGF0aC5qb2luKHdvcmtyb290LCBkKSk6CisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICBvYnNvbGV0ZV9kaXJzLmFwcGVuZChvcy5wYXRoLmpvaW4ocGtncm9vdCwgZikpCisKKyAgICAgICAgICAgICAgICBmb3IgcGtnZGlyIGluIHNvcnRlZChwa2dkaXJzKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGtnZGlyIG5vdCBpbiBwa2dfY3VyX2RpcnM6CisgICAgICAgICAgICAgICAgICAgICAgICBvYnNvbGV0ZV9kaXJzLmFwcGVuZChvcy5wYXRoLmpvaW4ocGtncm9vdCwgcGtnZGlyKSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB2ZXJyb290LCB2ZXJkaXJzLCB2ZXJmaWxlcyBpbiBvcy53YWxrKG9zLnBhdGguam9pbihwa2dyb290LCBwa2dkaXIpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiB2ZXJmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Jzb2xldGVfZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHBrZ3Jvb3QsIGYpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB2IGluIHNvcnRlZCh2ZXJkaXJzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2IG5vdCBpbiBwa2dfY3VyX2RpcnNbcGtnZGlyXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Jzb2xldGVfZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHBrZ3Jvb3QsIHBrZ2RpciwgdikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgICMganVzdCBwcm9jZXNzIHRoZSB0b3AgZGlyIG9mIGV2ZXJ5IHBhY2thZ2UgdW5kZXIgdG1wL3dvcmsvKi8sCisgICAgICAgICAgICAgICAgIyB0aGVuIGp1bXAgb3V0IG9mIHRoZSBhYm92ZSBvcy53YWxrKCkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgaXQgaXMgY29udmVuaWVudCB0byB1c2Ugb3Mud2FsaygpIHRvIGdldCBkaXJzIGFuZCBmaWxlcyBhdCBzYW1lIHRpbWUKKyAgICAgICAgIyBib3RoIG9mIHRoZW0gaGF2ZSBiZWVuIGRlYWxlZCBpbiB0aGUgbG9vcCwgc28ganVtcCBvdXQKKyAgICAgICAgYnJlYWsKKworICAgIGZvciBkIGluIG9ic29sZXRlX2RpcnM6CisgICAgICAgIHByaW50ICJEZWxldGluZyAlcyIgJSBkCisgICAgICAgIHNodXRpbC5ybXRyZWUoZCwgVHJ1ZSkKKworICAgIGlmIGxlbihvYnNvbGV0ZV9kaXJzKToKKyAgICAgICAgcHJpbnQgJ1xuVG90YWwgJWQgaXRlbXMuJyAlIGxlbihvYnNvbGV0ZV9kaXJzKQorICAgIGVsc2U6CisgICAgICAgIHByaW50ICdcbk5vIG9ic29sZXRlIGRpcmVjdG9yeSBmb3VuZCB1bmRlciAlcy4nICUgd29ya2RpcgorCisgICAgcmV0dXJuIDAKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDIKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDMpCisgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbWJvLWxheWVyIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbWJvLWxheWVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc0MzVhMTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29tYm8tbGF5ZXIKQEAgLTAsMCArMSw5NDkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IDIwMTEgSW50ZWwgQ29ycG9yYXRpb24KKyMgQXV0aG9yZWQtYnk6ICBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorIyAgICAgICAgICAgICAgIFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AaW50ZWwuY29tPgorIyAgICAgICAgICAgICAgIFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZm5tYXRjaAoraW1wb3J0IG9zLCBzeXMKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBDb25maWdQYXJzZXIKK2ltcG9ydCByZQorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitfX3ZlcnNpb25fXyA9ICIwLjIuMSIKKworZGVmIGxvZ2dlcl9jcmVhdGUoKToKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiIikKKyAgICBsb2dnZXJoYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKKyAgICBsb2dnZXJoYW5kbGVyLnNldEZvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcigiWyUoYXNjdGltZSlzXSAlKG1lc3NhZ2UpcyIsIiVIOiVNOiVTIikpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIobG9nZ2VyaGFuZGxlcikKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIHJldHVybiBsb2dnZXIKKworbG9nZ2VyID0gbG9nZ2VyX2NyZWF0ZSgpCisKK2RlZiBnZXRfY3VycmVudF9icmFuY2gocmVwb2Rpcj1Ob25lKToKKyAgICB0cnk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocmVwb2RpciBpZiByZXBvZGlyIGVsc2UgJycsICIuZ2l0IikpOgorICAgICAgICAgICAgIyBSZXBvIG5vdCBjcmVhdGVkIHlldCAoaS5lLiBkdXJpbmcgaW5pdCkgc28ganVzdCBhc3N1bWUgbWFzdGVyCisgICAgICAgICAgICByZXR1cm4gIm1hc3RlciIKKyAgICAgICAgYnJhbmNobmFtZSA9IHJ1bmNtZCgiZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+L2Rldi9udWxsIiwgcmVwb2Rpcikuc3RyaXAoKQorICAgICAgICBpZiBicmFuY2huYW1lLnN0YXJ0c3dpdGgoInJlZnMvaGVhZHMvIik6CisgICAgICAgICAgICBicmFuY2huYW1lID0gYnJhbmNobmFtZVsxMTpdCisgICAgICAgIHJldHVybiBicmFuY2huYW1lCisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOgorICAgICAgICByZXR1cm4gIiIKKworY2xhc3MgQ29uZmlndXJhdGlvbihvYmplY3QpOgorICAgICIiIgorICAgIE1hbmFnZXMgdGhlIGNvbmZpZ3VyYXRpb24KKworICAgIEZvciBhbiBleGFtcGxlIGNvbmZpZyBmaWxlLCBzZWUgY29tYm8tbGF5ZXIuY29uZi5leGFtcGxlCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIGZvciBrZXksIHZhbCBpbiBvcHRpb25zLl9fZGljdF9fLml0ZW1zKCk6CisgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGtleSwgdmFsKQorCisgICAgICAgIGRlZiByZWFkc2VjdGlvbihwYXJzZXIsIHNlY3Rpb24sIHJlcG8pOgorICAgICAgICAgICAgZm9yIChuYW1lLCB2YWx1ZSkgaW4gcGFyc2VyLml0ZW1zKHNlY3Rpb24pOgorICAgICAgICAgICAgICAgIGlmIHZhbHVlLnN0YXJ0c3dpdGgoIkAiKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXBvc1tyZXBvXVtuYW1lXSA9IGV2YWwodmFsdWUuc3RyaXAoIkAiKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIEFwcGx5IHNwZWNpYWwgdHlwZSB0cmFuc2Zvcm1hdGlvbnMgZm9yIHNvbWUgcHJvcGVydGllcy4KKyAgICAgICAgICAgICAgICAgICAgIyBUeXBlIG1hdGNoZXMgdGhlIFJhd0NvbmZpZ1BhcnNlci5nZXQqKCkgbWV0aG9kcy4KKyAgICAgICAgICAgICAgICAgICAgdHlwZXMgPSB7J3NpZ25vZmYnOiAnYm9vbGVhbid9CisgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gdHlwZXM6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIocGFyc2VyLCAnZ2V0JyArIHR5cGVzW25hbWVdKShzZWN0aW9uLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcG9zW3JlcG9dW25hbWVdID0gdmFsdWUKKworICAgICAgICBkZWYgcmVhZGdsb2JhbHNlY3Rpb24ocGFyc2VyLCBzZWN0aW9uKToKKyAgICAgICAgICAgIGZvciAobmFtZSwgdmFsdWUpIGluIHBhcnNlci5pdGVtcyhzZWN0aW9uKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJjb21taXRfbXNnIjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21taXRfbXNnX3RlbXBsYXRlID0gdmFsdWUKKworICAgICAgICBsb2dnZXIuZGVidWcoIkxvYWRpbmcgY29uZmlnIGZpbGUgJXMiICUgc2VsZi5jb25mZmlsZSkKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyKCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuY29uZmZpbGUpIGFzIGY6CisgICAgICAgICAgICBzZWxmLnBhcnNlci5yZWFkZnAoZikKKworICAgICAgICAjIGluaXRpYWxpemUgZGVmYXVsdCB2YWx1ZXMKKyAgICAgICAgc2VsZi5jb21taXRfbXNnX3RlbXBsYXRlID0gIkF1dG9tYXRpYyBjb21taXQgdG8gdXBkYXRlIGxhc3RfcmV2aXNpb24iCisKKyAgICAgICAgc2VsZi5yZXBvcyA9IHt9CisgICAgICAgIGZvciByZXBvIGluIHNlbGYucGFyc2VyLnNlY3Rpb25zKCk6CisgICAgICAgICAgICBpZiByZXBvID09ICJjb21iby1sYXllci1zZXR0aW5ncyI6CisgICAgICAgICAgICAgICAgIyBzcGVjaWFsIGhhbmRsaW5nIGZvciBnbG9iYWwgc2V0dGluZ3MKKyAgICAgICAgICAgICAgICByZWFkZ2xvYmFsc2VjdGlvbihzZWxmLnBhcnNlciwgcmVwbykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5yZXBvc1tyZXBvXSA9IHt9CisgICAgICAgICAgICAgICAgcmVhZHNlY3Rpb24oc2VsZi5wYXJzZXIsIHJlcG8sIHJlcG8pCisKKyAgICAgICAgIyBMb2FkIGxvY2FsIGNvbmZpZ3VyYXRpb24sIGlmIGF2YWlsYWJsZQorICAgICAgICBzZWxmLmxvY2FsY29uZmZpbGUgPSBOb25lCisgICAgICAgIHNlbGYubG9jYWxwYXJzZXIgPSBOb25lCisgICAgICAgIHNlbGYuY29tYm9icmFuY2ggPSBOb25lCisgICAgICAgIGlmIHNlbGYuY29uZmZpbGUuZW5kc3dpdGgoJy5jb25mJyk6CisgICAgICAgICAgICBsY2ZpbGUgPSBzZWxmLmNvbmZmaWxlLnJlcGxhY2UoJy5jb25mJywgJy1sb2NhbC5jb25mJykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxjZmlsZSk6CisgICAgICAgICAgICAgICAgIyBSZWFkIGNvbWJvIGxheWVyIGJyYW5jaAorICAgICAgICAgICAgICAgIHNlbGYuY29tYm9icmFuY2ggPSBnZXRfY3VycmVudF9icmFuY2goKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiQ29tYm8gbGF5ZXIgYnJhbmNoIGlzICVzIiAlIHNlbGYuY29tYm9icmFuY2gpCisKKyAgICAgICAgICAgICAgICBzZWxmLmxvY2FsY29uZmZpbGUgPSBsY2ZpbGUKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIkxvYWRpbmcgbG9jYWwgY29uZmlnIGZpbGUgJXMiICUgc2VsZi5sb2NhbGNvbmZmaWxlKQorICAgICAgICAgICAgICAgIHNlbGYubG9jYWxwYXJzZXIgPSBDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyKCkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5sb2NhbGNvbmZmaWxlKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvY2FscGFyc2VyLnJlYWRmcChmKQorCisgICAgICAgICAgICAgICAgZm9yIHNlY3Rpb24gaW4gc2VsZi5sb2NhbHBhcnNlci5zZWN0aW9ucygpOgorICAgICAgICAgICAgICAgICAgICBpZiAnfCcgaW4gc2VjdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb252YWxzID0gc2VjdGlvbi5zcGxpdCgnfCcpCisgICAgICAgICAgICAgICAgICAgICAgICByZXBvID0gc2VjdGlvbnZhbHNbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlY3Rpb252YWxzWzFdICE9IHNlbGYuY29tYm9icmFuY2g6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG8gPSBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGlmIHJlcG8gaW4gc2VsZi5yZXBvczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRzZWN0aW9uKHNlbGYubG9jYWxwYXJzZXIsIHNlY3Rpb24sIHJlcG8pCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHJlcG8sIG9wdGlvbiwgdmFsdWUsIGluaXRtb2RlPUZhbHNlKToKKyAgICAgICAgIyBJZiB0aGUgbWFpbiBjb25maWcgaGFzIHRoZSBvcHRpb24gYWxyZWFkeSwgdGhhdCBpcyB3aGF0IHdlCisgICAgICAgICMgYXJlIGV4cGVjdGVkIHRvIG1vZGlmeS4KKyAgICAgICAgaWYgc2VsZi5sb2NhbHBhcnNlciBhbmQgbm90IHNlbGYucGFyc2VyLmhhc19vcHRpb24ocmVwbywgb3B0aW9uKToKKyAgICAgICAgICAgIHBhcnNlciA9IHNlbGYubG9jYWxwYXJzZXIKKyAgICAgICAgICAgIHNlY3Rpb24gPSAiJXN8JXMiICUgKHJlcG8sIHNlbGYuY29tYm9icmFuY2gpCisgICAgICAgICAgICBjb25mZmlsZSA9IHNlbGYubG9jYWxjb25mZmlsZQorICAgICAgICAgICAgaWYgaW5pdG1vZGUgYW5kIG5vdCBwYXJzZXIuaGFzX3NlY3Rpb24oc2VjdGlvbik6CisgICAgICAgICAgICAgICAgcGFyc2VyLmFkZF9zZWN0aW9uKHNlY3Rpb24pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLnBhcnNlcgorICAgICAgICAgICAgc2VjdGlvbiA9IHJlcG8KKyAgICAgICAgICAgIGNvbmZmaWxlID0gc2VsZi5jb25mZmlsZQorICAgICAgICBwYXJzZXIuc2V0KHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUpCisgICAgICAgIHdpdGggb3Blbihjb25mZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgcGFyc2VyLndyaXRlKGYpCisgICAgICAgIHNlbGYucmVwb3NbcmVwb11bb3B0aW9uXSA9IHZhbHVlCisKKyAgICBkZWYgc2FuaXR5X2NoZWNrKHNlbGYsIGluaXRtb2RlPUZhbHNlKToKKyAgICAgICAgcmVxdWlyZWRfb3B0aW9ucz1bInNyY191cmkiLCAibG9jYWxfcmVwb19kaXIiLCAiZGVzdF9kaXIiLCAibGFzdF9yZXZpc2lvbiJdCisgICAgICAgIGlmIGluaXRtb2RlOgorICAgICAgICAgICAgcmVxdWlyZWRfb3B0aW9ucy5yZW1vdmUoImxhc3RfcmV2aXNpb24iKQorICAgICAgICBtc2cgPSAiIgorICAgICAgICBtaXNzaW5nX29wdGlvbnMgPSBbXQorICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLnJlcG9zOgorICAgICAgICAgICAgZm9yIG9wdGlvbiBpbiByZXF1aXJlZF9vcHRpb25zOgorICAgICAgICAgICAgICAgIGlmIG9wdGlvbiBub3QgaW4gc2VsZi5yZXBvc1tuYW1lXToKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gIiVzXG5PcHRpb24gJXMgaXMgbm90IGRlZmluZWQgZm9yIGNvbXBvbmVudCAlcyIgJShtc2csIG9wdGlvbiwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgbWlzc2luZ19vcHRpb25zLmFwcGVuZChvcHRpb24pCisgICAgICAgICAgICAjIFNhbml0aXplIGRlc3RfZGlyIHNvIHRoYXQgd2UgZG8gbm90IGhhdmUgdG8gZGVhbCB3aXRoIGVkZ2UgY2FzZXMKKyAgICAgICAgICAgICMgKHVuc2V0LCBlbXB0eSBzdHJpbmcsIGRvdWJsZSBzbGFzaGVzKSBpbiB0aGUgcmVzdCBvZiB0aGUgY29kZS4KKyAgICAgICAgICAgICMgSXQgbm90IGJlaW5nIHNldCB3aWxsIHN0aWxsIGJlIGZsYWdnZWQgYXMgZXJyb3IgYmVjYXVzZSBpdCBpcworICAgICAgICAgICAgIyBsaXN0ZWQgYXMgcmVxdWlyZWQgb3B0aW9uIGFib3ZlOyB0aGF0IGNvdWxkIGJlIGNoYW5nZWQgbm93LgorICAgICAgICAgICAgZGVzdF9kaXIgPSBvcy5wYXRoLm5vcm1wYXRoKHNlbGYucmVwb3NbbmFtZV0uZ2V0KCJkZXN0X2RpciIsICIuIikpCisgICAgICAgICAgICBzZWxmLnJlcG9zW25hbWVdWyJkZXN0X2RpciJdID0gIi4iIGlmIG5vdCBkZXN0X2RpciBlbHNlIGRlc3RfZGlyCisgICAgICAgIGlmIG1zZyAhPSAiIjoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiY29uZmlndXJhdGlvbiBmaWxlICVzIGhhcyB0aGUgZm9sbG93aW5nIGVycm9yOiAlcyIgJSAoc2VsZi5jb25mZmlsZSxtc2cpKQorICAgICAgICAgICAgaWYgc2VsZi5sb2NhbGNvbmZmaWxlIGFuZCAnbGFzdF9yZXZpc2lvbicgaW4gbWlzc2luZ19vcHRpb25zOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigibG9jYWwgY29uZmlndXJhdGlvbiBmaWxlICVzIG1heSBiZSBtaXNzaW5nIGNvbmZpZ3VyYXRpb24gZm9yIGNvbWJvIGJyYW5jaCAlcyIgJSAoc2VsZi5sb2NhbGNvbmZmaWxlLCBzZWxmLmNvbWJvYnJhbmNoKSkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgIyBmaWx0ZXJkaWZmIGlzIHJlcXVpcmVkIGJ5IGFjdGlvbl9zcGxpdHBhdGNoLCBzbyBjaGVjayBpdHMgYXZhaWxhYmlsaXR5CisgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbCgid2hpY2ggZmlsdGVyZGlmZiA+IC9kZXYvbnVsbCAyPiYxIiwgc2hlbGw9VHJ1ZSkgIT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRVJST1I6IHBhdGNodXRpbHMgcGFja2FnZSBpcyBtaXNzaW5nLCBwbGVhc2UgaW5zdGFsbCBpdCAoZS5nLiAjIGFwdC1nZXQgaW5zdGFsbCBwYXRjaHV0aWxzKSIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCitkZWYgcnVuY21kKGNtZCxkZXN0ZGlyPU5vbmUscHJpbnRlcnI9VHJ1ZSxvdXQ9Tm9uZSk6CisgICAgIiIiCisgICAgICAgIGV4ZWN1dGUgY29tbWFuZCwgcmFpc2UgQ2FsbGVkUHJvY2Vzc0Vycm9yIGlmIGZhaWwKKyAgICAgICAgcmV0dXJuIG91dHB1dCBpZiBzdWNjZWVkCisgICAgIiIiCisgICAgbG9nZ2VyLmRlYnVnKCJydW4gY21kICclcycgaW4gJXMiICUgKGNtZCwgb3MuZ2V0Y3dkKCkgaWYgZGVzdGRpciBpcyBOb25lIGVsc2UgZGVzdGRpcikpCisgICAgaWYgbm90IG91dDoKKyAgICAgICAgb3V0ID0gb3MudG1wZmlsZSgpCisgICAgICAgIGVyciA9IG91dAorICAgIGVsc2U6CisgICAgICAgIGVyciA9IG9zLnRtcGZpbGUoKQorICAgIHRyeToKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKGNtZCwgc3Rkb3V0PW91dCwgc3RkZXJyPWVyciwgY3dkPWRlc3RkaXIsIHNoZWxsPWlzaW5zdGFuY2UoY21kLCBzdHIpKQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcixlOgorICAgICAgICBlcnIuc2VlaygwKQorICAgICAgICBpZiBwcmludGVycjoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXMiICUgZXJyLnJlYWQoKSkKKyAgICAgICAgcmFpc2UgZQorCisgICAgZXJyLnNlZWsoMCkKKyAgICBvdXRwdXQgPSBlcnIucmVhZCgpCisgICAgbG9nZ2VyLmRlYnVnKCJvdXRwdXQ6ICVzIiAlIG91dHB1dCApCisgICAgcmV0dXJuIG91dHB1dAorCitkZWYgYWN0aW9uX2luaXQoY29uZiwgYXJncyk6CisgICAgIiIiCisgICAgICAgIENsb25lIGNvbXBvbmVudCByZXBvc2l0b3JpZXMKKyAgICAgICAgQ2hlY2sgZ2l0IGlzIGluaXRpYWxpc2VkOyBpZiBub3QsIGNvcHkgaW5pdGlhbCBkYXRhIGZyb20gY29tcG9uZW50IHJlcG9zCisgICAgIiIiCisgICAgZm9yIG5hbWUgaW4gY29uZi5yZXBvczoKKyAgICAgICAgbGRpciA9IGNvbmYucmVwb3NbbmFtZV1bJ2xvY2FsX3JlcG9fZGlyJ10KKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxkaXIpOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oImNsb25pbmcgJXMgdG8gJXMiICUoY29uZi5yZXBvc1tuYW1lXVsnc3JjX3VyaSddLCBsZGlyKSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbCgiZ2l0IGNsb25lICVzICVzIiAlIChjb25mLnJlcG9zW25hbWVdWydzcmNfdXJpJ10sIGxkaXIpLCBzaGVsbD1UcnVlKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygiLmdpdCIpOgorICAgICAgICBydW5jbWQoImdpdCBpbml0IikKKyAgICAgICAgaWYgY29uZi5oaXN0b3J5OgorICAgICAgICAgICAgIyBOZWVkIGEgY29tbW9uIHJlZiBmb3IgYWxsIHRyZWVzLgorICAgICAgICAgICAgcnVuY21kKCdnaXQgY29tbWl0IC1tICJpbml0aWFsIGVtcHR5IGNvbW1pdCIgLS1hbGxvdy1lbXB0eScpCisgICAgICAgICAgICBzdGFydHJldiA9IHJ1bmNtZCgnZ2l0IHJldi1wYXJzZSBtYXN0ZXInKS5zdHJpcCgpCisKKyAgICAgICAgZm9yIG5hbWUgaW4gY29uZi5yZXBvczoKKyAgICAgICAgICAgIHJlcG8gPSBjb25mLnJlcG9zW25hbWVdCisgICAgICAgICAgICBsZGlyID0gcmVwb1snbG9jYWxfcmVwb19kaXInXQorICAgICAgICAgICAgYnJhbmNoID0gcmVwby5nZXQoJ2JyYW5jaCcsICJtYXN0ZXIiKQorICAgICAgICAgICAgbGFzdHJldiA9IHJlcG8uZ2V0KCdsYXN0X3JldmlzaW9uJywgTm9uZSkKKyAgICAgICAgICAgIGlmIGxhc3RyZXYgYW5kIGxhc3RyZXYgIT0gIkhFQUQiOgorICAgICAgICAgICAgICAgIGluaXRpYWxyZXYgPSBsYXN0cmV2CisgICAgICAgICAgICAgICAgaWYgYnJhbmNoOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY2hlY2tfcmV2X2JyYW5jaChuYW1lLCBsZGlyLCBsYXN0cmV2LCBicmFuY2gpOgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ29weWluZyBkYXRhIGZyb20gJXMgYXQgc3BlY2lmaWVkIHJldmlzaW9uICVzLi4uIiAlIChuYW1lLCBsYXN0cmV2KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGFzdHJldiA9IE5vbmUKKyAgICAgICAgICAgICAgICBpbml0aWFscmV2ID0gYnJhbmNoCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNvcHlpbmcgZGF0YSBmcm9tICVzLi4uIiAlIG5hbWUpCisgICAgICAgICAgICAjIFNhbml0eSBjaGVjayBpbml0aWFscmV2IGFuZCB0dXJuIGl0IGludG8gaGFzaCAocmVxdWlyZWQgZm9yIGNvcHlpbmcgaGlzdG9yeSwKKyAgICAgICAgICAgICMgYmVjYXVzZSByZXNvbHZpbmcgYSBuYW1lIHJlZiBvbmx5IHdvcmtzIGluIHRoZSBjb21wb25lbnQgcmVwbykuCisgICAgICAgICAgICByZXYgPSBydW5jbWQoJ2dpdCByZXYtcGFyc2UgJXMnICUgaW5pdGlhbHJldiwgbGRpcikuc3RyaXAoKQorICAgICAgICAgICAgaWYgcmV2ICE9IGluaXRpYWxyZXY6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZWZzID0gcnVuY21kKCdnaXQgc2hvdy1yZWYgLXMgJXMnICUgaW5pdGlhbHJldiwgbGRpcikuc3BsaXQoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHNldChyZWZzKSkgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBIYXBwZW5zIGZvciBleGFtcGxlIHdoZW4gY29uZmlndXJlZCB0byB0cmFjaworICAgICAgICAgICAgICAgICAgICAgICAgIyAibWFzdGVyIiBhbmQgdGhlcmUgaXMgYSByZWZzL2hlYWRzL21hc3Rlci4gVGhlCisgICAgICAgICAgICAgICAgICAgICAgICAjIHRyYWRpdGlvbmFsIGJlaGF2aW9yIGZyb20gImdpdCBhcmNoaXZlIiAocHJlc2VydmVkCisgICAgICAgICAgICAgICAgICAgICAgICAjIGhlcmUpIGl0IHRvIGNob29zZSB0aGUgZmlyc3Qgb25lLiBUaGlzIG1pZ2h0IG5vdCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBpbnRlbmRlZCwgc28gYXQgbGVhc3Qgd2FybiBhYm91dCBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCIlczogaW5pdGlhbCByZXZpc2lvbiAnJXMnIG5vdCB1bmlxdWUsIHBpY2tpbmcgcmVzdWx0IG9mIHJldi1wYXJzZSA9ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSwgaW5pdGlhbHJldiwgcmVmc1swXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFscmV2ID0gcmV2CisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAjIHNob3ctcmVmIGZhaWxzIGZvciBoYXNoZXMuIFNraXAgdGhlIHNhbml0eSB3YXJuaW5nIGluIHRoYXQgY2FzZS4KKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGluaXRpYWxyZXYgPSByZXYKKyAgICAgICAgICAgIGRlc3RfZGlyID0gcmVwb1snZGVzdF9kaXInXQorICAgICAgICAgICAgaWYgZGVzdF9kaXIgIT0gIi4iOgorICAgICAgICAgICAgICAgIGV4dHJhY3RfZGlyID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBkZXN0X2RpcikKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZXh0cmFjdF9kaXIpOgorICAgICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhleHRyYWN0X2RpcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXh0cmFjdF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICAgICAgZmlsZV9maWx0ZXIgPSByZXBvLmdldCgnZmlsZV9maWx0ZXInLCAiIikKKyAgICAgICAgICAgIGV4Y2x1ZGVfcGF0dGVybnMgPSByZXBvLmdldCgnZmlsZV9leGNsdWRlJywgJycpLnNwbGl0KCkKKyAgICAgICAgICAgIGRlZiBjb3B5X3NlbGVjdGVkX2ZpbGVzKGluaXRpYWxyZXYsIGV4dHJhY3RfZGlyLCBmaWxlX2ZpbHRlciwgZXhjbHVkZV9wYXR0ZXJucywgbGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcj0iIik6CisgICAgICAgICAgICAgICAgIyBXaGVuIHdvcmtpbmcgaW5zaWRlIGEgZmlsdGVyZWQgYnJhbmNoIHdoaWNoIGhhZCB0aGUKKyAgICAgICAgICAgICAgICAjIGZpbGVzIGFscmVhZHkgbW92ZWQsIHdlIG5lZWQgdG8gcHJlcGVuZCB0aGUKKyAgICAgICAgICAgICAgICAjIHN1YmRpcmVjdG9yeSB0byBhbGwgZmlsdGVycywgb3RoZXJ3aXNlIHRoZXkgd291bGQKKyAgICAgICAgICAgICAgICAjIG5vdCBtYXRjaC4KKyAgICAgICAgICAgICAgICBpZiBzdWJkaXIgPT0gJy4nOgorICAgICAgICAgICAgICAgICAgICBzdWJkaXIgPSAnJworICAgICAgICAgICAgICAgIGVsaWYgc3ViZGlyOgorICAgICAgICAgICAgICAgICAgICBzdWJkaXIgPSBvcy5wYXRoLm5vcm1wYXRoKHN1YmRpcikKKyAgICAgICAgICAgICAgICAgICAgZmlsZV9maWx0ZXIgPSAnICcuam9pbihbc3ViZGlyICsgJy8nICsgeCBmb3IgeCBpbiBmaWxlX2ZpbHRlci5zcGxpdCgpXSkKKyAgICAgICAgICAgICAgICAgICAgZXhjbHVkZV9wYXR0ZXJucyA9IFtzdWJkaXIgKyAnLycgKyB4IGZvciB4IGluIGV4Y2x1ZGVfcGF0dGVybnNdCisgICAgICAgICAgICAgICAgIyBUbyBoYW5kbGUgYm90aCBjYXNlcywgd2UgY2QgaW50byB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgIyBkaXJlY3RvcnkgYW5kIG9wdGlvbmFsbHkgdGVsbCB0YXIgdG8gc3RyaXAgdGhlIHBhdGgKKyAgICAgICAgICAgICAgICAjIHByZWZpeCB3aGVuIHRoZSBmaWxlcyB3ZXJlIGFscmVhZHkgbW92ZWQuCisgICAgICAgICAgICAgICAgc3ViZGlyX2NvbXBvbmVudHMgPSBsZW4oc3ViZGlyLnNwbGl0KG9zLnBhdGguc2VwKSkgaWYgc3ViZGlyIGVsc2UgMAorICAgICAgICAgICAgICAgIHN0cmlwPSgnLS1zdHJpcC1jb21wb25lbnRzPSVkJyAlIHN1YmRpcl9jb21wb25lbnRzKSBpZiBzdWJkaXIgZWxzZSAnJworICAgICAgICAgICAgICAgICMgVE9ETzogZmlsZV9maWx0ZXIgd2lsZCBjYXJkcyBkbyBub3Qgd29yayAoYW5kIGhhdmVuJ3Qgd29ya2VkIGJlZm9yZSBlaXRoZXIpLCBiZWNhdXNlCisgICAgICAgICAgICAgICAgIyBhKSBHTlUgdGFyIHJlcXVpcmVzIGEgLS13aWxkY2FyZHMgcGFyYW1ldGVyIGJlZm9yZSB0dXJuaW5nIG9uIHdpbGQgY2FyZCBtYXRjaGluZy4KKyAgICAgICAgICAgICAgICAjIGIpIFRoZSBzZW1hbnRpYyBpcyBub3QgYXMgaW50ZW5kZW5kIChzcmMvKi5jIGFsc28gbWF0Y2hlcyBzcmMvZm9vL2Jhci5jLAorICAgICAgICAgICAgICAgICMgICAgaW4gY29udHJhc3QgdG8gdGhlIG90aGVyIHVzZSBvZiBmaWxlX2ZpbHRlciBhcyBwYXJhbWV0ZXIgb2YgImdpdCBhcmNoaXZlIgorICAgICAgICAgICAgICAgICMgICAgd2hlcmUgaXQgb25seSBtYXRjaGVzIC5jIGZpbGVzIGRpcmVjdGx5IGluIHNyYykuCisgICAgICAgICAgICAgICAgZmlsZXMgPSBydW5jbWQoImdpdCBhcmNoaXZlICVzICVzIHwgdGFyIC14IC12ICVzIC1DICVzICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluaXRpYWxyZXYsIHN1YmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXAsIGV4dHJhY3RfZGlyLCBmaWxlX2ZpbHRlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGRpcikKKyAgICAgICAgICAgICAgICBpZiBleGNsdWRlX3BhdHRlcm5zOgorICAgICAgICAgICAgICAgICAgICAjIEltcGxlbWVudCBmaWxlIHJlbW92YWwgYnkgbGV0dGluZyB0YXIgY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAjIGZpbGUgYW5kIHRoZW4gZGVsZXRpbmcgaXQgaW4gdGhlIGZpbGUgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICMgYWdhaW4uIFVzZXMgdGhlIGxpc3Qgb2YgZmlsZXMgY3JlYXRlZCBieSB0YXIgKGVhc2llcgorICAgICAgICAgICAgICAgICAgICAjIHRoYW4gd2Fsa2luZyB0aGUgdHJlZSkuCisgICAgICAgICAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhdHRlcm4gaW4gZXhjbHVkZV9wYXR0ZXJuczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2goZmlsZSwgcGF0dGVybik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4oKihbZXh0cmFjdF9kaXJdICsgWycuLiddICogc3ViZGlyX2NvbXBvbmVudHMgKyBbZmlsZV0pKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgbm90IGNvbmYuaGlzdG9yeToKKyAgICAgICAgICAgICAgICBjb3B5X3NlbGVjdGVkX2ZpbGVzKGluaXRpYWxyZXYsIGV4dHJhY3RfZGlyLCBmaWxlX2ZpbHRlciwgZXhjbHVkZV9wYXR0ZXJucywgbGRpcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBGaXJzdCBmZXRjaCByZW1vdGUgaGlzdG9yeSBpbnRvIGxvY2FsIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgIyBXZSBuZWVkIGEgcmVmIGZvciB0aGF0LCBzbyBlbnN1cmUgdGhhdCB0aGVyZSBpcyBvbmUuCisgICAgICAgICAgICAgICAgcmVmbmFtZSA9ICJjb21iby1sYXllci1pbml0LSVzIiAlIG5hbWUKKyAgICAgICAgICAgICAgICBydW5jbWQoImdpdCBicmFuY2ggLWYgJXMgJXMiICUgKHJlZm5hbWUsIGluaXRpYWxyZXYpLCBsZGlyKQorICAgICAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IGZldGNoICVzICVzIiAlIChsZGlyLCByZWZuYW1lKSkKKyAgICAgICAgICAgICAgICBydW5jbWQoImdpdCBicmFuY2ggLUQgJXMiICUgcmVmbmFtZSwgbGRpcikKKyAgICAgICAgICAgICAgICAjIE1ha2UgdGhhdCB0aGUgaGVhZCByZXZpc2lvbi4KKyAgICAgICAgICAgICAgICBydW5jbWQoImdpdCBjaGVja291dCAtYiAlcyAlcyIgJSAobmFtZSwgaW5pdGlhbHJldikpCisgICAgICAgICAgICAgICAgIyBPcHRpb25hbDogY3V0IHRoZSBoaXN0b3J5IGJ5IHJlcGxhY2luZyB0aGUgZ2l2ZW4KKyAgICAgICAgICAgICAgICAjIHN0YXJ0IHBvaW50KHMpIHdpdGggY29tbWl0cyBwcm92aWRpbmcgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAjIGNvbnRlbnQgKGFrYSB0cmVlKSwgYnV0IHdpdGggY29tbWl0IGluZm9ybWF0aW9uIHRoYXQKKyAgICAgICAgICAgICAgICAjIG1ha2VzIGl0IGNsZWFyIHRoYXQgdGhpcyBpcyBhbiBhcnRpZmljYWxseSBjcmVhdGVkCisgICAgICAgICAgICAgICAgIyBjb21taXQgYW5kIG5vdGhpbmcgdGhlIG9yaWdpbmFsIGF1dGhvcnMgaGFkIGFueXRoaW5nCisgICAgICAgICAgICAgICAgIyB0byBkbyB3aXRoLgorICAgICAgICAgICAgICAgIHNpbmNlX3JldiA9IHJlcG8uZ2V0KCdzaW5jZV9yZXZpc2lvbicsICcnKQorICAgICAgICAgICAgICAgIGlmIHNpbmNlX3JldjoKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0dGVyID0gcnVuY21kKCdnaXQgdmFyIEdJVF9BVVRIT1JfSURFTlQnKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICMgU2FtZSB0aW1lIHN0YW1wLCBubyBuYW1lLgorICAgICAgICAgICAgICAgICAgICBhdXRob3IgPSByZS5zdWIoJy4qIChcZCsgWystXVxkKyknLCByJ3Vua25vd24gPHVua25vd24+IFwxJywgY29tbWl0dGVyKQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnYXV0aG9yICVzJyAlIGF1dGhvcikKKyAgICAgICAgICAgICAgICAgICAgZm9yIHJldiBpbiBzaW5jZV9yZXYuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgUmVzb2x2ZSBpbiBjb21wb25lbnQgcmVwby4uLgorICAgICAgICAgICAgICAgICAgICAgICAgcmV2ID0gcnVuY21kKCdnaXQgbG9nIC0tb25lbGluZSAtLW5vLWFiYnJldi1jb21taXQgLW4xICVzJyAlIHJldiwgbGRpcikuc3BsaXQoKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgIyAuLi4gYW5kIHRoZW4gZ2V0IHRoZSB0cmVlIGluIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgb25lLiBUaGUgY29tbWl0IHNob3VsZCBiZSBpbiBib3RoIHJlcG9zIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIHNhbWUgdHJlZSwgYnV0IGJldHRlciBjaGVjayBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgdHJlZSA9IHJ1bmNtZCgnZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiUlVCAlcycgJSByZXYpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkgYXMgZWRpdG9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci53cml0ZSgnJydjYXQgPiQxIDw8RU9GCit0cmVlICVzCithdXRob3IgJXMKK2NvbW1pdHRlciAlcworCislczogc3F1YXNoZWQgaW1wb3J0IG9mIGNvbXBvbmVudAorCitUaGlzIGNvbW1pdCBjb3BpZXMgdGhlIGVudGlyZSBzZXQgb2YgZmlsZXMgYXMgZm91bmQgaW4KKyVzICVzCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHByZXZpb3VzIGNvbW1pdHMsIHNlZSB0aGUKK3Vwc3RyZWFtIHJlcG9zaXRvcnkuCisKK0NvbW1pdCBjcmVhdGVkIGJ5IGNvbWJvLWxheWVyLgorRU9GCisnJycgJSAodHJlZSwgYXV0aG9yLCBjb21taXR0ZXIsIG5hbWUsIG5hbWUsIHNpbmNlX3JldikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydHSVRfRURJVE9SJ10gPSAnc2ggJXMnICUgZWRpdG9yLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5jbWQoJ2dpdCByZXBsYWNlIC0tZWRpdCAlcycgJSByZXYpCisKKyAgICAgICAgICAgICAgICAjIE9wdGlvbmFsOiByZXdyaXRlIGhpc3RvcnkgdG8gY2hhbmdlIGNvbW1pdCBtZXNzYWdlcyBvciB0byBtb3ZlIGZpbGVzLgorICAgICAgICAgICAgICAgIGlmICdob29rJyBpbiByZXBvIG9yIGRlc3RfZGlyICE9ICIuIjoKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2JyYW5jaCA9IFsnZ2l0JywgJ2ZpbHRlci1icmFuY2gnLCAnLS1mb3JjZSddCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkgYXMgaG9va3dyYXBwZXI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAnaG9vaycgaW4gcmVwbzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENyZWF0ZSBhIHNoZWxsIHNjcmlwdCB3cmFwcGVyIGFyb3VuZCB0aGUgb3JpZ2luYWwgaG9vayB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjYW4gYmUgdXNlZCBieSBnaXQgZmlsdGVyLWJyYW5jaC4gSG9vayBtYXkgb3IgbWF5IG5vdCBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbiBhYnNvbHV0ZSBwYXRoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2sgPSByZXBvWydob29rJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBob29rID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShjb25mLmNvbmZmaWxlKSwgJy4uJywgaG9vaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSB3cmFwcGVycyB0dXJucyB0aGUgY29tbWl0IG1lc3NhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZyb20gc3RkaW4gaW50byBhIGZha2UgcGF0Y2ggaGVhZGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBnb29kIGVub3VnaCBmb3IgY2hhbmdpbmcgU3ViamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYW5kIGNvbW1pdCBtc2cgYm9keSB3aXRoIG5vcm1hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY29tYm8tbGF5ZXIgaG9va3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9va3dyYXBwZXIud3JpdGUoJycnc2V0IC1lCit0bXBuYW1lPSQobWt0ZW1wKQordHJhcCAicm0gJHRtcG5hbWUiIEVYSVQKK2VjaG8gLW4gJ1N1YmplY3Q6IFtQQVRDSF0gJyA+PiR0bXBuYW1lCitjYXQgPj4kdG1wbmFtZQoraWYgISBbICQodGFpbCAtYyAxICR0bXBuYW1lIHwgb2QgLUEgbiAtdCB4MSkgPT0gJzBhJyBdOyB0aGVuCisgICAgZWNobyA+PiR0bXBuYW1lCitmaQorZWNobyAnLS0tJyA+PiR0bXBuYW1lCislcyAkdG1wbmFtZSAkR0lUX0NPTU1JVCAlcwordGFpbCAtYyArMTggJHRtcG5hbWUgfCBoZWFkIC1jIC00CisnJycgJSAoaG9vaywgbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9va3dyYXBwZXIuZmx1c2goKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9icmFuY2guZXh0ZW5kKFsnLS1tc2ctZmlsdGVyJywgJ2Jhc2ggJXMnICUgaG9va3dyYXBwZXIubmFtZV0pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXN0X2RpciAhPSAiLiI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gb3MucGF0aC5kaXJuYW1lKGRlc3RfZGlyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9ICcuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWF5IHJ1biBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgc28gZG8gbm90IGFzc3VtZSB0aGF0IC5naXQgZXhpc3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9icmFuY2guZXh0ZW5kKFsnLS10cmVlLWZpbHRlcicsICdta2RpciAtcCAuZ2l0L3RtcHRyZWUgJiYgbXYgJChscyAtMSAtYSB8IGdyZXAgLXYgLWUgXi5naXQkIC1lIF4uJCAtZSBeLi4kKSAuZ2l0L3RtcHRyZWUgJiYgbWtkaXIgLXAgJXMgJiYgbXYgLmdpdC90bXB0cmVlICVzJyAlIChwYXJlbnQsIGRlc3RfZGlyKV0pCisgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfYnJhbmNoLmFwcGVuZCgnSEVBRCcpCisgICAgICAgICAgICAgICAgICAgICAgICBydW5jbWQoZmlsdGVyX2JyYW5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bmNtZCgnZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9vcmlnaW5hbC9yZWZzL2hlYWRzLyVzJyAlIG5hbWUpCisgICAgICAgICAgICAgICAgcmVwb1sncmV3cml0dGVuX3JldmlzaW9uJ10gPSBydW5jbWQoJ2dpdCByZXYtcGFyc2UgSEVBRCcpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICByZXBvWydzdHJpcHBlZF9yZXZpc2lvbiddID0gcmVwb1sncmV3cml0dGVuX3JldmlzaW9uJ10KKyAgICAgICAgICAgICAgICAjIE9wdGlvbmFsIGZpbHRlciBmaWxlczogcmVtb3ZlIGV2ZXJ5dGhpbmcgYW5kIHJlLXBvcHVsYXRlIHVzaW5nIHRoZSBub3JtYWwgZmlsdGVyaW5nIGNvZGUuCisgICAgICAgICAgICAgICAgIyBPdmVycmlkZSBhbnkgcG90ZW50aWFsIC5naXRpZ25vcmUuCisgICAgICAgICAgICAgICAgaWYgZmlsZV9maWx0ZXIgb3IgZXhjbHVkZV9wYXR0ZXJuczoKKyAgICAgICAgICAgICAgICAgICAgcnVuY21kKCdnaXQgcm0gLXJmIC4nKQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZXh0cmFjdF9kaXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoZXh0cmFjdF9kaXIpCisgICAgICAgICAgICAgICAgICAgIGNvcHlfc2VsZWN0ZWRfZmlsZXMoJ0hFQUQnLCBleHRyYWN0X2RpciwgZmlsZV9maWx0ZXIsIGV4Y2x1ZGVfcGF0dGVybnMsICcuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJkaXI9ZGVzdF9kaXIpCisgICAgICAgICAgICAgICAgICAgIHJ1bmNtZCgnZ2l0IGFkZCAtLWFsbCAtLWZvcmNlIC4nKQorICAgICAgICAgICAgICAgICAgICBpZiBydW5jbWQoJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgU29tZXRoaW5nIHRvIGNvbW1pdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bmNtZChbJ2dpdCcsICdjb21taXQnLCAnLW0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJyclczogc2VsZWN0IGZpbGUgc3Vic2V0CisKK0ZpbGVzIGZyb20gdGhlIGNvbXBvbmVudCByZXBvc2l0b3J5IHdlcmUgY2hvc2VuIGJhc2VkIG9uCit0aGUgZm9sbG93aW5nIGZpbHRlcnM6CitmaWxlX2ZpbHRlciA9ICVzCitmaWxlX2V4Y2x1ZGUgPSAlcycnJyAlIChuYW1lLCBmaWxlX2ZpbHRlciBvciAnPGVtcHR5PicsIHJlcG8uZ2V0KCdmaWxlX2V4Y2x1ZGUnLCAnPGVtcHR5PicpKV0pCisgICAgICAgICAgICAgICAgICAgICAgICByZXBvWydzdHJpcHBlZF9yZXZpc2lvbiddID0gcnVuY21kKCdnaXQgcmV2LXBhcnNlIEhFQUQnKS5zdHJpcCgpCisKKyAgICAgICAgICAgIGlmIG5vdCBsYXN0cmV2OgorICAgICAgICAgICAgICAgIGxhc3RyZXYgPSBydW5jbWQoJ2dpdCByZXYtcGFyc2UgJXMnICUgaW5pdGlhbHJldiwgbGRpcikuc3RyaXAoKQorICAgICAgICAgICAgICAgIGNvbmYudXBkYXRlKG5hbWUsICJsYXN0X3JldmlzaW9uIiwgbGFzdHJldiwgaW5pdG1vZGU9VHJ1ZSkKKworICAgICAgICBpZiBub3QgY29uZi5oaXN0b3J5OgorICAgICAgICAgICAgcnVuY21kKCJnaXQgYWRkIC4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBDcmVhdGUgT2N0b3B1cyBtZXJnZSBjb21taXQgYWNjb3JkaW5nIHRvIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA4NzQxNDkvZ2l0LW9jdG9wdXMtbWVyZ2Utd2l0aC11bnJlbGF0ZWQtcmVwb3NpdG9pZXMKKyAgICAgICAgICAgIHJ1bmNtZCgnZ2l0IGNoZWNrb3V0IG1hc3RlcicpCisgICAgICAgICAgICBtZXJnZSA9IFsnZ2l0JywgJ21lcmdlJywgJy0tbm8tY29tbWl0J10KKyAgICAgICAgICAgIGZvciBuYW1lIGluIGNvbmYucmVwb3M6CisgICAgICAgICAgICAgICAgcmVwbyA9IGNvbmYucmVwb3NbbmFtZV0KKyAgICAgICAgICAgICAgICAjIFVzZSBicmFuY2ggY3JlYXRlZCBlYXJsaWVyLgorICAgICAgICAgICAgICAgIG1lcmdlLmFwcGVuZChuYW1lKQorICAgICAgICAgICAgICAgICMgUm9vdCBhbGwgY29tbWl0cyB3aGljaCBoYXZlIG5vIHBhcmVudCBpbiB0aGUgY29tbW9uCisgICAgICAgICAgICAgICAgIyBhbmNlc3RvciBpbiB0aGUgbmV3IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgZm9yIHN0YXJ0IGluIHJ1bmNtZCgnZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6JSVIIC0tbWF4LXBhcmVudHM9MCAlcycgJSBuYW1lKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgcnVuY21kKCdnaXQgcmVwbGFjZSAtLWdyYWZ0ICVzICVzJyAlIChzdGFydCwgc3RhcnRyZXYpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJ1bmNtZChtZXJnZSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycm9yOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCcnJ01lcmdpbmcgY29tcG9uZW50IHJlcG9zaXRvcnkgaGlzdG9yeSBmYWlsZWQsIHBlcmhhcHMgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdHMuCitJdCBtYXkgYmUgcG9zc2libGUgdG8gY29tbWl0IGFueXdheSBhZnRlciByZXNvbHZpbmcgdGhlc2UgY29uZmxpY3RzLgorCislcycnJyAlIGVycm9yKQorICAgICAgICAgICAgIyBDcmVhdGUgTUVSR0VfSEVBRCBhbmQgTUVSR0VfTVNHLiAiZ2l0IG1lcmdlIiBpdHNlbGYKKyAgICAgICAgICAgICMgZG9lcyBub3QgY3JlYXRlIE1FUkdFX0hFQUQgaW4gY2FzZSBvZiBhIChoYXJtbGVzcykgZmFpbHVyZSwKKyAgICAgICAgICAgICMgYW5kIHdlIHdhbnQgY2VydGFpbiBhdXRvLWdlbmVyYXRlZCBpbmZvcm1hdGlvbiBpbiB0aGUKKyAgICAgICAgICAgICMgY29tbWl0IG1lc3NhZ2UgZm9yIGZ1dHVyZSByZWZlcmVuY2UgYW5kL29yIGF1dG9tYXRpb24uCisgICAgICAgICAgICB3aXRoIG9wZW4oJy5naXQvTUVSR0VfSEVBRCcsICd3JykgYXMgaGVhZDoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oJy5naXQvTUVSR0VfTVNHJywgJ3cnKSBhcyBtc2c6CisgICAgICAgICAgICAgICAgICAgIG1zZy53cml0ZSgncmVwbzogaW5pdGlhbCBpbXBvcnQgb2YgY29tcG9uZW50c1xuXG4nKQorICAgICAgICAgICAgICAgICAgICAjIGhlYWQud3JpdGUoJyVzXG4nICUgc3RhcnRyZXYpCisgICAgICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGNvbmYucmVwb3M6CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvID0gY29uZi5yZXBvc1tuYW1lXQorICAgICAgICAgICAgICAgICAgICAgICAgIyA8dXBzdHJlYW0gcmVmPiA8cmV3cml0dGVuIHJlZj4gPHJld3JpdHRlbiArIGZpbGVzIHJlbW92ZWQ+CisgICAgICAgICAgICAgICAgICAgICAgICBtc2cud3JpdGUoJ2NvbWJvLWxheWVyLSVzOiAlcyAlcyAlc1xuJyAlIChuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb1snbGFzdF9yZXZpc2lvbiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb1sncmV3cml0dGVuX3JldmlzaW9uJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvWydzdHJpcHBlZF9yZXZpc2lvbiddKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldiA9IHJ1bmNtZCgnZ2l0IHJldi1wYXJzZSAlcycgJSBuYW1lKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICBoZWFkLndyaXRlKCclc1xuJyAlIHJldikKKworICAgICAgICBpZiBjb25mLmxvY2FsY29uZmZpbGU6CisgICAgICAgICAgICBsb2NhbGFkZGVkID0gVHJ1ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IHJtIC0tY2FjaGVkICVzIiAlIGNvbmYubG9jYWxjb25mZmlsZSwgcHJpbnRlcnI9RmFsc2UpCisgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICAgICAgbG9jYWxhZGRlZCA9IEZhbHNlCisgICAgICAgICAgICBpZiBsb2NhbGFkZGVkOgorICAgICAgICAgICAgICAgIGxvY2FscmVscGF0aCA9IG9zLnBhdGgucmVscGF0aChjb25mLmxvY2FsY29uZmZpbGUpCisgICAgICAgICAgICAgICAgcnVuY21kKCJncmVwIC1xICVzIC5naXRpZ25vcmUgfHwgZWNobyAlcyA+PiAuZ2l0aWdub3JlIiAlIChsb2NhbHJlbHBhdGgsIGxvY2FscmVscGF0aCkpCisgICAgICAgICAgICAgICAgcnVuY21kKCJnaXQgYWRkIC5naXRpZ25vcmUiKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJBZGRlZCBsb2NhbCBjb25maWd1cmF0aW9uIGZpbGUgJXMgdG8gLmdpdGlnbm9yZSIsIGxvY2FscmVscGF0aCkKKyAgICAgICAgbG9nZ2VyLmluZm8oIkluaXRpYWwgY29tYm8gbGF5ZXIgcmVwb3NpdG9yeSBkYXRhIGhhcyBiZWVuIGNyZWF0ZWQ7IHBsZWFzZSBtYWtlIGFueSBjaGFuZ2VzIGlmIGRlc2lyZWQgYW5kIHRoZW4gdXNlICdnaXQgY29tbWl0JyB0byBtYWtlIHRoZSBpbml0aWFsIGNvbW1pdC4iKQorICAgIGVsc2U6CisgICAgICAgIGxvZ2dlci5pbmZvKCJSZXBvc2l0b3J5IGFscmVhZHkgaW5pdGlhbGlzZWQsIG5vdGhpbmcgdG8gZG8uIikKKworCitkZWYgY2hlY2tfcmVwb19jbGVhbihyZXBvZGlyKToKKyAgICAiIiIKKyAgICAgICAgY2hlY2sgaWYgdGhlIHJlcG8gaXMgY2xlYW4KKyAgICAgICAgZXhpdCBpZiByZXBvIGlzIGRpcnR5CisgICAgIiIiCisgICAgb3V0cHV0PXJ1bmNtZCgiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiIsIHJlcG9kaXIpCisgICAgciA9IHJlLmNvbXBpbGUoJ1w/XD8gcGF0Y2gtLiovJykKKyAgICBkaXJ0eW91dCA9IFtpdGVtIGZvciBpdGVtIGluIG91dHB1dC5zcGxpdGxpbmVzKCkgaWYgbm90IHIubWF0Y2goaXRlbSldCisgICAgaWYgZGlydHlvdXQ6CisgICAgICAgIGxvZ2dlci5lcnJvcigiZ2l0IHJlcG8gJXMgaXMgZGlydHksIHBsZWFzZSBmaXggaXQgZmlyc3QiLCByZXBvZGlyKQorICAgICAgICBzeXMuZXhpdCgxKQorCitkZWYgY2hlY2tfcGF0Y2gocGF0Y2hmaWxlKToKKyAgICBmID0gb3BlbihwYXRjaGZpbGUpCisgICAgbG4gPSBmLnJlYWRsaW5lKCkKKyAgICBvZiA9IE5vbmUKKyAgICBpbl9wYXRjaCA9IEZhbHNlCisgICAgYmV5b25kX21zZyA9IEZhbHNlCisgICAgcHJlX2J1ZiA9ICcnCisgICAgd2hpbGUgbG46CisgICAgICAgIGlmIG5vdCBiZXlvbmRfbXNnOgorICAgICAgICAgICAgaWYgbG4gPT0gJy0tLVxuJzoKKyAgICAgICAgICAgICAgICBpZiBub3Qgb2Y6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaW5fcGF0Y2ggPSBGYWxzZQorICAgICAgICAgICAgICAgIGJleW9uZF9tc2cgPSBUcnVlCisgICAgICAgICAgICBlbGlmIGxuLnN0YXJ0c3dpdGgoJy0tLSAnKToKKyAgICAgICAgICAgICAgICAjIFdlIGhhdmUgYSBkaWZmIGluIHRoZSBjb21taXQgbWVzc2FnZQorICAgICAgICAgICAgICAgIGluX3BhdGNoID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIG5vdCBvZjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ1dBUk5JTkc6ICVzIGNvbnRhaW5zIGEgZGlmZiBpbiBpdHMgY29tbWl0IG1lc3NhZ2UsIGluZGVudGluZyB0byBhdm9pZCBmYWlsdXJlIGR1cmluZyBhcHBseScgJSBwYXRjaGZpbGUpCisgICAgICAgICAgICAgICAgICAgIG9mID0gb3BlbihwYXRjaGZpbGUgKyAnLnRtcCcsICd3JykKKyAgICAgICAgICAgICAgICAgICAgb2Yud3JpdGUocHJlX2J1ZikKKyAgICAgICAgICAgICAgICAgICAgcHJlX2J1ZiA9ICcnCisgICAgICAgICAgICBlbGlmIGluX3BhdGNoIGFuZCBub3QgbG5bMF0gaW4gJystQCBcblxyJzoKKyAgICAgICAgICAgICAgICBpbl9wYXRjaCA9IEZhbHNlCisgICAgICAgIGlmIG9mOgorICAgICAgICAgICAgaWYgaW5fcGF0Y2g6CisgICAgICAgICAgICAgICAgb2Yud3JpdGUoJyAnICsgbG4pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9mLndyaXRlKGxuKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJlX2J1ZiArPSBsbgorICAgICAgICBsbiA9IGYucmVhZGxpbmUoKQorICAgIGYuY2xvc2UoKQorICAgIGlmIG9mOgorICAgICAgICBvZi5jbG9zZSgpCisgICAgICAgIG9zLnJlbmFtZShwYXRjaGZpbGUgKyAnLnRtcCcsIHBhdGNoZmlsZSkKKworZGVmIGRyb3BfdG9fc2hlbGwod29ya2Rpcj1Ob25lKToKKyAgICBpZiBub3Qgc3lzLnN0ZGluLmlzYXR0eSgpOgorICAgICAgICBwcmludCAiTm90IGEgVFRZIHNvIGNhbid0IGRyb3AgdG8gc2hlbGwgZm9yIHJlc29sdXRpb24sIGV4aXRpbmcuIgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHNoZWxsID0gb3MuZW52aXJvbi5nZXQoJ1NIRUxMJywgJ2Jhc2gnKQorICAgIHByaW50KCdEcm9wcGluZyB0byBzaGVsbCAiJXMiXG4nIFwKKyAgICAgICAgICAnV2hlbiB5b3UgYXJlIGZpbmlzaGVkLCBydW4gdGhlIGZvbGxvd2luZyB0byBjb250aW51ZTpcbicgXAorICAgICAgICAgICcgICAgICAgZXhpdCAgICAtLSBjb250aW51ZSB0byBhcHBseSB0aGUgcGF0Y2hlc1xuJyBcCisgICAgICAgICAgJyAgICAgICBleGl0IDEgIC0tIGFib3J0XG4nICUgc2hlbGwpOworICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbChbc2hlbGxdLCBjd2Q9d29ya2RpcikKKyAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgcHJpbnQgIkFib3J0aW5nIgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gVHJ1ZQorCitkZWYgY2hlY2tfcmV2X2JyYW5jaChjb21wb25lbnQsIHJlcG9kaXIsIHJldiwgYnJhbmNoKToKKyAgICB0cnk6CisgICAgICAgIGFjdHVhbGJyYW5jaCA9IHJ1bmNtZCgiZ2l0IGJyYW5jaCAtLWNvbnRhaW5zICVzIiAlIHJldiwgcmVwb2RpciwgcHJpbnRlcnI9RmFsc2UpCisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgIGlmIGUucmV0dXJuY29kZSA9PSAxMjk6CisgICAgICAgICAgICBhY3R1YWxicmFuY2ggPSAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UKKworICAgIGlmIG5vdCBhY3R1YWxicmFuY2g6CisgICAgICAgIGxvZ2dlci5lcnJvcigiJXM6IHNwZWNpZmllZCByZXZpc2lvbiAlcyBpcyBpbnZhbGlkISIgJSAoY29tcG9uZW50LCByZXYpKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGJyYW5jaGVzID0gW10KKyAgICBicmFuY2hsaXN0ID0gYWN0dWFsYnJhbmNoLnNwbGl0KCJcbiIpCisgICAgZm9yIGIgaW4gYnJhbmNobGlzdDoKKyAgICAgICAgYnJhbmNoZXMuYXBwZW5kKGIuc3RyaXAoKS5zcGxpdCgnICcpWy0xXSkKKworICAgIGlmIGJyYW5jaCBub3QgaW4gYnJhbmNoZXM6CisgICAgICAgIGxvZ2dlci5lcnJvcigiJXM6IHNwZWNpZmllZCByZXZpc2lvbiAlcyBpcyBub3Qgb24gc3BlY2lmaWVkIGJyYW5jaCAlcyEiICUgKGNvbXBvbmVudCwgcmV2LCBicmFuY2gpKQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgZ2V0X3JlcG9zKGNvbmYsIHJlcG9fbmFtZXMpOgorICAgIHJlcG9zID0gW10KKyAgICBmb3IgbmFtZSBpbiByZXBvX25hbWVzOgorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJy0nKToKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXBvcy5hcHBlbmQobmFtZSkKKyAgICBmb3IgcmVwbyBpbiByZXBvczoKKyAgICAgICAgaWYgbm90IHJlcG8gaW4gY29uZi5yZXBvczoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiU3BlY2lmaWVkIGNvbXBvbmVudCAnJXMnIG5vdCBmb3VuZCBpbiBjb25maWd1cmF0aW9uIiAlIHJlcG8pCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgbm90IHJlcG9zOgorICAgICAgICByZXBvcyA9IGNvbmYucmVwb3MKKworICAgIHJldHVybiByZXBvcworCitkZWYgYWN0aW9uX3B1bGwoY29uZiwgYXJncyk6CisgICAgIiIiCisgICAgICAgIHVwZGF0ZSB0aGUgY29tcG9uZW50IHJlcG9zIG9ubHkKKyAgICAiIiIKKyAgICByZXBvcyA9IGdldF9yZXBvcyhjb25mLCBhcmdzWzE6XSkKKworICAgICMgbWFrZSBzdXJlIGFsbCByZXBvcyBhcmUgY2xlYW4KKyAgICBmb3IgbmFtZSBpbiByZXBvczoKKyAgICAgICAgY2hlY2tfcmVwb19jbGVhbihjb25mLnJlcG9zW25hbWVdWydsb2NhbF9yZXBvX2RpciddKQorCisgICAgZm9yIG5hbWUgaW4gcmVwb3M6CisgICAgICAgIHJlcG8gPSBjb25mLnJlcG9zW25hbWVdCisgICAgICAgIGxkaXIgPSByZXBvWydsb2NhbF9yZXBvX2RpciddCisgICAgICAgIGJyYW5jaCA9IHJlcG8uZ2V0KCdicmFuY2gnLCAibWFzdGVyIikKKyAgICAgICAgbG9nZ2VyLmluZm8oInVwZGF0ZSBicmFuY2ggJXMgb2YgY29tcG9uZW50IHJlcG8gJXMgaW4gJXMgLi4uIiAlIChicmFuY2gsIG5hbWUsIGxkaXIpKQorICAgICAgICBpZiBub3QgY29uZi5oYXJkX3Jlc2V0OgorICAgICAgICAgICAgIyBUcnkgdG8gcHVsbCBvbmx5IHRoZSBjb25maWd1cmVkIGJyYW5jaC4gQmV3YXJlIHRoYXQgdGhpcyBtYXkgZmFpbAorICAgICAgICAgICAgIyB3aGVuIHRoZSBicmFuY2ggaXMgY3VycmVudGx5IHVua25vd24gKGZvciBleGFtcGxlLCBhZnRlciByZWNvbmZpZ3VyaW5nCisgICAgICAgICAgICAjIGNvbWJvLWxheWVyKS4gSW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gZmV0Y2ggZXZlcnl0aGluZyBhbmQgdHJ5IHRoZSBjaGVjayBvdXQKKyAgICAgICAgICAgICMgYW5kIHB1bGwgYWdhaW4uCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcnVuY21kKCJnaXQgY2hlY2tvdXQgJXMiICUgYnJhbmNoLCBsZGlyLCBwcmludGVycj1GYWxzZSkKKyAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgICAgICBvdXRwdXQ9cnVuY21kKCJnaXQgZmV0Y2giLCBsZGlyKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKG91dHB1dCkKKyAgICAgICAgICAgICAgICBydW5jbWQoImdpdCBjaGVja291dCAlcyIgJSBicmFuY2gsIGxkaXIpCisgICAgICAgICAgICAgICAgcnVuY21kKCJnaXQgcHVsbCAtLWZmLW9ubHkiLCBsZGlyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRwdXQ9cnVuY21kKCJnaXQgcHVsbCAtLWZmLW9ubHkiLCBsZGlyKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKG91dHB1dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dHB1dD1ydW5jbWQoImdpdCBmZXRjaCIsIGxkaXIpCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhvdXRwdXQpCisgICAgICAgICAgICBydW5jbWQoImdpdCBjaGVja291dCAlcyIgJSBicmFuY2gsIGxkaXIpCisgICAgICAgICAgICBydW5jbWQoImdpdCByZXNldCAtLWhhcmQgRkVUQ0hfSEVBRCIsIGxkaXIpCisKK2RlZiBhY3Rpb25fdXBkYXRlKGNvbmYsIGFyZ3MpOgorICAgICIiIgorICAgICAgICB1cGRhdGUgdGhlIGNvbXBvbmVudCByZXBvcworICAgICAgICBnZW5lcmF0ZSB0aGUgcGF0Y2ggbGlzdAorICAgICAgICBhcHBseSB0aGUgZ2VuZXJhdGVkIHBhdGNoZXMKKyAgICAiIiIKKyAgICBjb21wb25lbnRzID0gW2FyZy5zcGxpdCgnOicpWzBdIGZvciBhcmcgaW4gYXJnc1sxOl1dCisgICAgcmV2aXNpb25zID0ge30KKyAgICBmb3IgYXJnIGluIGFyZ3NbMTpdOgorICAgICAgICBpZiAnOicgaW4gYXJnOgorICAgICAgICAgICAgYSA9IGFyZy5zcGxpdCgnOicsIDEpCisgICAgICAgICAgICByZXZpc2lvbnNbYVswXV0gPSBhWzFdCisgICAgcmVwb3MgPSBnZXRfcmVwb3MoY29uZiwgY29tcG9uZW50cykKKworICAgICMgbWFrZSBzdXJlIGNvbWJvIHJlcG8gaXMgY2xlYW4KKyAgICBjaGVja19yZXBvX2NsZWFuKG9zLmdldGN3ZCgpKQorCisgICAgaW1wb3J0IHV1aWQKKyAgICBwYXRjaF9kaXIgPSAicGF0Y2gtJXMiICUgdXVpZC51dWlkNCgpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGNoX2Rpcik6CisgICAgICAgIG9zLm1rZGlyKHBhdGNoX2RpcikKKworICAgICMgU3RlcCAxOiB1cGRhdGUgdGhlIGNvbXBvbmVudCByZXBvcworICAgIGlmIGNvbmYubm9wdWxsOgorICAgICAgICBsb2dnZXIuaW5mbygiU2tpcHBpbmcgcHVsbCAoLW4pIikKKyAgICBlbHNlOgorICAgICAgICBhY3Rpb25fcHVsbChjb25mLCBbJ2FyZzAnXSArIGNvbXBvbmVudHMpCisKKyAgICBmb3IgbmFtZSBpbiByZXBvczoKKyAgICAgICAgcmV2aXNpb24gPSByZXZpc2lvbnMuZ2V0KG5hbWUsIE5vbmUpCisgICAgICAgIHJlcG8gPSBjb25mLnJlcG9zW25hbWVdCisgICAgICAgIGxkaXIgPSByZXBvWydsb2NhbF9yZXBvX2RpciddCisgICAgICAgIGRlc3RfZGlyID0gcmVwb1snZGVzdF9kaXInXQorICAgICAgICBicmFuY2ggPSByZXBvLmdldCgnYnJhbmNoJywgIm1hc3RlciIpCisgICAgICAgIHJlcG9fcGF0Y2hfZGlyID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBwYXRjaF9kaXIsIG5hbWUpCisKKyAgICAgICAgIyBTdGVwIDI6IGdlbmVyYXRlIHRoZSBwYXRjaCBsaXN0IGFuZCBzdG9yZSB0byBwYXRjaCBkaXIKKyAgICAgICAgbG9nZ2VyLmluZm8oIkdlbmVyYXRpbmcgcGF0Y2hlcyBmcm9tICVzLi4uIiAlIG5hbWUpCisgICAgICAgIHRvcF9yZXZpc2lvbiA9IHJldmlzaW9uIG9yIGJyYW5jaAorICAgICAgICBpZiBub3QgY2hlY2tfcmV2X2JyYW5jaChuYW1lLCBsZGlyLCB0b3BfcmV2aXNpb24sIGJyYW5jaCk6CisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBpZiBkZXN0X2RpciAhPSAiLiI6CisgICAgICAgICAgICBwcmVmaXggPSAiLS1zcmMtcHJlZml4PWEvJXMvIC0tZHN0LXByZWZpeD1iLyVzLyIgJSAoZGVzdF9kaXIsIGRlc3RfZGlyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJlZml4ID0gIiIKKyAgICAgICAgaWYgcmVwb1snbGFzdF9yZXZpc2lvbiddID09ICIiOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIldhcm5pbmc6IGxhc3RfcmV2aXNpb24gb2YgY29tcG9uZW50ICVzIGlzIG5vdCBzZXQsIHN0YXJ0aW5nIGZyb20gdGhlIGZpcnN0IGNvbW1pdCIgJSBuYW1lKQorICAgICAgICAgICAgcGF0Y2hfY21kX3JhbmdlID0gIi0tcm9vdCAlcyIgJSB0b3BfcmV2aXNpb24KKyAgICAgICAgICAgIHJldl9jbWRfcmFuZ2UgPSB0b3BfcmV2aXNpb24KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBjaGVja19yZXZfYnJhbmNoKG5hbWUsIGxkaXIsIHJlcG9bJ2xhc3RfcmV2aXNpb24nXSwgYnJhbmNoKToKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgcGF0Y2hfY21kX3JhbmdlID0gIiVzLi4lcyIgJSAocmVwb1snbGFzdF9yZXZpc2lvbiddLCB0b3BfcmV2aXNpb24pCisgICAgICAgICAgICByZXZfY21kX3JhbmdlID0gcGF0Y2hfY21kX3JhbmdlCisKKyAgICAgICAgZmlsZV9maWx0ZXIgPSByZXBvLmdldCgnZmlsZV9maWx0ZXInLCIiKQorCisgICAgICAgIHBhdGNoX2NtZCA9ICJnaXQgZm9ybWF0LXBhdGNoIC1OICVzIC0tb3V0cHV0LWRpcmVjdG9yeSAlcyAlcyAtLSAlcyIgJSBcCisgICAgICAgICAgICAocHJlZml4LHJlcG9fcGF0Y2hfZGlyLCBwYXRjaF9jbWRfcmFuZ2UsIGZpbGVfZmlsdGVyKQorICAgICAgICBvdXRwdXQgPSBydW5jbWQocGF0Y2hfY21kLCBsZGlyKQorICAgICAgICBsb2dnZXIuZGVidWcoImdlbmVyYXRlZCBwYXRjaCBzZXQ6XG4lcyIgJSBvdXRwdXQpCisgICAgICAgIHBhdGNobGlzdCA9IG91dHB1dC5zcGxpdGxpbmVzKCkKKworICAgICAgICByZXZfY21kID0gImdpdCByZXYtbGlzdCAtLW5vLW1lcmdlcyAlcyAtLSAlcyIgJSAocmV2X2NtZF9yYW5nZSwgZmlsZV9maWx0ZXIpCisgICAgICAgIHJldmxpc3QgPSBydW5jbWQocmV2X2NtZCwgbGRpcikuc3BsaXRsaW5lcygpCisKKyAgICAgICAgIyBTdGVwIDM6IENhbGwgcmVwbyBzcGVjaWZpYyBob29rIHRvIGFkanVzdCBwYXRjaAorICAgICAgICBpZiAnaG9vaycgaW4gcmVwbzoKKyAgICAgICAgICAgICMgaG9vayBwYXJhbWV0ZXIgaXM6IC4vaG9vayBwYXRjaHBhdGggcmV2aXNpb24gcmVwb25hbWUKKyAgICAgICAgICAgIGNvdW50PWxlbihyZXZsaXN0KS0xCisgICAgICAgICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hsaXN0OgorICAgICAgICAgICAgICAgIHJ1bmNtZCgiJXMgJXMgJXMgJXMiICUgKHJlcG9bJ2hvb2snXSwgcGF0Y2gsIHJldmxpc3RbY291bnRdLCBuYW1lKSkKKyAgICAgICAgICAgICAgICBjb3VudD1jb3VudC0xCisKKyAgICAgICAgIyBTdGVwIDNhOiBGaWx0ZXIgb3V0IHVud2FudGVkIGZpbGVzIGFuZCBwYXRjaGVzLgorICAgICAgICBleGNsdWRlID0gcmVwby5nZXQoJ2ZpbGVfZXhjbHVkZScsICcnKQorICAgICAgICBpZiBleGNsdWRlOgorICAgICAgICAgICAgZmlsdGVyID0gWydmaWx0ZXJkaWZmJywgJy1wMSddCisgICAgICAgICAgICBmb3IgcGF0aCBpbiBleGNsdWRlLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgZmlsdGVyLmFwcGVuZCgnLXgnKQorICAgICAgICAgICAgICAgIGZpbHRlci5hcHBlbmQoJyVzLyVzJyAlIChkZXN0X2RpciwgcGF0aCkgaWYgZGVzdF9kaXIgIT0gJy4nIGVsc2UgcGF0aCkKKyAgICAgICAgICAgIGZvciBwYXRjaCBpbiBwYXRjaGxpc3RbOl06CisgICAgICAgICAgICAgICAgZmlsdGVyZWQgPSBwYXRjaCArICcudG1wJworICAgICAgICAgICAgICAgIHdpdGggb3BlbihmaWx0ZXJlZCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBydW5jbWQoZmlsdGVyICsgW3BhdGNoXSwgb3V0PWYpCisgICAgICAgICAgICAgICAgIyBOb3cgY2hlY2sgZm9yIGVtcHR5IHBhdGNoZXMuCisgICAgICAgICAgICAgICAgaWYgcnVuY21kKFsnZmlsdGVyZGlmZicsICctLWxpc3QnLCBmaWx0ZXJlZF0pOgorICAgICAgICAgICAgICAgICAgICAjIFBvc3NpYmx5IG1vZGlmaWVkLgorICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsocGF0Y2gpCisgICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShmaWx0ZXJlZCwgcGF0Y2gpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBFbXB0eSwgaWdub3JlIGl0LiBNdXN0IGFsc28gcmVtb3ZlIGZyb20gcmV2bGlzdC4KKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGNoLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmcm9tbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZnJvbWxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFBhdGNoIG11c3QgaGF2ZSBiZWVuIGVtcHR5IHRvIHN0YXJ0IHdpdGguIE5vIG5lZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdG8gcmVtb3ZlIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKHInJydeRnJvbSAoWzAtOWEtZkEtRl0rKSAuKlxuJycnLCBmcm9tbGluZSkKKyAgICAgICAgICAgICAgICAgICAgcmV2ID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ3NraXBwaW5nIGVtcHR5IHBhdGNoICVzID0gJXMnICUgKHBhdGNoLCByZXYpKQorICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsocGF0Y2gpCisgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhmaWx0ZXJlZCkKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hsaXN0LnJlbW92ZShwYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgcmV2bGlzdC5yZW1vdmUocmV2KQorCisgICAgICAgICMgU3RlcCA0OiB3cml0ZSBwYXRjaCBsaXN0IGFuZCByZXZpc2lvbiBsaXN0IHRvIGZpbGUsIGZvciB1c2VyIHRvIGVkaXQgbGF0ZXIKKyAgICAgICAgcGF0Y2hsaXN0X2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIHBhdGNoX2RpciwgInBhdGNobGlzdC0lcyIgJSBuYW1lKQorICAgICAgICByZXBvWydwYXRjaGxpc3QnXSA9IHBhdGNobGlzdF9maWxlCisgICAgICAgIGYgPSBvcGVuKHBhdGNobGlzdF9maWxlLCAndycpCisgICAgICAgIGNvdW50PWxlbihyZXZsaXN0KS0xCisgICAgICAgIGZvciBwYXRjaCBpbiBwYXRjaGxpc3Q6CisgICAgICAgICAgICBmLndyaXRlKCIlcyAlc1xuIiAlIChwYXRjaCwgcmV2bGlzdFtjb3VudF0pKQorICAgICAgICAgICAgY2hlY2tfcGF0Y2gob3MucGF0aC5qb2luKHBhdGNoX2RpciwgcGF0Y2gpKQorICAgICAgICAgICAgY291bnQ9Y291bnQtMQorICAgICAgICBmLmNsb3NlKCkKKworICAgICMgU3RlcCA1OiBpbnZva2UgYmFzaCBmb3IgdXNlciB0byBlZGl0IHBhdGNoIGFuZCBwYXRjaCBsaXN0CisgICAgaWYgY29uZi5pbnRlcmFjdGl2ZToKKyAgICAgICAgcHJpbnQoJ1lvdSBtYXkgbm93IGVkaXQgdGhlIHBhdGNoIGFuZCBwYXRjaCBsaXN0IGluICVzXG4nIFwKKyAgICAgICAgICAgICAgJ0ZvciBleGFtcGxlLCB5b3UgY2FuIHJlbW92ZSB1bndhbnRlZCBwYXRjaCBlbnRyaWVzIGZyb20gcGF0Y2hsaXN0LSosIHNvIHRoYXQgdGhleSB3aWxsIGJlIG5vdCBhcHBsaWVkIGxhdGVyJyAlIHBhdGNoX2Rpcik7CisgICAgICAgIGlmIG5vdCBkcm9wX3RvX3NoZWxsKHBhdGNoX2Rpcik6CisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgIyBTdGVwIDY6IGFwcGx5IHRoZSBnZW5lcmF0ZWQgYW5kIHJldmlzZWQgcGF0Y2gKKyAgICBhcHBseV9wYXRjaGxpc3QoY29uZiwgcmVwb3MpCisgICAgcnVuY21kKCJybSAtcmYgJXMiICUgcGF0Y2hfZGlyKQorCisgICAgIyBTdGVwIDc6IGNvbW1pdCB0aGUgdXBkYXRlZCBjb25maWcgZmlsZSBpZiBpdCdzIGJlaW5nIHRyYWNrZWQKKyAgICByZWxwYXRoID0gb3MucGF0aC5yZWxwYXRoKGNvbmYuY29uZmZpbGUpCisgICAgdHJ5OgorICAgICAgICBvdXRwdXQgPSBydW5jbWQoImdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gJXMiICUgcmVscGF0aCwgcHJpbnRlcnI9RmFsc2UpCisgICAgZXhjZXB0OgorICAgICAgICAjIE91dHNpZGUgdGhlIHJlcG9zaXRvcnkKKyAgICAgICAgb3V0cHV0ID0gTm9uZQorICAgIGlmIG91dHB1dDoKKyAgICAgICAgbG9nZ2VyLmluZm8oIkNvbW1pdHRpbmcgdXBkYXRlZCBjb25maWd1cmF0aW9uIGZpbGUiKQorICAgICAgICBpZiBvdXRwdXQubHN0cmlwKCkuc3RhcnRzd2l0aCgiTSIpOgorCisgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgImNvbXBvbmVudHMiIHN0cmluZworICAgICAgICAgICAgY29tcG9uZW50X3N0ciA9ICJhbGwgY29tcG9uZW50cyIKKyAgICAgICAgICAgIGlmIGxlbihjb21wb25lbnRzKSA+IDA6CisgICAgICAgICAgICAgICAgIyBvdGhlcndpc2UgdGVsbCB3aGljaCBjb21wb25lbnRzIHdlcmUgYWN0dWFsbHkgY2hhbmdlZAorICAgICAgICAgICAgICAgIGNvbXBvbmVudF9zdHIgPSAiLCAiLmpvaW4oY29tcG9uZW50cykKKworICAgICAgICAgICAgIyBleHBhbmQgdGhlIHRlbXBsYXRlIHdpdGgga25vd24gdmFsdWVzCisgICAgICAgICAgICB0ZW1wbGF0ZSA9IFRlbXBsYXRlKGNvbmYuY29tbWl0X21zZ190ZW1wbGF0ZSkKKyAgICAgICAgICAgIHJhd19tc2cgPSB0ZW1wbGF0ZS5zdWJzdGl0dXRlKGNvbXBvbmVudHMgPSBjb21wb25lbnRfc3RyKQorCisgICAgICAgICAgICAjIHNhbml0aXplIHRoZSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGluIGNvbW1hbmQgbGluZQorICAgICAgICAgICAgbXNnID0gcmF3X21zZy5yZXBsYWNlKCciJywgJ1xcIicpCisKKyAgICAgICAgICAgIHJ1bmNtZCgnZ2l0IGNvbW1pdCAtbSAiJXMiICVzJyAlIChtc2csIHJlbHBhdGgpKQorCitkZWYgYXBwbHlfcGF0Y2hsaXN0KGNvbmYsIHJlcG9zKToKKyAgICAiIiIKKyAgICAgICAgYXBwbHkgdGhlIGdlbmVyYXRlZCBwYXRjaCBsaXN0IHRvIGNvbWJvIHJlcG8KKyAgICAiIiIKKyAgICBmb3IgbmFtZSBpbiByZXBvczoKKyAgICAgICAgcmVwbyA9IGNvbmYucmVwb3NbbmFtZV0KKyAgICAgICAgbGFzdHJldiA9IHJlcG9bImxhc3RfcmV2aXNpb24iXQorICAgICAgICBwcmV2cmV2ID0gbGFzdHJldgorCisgICAgICAgICMgR2V0IG5vbi1ibGFuayBsaW5lcyBmcm9tIHBhdGNoIGxpc3QgZmlsZQorICAgICAgICBwYXRjaGxpc3QgPSBbXQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhyZXBvWydwYXRjaGxpc3QnXSkgb3Igbm90IGNvbmYuaW50ZXJhY3RpdmU6CisgICAgICAgICAgICAjIE5vdGU6IHdlIHdhbnQgdGhpcyB0byBmYWlsIGhlcmUgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCBhbmQgd2UncmUgbm90IGluCisgICAgICAgICAgICAjIGludGVyYWN0aXZlIG1vZGUgc2luY2UgdGhlIGZpbGUgc2hvdWxkIGV4aXN0IGluIHRoaXMgY2FzZQorICAgICAgICAgICAgd2l0aCBvcGVuKHJlcG9bJ3BhdGNobGlzdCddKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaGxpc3QuYXBwZW5kKGxpbmUpCisKKyAgICAgICAgbGRpciA9IGNvbmYucmVwb3NbbmFtZV1bJ2xvY2FsX3JlcG9fZGlyJ10KKyAgICAgICAgYnJhbmNoID0gY29uZi5yZXBvc1tuYW1lXS5nZXQoJ2JyYW5jaCcsICJtYXN0ZXIiKQorICAgICAgICBicmFuY2hyZXYgPSBydW5jbWQoImdpdCByZXYtcGFyc2UgJXMiICUgYnJhbmNoLCBsZGlyKS5zdHJpcCgpCisKKyAgICAgICAgaWYgcGF0Y2hsaXN0OgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkFwcGx5aW5nIHBhdGNoZXMgZnJvbSAlcy4uLiIgJSBuYW1lKQorICAgICAgICAgICAgbGluZWNvdW50ID0gbGVuKHBhdGNobGlzdCkKKyAgICAgICAgICAgIGkgPSAxCisgICAgICAgICAgICBmb3IgbGluZSBpbiBwYXRjaGxpc3Q6CisgICAgICAgICAgICAgICAgcGF0Y2hmaWxlID0gbGluZS5zcGxpdCgpWzBdCisgICAgICAgICAgICAgICAgbGFzdHJldiA9IGxpbmUuc3BsaXQoKVsxXQorICAgICAgICAgICAgICAgIHBhdGNoZGlzcCA9IG9zLnBhdGgucmVscGF0aChwYXRjaGZpbGUpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5nZXRzaXplKHBhdGNoZmlsZSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIihza2lwcGluZyAlZC8lZCAlcyAtIG5vIGNoYW5nZXMpIiAlIChpLCBsaW5lY291bnQsIHBhdGNoZGlzcCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY21kID0gImdpdCBhbSAtLWtlZXAtY3IgJXMtcDEgJXMiICUgKCctcyAnIGlmIHJlcG8uZ2V0KCdzaWdub2ZmJywgVHJ1ZSkgZWxzZSAnJywgcGF0Y2hmaWxlKQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQXBwbHlpbmcgJWQvJWQ6ICVzIiAlIChpLCBsaW5lY291bnQsIHBhdGNoZGlzcCkpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bmNtZChjbWQpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdSdW5uaW5nICJnaXQgYW0gLS1hYm9ydCIgdG8gY2xlYW51cCByZXBvJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IGFtIC0tYWJvcnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCciJXMiIGZhaWxlZCcgJSBjbWQpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiUGxlYXNlIG1hbnVhbGx5IGFwcGx5IHBhdGNoICVzIiAlIHBhdGNoZGlzcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJOb3RlOiBpZiB5b3UgZXhpdCBhbmQgY29udGludWUgYXBwbHlpbmcgd2l0aG91dCBtYW51YWxseSBhcHBseWluZyB0aGUgcGF0Y2gsIGl0IHdpbGwgYmUgc2tpcHBlZCIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZHJvcF90b19zaGVsbCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByZXZyZXYgIT0gcmVwb1snbGFzdF9yZXZpc2lvbiddOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mLnVwZGF0ZShuYW1lLCAibGFzdF9yZXZpc2lvbiIsIHByZXZyZXYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgICAgICBwcmV2cmV2ID0gbGFzdHJldgorICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAgICAgIyBPbmNlIGFsbCBwYXRjaGVzIGFyZSBhcHBsaWVkLCB3ZSBzaG91bGQgdXBkYXRlCisgICAgICAgICAgICAjIGxhc3RfcmV2aXNpb24gdG8gdGhlIGJyYW5jaCBoZWFkIGluc3RlYWQgb2YgdGhlIGxhc3QKKyAgICAgICAgICAgICMgYXBwbGllZCBwYXRjaC4gVGhlIHR3byBhcmUgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIHdoZW4KKyAgICAgICAgICAgICMgdGhlIGxhc3QgY29tbWl0IGlzIGEgbWVyZ2UgY29tbWl0IG9yIHdoZW4gdGhlIHBhdGNoZXMgYXQKKyAgICAgICAgICAgICMgdGhlIGJyYW5jaCBoZWFkIHdlcmUgaW50ZW50aW9uYWxseSBleGNsdWRlZC4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgSWYgd2UgZG8gbm90IGRvIHRoYXQgZm9yIGEgbWVyZ2UgY29tbWl0LCB0aGUgbmV4dAorICAgICAgICAgICAgIyBjb21iby1sYXllciBydW4gd2lsbCBvbmx5IGV4Y2x1ZGUgcGF0Y2hlcyByZWFjaGFibGUgZnJvbQorICAgICAgICAgICAgIyBvbmUgb2YgdGhlIG1lcmdlZCBicmFuY2hlcyBhbmQgdHJ5IHRvIHJlLWFwcGx5IHBhdGNoZXMKKyAgICAgICAgICAgICMgZnJvbSBvdGhlciBicmFuY2hlcyBldmVuIHRob3VnaCB0aGV5IHdlcmUgYWxyZWFkeQorICAgICAgICAgICAgIyBjb3BpZWQuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIElmIHBhdGNoZXMgd2VyZSBpbnRlbnRpb25hbGx5IGV4Y2x1ZGVkLCB0aGUgbmV4dCBydW4gd2lsbAorICAgICAgICAgICAgIyBwcmVzZW50IHRoZW0gYWdhaW4gaW5zdGVhZCBvZiBza2lwcGluZyBvdmVyIHRoZW0uIFRoaXMKKyAgICAgICAgICAgICMgbWF5IG9yIG1heSBub3QgYmUgaW50ZW5kZWQsIHNvIHRoZSBjb2RlIGhlcmUgaXMgY29uc2VydmF0aXZlCisgICAgICAgICAgICAjIGFuZCBvbmx5IGFkZHJlc3NlcyB0aGUgImhlYWQgaXMgbWVyZ2UgY29tbWl0IiBjYXNlLgorICAgICAgICAgICAgaWYgbGFzdHJldiAhPSBicmFuY2hyZXYgYW5kIFwKKyAgICAgICAgICAgICAgIGxlbihydW5jbWQoImdpdCBzaG93IC0tcHJldHR5PWZvcm1hdDolJVAgLS1uby1wYXRjaCAlcyIgJSBicmFuY2gsIGxkaXIpLnNwbGl0KCkpID4gMToKKyAgICAgICAgICAgICAgICBsYXN0cmV2ID0gYnJhbmNocmV2CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiTm8gcGF0Y2hlcyB0byBhcHBseSBmcm9tICVzIiAlIG5hbWUpCisgICAgICAgICAgICBsYXN0cmV2ID0gYnJhbmNocmV2CisKKyAgICAgICAgaWYgbGFzdHJldiAhPSByZXBvWydsYXN0X3JldmlzaW9uJ106CisgICAgICAgICAgICBjb25mLnVwZGF0ZShuYW1lLCAibGFzdF9yZXZpc2lvbiIsIGxhc3RyZXYpCisKK2RlZiBhY3Rpb25fc3BsaXRwYXRjaChjb25mLCBhcmdzKToKKyAgICAiIiIKKyAgICAgICAgZ2VuZXJhdGUgdGhlIGNvbW1pdCBwYXRjaCBhbmQKKyAgICAgICAgc3BsaXQgdGhlIHBhdGNoIHBlciByZXBvCisgICAgIiIiCisgICAgbG9nZ2VyLmRlYnVnKCJhY3Rpb25fc3BsaXRwYXRjaCIpCisgICAgaWYgbGVuKGFyZ3MpID4gMToKKyAgICAgICAgY29tbWl0ID0gYXJnc1sxXQorICAgIGVsc2U6CisgICAgICAgIGNvbW1pdCA9ICJIRUFEIgorICAgIHBhdGNoZGlyID0gInNwbGl0cGF0Y2gtJXMiICUgY29tbWl0CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGNoZGlyKToKKyAgICAgICAgb3MubWtkaXIocGF0Y2hkaXIpCisKKyAgICAjIGZpbGVyYW5nZV9yb290IGlzIGZvciB0aGUgcmVwbyB3aG9zZSBkZXN0X2RpciBpcyByb290ICIuIgorICAgICMgYW5kIGl0IHNob3VsZCBiZSBzcGVjaWZpZWQgYnkgZXhjbHVkaW5nIGFsbCBvdGhlciByZXBvIGRlc3QgZGlyCisgICAgIyBsaWtlICIteCByZXBvMSAteCByZXBvMiAteCByZXBvMyAuLi4iCisgICAgZmlsZXJhbmdlX3Jvb3QgPSAiIgorICAgIGZvciBuYW1lIGluIGNvbmYucmVwb3M6CisgICAgICAgIGRlc3RfZGlyID0gY29uZi5yZXBvc1tuYW1lXVsnZGVzdF9kaXInXQorICAgICAgICBpZiBkZXN0X2RpciAhPSAiLiI6CisgICAgICAgICAgICBmaWxlcmFuZ2Vfcm9vdCA9ICclcyAteCAiJXMvKiInICUgKGZpbGVyYW5nZV9yb290LCBkZXN0X2RpcikKKworICAgIGZvciBuYW1lIGluIGNvbmYucmVwb3M6CisgICAgICAgIGRlc3RfZGlyID0gY29uZi5yZXBvc1tuYW1lXVsnZGVzdF9kaXInXQorICAgICAgICBwYXRjaF9maWxlbmFtZSA9ICIlcy8lcy5wYXRjaCIgJSAocGF0Y2hkaXIsIG5hbWUpCisgICAgICAgIGlmIGRlc3RfZGlyID09ICIuIjoKKyAgICAgICAgICAgIGNtZCA9ICJnaXQgZm9ybWF0LXBhdGNoIC1uMSAtLXN0ZG91dCAlc14uLiVzIHwgZmlsdGVyZGlmZiAtcDEgJXMgPiAlcyIgJSAoY29tbWl0LCBjb21taXQsIGZpbGVyYW5nZV9yb290LCBwYXRjaF9maWxlbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZCA9ICJnaXQgZm9ybWF0LXBhdGNoIC0tbm8tcHJlZml4IC1uMSAtLXN0ZG91dCAlc14uLiVzIC0tICVzID4gJXMiICUgKGNvbW1pdCwgY29tbWl0LCBkZXN0X2RpciwgcGF0Y2hfZmlsZW5hbWUpCisgICAgICAgIHJ1bmNtZChjbWQpCisgICAgICAgICMgRGV0ZWN0IGVtcHR5IHBhdGNoZXMgKGluY2x1ZGluZyB0aG9zZSBwcm9kdWNlZCBieSBmaWx0ZXJkaWZmIGFib3ZlCisgICAgICAgICMgdGhhdCBjb250YWluIG9ubHkgcHJlYW1ibGUgdGV4dCkKKyAgICAgICAgaWYgb3MucGF0aC5nZXRzaXplKHBhdGNoX2ZpbGVuYW1lKSA9PSAwIG9yIHJ1bmNtZCgiZmlsdGVyZGlmZiAlcyIgJSBwYXRjaF9maWxlbmFtZSkgPT0gIiI6CisgICAgICAgICAgICBvcy5yZW1vdmUocGF0Y2hfZmlsZW5hbWUpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiKHNraXBwaW5nICVzIC0gbm8gY2hhbmdlcykiLCBuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8ocGF0Y2hfZmlsZW5hbWUpCisKK2RlZiBhY3Rpb25fZXJyb3IoY29uZiwgYXJncyk6CisgICAgbG9nZ2VyLmluZm8oImludmFsaWQgYWN0aW9uICVzIiAlIGFyZ3NbMF0pCisKK2FjdGlvbnMgPSB7CisgICAgImluaXQiOiBhY3Rpb25faW5pdCwKKyAgICAidXBkYXRlIjogYWN0aW9uX3VwZGF0ZSwKKyAgICAicHVsbCI6IGFjdGlvbl9wdWxsLAorICAgICJzcGxpdHBhdGNoIjogYWN0aW9uX3NwbGl0cGF0Y2gsCit9CisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICB2ZXJzaW9uID0gIkNvbWJvIExheWVyIFJlcG8gVG9vbCB2ZXJzaW9uICVzIiAlIF9fdmVyc2lvbl9fLAorICAgICAgICB1c2FnZSA9ICIiIiVwcm9nIFtvcHRpb25zXSBhY3Rpb24KKworQ3JlYXRlIGFuZCB1cGRhdGUgYSBjb21iaW5hdGlvbiBsYXllciByZXBvc2l0b3J5IGZyb20gbXVsdGlwbGUgY29tcG9uZW50IHJlcG9zaXRvcmllcy4KKworQWN0aW9uOgorICBpbml0ICAgICAgICAgICAgICAgICBpbml0aWFsaXNlIHRoZSBjb21ibyBsYXllciByZXBvCisgIHVwZGF0ZSBbY29tcG9uZW50c10gIGdldCBwYXRjaGVzIGZyb20gY29tcG9uZW50IHJlcG9zIGFuZCBhcHBseSB0aGVtIHRvIHRoZSBjb21ibyByZXBvCisgIHB1bGwgW2NvbXBvbmVudHNdICAgIGp1c3QgcHVsbCBjb21wb25lbnQgcmVwb3Mgb25seQorICBzcGxpdHBhdGNoIFtjb21taXRdICBnZW5lcmF0ZSBjb21taXQgcGF0Y2ggYW5kIHNwbGl0IHBlciBjb21wb25lbnQsIGRlZmF1bHQgY29tbWl0IGlzIEhFQUQiIiIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWMiLCAiLS1jb25mIiwgaGVscCA9ICJzcGVjaWZ5IHRoZSBjb25maWcgZmlsZSAoY29uZi9jb21iby1sYXllci5jb25mIGlzIHRoZSBkZWZhdWx0KS4iLAorICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJjb25mZmlsZSIsIGRlZmF1bHQgPSAiY29uZi9jb21iby1sYXllci5jb25mIikKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItaSIsICItLWludGVyYWN0aXZlIiwgaGVscCA9ICJpbnRlcmFjdGl2ZSBtb2RlLCB1c2VyIGNhbiBlZGl0IHRoZSBwYXRjaCBsaXN0IGFuZCBwYXRjaGVzIiwKKyAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJpbnRlcmFjdGl2ZSIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItRCIsICItLWRlYnVnIiwgaGVscCA9ICJvdXRwdXQgZGVidWcgaW5mb3JtYXRpb24iLAorICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gImRlYnVnIiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1uIiwgIi0tbm8tcHVsbCIsIGhlbHAgPSAic2tpcCBwdWxsaW5nIGNvbXBvbmVudCByZXBvcyBkdXJpbmcgdXBkYXRlIiwKKyAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJub3B1bGwiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1oYXJkLXJlc2V0IiwKKyAgICAgICAgICAgICAgIGhlbHAgPSAiaW5zdGVhZCBvZiBwdWxsIGRvIGZldGNoIGFuZCBoYXJkLXJlc2V0IGluIGNvbXBvbmVudCByZXBvcyIsCisgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAiaGFyZF9yZXNldCIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItSCIsICItLWhpc3RvcnkiLCBoZWxwID0gImltcG9ydCBmdWxsIGhpc3Rvcnkgb2YgY29tcG9uZW50cyBkdXJpbmcgaW5pdCIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisKKyAgICAjIERpc3BhdGNoIHRvIGFjdGlvbiBoYW5kbGVyCisgICAgaWYgbGVuKGFyZ3MpID09IDE6CisgICAgICAgIGxvZ2dlci5lcnJvcigiTm8gYWN0aW9uIHNwZWNpZmllZCwgZXhpdGluZyIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICBlbGlmIGFyZ3NbMV0gbm90IGluIGFjdGlvbnM6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5zdXBwb3J0ZWQgYWN0aW9uICVzLCBleGl0aW5nXG4iICUgKGFyZ3NbMV0pKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgZWxpZiBub3Qgb3MucGF0aC5leGlzdHMob3B0aW9ucy5jb25mZmlsZSk6CisgICAgICAgIGxvZ2dlci5lcnJvcigiTm8gdmFsaWQgY29uZmlnIGZpbGUsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICBlbHNlOgorICAgICAgICBpZiBvcHRpb25zLmRlYnVnOgorICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisgICAgICAgIGNvbmZkYXRhID0gQ29uZmlndXJhdGlvbihvcHRpb25zKQorICAgICAgICBpbml0bW9kZSA9IChhcmdzWzFdID09ICdpbml0JykKKyAgICAgICAgY29uZmRhdGEuc2FuaXR5X2NoZWNrKGluaXRtb2RlKQorICAgICAgICBhY3Rpb25zLmdldChhcmdzWzFdLCBhY3Rpb25fZXJyb3IpKGNvbmZkYXRhLCBhcmdzWzE6XSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDUpCisgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbWJvLWxheWVyLWhvb2stZGVmYXVsdC5zaCBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb21iby1sYXllci1ob29rLWRlZmF1bHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWUzYTNiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb21iby1sYXllci1ob29rLWRlZmF1bHQuc2gKQEAgLTAsMCArMSwyMCBAQAorIyEvYmluL3NoCisjIEhvb2sgdG8gYWRkIHNvdXJjZSBjb21wb25lbnQvcmV2aXNpb24gaW5mbyB0byBjb21taXQgbWVzc2FnZQorIyBQYXJhbWV0ZXI6CisjICAgJDEgcGF0Y2gtZmlsZQorIyAgICQyIHJldmlzaW9uCisjICAgJDMgcmVwb25hbWUKKworcGF0Y2hmaWxlPSQxCityZXY9JDIKK3JlcG9uYW1lPSQzCisKK3NlZCAtaSAtZSAiMCwvXlN1YmplY3Q6L3MjXlN1YmplY3Q6IFxbUEFUQ0hcXSBcKCRyZXBvbmFtZTogXCkqXCguKlwpI1N1YmplY3Q6IFxbUEFUQ0hcXSAkcmVwb25hbWU6IFwyIyIgJHBhdGNoZmlsZQoraWYgZ3JlcCAtcSAnXlNpZ25lZC1vZmYtYnk6JyAkcGF0Y2hmaWxlOyB0aGVuCisgICAgIyBJbnNlcnQgYmVmb3JlIFNpZ25lZC1vZmYtYnkuCisgICAgc2VkIC1pIC1lICIwLC9eU2lnbmVkLW9mZi1ieTovcyNcKF5TaWduZWQtb2ZmLWJ5Oi4qXCkjXChGcm9tICRyZXBvbmFtZSByZXY6ICRyZXZcKVxuXG5cMSMiICRwYXRjaGZpbGUKK2Vsc2UKKyAgICAjIEluc2VydCBiZWZvcmUgZmluYWwgLS0tIHNlcGFyYXRvciwgd2l0aCBleHRyYSBibGFuayBsaW5lcyByZW1vdmVkLgorICAgIHBlcmwgLWUgIlwkXyA9IGpvaW4oJycsIDw+KTsgcy9eKC4qXFNbIFx0XSopKFxufFxuXHMqXG4pLS0tXG4vXCQxXG5cbkZyb20gJHJlcG9uYW1lIHJldjogJHJldlxuLS0tXG4vczsgcHJpbnQ7IiAkcGF0Y2hmaWxlID4kcGF0Y2hmaWxlLnRtcAorICAgIG12ICRwYXRjaGZpbGUudG1wICRwYXRjaGZpbGUKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvY29tYm8tbGF5ZXIuY29uZi5leGFtcGxlIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbWJvLWxheWVyLmNvbmYuZXhhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGUyYjU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbWJvLWxheWVyLmNvbmYuZXhhbXBsZQpAQCAtMCwwICsxLDkzIEBACisjIGNvbWJvLWxheWVyIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmaWxlCisKKyMgRGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCBzZWN0aW9ucy4KK1tERUZBVUxUXQorCisjIEFkZCAnU2lnbmVkLW9mZi1ieScgdG8gYWxsIGNvbW1pdHMgdGhhdCBnZXQgaW1wb3J0ZWQgYXV0b21hdGljYWxseS4KK3NpZ25vZmYgPSBUcnVlCisKKyMgY29tcG9uZW50IG5hbWUKK1tiaXRiYWtlXQorCisjIE92ZXJyaWRlIHNpZ25lZG9mZiBkZWZhdWx0IGFib3ZlIChub3QgdmVyeSB1c2VmdWwsIGJ1dCBwb3NzaWJsZSkuCitzaWdub2ZmID0gRmFsc2UKKworIyBtYW5kYXRvcnkgb3B0aW9ucworIyBnaXQgdXBzdHJlYW0gdXJpCitzcmNfdXJpID0gZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZQorCisjIHRoZSBkaXJlY3RvcnkgdG8gY2xvbmUgdGhlIGNvbXBvbmVudCByZXBvCitsb2NhbF9yZXBvX2RpciA9IC9ob21lL2t5dTMvc3JjL3Rlc3QvYml0YmFrZQorCisjIHRoZSByZWxhdGl2ZSBkaXIgd2l0aGluIHRoZSBjb21ibyByZXBvIHRvIHB1dCB0aGUgY29tcG9uZW50IGZpbGVzCisjIHVzZSAiLiIgaWYgdGhlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGUgcm9vdCBkaXIKK2Rlc3RfZGlyID0gYml0YmFrZQorCisjIHRoZSBsYXN0IHVwZGF0ZSByZXZpc2lvbi4KKyMgImluaXQiIHdpbGwgc2V0IHRoaXMgdG8gdGhlIGxhdGVzdCByZXZpc2lvbiBhdXRvbWF0aWNhbGx5LCBob3dldmVyIGlmIGl0CisjIGlzIGVtcHR5IHdoZW4gInVwZGF0ZSIgaXMgcnVuLCB0aGUgdG9vbCB3aWxsIHN0YXJ0IGZyb20gdGhlIGZpcnN0IGNvbW1pdC4KKyMgTm90ZSB0aGF0IHRoaXMgdmFsdWUgd2lsbCBnZXQgdXBkYXRlZCBieSAidXBkYXRlIiBpZiB0aGUgY29tcG9uZW50IHJlcG8ncworIyBsYXRlc3QgcmV2aXNpb24gY2hhbmdlZCBhbmQgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5LgorbGFzdF9yZXZpc2lvbiA9CisKKyMgb3B0aW9uYWwgb3B0aW9uczoKKworIyBicmFuY2g6IHNwZWNpZnkgdGhlIGJyYW5jaCBpbiB0aGUgY29tcG9uZW50IHJlcG8gdG8gcHVsbCBmcm9tCisjIChtYXN0ZXIgaWYgbm90IHNwZWNpZmllZCkKKworIyBmaWxlX2ZpbHRlcjogb25seSBpbmNsdWRlIHRoZSBzcGVjaWZpZWQgZmlsZShzKQorIyBmaWxlX2ZpbHRlciA9IFtwYXRoXSBbcGF0aF0gLi4uCisjIGV4YW1wbGU6CisjICAgZmlsZV9maWx0ZXIgPSBzcmMvICA6IG9ubHkgaW5jbHVkZSB0aGUgc3ViZGlyIHNyYworIyAgIGZpbGVfZmlsdGVyID0gc3JjLyouYyA6IG9ubHkgaW5jbHVkZSB0aGUgc3JjICouYyBmaWxlCisjICAgZmlsZV9maWx0ZXIgPSBzcmMvbWFpbi5jIHNyYy9NYWtlZmlsZS5hbSA6IG9ubHkgaW5jbHVkZSB0aGVzZSB0d28gZmlsZXMKKworIyBmaWxlX2V4Y2x1ZGU6IGZpbHRlciBvdXQgdGhlc2UgZmlsZShzKQorIyBmaWxlX2V4Y2x1ZGUgPSBbcGF0aF0gW3BhdGhdIC4uLgorIworIyBFYWNoIGVudHJ5IG11c3QgbWF0Y2ggYSBmaWxlIG5hbWUuIEluIGNvbnRyYXN0IGRvIGZpbGVfZmlsdGVyLCBtYXRjaGluZworIyBhIGRpcmVjdG9yeSBoYXMgbm8gZWZmZWN0LiBUbyBhY2hpZXZlIHRoYXQsIHVzZSBhcHBlbmQgYSAqIHdpbGRjYXJkCisjIGF0IHRoZSBlbmQuCisjCisjIFdpbGRjYXJkcyBhcmUgYXBwbGllZCB0byB0aGUgY29tcGxldGUgcGF0aCBhbmQgYWxzbyBtYXRjaCBzbGFzaGVzLgorIworIyBleGFtcGxlOgorIyAgIGZpbGVfZXhjbHVkZSA9IHNyYy9mb29iYXIvKiAgOiBleGNsdWRlIGV2ZXJ5dGhpbmcgdW5kZXIgc3JjL2Zvb2JhcgorIyAgIGZpbGVfZXhjbHVkZSA9IHNyYy9tYWluLmMgOiBmaWx0ZXIgb3V0IG1haW4uYyBhZnRlciBpbmNsdWRpbmcgaXQgd2l0aCBmaWxlX2ZpbHRlciA9IHNyYy8qLmMKKyMgICBmaWxlX2V4Y2x1ZGUgPSAqfiA6IGV4Y2x1ZGUgYmFja3VwIGZpbGVzCisKKyMgaG9vazogaWYgcHJvdmlkZWQsIHRoZSB0b29sIHdpbGwgY2FsbCB0aGUgaG9vayB0byBwcm9jZXNzIHRoZSBnZW5lcmF0ZWQKKyMgICAgIHBhdGNoIGZyb20gdXBzdHJlYW0sIGFuZCB0aGVuIGFwcGx5IHRoZSBtb2RpZmllZCBwYXRjaCB0byB0aGUgY29tYm8KKyMgICAgIHJlcG8uCisjIHRoZSBob29rIHNjcmlwdCBpcyBjYWxsZWQgYXMgZm9sbG93czogLi9ob29rIHBhdGNocGF0aCByZXZpc2lvbiByZXBvbmFtZQorIyBleGFtcGxlOgorIyAgICAgaG9vayA9IGNvbWJvLWxheWVyLWhvb2stZGVmYXVsdC5zaAorCisjIHNpbmNlX3JldmlzaW9uOgorIyAgIHNpbmNlX3JldmlzaW9uID0gcmVsZWFzZS0xLTIKKyMgICBzaW5jZV9yZXZpc2lvbiA9IDEyMzQ1IGFiY2RmCisjCisjIElmIHByb3ZpZGVkLCB0cnVuY2F0ZSBpbXBvcnRlZCBoaXN0b3J5IGR1cmluZyAiY29tYm8tbGF5ZXIgLS1oaXN0b3J5CisjIGluaXQiIGF0IHRoZSBzcGVjaWZpZWQgcmV2aXNpb24ocykuICBNb3JlIHRoYW4gb25lIGNhbiBiZSBzcGVjaWZpZWQKKyMgdG8gY3V0IG9mZiBtdWx0aXBsZSBjb21wb25lbnQgYnJhbmNoZXMuCisjCisjIFRoZSBzcGVjaWZpZWQgY29tbWl0cyB0aGVtc2VsdmVzIGRvIG5vdCBnZXQgaW1wb3J0ZWQuIEluc3RlYWQsIGFuCisjIGFydGlmaWNpYWwgY29tbWl0IHdpdGggInVua25vd24iIGF1dGhvciBpcyBjcmVhdGVkIHdpdGggYSBjb250ZW50CisjIHRoYXQgbWF0Y2hlcyB0aGUgb3JpZ2luYWwgY29tbWl0LgorCitbb2UtY29yZV0KK3NyY191cmkgPSBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZQorbG9jYWxfcmVwb19kaXIgPSAvaG9tZS9reXUzL3NyYy90ZXN0L29lY29yZQorZGVzdF9kaXIgPSAuCitsYXN0X3JldmlzaW9uID0KK3NpbmNlX3JldmlzaW9uID0gc29tZS10YWctb3ItY29tbWl0LW9uLW1hc3Rlci1icmFuY2gKKworIyBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGVtYmVkIHB5dGhvbiBjb2RlIGluIHRoZSBjb25maWcgdmFsdWVzLiBTaW1pbGFyCisjIHRvIGJpdGJha2UgaXQgY29uc2lkZXJzIGV2ZXJ5IHZhbHVlIHN0YXJ0aW5nIHdpdGggQCB0byBiZSBhIHB5dGhvbgorIyBzY3JpcHQuCisjIGUuZy4gbG9jYWxfcmVwb19kaXIgY291bGQgZWFzaWx5IGJlIGNvbmZpZ3VyZWQgdXNpbmcgYW4gZW52aXJvbm1lbnQKKyMgdmFyaWFibGU6CisjCisjIFtiaXRiYWtlXQorIyBsb2NhbF9yZXBvX2RpciA9IEBvcy5nZXRlbnYoIkxPQ0FMX1JFUE9fRElSIikgKyAiL2JpdGJha2UiCisjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9iYi1wZXJmL2JiLW1hdHJpeC1wbG90LnNoIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmItcGVyZi9iYi1tYXRyaXgtcGxvdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMzZhMjU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmItcGVyZi9iYi1tYXRyaXgtcGxvdC5zaApAQCAtMCwwICsxLDEzNyBAQAorIyEvYmluL2Jhc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBzY3JpcHQgb3BlcmF0ZXMgb24gdGhlIC5kYXQgZmlsZSBnZW5lcmF0ZWQgYnkgYmItbWF0cml4LnNoLiBJdCB0b2xlcmF0ZXMKKyMgdGhlIGhlYWRlciBieSBza2lwcGluZyB0aGUgZmlyc3QgbGluZSwgYnV0IGVycm9yIG1lc3NhZ2VzIGFuZCBiYWQgZGF0YSByZWNvcmRzCisjIG5lZWQgdG8gYmUgcmVtb3ZlZCBmaXJzdC4gSXQgd2lsbCBnZW5lcmF0ZSB0aHJlZSB2aWV3cyBvZiB0aGUgcGxvdCwgYW5kIGxlYXZlCisjIGFuIGludGVyYWN0aXZlIHZpZXcgb3BlbiBmb3IgZnVydGhlciBhbmFseXNpcy4KKyMKKyMgQVVUSE9SUworIyBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKyMKKworIyBTZXR1cCB0aGUgZGVmYXVsdHMKK0RBVEZJTEU9ImJiLW1hdHJpeC5kYXQiCitYTEFCRUw9IkJCX05VTUJFUl9USFJFQURTIgorWUxBQkVMPSJQQVJBTExFTF9NQUtFIgorRklFTEQ9MworREVGX1RJVExFPSJFbGFwc2VkIFRpbWUgKHNlY29uZHMpIgorUE0zRF9GUkFHTUVOVD0idW5zZXQgc3VyZmFjZTsgc2V0IHBtM2QgYXQgcyBoaWRkZW4zZCAxMDAiCitTSVpFPSI2NDAsNDgwIgorCitmdW5jdGlvbiB1c2FnZSB7CitDTUQ9JChiYXNlbmFtZSAkMCkKK2NhdCA8PEVPTQorVXNhZ2U6ICRDTUQgWy1kIGRhdGZpbGVdIFstZiBmaWVsZF0gWy1oXSBbLXQgdGl0bGVdIFstd10KKyAgLWQgZGF0ZmlsZSAgICBUaGUgZGF0YSBmaWxlIGdlbmVyYXRlZCBieSBiYi1tYXRyaXguc2ggKGRlZmF1bHQ6ICREQVRGSUxFKQorICAtZiBmaWVsZCAgICAgIFRoZSBmaWVsZCBpbmRleCB0byBwbG90IGFzIHRoZSBaIGF4aXMgZnJvbSB0aGUgZGF0YSBmaWxlCisgICAgICAgICAgICAgICAgKGRlZmF1bHQ6ICRGSUVMRCwgIiRERUZfVElUTEUiKQorICAtaCAgICAgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UKKyAgLXMgVyxIICAgICAgICBQTkcgYW5kIHdpbmRvdyBzaXplIGluIHBpeGVscyAoZGVmYXVsdDogJFNJWkUpCisgIC10IHRpdGxlICAgICAgVGhlIHRpdGxlIHRvIGRpc3BsYXksIHNob3VsZCBkZXNjcmliZSB0aGUgZmllbGQgKC1mKSBhbmQgdW5pdHMKKyAgICAgICAgICAgICAgICAoZGVmYXVsdDogIiRERUZfVElUTEUiKQorICAtdyAgICAgICAgICAgIFJlbmRlciB0aGUgcGxvdCBhcyB3aXJlZnJhbWUgd2l0aCBhIDJEIGNvbG9ybWFwIHByb2plY3RlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICBYWSBwbGFuZSByYXRoZXIgdGhhbiBhcyB0aGUgdGV4dHVyZSBmb3IgdGhlIHN1cmZhY2UKK0VPTQorfQorCisjIFBhcnNlIGFuZCB2YWxpZGF0ZSBhcmd1bWVudHMKK3doaWxlIGdldG9wdHMgImQ6Zjpoczp0OnciIE9QVDsgZG8KKwljYXNlICRPUFQgaW4KKwlkKQorCQlEQVRGSUxFPSIkT1BUQVJHIgorCQk7OworCWYpCisJCUZJRUxEPSIkT1BUQVJHIgorCQk7OworCWgpCisJCXVzYWdlCisJCWV4aXQgMAorCQk7OworCXMpCisJCVNJWkU9IiRPUFRBUkciCisJCTs7CisJdCkKKwkJVElUTEU9IiRPUFRBUkciCisJCTs7CisJdykKKwkJUE0zRF9GUkFHTUVOVD0ic2V0IHBtM2QgYXQgYiIKKwkJVz0iLXciCisJCTs7CisJKikKKwkJdXNhZ2UKKwkJZXhpdCAxCisJCTs7CisJZXNhYworZG9uZQorCisjIEVuc3VyZSB0aGUgZGF0YSBmaWxlIGV4aXN0cworaWYgWyAhIC1mICIkREFURklMRSIgXTsgdGhlbgorCWVjaG8gIkVSUk9SOiAkREFURklMRSBkb2VzIG5vdCBleGlzdCIKKwl1c2FnZQorCWV4aXQgMQorZmkKK1BMT1RfQkFTRU5BTUU9JHtEQVRGSUxFJS4qfS1mJEZJRUxEJFcKKworIyBTZXQgYSBzYW5lIHRpdGxlCisjIFRPRE86IHBhcnNlIHRoZSBoZWFkZXIgYW5kIGRlZmluZSB0aXRsZXMgZm9yIGVhY2ggZm9ybWF0IHBhcmFtZXRlciBmb3IgVElNRSgxKQoraWYgWyAteiAiJFRJVExFIiBdOyB0aGVuCisJaWYgWyAhICIkRklFTEQiID09ICIzIiBdOyB0aGVuCisJCVRJVExFPSJGaWVsZCAkRklFTEQiCisJZWxzZQorCQlUSVRMRT0iJERFRl9USVRMRSIKKwlmaQorZmkKKworIyBEZXRlcm1pbmUgdGhlIGRncmlkM2QgbWVzaCBkaW1lbnNpb25zIHNpemUKK01JTj0kKHRhaWwgLW4gKzIgIiREQVRGSUxFIiB8IGN1dCAtZCAnICcgLWYgMSB8IHNlZCAncy9eMCovLycgfCBzb3J0IC1uIHwgdW5pcSB8IGhlYWQgLW4xKQorTUFYPSQodGFpbCAtbiArMiAiJERBVEZJTEUiIHwgY3V0IC1kICcgJyAtZiAxIHwgc2VkICdzL14wKi8vJyB8IHNvcnQgLW4gfCB1bmlxIHwgdGFpbCAtbjEpCitCQl9DTlQ9JFske01BWH0gLSAkTUlOICsgMV0KK01JTj0kKHRhaWwgLW4gKzIgIiREQVRGSUxFIiB8IGN1dCAtZCAnICcgLWYgMiB8IHNlZCAncy9eMCovLycgfCBzb3J0IC1uIHwgdW5pcSB8IGhlYWQgLW4xKQorTUFYPSQodGFpbCAtbiArMiAiJERBVEZJTEUiIHwgY3V0IC1kICcgJyAtZiAyIHwgc2VkICdzL14wKi8vJyB8IHNvcnQgLW4gfCB1bmlxIHwgdGFpbCAtbjEpCitQTV9DTlQ9JFske01BWH0gLSAkTUlOICsgMV0KKworCisoY2F0IDw8RU9GCitzZXQgdGl0bGUgIiRUSVRMRSIKK3NldCB4bGFiZWwgIiRYTEFCRUwiCitzZXQgeWxhYmVsICIkWUxBQkVMIgorc2V0IHN0eWxlIGxpbmUgMTAwIGx0IDUgbHcgMS41CiskUE0zRF9GUkFHTUVOVAorc2V0IGRncmlkM2QgJFBNX0NOVCwkQkJfQ05UIHNwbGluZXMKK3NldCB0aWNzbGV2ZWwgMC4yCisKK3NldCB0ZXJtIHBuZyBzaXplICRTSVpFCitzZXQgb3V0cHV0ICIkUExPVF9CQVNFTkFNRS5wbmciCitzcGxvdCAiJERBVEZJTEUiIGV2ZXJ5IDo6MSB1c2luZyAxOjI6JEZJRUxEIHdpdGggbGluZXMgbHMgMTAwCisKK3NldCB2aWV3IDkwLDAKK3NldCBvdXRwdXQgIiRQTE9UX0JBU0VOQU1FLWJiLnBuZyIKK3JlcGxvdAorCitzZXQgdmlldyA5MCw5MAorc2V0IG91dHB1dCAiJFBMT1RfQkFTRU5BTUUtcG0ucG5nIgorcmVwbG90CisKK3NldCB2aWV3IDYwLDMwCitzZXQgdGVybSB3eHQgc2l6ZSAkU0laRQorcmVwbG90CitFT0YKKykgfCBnbnVwbG90IC0tcGVyc2lzdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmItcGVyZi9iYi1tYXRyaXguc2ggYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9iYi1wZXJmL2JiLW1hdHJpeC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMDY0NTY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmItcGVyZi9iYi1tYXRyaXguc2gKQEAgLTAsMCArMSw3OSBAQAorIyEvYmluL2Jhc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBzY3JpcHQgcnVucyBCQl9DTUQgKHR5cGljYWxseSBidWlsZGluZyBjb3JlLWltYWdlLXNhdG8pIGZvciBhbGwKKyMgY29tYmluY2F0aW9ucyBvZiBCQl9SQU5HRSBhbmQgUE1fUkFOR0UgdmFsdWVzLiBJdCBzYXZlcyBvZmYgYWxsIHRoZSBjb25zb2xlCisjIGxvZ3MsIHRoZSBidWlsZHN0YXRzIGRpcmVjdG9yaWVzLCBhbmQgY3JlYXRlcyBhIGJiLXBtLXJ1bnRpbWUuZGF0IGZpbGUgd2hpY2gKKyMgY2FuIGJlIHVzZWQgdG8gcG9zdHByb2Nlc3MgdGhlIHJlc3VsdHMgd2l0aCBhIHBsb3R0aW5nIHRvb2wsIHNwcmVhZHNoZWV0LCBldGMuCisjIEJlZm9yZSBydW5uaW5nIHRoaXMgc2NyaXB0LCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBwcmUtZG93bmxvYWQgYWxsIHRoZQorIyBuZWNlc3Nhcnkgc291cmNlcyBieSBwZXJmb3JtaW5nIHRoZSBCQl9DTUQgb25jZSBtYW51YWxseS4gSXQgaXMgYWxzbyBhIGdvb2QKKyMgaWRlYSB0byBkaXNhYmxlIGNyb24gdG8gYXZvaWQgcnVudGltZSB2YXJpYXRpb25zIGNhdXNlZCBieSB0aGluZ3MgbGlrZSB0aGUKKyMgbG9jYXRlIHByb2Nlc3MuIEJlIHN1cmUgdG8gc2FuaXRpemUgdGhlIGRhdCBmaWxlIHByaW9yIHRvIHBvc3QtcHJvY2Vzc2luZyBhcworIyBpdCBtYXkgY29udGFpbiBlcnJvciBtZXNzYWdlcyBvciBiYWQgcnVucyB0aGF0IHNob3VsZCBiZSByZW1vdmVkLgorIworIyBBVVRIT1JTCisjIERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorIworCisjIFRoZSBmb2xsb3dpbmcgcmFuZ2VzIGFyZSBhcHByb3ByaWF0ZSBmb3IgYSA0IGNvcmUgc3lzdGVtIHdpdGggOCBsb2dpY2FsIHVuaXRzCisjIFVzZSBsZWFkaW5nIDBzIHRvIGVuc3VyZSBhbGwgZGlnaXRzIGFyZSB0aGUgc2FtZSBzdHJpbmcgbGVuZ3RoLCB0aGlzIHJlc3VsdHMKKyMgaW4gbmljZSBsb2cgZmlsZSBuYW1lcyBhbmQgY29sdW1uYXIgZGF0IGZpbGVzLgorQkJfUkFOR0U9IjA0IDA1IDA2IDA3IDA4IDA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IgorUE1fUkFOR0U9IjA0IDA1IDA2IDA3IDA4IDA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IgorCitEQVRBRElSPSJiYi1tYXRyaXgtJCQiCitCQl9DTUQ9ImJpdGJha2UgY29yZS1pbWFnZS1taW5pbWFsIgorUlVOVElNRV9MT0c9IiREQVRBRElSL2JiLW1hdHJpeC5kYXQiCisKKyMgU2VlIFRJTUUoMSkgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHRpbWUgZm9ybWF0IHBhcmFtZXRlcnMKKyMgVGhlIGZvbGxvd2luZyBhbGwgcmVwb3J0IDA6IFcgSyByIHMgdCB3CitUSU1FX1NUUj0iJWUgJVMgJVUgJVAgJWMgJXcgJVIgJUYgJU0gJXgiCisKKyMgUHJlcGFyZSB0aGUgREFUQURJUgorbWtkaXIgJERBVEFESVIKK2lmIFsgJD8gLW5lIDAgXTsgdGhlbgorCWVjaG8gIkZhaWxlZCB0byBjcmVhdGUgJERBVEFESVIuIgorCWV4aXQgMQorZmkKKworIyBBZGQgYSBzaW1wbGUgaGVhZGVyCitlY2hvICJCQiBQTSAkVElNRV9TVFIiID4gJFJVTlRJTUVfTE9HCitmb3IgQkIgaW4gJEJCX1JBTkdFOyBkbworCWZvciBQTSBpbiAkUE1fUkFOR0U7IGRvCisJCVJVTkRJUj0iJERBVEFESVIvJEJCLSRQTS1idWlsZCIKKwkJbWtkaXIgJFJVTkRJUgorCQlCQl9MT0c9JFJVTkRJUi8kQkItJFBNLWJpdGJha2UubG9nCisJCWRhdGUKKwkJZWNobyAiQkI9JEJCIFBNPSRQTSBMb2dnaW5nIHRvICRCQl9MT0ciCisKKwkJZWNobyAtbiAiICBQcmVwYXJpbmcgdGhlIHdvcmsgZGlyZWN0b3J5Li4uICIKKwkJcm0gLXJmIHBzZXVkb2RvbmUgdG1wIHNzdGF0ZS1jYWNoZSB0bXAtZWdsaWJjICY+IC9kZXYvbnVsbAorCQllY2hvICJkb25lIgorCisJCSMgRXhwb3J0IHRoZSB2YXJpYWJsZXMgdW5kZXIgdGVzdCBhbmQgcnVuIHRoZSBiaXRiYWtlIGNvbW1hbmQKKwkJIyBTdHJpcCBhbnkgbGVhZGluZyB6ZXJvZXMgYmVmb3JlIHBhc3NpbmcgdG8gYml0YmFrZQorCQlleHBvcnQgQkJfTlVNQkVSX1RIUkVBRFM9JChlY2hvICRCQiB8IHNlZCAncy9eMCovLycpCisJCWV4cG9ydCBQQVJBTExFTF9NQUtFPSItaiAkKGVjaG8gJFBNIHwgc2VkICdzL14wKi8vJykiCisJCS91c3IvYmluL3RpbWUgLWYgIiRCQiAkUE0gJFRJTUVfU1RSIiAtYSAtbyAkUlVOVElNRV9MT0cgJEJCX0NNRCAmPiAkQkJfTE9HCisKKwkJZWNobyAiICAkKHRhaWwgLW4xICRSVU5USU1FX0xPRykiCisJCWNwIC1hIHRtcC9idWlsZHN0YXRzICRSVU5ESVIvJEJCLSRQTS1idWlsZHN0YXRzCisJZG9uZQorZG9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmItcGVyZi9idWlsZHN0YXRzLnNoIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmItcGVyZi9idWlsZHN0YXRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk2MTU4YTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9iYi1wZXJmL2J1aWxkc3RhdHMuc2gKQEAgLTAsMCArMSw5MCBAQAorIyEvYmluL2Jhc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgR2l2ZW4gYSAnYnVpbGRzdGF0cycgcGF0aCAoY3JlYXRlZCBieSBiaXRiYWtlIHdoZW4gc2V0dGluZworIyBVU0VSX0NMQVNTRVMgPz0gImJ1aWxkc3RhdHMiIG9uIGxvY2FsLmNvbmYpIGFuZCB0YXNrIG5hbWVzLCBvdXRwdXRzCisjICc8dGFzaz4gPHJlY2lwZT4gPGVsYXBzZWQgdGltZT4nIGZvciBhbGwgcmVjaXBlcy4gRWxhcHNlZCB0aW1lcyBhcmUgaW4KKyMgc2Vjb25kcywgYW5kIHRhc2sgc2hvdWxkIGJlIGdpdmVuIHdpdGhvdXQgdGhlICdkb18nIHByZWZpeC4KKyMKKyMgU29tZSB1c2VmdWwgcGlwZWxpbmVzCisjCisjIDEuIFRhc2tzIHdpdGggbGFyZ2VzdCBlbGFwc2VkIHRpbWVzCisjICQgYnVpbGRzdGF0cy5zaCAtYiA8YnVpbGRzdGF0cz4gfCBzb3J0IC1rMyAtbiAtciB8IGhlYWQKKyMKKyMgMi4gTWluLCBtYXgsIHN1bSBwZXIgdGFzayAoaW4gbmVlZHMgR05VIGRhdGFtYXNoKQorIyAkIGJ1aWxkc3RhdHMuc2ggLWIgPGJ1aWxkc3RhdHM+IHwgZGF0YW1hc2ggLXQnICcgLWcxIG1pbiAzIG1heCAzIHN1bSAzIHwgc29ydCAtazQgLW4gLXIKKyMKKyMgQVVUSE9SUworIyBMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPgorIworQlNfRElSPSJ0bXAvYnVpbGRzdGF0cyIKK1RBU0tTPSJjb21waWxlOmNvbmZpZ3VyZTpmZXRjaDppbnN0YWxsOnBhdGNoOnBvcHVsYXRlX2xpYzpwb3B1bGF0ZV9zeXNyb290OnVucGFjayIKKworZnVuY3Rpb24gdXNhZ2UgeworQ01EPSQoYmFzZW5hbWUgJDApCitjYXQgPDxFT00KK1VzYWdlOiAkQ01EIFstYiBidWlsZHN0YXRzX2Rpcl0gWy10IGRvX3Rhc2tdCisgIC1iIGJ1aWxkc3RhdHMgVGhlIHBhdGggd2hlcmUgdGhlIGZvbGRlciByZXNpZGVzCisgICAgICAgICAgICAgICAgKGRlZmF1bHQ6ICIkQlNfRElSIikKKyAgLXQgdGFza3MgICAgICBUaGUgdGFza3MgdG8gYmUgY29tcHV0ZWQKKyAgICAgICAgICAgICAgICAoZGVmYXVsdDogIiRUQVNLUyIpCisgIC1oICAgICAgICAgICAgRGlzcGxheSB0aGlzIGhlbHAgbWVzc2FnZQorRU9NCit9CisKKyMgUGFyc2UgYW5kIHZhbGlkYXRlIGFyZ3VtZW50cword2hpbGUgZ2V0b3B0cyAiYjp0OmgiIE9QVDsgZG8KKwljYXNlICRPUFQgaW4KKwliKQorCQlCU19ESVI9IiRPUFRBUkciCisJCTs7CisJdCkKKwkJVEFTS1M9IiRPUFRBUkciCisJCTs7CisJaCkKKwkJdXNhZ2UKKwkJZXhpdCAwCisJCTs7CisJKikKKwkJdXNhZ2UKKwkJZXhpdCAxCisJCTs7CisJZXNhYworZG9uZQorCisjIEVuc3VyZSB0aGUgYnVpbGRzdGF0cyBmb2xkZXIgZXhpc3RzCitpZiBbICEgLWQgIiRCU19ESVIiIF07IHRoZW4KKwllY2hvICJFUlJPUjogJEJTX0RJUiBkb2VzIG5vdCBleGlzdCIKKwl1c2FnZQorCWV4aXQgMQorZmkKKworUkVDSVBFX0ZJRUxEPTEKK1RJTUVfRklFTEQ9NAorCit0YXNrcz0oJHtUQVNLUy8vOi8gfSkKK2ZvciB0YXNrIGluICIke3Rhc2tzW0BdfSI7IGRvCisgICAgdGFzaz0iZG9fJHt0YXNrfSIKKyAgICBmb3IgZmlsZSBpbiAkKGZpbmQgJHtCU19ESVJ9IC10eXBlIGYgLW5hbWUgJHt0YXNrfSk7IGRvCisgICAgICAgIHJlY2lwZT0kKHNlZCAtbiAtZSAiLyR0YXNrL3AiICR7ZmlsZX0gfCBjdXQgLWQgJzonIC1mJHtSRUNJUEVfRklFTER9KQorICAgICAgICB0aW1lPSQoc2VkIC1uIC1lICIvJHRhc2svcCIgJHtmaWxlfSB8IGN1dCAtZCAnOicgLWYke1RJTUVfRklFTER9IHwgY3V0IC1kICcgJyAtZjIpCisgICAgICAgIGVjaG8gIiR7dGFza30gJHtyZWNpcGV9ICR7dGltZX0iCisgICAgZG9uZQorZG9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmJ2YXJzLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmJ2YXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA4OTZkNjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9iYnZhcnMucHkKQEAgLTAsMCArMSwxODYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjCisjIENvcHlyaWdodCAoQykgRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+LCAyMDEwCisKKworaW1wb3J0IHN5cworaW1wb3J0IGdldG9wdAoraW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHJlCisKK2RlZiB1c2FnZSgpOgorICAgIHByaW50ICdVc2FnZTogJXMgLWQgRklMRU5BTUUgWy1kIEZJTEVOQU1FXSogLW0gTUVUQURJUiBbLW0gTUFUQURJUl0qJyAlIG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCisgICAgcHJpbnQgJyAgLWQgRklMRU5BTUUgICAgICAgICBkb2N1bWVudGF0aW9uIGZpbGUgdG8gc2VhcmNoJworICAgIHByaW50ICcgIC1oLCAtLWhlbHAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQnCisgICAgcHJpbnQgJyAgLW0gTUVUQURJUiAgICAgICAgICBtZXRhIGRpcmVjdG9yeSB0byBzZWFyY2ggZm9yIHJlY2lwZXMnCisgICAgcHJpbnQgJyAgLXQgRklMRU5BTUUgICAgICAgICBkb2N1bWVudGF0aW9uIGNvbmZpZyBmaWxlIChmb3IgZG9jIHRhZ3MpJworICAgIHByaW50ICcgIC1UICAgICAgICAgICAgICAgICAgT25seSBkaXNwbGF5IHZhcmlhYmxlcyB3aXRoIGRvYyB0YWdzIChyZXF1aXJlcyAtdCknCisKK2RlZiByZWNpcGVfYmJ2YXJzKHJlY2lwZSk6CisgICAgJycnIFJldHVybiBhIHVuaXF1ZSBzZXQgb2YgZXZlcnkgYmJ2YXIgZW5jb3VudGVyZWQgaW4gdGhlIHJlY2lwZSAnJycKKyAgICBwcm9nID0gcmUuY29tcGlsZSgiW0EtWl9dKyIpCisgICAgdnNldCA9IHNldCgpCisgICAgdHJ5OgorICAgICAgICByID0gb3BlbihyZWNpcGUpCisgICAgZXhjZXB0IElPRXJyb3IgYXMgKGVycm5vLCBzdHJlcnJvcik6CisgICAgICAgIHByaW50ICdXQVJOSU5HOiBGYWlsZWQgdG8gb3BlbiByZWNpcGUgJywgcmVjaXBlCisgICAgICAgIHByaW50IHN0cmVycm9yCisKKyAgICBmb3IgbGluZSBpbiByOgorICAgICAgICAjIFN0cmlwIGFueSBjb21tZW50cyBmcm9tIHRoZSBsaW5lCisgICAgICAgIGxpbmUgPSBsaW5lLnJzcGxpdCgnIycpWzBdCisgICAgICAgIHZzZXQgPSB2c2V0LnVuaW9uKHNldChwcm9nLmZpbmRhbGwobGluZSkpKQorICAgIHIuY2xvc2UoKQorCisgICAgYmJ2YXJzID0ge30KKyAgICBmb3IgdiBpbiB2c2V0OgorICAgICAgICBiYnZhcnNbdl0gPSAxCisKKyAgICByZXR1cm4gYmJ2YXJzCisKK2RlZiBjb2xsZWN0X2JidmFycyhtZXRhZGlyKToKKyAgICAnJycgV2FsayB0aGUgbWV0YWRpciBhbmQgY29sbGVjdCB0aGUgYmJ2YXJzIGZyb20gZWFjaCByZWNpcGUgZm91bmQgJycnCisgICAgYmJ2YXJzID0ge30KKyAgICBmb3Igcm9vdCxkaXJzLGZpbGVzIGluIG9zLndhbGsobWV0YWRpcik6CisgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgaWYgbmFtZS5maW5kKCIuYmIiKSA+PSAwOgorICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gcmVjaXBlX2JidmFycyhvcy5wYXRoLmpvaW4ocm9vdCxuYW1lKSkuaXRlcmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgYmJ2YXJzLmhhc19rZXkoa2V5KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJidmFyc1trZXldID0gYmJ2YXJzW2tleV0gKyAxCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBiYnZhcnNba2V5XSA9IDEKKyAgICByZXR1cm4gYmJ2YXJzCisKK2RlZiBiYnZhcl9pc19kb2N1bWVudGVkKHZhciwgZG9jZmlsZXMpOgorICAgIHByb2cgPSByZS5jb21waWxlKCIuKigkfFteQS1aX10pJXMoW15BLVpfXXwkKSIgJSAodmFyKSkKKyAgICBmb3IgZG9jIGluIGRvY2ZpbGVzOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gb3Blbihkb2MpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIChlcnJubywgc3RyZXJyb3IpOgorICAgICAgICAgICAgcHJpbnQgJ1dBUk5JTkc6IEZhaWxlZCB0byBvcGVuIGRvYyAnLCBkb2MKKyAgICAgICAgICAgIHByaW50IHN0cmVycm9yCisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBpZiBwcm9nLm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGYuY2xvc2UoKQorICAgIHJldHVybiBGYWxzZQorCitkZWYgYmJ2YXJfZG9jdGFnKHZhciwgZG9jY29uZik6CisgICAgcHJvZyA9IHJlLmNvbXBpbGUoJ14lc1xbZG9jXF0gKj0gKiIoLiopIicgJSAodmFyKSkKKyAgICBpZiBkb2Njb25mID09ICIiOgorICAgICAgICByZXR1cm4gIj8iCisKKyAgICB0cnk6CisgICAgICAgIGYgPSBvcGVuKGRvY2NvbmYpCisgICAgZXhjZXB0IElPRXJyb3IgYXMgKGVycm5vLCBzdHJlcnJvcik6CisgICAgICAgIHJldHVybiBzdHJlcnJvcgorCisgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgbSA9IHByb2cuc2VhcmNoKGxpbmUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICByZXR1cm4gbS5ncm91cCgxKQorCisgICAgZi5jbG9zZSgpCisgICAgcmV0dXJuICIiCisKK2RlZiBtYWluKCk6CisgICAgZG9jZmlsZXMgPSBbXQorICAgIG1ldGFkaXJzID0gW10KKyAgICBiYnZhcnMgPSB7fQorICAgIHVuZG9jdW1lbnRlZCA9IFtdCisgICAgZG9jY29uZiA9ICIiCisgICAgb25seWRvY3RhZ3MgPSBGYWxzZQorCisgICAgIyBDb2xsZWN0IGFuZCB2YWxpZGF0ZSBpbnB1dAorICAgIHRyeToKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAiZDpobTp0OlQiLCBbImhlbHAiXSkKKyAgICBleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yLCBlcnI6CisgICAgICAgIHByaW50ICclcycgJSBzdHIoZXJyKQorICAgICAgICB1c2FnZSgpCisgICAgICAgIHN5cy5leGl0KDIpCisKKyAgICBmb3IgbywgYSBpbiBvcHRzOgorICAgICAgICBpZiBvIGluICgnLWgnLCAnLS1oZWxwJyk6CisgICAgICAgICAgICB1c2FnZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgwKQorICAgICAgICBlbGlmIG8gPT0gJy1kJzoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGEpOgorICAgICAgICAgICAgICAgIGRvY2ZpbGVzLmFwcGVuZChhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAnRVJST1I6IGRvY3VtZW50YXRpb24gZmlsZSAlcyBpcyBub3QgYSByZWd1bGFyIGZpbGUnICUgKGEpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMykKKyAgICAgICAgZWxpZiBvID09ICctbSc6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGEpOgorICAgICAgICAgICAgICAgIG1ldGFkaXJzLmFwcGVuZChhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAnRVJST1I6IG1ldGEgZGlyZWN0b3J5ICVzIGlzIG5vdCBhIGRpcmVjdG9yeScgJSAoYSkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCg0KQorICAgICAgICBlbGlmIG8gPT0gIi10IjoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGEpOgorICAgICAgICAgICAgICAgIGRvY2NvbmYgPSBhCisgICAgICAgIGVsaWYgbyA9PSAiLVQiOgorICAgICAgICAgICAgb25seWRvY3RhZ3MgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJ1bmhhbmRsZWQgb3B0aW9uIgorCisgICAgaWYgbGVuKGRvY2ZpbGVzKSA9PSAwOgorICAgICAgICBwcmludCAnRVJST1I6IG5vIGRvY2ZpbGUgc3BlY2lmaWVkJworICAgICAgICB1c2FnZSgpCisgICAgICAgIHN5cy5leGl0KDUpCisKKyAgICBpZiBsZW4obWV0YWRpcnMpID09IDA6CisgICAgICAgIHByaW50ICdFUlJPUjogbm8gbWV0YWRpciBzcGVjaWZpZWQnCisgICAgICAgIHVzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoNikKKworICAgIGlmIG9ubHlkb2N0YWdzIGFuZCBkb2Njb25mID09ICIiOgorICAgICAgICBwcmludCAnRVJST1I6IG5vIGRvY2NvbmYgc3BlY2lmaWVkJworICAgICAgICB1c2FnZSgpCisgICAgICAgIHN5cy5leGl0KDcpCisKKyAgICAjIENvbGxlY3QgYWxsIHRoZSB2YXJpYWJsZSBuYW1lcyBmcm9tIHRoZSByZWNpcGVzIGluIHRoZSBtZXRhZGlycworICAgIGZvciBtIGluIG1ldGFkaXJzOgorICAgICAgICBmb3Iga2V5LGNudCBpbiBjb2xsZWN0X2JidmFycyhtKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGJidmFycy5oYXNfa2V5KGtleSk6CisgICAgICAgICAgICAgICAgYmJ2YXJzW2tleV0gPSBiYnZhcnNba2V5XSArIGNudAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYnZhcnNba2V5XSA9IGNudAorCisgICAgIyBDaGVjayBlYWNoIHZhciBmb3IgZG9jdW1lbnRhdGlvbgorICAgIHZhcmxlbiA9IDAKKyAgICBmb3IgdiBpbiBiYnZhcnMuaXRlcmtleXMoKToKKyAgICAgICAgaWYgbGVuKHYpID4gdmFybGVuOgorICAgICAgICAgICAgdmFybGVuID0gbGVuKHYpCisgICAgICAgIGlmIG5vdCBiYnZhcl9pc19kb2N1bWVudGVkKHYsIGRvY2ZpbGVzKToKKyAgICAgICAgICAgIHVuZG9jdW1lbnRlZC5hcHBlbmQodikKKyAgICB1bmRvY3VtZW50ZWQuc29ydCgpCisgICAgdmFybGVuID0gdmFybGVuICsgMQorCisgICAgIyBSZXBvcnQgYWxsIHVuZG9jdW1lbnRlZCB2YXJpYWJsZXMKKyAgICBwcmludCAnRm91bmQgJWQgdW5kb2N1bWVudGVkIGJiIHZhcmlhYmxlcyAob3V0IG9mICVkKTonICUgKGxlbih1bmRvY3VtZW50ZWQpLCBsZW4oYmJ2YXJzKSkKKyAgICBoZWFkZXIgPSAnJXMlcyVzJyAlIChzdHIoIlZBUklBQkxFIikubGp1c3QodmFybGVuKSwgc3RyKCJDT1VOVCIpLmxqdXN0KDYpLCBzdHIoIkRPQ1RBRyIpLmxqdXN0KDcpKQorICAgIHByaW50IGhlYWRlcgorICAgIHByaW50IHN0cigiIikubGp1c3QobGVuKGhlYWRlciksICc9JykKKyAgICBmb3IgdiBpbiB1bmRvY3VtZW50ZWQ6CisgICAgICAgIGRvY3RhZyA9IGJidmFyX2RvY3RhZyh2LCBkb2Njb25mKQorICAgICAgICBpZiBub3Qgb25seWRvY3RhZ3Mgb3Igbm90IGRvY3RhZyA9PSAiIjoKKyAgICAgICAgICAgIHByaW50ICclcyVzJXMnICUgKHYubGp1c3QodmFybGVuKSwgc3RyKGJidmFyc1t2XSkubGp1c3QoNiksIGRvY3RhZykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYnVpbGQtcGVyZi10ZXN0LnNoIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYnVpbGQtcGVyZi10ZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNkZDc4ODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9idWlsZC1wZXJmLXRlc3Quc2gKQEAgLTAsMCArMSwzNjkgQEAKKyMhL2Jpbi9iYXNoCisjCisjIFRoaXMgc2NyaXB0IHJ1bnMgYSBzZXJpZXMgb2YgdGVzdHMgICh3aXRoIGFuZCB3aXRob3V0IHNzdGF0ZSkgYW5kIHJlcG9ydHMgYnVpbGQgdGltZSAoYW5kIHRtcC8gc2l6ZSkKKyMgCisjIEJ1aWxkIHBlcmZvcm1hbmNlIHRlc3Qgc2NyaXB0CisjCisjIENvcHlyaWdodCAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyMKKyMKKyMgQVVUSE9SUzoKKyMgU3RlZmFuIFN0YW5hY2FyIDxzdGVmYW54LnN0YW5hY2FyQGludGVsLmNvbT4KKworCitNRT0kKGJhc2VuYW1lICQwKQorCisjCisjIHVzYWdlIGFuZCBzZXR1cAorIworCit1c2FnZSAoKSB7CitjYXQgPDwgRU9UCitVc2FnZTogJE1FIFstaF0KKyAgICAgICAkTUUgWy1jIDxjb21taXQ+XSBbLXZdIFstbSA8dmFsPl0gWy1qIDx2YWw+XSBbLXQgPHZhbD5dIFstaSA8aW1hZ2UtbmFtZT5dIFstZCA8cGF0aD5dCitPcHRpb25zOgorICAgICAgICAtaAorICAgICAgICAgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0LgorICAgICAgICAtYyA8Y29tbWl0PgorICAgICAgICAgICAgICAgIGdpdCBjaGVja291dCA8Y29tbWl0PiBiZWZvcmUgYW55dGhpbmcgZWxzZQorICAgICAgICAtdgorICAgICAgICAgICAgICAgIFNob3cgYml0YmFrZSBvdXRwdXQsIGRvbid0IHJlZGlyZWN0IGl0IHRvIGEgbG9nLgorICAgICAgICAtbSA8bWFjaGluZT4KKyAgICAgICAgICAgICAgICBWYWx1ZSBmb3IgTUFDSElORS4gRGVmYXVsdCBpcyBxZW11eDg2LgorICAgICAgICAtaiA8dmFsPgorICAgICAgICAgICAgICAgIFZhbHVlIGZvciBQQVJBTExFTF9NQUtFLiBEZWZhdWx0IGlzIDguIAorICAgICAgICAtdCA8dmFsPgorICAgICAgICAgICAgICAgIFZhbHVlIGZvciBCQl9OVU1CRVJfVEhSRUFEUy4gRGVmYXVsdCBpcyA4LgorICAgICAgICAtaSA8aW1hZ2UtbmFtZT4KKyAgICAgICAgICAgICAgICBJbnN0ZWFkIG9mIHRpbWluZyBhZ2FpbnN0IGNvcmUtaW1hZ2Utc2F0bywgdXNlIDxpbWFnZS1uYW1lPgorICAgICAgICAtZCA8cGF0aD4KKyAgICAgICAgICAgICAgICBVc2UgPHBhdGg+IGFzIERMX0RJUgorICAgICAgICAtcCA8Z2l0aGFzaD4KKyAgICAgICAgICAgICAgICBDaGVycnkgcGljayBnaXRoYXNoIG9udG8gdGhlIGNvbW1pdAorICAgICAgICAgICAgICAgIAorTm90ZTogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBtdXN0IGJlIGluc2lkZSBhIHBva3kgZ2l0IGNsb25lLgorIAorRU9UCit9CisKKworaWYgY2xvbmVkaXI9JChnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCk7IHRoZW4KKyAgICAgICAgY2QgJGNsb25lZGlyCitlbHNlCisgICAgICAgIGVjaG8gIlRoZSBjdXJyZW50IHdvcmtpbmcgZGlyIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHBva3kgZ2l0IGNsb25lLiBQbGVhc2UgY2QgdGhlcmUgYmVmb3JlIHJ1bm5pbmcgJE1FIgorICAgICAgICBleGl0IDEKK2ZpCisKK0lNQUdFPSJjb3JlLWltYWdlLXNhdG8iCit2ZXJib3NlPTAKK2RsZGlyPQorY29tbWl0PQorcG1ha2U9CitjaGVycnlwaWNrcz0KK3doaWxlIGdldG9wdHMgImh2YzptOmo6dDppOmQ6cDoiIG9wdDsgZG8KKyAgICAgICAgY2FzZSAkb3B0IGluCisgICAgICAgICAgICAgICAgaCkgICAgICB1c2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCAwCisgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIHYpICAgICAgdmVyYm9zZT0xCisgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGMpICAgICAgY29tbWl0PSRPUFRBUkcKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgbSkgICAgICBleHBvcnQgTUFDSElORT0kT1BUQVJHCisgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGopICAgICAgcG1ha2U9JE9QVEFSRworICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICB0KSAgICAgIGV4cG9ydCBCQl9OVU1CRVJfVEhSRUFEUz0kT1BUQVJHCisgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGkpICAgICAgSU1BR0U9JE9QVEFSRworICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBkKSAgICAgIGRsZGlyPSRPUFRBUkcKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgcCkgICAgICBjaGVycnlwaWNrcz0iJGNoZXJyeXBpY2tzICRPUFRBUkciCisgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICopICAgICAgdXNhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgICAgICAgICAgICAgICAgOzsgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGVzYWMKK2RvbmUKKworCisjZHJvcCBjYWNoZWQgY3JlZGVudGlhbHMgYW5kIHRlc3QgZm9yIHN1ZG8gYWNjZXNzIHdpdGhvdXQgYSBwYXNzd29yZAorc3VkbyAtayAtbiBscyA+IC9kZXYvbnVsbCAyPiYxCityZXFwYXNzPSQ/CitpZiBbICRyZXFwYXNzIC1uZSAwIF07IHRoZW4KKyAgICBlY2hvICJUaGUgc2NyaXB0IHJlcXVpcmVzIHN1ZG8gYWNjZXNzIHRvIGRyb3AgY2FjaGVzIGJldHdlZW4gYnVpbGRzIChlY2hvIDMgPiAvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXMpIgorICAgIHJlYWQgLXMgLXAgIlBsZWFzZSBlbnRlciB5b3VyIHN1ZG8gcGFzc3dvcmQ6ICIgcGFzcworICAgIGVjaG8KK2ZpCisKK2lmIFsgLW4gIiRjb21taXQiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gImdpdCBjaGVja291dCAtZiAkY29tbWl0IgorICAgICAgICAgICAgZ2l0IHB1bGwgPiAvZGV2L251bGwgMj4mMQorICAgICAgICAgICAgZ2l0IGNoZWNrb3V0IC1mICRjb21taXQgfHwgZXhpdCAxCisgICAgICAgICAgICBnaXQgcHVsbCA+IC9kZXYvbnVsbCAyPiYxCitmaQorCitpZiBbIC1uICIkY2hlcnJ5cGlja3MiIF07IHRoZW4KKyAgICBmb3IgYyBpbiAkY2hlcnJ5cGlja3M7IGRvCisgICAgICAgIGdpdCBjaGVycnktcGljayAkYworICAgIGRvbmUKK2ZpCisKK3Jldj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAgfHwgZXhpdCAxCitPVVRESVI9IiRjbG9uZWRpci9idWlsZC1wZXJmLXRlc3QvcmVzdWx0cy0kcmV2LWBkYXRlICIrJVklbSVkJUglTSVTImAiCitCVUlMRERJUj0iJE9VVERJUi9idWlsZCIKK3Jlc3VsdHNmaWxlPSIkT1VURElSL3Jlc3VsdHMubG9nIgorYmJvdXRwdXQ9IiRPVVRESVIvYml0YmFrZS5sb2ciCitteW91dHB1dD0iJE9VVERJUi9vdXRwdXQubG9nIgorZ2xvYmFscmVzPSIkY2xvbmVkaXIvYnVpbGQtcGVyZi10ZXN0L2dsb2JhbHJlcy5sb2ciCisKK21rZGlyIC1wICRPVVRESVIgfHwgZXhpdCAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorbG9nICgpIHsKKyAgICBsb2NhbCBtc2c9IiQxIgorICAgIGVjaG8gImBkYXRlYDogJG1zZyIgfCB0ZWUgLWEgJG15b3V0cHV0Cit9CisKKworIworIyBDb25maWcgc3R1ZmYKKyMKKworYnJhbmNoPWBnaXQgYnJhbmNoIDI+JjEgfCBncmVwICJeKiAiIHwgdHIgLWQgIiogImAKK2dpdGNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgIHx8IGV4aXQgMQorbG9nICJSdW5uaW5nIG9uICRicmFuY2g6JGdpdGNvbW1pdCIKKworc291cmNlIC4vb2UtaW5pdC1idWlsZC1lbnYgJE9VVERJUi9idWlsZCA+L2Rldi9udWxsIHx8IGV4aXQgMQorY2QgJE9VVERJUi9idWlsZAorCitbIC1uICIkTUFDSElORSIgXSB8fCBleHBvcnQgTUFDSElORT0icWVtdXg4NiIKK1sgLW4gIiRCQl9OVU1CRVJfVEhSRUFEUyIgXSB8fCBleHBvcnQgQkJfTlVNQkVSX1RIUkVBRFM9IjgiCisKK2lmIFsgLW4gIiRwbWFrZSIgXTsgdGhlbgorICAgICAgICBleHBvcnQgUEFSQUxMRUxfTUFLRT0iLWogJHBtYWtlIgorZWxzZQorICAgICAgICBleHBvcnQgUEFSQUxMRUxfTUFLRT0iLWogOCIKK2ZpCisKK2lmIFsgLW4gIiRkbGRpciIgXTsgdGhlbgorICAgIGVjaG8gIkRMX0RJUiA9IFwiJGRsZGlyXCIiID4+IGNvbmYvbG9jYWwuY29uZgorZWxzZQorICAgIGVjaG8gIkRMX0RJUiA9IFwiJGNsb25lZGlyL2J1aWxkLXBlcmYtdGVzdC9kb3dubG9hZHNcIiIgPj4gY29uZi9sb2NhbC5jb25mCitmaQorCisjIFNvbWV0aW1lcyBJJ3ZlIG5vdGljZWQgYmlnIGRpZmZlcmVuY2VzIGluIHRpbWluZ3MgZm9yIHRoZSBzYW1lIGNvbW1pdCwgb24gdGhlIHNhbWUgbWFjaGluZQorIyBEaXNhYmxpbmcgdGhlIG5ldHdvcmsgc2FuaXR5IGNoZWNrIGhlbHBzIGEgYml0IChiZWNhdXNlIG9mIG15IGNyYXBweSBuZXR3b3JrIGNvbm5lY3Rpb24gYW5kL29yIHByb3h5KQorZWNobyAiQ09OTkVDVElWSVRZX0NIRUNLX1VSSVMgPVwiXCIiID4+IGNvbmYvbG9jYWwuY29uZgorCisKKyMKKyMgRnVuY3Rpb25zCisjCisKK2RlY2xhcmUgLWEgVElNRVMKK3RpbWVfY291bnQ9MAorZGVjbGFyZSAtYSBTSVpFUworc2l6ZV9jb3VudD0wCisKK2JidGltZSAoKSB7CisgICAgbG9jYWwgYXJnPSIkQCIKKyAgICBsb2cgIiAgIFRpbWluZzogYml0YmFrZSAke2FyZ30iCisKKyAgICBpZiBbICR2ZXJib3NlIC1lcSAwIF07IHRoZW4gCisgICAgICAgIC91c3IvYmluL3RpbWUgLXYgLW8gJHJlc3VsdHNmaWxlIGJpdGJha2UgJHthcmd9ID4+ICRiYm91dHB1dAorICAgIGVsc2UKKyAgICAgICAgL3Vzci9iaW4vdGltZSAtdiAtbyAkcmVzdWx0c2ZpbGUgYml0YmFrZSAke2FyZ30KKyAgICBmaQorICAgIHJldD0kPworICAgIGlmIFsgJHJldCAtZXEgMCBdOyB0aGVuCisgICAgICAgIHQ9YGdyZXAgd2FsbCAkcmVzdWx0c2ZpbGUgfCBzZWQgJ3MvLiptOnNzKTogLy8nYAorICAgICAgICBsb2cgIiAgIFRJTUU6ICR0IgorICAgICAgICBUSU1FU1soKCB0aW1lX2NvdW50KysgKSldPSIkdCIKKyAgICBlbHNlCisgICAgICAgIGxvZyAiRVJST1I6IGV4aXQgc3RhdHVzIHdhcyBub24temVybywgd2lsbCByZXBvcnQgdGltZSBhcyAwLiIKKyAgICAgICAgVElNRVNbKCggdGltZV9jb3VudCsrICkpXT0iMCIKKyAgICBmaQorICAgIAorICAgICN0aW1lIGJ5IGRlZmF1bHQgb3ZlcndyaXRlcyB0aGUgb3V0cHV0IGZpbGUgYW5kIHdlICB3YW50IHRvIGtlZXAgdGhlIHJlc3VsdHMKKyAgICAjaXQgaGFzIGFuIGFwcGVuZCBvcHRpb24gYnV0IEkgZG9uJ3Qgd2FudCB0byBjbG9iYmVyIHRoZSByZXN1bHRzIGluIHRoZSBzYW1lIGZpbGUKKyAgICBpPWBscyAkT1VURElSL3Jlc3VsdHMubG9nKiB8d2MgLWxgCisgICAgbXYgJHJlc3VsdHNmaWxlICIke3Jlc3VsdHNmaWxlfS4ke2l9IgorICAgIGxvZyAiTW9yZSBzdGF0cyBjYW4gYmUgZm91bmQgaW4gJHtyZXN1bHRzZmlsZX0uJHtpfSIgICAgCit9CisKKyN3ZSBkb24ndCB0aW1lIGJpdGJha2UgaGVyZQorYmJub3RpbWUgKCkgeworICAgIGxvY2FsIGFyZz0iJEAiCisgICAgbG9nICIgICBSdW5uaW5nOiBiaXRiYWtlICR7YXJnfSIKKyAgICBpZiBbICR2ZXJib3NlIC1lcSAwIF07IHRoZW4KKyAgICAgICAgYml0YmFrZSAke2FyZ30gPj4gJGJib3V0cHV0CisgICAgZWxzZQorICAgICAgICBiaXRiYWtlICR7YXJnfQorICAgIGZpCisgICAgcmV0PSQ/CisgICAgaWYgWyAkcmV0IC1lcSAwIF07IHRoZW4KKyAgICAgICAgbG9nICIgICBGaW5pc2hlZCBiaXRiYWtlICR7YXJnfSIKKyAgICBlbHNlCisgICAgICAgIGxvZyAiRVJST1I6IGV4aXQgc3RhdHVzIHdhcyBub24temVyby4gRXhpdC4uIgorICAgICAgICBleGl0ICRyZXQKKyAgICBmaQorCit9CisKK2RvX3JtdG1wKCkgeworICAgIGxvZyAiICAgUmVtb3ZpbmcgdG1wIgorICAgIHJtIC1yZiBiaXRiYWtlLmxvY2sgcHNldWRvZG9uZSBjb25mL3Nhbml0eV9pbmZvIGNhY2hlIHRtcAorfQorZG9fcm1zc3RhdGUgKCkgeworICAgIGxvZyAiICAgUmVtb3Zpbmcgc3N0YXRlLWNhY2hlIgorICAgIHJtIC1yZiBzc3RhdGUtY2FjaGUKK30KK2RvX3N5bmMgKCkgeworICAgIGxvZyAiICAgU3luY2luZyBhbmQgZHJvcHBpbmcgY2FjaGVzIgorICAgIHN5bmM7IHN5bmMKKyAgICBpZiBbICRyZXFwYXNzIC1lcSAwIF07IHRoZW4KKyAgICAgICAgc3VkbyBzaCAtYyAiZWNobyAzID4gL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiJHBhc3MiIHwgc3VkbyAtUyBzaCAtYyAiZWNobyAzID4gL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzIgorICAgICAgICBlY2hvCisgICAgZmkKKyAgICBzbGVlcCAzCit9CisKK3dyaXRlX3Jlc3VsdHMoKSB7CisgICAgZWNobyAtbiAiYHVuYW1lIC1uYCwkYnJhbmNoOiRnaXRjb21taXQsYGdpdCBkZXNjcmliZWAsIiA+PiAkZ2xvYmFscmVzCisgICAgZm9yIGkgaW4gIiR7VElNRVNbQF19IjsgZG8KKyAgICAgICAgZWNobyAtbiAiJGksIiA+PiAkZ2xvYmFscmVzCisgICAgZG9uZQorICAgIGZvciBpIGluICIke1NJWkVTW0BdfSI7IGRvCisgICAgICAgIGVjaG8gLW4gIiRpLCIgPj4gJGdsb2JhbHJlcworICAgIGRvbmUKKyAgICBlY2hvID4+ICRnbG9iYWxyZXMKKyAgICBzZWQgLWkgJyQgcy8sJC8vJyAkZ2xvYmFscmVzCit9CisKKyMjIyMKKworIworIyBUZXN0IDEKKyMgTWVhc3VyZTogV2FsbCBjbG9jayBvZiAiYml0YmFrZSBjb3JlLWltYWdlLXNhdG8iIGFuZCBzaXplIG9mIHRtcC9kaXIgKHcvbyBybV93b3JrIGFuZCB3LyBybV93b3JrKQorIyBQcmU6IERvd25sb2FkZWQgc291cmNlcywgbm8gc3N0YXRlCisjIFN0ZXBzOgorIyAgICAgUGFydDE6CisjICAgICAgICAtIGZldGNoYWxsIAorIyAgICAgICAgLSBjbGVhbiBidWlsZCBkaXIKKyMgICAgICAgIC0gdGltZSBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworIyAgICAgICAgLSBjb2xsZWN0IGRhdGEKKyMgICAgIFBhcnQyOgorIyAgICAgICAgLSBiaXRiYWtlIHZpcnR1YWwva2VybmVsIC1jIGNsZWFuc3N0YXRlCisjICAgICAgICAtIHRpbWUgYml0YmFrZSB2aXJ0dWFsL2tlcm5lbAorIyAgICAgUGFydDM6CisjICAgICAgICAtIGFkZCBJTkhFUklUIHRvIGxvY2FsLmNvbmYKKyMgICAgICAgIC0gY2xlYW4gYnVpbGQgZGlyCisjICAgICAgICAtIGJ1aWxkCisjICAgICAgICAtIHJlcG9ydCBzaXplLCByZW1vdmUgSU5IRVJJVAorCit0ZXN0MV9wMSAoKSB7CisgICAgbG9nICJSdW5uaW5nIFRlc3QgMSwgcGFydCAxLzM6IE1lYXN1cmUgd2FsbCBjbG9jayBvZiBiaXRiYWtlICRJTUFHRSBhbmQgc2l6ZSBvZiB0bXAvIGRpciIKKyAgICBiYm5vdGltZSAkSU1BR0UgLWMgZmV0Y2hhbGwKKyAgICBkb19ybXRtcAorICAgIGRvX3Jtc3N0YXRlCisgICAgZG9fc3luYworICAgIGJidGltZSAkSU1BR0UKKyAgICBzPWBkdSAtcyB0bXAgfCBzZWQgJ3MvdG1wLy8nIHwgc2VkICdzL1sgXHRdKiQvLydgCisgICAgU0laRVNbKCggc2l6ZV9jb3VudCsrICkpXT0iJHMiCisgICAgbG9nICJTSVpFIG9mIHRtcCBkaXIgaXM6ICRzIgorICAgIGxvZyAiQnVpbGRzdGF0cyBhcmUgc2F2ZWQgaW4gJE9VVERJUi9idWlsZHN0YXRzLXRlc3QxIgorICAgIG12IHRtcC9idWlsZHN0YXRzICRPVVRESVIvYnVpbGRzdGF0cy10ZXN0MQorfQorCisKK3Rlc3QxX3AyICgpIHsKKyAgICBsb2cgIlJ1bm5pbmcgVGVzdCAxLCBwYXJ0IDIvMzogYml0YmFrZSB2aXJ0dWFsL2tlcm5lbCAtYyBjbGVhbnNzdGF0ZSBhbmQgdGltZSBiaXRiYWtlIHZpcnR1YWwva2VybmVsIgorICAgIGJibm90aW1lIHZpcnR1YWwva2VybmVsIC1jIGNsZWFuc3N0YXRlCisgICAgZG9fc3luYworICAgIGJidGltZSB2aXJ0dWFsL2tlcm5lbAorfQorCit0ZXN0MV9wMyAoKSB7CisgICAgbG9nICJSdW5uaW5nIFRlc3QgMSwgcGFydCAzLzM6IEJ1aWxkICRJTUFHRSB3L28gc3N0YXRlIGFuZCByZXBvcnQgc2l6ZSBvZiB0bXAvZGlyIHdpdGggcm1fd29yayBlbmFibGVkIgorICAgIGVjaG8gIklOSEVSSVQgKz0gXCJybV93b3JrXCIiID4+IGNvbmYvbG9jYWwuY29uZgorICAgIGRvX3JtdG1wCisgICAgZG9fcm1zc3RhdGUKKyAgICBkb19zeW5jCisgICAgYmJ0aW1lICRJTUFHRQorICAgIHNlZCAtaSAncy9JTkhFUklUICs9IFwicm1fd29ya1wiLy8nIGNvbmYvbG9jYWwuY29uZgorICAgIHM9YGR1IC1zIHRtcCB8IHNlZCAncy90bXAvLycgfCBzZWQgJ3MvWyBcdF0qJC8vJ2AKKyAgICBTSVpFU1soKCBzaXplX2NvdW50KysgKSldPSIkcyIKKyAgICBsb2cgIlNJWkUgb2YgdG1wIGRpciBpczogJHMiCisgICAgbG9nICJCdWlsZHN0YXRzIGFyZSBzYXZlZCBpbiAkT1VURElSL2J1aWxkc3RhdHMtdGVzdDEzIgorICAgIG12IHRtcC9idWlsZHN0YXRzICRPVVRESVIvYnVpbGRzdGF0cy10ZXN0MTMKK30KKworCisjCisjIFRlc3QgMgorIyBNZWFzdXJlOiBXYWxsIGNsb2NrIG9mICJiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byIgYW5kIHNpemUgb2YgdG1wL2RpcgorIyBQcmU6IHBvcHVsYXRlZCBzc3RhdGUgY2FjaGUKKwordGVzdDIgKCkgeworICAgICMgQXNzdW1pbmcgdGVzdCAxIGhhcyBydW4KKyAgICBsb2cgIlJ1bm5pbmcgVGVzdCAyOiBNZWFzdXJlIHdhbGwgY2xvY2sgb2YgYml0YmFrZSAkSU1BR0UgLWMgcm9vdGZzIHdpdGggc3N0YXRlIgorICAgIGRvX3JtdG1wCisgICAgZG9fc3luYworICAgIGJidGltZSAkSU1BR0UgLWMgcm9vdGZzCit9CisKKworIyBUZXN0IDMKKyMgcGFyc2luZyB0aW1lIG1ldHJpY3MKKyMKKyMgIFN0YXJ0IHdpdGgKKyMgICBpKSAicm0gLXJmIHRtcC9jYWNoZTsgdGltZSBiaXRiYWtlIC1wIgorIyAgaWkpICJybSAtcmYgdG1wL2NhY2hlL2RlZmF1bHQtZ2xpYmMvOyB0aW1lIGJpdGJha2UgLXAiCisjIGlpaSkgInRpbWUgYml0YmFrZSAtcCIKKworCit0ZXN0MyAoKSB7CisgICAgbG9nICJSdW5uaW5nIFRlc3QgMzogUGFyc2luZyB0aW1lIG1ldHJpY3MgKGJpdGJha2UgLXApIgorICAgIGxvZyAiICAgUmVtb3ZpbmcgdG1wL2NhY2hlICYmIGNhY2hlIgorICAgIHJtIC1yZiB0bXAvY2FjaGUgY2FjaGUKKyAgICBiYnRpbWUgLXAKKyAgICBsb2cgIiAgIFJlbW92aW5nIHRtcC9jYWNoZS9kZWZhdWx0LWdsaWJjLyIKKyAgICBybSAtcmYgdG1wL2NhY2hlL2RlZmF1bHQtZ2xpYmMvCisgICAgYmJ0aW1lIC1wCisgICAgYmJ0aW1lIC1wCit9CisKKworCisjIFJVTiEKKwordGVzdDFfcDEKK3Rlc3QxX3AyCit0ZXN0MV9wMwordGVzdDIKK3Rlc3QzCisKKyMgaWYgd2UgZ290IHRpbCBoZXJlIHdyaXRlIHRvIGdsb2JhbCByZXN1bHRzCit3cml0ZV9yZXN1bHRzCisKK2xvZyAiQWxsIGRvbmUsIGNsZWFuaW5nIHVwLi4uIgorCitkb19ybXRtcAorZG9fcm1zc3RhdGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2RkaW1hZ2UgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9kZGltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE1MDNmMTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9kZGltYWdlCkBAIC0wLDAgKzEsMTA0IEBACisjIS9iaW4vc2gKKworIyBEZWZhdWx0IHRvIGF2b2lkaW5nIHRoZSBmaXJzdCB0d28gZGlza3Mgb24gdHlwaWNhbCBMaW51eCBhbmQgTWFjIE9TIGluc3RhbGxzCisjIEJldHRlciBzYWZlIHRoYW4gc29ycnkgOi0pCitCTEFDS0xJU1RfREVWSUNFUz0iL2Rldi9zZGEgL2Rldi9zZGIgL2Rldi9kaXNrMSAvZGV2L2Rpc2syIgorCisjIDFNQiBibG9ja3NpemUKK0JMT0NLU0laRT0xMDQ4NTc2CisKK3VzYWdlKCkgeworCWVjaG8gIlVzYWdlOiAkKGJhc2VuYW1lICQwKSBJTUFHRSBERVZJQ0UiCit9CisKK2ltYWdlX2RldGFpbHMoKSB7CisJSU1HPSQxCisJZWNobyAiSW1hZ2UgZGV0YWlscyIKKwllY2hvICI9PT09PT09PT09PT09IgorCWVjaG8gIiAgICBpbWFnZTogJChiYXNlbmFtZSAkSU1HKSIKKwkjIHN0YXQgZm9ybWF0IGlzIGRpZmZlcmVudCBvbiBNYWMgT1MgYW5kIExpbnV4CisJaWYgWyAiJCh1bmFtZSkiID0gIkRhcndpbiIgXTsgdGhlbgorCQllY2hvICIgICAgIHNpemU6ICQoc3RhdCAtTCAtZiAnJXogYnl0ZXMnICRJTUcpIgorCQllY2hvICIgbW9kaWZpZWQ6ICQoc3RhdCAtTCAtZiAnJVNtJyAkSU1HKSIKKwllbHNlCisJCWVjaG8gIiAgICAgc2l6ZTogJChzdGF0IC1MIC1jICclcyBieXRlcycgJElNRykiCisJCWVjaG8gIiBtb2RpZmllZDogJChzdGF0IC1MIC1jICcleScgJElNRykiCisJZmkKKwllY2hvICIgICAgIHR5cGU6ICQoZmlsZSAtTCAtYiAkSU1HKSIKKwllY2hvICIiCit9CisKK2RldmljZV9kZXRhaWxzKCkgeworCURFVj0kMQorCUJMT0NLX1NJWkU9NTEyCisKKwllY2hvICJEZXZpY2UgZGV0YWlscyIKKwllY2hvICI9PT09PT09PT09PT09PSIKKworCSMgQ29sbGVjdCBkaXNrIGluZm8gdXNpbmcgZGlza3V0aWwgb24gTWFjIE9TCisJaWYgWyAiJCh1bmFtZSkiID0gIkRhcndpbiIgXTsgdGhlbgorCQlkaXNrdXRpbCBpbmZvICRERVZJQ0UgfCBlZ3JlcCAiKERldmljZSBOb2RlfE1lZGlhIE5hbWV8VG90YWwgU2l6ZSkiCisJCXJldHVybgorCWZpCisKKwkjIERlZmF1bHQgLyBMaW51eCBpbmZvcm1hdGlvbiBjb2xsZWN0aW9uCisJZWNobyAiICBkZXZpY2U6ICRERVZJQ0UiCisJaWYgWyAtZiAiL3N5cy9jbGFzcy9ibG9jay8kREVWL2RldmljZS92ZW5kb3IiIF07IHRoZW4KKwkJZWNobyAiICB2ZW5kb3I6ICQoY2F0IC9zeXMvY2xhc3MvYmxvY2svJERFVi9kZXZpY2UvdmVuZG9yKSIKKwllbHNlCisJCWVjaG8gIiAgdmVuZG9yOiBVTktPV04iCisJZmkKKwlpZiBbIC1mICIvc3lzL2NsYXNzL2Jsb2NrLyRERVYvZGV2aWNlL21vZGVsIiBdOyB0aGVuCisJCWVjaG8gIiAgIG1vZGVsOiAkKGNhdCAvc3lzL2NsYXNzL2Jsb2NrLyRERVYvZGV2aWNlL21vZGVsKSIKKwllbHNlCisJCWVjaG8gIiAgIG1vZGVsOiBVTktOT1dOIgorCWZpCisJaWYgWyAtZiAiL3N5cy9jbGFzcy9ibG9jay8kREVWL3NpemUiIF07IHRoZW4KKwkJZWNobyAiICAgIHNpemU6ICQoKCQoY2F0IC9zeXMvY2xhc3MvYmxvY2svJERFVi9zaXplKSAqICRCTE9DS19TSVpFKSkgYnl0ZXMiCisJZWxzZQorCQllY2hvICIgICAgc2l6ZTogVU5LTk9XTiIKKwlmaQorCWVjaG8gIiIKK30KKworaWYgWyAkIyAtbmUgMiBdOyB0aGVuCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK0lNQUdFPSQxCitERVZJQ0U9JDIKKworaWYgWyAhIC1lICIkSU1BR0UiIF07IHRoZW4KKwllY2hvICJFUlJPUjogSW1hZ2UgJElNQUdFIGRvZXMgbm90IGV4aXN0IgorCXVzYWdlCisJZXhpdCAxCitmaQorCisKK2ZvciBpIGluICR7QkxBQ0tMSVNUX0RFVklDRVN9OyBkbworCWlmIFsgIiRpIiA9ICIkREVWSUNFIiBdOyB0aGVuCisJCWVjaG8gIkVSUk9SOiBEZXZpY2UgJERFVklDRSBpcyBibGFja2xpc3RlZCIKKwkJZXhpdCAxCisJZmkKK2RvbmUKKworaWYgWyAhIC13ICIkREVWSUNFIiBdOyB0aGVuCisJZWNobyAiRVJST1I6IERldmljZSAkREVWSUNFIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCB3cml0YWJsZSIKKwl1c2FnZQorCWV4aXQgMQorZmkKKworaW1hZ2VfZGV0YWlscyAkSU1BR0UKK2RldmljZV9kZXRhaWxzICQoYmFzZW5hbWUgJERFVklDRSkKKworcHJpbnRmICJXcml0ZSAkSU1BR0UgdG8gJERFVklDRSBbeS9OXT8gIgorcmVhZCBSRVNQT05TRQoraWYgWyAiJFJFU1BPTlNFIiAhPSAieSIgXTsgdGhlbgorCWVjaG8gIldyaXRlIGFib3J0ZWQiCisJZXhpdCAwCitmaQorCitlY2hvICJXcml0aW5nIGltYWdlLi4uIgorZGQgaWY9IiRJTUFHRSIgb2Y9IiRERVZJQ0UiIGJzPSIkQkxPQ0tTSVpFIgorc3luYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZGlhbG9nLXBvd2VyLWNvbnRyb2wgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9kaWFsb2ctcG93ZXItY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NTUwZWE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZGlhbG9nLXBvd2VyLWNvbnRyb2wKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisjCisjIFNpbXBsZSBzY3JpcHQgdG8gc2hvdyBhIG1hbnVhbCBwb3dlciBwcm9tcHQgZm9yIHdoZW4geW91IHdhbnQgdG8gdXNlCisjIGF1dG9tYXRlZCBoYXJkd2FyZSB0ZXN0aW5nIHdpdGggdGVzdGltYWdlLmJiY2xhc3MgYnV0IHlvdSBkb24ndCBoYXZlIGEKKyMgd2ViLWVuYWJsZWQgcG93ZXIgc3RyaXAgb3Igc2ltaWxhciB0byBkbyB0aGUgcG93ZXIgb24vb2ZmL2N5Y2xlLgorIworIyBZb3UgY2FuIGVuYWJsZSBpdCBieSBlbmFibGluZyB0ZXN0aW1hZ2UgKHNlZSB0aGUgWW9jdG8gUHJvamVjdAorIyBEZXZlbG9wbWVudCBtYW51YWwgIlBlcmZvcm1pbmcgQXV0b21hdGVkIFJ1bnRpbWUgVGVzdGluZyIgc2VjdGlvbikKKyMgYW5kIHNldHRpbmcgdGhlIGZvbGxvd2luZyBpbiB5b3VyIGxvY2FsLmNvbmY6CisjCisjIFRFU1RfUE9XRVJDT05UUk9MX0NNRCA9ICIke0NPUkVCQVNFfS9zY3JpcHRzL2NvbnRyaWIvZGlhbG9nLXBvd2VyLWNvbnRyb2wiCisjCisKK1BST01QVD0iIgord2hpbGUgdHJ1ZTsgZG8KKyAgICBjYXNlICQxIGluCisgICAgICAgIG9uKQorICAgICAgICAgICAgUFJPTVBUPSJQbGVhc2UgdHVybiBkZXZpY2UgcG93ZXIgb24iOzsKKyAgICAgICAgb2ZmKQorICAgICAgICAgICAgUFJPTVBUPSJQbGVhc2UgdHVybiBkZXZpY2UgcG93ZXIgb2ZmIjs7CisgICAgICAgIGN5Y2xlKQorICAgICAgICAgICAgUFJPTVBUPSJQbGVhc2UgY2xpY2sgRG9uZSwgdGhlbiB0dXJuIHRoZSBkZXZpY2UgcG93ZXIgb2ZmIHRoZW4gb24iOzsKKyAgICAgICAgIiIpCisgICAgICAgICAgICBicmVhazs7CisgICAgZXNhYworICAgIHNoaWZ0Citkb25lCisKK2lmIFsgIiRQUk9NUFQiID0gIiIgXSA7IHRoZW4KKyAgICBlY2hvICJFUlJPUjogbm8gcG93ZXIgYWN0aW9uIHNwZWNpZmllZCBvbiBjb21tYW5kIGxpbmUiCisgICAgZXhpdCAyCitmaQorCitpZiBbICJgd2hpY2gga2RpYWxvZyAyPi9kZXYvbnVsbGAiICE9ICIiIF0gOyB0aGVuCisgICAgRElBTE9HVVRJTD0ia2RpYWxvZyIKK2VsaWYgWyAiYHdoaWNoIHplbml0eSAyPi9kZXYvbnVsbGAiICE9ICIiIF0gOyB0aGVuCisgICAgRElBTE9HVVRJTD0iemVuaXR5IgorZWxzZQorICAgIGVjaG8gIkVSUk9SOiBjb3VsZG4ndCBmaW5kIHByb2dyYW0gdG8gZGlzcGxheSBhIG1lc3NhZ2UsIGluc3RhbGwga2RpYWxvZyBvciB6ZW5pdHkiCisgICAgZXhpdCAzCitmaQorCitpZiBbICIkRElBTE9HVVRJTCIgPSAia2RpYWxvZyIgXSA7IHRoZW4KKyAgICBrZGlhbG9nIC0teWVzbm8gIiRQUk9NUFQiIC0tdGl0bGUgIlRlc3RJbWFnZSBQb3dlciBDb250cm9sIiAtLXllcy1sYWJlbCAiRG9uZSIgLS1uby1sYWJlbCAiQ2FuY2VsIHRlc3QiCitlbGlmIFsgIiRESUFMT0dVVElMIiA9ICJ6ZW5pdHkiIF0gOyB0aGVuCisgICAgemVuaXR5IC0tcXVlc3Rpb24gLS10ZXh0PSIkUFJPTVBUIiAtLXRpdGxlPSJUZXN0SW1hZ2UgUG93ZXIgQ29udHJvbCIgLS1vay1sYWJlbD0iRG9uZSIgLS1jYW5jZWwtbGFiZWw9IkNhbmNlbCB0ZXN0IgorZmkKKworaWYgWyAiJD8iICE9ICIwIiBdIDsgdGhlbgorICAgIGVjaG8gIlVzZXIgY2FuY2VsbGVkIHRlc3QgYXQgcG93ZXIgcHJvbXB0IgorICAgIGV4aXQgMQorZmkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZG9jdW1lbnRhdGlvbi1hdWRpdC5zaCBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2RvY3VtZW50YXRpb24tYXVkaXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjE0NGFhYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2RvY3VtZW50YXRpb24tYXVkaXQuc2gKQEAgLTAsMCArMSw5NCBAQAorIyEvYmluL2Jhc2gKKyMKKyMgUGVyZm9ybSBhbiBhdWRpdCBvZiB3aGljaCBwYWNrYWdlcyBwcm92aWRlIGRvY3VtZW50YXRpb24gYW5kIHdoaWNoCisjIGFyZSBtaXNzaW5nIC1kb2MgcGFja2FnZXMuCisjCisjIFNldHVwIHJlcXVpcmVtZW50czogYmUgc3VyZSB0byBiZSBidWlsZGluZyBmb3IgTUFDSElORT1xZW11eDg2LiBSdW4KKyMgdGhpcyBzY3JpcHQgYWZ0ZXIgc291cmNlJ2luZyB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc2NyaXB0LCBzbyB5b3UncmUKKyMgcnVubmluZyBpdCBmcm9tIGJ1aWxkLyBkaXJlY3RvcnkuCisjCisjIE1haW50YWluZXI6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitSRVBPUlRfRE9DX1NJTVBMRT0iZG9jdW1lbnRhdGlvbl9leGlzdHMudHh0IgorUkVQT1JUX0RPQ19ERVRBSUw9ImRvY3VtZW50YXRpb25fZXhpc3RzX2RldGFpbC50eHQiCitSRVBPUlRfTUlTU0lOR19TSU1QTEU9ImRvY3VtZW50YXRpb25fbWlzc2luZy50eHQiCitSRVBPUlRfTUlTU0lOR19ERVRBSUw9ImRvY3VtZW50YXRpb25fbWlzc2luZ19kZXRhaWwudHh0IgorUkVQT1JUX0JVSUxEX0VSUk9SUz0iYnVpbGRfZXJyb3JzLnR4dCIKKworcm0gLXJmICRSRVBPUlRfRE9DX1NJTVBMRSAkUkVQT1JUX0RPQ19ERVRBSUwgJFJFUE9SVF9NSVNTSU5HX1NJTVBMRSAkUkVQT1JUX01JU1NJTkdfREVUQUlMCisKK0JJVEJBS0U9YHdoaWNoIGJpdGJha2VgCitpZiBbIC16ICIkQklUQkFLRSIgXTsgdGhlbgorCWVjaG8gIkVycm9yOiBiaXRiYWtlIGNvbW1hbmQgbm90IGZvdW5kLiIKKwllY2hvICJEaWQgeW91IGZvcmdldCB0byBzb3VyY2UgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNjcmlwdD8iCisJZXhpdCAxCitmaQorCitlY2hvICJSRU1JTkRFUjogeW91IG5lZWQgdG8gYnVpbGQgZm9yIE1BQ0hJTkU9cWVtdXg4NiBvciB5b3Ugd29uJ3QgZ2V0IHVzZWZ1bCByZXN1bHRzIgorZWNobyAiUkVNSU5ERVI6IHlvdSBuZWVkIHRvIHNldCBMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCBhcHByb3ByaWF0ZWx5IGluIGxvY2FsLmNvbmYgb3IgIgorZWNobyAiIHlvdSdsbCBnZXQgZmFsc2UgcG9zaXRpdmVzLiAgRm9yIGV4YW1wbGUsIExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUID0gXCJDb21tZXJjaWFsXCIiCisKK2ZvciBwa2cgaW4gYGJpdGJha2UgLXMgfCBhd2sgJ3sgcHJpbnQgXCQxIH0nYDsgZG8KKwlpZiBbWyAiJHBrZyIgPT0gIkxvYWRpbmciIHx8ICIkcGtnIiA9PSAiTG9hZGVkIiB8fAorCSAgIiRwa2ciID09ICJSZWNpcGUiICB8fAorICAgICAgICAgICIkcGtnIiA9PSAiUGFyc2luZyIgfHwgIiRwa2ciID09ICJQYWNrYWdlIiB8fAorICAgICAgICAgICIkcGtnIiA9PSAiTk9URToiICAgfHwgIiRwa2ciID09ICJXQVJOSU5HOiIgfHwKKyAgICAgICAgICAiJHBrZyIgPT0gImRvbmUuIiAgIHx8ICIkcGtnIiA9PSAiPT09PT09PT09PT0iIF1dCisJdGhlbgorCQkjIFNraXAgaW5pdGlhbCBiaXRiYWtlIG91dHB1dAorCQljb250aW51ZQorCWZpCisJaWYgW1sgIiRwa2ciID1+IC1uYXRpdmUkIHx8ICIkcGtnIiA9fiAtbmF0aXZlc2RrJCB8fAorICAgICAgICAgICIkcGtnIiA9fiAtY3Jvc3MtY2FuYWRpYW4gXV07IHRoZW4KKwkJIyBTa2lwIG5hdGl2ZS9uYXRpdmVzZGsvY3Jvc3MtY2FuYWRpYW4gcmVjaXBlcworCQljb250aW51ZQorCWZpCisJaWYgW1sgIiRwa2ciID1+IF5tZXRhLSB8fCAiJHBrZyIgPX4gXnBhY2thZ2Vncm91cC0gfHwgIiRwa2ciID1+IC1pbWFnZSBdXTsgdGhlbgorCQkjIFNraXAgbWV0YSwgdGFzayBhbmQgaW1hZ2UgcmVjaXBlcworCQljb250aW51ZQorCWZpCisJaWYgW1sgIiRwa2ciID1+IF5nbGliYy0gfHwgIiRwa2ciID1+IF5saWJpY29udiQgfHwKKyAgICAgICAgICAiJHBrZyIgPX4gLXRvb2xjaGFpbiQgfHwgIiRwa2ciID1+IF5wYWNrYWdlLWluZGV4JCB8fAorICAgICAgICAgICIkcGtnIiA9fiBebGludXgtIHx8ICIkcGtnIiA9fiBeYWR0LWluc3RhbGxlciQgfHwKKyAgICAgICAgICAiJHBrZyIgPX4gXmVkcy10b29scyQgfHwgIiRwa2ciID1+IF5leHRlcm5hbC1weXRob24tdGFyYmFsbCQgfHwKKyAgICAgICAgICAiJHBrZyIgPX4gXnF0NC1lbWJlZGRlZCQgfHwgIiRwa2ciID1+IF5xdC1tb2JpbGl0eSBdXTsgdGhlbgorCQkjIFNraXAgZ2xpYmMsIGxpYmljb252LCAtdG9vbGNoYWluLCBhbmQgb3RoZXIgcmVjaXBlcyBrbm93bgorCQkjIHRvIGNhdXNlIGJ1aWxkIGNvbmZsaWN0cyBvciB0cmlnZ2VyIGZhbHNlIHBvc2l0aXZlcy4KKwkJY29udGludWUKKwlmaQkKKworCWVjaG8gIkJ1aWxkaW5nIHBhY2thZ2UgJHBrZy4uLiIKKwliaXRiYWtlICRwa2cgPiAvZGV2L251bGwKKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJZWNobyAiVGhlcmUgd2FzIGFuIGVycm9yIGJ1aWxkaW5nIHBhY2thZ2UgJHBrZyIgPj4gIiRSRVBPUlRfTUlTU0lOR19ERVRBSUwiCisJCWVjaG8gIiRwa2ciID4+ICRSRVBPUlRfQlVJTERfRVJST1JTCisKKwkJIyBEbyBub3Qgc2tpcCB0aGUgcmVtYWluaW5nIHRlc3RzLCBhcyBzb21ldGltZXMgdGhlCisJCSMgZXhpdCBzdGF0dXMgaXMgMSBkdWUgdG8gUUEgZXJyb3JzLCBhbmQgd2UgY2FuIHN0aWxsCisJCSMgcGVyZm9ybSB0aGUgLWRvYyBjaGVja3MuCisJZmkKKworCWVjaG8gIiRwa2cgYnVpbHQgc3VjY2Vzc2Z1bGx5LCBjaGVja2luZyBmb3IgYSBkb2N1bWVudGF0aW9uIHBhY2thZ2UuLi4iCisJV09SS0RJUj1gYml0YmFrZSAtZSAkcGtnIHwgZ3JlcCBeV09SS0RJUiB8IGF3ayAtRiAnPScgJ3sgcHJpbnQgXCQyIH0nIHwgYXdrIC1GICciJyAneyBwcmludCBcJDIgfSdgCisJRklORF9ET0NfUEtHPWBmaW5kICRXT1JLRElSL3BhY2thZ2VzLXNwbGl0LyotZG9jIC1tYXhkZXB0aCAwIC10eXBlIGRgCisJaWYgWyAteiAiJEZJTkRfRE9DX1BLRyIgXTsgdGhlbgorCQkjIE5vIC1kb2MgcGFja2FnZSB3YXMgZ2VuZXJhdGVkOgorCQllY2hvICJObyAtZG9jIHBhY2thZ2U6ICRwa2ciID4+ICIkUkVQT1JUX01JU1NJTkdfREVUQUlMIgorCQllY2hvICIkcGtnIiA+PiAkUkVQT1JUX01JU1NJTkdfU0lNUExFCisJCWNvbnRpbnVlCisJZmkKKworCUZJTkRfRE9DX0ZJTEVTPWBmaW5kICRGSU5EX0RPQ19QS0cgLXR5cGUgZmAKKwlpZiBbIC16ICIkRklORF9ET0NfRklMRVMiIF07IHRoZW4KKwkJIyBObyBmaWxlcyBzaGlwcGVkIHdpdGggdGhlIC1kb2MgcGFja2FnZToKKwkJZWNobyAiTm8gZmlsZXMgc2hpcHBlZCB3aXRoIHRoZSAtZG9jIHBhY2thZ2U6ICRwa2ciID4+ICIkUkVQT1JUX01JU1NJTkdfREVUQUlMIgorCQllY2hvICIkcGtnIiA+PiAkUkVQT1JUX01JU1NJTkdfU0lNUExFCisJCWNvbnRpbnVlCisJZmkKKworCWVjaG8gIkRvY3VtZW50YXRpb24gc2hpcHBlZCB3aXRoICRwa2c6IiA+PiAiJFJFUE9SVF9ET0NfREVUQUlMIgorCWVjaG8gIiRGSU5EX0RPQ19GSUxFUyIgPj4gIiRSRVBPUlRfRE9DX0RFVEFJTCIKKwllY2hvICIiCT4+ICIkUkVQT1JUX0RPQ19ERVRBSUwiCisKKwllY2hvICIkcGtnIiA+PiAiJFJFUE9SVF9ET0NfU0lNUExFIgorZG9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZ3JhcGgtdG9vbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2dyYXBoLXRvb2wKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmRjN2QzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2dyYXBoLXRvb2wKQEAgLTAsMCArMSw5MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgU2ltcGxlIGdyYXBoIHF1ZXJ5IHV0aWxpdHkKKyMgdXNlZnVsIGZvciBnZXR0aW5nIGFuc3dlcnMgZnJvbSAuZG90IGZpbGVzIHByb2R1Y2VkIGJ5IGJpdGJha2UgLWcKKyMKKyMgV3JpdHRlbiBieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisjCisjIENvcHlyaWdodCAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworCitpbXBvcnQgc3lzCisKK2RlZiBnZXRfcGF0aF9uZXR3b3JreChkb3RmaWxlLCBmcm9tbm9kZSwgdG9ub2RlKToKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBuZXR3b3JreAorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcHJpbnQoJ0VSUk9SOiBQbGVhc2UgaW5zdGFsbCB0aGUgbmV0d29ya3ggcHl0aG9uIG1vZHVsZScpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBncmFwaCA9IG5ldHdvcmt4LkRpR3JhcGgobmV0d29ya3gucmVhZF9kb3QoZG90ZmlsZSkpCisKKyAgICBkZWYgbm9kZV9taXNzaW5nKG5vZGUpOgorICAgICAgICBpbXBvcnQgZGlmZmxpYgorICAgICAgICBjbG9zZV9tYXRjaGVzID0gZGlmZmxpYi5nZXRfY2xvc2VfbWF0Y2hlcyhub2RlLCBncmFwaC5ub2RlcygpLCBjdXRvZmY9MC43KQorICAgICAgICBpZiBjbG9zZV9tYXRjaGVzOgorICAgICAgICAgICAgcHJpbnQoJ0VSUk9SOiBubyBub2RlICIlcyIgaW4gZ3JhcGguIENsb3NlIG1hdGNoZXM6XG4gICVzJyAlIChub2RlLCAnXG4gICcuam9pbihjbG9zZV9tYXRjaGVzKSkpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBub3QgZnJvbW5vZGUgaW4gZ3JhcGg6CisgICAgICAgIG5vZGVfbWlzc2luZyhmcm9tbm9kZSkKKyAgICBpZiBub3QgdG9ub2RlIGluIGdyYXBoOgorICAgICAgICBub2RlX21pc3NpbmcodG9ub2RlKQorICAgIHJldHVybiBuZXR3b3JreC5hbGxfc2ltcGxlX3BhdGhzKGdyYXBoLCBzb3VyY2U9ZnJvbW5vZGUsIHRhcmdldD10b25vZGUpCisKKworZGVmIGZpbmRfcGF0aHMoYXJncywgdXNhZ2UpOgorICAgIGlmIGxlbihhcmdzKSA8IDM6CisgICAgICAgIHVzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGZyb21ub2RlID0gYXJnc1sxXQorICAgIHRvbm9kZSA9IGFyZ3NbMl0KKyAgICBwYXRocyA9IGxpc3QoZ2V0X3BhdGhfbmV0d29ya3goYXJnc1swXSwgZnJvbW5vZGUsIHRvbm9kZSkpCisgICAgaWYgcGF0aHM6CisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgcHJpbnQgJyAtPiAnLmpvaW4ocGF0aCkKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiRVJST1I6IG5vIHBhdGggZnJvbSAlcyB0byAlcyBpbiBncmFwaCIgJSAoZnJvbW5vZGUsIHRvbm9kZSkpCisgICAgICAgIHN5cy5leGl0KDEpCisKK2RlZiBtYWluKCk6CisgICAgaW1wb3J0IG9wdHBhcnNlCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICB1c2FnZSA9ICcnJyVwcm9nIFtvcHRpb25zXSA8Y29tbWFuZD4gPGFyZ3VtZW50cz4KKworQXZhaWxhYmxlIGNvbW1hbmRzOgorICAgIGZpbmQtcGF0aHMgPGRvdGZpbGU+IDxmcm9tPiA8dG8+CisgICAgICAgIEZpbmQgYWxsIG9mIHRoZSBwYXRocyBiZXR3ZWVuIHR3byBub2RlcyBpbiBhIGRvdCBncmFwaCcnJykKKworICAgICNwYXJzZXIuYWRkX29wdGlvbigiLWQiLCAiLS1kZWJ1ZyIsCisgICAgIyAgICAgICAgaGVscCA9ICJSZXBvcnQgYWxsIFNSQ1JFViB2YWx1ZXMsIG5vdCBqdXN0IG9uZXMgd2hlcmUgQVVUT1JFViBoYXMgYmVlbiB1c2VkIiwKKyAgICAjICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJkZWJ1ZyIsIGRlZmF1bHQ9RmFsc2UpCisKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisgICAgYXJncyA9IGFyZ3NbMTpdCisKKyAgICBpZiBsZW4oYXJncykgPCAxOgorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBhcmdzWzBdID09ICJmaW5kLXBhdGhzIjoKKyAgICAgICAgZmluZF9wYXRocyhhcmdzWzE6XSwgcGFyc2VyLnByaW50X2hlbHApCisgICAgZWxzZToKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9saXN0LXBhY2thZ2Vjb25maWctZmxhZ3MucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9saXN0LXBhY2thZ2Vjb25maWctZmxhZ3MucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmYzYjhiMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2xpc3QtcGFja2FnZWNvbmZpZy1mbGFncy5weQpAQCAtMCwwICsxLDE3OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgLSBsaXN0IGF2YWlsYWJsZSByZWNpcGVzIHdoaWNoIGhhdmUgUEFDS0FHRUNPTkZJRyBmbGFncworIyAtIGxpc3QgYXZhaWxhYmxlIFBBQ0tBR0VDT05GSUcgZmxhZ3MgYW5kIGFsbCBhZmZlY3RlZCByZWNpcGVzCisjIC0gbGlzdCBhbGwgcmVjaXBlcyBhbmQgUEFDS0FHRUNPTkZJRyBpbmZvcm1hdGlvbgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBvcworCisKK3NjcmlwdHNfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKSkpCitsaWJfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChzY3JpcHRzX3BhdGggKyAnLy4uL2xpYicpCitzeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQorCitpbXBvcnQgc2NyaXB0cGF0aAorCisjIEZvciBpbXBvcnRpbmcgdGhlIGZvbGxvd2luZyBtb2R1bGVzCitiaXRiYWtlcGF0aCA9IHNjcmlwdHBhdGguYWRkX2JpdGJha2VfbGliX3BhdGgoKQoraWYgbm90IGJpdGJha2VwYXRoOgorICAgIHN5cy5zdGRlcnIud3JpdGUoIlVuYWJsZSB0byBmaW5kIGJpdGJha2UgYnkgc2VhcmNoaW5nIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhpcyBzY3JpcHQgb3IgUEFUSFxuIikKKyAgICBzeXMuZXhpdCgxKQorCitpbXBvcnQgYmIuY2FjaGUKK2ltcG9ydCBiYi5jb29rZXIKK2ltcG9ydCBiYi5wcm92aWRlcnMKK2ltcG9ydCBiYi50aW5mb2lsCisKK2RlZiBnZXRfZm5saXN0KGJiaGFuZGxlciwgcGtnX3BuLCBwcmVmZXJyZWQpOgorICAgICcnJyBHZXQgYWxsIHJlY2lwZSBmaWxlIG5hbWVzICcnJworICAgIGlmIHByZWZlcnJlZDoKKyAgICAgICAgKGxhdGVzdF92ZXJzaW9ucywgcHJlZmVycmVkX3ZlcnNpb25zKSA9IGJiLnByb3ZpZGVycy5maW5kUHJvdmlkZXJzKGJiaGFuZGxlci5jb25maWdfZGF0YSwgYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZSwgcGtnX3BuKQorCisgICAgZm5fbGlzdCA9IFtdCisgICAgZm9yIHBuIGluIHNvcnRlZChwa2dfcG4pOgorICAgICAgICBpZiBwcmVmZXJyZWQ6CisgICAgICAgICAgICBmbl9saXN0LmFwcGVuZChwcmVmZXJyZWRfdmVyc2lvbnNbcG5dWzFdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm5fbGlzdC5leHRlbmQocGtnX3BuW3BuXSkKKworICAgIHJldHVybiBmbl9saXN0CisKK2RlZiBnZXRfcmVjaXBlc2RhdGEoYmJoYW5kbGVyLCBwcmVmZXJyZWQpOgorICAgICcnJyBHZXQgZGF0YSBvZiBhbGwgYXZhaWxhYmxlIHJlY2lwZXMgd2hpY2ggaGF2ZSBQQUNLQUdFQ09ORklHIGZsYWdzICcnJworICAgIHBrZ19wbiA9IGJiaGFuZGxlci5jb29rZXIucmVjaXBlY2FjaGUucGtnX3BuCisKKyAgICBkYXRhX2RpY3QgPSB7fQorICAgIGZvciBmbiBpbiBnZXRfZm5saXN0KGJiaGFuZGxlciwgcGtnX3BuLCBwcmVmZXJyZWQpOgorICAgICAgICBkYXRhID0gYmIuY2FjaGUuQ2FjaGUubG9hZERhdGFGdWxsKGZuLCBiYmhhbmRsZXIuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmbiksIGJiaGFuZGxlci5jb25maWdfZGF0YSkKKyAgICAgICAgZmxhZ3MgPSBkYXRhLmdldFZhckZsYWdzKCJQQUNLQUdFQ09ORklHIikKKyAgICAgICAgZmxhZ3MucG9wKCdkb2MnLCBOb25lKQorICAgICAgICBpZiBmbGFnczoKKyAgICAgICAgICAgIGRhdGFfZGljdFtmbl0gPSBkYXRhCisKKyAgICByZXR1cm4gZGF0YV9kaWN0CisKK2RlZiBjb2xsZWN0X3BrZ3MoZGF0YV9kaWN0KToKKyAgICAnJycgQ29sbGVjdCBhdmFpbGFibGUgcGtncyBpbiB3aGljaCBoYXZlIFBBQ0tBR0VDT05GSUcgZmxhZ3MgJycnCisgICAgIyBwa2dfZGljdCA9IHsncGtnMSc6IFsnZmxhZzEnLCAnZmxhZzInLC4uLl19CisgICAgcGtnX2RpY3QgPSB7fQorICAgIGZvciBmbiBpbiBkYXRhX2RpY3Q6CisgICAgICAgIHBrZ2NvbmZpZ2ZsYWdzID0gZGF0YV9kaWN0W2ZuXS5nZXRWYXJGbGFncygiUEFDS0FHRUNPTkZJRyIpCisgICAgICAgIHBrZ2NvbmZpZ2ZsYWdzLnBvcCgnZG9jJywgTm9uZSkKKyAgICAgICAgcGtnbmFtZSA9IGRhdGFfZGljdFtmbl0uZ2V0VmFyKCJQIiwgVHJ1ZSkKKyAgICAgICAgcGtnX2RpY3RbcGtnbmFtZV0gPSBzb3J0ZWQocGtnY29uZmlnZmxhZ3Mua2V5cygpKQorCisgICAgcmV0dXJuIHBrZ19kaWN0CisKK2RlZiBjb2xsZWN0X2ZsYWdzKHBrZ19kaWN0KToKKyAgICAnJycgQ29sbGVjdCBhdmFpbGFibGUgUEFDS0FHRUNPTkZJRyBmbGFncyBhbmQgYWxsIGFmZmVjdGVkIHBrZ3MgJycnCisgICAgIyBmbGFnX2RpY3QgPSB7J2ZsYWcnOiBbJ3BrZzEnLCAncGtnMicsLi4uXX0KKyAgICBmbGFnX2RpY3QgPSB7fQorICAgIGZvciBwa2duYW1lLCBmbGFnbGlzdCBpbiBwa2dfZGljdC5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIGZsYWcgaW4gZmxhZ2xpc3Q6CisgICAgICAgICAgICBpZiBmbGFnIGluIGZsYWdfZGljdDoKKyAgICAgICAgICAgICAgICBmbGFnX2RpY3RbZmxhZ10uYXBwZW5kKHBrZ25hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZsYWdfZGljdFtmbGFnXSA9IFtwa2duYW1lXQorCisgICAgcmV0dXJuIGZsYWdfZGljdAorCitkZWYgZGlzcGxheV9wa2dzKHBrZ19kaWN0KToKKyAgICAnJycgRGlzcGxheSBhdmFpbGFibGUgcGtncyB3aGljaCBoYXZlIFBBQ0tBR0VDT05GSUcgZmxhZ3MgJycnCisgICAgcGtnbmFtZV9sZW4gPSBsZW4oIlJFQ0lQRSBOQU1FIikgKyAxCisgICAgZm9yIHBrZ25hbWUgaW4gcGtnX2RpY3Q6CisgICAgICAgIGlmIHBrZ25hbWVfbGVuIDwgbGVuKHBrZ25hbWUpOgorICAgICAgICAgICAgcGtnbmFtZV9sZW4gPSBsZW4ocGtnbmFtZSkKKyAgICBwa2duYW1lX2xlbiArPSAxCisKKyAgICBoZWFkZXIgPSAnJS0qcyVzJyAlIChwa2duYW1lX2xlbiwgc3RyKCJSRUNJUEUgTkFNRSIpLCBzdHIoIlBBQ0tBR0VDT05GSUcgRkxBR1MiKSkKKyAgICBwcmludCBoZWFkZXIKKyAgICBwcmludCBzdHIoIiIpLmxqdXN0KGxlbihoZWFkZXIpLCAnPScpCisgICAgZm9yIHBrZ25hbWUgaW4gc29ydGVkKHBrZ19kaWN0KToKKyAgICAgICAgcHJpbnQoJyUtKnMlcycgJSAocGtnbmFtZV9sZW4sIHBrZ25hbWUsICcgJy5qb2luKHBrZ19kaWN0W3BrZ25hbWVdKSkpCisKKworZGVmIGRpc3BsYXlfZmxhZ3MoZmxhZ19kaWN0KToKKyAgICAnJycgRGlzcGxheSBhdmFpbGFibGUgUEFDS0FHRUNPTkZJRyBmbGFncyBhbmQgYWxsIGFmZmVjdGVkIHBrZ3MgJycnCisgICAgZmxhZ19sZW4gPSBsZW4oIlBBQ0tBR0VDT05GSUcgRkxBRyIpICsgNQorCisgICAgaGVhZGVyID0gJyUtKnMlcycgJSAoZmxhZ19sZW4sIHN0cigiUEFDS0FHRUNPTkZJRyBGTEFHIiksIHN0cigiUkVDSVBFIE5BTUVTIikpCisgICAgcHJpbnQgaGVhZGVyCisgICAgcHJpbnQgc3RyKCIiKS5sanVzdChsZW4oaGVhZGVyKSwgJz0nKQorCisgICAgZm9yIGZsYWcgaW4gc29ydGVkKGZsYWdfZGljdCk6CisgICAgICAgIHByaW50KCclLSpzJXMnICUgKGZsYWdfbGVuLCBmbGFnLCAnICAnLmpvaW4oc29ydGVkKGZsYWdfZGljdFtmbGFnXSkpKSkKKworZGVmIGRpc3BsYXlfYWxsKGRhdGFfZGljdCk6CisgICAgJycnIERpc3BsYXkgYWxsIHBrZ3MgYW5kIFBBQ0tBR0VDT05GSUcgaW5mb3JtYXRpb24gJycnCisgICAgcHJpbnQgc3RyKCIiKS5sanVzdCg1MCwgJz0nKQorICAgIGZvciBmbiBpbiBkYXRhX2RpY3Q6CisgICAgICAgIHByaW50KCclcycgJSBkYXRhX2RpY3RbZm5dLmdldFZhcigiUCIsIFRydWUpKQorICAgICAgICBwcmludCBmbgorICAgICAgICBwYWNrYWdlY29uZmlnID0gZGF0YV9kaWN0W2ZuXS5nZXRWYXIoIlBBQ0tBR0VDT05GSUciLCBUcnVlKSBvciAnJworICAgICAgICBpZiBwYWNrYWdlY29uZmlnLnN0cmlwKCkgPT0gJyc6CisgICAgICAgICAgICBwYWNrYWdlY29uZmlnID0gJ05vbmUnCisgICAgICAgIHByaW50KCdQQUNLQUdFQ09ORklHICVzJyAlIHBhY2thZ2Vjb25maWcpCisKKyAgICAgICAgZm9yIGZsYWcsZmxhZ192YWwgaW4gZGF0YV9kaWN0W2ZuXS5nZXRWYXJGbGFncygiUEFDS0FHRUNPTkZJRyIpLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgZmxhZyA9PSAiZG9jIjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcHJpbnQoJ1BBQ0tBR0VDT05GSUdbJXNdICVzJyAlIChmbGFnLCBmbGFnX3ZhbCkpCisgICAgICAgIHByaW50ICcnCisKK2RlZiBtYWluKCk6CisgICAgcGtnX2RpY3QgPSB7fQorICAgIGZsYWdfZGljdCA9IHt9CisKKyAgICAjIENvbGxlY3QgYW5kIHZhbGlkYXRlIGlucHV0CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICBkZXNjcmlwdGlvbiA9ICJMaXN0cyByZWNpcGVzIGFuZCBQQUNLQUdFQ09ORklHIGZsYWdzLiBXaXRob3V0IC1hIG9yIC1mLCByZWNpcGVzIGFuZCB0aGVpciBhdmFpbGFibGUgUEFDS0FHRUNPTkZJRyBmbGFncyBhcmUgbGlzdGVkLiIsCisgICAgICAgIHVzYWdlID0gIiIiCisgICAgJXByb2cgW29wdGlvbnNdIiIiKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZmxhZ3MiLAorICAgICAgICAgICAgaGVscCA9ICJsaXN0IGF2YWlsYWJsZSBQQUNLQUdFQ09ORklHIGZsYWdzIGFuZCBhZmZlY3RlZCByZWNpcGVzIiwKKyAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfY29uc3QiLCBkZXN0PSJsaXN0dHlwZSIsIGNvbnN0PSJmbGFncyIsIGRlZmF1bHQ9InJlY2lwZXMiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYSIsICItLWFsbCIsCisgICAgICAgICAgICBoZWxwID0gImxpc3QgYWxsIHJlY2lwZXMgYW5kIFBBQ0tBR0VDT05GSUcgaW5mb3JtYXRpb24iLAorICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV9jb25zdCIsIGRlc3Q9Imxpc3R0eXBlIiwgY29uc3Q9ImFsbCIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1wIiwgIi0tcHJlZmVycmVkLW9ubHkiLAorICAgICAgICAgICAgaGVscCA9ICJ3aGVyZSBtdWx0aXBsZSByZWNpcGUgdmVyc2lvbnMgYXJlIGF2YWlsYWJsZSwgbGlzdCBvbmx5IHRoZSBwcmVmZXJyZWQgdmVyc2lvbiIsCisgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJwcmVmZXJyZWQiLCBkZWZhdWx0PUZhbHNlKQorCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHN5cy5hcmd2KQorCisgICAgYmJoYW5kbGVyID0gYmIudGluZm9pbC5UaW5mb2lsKCkKKyAgICBiYmhhbmRsZXIucHJlcGFyZSgpCisgICAgcHJpbnQoIkdhdGhlcmluZyByZWNpcGUgZGF0YS4uLiIpCisgICAgZGF0YV9kaWN0ID0gZ2V0X3JlY2lwZXNkYXRhKGJiaGFuZGxlciwgb3B0aW9ucy5wcmVmZXJyZWQpCisKKyAgICBpZiBvcHRpb25zLmxpc3R0eXBlID09ICdmbGFncyc6CisgICAgICAgIHBrZ19kaWN0ID0gY29sbGVjdF9wa2dzKGRhdGFfZGljdCkKKyAgICAgICAgZmxhZ19kaWN0ID0gY29sbGVjdF9mbGFncyhwa2dfZGljdCkKKyAgICAgICAgZGlzcGxheV9mbGFncyhmbGFnX2RpY3QpCisgICAgZWxpZiBvcHRpb25zLmxpc3R0eXBlID09ICdyZWNpcGVzJzoKKyAgICAgICAgcGtnX2RpY3QgPSBjb2xsZWN0X3BrZ3MoZGF0YV9kaWN0KQorICAgICAgICBkaXNwbGF5X3BrZ3MocGtnX2RpY3QpCisgICAgZWxpZiBvcHRpb25zLmxpc3R0eXBlID09ICdhbGwnOgorICAgICAgICBkaXNwbGF5X2FsbChkYXRhX2RpY3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9ta2VmaWRpc2suc2ggYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9ta2VmaWRpc2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTVmNzJiMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL21rZWZpZGlzay5zaApAQCAtMCwwICsxLDQwMyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQorIyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK0xBTkc9QworCisjIFNldCB0byAxIHRvIGVuYWJsZSBhZGRpdGlvbmFsIG91dHB1dAorREVCVUc9MAorT1VUPSIvZGV2L251bGwiCisKKyMKKyMgRGVmYXVsdHMKKyMKKyMgMjAgTWIgZm9yIHRoZSBib290IHBhcnRpdGlvbgorQk9PVF9TSVpFPTIwCisjIDUlIGZvciBzd2FwCitTV0FQX1JBVElPPTUKKworIyBDbGVhbnVwIGFmdGVyIGRpZSgpCitjbGVhbnVwKCkgeworCWRlYnVnICJTeW5jaW5nIGFuZCB1bm1vdW50aW5nIGRldmljZXMiCisJIyBVbm1vdW50IGFueXRoaW5nIHdlIG1vdW50ZWQKKwl1bm1vdW50ICRST09URlNfTU5UIHx8IGVycm9yICJGYWlsZWQgdG8gdW5tb3VudCAkUk9PVEZTX01OVCIKKwl1bm1vdW50ICRCT09URlNfTU5UIHx8IGVycm9yICJGYWlsZWQgdG8gdW5tb3VudCAkQk9PVEZTX01OVCIKKwl1bm1vdW50ICRIRERJTUdfUk9PVEZTX01OVCB8fCBlcnJvciAiRmFpbGVkIHRvIHVubW91bnQgJEhERElNR19ST09URlNfTU5UIgorCXVubW91bnQgJEhERElNR19NTlQgfHwgZXJyb3IgIkZhaWxlZCB0byB1bm1vdW50ICRIRERJTUdfTU5UIgorCisJIyBSZW1vdmUgdGhlIFRNUERJUgorCWRlYnVnICJSZW1vdmluZyB0ZW1wb3JhcnkgZmlsZXMiCisJaWYgWyAtZCAiJFRNUERJUiIgXTsgdGhlbgorCQlybSAtcmYgJFRNUERJUiB8fCBlcnJvciAiRmFpbGVkIHRvIHJlbW92ZSAkVE1QRElSIgorCWZpCit9CisKK3RyYXAgJ2RpZSAiU2lnbmFsIFJlY2VpdmVkLCBBYm9ydGluZy4uLiInIEhVUCBJTlQgVEVSTQorCisjIExvZ2dpbmcgcm91dGluZXMKK1dBUk5JTkdTPTAKK0VSUk9SUz0wCitDTEVBUj0iJCh0cHV0IHNncjApIgorSU5GTz0iJCh0cHV0IGJvbGQpIgorUkVEPSIkKHRwdXQgc2V0YWYgMSkkKHRwdXQgYm9sZCkiCitHUkVFTj0iJCh0cHV0IHNldGFmIDIpJCh0cHV0IGJvbGQpIgorWUVMTE9XPSIkKHRwdXQgc2V0YWYgMykkKHRwdXQgYm9sZCkiCitpbmZvKCkgeworCWVjaG8gIiR7SU5GT30kMSR7Q0xFQVJ9IgorfQorZXJyb3IoKSB7CisJRVJST1JTPSQoKEVSUk9SUysxKSkKKwllY2hvICIke1JFRH0kMSR7Q0xFQVJ9IgorfQord2FybigpIHsKKwlXQVJOSU5HUz0kKChXQVJOSU5HUysxKSkKKwllY2hvICIke1lFTExPV30kMSR7Q0xFQVJ9IgorfQorc3VjY2VzcygpIHsKKwllY2hvICIke0dSRUVOfSQxJHtDTEVBUn0iCit9CitkaWUoKSB7CisJZXJyb3IgIiQxIgorCWNsZWFudXAKKwlleGl0IDEKK30KK2RlYnVnKCkgeworCWlmIFsgJERFQlVHIC1lcSAxIF07IHRoZW4KKwkJZWNobyAiJDEiCisJZmkKK30KKwordXNhZ2UoKSB7CisJZWNobyAiVXNhZ2U6ICQoYmFzZW5hbWUgJDApIFstdl0gREVWSUNFIEhERElNRyBUQVJHRVRfREVWSUNFIgorCWVjaG8gIiAgICAgICAtdjogVmVyYm9zZSBkZWJ1ZyIKKwllY2hvICIgICAgICAgREVWSUNFOiBUaGUgZGV2aWNlIHRvIHdyaXRlIHRoZSBpbWFnZSB0bywgZS5nLiAvZGV2L3NkaCIKKwllY2hvICIgICAgICAgSERESU1HOiBUaGUgaGRkaW1nIGZpbGUgdG8gZ2VuZXJhdGUgdGhlIGVmaSBkaXNrIGZyb20iCisJZWNobyAiICAgICAgIFRBUkdFVF9ERVZJQ0U6IFRoZSBkZXZpY2UgdGhlIHRhcmdldCB3aWxsIGJvb3QgZnJvbSwgZS5nLiAgL2Rldi9tbWNibGswIgorfQorCitpbWFnZV9kZXRhaWxzKCkgeworCUlNRz0kMQorCWluZm8gIkltYWdlIGRldGFpbHMiCisJZWNobyAiICAgIGltYWdlOiAkKHN0YXQgLS1wcmludGYgJyVOXG4nICRJTUcpIgorCWVjaG8gIiAgICAgc2l6ZTogJChzdGF0IC1MIC0tcHJpbnRmICclcyBieXRlc1xuJyAkSU1HKSIKKwllY2hvICIgbW9kaWZpZWQ6ICQoc3RhdCAtTCAtLXByaW50ZiAnJXlcbicgJElNRykiCisJZWNobyAiICAgICB0eXBlOiAkKGZpbGUgLUwgLWIgJElNRykiCisJZWNobyAiIgorfQorCitkZXZpY2VfZGV0YWlscygpIHsKKwlERVY9JDEKKwlCTE9DS19TSVpFPTUxMgorCisJaW5mbyAiRGV2aWNlIGRldGFpbHMiCisJZWNobyAiICBkZXZpY2U6ICRERVZJQ0UiCisJaWYgWyAtZiAiL3N5cy9jbGFzcy9ibG9jay8kREVWL2RldmljZS92ZW5kb3IiIF07IHRoZW4KKwkJZWNobyAiICB2ZW5kb3I6ICQoY2F0IC9zeXMvY2xhc3MvYmxvY2svJERFVi9kZXZpY2UvdmVuZG9yKSIKKwllbHNlCisJCWVjaG8gIiAgdmVuZG9yOiBVTktPV04iCisJZmkKKwlpZiBbIC1mICIvc3lzL2NsYXNzL2Jsb2NrLyRERVYvZGV2aWNlL21vZGVsIiBdOyB0aGVuCisJCWVjaG8gIiAgIG1vZGVsOiAkKGNhdCAvc3lzL2NsYXNzL2Jsb2NrLyRERVYvZGV2aWNlL21vZGVsKSIKKwllbHNlCisJCWVjaG8gIiAgIG1vZGVsOiBVTktOT1dOIgorCWZpCisJaWYgWyAtZiAiL3N5cy9jbGFzcy9ibG9jay8kREVWL3NpemUiIF07IHRoZW4KKwkJZWNobyAiICAgIHNpemU6ICQoKCQoY2F0IC9zeXMvY2xhc3MvYmxvY2svJERFVi9zaXplKSAqICRCTE9DS19TSVpFKSkgYnl0ZXMiCisJZWxzZQorCQllY2hvICIgICAgc2l6ZTogVU5LTk9XTiIKKwlmaQorCWVjaG8gIiIKK30KKwordW5tb3VudF9kZXZpY2UoKSB7CisJZ3JlcCAtcSAkREVWSUNFIC9wcm9jL21vdW50cworCWlmIFsgJD8gLWVxIDAgXTsgdGhlbgorCQl3YXJuICIkREVWSUNFIGxpc3RlZCBpbiAvcHJvYy9tb3VudHMsIGF0dGVtcHRpbmcgdG8gdW5tb3VudCIKKwkJdW1vdW50ICRERVZJQ0UqIDI+L2Rldi9udWxsCisJCXJldHVybiAkPworCWZpCisJcmV0dXJuIDAKK30KKwordW5tb3VudCgpIHsKKwlpZiBbICIkMSIgPSAiIiBdIDsgdGhlbgorCQlyZXR1cm4gMAorCWZpCisJZ3JlcCAtcSAkMSAvcHJvYy9tb3VudHMKKwlpZiBbICQ/IC1lcSAwIF07IHRoZW4KKwkJZGVidWcgIlVubW91bnRpbmcgJDEiCisJCXVtb3VudCAkMQorCQlyZXR1cm4gJD8KKwlmaQorCXJldHVybiAwCit9CisKKyMKKyMgUGFyc2UgYW5kIHZhbGlkYXRlIGFyZ3VtZW50cworIworaWYgWyAkIyAtbHQgMyBdIHx8IFsgJCMgLWd0IDQgXTsgdGhlbgorCXVzYWdlCisJZXhpdCAxCitmaQorCitpZiBbICIkMSIgPSAiLXYiIF07IHRoZW4KKwlERUJVRz0xCisJT1VUPSIxIgorCXNoaWZ0CitmaQorCitERVZJQ0U9JDEKK0hERElNRz0kMgorVEFSR0VUX0RFVklDRT0kMworCitMSU5LPSQocmVhZGxpbmsgJERFVklDRSkKK2lmIFsgJD8gLWVxIDAgXTsgdGhlbgorCURFVklDRT0iJExJTksiCitmaQorCitpZiBbICEgLXcgIiRERVZJQ0UiIF07IHRoZW4KKwl1c2FnZQorCWlmIFsgISAtZSAiJHtERVZJQ0V9IiBdIDsgdGhlbgorCQlkaWUgIkRldmljZSAkREVWSUNFIGNhbm5vdCBiZSBmb3VuZCIKKwllbHNlCisJCWRpZSAiRGV2aWNlICRERVZJQ0UgaXMgbm90IHdyaXRhYmxlIChuZWVkIHRvIHJ1biB1bmRlciBzdWRvPykiCisJZmkKK2ZpCisKK2lmIFsgISAtZSAiJEhERElNRyIgXTsgdGhlbgorCXVzYWdlCisJZGllICJIRERJTUcgJEhERElNRyBkb2VzIG5vdCBleGlzdCIKK2ZpCisKKyMKKyMgRW5zdXJlIHRoZSBoZGRpbWcgaXMgbm90IG1vdW50ZWQKKyMKK3VubW91bnQgIiRIRERJTUciIHx8IGRpZSAiRmFpbGVkIHRvIHVubW91bnQgJEhERElNRyIKKworIworIyBDaGVjayBpZiBhbnkgJERFVklDRSBwYXJ0aXRpb25zIGFyZSBtb3VudGVkCisjCit1bm1vdW50X2RldmljZSB8fCBkaWUgIkZhaWxlZCB0byB1bm1vdW50ICRERVZJQ0UiCisKKyMKKyMgQ29uZmlybSBkZXZpY2Ugd2l0aCB1c2VyCisjCitpbWFnZV9kZXRhaWxzICRIRERJTUcKK2RldmljZV9kZXRhaWxzICQoYmFzZW5hbWUgJERFVklDRSkKK2VjaG8gLW4gIiR7SU5GT31QcmVwYXJlIEVGSSBpbWFnZSBvbiAkREVWSUNFIFt5L05dPyR7Q0xFQVJ9ICIKK3JlYWQgUkVTUE9OU0UKK2lmIFsgIiRSRVNQT05TRSIgIT0gInkiIF07IHRoZW4KKwllY2hvICJJbWFnZSBjcmVhdGlvbiBhYm9ydGVkIgorCWV4aXQgMAorZmkKKworCisjCisjIFByZXBhcmUgdGhlIHRlbXBvcmFyeSB3b3JraW5nIHNwYWNlCisjCitUTVBESVI9JChta3RlbXAgLWQgbWtlZmlkaXNrLVhYWCkgfHwgZGllICJGYWlsZWQgdG8gY3JlYXRlIHRlbXBvcmFyeSBtb3VudGluZyBkaXJlY3RvcnkuIgorSERESU1HX01OVD0kVE1QRElSL2hkZGltZworSERESU1HX1JPT1RGU19NTlQ9JFRNUERJUi9oZGRpbWdfcm9vdGZzCitST09URlNfTU5UPSRUTVBESVIvcm9vdGZzCitCT09URlNfTU5UPSRUTVBESVIvYm9vdGZzCitta2RpciAkSERESU1HX01OVCB8fCBkaWUgIkZhaWxlZCB0byBjcmVhdGUgJEhERElNR19NTlQiCitta2RpciAkSERESU1HX1JPT1RGU19NTlQgfHwgZGllICJGYWlsZWQgdG8gY3JlYXRlICRIRERJTUdfUk9PVEZTX01OVCIKK21rZGlyICRST09URlNfTU5UIHx8IGRpZSAiRmFpbGVkIHRvIGNyZWF0ZSAkUk9PVEZTX01OVCIKK21rZGlyICRCT09URlNfTU5UIHx8IGRpZSAiRmFpbGVkIHRvIGNyZWF0ZSAkQk9PVEZTX01OVCIKKworCisjCisjIFBhcnRpdGlvbiAkREVWSUNFCisjCitERVZJQ0VfU0laRT0kKHBhcnRlZCAtcyAkREVWSUNFIHVuaXQgbWIgcHJpbnQgfCBncmVwIF5EaXNrIHwgY3V0IC1kIiAiIC1mIDMgfCBzZWQgLWUgInMvTUIvLyIpCisjIElmIHRoZSBkZXZpY2Ugc2l6ZSBpcyBub3QgcmVwb3J0ZWQgdGhlcmUgbWF5IG5vdCBiZSBhIHZhbGlkIGxhYmVsCitpZiBbICIkREVWSUNFX1NJWkUiID0gIiIgXSA7IHRoZW4KKwlwYXJ0ZWQgLXMgJERFVklDRSBta2xhYmVsIG1zZG9zIHx8IGRpZSAiRmFpbGVkIHRvIGNyZWF0ZSBNU0RPUyBwYXJ0aXRpb24gdGFibGUiCisJREVWSUNFX1NJWkU9JChwYXJ0ZWQgLXMgJERFVklDRSB1bml0IG1iIHByaW50IHwgZ3JlcCBeRGlzayB8IGN1dCAtZCIgIiAtZiAzIHwgc2VkIC1lICJzL01CLy8iKQorZmkKK1NXQVBfU0laRT0kKChERVZJQ0VfU0laRSpTV0FQX1JBVElPLzEwMCkpCitST09URlNfU0laRT0kKChERVZJQ0VfU0laRS1CT09UX1NJWkUtU1dBUF9TSVpFKSkKK1JPT1RGU19TVEFSVD0kKChCT09UX1NJWkUpKQorUk9PVEZTX0VORD0kKChST09URlNfU1RBUlQrUk9PVEZTX1NJWkUpKQorU1dBUF9TVEFSVD0kKChST09URlNfRU5EKSkKKworIyBNTUMgZGV2aWNlcyB1c2UgYSBwYXJ0aXRpb24gcHJlZml4IGNoYXJhY3RlciAncCcKK1BBUlRfUFJFRklYPSIiCitpZiBbICEgIiR7REVWSUNFIy9kZXYvbW1jYmxrfSIgPSAiJHtERVZJQ0V9IiBdIHx8IFsgISAiJHtERVZJQ0UjL2Rldi9sb29wfSIgPSAiJHtERVZJQ0V9IiBdOyB0aGVuCisJUEFSVF9QUkVGSVg9InAiCitmaQorQk9PVEZTPSRERVZJQ0Uke1BBUlRfUFJFRklYfTEKK1JPT1RGUz0kREVWSUNFJHtQQVJUX1BSRUZJWH0yCitTV0FQPSRERVZJQ0Uke1BBUlRfUFJFRklYfTMKKworVEFSR0VUX1BBUlRfUFJFRklYPSIiCitpZiBbICEgIiR7VEFSR0VUX0RFVklDRSMvZGV2L21tY2Jsa30iID0gIiR7VEFSR0VUX0RFVklDRX0iIF07IHRoZW4KKwlUQVJHRVRfUEFSVF9QUkVGSVg9InAiCitmaQorVEFSR0VUX1JPT1RGUz0kVEFSR0VUX0RFVklDRSR7VEFSR0VUX1BBUlRfUFJFRklYfTIKK1RBUkdFVF9TV0FQPSRUQVJHRVRfREVWSUNFJHtUQVJHRVRfUEFSVF9QUkVGSVh9MworCitlY2hvICIiCitpbmZvICJCb290IHBhcnRpdGlvbiBzaXplOiAgICRCT09UX1NJWkUgTUIgKCRCT09URlMpIgoraW5mbyAiUk9PVEZTIHBhcnRpdGlvbiBzaXplOiAkUk9PVEZTX1NJWkUgTUIgKCRST09URlMpIgoraW5mbyAiU3dhcCBwYXJ0aXRpb24gc2l6ZTogICAkU1dBUF9TSVpFIE1CICgkU1dBUCkiCitlY2hvICIiCisKKyMgVXNlIE1TRE9TIGJ5IGRlZmF1bHQgYXMgR1BUIGNhbm5vdCBiZSByZWxpYWJseSBkaXN0cmlidXRlZCBpbiBkaXNrIGltYWdlIGZvcm0KKyMgYXMgaXQgcmVxdWlyZXMgdGhlIGJhY2t1cCB0YWJsZSB0byBiZSBvbiB0aGUgbGFzdCBibG9jayBvZiB0aGUgZGV2aWNlLCB3aGljaAorIyBvZiBjb3Vyc2UgdmFyaWVzIGZyb20gZGV2aWNlIHRvIGRldmljZS4KKworaW5mbyAiUGFydGl0aW9uaW5nIGluc3RhbGxhdGlvbiBtZWRpYSAoJERFVklDRSkiCisKK2RlYnVnICJEZWxldGluZyBwYXJ0aXRpb24gdGFibGUgb24gJERFVklDRSIKK2RkIGlmPS9kZXYvemVybyBvZj0kREVWSUNFIGJzPTUxMiBjb3VudD0yID4kT1VUIDI+JjEgfHwgZGllICJGYWlsZWQgdG8gemVybyBiZWdpbm5pbmcgb2YgJERFVklDRSIKKworZGVidWcgIkNyZWF0aW5nIG5ldyBwYXJ0aXRpb24gdGFibGUgKE1TRE9TKSBvbiAkREVWSUNFIgorcGFydGVkIC1zICRERVZJQ0UgbWtsYWJlbCBtc2RvcyA+JE9VVCAyPiYxIHx8IGRpZSAiRmFpbGVkIHRvIGNyZWF0ZSBNU0RPUyBwYXJ0aXRpb24gdGFibGUiCisKK2RlYnVnICJDcmVhdGluZyBib290IHBhcnRpdGlvbiBvbiAkQk9PVEZTIgorcGFydGVkIC1zICRERVZJQ0UgbWtwYXJ0IHByaW1hcnkgMCUgJEJPT1RfU0laRSA+JE9VVCAyPiYxIHx8IGRpZSAiRmFpbGVkIHRvIGNyZWF0ZSBCT09UIHBhcnRpdGlvbiIKKworZGVidWcgIkVuYWJsaW5nIGJvb3QgZmxhZyBvbiAkQk9PVEZTIgorcGFydGVkIC1zICRERVZJQ0Ugc2V0IDEgYm9vdCBvbiA+JE9VVCAyPiYxIHx8IGRpZSAiRmFpbGVkIHRvIGVuYWJsZSBib290IGZsYWciCisKK2RlYnVnICJDcmVhdGluZyBST09URlMgcGFydGl0aW9uIG9uICRST09URlMiCitwYXJ0ZWQgLXMgJERFVklDRSBta3BhcnQgcHJpbWFyeSAkUk9PVEZTX1NUQVJUICRST09URlNfRU5EID4kT1VUIDI+JjEgfHwgZGllICJGYWlsZWQgdG8gY3JlYXRlIFJPT1RGUyBwYXJ0aXRpb24iCisKK2RlYnVnICJDcmVhdGluZyBzd2FwIHBhcnRpdGlvbiBvbiAkU1dBUCIKK3BhcnRlZCAtcyAkREVWSUNFIG1rcGFydCBwcmltYXJ5ICRTV0FQX1NUQVJUIDEwMCUgPiRPVVQgMj4mMSB8fCBkaWUgIkZhaWxlZCB0byBjcmVhdGUgU1dBUCBwYXJ0aXRpb24iCisKK2lmIFsgJERFQlVHIC1lcSAxIF07IHRoZW4KKwlwYXJ0ZWQgLXMgJERFVklDRSBwcmludAorZmkKKworCisjCisjIENoZWNrIGlmIGFueSAkREVWSUNFIHBhcnRpdGlvbnMgYXJlIG1vdW50ZWQgYWZ0ZXIgcGFydGl0aW9uaW5nCisjCit1bm1vdW50X2RldmljZSB8fCBkaWUgIkZhaWxlZCB0byB1bm1vdW50ICRERVZJQ0UgcGFydGl0aW9ucyIKKworCisjCisjIEZvcm1hdCAkREVWSUNFIHBhcnRpdGlvbnMKKyMKK2luZm8gIkZvcm1hdHRpbmcgcGFydGl0aW9ucyIKK2RlYnVnICJGb3JtYXR0aW5nICRCT09URlMgYXMgdmZhdCIKK2lmIFsgISAiJHtERVZJQ0UjL2Rldi9sb29wfSIgPSAiJHtERVZJQ0V9IiBdOyB0aGVuCisJbWtmcy52ZmF0IC1JICRCT09URlMgLW4gIkVGSSIgPiRPVVQgMj4mMSB8fCBkaWUgIkZhaWxlZCB0byBmb3JtYXQgJEJPT1RGUyIKK2Vsc2UKKwlta2ZzLnZmYXQgJEJPT1RGUyAtbiAiRUZJIiA+JE9VVCAyPiYxIHx8IGRpZSAiRmFpbGVkIHRvIGZvcm1hdCAkQk9PVEZTIgorZmkKKworZGVidWcgIkZvcm1hdHRpbmcgJFJPT1RGUyBhcyBleHQzIgorbWtmcy5leHQzIC1GICRST09URlMgLUwgIlJPT1QiID4kT1VUIDI+JjEgfHwgZGllICJGYWlsZWQgdG8gZm9ybWF0ICRST09URlMiCisKK2RlYnVnICJGb3JtYXR0aW5nIHN3YXAgcGFydGl0aW9uICgkU1dBUCkiCitta3N3YXAgJFNXQVAgPiRPVVQgMj4mMSB8fCBkaWUgIkZhaWxlZCB0byBwcmVwYXJlIHN3YXAiCisKKworIworIyBJbnN0YWxsaW5nIHRvICRERVZJQ0UKKyMKK2RlYnVnICJNb3VudGluZyBpbWFnZXMgYW5kIGRldmljZSBpbiBwcmVwYXJhdGlvbiBmb3IgaW5zdGFsbGF0aW9uIgorbW91bnQgLW8gbG9vcCAkSERESU1HICRIRERJTUdfTU5UID4kT1VUIDI+JjEgfHwgZXJyb3IgIkZhaWxlZCB0byBtb3VudCAkSERESU1HIgorbW91bnQgLW8gbG9vcCAkSERESU1HX01OVC9yb290ZnMuaW1nICRIRERJTUdfUk9PVEZTX01OVCA+JE9VVCAyPiYxIHx8IGVycm9yICJGYWlsZWQgdG8gbW91bnQgcm9vdGZzLmltZyIKK21vdW50ICRST09URlMgJFJPT1RGU19NTlQgPiRPVVQgMj4mMSB8fCBlcnJvciAiRmFpbGVkIHRvIG1vdW50ICRST09URlMgb24gJFJPT1RGU19NTlQiCittb3VudCAkQk9PVEZTICRCT09URlNfTU5UID4kT1VUIDI+JjEgfHwgZXJyb3IgIkZhaWxlZCB0byBtb3VudCAkQk9PVEZTIG9uICRCT09URlNfTU5UIgorCitpbmZvICJQcmVwYXJpbmcgYm9vdCBwYXJ0aXRpb24iCitFRklESVI9IiRCT09URlNfTU5UL0VGSS9CT09UIgorY3AgJEhERElNR19NTlQvdm1saW51eiAkQk9PVEZTX01OVCA+JE9VVCAyPiYxIHx8IGVycm9yICJGYWlsZWQgdG8gY29weSB2bWxpbnV6IgorIyBDb3B5IHRoZSBlZmkgbG9hZGVyIGFuZCBjb25maWdzIChib290aSouZWZpIGFuZCBncnViLmNmZyBpZiBpdCBleGlzdHMpCitjcCAtciAkSERESU1HX01OVC9FRkkgJEJPT1RGU19NTlQgPiRPVVQgMj4mMSB8fCBlcnJvciAiRmFpbGVkIHRvIGNvcHkgRUZJIGRpciIKKyMgU2lsZW50bHkgaWdub3JlIGEgbWlzc2luZyBndW1taWJvb3QgbG9hZGVyIGRpciAod2UgbWlnaHQganVzdCBiZSBhIEdSVUIgaW1hZ2UpCitjcCAtciAkSERESU1HX01OVC9sb2FkZXIgJEJPT1RGU19NTlQgPiRPVVQgMj4mMQorCisjIFVwZGF0ZSB0aGUgYm9vdCBsb2FkZXJzIGNvbmZpZ3VyYXRpb25zIGZvciBhbiBpbnN0YWxsZWQgaW1hZ2UKKyMgUmVtb3ZlIGFueSBleGlzdGluZyByb290PSBrZXJuZWwgcGFyYW1ldGVycyBhbmQ6CisjIG8gQWRkIGEgcm9vdD0gcGFyYW1ldGVyIHdpdGggdGhlIHRhcmdldCByb290ZnMKKyMgbyBTcGVjaWZ5IHJvIHNvIGZzY2sgY2FuIGJlIHJ1biBkdXJpbmcgYm9vdAorIyBvIFNwZWNpZnkgcm9vdHdhaXQgaW4gY2FzZSB0aGUgdGFyZ2V0IG1lZGlhIGlzIGFuIGFzeW5jcm9ub3VzIGJsb2NrIGRldmljZQorIyAgIHN1Y2ggYXMgTU1DIG9yIFVTQiBkaXNrcworIyBvIFNwZWNpZnkgInF1aWV0IiB0byBtaW5pbWl6ZSBib290IHRpbWUgd2hlbiB1c2luZyBzbG93IHNlcmlhbCBjb25zb2xlcworCisjIExvb2sgZm9yIGEgR1JVQiBpbnN0YWxsYXRpb24KK0dSVUJfQ0ZHPSIkRUZJRElSL2dydWIuY2ZnIgoraWYgWyAtZSAiJEdSVUJfQ0ZHIiBdOyB0aGVuCisJaW5mbyAiQ29uZmlndXJpbmcgR1JVQiIKKwkjIERlbGV0ZSB0aGUgaW5zdGFsbCBlbnRyeQorCXNlZCAtaSAiL21lbnVlbnRyeSAnaW5zdGFsbCcvLC9efS9kIiAkR1JVQl9DRkcKKwkjIERlbGV0ZSB0aGUgaW5pdHJkIGxpbmVzCisJc2VkIC1pICIvaW5pdHJkIC9kIiAkR1JVQl9DRkcKKwkjIERlbGV0ZSBhbnkgTEFCRUw9IHN0cmluZ3MKKwlzZWQgLWkgInMvIExBQkVMPVteIF0qLyAvIiAkR1JVQl9DRkcKKworCXNlZCAtaSAic0Agcm9vdD1bXiBdKkAgQCIgJEdSVUJfQ0ZHCisJc2VkIC1pICJzQHZtbGludXogQHZtbGludXogcm9vdD0kVEFSR0VUX1JPT1RGUyBybyByb290d2FpdCBxdWlldCBAIiAkR1JVQl9DRkcKK2ZpCisKKyMgTG9vayBmb3IgYSBndW1taWJvb3QgaW5zdGFsbGF0aW9uCitHVU1NSV9FTlRSSUVTPSIkQk9PVEZTX01OVC9sb2FkZXIvZW50cmllcyIKK0dVTU1JX0NGRz0iJEdVTU1JX0VOVFJJRVMvYm9vdC5jb25mIgoraWYgWyAtZCAiJEdVTU1JX0VOVFJJRVMiIF07IHRoZW4KKwlpbmZvICJDb25maWd1cmluZyBHdW1taWJvb3QiCisJIyByZW1vdmUgdGhlIGluc3RhbGwgdGFyZ2V0IGlmIGl0IGV4aXN0cworCXJtICRHVU1NSV9FTlRSSUVTL2luc3RhbGwuY29uZiA+JE9VVCAyPiYxCisKKwlpZiBbICEgLWUgIiRHVU1NSV9DRkciIF07IHRoZW4KKwkJZWNobyAiRVJST1I6ICRHVU1NSV9DRkcgbm90IGZvdW5kIgorCWZpCisKKwlzZWQgLWkgIi9pbml0cmQgL2QiICRHVU1NSV9DRkcKKwlzZWQgLWkgInNAIHJvb3Q9W14gXSpAIEAiICRHVU1NSV9DRkcKKwlzZWQgLWkgInNAb3B0aW9ucyAqTEFCRUw9Ym9vdCBAb3B0aW9ucyBMQUJFTD1Cb290IHJvb3Q9JFRBUkdFVF9ST09URlMgcm8gcm9vdHdhaXQgcXVpZXQgQCIgJEdVTU1JX0NGRworZmkKKworIyBFbnN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgRUZJIGJvb3Rsb2FkZXIgY29uZmlndXJlZAoraWYgWyAhIC1lICRHUlVCX0NGRyBdICYmIFsgISAtZSAkR1VNTUlfQ0ZHIF07IHRoZW4KKwlkaWUgIk5vIEVGSSBib290bG9hZGVyIGNvbmZpZ3VyYXRpb24gZm91bmQiCitmaQorCisKK2luZm8gIkNvcHlpbmcgUk9PVEZTIGZpbGVzICh0aGlzIG1heSB0YWtlIGEgd2hpbGUpIgorY3AgLWEgJEhERElNR19ST09URlNfTU5ULyogJFJPT1RGU19NTlQgPiRPVVQgMj4mMSB8fCBkaWUgIlJvb3QgRlMgY29weSBmYWlsZWQiCisKK2VjaG8gIiRUQVJHRVRfU1dBUCAgICAgc3dhcCAgICAgICAgICAgICBzd2FwICAgICAgIGRlZmF1bHRzICAgICAgICAgICAgICAwIDAiID4+ICRST09URlNfTU5UL2V0Yy9mc3RhYgorCisjIFdlIGRvbnQgd2FudCB1ZGV2IHRvIG1vdW50IG91ciByb290IGRldmljZSB3aGlsZSB3ZSdyZSBib290aW5nLi4uCitpZiBbIC1kICRST09URlNfTU5UL2V0Yy91ZGV2LyBdIDsgdGhlbgorCWVjaG8gIiRUQVJHRVRfREVWSUNFIiA+PiAkUk9PVEZTX01OVC9ldGMvdWRldi9tb3VudC5ibGFja2xpc3QKK2ZpCisKKworIyBDYWxsIGNsZWFudXAgdG8gdW5tb3VudCBkZXZpY2VzIGFuZCBpbWFnZXMgYW5kIHJlbW92ZSB0aGUgVE1QRElSCitjbGVhbnVwCisKK2VjaG8gIiIKK2lmIFsgJFdBUk5JTkdTIC1uZSAwIF0gJiYgWyAkRVJST1JTIC1lcSAwIF07IHRoZW4KKwllY2hvICIke1lFTExPV31JbnN0YWxsYXRpb24gY29tcGxldGVkIHdpdGggd2FybmluZ3Mke0NMRUFSfSIKKwllY2hvICIke1lFTExPV31XYXJuaW5nczogJFdBUk5JTkdTJHtDTEVBUn0iCitlbGlmIFsgJEVSUk9SUyAtbmUgMCBdOyB0aGVuCisJZWNobyAiJHtSRUR9SW5zdGFsbGF0aW9uIGVuY291bnRlcmVkIGVycm9ycyR7Q0xFQVJ9IgorCWVjaG8gIiR7UkVEfUVycm9yczogJEVSUk9SUyR7Q0xFQVJ9IgorCWVjaG8gIiR7WUVMTE9XfVdhcm5pbmdzOiAkV0FSTklOR1Mke0NMRUFSfSIKK2Vsc2UKKwlzdWNjZXNzICJJbnN0YWxsYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseSIKK2ZpCitlY2hvICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMi43LnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTIuNy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MzY1MjJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTIuNy5weQpAQCAtMCwwICsxLDM5OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgZ2VuZXJhdGUgUHl0aG9uIE1hbmlmZXN0IGZvciB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorIyAoQykgMjAwMi0yMDEwIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPgorIyAoQykgMjAwNyBKZXJlbXkgTGFpbmUKKyMgbGljZW5zZWQgdW5kZXIgTUlULCBzZWUgQ09QWUlORy5NSVQKKyMKKyMgSnVuZSAyMiwgMjAxMSAtLSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisjICAqIFVwZGF0ZWQgdG8gbm8gbG9uZ2VyIGdlbmVyYXRlIHNwZWNpYWwgLWRiZyBwYWNrYWdlLCBpbnN0ZWFkIHVzZSB0aGUKKyMgICAgc2luZ2xlIHN5c3RlbSAtZGJnCisjICAqIFVwZGF0ZSB2ZXJzaW9uIHdpdGggIi4xIiB0byBpbmRpY2F0ZSB0aGlzIGNoYW5nZQorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCisKK1ZFUlNJT04gPSAiMi43LjIiCisKK19fYXV0aG9yX18gPSAiTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWxhdWVyQHZhbmlsbGUtbWVkaWEuZGU+IgorX192ZXJzaW9uX18gPSAiMjAxMTAyMjIuMiIKKworY2xhc3MgTWFrZWZpbGVNYWtlcjoKKworICAgIGRlZiBfX2luaXRfXyggc2VsZiwgb3V0ZmlsZSApOgorICAgICAgICAiIiJpbml0aWFsaXplIiIiCisgICAgICAgIHNlbGYucGFja2FnZXMgPSB7fQorICAgICAgICBzZWxmLnRhcmdldFByZWZpeCA9ICIke2xpYmRpcn0vcHl0aG9uJXMvIiAlIFZFUlNJT05bOjNdCisgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0ZmlsZQorICAgICAgICBzZWxmLm91dCggIiIiCisjIFdBUk5JTkc6IFRoaXMgZmlsZSBpcyBBVVRPIEdFTkVSQVRFRDogTWFudWFsIGVkaXRzIHdpbGwgYmUgbG9zdCBuZXh0IHRpbWUgSSByZWdlbmVyYXRlIHRoZSBmaWxlLgorIyBHZW5lcmF0b3I6ICclcycgVmVyc2lvbiAlcyAoQykgMjAwMi0yMDEwIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPgorIyBWaXNpdCB0aGUgUHl0aG9uIGZvciBFbWJlZGRlZCBTeXN0ZW1zIFNpdGUgPT4gaHR0cDovL3d3dy5WYW5pbGxlLmRlL3Byb2plY3RzL3B5dGhvbi5zcHkKKyIiIiAlICggc3lzLmFyZ3ZbMF0sIF9fdmVyc2lvbl9fICkgKQorCisgICAgIworICAgICMgaGVscGVyIGZ1bmN0aW9ucworICAgICMKKworICAgIGRlZiBvdXQoIHNlbGYsIGRhdGEgKToKKyAgICAgICAgIiIicHJpbnQgYSBsaW5lIHRvIHRoZSBvdXRwdXQgZmlsZSIiIgorICAgICAgICBzZWxmLm91dHB1dC53cml0ZSggIiVzXG4iICUgZGF0YSApCisKKyAgICBkZWYgc2V0UHJlZml4KCBzZWxmLCB0YXJnZXRQcmVmaXggKToKKyAgICAgICAgIiIic2V0IGEgZmlsZSBwcmVmaXggZm9yIGFkZFBhY2thZ2UgZmlsZXMiIiIKKyAgICAgICAgc2VsZi50YXJnZXRQcmVmaXggPSB0YXJnZXRQcmVmaXgKKworICAgIGRlZiBkb1Byb2xvZyggc2VsZiApOgorICAgICAgICBzZWxmLm91dCggIiIiICIiIiApCisgICAgICAgIHNlbGYub3V0KCAiIiApCisKKyAgICBkZWYgYWRkUGFja2FnZSggc2VsZiwgbmFtZSwgZGVzY3JpcHRpb24sIGRlcGVuZGVuY2llcywgZmlsZW5hbWVzICk6CisgICAgICAgICIiImFkZCBhIHBhY2thZ2UgdG8gdGhlIE1ha2VmaWxlIiIiCisgICAgICAgIGlmIHR5cGUoIGZpbGVuYW1lcyApID09IHR5cGUoICIiICk6CisgICAgICAgICAgICBmaWxlbmFtZXMgPSBmaWxlbmFtZXMuc3BsaXQoKQorICAgICAgICBmdWxsRmlsZW5hbWVzID0gW10KKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lWzBdICE9ICIkIjoKKyAgICAgICAgICAgICAgICBmdWxsRmlsZW5hbWVzLmFwcGVuZCggIiVzJXMiICUgKCBzZWxmLnRhcmdldFByZWZpeCwgZmlsZW5hbWUgKSApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZ1bGxGaWxlbmFtZXMuYXBwZW5kKCBmaWxlbmFtZSApCisgICAgICAgIHNlbGYucGFja2FnZXNbbmFtZV0gPSBkZXNjcmlwdGlvbiwgZGVwZW5kZW5jaWVzLCBmdWxsRmlsZW5hbWVzCisKKyAgICBkZWYgZG9Cb2R5KCBzZWxmICk6CisgICAgICAgICIiImdlbmVyYXRlIGJvZHkgb2YgTWFrZWZpbGUiIiIKKworICAgICAgICBnbG9iYWwgVkVSU0lPTgorCisgICAgICAgICMKKyAgICAgICAgIyBnZW5lcmF0ZSBwcm92aWRlcyBsaW5lCisgICAgICAgICMKKworICAgICAgICBwcm92aWRlTGluZSA9ICdQUk9WSURFUys9IicKKyAgICAgICAgZm9yIG5hbWUgaW4gc29ydGVkKHNlbGYucGFja2FnZXMpOgorICAgICAgICAgICAgcHJvdmlkZUxpbmUgKz0gIiVzICIgJSBuYW1lCisgICAgICAgIHByb3ZpZGVMaW5lICs9ICciJworCisgICAgICAgIHNlbGYub3V0KCBwcm92aWRlTGluZSApCisgICAgICAgIHNlbGYub3V0KCAiIiApCisKKyAgICAgICAgIworICAgICAgICAjIGdlbmVyYXRlIHBhY2thZ2UgbGluZQorICAgICAgICAjCisKKyAgICAgICAgcGFja2FnZUxpbmUgPSAnUEFDS0FHRVM9IiR7UE59LWRiZyAnCisgICAgICAgIGZvciBuYW1lIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzKToKKyAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiJHtQTn0tZGlzdHV0aWxzIik6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAiJHtQTn0tZGlzdHV0aWxzIjoKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZUxpbmUgKz0gIiVzLXN0YXRpY2RldiAlcyAiICUgKG5hbWUsIG5hbWUpCisgICAgICAgICAgICBlbGlmIG5hbWUgIT0gJyR7UE59LWRiZyc6CisgICAgICAgICAgICAgICAgcGFja2FnZUxpbmUgKz0gIiVzICIgJSBuYW1lCisgICAgICAgIHBhY2thZ2VMaW5lICs9ICcke1BOfS1tb2R1bGVzIicKKworICAgICAgICBzZWxmLm91dCggcGFja2FnZUxpbmUgKQorICAgICAgICBzZWxmLm91dCggIiIgKQorCisgICAgICAgICMKKyAgICAgICAgIyBnZW5lcmF0ZSBwYWNrYWdlIHZhcmlhYmxlcworICAgICAgICAjCisKKyAgICAgICAgZm9yIG5hbWUsIGRhdGEgaW4gc29ydGVkKHNlbGYucGFja2FnZXMuaXRlcml0ZW1zKCkpOgorICAgICAgICAgICAgZGVzYywgZGVwcywgZmlsZXMgPSBkYXRhCisKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgd3JpdGUgb3V0IHRoZSBkZXNjcmlwdGlvbiwgcmV2aXNpb24gYW5kIGRlcGVuZGVuY2llcworICAgICAgICAgICAgIworICAgICAgICAgICAgc2VsZi5vdXQoICdTVU1NQVJZXyVzPSIlcyInICUgKCBuYW1lLCBkZXNjICkgKQorICAgICAgICAgICAgc2VsZi5vdXQoICdSREVQRU5EU18lcz0iJXMiJyAlICggbmFtZSwgZGVwcyApICkKKworICAgICAgICAgICAgbGluZSA9ICdGSUxFU18lcz0iJyAlIG5hbWUKKworICAgICAgICAgICAgIworICAgICAgICAgICAgIyBjaGVjayB3aGljaCBkaXJlY3RvcmllcyB0byBtYWtlIGluIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5CisgICAgICAgICAgICAjCisKKyAgICAgICAgICAgIGRpcnNldCA9IHt9ICMgaWYgcHl0aG9uIGhhZCBhIHNldC1kYXRhdHlwZSB0aGlzIHdvdWxkIGJlIHN1ZmZpY2llbnQuIGZvciBub3csIHdlJ3JlIHVzaW5nIGEgZGljdCBpbnN0ZWFkLgorICAgICAgICAgICAgZm9yIHRhcmdldCBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBkaXJzZXRbb3MucGF0aC5kaXJuYW1lKCB0YXJnZXQgKV0gPSBUcnVlCisKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgZ2VuZXJhdGUgd2hpY2ggZmlsZXMgdG8gY29weSBmb3IgdGhlIHRhcmdldCAoLWRmUiBiZWNhdXNlIHdob2xlIGRpcmVjdG9yaWVzIGFyZSBhbHNvIGFsbG93ZWQpCisgICAgICAgICAgICAjCisKKyAgICAgICAgICAgIGZvciB0YXJnZXQgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgbGluZSArPSAiJXMgIiAlIHRhcmdldAorCisgICAgICAgICAgICBsaW5lICs9ICciJworICAgICAgICAgICAgc2VsZi5vdXQoIGxpbmUgKQorICAgICAgICAgICAgc2VsZi5vdXQoICIiICkKKworICAgICAgICBzZWxmLm91dCggJ1NVTU1BUllfJHtQTn0tbW9kdWxlcz0iQWxsIFB5dGhvbiBtb2R1bGVzIicgKQorICAgICAgICBsaW5lID0gJ1JERVBFTkRTXyR7UE59LW1vZHVsZXM9IicKKworICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBzb3J0ZWQoc2VsZi5wYWNrYWdlcy5pdGVyaXRlbXMoKSk6CisgICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiBbJyR7UE59LWRldicsICcke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2J106CisgICAgICAgICAgICAgICAgbGluZSArPSAiJXMgIiAlIG5hbWUKKworICAgICAgICBzZWxmLm91dCggIiVzIFwiIiAlIGxpbmUgKQorICAgICAgICBzZWxmLm91dCggJ0FMTE9XX0VNUFRZXyR7UE59LW1vZHVsZXMgPSAiMSInICkKKworICAgIGRlZiBkb0VwaWxvZyggc2VsZiApOgorICAgICAgICBzZWxmLm91dCggIiIiIiIiICkKKyAgICAgICAgc2VsZi5vdXQoICIiICkKKworICAgIGRlZiBtYWtlKCBzZWxmICk6CisgICAgICAgIHNlbGYuZG9Qcm9sb2coKQorICAgICAgICBzZWxmLmRvQm9keSgpCisgICAgICAgIHNlbGYuZG9FcGlsb2coKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorCisgICAgaWYgbGVuKCBzeXMuYXJndiApID4gMToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKHN5cy5hcmd2WzFdKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc3lzLmV4Y19jbGVhcigpCisgICAgICAgIG91dGZpbGUgPSBmaWxlKCBzeXMuYXJndlsxXSwgInciICkKKyAgICBlbHNlOgorICAgICAgICBvdXRmaWxlID0gc3lzLnN0ZG91dAorCisgICAgbSA9IE1ha2VmaWxlTWFrZXIoIG91dGZpbGUgKQorCisgICAgIyBBZGQgcGFja2FnZXMgaGVyZS4gT25seSBzcGVjaWZ5IGRsb3Blbi1zdHlsZSBsaWJyYXJ5IGRlcGVuZGVuY2llcyBoZXJlLCBubyBsZGQtc3R5bGUgZGVwZW5kZW5jaWVzIQorICAgICMgUGFyYW1ldGVyczogcmV2aXNpb24sIG5hbWUsIGRlc2NyaXB0aW9uLCBkZXBlbmRlbmNpZXMsIGZpbGVuYW1lcworICAgICMKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvcmUiLCAiUHl0aG9uIGludGVycHJldGVyIGFuZCBjb3JlIG1vZHVsZXMiLCAiJHtQTn0tbGFuZyAke1BOfS1yZSIsCisgICAgIl9fZnV0dXJlX18uKiBfYWJjb2xsLiogYWJjLiogY29weS4qIGNvcHlfcmVnLiogQ29uZmlnUGFyc2VyLiogIiArCisgICAgImdlbmVyaWNwYXRoLiogZ2V0b3B0LiogbGluZWNhY2hlLiogbmV3LiogIiArCisgICAgIm9zLiogcG9zaXhwYXRoLiogc3RydWN0LiogIiArCisgICAgIndhcm5pbmdzLiogc2l0ZS4qIHN0YXQuKiAiICsKKyAgICAiVXNlckRpY3QuKiBVc2VyTGlzdC4qIFVzZXJTdHJpbmcuKiAiICsKKyAgICAibGliLWR5bmxvYWQvYmluYXNjaWkuc28gbGliLWR5bmxvYWQvX3N0cnVjdC5zbyBsaWItZHlubG9hZC90aW1lLnNvICIgKworICAgICJsaWItZHlubG9hZC94cmVhZGxpbmVzLnNvIHR5cGVzLiogcGxhdGZvcm0uKiAke2JpbmRpcn0vcHl0aG9uKiAiICArCisgICAgIl93ZWFrcmVmc2V0Liogc3lzY29uZmlnLiogX3N5c2NvbmZpZ2RhdGEuKiBjb25maWcvTWFrZWZpbGUgIiArCisgICAgIiR7aW5jbHVkZWRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9weWNvbmZpZyouaCAiICsKKyAgICAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vc2l0ZWN1c3RvbWl6ZS5weSAiKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGV2IiwgIlB5dGhvbiBkZXZlbG9wbWVudCBwYWNrYWdlIiwgIiR7UE59LWNvcmUiLAorICAgICIke2luY2x1ZGVkaXJ9ICIgKworICAgICIke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSAiICsKKyAgICAiJHtsaWJkaXJ9LyoubGEgIiArCisgICAgIiR7bGliZGlyfS8qLmEgIiArCisgICAgIiR7bGliZGlyfS8qLm8gIiArCisgICAgIiR7bGliZGlyfS9wa2djb25maWcgIiArCisgICAgIiR7YmFzZV9saWJkaXJ9LyouYSAiICsKKyAgICAiJHtiYXNlX2xpYmRpcn0vKi5vICIgKworICAgICIke2RhdGFkaXJ9L2FjbG9jYWwgIiArCisgICAgIiR7ZGF0YWRpcn0vcGtnY29uZmlnICIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tMnRvMyIsICJQeXRob24gYXV0b21hdGVkIFB5dGhvbiAyIHRvIDMgY29kZSB0cmFuc2xhdG9yIiwgIiR7UE59LWNvcmUiLAorICAgICIke2JpbmRpcn0vMnRvMyBsaWIydG8zIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taWRsZSIsICJQeXRob24gSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCIsICIke1BOfS1jb3JlICR7UE59LXRraW50ZXIiLAorICAgICIke2JpbmRpcn0vaWRsZSBpZGxlbGliIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcHlkb2MiLCAiUHl0aG9uIGludGVyYWN0aXZlIGhlbHAgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWxhbmcgJHtQTn0tc3RyaW5nb2xkICR7UE59LXJlIiwKKyAgICAiJHtiaW5kaXJ9L3B5ZG9jIHB5ZG9jLiogcHlkb2NfZGF0YSIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc210cGQiLCAiUHl0aG9uIFNpbXBsZSBNYWlsIFRyYW5zcG9ydCBEYWVtb24iLCAiJHtQTn0tY29yZSAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tZW1haWwgJHtQTn0tbWltZSIsCisgICAgIiR7YmluZGlyfS9zbXRwZC4qIHNtdHBkLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWF1ZGlvIiwgIlB5dGhvbiBBdWRpbyBIYW5kbGluZyIsICIke1BOfS1jb3JlIiwKKyAgICAid2F2ZS4qIGNodW5rLiogc25kaGRyLiogbGliLWR5bmxvYWQvb3NzYXVkaW9kZXYuc28gbGliLWR5bmxvYWQvYXVkaW9vcC5zbyBhdWRpb2Rldi4qIHN1bmF1ZGlvLiogc3VuYXUuKiB0b2FpZmYuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tYnNkZGIiLCAiUHl0aG9uIGJpbmRpbmdzIGZvciB0aGUgQmVya2VsZXkgRGF0YWJhc2UiLCAiJHtQTn0tY29yZSIsCisgICAgImJzZGRiIGxpYi1keW5sb2FkL19ic2RkYi5zbyIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvZGVjcyIsICJQeXRob24gY29kZWNzLCBlbmNvZGluZ3MgJiBpMThuIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1sYW5nIiwKKyAgICAiY29kZWNzLiogZW5jb2RpbmdzIGdldHRleHQuKiBsb2NhbGUuKiBsaWItZHlubG9hZC9fbG9jYWxlLnNvIGxpYi1keW5sb2FkL19jb2RlY3MqIGxpYi1keW5sb2FkL19tdWx0aWJ5dGVjb2RlYy5zbyBsaWItZHlubG9hZC91bmljb2RlZGF0YS5zbyBzdHJpbmdwcmVwLiogeGRybGliLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvbXBpbGUiLCAiUHl0aG9uIGJ5dGVjb2RlIGNvbXBpbGF0aW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgInB5X2NvbXBpbGUuKiBjb21waWxlYWxsLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvbXBpbGVyIiwgIlB5dGhvbiBjb21waWxlciBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJjb21waWxlciIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvbXByZXNzaW9uIiwgIlB5dGhvbiBoaWdoLWxldmVsIGNvbXByZXNzaW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS16bGliIiwKKyAgICAiZ3ppcC4qIHppcGZpbGUuKiB0YXJmaWxlLiogbGliLWR5bmxvYWQvYnoyLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jcnlwdCIsICJQeXRob24gYmFzaWMgY3J5cHRvZ3JhcGhpYyBhbmQgaGFzaGluZyBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJoYXNobGliLiogbWQ1Liogc2hhLiogbGliLWR5bmxvYWQvY3J5cHQuc28gbGliLWR5bmxvYWQvX2hhc2hsaWIuc28gbGliLWR5bmxvYWQvX3NoYTI1Ni5zbyBsaWItZHlubG9hZC9fc2hhNTEyLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS10ZXh0dXRpbHMiLCAiUHl0aG9uIG9wdGlvbiBwYXJzaW5nLCB0ZXh0IHdyYXBwaW5nIGFuZCBDU1Ygc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LXN0cmluZ29sZCIsCisgICAgImxpYi1keW5sb2FkL19jc3Yuc28gY3N2Liogb3B0cGFyc2UuKiB0ZXh0d3JhcC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jdXJzZXMiLCAiUHl0aG9uIGN1cnNlcyBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJjdXJzZXMgbGliLWR5bmxvYWQvX2N1cnNlcy5zbyBsaWItZHlubG9hZC9fY3Vyc2VzX3BhbmVsLnNvIiApICMgZGlyZWN0b3J5ICsgbG93IGxldmVsIG1vZHVsZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY3R5cGVzIiwgIlB5dGhvbiBDIHR5cGVzIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImN0eXBlcyBsaWItZHlubG9hZC9fY3R5cGVzLnNvIGxpYi1keW5sb2FkL19jdHlwZXNfdGVzdC5zbyIgKSAjIGRpcmVjdG9yeSArIGxvdyBsZXZlbCBtb2R1bGUKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRhdGV0aW1lIiwgIlB5dGhvbiBjYWxlbmRhciBhbmQgdGltZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tY29kZWNzIiwKKyAgICAiX3N0cnB0aW1lLiogY2FsZW5kYXIuKiBsaWItZHlubG9hZC9kYXRldGltZS5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGIiLCAiUHl0aG9uIGZpbGUtYmFzZWQgZGF0YWJhc2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAiYW55ZGJtLiogZHVtYmRibS4qIHdoaWNoZGIuKiAiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRlYnVnZ2VyIiwgIlB5dGhvbiBkZWJ1Z2dlciIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcmUgJHtQTn0tc3RyaW5nb2xkICR7UE59LXNoZWxsICR7UE59LXBwcmludCIsCisgICAgImJkYi4qIHBkYi4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kaWZmbGliIiwgIlB5dGhvbiBoZWxwZXJzIGZvciBjb21wdXRpbmcgZGVsdGFzIGJldHdlZW4gb2JqZWN0cyIsICIke1BOfS1sYW5nICR7UE59LXJlIiwKKyAgICAiZGlmZmxpYi4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2IiwgIlB5dGhvbiBkaXN0cmlidXRpb24gdXRpbGl0aWVzIChzdGF0aWMgbGlicmFyaWVzKSIsICIke1BOfS1kaXN0dXRpbHMiLAorICAgICJjb25maWcvbGliKi5hIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGlzdHV0aWxzIiwgIlB5dGhvbiBEaXN0cmlidXRpb24gVXRpbGl0aWVzIiwgIiR7UE59LWNvcmUiLAorICAgICJjb25maWcgZGlzdHV0aWxzIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZG9jdGVzdCIsICJQeXRob24gZnJhbWV3b3JrIGZvciBydW5uaW5nIGV4YW1wbGVzIGluIGRvY3N0cmluZ3MiLCAiJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LWlvICR7UE59LXJlICR7UE59LXVuaXR0ZXN0ICR7UE59LWRlYnVnZ2VyICR7UE59LWRpZmZsaWIiLAorICAgICJkb2N0ZXN0LioiICkKKworICAgICMgRklYTUUgY29uc2lkZXIgYWRkaW5nIHRvIHNvbWUgaGlnaGVyIGxldmVsIHBhY2thZ2UKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1lbGVtZW50dHJlZSIsICJQeXRob24gZWxlbWVudHJlZSIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvX2VsZW1lbnR0cmVlLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1lbWFpbCIsICJQeXRob24gZW1haWwgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LW1pbWUgJHtQTn0tYXVkaW8gJHtQTn0taW1hZ2UgJHtQTn0tbmV0Y2xpZW50IiwKKyAgICAiaW1hcGxpYi4qIGVtYWlsIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZmNudGwiLCAiUHl0aG9uJ3MgZmNudGwgaW50ZXJmYWNlIiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9mY250bC5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taG90c2hvdCIsICJQeXRob24gaG90c2hvdCBwZXJmb3JtYW5jZSBwcm9maWxlciIsICIke1BOfS1jb3JlIiwKKyAgICAiaG90c2hvdCBsaWItZHlubG9hZC9faG90c2hvdC5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taHRtbCIsICJQeXRob24gSFRNTCBwcm9jZXNzaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImZvcm1hdHRlci4qIGh0bWxlbnRpdHlkZWZzLiogaHRtbGxpYi4qIG1hcmt1cGJhc2UuKiBzZ21sbGliLiogSFRNTFBhcnNlci4qICIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taW1wb3J0bGliIiwgIlB5dGhvbiBpbXBvcnQgaW1wbGVtZW50YXRpb24gbGlicmFyeSIsICIke1BOfS1jb3JlIiwKKyAgICAiaW1wb3J0bGliIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1nZGJtIiwgIlB5dGhvbiBHTlUgZGF0YWJhc2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvZ2RibS5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taW1hZ2UiLCAiUHl0aG9uIGdyYXBoaWNhbCBpbWFnZSBoYW5kbGluZyIsICIke1BOfS1jb3JlIiwKKyAgICAiY29sb3JzeXMuKiBpbWdoZHIuKiBsaWItZHlubG9hZC9pbWFnZW9wLnNvIGxpYi1keW5sb2FkL3JnYmltZy5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taW8iLCAiUHl0aG9uIGxvdy1sZXZlbCBJL08iLCAiJHtQTn0tY29yZSAke1BOfS1tYXRoICR7UE59LXRleHR1dGlscyAke1BOfS1uZXRjbGllbnQgJHtQTn0tY29udGV4dGxpYiIsCisgICAgImxpYi1keW5sb2FkL19zb2NrZXQuc28gbGliLWR5bmxvYWQvX2lvLnNvIGxpYi1keW5sb2FkL19zc2wuc28gbGliLWR5bmxvYWQvc2VsZWN0LnNvIGxpYi1keW5sb2FkL3Rlcm1pb3Muc28gbGliLWR5bmxvYWQvY1N0cmluZ0lPLnNvICIgKworICAgICJwaXBlcy4qIHNvY2tldC4qIHNzbC4qIHRlbXBmaWxlLiogU3RyaW5nSU8uKiBpby4qIF9weWlvLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWpzb24iLCAiUHl0aG9uIEpTT04gc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LW1hdGggJHtQTn0tcmUgJHtQTn0tY29kZWNzIiwKKyAgICAianNvbiBsaWItZHlubG9hZC9fanNvbi5zbyIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWxhbmciLCAiUHl0aG9uIGxvdy1sZXZlbCBsYW5ndWFnZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9fYmlzZWN0LnNvIGxpYi1keW5sb2FkL19jb2xsZWN0aW9ucy5zbyBsaWItZHlubG9hZC9faGVhcHEuc28gbGliLWR5bmxvYWQvX3dlYWtyZWYuc28gbGliLWR5bmxvYWQvX2Z1bmN0b29scy5zbyAiICsKKyAgICAibGliLWR5bmxvYWQvYXJyYXkuc28gbGliLWR5bmxvYWQvaXRlcnRvb2xzLnNvIGxpYi1keW5sb2FkL29wZXJhdG9yLnNvIGxpYi1keW5sb2FkL3BhcnNlci5zbyAiICsKKyAgICAiYXRleGl0LiogYmlzZWN0LiogY29kZS4qIGNvZGVvcC4qIGNvbGxlY3Rpb25zLiogZGlzLiogZnVuY3Rvb2xzLiogaGVhcHEuKiBpbnNwZWN0Lioga2V5d29yZC4qIG9wY29kZS4qIHN5bWJvbC4qIHJlcHIuKiB0b2tlbi4qICIgKworICAgICJ0b2tlbml6ZS4qIHRyYWNlYmFjay4qIHdlYWtyZWYuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbG9nZ2luZyIsICJQeXRob24gbG9nZ2luZyBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1waWNrbGUgJHtQTn0tc3RyaW5nb2xkIiwKKyAgICAibG9nZ2luZyIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW1haWxib3giLCAiUHl0aG9uIG1haWxib3ggZm9ybWF0IHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1taW1lIiwKKyAgICAibWFpbGJveC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1tYXRoIiwgIlB5dGhvbiBtYXRoIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1jcnlwdCIsCisgICAgImxpYi1keW5sb2FkL2NtYXRoLnNvIGxpYi1keW5sb2FkL21hdGguc28gbGliLWR5bmxvYWQvX3JhbmRvbS5zbyByYW5kb20uKiBzZXRzLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW1pbWUiLCAiUHl0aG9uIE1JTUUgaGFuZGxpbmcgQVBJcyIsICIke1BOfS1jb3JlICR7UE59LWlvIiwKKyAgICAibWltZXRvb2xzLiogdXUuKiBxdW9wcmkuKiByZmM4MjIuKiBNaW1lV3JpdGVyLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW1tYXAiLCAiUHl0aG9uIG1lbW9yeS1tYXBwZWQgZmlsZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8iLAorICAgICJsaWItZHlubG9hZC9tbWFwLnNvICIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbXVsdGlwcm9jZXNzaW5nIiwgIlB5dGhvbiBtdWx0aXByb2Nlc3Npbmcgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcGlja2xlICR7UE59LXRocmVhZGluZyAke1BOfS1jdHlwZXMgJHtQTn0tbW1hcCIsCisgICAgImxpYi1keW5sb2FkL19tdWx0aXByb2Nlc3Npbmcuc28gbXVsdGlwcm9jZXNzaW5nIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbmV0Y2xpZW50IiwgIlB5dGhvbiBJbnRlcm5ldCBQcm90b2NvbCBjbGllbnRzIiwgIiR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tZGF0ZXRpbWUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1pbWUiLAorICAgICIqQ29va2llKi4qICIgKworICAgICJiYXNlNjQuKiBjb29raWVsaWIuKiBmdHBsaWIuKiBnb3BoZXJsaWIuKiBobWFjLiogaHR0cGxpYi4qIG1pbWV0eXBlcy4qIG5udHBsaWIuKiBwb3BsaWIuKiBzbXRwbGliLiogdGVsbmV0bGliLiogdXJsbGliLiogdXJsbGliMi4qIHVybHBhcnNlLiogdXVpZC4qIHJmYzgyMi4qIG1pbWV0b29scy4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1uZXRzZXJ2ZXIiLCAiUHl0aG9uIEludGVybmV0IFByb3RvY29sIHNlcnZlcnMiLCAiJHtQTn0tY29yZSAke1BOfS1uZXRjbGllbnQgJHtQTn0tc2hlbGwgJHtQTn0tdGhyZWFkaW5nIiwKKyAgICAiY2dpLiogKkhUVFBTZXJ2ZXIuKiBTb2NrZXRTZXJ2ZXIuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbnVtYmVycyIsICJQeXRob24gbnVtYmVyIEFQSXMiLCAiJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LXJlIiwKKyAgICAiZGVjaW1hbC4qIGZyYWN0aW9ucy4qIG51bWJlcnMuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcGlja2xlIiwgIlB5dGhvbiBzZXJpYWxpc2F0aW9uL3BlcnNpc3RlbmNlIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1jb2RlY3MgJHtQTn0taW8gJHtQTn0tcmUiLAorICAgICJwaWNrbGUuKiBzaGVsdmUuKiBsaWItZHlubG9hZC9jUGlja2xlLnNvIHBpY2tsZXRvb2xzLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXBrZ3V0aWwiLCAiUHl0aG9uIHBhY2thZ2UgZXh0ZW5zaW9uIHV0aWxpdHkgc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAicGtndXRpbC4qIikKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXBwcmludCIsICJQeXRob24gcHJldHR5LXByaW50IHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyIsCisgICAgInBwcmludC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1wcm9maWxlIiwgIlB5dGhvbiBiYXNpYyBwZXJmb3JtYW5jZSBwcm9maWxpbmcgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LXRleHR1dGlscyIsCisgICAgInByb2ZpbGUuKiBwc3RhdHMuKiBjUHJvZmlsZS4qIGxpYi1keW5sb2FkL19sc3Byb2Yuc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXJlIiwgIlB5dGhvbiBSZWd1bGFyIEV4cHJlc3Npb24gQVBJcyIsICIke1BOfS1jb3JlIiwKKyAgICAicmUuKiBzcmUuKiBzcmVfY29tcGlsZS4qIHNyZV9jb25zdGFudHMqIHNyZV9wYXJzZS4qIiApICMgX3NyZSBpcyBidWlsdGluCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1yZWFkbGluZSIsICJQeXRob24gcmVhZGxpbmUgc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvcmVhZGxpbmUuc28gcmxjb21wbGV0ZXIuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcmVzb3VyY2UiLCAiUHl0aG9uIHJlc291cmNlIGNvbnRyb2wgaW50ZXJmYWNlIiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9yZXNvdXJjZS5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc2hlbGwiLCAiUHl0aG9uIHNoZWxsLWxpa2UgZnVuY3Rpb25hbGl0eSIsICIke1BOfS1jb3JlICR7UE59LXJlIiwKKyAgICAiY21kLiogY29tbWFuZHMuKiBkaXJjYWNoZS4qIGZubWF0Y2guKiBnbG9iLiogcG9wZW4yLiogc2hsZXguKiBzaHV0aWwuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcm9ib3RwYXJzZXIiLCAiUHl0aG9uIHJvYm90cy50eHQgcGFyc2VyIiwgIiR7UE59LWNvcmUgJHtQTn0tbmV0Y2xpZW50IiwKKyAgICAicm9ib3RwYXJzZXIuKiIpCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zdWJwcm9jZXNzIiwgIlB5dGhvbiBzdWJwcm9jZXNzIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1mY250bCAke1BOfS1waWNrbGUiLAorICAgICJzdWJwcm9jZXNzLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXNxbGl0ZTMiLCAiUHl0aG9uIFNxbGl0ZTMgZGF0YWJhc2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWRhdGV0aW1lICR7UE59LWxhbmcgJHtQTn0tY3J5cHQgJHtQTn0taW8gJHtQTn0tdGhyZWFkaW5nICR7UE59LXpsaWIiLAorICAgICJsaWItZHlubG9hZC9fc3FsaXRlMy5zbyBzcWxpdGUzL2RiYXBpMi4qIHNxbGl0ZTMvX19pbml0X18uKiBzcWxpdGUzL2R1bXAuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc3FsaXRlMy10ZXN0cyIsICJQeXRob24gU3FsaXRlMyBkYXRhYmFzZSBzdXBwb3J0IHRlc3RzIiwgIiR7UE59LWNvcmUgJHtQTn0tc3FsaXRlMyIsCisgICAgInNxbGl0ZTMvdGVzdCIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc3RyaW5nb2xkIiwgIlB5dGhvbiBzdHJpbmcgQVBJcyBbZGVwcmVjYXRlZF0iLCAiJHtQTn0tY29yZSAke1BOfS1yZSIsCisgICAgImxpYi1keW5sb2FkL3N0cm9wLnNvIHN0cmluZy4qIHN0cmluZ29sZC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zeXNsb2ciLCAiUHl0aG9uIHN5c2xvZyBpbnRlcmZhY2UiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL3N5c2xvZy5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdGVybWluYWwiLCAiUHl0aG9uIHRlcm1pbmFsIGNvbnRyb2xsaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyIsCisgICAgInB0eS4qIHR0eS4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS10ZXN0cyIsICJQeXRob24gdGVzdHMiLCAiJHtQTn0tY29yZSIsCisgICAgInRlc3QiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS10aHJlYWRpbmciLCAiUHl0aG9uIHRocmVhZGluZyAmIHN5bmNocm9uaXphdGlvbiBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tbGFuZyIsCisgICAgIl90aHJlYWRpbmdfbG9jYWwuKiBkdW1teV90aHJlYWQuKiBkdW1teV90aHJlYWRpbmcuKiBtdXRleC4qIHRocmVhZGluZy4qIFF1ZXVlLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXRraW50ZXIiLCAiUHl0aG9uIFRjbC9UayBiaW5kaW5ncyIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvX3RraW50ZXIuc28gbGliLXRrIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdW5pdHRlc3QiLCAiUHl0aG9uIHVuaXQgdGVzdGluZyBmcmFtZXdvcmsiLCAiJHtQTn0tY29yZSAke1BOfS1zdHJpbmdvbGQgJHtQTn0tbGFuZyAke1BOfS1pbyAke1BOfS1kaWZmbGliICR7UE59LXBwcmludCAke1BOfS1zaGVsbCIsCisgICAgInVuaXR0ZXN0LyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdW5peGFkbWluIiwgIlB5dGhvbiBVbml4IGFkbWluaXN0cmF0aW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL25pcy5zbyBsaWItZHlubG9hZC9ncnAuc28gbGliLWR5bmxvYWQvcHdkLnNvIGdldHBhc3MuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0teG1sIiwgIlB5dGhvbiBiYXNpYyBYTUwgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWVsZW1lbnR0cmVlICR7UE59LXJlIiwKKyAgICAibGliLWR5bmxvYWQvcHlleHBhdC5zbyB4bWwgeG1sbGliLioiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS14bWxycGMiLCAiUHl0aG9uIFhNTC1SUEMgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LXhtbCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbGFuZyIsCisgICAgInhtbHJwY2xpYi4qIFNpbXBsZVhNTFJQQ1NlcnZlci4qIERvY1hNTFJQQ1NlcnZlci4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS16bGliIiwgIlB5dGhvbiB6bGliIGNvbXByZXNzaW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL3psaWIuc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW1haWxib3giLCAiUHl0aG9uIG1haWxib3ggZm9ybWF0IHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1taW1lIiwKKyAgICAibWFpbGJveC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1hcmdwYXJzZSIsICJQeXRob24gY29tbWFuZCBsaW5lIGFyZ3VtZW50IHBhcnNlciIsICIke1BOfS1jb3JlICR7UE59LWNvZGVjcyAke1BOfS10ZXh0dXRpbHMiLAorICAgICJhcmdwYXJzZS4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jb250ZXh0bGliIiwgIlB5dGhvbiB1dGlsaXRpZXMgZm9yIHdpdGgtc3RhdGVtZW50IiArCisgICAgImNvbnRleHRzLiIsICIke1BOfS1jb3JlIiwKKyAgICAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29udGV4dGxpYi4qIiApCisKKyAgICBtLm1ha2UoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTMuNC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0zLjQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDZlZWNkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0zLjQucHkKQEAgLTAsMCArMSwzODggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIGdlbmVyYXRlIFB5dGhvbiBNYW5pZmVzdCBmb3IgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyMgKEMpIDIwMDItMjAxMCBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtbGF1ZXJAdmFuaWxsZS1tZWRpYS5kZT4KKyMgKEMpIDIwMDcgSmVyZW15IExhaW5lCisjIGxpY2Vuc2VkIHVuZGVyIE1JVCwgc2VlIENPUFlJTkcuTUlUCisjCisjIEp1bmUgMjIsIDIwMTEgLS0gTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorIyAgKiBVcGRhdGVkIHRvIG5vIGxvbmdlciBnZW5lcmF0ZSBzcGVjaWFsIC1kYmcgcGFja2FnZSwgaW5zdGVhZCB1c2UgdGhlCisjICAgIHNpbmdsZSBzeXN0ZW0gLWRiZworIyAgKiBVcGRhdGUgdmVyc2lvbiB3aXRoICIuMSIgdG8gaW5kaWNhdGUgdGhpcyBjaGFuZ2UKKyMKKyMgMjAxNCBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyBBZGRlZCBweXRob24zIHN1cHBvcnQKKyMKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworVkVSU0lPTiA9ICIzLjQuMiIKKworX19hdXRob3JfXyA9ICJNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtbGF1ZXJAdmFuaWxsZS1tZWRpYS5kZT4iCitfX3ZlcnNpb25fXyA9ICIyMDE0MDEzMSIKKworY2xhc3MgTWFrZWZpbGVNYWtlcjoKKworICAgIGRlZiBfX2luaXRfXyggc2VsZiwgb3V0ZmlsZSApOgorICAgICAgICAiIiJpbml0aWFsaXplIiIiCisgICAgICAgIHNlbGYucGFja2FnZXMgPSB7fQorICAgICAgICBzZWxmLnRhcmdldFByZWZpeCA9ICIke2xpYmRpcn0vcHl0aG9uJXMvIiAlIFZFUlNJT05bOjNdCisgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0ZmlsZQorICAgICAgICBzZWxmLm91dCggIiIiCisjIFdBUk5JTkc6IFRoaXMgZmlsZSBpcyBBVVRPIEdFTkVSQVRFRDogTWFudWFsIGVkaXRzIHdpbGwgYmUgbG9zdCBuZXh0IHRpbWUgSSByZWdlbmVyYXRlIHRoZSBmaWxlLgorIyBHZW5lcmF0b3I6ICclcycgVmVyc2lvbiAlcyAoQykgMjAwMi0yMDEwIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPgorIyBWaXNpdCB0aGUgUHl0aG9uIGZvciBFbWJlZGRlZCBTeXN0ZW1zIFNpdGUgPT4gaHR0cDovL3d3dy5WYW5pbGxlLmRlL3Byb2plY3RzL3B5dGhvbi5zcHkKKyIiIiAlICggc3lzLmFyZ3ZbMF0sIF9fdmVyc2lvbl9fICkgKQorCisgICAgIworICAgICMgaGVscGVyIGZ1bmN0aW9ucworICAgICMKKworICAgIGRlZiBvdXQoIHNlbGYsIGRhdGEgKToKKyAgICAgICAgIiIicHJpbnQgYSBsaW5lIHRvIHRoZSBvdXRwdXQgZmlsZSIiIgorICAgICAgICBzZWxmLm91dHB1dC53cml0ZSggIiVzXG4iICUgZGF0YSApCisKKyAgICBkZWYgc2V0UHJlZml4KCBzZWxmLCB0YXJnZXRQcmVmaXggKToKKyAgICAgICAgIiIic2V0IGEgZmlsZSBwcmVmaXggZm9yIGFkZFBhY2thZ2UgZmlsZXMiIiIKKyAgICAgICAgc2VsZi50YXJnZXRQcmVmaXggPSB0YXJnZXRQcmVmaXgKKworICAgIGRlZiBkb1Byb2xvZyggc2VsZiApOgorICAgICAgICBzZWxmLm91dCggIiIiICIiIiApCisgICAgICAgIHNlbGYub3V0KCAiIiApCisKKyAgICBkZWYgYWRkUGFja2FnZSggc2VsZiwgbmFtZSwgZGVzY3JpcHRpb24sIGRlcGVuZGVuY2llcywgZmlsZW5hbWVzICk6CisgICAgICAgICIiImFkZCBhIHBhY2thZ2UgdG8gdGhlIE1ha2VmaWxlIiIiCisgICAgICAgIGlmIHR5cGUoIGZpbGVuYW1lcyApID09IHR5cGUoICIiICk6CisgICAgICAgICAgICBmaWxlbmFtZXMgPSBmaWxlbmFtZXMuc3BsaXQoKQorICAgICAgICBmdWxsRmlsZW5hbWVzID0gW10KKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lWzBdICE9ICIkIjoKKyAgICAgICAgICAgICAgICBmdWxsRmlsZW5hbWVzLmFwcGVuZCggIiVzJXMiICUgKCBzZWxmLnRhcmdldFByZWZpeCwgZmlsZW5hbWUgKSApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZ1bGxGaWxlbmFtZXMuYXBwZW5kKCBmaWxlbmFtZSApCisgICAgICAgIHNlbGYucGFja2FnZXNbbmFtZV0gPSBkZXNjcmlwdGlvbiwgZGVwZW5kZW5jaWVzLCBmdWxsRmlsZW5hbWVzCisKKyAgICBkZWYgZG9Cb2R5KCBzZWxmICk6CisgICAgICAgICIiImdlbmVyYXRlIGJvZHkgb2YgTWFrZWZpbGUiIiIKKworICAgICAgICBnbG9iYWwgVkVSU0lPTgorCisgICAgICAgICMKKyAgICAgICAgIyBnZW5lcmF0ZSBwcm92aWRlcyBsaW5lCisgICAgICAgICMKKworICAgICAgICBwcm92aWRlTGluZSA9ICdQUk9WSURFUys9IicKKyAgICAgICAgZm9yIG5hbWUgaW4gc29ydGVkKHNlbGYucGFja2FnZXMpOgorICAgICAgICAgICAgcHJvdmlkZUxpbmUgKz0gIiVzICIgJSBuYW1lCisgICAgICAgIHByb3ZpZGVMaW5lICs9ICciJworCisgICAgICAgIHNlbGYub3V0KCBwcm92aWRlTGluZSApCisgICAgICAgIHNlbGYub3V0KCAiIiApCisKKyAgICAgICAgIworICAgICAgICAjIGdlbmVyYXRlIHBhY2thZ2UgbGluZQorICAgICAgICAjCisKKyAgICAgICAgcGFja2FnZUxpbmUgPSAnUEFDS0FHRVM9IiR7UE59LWRiZyAnCisgICAgICAgIGZvciBuYW1lIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzKToKKyAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiJHtQTn0tZGlzdHV0aWxzIik6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAiJHtQTn0tZGlzdHV0aWxzIjoKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZUxpbmUgKz0gIiVzLXN0YXRpY2RldiAlcyAiICUgKG5hbWUsIG5hbWUpCisgICAgICAgICAgICBlbGlmIG5hbWUgIT0gJyR7UE59LWRiZyc6CisgICAgICAgICAgICAgICAgcGFja2FnZUxpbmUgKz0gIiVzICIgJSBuYW1lCisgICAgICAgIHBhY2thZ2VMaW5lICs9ICcke1BOfS1tb2R1bGVzIicKKworICAgICAgICBzZWxmLm91dCggcGFja2FnZUxpbmUgKQorICAgICAgICBzZWxmLm91dCggIiIgKQorCisgICAgICAgICMKKyAgICAgICAgIyBnZW5lcmF0ZSBwYWNrYWdlIHZhcmlhYmxlcworICAgICAgICAjCisKKyAgICAgICAgZm9yIG5hbWUsIGRhdGEgaW4gc29ydGVkKHNlbGYucGFja2FnZXMuaXRlcml0ZW1zKCkpOgorICAgICAgICAgICAgZGVzYywgZGVwcywgZmlsZXMgPSBkYXRhCisKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgd3JpdGUgb3V0IHRoZSBkZXNjcmlwdGlvbiwgcmV2aXNpb24gYW5kIGRlcGVuZGVuY2llcworICAgICAgICAgICAgIworICAgICAgICAgICAgc2VsZi5vdXQoICdTVU1NQVJZXyVzPSIlcyInICUgKCBuYW1lLCBkZXNjICkgKQorICAgICAgICAgICAgc2VsZi5vdXQoICdSREVQRU5EU18lcz0iJXMiJyAlICggbmFtZSwgZGVwcyApICkKKworICAgICAgICAgICAgbGluZSA9ICdGSUxFU18lcz0iJyAlIG5hbWUKKworICAgICAgICAgICAgIworICAgICAgICAgICAgIyBjaGVjayB3aGljaCBkaXJlY3RvcmllcyB0byBtYWtlIGluIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5CisgICAgICAgICAgICAjCisKKyAgICAgICAgICAgIGRpcnNldCA9IHt9ICMgaWYgcHl0aG9uIGhhZCBhIHNldC1kYXRhdHlwZSB0aGlzIHdvdWxkIGJlIHN1ZmZpY2llbnQuIGZvciBub3csIHdlJ3JlIHVzaW5nIGEgZGljdCBpbnN0ZWFkLgorICAgICAgICAgICAgZm9yIHRhcmdldCBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBkaXJzZXRbb3MucGF0aC5kaXJuYW1lKCB0YXJnZXQgKV0gPSBUcnVlCisKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgZ2VuZXJhdGUgd2hpY2ggZmlsZXMgdG8gY29weSBmb3IgdGhlIHRhcmdldCAoLWRmUiBiZWNhdXNlIHdob2xlIGRpcmVjdG9yaWVzIGFyZSBhbHNvIGFsbG93ZWQpCisgICAgICAgICAgICAjCisKKyAgICAgICAgICAgIGZvciB0YXJnZXQgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgbGluZSArPSAiJXMgIiAlIHRhcmdldAorCisgICAgICAgICAgICBsaW5lICs9ICciJworICAgICAgICAgICAgc2VsZi5vdXQoIGxpbmUgKQorICAgICAgICAgICAgc2VsZi5vdXQoICIiICkKKworICAgICAgICBzZWxmLm91dCggJ1NVTU1BUllfJHtQTn0tbW9kdWxlcz0iQWxsIFB5dGhvbiBtb2R1bGVzIicgKQorICAgICAgICBsaW5lID0gJ1JERVBFTkRTXyR7UE59LW1vZHVsZXM9IicKKworICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBzb3J0ZWQoc2VsZi5wYWNrYWdlcy5pdGVyaXRlbXMoKSk6CisgICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiBbJyR7UE59LWRldicsICcke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2J106CisgICAgICAgICAgICAgICAgbGluZSArPSAiJXMgIiAlIG5hbWUKKworICAgICAgICBzZWxmLm91dCggIiVzIFwiIiAlIGxpbmUgKQorICAgICAgICBzZWxmLm91dCggJ0FMTE9XX0VNUFRZXyR7UE59LW1vZHVsZXMgPSAiMSInICkKKworICAgIGRlZiBkb0VwaWxvZyggc2VsZiApOgorICAgICAgICBzZWxmLm91dCggIiIiIiIiICkKKyAgICAgICAgc2VsZi5vdXQoICIiICkKKworICAgIGRlZiBtYWtlKCBzZWxmICk6CisgICAgICAgIHNlbGYuZG9Qcm9sb2coKQorICAgICAgICBzZWxmLmRvQm9keSgpCisgICAgICAgIHNlbGYuZG9FcGlsb2coKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorCisgICAgaWYgbGVuKCBzeXMuYXJndiApID4gMToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKHN5cy5hcmd2WzFdKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc3lzLmV4Y19jbGVhcigpCisgICAgICAgIG91dGZpbGUgPSBmaWxlKCBzeXMuYXJndlsxXSwgInciICkKKyAgICBlbHNlOgorICAgICAgICBvdXRmaWxlID0gc3lzLnN0ZG91dAorCisgICAgbSA9IE1ha2VmaWxlTWFrZXIoIG91dGZpbGUgKQorCisgICAgIyBBZGQgcGFja2FnZXMgaGVyZS4gT25seSBzcGVjaWZ5IGRsb3Blbi1zdHlsZSBsaWJyYXJ5IGRlcGVuZGVuY2llcyBoZXJlLCBubyBsZGQtc3R5bGUgZGVwZW5kZW5jaWVzIQorICAgICMgUGFyYW1ldGVyczogcmV2aXNpb24sIG5hbWUsIGRlc2NyaXB0aW9uLCBkZXBlbmRlbmNpZXMsIGZpbGVuYW1lcworICAgICMKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvcmUiLCAiUHl0aG9uIGludGVycHJldGVyIGFuZCBjb3JlIG1vZHVsZXMiLCAiJHtQTn0tbGFuZyAke1BOfS1yZSAke1BOfS1yZXBybGliICR7UE59LWNvZGVjcyAke1BOfS1pbyAke1BOfS1tYXRoIiwKKyAgICAiX19mdXR1cmVfXy4qIF9hYmNvbGwuKiBhYmMuKiBjb3B5LiogY29weXJlZy4qIENvbmZpZ1BhcnNlci4qICIgKworICAgICJnZW5lcmljcGF0aC4qIGdldG9wdC4qIGxpbmVjYWNoZS4qIG5ldy4qICIgKworICAgICJvcy4qIHBvc2l4cGF0aC4qIHN0cnVjdC4qICIgKworICAgICJ3YXJuaW5ncy4qIHNpdGUuKiBzdGF0LiogIiArCisgICAgIlVzZXJEaWN0LiogVXNlckxpc3QuKiBVc2VyU3RyaW5nLiogIiArCisgICAgImxpYi1keW5sb2FkL2JpbmFzY2lpLiouc28gbGliLWR5bmxvYWQvX3N0cnVjdC4qLnNvIGxpYi1keW5sb2FkL3RpbWUuKi5zbyAiICsKKyAgICAibGliLWR5bmxvYWQveHJlYWRsaW5lcy4qLnNvIHR5cGVzLiogcGxhdGZvcm0uKiAke2JpbmRpcn0vcHl0aG9uKiAiICArIAorICAgICJfd2Vha3JlZnNldC4qIHN5c2NvbmZpZy4qIF9zeXNjb25maWdkYXRhLiogY29uZmlnL01ha2VmaWxlICIgKworICAgICIke2luY2x1ZGVkaXJ9L3B5dGhvbiR7UFlUSE9OX0JJTkFCSX0vcHljb25maWcqLmggIiArCisgICAgIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbGxlY3Rpb25zICIgKworICAgICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9fY29sbGVjdGlvbnNfYWJjLiogIiArCisgICAgIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L19zaXRlYnVpbHRpbnMuKiAiICsKKyAgICAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vc2l0ZWN1c3RvbWl6ZS5weSAiKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGV2IiwgIlB5dGhvbiBkZXZlbG9wbWVudCBwYWNrYWdlIiwgIiR7UE59LWNvcmUiLAorICAgICIke2luY2x1ZGVkaXJ9ICIgKworICAgICIke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSAiICsKKyAgICAiJHtsaWJkaXJ9LyoubGEgIiArCisgICAgIiR7bGliZGlyfS8qLmEgIiArCisgICAgIiR7bGliZGlyfS8qLm8gIiArCisgICAgIiR7bGliZGlyfS9wa2djb25maWcgIiArCisgICAgIiR7YmFzZV9saWJkaXJ9LyouYSAiICsKKyAgICAiJHtiYXNlX2xpYmRpcn0vKi5vICIgKworICAgICIke2RhdGFkaXJ9L2FjbG9jYWwgIiArCisgICAgIiR7ZGF0YWRpcn0vcGtnY29uZmlnICIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tMnRvMyIsICJQeXRob24gYXV0b21hdGVkIFB5dGhvbiAyIHRvIDMgY29kZSB0cmFuc2xhdG9yIiwgIiR7UE59LWNvcmUiLAorICAgICJsaWIydG8zIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taWRsZSIsICJQeXRob24gSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCIsICIke1BOfS1jb3JlICR7UE59LXRraW50ZXIiLAorICAgICIke2JpbmRpcn0vaWRsZSBpZGxlbGliIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcHlkb2MiLCAiUHl0aG9uIGludGVyYWN0aXZlIGhlbHAgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWxhbmcgJHtQTn0tc3RyaW5nb2xkICR7UE59LXJlIiwKKyAgICAiJHtiaW5kaXJ9L3B5ZG9jIHB5ZG9jLiogcHlkb2NfZGF0YSIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc210cGQiLCAiUHl0aG9uIFNpbXBsZSBNYWlsIFRyYW5zcG9ydCBEYWVtb24iLCAiJHtQTn0tY29yZSAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tZW1haWwgJHtQTn0tbWltZSIsCisgICAgIiR7YmluZGlyfS9zbXRwZC4qIHNtdHBkLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWF1ZGlvIiwgIlB5dGhvbiBBdWRpbyBIYW5kbGluZyIsICIke1BOfS1jb3JlIiwKKyAgICAid2F2ZS4qIGNodW5rLiogc25kaGRyLiogbGliLWR5bmxvYWQvb3NzYXVkaW9kZXYuKi5zbyBsaWItZHlubG9hZC9hdWRpb29wLiouc28gYXVkaW9kZXYuKiBzdW5hdWRpby4qIHN1bmF1LiogdG9haWZmLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWFzeW5jaW8iLCAiUHl0aG9uIEFzeW5jaHJvbm91cyBJL08sIGV2ZW50IGxvb3AsIGNvcm91dGluZXMgYW5kIHRhc2tzIiwgIiR7UE59LWNvcmUiLAorICAgICJhc3luY2lvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jb2RlY3MiLCAiUHl0aG9uIGNvZGVjcywgZW5jb2RpbmdzICYgaTE4biBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tbGFuZyIsCisgICAgImNvZGVjcy4qIGVuY29kaW5ncyBnZXR0ZXh0LiogbG9jYWxlLiogbGliLWR5bmxvYWQvX2xvY2FsZS4qLnNvIGxpYi1keW5sb2FkL19jb2RlY3MqIGxpYi1keW5sb2FkL19tdWx0aWJ5dGVjb2RlYy4qLnNvIGxpYi1keW5sb2FkL3VuaWNvZGVkYXRhLiouc28gc3RyaW5ncHJlcC4qIHhkcmxpYi4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jb21waWxlIiwgIlB5dGhvbiBieXRlY29kZSBjb21waWxhdGlvbiBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJweV9jb21waWxlLiogY29tcGlsZWFsbC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jb21wcmVzc2lvbiIsICJQeXRob24gaGlnaC1sZXZlbCBjb21wcmVzc2lvbiBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tY29kZWNzIiwKKyAgICAiZ3ppcC4qIHppcGZpbGUuKiB0YXJmaWxlLiogbGliLWR5bmxvYWQvYnoyLiouc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNyeXB0IiwgIlB5dGhvbiBiYXNpYyBjcnlwdG9ncmFwaGljIGFuZCBoYXNoaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImhhc2hsaWIuKiBtZDUuKiBzaGEuKiBsaWItZHlubG9hZC9jcnlwdC4qLnNvIGxpYi1keW5sb2FkL19oYXNobGliLiouc28gbGliLWR5bmxvYWQvX3NoYTI1Ni4qLnNvIGxpYi1keW5sb2FkL19zaGE1MTIuKi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdGV4dHV0aWxzIiwgIlB5dGhvbiBvcHRpb24gcGFyc2luZywgdGV4dCB3cmFwcGluZyBhbmQgQ1NWIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1zdHJpbmdvbGQiLAorICAgICJsaWItZHlubG9hZC9fY3N2Liouc28gY3N2Liogb3B0cGFyc2UuKiB0ZXh0d3JhcC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jdXJzZXMiLCAiUHl0aG9uIGN1cnNlcyBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJjdXJzZXMgbGliLWR5bmxvYWQvX2N1cnNlcy4qLnNvIGxpYi1keW5sb2FkL19jdXJzZXNfcGFuZWwuKi5zbyIgKSAjIGRpcmVjdG9yeSArIGxvdyBsZXZlbCBtb2R1bGUKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWN0eXBlcyIsICJQeXRob24gQyB0eXBlcyBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJjdHlwZXMgbGliLWR5bmxvYWQvX2N0eXBlcy4qLnNvIGxpYi1keW5sb2FkL19jdHlwZXNfdGVzdC4qLnNvIiApICMgZGlyZWN0b3J5ICsgbG93IGxldmVsIG1vZHVsZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGF0ZXRpbWUiLCAiUHl0aG9uIGNhbGVuZGFyIGFuZCB0aW1lIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1jb2RlY3MiLAorICAgICJfc3RycHRpbWUuKiBjYWxlbmRhci4qIGxpYi1keW5sb2FkL2RhdGV0aW1lLiouc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRiIiwgIlB5dGhvbiBmaWxlLWJhc2VkIGRhdGFiYXNlIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImFueWRibS4qIGR1bWJkYm0uKiB3aGljaGRiLiogZGJtIGxpYi1keW5sb2FkL19kYm0uKi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGVidWdnZXIiLCAiUHl0aG9uIGRlYnVnZ2VyIiwgIiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1yZSAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc2hlbGwgJHtQTn0tcHByaW50IiwKKyAgICAiYmRiLiogcGRiLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRpZmZsaWIiLCAiUHl0aG9uIGhlbHBlcnMgZm9yIGNvbXB1dGluZyBkZWx0YXMgYmV0d2VlbiBvYmplY3RzIiwgIiR7UE59LWxhbmcgJHtQTn0tcmUiLAorICAgICJkaWZmbGliLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYiLCAiUHl0aG9uIGRpc3RyaWJ1dGlvbiB1dGlsaXRpZXMgKHN0YXRpYyBsaWJyYXJpZXMpIiwgIiR7UE59LWRpc3R1dGlscyIsCisgICAgImNvbmZpZy9saWIqLmEiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kaXN0dXRpbHMiLCAiUHl0aG9uIERpc3RyaWJ1dGlvbiBVdGlsaXRpZXMiLCAiJHtQTn0tY29yZSIsCisgICAgImNvbmZpZyBkaXN0dXRpbHMiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kb2N0ZXN0IiwgIlB5dGhvbiBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgZXhhbXBsZXMgaW4gZG9jc3RyaW5ncyIsICIke1BOfS1jb3JlICR7UE59LWxhbmcgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tdW5pdHRlc3QgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGlmZmxpYiIsCisgICAgImRvY3Rlc3QuKiIgKQorCisgICAgIyBGSVhNRSBjb25zaWRlciBhZGRpbmcgdG8gc29tZSBoaWdoZXIgbGV2ZWwgcGFja2FnZQorICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWVsZW1lbnR0cmVlIiwgIlB5dGhvbiBlbGVtZW50cmVlIiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9fZWxlbWVudHRyZWUuKi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZW1haWwiLCAiUHl0aG9uIGVtYWlsIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1taW1lICR7UE59LWF1ZGlvICR7UE59LWltYWdlICR7UE59LW5ldGNsaWVudCIsCisgICAgImltYXBsaWIuKiBlbWFpbCIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWZjbnRsIiwgIlB5dGhvbidzIGZjbnRsIGludGVyZmFjZSIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvZmNudGwuKi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taHRtbCIsICJQeXRob24gSFRNTCBwcm9jZXNzaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImZvcm1hdHRlci4qIGh0bWxlbnRpdHlkZWZzLiogaHRtbGxpYi4qIG1hcmt1cGJhc2UuKiBzZ21sbGliLiogSFRNTFBhcnNlci4qICIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taW1wb3J0bGliIiwgIlB5dGhvbiBpbXBvcnQgaW1wbGVtZW50YXRpb24gbGlicmFyeSIsICIke1BOfS1jb3JlIiwKKyAgICAiaW1wb3J0bGliIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1nZGJtIiwgIlB5dGhvbiBHTlUgZGF0YWJhc2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvX2dkYm0uKi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taW1hZ2UiLCAiUHl0aG9uIGdyYXBoaWNhbCBpbWFnZSBoYW5kbGluZyIsICIke1BOfS1jb3JlIiwKKyAgICAiY29sb3JzeXMuKiBpbWdoZHIuKiBsaWItZHlubG9hZC9pbWFnZW9wLiouc28gbGliLWR5bmxvYWQvcmdiaW1nLiouc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWlvIiwgIlB5dGhvbiBsb3ctbGV2ZWwgSS9PIiwgIiR7UE59LWNvcmUgJHtQTn0tbWF0aCIsCisgICAgImxpYi1keW5sb2FkL19zb2NrZXQuKi5zbyBsaWItZHlubG9hZC9faW8uKi5zbyBsaWItZHlubG9hZC9fc3NsLiouc28gbGliLWR5bmxvYWQvc2VsZWN0Liouc28gbGliLWR5bmxvYWQvdGVybWlvcy4qLnNvIGxpYi1keW5sb2FkL2NTdHJpbmdJTy4qLnNvICIgKworICAgICJwaXBlcy4qIHNvY2tldC4qIHNzbC4qIHRlbXBmaWxlLiogU3RyaW5nSU8uKiBpby4qIF9weWlvLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWpzb24iLCAiUHl0aG9uIEpTT04gc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LW1hdGggJHtQTn0tcmUiLAorICAgICJqc29uIGxpYi1keW5sb2FkL19qc29uLiouc28iICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1sYW5nIiwgIlB5dGhvbiBsb3ctbGV2ZWwgbGFuZ3VhZ2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvX2Jpc2VjdC4qLnNvIGxpYi1keW5sb2FkL19jb2xsZWN0aW9ucy4qLnNvIGxpYi1keW5sb2FkL19oZWFwcS4qLnNvIGxpYi1keW5sb2FkL193ZWFrcmVmLiouc28gbGliLWR5bmxvYWQvX2Z1bmN0b29scy4qLnNvICIgKworICAgICJsaWItZHlubG9hZC9hcnJheS4qLnNvIGxpYi1keW5sb2FkL2l0ZXJ0b29scy4qLnNvIGxpYi1keW5sb2FkL29wZXJhdG9yLiouc28gbGliLWR5bmxvYWQvcGFyc2VyLiouc28gIiArCisgICAgImF0ZXhpdC4qIGJpc2VjdC4qIGNvZGUuKiBjb2Rlb3AuKiBjb2xsZWN0aW9ucy4qIF9jb2xsZWN0aW9uc19hYmMuKiBkaXMuKiBmdW5jdG9vbHMuKiBoZWFwcS4qIGluc3BlY3QuKiBrZXl3b3JkLiogb3Bjb2RlLiogc3ltYm9sLiogcmVwci4qIHRva2VuLiogIiArCisgICAgInRva2VuaXplLiogdHJhY2ViYWNrLiogd2Vha3JlZi4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1sb2dnaW5nIiwgIlB5dGhvbiBsb2dnaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXBpY2tsZSAke1BOfS1zdHJpbmdvbGQiLAorICAgICJsb2dnaW5nIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbWFpbGJveCIsICJQeXRob24gbWFpbGJveCBmb3JtYXQgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LW1pbWUiLAorICAgICJtYWlsYm94LioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW1hdGgiLCAiUHl0aG9uIG1hdGggc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvY21hdGguKi5zbyBsaWItZHlubG9hZC9tYXRoLiouc28gbGliLWR5bmxvYWQvX3JhbmRvbS4qLnNvIHJhbmRvbS4qIHNldHMuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbWltZSIsICJQeXRob24gTUlNRSBoYW5kbGluZyBBUElzIiwgIiR7UE59LWNvcmUgJHtQTn0taW8iLAorICAgICJtaW1ldG9vbHMuKiB1dS4qIHF1b3ByaS4qIHJmYzgyMi4qIE1pbWVXcml0ZXIuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbW1hcCIsICJQeXRob24gbWVtb3J5LW1hcHBlZCBmaWxlIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyIsCisgICAgImxpYi1keW5sb2FkL21tYXAuKi5zbyAiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW11bHRpcHJvY2Vzc2luZyIsICJQeXRob24gbXVsdGlwcm9jZXNzaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXBpY2tsZSAke1BOfS10aHJlYWRpbmcgJHtQTn0tY3R5cGVzICR7UE59LW1tYXAiLAorICAgICJsaWItZHlubG9hZC9fbXVsdGlwcm9jZXNzaW5nLiouc28gbXVsdGlwcm9jZXNzaW5nIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbmV0Y2xpZW50IiwgIlB5dGhvbiBJbnRlcm5ldCBQcm90b2NvbCBjbGllbnRzIiwgIiR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tZGF0ZXRpbWUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1pbWUiLAorICAgICIqQ29va2llKi4qICIgKworICAgICJiYXNlNjQuKiBjb29raWVsaWIuKiBmdHBsaWIuKiBnb3BoZXJsaWIuKiBobWFjLiogaHR0cGxpYi4qIG1pbWV0eXBlcy4qIG5udHBsaWIuKiBwb3BsaWIuKiBzbXRwbGliLiogdGVsbmV0bGliLiogdXJsbGliICB1dWlkLiogcmZjODIyLiogbWltZXRvb2xzLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW5ldHNlcnZlciIsICJQeXRob24gSW50ZXJuZXQgUHJvdG9jb2wgc2VydmVycyIsICIke1BOfS1jb3JlICR7UE59LW5ldGNsaWVudCAke1BOfS1zaGVsbCAke1BOfS10aHJlYWRpbmciLAorICAgICJjZ2kuKiAqSFRUUFNlcnZlci4qIFNvY2tldFNlcnZlci4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1udW1iZXJzIiwgIlB5dGhvbiBudW1iZXIgQVBJcyIsICIke1BOfS1jb3JlICR7UE59LWxhbmcgJHtQTn0tcmUiLAorICAgICJkZWNpbWFsLiogZnJhY3Rpb25zLiogbnVtYmVycy4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1waWNrbGUiLCAiUHl0aG9uIHNlcmlhbGlzYXRpb24vcGVyc2lzdGVuY2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWNvZGVjcyAke1BOfS1pbyAke1BOfS1yZSIsCisgICAgInBpY2tsZS4qIHNoZWx2ZS4qIGxpYi1keW5sb2FkL2NQaWNrbGUuKi5zbyBwaWNrbGV0b29scy4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1wa2d1dGlsIiwgIlB5dGhvbiBwYWNrYWdlIGV4dGVuc2lvbiB1dGlsaXR5IHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgInBrZ3V0aWwuKiIpCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1wcHJpbnQiLCAiUHl0aG9uIHByZXR0eS1wcmludCBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8iLAorICAgICJwcHJpbnQuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcHJvZmlsZSIsICJQeXRob24gYmFzaWMgcGVyZm9ybWFuY2UgcHJvZmlsaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS10ZXh0dXRpbHMiLAorICAgICJwcm9maWxlLiogcHN0YXRzLiogY1Byb2ZpbGUuKiBsaWItZHlubG9hZC9fbHNwcm9mLiouc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXJlIiwgIlB5dGhvbiBSZWd1bGFyIEV4cHJlc3Npb24gQVBJcyIsICIke1BOfS1jb3JlIiwKKyAgICAicmUuKiBzcmUuKiBzcmVfY29tcGlsZS4qIHNyZV9jb25zdGFudHMqIHNyZV9wYXJzZS4qIiApICMgX3NyZSBpcyBidWlsdGluCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1yZWFkbGluZSIsICJQeXRob24gcmVhZGxpbmUgc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvcmVhZGxpbmUuKi5zbyBybGNvbXBsZXRlci4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1yZXBybGliIiwgIlB5dGhvbiBhbHRlcm5hdGUgcmVwcigpIGltcGxlbWVudGF0aW9uIiwgIiR7UE59LWNvcmUiLAorICAgICJyZXBybGliLnB5IiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1yZXNvdXJjZSIsICJQeXRob24gcmVzb3VyY2UgY29udHJvbCBpbnRlcmZhY2UiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL3Jlc291cmNlLiouc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXNoZWxsIiwgIlB5dGhvbiBzaGVsbC1saWtlIGZ1bmN0aW9uYWxpdHkiLCAiJHtQTn0tY29yZSAke1BOfS1yZSIsCisgICAgImNtZC4qIGNvbW1hbmRzLiogZGlyY2FjaGUuKiBmbm1hdGNoLiogZ2xvYi4qIHBvcGVuMi4qIHNobGV4Liogc2h1dGlsLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXN1YnByb2Nlc3MiLCAiUHl0aG9uIHN1YnByb2Nlc3Mgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LWZjbnRsICR7UE59LXBpY2tsZSIsCisgICAgInN1YnByb2Nlc3MuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc3FsaXRlMyIsICJQeXRob24gU3FsaXRlMyBkYXRhYmFzZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tbGFuZyAke1BOfS1jcnlwdCAke1BOfS1pbyAke1BOfS10aHJlYWRpbmciLAorICAgICJsaWItZHlubG9hZC9fc3FsaXRlMy4qLnNvIHNxbGl0ZTMvZGJhcGkyLiogc3FsaXRlMy9fX2luaXRfXy4qIHNxbGl0ZTMvZHVtcC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zcWxpdGUzLXRlc3RzIiwgIlB5dGhvbiBTcWxpdGUzIGRhdGFiYXNlIHN1cHBvcnQgdGVzdHMiLCAiJHtQTn0tY29yZSAke1BOfS1zcWxpdGUzIiwKKyAgICAic3FsaXRlMy90ZXN0IiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zdHJpbmdvbGQiLCAiUHl0aG9uIHN0cmluZyBBUElzIFtkZXByZWNhdGVkXSIsICIke1BOfS1jb3JlICR7UE59LXJlIiwKKyAgICAibGliLWR5bmxvYWQvc3Ryb3AuKi5zbyBzdHJpbmcuKiBzdHJpbmdvbGQuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc3lzbG9nIiwgIlB5dGhvbiBzeXNsb2cgaW50ZXJmYWNlIiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9zeXNsb2cuKi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdGVybWluYWwiLCAiUHl0aG9uIHRlcm1pbmFsIGNvbnRyb2xsaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyIsCisgICAgInB0eS4qIHR0eS4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS10ZXN0cyIsICJQeXRob24gdGVzdHMiLCAiJHtQTn0tY29yZSIsCisgICAgInRlc3QiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS10aHJlYWRpbmciLCAiUHl0aG9uIHRocmVhZGluZyAmIHN5bmNocm9uaXphdGlvbiBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tbGFuZyIsCisgICAgIl90aHJlYWRpbmdfbG9jYWwuKiBkdW1teV90aHJlYWQuKiBkdW1teV90aHJlYWRpbmcuKiBtdXRleC4qIHRocmVhZGluZy4qIFF1ZXVlLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXRraW50ZXIiLCAiUHl0aG9uIFRjbC9UayBiaW5kaW5ncyIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvX3RraW50ZXIuKi5zbyBsaWItdGsgdGtpbnRlciIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXVuaXR0ZXN0IiwgIlB5dGhvbiB1bml0IHRlc3RpbmcgZnJhbWV3b3JrIiwgIiR7UE59LWNvcmUgJHtQTn0tc3RyaW5nb2xkICR7UE59LWxhbmcgJHtQTn0taW8gJHtQTn0tZGlmZmxpYiAke1BOfS1wcHJpbnQgJHtQTn0tc2hlbGwiLAorICAgICJ1bml0dGVzdC8iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXVuaXhhZG1pbiIsICJQeXRob24gVW5peCBhZG1pbmlzdHJhdGlvbiBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9uaXMuKi5zbyBsaWItZHlubG9hZC9ncnAuKi5zbyBsaWItZHlubG9hZC9wd2QuKi5zbyBnZXRwYXNzLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXhtbCIsICJQeXRob24gYmFzaWMgWE1MIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1yZSIsCisgICAgImxpYi1keW5sb2FkL3B5ZXhwYXQuKi5zbyB4bWwgeG1sbGliLioiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS14bWxycGMiLCAiUHl0aG9uIFhNTC1SUEMgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LXhtbCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbGFuZyIsCisgICAgInhtbHJwY2xpYi4qIFNpbXBsZVhNTFJQQ1NlcnZlci4qIERvY1hNTFJQQ1NlcnZlci4qIHhtbHJwYyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbWFpbGJveCIsICJQeXRob24gbWFpbGJveCBmb3JtYXQgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LW1pbWUiLAorICAgICJtYWlsYm94LioiICkKKworICAgIG0ubWFrZSgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9zZXJkZXZ0cnkgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9zZXJkZXZ0cnkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzRiZDdiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3NlcmRldnRyeQpAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKworIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKK2lmIFsgIiQxIiA9ICIiIC1vICIkMSIgPSAiLS1oZWxwIiBdIDsgdGhlbgorICAgIGVjaG8gIlVzYWdlOiAkMCA8c2VyaWFsIHRlcm1pbmFsIGNvbW1hbmQ+IgorICAgIGVjaG8KKyAgICBlY2hvICJTaW1wbGUgc2NyaXB0IHRvIGhhbmRsZSBtYWludGFpbmluZyBhIHRlcm1pbmFsIGZvciBzZXJpYWwgZGV2aWNlcyB0aGF0IgorICAgIGVjaG8gImRpc2FwcGVhciB3aGVuIGEgZGV2aWNlIGlzIHBvd2VyZWQgZG93biBvciByZXNldCwgc3VjaCBhcyB0aGUgVVNCIgorICAgIGVjaG8gInNlcmlhbCBjb25zb2xlIG9uIHRoZSBvcmlnaW5hbCBCZWFnbGVCb25lICh3aGl0ZSB2ZXJzaW9uKS4iCisgICAgZWNobworICAgIGVjaG8gImUuZy4gJDAgcGljb2NvbSAtYiAxMTUyMDAgL2Rldi90dHlVU0IwIgorICAgIGVjaG8KKyAgICBleGl0CitmaQorCithcmdzPSIkQCIKK0RFVklDRT0iIgord2hpbGUgWyAiJDEiICE9ICIiIF07IGRvCisgICAgY2FzZSAiJDEiIGluCisgICAgICAgIC9kZXYvKikKKyAgICAgICAgICAgIERFVklDRT0kMQorICAgICAgICAgICAgYnJlYWs7OworICAgIGVzYWMKKyAgICBzaGlmdAorZG9uZQorCitpZiBbICIkREVWSUNFIiAhPSAiIiBdIDsgdGhlbgorICAgIHdoaWxlIHRydWU7IGRvCisgICAgICAgIGlmIFsgISAtZSAkREVWSUNFIF0gOyB0aGVuCisgICAgICAgICAgICBlY2hvICJzZXJkZXZ0cnk6IHdhaXRpbmcgZm9yICRERVZJQ0UgdG8gZXhpc3QuLi4iCisgICAgICAgICAgICB3aGlsZSBbICEgLWUgJERFVklDRSBdOyBkbworICAgICAgICAgICAgICAgIHNsZWVwIDAuMQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorICAgICAgICBpZiBbICEgLXcgJERFVklDRSBdIDsgdGhlbgorICAgICAgICAgICAgIyBTb21ldGltZXMgKHByZXN1bWFibHkgYmVjYXVzZSBvZiBhIHJhY2Ugd2l0aCB1ZGV2KSB3ZSBnZXQgdG8KKyAgICAgICAgICAgICMgdGhlIGRldmljZSBiZWZvcmUgaXRzIHBlcm1pc3Npb25zIGhhdmUgYmVlbiBzZXQgdXAKKyAgICAgICAgICAgIFJFVFJZTlVNPTAKKyAgICAgICAgICAgIHdoaWxlIFsgISAtdyAkREVWSUNFIF07IGRvCisgICAgICAgICAgICAgICAgaWYgWyAiJFJFVFJZTlVNIiA9ICIyIiBdIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBlY2hvICJEZXZpY2UgJERFVklDRSBleGlzdHMgYnV0IGlzIG5vdCB3cml0YWJsZSEiCisgICAgICAgICAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgUkVUUllOVU09JCgoUkVUUllOVU0rMSkpCisgICAgICAgICAgICAgICAgc2xlZXAgMC4xCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisgICAgICAgICRhcmdzCisgICAgICAgIGlmIFsgLWUgJERFVklDRSBdIDsgdGhlbgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICBkb25lCitlbHNlCisgICAgZWNobyAiVW5hYmxlIHRvIGRldGVybWluZSBkZXZpY2Ugbm9kZSBmcm9tIGNvbW1hbmQ6ICRhcmdzIgorICAgIGV4aXQgMQorZmkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvdGVzdF9idWlsZF90aW1lLnNoIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvdGVzdF9idWlsZF90aW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjllNTcyNWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi90ZXN0X2J1aWxkX3RpbWUuc2gKQEAgLTAsMCArMSwyMzcgQEAKKyMhL2Jpbi9iYXNoCisKKyMgQnVpbGQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0IHNjcmlwdAorIworIyBDb3B5cmlnaHQgMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisjCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgc2NyaXB0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCAiZ2l0IGJpc2VjdCBydW4iCisjIGluIG9yZGVyIHRvIGZpbmQgcmVncmVzc2lvbnMgaW4gYnVpbGQgdGltZSwgaG93ZXZlciBpdCBjYW4gYWxzbyBiZSB1c2VkCisjIGluZGVwZW5kZW50bHkuIEl0IGNsZWFucyBvdXQgdGhlIGJ1aWxkIG91dHB1dCBkaXJlY3RvcmllcywgcnVucyBhCisjIHNwZWNpZmllZCB3b3JrZXIgc2NyaXB0IChhbiBleGFtcGxlIGlzIHRlc3RfYnVpbGRfdGltZV93b3JrZXIuc2gpIHVuZGVyCisjIFRJTUUoMSksIGxvZ3MgdGhlIHJlc3VsdHMgdG8gVEVTVF9MT0dESVIgKGRlZmF1bHQgL3RtcCkgYW5kIHJldHVybnMgYQorIyB2YWx1ZSB0ZWxsaW5nICJnaXQgYmlzZWN0IHJ1biIgd2hldGhlciB0aGUgYnVpbGQgdGltZSBpcyBnb29kICh1bmRlcgorIyB0aGUgc3BlY2lmaWVkIHRocmVzaG9sZCkgb3IgYmFkIChvdmVyIGl0KS4gVGhlcmUgaXMgYWxzbyBhIHRvbGVyYW5jZQorIyBvcHRpb24gYnV0IGl0IGlzIG5vdCBwYXJ0aWN1bGFybHkgdXNlZnVsIGFzIGl0IG9ubHkgc3VidHJhY3RzIHRoZQorIyB0b2xlcmFuY2UgZnJvbSB0aGUgZ2l2ZW4gdGhyZXNob2xkIGFuZCB1c2VzIGl0IGFzIHRoZSBhY3R1YWwgdGhyZXNob2xkLgorIworIyBJdCBpcyBhbHNvIGNhcGFibGUgb2YgdGFraW5nIGEgZmlsZSBsaXN0aW5nIGdpdCByZXZpc2lvbiBoYXNoZXMgdG8gYmUKKyMgdGVzdC1hcHBsaWVkIHRvIHRoZSByZXBvc2l0b3J5IGluIG9yZGVyIHRvIGdldCBwYXN0IGJ1aWxkIGZhaWx1cmVzIHRoYXQKKyMgd291bGQgb3RoZXJ3aXNlIGNhdXNlIGNlcnRhaW4gcmV2aXNpb25zIHRvIGhhdmUgdG8gYmUgc2tpcHBlZDsgaWYgYQorIyByZXZpc2lvbiBkb2VzIG5vdCBhcHBseSBjbGVhbmx5IHRoZW4gdGhlIHNjcmlwdCBhc3N1bWVzIGl0IGRvZXMgbm90CisjIG5lZWQgdG8gYmUgYXBwbGllZCBhbmQgaWdub3JlcyBpdC4KKyMKKyMgUGxlYXNlIHNlZSB0aGUgaGVscCBvdXRwdXQgKHN5bnRheCBiZWxvdykgZm9yIHNvbWUgaW1wb3J0YW50IHNldHVwCisjIGluc3RydWN0aW9ucy4KKyMKKyMgQVVUSE9SUworIyBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworCitzeW50YXgoKSB7CisgICAgZWNobyAic3ludGF4OiAkMCA8c2NyaXB0PiA8dGltZT4gPHRvbGVyYW5jZT4gW3BhdGNocmV2bGlzdF0iCisgICAgZWNobyAiIgorICAgIGVjaG8gIiAgc2NyaXB0ICAgICAgIC0gd29ya2VyIHNjcmlwdCBmaWxlIChpZiBpbiBjdXJyZW50IGRpciwgcHJlZml4IHdpdGggLi8pIgorICAgIGVjaG8gIiAgdGltZSAgICAgICAgIC0gdGltZSB0aHJlc2hvbGQgKGluIHNlY29uZHMsIHN1ZmZpeCBtIGZvciBtaW51dGVzKSIKKyAgICBlY2hvICIgIHRvbGVyYW5jZSAgICAtIHRvbGVyYW5jZSAoaW4gc2Vjb25kcywgc3VmZml4IG0gZm9yIG1pbnV0ZXMgb3IgJSBmb3IiCisgICAgZWNobyAiICAgICAgICAgICAgICAgICBwZXJjZW50YWdlLCBjYW4gYmUgMCkiCisgICAgZWNobyAiICBwYXRjaHJldmxpc3QgLSBvcHRpb25hbCBmaWxlIGxpc3RpbmcgcmV2aXNpb25zIHRvIGFwcGx5IGFzIHBhdGNoZXMgb24gdG9wIgorICAgIGVjaG8gIiIKKyAgICBlY2hvICJZb3UgbXVzdCBzZXQgVEVTVF9CVUlMRERJUiB0byBwb2ludCB0byBhIHByZXZpb3VzbHkgY3JlYXRlZCBidWlsZCBkaXJlY3RvcnksIgorICAgIGVjaG8gImhvd2V2ZXIgcGxlYXNlIG5vdGUgdGhhdCB0aGlzIHNjcmlwdCB3aWxsIHdpcGUgb3V0IHRoZSBUTVBESVIgZGVmaW5lZCBpbiIKKyAgICBlY2hvICJURVNUX0JVSUxERElSL2NvbmYvbG9jYWwuY29uZiBhcyBwYXJ0IG9mIGl0cyBpbml0aWFsIHNldHVwIChhcyB3ZWxsIGFzIHlvdXIiCisgICAgZWNobyAifi8uY2NhY2hlKSIKKyAgICBlY2hvICIiCisgICAgZWNobyAiVG8gZ2V0IHJpZCBvZiB0aGUgc3VkbyBwcm9tcHQsIHBsZWFzZSBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIC9ldGMvc3Vkb2VycyIKKyAgICBlY2hvICIodXNlICd2aXN1ZG8nIHRvIGVkaXQgdGhpczsgYWxzbyBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHVzZXIgeW91IGFyZSBydW5uaW5nIgorICAgIGVjaG8gImFzIGlzIGEgbWVtYmVyIG9mIHRoZSAnd2hlZWwnIGdyb3VwKToiCisgICAgZWNobyAiIgorICAgIGVjaG8gIiV3aGVlbCBBTEw9KEFMTCkgTk9QQVNTV0Q6IC9zYmluL3N5c2N0bCAtdyB2bS5kcm9wX2NhY2hlcz1bMS0zXSIKKyAgICBlY2hvICIiCisgICAgZWNobyAiTm90ZTogaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgZGlzYWJsZSBjcm9uZCBhbmQgYW55IG90aGVyIHByb2Nlc3MgdGhhdCIKKyAgICBlY2hvICJtYXkgY2F1c2Ugc2lnbmlmaWNhbnQgQ1BVIG9yIEkvTyB1c2FnZSBkdXJpbmcgYnVpbGQgcGVyZm9ybWFuY2UgdGVzdHMuIgorfQorCisjIE5vdGUgLSB3ZSBleGl0IHdpdGggMjUwIGhlcmUgYmVjYXVzZSB0aGF0IHdpbGwgdGVsbCBnaXQgYmlzZWN0IHJ1biB0aGF0CisjIHNvbWV0aGluZyBiYWQgaGFwcGVuZWQgYW5kIHN0b3AKK2lmIFsgIiQxIiA9ICIiIF0gOyB0aGVuCisgICBzeW50YXgKKyAgIGV4aXQgMjUwCitmaQorCitpZiBbICIkMiIgPSAiIiBdIDsgdGhlbgorICAgc3ludGF4CisgICBleGl0IDI1MAorZmkKKworaWYgWyAiJDMiID0gIiIgXSA7IHRoZW4KKyAgIHN5bnRheAorICAgZXhpdCAyNTAKK2ZpCisKK2lmICEgW1sgIiQyIiA9fiBeWzAtOV1bMC05bS5dKiQgXV0gOyB0aGVuCisgICBlY2hvICInJDInIGlzIG5vdCBhIHZhbGlkIG51bWJlciBmb3IgdGhyZXNob2xkIgorICAgZXhpdCAyNTAKK2ZpCisKK2lmICEgW1sgIiQzIiA9fiBeWzAtOV1bMC05bS4lXSokIF1dIDsgdGhlbgorICAgZWNobyAiJyQzJyBpcyBub3QgYSB2YWxpZCBudW1iZXIgZm9yIHRvbGVyYW5jZSIKKyAgIGV4aXQgMjUwCitmaQorCitpZiBbICIkVEVTVF9CVUlMRERJUiIgPSAiIiBdIDsgdGhlbgorICAgZWNobyAiUGxlYXNlIHNldCBURVNUX0JVSUxERElSIHRvIGEgcHJldmlvdXNseSBjcmVhdGVkIGJ1aWxkIGRpcmVjdG9yeSIKKyAgIGV4aXQgMjUwCitmaQorCitpZiBbICEgLWQgIiRURVNUX0JVSUxERElSIiBdIDsgdGhlbgorICAgZWNobyAiVEVTVF9CVUlMRERJUiAkVEVTVF9CVUlMRERJUiBub3QgZm91bmQiCisgICBleGl0IDI1MAorZmkKKworZ2l0IGRpZmYgLS1xdWlldAoraWYgWyAkPyAhPSAwIF0gOyB0aGVuCisgICAgZWNobyAiV29ya2luZyB0cmVlIGlzIGRpcnR5LCBjYW5ub3QgcHJvY2VlZCIKKyAgICBleGl0IDI1MQorZmkKKworaWYgWyAiJEJCX0VOVl9FWFRSQVdISVRFIiAhPSAiIiBdIDsgdGhlbgorICAgZWNobyAiV0FSTklORzogeW91IGFyZSBydW5uaW5nIGFmdGVyIHNvdXJjaW5nIHRoZSBidWlsZCBlbnZpcm9ubWVudCBzY3JpcHQsIHRoaXMgaXMgbm90IHJlY29tbWVuZGVkIgorZmkKKworcnVuc2NyaXB0PSQxCit0aW1ldGhyZXNob2xkPSQyCit0b2xlcmFuY2U9JDMKKworaWYgWyAiJDQiICE9ICIiIF0gOyB0aGVuCisgICAgcGF0Y2hyZXZsaXN0PWBjYXQgJDRgCitlbHNlCisgICAgcGF0Y2hyZXZsaXN0PSIiCitmaQorCitpZiBbWyB0aW1ldGhyZXNob2xkID09ICptKiBdXSA7IHRoZW4KKyAgICB0aW1ldGhyZXNob2xkPWBlY2hvICR0aW1ldGhyZXNob2xkIHwgc2VkIHMvbS8qNjAvIHwgYmNgCitmaQorCitpZiBbWyAkdG9sZXJhbmNlID09ICptKiBdXSA7IHRoZW4KKyAgICB0b2xlcmFuY2U9YGVjaG8gJHRvbGVyYW5jZSB8IHNlZCBzL20vKjYwLyB8IGJjYAorZWxpZiBbWyAkdG9sZXJhbmNlID09IColKiBdXSA7IHRoZW4KKyAgICB0b2xlcmFuY2U9YGVjaG8gJHRvbGVyYW5jZSB8IHNlZCBzLyUvL2AKKyAgICB0b2xlcmFuY2U9YGVjaG8gInNjYWxlID0gMjsgKCgkdG9sZXJhbmNlICogJHRpbWV0aHJlc2hvbGQpIC8gMTAwKSIgfCBiY2AKK2ZpCisKK3RtcGRpcj1gZ3JlcCAiXlRNUERJUiIgJFRFU1RfQlVJTERESVIvY29uZi9sb2NhbC5jb25mIHwgc2VkIC1lICdzL1RNUERJUlsgXHRdKj1bIFx0XD9dKiIvLycgLWUgJ3MvIi8vJ2AKK2lmIFsgIngkdG1wZGlyIiA9ICJ4IiBdOyB0aGVuCisgICAgZWNobyAiVW5hYmxlIHRvIGRldGVybWluZSBUTVBESVIgZnJvbSAkVEVTVF9CVUlMRERJUi9jb25mL2xvY2FsLmNvbmYsIGJhaWxpbmcgb3V0IgorICAgIGV4aXQgMjUwCitmaQorc3N0YXRlZGlyPWBncmVwICJeU1NUQVRFX0RJUiIgJFRFU1RfQlVJTERESVIvY29uZi9sb2NhbC5jb25mIHwgc2VkIC1lICdzL1NTVEFURV9ESVJbIFx0XD9dKj1bIFx0XSoiLy8nIC1lICdzLyIvLydgCitpZiBbICJ4JHNzdGF0ZWRpciIgPSAieCIgXTsgdGhlbgorICAgIGVjaG8gIlVuYWJsZSB0byBkZXRlcm1pbmUgU1NUQVRFX0RJUiBmcm9tICRURVNUX0JVSUxERElSL2NvbmYvbG9jYWwuY29uZiwgYmFpbGluZyBvdXQiCisgICAgZXhpdCAyNTAKK2ZpCisKK2lmIFsgYGV4cHIgbGVuZ3RoICR0bXBkaXJgIC1sdCA0IF0gOyB0aGVuCisgICAgZWNobyAiVE1QRElSICR0bXBkaXIgaXMgbGVzcyB0aGFuIDQgY2hhcmFjdGVycywgYmFpbGluZyBvdXQiCisgICAgZXhpdCAyNTAKK2ZpCisKK2lmIFsgYGV4cHIgbGVuZ3RoICRzc3RhdGVkaXJgIC1sdCA0IF0gOyB0aGVuCisgICAgZWNobyAiU1NUQVRFX0RJUiAkc3N0YXRlZGlyIGlzIGxlc3MgdGhhbiA0IGNoYXJhY3RlcnMsIGJhaWxpbmcgb3V0IgorICAgIGV4aXQgMjUwCitmaQorCitlY2hvIC1uICJBYm91dCB0byB3aXBlIG91dCBUTVBESVIgJHRtcGRpciwgcHJlc3MgQ3RybCtDIHRvIGJyZWFrIG91dC4uLiAgIgorZm9yIGkgaW4gOSA4IDcgNiA1IDQgMyAyIDEKK2RvCisgICAgZWNobyAtbmUgIlx4MDgkaSIKKyAgICBzbGVlcCAxCitkb25lCitlY2hvCisKK3B1c2hkIC4gPiAvZGV2L251bGwKKworcm0gLWYgcHNldWRvZG9uZQorZWNobyAiUmVtb3ZpbmcgVE1QRElSICR0bXBkaXIuLi4iCitybSAtcmYgJHRtcGRpcgorZWNobyAiUmVtb3ZpbmcgVE1QRElSICR0bXBkaXItKmxpYmMuLi4iCitybSAtcmYgJHRtcGRpci0qbGliYworZWNobyAiUmVtb3ZpbmcgU1NUQVRFX0RJUiAkc3N0YXRlZGlyLi4uIgorcm0gLXJmICRzc3RhdGVkaXIKK2VjaG8gIlJlbW92aW5nIH4vLmNjYWNoZS4uLiIKK3JtIC1yZiB+Ly5jY2FjaGUKKworZWNobyAiU3luY2luZy4uLiIKK3N5bmMKK3N5bmMKK2VjaG8gIkRyb3BwaW5nIFZNIGNhY2hlLi4uIgorI2VjaG8gMyA+IC9wcm9jL3N5cy92bS9kcm9wX2NhY2hlcworc3VkbyAvc2Jpbi9zeXNjdGwgLXcgdm0uZHJvcF9jYWNoZXM9MyA+IC9kZXYvbnVsbAorCitpZiBbICIkVEVTVF9MT0dESVIiID0gIiIgXSA7IHRoZW4KKyAgICBsb2dkaXI9Ii90bXAiCitlbHNlCisgICAgbG9nZGlyPSIkVEVTVF9MT0dESVIiCitmaQorcmV2PWBnaXQgcmV2LXBhcnNlIEhFQURgCitsb2dmaWxlPSIkbG9nZGlyL3RpbWVsb2dfJHJldi5sb2ciCitlY2hvIC1uID4gJGxvZ2ZpbGUKKworZ2l0cm9vdD1gZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWxgCitjZCAkZ2l0cm9vdAorZm9yIHBhdGNocmV2IGluICRwYXRjaHJldmxpc3QgOyBkbworICAgIGVjaG8gIkFwcGx5aW5nICRwYXRjaHJldiIKKyAgICBwYXRjaGZpbGU9YG1rdGVtcGAKKyAgICBnaXQgc2hvdyAkcGF0Y2hyZXYgPiAkcGF0Y2hmaWxlCisgICAgZ2l0IGFwcGx5IC0tY2hlY2sgJHBhdGNoZmlsZSAmPiAvZGV2L251bGwKKyAgICBpZiBbICQ/ICE9IDAgXSA7IHRoZW4KKyAgICAgICAgZWNobyAiIC4uLiBwYXRjaCBkb2VzIG5vdCBhcHBseSB3aXRob3V0IGVycm9ycywgaWdub3JpbmciCisgICAgZWxzZQorICAgICAgICBlY2hvICJBcHBsaWVkICRwYXRjaHJldiIgPj4gJGxvZ2ZpbGUKKyAgICAgICAgZ2l0IGFwcGx5ICRwYXRjaGZpbGUgJj4gL2Rldi9udWxsCisgICAgZmkKKyAgICBybSAkcGF0Y2hmaWxlCitkb25lCisKK3N5bmMKK2VjaG8gIlF1aWVzY2luZyBmb3IgNXMuLi4iCitzbGVlcCA1CisKK2VjaG8gIlJ1bm5pbmcgJHJ1bnNjcmlwdCBhdCAkcmV2Li4uIgordGltZW91dGZpbGU9YG1rdGVtcGAKKy91c3IvYmluL3RpbWUgLW8gJHRpbWVvdXRmaWxlIC1mICIlZVxucmVhbFx0JUVcbnVzZXJcdCVVc1xuc3lzXHQlU3Ncbm1heG1cdCVNayIgJHJ1bnNjcmlwdCAyPiYxIHwgdGVlIC1hICRsb2dmaWxlCitleGl0c3RhdHVzPSRQSVBFU1RBVFVTCisKK2dpdCByZXNldCAtLWhhcmQgSEVBRCA+IC9kZXYvbnVsbAorcG9wZCA+IC9kZXYvbnVsbAorCit0aW1lcmVzdWx0PWBoZWFkIC1uMSAkdGltZW91dGZpbGVgCitjYXQgJHRpbWVvdXRmaWxlIHwgdGVlIC1hICRsb2dmaWxlCitybSAkdGltZW91dGZpbGUKKworaWYgWyAkZXhpdHN0YXR1cyAhPSAwIF0gOyB0aGVuCisgICAgIyBCdWlsZCBmYWlsZWQsIGV4aXQgd2l0aCAxMjUgdG8gdGVsbCBnaXQgYmlzZWN0IHJ1biB0byBza2lwIHRoaXMgcmV2CisgICAgZWNobyAiKioqIEJ1aWxkIGZhaWxlZCAoZXhpdCBjb2RlICRleGl0c3RhdHVzKSwgc2tpcHBpbmcuLi4iIHwgdGVlIC1hICRsb2dmaWxlCisgICAgZXhpdCAxMjUKK2ZpCisKK3JldD1gZWNobyAic2NhbGUgPSAyOyAkdGltZXJlc3VsdCA+ICR0aW1ldGhyZXNob2xkIC0gJHRvbGVyYW5jZSIgfCBiY2AKK2VjaG8gIlJldHVybmluZyAkcmV0IiB8IHRlZSAtYSAkbG9nZmlsZQorZXhpdCAkcmV0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3Rlc3RfYnVpbGRfdGltZV93b3JrZXIuc2ggYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi90ZXN0X2J1aWxkX3RpbWVfd29ya2VyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlMjBhOWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi90ZXN0X2J1aWxkX3RpbWVfd29ya2VyLnNoCkBAIC0wLDAgKzEsMzcgQEAKKyMhL2Jpbi9iYXNoCisKKyMgVGhpcyBpcyBhbiBleGFtcGxlIHNjcmlwdCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGVzdF9idWlsZF90aW1lLnNoCisKK2lmIFsgIiRURVNUX0JVSUxERElSIiA9ICIiIF0gOyB0aGVuCisgICAgZWNobyAiVEVTVF9CVUlMRERJUiBpcyBub3Qgc2V0IgorICAgIGV4aXQgMQorZmkKKworYnVpbGRzdWJkaXI9YGJhc2VuYW1lICRURVNUX0JVSUxERElSYAoraWYgWyAhIC1kICRidWlsZHN1YmRpciBdIDsgdGhlbgorICAgIGVjaG8gIlVuYWJsZSB0byBmaW5kIGJ1aWxkIHN1YmRpciAkYnVpbGRzdWJkaXIgaW4gY3VycmVudCBkaXJlY3RvcnkiCisgICAgZXhpdCAxCitmaQorCitpZiBbIC1mIG9lLWluaXQtYnVpbGQtZW52IF0gOyB0aGVuCisgICAgLiAuL29lLWluaXQtYnVpbGQtZW52ICRidWlsZHN1YmRpcgorZWxpZiBbIC1mIHBva3ktaW5pdC1idWlsZC1lbnYgXSA7IHRoZW4KKyAgICAuIC4vcG9reS1pbml0LWJ1aWxkLWVudiAkYnVpbGRzdWJkaXIKK2Vsc2UKKyAgICBlY2hvICJVbmFibGUgdG8gZmluZCBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQiCisgICAgZXhpdCAxCitmaQorCitpZiBbIC1mIC4uL21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8uYmIgXSA7IHRoZW4KKyAgICB0YXJnZXQ9ImNvcmUtaW1hZ2Utc2F0byIKK2Vsc2UKKyAgICB0YXJnZXQ9InBva3ktaW1hZ2Utc2F0byIKK2ZpCisKK2VjaG8gIkJ1aWxkIHN0YXJ0ZWQgYXQgYGRhdGUgIislWS0lbS0lZCAlSDolTTolUyJgIgorZWNobyAiYml0YmFrZSAkdGFyZ2V0IgorYml0YmFrZSAkdGFyZ2V0CityZXQ9JD8KK2VjaG8gIkJ1aWxkIGZpbmlzaGVkIGF0IGBkYXRlICIrJVktJW0tJWQgJUg6JU06JVMiYCIKK2V4aXQgJHJldAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi92ZXJpZnktaG9tZXBhZ2UucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi92ZXJpZnktaG9tZXBhZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODZjYzgyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3ZlcmlmeS1ob21lcGFnZS5weQpAQCAtMCwwICsxLDYzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBUaGlzIHNjcmlwdCBpcyB1c2VkIGZvciB2ZXJpZnkgSE9NRVBBR0UuCisjIFRoZSByZXN1bHQgaXMgaW5mbHVlbmNlZCBieSBuZXR3b3JrIGVudmlyb25tZW50LCBzaW5jZSB0aGUgdGltZW91dCBvZiBjb25uZWN0IHVybCBpcyA1IHNlY29uZHMgYXMgZGVmYXVsdC4KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHVybGxpYjIKKworZGVmIHNlYXJjaF9iaXRiYWtlcGF0aCgpOgorICAgIGJpdGJha2VwYXRoID0gIiIKKworICAgICMgU2VhcmNoIHBhdGggdG8gYml0YmFrZSBsaWIgZGlyIGluIG9yZGVyIHRvIGxvYWQgYmIgbW9kdWxlcworICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pLCAnLi4vLi4vYml0YmFrZS9saWIvYmInKSk6CisgICAgICAgIGJpdGJha2VwYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSksICcuLi8uLi9iaXRiYWtlL2xpYicpCisgICAgICAgIGJpdGJha2VwYXRoID0gb3MucGF0aC5hYnNwYXRoKGJpdGJha2VwYXRoKQorICAgIGVsc2U6CisgICAgICAgICMgTG9vayBmb3IgYml0YmFrZS9iaW4gZGlyIGluIFBBVEgKKyAgICAgICAgZm9yIHB0aCBpbiBvcy5lbnZpcm9uWydQQVRIJ10uc3BsaXQoJzonKToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwdGgsICcuLi9saWIvYmInKSk6CisgICAgICAgICAgICAgICAgYml0YmFrZXBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHB0aCwgJy4uL2xpYicpKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBiaXRiYWtlcGF0aDoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlVuYWJsZSB0byBmaW5kIGJpdGJha2UgYnkgc2VhcmNoaW5nIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhpcyBzY3JpcHQgb3IgUEFUSFxuIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgcmV0dXJuIGJpdGJha2VwYXRoCisKKyMgRm9yIGltcG9ydGluZyB0aGUgZm9sbG93aW5nIG1vZHVsZXMKK3N5cy5wYXRoLmluc2VydCgwLCBzZWFyY2hfYml0YmFrZXBhdGgoKSkKK2ltcG9ydCBiYi50aW5mb2lsCisKK2RlZiB3Z2V0SG9tZXBhZ2UocG4sIGhvbWVwYWdlKToKKyAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNhbGwoJ3dnZXQgJyArICctcSAtVCA1IC10IDEgLS1zcGlkZXIgJyArIGhvbWVwYWdlLCBzaGVsbCA9IFRydWUpCisgICAgaWYgcmVzdWx0OgorICAgICAgICBiYi53YXJuKCJGYWlsZWQgdG8gdmVyaWZ5IEhPTUVQQUdFICglcykgb2YgJXMiICUgKGhvbWVwYWdlLCBwbikpCisgICAgICAgIHJldHVybiAxCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIDAKKworZGVmIHZlcmlmeUhvbWVwYWdlKGJiaGFuZGxlcik6CisgICAgcGtnX3BuID0gYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZS5wa2dfcG4KKyAgICBwbmxpc3QgPSBzb3J0ZWQocGtnX3BuKQorICAgIGNvdW50ID0gMAorICAgIGZvciBwbiBpbiBwbmxpc3Q6CisgICAgICAgIGZuID0gcGtnX3BuW3BuXS5wb3AoKQorICAgICAgICBkYXRhID0gYmIuY2FjaGUuQ2FjaGUubG9hZERhdGFGdWxsKGZuLCBiYmhhbmRsZXIuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmbiksIGJiaGFuZGxlci5jb25maWdfZGF0YSkKKyAgICAgICAgaG9tZXBhZ2UgPSBkYXRhLmdldFZhcigiSE9NRVBBR0UiKQorICAgICAgICBpZiBob21lcGFnZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1cmxsaWIyLnVybG9wZW4oaG9tZXBhZ2UsIHRpbWVvdXQ9NSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgY291bnQgPSBjb3VudCArIHdnZXRIb21lcGFnZShwbiwgaG9tZXBhZ2UpCisgICAgcmV0dXJuIGNvdW50CisKK2lmIF9fbmFtZV9fPT0nX19tYWluX18nOgorICAgIGZhaWxjb3VudCA9IDAKKyAgICBiYmhhbmRsZXIgPSBiYi50aW5mb2lsLlRpbmZvaWwoKQorICAgIGJiaGFuZGxlci5wcmVwYXJlKCkKKyAgICBwcmludCAiU3RhcnQgdG8gdmVyaWZ5IEhPTUVQQUdFOiIKKyAgICBmYWlsY291bnQgPSB2ZXJpZnlIb21lcGFnZShiYmhhbmRsZXIpCisgICAgcHJpbnQgImZpbmlzaCB0byB2ZXJpZnkgSE9NRVBBR0UuIgorICAgIHByaW50ICJTdW1tYXJ5OiAlcyBmYWlsZWQiICUgZmFpbGNvdW50CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvY3Atbm9lcnJvciBiL3lvY3RvLXBva3kvc2NyaXB0cy9jcC1ub2Vycm9yCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4ZWI5MGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY3Atbm9lcnJvcgpAQCAtMCwwICsxLDUyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQWxsb3cgY29weWluZyBvZiAkMSB0byAkMiBidXQgaWYgZmlsZXMgaW4gJDEgZGlzYXBwZWFyIGR1cmluZyB0aGUgY29weSBvcGVyYXRpb24sCisjIGRvbid0IGVycm9yLgorIyBBbHNvIGRvbid0IGVycm9yIGlmICQxIGRpc2FwcGVhcnMuCisjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAorCitkZWYgY29weXRyZWUoc3JjLCBkc3QsIHN5bWxpbmtzPUZhbHNlLCBpZ25vcmU9Tm9uZSk6CisgICAgIiIiQmFzZWQgb24gc2h1dGlsLmNvcHl0cmVlIiIiCisgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHNyYykKKyAgICB0cnk6CisgICAgICAgIG9zLm1ha2VkaXJzKGRzdCkKKyAgICBleGNlcHQgT1NFcnJvcjogCisgICAgICAgICMgQWxyZWFkeSBleGlzdHMKKyAgICAgICAgcGFzcworICAgIGVycm9ycyA9IFtdCisgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgIHNyY25hbWUgPSBvcy5wYXRoLmpvaW4oc3JjLCBuYW1lKQorICAgICAgICBkc3RuYW1lID0gb3MucGF0aC5qb2luKGRzdCwgbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZCA9IGRzdG5hbWUKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZHN0bmFtZSk6CisgICAgICAgICAgICAgICAgZCA9IG9zLnBhdGguam9pbihkc3RuYW1lLCBvcy5wYXRoLmJhc2VuYW1lKHNyY25hbWUpKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5saW5rKHNyY25hbWUsIGRzdG5hbWUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weTIoc3JjbmFtZSwgZHN0bmFtZSkKKyAgICAgICAgIyBjYXRjaCB0aGUgRXJyb3IgZnJvbSB0aGUgcmVjdXJzaXZlIGNvcHl0cmVlIHNvIHRoYXQgd2UgY2FuCisgICAgICAgICMgY29udGludWUgd2l0aCBvdGhlciBmaWxlcworICAgICAgICBleGNlcHQgc2h1dGlsLkVycm9yLCBlcnI6CisgICAgICAgICAgICBlcnJvcnMuZXh0ZW5kKGVyci5hcmdzWzBdKQorICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciwgd2h5OgorICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgoc3JjbmFtZSwgZHN0bmFtZSwgc3RyKHdoeSkpKQorICAgIHRyeToKKyAgICAgICAgc2h1dGlsLmNvcHlzdGF0KHNyYywgZHN0KQorICAgIGV4Y2VwdCBPU0Vycm9yLCB3aHk6CisgICAgICAgIGVycm9ycy5leHRlbmQoKHNyYywgZHN0LCBzdHIod2h5KSkpCisgICAgaWYgZXJyb3JzOgorICAgICAgICByYWlzZSBzaHV0aWwuRXJyb3IsIGVycm9ycworCit0cnk6CisgICAgY29weXRyZWUoc3lzLmFyZ3ZbMV0sIHN5cy5hcmd2WzJdKQorZXhjZXB0IHNodXRpbC5FcnJvcjoKKyAgIHBhc3MKK2V4Y2VwdCBPU0Vycm9yOgorICAgcGFzcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NyZWF0ZS1wdWxsLXJlcXVlc3QgYi95b2N0by1wb2t5L3NjcmlwdHMvY3JlYXRlLXB1bGwtcmVxdWVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xOWJhNTg4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NyZWF0ZS1wdWxsLXJlcXVlc3QKQEAgLTAsMCArMSwyNTggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMywgIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgUmlnaHRzIFJlc2VydmVkCisjIAorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorIworCisjCisjIFRoaXMgc2NyaXB0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcHJlcGFyZSBhIHNlcmllcyBvZiBwYXRjaGVzCisjIGFuZCBhIGNvdmVyIGxldHRlciBpbiBhbiBhcHByb3ByaWF0ZSBhbmQgY29uc2lzdGVudCBmb3JtYXQgZm9yCisjIHN1Ym1pc3Npb24gdG8gT3BlbiBFbWJlZGRlZCBhbmQgVGhlIFlvY3RvIFByb2plY3QsIGFzIHdlbGwgYXMgdG8KKyMgcmVsYXRlZCBwcm9qZWN0cyBhbmQgbGF5ZXJzLgorIworCitPRElSPXB1bGwtJCQKK1JFTEFUSVZFX1RPPSJtYXN0ZXIiCitDT01NSVRfSUQ9IkhFQUQiCitQUkVGSVg9IlBBVENIIgorUkZDPTAKKwordXNhZ2UoKSB7CitDTUQ9JChiYXNlbmFtZSAkMCkKK2NhdCA8PEVPTQorVXNhZ2U6ICRDTUQgWy1oXSBbLW8gb3V0cHV0X2Rpcl0gWy1tIG1zZ19ib2R5X2ZpbGVdIFstcyBzdWJqZWN0XSBbLXIgcmVsYXRpdmVfdG9dIFstaSBjb21taXRfaWRdIFstZCByZWxhdGl2ZV9kaXJdIC11IHJlbW90ZSBbLWIgYnJhbmNoXQorICAtYiBicmFuY2ggICAgICAgICAgIEJyYW5jaCBuYW1lIGluIHRoZSBzcGVjaWZpZWQgcmVtb3RlIChkZWZhdWx0OiBjdXJyZW50IGJyYW5jaCkKKyAgLWMgICAgICAgICAgICAgICAgICBDcmVhdGUgYW4gUkZDIChSZXF1ZXN0IGZvciBDb21tZW50KSBwYXRjaCBzZXJpZXMKKyAgLWggICAgICAgICAgICAgICAgICBEaXNwbGF5IHRoaXMgaGVscCBtZXNzYWdlCisgIC1pIGNvbW1pdF9pZCAgICAgICAgRW5kaW5nIGNvbW1pdCAoZGVmYXVsdDogSEVBRCkKKyAgLW0gbXNnX2JvZHlfZmlsZSAgICBUaGUgZmlsZSBjb250YWluaW5nIGEgYmx1cmIgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgc3VtbWFyeSBlbWFpbAorICAtbyBvdXRwdXRfZGlyICAgICAgIFNwZWNpZnkgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBtZXNzYWdlcyAoZGVmYXVsdDogcHVsbC1QSUQpCisgIC1wIHByZWZpeCAgICAgICAgICAgVXNlIFtwcmVmaXggTi9NXSBpbnN0ZWFkIG9mIFtQQVRDSCBOL01dIGFzIHRoZSBzdWJqZWN0IHByZWZpeAorICAtciByZWxhdGl2ZV90byAgICAgIFN0YXJ0aW5nIGNvbW1pdCAoZGVmYXVsdDogbWFzdGVyKQorICAtcyBzdWJqZWN0ICAgICAgICAgIFRoZSBzdWJqZWN0IHRvIGJlIGluc2VydGVkIGludG8gdGhlIHN1bW1hcnkgZW1haWwKKyAgLXUgcmVtb3RlICAgICAgICAgICBUaGUgZ2l0IHJlbW90ZSB3aGVyZSB0aGUgYnJhbmNoIGlzIGxvY2F0ZWQKKyAgLWQgcmVsYXRpdmVfZGlyICAgICBHZW5lcmF0ZSBwYXRjaGVzIHJlbGF0aXZlIHRvIGRpcmVjdG9yeQorCisgRXhhbXBsZXM6CisgICAkQ01EIC11IGNvbnRyaWIgLWIgbml0aW4vYmFzaWMKKyAgICRDTUQgLXUgY29udHJpYiAtciBkaXN0cm8vbWFzdGVyIC1pIG5pdGluL2Rpc3RybyAtYiBuaXRpbi9kaXN0cm8KKyAgICRDTUQgLXUgY29udHJpYiAtciBtYXN0ZXIgLWkgbWlzYyAtYiBuaXRpbi9taXNjIC1vIHB1bGwtbWlzYworICAgJENNRCAtdSBjb250cmliIC1wICJSRkMgUEFUQ0giIC1iIG5pdGluL2V4cGVyaW1lbnRhbAorICAgJENNRCAtdSBjb250cmliIC1pIG1pc2MgLWIgbml0aW4vbWlzYyAtZCAuL2JpdGJha2UKK0VPTQorfQorCisjIFBhcnNlIGFuZCB2YWxpZGF0ZSBhcmd1bWVudHMKK3doaWxlIGdldG9wdHMgImI6Y2Q6aGk6bTpvOnA6cjpzOnU6IiBPUFQ7IGRvCisJY2FzZSAkT1BUIGluCisJYikKKwkJQlJBTkNIPSIkT1BUQVJHIgorCQk7OworCWMpCisJCVJGQz0xCisJCTs7CisJZCkKKwkJUkVMRElSPSIkT1BUQVJHIgorCQk7OworCWgpCisJCXVzYWdlCisJCWV4aXQgMAorCQk7OworCWkpCisJCUNPTU1JVF9JRD0iJE9QVEFSRyIKKwkJOzsKKwltKQorCQlCT0RZPSIkT1BUQVJHIgorCQlpZiBbICEgLWUgIiRCT0RZIiBdOyB0aGVuCisJCQllY2hvICJFUlJPUjogQm9keSBmaWxlIGRvZXMgbm90IGV4aXN0IgorCQkJZXhpdCAxCisJCWZpCisJCTs7CisJbykKKwkJT0RJUj0iJE9QVEFSRyIKKwkJOzsKKwlwKQorCQlQUkVGSVg9IiRPUFRBUkciCisJCTs7CisJcikKKwkJUkVMQVRJVkVfVE89IiRPUFRBUkciCisJCTs7CisJcykKKwkJU1VCSkVDVD0iJE9QVEFSRyIKKwkJOzsKKwl1KQorCQlSRU1PVEU9IiRPUFRBUkciCisJCVJFTU9URV9VUkw9JChnaXQgY29uZmlnIHJlbW90ZS4kUkVNT1RFLnVybCkKKwkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCQllY2hvICJFUlJPUjogZ2l0IGNvbmZpZyBmYWlsZWQgdG8gZmluZCBhIHVybCBmb3IgJyRSRU1PVEUnIgorCQkJZWNobworCQkJZWNobyAiVG8gYWRkIGEgcmVtb3RlIHVybCBmb3IgJFJFTU9URSwgdXNlOiIKKwkJCWVjaG8gIiAgZ2l0IGNvbmZpZyByZW1vdGUuJFJFTU9URS51cmwgPHVybD4iCisJCQlleGl0IDEKKwkJZmkKKworCQkjIFJld3JpdGUgcHJpdmF0ZSBVUkxzIHRvIHB1YmxpYyBVUkxzCisJCSMgRGV0ZXJtaW5lIHRoZSByZXBvc2l0b3J5IG5hbWUgZm9yIHVzZSBpbiB0aGUgV0VCX1VSTCBsYXRlcgorCQljYXNlICIkUkVNT1RFX1VSTCIgaW4KKwkJKkAqKQorCQkJVVNFUl9SRT0iW0EtWmEtejAtOV8uQF1bQS1aYS16MC05Xy5ALV0qXCRcPyIKKwkJCVBST1RPX1JFPSJbYS16XVthLXorXSo6Ly8iCisJCQlHSVRfUkU9IlwoXlwoJFBST1RPX1JFXClcPyRVU0VSX1JFQFwpXChbXjovXSpcKVs6L11cKC4qXCkiCisJCQlSRU1PVEVfVVJMPSR7UkVNT1RFX1VSTCUuZ2l0fQorCQkJUkVNT1RFX1JFUE89JChlY2hvICRSRU1PVEVfVVJMIHwgc2VkICJzIyRHSVRfUkUjXDQjIikKKwkJCVJFTU9URV9VUkw9JChlY2hvICRSRU1PVEVfVVJMIHwgc2VkICJzIyRHSVRfUkUjZ2l0Oi8vXDMvXDQjIikKKwkJCTs7CisJCSopCisJCQllY2hvICJXQVJOSU5HOiBVbnJlY29nbml6ZWQgcmVtb3RlIFVSTDogJFJFTU9URV9VUkwiCisJCQllY2hvICIgICAgICAgICBUaGUgcHVsbCBhbmQgYnJvd3NlIFVSTHMgd2lsbCBsaWtlbHkgYmUgaW5jb3JyZWN0IgorCQkJOzsKKwkJZXNhYworCQk7OworCWVzYWMKK2RvbmUKKworaWYgWyAteiAiJEJSQU5DSCIgXTsgdGhlbgorCUJSQU5DSD0kKGdpdCBicmFuY2ggfCBncmVwIC1lICJeXCogIiB8IGN1dCAtZCcgJyAtZjIpCisJZWNobyAiTk9URTogQXNzdW1pbmcgcmVtb3RlIGJyYW5jaCAnJEJSQU5DSCcsIHVzZSAtYiB0byBvdmVycmlkZS4iCitmaQorCitpZiBbIC16ICIkUkVNT1RFX1VSTCIgXTsgdGhlbgorCWVjaG8gIkVSUk9SOiBNaXNzaW5nIHBhcmFtZXRlciAtdSwgbm8gZ2l0IHJlbW90ZSEiCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK2lmIFsgJFJGQyAtZXEgMSBdOyB0aGVuCisJUFJFRklYPSJSRkMgJFBSRUZJWCIKK2ZpCisKKworIyBTZXQgV0VCX1VSTCBmcm9tIGtub3duIHJlbW90ZXMKK1dFQl9VUkw9IiIKK2Nhc2UgIiRSRU1PVEVfVVJMIiBpbgorCSpnaXQueW9jdG9wcm9qZWN0Lm9yZyopCisJCVdFQl9VUkw9Imh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0LmNnaS8kUkVNT1RFX1JFUE8vbG9nLz9oPSRCUkFOQ0giCisJCTs7CisJKmdpdC5wb2t5bGludXgub3JnKikKKwkJV0VCX1VSTD0iaHR0cDovL2dpdC5wb2t5bGludXgub3JnL2NnaXQuY2dpLyRSRU1PVEVfUkVQTy9sb2cvP2g9JEJSQU5DSCIKKwkJOzsKKwkqZ2l0Lm9wZW5lbWJlZGRlZC5vcmcqKQorCQlXRUJfVVJMPSJodHRwOi8vY2dpdC5vcGVuZW1iZWRkZWQub3JnL2NnaXQuY2dpLyRSRU1PVEVfUkVQTy9sb2cvP2g9JEJSQU5DSCIKKwkJOzsKKwkqZ2l0aHViLmNvbSopCisJCVdFQl9VUkw9Imh0dHBzOi8vZ2l0aHViLmNvbS8kUkVNT1RFX1JFUE8vdHJlZS8kQlJBTkNIIgorCQk7OworZXNhYworCisjIFBlcmZvcm0gYSBzYW5pdHkgdGVzdCBvbiB0aGUgd2ViIFVSTC4gSXNzdWUgYSB3YXJuaW5nIGlmIGl0IGlzIG5vdAorIyBhY2Nlc3NpYmxlLCBidXQgZG8gbm90IGFib3J0IGFzIHVzZXJzIG1heSB3YW50IHRvIHJ1biBvZmZsaW5lLgoraWYgWyAtbiAiJFdFQl9VUkwiIF07IHRoZW4KKwl3Z2V0IC0tbm8tY2hlY2stY2VydGlmaWNhdGUgLXEgJFdFQl9VUkwgLU8gL2Rldi9udWxsCisJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCWVjaG8gIldBUk5JTkc6IEJyYW5jaCAnJEJSQU5DSCcgd2FzIG5vdCBmb3VuZCBvbiB0aGUgY29udHJpYiBnaXQgdHJlZS4iCisJCWVjaG8gIiAgICAgICAgIFBsZWFzZSBjaGVjayB5b3VyIHJlbW90ZSBhbmQgYnJhbmNoIHBhcmFtZXRlciBiZWZvcmUgc2VuZGluZy4iCisJCWVjaG8gIiIKKwlmaQorZmkKKworaWYgWyAtZSAkT0RJUiBdOyB0aGVuCisJZWNobyAiRVJST1I6IG91dHB1dCBkaXJlY3RvcnkgJE9ESVIgZXhpc3RzLiIKKwlleGl0IDEKK2ZpCitta2RpciAkT0RJUgorCitpZiBbIC1uICIkUkVMRElSIiBdOyB0aGVuCisJT0RJUj0kKHJlYWxwYXRoICRPRElSKQorCXBkaXI9JChwd2QpCisJY2QgJFJFTERJUgorCWV4dHJhb3B0cz0iLS1yZWxhdGl2ZSIKK2ZpCisKKyMgR2VuZXJhdGUgdGhlIHBhdGNoZXMgYW5kIGNvdmVyIGxldHRlcgorZ2l0IGZvcm1hdC1wYXRjaCAkZXh0cmFvcHRzIC1NNDAgLS1zdWJqZWN0LXByZWZpeD0iJFBSRUZJWCIgLW4gLW8gJE9ESVIgLS10aHJlYWQ9c2hhbGxvdyAtLWNvdmVyLWxldHRlciAkUkVMQVRJVkVfVE8uLiRDT01NSVRfSUQgPiAvZGV2L251bGwKKworWyAtbiAiJFJFTERJUiIgXSAmJiBjZCAkcGRpcgorCisjIEN1c3RvbWl6ZSB0aGUgY292ZXIgbGV0dGVyCitDTD0iJE9ESVIvMDAwMC1jb3Zlci1sZXR0ZXIucGF0Y2giCitQTT0iJE9ESVIvcHVsbC1tc2ciCitHSVRfVkVSU0lPTj0kKGBnaXQgLS12ZXJzaW9uYCB8IHRyIC1kICdbOmFscGhhOl1bOnNwYWNlOl0uJyB8IHNlZCAncy9cKC4uLlwpLiovXDEvJykKK05FV0VSX0dJVF9WRVJTSU9OPTIxMAoraWYgWyAkR0lUX1ZFUlNJT04gLWx0ICRORVdFUl9HSVRfVkVSU0lPTiBdOyB0aGVuCisJZ2l0IHJlcXVlc3QtcHVsbCAkUkVMQVRJVkVfVE8gJFJFTU9URV9VUkwgJENPTU1JVF9JRCA+PiAiJFBNIgorZWxzZQorCWdpdCByZXF1ZXN0LXB1bGwgJFJFTEFUSVZFX1RPICRSRU1PVEVfVVJMIDokQlJBTkNIID4+ICIkUE0iCitmaQoraWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJZWNobyAiRVJST1I6IGdpdCByZXF1ZXN0LXB1bGwgcmVwb3J0ZWQgYW4gZXJyb3IiCisJZXhpdCAxCitmaQorCisjIFRoZSBjb3ZlciBsZXR0ZXIgYWxyZWFkeSBoYXMgYSBkaWZmc3RhdCwgcmVtb3ZlIGl0IGZyb20gdGhlIHB1bGwtbXNnCisjIGJlZm9yZSBpbnNlcnRpbmcgaXQuCitzZWQgLW4gIjAsXCMkUkVNT1RFX1VSTCMgcCIgIiRQTSIgfCBzZWQgLWkgIi9CTFVSQiBIRVJFLyByIC9kZXYvc3RkaW4iICIkQ0wiCitybSAiJFBNIgorCisjIElmIHRoaXMgaXMgYW4gUkZDLCBtYWtlIHRoYXQgY2xlYXIgaW4gdGhlIGNvdmVyIGxldHRlcgoraWYgWyAkUkZDIC1lcSAxIF07IHRoZW4KKyhjYXQgPDxFT00KK1BsZWFzZSByZXZpZXcgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIGZvciBzdWl0YWJpbGl0eSBmb3IgaW5jbHVzaW9uLiBJZiB5b3UgaGF2ZQorYW55IG9iamVjdGlvbnMgb3Igc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LCBwbGVhc2UgcmVzcG9uZCB0byB0aGUgcGF0Y2hlcy4gSWYKK3lvdSBhZ3JlZSB3aXRoIHRoZSBjaGFuZ2VzLCBwbGVhc2UgcHJvdmlkZSB5b3VyIEFja2VkLWJ5LgorCitFT00KKykgfCBzZWQgLWkgIi9CTFVSQiBIRVJFLyByIC9kZXYvc3RkaW4iICIkQ0wiCitmaQorCisjIEluc2VydCB0aGUgV0VCX1VSTCBpZiB0aGVyZSBpcyBvbmUKK2lmIFsgLW4gIiRXRUJfVVJMIiBdOyB0aGVuCisJZWNobyAiICAkV0VCX1VSTCIgfCBzZWQgLWkgIlwjJFJFTU9URV9VUkwjIHIgL2Rldi9zdGRpbiIgIiRDTCIKK2ZpCisKKworIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBtZXNzYWdlIGJvZHksIGluc2VydCBpdCBpbnRvIHRoZSBjb3ZlciBsZXR0ZXIgYW5kCisjIHJlbW92ZSB0aGUgQkxVUkIgdG9rZW4uCitpZiBbIC1uICIkQk9EWSIgXTsgdGhlbgorCXNlZCAtaSAiL0JMVVJCIEhFUkUvIHIgJEJPRFkiICIkQ0wiCisJc2VkIC1pICIvQkxVUkIgSEVSRS8gZCIgIiRDTCIKK2ZpCisKKyMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgc3ViamVjdCwgcmVwbGFjZSB0aGUgU1VCSkVDVCB0b2tlbiB3aXRoIGl0LgoraWYgWyAtbiAiJFNVQkpFQ1QiIF07IHRoZW4KKwlzZWQgLWkgLWUgInMvXCpcKlwqIFNVQkpFQ1QgSEVSRSBcKlwqXCovJFNVQkpFQ1QvIiAiJENMIgorZmkKKworCisjIEdlbmVyYXRlIHJlcG9ydCBmb3IgdXNlcgorY2F0IDw8RU9NCitUaGUgZm9sbG93aW5nIHBhdGNoZXMgaGF2ZSBiZWVuIHByZXBhcmVkOgorJChmb3IgUEFUQ0ggaW4gJChscyAkT0RJUi8qKTsgZG8gZWNobyAiICAgICRQQVRDSCI7IGRvbmUpCisKK1JldmlldyB0aGVpciBjb250ZW50LCBlc3BlY2lhbGx5IHRoZSBzdW1tYXJ5IG1haWw6CisgICAgJENMCisKK1doZW4geW91IGFyZSBzYXRpc2ZpZWQsIHlvdSBjYW4gc2VuZCB0aGVtIHdpdGg6CisgICAgc2VuZC1wdWxsLXJlcXVlc3QgLWEgLXAgJE9ESVIKK0VPTQorCisjIENoZWNrIHRoZSBwYXRjaGVzIGZvciB0cmFpbGluZyB3aGl0ZSBzcGFjZQorZWdyZXAgLXEgLWUgIl5cKy4qXHMrJCIgJE9ESVIvKgoraWYgWyAkPyAtbmUgMSBdOyB0aGVuCisJZWNobworCWVjaG8gIldBUk5JTkc6IFRyYWlsaW5nIHdoaXRlIHNwYWNlIGRldGVjdGVkIGF0IHRoZXNlIGxvY2F0aW9ucyIKKwllZ3JlcCAtbkggLS1jb2xvciAtZSAiXlwrLipccyskIiAkT0RJUi8qCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2Nyb3NzdGFwIGIveW9jdG8tcG9reS9zY3JpcHRzL2Nyb3NzdGFwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4MzE3Y2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY3Jvc3N0YXAKQEAgLTAsMCArMSwxNDggQEAKKyMhL2Jpbi9iYXNoCisjCisjIFJ1biBhIHN5c3RlbXRhcCBzY3JpcHQgb24gcmVtb3RlIHRhcmdldAorIworIyBFeGFtcGxlcyAocnVuIG9uIGJ1aWxkIGhvc3QsIHRhcmdldCBpcyAxOTIuMTY4LjEueHh4KToKKyMgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudiIKKyMgICAkIGNkIH4vbXkvc3lzdGVtdGFwL3NjcmlwdHMiCisjCisjICAgJCBjcm9zc3RhcCByb290QDE5Mi4xNjguMS54eHggbXlzY3JpcHQuc3RwIgorIyAgICQgY3Jvc3N0YXAgcm9vdEAxOTIuMTY4LjEueHh4IG15c2NyaXB0LXdpdGgtYXJncy5zdHAgOTkgbmluZXR5bmluZSIKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworZnVuY3Rpb24gdXNhZ2UoKSB7CisgICAgZWNobyAiVXNhZ2U6ICQwIDx1c2VyQGhvc3RuYW1lPiA8c3l0ZW10YXAtc2NyaXB0PiBbYWRkaXRpb25hbCBzeXN0ZW10YXAtc2NyaXB0IGFyZ3NdIgorfQorCitmdW5jdGlvbiBzZXR1cF91c2FnZSgpIHsKKyAgICBlY2hvICIiCisgICAgZWNobyAiJ2Nyb3NzdGFwJyByZXF1aXJlcyBhIGxvY2FsIHNkayBidWlsZCBvZiB0aGUgdGFyZ2V0IHN5c3RlbSIKKyAgICBlY2hvICIob3IgYSBidWlsZCB0aGF0IGluY2x1ZGVzICd0b29scy1wcm9maWxlJykgaW4gb3JkZXIgdG8gYnVpbGQiCisgICAgZWNobyAia2VybmVsIG1vZHVsZXMgdGhhdCBjYW4gcHJvYmUgdGhlIHRhcmdldCBzeXN0ZW0uIgorICAgIGVjaG8gIiIKKyAgICBlY2hvICJQcmFjdGljYWxseSBzcGVha2luZywgdGhhdCBtZWFucyB5b3UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nOiIKKyAgICBlY2hvICIgIC0gSWYgeW91J3JlIHJ1bm5pbmcgYSBwcmUtYnVpbHQgaW1hZ2UsIGRvd25sb2FkIHRoZSByZWxlYXNlIgorICAgIGVjaG8gIiAgICBhbmQvb3IgQlNQIHRhcmJhbGxzIHVzZWQgdG8gYnVpbGQgdGhlIGltYWdlLiIKKyAgICBlY2hvICIgIC0gSWYgeW91J3JlIHdvcmtpbmcgZnJvbSBnaXQgc291cmNlcywganVzdCBjbG9uZSB0aGUgbWV0YWRhdGEiCisgICAgZWNobyAiICAgIGFuZCBCU1AgbGF5ZXJzIG5lZWRlZCB0byBidWlsZCB0aGUgaW1hZ2UgeW91J2xsIGJlIGJvb3RpbmcuIgorICAgIGVjaG8gIiAgLSBNYWtlIHN1cmUgeW91J3JlIHByb3Blcmx5IHNldCB1cCB0byBidWlsZCBhIG5ldyBpbWFnZSAoc2VlIgorICAgIGVjaG8gIiAgICB0aGUgQlNQIFJFQURNRSBhbmQvb3IgdGhlIHdpZGVseSBhdmFpbGFibGUgYmFzaWMgZG9jdW1lbnRhdGlvbiIKKyAgICBlY2hvICIgICAgdGhhdCBkaXNjdXNzZXMgaG93IHRvIGJ1aWxkIGltYWdlcykuIgorICAgIGVjaG8gIiAgLSBCdWlsZCBhbiAtc2RrIHZlcnNpb24gb2YgdGhlIGltYWdlIGUuZy46IgorICAgIGVjaG8gIiAgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8tc2RrIgorICAgIGVjaG8gIiAgT1IiCisgICAgZWNobyAiICAtIEJ1aWxkIGEgbm9uLXNkayBpbWFnZSBidXQgaW5jbHVkZSB0aGUgcHJvZmlsaW5nIHRvb2xzOiIKKyAgICBlY2hvICIgICAgICBbIGVkaXQgbG9jYWwuY29uZiBhbmQgYWRkICd0b29scy1wcm9maWxlJyB0byB0aGUgZW5kIG9mIgorICAgIGVjaG8gIiAgICAgICAgdGhlIEVYVFJBX0lNQUdFX0ZFQVRVUkVTIHZhcmlhYmxlIF0iCisgICAgZWNobyAiICAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byIKKyAgICBlY2hvICIiCisgICAgZWNobyAiICBbIE5PVEUgdGhhdCAnY3Jvc3N0YXAnIG5lZWRzIHRvIGJlIGFibGUgdG8gc3NoIGludG8gdGhlIHRhcmdldCIKKyAgICBlY2hvICIgICAgc3lzdGVtLCB3aGljaCBpc24ndCBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gLW1pbmltYWwgaW1hZ2VzLiBdIgorICAgIGVjaG8gIiIKKyAgICBlY2hvICJPbmNlIHlvdSd2ZSBidWlsZCB0aGUgaW1hZ2Ugb24gdGhlIGhvc3Qgc3lzdGVtLCB5b3UncmUgcmVhZHkgdG8iCisgICAgZWNobyAiYm9vdCBpdCAob3IgdGhlIGVxdWl2YWxlbnQgcHJlLWJ1aWx0IGltYWdlKSBhbmQgdXNlICdjcm9zc3RhcCciCisgICAgZWNobyAidG8gcHJvYmUgaXQgKHlvdSBuZWVkIHRvIHNvdXJjZSB0aGUgZW52aXJvbm1lbnQgYXMgdXN1YWwgZmlyc3QpOiIKKyAgICBlY2hvICIiCisgICAgZWNobyAiICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52IgorICAgIGVjaG8gIiAgICAkIGNkIH4vbXkvc3lzdGVtdGFwL3NjcmlwdHMiCisgICAgZWNobyAiICAgICQgY3Jvc3N0YXAgcm9vdEAxOTIuMTY4LjEueHh4IG15c2NyaXB0LnN0cCIKKyAgICBlY2hvICIiCit9CisKK2Z1bmN0aW9uIHN5c3RlbXRhcF90YXJnZXRfYXJjaCgpIHsKKyAgICBTWVNURU1UQVBfVEFSR0VUX0FSQ0g9JDEKKyAgICBjYXNlICRTWVNURU1UQVBfVEFSR0VUX0FSQ0ggaW4KKyAgICAgICAgaT84NikKKyAgICAgICAgICAgIFNZU1RFTVRBUF9UQVJHRVRfQVJDSD0iaTM4NiIKKyAgICAgICAgICAgIDs7CisgICAgICAgIHg4Nj82NCopCisgICAgICAgICAgICBTWVNURU1UQVBfVEFSR0VUX0FSQ0g9Ing4Nl82NCIKKyAgICAgICAgICAgIDs7CisgICAgICAgIGFybSopCisgICAgICAgICAgICBTWVNURU1UQVBfVEFSR0VUX0FSQ0g9ImFybSIKKyAgICAgICAgICAgIDs7CisgICAgICAgIHBvd2VycGMqKQorICAgICAgICAgICAgU1lTVEVNVEFQX1RBUkdFVF9BUkNIPSJwb3dlcnBjIgorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworfQorCitpZiBbICQjIC1sdCAyIF07IHRoZW4KKwl1c2FnZQorCWV4aXQgMQorZmkKKworaWYgWyAteiAiJEJVSUxERElSIiBdOyB0aGVuCisgICAgZWNobyAiRXJyb3I6IFVuYWJsZSB0byBmaW5kIHRoZSBCVUlMRERJUiBlbnZpcm9ubWVudCB2YXJpYWJsZS4iCisgICAgZWNobyAiRGlkIHlvdSBmb3JnZXQgdG8gc291cmNlIHlvdXIgYnVpbGQgc3lzdGVtIGVudmlyb25tZW50IHNldHVwIHNjcmlwdD8iCisgICAgZXhpdCAxCitmaQorCitwdXNoZCAkUFdECitjZCAkQlVJTERESVIKK0JJVEJBS0VfVkFSUz1gYml0YmFrZSAtZSB2aXJ0dWFsL2tlcm5lbGAKK3BvcGQKKworU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOPSQoZWNobyAiJEJJVEJBS0VfVkFSUyIgfCBncmVwIF5TVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU4gXAorICB8IGN1dCAtZCAnPScgLWYyIHwgY3V0IC1kICciJyAtZjIpCitTVEFHSU5HX0JJTkRJUl9UT09MUFJFRklYPSQoZWNobyAiJEJJVEJBS0VfVkFSUyIgfCBncmVwIF5UQVJHRVRfUFJFRklYIFwKKyAgfCBjdXQgLWQgJz0nIC1mMiB8IGN1dCAtZCAnIicgLWYyKQorU1lTVEVNVEFQX0hPU1RfSU5TVEFMTERJUj0kKGVjaG8gIiRCSVRCQUtFX1ZBUlMiIHwgZ3JlcCBeU1RBR0lOR19ESVJfTkFUSVZFIFwKKyAgfCBjdXQgLWQgJz0nIC1mMiB8IGN1dCAtZCAnIicgLWYyKQorVEFSR0VUX0FSQ0g9JChlY2hvICIkQklUQkFLRV9WQVJTIiB8IGdyZXAgXlRSQU5TTEFURURfVEFSR0VUX0FSQ0ggXAorICB8IGN1dCAtZCAnPScgLWYyIHwgY3V0IC1kICciJyAtZjIpCitUQVJHRVRfS0VSTkVMX0JVSUxERElSPSQoZWNobyAiJEJJVEJBS0VfVkFSUyIgfCBncmVwIF5CPSBcCisgIHwgY3V0IC1kICc9JyAtZjIgfCBjdXQgLWQgJyInIC1mMikKKworc3lzdGVtdGFwX3RhcmdldF9hcmNoICIkVEFSR0VUX0FSQ0giCisKK2lmIFsgISAtZCAkVEFSR0VUX0tFUk5FTF9CVUlMRERJUiBdIHx8CisgICBbICEgLWYgJFRBUkdFVF9LRVJORUxfQlVJTERESVIvdm1saW51eCBdOyB0aGVuCisgICAgZWNobyAtZSAiXG5FcnJvcjogTm8gdGFyZ2V0IGtlcm5lbCBidWlsZCBmb3VuZC4iCisgICAgZWNobyAtZSAiRGlkIHlvdSBmb3JnZXQgdG8gY3JlYXRlIGEgbG9jYWwgYnVpbGQgb2YgeW91ciBpbWFnZT8iCisgICAgc2V0dXBfdXNhZ2UKKyAgICBleGl0IDEKK2ZpCisKK2lmIFsgISAtZiAkU1lTVEVNVEFQX0hPU1RfSU5TVEFMTERJUi91c3IvYmluL3N0YXAgXTsgdGhlbgorICAgIGVjaG8gLWUgIlxuRXJyb3I6IE5hdGl2ZSAoaG9zdCkgc3lzdGVtdGFwIG5vdCBmb3VuZC4iCisgICAgZWNobyAtZSAiRGlkIHlvdSBhY2NpZGVudGFsbHkgYnVpbGQgYSBsb2NhbCBub24tc2RrIGltYWdlPyAob3IgZm9yZ2V0IHRvIgorICAgIGVjaG8gLWUgImFkZCAndG9vbHMtcHJvZmlsZScgdG8gRVhUUkFfSU1BR0VfRkVBVFVSRVMgaW4geW91ciBsb2NhbC5jb25mKT8iCisgICAgc2V0dXBfdXNhZ2UKKyAgICBleGl0IDEKK2ZpCisKK3RhcmdldF91c2VyX2hvc3RuYW1lPSIkMSIKK2Z1bGxfc2NyaXB0X25hbWU9IiQyIgorc2NyaXB0X25hbWU9JChiYXNlbmFtZSAiJDIiKQorc2NyaXB0X2Jhc2U9JHtzY3JpcHRfbmFtZSUuKn0KK3NoaWZ0IDIKKworJHtTWVNURU1UQVBfSE9TVF9JTlNUQUxMRElSfS91c3IvYmluL3N0YXAgXAorICAtYSAke1NZU1RFTVRBUF9UQVJHRVRfQVJDSH0gXAorICAtQiBDUk9TU19DT01QSUxFPSIke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0vJHtTVEFHSU5HX0JJTkRJUl9UT09MUFJFRklYfSIgXAorICAtciAke1RBUkdFVF9LRVJORUxfQlVJTERESVJ9IFwKKyAgLUkgJHtTWVNURU1UQVBfSE9TVF9JTlNUQUxMRElSfS91c3Ivc2hhcmUvc3lzdGVtdGFwL3RhcHNldCBcCisgIC1SICR7U1lTVEVNVEFQX0hPU1RfSU5TVEFMTERJUn0vdXNyL3NoYXJlL3N5c3RlbXRhcC9ydW50aW1lIFwKKyAgLS1yZW1vdGU9JHRhcmdldF91c2VyX2hvc3RuYW1lIFwKKyAgLW0gJHNjcmlwdF9iYXNlIFwKKyAgICRmdWxsX3NjcmlwdF9uYW1lICIkQCIKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvZGV2dG9vbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9kZXZ0b29sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3ZGY5NTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvZGV2dG9vbApAQCAtMCwwICsxLDI5NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgT3BlbkVtYmVkZGVkIERldmVsb3BtZW50IHRvb2wKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgZ2xvYgoraW1wb3J0IHJlCitpbXBvcnQgQ29uZmlnUGFyc2VyCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGxvZ2dpbmcKKworYmFzZXBhdGggPSAnJword29ya3NwYWNlID0ge30KK2NvbmZpZyA9IE5vbmUKK2NvbnRleHQgPSBOb25lCisKKworc2NyaXB0c19wYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQorbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKK3N5cy5wYXRoID0gc3lzLnBhdGggKyBbbGliX3BhdGhdCitmcm9tIGRldnRvb2wgaW1wb3J0IERldnRvb2xFcnJvciwgc2V0dXBfdGluZm9pbAoraW1wb3J0IHNjcmlwdHV0aWxzCitsb2dnZXIgPSBzY3JpcHR1dGlscy5sb2dnZXJfY3JlYXRlKCdkZXZ0b29sJykKKworcGx1Z2lucyA9IFtdCisKKworY2xhc3MgQ29uZmlnSGFuZGxlcihvYmplY3QpOgorICAgIGNvbmZpZ19maWxlID0gJycKKyAgICBjb25maWdfb2JqID0gTm9uZQorICAgIGluaXRfcGF0aCA9ICcnCisgICAgd29ya3NwYWNlX3BhdGggPSAnJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgc2VsZi5jb25maWdfZmlsZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYuY29uZmlnX29iaiA9IENvbmZpZ1BhcnNlci5TYWZlQ29uZmlnUGFyc2VyKCkKKworICAgIGRlZiBnZXQoc2VsZiwgc2VjdGlvbiwgb3B0aW9uLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXQgPSBzZWxmLmNvbmZpZ19vYmouZ2V0KHNlY3Rpb24sIG9wdGlvbikKKyAgICAgICAgZXhjZXB0IChDb25maWdQYXJzZXIuTm9PcHRpb25FcnJvciwgQ29uZmlnUGFyc2VyLk5vU2VjdGlvbkVycm9yKToKKyAgICAgICAgICAgIGlmIGRlZmF1bHQgIT0gTm9uZToKKyAgICAgICAgICAgICAgICByZXQgPSBkZWZhdWx0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiByZXQKKworICAgIGRlZiByZWFkKHNlbGYpOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmNvbmZpZ19maWxlKToKKyAgICAgICAgICAgIHNlbGYuY29uZmlnX29iai5yZWFkKHNlbGYuY29uZmlnX2ZpbGUpCisKKyAgICAgICAgICAgIGlmIHNlbGYuY29uZmlnX29iai5oYXNfb3B0aW9uKCdHZW5lcmFsJywgJ2luaXRfcGF0aCcpOgorICAgICAgICAgICAgICAgIHB0aCA9IHNlbGYuZ2V0KCdHZW5lcmFsJywgJ2luaXRfcGF0aCcpCisgICAgICAgICAgICAgICAgc2VsZi5pbml0X3BhdGggPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsIHB0aCkKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5pbml0X3BhdGgpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ2luaXRfcGF0aCAlcyBzcGVjaWZpZWQgaW4gY29uZmlnIGZpbGUgY2Fubm90IGJlIGZvdW5kJyAlIHB0aCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ19vYmouYWRkX3NlY3Rpb24oJ0dlbmVyYWwnKQorCisgICAgICAgIHNlbGYud29ya3NwYWNlX3BhdGggPSBzZWxmLmdldCgnR2VuZXJhbCcsICd3b3Jrc3BhY2VfcGF0aCcsIG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ3dvcmtzcGFjZScpKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisKKyAgICBkZWYgd3JpdGUoc2VsZik6CisgICAgICAgIGxvZ2dlci5kZWJ1Zygnd3JpdGluZyB0byBjb25maWcgZmlsZSAlcycgJSBzZWxmLmNvbmZpZ19maWxlKQorICAgICAgICBzZWxmLmNvbmZpZ19vYmouc2V0KCdHZW5lcmFsJywgJ3dvcmtzcGFjZV9wYXRoJywgc2VsZi53b3Jrc3BhY2VfcGF0aCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuY29uZmlnX2ZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuY29uZmlnX29iai53cml0ZShmKQorCitjbGFzcyBDb250ZXh0OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGt3YXJncykKKworCitkZWYgcmVhZF93b3Jrc3BhY2UoKToKKyAgICBnbG9iYWwgd29ya3NwYWNlCisgICAgd29ya3NwYWNlID0ge30KKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKToKKyAgICAgICAgaWYgY29udGV4dC5maXhlZF9zZXR1cDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigid29ya3NwYWNlIGxheWVyIG5vdCBzZXQgdXAiKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdDcmVhdGluZyB3b3Jrc3BhY2UgbGF5ZXIgaW4gJXMnICUgY29uZmlnLndvcmtzcGFjZV9wYXRoKQorICAgICAgICAgICAgX2NyZWF0ZV93b3Jrc3BhY2UoY29uZmlnLndvcmtzcGFjZV9wYXRoLCBjb25maWcsIGJhc2VwYXRoKQorICAgIGlmIG5vdCBjb250ZXh0LmZpeGVkX3NldHVwOgorICAgICAgICBfZW5hYmxlX3dvcmtzcGFjZV9sYXllcihjb25maWcud29ya3NwYWNlX3BhdGgsIGNvbmZpZywgYmFzZXBhdGgpCisKKyAgICBsb2dnZXIuZGVidWcoJ1JlYWRpbmcgd29ya3NwYWNlIGluICVzJyAlIGNvbmZpZy53b3Jrc3BhY2VfcGF0aCkKKyAgICBleHRlcm5hbHNyY19yZSA9IHJlLmNvbXBpbGUocideRVhURVJOQUxTUkMoX3BuLShbXiA9XSspKT8gKj0gKiIoW14iXSopIiQnKQorICAgIGZvciBmbiBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ2FwcGVuZHMnLCAnKi5iYmFwcGVuZCcpKToKKyAgICAgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIHJlcyA9IGV4dGVybmFsc3JjX3JlLm1hdGNoKGxpbmUucnN0cmlwKCkpCisgICAgICAgICAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgICAgICAgICBwbiA9IHJlcy5ncm91cCgyKSBvciBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoZm4pKVswXS5zcGxpdCgnXycpWzBdCisgICAgICAgICAgICAgICAgICAgIHdvcmtzcGFjZVtwbl0gPSB7J3NyY3RyZWUnOiByZXMuZ3JvdXAoMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JiYXBwZW5kJzogZm59CisKK2RlZiBjcmVhdGVfd29ya3NwYWNlKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgaWYgYXJncy5sYXllcnBhdGg6CisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguYWJzcGF0aChhcmdzLmxheWVycGF0aCkKKyAgICBlbHNlOgorICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKGJhc2VwYXRoLCAnd29ya3NwYWNlJykpCisgICAgX2NyZWF0ZV93b3Jrc3BhY2Uod29ya3NwYWNlZGlyLCBjb25maWcsIGJhc2VwYXRoKQorICAgIGlmIG5vdCBhcmdzLmNyZWF0ZV9vbmx5OgorICAgICAgICBfZW5hYmxlX3dvcmtzcGFjZV9sYXllcih3b3Jrc3BhY2VkaXIsIGNvbmZpZywgYmFzZXBhdGgpCisKK2RlZiBfY3JlYXRlX3dvcmtzcGFjZSh3b3Jrc3BhY2VkaXIsIGNvbmZpZywgYmFzZXBhdGgpOgorICAgIGltcG9ydCBiYgorCisgICAgY29uZmRpciA9IG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJykKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oY29uZmRpciwgJ2xheWVyLmNvbmYnKSk6CisgICAgICAgIGxvZ2dlci5pbmZvKCdTcGVjaWZpZWQgd29ya3NwYWNlIGFscmVhZHkgc2V0IHVwLCBsZWF2aW5nIGFzLWlzJykKKyAgICBlbHNlOgorICAgICAgICAjIEFkZCBhIGNvbmZpZyBmaWxlCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihjb25mZGlyKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGNvbmZkaXIsICdsYXllci5jb25mJyksICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJyMgIyMjIHdvcmtzcGFjZSBsYXllciBhdXRvLWdlbmVyYXRlZCBieSBkZXZ0b29sICMjI1xuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCUEFUSCA9LiAiJCcgKyAne0xBWUVSRElSfToiXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFUyArPSAiJCcgKyAne0xBWUVSRElSfS9yZWNpcGVzLyovKi5iYiBcXFxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJyAgICAgICAgICAgICQnICsgJ3tMQVlFUkRJUn0vYXBwZW5kcy8qLmJiYXBwZW5kIlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9DT0xMRUNUSU9OUyArPSAid29ya3NwYWNlbGF5ZXIiXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BBVFRFUk5fd29ya3NwYWNlbGF5ZXIgPSAiXiQnICsgJ3tMQVlFUkRJUn0vIlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9QQVRURVJOX0lHTk9SRV9FTVBUWV93b3Jrc3BhY2VsYXllciA9ICIxIlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9QUklPUklUWV93b3Jrc3BhY2VsYXllciA9ICI5OSJcbicpCisgICAgICAgICMgQWRkIGEgUkVBRE1FIGZpbGUKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdSRUFETUUnKSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnVGhpcyBsYXllciB3YXMgY3JlYXRlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGRldnRvb2wgdXRpbGl0eSBpbiBvcmRlciB0b1xuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ2NvbnRhaW4gcmVjaXBlcyBhbmQgYmJhcHBlbmRzLiBJbiBtb3N0IGluc3RhbmNlcyB5b3Ugc2hvdWxkIHVzZSB0aGVcbicpCisgICAgICAgICAgICBmLndyaXRlKCdkZXZ0b29sIHV0aWxpdHkgdG8gbWFuYWdlIGZpbGVzIHdpdGhpbiBpdCByYXRoZXIgdGhhbiBtb2RpZnlpbmcgZmlsZXNcbicpCisgICAgICAgICAgICBmLndyaXRlKCdkaXJlY3RseSAoYWx0aG91Z2ggcmVjaXBlcyBhZGRlZCB3aXRoICJkZXZ0b29sIGFkZCIgd2lsbCBvZnRlbiBuZWVkXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnZGlyZWN0IG1vZGlmaWNhdGlvbi4pXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnXG5JZiB5b3Ugbm8gbG9uZ2VyIG5lZWQgdG8gdXNlIGRldnRvb2wgeW91IGNhbiByZW1vdmUgdGhlIHBhdGggdG8gdGhpc1xuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ3dvcmtzcGFjZSBsYXllciBmcm9tIHlvdXIgY29uZi9iYmxheWVycy5jb25mIGZpbGUgKGFuZCB0aGVuIGRlbGV0ZSB0aGVcbicpCisgICAgICAgICAgICBmLndyaXRlKCdsYXllciwgaWYgeW91IHdpc2gpLlxuJykKKworZGVmIF9lbmFibGVfd29ya3NwYWNlX2xheWVyKHdvcmtzcGFjZWRpciwgY29uZmlnLCBiYXNlcGF0aCk6CisgICAgIiIiRW5zdXJlIHRoZSB3b3Jrc3BhY2UgbGF5ZXIgaXMgaW4gYmJsYXllcnMuY29uZiIiIgorICAgIGltcG9ydCBiYgorICAgIGJibGF5ZXJzX2NvbmYgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdjb25mJywgJ2JibGF5ZXJzLmNvbmYnKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhiYmxheWVyc19jb25mKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZmluZCBiYmxheWVycy5jb25mJykKKyAgICAgICAgcmV0dXJuCisgICAgXywgYWRkZWQgPSBiYi51dGlscy5lZGl0X2JibGF5ZXJzX2NvbmYoYmJsYXllcnNfY29uZiwgd29ya3NwYWNlZGlyLCBjb25maWcud29ya3NwYWNlX3BhdGgpCisgICAgaWYgYWRkZWQ6CisgICAgICAgIGxvZ2dlci5pbmZvKCdFbmFibGluZyB3b3Jrc3BhY2UgbGF5ZXIgaW4gYmJsYXllcnMuY29uZicpCisgICAgaWYgY29uZmlnLndvcmtzcGFjZV9wYXRoICE9IHdvcmtzcGFjZWRpcjoKKyAgICAgICAgIyBVcGRhdGUgb3VyIGNvbmZpZyB0byBwb2ludCB0byB0aGUgbmV3IGxvY2F0aW9uCisgICAgICAgIGNvbmZpZy53b3Jrc3BhY2VfcGF0aCA9IHdvcmtzcGFjZWRpcgorICAgICAgICBjb25maWcud3JpdGUoKQorCisKK2RlZiBtYWluKCk6CisgICAgZ2xvYmFsIGJhc2VwYXRoCisgICAgZ2xvYmFsIGNvbmZpZworICAgIGdsb2JhbCBjb250ZXh0CisKKyAgICBjb250ZXh0ID0gQ29udGV4dChmaXhlZF9zZXR1cD1GYWxzZSkKKworICAgICMgRGVmYXVsdCBiYXNlcGF0aAorICAgIGJhc2VwYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCisgICAgcHRoID0gYmFzZXBhdGgKKyAgICB3aGlsZSBwdGggIT0gJycgYW5kIHB0aCAhPSBvcy5zZXA6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwdGgsICcuZGV2dG9vbGJhc2UnKSk6CisgICAgICAgICAgICBjb250ZXh0LmZpeGVkX3NldHVwID0gVHJ1ZQorICAgICAgICAgICAgYmFzZXBhdGggPSBwdGgKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHB0aCA9IG9zLnBhdGguZGlybmFtZShwdGgpCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iT3BlbkVtYmVkZGVkIGRldmVsb3BtZW50IHRvb2wiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9oZWxwPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwaWxvZz0iVXNlICUocHJvZylzIDxzdWJjb21tYW5kPiAtLWhlbHAgdG8gZ2V0IGhlbHAgb24gYSBzcGVjaWZpYyBjb21tYW5kIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJhc2VwYXRoJywgaGVscD0nQmFzZSBkaXJlY3Rvcnkgb2YgU0RLIC8gYnVpbGQgZGlyZWN0b3J5JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJicGF0aCcsIGhlbHA9J0V4cGxpY2l0bHkgc3BlY2lmeSB0aGUgQkJQQVRILCByYXRoZXIgdGhhbiBnZXR0aW5nIGl0IGZyb20gdGhlIG1ldGFkYXRhJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZCcsICctLWRlYnVnJywgaGVscD0nRW5hYmxlIGRlYnVnIG91dHB1dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXEnLCAnLS1xdWlldCcsIGhlbHA9J1ByaW50IG9ubHkgZXJyb3JzJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNvbG9yJywgY2hvaWNlcz1bJ2F1dG8nLCAnYWx3YXlzJywgJ25ldmVyJ10sIGRlZmF1bHQ9J2F1dG8nLCBoZWxwPSdDb2xvcml6ZSBvdXRwdXQgKHdoZXJlICUobWV0YXZhcilzIGlzICUoY2hvaWNlcylzKScsIG1ldGF2YXI9J0NPTE9SJykKKworICAgIGdsb2JhbF9hcmdzLCB1bnBhcnNlZF9hcmdzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoKQorCisgICAgIyBIZWxwIGlzIGFkZGVkIGhlcmUgcmF0aGVyIHRoYW4gdmlhIGFkZF9oZWxwPVRydWUsIGFzIHdlIGRvbid0IHdhbnQgaXQgdG8KKyAgICAjIGJlIGhhbmRsZWQgYnkgcGFyc2Vfa25vd25fYXJncygpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWgnLCAnLS1oZWxwJywgYWN0aW9uPSdoZWxwJywgZGVmYXVsdD1hcmdwYXJzZS5TVVBQUkVTUywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3Nob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQnKQorCisgICAgaWYgZ2xvYmFsX2FyZ3MuZGVidWc6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorICAgIGVsaWYgZ2xvYmFsX2FyZ3MucXVpZXQ6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkVSUk9SKQorCisgICAgaWYgZ2xvYmFsX2FyZ3MuYmFzZXBhdGg6CisgICAgICAgICMgT3ZlcnJpZGUKKyAgICAgICAgYmFzZXBhdGggPSBnbG9iYWxfYXJncy5iYXNlcGF0aAorICAgIGVsaWYgbm90IGNvbnRleHQuZml4ZWRfc2V0dXA6CisgICAgICAgIGJhc2VwYXRoID0gb3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJykKKyAgICAgICAgaWYgbm90IGJhc2VwYXRoOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJUaGlzIHNjcmlwdCBjYW4gb25seSBiZSBydW4gYWZ0ZXIgaW5pdGlhbGlzaW5nIHRoZSBidWlsZCBlbnZpcm9ubWVudCAoZS5nLiBieSB1c2luZyBvZS1pbml0LWJ1aWxkLWVudikiKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGxvZ2dlci5kZWJ1ZygnVXNpbmcgYmFzZXBhdGggJXMnICUgYmFzZXBhdGgpCisKKyAgICBjb25maWcgPSBDb25maWdIYW5kbGVyKG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ2NvbmYnLCAnZGV2dG9vbC5jb25mJykpCisgICAgaWYgbm90IGNvbmZpZy5yZWFkKCk6CisgICAgICAgIHJldHVybiAtMQorCisgICAgIyBXZSBuZWVkIHRvIGJlIGluIHRoaXMgZGlyZWN0b3J5IG9yIHdlIHdvbid0IGJlIGFibGUgdG8gaW5pdGlhbGlzZSB0aW5mb2lsCisgICAgb3MuY2hkaXIoYmFzZXBhdGgpCisKKyAgICBiaXRiYWtlX3N1YmRpciA9IGNvbmZpZy5nZXQoJ0dlbmVyYWwnLCAnYml0YmFrZV9zdWJkaXInLCAnJykKKyAgICBpZiBiaXRiYWtlX3N1YmRpcjoKKyAgICAgICAgIyBOb3JtYWxseSBzZXQgZm9yIHVzZSB3aXRoaW4gdGhlIFNESworICAgICAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIGJpdGJha2Ugc3ViZGlyICVzJyAlIGJpdGJha2Vfc3ViZGlyKQorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKGJhc2VwYXRoLCBiaXRiYWtlX3N1YmRpciwgJ2xpYicpKQorICAgICAgICBjb3JlX21ldGFfc3ViZGlyID0gY29uZmlnLmdldCgnR2VuZXJhbCcsICdjb3JlX21ldGFfc3ViZGlyJykKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihiYXNlcGF0aCwgY29yZV9tZXRhX3N1YmRpciwgJ2xpYicpKQorICAgIGVsc2U6CisgICAgICAgICMgU3RhbmRhcmQgbG9jYXRpb24KKyAgICAgICAgaW1wb3J0IHNjcmlwdHBhdGgKKyAgICAgICAgYml0YmFrZXBhdGggPSBzY3JpcHRwYXRoLmFkZF9iaXRiYWtlX2xpYl9wYXRoKCkKKyAgICAgICAgaWYgbm90IGJpdGJha2VwYXRoOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZmluZCBiaXRiYWtlIGJ5IHNlYXJjaGluZyBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoaXMgc2NyaXB0IG9yIFBBVEgiKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2luZyBzdGFuZGFyZCBiaXRiYWtlIHBhdGggJXMnICUgYml0YmFrZXBhdGgpCisgICAgICAgIHNjcmlwdHBhdGguYWRkX29lX2xpYl9wYXRoKCkKKworICAgIHNjcmlwdHV0aWxzLmxvZ2dlcl9zZXR1cF9jb2xvcihsb2dnZXIsIGdsb2JhbF9hcmdzLmNvbG9yKQorCisgICAgaWYgZ2xvYmFsX2FyZ3MuYmJwYXRoIGlzIE5vbmU6CisgICAgICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKGNvbmZpZ19vbmx5PVRydWUpCisgICAgICAgIGdsb2JhbF9hcmdzLmJicGF0aCA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKQorICAgIGVsc2U6CisgICAgICAgIHRpbmZvaWwgPSBOb25lCisKKyAgICBmb3IgcGF0aCBpbiBbc2NyaXB0c19wYXRoXSArIGdsb2JhbF9hcmdzLmJicGF0aC5zcGxpdCgnOicpOgorICAgICAgICBwbHVnaW5wYXRoID0gb3MucGF0aC5qb2luKHBhdGgsICdsaWInLCAnZGV2dG9vbCcpCisgICAgICAgIHNjcmlwdHV0aWxzLmxvYWRfcGx1Z2lucyhsb2dnZXIsIHBsdWdpbnMsIHBsdWdpbnBhdGgpCisKKyAgICBpZiB0aW5mb2lsOgorICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKKworICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoZGVzdD0ic3VicGFyc2VyX25hbWUiLCB0aXRsZT0nc3ViY29tbWFuZHMnLCBtZXRhdmFyPSc8c3ViY29tbWFuZD4nKQorCisgICAgaWYgbm90IGNvbnRleHQuZml4ZWRfc2V0dXA6CisgICAgICAgIHBhcnNlcl9jcmVhdGVfd29ya3NwYWNlID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdjcmVhdGUtd29ya3NwYWNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2V0IHVwIGEgd29ya3NwYWNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J1NldHMgdXAgYSBuZXcgd29ya3NwYWNlLiBOT1RFOiBvdGhlciBkZXZ0b29sIHN1YmNvbW1hbmRzIHdpbGwgY3JlYXRlIGEgd29ya3NwYWNlIGF1dG9tYXRpY2FsbHkgYXMgbmVlZGVkLCBzbyB5b3Ugb25seSBuZWVkIHRvIHVzZSAlKHByb2cpcyBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHdoZXJlIHRoZSB3b3Jrc3BhY2Ugc2hvdWxkIGJlIGxvY2F0ZWQuJykKKyAgICAgICAgcGFyc2VyX2NyZWF0ZV93b3Jrc3BhY2UuYWRkX2FyZ3VtZW50KCdsYXllcnBhdGgnLCBuYXJncz0nPycsIGhlbHA9J1BhdGggaW4gd2hpY2ggdGhlIHdvcmtzcGFjZSBsYXllciBzaG91bGQgYmUgY3JlYXRlZCcpCisgICAgICAgIHBhcnNlcl9jcmVhdGVfd29ya3NwYWNlLmFkZF9hcmd1bWVudCgnLS1jcmVhdGUtb25seScsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J09ubHkgY3JlYXRlIHRoZSB3b3Jrc3BhY2UgbGF5ZXIsIGRvIG5vdCBhbHRlciBjb25maWd1cmF0aW9uJykKKyAgICAgICAgcGFyc2VyX2NyZWF0ZV93b3Jrc3BhY2Uuc2V0X2RlZmF1bHRzKGZ1bmM9Y3JlYXRlX3dvcmtzcGFjZSkKKworICAgIGZvciBwbHVnaW4gaW4gcGx1Z2luczoKKyAgICAgICAgaWYgaGFzYXR0cihwbHVnaW4sICdyZWdpc3Rlcl9jb21tYW5kcycpOgorICAgICAgICAgICAgcGx1Z2luLnJlZ2lzdGVyX2NvbW1hbmRzKHN1YnBhcnNlcnMsIGNvbnRleHQpCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3ModW5wYXJzZWRfYXJncywgbmFtZXNwYWNlPWdsb2JhbF9hcmdzKQorCisgICAgaWYgYXJncy5zdWJwYXJzZXJfbmFtZSAhPSAnY3JlYXRlLXdvcmtzcGFjZSc6CisgICAgICAgIHJlYWRfd29ya3NwYWNlKCkKKworICAgIHRyeToKKyAgICAgICAgcmV0ID0gYXJncy5mdW5jKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSkKKyAgICBleGNlcHQgRGV2dG9vbEVycm9yIGFzIGVycjoKKyAgICAgICAgaWYgc3RyKGVycik6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGVycikpCisgICAgICAgIHJldCA9IDEKKworICAgIHJldHVybiByZXQKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvZ2VuLWxvY2tlZHNpZy1jYWNoZSBiL3lvY3RvLXBva3kvc2NyaXB0cy9nZW4tbG9ja2Vkc2lnLWNhY2hlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM5M2IyYzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvZ2VuLWxvY2tlZHNpZy1jYWNoZQpAQCAtMCwwICsxLDQ2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgZ2VuLWxvY2tlZHNpZy1jYWNoZSA8bG9ja2VkLXNpZ3MuaW5jPiA8aW5wdXQtY2FjaGVkaXI+IDxvdXRwdXQtY2FjaGVkaXI+CisjCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGdsb2IKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBlcnJubworCitkZWYgbWtkaXIoZCk6CisgICAgdHJ5OgorICAgICAgICBvcy5tYWtlZGlycyhkKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgcmFpc2UgZQorCitpZiBsZW4oc3lzLmFyZ3YpIDwgMzoKKyAgICBwcmludCgiSW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMgc3BlY2lmaWVkIikKKyAgICBzeXMuZXhpdCgxKQorCitzaWdzID0gW10KK3dpdGggb3BlbihzeXMuYXJndlsxXSkgYXMgZjoKKyAgICBmb3IgbCBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICBpZiAiOiIgaW4gbDoKKyAgICAgICAgICAgIHNpZ3MuYXBwZW5kKGwuc3BsaXQoIjoiKVsyXS5zcGxpdCgpWzBdKQorCitmaWxlcyA9IHNldCgpCitmb3IgcyBpbiBzaWdzOgorICAgIHAgPSBzeXMuYXJndlsyXSArICIvIiArIHNbOjJdICsgIi8qIiArIHMgKyAiKiIKKyAgICBmaWxlcyB8PSBzZXQoZ2xvYi5nbG9iKHApKQorICAgIHAgPSBzeXMuYXJndlsyXSArICIvKi8iICsgc1s6Ml0gKyAiLyoiICsgcyArICIqIgorICAgIGZpbGVzIHw9IHNldChnbG9iLmdsb2IocCkpCisKK2ZvciBmIGluIGZpbGVzOgorICAgIGRzdCA9IGYucmVwbGFjZShzeXMuYXJndlsyXSwgc3lzLmFyZ3ZbM10pCisgICAgZGVzdGRpciA9IG9zLnBhdGguZGlybmFtZShkc3QpCisgICAgbWtkaXIoZGVzdGRpcikKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKGRzdCk6CisgICAgICAgIG9zLnJlbW92ZShkc3QpCisgICAgaWYgKG9zLnN0YXQoZikuc3RfZGV2ID09IG9zLnN0YXQoZGVzdGRpcikuc3RfZGV2KToKKyAgICAgICAgb3MubGluayhmLCBkc3QpCisgICAgZWxzZToKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKGYsIGRzdCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9nZW4tc2l0ZS1jb25maWcgYi95b2N0by1wb2t5L3NjcmlwdHMvZ2VuLXNpdGUtY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdkYTdhMGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvZ2VuLXNpdGUtY29uZmlnCkBAIC0wLDAgKzEsNTMgQEAKKyMhIC9iaW4vc2gKKyMgIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitjYXQgPDwgRU9GCitBQ19QUkVSRVEoMi41NykKK0FDX0lOSVQoW3NpdGVfd2lkZV0sWzEuMC4wXSkKKworRU9GCisKKyMgRGlzYWJsZSBhcyBlbmRpYW4gaXMgc2V0IGluIHRoZSBkZWZhdWx0IGNvbmZpZworI2VjaG8gQUNfQ19CSUdFTkRJQU4KKyNlY2hvCisKK2lmIFsgLWUgJDEvdHlwZXMgXSA7IHRoZW4KKyAgd2hpbGUgcmVhZCB0eXBlIDsgZG8KKyAgICBlY2hvICJBQ19DSEVDS19TSVpFT0YoWyR0eXBlXSkiCisgIGRvbmUgPCAkMS90eXBlcworCisgIGVjaG8KK2ZpCisKK2lmIFsgLWUgJDEvZnVuY3MgXTsgdGhlbgorICB3aGlsZSByZWFkIGZ1bmMgOyBkbworICAgIGVjaG8gIkFDX0NIRUNLX0ZVTkNTKFskZnVuY10pIgorICBkb25lIDwgJDEvZnVuY3MKKworICBlY2hvCitmaQorCitpZiBbIC1lICQxL2hlYWRlcnMgXTsgdGhlbgorICB3aGlsZSByZWFkIGhlYWRlciA7IGRvCisgICAgZWNobyAiQUNfQ0hFQ0tfSEVBREVSUyhbJGhlYWRlcl0pIgorICBkb25lIDwgJDEvaGVhZGVycworCisgIGVjaG8KK2ZpCisKK2NhdCA8PCBFT0YKK0FDX09VVFBVVAorRU9GCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvaG9iIGIveW9jdG8tcG9reS9zY3JpcHRzL2hvYgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZDMzYWIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2hvYgpAQCAtMCwwICsxLDYgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKK2V4cG9ydCBCQl9FTlZfRVhUUkFXSElURT0iRElTQUJMRV9TQU5JVFlfQ0hFQ0tTICRCQl9FTlZfRVhUUkFXSElURSIKK0RJU0FCTEVfU0FOSVRZX0NIRUNLUz0xIGJpdGJha2UgLXUgaG9iICRACisKK3JldD0kPworZXhpdCAkcmV0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYmI2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDIyIEBACisjCisjIFlvY3RvIEJTUCB0b29scyBsaWJyYXJ5CisjCisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGludGVsLmNvbT4KKyMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2VuZ2luZS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2VuZ2luZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDZiZTIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvZW5naW5lLnB5CkBAIC0wLDAgKzEsMTk0NyBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIHRlbXBsYXRpbmcgZW5naW5lIHVzZWQgYnkgJ3lvY3RvLWJzcCcgdG8KKyMgY3JlYXRlIEJTUHMuICBUaGUgQlNQIHRlbXBsYXRlcyBhcmUgc2ltcGx5IHRoZSBzZXQgb2YgZmlsZXMgZXhwZWN0ZWQKKyMgdG8gYXBwZWFyIGluIGEgZ2VuZXJhdGVkIEJTUCwgbWFya2VkIHVwIHdpdGggYSBzbWFsbCBzZXQgb2YgdGFncworIyB1c2VkIHRvIGN1c3RvbWl6ZSB0aGUgb3V0cHV0LiAgVGhlIGVuZ2luZSBwYXJzZXMgdGhyb3VnaCB0aGUKKyMgdGVtcGxhdGVzIGFuZCBnZW5lcmF0ZXMgYSBQeXRob24gcHJvZ3JhbSBjb250YWluaW5nIGFsbCB0aGUgbG9naWMKKyMgYW5kIGlucHV0IGVsZW1lbnRzIG5lZWRlZCB0byBkaXNwbGF5IGFuZCByZXRyaWV2ZSBCU1Atc3BlY2lmaWMKKyMgaW5mb3JtYXRpb24gZnJvbSB0aGUgdXNlci4gIFRoZSByZXN1bHRpbmcgcHJvZ3JhbSB1c2VzIHRob3NlIHJlc3VsdHMKKyMgdG8gZ2VuZXJhdGUgdGhlIGZpbmFsIEJTUCBmaWxlcy4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBpbnRlbC5jb20+CisjCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCitmcm9tIHRhZ3MgaW1wb3J0ICoKK2ltcG9ydCBzaGxleAoraW1wb3J0IGpzb24KK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc2h1dGlsCisKK2NsYXNzIExpbmUoKToKKyAgICAiIiIKKyAgICBHZW5lcmljIChhYnN0cmFjdCkgY29udGFpbmVyIHJlcHJlc2VudGluZyBhIGxpbmUgdGhhdCB3aWxsIGFwcGVhcgorICAgIGluIHRoZSBCU1AtZ2VuZXJhdGluZyBwcm9ncmFtLgorICAgICIiIgorICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZSk6CisgICAgICAgIHNlbGYubGluZSA9IGxpbmUKKyAgICAgICAgc2VsZi5nZW5lcmF0ZWRfbGluZSA9ICIiCisgICAgICAgIHNlbGYucHJpbyA9IHN5cy5tYXhpbnQKKyAgICAgICAgc2VsZi5kaXNjYXJkID0gRmFsc2UKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgR2VuZXJhdGUgdGhlIGZpbmFsIGV4ZWN1dGFibGUgbGluZSB0aGF0IHdpbGwgYXBwZWFyIGluIHRoZQorICAgICAgICBCU1AtZ2VuZXJhdGlvbiBwcm9ncmFtLgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIGVzY2FwZShzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIEVzY2FwZSBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzIHVudGlsIEkgZmluZAorICAgICAgICBzb21ldGhpbmcgYmV0dGVyIChyZS5lc2NhcGUoKSBlc2NhcGVzIHdheSB0b28gbXVjaCkuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gbGluZS5yZXBsYWNlKCJcXCIsICJcXFxcIikucmVwbGFjZSgiXCIiLCAiXFxcIiIpLnJlcGxhY2UoIiciLCAiXFwnIikKKworICAgIGRlZiBwYXJzZV9lcnJvcihzZWxmLCBtc2csIGxpbmVubywgbGluZSk6CisgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiJXM6ICVzIiAlIChtc2csIGxpbmUpKQorCisKK2NsYXNzIE5vcm1hbExpbmUoTGluZSk6CisgICAgIiIiCisgICAgQ29udGFpbmVyIGZvciBub3JtYWwgKG5vbi10YWcpIGxpbmVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lKToKKyAgICAgICAgTGluZS5fX2luaXRfXyhzZWxmLCBsaW5lKQorICAgICAgICBzZWxmLmlzX2ZpbGVuYW1lID0gRmFsc2UKKyAgICAgICAgc2VsZi5pc19kaXJuYW1lID0gRmFsc2UKKyAgICAgICAgc2VsZi5vdXRfZmlsZWJhc2UgPSBOb25lCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgaWYgc2VsZi5pc19maWxlbmFtZToKKyAgICAgICAgICAgIGxpbmUgPSAiY3VycmVudF9maWxlID0gXCIiICsgb3MucGF0aC5qb2luKHNlbGYub3V0X2ZpbGViYXNlLCBzZWxmLmVzY2FwZShzZWxmLmxpbmUpKSArICJcIjsgb2YgPSBvcGVuKGN1cnJlbnRfZmlsZSwgXCJ3XCIpIgorICAgICAgICBlbGlmIHNlbGYuaXNfZGlybmFtZToKKyAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5vdXRfZmlsZWJhc2UsIHNlbGYuZXNjYXBlKHNlbGYubGluZSkpCisgICAgICAgICAgICBsaW5lID0gImlmIG5vdCBvcy5wYXRoLmV4aXN0cyhcIiIgKyBkaXJuYW1lICsgIlwiKTogb3MubWtkaXIoXCIiICsgZGlybmFtZSArICJcIikiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lID0gIm9mLndyaXRlKFwiIiArIHNlbGYuZXNjYXBlKHNlbGYubGluZSkgKyAiXFxuXCIpIgorICAgICAgICByZXR1cm4gbGluZQorCisKK2NsYXNzIENvZGVMaW5lKExpbmUpOgorICAgICIiIgorICAgIENvbnRhaW5lciBmb3IgUHl0aG9uIGNvZGUgdGFnIGxpbmVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lKToKKyAgICAgICAgTGluZS5fX2luaXRfXyhzZWxmLCBsaW5lKQorCisgICAgZGVmIGdlbihzZWxmLCBjb250ZXh0ID0gTm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLmxpbmUKKworCitjbGFzcyBBc3NpZ25tZW50OgorICAgICIiIgorICAgIFJlcHJlc2VudGF0aW9uIG9mIGV2ZXJ5dGhpbmcgd2Uga25vdyBhYm91dCB7ez1uYW1lIH19IHRhZ3MuCisgICAgSW5zdGFuY2VzIG9mIHRoZXNlIGFyZSB1c2VkIGJ5IEFzc2lnbm1lbnQgbGluZXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0LCBlbmQsIG5hbWUpOgorICAgICAgICBzZWxmLnN0YXJ0ID0gc3RhcnQKKyAgICAgICAgc2VsZi5lbmQgPSBlbmQKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorCisKK2NsYXNzIEFzc2lnbm1lbnRMaW5lKE5vcm1hbExpbmUpOgorICAgICIiIgorICAgIENvbnRhaW5lciBmb3Igbm9ybWFsIGxpbmVzIGNvbnRhaW5pbmcgYXNzaWdubWVudCB0YWdzLiAgQXNzaWdubWVudAorICAgIHRhZ3MgbXVzdCBiZSBpbiBhc2NlbmRpbmcgb3JkZXIgb2YgJ3N0YXJ0JyB2YWx1ZS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZSk6CisgICAgICAgIE5vcm1hbExpbmUuX19pbml0X18oc2VsZiwgbGluZSkKKyAgICAgICAgc2VsZi5hc3NpZ25tZW50cyA9IFtdCisKKyAgICBkZWYgYWRkX2Fzc2lnbm1lbnQoc2VsZiwgc3RhcnQsIGVuZCwgbmFtZSk6CisgICAgICAgIHNlbGYuYXNzaWdubWVudHMuYXBwZW5kKEFzc2lnbm1lbnQoc3RhcnQsIGVuZCwgbmFtZSkpCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgbGluZSA9IHNlbGYuZXNjYXBlKHNlbGYubGluZSkKKworICAgICAgICBmb3IgYXNzaWdubWVudCBpbiBzZWxmLmFzc2lnbm1lbnRzOgorICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSAiXCIgKyAiICsgYXNzaWdubWVudC5uYW1lICsgIiArIFwiIgorICAgICAgICAgICAgaWR4ID0gbGluZS5maW5kKEFTU0lHTl9UQUcpCisgICAgICAgICAgICBsaW5lID0gbGluZVs6aWR4XSArIHJlcGxhY2VtZW50ICsgbGluZVtpZHggKyBhc3NpZ25tZW50LmVuZCAtIGFzc2lnbm1lbnQuc3RhcnQ6XQorICAgICAgICBpZiBzZWxmLmlzX2ZpbGVuYW1lOgorICAgICAgICAgICAgcmV0dXJuICJjdXJyZW50X2ZpbGUgPSBcIiIgKyBvcy5wYXRoLmpvaW4oc2VsZi5vdXRfZmlsZWJhc2UsIGxpbmUpICsgIlwiOyBvZiA9IG9wZW4oY3VycmVudF9maWxlLCBcIndcIikiCisgICAgICAgIGVsaWYgc2VsZi5pc19kaXJuYW1lOgorICAgICAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm91dF9maWxlYmFzZSwgbGluZSkKKyAgICAgICAgICAgIHJldHVybiAiaWYgbm90IG9zLnBhdGguZXhpc3RzKFwiIiArIGRpcm5hbWUgKyAiXCIpOiBvcy5ta2RpcihcIiIgKyBkaXJuYW1lICsgIlwiKSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAib2Yud3JpdGUoXCIiICsgbGluZSArICJcXG5cIikiCisKKworY2xhc3MgSW5wdXRMaW5lKExpbmUpOgorICAgICIiIgorICAgIEJhc2UgY2xhc3MgZm9yIElucHV0IGxpbmVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pOgorICAgICAgICBMaW5lLl9faW5pdF9fKHNlbGYsIHRhZykKKyAgICAgICAgc2VsZi5wcm9wcyA9IHByb3BzCisgICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wcmlvID0gaW50KHByb3BzWyJwcmlvIl0pCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYucHJpbyA9IHN5cy5tYXhpbnQKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZXBlbmRzX29uID0gc2VsZi5wcm9wc1siZGVwZW5kcy1vbiJdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVwZW5kc19vbl92YWwgPSBzZWxmLnByb3BzWyJkZXBlbmRzLW9uLXZhbCJdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gJ2RlcGVuZHMtb24tdmFsJyBmb3IgJ2RlcGVuZHMtb24nIHByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworCitjbGFzcyBFZGl0Qm94SW5wdXRMaW5lKElucHV0TGluZSk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgJ2VkaXRib3gnIElucHV0IGxpbmVzLgorCisgICAgcHJvcHM6CisgICAgICAgIG5hbWU6IGV4YW1wbGUgLSAiTG9hZCBhZGRyZXNzIgorICAgICAgICBtc2c6IGV4YW1wbGUgLSAiUGxlYXNlIGVudGVyIHRoZSBsb2FkIGFkZHJlc3MiCisgICAgcmVzdWx0OgorICAgICAgICBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgc3BlY2lmaWVkIGJ5ICduYW1lJyB0bworICAgICAgICB3aGF0ZXZlciB0aGUgdXNlciB0eXBlZC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKToKKyAgICAgICAgSW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubykKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICBJbnB1dExpbmUuZ2VuKHNlbGYsIGNvbnRleHQpCisgICAgICAgIG5hbWUgPSBzZWxmLnByb3BzWyJuYW1lIl0KKyAgICAgICAgaWYgbm90IG5hbWU6CisgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBpbnB1dCAnbmFtZScgcHJvcGVydHkgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorICAgICAgICBtc2cgPSBzZWxmLnByb3BzWyJtc2ciXQorICAgICAgICBpZiBub3QgbXNnOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gaW5wdXQgJ21zZycgcHJvcGVydHkgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gc2VsZi5wcm9wc1siZGVmYXVsdCJdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gIiIKKworICAgICAgICBtc2cgKz0gIiBbZGVmYXVsdDogIiArIGRlZmF1bHRfY2hvaWNlICsgIl0iCisKKyAgICAgICAgbGluZSA9IG5hbWUgKyAiID0gZGVmYXVsdChyYXdfaW5wdXQoXCIiICsgbXNnICsgIiBcIiksICIgKyBuYW1lICsgIikiCisKKyAgICAgICAgcmV0dXJuIGxpbmUKKworCitjbGFzcyBHaXRSZXBvRWRpdEJveElucHV0TGluZShFZGl0Qm94SW5wdXRMaW5lKToKKyAgICAiIiIKKyAgICBCYXNlIGNsYXNzIGZvciAnZWRpdGJveCcgSW5wdXQgbGluZXMgZm9yIHVzZXIgaW5wdXQgb2YgcmVtb3RlIGdpdAorICAgIHJlcG9zLiAgVGhpcyBjbGFzcyB2ZXJpZmllcyB0aGUgZXhpc3RlbmNlIGFuZCBjb25uZWN0aXZpdHkgb2YgdGhlCisgICAgc3BlY2lmaWVkIGdpdCByZXBvLgorCisgICAgcHJvcHM6CisgICAgICAgIG5hbWU6IGV4YW1wbGUgLSAiTG9hZCBhZGRyZXNzIgorICAgICAgICBtc2c6IGV4YW1wbGUgLSAiUGxlYXNlIGVudGVyIHRoZSBsb2FkIGFkZHJlc3MiCisgICAgcmVzdWx0OgorICAgICAgICBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgc3BlY2lmaWVkIGJ5ICduYW1lJyB0bworICAgICAgICB3aGF0ZXZlciB0aGUgdXNlciB0eXBlZC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKToKKyAgICAgICAgRWRpdEJveElucHV0TGluZS5fX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgRWRpdEJveElucHV0TGluZS5nZW4oc2VsZiwgY29udGV4dCkKKyAgICAgICAgbmFtZSA9IHNlbGYucHJvcHNbIm5hbWUiXQorICAgICAgICBpZiBub3QgbmFtZToKKyAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGlucHV0ICduYW1lJyBwcm9wZXJ0eSBmb3VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisgICAgICAgIG1zZyA9IHNlbGYucHJvcHNbIm1zZyJdCisgICAgICAgIGlmIG5vdCBtc2c6CisgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBpbnB1dCAnbXNnJyBwcm9wZXJ0eSBmb3VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVmYXVsdF9jaG9pY2UgPSBzZWxmLnByb3BzWyJkZWZhdWx0Il0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgZGVmYXVsdF9jaG9pY2UgPSAiIgorCisgICAgICAgIG1zZyArPSAiIFtkZWZhdWx0OiAiICsgZGVmYXVsdF9jaG9pY2UgKyAiXSIKKworICAgICAgICBsaW5lID0gbmFtZSArICIgPSBnZXRfdmVyaWZpZWRfZ2l0X3JlcG8oXCIiICsgbXNnICsgIlwiLCIgKyBuYW1lICsgIikiCisKKyAgICAgICAgcmV0dXJuIGxpbmUKKworCitjbGFzcyBGaWxlRWRpdEJveElucHV0TGluZShFZGl0Qm94SW5wdXRMaW5lKToKKyAgICAiIiIKKyAgICBCYXNlIGNsYXNzIGZvciAnZWRpdGJveCcgSW5wdXQgbGluZXMgZm9yIHVzZXIgaW5wdXQgb2YgZXhpc3RpbmcKKyAgICBmaWxlcy4gIFRoaXMgY2xhc3MgdmVyaWZpZXMgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgc3BlY2lmaWVkIGZpbGUuCisKKyAgICBwcm9wczoKKyAgICAgICAgbmFtZTogZXhhbXBsZSAtICJMb2FkIGFkZHJlc3MiCisgICAgICAgIG1zZzogZXhhbXBsZSAtICJQbGVhc2UgZW50ZXIgdGhlIGxvYWQgYWRkcmVzcyIKKyAgICByZXN1bHQ6CisgICAgICAgIFNldHMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgJ25hbWUnIHRvCisgICAgICAgIHdoYXRldmVyIHRoZSB1c2VyIHR5cGVkLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pOgorICAgICAgICBFZGl0Qm94SW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubykKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICBFZGl0Qm94SW5wdXRMaW5lLmdlbihzZWxmLCBjb250ZXh0KQorICAgICAgICBuYW1lID0gc2VsZi5wcm9wc1sibmFtZSJdCisgICAgICAgIGlmIG5vdCBuYW1lOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gaW5wdXQgJ25hbWUnIHByb3BlcnR5IGZvdW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKyAgICAgICAgbXNnID0gc2VsZi5wcm9wc1sibXNnIl0KKyAgICAgICAgaWYgbm90IG1zZzoKKyAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGlucHV0ICdtc2cnIHByb3BlcnR5IGZvdW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWZhdWx0X2Nob2ljZSA9IHNlbGYucHJvcHNbImRlZmF1bHQiXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBkZWZhdWx0X2Nob2ljZSA9ICIiCisKKyAgICAgICAgbXNnICs9ICIgW2RlZmF1bHQ6ICIgKyBkZWZhdWx0X2Nob2ljZSArICJdIgorCisgICAgICAgIGxpbmUgPSBuYW1lICsgIiA9IGdldF92ZXJpZmllZF9maWxlKFwiIiArIG1zZyArICJcIiwiICsgbmFtZSArICIsIFRydWUpIgorCisgICAgICAgIHJldHVybiBsaW5lCisKKworY2xhc3MgQm9vbGVhbklucHV0TGluZShJbnB1dExpbmUpOgorICAgICIiIgorICAgIEJhc2UgY2xhc3MgZm9yIGJvb2xlYW4gSW5wdXQgbGluZXMuCisgICAgcHJvcHM6CisgICAgICAgIG5hbWU6IGV4YW1wbGUgLSAia2V5Ym9hcmQiCisgICAgICAgIG1zZzogIGV4YW1wbGUgLSAiR290IGtleWJvYXJkPyIKKyAgICByZXN1bHQ6CisgICAgICAgIFNldHMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgJ25hbWUnIHRvICJ5ZXMiIG9yICJubyIKKyAgICAgICAgZXhhbXBsZSAtIGtleWJvYXJkID0gInllcyIKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKToKKyAgICAgICAgSW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubykKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICBJbnB1dExpbmUuZ2VuKHNlbGYsIGNvbnRleHQpCisgICAgICAgIG5hbWUgPSBzZWxmLnByb3BzWyJuYW1lIl0KKyAgICAgICAgaWYgbm90IG5hbWU6CisgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBpbnB1dCAnbmFtZScgcHJvcGVydHkgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorICAgICAgICBtc2cgPSBzZWxmLnByb3BzWyJtc2ciXQorICAgICAgICBpZiBub3QgbXNnOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gaW5wdXQgJ21zZycgcHJvcGVydHkgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gc2VsZi5wcm9wc1siZGVmYXVsdCJdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gIiIKKworICAgICAgICBtc2cgKz0gIiBbZGVmYXVsdDogIiArIGRlZmF1bHRfY2hvaWNlICsgIl0iCisKKyAgICAgICAgbGluZSA9IG5hbWUgKyAiID0gYm9vbGVhbihyYXdfaW5wdXQoXCIiICsgbXNnICsgIiBcIiksICIgKyBuYW1lICsgIikiCisKKyAgICAgICAgcmV0dXJuIGxpbmUKKworCitjbGFzcyBMaXN0SW5wdXRMaW5lKElucHV0TGluZSk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgTGlzdC1iYXNlZCBJbnB1dCBsaW5lcy4gZS5nLiBDaG9pY2VsaXN0LCBDaGVja2xpc3QuCisgICAgIiIiCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pOgorICAgICAgICBJbnB1dExpbmUuX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKQorICAgICAgICBzZWxmLmNob2ljZXMgPSBbXQorCisgICAgZGVmIGdlbl9jaG9pY2VwYWlyX2xpc3Qoc2VsZik6CisgICAgICAgICIiIkdlbmVyYXRlIGEgbGlzdCBvZiAyLWl0ZW0gdmFsOmRlc2MgbGlzdHMgZnJvbSBzZWxmLmNob2ljZXMuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmNob2ljZXM6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGNob2ljZXBhaXJfbGlzdCA9IGxpc3QoKQorCisgICAgICAgIGZvciBjaG9pY2UgaW4gc2VsZi5jaG9pY2VzOgorICAgICAgICAgICAgY2hvaWNlcGFpciA9IFtdCisgICAgICAgICAgICBjaG9pY2VwYWlyLmFwcGVuZChjaG9pY2UudmFsKQorICAgICAgICAgICAgY2hvaWNlcGFpci5hcHBlbmQoY2hvaWNlLmRlc2MpCisgICAgICAgICAgICBjaG9pY2VwYWlyX2xpc3QuYXBwZW5kKGNob2ljZXBhaXIpCisKKyAgICAgICAgcmV0dXJuIGNob2ljZXBhaXJfbGlzdAorCisgICAgZGVmIGdlbl9kZWdlbmVyYXRlX2Nob2ljZXBhaXJfbGlzdChzZWxmLCBjaG9pY2VzKToKKyAgICAgICAgIiIiR2VuZXJhdGUgYSBsaXN0IG9mIDItaXRlbSB2YWw6ZGVzYyB3aXRoIHZhbD1kZXNjIGZyb20gcGFzc2VkLWluIGNob2ljZXMuIiIiCisgICAgICAgIGNob2ljZXBhaXJfbGlzdCA9IGxpc3QoKQorCisgICAgICAgIGZvciBjaG9pY2UgaW4gY2hvaWNlczoKKyAgICAgICAgICAgIGNob2ljZXBhaXIgPSBbXQorICAgICAgICAgICAgY2hvaWNlcGFpci5hcHBlbmQoY2hvaWNlKQorICAgICAgICAgICAgY2hvaWNlcGFpci5hcHBlbmQoY2hvaWNlKQorICAgICAgICAgICAgY2hvaWNlcGFpcl9saXN0LmFwcGVuZChjaG9pY2VwYWlyKQorCisgICAgICAgIHJldHVybiBjaG9pY2VwYWlyX2xpc3QKKworICAgIGRlZiBleGVjX2xpc3RnZW5fZm4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgRXhlY3V0ZSB0aGUgbGlzdC1nZW5lcmF0aW5nIGZ1bmN0aW9uIGNvbnRhaW5lZCBhcyBhIHN0cmluZyBpbgorICAgICAgICB0aGUgImdlbiIgcHJvcGVydHkuCisgICAgICAgICIiIgorICAgICAgICByZXR2YWwgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZuYW1lID0gc2VsZi5wcm9wc1siZ2VuIl0KKyAgICAgICAgICAgIG1vZHNwbGl0ID0gZm5hbWUuc3BsaXQoJy4nKQorICAgICAgICAgICAgbW9kX2ZuID0gbW9kc3BsaXQucG9wKCkKKyAgICAgICAgICAgIG1vZCA9ICcuJy5qb2luKG1vZHNwbGl0KQorCisgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZCkKKyAgICAgICAgICAgICMgcHl0aG9uIDIuNyBoYXMgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdXNpbmcgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUKKyAgICAgICAgICAgIG0gPSBzeXMubW9kdWxlc1ttb2RdCisKKyAgICAgICAgICAgIGZuID0gZ2V0YXR0cihtLCBtb2RfZm4pCisgICAgICAgICAgICBpZiBub3QgZm46CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiY291bGRuJ3QgbG9hZCBmdW5jdGlvbiBzcGVjaWZpZWQgZm9yICdnZW4nIHByb3BlcnR5ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorICAgICAgICAgICAgcmV0dmFsID0gZm4oY29udGV4dCkKKyAgICAgICAgICAgIGlmIG5vdCByZXR2YWw6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiZnVuY3Rpb24gc3BlY2lmaWVkIGZvciAnZ2VuJyBwcm9wZXJ0eSByZXR1cm5lZCBub3RoaW5nICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmV0dXJuIHJldHZhbAorCisgICAgZGVmIGdlbl9jaG9pY2VzX3N0cihzZWxmLCBjaG9pY2VwYWlycyk6CisgICAgICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhIG51bWJlcmVkIGxpc3Qgb2YgY2hvaWNlcyBmcm9tIGEgbGlzdCBvZiBjaG9pY2VwYWlycworICAgICAgICBmb3IgZGlzcGxheSB0byB0aGUgdXNlci4KKyAgICAgICAgIiIiCisgICAgICAgIGNob2ljZXNfc3RyID0gIiIKKworICAgICAgICBmb3IgaSwgY2hvaWNlcGFpciBpbiBlbnVtZXJhdGUoY2hvaWNlcGFpcnMpOgorICAgICAgICAgICAgY2hvaWNlc19zdHIgKz0gIlx0IiArIHN0cihpICsgMSkgKyAiKSAiICsgY2hvaWNlcGFpclsxXSArICJcbiIKKworICAgICAgICByZXR1cm4gY2hvaWNlc19zdHIKKworICAgIGRlZiBnZW5fY2hvaWNlc192YWxfc3RyKHNlbGYsIGNob2ljZXBhaXJzKToKKyAgICAgICAgIiIiCisgICAgICAgIEdlbmVyYXRlIGFuIGFycmF5IG9mIGNob2ljZSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUKKyAgICAgICAgbnVtYmVyZWQgbGlzdCBnZW5lcmF0ZWQgYnkgZ2VuX2Nob2ljZXNfc3RyKCkuCisgICAgICAgICIiIgorICAgICAgICBjaG9pY2VzX3ZhbF9saXN0ID0gIlsiCisKKyAgICAgICAgZm9yIGksIGNob2ljZXBhaXIgaW4gZW51bWVyYXRlKGNob2ljZXBhaXJzKToKKyAgICAgICAgICAgIGNob2ljZXNfdmFsX2xpc3QgKz0gIlwiIiArIGNob2ljZXBhaXJbMF0gKyAiXCIsIgorICAgICAgICBjaG9pY2VzX3ZhbF9saXN0ICs9ICJdIgorCisgICAgICAgIHJldHVybiBjaG9pY2VzX3ZhbF9saXN0CisKKyAgICBkZWYgZ2VuX2Nob2ljZXNfdmFsX2xpc3Qoc2VsZiwgY2hvaWNlcGFpcnMpOgorICAgICAgICAiIiIKKyAgICAgICAgR2VuZXJhdGUgYW4gYXJyYXkgb2YgY2hvaWNlIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgICAgICBudW1iZXJlZCBsaXN0IGdlbmVyYXRlZCBieSBnZW5fY2hvaWNlc19zdHIoKS4KKyAgICAgICAgIiIiCisgICAgICAgIGNob2ljZXNfdmFsX2xpc3QgPSBbXQorCisgICAgICAgIGZvciBpLCBjaG9pY2VwYWlyIGluIGVudW1lcmF0ZShjaG9pY2VwYWlycyk6CisgICAgICAgICAgICBjaG9pY2VzX3ZhbF9saXN0LmFwcGVuZChjaG9pY2VwYWlyWzBdKQorCisgICAgICAgIHJldHVybiBjaG9pY2VzX3ZhbF9saXN0CisKKyAgICBkZWYgZ2VuX2Nob2ljZXNfbGlzdChzZWxmLCBjb250ZXh0ID0gTm9uZSwgY2hlY2tsaXN0ID0gRmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgR2VuZXJhdGUgYW4gYXJyYXkgb2YgY2hvaWNlIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgICAgICBudW1iZXJlZCBsaXN0IGdlbmVyYXRlZCBieSBnZW5fY2hvaWNlc19zdHIoKS4KKyAgICAgICAgIiIiCisgICAgICAgIGNob2ljZXMgPSBzZWxmLmV4ZWNfbGlzdGdlbl9mbihjb250ZXh0KQorICAgICAgICBpZiBjaG9pY2VzOgorICAgICAgICAgICAgaWYgbGVuKGNob2ljZXMpID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gZW50cmllcyBhdmFpbGFibGUgZm9yIGlucHV0IGxpc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKyAgICAgICAgICAgIGNob2ljZXBhaXJzID0gc2VsZi5nZW5fZGVnZW5lcmF0ZV9jaG9pY2VwYWlyX2xpc3QoY2hvaWNlcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLmNob2ljZXMpID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gZW50cmllcyBhdmFpbGFibGUgZm9yIGlucHV0IGxpc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKyAgICAgICAgICAgIGNob2ljZXBhaXJzID0gc2VsZi5nZW5fY2hvaWNlcGFpcl9saXN0KCkKKyAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gY2hvaWNlcGFpcnMKKworICAgIGRlZiBnZW5fY2hvaWNlcyhzZWxmLCBjb250ZXh0ID0gTm9uZSwgY2hlY2tsaXN0ID0gRmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgR2VuZXJhdGUgYW4gYXJyYXkgb2YgY2hvaWNlIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgICAgICBudW1iZXJlZCBsaXN0IGdlbmVyYXRlZCBieSBnZW5fY2hvaWNlc19zdHIoKSwgZGlzcGxheSBpdCB0bworICAgICAgICB0aGUgdXNlciwgYW5kIHByb2Nlc3MgdGhlIHJlc3VsdC4KKyAgICAgICAgIiIiCisgICAgICAgIG1zZyA9IHNlbGYucHJvcHNbIm1zZyJdCisgICAgICAgIGlmIG5vdCBtc2c6CisgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBpbnB1dCAnbXNnJyBwcm9wZXJ0eSBmb3VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVmYXVsdF9jaG9pY2UgPSBzZWxmLnByb3BzWyJkZWZhdWx0Il0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgZGVmYXVsdF9jaG9pY2UgPSAiIgorCisgICAgICAgIG1zZyArPSAiIFtkZWZhdWx0OiAiICsgZGVmYXVsdF9jaG9pY2UgKyAiXSIKKworICAgICAgICBjaG9pY2VwYWlycyA9IHNlbGYuZ2VuX2Nob2ljZXNfbGlzdChjb250ZXh0LCBjaGVja2xpc3QpCisKKyAgICAgICAgY2hvaWNlc19zdHIgPSBzZWxmLmdlbl9jaG9pY2VzX3N0cihjaG9pY2VwYWlycykKKyAgICAgICAgY2hvaWNlc192YWxfbGlzdCA9IHNlbGYuZ2VuX2Nob2ljZXNfdmFsX2xpc3QoY2hvaWNlcGFpcnMpCisgICAgICAgIGlmIGNoZWNrbGlzdDoKKyAgICAgICAgICAgIGNob2ljZXZhbCA9IGRlZmF1bHQoZmluZF9jaG9pY2V2YWxzKHJhd19pbnB1dChtc2cgKyAiXG4iICsgY2hvaWNlc19zdHIpLCBjaG9pY2VzX3ZhbF9saXN0KSwgZGVmYXVsdF9jaG9pY2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjaG9pY2V2YWwgPSBkZWZhdWx0KGZpbmRfY2hvaWNldmFsKHJhd19pbnB1dChtc2cgKyAiXG4iICsgY2hvaWNlc19zdHIpLCBjaG9pY2VzX3ZhbF9saXN0KSwgZGVmYXVsdF9jaG9pY2UpCisKKyAgICAgICAgcmV0dXJuIGNob2ljZXZhbAorCisKK2RlZiBmaW5kX2Nob2ljZXZhbChjaG9pY2Vfc3RyLCBjaG9pY2VfbGlzdCk6CisgICAgIiIiCisgICAgVGFrZSBudW1iZXIgYXMgc3RyaW5nIGFuZCByZXR1cm4gdmFsIHN0cmluZyBmcm9tIGNob2ljZV9saXN0LAorICAgIGVtcHR5IHN0cmluZyBpZiBvb2IuICBjaG9pY2VfbGlzdCBpcyBhIHNpbXBsZSBweXRob24gbGlzdC4KKyAgICAiIiIKKyAgICBjaG9pY2VfdmFsID0gIiIKKworICAgIHRyeToKKyAgICAgICAgY2hvaWNlX2lkeCA9IGludChjaG9pY2Vfc3RyKQorICAgICAgICBpZiBjaG9pY2VfaWR4IDw9IGxlbihjaG9pY2VfbGlzdCk6CisgICAgICAgICAgICBjaG9pY2VfaWR4IC09IDEKKyAgICAgICAgICAgIGNob2ljZV92YWwgPSBjaG9pY2VfbGlzdFtjaG9pY2VfaWR4XQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBwYXNzCisKKyAgICByZXR1cm4gY2hvaWNlX3ZhbAorCisKK2RlZiBmaW5kX2Nob2ljZXZhbHMoY2hvaWNlX3N0ciwgY2hvaWNlX2xpc3QpOgorICAgICIiIgorICAgIFRha2UgbnVtYmVycyBhcyBzcGFjZS1zZXBhcmF0ZWQgc3RyaW5nIGFuZCByZXR1cm4gdmFscyBsaXN0IGZyb20KKyAgICBjaG9pY2VfbGlzdCwgZW1wdHkgbGlzdCBpZiBvb2IuICBjaG9pY2VfbGlzdCBpcyBhIHNpbXBsZSBweXRob24KKyAgICBsaXN0LgorICAgICIiIgorICAgIGNob2ljZV92YWxzID0gW10KKworICAgIGNob2ljZXMgPSBjaG9pY2Vfc3RyLnNwbGl0KCkKKyAgICBmb3IgY2hvaWNlIGluIGNob2ljZXM6CisgICAgICAgIGNob2ljZV92YWxzLmFwcGVuZChmaW5kX2Nob2ljZXZhbChjaG9pY2UsIGNob2ljZV9saXN0KSkKKworICAgIHJldHVybiBjaG9pY2VfdmFscworCisKK2RlZiBkZWZhdWx0KGlucHV0X3N0ciwgbmFtZSk6CisgICAgIiIiCisgICAgUmV0dXJuIGRlZmF1bHQgaWYgbm8gaW5wdXRfc3RyLCBvdGhlcndpc2Ugc3RyaXBwZWQgaW5wdXRfc3RyLgorICAgICIiIgorICAgIGlmIG5vdCBpbnB1dF9zdHI6CisgICAgICAgIHJldHVybiBuYW1lCisKKyAgICByZXR1cm4gaW5wdXRfc3RyLnN0cmlwKCkKKworCitkZWYgdmVyaWZ5X2dpdF9yZXBvKGdpdHVybCk6CisgICAgIiIiCisgICAgVmVyaWZ5IHRoYXQgdGhlIGdpdHVybCBwYXNzZWQgaW4gY2FuIGJlIGNvbm5lY3RlZCB0by4gIFRoaXMgY2FuIGJlCisgICAgdXNlZCBhcyBhIGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIHRoZSBnaXZlbiByZXBvIGFuZC9vciBiYXNpYworICAgIGdpdCByZW1vdGUgY29ubmVjdGl2aXR5LgorCisgICAgUmV0dXJucyBUcnVlIGlmIHRoZSBjb25uZWN0aW9uIHdhcyBzdWNjZXNzZnVsLCBmYWxzIG90aGVyd2lzZQorICAgICIiIgorICAgIGlmIG5vdCBnaXR1cmw6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZ2l0Y21kID0gImdpdCBscy1yZW1vdGUgJXMgPiAvZGV2L251bGwgMj4mMSIgJSAoZ2l0dXJsKQorICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKGdpdGNtZCwgc2hlbGw9VHJ1ZSkKKyAgICBpZiByYyA9PSAwOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIGdldF92ZXJpZmllZF9naXRfcmVwbyhpbnB1dF9zdHIsIG5hbWUpOgorICAgICIiIgorICAgIFJldHVybiBnaXQgcmVwbyBpZiB2ZXJpZmllZCwgb3RoZXJ3aXNlIGxvb3AgZm9yZXZlciBhc2tpbmcgdXNlcgorICAgIGZvciBmaWxlbmFtZS4KKyAgICAiIiIKKyAgICBtc2cgPSBpbnB1dF9zdHIuc3RyaXAoKSArICIgIgorCisgICAgZ2l0dXJsID0gZGVmYXVsdChyYXdfaW5wdXQobXNnKSwgbmFtZSkKKworICAgIHdoaWxlIFRydWU6CisgICAgICAgIGlmIHZlcmlmeV9naXRfcmVwbyhnaXR1cmwpOgorICAgICAgICAgICAgcmV0dXJuIGdpdHVybAorICAgICAgICBnaXR1cmwgPSBkZWZhdWx0KHJhd19pbnB1dChtc2cpLCBuYW1lKQorCisKK2RlZiBnZXRfdmVyaWZpZWRfZmlsZShpbnB1dF9zdHIsIG5hbWUsIGZpbGVuYW1lX2Nhbl9iZV9udWxsKToKKyAgICAiIiIKKyAgICBSZXR1cm4gZmlsZW5hbWUgaWYgdGhlIGZpbGUgZXhpc3RzLCBvdGhlcndpc2UgbG9vcCBmb3JldmVyIGFza2luZworICAgIHVzZXIgZm9yIGZpbGVuYW1lLgorICAgICIiIgorICAgIG1zZyA9IGlucHV0X3N0ci5zdHJpcCgpICsgIiAiCisKKyAgICBmaWxlbmFtZSA9IGRlZmF1bHQocmF3X2lucHV0KG1zZyksIG5hbWUpCisKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBpZiBub3QgZmlsZW5hbWUgYW5kIGZpbGVuYW1lX2Nhbl9iZV9udWxsOgorICAgICAgICAgICAgcmV0dXJuIGZpbGVuYW1lCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBmaWxlbmFtZQorICAgICAgICBmaWxlbmFtZSA9IGRlZmF1bHQocmF3X2lucHV0KG1zZyksIG5hbWUpCisKKworZGVmIHJlcGxhY2VfZmlsZShyZXBsYWNlX3RoaXMsIHdpdGhfdGhpcyk6CisgICAgIiIiCisgICAgUmVwbGFjZSB0aGUgZ2l2ZW4gZmlsZSB3aXRoIHRoZSBjb250ZW50cyBvZiBmaWxlbmFtZSwgcmV0YWluaW5nCisgICAgdGhlIG9yaWdpbmFsIGZpbGVuYW1lLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgcmVwbGFjZV90aGlzLmNsb3NlKCkKKyAgICAgICAgc2h1dGlsLmNvcHkod2l0aF90aGlzLCByZXBsYWNlX3RoaXMubmFtZSkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcGFzcworCisKK2RlZiBib29sZWFuKGlucHV0X3N0ciwgbmFtZSk6CisgICAgIiIiCisgICAgUmV0dXJuIGxvd2VyY2FzZSB2ZXJzaW9uIG9mIGZpcnN0IGNoYXIgaW4gc3RyaW5nLCBvciB2YWx1ZSBpbiBuYW1lLgorICAgICIiIgorICAgIGlmIG5vdCBpbnB1dF9zdHI6CisgICAgICAgIHJldHVybiBuYW1lCisKKyAgICBzdHIgPSBpbnB1dF9zdHIubG93ZXIoKS5zdHJpcCgpCisgICAgaWYgc3RyIGFuZCBzdHJbMF0gPT0gInkiIG9yIHN0clswXSA9PSAibiI6CisgICAgICAgIHJldHVybiBzdHJbMF0KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gbmFtZQorCisKK2RlZiBzdHJpcF9iYXNlKGlucHV0X3N0cik6CisgICAgIiIiCisgICAgc3RyaXAgJy9iYXNlJyBvZmYgdGhlIGVuZCBvZiBpbnB1dF9zdHIsIHNvIHdlIGNhbiB1c2UgJ2Jhc2UnIGluCisgICAgdGhlIGJyYW5jaCBuYW1lcyB3ZSBwcmVzZW50IHRvIHRoZSB1c2VyLgorICAgICIiIgorICAgIGlmIGlucHV0X3N0ciBhbmQgaW5wdXRfc3RyLmVuZHN3aXRoKCIvYmFzZSIpOgorICAgICAgICByZXR1cm4gaW5wdXRfc3RyWzotbGVuKCIvYmFzZSIpXQorICAgIHJldHVybiBpbnB1dF9zdHIuc3RyaXAoKQorCisKK2RlZmVycmVkX2Nob2ljZXMgPSB7fQorCitkZWYgZ2VuX2Nob2ljZXNfZGVmZXIoaW5wdXRfbGluZSwgY29udGV4dCwgY2hlY2tsaXN0ID0gRmFsc2UpOgorICAgICIiIgorICAgIFNhdmUgdGhlIGNvbnRleHQgaGFzaGVkIHRoZSBuYW1lIG9mIHRoZSBpbnB1dCBpdGVtLCB3aGljaCB3aWxsIGJlCisgICAgcGFzc2VkIHRvIHRoZSBnZW4gZnVuY3Rpb24gbGF0ZXIuCisgICAgIiIiCisgICAgbmFtZSA9IGlucHV0X2xpbmUucHJvcHNbIm5hbWUiXQorCisgICAgdHJ5OgorICAgICAgICBuYW1lYXBwZW5kID0gaW5wdXRfbGluZS5wcm9wc1sibmFtZWFwcGVuZCJdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBuYW1lYXBwZW5kID0gIiIKKworICAgIHRyeToKKyAgICAgICAgYnJhbmNoZXNfYmFzZSA9IGlucHV0X2xpbmUucHJvcHNbImJyYW5jaGVzX2Jhc2UiXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgYnJhbmNoZXNfYmFzZSA9ICIiCisKKyAgICBmaWxlbmFtZSA9IGlucHV0X2xpbmUucHJvcHNbImZpbGVuYW1lIl0KKworICAgIGNsb3NldGFnX3N0YXJ0ID0gZmlsZW5hbWUuZmluZChDTE9TRV9UQUcpCisKKyAgICBpZiBjbG9zZXRhZ19zdGFydCAhPSAtMToKKyAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZVtjbG9zZXRhZ19zdGFydCArIGxlbihDTE9TRV9UQUcpOl0KKworICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3RyaXAoKQorICAgIGZpbGVuYW1lID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0KKworICAgIGNhcHR1cmVkX2NvbnRleHQgPSBjYXB0dXJlX2NvbnRleHQoY29udGV4dCkKKyAgICBjb250ZXh0WyJmaWxlbmFtZSJdID0gZmlsZW5hbWUKKyAgICBjYXB0dXJlZF9jb250ZXh0WyJmaWxlbmFtZSJdID0gZmlsZW5hbWUKKyAgICBjb250ZXh0WyJuYW1lYXBwZW5kIl0gPSBuYW1lYXBwZW5kCisgICAgY2FwdHVyZWRfY29udGV4dFsibmFtZWFwcGVuZCJdID0gbmFtZWFwcGVuZAorICAgIGNvbnRleHRbImJyYW5jaGVzX2Jhc2UiXSA9IGJyYW5jaGVzX2Jhc2UKKyAgICBjYXB0dXJlZF9jb250ZXh0WyJicmFuY2hlc19iYXNlIl0gPSBicmFuY2hlc19iYXNlCisKKyAgICBkZWZlcnJlZF9jaG9pY2UgPSAoaW5wdXRfbGluZSwgY2FwdHVyZWRfY29udGV4dCwgY2hlY2tsaXN0KQorICAgIGtleSA9IG5hbWUgKyAiXyIgKyBmaWxlbmFtZSArICJfIiArIG5hbWVhcHBlbmQKKyAgICBkZWZlcnJlZF9jaG9pY2VzW2tleV0gPSBkZWZlcnJlZF9jaG9pY2UKKworCitkZWYgaW52b2tlX2RlZmVycmVkX2Nob2ljZXMobmFtZSk6CisgICAgIiIiCisgICAgSW52b2tlIHRoZSBjaG9pY2UgZ2VuZXJhdGlvbiBmdW5jdGlvbiB1c2luZyB0aGUgY29udGV4dCBoYXNoZWQgYnkKKyAgICAnbmFtZScuCisgICAgIiIiCisgICAgZGVmZXJyZWRfY2hvaWNlID0gZGVmZXJyZWRfY2hvaWNlc1tuYW1lXQorICAgIGlucHV0X2xpbmUgPSBkZWZlcnJlZF9jaG9pY2VbMF0KKyAgICBjb250ZXh0ID0gZGVmZXJyZWRfY2hvaWNlWzFdCisgICAgY2hlY2tsaXN0ID0gZGVmZXJyZWRfY2hvaWNlWzJdCisKKyAgICBjb250ZXh0WyJuYW1lIl0gPSBuYW1lCisKKyAgICBjaG9pY2VzID0gaW5wdXRfbGluZS5nZW5fY2hvaWNlcyhjb250ZXh0LCBjaGVja2xpc3QpCisKKyAgICByZXR1cm4gY2hvaWNlcworCisKK2NsYXNzIENob2ljZWxpc3RJbnB1dExpbmUoTGlzdElucHV0TGluZSk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgY2hvaWNlbGlzdCBJbnB1dCBsaW5lcy4KKyAgICBwcm9wczoKKyAgICAgICAgbmFtZTogZXhhbXBsZSAtICJ4c2VydmVyX2Nob2ljZSIKKyAgICAgICAgbXNnOiAgZXhhbXBsZSAtICJQbGVhc2Ugc2VsZWN0IGFuIHhzZXJ2ZXIgZm9yIHRoaXMgbWFjaGluZSIKKyAgICByZXN1bHQ6CisgICAgICAgIFNldHMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgJ25hbWUnIHRvIHdoaWNoZXZlciBDaG9pY2Ugd2FzIGNob3NlbgorICAgICAgICBleGFtcGxlIC0geHNlcnZlcl9jaG9pY2UgPSAieHNlcnZlcl92ZXNhIgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pOgorICAgICAgICBMaXN0SW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubykKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICBJbnB1dExpbmUuZ2VuKHNlbGYsIGNvbnRleHQpCisKKyAgICAgICAgZ2VuX2Nob2ljZXNfZGVmZXIoc2VsZiwgY29udGV4dCkKKyAgICAgICAgbmFtZSA9IHNlbGYucHJvcHNbIm5hbWUiXQorICAgICAgICBuYW1lYXBwZW5kID0gY29udGV4dFsibmFtZWFwcGVuZCJdCisgICAgICAgIGZpbGVuYW1lID0gY29udGV4dFsiZmlsZW5hbWUiXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gc2VsZi5wcm9wc1siZGVmYXVsdCJdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gIiIKKworICAgICAgICBsaW5lID0gbmFtZSArICIgPSBkZWZhdWx0KGludm9rZV9kZWZlcnJlZF9jaG9pY2VzKFwiIiArIG5hbWUgKyAiXyIgKyBmaWxlbmFtZSArICJfIiArIG5hbWVhcHBlbmQgKyAiXCIpLCBcIiIgKyBkZWZhdWx0X2Nob2ljZSArICJcIikiCisKKyAgICAgICAgcmV0dXJuIGxpbmUKKworCitjbGFzcyBMaXN0VmFsSW5wdXRMaW5lKElucHV0TGluZSk6CisgICAgIiIiCisgICAgQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgY2hvaWNlIGFuZCBjaGVja2JveCBJbnB1dCBsaW5lcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKToKKyAgICAgICAgSW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnZhbCA9IHNlbGYucHJvcHNbInZhbCJdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGlucHV0ICd2YWwnIHByb3BlcnR5IGZvdW5kIiwgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmRlc2MgPSBzZWxmLnByb3BzWyJtc2ciXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBpbnB1dCAnbXNnJyBwcm9wZXJ0eSBmb3VuZCIsIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisKKworY2xhc3MgQ2hvaWNlSW5wdXRMaW5lKExpc3RWYWxJbnB1dExpbmUpOgorICAgICIiIgorICAgIEJhc2UgY2xhc3MgZm9yIGNob2ljZWxpc3QgaXRlbSBJbnB1dCBsaW5lcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKToKKyAgICAgICAgTGlzdFZhbElucHV0TGluZS5fX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBDaGVja2xpc3RJbnB1dExpbmUoTGlzdElucHV0TGluZSk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgY2hlY2tsaXN0IElucHV0IGxpbmVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pOgorICAgICAgICBMaXN0SW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubykKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICBJbnB1dExpbmUuZ2VuKHNlbGYsIGNvbnRleHQpCisKKyAgICAgICAgZ2VuX2Nob2ljZXNfZGVmZXIoc2VsZiwgY29udGV4dCwgVHJ1ZSkKKyAgICAgICAgbmFtZSA9IHNlbGYucHJvcHNbIm5hbWUiXQorICAgICAgICBuYW1lYXBwZW5kID0gY29udGV4dFsibmFtZWFwcGVuZCJdCisgICAgICAgIGZpbGVuYW1lID0gY29udGV4dFsiZmlsZW5hbWUiXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gc2VsZi5wcm9wc1siZGVmYXVsdCJdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gIiIKKworICAgICAgICBsaW5lID0gbmFtZSArICIgPSBkZWZhdWx0KGludm9rZV9kZWZlcnJlZF9jaG9pY2VzKFwiIiArIG5hbWUgKyAiXyIgKyBmaWxlbmFtZSArICJfIiArIG5hbWVhcHBlbmQgKyAiXCIpLCBcIiIgKyBkZWZhdWx0X2Nob2ljZSArICJcIikiCisKKyAgICAgICAgcmV0dXJuIGxpbmUKKworCitjbGFzcyBDaGVja0lucHV0TGluZShMaXN0VmFsSW5wdXRMaW5lKToKKyAgICAiIiIKKyAgICBCYXNlIGNsYXNzIGZvciBjaGVja2xpc3QgaXRlbSBJbnB1dCBsaW5lcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKToKKyAgICAgICAgTGlzdFZhbElucHV0TGluZS5fX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCitkaXJuYW1lX3N1YnN0aXR1dGlvbnMgPSB7fQorCitjbGFzcyBTdWJzdHJhdGVCYXNlKG9iamVjdCk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgYm90aCBleHBhbmRlZCBhbmQgdW5leHBhbmRlZCBmaWxlIGFuZCBkaXIgY29udGFpbmVyCisgICAgb2JqZWN0cy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGZpbGViYXNlLCBvdXRfZmlsZWJhc2UpOgorICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi5maWxlYmFzZSA9IGZpbGViYXNlCisgICAgICAgIHNlbGYudHJhbnNsYXRlZF9maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYub3V0X2ZpbGViYXNlID0gb3V0X2ZpbGViYXNlCisgICAgICAgIHNlbGYucmF3X2xpbmVzID0gW10KKyAgICAgICAgc2VsZi5leHBhbmRlZF9saW5lcyA9IFtdCisgICAgICAgIHNlbGYucHJldl9jaG9pY2VsaXN0ID0gTm9uZQorCisgICAgZGVmIHBhcnNlX2Vycm9yKHNlbGYsIG1zZywgbGluZW5vLCBsaW5lKToKKyAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCIlczogWyVzOiAlZF06ICVzIiAlIChtc2csIHNlbGYuZmlsZW5hbWUsIGxpbmVubywgbGluZSkpCisKKyAgICBkZWYgZXhwYW5kX2lucHV0X3RhZyhzZWxmLCB0YWcsIGxpbmVubyk6CisgICAgICAgICIiIgorICAgICAgICBJbnB1dCB0YWdzIGNvbnNpc3Qgb2YgdGhlIHdvcmQgJ2lucHV0JyBhdCB0aGUgYmVnaW5uaW5nLAorICAgICAgICBmb2xsb3dlZCBieSBuYW1lOnZhbHVlIHByb3BlcnR5IHBhaXJzIHdoaWNoIGFyZSBjb252ZXJ0ZWQgaW50bworICAgICAgICBhIGRpY3Rpb25hcnkuCisgICAgICAgICIiIgorICAgICAgICBwcm9wc3RyID0gdGFnW2xlbihJTlBVVF9UQUcpOl0KKworICAgICAgICBwcm9wcyA9IGRpY3QocHJvcC5zcGxpdCgiOiIsIDEpIGZvciBwcm9wIGluIHNobGV4LnNwbGl0KHByb3BzdHIpKQorICAgICAgICBwcm9wc1siZmlsZW5hbWUiXSA9IHNlbGYuZmlsZW5hbWUKKworICAgICAgICBpbnB1dF90eXBlID0gcHJvcHNbSU5QVVRfVFlQRV9QUk9QRVJUWV0KKyAgICAgICAgaWYgbm90IHByb3BzW0lOUFVUX1RZUEVfUFJPUEVSVFldOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gaW5wdXQgJ3R5cGUnIHByb3BlcnR5IGZvdW5kIiwgbGluZW5vLCB0YWcpCisKKyAgICAgICAgaWYgaW5wdXRfdHlwZSA9PSAiYm9vbGVhbiI6CisgICAgICAgICAgICByZXR1cm4gQm9vbGVhbklucHV0TGluZShwcm9wcywgdGFnLCBsaW5lbm8pCisgICAgICAgIGlmIGlucHV0X3R5cGUgPT0gImVkaXQiOgorICAgICAgICAgICAgcmV0dXJuIEVkaXRCb3hJbnB1dExpbmUocHJvcHMsIHRhZywgbGluZW5vKQorICAgICAgICBpZiBpbnB1dF90eXBlID09ICJlZGl0LWdpdC1yZXBvIjoKKyAgICAgICAgICAgIHJldHVybiBHaXRSZXBvRWRpdEJveElucHV0TGluZShwcm9wcywgdGFnLCBsaW5lbm8pCisgICAgICAgIGlmIGlucHV0X3R5cGUgPT0gImVkaXQtZmlsZSI6CisgICAgICAgICAgICByZXR1cm4gRmlsZUVkaXRCb3hJbnB1dExpbmUocHJvcHMsIHRhZywgbGluZW5vKQorICAgICAgICBlbGlmIGlucHV0X3R5cGUgPT0gImNob2ljZWxpc3QiOgorICAgICAgICAgICAgc2VsZi5wcmV2X2Nob2ljZWxpc3QgPSBDaG9pY2VsaXN0SW5wdXRMaW5lKHByb3BzLCB0YWcsIGxpbmVubykKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnByZXZfY2hvaWNlbGlzdAorICAgICAgICBlbGlmIGlucHV0X3R5cGUgPT0gImNob2ljZSI6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5wcmV2X2Nob2ljZWxpc3Q6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiRm91bmQgJ2Nob2ljZScgaW5wdXQgdGFnIGJ1dCBubyBwcmV2aW91cyBjaG9pY2VsaXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywgdGFnKQorICAgICAgICAgICAgY2hvaWNlID0gQ2hvaWNlSW5wdXRMaW5lKHByb3BzLCB0YWcsIGxpbmVubykKKyAgICAgICAgICAgIHNlbGYucHJldl9jaG9pY2VsaXN0LmNob2ljZXMuYXBwZW5kKGNob2ljZSkKKyAgICAgICAgICAgIHJldHVybiBjaG9pY2UKKyAgICAgICAgZWxpZiBpbnB1dF90eXBlID09ICJjaGVja2xpc3QiOgorICAgICAgICAgICAgcmV0dXJuIENoZWNrbGlzdElucHV0TGluZShwcm9wcywgdGFnLCBsaW5lbm8pCisgICAgICAgIGVsaWYgaW5wdXRfdHlwZSA9PSAiY2hlY2siOgorICAgICAgICAgICAgcmV0dXJuIENoZWNrSW5wdXRMaW5lKHByb3BzLCB0YWcsIGxpbmVubykKKworICAgIGRlZiBleHBhbmRfYXNzaWdubWVudF90YWcoc2VsZiwgc3RhcnQsIGxpbmUsIGxpbmVubyk6CisgICAgICAgICIiIgorICAgICAgICBFeHBhbmQgYWxsIHRhZ3MgaW4gYSBsaW5lLgorICAgICAgICAiIiIKKyAgICAgICAgZXhwYW5kZWRfbGluZSA9IEFzc2lnbm1lbnRMaW5lKGxpbmUucnN0cmlwKCkpCisKKyAgICAgICAgd2hpbGUgc3RhcnQgIT0gLTE6CisgICAgICAgICAgICBlbmQgPSBsaW5lLmZpbmQoQ0xPU0VfVEFHLCBzdGFydCkKKyAgICAgICAgICAgIGlmIGVuZCA9PSAtMToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBjbG9zZSB0YWcgZm91bmQgZm9yIGFzc2lnbm1lbnQgdGFnIiwgbGluZW5vLCBsaW5lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuYW1lID0gbGluZVtzdGFydCArIGxlbihBU1NJR05fVEFHKTplbmRdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBleHBhbmRlZF9saW5lLmFkZF9hc3NpZ25tZW50KHN0YXJ0LCBlbmQgKyBsZW4oQ0xPU0VfVEFHKSwgbmFtZSkKKyAgICAgICAgICAgICAgICBzdGFydCA9IGxpbmUuZmluZChBU1NJR05fVEFHLCBlbmQpCisKKyAgICAgICAgcmV0dXJuIGV4cGFuZGVkX2xpbmUKKworICAgIGRlZiBleHBhbmRfdGFnKHNlbGYsIGxpbmUsIGxpbmVubyk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIGEgcHJvY2Vzc2VkIHRhZyBsaW5lLCBvciBOb25lIGlmIHRoZXJlIHdhcyBubyB0YWcKKworICAgICAgICBUaGUgcnVsZXMgZm9yIHRhZ3MgYXJlIHZlcnkgc2ltcGxlOgorICAgICAgICAgICAgLSBObyBuZXN0ZWQgdGFncworICAgICAgICAgICAgLSBUYWdzIHN0YXJ0IHdpdGgge3sgYW5kIGVuZCB3aXRoIH19CisgICAgICAgICAgICAtIEFuIGFzc2lnbiB0YWcsIHt7PSwgY2FuIGFwcGVhciBhbnl3aGVyZSBhbmQgd2lsbAorICAgICAgICAgICAgICBiZSByZXBsYWNlZCB3aXRoIHdoYXQgdGhlIGFzc2lnbm1lbnQgZXZhbHVhdGVzIHRvCisgICAgICAgICAgICAtIEFueSBvdGhlciB0YWcgb2NjdXBpZXMgdGhlIHdob2xlIGxpbmUgaXQgaXMgb24KKyAgICAgICAgICAgICAgICAtIGlmIHRoZXJlJ3MgYW55dGhpbmcgZWxzZSBvbiB0aGUgdGFnIGxpbmUsIGl0J3MgYW4gZXJyb3IKKyAgICAgICAgICAgICAgICAtIGlmIGl0IHN0YXJ0cyB3aXRoICdpbnB1dCcsIGl0J3MgYW4gaW5wdXQgdGFnIGFuZAorICAgICAgICAgICAgICAgICAgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIHByb21wdGluZyBhbmQgc2V0dGluZyB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAtIGFueXRoaW5nIGVsc2UgaXMgc3RyYWlnaHQgUHl0aG9uCisgICAgICAgICAgICAgICAgLSB0YWdzIGFyZSBpbiBlZmZlY3Qgb25seSB1bnRpbCB0aGUgbmV4dCBibGFuayBsaW5lIG9yIHRhZyBvciAncGFzcycgdGFnCisgICAgICAgICAgICAgICAgLSB3ZSBkb24ndCBoYXZlIGluZGVudGF0aW9uIGluIHRhZ3MsIGJ1dCB3ZSBuZWVkIHNvbWUgd2F5IHRvIGVuZCBhIGJsb2NrCisgICAgICAgICAgICAgICAgICBmb3JjZWZ1bGx5IHdpdGhvdXQgYmxhbmsgbGluZXMgb3Igb3RoZXIgdGFncyAtIHRoYXQncyB0aGUgJ3Bhc3MnIHRhZworICAgICAgICAgICAgICAgIC0gdG9kbzogaW1wbGVtZW50IHBhc3MgdGFnCisgICAgICAgICAgICAgICAgLSBkaXJlY3RvcmllcyBhbmQgZmlsZW5hbWVzIGNhbiBoYXZlIHRhZ3MgYXMgd2VsbCwgYnV0IG9ubHkgYXNzaWdubWVudAorICAgICAgICAgICAgICAgICAgYW5kICdpZicgY29kZSBsaW5lcworICAgICAgICAgICAgICAgIC0gZGlyZWN0b3JpZXMgYW5kIGZpbGVuYW1lcyBhcmUgdGhlIG9ubHkgY2FzZSB3aGVyZSBub3JtYWwgdGFncyBjYW4KKyAgICAgICAgICAgICAgICAgIGNvZXhpc3Qgd2l0aCBub3JtYWwgdGV4dCBvbiB0aGUgc2FtZSAnbGluZScKKyAgICAgICAgIiIiCisgICAgICAgIHN0YXJ0ID0gbGluZS5maW5kKEFTU0lHTl9UQUcpCisgICAgICAgIGlmIHN0YXJ0ICE9IC0xOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXhwYW5kX2Fzc2lnbm1lbnRfdGFnKHN0YXJ0LCBsaW5lLCBsaW5lbm8pCisKKyAgICAgICAgc3RhcnQgPSBsaW5lLmZpbmQoT1BFTl9UQUcpCisgICAgICAgIGlmIHN0YXJ0ID09IC0xOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBlbmQgPSBsaW5lLmZpbmQoQ0xPU0VfVEFHLCAwKQorICAgICAgICBpZiBlbmQgPT0gLTE6CisgICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gY2xvc2UgdGFnIGZvdW5kIGZvciBvcGVuIHRhZyIsIGxpbmVubywgbGluZSkKKworICAgICAgICB0YWcgPSBsaW5lW3N0YXJ0ICsgbGVuKE9QRU5fVEFHKTplbmRdLnN0cmlwKCkKKworICAgICAgICBpZiBub3QgdGFnLmxzdHJpcCgpLnN0YXJ0c3dpdGgoSU5QVVRfVEFHKToKKyAgICAgICAgICAgIHJldHVybiBDb2RlTGluZSh0YWcpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuZXhwYW5kX2lucHV0X3RhZyh0YWcsIGxpbmVubykKKworICAgIGRlZiBhcHBlbmRfdHJhbnNsYXRlZF9maWxlbmFtZShzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBTaW1wbHkgYXBwZW5kIGZpbGVuYW1lIHRvIHRyYW5zbGF0ZWRfZmlsZW5hbWUKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYudHJhbnNsYXRlZF9maWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLnRyYW5zbGF0ZWRfZmlsZW5hbWUsIGZpbGVuYW1lKQorCisgICAgZGVmIGdldF9zdWJzdGl0dXRlZF9maWxlX29yX2Rpcl9uYW1lKHNlbGYsIGZpcnN0X2xpbmUsIHRhZyk6CisgICAgICAgICIiIgorICAgICAgICBJZiBmaWxlIG9yIGRpciBuYW1lcyBjb250YWluIG5hbWUgc3Vic3RpdHV0aW9ucywgcmV0dXJuIHRoZSBuYW1lCisgICAgICAgIHRvIHN1YnN0aXR1dGUuICBOb3RlIHRoYXQgdGhpcyBpcyBqdXN0IHRoZSBmaWxlIG9yIGRpcm5hbWUgYW5kCisgICAgICAgIGRvZXNuJ3QgaW5jbHVkZSB0aGUgcGF0aC4KKyAgICAgICAgIiIiCisgICAgICAgIGZpbGVuYW1lID0gZmlyc3RfbGluZS5maW5kKHRhZykKKyAgICAgICAgaWYgZmlsZW5hbWUgIT0gLTE6CisgICAgICAgICAgICBmaWxlbmFtZSArPSBsZW4odGFnKQorICAgICAgICBzdWJzdGl0dXRlZF9maWxlbmFtZSA9IGZpcnN0X2xpbmVbZmlsZW5hbWU6XS5zdHJpcCgpCisgICAgICAgIHRoaXMgPSBzdWJzdGl0dXRlZF9maWxlbmFtZS5maW5kKCIgdGhpcyIpCisgICAgICAgIGlmIHRoaXMgIT0gLTE6CisgICAgICAgICAgICBoZWFkLCB0YWlsID0gb3MucGF0aC5zcGxpdChzZWxmLmZpbGVuYW1lKQorICAgICAgICAgICAgc3Vic3RpdHV0ZWRfZmlsZW5hbWUgPSBzdWJzdGl0dXRlZF9maWxlbmFtZVs6dGhpcyArIDFdICsgdGFpbAorICAgICAgICAgICAgaWYgdGFnID09IERJUk5BTUVfVEFHOiAjIGdldCByaWQgb2YgLm5vaW5zdGFsbCBpbiBkaXJuYW1lCisgICAgICAgICAgICAgICAgc3Vic3RpdHV0ZWRfZmlsZW5hbWUgPSBzdWJzdGl0dXRlZF9maWxlbmFtZS5zcGxpdCgnLicpWzBdCisKKyAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVkX2ZpbGVuYW1lCisKKyAgICBkZWYgZ2V0X3N1YnN0aXR1dGVkX2ZpbGVuYW1lKHNlbGYsIGZpcnN0X2xpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSWYgYSBmaWxlbmFtZSBjb250YWlucyBhIG5hbWUgc3Vic3RpdHV0aW9uLCByZXR1cm4gdGhlIG5hbWUgdG8KKyAgICAgICAgc3Vic3RpdHV0ZS4gIE5vdGUgdGhhdCB0aGlzIGlzIGp1c3QgdGhlIGZpbGVuYW1lIGFuZCBkb2Vzbid0CisgICAgICAgIGluY2x1ZGUgdGhlIHBhdGguCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5nZXRfc3Vic3RpdHV0ZWRfZmlsZV9vcl9kaXJfbmFtZShmaXJzdF9saW5lLCBGSUxFTkFNRV9UQUcpCisKKyAgICBkZWYgZ2V0X3N1YnN0aXR1dGVkX2Rpcm5hbWUoc2VsZiwgZmlyc3RfbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBJZiBhIGRpcm5hbWUgY29udGFpbnMgYSBuYW1lIHN1YnN0aXR1dGlvbiwgcmV0dXJuIHRoZSBuYW1lIHRvCisgICAgICAgIHN1YnN0aXR1dGUuICBOb3RlIHRoYXQgdGhpcyBpcyBqdXN0IHRoZSBkaXJuYW1lIGFuZCBkb2Vzbid0CisgICAgICAgIGluY2x1ZGUgdGhlIHBhdGguCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5nZXRfc3Vic3RpdHV0ZWRfZmlsZV9vcl9kaXJfbmFtZShmaXJzdF9saW5lLCBESVJOQU1FX1RBRykKKworICAgIGRlZiBzdWJzdGl0dXRlX2ZpbGVuYW1lKHNlbGYsIGZpcnN0X2xpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCB0aGUgZmlsZW5hbWUgaW4gZmlyc3RfbGluZSBhbmQgYXBwZW5kIGl0IHRvIHRyYW5zbGF0ZWRfZmlsZW5hbWUuCisgICAgICAgICIiIgorICAgICAgICBzdWJzdGl0dXRlZF9maWxlbmFtZSA9IHNlbGYuZ2V0X3N1YnN0aXR1dGVkX2ZpbGVuYW1lKGZpcnN0X2xpbmUpCisgICAgICAgIHNlbGYuYXBwZW5kX3RyYW5zbGF0ZWRfZmlsZW5hbWUoc3Vic3RpdHV0ZWRfZmlsZW5hbWUpOworCisgICAgZGVmIHN1YnN0aXR1dGVfZGlybmFtZShzZWxmLCBmaXJzdF9saW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgdGhlIGRpcm5hbWUgaW4gZmlyc3RfbGluZSBhbmQgYXBwZW5kIGl0IHRvIHRyYW5zbGF0ZWRfZmlsZW5hbWUuCisgICAgICAgICIiIgorICAgICAgICBzdWJzdGl0dXRlZF9kaXJuYW1lID0gc2VsZi5nZXRfc3Vic3RpdHV0ZWRfZGlybmFtZShmaXJzdF9saW5lKQorICAgICAgICBzZWxmLmFwcGVuZF90cmFuc2xhdGVkX2ZpbGVuYW1lKHN1YnN0aXR1dGVkX2Rpcm5hbWUpOworCisgICAgZGVmIGlzX2ZpbGVuYW1lX3N1YnN0aXR1dGlvbihzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIERvIHdlIGhhdmUgYSBmaWxlbmFtZSBzdWJ1c3RpdGlvbj8KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxpbmUuZmluZChGSUxFTkFNRV9UQUcpICE9IC0xOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNfZGlybmFtZV9zdWJzdGl0dXRpb24oc2VsZiwgbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBEbyB3ZSBoYXZlIGEgZGlybmFtZSBzdWJ1c3RpdGlvbj8KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxpbmUuZmluZChESVJOQU1FX1RBRykgIT0gLTE6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiB0cmFuc2xhdGVfZGlybmFtZShzZWxmLCBmaXJzdF9saW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIEp1c3Qgc2F2ZSB0aGUgZmlyc3RfbGluZSBtYXBwZWQgYnkgZmlsZW5hbWUuICBUaGUgbGF0ZXIgcGFzcworICAgICAgICB0aHJvdWdoIHRoZSBkaXJlY3RvcmllcyB3aWxsIGxvb2sgZm9yIGEgZGlybmFtZS5ub2luc3RhbGwKKyAgICAgICAgbWF0Y2ggYW5kIGdyYWIgdGhlIHN1YnN0aXR1dGlvbiBsaW5lLgorICAgICAgICAiIiIKKyAgICAgICAgZGlybmFtZV9zdWJzdGl0dXRpb25zW3NlbGYuZmlsZW5hbWVdID0gZmlyc3RfbGluZQorCisgICAgZGVmIHRyYW5zbGF0ZV9kaXJuYW1lc19pbl9wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiIKKyAgICAgICAgVHJhbnNsYXRlIGRpcm5hbWVzIGJlbG93IHRoaXMgZmlsZSBvciBkaXIsIG5vdCBpbmNsdWRpbmcgdGFpbC4KKyAgICAgICAgZGlybmFtZV9zdWJzdGl0aXRpb25zIGlzIGtleWVkIG9uIGFjdHVhbCB1bnRyYW5zbGF0ZWQgZmlsZW5hbWVzLgorICAgICAgICB0cmFuc2xhdGVkX3BhdGggY29udGFpbnMgdGhlIHN1YnNpdGl0dXRpb25zIGZvciBlYWNoIGVsZW1lbnQuCisgICAgICAgICIiIgorICAgICAgICByZW1haW5kZXIgPSBwYXRoW2xlbihzZWxmLmZpbGViYXNlKSsxOl0KKyAgICAgICAgdHJhbnNsYXRlZF9wYXRoID0gdW50cmFuc2xhdGVkX3BhdGggPSBzZWxmLmZpbGViYXNlCisKKyAgICAgICAgdW50cmFuc2xhdGVkX2RpcnMgPSByZW1haW5kZXIuc3BsaXQob3Muc2VwKQorCisgICAgICAgIGZvciBkaXIgaW4gdW50cmFuc2xhdGVkX2RpcnM6CisgICAgICAgICAgICBrZXkgPSBvcy5wYXRoLmpvaW4odW50cmFuc2xhdGVkX3BhdGgsIGRpciArICcubm9pbnN0YWxsJykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmaXJzdF9saW5lID0gZGlybmFtZV9zdWJzdGl0dXRpb25zW2tleV0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICB0cmFuc2xhdGVkX3BhdGggPSBvcy5wYXRoLmpvaW4odHJhbnNsYXRlZF9wYXRoLCBkaXIpCisgICAgICAgICAgICAgICAgdW50cmFuc2xhdGVkX3BhdGggPSBvcy5wYXRoLmpvaW4odW50cmFuc2xhdGVkX3BhdGgsIGRpcikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc3Vic3RpdHV0ZWRfZGlyID0gc2VsZi5nZXRfc3Vic3RpdHV0ZWRfZGlybmFtZShmaXJzdF9saW5lKQorICAgICAgICAgICAgdHJhbnNsYXRlZF9wYXRoID0gb3MucGF0aC5qb2luKHRyYW5zbGF0ZWRfcGF0aCwgc3Vic3RpdHV0ZWRfZGlyKQorICAgICAgICAgICAgdW50cmFuc2xhdGVkX3BhdGggPSBvcy5wYXRoLmpvaW4odW50cmFuc2xhdGVkX3BhdGgsIGRpcikKKworICAgICAgICByZXR1cm4gdHJhbnNsYXRlZF9wYXRoCisKKyAgICBkZWYgdHJhbnNsYXRlX2ZpbGVfb3JfZGlyX25hbWUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBPcmlnaW5hbGx5IHdlIHdlcmUgYWxsb3dlZCB0byB1c2Ugb3Blbi9jbG9zZS9hc3NpZ24gdGFncyBhbmQgcHl0aG9uCisgICAgICAgIGNvZGUgaW4gdGhlIGZpbGVuYW1lLCB3aGljaCBmaXQgaW4gbmljZWx5IHdpdGggdGhlIHdheSB3ZQorICAgICAgICBwcm9jZXNzZWQgdGhlIHRlbXBsYXRlcyBhbmQgZ2VuZXJhdGVkIGNvZGUuICBOb3cgdGhhdCB3ZSBjYW4ndAorICAgICAgICBkbyB0aGF0LCB3ZSBtYWtlIHRob3NlIHRhZ3MgcHJvcGVyIGZpbGUgY29udGVudHMgYW5kIGhhdmUgdGhpcworICAgICAgICBwYXNzIHN1YnN0aXR1dGUgdGhlIG5pY2UgYnV0IG5vbi1mdW5jdGlvbmFsIG5hbWVzIHdpdGggdGhvc2UKKyAgICAgICAgJ3N0cmFuZ2UnIG9uZXMsIGFuZCB0aGVuIHByb2NlZWQgYXMgdXN1YWwuCisKKyAgICAgICAgU28sIGlmIGZpbGVzIG9yIG1hdGNoaW5nIGRpcjwubm9pbnN0YWxsPiBmaWxlcyBjb250YWluCisgICAgICAgIGZpbGVuYW1lIHN1YnN0aXR1dGlvbnMsIHRoaXMgZnVuY3Rpb24gdHJhbnNsYXRlcyB0aGVtIGludG8gdGhlCisgICAgICAgIGNvcnJlc3BvbmRpbmcgJ3N0cmFuZ2UnIG5hbWVzLCB3aGljaCBmdXR1cmUgcGFzc2VzIHdpbGwgZXhwYW5kCisgICAgICAgIGFzIHRoZXkgYWx3YXlzIGhhdmUuICBUaGUgcmVzdWx0aW5nIHBhdGhuYW1lIGlzIGtlcHQgaW4gdGhlCisgICAgICAgIGZpbGUgb3IgZGlyZWN0b3J5J3MgdHJhbnNsYXRlZF9maWxlbmFtZS4gIEFub3RoZXIgd2F5IHRvIHRoaW5rCisgICAgICAgIGFib3V0IGl0IGlzIHRoYXQgc2VsZi5maWxlbmFtZSBpcyB0aGUgaW5wdXQgZmlsZW5hbWUsIGFuZAorICAgICAgICB0cmFuc2xhdGVkX2ZpbGVuYW1lIGlzIHRoZSBvdXRwdXQgZmlsZW5hbWUgYmVmb3JlIGV4cGFuc2lvbi4KKyAgICAgICAgIiIiCisgICAgICAgICMgcmVtb3ZlIGxlYWYgZmlsZSBvciBkaXJuYW1lCisgICAgICAgIGhlYWQsIHRhaWwgPSBvcy5wYXRoLnNwbGl0KHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHRyYW5zbGF0ZWRfcGF0aCA9IHNlbGYudHJhbnNsYXRlX2Rpcm5hbWVzX2luX3BhdGgoaGVhZCkKKyAgICAgICAgc2VsZi50cmFuc2xhdGVkX2ZpbGVuYW1lID0gdHJhbnNsYXRlZF9wYXRoCisKKyAgICAgICAgIyBUaGlzIGlzIGEgZGlybmFtZSAtIGRvZXMgaXQgaGF2ZSBhIG1hdGNoaW5nIC5ub2luc3RhbGwgd2l0aAorICAgICAgICAjIGEgc3Vic3RpdHV0aW9uPyAgSWYgc28sIGFwcGx5IHRoZSBkaXJuYW1lIHN1YnNpdGl0dXRpb24uCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShzZWxmLmZpbGVuYW1lKToKKyAgICAgICAgICAgIGtleSA9IHNlbGYuZmlsZW5hbWUgKyAiLm5vaW5zdGFsbCIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmaXJzdF9saW5lID0gZGlybmFtZV9zdWJzdGl0dXRpb25zW2tleV0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFwcGVuZF90cmFuc2xhdGVkX2ZpbGVuYW1lKHRhaWwpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLnN1YnN0aXR1dGVfZGlybmFtZShmaXJzdF9saW5lKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZiA9IG9wZW4oc2VsZi5maWxlbmFtZSkKKyAgICAgICAgZmlyc3RfbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAjIFRoaXMgaXMgYSBub3JtYWwgZmlsZW5hbWUgbm90IG5lZWRpbmcgdHJhbnNsYXRpb24sIGp1c3QgdXNlCisgICAgICAgICMgaXQgYXMtaXMuCisgICAgICAgIGlmIG5vdCBmaXJzdF9saW5lIG9yIG5vdCBmaXJzdF9saW5lLnN0YXJ0c3dpdGgoIiMiKToKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX3RyYW5zbGF0ZWRfZmlsZW5hbWUodGFpbCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgSWYgd2UgaGF2ZSBhIGZpbGVuYW1lIHN1YnN0aXR1dGlvbiAoZmlyc3QgbGluZSBpbiB0aGUgZmlsZQorICAgICAgICAjIGlzIGEgRklMRU5BTUVfVEFHIGxpbmUpIGRvIHRoZSBzdWJzdGl0dXRpb24gbm93LiAgSWYgd2UgaGF2ZQorICAgICAgICAjIGEgZGlybmFtZSBzdWJzdGl0dXRpb24gKERJUk5BTUVfVEFHIGluIGRpcm5hbWUubm9pbnN0YWxsCisgICAgICAgICMgbWV0YS1maWxlKSwgaGFzaCBpdCBzbyB3ZSBjYW4gYXBwbHkgaXQgd2hlbiB3ZSBzZWUgdGhlCisgICAgICAgICMgbWF0Y2hpbmcgZGlybmFtZSBsYXRlci4gIE90aGVyd2lzZSB3ZSBoYXZlIGEgcmVndWxhcgorICAgICAgICAjIGZpbGVuYW1lLCBqdXN0IHVzZSBpdCBhcy1pcy4KKyAgICAgICAgaWYgc2VsZi5pc19maWxlbmFtZV9zdWJzdGl0dXRpb24oZmlyc3RfbGluZSk6CisgICAgICAgICAgICBzZWxmLnN1YnN0aXR1dGVfZmlsZW5hbWUoZmlyc3RfbGluZSkKKyAgICAgICAgZWxpZiBzZWxmLmlzX2Rpcm5hbWVfc3Vic3RpdHV0aW9uKGZpcnN0X2xpbmUpOgorICAgICAgICAgICAgc2VsZi50cmFuc2xhdGVfZGlybmFtZShmaXJzdF9saW5lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hcHBlbmRfdHJhbnNsYXRlZF9maWxlbmFtZSh0YWlsKQorCisgICAgZGVmIGV4cGFuZF9maWxlX29yX2Rpcl9uYW1lKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgRXhwYW5kIGZpbGUgb3IgZGlyIG5hbWVzIGludG8gY29kZWxpbmUuICBEaXJuYW1lcyBhbmQKKyAgICAgICAgZmlsZW5hbWVzIGNhbiBvbmx5IGhhdmUgYXNzaWdubWVudHMgb3IgaWYgc3RhdGVtZW50cy4gIEZpcnN0CisgICAgICAgIHRyYW5zbGF0ZSBpZiBzdGF0ZW1lbnRzIGludG8gQ29kZUxpbmUgKyAoZGlybmFtZSBvciBmaWxlbmFtZQorICAgICAgICBjcmVhdGlvbikuCisgICAgICAgICIiIgorICAgICAgICBsaW5lbm8gPSAwCisKKyAgICAgICAgbGluZSA9IHNlbGYudHJhbnNsYXRlZF9maWxlbmFtZVtsZW4oc2VsZi5maWxlYmFzZSk6XQorICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lWzE6XQorICAgICAgICBvcGVudGFnX3N0YXJ0ID0gLTEKKworICAgICAgICBzdGFydCA9IGxpbmUuZmluZChPUEVOX1RBRykKKyAgICAgICAgd2hpbGUgc3RhcnQgIT0gLTE6CisgICAgICAgICAgICBpZiBub3QgbGluZVtzdGFydDpdLnN0YXJ0c3dpdGgoQVNTSUdOX1RBRyk6CisgICAgICAgICAgICAgICAgb3BlbnRhZ19zdGFydCA9IHN0YXJ0CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHN0YXJ0ICs9IGxlbihBU1NJR05fVEFHKQorICAgICAgICAgICAgc3RhcnQgPSBsaW5lLmZpbmQoT1BFTl9UQUcsIHN0YXJ0KQorCisgICAgICAgIGlmIG9wZW50YWdfc3RhcnQgIT0gLTE6CisgICAgICAgICAgICBlbmQgPSBsaW5lLmZpbmQoQ0xPU0VfVEFHLCBvcGVudGFnX3N0YXJ0KQorICAgICAgICAgICAgaWYgZW5kID09IC0xOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGNsb3NlIHRhZyBmb3VuZCBmb3Igb3BlbiB0YWciLCBsaW5lbm8sIGxpbmUpCisgICAgICAgICAgICAjIHdlIGhhdmUgYSB7eyB0YWcgaS5lLiBjb2RlCisgICAgICAgICAgICB0YWcgPSBsaW5lW29wZW50YWdfc3RhcnQgKyBsZW4oT1BFTl9UQUcpOmVuZF0uc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IHRhZy5sc3RyaXAoKS5zdGFydHN3aXRoKElGX1RBRyk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiT25seSAnaWYnIHRhZ3MgYXJlIGFsbG93ZWQgaW4gZmlsZSBvciBkaXJlY3RvcnkgbmFtZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vLCBsaW5lKQorICAgICAgICAgICAgc2VsZi5leHBhbmRlZF9saW5lcy5hcHBlbmQoQ29kZUxpbmUodGFnKSkKKworICAgICAgICAgICAgIyBldmVyeXRoaW5nIGFmdGVyIH19IGlzIHRoZSBhY3R1YWwgZmlsZW5hbWUgKHBvc3NpYmx5IHdpdGggYXNzaWdubWVudHMpCisgICAgICAgICAgICAjIGV2ZXJ5dGhpbmcgYmVmb3JlIGlzIHRoZSBwYXRobmFtZQorICAgICAgICAgICAgbGluZSA9IGxpbmVbOm9wZW50YWdfc3RhcnRdICsgbGluZVtlbmQgKyBsZW4oQ0xPU0VfVEFHKTpdLnN0cmlwKCkKKworICAgICAgICBhc3NpZ25fc3RhcnQgPSBsaW5lLmZpbmQoQVNTSUdOX1RBRykKKyAgICAgICAgaWYgYXNzaWduX3N0YXJ0ICE9IC0xOgorICAgICAgICAgICAgYXNzaWdubWVudF90YWcgPSBzZWxmLmV4cGFuZF9hc3NpZ25tZW50X3RhZyhhc3NpZ25fc3RhcnQsIGxpbmUsIGxpbmVubykKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZiwgU3Vic3RyYXRlRmlsZSk6CisgICAgICAgICAgICAgICAgYXNzaWdubWVudF90YWcuaXNfZmlsZW5hbWUgPSBUcnVlCisgICAgICAgICAgICAgICAgYXNzaWdubWVudF90YWcub3V0X2ZpbGViYXNlID0gc2VsZi5vdXRfZmlsZWJhc2UKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLCBTdWJzdHJhdGVEaXIpOgorICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRfdGFnLmlzX2Rpcm5hbWUgPSBUcnVlCisgICAgICAgICAgICAgICAgYXNzaWdubWVudF90YWcub3V0X2ZpbGViYXNlID0gc2VsZi5vdXRfZmlsZWJhc2UKKyAgICAgICAgICAgIHNlbGYuZXhwYW5kZWRfbGluZXMuYXBwZW5kKGFzc2lnbm1lbnRfdGFnKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbm9ybWFsX2xpbmUgPSBOb3JtYWxMaW5lKGxpbmUpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZiwgU3Vic3RyYXRlRmlsZSk6CisgICAgICAgICAgICBub3JtYWxfbGluZS5pc19maWxlbmFtZSA9IFRydWUKKyAgICAgICAgICAgIG5vcm1hbF9saW5lLm91dF9maWxlYmFzZSA9IHNlbGYub3V0X2ZpbGViYXNlCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLCBTdWJzdHJhdGVEaXIpOgorICAgICAgICAgICAgbm9ybWFsX2xpbmUuaXNfZGlybmFtZSA9IFRydWUKKyAgICAgICAgICAgIG5vcm1hbF9saW5lLm91dF9maWxlYmFzZSA9IHNlbGYub3V0X2ZpbGViYXNlCisgICAgICAgIHNlbGYuZXhwYW5kZWRfbGluZXMuYXBwZW5kKG5vcm1hbF9saW5lKQorCisgICAgZGVmIGV4cGFuZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4cGFuZCB0aGUgZmlsZSBvciBkaXIgbmFtZSBmaXJzdCwgZXZlbnR1YWxseSB0aGlzIGVuZHMgdXAKKyAgICAgICAgY3JlYXRpbmcgdGhlIGZpbGUgb3IgZGlyLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi50cmFuc2xhdGVfZmlsZV9vcl9kaXJfbmFtZSgpCisgICAgICAgIHNlbGYuZXhwYW5kX2ZpbGVfb3JfZGlyX25hbWUoKQorCisKK2NsYXNzIFN1YnN0cmF0ZUZpbGUoU3Vic3RyYXRlQmFzZSk6CisgICAgIiIiCisgICAgQ29udGFpbmVyIGZvciBib3RoIGV4cGFuZGVkIGFuZCB1bmV4cGFuZGVkIHN1YnN0cmF0ZSBmaWxlcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGZpbGViYXNlLCBvdXRfZmlsZWJhc2UpOgorICAgICAgICBTdWJzdHJhdGVCYXNlLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBmaWxlYmFzZSwgb3V0X2ZpbGViYXNlKQorCisgICAgZGVmIHJlYWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYucmF3X2xpbmVzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGYgPSBvcGVuKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHNlbGYucmF3X2xpbmVzID0gZi5yZWFkbGluZXMoKQorCisgICAgZGVmIGV4cGFuZChzZWxmKToKKyAgICAgICAgIiIiRXhwYW5kIHRoZSBjb250ZW50cyBvZiBhbGwgdGVtcGxhdGUgdGFncyBpbiB0aGUgZmlsZS4iIiIKKyAgICAgICAgU3Vic3RyYXRlQmFzZS5leHBhbmQoc2VsZikKKyAgICAgICAgc2VsZi5yZWFkKCkKKworICAgICAgICBmb3IgbGluZW5vLCBsaW5lIGluIGVudW1lcmF0ZShzZWxmLnJhd19saW5lcyk6CisgICAgICAgICAgICAjIG9ubHkgZmlyc3QgbGluZSBjYW4gYmUgYSBmaWxlbmFtZSBzdWJzdGl0aXRpb24KKyAgICAgICAgICAgIGlmIGxpbmVubyA9PSAwIGFuZCBsaW5lLnN0YXJ0c3dpdGgoIiMiKSBhbmQgRklMRU5BTUVfVEFHIGluIGxpbmU6CisgICAgICAgICAgICAgICAgY29udGludWUgIyBza2lwIGl0IC0gd2UndmUgYWxyZWFkeSBleHBhbmRlZCBpdAorICAgICAgICAgICAgZXhwYW5kZWRfbGluZSA9IHNlbGYuZXhwYW5kX3RhZyhsaW5lLCBsaW5lbm8gKyAxKSAjIGh1bWFucyBub3QgMC1iYXNlZAorICAgICAgICAgICAgaWYgbm90IGV4cGFuZGVkX2xpbmU6CisgICAgICAgICAgICAgICAgZXhwYW5kZWRfbGluZSA9IE5vcm1hbExpbmUobGluZS5yc3RyaXAoKSkKKyAgICAgICAgICAgIHNlbGYuZXhwYW5kZWRfbGluZXMuYXBwZW5kKGV4cGFuZGVkX2xpbmUpCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgIiIiR2VuZXJhdGUgdGhlIGNvZGUgdGhhdCBnZW5lcmF0ZXMgdGhlIEJTUC4iIiIKKyAgICAgICAgYmFzZV9pbmRlbnQgPSAwCisKKyAgICAgICAgaW5kZW50ID0gbmV3X2luZGVudCA9IGJhc2VfaW5kZW50CisKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRlZF9saW5lczoKKyAgICAgICAgICAgIGdlbmxpbmUgPSBsaW5lLmdlbihjb250ZXh0KQorICAgICAgICAgICAgaWYgbm90IGdlbmxpbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgSW5wdXRMaW5lKToKKyAgICAgICAgICAgICAgICBsaW5lLmdlbmVyYXRlZF9saW5lID0gZ2VubGluZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBnZW5saW5lLnN0YXJ0c3dpdGgoT1BFTl9TVEFSVCk6CisgICAgICAgICAgICAgICAgaWYgaW5kZW50ID09IDE6CisgICAgICAgICAgICAgICAgICAgIGJhc2VfaW5kZW50ID0gMQorICAgICAgICAgICAgaWYgaW5kZW50OgorICAgICAgICAgICAgICAgIGlmIGdlbmxpbmUgPT0gQkxBTktMSU5FX1NUUiBvciAobm90IGdlbmxpbmUuc3RhcnRzd2l0aChOT1JNQUxfU1RBUlQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGdlbmxpbmUuc3RhcnRzd2l0aChPUEVOX1NUQVJUKSk6CisgICAgICAgICAgICAgICAgICAgIGluZGVudCA9IG5ld19pbmRlbnQgPSBiYXNlX2luZGVudAorICAgICAgICAgICAgaWYgZ2VubGluZS5lbmRzd2l0aCgiOiIpOgorICAgICAgICAgICAgICAgIG5ld19pbmRlbnQgPSBiYXNlX2luZGVudCArIDEKKyAgICAgICAgICAgIGxpbmUuZ2VuZXJhdGVkX2xpbmUgPSAoaW5kZW50ICogSU5ERU5UX1NUUikgKyBnZW5saW5lCisgICAgICAgICAgICBpbmRlbnQgPSBuZXdfaW5kZW50CisKKworY2xhc3MgU3Vic3RyYXRlRGlyKFN1YnN0cmF0ZUJhc2UpOgorICAgICIiIgorICAgIENvbnRhaW5lciBmb3IgYm90aCBleHBhbmRlZCBhbmQgdW5leHBhbmRlZCBzdWJzdHJhdGUgZGlycy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGZpbGViYXNlLCBvdXRfZmlsZWJhc2UpOgorICAgICAgICBTdWJzdHJhdGVCYXNlLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBmaWxlYmFzZSwgb3V0X2ZpbGViYXNlKQorCisgICAgZGVmIGV4cGFuZChzZWxmKToKKyAgICAgICAgU3Vic3RyYXRlQmFzZS5leHBhbmQoc2VsZikKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICAiIiJHZW5lcmF0ZSB0aGUgY29kZSB0aGF0IGdlbmVyYXRlcyB0aGUgQlNQLiIiIgorICAgICAgICBpbmRlbnQgPSBuZXdfaW5kZW50ID0gMAorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZGVkX2xpbmVzOgorICAgICAgICAgICAgZ2VubGluZSA9IGxpbmUuZ2VuKGNvbnRleHQpCisgICAgICAgICAgICBpZiBub3QgZ2VubGluZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZ2VubGluZS5lbmRzd2l0aCgiOiIpOgorICAgICAgICAgICAgICAgIG5ld19pbmRlbnQgPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5ld19pbmRlbnQgPSAwCisgICAgICAgICAgICBsaW5lLmdlbmVyYXRlZF9saW5lID0gKGluZGVudCAqIElOREVOVF9TVFIpICsgZ2VubGluZQorICAgICAgICAgICAgaW5kZW50ID0gbmV3X2luZGVudAorCisKK2RlZiBleHBhbmRfdGFyZ2V0KHRhcmdldCwgYWxsX2ZpbGVzLCBvdXRfZmlsZWJhc2UpOgorICAgICIiIgorICAgIEV4cGFuZCB0aGUgY29udGVudHMgb2YgYWxsIHRlbXBsYXRlIHRhZ3MgaW4gdGhlIHRhcmdldC4gIFRoaXMKKyAgICBtZWFucyByZW1vdmluZyB0YWdzIGFuZCBjYXRlZ29yaXppbmcgb3IgY3JlYXRpbmcgbGluZXMgc28gdGhhdAorICAgIGZ1dHVyZSBwYXNzZXMgY2FuIHByb2Nlc3MgYW5kIHByZXNlbnQgaW5wdXQgbGluZXMgYW5kIGdlbmVyYXRlIHRoZQorICAgIGNvcnJlc3BvbmRpbmcgbGluZXMgb2YgdGhlIFB5dGhvbiBwcm9ncmFtIHRoYXQgd2lsbCBiZSBleGVjJ2VkIHRvCisgICAgYWN0dWFsbHkgcHJvZHVjZSB0aGUgZmluYWwgQlNQLiAgJ2FsbF9maWxlcycgaW5jbHVkZXMgZGlyZWN0b3JpZXMuCisgICAgIiIiCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsodGFyZ2V0KToKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBpZiBmaWxlLmVuZHN3aXRoKCJ+Iikgb3IgZmlsZS5lbmRzd2l0aCgiIyIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKHJvb3QsIGZpbGUpCisgICAgICAgICAgICBzZmlsZSA9IFN1YnN0cmF0ZUZpbGUoZiwgdGFyZ2V0LCBvdXRfZmlsZWJhc2UpCisgICAgICAgICAgICBzZmlsZS5leHBhbmQoKQorICAgICAgICAgICAgYWxsX2ZpbGVzLmFwcGVuZChzZmlsZSkKKworICAgICAgICBmb3IgZGlyIGluIGRpcnM6CisgICAgICAgICAgICBkID0gb3MucGF0aC5qb2luKHJvb3QsIGRpcikKKyAgICAgICAgICAgIHNkaXIgPSBTdWJzdHJhdGVEaXIoZCwgdGFyZ2V0LCBvdXRfZmlsZWJhc2UpCisgICAgICAgICAgICBzZGlyLmV4cGFuZCgpCisgICAgICAgICAgICBhbGxfZmlsZXMuYXBwZW5kKHNkaXIpCisKKworZGVmIGdlbl9wcm9ncmFtX21hY2hpbmVfbGluZXMobWFjaGluZSwgcHJvZ3JhbV9saW5lcyk6CisgICAgIiIiCisgICAgVXNlIHRoZSBpbnB1dCB2YWx1ZXMgd2UgZ290IGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKyAgICAiIiIKKyAgICBsaW5lID0gIm1hY2hpbmUgPSBcIiIgKyBtYWNoaW5lICsgIlwiIgorICAgIHByb2dyYW1fbGluZXMuYXBwZW5kKGxpbmUpCisKKyAgICBsaW5lID0gImxheWVyX25hbWUgPSBcIiIgKyBtYWNoaW5lICsgIlwiIgorICAgIHByb2dyYW1fbGluZXMuYXBwZW5kKGxpbmUpCisKKworZGVmIHNvcnRfaW5wdXRsaW5lcyhpbnB1dF9saW5lcyk6CisgICAgIiIiU29ydCBpbnB1dCBsaW5lcyBhY2NvcmRpbmcgdG8gcHJpb3JpdHkgKHBvc2l0aW9uKS4iIiIKKyAgICBpbnB1dF9saW5lcy5zb3J0KGtleSA9IGxhbWJkYSBsOiBsLnByaW8pCisKKworZGVmIGZpbmRfcGFyZW50X2RlcGVuZGVuY3kobGluZXMsIGRlcGVuZHNfb24pOgorICAgIGZvciBpLCBsaW5lIGluIGxpbmVzOgorICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIENvZGVMaW5lKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGxpbmUucHJvcHNbIm5hbWUiXSA9PSBkZXBlbmRzX29uOgorICAgICAgICAgICAgcmV0dXJuIGkKKworICAgIHJldHVybiAtMQorCisKK2RlZiBwcm9jZXNzX2lucHV0bGluZV9kZXBlbmRlbmNpZXMoaW5wdXRfbGluZXMsIGFsbF9pbnB1dGxpbmVzKToKKyAgICAiIiJJZiBhbnkgaW5wdXQgbGluZXMgZGVwZW5kIG9uIG90aGVycywgcHV0IHRoZSBvdGhlcnMgZmlyc3QuIiIiCisgICAgZm9yIGxpbmUgaW4gaW5wdXRfbGluZXM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgSW5wdXRMaW5lR3JvdXApOgorICAgICAgICAgICAgZ3JvdXBfaW5wdXRsaW5lcyA9IFtdCisgICAgICAgICAgICBwcm9jZXNzX2lucHV0bGluZV9kZXBlbmRlbmNpZXMobGluZS5ncm91cCwgZ3JvdXBfaW5wdXRsaW5lcykKKyAgICAgICAgICAgIGxpbmUuZ3JvdXAgPSBncm91cF9pbnB1dGxpbmVzCisgICAgICAgICAgICBhbGxfaW5wdXRsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBDb2RlTGluZSkgb3IgaXNpbnN0YW5jZShsaW5lLCBOb3JtYWxMaW5lKToKKyAgICAgICAgICAgIGFsbF9pbnB1dGxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBkZXBlbmRzX29uID0gbGluZS5wcm9wc1siZGVwZW5kcy1vbiJdCisgICAgICAgICAgICBkZXBlbmRzX2NvZGVsaW5lID0gImlmICIgKyBsaW5lLnByb3BzWyJkZXBlbmRzLW9uIl0gKyAiID09IFwiIiArIGxpbmUucHJvcHNbImRlcGVuZHMtb24tdmFsIl0gKyAiXCI6IgorICAgICAgICAgICAgYWxsX2lucHV0bGluZXMuYXBwZW5kKENvZGVMaW5lKGRlcGVuZHNfY29kZWxpbmUpKQorICAgICAgICAgICAgYWxsX2lucHV0bGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGFsbF9pbnB1dGxpbmVzLmFwcGVuZChsaW5lKQorCisKK2RlZiBjb25kaXRpb25hbF9maWxlbmFtZShmaWxlbmFtZSk6CisgICAgIiIiCisgICAgQ2hlY2sgaWYgdGhlIGZpbGVuYW1lIGl0c2VsZiBjb250YWlucyBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gIElmCisgICAgc28sIHJldHVybiBhIGNvZGVsaW5lIGZvciBpdC4KKyAgICAiIiIKKyAgICBvcGVudGFnX3N0YXJ0ID0gZmlsZW5hbWUuZmluZChPUEVOX1RBRykKKworICAgIGlmIG9wZW50YWdfc3RhcnQgIT0gLTE6CisgICAgICAgIGlmIGZpbGVuYW1lW29wZW50YWdfc3RhcnQ6XS5zdGFydHN3aXRoKEFTU0lHTl9UQUcpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZW5kID0gZmlsZW5hbWUuZmluZChDTE9TRV9UQUcsIG9wZW50YWdfc3RhcnQpCisgICAgICAgIGlmIGVuZCA9PSAtMToKKyAgICAgICAgICAgIHByaW50ICJObyBjbG9zZSB0YWcgZm91bmQgZm9yIG9wZW4gdGFnIGluIGZpbGVuYW1lICVzIiAlIGZpbGVuYW1lCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgICMgd2UgaGF2ZSBhIHt7IHRhZyBpLmUuIGNvZGUKKyAgICAgICAgdGFnID0gZmlsZW5hbWVbb3BlbnRhZ19zdGFydCArIGxlbihPUEVOX1RBRyk6ZW5kXS5zdHJpcCgpCisgICAgICAgIGlmIG5vdCB0YWcubHN0cmlwKCkuc3RhcnRzd2l0aChJRl9UQUcpOgorICAgICAgICAgICAgcHJpbnQgIk9ubHkgJ2lmJyB0YWdzIGFyZSBhbGxvd2VkIGluIGZpbGUgb3IgZGlyZWN0b3J5IG5hbWVzLCBmaWxlbmFtZTogJXMiICUgZmlsZW5hbWUKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgcmV0dXJuIENvZGVMaW5lKHRhZykKKworICAgIHJldHVybiBOb25lCisKKworY2xhc3MgSW5wdXRMaW5lR3JvdXAoSW5wdXRMaW5lKToKKyAgICAiIiIKKyAgICBJbnB1dExpbmUgdGhhdCBkb2VzIG5vdGhpbmcgYnV0IGdyb3VwIG90aGVyIGlucHV0IGxpbmVzCisgICAgY29ycmVzcG9uZGluZyB0byBhbGwgdGhlIGlucHV0IGxpbmVzIGluIGEgU3Vic3RyYXRlRmlsZSBzbyB0aGV5CisgICAgY2FuIGJlIGdlbmVyYXRlZCBhcyBhIGdyb3VwLiAgcHJpbyBpcyB0aGUgb25seSBwcm9wZXJ0eSB1c2VkLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2RlbGluZSk6CisgICAgICAgIElucHV0TGluZS5fX2luaXRfXyhzZWxmLCB7fSwgIiIsIDApCisgICAgICAgIHNlbGYuZ3JvdXAgPSBbXQorICAgICAgICBzZWxmLnByaW8gPSBzeXMubWF4aW50CisgICAgICAgIHNlbGYuZ3JvdXAuYXBwZW5kKGNvZGVsaW5lKQorCisgICAgZGVmIGFwcGVuZChzZWxmLCBsaW5lKToKKyAgICAgICAgc2VsZi5ncm91cC5hcHBlbmQobGluZSkKKyAgICAgICAgaWYgbGluZS5wcmlvIDwgc2VsZi5wcmlvOgorICAgICAgICAgICAgc2VsZi5wcmlvID0gbGluZS5wcmlvCisKKyAgICBkZWYgbGVuKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuZ3JvdXApCisKKworZGVmIGdhdGhlcl9pbnB1dGxpbmVzKGZpbGVzKToKKyAgICAiIiIKKyAgICBHYXRoZXIgYWxsIHRoZSBJbnB1dExpbmVzIC0gd2Ugd2FudCB0byBnZW5lcmF0ZSB0aGVtIGZpcnN0LgorICAgICIiIgorICAgIGFsbF9pbnB1dGxpbmVzID0gW10KKyAgICBpbnB1dF9saW5lcyA9IFtdCisKKyAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlLCBTdWJzdHJhdGVGaWxlKToKKyAgICAgICAgICAgIGdyb3VwID0gTm9uZQorICAgICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGUudHJhbnNsYXRlZF9maWxlbmFtZSkKKworICAgICAgICAgICAgY29kZWxpbmUgPSBjb25kaXRpb25hbF9maWxlbmFtZShiYXNlbmFtZSkKKyAgICAgICAgICAgIGlmIGNvZGVsaW5lOgorICAgICAgICAgICAgICAgIGdyb3VwID0gSW5wdXRMaW5lR3JvdXAoY29kZWxpbmUpCisKKyAgICAgICAgICAgIGhhdmVfY29uZGl0aW9uID0gRmFsc2UKKyAgICAgICAgICAgIGNvbmRpdGlvbl90b193cml0ZSA9IE5vbmUKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbGUuZXhwYW5kZWRfbGluZXM6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBDb2RlTGluZSk6CisgICAgICAgICAgICAgICAgICAgIGhhdmVfY29uZGl0aW9uID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25fdG9fd3JpdGUgPSBsaW5lCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBJbnB1dExpbmUpOgorICAgICAgICAgICAgICAgICAgICBpZiBncm91cDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbmRpdGlvbl90b193cml0ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25fdG9fd3JpdGUucHJpbyA9IGxpbmUucHJpbworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbl90b193cml0ZS5kaXNjYXJkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZChjb25kaXRpb25fdG9fd3JpdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uX3RvX3dyaXRlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb25kaXRpb25fdG9fd3JpdGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uX3RvX3dyaXRlLnByaW8gPSBsaW5lLnByaW8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25fdG9fd3JpdGUuZGlzY2FyZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9saW5lcy5hcHBlbmQoY29uZGl0aW9uX3RvX3dyaXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbl90b193cml0ZSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2xpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIGNvbmRpdGlvbl90b193cml0ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbl90b193cml0ZSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgaGF2ZV9jb25kaXRpb246CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZS5saW5lLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5kaXNjYXJkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2xpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgICAgICAgICBoYXZlX2NvbmRpdGlvbiA9IEZhbHNlCisKKyAgICAgICAgICAgIGlmIGdyb3VwIGFuZCBncm91cC5sZW4oKSA+IDE6CisgICAgICAgICAgICAgICAgaW5wdXRfbGluZXMuYXBwZW5kKGdyb3VwKQorCisgICAgc29ydF9pbnB1dGxpbmVzKGlucHV0X2xpbmVzKQorICAgIHByb2Nlc3NfaW5wdXRsaW5lX2RlcGVuZGVuY2llcyhpbnB1dF9saW5lcywgYWxsX2lucHV0bGluZXMpCisKKyAgICByZXR1cm4gYWxsX2lucHV0bGluZXMKKworCitkZWYgcnVuX3Byb2dyYW1fbGluZXMobGluZWxpc3QsIGNvZGVkdW1wKToKKyAgICAiIiIKKyAgICBGb3IgYSBzaW5nbGUgZmlsZSwgcHJpbnQgYWxsIHRoZSBweXRob24gY29kZSBpbnRvIGEgYnVmIGFuZCBleGVjdXRlIGl0LgorICAgICIiIgorICAgIGJ1ZiA9ICJcbiIuam9pbihsaW5lbGlzdCkKKworICAgIGlmIGNvZGVkdW1wOgorICAgICAgICBvZiA9IG9wZW4oImJzcGdlbi5vdXQiLCAidyIpCisgICAgICAgIG9mLndyaXRlKGJ1ZikKKyAgICAgICAgb2YuY2xvc2UoKQorICAgIGV4ZWMgYnVmCisKKworZGVmIGdlbl90YXJnZXQoZmlsZXMsIGNvbnRleHQgPSBOb25lKToKKyAgICAiIiIKKyAgICBHZW5lcmF0ZSB0aGUgcHl0aG9uIGNvZGUgZm9yIGVhY2ggZmlsZS4KKyAgICAiIiIKKyAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgZmlsZS5nZW4oY29udGV4dCkKKworCitkZWYgZ2VuX3Byb2dyYW1faGVhZGVyX2xpbmVzKHByb2dyYW1fbGluZXMpOgorICAgICIiIgorICAgIEdlbmVyYXRlIGFueSBpbXBvcnRzIHdlIG5lZWQuCisgICAgIiIiCisgICAgcHJvZ3JhbV9saW5lcy5hcHBlbmQoImN1cnJlbnRfZmlsZSA9IFwiXCIiKQorCisKK2RlZiBnZW5fc3VwcGxpZWRfcHJvcGVydHlfdmFscyhwcm9wZXJ0aWVzLCBwcm9ncmFtX2xpbmVzKToKKyAgICAiIiIKKyAgICBHZW5lcmF0ZSB1c2VyLXNwZWNpZmllZCBlbnRyaWVzIGZvciBpbnB1dCB2YWx1ZXMgaW5zdGVhZCBvZgorICAgIGdlbmVyYXRpbmcgaW5wdXQgcHJvbXB0cy4KKyAgICAiIiIKKyAgICBmb3IgbmFtZSwgdmFsIGluIHByb3BlcnRpZXMuaXRlcml0ZW1zKCk6CisgICAgICAgIHByb2dyYW1fbGluZSA9IG5hbWUgKyAiID0gXCIiICsgdmFsICsgIlwiIgorICAgICAgICBwcm9ncmFtX2xpbmVzLmFwcGVuZChwcm9ncmFtX2xpbmUpCisKKworZGVmIGdlbl9pbml0aWFsX3Byb3BlcnR5X3ZhbHMoaW5wdXRfbGluZXMsIHByb2dyYW1fbGluZXMpOgorICAgICIiIgorICAgIEdlbmVyYXRlIG51bGwgb3IgZGVmYXVsdCBlbnRyaWVzIGZvciBpbnB1dCB2YWx1ZXMsIHNvIHdlIGRvbid0CisgICAgaGF2ZSB1bmRlZmluZWQgdmFyaWFibGVzLgorICAgICIiIgorICAgIGZvciBsaW5lIGluIGlucHV0X2xpbmVzOgorICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIElucHV0TGluZUdyb3VwKToKKyAgICAgICAgICAgIGdlbl9pbml0aWFsX3Byb3BlcnR5X3ZhbHMobGluZS5ncm91cCwgcHJvZ3JhbV9saW5lcykKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBJbnB1dExpbmUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG5hbWUgPSBsaW5lLnByb3BzWyJuYW1lIl0KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdmFsID0gIlwiIiArIGxpbmUucHJvcHNbImRlZmF1bHQiXSArICJcIiIKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdmFsID0gIlwiXCIiCisgICAgICAgICAgICAgICAgcHJvZ3JhbV9saW5lID0gbmFtZSArICIgPSAiICsgZGVmYXVsdF92YWwKKyAgICAgICAgICAgICAgICBwcm9ncmFtX2xpbmVzLmFwcGVuZChwcm9ncmFtX2xpbmUpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisKK2RlZiBnZW5fcHJvZ3JhbV9pbnB1dF9saW5lcyhpbnB1dF9saW5lcywgcHJvZ3JhbV9saW5lcywgY29udGV4dCwgaW5fZ3JvdXAgPSBGYWxzZSk6CisgICAgIiIiCisgICAgR2VuZXJhdGUgb25seSB0aGUgaW5wdXQgbGluZXMgdXNlZCBmb3IgcHJvbXB0aW5nIHRoZSB1c2VyLiAgRm9yCisgICAgdGhhdCwgd2Ugb25seSBoYXZlIGlucHV0IGxpbmVzIGFuZCBDb2RlTGluZXMgdGhhdCBhZmZlY3QgdGhlIG5leHQKKyAgICBpbnB1dCBsaW5lLgorICAgICIiIgorICAgIGluZGVudCA9IG5ld19pbmRlbnQgPSAwCisKKyAgICBmb3IgbGluZSBpbiBpbnB1dF9saW5lczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBJbnB1dExpbmVHcm91cCk6CisgICAgICAgICAgICBnZW5fcHJvZ3JhbV9pbnB1dF9saW5lcyhsaW5lLmdyb3VwLCBwcm9ncmFtX2xpbmVzLCBjb250ZXh0LCBUcnVlKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgbm90IGxpbmUubGluZS5zdHJpcCgpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBnZW5saW5lID0gbGluZS5nZW4oY29udGV4dCkKKyAgICAgICAgaWYgbm90IGdlbmxpbmU6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBnZW5saW5lLmVuZHN3aXRoKCI6Iik6CisgICAgICAgICAgICBuZXdfaW5kZW50ICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGluZGVudCA+IDEgb3IgKG5vdCBpbl9ncm91cCBhbmQgaW5kZW50KToKKyAgICAgICAgICAgICAgICBuZXdfaW5kZW50IC09IDEKKworICAgICAgICBsaW5lLmdlbmVyYXRlZF9saW5lID0gKGluZGVudCAqIElOREVOVF9TVFIpICsgZ2VubGluZQorICAgICAgICBwcm9ncmFtX2xpbmVzLmFwcGVuZChsaW5lLmdlbmVyYXRlZF9saW5lKQorCisgICAgICAgIGluZGVudCA9IG5ld19pbmRlbnQKKworCitkZWYgZ2VuX3Byb2dyYW1fbGluZXModGFyZ2V0X2ZpbGVzLCBwcm9ncmFtX2xpbmVzKToKKyAgICAiIiIKKyAgICBHZW5lcmF0ZSB0aGUgcHJvZ3JhbSBsaW5lcyB0aGF0IG1ha2UgdXAgdGhlIEJTUCBnZW5lcmF0aW9uCisgICAgcHJvZ3JhbS4gIFRoaXMgYXBwZW5kcyB0aGUgZ2VuZXJhdGVkIGxpbmVzIG9mIGFsbCB0YXJnZXRfZmlsZXMgdG8KKyAgICBwcm9ncmFtX2xpbmVzLCBhbmQgc2tpcHMgaW5wdXQgbGluZXMsIHdoaWNoIGFyZSBkZWFsdCB3aXRoCisgICAgc2VwYXJhdGVseSwgb3Igb21pdHRlZC4KKyAgICAiIiIKKyAgICBmb3IgZmlsZSBpbiB0YXJnZXRfZmlsZXM6CisgICAgICAgIGlmIGZpbGUuZmlsZW5hbWUuZW5kc3dpdGgoIm5vaW5zdGFsbCIpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBmb3IgbGluZSBpbiBmaWxlLmV4cGFuZGVkX2xpbmVzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBJbnB1dExpbmUpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsaW5lLmRpc2NhcmQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgcHJvZ3JhbV9saW5lcy5hcHBlbmQobGluZS5nZW5lcmF0ZWRfbGluZSkKKworCitkZWYgY3JlYXRlX2NvbnRleHQobWFjaGluZSwgYXJjaCwgc2NyaXB0c19wYXRoKToKKyAgICAiIiIKKyAgICBDcmVhdGUgYSBjb250ZXh0IG9iamVjdCBmb3IgdXNlIGluIGRlZmVycmVkIGZ1bmN0aW9uIGludm9jYXRpb24uCisgICAgIiIiCisgICAgY29udGV4dCA9IHt9CisKKyAgICBjb250ZXh0WyJtYWNoaW5lIl0gPSBtYWNoaW5lCisgICAgY29udGV4dFsiYXJjaCJdID0gYXJjaAorICAgIGNvbnRleHRbInNjcmlwdHNfcGF0aCJdID0gc2NyaXB0c19wYXRoCisKKyAgICByZXR1cm4gY29udGV4dAorCisKK2RlZiBjYXB0dXJlX2NvbnRleHQoY29udGV4dCk6CisgICAgIiIiCisgICAgQ3JlYXRlIGEgY29udGV4dCBvYmplY3QgZm9yIHVzZSBpbiBkZWZlcnJlZCBmdW5jdGlvbiBpbnZvY2F0aW9uLgorICAgICIiIgorICAgIGNhcHR1cmVkX2NvbnRleHQgPSB7fQorCisgICAgY2FwdHVyZWRfY29udGV4dFsibWFjaGluZSJdID0gY29udGV4dFsibWFjaGluZSJdCisgICAgY2FwdHVyZWRfY29udGV4dFsiYXJjaCJdID0gY29udGV4dFsiYXJjaCJdCisgICAgY2FwdHVyZWRfY29udGV4dFsic2NyaXB0c19wYXRoIl0gPSBjb250ZXh0WyJzY3JpcHRzX3BhdGgiXQorCisgICAgcmV0dXJuIGNhcHR1cmVkX2NvbnRleHQKKworCitkZWYgZXhwYW5kX3RhcmdldHMoY29udGV4dCwgYnNwX291dHB1dF9kaXIsIGV4cGFuZF9jb21tb249VHJ1ZSk6CisgICAgIiIiCisgICAgRXhwYW5kIGFsbCB0aGUgdGFncyBpbiBib3RoIHRoZSBjb21tb24gYW5kIG1hY2hpbmUtc3BlY2lmaWMKKyAgICAndGFyZ2V0cycuCisKKyAgICBJZiBleHBhbmRfY29tbW9uIGlzIEZhbHNlLCBkb24ndCBleHBhbmQgdGhlIGNvbW1vbiB0YXJnZXQgKHRoaXMKKyAgICBvcHRpb24gaXMgdXNlZCB0byBjcmVhdGUgc3BlY2lhbC1wdXJwb3NlIGxheWVycykuCisgICAgIiIiCisgICAgdGFyZ2V0X2ZpbGVzID0gW10KKworICAgIG1hY2hpbmUgPSBjb250ZXh0WyJtYWNoaW5lIl0KKyAgICBhcmNoID0gY29udGV4dFsiYXJjaCJdCisgICAgc2NyaXB0c19wYXRoID0gY29udGV4dFsic2NyaXB0c19wYXRoIl0KKworICAgIGxpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCisgICAgYnNwX3BhdGggPSBsaWJfcGF0aCArICcvYnNwJworICAgIGFyY2hfcGF0aCA9IGJzcF9wYXRoICsgJy9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gnCisKKyAgICBpZiBleHBhbmRfY29tbW9uOgorICAgICAgICBjb21tb24gPSBvcy5wYXRoLmpvaW4oYXJjaF9wYXRoLCAiY29tbW9uIikKKyAgICAgICAgZXhwYW5kX3RhcmdldChjb21tb24sIHRhcmdldF9maWxlcywgYnNwX291dHB1dF9kaXIpCisKKyAgICBhcmNoZXMgPSBvcy5saXN0ZGlyKGFyY2hfcGF0aCkKKyAgICBpZiBhcmNoIG5vdCBpbiBhcmNoZXMgb3IgYXJjaCA9PSAiY29tbW9uIjoKKyAgICAgICAgcHJpbnQgIkludmFsaWQga2FyY2gsIGV4aXRpbmdcbiIKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHRhcmdldCA9IG9zLnBhdGguam9pbihhcmNoX3BhdGgsIGFyY2gpCisgICAgZXhwYW5kX3RhcmdldCh0YXJnZXQsIHRhcmdldF9maWxlcywgYnNwX291dHB1dF9kaXIpCisKKyAgICBnZW5fdGFyZ2V0KHRhcmdldF9maWxlcywgY29udGV4dCkKKworICAgIHJldHVybiB0YXJnZXRfZmlsZXMKKworCitkZWYgeW9jdG9fY29tbW9uX2NyZWF0ZShtYWNoaW5lLCB0YXJnZXQsIHNjcmlwdHNfcGF0aCwgbGF5ZXJfb3V0cHV0X2RpciwgY29kZWR1bXAsIHByb3BlcnRpZXNfZmlsZSwgcHJvcGVydGllc19zdHI9IiIsIGV4cGFuZF9jb21tb249VHJ1ZSk6CisgICAgIiIiCisgICAgQ29tbW9uIGxheWVyLWNyZWF0aW9uIGNvZGUKKworICAgIG1hY2hpbmUgLSB1c2VyLWRlZmluZWQgbWFjaGluZSBuYW1lIChpZiBuZWVkZWQsIHdpbGwgZ2VuZXJhdGUgJ21hY2hpbmUnIHZhcikKKyAgICB0YXJnZXQgLSB0aGUgJ3RhcmdldCcgdGhlIGxheWVyIHdpbGwgYmUgYmFzZWQgb24sIG11c3QgYmUgb25lIGluCisgICAgICAgICAgIHNjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gKKyAgICBzY3JpcHRzX3BhdGggLSBhYnNvbHV0ZSBwYXRoIHRvIHlvY3RvIC9zY3JpcHRzIGRpcgorICAgIGxheWVyX291dHB1dF9kaXIgLSBkaXJuYW1lIHRvIGNyZWF0ZSBmb3IgbGF5ZXIKKyAgICBjb2RlZHVtcCAtIGR1bXAgZ2VuZXJhdGVkIGNvZGUgdG8gYnNwZ2VuLm91dAorICAgIHByb3BlcnRpZXNfZmlsZSAtIHVzZSB2YWx1ZXMgZnJvbSB0aGlzIGZpbGUgaWYgbm9uZW1wdHkgaS5lIG5vIHByb21wdGluZworICAgIHByb3BlcnRpZXNfc3RyIC0gdXNlIHZhbHVlcyBmcm9tIHRoaXMgc3RyaW5nIGlmIG5vbmVtcHR5IGkuZSBubyBwcm9tcHRpbmcKKyAgICBleHBhbmRfY29tbW9uIC0gYm9vbGVhbiwgdXNlIHRoZSBjb250ZW50cyBvZiAoZm9yIGJzcCBsYXllcnMpIGFyY2gvY29tbW9uCisgICAgIiIiCisgICAgaWYgb3MucGF0aC5leGlzdHMobGF5ZXJfb3V0cHV0X2Rpcik6CisgICAgICAgIHByaW50ICJcbmxheWVyIG91dHB1dCBkaXIgYWxyZWFkeSBleGlzdHMsIGV4aXRpbmcuICglcykiICUgbGF5ZXJfb3V0cHV0X2RpcgorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgcHJvcGVydGllcyA9IE5vbmUKKworICAgIGlmIHByb3BlcnRpZXNfZmlsZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW5maWxlID0gb3Blbihwcm9wZXJ0aWVzX2ZpbGUsICJyIikKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBwcmludCAiQ291bGRuJ3Qgb3BlbiBwcm9wZXJ0aWVzIGZpbGUgJXMgZm9yIHJlYWRpbmcsIGV4aXRpbmciICUgcHJvcGVydGllc19maWxlCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIHByb3BlcnRpZXMgPSBqc29uLmxvYWQoaW5maWxlKQorCisgICAgaWYgcHJvcGVydGllc19zdHIgYW5kIG5vdCBwcm9wZXJ0aWVzOgorICAgICAgICBwcm9wZXJ0aWVzID0ganNvbi5sb2Fkcyhwcm9wZXJ0aWVzX3N0cikKKworICAgIG9zLm1rZGlyKGxheWVyX291dHB1dF9kaXIpCisKKyAgICBjb250ZXh0ID0gY3JlYXRlX2NvbnRleHQobWFjaGluZSwgdGFyZ2V0LCBzY3JpcHRzX3BhdGgpCisgICAgdGFyZ2V0X2ZpbGVzID0gZXhwYW5kX3RhcmdldHMoY29udGV4dCwgbGF5ZXJfb3V0cHV0X2RpciwgZXhwYW5kX2NvbW1vbikKKworICAgIGlucHV0X2xpbmVzID0gZ2F0aGVyX2lucHV0bGluZXModGFyZ2V0X2ZpbGVzKQorCisgICAgcHJvZ3JhbV9saW5lcyA9IFtdCisKKyAgICBnZW5fcHJvZ3JhbV9oZWFkZXJfbGluZXMocHJvZ3JhbV9saW5lcykKKworICAgIGdlbl9pbml0aWFsX3Byb3BlcnR5X3ZhbHMoaW5wdXRfbGluZXMsIHByb2dyYW1fbGluZXMpCisKKyAgICBpZiBwcm9wZXJ0aWVzOgorICAgICAgICBnZW5fc3VwcGxpZWRfcHJvcGVydHlfdmFscyhwcm9wZXJ0aWVzLCBwcm9ncmFtX2xpbmVzKQorCisgICAgZ2VuX3Byb2dyYW1fbWFjaGluZV9saW5lcyhtYWNoaW5lLCBwcm9ncmFtX2xpbmVzKQorCisgICAgaWYgbm90IHByb3BlcnRpZXM6CisgICAgICAgIGdlbl9wcm9ncmFtX2lucHV0X2xpbmVzKGlucHV0X2xpbmVzLCBwcm9ncmFtX2xpbmVzLCBjb250ZXh0KQorCisgICAgZ2VuX3Byb2dyYW1fbGluZXModGFyZ2V0X2ZpbGVzLCBwcm9ncmFtX2xpbmVzKQorCisgICAgcnVuX3Byb2dyYW1fbGluZXMocHJvZ3JhbV9saW5lcywgY29kZWR1bXApCisKKworZGVmIHlvY3RvX2xheWVyX2NyZWF0ZShsYXllcl9uYW1lLCBzY3JpcHRzX3BhdGgsIGxheWVyX291dHB1dF9kaXIsIGNvZGVkdW1wLCBwcm9wZXJ0aWVzX2ZpbGUsIHByb3BlcnRpZXM9IiIpOgorICAgICIiIgorICAgIENyZWF0ZSB5b2N0byBsYXllcgorCisgICAgbGF5ZXJfbmFtZSAtIHVzZXItZGVmaW5lZCBsYXllciBuYW1lCisgICAgc2NyaXB0c19wYXRoIC0gYWJzb2x1dGUgcGF0aCB0byB5b2N0byAvc2NyaXB0cyBkaXIKKyAgICBsYXllcl9vdXRwdXRfZGlyIC0gZGlybmFtZSB0byBjcmVhdGUgZm9yIGxheWVyCisgICAgY29kZWR1bXAgLSBkdW1wIGdlbmVyYXRlZCBjb2RlIHRvIGJzcGdlbi5vdXQKKyAgICBwcm9wZXJ0aWVzX2ZpbGUgLSB1c2UgdmFsdWVzIGZyb20gdGhpcyBmaWxlIGlmIG5vbmVtcHR5IGkuZSBubyBwcm9tcHRpbmcKKyAgICBwcm9wZXJ0aWVzIC0gdXNlIHZhbHVlcyBmcm9tIHRoaXMgc3RyaW5nIGlmIG5vbmVtcHR5IGkuZSBubyBwcm9tcHRpbmcKKyAgICAiIiIKKyAgICB5b2N0b19jb21tb25fY3JlYXRlKGxheWVyX25hbWUsICJsYXllciIsIHNjcmlwdHNfcGF0aCwgbGF5ZXJfb3V0cHV0X2RpciwgY29kZWR1bXAsIHByb3BlcnRpZXNfZmlsZSwgcHJvcGVydGllcywgRmFsc2UpCisKKyAgICBwcmludCAiXG5OZXcgbGF5ZXIgY3JlYXRlZCBpbiAlcy5cbiIgJSAobGF5ZXJfb3V0cHV0X2RpcikKKyAgICBwcmludCAiRG9uJ3QgZm9yZ2V0IHRvIGFkZCBpdCB0byB5b3VyIEJCTEFZRVJTIChmb3IgZGV0YWlscyBzZWUgJXNcUkVBRE1FKS4iICUgKGxheWVyX291dHB1dF9kaXIpCisKKworZGVmIHlvY3RvX2JzcF9jcmVhdGUobWFjaGluZSwgYXJjaCwgc2NyaXB0c19wYXRoLCBic3Bfb3V0cHV0X2RpciwgY29kZWR1bXAsIHByb3BlcnRpZXNfZmlsZSwgcHJvcGVydGllcz1Ob25lKToKKyAgICAiIiIKKyAgICBDcmVhdGUgYnNwCisKKyAgICBtYWNoaW5lIC0gdXNlci1kZWZpbmVkIG1hY2hpbmUgbmFtZQorICAgIGFyY2ggLSB0aGUgYXJjaCB0aGUgYnNwIHdpbGwgYmUgYmFzZWQgb24sIG11c3QgYmUgb25lIGluCisgICAgICAgICAgIHNjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gKKyAgICBzY3JpcHRzX3BhdGggLSBhYnNvbHV0ZSBwYXRoIHRvIHlvY3RvIC9zY3JpcHRzIGRpcgorICAgIGJzcF9vdXRwdXRfZGlyIC0gZGlybmFtZSB0byBjcmVhdGUgZm9yIEJTUAorICAgIGNvZGVkdW1wIC0gZHVtcCBnZW5lcmF0ZWQgY29kZSB0byBic3BnZW4ub3V0CisgICAgcHJvcGVydGllc19maWxlIC0gdXNlIHZhbHVlcyBmcm9tIHRoaXMgZmlsZSBpZiBub25lbXB0eSBpLmUgbm8gcHJvbXB0aW5nCisgICAgcHJvcGVydGllcyAtIHVzZSB2YWx1ZXMgZnJvbSB0aGlzIHN0cmluZyBpZiBub25lbXB0eSBpLmUgbm8gcHJvbXB0aW5nCisgICAgIiIiCisgICAgeW9jdG9fY29tbW9uX2NyZWF0ZShtYWNoaW5lLCBhcmNoLCBzY3JpcHRzX3BhdGgsIGJzcF9vdXRwdXRfZGlyLCBjb2RlZHVtcCwgcHJvcGVydGllc19maWxlLCBwcm9wZXJ0aWVzKQorCisgICAgcHJpbnQgIlxuTmV3ICVzIEJTUCBjcmVhdGVkIGluICVzIiAlIChhcmNoLCBic3Bfb3V0cHV0X2RpcikKKworCitkZWYgcHJpbnRfZGljdChpdGVtcywgaW5kZW50ID0gMCk6CisgICAgIiIiCisgICAgUHJpbnQgdGhlIHZhbHVlcyBpbiBhIHBvc3NpYmx5IG5lc3RlZCBkaWN0aW9uYXJ5LgorICAgICIiIgorICAgIGZvciBrZXksIHZhbCBpbiBpdGVtcy5pdGVyaXRlbXMoKToKKyAgICAgICAgcHJpbnQgIiAgICAiKmluZGVudCArICJcIiVzXCIgOiIgJSBrZXksCisgICAgICAgIGlmIHR5cGUodmFsKSA9PSBkaWN0OgorICAgICAgICAgICAgcHJpbnQgInsiCisgICAgICAgICAgICBwcmludF9kaWN0KHZhbCwgaW5kZW50ICsgMSkKKyAgICAgICAgICAgIHByaW50ICIgICAgIippbmRlbnQgKyAifSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICIlcyIgJSB2YWwKKworCitkZWYgZ2V0X3Byb3BlcnRpZXMoaW5wdXRfbGluZXMpOgorICAgICIiIgorICAgIEdldCB0aGUgY29tcGxldGUgc2V0IG9mIHByb3BlcnRpZXMgZm9yIGFsbCB0aGUgaW5wdXQgaXRlbXMgaW4gdGhlCisgICAgQlNQLCBhcyBhIHBvc3NpYmx5IG5lc3RlZCBkaWN0aW9uYXJ5LgorICAgICIiIgorICAgIHByb3BlcnRpZXMgPSB7fQorCisgICAgZm9yIGxpbmUgaW4gaW5wdXRfbGluZXM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgSW5wdXRMaW5lR3JvdXApOgorICAgICAgICAgICAgc3RhdGVtZW50ID0gbGluZS5ncm91cFswXS5saW5lCisgICAgICAgICAgICBncm91cF9wcm9wZXJ0aWVzID0gZ2V0X3Byb3BlcnRpZXMobGluZS5ncm91cCkKKyAgICAgICAgICAgIHByb3BlcnRpZXNbc3RhdGVtZW50XSA9IGdyb3VwX3Byb3BlcnRpZXMKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobGluZSwgSW5wdXRMaW5lKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBDaG9pY2VJbnB1dExpbmUpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBwcm9wcyA9IGxpbmUucHJvcHMKKyAgICAgICAgaXRlbSA9IHt9CisgICAgICAgIG5hbWUgPSBwcm9wc1sibmFtZSJdCisgICAgICAgIGZvciBrZXksIHZhbCBpbiBwcm9wcy5pdGVtcygpOgorICAgICAgICAgICAgaWYgbm90IGtleSA9PSAibmFtZSI6CisgICAgICAgICAgICAgICAgaXRlbVtrZXldID0gdmFsCisgICAgICAgIHByb3BlcnRpZXNbbmFtZV0gPSBpdGVtCisKKyAgICByZXR1cm4gcHJvcGVydGllcworCisKK2RlZiB5b2N0b19sYXllcl9saXN0X3Byb3BlcnRpZXMoYXJjaCwgc2NyaXB0c19wYXRoLCBwcm9wZXJ0aWVzX2ZpbGUsIGV4cGFuZF9jb21tb249VHJ1ZSk6CisgICAgIiIiCisgICAgTGlzdCB0aGUgY29tcGxldGUgc2V0IG9mIHByb3BlcnRpZXMgZm9yIGFsbCB0aGUgaW5wdXQgaXRlbXMgaW4gdGhlCisgICAgbGF5ZXIuICBJZiBwcm9wZXJ0aWVzX2ZpbGUgaXMgbm9uLW51bGwsIHdyaXRlIHRoZSBjb21wbGV0ZSBzZXQgb2YKKyAgICBwcm9wZXJ0aWVzIGFzIGEgbmVzdGVkIEpTT04gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gYSBwb3NzaWJseQorICAgIG5lc3RlZCBkaWN0aW9uYXJ5LgorICAgICIiIgorICAgIGNvbnRleHQgPSBjcmVhdGVfY29udGV4dCgidW51c2VkIiwgYXJjaCwgc2NyaXB0c19wYXRoKQorICAgIHRhcmdldF9maWxlcyA9IGV4cGFuZF90YXJnZXRzKGNvbnRleHQsICJ1bnVzZWQiLCBleHBhbmRfY29tbW9uKQorCisgICAgaW5wdXRfbGluZXMgPSBnYXRoZXJfaW5wdXRsaW5lcyh0YXJnZXRfZmlsZXMpCisKKyAgICBwcm9wZXJ0aWVzID0gZ2V0X3Byb3BlcnRpZXMoaW5wdXRfbGluZXMpCisgICAgaWYgcHJvcGVydGllc19maWxlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvZiA9IG9wZW4ocHJvcGVydGllc19maWxlLCAidyIpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IG9wZW4gcHJvcGVydGllcyBmaWxlICVzIGZvciB3cml0aW5nLCBleGl0aW5nIiAlIHByb3BlcnRpZXNfZmlsZQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBqc29uLmR1bXAocHJvcGVydGllcywgb2YpCisKKyAgICBwcmludF9kaWN0KHByb3BlcnRpZXMpCisKKworZGVmIHNwbGl0X25lc3RlZF9wcm9wZXJ0eShwcm9wZXJ0eSk6CisgICAgIiIiCisgICAgQSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3JtIHgueSBkZXNjcmliZXMgYSBuZXN0ZWQgcHJvcGVydHkKKyAgICBpLmUuIHRoZSBwcm9wZXJ0eSB5IGlzIGNvbnRhaW5lZCB3aXRoaW4geCBhbmQgY2FuIGJlIGFkZHJlc3NlZAorICAgIHVzaW5nIHN0YW5kYXJkIEpTT04gc3ludGF4IGZvciBuZXN0ZWQgcHJvcGVydGllcy4gIE5vdGUgdGhhdCBpZiBhCisgICAgcHJvcGVydHkgbmFtZSBpdHNlbGYgY29udGFpbnMgJy4nLCBpdCBzaG91bGQgYmUgY29udGFpbmVkIGluCisgICAgZG91YmxlIHF1b3Rlcy4KKyAgICAiIiIKKyAgICBzcGxpdHRhYmxlX3Byb3BlcnR5ID0gIiIKKyAgICBpbl9xdW90ZXMgPSBGYWxzZQorICAgIGZvciBjIGluIHByb3BlcnR5OgorICAgICAgICBpZiBjID09ICcuJyBhbmQgbm90IGluX3F1b3RlczoKKyAgICAgICAgICAgIHNwbGl0dGFibGVfcHJvcGVydHkgKz0gJ1xuJworICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgYyA9PSAnIic6CisgICAgICAgICAgICBpbl9xdW90ZXMgPSBub3QgaW5fcXVvdGVzCisgICAgICAgIHNwbGl0dGFibGVfcHJvcGVydHkgKz0gYworCisgICAgc3BsaXRfcHJvcGVydGllcyA9IHNwbGl0dGFibGVfcHJvcGVydHkuc3BsaXQoJ1xuJykKKworICAgIGlmIGxlbihzcGxpdF9wcm9wZXJ0aWVzKSA+IDE6CisgICAgICAgIHJldHVybiBzcGxpdF9wcm9wZXJ0aWVzCisKKyAgICByZXR1cm4gTm9uZQorCisKK2RlZiBmaW5kX2lucHV0X2xpbmVfZ3JvdXAoc3Vic3RyaW5nLCBpbnB1dF9saW5lcyk6CisgICAgIiIiCisgICAgRmluZCBhbmQgcmV0dXJuIHRoZSBJbnB1dExpbmVHcm91cCBjb250YWluaW5nIHRoZSBzcGVjaWZpZWQgc3Vic3RyaW5nLgorICAgICIiIgorICAgIGZvciBsaW5lIGluIGlucHV0X2xpbmVzOgorICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIElucHV0TGluZUdyb3VwKToKKyAgICAgICAgICAgIGlmIHN1YnN0cmluZyBpbiBsaW5lLmdyb3VwWzBdLmxpbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKKworICAgIHJldHVybiBOb25lCisKKworZGVmIGZpbmRfaW5wdXRfbGluZShuYW1lLCBpbnB1dF9saW5lcyk6CisgICAgIiIiCisgICAgRmluZCB0aGUgaW5wdXQgbGluZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4KKyAgICAiIiIKKyAgICBmb3IgbGluZSBpbiBpbnB1dF9saW5lczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBJbnB1dExpbmVHcm91cCk6CisgICAgICAgICAgICBsID0gZmluZF9pbnB1dF9saW5lKG5hbWUsIGxpbmUuZ3JvdXApCisgICAgICAgICAgICBpZiBsOgorICAgICAgICAgICAgICAgIHJldHVybiBsCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBJbnB1dExpbmUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIGxpbmUucHJvcHNbIm5hbWUiXSA9PSBuYW1lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGluZQorICAgICAgICAgICAgICAgIGlmIGxpbmUucHJvcHNbIm5hbWUiXSArICJfIiArIGxpbmUucHJvcHNbIm5hbWVhcHBlbmQiXSA9PSBuYW1lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGluZQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIHJldHVybiBOb25lCisKKworZGVmIHByaW50X3ZhbHVlcyh0eXBlLCB2YWx1ZXNfbGlzdCk6CisgICAgIiIiCisgICAgUHJpbnQgdGhlIHZhbHVlcyBpbiB0aGUgZ2l2ZW4gbGlzdCBvZiB2YWx1ZXMuCisgICAgIiIiCisgICAgaWYgdHlwZSA9PSAiY2hvaWNlbGlzdCI6CisgICAgICAgIGZvciB2YWx1ZSBpbiB2YWx1ZXNfbGlzdDoKKyAgICAgICAgICAgIHByaW50ICJbXCIlc1wiLCBcIiVzXCJdIiAlICh2YWx1ZVswXSwgdmFsdWVbMV0pCisgICAgZWxpZiB0eXBlID09ICJib29sZWFuIjoKKyAgICAgICAgZm9yIHZhbHVlIGluIHZhbHVlc19saXN0OgorICAgICAgICAgICAgcHJpbnQgIltcIiVzXCIsIFwiJXNcIl0iICUgKHZhbHVlWzBdLCB2YWx1ZVsxXSkKKworCitkZWYgeW9jdG9fbGF5ZXJfbGlzdF9wcm9wZXJ0eV92YWx1ZXMoYXJjaCwgcHJvcGVydHksIHNjcmlwdHNfcGF0aCwgcHJvcGVydGllc19maWxlLCBleHBhbmRfY29tbW9uPVRydWUpOgorICAgICIiIgorICAgIExpc3QgdGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgYSBnaXZlbiBpbnB1dCBwcm9wZXJ0eS4gIElmCisgICAgcHJvcGVydGllc19maWxlIGlzIG5vbi1udWxsLCB3cml0ZSB0aGUgY29tcGxldGUgc2V0IG9mIHByb3BlcnRpZXMKKyAgICBhcyBhIEpTT04gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gYW4gYXJyYXkgb2YgcG9zc2libGUgdmFsdWVzLgorICAgICIiIgorICAgIGNvbnRleHQgPSBjcmVhdGVfY29udGV4dCgidW51c2VkIiwgYXJjaCwgc2NyaXB0c19wYXRoKQorICAgIGNvbnRleHRbIm5hbWUiXSA9IHByb3BlcnR5CisKKyAgICB0YXJnZXRfZmlsZXMgPSBleHBhbmRfdGFyZ2V0cyhjb250ZXh0LCAidW51c2VkIiwgZXhwYW5kX2NvbW1vbikKKworICAgIGlucHV0X2xpbmVzID0gZ2F0aGVyX2lucHV0bGluZXModGFyZ2V0X2ZpbGVzKQorCisgICAgcHJvcGVydGllcyA9IGdldF9wcm9wZXJ0aWVzKGlucHV0X2xpbmVzKQorCisgICAgbmVzdGVkX3Byb3BlcnRpZXMgPSBzcGxpdF9uZXN0ZWRfcHJvcGVydHkocHJvcGVydHkpCisgICAgaWYgbmVzdGVkX3Byb3BlcnRpZXM6CisgICAgICAgICMgY3VycmVudGx5IHRoZSBvdXRlciBwcm9wZXJ0eSBvZiBhIG5lc3RlZCBwcm9wZXJ0eSBhbHdheXMKKyAgICAgICAgIyBjb3JyZXNwb25kcyB0byBhbiBpbnB1dCBsaW5lIGdyb3VwCisgICAgICAgIGlucHV0X2xpbmVfZ3JvdXAgPSBmaW5kX2lucHV0X2xpbmVfZ3JvdXAobmVzdGVkX3Byb3BlcnRpZXNbMF0sIGlucHV0X2xpbmVzKQorICAgICAgICBpZiBpbnB1dF9saW5lX2dyb3VwOgorICAgICAgICAgICAgaW5wdXRfbGluZXNbOl0gPSBpbnB1dF9saW5lX2dyb3VwLmdyb3VwWzE6XQorICAgICAgICAgICAgIyBUaGUgaW5uZXIgcHJvcGVydHkgb2YgYSBuZXN0ZWQgcHJvcGVydHkgbmFtZSBpcyB0aGUKKyAgICAgICAgICAgICMgYWN0dWFsIHByb3BlcnR5IG5hbWUgd2Ugd2FudCwgc28gcmVzZXQgdG8gdGhhdAorICAgICAgICAgICAgcHJvcGVydHkgPSBuZXN0ZWRfcHJvcGVydGllc1sxXQorCisgICAgaW5wdXRfbGluZSA9IGZpbmRfaW5wdXRfbGluZShwcm9wZXJ0eSwgaW5wdXRfbGluZXMpCisgICAgaWYgbm90IGlucHV0X2xpbmU6CisgICAgICAgIHByaW50ICJDb3VsZG4ndCBmaW5kIHZhbHVlcyBmb3IgcHJvcGVydHkgJXMiICUgcHJvcGVydHkKKyAgICAgICAgcmV0dXJuCisKKyAgICB2YWx1ZXNfbGlzdCA9IFtdCisKKyAgICB0eXBlID0gaW5wdXRfbGluZS5wcm9wc1sidHlwZSJdCisgICAgaWYgdHlwZSA9PSAiYm9vbGVhbiI6CisgICAgICAgIHZhbHVlc19saXN0LmFwcGVuZChbInkiLCAibiJdKQorICAgIGVsaWYgdHlwZSA9PSAiY2hvaWNlbGlzdCIgb3IgdHlwZSA9PSAiY2hlY2tsaXN0IjoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZ2VuX2ZuID0gaW5wdXRfbGluZS5wcm9wc1siZ2VuIl0KKyAgICAgICAgICAgIGlmIG5lc3RlZF9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgICAgIGNvbnRleHRbImZpbGVuYW1lIl0gPSBuZXN0ZWRfcHJvcGVydGllc1swXQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dFsiYnJhbmNoZXNfYmFzZSJdID0gaW5wdXRfbGluZS5wcm9wc1siYnJhbmNoZXNfYmFzZSJdCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0WyJicmFuY2hlc19iYXNlIl0gPSBOb25lCisgICAgICAgICAgICB2YWx1ZXNfbGlzdCA9IGlucHV0X2xpbmUuZ2VuX2Nob2ljZXNfbGlzdChjb250ZXh0LCBGYWxzZSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgZm9yIGNob2ljZSBpbiBpbnB1dF9saW5lLmNob2ljZXM6CisgICAgICAgICAgICAgICAgY2hvaWNlcGFpciA9IFtdCisgICAgICAgICAgICAgICAgY2hvaWNlcGFpci5hcHBlbmQoY2hvaWNlLnZhbCkKKyAgICAgICAgICAgICAgICBjaG9pY2VwYWlyLmFwcGVuZChjaG9pY2UuZGVzYykKKyAgICAgICAgICAgICAgICB2YWx1ZXNfbGlzdC5hcHBlbmQoY2hvaWNlcGFpcikKKworICAgIGlmIHByb3BlcnRpZXNfZmlsZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb2YgPSBvcGVuKHByb3BlcnRpZXNfZmlsZSwgInciKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBvcGVuIHByb3BlcnRpZXMgZmlsZSAlcyBmb3Igd3JpdGluZywgZXhpdGluZyIgJSBwcm9wZXJ0aWVzX2ZpbGUKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAganNvbi5kdW1wKHZhbHVlc19saXN0LCBvZikKKyAgICAKKyAgICBwcmludF92YWx1ZXModHlwZSwgdmFsdWVzX2xpc3QpCisKKworZGVmIHlvY3RvX2JzcF9saXN0KGFyZ3MsIHNjcmlwdHNfcGF0aCwgcHJvcGVydGllc19maWxlKToKKyAgICAiIiIKKyAgICBQcmludCBhdmFpbGFibGUgYXJjaGl0ZWN0dXJlcywgb3IgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgcHJvcGVydGllcworICAgIGRlZmluZWQgYnkgdGhlIEJTUCwgb3IgdGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgYSBwYXJ0aWN1bGFyIEJTUAorICAgIHByb3BlcnR5LgorICAgICIiIgorICAgIGlmIGxlbihhcmdzKSA8IDE6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgYXJnc1swXSA9PSAia2FyY2giOgorICAgICAgICBsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworICAgICAgICBic3BfcGF0aCA9IGxpYl9wYXRoICsgJy9ic3AnCisgICAgICAgIGFyY2hfcGF0aCA9IGJzcF9wYXRoICsgJy9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gnCisgICAgICAgIHByaW50ICJBcmNoaXRlY3R1cmVzIGF2YWlsYWJsZToiCisgICAgICAgIGZvciBhcmNoIGluIG9zLmxpc3RkaXIoYXJjaF9wYXRoKToKKyAgICAgICAgICAgIGlmIGFyY2ggPT0gImNvbW1vbiIgb3IgYXJjaCA9PSAibGF5ZXIiOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwcmludCAiICAgICVzIiAlIGFyY2gKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbHNlOgorICAgICAgICBhcmNoID0gYXJnc1swXQorCisgICAgaWYgbGVuKGFyZ3MpIDwgMiBvciBsZW4oYXJncykgPiAzOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIGxlbihhcmdzKSA9PSAyOgorICAgICAgICBpZiBhcmdzWzFdID09ICJwcm9wZXJ0aWVzIjoKKyAgICAgICAgICAgIHlvY3RvX2xheWVyX2xpc3RfcHJvcGVydGllcyhhcmNoLCBzY3JpcHRzX3BhdGgsIHByb3BlcnRpZXNfZmlsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgbGVuKGFyZ3MpID09IDM6CisgICAgICAgIGlmIGFyZ3NbMV0gPT0gInByb3BlcnR5IjoKKyAgICAgICAgICAgIHlvY3RvX2xheWVyX2xpc3RfcHJvcGVydHlfdmFsdWVzKGFyY2gsIGFyZ3NbMl0sIHNjcmlwdHNfcGF0aCwgcHJvcGVydGllc19maWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiB5b2N0b19sYXllcl9saXN0KGFyZ3MsIHNjcmlwdHNfcGF0aCwgcHJvcGVydGllc19maWxlKToKKyAgICAiIiIKKyAgICBQcmludCB0aGUgY29tcGxldGUgbGlzdCBvZiBpbnB1dCBwcm9wZXJ0aWVzIGRlZmluZWQgYnkgdGhlIGxheWVyLAorICAgIG9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIGEgcGFydGljdWxhciBsYXllciBwcm9wZXJ0eS4KKyAgICAiIiIKKyAgICBpZiBsZW4oYXJncykgPCAxOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIGxlbihhcmdzKSA8IDEgb3IgbGVuKGFyZ3MpID4gMjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgaWYgYXJnc1swXSA9PSAicHJvcGVydGllcyI6CisgICAgICAgICAgICB5b2N0b19sYXllcl9saXN0X3Byb3BlcnRpZXMoImxheWVyIiwgc2NyaXB0c19wYXRoLCBwcm9wZXJ0aWVzX2ZpbGUsIEZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBsZW4oYXJncykgPT0gMjoKKyAgICAgICAgaWYgYXJnc1swXSA9PSAicHJvcGVydHkiOgorICAgICAgICAgICAgeW9jdG9fbGF5ZXJfbGlzdF9wcm9wZXJ0eV92YWx1ZXMoImxheWVyIiwgYXJnc1sxXSwgc2NyaXB0c19wYXRoLCBwcm9wZXJ0aWVzX2ZpbGUsIEZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiBtYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSBsaW51eC15b2N0byBic3AgYnJhbmNoIHRvIHVzZSB3aXRoIHRoZSBzcGVjaWZpZWQKKyAgICBrYnJhbmNoLiAgVGhpcyBoYW5kbGVzIHRoZSAtc3RhbmRhcmQgdmFyaWFudHMgZm9yIDMuNCBhbmQgMy44OyB0aGUKKyAgICBvdGhlciB2YXJpYW50cyBkb24ndCBuZWVkIG1hcHBpbmdzLgorICAgICIiIgorICAgIGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOgorICAgICAgICBrYnJhbmNoID0gbmV3X2ticmFuY2gKKyAgICBlbHNlOgorICAgICAgICBrYnJhbmNoID0gZXhpc3Rpbmdfa2JyYW5jaAorCisgICAgaWYga2JyYW5jaC5zdGFydHN3aXRoKCJzdGFuZGFyZC9jb21tb24tcGMtNjQiKToKKyAgICAgICAgcmV0dXJuICJic3AvY29tbW9uLXBjLTY0L2NvbW1vbi1wYy02NC1zdGFuZGFyZC5zY2MiCisgICAgaWYga2JyYW5jaC5zdGFydHN3aXRoKCJzdGFuZGFyZC9jb21tb24tcGMiKToKKyAgICAgICAgcmV0dXJuICJic3AvY29tbW9uLXBjL2NvbW1vbi1wYy1zdGFuZGFyZC5zY2MiCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICJrdHlwZXMvc3RhbmRhcmQvc3RhbmRhcmQuc2NjIgorCisKK2RlZiBtYXBfcHJlZW1wdF9ydF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIGxpbnV4LXlvY3RvIGJzcCBicmFuY2ggdG8gdXNlIHdpdGggdGhlIHNwZWNpZmllZAorICAgIGticmFuY2guICBUaGlzIGhhbmRsZXMgdGhlIC1wcmVlbXB0LXJ0IHZhcmlhbnRzIGZvciAzLjQgYW5kIDMuODsKKyAgICB0aGUgb3RoZXIgdmFyaWFudHMgZG9uJ3QgbmVlZCBtYXBwaW5ncy4KKyAgICAiIiIKKyAgICBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjoKKyAgICAgICAga2JyYW5jaCA9IG5ld19rYnJhbmNoCisgICAgZWxzZToKKyAgICAgICAga2JyYW5jaCA9IGV4aXN0aW5nX2ticmFuY2gKKworICAgIGlmIGticmFuY2guc3RhcnRzd2l0aCgic3RhbmRhcmQvcHJlZW1wdC1ydC9jb21tb24tcGMtNjQiKToKKyAgICAgICAgcmV0dXJuICJic3AvY29tbW9uLXBjLTY0L2NvbW1vbi1wYy02NC1wcmVlbXB0LXJ0LnNjYyIKKyAgICBpZiBrYnJhbmNoLnN0YXJ0c3dpdGgoInN0YW5kYXJkL3ByZWVtcHQtcnQvY29tbW9uLXBjIik6CisgICAgICAgIHJldHVybiAiYnNwL2NvbW1vbi1wYy9jb21tb24tcGMtcHJlZW1wdC1ydC5zY2MiCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICJrdHlwZXMvcHJlZW1wdC1ydC9wcmVlbXB0LXJ0LnNjYyIKKworCitkZWYgbWFwX3Rpbnlfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSBsaW51eC15b2N0byBic3AgYnJhbmNoIHRvIHVzZSB3aXRoIHRoZSBzcGVjaWZpZWQKKyAgICBrYnJhbmNoLiAgVGhpcyBoYW5kbGVzIHRoZSAtdGlueSB2YXJpYW50cyBmb3IgMy40IGFuZCAzLjg7IHRoZQorICAgIG90aGVyIHZhcmlhbnRzIGRvbid0IG5lZWQgbWFwcGluZ3MuCisgICAgIiIiCisgICAgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6CisgICAgICAgIGticmFuY2ggPSBuZXdfa2JyYW5jaAorICAgIGVsc2U6CisgICAgICAgIGticmFuY2ggPSBleGlzdGluZ19rYnJhbmNoCisKKyAgICBpZiBrYnJhbmNoLnN0YXJ0c3dpdGgoInN0YW5kYXJkL3RpbnkvY29tbW9uLXBjIik6CisgICAgICAgIHJldHVybiAiYnNwL2NvbW1vbi1wYy9jb21tb24tcGMtdGlueS5zY2MiCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICJrdHlwZXMvdGlueS90aW55LnNjYyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2hlbHAucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9oZWxwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjY2UxMDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9oZWxwLnB5CkBAIC0wLDAgKzEsMTA0NCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgc29tZSBiYXNpYyBoZWxwIGludm9jYXRpb24gZnVuY3Rpb25zIGFsb25nCisjIHdpdGggdGhlIGJ1bGsgb2YgdGhlIGhlbHAgdG9waWMgdGV4dCBmb3IgdGhlIFlvY3RvIEJTUCBUb29scy4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBpbnRlbC5jb20+CisjCisKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgbG9nZ2luZworCisKK2RlZiBzdWJjb21tYW5kX2Vycm9yKGFyZ3MpOgorICAgIGxvZ2dpbmcuaW5mbygiaW52YWxpZCBzdWJjb21tYW5kICVzIiAlIGFyZ3NbMF0pCisKKworZGVmIGRpc3BsYXlfaGVscChzdWJjb21tYW5kLCBzdWJjb21tYW5kcyk6CisgICAgIiIiCisgICAgRGlzcGxheSBoZWxwIGZvciBzdWJjb21tYW5kLgorICAgICIiIgorICAgIGlmIHN1YmNvbW1hbmQgbm90IGluIHN1YmNvbW1hbmRzOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGhlbHAgPSBzdWJjb21tYW5kcy5nZXQoc3ViY29tbWFuZCwgc3ViY29tbWFuZF9lcnJvcilbMl0KKyAgICBwYWdlciA9IHN1YnByb2Nlc3MuUG9wZW4oJ2xlc3MnLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUpCisgICAgcGFnZXIuY29tbXVuaWNhdGUoaGVscCkKKworICAgIHJldHVybiBUcnVlCisKKworZGVmIHlvY3RvX2hlbHAoYXJncywgdXNhZ2Vfc3RyLCBzdWJjb21tYW5kcyk6CisgICAgIiIiCisgICAgU3ViY29tbWFuZCBoZWxwIGRpc3BhdGNoZXIuCisgICAgIiIiCisgICAgaWYgbGVuKGFyZ3MpID09IDEgb3Igbm90IGRpc3BsYXlfaGVscChhcmdzWzFdLCBzdWJjb21tYW5kcyk6CisgICAgICAgIHByaW50KHVzYWdlX3N0cikKKworCitkZWYgaW52b2tlX3N1YmNvbW1hbmQoYXJncywgcGFyc2VyLCBtYWluX2NvbW1hbmRfdXNhZ2UsIHN1YmNvbW1hbmRzKToKKyAgICAiIiIKKyAgICBEaXNwYXRjaCB0byBzdWJjb21tYW5kIGhhbmRsZXIgYm9ycm93ZWQgZnJvbSBjb21iby1sYXllci4KKyAgICBTaG91bGQgdXNlIGFyZ3BhcnNlLCBidXQgaGFzIHRvIHdvcmsgaW4gMi42LgorICAgICIiIgorICAgIGlmIG5vdCBhcmdzOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJObyBzdWJjb21tYW5kIHNwZWNpZmllZCwgZXhpdGluZyIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICBlbGlmIGFyZ3NbMF0gPT0gImhlbHAiOgorICAgICAgICB5b2N0b19oZWxwKGFyZ3MsIG1haW5fY29tbWFuZF91c2FnZSwgc3ViY29tbWFuZHMpCisgICAgZWxpZiBhcmdzWzBdIG5vdCBpbiBzdWJjb21tYW5kczoKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiVW5zdXBwb3J0ZWQgc3ViY29tbWFuZCAlcywgZXhpdGluZ1xuIiAlIChhcmdzWzBdKSkKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgIGVsc2U6CisgICAgICAgIHVzYWdlID0gc3ViY29tbWFuZHMuZ2V0KGFyZ3NbMF0sIHN1YmNvbW1hbmRfZXJyb3IpWzFdCisgICAgICAgIHN1YmNvbW1hbmRzLmdldChhcmdzWzBdLCBzdWJjb21tYW5kX2Vycm9yKVswXShhcmdzWzE6XSwgdXNhZ2UpCisKKworIyMKKyMgeW9jdG8tYnNwIGhlbHAgYW5kIHVzYWdlIHN0cmluZ3MKKyMjCisKK3lvY3RvX2JzcF91c2FnZSA9ICIiIgorCisgQ3JlYXRlIGEgY3VzdG9taXplZCBZb2N0byBCU1AgbGF5ZXIuCisKKyB1c2FnZTogeW9jdG8tYnNwIFstLXZlcnNpb25dIFstLWhlbHBdIENPTU1BTkQgW0FSR1NdCisKKyBDdXJyZW50ICd5b2N0by1ic3AnIGNvbW1hbmRzIGFyZToKKyAgICBjcmVhdGUgICAgICAgICAgICBDcmVhdGUgYSBuZXcgWW9jdG8gQlNQCisgICAgbGlzdCAgICAgICAgICAgICAgTGlzdCBhdmFpbGFibGUgdmFsdWVzIGZvciBvcHRpb25zIGFuZCBCU1AgcHJvcGVydGllcworCisgU2VlICd5b2N0by1ic3AgaGVscCBDT01NQU5EJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhIHNwZWNpZmljIGNvbW1hbmQuCisiIiIKKworeW9jdG9fYnNwX2hlbHBfdXNhZ2UgPSAiIiIKKworIHVzYWdlOiB5b2N0by1ic3AgaGVscCA8c3ViY29tbWFuZD4KKworIFRoaXMgY29tbWFuZCBkaXNwbGF5cyBkZXRhaWxlZCBoZWxwIGZvciB0aGUgc3BlY2lmaWVkIHN1YmNvbW1hbmQuCisiIiIKKworeW9jdG9fYnNwX2NyZWF0ZV91c2FnZSA9ICIiIgorCisgQ3JlYXRlIGEgbmV3IFlvY3RvIEJTUAorCisgdXNhZ2U6IHlvY3RvLWJzcCBjcmVhdGUgPGJzcC1uYW1lPiA8a2FyY2g+IFstbyA8RElSTkFNRT4gfCAtLW91dGRpciA8RElSTkFNRT5dCisgICAgICAgICAgICBbLWkgPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLWluZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKworIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgWW9jdG8gQlNQIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycy4KKyBUaGUgbmV3IEJTUCB3aWxsIGJlIGEgbmV3IFlvY3RvIEJTUCBsYXllciBjb250YWluZWQgYnkgZGVmYXVsdCB3aXRoaW4KKyB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBzcGVjaWZpZWQgYXMgJ21ldGEtYnNwLW5hbWUnLiAgVGhlIC1vIG9wdGlvbgorIGNhbiBiZSB1c2VkIHRvIHBsYWNlIHRoZSBCU1AgbGF5ZXIgaW4gYSBkaXJlY3Rvcnkgd2l0aCBhIGRpZmZlcmVudAorIG5hbWUgYW5kIGxvY2F0aW9uLgorCisgVGhlIHZhbHVlIG9mIHRoZSAna2FyY2gnIHBhcmFtZXRlciBkZXRlcm1pbmVzIHRoZSBzZXQgb2YgZmlsZXMgdGhhdAorIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB0aGUgQlNQLCBhbG9uZyB3aXRoIHRoZSBzcGVjaWZpYyBzZXQgb2YKKyAncHJvcGVydGllcycgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZmlsbCBvdXQgdGhlIEJTUC1zcGVjaWZpYyBwb3J0aW9ucworIG9mIHRoZSBCU1AuICBUaGUgcG9zc2libGUgdmFsdWVzIGZvciB0aGUgJ2thcmNoJyBwYXJhbXRlciBjYW4gYmUKKyBsaXN0ZWQgdmlhICd5b2N0by1ic3AgbGlzdCBrYXJjaCcuCisKKyBOT1RFOiBPbmNlIGNyZWF0ZWQsIHlvdSBzaG91bGQgYWRkIHlvdXIgbmV3IGxheWVyIHRvIHlvdXIKKyBiYmxheWVycy5jb25mIGZpbGUgaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHN1YnNlcXVlbnRseSBzZWVuIGFuZAorIG1vZGlmaWVkIGJ5IHRoZSB5b2N0by1rZXJuZWwgdG9vbC4KKworIFNlZSAneW9jdG8gYnNwIGhlbHAgY3JlYXRlJyBmb3IgbW9yZSBkZXRhaWxlZCBpbnN0cnVjdGlvbnMuCisiIiIKKworeW9jdG9fYnNwX2NyZWF0ZV9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1ic3AgY3JlYXRlIC0gQ3JlYXRlIGEgbmV3IFlvY3RvIEJTUAorCitTWU5PUFNJUworICAgIHlvY3RvLWJzcCBjcmVhdGUgPGJzcC1uYW1lPiA8a2FyY2g+IFstbyA8RElSTkFNRT4gfCAtLW91dGRpciA8RElSTkFNRT5dCisgICAgICAgIFstaSA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC0taW5maWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgWW9jdG8gQlNQIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQKKyAgICBwYXJhbWV0ZXJzLiAgVGhlIG5ldyBCU1Agd2lsbCBiZSBhIG5ldyBZb2N0byBCU1AgbGF5ZXIgY29udGFpbmVkCisgICAgYnkgZGVmYXVsdCB3aXRoaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgc3BlY2lmaWVkIGFzCisgICAgJ21ldGEtYnNwLW5hbWUnLiAgVGhlIC1vIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBwbGFjZSB0aGUgQlNQIGxheWVyCisgICAgaW4gYSBkaXJlY3Rvcnkgd2l0aCBhIGRpZmZlcmVudCBuYW1lIGFuZCBsb2NhdGlvbi4KKworICAgIFRoZSB2YWx1ZSBvZiB0aGUgJ2thcmNoJyBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB0aGUgc2V0IG9mIGZpbGVzCisgICAgdGhhdCB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgdGhlIEJTUCwgYWxvbmcgd2l0aCB0aGUgc3BlY2lmaWMgc2V0IG9mCisgICAgJ3Byb3BlcnRpZXMnIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGZpbGwgb3V0IHRoZSBCU1Atc3BlY2lmaWMKKyAgICBwb3J0aW9ucyBvZiB0aGUgQlNQLiAgVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlICdrYXJjaCcgcGFyYW10ZXIKKyAgICBjYW4gYmUgbGlzdGVkIHZpYSAneW9jdG8tYnNwIGxpc3Qga2FyY2gnLgorCisgICAgVGhlIEJTUC1zcGVjaWZpYyBwcm9wZXJ0aWVzIHRoYXQgZGVmaW5lIHRoZSB2YWx1ZXMgdGhhdCB3aWxsIGJlCisgICAgdXNlZCB0byBnZW5lcmF0ZSBhIHBhcnRpY3VsYXIgQlNQIGNhbiBiZSBzcGVjaWZpZWQgb24gdGhlCisgICAgY29tbWFuZC1saW5lIHVzaW5nIHRoZSAtaSBvcHRpb24gYW5kIHN1cHBseWluZyBhIEpTT04gb2JqZWN0CisgICAgY29uc2lzdGluZyBvZiB0aGUgc2V0IG9mIG5hbWU6dmFsdWUgcGFpcnMgbmVlZGVkIGJ5IHRoZSBCU1AuCisKKyAgICBJZiB0aGUgLWkgb3B0aW9uIGlzIG5vdCB1c2VkLCB0aGUgdXNlciB3aWxsIGJlIGludGVyYWN0aXZlbHkKKyAgICBwcm9tcHRlZCBmb3IgZWFjaCBvZiB0aGUgcmVxdWlyZWQgcHJvcGVydHkgdmFsdWVzLCB3aGljaCB3aWxsIHRoZW4KKyAgICBiZSB1c2VkIGFzIHZhbHVlcyBmb3IgQlNQIGdlbmVyYXRpb24uCisKKyAgICBUaGUgc2V0IG9mIHByb3BlcnRpZXMgYXZhaWxhYmxlIGZvciBhIGdpdmVuIGFyY2hpdGVjdHVyZSBjYW4gYmUKKyAgICBsaXN0ZWQgdXNpbmcgdGhlICd5b2N0by1ic3AgbGlzdCcgY29tbWFuZC4KKworICAgIFNwZWNpZnlpbmcgLWMgY2F1c2VzIHRoZSBQeXRob24gY29kZSBnZW5lcmF0ZWQgYW5kIGV4ZWN1dGVkIHRvCisgICAgY3JlYXRlIHRoZSBCU1AgdG8gYmUgZHVtcGVkIHRvIHRoZSAnYnNwZ2VuLm91dCcgZmlsZSBpbiB0aGUKKyAgICBjdXJyZW50IGRpcmVjdG9yeSwgYW5kIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nLgorCisgICAgTk9URTogT25jZSBjcmVhdGVkLCB5b3Ugc2hvdWxkIGFkZCB5b3VyIG5ldyBsYXllciB0byB5b3VyCisgICAgYmJsYXllcnMuY29uZiBmaWxlIGluIG9yZGVyIGZvciBpdCB0byBiZSBzdWJzZXF1ZW50bHkgc2VlbiBhbmQKKyAgICBtb2RpZmllZCBieSB0aGUgeW9jdG8ta2VybmVsIHRvb2wuCisKKyAgICBGb3IgZXhhbXBsZSwgYXNzdW1pbmcgeW91ciBwb2t5IHJlcG8gaXMgYXQgL3BhdGgvdG8vcG9reSwgeW91ciBuZXcKKyAgICBCU1AgbGF5ZXIgaXMgYXQgL3BhdGgvdG8vcG9reS9tZXRhLW15YnNwLCBhbmQgeW91ciBidWlsZCBkaXJlY3RvcnkKKyAgICBpcyAvcGF0aC90by9idWlsZDoKKworICAgICQgZ2VkaXQgL3BhdGgvdG8vYnVpbGQvY29uZi9iYmxheWVycy5jb25mCisKKyAgICBCQkxBWUVSUyA/PSAiIFxcCisgICAgICAvcGF0aC90by9wb2t5L21ldGEgXFwKKyAgICAgIC9wYXRoL3RvL3Bva3kvbWV0YS15b2N0byBcXAorICAgICAgL3BhdGgvdG8vcG9reS9tZXRhLW15YnNwIFxcCisgICAgICAiCisiIiIKKworeW9jdG9fYnNwX2xpc3RfdXNhZ2UgPSAiIiIKKworIHVzYWdlOiB5b2N0by1ic3AgbGlzdCBrYXJjaAorICAgICAgICB5b2N0by1ic3AgbGlzdCA8a2FyY2g+IHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICBbLW8gPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLW91dGZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisgICAgICAgIHlvY3RvLWJzcCBsaXN0IDxrYXJjaD4gcHJvcGVydHkgPHh4eD4KKyAgICAgICAgICAgICAgICBbLW8gPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLW91dGZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisKKyBUaGlzIGNvbW1hbmQgZW51bWVyYXRlcyB0aGUgY29tcGxldGUgc2V0IG9mIHBvc3NpYmxlIHZhbHVlcyBmb3IgYQorIHNwZWNpZmllZCBvcHRpb24gb3IgcHJvcGVydHkgbmVlZGVkIGJ5IHRoZSBCU1AgY3JlYXRpb24gcHJvY2Vzcy4KKworIFRoZSBmaXJzdCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBwb3NzaWJsZSB2YWx1ZXMgdGhhdCBleGlzdCBhbmQgY2FuCisgYmUgc3BlY2lmaWVkIGZvciB0aGUgJ2thcmNoJyBwYXJhbWV0ZXIgdG8gdGhlICd5b2N0byBic3AgY3JlYXRlJworIGNvbW1hbmQuCisKKyBUaGUgc2Vjb25kIGZvcm0gZW51bWVyYXRlcyBhbGwgdGhlIHBvc3NpYmxlIHByb3BlcnRpZXMgdGhhdCBleGlzdCBhbmQKKyBtdXN0IGhhdmUgdmFsdWVzIHNwZWNpZmllZCBmb3IgdGhlbSBpbiB0aGUgJ3lvY3RvIGJzcCBjcmVhdGUnIGNvbW1hbmQKKyBmb3IgdGhlIGdpdmVuICdrYXJjaCcuCisKKyBUaGUgdGhpcmQgZm9ybSBlbnVtZXJhdGVzIGFsbCB0aGUgcG9zc2libGUgdmFsdWVzIHRoYXQgZXhpc3QgYW5kIGNhbgorIGJlIHNwZWNpZmllZCBmb3IgYW55IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuCisgJ2thcmNoJyBpbiB0aGUgJ3lvY3RvIGJzcCBjcmVhdGUnIGNvbW1hbmQuCisKKyBTZWUgJ3lvY3RvLWJzcCBoZWxwIGxpc3QnIGZvciBtb3JlIGRldGFpbHMuCisiIiIKKworeW9jdG9fYnNwX2xpc3RfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8tYnNwIGxpc3QgLSBMaXN0IGF2YWlsYWJsZSB2YWx1ZXMgZm9yIG9wdGlvbnMgYW5kIEJTUCBwcm9wZXJ0aWVzCisKK1NZTk9QU0lTCisgICAgeW9jdG8tYnNwIGxpc3Qga2FyY2gKKyAgICB5b2N0by1ic3AgbGlzdCA8a2FyY2g+IHByb3BlcnRpZXMKKyAgICAgICAgICAgIFstLW8gPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtb3V0ZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKyAgICB5b2N0by1ic3AgbGlzdCA8a2FyY2g+IHByb3BlcnR5IDx4eHg+CisgICAgICAgICAgICBbLS1vIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLW91dGZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGVudW1lcmF0ZXMgdGhlIGNvbXBsZXRlIHNldCBvZiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGEKKyAgICBzcGVjaWZpZWQgb3B0aW9uIG9yIHByb3BlcnR5IG5lZWRlZCBieSB0aGUgQlNQIGNyZWF0aW9uIHByb2Nlc3MuCisKKyAgICBUaGUgZmlyc3QgZm9ybSBlbnVtZXJhdGVzIGFsbCB0aGUgcG9zc2libGUgdmFsdWVzIHRoYXQgZXhpc3QgYW5kCisgICAgY2FuIGJlIHNwZWNpZmllZCBmb3IgdGhlICdrYXJjaCcgcGFyYW1ldGVyIHRvIHRoZSAneW9jdG8gYnNwCisgICAgY3JlYXRlJyBjb21tYW5kLiAgRXhhbXBsZSBvdXRwdXQgZm9yIHRoZSAnbGlzdCBrYXJjaCcgY29tbWFuZDoKKworICAgICQgeW9jdG8tYnNwIGxpc3Qga2FyY2gKKyAgICBBcmNoaXRlY3R1cmVzIGF2YWlsYWJsZToKKyAgICAgICAgYXJtCisgICAgICAgIHBvd2VycGMKKyAgICAgICAgaTM4NgorICAgICAgICBtaXBzCisgICAgICAgIG1pcHM2NAorICAgICAgICB4ODZfNjQKKyAgICAgICAgcWVtdQorCisgICAgVGhlIHNlY29uZCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBwb3NzaWJsZSBwcm9wZXJ0aWVzIHRoYXQgZXhpc3QKKyAgICBhbmQgbXVzdCBoYXZlIHZhbHVlcyBzcGVjaWZpZWQgZm9yIHRoZW0gaW4gdGhlICd5b2N0byBic3AgY3JlYXRlJworICAgIGNvbW1hbmQgZm9yIHRoZSBnaXZlbiAna2FyY2gnLiAgVGhpcyBjb21tYW5kIGlzIG1haW5seSBtZWFudCB0bworICAgIGFsbG93IHRoZSBkZXZlbG9wbWVudCB1c2VyIGludGVyZmFjZSBhbHRlcm5hdGl2ZXMgdG8gdGhlIGRlZmF1bHQKKyAgICB0ZXh0LWJhc2VkIHByb21wdGluZyBpbnRlcmZhY2UuICBJZiB0aGUgLW8gb3B0aW9uIGlzIHNwZWNpZmllZCwKKyAgICB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzLCBpbiBhZGRpdGlvbiB0byBiZWluZyBkaXNwbGF5ZWQsIHdpbGwgYmUKKyAgICB3cml0dGVuIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSBhcyBhIEpTT04gb2JqZWN0LiAgSW4gdGhpcyBjYXNlLCB0aGUKKyAgICBvYmplY3Qgd2lsbCBjb25zaXN0IG9mIHRoZSBzZXQgb2YgbmFtZTp2YWx1ZSBwYWlycyBjb3JyZXNwb25kaW5nCisgICAgdG8gdGhlIChwb3NzaWJseSBuZXN0ZWQpIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBkZWZpbmVkIGJ5IHRoZQorICAgIGlucHV0IHN0YXRlbWVudHMgdXNlZCBieSB0aGUgQlNQLiAgU29tZSBleGFtcGxlIG91dHB1dCBmb3IgdGhlCisgICAgJ2xpc3QgcHJvcGVydGllcycgY29tbWFuZDoKKworICAgICQgeW9jdG8tYnNwIGxpc3QgYXJtIHByb3BlcnRpZXMKKyAgICAidG91Y2hzY3JlZW4iIDogeworICAgICAgICAibXNnIiA6IERvZXMgeW91ciBCU1AgaGF2ZSBhIHRvdWNoc2NyZWVuPyAoeS9OKQorICAgICAgICAiZGVmYXVsdCIgOiBuCisgICAgICAgICJ0eXBlIiA6IGJvb2xlYW4KKyAgICB9CisgICAgInVib290X2xvYWRhZGRyZXNzIiA6IHsKKyAgICAgICAgIm1zZyIgOiBQbGVhc2Ugc3BlY2lmeSBhIHZhbHVlIGZvciBVQk9PVF9MT0FEQUREUkVTUy4KKyAgICAgICAgImRlZmF1bHQiIDogMHg4MDAwODAwMAorICAgICAgICAidHlwZSIgOiBlZGl0CisgICAgICAgICJwcmlvIiA6IDQwCisgICAgfQorICAgICJrZXJuZWxfY2hvaWNlIiA6IHsKKyAgICAgICAgInByaW8iIDogMTAKKyAgICAgICAgImRlZmF1bHQiIDogbGludXgteW9jdG9fMy4yCisgICAgICAgICJkZXBlbmRzLW9uIiA6IHVzZV9kZWZhdWx0X2tlcm5lbAorICAgICAgICAiZGVwZW5kcy1vbi12YWwiIDogbgorICAgICAgICAibXNnIiA6IFBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1AgPT4KKyAgICAgICAgInR5cGUiIDogY2hvaWNlbGlzdAorICAgICAgICAiZ2VuIiA6IGJzcC5rZXJuZWwua2VybmVscworICAgIH0KKyAgICAiaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4wIjoiIDogeworICAgICAgICAiYmFzZV9rYnJhbmNoX2xpbnV4X3lvY3RvXzNfMCIgOiB7CisgICAgICAgICAgICAicHJpbyIgOiAyMAorICAgICAgICAgICAgImRlZmF1bHQiIDogeW9jdG8vc3RhbmRhcmQKKyAgICAgICAgICAgICJkZXBlbmRzLW9uIiA6IG5ld19rYnJhbmNoX2xpbnV4X3lvY3RvXzNfMAorICAgICAgICAgICAgImRlcGVuZHMtb24tdmFsIiA6IHkKKyAgICAgICAgICAgICJtc2ciIDogUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb24gPT4KKyAgICAgICAgICAgICJ0eXBlIiA6IGNob2ljZWxpc3QKKyAgICAgICAgICAgICJnZW4iIDogYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMKKyAgICB9CisgICAgLgorICAgIC4KKyAgICAuCisKKyAgICBFYWNoIGVudHJ5IGluIHRoZSBvdXRwdXQgY29uc2lzdHMgb2YgdGhlIG5hbWUgb2YgdGhlIGlucHV0IGVsZW1lbnQKKyAgICBlLmcuICJ0b3VjaHNjcmVlbiIsIGZvbGxvd2VkIGJ5IHRoZSBwcm9wZXJ0aWVzIGRlZmluZWQgZm9yIHRoYXQKKyAgICBlbGVtZW50IGVuY2xvc2VkIGluIGJyYWNlcy4gIFRoaXMgaW5mb3JtYXRpb24gc2hvdWxkIHByb3ZpZGUKKyAgICBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvIGNyZWF0ZSBhIGNvbXBsZXRlIHVzZXIgaW50ZXJmYWNlIHdpdGguCisgICAgVHdvIGZlYXR1cmVzIG9mIHRoZSBzY2hlbWUgcHJvdmlkZSBmb3IgY29uZGl0aW9uYWwgaW5wdXQuICBGaXJzdCwKKyAgICBpZiBhIFB5dGhvbiAiaWYiIHN0YXRlbWVudCBhcHBlYXJzIGluIHBsYWNlIG9mIGFuIGlucHV0IGVsZW1lbnQKKyAgICBuYW1lLCB0aGUgc2V0IG9mIGVuY2xvc2VkIGlucHV0IGVsZW1lbnRzIGFwcGx5IGFuZCBzaG91bGQgYmUKKyAgICBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgb25seSBpZiB0aGUgJ2lmJyBzdGF0ZW1lbnQgZXZhbHVhdGVzIHRvCisgICAgdHJ1ZS4gIFRoZSB0ZXN0IGluIHRoZSBpZiBzdGF0ZW1lbnQgd2lsbCBhbHdheXMgcmVmZXJlbmNlIGFub3RoZXIKKyAgICBpbnB1dCBlbGVtZW50IGluIHRoZSBsaXN0LCB3aGljaCBtZWFucyB0aGF0IHRoZSBlbGVtZW50IGJlaW5nCisgICAgdGVzdGVkIHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgYmVmb3JlIHRoZSBlbGVtZW50cworICAgIGVuY2xvc2VkIGJ5IHRoZSBpZiBibG9jay4gIFNlY29uZGx5LCBpbiBhIHNpbWlsYXIgd2F5LCBzb21lCisgICAgZWxlbWVudHMgY29udGFpbiAiZGVwZW5kcy1vbiIgYW5kIGRlcGVuZHMtb24tdmFsIiB0YWdzLCB3aGljaCBtZWFuCisgICAgdGhhdCB0aGUgYWZmZWN0ZWQgaW5wdXQgZWxlbWVudCBzaG91bGQgb25seSBiZSBwcmVzZW50ZWQgdG8gdGhlCisgICAgdXNlciBpZiB0aGUgZWxlbWVudCBpdCBkZXBlbmRzIG9uIGhhcyBhbHJlYWR5IGJlZW4gcHJlc2VudGVkIHRvCisgICAgdGhlIHVzZXIgYW5kIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZvciB0aGF0CisgICAgZWxlbWVudC4KKworICAgIFRoZSB0aGlyZCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBwb3NzaWJsZSB2YWx1ZXMgdGhhdCBleGlzdCBhbmQKKyAgICBjYW4gYmUgc3BlY2lmaWVkIGZvciBhbnkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW4KKyAgICAna2FyY2gnIGluIHRoZSAneW9jdG8gYnNwIGNyZWF0ZScgY29tbWFuZC4gIElmIHRoZSAtbyBvcHRpb24gaXMKKyAgICBzcGVjaWZpZWQsIHRoZSBsaXN0IG9mIHZhbHVlcyBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LCBpbiBhZGRpdGlvbgorICAgIHRvIGJlaW5nIGRpc3BsYXllZCwgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSBhcyBhCisgICAgSlNPTiBvYmplY3QuICBJbiB0aGlzIGNhc2UsIHRoZSBvYmplY3Qgd2lsbCBjb25zaXN0IG9mIHRoZSBzZXQgb2YKKyAgICBuYW1lOnZhbHVlIHBhaXJzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcworICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvcGVydHkuCisKKyAgICAkIHlvY3RvLWJzcCBsaXN0IGkzODYgcHJvcGVydHkgeHNlcnZlcl9jaG9pY2UKKyAgICAgICAgWyJ4c2VydmVyX3Zlc2EiLCAiVkVTQSB4c2VydmVyIHN1cHBvcnQiXQorICAgICAgICBbInhzZXJ2ZXJfaTkxNSIsICJpOTE1IHhzZXJ2ZXIgc3VwcG9ydCJdCisKKyAgICAkIHlvY3RvLWJzcCBsaXN0IGFybSBwcm9wZXJ0eSBiYXNlX2ticmFuY2hfbGludXhfeW9jdG9fM18wCisgICAgICAgIEdldHRpbmcgYnJhbmNoZXMgZnJvbSByZW1vdGUgcmVwbyBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by0zLjAuLi4KKyAgICAgICAgWyJ5b2N0by9iYXNlIiwgInlvY3RvL2Jhc2UiXQorICAgICAgICBbInlvY3RvL2VnMjB0IiwgInlvY3RvL2VnMjB0Il0KKyAgICAgICAgWyJ5b2N0by9nbWE1MDAiLCAieW9jdG8vZ21hNTAwIl0KKyAgICAgICAgWyJ5b2N0by9wdnIiLCAieW9jdG8vcHZyIl0KKyAgICAgICAgWyJ5b2N0by9zdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIsICJ5b2N0by9zdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyJdCisgICAgICAgIFsieW9jdG8vc3RhbmRhcmQvYmFzZSIsICJ5b2N0by9zdGFuZGFyZC9iYXNlIl0KKyAgICAgICAgWyJ5b2N0by9zdGFuZGFyZC9jZWRhcnRyYWlsIiwgInlvY3RvL3N0YW5kYXJkL2NlZGFydHJhaWwiXQorICAgICAgICAuCisgICAgICAgIC4KKyAgICAgICAgLgorICAgICAgICBbInlvY3RvL3N0YW5kYXJkL3FlbXUtcHBjMzIiLCAieW9jdG8vc3RhbmRhcmQvcWVtdS1wcGMzMiJdCisgICAgICAgIFsieW9jdG8vc3RhbmRhcmQvcm91dGVyc3RhdGlvbnBybyIsICJ5b2N0by9zdGFuZGFyZC9yb3V0ZXJzdGF0aW9ucHJvIl0KKworICAgIFRoZSB0aGlyZCBmb3JtIGFzIHdlbGwgaXMgbWVhbnQgbWFpbmx5IGZvciBkZXZlbG9wZXJzIG9mCisgICAgYWx0ZXJuYXRpdmUgaW50ZXJmYWNlcyAtIGl0IGFsbG93cyB0aGUgZGV2ZWxvcGVyIHRvIGZldGNoIHRoZQorICAgIHBvc3NpYmxlIHZhbHVlcyBmb3IgYSBnaXZlbiBpbnB1dCBlbGVtZW50IG9uLWRlbWFuZC4gIFRoaXMKKyAgICBvbi1kZW1hbmQgY2FwYWJpbGl0eSBpcyBlc3BlY2lhbGx5IHZhbHVhYmxlIGZvciBlbGVtZW50cyB0aGF0CisgICAgcmVxdWlyZSByZWxhdGl2ZWx5IGV4cGVuc2l2ZSByZW1vdGUgb3BlcmF0aW9ucyB0byBmdWxmaWxsLCBzdWNoIGFzCisgICAgdGhlIGV4YW1wbGUgdGhhdCByZXR1cm5zIHRoZSBzZXQgb2YgYnJhbmNoZXMgYXZhaWxhYmxlIGluIGEgcmVtb3RlCisgICAgZ2l0IHRyZWUgYWJvdmUuCisKKyIiIgorCisjIworIyB5b2N0by1rZXJuZWwgaGVscCBhbmQgdXNhZ2Ugc3RyaW5ncworIyMKKworeW9jdG9fa2VybmVsX3VzYWdlID0gIiIiCisKKyBNb2RpZnkgYW5kIGxpc3QgWW9jdG8gQlNQIGtlcm5lbCBjb25maWcgaXRlbXMgYW5kIHBhdGNoZXMuCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIFstLXZlcnNpb25dIFstLWhlbHBdIENPTU1BTkQgW0FSR1NdCisKKyBDdXJyZW50ICd5b2N0by1rZXJuZWwnIGNvbW1hbmRzIGFyZToKKyAgIGNvbmZpZyBsaXN0ICAgICAgIExpc3QgdGhlIG1vZGlmaWFibGUgc2V0IG9mIGJhcmUga2VybmVsIGNvbmZpZyBvcHRpb25zIGZvciBhIEJTUAorICAgY29uZmlnIGFkZCAgICAgICAgQWRkIG9yIG1vZGlmeSBiYXJlIGtlcm5lbCBjb25maWcgb3B0aW9ucyBmb3IgYSBCU1AKKyAgIGNvbmZpZyBybSAgICAgICAgIFJlbW92ZSBiYXJlIGtlcm5lbCBjb25maWcgb3B0aW9ucyBmcm9tIGEgQlNQCisgICBwYXRjaCBsaXN0ICAgICAgICBMaXN0IHRoZSBwYXRjaGVzIGFzc29jaWF0ZWQgd2l0aCBhIEJTUAorICAgcGF0Y2ggYWRkICAgICAgICAgUGF0Y2ggdGhlIFlvY3RvIGtlcm5lbCBmb3IgYSBCU1AKKyAgIHBhdGNoIHJtICAgICAgICAgIFJlbW92ZSBwYXRjaGVzIGZyb20gYSBCU1AKKyAgIGZlYXR1cmUgbGlzdCAgICAgIExpc3QgdGhlIGZlYXR1cmVzIHVzZWQgYnkgYSBCU1AKKyAgIGZlYXR1cmUgYWRkICAgICAgIEhhdmUgYSBCU1AgdXNlIGEgZmVhdHVyZQorICAgZmVhdHVyZSBybSAgICAgICAgSGF2ZSBhIEJTUCBzdG9wIHVzaW5nIGEgZmVhdHVyZQorICAgZmVhdHVyZXMgbGlzdCAgICAgTGlzdCB0aGUgZmVhdHVyZXMgYXZhaWxhYmxlIHRvIEJTUHMKKyAgIGZlYXR1cmUgZGVzY3JpYmUgIERlc2NyaWJlIGEgcGFydGljdWxhciBmZWF0dXJlCisgICBmZWF0dXJlIGNyZWF0ZSAgICBDcmVhdGUgYSBuZXcgQlNQLWxvY2FsIGZlYXR1cmUKKyAgIGZlYXR1cmUgZGVzdHJveSAgIFJlbW92ZSBhIEJTUC1sb2NhbCBmZWF0dXJlCisKKyBTZWUgJ3lvY3RvLWtlcm5lbCBoZWxwIENPTU1BTkQnIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4KKworIiIiCisKKworeW9jdG9fa2VybmVsX2hlbHBfdXNhZ2UgPSAiIiIKKworIHVzYWdlOiB5b2N0by1rZXJuZWwgaGVscCA8c3ViY29tbWFuZD4KKworIFRoaXMgY29tbWFuZCBkaXNwbGF5cyBkZXRhaWxlZCBoZWxwIGZvciB0aGUgc3BlY2lmaWVkIHN1YmNvbW1hbmQuCisiIiIKKworeW9jdG9fa2VybmVsX2NvbmZpZ19saXN0X3VzYWdlID0gIiIiCisKKyBMaXN0IHRoZSBtb2RpZmlhYmxlIHNldCBvZiBiYXJlIGtlcm5lbCBjb25maWcgb3B0aW9ucyBmb3IgYSBCU1AKKworIHVzYWdlOiB5b2N0by1rZXJuZWwgY29uZmlnIGxpc3QgPGJzcC1uYW1lPgorCisgVGhpcyBjb21tYW5kIGxpc3RzIHRoZSAnbW9kaWZpYWJsZScgY29uZmlnIGl0ZW1zIGZvciBhIEJTUCBpLmUuIHRoZQorIGl0ZW1zIHdoaWNoIGFyZSBlbGlnaWJsZSBmb3IgbW9kaWZpY2F0aW9uIG9yIHJlbW92YWwgYnkgb3RoZXIKKyB5b2N0by1rZXJuZWwgY29tbWFuZHMuCisKKyAnbW9kaWZpYWJsZScgY29uZmlnIGl0ZW1zIGFyZSB0aGUgY29uZmlnIGl0ZW1zIGNvbnRhaW5lZCBhIEJTUCdzCisgdXNlci1jb25maWcuY2ZnIGJhc2UgY29uZmlnLgorIiIiCisKKworeW9jdG9fa2VybmVsX2NvbmZpZ19saXN0X2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWtlcm5lbCBjb25maWcgbGlzdCAtIExpc3QgdGhlIG1vZGlmaWFibGUgc2V0IG9mIGJhcmUga2VybmVsCisgICAgY29uZmlnIG9wdGlvbnMgZm9yIGEgQlNQCisKK1NZTk9QU0lTCisgICAgeW9jdG8ta2VybmVsIGNvbmZpZyBsaXN0IDxic3AtbmFtZT4KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgbGlzdHMgdGhlICdtb2RpZmlhYmxlJyBjb25maWcgaXRlbXMgZm9yIGEgQlNQCisgICAgaS5lLiB0aGUgaXRlbXMgd2hpY2ggYXJlIGVsaWdpYmxlIGZvciBtb2RpZmljYXRpb24gb3IgcmVtb3ZhbCBieQorICAgIG90aGVyIHlvY3RvLWtlcm5lbCBjb21tYW5kcy4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9jb25maWdfYWRkX3VzYWdlID0gIiIiCisKKyBBZGQgb3IgbW9kaWZ5IGJhcmUga2VybmVsIGNvbmZpZyBvcHRpb25zIGZvciBhIEJTUAorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBjb25maWcgYWRkIDxic3AtbmFtZT4gWzxDT05GSUdfWFhYPXg+IC4uLl0KKworIFRoaXMgY29tbWFuZCBhZGRzIG9uZSBvciBtb3JlIENPTkZJR19YWFg9eCBpdGVtcyB0byBhIEJTUCdzIHVzZXItY29uZmlnLmNmZworIGJhc2UgY29uZmlnLgorIiIiCisKKworeW9jdG9fa2VybmVsX2NvbmZpZ19hZGRfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIGNvbmZpZyBhZGQgLSBBZGQgb3IgbW9kaWZ5IGJhcmUga2VybmVsIGNvbmZpZyBvcHRpb25zCisgICAgZm9yIGEgQlNQCisKK1NZTk9QU0lTCisgICAgeW9jdG8ta2VybmVsIGNvbmZpZyBhZGQgPGJzcC1uYW1lPiBbPENPTkZJR19YWFg9eD4gLi4uXQorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBhZGRzIG9uZSBvciBtb3JlIENPTkZJR19YWFg9eCBpdGVtcyB0byBhIEJTUCdzCisgICAgZm9vLmNmZyBiYXNlIGNvbmZpZy4KKworICAgIE5PVEU6IEl0J3MgdXAgdG8gdGhlIHVzZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBjb25maWcKKyAgICBvcHRpb25zIGJlaW5nIGFkZGVkIG1ha2Ugc2Vuc2Ugb3Igbm90IC0gdGhpcyBjb21tYW5kIGRvZXMgbm8KKyAgICBzYW5pdHkgY2hlY2tpbmcgb3IgdmVyaWZpY2F0aW9uIG9mIGFueSBraW5kIHRvIGVuc3VyZSB0aGF0IGEKKyAgICBjb25maWcgb3B0aW9uIHJlYWxseSBtYWtlcyBzZW5zZSBhbmQgd2lsbCBhY3R1YWxseSBiZSBzZXQgaW4gaW4KKyAgICB0aGUgZmluYWwgY29uZmlnLiAgRm9yIGV4YW1wbGUsIGlmIGEgY29uZmlnIG9wdGlvbiBkZXBlbmRzIG9uCisgICAgb3RoZXIgY29uZmlnIG9wdGlvbnMsIGl0IHdpbGwgYmUgdHVybmVkIG9mZiBieSBrY29uZmlnIGlmIHRoZQorICAgIG90aGVyIG9wdGlvbnMgYXJlbid0IHNldCBjb3JyZWN0bHkuCisiIiIKKworCit5b2N0b19rZXJuZWxfY29uZmlnX3JtX3VzYWdlID0gIiIiCisKKyBSZW1vdmUgYmFyZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgZnJvbSBhIEJTUAorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBjb25maWcgcm0gPGJzcC1uYW1lPgorCisgVGhpcyBjb21tYW5kIHJlbW92ZXMgKHR1cm5zIG9mZikgb25lIG9yIG1vcmUgQ09ORklHX1hYWCBpdGVtcyBmcm9tIGEKKyBCU1AncyB1c2VyLWNvbmZpZy5jZmcgYmFzZSBjb25maWcuCisKKyBUaGUgc2V0IG9mIGNvbmZpZyBpdGVtcyBhdmFpbGFibGUgdG8gYmUgcmVtb3ZlZCBieSB0aGlzIGNvbW1hbmQgZm9yIGEKKyBCU1AgaXMgbGlzdGVkIGFuZCB0aGUgdXNlciBwcm9tcHRlZCBmb3IgdGhlIHNwZWNpZmljIGl0ZW1zIHRvIHJlbW92ZS4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9jb25maWdfcm1faGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIGNvbmZpZyBybSAtIFJlbW92ZSBiYXJlIGtlcm5lbCBjb25maWcgb3B0aW9ucyBmcm9tIGEKKyAgICBCU1AKKworU1lOT1BTSVMKKyAgICB5b2N0by1rZXJuZWwgY29uZmlnIHJtIDxic3AtbmFtZT4KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgcmVtb3ZlcyAodHVybnMgb2ZmKSBvbmUgb3IgbW9yZSBDT05GSUdfWFhYIGl0ZW1zIGZyb20gYQorICAgIEJTUCdzIHVzZXItY29uZmlnLmNmZyBiYXNlIGNvbmZpZy4KKworICAgIFRoZSBzZXQgb2YgY29uZmlnIGl0ZW1zIGF2YWlsYWJsZSB0byBiZSByZW1vdmVkIGJ5IHRoaXMgY29tbWFuZAorICAgIGZvciBhIEJTUCBpcyBsaXN0ZWQgYW5kIHRoZSB1c2VyIHByb21wdGVkIGZvciB0aGUgc3BlY2lmaWMgaXRlbXMKKyAgICB0byByZW1vdmUuCisiIiIKKworCit5b2N0b19rZXJuZWxfcGF0Y2hfbGlzdF91c2FnZSA9ICIiIgorCisgTGlzdCB0aGUgcGF0Y2hlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGtlcm5lbCBmb3IgYSBCU1AKKworIHVzYWdlOiB5b2N0by1rZXJuZWwgcGF0Y2ggbGlzdCA8YnNwLW5hbWU+CisKKyBUaGlzIGNvbW1hbmQgbGlzdHMgdGhlIHBhdGNoZXMgYXNzb2NpYXRlZCB3aXRoIGEgQlNQLgorCisgTk9URTogdGhpcyBvbmx5IGFwcGxpZXMgdG8gcGF0Y2hlcyBsaXN0ZWQgaW4gdGhlIGtlcm5lbCByZWNpcGUncworIHVzZXItcGF0Y2hlcy5zY2MgZmlsZSAoYW5kIGN1cnJlbnRseSByZXBlYXRlZCBpbiBpdHMgU1JDX1VSSSkuCisiIiIKKworCit5b2N0b19rZXJuZWxfcGF0Y2hfbGlzdF9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1rZXJuZWwgcGF0Y2ggbGlzdCAtIExpc3QgdGhlIHBhdGNoZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXJuZWwKKyAgICBmb3IgYSBCU1AKKworU1lOT1BTSVMKKyAgICB5b2N0by1rZXJuZWwgcGF0Y2ggbGlzdCA8YnNwLW5hbWU+CisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGxpc3RzIHRoZSBwYXRjaGVzIGFzc29jaWF0ZWQgd2l0aCBhIEJTUC4KKworICAgIE5PVEU6IHRoaXMgb25seSBhcHBsaWVzIHRvIHBhdGNoZXMgbGlzdGVkIGluIHRoZSBrZXJuZWwgcmVjaXBlJ3MKKyAgICB1c2VyLXBhdGNoZXMuc2NjIGZpbGUgKGFuZCBjdXJyZW50bHkgcmVwZWF0ZWQgaW4gaXRzIFNSQ19VUkkpLgorIiIiCisKKworeW9jdG9fa2VybmVsX3BhdGNoX2FkZF91c2FnZSA9ICIiIgorCisgUGF0Y2ggdGhlIFlvY3RvIGtlcm5lbCBmb3IgYSBzcGVjaWZpYyBCU1AKKworIHVzYWdlOiB5b2N0by1rZXJuZWwgcGF0Y2ggYWRkIDxic3AtbmFtZT4gWzxQQVRDSD4gLi4uXQorCisgVGhpcyBjb21tYW5kIGFkZHMgb25lIG9yIG1vcmUgcGF0Y2hlcyB0byBhIEJTUCdzIG1hY2hpbmUgYnJhbmNoLiAgVGhlCisgcGF0Y2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgQlNQJ3MgbGludXgteW9jdG8ga2VybmVsIHVzZXItcGF0Y2hlcy5zY2MKKyBmaWxlIChhbmQgY3VycmVudGx5IHJlcGVhdGVkIGluIGl0cyBTUkNfVVJJKSBhbmQgd2lsbCBiZSBndWFyYW50ZWVkCisgdG8gYmUgYXBwbGllZCBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkLgorIiIiCisKKworeW9jdG9fa2VybmVsX3BhdGNoX2FkZF9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1rZXJuZWwgcGF0Y2ggYWRkIC0gUGF0Y2ggdGhlIFlvY3RvIGtlcm5lbCBmb3IgYSBzcGVjaWZpYyBCU1AKKworU1lOT1BTSVMKKyAgICB5b2N0by1rZXJuZWwgcGF0Y2ggYWRkIDxic3AtbmFtZT4gWzxQQVRDSD4gLi4uXQorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBhZGRzIG9uZSBvciBtb3JlIHBhdGNoZXMgdG8gYSBCU1AncyBtYWNoaW5lIGJyYW5jaC4KKyAgICBUaGUgcGF0Y2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgQlNQJ3MgbGludXgteW9jdG8ga2VybmVsCisgICAgdXNlci1wYXRjaGVzLnNjYyBmaWxlIChhbmQgY3VycmVudGx5IHJlcGVhdGVkIGluIGl0cyBTUkNfVVJJKSBhbmQKKyAgICB3aWxsIGJlIGd1YXJhbnRlZWQgdG8gYmUgYXBwbGllZCBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkLgorCisgICAgTk9URTogSXQncyB1cCB0byB0aGUgdXNlciB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIHBhdGNoZXMKKyAgICBiZWluZyBhZGRlZCBtYWtlcyBzZW5zZSBvciBub3QgLSB0aGlzIGNvbW1hbmQgZG9lcyBubyBzYW5pdHkKKyAgICBjaGVja2luZyBvciB2ZXJpZmljYXRpb24gb2YgYW55IGtpbmQgdG8gZW5zdXJlIHRoYXQgYSBwYXRjaCBjYW4KKyAgICBhY3R1YWxseSBiZSBhcHBsaWVkIHRvIHRoZSBCU1AncyBrZXJuZWwgYnJhbmNoOyBpdCdzIGFzc3VtZWQgdGhhdAorICAgIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGRvbmUgdGhhdC4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9wYXRjaF9ybV91c2FnZSA9ICIiIgorCisgUmVtb3ZlIGEgcGF0Y2ggZnJvbSB0aGUgWW9jdG8ga2VybmVsIGZvciBhIHNwZWNpZmljIEJTUAorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBwYXRjaCBybSA8YnNwLW5hbWU+CisKKyBUaGlzIGNvbW1hbmQgcmVtb3ZlcyBvbmUgb3IgbW9yZSBwYXRjaGVzIGZyb20gYSBCU1AncyBtYWNoaW5lIGJyYW5jaC4KKyBUaGUgcGF0Y2ggd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIEJTUCdzIGxpbnV4LXlvY3RvIGtlcm5lbAorIHVzZXItcGF0Y2hlcy5zY2MgZmlsZSAoYW5kIGN1cnJlbnRseSByZXBlYXRlZCBpbiBpdHMgU1JDX1VSSSkgYW5kCisga2VybmVsIFNSQ19VUkkgZGlyLgorCisgVGhlIHNldCBvZiBwYXRjaGVzIGF2YWlsYWJsZSB0byBiZSByZW1vdmVkIGJ5IHRoaXMgY29tbWFuZCBmb3IgYSBCU1AKKyBpcyBsaXN0ZWQgYW5kIHRoZSB1c2VyIHByb21wdGVkIGZvciB0aGUgc3BlY2lmaWMgcGF0Y2hlcyB0byByZW1vdmUuCisiIiIKKworCit5b2N0b19rZXJuZWxfcGF0Y2hfcm1faGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIHBhdGNoIHJtIC0gUmVtb3ZlIGEgcGF0Y2ggZnJvbSB0aGUgWW9jdG8ga2VybmVsIGZvciBhIHNwZWNpZmljIEJTUAorCitTWU5PUFNJUworICAgIHlvY3RvLWtlcm5lbCBwYXRjaCBybSA8YnNwLW5hbWU+CisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIHJlbW92ZXMgb25lIG9yIG1vcmUgcGF0Y2hlcyBmcm9tIGEgQlNQJ3MgbWFjaGluZQorICAgIGJyYW5jaC4gIFRoZSBwYXRjaCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgQlNQJ3MgbGludXgteW9jdG8KKyAgICBrZXJuZWwgdXNlci1wYXRjaGVzLnNjYyBmaWxlIChhbmQgY3VycmVudGx5IHJlcGVhdGVkIGluIGl0cworICAgIFNSQ19VUkkpLgorCisgICAgVGhlIHNldCBvZiBwYXRjaGVzIGF2YWlsYWJsZSB0byBiZSByZW1vdmVkIGJ5IHRoaXMgY29tbWFuZCBmb3IgYQorICAgIEJTUCBpcyBsaXN0ZWQgYW5kIHRoZSB1c2VyIHByb21wdGVkIGZvciB0aGUgc3BlY2lmaWMgcGF0Y2hlcyB0bworICAgIHJlbW92ZS4KKyIiIgorCit5b2N0b19rZXJuZWxfZmVhdHVyZV9saXN0X3VzYWdlID0gIiIiCisKKyBMaXN0IHRoZSBCU1AgZmVhdHVyZXMgdGhhdCBhcmUgYmVpbmcgdXNlZCBieSBhIEJTUAorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBmZWF0dXJlIGxpc3QgPGJzcC1uYW1lPgorCisgVGhpcyBjb21tYW5kIGxpc3RzIHRoZSBmZWF0dXJlcyBiZWluZyB1c2VkIGJ5IGEgQlNQIGkuZS4gdGhlIGZlYXR1cmVzCisgd2hpY2ggYXJlIGVsaWdpYmxlIGZvciBtb2RpZmljYXRpb24gb3IgcmVtb3ZhbCBieSBvdGhlciB5b2N0by1rZXJuZWwKKyBjb21tYW5kcy4KKworICdtb2RpZmlhYmxlJyBmZWF0dXJlcyBhcmUgdGhlIGZlYXR1cmVzIGxpc3RlZCBpbiBhIEJTUCdzCisgdXNlci1mZWF0dXJlcy5zY2MgZmlsZS4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9mZWF0dXJlX2xpc3RfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmUgbGlzdCAtIExpc3QgdGhlIG1vZGlmaWFibGUgc2V0IG9mIGZlYXR1cmVzCisgICAgYmVpbmcgdXNlZCBieSBhIEJTUAorCitTWU5PUFNJUworICAgIHlvY3RvLWtlcm5lbCBmZWF0dXJlIGxpc3QgPGJzcC1uYW1lPgorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBsaXN0cyB0aGUgJ21vZGlmaWFibGUnIGZlYXR1cmVzIGJlaW5nIHVzZWQgYnkgYSBCU1AKKyAgICBpLmUuIHRoZSBmZWF0dXJlcyB3aGljaCBhcmUgZWxpZ2libGUgZm9yIG1vZGlmaWNhdGlvbiBvciByZW1vdmFsCisgICAgYnkgb3RoZXIgeW9jdG8ta2VybmVsIGNvbW1hbmRzLgorIiIiCisKKworeW9jdG9fa2VybmVsX2ZlYXR1cmVfYWRkX3VzYWdlID0gIiIiCisKKyBBZGQgdG8gb3IgbW9kaWZ5IHRoZSBsaXN0IG9mIGZlYXR1cmVzIGJlaW5nIHVzZWQgZm9yIGEgQlNQCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIGZlYXR1cmUgYWRkIDxic3AtbmFtZT4gWy94eHh4L3l5eXkvZmVhdHVyZS5zY2MgLi4uXQorCisgVGhpcyBjb21tYW5kIGFkZHMgb25lIG9yIG1vcmUgZmVhdHVyZSBpdGVtcyB0byBhIEJTUCdzIGtlcm5lbAorIHVzZXItZmVhdHVyZXMuc2NjIGZpbGUsIHdoaWNoIGlzIHRoZSBmaWxlIHVzZWQgdG8gbWFuYWdlIGZlYXR1cmVzIGluCisgYSB5b2N0by1ic3AtZ2VuZXJhdGVkIEJTUC4gIEZlYXR1cmVzIHRvIGJlIGFkZGVkIG11c3QgYmUgc3BlY2lmaWVkIGFzCisgZnVsbHktcXVhbGlmaWVkIGZlYXR1cmUgbmFtZXMuCisiIiIKKworCit5b2N0b19rZXJuZWxfZmVhdHVyZV9hZGRfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmUgYWRkIC0gQWRkIHRvIG9yIG1vZGlmeSB0aGUgbGlzdCBvZiBmZWF0dXJlcworICAgIGJlaW5nIHVzZWQgZm9yIGEgQlNQCisKK1NZTk9QU0lTCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmUgYWRkIDxic3AtbmFtZT4gWy94eHh4L3l5eXkvZmVhdHVyZS5zY2MgLi4uXQorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBhZGRzIG9uZSBvciBtb3JlIGZlYXR1cmUgaXRlbXMgdG8gYSBCU1AncworICAgIHVzZXItZmVhdHVyZXMuc2NjIGZpbGUsIHdoaWNoIGlzIHRoZSBmaWxlIHVzZWQgdG8gbWFuYWdlIGZlYXR1cmVzCisgICAgaW4gYSB5b2N0by1ic3AtZ2VuZXJhdGVkIEJTUC4gIEZlYXR1cmVzIHRvIGJlIGFkZGVkIG11c3QgYmUKKyAgICBzcGVjaWZpZWQgYXMgZnVsbHktcXVhbGlmaWVkIGZlYXR1cmUgbmFtZXMuCisiIiIKKworCit5b2N0b19rZXJuZWxfZmVhdHVyZV9ybV91c2FnZSA9ICIiIgorCisgUmVtb3ZlIGEgZmVhdHVyZSBmcm9tIHRoZSBsaXN0IG9mIGZlYXR1cmVzIGJlaW5nIHVzZWQgZm9yIGEgQlNQCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIGZlYXR1cmUgcm0gPGJzcC1uYW1lPgorCisgVGhpcyBjb21tYW5kIHJlbW92ZXMgKHR1cm5zIG9mZikgb25lIG9yIG1vcmUgZmVhdHVyZXMgZnJvbSBhIEJTUCdzCisgdXNlci1mZWF0dXJlcy5zY2MgZmlsZSwgd2hpY2ggaXMgdGhlIGZpbGUgdXNlZCB0byBtYW5hZ2UgZmVhdHVyZXMgaW4KKyBhIHlvY3RvLWJzcC1nZW5lcmF0ZWQgQlNQLgorCisgVGhlIHNldCBvZiBmZWF0dXJlcyBhdmFpbGFibGUgdG8gYmUgcmVtb3ZlZCBieSB0aGlzIGNvbW1hbmQgZm9yIGEgQlNQCisgaXMgbGlzdGVkIGFuZCB0aGUgdXNlciBwcm9tcHRlZCBmb3IgdGhlIHNwZWNpZmljIGl0ZW1zIHRvIHJlbW92ZS4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9mZWF0dXJlX3JtX2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWtlcm5lbCBmZWF0dXJlIHJtIC0gUmVtb3ZlIGEgZmVhdHVyZSBmcm9tIHRoZSBsaXN0IG9mCisgICAgZmVhdHVyZXMgYmVpbmcgdXNlZCBmb3IgYSBCU1AKKworU1lOT1BTSVMKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZSBybSA8YnNwLW5hbWU+CisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIHJlbW92ZXMgKHR1cm5zIG9mZikgb25lIG9yIG1vcmUgZmVhdHVyZXMgZnJvbSBhIEJTUCdzCisgICAgdXNlci1mZWF0dXJlcy5zY2MgZmlsZSwgd2hpY2ggaXMgdGhlIGZpbGUgdXNlZCB0byBtYW5hZ2UgZmVhdHVyZXMKKyAgICBpbiBhIHlvY3RvLWJzcC1nZW5lcmF0ZWQgQlNQLgorCisgICAgVGhlIHNldCBvZiBmZWF0dXJlcyBhdmFpbGFibGUgdG8gYmUgcmVtb3ZlZCBieSB0aGlzIGNvbW1hbmQgZm9yIGEKKyAgICBCU1AgaXMgbGlzdGVkIGFuZCB0aGUgdXNlciBwcm9tcHRlZCBmb3IgdGhlIHNwZWNpZmljIGl0ZW1zIHRvCisgICAgcmVtb3ZlLgorIiIiCisKKworeW9jdG9fa2VybmVsX2F2YWlsYWJsZV9mZWF0dXJlc19saXN0X3VzYWdlID0gIiIiCisKKyBMaXN0IHRoZSBzZXQgb2Yga2VybmVsIGZlYXR1cmVzIGF2YWlsYWJsZSB0byBhIEJTUAorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBmZWF0dXJlcyBsaXN0IDxic3AtbmFtZT4KKworIFRoaXMgY29tbWFuZCBsaXN0cyB0aGUgY29tcGxldGUgc2V0IG9mIGtlcm5lbCBmZWF0dXJlcyBhdmFpbGFibGUgdG8gYQorIEJTUC4gIFRoaXMgaW5jbHVkZXMgdGhlIGZlYXR1cmVzIGNvbnRhaW5lZCBpbiBsaW51eC15b2N0byBtZXRhCisgYnJhbmNoZXMgYXMgd2VsbCBhcyByZWNpcGUtc3BhY2UgZmVhdHVyZXMgZGVmaW5lZCBsb2NhbGx5IHRvIHRoZSBCU1AuCisiIiIKKworCit5b2N0b19rZXJuZWxfYXZhaWxhYmxlX2ZlYXR1cmVzX2xpc3RfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmVzIGxpc3QgLSBMaXN0IHRoZSBzZXQgb2Yga2VybmVsIGZlYXR1cmVzCisgICAgYXZhaWxhYmxlIHRvIGEgQlNQCisKK1NZTk9QU0lTCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmVzIGxpc3QgPGJzcC1uYW1lPgorCitERVNDUklQVElPTgorICAgICBUaGlzIGNvbW1hbmQgbGlzdHMgdGhlIGNvbXBsZXRlIHNldCBvZiBrZXJuZWwgZmVhdHVyZXMgYXZhaWxhYmxlCisgICAgIHRvIGEgQlNQLiAgVGhpcyBpbmNsdWRlcyB0aGUgZmVhdHVyZXMgY29udGFpbmVkIGluIGxpbnV4LXlvY3RvCisgICAgIG1ldGEgYnJhbmNoZXMgYXMgd2VsbCBhcyByZWNpcGUtc3BhY2UgZmVhdHVyZXMgZGVmaW5lZCBsb2NhbGx5IHRvCisgICAgIHRoZSBCU1AuCisiIiIKKworCit5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXNjcmliZV91c2FnZSA9ICIiIgorCisgUHJpbnQgdGhlIGRlc2NyaXB0aW9uIGFuZCBjb21wYXRpYmlsaXR5IGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIGtlcm5lbCBmZWF0dXJlCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIGZlYXR1cmUgZGVzY3JpYmUgPGJzcC1uYW1lPiBbL3h4eHgveXl5eS9mZWF0dXJlLnNjYyAuLi5dCisKKyBUaGlzIGNvbW1hbmQgcHJpbnRzIHRoZSBkZXNjcmlwdGlvbiBhbmQgY29tcGF0aWJpbGl0eSBvZiBhIHNwZWNpZmljCisgZmVhdHVyZSBpbiB0aGUgZm9ybWF0ICdkZXNjcmlwdGlvbiBbY29tcGF0aWJpbGl0eV0uCisiIiIKKworCit5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXNjcmliZV9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZSBkZXNjcmliZSAtIHByaW50IHRoZSBkZXNjcmlwdGlvbiBhbmQKKyAgICBjb21wYXRpYmlsaXR5IGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIGtlcm5lbCBmZWF0dXJlCisKK1NZTk9QU0lTCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmUgZGVzY3JpYmUgPGJzcC1uYW1lPiBbL3h4eHgveXl5eS9mZWF0dXJlLnNjYyAuLi5dCisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIHByaW50cyB0aGUgZGVzY3JpcHRpb24gYW5kIGNvbXBhdGliaWxpdHkgb2YgYQorICAgIHNwZWNpZmljIGZlYXR1cmUgaW4gdGhlIGZvcm1hdCAnZGVzY3JpcHRpb24gW2NvbXBhdGliaWxpdHldLiAgSWYKKyAgICB0aGUgZmVhdHVyZSBkb2Vzbid0IGRlZmluZSBhIGRlc2NyaXB0aW9uIG9yIGNvbXBhdGliaWxpdHksIGEKKyAgICBzdHJpbmcgd2l0aCBnZW5lcmljIHVua25vd24gdmFsdWVzIHdpbGwgYmUgcHJpbnRlZC4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9mZWF0dXJlX2NyZWF0ZV91c2FnZSA9ICIiIgorCisgQ3JlYXRlIGEgcmVjaXBlLXNwYWNlIGtlcm5lbCBmZWF0dXJlIGluIGEgQlNQCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIGZlYXR1cmUgY3JlYXRlIDxic3AtbmFtZT4gbmV3ZmVhdHVyZS5zY2MgXAorICAgICAgICAiRmVhdHVyZSBEZXNjcmlwdGlvbiIgY2FwYWJpbGl0aWVzIFs8Q09ORklHX1hYWD14PiAuLi5dIFs8UEFUQ0g+IC4uLl0KKworIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgbmV3IGtlcm5lbCBmZWF0dXJlIGZyb20gdGhlIGJhcmUgY29uZmlnCisgb3B0aW9ucyBhbmQgcGF0Y2hlcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQtbGluZS4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9mZWF0dXJlX2NyZWF0ZV9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZSBjcmVhdGUgLSBjcmVhdGUgYSByZWNpcGUtc3BhY2Uga2VybmVsIGZlYXR1cmUKKyAgICBpbiBhIEJTUAorCitTWU5PUFNJUworICAgIHlvY3RvLWtlcm5lbCBmZWF0dXJlIGNyZWF0ZSA8YnNwLW5hbWU+IG5ld2ZlYXR1cmUuc2NjIFwKKyAgICAgICAgIkZlYXR1cmUgRGVzY3JpcHRpb24iIGNhcGFiaWxpdGllcyBbPENPTkZJR19YWFg9eD4gLi4uXSBbPFBBVENIPiAuLi5dCisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGNyZWF0ZXMgYSBuZXcga2VybmVsIGZlYXR1cmUgZnJvbSB0aGUgYmFyZSBjb25maWcKKyAgICBvcHRpb25zIGFuZCBwYXRjaGVzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZC1saW5lLiAgVGhlIG5ldworICAgIGZlYXR1cmUgd2lsbCBiZSBjcmVhdGVkIGluIHJlY2lwZS1zcGFjZSwgc3BlY2lmaWNhbGx5IGluIGVpdGhlcgorICAgIHRoZSBrZXJuZWwgLmJiYXBwZW5kJ3MgL2ZpbGVzL2NmZyBvciAvZmlsZXMvZmVhdHVyZXMgc3ViZGlyZWN0b3J5LAorICAgIGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgZmVhdHVyZSBjb250YWlucyBjb25maWcgaXRlbXMgb25seQorICAgIG9yIGNvbmZpZyBpdGVtcyBhbG9uZyB3aXRoIHBhdGNoZXMuICBUaGUgbmFtZWQgZmVhdHVyZSBtdXN0IGVuZAorICAgIHdpdGggLnNjYyBhbmQgbXVzdCBub3QgY29udGFpbiBhIGZlYXR1cmUgZGlyZWN0b3J5IHRvIGNvbnRhaW4gdGhlCisgICAgZmVhdHVyZSAodGhpcyB3aWxsIGJlIGRldGVybWluZWQgYXV0b21hdGljYWxseSksIGFuZCBhIGZlYXR1cmUKKyAgICBkZWNyaXB0aW9uIGluIGRvdWJsZS1xdW90ZXMgYWxvbmcgd2l0aCBhIGNhcGFiaWxpdGllcyBzdHJpbmcKKyAgICAod2hpY2ggZm9yIHRoZSB0aW1lIGJlaW5nIGNhbiBiZSBvbmUgb2Y6ICdhbGwnIG9yICdib2FyZCcpLgorIiIiCisKKworeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzdHJveV91c2FnZSA9ICIiIgorCisgRGVzdHJveSBhIHJlY2lwZS1zcGFjZSBrZXJuZWwgZmVhdHVyZSBpbiBhIEJTUAorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBmZWF0dXJlIGRlc3Ryb3kgPGJzcC1uYW1lPiBmZWF0dXJlLnNjYworCisgVGhpcyBjb21tYW5kIGRlc3Ryb3lzIGEga2VybmVsIGZlYXR1cmUgZGVmaW5lZCBpbiB0aGUgc3BlY2lmaWVkIEJTUCdzCisgcmVjaXBlLXNwYWNlIGtlcm5lbCBkZWZpbml0aW9uLgorIiIiCisKKworeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzdHJveV9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZSBkZXN0cm95IDxic3AtbmFtZT4gZmVhdHVyZS5zY2MgLSBkZXN0cm95IGEKKyAgICByZWNpcGUtc3BhY2Uga2VybmVsIGZlYXR1cmUgaW4gYSBCU1AKKworU1lOT1BTSVMKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZSBkZXN0cm95IDxic3AtbmFtZT4gZmVhdHVyZS5zY2MKKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgZGVzdHJveXMgYSBrZXJuZWwgZmVhdHVyZSBkZWZpbmVkIGluIHRoZSBzcGVjaWZpZWQKKyAgICBCU1AncyByZWNpcGUtc3BhY2Uga2VybmVsIGRlZmluaXRpb24uICBUaGUgbmFtZWQgZmVhdHVyZSBtdXN0IGVuZAorICAgIHdpdGggLnNjYyBhbmQgbXVzdCBub3QgY29udGFpbiBhIGZlYXR1cmUgZGlyZWN0b3J5IHRvIGNvbnRhaW4gdGhlCisgICAgZmVhdHVyZSAodGhpcyB3aWxsIGJlIGRldGVybWluZWQgYXV0b21hdGljYWxseSkuICBJZiB0aGUga2VybmVsCisgICAgZmVhdHVyZSBpcyBpbiB1c2UgYnkgYSBCU1AsIGl0IGNhbid0IGJlIHJlbW92ZWQgdW50aWwgdGhlIEJTUAorICAgIHN0b3BzIHVzaW5nIGl0IChzZWUgeW9jdG8ta2VybmVsIGZlYXR1cmUgcm0gdG8gc3RvcCB1c2luZyBpdCkuCisiIiIKKworIyMKKyMgeW9jdG8tbGF5ZXIgaGVscCBhbmQgdXNhZ2Ugc3RyaW5ncworIyMKKworeW9jdG9fbGF5ZXJfdXNhZ2UgPSAiIiIKKworIENyZWF0ZSBhIGdlbmVyaWMgWW9jdG8gbGF5ZXIuCisKKyB1c2FnZTogeW9jdG8tbGF5ZXIgWy0tdmVyc2lvbl0gWy0taGVscF0gQ09NTUFORCBbQVJHU10KKworIEN1cnJlbnQgJ3lvY3RvLWxheWVyJyBjb21tYW5kcyBhcmU6CisgICAgY3JlYXRlICAgICAgICAgICAgQ3JlYXRlIGEgbmV3IGdlbmVyaWMgWW9jdG8gbGF5ZXIKKyAgICBsaXN0ICAgICAgICAgICAgICBMaXN0IGF2YWlsYWJsZSB2YWx1ZXMgZm9yIGlucHV0IG9wdGlvbnMgYW5kIHByb3BlcnRpZXMKKworIFNlZSAneW9jdG8tbGF5ZXIgaGVscCBDT01NQU5EJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhIHNwZWNpZmljIGNvbW1hbmQuCisiIiIKKworeW9jdG9fbGF5ZXJfaGVscF91c2FnZSA9ICIiIgorCisgdXNhZ2U6IHlvY3RvLWxheWVyIGhlbHAgPHN1YmNvbW1hbmQ+CisKKyBUaGlzIGNvbW1hbmQgZGlzcGxheXMgZGV0YWlsZWQgaGVscCBmb3IgdGhlIHNwZWNpZmllZCBzdWJjb21tYW5kLgorIiIiCisKK3lvY3RvX2xheWVyX2NyZWF0ZV91c2FnZSA9ICIiIgorCisgQ3JlYXRlIGEgbmV3IGdlbmVyaWMgWW9jdG8gbGF5ZXIKKworIHVzYWdlOiB5b2N0by1sYXllciBjcmVhdGUgPGxheWVyLW5hbWU+IFtsYXllcl9wcmlvcml0eV0KKyAgICAgICAgICAgIFstbyA8RElSTkFNRT4gfCAtLW91dGRpciA8RElSTkFNRT5dCisgICAgICAgICAgICBbLWkgPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLWluZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKworIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgZ2VuZXJpYyBZb2N0byBsYXllciBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkCisgcGFyYW1ldGVycy4gIFRoZSBuZXcgbGF5ZXIgd2lsbCBiZSBhIG5ldyBZb2N0byBsYXllciBjb250YWluZWQgYnkKKyBkZWZhdWx0IHdpdGhpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBzcGVjaWZpZWQgYXMKKyAnbWV0YS1sYXllci1uYW1lJy4gIFRoZSAtbyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcGxhY2UgdGhlIGxheWVyIGluIGEKKyBkaXJlY3Rvcnkgd2l0aCBhIGRpZmZlcmVudCBuYW1lIGFuZCBsb2NhdGlvbi4KKworIElmIGxheWVyX3ByaW9yaXR5IGlzIHNwZWNpZmllZCwgYSBzaW1wbGUgbGF5ZXIgd2lsbCBiZSBjcmVhdGVkIHVzaW5nCisgdGhlIGdpdmVuIGxheWVyIHByaW9yaXR5LCBhbmQgdGhlIHVzZXIgd2lsbCBub3QgYmUgcHJvbXB0ZWQgZm9yCisgZnVydGhlciBpbnB1dC4KKworIE5PVEU6IE9uY2UgY3JlYXRlZCwgeW91IHNob3VsZCBhZGQgeW91ciBuZXcgbGF5ZXIgdG8geW91cgorIGJibGF5ZXJzLmNvbmYgZmlsZSBpbiBvcmRlciBmb3IgaXQgdG8gYmUgc3Vic2VxdWVudGx5IHNlZW4gYW5kCisgbW9kaWZpZWQgYnkgdGhlIHlvY3RvLWtlcm5lbCB0b29sLiAgSW5zdHJ1Y3Rpb25zIGZvciBkb2luZyB0aGlzIGNhbgorIGJlIGZvdW5kIGluIHRoZSBSRUFETUUgZmlsZSBnZW5lcmF0ZWQgaW4gdGhlIGxheWVyJ3MgdG9wLWxldmVsCisgZGlyZWN0b3J5LgorCisgU2VlICd5b2N0byBsYXllciBoZWxwIGNyZWF0ZScgZm9yIG1vcmUgZGV0YWlsZWQgaW5zdHJ1Y3Rpb25zLgorIiIiCisKK3lvY3RvX2xheWVyX2NyZWF0ZV9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1sYXllciBjcmVhdGUgLSBDcmVhdGUgYSBuZXcgZ2VuZXJpYyBZb2N0byBsYXllcgorCitTWU5PUFNJUworICAgIHlvY3RvLWxheWVyIGNyZWF0ZSA8bGF5ZXItbmFtZT4gW2xheWVyX3ByaW9yaXR5XQorICAgICAgICBbLW8gPERJUk5BTUU+IHwgLS1vdXRkaXIgPERJUk5BTUU+XQorICAgICAgICBbLWkgPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLWluZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgY3JlYXRlcyBhIGdlbmVyaWMgWW9jdG8gbGF5ZXIgYmFzZWQgb24gdGhlIHNwZWNpZmllZAorICAgIHBhcmFtZXRlcnMuICBUaGUgbmV3IGxheWVyIHdpbGwgYmUgYSBuZXcgWW9jdG8gbGF5ZXIgY29udGFpbmVkIGJ5CisgICAgZGVmYXVsdCB3aXRoaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgc3BlY2lmaWVkIGFzCisgICAgJ21ldGEtbGF5ZXItbmFtZScuICBUaGUgLW8gb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHBsYWNlIHRoZSBsYXllcgorICAgIGluIGEgZGlyZWN0b3J5IHdpdGggYSBkaWZmZXJlbnQgbmFtZSBhbmQgbG9jYXRpb24uCisKKyAgICBJZiBsYXllcl9wcmlvcml0eSBpcyBzcGVjaWZpZWQsIGEgc2ltcGxlIGxheWVyIHdpbGwgYmUgY3JlYXRlZAorICAgIHVzaW5nIHRoZSBnaXZlbiBsYXllciBwcmlvcml0eSwgYW5kIHRoZSB1c2VyIHdpbGwgbm90IGJlIHByb21wdGVkCisgICAgZm9yIGZ1cnRoZXIgaW5wdXQuCisKKyAgICBUaGUgbGF5ZXItc3BlY2lmaWMgcHJvcGVydGllcyB0aGF0IGRlZmluZSB0aGUgdmFsdWVzIHRoYXQgd2lsbCBiZQorICAgIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGxheWVyIGNhbiBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQtbGluZQorICAgIHVzaW5nIHRoZSAtaSBvcHRpb24gYW5kIHN1cHBseWluZyBhIEpTT04gb2JqZWN0IGNvbnNpc3Rpbmcgb2YgdGhlCisgICAgc2V0IG9mIG5hbWU6dmFsdWUgcGFpcnMgbmVlZGVkIGJ5IHRoZSBsYXllci4KKworICAgIElmIHRoZSAtaSBvcHRpb24gaXMgbm90IHVzZWQsIHRoZSB1c2VyIHdpbGwgYmUgaW50ZXJhY3RpdmVseQorICAgIHByb21wdGVkIGZvciBlYWNoIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0eSB2YWx1ZXMsIHdoaWNoIHdpbGwgdGhlbgorICAgIGJlIHVzZWQgYXMgdmFsdWVzIGZvciBsYXllciBnZW5lcmF0aW9uLgorCisgICAgVGhlIHNldCBvZiBwcm9wZXJ0aWVzIGF2YWlsYWJsZSBjYW4gYmUgbGlzdGVkIHVzaW5nIHRoZQorICAgICd5b2N0by1sYXllciBsaXN0JyBjb21tYW5kLgorCisgICAgU3BlY2lmeWluZyAtYyBjYXVzZXMgdGhlIFB5dGhvbiBjb2RlIGdlbmVyYXRlZCBhbmQgZXhlY3V0ZWQgdG8KKyAgICBjcmVhdGUgdGhlIGxheWVyIHRvIGJlIGR1bXBlZCB0byB0aGUgJ2JzcGdlbi5vdXQnIGZpbGUgaW4gdGhlCisgICAgY3VycmVudCBkaXJlY3RvcnksIGFuZCBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KKworICAgIE5PVEU6IE9uY2UgY3JlYXRlZCwgeW91IHNob3VsZCBhZGQgeW91ciBuZXcgbGF5ZXIgdG8geW91cgorICAgIGJibGF5ZXJzLmNvbmYgZmlsZSBpbiBvcmRlciBmb3IgaXQgdG8gYmUgc3Vic2VxdWVudGx5IHNlZW4gYW5kCisgICAgbW9kaWZpZWQgYnkgdGhlIHlvY3RvLWtlcm5lbCB0b29sLiAgSW5zdHJ1Y3Rpb25zIGZvciBkb2luZyB0aGlzCisgICAgY2FuIGJlIGZvdW5kIGluIHRoZSBSRUFETUUgZmlsZSBnZW5lcmF0ZWQgaW4gdGhlIGxheWVyJ3MgdG9wLWxldmVsCisgICAgZGlyZWN0b3J5LgorCisgICAgRm9yIGV4YW1wbGUsIGFzc3VtaW5nIHlvdXIgcG9reSByZXBvIGlzIGF0IC9wYXRoL3RvL3Bva3ksIHlvdXIgbmV3CisgICAgbGF5ZXIgaXMgYXQgL3BhdGgvdG8vcG9reS9tZXRhLW15bGF5ZXIsIGFuZCB5b3VyIGJ1aWxkIGRpcmVjdG9yeQorICAgIGlzIC9wYXRoL3RvL2J1aWxkOgorCisgICAgJCBnZWRpdCAvcGF0aC90by9idWlsZC9jb25mL2JibGF5ZXJzLmNvbmYKKworICAgIEJCTEFZRVJTID89ICIgXFwKKyAgICAgIC9wYXRoL3RvL3Bva3kvbWV0YSBcXAorICAgICAgL3BhdGgvdG8vcG9reS9tZXRhLXlvY3RvIFxcCisgICAgICAvcGF0aC90by9wb2t5L21ldGEtbXlsYXllciBcXAorICAgICAgIgorIiIiCisKK3lvY3RvX2xheWVyX2xpc3RfdXNhZ2UgPSAiIiIKKworIHVzYWdlOiB5b2N0by1sYXllciBsaXN0IHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICBbLW8gPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLW91dGZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisgICAgICAgIHlvY3RvLWxheWVyIGxpc3QgcHJvcGVydHkgPHh4eD4KKyAgICAgICAgICAgICAgICBbLW8gPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLW91dGZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisKKyBUaGlzIGNvbW1hbmQgZW51bWVyYXRlcyB0aGUgY29tcGxldGUgc2V0IG9mIHBvc3NpYmxlIHZhbHVlcyBmb3IgYQorIHNwZWNpZmllZCBvcHRpb24gb3IgcHJvcGVydHkgbmVlZGVkIGJ5IHRoZSBsYXllciBjcmVhdGlvbiBwcm9jZXNzLgorCisgVGhlIGZpcnN0IGZvcm0gZW51bWVyYXRlcyBhbGwgdGhlIHBvc3NpYmxlIHByb3BlcnRpZXMgdGhhdCBleGlzdCBhbmQKKyBtdXN0IGhhdmUgdmFsdWVzIHNwZWNpZmllZCBmb3IgdGhlbSBpbiB0aGUgJ3lvY3RvLWxheWVyIGNyZWF0ZScKKyBjb21tYW5kLgorCisgVGhlIHNlY29uZCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBwb3NzaWJsZSB2YWx1ZXMgdGhhdCBleGlzdCBhbmQgY2FuCisgYmUgc3BlY2lmaWVkIGZvciBhbnkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydGllcyBpbiB0aGUgJ3lvY3RvLWxheWVyCisgY3JlYXRlJyBjb21tYW5kLgorCisgU2VlICd5b2N0by1sYXllciBoZWxwIGxpc3QnIGZvciBtb3JlIGRldGFpbHMuCisiIiIKKworeW9jdG9fbGF5ZXJfbGlzdF9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1sYXllciBsaXN0IC0gTGlzdCBhdmFpbGFibGUgdmFsdWVzIGZvciBsYXllciBpbnB1dCBvcHRpb25zIGFuZCBwcm9wZXJ0aWVzCisKK1NZTk9QU0lTCisgICAgeW9jdG8tbGF5ZXIgbGlzdCBwcm9wZXJ0aWVzCisgICAgICAgICAgICBbLS1vIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLW91dGZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisgICAgeW9jdG8tbGF5ZXIgbGlzdCBwcm9wZXJ0eSA8eHh4PgorICAgICAgICAgICAgWy0tbyA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC1vdXRmaWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBlbnVtZXJhdGVzIHRoZSBjb21wbGV0ZSBzZXQgb2YgcG9zc2libGUgdmFsdWVzIGZvciBhCisgICAgc3BlY2lmaWVkIG9wdGlvbiBvciBwcm9wZXJ0eSBuZWVkZWQgYnkgdGhlIGxheWVyIGNyZWF0aW9uIHByb2Nlc3MuCisKKyAgICBUaGUgZmlyc3QgZm9ybSBlbnVtZXJhdGVzIGFsbCB0aGUgcG9zc2libGUgcHJvcGVydGllcyB0aGF0IGV4aXN0CisgICAgYW5kIG11c3QgaGF2ZSB2YWx1ZXMgc3BlY2lmaWVkIGZvciB0aGVtIGluIHRoZSAneW9jdG8tbGF5ZXIKKyAgICBjcmVhdGUnIGNvbW1hbmQuICBUaGlzIGNvbW1hbmQgaXMgbWFpbmx5IG1lYW50IHRvIGFpZCB0aGUKKyAgICBkZXZlbG9wbWVudCBvZiB1c2VyIGludGVyZmFjZSBhbHRlcm5hdGl2ZXMgdG8gdGhlIGRlZmF1bHQKKyAgICB0ZXh0LWJhc2VkIHByb21wdGluZyBpbnRlcmZhY2UuICBJZiB0aGUgLW8gb3B0aW9uIGlzIHNwZWNpZmllZCwKKyAgICB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzLCBpbiBhZGRpdGlvbiB0byBiZWluZyBkaXNwbGF5ZWQsIHdpbGwgYmUKKyAgICB3cml0dGVuIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSBhcyBhIEpTT04gb2JqZWN0LiAgSW4gdGhpcyBjYXNlLCB0aGUKKyAgICBvYmplY3Qgd2lsbCBjb25zaXN0IG9mIHRoZSBzZXQgb2YgbmFtZTp2YWx1ZSBwYWlycyBjb3JyZXNwb25kaW5nCisgICAgdG8gdGhlIChwb3NzaWJseSBuZXN0ZWQpIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBkZWZpbmVkIGJ5IHRoZQorICAgIGlucHV0IHN0YXRlbWVudHMgdXNlZCBieSB0aGUgQlNQLiAgU29tZSBleGFtcGxlIG91dHB1dCBmb3IgdGhlCisgICAgJ2xpc3QgcHJvcGVydGllcycgY29tbWFuZDoKKworICAgICQgeW9jdG8tbGF5ZXIgbGlzdCBwcm9wZXJ0aWVzCisgICAgImV4YW1wbGVfYmJhcHBlbmRfbmFtZSIgOiB7CisgICAgICAgICJkZWZhdWx0IiA6IGV4YW1wbGUKKyAgICAgICAgIm1zZyIgOiBQbGVhc2UgZW50ZXIgdGhlIG5hbWUgeW91J2QgbGlrZSB0byB1c2UgZm9yIHlvdXIgYmJhcHBlbmQgZmlsZToKKyAgICAgICAgInR5cGUiIDogZWRpdAorICAgICAgICAicHJpbyIgOiAyMAorICAgICAgICAiZmlsZW5hbWUiIDogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWxheWVyLWRldi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL2xheWVyLXF1ZXN0aW9ucy5ub2luc3RhbGwKKyAgICB9CisgICAgImNyZWF0ZV9leGFtcGxlX3JlY2lwZSIgOiB7CisgICAgICAgICJkZWZhdWx0IiA6IG4KKyAgICAgICAgIm1zZyIgOiBXb3VsZCB5b3UgbGlrZSB0byBoYXZlIGFuIGV4YW1wbGUgcmVjaXBlIGNyZWF0ZWQ/ICh5L24pCisgICAgICAgICJ0eXBlIiA6IGJvb2xlYW4KKyAgICAgICAgInByaW8iIDogMjAKKyAgICAgICAgImZpbGVuYW1lIiA6IC9ob21lL3Ryei95b2N0by95b2N0by1sYXllci1kZXYvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9sYXllci1xdWVzdGlvbnMubm9pbnN0YWxsCisgICAgfQorICAgICJleGFtcGxlX3JlY2lwZV9uYW1lIiA6IHsKKyAgICAgICAgImRlZmF1bHQiIDogZXhhbXBsZQorICAgICAgICAibXNnIiA6IFBsZWFzZSBlbnRlciB0aGUgbmFtZSB5b3UnZCBsaWtlIHRvIHVzZSBmb3IgeW91ciBleGFtcGxlIHJlY2lwZToKKyAgICAgICAgInR5cGUiIDogZWRpdAorICAgICAgICAicHJpbyIgOiAyMAorICAgICAgICAiZmlsZW5hbWUiIDogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWxheWVyLWRldi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL2xheWVyLXF1ZXN0aW9ucy5ub2luc3RhbGwKKyAgICB9CisgICAgImxheWVyX3ByaW9yaXR5IiA6IHsKKyAgICAgICAgImRlZmF1bHQiIDogNgorICAgICAgICAibXNnIiA6IFBsZWFzZSBlbnRlciB0aGUgbGF5ZXIgcHJpb3JpdHkgeW91J2QgbGlrZSB0byB1c2UgZm9yIHRoZSBsYXllcjoKKyAgICAgICAgInR5cGUiIDogZWRpdAorICAgICAgICAicHJpbyIgOiAyMAorICAgICAgICAiZmlsZW5hbWUiIDogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWxheWVyLWRldi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL2xheWVyLXF1ZXN0aW9ucy5ub2luc3RhbGwKKyAgICB9CisgICAgImNyZWF0ZV9leGFtcGxlX2JiYXBwZW5kIiA6IHsKKyAgICAgICAgImRlZmF1bHQiIDogbgorICAgICAgICAibXNnIiA6IFdvdWxkIHlvdSBsaWtlIHRvIGhhdmUgYW4gZXhhbXBsZSBiYmFwcGVuZCBmaWxlIGNyZWF0ZWQ/ICh5L24pCisgICAgICAgICJ0eXBlIiA6IGJvb2xlYW4KKyAgICAgICAgInByaW8iIDogMjAKKyAgICAgICAgImZpbGVuYW1lIiA6IC9ob21lL3Ryei95b2N0by95b2N0by1sYXllci1kZXYvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9sYXllci1xdWVzdGlvbnMubm9pbnN0YWxsCisgICAgfQorICAgICJleGFtcGxlX2JiYXBwZW5kX3ZlcnNpb24iIDogeworICAgICAgICAiZGVmYXVsdCIgOiAwLjEKKyAgICAgICAgIm1zZyIgOiBQbGVhc2UgZW50ZXIgdGhlIHZlcnNpb24gbnVtYmVyIHlvdSdkIGxpa2UgdG8gdXNlIGZvciB5b3VyIGJiYXBwZW5kIGZpbGUgKHRoaXMgc2hvdWxkIG1hdGNoIHRoZSByZWNpcGUgeW91J3JlIGFwcGVuZGluZyB0byk6CisgICAgICAgICJ0eXBlIiA6IGVkaXQKKyAgICAgICAgInByaW8iIDogMjAKKyAgICAgICAgImZpbGVuYW1lIiA6IC9ob21lL3Ryei95b2N0by95b2N0by1sYXllci1kZXYvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9sYXllci1xdWVzdGlvbnMubm9pbnN0YWxsCisgICAgfQorCisgICAgRWFjaCBlbnRyeSBpbiB0aGUgb3V0cHV0IGNvbnNpc3RzIG9mIHRoZSBuYW1lIG9mIHRoZSBpbnB1dCBlbGVtZW50CisgICAgZS5nLiAibGF5ZXJfcHJpb3JpdHkiLCBmb2xsb3dlZCBieSB0aGUgcHJvcGVydGllcyBkZWZpbmVkIGZvciB0aGF0CisgICAgZWxlbWVudCBlbmNsb3NlZCBpbiBicmFjZXMuICBUaGlzIGluZm9ybWF0aW9uIHNob3VsZCBwcm92aWRlCisgICAgc3VmZmljaWVudCBpbmZvcm1hdGlvbiB0byBjcmVhdGUgYSBjb21wbGV0ZSB1c2VyIGludGVyZmFjZS4gIFR3bworICAgIGZlYXR1cmVzIG9mIHRoZSBzY2hlbWUgcHJvdmlkZSBmb3IgY29uZGl0aW9uYWwgaW5wdXQuICBGaXJzdCwgaWYgYQorICAgIFB5dGhvbiAiaWYiIHN0YXRlbWVudCBhcHBlYXJzIGluIHBsYWNlIG9mIGFuIGlucHV0IGVsZW1lbnQgbmFtZSwKKyAgICB0aGUgc2V0IG9mIGVuY2xvc2VkIGlucHV0IGVsZW1lbnRzIGFwcGx5IGFuZCBzaG91bGQgYmUgcHJlc2VudGVkCisgICAgdG8gdGhlIHVzZXIgb25seSBpZiB0aGUgJ2lmJyBzdGF0ZW1lbnQgZXZhbHVhdGVzIHRvIHRydWUuICBUaGUKKyAgICB0ZXN0IGluIHRoZSBpZiBzdGF0ZW1lbnQgd2lsbCBhbHdheXMgcmVmZXJlbmNlIGFub3RoZXIgaW5wdXQKKyAgICBlbGVtZW50IGluIHRoZSBsaXN0LCB3aGljaCBtZWFucyB0aGF0IHRoZSBlbGVtZW50IGJlaW5nIHRlc3RlZAorICAgIHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgYmVmb3JlIHRoZSBlbGVtZW50cyBlbmNsb3NlZCBieQorICAgIHRoZSBpZiBibG9jay4gIFNlY29uZGx5LCBpbiBhIHNpbWlsYXIgd2F5LCBzb21lIGVsZW1lbnRzIGNvbnRhaW4KKyAgICAiZGVwZW5kcy1vbiIgYW5kIGRlcGVuZHMtb24tdmFsIiB0YWdzLCB3aGljaCBtZWFuIHRoYXQgdGhlCisgICAgYWZmZWN0ZWQgaW5wdXQgZWxlbWVudCBzaG91bGQgb25seSBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgaWYgdGhlCisgICAgZWxlbWVudCBpdCBkZXBlbmRzIG9uIGhhcyBhbHJlYWR5IGJlZW4gcHJlc2VudGVkIHRvIHRoZSB1c2VyIGFuZAorICAgIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZvciB0aGF0IGVsZW1lbnQuCisKKyAgICBUaGUgc2Vjb25kIGZvcm0gZW51bWVyYXRlcyBhbGwgdGhlIHBvc3NpYmxlIHZhbHVlcyB0aGF0IGV4aXN0IGFuZAorICAgIGNhbiBiZSBzcGVjaWZpZWQgZm9yIGFueSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGluIHRoZQorICAgICd5b2N0by1sYXllciBjcmVhdGUnIGNvbW1hbmQuICBJZiB0aGUgLW8gb3B0aW9uIGlzIHNwZWNpZmllZCwgdGhlCisgICAgbGlzdCBvZiB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSwgaW4gYWRkaXRpb24gdG8gYmVpbmcKKyAgICBkaXNwbGF5ZWQsIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgc3BlY2lmaWVkIGZpbGUgYXMgYSBKU09OIG9iamVjdC4KKyAgICBJbiB0aGlzIGNhc2UsIHRoZSBvYmplY3Qgd2lsbCBjb25zaXN0IG9mIHRoZSBzZXQgb2YgbmFtZTp2YWx1ZQorICAgIHBhaXJzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcyBhc3NvY2lhdGVkCisgICAgd2l0aCB0aGUgcHJvcGVydHkuCisKKyAgICAkIHlvY3RvLWxheWVyIGxpc3QgcHJvcGVydHkgbGF5ZXJfcHJpb3JpdHkKKyAgICAgW25vIG91dHB1dCAtIGxheWVyX3ByaW9yaXR5IGlzIGEgdGV4dCBmaWVsZCB0aGF0IGhhcyBubyBlbnVtZXJhYmxlIHZhbHVlc10KKworICAgIFRoZSBzZWNvbmQgZm9ybSBhcyB3ZWxsIGlzIG1lYW50IG1haW5seSBmb3IgZGV2ZWxvcGVycyBvZgorICAgIGFsdGVybmF0aXZlIGludGVyZmFjZXMgLSBpdCBhbGxvd3MgdGhlIGRldmVsb3BlciB0byBmZXRjaCB0aGUKKyAgICBwb3NzaWJsZSB2YWx1ZXMgZm9yIGEgZ2l2ZW4gaW5wdXQgZWxlbWVudCBvbi1kZW1hbmQuICBUaGlzCisgICAgb24tZGVtYW5kIGNhcGFiaWxpdHkgaXMgZXNwZWNpYWxseSB2YWx1YWJsZSBmb3IgZWxlbWVudHMgdGhhdAorICAgIHJlcXVpcmUgcmVsYXRpdmVseSBleHBlbnNpdmUgcmVtb3RlIG9wZXJhdGlvbnMgdG8gZnVsZmlsbCwgc3VjaCBhcworICAgIHRoZSBleGFtcGxlIHRoYXQgcmV0dXJucyB0aGUgc2V0IG9mIGJyYW5jaGVzIGF2YWlsYWJsZSBpbiBhIHJlbW90ZQorICAgIGdpdCB0cmVlIGFib3ZlLgorCisiIiIKKworIyMKKyMgdGVzdCBjb2RlCisjIworCit0ZXN0X2JzcF9wcm9wZXJ0aWVzID0geworICAgICdzbXAnOiAneWVzJywKKyAgICAndG91Y2hzY3JlZW4nOiAneWVzJywKKyAgICAna2V5Ym9hcmQnOiAnbm8nLAorICAgICd4c2VydmVyJzogJ3llcycsCisgICAgJ3hzZXJ2ZXJfY2hvaWNlJzogJ3hzZXJ2ZXItaTkxNScsCisgICAgJ2ZlYXR1cmVzJzogWydnb29kZmVhdHVyZScsICdncmVhdGZlYXR1cmUnXSwKKyAgICAndHVuZWZpbGUnOiAndHVuZS1xdWFyaycsCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2tlcm5lbC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2tlcm5lbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTY4YjYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Ava2VybmVsLnB5CkBAIC0wLDAgKzEsMTA3MSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIGtlcm5lbC1yZWxhdGVkIGZ1bmN0aW9ucyB1c2VkIGJ5CisjICd5b2N0by1rZXJuZWwnIHRvIG1hbmFnZSBrZXJuZWwgY29uZmlnIGl0ZW1zIGFuZCBwYXRjaGVzIGZvciBZb2N0bworIyBCU1BzLgorIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGludGVsLmNvbT4KKyMKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitmcm9tIHRhZ3MgaW1wb3J0ICoKK2ltcG9ydCBnbG9iCitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBlbmdpbmUgaW1wb3J0IGNyZWF0ZV9jb250ZXh0CisKKworZGVmIGZpbmRfYmJsYXllcnMoKToKKyAgICAiIiIKKyAgICBGaW5kIGFuZCByZXR1cm4gYSBzYW5pdGl6ZWQgbGlzdCBvZiB0aGUgbGF5ZXJzIGZvdW5kIGluIEJCTEFZRVJTLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgYnVpbGRkaXIgPSBvcy5lbnZpcm9uWyJCVUlMRERJUiJdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBwcmludCAiQlVJTERESVIgbm90IGZvdW5kLCBleGl0aW5nLiAoRGlkIHlvdSBmb3JnZXQgdG8gc291cmNlIG9lLWluaXQtYnVpbGQtZW52PykiCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgYmJsYXllcnNfY29uZiA9IG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpCisKKyAgICBsYXllcnMgPSBbXQorCisgICAgYml0YmFrZV9lbnZfY21kID0gImJpdGJha2UgLWUiCisgICAgYml0YmFrZV9lbnZfbGluZXMgPSBzdWJwcm9jZXNzLlBvcGVuKGJpdGJha2VfZW52X2NtZCwgc2hlbGw9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKQorCisgICAgaWYgbm90IGJpdGJha2VfZW52X2xpbmVzOgorICAgICAgICBwcmludCAiQ291bGRuJ3QgZ2V0ICclcycgb3V0cHV0LCBleGl0aW5nLiIgJSBiaXRiYWtlX2Vudl9jbWQKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGZvciBsaW5lIGluIGJpdGJha2VfZW52X2xpbmVzLnNwbGl0KCdcbicpOgorICAgICAgICBiYmxheWVycyA9IGdldF9saW5lX3ZhbChsaW5lLCAiQkJMQVlFUlMiKQorICAgICAgICBpZiAoYmJsYXllcnMpOgorICAgICAgICAgICAgYnJlYWsKKworICAgIGlmIG5vdCBiYmxheWVyczoKKyAgICAgICAgcHJpbnQgIkNvdWxkbid0IGZpbmQgQkJMQVlFUlMgaW4gJXMgb3V0cHV0LCBleGl0aW5nLiIgJSBcCisgICAgICAgICAgICBiaXRiYWtlX2Vudl9jbWQKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHJhd19sYXllcnMgPSBiYmxheWVycy5zcGxpdCgpCisKKyAgICBmb3IgbGF5ZXIgaW4gcmF3X2xheWVyczoKKyAgICAgICAgaWYgbGF5ZXIgPT0gJ0JCTEFZRVJTJyBvciAnPScgaW4gbGF5ZXI6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBsYXllcnMuYXBwZW5kKGxheWVyKQorCisgICAgcmV0dXJuIGxheWVycworCisKK2RlZiBnZXRfbGluZV92YWwobGluZSwga2V5KToKKyAgICAiIiIKKyAgICBFeHRyYWN0IHRoZSB2YWx1ZSBmcm9tIHRoZSBWQVI9InZhbCIgc3RyaW5nCisgICAgIiIiCisgICAgaWYgbGluZS5zdGFydHN3aXRoKGtleSArICI9Iik6CisgICAgICAgIHN0cmlwcGVkX2xpbmUgPSBsaW5lLnNwbGl0KCc9JylbMV0KKyAgICAgICAgc3RyaXBwZWRfbGluZSA9IHN0cmlwcGVkX2xpbmUucmVwbGFjZSgnXCInLCAnJykKKyAgICAgICAgcmV0dXJuIHN0cmlwcGVkX2xpbmUKKyAgICByZXR1cm4gTm9uZQorCisKK2RlZiBmaW5kX21ldGFfbGF5ZXIoKToKKyAgICAiIiIKKyAgICBGaW5kIGFuZCByZXR1cm4gdGhlIG1ldGEgbGF5ZXIgaW4gQkJMQVlFUlMuCisgICAgIiIiCisgICAgbGF5ZXJzID0gZmluZF9iYmxheWVycygpCisKKyAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgorICAgICAgICBpZiBsYXllci5lbmRzd2l0aCgibWV0YSIpOgorICAgICAgICAgICAgcmV0dXJuIGxheWVyCisKKyAgICByZXR1cm4gTm9uZQorCisKK2RlZiBmaW5kX2JzcF9sYXllcihtYWNoaW5lKToKKyAgICAiIiIKKyAgICBGaW5kIGFuZCByZXR1cm4gYSBtYWNoaW5lJ3MgQlNQIGxheWVyIGluIEJCTEFZRVJTLgorICAgICIiIgorICAgIGxheWVycyA9IGZpbmRfYmJsYXllcnMoKQorCisgICAgZm9yIGxheWVyIGluIGxheWVyczoKKyAgICAgICAgaWYgbGF5ZXIuZW5kc3dpdGgobWFjaGluZSk6CisgICAgICAgICAgICByZXR1cm4gbGF5ZXIKKworICAgIHByaW50ICJVbmFibGUgdG8gZmluZCB0aGUgQlNQIGxheWVyIGZvciBtYWNoaW5lICVzLiIgJSBtYWNoaW5lCisgICAgcHJpbnQgIlBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgbGlzdGVkIGluIGJibGF5ZXJzLmNvbmYiCisgICAgc3lzLmV4aXQoMSkKKworCitkZWYgZ2VuX2Nob2ljZXNfc3RyKGNob2ljZXMpOgorICAgICIiIgorICAgIEdlbmVyYXRlIGEgbnVtYmVyZWQgbGlzdCBvZiBjaG9pY2VzIGZyb20gYSBsaXN0IG9mIGNob2ljZXMgZm9yCisgICAgZGlzcGxheSB0byB0aGUgdXNlci4KKyAgICAiIiIKKyAgICBjaG9pY2VzX3N0ciA9ICIiCisKKyAgICBmb3IgaSwgY2hvaWNlIGluIGVudW1lcmF0ZShjaG9pY2VzKToKKyAgICAgICAgY2hvaWNlc19zdHIgKz0gIlx0IiArIHN0cihpICsgMSkgKyAiKSAiICsgY2hvaWNlICsgIlxuIgorCisgICAgcmV0dXJuIGNob2ljZXNfc3RyCisKKworZGVmIG9wZW5fdXNlcl9maWxlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgdXNlcmZpbGUsIG1vZGUpOgorICAgICIiIgorICAgIEZpbmQgb25lIG9mIHRoZSB1c2VyIGZpbGVzICh1c2VyLWNvbmZpZy5jZmcsIHVzZXItcGF0Y2hlcy5zY2MpCisgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYWNoaW5lIChjb3VsZCBiZSBpbiBmaWxlcy8sCisgICAgbGludXgteW9jdG8tY3VzdG9tLywgZXRjKS4gIFJldHVybnMgdGhlIG9wZW4gZmlsZSBpZiBmb3VuZCwgTm9uZQorICAgIG90aGVyd2lzZS4KKworICAgIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNsb3NpbmcgdGhlIGZpbGUgcmV0dXJuZWQuCisgICAgIiIiCisgICAgbGF5ZXIgPSBmaW5kX2JzcF9sYXllcihtYWNoaW5lKQorICAgIGxpbnV4ZGlyID0gb3MucGF0aC5qb2luKGxheWVyLCAicmVjaXBlcy1rZXJuZWwvbGludXgiKQorICAgIGxpbnV4ZGlyX2xpc3QgPSBvcy5saXN0ZGlyKGxpbnV4ZGlyKQorICAgIGZvciBmaWxlb2JqIGluIGxpbnV4ZGlyX2xpc3Q6CisgICAgICAgIGZpbGVvYmpfcGF0aCA9IG9zLnBhdGguam9pbihsaW51eGRpciwgZmlsZW9iaikKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmaWxlb2JqX3BhdGgpOgorICAgICAgICAgICAgdXNlcmZpbGVfbmFtZSA9IG9zLnBhdGguam9pbihmaWxlb2JqX3BhdGgsIHVzZXJmaWxlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYgPSBvcGVuKHVzZXJmaWxlX25hbWUsIG1vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgcmVhZF9jb25maWdfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBGaW5kIGFuZCByZXR1cm4gYSBsaXN0IG9mIGNvbmZpZyBpdGVtcyAoQ09ORklHX1hYWCkgaW4gYSBtYWNoaW5lJ3MKKyAgICB1c2VyLWRlZmluZWQgY29uZmlnIGZyYWdtZW50IFske21hY2hpbmV9LXVzZXItY29uZmlnLmNmZ10uCisgICAgIiIiCisgICAgY29uZmlnX2l0ZW1zID0gW10KKworICAgIGYgPSBvcGVuX3VzZXJfZmlsZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIG1hY2hpbmUrIi11c2VyLWNvbmZpZy5jZmciLCAiciIpCisgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgIHMgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgcyBhbmQgbm90IHMuc3RhcnRzd2l0aCgiIyIpOgorICAgICAgICAgICAgY29uZmlnX2l0ZW1zLmFwcGVuZChzKQorICAgIGYuY2xvc2UoKQorCisgICAgcmV0dXJuIGNvbmZpZ19pdGVtcworCisKK2RlZiB3cml0ZV9jb25maWdfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBjb25maWdfaXRlbXMpOgorICAgICIiIgorICAgIFdyaXRlIChyZXBsYWNlKSB0aGUgbGlzdCBvZiBjb25maWcgaXRlbXMgKENPTkZJR19YWFgpIGluIGEKKyAgICBtYWNoaW5lJ3MgdXNlci1kZWZpbmVkIGNvbmZpZyBmcmFnbWVudCBbJHttYWNoaW5lfT11c2VyLWNvbmZpZy5jZmddLgorICAgICIiIgorICAgIGYgPSBvcGVuX3VzZXJfZmlsZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIG1hY2hpbmUrIi11c2VyLWNvbmZpZy5jZmciLCAidyIpCisgICAgZm9yIGl0ZW0gaW4gY29uZmlnX2l0ZW1zOgorICAgICAgICBmLndyaXRlKGl0ZW0gKyAiXG4iKQorICAgIGYuY2xvc2UoKQorCisgICAga2VybmVsX2NvbnRlbnRzX2NoYW5nZWQoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisKK2RlZiB5b2N0b19rZXJuZWxfY29uZmlnX2xpc3Qoc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBEaXNwbGF5IHRoZSBsaXN0IG9mIGNvbmZpZyBpdGVtcyAoQ09ORklHX1hYWCkgaW4gYSBtYWNoaW5lJ3MKKyAgICB1c2VyLWRlZmluZWQgY29uZmlnIGZyYWdtZW50IFske21hY2hpbmV9LXVzZXItY29uZmlnLmNmZ10uCisgICAgIiIiCisgICAgY29uZmlnX2l0ZW1zID0gcmVhZF9jb25maWdfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisgICAgcHJpbnQgIlRoZSBjdXJyZW50IHNldCBvZiBtYWNoaW5lLXNwZWNpZmljIGtlcm5lbCBjb25maWcgaXRlbXMgZm9yICVzIGlzOiIgJSBtYWNoaW5lCisgICAgcHJpbnQgZ2VuX2Nob2ljZXNfc3RyKGNvbmZpZ19pdGVtcykKKworCitkZWYgeW9jdG9fa2VybmVsX2NvbmZpZ19ybShzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgorICAgICIiIgorICAgIERpc3BsYXkgdGhlIGxpc3Qgb2YgY29uZmlnIGl0ZW1zIChDT05GSUdfWFhYKSBpbiBhIG1hY2hpbmUncworICAgIHVzZXItZGVmaW5lZCBjb25maWcgZnJhZ21lbnQgWyR7bWFjaGluZX0tdXNlci1jb25maWcuY2ZnXSwgcHJvbXB0IHRoZSB1c2VyCisgICAgZm9yIG9uZSBvciBtb3JlIHRvIHJlbW92ZSwgYW5kIHJlbW92ZSB0aGVtLgorICAgICIiIgorICAgIGNvbmZpZ19pdGVtcyA9IHJlYWRfY29uZmlnX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKworICAgIHByaW50ICJTcGVjaWZ5IHRoZSBrZXJuZWwgY29uZmlnIGl0ZW1zIHRvIHJlbW92ZToiCisgICAgaW5wdXQgPSByYXdfaW5wdXQoZ2VuX2Nob2ljZXNfc3RyKGNvbmZpZ19pdGVtcykpCisgICAgcm1fY2hvaWNlcyA9IGlucHV0LnNwbGl0KCkKKyAgICBybV9jaG9pY2VzLnNvcnQoKQorCisgICAgcmVtb3ZlZCA9IFtdCisKKyAgICBmb3IgY2hvaWNlIGluIHJldmVyc2VkKHJtX2Nob2ljZXMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZHggPSBpbnQoY2hvaWNlKSAtIDEKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwcmludCAiSW52YWxpZCBjaG9pY2UgKCVzKSwgZXhpdGluZyIgJSBjaG9pY2UKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGlmIGlkeCA8IDAgb3IgaWR4ID49IGxlbihjb25maWdfaXRlbXMpOgorICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgY2hvaWNlICglZCksIGV4aXRpbmciICUgKGlkeCArIDEpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICByZW1vdmVkLmFwcGVuZChjb25maWdfaXRlbXMucG9wKGlkeCkpCisKKyAgICB3cml0ZV9jb25maWdfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBjb25maWdfaXRlbXMpCisKKyAgICBwcmludCAiUmVtb3ZlZCBpdGVtczoiCisgICAgZm9yIHIgaW4gcmVtb3ZlZDoKKyAgICAgICAgcHJpbnQgIlx0JXMiICUgcgorCisKK2RlZiB5b2N0b19rZXJuZWxfY29uZmlnX2FkZChzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGNvbmZpZ19pdGVtcyk6CisgICAgIiIiCisgICAgQWRkIG9uZSBvciBtb3JlIGNvbmZpZyBpdGVtcyAoQ09ORklHX1hYWCkgdG8gYSBtYWNoaW5lJ3MKKyAgICB1c2VyLWRlZmluZWQgY29uZmlnIGZyYWdtZW50IFske21hY2hpbmV9LXVzZXItY29uZmlnLmNmZ10uCisgICAgIiIiCisgICAgbmV3X2l0ZW1zID0gW10KKyAgICBkdXBfaXRlbXMgPSBbXQorCisgICAgY3VyX2l0ZW1zID0gcmVhZF9jb25maWdfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisgICAgZm9yIGl0ZW0gaW4gY29uZmlnX2l0ZW1zOgorICAgICAgICBpZiBub3QgaXRlbS5zdGFydHN3aXRoKCJDT05GSUciKSBvciAobm90ICI9eSIgaW4gaXRlbSBhbmQgbm90ICI9bSIgaW4gaXRlbSk6CisgICAgICAgICAgICBwcmludCAiSW52YWxpZCBjb25maWcgaXRlbSAoJXMpLCBleGl0aW5nIiAlIGl0ZW0KKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGlmIGl0ZW0gbm90IGluIGN1cl9pdGVtcyBhbmQgaXRlbSBub3QgaW4gbmV3X2l0ZW1zOgorICAgICAgICAgICAgbmV3X2l0ZW1zLmFwcGVuZChpdGVtKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZHVwX2l0ZW1zLmFwcGVuZChpdGVtKQorCisgICAgaWYgbGVuKG5ld19pdGVtcykgPiAwOgorICAgICAgICBjdXJfaXRlbXMuZXh0ZW5kKG5ld19pdGVtcykKKyAgICAgICAgd3JpdGVfY29uZmlnX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgY3VyX2l0ZW1zKQorICAgICAgICBwcmludCAiQWRkZWQgaXRlbSVzOiIgJSAoIiIgaWYgbGVuKG5ld19pdGVtcyk9PTEgZWxzZSAicyIpCisgICAgICAgIGZvciBuIGluIG5ld19pdGVtczoKKyAgICAgICAgICAgIHByaW50ICJcdCVzIiAlIG4KKworICAgIGlmIGxlbihkdXBfaXRlbXMpID4gMDoKKyAgICAgICAgb3V0cHV0PSJUaGUgZm9sbG93aW5nIGl0ZW0lcyBhbHJlYWR5IGV4aXN0JXMgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgaWdub3JpbmcgJXM6IiAlIFwKKyAgICAgICAgICAgICgoIiIsInMiLCAiaXQiKSBpZiBsZW4oZHVwX2l0ZW1zKT09MSBlbHNlICgicyIsICIiLCAidGhlbSIgKSkKKyAgICAgICAgcHJpbnQgb3V0cHV0CisgICAgICAgIGZvciBuIGluIGR1cF9pdGVtczoKKyAgICAgICAgICAgIHByaW50ICJcdCVzIiAlIG4KKworZGVmIGZpbmRfY3VycmVudF9rZXJuZWwoYnNwX2xheWVyLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBEZXRlcm1pbmUgdGhlIGtlcm5lbCBhbmQgdmVyc2lvbiBjdXJyZW50bHkgYmVpbmcgdXNlZCBpbiB0aGUgQlNQLgorICAgICIiIgorICAgIG1hY2hpbmVfY29uZiA9IG9zLnBhdGguam9pbihic3BfbGF5ZXIsICJjb25mL21hY2hpbmUvIiArIG1hY2hpbmUgKyAiLmNvbmYiKQorCisgICAgcHJlZmVycmVkX2tlcm5lbCA9IHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbiA9IHByZWZlcnJlZF92ZXJzaW9uX3Zhcm5hbWUgPSBOb25lCisKKyAgICBmID0gb3BlbihtYWNoaW5lX2NvbmYsICJyIikKKyAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgaWYgbGluZS5zdHJpcCgpLnN0YXJ0c3dpdGgoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCIpOgorICAgICAgICAgICAgcHJlZmVycmVkX2tlcm5lbCA9IGxpbmUuc3BsaXQoKVstMV0KKyAgICAgICAgICAgIHByZWZlcnJlZF9rZXJuZWwgPSBwcmVmZXJyZWRfa2VybmVsLnJlcGxhY2UoJ1wiJywnJykKKyAgICAgICAgICAgIHByZWZlcnJlZF92ZXJzaW9uX3Zhcm5hbWUgPSAiUFJFRkVSUkVEX1ZFUlNJT05fIiArIHByZWZlcnJlZF9rZXJuZWwKKyAgICAgICAgaWYgcHJlZmVycmVkX3ZlcnNpb25fdmFybmFtZSBhbmQgbGluZS5zdHJpcCgpLnN0YXJ0c3dpdGgocHJlZmVycmVkX3ZlcnNpb25fdmFybmFtZSk6CisgICAgICAgICAgICBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24gPSBsaW5lLnNwbGl0KClbLTFdCisgICAgICAgICAgICBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24gPSBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24ucmVwbGFjZSgnXCInLCcnKQorICAgICAgICAgICAgcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uID0gcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uLnJlcGxhY2UoJyUnLCcnKQorCisgICAgaWYgcHJlZmVycmVkX2tlcm5lbCBhbmQgcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uOgorICAgICAgICByZXR1cm4gcHJlZmVycmVkX2tlcm5lbCArICJfIiArIHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbgorICAgIGVsaWYgcHJlZmVycmVkX2tlcm5lbDoKKyAgICAgICAgcmV0dXJuIHByZWZlcnJlZF9rZXJuZWwKKworCitkZWYgZmluZF9maWxlc2RpcihzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgorICAgICIiIgorICAgIEZpbmQgdGhlIG5hbWUgb2YgdGhlICdmaWxlcycgZGlyIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFjaGluZQorICAgIChjb3VsZCBiZSBpbiBmaWxlcy8sIGxpbnV4LXlvY3RvLWN1c3RvbS8sIGV0YykuICBSZXR1cm5zIHRoZSBuYW1lCisgICAgb2YgdGhlIGZpbGVzIGRpciBpZiBmb3VuZCwgTm9uZSBvdGhlcndpc2UuCisgICAgIiIiCisgICAgbGF5ZXIgPSBmaW5kX2JzcF9sYXllcihtYWNoaW5lKQorICAgIGZpbGVzZGlyID0gTm9uZQorICAgIGxpbnV4ZGlyID0gb3MucGF0aC5qb2luKGxheWVyLCAicmVjaXBlcy1rZXJuZWwvbGludXgiKQorICAgIGxpbnV4ZGlyX2xpc3QgPSBvcy5saXN0ZGlyKGxpbnV4ZGlyKQorICAgIGZvciBmaWxlb2JqIGluIGxpbnV4ZGlyX2xpc3Q6CisgICAgICAgIGZpbGVvYmpfcGF0aCA9IG9zLnBhdGguam9pbihsaW51eGRpciwgZmlsZW9iaikKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmaWxlb2JqX3BhdGgpOgorICAgICAgICAgICAgIyB0aGlzIGNvdWxkIGJlIGZpbGVzLyBvciBsaW51eC15b2N0by1jdXN0b20vLCB3ZSBoYXZlIG5vIHdheSBvZiBkaXN0aW5ndWlzaGluZworICAgICAgICAgICAgIyBzbyB3ZSB0YWtlIHRoZSBmaXJzdCAoYW5kIG5vcm1hbGx5IG9ubHkpIGRpciB3ZSBmaW5kIGFzIHRoZSAnZmlsZXNkaXInCisgICAgICAgICAgICBmaWxlc2RpciA9IGZpbGVvYmpfcGF0aAorCisgICAgcmV0dXJuIGZpbGVzZGlyCisKKworZGVmIHJlYWRfcGF0Y2hfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBGaW5kIGFuZCByZXR1cm4gYSBsaXN0IG9mIHBhdGNoIGl0ZW1zIGluIGEgbWFjaGluZSdzIHVzZXItZGVmaW5lZAorICAgIHBhdGNoIGxpc3QgWyR7bWFjaGluZX0tdXNlci1wYXRjaGVzLnNjY10uCisgICAgIiIiCisgICAgcGF0Y2hfaXRlbXMgPSBbXQorCisgICAgZiA9IG9wZW5fdXNlcl9maWxlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgbWFjaGluZSsiLXVzZXItcGF0Y2hlcy5zY2MiLCAiciIpCisgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgIHMgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgcyBhbmQgbm90IHMuc3RhcnRzd2l0aCgiIyIpOgorICAgICAgICAgICAgZmllbGRzID0gcy5zcGxpdCgpCisgICAgICAgICAgICBpZiBub3QgZmllbGRzWzBdID09ICJwYXRjaCI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHBhdGNoX2l0ZW1zLmFwcGVuZChmaWVsZHNbMV0pCisgICAgZi5jbG9zZSgpCisKKyAgICByZXR1cm4gcGF0Y2hfaXRlbXMKKworCitkZWYgd3JpdGVfcGF0Y2hfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBwYXRjaF9pdGVtcyk6CisgICAgIiIiCisgICAgV3JpdGUgKHJlcGxhY2UpIHRoZSBsaXN0IG9mIHBhdGNoZXMgaW4gYSBtYWNoaW5lJ3MgdXNlci1kZWZpbmVkCisgICAgcGF0Y2ggbGlzdCBbJHttYWNoaW5lfS11c2VyLXBhdGNoZXMuc2NjXS4KKyAgICAiIiIKKyAgICBmID0gb3Blbl91c2VyX2ZpbGUoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBtYWNoaW5lKyItdXNlci1wYXRjaGVzLnNjYyIsICJ3IikKKyAgICBmb3IgaXRlbSBpbiBwYXRjaF9pdGVtczoKKyAgICAgICAgZi53cml0ZSgicGF0Y2ggIiArIGl0ZW0gKyAiXG4iKQorICAgIGYuY2xvc2UoKQorCisgICAga2VybmVsX2NvbnRlbnRzX2NoYW5nZWQoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisKK2RlZiB5b2N0b19rZXJuZWxfcGF0Y2hfbGlzdChzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgorICAgICIiIgorICAgIERpc3BsYXkgdGhlIGxpc3Qgb2YgcGF0Y2hlcyBpbiBhIG1hY2hpbmUncyB1c2VyLWRlZmluZWQgcGF0Y2ggbGlzdAorICAgIFske21hY2hpbmV9LXVzZXItcGF0Y2hlcy5zY2NdLgorICAgICIiIgorICAgIHBhdGNoZXMgPSByZWFkX3BhdGNoX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKworICAgIHByaW50ICJUaGUgY3VycmVudCBzZXQgb2YgbWFjaGluZS1zcGVjaWZpYyBwYXRjaGVzIGZvciAlcyBpczoiICUgbWFjaGluZQorICAgIHByaW50IGdlbl9jaG9pY2VzX3N0cihwYXRjaGVzKQorCisKK2RlZiB5b2N0b19rZXJuZWxfcGF0Y2hfcm0oc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBSZW1vdmUgb25lIG9yIG1vcmUgcGF0Y2hlcyBmcm9tIGEgbWFjaGluZSdzIHVzZXItZGVmaW5lZCBwYXRjaAorICAgIGxpc3QgWyR7bWFjaGluZX0tdXNlci1wYXRjaGVzLnNjY10uCisgICAgIiIiCisgICAgcGF0Y2hlcyA9IHJlYWRfcGF0Y2hfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisgICAgcHJpbnQgIlNwZWNpZnkgdGhlIHBhdGNoZXMgdG8gcmVtb3ZlOiIKKyAgICBpbnB1dCA9IHJhd19pbnB1dChnZW5fY2hvaWNlc19zdHIocGF0Y2hlcykpCisgICAgcm1fY2hvaWNlcyA9IGlucHV0LnNwbGl0KCkKKyAgICBybV9jaG9pY2VzLnNvcnQoKQorCisgICAgcmVtb3ZlZCA9IFtdCisKKyAgICBmaWxlc2RpciA9IGZpbmRfZmlsZXNkaXIoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorICAgIGlmIG5vdCBmaWxlc2RpcjoKKyAgICAgICAgcHJpbnQgIkNvdWxkbid0IHJtIHBhdGNoKGVzKSBzaW5jZSB3ZSBjb3VsZG4ndCBmaW5kIGEgJ2ZpbGVzJyBkaXIiCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmb3IgY2hvaWNlIGluIHJldmVyc2VkKHJtX2Nob2ljZXMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZHggPSBpbnQoY2hvaWNlKSAtIDEKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwcmludCAiSW52YWxpZCBjaG9pY2UgKCVzKSwgZXhpdGluZyIgJSBjaG9pY2UKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGlmIGlkeCA8IDAgb3IgaWR4ID49IGxlbihwYXRjaGVzKToKKyAgICAgICAgICAgIHByaW50ICJJbnZhbGlkIGNob2ljZSAoJWQpLCBleGl0aW5nIiAlIChpZHggKyAxKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgZmlsZXNkaXJfcGF0Y2ggPSBvcy5wYXRoLmpvaW4oZmlsZXNkaXIsIHBhdGNoZXNbaWR4XSkKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZXNkaXJfcGF0Y2gpOgorICAgICAgICAgICAgb3MucmVtb3ZlKGZpbGVzZGlyX3BhdGNoKQorICAgICAgICByZW1vdmVkLmFwcGVuZChwYXRjaGVzW2lkeF0pCisgICAgICAgIHBhdGNoZXMucG9wKGlkeCkKKworICAgIHdyaXRlX3BhdGNoX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgcGF0Y2hlcykKKworICAgIHByaW50ICJSZW1vdmVkIHBhdGNoZXM6IgorICAgIGZvciByIGluIHJlbW92ZWQ6CisgICAgICAgIHByaW50ICJcdCVzIiAlIHIKKworCitkZWYgeW9jdG9fa2VybmVsX3BhdGNoX2FkZChzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIHBhdGNoZXMpOgorICAgICIiIgorICAgIEFkZCBvbmUgb3IgbW9yZSBwYXRjaGVzIHRvIGEgbWFjaGluZSdzIHVzZXItZGVmaW5lZCBwYXRjaCBsaXN0CisgICAgWyR7bWFjaGluZX0tdXNlci1wYXRjaGVzLnNjY10uCisgICAgIiIiCisgICAgZXhpc3RpbmdfcGF0Y2hlcyA9IHJlYWRfcGF0Y2hfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CisgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpIGluIGV4aXN0aW5nX3BhdGNoZXM6CisgICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgYWRkIHBhdGNoICglcykgc2luY2UgaXQncyBhbHJlYWR5IGJlZW4gYWRkZWQiICUgb3MucGF0aC5iYXNlbmFtZShwYXRjaCkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmaWxlc2RpciA9IGZpbmRfZmlsZXNkaXIoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorICAgIGlmIG5vdCBmaWxlc2RpcjoKKyAgICAgICAgcHJpbnQgIkNvdWxkbid0IGFkZCBwYXRjaCAoJXMpIHNpbmNlIHdlIGNvdWxkbid0IGZpbmQgYSAnZmlsZXMnIGRpciB0byBhZGQgaXQgdG8iICUgb3MucGF0aC5iYXNlbmFtZShwYXRjaCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIG5ld19wYXRjaGVzID0gW10KKworICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUocGF0Y2gpOgorICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IGZpbmQgcGF0Y2ggKCVzKSwgZXhpdGluZyIgJSBwYXRjaAorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKQorICAgICAgICBmaWxlc2Rpcl9wYXRjaCA9IG9zLnBhdGguam9pbihmaWxlc2RpciwgYmFzZW5hbWUpCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShwYXRjaCwgZmlsZXNkaXJfcGF0Y2gpCisgICAgICAgIG5ld19wYXRjaGVzLmFwcGVuZChiYXNlbmFtZSkKKworICAgIGN1cl9pdGVtcyA9IHJlYWRfcGF0Y2hfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorICAgIGN1cl9pdGVtcy5leHRlbmQobmV3X3BhdGNoZXMpCisgICAgd3JpdGVfcGF0Y2hfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBjdXJfaXRlbXMpCisKKyAgICBwcmludCAiQWRkZWQgcGF0Y2hlczoiCisgICAgZm9yIG4gaW4gbmV3X3BhdGNoZXM6CisgICAgICAgIHByaW50ICJcdCVzIiAlIG4KKworCitkZWYgaW5jX3ByKGxpbmUpOgorICAgICIiIgorICAgIEFkZCAxIHRvIHRoZSBQUiB2YWx1ZSBpbiB0aGUgZ2l2ZW4gYmJhcHBlbmQgUFIgbGluZS4gIEZvciB0aGUgUFIKKyAgICBsaW5lcyBpbiBrZXJuZWwgLmJiYXBwZW5kcyBhZnRlciBtb2RpZmljYXRpb25zLiAgSGFuZGxlcyBQUnMgb2YKKyAgICB0aGUgZm9ybSBQUiA6PSAiJHtQUn0uMSIgYXMgd2VsbCBhcyBQUiA9ICJyMCIuCisgICAgIiIiCisgICAgaWR4ID0gbGluZS5maW5kKCJcIiIpCisKKyAgICBwcl9zdHIgPSBsaW5lW2lkeDpdCisgICAgcHJfc3RyID0gcHJfc3RyLnJlcGxhY2UoJ1wiJywnJykKKyAgICBmaWVsZHMgPSBwcl9zdHIuc3BsaXQoJy4nKQorICAgIGlmIGxlbihmaWVsZHMpID4gMToKKyAgICAgICAgZmllbGRzWzFdID0gc3RyKGludChmaWVsZHNbMV0pICsgMSkKKyAgICAgICAgcHJfc3RyID0gIlwiIiArICcuJy5qb2luKGZpZWxkcykgKyAiXCJcbiIKKyAgICBlbHNlOgorICAgICAgICBwcl92YWwgPSBwcl9zdHJbMTpdCisgICAgICAgIHByX3N0ciA9ICJcIiIgKyAiciIgKyBzdHIoaW50KHByX3ZhbCkgKyAxKSArICJcIlxuIgorICAgIGlkeDIgPSBsaW5lLmZpbmQoIlwiIiwgaWR4ICsgMSkKKyAgICBsaW5lID0gbGluZVs6aWR4XSArIHByX3N0cgorICAgIAorICAgIHJldHVybiBsaW5lCisKKworZGVmIGtlcm5lbF9jb250ZW50c19jaGFuZ2VkKHNjcmlwdHNfcGF0aCwgbWFjaGluZSk6CisgICAgIiIiCisgICAgRG8gd2hhdCB3ZSBuZWVkIHRvIGRvIHRvIG5vdGlmeSB0aGUgc3lzdGVtIHRoYXQgdGhlIGtlcm5lbAorICAgIHJlY2lwZSdzIGNvbnRlbnRzIGhhdmUgY2hhbmdlZC4KKyAgICAiIiIKKyAgICBsYXllciA9IGZpbmRfYnNwX2xheWVyKG1hY2hpbmUpCisKKyAgICBrZXJuZWwgPSBmaW5kX2N1cnJlbnRfa2VybmVsKGxheWVyLCBtYWNoaW5lKQorICAgIGlmIG5vdCBrZXJuZWw6CisgICAgICAgIHByaW50ICJDb3VsZG4ndCBkZXRlcm1pbmUgdGhlIGtlcm5lbCBmb3IgdGhpcyBCU1AsIGV4aXRpbmcuIgorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAga2VybmVsX2JiZmlsZSA9IG9zLnBhdGguam9pbihsYXllciwgInJlY2lwZXMta2VybmVsL2xpbnV4LyIgKyBrZXJuZWwgKyAiLmJiYXBwZW5kIikKKyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoa2VybmVsX2JiZmlsZSk6CisgICAgICAgIGtlcm5lbF9iYmZpbGUgPSBvcy5wYXRoLmpvaW4obGF5ZXIsICJyZWNpcGVzLWtlcm5lbC9saW51eC8iICsga2VybmVsICsgIi5iYiIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShrZXJuZWxfYmJmaWxlKToKKyAgICAgICAgICAgIHJldHVybgorICAgIGtlcm5lbF9iYmZpbGVfcHJldiA9IGtlcm5lbF9iYmZpbGUgKyAiLnByZXYiCisgICAgc2h1dGlsLmNvcHlmaWxlKGtlcm5lbF9iYmZpbGUsIGtlcm5lbF9iYmZpbGVfcHJldikKKworICAgIGlmaWxlID0gb3BlbihrZXJuZWxfYmJmaWxlX3ByZXYsICJyIikKKyAgICBvZmlsZSA9IG9wZW4oa2VybmVsX2JiZmlsZSwgInciKQorICAgIGlmaWxlX2xpbmVzID0gaWZpbGUucmVhZGxpbmVzKCkKKyAgICBmb3IgaWZpbGVfbGluZSBpbiBpZmlsZV9saW5lczoKKyAgICAgICAgaWYgaWZpbGVfbGluZS5zdHJpcCgpLnN0YXJ0c3dpdGgoIlBSIik6CisgICAgICAgICAgICBpZmlsZV9saW5lID0gaW5jX3ByKGlmaWxlX2xpbmUpCisgICAgICAgIG9maWxlLndyaXRlKGlmaWxlX2xpbmUpCisgICAgb2ZpbGUuY2xvc2UoKQorICAgIGlmaWxlLmNsb3NlKCkKKworCitkZWYga2VybmVscyhjb250ZXh0KToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGtlcm5lbHMgaW4gdGhlIEJTUCBpLmUuIGNvcnJlc3BvbmRpbmcKKyAgICB0byB0aGUga2VybmVsIC5iYmFwcGVuZHMgZm91bmQgaW4gdGhlIGxheWVyLgorICAgICIiIgorICAgIGFyY2hkaXIgPSBvcy5wYXRoLmpvaW4oY29udGV4dFsic2NyaXB0c19wYXRoIl0sICJsaWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC8iICsgY29udGV4dFsiYXJjaCJdKQorICAgIGtlcm5kaXIgPSBvcy5wYXRoLmpvaW4oYXJjaGRpciwgInJlY2lwZXMta2VybmVsL2xpbnV4IikKKyAgICBiYmdsb2IgPSBvcy5wYXRoLmpvaW4oa2VybmRpciwgIiouYmJhcHBlbmQiKQorCisgICAgYmJhcHBlbmRzID0gZ2xvYi5nbG9iKGJiZ2xvYikKKworICAgIGtlcm5lbHMgPSBbXQorCisgICAgZm9yIGtlcm5lbCBpbiBiYmFwcGVuZHM6CisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGtlcm5lbCkpWzBdCisgICAgICAgIGlkeCA9IGZpbGVuYW1lLmZpbmQoQ0xPU0VfVEFHKQorICAgICAgICBpZiBpZHggIT0gLTE6CisgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lW2lkeCArIGxlbihDTE9TRV9UQUcpOl0uc3RyaXAoKQorICAgICAgICBrZXJuZWxzLmFwcGVuZChmaWxlbmFtZSkKKworICAgIGtlcm5lbHMuYXBwZW5kKCJjdXN0b20iKQorCisgICAgcmV0dXJuIGtlcm5lbHMKKworCitkZWYgZXh0cmFjdF9naXR1cmwoZmlsZSk6CisgICAgIiIiCisgICAgRXh0cmFjdCB0aGUgZ2l0IHVybCBvZiB0aGUga2VybmVsIHJlcG8gZnJvbSB0aGUga2VybmVsIHJlY2lwZSdzCisgICAgU1JDX1VSSS4KKyAgICAiIiIKKyAgICB1cmwgPSBOb25lCisgICAgZiA9IG9wZW4oZmlsZSwgInIiKQorICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiU1JDX1VSSSIpOgorICAgICAgICAgICAgbGluZSA9IGxpbmVbbGVuKCJTUkNfVVJJIik6XS5zdHJpcCgpCisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIj0iKToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZVsxOl0uc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiXCIiKToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbMTpdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgcHJvdCA9ICJnaXQiCisgICAgICAgICAgICAgICAgICAgIGZvciBzIGluIGxpbmUuc3BsaXQoIjsiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHMuc3RhcnRzd2l0aCgiZ2l0Oi8vIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gcworICAgICAgICAgICAgICAgICAgICAgICAgaWYgcy5zdGFydHN3aXRoKCJwcm90b2NvbD0iKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ID0gcy5zcGxpdCgiPSIpWzFdCisgICAgICAgICAgICAgICAgICAgIGlmIHVybDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHByb3QgKyB1cmxbMzpdCisgICAgcmV0dXJuIHVybAorCisKK2RlZiBmaW5kX2dpdHVybChjb250ZXh0KToKKyAgICAiIiIKKyAgICBGaW5kIHRoZSBnaXQgdXJsIG9mIHRoZSBrZXJuZWwgcmVwbyBmcm9tIHRoZSBrZXJuZWwgcmVjaXBlJ3MKKyAgICBTUkNfVVJJLgorICAgICIiIgorICAgIG5hbWUgPSBjb250ZXh0WyJuYW1lIl0KKyAgICBmaWxlYmFzZSA9IGNvbnRleHRbImZpbGVuYW1lIl0KKyAgICBzY3JpcHRzX3BhdGggPSBjb250ZXh0WyJzY3JpcHRzX3BhdGgiXQorCisgICAgbWV0YV9sYXllciA9IGZpbmRfbWV0YV9sYXllcigpCisKKyAgICBrZXJuZGlyID0gb3MucGF0aC5qb2luKG1ldGFfbGF5ZXIsICJyZWNpcGVzLWtlcm5lbC9saW51eCIpCisgICAgYmJnbG9iID0gb3MucGF0aC5qb2luKGtlcm5kaXIsICIqLmJiIikKKyAgICBiYnMgPSBnbG9iLmdsb2IoYmJnbG9iKQorICAgIGZvciBrZXJuZWwgaW4gYmJzOgorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShrZXJuZWwpKVswXQorICAgICAgICBpZiBmaWxlbmFtZSBpbiBmaWxlYmFzZToKKyAgICAgICAgICAgIGdpdHVybCA9IGV4dHJhY3RfZ2l0dXJsKGtlcm5lbCkKKyAgICAgICAgICAgIHJldHVybiBnaXR1cmwKKyAgICAKKyAgICByZXR1cm4gTm9uZQorCisKK2RlZiByZWFkX2ZlYXR1cmVzKHNjcmlwdHNfcGF0aCwgbWFjaGluZSk6CisgICAgIiIiCisgICAgRmluZCBhbmQgcmV0dXJuIGEgbGlzdCBvZiBmZWF0dXJlcyBpbiBhIG1hY2hpbmUncyB1c2VyLWRlZmluZWQKKyAgICBmZWF0dXJlcyBmcmFnbWVudCBbJHttYWNoaW5lfS11c2VyLWZlYXR1cmVzLnNjY10uCisgICAgIiIiCisgICAgZmVhdHVyZXMgPSBbXQorCisgICAgZiA9IG9wZW5fdXNlcl9maWxlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgbWFjaGluZSsiLXVzZXItZmVhdHVyZXMuc2NjIiwgInIiKQorICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICBzID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmIHMgYW5kIG5vdCBzLnN0YXJ0c3dpdGgoIiMiKToKKyAgICAgICAgICAgIGZlYXR1cmVfaW5jbHVkZSA9IHMuc3BsaXQoKQorICAgICAgICAgICAgZmVhdHVyZXMuYXBwZW5kKGZlYXR1cmVfaW5jbHVkZVsxXS5zdHJpcCgpKQorICAgIGYuY2xvc2UoKQorCisgICAgcmV0dXJuIGZlYXR1cmVzCisKKworZGVmIHdyaXRlX2ZlYXR1cmVzKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgZmVhdHVyZXMpOgorICAgICIiIgorICAgIFdyaXRlIChyZXBsYWNlKSB0aGUgbGlzdCBvZiBmZWF0dXJlIGl0ZW1zIGluIGEKKyAgICBtYWNoaW5lJ3MgdXNlci1kZWZpbmVkIGZlYXR1cmVzIGZyYWdtZW50IFske21hY2hpbmV9PXVzZXItZmVhdHVyZXMuY2ZnXS4KKyAgICAiIiIKKyAgICBmID0gb3Blbl91c2VyX2ZpbGUoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBtYWNoaW5lKyItdXNlci1mZWF0dXJlcy5zY2MiLCAidyIpCisgICAgZm9yIGl0ZW0gaW4gZmVhdHVyZXM6CisgICAgICAgIGYud3JpdGUoImluY2x1ZGUgIiArIGl0ZW0gKyAiXG4iKQorICAgIGYuY2xvc2UoKQorCisgICAga2VybmVsX2NvbnRlbnRzX2NoYW5nZWQoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisKK2RlZiB5b2N0b19rZXJuZWxfZmVhdHVyZV9saXN0KHNjcmlwdHNfcGF0aCwgbWFjaGluZSk6CisgICAgIiIiCisgICAgRGlzcGxheSB0aGUgbGlzdCBvZiBmZWF0dXJlcyB1c2VkIGluIGEgbWFjaGluZSdzIHVzZXItZGVmaW5lZAorICAgIGZlYXR1cmVzIGZyYWdtZW50IFske21hY2hpbmV9LXVzZXItZmVhdHVyZXMuc2NjXS4KKyAgICAiIiIKKyAgICBmZWF0dXJlcyA9IHJlYWRfZmVhdHVyZXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisgICAgcHJpbnQgIlRoZSBjdXJyZW50IHNldCBvZiBtYWNoaW5lLXNwZWNpZmljIGZlYXR1cmVzIGZvciAlcyBpczoiICUgbWFjaGluZQorICAgIHByaW50IGdlbl9jaG9pY2VzX3N0cihmZWF0dXJlcykKKworCitkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfcm0oc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBEaXNwbGF5IHRoZSBsaXN0IG9mIGZlYXR1cmVzIHVzZWQgaW4gYSBtYWNoaW5lJ3MgdXNlci1kZWZpbmVkCisgICAgZmVhdHVyZXMgZnJhZ21lbnQgWyR7bWFjaGluZX0tdXNlci1mZWF0dXJlcy5zY2NdLCBwcm9tcHQgdGhlIHVzZXIKKyAgICBmb3Igb25lIG9yIG1vcmUgdG8gcmVtb3ZlLCBhbmQgcmVtb3ZlIHRoZW0uCisgICAgIiIiCisgICAgZmVhdHVyZXMgPSByZWFkX2ZlYXR1cmVzKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKworICAgIHByaW50ICJTcGVjaWZ5IHRoZSBmZWF0dXJlcyB0byByZW1vdmU6IgorICAgIGlucHV0ID0gcmF3X2lucHV0KGdlbl9jaG9pY2VzX3N0cihmZWF0dXJlcykpCisgICAgcm1fY2hvaWNlcyA9IGlucHV0LnNwbGl0KCkKKyAgICBybV9jaG9pY2VzLnNvcnQoKQorCisgICAgcmVtb3ZlZCA9IFtdCisKKyAgICBmb3IgY2hvaWNlIGluIHJldmVyc2VkKHJtX2Nob2ljZXMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZHggPSBpbnQoY2hvaWNlKSAtIDEKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwcmludCAiSW52YWxpZCBjaG9pY2UgKCVzKSwgZXhpdGluZyIgJSBjaG9pY2UKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGlmIGlkeCA8IDAgb3IgaWR4ID49IGxlbihmZWF0dXJlcyk6CisgICAgICAgICAgICBwcmludCAiSW52YWxpZCBjaG9pY2UgKCVkKSwgZXhpdGluZyIgJSAoaWR4ICsgMSkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIHJlbW92ZWQuYXBwZW5kKGZlYXR1cmVzLnBvcChpZHgpKQorCisgICAgd3JpdGVfZmVhdHVyZXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBmZWF0dXJlcykKKworICAgIHByaW50ICJSZW1vdmVkIGZlYXR1cmVzOiIKKyAgICBmb3IgciBpbiByZW1vdmVkOgorICAgICAgICBwcmludCAiXHQlcyIgJSByCisKKworZGVmIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2FkZChzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGZlYXR1cmVzKToKKyAgICAiIiIKKyAgICBBZGQgb25lIG9yIG1vcmUgZmVhdHVyZXMgYSBtYWNoaW5lJ3MgdXNlci1kZWZpbmVkIGZlYXR1cmVzCisgICAgZnJhZ21lbnQgWyR7bWFjaGluZX0tdXNlci1mZWF0dXJlcy5zY2NdLgorICAgICIiIgorICAgIG5ld19pdGVtcyA9IFtdCisKKyAgICBmb3IgaXRlbSBpbiBmZWF0dXJlczoKKyAgICAgICAgaWYgbm90IGl0ZW0uZW5kc3dpdGgoIi5zY2MiKToKKyAgICAgICAgICAgIHByaW50ICJJbnZhbGlkIGZlYXR1cmUgKCVzKSwgZXhpdGluZyIgJSBpdGVtCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBuZXdfaXRlbXMuYXBwZW5kKGl0ZW0pCisKKyAgICBjdXJfaXRlbXMgPSByZWFkX2ZlYXR1cmVzKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKyAgICBjdXJfaXRlbXMuZXh0ZW5kKG5ld19pdGVtcykKKworICAgIHdyaXRlX2ZlYXR1cmVzKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgY3VyX2l0ZW1zKQorCisgICAgcHJpbnQgIkFkZGVkIGZlYXR1cmVzOiIKKyAgICBmb3IgbiBpbiBuZXdfaXRlbXM6CisgICAgICAgIHByaW50ICJcdCVzIiAlIG4KKworCitkZWYgZmluZF9mZWF0dXJlX3VybChnaXRfdXJsKToKKyAgICAiIiIKKyAgICBGaW5kIHRoZSB1cmwgb2YgdGhlIGtlcm4tZmVhdHVyZXMucmMga2VybmVsIGZvciB0aGUga2VybmVsIHJlcG8KKyAgICBzcGVjaWZpZWQgZnJvbSB0aGUgQlNQJ3Mga2VybmVsIHJlY2lwZSBTUkNfVVJJLgorICAgICIiIgorICAgIGZlYXR1cmVfdXJsID0gIiIKKyAgICBpZiBnaXRfdXJsLnN0YXJ0c3dpdGgoImdpdDovLyIpOgorICAgICAgICBnaXRfdXJsID0gZ2l0X3VybFtsZW4oImdpdDovLyIpOl0uc3RyaXAoKQorICAgICAgICBzID0gZ2l0X3VybC5zcGxpdCgiLyIpCisgICAgICAgIGlmIHNbMV0uZW5kc3dpdGgoIi5naXQiKToKKyAgICAgICAgICAgIHNbMV0gPSBzWzFdWzpsZW4oc1sxXSkgLSBsZW4oIi5naXQiKV0KKyAgICAgICAgZmVhdHVyZV91cmwgPSAiaHR0cDovLyIgKyBzWzBdICsgIi9jZ2l0L2NnaXQuY2dpLyIgKyBzWzFdICsgXAorICAgICAgICAgICAgIi9wbGFpbi9tZXRhL2NmZy9rZXJuLWZlYXR1cmVzLnJjP2g9bWV0YSIKKworICAgIHJldHVybiBmZWF0dXJlX3VybAorCisKK2RlZiBmaW5kX2ZlYXR1cmVfZGVzYyhsaW5lcyk6CisgICAgIiIiCisgICAgRmluZCB0aGUgZmVhdHVyZSBkZXNjcmlwdGlvbiBhbmQgY29tcGF0aWJpbGl0eSBpbiB0aGUgcGFzc2VkLWluCisgICAgc2V0IG9mIGxpbmVzLiAgUmV0dXJucyBhIHN0cmluZyBzdHJpbmcgb2YgdGhlIGZvcm0gJ2Rlc2MKKyAgICBbY29tcGF0XScuCisgICAgIiIiCisgICAgZGVzYyA9ICJubyBkZXNjcmlwdGlvbiBhdmFpbGFibGUiCisgICAgY29tcGF0ID0gInVua25vd24iCisKKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgaWR4ID0gbGluZS5maW5kKCJLRkVBVFVSRV9ERVNDUklQVElPTiIpCisgICAgICAgIGlmIGlkeCAhPSAtMToKKyAgICAgICAgICAgIGRlc2MgPSBsaW5lW2lkeCArIGxlbigiS0ZFQVRVUkVfREVTQ1JJUFRJT04iKTpdLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIGRlc2Muc3RhcnRzd2l0aCgiXCIiKToKKyAgICAgICAgICAgICAgICBkZXNjID0gZGVzY1sxOl0KKyAgICAgICAgICAgICAgICBpZiBkZXNjLmVuZHN3aXRoKCJcIiIpOgorICAgICAgICAgICAgICAgICAgICBkZXNjID0gZGVzY1s6LTFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZHggPSBsaW5lLmZpbmQoIktGRUFUVVJFX0NPTVBBVElCSUxJVFkiKQorICAgICAgICAgICAgaWYgaWR4ICE9IC0xOgorICAgICAgICAgICAgICAgIGNvbXBhdCA9IGxpbmVbaWR4ICsgbGVuKCJLRkVBVFVSRV9DT01QQVRJQklMSVRZIik6XS5zdHJpcCgpCisKKyAgICByZXR1cm4gZGVzYyArICIgWyIgKyBjb21wYXQgKyAiXSIKKworCitkZWYgcHJpbnRfZmVhdHVyZV9kZXNjcyhsYXllciwgZmVhdHVyZV9kaXIpOgorICAgICIiIgorICAgIFByaW50IHRoZSBmZWF0dXJlIGRlc2NyaXB0aW9ucyBmb3IgdGhlIGZlYXR1cmVzIGluIGZlYXR1cmVfZGlyLgorICAgICIiIgorICAgIGtlcm5lbF9maWxlc19mZWF0dXJlcyA9IG9zLnBhdGguam9pbihsYXllciwgInJlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlX2RpcikKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhrZXJuZWxfZmlsZXNfZmVhdHVyZXMpOgorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIGZpbGUuZW5kc3dpdGgoIn4iKSBvciBmaWxlLmVuZHN3aXRoKCIjIik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGZpbGUuZW5kc3dpdGgoIi5zY2MiKToKKyAgICAgICAgICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGguam9pbihsYXllciwgInJlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVfZGlyICsgIi8iICsgZmlsZSkKKyAgICAgICAgICAgICAgICBmID0gb3BlbihmdWxscGF0aCkKKyAgICAgICAgICAgICAgICBmZWF0dXJlX2Rlc2MgPSBmaW5kX2ZlYXR1cmVfZGVzYyhmLnJlYWRsaW5lcygpKQorICAgICAgICAgICAgICAgIHByaW50IGZlYXR1cmVfZGlyICsgIi8iICsgZmlsZSArICI6ICIgKyBmZWF0dXJlX2Rlc2MKKworCitkZWYgeW9jdG9fa2VybmVsX2F2YWlsYWJsZV9mZWF0dXJlc19saXN0KHNjcmlwdHNfcGF0aCwgbWFjaGluZSk6CisgICAgIiIiCisgICAgRGlzcGxheSB0aGUgbGlzdCBvZiBhbGwgdGhlIGtlcm5lbCBmZWF0dXJlcyBhdmFpbGFibGUgZm9yIHVzZSBpbgorICAgIEJTUHMsIGFzIGdhdGhlcmVkIGZyb20gdGhlIHNldCBvZiBmZWF0dXJlIHNvdXJjZXMuCisgICAgIiIiCisgICAgbGF5ZXIgPSBmaW5kX2JzcF9sYXllcihtYWNoaW5lKQorICAgIGtlcm5lbCA9IGZpbmRfY3VycmVudF9rZXJuZWwobGF5ZXIsIG1hY2hpbmUpCisgICAgaWYgbm90IGtlcm5lbDoKKyAgICAgICAgcHJpbnQgIkNvdWxkbid0IGRldGVybWluZSB0aGUga2VybmVsIGZvciB0aGlzIEJTUCwgZXhpdGluZy4iCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBjb250ZXh0ID0gY3JlYXRlX2NvbnRleHQobWFjaGluZSwgImFyY2giLCBzY3JpcHRzX3BhdGgpCisgICAgY29udGV4dFsibmFtZSJdID0gIm5hbWUiCisgICAgY29udGV4dFsiZmlsZW5hbWUiXSA9IGtlcm5lbAorICAgIGdpdHVybCA9IGZpbmRfZ2l0dXJsKGNvbnRleHQpCisgICAgZmVhdHVyZV91cmwgPSBmaW5kX2ZlYXR1cmVfdXJsKGdpdHVybCkKKworICAgIGZlYXR1cmVfY21kID0gIndnZXQgLXEgLU8gLSAiICsgZmVhdHVyZV91cmwKKyAgICB0bXAgPSBzdWJwcm9jZXNzLlBvcGVuKGZlYXR1cmVfY21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpCisKKyAgICBwcmludCAiVGhlIGN1cnJlbnQgc2V0IG9mIGtlcm5lbCBmZWF0dXJlcyBhdmFpbGFibGUgdG8gJXMgaXM6XG4iICUgbWFjaGluZQorCisgICAgaWYgdG1wOgorICAgICAgICB0bXBsaW5lID0gdG1wLnNwbGl0KCJcbiIpCisgICAgICAgIGluX2tlcm5lbF9vcHRpb25zID0gRmFsc2UKKyAgICAgICAgZm9yIGxpbmUgaW4gdG1wbGluZToKKyAgICAgICAgICAgIGlmIG5vdCAiPSIgaW4gbGluZToKKyAgICAgICAgICAgICAgICBpZiBpbl9rZXJuZWxfb3B0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiAia2VybmVsLW9wdGlvbnMiIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGluX2tlcm5lbF9vcHRpb25zID0gVHJ1ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpbl9rZXJuZWxfb3B0aW9uczoKKyAgICAgICAgICAgICAgICBmZWF0dXJlX2RlZiA9IGxpbmUuc3BsaXQoIj0iKQorICAgICAgICAgICAgICAgIGZlYXR1cmVfdHlwZSA9IGZlYXR1cmVfZGVmWzBdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBmZWF0dXJlID0gZmVhdHVyZV9kZWZbMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgIGRlc2MgPSBnZXRfZmVhdHVyZV9kZXNjKGdpdHVybCwgZmVhdHVyZSkKKyAgICAgICAgICAgICAgICBwcmludCAiJXM6ICVzIiAlIChmZWF0dXJlLCBkZXNjKQorCisgICAgcHJpbnQgIltsb2NhbF0iCisKKyAgICBwcmludF9mZWF0dXJlX2Rlc2NzKGxheWVyLCAiY2ZnIikKKyAgICBwcmludF9mZWF0dXJlX2Rlc2NzKGxheWVyLCAiZmVhdHVyZXMiKQorCisKK2RlZiBmaW5kX2ZlYXR1cmVfZGVzY191cmwoZ2l0X3VybCwgZmVhdHVyZSk6CisgICAgIiIiCisgICAgRmluZCB0aGUgdXJsIG9mIHRoZSBrZXJuZWwgZmVhdHVyZSBpbiB0aGUga2VybmVsIHJlcG8gc3BlY2lmaWVkCisgICAgZnJvbSB0aGUgQlNQJ3Mga2VybmVsIHJlY2lwZSBTUkNfVVJJLgorICAgICIiIgorICAgIGZlYXR1cmVfZGVzY191cmwgPSAiIgorICAgIGlmIGdpdF91cmwuc3RhcnRzd2l0aCgiZ2l0Oi8vIik6CisgICAgICAgIGdpdF91cmwgPSBnaXRfdXJsW2xlbigiZ2l0Oi8vIik6XS5zdHJpcCgpCisgICAgICAgIHMgPSBnaXRfdXJsLnNwbGl0KCIvIikKKyAgICAgICAgaWYgc1sxXS5lbmRzd2l0aCgiLmdpdCIpOgorICAgICAgICAgICAgc1sxXSA9IHNbMV1bOmxlbihzWzFdKSAtIGxlbigiLmdpdCIpXQorICAgICAgICBmZWF0dXJlX2Rlc2NfdXJsID0gImh0dHA6Ly8iICsgc1swXSArICIvY2dpdC9jZ2l0LmNnaS8iICsgc1sxXSArIFwKKyAgICAgICAgICAgICIvcGxhaW4vbWV0YS9jZmcva2VybmVsLWNhY2hlLyIgKyBmZWF0dXJlICsgIj9oPW1ldGEiCisKKyAgICByZXR1cm4gZmVhdHVyZV9kZXNjX3VybAorCisKK2RlZiBnZXRfZmVhdHVyZV9kZXNjKGdpdF91cmwsIGZlYXR1cmUpOgorICAgICIiIgorICAgIFJldHVybiBhIGZlYXR1cmUgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm0gJ2Rlc2NyaXB0aW9uIFtjb21wYXRpYmlsaXR5XQorICAgIEJTUHMsIGFzIGdhdGhlcmVkIGZyb20gdGhlIHNldCBvZiBmZWF0dXJlIHNvdXJjZXMuCisgICAgIiIiCisgICAgZmVhdHVyZV9kZXNjX3VybCA9IGZpbmRfZmVhdHVyZV9kZXNjX3VybChnaXRfdXJsLCBmZWF0dXJlKQorICAgIGZlYXR1cmVfZGVzY19jbWQgPSAid2dldCAtcSAtTyAtICIgKyBmZWF0dXJlX2Rlc2NfdXJsCisgICAgdG1wID0gc3VicHJvY2Vzcy5Qb3BlbihmZWF0dXJlX2Rlc2NfY21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpCisKKyAgICByZXR1cm4gZmluZF9mZWF0dXJlX2Rlc2ModG1wLnNwbGl0KCJcbiIpKQorCisKK2RlZiB5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXNjcmliZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGZlYXR1cmUpOgorICAgICIiIgorICAgIERpc3BsYXkgdGhlIGRlc2NyaXB0aW9uIG9mIGEgc3BlY2lmaWMga2VybmVsIGZlYXR1cmUgYXZhaWxhYmxlIGZvcgorICAgIHVzZSBpbiBhIEJTUC4KKyAgICAiIiIKKyAgICBsYXllciA9IGZpbmRfYnNwX2xheWVyKG1hY2hpbmUpCisKKyAgICBrZXJuZWwgPSBmaW5kX2N1cnJlbnRfa2VybmVsKGxheWVyLCBtYWNoaW5lKQorICAgIGlmIG5vdCBrZXJuZWw6CisgICAgICAgIHByaW50ICJDb3VsZG4ndCBkZXRlcm1pbmUgdGhlIGtlcm5lbCBmb3IgdGhpcyBCU1AsIGV4aXRpbmcuIgorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgY29udGV4dCA9IGNyZWF0ZV9jb250ZXh0KG1hY2hpbmUsICJhcmNoIiwgc2NyaXB0c19wYXRoKQorICAgIGNvbnRleHRbIm5hbWUiXSA9ICJuYW1lIgorICAgIGNvbnRleHRbImZpbGVuYW1lIl0gPSBrZXJuZWwKKyAgICBnaXR1cmwgPSBmaW5kX2dpdHVybChjb250ZXh0KQorCisgICAgZGVzYyA9IGdldF9mZWF0dXJlX2Rlc2MoZ2l0dXJsLCBmZWF0dXJlKQorCisgICAgcHJpbnQgZGVzYworCisKK2RlZiBjaGVja19mZWF0dXJlX25hbWUoZmVhdHVyZV9uYW1lKToKKyAgICAiIiIKKyAgICBTYW5pdHktY2hlY2sgdGhlIGZlYXR1cmUgbmFtZSBmb3IgY3JlYXRlL2Rlc3Ryb3kuICBSZXR1cm4gRmFsc2UgaWYgbm90IE9LLgorICAgICIiIgorICAgIGlmIG5vdCBmZWF0dXJlX25hbWUuZW5kc3dpdGgoIi5zY2MiKToKKyAgICAgICAgcHJpbnQgIkludmFsaWQgZmVhdHVyZSBuYW1lIChtdXN0IGVuZCB3aXRoIC5zY2MpIFslc10sIGV4aXRpbmciICUgZmVhdHVyZV9uYW1lCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgIi8iIGluIGZlYXR1cmVfbmFtZToKKyAgICAgICAgcHJpbnQgIkludmFsaWQgZmVhdHVyZSBuYW1lIChkb24ndCBzcGVjaWZ5IGRpcmVjdG9yeSkgWyVzXSwgZXhpdGluZyIgJSBmZWF0dXJlX25hbWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiBjaGVja19jcmVhdGVfaW5wdXQoZmVhdHVyZV9pdGVtcyk6CisgICAgIiIiCisgICAgU2FuaXR5LWNoZWNrIHRoZSBjcmVhdGUgaW5wdXQuICBSZXR1cm4gRmFsc2UgaWYgbm90IE9LLgorICAgICIiIgorICAgIGlmIG5vdCBjaGVja19mZWF0dXJlX25hbWUoZmVhdHVyZV9pdGVtc1swXSk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgZmVhdHVyZV9pdGVtc1sxXS5lbmRzd2l0aCgiLnBhdGNoIikgb3IgZmVhdHVyZV9pdGVtc1sxXS5zdGFydHN3aXRoKCJDT05GSUdfIik6CisgICAgICAgIHByaW50ICJNaXNzaW5nIGRlc2NyaXB0aW9uIGFuZC9vciBjb21wYXRpYmlsdHkgWyVzXSwgZXhpdGluZyIgJSBmZWF0dXJlX2l0ZW1zWzFdCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgZmVhdHVyZV9pdGVtc1syXS5lbmRzd2l0aCgiLnBhdGNoIikgb3IgZmVhdHVyZV9pdGVtc1syXS5zdGFydHN3aXRoKCJDT05GSUdfIik6CisgICAgICAgIHByaW50ICJNaXNzaW5nIGRlc2NyaXB0aW9uIGFuZC9vciBjb21wYXRpYmlsaXR5IFslc10sIGV4aXRpbmciICUgZmVhdHVyZV9pdGVtc1sxXQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHJldHVybiBUcnVlCisKKworZGVmIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2NyZWF0ZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGZlYXR1cmVfaXRlbXMpOgorICAgICIiIgorICAgIENyZWF0ZSBhIHJlY2lwZS1zcGFjZSBrZXJuZWwgZmVhdHVyZSBpbiBhIEJTUC4KKyAgICAiIiIKKyAgICBpZiBub3QgY2hlY2tfY3JlYXRlX2lucHV0KGZlYXR1cmVfaXRlbXMpOgorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZmVhdHVyZSA9IGZlYXR1cmVfaXRlbXNbMF0KKyAgICBmZWF0dXJlX2Jhc2VuYW1lID0gZmVhdHVyZS5zcGxpdCgiLiIpWzBdCisgICAgZmVhdHVyZV9kZXNjcmlwdGlvbiA9IGZlYXR1cmVfaXRlbXNbMV0KKyAgICBmZWF0dXJlX2NvbXBhdCA9IGZlYXR1cmVfaXRlbXNbMl0KKworICAgIHBhdGNoZXMgPSBbXQorICAgIGNmZ19pdGVtcyA9IFtdCisKKyAgICBmb3IgaXRlbSBpbiBmZWF0dXJlX2l0ZW1zWzM6XToKKyAgICAgICAgaWYgaXRlbS5lbmRzd2l0aCgiLnBhdGNoIik6CisgICAgICAgICAgICBwYXRjaGVzLmFwcGVuZChpdGVtKQorICAgICAgICBlbGlmIGl0ZW0uc3RhcnRzd2l0aCgiQ09ORklHIik6CisgICAgICAgICAgICBpZiAoIj15IiBpbiBpdGVtIG9yICI9bSIgaW4gaXRlbSk6CisgICAgICAgICAgICAgICAgY2ZnX2l0ZW1zLmFwcGVuZChpdGVtKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgZmVhdHVyZSBpdGVtIChtdXN0IGJlIC5wYXRjaCBvciBDT05GSUdfKikgWyVzXSwgZXhpdGluZyIgJSBpdGVtCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZmVhdHVyZV9kaXJuYW1lID0gImNmZyIKKyAgICBpZiBwYXRjaGVzOgorICAgICAgICBmZWF0dXJlX2Rpcm5hbWUgPSAiZmVhdHVyZXMiCisKKyAgICBmaWxlc2RpciA9IGZpbmRfZmlsZXNkaXIoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorICAgIGlmIG5vdCBmaWxlc2RpcjoKKyAgICAgICAgcHJpbnQgIkNvdWxkbid0IGFkZCBmZWF0dXJlICglcyksIG5vICdmaWxlcycgZGlyIGZvdW5kIiAlIGZlYXR1cmUKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGZlYXRkaXIgPSBvcy5wYXRoLmpvaW4oZmlsZXNkaXIsIGZlYXR1cmVfZGlybmFtZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmVhdGRpcik6CisgICAgICAgIG9zLm1rZGlyKGZlYXRkaXIpCisKKyAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHBhdGNoKToKKyAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBmaW5kIHBhdGNoICglcyksIGV4aXRpbmciICUgcGF0Y2gKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRjaCkKKyAgICAgICAgZmVhdGRpcl9wYXRjaCA9IG9zLnBhdGguam9pbihmZWF0ZGlyLCBiYXNlbmFtZSkKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHBhdGNoLCBmZWF0ZGlyX3BhdGNoKQorCisgICAgbmV3X2NmZ19maWxlbmFtZSA9IG9zLnBhdGguam9pbihmZWF0ZGlyLCBmZWF0dXJlX2Jhc2VuYW1lICsgIi5jZmciKQorICAgIG5ld19jZmdfZmlsZSA9IG9wZW4obmV3X2NmZ19maWxlbmFtZSwgInciKQorICAgIGZvciBjZmdfaXRlbSBpbiBjZmdfaXRlbXM6CisgICAgICAgIG5ld19jZmdfZmlsZS53cml0ZShjZmdfaXRlbSArICJcbiIpCisgICAgbmV3X2NmZ19maWxlLmNsb3NlKCkKKworICAgIG5ld19mZWF0dXJlX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKGZlYXRkaXIsIGZlYXR1cmVfYmFzZW5hbWUgKyAiLnNjYyIpCisgICAgbmV3X2ZlYXR1cmVfZmlsZSA9IG9wZW4obmV3X2ZlYXR1cmVfZmlsZW5hbWUsICJ3IikKKyAgICBuZXdfZmVhdHVyZV9maWxlLndyaXRlKCJkZWZpbmUgS0ZFQVRVUkVfREVTQ1JJUFRJT04gXCIiICsgZmVhdHVyZV9kZXNjcmlwdGlvbiArICJcIlxuIikKKyAgICBuZXdfZmVhdHVyZV9maWxlLndyaXRlKCJkZWZpbmUgS0ZFQVRVUkVfQ09NUEFUSUJJTElUWSAiICsgZmVhdHVyZV9jb21wYXQgKyAiXG5cbiIpCisKKyAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgcGF0Y2hfZGlyLCBwYXRjaF9maWxlID0gb3MucGF0aC5zcGxpdChwYXRjaCkKKyAgICAgICAgbmV3X2ZlYXR1cmVfZmlsZS53cml0ZSgicGF0Y2ggIiArIHBhdGNoX2ZpbGUgKyAiXG4iKQorCisgICAgbmV3X2ZlYXR1cmVfZmlsZS53cml0ZSgia2NvbmYgbm9uLWhhcmR3YXJlICIgKyBmZWF0dXJlX2Jhc2VuYW1lICsgIi5jZmdcbiIpCisgICAgbmV3X2ZlYXR1cmVfZmlsZS5jbG9zZSgpCisKKyAgICBwcmludCAiQWRkZWQgZmVhdHVyZToiCisgICAgcHJpbnQgIlx0JXMiICUgZmVhdHVyZV9kaXJuYW1lICsgIi8iICsgZmVhdHVyZQorCisKK2RlZiBmZWF0dXJlX2luX3VzZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGZlYXR1cmUpOgorICAgICIiIgorICAgIERldGVybWluZSB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgZmVhdHVyZSBpcyBpbiB1c2UgYnkgdGhlIEJTUC4KKyAgICBSZXR1cm4gVHJ1ZSBpZiBzbywgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICIiIgorICAgIGZlYXR1cmVzID0gcmVhZF9mZWF0dXJlcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisgICAgZm9yIGYgaW4gZmVhdHVyZXM6CisgICAgICAgIGlmIGYgPT0gZmVhdHVyZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIGZlYXR1cmVfcmVtb3ZlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgZmVhdHVyZSk6CisgICAgIiIiCisgICAgUmVtb3ZlIHRoZSBzcGVjaWZpZWQgZmVhdHVyZSBmcm9tIHRoZSBhdmFpbGFibGUgcmVjaXBlLXNwYWNlCisgICAgZmVhdHVyZXMgZGVmaW5lZCBmb3IgdGhlIEJTUC4KKyAgICAiIiIKKyAgICBmZWF0dXJlcyA9IHJlYWRfZmVhdHVyZXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorICAgIG5ld19mZWF0dXJlcyA9IFtdCisgICAgZm9yIGYgaW4gZmVhdHVyZXM6CisgICAgICAgIGlmIGYgPT0gZmVhdHVyZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIG5ld19mZWF0dXJlcy5hcHBlbmQoZikKKyAgICB3cml0ZV9mZWF0dXJlcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIG5ld19mZWF0dXJlcykKKworCitkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzdHJveShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGZlYXR1cmUpOgorICAgICIiIgorICAgIFJlbW92ZSBhIHJlY2lwZS1zcGFjZSBrZXJuZWwgZmVhdHVyZSBmcm9tIGEgQlNQLgorICAgICIiIgorICAgIGlmIG5vdCBjaGVja19mZWF0dXJlX25hbWUoZmVhdHVyZSk6CisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBmZWF0dXJlX2luX3VzZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsICJmZWF0dXJlcy8iICsgZmVhdHVyZSkgb3IgXAorICAgICAgICAgICAgZmVhdHVyZV9pbl91c2Uoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCAiY2ZnLyIgKyBmZWF0dXJlKToKKyAgICAgICAgcHJpbnQgIkZlYXR1cmUgJXMgaXMgaW4gdXNlICh1c2UgJ2ZlYXR1cmUgcm0nIHRvIHVuLXVzZSBpdCBmaXJzdCksIGV4aXRpbmciICUgZmVhdHVyZQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZmlsZXNkaXIgPSBmaW5kX2ZpbGVzZGlyKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKyAgICBpZiBub3QgZmlsZXNkaXI6CisgICAgICAgIHByaW50ICJDb3VsZG4ndCBkZXN0cm95IGZlYXR1cmUgKCVzKSwgbm8gJ2ZpbGVzJyBkaXIgZm91bmQiICUgZmVhdHVyZQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZmVhdHVyZV9kaXJuYW1lID0gImZlYXR1cmVzIgorICAgIGZlYXRkaXIgPSBvcy5wYXRoLmpvaW4oZmlsZXNkaXIsIGZlYXR1cmVfZGlybmFtZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmVhdGRpcik6CisgICAgICAgIHByaW50ICJDb3VsZG4ndCBmaW5kIGZlYXR1cmUgZGlyZWN0b3J5ICglcykiICUgZmVhdHVyZV9kaXJuYW1lCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmZWF0dXJlX2ZxbiA9IG9zLnBhdGguam9pbihmZWF0ZGlyLCBmZWF0dXJlKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmZWF0dXJlX2Zxbik6CisgICAgICAgIGZlYXR1cmVfZGlybmFtZSA9ICJjZmciCisgICAgICAgIGZlYXRkaXIgPSBvcy5wYXRoLmpvaW4oZmlsZXNkaXIsIGZlYXR1cmVfZGlybmFtZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZlYXRkaXIpOgorICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IGZpbmQgZmVhdHVyZSBkaXJlY3RvcnkgKCVzKSIgJSBmZWF0dXJlX2Rpcm5hbWUKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGZlYXR1cmVfZnFuID0gb3MucGF0aC5qb2luKGZlYXRkaXIsIGZlYXR1cmVfZmlsZW5hbWUpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmZWF0dXJlX2Zxbik6CisgICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgZmluZCBmZWF0dXJlICglcykiICUgZmVhdHVyZQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGYgPSBvcGVuKGZlYXR1cmVfZnFuLCAiciIpCisgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgIHMgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgcy5zdGFydHN3aXRoKCJwYXRjaCAiKSBvciBzLnN0YXJ0c3dpdGgoImtjb25mICIpOgorICAgICAgICAgICAgc3BsaXRfbGluZSA9IHMuc3BsaXQoKQorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oZmVhdGRpciwgc3BsaXRfbGluZVstMV0pCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZpbGVuYW1lKQorICAgIGYuY2xvc2UoKQorICAgIG9zLnJlbW92ZShmZWF0dXJlX2ZxbikKKworICAgIGZlYXR1cmVfcmVtb3ZlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgZmVhdHVyZSkKKworICAgIHByaW50ICJSZW1vdmVkIGZlYXR1cmU6IgorICAgIHByaW50ICJcdCVzIiAlIGZlYXR1cmVfZGlybmFtZSArICIvIiArIGZlYXR1cmUKKworCitkZWYgYmFzZV9icmFuY2hlcyhjb250ZXh0KToKKyAgICAiIiIKKyAgICBSZXR1cm4gYSBsaXN0IG9mIHRoZSBiYXNlIGJyYW5jaGVzIGZvdW5kIGluIHRoZSBrZXJuZWwgZ2l0IHJlcG8uCisgICAgIiIiCisgICAgZ2l0dXJsID0gZmluZF9naXR1cmwoY29udGV4dCkKKworICAgIHByaW50ICJHZXR0aW5nIGJyYW5jaGVzIGZyb20gcmVtb3RlIHJlcG8gJXMuLi4iICUgZ2l0dXJsCisKKyAgICBnaXRjbWQgPSAiZ2l0IGxzLXJlbW90ZSAlcyAqaGVhZHMqIDI+JjEiICUgKGdpdHVybCkKKyAgICB0bXAgPSBzdWJwcm9jZXNzLlBvcGVuKGdpdGNtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKQorCisgICAgYnJhbmNoZXMgPSBbXQorCisgICAgaWYgdG1wOgorICAgICAgICB0bXBsaW5lID0gdG1wLnNwbGl0KCJcbiIpCisgICAgICAgIGZvciBsaW5lIGluIHRtcGxpbmU6CisgICAgICAgICAgICBpZiBsZW4obGluZSk9PTA6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiBub3QgbGluZS5lbmRzd2l0aCgiYmFzZSIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWR4ID0gbGluZS5maW5kKCJyZWZzL2hlYWRzLyIpCisgICAgICAgICAgICBrYnJhbmNoID0gbGluZVtpZHggKyBsZW4oInJlZnMvaGVhZHMvIik6XQorICAgICAgICAgICAgaWYga2JyYW5jaC5maW5kKCIvIikgPT0gLTEgYW5kIGticmFuY2guZmluZCgiYmFzZSIpID09IC0xOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZHggPSBrYnJhbmNoLmZpbmQoImJhc2UiKQorICAgICAgICAgICAgYnJhbmNoZXMuYXBwZW5kKGticmFuY2hbOmlkeCAtIDFdKQorCisgICAgcmV0dXJuIGJyYW5jaGVzCisKKworZGVmIGFsbF9icmFuY2hlcyhjb250ZXh0KToKKyAgICAiIiIKKyAgICBSZXR1cm4gYSBsaXN0IG9mIGFsbCB0aGUgYnJhbmNoZXMgZm91bmQgaW4gdGhlIGtlcm5lbCBnaXQgcmVwby4KKyAgICAiIiIKKyAgICBnaXR1cmwgPSBmaW5kX2dpdHVybChjb250ZXh0KQorCisgICAgcHJpbnQgIkdldHRpbmcgYnJhbmNoZXMgZnJvbSByZW1vdGUgcmVwbyAlcy4uLiIgJSBnaXR1cmwKKworICAgIGdpdGNtZCA9ICJnaXQgbHMtcmVtb3RlICVzICpoZWFkcyogMj4mMSIgJSAoZ2l0dXJsKQorICAgIHRtcCA9IHN1YnByb2Nlc3MuUG9wZW4oZ2l0Y21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpCisKKyAgICBicmFuY2hlcyA9IFtdCisKKyAgICBiYXNlX3ByZWZpeGVzID0gTm9uZQorCisgICAgdHJ5OgorICAgICAgICBicmFuY2hlc19iYXNlID0gY29udGV4dFsiYnJhbmNoZXNfYmFzZSJdCisgICAgICAgIGlmIGJyYW5jaGVzX2Jhc2U6CisgICAgICAgICAgICBiYXNlX3ByZWZpeGVzID0gYnJhbmNoZXNfYmFzZS5zcGxpdCgiOiIpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBwYXNzCisKKyAgICBhcmNoID0gY29udGV4dFsiYXJjaCJdCisKKyAgICBpZiB0bXA6CisgICAgICAgIHRtcGxpbmUgPSB0bXAuc3BsaXQoIlxuIikKKyAgICAgICAgZm9yIGxpbmUgaW4gdG1wbGluZToKKyAgICAgICAgICAgIGlmIGxlbihsaW5lKT09MDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlkeCA9IGxpbmUuZmluZCgicmVmcy9oZWFkcy8iKQorICAgICAgICAgICAga2JyYW5jaCA9IGxpbmVbaWR4ICsgbGVuKCJyZWZzL2hlYWRzLyIpOl0KKyAgICAgICAgICAgIGticmFuY2hfcHJlZml4ID0ga2JyYW5jaC5yc3BsaXQoIi8iLCAxKVswXQorCisgICAgICAgICAgICBpZiBiYXNlX3ByZWZpeGVzOgorICAgICAgICAgICAgICAgIGZvciBiYXNlX3ByZWZpeCBpbiBiYXNlX3ByZWZpeGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBrYnJhbmNoX3ByZWZpeCA9PSBiYXNlX3ByZWZpeDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaGVzLmFwcGVuZChrYnJhbmNoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIChrYnJhbmNoLmZpbmQoIi8iKSAhPSAtMSBhbmQKKyAgICAgICAgICAgICAgICAoa2JyYW5jaC5maW5kKCJzdGFuZGFyZCIpICE9IC0xIG9yIGticmFuY2guZmluZCgiYmFzZSIpICE9IC0xKSBvcgorICAgICAgICAgICAgICAgIGticmFuY2ggPT0gImJhc2UiKToKKyAgICAgICAgICAgICAgICBicmFuY2hlcy5hcHBlbmQoa2JyYW5jaCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgcmV0dXJuIGJyYW5jaGVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtLy5naXRpZ25vcmUgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ODM2N2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKQEAgLTAsMCArMSwxMDIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jb25mCisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRToge3s9bWFjaGluZX19CisKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3Ige3s9bWFjaGluZX19IHN5c3RlbXMKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToieHNlcnZlciIgcHJpbzoiNTAiIG1zZzoiRG8geW91IG5lZWQgc3VwcG9ydCBmb3IgWD8gKHkvbikiIGRlZmF1bHQ6InkiIH19Cit7eyBpZiB4c2VydmVyID09ICJ5IjogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1hTRVJWRVIgPz0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgIHhmODYtaW5wdXQtZXZkZXYgXAorICAgICAgICAgICB4Zjg2LWlucHV0LW1vdXNlIFwKKyAgICAgICAgICAgeGY4Ni12aWRlby1mYmRldiBcCisgICAgICAgICAgIHhmODYtaW5wdXQta2V5Ym9hcmQiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPSAiIGtlcm5lbC1tb2R1bGVzIGtlcm5lbC1kZXZpY2V0cmVlIgorCitFWFRSQV9JTUFHRURFUEVORFMgKz0gInUtYm9vdCIKKwore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToidHVuZWZpbGUiIHByaW86IjQwIiBtc2c6IldoaWNoIG1hY2hpbmUgdHVuaW5nIHdvdWxkIHlvdSBsaWtlIHRvIHVzZT8iIGRlZmF1bHQ6InR1bmVfY29ydGV4YTgiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9hcm0xMTM2amZfcyIgbXNnOiJhcm0xMTM2amYtcyB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2FybTkyMHQiIG1zZzoiYXJtOTIwdCB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2FybTkyNmVqcyIgbXNnOiJhcm05MjZlanMgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9hcm05dGRtaSIgbXNnOiJhcm05dGRtaSB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2NvcnRleGE1IiBtc2c6ImNvcnRleGE1IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfY29ydGV4YTciIG1zZzoiY29ydGV4YTcgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9jb3J0ZXhhOCIgbXNnOiJjb3J0ZXhhOCB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2NvcnRleGE5IiBtc2c6ImNvcnRleGE5IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfY29ydGV4YTE1IiBtc2c6ImNvcnRleGExNSB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2NvcnRleG0xIiBtc2c6ImNvcnRleG0xIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfY29ydGV4bTMiIG1zZzoiY29ydGV4bTMgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9jb3J0ZXhyNCIgbXNnOiJjb3J0ZXhyNCB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2VwOTMxMiIgbXNnOiJlcDkzMTIgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9pd21teHQiIG1zZzoiaXdtbXh0IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfc3Ryb25nYXJtMTEwMCIgbXNnOiJzdHJvbmdhcm0xMTAwIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfeHNjYWxlIiBtc2c6InhzY2FsZSB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2FybTExMzZqZl9zIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm0xMTM2amYtcy5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2FybTkyMHQiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTkyMHQuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9hcm05MjZlanMiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTkyNmVqcy5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2FybTl0ZG1pIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05dGRtaS5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2NvcnRleGE1IjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhNS5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2NvcnRleGE3IjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhNy5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2NvcnRleGE4IjogfX0KK0RFRkFVTFRUVU5FID89ICJjb3J0ZXhhOGhmLW5lb24iCitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTguaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9jb3J0ZXhhOSI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTkuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9jb3J0ZXhhMTUiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGExNS5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2NvcnRleG0xIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhtMS5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2NvcnRleG0zIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhtMy5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2NvcnRleHI0IjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhyNC5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2VwOTMxMiI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtZXA5MzEyLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfaXdtbXh0IjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pd21teHQuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9zdHJvbmdhcm0xMTAwIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zdHJvbmdhcm0xMTAwLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfeHNjYWxlIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS14c2NhbGUuaW5jCisKK0lNQUdFX0ZTVFlQRVMgKz0gInRhci5iejIgamZmczIiCitFWFRSQV9JTUFHRUNNRF9qZmZzMiA9ICItbG5wICIKKworU0VSSUFMX0NPTlNPTEUgPSAiMTE1MjAwIHR0eU8wIgorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiBwcmVmZXJyZWRfa2VybmVsID0gImxpbnV4LXlvY3RvLWN1c3RvbSIgfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tZGV2IiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIiBvciBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiIDogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorCit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsID0ga2VybmVsX2Nob2ljZS5zcGxpdCgnXycpWzBdIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24gPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMV0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gInt7PXByZWZlcnJlZF9rZXJuZWx9fSIKK1BSRUZFUlJFRF9WRVJTSU9OX3t7PXByZWZlcnJlZF9rZXJuZWx9fSA/PSAie3s9cHJlZmVycmVkX2tlcm5lbF92ZXJzaW9ufX0lIgorCitLRVJORUxfSU1BR0VUWVBFID0gInVJbWFnZSIKK0tFUk5FTF9ERVZJQ0VUUkVFID0gImFtMzM1eC1ib25lLmR0YiBhbTMzNXgtYm9uZWJsYWNrLmR0YiIKK0tFUk5FTF9FWFRSQV9BUkdTICs9ICJMT0FEQUREUj0ke1VCT09UX0VOVFJZUE9JTlR9IgorCitTUExfQklOQVJZID0gIk1MTyIKK1VCT09UX1NVRkZJWCA9ICJpbWciCit7eyBpbnB1dCB0eXBlOiJlZGl0IiBuYW1lOiJ1Ym9vdF9tYWNoaW5lIiBwcmlvOiI0MCIgbXNnOiJQbGVhc2Ugc3BlY2lmeSBhIHZhbHVlIGZvciBVQk9PVF9NQUNISU5FOiIgZGVmYXVsdDoiYW0zMzV4X2V2bV9jb25maWciIH19CitVQk9PVF9NQUNISU5FID0gInt7PXVib290X21hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImVkaXQiIG5hbWU6InVib290X2VudHJ5cG9pbnQiIHByaW86IjQwIiBtc2c6IlBsZWFzZSBzcGVjaWZ5IGEgdmFsdWUgZm9yIFVCT09UX0VOVFJZUE9JTlQ6IiBkZWZhdWx0OiIweDgwMDA4MDAwIiB9fQorVUJPT1RfRU5UUllQT0lOVCA9ICJ7ez11Ym9vdF9lbnRyeXBvaW50fX0iCit7eyBpbnB1dCB0eXBlOiJlZGl0IiBuYW1lOiJ1Ym9vdF9sb2FkYWRkcmVzcyIgcHJpbzoiNDAiIG1zZzoiUGxlYXNlIHNwZWNpZnkgYSB2YWx1ZSBmb3IgVUJPT1RfTE9BREFERFJFU1M6IiBkZWZhdWx0OiIweDgwMDA4MDAwIiB9fQorVUJPT1RfTE9BREFERFJFU1MgPSAie3s9dWJvb3RfbG9hZGFkZHJlc3N9fSIKKworTUFDSElORV9GRUFUVVJFUyA9ICJ1c2JnYWRnZXQgdXNiaG9zdCB2ZmF0IGFsc2EiCisKK0lNQUdFX0JPT1RfRklMRVMgPz0gInUtYm9vdC4ke1VCT09UX1NVRkZJWH0gTUxPIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDJkMDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7ez1tYWNoaW5lfX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZiBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzUyODkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUveG9yZy5jb25mCkBAIC0wLDAgKzEsMzQgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fSB0aGlzCitTZWN0aW9uICJNb2R1bGUiCisJTG9hZAkiZXh0bW9kIgorCUxvYWQJImRiZSIKKwlMb2FkCSJnbHgiCisJTG9hZAkiZnJlZXR5cGUiCisJTG9hZAkidHlwZTEiCisJTG9hZAkicmVjb3JkIgorCUxvYWQJImRyaSIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKwlJZGVudGlmaWVyCSJCdWlsdGluIERlZmF1bHQgTW9uaXRvciIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiRGV2aWNlIgorCUlkZW50aWZpZXIJIkJ1aWx0aW4gRGVmYXVsdCBmYmRldiBEZXZpY2UgMCIKKwlEcml2ZXIJCSJvbWFwZmIiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKwlJZGVudGlmaWVyCSJCdWlsdGluIERlZmF1bHQgZmJkZXYgU2NyZWVuIDAiCisJRGV2aWNlCQkiQnVpbHRpbiBEZWZhdWx0IGZiZGV2IERldmljZSAwIgorCU1vbml0b3IJCSJCdWlsdGluIERlZmF1bHQgTW9uaXRvciIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyTGF5b3V0IgorCUlkZW50aWZpZXIJIkJ1aWx0aW4gRGVmYXVsdCBMYXlvdXQiCisJU2NyZWVuCQkiQnVpbHRpbiBEZWZhdWx0IGZiZGV2IFNjcmVlbiAwIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJGbGFncyIKKwlPcHRpb24JCSJEb250WmFwIiAgIjAiCitFbmRTZWN0aW9uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDgzMDAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZApAQCAtMCwwICsxLDIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMGQ5MmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19IGZpbGVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtbm9uX2hhcmR3YXJlLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1ub25faGFyZHdhcmUuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZmM5MGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtbm9uX2hhcmR3YXJlLmNmZwpAQCAtMCwwICsxLDMxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tbm9uX2hhcmR3YXJlLmNmZworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfTkZTX0RFRl9GSUxFX0lPX1NJWkU9MTAyNAorCisjCisjIE11bHRpcGxlIERldmljZSBTdXBwb3J0CisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfTk9fSFo9eQorCisjCisjIENQVUlkbGUKKyMKK0NPTkZJR19DUFVfSURMRT15CitDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CitDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfREVCVUdfRlM9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNX0RFQlVHPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTVmM2I1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjCkBAIC0wLDAgKzEsMTQgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1wcmVlbXB0LXJ0LnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHByZWVtcHQtcnQKK2RlZmluZSBLQVJDSCBhcm0KKworaW5jbHVkZSB7ez1tYXBfcHJlZW1wdF9ydF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCisKKyMgZGVmYXVsdCBwb2xpY3kgZm9yIHByZWVtcHQtcnQga2VybmVscworaW5jbHVkZSBmZWF0dXJlcy9sYXRlbmN5dG9wL2xhdGVuY3l0b3Auc2NjCitpbmNsdWRlIGZlYXR1cmVzL3Byb2ZpbGluZy9wcm9maWxpbmcuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDE0YzJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpAQCAtMCwwICsxLDE0IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgc3RhbmRhcmQKK2RlZmluZSBLQVJDSCBhcm0KKworaW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYworCisjIGRlZmF1bHQgcG9saWN5IGZvciBzdGFuZGFyZCBrZXJuZWxzCitpbmNsdWRlIGZlYXR1cmVzL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvcHJvZmlsaW5nL3Byb2ZpbGluZy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjFjMjUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS10aW55LnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHRpbnkKK2RlZmluZSBLQVJDSCBhcm0KKworaW5jbHVkZSB7ez1tYXBfdGlueV9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzQ4OWU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyNzU5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmNzQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmUxYWUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpAQCAtMCwwICsxLDMyMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNmZworIworIyBTeXN0ZW0gVHlwZQorIworQ09ORklHX0FSQ0hfT01BUD15CisKKyMKKyMgVEkgT01BUCBJbXBsZW1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfT01BUDIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfT01BUDM9eQorCisjCisjIFRJIE9NQVAgQ29tbW9uIEZlYXR1cmVzCisjCitDT05GSUdfQVJDSF9PTUFQMlBMVVM9eQorCisjCisjIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCisjCitDT05GSUdfT01BUF8zMktfVElNRVI9eQorQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAorQ09ORklHX09NQVBfRE1fVElNRVI9eQorQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTPXkKK0NPTkZJR19PTUFQX1NNQVJUUkVGTEVYPXkKK0NPTkZJR19PTUFQX1NNQVJUUkVGTEVYX0NMQVNTMz15CitDT05GSUdfT01BUF9NQk9YX0ZXSz1tCitDT05GSUdfT01BUF9NQk9YX0tGSUZPX1NJWkU9MjU2CisKKyMKKyMgT01BUCBCb2FyZCBUeXBlCisjCitDT05GSUdfTUFDSF9PTUFQM19CRUFHTEU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQkVFPXkKK0NPTkZJR19BUk1fRVJSQVRBXzQzMDk3Mz15CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfTEVEUz15CisKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF9PTUFQPXkKK0NPTkZJR19TRVJJQUxfT01BUF9DT05TT0xFPXkKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19WRlA9eQorQ09ORklHX05FT049eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKK0NPTkZJR19QTV9SVU5USU1FPXkKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfTVREPXkKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19NVERfTkFORD15CisKK0NPTkZJR19NVERfTkFORF9PTUFQMj15CisKK0NPTkZJR19NVERfVUJJPXkKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfU0NTST15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19TTVNDOTExWD15CitDT05GSUdfVVNCX05FVF9TTVNDOTVYWD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX0VWREVWPXkKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0tFWUJPQVJEX1RXTDQwMzA9eQorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKK0NPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19PTUFQPXkKK0NPTkZJR19TUEk9eQorQ09ORklHX1NQSV9NQVNURVI9eQorQ09ORklHX1NQSV9PTUFQMjRYWD15CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworQ09ORklHX0dQSU9fVFdMNDAzMD15CisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworQ09ORklHX09NQVBfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfVFdMNDAzMF9DT1JFPXkKK0NPTkZJR19SRUdVTEFUT1I9eQorQ09ORklHX1JFR1VMQVRPUl9EVU1NWT15CitDT05GSUdfUkVHVUxBVE9SX1RXTDQwMzA9eQorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CitDT05GSUdfRFJNPW0KKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX09NQVBfQk9PVExPQURFUl9JTklUIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQMl9WUkFNPXkKK0NPTkZJR19PTUFQMl9WUkZCPXkKK0NPTkZJR19PTUFQMl9EU1M9eQorQ09ORklHX09NQVAyX1ZSQU1fU0laRT0xNAorQ09ORklHX09NQVAyX0RTU19ERUJVR19TVVBQT1JUPXkKKyMgQ09ORklHX09NQVAyX0RTU19DT0xMRUNUX0lSUV9TVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfT01BUDJfRFNTX0RQST15CisjIENPTkZJR19PTUFQMl9EU1NfUkZCSSBpcyBub3Qgc2V0CitDT05GSUdfT01BUDJfRFNTX1ZFTkM9eQorIyBDT05GSUdfT01BUDJfRFNTX1NESSBpcyBub3Qgc2V0CitDT05GSUdfT01BUDJfRFNTX0RTST15CisjIENPTkZJR19PTUFQMl9EU1NfRkFLRV9WU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfT01BUDJfRFNTX01JTl9GQ0tfUEVSX1BDSz0wCitDT05GSUdfRkJfT01BUDI9eQorQ09ORklHX0ZCX09NQVAyX0RFQlVHX1NVUFBPUlQ9eQorQ09ORklHX0ZCX09NQVAyX05VTV9GQlM9MgorCisjCisjIE9NQVAyLzMgRGlzcGxheSBEZXZpY2UgRHJpdmVycworIworQ09ORklHX1BBTkVMX0dFTkVSSUNfRFBJPXkKK0NPTkZJR19QQU5FTF9EVkk9eQorQ09ORklHX1BBTkVMX1NIQVJQX0xTMDM3VjdEVzAxPXkKKyMgQ09ORklHX1BBTkVMX0xHUEhJTElQU19MQjAzNVEwMiBpcyBub3Qgc2V0CisjIENPTkZJR19QQU5FTF9UQUFMIGlzIG5vdCBzZXQKK0NPTkZJR19QQU5FTF9UUE9fVEQwNDNNVEVBMT1tCisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ESVNQTEFZX1NVUFBPUlQ9eQorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTj15CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CisjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CitDT05GSUdfTE9HTz15CisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CisKKyMgRE1BIERldmljZXMKK0NPTkZJR19ETUFERVZJQ0VTPXkKK0NPTkZJR19ETUFfT01BUD15CitDT05GSUdfRE1BX09GPXkKKworQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQz15CitDT05GSUdfU05EX09NQVBfU09DX09NQVBfVFdMNDAzMD15CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9TVVBQT1JUPXkKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX09URz15CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CitDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQorQ09ORklHX1VTQl9NVVNCX0hEUkM9eQorQ09ORklHX1VTQl9NVVNCX09NQVAyUExVUz15CitDT05GSUdfVVNCX09NQVA9eQorCisjCisjIE9NQVAgMzQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX01VU0JfT1RHPXkKK0NPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQz15CitDT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQorQ09ORklHX1VTQl9JTlZFTlRSQV9ETUE9eQorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfR0FER0VUPXkKK0NPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CitDT05GSUdfVVNCX09UR19VVElMUz15CitDT05GSUdfVFdMNDAzMF9VU0I9eQorCisjIFVTQiBnYWRnZXQgbW9kdWxlcworQ09ORklHX1VTQl9HX05DTT15CitDT05GSUdfVVNCX01BU1NfU1RPUkFHRT15CisKK0NPTkZJR19NTUM9eQorCisjCisjIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19PTUFQX0hTPXkKKworIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19EUlZfVFdMNDAzMD15CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX1ZGQVRfRlM9eQorCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisKKyMgQ09ORklHX1ZJREVPX0hFTFBFUl9DSElQU19BVVRPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50IEVtdWxhdGlvbiBzdXBwb3J0CisjCitDT05GSUdfQVBNX0VNVUxBVElPTj15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mjg0MDBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpAQCAtMCwwICsxLDggQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5zY2MKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS5jZmcKK2tjb25mIG5vbi1oYXJkd2FyZSB7e21hY2hpbmV9fS1ub25faGFyZHdhcmUuY2ZnCisKK2luY2x1ZGUgZmVhdHVyZXMvdXNiLW5ldC91c2ItbmV0LnNjYworCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCitpbmNsdWRlIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWQ2OTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApAQCAtMCwwICsxLDUgQEAKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoMy4xOSkga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCB1c2VfZGVmYXVsdF9rZXJuZWwgPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b18zLjE5In19CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTYyMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApAQCAtMCwwICsxLDI2IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY4ZGIwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1ydF8zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXByZWVtcHQtcnQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tcnRfe3s9bWFjaGluZX19ID89ICJmMzU5OTJmODBjODFkYzVmYTFhOTcxNjVkZmQ1Y2JiODQ2NjFmN2NiIgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiMWI1MzRiMmY4YmJlOWI4YTc3MzI2OGNmYTMwYTQ4NTAzNDZmNmY1ZiIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MWNjYmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZTgyZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUxY2M1MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdlMWJiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9DT1BZSU5HLk1JVCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vQ09QWUlORy5NSVQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBDT1BZSU5HLk1JVApjb3B5IHRvIHlvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vQ09QWUlORy5NSVQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vUkVBRE1FIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4NjU5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vUkVBRE1FCkBAIC0wLDAgKzEsMTE4IEBACitUaGlzIFJFQURNRSBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIGJ1aWxkaW5nIHRoZSBtZXRhLXt7PW1hY2hpbmV9fQorQlNQIGxheWVyLCBhbmQgYm9vdGluZyB0aGUgaW1hZ2VzIGNvbnRhaW5lZCBpbiB0aGUgL2JpbmFyeSBkaXJlY3RvcnkuCitQbGVhc2Ugc2VlIHRoZSBjb3JyZXNwb25kaW5nIHNlY3Rpb25zIGJlbG93IGZvciBkZXRhaWxzLgorCisKK0RlcGVuZGVuY2llcworPT09PT09PT09PT09CisKK1RoaXMgbGF5ZXIgZGVwZW5kcyBvbjoKKworICBVUkk6IGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UKKyAgYnJhbmNoOiBtYXN0ZXIKKworICBVUkk6IGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlCisgIGxheWVyczogbWV0YQorICBicmFuY2g6IG1hc3RlcgorCisgIFVSSTogZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveHh4eAorICBsYXllcnM6IHh4eHgKKyAgYnJhbmNoOiBtYXN0ZXIKKworCitQYXRjaGVzCis9PT09PT09CisKK1BsZWFzZSBzdWJtaXQgYW55IHBhdGNoZXMgYWdhaW5zdCB0aGlzIEJTUCB0byB0aGUgWW9jdG8gbWFpbGluZyBsaXN0CisoeW9jdG9AeW9jdG9wcm9qZWN0Lm9yZykgYW5kIGNjOiB0aGUgbWFpbnRhaW5lcjoKKworTWFpbnRhaW5lcjogWFhYIFlZWVlZWSA8eHh4Lnl5eXl5eUB6enp6ei5jb20+CisKK1BsZWFzZSBzZWUgdGhlIG1ldGEteHh4eC9NQUlOVEFJTkVSUyBmaWxlIGZvciBtb3JlIGRldGFpbHMuCisKKworVGFibGUgb2YgQ29udGVudHMKKz09PT09PT09PT09PT09PT09CisKKyAgSS4gQnVpbGRpbmcgdGhlIG1ldGEte3s9bWFjaGluZX19IEJTUCBsYXllcgorIElJLiBCb290aW5nIHRoZSBpbWFnZXMgaW4gL2JpbmFyeQorCisKK0kuIEJ1aWxkaW5nIHRoZSBtZXRhLXt7PW1hY2hpbmV9fSBCU1AgbGF5ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLS0tIHJlcGxhY2Ugd2l0aCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgZm9yIHlvdXIgbGF5ZXIgLS0tCisKK0luIG9yZGVyIHRvIGJ1aWxkIGFuIGltYWdlIHdpdGggQlNQIHN1cHBvcnQgZm9yIGEgZ2l2ZW4gcmVsZWFzZSwgeW91CituZWVkIHRvIGRvd25sb2FkIHRoZSBjb3JyZXNwb25kaW5nIEJTUCB0YXJiYWxsIGZyb20gdGhlICdCb2FyZCBTdXBwb3J0CitQYWNrYWdlIChCU1ApIERvd25sb2FkcycgcGFnZSBvZiB0aGUgWW9jdG8gUHJvamVjdCB3ZWJzaXRlLgorCitIYXZpbmcgZG9uZSB0aGF0LCBhbmQgYXNzdW1pbmcgeW91IGV4dHJhY3RlZCB0aGUgQlNQIHRhcmJhbGwgY29udGVudHMKK2F0IHRoZSB0b3AtbGV2ZWwgb2YgeW91ciB5b2N0byBidWlsZCB0cmVlLCB5b3UgY2FuIGJ1aWxkIGEKK3t7PW1hY2hpbmV9fSBpbWFnZSBieSBhZGRpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBtZXRhLXt7PW1hY2hpbmV9fQorbGF5ZXIgdG8gYmJsYXllcnMuY29uZiwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgbGF5ZXJzIG5lZWRlZCAodG8gYWNjZXNzCitjb21tb24gbWV0YWRhdGEgc2hhcmVkIGJldHdlZW4gQlNQcykgZS5nLjoKKworICB5b2N0by9tZXRhLXh4eHggXAorICB5b2N0by9tZXRhLXh4eHgvbWV0YS17ez1tYWNoaW5lfX0gXAorCitUbyBlbmFibGUgdGhlIHt7PW1hY2hpbmV9fSBsYXllciwgYWRkIHRoZSB7ez1tYWNoaW5lfX0gTUFDSElORSB0byBsb2NhbC5jb25mOgorCisgIE1BQ0hJTkUgPz0gInt7PW1hY2hpbmV9fSIKKworWW91IHNob3VsZCB0aGVuIGJlIGFibGUgdG8gYnVpbGQgYSB7ez1tYWNoaW5lfX0gaW1hZ2UgYXMgc3VjaDoKKworICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudgorICAkIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvCisKK0F0IHRoZSBlbmQgb2YgYSBzdWNjZXNzZnVsIGJ1aWxkLCB5b3Ugc2hvdWxkIGhhdmUgYSBsaXZlIGltYWdlIHRoYXQKK3lvdSBjYW4gYm9vdCBmcm9tIGEgVVNCIGZsYXNoIGRyaXZlIChzZWUgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBkbwordGhhdCBiZWxvdywgaW4gdGhlIHNlY3Rpb24gJ0Jvb3RpbmcgdGhlIGltYWdlcyBmcm9tIC9iaW5hcnknKS4KKworQXMgYW4gYWx0ZXJuYXRpdmUgdG8gZG93bmxvYWRpbmcgdGhlIEJTUCB0YXJiYWxsLCB5b3UgY2FuIGFsc28gd29yaworZGlyZWN0bHkgZnJvbSB0aGUgbWV0YS14eHh4IGdpdCByZXBvc2l0b3J5LiAgRm9yIGVhY2ggQlNQIGluIHRoZQorJ21ldGEteHh4eCcgcmVwb3NpdG9yeSwgdGhlcmUgYXJlIG11bHRpcGxlIGJyYW5jaGVzLCBvbmUgY29ycmVzcG9uZGluZwordG8gZWFjaCBtYWpvciByZWxlYXNlIHN0YXJ0aW5nIHdpdGggJ2xhdmVybmUnICgwLjkwKSwgaW4gYWRkaXRpb24gdG8KK3RoZSBsYXRlc3QgY29kZSB3aGljaCB0cmFja3MgdGhlIGN1cnJlbnQgbWFzdGVyIChub3RlIHRoYXQgbm90IGFsbAorQlNQcyBhcmUgcHJlc2VudCBpbiBldmVyeSByZWxlYXNlKS4gIEluc3RlYWQgb2YgZXh0cmFjdGluZyBhIEJTUAordGFyYmFsbCBhdCB0aGUgdG9wIGxldmVsIG9mIHlvdXIgeW9jdG8gYnVpbGQgdHJlZSwgeW91IGNhbgorZXF1aXZhbGVudGx5IGNoZWNrIG91dCB0aGUgYXBwcm9wcmlhdGUgYnJhbmNoIGZyb20gdGhlIG1ldGEteHh4eAorcmVwb3NpdG9yeSBhdCB0aGUgc2FtZSBsb2NhdGlvbi4KKworCitJSS4gQm9vdGluZyB0aGUgaW1hZ2VzIGluIC9iaW5hcnkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistLS0gcmVwbGFjZSB3aXRoIHNwZWNpZmljIGluc3RydWN0aW9ucyBmb3IgeW91ciBwbGF0Zm9ybSAtLS0KKworVGhpcyBCU1AgY29udGFpbnMgYm9vdGFibGUgbGl2ZSBpbWFnZXMsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGRpcmVjdGx5Citib290IFlvY3RvIG9mZiBvZiBhIFVTQiBmbGFzaCBkcml2ZS4KKworVW5kZXIgTGludXgsIGluc2VydCBhIFVTQiBmbGFzaCBkcml2ZS4gIEFzc3VtaW5nIHRoZSBVU0IgZmxhc2ggZHJpdmUKK3Rha2VzIGRldmljZSAvZGV2L3NkZiwgdXNlIGRkIHRvIGNvcHkgdGhlIGxpdmUgaW1hZ2UgdG8gaXQuICBGb3IKK2V4YW1wbGU6CisKKyMgZGQgaWY9Y29yZS1pbWFnZS1zYXRvLXt7PW1hY2hpbmV9fS0yMDEwMTIwNzA1MzczOC5oZGRpbWcgb2Y9L2Rldi9zZGYKKyMgc3luYworIyBlamVjdCAvZGV2L3NkZgorCitUaGlzIHNob3VsZCBnaXZlIHlvdSBhIGJvb3RhYmxlIFVTQiBmbGFzaCBkZXZpY2UuICBJbnNlcnQgdGhlIGRldmljZQoraW50byBhIGJvb3RhYmxlIFVTQiBzb2NrZXQgb24gdGhlIHRhcmdldCwgYW5kIHBvd2VyIG9uLiAgVGhpcyBzaG91bGQKK3Jlc3VsdCBpbiBhIHN5c3RlbSBib290ZWQgdG8gdGhlIFNhdG8gZ3JhcGhpY2FsIGRlc2t0b3AuCisKK0lmIHlvdSB3YW50IGEgdGVybWluYWwsIHVzZSB0aGUgYXJyb3dzIGF0IHRoZSB0b3Agb2YgdGhlIFVJIHRvIG1vdmUgdG8KK2RpZmZlcmVudCBwYWdlcyBvZiBhdmFpbGFibGUgYXBwbGljYXRpb25zLCBvbmUgb2Ygd2hpY2ggaXMgbmFtZWQKKydUZXJtaW5hbCcuICBDbGlja2luZyB0aGF0IHNob3VsZCBnaXZlIHlvdSBhIHJvb3QgdGVybWluYWwuCisKK0lmIHlvdSB3YW50IHRvIHNzaCBpbnRvIHRoZSBzeXN0ZW0sIHlvdSBjYW4gdXNlIHRoZSByb290IHRlcm1pbmFsIHRvCitpZmNvbmZpZyB0aGUgSVAgYWRkcmVzcyBhbmQgdXNlIHRoYXQgdG8gc3NoIGluLiAgVGhlIHJvb3QgcGFzc3dvcmQgaXMKK2VtcHR5LCBzbyB0byBsb2cgaW4gdHlwZSAncm9vdCcgZm9yIHRoZSB1c2VyIG5hbWUgYW5kIGhpdCAnRW50ZXInIGF0Cit0aGUgUGFzc3dvcmQgcHJvbXB0OiBhbmQgeW91IHNob3VsZCBiZSBpbi4KKworLS0tLQorCitJZiB5b3UgZmluZCB5b3UncmUgZ2V0dGluZyBjb3JydXB0IGltYWdlcyBvbiB0aGUgVVNCIChpdCBkb2Vzbid0IHNob3cKK3RoZSBzeXNsaW51eCBib290OiBwcm9tcHQsIG9yIHRoZSBib290OiBwcm9tcHQgY29udGFpbnMgc3RyYW5nZQorY2hhcmFjdGVycyksIHRyeSBkb2luZyB0aGlzIGZpcnN0OgorCisjIGRkIGlmPS9kZXYvemVybyBvZj0vZGV2L3NkZiBicz0xTSBjb3VudD01MTIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vUkVBRE1FLnNvdXJjZXMgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL1JFQURNRS5zb3VyY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNGNiN2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL1JFQURNRS5zb3VyY2VzCkBAIC0wLDAgKzEsMTcgQEAKK1RoZSBzb3VyY2VzIGZvciB0aGUgcGFja2FnZXMgY29tcHJpc2luZyB0aGUgaW1hZ2VzIHNoaXBwZWQgd2l0aCB0aGlzCitCU1AgY2FuIGJlIGZvdW5kIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb246CisKK2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8KKworVGhlIG1ldGFkYXRhIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGltYWdlcyBzaGlwcGVkIHdpdGggdGhpcyBCU1AsIGluCithZGRpdGlvbiB0byB0aGUgY29kZSBjb250YWluZWQgaW4gdGhpcyBCU1AsIGNhbiBiZSBmb3VuZCBhdCB0aGUKK2ZvbGxvd2luZyBsb2NhdGlvbjoKKworaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2Rvd25sb2Fkcy95b2N0by0xLjEvcG9reS1lZGlzb24tNi4wLnRhci5iejIKKworVGhlIG1ldGFkYXRhIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGltYWdlcyBzaGlwcGVkIHdpdGggdGhpcyBCU1AsIGluCithZGRpdGlvbiB0byB0aGUgY29kZSBjb250YWluZWQgaW4gdGhpcyBCU1AsIGNhbiBhbHNvIGJlIGZvdW5kIGF0IHRoZQorZm9sbG93aW5nIGxvY2F0aW9uczoKKworZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reS5naXQKK2dpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL21ldGEteHh4eApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9iaW5hcnkvLmdpdGlnbm9yZSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vYmluYXJ5Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vYmluYXJ5Ly5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vY29uZi9sYXllci5jb25mIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9jb25mL2xheWVyLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUyOWY0NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vY29uZi9sYXllci5jb25mCkBAIC0wLDAgKzEsMTAgQEAKKyMgV2UgaGF2ZSBhIGNvbmYgYW5kIGNsYXNzZXMgZGlyZWN0b3J5LCBhZGQgdG8gQkJQQVRICitCQlBBVEggLj0gIjoke0xBWUVSRElSfSIKKworIyBXZSBoYXZlIGEgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisJJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYmFwcGVuZCIKKworQkJGSUxFX0NPTExFQ1RJT05TICs9ICJ7ez1tYWNoaW5lfX0iCitCQkZJTEVfUEFUVEVSTl97ez1tYWNoaW5lfX0gPSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV97ez1tYWNoaW5lfX0gPSAiNiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL21hY2hpbmUubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvbWFjaGluZS5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0MmQwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL21hY2hpbmUubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3s9bWFjaGluZX19CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9tYWNoaW5lL21hY2hjb25maWcgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9tYWNoaW5lL21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4NWQzOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL21hY2hpbmUvbWFjaGNvbmZpZwpAQCAtMCwwICsxLDUgQEAKKyMgQXNzdW1lIGEgVVNCIG1vdXNlIGFuZCBrZXlib2FyZCBhcmUgY29ubmVjdGVkCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ0b3VjaHNjcmVlbiIgbXNnOiJEb2VzIHlvdXIgQlNQIGhhdmUgYSB0b3VjaHNjcmVlbj8gKHkvbikiIGRlZmF1bHQ6Im4iIH19CitIQVZFX1RPVUNIU0NSRUVOPXt7PXRvdWNoc2NyZWVufX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6ImtleWJvYXJkIiBtc2c6IkRvZXMgeW91ciBCU1AgaGF2ZSBhIGtleWJvYXJkPyAoeS9uKSIgZGVmYXVsdDoieSIgfX0KK0hBVkVfS0VZQk9BUkQ9e3s9a2V5Ym9hcmR9fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNDgwNGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvcl8wLjAuYmJhcHBlbmQKQEAgLTAsMCArMSwyIEBACitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYzZGRkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0wLDAgKzEsMjYgQEAKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJjdXN0b21fa2VybmVsX3JlbW90ZSIgcHJpbzoiMjAiIG1zZzoiSXMgdGhlIGN1c3RvbSBrZXJuZWwgeW91J2QgbGlrZSB0byB1c2UgaW4gYSByZW1vdGUgZ2l0IHJlcG8/ICh5L24pIiBkZWZhdWx0OiJ5In19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgYW5kIGN1c3RvbV9rZXJuZWxfcmVtb3RlID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImVkaXQtZ2l0LXJlcG8iIG5hbWU6ImN1c3RvbV9rZXJuZWxfcmVtb3RlX3BhdGgiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBlbnRlciB0aGUgZnVsbCBVUkkgdG8gdGhlIHJlbW90ZSBnaXQgcmVwbyAodGhlIGRlZmF1bHQgY29ycmVzcG9uZHMgdG8gbGludXgtc3RhYmxlIHYzLjE2LjMpIiBkZWZhdWx0OiJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvc3RhYmxlL2xpbnV4LXN0YWJsZS5naXQifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIiBhbmQgY3VzdG9tX2tlcm5lbF9yZW1vdGUgPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiZWRpdC1naXQtcmVwbyIgbmFtZToiY3VzdG9tX2tlcm5lbF9sb2NhbF9wYXRoIiBwcmlvOiIyMCIgbXNnOiJZb3UndmUgaW5kaWNhdGVkIHRoYXQgeW91J3JlIG5vdCB1c2luZyBhIHJlbW90ZSBnaXQgcmVwby4gIFBsZWFzZSBlbnRlciB0aGUgZnVsbCBwYXRoIHRvIHRoZSBsb2NhbCBnaXQgcmVwbyB5b3Ugd2FudCB0byB1c2UgKHRoZSBkZWZhdWx0IGFzc3VtZXMgYSBsb2NhbCBsaW51eC1zdGFibGUgdjMuMTYuMykiIGRlZmF1bHQ6Ii9ob21lL3Ryei95b2N0by9rZXJuZWxzL2xpbnV4LXN0YWJsZS5naXQifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogfX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6ImN1c3RvbV9rZXJuZWxfbmVlZF9rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCB0byB1c2UgYSBzcGVjaWZpYyAobm9uLW1hc3RlcikgYnJhbmNoPyAoeS9uKSIgZGVmYXVsdDoibiJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iIGFuZCBjdXN0b21fa2VybmVsX25lZWRfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJlZGl0IiBuYW1lOiJjdXN0b21fa2VybmVsX2ticmFuY2giIHByaW86IjIwIiBtc2c6IlBsZWFzZSBlbnRlciB0aGUgYnJhbmNoIHlvdSB3YW50IHRvIHVzZSAodGhlIGRlZmF1bHQgYnJhbmNoIGNvcnJlc3BvbmRzIHRvIHRoZSBsaW51eC1zdGFibGUgJ2xpbnV4LTMuMTYueScgYnJhbmNoKToiIGRlZmF1bHQ6ImxpbnV4LTMuMTYueSJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToiY3VzdG9tX2tlcm5lbF9zcmNyZXYiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBlbnRlciB0aGUgU1JDUkVWIChjb21taXQgaWQpIHlvdSdkIGxpa2UgdG8gdXNlICh1c2UgJyR7QVVUT1JFVn0nIHRvIHRyYWNrIHRoZSBjdXJyZW50IEhFQUQpOiIgZGVmYXVsdDoiJHtBVVRPUkVWfSJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToiY3VzdG9tX2tlcm5lbF9saW51eF92ZXJzaW9uIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgZW50ZXIgdGhlIExpbnV4IHZlcnNpb24gb2YgdGhlIGtlcm5lbCB5b3UndmUgc3BlY2lmaWVkOiIgZGVmYXVsdDoiMy4xNi4zIn19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJlZGl0IiBuYW1lOiJjdXN0b21fa2VybmVsX2xpbnV4X3ZlcnNpb25fZXh0ZW5zaW9uIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgZW50ZXIgYSBMaW51eCB2ZXJzaW9uIGV4dGVuc2lvbiBpZiB5b3Ugd2FudCAoaXQgd2lsbCBzaG93IHVwIGF0IHRoZSBlbmQgb2YgdGhlIGtlcm5lbCBuYW1lIHNob3duIGJ5IHVuYW1lKToiIGRlZmF1bHQ6Ii1jdXN0b20ifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogfX0KK3t7IGlucHV0IHR5cGU6ImVkaXQtZmlsZSIgbmFtZToiY3VzdG9tX2tlcm5lbF9kZWZjb25maWciIHByaW86IjIwIiBtc2c6Ikl0J3MgcmVjb21tZW5kZWQgKGJ1dCBub3QgcmVxdWlyZWQpIHRoYXQgY3VzdG9tIGtlcm5lbHMgYmUgYnVpbHQgdXNpbmcgYSBkZWZjb25maWcuICBQbGVhc2UgZW50ZXIgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZGVmY29uZmlnIGZvciB5b3VyIGtlcm5lbCAoTk9URTogaWYgeW91IGRvbid0IHNwZWNpZnkgYSBkZWZjb25maWcgdGhlIGtlcm5lbCBwcm9iYWJseSB3b24ndCBidWlsZCBvciBib290KToiIGRlZmF1bHQ6IiJ9fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20uYmIgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGE5NTViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20uYmIKQEAgLTAsMCArMSw1NyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogfX0gdGhpcworIyBUaGlzIGZpbGUgd2FzIGRlcml2ZWQgZnJvbSB0aGUgbGludXgteW9jdG8tY3VzdG9tLmJiIHJlY2lwZSBpbgorIyBvZS1jb3JlLgorIworIyBsaW51eC15b2N0by1jdXN0b20uYmI6CisjCisjICAgQSB5b2N0by1ic3AtZ2VuZXJhdGVkIGtlcm5lbCByZWNpcGUgdGhhdCB1c2VzIHRoZSBsaW51eC15b2N0byBhbmQKKyMgICBvZS1jb3JlIGtlcm5lbCBjbGFzc2VzIHRvIGFwcGx5IGEgc3Vic2V0IG9mIHlvY3RvIGtlcm5lbAorIyAgIG1hbmFnZW1lbnQgdG8gZ2l0IG1hbmFnZWQga2VybmVsIHJlcG9zaXRvcmllcy4KKyMKKyMgV2FybmluZzoKKyMKKyMgICBCdWlsZGluZyB0aGlzIGtlcm5lbCB3aXRob3V0IHByb3ZpZGluZyBhIGRlZmNvbmZpZyBvciBCU1AKKyMgICBjb25maWd1cmF0aW9uIHdpbGwgcmVzdWx0IGluIGJ1aWxkIG9yIGJvb3QgZXJyb3JzLiBUaGlzIGlzIG5vdCBhCisjICAgYnVnLgorIworIyBOb3RlczoKKyMKKyMgICBwYXRjaGVzOiBwYXRjaGVzIGNhbiBiZSBtZXJnZWQgaW50byB0byB0aGUgc291cmNlIGdpdCB0cmVlIGl0c2VsZiwKKyMgICAgICAgICAgICBhZGRlZCB2aWEgdGhlIFNSQ19VUkksIG9yIGNvbnRyb2xsZWQgdmlhIGEgQlNQCisjICAgICAgICAgICAgY29uZmlndXJhdGlvbi4KKyMKKyMgICBleGFtcGxlIGNvbmZpZ3VyYXRpb24gYWRkaXRpb246CisjICAgICAgICAgICAgU1JDX1VSSSArPSAiZmlsZTovL3NtcC5jZmciCisjICAgZXhhbXBsZSBwYXRjaCBhZGRpdGlvbjoKKyMgICAgICAgICAgICBTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1saW51eC12ZXJzaW9uLXR3ZWFrLnBhdGNoCisjICAgZXhhbXBsZSBmZWF0dXJlIGFkZGl0aW9uOgorIyAgICAgICAgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9mZWF0dXJlLnNjYyIKKyMKKworaW5oZXJpdCBrZXJuZWwKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgYW5kIGN1c3RvbV9rZXJuZWxfcmVtb3RlID09ICJ5IjogfX0KK1NSQ19VUkkgPSAie3s9Y3VzdG9tX2tlcm5lbF9yZW1vdGVfcGF0aH19O3Byb3RvY29sPWdpdDtiYXJlY2xvbmU9MTticmFuY2g9JHtLQlJBTkNIfSIKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgYW5kIGN1c3RvbV9rZXJuZWxfcmVtb3RlID09ICJuIjogfX0KK1NSQ19VUkkgPSAiZ2l0Oi8ve3s9Y3VzdG9tX2tlcm5lbF9sb2NhbF9wYXRofX07cHJvdG9jb2w9ZmlsZTtiYXJlY2xvbmU9MTticmFuY2g9JHtLQlJBTkNIfSIKKworU1JDX1VSSSArPSAiZmlsZTovL2RlZmNvbmZpZyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIgorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iIGFuZCBjdXN0b21fa2VybmVsX25lZWRfa2JyYW5jaCA9PSAieSIgYW5kIGN1c3RvbV9rZXJuZWxfa2JyYW5jaCBhbmQgY3VzdG9tX2tlcm5lbF9rYnJhbmNoICE9ICJtYXN0ZXIiOiB9fQorS0JSQU5DSCA9ICJ7ez1jdXN0b21fa2VybmVsX2ticmFuY2h9fSIKKworTElOVVhfVkVSU0lPTiA/PSAie3s9Y3VzdG9tX2tlcm5lbF9saW51eF92ZXJzaW9ufX0iCitMSU5VWF9WRVJTSU9OX0VYVEVOU0lPTiA/PSAie3s9Y3VzdG9tX2tlcm5lbF9saW51eF92ZXJzaW9uX2V4dGVuc2lvbn19IgorCitTUkNSRVY9Int7PWN1c3RvbV9rZXJuZWxfc3JjcmV2fX0iCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20ubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20ubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxN2QyMDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiB9fSBsaW51eC15b2N0by1jdXN0b20KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL2RlZmNvbmZpZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWIwZmZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vZGVmY29uZmlnCkBAIC0wLDAgKzEsNSBAQAorIworIyBQbGFjZWhvbGRlciBmb3IgY3VzdG9tIGRlZmF1bHQga2VybmVsIGNvbmZpZ3VyYXRpb24uICB5b2N0by1ic3Agd2lsbAorIyByZXBsYWNlIHRoaXMgZmlsZSB3aXRoIGEgdXNlci1zcGVjaWZpZWQgZGVmY29uZmlnLgorIwore3sgaWYgY3VzdG9tX2tlcm5lbF9kZWZjb25maWc6IHJlcGxhY2VfZmlsZShvZiwgY3VzdG9tX2tlcm5lbF9kZWZjb25maWcpIH19CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9tYWNoaW5lLXVzZXItY29uZmlnLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUtdXNlci1jb25maWcuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMjMwOWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpAQCAtMCwwICsxLDkgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKKyMKKyMgVXNlZCBieSB5b2N0by1rZXJuZWwgdG8gbWFuYWdlIGNvbmZpZyBvcHRpb25zLgorIworIyB5b2N0by1rZXJuZWwgbWF5IGNoYW5nZSB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGluIGFueQorIyB3YXkgaXQgc2VlcyBmaXQsIGluY2x1ZGluZyByZW1vdmluZyBjb21tZW50cyBsaWtlIHRoaXMsCisjIHNvIGRvbid0IG1hbnVhbGx5IG1ha2UgYW55IG1vZGlmaWNhdGlvbnMgeW91IGRvbid0IHdhbnQKKyMgdG8gbG9zZS4KKyMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDExMzhmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCkBAIC0wLDAgKzEsOSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKKyMKKyMgVXNlZCBieSB5b2N0by1rZXJuZWwgdG8gbWFuYWdlIHBhdGNoZXMuCisjCisjIHlvY3RvLWtlcm5lbCBtYXkgY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgaW4gYW55CisjIHdheSBpdCBzZWVzIGZpdCwgaW5jbHVkaW5nIHJlbW92aW5nIGNvbW1lbnRzIGxpa2UgdGhpcywKKyMgc28gZG9uJ3QgbWFudWFsbHkgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucyB5b3UgZG9uJ3Qgd2FudAorIyB0byBsb3NlLgorIwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vbWFjaGluZS5jZmcgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9tYWNoaW5lLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmE4MjAxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vbWFjaGluZS5jZmcKQEAgLTAsMCArMSw0IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY2ZnCisjCisjIEEgY29udmVuaWVudCBwbGFjZSB0byBhZGQgY29uZmlnIG9wdGlvbnMsIG5vdGhpbmcgbW9yZS4KKyMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vbWFjaGluZS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI2YjQxMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUuc2NjCkBAIC0wLDAgKzEsMTggQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5zY2MKKyMKKyMgVGhlIHRvcC1sZXZlbCAnZmVhdHVyZScgZm9yIHRoZSB7ez1tYWNoaW5lfX0gY3VzdG9tIGtlcm5lbC4KKyMKKyMgRXNzZW50aWFsbHkgdGhpcyBpcyBhIGNvbnZlbmllbnQgdG9wLWxldmVsIGNvbnRhaW5lciBvciBzdGFydGluZworIyBwb2ludCBmb3IgYWRkaW5nIGxvd2VyLWxldmVsIGNvbmZpZyBmcmFnZW1lbnRzIGFuZCBmZWF0dXJlcy4KKyMKKworIyB7ez1tYWNoaW5lfX0uY2ZnIGluIHRoZSBsaW51eC15b2N0by1jdXN0b20gc3ViZGlyIGlzIGp1c3QgYQorIyBjb252ZW5pZW50IHBsYWNlIGZvciBhZGRpbmcgcmFuZG9tIGNvbmZpZyBmcmFnbWVudHMuCisKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS5jZmcKKworIyBUaGVzZSBhcmUgdXNlZCBieSB5b2N0by1rZXJuZWwgdG8gYWRkIGNvbmZpZyBmcmFnbWVudHMgYW5kIGZlYXR1cmVzLgorIyBEb24ndCByZW1vdmUgaWYgeW91IHBsYW4gb24gdXNpbmcgeW9jdG8ta2VybmVsIHdpdGggdGhpcyBCU1AuCisKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKK2luY2x1ZGUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxODkzNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCkBAIC0wLDAgKzEsNzcgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jb25mCisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRToge3s9bWFjaGluZX19CisKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3Ige3s9bWFjaGluZX19IHN5c3RlbXMKKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1jdXN0b20iIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsID0gImxpbnV4LXlvY3RvLWRldiIgfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgb3Iga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IiA6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gInt7PXByZWZlcnJlZF9rZXJuZWx9fSIKKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVswXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uID0ga2VybmVsX2Nob2ljZS5zcGxpdCgnXycpWzFdIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCitQUkVGRVJSRURfVkVSU0lPTl97ez1wcmVmZXJyZWRfa2VybmVsfX0gPz0gInt7PXByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbn19JSIKKwore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToidHVuZWZpbGUiIHByaW86IjQwIiBtc2c6IldoaWNoIG1hY2hpbmUgdHVuaW5nIHdvdWxkIHlvdSBsaWtlIHRvIHVzZT8iIGRlZmF1bHQ6InR1bmVfY29yZTIiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9pNTg2IiBtc2c6Imk1ODYgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9hdG9tIiBtc2c6IkF0b20gdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9jb3JlMiIgbXNnOiJDb3JlMiB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2k1ODYiOiB9fQorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWk1ODYuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9hdG9tIjogfX0KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hdG9tLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfY29yZTIiOiB9fQorREVGQVVMVFRVTkU9ImNvcmUyLTMyIgorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYworCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni1iYXNlLmluYworCitNQUNISU5FX0ZFQVRVUkVTICs9ICJ3aWZpIGVmaSBwY2Jpb3MiCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InhzZXJ2ZXIiIHByaW86IjUwIiBtc2c6IkRvIHlvdSBuZWVkIHN1cHBvcnQgZm9yIFg/ICh5L24pIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgKGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTkiIG9yIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTQiKTogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6InhzZXJ2ZXJfY2hvaWNlIiBwcmlvOiI1MCIgbXNnOiJQbGVhc2Ugc2VsZWN0IGFuIHhzZXJ2ZXIgZm9yIHRoaXMgbWFjaGluZToiIGRlZmF1bHQ6InhzZXJ2ZXJfdmVzYSIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX3Zlc2EiIG1zZzoiVkVTQSB4c2VydmVyIHN1cHBvcnQiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9pOTE1IiBtc2c6Imk5MTUgeHNlcnZlciBzdXBwb3J0IiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfaTk2NSIgbXNnOiJpOTY1IHhzZXJ2ZXIgc3VwcG9ydCIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX2ZiZGV2IiBtc2c6ImZiZGV2IHhzZXJ2ZXIgc3VwcG9ydCIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX21vZGVzZXR0aW5nIiBtc2c6Im1vZGVzZXR0aW5nIHhzZXJ2ZXIgc3VwcG9ydCIgfX0KKwore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJ4c2VydmVyX2Nob2ljZSIgcHJpbzoiNTAiIG1zZzoiUGxlYXNlIHNlbGVjdCBhbiB4c2VydmVyIGZvciB0aGlzIG1hY2hpbmU6IiBkZWZhdWx0OiJ4c2VydmVyX3Zlc2EiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl92ZXNhIiBtc2c6IlZFU0EgeHNlcnZlciBzdXBwb3J0IiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfaTkxNSIgbXNnOiJpOTE1IHhzZXJ2ZXIgc3VwcG9ydCIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX2k5NjUiIG1zZzoiaTk2NSB4c2VydmVyIHN1cHBvcnQiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9mYmRldiIgbXNnOiJmYmRldiB4c2VydmVyIHN1cHBvcnQiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9tb2Rlc2V0dGluZyIgbXNnOiJtb2Rlc2V0dGluZyB4c2VydmVyIHN1cHBvcnQiIH19CisKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0b18zLjE5IiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG9fMy4xNCIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IHhzZXJ2ZXJfY2hvaWNlID0gInhzZXJ2ZXJfaTkxNSIgfX0KKwore3sgaWYgeHNlcnZlciA9PSAieSI6IH19CitYU0VSVkVSID89ICIke1hTRVJWRVJfWDg2X0JBU0V9IFwKKyAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9FWFR9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl92ZXNhIjogfX0KKyAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9WRVNBfSBcCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfaTkxNSI6IH19CisgICAgICAgICAgICR7WFNFUlZFUl9YODZfSTkxNX0gXAore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX2k5NjUiOiB9fQorICAgICAgICAgICAke1hTRVJWRVJfWDg2X0k5NjV9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl9mYmRldiI6IH19CisgICAgICAgICAgICR7WFNFUlZFUl9YODZfRkJERVZ9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl9tb2Rlc2V0dGluZyI6IH19CisgICAgICAgICAgICR7WFNFUlZFUl9YODZfTU9ERVNFVFRJTkd9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fQorICAgICAgICAgICAiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgKz0gImxpbnV4LWZpcm13YXJlIHY4NmQgZWVlLWFjcGktc2NyaXB0cyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9wbi1tYXRjaGJveC1wYW5lbC0yID0gIiAtLXdpdGgtYmF0dGVyeT1hY3BpIgorCitHTElCQ19BRERPTlMgPSAibnB0bCIKKwore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX3Zlc2EiOiB9fQorQVBQRU5EICs9ICJ2aWRlbz12ZXNhZmIgdmdhPTB4MzE4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0MmQwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7ez1tYWNoaW5lfX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS94b3JnLmNvbmYgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOWEwZjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUveG9yZy5jb25mCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fSB0aGlzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwODMwMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZApAQCAtMCwwICsxLDIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwZDkyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19IGZpbGVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTllZTNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpAQCAtMCwwICsxLDE2IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBwcmVlbXB0LXJ0CitkZWZpbmUgS0FSQ0ggaTM4NgorCitpbmNsdWRlIHt7PW1hcF9wcmVlbXB0X3J0X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKKworIyBkZWZhdWx0IHBvbGljeSBmb3IgcHJlZW1wdC1ydCBrZXJuZWxzCitpbmNsdWRlIGNmZy91c2ItbWFzcy1zdG9yYWdlLnNjYworaW5jbHVkZSBjZmcvYm9vdC1saXZlLnNjYworaW5jbHVkZSBmZWF0dXJlcy9sYXRlbmN5dG9wL2xhdGVuY3l0b3Auc2NjCitpbmNsdWRlIGZlYXR1cmVzL3Byb2ZpbGluZy9wcm9maWxpbmcuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MjAxMmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpAQCAtMCwwICsxLDE2IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgc3RhbmRhcmQKK2RlZmluZSBLQVJDSCBpMzg2CisKK2luY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKKworIyBkZWZhdWx0IHBvbGljeSBmb3Igc3RhbmRhcmQga2VybmVscworaW5jbHVkZSBjZmcvdXNiLW1hc3Mtc3RvcmFnZS5zY2MKK2luY2x1ZGUgY2ZnL2Jvb3QtbGl2ZS5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLnNjYworaW5jbHVkZSBmZWF0dXJlcy9wcm9maWxpbmcvcHJvZmlsaW5nLnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M3NTE5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXRpbnkuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgdGlueQorZGVmaW5lIEtBUkNIIGkzODYKKworaW5jbHVkZSB7ez1tYXBfdGlueV9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZWZkY2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODViZTI2ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNTlkYWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMTY4YjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpAQCAtMCwwICsxLDU1IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY2ZnCitDT05GSUdfWDg2XzMyPXkKK0NPTkZJR19NQVRPTT15CitDT05GSUdfUFJJTlRLPXkKKworIyBCYXNpYyBoYXJkd2FyZSBzdXBwb3J0IGZvciB0aGUgYm94IC0gbmV0d29yaywgVVNCLCBQQ0ksIHNvdW5kCitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQVRBPXkKK0NPTkZJR19BVEFfR0VORVJJQz15CitDT05GSUdfQVRBX1NGRj15CitDT05GSUdfUENJPXkKK0NPTkZJR19NTUM9eQorQ09ORklHX01NQ19TREhDST15CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQj15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1I4MTY5PXkKK0NPTkZJR19QQVRBX1NDSD15CitDT05GSUdfTU1DX1NESENJX1BDST15CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19QQ0lFUE9SVEJVUz15CitDT05GSUdfTkVUPXkKK0NPTkZJR19VU0JfVUhDSV9IQ0Q9eQorQ09ORklHX1VTQl9PSENJX0hDRD15CitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TRz15CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NORD15CitDT05GSUdfU05EX0hEQV9JTlRFTD15CitDT05GSUdfU0FUQV9BSENJPXkKK0NPTkZJR19BR1A9eQorQ09ORklHX1BNPXkKK0NPTkZJR19BQ1BJPXkKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX0lOUFVUPXkKKworIyBNYWtlIHN1cmUgdGhlc2UgYXJlIG9uLCBvdGhlcndpc2UgdGhlIGJvb3R1cCB3b24ndCBiZSBmdW4KK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVE1QRlM9eQorQ09ORklHX1BBQ0tFVD15CisKKyMgTmVlZGVkIGZvciBib290aW5nIChhbmQgdXNpbmcpIFVTQiBtZW1vcnkgc3RpY2tzCitDT05GSUdfQkxLX0RFVl9MT09QPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKworQ09ORklHX1JEX0daSVA9eQorCisjIE5lZWRlZCBmb3IgYm9vdGluZyAoYW5kIHVzaW5nKSBDRCBpbWFnZXMKK0NPTkZJR19CTEtfREVWX1NSPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QzMmYxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCkBAIC0wLDAgKzEsMjEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5zY2MKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS5jZmcKKworaW5jbHVkZSBmZWF0dXJlcy9pbnRlbC1lMXh4eHgvaW50ZWwtZTEwMC5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvaW50ZWwtZTF4eHh4L2ludGVsLWUxeHh4eC5zY2MKKwore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX2k5MTUiIG9yIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX2k5NjUiOiB9fQoraW5jbHVkZSBmZWF0dXJlcy9pOTE1L2k5MTUuc2NjCisKK2luY2x1ZGUgZmVhdHVyZXMvc2VyaWFsLzgyNTAuc2NjCitpbmNsdWRlIGZlYXR1cmVzL2VyaWNzc29uLTNnL2Y1NTIxZ3cuc2NjCisKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl92ZXNhIjogfX0KK2luY2x1ZGUgY2ZnL3Zlc2FmYi5zY2MKKworaW5jbHVkZSBjZmcvdXNiLW1hc3Mtc3RvcmFnZS5zY2MKK2luY2x1ZGUgY2ZnL2Jvb3QtbGl2ZS5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvcG93ZXIvaW50ZWwuc2NjCisKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKK2luY2x1ZGUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTFkNjk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0wLDAgKzEsNSBAQAore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICgzLjE5KSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIHVzZV9kZWZhdWx0X2tlcm5lbCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzMuMTkifX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmE2MjMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCkBAIC0wLDAgKzEsMjYgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19Igore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOGRiMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXJ0XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gImYzNTk5MmY4MGM4MWRjNWZhMWE5NzE2NWRmZDVjYmI4NDY2MWY3Y2IiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tcnRfe3s9bWFjaGluZX19ID89ICIxYjUzNGIyZjhiYmU5YjhhNzczMjY4Y2ZhMzBhNDg1MDM0NmY2ZjVmIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzFjY2JjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGU4MmZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYjQ5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMyY2I1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYyIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYyIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvQ09QWUlORy5NSVQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvQ09QWUlORy5NSVQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkZTM1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9DT1BZSU5HLk1JVApAQCAtMCwwICsxLDE3IEBACitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9SRUFETUUgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0M2RmYzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvUkVBRE1FCkBAIC0wLDAgKzEsNjQgQEAKK1RoaXMgUkVBRE1FIGZpbGUgY29udGFpbnMgaW5mb3JtYXRpb24gb24gdGhlIGNvbnRlbnRzIG9mIHRoZQore3s9bGF5ZXJfbmFtZX19IGxheWVyLgorCitQbGVhc2Ugc2VlIHRoZSBjb3JyZXNwb25kaW5nIHNlY3Rpb25zIGJlbG93IGZvciBkZXRhaWxzLgorCisKK0RlcGVuZGVuY2llcworPT09PT09PT09PT09CisKK1RoaXMgbGF5ZXIgZGVwZW5kcyBvbjoKKworICBVUkk6IGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UKKyAgYnJhbmNoOiBtYXN0ZXIKKworICBVUkk6IGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlCisgIGxheWVyczogbWV0YQorICBicmFuY2g6IG1hc3RlcgorCisgIFVSSTogZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveHh4eAorICBsYXllcnM6IHh4eHgKKyAgYnJhbmNoOiBtYXN0ZXIKKworCitQYXRjaGVzCis9PT09PT09CisKK1BsZWFzZSBzdWJtaXQgYW55IHBhdGNoZXMgYWdhaW5zdCB0aGUge3s9bGF5ZXJfbmFtZX19IGxheWVyIHRvIHRoZQoreHh4eCBtYWlsaW5nIGxpc3QgKHh4eHhAenp6ei5vcmcpIGFuZCBjYzogdGhlIG1haW50YWluZXI6CisKK01haW50YWluZXI6IFhYWCBZWVlZWVkgPHh4eC55eXl5eXlAenp6enouY29tPgorCisKK1RhYmxlIG9mIENvbnRlbnRzCis9PT09PT09PT09PT09PT09PQorCisgIEkuIEFkZGluZyB0aGUge3s9bGF5ZXJfbmFtZX19IGxheWVyIHRvIHlvdXIgYnVpbGQKKyBJSS4gTWlzYworCisKK0kuIEFkZGluZyB0aGUge3s9bGF5ZXJfbmFtZX19IGxheWVyIHRvIHlvdXIgYnVpbGQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLS0tIHJlcGxhY2Ugd2l0aCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgZm9yIHRoZSB7ez1sYXllcl9uYW1lfX0gbGF5ZXIgLS0tCisKK0luIG9yZGVyIHRvIHVzZSB0aGlzIGxheWVyLCB5b3UgbmVlZCB0byBtYWtlIHRoZSBidWlsZCBzeXN0ZW0gYXdhcmUgb2YKK2l0LgorCitBc3N1bWluZyB0aGUge3s9bGF5ZXJfbmFtZX19IGxheWVyIGV4aXN0cyBhdCB0aGUgdG9wLWxldmVsIG9mIHlvdXIKK3lvY3RvIGJ1aWxkIHRyZWUsIHlvdSBjYW4gYWRkIGl0IHRvIHRoZSBidWlsZCBzeXN0ZW0gYnkgYWRkaW5nIHRoZQorbG9jYXRpb24gb2YgdGhlIHt7PWxheWVyX25hbWV9fSBsYXllciB0byBiYmxheWVycy5jb25mLCBhbG9uZyB3aXRoIGFueQorb3RoZXIgbGF5ZXJzIG5lZWRlZC4gZS5nLjoKKworICBCQkxBWUVSUyA/PSAiIFwKKyAgICAvcGF0aC90by95b2N0by9tZXRhIFwKKyAgICAvcGF0aC90by95b2N0by9tZXRhLXlvY3RvIFwKKyAgICAvcGF0aC90by95b2N0by9tZXRhLXlvY3RvLWJzcCBcCisgICAgL3BhdGgvdG8veW9jdG8vbWV0YS17ez1sYXllcl9uYW1lfX0gXAorICAgICIKKworCitJSS4gTWlzYworPT09PT09PT0KKworLS0tIHJlcGxhY2Ugd2l0aCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCB0aGUge3s9bGF5ZXJfbmFtZX19IGxheWVyIC0tLQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL2NvbmYvbGF5ZXIuY29uZiBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9jb25mL2xheWVyLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRmZmUxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9jb25mL2xheWVyLmNvbmYKQEAgLTAsMCArMSwxMCBAQAorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFkZCB0byBCQlBBVEgKK0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisJJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYmFwcGVuZCIKKworQkJGSUxFX0NPTExFQ1RJT05TICs9ICJ7ez1sYXllcl9uYW1lfX0iCitCQkZJTEVfUEFUVEVSTl97ez1sYXllcl9uYW1lfX0gPSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV97ez1sYXllcl9uYW1lfX0gPSAie3s9bGF5ZXJfcHJpb3JpdHl9fSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9sYXllci1xdWVzdGlvbnMubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL2xheWVyLXF1ZXN0aW9ucy5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhODljMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9sYXllci1xdWVzdGlvbnMubm9pbnN0YWxsCkBAIC0wLDAgKzEsMTQgQEAKK3t7IGlucHV0IHR5cGU6ImVkaXQiIG5hbWU6ImxheWVyX3ByaW9yaXR5IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgZW50ZXIgdGhlIGxheWVyIHByaW9yaXR5IHlvdSdkIGxpa2UgdG8gdXNlIGZvciB0aGUgbGF5ZXI6IiBkZWZhdWx0OiI2In19CisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6ImNyZWF0ZV9leGFtcGxlX3JlY2lwZSIgcHJpbzoiMjAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gaGF2ZSBhbiBleGFtcGxlIHJlY2lwZSBjcmVhdGVkPyAoeS9uKSIgZGVmYXVsdDoibiJ9fQorCit7eyBpZiBjcmVhdGVfZXhhbXBsZV9yZWNpcGUgPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToiZXhhbXBsZV9yZWNpcGVfbmFtZSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGVudGVyIHRoZSBuYW1lIHlvdSdkIGxpa2UgdG8gdXNlIGZvciB5b3VyIGV4YW1wbGUgcmVjaXBlOiIgZGVmYXVsdDoiZXhhbXBsZSJ9fQorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJjcmVhdGVfZXhhbXBsZV9iYmFwcGVuZCIgcHJpbzoiMjAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gaGF2ZSBhbiBleGFtcGxlIGJiYXBwZW5kIGZpbGUgY3JlYXRlZD8gKHkvbikiIGRlZmF1bHQ6Im4ifX0KKwore3sgaWYgY3JlYXRlX2V4YW1wbGVfYmJhcHBlbmQgPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToiZXhhbXBsZV9iYmFwcGVuZF9uYW1lIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgZW50ZXIgdGhlIG5hbWUgeW91J2QgbGlrZSB0byB1c2UgZm9yIHlvdXIgYmJhcHBlbmQgZmlsZToiIGRlZmF1bHQ6ImV4YW1wbGUifX0KKwore3sgaWYgY3JlYXRlX2V4YW1wbGVfYmJhcHBlbmQgPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToiZXhhbXBsZV9iYmFwcGVuZF92ZXJzaW9uIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgZW50ZXIgdGhlIHZlcnNpb24gbnVtYmVyIHlvdSdkIGxpa2UgdG8gdXNlIGZvciB5b3VyIGJiYXBwZW5kIGZpbGUgKHRoaXMgc2hvdWxkIG1hdGNoIHRoZSByZWNpcGUgeW91J3JlIGFwcGVuZGluZyB0byk6IiBkZWZhdWx0OiIwLjEifX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS1iYmFwcGVuZC5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5NGU2NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3sgaWYgY3JlYXRlX2V4YW1wbGVfYmJhcHBlbmQgPT0gInkiOiB9fSByZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kLXZlcnNpb24uYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC12ZXJzaW9uLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MzEzMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC12ZXJzaW9uLmJiYXBwZW5kCkBAIC0wLDAgKzEsOSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9ZXhhbXBsZV9iYmFwcGVuZF9uYW1lfX1fe3s9ZXhhbXBsZV9iYmFwcGVuZF92ZXJzaW9ufX0uYmJhcHBlbmQKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59LSR7UFZ9OiIKKworIworIyBUaGlzIC5iYmFwcGVuZCBkb2Vzbid0IHlldCBkbyBhbnl0aGluZyAtIHJlcGxhY2UgdGhpcyB0ZXh0IHdpdGgKKyMgbW9kaWZpY2F0aW9ucyB0byB0aGUgZXhhbXBsZV8wLjEuYmIgcmVjaXBlLCBvciB3aGF0ZXZlciByZWNpcGUgaXQgaXMKKyMgdGhhdCB5b3Ugd2FudCB0byBtb2RpZnkgd2l0aCB0aGlzIC5iYmFwcGVuZCAobWFrZSBzdXJlIHlvdSBjaGFuZ2UKKyMgdGhlIHJlY2lwZSBuYW1lIChQTikgYW5kIHZlcnNpb24gKFBWKSB0byBtYXRjaCkuCisjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC12ZXJzaW9uLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kLXZlcnNpb24ubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZGY4YTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC12ZXJzaW9uLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7PWV4YW1wbGVfYmJhcHBlbmRfbmFtZX19LXt7PWV4YW1wbGVfYmJhcHBlbmRfdmVyc2lvbn19CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC12ZXJzaW9uL2V4YW1wbGUucGF0Y2ggYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC12ZXJzaW9uL2V4YW1wbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAwMGEzNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kLXZlcnNpb24vZXhhbXBsZS5wYXRjaApAQCAtMCwwICsxLDEyIEBACisjCisjIFRoaXMgaXMgYSBub24tZnVuY3Rpb25hbCBwbGFjZWhvbGRlciBmaWxlLCBoZXJlIGZvciBleGFtcGxlIHB1cnBvc2VzCisjIG9ubHkuCisjCisjIElmIHlvdSBoYWQgYSBwYXRjaCBmb3IgeW91ciByZWNpcGUsIHlvdSdkIHB1dCBpdCBpbiB0aGlzIGRpcmVjdG9yeQorIyBhbmQgcmVmZXJlbmNlIGl0IGZyb20geW91ciByZWNpcGUncyBTUkNfVVJJOgorIworIyAgU1JDX1VSSSArPSAiZmlsZTovL2V4YW1wbGUucGF0Y2giCisjCisjIE5vdGUgdGhhdCB5b3UgY291bGQgYWxzbyByZW5hbWUgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgcGF0Y2gKKyMgdG8gcmVtb3ZlIHRoZSB2ZXJzaW9uIG51bWJlciBvciBzaW1wbHkgcmVuYW1lIGl0ICdmaWxlcycuICBEb2luZyBzbworIyBhbGxvd3MgeW91IHRvIHVzZSB0aGUgc2FtZSBkaXJlY3RvcnkgZm9yIG11bHRpcGxlIHJlY2lwZXMuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMDY5YjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7IGlmIGNyZWF0ZV9leGFtcGxlX3JlY2lwZSA9PSAieSI6IH19IHJlY2lwZXMtZXhhbXBsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlL2V4YW1wbGUtcmVjaXBlLTAuMS5iYiBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUvZXhhbXBsZS9leGFtcGxlLXJlY2lwZS0wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiZjU5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUvZXhhbXBsZS9leGFtcGxlLXJlY2lwZS0wLjEuYmIKQEAgLTAsMCArMSwyMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9ZXhhbXBsZV9yZWNpcGVfbmFtZX19XzAuMS5iYgorIworIyBUaGlzIGZpbGUgd2FzIGRlcml2ZWQgZnJvbSB0aGUgJ0hlbGxvIFdvcmxkIScgZXhhbXBsZSByZWNpcGUgaW4gdGhlCisjIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorIworCitTVU1NQVJZID0gIlNpbXBsZSBoZWxsb3dvcmxkIGFwcGxpY2F0aW9uIgorU0VDVElPTiA9ICJleGFtcGxlcyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L01JVDttZDU9MDgzNWFkZTY5OGUwYmNmODUwNmVjZGEyZjdiNGYzMDIiCisKK1NSQ19VUkkgPSAiZmlsZTovL2hlbGxvd29ybGQuYyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19jb21waWxlKCkgeworCSAgICAgJHtDQ30gaGVsbG93b3JsZC5jIC1vIGhlbGxvd29ybGQKK30KKworZG9faW5zdGFsbCgpIHsKKwkgICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCSAgICAgaW5zdGFsbCAtbSAwNzU1IGhlbGxvd29ybGQgJHtEfSR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlL2V4YW1wbGUtcmVjaXBlLTAuMS5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzE5YzE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlL2V4YW1wbGUtcmVjaXBlLTAuMS5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7ez1leGFtcGxlX3JlY2lwZV9uYW1lfX0tMC4xCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xL2V4YW1wbGUucGF0Y2ggYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xL2V4YW1wbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAwMGEzNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUvZXhhbXBsZS9leGFtcGxlLXJlY2lwZS0wLjEvZXhhbXBsZS5wYXRjaApAQCAtMCwwICsxLDEyIEBACisjCisjIFRoaXMgaXMgYSBub24tZnVuY3Rpb25hbCBwbGFjZWhvbGRlciBmaWxlLCBoZXJlIGZvciBleGFtcGxlIHB1cnBvc2VzCisjIG9ubHkuCisjCisjIElmIHlvdSBoYWQgYSBwYXRjaCBmb3IgeW91ciByZWNpcGUsIHlvdSdkIHB1dCBpdCBpbiB0aGlzIGRpcmVjdG9yeQorIyBhbmQgcmVmZXJlbmNlIGl0IGZyb20geW91ciByZWNpcGUncyBTUkNfVVJJOgorIworIyAgU1JDX1VSSSArPSAiZmlsZTovL2V4YW1wbGUucGF0Y2giCisjCisjIE5vdGUgdGhhdCB5b3UgY291bGQgYWxzbyByZW5hbWUgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgcGF0Y2gKKyMgdG8gcmVtb3ZlIHRoZSB2ZXJzaW9uIG51bWJlciBvciBzaW1wbHkgcmVuYW1lIGl0ICdmaWxlcycuICBEb2luZyBzbworIyBhbGxvd3MgeW91IHRvIHVzZSB0aGUgc2FtZSBkaXJlY3RvcnkgZm9yIG11bHRpcGxlIHJlY2lwZXMuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xL2hlbGxvd29ybGQuYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUvZXhhbXBsZS9leGFtcGxlLXJlY2lwZS0wLjEvaGVsbG93b3JsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZjJlNDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xL2hlbGxvd29ybGQuYwpAQCAtMCwwICsxLDggQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgcHJpbnRmKCJIZWxsbyBXb3JsZCFcbiIpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy8uZ2l0aWdub3JlIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZiBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxOWQ2MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKQEAgLTAsMCArMSwzOSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNvbmYKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiB7ez1tYWNoaW5lfX0KKworI0BERVNDUklQVElPTjogTWFjaGluZSBjb25maWd1cmF0aW9uIGZvciB7ez1tYWNoaW5lfX0gc3lzdGVtcworCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMyLmluYworCitNQUNISU5FX0ZFQVRVUkVTID0gInNjcmVlbiBrZXlib2FyZCBwY2kgdXNiaG9zdCBleHQyIGV4dDMgc2VyaWFsIgorCitLRVJORUxfSU1BR0VUWVBFID0gInZtbGludXgiCitLRVJORUxfQUxUX0lNQUdFVFlQRSA9ICJ2bWxpbnV4LmJpbiIKK0tFUk5FTF9JTUFHRV9TVFJJUF9FWFRSQV9TRUNUSU9OUyAgPSAiLmNvbW1lbnQiCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tY3VzdG9tIiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1kZXYiIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iIG9yIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiIgOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMF0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbiA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVsxXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorUFJFRkVSUkVEX1ZFUlNJT05fe3s9cHJlZmVycmVkX2tlcm5lbH19ID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsX3ZlcnNpb259fSUiCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InhzZXJ2ZXIiIHByaW86IjUwIiBtc2c6IkRvIHlvdSBuZWVkIHN1cHBvcnQgZm9yIFg/ICh5L24pIiBkZWZhdWx0OiJ5IiB9fQore3sgaWYgeHNlcnZlciA9PSAieSI6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitYU0VSVkVSID89ICJ4c2VydmVyLXhvcmcgXAorICAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgICB4Zjg2LXZpZGVvLWZiZGV2IgorCitTRVJJQUxfQ09OU09MRSA9ICIxMTUyMDAgdHR5UzAiCitVU0VfVlQgPz0gIjAiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPSAiIGtlcm5lbC1tb2R1bGVzIgorCitJTUFHRV9GU1RZUEVTID89ICJqZmZzMiB0YXIuYnoyIgorSkZGUzJfRVJBU0VCTE9DSyA9ICIweDEwMDAwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMGQ5MmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fSBmaWxlcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2MTkwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXByZWVtcHQtcnQuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgcHJlZW1wdC1ydAorZGVmaW5lIEtBUkNIIG1pcHMKKworaW5jbHVkZSB7ez1tYXBfcHJlZW1wdF9ydF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNWRkODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgc3RhbmRhcmQKK2RlZmluZSBLQVJDSCBtaXBzCisKK2luY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MWM3NzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS10aW55LnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHRpbnkKK2RlZmluZSBLQVJDSCBtaXBzCisKK2luY2x1ZGUge3s9bWFwX3Rpbnlfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzQ4OWU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODViZTI2ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3Zjc0N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlNDc2NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCkBAIC0wLDAgKzEsMiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNmZworQ09ORklHX01JUFM9eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzlkYzNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKQEAgLTAsMCArMSw4IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uc2NjCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0uY2ZnCisKK2luY2x1ZGUgY2ZnL3VzYi1tYXNzLXN0b3JhZ2Uuc2NjCitpbmNsdWRlIGNmZy9mcy92ZmF0LnNjYworCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCitpbmNsdWRlIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExZDY5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApAQCAtMCwwICsxLDUgQEAKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoMy4xOSkga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCB1c2VfZGVmYXVsdF9rZXJuZWwgPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b18zLjE5In19CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhNjIzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApAQCAtMCwwICsxLDI2IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjhkYjAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1ydF8zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXByZWVtcHQtcnQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tcnRfe3s9bWFjaGluZX19ID89ICJmMzU5OTJmODBjODFkYzVmYTFhOTcxNjVkZmQ1Y2JiODQ2NjFmN2NiIgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiMWI1MzRiMmY4YmJlOWI4YTc3MzI2OGNmYTMwYTQ4NTAzNDZmNmY1ZiIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlNzk4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YmEwYWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV8zLjE5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE5IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMWNjNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZTFiYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE5IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvLmdpdGlnbm9yZSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC8uZ2l0aWdub3JlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FmYzVlMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpAQCAtMCwwICsxLDM5IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY29uZgorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IHt7PW1hY2hpbmV9fQorCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHt7PW1hY2hpbmV9fSBzeXN0ZW1zCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzNjQuaW5jCisKK01BQ0hJTkVfRkVBVFVSRVMgPSAicGNpIGV4dDIgZXh0MyBzZXJpYWwiCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAidm1saW51eCIKK0tFUk5FTF9BTFRfSU1BR0VUWVBFID0gInZtbGludXguYmluIgorS0VSTkVMX0lNQUdFX1NUUklQX0VYVFJBX1NFQ1RJT05TICA9ICIuY29tbWVudCIKKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1jdXN0b20iIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsID0gImxpbnV4LXlvY3RvLWRldiIgfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgb3Iga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IiA6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gInt7PXByZWZlcnJlZF9rZXJuZWx9fSIKKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVswXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uID0ga2VybmVsX2Nob2ljZS5zcGxpdCgnXycpWzFdIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCitQUkVGRVJSRURfVkVSU0lPTl97ez1wcmVmZXJyZWRfa2VybmVsfX0gPz0gInt7PXByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbn19JSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToieHNlcnZlciIgcHJpbzoiNTAiIG1zZzoiRG8geW91IG5lZWQgc3VwcG9ydCBmb3IgWD8gKHkvbikiIGRlZmF1bHQ6InkiIH19Cit7eyBpZiB4c2VydmVyID09ICJ5IjogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1hTRVJWRVIgPz0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgIHhmODYtdmlkZW8tZmJkZXYiCisKK1NFUklBTF9DT05TT0xFID0gIjExNTIwMCB0dHlTMCIKK1VTRV9WVCA/PSAiMCIKKworTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyA9ICIga2VybmVsLW1vZHVsZXMiCisKK0lNQUdFX0ZTVFlQRVMgPz0gImpmZnMyIHRhci5iejIiCitKRkZTMl9FUkFTRUJMT0NLID0gIjB4MTAwMDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMGQ5MmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19IGZpbGVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2MTkwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBwcmVlbXB0LXJ0CitkZWZpbmUgS0FSQ0ggbWlwcworCitpbmNsdWRlIHt7PW1hcF9wcmVlbXB0X3J0X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNWRkODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBzdGFuZGFyZAorZGVmaW5lIEtBUkNIIG1pcHMKKworaW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MWM3NzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXRpbnkuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgdGlueQorZGVmaW5lIEtBUkNIIG1pcHMKKworaW5jbHVkZSB7ez1tYXBfdGlueV9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWVmZGNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YmUyNmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzU5ZGFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2M5MDZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpAQCAtMCwwICsxLDY2IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY2ZnCisjU09DCitDT05GSUdfQ0FWSVVNX09DVEVPTl9TT0M9eQorQ09ORklHX0NBVklVTV9DTjYzWFhQMT15CitDT05GSUdfQ0FWSVVNX09DVEVPTl9DVk1TRUdfU0laRT0yCisKKyNLZXJuZWwKK0NPTkZJR19TTVA9eQorQ09ORklHX05SX0NQVVM9MzIKKyNFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworQ09ORklHX01JUFMzMl9DT01QQVQ9eQorQ09ORklHX01JUFMzMl9PMzI9eQorQ09ORklHX01JUFMzMl9OMzI9eQorCisKKyNQQ0kKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9NU0k9eQorCisjSTJDCitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfT0NURU9OPXkKKworQ09ORklHX0hXX1JBTkRPTV9PQ1RFT049eQorCisjU1BJCitDT05GSUdfU1BJPXkKK0NPTkZJR19TUElfT0NURU9OPXkKKworI01pc2MKK0NPTkZJR19FRVBST01fQVQyND15CitDT05GSUdfRUVQUk9NX0FUMjU9eQorQ09ORklHX09DVEVPTl9XRFQ9eQorCitDT05GSUdfU1RBR0lORz15CisKKyNFdGhlcm5ldAorQ09ORklHX09DVEVPTl9FVEhFUk5FVD15CitDT05GSUdfT0NURU9OX01HTVRfRVRIRVJORVQ9eQorQ09ORklHX01ESU9fT0NURU9OPXkKKworI1BIWQorQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorQ09ORklHX0JDTTg3WFhfUEhZPXkKKworCisjVVNCCitDT05GSUdfVVNCPXkKK0NPTkZJR19PQ1RFT05fVVNCPXkKK0NPTkZJR19VU0JfT0NURU9OX0VIQ0k9eQorQ09ORklHX1VTQl9PQ1RFT05fT0hDST15CitDT05GSUdfVVNCX09DVEVPTjJfQ09NTU9OPXkKKworQ09ORklHX01URD15CitDT05GSUdfTVREX0JMT0NLPXkKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9EVz15CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzOWRjM2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCkBAIC0wLDAgKzEsOCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LnNjYwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LmNmZworCitpbmNsdWRlIGNmZy91c2ItbWFzcy1zdG9yYWdlLnNjYworaW5jbHVkZSBjZmcvZnMvdmZhdC5zY2MKKwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZworaW5jbHVkZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDRlNmM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKQEAgLTAsMCArMSw1IEBACit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidXNlX2RlZmF1bHRfa2VybmVsIiBwcmlvOiIxMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDMuMTQpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQgdXNlX2RlZmF1bHRfa2VybmVsID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fMy4xNCJ9fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmE2MjMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKQEAgLTAsMCArMSwyNiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IldvdWxkIHlvdSBsaWtlIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOGRiMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tcnRfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1wcmVlbXB0LXJ0LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiZjM1OTkyZjgwYzgxZGM1ZmExYTk3MTY1ZGZkNWNiYjg0NjYxZjdjYiIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gIjFiNTM0YjJmOGJiZTliOGE3NzMyNjhjZmEzMGE0ODUwMzQ2ZjZmNWYiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2U3OTg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV8zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTliYTBhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI2Y2RlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvZWRnZXJvdXRlciIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9lZGdlcm91dGVyIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KK1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiZGJlNWI1MmU5M2ZmMTE0YjJjMGY1ZGE2ZjZhZjkxZjUyYzE4ZjJiOCIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiNmVkZGJmNDc4NzVlZjQ4ZGRjNTg2NDk1N2E3YjYzMzYzMTAwNzgyYiIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNGFlZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2VkZ2Vyb3V0ZXIiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvZWRnZXJvdXRlciIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvLmdpdGlnbm9yZSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjLy5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NGY3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCkBAIC0wLDAgKzEsODcgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jb25mCisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRToge3s9bWFjaGluZX19CisKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3Ige3s9bWFjaGluZX19IHN5c3RlbXMKKworVEFSR0VUX0ZQVSA9ICIiCisKK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6InR1bmVmaWxlIiBwcmlvOiI0MCIgbXNnOiJXaGljaCBtYWNoaW5lIHR1bmluZyB3b3VsZCB5b3UgbGlrZSB0byB1c2U/IiBkZWZhdWx0OiJ0dW5lX3BwY2UzMDBjMyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3BwYzQ3NiIgbXNnOiJwcGM0NzYgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wcGM2MDNlIiBtc2c6InBwYzYwM2UgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wcGM3NDAwIiBtc2c6InBwYzc0MDAgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wcGNlMzAwYzIiIG1zZzoicHBjZTMwMGMyIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfcHBjZTMwMGMzIiBtc2c6InBwY2UzMDBjMyB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3BwY2U1MDAiIG1zZzoicHBjZTUwMCB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3BwY2U1MDBtYyIgbXNnOiJwcGNlNTAwbWMgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wcGNlNTAwdjIiIG1zZzoicHBjZTUwMHYyIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfcHBjZTU1MDAiIG1zZzoicHBjZTU1MDAgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wcGNlNjUwMCIgbXNnOiJwcGNlNjUwMCB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3Bvd2VyNSIgbXNnOiJwb3dlcjUgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wb3dlcjYiIG1zZzoicG93ZXI2IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfcG93ZXI3IiBtc2c6InBvd2VyNyB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3BwYzQ3NiI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNDc2LmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfcHBjNjAzZSI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNjAzZS5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3BwYzc0MDAiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzc0MDAuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9wcGNlMzAwYzIiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2UzMDBjMi5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3BwY2UzMDBjMyI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMzLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfcHBjZTUwMCI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMC5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3BwY2U1MDBtYyI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMG1jLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfcHBjZTUwMHYyIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwdjIuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9wcGNlNTUwMCI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTU1MDAuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9wcGNlNjUwMCI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTY1MDAuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9wb3dlcjUiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNS5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3Bvd2VyNiI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI2LmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfcG93ZXI3IjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjcuaW5jCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAidUltYWdlIgorCitFWFRSQV9JTUFHRURFUEVORFMgKz0gInUtYm9vdCIKK1VCT09UX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gIk1QQzgzMTVFUkRCX2NvbmZpZyIKKworU0VSSUFMX0NPTlNPTEUgPSAiMTE1MjAwIHR0eVMwIgorCitNQUNISU5FX0ZFQVRVUkVTID0gImtleWJvYXJkIHBjaSBleHQyIGV4dDMgc2VyaWFsIgorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiBwcmVmZXJyZWRfa2VybmVsID0gImxpbnV4LXlvY3RvLWN1c3RvbSIgfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tZGV2IiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIiBvciBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiIDogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorCit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsID0ga2VybmVsX2Nob2ljZS5zcGxpdCgnXycpWzBdIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24gPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMV0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gInt7PXByZWZlcnJlZF9rZXJuZWx9fSIKK1BSRUZFUlJFRF9WRVJTSU9OX3t7PXByZWZlcnJlZF9rZXJuZWx9fSA/PSAie3s9cHJlZmVycmVkX2tlcm5lbF92ZXJzaW9ufX0lIgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ4c2VydmVyIiBwcmlvOiI1MCIgbXNnOiJEbyB5b3UgbmVlZCBzdXBwb3J0IGZvciBYPyAoeS9uKSIgZGVmYXVsdDoieSIgfX0KK3t7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA/PSAieHNlcnZlci14b3JnIgorWFNFUlZFUiA/PSAieHNlcnZlci14b3JnIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgIHhmODYtdmlkZW8tZmJkZXYiCisKK1BSRUZFUlJFRF9WRVJTSU9OX3UtYm9vdCA/PSAidjIwMTUuMDElIgore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToidWJvb3RfZW50cnlwb2ludCIgcHJpbzoiNDAiIG1zZzoiUGxlYXNlIHNwZWNpZnkgYSB2YWx1ZSBmb3IgVUJPT1RfRU5UUllQT0lOVDoiIGRlZmF1bHQ6IjB4MDAwMDAwMDAiIH19CitVQk9PVF9FTlRSWVBPSU5UID0gInt7PXVib290X2VudHJ5cG9pbnR9fSIKKwore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToia2VybmVsX2RldmljZXRyZWUiIHByaW86IjQwIiBtc2c6IlBsZWFzZSBzcGVjaWZ5IGEgW2FyY2gvcG93ZXJwYy9ib290L2R0cy94eHhdIHZhbHVlIGZvciBLRVJORUxfREVWSUNFVFJFRToiIGRlZmF1bHQ6Im1wYzgzMTVlcmRiLmR0cyIgfX0KK0tFUk5FTF9ERVZJQ0VUUkVFID0gIiR7U30vYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3t7PWtlcm5lbF9kZXZpY2V0cmVlfX0iCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPSAiIGtlcm5lbC1tb2R1bGVzIgorCitJTUFHRV9GU1RZUEVTID89ICJqZmZzMiB0YXIuYnoyIgorSkZGUzJfRVJBU0VCTE9DSyA9ICIweDQwMDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwZDkyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19IGZpbGVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGM5MjY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBwcmVlbXB0LXJ0CitkZWZpbmUgS0FSQ0ggcG93ZXJwYworCitpbmNsdWRlIHt7PW1hcF9wcmVlbXB0X3J0X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ExZDM1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBzdGFuZGFyZAorZGVmaW5lIEtBUkNIIHBvd2VycGMKKworaW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJmOTRiMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXRpbnkuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgdGlueQorZGVmaW5lIEtBUkNIIHBvd2VycGMKKworaW5jbHVkZSB7ez1tYXBfdGlueV9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NDg5ZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODI3NTllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2Y3NDdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZmUxZmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpAQCAtMCwwICsxLDE2NCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNmZworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdBUk5JTkcKKy4KKy4gVGhpcyBmaWxlIGlzIGEga2VybmVsIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQsIGFuZCBub3QgYSBmdWxsIGtlcm5lbAorLiBjb25maWd1cmF0aW9uIGZpbGUuICBUaGUgZmluYWwga2VybmVsIGNvbmZpZ3VyYXRpb24gaXMgbWFkZSB1cCBvZgorLiBhbiBhc3NlbWJseSBvZiBwcm9jZXNzZWQgZnJhZ21lbnRzLCBlYWNoIG9mIHdoaWNoIGlzIGRlc2lnbmVkIHRvCisuIGNhcHR1cmUgYSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBmaW5hbCBjb25maWd1cmF0aW9uIChlLmcuIHBsYXRmb3JtCisuIGNvbmZpZ3VyYXRpb24sIGZlYXR1cmUgY29uZmlndXJhdGlvbiwgYW5kIGJvYXJkIHNwZWNpZmljIGhhcmR3YXJlCisuIGNvbmZpZ3VyYXRpb24pLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24ga2VybmVsIGNvbmZpZ3VyYXRpb24sIHBsZWFzZQorLiBjb25zdWx0IHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24uCisuCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHX1BQQ184M3h4PXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCitDT05GSUdfTVBDODMxeF9SREI9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfUENJPXkKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9PRl9QQVJUUz15CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9DRklfQU1EU1REPXkKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19NVERfTkFORD15CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKK0NPTkZJR19HSUFORkFSPXkKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR184eHh4X1dEVD15CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19JMkNfTVBDPXkKKworQ09ORklHX1NFTlNPUlNfTE03NT15CisKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworQ09ORklHX0VFUFJPTV9BVDI0PXkKKworIworIyBTUEkgc3VwcG9ydAorIworQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX01QQzh4eHg9eQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCitDT05GSUdfSFdNT049eQorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NHPXkKK0NPTkZJR19TQ1NJX0xPR0dJTkc9eQorCitDT05GSUdfQVRBPXkKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CitDT05GSUdfU0FUQV9GU0w9eQorQ09ORklHX0FUQV9TRkY9eQorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCPW0KK0NPTkZJR19VU0JfREVWSUNFRlM9eQorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1VTQl9FSENJX0hDRD1tCitDT05GSUdfVVNCX0VIQ0lfRlNMPXkKK0NPTkZJR19VU0JfU1RPUkFHRT1tCisKKyMKKyMgUmVhbCBUaW1lIENsb2NrCisjCitDT05GSUdfUlRDX0NMQVNTPXkKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0RTMTMwNz15CisKK0NPTkZJR19LR0RCXzgyNTA9bQorCitDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TPW0KKworQ09ORklHX0ZTTF9ETUE9eQorCitDT05GSUdfTU1DPXkKK0NPTkZJR19NTUNfU1BJPW0KKworQ09ORklHX1VTQl9GU0xfTVBIX0RSX09GPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FhYzhiMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5zY2MKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS5jZmcKKworaW5jbHVkZSBjZmcvdXNiLW1hc3Mtc3RvcmFnZS5zY2MKK2luY2x1ZGUgY2ZnL2ZzL3ZmYXQuc2NjCisKK2luY2x1ZGUgY2ZnL2RtYWVuZ2luZS5zY2MKKwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZworaW5jbHVkZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWQ2OTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKQEAgLTAsMCArMSw1IEBACit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidXNlX2RlZmF1bHRfa2VybmVsIiBwcmlvOiIxMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDMuMTkpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQgdXNlX2RlZmF1bHRfa2VybmVsID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fMy4xOSJ9fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTYyMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKQEAgLTAsMCArMSwyNiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IldvdWxkIHlvdSBsaWtlIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EyNTQ0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tcnRfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1wcmVlbXB0LXJ0LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiZjM1OTkyZjgwYzgxZGM1ZmExYTk3MTY1ZGZkNWNiYjg0NjYxZjdjYiIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gIjFiNTM0YjJmOGJiZTliOGE3NzMyNjhjZmEzMGE0ODUwMzQ2ZjZmNWYiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzFjY2JjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGU4MmZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ODgzODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkOWU4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2UxY2JkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpAQCAtMCwwICsxLDc0IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY29uZgorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IHt7PW1hY2hpbmV9fQorCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHt7PW1hY2hpbmV9fSBzeXN0ZW1zCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tY3VzdG9tIiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1kZXYiIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iIG9yIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiIgOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMF0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbiA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVsxXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorUFJFRkVSUkVEX1ZFUlNJT05fe3s9cHJlZmVycmVkX2tlcm5lbH19ID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsX3ZlcnNpb259fSUiCisKK3t7IGlmIHFlbXVhcmNoID09ICJpMzg2IiBvciBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczEgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMiA/PSAibWVzYSIKKwore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToicWVtdWFyY2giIHByaW86IjUiIG1zZzoiV2hpY2ggcWVtdSBhcmNoaXRlY3R1cmUgd291bGQgeW91IGxpa2UgdG8gdXNlPyIgZGVmYXVsdDoiaTM4NiIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJpMzg2IiBtc2c6ImkzODYgICAgKDMyLWJpdCkiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieDg2XzY0IiBtc2c6Ing4Nl82NCAgKDY0LWJpdCkiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoiYXJtIiBtc2c6IkFSTSAgICAgKDMyLWJpdCkiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoicG93ZXJwYyIgbXNnOiJQb3dlclBDICgzMi1iaXQpIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6Im1pcHMiIG1zZzoiTUlQUyAgICAoMzItYml0KSIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJtaXBzNjQiIG1zZzoiTUlQUzY0ICAoNjQtYml0KSIgfX0KK3t7IGlmIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LmluYwore3sgaWYgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19CityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCitERUZBVUxUVFVORSA/PSAiY29yZTItNjQiCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZTIuaW5jCit7eyBpZiBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjZlanMuaW5jCit7eyBpZiBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19CityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNzQwMC5pbmMKK3t7IGlmIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzIuaW5jCit7eyBpZiBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzNjQuaW5jCisKK3t7IGlmIHFlbXVhcmNoID09ICJpMzg2IiBvciBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK01BQ0hJTkVfRkVBVFVSRVMgKz0gIng4NiIKK0tFUk5FTF9JTUFHRVRZUEUgPSAiYnpJbWFnZSIKK1NFUklBTF9DT05TT0xFID0gIjExNTIwMCB0dHlTMCIKK1hTRVJWRVIgPSAieHNlcnZlci14b3JnIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnbWVzYS1kcml2ZXItc3dyYXN0JywgJycsIGQpfSBcCisgICAgICAgICAgIHhmODYtaW5wdXQtdm1tb3VzZSBcCisgICAgICAgICAgIHhmODYtaW5wdXQta2V5Ym9hcmQgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgeGY4Ni12aWRlby12bXdhcmUiCisKK3t7IGlmIHFlbXVhcmNoID09ICJhcm0iOiB9fQorS0VSTkVMX0lNQUdFVFlQRSA9ICJ6SW1hZ2UiCitTRVJJQUxfQ09OU09MRSA9ICIxMTUyMDAgdHR5QU1BMCIKKwore3sgaWYgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQorS0VSTkVMX0lNQUdFVFlQRSA9ICJ2bWxpbnV4IgorU0VSSUFMX0NPTlNPTEUgPSAiMTE1MjAwIHR0eVMwIgorCit7eyBpZiBxZW11YXJjaCA9PSAibWlwcyIgb3IgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19CitLRVJORUxfSU1BR0VUWVBFID0gInZtbGludXgiCitLRVJORUxfQUxUX0lNQUdFVFlQRSA9ICJ2bWxpbnV4LmJpbiIKK1NFUklBTF9DT05TT0xFID0gIjExNTIwMCB0dHlTMCIKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPSAiIGtlcm5lbC1tb2R1bGVzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi9tYWNoaW5lLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24vbWFjaGluZS5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0MmQwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24vbWFjaGluZS5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7ez1tYWNoaW5lfX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24vbWFjaGluZS9pbnRlcmZhY2VzIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi9tYWNoaW5lL2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5Njc3NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24vbWFjaGluZS9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsNSBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duXzEuMC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd25fMS4wLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZDk5MWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duXzEuMC5iYmFwcGVuZApAQCAtMCwwICsxIEBACitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQyZDAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7PW1hY2hpbmV9fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZiBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JkZGU3OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS94b3JnLmNvbmYKQEAgLTAsMCArMSw3NyBAQAorCitTZWN0aW9uICJGaWxlcyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlS2V5Ym9hcmQiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICIvZGV2L2lucHV0L2J5LXBhdGgvcGxhdGZvcm0taTgwNDItc2VyaW8tMC1ldmVudC1rYmQiCisgICAgT3B0aW9uICAgICAgICAiWGtiUnVsZXMiICAgICJ4b3JnIgorICAgIE9wdGlvbiAgICAgICAgIlhrYk1vZGVsIiAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiWGtiTGF5b3V0IiAgICAidXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkNvbmZpZ3VyZWQgTW91c2UiCit7eyBpZiBxZW11YXJjaCA9PSAiYXJtIiBvciBxZW11YXJjaCA9PSAicG93ZXJwYyIgb3IgcWVtdWFyY2ggPT0gIm1pcHMiIG9yIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQorICAgIERyaXZlciAgICAgICAgIm1vdXNlIgore3sgaWYgcWVtdWFyY2ggPT0gImkzODYiIG9yIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQorICAgIERyaXZlciAgICAgICAgInZtbW91c2UiCisKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC9taWNlIgorICAgIE9wdGlvbiAgICAgICAgIlByb3RvY29sIiAgICAgICAgIkltUFMvMiIKKyAgICBPcHRpb24gICAgICAgICJaQXhpc01hcHBpbmciICAgICAgICAiNCA1IgorICAgIE9wdGlvbiAgICAgICAgIkVtdWxhdGUzQnV0dG9ucyIgICAgInRydWUiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIlFlbXUgVGFibGV0IgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCIKKyAgICBPcHRpb24gICAgICAgICJVU0IiICAgICAgICAgICAib24iCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIkRldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHcmFwaGljcyBDb250cm9sbGVyIgore3sgaWYgcWVtdWFyY2ggPT0gImFybSIgb3IgcWVtdWFyY2ggPT0gInBvd2VycGMiIG9yIHFlbXVhcmNoID09ICJtaXBzIiBvciBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KKyAgICBEcml2ZXIgICAgICAgICJmYmRldiIKK3t7IGlmIHFlbXVhcmNoID09ICJpMzg2IiBvciBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KKyAgICBEcml2ZXIgICAgICAgICJ2bXdhcmUiCisKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgT3B0aW9uICAgICAgICAiRFBNUyIKKyAgICAjIDEwMjR4NjAwIDU5Ljg1IEh6IChDVlQpIGhzeW5jOiAzNy4zNSBrSHo7IHBjbGs6IDQ5LjAwIE1IegorICAgIE1vZGVsaW5lICIxMDI0eDYwMF82MC4wMCIgICA0OS4wMCAgMTAyNCAxMDcyIDExNjggMTMxMiAgNjAwIDYwMyA2MTMgNjI0IC1oc3luYyArdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA2MEh6IChJbmR1c3RyeSBzdGFuZGFyZCkgaHN5bmM6IDMxLjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMjUuMiAgNjQwICA2NTYgIDc1MiAgODAwICAgIDQ4MCAgNDkwICA0OTIgIDUyNSAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzJIeiAoVkVTQSkgaHN5bmM6IDM3LjlrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NjQgIDcwNCAgODMyICAgIDQ4MCAgNDg5ICA0OTEgIDUyMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzVIeiAoVkVTQSkgaHN5bmM6IDM3LjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NTYgIDcyMCAgODQwICAgIDQ4MCAgNDgxICA0ODQgIDUwMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgODVIeiAoVkVTQSkgaHN5bmM6IDQzLjNrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzYuMCAgNjQwICA2OTYgIDc1MiAgODMyICAgIDQ4MCAgNDgxICA0ODQgIDUwOSAtaHN5bmMgLXZzeW5jCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBEZXZpY2UgICAgICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIE1vbml0b3IgICAgICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgU3ViU2VjdGlvbiAiRGlzcGxheSIKKyAgICAgICAgTW9kZXMgICAgICI2NDB4NDgwIgorICAgIEVuZFN1YlNlY3Rpb24KK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyTGF5b3V0IgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgTGF5b3V0IgorICAgIFNjcmVlbiAgICAgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIElucHV0RGV2aWNlICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgICMgSW5wdXREZXZpY2UgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgSW5wdXREZXZpY2UgICAgIlFFTVUgVGFibGV0IgorICAgIE9wdGlvbiAgICAgICAgICJBbGxvd0VtcHR5SW5wdXQiICJubyIKK0VuZFNlY3Rpb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkOTkxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kCkBAIC0wLDAgKzEgQEAKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmI1MjgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0gZmlsZXMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWFmZmI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBwcmVlbXB0LXJ0CitkZWZpbmUgS0FSQ0gge3s9cWVtdWFyY2h9fQorCitpbmNsdWRlIHt7PW1hcF9wcmVlbXB0X3J0X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhMDNlYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCkBAIC0wLDAgKzEsMTkgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBzdGFuZGFyZAorZGVmaW5lIEtBUkNIIHt7PXFlbXVhcmNofX0KKwore3sgaWYgcWVtdWFyY2ggPT0gImkzODYiIG9yIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQoraW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgcWVtdWFyY2ggPT0gImFybSI6IH19CitpbmNsdWRlIGJzcC9hcm0tdmVyc2F0aWxlLTkyNmVqcy9hcm0tdmVyc2F0aWxlLTkyNmVqcy1zdGFuZGFyZAore3sgaWYgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQoraW5jbHVkZSBic3AvcWVtdS1wcGMzMi9xZW11LXBwYzMyLXN0YW5kYXJkCit7eyBpZiBxZW11YXJjaCA9PSAibWlwcyI6IH19CitpbmNsdWRlIGJzcC9tdGktbWFsdGEzMi9tdGktbWFsdGEzMi1iZS1zdGFuZGFyZAore3sgaWYgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19CitpbmNsdWRlIGJzcC9tdGktbWFsdGE2NC9tdGktbWFsdGE2NC1iZS1zdGFuZGFyZAore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMwOThmZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXRpbnkuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgdGlueQorZGVmaW5lIEtBUkNIIHt7PXFlbXVhcmNofX0KKworaW5jbHVkZSB7ez1tYXBfdGlueV9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZWZkY2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyNzU5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM1OWRhYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2MDc4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jZmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDFlMDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpAQCAtMCwwICsxLDUgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5zY2MKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS5jZmcKKwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZworaW5jbHVkZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWQ2OTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKQEAgLTAsMCArMSw1IEBACit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidXNlX2RlZmF1bHRfa2VybmVsIiBwcmlvOiIxMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDMuMTkpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQgdXNlX2RlZmF1bHRfa2VybmVsID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fMy4xOSJ9fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNDc5YmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKQEAgLTAsMCArMSw1NiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgeW91ciBuZXcgQlNQIGJyYW5jaCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGFuIGV4aXN0aW5nIG1hY2hpbmUgYnJhbmNoIHRvIHVzZSBmb3IgdGhpcyBCU1A6IiBkZWZhdWx0OiJzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcWVtdXBwYyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Ing4Nl82NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjLTY0IiAgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMtNjQiICBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAibWlwcyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9tdGktbWFsdGEzMiIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHM2NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9tdGktbWFsdGE2NCIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IldvdWxkIHlvdSBsaWtlIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1ZTFhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSw2MiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tcnRfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19Igore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImFybSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiYXJtIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiYXJtIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9xZW11cHBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1wcmVlbXB0LXJ0LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiZjM1OTkyZjgwYzgxZGM1ZmExYTk3MTY1ZGZkNWNiYjg0NjYxZjdjYiIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gIjFiNTM0YjJmOGJiZTliOGE3NzMyNjhjZmEzMGE0ODUwMzQ2ZjZmNWYiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NzljZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSw2MiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV8zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJhcm0iIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gImFybSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJhcm0iIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvY29tbW9uLXBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiMDE0M2M2ZWJiNGEyZDYzYjI0MWRmNWY2MDhiMTlmNDgzZjdlYjllMCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiOGY1NWJlZTI0MDMxNzZhNTBjYzBkZDQxODExYWE2MGZjZjA3MjQzYyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdlZjRiYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDYyIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImFybSIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImFybSIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9jb21tb24tcGMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIwMTQzYzZlYmI0YTJkNjNiMjQxZGY1ZjYwOGIxOWY0ODNmN2ViOWUwIgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4ZjU1YmVlMjQwMzE3NmE1MGNjMGRkNDE4MTFhYTYwZmNmMDcyNDNjIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNjAxOWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsNjIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB5b3VyIG5ldyBCU1AgYnJhbmNoIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYW4gZXhpc3RpbmcgbWFjaGluZSBicmFuY2ggdG8gdXNlIGZvciB0aGlzIEJTUDoiIGRlZmF1bHQ6InN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9xZW11cHBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYyIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMtNjQiICBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYy02NCIgIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwcyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL210aS1tYWx0YTMyIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL210aS1tYWx0YTY0IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjAxNDNjNmViYjRhMmQ2M2IyNDFkZjVmNjA4YjE5ZjQ4M2Y3ZWI5ZTAiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4ZjU1YmVlMjQwMzE3NmE1MGNjMGRkNDE4MTFhYTYwZmNmMDcyNDNjIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0Nzk4YjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsNjIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB5b3VyIG5ldyBCU1AgYnJhbmNoIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYW4gZXhpc3RpbmcgbWFjaGluZSBicmFuY2ggdG8gdXNlIGZvciB0aGlzIEJTUDoiIGRlZmF1bHQ6InN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9xZW11cHBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYyIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMtNjQiICBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYy02NCIgIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAibWlwcyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9tdGktbWFsdGEzMiIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9tdGktbWFsdGE2NCIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjAxNDNjNmViYjRhMmQ2M2IyNDFkZjVmNjA4YjE5ZjQ4M2Y3ZWI5ZTAiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4ZjU1YmVlMjQwMzE3NmE1MGNjMGRkNDE4MTFhYTYwZmNmMDcyNDNjIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvLmdpdGlnbm9yZSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC8uZ2l0aWdub3JlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRiODI1MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpAQCAtMCwwICsxLDY1IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY29uZgorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IHt7PW1hY2hpbmV9fQorCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHt7PW1hY2hpbmV9fSBzeXN0ZW1zCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tY3VzdG9tIiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1kZXYiIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iIG9yIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiIgOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMF0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbiA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVsxXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorUFJFRkVSUkVEX1ZFUlNJT05fe3s9cHJlZmVycmVkX2tlcm5lbH19ID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsX3ZlcnNpb259fSUiCisKK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6InR1bmVmaWxlIiBwcmlvOiI0MCIgbXNnOiJXaGljaCBtYWNoaW5lIHR1bmluZyB3b3VsZCB5b3UgbGlrZSB0byB1c2U/IiBkZWZhdWx0OiJ0dW5lX2NvcmUyIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfY29yZTIiIG1zZzoiQ29yZTIgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9jb3JlaTciIG1zZzoiQ29yZWk3IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfY29yZTIiOiB9fQorREVGQVVMVFRVTkUgPz0gImNvcmUyLTY0IgorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfY29yZWk3IjogfX0KK0RFRkFVTFRUVU5FID89ICJjb3JlaTctNjQiCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZWk3LmluYworCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni1iYXNlLmluYworCitNQUNISU5FX0ZFQVRVUkVTICs9ICJ3aWZpIGVmaSBwY2Jpb3MiCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InhzZXJ2ZXIiIHByaW86IjUwIiBtc2c6IkRvIHlvdSBuZWVkIHN1cHBvcnQgZm9yIFg/ICh5L24pIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiB4c2VydmVyID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6InhzZXJ2ZXJfY2hvaWNlIiBwcmlvOiI1MCIgbXNnOiJQbGVhc2Ugc2VsZWN0IGFuIHhzZXJ2ZXIgZm9yIHRoaXMgbWFjaGluZToiIGRlZmF1bHQ6InhzZXJ2ZXJfaTkxNSIgfX0KKwore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfdmVzYSIgbXNnOiJWRVNBIHhzZXJ2ZXIgc3VwcG9ydCIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX2k5MTUiIG1zZzoiaTkxNSB4c2VydmVyIHN1cHBvcnQiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9pOTY1IiBtc2c6Imk5NjUgeHNlcnZlciBzdXBwb3J0IiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfZmJkZXYiIG1zZzoiZmJkZXYgeHNlcnZlciBzdXBwb3J0IiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfbW9kZXNldHRpbmciIG1zZzoibW9kZXNldHRpbmcgeHNlcnZlciBzdXBwb3J0IiB9fQore3sgaWYgeHNlcnZlciA9PSAieSI6IH19CitYU0VSVkVSID89ICIke1hTRVJWRVJfWDg2X0JBU0V9IFwKKyAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9FWFR9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl92ZXNhIjogfX0KKyAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9WRVNBfSBcCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfaTkxNSI6IH19CisgICAgICAgICAgICR7WFNFUlZFUl9YODZfSTkxNX0gXAore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX2k5NjUiOiB9fQorICAgICAgICAgICAke1hTRVJWRVJfWDg2X0k5NjV9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl9mYmRldiI6IH19CisgICAgICAgICAgICR7WFNFUlZFUl9YODZfRkJERVZ9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl9tb2Rlc2V0dGluZyI6IH19CisgICAgICAgICAgICR7WFNFUlZFUl9YODZfTU9ERVNFVFRJTkd9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fQorICAgICAgICAgICAiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgKz0gImxpbnV4LWZpcm13YXJlIHY4NmQgZWVlLWFjcGktc2NyaXB0cyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9wbi1tYXRjaGJveC1wYW5lbC0yID0gIiAtLXdpdGgtYmF0dGVyeT1hY3BpIgorCitHTElCQ19BRERPTlMgPSAibnB0bCIKKwore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX3Zlc2EiOiB9fQorQVBQRU5EICs9ICJ2aWRlbz12ZXNhZmIgdmdhPTB4MzE4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDJkMDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7ez1tYWNoaW5lfX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZiBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzlhMGYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUveG9yZy5jb25mCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fSB0aGlzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDgzMDAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZApAQCAtMCwwICsxLDIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMGQ5MmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19IGZpbGVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1MzIwYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpAQCAtMCwwICsxLDE2IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBwcmVlbXB0LXJ0CitkZWZpbmUgS0FSQ0ggeDg2XzY0CisKK2luY2x1ZGUge3s9bWFwX3ByZWVtcHRfcnRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYworCisjIGRlZmF1bHQgcG9saWN5IGZvciBwcmVlbXB0LXJ0IGtlcm5lbHMKK2luY2x1ZGUgY2ZnL3VzYi1tYXNzLXN0b3JhZ2Uuc2NjCitpbmNsdWRlIGNmZy9ib290LWxpdmUuc2NjCitpbmNsdWRlIGZlYXR1cmVzL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvcHJvZmlsaW5nL3Byb2ZpbGluZy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OWY5NjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCkBAIC0wLDAgKzEsMTYgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBzdGFuZGFyZAorZGVmaW5lIEtBUkNIIHg4Nl82NAorCitpbmNsdWRlIHt7PW1hcF9zdGFuZGFyZF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCisKKyMgZGVmYXVsdCBwb2xpY3kgZm9yIHN0YW5kYXJkIGtlcm5lbHMKK2luY2x1ZGUgY2ZnL3VzYi1tYXNzLXN0b3JhZ2Uuc2NjCitpbmNsdWRlIGNmZy9ib290LWxpdmUuc2NjCitpbmNsdWRlIGZlYXR1cmVzL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvcHJvZmlsaW5nL3Byb2ZpbGluZy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjIxNDMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS10aW55LnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHRpbnkKK2RlZmluZSBLQVJDSCB4ODZfNjQKKworaW5jbHVkZSB7ez1tYXBfdGlueV9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzQ4OWU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyNzU5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmNzQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjkwZGRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpAQCAtMCwwICsxLDQ4IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY2ZnCitDT05GSUdfUFJJTlRLPXkKKworIyBCYXNpYyBoYXJkd2FyZSBzdXBwb3J0IGZvciB0aGUgYm94IC0gbmV0d29yaywgVVNCLCBQQ0ksIHNvdW5kICAgICAgICAgICAgICAgICAgICAgCitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQVRBPXkKK0NPTkZJR19BVEFfR0VORVJJQz15CitDT05GSUdfQVRBX1NGRj15CitDT05GSUdfUENJPXkKK0NPTkZJR19NTUM9eQorQ09ORklHX01NQ19TREhDST15CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQj15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1I4MTY5PXkKK0NPTkZJR19QQVRBX1NDSD15CitDT05GSUdfTU1DX1NESENJX1BDST15CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19QQ0lFUE9SVEJVUz15CitDT05GSUdfTkVUPXkKK0NPTkZJR19VU0JfVUhDSV9IQ0Q9eQorQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU0c9eQorQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9IREFfSU5URUw9eQorCisjIE1ha2Ugc3VyZSB0aGVzZSBhcmUgb24sIG90aGVyd2lzZSB0aGUgYm9vdHVwIHdvbid0IGJlIGZ1biAgICAgICAgICAgICAgICAgICAgICAgICAKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVE1QRlM9eQorQ09ORklHX1BBQ0tFVD15CisKK0NPTkZJR19JMkM9eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorQ09ORklHX0FHUD15ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitDT05GSUdfUE09eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK0NPTkZJR19BQ1BJPXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorQ09ORklHX0lOUFVUPXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyMgTmVlZGVkIGZvciBib290aW5nIChhbmQgdXNpbmcpIFVTQiBtZW1vcnkgc3RpY2tzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorQ09ORklHX0JMS19ERVZfTE9PUD15ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitDT05GSUdfUkRfR1pJUD15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjdjMjkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpAQCAtMCwwICsxLDE0IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uc2NjCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0uY2ZnCisKK2luY2x1ZGUgZmVhdHVyZXMvc2VyaWFsLzgyNTAuc2NjCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfdmVzYSI6IH19CitpbmNsdWRlIGNmZy92ZXNhZmIuc2NjCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfaTkxNSIgb3IgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfaTk2NSI6IH19CitpbmNsdWRlIGZlYXR1cmVzL2k5MTUvaTkxNS5zY2MKKworaW5jbHVkZSBjZmcvdXNiLW1hc3Mtc3RvcmFnZS5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvcG93ZXIvaW50ZWwuc2NjCisKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKK2luY2x1ZGUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExZDY5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0wLDAgKzEsNSBAQAore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICgzLjE5KSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIHVzZV9kZWZhdWx0X2tlcm5lbCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzMuMTkifX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhNjIzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCkBAIC0wLDAgKzEsMjYgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19Igore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTI1NDQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXJ0XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gImYzNTk5MmY4MGM4MWRjNWZhMWE5NzE2NWRmZDVjYmI4NDY2MWY3Y2IiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tcnRfe3s9bWFjaGluZX19ID89ICIxYjUzNGIyZjhiYmU5YjhhNzczMjY4Y2ZhMzBhNDg1MDM0NmY2ZjVmIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MWNjYmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZTgyZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EwYjQ5NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjLTY0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYy02NCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJhNjNjMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjLTY0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYy02NCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC90YWdzLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvdGFncy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzE5NDI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvdGFncy5weQpAQCAtMCwwICsxLDQ5IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBwbGFjZSB0byBkZWZpbmUgY29tbW9uIGNvbnN0YW50cyBmb3IgdGhlCisjIFlvY3RvIEJTUCBUb29scy4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBpbnRlbC5jb20+CisjCisKK09QRU5fVEFHID0gICAgICJ7eyIKK0NMT1NFX1RBRyA9ICAgICJ9fSIKK0FTU0lHTl9UQUcgPSAgICJ7ez0iCitJTlBVVF9UQUcgPSAgICAiaW5wdXQiCitJRl9UQUcgPSAgICAgICAiaWYiCitGSUxFTkFNRV9UQUcgPSAieW9jdG8tYnNwLWZpbGVuYW1lIgorRElSTkFNRV9UQUcgPSAgInlvY3RvLWJzcC1kaXJuYW1lIgorCitJTkRFTlRfU1RSID0gICIgICAgIgorCitCTEFOS0xJTkVfU1RSID0gIm9mLndyaXRlKFwiXFxuXCIpIgorTk9STUFMX1NUQVJUID0gICJvZi53cml0ZSIKK09QRU5fU1RBUlQgPSAgICAiY3VycmVudF9maWxlID0iCisKK0lOUFVUX1RZUEVfUFJPUEVSVFkgPSAidHlwZSIKKworU1JDX1VSSV9GSUxFID0gImZpbGU6Ly8iCisKK0dJVF9DSEVDS19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tZGV2LmdpdCIKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDRkM2U2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTM4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBEZXZlbG9wbWVudCB0b29sIC0gdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHBsdWdpbnMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIiIiRGV2dG9vbCBwbHVnaW5zIG1vZHVsZSIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgbG9nZ2luZworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignZGV2dG9vbCcpCisKKworY2xhc3MgRGV2dG9vbEVycm9yKEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIGZvciBoYW5kbGluZyBkZXZ0b29sIGVycm9ycyIiIgorICAgIHBhc3MKKworCitkZWYgZXhlY19idWlsZF9lbnZfY29tbWFuZChpbml0X3BhdGgsIGJ1aWxkZGlyLCBjbWQsIHdhdGNoPUZhbHNlLCAqKm9wdGlvbnMpOgorICAgICIiIlJ1biBhIHByb2dyYW0gaW4gYml0YmFrZSBidWlsZCBjb250ZXh0IiIiCisgICAgaW1wb3J0IGJiCisgICAgaWYgbm90ICdjd2QnIGluIG9wdGlvbnM6CisgICAgICAgIG9wdGlvbnNbImN3ZCJdID0gYnVpbGRkaXIKKyAgICBpZiBpbml0X3BhdGg6CisgICAgICAgICMgQXMgdGhlIE9FIGluaXQgc2NyaXB0IG1ha2VzIHVzZSBvZiBCQVNIX1NPVVJDRSB0byBkZXRlcm1pbmUgT0VST09ULAorICAgICAgICAjIGFuZCBjYW4ndCBkZXRlcm1pbmUgaXQgd2hlbiBydW5uaW5nIHVuZGVyIGRhc2gsIHdlIG5lZWQgdG8gc2V0CisgICAgICAgICMgdGhlIGV4ZWN1dGFibGUgdG8gYmFzaCB0byBjb3JyZWN0bHkgc2V0IHRoaW5ncyB1cAorICAgICAgICBpZiBub3QgJ2V4ZWN1dGFibGUnIGluIG9wdGlvbnM6CisgICAgICAgICAgICBvcHRpb25zWydleGVjdXRhYmxlJ10gPSAnYmFzaCcKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdFeGVjdXRpbmcgY29tbWFuZDogIiVzIiB1c2luZyBpbml0IHBhdGggJXMnICUgKGNtZCwgaW5pdF9wYXRoKSkKKyAgICAgICAgaW5pdF9wcmVmaXggPSAnLiAlcyAlcyA+IC9kZXYvbnVsbCAmJiAnICUgKGluaXRfcGF0aCwgYnVpbGRkaXIpCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdFeGVjdXRpbmcgY29tbWFuZCAiJXMiJyAlIGNtZCkKKyAgICAgICAgaW5pdF9wcmVmaXggPSAnJworICAgIGlmIHdhdGNoOgorICAgICAgICBpZiBzeXMuc3Rkb3V0LmlzYXR0eSgpOgorICAgICAgICAgICAgIyBGb29sIGJpdGJha2UgaW50byB0aGlua2luZyBpdCdzIG91dHB1dHRpbmcgdG8gYSB0ZXJtaW5hbCAoYmVjYXVzZSBpdCBpcywgaW5kaXJlY3RseSkKKyAgICAgICAgICAgIGNtZCA9ICdzY3JpcHQgLWUgLXEgLWMgIiVzIiAvZGV2L251bGwnICUgY21kCisgICAgICAgIHJldHVybiBleGVjX3dhdGNoKCclcyVzJyAlIChpbml0X3ByZWZpeCwgY21kKSwgKipvcHRpb25zKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBiYi5wcm9jZXNzLnJ1bignJXMlcycgJSAoaW5pdF9wcmVmaXgsIGNtZCksICoqb3B0aW9ucykKKworZGVmIGV4ZWNfd2F0Y2goY21kLCAqKm9wdGlvbnMpOgorICAgICIiIlJ1biBwcm9ncmFtIHdpdGggc3Rkb3V0IHNob3duIG9uIHN5cy5zdGRvdXQiIiIKKyAgICBpbXBvcnQgYmIKKyAgICBpZiBpc2luc3RhbmNlKGNtZCwgYmFzZXN0cmluZykgYW5kIG5vdCAic2hlbGwiIGluIG9wdGlvbnM6CisgICAgICAgIG9wdGlvbnNbInNoZWxsIl0gPSBUcnVlCisKKyAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsICoqb3B0aW9ucworICAgICkKKworICAgIGJ1ZiA9ICcnCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgb3V0ID0gcHJvY2Vzcy5zdGRvdXQucmVhZCgxKQorICAgICAgICBpZiBvdXQ6CisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKG91dCkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgYnVmICs9IG91dAorICAgICAgICBlbGlmIG91dCA9PSAnJyBhbmQgcHJvY2Vzcy5wb2xsKCkgIT0gTm9uZToKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICBpZiBwcm9jZXNzLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgcmFpc2UgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvcihjbWQsIHByb2Nlc3MucmV0dXJuY29kZSwgYnVmLCBOb25lKQorCisgICAgcmV0dXJuIGJ1ZiwgTm9uZQorCitkZWYgZXhlY19mYWtlcm9vdChkLCBjbWQsICoqa3dhcmdzKToKKyAgICAiIiJSdW4gYSBjb21tYW5kIHVuZGVyIGZha2Vyb290IChwc2V1ZG8sIGluIGZhY3QpIHNvIHRoYXQgaXQgcGlja3MgdXAgdGhlIGFwcHJvcHJpYXRlIGZpbGUgcGVybWlzc2lvbnMiIiIKKyAgICAjIEdyYWIgdGhlIGNvbW1hbmQgYW5kIGNoZWNrIGl0IGFjdHVhbGx5IGV4aXN0cworICAgIGZha2Vyb290Y21kID0gZC5nZXRWYXIoJ0ZBS0VST09UQ01EJywgVHJ1ZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmFrZXJvb3RjbWQpOgorICAgICAgICBsb2dnZXIuZXJyb3IoJ3BzZXVkbyBleGVjdXRhYmxlICVzIGNvdWxkIG5vdCBiZSBmb3VuZCAtIGhhdmUgeW91IHJ1biBhIGJ1aWxkIHlldD8gcHNldWRvLW5hdGl2ZSBzaG91bGQgaW5zdGFsbCB0aGlzIGFuZCBpZiB5b3UgaGF2ZSBydW4gYW55IGJ1aWxkIHRoZW4gdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGJ1aWx0JykKKyAgICAgICAgcmV0dXJuIDIKKyAgICAjIFNldCB1cCB0aGUgYXBwcm9wcmlhdGUgZW52aXJvbm1lbnQKKyAgICBuZXdlbnYgPSBkaWN0KG9zLmVudmlyb24pCisgICAgZmFrZXJvb3RlbnYgPSBkLmdldFZhcignRkFLRVJPT1RFTlYnLCBUcnVlKQorICAgIGZvciB2YXJ2YWx1ZSBpbiBmYWtlcm9vdGVudi5zcGxpdCgpOgorICAgICAgICBpZiAnPScgaW4gdmFydmFsdWU6CisgICAgICAgICAgICBzcGxpdHZhbCA9IHZhcnZhbHVlLnNwbGl0KCc9JywgMSkKKyAgICAgICAgICAgIG5ld2VudltzcGxpdHZhbFswXV0gPSBzcGxpdHZhbFsxXQorICAgIHJldHVybiBzdWJwcm9jZXNzLmNhbGwoIiVzICVzIiAlIChmYWtlcm9vdGNtZCwgY21kKSwgZW52PW5ld2VudiwgKiprd2FyZ3MpCisKK2RlZiBzZXR1cF90aW5mb2lsKGNvbmZpZ19vbmx5PUZhbHNlKToKKyAgICAiIiJJbml0aWFsaXplIHRpbmZvaWwgYXBpIGZyb20gYml0YmFrZSIiIgorICAgIGltcG9ydCBzY3JpcHRwYXRoCisgICAgYml0YmFrZXBhdGggPSBzY3JpcHRwYXRoLmFkZF9iaXRiYWtlX2xpYl9wYXRoKCkKKyAgICBpZiBub3QgYml0YmFrZXBhdGg6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGZpbmQgYml0YmFrZSBieSBzZWFyY2hpbmcgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGlzIHNjcmlwdCBvciBQQVRIIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGltcG9ydCBiYi50aW5mb2lsCisgICAgdGluZm9pbCA9IGJiLnRpbmZvaWwuVGluZm9pbCgpCisgICAgdGluZm9pbC5wcmVwYXJlKGNvbmZpZ19vbmx5KQorICAgIHRpbmZvaWwubG9nZ2VyLnNldExldmVsKGxvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbCgpKQorICAgIHJldHVybiB0aW5mb2lsCisKK2RlZiBnZXRfcmVjaXBlX2ZpbGUoY29va2VyLCBwbik6CisgICAgIiIiRmluZCByZWNpcGUgZmlsZSBjb3JyZXNwb25kaW5nIGEgcGFja2FnZSBuYW1lIiIiCisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisgICAgcmVjaXBlZmlsZSA9IG9lLnJlY2lwZXV0aWxzLnBuX3RvX3JlY2lwZShjb29rZXIsIHBuKQorICAgIGlmIG5vdCByZWNpcGVmaWxlOgorICAgICAgICBza2lwcmVhc29ucyA9IG9lLnJlY2lwZXV0aWxzLmdldF91bmF2YWlsYWJsZV9yZWFzb25zKGNvb2tlciwgcG4pCisgICAgICAgIGlmIHNraXByZWFzb25zOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdcbicuam9pbihza2lwcmVhc29ucykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGFueSByZWNpcGUgZmlsZSBtYXRjaGluZyAlcyIgJSBwbikKKyAgICByZXR1cm4gcmVjaXBlZmlsZQorCitkZWYgcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgcG4sIGFwcGVuZHMpOgorICAgICIiIlBhcnNlIHJlY2lwZSBvZiBhIHBhY2thZ2UiIiIKKyAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKyAgICByZWNpcGVmaWxlID0gZ2V0X3JlY2lwZV9maWxlKHRpbmZvaWwuY29va2VyLCBwbikKKyAgICBpZiBub3QgcmVjaXBlZmlsZToKKyAgICAgICAgIyBFcnJvciBhbHJlYWR5IGxvZ2dlZAorICAgICAgICByZXR1cm4gTm9uZQorICAgIGlmIGFwcGVuZHM6CisgICAgICAgIGFwcGVuZF9maWxlcyA9IHRpbmZvaWwuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhyZWNpcGVmaWxlKQorICAgICAgICAjIEZpbHRlciBvdXQgYXBwZW5kcyBmcm9tIHRoZSB3b3Jrc3BhY2UKKyAgICAgICAgYXBwZW5kX2ZpbGVzID0gW3BhdGggZm9yIHBhdGggaW4gYXBwZW5kX2ZpbGVzIGlmCisgICAgICAgICAgICAgICAgICAgICAgICBub3QgcGF0aC5zdGFydHN3aXRoKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCldCisgICAgcmV0dXJuIG9lLnJlY2lwZXV0aWxzLnBhcnNlX3JlY2lwZShyZWNpcGVmaWxlLCBhcHBlbmRfZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2J1aWxkLWltYWdlLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2J1aWxkLWltYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMDE0MjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvYnVpbGQtaW1hZ2UucHkKQEAgLTAsMCArMSw5MSBAQAorIyBEZXZlbG9wbWVudCB0b29sIC0gYnVpbGQtaW1hZ2UgcGx1Z2luCisjCisjIENvcHlyaWdodCAoQykgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIiIiRGV2dG9vbCBwbHVnaW4gY29udGFpbmluZyB0aGUgYnVpbGQtaW1hZ2Ugc3ViY29tbWFuZC4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworCitmcm9tIGJiLnByb2Nlc3MgaW1wb3J0IEV4ZWN1dGlvbkVycm9yCitmcm9tIGRldnRvb2wgaW1wb3J0IGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQsIHNldHVwX3RpbmZvaWwsIHBhcnNlX3JlY2lwZQorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignZGV2dG9vbCcpCisKK2RlZiBfZ2V0X3JlY2lwZXMod29ya3NwYWNlLCBjb25maWcpOgorICAgICIiIkdldCBsaXN0IG9mIHRhcmdldCByZWNpcGVzIGZyb20gdGhlIHdvcmtzcGFjZS4iIiIKKyAgICByZXN1bHQgPSBbXQorICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKCkKKyAgICBmb3IgcmVjaXBlIGluIHdvcmtzcGFjZToKKyAgICAgICAgZGF0YSA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIHJlY2lwZSwgVHJ1ZSkKKyAgICAgICAgaWYgJ2NsYXNzLXRhcmdldCcgaW4gZGF0YS5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpLnNwbGl0KCc6Jyk6CisgICAgICAgICAgICBpZiByZWNpcGUgaW4gZGF0YS5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZWNpcGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJTa2lwcGluZyByZWNpcGUgJXMgYXMgaXQgZG9lc24ndCBwcm9kdWNlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFja2FnZSB3aXRoIHRoZSBzYW1lIG5hbWUiLCByZWNpcGUpCisgICAgdGluZm9pbC5zaHV0ZG93bigpCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgYnVpbGRfaW1hZ2UoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ2J1aWxkLWltYWdlJyBzdWJjb21tYW5kLiIiIgorICAgIGltYWdlID0gYXJncy5yZWNpcGUKKyAgICBhcHBlbmRmaWxlID0gb3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ2FwcGVuZHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzLmJiYXBwZW5kJyAlIGltYWdlKQorCisgICAgIyByZW1vdmUgPGltYWdlPi5iYmFwZW5kIHRvIG1ha2Ugc3VyZSBzZXR1cF90aW5mb2lsIGRvZXNuJ3QKKyAgICAjIGJyZWFrZSBiZWNhdXNlIG9mIGl0CisgICAgaWYgb3MucGF0aC5pc2ZpbGUoYXBwZW5kZmlsZSk6CisgICAgICAgIG9zLnVubGluayhhcHBlbmRmaWxlKQorCisgICAgcmVjaXBlcyA9IF9nZXRfcmVjaXBlcyh3b3Jrc3BhY2UsIGNvbmZpZykKKyAgICBpZiByZWNpcGVzOgorICAgICAgICB3aXRoIG9wZW4oYXBwZW5kZmlsZSwgJ3cnKSBhcyBhZmlsZToKKyAgICAgICAgICAgICMgaW5jbHVkZSBzZWxlY3RlZCByZWNpcGVzIGludG8gdGhlIGltYWdlCisgICAgICAgICAgICBhZmlsZS53cml0ZSgnSU1BR0VfSU5TVEFMTF9hcHBlbmQgPSAiICVzIlxuJyAlICcgJy5qb2luKHJlY2lwZXMpKQorCisgICAgICAgICAgICAjIEdlbmVyYXRlIG5vdGlmaWNhdGlvbiBjYWxsYmFjayBkZXZ0b29sX3dhcm5faW1hZ2VfZXh0ZW5kZWQKKyAgICAgICAgICAgIGFmaWxlLndyaXRlKCdkb19yb290ZnNbcHJlZnVuY3NdICs9ICJkZXZ0b29sX3dhcm5faW1hZ2VfZXh0ZW5kZWQiXG5cbicpCisgICAgICAgICAgICBhZmlsZS53cml0ZSgicHl0aG9uIGRldnRvb2xfd2Fybl9pbWFnZV9leHRlbmRlZCgpIHtcbiIpCisgICAgICAgICAgICBhZmlsZS53cml0ZSgiICAgIGJiLnBsYWluKCdOT1RFOiAlJXM6IGJ1aWxkaW5nIHdpdGggYWRkaXRpb25hbCAnXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICdwYWNrYWdlcyBkdWUgdG8gXCJkZXZ0b29sIGJ1aWxkLWltYWdlXCInIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgJSUgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGJiLnBsYWluKCdOT1RFOiBkZWxldGUgJSVzIHRvIGNsZWFyIHRoaXMnICUlIFxcXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICclcycpXG4iICUgb3MucGF0aC5yZWxwYXRoKGFwcGVuZGZpbGUsIGJhc2VwYXRoKSkKKyAgICAgICAgICAgIGFmaWxlLndyaXRlKCJ9XG4iKQorCisgICAgICAgICAgICBsb2dnZXIuaW5mbygnQnVpbGRpbmcgaW1hZ2UgJXMgd2l0aCB0aGUgZm9sbG93aW5nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICdhZGRpdGlvbmFsIHBhY2thZ2VzOiAlcycsIGltYWdlLCAnICcuam9pbihyZWNpcGVzKSkKKyAgICBlbHNlOgorICAgICAgICBsb2dnZXIud2FybmluZygnTm8gcmVjaXBlcyBpbiB3b3Jrc3BhY2UsIGJ1aWxkaW5nIGltYWdlICVzIHVubW9kaWZpZWQnLCBpbWFnZSkKKworICAgICMgcnVuIGJpdGJha2UgdG8gYnVpbGQgaW1hZ2UKKyAgICB0cnk6CisgICAgICAgIGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQoY29uZmlnLmluaXRfcGF0aCwgYmFzZXBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpdGJha2UgJXMnICUgaW1hZ2UsIHdhdGNoPVRydWUpCisgICAgZXhjZXB0IEV4ZWN1dGlvbkVycm9yIGFzIGVycjoKKyAgICAgICAgcmV0dXJuIGVyci5leGl0Y29kZQorCisgICAgbG9nZ2VyLmluZm8oJ1N1Y2Nlc3NmdWxseSBidWlsdCAlcycsIGltYWdlKQorCitkZWYgcmVnaXN0ZXJfY29tbWFuZHMoc3VicGFyc2VycywgY29udGV4dCk6CisgICAgIiIiUmVnaXN0ZXIgZGV2dG9vbCBzdWJjb21tYW5kcyBmcm9tIHRoZSBidWlsZC1pbWFnZSBwbHVnaW4iIiIKKyAgICBwYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2J1aWxkLWltYWdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQnVpbGQgaW1hZ2UgaW5jbHVkaW5nIHdvcmtzcGFjZSByZWNpcGUgcGFja2FnZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nQnVpbGRzIGFuIGltYWdlLCBleHRlbmRpbmcgaXQgdG8gaW5jbHVkZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWNrYWdlcyBmcm9tIHJlY2lwZXMgaW4gdGhlIHdvcmtzcGFjZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncmVjaXBlJywgaGVscD0nSW1hZ2UgcmVjaXBlIHRvIGJ1aWxkJykKKyAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKGZ1bmM9YnVpbGRfaW1hZ2UpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvYnVpbGQucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvYnVpbGQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM1YWZmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9idWlsZC5weQpAQCAtMCwwICsxLDc3IEBACisjIERldmVsb3BtZW50IHRvb2wgLSBidWlsZCBjb21tYW5kIHBsdWdpbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyIiIkRldnRvb2wgYnVpbGQgcGx1Z2luIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IGJiCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgdGVtcGZpbGUKK2Zyb20gZGV2dG9vbCBpbXBvcnQgZXhlY19idWlsZF9lbnZfY29tbWFuZCwgRGV2dG9vbEVycm9yCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZXZ0b29sJykKKworZGVmIHBsdWdpbl9pbml0KHBsdWdpbmxpc3QpOgorICAgICIiIlBsdWdpbiBpbml0aWFsaXphdGlvbiIiIgorICAgIHBhc3MKKworZGVmIF9jcmVhdGVfY29uZl9maWxlKHZhbHVlcywgY29uZl9maWxlPU5vbmUpOgorICAgIGlmIG5vdCBjb25mX2ZpbGU6CisgICAgICAgIGZkLCBjb25mX2ZpbGUgPSB0ZW1wZmlsZS5ta3N0ZW1wKHN1ZmZpeD0nLmNvbmYnKQorICAgIGVsaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguZGlybmFtZShjb25mX2ZpbGUpKToKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJDcmVhdGluZyBmb2xkZXIgJXMiICUgb3MucGF0aC5kaXJuYW1lKGNvbmZfZmlsZSkpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoY29uZl9maWxlKSkKKyAgICB3aXRoIG9wZW4oY29uZl9maWxlLCAndycpIGFzIGY6CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHZhbHVlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGYud3JpdGUoJyVzID0gIiVzIlxuJyAlIChrZXksIHZhbHVlKSkKKyAgICByZXR1cm4gY29uZl9maWxlCisKK2RlZiBidWlsZChhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAnYnVpbGQnIHN1YmNvbW1hbmQiIiIKKyAgICBpZiBub3QgYXJncy5yZWNpcGVuYW1lIGluIHdvcmtzcGFjZToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJubyByZWNpcGUgbmFtZWQgJXMgaW4geW91ciB3b3Jrc3BhY2UiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucmVjaXBlbmFtZSkKKworICAgIGJ1aWxkX3Rhc2sgPSBjb25maWcuZ2V0KCdCdWlsZCcsICdidWlsZF90YXNrJywgJ3BvcHVsYXRlX3N5c3Jvb3QnKQorCisgICAgcG9zdGZpbGVfcGFyYW0gPSAiIgorICAgIHBvc3RmaWxlID0gIiIKKyAgICBpZiBhcmdzLmRpc2FibGVfcGFyYWxsZWxfbWFrZToKKyAgICAgICAgbG9nZ2VyLmluZm8oIkRpc2FibGluZyAnbWFrZScgcGFyYWxsZWxpc20iKQorICAgICAgICBwb3N0ZmlsZSA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ2NvbmYnLCAnZGlzYWJsZV9wYXJhbGxlbGlzbS5jb25mJykKKyAgICAgICAgX2NyZWF0ZV9jb25mX2ZpbGUoeydQQVJBTExFTF9NQUtFJzonJ30sIHBvc3RmaWxlKQorICAgICAgICBwb3N0ZmlsZV9wYXJhbSA9ICItUiAlcyIgJSBwb3N0ZmlsZQorICAgIHRyeToKKyAgICAgICAgZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwgJ2JpdGJha2UgLWMgJXMgJXMgJXMnICUgKGJ1aWxkX3Rhc2ssIHBvc3RmaWxlX3BhcmFtLCBhcmdzLnJlY2lwZW5hbWUpLCB3YXRjaD1UcnVlKQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6CisgICAgICAgICMgV2UndmUgYWxyZWFkeSBzZWVuIHRoZSBvdXRwdXQgc2luY2Ugd2F0Y2g9VHJ1ZSwgc28ganVzdCBlbnN1cmUgd2UgcmV0dXJuIHNvbWV0aGluZyB0byB0aGUgdXNlcgorICAgICAgICByZXR1cm4gZS5leGl0Y29kZQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIHBvc3RmaWxlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdSZW1vdmluZyBwb3N0ZmlsZScpCisgICAgICAgICAgICBvcy5yZW1vdmUocG9zdGZpbGUpCisKKyAgICByZXR1cm4gMAorCitkZWYgcmVnaXN0ZXJfY29tbWFuZHMoc3VicGFyc2VycywgY29udGV4dCk6CisgICAgIiIiUmVnaXN0ZXIgZGV2dG9vbCBzdWJjb21tYW5kcyBmcm9tIHRoaXMgcGx1Z2luIiIiCisgICAgcGFyc2VyX2J1aWxkID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdidWlsZCcsIGhlbHA9J0J1aWxkIGEgcmVjaXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0J1aWxkcyB0aGUgc3BlY2lmaWVkIHJlY2lwZSB1c2luZyBiaXRiYWtlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLkFyZ3VtZW50RGVmYXVsdHNIZWxwRm9ybWF0dGVyKQorICAgIHBhcnNlcl9idWlsZC5hZGRfYXJndW1lbnQoJ3JlY2lwZW5hbWUnLCBoZWxwPSdSZWNpcGUgdG8gYnVpbGQnKQorICAgIHBhcnNlcl9idWlsZC5hZGRfYXJndW1lbnQoJy1zJywgJy0tZGlzYWJsZS1wYXJhbGxlbC1tYWtlJywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0nRGlzYWJsZSBtYWtlIHBhcmFsbGVsaXNtJykKKyAgICBwYXJzZXJfYnVpbGQuc2V0X2RlZmF1bHRzKGZ1bmM9YnVpbGQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvZGVwbG95LnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2RlcGxveS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTkzYWRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2RlcGxveS5weQpAQCAtMCwwICsxLDE0OSBAQAorIyBEZXZlbG9wbWVudCB0b29sIC0gZGVwbG95L3VuZGVwbG95IGNvbW1hbmQgcGx1Z2luCisjCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIiIiRGV2dG9vbCBwbHVnaW4gY29udGFpbmluZyB0aGUgZGVwbG95IHN1YmNvbW1hbmRzIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBsb2dnaW5nCitmcm9tIGRldnRvb2wgaW1wb3J0IGV4ZWNfZmFrZXJvb3QsIHNldHVwX3RpbmZvaWwsIERldnRvb2xFcnJvcgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignZGV2dG9vbCcpCisKK2RlZiBkZXBsb3koYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ2RlcGxveScgc3ViY29tbWFuZCIiIgorICAgIGltcG9ydCByZQorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworCisgICAgaWYgbm90IGFyZ3MucmVjaXBlbmFtZSBpbiB3b3Jrc3BhY2U6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigibm8gcmVjaXBlIG5hbWVkICVzIGluIHlvdXIgd29ya3NwYWNlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnJlY2lwZW5hbWUpCisgICAgdHJ5OgorICAgICAgICBob3N0LCBkZXN0ZGlyID0gYXJncy50YXJnZXQuc3BsaXQoJzonKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBkZXN0ZGlyID0gJy8nCisgICAgZWxzZToKKyAgICAgICAgYXJncy50YXJnZXQgPSBob3N0CisKKyAgICBkZXBsb3lfZGlyID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAndGFyZ2V0X2RlcGxveScsIGFyZ3MudGFyZ2V0KQorICAgIGRlcGxveV9maWxlID0gb3MucGF0aC5qb2luKGRlcGxveV9kaXIsIGFyZ3MucmVjaXBlbmFtZSArICcubGlzdCcpCisKKyAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbCgpCisgICAgdHJ5OgorICAgICAgICByZCA9IG9lLnJlY2lwZXV0aWxzLnBhcnNlX3JlY2lwZV9zaW1wbGUodGluZm9pbC5jb29rZXIsIGFyZ3MucmVjaXBlbmFtZSwgdGluZm9pbC5jb25maWdfZGF0YSkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignRXhjZXB0aW9uIHBhcnNpbmcgcmVjaXBlICVzOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZ3MucmVjaXBlbmFtZSwgZSkpCisgICAgcmVjaXBlX291dGRpciA9IHJkLmdldFZhcignRCcsIFRydWUpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHJlY2lwZV9vdXRkaXIpIG9yIG5vdCBvcy5saXN0ZGlyKHJlY2lwZV9vdXRkaXIpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ05vIGZpbGVzIHRvIGRlcGxveSAtIGhhdmUgeW91IGJ1aWx0IHRoZSAlcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVjaXBlPyBJZiBzbywgdGhlIGluc3RhbGwgc3RlcCBoYXMgbm90IGluc3RhbGxlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW55IGZpbGVzLicgJSBhcmdzLnJlY2lwZW5hbWUpCisKKyAgICBpZiBhcmdzLmRyeV9ydW46CisgICAgICAgIHByaW50KCdGaWxlcyB0byBiZSBkZXBsb3llZCBmb3IgJXMgb24gdGFyZ2V0ICVzOicgJSAoYXJncy5yZWNpcGVuYW1lLCBhcmdzLnRhcmdldCkpCisgICAgICAgIGZvciByb290LCBfLCBmaWxlcyBpbiBvcy53YWxrKHJlY2lwZV9vdXRkaXIpOgorICAgICAgICAgICAgZm9yIGZuIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIHByaW50KCcgICVzJyAlIG9zLnBhdGguam9pbihkZXN0ZGlyLCBvcy5wYXRoLnJlbHBhdGgocm9vdCwgcmVjaXBlX291dGRpciksIGZuKSkKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKGRlcGxveV9maWxlKToKKyAgICAgICAgaWYgdW5kZXBsb3koYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAgICAgICAgICMgRXJyb3IgYWxyZWFkeSBzaG93bgorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgIGV4dHJhb3B0aW9ucyA9ICcnCisgICAgaWYgYXJncy5ub19ob3N0X2NoZWNrOgorICAgICAgICBleHRyYW9wdGlvbnMgKz0gJy1vIFVzZXJLbm93bkhvc3RzRmlsZT0vZGV2L251bGwgLW8gU3RyaWN0SG9zdEtleUNoZWNraW5nPW5vJworICAgIGlmIGFyZ3Muc2hvd19zdGF0dXM6CisgICAgICAgIHRhcmV4dHJhY3RvcHRzID0gJ3h2JworICAgIGVsc2U6CisgICAgICAgIHRhcmV4dHJhY3RvcHRzID0gJ3gnCisgICAgICAgIGV4dHJhb3B0aW9ucyArPSAnIC1xJworICAgICMgV2UgY2Fubm90IHVzZSBzY3AgaGVyZSwgYmVjYXVzZSBpdCBkb2Vzbid0IHByZXNlcnZlIHN5bWxpbmtzCisgICAgcmV0ID0gZXhlY19mYWtlcm9vdChyZCwgJ3RhciBjZiAtIC4gfCBzc2ggJXMgJXMgXCd0YXIgJXMgLUMgJXMgLWYgLVwnJyAlIChleHRyYW9wdGlvbnMsIGFyZ3MudGFyZ2V0LCB0YXJleHRyYWN0b3B0cywgZGVzdGRpciksIGN3ZD1yZWNpcGVfb3V0ZGlyLCBzaGVsbD1UcnVlKQorICAgIGlmIHJldCAhPSAwOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0RlcGxveSBmYWlsZWQgLSByZXJ1biB3aXRoIC1zIHRvIGdldCBhIGNvbXBsZXRlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvciBtZXNzYWdlJykKKworICAgIGxvZ2dlci5pbmZvKCdTdWNjZXNzZnVsbHkgZGVwbG95ZWQgJXMnICUgcmVjaXBlX291dGRpcikKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkZXBsb3lfZGlyKToKKyAgICAgICAgb3MubWFrZWRpcnMoZGVwbG95X2RpcikKKworICAgIGZpbGVzX2xpc3QgPSBbXQorICAgIGZvciByb290LCBfLCBmaWxlcyBpbiBvcy53YWxrKHJlY2lwZV9vdXRkaXIpOgorICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZW5hbWUpLCByZWNpcGVfb3V0ZGlyKQorICAgICAgICAgICAgZmlsZXNfbGlzdC5hcHBlbmQob3MucGF0aC5qb2luKGRlc3RkaXIsIGZpbGVuYW1lKSkKKworICAgIHdpdGggb3BlbihkZXBsb3lfZmlsZSwgJ3cnKSBhcyBmb2JqOgorICAgICAgICBmb2JqLndyaXRlKCdcbicuam9pbihmaWxlc19saXN0KSkKKworICAgIHJldHVybiAwCisKK2RlZiB1bmRlcGxveShhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAndW5kZXBsb3knIHN1YmNvbW1hbmQiIiIKKyAgICBkZXBsb3lfZmlsZSA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ3RhcmdldF9kZXBsb3knLCBhcmdzLnRhcmdldCwgYXJncy5yZWNpcGVuYW1lICsgJy5saXN0JykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGVwbG95X2ZpbGUpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJyVzIGhhcyBub3QgYmVlbiBkZXBsb3llZCcgJSBhcmdzLnJlY2lwZW5hbWUpCisKKyAgICBpZiBhcmdzLmRyeV9ydW46CisgICAgICAgIHByaW50KCdQcmV2aW91c2x5IGRlcGxveWVkIGZpbGVzIHRvIGJlIHVuLWRlcGxveWVkIGZvciAlcyBvbiB0YXJnZXQgJXM6JyAlIChhcmdzLnJlY2lwZW5hbWUsIGFyZ3MudGFyZ2V0KSkKKyAgICAgICAgd2l0aCBvcGVuKGRlcGxveV9maWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIHByaW50KCcgICVzJyAlIGxpbmUucnN0cmlwKCkpCisgICAgICAgIHJldHVybiAwCisKKyAgICBleHRyYW9wdGlvbnMgPSAnJworICAgIGlmIGFyZ3Mubm9faG9zdF9jaGVjazoKKyAgICAgICAgZXh0cmFvcHRpb25zICs9ICctbyBVc2VyS25vd25Ib3N0c0ZpbGU9L2Rldi9udWxsIC1vIFN0cmljdEhvc3RLZXlDaGVja2luZz1ubycKKyAgICBpZiBub3QgYXJncy5zaG93X3N0YXR1czoKKyAgICAgICAgZXh0cmFvcHRpb25zICs9ICcgLXEnCisKKyAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoInNjcCAlcyAlcyAlczovdG1wIiAlIChleHRyYW9wdGlvbnMsIGRlcGxveV9maWxlLCBhcmdzLnRhcmdldCksIHNoZWxsPVRydWUpCisgICAgaWYgcmV0ICE9IDA6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignRmFpbGVkIHRvIGNvcHkgZmlsZSBsaXN0IHRvICVzIC0gcmVydW4gd2l0aCAtcyB0byAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0IGEgY29tcGxldGUgZXJyb3IgbWVzc2FnZScgJSBhcmdzLnRhcmdldCkKKworICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgic3NoICVzICVzICd4YXJncyAtbjEgcm0gLWYgPC90bXAvJXMnIiAlIChleHRyYW9wdGlvbnMsIGFyZ3MudGFyZ2V0LCBvcy5wYXRoLmJhc2VuYW1lKGRlcGxveV9maWxlKSksIHNoZWxsPVRydWUpCisgICAgaWYgcmV0ID09IDA6CisgICAgICAgIGxvZ2dlci5pbmZvKCdTdWNjZXNzZnVsbHkgdW5kZXBsb3llZCAlcycgJSBhcmdzLnJlY2lwZW5hbWUpCisgICAgICAgIG9zLnJlbW92ZShkZXBsb3lfZmlsZSkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ1VuZGVwbG95IGZhaWxlZCAtIHJlcnVuIHdpdGggLXMgdG8gZ2V0IGEgY29tcGxldGUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yIG1lc3NhZ2UnKQorCisgICAgcmV0dXJuIHJldAorCisKK2RlZiByZWdpc3Rlcl9jb21tYW5kcyhzdWJwYXJzZXJzLCBjb250ZXh0KToKKyAgICAiIiJSZWdpc3RlciBkZXZ0b29sIHN1YmNvbW1hbmRzIGZyb20gdGhlIGRlcGxveSBwbHVnaW4iIiIKKyAgICBwYXJzZXJfZGVwbG95ID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdkZXBsb3ktdGFyZ2V0JywgaGVscD0nRGVwbG95IHJlY2lwZSBvdXRwdXQgZmlsZXMgdG8gbGl2ZSB0YXJnZXQgbWFjaGluZScpCisgICAgcGFyc2VyX2RlcGxveS5hZGRfYXJndW1lbnQoJ3JlY2lwZW5hbWUnLCBoZWxwPSdSZWNpcGUgdG8gZGVwbG95JykKKyAgICBwYXJzZXJfZGVwbG95LmFkZF9hcmd1bWVudCgndGFyZ2V0JywgaGVscD0nTGl2ZSB0YXJnZXQgbWFjaGluZSBydW5uaW5nIGFuIHNzaCBzZXJ2ZXI6IHVzZXJAaG9zdG5hbWVbOmRlc3RkaXJdJykKKyAgICBwYXJzZXJfZGVwbG95LmFkZF9hcmd1bWVudCgnLWMnLCAnLS1uby1ob3N0LWNoZWNrJywgaGVscD0nRGlzYWJsZSBzc2ggaG9zdCBrZXkgY2hlY2tpbmcnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9kZXBsb3kuYWRkX2FyZ3VtZW50KCctcycsICctLXNob3ctc3RhdHVzJywgaGVscD0nU2hvdyBwcm9ncmVzcy9zdGF0dXMgb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfZGVwbG95LmFkZF9hcmd1bWVudCgnLW4nLCAnLS1kcnktcnVuJywgaGVscD0nTGlzdCBmaWxlcyB0byBiZSBkZXBsb3llZCBvbmx5JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfZGVwbG95LnNldF9kZWZhdWx0cyhmdW5jPWRlcGxveSkKKworICAgIHBhcnNlcl91bmRlcGxveSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcigndW5kZXBsb3ktdGFyZ2V0JywgaGVscD0nVW5kZXBsb3kgcmVjaXBlIG91dHB1dCBmaWxlcyBpbiBsaXZlIHRhcmdldCBtYWNoaW5lJykKKyAgICBwYXJzZXJfdW5kZXBsb3kuYWRkX2FyZ3VtZW50KCdyZWNpcGVuYW1lJywgaGVscD0nUmVjaXBlIHRvIHVuZGVwbG95JykKKyAgICBwYXJzZXJfdW5kZXBsb3kuYWRkX2FyZ3VtZW50KCd0YXJnZXQnLCBoZWxwPSdMaXZlIHRhcmdldCBtYWNoaW5lIHJ1bm5pbmcgYW4gc3NoIHNlcnZlcjogdXNlckBob3N0bmFtZScpCisgICAgcGFyc2VyX3VuZGVwbG95LmFkZF9hcmd1bWVudCgnLWMnLCAnLS1uby1ob3N0LWNoZWNrJywgaGVscD0nRGlzYWJsZSBzc2ggaG9zdCBrZXkgY2hlY2tpbmcnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl91bmRlcGxveS5hZGRfYXJndW1lbnQoJy1zJywgJy0tc2hvdy1zdGF0dXMnLCBoZWxwPSdTaG93IHByb2dyZXNzL3N0YXR1cyBvdXRwdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl91bmRlcGxveS5hZGRfYXJndW1lbnQoJy1uJywgJy0tZHJ5LXJ1bicsIGhlbHA9J0xpc3QgZmlsZXMgdG8gYmUgdW5kZXBsb3llZCBvbmx5JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfdW5kZXBsb3kuc2V0X2RlZmF1bHRzKGZ1bmM9dW5kZXBsb3kpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvcGFja2FnZS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9wYWNrYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhN2EzNmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvcGFja2FnZS5weQpAQCAtMCwwICsxLDYxIEBACisjIERldmVsb3BtZW50IHRvb2wgLSBwYWNrYWdlIGNvbW1hbmQgcGx1Z2luCisjCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIiIiRGV2dG9vbCBwbHVnaW4gY29udGFpbmluZyB0aGUgcGFja2FnZSBzdWJjb21tYW5kcyIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgbG9nZ2luZworZnJvbSBiYi5wcm9jZXNzIGltcG9ydCBFeGVjdXRpb25FcnJvcgorZnJvbSBkZXZ0b29sIGltcG9ydCBleGVjX2J1aWxkX2Vudl9jb21tYW5kLCBzZXR1cF90aW5mb2lsLCBEZXZ0b29sRXJyb3IKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2RldnRvb2wnKQorCitkZWYgcGx1Z2luX2luaXQocGx1Z2lubGlzdCk6CisgICAgIiIiUGx1Z2luIGluaXRpYWxpemF0aW9uIiIiCisgICAgcGFzcworCitkZWYgcGFja2FnZShhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAncGFja2FnZScgc3ViY29tbWFuZCIiIgorICAgIGlmIG5vdCBhcmdzLnJlY2lwZW5hbWUgaW4gd29ya3NwYWNlOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIm5vIHJlY2lwZSBuYW1lZCAlcyBpbiB5b3VyIHdvcmtzcGFjZSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5yZWNpcGVuYW1lKQorCisgICAgaW1hZ2VfcGtndHlwZSA9IGNvbmZpZy5nZXQoJ1BhY2thZ2UnLCAnaW1hZ2VfcGtndHlwZScsICcnKQorICAgIGlmIG5vdCBpbWFnZV9wa2d0eXBlOgorICAgICAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRpbmZvaWwucHJlcGFyZShjb25maWdfb25seT1UcnVlKQorICAgICAgICAgICAgaW1hZ2VfcGtndHlwZSA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQorCisgICAgcGFja2FnZV90YXNrID0gY29uZmlnLmdldCgnUGFja2FnZScsICdwYWNrYWdlX3Rhc2snLCAncGFja2FnZV93cml0ZV8lcycgJSBpbWFnZV9wa2d0eXBlKQorICAgIHRyeToKKyAgICAgICAgZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwgJ2JpdGJha2UgLWMgJXMgJXMnICUgKHBhY2thZ2VfdGFzaywgYXJncy5yZWNpcGVuYW1lKSwgd2F0Y2g9VHJ1ZSkKKyAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgorICAgICAgICAjIFdlJ3ZlIGFscmVhZHkgc2VlbiB0aGUgb3V0cHV0IHNpbmNlIHdhdGNoPVRydWUsIHNvIGp1c3QgZW5zdXJlIHdlIHJldHVybiBzb21ldGhpbmcgdG8gdGhlIHVzZXIKKyAgICAgICAgcmV0dXJuIGUuZXhpdGNvZGUKKyAgICBsb2dnZXIuaW5mbygnWW91ciBwYWNrYWdlcyBhcmUgaW4gJXMvdG1wL2RlcGxveS8lcycgJSAoYmFzZXBhdGgsIGltYWdlX3BrZ3R5cGUpKQorCisgICAgcmV0dXJuIDAKKworZGVmIHJlZ2lzdGVyX2NvbW1hbmRzKHN1YnBhcnNlcnMsIGNvbnRleHQpOgorICAgICIiIlJlZ2lzdGVyIGRldnRvb2wgc3ViY29tbWFuZHMgZnJvbSB0aGUgcGFja2FnZSBwbHVnaW4iIiIKKyAgICBpZiBjb250ZXh0LmZpeGVkX3NldHVwOgorICAgICAgICBwYXJzZXJfcGFja2FnZSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcigncGFja2FnZScsIGhlbHA9J0J1aWxkIHBhY2thZ2VzIGZvciBhIHJlY2lwZScsIGRlc2NyaXB0aW9uPSdCdWlsZHMgcGFja2FnZXMgZm9yIGEgcmVjaXBlXCdzIG91dHB1dCBmaWxlcycpCisgICAgICAgIHBhcnNlcl9wYWNrYWdlLmFkZF9hcmd1bWVudCgncmVjaXBlbmFtZScsIGhlbHA9J1JlY2lwZSB0byBwYWNrYWdlJykKKyAgICAgICAgcGFyc2VyX3BhY2thZ2Uuc2V0X2RlZmF1bHRzKGZ1bmM9cGFja2FnZSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9zZGsucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvc2RrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNDE2YjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvc2RrLnB5CkBAIC0wLDAgKzEsMTk3IEBACisjIERldmVsb3BtZW50IHRvb2wgLSBzZGstdXBkYXRlIGNvbW1hbmQgcGx1Z2luCisKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgZ2xvYgoraW1wb3J0IHNodXRpbAoraW1wb3J0IGVycm5vCitpbXBvcnQgc3lzCitmcm9tIGRldnRvb2wgaW1wb3J0IGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQsIHNldHVwX3RpbmZvaWwsIERldnRvb2xFcnJvcgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignZGV2dG9vbCcpCisKK2RlZiBwbHVnaW5faW5pdChwbHVnaW5saXN0KToKKyAgICAiIiJQbHVnaW4gaW5pdGlhbGl6YXRpb24iIiIKKyAgICBwYXNzCisKK2RlZiBwYXJzZV9sb2NrZWRfc2lncyhzaWdmaWxlX3BhdGgpOgorICAgICIiIlJldHVybiA8cG46dGFzaz46PGhhc2g+IGRpY3Rpb25hcnkiIiIKKyAgICBzaWdfZGljdCA9IHt9CisgICAgd2l0aCBvcGVuKHNpZ2ZpbGVfcGF0aCkgYXMgZjoKKyAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgaWYgJzonIGluIGxpbmU6CisgICAgICAgICAgICAgICAgdGFza2tleSwgXywgaGFzaHZhbCA9IGxpbmUucnBhcnRpdGlvbignOicpCisgICAgICAgICAgICAgICAgc2lnX2RpY3RbdGFza2tleS5zdHJpcCgpXSA9IGhhc2h2YWwuc3BsaXQoKVswXQorICAgIHJldHVybiBzaWdfZGljdAorCitkZWYgZ2VuZXJhdGVfdXBkYXRlX2RpY3Qoc2lnZmlsZV9uZXcsIHNpZ2ZpbGVfb2xkKToKKyAgICAiIiJSZXR1cm4gYSBkaWN0IGNvbnRhaW5pbmcgPHBuOnRhc2s+OjxoYXNoPiB3aGljaCBpbmRpY2F0ZXMgd2hhdCBuZWVkIHRvIGJlIHVwZGF0ZWQiIiIKKyAgICB1cGRhdGVfZGljdCA9IHt9CisgICAgc2lnZGljdF9uZXcgPSBwYXJzZV9sb2NrZWRfc2lncyhzaWdmaWxlX25ldykKKyAgICBzaWdkaWN0X29sZCA9IHBhcnNlX2xvY2tlZF9zaWdzKHNpZ2ZpbGVfb2xkKQorICAgIGZvciBrIGluIHNpZ2RpY3RfbmV3OgorICAgICAgICBpZiBrIG5vdCBpbiBzaWdkaWN0X29sZDoKKyAgICAgICAgICAgIHVwZGF0ZV9kaWN0W2tdID0gc2lnZGljdF9uZXdba10KKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIHNpZ2RpY3RfbmV3W2tdICE9IHNpZ2RpY3Rfb2xkW2tdOgorICAgICAgICAgICAgdXBkYXRlX2RpY3Rba10gPSBzaWdkaWN0X25ld1trXQorICAgICAgICAgICAgY29udGludWUKKyAgICByZXR1cm4gdXBkYXRlX2RpY3QKKworZGVmIGdldF9zc3RhdGVfb2JqZWN0cyh1cGRhdGVfZGljdCwgbmV3c2RrX3BhdGgpOgorICAgICIiIlJldHVybiBhIGxpc3QgY29udGFpbmluZyBzc3RhdGUgb2JqZWN0cyB3aGljaCBhcmUgdG8gYmUgaW5zdGFsbGVkIiIiCisgICAgc3N0YXRlX29iamVjdHMgPSBbXQorICAgICMgRW5zdXJlIG5ld3Nka19wYXRoIHBvaW50cyB0byBhbiBleHRlbnNpYmxlIFNESworICAgIHNzdGF0ZV9kaXIgPSBvcy5wYXRoLmpvaW4obmV3c2RrX3BhdGgsICdzc3RhdGUtY2FjaGUnKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzc3RhdGVfZGlyKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJzc3RhdGUtY2FjaGUgZGlyZWN0b3J5IG5vdCBmb3VuZCB1bmRlciAlcyIgJSBuZXdzZGtfcGF0aCkKKyAgICAgICAgcmFpc2UKKyAgICBmb3IgayBpbiB1cGRhdGVfZGljdDoKKyAgICAgICAgZmlsZXMgPSBzZXQoKQorICAgICAgICBoYXNodmFsID0gdXBkYXRlX2RpY3Rba10KKyAgICAgICAgcCA9IHNzdGF0ZV9kaXIgKyAnLycgKyBoYXNodmFsWzoyXSArICcvKicgKyBoYXNodmFsICsgJyoudGd6JworICAgICAgICBmaWxlcyB8PSBzZXQoZ2xvYi5nbG9iKHApKQorICAgICAgICBwID0gc3N0YXRlX2RpciArICcvKi8nICsgaGFzaHZhbFs6Ml0gKyAnLyonICsgaGFzaHZhbCArICcqLnRneicKKyAgICAgICAgZmlsZXMgfD0gc2V0KGdsb2IuZ2xvYihwKSkKKyAgICAgICAgZmlsZXMgPSBsaXN0KGZpbGVzKQorICAgICAgICBpZiBsZW4oZmlsZXMpID09IDE6CisgICAgICAgICAgICBzc3RhdGVfb2JqZWN0cy5leHRlbmQoZmlsZXMpCisgICAgICAgIGVsaWYgbGVuKGZpbGVzKSA+IDE6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIk1vcmUgdGhhbiBvbmUgbWF0Y2hpbmcgc3N0YXRlIG9iamVjdCBmb3VuZCBmb3IgJXMiICUgaGFzaHZhbCkKKworICAgIHJldHVybiBzc3RhdGVfb2JqZWN0cworCitkZWYgbWtkaXIoZCk6CisgICAgdHJ5OgorICAgICAgICBvcy5tYWtlZGlycyhkKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgcmFpc2UgZQorCitkZWYgaW5zdGFsbF9zc3RhdGVfb2JqZWN0cyhzc3RhdGVfb2JqZWN0cywgc3JjX3NkaywgZGVzdF9zZGspOgorICAgICIiIkluc3RhbGwgc3N0YXRlIG9iamVjdHMgaW50byBkZXN0aW5hdGlvbiBTREsiIiIKKyAgICBzc3RhdGVfZGlyID0gb3MucGF0aC5qb2luKGRlc3Rfc2RrLCAnc3N0YXRlLWNhY2hlJykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3N0YXRlX2Rpcik6CisgICAgICAgIGxvZ2dlci5lcnJvcigiTWlzc2luZyBzc3RhdGUtY2FjaGUgZGlyZWN0b3J5IGluICVzLCBpdCBtaWdodCBub3QgYmUgYW4gZXh0ZW5zaWJsZSBTREsuIiAlIGRlc3Rfc2RrKQorICAgICAgICByYWlzZQorICAgIGZvciBzYiBpbiBzc3RhdGVfb2JqZWN0czoKKyAgICAgICAgZHN0ID0gc2IucmVwbGFjZShzcmNfc2RrLCBkZXN0X3NkaykKKyAgICAgICAgZGVzdGRpciA9IG9zLnBhdGguZGlybmFtZShkc3QpCisgICAgICAgIG1rZGlyKGRlc3RkaXIpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiQ29weWluZyAlcyB0byAlcyIgJSAoc2IsIGRzdCkpCisgICAgICAgIHNodXRpbC5jb3B5KHNiLCBkc3QpCisKK2RlZiBzZGtfdXBkYXRlKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIyBGZXRjaCBsb2NrZWQtc2lncy5pbmMgZmlsZSBmcm9tIHJlbW90ZS9sb2NhbCBkZXN0aW5hdGlvbgorICAgIGZyb20gQ29uZmlnUGFyc2VyIGltcG9ydCBOb1NlY3Rpb25FcnJvcgorICAgIHVwZGF0ZXNlcnZlciA9IGFyZ3MudXBkYXRlc2VydmVyCisgICAgaWYgbm90IHVwZGF0ZXNlcnZlcjoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdXBkYXRlc2VydmVyID0gY29uZmlnLmdldCgnU0RLJywgJ3VwZGF0ZXNlcnZlcicsIE5vbmUpCisgICAgICAgIGV4Y2VwdCBOb1NlY3Rpb25FcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICBpZiBub3QgdXBkYXRlc2VydmVyOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlVwZGF0ZSBzZXJ2ZXIgbm90IHNwZWNpZmllZCBpbiBjb25maWcgZmlsZSwgeW91IG11c3Qgc3BlY2lmeSBpdCBvbiB0aGUgY29tbWFuZCBsaW5lIikKKyAgICBsb2dnZXIuZGVidWcoInVwZGF0ZXNlcnZlcjogJXMiICUgYXJncy51cGRhdGVzZXJ2ZXIpCisKKyAgICAjIE1ha2Ugc3VyZSB3ZSBhcmUgdXNpbmcgc2RrLXVwZGF0ZSBmcm9tIHdpdGhpbiBTREsKKyAgICBsb2dnZXIuZGVidWcoImJhc2VwYXRoID0gJXMiICUgYmFzZXBhdGgpCisgICAgb2xkX2xvY2tlZF9zaWdfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAnY29uZi9sb2NrZWQtc2lncy5pbmMnKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvbGRfbG9ja2VkX3NpZ19maWxlX3BhdGgpOgorICAgICAgICBsb2dnZXIuZXJyb3IoIk5vdCB1c2luZyBkZXZ0b29sJ3Mgc2RrLXVwZGF0ZSBjb21tYW5kIGZyb20gd2l0aGluIGFuIGV4dGVuc2libGUgU0RLLiBQbGVhc2Ugc3BlY2lmeSBjb3JyZWN0IGJhc2VwYXRoIHZpYSAtLWJhc2VwYXRoIG9wdGlvbiIpCisgICAgICAgIHJldHVybiAtMQorICAgIGVsc2U6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygiRm91bmQgY29uZi9sb2NrZWQtc2lncy5pbmMgaW4gJXMiICUgYmFzZXBhdGgpCisKKyAgICBpZiAnOicgaW4gYXJncy51cGRhdGVzZXJ2ZXI6CisgICAgICAgIGlzX3JlbW90ZSA9IFRydWUKKyAgICBlbHNlOgorICAgICAgICBpc19yZW1vdGUgPSBGYWxzZQorCisgICAgaWYgbm90IGlzX3JlbW90ZToKKyAgICAgICAgIyBkZXZ0b29sIHNkay11cGRhdGUgL2xvY2FsL3BhdGgvdG8vbGF0ZXN0L3NkaworICAgICAgICBuZXdfbG9ja2VkX3NpZ19maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oYXJncy51cGRhdGVzZXJ2ZXIsICdjb25mL2xvY2tlZC1zaWdzLmluYycpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhuZXdfbG9ja2VkX3NpZ19maWxlX3BhdGgpOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCIlcyBkb2Vzbid0IGV4aXN0IG9yIGlzIG5vdCBhbiBleHRlbnNpYmxlIFNESyIgJSBhcmdzLnVwZGF0ZXNlcnZlcikKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJGb3VuZCBjb25mL2xvY2tlZC1zaWdzLmluYyBpbiAlcyIgJSBhcmdzLnVwZGF0ZXNlcnZlcikKKyAgICAgICAgdXBkYXRlX2RpY3QgPSBnZW5lcmF0ZV91cGRhdGVfZGljdChuZXdfbG9ja2VkX3NpZ19maWxlX3BhdGgsIG9sZF9sb2NrZWRfc2lnX2ZpbGVfcGF0aCkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJ1cGRhdGVfZGljdCA9ICVzIiAlIHVwZGF0ZV9kaWN0KQorICAgICAgICBzc3RhdGVfb2JqZWN0cyA9IGdldF9zc3RhdGVfb2JqZWN0cyh1cGRhdGVfZGljdCwgYXJncy51cGRhdGVzZXJ2ZXIpCisgICAgICAgIGxvZ2dlci5kZWJ1Zygic3N0YXRlX29iamVjdHMgPSAlcyIgJSBzc3RhdGVfb2JqZWN0cykKKyAgICAgICAgaWYgbGVuKHNzdGF0ZV9vYmplY3RzKSA9PSAwOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIk5vIG5lZWQgdG8gdXBkYXRlLiIpCisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBsb2dnZXIuaW5mbygiSW5zdGFsbGluZyBzc3RhdGUgb2JqZWN0cyBpbnRvICVzIiwgYmFzZXBhdGgpCisgICAgICAgIGluc3RhbGxfc3N0YXRlX29iamVjdHMoc3N0YXRlX29iamVjdHMsIGFyZ3MudXBkYXRlc2VydmVyLnJzdHJpcCgnLycpLCBiYXNlcGF0aCkKKyAgICAgICAgbG9nZ2VyLmluZm8oIlVwZGF0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMiKQorICAgICAgICBuZXdfY29uZl9kaXIgPSBvcy5wYXRoLmpvaW4oYXJncy51cGRhdGVzZXJ2ZXIsICdjb25mJykKKyAgICAgICAgb2xkX2NvbmZfZGlyID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAnY29uZicpCisgICAgICAgIHNodXRpbC5ybXRyZWUob2xkX2NvbmZfZGlyKQorICAgICAgICBzaHV0aWwuY29weXRyZWUobmV3X2NvbmZfZGlyLCBvbGRfY29uZl9kaXIpCisgICAgICAgIGxvZ2dlci5pbmZvKCJVcGRhdGluZyBsYXllcnMiKQorICAgICAgICBuZXdfbGF5ZXJzX2RpciA9IG9zLnBhdGguam9pbihhcmdzLnVwZGF0ZXNlcnZlciwgJ2xheWVycycpCisgICAgICAgIG9sZF9sYXllcnNfZGlyID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAnbGF5ZXJzJykKKyAgICAgICAgc2h1dGlsLnJtdHJlZShvbGRfbGF5ZXJzX2RpcikKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKG5ld19sYXllcnNfZGlyLCBvbGRfbGF5ZXJzX2RpcikKKyAgICBlbHNlOgorICAgICAgICAjIGRldnRvb2wgc2RrLXVwZGF0ZSBodHRwOi8vbXlob3N0L3NkaworICAgICAgICB0bXBzZGtfZGlyID0gJy90bXAvc2RrLWV4dCcKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHModG1wc2RrX2Rpcik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRtcHNka19kaXIpCisgICAgICAgIG9zLm1ha2VkaXJzKHRtcHNka19kaXIpCisgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbih0bXBzZGtfZGlyLCAnY29uZicpKQorICAgICAgICAjIEZldGNoIGxvY2tlZC1zaWdzLmluYyBmcm9tIHVwZGF0ZSBzZXJ2ZXIKKyAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKCJ3Z2V0IC1xIC1PIC0gJXMvY29uZi9sb2NrZWQtc2lncy5pbmMgPiAlcy9sb2NrZWQtc2lncy5pbmMiICUgKGFyZ3MudXBkYXRlc2VydmVyLCBvcy5wYXRoLmpvaW4odG1wc2RrX2RpciwgJ2NvbmYnKSksIHNoZWxsPVRydWUpCisgICAgICAgIGlmIHJldCAhPSAwOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJGZXRjaGluZyBjb25mL2xvY2tlZC1zaWdzLmluYyBmcm9tICVzIHRvICVzL2xvY2tlZC1zaWdzLmluYyBmYWlsZWQiICUgKGFyZ3MudXBkYXRlc2VydmVyLCBvcy5wYXRoLmpvaW4odG1wc2RrX2RpciwgJ2NvbmYnKSkpCisgICAgICAgICAgICByZXR1cm4gcmV0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiRmV0Y2hpbmcgY29uZi9sb2NrZWQtc2lncy5pbmMgZnJvbSAlcyB0byAlcy9sb2NrZWQtc2lncy5pbmMgc3VjY2VlZGVkIiAlIChhcmdzLnVwZGF0ZXNlcnZlciwgb3MucGF0aC5qb2luKHRtcHNka19kaXIsICdjb25mJykpKQorICAgICAgICBuZXdfbG9ja2VkX3NpZ19maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4odG1wc2RrX2RpciwgJ2NvbmYvbG9ja2VkLXNpZ3MuaW5jJykKKyAgICAgICAgdXBkYXRlX2RpY3QgPSBnZW5lcmF0ZV91cGRhdGVfZGljdChuZXdfbG9ja2VkX3NpZ19maWxlX3BhdGgsIG9sZF9sb2NrZWRfc2lnX2ZpbGVfcGF0aCkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJ1cGRhdGVfZGljdCA9ICVzIiAlIHVwZGF0ZV9kaWN0KQorICAgICAgICBpZiBsZW4odXBkYXRlX2RpY3QpID09IDA6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiTm8gbmVlZCB0byB1cGRhdGUuIikKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICMgVXBkYXRlIG1ldGFkYXRhCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiVXBkYXRpbmcgbWV0YSBkYXRhIHZpYSBnaXQgLi4uIikKKyAgICAgICAgIyBUcnkgdXNpbmcgJ2dpdCBwdWxsJywgaWYgZmFpbGVkLCB1c2UgJ2dpdCBjbG9uZScKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGJhc2VwYXRoLCAnbGF5ZXJzLy5naXQnKSk6CisgICAgICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoImNkIGxheWVycyAmJiBnaXQgcHVsbCIsIHNoZWxsPVRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXQgPSAtMQorICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgicm0gLXJmIGxheWVycyAmJiBnaXQgY2xvbmUgJXMvbGF5ZXJzIiAlIGFyZ3MudXBkYXRlc2VydmVyLCBzaGVsbD1UcnVlKQorICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVXBkYXRpbmcgbWV0YSBkYXRhIHZpYSBnaXQgZmFpbGVkIikKKyAgICAgICAgICAgIHJldHVybiByZXQKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJVcGRhdGluZyBjb25mIGZpbGVzIC4uLiIpCisgICAgICAgIGNvbmZfZmlsZXMgPSBbJ2xvY2FsLmNvbmYnLCAnYmJsYXllcnMuY29uZicsICdkZXZ0b29sLmNvbmYnLCAnd29yay1jb25maWcuaW5jJywgJ2xvY2tlZC1zaWdzLmluYyddCisgICAgICAgIGZvciBjb25mIGluIGNvbmZfZmlsZXM6CisgICAgICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoIndnZXQgLXEgLU8gLSAlcy9jb25mLyVzID4gY29uZi8lcyIgJSAoYXJncy51cGRhdGVzZXJ2ZXIsIGNvbmYsIGNvbmYpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgaWYgcmV0ICE9IDA6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVcGRhdGUgJXMgZmFpbGVkIiAlIGNvbmYpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldAorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGJhc2VwYXRoLCAnY29uZi9sb2NhbC5jb25mJyksICdhJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ1NTVEFURV9NSVJST1JTX2FwcGVuZCA9ICIgZmlsZTovLy4qICVzL3NzdGF0ZS1jYWNoZS9QQVRIIFxcbiAiXG4nICUgYXJncy51cGRhdGVzZXJ2ZXIpCisKKyAgICAjIFJ1biBiaXRiYWtlIGNvbW1hbmQgZm9yIHRoZSB3aG9sZSBTREsKKyAgICBzZGtfdGFyZ2V0cyA9IGNvbmZpZy5nZXQoJ1NESycsICdzZGtfdGFyZ2V0cycpCisgICAgbG9nZ2VyLmluZm8oIkV4ZWN1dGluZyAnYml0YmFrZSAlcycgLi4uIChUaGlzIG1heSB0YWtlIHNvbWUgdGltZS4pIiAlIHNka190YXJnZXRzKQorICAgIHRyeToKKyAgICAgICAgZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwgJ2JpdGJha2UgJXMnICUgc2RrX3RhcmdldHMpCisgICAgZXhjZXB0OgorICAgICAgICBsb2dnZXIuZXJyb3IoJ2JpdGJha2UgJXMgZmFpbGVkJyAlIHNka190YXJnZXRzKQorICAgICAgICByZXR1cm4gLTEKKyAgICByZXR1cm4gMAorCitkZWYgcmVnaXN0ZXJfY29tbWFuZHMoc3VicGFyc2VycywgY29udGV4dCk6CisgICAgIiIiUmVnaXN0ZXIgZGV2dG9vbCBzdWJjb21tYW5kcyBmcm9tIHRoZSBzZGsgcGx1Z2luIiIiCisgICAgaWYgY29udGV4dC5maXhlZF9zZXR1cDoKKyAgICAgICAgcGFyc2VyX3NkayA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignc2RrLXVwZGF0ZScsIGhlbHA9J1VwZGF0ZSBTREsgY29tcG9uZW50cyBmcm9tIGEgbm9taW5hdGVkIGxvY2F0aW9uJykKKyAgICAgICAgcGFyc2VyX3Nkay5hZGRfYXJndW1lbnQoJ3VwZGF0ZXNlcnZlcicsIGhlbHA9J1RoZSB1cGRhdGUgc2VydmVyIHRvIGZldGNoIGxhdGVzdCBTREsgY29tcG9uZW50cyBmcm9tJywgbmFyZ3M9Jz8nKQorICAgICAgICBwYXJzZXJfc2RrLnNldF9kZWZhdWx0cyhmdW5jPXNka191cGRhdGUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvc3RhbmRhcmQucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvc3RhbmRhcmQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5MDBiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9zdGFuZGFyZC5weQpAQCAtMCwwICsxLDkzMCBAQAorIyBEZXZlbG9wbWVudCB0b29sIC0gc3RhbmRhcmQgY29tbWFuZHMgcGx1Z2luCisjCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIiIiRGV2dG9vbCBzdGFuZGFyZCBwbHVnaW5zIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBzY3JpcHR1dGlscworaW1wb3J0IGVycm5vCitmcm9tIGRldnRvb2wgaW1wb3J0IGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQsIHNldHVwX3RpbmZvaWwsIERldnRvb2xFcnJvcgorZnJvbSBkZXZ0b29sIGltcG9ydCBwYXJzZV9yZWNpcGUKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2RldnRvb2wnKQorCisKK2RlZiBhZGQoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ2FkZCcgc3ViY29tbWFuZCIiIgorICAgIGltcG9ydCBiYgorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworCisgICAgaWYgYXJncy5yZWNpcGVuYW1lIGluIHdvcmtzcGFjZToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJyZWNpcGUgJXMgaXMgYWxyZWFkeSBpbiB5b3VyIHdvcmtzcGFjZSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucmVjaXBlbmFtZSkKKworICAgIHJlYXNvbiA9IG9lLnJlY2lwZXV0aWxzLnZhbGlkYXRlX3BuKGFyZ3MucmVjaXBlbmFtZSkKKyAgICBpZiByZWFzb246CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcihyZWFzb24pCisKKyAgICBzcmN0cmVlID0gb3MucGF0aC5hYnNwYXRoKGFyZ3Muc3JjdHJlZSkKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhzcmN0cmVlKToKKyAgICAgICAgaWYgYXJncy5mZXRjaDoKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNyY3RyZWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiQ2Fubm90IGZldGNoIGludG8gc291cmNlIHRyZWUgcGF0aCAlcyBhcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpdCBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN0cmVlKQorICAgICAgICAgICAgZWxpZiBvcy5saXN0ZGlyKHNyY3RyZWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiQ2Fubm90IGZldGNoIGludG8gc291cmNlIHRyZWUgcGF0aCAlcyBhcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpdCBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm9uLWVtcHR5IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3RyZWUpCisgICAgZWxpZiBub3QgYXJncy5mZXRjaDoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJTcGVjaWZpZWQgc291cmNlIHRyZWUgJXMgY291bGQgbm90IGJlIGZvdW5kIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN0cmVlKQorCisgICAgYXBwZW5kcGF0aCA9IG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICdhcHBlbmRzJykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXBwZW5kcGF0aCk6CisgICAgICAgIG9zLm1ha2VkaXJzKGFwcGVuZHBhdGgpCisKKyAgICByZWNpcGVkaXIgPSBvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAncmVjaXBlcycsIGFyZ3MucmVjaXBlbmFtZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIocmVjaXBlZGlyKQorICAgIHJmdiA9IE5vbmUKKyAgICBpZiBhcmdzLnZlcnNpb246CisgICAgICAgIGlmICdfJyBpbiBhcmdzLnZlcnNpb24gb3IgJyAnIGluIGFyZ3MudmVyc2lvbjoKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignSW52YWxpZCB2ZXJzaW9uIHN0cmluZyAiJXMiJyAlIGFyZ3MudmVyc2lvbikKKyAgICAgICAgcmZ2ID0gYXJncy52ZXJzaW9uCisgICAgaWYgYXJncy5mZXRjaDoKKyAgICAgICAgaWYgYXJncy5mZXRjaC5zdGFydHN3aXRoKCdnaXQ6Ly8nKToKKyAgICAgICAgICAgIHJmdiA9ICdnaXQnCisgICAgICAgIGVsaWYgYXJncy5mZXRjaC5zdGFydHN3aXRoKCdzdm46Ly8nKToKKyAgICAgICAgICAgIHJmdiA9ICdzdm4nCisgICAgICAgIGVsaWYgYXJncy5mZXRjaC5zdGFydHN3aXRoKCdoZzovLycpOgorICAgICAgICAgICAgcmZ2ID0gJ2hnJworICAgIGlmIHJmdjoKKyAgICAgICAgYnAgPSAiJXNfJXMiICUgKGFyZ3MucmVjaXBlbmFtZSwgcmZ2KQorICAgIGVsc2U6CisgICAgICAgIGJwID0gYXJncy5yZWNpcGVuYW1lCisgICAgcmVjaXBlZmlsZSA9IG9zLnBhdGguam9pbihyZWNpcGVkaXIsICIlcy5iYiIgJSBicCkKKyAgICBpZiBzeXMuc3Rkb3V0LmlzYXR0eSgpOgorICAgICAgICBjb2xvciA9ICdhbHdheXMnCisgICAgZWxzZToKKyAgICAgICAgY29sb3IgPSBhcmdzLmNvbG9yCisgICAgZXh0cmFjbWRvcHRzID0gJycKKyAgICBpZiBhcmdzLmZldGNoOgorICAgICAgICBzb3VyY2UgPSBhcmdzLmZldGNoCisgICAgICAgIGV4dHJhY21kb3B0cyA9ICcteCAlcycgJSBzcmN0cmVlCisgICAgZWxzZToKKyAgICAgICAgc291cmNlID0gc3JjdHJlZQorICAgIGlmIGFyZ3MudmVyc2lvbjoKKyAgICAgICAgZXh0cmFjbWRvcHRzICs9ICcgLVYgJXMnICUgYXJncy52ZXJzaW9uCisgICAgdHJ5OgorICAgICAgICBzdGRvdXQsIF8gPSBleGVjX2J1aWxkX2Vudl9jb21tYW5kKGNvbmZpZy5pbml0X3BhdGgsIGJhc2VwYXRoLCAncmVjaXBldG9vbCAtLWNvbG9yPSVzIGNyZWF0ZSAtbyAlcyAiJXMiICVzJyAlIChjb2xvciwgcmVjaXBlZmlsZSwgc291cmNlLCBleHRyYWNtZG9wdHMpKQorICAgICAgICBsb2dnZXIuaW5mbygnUmVjaXBlICVzIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgY3JlYXRlZDsgZnVydGhlciBlZGl0aW5nIG1heSBiZSByZXF1aXJlZCB0byBtYWtlIGl0IGZ1bGx5IGZ1bmN0aW9uYWwnICUgcmVjaXBlZmlsZSkKKyAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0NvbW1hbmQgXCclc1wnIGZhaWxlZDpcbiVzJyAlIChlLmNvbW1hbmQsIGUuc3Rkb3V0KSkKKworICAgIF9hZGRfbWQ1KGNvbmZpZywgYXJncy5yZWNpcGVuYW1lLCByZWNpcGVmaWxlKQorCisgICAgaW5pdGlhbF9yZXYgPSBOb25lCisgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNyY3RyZWUsICcuZ2l0JykpOgorICAgICAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9c3JjdHJlZSkKKyAgICAgICAgaW5pdGlhbF9yZXYgPSBzdGRvdXQucnN0cmlwKCkKKworICAgIGFwcGVuZGZpbGUgPSBvcy5wYXRoLmpvaW4oYXBwZW5kcGF0aCwgJyVzLmJiYXBwZW5kJyAlIGJwKQorICAgIHdpdGggb3BlbihhcHBlbmRmaWxlLCAndycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoJ2luaGVyaXQgZXh0ZXJuYWxzcmNcbicpCisgICAgICAgIGYud3JpdGUoJ0VYVEVSTkFMU1JDID0gIiVzIlxuJyAlIHNyY3RyZWUpCisgICAgICAgIGlmIGFyZ3Muc2FtZV9kaXI6CisgICAgICAgICAgICBmLndyaXRlKCdFWFRFUk5BTFNSQ19CVUlMRCA9ICIlcyJcbicgJSBzcmN0cmVlKQorICAgICAgICBpZiBpbml0aWFsX3JldjoKKyAgICAgICAgICAgIGYud3JpdGUoJ1xuIyBpbml0aWFsX3JldjogJXNcbicgJSBpbml0aWFsX3JldikKKworICAgIF9hZGRfbWQ1KGNvbmZpZywgYXJncy5yZWNpcGVuYW1lLCBhcHBlbmRmaWxlKQorCisgICAgcmV0dXJuIDAKKworCitkZWYgX2NoZWNrX2NvbXBhdGlibGVfcmVjaXBlKHBuLCBkKToKKyAgICAiIiJDaGVjayBpZiB0aGUgcmVjaXBlIGlzIHN1cHBvcnRlZCBieSBkZXZ0b29sIiIiCisgICAgaWYgcG4gPT0gJ3BlcmYnOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlRoZSBwZXJmIHJlY2lwZSBkb2VzIG5vdCBhY3R1YWxseSBjaGVjayBvdXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSBhbmQgdGh1cyBjYW5ub3QgYmUgc3VwcG9ydGVkIGJ5IHRoaXMgdG9vbCIpCisKKyAgICBpZiBwbiBpbiBbJ2tlcm5lbC1kZXZzcmMnLCAncGFja2FnZS1pbmRleCddIG9yIHBuLnN0YXJ0c3dpdGgoJ2djYy1zb3VyY2UnKToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJUaGUgJXMgcmVjaXBlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB0b29sIiAlIHBuKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnaW1hZ2UnLCBkKToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJUaGUgJXMgcmVjaXBlIGlzIGFuIGltYWdlLCBhbmQgdGhlcmVmb3JlIGlzIG5vdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwcG9ydGVkIGJ5IHRoaXMgdG9vbCIgJSBwbikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BvcHVsYXRlX3NkaycsIGQpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlRoZSAlcyByZWNpcGUgaXMgYW4gU0RLLCBhbmQgdGhlcmVmb3JlIGlzIG5vdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwcG9ydGVkIGJ5IHRoaXMgdG9vbCIgJSBwbikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BhY2thZ2Vncm91cCcsIGQpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlRoZSAlcyByZWNpcGUgaXMgYSBwYWNrYWdlZ3JvdXAsIGFuZCB0aGVyZWZvcmUgaXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB0b29sIiAlIHBuKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbWV0YScsIGQpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlRoZSAlcyByZWNpcGUgaXMgYSBtZXRhLXJlY2lwZSwgYW5kIHRoZXJlZm9yZSBpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IHN1cHBvcnRlZCBieSB0aGlzIHRvb2wiICUgcG4pCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdleHRlcm5hbHNyYycsIGQpIGFuZCBkLmdldFZhcignRVhURVJOQUxTUkMnLCBUcnVlKToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJleHRlcm5hbHNyYyBpcyBjdXJyZW50bHkgZW5hYmxlZCBmb3IgdGhlICVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWNpcGUuIFRoaXMgcHJldmVudHMgdGhlIG5vcm1hbCBkb19wYXRjaCB0YXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcm9tIHdvcmtpbmcuIFlvdSB3aWxsIG5lZWQgdG8gZGlzYWJsZSB0aGlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaXJzdC4iICUgcG4pCisKK2RlZiBfbHNfdHJlZShkaXJlY3RvcnkpOgorICAgICIiIlJlY3Vyc2l2ZSBsaXN0aW5nIG9mIGZpbGVzIGluIGEgZGlyZWN0b3J5IiIiCisgICAgcmV0ID0gW10KKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkaXJlY3RvcnkpOgorICAgICAgICByZXQuZXh0ZW5kKFtvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5qb2luKHJvb3QsIGZuYW1lKSwgZGlyZWN0b3J5KSBmb3IKKyAgICAgICAgICAgICAgICAgICAgZm5hbWUgaW4gZmlsZXNdKQorICAgIHJldHVybiByZXQKKworCitkZWYgZXh0cmFjdChhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAnZXh0cmFjdCcgc3ViY29tbWFuZCIiIgorICAgIGltcG9ydCBiYgorCisgICAgdGluZm9pbCA9IF9wcmVwX2V4dHJhY3Rfb3BlcmF0aW9uKGNvbmZpZywgYmFzZXBhdGgsIGFyZ3MucmVjaXBlbmFtZSkKKworICAgIHJkID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgYXJncy5yZWNpcGVuYW1lLCBUcnVlKQorICAgIGlmIG5vdCByZDoKKyAgICAgICAgcmV0dXJuIDEKKworICAgIHNyY3RyZWUgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5zcmN0cmVlKQorICAgIGluaXRpYWxfcmV2ID0gX2V4dHJhY3Rfc291cmNlKHNyY3RyZWUsIGFyZ3Mua2VlcF90ZW1wLCBhcmdzLmJyYW5jaCwgcmQpCisgICAgbG9nZ2VyLmluZm8oJ1NvdXJjZSB0cmVlIGV4dHJhY3RlZCB0byAlcycgJSBzcmN0cmVlKQorCisgICAgaWYgaW5pdGlhbF9yZXY6CisgICAgICAgIHJldHVybiAwCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIDEKKworY2xhc3MgQmJUYXNrRXhlY3V0b3Iob2JqZWN0KToKKyAgICAiIiJDbGFzcyBmb3IgZXhlY3V0aW5nIGJpdGJha2UgdGFza3MgZm9yIGEgcmVjaXBlCisKKyAgICBGSVhNRTogVGhpcyBpcyB2ZXJ5IGF3a3dhcmQuIFVuZm9ydHVuYXRlbHkgaXQncyBub3QgY3VycmVudGx5IGVhc3kgdG8KKyAgICBwcm9wZXJseSBleGVjdXRlIHRhc2tzIG91dHNpZGUgb2YgYml0YmFrZSBpdHNlbGYsIHVudGlsIHRoZW4gdGhpcyBoYXMgdG8KKyAgICBzdWZmaWNlIGlmIHdlIGFyZSB0byBoYW5kbGUgZS5nLiBsaW51eC15b2N0bydzIGV4dHJhIHRhc2tzCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmRhdGEpOgorICAgICAgICBzZWxmLnJkYXRhID0gcmRhdGEKKyAgICAgICAgc2VsZi5leGVjdXRlZCA9IFtdCisKKyAgICBkZWYgZXhlY19mdW5jKHNlbGYsIGZ1bmMsIHJlcG9ydCk6CisgICAgICAgICIiIlJ1biBiaXRiYWtlIHRhc2sgZnVuY3Rpb24iIiIKKyAgICAgICAgaWYgbm90IGZ1bmMgaW4gc2VsZi5leGVjdXRlZDoKKyAgICAgICAgICAgIGRlcHMgPSBzZWxmLnJkYXRhLmdldFZhckZsYWcoZnVuYywgJ2RlcHMnKQorICAgICAgICAgICAgaWYgZGVwczoKKyAgICAgICAgICAgICAgICBmb3IgdGFza2RlcGZ1bmMgaW4gZGVwczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5leGVjX2Z1bmModGFza2RlcGZ1bmMsIFRydWUpCisgICAgICAgICAgICBpZiByZXBvcnQ6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0V4ZWN1dGluZyAlcy4uLicgJSBmdW5jKQorICAgICAgICAgICAgZm4gPSBzZWxmLnJkYXRhLmdldFZhcignRklMRScsIFRydWUpCisgICAgICAgICAgICBsb2NhbGRhdGEgPSBiYi5idWlsZC5fdGFza19kYXRhKGZuLCBmdW5jLCBzZWxmLnJkYXRhKQorICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGZ1bmMsIGxvY2FsZGF0YSkKKyAgICAgICAgICAgIHNlbGYuZXhlY3V0ZWQuYXBwZW5kKGZ1bmMpCisKKworZGVmIF9wcmVwX2V4dHJhY3Rfb3BlcmF0aW9uKGNvbmZpZywgYmFzZXBhdGgsIHJlY2lwZW5hbWUpOgorICAgICIiIkhBQ0s6IFVnbHkgd29ya2Fyb3VuZCBmb3IgbWFraW5nIHN1cmUgdGhhdCByZXF1aXJlbWVudHMgYXJlIG1ldCB3aGVuCisgICAgICAgdHJ5aW5nIHRvIGV4dHJhY3QgYSBwYWNrYWdlLiBSZXR1cm5zIHRoZSB0aW5mb2lsIGluc3RhbmNlIHRvIGJlIHVzZWQuIiIiCisgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoKQorICAgIHJkID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgcmVjaXBlbmFtZSwgVHJ1ZSkKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbC15b2N0bycsIHJkKToKKyAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN0ZG91dCwgXyA9IGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQoY29uZmlnLmluaXRfcGF0aCwgYmFzZXBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiaXRiYWtlIGtlcm4tdG9vbHMtbmF0aXZlJykKKyAgICAgICAgICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKCkKKyAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJGYWlsZWQgdG8gYnVpbGQga2Vybi10b29scy1uYXRpdmU6XG4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5zdGRvdXQpCisgICAgcmV0dXJuIHRpbmZvaWwKKworCitkZWYgX2V4dHJhY3Rfc291cmNlKHNyY3RyZWUsIGtlZXBfdGVtcCwgZGV2YnJhbmNoLCBkKToKKyAgICAiIiJFeHRyYWN0IHNvdXJjZXMgb2YgYSByZWNpcGUiIiIKKyAgICBpbXBvcnQgYmIuZXZlbnQKKyAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKworICAgIGRlZiBldmVudGZpbHRlcihuYW1lLCBoYW5kbGVyLCBldmVudCwgZCk6CisgICAgICAgICIiIkJpdGJha2UgZXZlbnQgZmlsdGVyIGZvciBkZXZ0b29sIGV4dHJhY3Qgb3BlcmF0aW9uIiIiCisgICAgICAgIGlmIG5hbWUgPT0gJ2Jhc2VfZXZlbnRoYW5kbGVyJzoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIGhhc2F0dHIoYmIuZXZlbnQsICdzZXRfZXZlbnRmaWx0ZXInKToKKyAgICAgICAgYmIuZXZlbnQuc2V0X2V2ZW50ZmlsdGVyKGV2ZW50ZmlsdGVyKQorCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgX2NoZWNrX2NvbXBhdGlibGVfcmVjaXBlKHBuLCBkKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMoc3JjdHJlZSk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNyY3RyZWUpOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJvdXRwdXQgcGF0aCAlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3RyZWUpCisgICAgICAgIGVsaWYgb3MubGlzdGRpcihzcmN0cmVlKToKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigib3V0cHV0IHBhdGggJXMgYWxyZWFkeSBleGlzdHMgYW5kIGlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm9uLWVtcHR5IiAlIHNyY3RyZWUpCisKKyAgICAjIFByZXBhcmUgZm9yIHNodXRpbC5tb3ZlIGxhdGVyIG9uCisgICAgYmIudXRpbHMubWtkaXJoaWVyKHNyY3RyZWUpCisgICAgb3Mucm1kaXIoc3JjdHJlZSkKKworICAgICMgV2UgZG9uJ3Qgd2FudCBub3RlcyB0byBiZSBwcmludGVkLCB0aGV5IGFyZSB0b28gdmVyYm9zZQorICAgIG9yaWdsZXZlbCA9IGJiLmxvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbCgpCisgICAgaWYgbG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsKCkgPiBsb2dnaW5nLkRFQlVHOgorICAgICAgICBiYi5sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5XQVJOSU5HKQorCisgICAgaW5pdGlhbF9yZXYgPSBOb25lCisgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29sJykKKyAgICB0cnk6CisgICAgICAgIGNyZCA9IGQuY3JlYXRlQ29weSgpCisgICAgICAgICMgTWFrZSBhIHN1YmRpciBzbyB3ZSBndWFyZCBhZ2FpbnN0IFdPUktESVI9PVMKKyAgICAgICAgd29ya2RpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnd29ya2RpcicpCisgICAgICAgIGNyZC5zZXRWYXIoJ1dPUktESVInLCB3b3JrZGlyKQorICAgICAgICBjcmQuc2V0VmFyKCdUJywgb3MucGF0aC5qb2luKHRlbXBkaXIsICd0ZW1wJykpCisgICAgICAgIGlmIG5vdCBjcmQuZ2V0VmFyKCdTJywgVHJ1ZSkuc3RhcnRzd2l0aCh3b3JrZGlyKToKKyAgICAgICAgICAgICMgVXN1YWxseSBhIHNoYXJlZCB3b3JrZGlyIHJlY2lwZSAoa2VybmVsLCBnY2MpCisgICAgICAgICAgICAjIFRyeSB0byBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQKKyAgICAgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbCcsIGQpOgorICAgICAgICAgICAgICAgIGNyZC5zZXRWYXIoJ1MnLCAnJHtXT1JLRElSfS9zb3VyY2UnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjcmQuc2V0VmFyKCdTJywgJyR7V09SS0RJUn0vJHtCUH0nKQorICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwnLCBkKToKKyAgICAgICAgICAgICMgV2UgZG9uJ3Qgd2FudCB0byBtb3ZlIHRoZSBzb3VyY2UgdG8gU1RBR0lOR19LRVJORUxfRElSIGhlcmUKKyAgICAgICAgICAgIGNyZC5zZXRWYXIoJ1NUQUdJTkdfS0VSTkVMX0RJUicsICcke1N9JykKKworICAgICAgICB0YXNrX2V4ZWN1dG9yID0gQmJUYXNrRXhlY3V0b3IoY3JkKQorCisgICAgICAgIGNyZC5zZXRWYXIoJ0VYVEVSTkFMU1JDX2ZvcmNldmFyaWFibGUnLCAnJykKKworICAgICAgICBsb2dnZXIuaW5mbygnRmV0Y2hpbmcgJXMuLi4nICUgcG4pCisgICAgICAgIHRhc2tfZXhlY3V0b3IuZXhlY19mdW5jKCdkb19mZXRjaCcsIEZhbHNlKQorICAgICAgICBsb2dnZXIuaW5mbygnVW5wYWNraW5nLi4uJykKKyAgICAgICAgdGFza19leGVjdXRvci5leGVjX2Z1bmMoJ2RvX3VucGFjaycsIEZhbHNlKQorICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwteW9jdG8nLCBkKToKKyAgICAgICAgICAgICMgRXh0cmEgc3RlcCBmb3Iga2VybmVsIHRvIHBvcHVsYXRlIHRoZSBzb3VyY2UgZGlyZWN0b3J5CisgICAgICAgICAgICBsb2dnZXIuaW5mbygnRG9pbmcga2VybmVsIGNoZWNrb3V0Li4uJykKKyAgICAgICAgICAgIHRhc2tfZXhlY3V0b3IuZXhlY19mdW5jKCdkb19rZXJuZWxfY2hlY2tvdXQnLCBGYWxzZSkKKyAgICAgICAgc3Jjc3ViZGlyID0gY3JkLmdldFZhcignUycsIFRydWUpCisgICAgICAgIGlmIHNyY3N1YmRpciA9PSB3b3JrZGlyOgorICAgICAgICAgICAgIyBGaW5kIG5vbi1wYXRjaCBzb3VyY2VzIHRoYXQgd2VyZSAidW5wYWNrZWQiIHRvIHNyY3RyZWUgZGlyZWN0b3J5CisgICAgICAgICAgICByZWNpcGVfcGF0Y2hlcyA9IFtvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKSBmb3IgcGF0Y2ggaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfcGF0Y2hlcyhjcmQpXQorICAgICAgICAgICAgc3JjX2ZpbGVzID0gW2ZuYW1lIGZvciBmbmFtZSBpbiBfbHNfdHJlZSh3b3JrZGlyKSBpZgorICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoZm5hbWUpIG5vdCBpbiByZWNpcGVfcGF0Y2hlc10KKyAgICAgICAgICAgICMgRm9yY2Ugc2VwYXJhdGUgUyBzbyB0aGF0IHBhdGNoIGZpbGVzIGNhbiBiZSBsZWZ0IG91dCBmcm9tIHNyY3RyZWUKKyAgICAgICAgICAgIHNyY3N1YmRpciA9IHRlbXBmaWxlLm1rZHRlbXAoZGlyPXdvcmtkaXIpCisgICAgICAgICAgICBjcmQuc2V0VmFyKCdTJywgc3Jjc3ViZGlyKQorICAgICAgICAgICAgIyBNb3ZlIHNvdXJjZSBmaWxlcyB0byBTCisgICAgICAgICAgICBmb3IgcGF0aCBpbiBzcmNfZmlsZXM6CisgICAgICAgICAgICAgICAgdGd0X2RpciA9IG9zLnBhdGguam9pbihzcmNzdWJkaXIsIG9zLnBhdGguZGlybmFtZShwYXRoKSkKKyAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodGd0X2RpcikKKyAgICAgICAgICAgICAgICBzaHV0aWwubW92ZShvcy5wYXRoLmpvaW4od29ya2RpciwgcGF0aCksIHRndF9kaXIpCisgICAgICAgIGVsaWYgb3MucGF0aC5kaXJuYW1lKHNyY3N1YmRpcikgIT0gd29ya2RpcjoKKyAgICAgICAgICAgICMgSGFuZGxlIGlmIFMgaXMgc2V0IHRvIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UKKyAgICAgICAgICAgIHNyY3N1YmRpciA9IG9zLnBhdGguam9pbih3b3JrZGlyLCBvcy5wYXRoLnJlbHBhdGgoc3Jjc3ViZGlyLCB3b3JrZGlyKS5zcGxpdChvcy5zZXApWzBdKQorCisgICAgICAgIHNjcmlwdHV0aWxzLmdpdF9jb252ZXJ0X3N0YW5kYWxvbmVfY2xvbmUoc3Jjc3ViZGlyKQorCisgICAgICAgIHBhdGNoZGlyID0gb3MucGF0aC5qb2luKHNyY3N1YmRpciwgJ3BhdGNoZXMnKQorICAgICAgICBoYXNwYXRjaGVzID0gRmFsc2UKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0Y2hkaXIpOgorICAgICAgICAgICAgaWYgb3MubGlzdGRpcihwYXRjaGRpcik6CisgICAgICAgICAgICAgICAgaGFzcGF0Y2hlcyA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3Mucm1kaXIocGF0Y2hkaXIpCisKKyAgICAgICAgaWYgbm90IG9zLmxpc3RkaXIoc3Jjc3ViZGlyKToKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigibm8gc291cmNlIHVucGFja2VkIHRvIFMsIHBlcmhhcHMgdGhlICVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVjaXBlIGRvZXNuJ3QgdXNlIGFueSBzb3VyY2U/IiAlIHBuKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc3Jjc3ViZGlyLCAnLmdpdCcpKToKKyAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCdnaXQgaW5pdCcsIGN3ZD1zcmNzdWJkaXIpCisgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bignZ2l0IGFkZCAuJywgY3dkPXNyY3N1YmRpcikKKyAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCdnaXQgY29tbWl0IC1xIC1tICJJbml0aWFsIGNvbW1pdCBmcm9tIHVwc3RyZWFtIGF0IHZlcnNpb24gJXMiJyAlIGNyZC5nZXRWYXIoJ1BWJywgVHJ1ZSksIGN3ZD1zcmNzdWJkaXIpCisKKyAgICAgICAgKHN0ZG91dCwgXykgPSBiYi5wcm9jZXNzLnJ1bignZ2l0IHJldi1wYXJzZSBIRUFEJywgY3dkPXNyY3N1YmRpcikKKyAgICAgICAgaW5pdGlhbF9yZXYgPSBzdGRvdXQucnN0cmlwKCkKKworICAgICAgICBiYi5wcm9jZXNzLnJ1bignZ2l0IGNoZWNrb3V0IC1iICVzJyAlIGRldmJyYW5jaCwgY3dkPXNyY3N1YmRpcikKKyAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2dpdCB0YWcgLWYgZGV2dG9vbC1iYXNlJywgY3dkPXNyY3N1YmRpcikKKyAgICAgICAgY3JkLnNldFZhcignUEFUQ0hUT09MJywgJ2dpdCcpCisKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1BhdGNoaW5nLi4uJykKKyAgICAgICAgdGFza19leGVjdXRvci5leGVjX2Z1bmMoJ2RvX3BhdGNoJywgRmFsc2UpCisKKyAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2dpdCB0YWcgLWYgZGV2dG9vbC1wYXRjaGVkJywgY3dkPXNyY3N1YmRpcikKKworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRjaGRpcik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHBhdGNoZGlyKQorICAgICAgICAgICAgaWYgaGFzcGF0Y2hlczoKKyAgICAgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bignZ2l0IGNoZWNrb3V0IHBhdGNoZXMnLCBjd2Q9c3Jjc3ViZGlyKQorCisgICAgICAgIHNodXRpbC5tb3ZlKHNyY3N1YmRpciwgc3JjdHJlZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBiYi5sb2dnZXIuc2V0TGV2ZWwob3JpZ2xldmVsKQorCisgICAgICAgIGlmIGtlZXBfdGVtcDoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdQcmVzZXJ2aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXMnICUgdGVtcGRpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodGVtcGRpcikKKyAgICByZXR1cm4gaW5pdGlhbF9yZXYKKworZGVmIF9hZGRfbWQ1KGNvbmZpZywgcmVjaXBlbmFtZSwgZmlsZW5hbWUpOgorICAgICIiIlJlY29yZCBjaGVja3N1bSBvZiBhIGZpbGUgKG9yIHJlY3Vyc2l2ZWx5IGZvciBhIGRpcmVjdG9yeSkgdG8gdGhlIG1kNS1maWxlIG9mIHRoZSB3b3Jrc3BhY2UiIiIKKyAgICBpbXBvcnQgYmIudXRpbHMKKworICAgIGRlZiBhZGRmaWxlKGZuKToKKyAgICAgICAgbWQ1ID0gYmIudXRpbHMubWQ1X2ZpbGUoZm4pCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAnLmRldnRvb2xfbWQ1JyksICdhJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJyVzfCVzfCVzXG4nICUgKHJlY2lwZW5hbWUsIG9zLnBhdGgucmVscGF0aChmbiwgY29uZmlnLndvcmtzcGFjZV9wYXRoKSwgbWQ1KSkKKworICAgIGlmIG9zLnBhdGguaXNkaXIoZmlsZW5hbWUpOgorICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2Fsayhvcy5wYXRoLmRpcm5hbWUoZmlsZW5hbWUpKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGFkZGZpbGUob3MucGF0aC5qb2luKHJvb3QsIGYpKQorICAgIGVsc2U6CisgICAgICAgIGFkZGZpbGUoZmlsZW5hbWUpCisKK2RlZiBfY2hlY2tfcHJlc2VydmUoY29uZmlnLCByZWNpcGVuYW1lKToKKyAgICAiIiJDaGVjayBpZiBhIGZpbGUgd2FzIG1hbnVhbGx5IGNoYW5nZWQgYW5kIG5lZWRzIHRvIGJlIHNhdmVkIGluICdhdHRpYycKKyAgICAgICBkaXJlY3RvcnkiIiIKKyAgICBpbXBvcnQgYmIudXRpbHMKKyAgICBvcmlnZmlsZSA9IG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICcuZGV2dG9vbF9tZDUnKQorICAgIG5ld2ZpbGUgPSBvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAnLmRldnRvb2xfbWQ1X25ldycpCisgICAgcHJlc2VydmVwYXRoID0gb3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ2F0dGljJykKKyAgICB3aXRoIG9wZW4ob3JpZ2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgd2l0aCBvcGVuKG5ld2ZpbGUsICd3JykgYXMgdGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUucnN0cmlwKCkuc3BsaXQoJ3wnKQorICAgICAgICAgICAgICAgIGlmIHNwbGl0bGluZVswXSA9PSByZWNpcGVuYW1lOgorICAgICAgICAgICAgICAgICAgICByZW1vdmVmaWxlID0gb3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgc3BsaXRsaW5lWzFdKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBtZDUgPSBiYi51dGlscy5tZDVfZmlsZShyZW1vdmVmaWxlKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnIuZXJybm8gPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZpbGUgbm8gbG9uZ2VyIGV4aXN0cywgc2tpcCBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgIGlmIHNwbGl0bGluZVsyXSAhPSBtZDU6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocHJlc2VydmVwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVmaWxlID0gb3MucGF0aC5iYXNlbmFtZShyZW1vdmVmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0ZpbGUgJXMgbW9kaWZpZWQgc2luY2UgaXQgd2FzIHdyaXR0ZW4sIHByZXNlcnZpbmcgaW4gJXMnICUgKHByZXNlcnZlZmlsZSwgcHJlc2VydmVwYXRoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKHJlbW92ZWZpbGUsIG9zLnBhdGguam9pbihwcmVzZXJ2ZXBhdGgsIHByZXNlcnZlZmlsZSkpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUocmVtb3ZlZmlsZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0Zi53cml0ZShsaW5lKQorICAgIG9zLnJlbmFtZShuZXdmaWxlLCBvcmlnZmlsZSkKKworZGVmIG1vZGlmeShhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAnbW9kaWZ5JyBzdWJjb21tYW5kIiIiCisgICAgaW1wb3J0IGJiCisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisKKyAgICBpZiBhcmdzLnJlY2lwZW5hbWUgaW4gd29ya3NwYWNlOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoInJlY2lwZSAlcyBpcyBhbHJlYWR5IGluIHlvdXIgd29ya3NwYWNlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnJlY2lwZW5hbWUpCisKKyAgICBpZiBub3QgYXJncy5leHRyYWN0IGFuZCBub3Qgb3MucGF0aC5pc2RpcihhcmdzLnNyY3RyZWUpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoImRpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdCBvciBub3QgYSBkaXJlY3RvcnkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIihzcGVjaWZ5IC14IHRvIGV4dHJhY3Qgc291cmNlIGZyb20gcmVjaXBlKSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5zcmN0cmVlKQorICAgIGlmIGFyZ3MuZXh0cmFjdDoKKyAgICAgICAgdGluZm9pbCA9IF9wcmVwX2V4dHJhY3Rfb3BlcmF0aW9uKGNvbmZpZywgYmFzZXBhdGgsIGFyZ3MucmVjaXBlbmFtZSkKKyAgICBlbHNlOgorICAgICAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbCgpCisKKyAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIGFyZ3MucmVjaXBlbmFtZSwgVHJ1ZSkKKyAgICBpZiBub3QgcmQ6CisgICAgICAgIHJldHVybiAxCisgICAgcmVjaXBlZmlsZSA9IHJkLmdldFZhcignRklMRScsIFRydWUpCisgICAgYXBwZW5kbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSlbMF0KKyAgICBpZiBhcmdzLndpbGRjYXJkOgorICAgICAgICBhcHBlbmRuYW1lID0gcmUuc3ViKHInXy4qJywgJ18lJywgYXBwZW5kbmFtZSkKKyAgICBhcHBlbmRwYXRoID0gb3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ2FwcGVuZHMnKQorICAgIGFwcGVuZGZpbGUgPSBvcy5wYXRoLmpvaW4oYXBwZW5kcGF0aCwgYXBwZW5kbmFtZSArICcuYmJhcHBlbmQnKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGFwcGVuZGZpbGUpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIkFub3RoZXIgdmFyaWFudCBvZiByZWNpcGUgJXMgaXMgYWxyZWFkeSBpbiB5b3VyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b3Jrc3BhY2UgKG9ubHkgb25lIHZhcmlhbnQgb2YgYSByZWNpcGUgY2FuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdXJyZW50bHkgYmUgd29ya2VkIG9uIGF0IG9uY2UpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBhcmdzLnJlY2lwZW5hbWUpCisKKyAgICBfY2hlY2tfY29tcGF0aWJsZV9yZWNpcGUoYXJncy5yZWNpcGVuYW1lLCByZCkKKworICAgIGluaXRpYWxfcmV2ID0gTm9uZQorICAgIGNvbW1pdHMgPSBbXQorICAgIHNyY3RyZWUgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5zcmN0cmVlKQorICAgIGlmIGFyZ3MuZXh0cmFjdDoKKyAgICAgICAgaW5pdGlhbF9yZXYgPSBfZXh0cmFjdF9zb3VyY2UoYXJncy5zcmN0cmVlLCBGYWxzZSwgYXJncy5icmFuY2gsIHJkKQorICAgICAgICBpZiBub3QgaW5pdGlhbF9yZXY6CisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBsb2dnZXIuaW5mbygnU291cmNlIHRyZWUgZXh0cmFjdGVkIHRvICVzJyAlIHNyY3RyZWUpCisgICAgICAgICMgR2V0IGxpc3Qgb2YgY29tbWl0cyBzaW5jZSB0aGlzIHJldmlzaW9uCisgICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtbGlzdCAtLXJldmVyc2UgJXMuLkhFQUQnICUgaW5pdGlhbF9yZXYsIGN3ZD1hcmdzLnNyY3RyZWUpCisgICAgICAgIGNvbW1pdHMgPSBzdGRvdXQuc3BsaXQoKQorICAgIGVsc2U6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcmdzLnNyY3RyZWUsICcuZ2l0JykpOgorICAgICAgICAgICAgIyBDaGVjayBpZiBpdCdzIGEgdHJlZSBwcmV2aW91c2x5IGV4dHJhY3RlZCBieSB1cworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCBicmFuY2ggLS1jb250YWlucyBkZXZ0b29sLWJhc2UnLCBjd2Q9YXJncy5zcmN0cmVlKQorICAgICAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3I6CisgICAgICAgICAgICAgICAgc3Rkb3V0ID0gJycKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHN0ZG91dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcqJyk6CisgICAgICAgICAgICAgICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtcGFyc2UgZGV2dG9vbC1iYXNlJywgY3dkPWFyZ3Muc3JjdHJlZSkKKyAgICAgICAgICAgICAgICAgICAgaW5pdGlhbF9yZXYgPSBzdGRvdXQucnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBpbml0aWFsX3JldjoKKyAgICAgICAgICAgICAgICAjIE90aGVyd2lzZSwganVzdCBncmFiIHRoZSBoZWFkIHJldmlzaW9uCisgICAgICAgICAgICAgICAgKHN0ZG91dCwgXykgPSBiYi5wcm9jZXNzLnJ1bignZ2l0IHJldi1wYXJzZSBIRUFEJywgY3dkPWFyZ3Muc3JjdHJlZSkKKyAgICAgICAgICAgICAgICBpbml0aWFsX3JldiA9IHN0ZG91dC5yc3RyaXAoKQorCisgICAgIyBDaGVjayB0aGF0IHJlY2lwZSBpc24ndCB1c2luZyBhIHNoYXJlZCB3b3JrZGlyCisgICAgcyA9IG9zLnBhdGguYWJzcGF0aChyZC5nZXRWYXIoJ1MnLCBUcnVlKSkKKyAgICB3b3JrZGlyID0gb3MucGF0aC5hYnNwYXRoKHJkLmdldFZhcignV09SS0RJUicsIFRydWUpKQorICAgIGlmIHMuc3RhcnRzd2l0aCh3b3JrZGlyKSBhbmQgcyAhPSB3b3JrZGlyIGFuZCBvcy5wYXRoLmRpcm5hbWUocykgIT0gd29ya2RpcjoKKyAgICAgICAgIyBIYW5kbGUgaWYgUyBpcyBzZXQgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIHNvdXJjZQorICAgICAgICBzcmNzdWJkaXIgPSBvcy5wYXRoLnJlbHBhdGgocywgd29ya2Rpcikuc3BsaXQob3Muc2VwLCAxKVsxXQorICAgICAgICBzcmN0cmVlID0gb3MucGF0aC5qb2luKHNyY3RyZWUsIHNyY3N1YmRpcikKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcHBlbmRwYXRoKToKKyAgICAgICAgb3MubWFrZWRpcnMoYXBwZW5kcGF0aCkKKyAgICB3aXRoIG9wZW4oYXBwZW5kZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCdGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG5cbicpCisgICAgICAgIGYud3JpdGUoJ2luaGVyaXQgZXh0ZXJuYWxzcmNcbicpCisgICAgICAgIGYud3JpdGUoJyMgTk9URTogV2UgdXNlIHBuLSBvdmVycmlkZXMgaGVyZSB0byBhdm9pZCBhZmZlY3RpbmcgbXVsdGlwbGUgdmFyaWFudHMgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHJlY2lwZSB1c2VzIEJCQ0xBU1NFWFRFTkRcbicpCisgICAgICAgIGYud3JpdGUoJ0VYVEVSTkFMU1JDX3BuLSVzID0gIiVzIlxuJyAlIChhcmdzLnJlY2lwZW5hbWUsIHNyY3RyZWUpKQorCisgICAgICAgIGJfaXNfcyA9IFRydWUKKyAgICAgICAgaWYgYXJncy5ub19zYW1lX2RpcjoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCd1c2luZyBzZXBhcmF0ZSBidWlsZCBkaXJlY3Rvcnkgc2luY2UgLS1uby1zYW1lLWRpciBzcGVjaWZpZWQnKQorICAgICAgICAgICAgYl9pc19zID0gRmFsc2UKKyAgICAgICAgZWxpZiBhcmdzLnNhbWVfZGlyOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3VzaW5nIHNvdXJjZSB0cmVlIGFzIGJ1aWxkIGRpcmVjdG9yeSBzaW5jZSAtLXNhbWUtZGlyIHNwZWNpZmllZCcpCisgICAgICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYXV0b3Rvb2xzLWJyb2tlbnNlcCcsIHJkKToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCd1c2luZyBzb3VyY2UgdHJlZSBhcyBidWlsZCBkaXJlY3Rvcnkgc2luY2Ugb3JpZ2luYWwgcmVjaXBlIGluaGVyaXRzIGF1dG90b29scy1icm9rZW5zZXAnKQorICAgICAgICBlbGlmIHJkLmdldFZhcignQicsIFRydWUpID09IHM6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygndXNpbmcgc291cmNlIHRyZWUgYXMgYnVpbGQgZGlyZWN0b3J5IHNpbmNlIHRoYXQgaXMgdGhlIGRlZmF1bHQgZm9yIHRoaXMgcmVjaXBlJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJfaXNfcyA9IEZhbHNlCisgICAgICAgIGlmIGJfaXNfczoKKyAgICAgICAgICAgIGYud3JpdGUoJ0VYVEVSTkFMU1JDX0JVSUxEX3BuLSVzID0gIiVzIlxuJyAlIChhcmdzLnJlY2lwZW5hbWUsIHNyY3RyZWUpKQorCisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbCcsIHJkKToKKyAgICAgICAgICAgIGYud3JpdGUoJ1NSQ1RSRUVDT1ZFUkVEVEFTS1MgPSAiZG9fdmFsaWRhdGVfYnJhbmNoZXMgZG9fa2VybmVsX2NoZWNrb3V0IGRvX2ZldGNoIGRvX3VucGFjayJcbicpCisgICAgICAgIGlmIGluaXRpYWxfcmV2OgorICAgICAgICAgICAgZi53cml0ZSgnXG4jIGluaXRpYWxfcmV2OiAlc1xuJyAlIGluaXRpYWxfcmV2KQorICAgICAgICAgICAgZm9yIGNvbW1pdCBpbiBjb21taXRzOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJyMgY29tbWl0OiAlc1xuJyAlIGNvbW1pdCkKKworICAgIF9hZGRfbWQ1KGNvbmZpZywgYXJncy5yZWNpcGVuYW1lLCBhcHBlbmRmaWxlKQorCisgICAgbG9nZ2VyLmluZm8oJ1JlY2lwZSAlcyBub3cgc2V0IHVwIHRvIGJ1aWxkIGZyb20gJXMnICUgKGFyZ3MucmVjaXBlbmFtZSwgc3JjdHJlZSkpCisKKyAgICByZXR1cm4gMAorCitkZWYgX2dldF9wYXRjaHNldF9yZXZzKGFyZ3MsIHNyY3RyZWUsIHJlY2lwZV9wYXRoKToKKyAgICAiIiJHZXQgaW5pdGlhbCBhbmQgdXBkYXRlIHJldiBvZiBhIHJlY2lwZS4gVGhlc2UgYXJlIHRoZSBzdGFydCBwb2ludCBvZiB0aGUKKyAgICB3aG9sZSBwYXRjaHNldCBhbmQgc3RhcnQgcG9pbnQgZm9yIHRoZSBwYXRjaGVzIHRvIGJlIHJlLWdlbmVyYXRlZC91cGRhdGVkLgorICAgICIiIgorICAgIGltcG9ydCBiYgorCisgICAgaWYgYXJncy5pbml0aWFsX3JldjoKKyAgICAgICAgcmV0dXJuIGFyZ3MuaW5pdGlhbF9yZXYsIGFyZ3MuaW5pdGlhbF9yZXYKKworICAgICMgUGFyc2UgaW5pdGlhbCByZXYgZnJvbSByZWNpcGUKKyAgICBjb21taXRzID0gW10KKyAgICBpbml0aWFsX3JldiA9IE5vbmUKKyAgICB3aXRoIG9wZW4ocmVjaXBlX3BhdGgsICdyJykgYXMgZjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnIyBpbml0aWFsX3JldjonKToKKyAgICAgICAgICAgICAgICBpbml0aWFsX3JldiA9IGxpbmUuc3BsaXQoJzonKVstMV0uc3RyaXAoKQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJyMgY29tbWl0OicpOgorICAgICAgICAgICAgICAgIGNvbW1pdHMuYXBwZW5kKGxpbmUuc3BsaXQoJzonKVstMV0uc3RyaXAoKSkKKworICAgIHVwZGF0ZV9yZXYgPSBpbml0aWFsX3JldgorICAgIGlmIGluaXRpYWxfcmV2OgorICAgICAgICAjIEZpbmQgZmlyc3QgYWN0dWFsbHkgY2hhbmdlZCByZXZpc2lvbgorICAgICAgICBzdGRvdXQsIF8gPSBiYi5wcm9jZXNzLnJ1bignZ2l0IHJldi1saXN0IC0tcmV2ZXJzZSAlcy4uSEVBRCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX3JldiwgY3dkPXNyY3RyZWUpCisgICAgICAgIG5ld2NvbW1pdHMgPSBzdGRvdXQuc3BsaXQoKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobWluKGxlbihjb21taXRzKSwgbGVuKG5ld2NvbW1pdHMpKSk6CisgICAgICAgICAgICBpZiBuZXdjb21taXRzW2ldID09IGNvbW1pdHNbaV06CisgICAgICAgICAgICAgICAgdXBkYXRlX3JldiA9IGNvbW1pdHNbaV0KKworICAgIHJldHVybiBpbml0aWFsX3JldiwgdXBkYXRlX3JldgorCitkZWYgX3JlbW92ZV9wYXRjaF9lbnRyaWVzKHNyY3VyaSwgcGF0Y2hsaXN0KToKKyAgICAiIiJSZW1vdmUgcGF0Y2ggZW50cmllcyBmcm9tIFNSQ19VUkkiIiIKKyAgICByZW1haW5pbmcgPSBwYXRjaGxpc3RbOl0KKyAgICBlbnRyaWVzID0gW10KKyAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hsaXN0OgorICAgICAgICBwYXRjaGZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHNyY3VyaSkpOgorICAgICAgICAgICAgaWYgc3JjdXJpW2ldLnN0YXJ0c3dpdGgoJ2ZpbGU6Ly8nKSBhbmQgb3MucGF0aC5iYXNlbmFtZShzcmN1cmlbaV0uc3BsaXQoJzsnKVswXSkgPT0gcGF0Y2hmaWxlOgorICAgICAgICAgICAgICAgIGVudHJpZXMuYXBwZW5kKHNyY3VyaVtpXSkKKyAgICAgICAgICAgICAgICByZW1haW5pbmcucmVtb3ZlKHBhdGNoKQorICAgICAgICAgICAgICAgIHNyY3VyaS5wb3AoaSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgIHJldHVybiBlbnRyaWVzLCByZW1haW5pbmcKKworZGVmIF9yZW1vdmVfcGF0Y2hfZmlsZXMoYXJncywgcGF0Y2hlcywgZGVzdHBhdGgpOgorICAgICIiIlVubGluayBleGlzdGluZyBwYXRjaCBmaWxlcyIiIgorICAgIGZvciBwYXRjaGZpbGUgaW4gcGF0Y2hlczoKKyAgICAgICAgaWYgYXJncy5hcHBlbmQ6CisgICAgICAgICAgICBpZiBub3QgZGVzdHBhdGg6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdkZXN0cGF0aCBzaG91bGQgYmUgc2V0IGhlcmUnKQorICAgICAgICAgICAgcGF0Y2hmaWxlID0gb3MucGF0aC5qb2luKGRlc3RwYXRoLCBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoZmlsZSkpCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0Y2hmaWxlKToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdSZW1vdmluZyBwYXRjaCAlcycgJSBwYXRjaGZpbGUpCisgICAgICAgICAgICAjIEZJWE1FICJnaXQgcm0iIGhlcmUgd291bGQgYmUgbmljZSBpZiB0aGUgZmlsZSBpbiBxdWVzdGlvbiBpcworICAgICAgICAgICAgIyAgICAgICB0cmFja2VkCisgICAgICAgICAgICAjIEZJWE1FIHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB0aGlzIGZpbGUgaXMgcmVmZXJyZWQgdG8gYnkKKyAgICAgICAgICAgICMgICAgICAgYW5vdGhlciByZWNpcGUsIGluIHdoaWNoIGNhc2UgZGVsZXRpbmcgd291bGRuJ3QgYmUgdGhlCisgICAgICAgICAgICAjICAgICAgIHJpZ2h0IHRoaW5nIHRvIGRvCisgICAgICAgICAgICBvcy5yZW1vdmUocGF0Y2hmaWxlKQorICAgICAgICAgICAgIyBSZW1vdmUgZGlyZWN0b3J5IGlmIGVtcHR5CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3Mucm1kaXIob3MucGF0aC5kaXJuYW1lKHBhdGNoZmlsZSkpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBvc2U6CisgICAgICAgICAgICAgICAgaWYgb3NlLmVycm5vICE9IGVycm5vLkVOT1RFTVBUWToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworZGVmIF91cGRhdGVfcmVjaXBlX3NyY3JldihhcmdzLCBzcmN0cmVlLCByZCwgY29uZmlnX2RhdGEpOgorICAgICIiIkltcGxlbWVudCB0aGUgJ3NyY3JldicgbW9kZSBvZiB1cGRhdGUtcmVjaXBlIiIiCisgICAgaW1wb3J0IGJiCisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisgICAgZnJvbSBvZS5wYXRjaCBpbXBvcnQgR2l0QXBwbHlUcmVlCisKKyAgICByZWNpcGVmaWxlID0gcmQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkKKyAgICBsb2dnZXIuaW5mbygnVXBkYXRpbmcgU1JDUkVWIGluIHJlY2lwZSAlcycgJSBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpKQorCisgICAgIyBHZXQgSEVBRCByZXZpc2lvbgorICAgIHRyeToKKyAgICAgICAgc3Rkb3V0LCBfID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD1zcmN0cmVlKQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGVycjoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdGYWlsZWQgdG8gZ2V0IEhFQUQgcmV2aXNpb24gaW4gJXM6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3JjdHJlZSwgZXJyKSkKKyAgICBzcmNyZXYgPSBzdGRvdXQuc3RyaXAoKQorICAgIGlmIGxlbihzcmNyZXYpICE9IDQwOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0ludmFsaWQgaGFzaCByZXR1cm5lZCBieSBnaXQ6ICVzJyAlIHN0ZG91dCkKKworICAgIGRlc3RwYXRoID0gTm9uZQorICAgIHJlbW92ZXBhdGNoZXMgPSBbXQorICAgIHBhdGNoZmllbGRzID0ge30KKyAgICBwYXRjaGZpZWxkc1snU1JDUkVWJ10gPSBzcmNyZXYKKyAgICBvcmlnX3NyY191cmkgPSByZC5nZXRWYXIoJ1NSQ19VUkknLCBGYWxzZSkgb3IgJycKKyAgICBpZiBub3QgYXJncy5ub19yZW1vdmU6CisgICAgICAgICMgRmluZCBsaXN0IG9mIGV4aXN0aW5nIHBhdGNoZXMgaW4gcmVjaXBlIGZpbGUKKyAgICAgICAgZXhpc3RpbmdfcGF0Y2hlcyA9IG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfcGF0Y2hlcyhyZCkKKworICAgICAgICBvbGRfc3JjcmV2ID0gKHJkLmdldFZhcignU1JDUkVWJywgRmFsc2UpIG9yICcnKQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2wnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBHaXRBcHBseVRyZWUuZXh0cmFjdFBhdGNoZXMoc3JjdHJlZSwgb2xkX3NyY3JldiwgdGVtcGRpcikKKyAgICAgICAgICAgIG5ld3BhdGNoZXMgPSBvcy5saXN0ZGlyKHRlbXBkaXIpCisgICAgICAgICAgICBmb3IgcGF0Y2ggaW4gZXhpc3RpbmdfcGF0Y2hlczoKKyAgICAgICAgICAgICAgICBwYXRjaGZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKQorICAgICAgICAgICAgICAgIGlmIHBhdGNoZmlsZSBpbiBuZXdwYXRjaGVzOgorICAgICAgICAgICAgICAgICAgICByZW1vdmVwYXRjaGVzLmFwcGVuZChwYXRjaCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodGVtcGRpcikKKworICAgICAgICBpZiByZW1vdmVwYXRjaGVzOgorICAgICAgICAgICAgc3JjdXJpID0gb3JpZ19zcmNfdXJpLnNwbGl0KCkKKyAgICAgICAgICAgIHJlbW92ZWRlbnRyaWVzLCBfID0gX3JlbW92ZV9wYXRjaF9lbnRyaWVzKHNyY3VyaSwgcmVtb3ZlcGF0Y2hlcykKKyAgICAgICAgICAgIGlmIHJlbW92ZWRlbnRyaWVzOgorICAgICAgICAgICAgICAgIHBhdGNoZmllbGRzWydTUkNfVVJJJ10gPSAnICcuam9pbihzcmN1cmkpCisKKyAgICBpZiBhcmdzLmFwcGVuZDoKKyAgICAgICAgXywgZGVzdHBhdGggPSBvZS5yZWNpcGV1dGlscy5iYmFwcGVuZF9yZWNpcGUoCisgICAgICAgICAgICAgICAgcmQsIGFyZ3MuYXBwZW5kLCBOb25lLCB3aWxkY2FyZHZlcj1hcmdzLndpbGRjYXJkX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgZXh0cmFsaW5lcz1wYXRjaGZpZWxkcykKKyAgICBlbHNlOgorICAgICAgICBvZS5yZWNpcGV1dGlscy5wYXRjaF9yZWNpcGUocmQsIHJlY2lwZWZpbGUsIHBhdGNoZmllbGRzKQorCisgICAgaWYgbm90ICdnaXQ6Ly8nIGluIG9yaWdfc3JjX3VyaToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1lvdSB3aWxsIG5lZWQgdG8gdXBkYXRlIFNSQ19VUkkgd2l0aGluIHRoZSByZWNpcGUgdG8gJworICAgICAgICAgICAgICAgICAgICAncG9pbnQgdG8gYSBnaXQgcmVwb3NpdG9yeSB3aGVyZSB5b3UgaGF2ZSBwdXNoZWQgeW91ciAnCisgICAgICAgICAgICAgICAgICAgICdjaGFuZ2VzJykKKworICAgIF9yZW1vdmVfcGF0Y2hfZmlsZXMoYXJncywgcmVtb3ZlcGF0Y2hlcywgZGVzdHBhdGgpCisKK2RlZiBfdXBkYXRlX3JlY2lwZV9wYXRjaChhcmdzLCBjb25maWcsIHNyY3RyZWUsIHJkLCBjb25maWdfZGF0YSk6CisgICAgIiIiSW1wbGVtZW50IHRoZSAncGF0Y2gnIG1vZGUgb2YgdXBkYXRlLXJlY2lwZSIiIgorICAgIGltcG9ydCBiYgorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworICAgIGZyb20gb2UucGF0Y2ggaW1wb3J0IEdpdEFwcGx5VHJlZQorCisgICAgcmVjaXBlZmlsZSA9IHJkLmdldFZhcignRklMRScsIFRydWUpCisgICAgYXBwZW5kID0gb3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ2FwcGVuZHMnLCAnJXMuYmJhcHBlbmQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpKVswXSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXBwZW5kKToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCd1bmFibGUgdG8gZmluZCB3b3Jrc3BhY2UgYmJhcHBlbmQgZm9yIHJlY2lwZSAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5yZWNpcGVuYW1lKQorCisgICAgaW5pdGlhbF9yZXYsIHVwZGF0ZV9yZXYgPSBfZ2V0X3BhdGNoc2V0X3JldnMoYXJncywgc3JjdHJlZSwgYXBwZW5kKQorICAgIGlmIG5vdCBpbml0aWFsX3JldjoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdVbmFibGUgdG8gZmluZCBpbml0aWFsIHJldmlzaW9uIC0gcGxlYXNlIHNwZWNpZnkgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2l0IHdpdGggLS1pbml0aWFsLXJldicpCisKKyAgICAjIEZpbmQgbGlzdCBvZiBleGlzdGluZyBwYXRjaGVzIGluIHJlY2lwZSBmaWxlCisgICAgZXhpc3RpbmdfcGF0Y2hlcyA9IG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfcGF0Y2hlcyhyZCkKKworICAgIHJlbW92ZXBhdGNoZXMgPSBbXQorICAgIHNlcXBhdGNoX3JlID0gcmUuY29tcGlsZSgnXihbMC05XXs0fS0pPyguKyknKQorICAgIGlmIG5vdCBhcmdzLm5vX3JlbW92ZToKKyAgICAgICAgIyBHZXQgYWxsIHBhdGNoZXMgZnJvbSBzb3VyY2UgdHJlZSBhbmQgY2hlY2sgaWYgYW55IHNob3VsZCBiZSByZW1vdmVkCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEdpdEFwcGx5VHJlZS5leHRyYWN0UGF0Y2hlcyhzcmN0cmVlLCBpbml0aWFsX3JldiwgdGVtcGRpcikKKyAgICAgICAgICAgICMgU3RyaXAgbnVtYmVyaW5nIGZyb20gcGF0Y2ggbmFtZXMuIElmIGl0J3MgYSBnaXQgc2VxdWVuY2UgbmFtZWQKKyAgICAgICAgICAgICMgcGF0Y2gsIHRoZSBudW1iZXJzIG1pZ2h0IG5vdCBtYXRjaCB1cCBzaW5jZSB3ZSBhcmUgc3RhcnRpbmcgZnJvbQorICAgICAgICAgICAgIyBhIGRpZmZlcmVudCByZXZpc2lvbiBUaGlzIGRvZXMgYXNzdW1lIHRoYXQgcGVvcGxlIGFyZSB1c2luZworICAgICAgICAgICAgIyB1bmlxdWUgc2hvcnRsb2cgdmFsdWVzLCBidXQgdGhleSBvdWdodCB0byBiZSBhbnl3YXkuLi4KKyAgICAgICAgICAgIG5ld3BhdGNoZXMgPSBbc2VxcGF0Y2hfcmUubWF0Y2goZm5hbWUpLmdyb3VwKDIpIGZvciBmbmFtZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5saXN0ZGlyKHRlbXBkaXIpXQorICAgICAgICAgICAgZm9yIHBhdGNoIGluIGV4aXN0aW5nX3BhdGNoZXM6CisgICAgICAgICAgICAgICAgYmFzZW5hbWUgPSBzZXFwYXRjaF9yZS5tYXRjaCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShwYXRjaCkpLmdyb3VwKDIpCisgICAgICAgICAgICAgICAgaWYgYmFzZW5hbWUgbm90IGluIG5ld3BhdGNoZXM6CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZXBhdGNoZXMuYXBwZW5kKHBhdGNoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorCisgICAgIyBHZXQgdXBkYXRlZCBwYXRjaGVzIGZyb20gc291cmNlIHRyZWUKKyAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2wnKQorICAgIHRyeToKKyAgICAgICAgR2l0QXBwbHlUcmVlLmV4dHJhY3RQYXRjaGVzKHNyY3RyZWUsIHVwZGF0ZV9yZXYsIHRlbXBkaXIpCisKKyAgICAgICAgIyBNYXRjaCB1cCBhbmQgcmVwbGFjZSBleGlzdGluZyBwYXRjaGVzIHdpdGggY29ycmVzcG9uZGluZyBuZXcgcGF0Y2hlcworICAgICAgICB1cGRhdGVwYXRjaGVzID0gRmFsc2UKKyAgICAgICAgdXBkYXRlcmVjaXBlID0gRmFsc2UKKyAgICAgICAgZGVzdHBhdGggPSBOb25lCisgICAgICAgIG5ld3BhdGNoZXMgPSBvcy5saXN0ZGlyKHRlbXBkaXIpCisgICAgICAgIGlmIGFyZ3MuYXBwZW5kOgorICAgICAgICAgICAgcGF0Y2hmaWxlcyA9IHt9CisgICAgICAgICAgICBmb3IgcGF0Y2ggaW4gZXhpc3RpbmdfcGF0Y2hlczoKKyAgICAgICAgICAgICAgICBwYXRjaGZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKQorICAgICAgICAgICAgICAgIGlmIHBhdGNoZmlsZSBpbiBuZXdwYXRjaGVzOgorICAgICAgICAgICAgICAgICAgICBwYXRjaGZpbGVzW29zLnBhdGguam9pbih0ZW1wZGlyLCBwYXRjaGZpbGUpXSA9IHBhdGNoZmlsZQorICAgICAgICAgICAgICAgICAgICBuZXdwYXRjaGVzLnJlbW92ZShwYXRjaGZpbGUpCisgICAgICAgICAgICBmb3IgcGF0Y2hmaWxlIGluIG5ld3BhdGNoZXM6CisgICAgICAgICAgICAgICAgcGF0Y2hmaWxlc1tvcy5wYXRoLmpvaW4odGVtcGRpciwgcGF0Y2hmaWxlKV0gPSBOb25lCisKKyAgICAgICAgICAgIGlmIHBhdGNoZmlsZXMgb3IgcmVtb3ZlcGF0Y2hlczoKKyAgICAgICAgICAgICAgICByZW1vdmV2YWx1ZXMgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgcmVtb3ZlcGF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgc3JjdXJpID0gKHJkLmdldFZhcignU1JDX1VSSScsIEZhbHNlKSBvciAnJykuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICByZW1vdmVkZW50cmllcywgcmVtYWluaW5nID0gX3JlbW92ZV9wYXRjaF9lbnRyaWVzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3VyaSwgcmVtb3ZlcGF0Y2hlcykKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVtb3ZlZGVudHJpZXMgb3IgcmVtYWluaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nID0gWydmaWxlOi8vJyArIG9zLnBhdGguYmFzZW5hbWUoaXRlbSkgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSBpbiByZW1haW5pbmddCisgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmV2YWx1ZXMgPSB7J1NSQ19VUkknOiByZW1vdmVkZW50cmllcyArIHJlbWFpbmluZ30KKyAgICAgICAgICAgICAgICBfLCBkZXN0cGF0aCA9IG9lLnJlY2lwZXV0aWxzLmJiYXBwZW5kX3JlY2lwZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmQsIGFyZ3MuYXBwZW5kLCBwYXRjaGZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmV2YWx1ZXM9cmVtb3ZldmFsdWVzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnTm8gcGF0Y2hlcyBuZWVkZWQgdXBkYXRpbmcnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIHBhdGNoIGluIGV4aXN0aW5nX3BhdGNoZXM6CisgICAgICAgICAgICAgICAgcGF0Y2hmaWxlID0gb3MucGF0aC5iYXNlbmFtZShwYXRjaCkKKyAgICAgICAgICAgICAgICBpZiBwYXRjaGZpbGUgaW4gbmV3cGF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1VwZGF0aW5nIHBhdGNoICVzJyAlIHBhdGNoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLm1vdmUob3MucGF0aC5qb2luKHRlbXBkaXIsIHBhdGNoZmlsZSksIHBhdGNoKQorICAgICAgICAgICAgICAgICAgICBuZXdwYXRjaGVzLnJlbW92ZShwYXRjaGZpbGUpCisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXBhdGNoZXMgPSBUcnVlCisgICAgICAgICAgICBzcmN1cmkgPSAocmQuZ2V0VmFyKCdTUkNfVVJJJywgRmFsc2UpIG9yICcnKS5zcGxpdCgpCisgICAgICAgICAgICBpZiBuZXdwYXRjaGVzOgorICAgICAgICAgICAgICAgICMgQWRkIGFueSBwYXRjaGVzIGxlZnQgb3ZlcgorICAgICAgICAgICAgICAgIHBhdGNoZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZC5nZXRWYXIoJ0JQTicsIFRydWUpKQorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwYXRjaGRpcikKKyAgICAgICAgICAgICAgICBmb3IgcGF0Y2hmaWxlIGluIG5ld3BhdGNoZXM6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdBZGRpbmcgbmV3IHBhdGNoICVzJyAlIHBhdGNoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLm1vdmUob3MucGF0aC5qb2luKHRlbXBkaXIsIHBhdGNoZmlsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihwYXRjaGRpciwgcGF0Y2hmaWxlKSkKKyAgICAgICAgICAgICAgICAgICAgc3JjdXJpLmFwcGVuZCgnZmlsZTovLyVzJyAlIHBhdGNoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlcmVjaXBlID0gVHJ1ZQorICAgICAgICAgICAgaWYgcmVtb3ZlcGF0Y2hlczoKKyAgICAgICAgICAgICAgICByZW1vdmVkZW50cmllcywgXyA9IF9yZW1vdmVfcGF0Y2hfZW50cmllcyhzcmN1cmksIHJlbW92ZXBhdGNoZXMpCisgICAgICAgICAgICAgICAgaWYgcmVtb3ZlZGVudHJpZXM6CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXJlY2lwZSA9IFRydWUKKyAgICAgICAgICAgIGlmIHVwZGF0ZXJlY2lwZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnVXBkYXRpbmcgcmVjaXBlICVzJyAlIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgICAgICAgICAgb2UucmVjaXBldXRpbHMucGF0Y2hfcmVjaXBlKHJkLCByZWNpcGVmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J1NSQ19VUkknOiAnICcuam9pbihzcmN1cmkpfSkKKyAgICAgICAgICAgIGVsaWYgbm90IHVwZGF0ZXBhdGNoZXM6CisgICAgICAgICAgICAgICAgIyBOZWl0aGVyIHBhdGNoZXMgbm9yIHJlY2lwZSB3ZXJlIHVwZGF0ZWQKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnTm8gcGF0Y2hlcyBuZWVkIHVwZGF0aW5nJykKKyAgICBmaW5hbGx5OgorICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBkaXIpCisKKyAgICBfcmVtb3ZlX3BhdGNoX2ZpbGVzKGFyZ3MsIHJlbW92ZXBhdGNoZXMsIGRlc3RwYXRoKQorCitkZWYgX2d1ZXNzX3JlY2lwZV91cGRhdGVfbW9kZShzcmN0cmVlLCByZGF0YSk6CisgICAgIiIiR3Vlc3MgdGhlIHJlY2lwZSB1cGRhdGUgbW9kZSB0byB1c2UiIiIKKyAgICBzcmNfdXJpID0gKHJkYXRhLmdldFZhcignU1JDX1VSSScsIEZhbHNlKSBvciAnJykuc3BsaXQoKQorICAgIGdpdF91cmlzID0gW3VyaSBmb3IgdXJpIGluIHNyY191cmkgaWYgdXJpLnN0YXJ0c3dpdGgoJ2dpdDovLycpXQorICAgIGlmIG5vdCBnaXRfdXJpczoKKyAgICAgICAgcmV0dXJuICdwYXRjaCcKKyAgICAjIEp1c3QgdXNlIHRoZSBmaXJzdCBVUkkgZm9yIG5vdworICAgIHVyaSA9IGdpdF91cmlzWzBdCisgICAgIyBDaGVjayByZW1vdGUgYnJhbmNoCisgICAgcGFyYW1zID0gYmIuZmV0Y2guZGVjb2RldXJsKHVyaSlbNV0KKyAgICB1cHN0cl9icmFuY2ggPSBwYXJhbXNbJ2JyYW5jaCddIGlmICdicmFuY2gnIGluIHBhcmFtcyBlbHNlICdtYXN0ZXInCisgICAgIyBDaGVjayBpZiBjdXJyZW50IGJyYW5jaCBIRUFEIGlzIGZvdW5kIGluIHVwc3RyZWFtIGJyYW5jaAorICAgIHN0ZG91dCwgXyA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9c3JjdHJlZSkKKyAgICBoZWFkX3JldiA9IHN0ZG91dC5yc3RyaXAoKQorICAgIHN0ZG91dCwgXyA9IGJiLnByb2Nlc3MucnVuKCdnaXQgYnJhbmNoIC1yIC0tY29udGFpbnMgJXMnICUgaGVhZF9yZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPXNyY3RyZWUpCisgICAgcmVtb3RlX2JycyA9IFticmFuY2guc3RyaXAoKSBmb3IgYnJhbmNoIGluIHN0ZG91dC5zcGxpdGxpbmVzKCldCisgICAgaWYgJ29yaWdpbi8nICsgdXBzdHJfYnJhbmNoIGluIHJlbW90ZV9icnM6CisgICAgICAgIHJldHVybiAnc3JjcmV2JworCisgICAgcmV0dXJuICdwYXRjaCcKKworZGVmIHVwZGF0ZV9yZWNpcGUoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ3VwZGF0ZS1yZWNpcGUnIHN1YmNvbW1hbmQiIiIKKyAgICBpZiBub3QgYXJncy5yZWNpcGVuYW1lIGluIHdvcmtzcGFjZToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJubyByZWNpcGUgbmFtZWQgJXMgaW4geW91ciB3b3Jrc3BhY2UiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucmVjaXBlbmFtZSkKKworICAgIGlmIGFyZ3MuYXBwZW5kOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXJncy5hcHBlbmQpOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdiYmFwcGVuZCBkZXN0aW5hdGlvbiBsYXllciBkaXJlY3RvcnkgIiVzIiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvZXMgbm90IGV4aXN0JyAlIGFyZ3MuYXBwZW5kKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGFyZ3MuYXBwZW5kLCAnY29uZicsICdsYXllci5jb25mJykpOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdjb25mL2xheWVyLmNvbmYgbm90IGZvdW5kIGluIGJiYXBwZW5kICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVzdGluYXRpb24gbGF5ZXIgIiVzIicgJSBhcmdzLmFwcGVuZCkKKworICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKCkKKworICAgIHJkID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgYXJncy5yZWNpcGVuYW1lLCBUcnVlKQorICAgIGlmIG5vdCByZDoKKyAgICAgICAgcmV0dXJuIDEKKworICAgIHNyY3RyZWUgPSB3b3Jrc3BhY2VbYXJncy5yZWNpcGVuYW1lXVsnc3JjdHJlZSddCisgICAgaWYgYXJncy5tb2RlID09ICdhdXRvJzoKKyAgICAgICAgbW9kZSA9IF9ndWVzc19yZWNpcGVfdXBkYXRlX21vZGUoc3JjdHJlZSwgcmQpCisgICAgZWxzZToKKyAgICAgICAgbW9kZSA9IGFyZ3MubW9kZQorCisgICAgaWYgbW9kZSA9PSAnc3JjcmV2JzoKKyAgICAgICAgX3VwZGF0ZV9yZWNpcGVfc3JjcmV2KGFyZ3MsIHNyY3RyZWUsIHJkLCB0aW5mb2lsLmNvbmZpZ19kYXRhKQorICAgIGVsaWYgbW9kZSA9PSAncGF0Y2gnOgorICAgICAgICBfdXBkYXRlX3JlY2lwZV9wYXRjaChhcmdzLCBjb25maWcsIHNyY3RyZWUsIHJkLCB0aW5mb2lsLmNvbmZpZ19kYXRhKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigndXBkYXRlX3JlY2lwZTogaW52YWxpZCBtb2RlICVzJyAlIG1vZGUpCisKKyAgICByZiA9IHJkLmdldFZhcignRklMRScsIFRydWUpCisgICAgaWYgcmYuc3RhcnRzd2l0aChjb25maWcud29ya3NwYWNlX3BhdGgpOgorICAgICAgICBsb2dnZXIud2FybignUmVjaXBlIGZpbGUgJXMgaGFzIGJlZW4gdXBkYXRlZCBidXQgaXMgaW5zaWRlIHRoZSB3b3Jrc3BhY2UgLSB5b3Ugd2lsbCBuZWVkIHRvIG1vdmUgaXQgKGFuZCBhbnkgYXNzb2NpYXRlZCBmaWxlcyBuZXh0IHRvIGl0KSBvdXQgdG8gdGhlIGRlc2lyZWQgbGF5ZXIgYmVmb3JlIHVzaW5nICJkZXZ0b29sIHJlc2V0IiBpbiBvcmRlciB0byBrZWVwIGFueSBjaGFuZ2VzJyAlIHJmKQorCisgICAgcmV0dXJuIDAKKworCitkZWYgc3RhdHVzKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICdzdGF0dXMnIHN1YmNvbW1hbmQiIiIKKyAgICBpZiB3b3Jrc3BhY2U6CisgICAgICAgIGZvciByZWNpcGUsIHZhbHVlIGluIHdvcmtzcGFjZS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHByaW50KCIlczogJXMiICUgKHJlY2lwZSwgdmFsdWVbJ3NyY3RyZWUnXSkpCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ05vIHJlY2lwZXMgY3VycmVudGx5IGluIHlvdXIgd29ya3NwYWNlIC0geW91IGNhbiB1c2UgImRldnRvb2wgbW9kaWZ5IiB0byB3b3JrIG9uIGFuIGV4aXN0aW5nIHJlY2lwZSBvciAiZGV2dG9vbCBhZGQiIHRvIGFkZCBhIG5ldyBvbmUnKQorICAgIHJldHVybiAwCisKKworZGVmIHJlc2V0KGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICdyZXNldCcgc3ViY29tbWFuZCIiIgorICAgIGltcG9ydCBiYgorICAgIGlmIGFyZ3MucmVjaXBlbmFtZToKKyAgICAgICAgaWYgYXJncy5hbGw6CisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlJlY2lwZSBjYW5ub3QgYmUgc3BlY2lmaWVkIGlmIC1hLy0tYWxsIGlzIHVzZWQiKQorICAgICAgICBlbGlmIG5vdCBhcmdzLnJlY2lwZW5hbWUgaW4gd29ya3NwYWNlOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJubyByZWNpcGUgbmFtZWQgJXMgaW4geW91ciB3b3Jrc3BhY2UiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnJlY2lwZW5hbWUpCisgICAgZWxpZiBub3QgYXJncy5hbGw6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiUmVjaXBlIG11c3QgYmUgc3BlY2lmaWVkLCBvciBzcGVjaWZ5IC1hLy0tYWxsIHRvICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXNldCBhbGwgcmVjaXBlcyIpCisgICAgaWYgYXJncy5hbGw6CisgICAgICAgIHJlY2lwZXMgPSB3b3Jrc3BhY2UKKyAgICBlbHNlOgorICAgICAgICByZWNpcGVzID0gW2FyZ3MucmVjaXBlbmFtZV0KKworICAgIGZvciBwbiBpbiByZWNpcGVzOgorICAgICAgICBpZiBub3QgYXJncy5ub19jbGVhbjoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdDbGVhbmluZyBzeXNyb290IGZvciByZWNpcGUgJXMuLi4nICUgcG4pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwgJ2JpdGJha2UgLWMgY2xlYW4gJXMnICUgcG4pCisgICAgICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignQ29tbWFuZCBcJyVzXCcgZmFpbGVkLCBvdXRwdXQ6XG4lc1xuSWYgeW91ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpc2gsIHlvdSBtYXkgc3BlY2lmeSAtbi8tLW5vLWNsZWFuIHRvICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NraXAgcnVubmluZyB0aGlzIGNvbW1hbmQgd2hlbiByZXNldHRpbmcnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuY29tbWFuZCwgZS5zdGRvdXQpKQorCisgICAgICAgIF9jaGVja19wcmVzZXJ2ZShjb25maWcsIHBuKQorCisgICAgICAgIHByZXNlcnZlcGF0aCA9IG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICdhdHRpYycsIHBuKQorICAgICAgICBkZWYgcHJlc2VydmVkaXIob3JpZ2Rpcik6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcmlnZGlyKToKKyAgICAgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhvcmlnZGlyKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZuIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ1ByZXNlcnZpbmcgJXMgaW4gJXMnICUgKGZuLCBwcmVzZXJ2ZXBhdGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHByZXNlcnZlcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKG9zLnBhdGguam9pbihvcmlnZGlyLCBmbiksIG9zLnBhdGguam9pbihwcmVzZXJ2ZXBhdGgsIGZuKSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRuIGluIGRpcnM6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihvcy5wYXRoLmpvaW4ocm9vdCwgZG4pKQorICAgICAgICAgICAgICAgIG9zLnJtZGlyKG9yaWdkaXIpCisKKyAgICAgICAgcHJlc2VydmVkaXIob3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ3JlY2lwZXMnLCBwbikpCisgICAgICAgICMgV2UgZG9uJ3QgYXV0b21hdGljYWxseSBjcmVhdGUgdGhpcyBkaXIgbmV4dCB0byBhcHBlbmRzLCBidXQgdGhlIHVzZXIgY2FuCisgICAgICAgIHByZXNlcnZlZGlyKG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICdhcHBlbmRzJywgcG4pKQorCisgICAgcmV0dXJuIDAKKworCitkZWYgcmVnaXN0ZXJfY29tbWFuZHMoc3VicGFyc2VycywgY29udGV4dCk6CisgICAgIiIiUmVnaXN0ZXIgZGV2dG9vbCBzdWJjb21tYW5kcyBmcm9tIHRoaXMgcGx1Z2luIiIiCisgICAgcGFyc2VyX2FkZCA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYWRkJywgaGVscD0nQWRkIGEgbmV3IHJlY2lwZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nQWRkcyBhIG5ldyByZWNpcGUnKQorICAgIHBhcnNlcl9hZGQuYWRkX2FyZ3VtZW50KCdyZWNpcGVuYW1lJywgaGVscD0nTmFtZSBmb3IgbmV3IHJlY2lwZSB0byBhZGQnKQorICAgIHBhcnNlcl9hZGQuYWRkX2FyZ3VtZW50KCdzcmN0cmVlJywgaGVscD0nUGF0aCB0byBleHRlcm5hbCBzb3VyY2UgdHJlZScpCisgICAgcGFyc2VyX2FkZC5hZGRfYXJndW1lbnQoJy0tc2FtZS1kaXInLCAnLXMnLCBoZWxwPSdCdWlsZCBpbiBzYW1lIGRpcmVjdG9yeSBhcyBzb3VyY2UnLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgIHBhcnNlcl9hZGQuYWRkX2FyZ3VtZW50KCctLWZldGNoJywgJy1mJywgaGVscD0nRmV0Y2ggdGhlIHNwZWNpZmllZCBVUkkgYW5kIGV4dHJhY3QgaXQgdG8gY3JlYXRlIHRoZSBzb3VyY2UgdHJlZScsIG1ldGF2YXI9J1VSSScpCisgICAgcGFyc2VyX2FkZC5hZGRfYXJndW1lbnQoJy0tdmVyc2lvbicsICctVicsIGhlbHA9J1ZlcnNpb24gdG8gdXNlIHdpdGhpbiByZWNpcGUgKFBWKScpCisgICAgcGFyc2VyX2FkZC5zZXRfZGVmYXVsdHMoZnVuYz1hZGQpCisKKyAgICBwYXJzZXJfbW9kaWZ5ID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdtb2RpZnknLCBoZWxwPSdNb2RpZnkgdGhlIHNvdXJjZSBmb3IgYW4gZXhpc3RpbmcgcmVjaXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdFbmFibGVzIG1vZGlmeWluZyB0aGUgc291cmNlIGZvciBhbiBleGlzdGluZyByZWNpcGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLkFyZ3VtZW50RGVmYXVsdHNIZWxwRm9ybWF0dGVyKQorICAgIHBhcnNlcl9tb2RpZnkuYWRkX2FyZ3VtZW50KCdyZWNpcGVuYW1lJywgaGVscD0nTmFtZSBmb3IgcmVjaXBlIHRvIGVkaXQnKQorICAgIHBhcnNlcl9tb2RpZnkuYWRkX2FyZ3VtZW50KCdzcmN0cmVlJywgaGVscD0nUGF0aCB0byBleHRlcm5hbCBzb3VyY2UgdHJlZScpCisgICAgcGFyc2VyX21vZGlmeS5hZGRfYXJndW1lbnQoJy0td2lsZGNhcmQnLCAnLXcnLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdVc2Ugd2lsZGNhcmQgZm9yIHVudmVyc2lvbmVkIGJiYXBwZW5kJykKKyAgICBwYXJzZXJfbW9kaWZ5LmFkZF9hcmd1bWVudCgnLS1leHRyYWN0JywgJy14JywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0nRXh0cmFjdCBzb3VyY2UgYXMgd2VsbCcpCisgICAgZ3JvdXAgPSBwYXJzZXJfbW9kaWZ5LmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1zYW1lLWRpcicsICctcycsIGhlbHA9J0J1aWxkIGluIHNhbWUgZGlyZWN0b3J5IGFzIHNvdXJjZScsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLW5vLXNhbWUtZGlyJywgaGVscD0nRm9yY2UgYnVpbGQgaW4gYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnknLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgIHBhcnNlcl9tb2RpZnkuYWRkX2FyZ3VtZW50KCctLWJyYW5jaCcsICctYicsIGRlZmF1bHQ9ImRldnRvb2wiLCBoZWxwPSdOYW1lIGZvciBkZXZlbG9wbWVudCBicmFuY2ggdG8gY2hlY2tvdXQgKG9ubHkgd2hlbiB1c2luZyAteCknKQorICAgIHBhcnNlcl9tb2RpZnkuc2V0X2RlZmF1bHRzKGZ1bmM9bW9kaWZ5KQorCisgICAgcGFyc2VyX2V4dHJhY3QgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2V4dHJhY3QnLCBoZWxwPSdFeHRyYWN0IHRoZSBzb3VyY2UgZm9yIGFuIGV4aXN0aW5nIHJlY2lwZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nRXh0cmFjdHMgdGhlIHNvdXJjZSBmb3IgYW4gZXhpc3RpbmcgcmVjaXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5Bcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlcikKKyAgICBwYXJzZXJfZXh0cmFjdC5hZGRfYXJndW1lbnQoJ3JlY2lwZW5hbWUnLCBoZWxwPSdOYW1lIGZvciByZWNpcGUgdG8gZXh0cmFjdCB0aGUgc291cmNlIGZvcicpCisgICAgcGFyc2VyX2V4dHJhY3QuYWRkX2FyZ3VtZW50KCdzcmN0cmVlJywgaGVscD0nUGF0aCB0byB3aGVyZSB0byBleHRyYWN0IHRoZSBzb3VyY2UgdHJlZScpCisgICAgcGFyc2VyX2V4dHJhY3QuYWRkX2FyZ3VtZW50KCctLWJyYW5jaCcsICctYicsIGRlZmF1bHQ9ImRldnRvb2wiLCBoZWxwPSdOYW1lIGZvciBkZXZlbG9wbWVudCBicmFuY2ggdG8gY2hlY2tvdXQnKQorICAgIHBhcnNlcl9leHRyYWN0LmFkZF9hcmd1bWVudCgnLS1rZWVwLXRlbXAnLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdLZWVwIHRlbXBvcmFyeSBkaXJlY3RvcnkgKGZvciBkZWJ1Z2dpbmcpJykKKyAgICBwYXJzZXJfZXh0cmFjdC5zZXRfZGVmYXVsdHMoZnVuYz1leHRyYWN0KQorCisgICAgcGFyc2VyX3VwZGF0ZV9yZWNpcGUgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3VwZGF0ZS1yZWNpcGUnLCBoZWxwPSdBcHBseSBjaGFuZ2VzIGZyb20gZXh0ZXJuYWwgc291cmNlIHRyZWUgdG8gcmVjaXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdBcHBsaWVzIGNoYW5nZXMgZnJvbSBleHRlcm5hbCBzb3VyY2UgdHJlZSB0byBhIHJlY2lwZSAodXBkYXRpbmcvYWRkaW5nL3JlbW92aW5nIHBhdGNoZXMgYXMgbmVjZXNzYXJ5LCBvciBieSB1cGRhdGluZyBTUkNSRVYpJykKKyAgICBwYXJzZXJfdXBkYXRlX3JlY2lwZS5hZGRfYXJndW1lbnQoJ3JlY2lwZW5hbWUnLCBoZWxwPSdOYW1lIG9mIHJlY2lwZSB0byB1cGRhdGUnKQorICAgIHBhcnNlcl91cGRhdGVfcmVjaXBlLmFkZF9hcmd1bWVudCgnLS1tb2RlJywgJy1tJywgY2hvaWNlcz1bJ3BhdGNoJywgJ3NyY3JldicsICdhdXRvJ10sIGRlZmF1bHQ9J2F1dG8nLCBoZWxwPSdVcGRhdGUgbW9kZSAod2hlcmUgJShtZXRhdmFyKXMgaXMgJShjaG9pY2VzKXM7IGRlZmF1bHQgaXMgJShkZWZhdWx0KXMpJywgbWV0YXZhcj0nTU9ERScpCisgICAgcGFyc2VyX3VwZGF0ZV9yZWNpcGUuYWRkX2FyZ3VtZW50KCctLWluaXRpYWwtcmV2JywgaGVscD0nU3RhcnRpbmcgcmV2aXNpb24gZm9yIHBhdGNoZXMnKQorICAgIHBhcnNlcl91cGRhdGVfcmVjaXBlLmFkZF9hcmd1bWVudCgnLS1hcHBlbmQnLCAnLWEnLCBoZWxwPSdXcml0ZSBjaGFuZ2VzIHRvIGEgYmJhcHBlbmQgaW4gdGhlIHNwZWNpZmllZCBsYXllciBpbnN0ZWFkIG9mIHRoZSByZWNpcGUnLCBtZXRhdmFyPSdMQVlFUkRJUicpCisgICAgcGFyc2VyX3VwZGF0ZV9yZWNpcGUuYWRkX2FyZ3VtZW50KCctLXdpbGRjYXJkLXZlcnNpb24nLCAnLXcnLCBoZWxwPSdJbiBjb25qdW5jdGlvbiB3aXRoIC1hLy0tYXBwZW5kLCB1c2UgYSB3aWxkY2FyZCB0byBtYWtlIHRoZSBiYmFwcGVuZCBhcHBseSB0byBhbnkgcmVjaXBlIHZlcnNpb24nLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl91cGRhdGVfcmVjaXBlLmFkZF9hcmd1bWVudCgnLS1uby1yZW1vdmUnLCAnLW4nLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdEb25cJ3QgcmVtb3ZlIHBhdGNoZXMsIG9ubHkgYWRkIG9yIHVwZGF0ZScpCisgICAgcGFyc2VyX3VwZGF0ZV9yZWNpcGUuc2V0X2RlZmF1bHRzKGZ1bmM9dXBkYXRlX3JlY2lwZSkKKworICAgIHBhcnNlcl9zdGF0dXMgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3N0YXR1cycsIGhlbHA9J1Nob3cgd29ya3NwYWNlIHN0YXR1cycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nTGlzdHMgcmVjaXBlcyBjdXJyZW50bHkgaW4geW91ciB3b3Jrc3BhY2UgYW5kIHRoZSBwYXRocyB0byB0aGVpciByZXNwZWN0aXZlIGV4dGVybmFsIHNvdXJjZSB0cmVlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIpCisgICAgcGFyc2VyX3N0YXR1cy5zZXRfZGVmYXVsdHMoZnVuYz1zdGF0dXMpCisKKyAgICBwYXJzZXJfcmVzZXQgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3Jlc2V0JywgaGVscD0nUmVtb3ZlIGEgcmVjaXBlIGZyb20geW91ciB3b3Jrc3BhY2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIHJlY2lwZSBmcm9tIHlvdXIgd29ya3NwYWNlIChyZXNldHRpbmcgaXRzIHN0YXRlKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5Bcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlcikKKyAgICBwYXJzZXJfcmVzZXQuYWRkX2FyZ3VtZW50KCdyZWNpcGVuYW1lJywgbmFyZ3M9Jz8nLCBoZWxwPSdSZWNpcGUgdG8gcmVzZXQnKQorICAgIHBhcnNlcl9yZXNldC5hZGRfYXJndW1lbnQoJy0tYWxsJywgJy1hJywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0nUmVzZXQgYWxsIHJlY2lwZXMgKGNsZWFyIHdvcmtzcGFjZSknKQorICAgIHBhcnNlcl9yZXNldC5hZGRfYXJndW1lbnQoJy0tbm8tY2xlYW4nLCAnLW4nLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdEb25cJ3QgY2xlYW4gdGhlIHN5c3Jvb3QgdG8gcmVtb3ZlIHJlY2lwZSBvdXRwdXQnKQorICAgIHBhcnNlcl9yZXNldC5zZXRfZGVmYXVsdHMoZnVuYz1yZXNldCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC91cGdyYWRlLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3VwZ3JhZGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY0NDNiMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC91cGdyYWRlLnB5CkBAIC0wLDAgKzEsMzU0IEBACisjIERldmVsb3BtZW50IHRvb2wgLSB1cGdyYWRlIGNvbW1hbmQgcGx1Z2luCisjCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIiIiRGV2dG9vbCB1cGdyYWRlIHBsdWdpbiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgc2NyaXB0dXRpbHMKK2ltcG9ydCBlcnJubworaW1wb3J0IGJiCitpbXBvcnQgb2UucmVjaXBldXRpbHMKK2Zyb20gZGV2dG9vbCBpbXBvcnQgc3RhbmRhcmQKK2Zyb20gZGV2dG9vbCBpbXBvcnQgZXhlY19idWlsZF9lbnZfY29tbWFuZCwgc2V0dXBfdGluZm9pbCwgRGV2dG9vbEVycm9yLCBwYXJzZV9yZWNpcGUKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2RldnRvb2wnKQorCitkZWYgcGx1Z2luX2luaXQocGx1Z2lubGlzdCk6CisgICAgIiIiUGx1Z2luIGluaXRpYWxpemF0aW9uIiIiCisgICAgcGFzcworCitkZWYgX3J1bihjbWQsIGN3ZD0nJyk6CisgICAgbG9nZ2VyLmRlYnVnKCJSdW5uaW5nIGNvbW1hbmQgJXM+ICVzIiAlIChjd2QsY21kKSkKKyAgICByZXR1cm4gYmIucHJvY2Vzcy5ydW4oJyVzJyAlIGNtZCwgY3dkPWN3ZCkKKworZGVmIF9nZXRfc3JjdHJlZSh0bXBkaXIpOgorICAgIHNyY3RyZWUgPSB0bXBkaXIKKyAgICBkaXJzID0gb3MubGlzdGRpcih0bXBkaXIpCisgICAgaWYgbGVuKGRpcnMpID09IDE6CisgICAgICAgIHNyY3RyZWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCBkaXJzWzBdKQorICAgIHJldHVybiBzcmN0cmVlCisKK2RlZiBfY29weV9zb3VyY2VfY29kZShvcmlnLCBkZXN0KToKKyAgICBmb3IgcGF0aCBpbiBzdGFuZGFyZC5fbHNfdHJlZShvcmlnKToKKyAgICAgICAgZGVzdF9kaXIgPSBvcy5wYXRoLmpvaW4oZGVzdCwgb3MucGF0aC5kaXJuYW1lKHBhdGgpKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZGVzdF9kaXIpCisgICAgICAgIGRlc3RfcGF0aCA9IG9zLnBhdGguam9pbihkZXN0LCBwYXRoKQorICAgICAgICBvcy5yZW5hbWUob3MucGF0aC5qb2luKG9yaWcsIHBhdGgpLCBkZXN0X3BhdGgpCisKK2RlZiBfZ2V0X2NoZWNrc3VtcyhyZik6CisgICAgaW1wb3J0IHJlCisgICAgY2hlY2tzdW1zID0ge30KKyAgICB3aXRoIG9wZW4ocmYpIGFzIGY6CisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBmb3IgY3MgaW4gWydtZDVzdW0nLCAnc2hhMjU2c3VtJ106CisgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJeU1JDX1VSSVxbJXNcXS4qPS4qXCIoLiopXCIiICUgY3MsIGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW1zW2NzXSA9IG0uZ3JvdXAoMSkKKyAgICByZXR1cm4gY2hlY2tzdW1zCisKK2RlZiBfcmVwbGFjZV9jaGVja3N1bXMocmYsIG1kNSwgc2hhMjU2KToKKyAgICBpZiBub3QgbWQ1IGFuZCBub3Qgc2hhMjU2OgorICAgICAgICByZXR1cm4KKyAgICBjaGVja3N1bXMgPSB7J21kNXN1bSc6bWQ1LCAnc2hhMjU2c3VtJzpzaGEyNTZ9CisgICAgd2l0aCBvcGVuKHJmICsgIi50bXAiLCAidysiKSBhcyB0bXByZjoKKyAgICAgICAgd2l0aCBvcGVuKHJmKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBtID0gTm9uZQorICAgICAgICAgICAgICAgIGZvciBjcyBpbiBjaGVja3N1bXMua2V5cygpOgorICAgICAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2goIl5TUkNfVVJJXFslc1xdLio9LipcIiguKilcIiIgJSBjcywgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoZWNrc3Vtc1tjc106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkY2hlY2sgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Y2hlY2sgPSBjaGVja3N1bXNbY3NdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShvbGRjaGVjaywgbmV3Y2hlY2spCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHRtcHJmLndyaXRlKGxpbmUpCisgICAgb3MucmVuYW1lKHJmICsgIi50bXAiLCByZikKKworCitkZWYgX3JlbW92ZV9wYXRjaF9kaXJzKHJlY2lwZWZvbGRlcik6CisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocmVjaXBlZm9sZGVyKToKKyAgICAgICAgZm9yIGQgaW4gZGlyczoKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5qb2luKHJvb3QsZCkpCisKK2RlZiBfcmVjaXBlX2NvbnRhaW5zKHJmLCB2YXIpOgorICAgIGltcG9ydCByZQorICAgIGZvdW5kID0gRmFsc2UKKyAgICB3aXRoIG9wZW4ocmYpIGFzIGY6CisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBpZiByZS5tYXRjaCgiXiVzLio9LioiICUgdmFyLCBsaW5lKToKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgIHJldHVybiBmb3VuZAorCitkZWYgX3JlbmFtZV9yZWNpcGVfZGlycyhvbGRwdiwgbmV3cHYsIHBhdGgpOgorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgpOgorICAgICAgICBmb3Igb2xkZGlyIGluIGRpcnM6CisgICAgICAgICAgICBpZiBvbGRkaXIuZmluZChvbGRwdikgIT0gLTE6CisgICAgICAgICAgICAgICAgbmV3ZGlyID0gb2xkZGlyLnJlcGxhY2Uob2xkcHYsIG5ld3B2KQorICAgICAgICAgICAgICAgIGlmIG9sZGRpciAhPSBuZXdkaXI6CisgICAgICAgICAgICAgICAgICAgIF9ydW4oJ212ICVzICVzJyAlIChvbGRkaXIsIG5ld2RpcikpCisKK2RlZiBfcmVuYW1lX3JlY2lwZV9maWxlKGJwbiwgb2xkcHYsIG5ld3B2LCBwYXRoKToKKyAgICBvbGRyZWNpcGUgPSAiJXNfJXMuYmIiICUgKGJwbiwgb2xkcHYpCisgICAgbmV3cmVjaXBlID0gIiVzXyVzLmJiIiAlIChicG4sIG5ld3B2KQorICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihwYXRoLCBvbGRyZWNpcGUpKToKKyAgICAgICAgaWYgb2xkcmVjaXBlICE9IG5ld3JlY2lwZToKKyAgICAgICAgICAgIF9ydW4oJ212ICVzICVzJyAlIChvbGRyZWNpcGUsIG5ld3JlY2lwZSksIGN3ZD1wYXRoKQorICAgIGVsc2U6CisgICAgICAgIHJlY2lwZSA9ICIlc19naXQuYmIiICUgYnBuCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihwYXRoLCByZWNpcGUpKToKKyAgICAgICAgICAgIG5ld3JlY2lwZSA9IHJlY2lwZQorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJPcmlnaW5hbCByZWNpcGUgbm90IGZvdW5kIG9uIHdvcmtzcGFjZSIpCisgICAgcmV0dXJuIG9zLnBhdGguam9pbihwYXRoLCBuZXdyZWNpcGUpCisKK2RlZiBfcmVuYW1lX3JlY2lwZV9maWxlcyhicG4sIG9sZHB2LCBuZXdwdiwgcGF0aCk6CisgICAgX3JlbmFtZV9yZWNpcGVfZGlycyhvbGRwdiwgbmV3cHYsIHBhdGgpCisgICAgcmV0dXJuIF9yZW5hbWVfcmVjaXBlX2ZpbGUoYnBuLCBvbGRwdiwgbmV3cHYsIHBhdGgpCisKK2RlZiBfdXNlX2V4dGVybmFsX2J1aWxkKHNhbWVfZGlyLCBub19zYW1lX2RpciwgZCk6CisgICAgYl9pc19zID0gVHJ1ZQorICAgIGlmIG5vX3NhbWVfZGlyOgorICAgICAgICBsb2dnZXIuaW5mbygndXNpbmcgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IHNpbmNlIC0tbm8tc2FtZS1kaXIgc3BlY2lmaWVkJykKKyAgICAgICAgYl9pc19zID0gRmFsc2UKKyAgICBlbGlmIHNhbWVfZGlyOgorICAgICAgICBsb2dnZXIuaW5mbygndXNpbmcgc291cmNlIHRyZWUgYXMgYnVpbGQgZGlyZWN0b3J5IHNpbmNlIC0tc2FtZS1kaXIgc3BlY2lmaWVkJykKKyAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2F1dG90b29scy1icm9rZW5zZXAnLCBkKToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ3VzaW5nIHNvdXJjZSB0cmVlIGFzIGJ1aWxkIGRpcmVjdG9yeSBzaW5jZSBvcmlnaW5hbCByZWNpcGUgaW5oZXJpdHMgYXV0b3Rvb2xzLWJyb2tlbnNlcCcpCisgICAgZWxpZiBkLmdldFZhcignQicsIFRydWUpID09IG9zLnBhdGguYWJzcGF0aChkLmdldFZhcignUycsIFRydWUpKToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ3VzaW5nIHNvdXJjZSB0cmVlIGFzIGJ1aWxkIGRpcmVjdG9yeSBzaW5jZSB0aGF0IGlzIHRoZSBkZWZhdWx0IGZvciB0aGlzIHJlY2lwZScpCisgICAgZWxzZToKKyAgICAgICAgYl9pc19zID0gRmFsc2UKKyAgICByZXR1cm4gYl9pc19zCisKK2RlZiBfd3JpdGVfYXBwZW5kKHJjLCBzcmN0cmVlLCBzYW1lX2Rpciwgbm9fc2FtZV9kaXIsIHJldiwgd29ya3NwYWNlLCBkKToKKyAgICAiIiJXcml0ZXMgYW4gYXBwZW5kIGZpbGUiIiIKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmMpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoImJiYXBwZW5kIG5vdCBjcmVhdGVkIGJlY2F1c2UgJXMgZG9lcyBub3QgZXhpc3QiICUgcmMpCisKKyAgICBhcHBlbmRwYXRoID0gb3MucGF0aC5qb2luKHdvcmtzcGFjZSwgJ2FwcGVuZHMnKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcHBlbmRwYXRoKToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGFwcGVuZHBhdGgpCisKKyAgICBicmYgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGguc3BsaXRleHQocmMpWzBdKSAjIHJjIGJhc2VuYW1lCisKKyAgICBzcmN0cmVlID0gb3MucGF0aC5hYnNwYXRoKHNyY3RyZWUpCisgICAgcG4gPSBkLmdldFZhcignUE4nLFRydWUpCisgICAgYWYgPSBvcy5wYXRoLmpvaW4oYXBwZW5kcGF0aCwgJyVzLmJiYXBwZW5kJyAlIGJyZikKKyAgICB3aXRoIG9wZW4oYWYsICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZSgnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuXG4nKQorICAgICAgICBmLndyaXRlKCdpbmhlcml0IGV4dGVybmFsc3JjXG4nKQorICAgICAgICBmLndyaXRlKCgnIyBOT1RFOiBXZSB1c2UgcG4tIG92ZXJyaWRlcyBoZXJlIHRvIGF2b2lkIGFmZmVjdGluZycKKyAgICAgICAgICAgICAgICAgJ211bHRpcGxlIHZhcmlhbnRzIGluIHRoZSBjYXNlIHdoZXJlIHRoZSByZWNpcGUgdXNlcyBCQkNMQVNTRVhURU5EXG4nKSkKKyAgICAgICAgZi53cml0ZSgnRVhURVJOQUxTUkNfcG4tJXMgPSAiJXMiXG4nICUgKHBuLCBzcmN0cmVlKSkKKyAgICAgICAgaWYgX3VzZV9leHRlcm5hbF9idWlsZChzYW1lX2Rpciwgbm9fc2FtZV9kaXIsIGQpOgorICAgICAgICAgICAgZi53cml0ZSgnRVhURVJOQUxTUkNfQlVJTERfcG4tJXMgPSAiJXMiXG4nICUgKHBuLCBzcmN0cmVlKSkKKyAgICAgICAgaWYgcmV2OgorICAgICAgICAgICAgZi53cml0ZSgnXG4jIGluaXRpYWxfcmV2OiAlc1xuJyAlIHJldikKKyAgICByZXR1cm4gYWYKKworZGVmIF9jbGVhbnVwX29uX2Vycm9yKHJmLCBzcmN0cmVlKToKKyAgICByZnAgPSBvcy5wYXRoLnNwbGl0KHJmKVswXSAjIHJlY2lwZSBmb2xkZXIKKyAgICByZnBwID0gb3MucGF0aC5zcGxpdChyZnApWzBdICMgcmVjaXBlcyBmb2xkZXIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhyZnApOgorICAgICAgICBzaHV0aWwucm10cmVlKGIpCisgICAgaWYgbm90IGxlbihvcy5saXN0ZGlyKHJmcHApKToKKyAgICAgICAgb3Mucm1kaXIocmZwcCkKKyAgICBzcmN0cmVlID0gb3MucGF0aC5hYnNwYXRoKHNyY3RyZWUpCisgICAgaWYgb3MucGF0aC5leGlzdHMoc3JjdHJlZSk6CisgICAgICAgIHNodXRpbC5ybXRyZWUoc3JjdHJlZSkKKworZGVmIF91cGdyYWRlX2Vycm9yKGUsIHJmLCBzcmN0cmVlKToKKyAgICBpZiByZjoKKyAgICAgICAgY2xlYW51cF9vbl9lcnJvcihyZiwgc3JjdHJlZSkKKyAgICBsb2dnZXIuZXJyb3IoZSkKKyAgICByYWlzZSBEZXZ0b29sRXJyb3IoZSkKKworZGVmIF9nZXRfdXJpKHJkKToKKyAgICBzcmN1cmlzID0gcmQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkuc3BsaXQoKQorICAgIGlmIG5vdCBsZW4oc3JjdXJpcyk6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignU1JDX1VSSSBub3QgZm91bmQgb24gcmVjaXBlJykKKyAgICBzcmN1cmkgPSBzcmN1cmlzWzBdICMgaXQgaXMgYXNzdW1lZCwgVVJJIGlzIGF0IGZpcnN0IHBvc2l0aW9uCisgICAgc3JjcmV2ID0gJyR7QVVUT1JFVn0nCisgICAgaWYgJzovLycgaW4gc3JjdXJpOgorICAgICAgICAjIEZldGNoIGEgVVJMCisgICAgICAgIHJldl9yZSA9IHJlLmNvbXBpbGUoJztyZXY9KFteO10rKScpCisgICAgICAgIHJlcyA9IHJldl9yZS5zZWFyY2goc3JjdXJpKQorICAgICAgICBpZiByZXM6CisgICAgICAgICAgICBzcmNyZXYgPSByZXMuZ3JvdXAoMSkKKyAgICAgICAgICAgIHNyY3VyaSA9IHJldl9yZS5zdWIoJycsIHNyY3VyaSkKKyAgICByZXR1cm4gc3JjdXJpLCBzcmNyZXYKKworZGVmIF9leHRyYWN0X25ld19zb3VyY2UobmV3cHYsIHNyY3RyZWUsIG5vX3BhdGNoLCBzcmNyZXYsIGJyYW5jaCwga2VlcF90ZW1wLCB0aW5mb2lsLCByZCk6CisgICAgIiIiRXh0cmFjdCBzb3VyY2VzIG9mIGEgcmVjaXBlIHdpdGggYSBuZXcgdmVyc2lvbiIiIgorCisgICAgZGVmIF9fcnVuKGNtZCk6CisgICAgICAgICIiIlNpbXBsZSB3cmFwcGVyIHdoaWNoIGNhbGxzIF9ydW4gd2l0aCBzcmN0cmVlIGFzIGN3ZCIiIgorICAgICAgICByZXR1cm4gX3J1bihjbWQsIHNyY3RyZWUpCisKKyAgICBjcmQgPSByZC5jcmVhdGVDb3B5KCkKKworICAgIHB2ID0gY3JkLmdldFZhcignUFYnLCBUcnVlKQorICAgIGNyZC5zZXRWYXIoJ1BWJywgbmV3cHYpCisKKyAgICB0bXBzcmN0cmVlID0gTm9uZQorICAgIHVyaSwgcmV2ID0gX2dldF91cmkoY3JkKQorICAgIGlmIHNyY3JldjoKKyAgICAgICAgcmV2ID0gc3JjcmV2CisgICAgaWYgdXJpLnN0YXJ0c3dpdGgoJ2dpdDovLycpOgorICAgICAgICBfX3J1bignZ2l0IGNoZWNrb3V0ICVzJyAlIHJldikKKyAgICAgICAgX19ydW4oJ2dpdCB0YWcgLWYgZGV2dG9vbC1iYXNlLW5ldycpCisgICAgICAgIG1kNSA9IE5vbmUKKyAgICAgICAgc2hhMjU2ID0gTm9uZQorICAgIGVsc2U6CisgICAgICAgIF9fcnVuKCdnaXQgY2hlY2tvdXQgLWIgZGV2dG9vbC0lcycgJSBuZXdwdikKKworICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1kNSwgc2hhMjU2ID0gc2NyaXB0dXRpbHMuZmV0Y2hfdXJpKHRpbmZvaWwuY29uZmlnX2RhdGEsIHVyaSwgdG1wZGlyLCByZXYpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaDIuRmV0Y2hFcnJvciBhcyBlOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKGUpCisKKyAgICAgICAgdG1wc3JjdHJlZSA9IF9nZXRfc3JjdHJlZSh0bXBkaXIpCisKKyAgICAgICAgc2NydHJlZSA9IG9zLnBhdGguYWJzcGF0aChzcmN0cmVlKQorCisgICAgICAgIF9jb3B5X3NvdXJjZV9jb2RlKHRtcHNyY3RyZWUsIHNyY3RyZWUpCisKKyAgICAgICAgKHN0ZG91dCxfKSA9IF9fcnVuKCdnaXQgbHMtZmlsZXMgLS1tb2RpZmllZCAtLW90aGVycyAtLWV4Y2x1ZGUtc3RhbmRhcmQnKQorICAgICAgICBmb3IgZiBpbiBzdGRvdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgX19ydW4oJ2dpdCBhZGQgIiVzIicgJSBmKQorCisgICAgICAgIF9fcnVuKCdnaXQgY29tbWl0IC1xIC1tICJDb21taXQgb2YgdXBzdHJlYW0gY2hhbmdlcyBhdCB2ZXJzaW9uICVzIiAtLWFsbG93LWVtcHR5JyAlIG5ld3B2KQorICAgICAgICBfX3J1bignZ2l0IHRhZyAtZiBkZXZ0b29sLWJhc2UtJXMnICUgbmV3cHYpCisKKyAgICAoc3Rkb3V0LCBfKSA9IF9fcnVuKCdnaXQgcmV2LXBhcnNlIEhFQUQnKQorICAgIHJldiA9IHN0ZG91dC5yc3RyaXAoKQorCisgICAgaWYgbm9fcGF0Y2g6CisgICAgICAgIHBhdGNoZXMgPSBvZS5yZWNpcGV1dGlscy5nZXRfcmVjaXBlX3BhdGNoZXMoY3JkKQorICAgICAgICBpZiBsZW4ocGF0Y2hlcyk6CisgICAgICAgICAgICBsb2dnZXIud2FybignQnkgdXNlciBjaG9pY2UsIHRoZSBmb2xsb3dpbmcgcGF0Y2hlcyB3aWxsIE5PVCBiZSBhcHBsaWVkJykKKyAgICAgICAgICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCIlcyIgJSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKSkKKyAgICBlbHNlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBfX3J1bignZ2l0IGNoZWNrb3V0IGRldnRvb2wtcGF0Y2hlZCAtYiAlcycgJSBicmFuY2gpCisgICAgICAgICAgICBfX3J1bignZ2l0IHJlYmFzZSAlcycgJSByZXYpCisgICAgICAgICAgICBpZiB1cmkuc3RhcnRzd2l0aCgnZ2l0Oi8vJyk6CisgICAgICAgICAgICAgICAgc3VmZml4ID0gJ25ldycKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3VmZml4ID0gbmV3cHYKKyAgICAgICAgICAgIF9fcnVuKCdnaXQgdGFnIC1mIGRldnRvb2wtcGF0Y2hlZC0lcycgJSBzdWZmaXgpCisgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBsb2dnZXIud2FybignQ29tbWFuZCBcJyVzXCcgZmFpbGVkOlxuJXMnICUgKGUuY29tbWFuZCwgZS5zdGRvdXQpKQorCisgICAgaWYgdG1wc3JjdHJlZToKKyAgICAgICAgaWYga2VlcF90ZW1wOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1ByZXNlcnZpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlcycgJSB0bXBzcmN0cmVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0bXBzcmN0cmVlKQorCisgICAgcmV0dXJuIChyZXYsIG1kNSwgc2hhMjU2KQorCitkZWYgX2NyZWF0ZV9uZXdfcmVjaXBlKG5ld3B2LCBtZDUsIHNoYTI1Niwgd29ya3NwYWNlLCByZCk6CisgICAgIiIiQ3JlYXRlcyB0aGUgbmV3IHJlY2lwZSB1bmRlciB3b3Jrc3BhY2UiIiIKKyAgICBjcmQgPSByZC5jcmVhdGVDb3B5KCkKKworICAgIGJwbiA9IGNyZC5nZXRWYXIoJ0JQTicsIFRydWUpCisgICAgcGF0aCA9IG9zLnBhdGguam9pbih3b3Jrc3BhY2UsICdyZWNpcGVzJywgYnBuKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihwYXRoKQorICAgIG9lLnJlY2lwZXV0aWxzLmNvcHlfcmVjaXBlX2ZpbGVzKGNyZCwgcGF0aCkKKworICAgIG9sZHB2ID0gY3JkLmdldFZhcignUFYnLCBUcnVlKQorICAgIGlmIG5vdCBuZXdwdjoKKyAgICAgICAgbmV3cHYgPSBvbGRwdgorICAgIGZ1bGxwYXRoID0gX3JlbmFtZV9yZWNpcGVfZmlsZXMoYnBuLCBvbGRwdiwgbmV3cHYsIHBhdGgpCisKKyAgICBpZiBfcmVjaXBlX2NvbnRhaW5zKGZ1bGxwYXRoLCAnUFYnKSBhbmQgbmV3cHYgIT0gb2xkcHY6CisgICAgICAgIG9lLnJlY2lwZXV0aWxzLnBhdGNoX3JlY2lwZShkLCBmdWxscGF0aCwgeydQVic6bmV3cHZ9KQorCisgICAgaWYgbWQ1IGFuZCBzaGEyNTY6CisgICAgICAgICMgVW5mb3J0dW5hdGVseSwgb2UucmVjaXBldXRpbHMucGF0Y2hfcmVjaXBlIGNhbm5vdCB1cGRhdGUgZmxhZ3MuCisgICAgICAgICMgb25jZSB0aGUgbGF0dGVyIGZlYXR1cmUgaXMgaW1wbGVtZW50ZWQsIHdlIHNob3VsZCBjYWxsIHBhdGNoX3JlY2lwZQorICAgICAgICAjIGluc3RlYWQgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbgorICAgICAgICBfcmVwbGFjZV9jaGVja3N1bXMoZnVsbHBhdGgsIG1kNSwgc2hhMjU2KQorCisgICAgcmV0dXJuIGZ1bGxwYXRoCisKK2RlZiB1cGdyYWRlKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICd1cGdyYWRlJyBzdWJjb21tYW5kIiIiCisKKyAgICBpZiBhcmdzLnJlY2lwZW5hbWUgaW4gd29ya3NwYWNlOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoInJlY2lwZSAlcyBpcyBhbHJlYWR5IGluIHlvdXIgd29ya3NwYWNlIiAlIGFyZ3MucmVjaXBlbmFtZSkKKyAgICBpZiBub3QgYXJncy52ZXJzaW9uIGFuZCBub3QgYXJncy5zcmNyZXY6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiWW91IG11c3QgcHJvdmlkZSBhIHZlcnNpb24gdXNpbmcgdGhlIC0tdmVyc2lvbi8tViBvcHRpb24sIG9yIGZvciByZWNpcGVzIHRoYXQgZmV0Y2ggZnJvbSBhbiBTQ00gc3VjaCBhcyBnaXQsIHRoZSAtLXNyY3Jldi8tUyBvcHRpb24iKQorCisgICAgcmVhc29uID0gb2UucmVjaXBldXRpbHMudmFsaWRhdGVfcG4oYXJncy5yZWNpcGVuYW1lKQorICAgIGlmIHJlYXNvbjoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKHJlYXNvbikKKworICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKCkKKworICAgIHJkID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgYXJncy5yZWNpcGVuYW1lLCBUcnVlKQorICAgIGlmIG5vdCByZDoKKyAgICAgICAgcmV0dXJuIDEKKworICAgIHN0YW5kYXJkLl9jaGVja19jb21wYXRpYmxlX3JlY2lwZShhcmdzLnJlY2lwZW5hbWUsIHJkKQorICAgIGlmIHJkLmdldFZhcignUFYnLCBUcnVlKSA9PSBhcmdzLnZlcnNpb24gYW5kIHJkLmdldFZhcignU1JDUkVWJywgVHJ1ZSkgPT0gYXJncy5zcmNyZXY6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiQ3VycmVudCBhbmQgdXBncmFkZSB2ZXJzaW9ucyBhcmUgdGhlIHNhbWUgdmVyc2lvbiIgJSB2ZXJzaW9uKQorCisgICAgcmYgPSBOb25lCisgICAgdHJ5OgorICAgICAgICByZXYxID0gc3RhbmRhcmQuX2V4dHJhY3Rfc291cmNlKGFyZ3Muc3JjdHJlZSwgRmFsc2UsICdkZXZ0b29sLW9yaWcnLCByZCkKKyAgICAgICAgcmV2MiwgbWQ1LCBzaGEyNTYgPSBfZXh0cmFjdF9uZXdfc291cmNlKGFyZ3MudmVyc2lvbiwgYXJncy5zcmN0cmVlLCBhcmdzLm5vX3BhdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5zcmNyZXYsIGFyZ3MuYnJhbmNoLCBhcmdzLmtlZXBfdGVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbmZvaWwsIHJkKQorICAgICAgICByZiA9IF9jcmVhdGVfbmV3X3JlY2lwZShhcmdzLnZlcnNpb24sIG1kNSwgc2hhMjU2LCBjb25maWcud29ya3NwYWNlX3BhdGgsIHJkKQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkNtZEVycm9yIGFzIGU6CisgICAgICAgIF91cGdyYWRlX2Vycm9yKGUsIHJmLCBhcmdzLnNyY3RyZWUpCisgICAgZXhjZXB0IERldnRvb2xFcnJvciBhcyBlOgorICAgICAgICBfdXBncmFkZV9lcnJvcihlLCByZiwgYXJncy5zcmN0cmVlKQorICAgIHN0YW5kYXJkLl9hZGRfbWQ1KGNvbmZpZywgYXJncy5yZWNpcGVuYW1lLCBvcy5wYXRoLmRpcm5hbWUocmYpKQorCisgICAgYWYgPSBfd3JpdGVfYXBwZW5kKHJmLCBhcmdzLnNyY3RyZWUsIGFyZ3Muc2FtZV9kaXIsIGFyZ3Mubm9fc2FtZV9kaXIsIHJldjIsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgcmQpCisgICAgc3RhbmRhcmQuX2FkZF9tZDUoY29uZmlnLCBhcmdzLnJlY2lwZW5hbWUsIGFmKQorICAgIGxvZ2dlci5pbmZvKCdVcGdyYWRlZCBzb3VyY2UgZXh0cmFjdGVkIHRvICVzJyAlIGFyZ3Muc3JjdHJlZSkKKyAgICByZXR1cm4gMAorCitkZWYgcmVnaXN0ZXJfY29tbWFuZHMoc3VicGFyc2VycywgY29udGV4dCk6CisgICAgIiIiUmVnaXN0ZXIgZGV2dG9vbCBzdWJjb21tYW5kcyBmcm9tIHRoaXMgcGx1Z2luIiIiCisgICAgcGFyc2VyX3VwZ3JhZGUgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3VwZ3JhZGUnLCBoZWxwPSdVcGdyYWRlIGFuIGV4aXN0aW5nIHJlY2lwZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J1VwZ3JhZGVzIGFuIGV4aXN0aW5nIHJlY2lwZSB0byBhIG5ldyB1cHN0cmVhbSB2ZXJzaW9uJykKKyAgICBwYXJzZXJfdXBncmFkZS5hZGRfYXJndW1lbnQoJ3JlY2lwZW5hbWUnLCBoZWxwPSdOYW1lIGZvciByZWNpcGUgdG8gZXh0cmFjdCB0aGUgc291cmNlIGZvcicpCisgICAgcGFyc2VyX3VwZ3JhZGUuYWRkX2FyZ3VtZW50KCdzcmN0cmVlJywgaGVscD0nUGF0aCB0byB3aGVyZSB0byBleHRyYWN0IHRoZSBzb3VyY2UgdHJlZScpCisgICAgcGFyc2VyX3VwZ3JhZGUuYWRkX2FyZ3VtZW50KCctLXZlcnNpb24nLCAnLVYnLCBoZWxwPSdWZXJzaW9uIHRvIHVwZ3JhZGUgdG8gKFBWKScpCisgICAgcGFyc2VyX3VwZ3JhZGUuYWRkX2FyZ3VtZW50KCctLXNyY3JldicsICctUycsIGhlbHA9J1NvdXJjZSByZXZpc2lvbiB0byB1cGdyYWRlIHRvIChpZiBmZXRjaGluZyBmcm9tIGFuIFNDTSBzdWNoIGFzIGdpdCknKQorICAgIHBhcnNlcl91cGdyYWRlLmFkZF9hcmd1bWVudCgnLS1icmFuY2gnLCAnLWInLCBkZWZhdWx0PSJkZXZ0b29sIiwgaGVscD0nTmFtZSBmb3IgbmV3IGRldmVsb3BtZW50IGJyYW5jaCB0byBjaGVja291dCAoZGVmYXVsdCAiJShkZWZhdWx0KXMiKScpCisgICAgcGFyc2VyX3VwZ3JhZGUuYWRkX2FyZ3VtZW50KCctLW5vLXBhdGNoJywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0nRG8gbm90IGFwcGx5IHBhdGNoZXMgZnJvbSB0aGUgcmVjaXBlIHRvIHRoZSBuZXcgc291cmNlIGNvZGUnKQorICAgIGdyb3VwID0gcGFyc2VyX3VwZ3JhZGUuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXNhbWUtZGlyJywgJy1zJywgaGVscD0nQnVpbGQgaW4gc2FtZSBkaXJlY3RvcnkgYXMgc291cmNlJywgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tbm8tc2FtZS1kaXInLCBoZWxwPSdGb3JjZSBidWlsZCBpbiBhIHNlcGFyYXRlIGJ1aWxkIGRpcmVjdG9yeScsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgcGFyc2VyX3VwZ3JhZGUuYWRkX2FyZ3VtZW50KCctLWtlZXAtdGVtcCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J0tlZXAgdGVtcG9yYXJ5IGRpcmVjdG9yeSAoZm9yIGRlYnVnZ2luZyknKQorICAgIHBhcnNlcl91cGdyYWRlLnNldF9kZWZhdWx0cyhmdW5jPXVwZ3JhZGUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvX19pbml0X18ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2FwcGVuZC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9hcHBlbmQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZlNDExNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9hcHBlbmQucHkKQEAgLTAsMCArMSw0NjkgQEAKKyMgUmVjaXBlIGNyZWF0aW9uIHRvb2wgLSBhcHBlbmQgcGx1Z2luCisjCisjIENvcHlyaWdodCAoQykgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBnbG9iCitpbXBvcnQgZm5tYXRjaAoraW1wb3J0IHJlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdGF0CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc2NyaXB0dXRpbHMKK2ltcG9ydCBlcnJubworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3JlY2lwZXRvb2wnKQorCit0aW5mb2lsID0gTm9uZQorCitkZWYgdGluZm9pbF9pbml0KGluc3RhbmNlKToKKyAgICBnbG9iYWwgdGluZm9pbAorICAgIHRpbmZvaWwgPSBpbnN0YW5jZQorCisKKyMgRklYTUUgZ3Vlc3Npbmcgd2hlbiB3ZSBkb24ndCBoYXZlIHBrZ2RhdGE/CisjIEZJWE1FIG1vZGUgdG8gY3JlYXRlIHBhdGNoIHJhdGhlciB0aGFuIGRpcmVjdGx5IHN1YnN0aXR1dGUKKworY2xhc3MgSW52YWxpZFRhcmdldEZpbGVFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworZGVmIGZpbmRfdGFyZ2V0X2ZpbGUodGFyZ2V0cGF0aCwgZCwgcGtnbGlzdD1Ob25lKToKKyAgICAiIiJGaW5kIHRoZSByZWNpcGUgaW5zdGFsbGluZyB0aGUgc3BlY2lmaWVkIHRhcmdldCBwYXRoLCBvcHRpb25hbGx5IGxpbWl0ZWQgdG8gYSBzZWxlY3QgbGlzdCBvZiBwYWNrYWdlcyIiIgorICAgIGltcG9ydCBqc29uCisKKyAgICBwa2dkYXRhX2RpciA9IGQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpCisKKyAgICAjIFRoZSBtaXggYmV0d2VlbiAvZXRjIGFuZCAke3N5c2NvbmZkaXJ9IGhlcmUgbWF5IGxvb2sgb2RkLCBidXQgaXQgaXMganVzdAorICAgICMgYmVpbmcgY29uc2lzdGVudCB3aXRoIHVzYWdlIGVsc2V3aGVyZQorICAgIGludmFsaWR0YXJnZXRzID0geycke3N5c2NvbmZkaXJ9L3ZlcnNpb24nOiAnJHtzeXNjb25mZGlyfS92ZXJzaW9uIGlzIHdyaXR0ZW4gb3V0IGF0IGltYWdlIGNyZWF0aW9uIHRpbWUnLAorICAgICAgICAgICAgICAgICAgICAgICcvZXRjL3RpbWVzdGFtcCc6ICcvZXRjL3RpbWVzdGFtcCBpcyB3cml0dGVuIG91dCBhdCBpbWFnZSBjcmVhdGlvbiB0aW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAnL2Rldi8qJzogJy9kZXYgaXMgaGFuZGxlZCBieSB1ZGV2IChvciBlcXVpdmFsZW50KSBhbmQgdGhlIGtlcm5lbCAoZGV2dG1wZnMpJywKKyAgICAgICAgICAgICAgICAgICAgICAnL2V0Yy9wYXNzd2QnOiAnL2V0Yy9wYXNzd2Qgc2hvdWxkIGJlIG1hbmFnZWQgdGhyb3VnaCB0aGUgdXNlcmFkZCBhbmQgZXh0cmF1c2VycyBjbGFzc2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAnL2V0Yy9ncm91cCc6ICcvZXRjL2dyb3VwIHNob3VsZCBiZSBtYW5hZ2VkIHRocm91Z2ggdGhlIHVzZXJhZGQgYW5kIGV4dHJhdXNlcnMgY2xhc3NlcycsCisgICAgICAgICAgICAgICAgICAgICAgJy9ldGMvc2hhZG93JzogJy9ldGMvc2hhZG93IHNob3VsZCBiZSBtYW5hZ2VkIHRocm91Z2ggdGhlIHVzZXJhZGQgYW5kIGV4dHJhdXNlcnMgY2xhc3NlcycsCisgICAgICAgICAgICAgICAgICAgICAgJy9ldGMvZ3NoYWRvdyc6ICcvZXRjL2dzaGFkb3cgc2hvdWxkIGJlIG1hbmFnZWQgdGhyb3VnaCB0aGUgdXNlcmFkZCBhbmQgZXh0cmF1c2VycyBjbGFzc2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAnJHtzeXNjb25mZGlyfS9ob3N0bmFtZSc6ICcke3N5c2NvbmZkaXJ9L2hvc3RuYW1lIGNvbnRlbnRzIHNob3VsZCBiZSBzZXQgYnkgc2V0dGluZyBob3N0bmFtZV9wbi1iYXNlLWZpbGVzID0gInZhbHVlIiBpbiBjb25maWd1cmF0aW9uJyx9CisKKyAgICBmb3IgcHRoc3BlYywgbWVzc2FnZSBpbiBpbnZhbGlkdGFyZ2V0cy5pdGVyaXRlbXMoKToKKyAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZSh0YXJnZXRwYXRoLCBkLmV4cGFuZChwdGhzcGVjKSk6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkVGFyZ2V0RmlsZUVycm9yKGQuZXhwYW5kKG1lc3NhZ2UpKQorCisgICAgdGFyZ2V0cGF0aF9yZSA9IHJlLmNvbXBpbGUocidccysoXCREKT8lcyhcc3wkKScgJSB0YXJnZXRwYXRoKQorCisgICAgcmVjaXBlcyA9IGRlZmF1bHRkaWN0KGxpc3QpCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsob3MucGF0aC5qb2luKHBrZ2RhdGFfZGlyLCAncnVudGltZScpKToKKyAgICAgICAgaWYgcGtnbGlzdDoKKyAgICAgICAgICAgIGZpbGVsaXN0ID0gcGtnbGlzdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsZWxpc3QgPSBmaWxlcworICAgICAgICBmb3IgZm4gaW4gZmlsZWxpc3Q6CisgICAgICAgICAgICBwa2dkYXRhZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBmbikKKyAgICAgICAgICAgIGlmIHBrZ2xpc3QgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhwa2dkYXRhZmlsZSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHdpdGggb3Blbihwa2dkYXRhZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIHBuID0gJycKKyAgICAgICAgICAgICAgICAjIFRoaXMgZG9lcyBhc3N1bWUgdGhhdCBQTiBjb21lcyBiZWZvcmUgb3RoZXIgdmFsdWVzLCBidXQgdGhhdCdzIGEgZmFpcmx5IHNhZmUgYXNzdW1wdGlvbgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnUE46Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICBwbiA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdGSUxFU19JTkZPOicpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpY3R2YWwgPSBqc29uLmxvYWRzKHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmdWxscHRoIGluIGRpY3R2YWwua2V5cygpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaGNhc2UoZnVsbHB0aCwgdGFyZ2V0cGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXNbdGFyZ2V0cGF0aF0uYXBwZW5kKHBuKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgncGtnX3ByZWluc3RfJykgb3IgbGluZS5zdGFydHN3aXRoKCdwa2dfcG9zdGluc3RfJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHR2YWwgPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKS5kZWNvZGUoJ3N0cmluZ19lc2NhcGUnKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ3VwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1pbnN0YWxsICVzICcgJSB0YXJnZXRwYXRoIGluIHNjcmlwdHZhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzW3RhcmdldHBhdGhdLmFwcGVuZCgnPyVzJyAlIHBuKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiB0YXJnZXRwYXRoX3JlLnNlYXJjaChzY3JpcHR2YWwpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXNbdGFyZ2V0cGF0aF0uYXBwZW5kKCchJXMnICUgcG4pCisgICAgcmV0dXJuIHJlY2lwZXMKKworZGVmIF9nZXRfcmVjaXBlX2ZpbGUoY29va2VyLCBwbik6CisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisgICAgcmVjaXBlZmlsZSA9IG9lLnJlY2lwZXV0aWxzLnBuX3RvX3JlY2lwZShjb29rZXIsIHBuKQorICAgIGlmIG5vdCByZWNpcGVmaWxlOgorICAgICAgICBza2lwcmVhc29ucyA9IG9lLnJlY2lwZXV0aWxzLmdldF91bmF2YWlsYWJsZV9yZWFzb25zKGNvb2tlciwgcG4pCisgICAgICAgIGlmIHNraXByZWFzb25zOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdcbicuam9pbihza2lwcmVhc29ucykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGFueSByZWNpcGUgZmlsZSBtYXRjaGluZyAlcyIgJSBwbikKKyAgICByZXR1cm4gcmVjaXBlZmlsZQorCitkZWYgX3BhcnNlX3JlY2lwZShwbiwgdGluZm9pbCk6CisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisgICAgcmVjaXBlZmlsZSA9IF9nZXRfcmVjaXBlX2ZpbGUodGluZm9pbC5jb29rZXIsIHBuKQorICAgIGlmIG5vdCByZWNpcGVmaWxlOgorICAgICAgICAjIEVycm9yIGFscmVhZHkgbG9nZ2VkCisgICAgICAgIHJldHVybiBOb25lCisgICAgYXBwZW5kX2ZpbGVzID0gdGluZm9pbC5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKHJlY2lwZWZpbGUpCisgICAgcmQgPSBvZS5yZWNpcGV1dGlscy5wYXJzZV9yZWNpcGUocmVjaXBlZmlsZSwgYXBwZW5kX2ZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YSkKKyAgICByZXR1cm4gcmQKKworZGVmIGRldGVybWluZV9maWxlX3NvdXJjZSh0YXJnZXRwYXRoLCByZCk6CisgICAgIiIiQXNzdW1pbmcgd2Uga25vdyBhIGZpbGUgY2FtZSBmcm9tIGEgc3BlY2lmaWMgcmVjaXBlLCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hlcmUgaXQgY2FtZSBmcm9tIiIiCisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisKKyAgICAjIFNlZSBpZiBpdCdzIGluIGRvX2luc3RhbGwgZm9yIHRoZSByZWNpcGUKKyAgICB3b3JrZGlyID0gcmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBzcmNfdXJpID0gcmQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkKKyAgICBzcmNmaWxlID0gJycKKyAgICBtb2RwYXRjaGVzID0gW10KKyAgICBlbGVtZW50cyA9IGNoZWNrX2RvX2luc3RhbGwocmQsIHRhcmdldHBhdGgpCisgICAgaWYgZWxlbWVudHM6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygnZG9faW5zdGFsbCBsaW5lOlxuJXMnICUgJyAnLmpvaW4oZWxlbWVudHMpKQorICAgICAgICBzcmNwYXRoID0gZ2V0X3NvdXJjZV9wYXRoKGVsZW1lbnRzKQorICAgICAgICBsb2dnZXIuZGVidWcoJ3NvdXJjZSBwYXRoOiAlcycgJSBzcmNwYXRoKQorICAgICAgICBpZiBub3Qgc3JjcGF0aC5zdGFydHN3aXRoKCcvJyk6CisgICAgICAgICAgICAjIEhhbmRsZSBub24tYWJzb2x1dGUgcGF0aAorICAgICAgICAgICAgc3JjcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocmQuZ2V0VmFyRmxhZygnZG9faW5zdGFsbCcsICdkaXJzJywgVHJ1ZSkuc3BsaXQoKVstMV0sIHNyY3BhdGgpKQorICAgICAgICBpZiBzcmNwYXRoLnN0YXJ0c3dpdGgod29ya2Rpcik6CisgICAgICAgICAgICAjIE9LLCBub3cgd2UgaGF2ZSB0aGUgc291cmNlIGZpbGUgbmFtZSwgbG9vayBmb3IgaXQgaW4gU1JDX1VSSQorICAgICAgICAgICAgd29ya2RpcmZpbGUgPSBvcy5wYXRoLnJlbHBhdGgoc3JjcGF0aCwgd29ya2RpcikKKyAgICAgICAgICAgICMgRklYTUUgdGhpcyBpcyB3aGVyZSB3ZSBvdWdodCB0byBoYXZlIHNvbWUgY29kZSBpbiB0aGUgZmV0Y2hlciwgYmVjYXVzZSB0aGlzIGlzIG5haXZlCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBzcmNfdXJpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgbG9jYWxwYXRoID0gYmIuZmV0Y2gyLmxvY2FscGF0aChpdGVtLCByZCkKKyAgICAgICAgICAgICAgICAjIFNvdXJjZSBwYXRoIHNwZWNpZmllZCBpbiBkb19pbnN0YWxsIG1pZ2h0IGJlIGEgZ2xvYgorICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChvcy5wYXRoLmJhc2VuYW1lKGxvY2FscGF0aCksIHdvcmtkaXJmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgc3JjZmlsZSA9ICdmaWxlOi8vJXMnICUgbG9jYWxwYXRoCisgICAgICAgICAgICAgICAgZWxpZiAnLycgaW4gd29ya2RpcmZpbGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGl0ZW0gPT0gJ2ZpbGU6Ly8lcycgJSB3b3JrZGlyZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY2ZpbGUgPSAnZmlsZTovLyVzJyAlIGxvY2FscGF0aAorCisgICAgICAgICMgQ2hlY2sgcGF0Y2hlcworICAgICAgICBzcmNwYXRjaGVzID0gW10KKyAgICAgICAgcGF0Y2hlZGZpbGVzID0gb2UucmVjaXBldXRpbHMuZ2V0X3JlY2lwZV9wYXRjaGVkX2ZpbGVzKHJkKQorICAgICAgICBmb3IgcGF0Y2gsIGZpbGVsaXN0IGluIHBhdGNoZWRmaWxlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBmaWxlaXRlbSBpbiBmaWxlbGlzdDoKKyAgICAgICAgICAgICAgICBpZiBmaWxlaXRlbVswXSA9PSBzcmNwYXRoOgorICAgICAgICAgICAgICAgICAgICBzcmNwYXRjaGVzLmFwcGVuZCgocGF0Y2gsIGZpbGVpdGVtWzFdKSkKKyAgICAgICAgaWYgc3JjcGF0Y2hlczoKKyAgICAgICAgICAgIGFkZHBhdGNoID0gTm9uZQorICAgICAgICAgICAgZm9yIHBhdGNoIGluIHNyY3BhdGNoZXM6CisgICAgICAgICAgICAgICAgaWYgcGF0Y2hbMV0gPT0gJ0EnOgorICAgICAgICAgICAgICAgICAgICBhZGRwYXRjaCA9IHBhdGNoWzBdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbW9kcGF0Y2hlcy5hcHBlbmQocGF0Y2hbMF0pCisgICAgICAgICAgICBpZiBhZGRwYXRjaDoKKyAgICAgICAgICAgICAgICBzcmNmaWxlID0gJ3BhdGNoOi8vJXMnICUgYWRkcGF0Y2gKKworICAgIHJldHVybiAoc3JjZmlsZSwgZWxlbWVudHMsIG1vZHBhdGNoZXMpCisKK2RlZiBnZXRfc291cmNlX3BhdGgoY21kZWxlbWVudHMpOgorICAgICIiIkZpbmQgdGhlIHNvdXJjZSBwYXRoIHNwZWNpZmllZCB3aXRoaW4gYSBjb21tYW5kIiIiCisgICAgY29tbWFuZCA9IGNtZGVsZW1lbnRzWzBdCisgICAgaWYgY29tbWFuZCBpbiBbJ2luc3RhbGwnLCAnY3AnXToKKyAgICAgICAgaGVscHRleHQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgnTENfQUxMPUMgJXMgLS1oZWxwJyAlIGNvbW1hbmQsIHNoZWxsPVRydWUpCisgICAgICAgIGFyZ29wdHMgPSAnJworICAgICAgICBhcmdvcHRfbGluZV9yZSA9IHJlLmNvbXBpbGUoJ14tKFthLXpBLVowLTldKSwgLS1bYS16LV0rPScpCisgICAgICAgIGZvciBsaW5lIGluIGhlbHB0ZXh0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLmxzdHJpcCgpCisgICAgICAgICAgICByZXMgPSBhcmdvcHRfbGluZV9yZS5zZWFyY2gobGluZSkKKyAgICAgICAgICAgIGlmIHJlczoKKyAgICAgICAgICAgICAgICBhcmdvcHRzICs9IHJlcy5ncm91cCgxKQorICAgICAgICBpZiBub3QgYXJnb3B0czoKKyAgICAgICAgICAgICMgRmFsbGJhY2sKKyAgICAgICAgICAgIGlmIGNvbW1hbmQgPT0gJ2luc3RhbGwnOgorICAgICAgICAgICAgICAgIGFyZ29wdHMgPSAnZ21vU3QnCisgICAgICAgICAgICBlbGlmIGNvbW1hbmQgPT0gJ2NwJzoKKyAgICAgICAgICAgICAgICBhcmdvcHRzID0gJ3QnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignTm8gZmFsbGJhY2sgYXJndW1lbnRzIGZvciBjb21tYW5kICVzJyAlIGNvbW1hbmQpCisKKyAgICAgICAgc2tpcG5leHQgPSBGYWxzZQorICAgICAgICBmb3IgZWxlbSBpbiBjbWRlbGVtZW50c1sxOi0xXToKKyAgICAgICAgICAgIGlmIGVsZW0uc3RhcnRzd2l0aCgnLScpOgorICAgICAgICAgICAgICAgIGlmIGxlbihlbGVtKSA+IDEgYW5kIGVsZW1bMV0gaW4gYXJnb3B0czoKKyAgICAgICAgICAgICAgICAgICAgc2tpcG5leHQgPSBUcnVlCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHNraXBuZXh0OgorICAgICAgICAgICAgICAgIHNraXBuZXh0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcmV0dXJuIGVsZW0KKyAgICBlbHNlOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oJ2dldF9zb3VyY2VfcGF0aDogbm8gaGFuZGxpbmcgZm9yIGNvbW1hbmQgIiVzIicpCisKK2RlZiBnZXRfZnVuY19kZXBzKGZ1bmMsIGQpOgorICAgICIiIkZpbmQgdGhlIGZ1bmN0aW9uIGRlcGVuZGVuY2llcyBvZiBhIHNoZWxsIGZ1bmN0aW9uIiIiCisgICAgZGVwcyA9IGJiLmNvZGVwYXJzZXIuU2hlbGxQYXJzZXIoZnVuYywgbG9nZ2VyKS5wYXJzZV9zaGVsbChkLmdldFZhcihmdW5jLCBUcnVlKSkKKyAgICBkZXBzIHw9IHNldCgoZC5nZXRWYXJGbGFnKGZ1bmMsICJ2YXJkZXBzIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgZnVuY2RlcHMgPSBbXQorICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgaWYgZC5nZXRWYXJGbGFnKGRlcCwgJ2Z1bmMnLCBUcnVlKToKKyAgICAgICAgICAgIGZ1bmNkZXBzLmFwcGVuZChkZXApCisgICAgcmV0dXJuIGZ1bmNkZXBzCisKK2RlZiBjaGVja19kb19pbnN0YWxsKHJkLCB0YXJnZXRwYXRoKToKKyAgICAiIiJMb29rIGF0IGRvX2luc3RhbGwgZm9yIGEgY29tbWFuZCB0aGF0IGluc3RhbGxzL2NvcGllcyB0aGUgc3BlY2lmaWVkIHRhcmdldCBwYXRoIiIiCisgICAgaW5zdHBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHJkLmdldFZhcignRCcsIFRydWUpLCB0YXJnZXRwYXRoLmxzdHJpcCgnLycpKSkKKyAgICBkb19pbnN0YWxsID0gcmQuZ2V0VmFyKCdkb19pbnN0YWxsJywgVHJ1ZSkKKyAgICAjIEhhbmRsZSB3aGVyZSBkb19pbnN0YWxsIGNhbGxzIG90aGVyIGZ1bmN0aW9ucyAoc29tZXdoYXQgY3J1ZGVseSwgYnV0IGdvb2QgZW5vdWdoIGZvciB0aGlzIHB1cnBvc2UpCisgICAgZGVwcyA9IGdldF9mdW5jX2RlcHMoJ2RvX2luc3RhbGwnLCByZCkKKyAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgIGRvX2luc3RhbGwgPSBkb19pbnN0YWxsLnJlcGxhY2UoZGVwLCByZC5nZXRWYXIoZGVwLCBUcnVlKSkKKworICAgICMgTG9vayBiYWNrd2FyZHMgdGhyb3VnaCBkb19pbnN0YWxsIGFzIHdlIHdhbnQgdG8gY2F0Y2ggd2hlcmUgYSBsYXRlciBsaW5lIChwZXJoYXBzCisgICAgIyBmcm9tIGEgYmJhcHBlbmQpIGlzIHdyaXRpbmcgb3ZlciB0aGUgdG9wCisgICAgZm9yIGxpbmUgaW4gcmV2ZXJzZWQoZG9faW5zdGFsbC5zcGxpdGxpbmVzKCkpOgorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmIChsaW5lLnN0YXJ0c3dpdGgoJ2luc3RhbGwgJykgYW5kICcgLW0nIGluIGxpbmUpIG9yIGxpbmUuc3RhcnRzd2l0aCgnY3AgJyk6CisgICAgICAgICAgICBlbGVtZW50cyA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgZGVzdHBhdGggPSBvcy5wYXRoLmFic3BhdGgoZWxlbWVudHNbLTFdKQorICAgICAgICAgICAgaWYgZGVzdHBhdGggPT0gaW5zdHBhdGg6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzCisgICAgICAgICAgICBlbGlmIGRlc3RwYXRoLnJzdHJpcCgnLycpID09IG9zLnBhdGguZGlybmFtZShpbnN0cGF0aCk6CisgICAgICAgICAgICAgICAgIyBGSVhNRSB0aGlzIGRvZXNuJ3QgdGFrZSByZWN1cnNpdmUgY29weSBpbnRvIGFjY291bnQ7IHVuc3VyZSBpZiBpdCdzIHByYWN0aWNhbCB0byBkbyBzbworICAgICAgICAgICAgICAgIHNyY3BhdGggPSBnZXRfc291cmNlX3BhdGgoZWxlbWVudHMpCisgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZShvcy5wYXRoLmJhc2VuYW1lKGluc3RwYXRoKSwgb3MucGF0aC5iYXNlbmFtZShzcmNwYXRoKSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50cworICAgIHJldHVybiBOb25lCisKKworZGVmIGFwcGVuZGZpbGUoYXJncyk6CisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisKKyAgICBzdGRvdXQgPSAnJworICAgIHRyeToKKyAgICAgICAgKHN0ZG91dCwgXykgPSBiYi5wcm9jZXNzLnJ1bignTEFORz1DIGZpbGUgLWIgJXMnICUgYXJncy5uZXdmaWxlLCBzaGVsbD1UcnVlKQorICAgICAgICBpZiAnY2Fubm90IG9wZW4nIGluIHN0ZG91dDoKKyAgICAgICAgICAgIHJhaXNlIGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3Ioc3Rkb3V0KQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGVycjoKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdmaWxlIGNvbW1hbmQgcmV0dXJuZWQgZXJyb3I6ICVzJyAlIGVycikKKyAgICAgICAgc3Rkb3V0ID0gJycKKyAgICBpZiBzdGRvdXQ6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygnZmlsZSBjb21tYW5kIG91dHB1dDogJXMnICUgc3Rkb3V0LnJzdHJpcCgpKQorICAgICAgICBpZiAoJ2V4ZWN1dGFibGUnIGluIHN0ZG91dCBhbmQgbm90ICdzaGVsbCBzY3JpcHQnIGluIHN0ZG91dCkgb3IgJ3NoYXJlZCBvYmplY3QnIGluIHN0ZG91dDoKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCdUaGlzIGZpbGUgbG9va3MgbGlrZSBpdCBpcyBhIGJpbmFyeSBvciBvdGhlcndpc2UgdGhlIG91dHB1dCBvZiBjb21waWxhdGlvbi4gSWYgaXQgaXMsIHlvdSBzaG91bGQgY29uc2lkZXIgYnVpbGRpbmcgaXQgcHJvcGVybHkgaW5zdGVhZCBvZiBzdWJzdGl0dXRpbmcgYSBiaW5hcnkgZmlsZSBkaXJlY3RseS4nKQorCisgICAgaWYgYXJncy5yZWNpcGU6CisgICAgICAgIHJlY2lwZXMgPSB7YXJncy50YXJnZXRwYXRoOiBbYXJncy5yZWNpcGVdLH0KKyAgICBlbHNlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZWNpcGVzID0gZmluZF90YXJnZXRfZmlsZShhcmdzLnRhcmdldHBhdGgsIHRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgICAgIGV4Y2VwdCBJbnZhbGlkVGFyZ2V0RmlsZUVycm9yIGFzIGU6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJyVzIGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgdG9vbDogJXMnICUgKGFyZ3MudGFyZ2V0cGF0aCwgZSkpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBpZiBub3QgcmVjaXBlczoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIGZpbmQgYW55IHBhY2thZ2UgcHJvZHVjaW5nIHBhdGggJXMgLSB0aGlzIG1heSBiZSBiZWNhdXNlIHRoZSByZWNpcGUgcGFja2FnaW5nIGl0IGhhcyBub3QgYmVlbiBidWlsdCB5ZXQnICUgYXJncy50YXJnZXRwYXRoKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgIGFsdGVybmF0aXZlX3BucyA9IFtdCisgICAgcG9zdGluc3RfcG5zID0gW10KKworICAgIHNlbGVjdHBuID0gTm9uZQorICAgIGZvciB0YXJnZXRwYXRoLCBwbmxpc3QgaW4gcmVjaXBlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIHBuIGluIHBubGlzdDoKKyAgICAgICAgICAgIGlmIHBuLnN0YXJ0c3dpdGgoJz8nKToKKyAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZV9wbnMuYXBwZW5kKHBuWzE6XSkKKyAgICAgICAgICAgIGVsaWYgcG4uc3RhcnRzd2l0aCgnIScpOgorICAgICAgICAgICAgICAgIHBvc3RpbnN0X3Bucy5hcHBlbmQocG5bMTpdKQorICAgICAgICAgICAgZWxpZiBzZWxlY3RwbjoKKyAgICAgICAgICAgICAgICAjIGhpdCBoZXJlIHdpdGggbXVsdGlsaWJzCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZWN0cG4gPSBwbgorCisgICAgaWYgbm90IHNlbGVjdHBuIGFuZCBsZW4oYWx0ZXJuYXRpdmVfcG5zKSA9PSAxOgorICAgICAgICBzZWxlY3RwbiA9IGFsdGVybmF0aXZlX3Buc1swXQorICAgICAgICBsb2dnZXIuZXJyb3IoJ0ZpbGUgJXMgaXMgYW4gYWx0ZXJuYXRpdmUgcG9zc2libHkgcHJvdmlkZWQgYnkgcmVjaXBlICVzIGJ1dCBzZWVtaW5nbHkgbm8gb3RoZXIsIHNlbGVjdGluZyBpdCBieSBkZWZhdWx0IC0geW91IHNob3VsZCBkb3VibGUgY2hlY2sgb3RoZXIgcmVjaXBlcycgJSAoYXJncy50YXJnZXRwYXRoLCBzZWxlY3RwbikpCisKKyAgICBpZiBzZWxlY3RwbjoKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdTZWxlY3RpbmcgcmVjaXBlICVzIGZvciBmaWxlICVzJyAlIChzZWxlY3RwbiwgYXJncy50YXJnZXRwYXRoKSkKKyAgICAgICAgaWYgcG9zdGluc3RfcG5zOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oJyVzIGJlIG1vZGlmaWVkIGJ5IHBvc3RpbnN0YWxsIHNjcmlwdHMgZm9yIHRoZSBmb2xsb3dpbmcgcmVjaXBlczpcbiAgJXNcblRoaXMgbWF5IG9yIG1heSBub3QgYmUgYW4gaXNzdWUgZGVwZW5kaW5nIG9uIHdoYXQgbW9kaWZpY2F0aW9ucyB0aGVzZSBwb3N0aW5zdGFsbCBzY3JpcHRzIG1ha2UuJyAlIChhcmdzLnRhcmdldHBhdGgsICdcbiAgJy5qb2luKHBvc3RpbnN0X3BucykpKQorICAgICAgICByZCA9IF9wYXJzZV9yZWNpcGUoc2VsZWN0cG4sIHRpbmZvaWwpCisgICAgICAgIGlmIG5vdCByZDoKKyAgICAgICAgICAgICMgRXJyb3IgbWVzc2FnZSBhbHJlYWR5IHNob3duCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBzb3VyY2VmaWxlLCBpbnN0ZWxlbWVudHMsIG1vZHBhdGNoZXMgPSBkZXRlcm1pbmVfZmlsZV9zb3VyY2UoYXJncy50YXJnZXRwYXRoLCByZCkKKyAgICAgICAgc291cmNlcGF0aCA9IE5vbmUKKyAgICAgICAgaWYgc291cmNlZmlsZToKKyAgICAgICAgICAgIHNvdXJjZXR5cGUsIHNvdXJjZXBhdGggPSBzb3VyY2VmaWxlLnNwbGl0KCc6Ly8nLCAxKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdPcmlnaW5hbCBzb3VyY2UgZmlsZSBpcyAlcyAoJXMpJyAlIChzb3VyY2VwYXRoLCBzb3VyY2V0eXBlKSkKKyAgICAgICAgICAgIGlmIHNvdXJjZXR5cGUgPT0gJ3BhdGNoJzoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybignRmlsZSAlcyBpcyBhZGRlZCBieSB0aGUgcGF0Y2ggJXMgLSB5b3UgbWF5IG5lZWQgdG8gcmVtb3ZlIG9yIHJlcGxhY2UgdGhpcyBwYXRjaCBpbiBvcmRlciB0byByZXBsYWNlIHRoZSBmaWxlLicgJSAoYXJncy50YXJnZXRwYXRoLCBzb3VyY2VwYXRoKSkKKyAgICAgICAgICAgICAgICBzb3VyY2VwYXRoID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdVbmFibGUgdG8gZGV0ZXJtaW5lIHNvdXJjZSBmaWxlLCBwcm9jZWVkaW5nIGFueXdheScpCisgICAgICAgIGlmIG1vZHBhdGNoZXM6CisgICAgICAgICAgICBsb2dnZXIud2FybignRmlsZSAlcyBpcyBtb2RpZmllZCBieSB0aGUgZm9sbG93aW5nIHBhdGNoZXM6XG4gICVzJyAlIChhcmdzLnRhcmdldHBhdGgsICdcbiAgJy5qb2luKG1vZHBhdGNoZXMpKSkKKworICAgICAgICBpZiBpbnN0ZWxlbWVudHMgYW5kIHNvdXJjZXBhdGg6CisgICAgICAgICAgICBpbnN0YWxsID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBBdXRvLWRldGVybWluZSBwZXJtaXNzaW9ucworICAgICAgICAgICAgIyBDaGVjayBkZXN0aW5hdGlvbgorICAgICAgICAgICAgYmlucGF0aHMgPSAnJHtiaW5kaXJ9OiR7c2JpbmRpcn06JHtiYXNlX2JpbmRpcn06JHtiYXNlX3NiaW5kaXJ9OiR7bGliZXhlY2Rpcn06JHtzeXNjb25mZGlyfS9pbml0LmQnCisgICAgICAgICAgICBwZXJtcyA9ICcwNjQ0JworICAgICAgICAgICAgaWYgb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShhcmdzLnRhcmdldHBhdGgpKSBpbiByZC5leHBhbmQoYmlucGF0aHMpLnNwbGl0KCc6Jyk6CisgICAgICAgICAgICAgICAgIyBGaWxlIGlzIGdvaW5nIGludG8gYSBkaXJlY3Rvcnkgbm9ybWFsbHkgcmVzZXJ2ZWQgZm9yIGV4ZWN1dGFibGVzLCBzbyBpdCBzaG91bGQgYmUgZXhlY3V0YWJsZQorICAgICAgICAgICAgICAgIHBlcm1zID0gJzA3NTUnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgQ2hlY2sgc291cmNlCisgICAgICAgICAgICAgICAgc3QgPSBvcy5zdGF0KGFyZ3MubmV3ZmlsZSkKKyAgICAgICAgICAgICAgICBpZiBzdC5zdF9tb2RlICYgc3RhdC5TX0lYVVNSOgorICAgICAgICAgICAgICAgICAgICBwZXJtcyA9ICcwNzU1JworICAgICAgICAgICAgaW5zdGFsbCA9IHthcmdzLm5ld2ZpbGU6IChhcmdzLnRhcmdldHBhdGgsIHBlcm1zKX0KKyAgICAgICAgb2UucmVjaXBldXRpbHMuYmJhcHBlbmRfcmVjaXBlKHJkLCBhcmdzLmRlc3RsYXllciwge2FyZ3MubmV3ZmlsZTogc291cmNlcGF0aH0sIGluc3RhbGwsIHdpbGRjYXJkdmVyPWFyZ3Mud2lsZGNhcmRfdmVyc2lvbiwgbWFjaGluZT1hcmdzLm1hY2hpbmUpCisgICAgICAgIHJldHVybiAwCisgICAgZWxzZToKKyAgICAgICAgaWYgYWx0ZXJuYXRpdmVfcG5zOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdGaWxlICVzIGlzIGFuIGFsdGVybmF0aXZlIHBvc3NpYmx5IHByb3ZpZGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVjaXBlczpcbiAgJXNcblBsZWFzZSBzZWxlY3QgcmVjaXBlIHdpdGggLXIvLS1yZWNpcGUnICUgKHRhcmdldHBhdGgsICdcbiAgJy5qb2luKGFsdGVybmF0aXZlX3BucykpKQorICAgICAgICBlbGlmIHBvc3RpbnN0X3BuczoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRmlsZSAlcyBtYXkgYmUgd3JpdHRlbiBvdXQgaW4gYSBwcmUvcG9zdGluc3RhbGwgc2NyaXB0IG9mIHRoZSBmb2xsb3dpbmcgcmVjaXBlczpcbiAgJXNcblBsZWFzZSBzZWxlY3QgcmVjaXBlIHdpdGggLXIvLS1yZWNpcGUnICUgKHRhcmdldHBhdGgsICdcbiAgJy5qb2luKHBvc3RpbnN0X3BucykpKQorICAgICAgICByZXR1cm4gMworCisKK2RlZiBhcHBlbmRzcmMoYXJncywgZmlsZXMsIHJkLCBleHRyYWxpbmVzPU5vbmUpOgorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworCisgICAgc3JjZGlyID0gcmQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICB3b3JrZGlyID0gcmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKworICAgIGltcG9ydCBiYi5mZXRjaAorICAgIHNpbXBsaWZpZWQgPSB7fQorICAgIHNyY191cmkgPSByZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIHVyaSBpbiBzcmNfdXJpOgorICAgICAgICBzaW1wbGVfdXJpID0gYmIuZmV0Y2guVVJJKHVyaSkKKyAgICAgICAgc2ltcGxlX3VyaS5wYXJhbXMgPSB7fQorICAgICAgICBzaW1wbGlmaWVkW3N0cihzaW1wbGVfdXJpKV0gPSB1cmkKKworICAgIGNvcHlmaWxlcyA9IHt9CisgICAgZXh0cmFsaW5lcyA9IGV4dHJhbGluZXMgb3IgW10KKyAgICBmb3IgbmV3ZmlsZSwgc3JjZmlsZSBpbiBmaWxlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgc3JjX2Rlc3RkaXIgPSBvcy5wYXRoLmRpcm5hbWUoc3JjZmlsZSkKKyAgICAgICAgaWYgbm90IGFyZ3MudXNlX3dvcmtkaXI6CisgICAgICAgICAgICBpZiByZC5nZXRWYXIoJ1MnLCBUcnVlKSA9PSByZC5nZXRWYXIoJ1NUQUdJTkdfS0VSTkVMX0RJUicsIFRydWUpOgorICAgICAgICAgICAgICAgIHNyY2RpciA9IG9zLnBhdGguam9pbih3b3JrZGlyLCAnZ2l0JykKKyAgICAgICAgICAgICAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsLXlvY3RvJywgcmQpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignUyA9PSBTVEFHSU5HX0tFUk5FTF9ESVIgYW5kIG5vbi1rZXJuZWwteW9jdG8sIHVuYWJsZSB0byBkZXRlcm1pbmUgcGF0aCB0byBzcmNkaXIsIGRlZmF1bHRpbmcgdG8gJHtXT1JLRElSfS9naXQnKQorICAgICAgICAgICAgc3JjX2Rlc3RkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5yZWxwYXRoKHNyY2Rpciwgd29ya2RpciksIHNyY19kZXN0ZGlyKQorICAgICAgICBzcmNfZGVzdGRpciA9IG9zLnBhdGgubm9ybXBhdGgoc3JjX2Rlc3RkaXIpCisKKyAgICAgICAgc291cmNlX3VyaSA9ICdmaWxlOi8vezB9Jy5mb3JtYXQob3MucGF0aC5iYXNlbmFtZShzcmNmaWxlKSkKKyAgICAgICAgaWYgc3JjX2Rlc3RkaXIgYW5kIHNyY19kZXN0ZGlyICE9ICcuJzoKKyAgICAgICAgICAgIHNvdXJjZV91cmkgKz0gJztzdWJkaXI9ezB9Jy5mb3JtYXQoc3JjX2Rlc3RkaXIpCisKKyAgICAgICAgc2ltcGxlID0gYmIuZmV0Y2guVVJJKHNvdXJjZV91cmkpCisgICAgICAgIHNpbXBsZS5wYXJhbXMgPSB7fQorICAgICAgICBzaW1wbGVfc3RyID0gc3RyKHNpbXBsZSkKKyAgICAgICAgaWYgc2ltcGxlX3N0ciBpbiBzaW1wbGlmaWVkOgorICAgICAgICAgICAgZXhpc3RpbmcgPSBzaW1wbGlmaWVkW3NpbXBsZV9zdHJdCisgICAgICAgICAgICBpZiBzb3VyY2VfdXJpICE9IGV4aXN0aW5nOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCd7MCFyfSBpcyBhbHJlYWR5IGluIFNSQ19VUkksIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlcnM6IHsxIXJ9LCBub3QgYWRkaW5nJy5mb3JtYXQoc291cmNlX3VyaSwgZXhpc3RpbmcpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybignezAhcn0gaXMgYWxyZWFkeSBpbiBTUkNfVVJJLCBub3QgYWRkaW5nJy5mb3JtYXQoc291cmNlX3VyaSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleHRyYWxpbmVzLmFwcGVuZCgnU1JDX1VSSSArPSB7MH0nLmZvcm1hdChzb3VyY2VfdXJpKSkKKyAgICAgICAgY29weWZpbGVzW25ld2ZpbGVdID0gc3JjZmlsZQorCisgICAgb2UucmVjaXBldXRpbHMuYmJhcHBlbmRfcmVjaXBlKHJkLCBhcmdzLmRlc3RsYXllciwgY29weWZpbGVzLCBOb25lLCB3aWxkY2FyZHZlcj1hcmdzLndpbGRjYXJkX3ZlcnNpb24sIG1hY2hpbmU9YXJncy5tYWNoaW5lLCBleHRyYWxpbmVzPWV4dHJhbGluZXMpCisKKworZGVmIGFwcGVuZHNyY2ZpbGVzKHBhcnNlciwgYXJncyk6CisgICAgcmVjaXBlZGF0YSA9IF9wYXJzZV9yZWNpcGUoYXJncy5yZWNpcGUsIHRpbmZvaWwpCisgICAgaWYgbm90IHJlY2lwZWRhdGE6CisgICAgICAgIHBhcnNlci5lcnJvcignUkVDSVBFIG11c3QgYmUgYSB2YWxpZCByZWNpcGUgbmFtZScpCisKKyAgICBmaWxlcyA9IGRpY3QoKGYsIG9zLnBhdGguam9pbihhcmdzLmRlc3RkaXIsIG9zLnBhdGguYmFzZW5hbWUoZikpKQorICAgICAgICAgICAgICAgICBmb3IgZiBpbiBhcmdzLmZpbGVzKQorICAgIHJldHVybiBhcHBlbmRzcmMoYXJncywgZmlsZXMsIHJlY2lwZWRhdGEpCisKKworZGVmIGFwcGVuZHNyY2ZpbGUocGFyc2VyLCBhcmdzKToKKyAgICByZWNpcGVkYXRhID0gX3BhcnNlX3JlY2lwZShhcmdzLnJlY2lwZSwgdGluZm9pbCkKKyAgICBpZiBub3QgcmVjaXBlZGF0YToKKyAgICAgICAgcGFyc2VyLmVycm9yKCdSRUNJUEUgbXVzdCBiZSBhIHZhbGlkIHJlY2lwZSBuYW1lJykKKworICAgIGlmIG5vdCBhcmdzLmRlc3RmaWxlOgorICAgICAgICBhcmdzLmRlc3RmaWxlID0gb3MucGF0aC5iYXNlbmFtZShhcmdzLmZpbGUpCisgICAgZWxpZiBhcmdzLmRlc3RmaWxlLmVuZHN3aXRoKCcvJyk6CisgICAgICAgIGFyZ3MuZGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4oYXJncy5kZXN0ZmlsZSwgb3MucGF0aC5iYXNlbmFtZShhcmdzLmZpbGUpKQorCisgICAgcmV0dXJuIGFwcGVuZHNyYyhhcmdzLCB7YXJncy5maWxlOiBhcmdzLmRlc3RmaWxlfSwgcmVjaXBlZGF0YSkKKworCitkZWYgbGF5ZXIobGF5ZXJwYXRoKToKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGxheWVycGF0aCwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKToKKyAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoJ3swIXJ9IG11c3QgYmUgYSBwYXRoIHRvIGEgdmFsaWQgbGF5ZXInLmZvcm1hdChsYXllcnBhdGgpKQorICAgIHJldHVybiBsYXllcnBhdGgKKworCitkZWYgZXhpc3RpbmdfcGF0aChmaWxlcGF0aCk6CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVwYXRoKToKKyAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoJ3swIXJ9IG11c3QgYmUgYW4gZXhpc3RpbmcgcGF0aCcuZm9ybWF0KGZpbGVwYXRoKSkKKyAgICByZXR1cm4gZmlsZXBhdGgKKworCitkZWYgZXhpc3RpbmdfZmlsZShmaWxlcGF0aCk6CisgICAgZmlsZXBhdGggPSBleGlzdGluZ19wYXRoKGZpbGVwYXRoKQorICAgIGlmIG9zLnBhdGguaXNkaXIoZmlsZXBhdGgpOgorICAgICAgICByYWlzZSBhcmdwYXJzZS5Bcmd1bWVudFR5cGVFcnJvcignezAhcn0gbXVzdCBiZSBhIGZpbGUsIG5vdCBhIGRpcmVjdG9yeScuZm9ybWF0KGZpbGVwYXRoKSkKKyAgICByZXR1cm4gZmlsZXBhdGgKKworCitkZWYgZGVzdGluYXRpb25fcGF0aChkZXN0cGF0aCk6CisgICAgaWYgb3MucGF0aC5pc2FicyhkZXN0cGF0aCk6CisgICAgICAgIHJhaXNlIGFyZ3BhcnNlLkFyZ3VtZW50VHlwZUVycm9yKCd7MCFyfSBtdXN0IGJlIGEgcmVsYXRpdmUgcGF0aCwgbm90IGFic29sdXRlJy5mb3JtYXQoZGVzdHBhdGgpKQorICAgIHJldHVybiBkZXN0cGF0aAorCisKK2RlZiB0YXJnZXRfcGF0aCh0YXJnZXRwYXRoKToKKyAgICBpZiBub3Qgb3MucGF0aC5pc2Ficyh0YXJnZXRwYXRoKToKKyAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoJ3swIXJ9IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aCwgbm90IHJlbGF0aXZlJy5mb3JtYXQodGFyZ2V0cGF0aCkpCisgICAgcmV0dXJuIHRhcmdldHBhdGgKKworCitkZWYgcmVnaXN0ZXJfY29tbWFuZChzdWJwYXJzZXJzKToKKyAgICBjb21tb24gPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKKyAgICBjb21tb24uYWRkX2FyZ3VtZW50KCctbScsICctLW1hY2hpbmUnLCBoZWxwPSdNYWtlIGJiYXBwZW5kIGNoYW5nZXMgc3BlY2lmaWMgdG8gYSBtYWNoaW5lIG9ubHknLCBtZXRhdmFyPSdNQUNISU5FJykKKyAgICBjb21tb24uYWRkX2FyZ3VtZW50KCctdycsICctLXdpbGRjYXJkLXZlcnNpb24nLCBoZWxwPSdVc2Ugd2lsZGNhcmQgdG8gbWFrZSB0aGUgYmJhcHBlbmQgYXBwbHkgdG8gYW55IHJlY2lwZSB2ZXJzaW9uJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBjb21tb24uYWRkX2FyZ3VtZW50KCdkZXN0bGF5ZXInLCBtZXRhdmFyPSdERVNUTEFZRVInLCBoZWxwPSdCYXNlIGRpcmVjdG9yeSBvZiB0aGUgZGVzdGluYXRpb24gbGF5ZXIgdG8gd3JpdGUgdGhlIGJiYXBwZW5kIHRvJywgdHlwZT1sYXllcikKKworICAgIHBhcnNlcl9hcHBlbmRmaWxlID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdhcHBlbmRmaWxlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRzPVtjb21tb25dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NyZWF0ZS91cGRhdGUgYSBiYmFwcGVuZCB0byByZXBsYWNlIGEgdGFyZ2V0IGZpbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdDcmVhdGVzIGEgYmJhcHBlbmQgKG9yIHVwZGF0ZXMgYW4gZXhpc3Rpbmcgb25lKSB0byByZXBsYWNlIHRoZSBzcGVjaWZpZWQgZmlsZSB0aGF0IGFwcGVhcnMgaW4gdGhlIHRhcmdldCBzeXN0ZW0sIGRldGVybWluaW5nIHRoZSByZWNpcGUgdGhhdCBwYWNrYWdlcyB0aGUgZmlsZSBhbmQgdGhlIHJlcXVpcmVkIHBhdGggYW5kIG5hbWUgZm9yIHRoZSBiYmFwcGVuZCBhdXRvbWF0aWNhbGx5LiBOb3RlIHRoYXQgdGhlIGFiaWxpdHkgdG8gZGV0ZXJtaW5lIHRoZSByZWNpcGUgcGFja2FnaW5nIGEgcGFydGljdWxhciBmaWxlIGRlcGVuZHMgdXBvbiB0aGUgcmVjaXBlXCdzIGRvX3BhY2thZ2VkYXRhIHRhc2sgaGF2aW5nIGFscmVhZHkgcnVuIHByaW9yIHRvIHJ1bm5pbmcgdGhpcyBjb21tYW5kICh3aGljaCBpdCB3aWxsIGhhdmUgd2hlbiB0aGUgcmVjaXBlIGhhcyBiZWVuIGJ1aWx0IHN1Y2Nlc3NmdWxseSwgd2hpY2ggaW4gdHVybiB3aWxsIGhhdmUgaGFwcGVuZWQgaWYgb25lIG9yIG1vcmUgb2YgdGhlIHJlY2lwZVwncyBwYWNrYWdlcyBpcyBpbmNsdWRlZCBpbiBhbiBpbWFnZSB0aGF0IGhhcyBiZWVuIGJ1aWx0IHN1Y2Nlc3NmdWxseSkuJykKKyAgICBwYXJzZXJfYXBwZW5kZmlsZS5hZGRfYXJndW1lbnQoJ3RhcmdldHBhdGgnLCBoZWxwPSdQYXRoIHRvIHRoZSBmaWxlIHRvIGJlIHJlcGxhY2VkIChhcyBpdCB3b3VsZCBhcHBlYXIgd2l0aGluIHRoZSB0YXJnZXQgaW1hZ2UsIGUuZy4gL2V0Yy9tb3RkKScsIHR5cGU9dGFyZ2V0X3BhdGgpCisgICAgcGFyc2VyX2FwcGVuZGZpbGUuYWRkX2FyZ3VtZW50KCduZXdmaWxlJywgaGVscD0nQ3VzdG9tIGZpbGUgdG8gcmVwbGFjZSB0aGUgdGFyZ2V0IGZpbGUgd2l0aCcsIHR5cGU9ZXhpc3RpbmdfZmlsZSkKKyAgICBwYXJzZXJfYXBwZW5kZmlsZS5hZGRfYXJndW1lbnQoJy1yJywgJy0tcmVjaXBlJywgaGVscD0nT3ZlcnJpZGUgcmVjaXBlIHRvIGFwcGx5IHRvIChkZWZhdWx0IGlzIHRvIGZpbmQgd2hpY2ggcmVjaXBlIGFscmVhZHkgcGFja2FnZXMgdGhlIGZpbGUpJykKKyAgICBwYXJzZXJfYXBwZW5kZmlsZS5zZXRfZGVmYXVsdHMoZnVuYz1hcHBlbmRmaWxlLCBwYXJzZXJlY2lwZXM9VHJ1ZSkKKworICAgIGNvbW1vbl9zcmMgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSwgcGFyZW50cz1bY29tbW9uXSkKKyAgICBjb21tb25fc3JjLmFkZF9hcmd1bWVudCgnLVcnLCAnLS13b3JrZGlyJywgaGVscD0nVW5wYWNrIGZpbGUgaW50byBXT1JLRElSIHJhdGhlciB0aGFuIFMnLCBkZXN0PSd1c2Vfd29ya2RpcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgY29tbW9uX3NyYy5hZGRfYXJndW1lbnQoJ3JlY2lwZScsIG1ldGF2YXI9J1JFQ0lQRScsIGhlbHA9J092ZXJyaWRlIHJlY2lwZSB0byBhcHBseSB0bycpCisKKyAgICBwYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2FwcGVuZHNyY2ZpbGVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50cz1bY29tbW9uX3NyY10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NyZWF0ZS91cGRhdGUgYSBiYmFwcGVuZCB0byBhZGQgb3IgcmVwbGFjZSBzb3VyY2UgZmlsZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nQ3JlYXRlcyBhIGJiYXBwZW5kIChvciB1cGRhdGVzIGFuIGV4aXN0aW5nIG9uZSkgdG8gYWRkIG9yIHJlcGxhY2UgdGhlIHNwZWNpZmllZCBmaWxlIGluIHRoZSByZWNpcGUgc291cmNlcywgZWl0aGVyIHRob3NlIGluIFdPUktESVIgb3IgdGhvc2UgaW4gdGhlIHNvdXJjZSB0cmVlLiBUaGlzIGNvbW1hbmQgbGV0cyB5b3Ugc3BlY2lmeSBtdWx0aXBsZSBmaWxlcyB3aXRoIGEgZGVzdGluYXRpb24gZGlyZWN0b3J5LCBzbyBjYW5ub3Qgc3BlY2lmeSB0aGUgZGVzdGluYXRpb24gZmlsZW5hbWUuIFNlZSB0aGUgYGFwcGVuZHNyY2ZpbGVgIGNvbW1hbmQgZm9yIHRoZSBvdGhlciBiZWhhdmlvci4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1EJywgJy0tZGVzdGRpcicsIGhlbHA9J0Rlc3RpbmF0aW9uIGRpcmVjdG9yeSAocmVsYXRpdmUgdG8gUyBvciBXT1JLRElSLCBkZWZhdWx0cyB0byAiLiIpJywgZGVmYXVsdD0nJywgdHlwZT1kZXN0aW5hdGlvbl9wYXRoKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZpbGVzJywgbmFyZ3M9JysnLCBtZXRhdmFyPSdGSUxFJywgaGVscD0nRmlsZShzKSB0byBiZSBhZGRlZCB0byB0aGUgcmVjaXBlIHNvdXJjZXMgKFdPUktESVIgb3IgUyknLCB0eXBlPWV4aXN0aW5nX3BhdGgpCisgICAgcGFyc2VyLnNldF9kZWZhdWx0cyhmdW5jPWxhbWJkYSBhOiBhcHBlbmRzcmNmaWxlcyhwYXJzZXIsIGEpLCBwYXJzZXJlY2lwZXM9VHJ1ZSkKKworICAgIHBhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYXBwZW5kc3JjZmlsZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudHM9W2NvbW1vbl9zcmNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdDcmVhdGUvdXBkYXRlIGEgYmJhcHBlbmQgdG8gYWRkIG9yIHJlcGxhY2UgYSBzb3VyY2UgZmlsZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdDcmVhdGVzIGEgYmJhcHBlbmQgKG9yIHVwZGF0ZXMgYW4gZXhpc3Rpbmcgb25lKSB0byBhZGQgb3IgcmVwbGFjZSB0aGUgc3BlY2lmaWVkIGZpbGVzIGluIHRoZSByZWNpcGUgc291cmNlcywgZWl0aGVyIHRob3NlIGluIFdPUktESVIgb3IgdGhvc2UgaW4gdGhlIHNvdXJjZSB0cmVlLiBUaGlzIGNvbW1hbmQgbGV0cyB5b3Ugc3BlY2lmeSB0aGUgZGVzdGluYXRpb24gZmlsZW5hbWUsIG5vdCBqdXN0IGRlc3RpbmF0aW9uIGRpcmVjdG9yeSwgYnV0IG9ubHkgd29ya3MgZm9yIG9uZSBmaWxlLiBTZWUgdGhlIGBhcHBlbmRzcmNmaWxlc2AgY29tbWFuZCBmb3IgdGhlIG90aGVyIGJlaGF2aW9yLicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnZmlsZScsIG1ldGF2YXI9J0ZJTEUnLCBoZWxwPSdGaWxlIHRvIGJlIGFkZGVkIHRvIHRoZSByZWNpcGUgc291cmNlcyAoV09SS0RJUiBvciBTKScsIHR5cGU9ZXhpc3RpbmdfcGF0aCkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdkZXN0ZmlsZScsIG1ldGF2YXI9J0RFU1RGSUxFJywgbmFyZ3M9Jz8nLCBoZWxwPSdEZXN0aW5hdGlvbiBwYXRoIChyZWxhdGl2ZSB0byBTIG9yIFdPUktESVIsIG9wdGlvbmFsKScsIHR5cGU9ZGVzdGluYXRpb25fcGF0aCkKKyAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKGZ1bmM9bGFtYmRhIGE6IGFwcGVuZHNyY2ZpbGUocGFyc2VyLCBhKSwgcGFyc2VyZWNpcGVzPVRydWUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDc1NGRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZS5weQpAQCAtMCwwICsxLDQxMiBAQAorIyBSZWNpcGUgY3JlYXRpb24gdG9vbCAtIGNyZWF0ZSBjb21tYW5kIHBsdWdpbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBnbG9iCitpbXBvcnQgZm5tYXRjaAoraW1wb3J0IHJlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHNjcmlwdHV0aWxzCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdyZWNpcGV0b29sJykKKwordGluZm9pbCA9IE5vbmUKK3BsdWdpbnMgPSBOb25lCisKK2RlZiBwbHVnaW5faW5pdChwbHVnaW5saXN0KToKKyAgICAjIFRha2UgYSByZWZlcmVuY2UgdG8gdGhlIGxpc3Qgc28gd2UgY2FuIHVzZSBpdCBsYXRlcgorICAgIGdsb2JhbCBwbHVnaW5zCisgICAgcGx1Z2lucyA9IHBsdWdpbmxpc3QKKworZGVmIHRpbmZvaWxfaW5pdChpbnN0YW5jZSk6CisgICAgZ2xvYmFsIHRpbmZvaWwKKyAgICB0aW5mb2lsID0gaW5zdGFuY2UKKworY2xhc3MgUmVjaXBlSGFuZGxlcigpOgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY2hlY2tmaWxlcyhwYXRoLCBzcGVjbGlzdCk6CisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICBmb3Igc3BlYyBpbiBzcGVjbGlzdDoKKyAgICAgICAgICAgIHJlc3VsdHMuZXh0ZW5kKGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4ocGF0aCwgc3BlYykpKQorICAgICAgICByZXR1cm4gcmVzdWx0cworCisgICAgZGVmIGdlbmZ1bmN0aW9uKHNlbGYsIG91dGxpbmVzLCBmdW5jbmFtZSwgY29udGVudCk6CisgICAgICAgIG91dGxpbmVzLmFwcGVuZCgnJXMgKCkgeycgJSBmdW5jbmFtZSkKKyAgICAgICAgZm9yIGxpbmUgaW4gY29udGVudDoKKyAgICAgICAgICAgIG91dGxpbmVzLmFwcGVuZCgnXHQlcycgJSBsaW5lKQorICAgICAgICBvdXRsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICBvdXRsaW5lcy5hcHBlbmQoJycpCisKKyAgICBkZWYgcHJvY2VzcyhzZWxmLCBzcmN0cmVlLCBjbGFzc2VzLCBsaW5lc19iZWZvcmUsIGxpbmVzX2FmdGVyLCBoYW5kbGVkKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworCitkZWYgc3VwcG9ydHNfc3JjcmV2KHVyaSk6CisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KHRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgIyBUaGlzIGlzIGEgYml0IHNhZCwgYnV0IGlmIHlvdSBkb24ndCBoYXZlIHRoaXMgc2V0IHRoZXJlIGNhbiBiZSBzb21lCisgICAgIyBvZGQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVybGRhdGEgY2FjaGUgd2hpY2ggbGVhZCB0byBlcnJvcnMKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdTUkNSRVYnLCAnJHtBVVRPUkVWfScpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbdXJpXSwgbG9jYWxkYXRhKQorICAgIHVybGRhdGEgPSBmZXRjaGVyLnVkCisgICAgZm9yIHUgaW4gdXJsZGF0YToKKyAgICAgICAgaWYgdXJsZGF0YVt1XS5tZXRob2Quc3VwcG9ydHNfc3JjcmV2KCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCitkZWYgY3JlYXRlX3JlY2lwZShhcmdzKToKKyAgICBpbXBvcnQgYmIucHJvY2VzcworICAgIGltcG9ydCB0ZW1wZmlsZQorICAgIGltcG9ydCBzaHV0aWwKKworICAgIHBrZ2FyY2ggPSAiIgorICAgIGlmIGFyZ3MubWFjaGluZToKKyAgICAgICAgcGtnYXJjaCA9ICIke01BQ0hJTkVfQVJDSH0iCisKKyAgICBjaGVja3N1bXMgPSAoTm9uZSwgTm9uZSkKKyAgICB0ZW1wc3JjID0gJycKKyAgICBzcmNzdWJkaXIgPSAnJworICAgIHNyY3JldiA9ICcke0FVVE9SRVZ9JworICAgIGlmICc6Ly8nIGluIGFyZ3Muc291cmNlOgorICAgICAgICAjIEZldGNoIGEgVVJMCisgICAgICAgIHNyY3VyaSA9IGFyZ3Muc291cmNlCisgICAgICAgIHJldl9yZSA9IHJlLmNvbXBpbGUoJztyZXY9KFteO10rKScpCisgICAgICAgIHJlcyA9IHJldl9yZS5zZWFyY2goc3JjdXJpKQorICAgICAgICBpZiByZXM6CisgICAgICAgICAgICBzcmNyZXYgPSByZXMuZ3JvdXAoMSkKKyAgICAgICAgICAgIHNyY3VyaSA9IHJldl9yZS5zdWIoJycsIHNyY3VyaSkKKyAgICAgICAgdGVtcHNyYyA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdyZWNpcGV0b29sLScpCisgICAgICAgIHNyY3RyZWUgPSB0ZW1wc3JjCisgICAgICAgIGxvZ2dlci5pbmZvKCdGZXRjaGluZyAlcy4uLicgJSBzcmN1cmkpCisgICAgICAgIGNoZWNrc3VtcyA9IHNjcmlwdHV0aWxzLmZldGNoX3VyaSh0aW5mb2lsLmNvbmZpZ19kYXRhLCBhcmdzLnNvdXJjZSwgc3JjdHJlZSwgc3JjcmV2KQorICAgICAgICBkaXJsaXN0ID0gb3MubGlzdGRpcihzcmN0cmVlKQorICAgICAgICBpZiAnZ2l0LmluZGlyZWN0aW9uc3ltbGluaycgaW4gZGlybGlzdDoKKyAgICAgICAgICAgIGRpcmxpc3QucmVtb3ZlKCdnaXQuaW5kaXJlY3Rpb25zeW1saW5rJykKKyAgICAgICAgaWYgbGVuKGRpcmxpc3QpID09IDEgYW5kIG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHNyY3RyZWUsIGRpcmxpc3RbMF0pKToKKyAgICAgICAgICAgICMgV2UgdW5wYWNrZWQgYSBzaW5nbGUgZGlyZWN0b3J5LCBzbyB3ZSBzaG91bGQgdXNlIHRoYXQKKyAgICAgICAgICAgIHNyY3N1YmRpciA9IGRpcmxpc3RbMF0KKyAgICAgICAgICAgIHNyY3RyZWUgPSBvcy5wYXRoLmpvaW4oc3JjdHJlZSwgc3Jjc3ViZGlyKQorICAgIGVsc2U6CisgICAgICAgICMgQXNzdW1lIHdlJ3JlIHBvaW50aW5nIHRvIGFuIGV4aXN0aW5nIHNvdXJjZSB0cmVlCisgICAgICAgIGlmIGFyZ3MuZXh0cmFjdF90bzoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignLS1leHRyYWN0LXRvIGNhbm5vdCBiZSBzcGVjaWZpZWQgaWYgc291cmNlIGlzIGEgZGlyZWN0b3J5JykKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGFyZ3Muc291cmNlKToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBzb3VyY2UgZGlyZWN0b3J5ICVzJyAlIGFyZ3Muc291cmNlKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgc3JjdXJpID0gJycKKyAgICAgICAgc3JjdHJlZSA9IGFyZ3Muc291cmNlCisKKyAgICBvdXRmaWxlID0gYXJncy5vdXRmaWxlCisgICAgaWYgb3V0ZmlsZSBhbmQgb3V0ZmlsZSAhPSAnLSc6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG91dGZpbGUpOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdPdXRwdXQgZmlsZSAlcyBhbHJlYWR5IGV4aXN0cycgJSBvdXRmaWxlKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGxpbmVzX2JlZm9yZSA9IFtdCisgICAgbGluZXNfYWZ0ZXIgPSBbXQorCisgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBSZWNpcGUgY3JlYXRlZCBieSAlcycgJSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKSkKKyAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIFRoaXMgaXMgdGhlIGJhc2lzIG9mIGEgcmVjaXBlIGFuZCBtYXkgbmVlZCBmdXJ0aGVyIGVkaXRpbmcgaW4gb3JkZXIgdG8gYmUgZnVsbHkgZnVuY3Rpb25hbC4nKQorICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgKEZlZWwgZnJlZSB0byByZW1vdmUgdGhlc2UgY29tbWVudHMgd2hlbiBlZGl0aW5nLiknKQorICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMnKQorCisgICAgbGljdmFsdWVzID0gZ3Vlc3NfbGljZW5zZShzcmN0cmVlKQorICAgIGxpY19maWxlc19jaGtzdW0gPSBbXQorICAgIGlmIGxpY3ZhbHVlczoKKyAgICAgICAgbGljZW5zZXMgPSBbXQorICAgICAgICBmb3IgbGljdmFsdWUgaW4gbGljdmFsdWVzOgorICAgICAgICAgICAgaWYgbm90IGxpY3ZhbHVlWzBdIGluIGxpY2Vuc2VzOgorICAgICAgICAgICAgICAgIGxpY2Vuc2VzLmFwcGVuZChsaWN2YWx1ZVswXSkKKyAgICAgICAgICAgIGxpY19maWxlc19jaGtzdW0uYXBwZW5kKCdmaWxlOi8vJXM7bWQ1PSVzJyAlIChsaWN2YWx1ZVsxXSwgbGljdmFsdWVbMl0pKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIFdBUk5JTkc6IHRoZSBmb2xsb3dpbmcgTElDRU5TRSBhbmQgTElDX0ZJTEVTX0NIS1NVTSB2YWx1ZXMgYXJlIGJlc3QgZ3Vlc3NlcyAtIGl0IGlzJykKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSB2YWx1ZXMgYXJlIGNvbXBsZXRlIGFuZCBjb3JyZWN0LicpCisgICAgICAgIGlmIGxlbihsaWN2YWx1ZXMpID4gMToKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMnKQorICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBOT1RFOiBtdWx0aXBsZSBsaWNlbnNlcyBoYXZlIGJlZW4gZGV0ZWN0ZWQ7IGlmIHRoYXQgaXMgY29ycmVjdCB5b3Ugc2hvdWxkIHNlcGFyYXRlJykKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgdGhlc2UgaW4gdGhlIExJQ0VOU0UgdmFsdWUgdXNpbmcgJiBpZiB0aGUgbXVsdGlwbGUgbGljZW5zZXMgYWxsIGFwcGx5LCBvciB8IGlmIHRoZXJlJykKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgaXMgYSBjaG9pY2UgYmV0d2VlbiB0aGUgbXVsdGlwbGUgbGljZW5zZXMuIElmIGluIGRvdWJ0LCBjaGVjayB0aGUgYWNjb21wYW55aW5nJykKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgZG9jdW1lbnRhdGlvbiB0byBkZXRlcm1pbmUgd2hpY2ggc2l0dWF0aW9uIGlzIGFwcGxpY2FibGUuJykKKyAgICBlbHNlOgorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIFVuYWJsZSB0byBmaW5kIGFueSBmaWxlcyB0aGF0IGxvb2tlZCBsaWtlIGxpY2Vuc2Ugc3RhdGVtZW50cy4gQ2hlY2sgdGhlIGFjY29tcGFueWluZycpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGhlYWRlcnMgYW5kIHNldCBMSUNFTlNFIGFuZCBMSUNfRklMRVNfQ0hLU1VNIGFjY29yZGluZ2x5LicpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMnKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIE5PVEU6IExJQ0VOU0UgaXMgYmVpbmcgc2V0IHRvICJDTE9TRUQiIHRvIGFsbG93IHlvdSB0byBhdCBsZWFzdCBzdGFydCBidWlsZGluZyAtIGlmJykKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyB0aGlzIGlzIG5vdCBhY2N1cmF0ZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGxpY2Vuc2luZyBvZiB0aGUgc29mdHdhcmUgYmVpbmcgYnVpbHQgKGl0JykKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyB3aWxsIG5vdCBiZSBpbiBtb3N0IGNhc2VzKSB5b3UgbXVzdCBzcGVjaWZ5IHRoZSBjb3JyZWN0IHZhbHVlIGJlZm9yZSB1c2luZyB0aGlzJykKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyByZWNpcGUgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gaW5pdGlhbCB0ZXN0aW5nL2RldmVsb3BtZW50IScpCisgICAgICAgIGxpY2Vuc2VzID0gWydDTE9TRUQnXQorICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ0xJQ0VOU0UgPSAiJXMiJyAlICcgJy5qb2luKGxpY2Vuc2VzKSkKKyAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdMSUNfRklMRVNfQ0hLU1VNID0gIiVzIicgJSAnIFxcXG4gICAgICAgICAgICAgICAgICAgICcuam9pbihsaWNfZmlsZXNfY2hrc3VtKSkKKyAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcnKQorCisgICAgIyBGSVhNRSBUaGlzIGlzIGtpbmQgb2YgYSBoYWNrLCB3ZSBwcm9iYWJseSBvdWdodCB0byBiZSB1c2luZyBiaXRiYWtlIHRvIGRvIHRoaXMKKyAgICAjIHdlJ2QgYWxzbyB3YW50IGEgd2F5IHRvIGF1dG9tYXRpY2FsbHkgc2V0IG91dGZpbGUgYmFzZWQgdXBvbiBhdXRvLWRldGVjdGluZyB0aGVzZSB2YWx1ZXMgZnJvbSB0aGUgc291cmNlIGlmIHBvc3NpYmxlCisgICAgcmVjaXBlZm4gPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUob3V0ZmlsZSkpWzBdCisgICAgZm5zcGxpdCA9IHJlY2lwZWZuLnNwbGl0KCdfJykKKyAgICBpZiBsZW4oZm5zcGxpdCkgPiAxOgorICAgICAgICBwbiA9IGZuc3BsaXRbMF0KKyAgICAgICAgcHYgPSBmbnNwbGl0WzFdCisgICAgZWxzZToKKyAgICAgICAgcG4gPSByZWNpcGVmbgorICAgICAgICBwdiA9IE5vbmUKKworICAgIGlmIGFyZ3MudmVyc2lvbjoKKyAgICAgICAgcHYgPSBhcmdzLnZlcnNpb24KKworICAgIGlmIHB2IGFuZCBwdiBub3QgaW4gJ2dpdCBzdm4gaGcnLnNwbGl0KCk6CisgICAgICAgIHJlYWxwdiA9IHB2CisgICAgZWxzZToKKyAgICAgICAgcmVhbHB2ID0gTm9uZQorCisgICAgaWYgc3JjdXJpOgorICAgICAgICBpZiByZWFscHY6CisgICAgICAgICAgICBzcmN1cmkgPSBzcmN1cmkucmVwbGFjZShyZWFscHYsICcke1BWfScpCisgICAgZWxzZToKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBObyBpbmZvcm1hdGlvbiBmb3IgU1JDX1VSSSB5ZXQgKG9ubHkgYW4gZXh0ZXJuYWwgc291cmNlIHRyZWUgd2FzIHNwZWNpZmllZCknKQorICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ1NSQ19VUkkgPSAiJXMiJyAlIHNyY3VyaSkKKyAgICAobWQ1dmFsdWUsIHNoYTI1NnZhbHVlKSA9IGNoZWNrc3VtcworICAgIGlmIG1kNXZhbHVlOgorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdTUkNfVVJJW21kNXN1bV0gPSAiJXMiJyAlIG1kNXZhbHVlKQorICAgIGlmIHNoYTI1NnZhbHVlOgorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdTUkNfVVJJW3NoYTI1NnN1bV0gPSAiJXMiJyAlIHNoYTI1NnZhbHVlKQorICAgIGlmIHNyY3VyaSBhbmQgc3VwcG9ydHNfc3JjcmV2KHNyY3VyaSk6CisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgTW9kaWZ5IHRoZXNlIGFzIGRlc2lyZWQnKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdQViA9ICIlcytnaXQke1NSQ1BWfSInICUgKHJlYWxwdiBvciAnMS4wJykpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ1NSQ1JFViA9ICIlcyInICUgc3JjcmV2KQorICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJycpCisKKyAgICBpZiBzcmNzdWJkaXIgYW5kIHB2OgorICAgICAgICBpZiBzcmNzdWJkaXIgPT0gIiVzLSVzIiAlIChwbiwgcHYpOgorICAgICAgICAgICAgIyBUaGlzIHdvdWxkIGJlIHRoZSBkZWZhdWx0LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHNldCBTIGluIHRoZSByZWNpcGUKKyAgICAgICAgICAgIHNyY3N1YmRpciA9ICcnCisgICAgaWYgc3Jjc3ViZGlyOgorICAgICAgICBpZiBwdiBhbmQgcHYgbm90IGluICdnaXQgc3ZuIGhnJy5zcGxpdCgpOgorICAgICAgICAgICAgc3Jjc3ViZGlyID0gc3Jjc3ViZGlyLnJlcGxhY2UocHYsICcke1BWfScpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ1MgPSAiJHtXT1JLRElSfS8lcyInICUgc3Jjc3ViZGlyKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcnKQorCisgICAgaWYgcGtnYXJjaDoKKyAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCdQQUNLQUdFX0FSQ0ggPSAiJXMiJyAlIHBrZ2FyY2gpCisgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnJykKKworICAgICMgRmluZCBhbGwgcGx1Z2lucyB0aGF0IHdhbnQgdG8gcmVnaXN0ZXIgaGFuZGxlcnMKKyAgICBoYW5kbGVycyA9IFtdCisgICAgZm9yIHBsdWdpbiBpbiBwbHVnaW5zOgorICAgICAgICBpZiBoYXNhdHRyKHBsdWdpbiwgJ3JlZ2lzdGVyX3JlY2lwZV9oYW5kbGVycycpOgorICAgICAgICAgICAgcGx1Z2luLnJlZ2lzdGVyX3JlY2lwZV9oYW5kbGVycyhoYW5kbGVycykKKworICAgICMgQXBwbHkgdGhlIGhhbmRsZXJzCisgICAgY2xhc3NlcyA9IFtdCisgICAgaGFuZGxlZCA9IFtdCisgICAgZm9yIGhhbmRsZXIgaW4gaGFuZGxlcnM6CisgICAgICAgIGhhbmRsZXIucHJvY2VzcyhzcmN0cmVlLCBjbGFzc2VzLCBsaW5lc19iZWZvcmUsIGxpbmVzX2FmdGVyLCBoYW5kbGVkKQorCisgICAgb3V0bGluZXMgPSBbXQorICAgIG91dGxpbmVzLmV4dGVuZChsaW5lc19iZWZvcmUpCisgICAgaWYgY2xhc3NlczoKKyAgICAgICAgb3V0bGluZXMuYXBwZW5kKCdpbmhlcml0ICVzJyAlICcgJy5qb2luKGNsYXNzZXMpKQorICAgICAgICBvdXRsaW5lcy5hcHBlbmQoJycpCisgICAgb3V0bGluZXMuZXh0ZW5kKGxpbmVzX2FmdGVyKQorCisgICAgaWYgYXJncy5leHRyYWN0X3RvOgorICAgICAgICBzY3JpcHR1dGlscy5naXRfY29udmVydF9zdGFuZGFsb25lX2Nsb25lKHNyY3RyZWUpCisgICAgICAgIHNodXRpbC5tb3ZlKHNyY3RyZWUsIGFyZ3MuZXh0cmFjdF90bykKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1NvdXJjZSBleHRyYWN0ZWQgdG8gJXMnICUgYXJncy5leHRyYWN0X3RvKQorCisgICAgaWYgb3V0ZmlsZSA9PSAnLSc6CisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuJy5qb2luKG91dGxpbmVzKSArICdcbicpCisgICAgZWxzZToKKyAgICAgICAgd2l0aCBvcGVuKG91dGZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ1xuJy5qb2luKG91dGxpbmVzKSArICdcbicpCisgICAgICAgIGxvZ2dlci5pbmZvKCdSZWNpcGUgJXMgaGFzIGJlZW4gY3JlYXRlZDsgZnVydGhlciBlZGl0aW5nIG1heSBiZSByZXF1aXJlZCB0byBtYWtlIGl0IGZ1bGx5IGZ1bmN0aW9uYWwnICUgb3V0ZmlsZSkKKworICAgIGlmIHRlbXBzcmM6CisgICAgICAgIHNodXRpbC5ybXRyZWUodGVtcHNyYykKKworICAgIHJldHVybiAwCisKK2RlZiBnZXRfbGljZW5zZV9tZDVzdW1zKGQsIHN0YXRpY19vbmx5PUZhbHNlKToKKyAgICBpbXBvcnQgYmIudXRpbHMKKyAgICBtZDVzdW1zID0ge30KKyAgICBpZiBub3Qgc3RhdGljX29ubHk6CisgICAgICAgICMgR2F0aGVyIG1kNXN1bXMgb2YgbGljZW5zZSBmaWxlcyBpbiBjb21tb24gbGljZW5zZSBkaXIKKyAgICAgICAgY29tbW9ubGljZGlyID0gZC5nZXRWYXIoJ0NPTU1PTl9MSUNFTlNFX0RJUicsIFRydWUpCisgICAgICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKGNvbW1vbmxpY2Rpcik6CisgICAgICAgICAgICBtZDV2YWx1ZSA9IGJiLnV0aWxzLm1kNV9maWxlKG9zLnBhdGguam9pbihjb21tb25saWNkaXIsIGZuKSkKKyAgICAgICAgICAgIG1kNXN1bXNbbWQ1dmFsdWVdID0gZm4KKyAgICAjIFRoZSBmb2xsb3dpbmcgd2VyZSBleHRyYWN0ZWQgZnJvbSBjb21tb24gdmFsdWVzIGluIHZhcmlvdXMgcmVjaXBlcworICAgICMgKGRvdWJsZSBjaGVja2luZyB0aGUgbGljZW5zZSBhZ2FpbnN0IHRoZSBsaWNlbnNlIGZpbGUgaXRzZWxmLCBub3QganVzdAorICAgICMgdGhlIExJQ0VOU0UgdmFsdWUgaW4gdGhlIHJlY2lwZSkKKyAgICBtZDVzdW1zWyc5NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJ2IyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzJ10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snNTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTInXSA9ICdHUEx2MicKKyAgICBtZDVzdW1zWycwNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJ2ViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhJ10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snNzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUnXSA9ICdHUEx2MicKKyAgICBtZDVzdW1zWyczOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJzEyZjg4NGQyYWUxZmY4N2MwOWU1YjdjY2MyYzRjYTdlJ10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snOGNhNDNjYmM4NDJjMjMzNmU4MzU5MjZjMjE2NmMyOGInXSA9ICdHUEx2MicKKyAgICBtZDVzdW1zWydlYmI1YzUwYWI3Y2FiNGJhZWZmYmExNDk3NzAzMGMwNyddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJ2M5M2MwNTUwYmQzMTczZjQ1MDRiMmNiZDg5OTFlNTBiJ10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snOWFjMmU3Y2ZmMWRkYWY0OGI2ZWFiNjAyOGYyM2VmODgnXSA9ICdHUEx2MicKKyAgICBtZDVzdW1zWyc0MzI1YWZkMzk2ZmViY2I2NTljMzZiNDk1MzMxMzVkNCddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJzE4ODEwNjY5ZjEzYjg3MzQ4NDU5ZTYxMWQzMWFiNzYwJ10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snZDc4MTBmYWI3NDg3ZmIwYWFkMzI3Yjc2ZjFiZTdjZDcnXSA9ICdHUEx2MicgIyB0aGUgTGludXgga2VybmVsJ3MgQ09QWUlORyBmaWxlCisgICAgbWQ1c3Vtc1snYmJiNDYxMjExYTMzYjEzNGQ0MmVkNWVlODAyYjM3ZmYnXSA9ICdMR1BMdjIuMScKKyAgICBtZDVzdW1zWyc3ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCddID0gJ0xHUEx2Mi4xJworICAgIG1kNXN1bXNbJzRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjJ10gPSAnTEdQTHYyLjEnCisgICAgbWQ1c3Vtc1snMmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEnXSA9ICdMR1BMdjIuMScKKyAgICBtZDVzdW1zWydmYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCddID0gJ0xHUEx2Mi4xJworICAgIG1kNXN1bXNbJ2E2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzJ10gPSAnTEdQTHYyLjEnCisgICAgbWQ1c3Vtc1snZDgwNDVmM2I4ZjkyOWMxY2IyOWExZTNmZDczN2I0OTknXSA9ICdMR1BMdjIuMScKKyAgICBtZDVzdW1zWydmYWQ5YjMzMzJiZTg5NGJhYjliYzUwMTU3Mjg2NGIyOSddID0gJ0xHUEx2Mi4xJworICAgIG1kNXN1bXNbJzNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3J10gPSAnTEdQTHYyJworICAgIG1kNXN1bXNbJzlmNjA0ZDhhNGY4ZTc0ZjRmNTE0MDg0NWEyMWI2Njc0J10gPSAnTEdQTHYyJworICAgIG1kNXN1bXNbJzVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyJ10gPSAnTEdQTHYyJworICAgIG1kNXN1bXNbJzU1Y2E4MTdjY2I3ZDViNWI2NjM1NTY5MGU5YWJjNjA1J10gPSAnTEdQTHYyJworICAgIG1kNXN1bXNbJzI1Mjg5MGQ5ZWVlMjZhYWI3YjQzMmU4YjhhNjE2NDc1J10gPSAnTEdQTHYyJworICAgIG1kNXN1bXNbJ2QzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0J10gPSAnR1BMdjMnCisgICAgbWQ1c3Vtc1snZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDknXSA9ICdHUEx2MycKKyAgICBtZDVzdW1zWyc2YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiddID0gJ0xHUEx2MycKKyAgICBtZDVzdW1zWyczYjgzZWY5NjM4N2YxNDY1NWZjODU0ZGRjM2M2YmQ1NyddID0gJ0FwYWNoZS0yLjAnCisgICAgbWQ1c3Vtc1snMzg1YzU1NjUzODg2YWNhYzM4MjE5OTlhM2NjZDE3YjMnXSA9ICdBcnRpc3RpYy0xLjAgfCBHUEwtMi4wJyAjIHNvbWUgcGVybCBtb2R1bGVzCisgICAgcmV0dXJuIG1kNXN1bXMKKworZGVmIGd1ZXNzX2xpY2Vuc2Uoc3JjdHJlZSk6CisgICAgaW1wb3J0IGJiCisgICAgbWQ1c3VtcyA9IGdldF9saWNlbnNlX21kNXN1bXModGluZm9pbC5jb25maWdfZGF0YSkKKworICAgIGxpY2Vuc2VzID0gW10KKyAgICBsaWNzcGVjcyA9IFsnTElDRU5TRSonLCAnQ09QWUlORyonLCAnKltMbF1pY2Vuc2UqJywgJ0xJQ0VOQ0UqJywgJ0xFR0FMKicsICdbTGxdZWdhbConLCAnKkdQTConLCAnUkVBRE1FLmxpYyonLCAnQ09QWVJJR0hUKicsICdbQ2Ndb3B5cmlnaHQqJ10KKyAgICBsaWNmaWxlcyA9IFtdCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3JjdHJlZSk6CisgICAgICAgIGZvciBmbiBpbiBmaWxlczoKKyAgICAgICAgICAgIGZvciBzcGVjIGluIGxpY3NwZWNzOgorICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChmbiwgc3BlYyk6CisgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsIGZuKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZnVsbHBhdGggaW4gbGljZmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBsaWNmaWxlcy5hcHBlbmQoZnVsbHBhdGgpCisgICAgZm9yIGxpY2ZpbGUgaW4gbGljZmlsZXM6CisgICAgICAgIG1kNXZhbHVlID0gYmIudXRpbHMubWQ1X2ZpbGUobGljZmlsZSkKKyAgICAgICAgbGljZW5zZSA9IG1kNXN1bXMuZ2V0KG1kNXZhbHVlLCAnVW5rbm93bicpCisgICAgICAgIGxpY2Vuc2VzLmFwcGVuZCgobGljZW5zZSwgb3MucGF0aC5yZWxwYXRoKGxpY2ZpbGUsIHNyY3RyZWUpLCBtZDV2YWx1ZSkpCisKKyAgICAjIEZJWE1FIHNob3VsZCB3ZSBncmFiIGF0IGxlYXN0IG9uZSBzb3VyY2UgZmlsZSB3aXRoIGEgbGljZW5zZSBoZWFkZXIgYW5kIGFkZCB0aGF0IHRvbz8KKworICAgIHJldHVybiBsaWNlbnNlcworCitkZWYgcmVhZF9wa2djb25maWdfcHJvdmlkZXMoZCk6CisgICAgcGtnZGF0YWRpciA9IGQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpCisgICAgcGtnbWFwID0ge30KKyAgICBmb3IgZm4gaW4gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihwa2dkYXRhZGlyLCAnc2hsaWJzMicsICcqLnBjbGlzdCcpKToKKyAgICAgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIHBrZ21hcFtvcy5wYXRoLmJhc2VuYW1lKGxpbmUucnN0cmlwKCkpXSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShmbikpWzBdCisgICAgcmVjaXBlbWFwID0ge30KKyAgICBmb3IgcGMsIHBrZyBpbiBwa2dtYXAuaXRlcml0ZW1zKCk6CisgICAgICAgIHBrZ2RhdGFmaWxlID0gb3MucGF0aC5qb2luKHBrZ2RhdGFkaXIsICdydW50aW1lJywgcGtnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwa2dkYXRhZmlsZSk6CisgICAgICAgICAgICB3aXRoIG9wZW4ocGtnZGF0YWZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1BOOiAnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZW1hcFtwY10gPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKQorICAgIHJldHVybiByZWNpcGVtYXAKKworZGVmIGNvbnZlcnRfcGtnaW5mbyhwa2dpbmZvZmlsZSk6CisgICAgdmFsdWVzID0ge30KKyAgICB3aXRoIG9wZW4ocGtnaW5mb2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgaW5kZXNjID0gRmFsc2UKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIGlmIGluZGVzYzoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlc1snREVTQ1JJUFRJT04nXSArPSAnICcgKyBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpbmRlc2MgPSBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnNwbGl0KCc6ICcsIDEpCisgICAgICAgICAgICAgICAga2V5ID0gbGluZVswXQorICAgICAgICAgICAgICAgIHZhbHVlID0gbGluZVsxXQorICAgICAgICAgICAgICAgIGlmIGtleSA9PSAnTElDRU5TRSc6CisgICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gdmFsdWUuc3BsaXQoJywnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcCA9IGRlcC5zcGxpdCgpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWQgPSBkZXBtYXAuZ2V0KGRlcCwgJycpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtYXBwZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcy5hcHBlbmQobWFwcGVkKQorICAgICAgICAgICAgICAgIGVsaWYga2V5ID09ICdMaWNlbnNlJzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzWydMSUNFTlNFJ10gPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYga2V5ID09ICdTdW1tYXJ5JzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzWydTVU1NQVJZJ10gPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYga2V5ID09ICdEZXNjcmlwdGlvbic6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlc1snREVTQ1JJUFRJT04nXSA9IHZhbHVlCisgICAgICAgICAgICAgICAgICAgIGluZGVzYyA9IFRydWUKKyAgICByZXR1cm4gdmFsdWVzCisKK2RlZiBjb252ZXJ0X2RlYmlhbihkZWJwYXRoKToKKyAgICAjIEZJWE1FIGV4dGVuZCB0aGlzIG1hcHBpbmcgLSBwZXJoYXBzIHVzZSBkaXN0cm9fYWxpYXMuaW5jPworICAgIGRlcG1hcCA9IHsnbGliei1kZXYnOiAnemxpYid9CisKKyAgICB2YWx1ZXMgPSB7fQorICAgIGRlcGVuZHMgPSBbXQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZGVicGF0aCwgJ2NvbnRyb2wnKSkgYXMgZjoKKyAgICAgICAgaW5kZXNjID0gRmFsc2UKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIGlmIGluZGVzYzoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnIFRoaXMgcGFja2FnZSBjb250YWlucycpOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXNjID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1snREVTQ1JJUFRJT04nXSArPSAnICcgKyBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpbmRlc2MgPSBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnNwbGl0KCc6JywgMSkKKyAgICAgICAgICAgICAgICBrZXkgPSBsaW5lWzBdCisgICAgICAgICAgICAgICAgdmFsdWUgPSBsaW5lWzFdCisgICAgICAgICAgICAgICAgaWYga2V5ID09ICdCdWlsZC1EZXBlbmRzJzoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiB2YWx1ZS5zcGxpdCgnLCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwID0gZGVwLnNwbGl0KClbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZCA9IGRlcG1hcC5nZXQoZGVwLCAnJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1hcHBlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLmFwcGVuZChtYXBwZWQpCisgICAgICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ1NlY3Rpb24nOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbJ1NFQ1RJT04nXSA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ0Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzWydTVU1NQVJZJ10gPSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBpbmRlc2MgPSBUcnVlCisKKyAgICBpZiBkZXBlbmRzOgorICAgICAgICB2YWx1ZXNbJ0RFUEVORFMnXSA9ICcgJy5qb2luKGRlcGVuZHMpCisKKyAgICByZXR1cm4gdmFsdWVzCisKKworZGVmIHJlZ2lzdGVyX2NvbW1hbmQoc3VicGFyc2Vycyk6CisgICAgcGFyc2VyX2NyZWF0ZSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignY3JlYXRlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NyZWF0ZSBhIG5ldyByZWNpcGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0NyZWF0ZXMgYSBuZXcgcmVjaXBlIGZyb20gYSBzb3VyY2UgdHJlZScpCisgICAgcGFyc2VyX2NyZWF0ZS5hZGRfYXJndW1lbnQoJ3NvdXJjZScsIGhlbHA9J1BhdGggb3IgVVJMIHRvIHNvdXJjZScpCisgICAgcGFyc2VyX2NyZWF0ZS5hZGRfYXJndW1lbnQoJy1vJywgJy0tb3V0ZmlsZScsIGhlbHA9J1NwZWNpZnkgZmlsZW5hbWUgZm9yIHJlY2lwZSB0byBjcmVhdGUnLCByZXF1aXJlZD1UcnVlKQorICAgIHBhcnNlcl9jcmVhdGUuYWRkX2FyZ3VtZW50KCctbScsICctLW1hY2hpbmUnLCBoZWxwPSdNYWtlIHJlY2lwZSBtYWNoaW5lLXNwZWNpZmljIGFzIG9wcG9zZWQgdG8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfY3JlYXRlLmFkZF9hcmd1bWVudCgnLXgnLCAnLS1leHRyYWN0LXRvJywgbWV0YXZhcj0nRVhUUkFDVFBBVEgnLCBoZWxwPSdBc3N1bWluZyBzb3VyY2UgaXMgYSBVUkwsIGZldGNoIGl0IGFuZCBleHRyYWN0IGl0IHRvIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGFzICUobWV0YXZhcilzJykKKyAgICBwYXJzZXJfY3JlYXRlLmFkZF9hcmd1bWVudCgnLVYnLCAnLS12ZXJzaW9uJywgaGVscD0nVmVyc2lvbiB0byB1c2Ugd2l0aGluIHJlY2lwZSAoUFYpJykKKyAgICBwYXJzZXJfY3JlYXRlLnNldF9kZWZhdWx0cyhmdW5jPWNyZWF0ZV9yZWNpcGUpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfYnVpbGRzeXMucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2J1aWxkc3lzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMTRhNTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2J1aWxkc3lzLnB5CkBAIC0wLDAgKzEsMzE2IEBACisjIFJlY2lwZSBjcmVhdGlvbiB0b29sIC0gY3JlYXRlIGNvbW1hbmQgYnVpbGQgc3lzdGVtIGhhbmRsZXJzCisjCisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHJlCitpbXBvcnQgbG9nZ2luZworZnJvbSByZWNpcGV0b29sLmNyZWF0ZSBpbXBvcnQgUmVjaXBlSGFuZGxlciwgcmVhZF9wa2djb25maWdfcHJvdmlkZXMKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3JlY2lwZXRvb2wnKQorCit0aW5mb2lsID0gTm9uZQorCitkZWYgdGluZm9pbF9pbml0KGluc3RhbmNlKToKKyAgICBnbG9iYWwgdGluZm9pbAorICAgIHRpbmZvaWwgPSBpbnN0YW5jZQorCitjbGFzcyBDbWFrZVJlY2lwZUhhbmRsZXIoUmVjaXBlSGFuZGxlcik6CisgICAgZGVmIHByb2Nlc3Moc2VsZiwgc3JjdHJlZSwgY2xhc3NlcywgbGluZXNfYmVmb3JlLCBsaW5lc19hZnRlciwgaGFuZGxlZCk6CisgICAgICAgIGlmICdidWlsZHN5c3RlbScgaW4gaGFuZGxlZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIFJlY2lwZUhhbmRsZXIuY2hlY2tmaWxlcyhzcmN0cmVlLCBbJ0NNYWtlTGlzdHMudHh0J10pOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoJ2NtYWtlJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBTcGVjaWZ5IGFueSBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8gY21ha2UgdXNpbmcgRVhUUkFfT0VDTUFLRTonKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCdFWFRSQV9PRUNNQUtFID0gIiInKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcnKQorICAgICAgICAgICAgaGFuZGxlZC5hcHBlbmQoJ2J1aWxkc3lzdGVtJykKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCitjbGFzcyBTY29uc1JlY2lwZUhhbmRsZXIoUmVjaXBlSGFuZGxlcik6CisgICAgZGVmIHByb2Nlc3Moc2VsZiwgc3JjdHJlZSwgY2xhc3NlcywgbGluZXNfYmVmb3JlLCBsaW5lc19hZnRlciwgaGFuZGxlZCk6CisgICAgICAgIGlmICdidWlsZHN5c3RlbScgaW4gaGFuZGxlZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIFJlY2lwZUhhbmRsZXIuY2hlY2tmaWxlcyhzcmN0cmVlLCBbJ1NDb25zdHJ1Y3QnLCAnU2NvbnN0cnVjdCcsICdzY29uc3RydWN0J10pOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoJ3Njb25zJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBTcGVjaWZ5IGFueSBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8gc2NvbnMgdXNpbmcgRVhUUkFfT0VTQ09OUzonKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCdFWFRSQV9PRVNDT05TID0gIiInKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcnKQorICAgICAgICAgICAgaGFuZGxlZC5hcHBlbmQoJ2J1aWxkc3lzdGVtJykKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCitjbGFzcyBRbWFrZVJlY2lwZUhhbmRsZXIoUmVjaXBlSGFuZGxlcik6CisgICAgZGVmIHByb2Nlc3Moc2VsZiwgc3JjdHJlZSwgY2xhc3NlcywgbGluZXNfYmVmb3JlLCBsaW5lc19hZnRlciwgaGFuZGxlZCk6CisgICAgICAgIGlmICdidWlsZHN5c3RlbScgaW4gaGFuZGxlZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIFJlY2lwZUhhbmRsZXIuY2hlY2tmaWxlcyhzcmN0cmVlLCBbJyoucHJvJ10pOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoJ3FtYWtlMicpCisgICAgICAgICAgICBoYW5kbGVkLmFwcGVuZCgnYnVpbGRzeXN0ZW0nKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2NsYXNzIEF1dG90b29sc1JlY2lwZUhhbmRsZXIoUmVjaXBlSGFuZGxlcik6CisgICAgZGVmIHByb2Nlc3Moc2VsZiwgc3JjdHJlZSwgY2xhc3NlcywgbGluZXNfYmVmb3JlLCBsaW5lc19hZnRlciwgaGFuZGxlZCk6CisgICAgICAgIGlmICdidWlsZHN5c3RlbScgaW4gaGFuZGxlZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGF1dG9jb25mID0gRmFsc2UKKyAgICAgICAgaWYgUmVjaXBlSGFuZGxlci5jaGVja2ZpbGVzKHNyY3RyZWUsIFsnY29uZmlndXJlLmFjJywgJ2NvbmZpZ3VyZS5pbiddKToKKyAgICAgICAgICAgIGF1dG9jb25mID0gVHJ1ZQorICAgICAgICAgICAgdmFsdWVzID0gQXV0b3Rvb2xzUmVjaXBlSGFuZGxlci5leHRyYWN0X2F1dG90b29sc19kZXBzKGxpbmVzX2JlZm9yZSwgc3JjdHJlZSkKKyAgICAgICAgICAgIGNsYXNzZXMuZXh0ZW5kKHZhbHVlcy5wb3AoJ2luaGVyaXQnLCAnJykuc3BsaXQoKSkKKyAgICAgICAgICAgIGZvciB2YXIsIHZhbHVlIGluIHZhbHVlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCclcyA9ICIlcyInICUgKHZhciwgdmFsdWUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29uZmZpbGUgPSBSZWNpcGVIYW5kbGVyLmNoZWNrZmlsZXMoc3JjdHJlZSwgWydjb25maWd1cmUnXSkKKyAgICAgICAgICAgIGlmIGNvbmZmaWxlOgorICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhpcyBpcyBqdXN0IGEgcHJlLWdlbmVyYXRlZCBhdXRvY29uZiBjb25maWd1cmUgc2NyaXB0CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNvbmZmaWxlWzBdLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDEwKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICdHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mJyBpbiBmLnJlYWRsaW5lKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbmYgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBhdXRvY29uZjoKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgTk9URTogaWYgdGhpcyBzb2Z0d2FyZSBpcyBub3QgY2FwYWJsZSBvZiBiZWluZyBidWlsdCBpbiBhIHNlcGFyYXRlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIGZyb20gdGhlIHNvdXJjZSwgeW91IHNob3VsZCByZXBsYWNlIGF1dG90b29scyB3aXRoIGF1dG90b29scy1icm9rZW5zZXAgaW4gdGhlJykKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgaW5oZXJpdCBsaW5lJykKKyAgICAgICAgICAgIGNsYXNzZXMuYXBwZW5kKCdhdXRvdG9vbHMnKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIFNwZWNpZnkgYW55IG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0byB0aGUgY29uZmlndXJlIHNjcmlwdCB1c2luZyBFWFRSQV9PRUNPTkY6JykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnRVhUUkFfT0VDT05GID0gIiInKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcnKQorICAgICAgICAgICAgaGFuZGxlZC5hcHBlbmQoJ2J1aWxkc3lzdGVtJykKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGV4dHJhY3RfYXV0b3Rvb2xzX2RlcHMob3V0bGluZXMsIHNyY3RyZWUsIGFjZmlsZT1Ob25lKToKKyAgICAgICAgaW1wb3J0IHNobGV4CisgICAgICAgIGltcG9ydCBvZS5wYWNrYWdlCisKKyAgICAgICAgdmFsdWVzID0ge30KKyAgICAgICAgaW5oZXJpdHMgPSBbXQorCisgICAgICAgICMgRklYTUUgdGhpcyBtYXBwaW5nIGlzIHZlcnkgdGhpbgorICAgICAgICBwcm9nbWFwID0geydmbGV4JzogJ2ZsZXgtbmF0aXZlJywKKyAgICAgICAgICAgICAgICAnYmlzb24nOiAnYmlzb24tbmF0aXZlJywKKyAgICAgICAgICAgICAgICAnbTQnOiAnbTQtbmF0aXZlJ30KKyAgICAgICAgcHJvZ2NsYXNzbWFwID0geydnY29uZnRvb2wtMic6ICdnY29uZicsCisgICAgICAgICAgICAgICAgJ3BrZy1jb25maWcnOiAncGtnY29uZmlnJ30KKworICAgICAgICBpZ25vcmVkZXBzID0gWydnY2MtcnVudGltZScsICdnbGliYycsICd1Y2xpYmMnXQorCisgICAgICAgIHBrZ19yZSA9IHJlLmNvbXBpbGUoJ1BLR19DSEVDS19NT0RVTEVTXChcWz9bYS16QS1aMC05XSpcXT8sIFxbPyhbXixcXV0qKVspLF0uKicpCisgICAgICAgIGxpYl9yZSA9IHJlLmNvbXBpbGUoJ0FDX0NIRUNLX0xJQlwoXFs/KFthLXpBLVowLTldKilcXT8sIC4qJykKKyAgICAgICAgcHJvZ3NfcmUgPSByZS5jb21waWxlKCdfUFJPR1M/XChcWz9bYS16QS1aMC05XSpcXT8sIFxbPyhbXixcXV0qKVxdP1spLF0uKicpCisgICAgICAgIGRlcF9yZSA9IHJlLmNvbXBpbGUoJyhbXiA+PD1dKykoIFs8Pj1dKyBbXiA+PD1dKyk/JykKKworICAgICAgICAjIEJ1aWxkIHVwIGxpYiBsaWJyYXJ5LT5wYWNrYWdlIG1hcHBpbmcKKyAgICAgICAgc2hsaWJfcHJvdmlkZXJzID0gb2UucGFja2FnZS5yZWFkX3NobGliX3Byb3ZpZGVycyh0aW5mb2lsLmNvbmZpZ19kYXRhKQorICAgICAgICBsaWJkaXIgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignbGliZGlyJywgVHJ1ZSkKKyAgICAgICAgYmFzZV9saWJkaXIgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignYmFzZV9saWJkaXInLCBUcnVlKQorICAgICAgICBsaWJwYXRocyA9IGxpc3Qoc2V0KFtiYXNlX2xpYmRpciwgbGliZGlyXSkpCisgICAgICAgIGxpYm5hbWVfcmUgPSByZS5jb21waWxlKCdebGliKC4rKVwuc28uKiQnKQorICAgICAgICBwa2dsaWJtYXAgPSB7fQorICAgICAgICBmb3IgbGliLCBpdGVtIGluIHNobGliX3Byb3ZpZGVycy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBwYXRoLCBwa2cgaW4gaXRlbS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBwYXRoIGluIGxpYnBhdGhzOgorICAgICAgICAgICAgICAgICAgICByZXMgPSBsaWJuYW1lX3JlLm1hdGNoKGxpYikKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbGlibmFtZSA9IHJlcy5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpYm5hbWUgaW4gcGtnbGlibWFwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ2xpYm1hcFtsaWJuYW1lXSA9IHBrZ1swXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCd1bmFibGUgdG8gZXh0cmFjdCBsaWJyYXJ5IG5hbWUgZnJvbSAlcycgJSBsaWIpCisKKyAgICAgICAgIyBOb3cgdHVybiBpdCBpbnRvIGEgbGlicmFyeS0+cmVjaXBlIG1hcHBpbmcKKyAgICAgICAgcmVjaXBlbGlibWFwID0ge30KKyAgICAgICAgcGtnZGF0YV9kaXIgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKQorICAgICAgICBmb3IgbGlibmFtZSwgcGtnIGluIHBrZ2xpYm1hcC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHBrZ2RhdGFfZGlyLCAncnVudGltZScsIHBrZykpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1BOOicpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZWxpYm1hcFtsaWJuYW1lXSA9IGxpbmUuc3BsaXQoJzonLCAxKVstMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBpb2U6CisgICAgICAgICAgICAgICAgaWYgaW9lLmVycm5vID09IDI6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCd1bmFibGUgdG8gZmluZCBhIHBrZ2RhdGEgZmlsZSBmb3IgcGFja2FnZSAlcycgJSBwa2cpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAjIFNpbmNlIGEgY29uZmlndXJlLmFjIGZpbGUgaXMgZXNzZW50aWFsbHkgYSBwcm9ncmFtLCB0aGlzIGlzIG9ubHkgZXZlciBnb2luZyB0byBiZQorICAgICAgICAjIGEgaGFjayB1bmZvcnR1bmF0ZWx5OyBidXQgaXQgb3VnaHQgdG8gYmUgZW5vdWdoIG9mIGFuIGFwcHJveGltYXRpb24KKyAgICAgICAgaWYgYWNmaWxlOgorICAgICAgICAgICAgc3JjZmlsZXMgPSBbYWNmaWxlXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3JjZmlsZXMgPSBSZWNpcGVIYW5kbGVyLmNoZWNrZmlsZXMoc3JjdHJlZSwgWydjb25maWd1cmUuYWMnLCAnY29uZmlndXJlLmluJ10pCisgICAgICAgIHBjZGVwcyA9IFtdCisgICAgICAgIGRlcHMgPSBbXQorICAgICAgICB1bm1hcHBlZCA9IFtdCisgICAgICAgIHVubWFwcGVkbGlicyA9IFtdCisgICAgICAgIHdpdGggb3BlbihzcmNmaWxlc1swXSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiAnUEtHX0NIRUNLX01PRFVMRVMnIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IHBrZ19yZS5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gZGVwX3JlLmZpbmRhbGwocmVzLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjZGVwcy5leHRlbmQoW3hbMF0gZm9yIHggaW4gcmVzXSkKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdHMuYXBwZW5kKCdwa2djb25maWcnKQorICAgICAgICAgICAgICAgIGlmIGxpbmUubHN0cmlwKCkuc3RhcnRzd2l0aCgnQU1fR05VX0dFVFRFWFQnKToKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdHMuYXBwZW5kKCdnZXR0ZXh0JykKKyAgICAgICAgICAgICAgICBlbGlmICdBQ19DSEVDS19QUk9HJyBpbiBsaW5lIG9yICdBQ19QQVRIX1BST0cnIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IHByb2dzX3JlLnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiByZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvZyBpbiBzaGxleC5zcGxpdChyZXMuZ3JvdXAoMSkpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2cgPSBwcm9nLnNwbGl0KClbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9nY2xhc3MgPSBwcm9nY2xhc3NtYXAuZ2V0KHByb2csIE5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvZ2NsYXNzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0cy5hcHBlbmQocHJvZ2NsYXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dkZXAgPSBwcm9nbWFwLmdldChwcm9nLCBOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwcm9nZGVwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQocHJvZ2RlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwcm9nLnN0YXJ0c3dpdGgoJyQnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm1hcHBlZC5hcHBlbmQocHJvZykKKyAgICAgICAgICAgICAgICBlbGlmICdBQ19DSEVDS19MSUInIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IGxpYl9yZS5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbGliID0gcmVzLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgICAgICBsaWJkZXAgPSByZWNpcGVsaWJtYXAuZ2V0KGxpYiwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpYmRlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChsaWJkZXApCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpYmRlcCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGliLnN0YXJ0c3dpdGgoJyQnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubWFwcGVkbGlicy5hcHBlbmQobGliKQorICAgICAgICAgICAgICAgIGVsaWYgJ0FDX1BBVEhfWCcgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoJ2xpYngxMScpCisKKyAgICAgICAgaWYgdW5tYXBwZWQ6CisgICAgICAgICAgICBvdXRsaW5lcy5hcHBlbmQoJyMgTk9URTogdGhlIGZvbGxvd2luZyBwcm9nIGRlcGVuZGVuY2llcyBhcmUgdW5rbm93biwgaWdub3Jpbmc6ICVzJyAlICcgJy5qb2luKHVubWFwcGVkKSkKKworICAgICAgICBpZiB1bm1hcHBlZGxpYnM6CisgICAgICAgICAgICBvdXRsaW5lcy5hcHBlbmQoJyMgTk9URTogdGhlIGZvbGxvd2luZyBsaWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgdW5rbm93biwgaWdub3Jpbmc6ICVzJyAlICcgJy5qb2luKHVubWFwcGVkbGlicykpCisgICAgICAgICAgICBvdXRsaW5lcy5hcHBlbmQoJyMgICAgICAgKHRoaXMgaXMgYmFzZWQgb24gcmVjaXBlcyB0aGF0IGhhdmUgcHJldmlvdXNseSBiZWVuIGJ1aWx0IGFuZCBwYWNrYWdlZCknKQorCisgICAgICAgIHJlY2lwZW1hcCA9IHJlYWRfcGtnY29uZmlnX3Byb3ZpZGVzKHRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgICAgIHVubWFwcGVkID0gW10KKyAgICAgICAgZm9yIHBjZGVwIGluIHBjZGVwczoKKyAgICAgICAgICAgIHJlY2lwZSA9IHJlY2lwZW1hcC5nZXQocGNkZXAsIE5vbmUpCisgICAgICAgICAgICBpZiByZWNpcGU6CisgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQocmVjaXBlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBub3QgcGNkZXAuc3RhcnRzd2l0aCgnJCcpOgorICAgICAgICAgICAgICAgICAgICB1bm1hcHBlZC5hcHBlbmQocGNkZXApCisKKyAgICAgICAgZGVwcyA9IHNldChkZXBzKS5kaWZmZXJlbmNlKHNldChpZ25vcmVkZXBzKSkKKworICAgICAgICBpZiB1bm1hcHBlZDoKKyAgICAgICAgICAgIG91dGxpbmVzLmFwcGVuZCgnIyBOT1RFOiB1bmFibGUgdG8gbWFwIHRoZSBmb2xsb3dpbmcgcGtnLWNvbmZpZyBkZXBlbmRlbmNpZXM6ICVzJyAlICcgJy5qb2luKHVubWFwcGVkKSkKKyAgICAgICAgICAgIG91dGxpbmVzLmFwcGVuZCgnIyAgICAgICAodGhpcyBpcyBiYXNlZCBvbiByZWNpcGVzIHRoYXQgaGF2ZSBwcmV2aW91c2x5IGJlZW4gYnVpbHQgYW5kIHBhY2thZ2VkKScpCisKKyAgICAgICAgaWYgZGVwczoKKyAgICAgICAgICAgIHZhbHVlc1snREVQRU5EUyddID0gJyAnLmpvaW4oZGVwcykKKworICAgICAgICBpZiBpbmhlcml0czoKKyAgICAgICAgICAgIHZhbHVlc1snaW5oZXJpdCddID0gJyAnLmpvaW4obGlzdChzZXQoaW5oZXJpdHMpKSkKKworICAgICAgICByZXR1cm4gdmFsdWVzCisKKworY2xhc3MgTWFrZWZpbGVSZWNpcGVIYW5kbGVyKFJlY2lwZUhhbmRsZXIpOgorICAgIGRlZiBwcm9jZXNzKHNlbGYsIHNyY3RyZWUsIGNsYXNzZXMsIGxpbmVzX2JlZm9yZSwgbGluZXNfYWZ0ZXIsIGhhbmRsZWQpOgorICAgICAgICBpZiAnYnVpbGRzeXN0ZW0nIGluIGhhbmRsZWQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBtYWtlZmlsZSA9IFJlY2lwZUhhbmRsZXIuY2hlY2tmaWxlcyhzcmN0cmVlLCBbJ01ha2VmaWxlJ10pCisgICAgICAgIGlmIG1ha2VmaWxlOgorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIE5PVEU6IHRoaXMgaXMgYSBNYWtlZmlsZS1vbmx5IHBpZWNlIG9mIHNvZnR3YXJlLCBzbyB3ZSBjYW5ub3QgZ2VuZXJhdGUgbXVjaCBvZiB0aGUnKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIHJlY2lwZSBhdXRvbWF0aWNhbGx5IC0geW91IHdpbGwgbmVlZCB0byBleGFtaW5lIHRoZSBNYWtlZmlsZSB5b3Vyc2VsZiBhbmQgZW5zdXJlJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyB0aGF0IHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbi4nKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcnKQorCisgICAgICAgICAgICBzY2FuZmlsZSA9IG9zLnBhdGguam9pbihzcmN0cmVlLCAnY29uZmlndXJlLnNjYW4nKQorICAgICAgICAgICAgc2tpcHNjYW4gPSBGYWxzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gYmIucHJvY2Vzcy5ydW4oJ2F1dG9zY2FuJywgY3dkPXNyY3RyZWUsIHNoZWxsPVRydWUpCisgICAgICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHNraXBzY2FuID0gVHJ1ZQorICAgICAgICAgICAgaWYgc2NhbmZpbGUgYW5kIG9zLnBhdGguZXhpc3RzKHNjYW5maWxlKToKKyAgICAgICAgICAgICAgICB2YWx1ZXMgPSBBdXRvdG9vbHNSZWNpcGVIYW5kbGVyLmV4dHJhY3RfYXV0b3Rvb2xzX2RlcHMobGluZXNfYmVmb3JlLCBzcmN0cmVlLCBhY2ZpbGU9c2NhbmZpbGUpCisgICAgICAgICAgICAgICAgY2xhc3Nlcy5leHRlbmQodmFsdWVzLnBvcCgnaW5oZXJpdCcsICcnKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgIGZvciB2YXIsIHZhbHVlIGluIHZhbHVlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFyID09ICdERVBFTkRTJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgTk9URTogc29tZSBvZiB0aGVzZSBkZXBlbmRlbmNpZXMgbWF5IGJlIG9wdGlvbmFsLCBjaGVjayB0aGUgTWFrZWZpbGUgYW5kL29yIHVwc3RyZWFtIGRvY3VtZW50YXRpb24nKQorICAgICAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCclcyA9ICIlcyInICUgKHZhciwgdmFsdWUpKQorICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJycpCisgICAgICAgICAgICAgICAgZm9yIGYgaW4gWydjb25maWd1cmUuc2NhbicsICdhdXRvc2Nhbi5sb2cnXToKKyAgICAgICAgICAgICAgICAgICAgZnAgPSBvcy5wYXRoLmpvaW4oc3JjdHJlZSwgZikKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZnApOgorICAgICAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZwKQorCisgICAgICAgICAgICBzZWxmLmdlbmZ1bmN0aW9uKGxpbmVzX2FmdGVyLCAnZG9fY29uZmlndXJlJywgWycjIFNwZWNpZnkgYW55IG5lZWRlZCBjb25maWd1cmUgY29tbWFuZHMgaGVyZSddKQorCisgICAgICAgICAgICBmdW5jID0gW10KKyAgICAgICAgICAgIGZ1bmMuYXBwZW5kKCcjIFlvdSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgbmVlZCB0byBhZGQgYWRkaXRpb25hbCBhcmd1bWVudHMgaGVyZScpCisgICAgICAgICAgICBmdW5jLmFwcGVuZCgnb2VfcnVubWFrZScpCisgICAgICAgICAgICBzZWxmLmdlbmZ1bmN0aW9uKGxpbmVzX2FmdGVyLCAnZG9fY29tcGlsZScsIGZ1bmMpCisKKyAgICAgICAgICAgIGluc3RhbGx0YXJnZXQgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBiYi5wcm9jZXNzLnJ1bignbWFrZSAtcW4gaW5zdGFsbCcsIGN3ZD1zcmN0cmVlLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmV4aXRjb2RlICE9IDE6CisgICAgICAgICAgICAgICAgICAgIGluc3RhbGx0YXJnZXQgPSBGYWxzZQorICAgICAgICAgICAgZnVuYyA9IFtdCisgICAgICAgICAgICBpZiBpbnN0YWxsdGFyZ2V0OgorICAgICAgICAgICAgICAgIGZ1bmMuYXBwZW5kKCcjIFRoaXMgaXMgYSBndWVzczsgYWRkaXRpb25hbCBhcmd1bWVudHMgbWF5IGJlIHJlcXVpcmVkJykKKyAgICAgICAgICAgICAgICBtYWtlYXJncyA9ICcnCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG1ha2VmaWxlWzBdLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDEwMCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAnREVTVERJUicgaW4gZi5yZWFkbGluZSgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VhcmdzICs9ICIgJ0RFU1RESVI9JHtEfSciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBmdW5jLmFwcGVuZCgnb2VfcnVubWFrZSBpbnN0YWxsJXMnICUgbWFrZWFyZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZ1bmMuYXBwZW5kKCcjIE5PVEU6IHVuYWJsZSB0byBkZXRlcm1pbmUgd2hhdCB0byBwdXQgaGVyZSAtIHRoZXJlIGlzIGEgTWFrZWZpbGUgYnV0IG5vJykKKyAgICAgICAgICAgICAgICBmdW5jLmFwcGVuZCgnIyB0YXJnZXQgbmFtZWQgImluc3RhbGwiLCBzbyB5b3Ugd2lsbCBuZWVkIHRvIGRlZmluZSB0aGlzIHlvdXJzZWxmJykKKyAgICAgICAgICAgIHNlbGYuZ2VuZnVuY3Rpb24obGluZXNfYWZ0ZXIsICdkb19pbnN0YWxsJywgZnVuYykKKworICAgICAgICAgICAgaGFuZGxlZC5hcHBlbmQoJ2J1aWxkc3lzdGVtJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBOT1RFOiBubyBNYWtlZmlsZSBmb3VuZCwgdW5hYmxlIHRvIGRldGVybWluZSB3aGF0IG5lZWRzIHRvIGJlIGRvbmUnKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcnKQorICAgICAgICAgICAgc2VsZi5nZW5mdW5jdGlvbihsaW5lc19hZnRlciwgJ2RvX2NvbmZpZ3VyZScsIFsnIyBTcGVjaWZ5IGFueSBuZWVkZWQgY29uZmlndXJlIGNvbW1hbmRzIGhlcmUnXSkKKyAgICAgICAgICAgIHNlbGYuZ2VuZnVuY3Rpb24obGluZXNfYWZ0ZXIsICdkb19jb21waWxlJywgWycjIFNwZWNpZnkgY29tcGlsYXRpb24gY29tbWFuZHMgaGVyZSddKQorICAgICAgICAgICAgc2VsZi5nZW5mdW5jdGlvbihsaW5lc19hZnRlciwgJ2RvX2luc3RhbGwnLCBbJyMgU3BlY2lmeSBpbnN0YWxsIGNvbW1hbmRzIGhlcmUnXSkKKworCitkZWYgcmVnaXN0ZXJfcmVjaXBlX2hhbmRsZXJzKGhhbmRsZXJzKToKKyAgICAjIFRoZXNlIGFyZSBpbiBhIHNwZWNpZmljIG9yZGVyIHNvIHRoYXQgdGhlIHJpZ2h0IG9uZSBpcyBkZXRlY3RlZCBmaXJzdAorICAgIGhhbmRsZXJzLmFwcGVuZChDbWFrZVJlY2lwZUhhbmRsZXIoKSkKKyAgICBoYW5kbGVycy5hcHBlbmQoQXV0b3Rvb2xzUmVjaXBlSGFuZGxlcigpKQorICAgIGhhbmRsZXJzLmFwcGVuZChTY29uc1JlY2lwZUhhbmRsZXIoKSkKKyAgICBoYW5kbGVycy5hcHBlbmQoUW1ha2VSZWNpcGVIYW5kbGVyKCkpCisgICAgaGFuZGxlcnMuYXBwZW5kKE1ha2VmaWxlUmVjaXBlSGFuZGxlcigpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9idWlsZHN5c19weXRob24ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2J1aWxkc3lzX3B5dGhvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGFmMmEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9idWlsZHN5c19weXRob24ucHkKQEAgLTAsMCArMSw3MTYgQEAKKyMgUmVjaXBlIGNyZWF0aW9uIHRvb2wgLSBjcmVhdGUgYnVpbGQgc3lzdGVtIGhhbmRsZXIgZm9yIHB5dGhvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgTWVudG9yIEdyYXBoaWNzIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgYXN0CitpbXBvcnQgY29kZWNzCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9weQoraW1wb3J0IGVtYWlsCitpbXBvcnQgaW1wCitpbXBvcnQgZ2xvYgoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgc3VicHJvY2VzcworZnJvbSByZWNpcGV0b29sLmNyZWF0ZSBpbXBvcnQgUmVjaXBlSGFuZGxlcgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigncmVjaXBldG9vbCcpCisKK3RpbmZvaWwgPSBOb25lCisKKworZGVmIHRpbmZvaWxfaW5pdChpbnN0YW5jZSk6CisgICAgZ2xvYmFsIHRpbmZvaWwKKyAgICB0aW5mb2lsID0gaW5zdGFuY2UKKworCitjbGFzcyBQeXRob25SZWNpcGVIYW5kbGVyKFJlY2lwZUhhbmRsZXIpOgorICAgIGJhc2VfcGtnZGVwcyA9IFsncHl0aG9uLWNvcmUnXQorICAgIGV4Y2x1ZGVkX3BrZ2RlcHMgPSBbJ3B5dGhvbi1kYmcnXQorICAgICMgb3MucGF0aCBpcyBwcm92aWRlZCBieSBweXRob24tY29yZQorICAgIGFzc3VtZV9wcm92aWRlZCA9IFsnYnVpbHRpbnMnLCAnb3MucGF0aCddCisgICAgIyBBc3N1bWVzIHRoYXQgdGhlIGhvc3QgcHl0aG9uIGJ1aWx0aW5fbW9kdWxlX25hbWVzIGlzIHNhbmUgZm9yIHRhcmdldCB0b28KKyAgICBhc3N1bWVfcHJvdmlkZWQgPSBhc3N1bWVfcHJvdmlkZWQgKyBsaXN0KHN5cy5idWlsdGluX21vZHVsZV9uYW1lcykKKworICAgIGJidmFyX21hcCA9IHsKKyAgICAgICAgJ05hbWUnOiAnUE4nLAorICAgICAgICAnVmVyc2lvbic6ICdQVicsCisgICAgICAgICdIb21lLXBhZ2UnOiAnSE9NRVBBR0UnLAorICAgICAgICAnU3VtbWFyeSc6ICdTVU1NQVJZJywKKyAgICAgICAgJ0Rlc2NyaXB0aW9uJzogJ0RFU0NSSVBUSU9OJywKKyAgICAgICAgJ0xpY2Vuc2UnOiAnTElDRU5TRScsCisgICAgICAgICdSZXF1aXJlcyc6ICdSREVQRU5EU18ke1BOfScsCisgICAgICAgICdQcm92aWRlcyc6ICdSUFJPVklERVNfJHtQTn0nLAorICAgICAgICAnT2Jzb2xldGVzJzogJ1JSRVBMQUNFU18ke1BOfScsCisgICAgfQorICAgICMgUE4vUFYgYXJlIGFscmVhZHkgc2V0IGJ5IHJlY2lwZXRvb2wgY29yZSAmIGRlc2MgY2FuIGJlIGV4dHJlbWVseSBsb25nCisgICAgZXhjbHVkZWRfZmllbGRzID0gWworICAgICAgICAnTmFtZScsCisgICAgICAgICdWZXJzaW9uJywKKyAgICAgICAgJ0Rlc2NyaXB0aW9uJywKKyAgICBdCisgICAgc2V0dXBfcGFyc2VfbWFwID0geworICAgICAgICAnVXJsJzogJ0hvbWUtcGFnZScsCisgICAgICAgICdDbGFzc2lmaWVycyc6ICdDbGFzc2lmaWVyJywKKyAgICAgICAgJ0Rlc2NyaXB0aW9uJzogJ1N1bW1hcnknLAorICAgIH0KKyAgICBzZXR1cGFyZ19tYXAgPSB7CisgICAgICAgICdIb21lLXBhZ2UnOiAndXJsJywKKyAgICAgICAgJ0NsYXNzaWZpZXInOiAnY2xhc3NpZmllcnMnLAorICAgICAgICAnU3VtbWFyeSc6ICdkZXNjcmlwdGlvbicsCisgICAgICAgICdEZXNjcmlwdGlvbic6ICdsb25nLWRlc2NyaXB0aW9uJywKKyAgICB9CisgICAgIyBWYWx1ZXMgd2hpY2ggYXJlIGxpc3RzLCB1c2VkIGJ5IHRoZSBzZXR1cC5weSBhcmd1bWVudCBiYXNlZCBtZXRhZGF0YQorICAgICMgZXh0cmFjdGlvbiBtZXRob2QsIHRvIGRldGVybWluZSBob3cgdG8gcHJvY2VzcyB0aGUgc2V0dXAucHkgb3V0cHV0LgorICAgIHNldHVwYXJnX2xpc3RfZmllbGRzID0gWworICAgICAgICAnQ2xhc3NpZmllcicsCisgICAgICAgICdSZXF1aXJlcycsCisgICAgICAgICdQcm92aWRlcycsCisgICAgICAgICdPYnNvbGV0ZXMnLAorICAgICAgICAnUGxhdGZvcm0nLAorICAgICAgICAnU3VwcG9ydGVkLVBsYXRmb3JtJywKKyAgICBdCisgICAgc2V0dXBhcmdfbXVsdGlfbGluZV92YWx1ZXMgPSBbJ0Rlc2NyaXB0aW9uJ10KKyAgICByZXBsYWNlbWVudHMgPSBbCisgICAgICAgICgnTGljZW5zZScsIHInICcsICctJyksCisgICAgICAgICgnTGljZW5zZScsIHInLUxpY2Vuc2UkJywgJycpLAorICAgICAgICAoJ0xpY2Vuc2UnLCByJ15VTktOT1dOJCcsICcnKSwKKworICAgICAgICAjIFJlbW92ZSBjdXJyZW50bHkgdW5oYW5kbGVkIHZlcnNpb24gbnVtYmVycyBmcm9tIHRoZXNlIHZhcmlhYmxlcworICAgICAgICAoJ1JlcXVpcmVzJywgcicgKlwoW14pXSpcKScsICcnKSwKKyAgICAgICAgKCdQcm92aWRlcycsIHInICpcKFteKV0qXCknLCAnJyksCisgICAgICAgICgnT2Jzb2xldGVzJywgcicgKlwoW14pXSpcKScsICcnKSwKKyAgICAgICAgKCdJbnN0YWxsLXJlcXVpcmVzJywgcideKFtePjw9IF0rKS4qJywgcidcMScpLAorICAgICAgICAoJ0V4dHJhcy1yZXF1aXJlJywgcideKFtePjw9IF0rKS4qJywgcidcMScpLAorICAgICAgICAoJ1Rlc3RzLXJlcXVpcmUnLCByJ14oW14+PD0gXSspLionLCByJ1wxJyksCisKKyAgICAgICAgIyBSZW1vdmUgdW5oYW5kbGVkIGRlcGVuZGVuY3kgb24gcGFydGljdWxhciBmZWF0dXJlcyAoZS5nLiBmb29bUERGXSkKKyAgICAgICAgKCdJbnN0YWxsLXJlcXVpcmVzJywgcidcW1teXF1dK1xdJCcsICcnKSwKKyAgICBdCisKKyAgICBjbGFzc2lmaWVyX2xpY2Vuc2VfbWFwID0geworICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogQWNhZGVtaWMgRnJlZSBMaWNlbnNlIChBRkwpJzogJ0FGTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSc6ICdBcGFjaGUnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlJzogJ0FQU0wnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogQXJ0aXN0aWMgTGljZW5zZSc6ICdBcnRpc3RpYycsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBBdHRyaWJ1dGlvbiBBc3N1cmFuY2UgTGljZW5zZSc6ICdBQUwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogQlNEIExpY2Vuc2UnOiAnQlNEJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IENvbW1vbiBQdWJsaWMgTGljZW5zZSc6ICdDUEwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogRWlmZmVsIEZvcnVtIExpY2Vuc2UnOiAnRUZMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEV1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlIDEuMCAoRVVQTCAxLjApJzogJ0VVUEwtMS4wJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEV1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlIDEuMSAoRVVQTCAxLjEpJzogJ0VVUEwtMS4xJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MyBvciBsYXRlciAoQUdQTHYzKyknOiAnQUdQTC0zLjArJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2Myc6ICdBR1BMLTMuMCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgKEZETCknOiAnR0ZETCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSc6ICdHUEwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIgKEdQTHYyKSc6ICdHUEwtMi4wJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyIG9yIGxhdGVyIChHUEx2MispJzogJ0dQTC0yLjArJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYzIChHUEx2MyknOiAnR1BMLTMuMCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MyBvciBsYXRlciAoR1BMdjMrKSc6ICdHUEwtMy4wKycsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIgKExHUEx2MiknOiAnTEdQTC0yLjAnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyIG9yIGxhdGVyIChMR1BMdjIrKSc6ICdMR1BMLTIuMCsnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYzIChMR1BMdjMpJzogJ0xHUEwtMy4wJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MyBvciBsYXRlciAoTEdQTHYzKyknOiAnTEdQTC0zLjArJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBMaWJyYXJ5IG9yIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChMR1BMKSc6ICdMR1BMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IElCTSBQdWJsaWMgTGljZW5zZSc6ICdJUEwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogSVNDIExpY2Vuc2UgKElTQ0wpJzogJ0lTQycsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBJbnRlbCBPcGVuIFNvdXJjZSBMaWNlbnNlJzogJ0ludGVsJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEphYmJlciBPcGVuIFNvdXJjZSBMaWNlbnNlJzogJ0phYmJlcicsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNSVQgTGljZW5zZSc6ICdNSVQnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTUlUUkUgQ29sbGFib3JhdGl2ZSBWaXJ0dWFsIFdvcmtzcGFjZSBMaWNlbnNlIChDVlcpJzogJ0NWV0wnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTW90b3NvdG8gTGljZW5zZSc6ICdNb3Rvc290bycsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDEuMCAoTVBMKSc6ICdNUEwtMS4wJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1vemlsbGEgUHVibGljIExpY2Vuc2UgMS4xIChNUEwgMS4xKSc6ICdNUEwtMS4xJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1vemlsbGEgUHVibGljIExpY2Vuc2UgMi4wIChNUEwgMi4wKSc6ICdNUEwtMi4wJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE5ldGhhY2sgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSc6ICdOR1BMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE5va2lhIE9wZW4gU291cmNlIExpY2Vuc2UnOiAnTm9raWEnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogT3BlbiBHcm91cCBUZXN0IFN1aXRlIExpY2Vuc2UnOiAnT0dUU0wnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogUHl0aG9uIExpY2Vuc2UgKENOUkkgUHl0aG9uIExpY2Vuc2UpJzogJ0NOUkktUHl0aG9uJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIExpY2Vuc2UnOiAnUFNGJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFF0IFB1YmxpYyBMaWNlbnNlIChRUEwpJzogJ1FQTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBSaWNvaCBTb3VyY2UgQ29kZSBQdWJsaWMgTGljZW5zZSc6ICdSU0NQTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBTbGVlcHljYXQgTGljZW5zZSc6ICdTbGVlcHljYXQnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogU3VuIEluZHVzdHJ5IFN0YW5kYXJkcyBTb3VyY2UgTGljZW5zZSAoU0lTU0wpJzogJy0tICBTdW4gSW5kdXN0cnkgU3RhbmRhcmRzIFNvdXJjZSBMaWNlbnNlIChTSVNTTCknLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogU3VuIFB1YmxpYyBMaWNlbnNlJzogJ1NQTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBVbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EgT3BlbiBTb3VyY2UgTGljZW5zZSc6ICdOQ1NBJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFZvdmlkYSBTb2Z0d2FyZSBMaWNlbnNlIDEuMCc6ICdWU0wtMS4wJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFczQyBMaWNlbnNlJzogJ1czQycsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBYLk5ldCBMaWNlbnNlJzogJ1huZXQnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogWm9wZSBQdWJsaWMgTGljZW5zZSc6ICdaUEwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogemxpYi9saWJwbmcgTGljZW5zZSc6ICdabGliJywKKyAgICB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBwcm9jZXNzKHNlbGYsIHNyY3RyZWUsIGNsYXNzZXMsIGxpbmVzX2JlZm9yZSwgbGluZXNfYWZ0ZXIsIGhhbmRsZWQpOgorICAgICAgICBpZiAnYnVpbGRzeXN0ZW0nIGluIGhhbmRsZWQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBub3QgUmVjaXBlSGFuZGxlci5jaGVja2ZpbGVzKHNyY3RyZWUsIFsnc2V0dXAucHknXSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIHNldHVwLnB5IGlzIGFsd2F5cyBwYXJzZWQgdG8gZ2V0IGF0IGNlcnRhaW4gcmVxdWlyZWQgaW5mb3JtYXRpb24sIHN1Y2ggYXMKKyAgICAgICAgIyBkaXN0dXRpbHMgdnMgc2V0dXB0b29scworICAgICAgICAjCisgICAgICAgICMgSWYgZWdnIGluZm8gaXMgYXZhaWxhYmxlLCB3ZSB1c2UgaXQgZm9yIGJvdGggaXRzIFBLRy1JTkZPIG1ldGFkYXRhCisgICAgICAgICMgYW5kIGZvciBpdHMgcmVxdWlyZXMudHh0IGZvciBpbnN0YWxsX3JlcXVpcmVzLgorICAgICAgICAjIElmIFBLRy1JTkZPIGlzIGF2YWlsYWJsZSBidXQgbm8gZWdnIGluZm8gaXMsIHdlIHVzZSB0aGF0IGZvciBtZXRhZGF0YSBpbiBwcmVmZXJlbmNlIHRvCisgICAgICAgICMgdGhlIHBhcnNlZCBzZXR1cC5weSwgYnV0IHVzZSB0aGUgaW5zdGFsbF9yZXF1aXJlcyBpbmZvIGZyb20gdGhlCisgICAgICAgICMgcGFyc2VkIHNldHVwLnB5LgorCisgICAgICAgIHNldHVwc2NyaXB0ID0gb3MucGF0aC5qb2luKHNyY3RyZWUsICdzZXR1cC5weScpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNldHVwX2luZm8sIHVzZXNfc2V0dXB0b29scywgc2V0dXBfbm9uX2xpdGVyYWxzLCBleHRlbnNpb25zID0gc2VsZi5wYXJzZV9zZXR1cF9weShzZXR1cHNjcmlwdCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oIkZhaWxlZCB0byBwYXJzZSBzZXR1cC5weSIpCisgICAgICAgICAgICBzZXR1cF9pbmZvLCB1c2VzX3NldHVwdG9vbHMsIHNldHVwX25vbl9saXRlcmFscywgZXh0ZW5zaW9ucyA9IHt9LCBUcnVlLCBbXSwgW10KKworICAgICAgICBlZ2dpbmZvID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihzcmN0cmVlLCAnKi5lZ2ctaW5mbycpKQorICAgICAgICBpZiBlZ2dpbmZvOgorICAgICAgICAgICAgaW5mbyA9IHNlbGYuZ2V0X3BrZ2luZm8ob3MucGF0aC5qb2luKGVnZ2luZm9bMF0sICdQS0ctSU5GTycpKQorICAgICAgICAgICAgcmVxdWlyZXNfdHh0ID0gb3MucGF0aC5qb2luKGVnZ2luZm9bMF0sICdyZXF1aXJlcy50eHQnKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocmVxdWlyZXNfdHh0KToKKyAgICAgICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHJlcXVpcmVzX3R4dCkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgaW5zdF9yZXEgPSBbXQorICAgICAgICAgICAgICAgICAgICBleHRyYXNfcmVxID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGlzdCkKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF9mZWF0dXJlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnWycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZmVhdHVyZSA9IGxpbmVbMTotMV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgY3VycmVudF9mZWF0dXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhc19yZXFbY3VycmVudF9mZWF0dXJlXS5hcHBlbmQobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdF9yZXEuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGluZm9bJ0luc3RhbGwtcmVxdWlyZXMnXSA9IGluc3RfcmVxCisgICAgICAgICAgICAgICAgICAgIGluZm9bJ0V4dHJhcy1yZXF1aXJlJ10gPSBleHRyYXNfcmVxCisgICAgICAgIGVsaWYgUmVjaXBlSGFuZGxlci5jaGVja2ZpbGVzKHNyY3RyZWUsIFsnUEtHLUlORk8nXSk6CisgICAgICAgICAgICBpbmZvID0gc2VsZi5nZXRfcGtnaW5mbyhvcy5wYXRoLmpvaW4oc3JjdHJlZSwgJ1BLRy1JTkZPJykpCisKKyAgICAgICAgICAgIGlmIHNldHVwX2luZm86CisgICAgICAgICAgICAgICAgaWYgJ0luc3RhbGwtcmVxdWlyZXMnIGluIHNldHVwX2luZm86CisgICAgICAgICAgICAgICAgICAgIGluZm9bJ0luc3RhbGwtcmVxdWlyZXMnXSA9IHNldHVwX2luZm9bJ0luc3RhbGwtcmVxdWlyZXMnXQorICAgICAgICAgICAgICAgIGlmICdFeHRyYXMtcmVxdWlyZScgaW4gc2V0dXBfaW5mbzoKKyAgICAgICAgICAgICAgICAgICAgaW5mb1snRXh0cmFzLXJlcXVpcmUnXSA9IHNldHVwX2luZm9bJ0V4dHJhcy1yZXF1aXJlJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNldHVwX2luZm86CisgICAgICAgICAgICAgICAgaW5mbyA9IHNldHVwX2luZm8KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5mbyA9IHNlbGYuZ2V0X3NldHVwX2FyZ3NfaW5mbyhzZXR1cHNjcmlwdCkKKworICAgICAgICBzZWxmLmFwcGx5X2luZm9fcmVwbGFjZW1lbnRzKGluZm8pCisKKyAgICAgICAgaWYgdXNlc19zZXR1cHRvb2xzOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoJ3NldHVwdG9vbHMnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoJ2Rpc3R1dGlscycpCisKKyAgICAgICAgaWYgJ0NsYXNzaWZpZXInIGluIGluZm86CisgICAgICAgICAgICBsaWNlbnNlcyA9IFtdCisgICAgICAgICAgICBmb3IgY2xhc3NpZmllciBpbiBpbmZvWydDbGFzc2lmaWVyJ106CisgICAgICAgICAgICAgICAgaWYgY2xhc3NpZmllciBpbiBzZWxmLmNsYXNzaWZpZXJfbGljZW5zZV9tYXA6CisgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2UgPSBzZWxmLmNsYXNzaWZpZXJfbGljZW5zZV9tYXBbY2xhc3NpZmllcl0KKyAgICAgICAgICAgICAgICAgICAgbGljZW5zZXMuYXBwZW5kKGxpY2Vuc2UpCisKKyAgICAgICAgICAgIGlmIGxpY2Vuc2VzOgorICAgICAgICAgICAgICAgIGluZm9bJ0xpY2Vuc2UnXSA9ICcgJiAnLmpvaW4obGljZW5zZXMpCisKKworICAgICAgICAjIE1hcCBQS0ctSU5GTyAmIHNldHVwLnB5IGZpZWxkcyB0byBiaXRiYWtlIHZhcmlhYmxlcworICAgICAgICBiYmluZm8gPSB7fQorICAgICAgICBmb3IgZmllbGQsIHZhbHVlcyBpbiBpbmZvLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgZmllbGQgaW4gc2VsZi5leGNsdWRlZF9maWVsZHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgZmllbGQgbm90IGluIHNlbGYuYmJ2YXJfbWFwOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWVzLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICcgJy5qb2luKHN0cih2KSBmb3IgdiBpbiB2YWx1ZXMgaWYgdikKKworICAgICAgICAgICAgYmJ2YXIgPSBzZWxmLmJidmFyX21hcFtmaWVsZF0KKyAgICAgICAgICAgIGlmIGJidmFyIG5vdCBpbiBiYmluZm8gYW5kIHZhbHVlOgorICAgICAgICAgICAgICAgIGJiaW5mb1tiYnZhcl0gPSB2YWx1ZQorCisgICAgICAgIGNvbW1lbnRfbGljX2xpbmUgPSBOb25lCisgICAgICAgIGZvciBwb3MsIGxpbmUgaW4gZW51bWVyYXRlKGxpc3QobGluZXNfYmVmb3JlKSk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMnKSBhbmQgJ0xJQ0VOU0UnIGluIGxpbmU6CisgICAgICAgICAgICAgICAgY29tbWVudF9saWNfbGluZSA9IHBvcworICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ0xJQ0VOU0UgPScpIGFuZCAnTElDRU5TRScgaW4gYmJpbmZvOgorICAgICAgICAgICAgICAgIGlmIGxpbmUgaW4gKCdMSUNFTlNFID0gIlVua25vd24iJywgJ0xJQ0VOU0UgPSAiQ0xPU0VEIicpOgorICAgICAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmVbcG9zXSA9ICdMSUNFTlNFID0gInt9IicuZm9ybWF0KGJiaW5mb1snTElDRU5TRSddKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lID09ICdMSUNFTlNFID0gIkNMT1NFRCInIGFuZCBjb21tZW50X2xpY19saW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNfYmVmb3JlW2NvbW1lbnRfbGljX2xpbmU6cG9zXSA9IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBXQVJOSU5HOiB0aGUgZm9sbG93aW5nIExJQ0VOU0UgdmFsdWUgaXMgYSBiZXN0IGd1ZXNzIC0gaXQgaXMgeW91cicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgcmVzcG9uc2liaWxpdHkgdG8gdmVyaWZ5IHRoYXQgdGhlIHZhbHVlIGlzIGNvbXBsZXRlIGFuZCBjb3JyZWN0LicKKyAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICBkZWwgYmJpbmZvWydMSUNFTlNFJ10KKworICAgICAgICBzcmNfdXJpX2xpbmUgPSBOb25lCisgICAgICAgIGZvciBwb3MsIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzX2JlZm9yZSk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1NSQ19VUkkgPScpOgorICAgICAgICAgICAgICAgIHNyY191cmlfbGluZSA9IHBvcworCisgICAgICAgIGlmIGJiaW5mbzoKKyAgICAgICAgICAgIG1kaW5mbyA9IFsnJ10KKyAgICAgICAgICAgIGZvciBrIGluIHNvcnRlZChiYmluZm8pOgorICAgICAgICAgICAgICAgIHYgPSBiYmluZm9ba10KKyAgICAgICAgICAgICAgICBtZGluZm8uYXBwZW5kKCd7fSA9ICJ7fSInLmZvcm1hdChrLCB2KSkKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZVtzcmNfdXJpX2xpbmUtMTpzcmNfdXJpX2xpbmUtMV0gPSBtZGluZm8KKworICAgICAgICBtYXBwZWRfZGVwcywgdW5tYXBwZWRfZGVwcyA9IHNlbGYuc2Nhbl9zZXR1cF9weXRob25fZGVwcyhzcmN0cmVlLCBzZXR1cF9pbmZvLCBzZXR1cF9ub25fbGl0ZXJhbHMpCisKKyAgICAgICAgZXh0cmFzX3JlcSA9IHNldCgpCisgICAgICAgIGlmICdFeHRyYXMtcmVxdWlyZScgaW4gaW5mbzoKKyAgICAgICAgICAgIGV4dHJhc19yZXEgPSBpbmZvWydFeHRyYXMtcmVxdWlyZSddCisgICAgICAgICAgICBpZiBleHRyYXNfcmVxOgorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBUaGUgZm9sbG93aW5nIGNvbmZpZ3MgJiBkZXBlbmRlbmNpZXMgYXJlIGZyb20gc2V0dXB0b29scyBleHRyYXNfcmVxdWlyZS4nKQorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBUaGVzZSBkZXBlbmRlbmNpZXMgYXJlIG9wdGlvbmFsLCBoZW5jZSBjYW4gYmUgY29udHJvbGxlZCB2aWEgUEFDS0FHRUNPTkZJRy4nKQorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBUaGUgdXBzdHJlYW0gbmFtZXMgbWF5IG5vdCBjb3JyZXNwb25kIGV4YWN0bHkgdG8gYml0YmFrZSBwYWNrYWdlIG5hbWVzLicpCisgICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjJykKKyAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgVW5jb21tZW50IHRoaXMgbGluZSB0byBlbmFibGUgYWxsIHRoZSBvcHRpb25hbCBmZWF0dXJlcy4nKQorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnI1BBQ0tBR0VDT05GSUcgPz0gInt9IicuZm9ybWF0KCcgJy5qb2luKGsubG93ZXIoKSBmb3IgayBpbiBleHRyYXNfcmVxLml0ZXJrZXlzKCkpKSkKKyAgICAgICAgICAgICAgICBmb3IgZmVhdHVyZSwgZmVhdHVyZV9yZXFzIGluIGV4dHJhc19yZXEuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIHVubWFwcGVkX2RlcHMuZGlmZmVyZW5jZV91cGRhdGUoZmVhdHVyZV9yZXFzKQorCisgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVfcmVxX2RlcHMgPSAoJ3B5dGhvbi0nICsgci5yZXBsYWNlKCcuJywgJy0nKS5sb3dlcigpIGZvciByIGluIHNvcnRlZChmZWF0dXJlX3JlcXMpKQorICAgICAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJ1BBQ0tBR0VDT05GSUdbe31dID0gIiwsLHt9IicuZm9ybWF0KGZlYXR1cmUubG93ZXIoKSwgJyAnLmpvaW4oZmVhdHVyZV9yZXFfZGVwcykpKQorCisgICAgICAgIGluc3RfcmVxcyA9IHNldCgpCisgICAgICAgIGlmICdJbnN0YWxsLXJlcXVpcmVzJyBpbiBpbmZvOgorICAgICAgICAgICAgaWYgZXh0cmFzX3JlcToKKyAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJycpCisgICAgICAgICAgICBpbnN0X3JlcXMgPSBpbmZvWydJbnN0YWxsLXJlcXVpcmVzJ10KKyAgICAgICAgICAgIGlmIGluc3RfcmVxczoKKyAgICAgICAgICAgICAgICB1bm1hcHBlZF9kZXBzLmRpZmZlcmVuY2VfdXBkYXRlKGluc3RfcmVxcykKKworICAgICAgICAgICAgICAgIGluc3RfcmVxX2RlcHMgPSAoJ3B5dGhvbi0nICsgci5yZXBsYWNlKCcuJywgJy0nKS5sb3dlcigpIGZvciByIGluIHNvcnRlZChpbnN0X3JlcXMpKQorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBXQVJOSU5HOiB0aGUgZm9sbG93aW5nIHJkZXBlbmRzIGFyZSBmcm9tIHNldHVwdG9vbHMgaW5zdGFsbF9yZXF1aXJlcy4gVGhlc2UnKQorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyB1cHN0cmVhbSBuYW1lcyBtYXkgbm90IGNvcnJlc3BvbmQgZXhhY3RseSB0byBiaXRiYWtlIHBhY2thZ2UgbmFtZXMuJykKKyAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJ1JERVBFTkRTXyR7e1BOfX0gKz0gInt9IicuZm9ybWF0KCcgJy5qb2luKGluc3RfcmVxX2RlcHMpKSkKKworICAgICAgICBpZiBtYXBwZWRfZGVwczoKKyAgICAgICAgICAgIG5hbWUgPSBpbmZvLmdldCgnTmFtZScpCisgICAgICAgICAgICBpZiBuYW1lIGFuZCBuYW1lWzBdIGluIG1hcHBlZF9kZXBzOgorICAgICAgICAgICAgICAgICMgQXR0ZW1wdCB0byBhdm9pZCBzZWxmLXJlZmVyZW5jZQorICAgICAgICAgICAgICAgIG1hcHBlZF9kZXBzLnJlbW92ZShuYW1lWzBdKQorICAgICAgICAgICAgbWFwcGVkX2RlcHMgLT0gc2V0KHNlbGYuZXhjbHVkZWRfcGtnZGVwcykKKyAgICAgICAgICAgIGlmIGluc3RfcmVxcyBvciBleHRyYXNfcmVxOgorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBXQVJOSU5HOiB0aGUgZm9sbG93aW5nIHJkZXBlbmRzIGFyZSBkZXRlcm1pbmVkIHRocm91Z2ggYmFzaWMgYW5hbHlzaXMgb2YgdGhlJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBweXRob24gc291cmNlcywgYW5kIG1pZ2h0IG5vdCBiZSAxMDAlIGFjY3VyYXRlLicpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJ1JERVBFTkRTXyR7e1BOfX0gKz0gInt9IicuZm9ybWF0KCcgJy5qb2luKHNvcnRlZChtYXBwZWRfZGVwcykpKSkKKworICAgICAgICB1bm1hcHBlZF9kZXBzIC09IHNldChleHRlbnNpb25zKQorICAgICAgICB1bm1hcHBlZF9kZXBzIC09IHNldChzZWxmLmFzc3VtZV9wcm92aWRlZCkKKyAgICAgICAgaWYgdW5tYXBwZWRfZGVwczoKKyAgICAgICAgICAgIGlmIG1hcHBlZF9kZXBzOgorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBXQVJOSU5HOiBXZSB3ZXJlIHVuYWJsZSB0byBtYXAgdGhlIGZvbGxvd2luZyBweXRob24gcGFja2FnZS9tb2R1bGUnKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIGRlcGVuZGVuY2llcyB0byB0aGUgYml0YmFrZSBwYWNrYWdlcyB3aGljaCBpbmNsdWRlIHRoZW06JykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmV4dGVuZCgnIyAgICB7fScuZm9ybWF0KGQpIGZvciBkIGluIHNvcnRlZCh1bm1hcHBlZF9kZXBzKSkKKworICAgICAgICBoYW5kbGVkLmFwcGVuZCgnYnVpbGRzeXN0ZW0nKQorCisgICAgZGVmIGdldF9wa2dpbmZvKHNlbGYsIHBrZ2luZm9fZm4pOgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fZmlsZShvcGVuKHBrZ2luZm9fZm4sICdyJykpCisgICAgICAgIG1zZ2luZm8gPSB7fQorICAgICAgICBmb3IgZmllbGQgaW4gbXNnLmtleXMoKToKKyAgICAgICAgICAgIHZhbHVlcyA9IG1zZy5nZXRfYWxsKGZpZWxkKQorICAgICAgICAgICAgaWYgbGVuKHZhbHVlcykgPT0gMToKKyAgICAgICAgICAgICAgICBtc2dpbmZvW2ZpZWxkXSA9IHZhbHVlc1swXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2dpbmZvW2ZpZWxkXSA9IHZhbHVlcworICAgICAgICByZXR1cm4gbXNnaW5mbworCisgICAgZGVmIHBhcnNlX3NldHVwX3B5KHNlbGYsIHNldHVwc2NyaXB0PScuL3NldHVwLnB5Jyk6CisgICAgICAgIHdpdGggY29kZWNzLm9wZW4oc2V0dXBzY3JpcHQpIGFzIGY6CisgICAgICAgICAgICBpbmZvLCBpbXBvcnRlZF9tb2R1bGVzLCBub25fbGl0ZXJhbHMsIGV4dGVuc2lvbnMgPSBnYXRoZXJfc2V0dXBfaW5mbyhmKQorCisgICAgICAgIGRlZiBfbWFwKGtleSk6CisgICAgICAgICAgICBrZXkgPSBrZXkucmVwbGFjZSgnXycsICctJykKKyAgICAgICAgICAgIGtleSA9IGtleVswXS51cHBlcigpICsga2V5WzE6XQorICAgICAgICAgICAgaWYga2V5IGluIHNlbGYuc2V0dXBfcGFyc2VfbWFwOgorICAgICAgICAgICAgICAgIGtleSA9IHNlbGYuc2V0dXBfcGFyc2VfbWFwW2tleV0KKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICAjIE5haXZlIG1hcHBpbmcgb2Ygc2V0dXAoKSBhcmd1bWVudHMgdG8gUEtHLUlORk8gZmllbGQgbmFtZXMKKyAgICAgICAgZm9yIGQgaW4gW2luZm8sIG5vbl9saXRlcmFsc106CisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgbmV3X2tleSA9IF9tYXAoa2V5KQorICAgICAgICAgICAgICAgIGlmIG5ld19rZXkgIT0ga2V5OgorICAgICAgICAgICAgICAgICAgICBkZWwgZFtrZXldCisgICAgICAgICAgICAgICAgICAgIGRbbmV3X2tleV0gPSB2YWx1ZQorCisgICAgICAgIHJldHVybiBpbmZvLCAnc2V0dXB0b29scycgaW4gaW1wb3J0ZWRfbW9kdWxlcywgbm9uX2xpdGVyYWxzLCBleHRlbnNpb25zCisKKyAgICBkZWYgZ2V0X3NldHVwX2FyZ3NfaW5mbyhzZWxmLCBzZXR1cHNjcmlwdD0nLi9zZXR1cC5weScpOgorICAgICAgICBjbWQgPSBbJ3B5dGhvbicsIHNldHVwc2NyaXB0XQorICAgICAgICBpbmZvID0ge30KKyAgICAgICAga2V5cyA9IHNldChzZWxmLmJidmFyX21hcC5rZXlzKCkpCisgICAgICAgIGtleXMgfD0gc2V0KHNlbGYuc2V0dXBhcmdfbGlzdF9maWVsZHMpCisgICAgICAgIGtleXMgfD0gc2V0KHNlbGYuc2V0dXBhcmdfbXVsdGlfbGluZV92YWx1ZXMpCisgICAgICAgIGdyb3VwZWRfa2V5cyA9IGl0ZXJ0b29scy5ncm91cGJ5KGtleXMsIGxhbWJkYSBrOiAoayBpbiBzZWxmLnNldHVwYXJnX2xpc3RfZmllbGRzLCBrIGluIHNlbGYuc2V0dXBhcmdfbXVsdGlfbGluZV92YWx1ZXMpKQorICAgICAgICBmb3IgaW5kZXgsIGtleXMgaW4gZ3JvdXBlZF9rZXlzOgorICAgICAgICAgICAgaWYgaW5kZXggPT0gKFRydWUsIEZhbHNlKToKKyAgICAgICAgICAgICAgICAjIFNwbGl0bGluZXMgb3V0cHV0IGZvciBlYWNoIGFyZyBhcyBhIGxpc3QgdmFsdWUKKyAgICAgICAgICAgICAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgICAgICAgICAgICAgIGFyZyA9IHNlbGYuc2V0dXBhcmdfbWFwLmdldChrZXksIGtleS5sb3dlcigpKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBhcmdfaW5mbyA9IHNlbGYucnVuX2NvbW1hbmQoY21kICsgWyctLScgKyBhcmddLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHNldHVwc2NyaXB0KSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvW2tleV0gPSBbbC5yc3RyaXAoKSBmb3IgbCBpbiBhcmdfaW5mby5zcGxpdGxpbmVzKCldCisgICAgICAgICAgICBlbGlmIGluZGV4ID09IChGYWxzZSwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgIyBFbnRpcmUgb3V0cHV0IGZvciBlYWNoIGFyZworICAgICAgICAgICAgICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gc2VsZi5zZXR1cGFyZ19tYXAuZ2V0KGtleSwga2V5Lmxvd2VyKCkpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19pbmZvID0gc2VsZi5ydW5fY29tbWFuZChjbWQgKyBbJy0tJyArIGFyZ10sIGN3ZD1vcy5wYXRoLmRpcm5hbWUoc2V0dXBzY3JpcHQpKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ba2V5XSA9IGFyZ19pbmZvCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGluZm8udXBkYXRlKHNlbGYuZ2V0X3NldHVwX2J5bGluZShsaXN0KGtleXMpLCBzZXR1cHNjcmlwdCkpCisgICAgICAgIHJldHVybiBpbmZvCisKKyAgICBkZWYgZ2V0X3NldHVwX2J5bGluZShzZWxmLCBmaWVsZHMsIHNldHVwc2NyaXB0PScuL3NldHVwLnB5Jyk6CisgICAgICAgIGluZm8gPSB7fQorCisgICAgICAgIGNtZCA9IFsncHl0aG9uJywgc2V0dXBzY3JpcHRdCisgICAgICAgIGNtZC5leHRlbmQoJy0tJyArIHNlbGYuc2V0dXBhcmdfbWFwLmdldChmLCBmLmxvd2VyKCkpIGZvciBmIGluIGZpZWxkcykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW5mb19saW5lcyA9IHNlbGYucnVuX2NvbW1hbmQoY21kLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHNldHVwc2NyaXB0KSkuc3BsaXRsaW5lcygpCisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbGVuKGZpZWxkcykgIT0gbGVuKGluZm9fbGluZXMpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignTWlzbWF0Y2ggYmV0d2VlbiBzZXR1cC5weSBvdXRwdXQgbGluZXMgYW5kIG51bWJlciBvZiBmaWVsZHMnKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgICAgIGZvciBsaW5lbm8sIGxpbmUgaW4gZW51bWVyYXRlKGluZm9fbGluZXMpOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgaW5mb1tmaWVsZHNbbGluZW5vXV0gPSBsaW5lCisgICAgICAgIHJldHVybiBpbmZvCisKKyAgICBkZWYgYXBwbHlfaW5mb19yZXBsYWNlbWVudHMoc2VsZiwgaW5mbyk6CisgICAgICAgIGZvciB2YXJpYWJsZSwgc2VhcmNoLCByZXBsYWNlIGluIHNlbGYucmVwbGFjZW1lbnRzOgorICAgICAgICAgICAgaWYgdmFyaWFibGUgbm90IGluIGluZm86CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZGVmIHJlcGxhY2VfdmFsdWUoc2VhcmNoLCByZXBsYWNlLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgaWYgcmVwbGFjZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2goc2VhcmNoLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZSA9IHJlLnN1YihzZWFyY2gsIHJlcGxhY2UsIHZhbHVlKQorICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSAhPSBuZXdfdmFsdWU6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3X3ZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICAgICAgICAgIHZhbHVlID0gaW5mb1t2YXJpYWJsZV0KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgIG5ld192YWx1ZSA9IHJlcGxhY2VfdmFsdWUoc2VhcmNoLCByZXBsYWNlLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBpZiBuZXdfdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZGVsIGluZm9bdmFyaWFibGVdCisgICAgICAgICAgICAgICAgZWxpZiBuZXdfdmFsdWUgIT0gdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGluZm9bdmFyaWFibGVdID0gbmV3X3ZhbHVlCisgICAgICAgICAgICBlbGlmIGhhc2F0dHIodmFsdWUsICdpdGVyaXRlbXMnKToKKyAgICAgICAgICAgICAgICBmb3IgZGtleSwgZHZhbHVlIGluIHZhbHVlLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBuZXdfbGlzdCA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZvciBwb3MsIGFfdmFsdWUgaW4gZW51bWVyYXRlKGR2YWx1ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfdmFsdWUgPSByZXBsYWNlX3ZhbHVlKHNlYXJjaCwgcmVwbGFjZSwgYV92YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5ld192YWx1ZSBpcyBub3QgTm9uZSBhbmQgbmV3X3ZhbHVlICE9IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19saXN0LmFwcGVuZChuZXdfdmFsdWUpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgIT0gbmV3X2xpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtka2V5XSA9IG5ld19saXN0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5ld19saXN0ID0gW10KKyAgICAgICAgICAgICAgICBmb3IgcG9zLCBhX3ZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZSk6CisgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZSA9IHJlcGxhY2VfdmFsdWUoc2VhcmNoLCByZXBsYWNlLCBhX3ZhbHVlKQorICAgICAgICAgICAgICAgICAgICBpZiBuZXdfdmFsdWUgaXMgbm90IE5vbmUgYW5kIG5ld192YWx1ZSAhPSB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld19saXN0LmFwcGVuZChuZXdfdmFsdWUpCisKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSAhPSBuZXdfbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgaW5mb1t2YXJpYWJsZV0gPSBuZXdfbGlzdAorCisgICAgZGVmIHNjYW5fc2V0dXBfcHl0aG9uX2RlcHMoc2VsZiwgc3JjdHJlZSwgc2V0dXBfaW5mbywgc2V0dXBfbm9uX2xpdGVyYWxzKToKKyAgICAgICAgaWYgJ1BhY2thZ2UtZGlyJyBpbiBzZXR1cF9pbmZvOgorICAgICAgICAgICAgcGFja2FnZV9kaXIgPSBzZXR1cF9pbmZvWydQYWNrYWdlLWRpciddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYWNrYWdlX2RpciA9IHt9CisKKyAgICAgICAgY2xhc3MgUGFja2FnZURpcihkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9weS5idWlsZF9weSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcGFja2FnZV9kaXIpOgorICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZV9kaXIgPSBwYWNrYWdlX2RpcgorCisgICAgICAgIHBkID0gUGFja2FnZURpcihwYWNrYWdlX2RpcikKKyAgICAgICAgdG9fc2NhbiA9IFtdCisgICAgICAgIGlmIG5vdCBhbnkodiBpbiBzZXR1cF9ub25fbGl0ZXJhbHMgZm9yIHYgaW4gWydQeS1tb2R1bGVzJywgJ1NjcmlwdHMnLCAnUGFja2FnZXMnXSk6CisgICAgICAgICAgICBpZiAnUHktbW9kdWxlcycgaW4gc2V0dXBfaW5mbzoKKyAgICAgICAgICAgICAgICBmb3IgbW9kdWxlIGluIHNldHVwX2luZm9bJ1B5LW1vZHVsZXMnXToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwgbW9kdWxlID0gbW9kdWxlLnJzcGxpdCgnLicsIDEpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwgbW9kdWxlID0gJy4nLCBtb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlX3BhdGggPSBvcy5wYXRoLmpvaW4ocGQuZ2V0X3BhY2thZ2VfZGlyKHBhY2thZ2UpLCBtb2R1bGUgKyAnLnB5JykKKyAgICAgICAgICAgICAgICAgICAgdG9fc2Nhbi5hcHBlbmQobW9kdWxlX3BhdGgpCisKKyAgICAgICAgICAgIGlmICdQYWNrYWdlcycgaW4gc2V0dXBfaW5mbzoKKyAgICAgICAgICAgICAgICBmb3IgcGFja2FnZSBpbiBzZXR1cF9pbmZvWydQYWNrYWdlcyddOgorICAgICAgICAgICAgICAgICAgICB0b19zY2FuLmFwcGVuZChwZC5nZXRfcGFja2FnZV9kaXIocGFja2FnZSkpCisKKyAgICAgICAgICAgIGlmICdTY3JpcHRzJyBpbiBzZXR1cF9pbmZvOgorICAgICAgICAgICAgICAgIHRvX3NjYW4uZXh0ZW5kKHNldHVwX2luZm9bJ1NjcmlwdHMnXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTY2FubmluZyB0aGUgZW50aXJlIHNvdXJjZSB0cmVlLCBhcyBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIHNldHVwIGtleXdvcmRzIGFyZSBub24tbGl0ZXJhbDogcHlfbW9kdWxlcywgc2NyaXB0cywgcGFja2FnZXMuIikKKworICAgICAgICBpZiBub3QgdG9fc2NhbjoKKyAgICAgICAgICAgIHRvX3NjYW4gPSBbJy4nXQorCisgICAgICAgIGxvZ2dlci5pbmZvKCJTY2FubmluZyBwYXRocyBmb3IgcGFja2FnZXMgJiBkZXBlbmRlbmNpZXM6ICVzIiwgJywgJy5qb2luKHRvX3NjYW4pKQorCisgICAgICAgIHByb3ZpZGVkX3BhY2thZ2VzID0gc2VsZi5wYXJzZV9wa2dkYXRhX2Zvcl9weXRob25fcGFja2FnZXMoKQorICAgICAgICBzY2FubmVkX2RlcHMgPSBzZWxmLnNjYW5fcHl0aG9uX2RlcGVuZGVuY2llcyhbb3MucGF0aC5qb2luKHNyY3RyZWUsIHApIGZvciBwIGluIHRvX3NjYW5dKQorICAgICAgICBtYXBwZWRfZGVwcywgdW5tYXBwZWRfZGVwcyA9IHNldChzZWxmLmJhc2VfcGtnZGVwcyksIHNldCgpCisgICAgICAgIGZvciBkZXAgaW4gc2Nhbm5lZF9kZXBzOgorICAgICAgICAgICAgbWFwcGVkID0gcHJvdmlkZWRfcGFja2FnZXMuZ2V0KGRlcCkKKyAgICAgICAgICAgIGlmIG1hcHBlZDoKKyAgICAgICAgICAgICAgICBtYXBwZWRfZGVwcy5hZGQobWFwcGVkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB1bm1hcHBlZF9kZXBzLmFkZChkZXApCisgICAgICAgIHJldHVybiBtYXBwZWRfZGVwcywgdW5tYXBwZWRfZGVwcworCisgICAgZGVmIHNjYW5fcHl0aG9uX2RlcGVuZGVuY2llcyhzZWxmLCBwYXRocyk6CisgICAgICAgIGRlcHMgPSBzZXQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZXBfb3V0cHV0ID0gc2VsZi5ydW5fY29tbWFuZChbJ3B5dGhvbmRlcHMnLCAnLWQnXSArIHBhdGhzKQorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGRlcF9vdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgZGVwLCBmaWxlbmFtZSA9IGxpbmUuc3BsaXQoJ1x0JywgMSkKKyAgICAgICAgICAgICAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgnL3NldHVwLnB5Jyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZGVwcy5hZGQoZGVwKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByb3ZpZGVzX291dHB1dCA9IHNlbGYucnVuX2NvbW1hbmQoWydweXRob25kZXBzJywgJy1wJ10gKyBwYXRocykKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcm92aWRlc19saW5lcyA9IChsLnJzdHJpcCgpIGZvciBsIGluIHByb3ZpZGVzX291dHB1dC5zcGxpdGxpbmVzKCkpCisgICAgICAgICAgICBwcm92aWRlcyA9IHNldChsIGZvciBsIGluIHByb3ZpZGVzX2xpbmVzIGlmIGwgYW5kIGwgIT0gJ3NldHVwJykKKyAgICAgICAgICAgIGRlcHMgLT0gcHJvdmlkZXMKKworICAgICAgICByZXR1cm4gZGVwcworCisgICAgZGVmIHBhcnNlX3BrZ2RhdGFfZm9yX3B5dGhvbl9wYWNrYWdlcyhzZWxmKToKKyAgICAgICAgc3VmZml4ZXMgPSBbdFswXSBmb3IgdCBpbiBpbXAuZ2V0X3N1ZmZpeGVzKCldCisgICAgICAgIHBrZ2RhdGFfZGlyID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSkKKworICAgICAgICBsZGF0YSA9IHRpbmZvaWwuY29uZmlnX2RhdGEuY3JlYXRlQ29weSgpCisgICAgICAgIGJiLnBhcnNlLmhhbmRsZSgnY2xhc3Nlcy9weXRob24tZGlyLmJiY2xhc3MnLCBsZGF0YSwgVHJ1ZSkKKyAgICAgICAgcHl0aG9uX3NpdGVkaXIgPSBsZGF0YS5nZXRWYXIoJ1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSJywgVHJ1ZSkKKworICAgICAgICBkeW5sb2FkX2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUocHl0aG9uX3NpdGVkaXIpLCAnbGliLWR5bmxvYWQnKQorICAgICAgICBweXRob25fZGlycyA9IFtweXRob25fc2l0ZWRpciArIG9zLnNlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShweXRob25fc2l0ZWRpciksICdkaXN0LXBhY2thZ2VzJykgKyBvcy5zZXAsCisgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZShweXRob25fc2l0ZWRpcikgKyBvcy5zZXBdCisgICAgICAgIHBhY2thZ2VzID0ge30KKyAgICAgICAgZm9yIHBrZ2RhdGFmaWxlIGluIGdsb2IuZ2xvYigne30vcnVudGltZS8qJy5mb3JtYXQocGtnZGF0YV9kaXIpKToKKyAgICAgICAgICAgIGZpbGVzX2luZm8gPSBOb25lCisgICAgICAgICAgICB3aXRoIG9wZW4ocGtnZGF0YWZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICBmaWVsZCwgdmFsdWUgPSBsaW5lLnNwbGl0KCc6ICcsIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIGZpZWxkID09ICdGSUxFU19JTkZPJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzX2luZm8gPSBhc3QubGl0ZXJhbF9ldmFsKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmb3IgZm4gaW4gZmlsZXNfaW5mby5pdGVya2V5cygpOgorICAgICAgICAgICAgICAgIGZvciBzdWZmaXggaW4gc3VmZml4ZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIGZuLmVuZHN3aXRoKHN1ZmZpeCk6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBmbi5zdGFydHN3aXRoKGR5bmxvYWRfZGlyICsgb3Muc2VwKToKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IG9zLnBhdGguYmFzZW5hbWUoZm4pCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkID0gYmFzZS5zcGxpdCgnLicsIDEpWzBdCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzW3Byb3ZpZGVkXSA9IG9zLnBhdGguYmFzZW5hbWUocGtnZGF0YWZpbGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBmb3IgcHl0aG9uX2RpciBpbiBweXRob25fZGlyczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZm4uc3RhcnRzd2l0aChweXRob25fZGlyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbHBhdGggPSBmbltsZW4ocHl0aG9uX2Rpcik6XQorICAgICAgICAgICAgICAgICAgICAgICAgcmVsc3RhcnQsIF8sIHJlbHJlbWFpbmluZyA9IHJlbHBhdGgucGFydGl0aW9uKG9zLnNlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlbHN0YXJ0LmVuZHN3aXRoKCcuZWdnJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVscGF0aCA9IHJlbHJlbWFpbmluZworICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSwgXyA9IG9zLnBhdGguc3BsaXRleHQocmVscGF0aCkKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgJy8uZGVidWcvJyBpbiBiYXNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKGJhc2UpID09ICdfX2luaXRfXyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSA9IG9zLnBhdGguZGlybmFtZShiYXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSA9IGJhc2UucmVwbGFjZShvcy5zZXAgKyBvcy5zZXAsIG9zLnNlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkID0gYmFzZS5yZXBsYWNlKG9zLnNlcCwgJy4nKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXNbcHJvdmlkZWRdID0gb3MucGF0aC5iYXNlbmFtZShwa2dkYXRhZmlsZSkKKyAgICAgICAgcmV0dXJuIHBhY2thZ2VzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcnVuX2NvbW1hbmQoY2xzLCBjbWQsICoqcG9wZW5hcmdzKToKKyAgICAgICAgaWYgJ3N0ZGVycicgbm90IGluIHBvcGVuYXJnczoKKyAgICAgICAgICAgIHBvcGVuYXJnc1snc3RkZXJyJ10gPSBzdWJwcm9jZXNzLlNURE9VVAorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCAqKnBvcGVuYXJncykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gcnVuIGB7fWA6IHt9JywgJyAnLmpvaW4oY21kKSwgZXhjKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJ1biBge31gOiB7fScsICcgJy5qb2luKGNtZCksIGV4Yy5vdXRwdXQpCisgICAgICAgICAgICByYWlzZQorCisKK2RlZiBnYXRoZXJfc2V0dXBfaW5mbyhmaWxlb2JqKToKKyAgICBwYXJzZWQgPSBhc3QucGFyc2UoZmlsZW9iai5yZWFkKCksIGZpbGVvYmoubmFtZSkKKyAgICB2aXNpdG9yID0gU2V0dXBTY3JpcHRWaXNpdG9yKCkKKyAgICB2aXNpdG9yLnZpc2l0KHBhcnNlZCkKKworICAgIG5vbl9saXRlcmFscywgZXh0ZW5zaW9ucyA9IHt9LCBbXQorICAgIGZvciBrZXksIHZhbHVlIGluIHZpc2l0b3Iua2V5d29yZHMuaXRlbXMoKToKKyAgICAgICAgaWYga2V5ID09ICdleHRfbW9kdWxlcyc6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKKyAgICAgICAgICAgICAgICBmb3IgZXh0IGluIHZhbHVlOgorICAgICAgICAgICAgICAgICAgICBpZiAgKGlzaW5zdGFuY2UoZXh0LCBhc3QuQ2FsbCkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShleHQuZnVuYywgYXN0Lk5hbWUpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4dC5mdW5jLmlkID09ICdFeHRlbnNpb24nIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBoYXNfbm9uX2xpdGVyYWxzKGV4dC5hcmdzKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLmFwcGVuZChleHQuYXJnc1swXSkKKyAgICAgICAgZWxpZiBoYXNfbm9uX2xpdGVyYWxzKHZhbHVlKToKKyAgICAgICAgICAgIG5vbl9saXRlcmFsc1trZXldID0gdmFsdWUKKyAgICAgICAgICAgIGRlbCB2aXNpdG9yLmtleXdvcmRzW2tleV0KKworICAgIHJldHVybiB2aXNpdG9yLmtleXdvcmRzLCB2aXNpdG9yLmltcG9ydGVkX21vZHVsZXMsIG5vbl9saXRlcmFscywgZXh0ZW5zaW9ucworCisKK2NsYXNzIFNldHVwU2NyaXB0VmlzaXRvcihhc3QuTm9kZVZpc2l0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgYXN0Lk5vZGVWaXNpdG9yLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYua2V5d29yZHMgPSB7fQorICAgICAgICBzZWxmLm5vbl9saXRlcmFscyA9IFtdCisgICAgICAgIHNlbGYuaW1wb3J0ZWRfbW9kdWxlcyA9IHNldCgpCisKKyAgICBkZWYgdmlzaXRfRXhwcihzZWxmLCBub2RlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLnZhbHVlLCBhc3QuQ2FsbCkgYW5kIFwKKyAgICAgICAgICAgaXNpbnN0YW5jZShub2RlLnZhbHVlLmZ1bmMsIGFzdC5OYW1lKSBhbmQgXAorICAgICAgICAgICBub2RlLnZhbHVlLmZ1bmMuaWQgPT0gJ3NldHVwJzoKKyAgICAgICAgICAgIHNlbGYudmlzaXRfc2V0dXAobm9kZS52YWx1ZSkKKworICAgIGRlZiB2aXNpdF9zZXR1cChzZWxmLCBub2RlKToKKyAgICAgICAgY2FsbCA9IExpdGVyYWxBc3RUcmFuc2Zvcm0oKS52aXNpdChub2RlKQorICAgICAgICBzZWxmLmtleXdvcmRzID0gY2FsbC5rZXl3b3JkcworICAgICAgICBmb3IgaywgdiBpbiBzZWxmLmtleXdvcmRzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgaGFzX25vbl9saXRlcmFscyh2KToKKyAgICAgICAgICAgICAgIHNlbGYubm9uX2xpdGVyYWxzLmFwcGVuZChrKQorCisgICAgZGVmIHZpc2l0X0ltcG9ydChzZWxmLCBub2RlKToKKyAgICAgICAgZm9yIGFsaWFzIGluIG5vZGUubmFtZXM6CisgICAgICAgICAgICBzZWxmLmltcG9ydGVkX21vZHVsZXMuYWRkKGFsaWFzLm5hbWUpCisKKyAgICBkZWYgdmlzaXRfSW1wb3J0RnJvbShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5pbXBvcnRlZF9tb2R1bGVzLmFkZChub2RlLm1vZHVsZSkKKworCitjbGFzcyBMaXRlcmFsQXN0VHJhbnNmb3JtKGFzdC5Ob2RlVHJhbnNmb3JtZXIpOgorICAgICIiIlNpbXBsaWZ5IHRoZSBhc3QgdGhyb3VnaCBldmFsdWF0aW9uIG9mIGxpdGVyYWxzLiIiIgorICAgIGV4Y2x1ZGVkX2ZpZWxkcyA9IFsnY3R4J10KKworICAgIGRlZiB2aXNpdChzZWxmLCBub2RlKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uobm9kZSwgYXN0LkFTVCk6CisgICAgICAgICAgICByZXR1cm4gbm9kZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGFzdC5Ob2RlVHJhbnNmb3JtZXIudmlzaXQoc2VsZiwgbm9kZSkKKworICAgIGRlZiBnZW5lcmljX3Zpc2l0KHNlbGYsIG5vZGUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gYXN0LmxpdGVyYWxfZXZhbChub2RlKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGZvciBmaWVsZCwgdmFsdWUgaW4gYXN0Lml0ZXJfZmllbGRzKG5vZGUpOgorICAgICAgICAgICAgICAgIGlmIGZpZWxkIGluIHNlbGYuZXhjbHVkZWRfZmllbGRzOgorICAgICAgICAgICAgICAgICAgICBkZWxhdHRyKG5vZGUsIGZpZWxkKQorICAgICAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgaWYgZmllbGQgaW4gKCdrZXl3b3JkcycsICdrd2FyZ3MnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZSA9IGRpY3QoKGt3LmFyZywgc2VsZi52aXNpdChrdy52YWx1ZSkpIGZvciBrdyBpbiB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZSA9IFtzZWxmLnZpc2l0KGkpIGZvciBpIGluIHZhbHVlXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZSA9IHNlbGYudmlzaXQodmFsdWUpCisgICAgICAgICAgICAgICAgc2V0YXR0cihub2RlLCBmaWVsZCwgbmV3X3ZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUKKworICAgIGRlZiB2aXNpdF9OYW1lKHNlbGYsIG5vZGUpOgorICAgICAgICBpZiBoYXNhdHRyKCdfX2J1aWx0aW5zX18nLCBub2RlLmlkKToKKyAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKF9fYnVpbHRpbnNfXywgbm9kZS5pZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdlbmVyaWNfdmlzaXQobm9kZSkKKworICAgIGRlZiB2aXNpdF9UdXBsZShzZWxmLCBub2RlKToKKyAgICAgICAgcmV0dXJuIHR1cGxlKHNlbGYudmlzaXQodikgZm9yIHYgaW4gbm9kZS5lbHRzKQorCisgICAgZGVmIHZpc2l0X0xpc3Qoc2VsZiwgbm9kZSk6CisgICAgICAgIHJldHVybiBbc2VsZi52aXNpdCh2KSBmb3IgdiBpbiBub2RlLmVsdHNdCisKKyAgICBkZWYgdmlzaXRfU2V0KHNlbGYsIG5vZGUpOgorICAgICAgICByZXR1cm4gc2V0KHNlbGYudmlzaXQodikgZm9yIHYgaW4gbm9kZS5lbHRzKQorCisgICAgZGVmIHZpc2l0X0RpY3Qoc2VsZiwgbm9kZSk6CisgICAgICAgIGtleXMgPSAoc2VsZi52aXNpdChrKSBmb3IgayBpbiBub2RlLmtleXMpCisgICAgICAgIHZhbHVlcyA9IChzZWxmLnZpc2l0KHYpIGZvciB2IGluIG5vZGUudmFsdWVzKQorICAgICAgICByZXR1cm4gZGljdCh6aXAoa2V5cywgdmFsdWVzKSkKKworCitkZWYgaGFzX25vbl9saXRlcmFscyh2YWx1ZSk6CisgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYXN0LkFTVCk6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZWxpZiBoYXNhdHRyKHZhbHVlLCAnaXRlcnZhbHVlcycpOgorICAgICAgICByZXR1cm4gYW55KGhhc19ub25fbGl0ZXJhbHModikgZm9yIHYgaW4gdmFsdWUuaXRlcnZhbHVlcygpKQorICAgIGVsaWYgaGFzYXR0cih2YWx1ZSwgJ19faXRlcl9fJyk6CisgICAgICAgIHJldHVybiBhbnkoaGFzX25vbl9saXRlcmFscyh2KSBmb3IgdiBpbiB2YWx1ZSkKKworCitkZWYgcmVnaXN0ZXJfcmVjaXBlX2hhbmRsZXJzKGhhbmRsZXJzKToKKyAgICAjIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWhlYWQgb2YgdGhlIG1ha2VmaWxlIGZhbGxiYWNrIGhhbmRsZXIKKyAgICBoYW5kbGVycy5pbnNlcnQoMCwgUHl0aG9uUmVjaXBlSGFuZGxlcigpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9zY3JpcHRwYXRoLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9zY3JpcHRwYXRoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMDMxN2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3NjcmlwdHBhdGgucHkKQEAgLTAsMCArMSw0MiBAQAorIyBQYXRoIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBPRSBweXRob24gc2NyaXB0cworIworIyBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTEgTWVudG9yIEdyYXBoaWNzIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCisKK2RlZiBhZGRfb2VfbGliX3BhdGgoKToKKyAgICBiYXNlcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pICsgJy8uLi8uLicpCisgICAgbmV3cGF0aCA9IGJhc2VwYXRoICsgJy9tZXRhL2xpYicKKyAgICBzeXMucGF0aC5pbnNlcnQoMCwgbmV3cGF0aCkKKworZGVmIGFkZF9iaXRiYWtlX2xpYl9wYXRoKCk6CisgICAgYmFzZXBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSArICcvLi4vLi4nKQorICAgIGJpdGJha2VwYXRoID0gTm9uZQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGJhc2VwYXRoICsgJy9iaXRiYWtlL2xpYi9iYicpOgorICAgICAgICBiaXRiYWtlcGF0aCA9IGJhc2VwYXRoICsgJy9iaXRiYWtlJworICAgIGVsc2U6CisgICAgICAgICMgbG9vayBmb3IgYml0YmFrZS9iaW4gZGlyIGluIFBBVEgKKyAgICAgICAgZm9yIHB0aCBpbiBvcy5lbnZpcm9uWydQQVRIJ10uc3BsaXQoJzonKToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwdGgsICcuLi9saWIvYmInKSk6CisgICAgICAgICAgICAgICAgYml0YmFrZXBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHB0aCwgJy4uJykpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGlmIGJpdGJha2VwYXRoOgorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgYml0YmFrZXBhdGggKyAnL2xpYicpCisgICAgcmV0dXJuIGJpdGJha2VwYXRoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3NjcmlwdHV0aWxzLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9zY3JpcHR1dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzY2ODgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9zY3JpcHR1dGlscy5weQpAQCAtMCwwICsxLDk4IEBACisjIFNjcmlwdCB1dGlsaXR5IGZ1bmN0aW9ucworIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBnbG9iCisKK2RlZiBsb2dnZXJfY3JlYXRlKG5hbWUpOgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKG5hbWUpCisgICAgbG9nZ2VyaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCisgICAgbG9nZ2VyaGFuZGxlci5zZXRGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIoIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIobG9nZ2VyaGFuZGxlcikKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIHJldHVybiBsb2dnZXIKKworZGVmIGxvZ2dlcl9zZXR1cF9jb2xvcihsb2dnZXIsIGNvbG9yPSdhdXRvJyk6CisgICAgZnJvbSBiYi5tc2cgaW1wb3J0IEJCTG9nRm9ybWF0dGVyCisgICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3Rkb3V0KQorICAgIGZvcm1hdHRlciA9IEJCTG9nRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpCisgICAgY29uc29sZS5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorICAgIGxvZ2dlci5oYW5kbGVycyA9IFtjb25zb2xlXQorICAgIGlmIGNvbG9yID09ICdhbHdheXMnIG9yIChjb2xvcj09J2F1dG8nIGFuZCBjb25zb2xlLnN0cmVhbS5pc2F0dHkoKSk6CisgICAgICAgIGZvcm1hdHRlci5lbmFibGVfY29sb3IoKQorCisKK2RlZiBsb2FkX3BsdWdpbnMobG9nZ2VyLCBwbHVnaW5zLCBwbHVnaW5wYXRoKToKKyAgICBpbXBvcnQgaW1wCisKKyAgICBkZWYgbG9hZF9wbHVnaW4obmFtZSk6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygnTG9hZGluZyBwbHVnaW4gJXMnICUgbmFtZSkKKyAgICAgICAgZnAsIHBhdGhuYW1lLCBkZXNjcmlwdGlvbiA9IGltcC5maW5kX21vZHVsZShuYW1lLCBbcGx1Z2lucGF0aF0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBpbXAubG9hZF9tb2R1bGUobmFtZSwgZnAsIHBhdGhuYW1lLCBkZXNjcmlwdGlvbikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIGZwOgorICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKKworICAgIGxvZ2dlci5kZWJ1ZygnTG9hZGluZyBwbHVnaW5zIGZyb20gJXMuLi4nICUgcGx1Z2lucGF0aCkKKyAgICBmb3IgZm4gaW4gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihwbHVnaW5wYXRoLCAnKi5weScpKToKKyAgICAgICAgbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShmbikpWzBdCisgICAgICAgIGlmIG5hbWUgIT0gJ19faW5pdF9fJzoKKyAgICAgICAgICAgIHBsdWdpbiA9IGxvYWRfcGx1Z2luKG5hbWUpCisgICAgICAgICAgICBpZiBoYXNhdHRyKHBsdWdpbiwgJ3BsdWdpbl9pbml0Jyk6CisgICAgICAgICAgICAgICAgcGx1Z2luLnBsdWdpbl9pbml0KHBsdWdpbnMpCisgICAgICAgICAgICBwbHVnaW5zLmFwcGVuZChwbHVnaW4pCisKK2RlZiBnaXRfY29udmVydF9zdGFuZGFsb25lX2Nsb25lKHJlcG9kaXIpOgorICAgICIiIklmIHNwZWNpZmllZCBkaXJlY3RvcnkgaXMgYSBnaXQgcmVwb3NpdG9yeSwgZW5zdXJlIGl0J3MgYSBzdGFuZGFsb25lIGNsb25lIiIiCisgICAgaW1wb3J0IGJiLnByb2Nlc3MKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocmVwb2RpciwgJy5naXQnKSk6CisgICAgICAgIGFsdGVybmF0ZXNmaWxlID0gb3MucGF0aC5qb2luKHJlcG9kaXIsICcuZ2l0JywgJ29iamVjdHMnLCAnaW5mbycsICdhbHRlcm5hdGVzJykKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoYWx0ZXJuYXRlc2ZpbGUpOgorICAgICAgICAgICAgIyBUaGlzIHdpbGwgaGF2ZSBiZWVuIGNsb25lZCB3aXRoIC1zLCBzbyB3ZSBuZWVkIHRvIGNvbnZlcnQgaXQgc28gbm9uZQorICAgICAgICAgICAgIyBvZiB0aGUgY29udGVudHMgaXMgc2hhcmVkCisgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bignZ2l0IHJlcGFjayAtYScsIGN3ZD1yZXBvZGlyKQorICAgICAgICAgICAgb3MucmVtb3ZlKGFsdGVybmF0ZXNmaWxlKQorCitkZWYgZmV0Y2hfdXJpKGQsIHVyaSwgZGVzdGRpciwgc3JjcmV2PU5vbmUpOgorICAgICIiIkZldGNoIGEgVVJJIHRvIGEgbG9jYWwgZGlyZWN0b3J5IiIiCisgICAgaW1wb3J0IGJiLmRhdGEKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZGVzdGRpcikKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdCQl9TVFJJQ1RfQ0hFQ0tTVU0nLCAnJykKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdTUkNSRVYnLCBzcmNyZXYpCisgICAgcmV0ID0gKE5vbmUsIE5vbmUpCisgICAgb2xkZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICB0cnk6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goW3VyaV0sIGxvY2FsZGF0YSkKKyAgICAgICAgZm9yIHUgaW4gZmV0Y2hlci51ZDoKKyAgICAgICAgICAgIHVkID0gZmV0Y2hlci51ZFt1XQorICAgICAgICAgICAgdWQuaWdub3JlX2NoZWNrc3VtcyA9IFRydWUKKyAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgIGZldGNoZXIudW5wYWNrKGRlc3RkaXIpCisgICAgICAgIGZvciB1IGluIGZldGNoZXIudWQ6CisgICAgICAgICAgICB1ZCA9IGZldGNoZXIudWRbdV0KKyAgICAgICAgICAgIGlmIHVkLm1ldGhvZC5yZWNvbW1lbmRzX2NoZWNrc3VtKHVkKToKKyAgICAgICAgICAgICAgICBtZDV2YWx1ZSA9IGJiLnV0aWxzLm1kNV9maWxlKHVkLmxvY2FscGF0aCkKKyAgICAgICAgICAgICAgICBzaGEyNTZ2YWx1ZSA9IGJiLnV0aWxzLnNoYTI1Nl9maWxlKHVkLmxvY2FscGF0aCkKKyAgICAgICAgICAgICAgICByZXQgPSAobWQ1dmFsdWUsIHNoYTI1NnZhbHVlKQorICAgIGZpbmFsbHk6CisgICAgICAgIG9zLmNoZGlyKG9sZGRpcikKKyAgICByZXR1cm4gcmV0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9iYXNlLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvYmFzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmM4ZjU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvYmFzZS5weQpAQCAtMCwwICsxLDQ2NiBAQAorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMDYsIDIwMDcsIDIwMDggUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKKyIiIgorQmFzZSBjbGFzc2VzIGZvciBjcmVhdGluZyBjb21tYW5kcyBhbmQgc3ludGF4IHZlcnNpb24gb2JqZWN0LgorCitUaGlzIG1vZHVsZSBleHBvcnRzIHNldmVyYWwgaW1wb3J0YW50IGJhc2UgY2xhc3NlczoKKworICAgIEJhc2VEYXRhIC0gVGhlIGJhc2UgYWJzdHJhY3QgY2xhc3MgZm9yIGFsbCBkYXRhIG9iamVjdHMuICBEYXRhIG9iamVjdHMKKyAgICAgICAgICAgICAgIGFyZSBjb250YWluZWQgd2l0aGluIGEgQmFzZUhhbmRsZXIgb2JqZWN0LgorCisgICAgQmFzZUhhbmRsZXIgLSBUaGUgYmFzZSBhYnN0cmFjdCBjbGFzcyBmcm9tIHdoaWNoIHZlcnNpb25lZCBraWNrc3RhcnQKKyAgICAgICAgICAgICAgICAgIGhhbmRsZXIgYXJlIGRlcml2ZWQuICBTdWJjbGFzc2VzIG9mIEJhc2VIYW5kbGVyIGhvbGQKKyAgICAgICAgICAgICAgICAgIEJhc2VEYXRhIGFuZCBLaWNrc3RhcnRDb21tYW5kIG9iamVjdHMuCisKKyAgICBEZXByZWNhdGVkQ29tbWFuZCAtIEFuIGFic3RyYWN0IHN1YmNsYXNzIG9mIEtpY2tzdGFydENvbW1hbmQgdGhhdCBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlIGZ1cnRoZXIgc3ViY2xhc3NlZCBieSB1c2VycyBvZiB0aGlzIG1vZHVsZS4gIFdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGEgc3ViY2xhc3MgaXMgdXNlZCwgYSB3YXJuaW5nIG1lc3NhZ2Ugd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRlZC4KKworICAgIEtpY2tzdGFydENvbW1hbmQgLSBUaGUgYmFzZSBhYnN0cmFjdCBjbGFzcyBmb3IgYWxsIGtpY2tzdGFydCBjb21tYW5kcy4KKyAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZCBvYmplY3RzIGFyZSBjb250YWluZWQgd2l0aGluIGEgQmFzZUhhbmRsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LgorIiIiCitpbXBvcnQgZ2V0dGV4dAorZ2V0dGV4dC50ZXh0ZG9tYWluKCJweWtpY2tzdGFydCIpCitfID0gbGFtYmRhIHg6IGdldHRleHQubGRnZXR0ZXh0KCJweWtpY2tzdGFydCIsIHgpCisKK2ltcG9ydCB0eXBlcworaW1wb3J0IHdhcm5pbmdzCitmcm9tIHB5a2lja3N0YXJ0LmVycm9ycyBpbXBvcnQgKgorZnJvbSBweWtpY2tzdGFydC5rbyBpbXBvcnQgKgorZnJvbSBweWtpY2tzdGFydC5wYXJzZXIgaW1wb3J0IFBhY2thZ2VzCitmcm9tIHB5a2lja3N0YXJ0LnZlcnNpb24gaW1wb3J0IHZlcnNpb25Ub1N0cmluZworCisjIyMKKyMjIyBDT01NQU5EUworIyMjCitjbGFzcyBLaWNrc3RhcnRDb21tYW5kKEtpY2tzdGFydE9iamVjdCk6CisgICAgIiIiVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBraWNrc3RhcnQgY29tbWFuZHMuICBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzLiIiIgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IFtdCisgICAgcmVtb3ZlZEF0dHJzID0gW10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5PTAsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBLaWNrc3RhcnRDb21tYW5kIGluc3RhbmNlLiAgVGhpcyBtZXRob2QgbXVzdCBiZQorICAgICAgICAgICBwcm92aWRlZCBieSBhbGwgc3ViY2xhc3NlcywgYnV0IHN1YmNsYXNzZXMgbXVzdCBjYWxsCisgICAgICAgICAgIEtpY2tzdGFydENvbW1hbmQuX19pbml0X18gZmlyc3QuICBJbnN0YW5jZSBhdHRyaWJ1dGVzOgorCisgICAgICAgICAgIGN1cnJlbnRDbWQgICAgLS0gVGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgaW4gdGhlIGlucHV0IGZpbGUgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdXNlZCB0aGlzIGhhbmRsZXIgdG8gYmUgcnVuLgorICAgICAgICAgICBjdXJyZW50TGluZSAgIC0tIFRoZSBjdXJyZW50IHVucHJvY2Vzc2VkIGxpbmUgZnJvbSB0aGUgaW5wdXQgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY2F1c2VkIHRoaXMgaGFuZGxlciB0byBiZSBydW4uCisgICAgICAgICAgIGhhbmRsZXIgICAgICAgLS0gQSByZWZlcmVuY2UgdG8gdGhlIEJhc2VIYW5kbGVyIHN1YmNsYXNzIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIGlzIGNvbnRhaW5lZCB3aXRoaW5nLiAgVGhpcyBpcyBuZWVkZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdyByZWZlcmVuY2luZyBvZiBEYXRhIG9iamVjdHMuCisgICAgICAgICAgIGxpbmVubyAgICAgICAgLS0gVGhlIGN1cnJlbnQgbGluZSBudW1iZXIgaW4gdGhlIGlucHV0IGZpbGUuCisgICAgICAgICAgIHdyaXRlUHJpb3JpdHkgLS0gQW4gaW50ZWdlciBzcGVjaWZ5aW5nIHdoZW4gdGhpcyBjb21tYW5kIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZWQgd2hlbiBpdGVyYXRpbmcgb3ZlciBhbGwgY29tbWFuZHMnIF9fc3RyX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RzLiAgVGhlIGhpZ2hlciB0aGUgbnVtYmVyLCB0aGUgbGF0ZXIgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgd2lsbCBiZSB3cml0dGVuLiAgQWxsIGNvbW1hbmRzIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSBwcmlvcml0eSB3aWxsIGJlIHdyaXR0ZW4gYWxwaGFiZXRpY2FsbHkuCisgICAgICAgICIiIgorCisgICAgICAgICMgV2UgZG9uJ3Qgd2FudCBwZW9wbGUgdXNpbmcgdGhpcyBjbGFzcyBieSBpdHNlbGYuCisgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIEtpY2tzdGFydENvbW1hbmQ6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsICJLaWNrc3RhcnRDb21tYW5kIGlzIGFuIGFic3RyYWN0IGNsYXNzLiIKKworICAgICAgICBLaWNrc3RhcnRPYmplY3QuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIHNlbGYud3JpdGVQcmlvcml0eSA9IHdyaXRlUHJpb3JpdHkKKworICAgICAgICAjIFRoZXNlIHdpbGwgYmUgc2V0IGJ5IHRoZSBkaXNwYXRjaGVyLgorICAgICAgICBzZWxmLmN1cnJlbnRDbWQgPSAiIgorICAgICAgICBzZWxmLmN1cnJlbnRMaW5lID0gIiIKKyAgICAgICAgc2VsZi5oYW5kbGVyID0gTm9uZQorICAgICAgICBzZWxmLmxpbmVubyA9IDAKKworICAgICAgICAjIElmIGEgc3ViY2xhc3MgcHJvdmlkZXMgYSByZW1vdmVkS2V5d29yZHMgbGlzdCwgcmVtb3ZlIGFsbCB0aGUKKyAgICAgICAgIyBtZW1iZXJzIGZyb20gdGhlIGt3YXJncyBsaXN0IGJlZm9yZSB3ZSBzdGFydCBwcm9jZXNzaW5nIGl0LiAgVGhpcworICAgICAgICAjIGVuc3VyZXMgdGhhdCBzdWJjbGFzc2VzIGRvbid0IGNvbnRpbnVlIHRvIHJlY29nbml6ZSBhcmd1bWVudHMgdGhhdAorICAgICAgICAjIHdlcmUgcmVtb3ZlZC4KKyAgICAgICAgZm9yIGFyZyBpbiBmaWx0ZXIoa3dhcmdzLmhhc19rZXksIHNlbGYucmVtb3ZlZEtleXdvcmRzKToKKyAgICAgICAgICAgIGt3YXJncy5wb3AoYXJnKQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIlNldCBtdWx0aXBsZSBhdHRyaWJ1dGVzIG9uIGEgc3ViY2xhc3Mgb2YgS2lja3N0YXJ0Q29tbWFuZCBhdCBvbmNlCisgICAgICAgICAgIHZpYSBrZXl3b3JkIGFyZ3VtZW50cy4gIFZhbGlkIGF0dHJpYnV0ZXMgYXJlIGFueXRoaW5nIHNwZWNpZmllZCBpbgorICAgICAgICAgICBhIHN1YmNsYXNzLCBidXQgdW5rbm93biBhdHRyaWJ1dGVzIHdpbGwgYmUgaWdub3JlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGZvciAoa2V5LCB2YWwpIGluIGt3YXJncy5pdGVtcygpOgorICAgICAgICAgICAgIyBJZ25vcmUgc2V0dGluZyBhdHRyaWJ1dGVzIHRoYXQgd2VyZSByZW1vdmVkIGluIGEgc3ViY2xhc3MsIGFzCisgICAgICAgICAgICAjIGlmIHRoZXkgd2VyZSB1bmtub3duIGF0dHJpYnV0ZXMuCisgICAgICAgICAgICBpZiBrZXkgaW4gc2VsZi5yZW1vdmVkQXR0cnM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5LCB2YWwpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIGZvcm1hdHRlZCBmb3Igb3V0cHV0IHRvIGEga2lja3N0YXJ0IGZpbGUuICBUaGlzCisgICAgICAgICAgIG1ldGhvZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IGFsbCBzdWJjbGFzc2VzLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIEtpY2tzdGFydE9iamVjdC5fX3N0cl9fKHNlbGYpCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYXJncyk6CisgICAgICAgICIiIlBhcnNlIHRoZSBsaXN0IG9mIGFyZ3MgYW5kIHNldCBkYXRhIG9uIHRoZSBLaWNrc3RhcnRDb21tYW5kIG9iamVjdC4KKyAgICAgICAgICAgVGhpcyBtZXRob2QgbXVzdCBiZSBwcm92aWRlZCBieSBhbGwgc3ViY2xhc3Nlcy4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgInBhcnNlKCkgbm90IGltcGxlbWVudGVkIGZvciBLaWNrc3RhcnRDb21tYW5kIgorCisgICAgZGVmIGFwcGx5KHNlbGYsIGluc3Ryb290PSIvIik6CisgICAgICAgICIiIldyaXRlIG91dCB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHRoZSBLaWNrc3RhcnRDb21tYW5kIG9iamVjdC4KKyAgICAgICAgICAgU3ViY2xhc3NlcyB3aGljaCBkbyBub3QgcHJvdmlkZSB0aGlzIG1ldGhvZCB3aWxsIG5vdCBoYXZlIHRoZWlyCisgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gd3JpdHRlbiBvdXQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4KKworICAgIGRlZiBkYXRhTGlzdChzZWxmKToKKyAgICAgICAgIiIiRm9yIGNvbW1hbmRzIHRoYXQgY2FuIG9jY3VyIG11bHRpcGxlIHRpbWVzIGluIGEgc2luZ2xlIGtpY2tzdGFydAorICAgICAgICAgICBmaWxlIChsaWtlIG5ldHdvcmssIHBhcnQsIGV0Yy4pLCByZXR1cm4gdGhlIGxpc3QgdGhhdCB3ZSBzaG91bGQKKyAgICAgICAgICAgYXBwZW5kIG1vcmUgZGF0YSBvYmplY3RzIHRvLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBkZWxldGVSZW1vdmVkQXR0cnMoc2VsZik6CisgICAgICAgICIiIlJlbW92ZSBhbGwgYXR0cmlidXRlcyBmcm9tIHNlbGYgdGhhdCBhcmUgZ2l2ZW4gaW4gdGhlIHJlbW92ZWRBdHRycworICAgICAgICAgICBsaXN0LiAgVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIF9faW5pdF9fIGluIGEgc3ViY2xhc3MsCisgICAgICAgICAgIGJ1dCBvbmx5IGFmdGVyIHRoZSBzdXBlcmNsYXNzJ3MgX19pbml0X18gbWV0aG9kIGhhcyBiZWVuIGNhbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGZvciBhdHRyIGluIGZpbHRlcihsYW1iZGEgazogaGFzYXR0cihzZWxmLCBrKSwgc2VsZi5yZW1vdmVkQXR0cnMpOgorICAgICAgICAgICAgZGVsYXR0cihzZWxmLCBhdHRyKQorCisgICAgIyBTZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBvcHRzIG9iamVjdCAoYW4gaW5zdGFuY2Ugb2Ygb3B0cGFyc2UuVmFsdWVzCisgICAgIyByZXR1cm5lZCBieSBwYXJzZV9hcmdzKSBhcyBhdHRyaWJ1dGVzIG9uIHRoZSBLaWNrc3RhcnRDb21tYW5kIG9iamVjdC4KKyAgICAjIEl0J3MgdXNlZnVsIHRvIGNhbGwgdGhpcyBmcm9tIEtpY2tzdGFydENvbW1hbmQgc3ViY2xhc3NlcyBhZnRlciBwYXJzaW5nCisgICAgIyB0aGUgYXJndW1lbnRzLgorICAgIGRlZiBfc2V0VG9TZWxmKHNlbGYsIG9wdFBhcnNlciwgb3B0cyk6CisgICAgICAgIHNlbGYuX3NldFRvT2JqKG9wdFBhcnNlciwgb3B0cywgc2VsZikKKworICAgICMgU2V0cyB0aGUgY29udGVudHMgb2YgdGhlIG9wdHMgb2JqZWN0IChhbiBpbnN0YW5jZSBvZiBvcHRwYXJzZS5WYWx1ZXMKKyAgICAjIHJldHVybmVkIGJ5IHBhcnNlX2FyZ3MpIGFzIGF0dHJpYnV0ZXMgb24gdGhlIHByb3ZpZGVkIG9iamVjdCBvYmouICBJdCdzCisgICAgIyB1c2VmdWwgdG8gY2FsbCB0aGlzIGZyb20gS2lja3N0YXJ0Q29tbWFuZCBzdWJjbGFzc2VzIHRoYXQgaGFuZGxlIGxpc3RzCisgICAgIyBvZiBvYmplY3RzIChsaWtlIHBhcnRpdGlvbnMsIG5ldHdvcmsgZGV2aWNlcywgZXRjLikgYW5kIG5lZWQgdG8gcG9wdWxhdGUKKyAgICAjIGEgRGF0YSBvYmplY3QuCisgICAgZGVmIF9zZXRUb09iaihzZWxmLCBvcHRQYXJzZXIsIG9wdHMsIG9iaik6CisgICAgICAgIGZvciBrZXkgaW4gZmlsdGVyIChsYW1iZGEgazogZ2V0YXR0cihvcHRzLCBrKSAhPSBOb25lLCBvcHRQYXJzZXIua2V5cygpKToKKyAgICAgICAgICAgIHNldGF0dHIob2JqLCBrZXksIGdldGF0dHIob3B0cywga2V5KSkKKworY2xhc3MgRGVwcmVjYXRlZENvbW1hbmQoS2lja3N0YXJ0Q29tbWFuZCk6CisgICAgIiIiU3BlY2lmeSB0aGF0IGEgY29tbWFuZCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgaGFzIGFueSBmdW5jdGlvbi4KKyAgICAgICBBbnkgY29tbWFuZCB0aGF0IGlzIGRlcHJlY2F0ZWQgc2hvdWxkIGJlIHN1YmNsYXNzZWQgZnJvbSB0aGlzIGNsYXNzLAorICAgICAgIG9ubHkgc3BlY2lmeWluZyBhbiBfX2luaXRfXyBtZXRob2QgdGhhdCBjYWxscyB0aGUgc3VwZXJjbGFzcydzIF9faW5pdF9fLgorICAgICAgIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHk9Tm9uZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIyBXZSBkb24ndCB3YW50IHBlb3BsZSB1c2luZyB0aGlzIGNsYXNzIGJ5IGl0c2VsZi4KKyAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgS2lja3N0YXJ0Q29tbWFuZDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgIkRlcHJlY2F0ZWRDb21tYW5kIGlzIGFuIGFic3RyYWN0IGNsYXNzLiIKKworICAgICAgICAjIENyZWF0ZSBhIG5ldyBEZXByZWNhdGVkQ29tbWFuZCBpbnN0YW5jZS4KKyAgICAgICAgS2lja3N0YXJ0Q29tbWFuZC5fX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5LCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgIiIiUGxhY2Vob2xkZXIgc2luY2UgRGVwcmVjYXRlZENvbW1hbmRzIGRvbid0IHdvcmsgYW55bW9yZS4iIiIKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYXJncyk6CisgICAgICAgICIiIlByaW50IGEgd2FybmluZyBtZXNzYWdlIGlmIHRoZSBjb21tYW5kIGlzIHNlZW4gaW4gdGhlIGlucHV0IGZpbGUuIiIiCisgICAgICAgIG1hcHBpbmcgPSB7ImxpbmVubyI6IHNlbGYubGluZW5vLCAiY21kIjogc2VsZi5jdXJyZW50Q21kfQorICAgICAgICB3YXJuaW5ncy53YXJuKF8oIklnbm9yaW5nIGRlcHJlY2F0ZWQgY29tbWFuZCBvbiBsaW5lICUobGluZW5vKXM6ICBUaGUgJShjbWQpcyBjb21tYW5kIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBoYXMgYW55IGVmZmVjdC4gIEl0IG1heSBiZSByZW1vdmVkIGZyb20gZnV0dXJlIHJlbGVhc2VzLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIGZhdGFsIGVycm9yIGZyb20ga2lja3N0YXJ0LiAgUGxlYXNlIG1vZGlmeSB5b3VyIGtpY2tzdGFydCBmaWxlIHRvIHJlbW92ZSB0aGlzIGNvbW1hbmQuIikgJSBtYXBwaW5nLCBEZXByZWNhdGlvbldhcm5pbmcpCisKKworIyMjCisjIyMgSEFORExFUlMKKyMjIworY2xhc3MgQmFzZUhhbmRsZXIoS2lja3N0YXJ0T2JqZWN0KToKKyAgICAiIiJFYWNoIHZlcnNpb24gb2Yga2lja3N0YXJ0IHN5bnRheCBpcyBwcm92aWRlZCBieSBhIHN1YmNsYXNzIG9mIHRoaXMKKyAgICAgICBjbGFzcy4gIFRoZXNlIHN1YmNsYXNzZXMgYXJlIHdoYXQgdXNlcnMgd2lsbCBpbnRlcmFjdCB3aXRoIGZvciBwYXJzaW5nLAorICAgICAgIGV4dHJhY3RpbmcgZGF0YSwgYW5kIHdyaXRpbmcgb3V0IGtpY2tzdGFydCBmaWxlcy4gIFRoaXMgaXMgYW4gYWJzdHJhY3QKKyAgICAgICBjbGFzcy4KKworICAgICAgIHZlcnNpb24gLS0gVGhlIHZlcnNpb24gdGhpcyBzeW50YXggaGFuZGxlciBzdXBwb3J0cy4gIFRoaXMgaXMgc2V0IGJ5CisgICAgICAgICAgICAgICAgICBhIGNsYXNzIGF0dHJpYnV0ZSBvZiBhIEJhc2VIYW5kbGVyIHN1YmNsYXNzIGFuZCBpcyB1c2VkIHRvCisgICAgICAgICAgICAgICAgICBzZXQgdXAgdGhlIGNvbW1hbmQgZGljdC4gIEl0IGlzIGZvciByZWFkLW9ubHkgdXNlLgorICAgICIiIgorICAgIHZlcnNpb24gPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFwcGluZz1Ob25lLCBkYXRhTWFwcGluZz1Ob25lLCBjb21tYW5kVXBkYXRlcz1Ob25lLAorICAgICAgICAgICAgICAgICBkYXRhVXBkYXRlcz1Ob25lLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgQmFzZUhhbmRsZXIgaW5zdGFuY2UuICBUaGlzIG1ldGhvZCBtdXN0IGJlIHByb3ZpZGVkIGJ5CisgICAgICAgICAgIGFsbCBzdWJjbGFzc2VzLCBidXQgc3ViY2xhc3NlcyBtdXN0IGNhbGwgQmFzZUhhbmRsZXIuX19pbml0X18gZmlyc3QuCisKKyAgICAgICAgICAgbWFwcGluZyAgICAgICAgICAtLSBBIGN1c3RvbSBtYXAgZnJvbSBjb21tYW5kIHN0cmluZ3MgdG8gY2xhc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VmdWwgd2hlbiBjcmVhdGluZyB5b3VyIG93biBoYW5kbGVyIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsIGNvbW1hbmQgb2JqZWN0cy4gIEl0IGlzIG90aGVyd2lzZSB1bnVzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcmFyZWx5IG5lZWRlZC4gIElmIHlvdSBnaXZlIHRoaXMgYXJndW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcHBpbmcgdGFrZXMgdGhlIHBsYWNlIG9mIHRoZSBkZWZhdWx0IG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBtdXN0IGluY2x1ZGUgYWxsIGNvbW1hbmRzIHlvdSB3YW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb2duaXplZC4KKyAgICAgICAgICAgZGF0YU1hcHBpbmcgICAgICAtLSBUaGlzIGlzIHRoZSBzYW1lIGFzIG1hcHBpbmcsIGJ1dCBmb3IgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdHMuICBBbGwgdGhlIHNhbWUgY29tbWVudHMgYXBwbHkuCisgICAgICAgICAgIGNvbW1hbmRVcGRhdGVzICAgLS0gVGhpcyBpcyBzaW1pbGFyIHRvIG1hcHBpbmcsIGJ1dCBkb2VzIG5vdCB0YWtlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBsYWNlIG9mIHRoZSBkZWZhdWx0cyBlbnRpcmVseS4gIEluc3RlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBtYXBwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgdGhlIGRlZmF1bHRzIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXMgaXQgd2l0aCBqdXN0IHRoZSBjb21tYW5kcyB5b3Ugd2FudCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmeS4KKyAgICAgICAgICAgZGF0YVVwZGF0ZXMgICAgICAtLSBUaGlzIGlzIHRoZSBzYW1lIGFzIGNvbW1hbmRVcGRhdGVzLCBidXQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSBvYmplY3RzLgorCisKKyAgICAgICAgICAgSW5zdGFuY2UgYXR0cmlidXRlczoKKworICAgICAgICAgICBjb21tYW5kcyAtLSBBIG1hcHBpbmcgZnJvbSBhIHN0cmluZyBjb21tYW5kIHRvIGEgS2lja3N0YXJ0Q29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgICBzdWJjbGFzcyBvYmplY3QgdGhhdCBoYW5kbGVzIGl0LiAgTXVsdGlwbGUgc3RyaW5ncyBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgbWFwIHRvIHRoZSBzYW1lIG9iamVjdCwgYnV0IG9ubHkgb25lIGluc3RhbmNlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIG9iamVjdCBzaG91bGQgZXZlciBleGlzdC4gIE1vc3QgdXNlcnMgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgIG5ldmVyIGhhdmUgdG8gZGVhbCB3aXRoIHRoaXMgZGlyZWN0bHksIGFzIGl0IGlzCisgICAgICAgICAgICAgICAgICAgICAgIG1hbmlwdWxhdGVkIGludGVybmFsbHkgYW5kIGNhbGxlZCB0aHJvdWdoIGRpc3BhdGNoZXIuCisgICAgICAgICAgIGN1cnJlbnRMaW5lIC0tIFRoZSBjdXJyZW50IHVucHJvY2Vzc2VkIGxpbmUgZnJvbSB0aGUgaW5wdXQgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNhdXNlZCB0aGlzIGhhbmRsZXIgdG8gYmUgcnVuLgorICAgICAgICAgICBwYWNrYWdlcyAtLSBBbiBpbnN0YW5jZSBvZiBweWtpY2tzdGFydC5wYXJzZXIuUGFja2FnZXMgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVzIHRoZSBwYWNrYWdlcyBzZWN0aW9uIG9mIHRoZSBpbnB1dCBmaWxlLgorICAgICAgICAgICBwbGF0Zm9ybSAtLSBBIHN0cmluZyBkZXNjcmliaW5nIHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkIG9ubHkgYnkgc3lzdGVtLWNvbmZpZy1raWNrc3RhcnQuCisgICAgICAgICAgIHNjcmlwdHMgIC0tIEEgbGlzdCBvZiBweWtpY2tzdGFydC5wYXJzZXIuU2NyaXB0IGluc3RhbmNlcywgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGVkIGJ5IEtpY2tzdGFydFBhcnNlci5hZGRTY3JpcHQgYW5kIGRlc2NyaWJlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgJXByZS8lcG9zdC8ldHJhY2ViYWNrIHNjcmlwdCBzZWN0aW9uIG9mIHRoZSBpbnB1dCBmaWxlLgorICAgICAgICAiIiIKKworICAgICAgICAjIFdlIGRvbid0IHdhbnQgcGVvcGxlIHVzaW5nIHRoaXMgY2xhc3MgYnkgaXRzZWxmLgorICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBCYXNlSGFuZGxlcjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgIkJhc2VIYW5kbGVyIGlzIGFuIGFic3RyYWN0IGNsYXNzLiIKKworICAgICAgICBLaWNrc3RhcnRPYmplY3QuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgICMgVGhpcyBpc24ndCByZWFsbHkgYSBnb29kIHBsYWNlIGZvciB0aGVzZSwgYnV0IGl0J3MgYmV0dGVyIHRoYW4KKyAgICAgICAgIyBldmVyeXRoaW5nIGVsc2UgSSBjYW4gdGhpbmsgb2YuCisgICAgICAgIHNlbGYuc2NyaXB0cyA9IFtdCisgICAgICAgIHNlbGYucGFja2FnZXMgPSBQYWNrYWdlcygpCisgICAgICAgIHNlbGYucGxhdGZvcm0gPSAiIgorCisgICAgICAgICMgVGhlc2Ugd2lsbCBiZSBzZXQgYnkgdGhlIGRpc3BhdGNoZXIuCisgICAgICAgIHNlbGYuY29tbWFuZHMgPSB7fQorICAgICAgICBzZWxmLmN1cnJlbnRMaW5lID0gMAorCisgICAgICAgICMgQSBkaWN0IGtleWVkIGJ5IGFuIGludGVnZXIgcHJpb3JpdHkgbnVtYmVyLCB3aXRoIGVhY2ggdmFsdWUgYmVpbmcgYQorICAgICAgICAjIGxpc3Qgb2YgS2lja3N0YXJ0Q29tbWFuZCBzdWJjbGFzc2VzLiAgVGhpcyBkaWN0IGlzIG1haW50YWluZWQgYnkKKyAgICAgICAgIyByZWdpc3RlckNvbW1hbmQgYW5kIHVzZWQgaW4gX19zdHJfXy4gIE5vIG9uZSBlbHNlIHNob3VsZCBiZSB0b3VjaGluZworICAgICAgICAjIGl0LgorICAgICAgICBzZWxmLl93cml0ZU9yZGVyID0ge30KKworICAgICAgICBzZWxmLl9yZWdpc3RlckNvbW1hbmRzKG1hcHBpbmcsIGRhdGFNYXBwaW5nLCBjb21tYW5kVXBkYXRlcywgZGF0YVVwZGF0ZXMpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIGZvcm1hdHRlZCBmb3Igb3V0cHV0IHRvIGEga2lja3N0YXJ0IGZpbGUuIiIiCisgICAgICAgIHJldHZhbCA9ICIiCisKKyAgICAgICAgaWYgc2VsZi5wbGF0Zm9ybSAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiI3BsYXRmb3JtPSVzXG4iICUgc2VsZi5wbGF0Zm9ybQorCisgICAgICAgIHJldHZhbCArPSAiI3ZlcnNpb249JXNcbiIgJSB2ZXJzaW9uVG9TdHJpbmcoc2VsZi52ZXJzaW9uKQorCisgICAgICAgIGxzdCA9IHNlbGYuX3dyaXRlT3JkZXIua2V5cygpCisgICAgICAgIGxzdC5zb3J0KCkKKworICAgICAgICBmb3IgcHJpbyBpbiBsc3Q6CisgICAgICAgICAgICBmb3Igb2JqIGluIHNlbGYuX3dyaXRlT3JkZXJbcHJpb106CisgICAgICAgICAgICAgICAgcmV0dmFsICs9IG9iai5fX3N0cl9fKCkKKworICAgICAgICBmb3Igc2NyaXB0IGluIHNlbGYuc2NyaXB0czoKKyAgICAgICAgICAgIHJldHZhbCArPSBzY3JpcHQuX19zdHJfXygpCisKKyAgICAgICAgcmV0dmFsICs9IHNlbGYucGFja2FnZXMuX19zdHJfXygpCisKKyAgICAgICAgcmV0dXJuIHJldHZhbAorCisgICAgZGVmIF9pbnNlcnRTb3J0ZWQoc2VsZiwgbHN0LCBvYmopOgorICAgICAgICBsZW5ndGggPSBsZW4obHN0KQorICAgICAgICBpID0gMAorCisgICAgICAgIHdoaWxlIGkgPCBsZW5ndGg6CisgICAgICAgICAgICAjIElmIHRoZSB0d28gY2xhc3NlcyBoYXZlIHRoZSBzYW1lIG5hbWUsIGl0J3MgYmVjYXVzZSB3ZSBhcmUKKyAgICAgICAgICAgICMgb3ZlcnJpZGluZyBhbiBleGlzdGluZyBjbGFzcyB3aXRoIG9uZSBmcm9tIGEgbGF0ZXIga2lja3N0YXJ0CisgICAgICAgICAgICAjIHZlcnNpb24sIHNvIHJlbW92ZSB0aGUgb2xkIG9uZSBpbiBmYXZvciBvZiB0aGUgbmV3IG9uZS4KKyAgICAgICAgICAgIGlmIG9iai5fX2NsYXNzX18uX19uYW1lX18gPiBsc3RbaV0uX19jbGFzc19fLl9fbmFtZV9fOgorICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAgICAgZWxpZiBvYmouX19jbGFzc19fLl9fbmFtZV9fID09IGxzdFtpXS5fX2NsYXNzX18uX19uYW1lX186CisgICAgICAgICAgICAgICAgbHN0W2ldID0gb2JqCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbGlmIG9iai5fX2NsYXNzX18uX19uYW1lX18gPCBsc3RbaV0uX19jbGFzc19fLl9fbmFtZV9fOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgaSA+PSBsZW5ndGg6CisgICAgICAgICAgICBsc3QuYXBwZW5kKG9iaikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxzdC5pbnNlcnQoaSwgb2JqKQorCisgICAgZGVmIF9zZXRDb21tYW5kKHNlbGYsIGNtZE9iaik6CisgICAgICAgICMgQWRkIGFuIGF0dHJpYnV0ZSBvbiB0aGlzIHZlcnNpb24gb2JqZWN0LiAgV2UgbmVlZCB0aGlzIHRvIHByb3ZpZGUgYQorICAgICAgICAjIHdheSBmb3IgY2xpZW50cyB0byBhY2Nlc3MgdGhlIGNvbW1hbmQgb2JqZWN0cy4gIFdlIGFsc28gbmVlZCB0byBzdHJpcAorICAgICAgICAjIG9mZiB0aGUgdmVyc2lvbiBwYXJ0IGZyb20gdGhlIGZyb250IG9mIHRoZSBuYW1lLgorICAgICAgICBpZiBjbWRPYmouX19jbGFzc19fLl9fbmFtZV9fLmZpbmQoIl8iKSAhPSAtMToKKyAgICAgICAgICAgIG5hbWUgPSB1bmljb2RlKGNtZE9iai5fX2NsYXNzX18uX19uYW1lX18uc3BsaXQoIl8iLCAxKVsxXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5hbWUgPSB1bmljb2RlKGNtZE9iai5fX2NsYXNzX18uX19uYW1lX18pLmxvd2VyKCkKKworICAgICAgICBzZXRhdHRyKHNlbGYsIG5hbWUubG93ZXIoKSwgY21kT2JqKQorCisgICAgICAgICMgQWxzbywgYWRkIHRoZSBvYmplY3QgaW50byB0aGUgX3dyaXRlT3JkZXIgZGljdCBpbiB0aGUgcmlnaHQgcGxhY2UuCisgICAgICAgIGlmIGNtZE9iai53cml0ZVByaW9yaXR5IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5fd3JpdGVPcmRlci5oYXNfa2V5KGNtZE9iai53cml0ZVByaW9yaXR5KToKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnNlcnRTb3J0ZWQoc2VsZi5fd3JpdGVPcmRlcltjbWRPYmoud3JpdGVQcmlvcml0eV0sIGNtZE9iaikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVPcmRlcltjbWRPYmoud3JpdGVQcmlvcml0eV0gPSBbY21kT2JqXQorCisgICAgZGVmIF9yZWdpc3RlckNvbW1hbmRzKHNlbGYsIG1hcHBpbmc9Tm9uZSwgZGF0YU1hcHBpbmc9Tm9uZSwgY29tbWFuZFVwZGF0ZXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVVwZGF0ZXM9Tm9uZSk6CisgICAgICAgIGlmIG1hcHBpbmcgPT0ge30gb3IgbWFwcGluZyA9PSBOb25lOgorICAgICAgICAgICAgZnJvbSBweWtpY2tzdGFydC5oYW5kbGVycy5jb250cm9sIGltcG9ydCBjb21tYW5kTWFwCisgICAgICAgICAgICBjTWFwID0gY29tbWFuZE1hcFtzZWxmLnZlcnNpb25dCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjTWFwID0gbWFwcGluZworCisgICAgICAgIGlmIGRhdGFNYXBwaW5nID09IHt9IG9yIGRhdGFNYXBwaW5nID09IE5vbmU6CisgICAgICAgICAgICBmcm9tIHB5a2lja3N0YXJ0LmhhbmRsZXJzLmNvbnRyb2wgaW1wb3J0IGRhdGFNYXAKKyAgICAgICAgICAgIGRNYXAgPSBkYXRhTWFwW3NlbGYudmVyc2lvbl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRNYXAgPSBkYXRhTWFwcGluZworCisgICAgICAgIGlmIHR5cGUoY29tbWFuZFVwZGF0ZXMpID09IHR5cGVzLkRpY3RUeXBlOgorICAgICAgICAgICAgY01hcC51cGRhdGUoY29tbWFuZFVwZGF0ZXMpCisKKyAgICAgICAgaWYgdHlwZShkYXRhVXBkYXRlcykgPT0gdHlwZXMuRGljdFR5cGU6CisgICAgICAgICAgICBkTWFwLnVwZGF0ZShkYXRhVXBkYXRlcykKKworICAgICAgICBmb3IgKGNtZE5hbWUsIGNtZENsYXNzKSBpbiBjTWFwLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgIyBGaXJzdCBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBpbnN0YW50aWF0ZWQgdGhpcyBjb21tYW5kIGhhbmRsZXIKKyAgICAgICAgICAgICMgYWxyZWFkeS4gIElmIHdlIGhhdmUsIHdlIGp1c3QgbmVlZCB0byBtYWtlIGFub3RoZXIgbWFwcGluZyB0bworICAgICAgICAgICAgIyBpdCBpbiBzZWxmLmNvbW1hbmRzLgorICAgICAgICAgICAgY21kT2JqID0gTm9uZQorCisgICAgICAgICAgICBmb3IgKGtleSwgdmFsKSBpbiBzZWxmLmNvbW1hbmRzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIHZhbC5fX2NsYXNzX18uX19uYW1lX18gPT0gY21kQ2xhc3MuX19uYW1lX186CisgICAgICAgICAgICAgICAgICAgIGNtZE9iaiA9IHZhbAorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAjIElmIHdlIGRpZG4ndCBmaW5kIGFuIGluc3RhbmNlIGluIHNlbGYuY29tbWFuZHMsIGNyZWF0ZSBvbmUgbm93LgorICAgICAgICAgICAgaWYgY21kT2JqID09IE5vbmU6CisgICAgICAgICAgICAgICAgY21kT2JqID0gY21kQ2xhc3MoKQorICAgICAgICAgICAgICAgIHNlbGYuX3NldENvbW1hbmQoY21kT2JqKQorCisgICAgICAgICAgICAjIEZpbmFsbHksIGFkZCB0aGUgbWFwcGluZyB0byB0aGUgY29tbWFuZHMgZGljdC4KKyAgICAgICAgICAgIHNlbGYuY29tbWFuZHNbY21kTmFtZV0gPSBjbWRPYmoKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZHNbY21kTmFtZV0uaGFuZGxlciA9IHNlbGYKKworICAgICAgICAjIFdlIGFsc28gbmVlZCB0byBjcmVhdGUgYXR0cmlidXRlcyBmb3IgdGhlIHZhcmlvdXMgZGF0YSBvYmplY3RzLgorICAgICAgICAjIE5vIGNoZWNrcyBoZXJlIGJlY2F1c2UgZE1hcCBpcyBhIGJpamVjdGlvbi4gIEF0IGxlYXN0LCB0aGF0J3Mgd2hhdAorICAgICAgICAjIHRoZSBjb21tZW50IHNheXMuICBIb3BlIG5vIG9uZSBzY3Jld3MgdGhhdCB1cC4KKyAgICAgICAgZm9yIChkYXRhTmFtZSwgZGF0YUNsYXNzKSBpbiBkTWFwLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBkYXRhTmFtZSwgZGF0YUNsYXNzKQorCisgICAgZGVmIGRpc3BhdGNoZXIoc2VsZiwgYXJncywgbGluZW5vKToKKyAgICAgICAgIiIiQ2FsbCB0aGUgYXBwcm9wcmlhdGUgS2lja3N0YXJ0Q29tbWFuZCBoYW5kbGVyIGZvciB0aGUgY3VycmVudCBsaW5lCisgICAgICAgICAgIGluIHRoZSBraWNrc3RhcnQgZmlsZS4gIEEgaGFuZGxlciBmb3IgdGhlIGN1cnJlbnQgY29tbWFuZCBzaG91bGQKKyAgICAgICAgICAgYmUgcmVnaXN0ZXJlZCwgdGhvdWdoIGEgaGFuZGxlciBvZiBOb25lIGlzIG5vdCBhbiBlcnJvci4gIFJldHVybnMKKyAgICAgICAgICAgdGhlIGRhdGEgb2JqZWN0IHJldHVybmVkIGJ5IEtpY2tzdGFydENvbW1hbmQucGFyc2UuCisKKyAgICAgICAgICAgYXJncyAgICAtLSBBIGxpc3Qgb2YgYXJndW1lbnRzIHRvIHRoZSBjdXJyZW50IGNvbW1hbmQKKyAgICAgICAgICAgbGluZW5vICAtLSBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGZpbGUsIGZvciBlcnJvciByZXBvcnRpbmcKKyAgICAgICAgIiIiCisgICAgICAgIGNtZCA9IGFyZ3NbMF0KKworICAgICAgICBpZiBub3Qgc2VsZi5jb21tYW5kcy5oYXNfa2V5KGNtZCk6CisgICAgICAgICAgICByYWlzZSBLaWNrc3RhcnRQYXJzZUVycm9yLCBmb3JtYXRFcnJvck1zZyhsaW5lbm8sIG1zZz1fKCJVbmtub3duIGNvbW1hbmQ6ICVzIiAlIGNtZCkpCisgICAgICAgIGVsaWYgc2VsZi5jb21tYW5kc1tjbWRdICE9IE5vbmU6CisgICAgICAgICAgICBzZWxmLmNvbW1hbmRzW2NtZF0uY3VycmVudENtZCA9IGNtZAorICAgICAgICAgICAgc2VsZi5jb21tYW5kc1tjbWRdLmN1cnJlbnRMaW5lID0gc2VsZi5jdXJyZW50TGluZQorICAgICAgICAgICAgc2VsZi5jb21tYW5kc1tjbWRdLmxpbmVubyA9IGxpbmVubworCisgICAgICAgICAgICAjIFRoZSBwYXJzZXIgcmV0dXJucyB0aGUgZGF0YSBvYmplY3QgdGhhdCB3YXMgbW9kaWZpZWQuICBUaGlzIGNvdWxkCisgICAgICAgICAgICAjIGJlIGEgQmFzZURhdGEgc3ViY2xhc3MgdGhhdCBzaG91bGQgYmUgcHV0IGludG8gYSBsaXN0LCBvciBpdAorICAgICAgICAgICAgIyBjb3VsZCBiZSB0aGUgY29tbWFuZCBoYW5kbGVyIG9iamVjdCBpdHNlbGYuCisgICAgICAgICAgICBvYmogPSBzZWxmLmNvbW1hbmRzW2NtZF0ucGFyc2UoYXJnc1sxOl0pCisgICAgICAgICAgICBsc3QgPSBzZWxmLmNvbW1hbmRzW2NtZF0uZGF0YUxpc3QoKQorICAgICAgICAgICAgaWYgbHN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGxzdC5hcHBlbmQob2JqKQorCisgICAgICAgICAgICByZXR1cm4gb2JqCisKKyAgICBkZWYgbWFza0FsbEV4Y2VwdChzZWxmLCBsc3QpOgorICAgICAgICAiIiJTZXQgYWxsIGVudHJpZXMgaW4gdGhlIGNvbW1hbmRzIGRpY3QgdG8gTm9uZSwgZXhjZXB0IHRoZSBvbmVzIGluCisgICAgICAgICAgIHRoZSBsc3QuICBBbGwgb3RoZXIgY29tbWFuZHMgd2lsbCBub3QgYmUgcHJvY2Vzc2VkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fd3JpdGVPcmRlciA9IHt9CisKKyAgICAgICAgZm9yIChrZXksIHZhbCkgaW4gc2VsZi5jb21tYW5kcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5vdCBrZXkgaW4gbHN0OgorICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZHNba2V5XSA9IE5vbmUKKworICAgIGRlZiBoYXNDb21tYW5kKHNlbGYsIGNtZCk6CisgICAgICAgICIiIlJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGEgaGFuZGxlciBmb3IgdGhlIHN0cmluZyBjbWQuIiIiCisgICAgICAgIHJldHVybiBoYXNhdHRyKHNlbGYsIGNtZCkKKworCisjIyMKKyMjIyBEQVRBCisjIyMKK2NsYXNzIEJhc2VEYXRhKEtpY2tzdGFydE9iamVjdCk6CisgICAgIiIiVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBkYXRhIG9iamVjdHMuICBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzLiIiIgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IFtdCisgICAgcmVtb3ZlZEF0dHJzID0gW10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgQmFzZURhdGEgaW5zdGFuY2UuCisgICAgICAgIAorICAgICAgICAgICBsaW5lbm8gLS0gTGluZSBudW1iZXIgaW4gdGhlIGtzLWZpbGUgd2hlcmUgdGhpcyBvYmplY3Qgd2FzIGRlZmluZWQKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXZSBkb24ndCB3YW50IHBlb3BsZSB1c2luZyB0aGlzIGNsYXNzIGJ5IGl0c2VsZi4KKyAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgQmFzZURhdGE6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsICJCYXNlRGF0YSBpcyBhbiBhYnN0cmFjdCBjbGFzcy4iCisKKyAgICAgICAgS2lja3N0YXJ0T2JqZWN0Ll9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5saW5lbm8gPSAwCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIGZvcm1hdHRlZCBmb3Igb3V0cHV0IHRvIGEga2lja3N0YXJ0IGZpbGUuIiIiCisgICAgICAgIHJldHVybiAiIgorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIlNldCBtdWx0aXBsZSBhdHRyaWJ1dGVzIG9uIGEgc3ViY2xhc3Mgb2YgQmFzZURhdGEgYXQgb25jZSB2aWEKKyAgICAgICAgICAga2V5d29yZCBhcmd1bWVudHMuICBWYWxpZCBhdHRyaWJ1dGVzIGFyZSBhbnl0aGluZyBzcGVjaWZpZWQgaW4gYQorICAgICAgICAgICBzdWJjbGFzcywgYnV0IHVua25vd24gYXR0cmlidXRlcyB3aWxsIGJlIGlnbm9yZWQuCisgICAgICAgICIiIgorICAgICAgICBmb3IgKGtleSwgdmFsKSBpbiBrd2FyZ3MuaXRlbXMoKToKKyAgICAgICAgICAgICMgSWdub3JlIHNldHRpbmcgYXR0cmlidXRlcyB0aGF0IHdlcmUgcmVtb3ZlZCBpbiBhIHN1YmNsYXNzLCBhcworICAgICAgICAgICAgIyBpZiB0aGV5IHdlcmUgdW5rbm93biBhdHRyaWJ1dGVzLgorICAgICAgICAgICAgaWYga2V5IGluIHNlbGYucmVtb3ZlZEF0dHJzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGtleSwgdmFsKQorCisgICAgZGVmIGRlbGV0ZVJlbW92ZWRBdHRycyhzZWxmKToKKyAgICAgICAgIiIiUmVtb3ZlIGFsbCBhdHRyaWJ1dGVzIGZyb20gc2VsZiB0aGF0IGFyZSBnaXZlbiBpbiB0aGUgcmVtb3ZlZEF0dHJzCisgICAgICAgICAgIGxpc3QuICBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGZyb20gX19pbml0X18gaW4gYSBzdWJjbGFzcywKKyAgICAgICAgICAgYnV0IG9ubHkgYWZ0ZXIgdGhlIHN1cGVyY2xhc3MncyBfX2luaXRfXyBtZXRob2QgaGFzIGJlZW4gY2FsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIGF0dHIgaW4gZmlsdGVyKGxhbWJkYSBrOiBoYXNhdHRyKHNlbGYsIGspLCBzZWxmLnJlbW92ZWRBdHRycyk6CisgICAgICAgICAgICBkZWxhdHRyKHNlbGYsIGF0dHIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9jb21tYW5kcy9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2NvbW1hbmRzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkOTQ1NTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9jb21tYW5kcy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDIwIEBACisjCisjIENocmlzIEx1bWVucyA8Y2x1bWVuc0ByZWRoYXQuY29tPgorIworIyBDb3B5cmlnaHQgMjAwOSBSZWQgSGF0LCBJbmMuCisjCisjIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLCBtb2RpZnksCisjIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugdi4yLiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyMgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nIHRoZQorIyBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxCisjIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgQW55IFJlZCBIYXQKKyMgdHJhZGVtYXJrcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIHNvdXJjZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gYXJlIG5vdAorIyBzdWJqZWN0IHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgbWF5IG9ubHkgYmUgdXNlZCBvciByZXBsaWNhdGVkCisjIHdpdGggdGhlIGV4cHJlc3MgcGVybWlzc2lvbiBvZiBSZWQgSGF0LCBJbmMuIAorIworaW1wb3J0IGJvb3Rsb2FkZXIsIHBhcnRpdGlvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvY29tbWFuZHMvYm9vdGxvYWRlci5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2NvbW1hbmRzL2Jvb3Rsb2FkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJiNTUyZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2NvbW1hbmRzL2Jvb3Rsb2FkZXIucHkKQEAgLTAsMCArMSwyMTYgQEAKKyMKKyMgQ2hyaXMgTHVtZW5zIDxjbHVtZW5zQHJlZGhhdC5jb20+CisjCisjIENvcHlyaWdodCAyMDA3IFJlZCBIYXQsIEluYy4KKyMKKyMgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsIG1vZGlmeSwKKyMgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorIyB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlCisjIGltcGxpZWQgd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEKKyMgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBBbnkgUmVkIEhhdAorIyB0cmFkZW1hcmtzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgc291cmNlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiBhcmUgbm90CisjIHN1YmplY3QgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBtYXkgb25seSBiZSB1c2VkIG9yIHJlcGxpY2F0ZWQKKyMgd2l0aCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIFJlZCBIYXQsIEluYy4gCisjCitmcm9tIHB5a2lja3N0YXJ0LmJhc2UgaW1wb3J0ICoKK2Zyb20gcHlraWNrc3RhcnQub3B0aW9ucyBpbXBvcnQgKgorCitjbGFzcyBGQzNfQm9vdGxvYWRlcihLaWNrc3RhcnRDb21tYW5kKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBLaWNrc3RhcnRDb21tYW5kLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEtpY2tzdGFydENvbW1hbmQucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eT0xMCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgS2lja3N0YXJ0Q29tbWFuZC5fX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5LCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYub3AgPSBzZWxmLl9nZXRQYXJzZXIoKQorCisgICAgICAgIHNlbGYuZHJpdmVvcmRlciA9IGt3YXJncy5nZXQoImRyaXZlb3JkZXIiLCBbXSkKKyAgICAgICAgc2VsZi5hcHBlbmRMaW5lID0ga3dhcmdzLmdldCgiYXBwZW5kTGluZSIsICIiKQorICAgICAgICBzZWxmLmZvcmNlTEJBID0ga3dhcmdzLmdldCgiZm9yY2VMQkEiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5saW5lYXIgPSBrd2FyZ3MuZ2V0KCJsaW5lYXIiLCBUcnVlKQorICAgICAgICBzZWxmLmxvY2F0aW9uID0ga3dhcmdzLmdldCgibG9jYXRpb24iLCAiIikKKyAgICAgICAgc2VsZi5tZDVwYXNzID0ga3dhcmdzLmdldCgibWQ1cGFzcyIsICIiKQorICAgICAgICBzZWxmLnBhc3N3b3JkID0ga3dhcmdzLmdldCgicGFzc3dvcmQiLCAiIikKKyAgICAgICAgc2VsZi51cGdyYWRlID0ga3dhcmdzLmdldCgidXBncmFkZSIsIEZhbHNlKQorICAgICAgICBzZWxmLnVzZUxpbG8gPSBrd2FyZ3MuZ2V0KCJ1c2VMaWxvIiwgRmFsc2UpCisKKyAgICAgICAgc2VsZi5kZWxldGVSZW1vdmVkQXR0cnMoKQorCisgICAgZGVmIF9nZXRBcmdzQXNTdHIoc2VsZik6CisgICAgICAgIHJldHZhbCA9ICIiCisKKyAgICAgICAgaWYgc2VsZi5hcHBlbmRMaW5lICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1hcHBlbmQ9XCIlc1wiIiAlIHNlbGYuYXBwZW5kTGluZQorICAgICAgICBpZiBzZWxmLmxpbmVhcjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbGluZWFyIgorICAgICAgICBpZiBzZWxmLmxvY2F0aW9uOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1sb2NhdGlvbj0lcyIgJSBzZWxmLmxvY2F0aW9uCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgImZvcmNlTEJBIikgYW5kIHNlbGYuZm9yY2VMQkE6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWxiYTMyIgorICAgICAgICBpZiBzZWxmLnBhc3N3b3JkICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1wYXNzd29yZD1cIiVzXCIiICUgc2VsZi5wYXNzd29yZAorICAgICAgICBpZiBzZWxmLm1kNXBhc3MgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLW1kNXBhc3M9XCIlc1wiIiAlIHNlbGYubWQ1cGFzcworICAgICAgICBpZiBzZWxmLnVwZ3JhZGU6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXVwZ3JhZGUiCisgICAgICAgIGlmIHNlbGYudXNlTGlsbzoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tdXNlTGlsbyIKKyAgICAgICAgaWYgbGVuKHNlbGYuZHJpdmVvcmRlcikgPiAwOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1kcml2ZW9yZGVyPVwiJXNcIiIgJSAiLCIuam9pbihzZWxmLmRyaXZlb3JkZXIpCisKKyAgICAgICAgcmV0dXJuIHJldHZhbAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHZhbCA9IEtpY2tzdGFydENvbW1hbmQuX19zdHJfXyhzZWxmKQorCisgICAgICAgIGlmIHNlbGYubG9jYXRpb24gIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiMgU3lzdGVtIGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvblxuYm9vdGxvYWRlciIKKyAgICAgICAgICAgIHJldHZhbCArPSBzZWxmLl9nZXRBcmdzQXNTdHIoKSArICJcbiIKKworICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgZGVmIGRyaXZlb3JkZXJfY2IgKG9wdGlvbiwgb3B0X3N0ciwgdmFsdWUsIHBhcnNlcik6CisgICAgICAgICAgICBmb3IgZCBpbiB2YWx1ZS5zcGxpdCgnLCcpOgorICAgICAgICAgICAgICAgIHBhcnNlci52YWx1ZXMuZW5zdXJlX3ZhbHVlKG9wdGlvbi5kZXN0LCBbXSkuYXBwZW5kKGQpCisKKyAgICAgICAgb3AgPSBLU09wdGlvblBhcnNlcigpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tYXBwZW5kIiwgZGVzdD0iYXBwZW5kTGluZSIpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tbGluZWFyIiwgZGVzdD0ibGluZWFyIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tbm9saW5lYXIiLCBkZXN0PSJsaW5lYXIiLCBhY3Rpb249InN0b3JlX2ZhbHNlIikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1sb2NhdGlvbiIsIGRlc3Q9ImxvY2F0aW9uIiwgdHlwZT0iY2hvaWNlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJtYnIiLAorICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9WyJtYnIiLCAicGFydGl0aW9uIiwgIm5vbmUiLCAiYm9vdCJdKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWxiYTMyIiwgZGVzdD0iZm9yY2VMQkEiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tcGFzc3dvcmQiLCBkZXN0PSJwYXNzd29yZCIsIGRlZmF1bHQ9IiIpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tbWQ1cGFzcyIsIGRlc3Q9Im1kNXBhc3MiLCBkZWZhdWx0PSIiKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLXVwZ3JhZGUiLCBkZXN0PSJ1cGdyYWRlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLXVzZUxpbG8iLCBkZXN0PSJ1c2VMaWxvIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWRyaXZlb3JkZXIiLCBkZXN0PSJkcml2ZW9yZGVyIiwgYWN0aW9uPSJjYWxsYmFjayIsCisgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s9ZHJpdmVvcmRlcl9jYiwgbmFyZ3M9MSwgdHlwZT0ic3RyaW5nIikKKyAgICAgICAgcmV0dXJuIG9wCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYXJncyk6CisgICAgICAgIChvcHRzLCBleHRyYSkgPSBzZWxmLm9wLnBhcnNlX2FyZ3MoYXJncz1hcmdzLCBsaW5lbm89c2VsZi5saW5lbm8pCisgICAgICAgIHNlbGYuX3NldFRvU2VsZihzZWxmLm9wLCBvcHRzKQorCisgICAgICAgIGlmIHNlbGYuY3VycmVudENtZCA9PSAibGlsbyI6CisgICAgICAgICAgICBzZWxmLnVzZUxpbG8gPSBUcnVlCisKKyAgICAgICAgcmV0dXJuIHNlbGYKKworY2xhc3MgRkM0X0Jvb3Rsb2FkZXIoRkMzX0Jvb3Rsb2FkZXIpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEZDM19Cb290bG9hZGVyLnJlbW92ZWRLZXl3b3JkcyArIFsibGluZWFyIiwgInVzZUxpbG8iXQorICAgIHJlbW92ZWRBdHRycyA9IEZDM19Cb290bG9hZGVyLnJlbW92ZWRBdHRycyArIFsibGluZWFyIiwgInVzZUxpbG8iXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHk9MTAsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEZDM19Cb290bG9hZGVyLl9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHksICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBfZ2V0QXJnc0FzU3RyKHNlbGYpOgorICAgICAgICByZXR2YWwgPSAiIgorICAgICAgICBpZiBzZWxmLmFwcGVuZExpbmUgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWFwcGVuZD1cIiVzXCIiICUgc2VsZi5hcHBlbmRMaW5lCisgICAgICAgIGlmIHNlbGYubG9jYXRpb246CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWxvY2F0aW9uPSVzIiAlIHNlbGYubG9jYXRpb24KKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAiZm9yY2VMQkEiKSBhbmQgc2VsZi5mb3JjZUxCQToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbGJhMzIiCisgICAgICAgIGlmIHNlbGYucGFzc3dvcmQgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXBhc3N3b3JkPVwiJXNcIiIgJSBzZWxmLnBhc3N3b3JkCisgICAgICAgIGlmIHNlbGYubWQ1cGFzcyAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbWQ1cGFzcz1cIiVzXCIiICUgc2VsZi5tZDVwYXNzCisgICAgICAgIGlmIHNlbGYudXBncmFkZToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tdXBncmFkZSIKKyAgICAgICAgaWYgbGVuKHNlbGYuZHJpdmVvcmRlcikgPiAwOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1kcml2ZW9yZGVyPVwiJXNcIiIgJSAiLCIuam9pbihzZWxmLmRyaXZlb3JkZXIpCisgICAgICAgIHJldHVybiByZXR2YWwKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBvcCA9IEZDM19Cb290bG9hZGVyLl9nZXRQYXJzZXIoc2VsZikKKyAgICAgICAgb3AucmVtb3ZlX29wdGlvbigiLS1saW5lYXIiKQorICAgICAgICBvcC5yZW1vdmVfb3B0aW9uKCItLW5vbGluZWFyIikKKyAgICAgICAgb3AucmVtb3ZlX29wdGlvbigiLS11c2VMaWxvIikKKyAgICAgICAgcmV0dXJuIG9wCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYXJncyk6CisgICAgICAgIChvcHRzLCBleHRyYSkgPSBzZWxmLm9wLnBhcnNlX2FyZ3MoYXJncz1hcmdzLCBsaW5lbm89c2VsZi5saW5lbm8pCisgICAgICAgIHNlbGYuX3NldFRvU2VsZihzZWxmLm9wLCBvcHRzKQorICAgICAgICByZXR1cm4gc2VsZgorCitjbGFzcyBGOF9Cb290bG9hZGVyKEZDNF9Cb290bG9hZGVyKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGQzRfQm9vdGxvYWRlci5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBGQzRfQm9vdGxvYWRlci5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5PTEwLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBGQzRfQm9vdGxvYWRlci5fX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5LCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgc2VsZi50aW1lb3V0ID0ga3dhcmdzLmdldCgidGltZW91dCIsIE5vbmUpCisgICAgICAgIHNlbGYuZGVmYXVsdCA9IGt3YXJncy5nZXQoImRlZmF1bHQiLCAiIikKKworICAgIGRlZiBfZ2V0QXJnc0FzU3RyKHNlbGYpOgorICAgICAgICByZXQgPSBGQzRfQm9vdGxvYWRlci5fZ2V0QXJnc0FzU3RyKHNlbGYpCisKKyAgICAgICAgaWYgc2VsZi50aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0ICs9ICIgLS10aW1lb3V0PSVkIiAlKHNlbGYudGltZW91dCwpCisgICAgICAgIGlmIHNlbGYuZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCArPSAiIC0tZGVmYXVsdD0lcyIgJShzZWxmLmRlZmF1bHQsKQorCisgICAgICAgIHJldHVybiByZXQKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBvcCA9IEZDNF9Cb290bG9hZGVyLl9nZXRQYXJzZXIoc2VsZikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS10aW1lb3V0IiwgZGVzdD0idGltZW91dCIsIHR5cGU9ImludCIpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tZGVmYXVsdCIsIGRlc3Q9ImRlZmF1bHQiKQorICAgICAgICByZXR1cm4gb3AKKworY2xhc3MgRjEyX0Jvb3Rsb2FkZXIoRjhfQm9vdGxvYWRlcik6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRjhfQm9vdGxvYWRlci5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBGOF9Cb290bG9hZGVyLnJlbW92ZWRBdHRycworCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIG9wID0gRjhfQm9vdGxvYWRlci5fZ2V0UGFyc2VyKHNlbGYpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tbGJhMzIiLCBkZXN0PSJmb3JjZUxCQSIsIGRlcHJlY2F0ZWQ9MSwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcmV0dXJuIG9wCisKK2NsYXNzIEYxNF9Cb290bG9hZGVyKEYxMl9Cb290bG9hZGVyKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGMTJfQm9vdGxvYWRlci5yZW1vdmVkS2V5d29yZHMgKyBbImZvcmNlTEJBIl0KKyAgICByZW1vdmVkQXR0cnMgPSBGMTJfQm9vdGxvYWRlci5yZW1vdmVkS2V5d29yZHMgKyBbImZvcmNlTEJBIl0KKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBvcCA9IEYxMl9Cb290bG9hZGVyLl9nZXRQYXJzZXIoc2VsZikKKyAgICAgICAgb3AucmVtb3ZlX29wdGlvbigiLS1sYmEzMiIpCisgICAgICAgIHJldHVybiBvcAorCitjbGFzcyBGMTVfQm9vdGxvYWRlcihGMTRfQm9vdGxvYWRlcik6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRjE0X0Jvb3Rsb2FkZXIucmVtb3ZlZEtleXdvcmRzCisgICAgcmVtb3ZlZEF0dHJzID0gRjE0X0Jvb3Rsb2FkZXIucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eT0xMCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgRjE0X0Jvb3Rsb2FkZXIuX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eSwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIHNlbGYuaXNDcnlwdGVkID0ga3dhcmdzLmdldCgiaXNDcnlwdGVkIiwgRmFsc2UpCisKKyAgICBkZWYgX2dldEFyZ3NBc1N0cihzZWxmKToKKyAgICAgICAgcmV0ID0gRjE0X0Jvb3Rsb2FkZXIuX2dldEFyZ3NBc1N0cihzZWxmKQorCisgICAgICAgIGlmIHNlbGYuaXNDcnlwdGVkOgorICAgICAgICAgICAgcmV0ICs9ICIgLS1pc2NyeXB0ZWQiCisKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIGRlZiBwYXNzd29yZF9jYihvcHRpb24sIG9wdF9zdHIsIHZhbHVlLCBwYXJzZXIpOgorICAgICAgICAgICAgcGFyc2VyLnZhbHVlcy5pc0NyeXB0ZWQgPSBUcnVlCisgICAgICAgICAgICBwYXJzZXIudmFsdWVzLnBhc3N3b3JkID0gdmFsdWUKKworICAgICAgICBvcCA9IEYxNF9Cb290bG9hZGVyLl9nZXRQYXJzZXIoc2VsZikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1pc2NyeXB0ZWQiLCBkZXN0PSJpc0NyeXB0ZWQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLW1kNXBhc3MiLCBhY3Rpb249ImNhbGxiYWNrIiwgY2FsbGJhY2s9cGFzc3dvcmRfY2IsIG5hcmdzPTEsIHR5cGU9InN0cmluZyIpCisgICAgICAgIHJldHVybiBvcApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvY29tbWFuZHMvcGFydGl0aW9uLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvY29tbWFuZHMvcGFydGl0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NjRiMWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9jb21tYW5kcy9wYXJ0aXRpb24ucHkKQEAgLTAsMCArMSwzMTQgQEAKKyMKKyMgQ2hyaXMgTHVtZW5zIDxjbHVtZW5zQHJlZGhhdC5jb20+CisjCisjIENvcHlyaWdodCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IFJlZCBIYXQsIEluYy4KKyMKKyMgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsIG1vZGlmeSwKKyMgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorIyB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlCisjIGltcGxpZWQgd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEKKyMgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBBbnkgUmVkIEhhdAorIyB0cmFkZW1hcmtzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgc291cmNlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiBhcmUgbm90CisjIHN1YmplY3QgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBtYXkgb25seSBiZSB1c2VkIG9yIHJlcGxpY2F0ZWQKKyMgd2l0aCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIFJlZCBIYXQsIEluYy4gCisjCitmcm9tIHB5a2lja3N0YXJ0LmJhc2UgaW1wb3J0ICoKK2Zyb20gcHlraWNrc3RhcnQuZXJyb3JzIGltcG9ydCAqCitmcm9tIHB5a2lja3N0YXJ0Lm9wdGlvbnMgaW1wb3J0ICoKKworaW1wb3J0IGdldHRleHQKK2ltcG9ydCB3YXJuaW5ncworXyA9IGxhbWJkYSB4OiBnZXR0ZXh0LmxkZ2V0dGV4dCgicHlraWNrc3RhcnQiLCB4KQorCitjbGFzcyBGQzNfUGFydERhdGEoQmFzZURhdGEpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEJhc2VEYXRhLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEJhc2VEYXRhLnJlbW92ZWRBdHRycworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEJhc2VEYXRhLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5hY3RpdmUgPSBrd2FyZ3MuZ2V0KCJhY3RpdmUiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5wcmltT25seSA9IGt3YXJncy5nZXQoInByaW1Pbmx5IiwgRmFsc2UpCisgICAgICAgIHNlbGYuZW5kID0ga3dhcmdzLmdldCgiZW5kIiwgMCkKKyAgICAgICAgc2VsZi5mc3R5cGUgPSBrd2FyZ3MuZ2V0KCJmc3R5cGUiLCAiIikKKyAgICAgICAgc2VsZi5ncm93ID0ga3dhcmdzLmdldCgiZ3JvdyIsIEZhbHNlKQorICAgICAgICBzZWxmLm1heFNpemVNQiA9IGt3YXJncy5nZXQoIm1heFNpemVNQiIsIDApCisgICAgICAgIHNlbGYuZm9ybWF0ID0ga3dhcmdzLmdldCgiZm9ybWF0IiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5vbmJpb3NkaXNrID0ga3dhcmdzLmdldCgib25iaW9zZGlzayIsICIiKQorICAgICAgICBzZWxmLmRpc2sgPSBrd2FyZ3MuZ2V0KCJkaXNrIiwgIiIpCisgICAgICAgIHNlbGYub25QYXJ0ID0ga3dhcmdzLmdldCgib25QYXJ0IiwgIiIpCisgICAgICAgIHNlbGYucmVjb21tZW5kZWQgPSBrd2FyZ3MuZ2V0KCJyZWNvbW1lbmRlZCIsIEZhbHNlKQorICAgICAgICBzZWxmLnNpemUgPSBrd2FyZ3MuZ2V0KCJzaXplIiwgTm9uZSkKKyAgICAgICAgc2VsZi5zdGFydCA9IGt3YXJncy5nZXQoInN0YXJ0IiwgMCkKKyAgICAgICAgc2VsZi5tb3VudHBvaW50ID0ga3dhcmdzLmdldCgibW91bnRwb2ludCIsICIiKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCB5KToKKyAgICAgICAgaWYgc2VsZi5tb3VudHBvaW50OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubW91bnRwb2ludCA9PSB5Lm1vdW50cG9pbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9nZXRBcmdzQXNTdHIoc2VsZik6CisgICAgICAgIHJldHZhbCA9ICIiCisKKyAgICAgICAgaWYgc2VsZi5hY3RpdmU6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWFjdGl2ZSIKKyAgICAgICAgaWYgc2VsZi5wcmltT25seToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tYXNwcmltYXJ5IgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJlbmQiKSBhbmQgc2VsZi5lbmQgIT0gMDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tZW5kPSVzIiAlIHNlbGYuZW5kCisgICAgICAgIGlmIHNlbGYuZnN0eXBlICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1mc3R5cGU9XCIlc1wiIiAlIHNlbGYuZnN0eXBlCisgICAgICAgIGlmIHNlbGYuZ3JvdzoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tZ3JvdyIKKyAgICAgICAgaWYgc2VsZi5tYXhTaXplTUIgPiAwOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1tYXhzaXplPSVkIiAlIHNlbGYubWF4U2l6ZU1CCisgICAgICAgIGlmIG5vdCBzZWxmLmZvcm1hdDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbm9mb3JtYXQiCisgICAgICAgIGlmIHNlbGYub25iaW9zZGlzayAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tb25iaW9zZGlzaz0lcyIgJSBzZWxmLm9uYmlvc2Rpc2sKKyAgICAgICAgaWYgc2VsZi5kaXNrICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1vbmRpc2s9JXMiICUgc2VsZi5kaXNrCisgICAgICAgIGlmIHNlbGYub25QYXJ0ICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1vbnBhcnQ9JXMiICUgc2VsZi5vblBhcnQKKyAgICAgICAgaWYgc2VsZi5yZWNvbW1lbmRlZDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tcmVjb21tZW5kZWQiCisgICAgICAgIGlmIHNlbGYuc2l6ZSBhbmQgc2VsZi5zaXplICE9IDA6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXNpemU9JXNrIiAlIHNlbGYuc2l6ZQorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJzdGFydCIpIGFuZCBzZWxmLnN0YXJ0ICE9IDA6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXN0YXJ0PSVzIiAlIHNlbGYuc3RhcnQKKworICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dmFsID0gQmFzZURhdGEuX19zdHJfXyhzZWxmKQorICAgICAgICBpZiBzZWxmLm1vdW50cG9pbnQ6CisgICAgICAgICAgICBtb3VudHBvaW50X3N0ciA9ICIlcyIgJSBzZWxmLm1vdW50cG9pbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1vdW50cG9pbnRfc3RyID0gIihObyBtb3VudCBwb2ludCkiCisgICAgICAgIHJldHZhbCArPSAicGFydCAlcyVzXG4iICUgKG1vdW50cG9pbnRfc3RyLCBzZWxmLl9nZXRBcmdzQXNTdHIoKSkKKyAgICAgICAgcmV0dXJuIHJldHZhbAorCitjbGFzcyBGQzRfUGFydERhdGEoRkMzX1BhcnREYXRhKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGQzNfUGFydERhdGEucmVtb3ZlZEtleXdvcmRzCisgICAgcmVtb3ZlZEF0dHJzID0gRkMzX1BhcnREYXRhLnJlbW92ZWRBdHRycworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEZDM19QYXJ0RGF0YS5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYnl0ZXNQZXJJbm9kZSA9IGt3YXJncy5nZXQoImJ5dGVzUGVySW5vZGUiLCA0MDk2KQorICAgICAgICBzZWxmLmZzb3B0cyA9IGt3YXJncy5nZXQoImZzb3B0cyIsICIiKQorICAgICAgICBzZWxmLmxhYmVsID0ga3dhcmdzLmdldCgibGFiZWwiLCAiIikKKworICAgIGRlZiBfZ2V0QXJnc0FzU3RyKHNlbGYpOgorICAgICAgICByZXR2YWwgPSBGQzNfUGFydERhdGEuX2dldEFyZ3NBc1N0cihzZWxmKQorCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgImJ5dGVzUGVySW5vZGUiKSBhbmQgc2VsZi5ieXRlc1Blcklub2RlICE9IDA6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWJ5dGVzLXBlci1pbm9kZT0lZCIgJSBzZWxmLmJ5dGVzUGVySW5vZGUKKyAgICAgICAgaWYgc2VsZi5mc29wdHMgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWZzb3B0aW9ucz1cIiVzXCIiICUgc2VsZi5mc29wdHMKKyAgICAgICAgaWYgc2VsZi5sYWJlbCAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbGFiZWw9JXMiICUgc2VsZi5sYWJlbAorCisgICAgICAgIHJldHVybiByZXR2YWwKKworY2xhc3MgRjlfUGFydERhdGEoRkM0X1BhcnREYXRhKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGQzRfUGFydERhdGEucmVtb3ZlZEtleXdvcmRzICsgWyJieXRlc1Blcklub2RlIl0KKyAgICByZW1vdmVkQXR0cnMgPSBGQzRfUGFydERhdGEucmVtb3ZlZEF0dHJzICsgWyJieXRlc1Blcklub2RlIl0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBGQzRfUGFydERhdGEuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmRlbGV0ZVJlbW92ZWRBdHRycygpCisKKyAgICAgICAgc2VsZi5mc29wdHMgPSBrd2FyZ3MuZ2V0KCJmc29wdHMiLCAiIikKKyAgICAgICAgc2VsZi5sYWJlbCA9IGt3YXJncy5nZXQoImxhYmVsIiwgIiIpCisgICAgICAgIHNlbGYuZnNwcm9maWxlID0ga3dhcmdzLmdldCgiZnNwcm9maWxlIiwgIiIpCisgICAgICAgIHNlbGYuZW5jcnlwdGVkID0ga3dhcmdzLmdldCgiZW5jcnlwdGVkIiwgRmFsc2UpCisgICAgICAgIHNlbGYucGFzc3BocmFzZSA9IGt3YXJncy5nZXQoInBhc3NwaHJhc2UiLCAiIikKKworICAgIGRlZiBfZ2V0QXJnc0FzU3RyKHNlbGYpOgorICAgICAgICByZXR2YWwgPSBGQzRfUGFydERhdGEuX2dldEFyZ3NBc1N0cihzZWxmKQorCisgICAgICAgIGlmIHNlbGYuZnNwcm9maWxlICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1mc3Byb2ZpbGU9XCIlc1wiIiAlIHNlbGYuZnNwcm9maWxlCisgICAgICAgIGlmIHNlbGYuZW5jcnlwdGVkOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1lbmNyeXB0ZWQiCisKKyAgICAgICAgICAgIGlmIHNlbGYucGFzc3BocmFzZSAhPSAiIjoKKyAgICAgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXBhc3NwaHJhc2U9XCIlc1wiIiAlIHNlbGYucGFzc3BocmFzZQorCisgICAgICAgIHJldHVybiByZXR2YWwKKworY2xhc3MgRjExX1BhcnREYXRhKEY5X1BhcnREYXRhKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGOV9QYXJ0RGF0YS5yZW1vdmVkS2V5d29yZHMgKyBbInN0YXJ0IiwgImVuZCJdCisgICAgcmVtb3ZlZEF0dHJzID0gRjlfUGFydERhdGEucmVtb3ZlZEF0dHJzICsgWyJzdGFydCIsICJlbmQiXQorCitjbGFzcyBGMTJfUGFydERhdGEoRjExX1BhcnREYXRhKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGMTFfUGFydERhdGEucmVtb3ZlZEtleXdvcmRzCisgICAgcmVtb3ZlZEF0dHJzID0gRjExX1BhcnREYXRhLnJlbW92ZWRBdHRycworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEYxMV9QYXJ0RGF0YS5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgc2VsZi5lc2Nyb3djZXJ0ID0ga3dhcmdzLmdldCgiZXNjcm93Y2VydCIsICIiKQorICAgICAgICBzZWxmLmJhY2t1cHBhc3NwaHJhc2UgPSBrd2FyZ3MuZ2V0KCJiYWNrdXBwYXNzcGhyYXNlIiwgRmFsc2UpCisKKyAgICBkZWYgX2dldEFyZ3NBc1N0cihzZWxmKToKKyAgICAgICAgcmV0dmFsID0gRjExX1BhcnREYXRhLl9nZXRBcmdzQXNTdHIoc2VsZikKKworICAgICAgICBpZiBzZWxmLmVuY3J5cHRlZCBhbmQgc2VsZi5lc2Nyb3djZXJ0ICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1lc2Nyb3djZXJ0PVwiJXNcIiIgJSBzZWxmLmVzY3Jvd2NlcnQKKworICAgICAgICAgICAgaWYgc2VsZi5iYWNrdXBwYXNzcGhyYXNlOgorICAgICAgICAgICAgICAgIHJldHZhbCArPSAiIC0tYmFja3VwcGFzc3BocmFzZSIKKworICAgICAgICByZXR1cm4gcmV0dmFsCisKK0YxNF9QYXJ0RGF0YSA9IEYxMl9QYXJ0RGF0YQorCitjbGFzcyBGQzNfUGFydGl0aW9uKEtpY2tzdGFydENvbW1hbmQpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEtpY2tzdGFydENvbW1hbmQucmVtb3ZlZEtleXdvcmRzCisgICAgcmVtb3ZlZEF0dHJzID0gS2lja3N0YXJ0Q29tbWFuZC5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5PTEzMCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgS2lja3N0YXJ0Q29tbWFuZC5fX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5LCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYub3AgPSBzZWxmLl9nZXRQYXJzZXIoKQorCisgICAgICAgIHNlbGYucGFydGl0aW9ucyA9IGt3YXJncy5nZXQoInBhcnRpdGlvbnMiLCBbXSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR2YWwgPSAiIgorCisgICAgICAgIGZvciBwYXJ0IGluIHNlbGYucGFydGl0aW9uczoKKyAgICAgICAgICAgIHJldHZhbCArPSBwYXJ0Ll9fc3RyX18oKQorCisgICAgICAgIGlmIHJldHZhbCAhPSAiIjoKKyAgICAgICAgICAgIHJldHVybiAiIyBEaXNrIHBhcnRpdGlvbmluZyBpbmZvcm1hdGlvblxuIiArIHJldHZhbAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICIiCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgZGVmIHBhcnRfY2IgKG9wdGlvbiwgb3B0X3N0ciwgdmFsdWUsIHBhcnNlcik6CisgICAgICAgICAgICBpZiB2YWx1ZS5zdGFydHN3aXRoKCIvZGV2LyIpOgorICAgICAgICAgICAgICAgIHBhcnNlci52YWx1ZXMuZW5zdXJlX3ZhbHVlKG9wdGlvbi5kZXN0LCB2YWx1ZVs1Ol0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhcnNlci52YWx1ZXMuZW5zdXJlX3ZhbHVlKG9wdGlvbi5kZXN0LCB2YWx1ZSkKKworICAgICAgICBvcCA9IEtTT3B0aW9uUGFyc2VyKCkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1hY3RpdmUiLCBkZXN0PSJhY3RpdmUiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tYXNwcmltYXJ5IiwgZGVzdD0icHJpbU9ubHkiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tZW5kIiwgZGVzdD0iZW5kIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9ImludCIsCisgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9MSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1mc3R5cGUiLCAiLS10eXBlIiwgZGVzdD0iZnN0eXBlIikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1ncm93IiwgZGVzdD0iZ3JvdyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tbWF4c2l6ZSIsIGRlc3Q9Im1heFNpemVNQiIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPSJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgIG5hcmdzPTEpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tbm9mb3JtYXQiLCBkZXN0PSJmb3JtYXQiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tb25iaW9zZGlzayIsIGRlc3Q9Im9uYmlvc2Rpc2siKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLW9uZGlzayIsICItLW9uZHJpdmUiLCBkZXN0PSJkaXNrIikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1vbnBhcnQiLCAiLS11c2VwYXJ0IiwgZGVzdD0ib25QYXJ0IiwgYWN0aW9uPSJjYWxsYmFjayIsCisgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s9cGFydF9jYiwgbmFyZ3M9MSwgdHlwZT0ic3RyaW5nIikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1yZWNvbW1lbmRlZCIsIGRlc3Q9InJlY29tbWVuZGVkIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLXNpemUiLCBkZXN0PSJzaXplIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9InNpemUiLAorICAgICAgICAgICAgICAgICAgICAgIG5hcmdzPTEpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tc3RhcnQiLCBkZXN0PSJzdGFydCIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPSJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgIG5hcmdzPTEpCisgICAgICAgIHJldHVybiBvcAorCisgICAgZGVmIHBhcnNlKHNlbGYsIGFyZ3MpOgorICAgICAgICAob3B0cywgZXh0cmEpID0gc2VsZi5vcC5wYXJzZV9hcmdzKGFyZ3M9YXJncywgbGluZW5vPXNlbGYubGluZW5vKQorCisgICAgICAgIHBkID0gc2VsZi5oYW5kbGVyLlBhcnREYXRhKCkKKyAgICAgICAgc2VsZi5fc2V0VG9PYmooc2VsZi5vcCwgb3B0cywgcGQpCisgICAgICAgIHBkLmxpbmVubyA9IHNlbGYubGluZW5vCisgICAgICAgIGlmIGV4dHJhOgorICAgICAgICAgICAgcGQubW91bnRwb2ludCA9IGV4dHJhWzBdCisgICAgICAgICAgICBpZiBwZCBpbiBzZWxmLmRhdGFMaXN0KCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybihfKCJBIHBhcnRpdGlvbiB3aXRoIHRoZSBtb3VudHBvaW50ICVzIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZC4iKSAlIHBkLm1vdW50cG9pbnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwZC5tb3VudHBvaW50ID0gTm9uZQorCisgICAgICAgIHJldHVybiBwZAorCisgICAgZGVmIGRhdGFMaXN0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wYXJ0aXRpb25zCisKK2NsYXNzIEZDNF9QYXJ0aXRpb24oRkMzX1BhcnRpdGlvbik6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRkMzX1BhcnRpdGlvbi5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBGQzNfUGFydGl0aW9uLnJlbW92ZWRBdHRycworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHk9MTMwLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBGQzNfUGFydGl0aW9uLl9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHksICphcmdzLCAqKmt3YXJncykKKworICAgICAgICBkZWYgcGFydF9jYiAob3B0aW9uLCBvcHRfc3RyLCB2YWx1ZSwgcGFyc2VyKToKKyAgICAgICAgICAgIGlmIHZhbHVlLnN0YXJ0c3dpdGgoIi9kZXYvIik6CisgICAgICAgICAgICAgICAgcGFyc2VyLnZhbHVlcy5lbnN1cmVfdmFsdWUob3B0aW9uLmRlc3QsIHZhbHVlWzU6XSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyc2VyLnZhbHVlcy5lbnN1cmVfdmFsdWUob3B0aW9uLmRlc3QsIHZhbHVlKQorCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIG9wID0gRkMzX1BhcnRpdGlvbi5fZ2V0UGFyc2VyKHNlbGYpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tYnl0ZXMtcGVyLWlub2RlIiwgZGVzdD0iYnl0ZXNQZXJJbm9kZSIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImludCIsIG5hcmdzPTEpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tZnNvcHRpb25zIiwgZGVzdD0iZnNvcHRzIikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1sYWJlbCIsIGRlc3Q9ImxhYmVsIikKKyAgICAgICAgcmV0dXJuIG9wCisKK2NsYXNzIEY5X1BhcnRpdGlvbihGQzRfUGFydGl0aW9uKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGQzRfUGFydGl0aW9uLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEZDNF9QYXJ0aXRpb24ucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eT0xMzAsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEZDNF9QYXJ0aXRpb24uX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eSwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIGRlZiBwYXJ0X2NiIChvcHRpb24sIG9wdF9zdHIsIHZhbHVlLCBwYXJzZXIpOgorICAgICAgICAgICAgaWYgdmFsdWUuc3RhcnRzd2l0aCgiL2Rldi8iKToKKyAgICAgICAgICAgICAgICBwYXJzZXIudmFsdWVzLmVuc3VyZV92YWx1ZShvcHRpb24uZGVzdCwgdmFsdWVbNTpdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJzZXIudmFsdWVzLmVuc3VyZV92YWx1ZShvcHRpb24uZGVzdCwgdmFsdWUpCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgb3AgPSBGQzRfUGFydGl0aW9uLl9nZXRQYXJzZXIoc2VsZikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1ieXRlcy1wZXItaW5vZGUiLCBkZXByZWNhdGVkPTEpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tZnNwcm9maWxlIikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1lbmNyeXB0ZWQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLXBhc3NwaHJhc2UiKQorICAgICAgICByZXR1cm4gb3AKKworY2xhc3MgRjExX1BhcnRpdGlvbihGOV9QYXJ0aXRpb24pOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEY5X1BhcnRpdGlvbi5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBGOV9QYXJ0aXRpb24ucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgb3AgPSBGOV9QYXJ0aXRpb24uX2dldFBhcnNlcihzZWxmKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLXN0YXJ0IiwgZGVwcmVjYXRlZD0xKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWVuZCIsIGRlcHJlY2F0ZWQ9MSkKKyAgICAgICAgcmV0dXJuIG9wCisKK2NsYXNzIEYxMl9QYXJ0aXRpb24oRjExX1BhcnRpdGlvbik6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRjExX1BhcnRpdGlvbi5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBGMTFfUGFydGl0aW9uLnJlbW92ZWRBdHRycworCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIG9wID0gRjExX1BhcnRpdGlvbi5fZ2V0UGFyc2VyKHNlbGYpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tZXNjcm93Y2VydCIpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tYmFja3VwcGFzc3BocmFzZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIHJldHVybiBvcAorCitjbGFzcyBGMTRfUGFydGl0aW9uKEYxMl9QYXJ0aXRpb24pOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEYxMl9QYXJ0aXRpb24ucmVtb3ZlZEtleXdvcmRzCisgICAgcmVtb3ZlZEF0dHJzID0gRjEyX1BhcnRpdGlvbi5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBvcCA9IEYxMl9QYXJ0aXRpb24uX2dldFBhcnNlcihzZWxmKQorICAgICAgICBvcC5yZW1vdmVfb3B0aW9uKCItLWJ5dGVzLXBlci1pbm9kZSIpCisgICAgICAgIG9wLnJlbW92ZV9vcHRpb24oIi0tc3RhcnQiKQorICAgICAgICBvcC5yZW1vdmVfb3B0aW9uKCItLWVuZCIpCisgICAgICAgIHJldHVybiBvcApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvY29uc3RhbnRzLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvY29uc3RhbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMTJmYzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9jb25zdGFudHMucHkKQEAgLTAsMCArMSw1NyBAQAorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMDUtMjAwNyBSZWQgSGF0LCBJbmMuCisjCisjIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLCBtb2RpZnksCisjIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugdi4yLiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyMgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nIHRoZQorIyBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxCisjIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgQW55IFJlZCBIYXQKKyMgdHJhZGVtYXJrcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIHNvdXJjZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gYXJlIG5vdAorIyBzdWJqZWN0IHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgbWF5IG9ubHkgYmUgdXNlZCBvciByZXBsaWNhdGVkCisjIHdpdGggdGhlIGV4cHJlc3MgcGVybWlzc2lvbiBvZiBSZWQgSGF0LCBJbmMuIAorIworQ0xFQVJQQVJUX1RZUEVfTElOVVggPSAwCitDTEVBUlBBUlRfVFlQRV9BTEwgPSAxCitDTEVBUlBBUlRfVFlQRV9OT05FID0gMgorCitESVNQTEFZX01PREVfQ01ETElORSA9IDAKK0RJU1BMQVlfTU9ERV9HUkFQSElDQUwgPSAxCitESVNQTEFZX01PREVfVEVYVCA9IDIKKworRklSU1RCT09UX0RFRkFVTFQgPSAwCitGSVJTVEJPT1RfU0tJUCA9IDEKK0ZJUlNUQk9PVF9SRUNPTkZJRyA9IDIKKworS1NfTUlTU0lOR19QUk9NUFQgPSAwCitLU19NSVNTSU5HX0lHTk9SRSA9IDEKKworU0VMSU5VWF9ESVNBQkxFRCA9IDAKK1NFTElOVVhfRU5GT1JDSU5HID0gMQorU0VMSU5VWF9QRVJNSVNTSVZFID0gMgorCitLU19TQ1JJUFRfUFJFID0gMAorS1NfU0NSSVBUX1BPU1QgPSAxCitLU19TQ1JJUFRfVFJBQ0VCQUNLID0gMgorCitLU19XQUlUID0gMAorS1NfUkVCT09UID0gMQorS1NfU0hVVERPV04gPSAyCisKK0tTX0lOU1RLRVlfU0tJUCA9IC05OQorCitCT09UUFJPVE9fREhDUCA9ICJkaGNwIgorQk9PVFBST1RPX0JPT1RQID0gImJvb3RwIgorQk9PVFBST1RPX1NUQVRJQyA9ICJzdGF0aWMiCitCT09UUFJPVE9fUVVFUlkgPSAicXVlcnkiCitCT09UUFJPVE9fSUJGVCA9ICJpYmZ0IgorCitHUk9VUF9SRVFVSVJFRCA9IDAKK0dST1VQX0RFRkFVTFQgPSAxCitHUk9VUF9BTEwgPSAyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9lcnJvcnMucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9lcnJvcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIzNGQ5OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2Vycm9ycy5weQpAQCAtMCwwICsxLDEwMyBAQAorIworIyBlcnJvcnMucHk6ICBLaWNrc3RhcnQgZXJyb3IgaGFuZGxpbmcuCisjCisjIENocmlzIEx1bWVucyA8Y2x1bWVuc0ByZWRoYXQuY29tPgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKKyIiIgorRXJyb3IgaGFuZGxpbmcgY2xhc3NlcyBhbmQgZnVuY3Rpb25zLgorCitUaGlzIG1vZHVsZSBleHBvcnRzIGEgc2luZ2xlIGZ1bmN0aW9uOgorCisgICAgZm9ybWF0RXJyb3JNc2cgLSBQcm9wZXJseSBmb3JtYXRzIGFuIGVycm9yIG1lc3NhZ2UuCisKK0l0IGFsc28gZXhwb3J0cyBzZXZlcmFsIGV4Y2VwdGlvbiBjbGFzc2VzOgorCisgICAgS2lja3N0YXJ0RXJyb3IgLSBBIGdlbmVyaWMgZXhjZXB0aW9uIGNsYXNzLgorCisgICAgS2lja3N0YXJ0UGFyc2VFcnJvciAtIEFuIGV4Y2VwdGlvbiBmb3IgZXJyb3JzIHJlbGF0aW5nIHRvIHBhcnNpbmcuCisKKyAgICBLaWNrc3RhcnRWYWx1ZUVycm9yIC0gQW4gZXhjZXB0aW9uIGZvciBlcnJvcnMgcmVsYXRpbmcgdG8gb3B0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcuCisKKyAgICBLaWNrc3RhcnRWZXJzaW9uRXJyb3IgLSBBbiBleGNlcHRpb24gZm9yIGVycm9ycyByZWxhdGluZyB0byB1bnN1cHBvcnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheCB2ZXJzaW9ucy4KKyIiIgoraW1wb3J0IGdldHRleHQKK18gPSBsYW1iZGEgeDogZ2V0dGV4dC5sZGdldHRleHQoInB5a2lja3N0YXJ0IiwgeCkKKworZGVmIGZvcm1hdEVycm9yTXNnKGxpbmVubywgbXNnPSIiKToKKyAgICAiIiJQcm9wZXJseSBmb3JtYXQgdGhlIGVycm9yIG1lc3NhZ2UgbXNnIGZvciBpbmNsdXNpb24gaW4gYW4gZXhjZXB0aW9uLiIiIgorICAgIGlmIG1zZyAhPSAiIjoKKyAgICAgICAgbWFwcGluZyA9IHsibGluZW5vIjogbGluZW5vLCAibXNnIjogbXNnfQorICAgICAgICByZXR1cm4gXygiVGhlIGZvbGxvd2luZyBwcm9ibGVtIG9jY3VycmVkIG9uIGxpbmUgJShsaW5lbm8pcyBvZiB0aGUga2lja3N0YXJ0IGZpbGU6XG5cbiUobXNnKXNcbiIpICUgbWFwcGluZworICAgIGVsc2U6CisgICAgICAgIHJldHVybiBfKCJUaGVyZSB3YXMgYSBwcm9ibGVtIHJlYWRpbmcgZnJvbSBsaW5lICVzIG9mIHRoZSBraWNrc3RhcnQgZmlsZSIpICUgbGluZW5vCisKK2NsYXNzIEtpY2tzdGFydEVycm9yKEV4Y2VwdGlvbik6CisgICAgIiIiQSBnZW5lcmljIGV4Y2VwdGlvbiBjbGFzcyBmb3IgdW5zcGVjaWZpYyBlcnJvciBjb25kaXRpb25zLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWwgPSAiIik6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBLaWNrc3RhcnRFcnJvciBleGNlcHRpb24gaW5zdGFuY2Ugd2l0aCB0aGUgZGVzY3JpcHRpdmUKKyAgICAgICAgICAgbWVzc2FnZSB2YWwuICB2YWwgc2hvdWxkIGJlIHRoZSByZXR1cm4gdmFsdWUgb2YgZm9ybWF0RXJyb3JNc2cuCisgICAgICAgICIiIgorICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbAorCisgICAgZGVmIF9fc3RyX18gKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCitjbGFzcyBLaWNrc3RhcnRQYXJzZUVycm9yKEtpY2tzdGFydEVycm9yKToKKyAgICAiIiJBbiBleGNlcHRpb24gY2xhc3MgZm9yIGVycm9ycyB3aGVuIHByb2Nlc3NpbmcgdGhlIGlucHV0IGZpbGUsIHN1Y2ggYXMKKyAgICAgICB1bmtub3duIG9wdGlvbnMsIGNvbW1hbmRzLCBvciBzZWN0aW9ucy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IEtpY2tzdGFydFBhcnNlRXJyb3IgZXhjZXB0aW9uIGluc3RhbmNlIHdpdGggdGhlCisgICAgICAgICAgIGRlc2NyaXB0aXZlIG1lc3NhZ2UgdmFsLiAgdmFsIHNob3VsZCBiZSB0aGUgcmV0dXJuIHZhbHVlIG9mCisgICAgICAgICAgIGZvcm1hdEVycm9yTXNnLgorICAgICAgICAiIiIKKyAgICAgICAgS2lja3N0YXJ0RXJyb3IuX19pbml0X18oc2VsZiwgbXNnKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKK2NsYXNzIEtpY2tzdGFydFZhbHVlRXJyb3IoS2lja3N0YXJ0RXJyb3IpOgorICAgICIiIkFuIGV4Y2VwdGlvbiBjbGFzcyBmb3IgZXJyb3JzIHdoZW4gcHJvY2Vzc2luZyBhcmd1bWVudHMgdG8gY29tbWFuZHMsCisgICAgICAgc3VjaCBhcyB0b28gbWFueSBhcmd1bWVudHMsIHRvbyBmZXcgYXJndW1lbnRzLCBvciBtaXNzaW5nIHJlcXVpcmVkCisgICAgICAgYXJndW1lbnRzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2cpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgS2lja3N0YXJ0VmFsdWVFcnJvciBleGNlcHRpb24gaW5zdGFuY2Ugd2l0aCB0aGUKKyAgICAgICAgICAgZGVzY3JpcHRpdmUgbWVzc2FnZSB2YWwuICB2YWwgc2hvdWxkIGJlIHRoZSByZXR1cm4gdmFsdWUgb2YKKyAgICAgICAgICAgZm9ybWF0RXJyb3JNc2cuCisgICAgICAgICIiIgorICAgICAgICBLaWNrc3RhcnRFcnJvci5fX2luaXRfXyhzZWxmLCBtc2cpCisKKyAgICBkZWYgX19zdHJfXyAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKK2NsYXNzIEtpY2tzdGFydFZlcnNpb25FcnJvcihLaWNrc3RhcnRFcnJvcik6CisgICAgIiIiQW4gZXhjZXB0aW9uIGNsYXNzIGZvciBlcnJvcnMgcmVsYXRlZCB0byB1c2luZyBhbiBpbmNvcnJlY3QgdmVyc2lvbiBvZgorICAgICAgIGtpY2tzdGFydCBzeW50YXguCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBLaWNrc3RhcnRWZXJzaW9uRXJyb3IgZXhjZXB0aW9uIGluc3RhbmNlIHdpdGggdGhlCisgICAgICAgICAgIGRlc2NyaXB0aXZlIG1lc3NhZ2UgdmFsLiAgdmFsIHNob3VsZCBiZSB0aGUgcmV0dXJuIHZhbHVlIG9mCisgICAgICAgICAgIGZvcm1hdEVycm9yTXNnLgorICAgICAgICAiIiIKKyAgICAgICAgS2lja3N0YXJ0RXJyb3IuX19pbml0X18oc2VsZiwgbXNnKQorCisgICAgZGVmIF9fc3RyX18gKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvaGFuZGxlcnMvX19pbml0X18ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9oYW5kbGVycy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvaGFuZGxlcnMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2hhbmRsZXJzL2NvbnRyb2wucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9oYW5kbGVycy9jb250cm9sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYzgwZDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9oYW5kbGVycy9jb250cm9sLnB5CkBAIC0wLDAgKzEsNDYgQEAKKyMKKyMgQ2hyaXMgTHVtZW5zIDxjbHVtZW5zQHJlZGhhdC5jb20+CisjCisjIENvcHlyaWdodCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIFJlZCBIYXQsIEluYy4KKyMKKyMgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsIG1vZGlmeSwKKyMgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorIyB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlCisjIGltcGxpZWQgd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEKKyMgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBBbnkgUmVkIEhhdAorIyB0cmFkZW1hcmtzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgc291cmNlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiBhcmUgbm90CisjIHN1YmplY3QgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBtYXkgb25seSBiZSB1c2VkIG9yIHJlcGxpY2F0ZWQKKyMgd2l0aCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIFJlZCBIYXQsIEluYy4gCisjCitmcm9tIHB5a2lja3N0YXJ0LnZlcnNpb24gaW1wb3J0ICoKK2Zyb20gcHlraWNrc3RhcnQuY29tbWFuZHMgaW1wb3J0ICoKKworIyBUaGlzIG1hcCBpcyBrZXllZCBvbiBraWNrc3RhcnQgc3ludGF4IHZlcnNpb24gYXMgcHJvdmlkZWQgYnkKKyMgcHlraWNrc3RhcnQudmVyc2lvbi4gIFdpdGhpbiBlYWNoIHN1Yi1kaWN0IGlzIGEgbWFwcGluZyBmcm9tIGNvbW1hbmQgbmFtZQorIyB0byB0aGUgY2xhc3MgdGhhdCBoYW5kbGVzIGl0LiAgVGhpcyBpcyBhbiBvbnRvIG1hcHBpbmcgLSB0aGF0IGlzLCBtdWx0aXBsZQorIyBjb21tYW5kIG5hbWVzIGNhbiBtYXAgdG8gdGhlIHNhbWUgY2xhc3MuICBIb3dldmVyLCB0aGUgSGFuZGxlciB3aWxsIGVuc3VyZQorIyB0aGF0IG9ubHkgb25lIGluc3RhbmNlIG9mIGVhY2ggY2xhc3MgZXZlciBleGlzdHMuCitjb21tYW5kTWFwID0geworICAgICMgYmFzZWQgb24gZjE1CisgICAgRjE2OiB7CisgICAgICAgICJib290bG9hZGVyIjogYm9vdGxvYWRlci5GMTVfQm9vdGxvYWRlciwKKyAgICAgICAgInBhcnQiOiBwYXJ0aXRpb24uRjE0X1BhcnRpdGlvbiwKKyAgICAgICAgInBhcnRpdGlvbiI6IHBhcnRpdGlvbi5GMTRfUGFydGl0aW9uLAorICAgIH0sCit9CisKKyMgVGhpcyBtYXAgaXMga2V5ZWQgb24ga2lja3N0YXJ0IHN5bnRheCB2ZXJzaW9uIGFzIHByb3ZpZGVkIGJ5CisjIHB5a2lja3N0YXJ0LnZlcnNpb24uICBXaXRoaW4gZWFjaCBzdWItZGljdCBpcyBhIG1hcHBpbmcgZnJvbSBhIGRhdGEgb2JqZWN0CisjIG5hbWUgdG8gdGhlIGNsYXNzIHRoYXQgcHJvdmlkZXMgaXQuICBUaGlzIGlzIGEgYmlqZWN0aXZlIG1hcHBpbmcgLSB0aGF0IGlzLAorIyBlYWNoIG5hbWUgbWFwcyB0byBleGFjdGx5IG9uZSBkYXRhIGNsYXNzIGFuZCBhbGwgZGF0YSBjbGFzc2VzIGhhdmUgYSBuYW1lLgorIyBNb3JlIHRoYW4gb25lIGluc3RhbmNlIG9mIGVhY2ggY2xhc3MgaXMgYWxsb3dlZCB0byBleGlzdCwgaG93ZXZlci4KK2RhdGFNYXAgPSB7CisgICAgRjE2OiB7CisgICAgICAgICJQYXJ0RGF0YSI6IHBhcnRpdGlvbi5GMTRfUGFydERhdGEsCisgICAgfSwKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2hhbmRsZXJzL2YxNi5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2hhbmRsZXJzL2YxNi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzUyZjhkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvaGFuZGxlcnMvZjE2LnB5CkBAIC0wLDAgKzEsMjQgQEAKKyMKKyMgQ2hyaXMgTHVtZW5zIDxjbHVtZW5zQHJlZGhhdC5jb20+CisjCisjIENvcHlyaWdodCAyMDExIFJlZCBIYXQsIEluYy4KKyMKKyMgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsIG1vZGlmeSwKKyMgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorIyB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlCisjIGltcGxpZWQgd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEKKyMgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBBbnkgUmVkIEhhdAorIyB0cmFkZW1hcmtzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgc291cmNlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiBhcmUgbm90CisjIHN1YmplY3QgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBtYXkgb25seSBiZSB1c2VkIG9yIHJlcGxpY2F0ZWQKKyMgd2l0aCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIFJlZCBIYXQsIEluYy4gCisjCitmcm9tIHB5a2lja3N0YXJ0LmJhc2UgaW1wb3J0ICoKK2Zyb20gcHlraWNrc3RhcnQudmVyc2lvbiBpbXBvcnQgKgorCitjbGFzcyBGMTZIYW5kbGVyKEJhc2VIYW5kbGVyKToKKyAgICB2ZXJzaW9uID0gRjE2CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9rby5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2tvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNTBkMTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9rby5weQpAQCAtMCwwICsxLDM3IEBACisjCisjIENocmlzIEx1bWVucyA8Y2x1bWVuc0ByZWRoYXQuY29tPgorIworIyBDb3B5cmlnaHQgMjAwOSBSZWQgSGF0LCBJbmMuCisjCisjIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLCBtb2RpZnksCisjIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugdi4yLiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyMgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nIHRoZQorIyBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxCisjIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgQW55IFJlZCBIYXQKKyMgdHJhZGVtYXJrcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIHNvdXJjZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gYXJlIG5vdAorIyBzdWJqZWN0IHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgbWF5IG9ubHkgYmUgdXNlZCBvciByZXBsaWNhdGVkCisjIHdpdGggdGhlIGV4cHJlc3MgcGVybWlzc2lvbiBvZiBSZWQgSGF0LCBJbmMuIAorIworIiIiCitCYXNlIGNsYXNzZXMgZm9yIGludGVybmFsIHB5a2lja3N0YXJ0IHVzZS4KKworVGhlIG1vZHVsZSBleHBvcnRzIHRoZSBmb2xsb3dpbmcgaW1wb3J0YW50IGNsYXNzZXM6CisKKyAgICBLaWNrc3RhcnRPYmplY3QgLSBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIGNsYXNzZXMgaW4gcHlraWNrc3RhcnQKKyIiIgorCitjbGFzcyBLaWNrc3RhcnRPYmplY3Qob2JqZWN0KToKKyAgICAiIiJUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG90aGVyIGNsYXNzZXMgaW4gcHlraWNrc3RhcnQuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBLaWNrc3RhcnRPYmplY3QgaW5zdGFuY2UuICBBbGwgb3RoZXIgY2xhc3NlcyBpbgorICAgICAgICAgICBweWtpY2tzdGFydCBzaG91bGQgYmUgZGVyaXZlZCBmcm9tIHRoaXMgb25lLiAgSW5zdGFuY2UgYXR0cmlidXRlczoKKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L29wdGlvbnMucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9vcHRpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYzIzZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9vcHRpb25zLnB5CkBAIC0wLDAgKzEsMjIzIEBACisjCisjIENocmlzIEx1bWVucyA8Y2x1bWVuc0ByZWRoYXQuY29tPgorIworIyBDb3B5cmlnaHQgMjAwNSwgMjAwNiwgMjAwNyBSZWQgSGF0LCBJbmMuCisjCisjIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLCBtb2RpZnksCisjIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugdi4yLiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyMgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nIHRoZQorIyBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxCisjIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgQW55IFJlZCBIYXQKKyMgdHJhZGVtYXJrcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIHNvdXJjZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gYXJlIG5vdAorIyBzdWJqZWN0IHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgbWF5IG9ubHkgYmUgdXNlZCBvciByZXBsaWNhdGVkCisjIHdpdGggdGhlIGV4cHJlc3MgcGVybWlzc2lvbiBvZiBSZWQgSGF0LCBJbmMuIAorIworIiIiCitTcGVjaWFsaXplZCBvcHRpb24gaGFuZGxpbmcuCisKK1RoaXMgbW9kdWxlIGV4cG9ydHMgdHdvIGNsYXNzZXM6CisKKyAgICBLU09wdGlvblBhcnNlciAtIEEgc3BlY2lhbGl6ZWQgc3ViY2xhc3Mgb2YgT3B0aW9uUGFyc2VyIHRvIGJlIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgIGluIEJhc2VIYW5kbGVyIHN1YmNsYXNzZXMuCisKKyAgICBLU09wdGlvbiAtIEEgc3BlY2lhbGl6ZWQgc3ViY2xhc3Mgb2YgT3B0aW9uLgorIiIiCitpbXBvcnQgd2FybmluZ3MKK2Zyb20gY29weSBpbXBvcnQgY29weQorZnJvbSBvcHRwYXJzZSBpbXBvcnQgKgorCitmcm9tIGNvbnN0YW50cyBpbXBvcnQgKgorZnJvbSBlcnJvcnMgaW1wb3J0ICoKK2Zyb20gdmVyc2lvbiBpbXBvcnQgKgorCitpbXBvcnQgZ2V0dGV4dAorXyA9IGxhbWJkYSB4OiBnZXR0ZXh0LmxkZ2V0dGV4dCgicHlraWNrc3RhcnQiLCB4KQorCitjbGFzcyBLU09wdGlvblBhcnNlcihPcHRpb25QYXJzZXIpOgorICAgICIiIkEgc3BlY2lhbGl6ZWQgc3ViY2xhc3Mgb2Ygb3B0cGFyc2UuT3B0aW9uUGFyc2VyIHRvIGhhbmRsZSBleHRyYSBvcHRpb24KKyAgICAgICBhdHRyaWJ1dGUgY2hlY2tpbmcsIHdvcmsgZXJyb3IgcmVwb3J0aW5nIGludG8gdGhlIEtpY2tzdGFydFBhcnNlRXJyb3IKKyAgICAgICBmcmFtZXdvcmssIGFuZCB0byB0dXJuIG9mZiB0aGUgZGVmYXVsdCBoZWxwLgorICAgICIiIgorICAgIGRlZiBleGl0KHNlbGYsIHN0YXR1cz0wLCBtc2c9Tm9uZSk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBlcnJvcihzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxmLmxpbmVubyAhPSBOb25lOgorICAgICAgICAgICAgcmFpc2UgS2lja3N0YXJ0UGFyc2VFcnJvciwgZm9ybWF0RXJyb3JNc2coc2VsZi5saW5lbm8sIG1zZz1tc2cpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBLaWNrc3RhcnRQYXJzZUVycm9yLCBtc2cKKworICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICByZXR2YWwgPSBbXQorCisgICAgICAgIGZvciBvcHQgaW4gc2VsZi5vcHRpb25fbGlzdDoKKyAgICAgICAgICAgIGlmIG9wdCBub3QgaW4gcmV0dmFsOgorICAgICAgICAgICAgICAgIHJldHZhbC5hcHBlbmQob3B0LmRlc3QpCisKKyAgICAgICAgcmV0dXJuIHJldHZhbAorCisgICAgZGVmIF9pbml0X3BhcnNpbmdfc3RhdGUgKHNlbGYpOgorICAgICAgICBPcHRpb25QYXJzZXIuX2luaXRfcGFyc2luZ19zdGF0ZShzZWxmKQorICAgICAgICBzZWxmLm9wdGlvbl9zZWVuID0ge30KKworICAgIGRlZiBjaGVja192YWx1ZXMgKHNlbGYsIHZhbHVlcywgYXJncyk6CisgICAgICAgIGRlZiBzZWVuKHNlbGYsIG9wdGlvbik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5vcHRpb25fc2Vlbi5oYXNfa2V5KG9wdGlvbikKKworICAgICAgICBkZWYgdXNlZFRvb05ldyhzZWxmLCBvcHRpb24pOgorICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5pbnRyb2R1Y2VkIGFuZCBvcHRpb24uaW50cm9kdWNlZCA+IHNlbGYudmVyc2lvbgorCisgICAgICAgIGRlZiB1c2VkRGVwcmVjYXRlZChzZWxmLCBvcHRpb24pOgorICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5kZXByZWNhdGVkCisKKyAgICAgICAgZGVmIHVzZWRSZW1vdmVkKHNlbGYsIG9wdGlvbik6CisgICAgICAgICAgICByZXR1cm4gb3B0aW9uLnJlbW92ZWQgYW5kIG9wdGlvbi5yZW1vdmVkIDw9IHNlbGYudmVyc2lvbgorCisgICAgICAgIGZvciBvcHRpb24gaW4gZmlsdGVyKGxhbWJkYSBvOiBpc2luc3RhbmNlKG8sIE9wdGlvbiksIHNlbGYub3B0aW9uX2xpc3QpOgorICAgICAgICAgICAgaWYgb3B0aW9uLnJlcXVpcmVkIGFuZCBub3Qgc2VlbihzZWxmLCBvcHRpb24pOgorICAgICAgICAgICAgICAgIHJhaXNlIEtpY2tzdGFydFZhbHVlRXJyb3IsIGZvcm1hdEVycm9yTXNnKHNlbGYubGluZW5vLCBfKCJPcHRpb24gJXMgaXMgcmVxdWlyZWQiKSAlIG9wdGlvbikKKyAgICAgICAgICAgIGVsaWYgc2VlbihzZWxmLCBvcHRpb24pIGFuZCB1c2VkVG9vTmV3KHNlbGYsIG9wdGlvbik6CisgICAgICAgICAgICAgICAgbWFwcGluZyA9IHsib3B0aW9uIjogb3B0aW9uLCAiaW50cm8iOiB2ZXJzaW9uVG9TdHJpbmcob3B0aW9uLmludHJvZHVjZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcnNpb24iOiB2ZXJzaW9uVG9TdHJpbmcoc2VsZi52ZXJzaW9uKX0KKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yKF8oIlRoZSAlKG9wdGlvbilzIG9wdGlvbiB3YXMgaW50cm9kdWNlZCBpbiB2ZXJzaW9uICUoaW50cm8pcywgYnV0IHlvdSBhcmUgdXNpbmcga2lja3N0YXJ0IHN5bnRheCB2ZXJzaW9uICUodmVyc2lvbilzLiIpICUgbWFwcGluZykKKyAgICAgICAgICAgIGVsaWYgc2VlbihzZWxmLCBvcHRpb24pIGFuZCB1c2VkUmVtb3ZlZChzZWxmLCBvcHRpb24pOgorICAgICAgICAgICAgICAgIG1hcHBpbmcgPSB7Im9wdGlvbiI6IG9wdGlvbiwgInJlbW92ZWQiOiB2ZXJzaW9uVG9TdHJpbmcob3B0aW9uLnJlbW92ZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcnNpb24iOiB2ZXJzaW9uVG9TdHJpbmcoc2VsZi52ZXJzaW9uKX0KKworICAgICAgICAgICAgICAgIGlmIG9wdGlvbi5yZW1vdmVkID09IHNlbGYudmVyc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcihfKCJUaGUgJShvcHRpb24pcyBvcHRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4iKSAlIG1hcHBpbmcpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcihfKCJUaGUgJShvcHRpb24pcyBvcHRpb24gd2FzIHJlbW92ZWQgaW4gdmVyc2lvbiAlKHJlbW92ZWQpcywgYnV0IHlvdSBhcmUgdXNpbmcga2lja3N0YXJ0IHN5bnRheCB2ZXJzaW9uICUodmVyc2lvbilzLiIpICUgbWFwcGluZykKKyAgICAgICAgICAgIGVsaWYgc2VlbihzZWxmLCBvcHRpb24pIGFuZCB1c2VkRGVwcmVjYXRlZChzZWxmLCBvcHRpb24pOgorICAgICAgICAgICAgICAgIG1hcHBpbmcgPSB7ImxpbmVubyI6IHNlbGYubGluZW5vLCAib3B0aW9uIjogb3B0aW9ufQorICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oXygiSWdub3JpbmcgZGVwcmVjYXRlZCBvcHRpb24gb24gbGluZSAlKGxpbmVubylzOiAgVGhlICUob3B0aW9uKXMgb3B0aW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBoYXMgYW55IGVmZmVjdC4gIEl0IG1heSBiZSByZW1vdmVkIGZyb20gZnV0dXJlIHJlbGVhc2VzLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIGZhdGFsIGVycm9yIGZyb20ga2lja3N0YXJ0LiAgUGxlYXNlIG1vZGlmeSB5b3VyIGtpY2tzdGFydCBmaWxlIHRvIHJlbW92ZSB0aGlzIG9wdGlvbi4iKSAlIG1hcHBpbmcsIERlcHJlY2F0aW9uV2FybmluZykKKworICAgICAgICByZXR1cm4gKHZhbHVlcywgYXJncykKKworICAgIGRlZiBwYXJzZV9hcmdzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGt3YXJncy5oYXNfa2V5KCJsaW5lbm8iKToKKyAgICAgICAgICAgIHNlbGYubGluZW5vID0ga3dhcmdzLnBvcCgibGluZW5vIikKKworICAgICAgICByZXR1cm4gT3B0aW9uUGFyc2VyLnBhcnNlX2FyZ3Moc2VsZiwgKiprd2FyZ3MpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFwcGluZz1Ob25lLCB2ZXJzaW9uPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgS1NPcHRpb25QYXJzZXIgaW5zdGFuY2UuICBFYWNoIEtpY2tzdGFydENvbW1hbmQKKyAgICAgICAgICAgc3ViY2xhc3Mgc2hvdWxkIGNyZWF0ZSBvbmUgaW5zdGFuY2Ugb2YgS1NPcHRpb25QYXJzZXIsIHByb3ZpZGluZworICAgICAgICAgICBhdCBsZWFzdCB0aGUgbGluZW5vIGF0dHJpYnV0ZS4gIG1hcHBpbmcgYW5kIHZlcnNpb24gYXJlIG5vdCByZXF1aXJlZC4KKyAgICAgICAgICAgSW5zdGFuY2UgYXR0cmlidXRlczoKKworICAgICAgICAgICBtYXBwaW5nIC0tIEEgbWFwcGluZyBmcm9tIG9wdGlvbiBzdHJpbmdzIHRvIGRpZmZlcmVudCB2YWx1ZXMuCisgICAgICAgICAgIHZlcnNpb24gLS0gVGhlIHZlcnNpb24gb2YgdGhlIGtpY2tzdGFydCBzeW50YXggd2UgYXJlIGNoZWNraW5nCisgICAgICAgICAgICAgICAgICAgICAgYWdhaW5zdC4KKyAgICAgICAgIiIiCisgICAgICAgIE9wdGlvblBhcnNlci5fX2luaXRfXyhzZWxmLCBvcHRpb25fY2xhc3M9S1NPcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfaGVscF9vcHRpb249RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mbGljdF9oYW5kbGVyPSJyZXNvbHZlIikKKyAgICAgICAgaWYgbWFwcGluZyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5tYXAgPSB7fQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5tYXAgPSBtYXBwaW5nCisKKyAgICAgICAgc2VsZi5saW5lbm8gPSBOb25lCisgICAgICAgIHNlbGYub3B0aW9uX3NlZW4gPSB7fQorICAgICAgICBzZWxmLnZlcnNpb24gPSB2ZXJzaW9uCisKK2RlZiBfY2hlY2tfa3Nib29sZWFuKG9wdGlvbiwgb3B0LCB2YWx1ZSk6CisgICAgaWYgdmFsdWUubG93ZXIoKSBpbiAoIm9uIiwgInllcyIsICJ0cnVlIiwgIjEiKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbGlmIHZhbHVlLmxvd2VyKCkgaW4gKCJvZmYiLCAibm8iLCAiZmFsc2UiLCAiMCIpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBlbHNlOgorICAgICAgICBtYXBwaW5nID0geyJvcHQiOiBvcHQsICJ2YWx1ZSI6IHZhbHVlfQorICAgICAgICByYWlzZSBPcHRpb25WYWx1ZUVycm9yKF8oIk9wdGlvbiAlKG9wdClzOiBpbnZhbGlkIGJvb2xlYW4gdmFsdWU6ICUodmFsdWUpciIpICUgbWFwcGluZykKKworZGVmIF9jaGVja19zdHJpbmcob3B0aW9uLCBvcHQsIHZhbHVlKToKKyAgICBpZiBsZW4odmFsdWUpID4gMiBhbmQgdmFsdWUuc3RhcnRzd2l0aCgiLS0iKToKKyAgICAgICAgbWFwcGluZyA9IHsib3B0Ijogb3B0LCAidmFsdWUiOiB2YWx1ZX0KKyAgICAgICAgcmFpc2UgT3B0aW9uVmFsdWVFcnJvcihfKCJPcHRpb24gJShvcHQpczogaW52YWxpZCBzdHJpbmcgdmFsdWU6ICUodmFsdWUpciIpICUgbWFwcGluZykKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gdmFsdWUKKworZGVmIF9jaGVja19zaXplKG9wdGlvbiwgb3B0LCB2YWx1ZSk6CisgICAgIyBGb3JtZXIgZGVmYXVsdCB3YXMgTUIKKyAgICBpZiB2YWx1ZS5pc2RpZ2l0KCk6CisgICAgICAgIHJldHVybiBpbnQodmFsdWUpICogMTAyNEwKKworICAgIG1hcHBpbmcgPSB7Im9wdCI6IG9wdCwgInZhbHVlIjogdmFsdWV9CisgICAgaWYgbm90IHZhbHVlWzotMV0uaXNkaWdpdCgpOgorICAgICAgICByYWlzZSBPcHRpb25WYWx1ZUVycm9yKF8oIk9wdGlvbiAlKG9wdClzOiBpbnZhbGlkIHNpemUgdmFsdWU6ICUodmFsdWUpciIpICUgbWFwcGluZykKKworICAgIHNpemUgPSBpbnQodmFsdWVbOi0xXSkKKyAgICBpZiB2YWx1ZS5lbmRzd2l0aCgiayIpIG9yIHZhbHVlLmVuZHN3aXRoKCJLIik6CisgICAgICAgIHJldHVybiBzaXplCisgICAgaWYgdmFsdWUuZW5kc3dpdGgoIk0iKToKKyAgICAgICAgcmV0dXJuIHNpemUgKiAxMDI0TAorICAgIGlmIHZhbHVlLmVuZHN3aXRoKCJHIik6CisgICAgICAgIHJldHVybiBzaXplICogMTAyNEwgKiAxMDI0TAorICAgIHJhaXNlIE9wdGlvblZhbHVlRXJyb3IoXygiT3B0aW9uICUob3B0KXM6IGludmFsaWQgc2l6ZSB2YWx1ZTogJSh2YWx1ZSlyIikgJSBtYXBwaW5nKQorCisjIENyZWF0ZXMgYSBuZXcgT3B0aW9uIGNsYXNzIHRoYXQgc3VwcG9ydHMgc2V2ZXJhbCBuZXcgYXR0cmlidXRlczoKKyMgLSByZXF1aXJlZDogIGFueSBvcHRpb24gd2l0aCB0aGlzIGF0dHJpYnV0ZSBtdXN0IGJlIHN1cHBsaWVkIG9yIGFuIGV4Y2VwdGlvbgorIyAgICAgICAgICAgICAgaXMgdGhyb3duCisjIC0gaW50cm9kdWNlZDogIHRoZSBraWNrc3RhcnQgc3ludGF4IHZlcnNpb24gdGhhdCB0aGlzIG9wdGlvbiBmaXJzdCBhcHBlYXJlZAorIyAgICAgICAgICAgICAgICBpbiAtIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCBpZiB0aGUgb3B0aW9uIGlzIHVzZWQgYW5kCisjICAgICAgICAgICAgICAgIHRoZSBzcGVjaWZpZWQgc3ludGF4IHZlcnNpb24gaXMgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiB0aGlzCisjICAgICAgICAgICAgICAgIGF0dHJpYnV0ZQorIyAtIGRlcHJlY2F0ZWQ6ICB0aGUga2lja3N0YXJ0IHN5bnRheCB2ZXJzaW9uIHRoYXQgdGhpcyBvcHRpb24gd2FzIGRlcHJlY2F0ZWQKKyMgICAgICAgICAgICAgICAgaW4gLSBhIERlcHJlY2F0aW9uV2FybmluZyB3aWxsIGJlIHRocm93biBpZiB0aGUgb3B0aW9uIGlzCisjICAgICAgICAgICAgICAgIHVzZWQgYW5kIHRoZSBzcGVjaWZpZWQgc3ludGF4IHZlcnNpb24gaXMgZ3JlYXRlciB0aGFuIHRoZQorIyAgICAgICAgICAgICAgICB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZQorIyAtIHJlbW92ZWQ6ICB0aGUga2lja3N0YXJ0IHN5bnRheCB2ZXJzaW9uIHRoYXQgdGhpcyBvcHRpb24gd2FzIHJlbW92ZWQgaW4gLSBhbgorIyAgICAgICAgICAgICBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQgaWYgdGhlIG9wdGlvbiBpcyB1c2VkIGFuZCB0aGUgc3BlY2lmaWVkCisjICAgICAgICAgICAgIHN5bnRheCB2ZXJzaW9uIGlzIGdyZWF0ZWQgdGhhbiB0aGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUKKyMgQWxzbyBjcmVhdGVzIGEgbmV3IHR5cGU6CisjIC0ga3Nib29sZWFuOiAgc3VwcG9ydCB2YXJpb3VzIGtpbmRzIG9mIGJvb2xlYW4gdmFsdWVzIG9uIGFuIG9wdGlvbgorIyBBbmQgdHdvIG5ldyBhY3Rpb25zOgorIyAtIG1hcCA6ICBhbGxvd3MgeW91IHRvIGRlZmluZSBhbiBvcHQgLT4gdmFsIG1hcHBpbmcgc3VjaCB0aGF0IGRlc3QgZ2V0cyB2YWwKKyMgICAgICAgICAgd2hlbiBvcHQgaXMgc2VlbgorIyAtIG1hcF9leHRlbmQ6ICBhbGxvd3MgeW91IHRvIGRlZmluZSBhbiBvcHQgLT4gW3ZhbDEsIC4uLiB2YWxuXSBtYXBwaW5nIHN1Y2gKKyMgICAgICAgICAgICAgICAgdGhhdCBkZXN0IGdldHMgYSBsaXN0IG9mIHZhbHMgYnVpbHQgdXAgd2hlbiBvcHQgaXMgc2VlbgorY2xhc3MgS1NPcHRpb24gKE9wdGlvbik6CisgICAgQVRUUlMgPSBPcHRpb24uQVRUUlMgKyBbJ2ludHJvZHVjZWQnLCAnZGVwcmVjYXRlZCcsICdyZW1vdmVkJywgJ3JlcXVpcmVkJ10KKyAgICBBQ1RJT05TID0gT3B0aW9uLkFDVElPTlMgKyAoIm1hcCIsICJtYXBfZXh0ZW5kIiwpCisgICAgU1RPUkVfQUNUSU9OUyA9IE9wdGlvbi5TVE9SRV9BQ1RJT05TICsgKCJtYXAiLCAibWFwX2V4dGVuZCIsKQorCisgICAgVFlQRVMgPSBPcHRpb24uVFlQRVMgKyAoImtzYm9vbGVhbiIsICJzdHJpbmciLCAic2l6ZSIpCisgICAgVFlQRV9DSEVDS0VSID0gY29weShPcHRpb24uVFlQRV9DSEVDS0VSKQorICAgIFRZUEVfQ0hFQ0tFUlsia3Nib29sZWFuIl0gPSBfY2hlY2tfa3Nib29sZWFuCisgICAgVFlQRV9DSEVDS0VSWyJzdHJpbmciXSA9IF9jaGVja19zdHJpbmcKKyAgICBUWVBFX0NIRUNLRVJbInNpemUiXSA9IF9jaGVja19zaXplCisKKyAgICBkZWYgX2NoZWNrX3JlcXVpcmVkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJlcXVpcmVkIGFuZCBub3Qgc2VsZi50YWtlc192YWx1ZSgpOgorICAgICAgICAgICAgcmFpc2UgT3B0aW9uRXJyb3IoXygiUmVxdWlyZWQgZmxhZyBzZXQgZm9yIG9wdGlvbiB0aGF0IGRvZXNuJ3QgdGFrZSBhIHZhbHVlIiksIHNlbGYpCisKKyAgICAjIE1ha2Ugc3VyZSBfY2hlY2tfcmVxdWlyZWQoKSBpcyBjYWxsZWQgZnJvbSB0aGUgY29uc3RydWN0b3IhCisgICAgQ0hFQ0tfTUVUSE9EUyA9IE9wdGlvbi5DSEVDS19NRVRIT0RTICsgW19jaGVja19yZXF1aXJlZF0KKworICAgIGRlZiBwcm9jZXNzIChzZWxmLCBvcHQsIHZhbHVlLCB2YWx1ZXMsIHBhcnNlcik6CisgICAgICAgIE9wdGlvbi5wcm9jZXNzKHNlbGYsIG9wdCwgdmFsdWUsIHZhbHVlcywgcGFyc2VyKQorICAgICAgICBwYXJzZXIub3B0aW9uX3NlZW5bc2VsZl0gPSAxCisKKyAgICAjIE92ZXJyaWRlIGRlZmF1bHQgdGFrZV9hY3Rpb24gbWV0aG9kIHRvIGhhbmRsZSBvdXIgY3VzdG9tIGFjdGlvbnMuCisgICAgZGVmIHRha2VfYWN0aW9uKHNlbGYsIGFjdGlvbiwgZGVzdCwgb3B0LCB2YWx1ZSwgdmFsdWVzLCBwYXJzZXIpOgorICAgICAgICBpZiBhY3Rpb24gPT0gIm1hcCI6CisgICAgICAgICAgICB2YWx1ZXMuZW5zdXJlX3ZhbHVlKGRlc3QsIHBhcnNlci5tYXBbb3B0LmxzdHJpcCgnLScpXSkKKyAgICAgICAgZWxpZiBhY3Rpb24gPT0gIm1hcF9leHRlbmQiOgorICAgICAgICAgICAgdmFsdWVzLmVuc3VyZV92YWx1ZShkZXN0LCBbXSkuZXh0ZW5kKHBhcnNlci5tYXBbb3B0LmxzdHJpcCgnLScpXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIE9wdGlvbi50YWtlX2FjdGlvbihzZWxmLCBhY3Rpb24sIGRlc3QsIG9wdCwgdmFsdWUsIHZhbHVlcywgcGFyc2VyKQorCisgICAgZGVmIHRha2VzX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIERlcHJlY2F0ZWQgb3B0aW9ucyBkb24ndCB0YWtlIGEgdmFsdWUuCisgICAgICAgIHJldHVybiBPcHRpb24udGFrZXNfdmFsdWUoc2VsZikgYW5kIG5vdCBzZWxmLmRlcHJlY2F0ZWQKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmRlcHJlY2F0ZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnJlcXVpcmVkID0gRmFsc2UKKyAgICAgICAgT3B0aW9uLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L3BhcnNlci5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L3BhcnNlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yzk2NzRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvcGFyc2VyLnB5CkBAIC0wLDAgKzEsNjE5IEBACisjCisjIHBhcnNlci5weTogIEtpY2tzdGFydCBmaWxlIHBhcnNlci4KKyMKKyMgQ2hyaXMgTHVtZW5zIDxjbHVtZW5zQHJlZGhhdC5jb20+CisjCisjIENvcHlyaWdodCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDExIFJlZCBIYXQsIEluYy4KKyMKKyMgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsIG1vZGlmeSwKKyMgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorIyB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlCisjIGltcGxpZWQgd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEKKyMgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBBbnkgUmVkIEhhdAorIyB0cmFkZW1hcmtzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgc291cmNlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiBhcmUgbm90CisjIHN1YmplY3QgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBtYXkgb25seSBiZSB1c2VkIG9yIHJlcGxpY2F0ZWQKKyMgd2l0aCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIFJlZCBIYXQsIEluYy4gCisjCisiIiIKK01haW4ga2lja3N0YXJ0IGZpbGUgcHJvY2Vzc2luZyBtb2R1bGUuCisKK1RoaXMgbW9kdWxlIGV4cG9ydHMgc2V2ZXJhbCBpbXBvcnRhbnQgY2xhc3NlczoKKworICAgIFNjcmlwdCAtIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlICVwcmUsICVwb3N0LCBvciAldHJhY2ViYWNrIHNjcmlwdC4KKworICAgIFBhY2thZ2VzIC0gUmVwcmVzZW50YXRpb24gb2YgdGhlICVwYWNrYWdlcyBzZWN0aW9uLgorCisgICAgS2lja3N0YXJ0UGFyc2VyIC0gVGhlIGtpY2tzdGFydCBmaWxlIHBhcnNlciBzdGF0ZSBtYWNoaW5lLgorIiIiCisKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IEl0ZXJhdG9yCitpbXBvcnQgb3MKK2ltcG9ydCBzaGxleAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitmcm9tIGNvcHkgaW1wb3J0IGNvcHkKK2Zyb20gb3B0cGFyc2UgaW1wb3J0ICoKKworaW1wb3J0IGNvbnN0YW50cworZnJvbSBlcnJvcnMgaW1wb3J0IEtpY2tzdGFydEVycm9yLCBLaWNrc3RhcnRQYXJzZUVycm9yLCBLaWNrc3RhcnRWYWx1ZUVycm9yLCBmb3JtYXRFcnJvck1zZworZnJvbSBrbyBpbXBvcnQgS2lja3N0YXJ0T2JqZWN0Citmcm9tIHNlY3Rpb25zIGltcG9ydCAqCitpbXBvcnQgdmVyc2lvbgorCitpbXBvcnQgZ2V0dGV4dAorXyA9IGxhbWJkYSB4OiBnZXR0ZXh0LmxkZ2V0dGV4dCgicHlraWNrc3RhcnQiLCB4KQorCitTVEFURV9FTkQgPSAiZW5kIgorU1RBVEVfQ09NTUFORFMgPSAiY29tbWFuZHMiCisKK3ZlciA9IHZlcnNpb24uREVWRUwKKworCitjbGFzcyBQdXRCYWNrSXRlcmF0b3IoSXRlcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVyYWJsZSk6CisgICAgICAgIHNlbGYuX2l0ZXJhYmxlID0gaXRlcihpdGVyYWJsZSkKKyAgICAgICAgc2VsZi5fYnVmID0gTm9uZQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIHB1dChzZWxmLCBzKToKKyAgICAgICAgc2VsZi5fYnVmID0gcworCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2J1ZjoKKyAgICAgICAgICAgIHJldHZhbCA9IHNlbGYuX2J1ZgorICAgICAgICAgICAgc2VsZi5fYnVmID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuIHJldHZhbAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2l0ZXJhYmxlLm5leHQoKQorCisjIyMKKyMjIyBTQ1JJUFQgSEFORExJTkcKKyMjIworY2xhc3MgU2NyaXB0KEtpY2tzdGFydE9iamVjdCk6CisgICAgIiIiQSBjbGFzcyByZXByZXNlbnRpbmcgYSBzaW5nbGUga2lja3N0YXJ0IHNjcmlwdC4gIElmIGZ1bmN0aW9uYWxpdHkgYmV5b25kCisgICAgICAganVzdCBhIGRhdGEgcmVwcmVzZW50YXRpb24gaXMgbmVlZGVkIChmb3IgZXhhbXBsZSwgYSBydW4gbWV0aG9kIGluCisgICAgICAgYW5hY29uZGEpLCBTY3JpcHQgbWF5IGJlIHN1YmNsYXNzZWQuICBBbHRob3VnaCBhIHJ1biBtZXRob2QgaXMgbm90CisgICAgICAgcHJvdmlkZWQsIG1vc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgb2YgU2NyaXB0IGhhdmUgdG8gZG8gd2l0aCBydW5uaW5nIHRoZQorICAgICAgIHNjcmlwdC4gIEluc3RhbmNlcyBvZiBTY3JpcHQgYXJlIGhlbGQgaW4gYSBsaXN0IGJ5IHRoZSBWZXJzaW9uIG9iamVjdC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2NyaXB0LCAqYXJncyAsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IFNjcmlwdCBpbnN0YW5jZS4gIEluc3RhbmNlIGF0dHJpYnV0ZXM6CisKKyAgICAgICAgICAgZXJyb3JPbkZhaWwgLS0gSWYgZXhlY3V0aW9uIG9mIHRoZSBzY3JpcHQgZmFpbHMsIHNob3VsZCBhbmFjb25kYQorICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wLCBkaXNwbGF5IGFuIGVycm9yLCBhbmQgdGhlbiByZWJvb3Qgd2l0aG91dAorICAgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIGFueSBvdGhlciBzY3JpcHRzPworICAgICAgICAgICBpbkNocm9vdCAgICAtLSBEb2VzIHRoZSBzY3JpcHQgZXhlY3V0ZSBpbiBhbmFjb25kYSdzIGNocm9vdAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBvciBub3Q/CisgICAgICAgICAgIGludGVycCAgICAgIC0tIFRoZSBwcm9ncmFtIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gaW50ZXJwcmV0IHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LgorICAgICAgICAgICBsaW5lbm8gICAgICAtLSBUaGUgbGluZSBudW1iZXIgdGhpcyBzY3JpcHQgc3RhcnRzIG9uLgorICAgICAgICAgICBsb2dmaWxlICAgICAtLSBXaGVyZSBhbGwgbWVzc2FnZXMgZnJvbSB0aGUgc2NyaXB0IHNob3VsZCBiZSBsb2dnZWQuCisgICAgICAgICAgIHNjcmlwdCAgICAgIC0tIEEgc3RyaW5nIGNvbnRhaW5pbmcgYWxsIHRoZSBsaW5lcyBvZiB0aGUgc2NyaXB0LgorICAgICAgICAgICB0eXBlICAgICAgICAtLSBUaGUgdHlwZSBvZiB0aGUgc2NyaXB0LCB3aGljaCBjYW4gYmUgS1NfU0NSSVBUXyogZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICBweWtpY2tzdGFydC5jb25zdGFudHMuCisgICAgICAgICIiIgorICAgICAgICBLaWNrc3RhcnRPYmplY3QuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLnNjcmlwdCA9ICIiLmpvaW4oc2NyaXB0KQorCisgICAgICAgIHNlbGYuaW50ZXJwID0ga3dhcmdzLmdldCgiaW50ZXJwIiwgIi9iaW4vc2giKQorICAgICAgICBzZWxmLmluQ2hyb290ID0ga3dhcmdzLmdldCgiaW5DaHJvb3QiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5saW5lbm8gPSBrd2FyZ3MuZ2V0KCJsaW5lbm8iLCBOb25lKQorICAgICAgICBzZWxmLmxvZ2ZpbGUgPSBrd2FyZ3MuZ2V0KCJsb2dmaWxlIiwgTm9uZSkKKyAgICAgICAgc2VsZi5lcnJvck9uRmFpbCA9IGt3YXJncy5nZXQoImVycm9yT25GYWlsIiwgRmFsc2UpCisgICAgICAgIHNlbGYudHlwZSA9IGt3YXJncy5nZXQoInR5cGUiLCBjb25zdGFudHMuS1NfU0NSSVBUX1BSRSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBzdHJpbmcgZm9ybWF0dGVkIGZvciBvdXRwdXQgdG8gYSBraWNrc3RhcnQgZmlsZS4iIiIKKyAgICAgICAgcmV0dmFsID0gIiIKKworICAgICAgICBpZiBzZWxmLnR5cGUgPT0gY29uc3RhbnRzLktTX1NDUklQVF9QUkU6CisgICAgICAgICAgICByZXR2YWwgKz0gJ1xuJXByZScKKyAgICAgICAgZWxpZiBzZWxmLnR5cGUgPT0gY29uc3RhbnRzLktTX1NDUklQVF9QT1NUOgorICAgICAgICAgICAgcmV0dmFsICs9ICdcbiVwb3N0JworICAgICAgICBlbGlmIHNlbGYudHlwZSA9PSBjb25zdGFudHMuS1NfU0NSSVBUX1RSQUNFQkFDSzoKKyAgICAgICAgICAgIHJldHZhbCArPSAnXG4ldHJhY2ViYWNrJworCisgICAgICAgIGlmIHNlbGYuaW50ZXJwICE9ICIvYmluL3NoIiBhbmQgc2VsZi5pbnRlcnAgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWludGVycHJldGVyPSVzIiAlIHNlbGYuaW50ZXJwCisgICAgICAgIGlmIHNlbGYudHlwZSA9PSBjb25zdGFudHMuS1NfU0NSSVBUX1BPU1QgYW5kIG5vdCBzZWxmLmluQ2hyb290OgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1ub2Nocm9vdCIKKyAgICAgICAgaWYgc2VsZi5sb2dmaWxlICE9IE5vbmU6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWxvZ2ZpbGUgJXMiICUgc2VsZi5sb2dmaWxlCisgICAgICAgIGlmIHNlbGYuZXJyb3JPbkZhaWw6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWVycm9yb25mYWlsIgorCisgICAgICAgIGlmIHNlbGYuc2NyaXB0LmVuZHN3aXRoKCJcbiIpOgorICAgICAgICAgICAgaWYgdmVyID49IHZlcnNpb24uRjg6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbCArICJcbiVzJSVlbmRcbiIgJSBzZWxmLnNjcmlwdAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsICsgIlxuJXNcbiIgJSBzZWxmLnNjcmlwdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgdmVyID49IHZlcnNpb24uRjg6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbCArICJcbiVzXG4lJWVuZFxuIiAlIHNlbGYuc2NyaXB0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWwgKyAiXG4lc1xuIiAlIHNlbGYuc2NyaXB0CisKKworIyMKKyMjIFBBQ0tBR0UgSEFORExJTkcKKyMjCitjbGFzcyBHcm91cDoKKyAgICAiIiJBIGNsYXNzIHJlcHJlc2VudGluZyBhIHNpbmdsZSBncm91cCBpbiB0aGUgJXBhY2thZ2VzIHNlY3Rpb24uIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWU9IiIsIGluY2x1ZGU9Y29uc3RhbnRzLkdST1VQX0RFRkFVTFQpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgR3JvdXAgaW5zdGFuY2UuICBJbnN0YW5jZSBhdHRyaWJ1dGVzOgorCisgICAgICAgICAgIG5hbWUgICAgLS0gVGhlIGdyb3VwJ3MgaWRlbnRpZmllcgorICAgICAgICAgICBpbmNsdWRlIC0tIFRoZSBsZXZlbCBvZiBob3cgbXVjaCBvZiB0aGUgZ3JvdXAgc2hvdWxkIGJlIGluY2x1ZGVkLgorICAgICAgICAgICAgICAgICAgICAgIFZhbHVlcyBjYW4gYmUgR1JPVVBfKiBmcm9tIHB5a2lja3N0YXJ0LmNvbnN0YW50cy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5pbmNsdWRlID0gaW5jbHVkZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIHN0cmluZyBmb3JtYXR0ZWQgZm9yIG91dHB1dCB0byBhIGtpY2tzdGFydCBmaWxlLiIiIgorICAgICAgICBpZiBzZWxmLmluY2x1ZGUgPT0gY29uc3RhbnRzLkdST1VQX1JFUVVJUkVEOgorICAgICAgICAgICAgcmV0dXJuICJAJXMgLS1ub2RlZmF1bHRzIiAlIHNlbGYubmFtZQorICAgICAgICBlbGlmIHNlbGYuaW5jbHVkZSA9PSBjb25zdGFudHMuR1JPVVBfQUxMOgorICAgICAgICAgICAgcmV0dXJuICJAJXMgLS1vcHRpb25hbCIgJSBzZWxmLm5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiQCVzIiAlIHNlbGYubmFtZQorCisgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBzZWxmLm5hbWUgPCBvdGhlci5uYW1lOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGVsaWYgc2VsZi5uYW1lID4gb3RoZXIubmFtZToKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIHJldHVybiAwCisKK2NsYXNzIFBhY2thZ2VzKEtpY2tzdGFydE9iamVjdCk6CisgICAgIiIiQSBjbGFzcyByZXByZXNlbnRpbmcgdGhlICVwYWNrYWdlcyBzZWN0aW9uIG9mIHRoZSBraWNrc3RhcnQgZmlsZS4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IFBhY2thZ2VzIGluc3RhbmNlLiAgSW5zdGFuY2UgYXR0cmlidXRlczoKKworICAgICAgICAgICBhZGRCYXNlICAgICAgIC0tIFNob3VsZCB0aGUgQmFzZSBncm91cCBiZSBpbnN0YWxsZWQgZXZlbiBpZiBpdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzcGVjaWZpZWQ/CisgICAgICAgICAgIGRlZmF1bHQgICAgICAgLS0gU2hvdWxkIHRoZSBkZWZhdWx0IHBhY2thZ2Ugc2V0IGJlIHNlbGVjdGVkPworICAgICAgICAgICBleGNsdWRlZExpc3QgIC0tIEEgbGlzdCBvZiBhbGwgdGhlIHBhY2thZ2VzIG1hcmtlZCBmb3IgZXhjbHVzaW9uIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlICVwYWNrYWdlcyBzZWN0aW9uLCB3aXRob3V0IHRoZSBsZWFkaW5nIG1pbnVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sLgorICAgICAgICAgICBleGNsdWRlRG9jcyAgIC0tIFNob3VsZCBkb2N1bWVudGF0aW9uIGluIGVhY2ggcGFja2FnZSBiZSBleGNsdWRlZD8KKyAgICAgICAgICAgZ3JvdXBMaXN0ICAgICAtLSBBIGxpc3Qgb2YgR3JvdXAgb2JqZWN0cyByZXByZXNlbnRpbmcgYWxsIHRoZSBncm91cHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgaW4gdGhlICVwYWNrYWdlcyBzZWN0aW9uLiAgTmFtZXMgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwcGVkIG9mIHRoZSBsZWFkaW5nIEAgc3ltYm9sLgorICAgICAgICAgICBleGNsdWRlZEdyb3VwTGlzdCAtLSBBIGxpc3Qgb2YgR3JvdXAgb2JqZWN0cyByZXByZXNlbnRpbmcgYWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHMgc3BlY2lmaWVkIGZvciByZW1vdmFsIGluIHRoZSAlcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4gIE5hbWVzIHdpbGwgYmUgc3RyaXBwZWQgb2YgdGhlIGxlYWRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUAgc3ltYm9scy4KKyAgICAgICAgICAgaGFuZGxlTWlzc2luZyAtLSBJZiB1bmtub3duIHBhY2thZ2VzIGFyZSBzcGVjaWZpZWQgaW4gdGhlICVwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24sIHNob3VsZCBpdCBiZSBpZ25vcmVkIG9yIG5vdD8gIFZhbHVlcyBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBLU19NSVNTSU5HXyogZnJvbSBweWtpY2tzdGFydC5jb25zdGFudHMuCisgICAgICAgICAgIHBhY2thZ2VMaXN0ICAgLS0gQSBsaXN0IG9mIGFsbCB0aGUgcGFja2FnZXMgc3BlY2lmaWVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICVwYWNrYWdlcyBzZWN0aW9uLgorICAgICAgICAgICBpbnN0TGFuZ3MgICAgIC0tIEEgbGlzdCBvZiBsYW5ndWFnZXMgdG8gaW5zdGFsbC4KKyAgICAgICAgIiIiCisgICAgICAgIEtpY2tzdGFydE9iamVjdC5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgc2VsZi5hZGRCYXNlID0gVHJ1ZQorICAgICAgICBzZWxmLmRlZmF1bHQgPSBGYWxzZQorICAgICAgICBzZWxmLmV4Y2x1ZGVkTGlzdCA9IFtdCisgICAgICAgIHNlbGYuZXhjbHVkZWRHcm91cExpc3QgPSBbXQorICAgICAgICBzZWxmLmV4Y2x1ZGVEb2NzID0gRmFsc2UKKyAgICAgICAgc2VsZi5ncm91cExpc3QgPSBbXQorICAgICAgICBzZWxmLmhhbmRsZU1pc3NpbmcgPSBjb25zdGFudHMuS1NfTUlTU0lOR19QUk9NUFQKKyAgICAgICAgc2VsZi5wYWNrYWdlTGlzdCA9IFtdCisgICAgICAgIHNlbGYuaW5zdExhbmdzID0gTm9uZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIHN0cmluZyBmb3JtYXR0ZWQgZm9yIG91dHB1dCB0byBhIGtpY2tzdGFydCBmaWxlLiIiIgorICAgICAgICBwa2dzID0gIiIKKworICAgICAgICBpZiBub3Qgc2VsZi5kZWZhdWx0OgorICAgICAgICAgICAgZ3JwcyA9IHNlbGYuZ3JvdXBMaXN0CisgICAgICAgICAgICBncnBzLnNvcnQoKQorICAgICAgICAgICAgZm9yIGdycCBpbiBncnBzOgorICAgICAgICAgICAgICAgIHBrZ3MgKz0gIiVzXG4iICUgZ3JwLl9fc3RyX18oKQorCisgICAgICAgICAgICBwID0gc2VsZi5wYWNrYWdlTGlzdAorICAgICAgICAgICAgcC5zb3J0KCkKKyAgICAgICAgICAgIGZvciBwa2cgaW4gcDoKKyAgICAgICAgICAgICAgICBwa2dzICs9ICIlc1xuIiAlIHBrZworCisgICAgICAgICAgICBncnBzID0gc2VsZi5leGNsdWRlZEdyb3VwTGlzdAorICAgICAgICAgICAgZ3Jwcy5zb3J0KCkKKyAgICAgICAgICAgIGZvciBncnAgaW4gZ3JwczoKKyAgICAgICAgICAgICAgICBwa2dzICs9ICItJXNcbiIgJSBncnAuX19zdHJfXygpCisKKyAgICAgICAgICAgIHAgPSBzZWxmLmV4Y2x1ZGVkTGlzdAorICAgICAgICAgICAgcC5zb3J0KCkKKyAgICAgICAgICAgIGZvciBwa2cgaW4gcDoKKyAgICAgICAgICAgICAgICBwa2dzICs9ICItJXNcbiIgJSBwa2cKKworICAgICAgICAgICAgaWYgcGtncyA9PSAiIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiIKKworICAgICAgICByZXR2YWwgPSAiXG4lcGFja2FnZXMiCisKKyAgICAgICAgaWYgc2VsZi5kZWZhdWx0OgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1kZWZhdWx0IgorICAgICAgICBpZiBzZWxmLmV4Y2x1ZGVEb2NzOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1leGNsdWRlZG9jcyIKKyAgICAgICAgaWYgbm90IHNlbGYuYWRkQmFzZToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbm9iYXNlIgorICAgICAgICBpZiBzZWxmLmhhbmRsZU1pc3NpbmcgPT0gY29uc3RhbnRzLktTX01JU1NJTkdfSUdOT1JFOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1pZ25vcmVtaXNzaW5nIgorICAgICAgICBpZiBzZWxmLmluc3RMYW5nczoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0taW5zdExhbmdzPSVzIiAlIHNlbGYuaW5zdExhbmdzCisKKyAgICAgICAgaWYgdmVyID49IHZlcnNpb24uRjg6CisgICAgICAgICAgICByZXR1cm4gcmV0dmFsICsgIlxuIiArIHBrZ3MgKyAiXG4lZW5kXG4iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gcmV0dmFsICsgIlxuIiArIHBrZ3MgKyAiXG4iCisKKyAgICBkZWYgX3Byb2Nlc3NHcm91cCAoc2VsZiwgbGluZSk6CisgICAgICAgIG9wID0gT3B0aW9uUGFyc2VyKCkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1ub2RlZmF1bHRzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1vcHRpb25hbCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgKG9wdHMsIGV4dHJhKSA9IG9wLnBhcnNlX2FyZ3MoYXJncz1saW5lLnNwbGl0KCkpCisKKyAgICAgICAgaWYgb3B0cy5ub2RlZmF1bHRzIGFuZCBvcHRzLm9wdGlvbmFsOgorICAgICAgICAgICAgcmFpc2UgS2lja3N0YXJ0VmFsdWVFcnJvciwgXygiR3JvdXAgY2Fubm90IHNwZWNpZnkgYm90aCAtLW5vZGVmYXVsdHMgYW5kIC0tb3B0aW9uYWwiKQorCisgICAgICAgICMgSWYgdGhlIGdyb3VwIG5hbWUgaGFzIHNwYWNlcyBpbiBpdCwgd2UgaGF2ZSB0byBwdXQgaXQgYmFjayB0b2dldGhlcgorICAgICAgICAjIG5vdy4KKyAgICAgICAgZ3JwID0gIiAiLmpvaW4oZXh0cmEpCisKKyAgICAgICAgaWYgb3B0cy5ub2RlZmF1bHRzOgorICAgICAgICAgICAgc2VsZi5ncm91cExpc3QuYXBwZW5kKEdyb3VwKG5hbWU9Z3JwLCBpbmNsdWRlPWNvbnN0YW50cy5HUk9VUF9SRVFVSVJFRCkpCisgICAgICAgIGVsaWYgb3B0cy5vcHRpb25hbDoKKyAgICAgICAgICAgIHNlbGYuZ3JvdXBMaXN0LmFwcGVuZChHcm91cChuYW1lPWdycCwgaW5jbHVkZT1jb25zdGFudHMuR1JPVVBfQUxMKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZ3JvdXBMaXN0LmFwcGVuZChHcm91cChuYW1lPWdycCwgaW5jbHVkZT1jb25zdGFudHMuR1JPVVBfREVGQVVMVCkpCisKKyAgICBkZWYgYWRkIChzZWxmLCBwa2dMaXN0KToKKyAgICAgICAgIiIiR2l2ZW4gYSBsaXN0IG9mIGxpbmVzIGZyb20gdGhlIGlucHV0IGZpbGUsIHN0cmlwIG9mZiBhbnkgbGVhZGluZworICAgICAgICAgICBzeW1ib2xzIGFuZCBhZGQgdGhlIHJlc3VsdCB0byB0aGUgYXBwcm9wcmlhdGUgbGlzdC4KKyAgICAgICAgIiIiCisgICAgICAgIGV4aXN0aW5nRXhjbHVkZWRTZXQgPSBzZXQoc2VsZi5leGNsdWRlZExpc3QpCisgICAgICAgIGV4aXN0aW5nUGFja2FnZVNldCA9IHNldChzZWxmLnBhY2thZ2VMaXN0KQorICAgICAgICBuZXdFeGNsdWRlZFNldCA9IHNldCgpCisgICAgICAgIG5ld1BhY2thZ2VTZXQgPSBzZXQoKQorCisgICAgICAgIGV4Y2x1ZGVkR3JvdXBMaXN0ID0gW10KKworICAgICAgICBmb3IgcGtnIGluIHBrZ0xpc3Q6CisgICAgICAgICAgICBzdHJpcHBlZCA9IHBrZy5zdHJpcCgpCisKKyAgICAgICAgICAgIGlmIHN0cmlwcGVkWzBdID09ICJAIjoKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm9jZXNzR3JvdXAoc3RyaXBwZWRbMTpdKQorICAgICAgICAgICAgZWxpZiBzdHJpcHBlZFswXSA9PSAiLSI6CisgICAgICAgICAgICAgICAgaWYgc3RyaXBwZWRbMV0gPT0gIkAiOgorICAgICAgICAgICAgICAgICAgICBleGNsdWRlZEdyb3VwTGlzdC5hcHBlbmQoR3JvdXAobmFtZT1zdHJpcHBlZFsyOl0pKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5ld0V4Y2x1ZGVkU2V0LmFkZChzdHJpcHBlZFsxOl0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5ld1BhY2thZ2VTZXQuYWRkKHN0cmlwcGVkKQorCisgICAgICAgICMgR3JvdXBzIGhhdmUgdG8gYmUgZXhjbHVkZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzIChub3RlOiBjYW4ndCB1c2UKKyAgICAgICAgIyBzZXRzIGhlcmUgYmVjYXVzZSB3ZSBoYXZlIHRvIHN0b3JlIG9iamVjdHMpOgorICAgICAgICBleGNsdWRlZEdyb3VwTmFtZXMgPSBtYXAobGFtYmRhIGc6IGcubmFtZSwgZXhjbHVkZWRHcm91cExpc3QpCisKKyAgICAgICAgIyBGaXJzdCwgYW4gZXhjbHVkZWQgZ3JvdXAgbWF5IGJlIGNhbmNlbGxpbmcgb3V0IGEgcHJldmlvdXNseSBnaXZlbgorICAgICAgICAjIG9uZS4gIFRoaXMgaXMgb2Z0ZW4gdGhlIGNhc2Ugd2hlbiB1c2luZyAlaW5jbHVkZS4gIFNvIHRoZXJlIHdlIHNob3VsZAorICAgICAgICAjIGp1c3QgcmVtb3ZlIHRoZSBncm91cCBmcm9tIHRoZSBsaXN0LgorICAgICAgICBzZWxmLmdyb3VwTGlzdCA9IGZpbHRlcihsYW1iZGEgZzogZy5uYW1lIG5vdCBpbiBleGNsdWRlZEdyb3VwTmFtZXMsIHNlbGYuZ3JvdXBMaXN0KQorCisgICAgICAgICMgU2Vjb25kLCB0aGUgcGFja2FnZSBsaXN0IGNvdWxkIGhhdmUgaW5jbHVkZWQgZ2xvYnMgd2hpY2ggYXJlIG5vdAorICAgICAgICAjIHByb2Nlc3NlZCBieSBweWtpY2tzdGFydC4gIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIHByZXNlcnZlIGEgbGlzdCBvZgorICAgICAgICAjIGV4Y2x1ZGVkIGdyb3VwcyBzbyB3aGF0ZXZlciB0b29sIGRvaW5nIHBhY2thZ2UvZ3JvdXAgaW5zdGFsbGF0aW9uIGNhbgorICAgICAgICAjIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uLgorICAgICAgICBzZWxmLmV4Y2x1ZGVkR3JvdXBMaXN0LmV4dGVuZChleGNsdWRlZEdyb3VwTGlzdCkKKworICAgICAgICBleGlzdGluZ1BhY2thZ2VTZXQgPSAoZXhpc3RpbmdQYWNrYWdlU2V0IC0gbmV3RXhjbHVkZWRTZXQpIHwgbmV3UGFja2FnZVNldAorICAgICAgICBleGlzdGluZ0V4Y2x1ZGVkU2V0ID0gKGV4aXN0aW5nRXhjbHVkZWRTZXQgLSBleGlzdGluZ1BhY2thZ2VTZXQpIHwgbmV3RXhjbHVkZWRTZXQKKworICAgICAgICBzZWxmLnBhY2thZ2VMaXN0ID0gbGlzdChleGlzdGluZ1BhY2thZ2VTZXQpCisgICAgICAgIHNlbGYuZXhjbHVkZWRMaXN0ID0gbGlzdChleGlzdGluZ0V4Y2x1ZGVkU2V0KQorCisKKyMjIworIyMjIFBBUlNFUgorIyMjCitjbGFzcyBLaWNrc3RhcnRQYXJzZXI6CisgICAgIiIiVGhlIGtpY2tzdGFydCBmaWxlIHBhcnNlciBjbGFzcyBhcyByZXByZXNlbnRlZCBieSBhIGJhc2ljIHN0YXRlCisgICAgICAgbWFjaGluZS4gIFRvIGNyZWF0ZSBhIHNwZWNpYWxpemVkIHBhcnNlciwgbWFrZSBhIHN1YmNsYXNzIGFuZCBvdmVycmlkZQorICAgICAgIGFueSBvZiB0aGUgbWV0aG9kcyB5b3UgY2FyZSBhYm91dC4gIE1ldGhvZHMgdGhhdCBkb24ndCBuZWVkIHRvIGRvCisgICAgICAgYW55dGhpbmcgbWF5IGp1c3QgcGFzcy4gIEhvd2V2ZXIsIF9zdGF0ZU1hY2hpbmUgc2hvdWxkIG5ldmVyIGJlCisgICAgICAgb3ZlcnJpZGRlbi4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18gKHNlbGYsIGhhbmRsZXIsIGZvbGxvd0luY2x1ZGVzPVRydWUsIGVycm9yc0FyZUZhdGFsPVRydWUsCisgICAgICAgICAgICAgICAgICBtaXNzaW5nSW5jbHVkZUlzRmF0YWw9VHJ1ZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBLaWNrc3RhcnRQYXJzZXIgaW5zdGFuY2UuICBJbnN0YW5jZSBhdHRyaWJ1dGVzOgorCisgICAgICAgICAgIGVycm9yc0FyZUZhdGFsICAgICAgICAtLSBTaG91bGQgZXJyb3JzIGNhdXNlIHByb2Nlc3NpbmcgdG8gaGFsdCwgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3QgcHJpbnQgYSBtZXNzYWdlIHRvIHRoZSBzY3JlZW4/ICBUaGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBtb3N0IHVzZWZ1bCBmb3Igd3JpdGluZyBzeW50YXggY2hlY2tlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgbWF5IHdhbnQgdG8gY29udGludWUgYWZ0ZXIgYW4gZXJyb3IgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY291bnRlcmVkLgorICAgICAgICAgICBmb2xsb3dJbmNsdWRlcyAgICAgICAgLS0gSWYgJWluY2x1ZGUgaXMgc2Vlbiwgc2hvdWxkIHRoZSBpbmNsdWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBiZSBjaGVja2VkIGFzIHdlbGwgb3Igc2tpcHBlZD8KKyAgICAgICAgICAgaGFuZGxlciAgICAgICAgICAgICAgIC0tIEFuIGluc3RhbmNlIG9mIGEgQmFzZUhhbmRsZXIgc3ViY2xhc3MuICBJZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgdGhlIGlucHV0IGZpbGUgd2lsbCBzdGlsbCBiZSBwYXJzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCBubyBkYXRhIHdpbGwgYmUgc2F2ZWQgYW5kIG5vIGNvbW1hbmRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIGV4ZWN1dGVkLgorICAgICAgICAgICBtaXNzaW5nSW5jbHVkZUlzRmF0YWwgLS0gU2hvdWxkIG1pc3NpbmcgaW5jbHVkZSBmaWxlcyBiZSBmYXRhbCwgZXZlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJyb3JzQXJlRmF0YWwgaXMgRmFsc2U/CisgICAgICAgICIiIgorICAgICAgICBzZWxmLmVycm9yc0FyZUZhdGFsID0gZXJyb3JzQXJlRmF0YWwKKyAgICAgICAgc2VsZi5mb2xsb3dJbmNsdWRlcyA9IGZvbGxvd0luY2x1ZGVzCisgICAgICAgIHNlbGYuaGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgc2VsZi5jdXJyZW50ZGlyID0ge30KKyAgICAgICAgc2VsZi5taXNzaW5nSW5jbHVkZUlzRmF0YWwgPSBtaXNzaW5nSW5jbHVkZUlzRmF0YWwKKworICAgICAgICBzZWxmLl9zdGF0ZSA9IFNUQVRFX0NPTU1BTkRTCisgICAgICAgIHNlbGYuX2luY2x1ZGVEZXB0aCA9IDAKKyAgICAgICAgc2VsZi5fbGluZSA9ICIiCisKKyAgICAgICAgc2VsZi52ZXJzaW9uID0gc2VsZi5oYW5kbGVyLnZlcnNpb24KKworICAgICAgICBnbG9iYWwgdmVyCisgICAgICAgIHZlciA9IHNlbGYudmVyc2lvbgorCisgICAgICAgIHNlbGYuX3NlY3Rpb25zID0ge30KKyAgICAgICAgc2VsZi5zZXR1cFNlY3Rpb25zKCkKKworICAgIGRlZiBfcmVzZXQoc2VsZik6CisgICAgICAgICIiIlJlc2V0IHRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgb2YgdGhlIHN0YXRlIG1hY2hpbmUgZm9yIGEgbmV3IGtpY2tzdGFydCBmaWxlLiIiIgorICAgICAgICBzZWxmLl9zdGF0ZSA9IFNUQVRFX0NPTU1BTkRTCisgICAgICAgIHNlbGYuX2luY2x1ZGVEZXB0aCA9IDAKKworICAgIGRlZiBnZXRTZWN0aW9uKHNlbGYsIHMpOgorICAgICAgICAiIiJSZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIHJlcXVlc3RlZCBzZWN0aW9uIChzIG11c3Qgc3RhcnQgd2l0aCAnJSdzKSwKKyAgICAgICAgICAgb3IgcmFpc2UgS2V5RXJyb3IgaWYgbm90IGZvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlY3Rpb25zW3NdCisKKyAgICBkZWYgaGFuZGxlQ29tbWFuZCAoc2VsZiwgbGluZW5vLCBhcmdzKToKKyAgICAgICAgIiIiR2l2ZW4gdGhlIGxpc3Qgb2YgY29tbWFuZCBhbmQgYXJndW1lbnRzLCBjYWxsIHRoZSBWZXJzaW9uJ3MKKyAgICAgICAgICAgZGlzcGF0Y2hlciBtZXRob2QgdG8gaGFuZGxlIHRoZSBjb21tYW5kLiAgUmV0dXJucyB0aGUgY29tbWFuZCBvcgorICAgICAgICAgICBkYXRhIG9iamVjdCByZXR1cm5lZCBieSB0aGUgZGlzcGF0Y2hlci4gIFRoaXMgbWV0aG9kIG1heSBiZQorICAgICAgICAgICBvdmVycmlkZGVuIGluIGEgc3ViY2xhc3MgaWYgbmVjZXNzYXJ5LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5oYW5kbGVyOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLmN1cnJlbnRDbWQgPSBhcmdzWzBdCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuY3VycmVudExpbmUgPSBzZWxmLl9saW5lCisgICAgICAgICAgICByZXR2YWwgPSBzZWxmLmhhbmRsZXIuZGlzcGF0Y2hlcihhcmdzLCBsaW5lbm8pCisKKyAgICAgICAgICAgIHJldHVybiByZXR2YWwKKworICAgIGRlZiByZWdpc3RlclNlY3Rpb24oc2VsZiwgb2JqKToKKyAgICAgICAgIiIiR2l2ZW4gYW4gaW5zdGFuY2Ugb2YgYSBTZWN0aW9uIHN1YmNsYXNzLCByZWdpc3RlciB0aGUgbmV3IHNlY3Rpb24KKyAgICAgICAgICAgd2l0aCB0aGUgcGFyc2VyLiAgQ2FsbGluZyB0aGlzIG1ldGhvZCBtZWFucyB0aGUgcGFyc2VyIHdpbGwKKyAgICAgICAgICAgcmVjb2duaXplIHlvdXIgbmV3IHNlY3Rpb24gYW5kIGRpc3BhdGNoIGludG8gdGhlIGdpdmVuIG9iamVjdCB0bworICAgICAgICAgICBoYW5kbGUgaXQuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgb2JqLnNlY3Rpb25PcGVuOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAibm8gc2VjdGlvbk9wZW4gZ2l2ZW4gZm9yIHNlY3Rpb24gJXMiICUgb2JqCisKKyAgICAgICAgaWYgbm90IG9iai5zZWN0aW9uT3Blbi5zdGFydHN3aXRoKCIlIik6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsICJzZWN0aW9uICVzIHRhZyBkb2VzIG5vdCBzdGFydCB3aXRoIGEgJSUiICUgb2JqLnNlY3Rpb25PcGVuCisKKyAgICAgICAgc2VsZi5fc2VjdGlvbnNbb2JqLnNlY3Rpb25PcGVuXSA9IG9iagorCisgICAgZGVmIF9maW5hbGl6ZShzZWxmLCBvYmopOgorICAgICAgICAiIiJDYWxsZWQgYXQgdGhlIGNsb3NlIG9mIGEga2lja3N0YXJ0IHNlY3Rpb24gdG8gdGFrZSBhbnkgcmVxdWlyZWQKKyAgICAgICAgICAgYWN0aW9ucy4gIEludGVybmFsbHksIHRoaXMgaXMgdXNlZCB0byBhZGQgc2NyaXB0cyBvbmNlIHdlIGhhdmUgdGhlCisgICAgICAgICAgIHdob2xlIGJvZHkgcmVhZC4KKyAgICAgICAgIiIiCisgICAgICAgIG9iai5maW5hbGl6ZSgpCisgICAgICAgIHNlbGYuX3N0YXRlID0gU1RBVEVfQ09NTUFORFMKKworICAgIGRlZiBfaGFuZGxlU3BlY2lhbENvbW1lbnRzKHNlbGYsIGxpbmUpOgorICAgICAgICAiIiJLaWNrc3RhcnQgcmVjb2duaXplcyBhIGNvdXBsZSBzcGVjaWFsIGNvbW1lbnRzLiIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSBTVEFURV9DT01NQU5EUzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgU2F2ZSB0aGUgcGxhdGZvcm0gZm9yIHMtYy1raWNrc3RhcnQuCisgICAgICAgIGlmIGxpbmVbOjEwXSA9PSAiI3BsYXRmb3JtPSI6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIucGxhdGZvcm0gPSBzZWxmLl9saW5lWzExOl0KKworICAgIGRlZiBfcmVhZFNlY3Rpb24oc2VsZiwgbGluZUl0ZXIsIGxpbmVubyk6CisgICAgICAgIG9iaiA9IHNlbGYuX3NlY3Rpb25zW3NlbGYuX3N0YXRlXQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVJdGVyLm5leHQoKQorICAgICAgICAgICAgICAgIGlmIGxpbmUgPT0gIiI6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBzZWN0aW9uIGVuZHMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJzaW9uID49IHZlcnNpb24uRjg6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBLaWNrc3RhcnRQYXJzZUVycm9yLCBmb3JtYXRFcnJvck1zZyhsaW5lbm8sIG1zZz1fKCJTZWN0aW9uIGRvZXMgbm90IGVuZCB3aXRoICUlZW5kLiIpKQorCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbmFsaXplKG9iaikKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGxpbmVubyArPSAxCisKKyAgICAgICAgICAgICMgVGhyb3cgYXdheSBibGFuayBsaW5lcyBhbmQgY29tbWVudHMsIHVubGVzcyB0aGUgc2VjdGlvbiB3YW50cyBhbGwKKyAgICAgICAgICAgICMgbGluZXMuCisgICAgICAgICAgICBpZiBzZWxmLl9pc0JsYW5rT3JDb21tZW50KGxpbmUpIGFuZCBub3Qgb2JqLmFsbExpbmVzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiJSIpOgorICAgICAgICAgICAgICAgIGFyZ3MgPSBzaGxleC5zcGxpdChsaW5lKQorCisgICAgICAgICAgICAgICAgaWYgYXJncyBhbmQgYXJnc1swXSA9PSAiJWVuZCI6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhIHByb3Blcmx5IHRlcm1pbmF0ZWQgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmluYWxpemUob2JqKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsaWYgYXJncyBhbmQgYXJnc1swXSA9PSAiJWtzYXBwZW5kIjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbGlmIGFyZ3MgYW5kIChzZWxmLl92YWxpZFN0YXRlKGFyZ3NbMF0pIG9yIGFyZ3NbMF0gaW4gWyIlaW5jbHVkZSIsICIla3NhcHBlbmQiXSk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhbiB1bnRlcm1pbmF0ZWQgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJzaW9uID49IHZlcnNpb24uRjg6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBLaWNrc3RhcnRQYXJzZUVycm9yLCBmb3JtYXRFcnJvck1zZyhsaW5lbm8sIG1zZz1fKCJTZWN0aW9uIGRvZXMgbm90IGVuZCB3aXRoICUlZW5kLiIpKQorCisgICAgICAgICAgICAgICAgICAgICMgRmluaXNoIHVwLiAgV2UgZG8gbm90IHByb2Nlc3MgdGhlIGhlYWRlciBoZXJlIGJlY2F1c2UKKyAgICAgICAgICAgICAgICAgICAgIyBraWNraW5nIGJhY2sgb3V0IHRvIFNUQVRFX0NPTU1BTkRTIHdpbGwgZW5zdXJlIHRoYXQgaGFwcGVucy4KKyAgICAgICAgICAgICAgICAgICAgbGluZUl0ZXIucHV0KGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGxpbmVubyAtPSAxCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbmFsaXplKG9iaikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGp1c3QgYSBsaW5lIHdpdGhpbiBhIHNlY3Rpb24uICBQYXNzIGl0IG9mZiB0byB3aGF0ZXZlcgorICAgICAgICAgICAgICAgICMgc2VjdGlvbiBoYW5kbGVzIGl0LgorICAgICAgICAgICAgICAgIG9iai5oYW5kbGVMaW5lKGxpbmUpCisKKyAgICAgICAgcmV0dXJuIGxpbmVubworCisgICAgZGVmIF92YWxpZFN0YXRlKHNlbGYsIHN0KToKKyAgICAgICAgIiIiSXMgdGhlIGdpdmVuIHNlY3Rpb24gdGFnIG9uZSB0aGF0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcGFyc2VyPyIiIgorICAgICAgICByZXR1cm4gc3QgaW4gc2VsZi5fc2VjdGlvbnMua2V5cygpCisKKyAgICBkZWYgX3RyeUZ1bmMoc2VsZiwgZm4pOgorICAgICAgICAiIiJDYWxsIHRoZSBwcm92aWRlZCBmdW5jdGlvbiAod2hpY2ggZG9lc24ndCB0YWtlIGFueSBhcmd1bWVudHMpIGFuZAorICAgICAgICAgICBkbyB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgaGFuZGxpbmcuICBJZiBlcnJvcnNBcmVGYXRhbCBpcyBGYWxzZSwgdGhpcworICAgICAgICAgICBmdW5jdGlvbiB3aWxsIGp1c3QgcHJpbnQgdGhlIGV4Y2VwdGlvbiBhbmQga2VlcCBnb2luZy4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZuKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgbXNnOgorICAgICAgICAgICAgaWYgc2VsZi5lcnJvcnNBcmVGYXRhbDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCBtc2cKKworICAgIGRlZiBfaXNCbGFua09yQ29tbWVudChzZWxmLCBsaW5lKToKKyAgICAgICAgcmV0dXJuIGxpbmUuaXNzcGFjZSgpIG9yIGxpbmUgPT0gIiIgb3IgbGluZS5sc3RyaXAoKVswXSA9PSAnIycKKworICAgIGRlZiBfc3RhdGVNYWNoaW5lKHNlbGYsIGxpbmVJdGVyKToKKyAgICAgICAgIyBGb3IgZXJyb3IgcmVwb3J0aW5nLgorICAgICAgICBsaW5lbm8gPSAwCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICMgR2V0IHRoZSBuZXh0IGxpbmUgb3V0IG9mIHRoZSBmaWxlLCBxdWl0dGluZyBpZiB0aGlzIGlzIHRoZSBsYXN0IGxpbmUuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fbGluZSA9IGxpbmVJdGVyLm5leHQoKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xpbmUgPT0gIiI6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBsaW5lbm8gKz0gMQorCisgICAgICAgICAgICAjIEVsaW1pbmF0ZSBibGFuayBsaW5lcywgd2hpdGVzcGFjZS1vbmx5IGxpbmVzLCBhbmQgY29tbWVudHMuCisgICAgICAgICAgICBpZiBzZWxmLl9pc0JsYW5rT3JDb21tZW50KHNlbGYuX2xpbmUpOgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZVNwZWNpYWxDb21tZW50cyhzZWxmLl9saW5lKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgUmVtb3ZlIGFueSBlbmQtb2YtbGluZSBjb21tZW50cy4KKyAgICAgICAgICAgIHNhbml0aXplZCA9IHNlbGYuX2xpbmUuc3BsaXQoIiMiKVswXQorCisgICAgICAgICAgICAjIFRoZW4gc3BsaXQgdGhlIGxpbmUuCisgICAgICAgICAgICBhcmdzID0gc2hsZXguc3BsaXQoc2FuaXRpemVkLnJzdHJpcCgpKQorCisgICAgICAgICAgICBpZiBhcmdzWzBdID09ICIlaW5jbHVkZSI6CisgICAgICAgICAgICAgICAgIyBUaGlzIGNhc2UgY29tZXMgdXAgcHJpbWFyaWx5IGluIGtzdmFsaWRhdG9yLgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmZvbGxvd0luY2x1ZGVzOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDEgb3Igbm90IGFyZ3NbMV06CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtpY2tzdGFydFBhcnNlRXJyb3IsIGZvcm1hdEVycm9yTXNnKGxpbmVubykKKworICAgICAgICAgICAgICAgIHNlbGYuX2luY2x1ZGVEZXB0aCArPSAxCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVhZEtpY2tzdGFydChhcmdzWzFdLCByZXNldD1GYWxzZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgS2lja3N0YXJ0RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgSGFuZGxlIHRoZSBpbmNsdWRlIGZpbGUgYmVpbmcgcHJvdmlkZWQgb3ZlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBuZXR3b3JrIGluIGEgJXByZSBzY3JpcHQuICBUaGlzIGNhc2UgY29tZXMgdXAgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICMgZWFybHkgcGFyc2luZyBpbiBhbmFjb25kYS4KKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5taXNzaW5nSW5jbHVkZUlzRmF0YWw6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICAgICAgICAgc2VsZi5faW5jbHVkZURlcHRoIC09IDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIE5vdyBvbiB0byB0aGUgbWFpbiBldmVudC4KKyAgICAgICAgICAgIGlmIHNlbGYuX3N0YXRlID09IFNUQVRFX0NPTU1BTkRTOgorICAgICAgICAgICAgICAgIGlmIGFyZ3NbMF0gPT0gIiVrc2FwcGVuZCI6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBwcmVwcm9jZXNzKiBmdW5jdGlvbnMsIHNvIGNvbnRpbnVlLgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsaWYgYXJnc1swXVswXSA9PSAnJSc6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IHNlY3Rpb24uICBIYW5kbGUgaXRzIGhlYWRlcgorICAgICAgICAgICAgICAgICAgICAjIGhlcmUuCisgICAgICAgICAgICAgICAgICAgIG5ld1NlY3Rpb24gPSBhcmdzWzBdCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl92YWxpZFN0YXRlKG5ld1NlY3Rpb24pOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2lja3N0YXJ0UGFyc2VFcnJvciwgZm9ybWF0RXJyb3JNc2cobGluZW5vLCBtc2c9XygiVW5rbm93biBraWNrc3RhcnQgc2VjdGlvbjogJXMiICUgbmV3U2VjdGlvbikpCisKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RhdGUgPSBuZXdTZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIG9iaiA9IHNlbGYuX3NlY3Rpb25zW3NlbGYuX3N0YXRlXQorICAgICAgICAgICAgICAgICAgICBzZWxmLl90cnlGdW5jKGxhbWJkYTogb2JqLmhhbmRsZUhlYWRlcihsaW5lbm8sIGFyZ3MpKQorCisgICAgICAgICAgICAgICAgICAgICMgVGhpcyB3aWxsIGhhbmRsZSBhbGwgc2VjdGlvbiBwcm9jZXNzaW5nLCBraWNraW5nIHVzIGJhY2sKKyAgICAgICAgICAgICAgICAgICAgIyBvdXQgdG8gU1RBVEVfQ09NTUFORFMgYXQgdGhlIGVuZCB3aXRoIHRoZSBjdXJyZW50IGxpbmUKKyAgICAgICAgICAgICAgICAgICAgIyBiZWluZyB0aGUgbmV4dCBzZWN0aW9uIGhlYWRlciwgZXRjLgorICAgICAgICAgICAgICAgICAgICBsaW5lbm8gPSBzZWxmLl9yZWFkU2VjdGlvbihsaW5lSXRlciwgbGluZW5vKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhIGNvbW1hbmQgaW4gdGhlIGNvbW1hbmQgc2VjdGlvbi4gIERpc3BhdGNoIHRvIGl0LgorICAgICAgICAgICAgICAgICAgICBzZWxmLl90cnlGdW5jKGxhbWJkYTogc2VsZi5oYW5kbGVDb21tYW5kKGxpbmVubywgYXJncykpCisgICAgICAgICAgICBlbGlmIHNlbGYuX3N0YXRlID09IFNUQVRFX0VORDoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgZGVmIHJlYWRLaWNrc3RhcnRGcm9tU3RyaW5nIChzZWxmLCBzLCByZXNldD1UcnVlKToKKyAgICAgICAgIiIiUHJvY2VzcyBhIGtpY2tzdGFydCBmaWxlLCBwcm92aWRlZCBhcyB0aGUgc3RyaW5nIHN0ci4iIiIKKyAgICAgICAgaWYgcmVzZXQ6CisgICAgICAgICAgICBzZWxmLl9yZXNldCgpCisKKyAgICAgICAgIyBBZGQgYSAiIiB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IHNvIHRoZSBzdHJpbmcgcmVhZGVyIGFjdHMgbGlrZSB0aGUKKyAgICAgICAgIyBmaWxlIHJlYWRlciBhbmQgd2Ugb25seSBnZXQgU3RvcEl0ZXJhdGlvbiB3aGVuIHdlJ3JlIGFmdGVyIHRoZSBmaW5hbAorICAgICAgICAjIGxpbmUgb2YgaW5wdXQuCisgICAgICAgIGkgPSBQdXRCYWNrSXRlcmF0b3Iocy5zcGxpdGxpbmVzKFRydWUpICsgWyIiXSkKKyAgICAgICAgc2VsZi5fc3RhdGVNYWNoaW5lIChpKQorCisgICAgZGVmIHJlYWRLaWNrc3RhcnQoc2VsZiwgZiwgcmVzZXQ9VHJ1ZSk6CisgICAgICAgICIiIlByb2Nlc3MgYSBraWNrc3RhcnQgZmlsZSwgZ2l2ZW4gYnkgdGhlIGZpbGVuYW1lIGYuIiIiCisgICAgICAgIGlmIHJlc2V0OgorICAgICAgICAgICAgc2VsZi5fcmVzZXQoKQorCisgICAgICAgICMgYW4gJWluY2x1ZGUgbWlnaHQgbm90IHNwZWNpZnkgYSBmdWxsIHBhdGguICBpZiB3ZSBkb24ndCB0cnkgdG8gZmlndXJlCisgICAgICAgICMgb3V0IHdoYXQgdGhlIHBhdGggc2hvdWxkIGhhdmUgYmVlbiwgdGhlbiB3ZSdyZSB1bmFibGUgdG8gZmluZCBpdAorICAgICAgICAjIHJlcXVpcmluZyBmdWxsIHBhdGggc3BlY2lmaWNhdGlvbiwgdGhvdWdoLCBzdWNrcy4gIHNvIGxldCdzIG1ha2UKKyAgICAgICAgIyB0aGUgcmVhZGluZyAic21hcnQiIGJ5IGtlZXBpbmcgdHJhY2sgb2Ygd2hhdCB0aGUgcGF0aCBpcyBhdCBlYWNoCisgICAgICAgICMgaW5jbHVkZSBkZXB0aC4KKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGYpOgorICAgICAgICAgICAgaWYgc2VsZi5jdXJyZW50ZGlyLmhhc19rZXkoc2VsZi5faW5jbHVkZURlcHRoIC0gMSk6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuY3VycmVudGRpcltzZWxmLl9pbmNsdWRlRGVwdGggLSAxXSwgZikpOgorICAgICAgICAgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKHNlbGYuY3VycmVudGRpcltzZWxmLl9pbmNsdWRlRGVwdGggLSAxXSwgZikKKworICAgICAgICBjZCA9IG9zLnBhdGguZGlybmFtZShmKQorICAgICAgICBpZiBub3QgY2Quc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgY2QgPSBvcy5wYXRoLmFic3BhdGgoY2QpCisgICAgICAgIHNlbGYuY3VycmVudGRpcltzZWxmLl9pbmNsdWRlRGVwdGhdID0gY2QKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gZmlsZShmKS5yZWFkKCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAgICAgICAgICByYWlzZSBLaWNrc3RhcnRFcnJvciwgZm9ybWF0RXJyb3JNc2coMCwgbXNnPV8oIlVuYWJsZSB0byBvcGVuIGlucHV0IGtpY2tzdGFydCBmaWxlOiAlcyIpICUgZS5zdHJlcnJvcikKKworICAgICAgICBzZWxmLnJlYWRLaWNrc3RhcnRGcm9tU3RyaW5nKHMsIHJlc2V0PUZhbHNlKQorCisgICAgZGVmIHNldHVwU2VjdGlvbnMoc2VsZik6CisgICAgICAgICIiIkluc3RhbGwgdGhlIHNlY3Rpb25zIGFsbCBraWNrc3RhcnQgZmlsZXMgc3VwcG9ydC4gIFlvdSBtYXkgb3ZlcnJpZGUKKyAgICAgICAgICAgdGhpcyBtZXRob2QgaW4gYSBzdWJjbGFzcywgYnV0IHNob3VsZCBhdm9pZCBkb2luZyBzbyB1bmxlc3MgeW91IGtub3cKKyAgICAgICAgICAgd2hhdCB5b3UncmUgZG9pbmcuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9zZWN0aW9ucyA9IHt9CisKKyAgICAgICAgIyBJbnN0YWxsIHRoZSBzZWN0aW9ucyBhbGwga2lja3N0YXJ0IGZpbGVzIHN1cHBvcnQuCisgICAgICAgIHNlbGYucmVnaXN0ZXJTZWN0aW9uKFByZVNjcmlwdFNlY3Rpb24oc2VsZi5oYW5kbGVyLCBkYXRhT2JqPVNjcmlwdCkpCisgICAgICAgIHNlbGYucmVnaXN0ZXJTZWN0aW9uKFBvc3RTY3JpcHRTZWN0aW9uKHNlbGYuaGFuZGxlciwgZGF0YU9iaj1TY3JpcHQpKQorICAgICAgICBzZWxmLnJlZ2lzdGVyU2VjdGlvbihUcmFjZWJhY2tTY3JpcHRTZWN0aW9uKHNlbGYuaGFuZGxlciwgZGF0YU9iaj1TY3JpcHQpKQorICAgICAgICBzZWxmLnJlZ2lzdGVyU2VjdGlvbihQYWNrYWdlU2VjdGlvbihzZWxmLmhhbmRsZXIpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvc2VjdGlvbnMucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9zZWN0aW9ucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGRmODU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvc2VjdGlvbnMucHkKQEAgLTAsMCArMSwyNDQgQEAKKyMKKyMgc2VjdGlvbnMucHk6ICBLaWNrc3RhcnQgZmlsZSBzZWN0aW9ucy4KKyMKKyMgQ2hyaXMgTHVtZW5zIDxjbHVtZW5zQHJlZGhhdC5jb20+CisjCisjIENvcHlyaWdodCAyMDExIFJlZCBIYXQsIEluYy4KKyMKKyMgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsIG1vZGlmeSwKKyMgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorIyB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlCisjIGltcGxpZWQgd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEKKyMgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBBbnkgUmVkIEhhdAorIyB0cmFkZW1hcmtzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgc291cmNlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiBhcmUgbm90CisjIHN1YmplY3QgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBtYXkgb25seSBiZSB1c2VkIG9yIHJlcGxpY2F0ZWQKKyMgd2l0aCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIFJlZCBIYXQsIEluYy4gCisjCisiIiIKK1RoaXMgbW9kdWxlIGV4cG9ydHMgdGhlIGNsYXNzZXMgdGhhdCBkZWZpbmUgYSBzZWN0aW9uIG9mIGEga2lja3N0YXJ0IGZpbGUuICBBCitzZWN0aW9uIGlzIGEgY2h1bmsgb2YgdGhlIGZpbGUgc3RhcnRpbmcgd2l0aCBhICV0YWcgYW5kIGVuZGluZyB3aXRoIGEgJWVuZC4KK0V4YW1wbGVzIG9mIHNlY3Rpb25zIGluY2x1ZGUgJXBhY2thZ2VzLCAlcHJlLCBhbmQgJXBvc3QuCisKK1lvdSBtYXkgdXNlIHRoaXMgbW9kdWxlIHRvIGRlZmluZSB5b3VyIG93biBjdXN0b20gc2VjdGlvbnMgd2hpY2ggd2lsbCBiZQordHJlYXRlZCBqdXN0IHRoZSBzYW1lIGFzIGEgcHJlZGVmaW5lZCBvbmUgYnkgdGhlIGtpY2tzdGFydCBwYXJzZXIuICBBbGwgdGhhdAoraXMgbmVjZXNzYXJ5IGlzIHRvIGNyZWF0ZSBhIG5ldyBzdWJjbGFzcyBvZiBTZWN0aW9uIGFuZCBjYWxsCitwYXJzZXIucmVnaXN0ZXJTZWN0aW9uIHdpdGggYW4gaW5zdGFuY2Ugb2YgeW91ciBuZXcgY2xhc3MuCisiIiIKK2Zyb20gY29uc3RhbnRzIGltcG9ydCAqCitmcm9tIG9wdGlvbnMgaW1wb3J0IEtTT3B0aW9uUGFyc2VyCitmcm9tIHZlcnNpb24gaW1wb3J0ICoKKworY2xhc3MgU2VjdGlvbihvYmplY3QpOgorICAgICIiIlRoZSBiYXNlIGNsYXNzIGZvciBkZWZpbmluZyBraWNrc3RhcnQgc2VjdGlvbnMuICBZb3UgYXJlIGZyZWUgdG8KKyAgICAgICBzdWJjbGFzcyB0aGlzIGFzIGFwcHJvcHJpYXRlLgorCisgICAgICAgQ2xhc3MgYXR0cmlidXRlczoKKworICAgICAgIGFsbExpbmVzICAgIC0tIERvZXMgdGhpcyBzZWN0aW9uIHJlcXVpcmUgdGhlIHBhcnNlciB0byBjYWxsIGhhbmRsZUxpbmUKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgZXZlcnkgbGluZSBpbiB0aGUgc2VjdGlvbiwgZXZlbiBibGFua3MgYW5kIGNvbW1lbnRzPworICAgICAgIHNlY3Rpb25PcGVuIC0tIFRoZSBzdHJpbmcgdGhhdCBkZW5vdGVzIHRoZSBzdGFydCBvZiB0aGlzIHNlY3Rpb24uICBZb3UKKyAgICAgICAgICAgICAgICAgICAgICBtdXN0IHN0YXJ0IHlvdXIgdGFnIHdpdGggYSBwZXJjZW50IHNpZ24uCisgICAgICAgdGltZXNTZWVuICAgLS0gVGhpcyBhdHRyaWJ1dGUgaXMgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seS4gIEl0IGlzCisgICAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50ZWQgZXZlcnkgdGltZSBoYW5kbGVIZWFkZXIgaXMgY2FsbGVkIHRvIGtlZXAKKyAgICAgICAgICAgICAgICAgICAgICB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgc2VjdGlvbiBvZiB0aGlzIHR5cGUgaXMKKyAgICAgICAgICAgICAgICAgICAgICBzZWVuLgorICAgICIiIgorICAgIGFsbExpbmVzID0gRmFsc2UKKyAgICBzZWN0aW9uT3BlbiA9ICIiCisgICAgdGltZXNTZWVuID0gMAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhhbmRsZXIsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IFNjcmlwdCBpbnN0YW5jZS4gIEF0IHRoZSBsZWFzdCwgeW91IG11c3QgcGFzcyBpbiBhbgorICAgICAgICAgICBpbnN0YW5jZSBvZiBhIGJhc2VIYW5kbGVyIHN1YmNsYXNzLgorCisgICAgICAgICAgIFZhbGlkIGt3YXJnczoKKworICAgICAgICAgICBkYXRhT2JqIC0tCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmhhbmRsZXIgPSBoYW5kbGVyCisKKyAgICAgICAgc2VsZi52ZXJzaW9uID0gc2VsZi5oYW5kbGVyLnZlcnNpb24KKworICAgICAgICBzZWxmLmRhdGFPYmogPSBrd2FyZ3MuZ2V0KCJkYXRhT2JqIiwgTm9uZSkKKworICAgIGRlZiBmaW5hbGl6ZShzZWxmKToKKyAgICAgICAgIiIiVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlICVlbmQgdGFnIGZvciBhIHNlY3Rpb24gaXMgc2Vlbi4gIEl0CisgICAgICAgICAgIGlzIG5vdCByZXF1aXJlZCB0byBiZSBwcm92aWRlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBoYW5kbGVMaW5lKHNlbGYsIGxpbmUpOgorICAgICAgICAiIiJUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZm9yIGV2ZXJ5IGxpbmUgb2YgYSBzZWN0aW9uLiAgVGFrZSB3aGF0ZXZlcgorICAgICAgICAgICBhY3Rpb24gaXMgYXBwcm9wcmlhdGUuICBXaGlsZSB0aGlzIG1ldGhvZCBpcyBub3QgcmVxdWlyZWQgdG8gYmUKKyAgICAgICAgICAgcHJvdmlkZWQsIG5vdCBwcm92aWRpbmcgaXQgZG9lcyBub3QgbWFrZSBhIHdob2xlIGxvdCBvZiBzZW5zZS4KKworICAgICAgICAgICBBcmd1bWVudHM6CisKKyAgICAgICAgICAgbGluZSAtLSBUaGUgY29tcGxldGUgbGluZSwgd2l0aCBhbnkgdHJhaWxpbmcgbmV3bGluZS4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBoYW5kbGVIZWFkZXIoc2VsZiwgbGluZW5vLCBhcmdzKToKKyAgICAgICAgIiIiVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIG9wZW5pbmcgdGFnIGZvciBhIHNlY3Rpb24gaXMgc2Vlbi4KKyAgICAgICAgICAgTm90IGFsbCBzZWN0aW9ucyB3aWxsIG5lZWQgdGhpcyBtZXRob2QsIHRob3VnaCBhbGwgcHJvdmlkZWQgd2l0aAorICAgICAgICAgICBraWNrc3RhcnQgaW5jbHVkZSBvbmUuCisKKyAgICAgICAgICAgQXJndW1lbnRzOgorCisgICAgICAgICAgIGFyZ3MgLS0gQSBsaXN0IG9mIGFsbCBzdHJpbmdzIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gdGhlIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICBvcGVuaW5nIHRhZy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYudGltZXNTZWVuICs9IDEKKworY2xhc3MgTnVsbFNlY3Rpb24oU2VjdGlvbik6CisgICAgIiIiVGhpcyBkZWZpbmVzIGEgc2VjdGlvbiB0aGF0IHB5a2lja3N0YXJ0IHdpbGwgcmVjb2duaXplIGJ1dCBkbyBub3RoaW5nCisgICAgICAgd2l0aC4gIElmIHRoZSBwYXJzZXIgcnVucyBhY3Jvc3MgYSAlc2VjdGlvbiB0aGF0IGhhcyBubyBvYmplY3QgcmVnaXN0ZXJlZCwKKyAgICAgICBpdCB3aWxsIHJhaXNlIGFuIGVycm9yLiAgU29tZXRpbWVzLCB5b3UgbWF5IHdhbnQgdG8gc2ltcGx5IGlnbm9yZSB0aG9zZQorICAgICAgIHNlY3Rpb25zIGluc3RlYWQuICBUaGlzIGNsYXNzIGlzIHVzZWZ1bCBmb3IgdGhhdCBwdXJwb3NlLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgTnVsbFNlY3Rpb24gaW5zdGFuY2UuICBZb3UgbXVzdCBwYXNzIGEgc2VjdGlvbk9wZW4KKyAgICAgICAgICAgcGFyYW1ldGVyIChpbmNsdWRpbmcgYSBsZWFkaW5nICclJykgZm9yIHRoZSBzZWN0aW9uIHlvdSB3aXNoIHRvCisgICAgICAgICAgIGlnbm9yZS4KKyAgICAgICAgIiIiCisgICAgICAgIFNlY3Rpb24uX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLnNlY3Rpb25PcGVuID0ga3dhcmdzLmdldCgic2VjdGlvbk9wZW4iKQorCitjbGFzcyBTY3JpcHRTZWN0aW9uKFNlY3Rpb24pOgorICAgIGFsbExpbmVzID0gVHJ1ZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIFNlY3Rpb24uX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLl9zY3JpcHQgPSB7fQorICAgICAgICBzZWxmLl9yZXNldFNjcmlwdCgpCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgb3AgPSBLU09wdGlvblBhcnNlcihzZWxmLnZlcnNpb24pCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tZXJyb3JvbmZhaWwiLCBkZXN0PSJlcnJvck9uRmFpbCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1pbnRlcnByZXRlciIsIGRlc3Q9ImludGVycHJldGVyIiwgZGVmYXVsdD0iL2Jpbi9zaCIpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tbG9nIiwgIi0tbG9nZmlsZSIsIGRlc3Q9ImxvZyIpCisgICAgICAgIHJldHVybiBvcAorCisgICAgZGVmIF9yZXNldFNjcmlwdChzZWxmKToKKyAgICAgICAgc2VsZi5fc2NyaXB0ID0geyJpbnRlcnAiOiAiL2Jpbi9zaCIsICJsb2ciOiBOb25lLCAiZXJyb3JPbkZhaWwiOiBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lbm8iOiBOb25lLCAiY2hyb290IjogRmFsc2UsICJib2R5IjogW119CisKKyAgICBkZWYgaGFuZGxlTGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgc2VsZi5fc2NyaXB0WyJib2R5Il0uYXBwZW5kKGxpbmUpCisKKyAgICBkZWYgZmluYWxpemUoc2VsZik6CisgICAgICAgIGlmICIgIi5qb2luKHNlbGYuX3NjcmlwdFsiYm9keSJdKS5zdHJpcCgpID09ICIiOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAga3dhcmdzID0geyJpbnRlcnAiOiBzZWxmLl9zY3JpcHRbImludGVycCJdLAorICAgICAgICAgICAgICAgICAgImluQ2hyb290Ijogc2VsZi5fc2NyaXB0WyJjaHJvb3QiXSwKKyAgICAgICAgICAgICAgICAgICJsaW5lbm8iOiBzZWxmLl9zY3JpcHRbImxpbmVubyJdLAorICAgICAgICAgICAgICAgICAgImxvZ2ZpbGUiOiBzZWxmLl9zY3JpcHRbImxvZyJdLAorICAgICAgICAgICAgICAgICAgImVycm9yT25GYWlsIjogc2VsZi5fc2NyaXB0WyJlcnJvck9uRmFpbCJdLAorICAgICAgICAgICAgICAgICAgInR5cGUiOiBzZWxmLl9zY3JpcHRbInR5cGUiXX0KKworICAgICAgICBzID0gc2VsZi5kYXRhT2JqIChzZWxmLl9zY3JpcHRbImJvZHkiXSwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuX3Jlc2V0U2NyaXB0KCkKKworICAgICAgICBpZiBzZWxmLmhhbmRsZXI6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2NyaXB0cy5hcHBlbmQocykKKworICAgIGRlZiBoYW5kbGVIZWFkZXIoc2VsZiwgbGluZW5vLCBhcmdzKToKKyAgICAgICAgIiIiUHJvY2VzcyB0aGUgYXJndW1lbnRzIHRvIGEgJXByZS8lcG9zdC8ldHJhY2ViYWNrIGhlYWRlciBmb3IgbGF0ZXIKKyAgICAgICAgICAgc2V0dGluZyBvbiBhIFNjcmlwdCBpbnN0YW5jZSBvbmNlIHRoZSBlbmQgb2YgdGhlIHNjcmlwdCBpcyBmb3VuZC4KKyAgICAgICAgICAgVGhpcyBtZXRob2QgbWF5IGJlIG92ZXJyaWRkZW4gaW4gYSBzdWJjbGFzcyBpZiBuZWNlc3NhcnkuCisgICAgICAgICIiIgorICAgICAgICBTZWN0aW9uLmhhbmRsZUhlYWRlcihzZWxmLCBsaW5lbm8sIGFyZ3MpCisgICAgICAgIG9wID0gc2VsZi5fZ2V0UGFyc2VyKCkKKworICAgICAgICAob3B0cywgZXh0cmEpID0gb3AucGFyc2VfYXJncyhhcmdzPWFyZ3NbMTpdLCBsaW5lbm89bGluZW5vKQorCisgICAgICAgIHNlbGYuX3NjcmlwdFsiaW50ZXJwIl0gPSBvcHRzLmludGVycHJldGVyCisgICAgICAgIHNlbGYuX3NjcmlwdFsibGluZW5vIl0gPSBsaW5lbm8KKyAgICAgICAgc2VsZi5fc2NyaXB0WyJsb2ciXSA9IG9wdHMubG9nCisgICAgICAgIHNlbGYuX3NjcmlwdFsiZXJyb3JPbkZhaWwiXSA9IG9wdHMuZXJyb3JPbkZhaWwKKyAgICAgICAgaWYgaGFzYXR0cihvcHRzLCAibm9jaHJvb3QiKToKKyAgICAgICAgICAgIHNlbGYuX3NjcmlwdFsiY2hyb290Il0gPSBub3Qgb3B0cy5ub2Nocm9vdAorCitjbGFzcyBQcmVTY3JpcHRTZWN0aW9uKFNjcmlwdFNlY3Rpb24pOgorICAgIHNlY3Rpb25PcGVuID0gIiVwcmUiCisKKyAgICBkZWYgX3Jlc2V0U2NyaXB0KHNlbGYpOgorICAgICAgICBTY3JpcHRTZWN0aW9uLl9yZXNldFNjcmlwdChzZWxmKQorICAgICAgICBzZWxmLl9zY3JpcHRbInR5cGUiXSA9IEtTX1NDUklQVF9QUkUKKworY2xhc3MgUG9zdFNjcmlwdFNlY3Rpb24oU2NyaXB0U2VjdGlvbik6CisgICAgc2VjdGlvbk9wZW4gPSAiJXBvc3QiCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgb3AgPSBTY3JpcHRTZWN0aW9uLl9nZXRQYXJzZXIoc2VsZikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1ub2Nocm9vdCIsIGRlc3Q9Im5vY2hyb290IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlKQorICAgICAgICByZXR1cm4gb3AKKworICAgIGRlZiBfcmVzZXRTY3JpcHQoc2VsZik6CisgICAgICAgIFNjcmlwdFNlY3Rpb24uX3Jlc2V0U2NyaXB0KHNlbGYpCisgICAgICAgIHNlbGYuX3NjcmlwdFsiY2hyb290Il0gPSBUcnVlCisgICAgICAgIHNlbGYuX3NjcmlwdFsidHlwZSJdID0gS1NfU0NSSVBUX1BPU1QKKworY2xhc3MgVHJhY2ViYWNrU2NyaXB0U2VjdGlvbihTY3JpcHRTZWN0aW9uKToKKyAgICBzZWN0aW9uT3BlbiA9ICIldHJhY2ViYWNrIgorCisgICAgZGVmIF9yZXNldFNjcmlwdChzZWxmKToKKyAgICAgICAgU2NyaXB0U2VjdGlvbi5fcmVzZXRTY3JpcHQoc2VsZikKKyAgICAgICAgc2VsZi5fc2NyaXB0WyJ0eXBlIl0gPSBLU19TQ1JJUFRfVFJBQ0VCQUNLCisKK2NsYXNzIFBhY2thZ2VTZWN0aW9uKFNlY3Rpb24pOgorICAgIHNlY3Rpb25PcGVuID0gIiVwYWNrYWdlcyIKKworICAgIGRlZiBoYW5kbGVMaW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBpZiBub3Qgc2VsZi5oYW5kbGVyOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgKGgsIHMsIHQpID0gbGluZS5wYXJ0aXRpb24oJyMnKQorICAgICAgICBsaW5lID0gaC5yc3RyaXAoKQorCisgICAgICAgIHNlbGYuaGFuZGxlci5wYWNrYWdlcy5hZGQoW2xpbmVdKQorCisgICAgZGVmIGhhbmRsZUhlYWRlcihzZWxmLCBsaW5lbm8sIGFyZ3MpOgorICAgICAgICAiIiJQcm9jZXNzIHRoZSBhcmd1bWVudHMgdG8gdGhlICVwYWNrYWdlcyBoZWFkZXIgYW5kIHNldCBhdHRyaWJ1dGVzCisgICAgICAgICAgIG9uIHRoZSBWZXJzaW9uJ3MgUGFja2FnZXMgaW5zdGFuY2UgYXBwcm9wcmlhdGUuICBUaGlzIG1ldGhvZCBtYXkgYmUKKyAgICAgICAgICAgb3ZlcnJpZGRlbiBpbiBhIHN1YmNsYXNzIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgIiIiCisgICAgICAgIFNlY3Rpb24uaGFuZGxlSGVhZGVyKHNlbGYsIGxpbmVubywgYXJncykKKyAgICAgICAgb3AgPSBLU09wdGlvblBhcnNlcih2ZXJzaW9uPXNlbGYudmVyc2lvbikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1leGNsdWRlZG9jcyIsIGRlc3Q9ImV4Y2x1ZGVkb2NzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWlnbm9yZW1pc3NpbmciLCBkZXN0PSJpZ25vcmVtaXNzaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLW5vYmFzZSIsIGRlc3Q9Im5vYmFzZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1pZ25vcmVkZXBzIiwgZGVzdD0icmVzb2x2ZURlcHMiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGVkPUZDNCwgcmVtb3ZlZD1GOSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1yZXNvbHZlZGVwcyIsIGRlc3Q9InJlc29sdmVEZXBzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGVkPUZDNCwgcmVtb3ZlZD1GOSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1kZWZhdWx0IiwgZGVzdD0iZGVmYXVsdFBhY2thZ2VzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBpbnRyb2R1Y2VkPUY3KQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWluc3RMYW5ncyIsIGRlc3Q9Imluc3RMYW5ncyIsIHR5cGU9InN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iIiwgaW50cm9kdWNlZD1GOSkKKworICAgICAgICAob3B0cywgZXh0cmEpID0gb3AucGFyc2VfYXJncyhhcmdzPWFyZ3NbMTpdLCBsaW5lbm89bGluZW5vKQorCisgICAgICAgIHNlbGYuaGFuZGxlci5wYWNrYWdlcy5leGNsdWRlRG9jcyA9IG9wdHMuZXhjbHVkZWRvY3MKKyAgICAgICAgc2VsZi5oYW5kbGVyLnBhY2thZ2VzLmFkZEJhc2UgPSBub3Qgb3B0cy5ub2Jhc2UKKyAgICAgICAgaWYgb3B0cy5pZ25vcmVtaXNzaW5nOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnBhY2thZ2VzLmhhbmRsZU1pc3NpbmcgPSBLU19NSVNTSU5HX0lHTk9SRQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnBhY2thZ2VzLmhhbmRsZU1pc3NpbmcgPSBLU19NSVNTSU5HX1BST01QVAorCisgICAgICAgIGlmIG9wdHMuZGVmYXVsdFBhY2thZ2VzOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnBhY2thZ2VzLmRlZmF1bHQgPSBUcnVlCisKKyAgICAgICAgaWYgb3B0cy5pbnN0TGFuZ3M6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIucGFja2FnZXMuaW5zdExhbmdzID0gb3B0cy5pbnN0TGFuZ3MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L3ZlcnNpb24ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC92ZXJzaW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOGU2YWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC92ZXJzaW9uLnB5CkBAIC0wLDAgKzEsMTY4IEBACisjCisjIENocmlzIEx1bWVucyA8Y2x1bWVuc0ByZWRoYXQuY29tPgorIworIyBDb3B5cmlnaHQgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBSZWQgSGF0LCBJbmMuCisjCisjIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLCBtb2RpZnksCisjIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugdi4yLiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyMgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nIHRoZQorIyBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxCisjIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgQW55IFJlZCBIYXQKKyMgdHJhZGVtYXJrcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIHNvdXJjZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gYXJlIG5vdAorIyBzdWJqZWN0IHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgbWF5IG9ubHkgYmUgdXNlZCBvciByZXBsaWNhdGVkCisjIHdpdGggdGhlIGV4cHJlc3MgcGVybWlzc2lvbiBvZiBSZWQgSGF0LCBJbmMuIAorIworIiIiCitNZXRob2RzIGZvciB3b3JraW5nIHdpdGgga2lja3N0YXJ0IHZlcnNpb25zLgorCitUaGlzIG1vZHVsZSBkZWZpbmVzIHNldmVyYWwgc3ltYm9saWMgY29uc3RhbnRzIHRoYXQgc3BlY2lmeSBraWNrc3RhcnQgc3ludGF4Cit2ZXJzaW9ucy4gIEVhY2ggdmVyc2lvbiBjb3JyZXNwb25kcyByb3VnaGx5IHRvIG9uZSByZWxlYXNlIG9mIFJlZCBIYXQgTGludXgsCitSZWQgSGF0IEVudGVycHJpc2UgTGludXgsIG9yIEZlZG9yYSBDb3JlIGFzIHRoZXNlIGFyZSB3aGVyZSBtb3N0IHN5bnRheAorY2hhbmdlcyB0YWtlIHBsYWNlLgorCitUaGlzIG1vZHVsZSBhbHNvIGV4cG9ydHMgc2V2ZXJhbCBmdW5jdGlvbnM6CisKKyAgICBtYWtlVmVyc2lvbiAtIEdpdmVuIGEgdmVyc2lvbiBudW1iZXIsIHJldHVybiBhbiBpbnN0YW5jZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgIG1hdGNoaW5nIGhhbmRsZXIgY2xhc3MuCisKKyAgICByZXR1cm5DbGFzc0ZvclZlcnNpb24gLSBHaXZlbiBhIHZlcnNpb24gbnVtYmVyLCByZXR1cm4gdGhlIG1hdGNoaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciBjbGFzcy4gIFRoaXMgZG9lcyBub3QgcmV0dXJuIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcywgaG93ZXZlci4KKworICAgIHN0cmluZ1RvVmVyc2lvbiAtIENvbnZlcnQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB2ZXJzaW9uIG51bWJlcgorICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIHN5bWJvbGljIGNvbnN0YW50LgorCisgICAgdmVyc2lvblRvU3RyaW5nIC0gUGVyZm9ybSB0aGUgcmV2ZXJzZSBtYXBwaW5nLgorCisgICAgdmVyc2lvbkZyb21GaWxlIC0gUmVhZCBhIGtpY2tzdGFydCBmaWxlIGFuZCBkZXRlcm1pbmUgdGhlIHZlcnNpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgICBzeW50YXggaXQgdXNlcy4gIFRoaXMgcmVxdWlyZXMgdGhlIGtpY2tzdGFydCBmaWxlIHRvCisgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBhIHZlcnNpb249IGNvbW1lbnQgaW4gaXQuCisiIiIKK2ltcG9ydCBpbXB1dGlsLCByZSwgc3lzCisKK2ltcG9ydCBnZXR0ZXh0CitfID0gbGFtYmRhIHg6IGdldHRleHQubGRnZXR0ZXh0KCJweWtpY2tzdGFydCIsIHgpCisKK2Zyb20gcHlraWNrc3RhcnQuZXJyb3JzIGltcG9ydCBLaWNrc3RhcnRWZXJzaW9uRXJyb3IKKworIyBTeW1ib2xpYyBuYW1lcyBmb3IgaW50ZXJuYWwgdmVyc2lvbiBudW1iZXJzLgorUkhFTDMgPSA5MDAKK0ZDMyA9IDEwMDAKK1JIRUw0ID0gMTEwMAorRkM0ID0gMjAwMAorRkM1ID0gMzAwMAorRkM2ID0gNDAwMAorUkhFTDUgPSA0MTAwCitGNyAgPSA1MDAwCitGOCA9IDYwMDAKK0Y5ID0gNzAwMAorRjEwID0gODAwMAorRjExID0gOTAwMAorRjEyID0gMTAwMDAKK0YxMyA9IDExMDAwCitSSEVMNiA9IDExMTAwCitGMTQgPSAxMjAwMAorRjE1ID0gMTMwMDAKK0YxNiA9IDE0MDAwCisKKyMgVGhpcyBhbHdheXMgcG9pbnRzIGF0IHRoZSBsYXRlc3QgdmVyc2lvbiBhbmQgaXMgdGhlIGRlZmF1bHQuCitERVZFTCA9IEYxNgorCisjIEEgb25lLXRvLW9uZSBtYXBwaW5nIGZyb20gc3RyaW5nIHJlcHJlc2VudGF0aW9ucyB0byB2ZXJzaW9uIG51bWJlcnMuCit2ZXJzaW9uTWFwID0geworICAgICAgICAiREVWRUwiOiBERVZFTCwKKyAgICAgICAgIkZDMyI6IEZDMywgIkZDNCI6IEZDNCwgIkZDNSI6IEZDNSwgIkZDNiI6IEZDNiwgIkY3IjogRjcsICJGOCI6IEY4LAorICAgICAgICAiRjkiOiBGOSwgIkYxMCI6IEYxMCwgIkYxMSI6IEYxMSwgIkYxMiI6IEYxMiwgIkYxMyI6IEYxMywKKyAgICAgICAgIkYxNCI6IEYxNCwgIkYxNSI6IEYxNSwgIkYxNiI6IEYxNiwKKyAgICAgICAgIlJIRUwzIjogUkhFTDMsICJSSEVMNCI6IFJIRUw0LCAiUkhFTDUiOiBSSEVMNSwgIlJIRUw2IjogUkhFTDYKK30KKworZGVmIHN0cmluZ1RvVmVyc2lvbihzKToKKyAgICAiIiJDb252ZXJ0IHN0cmluZyBpbnRvIG9uZSBvZiB0aGUgcHJvdmlkZWQgdmVyc2lvbiBjb25zdGFudHMuICBSYWlzZXMKKyAgICAgICBLaWNrc3RhcnRWZXJzaW9uRXJyb3IgaWYgc3RyaW5nIGRvZXMgbm90IG1hdGNoIGFueXRoaW5nLgorICAgICIiIgorICAgICMgRmlyc3QgdHJ5IHRoZXNlIHNob3J0IGZvcm1zLgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHZlcnNpb25NYXBbcy51cHBlcigpXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcGFzcworCisgICAgIyBOb3cgdHJ5IHRoZSBGZWRvcmEgdmVyc2lvbnMuCisgICAgbSA9IHJlLm1hdGNoKCJeZmVkb3JhLiogKFxkKykkIiwgcywgcmUuSSkKKworICAgIGlmIG0gYW5kIG0uZ3JvdXAoMSk6CisgICAgICAgIGlmIHZlcnNpb25NYXAuaGFzX2tleSgiRkMiICsgbS5ncm91cCgxKSk6CisgICAgICAgICAgICByZXR1cm4gdmVyc2lvbk1hcFsiRkMiICsgbS5ncm91cCgxKV0KKyAgICAgICAgZWxpZiB2ZXJzaW9uTWFwLmhhc19rZXkoIkYiICsgbS5ncm91cCgxKSk6CisgICAgICAgICAgICByZXR1cm4gdmVyc2lvbk1hcFsiRiIgKyBtLmdyb3VwKDEpXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgS2lja3N0YXJ0VmVyc2lvbkVycm9yKF8oIlVuc3VwcG9ydGVkIHZlcnNpb24gc3BlY2lmaWVkOiAlcyIpICUgcykKKworICAgICMgTm93IHRyeSB0aGUgUkhFTCB2ZXJzaW9ucy4KKyAgICBtID0gcmUubWF0Y2goIl5yZWQgaGF0IGVudGVycHJpc2UgbGludXguKiAoXGQrKShbXC5cZF0qKSQiLCBzLCByZS5JKQorCisgICAgaWYgbSBhbmQgbS5ncm91cCgxKToKKyAgICAgICAgaWYgdmVyc2lvbk1hcC5oYXNfa2V5KCJSSEVMIiArIG0uZ3JvdXAoMSkpOgorICAgICAgICAgICAgcmV0dXJuIHZlcnNpb25NYXBbIlJIRUwiICsgbS5ncm91cCgxKV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEtpY2tzdGFydFZlcnNpb25FcnJvcihfKCJVbnN1cHBvcnRlZCB2ZXJzaW9uIHNwZWNpZmllZDogJXMiKSAlIHMpCisKKyAgICAjIElmIG5vdGhpbmcgZWxzZSB3b3JrZWQsIHdlJ3JlIG91dCBvZiBvcHRpb25zLgorICAgIHJhaXNlIEtpY2tzdGFydFZlcnNpb25FcnJvcihfKCJVbnN1cHBvcnRlZCB2ZXJzaW9uIHNwZWNpZmllZDogJXMiKSAlIHMpCisKK2RlZiB2ZXJzaW9uVG9TdHJpbmcodmVyc2lvbiwgc2tpcERldmVsPUZhbHNlKToKKyAgICAiIiJDb252ZXJ0IHZlcnNpb24gaW50byBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmVyc2lvbiBudW1iZXIuCisgICAgICAgVGhpcyBpcyB0aGUgcmV2ZXJzZSBvcGVyYXRpb24gb2Ygc3RyaW5nVG9WZXJzaW9uLiAgUmFpc2VzCisgICAgICAgS2lja3N0YXJ0VmVyc2lvbkVycm9yIGlmIHZlcnNpb24gZG9lcyBub3QgbWF0Y2ggYW55dGhpbmcuCisgICAgIiIiCisgICAgaWYgbm90IHNraXBEZXZlbCBhbmQgdmVyc2lvbiA9PSB2ZXJzaW9uTWFwWyJERVZFTCJdOgorICAgICAgICByZXR1cm4gIkRFVkVMIgorCisgICAgZm9yIChrZXksIHZhbCkgaW4gdmVyc2lvbk1hcC5pdGVyaXRlbXMoKToKKyAgICAgICAgaWYga2V5ID09ICJERVZFTCI6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlbGlmIHZhbCA9PSB2ZXJzaW9uOgorICAgICAgICAgICAgcmV0dXJuIGtleQorCisgICAgcmFpc2UgS2lja3N0YXJ0VmVyc2lvbkVycm9yKF8oIlVuc3VwcG9ydGVkIHZlcnNpb24gc3BlY2lmaWVkOiAlcyIpICUgdmVyc2lvbikKKworZGVmIHJldHVybkNsYXNzRm9yVmVyc2lvbih2ZXJzaW9uPURFVkVMKToKKyAgICAiIiJSZXR1cm4gdGhlIGNsYXNzIG9mIHRoZSBzeW50YXggaGFuZGxlciBmb3IgdmVyc2lvbi4gIHZlcnNpb24gY2FuIGJlCisgICAgICAgZWl0aGVyIGEgc3RyaW5nIG9yIHRoZSBtYXRjaGluZyBjb25zdGFudC4gIFJhaXNlcyBLaWNrc3RhcnRWYWx1ZUVycm9yCisgICAgICAgaWYgdmVyc2lvbiBkb2VzIG5vdCBtYXRjaCBhbnl0aGluZy4KKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIHZlcnNpb24gPSBpbnQodmVyc2lvbikKKyAgICAgICAgbW9kdWxlID0gIiVzIiAlIHZlcnNpb25Ub1N0cmluZyh2ZXJzaW9uLCBza2lwRGV2ZWw9VHJ1ZSkKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgbW9kdWxlID0gIiVzIiAlIHZlcnNpb24KKyAgICAgICAgdmVyc2lvbiA9IHN0cmluZ1RvVmVyc2lvbih2ZXJzaW9uKQorCisgICAgbW9kdWxlID0gbW9kdWxlLmxvd2VyKCkKKworICAgIHRyeToKKyAgICAgICAgaW1wb3J0IHB5a2lja3N0YXJ0LmhhbmRsZXJzCisgICAgICAgIHN5cy5wYXRoLmV4dGVuZChweWtpY2tzdGFydC5oYW5kbGVycy5fX3BhdGhfXykKKyAgICAgICAgZm91bmQgPSBpbXB1dGlsLmltcC5maW5kX21vZHVsZShtb2R1bGUpCisgICAgICAgIGxvYWRlZCA9IGltcHV0aWwuaW1wLmxvYWRfbW9kdWxlKG1vZHVsZSwgZm91bmRbMF0sIGZvdW5kWzFdLCBmb3VuZFsyXSkKKworICAgICAgICBmb3IgKGssIHYpIGluIGxvYWRlZC5fX2RpY3RfXy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGsubG93ZXIoKS5lbmRzd2l0aCgiJXNoYW5kbGVyIiAlIG1vZHVsZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHYKKyAgICBleGNlcHQ6CisgICAgICAgIHJhaXNlIEtpY2tzdGFydFZlcnNpb25FcnJvcihfKCJVbnN1cHBvcnRlZCB2ZXJzaW9uIHNwZWNpZmllZDogJXMiKSAlIHZlcnNpb24pCisKK2RlZiBtYWtlVmVyc2lvbih2ZXJzaW9uPURFVkVMKToKKyAgICAiIiJSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHN5bnRheCBoYW5kbGVyIGZvciB2ZXJzaW9uLiAgdmVyc2lvbiBjYW4gYmUKKyAgICAgICBlaXRoZXIgYSBzdHJpbmcgb3IgdGhlIG1hdGNoaW5nIGNvbnN0YW50LiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yCisgICAgICAgc3RhbmRhbG9uZSBwcm9ncmFtcyB3aGljaCBqdXN0IG5lZWQgdG8gaGFuZGxlIGEgc3BlY2lmaWMgdmVyc2lvbiBvZgorICAgICAgIGtpY2tzdGFydCBzeW50YXggKGFzIHByb3ZpZGVkIGJ5IGEgY29tbWFuZCBsaW5lIGFyZ3VtZW50LCBmb3IgZXhhbXBsZSkKKyAgICAgICBhbmQgbmVlZCB0byBpbnN0YW50aWF0ZSB0aGUgY29ycmVjdCBvYmplY3QuCisgICAgIiIiCisgICAgY2wgPSByZXR1cm5DbGFzc0ZvclZlcnNpb24odmVyc2lvbikKKyAgICByZXR1cm4gY2woKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvX19pbml0X18ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2MxZDljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvX19pbml0X18ucHkKQEAgLTAsMCArMSw0IEBACitpbXBvcnQgb3MsIHN5cworCitjdXJfcGF0aCA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3IgJy4nCitzeXMucGF0aC5pbnNlcnQoMCwgY3VyX3BhdGggKyAnLzNyZHBhcnR5JykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL19fdmVyc2lvbl9fLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvX192ZXJzaW9uX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1MmE0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL19fdmVyc2lvbl9fLnB5CkBAIC0wLDAgKzEgQEAKK1ZFUlNJT04gPSAiMi4wMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay1ncHQud2tzIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLWdwdC53a3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEwMWNmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay1ncHQud2tzCkBAIC0wLDAgKzEsMTAgQEAKKyMgc2hvcnQtZGVzY3JpcHRpb246IENyZWF0ZSBhICdwY2Jpb3MnIGRpcmVjdCBkaXNrIGltYWdlCisjIGxvbmctZGVzY3JpcHRpb246IENyZWF0ZXMgYSBwYXJ0aXRpb25lZCBsZWdhY3kgQklPUyBkaXNrIGltYWdlIHRoYXQgdGhlIHVzZXIKKyMgY2FuIGRpcmVjdGx5IGRkIHRvIGJvb3QgbWVkaWEuCisKKworcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBjYmlvcyAtLW9uZGlzayBzZGEgLS1sYWJlbCBib290IC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0NCAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNCAtLXVzZS11dWlkCisKK2Jvb3Rsb2FkZXIgIC0tcHRhYmxlIGdwdCAtLXRpbWVvdXQ9MCAgLS1hcHBlbmQ9InJvb3R3YWl0IHJvb3Rmc3R5cGU9ZXh0NCB2aWRlbz12ZXNhZmIgdmdhPTB4MzE4IGNvbnNvbGU9dHR5MCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLW11bHRpLXJvb3Rmcy53a3MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2stbXVsdGktcm9vdGZzLndrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTgxZjhmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLW11bHRpLXJvb3Rmcy53a3MKQEAgLTAsMCArMSwyMyBAQAorIyBzaG9ydC1kZXNjcmlwdGlvbjogQ3JlYXRlIG11bHRpIHJvb3RmcyBpbWFnZSB1c2luZyByb290ZnMgcGx1Z2luCisjIGxvbmctZGVzY3JpcHRpb246IENyZWF0ZXMgYSBwYXJ0aXRpb25lZCBkaXNrIGltYWdlIHdpdGggdHdvIHJvb3RmcyBwYXJ0aXRpb25zCisjIHVzaW5nIHJvb3RmcyBwbHVnaW4uCisjCisjIFBhcnRpdGlvbnMgY2FuIHVzZSBlaXRoZXIKKyMgICAtIGluZGlyZWN0IHJvb3RmcyByZWZlcmVuY2VzIHRvIGltYWdlIHJlY2lwZShzKToKKyMgICAgIHdpYyBjcmVhdGUgZGlyZWN0ZGlzay1tdWx0aS1pbmRpcmVjdC1yZWNpcGVzIC1lIGNvcmUtaW1hZ2UtbWluaW1hbCBcCisjICAgICAgICAgLS1yb290ZnMtZGlyIHJvb3RmczE9Y29yZS1pbWFnZS1taW5pbWFsCisjICAgICAgICAgLS1yb290ZnMtZGlyIHJvb3RmczI9Y29yZS1pbWFnZS1taW5pbWFsLWRldgorIworIyAgIC0gb3IgcGF0aHMgdG8gcm9vdGZzIGRpcmVjdG9yaWVzOgorIyAgICAgd2ljIGNyZWF0ZSBkaXJlY3RkaXNrLW11bHRpLXJvb3RmcyBcCisjICAgICAgICAgLS1yb290ZnMtZGlyIHJvb3RmczE9dG1wL3dvcmsvcWVtdXg4Nl82NC1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC8xLjAtcjAvcm9vdGZzLworIyAgICAgICAgIC0tcm9vdGZzLWRpciByb290ZnMyPXRtcC93b3JrL3FlbXV4ODZfNjQtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwtZGV2LzEuMC1yMC9yb290ZnMvCisjCisjICAgLSBvciBhbnkgY29tYmluYXRpb25zIG9mIC1yIGFuZCAtLXJvb3RmcyBjb21tYW5kIGxpbmUgb3B0aW9ucworCitwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctcGNiaW9zIC0tb25kaXNrIHNkYSAtLWxhYmVsIGJvb3QgLS1hY3RpdmUgLS1hbGlnbiAxMDI0CitwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tcm9vdGZzLWRpcj1yb290ZnMxIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0CitwYXJ0IC9yZXNjdWUgLS1zb3VyY2Ugcm9vdGZzIC0tcm9vdGZzLWRpcj1yb290ZnMyIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgc2Vjb25kYXJ5IC0tYWxpZ24gMTAyNAorCitib290bG9hZGVyICAtLXRpbWVvdXQ9MCAgLS1hcHBlbmQ9InJvb3R3YWl0IHJvb3Rmc3R5cGU9ZXh0NCB2aWRlbz12ZXNhZmIgdmdhPTB4MzE4IGNvbnNvbGU9dHR5MCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLndrcyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay53a3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY0YzllYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay53a3MKQEAgLTAsMCArMSwxMCBAQAorIyBzaG9ydC1kZXNjcmlwdGlvbjogQ3JlYXRlIGEgJ3BjYmlvcycgZGlyZWN0IGRpc2sgaW1hZ2UKKyMgbG9uZy1kZXNjcmlwdGlvbjogQ3JlYXRlcyBhIHBhcnRpdGlvbmVkIGxlZ2FjeSBCSU9TIGRpc2sgaW1hZ2UgdGhhdCB0aGUgdXNlcgorIyBjYW4gZGlyZWN0bHkgZGQgdG8gYm9vdCBtZWRpYS4KKworCitwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctcGNiaW9zIC0tb25kaXNrIHNkYSAtLWxhYmVsIGJvb3QgLS1hY3RpdmUgLS1hbGlnbiAxMDI0CitwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0CisKK2Jvb3Rsb2FkZXIgIC0tdGltZW91dD0wICAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQ0IHZpZGVvPXZlc2FmYiB2Z2E9MHgzMTggY29uc29sZT10dHkwIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL21rZWZpZGlzay53a3MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL21rZWZpZGlzay53a3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk2ZTk0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvbWtlZmlkaXNrLndrcwpAQCAtMCwwICsxLDExIEBACisjIHNob3J0LWRlc2NyaXB0aW9uOiBDcmVhdGUgYW4gRUZJIGRpc2sgaW1hZ2UKKyMgbG9uZy1kZXNjcmlwdGlvbjogQ3JlYXRlcyBhIHBhcnRpdGlvbmVkIEVGSSBkaXNrIGltYWdlIHRoYXQgdGhlIHVzZXIKKyMgY2FuIGRpcmVjdGx5IGRkIHRvIGJvb3QgbWVkaWEuCisKK3BhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1lZmkgLS1zb3VyY2VwYXJhbXM9ImxvYWRlcj1ncnViLWVmaSIgLS1vbmRpc2sgc2RhIC0tbGFiZWwgbXNkb3MgLS1hY3RpdmUgLS1hbGlnbiAxMDI0CisKK3BhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDQgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKKworcGFydCBzd2FwIC0tb25kaXNrIHNkYSAtLXNpemUgNDQgLS1sYWJlbCBzd2FwMSAtLWZzdHlwZT1zd2FwCisKK2Jvb3Rsb2FkZXIgIC0tdGltZW91dD0xMCAgLS1hcHBlbmQ9InJvb3R3YWl0IHJvb3Rmc3R5cGU9ZXh0NCBjb25zb2xlPXR0eVBDSDAsMTE1MjAwIGNvbnNvbGU9dHR5MCB2bWFsbG9jPTI1Nk1CIHNuZC1oZGEtaW50ZWwuZW5hYmxlX21zaT0wIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2d1bW1pZGlzay53a3MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL21rZ3VtbWlkaXNrLndrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmEyMmY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2d1bW1pZGlzay53a3MKQEAgLTAsMCArMSwxMSBAQAorIyBzaG9ydC1kZXNjcmlwdGlvbjogQ3JlYXRlIGFuIEVGSSBkaXNrIGltYWdlCisjIGxvbmctZGVzY3JpcHRpb246IENyZWF0ZXMgYSBwYXJ0aXRpb25lZCBFRkkgZGlzayBpbWFnZSB0aGF0IHRoZSB1c2VyCisjIGNhbiBkaXJlY3RseSBkZCB0byBib290IG1lZGlhLgorCitwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctZWZpIC0tc291cmNlcGFyYW1zPSJsb2FkZXI9Z3VtbWlib290IiAtLW9uZGlzayBzZGEgLS1sYWJlbCBtc2RvcyAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKKworcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0NCAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNAorCitwYXJ0IHN3YXAgLS1vbmRpc2sgc2RhIC0tc2l6ZSA0NCAtLWxhYmVsIHN3YXAxIC0tZnN0eXBlPXN3YXAKKworYm9vdGxvYWRlciAgLS10aW1lb3V0PTEwICAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQ0IGNvbnNvbGU9dHR5UENIMCwxMTUyMDAgY29uc29sZT10dHkwIHZtYWxsb2M9MjU2TUIgc25kLWhkYS1pbnRlbC5lbmFibGVfbXNpPTAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL21raHlicmlkaXNvLndrcyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvbWtoeWJyaWRpc28ud2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMzRlOWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL21raHlicmlkaXNvLndrcwpAQCAtMCwwICsxLDcgQEAKKyMgc2hvcnQtZGVzY3JpcHRpb246IENyZWF0ZSBhIGh5YnJpZCBJU08gaW1hZ2UKKyMgbG9uZy1kZXNjcmlwdGlvbjogQ3JlYXRlcyBhbiBFRkkgYW5kIGxlZ2FjeSBib290YWJsZSBoeWJyaWQgSVNPIGltYWdlCisjIHdoaWNoIGNhbiBiZSB1c2VkIG9uIG9wdGljYWwgbWVkaWEgYXMgd2VsbCBhcyBVU0IgbWVkaWEuCisKK3BhcnQgL2Jvb3QgLS1zb3VyY2UgaXNvaW1hZ2UtaXNvaHlicmlkIC0tc291cmNlcGFyYW1zPSJsb2FkZXI9Z3J1Yi1lZmksaW1hZ2VfbmFtZT1IWUJSSURfSVNPX0lNRyIgLS1vbmRpc2sgY2QgLS1sYWJlbCBIWUJSSURJU08gLS1mc3R5cGU9ZXh0NAorCitib290bG9hZGVyICAtLXRpbWVvdXQ9MTUgIC0tYXBwZW5kPSIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL3FlbXV4ODYtZGlyZWN0ZGlzay53a3MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL3FlbXV4ODYtZGlyZWN0ZGlzay53a3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZjMzhiNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvcWVtdXg4Ni1kaXJlY3RkaXNrLndrcwpAQCAtMCwwICsxLDEwIEBACisjIHNob3J0LWRlc2NyaXB0aW9uOiBDcmVhdGUgYSBxZW11IG1hY2hpbmUgJ3BjYmlvcycgZGlyZWN0IGRpc2sgaW1hZ2UKKyMgbG9uZy1kZXNjcmlwdGlvbjogQ3JlYXRlcyBhIHBhcnRpdGlvbmVkIGxlZ2FjeSBCSU9TIGRpc2sgaW1hZ2UgdGhhdCB0aGUgdXNlcgorIyBjYW4gZGlyZWN0bHkgdXNlIHRvIGJvb3QgYSBxZW11IG1hY2hpbmUuCisKKworcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBjYmlvcyAtLW9uZGlzayBzZGEgLS1sYWJlbCBib290IC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0NCAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNAorCitib290bG9hZGVyICAtLXRpbWVvdXQ9MCAgLS1hcHBlbmQ9InZnYT0wIHV2ZXNhZmIubW9kZV9vcHRpb249NjQweDQ4MC0zMiByb290PS9kZXYvdmRhMiBydyBtZW09MjU2TSBpcD0xOTIuMTY4LjcuMjo6MTkyLjE2OC43LjE6MjU1LjI1NS4yNTUuMCBvcHJvZmlsZS50aW1lcj0xIHJvb3Rmc3R5cGU9ZXh0NCAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3Mvc2RpbWFnZS1ib290cGFydC53a3MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL3NkaW1hZ2UtYm9vdHBhcnQud2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZmQ2MzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL3NkaW1hZ2UtYm9vdHBhcnQud2tzCkBAIC0wLDAgKzEsNiBAQAorIyBzaG9ydC1kZXNjcmlwdGlvbjogQ3JlYXRlIFNEIGNhcmQgaW1hZ2Ugd2l0aCBhIGJvb3QgcGFydGl0aW9uCisjIGxvbmctZGVzY3JpcHRpb246IENyZWF0ZXMgYSBwYXJ0aXRpb25lZCBTRCBjYXJkIGltYWdlLiBCb290IGZpbGVzCisjIGFyZSBsb2NhdGVkIGluIHRoZSBmaXJzdCB2ZmF0IHBhcnRpdGlvbi4KKworcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBhcnRpdGlvbiAtLW9uZGlzayBtbWNibGsgLS1mc3R5cGU9dmZhdCAtLWxhYmVsIGJvb3QgLS1hY3RpdmUgLS1hbGlnbiA0IC0tc2l6ZSAxNgorcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBtbWNibGsgLS1mc3R5cGU9ZXh0NCAtLWxhYmVsIHJvb3QgLS1hbGlnbiA0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jb25mLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY29uZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDQzNjNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY29uZi5weQpAQCAtMCwwICsxLDEwMCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIC10dAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSW50ZWwsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisjIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisKK2ltcG9ydCBvcworCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIKK2Zyb20gd2ljIGltcG9ydCBraWNrc3RhcnQKK2Zyb20gd2ljLnV0aWxzIGltcG9ydCBtaXNjCisKKworZGVmIGdldF9zaXRlY29uZigpOgorICAgIHdpY19wYXRoID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgIGVvcyA9IHdpY19wYXRoLmZpbmQoJ3NjcmlwdHMnKSArIGxlbignc2NyaXB0cycpCisgICAgc2NyaXB0c19wYXRoID0gd2ljX3BhdGhbOmVvc10KKworICAgIHJldHVybiBzY3JpcHRzX3BhdGggKyAiL2xpYi9pbWFnZS9jb25maWcvd2ljLmNvbmYiCisKK2NsYXNzIENvbmZpZ01ncihvYmplY3QpOgorICAgIERFRkFVTFRTID0geworICAgICAgICAnY29tbW9uJzogeworICAgICAgICAgICAgImRpc3Ryb19uYW1lIjogIkRlZmF1bHQgRGlzdHJpYnV0aW9uIiwKKyAgICAgICAgICAgICJwbHVnaW5fZGlyIjogIi91c3IvbGliL3dpYy9wbHVnaW5zIn0sICMgVE9ETyB1c2UgcHJlZml4IGFsc28/CisgICAgICAgICdjcmVhdGUnOiB7CisgICAgICAgICAgICAidG1wZGlyIjogJy92YXIvdG1wL3dpYycsCisgICAgICAgICAgICAib3V0ZGlyIjogJy4vd2ljLW91dHB1dCcsCisgICAgICAgICAgICAicmVsZWFzZSI6IE5vbmUsCisgICAgICAgICAgICAibG9nZmlsZSI6IE5vbmUsCisgICAgICAgICAgICAibmFtZV9wcmVmaXgiOiBOb25lLAorICAgICAgICAgICAgIm5hbWVfc3VmZml4IjogTm9uZX0KKyAgICAgICAgfQorCisgICAgIyBtYWtlIHRoZSBtYW5hZ2VyIGNsYXNzIGFzIHNpbmdsZXRvbgorICAgIF9pbnN0YW5jZSA9IE5vbmUKKyAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCBjbHMuX2luc3RhbmNlOgorICAgICAgICAgICAgY2xzLl9pbnN0YW5jZSA9IHN1cGVyKENvbmZpZ01nciwgY2xzKS5fX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIHJldHVybiBjbHMuX2luc3RhbmNlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwga3Njb25mPU5vbmUsIHNpdGVjb25mPU5vbmUpOgorICAgICAgICAjIHJlc2V0IGNvbmZpZyBvcHRpb25zCisgICAgICAgIHNlbGYucmVzZXQoKQorCisgICAgICAgIGlmIG5vdCBzaXRlY29uZjoKKyAgICAgICAgICAgIHNpdGVjb25mID0gZ2V0X3NpdGVjb25mKCkKKworICAgICAgICAjIGluaXRpYWwgb3B0aW9ucyBmcm9tIHNpdGVjb25mCisgICAgICAgIHNlbGYuX3NpdGVjb25mID0gc2l0ZWNvbmYKKworICAgICAgICBpZiBrc2NvbmY6CisgICAgICAgICAgICBzZWxmLl9rc2NvbmYgPSBrc2NvbmYKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5fX2tzY29uZiA9IE5vbmUKKyAgICAgICAgc2VsZi5fX3NpdGVjb25mID0gTm9uZQorICAgICAgICBzZWxmLmNyZWF0ZSA9IHt9CisKKyAgICAgICAgIyBpbml0aWFsaXplIHRoZSB2YWx1ZXMgd2l0aCBkZWZhdWx0cworICAgICAgICBmb3Igc2VjLCB2YWxzIGluIHNlbGYuREVGQVVMVFMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIHNlYywgdmFscykKKworICAgIGRlZiBfX3NldF9rc2NvbmYoc2VsZiwga3Njb25mKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGtzY29uZik6CisgICAgICAgICAgICBtc2dlci5lcnJvcignQ2Fubm90IGZpbmQga3MgZmlsZTogJXMnICUga3Njb25mKQorCisgICAgICAgIHNlbGYuX19rc2NvbmYgPSBrc2NvbmYKKyAgICAgICAgc2VsZi5fcGFyc2Vfa2lja3N0YXJ0KGtzY29uZikKKyAgICBkZWYgX19nZXRfa3Njb25mKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2tzY29uZgorICAgIF9rc2NvbmYgPSBwcm9wZXJ0eShfX2dldF9rc2NvbmYsIF9fc2V0X2tzY29uZikKKworICAgIGRlZiBfcGFyc2Vfa2lja3N0YXJ0KHNlbGYsIGtzY29uZj1Ob25lKToKKyAgICAgICAgaWYgbm90IGtzY29uZjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGtzb2JqID0ga2lja3N0YXJ0LnJlYWRfa2lja3N0YXJ0KGtzY29uZikKKworICAgICAgICBzZWxmLmNyZWF0ZVsna3MnXSA9IGtzb2JqCisgICAgICAgIHNlbGYuY3JlYXRlWyduYW1lJ10gPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoa3Njb25mKSlbMF0KKworICAgICAgICBzZWxmLmNyZWF0ZVsnbmFtZSddID0gbWlzYy5idWlsZF9uYW1lKGtzY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZVsncmVsZWFzZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlWyduYW1lX3ByZWZpeCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlWyduYW1lX3N1ZmZpeCddKQorCitjb25maWdtZ3IgPSBDb25maWdNZ3IoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY29uZmlnL3dpYy5jb25mIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY29uZmlnL3dpYy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MWJjYjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jb25maWcvd2ljLmNvbmYKQEAgLTAsMCArMSw2IEBACitbY29tbW9uXQorOyBnZW5lcmFsIHNldHRpbmdzCitkaXN0cm9fbmFtZSA9IE9wZW5FbWJlZGRlZAorCitbY3JlYXRlXQorOyBzZXR0aW5ncyBmb3IgY3JlYXRlIHN1YmNvbW1hbmQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2NyZWF0b3IucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jcmVhdG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMzEyOTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jcmVhdG9yLnB5CkBAIC0wLDAgKzEsMTI0IEBACisjIS91c3IvYmluL2VudiBweXRob24gLXR0CisjCisjIENvcHlyaWdodCAoYykgMjAxMSBJbnRlbCwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworaW1wb3J0IG9zLCBzeXMKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlciwgU1VQUFJFU1NfSEVMUAorCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIKK2Zyb20gd2ljLnV0aWxzIGltcG9ydCBlcnJvcnMKK2Zyb20gd2ljLmNvbmYgaW1wb3J0IGNvbmZpZ21ncgorZnJvbSB3aWMucGx1Z2luIGltcG9ydCBwbHVnaW5tZ3IKKworCitjbGFzcyBDcmVhdG9yKG9iamVjdCk6CisgICAgIiIiJHtuYW1lfTogY3JlYXRlIGFuIGltYWdlCisKKyAgICBVc2FnZToKKyAgICAgICAgJHtuYW1lfSBTVUJDT01NQU5EIDxrc2ZpbGU+IFtPUFRTXQorCisgICAgJHtjb21tYW5kX2xpc3R9CisgICAgJHtvcHRpb25fbGlzdH0KKyAgICAiIiIKKworICAgIG5hbWUgPSAnd2ljIGNyZWF0ZShjciknCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5fc3ViY21kcyA9IHt9CisKKyAgICAgICAgIyBnZXQgY21kcyBmcm9tIHBsdWdpbm1ncgorICAgICAgICAjIG1peC1pbiBkb19zdWJjbWQgaW50ZXJmYWNlCisgICAgICAgIGZvciBzdWJjbWQsIGtsYXNzIGluIHBsdWdpbm1nci5nZXRfcGx1Z2lucygnaW1hZ2VyJykuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihrbGFzcywgJ2RvX2NyZWF0ZScpOgorICAgICAgICAgICAgICAgIG1zZ2VyLndhcm5pbmcoIlVuc3VwcG9ydGVkIHN1YmNtZDogJXMiICUgc3ViY21kKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKGtsYXNzLCAnZG9fY3JlYXRlJykKKyAgICAgICAgICAgIHNlbGYuX3N1YmNtZHNbc3ViY21kXSA9IGZ1bmMKKworICAgIGRlZiBnZXRfb3B0cGFyc2VyKHNlbGYpOgorICAgICAgICBvcHRwYXJzZXIgPSBPcHRpb25QYXJzZXIoKQorICAgICAgICBvcHRwYXJzZXIuYWRkX29wdGlvbignLWQnLCAnLS1kZWJ1ZycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J2RlYnVnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD1TVVBQUkVTU19IRUxQKQorICAgICAgICBvcHRwYXJzZXIuYWRkX29wdGlvbignLXYnLCAnLS12ZXJib3NlJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ndmVyYm9zZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9U1VQUFJFU1NfSEVMUCkKKyAgICAgICAgb3B0cGFyc2VyLmFkZF9vcHRpb24oJycsICctLWxvZ2ZpbGUnLCB0eXBlPSdzdHJpbmcnLCBkZXN0PSdsb2dmaWxlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQYXRoIG9mIGxvZ2ZpbGUnKQorICAgICAgICBvcHRwYXJzZXIuYWRkX29wdGlvbignLWMnLCAnLS1jb25maWcnLCB0eXBlPSdzdHJpbmcnLCBkZXN0PSdjb25maWcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NwZWNpZnkgY29uZmlnIGZpbGUgZm9yIHdpYycpCisgICAgICAgIG9wdHBhcnNlci5hZGRfb3B0aW9uKCctbycsICctLW91dGRpcicsIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nc3RvcmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdvdXRkaXInLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J091dHB1dCBkaXJlY3RvcnknKQorICAgICAgICBvcHRwYXJzZXIuYWRkX29wdGlvbignJywgJy0tdG1wZnMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdlbmFibGV0bXBmcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NldHVwIHRtcGRpciBhcyB0bXBmcyB0byBhY2NlbGVyYXRlLCBleHBlcmltZW50YWwnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBmZWF0dXJlLCB1c2UgaXQgaWYgeW91IGhhdmUgbW9yZSB0aGFuIDRHIG1lbW9yeScpCisgICAgICAgIHJldHVybiBvcHRwYXJzZXIKKworICAgIGRlZiBwb3N0b3B0cGFyc2Uoc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIGFic3BhdGggPSBsYW1iZGEgcHRoOiBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5leHBhbmR1c2VyKHB0aCkpCisKKyAgICAgICAgaWYgb3B0aW9ucy52ZXJib3NlOgorICAgICAgICAgICAgbXNnZXIuc2V0X2xvZ2xldmVsKCd2ZXJib3NlJykKKyAgICAgICAgaWYgb3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgICAgIG1zZ2VyLnNldF9sb2dsZXZlbCgnZGVidWcnKQorCisgICAgICAgIGlmIG9wdGlvbnMubG9nZmlsZToKKyAgICAgICAgICAgIGxvZ2ZpbGVfYWJzX3BhdGggPSBhYnNwYXRoKG9wdGlvbnMubG9nZmlsZSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIobG9nZmlsZV9hYnNfcGF0aCk6CisgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3JzLlVzYWdlKCJsb2dmaWxlJ3MgcGF0aCAlcyBzaG91bGQgYmUgZmlsZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBvcHRpb25zLmxvZ2ZpbGUpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5kaXJuYW1lKGxvZ2ZpbGVfYWJzX3BhdGgpKToKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmRpcm5hbWUobG9nZmlsZV9hYnNfcGF0aCkpCisgICAgICAgICAgICBtc2dlci5zZXRfaW50ZXJhY3RpdmUoRmFsc2UpCisgICAgICAgICAgICBtc2dlci5zZXRfbG9nZmlsZShsb2dmaWxlX2Fic19wYXRoKQorICAgICAgICAgICAgY29uZmlnbWdyLmNyZWF0ZVsnbG9nZmlsZSddID0gb3B0aW9ucy5sb2dmaWxlCisKKyAgICAgICAgaWYgb3B0aW9ucy5jb25maWc6CisgICAgICAgICAgICBjb25maWdtZ3IucmVzZXQoKQorICAgICAgICAgICAgY29uZmlnbWdyLl9zaXRlY29uZiA9IG9wdGlvbnMuY29uZmlnCisKKyAgICAgICAgaWYgb3B0aW9ucy5vdXRkaXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjb25maWdtZ3IuY3JlYXRlWydvdXRkaXInXSA9IGFic3BhdGgob3B0aW9ucy5vdXRkaXIpCisKKyAgICAgICAgY2RpciA9ICdvdXRkaXInCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbmZpZ21nci5jcmVhdGVbY2Rpcl0pIFwKKyAgICAgICAgICAgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKGNvbmZpZ21nci5jcmVhdGVbY2Rpcl0pOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoJ0ludmFsaWQgZGlyZWN0b3J5IHNwZWNpZmllZDogJXMnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICUgY29uZmlnbWdyLmNyZWF0ZVtjZGlyXSkKKworICAgICAgICBpZiBvcHRpb25zLmVuYWJsZXRtcGZzOgorICAgICAgICAgICAgY29uZmlnbWdyLmNyZWF0ZVsnZW5hYmxldG1wZnMnXSA9IG9wdGlvbnMuZW5hYmxldG1wZnMKKworICAgIGRlZiBtYWluKHNlbGYsIGFyZ3Y9Tm9uZSk6CisgICAgICAgIGlmIGFyZ3YgaXMgTm9uZToKKyAgICAgICAgICAgIGFyZ3YgPSBzeXMuYXJndgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJndiA9IGFyZ3ZbOl0gIyBkb24ndCBtb2RpZnkgY2FsbGVyJ3MgbGlzdAorCisgICAgICAgIHBuYW1lID0gYXJndlswXQorICAgICAgICBpZiBwbmFtZSBub3QgaW4gc2VsZi5fc3ViY21kczoKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCdVbmtub3duIHBsdWdpbjogJXMnICUgcG5hbWUpCisKKyAgICAgICAgb3B0cGFyc2VyID0gc2VsZi5nZXRfb3B0cGFyc2VyKCkKKyAgICAgICAgb3B0aW9ucywgYXJncyA9IG9wdHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpCisKKyAgICAgICAgc2VsZi5wb3N0b3B0cGFyc2Uob3B0aW9ucykKKworICAgICAgICByZXR1cm4gc2VsZi5fc3ViY21kc1twbmFtZV0ob3B0aW9ucywgKmFyZ3NbMTpdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvZW5naW5lLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvZW5naW5lLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YjkzZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9lbmdpbmUucHkKQEAgLTAsMCArMSwyMjAgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxMywgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorCisjIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIGltYWdlIGNyZWF0aW9uIGVuZ2luZSB1c2VkIGJ5ICd3aWMnIHRvCisjIGNyZWF0ZSBpbWFnZXMuICBUaGUgZW5naW5lIHBhcnNlcyB0aHJvdWdoIHRoZSBPcGVuRW1iZWRkZWQga2lja3N0YXJ0CisjICh3a3MpIGZpbGUgc3BlY2lmaWVkIGFuZCBnZW5lcmF0ZXMgaW1hZ2VzIHRoYXQgY2FuIHRoZW4gYmUgZGlyZWN0bHkKKyMgd3JpdHRlbiBvbnRvIG1lZGlhLgorIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGxpbnV4LmludGVsLmNvbT4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2Zyb20gd2ljIGltcG9ydCBtc2dlciwgY3JlYXRvcgorZnJvbSB3aWMudXRpbHMgaW1wb3J0IG1pc2MKK2Zyb20gd2ljLnBsdWdpbiBpbXBvcnQgcGx1Z2lubWdyCitmcm9tIHdpYy51dGlscy5vZSBpbXBvcnQgbWlzYworCisKK2RlZiB2ZXJpZnlfYnVpbGRfZW52KCk6CisgICAgIiIiCisgICAgVmVyaWZ5IHRoYXQgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUuCisKKyAgICBSZXR1cm5zIFRydWUgaWYgaXQgaXMsIGZhbHNlIG90aGVyd2lzZQorICAgICIiIgorICAgIGlmIG5vdCBvcy5lbnZpcm9uLmdldCgiQlVJTERESVIiKToKKyAgICAgICAgcHJpbnQgIkJVSUxERElSIG5vdCBmb3VuZCwgZXhpdGluZy4gKERpZCB5b3UgZm9yZ2V0IHRvIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudj8pIgorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgcmV0dXJuIFRydWUKKworCitDQU5ORURfSU1BR0VfRElSID0gImxpYi93aWMvY2FubmVkLXdrcyIgIyByZWxhdGl2ZSB0byBzY3JpcHRzCitTQ1JJUFRTX0NBTk5FRF9JTUFHRV9ESVIgPSAic2NyaXB0cy8iICsgQ0FOTkVEX0lNQUdFX0RJUgorCitkZWYgYnVpbGRfY2FubmVkX2ltYWdlX2xpc3QocGF0aCk6CisgICAgbGF5ZXJzX3BhdGggPSBtaXNjLmdldF9iaXRiYWtlX3ZhcigiQkJMQVlFUlMiKQorICAgIGNhbm5lZF93a3NfbGF5ZXJfZGlycyA9IFtdCisKKyAgICBpZiBsYXllcnNfcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgZm9yIGxheWVyX3BhdGggaW4gbGF5ZXJzX3BhdGguc3BsaXQoKToKKyAgICAgICAgICAgIGNwYXRoID0gb3MucGF0aC5qb2luKGxheWVyX3BhdGgsIFNDUklQVFNfQ0FOTkVEX0lNQUdFX0RJUikKKyAgICAgICAgICAgIGNhbm5lZF93a3NfbGF5ZXJfZGlycy5hcHBlbmQoY3BhdGgpCisKKyAgICBjcGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCBDQU5ORURfSU1BR0VfRElSKQorICAgIGNhbm5lZF93a3NfbGF5ZXJfZGlycy5hcHBlbmQoY3BhdGgpCisKKyAgICByZXR1cm4gY2FubmVkX3drc19sYXllcl9kaXJzCisKK2RlZiBmaW5kX2Nhbm5lZF9pbWFnZShzY3JpcHRzX3BhdGgsIHdrc19maWxlKToKKyAgICAiIiIKKyAgICBGaW5kIGEgLndrcyBmaWxlIHdpdGggdGhlIGdpdmVuIG5hbWUgaW4gdGhlIGNhbm5lZCBmaWxlcyBkaXIuCisKKyAgICBSZXR1cm4gRmFsc2UgaWYgbm90IGZvdW5kCisgICAgIiIiCisgICAgbGF5ZXJzX2Nhbm5lZF93a3NfZGlyID0gYnVpbGRfY2FubmVkX2ltYWdlX2xpc3Qoc2NyaXB0c19wYXRoKQorCisgICAgZm9yIGNhbm5lZF93a3NfZGlyIGluIGxheWVyc19jYW5uZWRfd2tzX2RpcjoKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoY2FubmVkX3drc19kaXIpOgorICAgICAgICAgICAgZm9yIGZuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGlmIGZuYW1lLmVuZHN3aXRoKCJ+Iikgb3IgZm5hbWUuZW5kc3dpdGgoIiMiKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBmbmFtZS5lbmRzd2l0aCgiLndrcyIpIGFuZCB3a3NfZmlsZSArICIud2tzIiA9PSBmbmFtZToKKyAgICAgICAgICAgICAgICAgICAgZnVsbHBhdGggPSBvcy5wYXRoLmpvaW4oY2FubmVkX3drc19kaXIsIGZuYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVsbHBhdGgKKyAgICByZXR1cm4gTm9uZQorCisKK2RlZiBsaXN0X2Nhbm5lZF9pbWFnZXMoc2NyaXB0c19wYXRoKToKKyAgICAiIiIKKyAgICBMaXN0IHRoZSAud2tzIGZpbGVzIGluIHRoZSBjYW5uZWQgaW1hZ2UgZGlyLCBtaW51cyB0aGUgZXh0ZW5zaW9uLgorICAgICIiIgorICAgIGxheWVyc19jYW5uZWRfd2tzX2RpciA9IGJ1aWxkX2Nhbm5lZF9pbWFnZV9saXN0KHNjcmlwdHNfcGF0aCkKKworICAgIGZvciBjYW5uZWRfd2tzX2RpciBpbiBsYXllcnNfY2FubmVkX3drc19kaXI6CisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGNhbm5lZF93a3NfZGlyKToKKyAgICAgICAgICAgIGZvciBmbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBmbmFtZS5lbmRzd2l0aCgifiIpIG9yIGZuYW1lLmVuZHN3aXRoKCIjIik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgZm5hbWUuZW5kc3dpdGgoIi53a3MiKToKKyAgICAgICAgICAgICAgICAgICAgZnVsbHBhdGggPSBvcy5wYXRoLmpvaW4oY2FubmVkX3drc19kaXIsIGZuYW1lKQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZnVsbHBhdGgpIGFzIHdrczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHdrczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjID0gIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHggPSBsaW5lLmZpbmQoInNob3J0LWRlc2NyaXB0aW9uOiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaWR4ICE9IC0xOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjID0gbGluZVtpZHggKyBsZW4oInNob3J0LWRlc2NyaXB0aW9uOiIpOl0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSA9IG9zLnBhdGguc3BsaXRleHQoZm5hbWUpWzBdCisgICAgICAgICAgICAgICAgICAgIHByaW50ICIgICVzXHRcdCVzIiAlIChiYXNlbmFtZS5sanVzdCgzMCksIGRlc2MpCisKKworZGVmIGxpc3RfY2FubmVkX2ltYWdlX2hlbHAoc2NyaXB0c19wYXRoLCBmdWxscGF0aCk6CisgICAgIiIiCisgICAgTGlzdCB0aGUgaGVscCBhbmQgcGFyYW1zIGluIHRoZSBzcGVjaWZpZWQgY2FubmVkIGltYWdlLgorICAgICIiIgorICAgIGZvdW5kID0gRmFsc2UKKyAgICB3aXRoIG9wZW4oZnVsbHBhdGgpIGFzIHdrczoKKyAgICAgICAgZm9yIGxpbmUgaW4gd2tzOgorICAgICAgICAgICAgaWYgbm90IGZvdW5kOgorICAgICAgICAgICAgICAgIGlkeCA9IGxpbmUuZmluZCgibG9uZy1kZXNjcmlwdGlvbjoiKQorICAgICAgICAgICAgICAgIGlmIGlkeCAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgbGluZVtpZHggKyBsZW4oImxvbmctZGVzY3JpcHRpb246Iik6XS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3QgbGluZS5zdHJpcCgpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZHggPSBsaW5lLmZpbmQoIiMiKQorICAgICAgICAgICAgaWYgaWR4ICE9IC0xOgorICAgICAgICAgICAgICAgIHByaW50IGxpbmVbaWR4ICsgbGVuKCIjOiIpOl0ucnN0cmlwKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKworCitkZWYgbGlzdF9zb3VyY2VfcGx1Z2lucygpOgorICAgICIiIgorICAgIExpc3QgdGhlIGF2YWlsYWJsZSBzb3VyY2UgcGx1Z2lucyBpLmUuIHBsdWdpbnMgYXZhaWxhYmxlIGZvciAtLXNvdXJjZS4KKyAgICAiIiIKKyAgICBwbHVnaW5zID0gcGx1Z2lubWdyLmdldF9zb3VyY2VfcGx1Z2lucygpCisKKyAgICBmb3IgcGx1Z2luIGluIHBsdWdpbnM6CisgICAgICAgIHByaW50ICIgICVzIiAlIHBsdWdpbgorCisKK2RlZiB3aWNfY3JlYXRlKHdrc19maWxlLCByb290ZnNfZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290LCBzY3JpcHRzX3BhdGgsIGltYWdlX291dHB1dF9kaXIsCisgICAgICAgICAgICAgICBjb21wcmVzc29yLCBkZWJ1Zyk6CisgICAgIiIiQ3JlYXRlIGltYWdlCisKKyAgICB3a3NfZmlsZSAtIHVzZXItZGVmaW5lZCBPRSBraWNrc3RhcnQgZmlsZQorICAgIHJvb3Rmc19kaXIgLSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBidWlsZCdzIC9yb290ZnMgZGlyCisgICAgYm9vdGltZ19kaXIgLSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBidWlsZCdzIGJvb3QgYXJ0aWZhY3RzIGRpcmVjdG9yeQorICAgIGtlcm5lbF9kaXIgLSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBidWlsZCdzIGtlcm5lbCBkaXJlY3RvcnkKKyAgICBuYXRpdmVfc3lzcm9vdCAtIGFic29sdXRlIHBhdGggdG8gdGhlIGJ1aWxkJ3MgbmF0aXZlIHN5c3Jvb3RzIGRpcgorICAgIHNjcmlwdHNfcGF0aCAtIGFic29sdXRlIHBhdGggdG8gL3NjcmlwdHMgZGlyCisgICAgaW1hZ2Vfb3V0cHV0X2RpciAtIGRpcm5hbWUgdG8gY3JlYXRlIGZvciBpbWFnZQorICAgIGNvbXByZXNzb3IgLSBjb21wcmVzc29yIHV0aWxpdHkgdG8gY29tcHJlc3MgdGhlIGltYWdlCisKKyAgICBOb3JtYWxseSwgdGhlIHZhbHVlcyBmb3IgdGhlIGJ1aWxkIGFydGlmYWN0cyB2YWx1ZXMgYXJlIGRldGVybWluZWQKKyAgICBieSAnd2ljIC1lJyBmcm9tIHRoZSBvdXRwdXQgb2YgdGhlICdiaXRiYWtlIC1lJyBjb21tYW5kIGdpdmVuIGFuCisgICAgaW1hZ2UgbmFtZSBlLmcuICdjb3JlLWltYWdlLW1pbmltYWwnIGFuZCBhIGdpdmVuIG1hY2hpbmUgc2V0IGluCisgICAgbG9jYWwuY29uZi4gIElmIHRoYXQncyB0aGUgY2FzZSwgdGhlIHZhcmlhYmxlcyBnZXQgdGhlIGZvbGxvd2luZworICAgIHZhbHVlcyBmcm9tIHRoZSBvdXRwdXQgb2YgJ2JpdGJha2UgLWUnOgorCisgICAgcm9vdGZzX2RpcjogICAgICAgIElNQUdFX1JPT1RGUworICAgIGtlcm5lbF9kaXI6ICAgICAgICBERVBMT1lfRElSX0lNQUdFCisgICAgbmF0aXZlX3N5c3Jvb3Q6ICAgIFNUQUdJTkdfRElSX05BVElWRQorCisgICAgSW4gdGhlIGFib3ZlIGNhc2UsIGJvb3RpbWdfZGlyIHJlbWFpbnMgdW5zZXQgYW5kIHRoZQorICAgIHBsdWdpbi1zcGVjaWZpYyBpbWFnZSBjcmVhdGlvbiBjb2RlIGlzIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIHRoZQorICAgIGJvb3RpbWcgYXJ0aWZhY3RzLgorCisgICAgSW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHZhbHVlcyBhcmUgcGFzc2VkIGluIGV4cGxpY2l0bHkgaS5lICd3aWMgLWUnCisgICAgaXMgbm90IHVzZWQgYnV0IHJhdGhlciB0aGUgaW5kaXZpZHVhbCAnd2ljJyBvcHRpb25zIGFyZSB1c2VkIHRvCisgICAgZXhwbGljaXRseSBzcGVjaWZ5IHRoZXNlIHZhbHVlcy4KKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIG9lX2J1aWxkZGlyID0gb3MuZW52aXJvblsiQlVJTERESVIiXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcHJpbnQgIkJVSUxERElSIG5vdCBmb3VuZCwgZXhpdGluZy4gKERpZCB5b3UgZm9yZ2V0IHRvIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudj8pIgorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgZGVidWc6CisgICAgICAgIG1zZ2VyLnNldF9sb2dsZXZlbCgnZGVidWcnKQorCisgICAgY3JvYmogPSBjcmVhdG9yLkNyZWF0b3IoKQorCisgICAgY3JvYmoubWFpbihbImRpcmVjdCIsIG5hdGl2ZV9zeXNyb290LCBrZXJuZWxfZGlyLCBib290aW1nX2Rpciwgcm9vdGZzX2RpciwKKyAgICAgICAgICAgICAgICB3a3NfZmlsZSwgaW1hZ2Vfb3V0cHV0X2Rpciwgb2VfYnVpbGRkaXIsIGNvbXByZXNzb3Igb3IgIiJdKQorCisgICAgcHJpbnQgIlxuVGhlIGltYWdlKHMpIHdlcmUgY3JlYXRlZCB1c2luZyBPRSBraWNrc3RhcnQgZmlsZTpcbiAgJXMiICUgd2tzX2ZpbGUKKworCitkZWYgd2ljX2xpc3QoYXJncywgc2NyaXB0c19wYXRoKToKKyAgICAiIiIKKyAgICBQcmludCB0aGUgbGlzdCBvZiBpbWFnZXMgb3Igc291cmNlIHBsdWdpbnMuCisgICAgIiIiCisgICAgaWYgbGVuKGFyZ3MpIDwgMToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBhcmdzID09IFsiaW1hZ2VzIl06CisgICAgICAgIGxpc3RfY2FubmVkX2ltYWdlcyhzY3JpcHRzX3BhdGgpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgZWxpZiBhcmdzID09IFsic291cmNlLXBsdWdpbnMiXToKKyAgICAgICAgbGlzdF9zb3VyY2VfcGx1Z2lucygpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgZWxpZiBsZW4oYXJncykgPT0gMiBhbmQgYXJnc1sxXSA9PSAiaGVscCI6CisgICAgICAgIHdrc19maWxlID0gYXJnc1swXQorICAgICAgICBmdWxscGF0aCA9IGZpbmRfY2FubmVkX2ltYWdlKHNjcmlwdHNfcGF0aCwgd2tzX2ZpbGUpCisgICAgICAgIGlmIG5vdCBmdWxscGF0aDoKKyAgICAgICAgICAgIHByaW50ICJObyBpbWFnZSBuYW1lZCAlcyBmb3VuZCwgZXhpdGluZy4gIlwKKyAgICAgICAgICAgICAgICAgICIoVXNlICd3aWMgbGlzdCBpbWFnZXMnIHRvIGxpc3QgYXZhaWxhYmxlIGltYWdlcywgb3IgIlwKKyAgICAgICAgICAgICAgICAgICJzcGVjaWZ5IGEgZnVsbHktcXVhbGlmaWVkIE9FIGtpY2tzdGFydCAoLndrcykgIlwKKyAgICAgICAgICAgICAgICAgICJmaWxlbmFtZSlcbiIgJSB3a3NfZmlsZQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgbGlzdF9jYW5uZWRfaW1hZ2VfaGVscChzY3JpcHRzX3BhdGgsIGZ1bGxwYXRoKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9oZWxwLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaGVscC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTc3OGI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaGVscC5weQpAQCAtMCwwICsxLDc0NyBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgc29tZSBiYXNpYyBoZWxwIGludm9jYXRpb24gZnVuY3Rpb25zIGFsb25nCisjIHdpdGggdGhlIGJ1bGsgb2YgdGhlIGhlbHAgdG9waWMgdGV4dCBmb3IgdGhlIE9FIENvcmUgSW1hZ2UgVG9vbHMuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gbGludXguaW50ZWwuY29tPgorIworCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGxvZ2dpbmcKKworZnJvbSB3aWMucGx1Z2luIGltcG9ydCBwbHVnaW5tZ3IsIFBMVUdJTl9UWVBFUworCitkZWYgc3ViY29tbWFuZF9lcnJvcihhcmdzKToKKyAgICBsb2dnaW5nLmluZm8oImludmFsaWQgc3ViY29tbWFuZCAlcyIgJSBhcmdzWzBdKQorCisKK2RlZiBkaXNwbGF5X2hlbHAoc3ViY29tbWFuZCwgc3ViY29tbWFuZHMpOgorICAgICIiIgorICAgIERpc3BsYXkgaGVscCBmb3Igc3ViY29tbWFuZC4KKyAgICAiIiIKKyAgICBpZiBzdWJjb21tYW5kIG5vdCBpbiBzdWJjb21tYW5kczoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBobHAgPSBzdWJjb21tYW5kcy5nZXQoc3ViY29tbWFuZCwgc3ViY29tbWFuZF9lcnJvcilbMl0KKyAgICBpZiBjYWxsYWJsZShobHApOgorICAgICAgICBobHAgPSBobHAoKQorICAgIHBhZ2VyID0gc3VicHJvY2Vzcy5Qb3BlbignbGVzcycsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSkKKyAgICBwYWdlci5jb21tdW5pY2F0ZShobHApCisKKyAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiB3aWNfaGVscChhcmdzLCB1c2FnZV9zdHIsIHN1YmNvbW1hbmRzKToKKyAgICAiIiIKKyAgICBTdWJjb21tYW5kIGhlbHAgZGlzcGF0Y2hlci4KKyAgICAiIiIKKyAgICBpZiBsZW4oYXJncykgPT0gMSBvciBub3QgZGlzcGxheV9oZWxwKGFyZ3NbMV0sIHN1YmNvbW1hbmRzKToKKyAgICAgICAgcHJpbnQgdXNhZ2Vfc3RyCisKKworZGVmIGdldF93aWNfcGx1Z2luc19oZWxwKCk6CisgICAgIiIiCisgICAgQ29tYmluZSB3aWNfcGx1Z2luc19oZWxwIHdpdGggdGhlIGhlbHAgZm9yIGV2ZXJ5IGtub3duCisgICAgc291cmNlIHBsdWdpbi4KKyAgICAiIiIKKyAgICByZXN1bHQgPSB3aWNfcGx1Z2luc19oZWxwCisgICAgZm9yIHBsdWdpbl90eXBlIGluIFBMVUdJTl9UWVBFUzoKKyAgICAgICAgcmVzdWx0ICs9ICdcblxuJXMgUExVR0lOU1xuXG4nICUgcGx1Z2luX3R5cGUudXBwZXIoKQorICAgICAgICBmb3IgbmFtZSwgcGx1Z2luIGluIHBsdWdpbm1nci5nZXRfcGx1Z2lucyhwbHVnaW5fdHlwZSkuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICByZXN1bHQgKz0gIlxuICVzIHBsdWdpbjpcbiIgJSBuYW1lCisgICAgICAgICAgICBpZiBwbHVnaW4uX19kb2NfXzoKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gcGx1Z2luLl9fZG9jX18KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICJcbiAgICAlcyBpcyBtaXNzaW5nIGRvY3N0cmluZ1xuIiAlIHBsdWdpbgorICAgIHJldHVybiByZXN1bHQKKworCitkZWYgaW52b2tlX3N1YmNvbW1hbmQoYXJncywgcGFyc2VyLCBtYWluX2NvbW1hbmRfdXNhZ2UsIHN1YmNvbW1hbmRzKToKKyAgICAiIiIKKyAgICBEaXNwYXRjaCB0byBzdWJjb21tYW5kIGhhbmRsZXIgYm9ycm93ZWQgZnJvbSBjb21iby1sYXllci4KKyAgICBTaG91bGQgdXNlIGFyZ3BhcnNlLCBidXQgaGFzIHRvIHdvcmsgaW4gMi42LgorICAgICIiIgorICAgIGlmIG5vdCBhcmdzOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJObyBzdWJjb21tYW5kIHNwZWNpZmllZCwgZXhpdGluZyIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgcmV0dXJuIDEKKyAgICBlbGlmIGFyZ3NbMF0gPT0gImhlbHAiOgorICAgICAgICB3aWNfaGVscChhcmdzLCBtYWluX2NvbW1hbmRfdXNhZ2UsIHN1YmNvbW1hbmRzKQorICAgIGVsaWYgYXJnc1swXSBub3QgaW4gc3ViY29tbWFuZHM6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIlVuc3VwcG9ydGVkIHN1YmNvbW1hbmQgJXMsIGV4aXRpbmdcbiIgJSAoYXJnc1swXSkpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgcmV0dXJuIDEKKyAgICBlbHNlOgorICAgICAgICB1c2FnZSA9IHN1YmNvbW1hbmRzLmdldChhcmdzWzBdLCBzdWJjb21tYW5kX2Vycm9yKVsxXQorICAgICAgICBzdWJjb21tYW5kcy5nZXQoYXJnc1swXSwgc3ViY29tbWFuZF9lcnJvcilbMF0oYXJnc1sxOl0sIHVzYWdlKQorCisKKyMjCisjIHdpYyBoZWxwIGFuZCB1c2FnZSBzdHJpbmdzCisjIworCit3aWNfdXNhZ2UgPSAiIiIKKworIENyZWF0ZSBhIGN1c3RvbWl6ZWQgT3BlbkVtYmVkZGVkIGltYWdlCisKKyB1c2FnZTogd2ljIFstLXZlcnNpb25dIHwgWy0taGVscF0gfCBbQ09NTUFORCBbQVJHU11dCisKKyBDdXJyZW50ICd3aWMnIGNvbW1hbmRzIGFyZToKKyAgICBoZWxwICAgICAgICAgICAgICBTaG93IGhlbHAgZm9yIGNvbW1hbmQgb3Igb25lIG9mIHRoZSB0b3BpY3MgKHNlZSBiZWxvdykKKyAgICBjcmVhdGUgICAgICAgICAgICBDcmVhdGUgYSBuZXcgT3BlbkVtYmVkZGVkIGltYWdlCisgICAgbGlzdCAgICAgICAgICAgICAgTGlzdCBhdmFpbGFibGUgY2FubmVkIGltYWdlcyBhbmQgc291cmNlIHBsdWdpbnMKKworIEhlbHAgdG9waWNzOgorICAgIG92ZXJ2aWV3ICAgICAgICAgIHdpYyBvdmVydmlldyAtIEdlbmVyYWwgb3ZlcnZpZXcgb2Ygd2ljCisgICAgcGx1Z2lucyAgICAgICAgICAgd2ljIHBsdWdpbnMgLSBPdmVydmlldyBhbmQgQVBJCisgICAga2lja3N0YXJ0ICAgICAgICAgd2ljIGtpY2tzdGFydCAtIHdpYyBraWNrc3RhcnQgcmVmZXJlbmNlCisiIiIKKword2ljX2hlbHBfdXNhZ2UgPSAiIiIKKworIHVzYWdlOiB3aWMgaGVscCA8c3ViY29tbWFuZD4KKworIFRoaXMgY29tbWFuZCBkaXNwbGF5cyBkZXRhaWxlZCBoZWxwIGZvciB0aGUgc3BlY2lmaWVkIHN1YmNvbW1hbmQuCisiIiIKKword2ljX2NyZWF0ZV91c2FnZSA9ICIiIgorCisgQ3JlYXRlIGEgbmV3IE9wZW5FbWJlZGRlZCBpbWFnZQorCisgdXNhZ2U6IHdpYyBjcmVhdGUgPHdrcyBmaWxlIG9yIGltYWdlIG5hbWU+IFstbyA8RElSTkFNRT4gfCAtLW91dGRpciA8RElSTkFNRT5dCisgICAgICAgICAgICBbLWkgPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLWluZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKyAgICAgICAgICAgIFstZSB8IC0taW1hZ2UtbmFtZV0gWy1zLCAtLXNraXAtYnVpbGQtY2hlY2tdIFstRCwgLS1kZWJ1Z10KKyAgICAgICAgICAgIFstciwgLS1yb290ZnMtZGlyXSBbLWIsIC0tYm9vdGltZy1kaXJdCisgICAgICAgICAgICBbLWssIC0ta2VybmVsLWRpcl0gWy1uLCAtLW5hdGl2ZS1zeXNyb290XSBbLWYsIC0tYnVpbGQtcm9vdGZzXQorCisgVGhpcyBjb21tYW5kIGNyZWF0ZXMgYW4gT3BlbkVtYmVkZGVkIGltYWdlIGJhc2VkIG9uIHRoZSAnT0Uga2lja3N0YXJ0CisgY29tbWFuZHMnIGZvdW5kIGluIHRoZSA8d2tzIGZpbGU+LgorCisgVGhlIC1vIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBwbGFjZSB0aGUgaW1hZ2UgaW4gYSBkaXJlY3Rvcnkgd2l0aCBhCisgZGlmZmVyZW50IG5hbWUgYW5kIGxvY2F0aW9uLgorCisgU2VlICd3aWMgaGVscCBjcmVhdGUnIGZvciBtb3JlIGRldGFpbGVkIGluc3RydWN0aW9ucy4KKyIiIgorCit3aWNfY3JlYXRlX2hlbHAgPSAiIiIKKworTkFNRQorICAgIHdpYyBjcmVhdGUgLSBDcmVhdGUgYSBuZXcgT3BlbkVtYmVkZGVkIGltYWdlCisKK1NZTk9QU0lTCisgICAgd2ljIGNyZWF0ZSA8d2tzIGZpbGUgb3IgaW1hZ2UgbmFtZT4gWy1vIDxESVJOQU1FPiB8IC0tb3V0ZGlyIDxESVJOQU1FPl0KKyAgICAgICAgWy1lIHwgLS1pbWFnZS1uYW1lXSBbLXMsIC0tc2tpcC1idWlsZC1jaGVja10gWy1ELCAtLWRlYnVnXQorICAgICAgICBbLXIsIC0tcm9vdGZzLWRpcl0gWy1iLCAtLWJvb3RpbWctZGlyXQorICAgICAgICBbLWssIC0ta2VybmVsLWRpcl0gWy1uLCAtLW5hdGl2ZS1zeXNyb290XSBbLWYsIC0tYnVpbGQtcm9vdGZzXQorICAgICAgICBbLWMsIC0tY29tcHJlc3Mtd2l0aF0KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgY3JlYXRlcyBhbiBPcGVuRW1iZWRkZWQgaW1hZ2UgYmFzZWQgb24gdGhlICdPRQorICAgIGtpY2tzdGFydCBjb21tYW5kcycgZm91bmQgaW4gdGhlIDx3a3MgZmlsZT4uCisKKyAgICBJbiBvcmRlciB0byBkbyB0aGlzLCB3aWMgbmVlZHMgdG8ga25vdyB0aGUgbG9jYXRpb25zIG9mIHRoZQorICAgIHZhcmlvdXMgYnVpbGQgYXJ0aWZhY3RzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBpbWFnZS4KKworICAgIFVzZXJzIGNhbiBleHBsaWNpdGx5IHNwZWNpZnkgdGhlIGJ1aWxkIGFydGlmYWN0IGxvY2F0aW9ucyB1c2luZworICAgIHRoZSAtciwgLWIsIC1rLCBhbmQgLW4gb3B0aW9ucy4gIFNlZSBiZWxvdyBmb3IgZGV0YWlscyBvbiB3aGVyZQorICAgIHRoZSBjb3JyZXNwb25kaW5nIGFydGlmYWN0cyBhcmUgdHlwaWNhbGx5IGZvdW5kIGluIGEgbm9ybWFsCisgICAgT3BlbkVtYmVkZGVkIGJ1aWxkLgorCisgICAgQWx0ZXJuYXRpdmVseSwgdXNlcnMgY2FuIHVzZSB0aGUgLWUgb3B0aW9uIHRvIGhhdmUgJ3dpYycgZGV0ZXJtaW5lCisgICAgdGhvc2UgbG9jYXRpb25zIGZvciBhIGdpdmVuIGltYWdlLiAgSWYgdGhlIC1lIG9wdGlvbiBpcyB1c2VkLCB0aGUKKyAgICB1c2VyIG5lZWRzIHRvIGhhdmUgc2V0IHRoZSBhcHByb3ByaWF0ZSBNQUNISU5FIHZhcmlhYmxlIGluCisgICAgbG9jYWwuY29uZiwgYW5kIGhhdmUgc291cmNlZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQuCisKKyAgICBUaGUgLWUgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgaW1hZ2UgdG8gdXNlIHRoZQorICAgIGFydGlmYWN0cyBmcm9tIGUuZy4gY29yZS1pbWFnZS1zYXRvLgorCisgICAgVGhlIC1yIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIHBhdGggdG8gdGhlIC9yb290ZnMgZGlyIHRvCisgICAgdXNlIGFzIHRoZSAud2tzIHJvb3RmcyBzb3VyY2UuCisKKyAgICBUaGUgLWIgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGF0aCB0byB0aGUgZGlyIGNvbnRhaW5pbmcKKyAgICB0aGUgYm9vdCBhcnRpZmFjdHMgKGUuZy4gL0VGSSBvciAvc3lzbGludXggZGlycykgdG8gdXNlIGFzIHRoZQorICAgIC53a3MgYm9vdGltZyBzb3VyY2UuCisKKyAgICBUaGUgLWsgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGF0aCB0byB0aGUgZGlyIGNvbnRhaW5pbmcKKyAgICB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGUgLndrcyBib290aW1nLgorCisgICAgVGhlIC1uIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIHBhdGggdG8gdGhlIG5hdGl2ZSBzeXNyb290CisgICAgY29udGFpbmluZyB0aGUgdG9vbHMgdG8gdXNlIHRvIGJ1aWxkIHRoZSBpbWFnZS4KKworICAgIFRoZSAtZiBvcHRpb24gaXMgdXNlZCB0byBidWlsZCByb290ZnMgYnkgcnVubmluZyAiYml0YmFrZSA8aW1hZ2U+IgorCisgICAgVGhlIC1zIG9wdGlvbiBpcyB1c2VkIHRvIHNraXAgdGhlIGJ1aWxkIGNoZWNrLiAgVGhlIGJ1aWxkIGNoZWNrIGlzCisgICAgYSBzaW1wbGUgc2FuaXR5IGNoZWNrIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHVzZXIgaGFzCisgICAgc291cmNlZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc28gdGhhdCB0aGUgLWUgb3B0aW9uIGNhbiBvcGVyYXRlCisgICAgY29ycmVjdGx5LiAgSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCB0aGUgYnVpbGQgYXJ0aWZhY3QgbG9jYXRpb25zCisgICAgZXhwbGljaXRseSwgJ3dpYycgYXNzdW1lcyB0aGUgdXNlciBrbm93cyB3aGF0IGhlIG9yIHNoZSBpcyBkb2luZworICAgIGFuZCBza2lwcyB0aGUgYnVpbGQgY2hlY2suCisKKyAgICBUaGUgLUQgb3B0aW9uIGlzIHVzZWQgdG8gZGlzcGxheSBkZWJ1ZyBpbmZvcm1hdGlvbiBkZXRhaWxpbmcKKyAgICBleGFjdGx5IHdoYXQgaGFwcGVucyBiZWhpbmQgdGhlIHNjZW5lcyB3aGVuIGEgY3JlYXRlIHJlcXVlc3QgaXMKKyAgICBmdWxmaWxsZWQgKG9yIG5vdCwgYXMgdGhlIGNhc2UgbWF5IGJlKS4gIEl0IGVudW1lcmF0ZXMgYW5kCisgICAgZGlzcGxheXMgdGhlIGNvbW1hbmQgc2VxdWVuY2UgdXNlZCwgYW5kIHNob3VsZCBiZSBpbmNsdWRlZCBpbiBhbnkKKyAgICBidWcgcmVwb3J0IGRlc2NyaWJpbmcgdW5leHBlY3RlZCByZXN1bHRzLgorCisgICAgV2hlbiAnd2ljIC1lJyBpcyB1c2VkLCB0aGUgbG9jYXRpb25zIGZvciB0aGUgYnVpbGQgYXJ0aWZhY3RzCisgICAgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5ICd3aWMgLWUnIGZyb20gdGhlIG91dHB1dCBvZiB0aGUgJ2JpdGJha2UKKyAgICAtZScgY29tbWFuZCBnaXZlbiBhbiBpbWFnZSBuYW1lIGUuZy4gJ2NvcmUtaW1hZ2UtbWluaW1hbCcgYW5kIGEKKyAgICBnaXZlbiBtYWNoaW5lIHNldCBpbiBsb2NhbC5jb25mLiAgSW4gdGhhdCBjYXNlLCB0aGUgaW1hZ2UgaXMKKyAgICBjcmVhdGVkIGFzIGlmIHRoZSBmb2xsb3dpbmcgJ2JpdGJha2UgLWUnIHZhcmlhYmxlcyB3ZXJlIHVzZWQ6CisKKyAgICAtcjogICAgICAgIElNQUdFX1JPT1RGUworICAgIC1rOiAgICAgICAgU1RBR0lOR19LRVJORUxfRElSCisgICAgLW46ICAgICAgICBTVEFHSU5HX0RJUl9OQVRJVkUKKyAgICAtYjogICAgICAgIGVtcHR5IChwbHVnaW4tc3BlY2lmaWMgaGFuZGxlcnMgbXVzdCBkZXRlcm1pbmUgdGhpcykKKworICAgIElmICd3aWMgLWUnIGlzIG5vdCB1c2VkLCB0aGUgdXNlciBuZWVkcyB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlCisgICAgdmFsdWUgZm9yIC1iIChhcyB3ZWxsIGFzIC1yLCAtaywgYW5kIC1uKS4KKworICAgIFRoZSAtbyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcGxhY2UgdGhlIGltYWdlIGluIGEgZGlyZWN0b3J5IHdpdGggYQorICAgIGRpZmZlcmVudCBuYW1lIGFuZCBsb2NhdGlvbi4KKworICAgIFRoZSAtYyBvcHRpb24gaXMgdXNlZCB0byBzcGVjaWZ5IGNvbXByZXNzb3IgdXRpbGl0eSB0byBjb21wcmVzcworICAgIGFuIGltYWdlLiBnemlwLCBiemlwMiBhbmQgeHogY29tcHJlc3NvcnMgYXJlIHN1cHBvcnRlZC4KKyIiIgorCit3aWNfbGlzdF91c2FnZSA9ICIiIgorCisgTGlzdCBhdmFpbGFibGUgT3BlbkVtYmVkZGVkIGltYWdlcyBhbmQgc291cmNlIHBsdWdpbnMKKworIHVzYWdlOiB3aWMgbGlzdCBpbWFnZXMKKyAgICAgICAgd2ljIGxpc3QgPGltYWdlPiBoZWxwCisgICAgICAgIHdpYyBsaXN0IHNvdXJjZS1wbHVnaW5zCisKKyBUaGlzIGNvbW1hbmQgZW51bWVyYXRlcyB0aGUgc2V0IG9mIGF2YWlsYWJsZSBjYW5uZWQgaW1hZ2VzIGFzIHdlbGwgYXMKKyBoZWxwIGZvciB0aG9zZSBpbWFnZXMuICBJdCBhbHNvIGNhbiBiZSB1c2VkIHRvIGxpc3Qgb2YgYXZhaWxhYmxlIHNvdXJjZQorIHBsdWdpbnMuCisKKyBUaGUgZmlyc3QgZm9ybSBlbnVtZXJhdGVzIGFsbCB0aGUgYXZhaWxhYmxlICdjYW5uZWQnIGltYWdlcy4KKworIFRoZSBzZWNvbmQgZm9ybSBsaXN0cyB0aGUgZGV0YWlsZWQgaGVscCBpbmZvcm1hdGlvbiBmb3IgYSBzcGVjaWZpYworICdjYW5uZWQnIGltYWdlLgorCisgVGhlIHRoaXJkIGZvcm0gZW51bWVyYXRlcyBhbGwgdGhlIGF2YWlsYWJsZSAtLXNvdXJjZXMgKHNvdXJjZQorIHBsdWdpbnMpLgorCisgU2VlICd3aWMgaGVscCBsaXN0JyBmb3IgbW9yZSBkZXRhaWxzLgorIiIiCisKK3dpY19saXN0X2hlbHAgPSAiIiIKKworTkFNRQorICAgIHdpYyBsaXN0IC0gTGlzdCBhdmFpbGFibGUgT3BlbkVtYmVkZGVkIGltYWdlcyBhbmQgc291cmNlIHBsdWdpbnMKKworU1lOT1BTSVMKKyAgICB3aWMgbGlzdCBpbWFnZXMKKyAgICB3aWMgbGlzdCA8aW1hZ2U+IGhlbHAKKyAgICB3aWMgbGlzdCBzb3VyY2UtcGx1Z2lucworCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBlbnVtZXJhdGVzIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGNhbm5lZCBpbWFnZXMgYXMgd2VsbAorICAgIGFzIGhlbHAgZm9yIHRob3NlIGltYWdlcy4gIEl0IGFsc28gY2FuIGJlIHVzZWQgdG8gbGlzdCBhdmFpbGFibGUKKyAgICBzb3VyY2UgcGx1Z2lucy4KKworICAgIFRoZSBmaXJzdCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBhdmFpbGFibGUgJ2Nhbm5lZCcgaW1hZ2VzLgorICAgIFRoZXNlIGFyZSBhY3R1YWxseSBqdXN0IHRoZSBzZXQgb2YgLndrcyBmaWxlcyB0aGF0IGhhdmUgYmVlbiBtb3ZlZAorICAgIGludG8gdGhlIC9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcyBkaXJlY3RvcnkpLgorCisgICAgVGhlIHNlY29uZCBmb3JtIGxpc3RzIHRoZSBkZXRhaWxlZCBoZWxwIGluZm9ybWF0aW9uIGZvciBhIHNwZWNpZmljCisgICAgJ2Nhbm5lZCcgaW1hZ2UuCisKKyAgICBUaGUgdGhpcmQgZm9ybSBlbnVtZXJhdGVzIGFsbCB0aGUgYXZhaWxhYmxlIC0tc291cmNlcyAoc291cmNlCisgICAgcGx1Z2lucykuICBUaGUgY29udGVudHMgb2YgYSBnaXZlbiBwYXJ0aXRpb24gYXJlIGRyaXZlbiBieSBjb2RlCisgICAgZGVmaW5lZCBpbiAnc291cmNlIHBsdWdpbnMnLiAgVXNlcnMgc3BlY2lmeSBhIHNwZWNpZmljIHBsdWdpbiB2aWEKKyAgICB0aGUgLS1zb3VyY2UgcGFyYW1ldGVyIG9mIHRoZSBwYXJ0aXRpb24gLndrcyBjb21tYW5kLiAgTm9ybWFsbHkKKyAgICB0aGlzIGlzIHRoZSAncm9vdGZzJyBwbHVnaW4gYnV0IGNhbiBiZSBhbnkgb2YgdGhlIG1vcmUgc3BlY2lhbGl6ZWQKKyAgICBzb3VyY2VzIGxpc3RlZCBieSB0aGUgJ2xpc3Qgc291cmNlLXBsdWdpbnMnIGNvbW1hbmQuICBVc2VycyBjYW4KKyAgICBhbHNvIGFkZCB0aGVpciBvd24gc291cmNlIHBsdWdpbnMgLSBzZWUgJ3dpYyBoZWxwIHBsdWdpbnMnIGZvcgorICAgIGRldGFpbHMuCisiIiIKKword2ljX3BsdWdpbnNfaGVscCA9ICIiIgorCitOQU1FCisgICAgd2ljIHBsdWdpbnMgLSBPdmVydmlldyBhbmQgQVBJCisKK0RFU0NSSVBUSU9OCisgICAgcGx1Z2lucyBhbGxvdyB3aWMgZnVuY3Rpb25hbGl0eSB0byBiZSBleHRlbmRlZCBhbmQgc3BlY2lhbGl6ZWQgYnkKKyAgICB1c2Vycy4gIFRoaXMgc2VjdGlvbiBkb2N1bWVudHMgdGhlIHBsdWdpbiBpbnRlcmZhY2UsIHdoaWNoIGlzCisgICAgY3VycmVudGx5IHJlc3RyaWN0ZWQgdG8gJ3NvdXJjZScgcGx1Z2lucy4KKworICAgICdTb3VyY2UnIHBsdWdpbnMgcHJvdmlkZSBhIG1lY2hhbmlzbSB0byBjdXN0b21pemUgdmFyaW91cyBhc3BlY3RzCisgICAgb2YgdGhlIGltYWdlIGdlbmVyYXRpb24gcHJvY2VzcyBpbiB3aWMsIG1haW5seSB0aGUgY29udGVudHMgb2YKKyAgICBwYXJ0aXRpb25zLgorCisgICAgU291cmNlIHBsdWdpbnMgcHJvdmlkZSBhIG1lY2hhbmlzbSBmb3IgbWFwcGluZyB2YWx1ZXMgc3BlY2lmaWVkIGluCisgICAgLndrcyBmaWxlcyB1c2luZyB0aGUgLS1zb3VyY2Uga2V5d29yZCB0byBhIHBhcnRpY3VsYXIgcGx1Z2luCisgICAgaW1wbGVtZW50YXRpb24gdGhhdCBwb3B1bGF0ZXMgYSBjb3JyZXNwb25kaW5nIHBhcnRpdGlvbi4KKworICAgIEEgc291cmNlIHBsdWdpbiBpcyBjcmVhdGVkIGFzIGEgc3ViY2xhc3Mgb2YgU291cmNlUGx1Z2luIChzZWUKKyAgICBzY3JpcHRzL2xpYi93aWMvcGx1Z2luYmFzZS5weSkgYW5kIHRoZSBwbHVnaW4gZmlsZSBjb250YWluaW5nIGl0CisgICAgaXMgYWRkZWQgdG8gc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlLyB0byBtYWtlIHRoZSBwbHVnaW4KKyAgICBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gdGhlIHdpYyBpbXBsZW1lbnRhdGlvbi4KKworICAgIFNvdXJjZSBwbHVnaW5zIGNhbiBhbHNvIGJlIGltcGxlbWVudGVkIGFuZCBhZGRlZCBieSBleHRlcm5hbAorICAgIGxheWVycyAtIGFueSBwbHVnaW5zIGZvdW5kIGluIGEgc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlLworICAgIGRpcmVjdG9yeSBpbiBhbiBleHRlcm5hbCBsYXllciB3aWxsIGFsc28gYmUgbWFkZSBhdmFpbGFibGUuCisKKyAgICBXaGVuIHRoZSB3aWMgaW1wbGVtZW50YXRpb24gbmVlZHMgdG8gaW52b2tlIGEgcGFydGl0aW9uLXNwZWNpZmljCisgICAgaW1wbGVtZW50YXRpb24sIGl0IGxvb2tzIGZvciB0aGUgcGx1Z2luIHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUgYXMKKyAgICB0aGUgLS1zb3VyY2UgcGFyYW0gZ2l2ZW4gdG8gdGhhdCBwYXJ0aXRpb24uICBGb3IgZXhhbXBsZSwgaWYgdGhlCisgICAgcGFydGl0aW9uIGlzIHNldCB1cCBsaWtlIHRoaXM6CisKKyAgICAgIHBhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1wY2Jpb3MgICAuLi4KKworICAgIHRoZW4gdGhlIG1ldGhvZHMgZGVmaW5lZCBhcyBjbGFzcyBtZW1iZXJzIG9mIHRoZSBwbHVnaW4gaGF2aW5nIHRoZQorICAgIG1hdGNoaW5nIGJvb3RpbWctcGNiaW9zIC5uYW1lIGNsYXNzIG1lbWJlciB3b3VsZCBiZSB1c2VkLgorCisgICAgVG8gYmUgbW9yZSBjb25jcmV0ZSwgaGVyZSdzIHRoZSBwbHVnaW4gZGVmaW5pdGlvbiB0aGF0IHdvdWxkIG1hdGNoCisgICAgYSAnLS1zb3VyY2UgYm9vdGltZy1wY2Jpb3MnIHVzYWdlLCBhbG9uZyB3aXRoIGFuIGV4YW1wbGUgbWV0aG9kCisgICAgdGhhdCB3b3VsZCBiZSBjYWxsZWQgYnkgdGhlIHdpYyBpbXBsZW1lbnRhdGlvbiB3aGVuIGl0IG5lZWRlZCB0bworICAgIGludm9rZSBhbiBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBwYXJ0aXRpb24tcHJlcGFyYXRpb24gZnVuY3Rpb246CisKKyAgICBjbGFzcyBCb290aW1nUGNiaW9zUGx1Z2luKFNvdXJjZVBsdWdpbik6CisgICAgICAgIG5hbWUgPSAnYm9vdGltZy1wY2Jpb3MnCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIGRvX3ByZXBhcmVfcGFydGl0aW9uKHNlbGYsIHBhcnQsIC4uLikKKworICAgIElmIHRoZSBzdWJjbGFzcyBpdHNlbGYgZG9lc24ndCBpbXBsZW1lbnQgYSBmdW5jdGlvbiwgYSAnZGVmYXVsdCcKKyAgICB2ZXJzaW9uIGluIGEgc3VwZXJjbGFzcyB3aWxsIGJlIGxvY2F0ZWQgYW5kIHVzZWQsIHdoaWNoIGlzIHdoeSBhbGwKKyAgICBwbHVnaW5zIG11c3QgYmUgZGVyaXZlZCBmcm9tIFNvdXJjZVBsdWdpbi4KKworICAgIFRoZSBTb3VyY2VQbHVnaW4gY2xhc3MgZGVmaW5lcyB0aGUgZm9sbG93aW5nIG1ldGhvZHMsIHdoaWNoIGlzIHRoZQorICAgIGN1cnJlbnQgc2V0IG9mIG1ldGhvZHMgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQvb3ZlcnJpZGRlbiBieQorICAgIC0tc291cmNlIHBsdWdpbnMuICBBbnkgbWV0aG9kcyBub3QgaW1wbGVtZW50ZWQgYnkgYSBTb3VyY2VQbHVnaW4KKyAgICBzdWJjbGFzcyBpbmhlcml0IHRoZSBpbXBsZW1lbnRhdGlvbnMgcHJlc2VudCBpbiB0aGUgU291cmNlUGx1Z2luCisgICAgY2xhc3MgKHNlZSB0aGUgU291cmNlUGx1Z2luIHNvdXJjZSBmb3IgZGV0YWlscyk6CisKKyAgICAgIGRvX3ByZXBhcmVfcGFydGl0aW9uKCkKKyAgICAgICAgICBDYWxsZWQgdG8gZG8gdGhlIGFjdHVhbCBjb250ZW50IHBvcHVsYXRpb24gZm9yIGEKKyAgICAgICAgICBwYXJ0aXRpb24uIEluIG90aGVyIHdvcmRzLCBpdCAncHJlcGFyZXMnIHRoZSBmaW5hbCBwYXJ0aXRpb24KKyAgICAgICAgICBpbWFnZSB3aGljaCB3aWxsIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBkaXNrIGltYWdlLgorCisgICAgICBkb19jb25maWd1cmVfcGFydGl0aW9uKCkKKyAgICAgICAgICBDYWxsZWQgYmVmb3JlIGRvX3ByZXBhcmVfcGFydGl0aW9uKCksIHR5cGljYWxseSB1c2VkIHRvCisgICAgICAgICAgY3JlYXRlIGN1c3RvbSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBhIHBhcnRpdGlvbiwgZm9yCisgICAgICAgICAgZXhhbXBsZSBzeXNsaW51eCBvciBncnViIGNvbmZpZyBmaWxlcy4KKworICAgICAgZG9faW5zdGFsbF9kaXNrKCkKKyAgICAgICAgICBDYWxsZWQgYWZ0ZXIgYWxsIHBhcnRpdGlvbnMgaGF2ZSBiZWVuIHByZXBhcmVkIGFuZCBhc3NlbWJsZWQKKyAgICAgICAgICBpbnRvIGEgZGlzayBpbWFnZS4gIFRoaXMgcHJvdmlkZXMgYSBob29rIHRvIGFsbG93CisgICAgICAgICAgZmluYWxpemF0aW9uIG9mIGEgZGlzayBpbWFnZSwgZm9yIGV4YW1wbGUgdG8gd3JpdGUgYW4gTUJSIHRvCisgICAgICAgICAgaXQuCisKKyAgICAgIGRvX3N0YWdlX3BhcnRpdGlvbigpCisgICAgICAgICAgU3BlY2lhbCBjb250ZW50LXN0YWdpbmcgaG9vayBjYWxsZWQgYmVmb3JlCisgICAgICAgICAgZG9fcHJlcGFyZV9wYXJ0aXRpb24oKSwgbm9ybWFsbHkgZW1wdHkuCisKKyAgICAgICAgICBUeXBpY2FsbHksIGEgcGFydGl0aW9uIHdpbGwganVzdCB1c2UgdGhlIHBhc3NlZC1pbgorICAgICAgICAgIHBhcmFtZXRlcnMsIGZvciBleGFtcGxlIHRoZSB1bm1vZGlmaWVkIHZhbHVlIG9mIGJvb3RpbWdfZGlyLgorICAgICAgICAgIEluIHNvbWUgY2FzZXMgaG93ZXZlciwgdGhpbmdzIG1heSBuZWVkIHRvIGJlIG1vcmUgdGFpbG9yZWQuCisgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgY2VydGFpbiBmaWxlcyBtYXkgYWRkaXRpb25hbGx5IG5lZWQgdG8gYmUKKyAgICAgICAgICB0YWtlIGZyb20gYm9vdGltZ19kaXIgKyAvYm9vdC4gIFRoaXMgaG9vayBhbGxvd3MgdGhvc2UgZmlsZXMKKyAgICAgICAgICB0byBiZSBzdGFnZWQgaW4gYSBjdXN0b21pemVkIGZhc2hpb24uICBOb3RlIHRoYXQKKyAgICAgICAgICBnZXRfYml0YmFrZV92YXIoKSBhbGxvd3MgeW91IHRvIGFjY2VzcyBub24tc3RhbmRhcmQKKyAgICAgICAgICB2YXJpYWJsZXMgdGhhdCB5b3UgbWlnaHQgd2FudCB0byB1c2UgZm9yIHRoZXNlIHR5cGVzIG9mCisgICAgICAgICAgc2l0dWF0aW9ucy4KKworICAgIFRoaXMgc2NoZW1lIGlzIGV4dGVuc2libGUgLSBhZGRpbmcgbW9yZSBob29rcyBpcyBhIHNpbXBsZSBtYXR0ZXIKKyAgICBvZiBhZGRpbmcgbW9yZSBwbHVnaW4gbWV0aG9kcyB0byBTb3VyY2VQbHVnaW4gYW5kIGRlcml2ZWQgY2xhc3Nlcy4KKyAgICBUaGUgY29kZSB0aGF0IHRoZW4gbmVlZHMgdG8gY2FsbCB0aGUgcGx1Z2luIG1ldGhvZHMgdXNlcworICAgIHBsdWdpbi5nZXRfc291cmNlX3BsdWdpbl9tZXRob2RzKCkgdG8gZmluZCB0aGUgbWV0aG9kKHMpIG5lZWRlZCBieQorICAgIHRoZSBjYWxsOyB0aGlzIGlzIGRvbmUgYnkgZmlsbGluZyB1cCBhIGRpY3Qgd2l0aCBrZXlzIGNvbnRhaW5pbmcKKyAgICB0aGUgbWV0aG9kIG5hbWVzIG9mIGludGVyZXN0IC0gb24gc3VjY2VzcywgdGhlc2Ugd2lsbCBiZSBmaWxsZWQgaW4KKyAgICB3aXRoIHRoZSBhY3R1YWwgbWV0aG9kcy4gUGxlYXNlIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gZm9yCisgICAgZXhhbXBsZXMgYW5kIGRldGFpbHMuCisiIiIKKword2ljX292ZXJ2aWV3X2hlbHAgPSAiIiIKKworTkFNRQorICAgIHdpYyBvdmVydmlldyAtIEdlbmVyYWwgb3ZlcnZpZXcgb2Ygd2ljCisKK0RFU0NSSVBUSU9OCisgICAgVGhlICd3aWMnIGNvbW1hbmQgZ2VuZXJhdGVzIHBhcnRpdGlvbmVkIGltYWdlcyBmcm9tIGV4aXN0aW5nCisgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIGFydGlmYWN0cy4gIEltYWdlIGdlbmVyYXRpb24gaXMgZHJpdmVuIGJ5CisgICAgcGFydGl0aW9uaW5nIGNvbW1hbmRzIGNvbnRhaW5lZCBpbiBhbiAnT3BlbmVtYmVkZGVkIGtpY2tzdGFydCcKKyAgICAoLndrcykgZmlsZSAoc2VlICd3aWMgaGVscCBraWNrc3RhcnQnKSBzcGVjaWZpZWQgZWl0aGVyIGRpcmVjdGx5CisgICAgb24gdGhlIGNvbW1hbmQtbGluZSBvciBhcyBvbmUgb2YgYSBzZWxlY3Rpb24gb2YgY2FubmVkIC53a3MgZmlsZXMKKyAgICAoc2VlICd3aWMgbGlzdCBpbWFnZXMnKS4gIFdoZW4gYXBwbGllZCB0byBhIGdpdmVuIHNldCBvZiBidWlsZAorICAgIGFydGlmYWN0cywgdGhlIHJlc3VsdCBpcyBhbiBpbWFnZSBvciBzZXQgb2YgaW1hZ2VzIHRoYXQgY2FuIGJlCisgICAgZGlyZWN0bHkgd3JpdHRlbiBvbnRvIG1lZGlhIGFuZCB1c2VkIG9uIGEgcGFydGljdWxhciBzeXN0ZW0uCisKKyAgICBUaGUgJ3dpYycgY29tbWFuZCBhbmQgdGhlIGluZnJhc3RydWN0dXJlIGl0J3MgYmFzZWQgb24gaXMgYnkKKyAgICBkZWZpbml0aW9uIGluY29tcGxldGUgLSBpdHMgcHVycG9zZSBpcyB0byBhbGxvdyB0aGUgZ2VuZXJhdGlvbiBvZgorICAgIGN1c3RvbWl6ZWQgaW1hZ2VzLCBhbmQgYXMgc3VjaCB3YXMgZGVzaWduZWQgdG8gYmUgY29tcGxldGVseQorICAgIGV4dGVuc2libGUgdmlhIGEgcGx1Z2luIGludGVyZmFjZSAoc2VlICd3aWMgaGVscCBwbHVnaW5zJykuCisKKyAgQmFja2dyb3VuZCBhbmQgTW90aXZhdGlvbgorCisgICAgd2ljIGlzIG1lYW50IHRvIGJlIGEgY29tcGxldGVseSBpbmRlcGVuZGVudCBzdGFuZGFsb25lIHV0aWxpdHkKKyAgICB0aGF0IGluaXRpYWxseSBwcm92aWRlcyBlYXNpZXItdG8tdXNlIGFuZCBtb3JlIGZsZXhpYmxlCisgICAgcmVwbGFjZW1lbnRzIGZvciBhIGNvdXBsZSBiaXRzIG9mIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkgaW4KKyAgICBvZS1jb3JlOiBkaXJlY3RkaXNrLmJiY2xhc3MgYW5kIG1rZWZpZGlzay5zaC4gIFRoZSBkaWZmZXJlbmNlCisgICAgYmV0d2VlbiB3aWMgYW5kIHRob3NlIGV4YW1wbGVzIGlzIHRoYXQgd2l0aCB3aWMgdGhlIGZ1bmN0aW9uYWxpdHkKKyAgICBvZiB0aG9zZSBzY3JpcHRzIGlzIGltcGxlbWVudGVkIGJ5IGEgZ2VuZXJhbC1wdXJwb3NlIHBhcnRpdGlvbmluZworICAgICdsYW5ndWFnZScgYmFzZWQgb24gUmVkaGF0IGtpY2tzdGFydCBzeW50YXgpLgorCisgICAgVGhlIGluaXRpYWwgbW90aXZhdGlvbiBhbmQgZGVzaWduIGNvbnNpZGVyYXRpb25zIHRoYXQgbGVhZCB0byB0aGUKKyAgICBjdXJyZW50IHRvb2wgYXJlIGRlc2NyaWJlZCBleGhhdXN0aXZlbHkgaW4gWW9jdG8gQnVnICMzODQ3CisgICAgKGh0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg0NykuCisKKyAgSW1wbGVtZW50YXRpb24gYW5kIEV4YW1wbGVzCisKKyAgICB3aWMgY2FuIGJlIHVzZWQgaW4gdHdvIGRpZmZlcmVudCBtb2RlcywgZGVwZW5kaW5nIG9uIGhvdyBtdWNoCisgICAgY29udHJvbCB0aGUgdXNlciBuZWVkcyBpbiBzcGVjaWZ5aW5nIHRoZSBPcGVuZW1iZWRkZWQgYnVpbGQKKyAgICBhcnRpZmFjdHMgdGhhdCB3aWxsIGJlIHVzZWQgaW4gY3JlYXRpbmcgdGhlIGltYWdlOiAncmF3JyBhbmQKKyAgICAnY29va2VkJy4KKworICAgIElmIHVzZWQgaW4gJ3JhdycgbW9kZSwgYXJ0aWZhY3RzIGFyZSBleHBsaWNpdGx5IHNwZWNpZmllZCB2aWEKKyAgICBjb21tYW5kLWxpbmUgYXJndW1lbnRzIChzZWUgZXhhbXBsZSBiZWxvdykuCisKKyAgICBUaGUgbW9yZSBlYXNpbHkgdXNhYmxlICdjb29rZWQnIG1vZGUgdXNlcyB0aGUgY3VycmVudCBNQUNISU5FCisgICAgc2V0dGluZyBhbmQgYSBzcGVjaWZpZWQgaW1hZ2UgbmFtZSB0byBhdXRvbWF0aWNhbGx5IGxvY2F0ZSB0aGUKKyAgICBhcnRpZmFjdHMgdXNlZCB0byBjcmVhdGUgdGhlIGltYWdlLgorCisgICAgT0Uga2lja3N0YXJ0IGZpbGVzICgud2tzKSBjYW4gb2YgY291cnNlIGJlIHNwZWNpZmllZCBkaXJlY3RseSBvbgorICAgIHRoZSBjb21tYW5kLWxpbmUsIGJ1dCB0aGUgdXNlciBjYW4gYWxzbyBjaG9vc2UgZnJvbSBhIHNldCBvZgorICAgICdjYW5uZWQnIC53a3MgZmlsZXMgYXZhaWxhYmxlIHZpYSB0aGUgJ3dpYyBsaXN0IGltYWdlcycgY29tbWFuZAorICAgIChleGFtcGxlIGJlbG93KS4KKworICAgIEluIGFueSBjYXNlLCB0aGUgcHJlcmVxdWlzaXRlIGZvciBnZW5lcmF0aW5nIGFueSBpbWFnZSBpcyB0byBoYXZlCisgICAgdGhlIGJ1aWxkIGFydGlmYWN0cyBhbHJlYWR5IGF2YWlsYWJsZS4gIFRoZSBiZWxvdyBleGFtcGxlcyBhc3N1bWUKKyAgICB0aGUgdXNlciBoYXMgYWxyZWFkeSBidWlsZCBhICdjb3JlLWltYWdlLW1pbmltYWwnIGZvciBhIHNwZWNpZmljCisgICAgbWFjaGluZSAoZnV0dXJlIHZlcnNpb25zIHdvbid0IHJlcXVpcmUgdGhpcyByZWR1bmRhbnQgc3RlcCwgYnV0CisgICAgZm9yIG5vdyB0aGF0J3MgdHlwaWNhbGx5IGhvdyBidWlsZCBhcnRpZmFjdHMgZ2V0IGdlbmVyYXRlZCkuCisKKyAgICBUaGUgb3RoZXIgcHJlcmVxdWlzaXRlIGlzIHRvIHNvdXJjZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQ6CisKKyAgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52CisKKyAgICBUbyBzdGFydCBvdXQgd2l0aCwgd2UnbGwgZ2VuZXJhdGUgYW4gaW1hZ2UgZnJvbSBvbmUgb2YgdGhlIGNhbm5lZAorICAgIC53a3MgZmlsZXMuICBUaGUgZm9sbG93aW5nIGdlbmVyYXRlcyBhIGxpc3Qgb2YgYXZhaWxhaWxhYmxlCisgICAgaW1hZ2VzOgorCisgICAgICAkIHdpYyBsaXN0IGltYWdlcworICAgICAgICBta2VmaWRpc2sgICAgICAgICAgICAgQ3JlYXRlIGFuIEVGSSBkaXNrIGltYWdlCisgICAgICAgIGRpcmVjdGRpc2sgICAgICAgICAgICBDcmVhdGUgYSAncGNiaW9zJyBkaXJlY3QgZGlzayBpbWFnZQorCisgICAgWW91IGNhbiBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBhbnkgb2YgdGhlIGF2YWlsYWJsZSBpbWFnZXMgYnkKKyAgICB0eXBpbmcgJ3dpYyBsaXN0IHh4eCBoZWxwJywgd2hlcmUgJ3h4eCcgaXMgb25lIG9mIHRoZSBpbWFnZSBuYW1lczoKKworICAgICAgJCB3aWMgbGlzdCBta2VmaWRpc2sgaGVscAorCisgICAgQ3JlYXRlcyBhIHBhcnRpdGlvbmVkIEVGSSBkaXNrIGltYWdlIHRoYXQgdGhlIHVzZXIgY2FuIGRpcmVjdGx5IGRkCisgICAgdG8gYm9vdCBtZWRpYS4KKworICAgIEF0IGFueSB0aW1lLCB5b3UgY2FuIGdldCBoZWxwIG9uIHRoZSAnd2ljJyBjb21tYW5kIG9yIGFueQorICAgIHN1YmNvbW1hbmQgKGN1cnJlbnRseSAnbGlzdCcgYW5kICdjcmVhdGUnKS4gIEZvciBpbnN0YW5jZSwgdG8gZ2V0CisgICAgdGhlIGRlc2NyaXB0aW9uIG9mICd3aWMgY3JlYXRlJyBjb21tYW5kIGFuZCBpdHMgcGFyYW1ldGVyczoKKworICAgICAgJCB3aWMgY3JlYXRlCisKKyAgICAgICBVc2FnZToKKworICAgICAgIENyZWF0ZSBhIG5ldyBPcGVuRW1iZWRkZWQgaW1hZ2UKKworICAgICAgIHVzYWdlOiB3aWMgY3JlYXRlIDx3a3MgZmlsZSBvciBpbWFnZSBuYW1lPiBbLW8gPERJUk5BTUU+IHwgLi4uXQorICAgICAgICAgICAgWy1pIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLS1pbmZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisgICAgICAgICAgICBbLWUgfCAtLWltYWdlLW5hbWVdIFstcywgLS1za2lwLWJ1aWxkLWNoZWNrXSBbLUQsIC0tZGVidWddCisgICAgICAgICAgICBbLXIsIC0tcm9vdGZzLWRpcl0gWy1iLCAtLWJvb3RpbWctZGlyXSBbLWssIC0ta2VybmVsLWRpcl0KKyAgICAgICAgICAgIFstbiwgLS1uYXRpdmUtc3lzcm9vdF0gWy1mLCAtLWJ1aWxkLXJvb3Rmc10KKworICAgICAgIFRoaXMgY29tbWFuZCBjcmVhdGVzIGFuIE9wZW5FbWJlZGRlZCBpbWFnZSBiYXNlZCBvbiB0aGUgJ09FCisgICAgICAga2lja3N0YXJ0IGNvbW1hbmRzJyBmb3VuZCBpbiB0aGUgPHdrcyBmaWxlPi4KKworICAgICAgIFRoZSAtbyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcGxhY2UgdGhlIGltYWdlIGluIGEgZGlyZWN0b3J5CisgICAgICAgd2l0aCBhIGRpZmZlcmVudCBuYW1lIGFuZCBsb2NhdGlvbi4KKworICAgICAgIFNlZSAnd2ljIGhlbHAgY3JlYXRlJyBmb3IgbW9yZSBkZXRhaWxlZCBpbnN0cnVjdGlvbnMuCisgICAgICAgLi4uCisKKyAgICBBcyBtZW50aW9uZWQgaW4gdGhlIGNvbW1hbmQsIHlvdSBjYW4gZ2V0IGV2ZW4gbW9yZSBkZXRhaWxlZAorICAgIGluZm9ybWF0aW9uIGJ5IGFkZGluZyAnaGVscCcgdG8gdGhlIGFib3ZlOgorCisgICAgICAkIHdpYyBoZWxwIGNyZWF0ZQorCisgICAgU28sIHRoZSBlYXNpZXN0IHdheSB0byBjcmVhdGUgYW4gaW1hZ2UgaXMgdG8gdXNlIHRoZSAtZSBvcHRpb24KKyAgICB3aXRoIGEgY2FubmVkIC53a3MgZmlsZS4gIFRvIHVzZSB0aGUgLWUgb3B0aW9uLCB5b3UgbmVlZCB0bworICAgIHNwZWNpZnkgdGhlIGltYWdlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGFydGlmYWN0cyBhbmQgeW91IGFjdHVhbGx5CisgICAgbmVlZCB0byBoYXZlIHRoZSBNQUNISU5FIHVzZWQgdG8gYnVpbGQgdGhlbSBzcGVjaWZpZWQgaW4geW91cgorICAgIGxvY2FsLmNvbmYgKHRoZXNlIHJlcXVpcmVtZW50cyBhcmVuJ3QgbmVjZXNzYXJ5IGlmIHlvdSBhcmVuJ3QKKyAgICB1c2luZyB0aGUgLWUgb3B0aW9ucy4pICBCZWxvdywgd2UgZ2VuZXJhdGUgYSBkaXJlY3RkaXNrIGltYWdlLAorICAgIHBvaW50aW5nIHRoZSBwcm9jZXNzIGF0IHRoZSBjb3JlLWltYWdlLW1pbmltYWwgYXJ0aWZhY3RzIGZvciB0aGUKKyAgICBjdXJyZW50IE1BQ0hJTkU6CisKKyAgICAgICQgd2ljIGNyZWF0ZSBkaXJlY3RkaXNrIC1lIGNvcmUtaW1hZ2UtbWluaW1hbAorCisgICAgICBDaGVja2luZyBiYXNpYyBidWlsZCBlbnZpcm9ubWVudC4uLgorICAgICAgRG9uZS4KKworICAgICAgQ3JlYXRpbmcgaW1hZ2UocykuLi4KKworICAgICAgSW5mbzogVGhlIG5ldyBpbWFnZShzKSBjYW4gYmUgZm91bmQgaGVyZToKKyAgICAgIC92YXIvdG1wL3dpYy9idWlsZC9kaXJlY3RkaXNrLTIwMTMwOTI1MjM1MC1zZGEuZGlyZWN0CisKKyAgICAgIFRoZSBmb2xsb3dpbmcgYnVpbGQgYXJ0aWZhY3RzIHdlcmUgdXNlZCB0byBjcmVhdGUgdGhlIGltYWdlKHMpOgorCisgICAgICBST09URlNfRElSOiAgICAgIC4uLgorICAgICAgQk9PVElNR19ESVI6ICAgICAuLi4KKyAgICAgIEtFUk5FTF9ESVI6ICAgICAgLi4uCisgICAgICBOQVRJVkVfU1lTUk9PVDogIC4uLgorCisgICAgICBUaGUgaW1hZ2Uocykgd2VyZSBjcmVhdGVkIHVzaW5nIE9FIGtpY2tzdGFydCBmaWxlOgorICAgICAgICAuLi4vc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay53a3MKKworICAgIFRoZSBvdXRwdXQgc2hvd3MgdGhlIG5hbWUgYW5kIGxvY2F0aW9uIG9mIHRoZSBpbWFnZSBjcmVhdGVkLCBhbmQKKyAgICBzbyB0aGF0IHlvdSBrbm93IGV4YWN0bHkgd2hhdCB3YXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgaW1hZ2UsIGVhY2gKKyAgICBvZiB0aGUgYXJ0aWZhY3RzIGFuZCB0aGUga2lja3N0YXJ0IGZpbGUgdXNlZC4KKworICAgIFNpbWlsYXJseSwgeW91IGNhbiBjcmVhdGUgYSAnbWtlZmlkaXNrJyBpbWFnZSBpbiB0aGUgc2FtZSB3YXkKKyAgICAobm90aWNlIHRoYXQgdGhpcyBleGFtcGxlIHVzZXMgYSBkaWZmZXJlbnQgbWFjaGluZSAtIGJlY2F1c2UgaXQncworICAgIHVzaW5nIHRoZSAtZSBvcHRpb24sIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgTUFDSElORSBpbiB5b3VyCisgICAgbG9jYWwuY29uZik6CisKKyAgICAgICQgd2ljIGNyZWF0ZSBta2VmaWRpc2sgLWUgY29yZS1pbWFnZS1taW5pbWFsCisgICAgICBDaGVja2luZyBiYXNpYyBidWlsZCBlbnZpcm9ubWVudC4uLgorICAgICAgRG9uZS4KKworICAgICAgQ3JlYXRpbmcgaW1hZ2UocykuLi4KKworICAgICAgSW5mbzogVGhlIG5ldyBpbWFnZShzKSBjYW4gYmUgZm91bmQgaGVyZToKKyAgICAgICAgIC92YXIvdG1wL3dpYy9idWlsZC9ta2VmaWRpc2stMjAxMzA5MjYwMDI3LXNkYS5kaXJlY3QKKworICAgICAgLi4uCisKKyAgICBIZXJlJ3MgYW4gZXhhbXBsZSB0aGF0IGRvZXNuJ3QgdGFrZSB0aGUgZWFzeSB3YXkgb3V0IGFuZCBtYW51YWxseQorICAgIHNwZWNpZmllcyBlYWNoIGJ1aWxkIGFydGlmYWN0LCBhbG9uZyB3aXRoIGEgbm9uLWNhbm5lZCAud2tzIGZpbGUsCisgICAgYW5kIGFsc28gdXNlcyB0aGUgLW8gb3B0aW9uIHRvIGhhdmUgd2ljIGNyZWF0ZSB0aGUgb3V0cHV0CisgICAgc29tZXdoZXJlIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgL3Zhci90bXAvd2ljOgorCisgICAgICAkIHdpYyBjcmVhdGUgLi90ZXN0LndrcyAtbyAuL291dCAtLXJvb3Rmcy1kaXIKKyAgICAgIHRtcC93b3JrL3FlbXV4ODZfNjQtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3Jvb3RmcworICAgICAgLS1ib290aW1nLWRpciB0bXAvc3lzcm9vdHMvcWVtdXg4Ni02NC91c3Ivc2hhcmUKKyAgICAgIC0ta2VybmVsLWRpciB0bXAvZGVwbG95L2ltYWdlcy9xZW11eDg2LTY0CisgICAgICAtLW5hdGl2ZS1zeXNyb290IHRtcC9zeXNyb290cy94ODZfNjQtbGludXgKKworICAgICBDcmVhdGluZyBpbWFnZShzKS4uLgorCisgICAgIEluZm86IFRoZSBuZXcgaW1hZ2UocykgY2FuIGJlIGZvdW5kIGhlcmU6CisgICAgICAgICAgIG91dC9idWlsZC90ZXN0LTIwMTUwNzIxMTMxMy1zZGEuZGlyZWN0CisKKyAgICAgVGhlIGZvbGxvd2luZyBidWlsZCBhcnRpZmFjdHMgd2VyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgaW1hZ2Uocyk6CisgICAgICAgUk9PVEZTX0RJUjogICAgICAgICAgICAgICAgICAgdG1wL3dvcmsvcWVtdXg4Nl82NC1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC8xLjAtcjAvcm9vdGZzCisgICAgICAgQk9PVElNR19ESVI6ICAgICAgICAgICAgICAgICAgdG1wL3N5c3Jvb3RzL3FlbXV4ODYtNjQvdXNyL3NoYXJlCisgICAgICAgS0VSTkVMX0RJUjogICAgICAgICAgICAgICAgICAgdG1wL2RlcGxveS9pbWFnZXMvcWVtdXg4Ni02NAorICAgICAgIE5BVElWRV9TWVNST09UOiAgICAgICAgICAgICAgIHRtcC9zeXNyb290cy94ODZfNjQtbGludXgKKworICAgICBUaGUgaW1hZ2Uocykgd2VyZSBjcmVhdGVkIHVzaW5nIE9FIGtpY2tzdGFydCBmaWxlOgorICAgICAuL3Rlc3Qud2tzCisKKyAgICAgSGVyZSBpcyBhIGNvbnRlbnQgb2YgdGVzdC53a3M6CisKKyAgICAgcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBjYmlvcyAtLW9uZGlzayBzZGEgLS1sYWJlbCBib290IC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorICAgICBwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQzIC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0CisKKyAgICAgYm9vdGxvYWRlciAgLS10aW1lb3V0PTAgIC0tYXBwZW5kPSJyb290d2FpdCByb290ZnN0eXBlPWV4dDMgdmlkZW89dmVzYWZiIHZnYT0weDMxOCBjb25zb2xlPXR0eTAiCisKKworICAgIEZpbmFsbHksIGhlcmUncyBhbiBleGFtcGxlIG9mIHRoZSBhY3R1YWwgcGFydGl0aW9uIGxhbmd1YWdlCisgICAgY29tbWFuZHMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgbWtlZmlkaXNrIGltYWdlIGkuZS4gdGhlc2UgYXJlIHRoZQorICAgIGNvbnRlbnRzIG9mIHRoZSBta2VmaWRpc2sud2tzIE9FIGtpY2tzdGFydCBmaWxlOgorCisgICAgICAjIHNob3J0LWRlc2NyaXB0aW9uOiBDcmVhdGUgYW4gRUZJIGRpc2sgaW1hZ2UKKyAgICAgICMgbG9uZy1kZXNjcmlwdGlvbjogQ3JlYXRlcyBhIHBhcnRpdGlvbmVkIEVGSSBkaXNrIGltYWdlIHRoYXQgdGhlIHVzZXIKKyAgICAgICMgY2FuIGRpcmVjdGx5IGRkIHRvIGJvb3QgbWVkaWEuCisKKyAgICAgIHBhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1lZmkgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWVmaSAtLWFjdGl2ZQorCisgICAgICBwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQzIC0tbGFiZWwgcGxhdGZvcm0KKworICAgICAgcGFydCBzd2FwIC0tb25kaXNrIHNkYSAtLXNpemUgNDQgLS1sYWJlbCBzd2FwMSAtLWZzdHlwZT1zd2FwCisKKyAgICAgIGJvb3Rsb2FkZXIgIC0tdGltZW91dD0xMCAgLS1hcHBlbmQ9InJvb3R3YWl0IGNvbnNvbGU9dHR5UENIMCwxMTUyMDAiCisKKyAgICBZb3UgY2FuIGdldCBhIGNvbXBsZXRlIGxpc3RpbmcgYW5kIGRlc2NyaXB0aW9uIG9mIGFsbCB0aGUKKyAgICBraWNrc3RhcnQgY29tbWFuZHMgYXZhaWxhYmxlIGZvciB1c2UgaW4gLndrcyBmaWxlcyBmcm9tICd3aWMgaGVscAorICAgIGtpY2tzdGFydCcuCisiIiIKKword2ljX2tpY2tzdGFydF9oZWxwID0gIiIiCisKK05BTUUKKyAgICB3aWMga2lja3N0YXJ0IC0gd2ljIGtpY2tzdGFydCByZWZlcmVuY2UKKworREVTQ1JJUFRJT04KKyAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgdGhlIGRlZmluaXRpdmUgcmVmZXJlbmNlIHRvIHRoZSB3aWMKKyAgICBraWNrc3RhcnQgbGFuZ3VhZ2UuICBJdCBhbHNvIHByb3ZpZGVzIGRvY3VtZW50YXRpb24gb24gdGhlIGxpc3Qgb2YKKyAgICAtLXNvdXJjZSBwbHVnaW5zIGF2YWlsYWJsZSBmb3IgdXNlIGZyb20gdGhlICdwYXJ0JyBjb21tYW5kIChzZWUKKyAgICB0aGUgJ1BsYXRmb3JtLXNwZWNpZmljIFBsdWdpbnMnIHNlY3Rpb24gYmVsb3cpLgorCisgICAgVGhlIGN1cnJlbnQgd2ljIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIG9ubHkgdGhlIGJhc2ljIGtpY2tzdGFydAorICAgIHBhcnRpdGlvbmluZyBjb21tYW5kczogcGFydGl0aW9uIChvciBwYXJ0IGZvciBzaG9ydCkgYW5kCisgICAgYm9vdGxvYWRlci4KKworICAgIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0aW5nIG9mIHRoZSBjb21tYW5kcywgdGhlaXIgc3ludGF4LCBhbmQKKyAgICBtZWFuaW5ncy4gVGhlIGNvbW1hbmRzIGFyZSBiYXNlZCBvbiB0aGUgRmVkb3JhIGtpY2tzdGFydAorICAgIGRvY3VtZW50YXRpb24gYnV0IHdpdGggbW9kaWZpY2F0aW9ucyB0byByZWZsZWN0IHdpYyBjYXBhYmlsaXRpZXMuCisKKyAgICAgIGh0dHA6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0FuYWNvbmRhL0tpY2tzdGFydCNwYXJ0X29yX3BhcnRpdGlvbgorICAgICAgaHR0cDovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvQW5hY29uZGEvS2lja3N0YXJ0I2Jvb3Rsb2FkZXIKKworICBDb21tYW5kcworCisgICAgKiAncGFydCcgb3IgJ3BhcnRpdGlvbicKKworICAgICAgIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgcGFydGl0aW9uIG9uIHRoZSBzeXN0ZW0gYW5kIHVzZXMgdGhlCisgICAgICAgZm9sbG93aW5nIHN5bnRheDoKKworICAgICAgICAgcGFydCA8bW91bnRwb2ludD4KKworICAgICAgIFRoZSA8bW91bnRwb2ludD4gaXMgd2hlcmUgdGhlIHBhcnRpdGlvbiB3aWxsIGJlIG1vdW50ZWQgYW5kCisgICAgICAgbXVzdCB0YWtlIG9mIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgorCisgICAgICAgICAvPHBhdGg+OiBGb3IgZXhhbXBsZTogLywgL3Vzciwgb3IgL2hvbWUKKworICAgICAgICAgc3dhcDogVGhlIHBhcnRpdGlvbiB3aWxsIGJlIHVzZWQgYXMgc3dhcCBzcGFjZS4KKworICAgICAgIFRoZSBmb2xsb3dpbmcgYXJlIHN1cHBvcnRlZCAncGFydCcgb3B0aW9uczoKKworICAgICAgICAgLS1zaXplOiBUaGUgbWluaW11bSBwYXJ0aXRpb24gc2l6ZS4gU3BlY2lmeSBhbiBpbnRlZ2VyIHZhbHVlCisgICAgICAgICAgICAgICAgIHN1Y2ggYXMgNTAwLiBNdWx0aXBsaWVycyBrLCBNIGFuZyBHIGNhbiBiZSB1c2VkLiBJZgorICAgICAgICAgICAgICAgICBub3Qgc3BlY2lmaWVkLCB0aGUgc2l6ZSBpcyBpbiBNQi4KKyAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBuZWVkIHRoaXMgb3B0aW9uIGlmIHlvdSB1c2UgLS1zb3VyY2UuCisKKyAgICAgICAgIC0tc291cmNlOiBUaGlzIG9wdGlvbiBpcyBhIHdpYy1zcGVjaWZpYyBvcHRpb24gdGhhdCBuYW1lcyB0aGUKKyAgICAgICAgICAgICAgICAgICBzb3VyY2Ugb2YgdGhlIGRhdGEgdGhhdCB3aWxsIHBvcHVsYXRlIHRoZQorICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbi4gIFRoZSBtb3N0IGNvbW1vbiB2YWx1ZSBmb3IgdGhpcyBvcHRpb24KKyAgICAgICAgICAgICAgICAgICBpcyAncm9vdGZzJywgYnV0IGNhbiBiZSBhbnkgdmFsdWUgd2hpY2ggbWFwcyB0byBhCisgICAgICAgICAgICAgICAgICAgdmFsaWQgJ3NvdXJjZSBwbHVnaW4nIChzZWUgJ3dpYyBoZWxwIHBsdWdpbnMnKS4KKworICAgICAgICAgICAgICAgICAgIElmICctLXNvdXJjZSByb290ZnMnIGlzIHVzZWQsIGl0IHRlbGxzIHRoZSB3aWMKKyAgICAgICAgICAgICAgICAgICBjb21tYW5kIHRvIGNyZWF0ZSBhIHBhcnRpdGlvbiBhcyBsYXJnZSBhcyBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICBhbmQgdG8gZmlsbCBpdCB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdAorICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gcG9pbnRlZCB0byBieSB0aGUgJy1yJyB3aWMgY29tbWFuZC1saW5lCisgICAgICAgICAgICAgICAgICAgb3B0aW9uIChvciB0aGUgZXF1aXZhbGVudCByb290ZnMgZGVyaXZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICctZScgY29tbWFuZC1saW5lIG9wdGlvbikuICBUaGUgZmlsZXN5c3RlbSB0eXBlCisgICAgICAgICAgICAgICAgICAgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBwYXJ0aXRpb24gaXMgZHJpdmVuCisgICAgICAgICAgICAgICAgICAgYnkgdGhlIHZhbHVlIG9mIHRoZSAtLWZzdHlwZSBvcHRpb24gc3BlY2lmaWVkIGZvcgorICAgICAgICAgICAgICAgICAgIHRoZSBwYXJ0aXRpb24gKHNlZSAtLWZzdHlwZSBiZWxvdykuCisKKyAgICAgICAgICAgICAgICAgICBJZiAtLXNvdXJjZSA8cGx1Z2luLW5hbWU+JyBpcyB1c2VkLCBpdCB0ZWxscyB0aGUKKyAgICAgICAgICAgICAgICAgICB3aWMgY29tbWFuZCB0byBjcmVhdGUgYSBwYXJ0aXRpb24gYXMgbGFyZ2UgYXMKKyAgICAgICAgICAgICAgICAgICBuZWVkZWQgYW5kIHRvIGZpbGwgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uIHRoYXQgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgIHBsdWdpbiBuYW1lIHVzaW5nIHRoZSBkYXRhIHBvaW50ZWQgdG8gYnkgdGhlICctcicKKyAgICAgICAgICAgICAgICAgICB3aWMgY29tbWFuZC1saW5lIG9wdGlvbiAob3IgdGhlIGVxdWl2YWxlbnQgcm9vdGZzCisgICAgICAgICAgICAgICAgICAgZGVyaXZlZCBmcm9tIHRoZSAnLWUnIGNvbW1hbmQtbGluZSBvcHRpb24pLgorICAgICAgICAgICAgICAgICAgIEV4YWN0bHkgd2hhdCB0aG9zZSBjb250ZW50cyBhbmQgZmlsZXN5c3RlbSB0eXBlIGVuZAorICAgICAgICAgICAgICAgICAgIHVwIGJlaW5nIGFyZSBkZXBlbmRlbnQgb24gdGhlIGdpdmVuIHBsdWdpbgorICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICAgICAgICAgICAgSWYgLS1zb3VyY2Ugb3B0aW9uIGlzIG5vdCB1c2VkLCB0aGUgd2ljIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICB3aWxsIGNyZWF0ZSBlbXB0eSBwYXJ0aXRpb24uIC0tc2l6ZSBwYXJhbWV0ZXIgaGFzCisgICAgICAgICAgICAgICAgICAgdG8gYmUgdXNlZCB0byBzcGVjaWZ5IHNpemUgb2YgZW1wdHkgcGFydGl0aW9uLgorCisgICAgICAgICAtLW9uZGlzayBvciAtLW9uZHJpdmU6IEZvcmNlcyB0aGUgcGFydGl0aW9uIHRvIGJlIGNyZWF0ZWQgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBwYXJ0aWN1bGFyIGRpc2suCisKKyAgICAgICAgIC0tZnN0eXBlOiBTZXRzIHRoZSBmaWxlIHN5c3RlbSB0eXBlIGZvciB0aGUgcGFydGl0aW9uLiAgVGhlc2UKKyAgICAgICAgICAgYXBwbHkgdG8gcGFydGl0aW9ucyBjcmVhdGVkIHVzaW5nICctLXNvdXJjZSByb290ZnMnIChzZWUKKyAgICAgICAgICAgLS1zb3VyY2UgYWJvdmUpLiAgVmFsaWQgdmFsdWVzIGFyZToKKworICAgICAgICAgICAgIGV4dDIKKyAgICAgICAgICAgICBleHQzCisgICAgICAgICAgICAgZXh0NAorICAgICAgICAgICAgIGJ0cmZzCisgICAgICAgICAgICAgc3F1YXNoZnMKKyAgICAgICAgICAgICBzd2FwCisKKyAgICAgICAgIC0tZnNvcHRpb25zOiBTcGVjaWZpZXMgYSBmcmVlLWZvcm0gc3RyaW5nIG9mIG9wdGlvbnMgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICB1c2VkIHdoZW4gbW91bnRpbmcgdGhlIGZpbGVzeXN0ZW0uIFRoaXMgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBjb3BpZWQgaW50byB0aGUgL2V0Yy9mc3RhYiBmaWxlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBzeXN0ZW0gYW5kIHNob3VsZCBiZSBlbmNsb3NlZCBpbgorICAgICAgICAgICAgICAgICAgICAgIHF1b3Rlcy4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHN0cmluZyBpcworICAgICAgICAgICAgICAgICAgICAgICJkZWZhdWx0cyIuCisKKyAgICAgICAgIC0tbGFiZWwgbGFiZWw6IFNwZWNpZmllcyB0aGUgbGFiZWwgdG8gZ2l2ZSB0byB0aGUgZmlsZXN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgbWFkZSBvbiB0aGUgcGFydGl0aW9uLiBJZiB0aGUgZ2l2ZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsIGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgZmlsZXN5c3RlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgbmV3IGxhYmVsIGlzIGNyZWF0ZWQgZm9yIHRoZSBwYXJ0aXRpb24uCisKKyAgICAgICAgIC0tYWN0aXZlOiBNYXJrcyB0aGUgcGFydGl0aW9uIGFzIGFjdGl2ZS4KKworICAgICAgICAgLS1hbGlnbiAoaW4gS0J5dGVzKTogVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gd2ljIGFuZCBzYXlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzdGFydCBhIHBhcnRpdGlvbiBvbiBhbiB4IEtCeXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkuCisKKyAgICAgICAgIC0tbm8tdGFibGU6IFRoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHdpYy4gU3BhY2Ugd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgZm9yIHRoZSBwYXJ0aXRpb24gYW5kIGl0IHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgIHBvcHVsYXRlZCBidXQgaXQgd2lsbCBub3QgYmUgYWRkZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24gdGFibGUuIEl0IG1heSBiZSB1c2VmdWwgZm9yCisgICAgICAgICAgICAgICAgICAgICBib290bG9hZGVycy4KKworICAgICAgICAgLS1leHRyYS1zcGFjZTogVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gd2ljLiBJdCBhZGRzIGV4dHJhCisgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZSBhZnRlciB0aGUgc3BhY2UgZmlsbGVkIGJ5IHRoZSBjb250ZW50CisgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcGFydGl0aW9uLiBUaGUgZmluYWwgc2l6ZSBjYW4gZ28KKyAgICAgICAgICAgICAgICAgICAgICAgIGJleW9uZCB0aGUgc2l6ZSBzcGVjaWZpZWQgYnkgLS1zaXplLgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgMTBNQi4KKworICAgICAgICAgLS1vdmVyaGVhZC1mYWN0b3I6IFRoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHdpYy4gVGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBvZiB0aGUgcGFydGl0aW9uIGlzIG11bHRpcGxpZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGZhY3Rvci4gSXQgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsIHRvIDEuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMS4zLgorCisgICAgICAgICAtLXBhcnQtdHlwZTogVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gd2ljLiBJdCBzcGVjaWZpZXMgcGFydGl0aW9uCisgICAgICAgICAgICAgICAgICAgICAgdHlwZSBHVUlEIGZvciBHUFQgcGFydGl0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHBhcnRpdGlvbiB0eXBlIEdVSURTIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR1VJRF9QYXJ0aXRpb25fVGFibGUjUGFydGl0aW9uX3R5cGVfR1VJRHMKKworICAgICAgICAgLS11c2UtdXVpZDogVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gd2ljLiBJdCBtYWtlcyB3aWMgdG8gZ2VuZXJhdGUKKyAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSBnbG9iYWxseSB1bmlxdWUgaWRlbnRpZmllciAoR1VJRCkgZm9yIHRoZSBwYXJ0aXRpb24KKyAgICAgICAgICAgICAgICAgICAgIGFuZCB1c2UgaXQgaW4gYm9vdGxvYWRlciBjb25maWd1cmF0aW9uIHRvIHNwZWNpZnkgcm9vdCBwYXJ0aXRpb24uCisKKyAgICAgICAgIC0tdXVpZDogVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gd2ljLiBJdCBzcGVjaWZpZXMgcGFydGl0aW9uIFVVSUQuCisgICAgICAgICAgICAgICAgIEl0J3MgdXNlZnVsIGlmIHByZWNvbmZpZ3VyZWQgcGFydGl0aW9uIFVVSUQgaXMgYWRkZWQgdG8ga2VybmVsIGNvbW1hbmQgbGluZQorICAgICAgICAgICAgICAgICBpbiBib290bG9hZGVyIGNvbmZpZ3VyYXRpb24gYmVmb3JlIHJ1bm5pbmcgd2ljLiBJbiB0aGlzIGNhc2UgLndrcyBmaWxlIGNhbgorICAgICAgICAgICAgICAgICBiZSBnZW5lcmF0ZWQgb3IgbW9kaWZpZWQgdG8gc2V0IHByZWNvbmZpZ3VyZWQgcGFyaXRpb24gVVVJRCB1c2luZyB0aGlzIG9wdGlvbi4KKworICAgICogYm9vdGxvYWRlcgorCisgICAgICBUaGlzIGNvbW1hbmQgYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgdmFyaW91cyBib290bG9hZGVyCisgICAgICBvcHRpb25zLiAgVGhlIGZvbGxvd2luZyBhcmUgc3VwcG9ydGVkICdib290bG9hZGVyJyBvcHRpb25zOgorCisgICAgICAgIC0tdGltZW91dDogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgdGhlCisgICAgICAgICAgICAgICAgICAgYm9vdGxvYWRlciB0aW1lcyBvdXQgYW5kIGJvb3RzIHRoZSBkZWZhdWx0IG9wdGlvbi4KKworICAgICAgICAtLWFwcGVuZDogU3BlY2lmaWVzIGtlcm5lbCBwYXJhbWV0ZXJzLiBUaGVzZSB3aWxsIGJlIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgICBib290bG9hZGVyIGNvbW1hbmQtbGluZSAtIGZvciBleGFtcGxlLCB0aGUgc3lzbGludXgKKyAgICAgICAgICAgICAgICAgIEFQUEVORCBvciBncnViIGtlcm5lbCBjb21tYW5kIGxpbmUuCisKKyAgICAgIE5vdGUgdGhhdCBib290bG9hZGVyIGZ1bmN0aW9uYWxpdHkgYW5kIGJvb3QgcGFydGl0aW9ucyBhcmUKKyAgICAgIGltcGxlbWVudGVkIGJ5IHRoZSB2YXJpb3VzIC0tc291cmNlIHBsdWdpbnMgdGhhdCBpbXBsZW1lbnQKKyAgICAgIGJvb3Rsb2FkZXIgZnVuY3Rpb25hbGl0eTsgdGhlIGJvb3Rsb2FkZXIgY29tbWFuZCBlc3NlbnRpYWxseQorICAgICAgcHJvdmlkZXMgYSBtZWFucyBvZiBtb2RpZnlpbmcgYm9vdGxvYWRlciBjb25maWd1cmF0aW9uLgorIiIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9pbWFnZXIvX19pbml0X18ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9pbWFnZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2ltYWdlci9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL2Jhc2VpbWFnZXIucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9pbWFnZXIvYmFzZWltYWdlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2JlOTQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL2Jhc2VpbWFnZXIucHkKQEAgLTAsMCArMSwxOTIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdHQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IFJlZCBIYXQgIEluYy4KKyMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwLCAyMDExIEludGVsLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHNodXRpbAorCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIKK2Zyb20gd2ljLnV0aWxzLmVycm9ycyBpbXBvcnQgQ3JlYXRvckVycm9yCitmcm9tIHdpYy51dGlscyBpbXBvcnQgcnVubmVyCisKK2NsYXNzIEJhc2VJbWFnZUNyZWF0b3Iob2JqZWN0KToKKyAgICAiIiJCYXNlIGNsYXNzIGZvciBpbWFnZSBjcmVhdGlvbi4KKworICAgIEJhc2VJbWFnZUNyZWF0b3IgaXMgdGhlIHNpbXBsZXN0IGNyZWF0b3IgY2xhc3MgYXZhaWxhYmxlOyBpdCB3aWxsCisgICAgY3JlYXRlIGEgc3lzdGVtIGltYWdlIGFjY29yZGluZyB0byB0aGUgc3VwcGxpZWQga2lja3N0YXJ0IGZpbGUuCisKKyAgICBlLmcuCisKKyAgICAgIGltcG9ydCB3aWMuaW1nY3JlYXRlIGFzIGltZ2NyZWF0ZQorICAgICAga3MgPSBpbWdjcmVhdGUucmVhZF9raWNrc3RhcnQoImZvby5rcyIpCisgICAgICBpbWdjcmVhdGUuSW1hZ2VDcmVhdG9yKGtzLCAiZm9vIikuY3JlYXRlKCkKKyAgICAiIiIKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBzZWxmLmNsZWFudXAoKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNyZWF0ZW9wdHM9Tm9uZSk6CisgICAgICAgICIiIkluaXRpYWxpemUgYW4gSW1hZ2VDcmVhdG9yIGluc3RhbmNlLgorCisgICAgICAgIGtzIC0tIGEgcHlraWNrc3RhcnQuS2lja3N0YXJ0UGFyc2VyIGluc3RhbmNlOyB0aGlzIGluc3RhbmNlIHdpbGwgYmUKKyAgICAgICAgICAgICAgdXNlZCB0byBkcml2ZSB0aGUgaW5zdGFsbCBieSBlLmcuIHByb3ZpZGluZyB0aGUgbGlzdCBvZiBwYWNrYWdlcworICAgICAgICAgICAgICB0byBiZSBpbnN0YWxsZWQsIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiBhbmQgJXBvc3Qgc2NyaXB0cworCisgICAgICAgIG5hbWUgLS0gYSBuYW1lIGZvciB0aGUgaW1hZ2U7IHVzZWQgZm9yIGUuZy4gaW1hZ2UgZmlsZW5hbWVzIG9yCisgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSBsYWJlbHMKKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fX2J1aWxkZGlyID0gTm9uZQorCisgICAgICAgIHNlbGYua3MgPSBOb25lCisgICAgICAgIHNlbGYubmFtZSA9ICJ0YXJnZXQiCisgICAgICAgIHNlbGYudG1wZGlyID0gIi92YXIvdG1wL3dpYyIKKyAgICAgICAgc2VsZi53b3JrZGlyID0gIi92YXIvdG1wL3dpYy9idWlsZCIKKworICAgICAgICAjIHNldHVwIHRtcGZzIHRtcGRpciB3aGVuIGVuYWJsZXRtcGZzIGlzIFRydWUKKyAgICAgICAgc2VsZi5lbmFibGV0bXBmcyA9IEZhbHNlCisKKyAgICAgICAgaWYgY3JlYXRlb3B0czoKKyAgICAgICAgICAgICMgTWFwcGluZyB0YWJsZSBmb3IgdmFyaWFibGVzIHRoYXQgaGF2ZSBkaWZmZXJlbnQgbmFtZXMuCisgICAgICAgICAgICBvcHRtYXAgPSB7Im91dGRpciIgOiAiZGVzdGRpciIsCisgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICMgdXBkYXRlIHNldHRpbmcgZnJvbSBjcmVhdGVvcHRzCisgICAgICAgICAgICBmb3Iga2V5IGluIGNyZWF0ZW9wdHMua2V5cygpOgorICAgICAgICAgICAgICAgIGlmIGtleSBpbiBvcHRtYXA6CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9IG9wdG1hcFtrZXldCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uID0ga2V5CisgICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBvcHRpb24sIGNyZWF0ZW9wdHNba2V5XSkKKworICAgICAgICAgICAgc2VsZi5kZXN0ZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZXhwYW5kdXNlcihzZWxmLmRlc3RkaXIpKQorCisgICAgICAgIHNlbGYuX2RlcF9jaGVja3MgPSBbImxzIiwgImJhc2giLCAiY3AiLCAiZWNobyJdCisKKyAgICAgICAgIyBPdXRwdXQgaW1hZ2UgZmlsZSBuYW1lcworICAgICAgICBzZWxmLm91dGltYWdlID0gW10KKworICAgICAgICAjIE5vIGtzIHByb3ZpZGVkIHdoZW4gY2FsbGVkIGJ5IGNvbnZlcnRvciwgc28gc2tpcCB0aGUgZGVwZW5kZW5jeSBjaGVjaworICAgICAgICBpZiBzZWxmLmtzOgorICAgICAgICAgICAgIyBJZiB3ZSBoYXZlIGJ0cmZzIHBhcnRpdGlvbiB3ZSBuZWVkIHRvIGNoZWNrIG5lY2Vzc2FyeSB0b29scworICAgICAgICAgICAgZm9yIHBhcnQgaW4gc2VsZi5rcy5oYW5kbGVyLnBhcnRpdGlvbi5wYXJ0aXRpb25zOgorICAgICAgICAgICAgICAgIGlmIHBhcnQuZnN0eXBlIGFuZCBwYXJ0LmZzdHlwZSA9PSAiYnRyZnMiOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9kZXBfY2hlY2tzLmFwcGVuZCgibWtmcy5idHJmcyIpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhlIHNwZWNpZmllZCB0bXBkaXIgYW5kIGNhY2hlZGlyIGV4aXN0CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnRtcGRpcik6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhzZWxmLnRtcGRpcikKKworCisgICAgIworICAgICMgSG9va3MgZm9yIHN1YmNsYXNzZXMKKyAgICAjCisgICAgZGVmIF9jcmVhdGUoc2VsZik6CisgICAgICAgICIiIkNyZWF0ZSBwYXJ0aXRpb25zIGZvciB0aGUgZGlzayBpbWFnZShzKQorCisgICAgICAgIFRoaXMgaXMgdGhlIGhvb2sgd2hlcmUgc3ViY2xhc3NlcyBtYXkgY3JlYXRlIHRoZSBwYXJ0aXRpb25zCisgICAgICAgIHRoYXQgd2lsbCBiZSBhc3NlbWJsZWQgaW50byBkaXNrIGltYWdlKHMpLgorCisgICAgICAgIFRoZXJlIGlzIG5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX2NsZWFudXAoc2VsZik6CisgICAgICAgICIiIlVuZG8gYW55dGhpbmcgcGVyZm9ybWVkIGluIF9jcmVhdGUoKS4KKworICAgICAgICBUaGlzIGlzIHRoZSBob29rIHdoZXJlIHN1YmNsYXNzZXMgbXVzdCB1bmRvIGFueXRoaW5nIHdoaWNoIHdhcworICAgICAgICBkb25lIGluIF9jcmVhdGUoKS4KKworICAgICAgICBUaGVyZSBpcyBubyBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICAjCisgICAgIyBBY3R1YWwgaW1wbGVtZW50YXRpb24KKyAgICAjCisgICAgZGVmIF9fZW5zdXJlX2J1aWxkZGlyKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fX2J1aWxkZGlyIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLndvcmtkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi50bXBkaXIsICJidWlsZCIpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi53b3JrZGlyKToKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhzZWxmLndvcmtkaXIpCisgICAgICAgICAgICBzZWxmLl9fYnVpbGRkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj1zZWxmLndvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeD0iaW1nY3JlYXRlLSIpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHJhaXNlIENyZWF0b3JFcnJvcigiRmFpbGVkIGNyZWF0ZSBidWlsZCBkaXJlY3RvcnkgaW4gJXM6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYudG1wZGlyLCBlcnIpKQorCisgICAgZGVmIF9fc2V0dXBfdG1wZGlyKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5lbmFibGV0bXBmczoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHJ1bm5lci5zaG93KCdtb3VudCAtdCB0bXBmcyAtbyBzaXplPTRHIHRtcGZzICVzJyAlIHNlbGYud29ya2RpcikKKworICAgIGRlZiBfX2NsZWFuX3RtcGRpcihzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuZW5hYmxldG1wZnM6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBydW5uZXIuc2hvdygndW1vdW50IC1sICVzJyAlIHNlbGYud29ya2RpcikKKworICAgIGRlZiBjcmVhdGUoc2VsZik6CisgICAgICAgICIiIkNyZWF0ZSBwYXJ0aXRpb25zIGZvciB0aGUgZGlzayBpbWFnZShzKQorCisgICAgICAgIENyZWF0ZSB0aGUgcGFydGl0aW9ucyB0aGF0IHdpbGwgYmUgYXNzZW1ibGVkIGludG8gZGlzaworICAgICAgICBpbWFnZShzKS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX19zZXR1cF90bXBkaXIoKQorICAgICAgICBzZWxmLl9fZW5zdXJlX2J1aWxkZGlyKCkKKworICAgICAgICBzZWxmLl9jcmVhdGUoKQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgICIiIlVuZG8gYW55dGhpbmcgcGVyZm9ybWVkIGluIGNyZWF0ZSgpLgorCisgICAgICAgIE5vdGUsIG1ha2Ugc3VyZSB0byBjYWxsIHRoaXMgbWV0aG9kIG9uY2UgZmluaXNoZWQgd2l0aCB0aGUgY3JlYXRvcgorICAgICAgICBpbnN0YW5jZSBpbiBvcmRlciB0byBlbnN1cmUgbm8gc3RhbGUgZmlsZXMgYXJlIGxlZnQgb24gdGhlIGhvc3QgZS5nLjoKKworICAgICAgICAgIGNyZWF0b3IgPSBJbWFnZUNyZWF0b3Ioa3MsIG5hbWUpCisgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICBjcmVhdG9yLmNyZWF0ZSgpCisgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgY3JlYXRvci5jbGVhbnVwKCkKKworICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX19idWlsZGRpcjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX2NsZWFudXAoKQorCisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5fX2J1aWxkZGlyLCBpZ25vcmVfZXJyb3JzPVRydWUpCisgICAgICAgIHNlbGYuX19idWlsZGRpciA9IE5vbmUKKworICAgICAgICBzZWxmLl9fY2xlYW5fdG1wZGlyKCkKKworCisgICAgZGVmIHByaW50X291dGltYWdlX2luZm8oc2VsZik6CisgICAgICAgIG1zZyA9ICJUaGUgbmV3IGltYWdlIGNhbiBiZSBmb3VuZCBoZXJlOlxuIgorICAgICAgICBzZWxmLm91dGltYWdlLnNvcnQoKQorICAgICAgICBmb3IgcGF0aCBpbiBzZWxmLm91dGltYWdlOgorICAgICAgICAgICAgbXNnICs9ICcgICVzXG4nICUgb3MucGF0aC5hYnNwYXRoKHBhdGgpCisKKyAgICAgICAgbXNnZXIuaW5mbyhtc2cpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9pbWFnZXIvZGlyZWN0LnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL2RpcmVjdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDZhMGQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL2RpcmVjdC5weQpAQCAtMCwwICsxLDM3OCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgaW1wbGVtZW50cyB0aGUgJ2RpcmVjdCcgaW1hZ2UgY3JlYXRvciBjbGFzcyBmb3IgJ3dpYycKKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBsaW51eC5pbnRlbC5jb20+CisjCisKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAorCitmcm9tIHdpYyBpbXBvcnQga2lja3N0YXJ0LCBtc2dlcgorZnJvbSB3aWMudXRpbHMgaW1wb3J0IGZzX3JlbGF0ZWQKK2Zyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGdldF9iaXRiYWtlX3ZhcgorZnJvbSB3aWMudXRpbHMucGFydGl0aW9uZWRmcyBpbXBvcnQgSW1hZ2UKK2Zyb20gd2ljLnV0aWxzLmVycm9ycyBpbXBvcnQgQ3JlYXRvckVycm9yLCBJbWFnZUVycm9yCitmcm9tIHdpYy5pbWFnZXIuYmFzZWltYWdlciBpbXBvcnQgQmFzZUltYWdlQ3JlYXRvcgorZnJvbSB3aWMucGx1Z2luIGltcG9ydCBwbHVnaW5tZ3IKK2Zyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGV4ZWNfY21kCisKK2Rpc2tfbWV0aG9kcyA9IHsKKyAgICAiZG9faW5zdGFsbF9kaXNrIjpOb25lLAorfQorCitjbGFzcyBEaXJlY3RJbWFnZUNyZWF0b3IoQmFzZUltYWdlQ3JlYXRvcik6CisgICAgIiIiCisgICAgSW5zdGFsbHMgYSBzeXN0ZW0gaW50byBhIGZpbGUgY29udGFpbmluZyBhIHBhcnRpdGlvbmVkIGRpc2sgaW1hZ2UuCisKKyAgICBEaXJlY3RJbWFnZUNyZWF0b3IgaXMgYW4gYWR2YW5jZWQgSW1hZ2VDcmVhdG9yIHN1YmNsYXNzOyBhbiBpbWFnZQorICAgIGZpbGUgaXMgZm9ybWF0dGVkIHdpdGggYSBwYXJ0aXRpb24gdGFibGUsIGVhY2ggcGFydGl0aW9uIGNyZWF0ZWQKKyAgICBmcm9tIGEgcm9vdGZzIG9yIG90aGVyIE9wZW5FbWJlZGRlZCBidWlsZCBhcnRpZmFjdCBhbmQgZGQnZWQgaW50bworICAgIHRoZSB2aXJ0dWFsIGRpc2suIFRoZSBkaXNrIGltYWdlIGNhbiBzdWJzZXF1ZW50bHkgYmUgZGQnZWQgb250bworICAgIG1lZGlhIGFuZCB1c2VkIG9uIGFjdHVhbCBoYXJkd2FyZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvZV9idWlsZGRpciwgaW1hZ2Vfb3V0cHV0X2Rpciwgcm9vdGZzX2RpciwgYm9vdGltZ19kaXIsCisgICAgICAgICAgICAgICAgIGtlcm5lbF9kaXIsIG5hdGl2ZV9zeXNyb290LCBjb21wcmVzc29yLCBjcmVhdG9yb3B0cz1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIEluaXRpYWxpemUgYSBEaXJlY3RJbWFnZUNyZWF0b3IgaW5zdGFuY2UuCisKKyAgICAgICAgVGhpcyBtZXRob2QgdGFrZXMgdGhlIHNhbWUgYXJndW1lbnRzIGFzIEltYWdlQ3JlYXRvci5fX2luaXRfXygpCisgICAgICAgICIiIgorICAgICAgICBCYXNlSW1hZ2VDcmVhdG9yLl9faW5pdF9fKHNlbGYsIGNyZWF0b3JvcHRzKQorCisgICAgICAgIHNlbGYuX19pbWFnZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fX2Rpc2tzID0ge30KKyAgICAgICAgc2VsZi5fX2Rpc2tfZm9ybWF0ID0gImRpcmVjdCIKKyAgICAgICAgc2VsZi5fZGlza19uYW1lcyA9IFtdCisgICAgICAgIHNlbGYucHRhYmxlX2Zvcm1hdCA9IHNlbGYua3MuaGFuZGxlci5ib290bG9hZGVyLnB0YWJsZQorCisgICAgICAgIHNlbGYub2VfYnVpbGRkaXIgPSBvZV9idWlsZGRpcgorICAgICAgICBpZiBpbWFnZV9vdXRwdXRfZGlyOgorICAgICAgICAgICAgc2VsZi50bXBkaXIgPSBpbWFnZV9vdXRwdXRfZGlyCisgICAgICAgIHNlbGYucm9vdGZzX2RpciA9IHJvb3Rmc19kaXIKKyAgICAgICAgc2VsZi5ib290aW1nX2RpciA9IGJvb3RpbWdfZGlyCisgICAgICAgIHNlbGYua2VybmVsX2RpciA9IGtlcm5lbF9kaXIKKyAgICAgICAgc2VsZi5uYXRpdmVfc3lzcm9vdCA9IG5hdGl2ZV9zeXNyb290CisgICAgICAgIHNlbGYuY29tcHJlc3NvciA9IGNvbXByZXNzb3IKKworICAgIGRlZiBfX2dldF9wYXJ0X251bShzZWxmLCBudW0sIHBhcnRzKToKKyAgICAgICAgIiIiY2FsY3VsYXRlIHRoZSByZWFsIHBhcnRpdGlvbiBudW1iZXIsIGFjY291bnRpbmcgZm9yIHBhcnRpdGlvbnMgbm90CisgICAgICAgIGluIHRoZSBwYXJ0aXRpb24gdGFibGUgYW5kIGxvZ2ljYWwgcGFydGl0aW9ucworICAgICAgICAiIiIKKyAgICAgICAgcmVhbG51bSA9IDAKKyAgICAgICAgZm9yIHBudW0sIHBhcnQgaW4gZW51bWVyYXRlKHBhcnRzLCAxKToKKyAgICAgICAgICAgIGlmIG5vdCBwYXJ0Lm5vX3RhYmxlOgorICAgICAgICAgICAgICAgIHJlYWxudW0gKz0gMQorICAgICAgICAgICAgaWYgcG51bSA9PSBudW06CisgICAgICAgICAgICAgICAgaWYgIHBhcnQubm9fdGFibGU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICAgICAgaWYgc2VsZi5wdGFibGVfZm9ybWF0ID09ICdtc2RvcycgYW5kIHJlYWxudW0gPiAzOgorICAgICAgICAgICAgICAgICAgICAjIGFjY291bnQgZm9yIGxvZ2ljYWwgcGFydGl0aW9uIG51bWJlcmluZywgZXguIHNkYTUuLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhbG51bSArIDEKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVhbG51bQorCisgICAgZGVmIF93cml0ZV9mc3RhYihzZWxmLCBpbWFnZV9yb290ZnMpOgorICAgICAgICAiIiJvdmVycmlkZW4gdG8gZ2VuZXJhdGUgZnN0YWIgKHRlbXBvcmFyaWx5KSBpbiByb290ZnMuIFRoaXMgaXMgY2FsbGVkCisgICAgICAgIGZyb20gX2NyZWF0ZSwgbWFrZSBzdXJlIGl0IGRvZXNuJ3QgZ2V0IGNhbGxlZCBmcm9tCisgICAgICAgIEJhc2VJbWFnZS5jcmVhdGUoKQorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGltYWdlX3Jvb3RmczoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZzdGFiX3BhdGggPSBpbWFnZV9yb290ZnMgKyAiL2V0Yy9mc3RhYiIKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGZzdGFiX3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgd2l0aCBvcGVuKGZzdGFiX3BhdGgpIGFzIGZzdGFiOgorICAgICAgICAgICAgZnN0YWJfbGluZXMgPSBmc3RhYi5yZWFkbGluZXMoKQorCisgICAgICAgIGlmIHNlbGYuX3VwZGF0ZV9mc3RhYihmc3RhYl9saW5lcywgc2VsZi5fZ2V0X3BhcnRzKCkpOgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKGZzdGFiX3BhdGgsIGZzdGFiX3BhdGggKyAiLm9yaWciKQorCisgICAgICAgICAgICB3aXRoIG9wZW4oZnN0YWJfcGF0aCwgInciKSBhcyBmc3RhYjoKKyAgICAgICAgICAgICAgICBmc3RhYi53cml0ZWxpbmVzKGZzdGFiX2xpbmVzKQorCisgICAgICAgICAgICByZXR1cm4gZnN0YWJfcGF0aAorCisgICAgZGVmIF91cGRhdGVfZnN0YWIoc2VsZiwgZnN0YWJfbGluZXMsIHBhcnRzKToKKyAgICAgICAgIiIiQXNzdW1lIHBhcnRpdGlvbiBvcmRlciBzYW1lIGFzIGluIHdrcyIiIgorICAgICAgICB1cGRhdGVkID0gRmFsc2UKKyAgICAgICAgZm9yIG51bSwgcGFydCBpbiBlbnVtZXJhdGUocGFydHMsIDEpOgorICAgICAgICAgICAgcG51bSA9IHNlbGYuX19nZXRfcGFydF9udW0obnVtLCBwYXJ0cykKKyAgICAgICAgICAgIGlmIG5vdCBwbnVtIG9yIG5vdCBwYXJ0Lm1vdW50cG9pbnQgXAorICAgICAgICAgICAgICAgb3IgcGFydC5tb3VudHBvaW50IGluICgiLyIsICIvYm9vdCIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgbW1jIGRldmljZSBwYXJ0aXRpb25zIGFyZSBuYW1lZCBtbWNibGswcDEsIG1tY2JsazBwMi4uCisgICAgICAgICAgICBwcmVmaXggPSAncCcgaWYgIHBhcnQuZGlzay5zdGFydHN3aXRoKCdtbWNibGsnKSBlbHNlICcnCisgICAgICAgICAgICBkZXZpY2VfbmFtZSA9ICIvZGV2LyVzJXMlZCIgJSAocGFydC5kaXNrLCBwcmVmaXgsIHBudW0pCisKKyAgICAgICAgICAgIG9wdHMgPSBwYXJ0LmZzb3B0cyBpZiBwYXJ0LmZzb3B0cyBlbHNlICJkZWZhdWx0cyIKKyAgICAgICAgICAgIGxpbmUgPSAiXHQiLmpvaW4oW2RldmljZV9uYW1lLCBwYXJ0Lm1vdW50cG9pbnQsIHBhcnQuZnN0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cywgIjAiLCAiMCJdKSArICJcbiIKKworICAgICAgICAgICAgZnN0YWJfbGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICB1cGRhdGVkID0gVHJ1ZQorCisgICAgICAgIHJldHVybiB1cGRhdGVkCisKKyAgICBkZWYgc2V0X2Jvb3RpbWdfZGlyKHNlbGYsIGJvb3RpbWdfZGlyKToKKyAgICAgICAgIiIiCisgICAgICAgIEFjY2Vzc29yIGZvciBib290aW1nX2RpciwgdGhlIGFjdHVhbCBsb2NhdGlvbiB1c2VkIGZvciB0aGUgc291cmNlCisgICAgICAgIG9mIHRoZSBib290aW1nLiAgU2hvdWxkIGJlIHNldCBieSBzb3VyY2UgcGx1Z2lucyAob25seSBpZiB0aGV5CisgICAgICAgIGNoYW5nZSB0aGUgZGVmYXVsdCBib290aW1nIHNvdXJjZSkgc28gdGhlIGNvcnJlY3QgaW5mbyBnZXRzCisgICAgICAgIGRpc3BsYXllZCBmb3IgcHJpbnRfb3V0aW1hZ2VfaW5mbygpLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5ib290aW1nX2RpciA9IGJvb3RpbWdfZGlyCisKKyAgICBkZWYgX2dldF9wYXJ0cyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYua3M6CisgICAgICAgICAgICByYWlzZSBDcmVhdG9yRXJyb3IoIkZhaWxlZCB0byBnZXQgcGFydGl0aW9uIGluZm8sICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGxlYXNlIGNoZWNrIHlvdXIga2lja3N0YXJ0IHNldHRpbmcuIikKKworICAgICAgICAjIFNldCBhIGRlZmF1bHQgcGFydGl0aW9uIGlmIG5vIHBhcnRpdGlvbiBpcyBnaXZlbiBvdXQKKyAgICAgICAgaWYgbm90IHNlbGYua3MuaGFuZGxlci5wYXJ0aXRpb24ucGFydGl0aW9uczoKKyAgICAgICAgICAgIHBhcnRzdHIgPSAicGFydCAvIC0tc2l6ZSAxOTAwIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQzIgorICAgICAgICAgICAgYXJncyA9IHBhcnRzdHIuc3BsaXQoKQorICAgICAgICAgICAgcGFydCA9IHNlbGYua3MuaGFuZGxlci5wYXJ0aXRpb24ucGFyc2UoYXJnc1sxOl0pCisgICAgICAgICAgICBpZiBwYXJ0IG5vdCBpbiBzZWxmLmtzLmhhbmRsZXIucGFydGl0aW9uLnBhcnRpdGlvbnM6CisgICAgICAgICAgICAgICAgc2VsZi5rcy5oYW5kbGVyLnBhcnRpdGlvbi5wYXJ0aXRpb25zLmFwcGVuZChwYXJ0KQorCisgICAgICAgICMgcGFydGl0aW9ucyBsaXN0IGZyb20ga2lja3N0YXJ0IGZpbGUKKyAgICAgICAgcmV0dXJuIGtpY2tzdGFydC5nZXRfcGFydGl0aW9ucyhzZWxmLmtzKQorCisgICAgZGVmIGdldF9kaXNrX25hbWVzKHNlbGYpOgorICAgICAgICAiIiIgUmV0dXJucyBhIGxpc3Qgb2YgcGh5c2ljYWwgdGFyZ2V0IGRpc2sgbmFtZXMgKGUuZy4sICdzZGInKSB3aGljaAorICAgICAgICB3aWxsIGJlIGNyZWF0ZWQuICIiIgorCisgICAgICAgIGlmIHNlbGYuX2Rpc2tfbmFtZXM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGlza19uYW1lcworCisgICAgICAgICNnZXQgcGFydGl0aW9uIGluZm8gZnJvbSBrcyBoYW5kbGVyCisgICAgICAgIHBhcnRzID0gc2VsZi5fZ2V0X3BhcnRzKCkKKworICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocGFydHMpKToKKyAgICAgICAgICAgIGlmIHBhcnRzW2ldLmRpc2s6CisgICAgICAgICAgICAgICAgZGlza19uYW1lID0gcGFydHNbaV0uZGlzaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBDcmVhdG9yRXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgZGlza3MsIG5vIC0tb25kaXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwZWNpZmllZCBpbiBwYXJ0aXRpb24gbGluZSBvZiBrcyBmaWxlIikKKworICAgICAgICAgICAgaWYgcGFydHNbaV0ubW91bnRwb2ludCBhbmQgbm90IHBhcnRzW2ldLmZzdHlwZToKKyAgICAgICAgICAgICAgICByYWlzZSBDcmVhdG9yRXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgZGlza3MsIG5vIC0tZnN0eXBlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwZWNpZmllZCBmb3IgcGFydGl0aW9uIHdpdGggbW91bnRwb2ludCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIGluIHRoZSBrcyBmaWxlIikKKworICAgICAgICAgICAgc2VsZi5fZGlza19uYW1lcy5hcHBlbmQoZGlza19uYW1lKQorCisgICAgICAgIHJldHVybiBzZWxmLl9kaXNrX25hbWVzCisKKyAgICBkZWYgX2Z1bGxfbmFtZShzZWxmLCBuYW1lLCBleHRlbnRpb24pOgorICAgICAgICAiIiIgQ29uc3RydWN0IGZ1bGwgZmlsZSBuYW1lIGZvciBhIGZpbGUgd2UgZ2VuZXJhdGUuICIiIgorICAgICAgICByZXR1cm4gIiVzLSVzLiVzIiAlIChzZWxmLm5hbWUsIG5hbWUsIGV4dGVudGlvbikKKworICAgIGRlZiBfZnVsbF9wYXRoKHNlbGYsIHBhdGgsIG5hbWUsIGV4dGVudGlvbik6CisgICAgICAgICIiIiBDb25zdHJ1Y3QgZnVsbCBmaWxlIHBhdGggdG8gYSBmaWxlIHdlIGdlbmVyYXRlLiAiIiIKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwYXRoLCBzZWxmLl9mdWxsX25hbWUobmFtZSwgZXh0ZW50aW9uKSkKKworICAgIGRlZiBnZXRfZGVmYXVsdF9zb3VyY2VfcGx1Z2luKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIGRlZmF1bHQgc291cmNlIHBsdWdpbiBpLmUuIHRoZSBwbHVnaW4gdGhhdCdzIGNvbnN1bHRlZCBmb3IKKyAgICAgICAgb3ZlcmFsbCBpbWFnZSBnZW5lcmF0aW9uIHRhc2tzIG91dHNpZGUgb2YgYW55IHBhcnRpY3VsYXIKKyAgICAgICAgcGFydGl0aW9uLiAgRm9yIGNvbnZlbmllbmNlLCB3ZSBqdXN0IGhhbmcgaXQgb2ZmIHRoZQorICAgICAgICBib290bG9hZGVyIGhhbmRsZXIgc2luY2UgaXQncyB0aGUgb25lIG5vbi1wYXJ0aXRpb24gb2JqZWN0IGluCisgICAgICAgIGFueSBzZXR1cC4gIEJ5IGRlZmF1bHQgdGhlIGRlZmF1bHQgcGx1Z2luIGlzIHNldCB0byB0aGUgc2FtZQorICAgICAgICBwbHVnaW4gYXMgdGhlIC9ib290IHBhcnRpdGlvbjsgc2luY2Ugd2UgaGFuZyBpdCBvZmYgdGhlCisgICAgICAgIGJvb3Rsb2FkZXIgb2JqZWN0LCB0aGUgZGVmYXVsdCBjYW4gYmUgZXhwbGljaXRseSBzZXQgdXNpbmcgdGhlCisgICAgICAgIC0tc291cmNlIGJvb3Rsb2FkZXIgcGFyYW0uCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5rcy5oYW5kbGVyLmJvb3Rsb2FkZXIuc291cmNlCisKKyAgICAjCisgICAgIyBBY3R1YWwgaW1wbGVtZW50aW9uCisgICAgIworICAgIGRlZiBfY3JlYXRlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgRm9yICd3aWMnLCB3ZSBhbHJlYWR5IGhhdmUgb3VyIGJ1aWxkIGFydGlmYWN0cyAtIHdlIGp1c3QgY3JlYXRlCisgICAgICAgIGZpbGVzeXN0ZW1zIGZyb20gdGhlIGFydGlmYWN0cyBkaXJlY3RseSBhbmQgY29tYmluZSB0aGVtIGludG8KKyAgICAgICAgYSBwYXJ0aXRpb25lZCBpbWFnZS4KKyAgICAgICAgIiIiCisgICAgICAgIHBhcnRzID0gc2VsZi5fZ2V0X3BhcnRzKCkKKworICAgICAgICBzZWxmLl9faW1hZ2UgPSBJbWFnZShzZWxmLm5hdGl2ZV9zeXNyb290KQorCisgICAgICAgIGZvciBwYXJ0IGluIHBhcnRzOgorICAgICAgICAgICAgIyBhcyBhIGNvbnZlbmllbmNlLCBzZXQgc291cmNlIHRvIHRoZSBib290IHBhcnRpdGlvbiBzb3VyY2UKKyAgICAgICAgICAgICMgaW5zdGVhZCBvZiBmb3JjaW5nIGl0IHRvIGJlIHNldCB2aWEgYm9vdGxvYWRlciAtLXNvdXJjZQorICAgICAgICAgICAgaWYgbm90IHNlbGYua3MuaGFuZGxlci5ib290bG9hZGVyLnNvdXJjZSBhbmQgcGFydC5tb3VudHBvaW50ID09ICIvYm9vdCI6CisgICAgICAgICAgICAgICAgc2VsZi5rcy5oYW5kbGVyLmJvb3Rsb2FkZXIuc291cmNlID0gcGFydC5zb3VyY2UKKworICAgICAgICBmc3RhYl9wYXRoID0gc2VsZi5fd3JpdGVfZnN0YWIoc2VsZi5yb290ZnNfZGlyLmdldCgiUk9PVEZTX0RJUiIpKQorCisgICAgICAgIGZvciBwYXJ0IGluIHBhcnRzOgorICAgICAgICAgICAgIyBnZXQgcm9vdGZzIHNpemUgZnJvbSBiaXRiYWtlIHZhcmlhYmxlIGlmIGl0J3Mgbm90IHNldCBpbiAua3MgZmlsZQorICAgICAgICAgICAgaWYgbm90IHBhcnQuc2l6ZToKKyAgICAgICAgICAgICAgICAjIGFuZCBpZiByb290ZnMgbmFtZSBpcyBzcGVjaWZpZWQgZm9yIHRoZSBwYXJ0aXRpb24KKyAgICAgICAgICAgICAgICBpbWFnZV9uYW1lID0gcGFydC5nZXRfcm9vdGZzKCkKKyAgICAgICAgICAgICAgICBpZiBpbWFnZV9uYW1lOgorICAgICAgICAgICAgICAgICAgICAjIEJpdGJha2UgdmFyaWFibGUgUk9PVEZTX1NJWkUgaXMgY2FsY3VsYXRlZCBpbgorICAgICAgICAgICAgICAgICAgICAjIEltYWdlLl9nZXRfcm9vdGZzX3NpemUgbWV0aG9kIGZyb20gbWV0YS9saWIvb2UvaW1hZ2UucHkKKyAgICAgICAgICAgICAgICAgICAgIyB1c2luZyBJTUFHRV9ST09URlNfU0laRSwgSU1BR0VfUk9PVEZTX0FMSUdOTUVOVCwKKyAgICAgICAgICAgICAgICAgICAgIyBJTUFHRV9PVkVSSEVBRF9GQUNUT1IgYW5kIElNQUdFX1JPT1RGU19FWFRSQV9TUEFDRQorICAgICAgICAgICAgICAgICAgICByc2l6ZV9iYiA9IGdldF9iaXRiYWtlX3ZhcignUk9PVEZTX1NJWkUnLCBpbWFnZV9uYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiByc2l6ZV9iYjoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgY29udmVydCBmcm9tIEtiIHRvIE1iCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LnNpemUgPSBpbnQocm91bmQoZmxvYXQocnNpemVfYmIpIC8gMTAyNC4pKQorICAgICAgICAgICAgIyBuZWVkIHRvIGNyZWF0ZSB0aGUgZmlsZXN5c3RlbXMgaW4gb3JkZXIgdG8gZ2V0IHRoZWlyCisgICAgICAgICAgICAjIHNpemVzIGJlZm9yZSB3ZSBjYW4gYWRkIHRoZW0gYW5kIGRvIHRoZSBsYXlvdXQuCisgICAgICAgICAgICAjIEltYWdlLmNyZWF0ZSgpIGFjdHVhbGx5IGNhbGxzIF9fZm9ybWF0X2Rpc2tzKCkgdG8gY3JlYXRlCisgICAgICAgICAgICAjIHRoZSBkaXNrIGltYWdlcyBhbmQgY2FydmUgb3V0IHRoZSBwYXJ0aXRpb25zLCB0aGVuCisgICAgICAgICAgICAjIHNlbGYuYXNzZW1ibGUoKSBjYWxscyBJbWFnZS5hc3NlbWJsZSgpIHdoaWNoIGNhbGxzCisgICAgICAgICAgICAjIF9fd3JpdGVfcGFydGl0aXRpb24oKSBmb3IgZWFjaCBwYXJ0aXRpb24gdG8gZGQgdGhlIGZzCisgICAgICAgICAgICAjIGludG8gdGhlIHBhcnRpdGlvbnMuCisgICAgICAgICAgICBwYXJ0LnByZXBhcmUoc2VsZiwgc2VsZi53b3JrZGlyLCBzZWxmLm9lX2J1aWxkZGlyLCBzZWxmLnJvb3Rmc19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ib290aW1nX2Rpciwgc2VsZi5rZXJuZWxfZGlyLCBzZWxmLm5hdGl2ZV9zeXNyb290KQorCisKKyAgICAgICAgICAgIHNlbGYuX19pbWFnZS5hZGRfcGFydGl0aW9uKGludChwYXJ0LnNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydC5kaXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydC5tb3VudHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydC5zb3VyY2VfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQuZnN0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydC5sYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzb3B0cz1wYXJ0LmZzb3B0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3Q9cGFydC5hY3RpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbj1wYXJ0LmFsaWduLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9fdGFibGU9cGFydC5ub190YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRfdHlwZT1wYXJ0LnBhcnRfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV1aWQ9cGFydC51dWlkKQorCisgICAgICAgIGlmIGZzdGFiX3BhdGg6CisgICAgICAgICAgICBzaHV0aWwubW92ZShmc3RhYl9wYXRoICsgIi5vcmlnIiwgZnN0YWJfcGF0aCkKKworICAgICAgICBzZWxmLl9faW1hZ2UubGF5b3V0X3BhcnRpdGlvbnMoc2VsZi5wdGFibGVfZm9ybWF0KQorCisgICAgICAgIHNlbGYuX19pbWdkaXIgPSBzZWxmLndvcmtkaXIKKyAgICAgICAgZm9yIGRpc2tfbmFtZSwgZGlzayBpbiBzZWxmLl9faW1hZ2UuZGlza3MuaXRlbXMoKToKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9IHNlbGYuX2Z1bGxfcGF0aChzZWxmLl9faW1nZGlyLCBkaXNrX25hbWUsICJkaXJlY3QiKQorICAgICAgICAgICAgbXNnZXIuZGVidWcoIkFkZGluZyBkaXNrICVzIGFzICVzIHdpdGggc2l6ZSAlcyBieXRlcyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgJSAoZGlza19uYW1lLCBmdWxsX3BhdGgsIGRpc2tbJ21pbl9zaXplJ10pKQorICAgICAgICAgICAgZGlza19vYmogPSBmc19yZWxhdGVkLkRpc2tJbWFnZShmdWxsX3BhdGgsIGRpc2tbJ21pbl9zaXplJ10pCisgICAgICAgICAgICBzZWxmLl9fZGlza3NbZGlza19uYW1lXSA9IGRpc2tfb2JqCisgICAgICAgICAgICBzZWxmLl9faW1hZ2UuYWRkX2Rpc2soZGlza19uYW1lLCBkaXNrX29iaikKKworICAgICAgICBzZWxmLl9faW1hZ2UuY3JlYXRlKCkKKworICAgIGRlZiBhc3NlbWJsZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEFzc2VtYmxlIHBhcnRpdGlvbnMgaW50byBkaXNrIGltYWdlKHMpCisgICAgICAgICIiIgorICAgICAgICBmb3IgZGlza19uYW1lLCBkaXNrIGluIHNlbGYuX19pbWFnZS5kaXNrcy5pdGVtcygpOgorICAgICAgICAgICAgZnVsbF9wYXRoID0gc2VsZi5fZnVsbF9wYXRoKHNlbGYuX19pbWdkaXIsIGRpc2tfbmFtZSwgImRpcmVjdCIpCisgICAgICAgICAgICBtc2dlci5kZWJ1ZygiQXNzZW1ibGluZyBkaXNrICVzIGFzICVzIHdpdGggc2l6ZSAlcyBieXRlcyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgJSAoZGlza19uYW1lLCBmdWxsX3BhdGgsIGRpc2tbJ21pbl9zaXplJ10pKQorICAgICAgICAgICAgc2VsZi5fX2ltYWdlLmFzc2VtYmxlKGZ1bGxfcGF0aCkKKworICAgIGRlZiBmaW5hbGl6ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmFsaXplIHRoZSBkaXNrIGltYWdlLgorCisgICAgICAgIEZvciBleGFtcGxlLCBwcmVwYXJlIHRoZSBpbWFnZSB0byBiZSBib290YWJsZSBieSBlLmcuCisgICAgICAgIGNyZWF0aW5nIGFuZCBpbnN0YWxsaW5nIGEgYm9vdGxvYWRlciBjb25maWd1cmF0aW9uLgorCisgICAgICAgICIiIgorICAgICAgICBzb3VyY2VfcGx1Z2luID0gc2VsZi5nZXRfZGVmYXVsdF9zb3VyY2VfcGx1Z2luKCkKKyAgICAgICAgaWYgc291cmNlX3BsdWdpbjoKKyAgICAgICAgICAgIHNlbGYuX3NvdXJjZV9tZXRob2RzID0gcGx1Z2lubWdyLmdldF9zb3VyY2VfcGx1Z2luX21ldGhvZHMoc291cmNlX3BsdWdpbiwgZGlza19tZXRob2RzKQorICAgICAgICAgICAgZm9yIGRpc2tfbmFtZSwgZGlzayBpbiBzZWxmLl9faW1hZ2UuZGlza3MuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZWxmLl9zb3VyY2VfbWV0aG9kc1siZG9faW5zdGFsbF9kaXNrIl0oZGlzaywgZGlza19uYW1lLCBzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYm9vdGltZ19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYua2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uYXRpdmVfc3lzcm9vdCkKKyAgICAgICAgIyBDb21wcmVzcyB0aGUgaW1hZ2UKKyAgICAgICAgaWYgc2VsZi5jb21wcmVzc29yOgorICAgICAgICAgICAgZm9yIGRpc2tfbmFtZSwgZGlzayBpbiBzZWxmLl9faW1hZ2UuZGlza3MuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBmdWxsX3BhdGggPSBzZWxmLl9mdWxsX3BhdGgoc2VsZi5fX2ltZ2RpciwgZGlza19uYW1lLCAiZGlyZWN0IikKKyAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygiQ29tcHJlc3NpbmcgZGlzayAlcyB3aXRoICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlza19uYW1lLCBzZWxmLmNvbXByZXNzb3IpKQorICAgICAgICAgICAgICAgIGV4ZWNfY21kKCIlcyAlcyIgJSAoc2VsZi5jb21wcmVzc29yLCBmdWxsX3BhdGgpKQorCisgICAgZGVmIHByaW50X291dGltYWdlX2luZm8oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBQcmludCB0aGUgaW1hZ2UocykgYW5kIGFydGlmYWN0cyB1c2VkLCBmb3IgdGhlIHVzZXIuCisgICAgICAgICIiIgorICAgICAgICBtc2cgPSAiVGhlIG5ldyBpbWFnZShzKSBjYW4gYmUgZm91bmQgaGVyZTpcbiIKKworICAgICAgICBwYXJ0cyA9IHNlbGYuX2dldF9wYXJ0cygpCisKKyAgICAgICAgZm9yIGRpc2tfbmFtZSBpbiBzZWxmLl9faW1hZ2UuZGlza3M6CisgICAgICAgICAgICBleHRlbnNpb24gPSAiZGlyZWN0IiArIHsiZ3ppcCI6ICIuZ3oiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ6aXAyIjogIi5iejIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInh6IjogIi54eiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIjogIiJ9LmdldChzZWxmLmNvbXByZXNzb3IpCisgICAgICAgICAgICBmdWxsX3BhdGggPSBzZWxmLl9mdWxsX3BhdGgoc2VsZi5fX2ltZ2RpciwgZGlza19uYW1lLCBleHRlbnNpb24pCisgICAgICAgICAgICBtc2cgKz0gJyAgJXNcblxuJyAlIGZ1bGxfcGF0aAorCisgICAgICAgIG1zZyArPSAnVGhlIGZvbGxvd2luZyBidWlsZCBhcnRpZmFjdHMgd2VyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgaW1hZ2Uocyk6XG4nCisgICAgICAgIGZvciBwYXJ0IGluIHBhcnRzOgorICAgICAgICAgICAgaWYgcGFydC5nZXRfcm9vdGZzKCkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgcGFydC5tb3VudHBvaW50ID09ICcvJzoKKyAgICAgICAgICAgICAgICBzdWZmaXggPSAnOicKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3VmZml4ID0gJ1siJXMiXTonICUgKHBhcnQubW91bnRwb2ludCBvciBwYXJ0LmxhYmVsKQorICAgICAgICAgICAgbXNnICs9ICcgIFJPT1RGU19ESVIlcyVzXG4nICUgKHN1ZmZpeC5sanVzdCgyMCksIHBhcnQuZ2V0X3Jvb3RmcygpKQorCisgICAgICAgIG1zZyArPSAnICBCT09USU1HX0RJUjogICAgICAgICAgICAgICAgICAlc1xuJyAlIHNlbGYuYm9vdGltZ19kaXIKKyAgICAgICAgbXNnICs9ICcgIEtFUk5FTF9ESVI6ICAgICAgICAgICAgICAgICAgICVzXG4nICUgc2VsZi5rZXJuZWxfZGlyCisgICAgICAgIG1zZyArPSAnICBOQVRJVkVfU1lTUk9PVDogICAgICAgICAgICAgICAlc1xuJyAlIHNlbGYubmF0aXZlX3N5c3Jvb3QKKworICAgICAgICBtc2dlci5pbmZvKG1zZykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByb290ZGV2KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0IHJvb3QgZGV2aWNlIG5hbWUgdG8gdXNlIGFzIGEgJ3Jvb3QnIHBhcmFtZXRlcgorICAgICAgICBpbiBrZXJuZWwgY29tbWFuZCBsaW5lLgorCisgICAgICAgIEFzc3VtZSBwYXJ0aXRpb24gb3JkZXIgc2FtZSBhcyBpbiB3a3MKKyAgICAgICAgIiIiCisgICAgICAgIHBhcnRzID0gc2VsZi5fZ2V0X3BhcnRzKCkKKyAgICAgICAgZm9yIG51bSwgcGFydCBpbiBlbnVtZXJhdGUocGFydHMsIDEpOgorICAgICAgICAgICAgaWYgcGFydC5tb3VudHBvaW50ID09ICIvIjoKKyAgICAgICAgICAgICAgICBpZiBwYXJ0LnV1aWQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUEFSVFVVSUQ9JXMiICUgcGFydC51dWlkCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3VmZml4ID0gJ3AnIGlmIHBhcnQuZGlzay5zdGFydHN3aXRoKCdtbWNibGsnKSBlbHNlICcnCisgICAgICAgICAgICAgICAgICAgIHBudW0gPSBzZWxmLl9fZ2V0X3BhcnRfbnVtKG51bSwgcGFydHMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiL2Rldi8lcyVzJS1kIiAlIChwYXJ0LmRpc2ssIHN1ZmZpeCwgcG51bSkKKworICAgIGRlZiBfY2xlYW51cChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX19pbWFnZSBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX19pbWFnZS5jbGVhbnVwKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbWFnZUVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgbXNnZXIud2FybmluZygiJXMiICUgZXJyKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9raWNrc3RhcnQvX19pbml0X18ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9raWNrc3RhcnQvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliMGU1MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2tpY2tzdGFydC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDEyMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIC10dAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgUmVkIEhhdCwgSW5jLgorIyBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAsIDIwMTEgSW50ZWwsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisjIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisKK2ltcG9ydCBvcywgc3lzLCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzdHJpbmcKKworaW1wb3J0IHB5a2lja3N0YXJ0LnNlY3Rpb25zIGFzIGtzc2VjdGlvbnMKK2ltcG9ydCBweWtpY2tzdGFydC5jb21tYW5kcyBhcyBrc2NvbW1hbmRzCitpbXBvcnQgcHlraWNrc3RhcnQuY29uc3RhbnRzIGFzIGtzY29uc3RhbnRzCitpbXBvcnQgcHlraWNrc3RhcnQuZXJyb3JzIGFzIGtzZXJyb3JzCitpbXBvcnQgcHlraWNrc3RhcnQucGFyc2VyIGFzIGtzcGFyc2VyCitpbXBvcnQgcHlraWNrc3RhcnQudmVyc2lvbiBhcyBrc3ZlcnNpb24KK2Zyb20gcHlraWNrc3RhcnQuaGFuZGxlcnMuY29udHJvbCBpbXBvcnQgY29tbWFuZE1hcAorZnJvbSBweWtpY2tzdGFydC5oYW5kbGVycy5jb250cm9sIGltcG9ydCBkYXRhTWFwCisKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMudXRpbHMgaW1wb3J0IGVycm9ycywgbWlzYywgcnVubmVyLCBmc19yZWxhdGVkIGFzIGZzCitmcm9tIGN1c3RvbV9jb21tYW5kcyBpbXBvcnQgd2ljYm9vdCwgcGFydGl0aW9uCisKK2RlZiByZWFkX2tpY2tzdGFydChwYXRoKToKKyAgICAiIiJQYXJzZSBhIGtpY2tzdGFydCBmaWxlIGFuZCByZXR1cm4gYSBLaWNrc3RhcnRQYXJzZXIgaW5zdGFuY2UuCisKKyAgICBUaGlzIGlzIGEgc2ltcGxlIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggdGFrZXMgYSBwYXRoIHRvIGEga2lja3N0YXJ0IGZpbGUsCisgICAgcGFyc2VzIGl0IGFuZCByZXR1cm5zIGEgcHlraWNrc3RhcnQgS2lja3N0YXJ0UGFyc2VyIGluc3RhbmNlIHdoaWNoIGNhbgorICAgIGJlIHRoZW4gcGFzc2VkIHRvIGFuIEltYWdlQ3JlYXRvciBjb25zdHJ1Y3Rvci4KKworICAgIElmIGFuIGVycm9yIG9jY3VycywgYSBDcmVhdG9yRXJyb3IgZXhjZXB0aW9uIGlzIHRocm93bi4KKyAgICAiIiIKKworICAgICN2ZXJzaW9uID0ga3N2ZXJzaW9uLm1ha2VWZXJzaW9uKCkKKyAgICAja3MgPSBrc3BhcnNlci5LaWNrc3RhcnRQYXJzZXIodmVyc2lvbikKKworICAgIHVzaW5nX3ZlcnNpb24gPSBrc3ZlcnNpb24uREVWRUwKKyAgICBjb21tYW5kTWFwW3VzaW5nX3ZlcnNpb25dWyJib290bG9hZGVyIl0gPSB3aWNib290LldpY19Cb290bG9hZGVyCisgICAgY29tbWFuZE1hcFt1c2luZ192ZXJzaW9uXVsicGFydCJdID0gcGFydGl0aW9uLldpY19QYXJ0aXRpb24KKyAgICBjb21tYW5kTWFwW3VzaW5nX3ZlcnNpb25dWyJwYXJ0aXRpb24iXSA9IHBhcnRpdGlvbi5XaWNfUGFydGl0aW9uCisgICAgZGF0YU1hcFt1c2luZ192ZXJzaW9uXVsiUGFydERhdGEiXSA9IHBhcnRpdGlvbi5XaWNfUGFydERhdGEKKyAgICBzdXBlcmNsYXNzID0ga3N2ZXJzaW9uLnJldHVybkNsYXNzRm9yVmVyc2lvbih2ZXJzaW9uPXVzaW5nX3ZlcnNpb24pCisKKyAgICBjbGFzcyBLU0hhbmRsZXJzKHN1cGVyY2xhc3MpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzdXBlcmNsYXNzLl9faW5pdF9fKHNlbGYsIG1hcHBpbmc9Y29tbWFuZE1hcFt1c2luZ192ZXJzaW9uXSkKKworICAgIGtpY2tzdGFydCA9IGtzcGFyc2VyLktpY2tzdGFydFBhcnNlcihLU0hhbmRsZXJzKCksIGVycm9yc0FyZUZhdGFsPVRydWUpCisKKyAgICB0cnk6CisgICAgICAgIGtpY2tzdGFydC5yZWFkS2lja3N0YXJ0KHBhdGgpCisgICAgZXhjZXB0IChrc2Vycm9ycy5LaWNrc3RhcnRQYXJzZUVycm9yLCBrc2Vycm9ycy5LaWNrc3RhcnRFcnJvciksIGVycjoKKyAgICAgICAgbXNnZXIud2FybmluZygiRXJyb3JzIG9jY3VycmVkIHdoZW4gcGFyc2luZyBraWNrc3RhcnQgZmlsZTogJXNcbiIgJSBwYXRoKQorICAgICAgICBtc2dlci5lcnJvcigiJXMiICUgZXJyKQorCisgICAgcmV0dXJuIGtpY2tzdGFydAorCitkZWYgZ2V0X2ltYWdlX3NpemUoa2lja3N0YXJ0LCBkZWZhdWx0PU5vbmUpOgorICAgIF9fc2l6ZSA9IDAKKyAgICBmb3IgcGFydCBpbiBraWNrc3RhcnQuaGFuZGxlci5wYXJ0aXRpb24ucGFydGl0aW9uczoKKyAgICAgICAgaWYgcGFydC5tb3VudHBvaW50ID09ICIvIiBhbmQgcGFydC5zaXplOgorICAgICAgICAgICAgX19zaXplID0gcGFydC5zaXplCisgICAgaWYgX19zaXplID4gMDoKKyAgICAgICAgcmV0dXJuIGludChfX3NpemUpICogMTAyNEwKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorCitkZWYgZ2V0X2ltYWdlX2ZzdHlwZShraWNrc3RhcnQsIGRlZmF1bHQ9Tm9uZSk6CisgICAgZm9yIHBhcnQgaW4ga2lja3N0YXJ0LmhhbmRsZXIucGFydGl0aW9uLnBhcnRpdGlvbnM6CisgICAgICAgIGlmIHBhcnQubW91bnRwb2ludCA9PSAiLyIgYW5kIHBhcnQuZnN0eXBlOgorICAgICAgICAgICAgcmV0dXJuIHBhcnQuZnN0eXBlCisgICAgcmV0dXJuIGRlZmF1bHQKKworZGVmIGdldF9pbWFnZV9mc29wdHMoa2lja3N0YXJ0LCBkZWZhdWx0PU5vbmUpOgorICAgIGZvciBwYXJ0IGluIGtpY2tzdGFydC5oYW5kbGVyLnBhcnRpdGlvbi5wYXJ0aXRpb25zOgorICAgICAgICBpZiBwYXJ0Lm1vdW50cG9pbnQgPT0gIi8iIGFuZCBwYXJ0LmZzb3B0czoKKyAgICAgICAgICAgIHJldHVybiBwYXJ0LmZzb3B0cworICAgIHJldHVybiBkZWZhdWx0CisKK2RlZiBnZXRfdGltZW91dChraWNrc3RhcnQsIGRlZmF1bHQ9Tm9uZSk6CisgICAgaWYgbm90IGhhc2F0dHIoa2lja3N0YXJ0LmhhbmRsZXIuYm9vdGxvYWRlciwgInRpbWVvdXQiKToKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICBpZiBraWNrc3RhcnQuaGFuZGxlci5ib290bG9hZGVyLnRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICByZXR1cm4gaW50KGtpY2tzdGFydC5oYW5kbGVyLmJvb3Rsb2FkZXIudGltZW91dCkKKworZGVmIGdldF9rZXJuZWxfYXJncyhraWNrc3RhcnQsIGRlZmF1bHQ9InJvIHJkLmxpdmUuaW1hZ2UiKToKKyAgICBpZiBub3QgaGFzYXR0cihraWNrc3RhcnQuaGFuZGxlci5ib290bG9hZGVyLCAiYXBwZW5kTGluZSIpOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIGlmIGtpY2tzdGFydC5oYW5kbGVyLmJvb3Rsb2FkZXIuYXBwZW5kTGluZSBpcyBOb25lOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIHJldHVybiAiJXMgJXMiICUoZGVmYXVsdCwga2lja3N0YXJ0LmhhbmRsZXIuYm9vdGxvYWRlci5hcHBlbmRMaW5lKQorCitkZWYgZ2V0X21lbnVfYXJncyhraWNrc3RhcnQsIGRlZmF1bHQ9IiIpOgorICAgIGlmIG5vdCBoYXNhdHRyKGtpY2tzdGFydC5oYW5kbGVyLmJvb3Rsb2FkZXIsICJtZW51cyIpOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIGlmIGtpY2tzdGFydC5oYW5kbGVyLmJvb3Rsb2FkZXIubWVudXMgaW4gKE5vbmUsICIiKToKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICByZXR1cm4gIiVzIiAlIGtpY2tzdGFydC5oYW5kbGVyLmJvb3Rsb2FkZXIubWVudXMKKworZGVmIGdldF9kZWZhdWx0X2tlcm5lbChraWNrc3RhcnQsIGRlZmF1bHQ9Tm9uZSk6CisgICAgaWYgbm90IGhhc2F0dHIoa2lja3N0YXJ0LmhhbmRsZXIuYm9vdGxvYWRlciwgImRlZmF1bHQiKToKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICBpZiBub3Qga2lja3N0YXJ0LmhhbmRsZXIuYm9vdGxvYWRlci5kZWZhdWx0OgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIHJldHVybiBraWNrc3RhcnQuaGFuZGxlci5ib290bG9hZGVyLmRlZmF1bHQKKworZGVmIGdldF9wYXJ0aXRpb25zKGtpY2tzdGFydCk6CisgICAgcmV0dXJuIGtpY2tzdGFydC5oYW5kbGVyLnBhcnRpdGlvbi5wYXJ0aXRpb25zCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9raWNrc3RhcnQvY3VzdG9tX2NvbW1hbmRzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMva2lja3N0YXJ0L2N1c3RvbV9jb21tYW5kcy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGFlNDA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMva2lja3N0YXJ0L2N1c3RvbV9jb21tYW5kcy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDcgQEAKK2Zyb20gcGFydGl0aW9uIGltcG9ydCBXaWNfUGFydGl0aW9uCitmcm9tIHBhcnRpdGlvbiBpbXBvcnQgV2ljX1BhcnREYXRhCisKK19fYWxsX18gPSAoCisgICAgIldpY19QYXJ0aXRpb24iLAorICAgICJXaWNfUGFydERhdGEiLAorKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMva2lja3N0YXJ0L2N1c3RvbV9jb21tYW5kcy9wYXJ0aXRpb24ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9raWNrc3RhcnQvY3VzdG9tX2NvbW1hbmRzL3BhcnRpdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWUyNWE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMva2lja3N0YXJ0L2N1c3RvbV9jb21tYW5kcy9wYXJ0aXRpb24ucHkKQEAgLTAsMCArMSw1MjYgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxMywgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgT3BlbkVtYmVkZGVkIHBhcnRpdGlvbiBvYmplY3QgZGVmaW5pdGlvbnMuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gbGludXguaW50ZWwuY29tPgorIworCitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHV1aWQKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblZhbHVlRXJyb3IKKworZnJvbSBweWtpY2tzdGFydC5jb21tYW5kcy5wYXJ0aXRpb24gaW1wb3J0IEZDNF9QYXJ0RGF0YSwgRkM0X1BhcnRpdGlvbgorZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgbXNnZXIsIHBhcnNlX3NvdXJjZXBhcmFtcworZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZXhlY19jbWQsIGV4ZWNfbmF0aXZlX2NtZAorZnJvbSB3aWMucGx1Z2luIGltcG9ydCBwbHVnaW5tZ3IKKworcGFydGl0aW9uX21ldGhvZHMgPSB7CisgICAgImRvX3N0YWdlX3BhcnRpdGlvbiI6Tm9uZSwKKyAgICAiZG9fcHJlcGFyZV9wYXJ0aXRpb24iOk5vbmUsCisgICAgImRvX2NvbmZpZ3VyZV9wYXJ0aXRpb24iOk5vbmUsCit9CisKK2NsYXNzIFdpY19QYXJ0RGF0YShGQzRfUGFydERhdGEpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEZDNF9QYXJ0RGF0YS5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBGQzRfUGFydERhdGEucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgRkM0X1BhcnREYXRhLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5kZWxldGVSZW1vdmVkQXR0cnMoKQorICAgICAgICBzZWxmLmFsaWduID0ga3dhcmdzLmdldCgiYWxpZ24iLCBOb25lKQorICAgICAgICBzZWxmLmV4dG9wdHMgPSBrd2FyZ3MuZ2V0KCJleHRvcHRzIiwgTm9uZSkKKyAgICAgICAgc2VsZi5wYXJ0X3R5cGUgPSBrd2FyZ3MuZ2V0KCJwYXJ0X3R5cGUiLCBOb25lKQorICAgICAgICBzZWxmLnNvdXJjZSA9IGt3YXJncy5nZXQoInNvdXJjZSIsIE5vbmUpCisgICAgICAgIHNlbGYuc291cmNlcGFyYW1zID0ga3dhcmdzLmdldCgic291cmNlcGFyYW1zIiwgTm9uZSkKKyAgICAgICAgc2VsZi5yb290ZnMgPSBrd2FyZ3MuZ2V0KCJyb290ZnMtZGlyIiwgTm9uZSkKKyAgICAgICAgc2VsZi5ub190YWJsZSA9IGt3YXJncy5nZXQoIm5vLXRhYmxlIiwgRmFsc2UpCisgICAgICAgIHNlbGYuZXh0cmFfc3BhY2UgPSBrd2FyZ3MuZ2V0KCJleHRyYS1zcGFjZSIsICIxME0iKQorICAgICAgICBzZWxmLm92ZXJoZWFkX2ZhY3RvciA9IGt3YXJncy5nZXQoIm92ZXJoZWFkLWZhY3RvciIsIDEuMykKKyAgICAgICAgc2VsZi5fdXNlX3V1aWQgPSBGYWxzZQorICAgICAgICBzZWxmLnV1aWQgPSBrd2FyZ3MuZ2V0KCJ1dWlkIiwgTm9uZSkKKyAgICAgICAgc2VsZi51c2VfdXVpZCA9IGt3YXJncy5nZXQoInVzZS11dWlkIiwgRmFsc2UpCisgICAgICAgIHNlbGYuc291cmNlX2ZpbGUgPSAiIgorICAgICAgICBzZWxmLnNpemUgPSAwCisKKyAgICBkZWYgX2dldEFyZ3NBc1N0cihzZWxmKToKKyAgICAgICAgcmV0dmFsID0gRkM0X1BhcnREYXRhLl9nZXRBcmdzQXNTdHIoc2VsZikKKworICAgICAgICBpZiBzZWxmLmFsaWduOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1hbGlnbj0lZCIgJSBzZWxmLmFsaWduCisgICAgICAgIGlmIHNlbGYuZXh0b3B0czoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tZXh0b3B0aW9ucz0lcyIgJSBzZWxmLmV4dG9wdHMKKyAgICAgICAgaWYgc2VsZi5wYXJ0X3R5cGU6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXBhcnQtdHlwZT0lcyIgJSBzZWxmLnBhcnRfdHlwZQorICAgICAgICBpZiBzZWxmLnNvdXJjZToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tc291cmNlPSVzIiAlIHNlbGYuc291cmNlCisgICAgICAgICAgICBpZiBzZWxmLnNvdXJjZXBhcmFtczoKKyAgICAgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXNvdXJjZXBhcmFtcz0lcyIgJSBzZWxmLnNvdXJjZXBhcmFtcworICAgICAgICAgICAgaWYgc2VsZi5yb290ZnM6CisgICAgICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1yb290ZnMtZGlyPSVzIiAlIHNlbGYucm9vdGZzCisgICAgICAgIGlmIHNlbGYubm9fdGFibGU6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLW5vLXRhYmxlIgorICAgICAgICBpZiBzZWxmLnVzZV91dWlkOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS11c2UtdXVpZCIKKyAgICAgICAgaWYgc2VsZi51dWlkOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS11dWlkPSVzIiAlIHNlbGYudXVpZAorICAgICAgICByZXR2YWwgKz0gIiAtLWV4dHJhLXNwYWNlPSVzIiAlIHNlbGYuZXh0cmFfc3BhY2UKKyAgICAgICAgcmV0dmFsICs9ICIgLS1vdmVyaGVhZC1mYWN0b3I9JWYiICUgc2VsZi5vdmVyaGVhZF9mYWN0b3IKKworICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdXNlX3V1aWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl91c2VfdXVpZAorCisgICAgQHVzZV91dWlkLnNldHRlcgorICAgIGRlZiB1c2VfdXVpZChzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3VzZV91dWlkID0gdmFsdWUKKyAgICAgICAgaWYgdmFsdWUgYW5kIG5vdCBzZWxmLnV1aWQ6CisgICAgICAgICAgICBzZWxmLnV1aWQgPSBzdHIodXVpZC51dWlkNCgpKQorCisgICAgZGVmIGdldF9yb290ZnMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBBY2Vzc29yIGZvciByb290ZnMgZGlyCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5yb290ZnMKKworICAgIGRlZiBzZXRfcm9vdGZzKHNlbGYsIHJvb3Rmcyk6CisgICAgICAgICIiIgorICAgICAgICBBY2Vzc29yIGZvciBhY3R1YWwgcm9vdGZzIGRpciwgd2hpY2ggbXVzdCBiZSBzZXQgYnkgc291cmNlCisgICAgICAgIHBsdWdpbnMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnJvb3RmcyA9IHJvb3RmcworCisgICAgZGVmIGdldF9zaXplKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQWNjZXNzb3IgZm9yIHBhcnRpdGlvbiBzaXplLCAwIG9yIC0tc2l6ZSBiZWZvcmUgc2V0X3NpemUoKS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLnNpemUKKworICAgIGRlZiBzZXRfc2l6ZShzZWxmLCBzaXplKToKKyAgICAgICAgIiIiCisgICAgICAgIEFjY2Vzc29yIGZvciBhY3R1YWwgcGFydGl0aW9uIHNpemUsIHdoaWNoIG11c3QgYmUgc2V0IGJ5IHNvdXJjZQorICAgICAgICBwbHVnaW5zLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zaXplID0gc2l6ZQorCisgICAgZGVmIHNldF9zb3VyY2VfZmlsZShzZWxmLCBzb3VyY2VfZmlsZSk6CisgICAgICAgICIiIgorICAgICAgICBBY2Nlc3NvciBmb3Igc291cmNlX2ZpbGUsIHRoZSBsb2NhdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIHBhcnRpdGlvbgorICAgICAgICBpbWFnZSwgd2hpY2ggbXVzdCBiZSBzZXQgYnkgc291cmNlIHBsdWdpbnMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnNvdXJjZV9maWxlID0gc291cmNlX2ZpbGUKKworICAgIGRlZiBnZXRfZXh0cmFfYmxvY2tfY291bnQoc2VsZiwgY3VycmVudF9ibG9ja3MpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIC0tc2l6ZSBwYXJhbSBpcyByZWZsZWN0ZWQgaW4gc2VsZi5zaXplIChpbiBrQiksIGFuZCB3ZSBhbHJlYWR5CisgICAgICAgIGhhdmUgY3VycmVudF9ibG9ja3MgKDFrKSBibG9ja3MsIGNhbGN1bGF0ZSBhbmQgcmV0dXJuIHRoZQorICAgICAgICBudW1iZXIgb2YgKDFrKSBibG9ja3Mgd2UgbmVlZCB0byBhZGQgdG8gZ2V0IHRvIC0tc2l6ZSwgMCBpZgorICAgICAgICB3ZSdyZSBhbHJlYWR5IHRoZXJlIG9yIGJleW9uZC4KKyAgICAgICAgIiIiCisgICAgICAgIG1zZ2VyLmRlYnVnKCJSZXF1ZXN0ZWQgcGFydGl0aW9uIHNpemUgZm9yICVzOiAlZCIgJSBcCisgICAgICAgICAgICAgICAgICAgIChzZWxmLm1vdW50cG9pbnQsIHNlbGYuc2l6ZSkpCisKKyAgICAgICAgaWYgbm90IHNlbGYuc2l6ZToKKyAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgcmVxdWVzdGVkX2Jsb2NrcyA9IHNlbGYuc2l6ZQorCisgICAgICAgIG1zZ2VyLmRlYnVnKCJSZXF1ZXN0ZWQgYmxvY2tzICVkLCBjdXJyZW50X2Jsb2NrcyAlZCIgJSBcCisgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0ZWRfYmxvY2tzLCBjdXJyZW50X2Jsb2NrcykpCisKKyAgICAgICAgaWYgcmVxdWVzdGVkX2Jsb2NrcyA+IGN1cnJlbnRfYmxvY2tzOgorICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RlZF9ibG9ja3MgLSBjdXJyZW50X2Jsb2NrcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBwcmVwYXJlKHNlbGYsIGNyZWF0b3IsIGNyX3dvcmtkaXIsIG9lX2J1aWxkZGlyLCByb290ZnNfZGlyLCBib290aW1nX2RpciwKKyAgICAgICAgICAgICAgICBrZXJuZWxfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGNvbnRlbnQgZm9yIGluZGl2aWR1YWwgcGFydGl0aW9ucywgZGVwZW5kaW5nIG9uCisgICAgICAgIHBhcnRpdGlvbiBjb21tYW5kIHBhcmFtZXRlcnMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnNvdXJjZXBhcmFtc19kaWN0ID0ge30KKworICAgICAgICBpZiBzZWxmLnNvdXJjZXBhcmFtczoKKyAgICAgICAgICAgIHNlbGYuc291cmNlcGFyYW1zX2RpY3QgPSBwYXJzZV9zb3VyY2VwYXJhbXMoc2VsZi5zb3VyY2VwYXJhbXMpCisKKyAgICAgICAgaWYgbm90IHNlbGYuc291cmNlOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuc2l6ZToKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiVGhlICVzIHBhcnRpdGlvbiBoYXMgYSBzaXplIG9mIHplcm8uICBQbGVhc2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGVjaWZ5IGEgbm9uLXplcm8gLS1zaXplIGZvciB0aGF0IHBhcnRpdGlvbi4iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW91bnRwb2ludCkKKyAgICAgICAgICAgIGlmIHNlbGYuZnN0eXBlIGFuZCBzZWxmLmZzdHlwZSA9PSAic3dhcCI6CisgICAgICAgICAgICAgICAgc2VsZi5wcmVwYXJlX3N3YXBfcGFydGl0aW9uKGNyX3dvcmtkaXIsIG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5mc3R5cGU6CisgICAgICAgICAgICAgICAgcm9vdGZzID0gIiVzL2ZzXyVzLiVzLiVzIiAlIChjcl93b3JrZGlyLCBzZWxmLmxhYmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYuZnN0eXBlKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHJvb3Rmcyk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShyb290ZnMpCisgICAgICAgICAgICAgICAgZm9yIHByZWZpeCBpbiAoImV4dCIsICJidHJmcyIsICJ2ZmF0IiwgInNxdWFzaGZzIik6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZnN0eXBlLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZXBhcmVfZW1wdHlfcGFydGl0aW9uXyIgKyBwcmVmaXgpCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Qocm9vdGZzLCBvZV9idWlsZGRpciwgbmF0aXZlX3N5c3Jvb3QpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZV9maWxlID0gcm9vdGZzCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcGx1Z2lucyA9IHBsdWdpbm1nci5nZXRfc291cmNlX3BsdWdpbnMoKQorCisgICAgICAgIGlmIHNlbGYuc291cmNlIG5vdCBpbiBwbHVnaW5zOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoIlRoZSAnJXMnIC0tc291cmNlIHNwZWNpZmllZCBmb3IgJXMgZG9lc24ndCBleGlzdC5cblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgIlNlZSAnd2ljIGxpc3Qgc291cmNlLXBsdWdpbnMnIGZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAtLXNvdXJjZXMuXG5cdFNlZSAnd2ljIGhlbHAgc291cmNlLXBsdWdpbnMnIGZvciAiCisgICAgICAgICAgICAgICAgICAgICAgICAiZGV0YWlscyBvbiBhZGRpbmcgYSBuZXcgc291cmNlIHBsdWdpbi4iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuc291cmNlLCBzZWxmLm1vdW50cG9pbnQpKQorCisgICAgICAgIHNlbGYuX3NvdXJjZV9tZXRob2RzID0gcGx1Z2lubWdyLmdldF9zb3VyY2VfcGx1Z2luX21ldGhvZHMoXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZSwgcGFydGl0aW9uX21ldGhvZHMpCisgICAgICAgIHNlbGYuX3NvdXJjZV9tZXRob2RzWyJkb19jb25maWd1cmVfcGFydGl0aW9uIl0oc2VsZiwgc2VsZi5zb3VyY2VwYXJhbXNfZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdG9yLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpCisgICAgICAgIHNlbGYuX3NvdXJjZV9tZXRob2RzWyJkb19zdGFnZV9wYXJ0aXRpb24iXShzZWxmLCBzZWxmLnNvdXJjZXBhcmFtc19kaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRvciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCkKKyAgICAgICAgc2VsZi5fc291cmNlX21ldGhvZHNbImRvX3ByZXBhcmVfcGFydGl0aW9uIl0oc2VsZiwgc2VsZi5zb3VyY2VwYXJhbXNfZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRvciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLCByb290ZnNfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCkKKworICAgIGRlZiBwcmVwYXJlX3Jvb3Rmc19mcm9tX2ZzX2ltYWdlKHNlbGYsIGNyX3dvcmtkaXIsIG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Rmc19kaXIpOgorICAgICAgICAiIiIKKyAgICAgICAgSGFuZGxlIGFuIGFscmVhZHktY3JlYXRlZCBwYXJ0aXRpb24gZS5nLiB4eHguZXh0MworICAgICAgICAiIiIKKyAgICAgICAgcm9vdGZzID0gb2VfYnVpbGRkaXIKKyAgICAgICAgZHVfY21kID0gImR1IC1MYmtzICVzIiAlIHJvb3RmcworICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgIHJvb3Rmc19zaXplID0gb3V0LnNwbGl0KClbMF0KKworICAgICAgICBzZWxmLnNpemUgPSByb290ZnNfc2l6ZQorICAgICAgICBzZWxmLnNvdXJjZV9maWxlID0gcm9vdGZzCisKKyAgICBkZWYgcHJlcGFyZV9yb290ZnMoc2VsZiwgY3Jfd29ya2Rpciwgb2VfYnVpbGRkaXIsIHJvb3Rmc19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIFByZXBhcmUgY29udGVudCBmb3IgYSByb290ZnMgcGFydGl0aW9uIGkuZS4gY3JlYXRlIGEgcGFydGl0aW9uCisgICAgICAgIGFuZCBmaWxsIGl0IGZyb20gYSAvcm9vdGZzIGRpci4KKworICAgICAgICBDdXJyZW50bHkgaGFuZGxlcyBleHQyLzMvNCwgYnRyZnMgYW5kIHZmYXQuCisgICAgICAgICIiIgorICAgICAgICBwX3ByZWZpeCA9IG9zLmVudmlyb24uZ2V0KCJQU0VVRE9fUFJFRklYIiwgIiVzL3VzciIgJSBuYXRpdmVfc3lzcm9vdCkKKyAgICAgICAgcF9sb2NhbHN0YXRlZGlyID0gb3MuZW52aXJvbi5nZXQoIlBTRVVET19MT0NBTFNUQVRFRElSIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzLy4uL3BzZXVkbyIgJSByb290ZnNfZGlyKQorICAgICAgICBwX3Bhc3N3ZCA9IG9zLmVudmlyb24uZ2V0KCJQU0VVRE9fUEFTU1dEIiwgcm9vdGZzX2RpcikKKyAgICAgICAgcF9ub3N5bWxpbmtleHAgPSBvcy5lbnZpcm9uLmdldCgiUFNFVURPX05PU1lNTElOS0VYUCIsICIxIikKKyAgICAgICAgcHNldWRvID0gImV4cG9ydCBQU0VVRE9fUFJFRklYPSVzOyIgJSBwX3ByZWZpeAorICAgICAgICBwc2V1ZG8gKz0gImV4cG9ydCBQU0VVRE9fTE9DQUxTVEFURURJUj0lczsiICUgcF9sb2NhbHN0YXRlZGlyCisgICAgICAgIHBzZXVkbyArPSAiZXhwb3J0IFBTRVVET19QQVNTV0Q9JXM7IiAlIHBfcGFzc3dkCisgICAgICAgIHBzZXVkbyArPSAiZXhwb3J0IFBTRVVET19OT1NZTUxJTktFWFA9JXM7IiAlIHBfbm9zeW1saW5rZXhwCisgICAgICAgIHBzZXVkbyArPSAiJXMvdXNyL2Jpbi9wc2V1ZG8gIiAlIG5hdGl2ZV9zeXNyb290CisKKyAgICAgICAgcm9vdGZzID0gIiVzL3Jvb3Rmc18lcy4lcy4lcyIgJSAoY3Jfd29ya2Rpciwgc2VsZi5sYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYuZnN0eXBlKQorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShyb290ZnMpOgorICAgICAgICAgICAgb3MucmVtb3ZlKHJvb3RmcykKKworICAgICAgICBmb3IgcHJlZml4IGluICgiZXh0IiwgImJ0cmZzIiwgInZmYXQiLCAic3F1YXNoZnMiKToKKyAgICAgICAgICAgIGlmIHNlbGYuZnN0eXBlLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYsICJwcmVwYXJlX3Jvb3Rmc18iICsgcHJlZml4KQorICAgICAgICAgICAgICAgIG1ldGhvZChyb290ZnMsIG9lX2J1aWxkZGlyLCByb290ZnNfZGlyLCBuYXRpdmVfc3lzcm9vdCwgcHNldWRvKQorCisgICAgICAgICAgICAgICAgc2VsZi5zb3VyY2VfZmlsZSA9IHJvb3RmcworCisgICAgICAgICAgICAgICAgIyBnZXQgdGhlIHJvb3RmcyBzaXplIGluIHRoZSByaWdodCB1bml0cyBmb3Iga2lja3N0YXJ0IChrQikKKyAgICAgICAgICAgICAgICBkdV9jbWQgPSAiZHUgLUxia3MgJXMiICUgcm9vdGZzCisgICAgICAgICAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICAgICAgICAgIHNlbGYuc2l6ZSA9IG91dC5zcGxpdCgpWzBdCisKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgZGVmIHByZXBhcmVfcm9vdGZzX2V4dChzZWxmLCByb290ZnMsIG9lX2J1aWxkZGlyLCByb290ZnNfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QsIHBzZXVkbyk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGNvbnRlbnQgZm9yIGFuIGV4dDIvMy80IHJvb3RmcyBwYXJ0aXRpb24uCisgICAgICAgICIiIgorICAgICAgICBkdV9jbWQgPSAiZHUgLWtzICVzIiAlIHJvb3Rmc19kaXIKKyAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICBhY3R1YWxfcm9vdGZzX3NpemUgPSBpbnQob3V0LnNwbGl0KClbMF0pCisKKyAgICAgICAgZXh0cmFfYmxvY2tzID0gc2VsZi5nZXRfZXh0cmFfYmxvY2tfY291bnQoYWN0dWFsX3Jvb3Rmc19zaXplKQorICAgICAgICBpZiBleHRyYV9ibG9ja3MgPCBzZWxmLmV4dHJhX3NwYWNlOgorICAgICAgICAgICAgZXh0cmFfYmxvY2tzID0gc2VsZi5leHRyYV9zcGFjZQorCisgICAgICAgIHJvb3Rmc19zaXplID0gYWN0dWFsX3Jvb3Rmc19zaXplICsgZXh0cmFfYmxvY2tzCisgICAgICAgIHJvb3Rmc19zaXplICo9IHNlbGYub3ZlcmhlYWRfZmFjdG9yCisKKyAgICAgICAgbXNnZXIuZGVidWcoIkFkZGVkICVkIGV4dHJhIGJsb2NrcyB0byAlcyB0byBnZXQgdG8gJWQgdG90YWwgYmxvY2tzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgKGV4dHJhX2Jsb2Nrcywgc2VsZi5tb3VudHBvaW50LCByb290ZnNfc2l6ZSkpCisKKyAgICAgICAgZGRfY21kID0gImRkIGlmPS9kZXYvemVybyBvZj0lcyBicz0xMDI0IHNlZWs9JWQgY291bnQ9MCBicz0xayIgJSBcCisgICAgICAgICAgICAocm9vdGZzLCByb290ZnNfc2l6ZSkKKyAgICAgICAgZXhlY19jbWQoZGRfY21kKQorCisgICAgICAgIGV4dHJhX2ltYWdlY21kID0gIi1pIDgxOTIiCisKKyAgICAgICAgbGFiZWxfc3RyID0gIiIKKyAgICAgICAgaWYgc2VsZi5sYWJlbDoKKyAgICAgICAgICAgIGxhYmVsX3N0ciA9ICItTCAlcyIgJSBzZWxmLmxhYmVsCisKKyAgICAgICAgbWtmc19jbWQgPSAibWtmcy4lcyAtRiAlcyAlcyAlcyAtZCAlcyIgJSBcCisgICAgICAgICAgICAoc2VsZi5mc3R5cGUsIGV4dHJhX2ltYWdlY21kLCByb290ZnMsIGxhYmVsX3N0ciwgcm9vdGZzX2RpcikKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKHBzZXVkbyArIG1rZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgIGRlZiBwcmVwYXJlX3Jvb3Rmc19idHJmcyhzZWxmLCByb290ZnMsIG9lX2J1aWxkZGlyLCByb290ZnNfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCwgcHNldWRvKToKKyAgICAgICAgIiIiCisgICAgICAgIFByZXBhcmUgY29udGVudCBmb3IgYSBidHJmcyByb290ZnMgcGFydGl0aW9uLgorCisgICAgICAgIEN1cnJlbnRseSBoYW5kbGVzIGV4dDIvMy80IGFuZCBidHJmcy4KKyAgICAgICAgIiIiCisgICAgICAgIGR1X2NtZCA9ICJkdSAta3MgJXMiICUgcm9vdGZzX2RpcgorICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgIGFjdHVhbF9yb290ZnNfc2l6ZSA9IGludChvdXQuc3BsaXQoKVswXSkKKworICAgICAgICBleHRyYV9ibG9ja3MgPSBzZWxmLmdldF9leHRyYV9ibG9ja19jb3VudChhY3R1YWxfcm9vdGZzX3NpemUpCisgICAgICAgIGlmIGV4dHJhX2Jsb2NrcyA8IHNlbGYuZXh0cmFfc3BhY2U6CisgICAgICAgICAgICBleHRyYV9ibG9ja3MgPSBzZWxmLmV4dHJhX3NwYWNlCisKKyAgICAgICAgcm9vdGZzX3NpemUgPSBhY3R1YWxfcm9vdGZzX3NpemUgKyBleHRyYV9ibG9ja3MKKyAgICAgICAgcm9vdGZzX3NpemUgKj0gc2VsZi5vdmVyaGVhZF9mYWN0b3IKKworICAgICAgICBtc2dlci5kZWJ1ZygiQWRkZWQgJWQgZXh0cmEgYmxvY2tzIHRvICVzIHRvIGdldCB0byAlZCB0b3RhbCBibG9ja3MiICUgXAorICAgICAgICAgICAgICAgICAgICAoZXh0cmFfYmxvY2tzLCBzZWxmLm1vdW50cG9pbnQsIHJvb3Rmc19zaXplKSkKKworICAgICAgICBkZF9jbWQgPSAiZGQgaWY9L2Rldi96ZXJvIG9mPSVzIGJzPTEwMjQgc2Vlaz0lZCBjb3VudD0wIGJzPTFrIiAlIFwKKyAgICAgICAgICAgIChyb290ZnMsIHJvb3Rmc19zaXplKQorICAgICAgICBleGVjX2NtZChkZF9jbWQpCisKKyAgICAgICAgbGFiZWxfc3RyID0gIiIKKyAgICAgICAgaWYgc2VsZi5sYWJlbDoKKyAgICAgICAgICAgIGxhYmVsX3N0ciA9ICItTCAlcyIgJSBzZWxmLmxhYmVsCisKKyAgICAgICAgbWtmc19jbWQgPSAibWtmcy4lcyAtYiAlZCAtciAlcyAlcyAlcyIgJSBcCisgICAgICAgICAgICAoc2VsZi5mc3R5cGUsIHJvb3Rmc19zaXplICogMTAyNCwgcm9vdGZzX2RpciwgbGFiZWxfc3RyLCByb290ZnMpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChwc2V1ZG8gKyBta2ZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICBkZWYgcHJlcGFyZV9yb290ZnNfdmZhdChzZWxmLCByb290ZnMsIG9lX2J1aWxkZGlyLCByb290ZnNfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290LCBwc2V1ZG8pOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBjb250ZW50IGZvciBhIHZmYXQgcm9vdGZzIHBhcnRpdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGR1X2NtZCA9ICJkdSAtYmtzICVzIiAlIHJvb3Rmc19kaXIKKyAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICBibG9ja3MgPSBpbnQob3V0LnNwbGl0KClbMF0pCisKKyAgICAgICAgZXh0cmFfYmxvY2tzID0gc2VsZi5nZXRfZXh0cmFfYmxvY2tfY291bnQoYmxvY2tzKQorICAgICAgICBpZiBleHRyYV9ibG9ja3MgPCBzZWxmLmV4dHJhX3NwYWNlOgorICAgICAgICAgICAgZXh0cmFfYmxvY2tzID0gc2VsZi5leHRyYV9zcGFjZQorCisgICAgICAgIGJsb2NrcyArPSBleHRyYV9ibG9ja3MKKworICAgICAgICBtc2dlci5kZWJ1ZygiQWRkZWQgJWQgZXh0cmEgYmxvY2tzIHRvICVzIHRvIGdldCB0byAlZCB0b3RhbCBibG9ja3MiICUgXAorICAgICAgICAgICAgICAgICAgICAoZXh0cmFfYmxvY2tzLCBzZWxmLm1vdW50cG9pbnQsIGJsb2NrcykpCisKKyAgICAgICAgIyBFbnN1cmUgdG90YWwgc2VjdG9ycyBpcyBhbiBpbnRlZ3JhbCBudW1iZXIgb2Ygc2VjdG9ycyBwZXIKKyAgICAgICAgIyB0cmFjayBvciBtY29weSB3aWxsIGNvbXBsYWluLiBTZWN0b3JzIGFyZSA1MTIgYnl0ZXMsIGFuZCB3ZQorICAgICAgICAjIGdlbmVyYXRlIGltYWdlcyB3aXRoIDMyIHNlY3RvcnMgcGVyIHRyYWNrLiBUaGlzIGNhbGN1bGF0aW9uCisgICAgICAgICMgaXMgZG9uZSBpbiBibG9ja3MsIHRodXMgdGhlIG1vZCBieSAxNiBpbnN0ZWFkIG9mIDMyLiBBcHBseQorICAgICAgICAjIHNlY3RvciBjb3VudCBmaXggb25seSB3aGVuIG5lZWRlZC4KKyAgICAgICAgaWYgYmxvY2tzICUgMTYgIT0gMDoKKyAgICAgICAgICAgIGJsb2NrcyArPSAoMTYgLSAoYmxvY2tzICUgMTYpKQorCisgICAgICAgIGxhYmVsX3N0ciA9ICItbiBib290IgorICAgICAgICBpZiBzZWxmLmxhYmVsOgorICAgICAgICAgICAgbGFiZWxfc3RyID0gIi1uICVzIiAlIHNlbGYubGFiZWwKKworICAgICAgICBkb3Nmc19jbWQgPSAibWtkb3NmcyAlcyAtUyA1MTIgLUMgJXMgJWQiICUgKGxhYmVsX3N0ciwgcm9vdGZzLCBibG9ja3MpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChkb3Nmc19jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgIG1jb3B5X2NtZCA9ICJtY29weSAtaSAlcyAtcyAlcy8qIDo6LyIgJSAocm9vdGZzLCByb290ZnNfZGlyKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQobWNvcHlfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICBjaG1vZF9jbWQgPSAiY2htb2QgNjQ0ICVzIiAlIHJvb3RmcworICAgICAgICBleGVjX2NtZChjaG1vZF9jbWQpCisKKyAgICBkZWYgcHJlcGFyZV9yb290ZnNfc3F1YXNoZnMoc2VsZiwgcm9vdGZzLCBvZV9idWlsZGRpciwgcm9vdGZzX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QsIHBzZXVkbyk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGNvbnRlbnQgZm9yIGEgc3F1YXNoZnMgcm9vdGZzIHBhcnRpdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHNxdWFzaGZzX2NtZCA9ICJta3NxdWFzaGZzICVzICVzIC1ub2FwcGVuZCIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgIChyb290ZnNfZGlyLCByb290ZnMpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChwc2V1ZG8gKyBzcXVhc2hmc19jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgZGVmIHByZXBhcmVfZW1wdHlfcGFydGl0aW9uX2V4dChzZWxmLCByb290ZnMsIG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBhbiBlbXB0eSBleHQyLzMvNCBwYXJ0aXRpb24uCisgICAgICAgICIiIgorICAgICAgICBkZF9jbWQgPSAiZGQgaWY9L2Rldi96ZXJvIG9mPSVzIGJzPTFrIHNlZWs9JWQgY291bnQ9MCIgJSBcCisgICAgICAgICAgICAocm9vdGZzLCBzZWxmLnNpemUpCisgICAgICAgIGV4ZWNfY21kKGRkX2NtZCkKKworICAgICAgICBleHRyYV9pbWFnZWNtZCA9ICItaSA4MTkyIgorCisgICAgICAgIGxhYmVsX3N0ciA9ICIiCisgICAgICAgIGlmIHNlbGYubGFiZWw6CisgICAgICAgICAgICBsYWJlbF9zdHIgPSAiLUwgJXMiICUgc2VsZi5sYWJlbAorCisgICAgICAgIG1rZnNfY21kID0gIm1rZnMuJXMgLUYgJXMgJXMgJXMiICUgXAorICAgICAgICAgICAgKHNlbGYuZnN0eXBlLCBleHRyYV9pbWFnZWNtZCwgbGFiZWxfc3RyLCByb290ZnMpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChta2ZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICBkZWYgcHJlcGFyZV9lbXB0eV9wYXJ0aXRpb25fYnRyZnMoc2VsZiwgcm9vdGZzLCBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBhbiBlbXB0eSBidHJmcyBwYXJ0aXRpb24uCisgICAgICAgICIiIgorICAgICAgICBkZF9jbWQgPSAiZGQgaWY9L2Rldi96ZXJvIG9mPSVzIGJzPTFrIHNlZWs9JWQgY291bnQ9MCIgJSBcCisgICAgICAgICAgICAocm9vdGZzLCBzZWxmLnNpemUpCisgICAgICAgIGV4ZWNfY21kKGRkX2NtZCkKKworICAgICAgICBsYWJlbF9zdHIgPSAiIgorICAgICAgICBpZiBzZWxmLmxhYmVsOgorICAgICAgICAgICAgbGFiZWxfc3RyID0gIi1MICVzIiAlIHNlbGYubGFiZWwKKworICAgICAgICBta2ZzX2NtZCA9ICJta2ZzLiVzIC1iICVkICVzICVzIiAlIFwKKyAgICAgICAgICAgIChzZWxmLmZzdHlwZSwgc2VsZi5zaXplICogMTAyNCwgbGFiZWxfc3RyLCByb290ZnMpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChta2ZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICBkZWYgcHJlcGFyZV9lbXB0eV9wYXJ0aXRpb25fdmZhdChzZWxmLCByb290ZnMsIG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIFByZXBhcmUgYW4gZW1wdHkgdmZhdCBwYXJ0aXRpb24uCisgICAgICAgICIiIgorICAgICAgICBibG9ja3MgPSBzZWxmLnNpemUKKworICAgICAgICBsYWJlbF9zdHIgPSAiLW4gYm9vdCIKKyAgICAgICAgaWYgc2VsZi5sYWJlbDoKKyAgICAgICAgICAgIGxhYmVsX3N0ciA9ICItbiAlcyIgJSBzZWxmLmxhYmVsCisKKyAgICAgICAgZG9zZnNfY21kID0gIm1rZG9zZnMgJXMgLVMgNTEyIC1DICVzICVkIiAlIChsYWJlbF9zdHIsIHJvb3RmcywgYmxvY2tzKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQoZG9zZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICBjaG1vZF9jbWQgPSAiY2htb2QgNjQ0ICVzIiAlIHJvb3RmcworICAgICAgICBleGVjX2NtZChjaG1vZF9jbWQpCisKKyAgICBkZWYgcHJlcGFyZV9lbXB0eV9wYXJ0aXRpb25fc3F1YXNoZnMoc2VsZiwgY3Jfd29ya2Rpciwgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIFByZXBhcmUgYW4gZW1wdHkgc3F1YXNoZnMgcGFydGl0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgbXNnZXIud2FybmluZygiQ3JlYXRpbmcgb2YgYW4gZW1wdHkgc3F1YXNoZnMgJXMgcGFydGl0aW9uIHdhcyBhdHRlbXB0ZWQuICIgXAorICAgICAgICAgICAgICAgICAgICAgICJQcm9jZWVkaW5nIGFzIHJlcXVlc3RlZC4iICUgc2VsZi5tb3VudHBvaW50KQorCisgICAgICAgIHBhdGggPSAiJXMvZnNfJXMuJXMiICUgKGNyX3dvcmtkaXIsIHNlbGYubGFiZWwsIHNlbGYuZnN0eXBlKQorICAgICAgICBvcy5wYXRoLmlzZmlsZShwYXRoKSBhbmQgb3MucmVtb3ZlKHBhdGgpCisKKyAgICAgICAgIyBpdCBpcyBub3QgcG9zc2libGUgdG8gY3JlYXRlIGEgc3F1YXNoZnMgd2l0aG91dCBzb3VyY2UgZGF0YSwKKyAgICAgICAgIyB0aHVzIHByZXBhcmUgYW4gZW1wdHkgdGVtcCBkaXIgdGhhdCBpcyB1c2VkIGFzIHNvdXJjZQorICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKworICAgICAgICBzcXVhc2hmc19jbWQgPSAibWtzcXVhc2hmcyAlcyAlcyAtbm9hcHBlbmQiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAodG1wZGlyLCBwYXRoKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQoc3F1YXNoZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICBvcy5ybWRpcih0bXBkaXIpCisKKyAgICAgICAgIyBnZXQgdGhlIHJvb3RmcyBzaXplIGluIHRoZSByaWdodCB1bml0cyBmb3Iga2lja3N0YXJ0IChrQikKKyAgICAgICAgZHVfY21kID0gImR1IC1MYmtzICVzIiAlIHBhdGgKKyAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICBmc19zaXplID0gb3V0LnNwbGl0KClbMF0KKworICAgICAgICBzZWxmLnNpemUgPSBmc19zaXplCisKKyAgICBkZWYgcHJlcGFyZV9zd2FwX3BhcnRpdGlvbihzZWxmLCBjcl93b3JrZGlyLCBvZV9idWlsZGRpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBhIHN3YXAgcGFydGl0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgcGF0aCA9ICIlcy9mcy4lcyIgJSAoY3Jfd29ya2Rpciwgc2VsZi5mc3R5cGUpCisKKyAgICAgICAgZGRfY21kID0gImRkIGlmPS9kZXYvemVybyBvZj0lcyBicz0xayBzZWVrPSVkIGNvdW50PTAiICUgXAorICAgICAgICAgICAgKHBhdGgsIHNlbGYuc2l6ZSkKKyAgICAgICAgZXhlY19jbWQoZGRfY21kKQorCisgICAgICAgIGltcG9ydCB1dWlkCisgICAgICAgIGxhYmVsX3N0ciA9ICIiCisgICAgICAgIGlmIHNlbGYubGFiZWw6CisgICAgICAgICAgICBsYWJlbF9zdHIgPSAiLUwgJXMiICUgc2VsZi5sYWJlbAorICAgICAgICBta3N3YXBfY21kID0gIm1rc3dhcCAlcyAtVSAlcyAlcyIgJSAobGFiZWxfc3RyLCBzdHIodXVpZC51dWlkMSgpKSwgcGF0aCkKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKG1rc3dhcF9jbWQsIG5hdGl2ZV9zeXNyb290KQorCisKK2NsYXNzIFdpY19QYXJ0aXRpb24oRkM0X1BhcnRpdGlvbik6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRkM0X1BhcnRpdGlvbi5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBGQzRfUGFydGl0aW9uLnJlbW92ZWRBdHRycworCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIGRlZiBvdmVyaGVhZF9jYihvcHRpb24sIG9wdF9zdHIsIHZhbHVlLCBwYXJzZXIpOgorICAgICAgICAgICAgaWYgdmFsdWUgPCAxOgorICAgICAgICAgICAgICAgIHJhaXNlIE9wdGlvblZhbHVlRXJyb3IoIk9wdGlvbiAlczogaW52YWxpZCB2YWx1ZTogJXIiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbiwgdmFsdWUpKQorICAgICAgICAgICAgc2V0YXR0cihwYXJzZXIudmFsdWVzLCBvcHRpb24uZGVzdCwgdmFsdWUpCisKKyAgICAgICAgcGFyc2VyID0gRkM0X1BhcnRpdGlvbi5fZ2V0UGFyc2VyKHNlbGYpCisKKyAgICAgICAgIyBUaGUgYWxpZ25tZW50IHZhbHVlIGlzIGdpdmVuIGluIGtCeXRlcy4gZS5nLiwgdmFsdWUgOCBtZWFucyB0aGF0CisgICAgICAgICMgdGhlIHBhcnRpdGlvbiBpcyBhbGlnbmVkIHRvIHN0YXJ0IGZyb20gODA5NiBieXRlIGJvdW5kYXJ5LgorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1hbGlnbiIsIHR5cGU9ImludCIsIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJhbGlnbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSkKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tZXh0b3B0aW9ucyIsIHR5cGU9InN0cmluZyIsIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJleHRvcHRzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1wYXJ0LXR5cGUiLCB0eXBlPSJzdHJpbmciLCBhY3Rpb249InN0b3JlIiwgZGVzdD0icGFydF90eXBlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lKQorICAgICAgICAjIHVzZSBzcGVjaWZpZWQgc291cmNlIGZpbGUgdG8gZmlsbCB0aGUgcGFydGl0aW9uCisgICAgICAgICMgYW5kIGNhbGN1bGF0ZSBwYXJ0aXRpb24gc2l6ZQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1zb3VyY2UiLCB0eXBlPSJzdHJpbmciLCBhY3Rpb249InN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ic291cmNlIiwgZGVmYXVsdD1Ob25lKQorICAgICAgICAjIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBhcmFtPXZhbHVlIHBhaXJzCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLXNvdXJjZXBhcmFtcyIsIHR5cGU9InN0cmluZyIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJzb3VyY2VwYXJhbXMiLCBkZWZhdWx0PU5vbmUpCisgICAgICAgICMgdXNlIHNwZWNpZmllZCByb290ZnMgcGF0aCB0byBmaWxsIHRoZSBwYXJ0aXRpb24KKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tcm9vdGZzLWRpciIsIHR5cGU9InN0cmluZyIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJyb290ZnMiLCBkZWZhdWx0PU5vbmUpCisgICAgICAgICMgd2V0aGVyIHRvIGFkZCB0aGUgcGFydGl0aW9uIGluIHRoZSBwYXJ0aXRpb24gdGFibGUKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tbm8tdGFibGUiLCBkZXN0PSJub190YWJsZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgICMgZXh0cmEgc3BhY2UgYmV5b25kIHRoZSBwYXJ0aXRpb24gc2l6ZQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1leHRyYS1zcGFjZSIsIGRlc3Q9ImV4dHJhX3NwYWNlIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InNpemUiLCBuYXJncz0xLCBkZWZhdWx0PSIxME0iKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1vdmVyaGVhZC1mYWN0b3IiLCBkZXN0PSJvdmVyaGVhZF9mYWN0b3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249ImNhbGxiYWNrIiwgY2FsbGJhY2s9b3ZlcmhlYWRfY2IsIHR5cGU9ImZsb2F0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9MSwgZGVmYXVsdD0xLjMpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLXVzZS11dWlkIiwgZGVzdD0idXNlX3V1aWQiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS11dWlkIikKKworICAgICAgICByZXR1cm4gcGFyc2VyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9raWNrc3RhcnQvY3VzdG9tX2NvbW1hbmRzL3dpY2Jvb3QucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9raWNrc3RhcnQvY3VzdG9tX2NvbW1hbmRzL3dpY2Jvb3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNlMTg1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2tpY2tzdGFydC9jdXN0b21fY29tbWFuZHMvd2ljYm9vdC5weQpAQCAtMCwwICsxLDYwIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIE9wZW5FbWJlZGRlZCBib290bG9hZGVyIG9iamVjdCBkZWZpbml0aW9ucy4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBsaW51eC5pbnRlbC5jb20+CisjCitmcm9tIHB5a2lja3N0YXJ0LmNvbW1hbmRzLmJvb3Rsb2FkZXIgaW1wb3J0IEY4X0Jvb3Rsb2FkZXIKKworY2xhc3MgV2ljX0Jvb3Rsb2FkZXIoRjhfQm9vdGxvYWRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHk9MTAsIGFwcGVuZExpbmU9IiIsIGRyaXZlb3JkZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZm9yY2VMQkE9RmFsc2UsIGxvY2F0aW9uPSIiLCBtZDVwYXNzPSIiLCBwYXNzd29yZD0iIiwKKyAgICAgICAgICAgICAgICAgdXBncmFkZT1GYWxzZSwgbWVudXM9IiIpOgorICAgICAgICBGOF9Cb290bG9hZGVyLl9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHksIGFwcGVuZExpbmUsIGRyaXZlb3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VMQkEsIGxvY2F0aW9uLCBtZDVwYXNzLCBwYXNzd29yZCwgdXBncmFkZSkKKworICAgICAgICBzZWxmLm1lbnVzID0gIiIKKyAgICAgICAgc2VsZi5wdGFibGUgPSAibXNkb3MiCisgICAgICAgIHNlbGYuc291cmNlID0gIiIKKworICAgIGRlZiBfZ2V0QXJnc0FzU3RyKHNlbGYpOgorICAgICAgICByZXR2YWwgPSBGOF9Cb290bG9hZGVyLl9nZXRBcmdzQXNTdHIoc2VsZikKKworICAgICAgICBpZiBzZWxmLm1lbnVzID09ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1tZW51cz0lcyIgJShzZWxmLm1lbnVzLCkKKyAgICAgICAgaWYgc2VsZi5wdGFibGU6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXB0YWJsZT1cIiVzXCIiICUoc2VsZi5wdGFibGUsKQorICAgICAgICBpZiBzZWxmLnNvdXJjZToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tc291cmNlPSVzIiAlIHNlbGYuc291cmNlCisKKyAgICAgICAgcmV0dXJuIHJldHZhbAorCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEY4X0Jvb3Rsb2FkZXIuX2dldFBhcnNlcihzZWxmKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1tZW51cyIsIGRlc3Q9Im1lbnVzIikKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tcHRhYmxlIiwgZGVzdD0icHRhYmxlIiwgY2hvaWNlcz0oIm1zZG9zIiwgImdwdCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJtc2RvcyIpCisgICAgICAgICMgdXNlIHNwZWNpZmllZCBzb3VyY2UgcGx1Z2luIHRvIGltcGxlbWVudCBib290bG9hZGVyLXNwZWNpZmljIG1ldGhvZHMKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tc291cmNlIiwgdHlwZT0ic3RyaW5nIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ic291cmNlIiwgZGVmYXVsdD1Ob25lKQorICAgICAgICByZXR1cm4gcGFyc2VyCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL21zZ2VyLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvbXNnZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjczNzU1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL21zZ2VyLnB5CkBAIC0wLDAgKzEsMzA5IEBACisjIS91c3IvYmluL2VudiBweXRob24gLXR0CisjIHZpbTogYWkgdHM9NCBzdHM9NCBldCBzdz00CisjCisjIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCwgMjAxMSBJbnRlbCwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgcmUKK2ltcG9ydCB0aW1lCisKK19fQUxMX18gPSBbJ3NldF9tb2RlJywKKyAgICAgICAgICAgJ2dldF9sb2dsZXZlbCcsCisgICAgICAgICAgICdzZXRfbG9nbGV2ZWwnLAorICAgICAgICAgICAnc2V0X2xvZ2ZpbGUnLAorICAgICAgICAgICAncmF3JywKKyAgICAgICAgICAgJ2RlYnVnJywKKyAgICAgICAgICAgJ3ZlcmJvc2UnLAorICAgICAgICAgICAnaW5mbycsCisgICAgICAgICAgICd3YXJuaW5nJywKKyAgICAgICAgICAgJ2Vycm9yJywKKyAgICAgICAgICAgJ2FzaycsCisgICAgICAgICAgICdwYXVzZScsCisgICAgICAgICAgXQorCisjIENPTE9ScyBpbiBBTlNJCitJTkZPX0NPTE9SID0gMzIgIyBncmVlbgorV0FSTl9DT0xPUiA9IDMzICMgeWVsbG93CitFUlJfQ09MT1IgPSAzMSAjIHJlZAorQVNLX0NPTE9SID0gMzQgIyBibHVlCitOT19DT0xPUiA9IDAKKworUFJFRklYX1JFID0gcmUuY29tcGlsZSgnXjwoLio/KT5ccyooLiopJywgcmUuUykKKworSU5URVJBQ1RJVkUgPSBUcnVlCisKK0xPR19MRVZFTCA9IDEKK0xPR19MRVZFTFMgPSB7CisgICAgJ3F1aWV0JzogMCwKKyAgICAnbm9ybWFsJzogMSwKKyAgICAndmVyYm9zZSc6IDIsCisgICAgJ2RlYnVnJzogMywKKyAgICAnbmV2ZXInOiA0LAorfQorCitMT0dfRklMRV9GUCA9IE5vbmUKK0xPR19DT05URU5UID0gJycKK0NBVENIRVJSX0JVRkZJTEVfRkQgPSAtMQorQ0FUQ0hFUlJfQlVGRklMRV9QQVRIID0gTm9uZQorQ0FUQ0hFUlJfU0FWRURfMiA9IC0xCisKK2RlZiBfZ2VuZXJhbF9wcmludChoZWFkLCBjb2xvciwgbXNnPU5vbmUsIHN0cmVhbT1Ob25lLCBsZXZlbD0nbm9ybWFsJyk6CisgICAgZ2xvYmFsIExPR19DT05URU5UCisgICAgaWYgbm90IHN0cmVhbToKKyAgICAgICAgc3RyZWFtID0gc3lzLnN0ZG91dAorCisgICAgaWYgTE9HX0xFVkVMU1tsZXZlbF0gPiBMT0dfTEVWRUw6CisgICAgICAgICMgc2tpcAorICAgICAgICByZXR1cm4KKworICAgICMgZW5jb2RlIHJhdyAndW5pY29kZScgc3RyIHRvIHV0ZjggZW5jb2RlZCBzdHIKKyAgICBpZiBtc2cgYW5kIGlzaW5zdGFuY2UobXNnLCB1bmljb2RlKToKKyAgICAgICAgbXNnID0gbXNnLmVuY29kZSgndXRmLTgnLCAnaWdub3JlJykKKworICAgIGVycm9ybXNnID0gJycKKyAgICBpZiBDQVRDSEVSUl9CVUZGSUxFX0ZEID4gMDoKKyAgICAgICAgc2l6ZSA9IG9zLmxzZWVrKENBVENIRVJSX0JVRkZJTEVfRkQsIDAsIG9zLlNFRUtfRU5EKQorICAgICAgICBvcy5sc2VlayhDQVRDSEVSUl9CVUZGSUxFX0ZELCAwLCBvcy5TRUVLX1NFVCkKKyAgICAgICAgZXJyb3Jtc2cgPSBvcy5yZWFkKENBVENIRVJSX0JVRkZJTEVfRkQsIHNpemUpCisgICAgICAgIG9zLmZ0cnVuY2F0ZShDQVRDSEVSUl9CVUZGSUxFX0ZELCAwKQorCisgICAgIyBhcHBlbmQgZXJyb3IgbXNnIHRvIExPRworICAgIGlmIGVycm9ybXNnOgorICAgICAgICBMT0dfQ09OVEVOVCArPSBlcnJvcm1zZworCisgICAgIyBhcHBlbmQgbm9ybWFsIG1zZyB0byBMT0cKKyAgICBzYXZlX21zZyA9IG1zZy5zdHJpcCgpIGlmIG1zZyBlbHNlIE5vbmUKKyAgICBpZiBzYXZlX21zZzoKKyAgICAgICAgdGltZXN0ciA9IHRpbWUuc3RyZnRpbWUoIlslbS8lZCAlSDolTTolUyAlWl0gIiwgdGltZS5sb2NhbHRpbWUoKSkKKyAgICAgICAgTE9HX0NPTlRFTlQgKz0gdGltZXN0ciArIHNhdmVfbXNnICsgJ1xuJworCisgICAgaWYgZXJyb3Jtc2c6CisgICAgICAgIF9jb2xvcl9wcmludCgnJywgTk9fQ09MT1IsIGVycm9ybXNnLCBzdHJlYW0sIGxldmVsKQorCisgICAgX2NvbG9yX3ByaW50KGhlYWQsIGNvbG9yLCBtc2csIHN0cmVhbSwgbGV2ZWwpCisKK2RlZiBfY29sb3JfcHJpbnQoaGVhZCwgY29sb3IsIG1zZywgc3RyZWFtLCBsZXZlbCk6CisgICAgY29sb3JlZCA9IFRydWUKKyAgICBpZiBjb2xvciA9PSBOT19DT0xPUiBvciBcCisgICAgICAgbm90IHN0cmVhbS5pc2F0dHkoKSBvciBcCisgICAgICAgb3MuZ2V0ZW52KCdBTlNJX0NPTE9SU19ESVNBQkxFRCcpIGlzIG5vdCBOb25lOgorICAgICAgICBjb2xvcmVkID0gRmFsc2UKKworICAgIGlmIGhlYWQuc3RhcnRzd2l0aCgnXHInKToKKyAgICAgICAgIyBuZWVkIG5vdCBcbiBhdCBsYXN0CisgICAgICAgIG5ld2xpbmUgPSBGYWxzZQorICAgIGVsc2U6CisgICAgICAgIG5ld2xpbmUgPSBUcnVlCisKKyAgICBpZiBjb2xvcmVkOgorICAgICAgICBoZWFkID0gJ1wwMzNbJWRtJXM6XDAzM1swbSAnICUoY29sb3IsIGhlYWQpCisgICAgICAgIGlmIG5vdCBuZXdsaW5lOgorICAgICAgICAgICAgIyBFU0MgY21kIHRvIGNsZWFyIGxpbmUKKyAgICAgICAgICAgIGhlYWQgPSAnXDAzM1sySycgKyBoZWFkCisgICAgZWxzZToKKyAgICAgICAgaWYgaGVhZDoKKyAgICAgICAgICAgIGhlYWQgKz0gJzogJworICAgICAgICAgICAgaWYgaGVhZC5zdGFydHN3aXRoKCdccicpOgorICAgICAgICAgICAgICAgIGhlYWQgPSBoZWFkLmxzdHJpcCgpCisgICAgICAgICAgICAgICAgbmV3bGluZSA9IFRydWUKKworICAgIGlmIG1zZyBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtc2csIHVuaWNvZGUpOgorICAgICAgICAgICAgbXNnID0gbXNnLmVuY29kZSgndXRmOCcsICdpZ25vcmUnKQorCisgICAgICAgIHN0cmVhbS53cml0ZSgnJXMlcycgJSAoaGVhZCwgbXNnKSkKKyAgICAgICAgaWYgbmV3bGluZToKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZSgnXG4nKQorCisgICAgc3RyZWFtLmZsdXNoKCkKKworZGVmIF9jb2xvcl9wZXJyb3IoaGVhZCwgY29sb3IsIG1zZywgbGV2ZWw9J25vcm1hbCcpOgorICAgIGlmIENBVENIRVJSX0JVRkZJTEVfRkQgPiAwOgorICAgICAgICBfZ2VuZXJhbF9wcmludChoZWFkLCBjb2xvciwgbXNnLCBzeXMuc3Rkb3V0LCBsZXZlbCkKKyAgICBlbHNlOgorICAgICAgICBfZ2VuZXJhbF9wcmludChoZWFkLCBjb2xvciwgbXNnLCBzeXMuc3RkZXJyLCBsZXZlbCkKKworZGVmIF9zcGxpdF9tc2coaGVhZCwgbXNnKToKKyAgICBpZiBpc2luc3RhbmNlKG1zZywgbGlzdCk6CisgICAgICAgIG1zZyA9ICdcbicuam9pbihtYXAoc3RyLCBtc2cpKQorCisgICAgaWYgbXNnLnN0YXJ0c3dpdGgoJ1xuJyk6CisgICAgICAgICMgbWVhbnMgcHJpbnQgXG4gYXQgZmlyc3QKKyAgICAgICAgbXNnID0gbXNnLmxzdHJpcCgpCisgICAgICAgIGhlYWQgPSAnXG4nICsgaGVhZAorCisgICAgZWxpZiBtc2cuc3RhcnRzd2l0aCgnXHInKToKKyAgICAgICAgIyBtZWFucyBwcmludCBcciBhdCBmaXJzdAorICAgICAgICBtc2cgPSBtc2cubHN0cmlwKCkKKyAgICAgICAgaGVhZCA9ICdccicgKyBoZWFkCisKKyAgICBtYXRjaCA9IFBSRUZJWF9SRS5tYXRjaChtc2cpCisgICAgaWYgbWF0Y2g6CisgICAgICAgIGhlYWQgKz0gJyA8JXM+JyAlIG1hdGNoLmdyb3VwKDEpCisgICAgICAgIG1zZyA9IG1hdGNoLmdyb3VwKDIpCisKKyAgICByZXR1cm4gaGVhZCwgbXNnCisKK2RlZiBnZXRfbG9nbGV2ZWwoKToKKyAgICByZXR1cm4gKGsgZm9yIGssIHYgaW4gTE9HX0xFVkVMUy5pdGVtcygpIGlmIHYgPT0gTE9HX0xFVkVMKS5uZXh0KCkKKworZGVmIHNldF9sb2dsZXZlbChsZXZlbCk6CisgICAgZ2xvYmFsIExPR19MRVZFTAorICAgIGlmIGxldmVsIG5vdCBpbiBMT0dfTEVWRUxTOgorICAgICAgICAjIG5vIGVmZmVjdAorICAgICAgICByZXR1cm4KKworICAgIExPR19MRVZFTCA9IExPR19MRVZFTFNbbGV2ZWxdCisKK2RlZiBzZXRfaW50ZXJhY3RpdmUobW9kZT1UcnVlKToKKyAgICBnbG9iYWwgSU5URVJBQ1RJVkUKKyAgICBpZiBtb2RlOgorICAgICAgICBJTlRFUkFDVElWRSA9IFRydWUKKyAgICBlbHNlOgorICAgICAgICBJTlRFUkFDVElWRSA9IEZhbHNlCisKK2RlZiBsb2cobXNnPScnKToKKyAgICAjIGxvZyBtc2cgdG8gTE9HX0NPTlRFTlQgdGhlbiBzYXZlIHRvIGxvZ2ZpbGUKKyAgICBnbG9iYWwgTE9HX0NPTlRFTlQKKyAgICBpZiBtc2c6CisgICAgICAgIExPR19DT05URU5UICs9IG1zZworCitkZWYgcmF3KG1zZz0nJyk6CisgICAgX2dlbmVyYWxfcHJpbnQoJycsIE5PX0NPTE9SLCBtc2cpCisKK2RlZiBpbmZvKG1zZyk6CisgICAgaGVhZCwgbXNnID0gX3NwbGl0X21zZygnSW5mbycsIG1zZykKKyAgICBfZ2VuZXJhbF9wcmludChoZWFkLCBJTkZPX0NPTE9SLCBtc2cpCisKK2RlZiB2ZXJib3NlKG1zZyk6CisgICAgaGVhZCwgbXNnID0gX3NwbGl0X21zZygnVmVyYm9zZScsIG1zZykKKyAgICBfZ2VuZXJhbF9wcmludChoZWFkLCBJTkZPX0NPTE9SLCBtc2csIGxldmVsPSd2ZXJib3NlJykKKworZGVmIHdhcm5pbmcobXNnKToKKyAgICBoZWFkLCBtc2cgPSBfc3BsaXRfbXNnKCdXYXJuaW5nJywgbXNnKQorICAgIF9jb2xvcl9wZXJyb3IoaGVhZCwgV0FSTl9DT0xPUiwgbXNnKQorCitkZWYgZGVidWcobXNnKToKKyAgICBoZWFkLCBtc2cgPSBfc3BsaXRfbXNnKCdEZWJ1ZycsIG1zZykKKyAgICBfY29sb3JfcGVycm9yKGhlYWQsIEVSUl9DT0xPUiwgbXNnLCBsZXZlbD0nZGVidWcnKQorCitkZWYgZXJyb3IobXNnKToKKyAgICBoZWFkLCBtc2cgPSBfc3BsaXRfbXNnKCdFcnJvcicsIG1zZykKKyAgICBfY29sb3JfcGVycm9yKGhlYWQsIEVSUl9DT0xPUiwgbXNnKQorICAgIHN5cy5leGl0KDEpCisKK2RlZiBhc2sobXNnLCBkZWZhdWx0PVRydWUpOgorICAgIF9nZW5lcmFsX3ByaW50KCdcclEnLCBBU0tfQ09MT1IsICcnKQorICAgIHRyeToKKyAgICAgICAgaWYgZGVmYXVsdDoKKyAgICAgICAgICAgIG1zZyArPSAnKFkvbikgJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnICs9ICcoeS9OKSAnCisgICAgICAgIGlmIElOVEVSQUNUSVZFOgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICByZXBsID0gcmF3X2lucHV0KG1zZykKKyAgICAgICAgICAgICAgICBpZiByZXBsLmxvd2VyKCkgPT0gJ3knOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgIGVsaWYgcmVwbC5sb3dlcigpID09ICduJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAgICAgZWxpZiBub3QgcmVwbC5zdHJpcCgpOgorICAgICAgICAgICAgICAgICAgICAjIDxFbnRlcj4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKworICAgICAgICAgICAgICAgICMgZWxzZSBsb29wCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG1zZyArPSAnIFknCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZyArPSAnIE4nCisgICAgICAgICAgICBfZ2VuZXJhbF9wcmludCgnJywgTk9fQ09MT1IsIG1zZykKKworICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuJykKKyAgICAgICAgc3lzLmV4aXQoMikKKworZGVmIGNob2ljZShtc2csIGNob2ljZXMsIGRlZmF1bHQ9MCk6CisgICAgaWYgZGVmYXVsdCA+PSBsZW4oY2hvaWNlcyk6CisgICAgICAgIHJldHVybiBOb25lCisgICAgX2dlbmVyYWxfcHJpbnQoJ1xyUScsIEFTS19DT0xPUiwgJycpCisgICAgdHJ5OgorICAgICAgICBtc2cgKz0gIiBbJXNdICIgJSAnLycuam9pbihjaG9pY2VzKQorICAgICAgICBpZiBJTlRFUkFDVElWRToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgcmVwbCA9IHJhd19pbnB1dChtc2cpCisgICAgICAgICAgICAgICAgaWYgcmVwbCBpbiBjaG9pY2VzOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVwbAorICAgICAgICAgICAgICAgIGVsaWYgbm90IHJlcGwuc3RyaXAoKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNob2ljZXNbZGVmYXVsdF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyArPSBjaG9pY2VzW2RlZmF1bHRdCisgICAgICAgICAgICBfZ2VuZXJhbF9wcmludCgnJywgTk9fQ09MT1IsIG1zZykKKworICAgICAgICAgICAgcmV0dXJuIGNob2ljZXNbZGVmYXVsdF0KKyAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuJykKKyAgICAgICAgc3lzLmV4aXQoMikKKworZGVmIHBhdXNlKG1zZz1Ob25lKToKKyAgICBpZiBJTlRFUkFDVElWRToKKyAgICAgICAgX2dlbmVyYWxfcHJpbnQoJ1xyUScsIEFTS19DT0xPUiwgJycpCisgICAgICAgIGlmIG1zZyBpcyBOb25lOgorICAgICAgICAgICAgbXNnID0gJ3ByZXNzIDxFTlRFUj4gdG8gY29udGludWUgLi4uJworICAgICAgICByYXdfaW5wdXQobXNnKQorCitkZWYgc2V0X2xvZ2ZpbGUoZnBhdGgpOgorICAgIGdsb2JhbCBMT0dfRklMRV9GUAorCisgICAgZGVmIF9zYXZlbG9nZigpOgorICAgICAgICBpZiBMT0dfRklMRV9GUDoKKyAgICAgICAgICAgIHdpdGggb3BlbihMT0dfRklMRV9GUCwgJ3cnKSBhcyBsb2c6CisgICAgICAgICAgICAgICAgbG9nLndyaXRlKExPR19DT05URU5UKQorCisgICAgaWYgTE9HX0ZJTEVfRlAgaXMgbm90IE5vbmU6CisgICAgICAgIHdhcm5pbmcoJ2R1cGxpY2F0ZSBsb2cgZmlsZSBjb25maWd1cmF0aW9uJykKKworICAgIExPR19GSUxFX0ZQID0gZnBhdGgKKworICAgIGltcG9ydCBhdGV4aXQKKyAgICBhdGV4aXQucmVnaXN0ZXIoX3NhdmVsb2dmKQorCitkZWYgZW5hYmxlX2xvZ3N0ZGVycihmcGF0aCk6CisgICAgZ2xvYmFsIENBVENIRVJSX0JVRkZJTEVfRkQKKyAgICBnbG9iYWwgQ0FUQ0hFUlJfQlVGRklMRV9QQVRICisgICAgZ2xvYmFsIENBVENIRVJSX1NBVkVEXzIKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKGZwYXRoKToKKyAgICAgICAgb3MucmVtb3ZlKGZwYXRoKQorICAgIENBVENIRVJSX0JVRkZJTEVfUEFUSCA9IGZwYXRoCisgICAgQ0FUQ0hFUlJfQlVGRklMRV9GRCA9IG9zLm9wZW4oQ0FUQ0hFUlJfQlVGRklMRV9QQVRILCBvcy5PX1JEV1J8b3MuT19DUkVBVCkKKyAgICBDQVRDSEVSUl9TQVZFRF8yID0gb3MuZHVwKDIpCisgICAgb3MuZHVwMihDQVRDSEVSUl9CVUZGSUxFX0ZELCAyKQorCitkZWYgZGlzYWJsZV9sb2dzdGRlcnIoKToKKyAgICBnbG9iYWwgQ0FUQ0hFUlJfQlVGRklMRV9GRAorICAgIGdsb2JhbCBDQVRDSEVSUl9CVUZGSUxFX1BBVEgKKyAgICBnbG9iYWwgQ0FUQ0hFUlJfU0FWRURfMgorCisgICAgcmF3KG1zZz1Ob25lKSAjIGZsdXNoIG1lc3NhZ2UgYnVmZmVyIGFuZCBwcmludCBpdC4KKyAgICBvcy5kdXAyKENBVENIRVJSX1NBVkVEXzIsIDIpCisgICAgb3MuY2xvc2UoQ0FUQ0hFUlJfU0FWRURfMikKKyAgICBvcy5jbG9zZShDQVRDSEVSUl9CVUZGSUxFX0ZEKQorICAgIG9zLnVubGluayhDQVRDSEVSUl9CVUZGSUxFX1BBVEgpCisgICAgQ0FUQ0hFUlJfQlVGRklMRV9GRCA9IC0xCisgICAgQ0FUQ0hFUlJfQlVGRklMRV9QQVRIID0gTm9uZQorICAgIENBVENIRVJSX1NBVkVEXzIgPSAtMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2luLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2luLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZmRmY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW4ucHkKQEAgLTAsMCArMSwxNTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdHQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExIEludGVsLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCitpbXBvcnQgb3MsIHN5cworCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIKK2Zyb20gd2ljIGltcG9ydCBwbHVnaW5iYXNlCitmcm9tIHdpYy51dGlscyBpbXBvcnQgZXJyb3JzCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBnZXRfYml0YmFrZV92YXIKKworX19BTExfXyA9IFsnUGx1Z2luTWdyJywgJ3BsdWdpbm1nciddCisKK1BMVUdJTl9UWVBFUyA9IFsiaW1hZ2VyIiwgInNvdXJjZSJdCisKK1BMVUdJTl9ESVIgPSAiL2xpYi93aWMvcGx1Z2lucyIgIyByZWxhdGl2ZSB0byBzY3JpcHRzCitTQ1JJUFRTX1BMVUdJTl9ESVIgPSAic2NyaXB0cyIgKyBQTFVHSU5fRElSCisKK2NsYXNzIFBsdWdpbk1ncihvYmplY3QpOgorICAgIHBsdWdpbl9kaXJzID0ge30KKworICAgICMgbWFrZSB0aGUgbWFuYWdlciBjbGFzcyBhcyBzaW5nbGV0b24KKyAgICBfaW5zdGFuY2UgPSBOb25lCisgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBub3QgY2xzLl9pbnN0YW5jZToKKyAgICAgICAgICAgIGNscy5faW5zdGFuY2UgPSBzdXBlcihQbHVnaW5NZ3IsIGNscykuX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncykKKworICAgICAgICByZXR1cm4gY2xzLl9pbnN0YW5jZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICB3aWNfcGF0aCA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyAgICAgICAgZW9zID0gd2ljX3BhdGguZmluZCgnc2NyaXB0cycpICsgbGVuKCdzY3JpcHRzJykKKyAgICAgICAgc2NyaXB0c19wYXRoID0gd2ljX3BhdGhbOmVvc10KKyAgICAgICAgc2VsZi5zY3JpcHRzX3BhdGggPSBzY3JpcHRzX3BhdGgKKyAgICAgICAgc2VsZi5wbHVnaW5fZGlyID0gc2NyaXB0c19wYXRoICsgUExVR0lOX0RJUgorICAgICAgICBzZWxmLmxheWVyc19wYXRoID0gTm9uZQorCisgICAgZGVmIF9idWlsZF9wbHVnaW5fZGlyX2xpc3Qoc2VsZiwgcGx1Z2luX2RpciwgcHR5cGUpOgorICAgICAgICBpZiBzZWxmLmxheWVyc19wYXRoIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmxheWVyc19wYXRoID0gZ2V0X2JpdGJha2VfdmFyKCJCQkxBWUVSUyIpCisgICAgICAgIGxheWVyX2RpcnMgPSBbXQorCisgICAgICAgIGlmIHNlbGYubGF5ZXJzX3BhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgbGF5ZXJfcGF0aCBpbiBzZWxmLmxheWVyc19wYXRoLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihsYXllcl9wYXRoLCBTQ1JJUFRTX1BMVUdJTl9ESVIsIHB0eXBlKQorICAgICAgICAgICAgICAgIGxheWVyX2RpcnMuYXBwZW5kKHBhdGgpCisKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihwbHVnaW5fZGlyLCBwdHlwZSkKKyAgICAgICAgbGF5ZXJfZGlycy5hcHBlbmQocGF0aCkKKworICAgICAgICByZXR1cm4gbGF5ZXJfZGlycworCisgICAgZGVmIGFwcGVuZF9kaXJzKHNlbGYsIGRpcnMpOgorICAgICAgICBmb3IgcGF0aCBpbiBkaXJzOgorICAgICAgICAgICAgc2VsZi5fYWRkX3BsdWdpbmRpcihwYXRoKQorCisgICAgICAgICMgbG9hZCBhbGwgdGhlIHBsdWdpbnMgQUdBSU4KKyAgICAgICAgc2VsZi5fbG9hZF9hbGwoKQorCisgICAgZGVmIF9hZGRfcGx1Z2luZGlyKHNlbGYsIHBhdGgpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZXhwYW5kdXNlcihwYXRoKSkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHBhdGggbm90IGluIHNlbGYucGx1Z2luX2RpcnM6CisgICAgICAgICAgICBzZWxmLnBsdWdpbl9kaXJzW3BhdGhdID0gRmFsc2UKKyAgICAgICAgICAgICMgdGhlIHZhbHVlIFRydWUvRmFsc2UgbWVhbnMgImxvYWRlZCIKKworICAgIGRlZiBfbG9hZF9hbGwoc2VsZik6CisgICAgICAgIGZvciAocGRpciwgbG9hZGVkKSBpbiBzZWxmLnBsdWdpbl9kaXJzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgbG9hZGVkOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBwZGlyKQorICAgICAgICAgICAgZm9yIG1vZCBpbiBbeFs6LTNdIGZvciB4IGluIG9zLmxpc3RkaXIocGRpcikgaWYgeC5lbmRzd2l0aCgiLnB5IildOgorICAgICAgICAgICAgICAgIGlmIG1vZCBhbmQgbW9kICE9ICdfX2luaXRfXyc6CisgICAgICAgICAgICAgICAgICAgIGlmIG1vZCBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICNzZWxmLnBsdWdpbl9kaXJzW3BkaXJdID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgbXNnZXIud2FybmluZygiTW9kdWxlICVzIGFscmVhZHkgZXhpc3RzLCBza2lwIiAlIG1vZCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBweW1vZCA9IF9faW1wb3J0X18obW9kKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGx1Z2luX2RpcnNbcGRpcl0gPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoIlBsdWdpbiBtb2R1bGUgJXM6JXMgaW1wb3J0ZWQiXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKG1vZCwgcHltb2QuX19maWxlX18pKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gJ0ZhaWxlZCB0byBsb2FkIHBsdWdpbiAlcy8lczogJXMnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAob3MucGF0aC5iYXNlbmFtZShwZGlyKSwgbW9kLCBlcnIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnZXIud2FybmluZyhtc2cpCisKKyAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQorCisgICAgZGVmIGdldF9wbHVnaW5zKHNlbGYsIHB0eXBlKToKKyAgICAgICAgIiIiIHRoZSByZXR1cm4gdmFsdWUgaXMgZGljdCBvZiBuYW1lOmNsYXNzIHBhaXJzICIiIgorCisgICAgICAgIGlmIHB0eXBlIG5vdCBpbiBQTFVHSU5fVFlQRVM6CisgICAgICAgICAgICByYWlzZSBlcnJvcnMuQ3JlYXRvckVycm9yKCclcyBpcyBub3QgdmFsaWQgcGx1Z2luIHR5cGUnICUgcHR5cGUpCisKKyAgICAgICAgcGx1Z2luc19kaXIgPSBzZWxmLl9idWlsZF9wbHVnaW5fZGlyX2xpc3Qoc2VsZi5wbHVnaW5fZGlyLCBwdHlwZSkKKworICAgICAgICBzZWxmLmFwcGVuZF9kaXJzKHBsdWdpbnNfZGlyKQorCisgICAgICAgIHJldHVybiBwbHVnaW5iYXNlLmdldF9wbHVnaW5zKHB0eXBlKQorCisgICAgZGVmIGdldF9zb3VyY2VfcGx1Z2lucyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBsaXN0IG9mIGF2YWlsYWJsZSBzb3VyY2UgcGx1Z2lucy4KKyAgICAgICAgIiIiCisgICAgICAgIHBsdWdpbnNfZGlyID0gc2VsZi5fYnVpbGRfcGx1Z2luX2Rpcl9saXN0KHNlbGYucGx1Z2luX2RpciwgJ3NvdXJjZScpCisKKyAgICAgICAgc2VsZi5hcHBlbmRfZGlycyhwbHVnaW5zX2RpcikKKworICAgICAgICByZXR1cm4gc2VsZi5nZXRfcGx1Z2lucygnc291cmNlJykKKworCisgICAgZGVmIGdldF9zb3VyY2VfcGx1Z2luX21ldGhvZHMoc2VsZiwgc291cmNlX25hbWUsIG1ldGhvZHMpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIG1ldGhvZHMgcGFyYW0gaXMgYSBkaWN0IHdpdGggdGhlIG1ldGhvZCBuYW1lcyB0byBmaW5kLiAgT24KKyAgICAgICAgcmV0dXJuLCB0aGUgZGljdCB2YWx1ZXMgd2lsbCBiZSBmaWxsZWQgaW4gd2l0aCBwb2ludGVycyB0byB0aGUKKyAgICAgICAgY29ycmVzcG9uZGluZyBtZXRob2RzLiAgSWYgb25lIG9yIG1vcmUgbWV0aG9kcyBhcmUgbm90IGZvdW5kLAorICAgICAgICBOb25lIGlzIHJldHVybmVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuX21ldGhvZHMgPSBOb25lCisgICAgICAgIGZvciBfc291cmNlX25hbWUsIGtsYXNzIGluIHNlbGYuZ2V0X3BsdWdpbnMoJ3NvdXJjZScpLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgX3NvdXJjZV9uYW1lID09IHNvdXJjZV9uYW1lOgorICAgICAgICAgICAgICAgIGZvciBfbWV0aG9kX25hbWUgaW4gbWV0aG9kcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGtsYXNzLCBfbWV0aG9kX25hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgbXNnZXIud2FybmluZygiVW5pbXBsZW1lbnRlZCAlcyBzb3VyY2UgaW50ZXJmYWNlIGZvcjogJXMiXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChfbWV0aG9kX25hbWUsIF9zb3VyY2VfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihrbGFzcywgX21ldGhvZF9uYW1lKQorICAgICAgICAgICAgICAgICAgICBtZXRob2RzW19tZXRob2RfbmFtZV0gPSBmdW5jCisgICAgICAgICAgICAgICAgICAgIHJldHVybl9tZXRob2RzID0gbWV0aG9kcworICAgICAgICByZXR1cm4gcmV0dXJuX21ldGhvZHMKKworcGx1Z2lubWdyID0gUGx1Z2luTWdyKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbmJhc2UucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5iYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOGZlOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5iYXNlLnB5CkBAIC0wLDAgKzEsMTA4IEBACisjIS91c3IvYmluL2VudiBweXRob24gLXR0CisjCisjIENvcHlyaWdodCAoYykgMjAxMSBJbnRlbCwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCisKK2NsYXNzIF9QbHVnaW4ob2JqZWN0KToKKyAgICBjbGFzcyBfX21ldGFjbGFzc19fKHR5cGUpOgorICAgICAgICBkZWYgX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywgYXR0cnMpOgorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoY2xzLCAncGx1Z2lucycpOgorICAgICAgICAgICAgICAgIGNscy5wbHVnaW5zID0ge30KKworICAgICAgICAgICAgZWxpZiAnd2ljX3BsdWdpbl90eXBlJyBpbiBhdHRyczoKKyAgICAgICAgICAgICAgICBpZiBhdHRyc1snd2ljX3BsdWdpbl90eXBlJ10gbm90IGluIGNscy5wbHVnaW5zOgorICAgICAgICAgICAgICAgICAgICBjbHMucGx1Z2luc1thdHRyc1snd2ljX3BsdWdpbl90eXBlJ11dID0ge30KKworICAgICAgICAgICAgZWxpZiBoYXNhdHRyKGNscywgJ3dpY19wbHVnaW5fdHlwZScpIGFuZCAnbmFtZScgaW4gYXR0cnM6CisgICAgICAgICAgICAgICAgY2xzLnBsdWdpbnNbY2xzLndpY19wbHVnaW5fdHlwZV1bYXR0cnNbJ25hbWUnXV0gPSBjbHMKKworICAgICAgICBkZWYgc2hvd19wbHVnaW5zKGNscyk6CisgICAgICAgICAgICBmb3IgY2xzIGluIGNscy5wbHVnaW5zW2Nscy53aWNfcGx1Z2luX3R5cGVdOgorICAgICAgICAgICAgICAgIHByaW50IGNscworCisgICAgICAgIGRlZiBnZXRfcGx1Z2lucyhjbHMpOgorICAgICAgICAgICAgcmV0dXJuIGNscy5wbHVnaW5zCisKKworY2xhc3MgSW1hZ2VyUGx1Z2luKF9QbHVnaW4pOgorICAgIHdpY19wbHVnaW5fdHlwZSA9ICJpbWFnZXIiCisKKworY2xhc3MgU291cmNlUGx1Z2luKF9QbHVnaW4pOgorICAgIHdpY19wbHVnaW5fdHlwZSA9ICJzb3VyY2UiCisgICAgIiIiCisgICAgVGhlIG1ldGhvZHMgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgYnkgLS1zb3VyY2UgcGx1Z2lucy4KKworICAgIEFueSBtZXRob2RzIG5vdCBpbXBsZW1lbnRlZCBpbiBhIHN1YmNsYXNzIGluaGVyaXQgdGhlc2UuCisgICAgIiIiCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9faW5zdGFsbF9kaXNrKGNscywgZGlzaywgZGlza19uYW1lLCBjcmVhdG9yLCB3b3JrZGlyLCBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgYWZ0ZXIgYWxsIHBhcnRpdGlvbnMgaGF2ZSBiZWVuIHByZXBhcmVkIGFuZCBhc3NlbWJsZWQgaW50byBhCisgICAgICAgIGRpc2sgaW1hZ2UuICBUaGlzIHByb3ZpZGVzIGEgaG9vayB0byBhbGxvdyBmaW5hbGl6YXRpb24gb2YgYQorICAgICAgICBkaXNrIGltYWdlIGUuZy4gdG8gd3JpdGUgYW4gTUJSIHRvIGl0LgorICAgICAgICAiIiIKKyAgICAgICAgbXNnZXIuZGVidWcoIlNvdXJjZVBsdWdpbjogZG9faW5zdGFsbF9kaXNrOiBkaXNrOiAlcyIgJSBkaXNrX25hbWUpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fc3RhZ2VfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3JlYXRvciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIFNwZWNpYWwgY29udGVudCBzdGFnaW5nIGhvb2sgY2FsbGVkIGJlZm9yZSBkb19wcmVwYXJlX3BhcnRpdGlvbigpLAorICAgICAgICBub3JtYWxseSBlbXB0eS4KKworICAgICAgICBUeXBpY2FsbHksIGEgcGFydGl0aW9uIHdpbGwganVzdCB1c2UgdGhlIHBhc3NlZC1pbiBwYXJhbWUgZS5nCisgICAgICAgIHN0cmFpZ2h0IGJvb3RpbWdfZGlyLCBldGMsIGJ1dCBpbiBzb21lIGNhc2VzLCB0aGluZ3MgbmVlZCB0bworICAgICAgICBiZSBtb3JlIHRhaWxvcmVkIGUuZy4gdG8gdXNlIGEgZGVwbG95IGRpciArIC9ib290LCBldGMuICBUaGlzCisgICAgICAgIGhvb2sgYWxsb3dzIHRob3NlIGZpbGVzIHRvIGJlIHN0YWdlZCBpbiBhIGN1c3RvbWl6ZWQgZmFzaGlvbi4KKyAgICAgICAgTm90IHRoYXQgZ2V0X2JpdGJha2VfdmFyKCkgYWxsb3dzIHlvdSB0byBhY2NlcyBub24tc3RhbmRhcmQKKyAgICAgICAgdmFyaWFibGVzIHRoYXQgeW91IG1pZ2h0IHdhbnQgdG8gdXNlIGZvciB0aGlzLgorICAgICAgICAiIiIKKyAgICAgICAgbXNnZXIuZGVidWcoIlNvdXJjZVBsdWdpbjogZG9fc3RhZ2VfcGFydGl0aW9uOiBwYXJ0OiAlcyIgJSBwYXJ0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2NvbmZpZ3VyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjcmVhdG9yLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgYmVmb3JlIGRvX3ByZXBhcmVfcGFydGl0aW9uKCksIHR5cGljYWxseSB1c2VkIHRvIGNyZWF0ZQorICAgICAgICBjdXN0b20gY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgYSBwYXJ0aXRpb24sIGZvciBleGFtcGxlCisgICAgICAgIHN5c2xpbnV4IG9yIGdydWIgY29uZmlnIGZpbGVzLgorICAgICAgICAiIiIKKyAgICAgICAgbXNnZXIuZGVidWcoIlNvdXJjZVBsdWdpbjogZG9fY29uZmlndXJlX3BhcnRpdGlvbjogcGFydDogJXMiICUgcGFydCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19wcmVwYXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2Rpciwgcm9vdGZzX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIHRvIGRvIHRoZSBhY3R1YWwgY29udGVudCBwb3B1bGF0aW9uIGZvciBhIHBhcnRpdGlvbiBpLmUuIGl0CisgICAgICAgICdwcmVwYXJlcycgdGhlIHBhcnRpdGlvbiB0byBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgaW1hZ2UuCisgICAgICAgICIiIgorICAgICAgICBtc2dlci5kZWJ1ZygiU291cmNlUGx1Z2luOiBkb19wcmVwYXJlX3BhcnRpdGlvbjogcGFydDogJXMiICUgcGFydCkKKworZGVmIGdldF9wbHVnaW5zKHR5cGVuKToKKyAgICBwbHVnaW5zID0gSW1hZ2VyUGx1Z2luLmdldF9wbHVnaW5zKCkKKyAgICBpZiB0eXBlbiBpbiBwbHVnaW5zOgorICAgICAgICByZXR1cm4gcGx1Z2luc1t0eXBlbl0KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uZQorCitfX2FsbF9fID0gWydJbWFnZXJQbHVnaW4nLCAnU291cmNlUGx1Z2luJywgJ2dldF9wbHVnaW5zJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvaW1hZ2VyL2RpcmVjdF9wbHVnaW4ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL2ltYWdlci9kaXJlY3RfcGx1Z2luLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkM2Y0NmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL2ltYWdlci9kaXJlY3RfcGx1Z2luLnB5CkBAIC0wLDAgKzEsMTAyIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBpbXBsZW1lbnRzIHRoZSAnZGlyZWN0JyBpbWFnZXIgcGx1Z2luIGNsYXNzIGZvciAnd2ljJworIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGxpbnV4LmludGVsLmNvbT4KKyMKKworZnJvbSB3aWMudXRpbHMgaW1wb3J0IGVycm9ycworZnJvbSB3aWMuY29uZiBpbXBvcnQgY29uZmlnbWdyCisKK2ltcG9ydCB3aWMuaW1hZ2VyLmRpcmVjdCBhcyBkaXJlY3QKK2Zyb20gd2ljLnBsdWdpbmJhc2UgaW1wb3J0IEltYWdlclBsdWdpbgorCitjbGFzcyBEaXJlY3RQbHVnaW4oSW1hZ2VyUGx1Z2luKToKKyAgICAiIiIKKyAgICBJbnN0YWxsIGEgc3lzdGVtIGludG8gYSBmaWxlIGNvbnRhaW5pbmcgYSBwYXJ0aXRpb25lZCBkaXNrIGltYWdlLgorCisgICAgQW4gaW1hZ2UgZmlsZSBpcyBmb3JtYXR0ZWQgd2l0aCBhIHBhcnRpdGlvbiB0YWJsZSwgZWFjaCBwYXJ0aXRpb24KKyAgICBjcmVhdGVkIGZyb20gYSByb290ZnMgb3Igb3RoZXIgT3BlbkVtYmVkZGVkIGJ1aWxkIGFydGlmYWN0IGFuZCBkZCdlZAorICAgIGludG8gdGhlIHZpcnR1YWwgZGlzay4gVGhlIGRpc2sgaW1hZ2UgY2FuIHN1YnNlcXVlbnRseSBiZSBkZCdlZCBvbnRvCisgICAgbWVkaWEgYW5kIHVzZWQgb24gYWN0dWFsIGhhcmR3YXJlLgorICAgICIiIgorCisgICAgbmFtZSA9ICdkaXJlY3QnCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19yb290ZnNfZGlyX3RvX2RpY3QoY2xzLCByb290ZnNfZGlycyk6CisgICAgICAgICIiIgorICAgICAgICBHZXRzIGEgc3RyaW5nIHRoYXQgY29udGFpbiAnY29ubmVjdGlvbj1kaXInIHNwbGl0dGVkIGJ5CisgICAgICAgIHNwYWNlIGFuZCByZXR1cm4gYSBkaWN0CisgICAgICAgICIiIgorICAgICAgICBrcm9vdGZzX2RpciA9IHt9CisgICAgICAgIGZvciByb290ZnNfZGlyIGluIHJvb3Rmc19kaXJzLnNwbGl0KCcgJyk6CisgICAgICAgICAgICBrZXksIHZhbCA9IHJvb3Rmc19kaXIuc3BsaXQoJz0nKQorICAgICAgICAgICAga3Jvb3Rmc19kaXJba2V5XSA9IHZhbAorCisgICAgICAgIHJldHVybiBrcm9vdGZzX2RpcgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2NyZWF0ZShjbHMsIG9wdHMsICphcmdzKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBkaXJlY3QgaW1hZ2UsIGNhbGxlZCBmcm9tIGNyZWF0b3IgYXMgJ2RpcmVjdCcgY21kCisgICAgICAgICIiIgorICAgICAgICBpZiBsZW4oYXJncykgIT0gODoKKyAgICAgICAgICAgIHJhaXNlIGVycm9ycy5Vc2FnZSgiRXh0cmEgYXJndW1lbnRzIGdpdmVuIikKKworICAgICAgICBuYXRpdmVfc3lzcm9vdCA9IGFyZ3NbMF0KKyAgICAgICAga2VybmVsX2RpciA9IGFyZ3NbMV0KKyAgICAgICAgYm9vdGltZ19kaXIgPSBhcmdzWzJdCisgICAgICAgIHJvb3Rmc19kaXIgPSBhcmdzWzNdCisKKyAgICAgICAgY3JlYXRvcm9wdHMgPSBjb25maWdtZ3IuY3JlYXRlCisgICAgICAgIGtzY29uZiA9IGFyZ3NbNF0KKworICAgICAgICBpbWFnZV9vdXRwdXRfZGlyID0gYXJnc1s1XQorICAgICAgICBvZV9idWlsZGRpciA9IGFyZ3NbNl0KKyAgICAgICAgY29tcHJlc3NvciA9IGFyZ3NbN10KKworICAgICAgICBrcm9vdGZzX2RpciA9IGNscy5fX3Jvb3Rmc19kaXJfdG9fZGljdChyb290ZnNfZGlyKQorCisgICAgICAgIGNvbmZpZ21nci5fa3Njb25mID0ga3Njb25mCisKKyAgICAgICAgY3JlYXRvciA9IGRpcmVjdC5EaXJlY3RJbWFnZUNyZWF0b3Iob2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX291dHB1dF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtyb290ZnNfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290aW1nX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0b3JvcHRzKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNyZWF0b3IuY3JlYXRlKCkKKyAgICAgICAgICAgIGNyZWF0b3IuYXNzZW1ibGUoKQorICAgICAgICAgICAgY3JlYXRvci5maW5hbGl6ZSgpCisgICAgICAgICAgICBjcmVhdG9yLnByaW50X291dGltYWdlX2luZm8oKQorCisgICAgICAgIGV4Y2VwdCBlcnJvcnMuQ3JlYXRvckVycm9yOgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNyZWF0b3IuY2xlYW51cCgpCisKKyAgICAgICAgcmV0dXJuIDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctZWZpLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1lZmkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2M2M2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctZWZpLnB5CkBAIC0wLDAgKzEsMjE0IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBpbXBsZW1lbnRzIHRoZSAnYm9vdGltZy1lZmknIHNvdXJjZSBwbHVnaW4gY2xhc3MgZm9yICd3aWMnCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gbGludXguaW50ZWwuY29tPgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKKworZnJvbSB3aWMgaW1wb3J0IGtpY2tzdGFydCwgbXNnZXIKK2Zyb20gd2ljLnBsdWdpbmJhc2UgaW1wb3J0IFNvdXJjZVBsdWdpbgorZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZXhlY19jbWQsIGV4ZWNfbmF0aXZlX2NtZCwgZ2V0X2JpdGJha2VfdmFyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09URERfRVhUUkFfU1BBQ0UKKworY2xhc3MgQm9vdGltZ0VGSVBsdWdpbihTb3VyY2VQbHVnaW4pOgorICAgICIiIgorICAgIENyZWF0ZSBFRkkgYm9vdCBwYXJ0aXRpb24uCisgICAgVGhpcyBwbHVnaW4gc3VwcG9ydHMgR1JVQiAyIGFuZCBndW1taWJvb3QgYm9vdGxvYWRlcnMuCisgICAgIiIiCisKKyAgICBuYW1lID0gJ2Jvb3RpbWctZWZpJworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2NvbmZpZ3VyZV9ncnViZWZpKGNscywgaGRkZGlyLCBjcmVhdG9yLCBjcl93b3JrZGlyKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBsb2FkZXItc3BlY2lmaWMgKGdydWItZWZpKSBjb25maWcKKyAgICAgICAgIiIiCisgICAgICAgIG9wdGlvbnMgPSBjcmVhdG9yLmtzLmhhbmRsZXIuYm9vdGxvYWRlci5hcHBlbmRMaW5lCisKKyAgICAgICAgZ3J1YmVmaV9jb25mID0gIiIKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJzZXJpYWwgLS11bml0PTAgLS1zcGVlZD0xMTUyMDAgLS13b3JkPTggLS1wYXJpdHk9bm8gLS1zdG9wPTFcbiIKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJkZWZhdWx0PWJvb3RcbiIKKyAgICAgICAgdGltZW91dCA9IGtpY2tzdGFydC5nZXRfdGltZW91dChjcmVhdG9yLmtzKQorICAgICAgICBpZiBub3QgdGltZW91dDoKKyAgICAgICAgICAgIHRpbWVvdXQgPSAwCisgICAgICAgIGdydWJlZmlfY29uZiArPSAidGltZW91dD0lc1xuIiAlIHRpbWVvdXQKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJtZW51ZW50cnkgJ2Jvb3Qne1xuIgorCisgICAgICAgIGtlcm5lbCA9ICIvYnpJbWFnZSIKKworICAgICAgICBncnViZWZpX2NvbmYgKz0gImxpbnV4ICVzIHJvb3Q9JXMgcm9vdHdhaXQgJXNcbiIgXAorICAgICAgICAgICAgJSAoa2VybmVsLCBjcmVhdG9yLnJvb3RkZXYsIG9wdGlvbnMpCisgICAgICAgIGdydWJlZmlfY29uZiArPSAifVxuIgorCisgICAgICAgIG1zZ2VyLmRlYnVnKCJXcml0aW5nIGdydWJlZmkgY29uZmlnICVzL2hkZC9ib290L0VGSS9CT09UL2dydWIuY2ZnIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAlIGNyX3dvcmtkaXIpCisgICAgICAgIGNmZyA9IG9wZW4oIiVzL2hkZC9ib290L0VGSS9CT09UL2dydWIuY2ZnIiAlIGNyX3dvcmtkaXIsICJ3IikKKyAgICAgICAgY2ZnLndyaXRlKGdydWJlZmlfY29uZikKKyAgICAgICAgY2ZnLmNsb3NlKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19jb25maWd1cmVfZ3VtbWlib290KGNscywgaGRkZGlyLCBjcmVhdG9yLCBjcl93b3JrZGlyKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBsb2FkZXItc3BlY2lmaWMgKGd1bW1pYm9vdCkgY29uZmlnCisgICAgICAgICIiIgorICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1kICVzL2xvYWRlciIgJSBoZGRkaXIKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtZCAlcy9sb2FkZXIvZW50cmllcyIgJSBoZGRkaXIKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgb3B0aW9ucyA9IGNyZWF0b3Iua3MuaGFuZGxlci5ib290bG9hZGVyLmFwcGVuZExpbmUKKworICAgICAgICB0aW1lb3V0ID0ga2lja3N0YXJ0LmdldF90aW1lb3V0KGNyZWF0b3Iua3MpCisgICAgICAgIGlmIG5vdCB0aW1lb3V0OgorICAgICAgICAgICAgdGltZW91dCA9IDAKKworICAgICAgICBsb2FkZXJfY29uZiA9ICIiCisgICAgICAgIGxvYWRlcl9jb25mICs9ICJkZWZhdWx0IGJvb3RcbiIKKyAgICAgICAgbG9hZGVyX2NvbmYgKz0gInRpbWVvdXQgJWRcbiIgJSB0aW1lb3V0CisKKyAgICAgICAgbXNnZXIuZGVidWcoIldyaXRpbmcgZ3VtbWlib290IGNvbmZpZyAlcy9oZGQvYm9vdC9sb2FkZXIvbG9hZGVyLmNvbmYiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICUgY3Jfd29ya2RpcikKKyAgICAgICAgY2ZnID0gb3BlbigiJXMvaGRkL2Jvb3QvbG9hZGVyL2xvYWRlci5jb25mIiAlIGNyX3dvcmtkaXIsICJ3IikKKyAgICAgICAgY2ZnLndyaXRlKGxvYWRlcl9jb25mKQorICAgICAgICBjZmcuY2xvc2UoKQorCisgICAgICAgIGtlcm5lbCA9ICIvYnpJbWFnZSIKKworICAgICAgICBib290X2NvbmYgPSAiIgorICAgICAgICBib290X2NvbmYgKz0gInRpdGxlIGJvb3RcbiIKKyAgICAgICAgYm9vdF9jb25mICs9ICJsaW51eCAlc1xuIiAlIGtlcm5lbAorICAgICAgICBib290X2NvbmYgKz0gIm9wdGlvbnMgTEFCRUw9Qm9vdCByb290PSVzICVzXG4iICUgKGNyZWF0b3Iucm9vdGRldiwgb3B0aW9ucykKKworICAgICAgICBtc2dlci5kZWJ1ZygiV3JpdGluZyBndW1taWJvb3QgY29uZmlnICVzL2hkZC9ib290L2xvYWRlci9lbnRyaWVzL2Jvb3QuY29uZiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgJSBjcl93b3JrZGlyKQorICAgICAgICBjZmcgPSBvcGVuKCIlcy9oZGQvYm9vdC9sb2FkZXIvZW50cmllcy9ib290LmNvbmYiICUgY3Jfd29ya2RpciwgInciKQorICAgICAgICBjZmcud3JpdGUoYm9vdF9jb25mKQorICAgICAgICBjZmcuY2xvc2UoKQorCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fY29uZmlndXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCBiZWZvcmUgZG9fcHJlcGFyZV9wYXJ0aXRpb24oKSwgY3JlYXRlcyBsb2FkZXItc3BlY2lmaWMgY29uZmlnCisgICAgICAgICIiIgorICAgICAgICBoZGRkaXIgPSAiJXMvaGRkL2Jvb3QiICUgY3Jfd29ya2RpcgorICAgICAgICBybV9jbWQgPSAicm0gLXJmICVzIiAlIGNyX3dvcmtkaXIKKyAgICAgICAgZXhlY19jbWQocm1fY21kKQorCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLWQgJXMvRUZJL0JPT1QiICUgaGRkZGlyCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNvdXJjZV9wYXJhbXNbJ2xvYWRlciddID09ICdncnViLWVmaSc6CisgICAgICAgICAgICAgICAgY2xzLmRvX2NvbmZpZ3VyZV9ncnViZWZpKGhkZGRpciwgY3JlYXRvciwgY3Jfd29ya2RpcikKKyAgICAgICAgICAgIGVsaWYgc291cmNlX3BhcmFtc1snbG9hZGVyJ10gPT0gJ2d1bW1pYm9vdCc6CisgICAgICAgICAgICAgICAgY2xzLmRvX2NvbmZpZ3VyZV9ndW1taWJvb3QoaGRkZGlyLCBjcmVhdG9yLCBjcl93b3JrZGlyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigidW5yZWNvZ25pemVkIGJvb3RpbWctZWZpIGxvYWRlcjogJXMiICUgc291cmNlX3BhcmFtc1snbG9hZGVyJ10pCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJib290aW1nLWVmaSByZXF1aXJlcyBhIGxvYWRlciwgbm9uZSBzcGVjaWZpZWQiKQorCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fcHJlcGFyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjcmVhdG9yLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Rmc19kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCB0byBkbyB0aGUgYWN0dWFsIGNvbnRlbnQgcG9wdWxhdGlvbiBmb3IgYSBwYXJ0aXRpb24gaS5lLiBpdAorICAgICAgICAncHJlcGFyZXMnIHRoZSBwYXJ0aXRpb24gdG8gYmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGltYWdlLgorICAgICAgICBJbiB0aGlzIGNhc2UsIHByZXBhcmUgY29udGVudCBmb3IgYW4gRUZJIChncnViKSBib290IHBhcnRpdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBib290aW1nX2RpcjoKKyAgICAgICAgICAgIGJvb3RpbWdfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJIRERESVIiKQorICAgICAgICAgICAgaWYgbm90IGJvb3RpbWdfZGlyOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIEhERERJUiwgZXhpdGluZ1xuIikKKyAgICAgICAgICAgICMganVzdCBzbyB0aGUgcmVzdWx0IG5vdGVzIGRpc3BsYXkgaXQKKyAgICAgICAgICAgIGNyZWF0b3Iuc2V0X2Jvb3RpbWdfZGlyKGJvb3RpbWdfZGlyKQorCisgICAgICAgIHN0YWdpbmdfa2VybmVsX2RpciA9IGtlcm5lbF9kaXIKKworICAgICAgICBoZGRkaXIgPSAiJXMvaGRkL2Jvb3QiICUgY3Jfd29ya2RpcgorCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLW0gMDY0NCAlcy9iekltYWdlICVzL2J6SW1hZ2UiICUgXAorICAgICAgICAgICAgKHN0YWdpbmdfa2VybmVsX2RpciwgaGRkZGlyKQorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzb3VyY2VfcGFyYW1zWydsb2FkZXInXSA9PSAnZ3J1Yi1lZmknOgorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZSgiJXMvaGRkL2Jvb3QvRUZJL0JPT1QvZ3J1Yi5jZmciICUgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzL2dydWIuY2ZnIiAlIGNyX3dvcmtkaXIpCisgICAgICAgICAgICAgICAgY3BfY21kID0gImNwICVzL0VGSS9CT09ULyogJXMvRUZJL0JPT1QiICUgKGJvb3RpbWdfZGlyLCBoZGRkaXIpCisgICAgICAgICAgICAgICAgZXhlY19jbWQoY3BfY21kLCBUcnVlKQorICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKCIlcy9ncnViLmNmZyIgJSBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcy9oZGQvYm9vdC9FRkkvQk9PVC9ncnViLmNmZyIgJSBjcl93b3JrZGlyKQorICAgICAgICAgICAgZWxpZiBzb3VyY2VfcGFyYW1zWydsb2FkZXInXSA9PSAnZ3VtbWlib290JzoKKyAgICAgICAgICAgICAgICBjcF9jbWQgPSAiY3AgJXMvRUZJL0JPT1QvKiAlcy9FRkkvQk9PVCIgJSAoYm9vdGltZ19kaXIsIGhkZGRpcikKKyAgICAgICAgICAgICAgICBleGVjX2NtZChjcF9jbWQsIFRydWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJ1bnJlY29nbml6ZWQgYm9vdGltZy1lZmkgbG9hZGVyOiAlcyIgJSBzb3VyY2VfcGFyYW1zWydsb2FkZXInXSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoImJvb3RpbWctZWZpIHJlcXVpcmVzIGEgbG9hZGVyLCBub25lIHNwZWNpZmllZCIpCisKKyAgICAgICAgZHVfY21kID0gImR1IC1ia3MgJXMiICUgaGRkZGlyCisgICAgICAgIG91dCA9IGV4ZWNfY21kKGR1X2NtZCkKKyAgICAgICAgYmxvY2tzID0gaW50KG91dC5zcGxpdCgpWzBdKQorCisgICAgICAgIGV4dHJhX2Jsb2NrcyA9IHBhcnQuZ2V0X2V4dHJhX2Jsb2NrX2NvdW50KGJsb2NrcykKKworICAgICAgICBpZiBleHRyYV9ibG9ja3MgPCBCT09URERfRVhUUkFfU1BBQ0U6CisgICAgICAgICAgICBleHRyYV9ibG9ja3MgPSBCT09URERfRVhUUkFfU1BBQ0UKKworICAgICAgICBibG9ja3MgKz0gZXh0cmFfYmxvY2tzCisKKyAgICAgICAgbXNnZXIuZGVidWcoIkFkZGVkICVkIGV4dHJhIGJsb2NrcyB0byAlcyB0byBnZXQgdG8gJWQgdG90YWwgYmxvY2tzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgKGV4dHJhX2Jsb2NrcywgcGFydC5tb3VudHBvaW50LCBibG9ja3MpKQorCisgICAgICAgICMgRW5zdXJlIHRvdGFsIHNlY3RvcnMgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHNlY3RvcnMgcGVyCisgICAgICAgICMgdHJhY2sgb3IgbWNvcHkgd2lsbCBjb21wbGFpbi4gU2VjdG9ycyBhcmUgNTEyIGJ5dGVzLCBhbmQgd2UKKyAgICAgICAgIyBnZW5lcmF0ZSBpbWFnZXMgd2l0aCAzMiBzZWN0b3JzIHBlciB0cmFjay4gVGhpcyBjYWxjdWxhdGlvbiBpcworICAgICAgICAjIGRvbmUgaW4gYmxvY2tzLCB0aHVzIHRoZSBtb2QgYnkgMTYgaW5zdGVhZCBvZiAzMi4KKyAgICAgICAgYmxvY2tzICs9ICgxNiAtIChibG9ja3MgJSAxNikpCisKKyAgICAgICAgIyBkb3NmcyBpbWFnZSwgY3JlYXRlZCBieSBta2Rvc2ZzCisgICAgICAgIGJvb3RpbWcgPSAiJXMvYm9vdC5pbWciICUgY3Jfd29ya2RpcgorCisgICAgICAgIGRvc2ZzX2NtZCA9ICJta2Rvc2ZzIC1uIGVmaSAtQyAlcyAlZCIgJSAoYm9vdGltZywgYmxvY2tzKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQoZG9zZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICBtY29weV9jbWQgPSAibWNvcHkgLWkgJXMgLXMgJXMvKiA6Oi8iICUgKGJvb3RpbWcsIGhkZGRpcikKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKG1jb3B5X2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgY2htb2RfY21kID0gImNobW9kIDY0NCAlcyIgJSBib290aW1nCisgICAgICAgIGV4ZWNfY21kKGNobW9kX2NtZCkKKworICAgICAgICBkdV9jbWQgPSAiZHUgLUxia3MgJXMiICUgYm9vdGltZworICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgIGJvb3RpbWdfc2l6ZSA9IG91dC5zcGxpdCgpWzBdCisKKyAgICAgICAgcGFydC5zZXRfc2l6ZShib290aW1nX3NpemUpCisgICAgICAgIHBhcnQuc2V0X3NvdXJjZV9maWxlKGJvb3RpbWcpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLXBhcnRpdGlvbi5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctcGFydGl0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMmNhMGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLXBhcnRpdGlvbi5weQpAQCAtMCwwICsxLDE0MyBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgaW1wbGVtZW50cyB0aGUgJ2Jvb3RpbWctcGFydGl0aW9uJyBzb3VyY2UgcGx1Z2luIGNsYXNzIGZvcgorIyAnd2ljJy4gVGhlIHBsdWdpbiBjcmVhdGVzIGFuIGltYWdlIG9mIGJvb3QgcGFydGl0aW9uLCBjb3B5aW5nIG92ZXIKKyMgZmlsZXMgbGlzdGVkIGluIElNQUdFX0JPT1RfRklMRVMgYml0YmFrZSB2YXJpYWJsZS4KKyMKKyMgQVVUSE9SUworIyBNYWNpZWogQm9yemVja2kgPG1hY2llai5ib3J6ZWNraSAoYXRdIG9wZW4tcm5kLnBsPgorIworCitpbXBvcnQgb3MKK2ltcG9ydCByZQorCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIKK2Zyb20gd2ljLnBsdWdpbmJhc2UgaW1wb3J0IFNvdXJjZVBsdWdpbgorZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZXhlY19jbWQsIGdldF9iaXRiYWtlX3ZhcgorZnJvbSBnbG9iIGltcG9ydCBnbG9iCisKK2NsYXNzIEJvb3RpbWdQYXJ0aXRpb25QbHVnaW4oU291cmNlUGx1Z2luKToKKyAgICAiIiIKKyAgICBDcmVhdGUgYW4gaW1hZ2Ugb2YgYm9vdCBwYXJ0aXRpb24sIGNvcHlpbmcgb3ZlciBmaWxlcworICAgIGxpc3RlZCBpbiBJTUFHRV9CT09UX0ZJTEVTIGJpdGJha2UgdmFyaWFibGUuCisgICAgIiIiCisKKyAgICBuYW1lID0gJ2Jvb3RpbWctcGFydGl0aW9uJworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2luc3RhbGxfZGlzayhjbHMsIGRpc2ssIGRpc2tfbmFtZSwgY3IsIHdvcmtkaXIsIG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCBhZnRlciBhbGwgcGFydGl0aW9ucyBoYXZlIGJlZW4gcHJlcGFyZWQgYW5kIGFzc2VtYmxlZCBpbnRvIGEKKyAgICAgICAgZGlzayBpbWFnZS4gRG8gbm90aGluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19jb25maWd1cmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCBiZWZvcmUgZG9fcHJlcGFyZV9wYXJ0aXRpb24oKS4gUG9zc2libHkgcHJlcGFyZQorICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIG9mIHNvbWUgc29ydC4KKworICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX3ByZXBhcmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGZzX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIHRvIGRvIHRoZSBhY3R1YWwgY29udGVudCBwb3B1bGF0aW9uIGZvciBhIHBhcnRpdGlvbiBpLmUuIGl0CisgICAgICAgICdwcmVwYXJlcycgdGhlIHBhcnRpdGlvbiB0byBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgaW1hZ2UuCisgICAgICAgIEluIHRoaXMgY2FzZSwgZG9lcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAtIHNldHMgdXAgYSB2ZmF0IHBhcnRpdGlvbgorICAgICAgICAtIGNvcGllcyBhbGwgZmlsZXMgbGlzdGVkIGluIElNQUdFX0JPT1RfRklMRVMgdmFyaWFibGUKKyAgICAgICAgIiIiCisgICAgICAgIGhkZGRpciA9ICIlcy9ib290IiAlIGNyX3dvcmtkaXIKKyAgICAgICAgcm1fY21kID0gInJtIC1yZiAlcy9ib290IiAlIGNyX3dvcmtkaXIKKyAgICAgICAgZXhlY19jbWQocm1fY21kKQorCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLWQgJXMiICUgaGRkZGlyCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgIGlmIG5vdCBib290aW1nX2RpcjoKKyAgICAgICAgICAgIGJvb3RpbWdfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJERVBMT1lfRElSX0lNQUdFIikKKyAgICAgICAgICAgIGlmIG5vdCBib290aW1nX2RpcjoKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBERVBMT1lfRElSX0lNQUdFLCBleGl0aW5nXG4iKQorCisgICAgICAgIG1zZ2VyLmRlYnVnKCdCb290aW1nIGRpcjogJXMnICUgYm9vdGltZ19kaXIpCisKKyAgICAgICAgYm9vdF9maWxlcyA9IGdldF9iaXRiYWtlX3ZhcigiSU1BR0VfQk9PVF9GSUxFUyIpCisKKyAgICAgICAgaWYgbm90IGJvb3RfZmlsZXM6CisgICAgICAgICAgICBtc2dlci5lcnJvcignTm8gYm9vdCBmaWxlcyBkZWZpbmVkLCBJTUFHRV9CT09UX0ZJTEVTIHVuc2V0JykKKworICAgICAgICBtc2dlci5kZWJ1ZygnQm9vdCBmaWxlczogJXMnICUgYm9vdF9maWxlcykKKworICAgICAgICAjIGxpc3Qgb2YgdHVwbGVzIChzcmNfbmFtZSwgZHN0X25hbWUpCisgICAgICAgIGRlcGxveV9maWxlcyA9IFtdCisgICAgICAgIGZvciBzcmNfZW50cnkgaW4gcmUuZmluZGFsbChyJ1tcdztcLVwuL1wqXSsnLCBib290X2ZpbGVzKToKKyAgICAgICAgICAgIGlmICc7JyBpbiBzcmNfZW50cnk6CisgICAgICAgICAgICAgICAgZHN0X2VudHJ5ID0gdHVwbGUoc3JjX2VudHJ5LnNwbGl0KCc7JykpCisgICAgICAgICAgICAgICAgaWYgbm90IGRzdF9lbnRyeVswXSBvciBub3QgZHN0X2VudHJ5WzFdOgorICAgICAgICAgICAgICAgICAgICBtc2dlci5lcnJvcignTWFsZm9ybWVkIGJvb3QgZmlsZSBlbnRyeTogJXMnICUgKHNyY19lbnRyeSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRzdF9lbnRyeSA9IChzcmNfZW50cnksIHNyY19lbnRyeSkKKworICAgICAgICAgICAgbXNnZXIuZGVidWcoJ0Rlc3RpbmF0aW9uIGVudHJ5OiAlcicgJSAoZHN0X2VudHJ5LCkpCisgICAgICAgICAgICBkZXBsb3lfZmlsZXMuYXBwZW5kKGRzdF9lbnRyeSkKKworICAgICAgICBmb3IgZGVwbG95X2VudHJ5IGluIGRlcGxveV9maWxlczoKKyAgICAgICAgICAgIHNyYywgZHN0ID0gZGVwbG95X2VudHJ5CisgICAgICAgICAgICBpbnN0YWxsX3Rhc2sgPSBbXQorICAgICAgICAgICAgaWYgJyonIGluIHNyYzoKKyAgICAgICAgICAgICAgICAjIGJ5IGRlZmF1bHQgaW5zdGFsbCBmaWxlcyB1bmRlciB0aGVpciBiYXNlbmFtZQorICAgICAgICAgICAgICAgIGVudHJ5X25hbWVfZm4gPSBvcy5wYXRoLmJhc2VuYW1lCisgICAgICAgICAgICAgICAgaWYgZHN0ICE9IHNyYzoKKyAgICAgICAgICAgICAgICAgICAgIyB1bmxlc3MgYSB0YXJnZXQgbmFtZSB3YXMgZ2l2ZW4sIHRoZW4gdHJlYXQgbmFtZQorICAgICAgICAgICAgICAgICAgICAjIGFzIGEgZGlyZWN0b3J5IGFuZCBhcHBlbmQgYSBiYXNlbmFtZQorICAgICAgICAgICAgICAgICAgICBlbnRyeV9uYW1lX2ZuID0gbGFtYmRhIG5hbWU6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShuYW1lKSkKKworICAgICAgICAgICAgICAgIHNyY3MgPSBnbG9iKG9zLnBhdGguam9pbihib290aW1nX2Rpciwgc3JjKSkKKworICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCdHbG9iYmVkIHNvdXJjZXM6ICVzJyAlICgnLCAnLmpvaW4oc3JjcykpKQorICAgICAgICAgICAgICAgIGZvciBlbnRyeSBpbiBzcmNzOgorICAgICAgICAgICAgICAgICAgICBlbnRyeV9kc3RfbmFtZSA9IGVudHJ5X25hbWVfZm4oZW50cnkpCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxfdGFzay5hcHBlbmQoKGVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oaGRkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlfZHN0X25hbWUpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5zdGFsbF90YXNrID0gWyhvcy5wYXRoLmpvaW4oYm9vdGltZ19kaXIsIHNyYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oaGRkZGlyLCBkc3QpKV0KKworICAgICAgICAgICAgZm9yIHRhc2sgaW4gaW5zdGFsbF90YXNrOgorICAgICAgICAgICAgICAgIHNyY19wYXRoLCBkc3RfcGF0aCA9IHRhc2sKKyAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygnSW5zdGFsbCAlcyBhcyAlcycgJSAob3MucGF0aC5iYXNlbmFtZShzcmNfcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdF9wYXRoKSkKKyAgICAgICAgICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1tIDA2NDQgLUQgJXMgJXMiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNyY19wYXRoLCBkc3RfcGF0aCkKKyAgICAgICAgICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICBtc2dlci5kZWJ1ZygnUHJlcGFyZSBib290IHBhcnRpdGlvbiB1c2luZyByb290ZnMgaW4gJXMnICUgKGhkZGRpcikpCisgICAgICAgIHBhcnQucHJlcGFyZV9yb290ZnMoY3Jfd29ya2Rpciwgb2VfYnVpbGRkaXIsIGhkZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1wY2Jpb3MucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLXBjYmlvcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmVkNTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1wY2Jpb3MucHkKQEAgLTAsMCArMSwyMDAgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIGltcGxlbWVudHMgdGhlICdib290aW1nLXBjYmlvcycgc291cmNlIHBsdWdpbiBjbGFzcyBmb3IgJ3dpYycKKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBsaW51eC5pbnRlbC5jb20+CisjCisKK2ltcG9ydCBvcworCitmcm9tIHdpYy51dGlscy5lcnJvcnMgaW1wb3J0IEltYWdlRXJyb3IKK2Zyb20gd2ljIGltcG9ydCBraWNrc3RhcnQsIG1zZ2VyCitmcm9tIHdpYy51dGlscyBpbXBvcnQgcnVubmVyCitmcm9tIHdpYy5wbHVnaW5iYXNlIGltcG9ydCBTb3VyY2VQbHVnaW4KK2Zyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGV4ZWNfY21kLCBleGVjX25hdGl2ZV9jbWQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9iaXRiYWtlX3ZhciwgQk9PVEREX0VYVFJBX1NQQUNFCisKK2NsYXNzIEJvb3RpbWdQY2Jpb3NQbHVnaW4oU291cmNlUGx1Z2luKToKKyAgICAiIiIKKyAgICBDcmVhdGUgTUJSIGJvb3QgcGFydGl0aW9uIGFuZCBpbnN0YWxsIHN5c2xpbnV4IG9uIGl0LgorICAgICIiIgorCisgICAgbmFtZSA9ICdib290aW1nLXBjYmlvcycKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19pbnN0YWxsX2Rpc2soY2xzLCBkaXNrLCBkaXNrX25hbWUsIGNyZWF0b3IsIHdvcmtkaXIsIG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCBhZnRlciBhbGwgcGFydGl0aW9ucyBoYXZlIGJlZW4gcHJlcGFyZWQgYW5kIGFzc2VtYmxlZCBpbnRvIGEKKyAgICAgICAgZGlzayBpbWFnZS4gIEluIHRoaXMgY2FzZSwgd2UgaW5zdGFsbCB0aGUgTUJSLgorICAgICAgICAiIiIKKyAgICAgICAgbWJyZmlsZSA9ICIlcy9zeXNsaW51eC8iICUgYm9vdGltZ19kaXIKKyAgICAgICAgaWYgY3JlYXRvci5wdGFibGVfZm9ybWF0ID09ICdtc2Rvcyc6CisgICAgICAgICAgICBtYnJmaWxlICs9ICJtYnIuYmluIgorICAgICAgICBlbGlmIGNyZWF0b3IucHRhYmxlX2Zvcm1hdCA9PSAnZ3B0JzoKKyAgICAgICAgICAgIG1icmZpbGUgKz0gImdwdG1ici5iaW4iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiVW5zdXBwb3J0ZWQgcGFydGl0aW9uIHRhYmxlOiAlcyIgJSBjcmVhdG9yLnB0YWJsZV9mb3JtYXQpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG1icmZpbGUpOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgJXMuICBJZiB1c2luZyB0aGUgLWUgb3B0aW9uLCBkbyB5b3UgIgorICAgICAgICAgICAgICAgICAgICAgICAgImhhdmUgdGhlIHJpZ2h0IE1BQ0hJTkUgc2V0IGluIGxvY2FsLmNvbmY/ICBJZiBub3QsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJpcyB0aGUgYm9vdGltZ19kaXIgcGF0aCBjb3JyZWN0PyIgJSBtYnJmaWxlKQorCisgICAgICAgIGZ1bGxfcGF0aCA9IGNyZWF0b3IuX2Z1bGxfcGF0aCh3b3JrZGlyLCBkaXNrX25hbWUsICJkaXJlY3QiKQorICAgICAgICBtc2dlci5kZWJ1ZygiSW5zdGFsbGluZyBNQlIgb24gZGlzayAlcyBhcyAlcyB3aXRoIHNpemUgJXMgYnl0ZXMiIFwKKyAgICAgICAgICAgICAgICAgICAgJSAoZGlza19uYW1lLCBmdWxsX3BhdGgsIGRpc2tbJ21pbl9zaXplJ10pKQorCisgICAgICAgIHJjb2RlID0gcnVubmVyLnNob3coWydkZCcsICdpZj0lcycgJSBtYnJmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2Y9JXMnICUgZnVsbF9wYXRoLCAnY29udj1ub3RydW5jJ10pCisgICAgICAgIGlmIHJjb2RlICE9IDA6CisgICAgICAgICAgICByYWlzZSBJbWFnZUVycm9yKCJVbmFibGUgdG8gc2V0IE1CUiB0byAlcyIgJSBmdWxsX3BhdGgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fY29uZmlndXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCBiZWZvcmUgZG9fcHJlcGFyZV9wYXJ0aXRpb24oKSwgY3JlYXRlcyBzeXNsaW51eCBjb25maWcKKyAgICAgICAgIiIiCisgICAgICAgIGhkZGRpciA9ICIlcy9oZGQvYm9vdCIgJSBjcl93b3JrZGlyCisgICAgICAgIHJtX2NtZCA9ICJybSAtcmYgIiArIGNyX3dvcmtkaXIKKyAgICAgICAgZXhlY19jbWQocm1fY21kKQorCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLWQgJXMiICUgaGRkZGlyCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgIHNwbGFzaCA9IG9zLnBhdGguam9pbihjcl93b3JrZGlyLCAiL2hkZC9ib290L3NwbGFzaC5qcGciKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzcGxhc2gpOgorICAgICAgICAgICAgc3BsYXNobGluZSA9ICJtZW51IGJhY2tncm91bmQgc3BsYXNoLmpwZyIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNwbGFzaGxpbmUgPSAiIgorCisgICAgICAgIG9wdGlvbnMgPSBjcmVhdG9yLmtzLmhhbmRsZXIuYm9vdGxvYWRlci5hcHBlbmRMaW5lCisKKyAgICAgICAgc3lzbGludXhfY29uZiA9ICIiCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIlBST01QVCAwXG4iCisgICAgICAgIHRpbWVvdXQgPSBraWNrc3RhcnQuZ2V0X3RpbWVvdXQoY3JlYXRvci5rcykKKyAgICAgICAgaWYgbm90IHRpbWVvdXQ6CisgICAgICAgICAgICB0aW1lb3V0ID0gMAorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJUSU1FT1VUICIgKyBzdHIodGltZW91dCkgKyAiXG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIlxuIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJBTExPV09QVElPTlMgMVxuIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJTRVJJQUwgMCAxMTUyMDBcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiXG4iCisgICAgICAgIGlmIHNwbGFzaGxpbmU6CisgICAgICAgICAgICBzeXNsaW51eF9jb25mICs9ICIlc1xuIiAlIHNwbGFzaGxpbmUKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiREVGQVVMVCBib290XG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIkxBQkVMIGJvb3RcbiIKKworICAgICAgICBrZXJuZWwgPSAiL3ZtbGludXoiCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIktFUk5FTCAiICsga2VybmVsICsgIlxuIgorCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIkFQUEVORCBsYWJlbD1ib290IHJvb3Q9JXMgJXNcbiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjcmVhdG9yLnJvb3RkZXYsIG9wdGlvbnMpCisKKyAgICAgICAgbXNnZXIuZGVidWcoIldyaXRpbmcgc3lzbGludXggY29uZmlnICVzL2hkZC9ib290L3N5c2xpbnV4LmNmZyIgXAorICAgICAgICAgICAgICAgICAgICAlIGNyX3dvcmtkaXIpCisgICAgICAgIGNmZyA9IG9wZW4oIiVzL2hkZC9ib290L3N5c2xpbnV4LmNmZyIgJSBjcl93b3JrZGlyLCAidyIpCisgICAgICAgIGNmZy53cml0ZShzeXNsaW51eF9jb25mKQorICAgICAgICBjZmcuY2xvc2UoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX3ByZXBhcmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3JlYXRvciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290ZnNfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgdG8gZG8gdGhlIGFjdHVhbCBjb250ZW50IHBvcHVsYXRpb24gZm9yIGEgcGFydGl0aW9uIGkuZS4gaXQKKyAgICAgICAgJ3ByZXBhcmVzJyB0aGUgcGFydGl0aW9uIHRvIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBpbWFnZS4KKyAgICAgICAgSW4gdGhpcyBjYXNlLCBwcmVwYXJlIGNvbnRlbnQgZm9yIGxlZ2FjeSBiaW9zIGJvb3QgcGFydGl0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgZGVmIF9oYXNfc3lzbGludXgoZGlybmFtZSk6CisgICAgICAgICAgICBpZiBkaXJuYW1lOgorICAgICAgICAgICAgICAgIHN5c2xpbnV4ID0gIiVzL3N5c2xpbnV4IiAlIGRpcm5hbWUKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzeXNsaW51eCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBub3QgX2hhc19zeXNsaW51eChib290aW1nX2Rpcik6CisgICAgICAgICAgICBib290aW1nX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiU1RBR0lOR19EQVRBRElSIikKKyAgICAgICAgICAgIGlmIG5vdCBib290aW1nX2RpcjoKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBTVEFHSU5HX0RBVEFESVIsIGV4aXRpbmdcbiIpCisgICAgICAgICAgICBpZiBub3QgX2hhc19zeXNsaW51eChib290aW1nX2Rpcik6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIlBsZWFzZSBidWlsZCBzeXNsaW51eCBmaXJzdFxuIikKKyAgICAgICAgICAgICMganVzdCBzbyB0aGUgcmVzdWx0IG5vdGVzIGRpc3BsYXkgaXQKKyAgICAgICAgICAgIGNyZWF0b3Iuc2V0X2Jvb3RpbWdfZGlyKGJvb3RpbWdfZGlyKQorCisgICAgICAgIHN0YWdpbmdfa2VybmVsX2RpciA9IGtlcm5lbF9kaXIKKworICAgICAgICBoZGRkaXIgPSAiJXMvaGRkL2Jvb3QiICUgY3Jfd29ya2RpcgorCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLW0gMDY0NCAlcy9iekltYWdlICVzL3ZtbGludXoiIFwKKyAgICAgICAgICAgICUgKHN0YWdpbmdfa2VybmVsX2RpciwgaGRkZGlyKQorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1tIDQ0NCAlcy9zeXNsaW51eC9sZGxpbnV4LnN5cyAlcy9sZGxpbnV4LnN5cyIgXAorICAgICAgICAgICAgJSAoYm9vdGltZ19kaXIsIGhkZGRpcikKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgZHVfY21kID0gImR1IC1ia3MgJXMiICUgaGRkZGlyCisgICAgICAgIG91dCA9IGV4ZWNfY21kKGR1X2NtZCkKKyAgICAgICAgYmxvY2tzID0gaW50KG91dC5zcGxpdCgpWzBdKQorCisgICAgICAgIGV4dHJhX2Jsb2NrcyA9IHBhcnQuZ2V0X2V4dHJhX2Jsb2NrX2NvdW50KGJsb2NrcykKKworICAgICAgICBpZiBleHRyYV9ibG9ja3MgPCBCT09URERfRVhUUkFfU1BBQ0U6CisgICAgICAgICAgICBleHRyYV9ibG9ja3MgPSBCT09URERfRVhUUkFfU1BBQ0UKKworICAgICAgICBibG9ja3MgKz0gZXh0cmFfYmxvY2tzCisKKyAgICAgICAgbXNnZXIuZGVidWcoIkFkZGVkICVkIGV4dHJhIGJsb2NrcyB0byAlcyB0byBnZXQgdG8gJWQgdG90YWwgYmxvY2tzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgKGV4dHJhX2Jsb2NrcywgcGFydC5tb3VudHBvaW50LCBibG9ja3MpKQorCisgICAgICAgICMgRW5zdXJlIHRvdGFsIHNlY3RvcnMgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHNlY3RvcnMgcGVyCisgICAgICAgICMgdHJhY2sgb3IgbWNvcHkgd2lsbCBjb21wbGFpbi4gU2VjdG9ycyBhcmUgNTEyIGJ5dGVzLCBhbmQgd2UKKyAgICAgICAgIyBnZW5lcmF0ZSBpbWFnZXMgd2l0aCAzMiBzZWN0b3JzIHBlciB0cmFjay4gVGhpcyBjYWxjdWxhdGlvbiBpcworICAgICAgICAjIGRvbmUgaW4gYmxvY2tzLCB0aHVzIHRoZSBtb2QgYnkgMTYgaW5zdGVhZCBvZiAzMi4KKyAgICAgICAgYmxvY2tzICs9ICgxNiAtIChibG9ja3MgJSAxNikpCisKKyAgICAgICAgIyBkb3NmcyBpbWFnZSwgY3JlYXRlZCBieSBta2Rvc2ZzCisgICAgICAgIGJvb3RpbWcgPSAiJXMvYm9vdC5pbWciICUgY3Jfd29ya2RpcgorCisgICAgICAgIGRvc2ZzX2NtZCA9ICJta2Rvc2ZzIC1uIGJvb3QgLVMgNTEyIC1DICVzICVkIiAlIChib290aW1nLCBibG9ja3MpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChkb3Nmc19jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgIG1jb3B5X2NtZCA9ICJtY29weSAtaSAlcyAtcyAlcy8qIDo6LyIgJSAoYm9vdGltZywgaGRkZGlyKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQobWNvcHlfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICBzeXNsaW51eF9jbWQgPSAic3lzbGludXggJXMiICUgYm9vdGltZworICAgICAgICBleGVjX25hdGl2ZV9jbWQoc3lzbGludXhfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICBjaG1vZF9jbWQgPSAiY2htb2QgNjQ0ICVzIiAlIGJvb3RpbWcKKyAgICAgICAgZXhlY19jbWQoY2htb2RfY21kKQorCisgICAgICAgIGR1X2NtZCA9ICJkdSAtTGJrcyAlcyIgJSBib290aW1nCisgICAgICAgIG91dCA9IGV4ZWNfY21kKGR1X2NtZCkKKyAgICAgICAgYm9vdGltZ19zaXplID0gb3V0LnNwbGl0KClbMF0KKworICAgICAgICBwYXJ0LnNldF9zaXplKGJvb3RpbWdfc2l6ZSkKKyAgICAgICAgcGFydC5zZXRfc291cmNlX2ZpbGUoYm9vdGltZykKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9mc2ltYWdlLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvZnNpbWFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODk0ZTg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvZnNpbWFnZS5weQpAQCAtMCwwICsxLDczIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKworaW1wb3J0IG9zCisKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMucGx1Z2luYmFzZSBpbXBvcnQgU291cmNlUGx1Z2luCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBnZXRfYml0YmFrZV92YXIKKworY2xhc3MgRlNJbWFnZVBsdWdpbihTb3VyY2VQbHVnaW4pOgorICAgICIiIgorICAgIEFkZCBhbiBhbHJlYWR5IGV4aXN0aW5nIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gdGhlIHBhcnRpdGlvbiBsYXlvdXQuCisgICAgIiIiCisKKyAgICBuYW1lID0gJ2ZzaW1hZ2UnCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9faW5zdGFsbF9kaXNrKGNscywgZGlzaywgZGlza19uYW1lLCBjciwgd29ya2Rpciwgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICBib290aW1nX2Rpciwga2VybmVsX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGFmdGVyIGFsbCBwYXJ0aXRpb25zIGhhdmUgYmVlbiBwcmVwYXJlZCBhbmQgYXNzZW1ibGVkIGludG8gYQorICAgICAgICBkaXNrIGltYWdlLiBEbyBub3RoaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2NvbmZpZ3VyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGJlZm9yZSBkb19wcmVwYXJlX3BhcnRpdGlvbigpLiBQb3NzaWJseSBwcmVwYXJlCisgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgb2Ygc29tZSBzb3J0LgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX3ByZXBhcmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGZzX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIHRvIGRvIHRoZSBhY3R1YWwgY29udGVudCBwb3B1bGF0aW9uIGZvciBhIHBhcnRpdGlvbiBpLmUuIGl0CisgICAgICAgICdwcmVwYXJlcycgdGhlIHBhcnRpdGlvbiB0byBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgaW1hZ2UuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgYm9vdGltZ19kaXI6CisgICAgICAgICAgICBib290aW1nX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiREVQTE9ZX0RJUl9JTUFHRSIpCisgICAgICAgICAgICBpZiBub3QgYm9vdGltZ19kaXI6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgREVQTE9ZX0RJUl9JTUFHRSwgZXhpdGluZ1xuIikKKworICAgICAgICBtc2dlci5kZWJ1ZygnQm9vdGltZyBkaXI6ICVzJyAlIGJvb3RpbWdfZGlyKQorCisgICAgICAgIGlmICdmaWxlJyBub3QgaW4gc291cmNlX3BhcmFtczoKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJObyBmaWxlIHNwZWNpZmllZFxuIikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNyYyA9IG9zLnBhdGguam9pbihib290aW1nX2Rpciwgc291cmNlX3BhcmFtc1snZmlsZSddKQorCisKKyAgICAgICAgbXNnZXIuZGVidWcoJ1ByZXBhcmluZyBwYXJ0aXRpb24gdXNpbmcgaW1hZ2UgJXMnICUgKHNyYykpCisgICAgICAgIHBhcnQucHJlcGFyZV9yb290ZnNfZnJvbV9mc19pbWFnZShjcl93b3JrZGlyLCBzcmMsICIiKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvaXNvaW1hZ2UtaXNvaHlicmlkLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvaXNvaW1hZ2UtaXNvaHlicmlkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NzJkOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9pc29pbWFnZS1pc29oeWJyaWQucHkKQEAgLTAsMCArMSw1MzggQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgaW1wbGVtZW50cyB0aGUgJ2lzb2ltYWdlLWlzb2h5YnJpZCcgc291cmNlIHBsdWdpbiBjbGFzcyBmb3IgJ3dpYycKKyMKKyMgQVVUSE9SUworIyBNaWhhbHkgVmFyZ2EgPG1paGFseS52YXJnYSAoYXRdIG5pLmNvbT4KKworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKKworZnJvbSB3aWMgaW1wb3J0IGtpY2tzdGFydCwgbXNnZXIKK2Zyb20gd2ljLnBsdWdpbmJhc2UgaW1wb3J0IFNvdXJjZVBsdWdpbgorZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZXhlY19jbWQsIGV4ZWNfbmF0aXZlX2NtZCwgZ2V0X2JpdGJha2VfdmFyCisKK2NsYXNzIElzb0ltYWdlUGx1Z2luKFNvdXJjZVBsdWdpbik6CisgICAgIiIiCisgICAgQ3JlYXRlIGEgYm9vdGFibGUgSVNPIGltYWdlCisKKyAgICBUaGlzIHBsdWdpbiBjcmVhdGVzIGEgaHlicmlkLCBsZWdhY3kgYW5kIEVGSSBib290YWJsZSBJU08gaW1hZ2UuIFRoZQorICAgIGdlbmVyYXRlZCBpbWFnZSBjYW4gYmUgdXNlZCBvbiBvcHRpY2FsIG1lZGlhIGFzIHdlbGwgYXMgVVNCIG1lZGlhLgorCisgICAgTGVnYWN5IGJvb3QgdXNlcyBzeXNsaW51eCBhbmQgRUZJIGJvb3QgdXNlcyBncnViIG9yIGd1bW1pYm9vdCAobm90CisgICAgaW1wbGVtZW50ZWQgeWV0KSBhcyBib290bG9hZGVyLiBUaGUgcGx1Z2luIGNyZWF0ZXMgdGhlIGRpcmVjdG9yaWVzIHJlcXVpcmVkCisgICAgYnkgYm9vdGxvYWRlcnMgYW5kIHBvcHVsYXRlcyB0aGVtIGJ5IGNyZWF0aW5nIGFuZCBjb25maWd1cmluZyB0aGUKKyAgICBib290bG9hZGVyIGZpbGVzLgorCisgICAgRXhhbXBsZSBraWNrc3RhcnQgZmlsZToKKyAgICBwYXJ0IC9ib290IC0tc291cmNlIGlzb2ltYWdlLWlzb2h5YnJpZCAtLXNvdXJjZXBhcmFtcz0ibG9hZGVyPWdydWItZWZpLCBcXAorICAgIGltYWdlX25hbWU9IElzb0ltYWdlIiAtLW9uZGlzayBjZCAtLWxhYmVsIExJVkVDRCAtLWZzdHlwZT1leHQyCisgICAgYm9vdGxvYWRlciAgLS10aW1lb3V0PTEwICAtLWFwcGVuZD0iICIKKworICAgIEluIC0tc291cmNlcGFyYW1zICJsb2FkZXIiIHNwZWNpZmllcyB0aGUgYm9vdGxvYWRlciB1c2VkIGZvciBib290aW5nIGluIEVGSQorICAgIG1vZGUsIHdoaWxlICJpbWFnZV9uYW1lIiBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGdlbmVyYXRlZCBpbWFnZS4gSW4gdGhlCisgICAgZXhhbXBsZSBhYm92ZSwgd2ljIGNyZWF0ZXMgYW4gSVNPIGltYWdlIG5hbWVkIElzb0ltYWdlLWNkLmRpcmVjdCAoZGVmYXVsdAorICAgIGV4dGVuc2lvbiBhZGRlZCBieSBkaXJlY3QgaW1lZ2VyIHBsdWdpbikgYW5kIGEgZmlsZSBuYW1lZCBJc29JbWFnZS1jZC5pc28KKyAgICAiIiIKKworICAgIG5hbWUgPSAnaXNvaW1hZ2UtaXNvaHlicmlkJworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2NvbmZpZ3VyZV9zeXNsaW51eChjbHMsIGNyZWF0b3IsIGNyX3dvcmtkaXIpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGxvYWRlci1zcGVjaWZpYyAoc3lzbGludXgpIGNvbmZpZworICAgICAgICAiIiIKKyAgICAgICAgc3BsYXNoID0gb3MucGF0aC5qb2luKGNyX3dvcmtkaXIsICIvSVNPL2Jvb3Qvc3BsYXNoLmpwZyIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNwbGFzaCk6CisgICAgICAgICAgICBzcGxhc2hsaW5lID0gIm1lbnUgYmFja2dyb3VuZCBzcGxhc2guanBnIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3BsYXNobGluZSA9ICIiCisKKyAgICAgICAgb3B0aW9ucyA9IGNyZWF0b3Iua3MuaGFuZGxlci5ib290bG9hZGVyLmFwcGVuZExpbmUKKworICAgICAgICB0aW1lb3V0ID0ga2lja3N0YXJ0LmdldF90aW1lb3V0KGNyZWF0b3Iua3MsIDEwKQorCisgICAgICAgIHN5c2xpbnV4X2NvbmYgPSAiIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJQUk9NUFQgMFxuIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJUSU1FT1VUICVzIFxuIiAlIHRpbWVvdXQKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiXG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIkFMTE9XT1BUSU9OUyAxXG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIlNFUklBTCAwIDExNTIwMFxuIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJcbiIKKyAgICAgICAgaWYgc3BsYXNobGluZToKKyAgICAgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIiVzXG4iICUgc3BsYXNobGluZQorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJERUZBVUxUIGJvb3RcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiTEFCRUwgYm9vdFxuIgorCisgICAgICAgIGtlcm5lbCA9ICIvYnpJbWFnZSIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiS0VSTkVMICIgKyBrZXJuZWwgKyAiXG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIkFQUEVORCBpbml0cmQ9L2luaXRyZCBMQUJFTD1ib290ICVzXG4iICUgb3B0aW9ucworCisgICAgICAgIG1zZ2VyLmRlYnVnKCJXcml0aW5nIHN5c2xpbnV4IGNvbmZpZyAlcy9JU08vaXNvbGludXgvaXNvbGludXguY2ZnIiBcCisgICAgICAgICAgICAgICAgICAgICUgY3Jfd29ya2RpcikKKyAgICAgICAgd2l0aCBvcGVuKCIlcy9JU08vaXNvbGludXgvaXNvbGludXguY2ZnIiAlIGNyX3dvcmtkaXIsICJ3IikgYXMgY2ZnOgorICAgICAgICAgICAgY2ZnLndyaXRlKHN5c2xpbnV4X2NvbmYpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fY29uZmlndXJlX2dydWJlZmkoY2xzLCBwYXJ0LCBjcmVhdG9yLCBjcl93b3JrZGlyKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBsb2FkZXItc3BlY2lmaWMgKGdydWItZWZpKSBjb25maWcKKyAgICAgICAgIiIiCisgICAgICAgIHNwbGFzaCA9IG9zLnBhdGguam9pbihjcl93b3JrZGlyLCAiL0VGSS9ib290L3NwbGFzaC5qcGciKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzcGxhc2gpOgorICAgICAgICAgICAgc3BsYXNobGluZSA9ICJtZW51IGJhY2tncm91bmQgc3BsYXNoLmpwZyIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNwbGFzaGxpbmUgPSAiIgorCisgICAgICAgIG9wdGlvbnMgPSBjcmVhdG9yLmtzLmhhbmRsZXIuYm9vdGxvYWRlci5hcHBlbmRMaW5lCisKKyAgICAgICAgZ3J1YmVmaV9jb25mID0gIiIKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJzZXJpYWwgLS11bml0PTAgLS1zcGVlZD0xMTUyMDAgLS13b3JkPTggIgorICAgICAgICBncnViZWZpX2NvbmYgKz0gIi0tcGFyaXR5PW5vIC0tc3RvcD0xXG4iCisgICAgICAgIGdydWJlZmlfY29uZiArPSAiZGVmYXVsdD1ib290XG4iCisgICAgICAgIHRpbWVvdXQgPSBraWNrc3RhcnQuZ2V0X3RpbWVvdXQoY3JlYXRvci5rcywgMTApCisgICAgICAgIGdydWJlZmlfY29uZiArPSAidGltZW91dD0lc1xuIiAlIHRpbWVvdXQKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJcbiIKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJzZWFyY2ggLS1zZXQ9cm9vdCAtLWxhYmVsICVzICIgJSBwYXJ0LmxhYmVsCisgICAgICAgIGdydWJlZmlfY29uZiArPSAiXG4iCisgICAgICAgIGdydWJlZmlfY29uZiArPSAibWVudWVudHJ5ICdib290J3tcbiIKKworICAgICAgICBrZXJuZWwgPSAiL2J6SW1hZ2UiCisKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJsaW51eCAlcyByb290d2FpdCAlc1xuIiBcCisgICAgICAgICAgICAlIChrZXJuZWwsIG9wdGlvbnMpCisgICAgICAgIGdydWJlZmlfY29uZiArPSAiaW5pdHJkIC9pbml0cmQgXG4iCisgICAgICAgIGdydWJlZmlfY29uZiArPSAifVxuIgorCisgICAgICAgIGlmIHNwbGFzaGxpbmU6CisgICAgICAgICAgICBncnViZWZpX2NvbmYgKz0gIiVzXG4iICUgc3BsYXNobGluZQorCisgICAgICAgIG1zZ2VyLmRlYnVnKCJXcml0aW5nIGdydWJlZmkgY29uZmlnICVzL0VGSS9CT09UL2dydWIuY2ZnIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAlIGNyX3dvcmtkaXIpCisgICAgICAgIHdpdGggb3BlbigiJXMvRUZJL0JPT1QvZ3J1Yi5jZmciICUgY3Jfd29ya2RpciwgInciKSBhcyBjZmc6CisgICAgICAgICAgICBjZmcud3JpdGUoZ3J1YmVmaV9jb25mKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfYnVpbGRfaW5pdHJhbWZzX3BhdGgocm9vdGZzX2RpciwgY3Jfd29ya2Rpcik6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgcGF0aCBmb3IgaW5pdHJhbWZzIGltYWdlCisgICAgICAgICIiIgorCisgICAgICAgIGluaXRyZCA9IGdldF9iaXRiYWtlX3ZhcigiSU5JVFJEIikKKyAgICAgICAgaWYgbm90IGluaXRyZDoKKyAgICAgICAgICAgIGluaXRyZF9kaXIgPSBnZXRfYml0YmFrZV92YXIoIkRFUExPWV9ESVJfSU1BR0UiKQorICAgICAgICAgICAgaWYgbm90IGluaXRyZF9kaXI6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgREVQTE9ZX0RJUl9JTUFHRSwgZXhpdGluZy5cbiIpCisKKyAgICAgICAgICAgIGltYWdlX25hbWUgPSBnZXRfYml0YmFrZV92YXIoIklNQUdFX0JBU0VOQU1FIikKKyAgICAgICAgICAgIGlmIG5vdCBpbWFnZV9uYW1lOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIElNQUdFX0JBU0VOQU1FLCBleGl0aW5nLlxuIikKKworICAgICAgICAgICAgaW1hZ2VfdHlwZSA9IGdldF9iaXRiYWtlX3ZhcigiSU5JVFJBTUZTX0ZTVFlQRVMiKQorICAgICAgICAgICAgaWYgbm90IGltYWdlX3R5cGU6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgSU5JVFJBTUZTX0ZTVFlQRVMsIGV4aXRpbmcuXG4iKQorCisgICAgICAgICAgICBtYWNoaW5lX2FyY2ggPSBnZXRfYml0YmFrZV92YXIoIk1BQ0hJTkVfQVJDSCIpCisgICAgICAgICAgICBpZiBub3QgbWFjaGluZV9hcmNoOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIE1BQ0hJTkVfQVJDSCwgZXhpdGluZy5cbiIpCisKKyAgICAgICAgICAgIGluaXRyZCA9ICIlcy8lcy1pbml0cmFtZnMtJXMuJXMiIFwKKyAgICAgICAgICAgICAgICAgICAgJSAoaW5pdHJkX2RpciwgaW1hZ2VfbmFtZSwgbWFjaGluZV9hcmNoLCBpbWFnZV90eXBlKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhpbml0cmQpOgorICAgICAgICAgICAgIyBDcmVhdGUgaW5pdHJkIGZyb20gcm9vdGZzIGRpcmVjdG9yeQorICAgICAgICAgICAgaW5pdHJkID0gIiVzL2luaXRyZC5jcGlvLmd6IiAlIGNyX3dvcmtkaXIKKyAgICAgICAgICAgIGluaXRyZF9kaXIgPSAiJXMvSU5JVFJEIiAlIGNyX3dvcmtkaXIKKyAgICAgICAgICAgIHNodXRpbC5jb3B5dHJlZSgiJXMiICUgcm9vdGZzX2RpciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgJSBpbml0cmRfZGlyLCBzeW1saW5rcz1UcnVlKQorCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSgiJXMvaW5pdCIgJSByb290ZnNfZGlyKToKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weTIoIiVzL2luaXQiICUgcm9vdGZzX2RpciwgIiVzL2luaXQiICUgaW5pdHJkX2RpcikKKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5sZXhpc3RzKCIlcy9pbml0IiAlIHJvb3Rmc19kaXIpOgorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsob3MucmVhZGxpbmsoIiVzL2luaXQiICUgcm9vdGZzX2RpciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMvaW5pdCIgJSBpbml0cmRfZGlyKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZmlsZSgiJXMvc2Jpbi9pbml0IiAlIHJvb3Rmc19kaXIpOgorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5MigiJXMvc2Jpbi9pbml0IiAlIHJvb3Rmc19kaXIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiICUgaW5pdHJkX2RpcikKKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5sZXhpc3RzKCIlcy9zYmluL2luaXQiICUgcm9vdGZzX2Rpcik6CisgICAgICAgICAgICAgICAgb3Muc3ltbGluayhvcy5yZWFkbGluaygiJXMvc2Jpbi9pbml0IiAlIHJvb3Rmc19kaXIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzL2luaXQiICUgaW5pdHJkX2RpcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgb3IgYnVpbGQgaW5pdHJkLCBleGl0aW5nLlxuIikKKworICAgICAgICAgICAgZXhlY19jbWQoImNkICVzICYmIGZpbmQgLiB8IGNwaW8gLW8gLUggbmV3YyA+JXMvaW5pdHJkLmNwaW8gIiBcCisgICAgICAgICAgICAgICAgICAgICUgKGluaXRyZF9kaXIsIGNyX3dvcmtkaXIpLCBhc19zaGVsbD1UcnVlKQorICAgICAgICAgICAgZXhlY19jbWQoImd6aXAgLWYgLTkgLWMgJXMvaW5pdHJkLmNwaW8gPiAlcyIgXAorICAgICAgICAgICAgICAgICAgICAlIChjcl93b3JrZGlyLCBpbml0cmQpLCBhc19zaGVsbD1UcnVlKQorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShpbml0cmRfZGlyKQorCisgICAgICAgIHJldHVybiBpbml0cmQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19zdGFnZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjcmVhdG9yLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgU3BlY2lhbCBjb250ZW50IHN0YWdpbmcgY2FsbGVkIGJlZm9yZSBkb19wcmVwYXJlX3BhcnRpdGlvbigpLgorICAgICAgICBJdCBjaGVrcyBpZiBhbGwgbmVjZXNzYXJ5IHRvb2xzIGFyZSBhdmFpbGFibGUsIGlmIG5vdAorICAgICAgICB0cmllcyB0byBpbnN0YWwgdGhlbS4KKyAgICAgICAgIiIiCisgICAgICAgICMgTWFrZSBzdXJlIHBhcnRlZCBpcyBhdmFpbGFibGUgaW4gbmF0aXZlIHN5c3Jvb3QKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKCIlcy91c3Ivc2Jpbi9wYXJ0ZWQiICUgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAgICAgbXNnZXIuaW5mbygiQnVpbGRpbmcgcGFydGVkLW5hdGl2ZS4uLlxuIikKKyAgICAgICAgICAgIGV4ZWNfY21kKCJiaXRiYWtlIHBhcnRlZC1uYXRpdmUiKQorCisgICAgICAgICMgTWFrZSBzdXJlIG1rZnMuZXh0Mi8zLzQgaXMgYXZhaWxhYmxlIGluIG5hdGl2ZSBzeXNyb290CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSgiJXMvc2Jpbi9ta2ZzLmV4dDIiICUgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAgICAgbXNnZXIuaW5mbygiQnVpbGRpbmcgZTJmc3Byb2dzLW5hdGl2ZS4uLlxuIikKKyAgICAgICAgICAgIGV4ZWNfY21kKCJiaXRiYWtlIGUyZnNwcm9ncy1uYXRpdmUiKQorCisgICAgICAgICMgTWFrZSBzdXJlIHN5c2xpbnV4IGlzIGF2YWlsYWJsZSBpbiBzeXNyb290IGFuZCBpbiBuYXRpdmUgc3lzcm9vdAorICAgICAgICBzeXNsaW51eF9kaXIgPSBnZXRfYml0YmFrZV92YXIoIlNUQUdJTkdfREFUQURJUiIpCisgICAgICAgIGlmIG5vdCBzeXNsaW51eF9kaXI6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBTVEFHSU5HX0RBVEFESVIsIGV4aXRpbmcuXG4iKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoIiVzL3N5c2xpbnV4IiAlIHN5c2xpbnV4X2Rpcik6CisgICAgICAgICAgICBtc2dlci5pbmZvKCJCdWlsZGluZyBzeXNsaW51eC4uLlxuIikKKyAgICAgICAgICAgIGV4ZWNfY21kKCJiaXRiYWtlIHN5c2xpbnV4IikKKyAgICAgICAgICAgIG1zZ2VyLmluZm8oIkJ1aWxkaW5nIHN5c2xpbnV4LW5hdGl2ZS4uLlxuIikKKyAgICAgICAgICAgIGV4ZWNfY21kKCJiaXRiYWtlIHN5c2xpbnV4LW5hdGl2ZSIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygiJXMvc3lzbGludXgiICUgc3lzbGludXhfZGlyKToKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJQbGVhc2UgYnVpbGQgc3lzbGludXggZmlyc3RcbiIpCisKKyAgICAgICAgI01ha2Ugc3VyZSBta2lzb2ZzIGlzIGF2YWlsYWJsZSBpbiBuYXRpdmUgc3lzcm9vdAorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoIiVzL3Vzci9iaW4vbWtpc29mcyIgJSBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICAgICBtc2dlci5pbmZvKCJCdWlsZGluZyBjZHJ0b29scy1uYXRpdmUuLi5cbiIpCisgICAgICAgICAgICBleGVjX2NtZCgiYml0YmFrZSBjZHJ0b29scy1uYXRpdmUiKQorCisgICAgICAgICMgTWFrZSBzdXJlIG1rZnMudmZhdCBpcyBhdmFpbGFibGUgaW4gbmF0aXZlIHN5c3Jvb3QKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKCIlcy9zYmluL21rZnMudmZhdCIgJSBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICAgICBtc2dlci5pbmZvKCJCdWlsZGluZyBkb3Nmc3Rvb2xzLW5hdGl2ZS4uLlxuIikKKyAgICAgICAgICAgIGV4ZWNfY21kKCJiaXRiYWtlIGRvc2ZzdG9vbHMtbmF0aXZlIikKKworICAgICAgICAjIE1ha2Ugc3VyZSBtdG9vbHMgaXMgYXZhaWxhYmxlIGluIG5hdGl2ZSBzeXNyb290CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSgiJXMvdXNyL2Jpbi9tY29weSIgJSBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICAgICBtc2dlci5pbmZvKCJCdWlsZGluZyBtdG9vbHMtbmF0aXZlLi4uXG4iKQorICAgICAgICAgICAgZXhlY19jbWQoImJpdGJha2UgbXRvb2xzLW5hdGl2ZSIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fY29uZmlndXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCBiZWZvcmUgZG9fcHJlcGFyZV9wYXJ0aXRpb24oKSwgY3JlYXRlcyBsb2FkZXItc3BlY2lmaWMgY29uZmlnCisgICAgICAgICIiIgorICAgICAgICBpc29kaXIgPSAiJXMvSVNPLyIgJSBjcl93b3JrZGlyCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY3Jfd29ya2Rpcik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGNyX3dvcmtkaXIpCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtZCAlcyAiICUgaXNvZGlyCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgICMgT3ZlcndyaXRlIHRoZSBuYW1lIG9mIHRoZSBjcmVhdGVkIGltYWdlCisgICAgICAgIG1zZ2VyLmRlYnVnKCIlcyIgJSBzb3VyY2VfcGFyYW1zKQorICAgICAgICBpZiAnaW1hZ2VfbmFtZScgaW4gc291cmNlX3BhcmFtcyBhbmQgXAorICAgICAgICAgICAgICAgICAgICBzb3VyY2VfcGFyYW1zWydpbWFnZV9uYW1lJ10uc3RyaXAoKToKKyAgICAgICAgICAgIGNyZWF0b3IubmFtZSA9IHNvdXJjZV9wYXJhbXNbJ2ltYWdlX25hbWUnXS5zdHJpcCgpCisgICAgICAgICAgICBtc2dlci5kZWJ1ZygiVGhlIG5hbWUgb2YgdGhlIGltYWdlIGlzOiAlcyIgJSBjcmVhdG9yLm5hbWUpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fcHJlcGFyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjcmVhdG9yLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Rmc19kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCB0byBkbyB0aGUgYWN0dWFsIGNvbnRlbnQgcG9wdWxhdGlvbiBmb3IgYSBwYXJ0aXRpb24gaS5lLiBpdAorICAgICAgICAncHJlcGFyZXMnIHRoZSBwYXJ0aXRpb24gdG8gYmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGltYWdlLgorICAgICAgICBJbiB0aGlzIGNhc2UsIHByZXBhcmUgY29udGVudCBmb3IgYSBib290YWJsZSBJU08gaW1hZ2UuCisgICAgICAgICIiIgorCisgICAgICAgIGlzb2RpciA9ICIlcy9JU08iICUgY3Jfd29ya2RpcgorCisgICAgICAgIGlmIHBhcnQucm9vdGZzIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBub3QgJ1JPT1RGU19ESVInIGluIHJvb3Rmc19kaXI6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgLS1yb290ZnMtZGlyLCBleGl0aW5nLlxuIikKKyAgICAgICAgICAgIHJvb3Rmc19kaXIgPSByb290ZnNfZGlyWydST09URlNfRElSJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHBhcnQucm9vdGZzIGluIHJvb3Rmc19kaXI6CisgICAgICAgICAgICAgICAgcm9vdGZzX2RpciA9IHJvb3Rmc19kaXJbcGFydC5yb290ZnNdCisgICAgICAgICAgICBlbGlmIHBhcnQucm9vdGZzOgorICAgICAgICAgICAgICAgIHJvb3Rmc19kaXIgPSBwYXJ0LnJvb3RmcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2cgPSAiQ291bGRuJ3QgZmluZCAtLXJvb3Rmcy1kaXI9JXMgY29ubmVjdGlvbiAiCisgICAgICAgICAgICAgICAgbXNnICs9ICJvciBpdCBpcyBub3QgYSB2YWxpZCBwYXRoLCBleGl0aW5nLlxuIgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKG1zZyAlIHBhcnQucm9vdGZzKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHJvb3Rmc19kaXIpOgorICAgICAgICAgICAgcm9vdGZzX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiSU1BR0VfUk9PVEZTIikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIocm9vdGZzX2Rpcik6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBJTUFHRV9ST09URlMsIGV4aXRpbmcuXG4iKQorCisgICAgICAgIHBhcnQuc2V0X3Jvb3Rmcyhyb290ZnNfZGlyKQorCisgICAgICAgICMgUHJlcGFyZSByb290ZnMuaW1nCisgICAgICAgIGhkZF9kaXIgPSBnZXRfYml0YmFrZV92YXIoIkhERERJUiIpCisgICAgICAgIGltZ19pc29fZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJJU09ESVIiKQorCisgICAgICAgIHJvb3Rmc19pbWcgPSAiJXMvcm9vdGZzLmltZyIgJSBoZGRfZGlyCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShyb290ZnNfaW1nKToKKyAgICAgICAgICAgIHJvb3Rmc19pbWcgPSAiJXMvcm9vdGZzLmltZyIgJSBpbWdfaXNvX2RpcgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUocm9vdGZzX2ltZyk6CisgICAgICAgICAgICAjIGNoZWNrIGlmIHJvb3Rmcy5pbWcgaXMgaW4gZGVwbG95ZGlyCisgICAgICAgICAgICBkZXBsb3lfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJERVBMT1lfRElSX0lNQUdFIikKKyAgICAgICAgICAgIGltYWdlX25hbWUgPSBnZXRfYml0YmFrZV92YXIoIklNQUdFX0xJTktfTkFNRSIpCisgICAgICAgICAgICByb290ZnNfaW1nID0gIiVzLyVzLiVzIiBcCisgICAgICAgICAgICAgICAgJSAoZGVwbG95X2RpciwgaW1hZ2VfbmFtZSwgcGFydC5mc3R5cGUpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHJvb3Rmc19pbWcpOgorICAgICAgICAgICAgIyBjcmVhdGUgaW1hZ2UgZmlsZSB3aXRoIHR5cGUgc3BlY2lmaWVkIGJ5IC0tZnN0eXBlCisgICAgICAgICAgICAjIHdoaWNoIGNvbnRhaW5zIHJvb3RmcworICAgICAgICAgICAgZHVfY21kID0gImR1IC1ia3MgJXMiICUgcm9vdGZzX2RpcgorICAgICAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICAgICAgcGFydC5zZXRfc2l6ZShpbnQob3V0LnNwbGl0KClbMF0pKQorICAgICAgICAgICAgcGFydC5leHRyYV9zcGFjZSA9IDAKKyAgICAgICAgICAgIHBhcnQub3ZlcmhlYWRfZmFjdG9yID0gMS4yCisgICAgICAgICAgICBwYXJ0LnByZXBhcmVfcm9vdGZzKGNyX3dvcmtkaXIsIG9lX2J1aWxkZGlyLCByb290ZnNfZGlyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KQorICAgICAgICAgICAgcm9vdGZzX2ltZyA9IHBhcnQuc291cmNlX2ZpbGUKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1tIDA2NDQgJXMgJXMvcm9vdGZzLmltZyIgXAorICAgICAgICAgICAgJSAocm9vdGZzX2ltZywgaXNvZGlyKQorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICAjIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGZpbGUgY3JlYXRlZCBieSBwYXJ0LnByZXBhcmVfcm9vdGZzKCkKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGFydC5zb3VyY2VfZmlsZSk6CisgICAgICAgICAgICBvcy5yZW1vdmUocGFydC5zb3VyY2VfZmlsZSkKKworICAgICAgICAjIFByZXBhcmUgaW5pdGlhbCByYW1kaXNrCisgICAgICAgIGluaXRyZCA9ICIlcy9pbml0cmQiICUgaGRkX2RpcgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoaW5pdHJkKToKKyAgICAgICAgICAgIGluaXRyZCA9ICIlcy9pbml0cmQiICUgaW1nX2lzb19kaXIKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGluaXRyZCk6CisgICAgICAgICAgICBpbml0cmQgPSBjbHMuX2J1aWxkX2luaXRyYW1mc19wYXRoKHJvb3Rmc19kaXIsIGNyX3dvcmtkaXIpCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtbSAwNjQ0ICVzICVzL2luaXRyZCIgXAorICAgICAgICAgICAgJSAoaW5pdHJkLCBpc29kaXIpCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgICMgUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZSBjcmVhdGVkIGJ5IF9idWlsZF9pbml0cmFtZnNfcGF0aCBmdW5jdGlvbgorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSgiJXMvaW5pdHJkLmNwaW8uZ3oiICUgY3Jfd29ya2Rpcik6CisgICAgICAgICAgICBvcy5yZW1vdmUoIiVzL2luaXRyZC5jcGlvLmd6IiAlIGNyX3dvcmtkaXIpCisKKyAgICAgICAgIyBJbnN0YWxsIGJ6SW1hZ2UKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtbSAwNjQ0ICVzL2J6SW1hZ2UgJXMvYnpJbWFnZSIgJSBcCisgICAgICAgICAgICAoa2VybmVsX2RpciwgaXNvZGlyKQorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICAjQ3JlYXRlIGJvb3Rsb2FkZXIgZm9yIGVmaSBib290CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNvdXJjZV9wYXJhbXNbJ2xvYWRlciddID09ICdncnViLWVmaSc6CisgICAgICAgICAgICAgICAgIyBCdWlsZHMgZ3J1Yi5jZmcgaWYgSVNPRElSIGRpZG4ndCBleGlzdCBvcgorICAgICAgICAgICAgICAgICMgZGlkbid0IGNvbnRhaW5zIGdydWIuY2ZnCisgICAgICAgICAgICAgICAgYm9vdGltZ19kaXIgPSBpbWdfaXNvX2RpcgorICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygiJXMvRUZJL0JPT1QiICUgYm9vdGltZ19kaXIpOgorICAgICAgICAgICAgICAgICAgICBib290aW1nX2RpciA9ICIlcy9ib290aW1nIiAlIGNyX3dvcmtkaXIKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoYm9vdGltZ19kaXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShib290aW1nX2RpcikKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtZCAlcy9FRkkvQk9PVCIgJSBib290aW1nX2RpcgorICAgICAgICAgICAgICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSgiJXMvRUZJL0JPT1QvYm9vdC5jZmciICUgYm9vdGltZ19kaXIpOgorICAgICAgICAgICAgICAgICAgICBjbHMuZG9fY29uZmlndXJlX2dydWJlZmkocGFydCwgY3JlYXRvciwgYm9vdGltZ19kaXIpCisKKyAgICAgICAgICAgICAgICAjIEJ1aWxkcyBib290eDY0LmVmaS9ib290aWEzMi5lZmkgaWYgSVNPRElSIGRpZG4ndCBleGlzdCBvcgorICAgICAgICAgICAgICAgICMgZGlkbid0IGNvbnRhaW5zIGl0CisgICAgICAgICAgICAgICAgdGFyZ2V0X2FyY2ggPSBnZXRfYml0YmFrZV92YXIoIlRBUkdFVF9TWVMiKQorICAgICAgICAgICAgICAgIGlmIG5vdCB0YXJnZXRfYXJjaDoKKyAgICAgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvbHVkbid0IGZpbmQgdGFyZ2V0IGFyY2hpdGVjdHVyZVxuIikKKworICAgICAgICAgICAgICAgIGlmIHJlLm1hdGNoKCJ4ODZfNjQiLCB0YXJnZXRfYXJjaCk6CisgICAgICAgICAgICAgICAgICAgIGdydWJfdGFyZ2V0ID0gJ3g4Nl82NC1lZmknCisgICAgICAgICAgICAgICAgICAgIGdydWJfaW1hZ2UgPSAiYm9vdHg2NC5lZmkiCisgICAgICAgICAgICAgICAgZWxpZiByZS5tYXRjaCgnaS44NicsIHRhcmdldF9hcmNoKToKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl90YXJnZXQgPSAnaTM4Ni1lZmknCisgICAgICAgICAgICAgICAgICAgIGdydWJfaW1hZ2UgPSAiYm9vdGlhMzIuZWZpIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJncnViLWVmaSBpcyBpbmNvbXBhdGlibGUgd2l0aCB0YXJnZXQgJXNcbiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHRhcmdldF9hcmNoKQorCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKCIlcy9FRkkvQk9PVC8lcyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChib290aW1nX2RpciwgZ3J1Yl9pbWFnZSkpOgorICAgICAgICAgICAgICAgICAgICBncnViX3BhdGggPSBnZXRfYml0YmFrZV92YXIoIlNUQUdJTkdfTElCRElSIikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGdydWJfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIFNUQUdJTkdfTElCRElSLCBleGl0aW5nLlxuIikKKworICAgICAgICAgICAgICAgICAgICBncnViX2NvcmUgPSAiJXMvZ3J1Yi8lcyIgJSAoZ3J1Yl9wYXRoLCBncnViX3RhcmdldCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGdydWJfY29yZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2dlci5pbmZvKCJCdWlsZGluZyBncnViLWVmaS4uLlxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNfY21kKCJiaXRiYWtlIGdydWItZWZpIikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGdydWJfY29yZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiUGxlYXNlIGJ1aWxkIGdydWItZWZpIGZpcnN0XG4iKQorCisgICAgICAgICAgICAgICAgICAgIGdydWJfY21kID0gImdydWItbWtpbWFnZSAtcCAnL0VGSS9CT09UJyAiCisgICAgICAgICAgICAgICAgICAgIGdydWJfY21kICs9ICItZCAlcyAiICAlIGdydWJfY29yZQorICAgICAgICAgICAgICAgICAgICBncnViX2NtZCArPSAiLU8gJXMgLW8gJXMvRUZJL0JPT1QvJXMgIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGdydWJfdGFyZ2V0LCBib290aW1nX2RpciwgZ3J1Yl9pbWFnZSkKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jbWQgKz0gInBhcnRfZ3B0IHBhcnRfbXNkb3MgbnRmcyBudGZzY29tcCBmYXQgZXh0MiAiCisgICAgICAgICAgICAgICAgICAgIGdydWJfY21kICs9ICJub3JtYWwgY2hhaW4gYm9vdCBjb25maWdmaWxlIGxpbnV4IG11bHRpYm9vdCAiCisgICAgICAgICAgICAgICAgICAgIGdydWJfY21kICs9ICJzZWFyY2ggZWZpX2dvcCBlZmlfdWdhIGZvbnQgZ2Z4dGVybSBnZnhtZW51ICIKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jbWQgKz0gInRlcm1pbmFsIG1pbmljbWQgdGVzdCBpb3J3IGxvYWRlbnYgZWNobyBoZWxwICIKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jbWQgKz0gInJlYm9vdCBzZXJpYWwgdGVybWluZm8gaXNvOTY2MCBsb29wYmFjayB0YXIgIgorICAgICAgICAgICAgICAgICAgICBncnViX2NtZCArPSAibWVtZGlzayBscyBzZWFyY2hfZnNfdXVpZCB1ZGYgYnRyZnMgeGZzIGx2bSAiCisgICAgICAgICAgICAgICAgICAgIGdydWJfY21kICs9ICJyZWlzZXJmcyBhdGEgIgorICAgICAgICAgICAgICAgICAgICBleGVjX25hdGl2ZV9jbWQoZ3J1Yl9jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVE9ETzogaW5zZXJ0IGd1bW1pYm9vdCBzdHVmZgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJ1bnJlY29nbml6ZWQgYm9vdGltZy1lZmkgbG9hZGVyOiAlcyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgc291cmNlX3BhcmFtc1snbG9hZGVyJ10pCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJib290aW1nLWVmaSByZXF1aXJlcyBhIGxvYWRlciwgbm9uZSBzcGVjaWZpZWQiKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCIlcy9FRkkvQk9PVCIgJSBpc29kaXIpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSgiJXMvRUZJL0JPT1QiICUgaXNvZGlyKQorCisgICAgICAgIHNodXRpbC5jb3B5dHJlZShib290aW1nX2RpcisiL0VGSS9CT09UIiwgaXNvZGlyKyIvRUZJL0JPT1QiKQorCisgICAgICAgICMgSWYgZXhpc3RzLCByZW1vdmUgY3Jfd29ya2Rpci9ib290aW1nIHRlbXBvcmFyeSBmb2xkZXIKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIiVzL2Jvb3RpbWciICUgY3Jfd29ya2Rpcik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKCIlcy9ib290aW1nIiAlIGNyX3dvcmtkaXIpCisKKyAgICAgICAgIyBDcmVhdGUgZWZpLmltZyB0aGF0IGNvbnRhaW5zIGJvb3Rsb2FkZXIgZmlsZXMgZm9yIEVGSSBib290aW5nCisgICAgICAgICMgaWYgSVNPRElSIGRpZG4ndCBleGlzdCBvciBkaWRuJ3QgY29udGFpbnMgaXQKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoIiVzL2VmaS5pbWciICUgaW1nX2lzb19kaXIpOgorICAgICAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtbSAwNjQ0ICVzL2VmaS5pbWcgJXMvZWZpLmltZyIgJSBcCisgICAgICAgICAgICAgICAgKGltZ19pc29fZGlyLCBpc29kaXIpCisgICAgICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGR1X2NtZCA9ICJkdSAtYmtzICVzL0VGSSIgJSBpc29kaXIKKyAgICAgICAgICAgIG91dCA9IGV4ZWNfY21kKGR1X2NtZCkKKyAgICAgICAgICAgIGJsb2NrcyA9IGludChvdXQuc3BsaXQoKVswXSkKKyAgICAgICAgICAgICMgQWRkIHNvbWUgZXh0cmEgc3BhY2UgZm9yIGZpbGUgc3lzdGVtIG92ZXJoZWFkCisgICAgICAgICAgICBibG9ja3MgKz0gMTAwCisgICAgICAgICAgICBtc2cgPSAiQWRkZWQgMTAwIGV4dHJhIGJsb2NrcyB0byAlcyB0byBnZXQgdG8gJWQgdG90YWwgYmxvY2tzIiBcCisgICAgICAgICAgICAgICAgICAgICUgKHBhcnQubW91bnRwb2ludCwgYmxvY2tzKQorICAgICAgICAgICAgbXNnZXIuZGVidWcobXNnKQorCisgICAgICAgICAgICAjIEVuc3VyZSB0b3RhbCBzZWN0b3JzIGlzIGFuIGludGVncmFsIG51bWJlciBvZiBzZWN0b3JzIHBlcgorICAgICAgICAgICAgIyB0cmFjayBvciBtY29weSB3aWxsIGNvbXBsYWluLiBTZWN0b3JzIGFyZSA1MTIgYnl0ZXMsIGFuZCB3ZQorICAgICAgICAgICAgIyBnZW5lcmF0ZSBpbWFnZXMgd2l0aCAzMiBzZWN0b3JzIHBlciB0cmFjay4gVGhpcyBjYWxjdWxhdGlvbiBpcworICAgICAgICAgICAgIyBkb25lIGluIGJsb2NrcywgdGh1cyB0aGUgbW9kIGJ5IDE2IGluc3RlYWQgb2YgMzIuCisgICAgICAgICAgICBibG9ja3MgKz0gKDE2IC0gKGJsb2NrcyAlIDE2KSkKKworICAgICAgICAgICAgIyBkb3NmcyBpbWFnZSBmb3IgRUZJIGJvb3QKKyAgICAgICAgICAgIGJvb3RpbWcgPSAiJXMvZWZpLmltZyIgJSBpc29kaXIKKworICAgICAgICAgICAgZG9zZnNfY21kID0gJ21rZnMudmZhdCAtbiAiRUZJaW1nIiAtUyA1MTIgLUMgJXMgJWQnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGJvb3RpbWcsIGJsb2NrcykKKyAgICAgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChkb3Nmc19jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgICAgICBtbWRfY21kID0gIm1tZCAtaSAlcyA6Oi9FRkkiICUgYm9vdGltZworICAgICAgICAgICAgZXhlY19uYXRpdmVfY21kKG1tZF9jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgICAgICBtY29weV9jbWQgPSAibWNvcHkgLWkgJXMgLXMgJXMvRUZJLyogOjovRUZJLyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgJSAoYm9vdGltZywgaXNvZGlyKQorICAgICAgICAgICAgZXhlY19uYXRpdmVfY21kKG1jb3B5X2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgICAgIGNobW9kX2NtZCA9ICJjaG1vZCA2NDQgJXMiICUgYm9vdGltZworICAgICAgICAgICAgZXhlY19jbWQoY2htb2RfY21kKQorCisgICAgICAgICMgUHJlcGFyZSBmaWxlcyBmb3IgbGVnYWN5IGJvb3QKKyAgICAgICAgc3lzbGludXhfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJTVEFHSU5HX0RBVEFESVIiKQorICAgICAgICBpZiBub3Qgc3lzbGludXhfZGlyOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgU1RBR0lOR19EQVRBRElSLCBleGl0aW5nLlxuIikKKworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiJXMvaXNvbGludXgiICUgaXNvZGlyKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoIiVzL2lzb2xpbnV4IiAlIGlzb2RpcikKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1kICVzL2lzb2xpbnV4IiAlIGlzb2RpcgorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICBjbHMuZG9fY29uZmlndXJlX3N5c2xpbnV4KGNyZWF0b3IsIGNyX3dvcmtkaXIpCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtbSA0NDQgJXMvc3lzbGludXgvbGRsaW51eC5zeXMgIiAlIHN5c2xpbnV4X2RpcgorICAgICAgICBpbnN0YWxsX2NtZCArPSAiJXMvaXNvbGludXgvbGRsaW51eC5zeXMiICUgaXNvZGlyCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLW0gNDQ0ICVzL3N5c2xpbnV4L2lzb2hkcGZ4LmJpbiAiICUgc3lzbGludXhfZGlyCisgICAgICAgIGluc3RhbGxfY21kICs9ICIlcy9pc29saW51eC9pc29oZHBmeC5iaW4iICUgaXNvZGlyCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLW0gNjQ0ICVzL3N5c2xpbnV4L2lzb2xpbnV4LmJpbiAiICUgc3lzbGludXhfZGlyCisgICAgICAgIGluc3RhbGxfY21kICs9ICIlcy9pc29saW51eC9pc29saW51eC5iaW4iICUgaXNvZGlyCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLW0gNjQ0ICVzL3N5c2xpbnV4L2xkbGludXguYzMyICIgJSBzeXNsaW51eF9kaXIKKyAgICAgICAgaW5zdGFsbF9jbWQgKz0gIiVzL2lzb2xpbnV4L2xkbGludXguYzMyIiAlIGlzb2RpcgorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICAjY3JlYXRlIElTTyBpbWFnZQorICAgICAgICBpc29faW1nID0gIiVzL3RlbXBpc29faW1nLmlzbyIgJSBjcl93b3JrZGlyCisgICAgICAgIGlzb19ib290aW1nID0gImlzb2xpbnV4L2lzb2xpbnV4LmJpbiIKKyAgICAgICAgaXNvX2Jvb3RjYXQgPSAiaXNvbGludXgvYm9vdC5jYXQiCisgICAgICAgIGVmaV9pbWcgPSAiZWZpLmltZyIKKworICAgICAgICBta2lzb2ZzX2NtZCA9ICJta2lzb2ZzIC1WICVzICIgJSBwYXJ0LmxhYmVsCisgICAgICAgIG1raXNvZnNfY21kICs9ICItbyAlcyAtVSAiICUgaXNvX2ltZworICAgICAgICBta2lzb2ZzX2NtZCArPSAiLUogLWpvbGlldC1sb25nIC1yIC1pc28tbGV2ZWwgMiAtYiAlcyAiICUgaXNvX2Jvb3RpbWcKKyAgICAgICAgbWtpc29mc19jbWQgKz0gIi1jICVzIC1uby1lbXVsLWJvb3QgLWJvb3QtbG9hZC1zaXplIDQgIiAlIGlzb19ib290Y2F0CisgICAgICAgIG1raXNvZnNfY21kICs9ICItYm9vdC1pbmZvLXRhYmxlIC1lbHRvcml0by1hbHQtYm9vdCAiCisgICAgICAgIG1raXNvZnNfY21kICs9ICItZWx0b3JpdG8tcGxhdGZvcm0gMHhFRiAtZWx0b3JpdG8tYm9vdCAlcyAiICUgZWZpX2ltZworICAgICAgICBta2lzb2ZzX2NtZCArPSAiLW5vLWVtdWwtYm9vdCAlcyAiICUgaXNvZGlyCisKKyAgICAgICAgbXNnZXIuZGVidWcoInJ1bm5pbmcgY29tbWFuZDogJXMiICUgbWtpc29mc19jbWQpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChta2lzb2ZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgc2h1dGlsLnJtdHJlZShpc29kaXIpCisKKyAgICAgICAgZHVfY21kID0gImR1IC1MYmtzICVzIiAlIGlzb19pbWcKKyAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICBpc29pbWdfc2l6ZSA9IGludChvdXQuc3BsaXQoKVswXSkKKworICAgICAgICBwYXJ0LnNldF9zaXplKGlzb2ltZ19zaXplKQorICAgICAgICBwYXJ0LnNldF9zb3VyY2VfZmlsZShpc29faW1nKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2luc3RhbGxfZGlzayhjbHMsIGRpc2ssIGRpc2tfbmFtZSwgY3JlYXRvciwgd29ya2Rpciwgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICBib290aW1nX2Rpciwga2VybmVsX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGFmdGVyIGFsbCBwYXJ0aXRpb25zIGhhdmUgYmVlbiBwcmVwYXJlZCBhbmQgYXNzZW1ibGVkIGludG8gYQorICAgICAgICBkaXNrIGltYWdlLiAgSW4gdGhpcyBjYXNlLCB3ZSBpbnNlcnQvbW9kaWZ5IHRoZSBNQlIgdXNpbmcgaXNvaHlicmlkCisgICAgICAgIHV0aWxpdHkgZm9yIGJvb3RpbmcgdmlhIEJJT1MgZnJvbSBkaXNrIHN0b3JhZ2UgZGV2aWNlcy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZnVsbF9wYXRoID0gY3JlYXRvci5fZnVsbF9wYXRoKHdvcmtkaXIsIGRpc2tfbmFtZSwgImRpcmVjdCIpCisgICAgICAgIGlzb19pbWcgPSAiJXMucDEiICUgZnVsbF9wYXRoCisgICAgICAgIGZ1bGxfcGF0aF9pc28gPSBjcmVhdG9yLl9mdWxsX3BhdGgod29ya2RpciwgZGlza19uYW1lLCAiaXNvIikKKworICAgICAgICBpc29oeWJyaWRfY21kID0gImlzb2h5YnJpZCAtdSAlcyIgJSBpc29faW1nCisgICAgICAgIG1zZ2VyLmRlYnVnKCJydW5uaW5nIGNvbW1hbmQ6ICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgaXNvaHlicmlkX2NtZCkKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKGlzb2h5YnJpZF9jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgICMgUmVwbGFjZSB0aGUgaW1hZ2UgY3JlYXRlZCBieSBkaXJlY3QgcGx1Z2luIHdpdGggdGhlIG9uZSBjcmVhdGVkIGJ5CisgICAgICAgICMgbWtpc29mcyBjb21tYW5kLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBpc28gaW1hZ2UgY3JlYXRlZCBieQorICAgICAgICAjIG1raXNvZnMgaGFzIGEgdmVyeSBzcGVjaWZpYyBNQlIgaXMgc3lzdGVtIGFyZWEgb2YgdGhlIElTTyBpbWFnZSwgYW5kCisgICAgICAgICMgZGlyZWN0IHBsdWdpbiBhZGRzIGFuZCBjb25maWd1cmVzIGFuIGFub3RoZXIgTUJSLgorICAgICAgICBtc2dlci5kZWJ1ZygiUmVwbGFjZWluZyB0aGUgaW1hZ2UgY3JlYXRlZCBieSBkaXJlY3QgcGx1Z2luXG4iKQorICAgICAgICBvcy5yZW1vdmUoZnVsbF9wYXRoKQorICAgICAgICBzaHV0aWwuY29weTIoaXNvX2ltZywgZnVsbF9wYXRoX2lzbykKKyAgICAgICAgc2h1dGlsLmNvcHkyKGZ1bGxfcGF0aF9pc28sIGZ1bGxfcGF0aCkKKworICAgICAgICAjIFJlbW92ZSB0ZW1wb3JhcnkgSVNPIGZpbGUKKyAgICAgICAgb3MucmVtb3ZlKGlzb19pbWcpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9yYXdjb3B5LnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvcmF3Y29weS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDY5MWJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvcmF3Y29weS5weQpAQCAtMCwwICsxLDg3IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKworaW1wb3J0IG9zCisKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMucGx1Z2luYmFzZSBpbXBvcnQgU291cmNlUGx1Z2luCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZCwgZ2V0X2JpdGJha2VfdmFyCisKK2NsYXNzIFJhd0NvcHlQbHVnaW4oU291cmNlUGx1Z2luKToKKyAgICAiIiIKKyAgICBQb3B1bGF0ZSBwYXJ0aXRpb24gY29udGVudCBmcm9tIHJhdyBpbWFnZSBmaWxlLgorICAgICIiIgorCisgICAgbmFtZSA9ICdyYXdjb3B5JworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2luc3RhbGxfZGlzayhjbHMsIGRpc2ssIGRpc2tfbmFtZSwgY3IsIHdvcmtkaXIsIG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCBhZnRlciBhbGwgcGFydGl0aW9ucyBoYXZlIGJlZW4gcHJlcGFyZWQgYW5kIGFzc2VtYmxlZCBpbnRvIGEKKyAgICAgICAgZGlzayBpbWFnZS4gRG8gbm90aGluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19jb25maWd1cmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCBiZWZvcmUgZG9fcHJlcGFyZV9wYXJ0aXRpb24oKS4gUG9zc2libHkgcHJlcGFyZQorICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIG9mIHNvbWUgc29ydC4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19wcmVwYXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Rmc19kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCB0byBkbyB0aGUgYWN0dWFsIGNvbnRlbnQgcG9wdWxhdGlvbiBmb3IgYSBwYXJ0aXRpb24gaS5lLiBpdAorICAgICAgICAncHJlcGFyZXMnIHRoZSBwYXJ0aXRpb24gdG8gYmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGltYWdlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGJvb3RpbWdfZGlyOgorICAgICAgICAgICAgYm9vdGltZ19kaXIgPSBnZXRfYml0YmFrZV92YXIoIkRFUExPWV9ESVJfSU1BR0UiKQorICAgICAgICAgICAgaWYgbm90IGJvb3RpbWdfZGlyOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIERFUExPWV9ESVJfSU1BR0UsIGV4aXRpbmdcbiIpCisKKyAgICAgICAgbXNnZXIuZGVidWcoJ0Jvb3RpbWcgZGlyOiAlcycgJSBib290aW1nX2RpcikKKworICAgICAgICBpZiAnZmlsZScgbm90IGluIHNvdXJjZV9wYXJhbXM6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiTm8gZmlsZSBzcGVjaWZpZWRcbiIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzcmMgPSBvcy5wYXRoLmpvaW4oYm9vdGltZ19kaXIsIHNvdXJjZV9wYXJhbXNbJ2ZpbGUnXSkKKyAgICAgICAgZHN0ID0gc3JjCisKKyAgICAgICAgaWYgJ3NraXAnIGluIHNvdXJjZV9wYXJhbXM6CisgICAgICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oY3Jfd29ya2Rpciwgc291cmNlX3BhcmFtc1snZmlsZSddKQorICAgICAgICAgICAgZGRfY21kID0gImRkIGlmPSVzIG9mPSVzIGlicz0lcyBza2lwPTEgY29udj1ub3RydW5jIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgKHNyYywgZHN0LCBzb3VyY2VfcGFyYW1zWydza2lwJ10pCisgICAgICAgICAgICBleGVjX2NtZChkZF9jbWQpCisKKyAgICAgICAgIyBnZXQgdGhlIHNpemUgaW4gdGhlIHJpZ2h0IHVuaXRzIGZvciBraWNrc3RhcnQgKGtCKQorICAgICAgICBkdV9jbWQgPSAiZHUgLUxia3MgJXMiICUgZHN0CisgICAgICAgIG91dCA9IGV4ZWNfY21kKGR1X2NtZCkKKyAgICAgICAgZmlsZXNpemUgPSBvdXQuc3BsaXQoKVswXQorCisgICAgICAgIGlmIGludChmaWxlc2l6ZSkgPiBpbnQocGFydC5zaXplKToKKyAgICAgICAgICAgIHBhcnQuc2l6ZSA9IGZpbGVzaXplCisKKyAgICAgICAgcGFydC5zb3VyY2VfZmlsZSA9IGRzdAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9yb290ZnMucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9yb290ZnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkwNzEyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL3Jvb3Rmcy5weQpAQCAtMCwwICsxLDgzIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBpbXBsZW1lbnRzIHRoZSAncm9vdGZzJyBzb3VyY2UgcGx1Z2luIGNsYXNzIGZvciAnd2ljJworIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGxpbnV4LmludGVsLmNvbT4KKyMgSm9hbyBIZW5yaXF1ZSBGZXJyZWlyYSBkZSBGcmVpdGFzIDxqb2FvaGYgKGF0XSBnbWFpbC5jb20+CisjCisKK2ltcG9ydCBvcworCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIKK2Zyb20gd2ljLnBsdWdpbmJhc2UgaW1wb3J0IFNvdXJjZVBsdWdpbgorZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZ2V0X2JpdGJha2VfdmFyCisKK2NsYXNzIFJvb3Rmc1BsdWdpbihTb3VyY2VQbHVnaW4pOgorICAgICIiIgorICAgIFBvcHVsYXRlIHBhcnRpdGlvbiBjb250ZW50IGZyb20gYSByb290ZnMgZGlyZWN0b3J5LgorICAgICIiIgorCisgICAgbmFtZSA9ICdyb290ZnMnCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9fZ2V0X3Jvb3Rmc19kaXIocm9vdGZzX2Rpcik6CisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocm9vdGZzX2Rpcik6CisgICAgICAgICAgICByZXR1cm4gcm9vdGZzX2RpcgorCisgICAgICAgIGltYWdlX3Jvb3Rmc19kaXIgPSBnZXRfYml0YmFrZV92YXIoIklNQUdFX1JPT1RGUyIsIHJvb3Rmc19kaXIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGltYWdlX3Jvb3Rmc19kaXIpOgorICAgICAgICAgICAgbXNnID0gIk5vIHZhbGlkIGFydGlmYWN0IElNQUdFX1JPT1RGUyBmcm9tIGltYWdlIG5hbWVkIgorICAgICAgICAgICAgbXNnICs9ICIgJXMgaGFzIGJlZW4gZm91bmQgYXQgJXMsIGV4aXRpbmcuXG4iICUgXAorICAgICAgICAgICAgICAgIChyb290ZnNfZGlyLCBpbWFnZV9yb290ZnNfZGlyKQorICAgICAgICAgICAgbXNnZXIuZXJyb3IobXNnKQorCisgICAgICAgIHJldHVybiBpbWFnZV9yb290ZnNfZGlyCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fcHJlcGFyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrcm9vdGZzX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIHRvIGRvIHRoZSBhY3R1YWwgY29udGVudCBwb3B1bGF0aW9uIGZvciBhIHBhcnRpdGlvbiBpLmUuIGl0CisgICAgICAgICdwcmVwYXJlcycgdGhlIHBhcnRpdGlvbiB0byBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgaW1hZ2UuCisgICAgICAgIEluIHRoaXMgY2FzZSwgcHJlcGFyZSBjb250ZW50IGZvciBsZWdhY3kgYmlvcyBib290IHBhcnRpdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHBhcnQucm9vdGZzIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBub3QgJ1JPT1RGU19ESVInIGluIGtyb290ZnNfZGlyOgorICAgICAgICAgICAgICAgIG1zZyA9ICJDb3VsZG4ndCBmaW5kIC0tcm9vdGZzLWRpciwgZXhpdGluZyIKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcihtc2cpCisgICAgICAgICAgICByb290ZnNfZGlyID0ga3Jvb3Rmc19kaXJbJ1JPT1RGU19ESVInXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcGFydC5yb290ZnMgaW4ga3Jvb3Rmc19kaXI6CisgICAgICAgICAgICAgICAgcm9vdGZzX2RpciA9IGtyb290ZnNfZGlyW3BhcnQucm9vdGZzXQorICAgICAgICAgICAgZWxpZiBwYXJ0LnJvb3RmczoKKyAgICAgICAgICAgICAgICByb290ZnNfZGlyID0gcGFydC5yb290ZnMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnID0gIkNvdWxkbid0IGZpbmQgLS1yb290ZnMtZGlyPSVzIGNvbm5lY3Rpb24iCisgICAgICAgICAgICAgICAgbXNnICs9ICIgb3IgaXQgaXMgbm90IGEgdmFsaWQgcGF0aCwgZXhpdGluZyIKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcihtc2cgJSBwYXJ0LnJvb3RmcykKKworICAgICAgICByZWFsX3Jvb3Rmc19kaXIgPSBjbHMuX19nZXRfcm9vdGZzX2Rpcihyb290ZnNfZGlyKQorCisgICAgICAgIHBhcnQuc2V0X3Jvb3RmcyhyZWFsX3Jvb3Rmc19kaXIpCisgICAgICAgIHBhcnQucHJlcGFyZV9yb290ZnMoY3Jfd29ya2Rpciwgb2VfYnVpbGRkaXIsIHJlYWxfcm9vdGZzX2RpciwgbmF0aXZlX3N5c3Jvb3QpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL3Jvb3Rmc19wY2Jpb3NfZXh0LnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2Uvcm9vdGZzX3BjYmlvc19leHQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZlN2IwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL3Jvb3Rmc19wY2Jpb3NfZXh0LnB5CkBAIC0wLDAgKzEsMTgxIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtbyBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBBVVRIT1IKKyMgQWRyaWFuIEZyZWlob2ZlciA8YWRyaWFuLmZyZWlob2ZlciAoYXRdIG5lcmF0ZWMuY29tPgorIworCitpbXBvcnQgb3MKK2Zyb20gd2ljIGltcG9ydCBraWNrc3RhcnQKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMudXRpbHMgaW1wb3J0IHN5c2xpbnV4Citmcm9tIHdpYy51dGlscyBpbXBvcnQgcnVubmVyCitmcm9tIHdpYy51dGlscy5vZSBpbXBvcnQgbWlzYworZnJvbSB3aWMudXRpbHMuZXJyb3JzIGltcG9ydCBJbWFnZUVycm9yCitmcm9tIHdpYy5wbHVnaW5iYXNlIGltcG9ydCBTb3VyY2VQbHVnaW4KKworCisjIHB5bGludDogZGlzYWJsZT1uby1pbml0CitjbGFzcyBSb290ZnNQbHVnaW4oU291cmNlUGx1Z2luKToKKyAgICAiIiIKKyAgICBDcmVhdGUgcm9vdCBwYXJ0aXRpb24gYW5kIGluc3RhbGwgc3lzbGludXggYm9vdGxvYWRlcgorCisgICAgVGhpcyBwbHVnaW4gY3JlYXRlcyBhIGRpc2sgaW1hZ2UgY29udGFpbmluZyBhIGJvb3RhYmxlIHJvb3QgcGFydGl0aW9uIHdpdGgKKyAgICBzeXNsaW51eCBpbnN0YWxsZWQuIFRoZSBmaWxlc3lzdGVtIGlzIGV4dDIvMy80LCBubyBleHRyYSBib290IHBhcnRpdGlvbiBpcworICAgIHJlcXVpcmVkLgorCisgICAgRXhhbXBsZSBraWNrc3RhcnQgZmlsZToKKyAgICBwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzLXBjYmlvcy1leHQgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDQgLS1sYWJlbCByb290ZnMgLS1hbGlnbiAxMDI0CisgICAgYm9vdGxvYWRlciAtLXNvdXJjZSByb290ZnMtcGNiaW9zLWV4dCAtLXRpbWVvdXQ9MCAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQ0IgorCisgICAgVGhlIGZpcnN0IGxpbmUgZ2VuZXJhdGVzIGEgcm9vdCBmaWxlIHN5c3RlbSBpbmNsdWRpbmcgYSBzeXNsaW51eC5jZmcgZmlsZQorICAgIFRoZSAiLS1zb3VyY2Ugcm9vdGZzLXBjYmlvcy1leHQiIGluIHRoZSBzZWNvbmQgbGluZSB0cmlnZ2VycyB0aGUgaW5zdGFsbGF0aW9uCisgICAgb2YgbGRsaW51eC5zeXMgaW50byB0aGUgaW1hZ2UuCisgICAgIiIiCisKKyAgICBuYW1lID0gJ3Jvb3Rmcy1wY2Jpb3MtZXh0JworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZ2V0X3Jvb3Rmc19kaXIocm9vdGZzX2Rpcik6CisgICAgICAgICIiIgorICAgICAgICBGaW5kIHJvb3RmcyBwc2V1ZG8gZGlyCisKKyAgICAgICAgSWYgcm9vdGZzX2RpciBpcyBhIGRpcmVjdG9yeSBjb25zaWRlciBpdCBhcyByb290ZnMgZGlyZWN0b3J5LgorICAgICAgICBPdGhlcndpc2UgYXNrIGJpdGJha2UgYWJvdXQgdGhlIElNQUdFX1JPT1RGUyBkaXJlY3RvcnkuCisgICAgICAgICIiIgorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHJvb3Rmc19kaXIpOgorICAgICAgICAgICAgcmV0dXJuIHJvb3Rmc19kaXIKKworICAgICAgICBpbWFnZV9yb290ZnNfZGlyID0gbWlzYy5nZXRfYml0YmFrZV92YXIoIklNQUdFX1JPT1RGUyIsIHJvb3Rmc19kaXIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGltYWdlX3Jvb3Rmc19kaXIpOgorICAgICAgICAgICAgbXNnID0gIk5vIHZhbGlkIGFydGlmYWN0IElNQUdFX1JPT1RGUyBmcm9tIGltYWdlIG5hbWVkIgorICAgICAgICAgICAgbXNnICs9ICIgJXMgaGFzIGJlZW4gZm91bmQgYXQgJXMsIGV4aXRpbmcuXG4iICUgXAorICAgICAgICAgICAgICAgIChyb290ZnNfZGlyLCBpbWFnZV9yb290ZnNfZGlyKQorICAgICAgICAgICAgbXNnZXIuZXJyb3IobXNnKQorCisgICAgICAgIHJldHVybiBpbWFnZV9yb290ZnNfZGlyCisKKyAgICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fY29uZmlndXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGltYWdlX2NyZWF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfY3JlYXRvcl93b3JrZGlyLCBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlcyBzeXNsaW51eCBjb25maWcgaW4gcm9vdGZzIGRpcmVjdG9yeQorCisgICAgICAgIENhbGxlZCBiZWZvcmUgZG9fcHJlcGFyZV9wYXJ0aXRpb24oKQorICAgICAgICAiIiIKKyAgICAgICAgb3B0aW9ucyA9IGltYWdlX2NyZWF0b3Iua3MuaGFuZGxlci5ib290bG9hZGVyLmFwcGVuZExpbmUKKworICAgICAgICBzeXNsaW51eF9jb25mID0gIiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiUFJPTVBUIDBcbiIKKworICAgICAgICB0aW1lb3V0ID0ga2lja3N0YXJ0LmdldF90aW1lb3V0KGltYWdlX2NyZWF0b3Iua3MpCisgICAgICAgIGlmIG5vdCB0aW1lb3V0OgorICAgICAgICAgICAgdGltZW91dCA9IDAKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiVElNRU9VVCAiICsgc3RyKHRpbWVvdXQpICsgIlxuIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJBTExPV09QVElPTlMgMVxuIgorCisgICAgICAgICMgRGVyaXZlIFNFUklBTC4uLiBsaW5lIGZyb20gZnJvbSBrZXJuZWwgYm9vdCBwYXJhbWV0ZXJzCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gc3lzbGludXguc2VyaWFsX2NvbnNvbGVfZm9ybV9rYXJncyhvcHRpb25zKSArICJcbiIKKworICAgICAgICBzeXNsaW51eF9jb25mICs9ICJERUZBVUxUIGxpbnV4XG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIkxBQkVMIGxpbnV4XG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIiAgS0VSTkVMIC9ib290L2J6SW1hZ2VcbiIKKworICAgICAgICBzeXNsaW51eF9jb25mICs9ICIgIEFQUEVORCBsYWJlbD1ib290IHJvb3Q9JXMgJXNcbiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbWFnZV9jcmVhdG9yLnJvb3RkZXYsIG9wdGlvbnMpCisKKyAgICAgICAgc3lzbGludXhfY2ZnID0gb3MucGF0aC5qb2luKGltYWdlX2NyZWF0b3Iucm9vdGZzX2RpclsnUk9PVEZTX0RJUiddLCAiYm9vdCIsICJzeXNsaW51eC5jZmciKQorICAgICAgICBtc2dlci5kZWJ1ZygiV3JpdGluZyBzeXNsaW51eCBjb25maWcgJXMiICUgc3lzbGludXhfY2ZnKQorICAgICAgICB3aXRoIG9wZW4oc3lzbGludXhfY2ZnLCAidyIpIGFzIGNmZzoKKyAgICAgICAgICAgIGNmZy53cml0ZShzeXNsaW51eF9jb25mKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX3ByZXBhcmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgaW1hZ2VfY3JlYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfY3JlYXRvcl93b3JrZGlyLCBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbF9kaXIsIGtyb290ZnNfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGVzIHBhcnRpdGlvbiBvdXQgb2Ygcm9vdGZzIGRpcmVjdG9yeQorCisgICAgICAgIFByZXBhcmUgY29udGVudCBmb3IgYSByb290ZnMgcGFydGl0aW9uIGkuZS4gY3JlYXRlIGEgcGFydGl0aW9uCisgICAgICAgIGFuZCBmaWxsIGl0IGZyb20gYSAvcm9vdGZzIGRpci4KKyAgICAgICAgSW5zdGFsbCBzeXNsaW51eCBib290bG9hZGVyIGludG8gcm9vdCBwYXJ0aXRpb24gaW1hZ2UgZmlsZQorICAgICAgICAiIiIKKyAgICAgICAgZGVmIGlzX2V4ZShleGVwYXRoKToKKyAgICAgICAgICAgICIiIlZlcmlmeSBleGVwYXRoIGlzIGFuIGV4ZWN1dGFibGUgZmlsZSIiIgorICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguaXNmaWxlKGV4ZXBhdGgpIGFuZCBvcy5hY2Nlc3MoZXhlcGF0aCwgb3MuWF9PSykKKworICAgICAgICAjIE1ha2Ugc3VyZSBzeXNsaW51eC1ub210b29scyBpcyBhdmFpbGFibGUgaW4gbmF0aXZlIHN5c3Jvb3Qgb3IgZmFpbAorICAgICAgICBuYXRpdmVfc3lzbGludXhfbm9tdG9vbHMgPSBvcy5wYXRoLmpvaW4obmF0aXZlX3N5c3Jvb3QsICJ1c3IvYmluL3N5c2xpbnV4LW5vbXRvb2xzIikKKyAgICAgICAgaWYgbm90IGlzX2V4ZShuYXRpdmVfc3lzbGludXhfbm9tdG9vbHMpOgorICAgICAgICAgICAgbXNnZXIuaW5mbygiYnVpbGRpbmcgc3lzbGludXgtbmF0aXZlLi4uIikKKyAgICAgICAgICAgIG1pc2MuZXhlY19jbWQoImJpdGJha2Ugc3lzbGludXgtbmF0aXZlIikKKyAgICAgICAgaWYgbm90IGlzX2V4ZShuYXRpdmVfc3lzbGludXhfbm9tdG9vbHMpOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgc3lzbGludXgtbm9tdG9vbHMgKCVzKSwgZXhpdGluZ1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzbGludXhfbm9tdG9vbHMpCisKKyAgICAgICAgaWYgcGFydC5yb290ZnMgaXMgTm9uZToKKyAgICAgICAgICAgIGlmICdST09URlNfRElSJyBub3QgaW4ga3Jvb3Rmc19kaXI6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgLS1yb290ZnMtZGlyLCBleGl0aW5nIikKKyAgICAgICAgICAgIHJvb3Rmc19kaXIgPSBrcm9vdGZzX2RpclsnUk9PVEZTX0RJUiddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwYXJ0LnJvb3RmcyBpbiBrcm9vdGZzX2RpcjoKKyAgICAgICAgICAgICAgICByb290ZnNfZGlyID0ga3Jvb3Rmc19kaXJbcGFydC5yb290ZnNdCisgICAgICAgICAgICBlbGlmIHBhcnQucm9vdGZzOgorICAgICAgICAgICAgICAgIHJvb3Rmc19kaXIgPSBwYXJ0LnJvb3RmcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2cgPSAiQ291bGRuJ3QgZmluZCAtLXJvb3Rmcy1kaXI9JXMgY29ubmVjdGlvbiIKKyAgICAgICAgICAgICAgICBtc2cgKz0gIiBvciBpdCBpcyBub3QgYSB2YWxpZCBwYXRoLCBleGl0aW5nIgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKG1zZyAlIHBhcnQucm9vdGZzKQorCisgICAgICAgIHJlYWxfcm9vdGZzX2RpciA9IGNscy5fZ2V0X3Jvb3Rmc19kaXIocm9vdGZzX2RpcikKKworICAgICAgICBwYXJ0LnNldF9yb290ZnMocmVhbF9yb290ZnNfZGlyKQorICAgICAgICBwYXJ0LnByZXBhcmVfcm9vdGZzKGltYWdlX2NyZWF0b3Jfd29ya2Rpciwgb2VfYnVpbGRkaXIsIHJlYWxfcm9vdGZzX2RpciwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgIyBpbnN0YWxsIHN5c2xpbnV4IGludG8gcm9vdGZzIHBhcnRpdGlvbgorICAgICAgICBzeXNsaW51eF9jbWQgPSAic3lzbGludXgtbm9tdG9vbHMgLWQgL2Jvb3QgLWkgJXMiICUgcGFydC5zb3VyY2VfZmlsZQorICAgICAgICBtaXNjLmV4ZWNfbmF0aXZlX2NtZChzeXNsaW51eF9jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2luc3RhbGxfZGlzayhjbHMsIGRpc2ssIGRpc2tfbmFtZSwgaW1hZ2VfY3JlYXRvciwgd29ya2Rpciwgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICBib290aW1nX2Rpciwga2VybmVsX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQXNzZW1ibGUgcGFydGl0aW9ucyB0byBkaXNrIGltYWdlCisKKyAgICAgICAgQ2FsbGVkIGFmdGVyIGFsbCBwYXJ0aXRpb25zIGhhdmUgYmVlbiBwcmVwYXJlZCBhbmQgYXNzZW1ibGVkIGludG8gYQorICAgICAgICBkaXNrIGltYWdlLiBJbiB0aGlzIGNhc2UsIHdlIGluc3RhbGwgdGhlIE1CUi4KKyAgICAgICAgIiIiCisgICAgICAgIG1icmZpbGUgPSBvcy5wYXRoLmpvaW4obmF0aXZlX3N5c3Jvb3QsICJ1c3Ivc2hhcmUvc3lzbGludXgvIikKKyAgICAgICAgaWYgaW1hZ2VfY3JlYXRvci5wdGFibGVfZm9ybWF0ID09ICdtc2Rvcyc6CisgICAgICAgICAgICBtYnJmaWxlICs9ICJtYnIuYmluIgorICAgICAgICBlbGlmIGltYWdlX2NyZWF0b3IucHRhYmxlX2Zvcm1hdCA9PSAnZ3B0JzoKKyAgICAgICAgICAgIG1icmZpbGUgKz0gImdwdG1ici5iaW4iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiVW5zdXBwb3J0ZWQgcGFydGl0aW9uIHRhYmxlOiAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZV9jcmVhdG9yLnB0YWJsZV9mb3JtYXQpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG1icmZpbGUpOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgJXMuIEhhcyBzeXNsaW51eC1uYXRpdmUgYmVlbiBiYWtlZD8iICUgbWJyZmlsZSkKKworICAgICAgICBmdWxsX3BhdGggPSBkaXNrWydkaXNrJ10uZGV2aWNlCisgICAgICAgIG1zZ2VyLmRlYnVnKCJJbnN0YWxsaW5nIE1CUiBvbiBkaXNrICVzIGFzICVzIHdpdGggc2l6ZSAlcyBieXRlcyIgXAorICAgICAgICAgICAgICAgICAgICAlIChkaXNrX25hbWUsIGZ1bGxfcGF0aCwgZGlza1snbWluX3NpemUnXSkpCisKKyAgICAgICAgcmV0X2NvZGUgPSBydW5uZXIuc2hvdyhbJ2RkJywgJ2lmPSVzJyAlIG1icmZpbGUsICdvZj0lcycgJSBmdWxsX3BhdGgsICdjb252PW5vdHJ1bmMnXSkKKyAgICAgICAgaWYgcmV0X2NvZGUgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIEltYWdlRXJyb3IoIlVuYWJsZSB0byBzZXQgTUJSIHRvICVzIiAlIGZ1bGxfcGF0aCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3Rlc3QgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy90ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYWVhZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy90ZXN0CkBAIC0wLDAgKzEgQEAKK3Rlc3QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9lcnJvcnMucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9lcnJvcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiNTE0ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL2Vycm9ycy5weQpAQCAtMCwwICsxLDI5IEBACisjIS91c3IvYmluL2VudiBweXRob24gLXR0CisjCisjIENvcHlyaWdodCAoYykgMjAwNyBSZWQgSGF0LCBJbmMuCisjIENvcHlyaWdodCAoYykgMjAxMSBJbnRlbCwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworY2xhc3MgV2ljRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIENyZWF0b3JFcnJvcihXaWNFcnJvcik6CisgICAgcGFzcworCitjbGFzcyBVc2FnZShXaWNFcnJvcik6CisgICAgcGFzcworCitjbGFzcyBJbWFnZUVycm9yKFdpY0Vycm9yKToKKyAgICBwYXNzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9mc19yZWxhdGVkLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvZnNfcmVsYXRlZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTc0NDYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvZnNfcmVsYXRlZC5weQpAQCAtMCwwICsxLDg0IEBACisjIS91c3IvYmluL2VudiBweXRob24gLXR0CisjCisjIENvcHlyaWdodCAoYykgMjAwNywgUmVkIEhhdCwgSW5jLgorIyBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAsIDIwMTEgSW50ZWwsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisjIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKK2ltcG9ydCBvcworaW1wb3J0IGVycm5vCisKK2Zyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGV4ZWNfY21kCisKK2RlZiBtYWtlZGlycyhkaXJuYW1lKToKKyAgICAiIiJBIHZlcnNpb24gb2Ygb3MubWFrZWRpcnMoKSB0aGF0IGRvZXNuJ3QgdGhyb3cgYW4KKyAgICBleGNlcHRpb24gaWYgdGhlIGxlYWYgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgb3MubWFrZWRpcnMoZGlybmFtZSkKKyAgICBleGNlcHQgT1NFcnJvciwgZXJyOgorICAgICAgICBpZiBlcnIuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgcmFpc2UKKworY2xhc3MgRGlzazoKKyAgICAiIiIKKyAgICBHZW5lcmljIGJhc2Ugb2JqZWN0IGZvciBhIGRpc2suCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemUsIGRldmljZT1Ob25lKToKKyAgICAgICAgc2VsZi5fZGV2aWNlID0gZGV2aWNlCisgICAgICAgIHNlbGYuX3NpemUgPSBzaXplCisKKyAgICBkZWYgY3JlYXRlKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGdldF9kZXZpY2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kZXZpY2UKKyAgICBkZWYgc2V0X2RldmljZShzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5fZGV2aWNlID0gcGF0aAorICAgIGRldmljZSA9IHByb3BlcnR5KGdldF9kZXZpY2UsIHNldF9kZXZpY2UpCisKKyAgICBkZWYgZ2V0X3NpemUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zaXplCisgICAgc2l6ZSA9IHByb3BlcnR5KGdldF9zaXplKQorCisKK2NsYXNzIERpc2tJbWFnZShEaXNrKToKKyAgICAiIiIKKyAgICBBIERpc2sgYmFja2VkIGJ5IGEgZmlsZS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW1hZ2VfZmlsZSwgc2l6ZSk6CisgICAgICAgIERpc2suX19pbml0X18oc2VsZiwgc2l6ZSkKKyAgICAgICAgc2VsZi5pbWFnZV9maWxlID0gaW1hZ2VfZmlsZQorCisgICAgZGVmIGV4aXN0cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguZXhpc3RzKHNlbGYuaW1hZ2VfZmlsZSkKKworICAgIGRlZiBjcmVhdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGV2aWNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYmxvY2tzID0gc2VsZi5zaXplIC8gMTAyNAorICAgICAgICBpZiBzZWxmLnNpemUgLSBibG9ja3MgKiAxMDI0OgorICAgICAgICAgICAgYmxvY2tzICs9IDEKKworICAgICAgICAjIGNyZWF0ZSBkaXNrIGltYWdlCisgICAgICAgIGRkX2NtZCA9ICJkZCBpZj0vZGV2L3plcm8gb2Y9JXMgYnM9MTAyNCBzZWVrPSVkIGNvdW50PTEiICUgXAorICAgICAgICAgICAgKHNlbGYuaW1hZ2VfZmlsZSwgYmxvY2tzKQorICAgICAgICBleGVjX2NtZChkZF9jbWQpCisKKyAgICAgICAgc2VsZi5kZXZpY2UgPSBzZWxmLmltYWdlX2ZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL21pc2MucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9taXNjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNzUwNjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9taXNjLnB5CkBAIC0wLDAgKzEsNTggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdHQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwLCAyMDExIEludGVsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisjIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUKKworZGVmIGJ1aWxkX25hbWUoa3NjZmcsIHJlbGVhc2U9Tm9uZSwgcHJlZml4PU5vbmUsIHN1ZmZpeD1Ob25lKToKKyAgICAiIiJDb25zdHJ1Y3QgYW5kIHJldHVybiBhbiBpbWFnZSBuYW1lIHN0cmluZy4KKworICAgIFRoaXMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIHRvIGhlbHAgY3JlYXRlIHNlbnNpYmxlIG5hbWUgYW5kIGZzbGFiZWwKKyAgICBzdHJpbmdzLiBUaGUgbmFtZSBpcyBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgc2Fucy1wcmVmaXgtYW5kLWV4dGVuc2lvbgorICAgIGtpY2tzdGFydCBmaWxlbmFtZSBhbmQgdGhlIHN1cHBsaWVkIHByZWZpeCBhbmQgc3VmZml4LgorCisgICAga3NjZmcgLS0gYSBwYXRoIHRvIGEga2lja3N0YXJ0IGZpbGUKKyAgICByZWxlYXNlIC0tICBhIHJlcGxhY2VtZW50IHRvIHN1ZmZpeCBmb3IgaW1hZ2UgcmVsZWFzZQorICAgIHByZWZpeCAtLSBhIHByZWZpeCB0byBwcmVwZW5kIHRvIHRoZSBuYW1lOyBkZWZhdWx0cyB0byBOb25lLCB3aGljaCBjYXVzZXMKKyAgICAgICAgICAgICAgbm8gcHJlZml4IHRvIGJlIHVzZWQKKyAgICBzdWZmaXggLS0gYSBzdWZmaXggdG8gYXBwZW5kIHRvIHRoZSBuYW1lOyBkZWZhdWx0cyB0byBOb25lLCB3aGljaCBjYXVzZXMKKyAgICAgICAgICAgICAgYSBZWVlZTU1EREhITU0gc3VmZml4IHRvIGJlIHVzZWQKKworICAgIE5vdGUsIGlmIG1heGxlbiBpcyBsZXNzIHRoZW4gdGhlIGxlbihzdWZmaXgpLCB5b3UgZ2V0IHRvIGtlZXAgYm90aCBwaWVjZXMuCisKKyAgICAiIiIKKyAgICBuYW1lID0gb3MucGF0aC5iYXNlbmFtZShrc2NmZykKKyAgICBpZHggPSBuYW1lLnJmaW5kKCcuJykKKyAgICBpZiBpZHggPj0gMDoKKyAgICAgICAgbmFtZSA9IG5hbWVbOmlkeF0KKworICAgIGlmIHJlbGVhc2UgaXMgbm90IE5vbmU6CisgICAgICAgIHN1ZmZpeCA9ICIiCisgICAgaWYgcHJlZml4IGlzIE5vbmU6CisgICAgICAgIHByZWZpeCA9ICIiCisgICAgaWYgc3VmZml4IGlzIE5vbmU6CisgICAgICAgIHN1ZmZpeCA9IHRpbWUuc3RyZnRpbWUoIiVZJW0lZCVIJU0iKQorCisgICAgaWYgbmFtZS5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgIG5hbWUgPSBuYW1lW2xlbihwcmVmaXgpOl0KKworICAgIHByZWZpeCA9ICIlcy0iICUgcHJlZml4IGlmIHByZWZpeCBlbHNlICIiCisgICAgc3VmZml4ID0gIi0lcyIgJSBzdWZmaXggaWYgc3VmZml4IGVsc2UgIiIKKworICAgIHJldCA9IHByZWZpeCArIG5hbWUgKyBzdWZmaXgKKworICAgIHJldHVybiByZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL29lL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvb2UvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4MTU3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL29lL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMjIgQEAKKyMKKyMgT3BlbkVtYmVkZGVkIHdpYyB1dGlscyBsaWJyYXJ5CisjCisjIENvcHlyaWdodCAoYykgMjAxMywgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGxpbnV4LmludGVsLmNvbT4KKyMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL29lL21pc2MucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9vZS9taXNjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNzBkOTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9vZS9taXNjLnB5CkBAIC0wLDAgKzEsMjM0IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBwbGFjZSB0byBjb2xsZWN0IHZhcmlvdXMgd2ljLXJlbGF0ZWQgdXRpbHMKKyMgZm9yIHRoZSBPcGVuRW1iZWRkZWQgSW1hZ2UgVG9vbHMuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gbGludXguaW50ZWwuY29tPgorIworIiIiTWlzY2VsbGFuZW91cyBmdW5jdGlvbnMuIiIiCisKK2ltcG9ydCBvcworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKKworZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCitmcm9tIHdpYy51dGlscyBpbXBvcnQgcnVubmVyCisKKyMgZXhlY3V0YWJsZSAtPiByZWNpcGUgcGFpcnMgZm9yIGV4ZWNfbmF0aXZlX2NtZAorTkFUSVZFX1JFQ0lQRVMgPSB7Im1jb3B5IjogIm10b29scyIsCisgICAgICAgICAgICAgICAgICAibWtkb3NmcyI6ICJkb3Nmc3Rvb2xzIiwKKyAgICAgICAgICAgICAgICAgICJta2ZzLmJ0cmZzIjogImJ0cmZzLXRvb2xzIiwKKyAgICAgICAgICAgICAgICAgICJta2ZzLmV4dDIiOiAiZTJmc3Byb2dzIiwKKyAgICAgICAgICAgICAgICAgICJta2ZzLmV4dDMiOiAiZTJmc3Byb2dzIiwKKyAgICAgICAgICAgICAgICAgICJta2ZzLmV4dDQiOiAiZTJmc3Byb2dzIiwKKyAgICAgICAgICAgICAgICAgICJta2ZzLnZmYXQiOiAiZG9zZnN0b29scyIsCisgICAgICAgICAgICAgICAgICAibWtzcXVhc2hmcyI6ICJzcXVhc2hmcy10b29scyIsCisgICAgICAgICAgICAgICAgICAibWtzd2FwIjogInV0aWwtbGludXgiLAorICAgICAgICAgICAgICAgICAgInBhcnRlZCI6ICJwYXJ0ZWQiLAorICAgICAgICAgICAgICAgICAgInNnZGlzayI6ICJncHRmZGlzayIsCisgICAgICAgICAgICAgICAgICAic3lzbGludXgiOiAic3lzbGludXgiCisgICAgICAgICAgICAgICAgIH0KKworZGVmIF9leGVjX2NtZChjbWRfYW5kX2FyZ3MsIGFzX3NoZWxsPUZhbHNlLCBjYXRjaD0zKToKKyAgICAiIiIKKyAgICBFeGVjdXRlIGNvbW1hbmQsIGNhdGNoaW5nIHN0ZGVyciwgc3Rkb3V0CisKKyAgICBOZWVkIHRvIGV4ZWN1dGUgYXNfc2hlbGwgaWYgdGhlIGNvbW1hbmQgdXNlcyB3aWxkY2FyZHMKKyAgICAiIiIKKyAgICBtc2dlci5kZWJ1ZygiX2V4ZWNfY21kOiAlcyIgJSBjbWRfYW5kX2FyZ3MpCisgICAgYXJncyA9IGNtZF9hbmRfYXJncy5zcGxpdCgpCisgICAgbXNnZXIuZGVidWcoYXJncykKKworICAgIGlmIGFzX3NoZWxsOgorICAgICAgICByZXQsIG91dCA9IHJ1bm5lci5ydW50b29sKGNtZF9hbmRfYXJncywgY2F0Y2gpCisgICAgZWxzZToKKyAgICAgICAgcmV0LCBvdXQgPSBydW5uZXIucnVudG9vbChhcmdzLCBjYXRjaCkKKyAgICBvdXQgPSBvdXQuc3RyaXAoKQorICAgIG1zZ2VyLmRlYnVnKCJfZXhlY19jbWQ6IG91dHB1dCBmb3IgJXMgKHJjID0gJWQpOiAlcyIgJSBcCisgICAgICAgICAgICAgICAgKGNtZF9hbmRfYXJncywgcmV0LCBvdXQpKQorCisgICAgcmV0dXJuIChyZXQsIG91dCkKKworCitkZWYgZXhlY19jbWQoY21kX2FuZF9hcmdzLCBhc19zaGVsbD1GYWxzZSwgY2F0Y2g9Myk6CisgICAgIiIiCisgICAgRXhlY3V0ZSBjb21tYW5kLCBjYXRjaGluZyBzdGRlcnIsIHN0ZG91dAorCisgICAgRXhpdHMgaWYgcmMgbm9uLXplcm8KKyAgICAiIiIKKyAgICByZXQsIG91dCA9IF9leGVjX2NtZChjbWRfYW5kX2FyZ3MsIGFzX3NoZWxsLCBjYXRjaCkKKworICAgIGlmIHJldCAhPSAwOgorICAgICAgICBtc2dlci5lcnJvcigiZXhlY19jbWQ6ICVzIHJldHVybmVkICclcycgaW5zdGVhZCBvZiAwIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgKGNtZF9hbmRfYXJncywgcmV0KSkKKworICAgIHJldHVybiBvdXQKKworCitkZWYgZXhlY19uYXRpdmVfY21kKGNtZF9hbmRfYXJncywgbmF0aXZlX3N5c3Jvb3QsIGNhdGNoPTMpOgorICAgICIiIgorICAgIEV4ZWN1dGUgbmF0aXZlIGNvbW1hbmQsIGNhdGNoaW5nIHN0ZGVyciwgc3Rkb3V0CisKKyAgICBOZWVkIHRvIGV4ZWN1dGUgYXNfc2hlbGwgaWYgdGhlIGNvbW1hbmQgdXNlcyB3aWxkY2FyZHMKKworICAgIEFsd2F5cyBuZWVkIHRvIGV4ZWN1dGUgbmF0aXZlIGNvbW1hbmRzIGFzX3NoZWxsCisgICAgIiIiCisgICAgbmF0aXZlX3BhdGhzID0gXAorICAgICAgICAiZXhwb3J0IFBBVEg9JXMvc2Jpbjolcy91c3Ivc2Jpbjolcy91c3IvYmluIiAlIFwKKyAgICAgICAgKG5hdGl2ZV9zeXNyb290LCBuYXRpdmVfc3lzcm9vdCwgbmF0aXZlX3N5c3Jvb3QpCisgICAgbmF0aXZlX2NtZF9hbmRfYXJncyA9ICIlczslcyIgJSAobmF0aXZlX3BhdGhzLCBjbWRfYW5kX2FyZ3MpCisgICAgbXNnZXIuZGVidWcoImV4ZWNfbmF0aXZlX2NtZDogJXMiICUgY21kX2FuZF9hcmdzKQorCisgICAgYXJncyA9IGNtZF9hbmRfYXJncy5zcGxpdCgpCisgICAgbXNnZXIuZGVidWcoYXJncykKKworICAgIHJldCwgb3V0ID0gX2V4ZWNfY21kKG5hdGl2ZV9jbWRfYW5kX2FyZ3MsIFRydWUsIGNhdGNoKQorCisgICAgaWYgcmV0ID09IDEyNzogIyBzaGVsbCBjb21tYW5kLW5vdC1mb3VuZAorICAgICAgICBwcm9nID0gYXJnc1swXQorICAgICAgICBtc2cgPSAiQSBuYXRpdmUgcHJvZ3JhbSAlcyByZXF1aXJlZCB0byBidWlsZCB0aGUgaW1hZ2UgIlwKKyAgICAgICAgICAgICAgIndhcyBub3QgZm91bmQgKHNlZSBkZXRhaWxzIGFib3ZlKS5cblxuIiAlIHByb2cKKyAgICAgICAgcmVjaXBlID0gTkFUSVZFX1JFQ0lQRVMuZ2V0KHByb2cpCisgICAgICAgIGlmIHJlY2lwZToKKyAgICAgICAgICAgIG1zZyArPSAiUGxlYXNlIGJha2UgaXQgd2l0aCAnYml0YmFrZSAlcy1uYXRpdmUnICJcCisgICAgICAgICAgICAgICAgICAgImFuZCB0cnkgYWdhaW4uXG4iICUgcmVjaXBlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2cgKz0gIldpYyBmYWlsZWQgdG8gZmluZCBhIHJlY2lwZSB0byBidWlsZCBuYXRpdmUgJXMuIFBsZWFzZSAiXAorICAgICAgICAgICAgICAgICAgICJmaWxlIGEgYnVnIGFnYWluc3Qgd2ljLlxuIiAlIHByb2cKKyAgICAgICAgbXNnZXIuZXJyb3IobXNnKQorICAgIGlmIG91dDoKKyAgICAgICAgbXNnZXIuZGVidWcoJyIlcyIgb3V0cHV0OiAlcycgJSAoYXJnc1swXSwgb3V0KSkKKworICAgIGlmIHJldCAhPSAwOgorICAgICAgICBtc2dlci5lcnJvcigiZXhlY19jbWQ6ICclcycgcmV0dXJuZWQgJyVzJyBpbnN0ZWFkIG9mIDAiICUgXAorICAgICAgICAgICAgICAgICAgICAoY21kX2FuZF9hcmdzLCByZXQpKQorCisgICAgcmV0dXJuIHJldCwgb3V0CisKK0JPT1RERF9FWFRSQV9TUEFDRSA9IDE2Mzg0CisKK2NsYXNzIEJpdGJha2VWYXJzKGRlZmF1bHRkaWN0KToKKyAgICAiIiIKKyAgICBDb250YWluZXIgZm9yIEJpdGJha2UgdmFyaWFibGVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZGVmYXVsdGRpY3QuX19pbml0X18oc2VsZiwgZGljdCkKKworICAgICAgICAjIGRlZmF1bHRfaW1hZ2UgYW5kIHZhcnNfZGlyIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIHNldCBmcm9tIG91dHNpZGUKKyAgICAgICAgc2VsZi5kZWZhdWx0X2ltYWdlID0gTm9uZQorICAgICAgICBzZWxmLnZhcnNfZGlyID0gTm9uZQorCisgICAgZGVmIF9wYXJzZV9saW5lKHNlbGYsIGxpbmUsIGltYWdlKToKKyAgICAgICAgIiIiCisgICAgICAgIFBhcnNlIG9uZSBsaW5lIGZyb20gYml0YmFrZSAtZSBvdXRwdXQgb3IgZnJvbSAuZW52IGZpbGUuCisgICAgICAgIFB1dCByZXN1bHQga2V5LXZhbHVlIHBhaXIgaW50byB0aGUgc3RvcmFnZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmICI9IiBub3QgaW4gbGluZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXksIHZhbCA9IGxpbmUuc3BsaXQoIj0iKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBrZXkgPSBrZXkuc3RyaXAoKQorICAgICAgICB2YWwgPSB2YWwuc3RyaXAoKQorICAgICAgICBpZiBrZXkucmVwbGFjZSgnXycsICcnKS5pc2FsbnVtKCk6CisgICAgICAgICAgICBzZWxmW2ltYWdlXVtrZXldID0gdmFsLnN0cmlwKCciJykKKworICAgIGRlZiBnZXRfdmFyKHNlbGYsIHZhciwgaW1hZ2U9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBHZXQgYml0YmFrZSB2YXJpYWJsZSBmcm9tICdiaXRiYWtlIC1lJyBvdXRwdXQgb3IgZnJvbSAuZW52IGZpbGUuCisgICAgICAgIFRoaXMgaXMgYSBsYXp5IG1ldGhvZCwgaS5lLiBpdCBydW5zIGJpdGJha2Ugb3IgcGFyc2VzIGZpbGUgb25seSB3aGVuCisgICAgICAgIG9ubHkgd2hlbiB2YXJpYWJsZSBpcyByZXF1ZXN0ZWQuIEl0IGFsc28gY2FjaGVzIHJlc3VsdHMuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgaW1hZ2U6CisgICAgICAgICAgICBpbWFnZSA9IHNlbGYuZGVmYXVsdF9pbWFnZQorCisgICAgICAgIGlmIGltYWdlIG5vdCBpbiBzZWxmOgorICAgICAgICAgICAgaWYgaW1hZ2UgYW5kIHNlbGYudmFyc19kaXI6CisgICAgICAgICAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi52YXJzX2RpciwgaW1hZ2UgKyAnLmVudicpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpOgorICAgICAgICAgICAgICAgICAgICAjIHBhcnNlIC5lbnYgZmlsZQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZm5hbWUpIGFzIHZhcnNmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gdmFyc2ZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VfbGluZShsaW5lLCBpbWFnZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgZ2V0IGJpdGJha2UgdmFyaWFibGUgZnJvbSAlcy4iICUgZm5hbWUKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkZpbGUgJXMgZG9lc24ndCBleGlzdC4iICUgZm5hbWUKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgR2V0IGJpdGJha2UgLWUgb3V0cHV0CisgICAgICAgICAgICAgICAgY21kID0gImJpdGJha2UgLWUiCisgICAgICAgICAgICAgICAgaWYgaW1hZ2U6CisgICAgICAgICAgICAgICAgICAgIGNtZCArPSAiICVzIiAlIGltYWdlCisKKyAgICAgICAgICAgICAgICBsb2dfbGV2ZWwgPSBtc2dlci5nZXRfbG9nbGV2ZWwoKQorICAgICAgICAgICAgICAgIG1zZ2VyLnNldF9sb2dsZXZlbCgnbm9ybWFsJykKKyAgICAgICAgICAgICAgICByZXQsIGxpbmVzID0gX2V4ZWNfY21kKGNtZCkKKyAgICAgICAgICAgICAgICBtc2dlci5zZXRfbG9nbGV2ZWwobG9nX2xldmVsKQorCisgICAgICAgICAgICAgICAgaWYgcmV0OgorICAgICAgICAgICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgZ2V0ICclcycgb3V0cHV0LiIgJSBjbWQKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkJpdGJha2UgZmFpbGVkIHdpdGggZXJyb3I6XG4lc1xuIiAlIGxpbmVzCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICAgICAgIyBQYXJzZSBiaXRiYWtlIC1lIG91dHB1dAorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9saW5lKGxpbmUsIGltYWdlKQorCisgICAgICAgICAgICAjIE1ha2UgZmlyc3QgaW1hZ2UgYSBkZWZhdWx0IHNldCBvZiB2YXJpYWJsZXMKKyAgICAgICAgICAgIGltYWdlcyA9IFtrZXkgZm9yIGtleSBpbiBzZWxmIGlmIGtleV0KKyAgICAgICAgICAgIGlmIGxlbihpbWFnZXMpID09IDE6CisgICAgICAgICAgICAgICAgc2VsZltOb25lXSA9IHNlbGZbaW1hZ2VdCisKKyAgICAgICAgcmV0dXJuIHNlbGZbaW1hZ2VdLmdldCh2YXIpCisKKyMgQ3JlYXRlIEJCX1ZBUlMgc2luZ2xldG9uCitCQl9WQVJTID0gQml0YmFrZVZhcnMoKQorCitkZWYgZ2V0X2JpdGJha2VfdmFyKHZhciwgaW1hZ2U9Tm9uZSk6CisgICAgIiIiCisgICAgUHJvdmlkZSBvbGQgZ2V0X2JpdGJha2VfdmFyIEFQSSBieSB3cmFwcGluZworICAgIGdldF92YXIgbWV0aG9kIG9mIEJCX1ZBUlMgc2luZ2xldG9uLgorICAgICIiIgorICAgIHJldHVybiBCQl9WQVJTLmdldF92YXIodmFyLCBpbWFnZSkKKworZGVmIHBhcnNlX3NvdXJjZXBhcmFtcyhzb3VyY2VwYXJhbXMpOgorICAgICIiIgorICAgIFNwbGl0IHNvdXJjZXBhcmFtcyBzdHJpbmcgb2YgdGhlIGZvcm0ga2V5MT12YWwxWyxrZXkyPXZhbDIsLi4uXQorICAgIGludG8gYSBkaWN0LiAgQWxzbyBhY2NlcHRzIHZhbHVlbGVzcyBrZXlzIGkuZS4gd2l0aG91dCA9LgorCisgICAgUmV0dXJucyBkaWN0IG9mIHBhcmFtIGtleS92YWwgcGFpcnMgKG5vdGUgdGhhdCB2YWwgbWF5IGJlIE5vbmUpLgorICAgICIiIgorICAgIHBhcmFtc19kaWN0ID0ge30KKworICAgIHBhcmFtcyA9IHNvdXJjZXBhcmFtcy5zcGxpdCgnLCcpCisgICAgaWYgcGFyYW1zOgorICAgICAgICBmb3IgcGFyIGluIHBhcmFtczoKKyAgICAgICAgICAgIGlmIG5vdCBwYXI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG5vdCAnPScgaW4gcGFyOgorICAgICAgICAgICAgICAgIGtleSA9IHBhcgorICAgICAgICAgICAgICAgIHZhbCA9IE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAga2V5LCB2YWwgPSBwYXIuc3BsaXQoJz0nKQorICAgICAgICAgICAgcGFyYW1zX2RpY3Rba2V5XSA9IHZhbAorCisgICAgcmV0dXJuIHBhcmFtc19kaWN0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9wYXJ0aXRpb25lZGZzLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvcGFydGl0aW9uZWRmcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTEwM2JiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvcGFydGl0aW9uZWRmcy5weQpAQCAtMCwwICsxLDM2MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIC10dAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAsIDIwMTEgSW50ZWwsIEluYy4KKyMgQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IFJlZCBIYXQsIEluYy4KKyMgQ29weXJpZ2h0IChjKSAyMDA4IERhbmllbCBQLiBCZXJyYW5nZQorIyBDb3B5cmlnaHQgKGMpIDIwMDggRGF2aWQgUC4gSHVmZgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworaW1wb3J0IG9zCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIKK2Zyb20gd2ljLnV0aWxzLmVycm9ycyBpbXBvcnQgSW1hZ2VFcnJvcgorZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZXhlY19jbWQsIGV4ZWNfbmF0aXZlX2NtZAorCisjIE92ZXJoZWFkIG9mIHRoZSBNQlIgcGFydGl0aW9uaW5nIHNjaGVtZSAoanVzdCBvbmUgc2VjdG9yKQorTUJSX09WRVJIRUFEID0gMQorCisjIE92ZXJoZWFkIG9mIHRoZSBHUFQgcGFydGl0aW9uaW5nIHNjaGVtZQorR1BUX09WRVJIRUFEID0gMzQKKworIyBTaXplIG9mIGEgc2VjdG9yIGluIGJ5dGVzCitTRUNUT1JfU0laRSA9IDUxMgorCitjbGFzcyBJbWFnZShvYmplY3QpOgorICAgICIiIgorICAgIEdlbmVyaWMgYmFzZSBvYmplY3QgZm9yIGFuIGltYWdlLgorCisgICAgQW4gSW1hZ2UgaXMgYSBjb250YWluZXIgZm9yIGEgc2V0IG9mIERpc2tJbWFnZXMgYW5kIGFzc29jaWF0ZWQKKyAgICBwYXJ0aXRpb25zLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYXRpdmVfc3lzcm9vdD1Ob25lKToKKyAgICAgICAgc2VsZi5kaXNrcyA9IHt9CisgICAgICAgIHNlbGYucGFydGl0aW9ucyA9IFtdCisgICAgICAgICMgU2l6ZSBvZiBhIHNlY3RvciB1c2VkIGluIGNhbGN1bGF0aW9ucworICAgICAgICBzZWxmLnNlY3Rvcl9zaXplID0gU0VDVE9SX1NJWkUKKyAgICAgICAgc2VsZi5fcGFydGl0aW9uc19sYXllZF9vdXQgPSBGYWxzZQorICAgICAgICBzZWxmLm5hdGl2ZV9zeXNyb290ID0gbmF0aXZlX3N5c3Jvb3QKKworICAgIGRlZiBfX2FkZF9kaXNrKHNlbGYsIGRpc2tfbmFtZSk6CisgICAgICAgICIiIiBBZGQgYSBkaXNrICdkaXNrX25hbWUnIHRvIHRoZSBpbnRlcm5hbCBsaXN0IG9mIGRpc2tzLiBOb3RlLAorICAgICAgICAnZGlza19uYW1lJyBpcyB0aGUgbmFtZSBvZiB0aGUgZGlzayBpbiB0aGUgdGFyZ2V0IHN5c3RlbQorICAgICAgICAoZS5nLiwgc2RiKS4gIiIiCisKKyAgICAgICAgaWYgZGlza19uYW1lIGluIHNlbGYuZGlza3M6CisgICAgICAgICAgICAjIFdlIGFscmVhZHkgaGF2ZSB0aGlzIGRpc2sKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fcGFydGl0aW9uc19sYXllZF9vdXQKKworICAgICAgICBzZWxmLmRpc2tzW2Rpc2tfbmFtZV0gPSBcCisgICAgICAgICAgICAgICAgeydkaXNrJzogTm9uZSwgICAgICMgRGlzayBvYmplY3QKKyAgICAgICAgICAgICAgICAgJ251bXBhcnQnOiAwLCAgICAgIyBOdW1iZXIgb2YgYWxsb2NhdGUgcGFydGl0aW9ucworICAgICAgICAgICAgICAgICAncmVhbHBhcnQnOiAwLCAgICAjIE51bWJlciBvZiBwYXJ0aXRpb25zIGluIHRoZSBwYXJ0aXRpb24gdGFibGUKKyAgICAgICAgICAgICAgICAgJ3BhcnRpdGlvbnMnOiBbXSwgIyBJbmRleGVzIHRvIHNlbGYucGFydGl0aW9ucworICAgICAgICAgICAgICAgICAnb2Zmc2V0JzogMCwgICAgICAjIE9mZnNldCBvZiBuZXh0IHBhcnRpdGlvbiAoaW4gc2VjdG9ycykKKyAgICAgICAgICAgICAgICAgIyBNaW5pbXVtIHJlcXVpcmVkIGRpc2sgc2l6ZSB0byBmaXQgYWxsIHBhcnRpdGlvbnMgKGluIGJ5dGVzKQorICAgICAgICAgICAgICAgICAnbWluX3NpemUnOiAwLAorICAgICAgICAgICAgICAgICAncHRhYmxlX2Zvcm1hdCc6ICJtc2RvcyJ9ICMgUGFydGl0aW9uIHRhYmxlIGZvcm1hdAorCisgICAgZGVmIGFkZF9kaXNrKHNlbGYsIGRpc2tfbmFtZSwgZGlza19vYmopOgorICAgICAgICAiIiIgQWRkIGEgZGlzayBvYmplY3Qgd2hpY2ggaGF2ZSB0byBiZSBwYXJ0aXRpb25lZC4gTW9yZSB0aGFuIG9uZSBkaXNrCisgICAgICAgIGNhbiBiZSBhZGRlZC4gSW4gY2FzZSBvZiBtdWx0aXBsZSBkaXNrcywgZGlzayBwYXJ0aXRpb25zIGhhdmUgdG8gYmUKKyAgICAgICAgYWRkZWQgZm9yIGVhY2ggZGlzayBzZXBhcmF0ZWx5IHdpdGggJ2FkZF9wYXJ0aXRpb24oKSIuICIiIgorCisgICAgICAgIHNlbGYuX19hZGRfZGlzayhkaXNrX25hbWUpCisgICAgICAgIHNlbGYuZGlza3NbZGlza19uYW1lXVsnZGlzayddID0gZGlza19vYmoKKworICAgIGRlZiBfX2FkZF9wYXJ0aXRpb24oc2VsZiwgcGFydCk6CisgICAgICAgICIiIiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciAnYWRkX3BhcnRpdGlvbigpJyB3aGljaCBhZGRzIGEKKyAgICAgICAgcGFydGl0aW9uIHRvIHRoZSBpbnRlcm5hbCBsaXN0IG9mIHBhcnRpdGlvbnMuICIiIgorCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fcGFydGl0aW9uc19sYXllZF9vdXQKKworICAgICAgICBzZWxmLnBhcnRpdGlvbnMuYXBwZW5kKHBhcnQpCisgICAgICAgIHNlbGYuX19hZGRfZGlzayhwYXJ0WydkaXNrX25hbWUnXSkKKworICAgIGRlZiBhZGRfcGFydGl0aW9uKHNlbGYsIHNpemUsIGRpc2tfbmFtZSwgbW91bnRwb2ludCwgc291cmNlX2ZpbGU9Tm9uZSwgZnN0eXBlPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9Tm9uZSwgZnNvcHRzPU5vbmUsIGJvb3Q9RmFsc2UsIGFsaWduPU5vbmUsIG5vX3RhYmxlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIHBhcnRfdHlwZT1Ob25lLCB1dWlkPU5vbmUpOgorICAgICAgICAiIiIgQWRkIHRoZSBuZXh0IHBhcnRpdGlvbi4gUHJ0aXRpb25zIGhhdmUgdG8gYmUgYWRkZWQgaW4gdGhlCisgICAgICAgIGZpcnN0LXRvLWxhc3Qgb3JkZXIuICIiIgorCisgICAgICAgIGtzX3BudW0gPSBsZW4oc2VsZi5wYXJ0aXRpb25zKQorCisgICAgICAgICMgQ29udmVydGluZyBrQiB0byBzZWN0b3JzIGZvciBwYXJ0ZWQKKyAgICAgICAgc2l6ZSA9IHNpemUgKiAxMDI0IC8gc2VsZi5zZWN0b3Jfc2l6ZQorCisgICAgICAgICMgV2Ugc3RpbGwgbmVlZCBwYXJ0aXRpb24gZm9yICIvIiBvciBub24tc3Vidm9sdW1lCisgICAgICAgIGlmIG1vdW50cG9pbnQgPT0gIi8iIG9yIG5vdCBmc29wdHM6CisgICAgICAgICAgICBwYXJ0ID0geydrc19wbnVtJzoga3NfcG51bSwgIyBQYXJ0aXRpb24gbnVtYmVyIGluIHRoZSBLUyBmaWxlCisgICAgICAgICAgICAgICAgICAgICdzaXplJzogc2l6ZSwgIyBJbiBzZWN0b3JzCisgICAgICAgICAgICAgICAgICAgICdtb3VudHBvaW50JzogbW91bnRwb2ludCwgIyBNb3VudCByZWxhdGl2ZSB0byBjaHJvb3QKKyAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZV9maWxlJzogc291cmNlX2ZpbGUsICMgcGFydGl0aW9uIGNvbnRlbnRzCisgICAgICAgICAgICAgICAgICAgICdmc3R5cGUnOiBmc3R5cGUsICMgRmlsZXN5c3RlbSB0eXBlCisgICAgICAgICAgICAgICAgICAgICdmc29wdHMnOiBmc29wdHMsICMgRmlsZXN5c3RlbSBtb3VudCBvcHRpb25zCisgICAgICAgICAgICAgICAgICAgICdsYWJlbCc6IGxhYmVsLCAjIFBhcnRpdGlvbiBsYWJlbAorICAgICAgICAgICAgICAgICAgICAnZGlza19uYW1lJzogZGlza19uYW1lLCAjIHBoeXNpY2FsIGRpc2sgbmFtZSBob2xkaW5nIHBhcnRpdGlvbgorICAgICAgICAgICAgICAgICAgICAnZGV2aWNlJzogTm9uZSwgIyBrcGFydHggZGV2aWNlIG5vZGUgZm9yIHBhcnRpdGlvbgorICAgICAgICAgICAgICAgICAgICAnbnVtJzogTm9uZSwgIyBQYXJ0aXRpb24gbnVtYmVyCisgICAgICAgICAgICAgICAgICAgICdib290JzogYm9vdCwgIyBCb290YWJsZSBmbGFnCisgICAgICAgICAgICAgICAgICAgICdhbGlnbic6IGFsaWduLCAjIFBhcnRpdGlvbiBhbGlnbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgJ25vX3RhYmxlJyA6IG5vX3RhYmxlLCAjIFBhcnRpdGlvbiBkb2VzIG5vdCBhcHBlYXIgaW4gcGFydGl0aW9uIHRhYmxlCisgICAgICAgICAgICAgICAgICAgICdwYXJ0X3R5cGUnIDogcGFydF90eXBlLCAjIFBhcnRpdGlvbiB0eXBlCisgICAgICAgICAgICAgICAgICAgICd1dWlkJzogdXVpZH0gIyBQYXJ0aXRpb24gVVVJRAorCisgICAgICAgICAgICBzZWxmLl9fYWRkX3BhcnRpdGlvbihwYXJ0KQorCisgICAgZGVmIGxheW91dF9wYXJ0aXRpb25zKHNlbGYsIHB0YWJsZV9mb3JtYXQ9Im1zZG9zIik6CisgICAgICAgICIiIiBMYXlvdXQgdGhlIHBhcnRpdGlvbnMsIG1lYW5pbmcgY2FsY3VsYXRlIHRoZSBwb3NpdGlvbiBvZiBldmVyeQorICAgICAgICBwYXJ0aXRpb24gb24gdGhlIGRpc2suIFRoZSAncHRhYmxlX2Zvcm1hdCcgcGFyYW1ldGVyIGRlZmluZXMgdGhlCisgICAgICAgIHBhcnRpdGlvbiB0YWJsZSBmb3JtYXQgYW5kIG1heSBiZSAibXNkb3MiLiAiIiIKKworICAgICAgICBtc2dlci5kZWJ1ZygiQXNzaWduaW5nICVzIHBhcnRpdGlvbnMgdG8gZGlza3MiICUgcHRhYmxlX2Zvcm1hdCkKKworICAgICAgICBpZiBzZWxmLl9wYXJ0aXRpb25zX2xheWVkX291dDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX3BhcnRpdGlvbnNfbGF5ZWRfb3V0ID0gVHJ1ZQorCisgICAgICAgICMgR28gdGhyb3VnaCBwYXJ0aXRpb25zIGluIHRoZSBvcmRlciB0aGV5IGFyZSBhZGRlZCBpbiAua3MgZmlsZQorICAgICAgICBmb3IgbnVtIGluIHJhbmdlKGxlbihzZWxmLnBhcnRpdGlvbnMpKToKKyAgICAgICAgICAgIHBhcnQgPSBzZWxmLnBhcnRpdGlvbnNbbnVtXQorCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5kaXNrcy5oYXNfa2V5KHBhcnRbJ2Rpc2tfbmFtZSddKToKKyAgICAgICAgICAgICAgICByYWlzZSBJbWFnZUVycm9yKCJObyBkaXNrICVzIGZvciBwYXJ0aXRpb24gJXMiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBhcnRbJ2Rpc2tfbmFtZSddLCBwYXJ0Wydtb3VudHBvaW50J10pKQorCisgICAgICAgICAgICBpZiBwdGFibGVfZm9ybWF0ID09ICdtc2RvcycgYW5kIHBhcnRbJ3BhcnRfdHlwZSddOgorICAgICAgICAgICAgICAgICMgVGhlIC0tcGFydC10eXBlIGNhbiBhbHNvIGJlIGltcGxlbWVudGVkIGZvciBNQlIgcGFydGl0aW9ucywKKyAgICAgICAgICAgICAgICAjIGluIHdoaWNoIGNhc2UgaXQgd291bGQgbWFwIHRvIHRoZSAxLWJ5dGUgInBhcnRpdGlvbiB0eXBlIgorICAgICAgICAgICAgICAgICMgZmlsZWQgYXQgb2Zmc2V0IDMgb2YgdGhlIHBhcnRpdGlvbiBlbnRyeS4KKyAgICAgICAgICAgICAgICByYWlzZSBJbWFnZUVycm9yKCJzZXR0aW5nIGN1c3RvbSBwYXJ0aXRpb24gdHlwZSBpcyBub3QgIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wbGVtZW50ZWQgZm9yIG1zZG9zIHBhcnRpdGlvbnMiKQorCisgICAgICAgICAgICAjIEdldCB0aGUgZGlzayB3aGVyZSB0aGUgcGFydGl0aW9uIGlzIGxvY2F0ZWQKKyAgICAgICAgICAgIGRpc2sgPSBzZWxmLmRpc2tzW3BhcnRbJ2Rpc2tfbmFtZSddXQorICAgICAgICAgICAgZGlza1snbnVtcGFydCddICs9IDEKKyAgICAgICAgICAgIGlmIG5vdCBwYXJ0Wydub190YWJsZSddOgorICAgICAgICAgICAgICAgIGRpc2tbJ3JlYWxwYXJ0J10gKz0gMQorICAgICAgICAgICAgZGlza1sncHRhYmxlX2Zvcm1hdCddID0gcHRhYmxlX2Zvcm1hdAorCisgICAgICAgICAgICBpZiBkaXNrWydudW1wYXJ0J10gPT0gMToKKyAgICAgICAgICAgICAgICBpZiBwdGFibGVfZm9ybWF0ID09ICJtc2RvcyI6CisgICAgICAgICAgICAgICAgICAgIG92ZXJoZWFkID0gTUJSX09WRVJIRUFECisgICAgICAgICAgICAgICAgZWxpZiBwdGFibGVfZm9ybWF0ID09ICJncHQiOgorICAgICAgICAgICAgICAgICAgICBvdmVyaGVhZCA9IEdQVF9PVkVSSEVBRAorCisgICAgICAgICAgICAgICAgIyBTa2lwIG9uZSBzZWN0b3IgcmVxdWlyZWQgZm9yIHRoZSBwYXJ0aXRpb25pbmcgc2NoZW1lIG92ZXJoZWFkCisgICAgICAgICAgICAgICAgZGlza1snb2Zmc2V0J10gKz0gb3ZlcmhlYWQKKworICAgICAgICAgICAgaWYgZGlza1sncmVhbHBhcnQnXSA+IDM6CisgICAgICAgICAgICAgICAgIyBSZXNlcnZlIGEgc2VjdG9yIGZvciBFQlIgZm9yIGV2ZXJ5IGxvZ2ljYWwgcGFydGl0aW9uCisgICAgICAgICAgICAgICAgIyBiZWZvcmUgYWxpZ25tZW50IGlzIHBlcmZvcm1lZC4KKyAgICAgICAgICAgICAgICBpZiBwdGFibGVfZm9ybWF0ID09ICJtc2RvcyI6CisgICAgICAgICAgICAgICAgICAgIGRpc2tbJ29mZnNldCddICs9IDEKKworCisgICAgICAgICAgICBpZiBwYXJ0WydhbGlnbiddOgorICAgICAgICAgICAgICAgICMgSWYgbm90IGZpcnN0IHBhcnRpdGlvbiBhbmQgd2UgZG8gaGF2ZSBhbGlnbm1lbnQgc2V0IHdlIG5lZWQKKyAgICAgICAgICAgICAgICAjIHRvIGFsaWduIHRoZSBwYXJ0aXRpb24uCisgICAgICAgICAgICAgICAgIyBGSVhNRTogVGhpcyBsZWF2ZXMgYSBlbXB0eSBzcGFjZXMgdG8gdGhlIGRpc2suIFRvIGZpbGwgdGhlCisgICAgICAgICAgICAgICAgIyBnYXBzIHdlIGNvdWxkIGVubGFyZ2VhIHRoZSBwcmV2aW91cyBwYXJ0aXRpb24/CisKKyAgICAgICAgICAgICAgICAjIENhbGMgaG93IG11Y2ggdGhlIGFsaWdubWVudCBpcyBvZmYuCisgICAgICAgICAgICAgICAgYWxpZ25fc2VjdG9ycyA9IGRpc2tbJ29mZnNldCddICUgKHBhcnRbJ2FsaWduJ10gKiAxMDI0IC8gc2VsZi5zZWN0b3Jfc2l6ZSkKKworICAgICAgICAgICAgICAgIGlmIGFsaWduX3NlY3RvcnM6CisgICAgICAgICAgICAgICAgICAgICMgSWYgcGFydGl0aW9uIGlzIG5vdCBhbGlnbmVkIGFzIHJlcXVpcmVkLCB3ZSBuZWVkCisgICAgICAgICAgICAgICAgICAgICMgdG8gbW92ZSBmb3J3YXJkIHRvIHRoZSBuZXh0IGFsaWdubWVudCBwb2ludAorICAgICAgICAgICAgICAgICAgICBhbGlnbl9zZWN0b3JzID0gKHBhcnRbJ2FsaWduJ10gKiAxMDI0IC8gc2VsZi5zZWN0b3Jfc2l6ZSkgLSBhbGlnbl9zZWN0b3JzCisKKyAgICAgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoIlJlYWxpZ25tZW50IGZvciAlcyVzIHdpdGggJXMgc2VjdG9ycywgb3JpZ2luYWwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgb2Zmc2V0ICVzLCB0YXJnZXQgYWxpZ25tZW50IGlzICVzSy4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnRbJ2Rpc2tfbmFtZSddLCBkaXNrWydudW1wYXJ0J10sIGFsaWduX3NlY3RvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrWydvZmZzZXQnXSwgcGFydFsnYWxpZ24nXSkpCisKKyAgICAgICAgICAgICAgICAgICAgIyBpbmNyZWFzZSB0aGUgb2Zmc2V0IHNvIHdlIGFjdHVhbGx5IHN0YXJ0IHRoZSBwYXJ0aXRpb24gb24gcmlnaHQgYWxpZ25tZW50CisgICAgICAgICAgICAgICAgICAgIGRpc2tbJ29mZnNldCddICs9IGFsaWduX3NlY3RvcnMKKworICAgICAgICAgICAgcGFydFsnc3RhcnQnXSA9IGRpc2tbJ29mZnNldCddCisgICAgICAgICAgICBkaXNrWydvZmZzZXQnXSArPSBwYXJ0WydzaXplJ10KKworICAgICAgICAgICAgcGFydFsndHlwZSddID0gJ3ByaW1hcnknCisgICAgICAgICAgICBpZiBub3QgcGFydFsnbm9fdGFibGUnXToKKyAgICAgICAgICAgICAgICBwYXJ0WydudW0nXSA9IGRpc2tbJ3JlYWxwYXJ0J10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFydFsnbnVtJ10gPSAwCisKKyAgICAgICAgICAgIGlmIGRpc2tbJ3B0YWJsZV9mb3JtYXQnXSA9PSAibXNkb3MiOgorICAgICAgICAgICAgICAgIGlmIGRpc2tbJ3JlYWxwYXJ0J10gPiAzOgorICAgICAgICAgICAgICAgICAgICBwYXJ0Wyd0eXBlJ10gPSAnbG9naWNhbCcKKyAgICAgICAgICAgICAgICAgICAgcGFydFsnbnVtJ10gPSBkaXNrWydyZWFscGFydCddICsgMQorCisgICAgICAgICAgICBkaXNrWydwYXJ0aXRpb25zJ10uYXBwZW5kKG51bSkKKyAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJBc3NpZ25lZCAlcyB0byAlcyVkLCBzZWN0b3JzIHJhbmdlICVkLSVkIHNpemUgJWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgInNlY3RvcnMgKCVkIGJ5dGVzKS4iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwYXJ0Wydtb3VudHBvaW50J10sIHBhcnRbJ2Rpc2tfbmFtZSddLCBwYXJ0WydudW0nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0WydzdGFydCddLCBwYXJ0WydzdGFydCddICsgcGFydFsnc2l6ZSddIC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0WydzaXplJ10sIHBhcnRbJ3NpemUnXSAqIHNlbGYuc2VjdG9yX3NpemUpKQorCisgICAgICAgICMgT25jZSBhbGwgdGhlIHBhcnRpdGlvbnMgaGF2ZSBiZWVuIGxheWVkIG91dCwgd2UgY2FuIGNhbGN1bGF0ZSB0aGUKKyAgICAgICAgIyBtaW51bWltIGRpc2sgc2l6ZXMuCisgICAgICAgIGZvciBkaXNrIGluIHNlbGYuZGlza3MudmFsdWVzKCk6CisgICAgICAgICAgICBkaXNrWydtaW5fc2l6ZSddID0gZGlza1snb2Zmc2V0J10KKyAgICAgICAgICAgIGlmIGRpc2tbJ3B0YWJsZV9mb3JtYXQnXSA9PSAiZ3B0IjoKKyAgICAgICAgICAgICAgICBkaXNrWydtaW5fc2l6ZSddICs9IEdQVF9PVkVSSEVBRAorCisgICAgICAgICAgICBkaXNrWydtaW5fc2l6ZSddICo9IHNlbGYuc2VjdG9yX3NpemUKKworICAgIGRlZiBfX2NyZWF0ZV9wYXJ0aXRpb24oc2VsZiwgZGV2aWNlLCBwYXJ0dHlwZSwgZnN0eXBlLCBzdGFydCwgc2l6ZSk6CisgICAgICAgICIiIiBDcmVhdGUgYSBwYXJ0aXRpb24gb24gYW4gaW1hZ2UgZGVzY3JpYmVkIGJ5IHRoZSAnZGV2aWNlJyBvYmplY3QuICIiIgorCisgICAgICAgICMgU3RhcnQgaXMgaW5jbHVkZWQgdG8gdGhlIHNpemUgc28gd2UgbmVlZCB0byBzdWJzdHJhY3Qgb25lIGZyb20gdGhlIGVuZC4KKyAgICAgICAgZW5kID0gc3RhcnQgKyBzaXplIC0gMQorICAgICAgICBtc2dlci5kZWJ1ZygiQWRkZWQgJyVzJyBwYXJ0aXRpb24sIHNlY3RvcnMgJWQtJWQsIHNpemUgJWQgc2VjdG9ycyIgJQorICAgICAgICAgICAgICAgICAgICAocGFydHR5cGUsIHN0YXJ0LCBlbmQsIHNpemUpKQorCisgICAgICAgIGNtZCA9ICJwYXJ0ZWQgLXMgJXMgdW5pdCBzIG1rcGFydCAlcyIgJSAoZGV2aWNlLCBwYXJ0dHlwZSkKKyAgICAgICAgaWYgZnN0eXBlOgorICAgICAgICAgICAgY21kICs9ICIgJXMiICUgZnN0eXBlCisgICAgICAgIGNtZCArPSAiICVkICVkIiAlIChzdGFydCwgZW5kKQorCisgICAgICAgIHJldHVybiBleGVjX25hdGl2ZV9jbWQoY21kLCBzZWxmLm5hdGl2ZV9zeXNyb290KQorCisgICAgZGVmIF9fZm9ybWF0X2Rpc2tzKHNlbGYpOgorICAgICAgICBzZWxmLmxheW91dF9wYXJ0aXRpb25zKCkKKworICAgICAgICBmb3IgZGV2IGluIHNlbGYuZGlza3Mua2V5cygpOgorICAgICAgICAgICAgZGlzayA9IHNlbGYuZGlza3NbZGV2XQorICAgICAgICAgICAgbXNnZXIuZGVidWcoIkluaXRpYWxpemluZyBwYXJ0aXRpb24gdGFibGUgZm9yICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChkaXNrWydkaXNrJ10uZGV2aWNlKSkKKyAgICAgICAgICAgIGV4ZWNfbmF0aXZlX2NtZCgicGFydGVkIC1zICVzIG1rbGFiZWwgJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNrWydkaXNrJ10uZGV2aWNlLCBkaXNrWydwdGFibGVfZm9ybWF0J10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgbXNnZXIuZGVidWcoIkNyZWF0aW5nIHBhcnRpdGlvbnMiKQorCisgICAgICAgIGZvciBwYXJ0IGluIHNlbGYucGFydGl0aW9uczoKKyAgICAgICAgICAgIGlmIHBhcnRbJ251bSddID09IDA6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZGlzayA9IHNlbGYuZGlza3NbcGFydFsnZGlza19uYW1lJ11dCisgICAgICAgICAgICBpZiBkaXNrWydwdGFibGVfZm9ybWF0J10gPT0gIm1zZG9zIiBhbmQgcGFydFsnbnVtJ10gPT0gNToKKyAgICAgICAgICAgICAgICAjIENyZWF0ZSBhbiBleHRlbmRlZCBwYXJ0aXRpb24gKG5vdGU6IGV4dGVuZGVkCisgICAgICAgICAgICAgICAgIyBwYXJ0aXRpb24gaXMgZGVzY3JpYmVkIGluIE1CUiBhbmQgY29udGFpbnMgYWxsCisgICAgICAgICAgICAgICAgIyBsb2dpY2FsIHBhcnRpdGlvbnMpLiBUaGUgbG9naWNhbCBwYXJ0aXRpb25zIHNhdmUgYQorICAgICAgICAgICAgICAgICMgc2VjdG9yIGZvciBhbiBFQlIganVzdCBiZWZvcmUgdGhlIHN0YXJ0IG9mIGEKKyAgICAgICAgICAgICAgICAjIHBhcnRpdGlvbi4gVGhlIGV4dGVuZGVkIHBhcnRpdGlvbiBtdXN0IHN0YXJ0IG9uZQorICAgICAgICAgICAgICAgICMgc2VjdG9yIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IGxvZ2ljYWwKKyAgICAgICAgICAgICAgICAjIHBhcnRpdGlvbi4gVGhpcyB3YXkgdGhlIGZpcnN0IEVCUiBpcyBpbnNpZGUgb2YgdGhlCisgICAgICAgICAgICAgICAgIyBleHRlbmRlZCBwYXJ0aXRpb24uIFNpbmNlIHRoZSBleHRlbmRlZCBwYXJ0aXRpb25zCisgICAgICAgICAgICAgICAgIyBzdGFydHMgYSBzZWN0b3IgYmVmb3JlIHRoZSBmaXJzdCBsb2dpY2FsIHBhcnRpdGlvbiwKKyAgICAgICAgICAgICAgICAjIGFkZCBhIHNlY3RvciBhdCB0aGUgYmFjaywgc28gdGhhdCB0aGVyZSBpcyBlbm91Z2gKKyAgICAgICAgICAgICAgICAjIHJvb20gZm9yIGFsbCBsb2dpY2FsIHBhcnRpdGlvbnMuCisgICAgICAgICAgICAgICAgc2VsZi5fX2NyZWF0ZV9wYXJ0aXRpb24oZGlza1snZGlzayddLmRldmljZSwgImV4dGVuZGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCBwYXJ0WydzdGFydCddIC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrWydvZmZzZXQnXSAtIHBhcnRbJ3N0YXJ0J10gKyAxKQorCisgICAgICAgICAgICBpZiBwYXJ0Wydmc3R5cGUnXSA9PSAic3dhcCI6CisgICAgICAgICAgICAgICAgcGFydGVkX2ZzX3R5cGUgPSAibGludXgtc3dhcCIKKyAgICAgICAgICAgIGVsaWYgcGFydFsnZnN0eXBlJ10gPT0gInZmYXQiOgorICAgICAgICAgICAgICAgIHBhcnRlZF9mc190eXBlID0gImZhdDMyIgorICAgICAgICAgICAgZWxpZiBwYXJ0Wydmc3R5cGUnXSA9PSAibXNkb3MiOgorICAgICAgICAgICAgICAgIHBhcnRlZF9mc190eXBlID0gImZhdDE2IgorICAgICAgICAgICAgZWxpZiBwYXJ0Wydmc3R5cGUnXSA9PSAib250cmFja2RtNmF1eDMiOgorICAgICAgICAgICAgICAgIHBhcnRlZF9mc190eXBlID0gIm9udHJhY2tkbTZhdXgzIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFR5cGUgZm9yIGV4dDIvZXh0My9leHQ0L2J0cmZzCisgICAgICAgICAgICAgICAgcGFydGVkX2ZzX3R5cGUgPSAiZXh0MiIKKworICAgICAgICAgICAgIyBCb290IFJPTSBvZiBPTUFQIGJvYXJkcyByZXF1aXJlIHZmYXQgYm9vdCBwYXJ0aXRpb24gdG8gaGF2ZSBhbgorICAgICAgICAgICAgIyBldmVuIG51bWJlciBvZiBzZWN0b3JzLgorICAgICAgICAgICAgaWYgcGFydFsnbW91bnRwb2ludCddID09ICIvYm9vdCIgYW5kIHBhcnRbJ2ZzdHlwZSddIGluIFsidmZhdCIsICJtc2RvcyJdIFwKKyAgICAgICAgICAgICAgIGFuZCBwYXJ0WydzaXplJ10gJSAyOgorICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJTdWJzdHJhY3Rpbmcgb25lIHNlY3RvciBmcm9tICclcycgcGFydGl0aW9uIHRvICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnZXQgZXZlbiBudW1iZXIgb2Ygc2VjdG9ycyBmb3IgdGhlIHBhcnRpdGlvbiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydFsnbW91bnRwb2ludCddKQorICAgICAgICAgICAgICAgIHBhcnRbJ3NpemUnXSAtPSAxCisKKyAgICAgICAgICAgIHNlbGYuX19jcmVhdGVfcGFydGl0aW9uKGRpc2tbJ2Rpc2snXS5kZXZpY2UsIHBhcnRbJ3R5cGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRlZF9mc190eXBlLCBwYXJ0WydzdGFydCddLCBwYXJ0WydzaXplJ10pCisKKyAgICAgICAgICAgIGlmIHBhcnRbJ3BhcnRfdHlwZSddOgorICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJwYXJ0aXRpb24gJWQ6IHNldCB0eXBlIFVJRCB0byAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnRbJ251bSddLCBwYXJ0WydwYXJ0X3R5cGUnXSkpCisgICAgICAgICAgICAgICAgZXhlY19uYXRpdmVfY21kKCJzZ2Rpc2sgLS10eXBlY29kZT0lZDolcyAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0WydudW0nXSwgcGFydFsncGFydF90eXBlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrWydkaXNrJ10uZGV2aWNlKSwgc2VsZi5uYXRpdmVfc3lzcm9vdCkKKworICAgICAgICAgICAgaWYgcGFydFsndXVpZCddOgorICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJwYXJ0aXRpb24gJWQ6IHNldCBVVUlEIHRvICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFydFsnbnVtJ10sIHBhcnRbJ3V1aWQnXSkpCisgICAgICAgICAgICAgICAgZXhlY19uYXRpdmVfY21kKCJzZ2Rpc2sgLS1wYXJ0aXRpb24tZ3VpZD0lZDolcyAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0WydudW0nXSwgcGFydFsndXVpZCddLCBkaXNrWydkaXNrJ10uZGV2aWNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uYXRpdmVfc3lzcm9vdCkKKworICAgICAgICAgICAgaWYgcGFydFsnYm9vdCddOgorICAgICAgICAgICAgICAgIGZsYWdfbmFtZSA9ICJsZWdhY3lfYm9vdCIgaWYgZGlza1sncHRhYmxlX2Zvcm1hdCddID09ICdncHQnIGVsc2UgImJvb3QiCisgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoIlNldCAnJXMnIGZsYWcgZm9yIHBhcnRpdGlvbiAnJXMnIG9uIGRpc2sgJyVzJyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdfbmFtZSwgcGFydFsnbnVtJ10sIGRpc2tbJ2Rpc2snXS5kZXZpY2UpKQorICAgICAgICAgICAgICAgIGV4ZWNfbmF0aXZlX2NtZCgicGFydGVkIC1zICVzIHNldCAlZCAlcyBvbiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNrWydkaXNrJ10uZGV2aWNlLCBwYXJ0WydudW0nXSwgZmxhZ19uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uYXRpdmVfc3lzcm9vdCkKKworICAgICAgICAgICAgIyBQYXJ0ZWQgZGVmYXVsdHMgdG8gZW5hYmxpbmcgdGhlIGxiYSBmbGFnIGZvciBmYXQxNiBwYXJ0aXRpb25zLAorICAgICAgICAgICAgIyB3aGljaCBjYXVzZXMgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBzb21lIGZpcm13YXJlIChhbmQgcmVhbGx5CisgICAgICAgICAgICAjIGlzbid0IG5lY2Vzc2FyeSkuCisgICAgICAgICAgICBpZiBwYXJ0ZWRfZnNfdHlwZSA9PSAiZmF0MTYiOgorICAgICAgICAgICAgICAgIGlmIGRpc2tbJ3B0YWJsZV9mb3JtYXQnXSA9PSAnbXNkb3MnOgorICAgICAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygiRGlzYWJsZSAnbGJhJyBmbGFnIGZvciBwYXJ0aXRpb24gJyVzJyBvbiBkaXNrICclcyciICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFydFsnbnVtJ10sIGRpc2tbJ2Rpc2snXS5kZXZpY2UpKQorICAgICAgICAgICAgICAgICAgICBleGVjX25hdGl2ZV9jbWQoInBhcnRlZCAtcyAlcyBzZXQgJWQgbGJhIG9mZiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlza1snZGlzayddLmRldmljZSwgcGFydFsnbnVtJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uYXRpdmVfc3lzcm9vdCkKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRpc2tzOgorICAgICAgICAgICAgZm9yIGRldiBpbiBzZWxmLmRpc2tzOgorICAgICAgICAgICAgICAgIGRpc2sgPSBzZWxmLmRpc2tzW2Rldl0KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRpc2tbJ2Rpc2snXS5jbGVhbnVwKCkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBhc3NlbWJsZShzZWxmLCBpbWFnZV9maWxlKToKKyAgICAgICAgbXNnZXIuZGVidWcoIkluc3RhbGxpbmcgcGFydGl0aW9ucyIpCisKKyAgICAgICAgZm9yIHBhcnQgaW4gc2VsZi5wYXJ0aXRpb25zOgorICAgICAgICAgICAgc291cmNlID0gcGFydFsnc291cmNlX2ZpbGUnXQorICAgICAgICAgICAgaWYgc291cmNlOgorICAgICAgICAgICAgICAgICMgaW5zdGFsbCBzb3VyY2VfZmlsZSBjb250ZW50cyBpbnRvIGEgcGFydGl0aW9uCisgICAgICAgICAgICAgICAgY21kID0gImRkIGlmPSVzIG9mPSVzIGJzPSVkIHNlZWs9JWQgY291bnQ9JWQgY29udj1ub3RydW5jIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAoc291cmNlLCBpbWFnZV9maWxlLCBzZWxmLnNlY3Rvcl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICBwYXJ0WydzdGFydCddLCBwYXJ0WydzaXplJ10pCisgICAgICAgICAgICAgICAgZXhlY19jbWQoY21kKQorCisgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoIkluc3RhbGxlZCAlcyBpbiBwYXJ0aXRpb24gJWQsIHNlY3RvcnMgJWQtJWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l6ZSAlZCBzZWN0b3JzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc291cmNlLCBwYXJ0WydudW0nXSwgcGFydFsnc3RhcnQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydFsnc3RhcnQnXSArIHBhcnRbJ3NpemUnXSAtIDEsIHBhcnRbJ3NpemUnXSkpCisKKyAgICAgICAgICAgICAgICBvcy5yZW5hbWUoc291cmNlLCBpbWFnZV9maWxlICsgJy5wJWQnICUgcGFydFsnbnVtJ10pCisKKyAgICBkZWYgY3JlYXRlKHNlbGYpOgorICAgICAgICBmb3IgZGV2IGluIHNlbGYuZGlza3Mua2V5cygpOgorICAgICAgICAgICAgZGlzayA9IHNlbGYuZGlza3NbZGV2XQorICAgICAgICAgICAgZGlza1snZGlzayddLmNyZWF0ZSgpCisKKyAgICAgICAgc2VsZi5fX2Zvcm1hdF9kaXNrcygpCisKKyAgICAgICAgcmV0dXJuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9ydW5uZXIucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9ydW5uZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQzMTkxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3J1bm5lci5weQpAQCAtMCwwICsxLDExMCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIC10dAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSW50ZWwsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisjIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCisKK2RlZiBydW50b29sKGNtZGxuX29yX2FyZ3MsIGNhdGNoPTEpOgorICAgICIiIiB3cmFwcGVyIGZvciBtb3N0IG9mIHRoZSBzdWJwcm9jZXNzIGNhbGxzCisgICAgaW5wdXQ6CisgICAgICAgIGNtZGxuX29yX2FyZ3M6IGNhbiBiZSBib3RoIGFyZ3MgYW5kIGNtZGxuIHN0ciAoc2hlbGw9VHJ1ZSkKKyAgICAgICAgY2F0Y2g6IDAsIHF1aXRlbHkgcnVuCisgICAgICAgICAgICAgICAxLCBvbmx5IFNURE9VVAorICAgICAgICAgICAgICAgMiwgb25seSBTVERFUlIKKyAgICAgICAgICAgICAgIDMsIGJvdGggU1RET1VUIGFuZCBTVERFUlIKKyAgICByZXR1cm46CisgICAgICAgIChyYywgb3V0cHV0KQorICAgICAgICBpZiBjYXRjaD09MDogdGhlIG91dHB1dCB3aWxsIGFsd2F5cyBOb25lCisgICAgIiIiCisKKyAgICBpZiBjYXRjaCBub3QgaW4gKDAsIDEsIDIsIDMpOgorICAgICAgICAjIGludmFsaWQgY2F0Y2ggc2VsZWN0aW9uLCB3aWxsIGNhdXNlIGV4Y2VwdGlvbiwgdGhhdCdzIGdvb2QKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGlmIGlzaW5zdGFuY2UoY21kbG5fb3JfYXJncywgbGlzdCk6CisgICAgICAgIGNtZCA9IGNtZGxuX29yX2FyZ3NbMF0KKyAgICAgICAgc2hlbGwgPSBGYWxzZQorICAgIGVsc2U6CisgICAgICAgIGltcG9ydCBzaGxleAorICAgICAgICBjbWQgPSBzaGxleC5zcGxpdChjbWRsbl9vcl9hcmdzKVswXQorICAgICAgICBzaGVsbCA9IFRydWUKKworICAgIGlmIGNhdGNoICE9IDM6CisgICAgICAgIGRldl9udWxsID0gb3Mub3BlbigiL2Rldi9udWxsIiwgb3MuT19XUk9OTFkpCisKKyAgICBpZiBjYXRjaCA9PSAwOgorICAgICAgICBzb3V0ID0gZGV2X251bGwKKyAgICAgICAgc2VyciA9IGRldl9udWxsCisgICAgZWxpZiBjYXRjaCA9PSAxOgorICAgICAgICBzb3V0ID0gc3VicHJvY2Vzcy5QSVBFCisgICAgICAgIHNlcnIgPSBkZXZfbnVsbAorICAgIGVsaWYgY2F0Y2ggPT0gMjoKKyAgICAgICAgc291dCA9IGRldl9udWxsCisgICAgICAgIHNlcnIgPSBzdWJwcm9jZXNzLlBJUEUKKyAgICBlbGlmIGNhdGNoID09IDM6CisgICAgICAgIHNvdXQgPSBzdWJwcm9jZXNzLlBJUEUKKyAgICAgICAgc2VyciA9IHN1YnByb2Nlc3MuU1RET1VUCisKKyAgICB0cnk6CisgICAgICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZGxuX29yX2FyZ3MsIHN0ZG91dD1zb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c2Vyciwgc2hlbGw9c2hlbGwpCisgICAgICAgIChzb3V0LCBzZXJyKSA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgICAgICAjIGNvbWJpbmUgc3Rkb3V0IGFuZCBzdGRlcnIsIGZpbHRlciBOb25lIG91dAorICAgICAgICBvdXQgPSAnJy5qb2luKGZpbHRlcihOb25lLCBbc291dCwgc2Vycl0pKQorICAgIGV4Y2VwdCBPU0Vycm9yLCBlcnI6CisgICAgICAgIGlmIGVyci5lcnJubyA9PSAyOgorICAgICAgICAgICAgIyBbRXJybm8gMl0gTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICAgICAgICAgICAgbXNnZXIuZXJyb3IoJ0Nhbm5vdCBydW4gY29tbWFuZDogJXMsIGxvc3QgZGVwZW5kZW5jeT8nICUgY21kKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgIyByZWxheQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIGNhdGNoICE9IDM6CisgICAgICAgICAgICBvcy5jbG9zZShkZXZfbnVsbCkKKworICAgIHJldHVybiAocHJvY2Vzcy5yZXR1cm5jb2RlLCBvdXQpCisKK2RlZiBzaG93KGNtZGxuX29yX2FyZ3MpOgorICAgICMgc2hvdyBhbGwgdGhlIG1lc3NhZ2UgdXNpbmcgbXNnZXIudmVyYm9zZQorCisgICAgcmNvZGUsIG91dCA9IHJ1bnRvb2woY21kbG5fb3JfYXJncywgY2F0Y2g9MykKKworICAgIGlmIGlzaW5zdGFuY2UoY21kbG5fb3JfYXJncywgbGlzdCk6CisgICAgICAgIGNtZCA9ICcgJy5qb2luKGNtZGxuX29yX2FyZ3MpCisgICAgZWxzZToKKyAgICAgICAgY21kID0gY21kbG5fb3JfYXJncworCisgICAgbXNnID0gJ3J1bm5pbmcgY29tbWFuZDogIiVzIicgJSBjbWQKKyAgICBpZiBvdXQ6CisgICAgICAgIG91dCA9IG91dC5zdHJpcCgpCisgICAgaWYgb3V0OgorICAgICAgICBtc2cgKz0gJywgd2l0aCBvdXRwdXQ6OicKKyAgICAgICAgbXNnICs9ICdcbiAgKy0tLS0tLS0tLS0tLS0tLS0nCisgICAgICAgIGZvciBsaW5lIGluIG91dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBtc2cgKz0gJ1xuICB8ICVzJyAlIGxpbmUKKyAgICAgICAgbXNnICs9ICdcbiAgKy0tLS0tLS0tLS0tLS0tLS0nCisKKyAgICBtc2dlci52ZXJib3NlKG1zZykKKyAgICByZXR1cm4gcmNvZGUKKworZGVmIG91dHMoY21kbG5fb3JfYXJncywgY2F0Y2g9MSk6CisgICAgIyBnZXQgdGhlIG91dHB1dHMgb2YgdG9vbHMKKyAgICByZXR1cm4gcnVudG9vbChjbWRsbl9vcl9hcmdzLCBjYXRjaClbMV0uc3RyaXAoKQorCitkZWYgcXVpZXQoY21kbG5fb3JfYXJncyk6CisgICAgcmV0dXJuIHJ1bnRvb2woY21kbG5fb3JfYXJncywgY2F0Y2g9MClbMF0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3N5c2xpbnV4LnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvc3lzbGludXgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFjZTI4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3N5c2xpbnV4LnB5CkBAIC0wLDAgKzEsNTggQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorIworIyBBVVRIT1IKKyMgQWRyaWFuIEZyZWlob2ZlciA8YWRyaWFuLmZyZWlob2ZlciAoYXRdIG5lcmF0ZWMuY29tPgorCisKK2ltcG9ydCByZQorZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCisKKworZGVmIHNlcmlhbF9jb25zb2xlX2Zvcm1fa2FyZ3Moa2VybmVsX2FyZ3MpOgorICAgICIiIgorICAgIENyZWF0ZSBTRVJJQUwuLi4gbGluZSBmcm9tIGtlcm5lbCBwYXJhbWV0ZXJzCisKKyAgICBzeXNsaW51eCBuZWVkcyBhIGxpbmUgU0VSSUFMIHBvcnQgW2JhdWRyYXRlIFtmbG93Y29udHJvbF1dCisgICAgaW4gdGhlIHN5c2xpbnV4LmNmZyBmaWxlLiBUaGUgY29uZmlnIGxpbmUgaXMgZ2VuZXJhdGVkIGJhc2VkCisgICAgb24ga2VybmVsIGJvb3QgcGFyYW1ldGVycy4gVGhlIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBmaXJzdAorICAgIHR0eVMgY29uc29sZSBhcmUgY29uc2lkZXJlZCBmb3Igc3lzbGludXggY29uZmlnLgorICAgIEBwYXJhbSBrZXJuZWxfYXJncyBrZXJuZWwgY29tbWFuZCBsaW5lCisgICAgQHJldHVybiBsaW5lIGZvciBzeXNsaW51eCBjb25maWcgZmlsZSBlLmcuICJTRVJJQUwgMCAxMTUyMDAiCisgICAgIiIiCisgICAgc3lzbGludXhfY29uZiA9ICIiCisgICAgZm9yIHBhcmFtIGluIGtlcm5lbF9hcmdzLnNwbGl0KCk6CisgICAgICAgIHBhcmFtX21hdGNoID0gcmUubWF0Y2goImNvbnNvbGU9dHR5UyhbMC05XSspLD8oWzAtOV0qKShbbm9lXT8pKFswLTldPykocj8pIiwgcGFyYW0pCisgICAgICAgIGlmIHBhcmFtX21hdGNoOgorICAgICAgICAgICAgc3lzbGludXhfY29uZiArPSAiU0VSSUFMICIgKyBwYXJhbV9tYXRjaC5ncm91cCgxKQorICAgICAgICAgICAgIyBiYXVkcmF0ZQorICAgICAgICAgICAgaWYgcGFyYW1fbWF0Y2guZ3JvdXAoMik6CisgICAgICAgICAgICAgICAgc3lzbGludXhfY29uZiArPSAiICIgKyBwYXJhbV9tYXRjaC5ncm91cCgyKQorICAgICAgICAgICAgIyBwYXJpdHkKKyAgICAgICAgICAgIGlmIHBhcmFtX21hdGNoLmdyb3VwKDMpIGFuZCBwYXJhbV9tYXRjaC5ncm91cCgzKSAhPSAnbic6CisgICAgICAgICAgICAgICAgbXNnZXIud2FybmluZygic3lzbGludXggZG9lcyBub3Qgc3VwcG9ydCBwYXJpdHkgZm9yIGNvbnNvbGUuIHt9IGlzIGlnbm9yZWQuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChwYXJhbV9tYXRjaC5ncm91cCgzKSkpCisgICAgICAgICAgICAjIG51bWJlciBvZiBiaXRzCisgICAgICAgICAgICBpZiBwYXJhbV9tYXRjaC5ncm91cCg0KSBhbmQgcGFyYW1fbWF0Y2guZ3JvdXAoNCkgIT0gJzgnOgorICAgICAgICAgICAgICAgIG1zZ2VyLndhcm5pbmcoInN5c2xpbnV4IHN1cHBvcnRzIDggYml0IGNvbnNvbGUgY29uZmlndXJhdGlvbiBvbmx5LiB7fSBpcyBpZ25vcmVkLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQocGFyYW1fbWF0Y2guZ3JvdXAoNCkpKQorICAgICAgICAgICAgIyBmbG93IGNvbnRyb2wKKyAgICAgICAgICAgIGlmIHBhcmFtX21hdGNoLmdyb3VwKDUpIGFuZCBwYXJhbV9tYXRjaC5ncm91cCg1KSAhPSAnJzoKKyAgICAgICAgICAgICAgICBtc2dlci53YXJuaW5nKCJzeXNsaW51eCBjb25zb2xlIGZsb3djb250cm9sIGNvbmZpZ3VyYXRpb24uIHt9IGlzIGlnbm9yZWQuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChwYXJhbV9tYXRjaC5ncm91cCg1KSkpCisgICAgICAgICAgICBicmVhaworCisgICAgcmV0dXJuIHN5c2xpbnV4X2NvbmYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9sbnIgYi95b2N0by1wb2t5L3NjcmlwdHMvbG5yCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlkYWNlYmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbG5yCkBAIC0wLDAgKzEsMjEgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKworIyBDcmVhdGUgYSAqcmVsYXRpdmUqIHN5bWxpbmssIGp1c3QgbGlrZSBsbiAtLXJlbGF0aXZlIGRvZXMgYnV0IHdpdGhvdXQgbmVlZGluZworIyBjb3JldXRpbHMgOC4xNi4KKworaW1wb3J0IHN5cywgb3MKKworaWYgbGVuKHN5cy5hcmd2KSAhPSAzOgorICAgcHJpbnQgIiQgbG5yIFRBUkdFVCBMSU5LX05BTUUiCisgICBzeXMuZXhpdCgxKQorCit0YXJnZXQgPSBzeXMuYXJndlsxXQorbGlua25hbWUgPSBzeXMuYXJndlsyXQorCitpZiBvcy5wYXRoLmlzYWJzKHRhcmdldCk6CisgICBpZiBub3Qgb3MucGF0aC5pc2FicyhsaW5rbmFtZSk6CisgICAgICBsaW5rbmFtZSA9IG9zLnBhdGguYWJzcGF0aChsaW5rbmFtZSkKKyAgIHN0YXJ0ID0gb3MucGF0aC5kaXJuYW1lKGxpbmtuYW1lKQorICAgdGFyZ2V0ID0gb3MucGF0aC5yZWxwYXRoKHRhcmdldCwgc3RhcnQpCisKK29zLnN5bWxpbmsodGFyZ2V0LCBsaW5rbmFtZSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9tdWx0aWxpYl9oZWFkZXJfd3JhcHBlci5oIGIveW9jdG8tcG9reS9zY3JpcHRzL211bHRpbGliX2hlYWRlcl93cmFwcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE4NzU0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9tdWx0aWxpYl9oZWFkZXJfd3JhcHBlci5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMSBieSBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKiAKKyAqLworCisjaW5jbHVkZSA8Yml0cy93b3Jkc2l6ZS5oPgorCisjaWZkZWYgX19XT1JEU0laRQorCisjaWYgX19XT1JEU0laRSA9PSAzMgorCisjaWZkZWYgX01JUFNfU0lNCisKKyNpZiBfTUlQU19TSU0gPT0gX0FCSU8zMgorI2luY2x1ZGUgPEVOVEVSX0hFQURFUl9GSUxFTkFNRV9IRVJFLTMyLmg+CisjZWxpZiBfTUlQU19TSU0gPT0gX0FCSU4zMgorI2luY2x1ZGUgPEVOVEVSX0hFQURFUl9GSUxFTkFNRV9IRVJFLW4zMi5oPgorI2Vsc2UKKyNlcnJvciAiVW5rbm93biBfTUlQU19TSU0iCisjZW5kaWYKKworI2Vsc2UgLyogX01JUFNfU0lNIGlzIG5vdCBkZWZpbmVkICovCisjaW5jbHVkZSA8RU5URVJfSEVBREVSX0ZJTEVOQU1FX0hFUkUtMzIuaD4KKyNlbmRpZgorCisjZWxpZiBfX1dPUkRTSVpFID09IDY0CisjaW5jbHVkZSA8RU5URVJfSEVBREVSX0ZJTEVOQU1FX0hFUkUtNjQuaD4KKyNlbHNlCisjZXJyb3IgIlVua25vd24gX19XT1JEU0laRSBkZXRlY3RlZCIKKyNlbmRpZiAvKiBtYXRjaGVzICNpZiBfX1dPUkRTSVpFID09IDMyICovCisKKyNlbHNlIC8qIF9fV09SRFNJWkUgaXMgbm90IGRlZmluZWQgKi8KKworI2Vycm9yICJfX1dPUkRTSVpFIGlzIG5vdCBkZWZpbmVkIgorCisjZW5kaWYKKyAgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbmF0aXZlLWludGVyY2VwdC9jaG93biBiL3lvY3RvLXBva3kvc2NyaXB0cy9uYXRpdmUtaW50ZXJjZXB0L2Nob3duCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRmNDMyNzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbmF0aXZlLWludGVyY2VwdC9jaG93bgpAQCAtMCwwICsxLDIgQEAKKyMhIC9iaW4vc2gKK2VjaG8gIkludGVyY2VwdCAkMDogJEAgLS0gZG8gbm90aGluZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1idWlsZGVudi1pbnRlcm5hbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1idWlsZGVudi1pbnRlcm5hbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZWQyNzIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL29lLWJ1aWxkZW52LWludGVybmFsCkBAIC0wLDAgKzEsMTA5IEBACisjIS9iaW4vc2gKKworIyBPRS1Db3JlIEJ1aWxkIEVudmlyb25tZW50IFNldHVwIFNjcmlwdAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMSBMaW51eCBGb3VuZGF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworIyBJdCBpcyBhc3N1bWVkIE9FUk9PVCBpcyBhbHJlYWR5IGRlZmluZWQgd2hlbiB0aGlzIGlzIGNhbGxlZAoraWYgWyAteiAiJE9FUk9PVCIgXTsgdGhlbgorICAgIGVjaG8gPiYyICJFcnJvcjogT0VST09UIGlzIG5vdCBkZWZpbmVkISIKKyAgICByZXR1cm4gMQorZmkKKworaWYgWyAteiAiJE9FX1NLSVBfU0RLX0NIRUNLIiAtYSAhIC16ICIkT0VDT1JFX1NES19WRVJTSU9OIiBdOyB0aGVuCisgICAgZWNobyA+JjIgIkVycm9yOiBUaGUgT0UgU0RLL0FEVCB3YXMgZGV0ZWN0ZWQgYXMgYWxyZWFkeSBiZWluZyBwcmVzZW50IGluIHRoaXMgc2hlbGwgZW52aXJvbm1lbnQuIFBsZWFzZSB1c2UgYSBjbGVhbiBzaGVsbCB3aGVuIHNvdXJjaW5nIHRoaXMgZW52aXJvbm1lbnQgc2NyaXB0LiIKKyAgICByZXR1cm4gMQorZmkKKworIyBNYWtlIHN1cmUgd2UncmUgbm90IHVzaW5nIHB5dGhvbiB2My54LiBUaGlzIGNoZWNrIGNhbid0IGdvIGludG8KKyMgc2FuaXR5LmJiY2xhc3MgYmVjYXVzZSBiaXRiYWtlJ3Mgc291cmNlIGNvZGUgZG9lc24ndCBldmVuIHBhc3MKKyMgcGFyc2luZyBzdGFnZSB3aGVuIHVzZWQgd2l0aCBweXRob24gdjMsIHNvIHdlIGNhdGNoIGl0IGhlcmUgc28gd2UKKyMgY2FuIG9mZmVyIGEgbWVhbmluZ2Z1bCBlcnJvciBtZXNzYWdlLgorcHlfdjNfY2hlY2s9YC91c3IvYmluL2VudiBweXRob24gLS12ZXJzaW9uIDI+JjEgfCBncmVwICJQeXRob24gMyJgCitpZiBbICIkcHlfdjNfY2hlY2siICE9ICIiIF07IHRoZW4KKwllY2hvID4mMiAiQml0YmFrZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHB5dGhvbiB2MyIKKwllY2hvID4mMiAiUGxlYXNlIHNldCB1cCBweXRob24gdjIgYXMgeW91ciBkZWZhdWx0IHB5dGhvbiBpbnRlcnByZXRlciIKKwlyZXR1cm4gMQorZmkKKworIyBTaW1pbGFybHksIHdlIG5vdyBoYXZlIGNvZGUgdGhhdCBkb2Vzbid0IHBhcnNlIGNvcnJlY3RseSB3aXRoIG9sZGVyCisjIHZlcnNpb25zIG9mIFB5dGhvbiwgYW5kIHJhdGhlciB0aGFuIGZpeGluZyB0aGF0IGFuZCBiZWluZyBldGVybmFsbHkKKyMgdmlnaWxhbnQgZm9yIGFueSBvdGhlciBuZXcgZmVhdHVyZSB1c2UsIGp1c3QgY2hlY2sgdGhlIHZlcnNpb24gaGVyZS4KK3B5X3YyNl9jaGVjaz1gcHl0aG9uIC1jICdpbXBvcnQgc3lzOyBwcmludCBzeXMudmVyc2lvbl9pbmZvID49ICgyLDcsMyknYAoraWYgWyAiJHB5X3YyNl9jaGVjayIgIT0gIlRydWUiIF07IHRoZW4KKwllY2hvID4mMiAiQml0QmFrZSByZXF1aXJlcyBQeXRob24gMi43LjMgb3IgbGF0ZXIiCisJcmV0dXJuIDEKK2ZpCisKK2lmIFsgIngkQkRJUiIgPSAieCIgXTsgdGhlbgorICAgIGlmIFsgIngkMSIgPSAieCIgXTsgdGhlbgorICAgICAgICBCRElSPSJidWlsZCIKKyAgICBlbHNlCisgICAgICAgIEJESVI9IiQxIgorICAgICAgICBpZiBbICIkQkRJUiIgPSAiLyIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyA+JjIgIkVycm9yOiAvIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBidWlsZCBkaXJlY3RvcnkuIgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZmkKKworICAgICAgICAjIFJlbW92ZSBhbnkgcG9zc2libGUgdHJhaWxpbmcgc2xhc2hlcy4gVGhpcyBpcyB1c2VkIHRvIHdvcmsgYXJvdW5kCisgICAgICAgICMgYnVnZ3kgcmVhZGxpbmsgaW4gVWJ1bnR1IDEwLjA0IHRoYXQgZG9lc24ndCBpZ25vcmUgdHJhaWxpbmcgc2xhc2hlcworICAgICAgICAjIGFuZCBoZW5jZSAicmVhZGxpbmsgLWYgbmV3X2Rpcl90b19iZV9jcmVhdGVkLyIgcmV0dXJucyBlbXB0eS4KKyAgICAgICAgQkRJUj1gZWNobyAkQkRJUiB8IHNlZCAtcmUgJ3N8LyskfHwnYAorCisgICAgICAgIEJESVI9YHJlYWRsaW5rIC1mICIkQkRJUiJgCisgICAgICAgIGlmIFsgLXogIiRCRElSIiBdOyB0aGVuCisgICAgICAgICAgICBQQVJFTlRESVI9YGRpcm5hbWUgIiQxImAKKyAgICAgICAgICAgIGVjaG8gPiYyICJFcnJvcjogdGhlIGRpcmVjdG9yeSAkUEFSRU5URElSIGRvZXMgbm90IGV4aXN0PyIKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGZpCisgICAgZmkKKyAgICBpZiBbICJ4JDIiICE9ICJ4IiBdOyB0aGVuCisgICAgICAgIEJJVEJBS0VESVI9IiQyIgorICAgIGZpCitmaQoraWYgZXhwciAiJEJESVIiIDogJy8uKicgPiAvZGV2L251bGwgOyB0aGVuCisgICAgQlVJTERESVI9IiRCRElSIgorZWxzZQorICAgIEJVSUxERElSPSJgcHdkYC8kQkRJUiIKK2ZpCit1bnNldCBCRElSCisKK2lmIFsgIngkQklUQkFLRURJUiIgPSAieCIgXTsgdGhlbgorICAgIEJJVEJBS0VESVI9IiRPRVJPT1QvYml0YmFrZSRCQkVYVFJBLyIKK2ZpCisKK0JJVEJBS0VESVI9YHJlYWRsaW5rIC1mICIkQklUQkFLRURJUiJgCitCVUlMRERJUj1gcmVhZGxpbmsgLWYgIiRCVUlMRERJUiJgCisKK2lmICEgKHRlc3QgLWQgIiRCSVRCQUtFRElSIik7IHRoZW4KKyAgICBlY2hvID4mMiAiRXJyb3I6IFRoZSBiaXRiYWtlIGRpcmVjdG9yeSAoJEJJVEJBS0VESVIpIGRvZXMgbm90IGV4aXN0ISAgUGxlYXNlIGVuc3VyZSBhIGNvcHkgb2YgYml0YmFrZSBleGlzdHMgYXQgdGhpcyBsb2NhdGlvbiIKKyAgICByZXR1cm4gMQorZmkKKworIyBNYWtlIHN1cmUgb3VyIHBhdGhzIGFyZSBhdCB0aGUgYmVnaW5uaW5nIG9mICRQQVRICitORVdQQVRIUz0iJHtPRVJPT1R9L3NjcmlwdHM6JEJJVEJBS0VESVIvYmluOiIKK1BBVEg9JE5FV1BBVEhTJChlY2hvICRQQVRIIHwgc2VkIC1lICJzfDokTkVXUEFUSFN8OnxnIiAtZSAic3xeJE5FV1BBVEhTfHwiKQordW5zZXQgQklUQkFLRURJUiBORVdQQVRIUworCisjIFVzZWQgYnkgdGhlIHJ1bnFlbXUgc2NyaXB0CitleHBvcnQgQlVJTERESVIKK2V4cG9ydCBQQVRICitleHBvcnQgQkJfRU5WX0VYVFJBV0hJVEU9Ik1BQ0hJTkUgRElTVFJPIFRDTU9ERSBUQ0xJQkMgSFRUUF9QUk9YWSBodHRwX3Byb3h5IFwKK0hUVFBTX1BST1hZIGh0dHBzX3Byb3h5IEZUUF9QUk9YWSBmdHBfcHJveHkgRlRQU19QUk9YWSBmdHBzX3Byb3h5IEFMTF9QUk9YWSBcCithbGxfcHJveHkgTk9fUFJPWFkgbm9fcHJveHkgU1NIX0FHRU5UX1BJRCBTU0hfQVVUSF9TT0NLIEJCX1NSQ1JFVl9QT0xJQ1kgXAorU0RLTUFDSElORSBCQl9OVU1CRVJfVEhSRUFEUyBCQl9OT19ORVRXT1JLIFBBUkFMTEVMX01BS0UgR0lUX1BST1hZX0NPTU1BTkQgXAorU09DS1M1X1BBU1NXRCBTT0NLUzVfVVNFUiBTQ1JFRU5ESVIgU1RBTVBTX0RJUiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1maW5kLW5hdGl2ZS1zeXNyb290IGIveW9jdG8tcG9reS9zY3JpcHRzL29lLWZpbmQtbmF0aXZlLXN5c3Jvb3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODFkNjJiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1maW5kLW5hdGl2ZS1zeXNyb290CkBAIC0wLDAgKzEsODEgQEAKKyMhL2Jpbi9iYXNoCisjCisjIEZpbmQgYSBuYXRpdmUgc3lzcm9vdCB0byB1c2UgLSBlaXRoZXIgZnJvbSBhbiBpbi10cmVlIE9FIGJ1aWxkIG9yCisjIGZyb20gYSB0b29sY2hhaW4gaW5zdGFsbGF0aW9uLiBJdCB0aGVuIGVuc3VyZXMgdGhlIHZhcmlhYmxlCisjICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgaXMgc2V0IHRvIHRoZSBzeXNyb290J3MgYmFzZSBkaXJlY3RvcnksIGFuZCBzZXRzIAorIyAkUFNFVURPIHRvIHRoZSBwYXRoIG9mIHRoZSBwc2V1ZG8gYmluYXJ5LgorIworIyBUaGlzIHNjcmlwdCBpcyBpbnRlbmRlZCB0byBiZSBydW4gd2l0aGluIG90aGVyIHNjcmlwdHMgYnkgc291cmNlJ2luZworIyBpdCwgZS5nOgorIworIyBTWVNST09UX1NFVFVQX1NDUklQVD1gd2hpY2ggb2UtZmluZC1uYXRpdmUtc3lzcm9vdGAKKyMgLiAkU1lTUk9PVF9TRVRVUF9TQ1JJUFQKKyMKKyMgVGhpcyBzY3JpcHQgd2lsbCB0ZXJtaW5hdGUgZXhlY3V0aW9uIG9mIHlvdXIgY2FsbGluZyBwcm9ncmFtIHVubGVzcworIyB5b3Ugc2V0IGEgdmFyaWFibGUgJFNLSVBfU1RSSUNUX1NZU1JPT1RfQ0hFQ0sgdG8gYSBub24tZW1wdHkgc3RyaW5nCisjIGJlZm9yZWhhbmQuCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBMaW51eCBGb3VuZGF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpZiBbICJ4JE9FQ09SRV9OQVRJVkVfU1lTUk9PVCIgPSAieCIgXTsgdGhlbgorICAgIEJJVEJBS0U9YHdoaWNoIGJpdGJha2UgMj4gL2Rldi9udWxsYAorICAgIGlmIFsgIngkQklUQkFLRSIgIT0gIngiIF07IHRoZW4KKyAgICAgICAgaWYgWyAiJFVJRCIgPSAiMCIgXTsgdGhlbgorICAgICAgICAgICAgIyBSb290IGNhbm5vdCBydW4gYml0YmFrZSB1bmxlc3Mgc2FuaXR5IGNoZWNraW5nIGlzIGRpc2FibGVkCisgICAgICAgICAgICBpZiBbICEgLWQgIi4vY29uZiIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIkVycm9yOiByb290IGNhbm5vdCBydW4gYml0YmFrZSBieSBkZWZhdWx0LCBhbmQgSSBjYW5ub3QgZmluZCBhIC4vY29uZiBkaXJlY3RvcnkgdG8gYmUgYWJsZSB0byBkaXNhYmxlIHNhbml0eSBjaGVja2luZyIKKyAgICAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICB0b3VjaCBjb25mL3Nhbml0eS5jb25mCisgICAgICAgICAgICBPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9YGJpdGJha2UgLWUgfCBncmVwIF5TVEFHSU5HX0RJUl9OQVRJVkUgfCBjdXQgLWQgJyInIC1mMmAKKyAgICAgICAgICAgIHJtIC1mIGNvbmYvc2FuaXR5LmNvbmYKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgT0VDT1JFX05BVElWRV9TWVNST09UPWBiaXRiYWtlIC1lIHwgZ3JlcCBeU1RBR0lOR19ESVJfTkFUSVZFIHwgY3V0IC1kICciJyAtZjJgCisgICAgICAgIGZpCisgICAgZWxzZQorICAgICAgICBlY2hvICJFcnJvcjogVW5hYmxlIHRvIGxvY2F0ZSBiaXRiYWtlIGNvbW1hbmQuIgorICAgICAgICBlY2hvICJEaWQgeW91IGZvcmdldCB0byBzb3VyY2UgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdD8iCisKKyAgICAgICAgaWYgWyAteiAiJFNLSVBfU1RSSUNUX1NZU1JPT1RfQ0hFQ0siIF07IHRoZW4KKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorICAgIGZpCitmaQorCitpZiBbICJ4JE9FQ09SRV9OQVRJVkVfU1lTUk9PVCIgPSAieCIgXTsgdGhlbgorICAgICMgVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGVyZSB3YXMgYW4gZXJyb3IgcnVubmluZyBiaXRiYWtlIC1lIHRoYXQKKyAgICAjIHRoZSB1c2VyIG5lZWRzIHRvIGJlIGluZm9ybWVkIG9mCisgICAgZWNobyAiVGhlcmUgd2FzIGFuIGVycm9yIHJ1bm5pbmcgYml0YmFrZSB0byBkZXRlcm1pbmUgU1RBR0lOR19ESVJfTkFUSVZFIgorICAgIGVjaG8gIkhlcmUgaXMgdGhlIG91dHB1dCBmcm9tIGJpdGJha2UgLWUiCisgICAgYml0YmFrZSAtZQorICAgIGV4aXQgMQorZmkKKworIyBTZXQgdXAgcHNldWRvIGNvbW1hbmQKK2lmIFsgISAtZSAiJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC91c3IvYmluL3BzZXVkbyIgXTsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBVbmFibGUgdG8gZmluZCBwc2V1ZG8gYmluYXJ5IGluICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvdXNyL2Jpbi8iCisKKyAgICBpZiBbICJ4JE9FQ09SRV9ESVNUUk9fVkVSU0lPTiIgPSAieCIgXTsgdGhlbgorICAgICAgICBlY2hvICJIYXZlIHlvdSBydW4gJ2JpdGJha2UgbWV0YS1pZGUtc3VwcG9ydCc/IgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiVGhpcyBzaG91bGRuJ3QgaGFwcGVuIC0gc29tZXRoaW5nIGlzIHdyb25nIHdpdGggeW91ciB0b29sY2hhaW4gaW5zdGFsbGF0aW9uIgorICAgIGZpCisKKyAgICBpZiBbIC16ICIkU0tJUF9TVFJJQ1RfU1lTUk9PVF9DSEVDSyIgXTsgdGhlbgorICAgICAgICBleGl0IDEKKyAgICBmaQorZmkKK1BTRVVETz0iJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC91c3IvYmluL3BzZXVkbyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1naXQtcHJveHkgYi95b2N0by1wb2t5L3NjcmlwdHMvb2UtZ2l0LXByb3h5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ4NzM0NTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvb2UtZ2l0LXByb3h5CkBAIC0wLDAgKzEsMTMzIEBACisjIS9iaW4vYmFzaAorCisjIG9lLWdpdC1wcm94eSBpcyBhIHNpbXBsZSB0b29sIHRvIGJlIHZpYSBHSVRfUFJPWFlfQ09NTUFORC4gSXQgdXNlcyBzb2NhdAorIyB0byBtYWtlIFNPQ0tTNSBvciBIVFRQUyBwcm94eSBjb25uZWN0aW9ucy4gSXQgdXNlcyBBTExfUFJPWFkgdG8gZGV0ZXJtaW5lIHRoZQorIyBwcm94eSBzZXJ2ZXIsIHByb3RvY29sLCBhbmQgcG9ydC4gSXQgdXNlcyBOT19QUk9YWSB0byBza2lwIHVzaW5nIHRoZSBwcm94eSBmb3IKKyMgYSBjb21tYSBkZWxpbWl0ZWQgbGlzdCBvZiBob3N0cywgaG9zdCBnbG9icyAoKi5leGFtcGxlLmNvbSksIElQcywgb3IgQ0lEUgorIyBtYXNrcyAoMTkyLjE2OC4xLjAvMjQpLiBJdCBpcyBrbm93biB0byB3b3JrIHdpdGggYm90aCBiYXNoIGFuZCBkYXNoIHNoZWxscy4KKyMKKyMgRXhhbXBsZSBBTExfUFJPWFkgdmFsdWVzOgorIyBBTExfUFJPWFk9c29ja3M6Ly9zb2Nrcy5leGFtcGxlLmNvbToxMDgwCisjIEFMTF9QUk9YWT1odHRwczovL3Byb3h5LmV4YW1wbGUuY29tOjgwODAKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgQVVUSE9SUworIyBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKworIyBMb2NhdGUgdGhlIG5ldGNhdCBiaW5hcnkKK1NPQ0FUPSQod2hpY2ggc29jYXQgMj4vZGV2L251bGwpCitpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwllY2hvICJFUlJPUjogc29jYXQgYmluYXJ5IG5vdCBpbiBQQVRIIiAxPiYyCisJZXhpdCAxCitmaQorTUVUSE9EPSIiCisKKyMgVGVzdCBmb3IgYSB2YWxpZCBJUFY0IHF1YWQgd2l0aCBvcHRpb25hbCBiaXRtYXNrCit2YWxpZF9pcHY0KCkgeworCWVjaG8gJDEgfCBlZ3JlcCAtcSAiXihbMS05XXxbMS05XVswLTldfDFbMC05XVswLTldfDJbMC00XVswLTldfDI1WzAtNV0pKFwuKFswLTldfFsxLTldWzAtOV18MVswLTldWzAtOV18MlswLTRdWzAtOV18MjVbMC01XSkpezN9KC8oM1swLTJdfFsxLTJdP1swLTldKSk/JCIKKwlyZXR1cm4gJD8KK30KKworIyBDb252ZXJ0IGFuIElQVjQgYWRkcmVzcyBpbnRvIGEgMzJiaXQgaW50ZWdlcgoraXB2NF92YWwoKSB7CisJSVA9IiQxIgorCVNISUZUPTI0CisJVkFMPTAKKwlmb3IgQiBpbiAke0lQLy8uLyB9OyBkbworCQlWQUw9JCgoJFZBTCskKCgkQjw8JFNISUZUKSkpKQorCQlTSElGVD0kKCgkU0hJRlQtOCkpCisJZG9uZQorCWVjaG8gIiRWQUwiCit9CisKKyMgRGV0ZXJtaW5lIGlmIHR3byBJUHMgYXJlIGVxdWl2YWxlbnQsIG9yIGlmIHRoZSBDSURSIGNvbnRhaW5zIHRoZSBJUAorbWF0Y2hfaXB2NCgpIHsKKwlDSURSPSQxCisJSVA9JDIKKworCWlmIFsgLXogIiR7SVAlJSRDSURSfSIgXTsgdGhlbgorCQlyZXR1cm4gMAorCWZpCisKKwkjIERldGVybWluZSB0aGUgbWFzayBiaXRsZW5ndGgKKwlCSVRTPSR7Q0lEUiMjKi99CisJaWYgWyAteiAiJEJJVFMiIF07IHRoZW4KKwkJcmV0dXJuIDEKKwlmaQorCisJSVBWQUw9JChpcHY0X3ZhbCAkSVApCisJSVAyVkFMPSQoaXB2NF92YWwgJHtDSURSJSUvKn0pCisKKwkjIE9SIGluIHRoZSB1bm1hc2tlZCBiaXRzCisJZm9yIGkgaW4gJChzZXEgMCAkKCgzMi0kQklUUykpKTsgZG8KKwkJSVAyVkFMPSQoKCRJUDJWQUx8JCgoMTw8JGkpKSkpCisJCUlQVkFMPSQoKCRJUFZBTHwkKCgxPDwkaSkpKSkKKwlkb25lCisKKwlpZiBbICRJUFZBTCAtZXEgJElQMlZBTCBdOyB0aGVuCisJCXJldHVybiAwCisJZmkKKwlyZXR1cm4gMQorfQorCisjIFRlc3QgdG8gc2VlIGlmIEdMT0IgbWF0Y2hlcyBIT1NUCittYXRjaF9ob3N0KCkgeworCUhPU1Q9JDEKKwlHTE9CPSQyCisKKwlpZiBbIC16ICIke0hPU1QlJSRHTE9CfSIgXTsgdGhlbgorCQlyZXR1cm4gMAorCWZpCisKKwkjIE1hdGNoIGJ5IG5ldG1hc2sKKwlpZiB2YWxpZF9pcHY0ICRHTE9COyB0aGVuCisJCUhPU1RfSVA9JChnZXRob3N0aXAgLWQgJEhPU1QpCisJCWlmIHZhbGlkX2lwdjQgJEhPU1RfSVA7IHRoZW4KKwkJCW1hdGNoX2lwdjQgJEdMT0IgJEhPU1RfSVAKKwkJCWlmIFsgJD8gLWVxIDAgXTsgdGhlbgorCQkJCXJldHVybiAwCisJCQlmaQorCQlmaQorCWZpCisKKwlyZXR1cm4gMQorfQorCisjIElmIG5vIHByb3h5IGlzIHNldCBvciBuZWVkZWQsIGp1c3QgY29ubmVjdCBkaXJlY3RseQorTUVUSE9EPSJUQ1A6JDE6JDIiCisKK2lmIFsgLXogIiRBTExfUFJPWFkiIF07IHRoZW4KKwlleGVjICRTT0NBVCBTVERJTyAkTUVUSE9ECitmaQorCisjIENvbm5lY3QgZGlyZWN0bHkgdG8gaG9zdHMgaW4gTk9fUFJPWFkKK2ZvciBIIGluICR7Tk9fUFJPWFkvLywvIH07IGRvCisJaWYgbWF0Y2hfaG9zdCAkMSAkSDsgdGhlbgorCQlleGVjICRTT0NBVCBTVERJTyAkTUVUSE9ECisJZmkKK2RvbmUKKworIyBQcm94eSBpcyBuZWNlc3NhcnksIGRldGVybWluZSBwcm90b2NvbCwgc2VydmVyLCBhbmQgcG9ydAorUFJPVE89JChlY2hvICRBTExfUFJPWFkgfCBzZWQgLWUgJ3MvXChbXjpdKlwpOlwvXC8uKi9cMS8nKQorUFJPWFk9JChlY2hvICRBTExfUFJPWFkgfCBzZWQgLWUgJ3MvLio6XC9cL1woW146XSpcKS4qL1wxLycpCitQT1JUPSQoZWNobyAkQUxMX1BST1hZIHwgc2VkIC1lICdzLy4qOlwoWzAtOV0qXClcLz8kL1wxLycpCitpZiBbICIkUE9SVCIgPSAiJEFMTF9QUk9YWSIgXTsgdGhlbgorCVBPUlQ9IiIKK2ZpCisKK2lmIFsgIiRQUk9UTyIgPSAic29ja3MiIF07IHRoZW4KKwlpZiBbIC16ICIkUE9SVCIgXTsgdGhlbgorCQlQT1JUPSIxMDgwIgorCWZpCisJTUVUSE9EPSJTT0NLUzRBOiRQUk9YWTokMTokMixzb2Nrc3BvcnQ9JFBPUlQiCitlbHNlCisJIyBBc3N1bWUgUFJPWFkgKGh0dHAsIGh0dHBzLCBldGMpCisJaWYgWyAteiAiJFBPUlQiIF07IHRoZW4KKwkJUE9SVD0iODA4MCIKKwlmaQorCU1FVEhPRD0iUFJPWFk6JFBST1hZOiQxOiQyLHByb3h5cG9ydD0kUE9SVCIKK2ZpCisKK2V4ZWMgJFNPQ0FUIFNURElPICRNRVRIT0QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1wa2dkYXRhLXV0aWwgYi95b2N0by1wb2t5L3NjcmlwdHMvb2UtcGtnZGF0YS11dGlsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIwNzU3NzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvb2UtcGtnZGF0YS11dGlsCkBAIC0wLDAgKzEsNTA1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBPcGVuRW1iZWRkZWQgcGtnZGF0YSB1dGlsaXR5CisjCisjIFdyaXR0ZW4gYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorIworIyBDb3B5cmlnaHQgMjAxMi0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgZm5tYXRjaAoraW1wb3J0IHJlCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBsb2dnaW5nCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdCwgT3JkZXJlZERpY3QKKworc2NyaXB0c19wYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQorbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKK3N5cy5wYXRoID0gc3lzLnBhdGggKyBbbGliX3BhdGhdCitpbXBvcnQgc2NyaXB0dXRpbHMKK2xvZ2dlciA9IHNjcmlwdHV0aWxzLmxvZ2dlcl9jcmVhdGUoJ3BrZ2RhdGF1dGlsJykKKworZGVmIHRpbmZvaWxfaW5pdCgpOgorICAgIGltcG9ydCBiYi50aW5mb2lsCisgICAgaW1wb3J0IGxvZ2dpbmcKKyAgICB0aW5mb2lsID0gYmIudGluZm9pbC5UaW5mb2lsKCkKKyAgICB0aW5mb2lsLnByZXBhcmUoVHJ1ZSkKKworICAgIHRpbmZvaWwubG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuV0FSTklORykKKyAgICByZXR1cm4gdGluZm9pbAorCisKK2RlZiBnbG9iKGFyZ3MpOgorICAgICMgSGFuZGxlIGJvdGggbXVsdGlwbGUgYXJndW1lbnRzIGFuZCBtdWx0aXBsZSB2YWx1ZXMgd2l0aGluIGFuIGFyZyAob2xkIHN5bnRheCkKKyAgICBnbG9icyA9IFtdCisgICAgZm9yIGdsb2JpdGVtIGluIGFyZ3MuZ2xvYjoKKyAgICAgICAgZ2xvYnMuZXh0ZW5kKGdsb2JpdGVtLnNwbGl0KCkpCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXJncy5wa2dsaXN0ZmlsZSk6CisgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIGZpbmQgcGFja2FnZSBsaXN0IGZpbGUgJXMnICUgYXJncy5wa2dsaXN0ZmlsZSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHNraXB2YWwgPSAiLWxvY2FsZS18XmxvY2FsZS1iYXNlLXwtZGV2JHwtZG9jJHwtZGJnJHwtc3RhdGljZGV2JHxea2VybmVsLW1vZHVsZS0iCisgICAgaWYgYXJncy5leGNsdWRlOgorICAgICAgICBza2lwdmFsICs9ICJ8IiArIGFyZ3MuZXhjbHVkZQorICAgIHNraXByZWdleCA9IHJlLmNvbXBpbGUoc2tpcHZhbCkKKworICAgIG1hcHBlZHBrZ3MgPSBzZXQoKQorICAgIHdpdGggb3BlbihhcmdzLnBrZ2xpc3RmaWxlLCAncicpIGFzIGY6CisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBmaWVsZHMgPSBsaW5lLnJzdHJpcCgpLnNwbGl0KCkKKyAgICAgICAgICAgIGlmIG5vdCBmaWVsZHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHBrZyA9IGZpZWxkc1swXQorICAgICAgICAgICAgIyBXZSBkb24ndCBjYXJlIGFib3V0IG90aGVyIGFyZ3MgKHVzZWQgdG8gbmVlZCB0aGUgcGFja2FnZSBhcmNoaXRlY3R1cmUgYnV0IHRoZQorICAgICAgICAgICAgIyBuZXcgcGtnZGF0YSBzdHJ1Y3R1cmUgYXZvaWRzIHRoZSBuZWVkIGZvciB0aGF0KQorCisgICAgICAgICAgICAjIFNraXAgcGFja2FnZXMgZm9yIHdoaWNoIHRoZXJlIGlzIG5vIHBvaW50IGFwcGx5aW5nIGdsb2JzCisgICAgICAgICAgICBpZiBza2lwcmVnZXguc2VhcmNoKHBrZyk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlcyAtPiAhISIgJSBwa2cpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBTa2lwIHBhY2thZ2VzIHRoYXQgYWxyZWFkeSBtYXRjaCB0aGUgZ2xvYnMsIHNvIGlmIGUuZy4gYSBkZXYgcGFja2FnZQorICAgICAgICAgICAgIyBpcyBhbHJlYWR5IGluc3RhbGxlZCBhbmQgdGh1cyBpbiB0aGUgbGlzdCwgd2UgZG9uJ3QgcHJvY2VzcyBpdCBhbnkgZnVydGhlcgorICAgICAgICAgICAgIyBNb3N0IG9mIHRoZXNlIHdpbGwgYmUgY2F1Z2h0IGJ5IHNraXByZWdleCBhbHJlYWR5LCBidXQganVzdCBpbiBjYXNlLi4uCisgICAgICAgICAgICBhbHJlYWR5ID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBnIGluIGdsb2JzOgorICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaGNhc2UocGtnLCBnKToKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIGFscmVhZHk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlcyAtPiAhIiAlIHBrZykKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIERlZmluZSBzb21lIGZ1bmN0aW9ucworICAgICAgICAgICAgZGVmIHJldnBrZ2RhdGEocGtnbik6CisgICAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihhcmdzLnBrZ2RhdGFfZGlyLCAicnVudGltZS1yZXZlcnNlIiwgcGtnbikKKyAgICAgICAgICAgIGRlZiBmd2Rwa2dkYXRhKHBrZ24pOgorICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oYXJncy5wa2dkYXRhX2RpciwgInJ1bnRpbWUiLCBwa2duKQorICAgICAgICAgICAgZGVmIHJlYWRwbihwa2dkYXRhX2ZpbGUpOgorICAgICAgICAgICAgICAgIHBuID0gIiIKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ocGtnZGF0YV9maWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlBOOiIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuID0gbGluZS5zcGxpdCgnOiAnKVsxXS5yc3RyaXAoKQorICAgICAgICAgICAgICAgIHJldHVybiBwbgorICAgICAgICAgICAgZGVmIHJlYWRyZW5hbWVkKHBrZ2RhdGFfZmlsZSk6CisgICAgICAgICAgICAgICAgcmVuYW1lZCA9ICIiCisgICAgICAgICAgICAgICAgcG4gPSBvcy5wYXRoLmJhc2VuYW1lKHBrZ2RhdGFfZmlsZSkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ocGtnZGF0YV9maWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlBLR18lczoiICUgcG4pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZWQgPSBsaW5lLnNwbGl0KCc6ICcpWzFdLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmFtZWQKKworICAgICAgICAgICAgIyBNYWluIHByb2Nlc3NpbmcgbG9vcAorICAgICAgICAgICAgZm9yIGcgaW4gZ2xvYnM6CisgICAgICAgICAgICAgICAgbWFwcGVkcGtnID0gIiIKKyAgICAgICAgICAgICAgICAjIEZpcnN0IGp1c3QgdHJ5IHN1YnN0aXR1dGlvbiAoaS5lLiBwYWNrYWdlbmFtZSAtPiBwYWNrYWdlbmFtZS1kZXYpCisgICAgICAgICAgICAgICAgbmV3cGtnID0gZy5yZXBsYWNlKCIqIiwgcGtnKQorICAgICAgICAgICAgICAgIHJldmxpbmsgPSByZXZwa2dkYXRhKG5ld3BrZykKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhyZXZsaW5rKToKKyAgICAgICAgICAgICAgICAgICAgbWFwcGVkcGtnID0gb3MucGF0aC5iYXNlbmFtZShvcy5yZWFkbGluayhyZXZsaW5rKSkKKyAgICAgICAgICAgICAgICAgICAgZndkZmlsZSA9IGZ3ZHBrZ2RhdGEobWFwcGVkcGtnKQorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmd2RmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZHBrZyA9IHJlYWRyZW5hbWVkKGZ3ZGZpbGUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmd2RmaWxlICsgIi5wYWNrYWdlZCIpOgorICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkcGtnID0gIiIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXZsaW5rID0gcmV2cGtnZGF0YShwa2cpCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHJldmxpbmspOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGVjayBpZiB3ZSBjYW4gbWFwIGFmdGVyIHVuZG9pbmcgdGhlIHBhY2thZ2UgcmVuYW1pbmcgKGJ5IHJlc29sdmluZyB0aGUgc3ltbGluaykKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdwa2cgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnJlYWRsaW5rKHJldmxpbmspKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3cGtnID0gZy5yZXBsYWNlKCIqIiwgb3JpZ3BrZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ3ZGZpbGUgPSBmd2Rwa2dkYXRhKG5ld3BrZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZ3ZGZpbGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZHBrZyA9IHJlYWRyZW5hbWVkKGZ3ZGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhhdCBkaWRuJ3Qgd29yaywgc28gbm93IGdldCB0aGUgUE4sIHN1YnN0aXR1dGUgdGhhdCwgdGhlbiBtYXAgaW4gdGhlIG90aGVyIGRpcmVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuID0gcmVhZHBuKHJldmxpbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cGtnID0gZy5yZXBsYWNlKCIqIiwgcG4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZndkZmlsZSA9IGZ3ZHBrZ2RhdGEobmV3cGtnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZ3ZGZpbGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRwa2cgPSByZWFkcmVuYW1lZChmd2RmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZ3ZGZpbGUgKyAiLnBhY2thZ2VkIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkcGtnID0gIiIKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgUGFja2FnZSBkb2Vzbid0IGV2ZW4gZXhpc3QuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXMgaXMgbm90IGEgdmFsaWQgcGFja2FnZSEiICUgKHBrZykpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgaWYgbWFwcGVkcGtnOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVzICglcykgLT4gJXMiICUgKHBrZywgZywgbWFwcGVkcGtnKSkKKyAgICAgICAgICAgICAgICAgICAgbWFwcGVkcGtncy5hZGQobWFwcGVkcGtnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXMgKCVzKSAtPiA/IiAlIChwa2csIGcpKQorCisgICAgbG9nZ2VyLmRlYnVnKCItLS0tLS0iKQorCisgICAgcHJpbnQoIlxuIi5qb2luKG1hcHBlZHBrZ3MpKQorCitkZWYgcmVhZF92YWx1ZShhcmdzKToKKyAgICAjIEhhbmRsZSBib3RoIG11bHRpcGxlIGFyZ3VtZW50cyBhbmQgbXVsdGlwbGUgdmFsdWVzIHdpdGhpbiBhbiBhcmcgKG9sZCBzeW50YXgpCisgICAgcGFja2FnZXMgPSBbXQorICAgIGZvciBwa2dpdGVtIGluIGFyZ3MucGtnOgorICAgICAgICBwYWNrYWdlcy5leHRlbmQocGtnaXRlbS5zcGxpdCgpKQorCisgICAgZGVmIHJlYWR2YXIocGtnZGF0YV9maWxlLCB2YWx1ZW5hbWUpOgorICAgICAgICB2YWwgPSAiIgorICAgICAgICB3aXRoIG9wZW4ocGtnZGF0YV9maWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCh2YWx1ZW5hbWUgKyAiOiIpOgorICAgICAgICAgICAgICAgICAgICB2YWwgPSBsaW5lLnNwbGl0KCc6ICcsIDEpWzFdLnJzdHJpcCgpCisgICAgICAgIHJldHVybiB2YWwKKworICAgIGxvZ2dlci5kZWJ1ZygicmVhZC12YWx1ZSgnJXMnLCAnJXMnICclcyciICUgKGFyZ3MucGtnZGF0YV9kaXIsIGFyZ3MudmFsdWVuYW1lLCBwYWNrYWdlcykpCisgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgIHBrZ19zcGxpdCA9IHBhY2thZ2Uuc3BsaXQoJ18nKQorICAgICAgICBwa2dfbmFtZSA9IHBrZ19zcGxpdFswXQorICAgICAgICBsb2dnZXIuZGVidWcoInBhY2thZ2U6ICclcyciICUgcGtnX25hbWUpCisgICAgICAgIHJldmxpbmsgPSBvcy5wYXRoLmpvaW4oYXJncy5wa2dkYXRhX2RpciwgInJ1bnRpbWUtcmV2ZXJzZSIsIHBrZ19uYW1lKQorICAgICAgICBsb2dnZXIuZGVidWcocmV2bGluaykKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocmV2bGluayk6CisgICAgICAgICAgICBtYXBwZWRwa2cgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnJlYWRsaW5rKHJldmxpbmspKQorICAgICAgICAgICAgcXZhciA9IGFyZ3MudmFsdWVuYW1lCisgICAgICAgICAgICBpZiBxdmFyID09ICJQS0dTSVpFIjoKKyAgICAgICAgICAgICAgICAjIGFwcGVuZCBwYWNrYWdlbmFtZQorICAgICAgICAgICAgICAgIHF2YXIgPSAiJXNfJXMiICUgKGFyZ3MudmFsdWVuYW1lLCBtYXBwZWRwa2cpCisgICAgICAgICAgICAgICAgIyBQS0dTSVpFIGlzIG5vdyBpbiBieXRlcywgYnV0IHdlIHdlIHdhbnQgaXQgaW4gS0IKKyAgICAgICAgICAgICAgICBwa2dzaXplID0gKGludChyZWFkdmFyKHJldmxpbmssIHF2YXIpKSArIDEwMjQgLy8gMikgLy8gMTAyNAorICAgICAgICAgICAgICAgIHByaW50KCIlZCIgJSBwa2dzaXplKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludChyZWFkdmFyKHJldmxpbmssIHF2YXIpKQorCitkZWYgbG9va3VwX3BrZ2xpc3QocGtncywgcGtnZGF0YV9kaXIsIHJldmVyc2UpOgorICAgIGlmIHJldmVyc2U6CisgICAgICAgIG1hcHBpbmdzID0gT3JkZXJlZERpY3QoKQorICAgICAgICBmb3IgcGtnIGluIHBrZ3M6CisgICAgICAgICAgICByZXZsaW5rID0gb3MucGF0aC5qb2luKHBrZ2RhdGFfZGlyLCAicnVudGltZS1yZXZlcnNlIiwgcGtnKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKHJldmxpbmspCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhyZXZsaW5rKToKKyAgICAgICAgICAgICAgICBtYXBwaW5nc1twa2ddID0gb3MucGF0aC5iYXNlbmFtZShvcy5yZWFkbGluayhyZXZsaW5rKSkKKyAgICBlbHNlOgorICAgICAgICBtYXBwaW5ncyA9IGRlZmF1bHRkaWN0KGxpc3QpCisgICAgICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgICAgIHBrZ2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnZGF0YV9kaXIsICdydW50aW1lJywgcGtnKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGtnZmlsZSk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHBrZ2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcyA9IGxpbmUucnN0cmlwKCkuc3BsaXQoJzogJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpZWxkc1swXSA9PSAnUEtHXyVzJyAlIHBrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nc1twa2ddLmFwcGVuZChmaWVsZHNbMV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gbWFwcGluZ3MKKworZGVmIGxvb2t1cF9wa2coYXJncyk6CisgICAgIyBIYW5kbGUgYm90aCBtdWx0aXBsZSBhcmd1bWVudHMgYW5kIG11bHRpcGxlIHZhbHVlcyB3aXRoaW4gYW4gYXJnIChvbGQgc3ludGF4KQorICAgIHBrZ3MgPSBbXQorICAgIGZvciBwa2dpdGVtIGluIGFyZ3MucGtnOgorICAgICAgICBwa2dzLmV4dGVuZChwa2dpdGVtLnNwbGl0KCkpCisKKyAgICBtYXBwaW5ncyA9IGxvb2t1cF9wa2dsaXN0KHBrZ3MsIGFyZ3MucGtnZGF0YV9kaXIsIGFyZ3MucmV2ZXJzZSkKKworICAgIGlmIGxlbihtYXBwaW5ncykgPCBsZW4ocGtncyk6CisgICAgICAgIG1pc3NpbmcgPSBsaXN0KHNldChwa2dzKSAtIHNldChtYXBwaW5ncy5rZXlzKCkpKQorICAgICAgICBsb2dnZXIuZXJyb3IoIlRoZSBmb2xsb3dpbmcgcGFja2FnZXMgY291bGQgbm90IGJlIGZvdW5kOiAlcyIgJSAnLCAnLmpvaW4obWlzc2luZykpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBhcmdzLnJldmVyc2U6CisgICAgICAgIGl0ZW1zID0gbWFwcGluZ3MudmFsdWVzKCkKKyAgICBlbHNlOgorICAgICAgICBpdGVtcyA9IFtdCisgICAgICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgICAgIGl0ZW1zLmV4dGVuZChtYXBwaW5ncy5nZXQocGtnLCBbXSkpCisKKyAgICBwcmludCgnXG4nLmpvaW4oaXRlbXMpKQorCitkZWYgbG9va3VwX3JlY2lwZShhcmdzKToKKyAgICAjIEhhbmRsZSBib3RoIG11bHRpcGxlIGFyZ3VtZW50cyBhbmQgbXVsdGlwbGUgdmFsdWVzIHdpdGhpbiBhbiBhcmcgKG9sZCBzeW50YXgpCisgICAgcGtncyA9IFtdCisgICAgZm9yIHBrZ2l0ZW0gaW4gYXJncy5wa2c6CisgICAgICAgIHBrZ3MuZXh0ZW5kKHBrZ2l0ZW0uc3BsaXQoKSkKKworICAgIG1hcHBpbmdzID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICBmb3IgcGtnIGluIHBrZ3M6CisgICAgICAgIHBrZ2ZpbGUgPSBvcy5wYXRoLmpvaW4oYXJncy5wa2dkYXRhX2RpciwgJ3J1bnRpbWUtcmV2ZXJzZScsIHBrZykKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGtnZmlsZSk6CisgICAgICAgICAgICB3aXRoIG9wZW4ocGtnZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGZpZWxkcyA9IGxpbmUucnN0cmlwKCkuc3BsaXQoJzogJykKKyAgICAgICAgICAgICAgICAgICAgaWYgZmllbGRzWzBdID09ICdQTic6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nc1twa2ddLmFwcGVuZChmaWVsZHNbMV0pCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgIGlmIGxlbihtYXBwaW5ncykgPCBsZW4ocGtncyk6CisgICAgICAgIG1pc3NpbmcgPSBsaXN0KHNldChwa2dzKSAtIHNldChtYXBwaW5ncy5rZXlzKCkpKQorICAgICAgICBsb2dnZXIuZXJyb3IoIlRoZSBmb2xsb3dpbmcgcGFja2FnZXMgY291bGQgbm90IGJlIGZvdW5kOiAlcyIgJSAnLCAnLmpvaW4obWlzc2luZykpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpdGVtcyA9IFtdCisgICAgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICBpdGVtcy5leHRlbmQobWFwcGluZ3MuZ2V0KHBrZywgW10pKQorICAgIHByaW50KCdcbicuam9pbihpdGVtcykpCisKK2RlZiBnZXRfcmVjaXBlX3BrZ3MocGtnZGF0YV9kaXIsIHJlY2lwZSwgdW5wYWNrYWdlZCk6CisgICAgcmVjaXBlZGF0YWZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnZGF0YV9kaXIsIHJlY2lwZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmVjaXBlZGF0YWZpbGUpOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBmaW5kIHBhY2thZ2VkIHJlY2lwZSB3aXRoIG5hbWUgJXMiICUgcmVjaXBlKQorICAgICAgICBzeXMuZXhpdCgxKQorICAgIHBhY2thZ2VzID0gW10KKyAgICB3aXRoIG9wZW4ocmVjaXBlZGF0YWZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIGZpZWxkcyA9IGxpbmUucnN0cmlwKCkuc3BsaXQoJzogJykKKyAgICAgICAgICAgIGlmIGZpZWxkc1swXSA9PSAnUEFDS0FHRVMnOgorICAgICAgICAgICAgICAgIHBhY2thZ2VzID0gZmllbGRzWzFdLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgaWYgbm90IHVucGFja2FnZWQ6CisgICAgICAgIHBrZ2xpc3QgPSBbXQorICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBrZ2RhdGFfZGlyLCAncnVudGltZScsICclcy5wYWNrYWdlZCcgJSBwa2cpKToKKyAgICAgICAgICAgICAgICBwa2dsaXN0LmFwcGVuZChwa2cpCisgICAgICAgIHJldHVybiBwa2dsaXN0CisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHBhY2thZ2VzCisKK2RlZiBsaXN0X3BrZ3MoYXJncyk6CisgICAgZm91bmQgPSBGYWxzZQorCisgICAgZGVmIG1hdGNocGtnKHBrZyk6CisgICAgICAgIGlmIGFyZ3MucGtnc3BlYzoKKyAgICAgICAgICAgIG1hdGNoZWQgPSBGYWxzZQorICAgICAgICAgICAgZm9yIHBrZ3NwZWMgaW4gYXJncy5wa2dzcGVjOgorICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaGNhc2UocGtnLCBwa2dzcGVjKToKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG5vdCBtYXRjaGVkOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBub3QgYXJncy51bnBhY2thZ2VkOgorICAgICAgICAgICAgaWYgYXJncy5ydW50aW1lOgorICAgICAgICAgICAgICAgIHJldmxpbmsgPSBvcy5wYXRoLmpvaW4oYXJncy5wa2dkYXRhX2RpciwgInJ1bnRpbWUtcmV2ZXJzZSIsIHBrZykKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhyZXZsaW5rKToKKyAgICAgICAgICAgICAgICAgICAgIyBXZSdyZSB1bmxpa2VseSB0byBnZXQgaGVyZSBpZiB0aGUgcGFja2FnZSB3YXMgbm90IHBhY2thZ2VkLCBidXQganVzdCBpbiBjYXNlCisgICAgICAgICAgICAgICAgICAgICMgd2UgYWRkIHRoZSBzeW1saW5rcyBmb3IgdW5wYWNrYWdlZCBmaWxlcyBpbiB0aGUgZnV0dXJlCisgICAgICAgICAgICAgICAgICAgIG1hcHBlZHBrZyA9IG9zLnBhdGguYmFzZW5hbWUob3MucmVhZGxpbmsocmV2bGluaykpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oYXJncy5wa2dkYXRhX2RpciwgJ3J1bnRpbWUnLCAnJXMucGFja2FnZWQnICUgbWFwcGVkcGtnKSk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcmdzLnBrZ2RhdGFfZGlyLCAncnVudGltZScsICclcy5wYWNrYWdlZCcgJSBwa2cpKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiBhcmdzLnJlY2lwZToKKyAgICAgICAgcGFja2FnZXMgPSBnZXRfcmVjaXBlX3BrZ3MoYXJncy5wa2dkYXRhX2RpciwgYXJncy5yZWNpcGUsIGFyZ3MudW5wYWNrYWdlZCkKKworICAgICAgICBpZiBhcmdzLnJ1bnRpbWU6CisgICAgICAgICAgICBwa2dsaXN0ID0gW10KKyAgICAgICAgICAgIHJ1bnRpbWVfcGtncyA9IGxvb2t1cF9wa2dsaXN0KHBhY2thZ2VzLCBhcmdzLnBrZ2RhdGFfZGlyLCBGYWxzZSkKKyAgICAgICAgICAgIGZvciBydHBrZ3MgaW4gcnVudGltZV9wa2dzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHBrZ2xpc3QuZXh0ZW5kKHJ0cGtncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBrZ2xpc3QgPSBwYWNrYWdlcworCisgICAgICAgIGZvciBwa2cgaW4gcGtnbGlzdDoKKyAgICAgICAgICAgIGlmIG1hdGNocGtnKHBrZyk6CisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgcHJpbnQoIiVzIiAlIHBrZykKKyAgICBlbHNlOgorICAgICAgICBpZiBhcmdzLnJ1bnRpbWU6CisgICAgICAgICAgICBzZWFyY2hkaXIgPSAncnVudGltZS1yZXZlcnNlJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VhcmNoZGlyID0gJ3J1bnRpbWUnCisKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsob3MucGF0aC5qb2luKGFyZ3MucGtnZGF0YV9kaXIsIHNlYXJjaGRpcikpOgorICAgICAgICAgICAgZm9yIGZuIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGlmIGZuLmVuZHN3aXRoKCcucGFja2FnZWQnKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBtYXRjaHBrZyhmbik6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBwcmludCgiJXMiICUgZm4pCisgICAgaWYgbm90IGZvdW5kOgorICAgICAgICBpZiBhcmdzLnBrZ3NwZWM6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGFueSBwYWNrYWdlIG1hdGNoaW5nICVzIiAlIGFyZ3MucGtnc3BlYykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiTm8gcGFja2FnZXMgZm91bmQiKQorICAgICAgICBzeXMuZXhpdCgxKQorCitkZWYgbGlzdF9wa2dfZmlsZXMoYXJncyk6CisgICAgaW1wb3J0IGpzb24KKworICAgIGlmIGFyZ3MucmVjaXBlOgorICAgICAgICBpZiBhcmdzLnBrZzoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigibGlzdC1wa2ctZmlsZXM6IElmIC1wLy0tcmVjaXBlIGlzIHNwZWNpZmllZCB0aGVuIGEgcGFja2FnZSBuYW1lIGNhbm5vdCBiZSBzcGVjaWZpZWQiKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgcmVjaXBlcGtnbGlzdCA9IGdldF9yZWNpcGVfcGtncyhhcmdzLnBrZ2RhdGFfZGlyLCBhcmdzLnJlY2lwZSwgYXJncy51bnBhY2thZ2VkKQorICAgICAgICBpZiBhcmdzLnJ1bnRpbWU6CisgICAgICAgICAgICBwa2dsaXN0ID0gW10KKyAgICAgICAgICAgIHJ1bnRpbWVfcGtncyA9IGxvb2t1cF9wa2dsaXN0KHJlY2lwZXBrZ2xpc3QsIGFyZ3MucGtnZGF0YV9kaXIsIEZhbHNlKQorICAgICAgICAgICAgZm9yIHJ0cGtncyBpbiBydW50aW1lX3BrZ3MudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgcGtnbGlzdC5leHRlbmQocnRwa2dzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtnbGlzdCA9IHJlY2lwZXBrZ2xpc3QKKyAgICBlbHNlOgorICAgICAgICBpZiBub3QgYXJncy5wa2c6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoImxpc3QtcGtnLWZpbGVzOiBJZiAtcC8tLXJlY2lwZSBpcyBub3Qgc3BlY2lmaWVkIHRoZW4gYXQgbGVhc3Qgb25lIHBhY2thZ2UgbmFtZSBtdXN0IGJlIHNwZWNpZmllZCIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBwa2dsaXN0ID0gYXJncy5wa2cKKworICAgIGZvciBwa2cgaW4gcGtnbGlzdDoKKyAgICAgICAgcHJpbnQoIiVzOiIgJSBwa2cpCisgICAgICAgIGlmIGFyZ3MucnVudGltZToKKyAgICAgICAgICAgIHBrZ2RhdGFmaWxlID0gb3MucGF0aC5qb2luKGFyZ3MucGtnZGF0YV9kaXIsICJydW50aW1lLXJldmVyc2UiLCBwa2cpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGtnZGF0YWZpbGUpOgorICAgICAgICAgICAgICAgIGlmIGFyZ3MucmVjaXBlOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgcGFja2FnZSB3YXMgZW1wdHkgYW5kIHRodXMgbmV2ZXIgcGFja2FnZWQsIGlnbm9yZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGZpbmQgYW55IGJ1aWx0IHJ1bnRpbWUgcGFja2FnZSBuYW1lZCAlcyIgJSBwa2cpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBrZ2RhdGFmaWxlID0gb3MucGF0aC5qb2luKGFyZ3MucGtnZGF0YV9kaXIsICJydW50aW1lIiwgcGtnKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBrZ2RhdGFmaWxlKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGFueSBidWlsdCByZWNpcGUtc3BhY2UgcGFja2FnZSBuYW1lZCAlcyIgJSBwa2cpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICB3aXRoIG9wZW4ocGtnZGF0YWZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdGSUxFU19JTkZPOicpOgorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgdmFsID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgZGljdHZhbCA9IGpzb24ubG9hZHModmFsKQorICAgICAgICAgICAgICAgICAgICBmb3IgZnVsbHB0aCBpbiBzb3J0ZWQoZGljdHZhbCk6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiXHQlcyIgJSBmdWxscHRoKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgbm90IGZvdW5kOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGZpbmQgRklMRVNfSU5GTyBlbnRyeSBpbiAlcyIgJSBwa2dkYXRhZmlsZSkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCitkZWYgZmluZF9wYXRoKGFyZ3MpOgorICAgIGltcG9ydCBqc29uCisKKyAgICBmb3VuZCA9IEZhbHNlCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsob3MucGF0aC5qb2luKGFyZ3MucGtnZGF0YV9kaXIsICdydW50aW1lJykpOgorICAgICAgICBmb3IgZm4gaW4gZmlsZXM6CisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHJvb3QsZm4pKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnRklMRVNfSU5GTzonKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICBkaWN0dmFsID0ganNvbi5sb2Fkcyh2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZnVsbHB0aCBpbiBkaWN0dmFsLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKGZ1bGxwdGgsIGFyZ3MudGFyZ2V0cGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiJXM6ICVzIiAlIChmbiwgZnVsbHB0aCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZmluZCBhbnkgcGFja2FnZSBwcm9kdWNpbmcgcGF0aCAlcyIgJSBhcmdzLnRhcmdldHBhdGgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iT3BlbkVtYmVkZGVkIHBrZ2RhdGEgdG9vbCAtIHF1ZXJpZXMgdGhlIHBrZ2RhdGEgZmlsZXMgd3JpdHRlbiBvdXQgZHVyaW5nIGRvX3BhY2thZ2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwaWxvZz0iVXNlICUocHJvZylzIDxzdWJjb21tYW5kPiAtLWhlbHAgdG8gZ2V0IGhlbHAgb24gYSBzcGVjaWZpYyBjb21tYW5kIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZCcsICctLWRlYnVnJywgaGVscD0nRW5hYmxlIGRlYnVnIG91dHB1dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXAnLCAnLS1wa2dkYXRhLWRpcicsIGhlbHA9J1BhdGggdG8gcGtnZGF0YSBkaXJlY3RvcnkgKGRldGVybWluZWQgYXV0b21hdGljYWxseSBpZiBub3Qgc3BlY2lmaWVkKScpCisgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2Vycyh0aXRsZT0nc3ViY29tbWFuZHMnLCBtZXRhdmFyPSc8c3ViY29tbWFuZD4nKQorCisgICAgcGFyc2VyX2xvb2t1cF9wa2cgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2xvb2t1cC1wa2cnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVHJhbnNsYXRlIGJldHdlZW4gcmVjaXBlLXNwYWNlIHBhY2thZ2UgbmFtZXMgYW5kIHJ1bnRpbWUgcGFja2FnZSBuYW1lcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nTG9va3MgdXAgdGhlIHNwZWNpZmllZCByZWNpcGUtc3BhY2UgcGFja2FnZSBuYW1lKHMpIHRvIHNlZSB3aGF0IHRoZSBmaW5hbCBydW50aW1lIHBhY2thZ2UgbmFtZSBpcyAoZS5nLiBnbGliYyBiZWNvbWVzIGxpYmM2KSwgb3Igd2l0aCAtci8tLXJldmVyc2UgbG9va3MgdXAgdGhlIG90aGVyIHdheS4nKQorICAgIHBhcnNlcl9sb29rdXBfcGtnLmFkZF9hcmd1bWVudCgncGtnJywgbmFyZ3M9JysnLCBoZWxwPSdQYWNrYWdlIG5hbWUgdG8gbG9vayB1cCcpCisgICAgcGFyc2VyX2xvb2t1cF9wa2cuYWRkX2FyZ3VtZW50KCctcicsICctLXJldmVyc2UnLCBoZWxwPSdTd2l0Y2ggdG8gbG9va2luZyB1cCByZWNpcGUtc3BhY2UgcGFja2FnZSBuYW1lcyBmcm9tIHJ1bnRpbWUgcGFja2FnZSBuYW1lcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyX2xvb2t1cF9wa2cuc2V0X2RlZmF1bHRzKGZ1bmM9bG9va3VwX3BrZykKKworICAgIHBhcnNlcl9saXN0X3BrZ3MgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2xpc3QtcGtncycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdMaXN0IHBhY2thZ2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdMaXN0cyBwYWNrYWdlcyB0aGF0IGhhdmUgYmVlbiBidWlsdCcpCisgICAgcGFyc2VyX2xpc3RfcGtncy5hZGRfYXJndW1lbnQoJ3BrZ3NwZWMnLCBuYXJncz0nKicsIGhlbHA9J1BhY2thZ2UgbmFtZSB0byBzZWFyY2ggZm9yICh3aWxkY2FyZHMgKiA/IGFsbG93ZWQsIHVzZSBxdW90ZXMgdG8gYXZvaWQgc2hlbGwgZXhwYW5zaW9uKScpCisgICAgcGFyc2VyX2xpc3RfcGtncy5hZGRfYXJndW1lbnQoJy1yJywgJy0tcnVudGltZScsIGhlbHA9J1Nob3cgcnVudGltZSBwYWNrYWdlIG5hbWVzIGluc3RlYWQgb2YgcmVjaXBlLXNwYWNlIHBhY2thZ2UgbmFtZXMnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9saXN0X3BrZ3MuYWRkX2FyZ3VtZW50KCctcCcsICctLXJlY2lwZScsIGhlbHA9J0xpbWl0IHRvIHBhY2thZ2VzIHByb2R1Y2VkIGJ5IHRoZSBzcGVjaWZpZWQgcmVjaXBlJykKKyAgICBwYXJzZXJfbGlzdF9wa2dzLmFkZF9hcmd1bWVudCgnLXUnLCAnLS11bnBhY2thZ2VkJywgaGVscD0nSW5jbHVkZSB1bnBhY2thZ2VkIChpLmUuIGVtcHR5KSBwYWNrYWdlcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyX2xpc3RfcGtncy5zZXRfZGVmYXVsdHMoZnVuYz1saXN0X3BrZ3MpCisKKyAgICBwYXJzZXJfbGlzdF9wa2dfZmlsZXMgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2xpc3QtcGtnLWZpbGVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0xpc3QgZmlsZXMgd2l0aGluIGEgcGFja2FnZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nTGlzdHMgZmlsZXMgaW5jbHVkZWQgaW4gb25lIG9yIG1vcmUgcGFja2FnZXMnKQorICAgIHBhcnNlcl9saXN0X3BrZ19maWxlcy5hZGRfYXJndW1lbnQoJ3BrZycsIG5hcmdzPScqJywgaGVscD0nUGFja2FnZSBuYW1lIHRvIHJlcG9ydCBvbiAoaWYgLXAvLS1yZWNpcGUgaXMgbm90IHNwZWNpZmllZCknKQorICAgIHBhcnNlcl9saXN0X3BrZ19maWxlcy5hZGRfYXJndW1lbnQoJy1yJywgJy0tcnVudGltZScsIGhlbHA9J1NwZWNpZmllZCBwYWNrYWdlKHMpIGFyZSBydW50aW1lIHBhY2thZ2UgbmFtZXMgaW5zdGVhZCBvZiByZWNpcGUtc3BhY2UgcGFja2FnZSBuYW1lcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyX2xpc3RfcGtnX2ZpbGVzLmFkZF9hcmd1bWVudCgnLXAnLCAnLS1yZWNpcGUnLCBoZWxwPSdSZXBvcnQgb24gYWxsIHBhY2thZ2VzIHByb2R1Y2VkIGJ5IHRoZSBzcGVjaWZpZWQgcmVjaXBlJykKKyAgICBwYXJzZXJfbGlzdF9wa2dfZmlsZXMuYWRkX2FyZ3VtZW50KCctdScsICctLXVucGFja2FnZWQnLCBoZWxwPSdJbmNsdWRlIHVucGFja2FnZWQgKGkuZS4gZW1wdHkpIHBhY2thZ2VzIChvbmx5IHVzZWZ1bCB3aXRoIC1wLy0tcmVjaXBlKScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyX2xpc3RfcGtnX2ZpbGVzLnNldF9kZWZhdWx0cyhmdW5jPWxpc3RfcGtnX2ZpbGVzKQorCisgICAgcGFyc2VyX2xvb2t1cF9yZWNpcGUgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2xvb2t1cC1yZWNpcGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRmluZCByZWNpcGUgcHJvZHVjaW5nIG9uZSBvciBtb3JlIHBhY2thZ2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdMb29rcyB1cCB0aGUgc3BlY2lmaWVkIHJ1bnRpbWUgcGFja2FnZShzKSB0byBzZWUgd2hpY2ggcmVjaXBlIHRoZXkgd2VyZSBwcm9kdWNlZCBieScpCisgICAgcGFyc2VyX2xvb2t1cF9yZWNpcGUuYWRkX2FyZ3VtZW50KCdwa2cnLCBuYXJncz0nKycsIGhlbHA9J1J1bnRpbWUgcGFja2FnZSBuYW1lIHRvIGxvb2sgdXAnKQorICAgIHBhcnNlcl9sb29rdXBfcmVjaXBlLnNldF9kZWZhdWx0cyhmdW5jPWxvb2t1cF9yZWNpcGUpCisKKyAgICBwYXJzZXJfZmluZF9wYXRoID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdmaW5kLXBhdGgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRmluZCBwYWNrYWdlIHByb3ZpZGluZyBhIHRhcmdldCBwYXRoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdGaW5kcyB0aGUgcmVjaXBlLXNwYWNlIHBhY2thZ2UgcHJvdmlkaW5nIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IHBhdGgnKQorICAgIHBhcnNlcl9maW5kX3BhdGguYWRkX2FyZ3VtZW50KCd0YXJnZXRwYXRoJywgaGVscD0nUGF0aCB0byBmaW5kICh3aWxkY2FyZHMgKiA/IGFsbG93ZWQsIHVzZSBxdW90ZXMgdG8gYXZvaWQgc2hlbGwgZXhwYW5zaW9uKScpCisgICAgcGFyc2VyX2ZpbmRfcGF0aC5zZXRfZGVmYXVsdHMoZnVuYz1maW5kX3BhdGgpCisKKyAgICBwYXJzZXJfcmVhZF92YWx1ZSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcigncmVhZC12YWx1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdSZWFkIGFueSBwa2dkYXRhIHZhbHVlIGZvciBvbmUgb3IgbW9yZSBwYWNrYWdlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nUmVhZHMgdGhlIG5hbWVkIHZhbHVlIGZyb20gdGhlIHBrZ2RhdGEgZmlsZXMgZm9yIHRoZSBzcGVjaWZpZWQgcGFja2FnZXMnKQorICAgIHBhcnNlcl9yZWFkX3ZhbHVlLmFkZF9hcmd1bWVudCgndmFsdWVuYW1lJywgaGVscD0nTmFtZSBvZiB0aGUgdmFsdWUgdG8gbG9vayB1cCcpCisgICAgcGFyc2VyX3JlYWRfdmFsdWUuYWRkX2FyZ3VtZW50KCdwa2cnLCBuYXJncz0nKycsIGhlbHA9J1J1bnRpbWUgcGFja2FnZSBuYW1lIHRvIGxvb2sgdXAnKQorICAgIHBhcnNlcl9yZWFkX3ZhbHVlLnNldF9kZWZhdWx0cyhmdW5jPXJlYWRfdmFsdWUpCisKKyAgICBwYXJzZXJfZ2xvYiA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignZ2xvYicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdFeHBhbmQgcGFja2FnZSBuYW1lIGdsb2IgZXhwcmVzc2lvbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nRXhwYW5kcyBvbmUgb3IgbW9yZSBnbG9iIGV4cHJlc3Npb25zIG92ZXIgdGhlIHBhY2thZ2VzIGxpc3RlZCBpbiBwa2dsaXN0ZmlsZScpCisgICAgcGFyc2VyX2dsb2IuYWRkX2FyZ3VtZW50KCdwa2dsaXN0ZmlsZScsIGhlbHA9J0ZpbGUgbGlzdGluZyBwYWNrYWdlcyAob25lIHBhY2thZ2UgbmFtZSBwZXIgbGluZSknKQorICAgIHBhcnNlcl9nbG9iLmFkZF9hcmd1bWVudCgnZ2xvYicsIG5hcmdzPSIrIiwgaGVscD0nR2xvYiBleHByZXNzaW9uIGZvciBwYWNrYWdlIG5hbWVzLCBlLmcuICotZGV2JykKKyAgICBwYXJzZXJfZ2xvYi5hZGRfYXJndW1lbnQoJy14JywgJy0tZXhjbHVkZScsIGhlbHA9J0V4Y2x1ZGUgcGFja2FnZXMgbWF0Y2hpbmcgc3BlY2lmaWVkIHJlZ2V4IGZyb20gdGhlIGdsb2Igb3BlcmF0aW9uJykKKyAgICBwYXJzZXJfZ2xvYi5zZXRfZGVmYXVsdHMoZnVuYz1nbG9iKQorCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgaWYgYXJncy5kZWJ1ZzoKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisKKyAgICBpZiBub3QgYXJncy5wa2dkYXRhX2RpcjoKKyAgICAgICAgaW1wb3J0IHNjcmlwdHBhdGgKKyAgICAgICAgYml0YmFrZXBhdGggPSBzY3JpcHRwYXRoLmFkZF9iaXRiYWtlX2xpYl9wYXRoKCkKKyAgICAgICAgaWYgbm90IGJpdGJha2VwYXRoOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZmluZCBiaXRiYWtlIGJ5IHNlYXJjaGluZyBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoaXMgc2NyaXB0IG9yIFBBVEgiKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdGb3VuZCBiaXRiYWtlIHBhdGg6ICVzJyAlIGJpdGJha2VwYXRoKQorICAgICAgICB0aW5mb2lsID0gdGluZm9pbF9pbml0KCkKKyAgICAgICAgYXJncy5wa2dkYXRhX2RpciA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnVmFsdWUgb2YgUEtHREFUQV9ESVIgaXMgIiVzIicgJSBhcmdzLnBrZ2RhdGFfZGlyKQorICAgICAgICBpZiBub3QgYXJncy5wa2dkYXRhX2RpcjoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIGRldGVybWluZSBwa2dkYXRhIGRpcmVjdG9yeSBmcm9tIFBLR0RBVEFfRElSJykKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXJncy5wa2dkYXRhX2Rpcik6CisgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIGZpbmQgcGtnZGF0YSBkaXJlY3RvcnkgJXMnICUgcGtnZGF0YV9kaXIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICByZXQgPSBhcmdzLmZ1bmMoYXJncykKKworICAgIHJldHVybiByZXQKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL29lLXB1Ymxpc2gtc2RrIGIveW9jdG8tcG9reS9zY3JpcHRzL29lLXB1Ymxpc2gtc2RrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE3MzdjOWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvb2UtcHVibGlzaC1zZGsKQEAgLTAsMCArMSwxNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIE9wZW5FbWJlZGRlZCBTREsgcHVibGlzaGluZyB0b29sCisKKyMgb2UtcHVibGlzaC1zZGsgcHVibGlzaCA8ZXh0LXNkaz4gPGRlc3RpbmF0aW9uPgorIyA8ZXh0LXNkaz46IGV4dGVuc2libGUgU0RLIHRvIHB1Ymxpc2ggKHBhdGggdG8gdGhlIGluc3RhbGxlciBzaGVsbCBzY3JpcHQpCisjIDxkZXN0aW5hdGlvbj46IGxvY2FsIG9yIHJlbW90ZSBsb2NhdGlvbiB3aGljaCBzZXJ2ZXJzIGFzIGFuIFNESyB1cGRhdGUgc2VydmVyCisjIGUuZy4KKyMgb2UtcHVibGlzaC1zZGsgL3BhdGgvdG8vc2RrLWV4dC5zaCAvbW50L3Bva3kvc2RrLWV4dAorIyBvZS1wdWJsaXNoLXNkayAvcGF0aC90by9zZGstZXh0LnNoIHVzZXJAaG9zdDovb3B0L3Bva3kvc2RrLWV4dAorIworCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGdsb2IKK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgZXJybm8KKworc2NyaXB0c19wYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQorbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKK3N5cy5wYXRoID0gc3lzLnBhdGggKyBbbGliX3BhdGhdCitpbXBvcnQgc2NyaXB0dXRpbHMKK2xvZ2dlciA9IHNjcmlwdHV0aWxzLmxvZ2dlcl9jcmVhdGUoJ3Nka3Rvb2wnKQorCitkZWYgbWtkaXIoZCk6CisgICAgdHJ5OgorICAgICAgICBvcy5tYWtlZGlycyhkKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgcmFpc2UgZQorCitkZWYgcHVibGlzaChhcmdzKToKKyAgICBsb2dnZXIuZGVidWcoIkluIHB1Ymxpc2ggZnVuY3Rpb24iKQorICAgIHRhcmdldF9zZGsgPSBhcmdzLnNkaworICAgIGRlc3RpbmF0aW9uID0gYXJncy5kZXN0CisgICAgbG9nZ2VyLmRlYnVnKCJ0YXJnZXRfc2RrID0gJXMsIHVwZGF0ZV9zZXJ2ZXIgPSAlcyIgJSAodGFyZ2V0X3NkaywgZGVzdGluYXRpb24pKQorICAgIHNka19iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodGFyZ2V0X3NkaykKKworICAgICMgRW5zdXJlIHRoZSBTREsgZXhpc3RzCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRhcmdldF9zZGspOgorICAgICAgICBsb2dnZXIuZXJyb3IoIiVzIGRvZXNuJ3QgZXhpc3QiICUgdGFyZ2V0X3NkaykKKyAgICAgICAgcmV0dXJuIC0xCisKKyAgICBpZiAnOicgaW4gZGVzdGluYXRpb246CisgICAgICAgIGlzX3JlbW90ZSA9IFRydWUKKyAgICAgICAgaG9zdCwgZGVzdGRpciA9IGRlc3RpbmF0aW9uLnNwbGl0KCc6JykKKyAgICAgICAgZGVzdF9zZGsgPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgc2RrX2Jhc2VuYW1lKQorICAgIGVsc2U6CisgICAgICAgIGlzX3JlbW90ZSA9IEZhbHNlCisgICAgICAgIGRlc3Rfc2RrID0gb3MucGF0aC5qb2luKGRlc3RpbmF0aW9uLCBzZGtfYmFzZW5hbWUpCisKKyAgICAjIE1ha2luZyBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzCisgICAgbG9nZ2VyLmRlYnVnKCJNYWtpbmcgc3VyZSB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGV4aXN0cyIpCisgICAgaWYgbm90IGlzX3JlbW90ZToKKyAgICAgICAgbWtkaXIoZGVzdGluYXRpb24pCisgICAgZWxzZToKKyAgICAgICAgY21kID0gInNzaCAlcyAnbWtkaXIgLXAgJXMnIiAlIChob3N0LCBkZXN0ZGlyKQorICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKQorICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiTWFraW5nIGRpcmVjdG9yeSAlcyBvbiAlcyBmYWlsZWQiICUgKGRlc3RkaXIsIGhvc3QpKQorICAgICAgICAgICAgcmV0dXJuIHJldAorCisgICAgIyBDb3B5aW5nIHRoZSBTREsgdG8gdGhlIGRlc3RpbmF0aW9uCisgICAgbG9nZ2VyLmluZm8oIkNvcHlpbmcgdGhlIFNESyB0byBkZXN0aW5hdGlvbiIpCisgICAgaWYgbm90IGlzX3JlbW90ZToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGVzdF9zZGspOgorICAgICAgICAgICAgb3MucmVtb3ZlKGRlc3Rfc2RrKQorICAgICAgICBpZiAob3Muc3RhdCh0YXJnZXRfc2RrKS5zdF9kZXYgPT0gb3Muc3RhdChkZXN0aW5hdGlvbikuc3RfZGV2KToKKyAgICAgICAgICAgIG9zLmxpbmsodGFyZ2V0X3NkaywgZGVzdF9zZGspCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzaHV0aWwuY29weSh0YXJnZXRfc2RrLCBkZXN0X3NkaykKKyAgICBlbHNlOgorICAgICAgICBjbWQgPSAic2NwICVzICVzIiAlICh0YXJnZXRfc2RrLCBkZXN0aW5hdGlvbikKKyAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKGNtZCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgaWYgcmV0ICE9IDA6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoInNjcCAlcyAlcyBmYWlsZWQiICUgKHRhcmdldF9zZGssIGRlc3RpbmF0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiByZXQKKworICAgICMgVW5wYWNrIHRoZSBTREsKKyAgICBsb2dnZXIuaW5mbygiVW5wYWNraW5nIFNESyIpCisgICAgaWYgbm90IGlzX3JlbW90ZToKKyAgICAgICAgY21kID0gInNoICVzIC1uIC15IC1kICVzIiAlIChkZXN0X3NkaywgZGVzdGluYXRpb24pCisgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpCisgICAgICAgIGlmIHJldCA9PSAwOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1N1Y2Nlc3NmdWxseSB1bnBhY2tlZCAlcyB0byAlcycgJSAoZGVzdF9zZGssIGRlc3RpbmF0aW9uKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIHVucGFjayAlcyB0byAlcycgJSAoZGVzdF9zZGssIGRlc3RpbmF0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiByZXQKKyAgICBlbHNlOgorICAgICAgICBjbWQgPSAic3NoICVzICdzaCAlcyAtbiAteSAtZCAlcyciICUgKGhvc3QsIGRlc3Rfc2RrLCBkZXN0ZGlyKQorICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKQorICAgICAgICBpZiByZXQgPT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdTdWNjZXNzZnVsbHkgdW5wYWNrZWQgJXMgdG8gJXMnICUgKGRlc3Rfc2RrLCBkZXN0ZGlyKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIHVucGFjayAlcyB0byAlcycgJSAoZGVzdF9zZGssIGRlc3RkaXIpKQorICAgICAgICAgICAgcmV0dXJuIHJldAorCisgICAgIyBTZXR0aW5nIHVwIHRoZSBnaXQgcmVwbworICAgIGlmIG5vdCBpc19yZW1vdGU6CisgICAgICAgIGNtZCA9ICdzZXQgLWU7IGNkICVzL2xheWVyczsgaWYgWyAhIC1lIC5naXQgXTsgdGhlbiBnaXQgaW5pdCAuOyBtdiAuZ2l0L2hvb2tzL3Bvc3QtdXBkYXRlLnNhbXBsZSAuZ2l0L2hvb2tzL3Bvc3QtdXBkYXRlOyBmaTsgZ2l0IGFkZCAtQSAuOyBnaXQgY29tbWl0IC1xIC1tICJpbml0IHJlcG8iIHx8IHRydWU7JyAlIGRlc3RpbmF0aW9uCisgICAgZWxzZToKKyAgICAgICAgY21kID0gInNzaCAlcyAnc2V0IC1lOyBjZCAlcy9sYXllcnM7IGlmIFsgISAtZSAuZ2l0IF07IHRoZW4gZ2l0IGluaXQgLjsgbXYgLmdpdC9ob29rcy9wb3N0LXVwZGF0ZS5zYW1wbGUgLmdpdC9ob29rcy9wb3N0LXVwZGF0ZTsgZmk7IGdpdCBhZGQgLUEgLjsgZ2l0IGNvbW1pdCAtcSAtbSBcImluaXQgcmVwb1wiIHx8IHRydWU7JyIgJSAoaG9zdCwgZGVzdGRpcikKKyAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKQorICAgIGlmIHJldCA9PSAwOgorICAgICAgICBsb2dnZXIuaW5mbygnU0RLIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHknKQorICAgIGVsc2U6CisgICAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCB1cCBsYXllciBnaXQgcmVwbycpCisgICAgcmV0dXJuIHJldAorCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249Ik9wZW5FbWJlZGRlZCBkZXZlbG9wbWVudCB0b29sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcGlsb2c9IlVzZSAlKHByb2cpcyA8c3ViY29tbWFuZD4gLS1oZWxwIHRvIGdldCBoZWxwIG9uIGEgc3BlY2lmaWMgY29tbWFuZCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kZWJ1ZycsIGhlbHA9J0VuYWJsZSBkZWJ1ZyBvdXRwdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1xJywgJy0tcXVpZXQnLCBoZWxwPSdQcmludCBvbmx5IGVycm9ycycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdzZGsnLCBoZWxwPSdFeHRlbnNpYmxlIFNESyB0byBwdWJsaXNoJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdkZXN0JywgaGVscD0nRGVzdGluYXRpb24gdG8gcHVibGlzaCBTREsgdG8nKQorCisgICAgcGFyc2VyLnNldF9kZWZhdWx0cyhmdW5jPXB1Ymxpc2gpCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgaWYgYXJncy5kZWJ1ZzoKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisgICAgZWxpZiBhcmdzLnF1aWV0OgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5FUlJPUikKKworICAgIHJldCA9IGFyZ3MuZnVuYyhhcmdzKQorICAgIHJldHVybiByZXQKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDUpCisgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL29lLXNlbGZ0ZXN0IGIveW9jdG8tcG9reS9zY3JpcHRzL29lLXNlbGZ0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkxZTJkZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvb2Utc2VsZnRlc3QKQEAgLTAsMCArMSwyNDUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENvcHlyaWdodCAoYykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIyBERVNDUklQVElPTgorIyBUaGlzIHNjcmlwdCBydW5zIHRlc3RzIGRlZmluZWQgaW4gbWV0YS9saWIvc2VsZnRlc3QvCisjIEl0J3MgcHVycG9zZSBpcyB0byBhdXRvbWF0ZSB0aGUgdGVzdGluZyBvZiBkaWZmZXJlbnQgYml0YmFrZSB0b29scy4KKyMgVG8gdXNlIGl0IHlvdSBqdXN0IG5lZWQgdG8gc291cmNlIHlvdXIgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IGFuZAorIyBhZGQgdGhlIG1ldGEtc2VsZnRlc3QgbGF5ZXIgdG8geW91ciBCQkxBWUVSUy4KKyMgQ2FsbCB0aGUgc2NyaXB0IGFzOiAib2Utc2VsZnRlc3QiIHRvIHJ1biBhbGwgdGhlIHRlc3RzIGluIGluIG1ldGEvbGliL3NlbGZ0ZXN0LworIyBDYWxsIHRoZSBzY3JpcHQgYXM6ICJvZS1zZWxmdGVzdCA8bW9kdWxlPi48Q2xhc3M+LjxtZXRob2Q+IiB0byBydW4ganVzdCBhIHNpbmdsZSB0ZXN0CisjIEUuZzogIm9lLXNlbGZ0ZXN0IGJib3V0cHV0LkJpdGJha2VMYXllcnMiIHdpbGwgcnVuIGp1c3QgdGhlIEJpdGJha2VMYXllcnMgY2xhc3MgZnJvbSBtZXRhL2xpYi9zZWxmdGVzdC9iYm91dHB1dC5weQorCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGFyZ3BhcnNlCisKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpICsgJy9saWInKQoraW1wb3J0IHNjcmlwdHBhdGgKK3NjcmlwdHBhdGguYWRkX2JpdGJha2VfbGliX3BhdGgoKQorc2NyaXB0cGF0aC5hZGRfb2VfbGliX3BhdGgoKQorCitpbXBvcnQgb2VxYS5zZWxmdGVzdAoraW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGdldF9iYl92YXIsIGdldF90ZXN0X2xheWVyCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorCitkZWYgbG9nZ2VyX2NyZWF0ZSgpOgorICAgIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzZWxmdGVzdCIpCisgICAgbG9nLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisKKyAgICBmaCA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoZmlsZW5hbWU9J29lLXNlbGZ0ZXN0LmxvZycsIG1vZGU9J3cnKQorICAgIGZoLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisKKyAgICBjaCA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3Rkb3V0KQorICAgIGNoLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKworICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKCclKGFzY3RpbWUpcyAtICUobmFtZSlzIC0gJShsZXZlbG5hbWUpcyAtICUobWVzc2FnZSlzJykKKyAgICBmaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorICAgIGNoLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisKKyAgICBsb2cuYWRkSGFuZGxlcihmaCkKKyAgICBsb2cuYWRkSGFuZGxlcihjaCkKKworICAgIHJldHVybiBsb2cKKworbG9nID0gbG9nZ2VyX2NyZWF0ZSgpCisKK2RlZiBnZXRfYXJnc19wYXJzZXIoKToKKyAgICBkZXNjcmlwdGlvbiA9ICJTY3JpcHQgdGhhdCBydW5zIHVuaXQgdGVzdHMgYWdhaW5zIGJpdGJha2UgYW5kIG90aGVyIFlvY3RvIHJlbGF0ZWQgdG9vbHMuIFRoZSBnb2FsIGlzIHRvIHZhbGlkYXRlIHRvb2xzIGZ1bmN0aW9uYWxpdHkgYW5kIG1ldGFkYXRhIGludGVncml0eS4gUmVmZXIgdG8gaHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9PZS1zZWxmdGVzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249ZGVzY3JpcHRpb24pCisgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1UcnVlKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1ydW4tdGVzdHMnLCByZXF1aXJlZD1GYWxzZSwgYWN0aW9uPSdzdG9yZScsIG5hcmdzPScqJywgZGVzdD0icnVuX3Rlc3RzIiwgZGVmYXVsdD1Ob25lLCBoZWxwPSdTZWxlY3Qgd2hhdCB0ZXN0cyB0byBydW4gKG1vZHVsZXMsIGNsYXNzZXMgb3IgdGVzdCBtZXRob2RzKS4gRm9ybWF0IHNob3VsZCBiZTogPG1vZHVsZT4uPGNsYXNzPi48dGVzdF9tZXRob2Q+JykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tcnVuLWFsbC10ZXN0cycsIHJlcXVpcmVkPUZhbHNlLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJydW5fYWxsX3Rlc3RzIiwgZGVmYXVsdD1GYWxzZSwgaGVscD0nUnVuIGFsbCAodW5oaWRkZW4pIHRlc3RzJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tbGlzdC1tb2R1bGVzJywgcmVxdWlyZWQ9RmFsc2UsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9Imxpc3RfbW9kdWxlcyIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9J0xpc3QgYWxsIGF2YWlsYWJsZSB0ZXN0IG1vZHVsZXMuJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tbGlzdC1jbGFzc2VzJywgcmVxdWlyZWQ9RmFsc2UsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9Imxpc3RfYWxsY2xhc3NlcyIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9J0xpc3QgYWxsIGF2YWlsYWJsZSB0ZXN0IGNsYXNzZXMuJykKKyAgICByZXR1cm4gcGFyc2VyCisKKworZGVmIHByZWZsaWdodF9jaGVjaygpOgorCisgICAgbG9nLmluZm8oIkNoZWNraW5nIHRoYXQgZXZlcnl0aGluZyBpcyBpbiBvcmRlciBiZWZvcmUgcnVubmluZyB0aGUgdGVzdHMiKQorCisgICAgaWYgbm90IG9zLmVudmlyb24uZ2V0KCJCVUlMRERJUiIpOgorICAgICAgICBsb2cuZXJyb3IoIkJVSUxERElSIGlzbid0IHNldC4gRGlkIHlvdSBmb3JnZXQgdG8gc291cmNlIHlvdXIgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0PyIpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgYnVpbGRkaXIgPSBvcy5lbnZpcm9uLmdldCgiQlVJTERESVIiKQorICAgIGlmIG9zLmdldGN3ZCgpICE9IGJ1aWxkZGlyOgorICAgICAgICBsb2cuaW5mbygiQ2hhbmdpbmcgY3dkIHRvICVzIiAlIGJ1aWxkZGlyKQorICAgICAgICBvcy5jaGRpcihidWlsZGRpcikKKworICAgIGlmIG5vdCAibWV0YS1zZWxmdGVzdCIgaW4gZ2V0X2JiX3ZhcigiQkJMQVlFUlMiKToKKyAgICAgICAgbG9nLmVycm9yKCJZb3UgZG9uJ3Qgc2VlbSB0byBoYXZlIHRoZSBtZXRhLXNlbGZ0ZXN0IGxheWVyIGluIEJCTEFZRVJTIikKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBsb2cuaW5mbygiUnVubmluZyBiaXRiYWtlIC1wIikKKyAgICBydW5DbWQoImJpdGJha2UgLXAiKQorCisgICAgcmV0dXJuIFRydWUKKworZGVmIGFkZF9pbmNsdWRlKCk6CisgICAgYnVpbGRkaXIgPSBvcy5lbnZpcm9uLmdldCgiQlVJTERESVIiKQorICAgIGlmICIjaW5jbHVkZSBhZGRlZCBieSBvZS1zZWxmdGVzdC5weSIgXAorICAgICAgICBub3QgaW4gZnRvb2xzLnJlYWRfZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJjb25mL2xvY2FsLmNvbmYiKSk6CisgICAgICAgICAgICBsb2cuaW5mbygiQWRkaW5nOiBcImluY2x1ZGUgc2VsZnRlc3QuaW5jXCIgaW4gbG9jYWwuY29uZiIpCisgICAgICAgICAgICBmdG9vbHMuYXBwZW5kX2ZpbGUob3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiY29uZi9sb2NhbC5jb25mIiksIFwKKyAgICAgICAgICAgICAgICAgICAgIlxuI2luY2x1ZGUgYWRkZWQgYnkgb2Utc2VsZnRlc3QucHlcbmluY2x1ZGUgc2VsZnRlc3QuaW5jIikKKworICAgIGlmICIjaW5jbHVkZSBhZGRlZCBieSBvZS1zZWxmdGVzdC5weSIgXAorICAgICAgICBub3QgaW4gZnRvb2xzLnJlYWRfZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJjb25mL2JibGF5ZXJzLmNvbmYiKSk6CisgICAgICAgICAgICBsb2cuaW5mbygiQWRkaW5nOiBcImluY2x1ZGUgYmJsYXllcnMuaW5jXCIgaW4gYmJsYXllcnMuY29uZiIpCisgICAgICAgICAgICBmdG9vbHMuYXBwZW5kX2ZpbGUob3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiY29uZi9iYmxheWVycy5jb25mIiksIFwKKyAgICAgICAgICAgICAgICAgICAgIlxuI2luY2x1ZGUgYWRkZWQgYnkgb2Utc2VsZnRlc3QucHlcbmluY2x1ZGUgYmJsYXllcnMuaW5jIikKKworZGVmIHJlbW92ZV9pbmNsdWRlKCk6CisgICAgYnVpbGRkaXIgPSBvcy5lbnZpcm9uLmdldCgiQlVJTERESVIiKQorICAgIGlmIGJ1aWxkZGlyIGlzIE5vbmU6CisgICAgICAgIHJldHVybgorICAgIGlmICIjaW5jbHVkZSBhZGRlZCBieSBvZS1zZWxmdGVzdC5weSIgXAorICAgICAgICBpbiBmdG9vbHMucmVhZF9maWxlKG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvbG9jYWwuY29uZiIpKToKKyAgICAgICAgICAgIGxvZy5pbmZvKCJSZW1vdmluZyB0aGUgaW5jbHVkZSBmcm9tIGxvY2FsLmNvbmYiKQorICAgICAgICAgICAgZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUob3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiY29uZi9sb2NhbC5jb25mIiksIFwKKyAgICAgICAgICAgICAgICAgICAgIiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0LnB5XG5pbmNsdWRlIHNlbGZ0ZXN0LmluYyIpCisKKyAgICBpZiAiI2luY2x1ZGUgYWRkZWQgYnkgb2Utc2VsZnRlc3QucHkiIFwKKyAgICAgICAgaW4gZnRvb2xzLnJlYWRfZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJjb25mL2JibGF5ZXJzLmNvbmYiKSk6CisgICAgICAgICAgICBsb2cuaW5mbygiUmVtb3ZpbmcgdGhlIGluY2x1ZGUgZnJvbSBiYmxheWVycy5jb25mIikKKyAgICAgICAgICAgIGZ0b29scy5yZW1vdmVfZnJvbV9maWxlKG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpLCBcCisgICAgICAgICAgICAgICAgICAgICIjaW5jbHVkZSBhZGRlZCBieSBvZS1zZWxmdGVzdC5weVxuaW5jbHVkZSBiYmxheWVycy5pbmMiKQorCitkZWYgcmVtb3ZlX2luY19maWxlcygpOgorICAgIHRyeToKKyAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgiQlVJTERESVIiKSwgImNvbmYvc2VsZnRlc3QuaW5jIikpCisgICAgICAgIGZvciByb290LCBfLCBmaWxlcyBpbiBvcy53YWxrKGdldF90ZXN0X2xheWVyKCkpOgorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgZiA9PSAndGVzdF9yZWNpcGUuaW5jJzoKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihyb290LCBmKSkKKyAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yLCkgYXMgZTogICAgIyBBdHRyaWJ1dGVFcnJvciBtYXkgaGFwcGVuIGlmIEJVSUxERElSIGlzIG5vdCBzZXQKKyAgICAgICAgcGFzcworCisgICAgdHJ5OgorICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKG9zLmVudmlyb24uZ2V0KCJCVUlMRERJUiIpLCAiY29uZi9iYmxheWVycy5pbmMiKSkKKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKworZGVmIGdldF90ZXN0cyhleGNsdXNpdmVfbW9kdWxlcz1bXSwgaW5jbHVkZV9oaWRkZW49RmFsc2UpOgorICAgIHRlc3RzbGlzdCA9IFtdCisgICAgZm9yIHggaW4gZXhjbHVzaXZlX21vZHVsZXM6CisgICAgICAgIHRlc3RzbGlzdC5hcHBlbmQoJ29lcWEuc2VsZnRlc3QuJyArIHgpCisgICAgaWYgbm90IHRlc3RzbGlzdDoKKyAgICAgICAgZm9yIHRlc3RwYXRoIGluIG9lcWEuc2VsZnRlc3QuX19wYXRoX186CisgICAgICAgICAgICBmaWxlcyA9IHNvcnRlZChbZiBmb3IgZiBpbiBvcy5saXN0ZGlyKHRlc3RwYXRoKSBpZiBmLmVuZHN3aXRoKCcucHknKSBhbmQgbm90IChmLnN0YXJ0c3dpdGgoJ18nKSBhbmQgbm90IGluY2x1ZGVfaGlkZGVuKSBhbmQgbm90IGYuc3RhcnRzd2l0aCgnX18nKSBhbmQgZiAhPSAnYmFzZS5weSddKQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gJ29lcWEuc2VsZnRlc3QuJyArIGZbOi0zXQorICAgICAgICAgICAgICAgIGlmIG1vZHVsZSBub3QgaW4gdGVzdHNsaXN0OgorICAgICAgICAgICAgICAgICAgICB0ZXN0c2xpc3QuYXBwZW5kKG1vZHVsZSkKKworICAgIHJldHVybiB0ZXN0c2xpc3QKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBnZXRfYXJnc19wYXJzZXIoKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICAjIEFkZCA8bGF5ZXI+L2xpYiB0byBzeXMucGF0aCwgc28gbGF5ZXJzIGNhbiBhZGQgc2VsZnRlc3RzCisgICAgbG9nLmluZm8oIlJ1bm5pbmcgYml0YmFrZSAtZSB0byBnZXQgQkJQQVRIIikKKyAgICBiYnBhdGggPSBnZXRfYmJfdmFyKCdCQlBBVEgnKS5zcGxpdCgnOicpCisgICAgbGF5ZXJfbGliZGlycyA9IFtwIGZvciBwIGluIChvcy5wYXRoLmpvaW4obCwgJ2xpYicpIGZvciBsIGluIGJicGF0aCkgaWYgb3MucGF0aC5leGlzdHMocCldCisgICAgc3lzLnBhdGguZXh0ZW5kKGxheWVyX2xpYmRpcnMpCisgICAgcmVsb2FkKG9lcWEuc2VsZnRlc3QpCisKKyAgICBpZiBhcmdzLmxpc3RfYWxsY2xhc3NlczoKKyAgICAgICAgYXJncy5saXN0X21vZHVsZXMgPSBUcnVlCisKKyAgICBpZiBhcmdzLmxpc3RfbW9kdWxlczoKKyAgICAgICAgbG9nLmluZm8oJ0xpc3RpbmcgYWxsIGF2YWlsYWJsZSB0ZXN0IG1vZHVsZXM6JykKKyAgICAgICAgdGVzdHNsaXN0ID0gZ2V0X3Rlc3RzKGluY2x1ZGVfaGlkZGVuPVRydWUpCisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzbGlzdDoKKyAgICAgICAgICAgIG1vZHVsZSA9IHRlc3Quc3BsaXQoJy4nKVstMV0KKyAgICAgICAgICAgIGluZm8gPSAnJworICAgICAgICAgICAgaWYgbW9kdWxlLnN0YXJ0c3dpdGgoJ18nKToKKyAgICAgICAgICAgICAgICBpbmZvID0gJyAoaGlkZGVuKScKKyAgICAgICAgICAgIHByaW50IG1vZHVsZSArIGluZm8KKyAgICAgICAgICAgIGlmIGFyZ3MubGlzdF9hbGxjbGFzc2VzOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0IGltcG9ydGxpYgorICAgICAgICAgICAgICAgICAgICBtb2RsaWIgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSh0ZXN0KQorICAgICAgICAgICAgICAgICAgICBmb3IgdiBpbiB2YXJzKG1vZGxpYik6CisgICAgICAgICAgICAgICAgICAgICAgICB0ID0gdmFycyhtb2RsaWIpW3ZdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHQsIHR5cGUob2VTZWxmVGVzdCkpIGFuZCBpc3N1YmNsYXNzKHQsIG9lU2VsZlRlc3QpIGFuZCB0IT1vZVNlbGZUZXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIgLS0iLCB2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG1ldGhvZCBpbiBkaXIodCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1ldGhvZC5zdGFydHN3aXRoKCJ0ZXN0XyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAtLSAgLS0iLCBtZXRob2QKKworICAgICAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIEltcG9ydEVycm9yKSBhcyBlOgorICAgICAgICAgICAgICAgICAgICBwcmludCBlCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGlmIGFyZ3MucnVuX3Rlc3RzIG9yIGFyZ3MucnVuX2FsbF90ZXN0czoKKyAgICAgICAgaWYgbm90IHByZWZsaWdodF9jaGVjaygpOgorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICB0ZXN0c2xpc3QgPSBnZXRfdGVzdHMoZXhjbHVzaXZlX21vZHVsZXM9KGFyZ3MucnVuX3Rlc3RzIG9yIFtdKSwgaW5jbHVkZV9oaWRkZW49RmFsc2UpCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IE5vbmUKKyAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIodmVyYm9zaXR5PTIsIHJlc3VsdGNsYXNzPVN0YW1wZWRSZXN1bHQpCisgICAgICAgICMgd2UgbmVlZCB0byBkbyB0aGlzIGhlcmUsIG90aGVyd2lzZSBqdXN0IGxvYWRpbmcgdGhlIHRlc3RzCisgICAgICAgICMgd2lsbCB0YWtlIDIgbWludXRlcyAoYml0YmFrZSAtZSBjYWxscykKKyAgICAgICAgb2VTZWxmVGVzdC50ZXN0bGF5ZXJfcGF0aCA9IGdldF90ZXN0X2xheWVyKCkKKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHNsaXN0OgorICAgICAgICAgICAgbG9nLmluZm8oIkxvYWRpbmcgdGVzdHMgZnJvbTogJXMiICUgdGVzdCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0cyhsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUodGVzdCkpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIkZhaWxlZCB0byBpbXBvcnQgJXMiICUgdGVzdCkKKyAgICAgICAgICAgICAgICBsb2cuZXJyb3IoZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBhZGRfaW5jbHVkZSgpCisgICAgICAgIHJlc3VsdCA9IHJ1bm5lci5ydW4oc3VpdGUpCisgICAgICAgIGxvZy5pbmZvKCJGaW5pc2hlZCIpCisgICAgICAgIGlmIHJlc3VsdC53YXNTdWNjZXNzZnVsKCk6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIDEKKworY2xhc3MgU3RhbXBlZFJlc3VsdCh1bml0dGVzdC5UZXh0VGVzdFJlc3VsdCk6CisgICAgIiIiCisgICAgQ3VzdG9tIFRlc3RSZXN1bHQgdGhhdCBwcmludHMgdGhlIHRpbWUgd2hlbiBhIHRlc3Qgc3RhcnRzLiAgQXMgb2Utc2VsZnRlc3QKKyAgICBjYW4gdGFrZSBhIGxvbmcgdGltZSAoaWUgYSBmZXcgaG91cnMpIHRvIHJ1biwgdGltZXN0YW1wcyBoZWxwIHVzIHVuZGVyc3RhbmQKKyAgICB3aGF0IHRlc3RzIGFyZSB0YWtpbmcgYSBsb25nIHRpbWUgdG8gZXhlY3V0ZS4KKyAgICAiIiIKKyAgICBkZWYgc3RhcnRUZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSh0aW1lLnN0cmZ0aW1lKCIlWS0lbS0lZCAlSDolTTolUyIsIHRpbWUubG9jYWx0aW1lKCkpICsgIiAtICIpCisgICAgICAgIHN1cGVyKFN0YW1wZWRSZXN1bHQsIHNlbGYpLnN0YXJ0VGVzdCh0ZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBmaW5hbGx5OgorICAgICAgICByZW1vdmVfaW5jbHVkZSgpCisgICAgICAgIHJlbW92ZV9pbmNfZmlsZXMoKQorICAgIHN5cy5leGl0KHJldCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1zZXR1cC1idWlsZGRpciBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1zZXR1cC1idWlsZGRpcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNTk4YmE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL29lLXNldHVwLWJ1aWxkZGlyCkBAIC0wLDAgKzEsMTQwIEBACisjIS9iaW4vc2gKKworIyBPRSBCdWlsZCBFbnZpcm9ubWVudCBTZXR1cCBTY3JpcHQKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTEgTGludXggRm91bmRhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKK2lmIFsgLXogIiRCVUlMRERJUiIgXTsgdGhlbgorICAgIGVjaG8gPiYyICJFcnJvcjogVGhlIGJ1aWxkIGRpcmVjdG9yeSAoQlVJTERESVIpIG11c3QgYmUgc2V0ISIKKyAgICBleGl0IDEKK2ZpCisKK21rZGlyIC1wICIkQlVJTERESVIvY29uZiIKKworaWYgWyAhIC1kICIkQlVJTERESVIiIF07IHRoZW4KKyAgICBlY2hvID4mMiAiRXJyb3I6IFRoZSBidWlsZGRpciAoJEJVSUxERElSKSBkb2VzIG5vdCBleGlzdCEiCisgICAgZXhpdCAxCitmaQorCitpZiBbICEgLXcgIiRCVUlMRERJUiIgXTsgdGhlbgorICAgIGVjaG8gPiYyICJFcnJvcjogQ2Fubm90IHdyaXRlIHRvICRCVUlMRERJUiwgcGVyaGFwcyB0cnkgc291cmNpbmcgd2l0aCBhIHdyaXRhYmxlIHBhdGg/IGkuZS4gLiBvZS1pbml0LWJ1aWxkLWVudiB+L215LWJ1aWxkIgorICAgIGV4aXQgMQorZmkKKworIyBBdHRlbXB0aW5nIHJlbW92YWwgb2Ygc3RpY2t5LHNldHVpZCBiaXRzIGZyb20gQlVJTERESVIsIEJVSUxERElSL2NvbmYKK2NobW9kIC1zdCAiJEJVSUxERElSIiAyPi9kZXYvbnVsbCB8fCBlY2hvICJXQVJOSU5HOiB1bmFibGUgdG8gY2htb2QgJEJVSUxERElSIgorY2htb2QgLXN0ICIkQlVJTERESVIvY29uZiIgMj4vZGV2L251bGwgfHwgZWNobyAiV0FSTklORzogdW5hYmxlIHRvIGNobW9kICRCVUlMRERJUi9jb25mIgorCitjZCAiJEJVSUxERElSIgorCitpZiBbIC1mICIkQlVJTERESVIvY29uZi90ZW1wbGF0ZWNvbmYuY2ZnIiBdOyB0aGVuCisgICAgVEVNUExBVEVDT05GPSQoY2F0ICIkQlVJTERESVIvY29uZi90ZW1wbGF0ZWNvbmYuY2ZnIikKK2ZpCisKKy4gJE9FUk9PVC8udGVtcGxhdGVjb25mCisKK2lmIFsgISAtZiAiJEJVSUxERElSL2NvbmYvdGVtcGxhdGVjb25mLmNmZyIgXTsgdGhlbgorICAgIGVjaG8gIiRURU1QTEFURUNPTkYiID4iJEJVSUxERElSL2NvbmYvdGVtcGxhdGVjb25mLmNmZyIKK2ZpCisKKyMgCisjICRURU1QTEFURUNPTkYgY2FuIHBvaW50IHRvIGEgZGlyZWN0b3J5IGZvciB0aGUgdGVtcGxhdGUgbG9jYWwuY29uZiAmIGJibGF5ZXJzLmNvbmYKKyMKK2lmIFsgLW4gIiRURU1QTEFURUNPTkYiIF07IHRoZW4KKyAgICBpZiBbICEgLWQgIiRURU1QTEFURUNPTkYiIF07IHRoZW4KKyAgICAgICAgIyBBbGxvdyBURU1QTEFURUNPTkY9bWV0YS14eXovY29uZiBhcyBhIHNob3J0Y3V0CisgICAgICAgIGlmIFsgLWQgIiRPRVJPT1QvJFRFTVBMQVRFQ09ORiIgXTsgdGhlbgorICAgICAgICAgICAgVEVNUExBVEVDT05GPSIkT0VST09ULyRURU1QTEFURUNPTkYiCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgISAtZCAiJFRFTVBMQVRFQ09ORiIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyA+JjIgIkVycm9yOiAnJFRFTVBMQVRFQ09ORicgbXVzdCBiZSBhIGRpcmVjdG9yeSBjb250YWluaW5nIGxvY2FsLmNvbmYgJiBiYmxheWVycy5jb25mIgorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgIGZpCisgICAgZmkKKyAgICBPRUNPUkVMQVlFUkNPTkY9IiRURU1QTEFURUNPTkYvYmJsYXllcnMuY29uZi5zYW1wbGUiCisgICAgT0VDT1JFTE9DQUxDT05GPSIkVEVNUExBVEVDT05GL2xvY2FsLmNvbmYuc2FtcGxlIgorICAgIE9FQ09SRU5PVEVTQ09ORj0iJFRFTVBMQVRFQ09ORi9jb25mLW5vdGVzLnR4dCIKK2ZpCisKK3Vuc2V0IFNIT1dZUERPQworaWYgWyAteiAiJE9FQ09SRUxPQ0FMQ09ORiIgXTsgdGhlbgorICAgIE9FQ09SRUxPQ0FMQ09ORj0iJE9FUk9PVC9tZXRhL2NvbmYvbG9jYWwuY29uZi5zYW1wbGUiCitmaQoraWYgWyAhIC1yICIkQlVJTERESVIvY29uZi9sb2NhbC5jb25mIiBdOyB0aGVuCitjYXQgPDxFT00KK1lvdSBoYWQgbm8gY29uZi9sb2NhbC5jb25mIGZpbGUuIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIGhhcyB0aGVyZWZvcmUgYmVlbgorY3JlYXRlZCBmb3IgeW91IHdpdGggc29tZSBkZWZhdWx0IHZhbHVlcy4gWW91IG1heSB3aXNoIHRvIGVkaXQgaXQgdG8gdXNlIGEgCitkaWZmZXJlbnQgTUFDSElORSAodGFyZ2V0IGhhcmR3YXJlKSBvciBlbmFibGUgcGFyYWxsZWwgYnVpbGQgb3B0aW9ucyB0byB0YWtlIAorYWR2YW50YWdlIG9mIG11bHRpcGxlIGNvcmVzIGZvciBleGFtcGxlLiBTZWUgdGhlIGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gYXMgCitjb21tb24gY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBjb21tZW50ZWQuCisKK0VPTQorICAgIGNwIC1mICRPRUNPUkVMT0NBTENPTkYgIiRCVUlMRERJUi9jb25mL2xvY2FsLmNvbmYiCisgICAgU0hPV1lQRE9DPXllcworZmkKKworaWYgWyAteiAiJE9FQ09SRUxBWUVSQ09ORiIgXTsgdGhlbgorICAgIE9FQ09SRUxBWUVSQ09ORj0iJE9FUk9PVC9tZXRhL2NvbmYvYmJsYXllcnMuY29uZi5zYW1wbGUiCitmaQoraWYgWyAhIC1yICIkQlVJTERESVIvY29uZi9iYmxheWVycy5jb25mIiBdOyB0aGVuCisgICAgY2F0IDw8RU9NCitZb3UgaGFkIG5vIGNvbmYvYmJsYXllcnMuY29uZiBmaWxlLiBUaGUgY29uZmlndXJhdGlvbiBmaWxlIGhhcyBiZWVuIGNyZWF0ZWQgZm9yCit5b3Ugd2l0aCBzb21lIGRlZmF1bHQgdmFsdWVzLiBUbyBhZGQgYWRkaXRpb25hbCBtZXRhZGF0YSBsYXllcnMgaW50byB5b3VyCitjb25maWd1cmF0aW9uIHBsZWFzZSBhZGQgZW50cmllcyB0byB0aGlzIGZpbGUuCisKK0VPTQorCisgICAgIyBQdXQgdGhlIGFib3NvbHV0ZSBwYXRoIHRvIHRoZSBsYXllcnMgaW4gYmJsYXllcnMuY29uZiBzbyB3ZSBjYW4gcnVuCisgICAgIyBiaXRiYWtlIHdpdGhvdXQgdGhlIGluaXQgc2NyaXB0IGFmdGVyIHRoZSBmaXJzdCBydW4KKyAgICAjICMjQ09SRUJBU0UjIyBpcyBkZXByZWNhdGVkIGFzIGl0J3MgbWVhbmluZyB3YXMgaW5jb25zaXN0ZW50LCBidXQgY29udGludWUKKyAgICAjIHRvIHJlcGxhY2UgaXQgZm9yIGNvbXBhdGliaWxpdHkuCisgICAgc2VkIC1lICJzfCMjT0VST09UIyN8JE9FUk9PVHxnIiBcCisgICAgICAgIC1lICJzfCMjQ09SRUJBU0UjI3wkT0VST09UfGciIFwKKyAgICAgICAgJE9FQ09SRUxBWUVSQ09ORiA+ICIkQlVJTERESVIvY29uZi9iYmxheWVycy5jb25mIgorICAgIFNIT1dZUERPQz15ZXMKK2ZpCisKKyMgUHJldmVudCBkaXN0dXJiaW5nIGEgbmV3IEdJVCBjbG9uZSBpbiBzYW1lIGNvbnNvbGUKK3Vuc2V0IE9FQ09SRUxPQ0FMQ09ORgordW5zZXQgT0VDT1JFTEFZRVJDT05GCisKKyMgRW5kaW5nIHRoZSBmaXJzdC10aW1lIHJ1biBtZXNzYWdlLiBTaG93IHRoZSBZUCBEb2N1bWVudGF0aW9uIGJhbm5lci4KK2lmIFsgISAteiAiJFNIT1dZUERPQyIgXTsgdGhlbgorICAgIGNhdCA8PEVPTQorVGhlIFlvY3RvIFByb2plY3QgaGFzIGV4dGVuc2l2ZSBkb2N1bWVudGF0aW9uIGFib3V0IE9FIGluY2x1ZGluZyBhIHJlZmVyZW5jZQorbWFudWFsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdDoKKyAgICBodHRwOi8veW9jdG9wcm9qZWN0Lm9yZy9kb2N1bWVudGF0aW9uCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IE9wZW5FbWJlZGRlZCBzZWUgdGhlaXIgd2Vic2l0ZToKKyAgICBodHRwOi8vd3d3Lm9wZW5lbWJlZGRlZC5vcmcvCisKK0VPTQorIyAgICB1bnNldCBTSE9XWVBET0MKK2ZpCisKK2NhdCA8PEVPTQorCisjIyMgU2hlbGwgZW52aXJvbm1lbnQgc2V0IHVwIGZvciBidWlsZHMuICMjIworCitZb3UgY2FuIG5vdyBydW4gJ2JpdGJha2UgPHRhcmdldD4nCisKK0VPTQoraWYgWyAteiAiJE9FQ09SRU5PVEVTQ09ORiIgXTsgdGhlbgorICAgIE9FQ09SRU5PVEVTQ09ORj0iJE9FUk9PVC9tZXRhL2NvbmYvY29uZi1ub3Rlcy50eHQiCitmaQorWyAhIC1yICIkT0VDT1JFTk9URVNDT05GIiBdIHx8IGNhdCAkT0VDT1JFTk9URVNDT05GCit1bnNldCBPRUNPUkVOT1RFU0NPTkYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1zZXR1cC1ycG1yZXBvIGIveW9jdG8tcG9reS9zY3JpcHRzL29lLXNldHVwLXJwbXJlcG8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTE3Yjk4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1zZXR1cC1ycG1yZXBvCkBAIC0wLDAgKzEsOTcgQEAKKyMhL2Jpbi9iYXNoCisjCisjIFRoaXMgdXRpbGl0eSBzZXR1cCB0aGUgbmVjZXNzYXJ5IG1ldGFkYXRhIGZvciBhbiBycG0gcmVwbworIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSW50ZWwgQ29ycC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworCisjIERvbid0IHVzZSBUTVBESVIgZnJvbSB0aGUgZXh0ZXJuYWwgZW52aXJvbm1lbnQsIGl0IG1heSBiZSBhIGRpc3RybworIyB2YXJpYWJsZSBwb2ludGluZyB0byAvdG1wIChlLmcuIHdpdGhpbiBYIG9uIE9wZW5TVVNFKQorIyBJbnN0ZWFkLCB1c2UgT0VfVE1QRElSIGZvciBwYXNzaW5nIHRoaXMgaW4gZXh0ZXJuYWxseS4KK1RNUERJUj0iJE9FX1RNUERJUiIKKworZnVuY3Rpb24gdXNhZ2UoKSB7CisJZWNobyAiVXNhZ2U6ICQwIDxycG0tZGlyPiIKKwllY2hvICIgIDxycG0tZGlyPjogZGVmYXVsdCBpcyAkVE1QRElSL2RlcGxveS9ycG0iCit9CisKK2lmIFsgJCMgLWd0IDEgXTsgdGhlbgorCXVzYWdlCisJZXhpdCAxCitmaQorCitzZXR1cF90bXBkaXIoKSB7CisgICAgaWYgWyAteiAiJFRNUERJUiIgXTsgdGhlbgorICAgICAgICAjIFRyeSB0byBnZXQgVE1QRElSIGZyb20gYml0YmFrZQorICAgICAgICB0eXBlIC1QIGJpdGJha2UgJj4vZGV2L251bGwgfHwgeworICAgICAgICAgICAgZWNobyAiSW4gb3JkZXIgZm9yIHRoaXMgc2NyaXB0IHRvIGR5bmFtaWNhbGx5IGluZmVyIHBhdGhzIjsKKyAgICAgICAgICAgIGVjaG8gInRvIGtlcm5lbHMgb3IgZmlsZXN5c3RlbSBpbWFnZXMsIHlvdSBlaXRoZXIgbmVlZCI7CisgICAgICAgICAgICBlY2hvICJiaXRiYWtlIGluIHlvdXIgUEFUSCBvciB0byBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYiOworICAgICAgICAgICAgZWNobyAiYmVmb3JlIHJ1bm5pbmcgdGhpcyBzY3JpcHQiID4mMjsKKyAgICAgICAgICAgIGV4aXQgMTsgfQorCisgICAgICAgICMgV2UgaGF2ZSBiaXRiYWtlIGluIFBBVEgsIGdldCBUTVBESVIgZnJvbSBiaXRiYWtlCisgICAgICAgIFRNUERJUj1gYml0YmFrZSAtZSB8IGdyZXAgXlRNUERJUj1cIiB8IGN1dCAtZCAnPScgLWYyIHwgY3V0IC1kICciJyAtZjJgCisgICAgICAgIGlmIFsgLXogIiRUTVBESVIiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkVycm9yOiB0aGlzIHNjcmlwdCBuZWVkcyB0byBiZSBydW4gZnJvbSB5b3VyIGJ1aWxkIGRpcmVjdG9yeSwiCisgICAgICAgICAgICBlY2hvICJvciB5b3UgbmVlZCB0byBleHBsaWNpdGx5IHNldCBUTVBESVIgaW4geW91ciBlbnZpcm9ubWVudCIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorICAgIGZpCit9CisKK3NldHVwX3N5c3Jvb3QoKSB7CisJIyBUb29sY2hhaW4gaW5zdGFsbHMgc2V0IHVwICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgaW4gdGhlaXIKKwkjIGVudmlyb25tZW50IHNjcmlwdC4gSWYgdGhhdCB2YXJpYWJsZSBpc24ndCBzZXQsIHdlJ3JlCisJIyBlaXRoZXIgaW4gYW4gaW4tdHJlZSBwb2t5IHNjZW5hcmlvIG9yIHRoZSBlbnZpcm9ubWVudAorCSMgc2NyaXB0IHdhc24ndCBzb3VyY2UnZC4KKwlpZiBbIC16ICIkT0VDT1JFX05BVElWRV9TWVNST09UIiBdOyB0aGVuCisJCXNldHVwX3RtcGRpcgorCQlCVUlMRF9BUkNIPWB1bmFtZSAtbWAKKwkJQlVJTERfT1M9YHVuYW1lIHwgdHIgJ1tBLVpdJyAnW2Etel0nYAorCQlCVUlMRF9TWVM9IiRCVUlMRF9BUkNILSRCVUlMRF9PUyIKKworCQlPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9JFRNUERJUi9zeXNyb290cy8kQlVJTERfU1lTCisJZmkgCit9CisKK3NldHVwX3RtcGRpcgorc2V0dXBfc3lzcm9vdAorCisKK2lmIFsgLW4gIiQxIiBdOyB0aGVuCisJUlBNX0RJUj0iJDEiCitlbHNlCisJUlBNX0RJUj0iJFRNUERJUi9kZXBsb3kvcnBtIgorZmkKKworaWYgWyAhIC1kICIkUlBNX0RJUiIgXTsgdGhlbgorICAgCWVjaG8gIkVycm9yOiBycG0gZGlyICRSUE1fRElSIGRvZXNuJ3QgZXhpc3QiCisJZXhpdCAxCitmaQorCitDUkVBVEVSRVBPPSRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvdXNyL2Jpbi9jcmVhdGVyZXBvCitpZiBbICEgLWUgIiRDUkVBVEVSRVBPIiBdOyB0aGVuCisgICAJZWNobyAiRXJyb3I6IGNhbid0IGZpbmQgY3JlYXRlcmVwbyBiaW5hcnkiCisJZWNobyAicGxlYXNlIHJ1biBiaXRiYWtlIGNyZWF0ZXJlcG8tbmF0aXZlIGZpcnN0IgorCWV4aXQgMQorZmkKKworZXhwb3J0IFBBVEg9JHtQQVRIfToke09FQ09SRV9OQVRJVkVfU1lTUk9PVH0vdXNyL2JpbgorCiskQ1JFQVRFUkVQTyAiJFJQTV9ESVIiCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL29lLXRyaW0tc2NoZW1hcyBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZS10cmltLXNjaGVtYXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjlmYjNhMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZS10cmltLXNjaGVtYXMKQEAgLTAsMCArMSw0OSBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgc3lzCit0cnk6CisgICAgaW1wb3J0IHhtbC5ldHJlZS5jRWxlbWVudFRyZWUgYXMgZXRyZWUKK2V4Y2VwdDoKKyAgICBpbXBvcnQgeG1sLmV0cmVlLkVsZW1lbnRUcmVlIGFzIGV0cmVlCisKK2RlZiBjaGlsZCAoZWxlbSwgbmFtZSk6CisgICAgZm9yIGUgaW4gZWxlbS5nZXRjaGlsZHJlbigpOgorICAgICAgICBpZiBlLnRhZyA9PSBuYW1lOgorICAgICAgICAgICAgcmV0dXJuIGUKKyAgICByZXR1cm4gTm9uZQorCitkZWYgY2hpbGRyZW4gKGVsZW0sIG5hbWU9Tm9uZSk6CisgICAgbCA9IGVsZW0uZ2V0Y2hpbGRyZW4oKQorICAgIGlmIG5hbWU6CisgICAgICAgIGwgPSBbZSBmb3IgZSBpbiBsIGlmIGUudGFnID09IG5hbWVdCisgICAgcmV0dXJuIGwKKworeG1sID0gZXRyZWUucGFyc2Uoc3lzLmFyZ3ZbMV0pCisKK2ZvciBzY2hlbWEgaW4gY2hpbGQoeG1sLmdldHJvb3QoKSwgInNjaGVtYWxpc3QiKS5nZXRjaGlsZHJlbigpOgorICAgIGUgPSBjaGlsZChzY2hlbWEsICJzaG9ydCIpCisgICAgaWYgZSBpcyBub3QgTm9uZToKKyAgICAgICAgc2NoZW1hLnJlbW92ZShlKQorCisgICAgZSA9IGNoaWxkKHNjaGVtYSwgImxvbmciKQorICAgIGlmIGUgaXMgbm90IE5vbmU6CisgICAgICAgIHNjaGVtYS5yZW1vdmUoZSkKKworICAgIGZvciBsb2NhbGUgaW4gY2hpbGRyZW4oc2NoZW1hLCAibG9jYWxlIik6CisgICAgICAgICMgT25lIGxvY2FsZSBtdXN0IGV4aXN0IHNvIGxlYXZlIEMgbG9jYWxlLi4uCisgICAgICAgIGEgPSBsb2NhbGUuYXR0cmliLmdldCgibmFtZSIpCisgICAgICAgIGlmIGEgPT0gJ0MnOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZSA9IGNoaWxkKGxvY2FsZSwgImRlZmF1bHQiKQorICAgICAgICBpZiBlIGlzIE5vbmU6CisgICAgICAgICAgICBzY2hlbWEucmVtb3ZlKGxvY2FsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGUgPSBjaGlsZChsb2NhbGUsICJzaG9ydCIpCisgICAgICAgICAgICBpZiBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGxvY2FsZS5yZW1vdmUoZSkKKyAgICAgICAgICAgIGUgPSBjaGlsZChsb2NhbGUsICJsb25nIikKKyAgICAgICAgICAgIGlmIGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbG9jYWxlLnJlbW92ZShlKQorCit4bWwud3JpdGUoc3lzLnN0ZG91dCwgIlVURi04IikKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL29lcHlkZXZzaGVsbC1pbnRlcm5hbC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZXB5ZGV2c2hlbGwtaW50ZXJuYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjdiMmU0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZXB5ZGV2c2hlbGwtaW50ZXJuYWwucHkKQEAgLTAsMCArMSw5MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBmY250bAoraW1wb3J0IHRlcm1pb3MKK2ltcG9ydCByZWFkbGluZQoraW1wb3J0IHNpZ25hbAorCitkZWYgbm9uYmxvY2tpbmdmZChmZCk6CisgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKSB8IG9zLk9fTk9OQkxPQ0spCisKK2RlZiBlY2hvbm9jYnJlYWsoZmQpOgorICAgIG9sZCA9IHRlcm1pb3MudGNnZXRhdHRyKGZkKQorICAgIG9sZFszXSA9IG9sZFszXSB8IHRlcm1pb3MuRUNITyB8IHRlcm1pb3MuSUNBTk9OCisgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRlcm1pb3MuVENTQURSQUlOLCBvbGQpCisKK2RlZiBjYnJlYWtub2VjaG8oZmQpOgorICAgIG9sZCA9IHRlcm1pb3MudGNnZXRhdHRyKGZkKQorICAgIG9sZFszXSA9IG9sZFszXSAmfiB0ZXJtaW9zLkVDSE8gJn4gdGVybWlvcy5JQ0FOT04KKyAgICB0ZXJtaW9zLnRjc2V0YXR0cihmZCwgdGVybWlvcy5UQ1NBRFJBSU4sIG9sZCkKKworaWYgbGVuKHN5cy5hcmd2KSAhPSAzOgorICAgIHByaW50KCJJbmNvcnJlY3QgcGFyYW1ldGVycyIpCisgICAgc3lzLmV4aXQoMSkKKworcHR5ID0gb3BlbihzeXMuYXJndlsxXSwgIncrYiIsIDApCitwYXJlbnQgPSBpbnQoc3lzLmFyZ3ZbMl0pCisKKyMgRG9uJ3QgYnVmZmVyIG91dHB1dCBieSBsaW5lIGVuZGluZ3MKK3N5cy5zdGRvdXQgPSBvcy5mZG9wZW4oc3lzLnN0ZG91dC5maWxlbm8oKSwgJ3cnLCAwKQorc3lzLnN0ZGluID0gb3MuZmRvcGVuKHN5cy5zdGRpbi5maWxlbm8oKSwgJ3InLCAwKQorbm9uYmxvY2tpbmdmZChwdHkpCitub25ibG9ja2luZ2ZkKHN5cy5zdGRpbikKKworCitoaXN0ZmlsZSA9IG9zLnBhdGguZXhwYW5kdXNlcigifi8ub2VkZXZweXNoZWxsLWhpc3RvcnkiKQorcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoInRhYjogY29tcGxldGUiKQordHJ5OgorICAgIHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlKGhpc3RmaWxlKQorZXhjZXB0IElPRXJyb3I6CisgICAgcGFzcyAKKwordHJ5OgorCisgICAgaSA9ICIiCisgICAgbyA9ICIiCisgICAgIyBOZWVkIGNicmVhay9ub2VjaG8gd2hpbHN0IGluIHNlbGVjdCBzbyB3ZSB0cmlnZ2VyIG9uIGFueSBrZXlwcmVzcworICAgIGNicmVha25vZWNobyhzeXMuc3RkaW4uZmlsZW5vKCkpCisgICAgIyBTZW5kIG91ciBQSUQgdG8gdGhlIG90aGVyIGVuZCBzbyB0aGV5IGNhbiBraWxsIHVzLgorICAgIHB0eS53cml0ZShzdHIob3MuZ2V0cGlkKCkpICsgIlxuIikKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3cml0ZXJzID0gW10KKyAgICAgICAgICAgIGlmIGk6CisgICAgICAgICAgICAgICAgd3JpdGVycy5hcHBlbmQoc3lzLnN0ZG91dCkKKyAgICAgICAgICAgIChyZWFkeSwgXywgXykgPSBzZWxlY3Quc2VsZWN0KFtwdHksIHN5cy5zdGRpbl0sIHdyaXRlcnMgLCBbXSwgMCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBwdHkgaW4gcmVhZHk6CisgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgcHR5LnJlYWQoKQorICAgICAgICAgICAgICAgIGlmIGk6CisgICAgICAgICAgICAgICAgICAgICMgV3JpdGUgYSBwYWdlIGF0IGEgdGltZSB0byBhdm9pZCBvdmVyZmxvd2luZyBvdXRwdXQgCisgICAgICAgICAgICAgICAgICAgICMgZC5rZXlzKCkgaXMgYSBnb29kIHdheSB0byBkbyB0aGF0CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoaVs6NDA5Nl0pCisgICAgICAgICAgICAgICAgICAgIGkgPSBpWzQwOTY6XQorICAgICAgICAgICAgICAgIGlmIHN5cy5zdGRpbiBpbiByZWFkeToKKyAgICAgICAgICAgICAgICAgICAgZWNob25vY2JyZWFrKHN5cy5zdGRpbi5maWxlbm8oKSkKKyAgICAgICAgICAgICAgICAgICAgbyA9IHJhd19pbnB1dCgpCisgICAgICAgICAgICAgICAgICAgIGNicmVha25vZWNobyhzeXMuc3RkaW4uZmlsZW5vKCkpCisgICAgICAgICAgICAgICAgICAgIHB0eS53cml0ZShvICsgIlxuIikKKyAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgT1NFcnJvcikgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IDExOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gNToKKyAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMCkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgICAgIHN5cy5leGl0KDApCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIG9zLmtpbGwocGFyZW50LCBzaWduYWwuU0lHSU5UKQorCitleGNlcHQgU3lzdGVtRXhpdDoKKyAgICBwYXNzCitleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgaW1wb3J0IHRyYWNlYmFjaworICAgIHByaW50KCJFeGNlcHRpb24gaW4gb2VweWRlaHNoZWxsLWludGVybmFsOiAiICsgc3RyKGUpKQorICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgIHRpbWUuc2xlZXAoNSkKK2ZpbmFsbHk6CisgICAgcmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlKGhpc3RmaWxlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL29wa2ctcXVlcnktaGVscGVyLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL29wa2ctcXVlcnktaGVscGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJmYjFhNzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvb3BrZy1xdWVyeS1oZWxwZXIucHkKQEAgLTAsMCArMSw4NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgT3BlbkVtYmVkZGVkIG9wa2cgcXVlcnkgaGVscGVyIHV0aWxpdHkKKyMKKyMgV3JpdHRlbiBieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisjCisjIENvcHlyaWdodCAyMDEyIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIworCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBmaWxlaW5wdXQKK2ltcG9ydCByZQorCithcmNobW9kZSA9IEZhbHNlCitmaWxlbW9kZSA9IEZhbHNlCit2ZXJtb2RlID0gRmFsc2UKKworYXJncyA9IFtdCitmb3IgYXJnIGluIHN5cy5hcmd2WzE6XToKKyAgICBpZiBhcmcgPT0gJy1hJzoKKyAgICAgICAgYXJjaG1vZGUgPSBUcnVlCisgICAgZWxpZiBhcmcgPT0gJy1mJzoKKyAgICAgICAgZmlsZW1vZGUgPSBUcnVlCisgICAgZWxpZiBhcmcgPT0gJy12JzoKKyAgICAgICAgdmVybW9kZSA9IFRydWUKKyAgICBlbHNlOgorICAgICAgICBhcmdzLmFwcGVuZChhcmcpCisKKyMgUmVnZXggZm9yIHJlbW92aW5nIHZlcnNpb24gc3BlY3MgYWZ0ZXIgZGVwZW5kZW5jeSBpdGVtcwordmVycmVnZXggPSByZS5jb21waWxlKCcgXChbPTw+XSogW14gKV0qXCknKQorCitwa2cgPSAiIgordmVyID0gIiIKK2ZvciBsaW5lIGluIGZpbGVpbnB1dC5pbnB1dChhcmdzKToKKyAgICBsaW5lID0gbGluZS5yc3RyaXAoKQorICAgIGlmICc6ICcgaW4gbGluZToKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJQYWNrYWdlOiIpOgorICAgICAgICAgICAgcGtnID0gbGluZS5zcGxpdCgiOiAiKVsxXQorICAgICAgICAgICAgdmVyID0gIiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGFyY2htb2RlOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiQXJjaGl0ZWN0dXJlOiIpOgorICAgICAgICAgICAgICAgICAgICBhcmNoID0gbGluZS5zcGxpdCgiOiAiKVsxXQorICAgICAgICAgICAgICAgICAgICBwcmludCgiJXMgJXMiICUgKHBrZyxhcmNoKSkKKyAgICAgICAgICAgIGVsaWYgZmlsZW1vZGU6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJWZXJzaW9uOiIpOgorICAgICAgICAgICAgICAgICAgICB2ZXIgPSBsaW5lLnNwbGl0KCI6ICIpWzFdCisgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoIkFyY2hpdGVjdHVyZToiKToKKyAgICAgICAgICAgICAgICAgICAgYXJjaCA9IGxpbmUuc3BsaXQoIjogIilbMV0KKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIiVzICVzXyVzXyVzLmlwayAlcyIgJSAocGtnLHBrZyx2ZXIsYXJjaCxhcmNoKSkKKyAgICAgICAgICAgIGVsaWYgdmVybW9kZToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlZlcnNpb246Iik6CisgICAgICAgICAgICAgICAgICAgIHZlciA9IGxpbmUuc3BsaXQoIjogIilbMV0KKyAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiQXJjaGl0ZWN0dXJlOiIpOgorICAgICAgICAgICAgICAgICAgICBhcmNoID0gbGluZS5zcGxpdCgiOiAiKVsxXQorICAgICAgICAgICAgICAgICAgICBwcmludCgiJXMgJXMgJXMiICUgKHBrZyxhcmNoLHZlcikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiRGVwZW5kczoiKToKKyAgICAgICAgICAgICAgICAgICAgZGVwdmFsID0gbGluZS5zcGxpdCgiOiAiKVsxXQorICAgICAgICAgICAgICAgICAgICBkZXBzID0gZGVwdmFsLnNwbGl0KCIsICIpCisgICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcCA9IHZlcnJlZ2V4LnN1YignJywgZGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIiVzfCVzIiAlIChwa2csZGVwKSkKKyAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiUmVjb21tZW5kczoiKToKKyAgICAgICAgICAgICAgICAgICAgcmVjdmFsID0gbGluZS5zcGxpdCgiOiAiKVsxXQorICAgICAgICAgICAgICAgICAgICByZWNzID0gcmVjdmFsLnNwbGl0KCIsICIpCisgICAgICAgICAgICAgICAgICAgIGZvciByZWMgaW4gcmVjczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYyA9IHZlcnJlZ2V4LnN1YignJywgcmVjKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIiVzfCVzIFtSRUNdIiAlIChwa2csIHJlYykpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3Bvc3RpbnN0X2ludGVyY2VwdCBiL3lvY3RvLXBva3kvc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3Bvc3RpbnN0X2ludGVyY2VwdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMThlODA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvcG9zdGluc3RfaW50ZXJjZXB0CkBAIC0wLDAgKzEsNTYgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIHNjcmlwdCBpcyBjYWxsZWQgZnJvbSBpbnNpZGUgcG9zdGluc3RhbGwgc2NyaXB0bGV0cyBhdCBkb19yb290ZnMgdGltZS4gSXQKKyMgYWN0dWFsbHkgYWRkcywgYXQgdGhlIGVuZCwgdGhlIGxpc3Qgb2YgcGFja2FnZXMgZm9yIHdoaWNoIHRoZSBpbnRlcmNlcHQgc2NyaXB0CisjIGlzIHZhbGlkLiBBbHNvLCBpZiBvbmUgd2FudHMgdG8gcGFzcyBhbnkgdmFyaWFibGVzIHRvIHRoZSBpbnRlcmNlcHQgc2NyaXB0IGZyb20KKyMgdGhlIHBvc3RpbnN0YWxsIGl0c2VsZiwgdGhleSB3aWxsIGJlIGFkZGVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBzaGViYW5nIGxpbmUuCisjCisjIFVzYWdlOiBwb3N0aW5zdF9pbnRlcmNlcHQgPGludGVyY2VwdF9zY3JpcHRfbmFtZT4gPHBhY2thZ2VfbmFtZT4gPG1scHJlZml4PS4uLj4gPHZhcjE9Li4uPiAuLi4gPHZhck49Li4uPgorIyAgKiBpbnRlcmNlcHRfc2NyaXB0X25hbWUgLSB0aGUgbmFtZSBvZiB0aGUgaW50ZXJjZXB0IHNjcmlwdCB3ZSB3YW50IHRvIGNoYW5nZTsKKyMgICogcGFja2FnZV9uYW1lIC0gYWRkIHRoZSBwYWNrYWdlX25hbWUgdG8gbGlzdCBvZiBwYWNrYWdlcyB0aGUgaW50ZXJjZXB0IHNjcmlwdAorIyAgICAgICAgICAgICAgICAgICBpcyB1c2VkIGZvcjsKKyMgICogbWxwcmVmaXg9Li4uIC0gdGhpcyBvbmUgaXMgbmVlZGVkIGluIG9yZGVyIHRvIGhhdmUgc2VwYXJhdGUgaG9va3MgZm9yIG11bHRpbGliLgorIyAgKiB2YXIxPS4uLiAtIHZhcjEgd2lsbCBoYXZlIHRoZSB2YWx1ZSB3ZSBwcm92aWRlIGluIHRoZSBpbnRlcmNlcHQgc2NyaXB0LiBUaGlzCisjICAgICAgICAgICAgICAgaXMgdXNlZnVsIHdoZW4gd2Ugd2FudCB0byBwYXNzIG9uIHZhcmlhYmxlcyBsaWtlICR7bGliZGlyfSB0bworIyAgICAgICAgICAgICAgIHRoZSBpbnRlcmNlcHQgc2NyaXB0OworIworWyAkIyAtbHQgMyBdICYmIGV4aXQgMQorCitpbnRlcmNlcHRfc2NyaXB0PSRJTlRFUkNFUFRfRElSLyQxICYmIHNoaWZ0CitwYWNrYWdlX25hbWU9JDEgJiYgc2hpZnQKK21scHJlZml4PSQoZWNobyAkMSB8c2VkIC1uZSAicy9ebWxwcmVmaXg9XCguKlwpLS9cMS9wIikgJiYgc2hpZnQKKworIyBpZiB0aGUgaG9vayB3ZSB3YW50IHRvIGluc3RhbGwgZG9lcyBub3QgZXhpc3QsIHRoZW4gdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkbworWyAtZiAiJGludGVyY2VwdF9zY3JpcHQiIF0gfHwgZXhpdCAxCisKKyMgaWYgdGhlIHBvc3RpbnN0YWxsIHdhbnRpbmcgdG8gaW5zdGFsbCB0aGUgaG9vayBiZWxvbmdzIHRvIGEgbXVsdGlsaWIgcGFja2FnZSwKKyMgdGhlbiB3ZSdkIGJldHRlciBoYXZlIGEgc2VwYXJhdGUgaG9vayBmb3IgdGhpcyBiZWNhdXNlIHRoZSBkZWZhdWx0ICR7bGliZGlyfSBhbmQKKyMgJHtiYXNlX2xpYmRpcn0gd2lsbCBwb2ludCB0byB0aGUgd3JvbmcgbG9jYXRpb25zCitpZiBbIC1uICIkbWxwcmVmaXgiIF07IHRoZW4KKwltbF9pbnRlcmNlcHRfc2NyaXB0PSRpbnRlcmNlcHRfc2NyaXB0LSRtbHByZWZpeAorCSMgaWYgdGhlIG11bHRpbGliIGhvb2sgZG9lcyBub3QgZXhpc3QsIGNyZWF0ZSBpdCBmcm9tIHRoZSBkZWZhdWx0IG9uZQorCWlmIFsgISAtZiAiJG1sX2ludGVyY2VwdF9zY3JpcHQiIF07IHRoZW4KKwkJY3AgJGludGVyY2VwdF9zY3JpcHQgJG1sX2ludGVyY2VwdF9zY3JpcHQKKworCQkjIGNsZWFyIHRoZSAjI1BLR1M6IGxpbmUgYW5kIHRoZSBhbHJlYWR5IHNldCB2YXJpYWJsZXMKKwkJWyAteCAiJG1sX2ludGVyY2VwdF9zY3JpcHQiIF0gJiYgc2VkIC1pIC1lICIyLCQoKCQjKzEpKSB7Ly4qL2R9IiAtZSAiL14jI1BLR1M6IC4qL2QiICRtbF9pbnRlcmNlcHRfc2NyaXB0CisJZmkKKworCWludGVyY2VwdF9zY3JpcHQ9JG1sX2ludGVyY2VwdF9zY3JpcHQKK2ZpCisKK2NobW9kICt4ICIkaW50ZXJjZXB0X3NjcmlwdCIKKworcGtnc19saW5lPSQoZ3JlcCAiIyNQS0dTOiIgJGludGVyY2VwdF9zY3JpcHQpCitpZiBbIC1uICIkcGtnc19saW5lIiBdOyB0aGVuCisJIyBsaW5lIGV4aXN0cywgYWRkIHRoaXMgcGFja2FnZSB0byB0aGUgbGlzdCBvbmx5IGlmIGl0J3Mgbm90IGFscmVhZHkgdGhlcmUKKwlpZiBbIC16ICIkKGVjaG8gIiRwa2dzX2xpbmUiIHwgZ3JlcCAiICRwYWNrYWdlX25hbWUgIikiIF07IHRoZW4KKwkJc2VkIC1pIC1lICJzLyMjUEtHUzouKi9cMCR7cGFja2FnZV9uYW1lfSAvIiAkaW50ZXJjZXB0X3NjcmlwdAorCWZpCitlbHNlCisJZm9yIHZhciBpbiAiJEAiOyBkbworCQlzZWQgLWkgLWUgIlwlXiNcIS9iaW4vLipzaCVhICR2YXIiICRpbnRlcmNlcHRfc2NyaXB0CisJZG9uZQorCWVjaG8gIiMjUEtHUzogJHtwYWNrYWdlX25hbWV9ICIgPj4gJGludGVyY2VwdF9zY3JpcHQKK2ZpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9mb250X2NhY2hlIGIveW9jdG8tcG9reS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvdXBkYXRlX2ZvbnRfY2FjaGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhjNjAxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9mb250X2NhY2hlCkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisKK1BTRVVET19VTkxPQUQ9MSBxZW11d3JhcHBlciAtTCAkRCAtRSBMRF9MSUJSQVJZX1BBVEg9JEQvJHtsaWJkaXJ9OiRELyR7YmFzZV9saWJkaXJ9XAorCQkJCQkkRCR7YmluZGlyfS9mYy1jYWNoZSAtLXN5c3Jvb3Q9JEQKK2Nob3duIC1SIHJvb3Q6cm9vdCAkRCR7Zm9udGNvbmZpZ2NhY2hlZGlyfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvdXBkYXRlX2ljb25fY2FjaGUgYi95b2N0by1wb2t5L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy91cGRhdGVfaWNvbl9jYWNoZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTE3YTZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvdXBkYXRlX2ljb25fY2FjaGUKQEAgLTAsMCArMSwxMiBAQAorIyEvYmluL3NoCisKK3NldCAtZQorIyB1cGRhdGUgbmF0aXZlIHBpeGJ1ZiBsb2FkZXJzCitnZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgLS11cGRhdGUtY2FjaGUKKworZm9yIGljb25kaXIgaW4gJEQvdXNyL3NoYXJlL2ljb25zLyovIDsgZG8KKyAgICBpZiBbIC1kICRpY29uZGlyIF0gOyB0aGVuCisgICAgICAgIGd0ay11cGRhdGUtaWNvbi1jYWNoZSAtZnF0ICAkaWNvbmRpcgorICAgIGZpCitkb25lCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9waXhidWZfY2FjaGUgYi95b2N0by1wb2t5L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy91cGRhdGVfcGl4YnVmX2NhY2hlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1YmY0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy91cGRhdGVfcGl4YnVmX2NhY2hlCkBAIC0wLDAgKzEsMTEgQEAKKyMhL2Jpbi9zaAorCitleHBvcnQgR0RLX1BJWEJVRl9NT0RVTEVESVI9JEQke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvMi4xMC4wL2xvYWRlcnMKK2V4cG9ydCBHREtfUElYQlVGX0ZBVEFMX0xPQURFUj0xCisKK1BTRVVET19VTkxPQUQ9MSBxZW11d3JhcHBlciAtTCAkRCAtRSBMRF9MSUJSQVJZX1BBVEg9JEQvJHtsaWJkaXJ9OiRELyR7YmFzZV9saWJkaXJ9XAorICAgICREJHtiaW5kaXJ9L2dkay1waXhidWYtcXVlcnktbG9hZGVycyBcCisgICAgPiRHREtfUElYQlVGX01PRFVMRURJUi8uLi9sb2FkZXJzLmNhY2hlICYmIFwKKyAgICBzZWQgLWkgLWUgInM6JEQ6OmciICRHREtfUElYQlVGX01PRFVMRURJUi8uLi9sb2FkZXJzLmNhY2hlCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL0FVVEhPUlMgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvQVVUSE9SUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzJiN2U5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL0FVVEhPUlMKQEAgLTAsMCArMSwxMSBAQAorTWljaGFlbCBNZWVrcyA8bWljaGFlbC5tZWVrc0Bub3ZlbGwuY29tPgorQW5kZXJzIE5vcmdhYXJkIDxhbmRlcnMubm9yZ2FhcmRAZ21haWwuY29tPgorU2NvdHQgSmFtZXMgUmVtbmFudCA8c2NvdHRAdWJ1bnR1LmNvbT4KK0hlbm5pbmcgTmlzcyA8aGVubmluZ25pc3NAZ21haWwuY29tPgorUmljY2FyZG8gTWFnbGlvY2NoZXR0aSA8cmljY2FyZG8ubWFnbGlvY2NoZXR0aUBnbWFpbC5jb20+CisKK0NvbnRyaWJ1dG9yczoKKwlCcmlhbiBFd2lucworCitCYXNlZCBvbiB3b3JrIGJ5OgorCVppZ2EgTWFoa292ZWMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9DT1BZSU5HIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ4N2FjZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9DT1BZSU5HCkBAIC0wLDAgKzEsMzQwIEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQSAKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvTUFJTlRBSU5FUlMgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvTUFJTlRBSU5FUlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY1ZTEzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9NQUlOVEFJTkVSUwpAQCAtMCwwICsxLDMgQEAKK1JpY2NhcmRvIE1hZ2xpb2NjaGV0dGkgPHJpY2NhcmRvLm1hZ2xpb2NjaGV0dGlAZ21haWwuY29tPgorTWljaGFlbCBNZWVrcyA8bWljaGFlbC5tZWVrc0Bub3ZlbGwuY29tPgorSGFyYWxkIEhveWVyIDxoYXJhbGRAcmVkaGF0LmNvbT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9ORVdTIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL05FV1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M1YjJmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9ORVdTCkBAIC0wLDAgKzEsMjA0IEBACitib290Y2hhcnQyIDAuMTQuNToKKwkrIHB5Ym9vdGNoYXJ0Z3VpIChSaWNjYXJkbykKKwkJKyBGaXggdGVzdHMgd2l0aCBweXRob24zCisJCSsgRml4IHBhcnNpbmcgb2YgZmlsZXMgd2l0aCBub24tYXNjaWkgYnl0ZXMKKwkJKyBSb2J1c3RuZXNzIGZpeGVzIHRvIHRhc2tzdGF0cyBhbmQgbWVtaW5mbyBwYXJzaW5nCisJCSsgTW9yZSBweXRob24zIGZpeGVzCisKK2Jvb3RjaGFydDIgMC4xNC40OgorCSsgYm9vdGNoYXJ0ZAorCQkrIEFkZCByZWxldmFudCBFWElUX1BST0MgZm9yIEdOT01FMywgWEZDRTQsIG9wZW5ib3gKKwkJICAoSnVzdGluIExlY2hlciwgQmVuIEVpbGxzKQorCSsgcHlib290Y2hhcnRndWkgKFJpY2NhcmRvKQorCQkrIEZpeCBzb21lIGlzc3VlcyBpbiAtLWNyb3AtYWZ0ZXIgYW5kIC0tYW5ub3RhdGUKKwkJKyBGaXggcHlib290Y2hhcnRndWkgcHJvY2Vzc190cmVlIHRlc3RzCisJCSsgTW9yZSBweXRob24zIGZpeGVzCisKK2Jvb3RjaGFydDIgMC4xNC4yOgorCSsgcHlib290Y2hhcnRndWkKKwkJKyBGaXggc29tZSBjcmFzaGVzIGluIHBhcnNpbmcucHkgKEpha3ViIEN6YXBsaWNraSwgUmljY2FyZG8pCisJCSsgc3BlZWR1cCBhIGJpdCBtZW1pbmZvIHBhcnNpbmcgKFJpY2NhcmRvKQorCQkrIEZpeCBpbmRlbnRhdGlvbiBmb3IgcHl0aG9uMy4yIChSaWNjYXJkbykKKworYm9vdGNoYXJ0MiAwLjE0LjE6CisJKyBib290Y2hhcnRkCisJCSsgRXhwZWN0IGRtZXNnIG9ubHkgaWYgc3RhcnRlZCBhcyBpbml0IChIZW5yeSBZZWkpCisJCSsgbG9vayBmb3IgYm9vdGNoYXJ0X2luaXQgaW4gdGhlIGVudmlyb25tZW50IChIZW5yeSBHZWJoYXJkdCkKKwkrIHB5Ym9vdGNoYXJ0Z3VpCisJCSsgRml4dXAgc29tZSB0ZXN0cyAoUmljY2FyZG8pCisJCSsgU3VwcG9ydCBocCBzbWFydCBhcnJheXMgYmxvY2sgZGV2aWNlcyAoQW5kZXJzIE5vcmdhYXJkLAorCQkgIEJyaWFuIE11cnJheSkKKwkJKyBGaXhlcyBmb3IgLXQsIC1vIGFuZCAtZiBvcHRpb25zIChNbGFkZW4gS3VudG5lciwgSGFyYWxkLCBSaWNjYXJkbykKKworYm9vdGNoYXJ0MiAwLjE0LjA6CisJKyBib290Y2hhcnRkCisJCSsgQWRkIGFiaWxpdHkgdG8gZGVmaW5lIGN1c3RvbSBjb21tYW5kcworCQkgIChMdWNpYW4gTXVyZXNhbiwgUGV0ZXIgSGphbG1hcnNzb24pCisJKyBjb2xsZWN0b3IKKwkJKyBmaXggdG1wZnMgbW91bnQgbGVha2FnZSAoUGV0ZXIgSGphbG1hcnNzb24pCisJKyBweWJvb3RjaGFydGd1aQorCQkrIHJlbmRlciBjdW11bGF0aXZlIEkvTyB0aW1lIGNoYXJ0IChTYW5rYXIgUCkKKwkJKyBweXRob24zIGNvbXBhdGliaWxpdHkgZml4ZXMgKFJpY2NhcmRvKQorCSsgTWlzYyAoTWljaGFlbCkKKwkJKyByZW1vdmUgY29uZnVzaW5nLCBvYnNvbGV0ZSBzZXR1cC5weQorCQkrIGluc3RhbGwgZG9jcyB0byAvdXNyL3NoYXJlLworCQkrIGxvdCBvZiBmaXhlcyBmb3IgZWFzaWVyIHBhY2thZ2luZyAoUGV0ZXIgSGphbG1hcnNzb24pCisJCSsgYWRkIGJvb3RjaGFydDIsIGJvb3RjaGFydGQgYW5kIHB5Ym9vdGNoYXJ0Z3VpIG1hbnBhZ2VzCisJCSAgKEZyYW5jZXNjYSBDaWNlcmksIERhdmlkIFBhbGVpbm8pCisKK2Jvb3RjaGFydDIgMC4xMi42OgorCSsgYm9vdGNoYXJ0ZAorCQkrIGJldHRlciBjaGVjayBmb3IgaW5pdHJkIChSaWNjYXJkbyBNYWdsaW9jY2hldHRpKQorCQkrIGNvZGUgY2xlYW51cCAoUmljY2FyZG8pCisJCSsgbWFrZSB0aGUgbGlzdCBvZiBwcm9jZXNzZXMgd2UgYXJlIHdhaXRpbmcgZm9yIGVkaXRhYmxlCisJCSAgaW4gY29uZmlnIGZpbGUgYnkgRVhJVF9QUk9DIChSaWNjYXJkbykKKwkJKyBmaXggcGFyc2luZyBvZiBjbWRsaW5lIGZvciBhbHRlcm5hdGl2ZSBpbml0IHN5c3RlbSAoUmljY2FyZG8pCisJCSsgZml4ZWQgY2FsbGluZyBpbml0IGluIGluaXRyYW1mcyAoSGFyYWxkKQorCQkrIGV4aXQgMCBmb3Igc3RhcnQsIGlmIHRoZSBjb2xsZWN0b3IgaXMgYWxyZWFkeSBydW5uaW5nIChIYXJhbGQpCisJKyBjb2xsZWN0b3IKKwkJKyB0cnkgaGFyZGVyIHdpdGggdGFza3N0YXRzIChNaWNoYWVsKQorCQkrIHBsdWcgc29tZSBzbWFsbCBsZWFrcyAoUmljY2FyZG8pCisJCSsgZml4IG1pc3NpbmcgUFJPQ19FVkVOVFMgZGV0ZWN0aW9uIChIYXJhbGQpCisJKyBweWJvb3RjaGFydGd1aSAoTWljaGFlbCkKKwkJKyBhZGQga2VybmVsIGJvb3RjaGFydCB0YWIgdG8gaW50ZXJhY3RpdmUgZ3VpCisJCSsgcmVwb3J0IGJvb3RjaGFydCB2ZXJzaW9uIGluIGNsaSBpbnRlcmZhY2UKKwkJKyBpbXByb3ZlIHJlbmRlcmluZyBwZXJmb3JtYW5jZQorCQkrIEdVSSBpbXByb3ZlbWVudHMKKwkJKyBsb3Qgb2YgY2xlYW51cHMKKwkrIE1ha2VmaWxlCisJCSsgZG8gbm90IHB5dGhvbiBjb21waWxlIGlmIE5PX1BZVEhPTl9DT01QSUxFIGlzIHNldCAoSGFyYWxkKQorCSsgc3lzdGVtZCBzZXJ2aWNlIGZpbGVzCisJCSsgYWRkZWQgdGhlbSBhbmQgaW5zdGFsbCAoSGFyYWxkLCBXdWxmIEMuIEtydWVnZXIpCisKK2Jvb3RjaGFydDIgMC4xMi41OgorCSsgYWRtaW5pc3RyYXRpdmUgc25hZnUgdmVyc2lvbjsgcHVsbCBiZWZvcmUgcHVzaGluZy4uLgorCitib290Y2hhcnQyIDAuMTIuNDoKKwkrIGJvb3RjaGFydGQKKwkJKyByZWR1Y2Ugb3ZlcmhlYWQgY2F1c2VkIGJ5IHBpZG9mIChSaWNjYXJkbyBNYWdsaW9jY2hldHRpKQorCSsgY29sbGVjdG9yCisJCSsgYXR0ZW1wdCB0byByZXRyeSBwdHJhY2UgdG8gYXZvaWQgYm9ndXMgRU5PU1lTIChNaWNoYWVsKQorCQkrIGFkZCBtZW1pbmZvIHBvbGxpbmcgKERhdmUgTWFydGluKQorCSsgcHlib290Y2hhcnRndWkKKwkJKyBoYW5kbGUgZG1lc2cgdGltZXN0YW1wcyB3aXRoIGJpZyBkZWx0YSAoUmljY2FyZG8pCisJCSsgYXZvaWQgZGl2aWRlIGJ5IHplcm8gd2hlbiByZW5kZXJpbmcgSS9PIHV0aWxpemF0aW9uIChSaWNjYXJkbykKKwkJKyBhZGQgcHJvY2VzcyBncm91cGluZyBpbiB0aGUgY3VtdWxhdGl2ZSBjaGFydCAoUmljY2FyZG8pCisJCSsgZml4IGNwdSB0aW1lIGNhbGN1bGF0aW9uIGluIGN1bXVsYXRpdmUgY2hhcnQgKFJpY2NhcmRvKQorCQkrIGdldCBpL28gc3RhdGlzdGljcyBmb3IgZmxhc2ggYmFzZWQgZGV2aWNlcyAoUmljY2FyZG8pCisJCSsgcHJldHRpZXIgY29sb3JpbmcgZm9yIHRoZSBjdW11bGF0aXZlIGdyYXBocyAoTWljaGFlbCkKKwkJKyBmaXggaW50ZXJhY3RpdmUgQ1BVIHJlbmRlcmluZyAoTWljaGFlbCkKKwkJKyByZW5kZXIgbWVtb3J5IHVzYWdlIGdyYXBoIChEYXZlIE1hcnRpbikKKworYm9vdGNoYXJ0MiAwLjEyLjMKKwkrIGNvbGxlY3RvcgorCQkrIHBjbG9zZSBhZnRlciBwb3BlbiAoUmljY2FyZG8gTWFnbGlvY2NoZXR0aSAoeHJteCkpCisJCSsgZml4IGJ1ZmZlciBvdmVyZmxvdyAoeHJteCkKKwkJKyBjb3VudCAncHJvY2Vzc29yOicgaW4gL3Byb2MvY3B1aW5mbyBmb3IgQVJNIChNaWNoYWVsKQorCQkrIGdldCBtb2RlbCBuYW1lIGZyb20gdGhhdCBsaW5lIHRvbyBmb3IgQVJNICh4cm14KQorCQkrIHN0b3JlIC9wcm9jL2NwdWluZm8gaW4gdGhlIGJvb3QtY2hhcnQgYXJjaGl2ZSAoeHJteCkKKwkJKyB0cnkgaGFyZGVyIHRvIGRldGVjdCBtaXNzaW5nIFRBU0tTVEFUUyAoTWljaGFlbCkKKwkJKyBzYW5pdHktY2hlY2sgaW52YWxpZCBkb21haW4gbmFtZXMgKE1pY2hhZWwpCisJCSsgZGV0ZWN0IG1pc3NpbmcgUFJPQ19FVkVOVFMgbW9yZSByZWxpYWJseSAoTWljaGFlbCkKKwkJKyBSRUFETUUgZml4ZXMgKHhybXgsIE1pY2hhZWwpCisJKyBweWJvb3RjaGFydGd1aQorCQkrIG1ha2UgbnVtX2NwdSBwYXJzaW5nIHJvYnVzdCAoTWljaGFlbCkKKworYm9vdGNoYXJ0MiAwLjEyLjIKKyAJKyBmaXggcHRocmVhZCBjb21waWxlIC8gbGlua2luZyBidWcKKworYm9vdGNoYXJ0MiAwLjEyLjEKKwkrIHB5Ym9vdGNoYXJ0Z3VpCisJCSsgcHlsaW50IGNsZWFudXAKKwkJKyBoYW5kbGUgZW1wdHkgdHJhY2VzIG1vcmUgZWxlZ2FudGx5CisJCSsgYWRkICctdCcgLyAnLS1ib290LXRpbWUnIGFyZ3VtZW50IChNYXR0aGV3IEJhdWVyKQorCSsgY29sbGVjdG9yCisJCSsgbm93IEdQTHYyCisJCSsgYWRkIHJkaW5pdCBzdXBwb3J0IGZvciB2ZXJ5IGVhcmx5IGluaXRyZCB0cmFjaW5nCisJCSsgY2xlYW51cCAvIHJlLWZhY3RvciBjb2RlIGludG8gc2VwYXJhdGUgbW9kdWxlcworCQkrIHJlLWZhY3RvciBhcmcgcGFyc2luZywgYW5kIHBhcnNlIHJlbW90ZSBwcm9jZXNzIGFyZ3MKKwkJKyBoYW5kbGUgbWlzc2luZyBib290Y2hhcnRkLmNvbmYgY2xlYW5seQorCQkrIG1vdmUgbXVjaCBvZiBib290Y2hhcnRkIGZyb20gc2hlbGwgLT4gQworCQkJKyBkcm9wIGRtZXNnIGFuZCB1bmFtZSB1c2FnZQorCQkJKyBhdm9pZCBycG0vZHBrZyB3aXRoIG5hdGl2ZSB2ZXJzaW9uIHJlcG9ydGluZworCitib290Y2hhcnQyIDAuMTIuMCAoTWljaGFlbCBNZWVrcykKKwkrIGNvbGxlY3RvcgorCQkrIHVzZSBuZXRsaW5rIFBST0NfRVZFTlRTIHRvIGdlbmVyYXRlIHBhcmVudGFnZSBkYXRhCisJCQkrIGZpbmFsbHkga2lsbHMgYW55IG5lZWQgZm9yICdhY2N0JyBldC4gYWwuCisJCQkrIGFsc28gcmVtb3ZlcyBuZWVkIHRvIHBvbGwgL3Byb2MgPT4gZmFzdGVyCisJCSsgY2xlYW51cCBjb2RlIHRvIEsmUiwgOCBzdG9wIHRhYnMuCisJKyBweWJvb3RjaGFydGd1aQorCQkrIGNvbnN1bWUgdGhyZWFkIHBhcmVudGFnZSBkYXRhCisKK2Jvb3RjaGFydDIgMC4xMS40IChNaWNoYWVsIE1lZWtzKQorCSsgY29sbGVjdG9yCisJCSsgaWYgcnVuIGluc2lkZSBhbiBpbml0cmQgZGV0ZWN0IHdoZW4gL2RldiBpcyB3cml0YWJsZQorCQkgIGFuZCByZW1vdW50IG91cnNlbHZlcyBpbnRvIHRoYXQuCisJCSsgb3ZlcmZsb3cgYnVmZmVycyBtb3JlIGVsZWdhbnRseSBpbiBleHRyZW1pcworCQkrIGR1bXAgZnVsbCBwcm9jZXNzIHBhdGggYW5kIGNvbW1hbmQtbGluZSBhcmdzCisJCSsgY2FsbSBkb3duIGRlYnVnZ2luZyBvdXRwdXQKKwkrIHB5Ym9vdGNoYXJ0Z3VpCisJCSsgY2FuIHJlbmRlciBsb2dzIGluIGEgZGlyZWN0b3J5IGFnYWluCisJCSsgaGFzIGEgJ3Nob3cgbW9yZScgb3B0aW9uIHRvIHNob3cgY29tbWFuZC1saW5lcworCitib290Y2hhcnQyIDAuMTEuMyAoTWljaGFlbCBNZWVrcykKKwkrIGFkZCAkJCBkaXNwbGF5IHRvIHRoZSBib290Y2hhcnQgaGVhZGVyCisJKyBwcm9jZXNzIGNvbW1hbmQtbGluZSBiaXRzCisJCSsgZml4IGNvbGxlY3Rpb24gY29kZSwgYW5kIHJlbmFtZSBzdHJlYW0gdG8gbWF0Y2gKKwkJKyBlbmFibGUgcGFyc2luZywgYWRkIGNoZWNrIGJ1dHRvbiB0byBVSSwgYW5kIC0tc2hvdy1hbGwKKwkJICBjb21tYW5kLWxpbmUgb3B0aW9uCisJKyBmaXggcGFyc2luZyBvZiBkaXJlY3RvcmllcyBmdWxsIG9mIGZpbGVzLgorCitib290Y2hhcnQyIDAuMTEuMiAoTWljaGFlbCBNZWVrcykKKwkrIGZpeCBpbml0cmQgc2FuaXR5IGNoZWNrIHRvIHVzZSB0aGUgcmlnaHQgcHJvYyBwYXRoCisJKyBkb24ndCByZXR1cm4gYSBib2d1cyBlcnJvciB2YWx1ZSB3aGVuIGR1bXBpbmcgc3RhdGUKKwkrIGFkZCAtYyB0byBhaWQgbWFudWFsIGNvbnNvbGUgZGVidWdnaW5nCisKK2Jvb3RjaGFydDIgMC4xMS4xIChNaWNoYWVsIE1lZWtzKQorCSsgZXZlbiBzaW1wbGVyIGluaXRyZCBzZXR1cAorCQkrIGNyZWF0ZSBhIHNpbmdsZSBkaXJlY3Rvcnk6IC9saWIvYm9vdGNoYXJ0L3RtcGZzCisKK2Jvb3RjaGFydDIgMC4xMSAoTWljaGFlbCBNZWVrcykKKwkrIGJvb3RjaGFydGQKKwkJKyBmYXIsIGZhciBzaW1wbGVyLCBsZXNzIHNoZWxsLCBtb3JlIHJvYnVzdG5lc3MgZXRjLgorCSsgYm9vdGNoYXJ0LWNvbGxlY3RvcgorCQkrIHJlbW92ZSB0aGUgLXAgYXJndW1lbnQgLSB3ZSBhbHdheXMgbW91bnQgcHJvYworCQkrIHJlcXVpcmVzIC9saWIvYm9vdGNoYXJ0IChtYWtlIGluc3RhbGwtY2hyb290KSB0bworCQkgIGJlIHByZXNlbnQgKGFsc28gaW4gdGhlIGluaXRyZCkgWyB3aXRoIGEga21zZworCQkgIG5vZGUgaW5jbHVkZWQgXQorCQkrIGFkZCBhIC0tcHJvYmUtcnVubmluZyBtb2RlCisJKyBwdHJhY2UgcmUtd3JpdGUKKwkJKyBnaXZlcyAtbXVjaC0gYmV0dGVyIGVhcmx5LWJvb3QtdGltZSByZXNvbHV0aW9uCisJCSsgdW5jb25kaXRpb25hbCBjaHJvb3QgL2xpYi9ib290Y2hhcnQvY2hyb290CisJCQkrIHdlIG1vdW50IHByb2MgdGhlcmUgb3Vyc2VsdmVzCisJCSsgbG9nIGV4dHJhY3Rpb24gcmVxdWlyZXMgbm8gY29tbW9uIGZpbGUtc3lzdGVtIHZpZXcKKworCitib290Y2hhcnQyIDAuMTAuMSAoS2VsIE1vZGRlcm1hbikKKwkrIGNvbGxlY3RvciBhcmcgLW0gc2hvdWxkIG1vdW50IC9wcm9jCisJKyByZW1vdmUgYm9ndXMgdmNzaWQgY29kZQorCSsgc3BsaXQgY29sbGVjdG9yIGluc3RhbGwgaW4gTWFrZWZpbGUKKwkrIHJlbW92ZSBib2d1cyBkZWJ1ZyBjb2RlCisJKyBhY2NlcHQgcHJvY2VzcyBuYW1lcyBjb250YWluaW5nIHNwYWNlcworCitib290Y2hhcnQyIDAuMTAuMAorCSsgcmVuZGVyaW5nIChBbmRlcnMgTm9yZ2FhcmQpCisJCSsgZml4IGZvciB1bmtub3duIGV4Y2VwdGlvbnMKKwkrIGludGVyYWN0aXZlIFVJIChNaWNoYWVsKQorCQkrIG11Y2ggZmFzdGVyIHJlbmRlcmluZyBieSBtYW51YWwgY2xpcHBpbmcKKwkJKyBob3Jpem9udGFsIHNjYWxpbmcKKwkJKyByZW1vdmUgYW5ub3lpbmcgcGFnZS11cC9kb3duIGJpbmRpbmdzCisJKyBpbml0cmQgcG9ydGFiaWxpdHkgJiBmaXhlcyAoRmVkZXJpYyBDcm96YXQpCisJCSsgcG9ydCB0byBNYW5kcml2YQorCQkrIGltcHJvdmVkIHByb2Nlc3Mgd2FpdGluZworCQkrIGluaXR0YWIgY29tbWVudGluZyBmaXgKKwkJKyBpbXByb3ZlZCBpbml0cmQgZGV0ZWN0aW9uIC8gamFpbCB0YWdnaW5nCisJCSsgZml4IGZvciB1bi1kZXRlY3RhYmxlIGFjY3RvbiBiZWhhdmlvdXIgY2hhbmdlCisJCSsgaW1wbGVtZW50IGEgYnVpbHQtaW4gdXNsZWVwIHRvIGhlbHAgaW5pdHJkIGRlcHMgKE1pY2hhZWwpCisKK2Jvb3RjaGFydDIgMC4wLjkKKwkrIGZpeCBpbml0cmQgYnVnCisKK2Jvb3RjaGFydDIgMC4wLjgKKwkrIGFkZCBhIGZpbGVuYW1lIHN0cmluZyB0byB0aGUgd2luZG93IHRpdGxlIGluIGludGVyYWN0aXZlIG1vZGUKKwkrIGFkZCBhIE5FV1MgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL1JFQURNRS5weWJvb3RjaGFydCBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9SRUFETUUucHlib290Y2hhcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY0MmU2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9SRUFETUUucHlib290Y2hhcnQKQEAgLTAsMCArMSwzNyBAQAorCQkJICAgIFBZQk9PVENIQVJUR1VJCisJCQkgICAtLS0tLS0tLS0tLS0tLS0tCisKK3B5Ym9vdGNoYXJ0Z3VpIGlzIGEgdG9vbCAobm93IGluY2x1ZGVkIGFzIHBhcnQgb2YgYm9vdGNoYXJ0MikgZm9yCit2aXN1YWxpemF0aW9uIGFuZCBhbmFseXNpcyBvZiB0aGUgR05VL0xpbnV4IGJvb3QgcHJvY2Vzcy4gSXQgcmVuZGVycwordGhlIG91dHB1dCBvZiB0aGUgYm9vdC1sb2dnZXIgdG9vbCBib290Y2hhcnQgKHNlZQoraHR0cDovL3d3dy5ib290Y2hhcnQub3JnLykgdG8gZWl0aGVyIHRoZSBzY3JlZW4gb3IgZmlsZXMgb2YgdmFyaW91cworZm9ybWF0cy4gQm9vdGNoYXJ0IGNvbGxlY3RzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9jZXNzZXMsIHRoZWlyCitkZXBlbmRlbmNpZXMsIGFuZCByZXNvdXJjZSBjb25zdW1wdGlvbiBkdXJpbmcgYm9vdCBvZiBhIEdOVS9MaW51eAorc3lzdGVtLiBUaGUgcHlib290Y2hhcnRndWkgdG9vbHMgdmlzdWFsaXplcyB0aGUgcHJvY2VzcyB0cmVlIGFuZAorb3ZlcmFsbCByZXNvdXJjZSB1dGlsaXphdGlvbi4KKworcHlib290Y2hhcnRndWkgaXMgYSBwb3J0IG9mIHRoZSB2aXN1YWxpemF0aW9uIHBhcnQgb2YgYm9vdGNoYXJ0IGZyb20KK0phdmEgdG8gUHl0aG9uIGFuZCBDYWlyby4KKworQWRhcHRlZCBmcm9tIHRoZSBib290Y2hhcnQtZG9jdW1lbnRhdGlvbjoKKworICBUaGUgQ1BVIGFuZCBkaXNrIHN0YXRpc3RpY3MgYXJlIHVzZWQgdG8gcmVuZGVyIHN0YWNrZWQgYXJlYSBhbmQgbGluZQorICBjaGFydHMuIFRoZSBwcm9jZXNzIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gY3JlYXRlIGEgR2FudHQgY2hhcnQKKyAgc2hvd2luZyBwcm9jZXNzIGRlcGVuZGVuY3ksIHN0YXRlcyBhbmQgQ1BVIHVzYWdlLgorCisgIEEgdHlwaWNhbCBib290IHNlcXVlbmNlIGNvbnNpc3RzIG9mIHNldmVyYWwgaHVuZHJlZCBwcm9jZXNzZXMuIFNpbmNlCisgIGl0IGlzIGRpZmZpY3VsdCB0byB2aXN1YWxpemUgc3VjaCBhbW91bnQgb2YgZGF0YSBpbiBhIGNvbXByZWhlbnNpYmxlCisgIHdheSwgdHJlZSBwcnVuaW5nIGlzIHV0aWxpemVkLiBJZGxlIGJhY2tncm91bmQgcHJvY2Vzc2VzIGFuZAorICBzaG9ydC1saXZlZCBwcm9jZXNzZXMgYXJlIHJlbW92ZWQuIFNpbWlsYXIgcHJvY2Vzc2VzIHJ1bm5pbmcgaW4KKyAgcGFyYWxsZWwgYXJlIGFsc28gbWVyZ2VkIHRvZ2V0aGVyLgorCisgIEZpbmFsbHksIHRoZSBwZXJmb3JtYW5jZSBhbmQgZGVwZW5kZW5jeSBjaGFydHMgYXJlIHJlbmRlcmVkIGFzIGEKKyAgc2luZ2xlIGltYWdlIHRvIGVpdGhlciB0aGUgc2NyZWVuIG9yIGluIFBORywgUERGIG9yIFNWRyBmb3JtYXQuCisKKworVG8gZ2V0IGhlbHAgZm9yIHB5Ym9vdGNoYXJ0Z3VpLCBydW4KKworJCBweWJvb3RjaGFydGd1aSAtLWhlbHAKKworVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IGhvc3RlZCBhdDoKKwlodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHlib290Y2hhcnRndWkvCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2NlMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS5weQpAQCAtMCwwICsxLDIzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5Ym9vdGNoYXJ0Z3VpLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgIGFsb25nIHdpdGggcHlib290Y2hhcnRndWkuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCitpbXBvcnQgc3lzCitmcm9tIHB5Ym9vdGNoYXJ0Z3VpLm1haW4gaW1wb3J0IG1haW4KKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKwlzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvX19pbml0X18ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL2JhdGNoLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL2JhdGNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YzcxNGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvYmF0Y2gucHkKQEAgLTAsMCArMSw0NiBAQAorIyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlib290Y2hhcnRndWkuCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgYWxvbmcgd2l0aCBweWJvb3RjaGFydGd1aS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitpbXBvcnQgY2Fpcm8KK2Zyb20gLiBpbXBvcnQgZHJhdworZnJvbSAuZHJhdyBpbXBvcnQgUmVuZGVyT3B0aW9ucworCitkZWYgcmVuZGVyKHdyaXRlciwgdHJhY2UsIGFwcF9vcHRpb25zLCBmaWxlbmFtZSk6CisgICAgaGFuZGxlcnMgPSB7CisgICAgICAgICJwbmciOiAobGFtYmRhIHcsIGg6IGNhaXJvLkltYWdlU3VyZmFjZShjYWlyby5GT1JNQVRfQVJHQjMyLCB3LCBoKSwgXAorICAgICAgICAgICAgICAgIGxhbWJkYSBzZmM6IHNmYy53cml0ZV90b19wbmcoZmlsZW5hbWUpKSwKKyAgICAgICAgInBkZiI6IChsYW1iZGEgdywgaDogY2Fpcm8uUERGU3VyZmFjZShmaWxlbmFtZSwgdywgaCksIGxhbWJkYSBzZmM6IDApLAorICAgICAgICAic3ZnIjogKGxhbWJkYSB3LCBoOiBjYWlyby5TVkdTdXJmYWNlKGZpbGVuYW1lLCB3LCBoKSwgbGFtYmRhIHNmYzogMCkKKyAgICB9CisKKyAgICBpZiBhcHBfb3B0aW9ucy5mb3JtYXQgaXMgTm9uZToKKyAgICAgICAgZm10ID0gZmlsZW5hbWUucnNwbGl0KCcuJywgMSlbMV0KKyAgICBlbHNlOgorICAgICAgICBmbXQgPSBhcHBfb3B0aW9ucy5mb3JtYXQKKworICAgIGlmIG5vdCAoZm10IGluIGhhbmRsZXJzKToKKyAgICAgICAgd3JpdGVyLmVycm9yICgiVW5rbm93biBmb3JtYXQgJyVzJy4iICUgZm10KQorICAgICAgICByZXR1cm4gMTAKKworICAgIG1ha2Vfc3VyZmFjZSwgd3JpdGVfc3VyZmFjZSA9IGhhbmRsZXJzW2ZtdF0KKyAgICBvcHRpb25zID0gUmVuZGVyT3B0aW9ucyAoYXBwX29wdGlvbnMpCisgICAgKHcsIGgpID0gZHJhdy5leHRlbnRzIChvcHRpb25zLCAxLjAsIHRyYWNlKQorICAgIHcgPSBtYXggKHcsIGRyYXcuTUlOX0lNR19XKQorICAgIHN1cmZhY2UgPSBtYWtlX3N1cmZhY2UgKHcsIGgpCisgICAgY3R4ID0gY2Fpcm8uQ29udGV4dCAoc3VyZmFjZSkKKyAgICBkcmF3LnJlbmRlciAoY3R4LCBvcHRpb25zLCAxLjAsIHRyYWNlKQorICAgIHdyaXRlX3N1cmZhY2UgKHN1cmZhY2UpCisgICAgd3JpdGVyLnN0YXR1cyAoImJvb3RjaGFydCB3cml0dGVuIHRvICclcyciICUgZmlsZW5hbWUpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9kcmF3LnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL2RyYXcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM1NzRiZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9kcmF3LnB5CkBAIC0wLDAgKzEsODk0IEBACisjICBUaGlzIGZpbGUgaXMgcGFydCBvZiBweWJvb3RjaGFydGd1aS4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICBhbG9uZyB3aXRoIHB5Ym9vdGNoYXJ0Z3VpLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKworaW1wb3J0IGNhaXJvCitpbXBvcnQgbWF0aAoraW1wb3J0IHJlCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgY29sb3JzeXMKK2Zyb20gb3BlcmF0b3IgaW1wb3J0IGl0ZW1nZXR0ZXIKKworY2xhc3MgUmVuZGVyT3B0aW9uczoKKworCWRlZiBfX2luaXRfXyhzZWxmLCBhcHBfb3B0aW9ucyk6CisJCSMgc2hvdWxkIHdlIHJlbmRlciBhIGN1bXVsYXRpdmUgQ1BVIHRpbWUgY2hhcnQKKwkJc2VsZi5jdW11bGF0aXZlID0gVHJ1ZQorCQlzZWxmLmNoYXJ0cyA9IFRydWUKKwkJc2VsZi5rZXJuZWxfb25seSA9IEZhbHNlCisJCXNlbGYuYXBwX29wdGlvbnMgPSBhcHBfb3B0aW9ucworCisJZGVmIHByb2NfdHJlZSAoc2VsZiwgdHJhY2UpOgorCQlpZiBzZWxmLmtlcm5lbF9vbmx5OgorCQkJcmV0dXJuIHRyYWNlLmtlcm5lbF90cmVlCisJCWVsc2U6CisJCQlyZXR1cm4gdHJhY2UucHJvY190cmVlCisKKyMgUHJvY2VzcyB0cmVlIGJhY2tncm91bmQgY29sb3IuCitCQUNLX0NPTE9SID0gKDEuMCwgMS4wLCAxLjAsIDEuMCkKKworV0hJVEUgPSAoMS4wLCAxLjAsIDEuMCwgMS4wKQorIyBQcm9jZXNzIHRyZWUgYm9yZGVyIGNvbG9yLgorQk9SREVSX0NPTE9SID0gKDAuNjMsIDAuNjMsIDAuNjMsIDEuMCkKKyMgU2Vjb25kIHRpY2sgbGluZSBjb2xvci4KK1RJQ0tfQ09MT1IgPSAoMC45MiwgMC45MiwgMC45MiwgMS4wKQorIyA1LXNlY29uZCB0aWNrIGxpbmUgY29sb3IuCitUSUNLX0NPTE9SX0JPTEQgPSAoMC44NiwgMC44NiwgMC44NiwgMS4wKQorIyBBbm5vdGF0aW9uIGNvbG91cgorQU5OT1RBVElPTl9DT0xPUiA9ICgwLjYzLCAwLjAsIDAuMCwgMC41KQorIyBUZXh0IGNvbG9yLgorVEVYVF9DT0xPUiA9ICgwLjAsIDAuMCwgMC4wLCAxLjApCisKKyMgRm9udCBmYW1pbHkKK0ZPTlRfTkFNRSA9ICJCaXRzdHJlYW0gVmVyYSBTYW5zIgorIyBUaXRsZSB0ZXh0IGZvbnQuCitUSVRMRV9GT05UX1NJWkUgPSAxOAorIyBEZWZhdWx0IHRleHQgZm9udC4KK1RFWFRfRk9OVF9TSVpFID0gMTIKKyMgQXhpcyBsYWJlbCBmb250LgorQVhJU19GT05UX1NJWkUgPSAxMQorIyBMZWdlbmQgZm9udC4KK0xFR0VORF9GT05UX1NJWkUgPSAxMgorCisjIENQVSBsb2FkIGNoYXJ0IGNvbG9yLgorQ1BVX0NPTE9SID0gKDAuNDAsIDAuNTUsIDAuNzAsIDEuMCkKKyMgSU8gd2FpdCBjaGFydCBjb2xvci4KK0lPX0NPTE9SID0gKDAuNzYsIDAuNDgsIDAuNDgsIDAuNSkKKyMgRGlzayB0aHJvdWdocHV0IGNvbG9yLgorRElTS19UUFVUX0NPTE9SID0gKDAuMjAsIDAuNzEsIDAuMjAsIDEuMCkKKyMgQ1BVIGxvYWQgY2hhcnQgY29sb3IuCitGSUxFX09QRU5fQ09MT1IgPSAoMC4yMCwgMC43MSwgMC43MSwgMS4wKQorIyBNZW0gY2FjaGVkIGNvbG9yCitNRU1fQ0FDSEVEX0NPTE9SID0gQ1BVX0NPTE9SCisjIE1lbSB1c2VkIGNvbG9yCitNRU1fVVNFRF9DT0xPUiA9IElPX0NPTE9SCisjIEJ1ZmZlcnMgY29sb3IKK01FTV9CVUZGRVJTX0NPTE9SID0gKDAuNCwgMC40LCAwLjQsIDAuMykKKyMgU3dhcCBjb2xvcgorTUVNX1NXQVBfQ09MT1IgPSBESVNLX1RQVVRfQ09MT1IKKworIyBQcm9jZXNzIGJvcmRlciBjb2xvci4KK1BST0NfQk9SREVSX0NPTE9SID0gKDAuNzEsIDAuNzEsIDAuNzEsIDEuMCkKKyMgV2FpdGluZyBwcm9jZXNzIGNvbG9yLgorUFJPQ19DT0xPUl9EID0gKDAuNzYsIDAuNDgsIDAuNDgsIDAuNSkKKyMgUnVubmluZyBwcm9jZXNzIGNvbG9yLgorUFJPQ19DT0xPUl9SID0gQ1BVX0NPTE9SCisjIFNsZWVwaW5nIHByb2Nlc3MgY29sb3IuCitQUk9DX0NPTE9SX1MgPSAoMC45NCwgMC45NCwgMC45NCwgMS4wKQorIyBTdG9wcGVkIHByb2Nlc3MgY29sb3IuCitQUk9DX0NPTE9SX1QgPSAoMC45NCwgMC41MCwgMC41MCwgMS4wKQorIyBab21iaWUgcHJvY2VzcyBjb2xvci4KK1BST0NfQ09MT1JfWiA9ICgwLjcxLCAwLjcxLCAwLjcxLCAxLjApCisjIERlYWQgcHJvY2VzcyBjb2xvci4KK1BST0NfQ09MT1JfWCA9ICgwLjcxLCAwLjcxLCAwLjcxLCAwLjEyNSkKKyMgUGFnaW5nIHByb2Nlc3MgY29sb3IuCitQUk9DX0NPTE9SX1cgPSAoMC43MSwgMC43MSwgMC43MSwgMC4xMjUpCisKKyMgUHJvY2VzcyBsYWJlbCBjb2xvci4KK1BST0NfVEVYVF9DT0xPUiA9ICgwLjE5LCAwLjE5LCAwLjE5LCAxLjApCisjIFByb2Nlc3MgbGFiZWwgZm9udC4KK1BST0NfVEVYVF9GT05UX1NJWkUgPSAxMgorCisjIFNpZ25hdHVyZSBjb2xvci4KK1NJR19DT0xPUiA9ICgwLjAsIDAuMCwgMC4wLCAwLjMxMjUpCisjIFNpZ25hdHVyZSBmb250LgorU0lHX0ZPTlRfU0laRSA9IDE0CisjIFNpZ25hdHVyZSB0ZXh0LgorU0lHTkFUVVJFID0gImh0dHA6Ly9naXRodWIuY29tL21tZWVrcy9ib290Y2hhcnQiCisKKyMgUHJvY2VzcyBkZXBlbmRlbmN5IGxpbmUgY29sb3IuCitERVBfQ09MT1IgPSAoMC43NSwgMC43NSwgMC43NSwgMS4wKQorIyBQcm9jZXNzIGRlcGVuZGVuY3kgbGluZSBzdHJva2UuCitERVBfU1RST0tFID0gMS4wCisKKyMgUHJvY2VzcyBkZXNjcmlwdGlvbiBkYXRlIGZvcm1hdC4KK0RFU0NfVElNRV9GT1JNQVQgPSAibW06c3MuU1NTIgorCisjIEN1bXVsYXRpdmUgY29sb3JpbmcgYml0cworSFNWX01BWF9NT0QgPSAzMQorSFNWX1NURVAgPSA3CisKKyMgQ29uZmlndXJlIHRhc2sgY29sb3IKK1RBU0tfQ09MT1JfQ09ORklHVVJFID0gKDEuMCwgMS4wLCAwLjAwLCAxLjApCisjIENvbXBpbGUgdGFzayBjb2xvci4KK1RBU0tfQ09MT1JfQ09NUElMRSA9ICgwLjAsIDEuMDAsIDAuMDAsIDEuMCkKKyMgSW5zdGFsbCB0YXNrIGNvbG9yCitUQVNLX0NPTE9SX0lOU1RBTEwgPSAoMS4wLCAwLjAwLCAxLjAwLCAxLjApCisjIFN5c3Jvb3QgdGFzayBjb2xvcgorVEFTS19DT0xPUl9TWVNST09UID0gKDAuMCwgMC4wMCwgMS4wMCwgMS4wKQorIyBQYWNrYWdlIHRhc2sgY29sb3IKK1RBU0tfQ09MT1JfUEFDS0FHRSA9ICgwLjAsIDEuMDAsIDEuMDAsIDEuMCkKKyMgUGFja2FnZSBXcml0ZSBSUE0vREVCL0lQSyB0YXNrIGNvbG9yCitUQVNLX0NPTE9SX1BBQ0tBR0VfV1JJVEUgPSAoMC4wLCAwLjUwLCAwLjUwLCAxLjApCisKKyMgUHJvY2VzcyBzdGF0ZXMKK1NUQVRFX1VOREVGSU5FRCA9IDAKK1NUQVRFX1JVTk5JTkcgICA9IDEKK1NUQVRFX1NMRUVQSU5HICA9IDIKK1NUQVRFX1dBSVRJTkcgICA9IDMKK1NUQVRFX1NUT1BQRUQgICA9IDQKK1NUQVRFX1pPTUJJRSAgICA9IDUKKworU1RBVEVfQ09MT1JTID0gWygwLCAwLCAwLCAwKSwgUFJPQ19DT0xPUl9SLCBQUk9DX0NPTE9SX1MsIFBST0NfQ09MT1JfRCwgXAorCQlQUk9DX0NPTE9SX1QsIFBST0NfQ09MT1JfWiwgUFJPQ19DT0xPUl9YLCBQUk9DX0NPTE9SX1ddCisKKyMgQ3VtdWxhdGl2ZVN0YXRzIFR5cGVzCitTVEFUX1RZUEVfQ1BVID0gMAorU1RBVF9UWVBFX0lPID0gMQorCisjIENvbnZlcnQgcHMgcHJvY2VzcyBzdGF0ZSB0byBhbiBpbnQKK2RlZiBnZXRfcHJvY19zdGF0ZShmbGFnKToKKwlyZXR1cm4gIlJTRFRaWFciLmZpbmQoZmxhZykgKyAxCisKK2RlZiBkcmF3X3RleHQoY3R4LCB0ZXh0LCBjb2xvciwgeCwgeSk6CisJY3R4LnNldF9zb3VyY2VfcmdiYSgqY29sb3IpCisJY3R4Lm1vdmVfdG8oeCwgeSkKKwljdHguc2hvd190ZXh0KHRleHQpCisKK2RlZiBkcmF3X2ZpbGxfcmVjdChjdHgsIGNvbG9yLCByZWN0KToKKwljdHguc2V0X3NvdXJjZV9yZ2JhKCpjb2xvcikKKwljdHgucmVjdGFuZ2xlKCpyZWN0KQorCWN0eC5maWxsKCkKKworZGVmIGRyYXdfcmVjdChjdHgsIGNvbG9yLCByZWN0KToKKwljdHguc2V0X3NvdXJjZV9yZ2JhKCpjb2xvcikKKwljdHgucmVjdGFuZ2xlKCpyZWN0KQorCWN0eC5zdHJva2UoKQorCitkZWYgZHJhd19sZWdlbmRfYm94KGN0eCwgbGFiZWwsIGZpbGxfY29sb3IsIHgsIHksIHMpOgorCWRyYXdfZmlsbF9yZWN0KGN0eCwgZmlsbF9jb2xvciwgKHgsIHkgLSBzLCBzLCBzKSkKKwlkcmF3X3JlY3QoY3R4LCBQUk9DX0JPUkRFUl9DT0xPUiwgKHgsIHkgLSBzLCBzLCBzKSkKKwlkcmF3X3RleHQoY3R4LCBsYWJlbCwgVEVYVF9DT0xPUiwgeCArIHMgKyA1LCB5KQorCitkZWYgZHJhd19sZWdlbmRfbGluZShjdHgsIGxhYmVsLCBmaWxsX2NvbG9yLCB4LCB5LCBzKToKKwlkcmF3X2ZpbGxfcmVjdChjdHgsIGZpbGxfY29sb3IsICh4LCB5IC0gcy8yLCBzICsgMSwgMykpCisJY3R4LmFyYyh4ICsgKHMgKyAxKS8yLjAsIHkgLSAocyAtIDMpLzIuMCwgMi41LCAwLCAyLjAgKiBtYXRoLnBpKQorCWN0eC5maWxsKCkKKwlkcmF3X3RleHQoY3R4LCBsYWJlbCwgVEVYVF9DT0xPUiwgeCArIHMgKyA1LCB5KQorCitkZWYgZHJhd19sYWJlbF9pbl9ib3goY3R4LCBjb2xvciwgbGFiZWwsIHgsIHksIHcsIG1heHgpOgorCWxhYmVsX3cgPSBjdHgudGV4dF9leHRlbnRzKGxhYmVsKVsyXQorCWxhYmVsX3ggPSB4ICsgdyAvIDIgLSBsYWJlbF93IC8gMgorCWlmIGxhYmVsX3cgKyAxMCA+IHc6CisJCWxhYmVsX3ggPSB4ICsgdyArIDUKKwlpZiBsYWJlbF94ICsgbGFiZWxfdyA+IG1heHg6CisJCWxhYmVsX3ggPSB4IC0gbGFiZWxfdyAtIDUKKwlkcmF3X3RleHQoY3R4LCBsYWJlbCwgY29sb3IsIGxhYmVsX3gsIHkpCisKK2RlZiBkcmF3X3NlY19sYWJlbHMoY3R4LCBvcHRpb25zLCByZWN0LCBzZWNfdywgbnNlY3MpOgorCWN0eC5zZXRfZm9udF9zaXplKEFYSVNfRk9OVF9TSVpFKQorCXByZXZfeCA9IDAKKwlmb3IgaSBpbiByYW5nZSgwLCByZWN0WzJdICsgMSwgc2VjX3cpOgorCQlpZiAoKGkgLyBzZWNfdykgJSBuc2VjcyA9PSAwKSA6CisJCQlpZiBvcHRpb25zLmFwcF9vcHRpb25zLmFzX21pbnV0ZXMgOgorCQkJCWxhYmVsID0gIiUuMWYiICUgKGkgLyBzZWNfdyAvIDYwLjApCisJCQllbHNlIDoKKwkJCQlsYWJlbCA9ICIlZCIgJSAoaSAvIHNlY193KQorCQkJbGFiZWxfdyA9IGN0eC50ZXh0X2V4dGVudHMobGFiZWwpWzJdCisJCQl4ID0gcmVjdFswXSArIGkgLSBsYWJlbF93LzIKKwkJCWlmIHggPj0gcHJldl94OgorCQkJCWRyYXdfdGV4dChjdHgsIGxhYmVsLCBURVhUX0NPTE9SLCB4LCByZWN0WzFdIC0gMikKKwkJCQlwcmV2X3ggPSB4ICsgbGFiZWxfdworCitkZWYgZHJhd19ib3hfdGlja3MoY3R4LCByZWN0LCBzZWNfdyk6CisJZHJhd19yZWN0KGN0eCwgQk9SREVSX0NPTE9SLCB0dXBsZShyZWN0KSkKKworCWN0eC5zZXRfbGluZV9jYXAoY2Fpcm8uTElORV9DQVBfU1FVQVJFKQorCisJZm9yIGkgaW4gcmFuZ2Uoc2VjX3csIHJlY3RbMl0gKyAxLCBzZWNfdyk6CisJCWlmICgoaSAvIHNlY193KSAlIDEwID09IDApIDoKKwkJCWN0eC5zZXRfbGluZV93aWR0aCgxLjUpCisJCWVsaWYgc2VjX3cgPCA1IDoKKwkJCWNvbnRpbnVlCisJCWVsc2UgOgorCQkJY3R4LnNldF9saW5lX3dpZHRoKDEuMCkKKwkJaWYgKChpIC8gc2VjX3cpICUgMzAgPT0gMCkgOgorCQkJY3R4LnNldF9zb3VyY2VfcmdiYSgqVElDS19DT0xPUl9CT0xEKQorCQllbHNlIDoKKwkJCWN0eC5zZXRfc291cmNlX3JnYmEoKlRJQ0tfQ09MT1IpCisJCWN0eC5tb3ZlX3RvKHJlY3RbMF0gKyBpLCByZWN0WzFdICsgMSkKKwkJY3R4LmxpbmVfdG8ocmVjdFswXSArIGksIHJlY3RbMV0gKyByZWN0WzNdIC0gMSkKKwkJY3R4LnN0cm9rZSgpCisJY3R4LnNldF9saW5lX3dpZHRoKDEuMCkKKworCWN0eC5zZXRfbGluZV9jYXAoY2Fpcm8uTElORV9DQVBfQlVUVCkKKworZGVmIGRyYXdfYW5ub3RhdGlvbnMoY3R4LCBwcm9jX3RyZWUsIHRpbWVzLCByZWN0KToKKyAgICBjdHguc2V0X2xpbmVfY2FwKGNhaXJvLkxJTkVfQ0FQX1NRVUFSRSkKKyAgICBjdHguc2V0X3NvdXJjZV9yZ2JhKCpBTk5PVEFUSU9OX0NPTE9SKQorICAgIGN0eC5zZXRfZGFzaChbNCwgNF0pCisKKyAgICBmb3IgdGltZSBpbiB0aW1lczoKKyAgICAgICAgaWYgdGltZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHggPSAoKHRpbWUgLSBwcm9jX3RyZWUuc3RhcnRfdGltZSkgKiByZWN0WzJdIC8gcHJvY190cmVlLmR1cmF0aW9uKQorCisgICAgICAgICAgICBjdHgubW92ZV90byhyZWN0WzBdICsgeCwgcmVjdFsxXSArIDEpCisgICAgICAgICAgICBjdHgubGluZV90byhyZWN0WzBdICsgeCwgcmVjdFsxXSArIHJlY3RbM10gLSAxKQorICAgICAgICAgICAgY3R4LnN0cm9rZSgpCisKKyAgICBjdHguc2V0X2xpbmVfY2FwKGNhaXJvLkxJTkVfQ0FQX0JVVFQpCisgICAgY3R4LnNldF9kYXNoKFtdKQorCitkZWYgZHJhd19jaGFydChjdHgsIGNvbG9yLCBmaWxsLCBjaGFydF9ib3VuZHMsIGRhdGEsIHByb2NfdHJlZSwgZGF0YV9yYW5nZSk6CisJY3R4LnNldF9saW5lX3dpZHRoKDAuNSkKKwl4X3NoaWZ0ID0gcHJvY190cmVlLnN0YXJ0X3RpbWUKKworCWRlZiB0cmFuc2Zvcm1fcG9pbnRfY29vcmRzKHBvaW50LCB4X2Jhc2UsIHlfYmFzZSwgXAorCQkJCSAgIHhzY2FsZSwgeXNjYWxlLCB4X3RyYW5zLCB5X3RyYW5zKToKKwkJeCA9IChwb2ludFswXSAtIHhfYmFzZSkgKiB4c2NhbGUgKyB4X3RyYW5zCisJCXkgPSAocG9pbnRbMV0gLSB5X2Jhc2UpICogLXlzY2FsZSArIHlfdHJhbnMgKyBjaGFydF9ib3VuZHNbM10KKwkJcmV0dXJuIHgsIHkKKworCW1heF94ID0gbWF4ICh4IGZvciAoeCwgeSkgaW4gZGF0YSkKKwltYXhfeSA9IG1heCAoeSBmb3IgKHgsIHkpIGluIGRhdGEpCisJIyBhdm9pZCBkaXZpZGUgYnkgemVybworCWlmIG1heF95ID09IDA6CisJCW1heF95ID0gMS4wCisJeHNjYWxlID0gZmxvYXQgKGNoYXJ0X2JvdW5kc1syXSkgLyBtYXhfeAorCSMgSWYgZGF0YV9yYW5nZSBpcyBnaXZlbiwgc2NhbGUgdGhlIGNoYXJ0IHNvIHRoYXQgdGhlIHZhbHVlIHJhbmdlIGluCisJIyBkYXRhX3JhbmdlIG1hdGNoZXMgdGhlIGNoYXJ0IGJvdW5kcyBleGFjdGx5LgorCSMgT3RoZXJ3aXNlLCBzY2FsZSBzbyB0aGF0IHRoZSBhY3R1YWwgZGF0YSBtYXRjaGVzIHRoZSBjaGFydCBib3VuZHMuCisJaWYgZGF0YV9yYW5nZToKKwkJeXNjYWxlID0gZmxvYXQoY2hhcnRfYm91bmRzWzNdKSAvIChkYXRhX3JhbmdlWzFdIC0gZGF0YV9yYW5nZVswXSkKKwkJeWJhc2UgPSBkYXRhX3JhbmdlWzBdCisJZWxzZToKKwkJeXNjYWxlID0gZmxvYXQoY2hhcnRfYm91bmRzWzNdKSAvIG1heF95CisJCXliYXNlID0gMAorCisJZmlyc3QgPSB0cmFuc2Zvcm1fcG9pbnRfY29vcmRzIChkYXRhWzBdLCB4X3NoaWZ0LCB5YmFzZSwgeHNjYWxlLCB5c2NhbGUsIFwKKwkJCQkgICAgICAgIGNoYXJ0X2JvdW5kc1swXSwgY2hhcnRfYm91bmRzWzFdKQorCWxhc3QgPSAgdHJhbnNmb3JtX3BvaW50X2Nvb3JkcyAoZGF0YVstMV0sIHhfc2hpZnQsIHliYXNlLCB4c2NhbGUsIHlzY2FsZSwgXAorCQkJCSAgICAgICAgY2hhcnRfYm91bmRzWzBdLCBjaGFydF9ib3VuZHNbMV0pCisKKwljdHguc2V0X3NvdXJjZV9yZ2JhKCpjb2xvcikKKwljdHgubW92ZV90bygqZmlyc3QpCisJZm9yIHBvaW50IGluIGRhdGE6CisJCXgsIHkgPSB0cmFuc2Zvcm1fcG9pbnRfY29vcmRzIChwb2ludCwgeF9zaGlmdCwgeWJhc2UsIHhzY2FsZSwgeXNjYWxlLCBcCisJCQkJCSAgICAgICBjaGFydF9ib3VuZHNbMF0sIGNoYXJ0X2JvdW5kc1sxXSkKKwkJY3R4LmxpbmVfdG8oeCwgeSkKKwlpZiBmaWxsOgorCQljdHguc3Ryb2tlX3ByZXNlcnZlKCkKKwkJY3R4LmxpbmVfdG8obGFzdFswXSwgY2hhcnRfYm91bmRzWzFdK2NoYXJ0X2JvdW5kc1szXSkKKwkJY3R4LmxpbmVfdG8oZmlyc3RbMF0sIGNoYXJ0X2JvdW5kc1sxXStjaGFydF9ib3VuZHNbM10pCisJCWN0eC5saW5lX3RvKGZpcnN0WzBdLCBmaXJzdFsxXSkKKwkJY3R4LmZpbGwoKQorCWVsc2U6CisJCWN0eC5zdHJva2UoKQorCWN0eC5zZXRfbGluZV93aWR0aCgxLjApCisKK2Jhcl9oID0gNTUKK21lbWluZm9fYmFyX2ggPSAyICogYmFyX2gKK2hlYWRlcl9oID0gNjAKKyMgb2Zmc2V0cworb2ZmX3gsIG9mZl95ID0gMjIwLCAxMAorc2VjX3dfYmFzZSA9IDEgIyB0aGUgd2lkdGggb2YgYSBzZWNvbmQKK3Byb2NfaCA9IDE2ICMgdGhlIGhlaWdodCBvZiBhIHByb2Nlc3MKK2xlZ19zID0gMTAKK01JTl9JTUdfVyA9IDgwMAorQ1VNTF9IRUlHSFQgPSAyMDAwICMgSW5jcmVhc2VkIHZhbHVlIHRvIGFjY29tb2RhdGUgQ1BVIGFuZCBJL08gR3JhcGhzCitPUFRJT05TID0gTm9uZQorCitkZWYgZXh0ZW50cyhvcHRpb25zLCB4c2NhbGUsIHRyYWNlKToKKwlzdGFydCA9IG1pbih0cmFjZS5zdGFydC5rZXlzKCkpCisJZW5kID0gc3RhcnQKKworICAgICAgICBwcm9jZXNzZXMgPSAwCisgICAgICAgIGZvciBwcm9jIGluIHRyYWNlLnByb2Nlc3NlczoKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3B0aW9ucy5hcHBfb3B0aW9ucy5zaG93X2FsbCBhbmQgXAorICAgICAgICAgICAgICAgICAgIHRyYWNlLnByb2Nlc3Nlc1twcm9jXVsxXSAtIHRyYWNlLnByb2Nlc3Nlc1twcm9jXVswXSA8IG9wdGlvbnMuYXBwX29wdGlvbnMubWludGltZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiB0cmFjZS5wcm9jZXNzZXNbcHJvY11bMV0gPiBlbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSB0cmFjZS5wcm9jZXNzZXNbcHJvY11bMV0KKyAgICAgICAgICAgICAgICBwcm9jZXNzZXMgKz0gMQorCisJaWYgdHJhY2UubWluIGlzIG5vdCBOb25lIGFuZCB0cmFjZS5tYXggaXMgbm90IE5vbmU6CisJCXN0YXJ0ID0gdHJhY2UubWluCisJCWVuZCA9IHRyYWNlLm1heAorCisJdyA9IGludCAoKGVuZCAtIHN0YXJ0KSAqIHNlY193X2Jhc2UgKiB4c2NhbGUpICsgMiAqIG9mZl94CisJaCA9IHByb2NfaCAqIHByb2Nlc3NlcyArIGhlYWRlcl9oICsgMiAqIG9mZl95CisKKwlyZXR1cm4gKHcsIGgpCisKK2RlZiBjbGlwX3Zpc2libGUoY2xpcCwgcmVjdCk6CisJeG1heCA9IG1heCAoY2xpcFswXSwgcmVjdFswXSkKKwl5bWF4ID0gbWF4IChjbGlwWzFdLCByZWN0WzFdKQorCXhtaW4gPSBtaW4gKGNsaXBbMF0gKyBjbGlwWzJdLCByZWN0WzBdICsgcmVjdFsyXSkKKwl5bWluID0gbWluIChjbGlwWzFdICsgY2xpcFszXSwgcmVjdFsxXSArIHJlY3RbM10pCisJcmV0dXJuICh4bWluID4geG1heCBhbmQgeW1pbiA+IHltYXgpCisKK2RlZiByZW5kZXJfY2hhcnRzKGN0eCwgb3B0aW9ucywgY2xpcCwgdHJhY2UsIGN1cnJfeSwgdywgaCwgc2VjX3cpOgorCXByb2NfdHJlZSA9IG9wdGlvbnMucHJvY190cmVlKHRyYWNlKQorCisJIyByZW5kZXIgYmFyIGxlZ2VuZAorCWN0eC5zZXRfZm9udF9zaXplKExFR0VORF9GT05UX1NJWkUpCisKKwlkcmF3X2xlZ2VuZF9ib3goY3R4LCAiQ1BVICh1c2VyK3N5cykiLCBDUFVfQ09MT1IsIG9mZl94LCBjdXJyX3krMjAsIGxlZ19zKQorCWRyYXdfbGVnZW5kX2JveChjdHgsICJJL08gKHdhaXQpIiwgSU9fQ09MT1IsIG9mZl94ICsgMTIwLCBjdXJyX3krMjAsIGxlZ19zKQorCisJIyByZW5kZXIgSS9PIHdhaXQKKwljaGFydF9yZWN0ID0gKG9mZl94LCBjdXJyX3krMzAsIHcsIGJhcl9oKQorCWlmIGNsaXBfdmlzaWJsZSAoY2xpcCwgY2hhcnRfcmVjdCk6CisJCWRyYXdfYm94X3RpY2tzIChjdHgsIGNoYXJ0X3JlY3QsIHNlY193KQorCQlkcmF3X2Fubm90YXRpb25zIChjdHgsIHByb2NfdHJlZSwgdHJhY2UudGltZXMsIGNoYXJ0X3JlY3QpCisJCWRyYXdfY2hhcnQgKGN0eCwgSU9fQ09MT1IsIFRydWUsIGNoYXJ0X3JlY3QsIFwKKwkJCSAgICBbKHNhbXBsZS50aW1lLCBzYW1wbGUudXNlciArIHNhbXBsZS5zeXMgKyBzYW1wbGUuaW8pIGZvciBzYW1wbGUgaW4gdHJhY2UuY3B1X3N0YXRzXSwgXAorCQkJICAgIHByb2NfdHJlZSwgTm9uZSkKKwkJIyByZW5kZXIgQ1BVIGxvYWQKKwkJZHJhd19jaGFydCAoY3R4LCBDUFVfQ09MT1IsIFRydWUsIGNoYXJ0X3JlY3QsIFwKKwkJCSAgICBbKHNhbXBsZS50aW1lLCBzYW1wbGUudXNlciArIHNhbXBsZS5zeXMpIGZvciBzYW1wbGUgaW4gdHJhY2UuY3B1X3N0YXRzXSwgXAorCQkJICAgIHByb2NfdHJlZSwgTm9uZSkKKworCWN1cnJfeSA9IGN1cnJfeSArIDMwICsgYmFyX2gKKworCSMgcmVuZGVyIHNlY29uZCBjaGFydAorCWRyYXdfbGVnZW5kX2xpbmUoY3R4LCAiRGlzayB0aHJvdWdocHV0IiwgRElTS19UUFVUX0NPTE9SLCBvZmZfeCwgY3Vycl95KzIwLCBsZWdfcykKKwlkcmF3X2xlZ2VuZF9ib3goY3R4LCAiRGlzayB1dGlsaXphdGlvbiIsIElPX0NPTE9SLCBvZmZfeCArIDEyMCwgY3Vycl95KzIwLCBsZWdfcykKKworICAgICAgICAjIHJlbmRlciBJL08gdXRpbGl6YXRpb24KKwljaGFydF9yZWN0ID0gKG9mZl94LCBjdXJyX3krMzAsIHcsIGJhcl9oKQorCWlmIGNsaXBfdmlzaWJsZSAoY2xpcCwgY2hhcnRfcmVjdCk6CisJCWRyYXdfYm94X3RpY2tzIChjdHgsIGNoYXJ0X3JlY3QsIHNlY193KQorCQlkcmF3X2Fubm90YXRpb25zIChjdHgsIHByb2NfdHJlZSwgdHJhY2UudGltZXMsIGNoYXJ0X3JlY3QpCisJCWRyYXdfY2hhcnQgKGN0eCwgSU9fQ09MT1IsIFRydWUsIGNoYXJ0X3JlY3QsIFwKKwkJCSAgICBbKHNhbXBsZS50aW1lLCBzYW1wbGUudXRpbCkgZm9yIHNhbXBsZSBpbiB0cmFjZS5kaXNrX3N0YXRzXSwgXAorCQkJICAgIHByb2NfdHJlZSwgTm9uZSkKKworCSMgcmVuZGVyIGRpc2sgdGhyb3VnaHB1dAorCW1heF9zYW1wbGUgPSBtYXggKHRyYWNlLmRpc2tfc3RhdHMsIGtleSA9IGxhbWJkYSBzOiBzLnRwdXQpCisJaWYgY2xpcF92aXNpYmxlIChjbGlwLCBjaGFydF9yZWN0KToKKwkJZHJhd19jaGFydCAoY3R4LCBESVNLX1RQVVRfQ09MT1IsIEZhbHNlLCBjaGFydF9yZWN0LCBcCisJCQkgICAgWyhzYW1wbGUudGltZSwgc2FtcGxlLnRwdXQpIGZvciBzYW1wbGUgaW4gdHJhY2UuZGlza19zdGF0c10sIFwKKwkJCSAgICBwcm9jX3RyZWUsIE5vbmUpCisKKwlwb3NfeCA9IG9mZl94ICsgKChtYXhfc2FtcGxlLnRpbWUgLSBwcm9jX3RyZWUuc3RhcnRfdGltZSkgKiB3IC8gcHJvY190cmVlLmR1cmF0aW9uKQorCisJc2hpZnRfeCwgc2hpZnRfeSA9IC0yMCwgMjAKKwlpZiAocG9zX3ggPCBvZmZfeCArIDI0NSk6CisJCXNoaWZ0X3gsIHNoaWZ0X3kgPSA1LCA0MAorCisJbGFiZWwgPSAiJWRNQi9zIiAlIHJvdW5kICgobWF4X3NhbXBsZS50cHV0KSAvIDEwMjQuMCkKKwlkcmF3X3RleHQgKGN0eCwgbGFiZWwsIERJU0tfVFBVVF9DT0xPUiwgcG9zX3ggKyBzaGlmdF94LCBjdXJyX3kgKyBzaGlmdF95KQorCisJY3Vycl95ID0gY3Vycl95ICsgMzAgKyBiYXJfaAorCisJIyByZW5kZXIgbWVtIHVzYWdlCisJY2hhcnRfcmVjdCA9IChvZmZfeCwgY3Vycl95KzMwLCB3LCBtZW1pbmZvX2Jhcl9oKQorCW1lbV9zdGF0cyA9IHRyYWNlLm1lbV9zdGF0cworCWlmIG1lbV9zdGF0cyBhbmQgY2xpcF92aXNpYmxlIChjbGlwLCBjaGFydF9yZWN0KToKKwkJbWVtX3NjYWxlID0gbWF4KHNhbXBsZS5yZWNvcmRzWydNZW1Ub3RhbCddIC0gc2FtcGxlLnJlY29yZHNbJ01lbUZyZWUnXSBmb3Igc2FtcGxlIGluIG1lbV9zdGF0cykKKwkJZHJhd19sZWdlbmRfYm94KGN0eCwgIk1lbSBjYWNoZWQgKHNjYWxlOiAldSBNaUIpIiAlIChmbG9hdChtZW1fc2NhbGUpIC8gMTAyNCksIE1FTV9DQUNIRURfQ09MT1IsIG9mZl94LCBjdXJyX3krMjAsIGxlZ19zKQorCQlkcmF3X2xlZ2VuZF9ib3goY3R4LCAiVXNlZCIsIE1FTV9VU0VEX0NPTE9SLCBvZmZfeCArIDI0MCwgY3Vycl95KzIwLCBsZWdfcykKKwkJZHJhd19sZWdlbmRfYm94KGN0eCwgIkJ1ZmZlcnMiLCBNRU1fQlVGRkVSU19DT0xPUiwgb2ZmX3ggKyAzNjAsIGN1cnJfeSsyMCwgbGVnX3MpCisJCWRyYXdfbGVnZW5kX2xpbmUoY3R4LCAiU3dhcCAoc2NhbGU6ICV1IE1pQikiICUgbWF4KFsoc2FtcGxlLnJlY29yZHNbJ1N3YXBUb3RhbCddIC0gc2FtcGxlLnJlY29yZHNbJ1N3YXBGcmVlJ10pLzEwMjQgZm9yIHNhbXBsZSBpbiBtZW1fc3RhdHNdKSwgXAorCQkJCSBNRU1fU1dBUF9DT0xPUiwgb2ZmX3ggKyA0ODAsIGN1cnJfeSsyMCwgbGVnX3MpCisJCWRyYXdfYm94X3RpY2tzKGN0eCwgY2hhcnRfcmVjdCwgc2VjX3cpCisJCWRyYXdfYW5ub3RhdGlvbnMoY3R4LCBwcm9jX3RyZWUsIHRyYWNlLnRpbWVzLCBjaGFydF9yZWN0KQorCQlkcmF3X2NoYXJ0KGN0eCwgTUVNX0JVRkZFUlNfQ09MT1IsIFRydWUsIGNoYXJ0X3JlY3QsIFwKKwkJCSAgIFsoc2FtcGxlLnRpbWUsIHNhbXBsZS5yZWNvcmRzWydNZW1Ub3RhbCddIC0gc2FtcGxlLnJlY29yZHNbJ01lbUZyZWUnXSkgZm9yIHNhbXBsZSBpbiB0cmFjZS5tZW1fc3RhdHNdLCBcCisJCQkgICBwcm9jX3RyZWUsIFswLCBtZW1fc2NhbGVdKQorCQlkcmF3X2NoYXJ0KGN0eCwgTUVNX1VTRURfQ09MT1IsIFRydWUsIGNoYXJ0X3JlY3QsIFwKKwkJCSAgIFsoc2FtcGxlLnRpbWUsIHNhbXBsZS5yZWNvcmRzWydNZW1Ub3RhbCddIC0gc2FtcGxlLnJlY29yZHNbJ01lbUZyZWUnXSAtIHNhbXBsZS5yZWNvcmRzWydCdWZmZXJzJ10pIGZvciBzYW1wbGUgaW4gbWVtX3N0YXRzXSwgXAorCQkJICAgcHJvY190cmVlLCBbMCwgbWVtX3NjYWxlXSkKKwkJZHJhd19jaGFydChjdHgsIE1FTV9DQUNIRURfQ09MT1IsIFRydWUsIGNoYXJ0X3JlY3QsIFwKKwkJCSAgIFsoc2FtcGxlLnRpbWUsIHNhbXBsZS5yZWNvcmRzWydDYWNoZWQnXSkgZm9yIHNhbXBsZSBpbiBtZW1fc3RhdHNdLCBcCisJCQkgICBwcm9jX3RyZWUsIFswLCBtZW1fc2NhbGVdKQorCQlkcmF3X2NoYXJ0KGN0eCwgTUVNX1NXQVBfQ09MT1IsIEZhbHNlLCBjaGFydF9yZWN0LCBcCisJCQkgICBbKHNhbXBsZS50aW1lLCBmbG9hdChzYW1wbGUucmVjb3Jkc1snU3dhcFRvdGFsJ10gLSBzYW1wbGUucmVjb3Jkc1snU3dhcEZyZWUnXSkpIGZvciBzYW1wbGUgaW4gbWVtX3N0YXRzXSwgXAorCQkJICAgcHJvY190cmVlLCBOb25lKQorCisJCWN1cnJfeSA9IGN1cnJfeSArIG1lbWluZm9fYmFyX2gKKworCXJldHVybiBjdXJyX3kKKworZGVmIHJlbmRlcl9wcm9jZXNzZXNfY2hhcnQoY3R4LCBvcHRpb25zLCB0cmFjZSwgY3Vycl95LCB3LCBoLCBzZWNfdyk6CisgICAgICAgIGNoYXJ0X3JlY3QgPSBbb2ZmX3gsIGN1cnJfeStoZWFkZXJfaCwgdywgaCAtIDIgKiBvZmZfeSAtIChjdXJyX3kraGVhZGVyX2gpICsgcHJvY19oXQorCisJZHJhd19sZWdlbmRfYm94IChjdHgsICJDb25maWd1cmUiLCBcCisJCQkgVEFTS19DT0xPUl9DT05GSUdVUkUsIG9mZl94ICAsIGN1cnJfeSArIDQ1LCBsZWdfcykKKwlkcmF3X2xlZ2VuZF9ib3ggKGN0eCwgIkNvbXBpbGUiLCBcCisJCQkgVEFTS19DT0xPUl9DT01QSUxFLCBvZmZfeCsxMjAsIGN1cnJfeSArIDQ1LCBsZWdfcykKKwlkcmF3X2xlZ2VuZF9ib3ggKGN0eCwgIkluc3RhbGwiLCBcCisJCQkgVEFTS19DT0xPUl9JTlNUQUxMLCBvZmZfeCsyNDAsIGN1cnJfeSArIDQ1LCBsZWdfcykKKwlkcmF3X2xlZ2VuZF9ib3ggKGN0eCwgIlBvcHVsYXRlIFN5c3Jvb3QiLCBcCisJCQkgVEFTS19DT0xPUl9TWVNST09ULCBvZmZfeCszNjAsIGN1cnJfeSArIDQ1LCBsZWdfcykKKwlkcmF3X2xlZ2VuZF9ib3ggKGN0eCwgIlBhY2thZ2UiLCBcCisJCQkgVEFTS19DT0xPUl9QQUNLQUdFLCBvZmZfeCs0ODAsIGN1cnJfeSArIDQ1LCBsZWdfcykKKwlkcmF3X2xlZ2VuZF9ib3ggKGN0eCwgIlBhY2thZ2UgV3JpdGUiLAorCQkJIFRBU0tfQ09MT1JfUEFDS0FHRV9XUklURSwgb2ZmX3grNjAwLCBjdXJyX3kgKyA0NSwgbGVnX3MpCisKKwljdHguc2V0X2ZvbnRfc2l6ZShQUk9DX1RFWFRfRk9OVF9TSVpFKQorCisJZHJhd19ib3hfdGlja3MoY3R4LCBjaGFydF9yZWN0LCBzZWNfdykKKwlkcmF3X3NlY19sYWJlbHMoY3R4LCBvcHRpb25zLCBjaGFydF9yZWN0LCBzZWNfdywgMzApCisKKwl5ID0gY3Vycl95K2hlYWRlcl9oCisKKyAgICAgICAgb2Zmc2V0ID0gdHJhY2UubWluIG9yIG1pbih0cmFjZS5zdGFydC5rZXlzKCkpCisgICAgICAgIGZvciBzIGluIHNvcnRlZCh0cmFjZS5zdGFydC5rZXlzKCkpOgorICAgICAgICAgICAgZm9yIHZhbCBpbiBzb3J0ZWQodHJhY2Uuc3RhcnRbc10pOgorICAgICAgICAgICAgICAgIGlmIG5vdCBvcHRpb25zLmFwcF9vcHRpb25zLnNob3dfYWxsIGFuZCBcCisgICAgICAgICAgICAgICAgICAgdHJhY2UucHJvY2Vzc2VzW3ZhbF1bMV0gLSBzIDwgb3B0aW9ucy5hcHBfb3B0aW9ucy5taW50aW1lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHRhc2sgPSB2YWwuc3BsaXQoIjoiKVsxXQorICAgICAgICAgICAgICAgICNwcmludCB2YWwKKyAgICAgICAgICAgICAgICAjcHJpbnQgdHJhY2UucHJvY2Vzc2VzW3ZhbF1bMV0KKyAgICAgICAgICAgICAgICAjcHJpbnQgcworICAgICAgICAgICAgICAgIHggPSBjaGFydF9yZWN0WzBdICsgKHMgLSBvZmZzZXQpICogc2VjX3cKKyAgICAgICAgICAgICAgICB3ID0gKCh0cmFjZS5wcm9jZXNzZXNbdmFsXVsxXSAtIHMpICogc2VjX3cpCisKKyAgICAgICAgICAgICAgICAjcHJpbnQgInByb2MgYXQgJXMgJXMgJXMgJXMiICUgKHgsIHksIHcsIHByb2NfaCkKKyAgICAgICAgICAgICAgICBjb2wgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgdGFzayA9PSAiZG9fY29tcGlsZSI6CisgICAgICAgICAgICAgICAgICAgIGNvbCA9IFRBU0tfQ09MT1JfQ09NUElMRQorICAgICAgICAgICAgICAgIGVsaWYgdGFzayA9PSAiZG9fY29uZmlndXJlIjoKKyAgICAgICAgICAgICAgICAgICAgY29sID0gVEFTS19DT0xPUl9DT05GSUdVUkUKKyAgICAgICAgICAgICAgICBlbGlmIHRhc2sgPT0gImRvX2luc3RhbGwiOgorICAgICAgICAgICAgICAgICAgICBjb2wgPSBUQVNLX0NPTE9SX0lOU1RBTEwKKyAgICAgICAgICAgICAgICBlbGlmIHRhc2sgPT0gImRvX3BvcHVsYXRlX3N5c3Jvb3QiOgorICAgICAgICAgICAgICAgICAgICBjb2wgPSBUQVNLX0NPTE9SX1NZU1JPT1QKKyAgICAgICAgICAgICAgICBlbGlmIHRhc2sgPT0gImRvX3BhY2thZ2UiOgorICAgICAgICAgICAgICAgICAgICBjb2wgPSBUQVNLX0NPTE9SX1BBQ0tBR0UKKyAgICAgICAgICAgICAgICBlbGlmIHRhc2sgPT0gImRvX3BhY2thZ2Vfd3JpdGVfcnBtIiBvciBcCisgICAgICAgICAgICAgICAgICAgICB0YXNrID09ICJkb19wYWNrYWdlX3dyaXRlX2RlYiIgb3IgXAorICAgICAgICAgICAgICAgICAgICAgdGFzayA9PSAiZG9fcGFja2FnZV93cml0ZV9pcGsiOgorICAgICAgICAgICAgICAgICAgICBjb2wgPSBUQVNLX0NPTE9SX1BBQ0tBR0VfV1JJVEUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjb2wgPSBXSElURQorCisgICAgICAgICAgICAgICAgaWYgY29sOgorICAgICAgICAgICAgICAgICAgICBkcmF3X2ZpbGxfcmVjdChjdHgsIGNvbCwgKHgsIHksIHcsIHByb2NfaCkpCisgICAgICAgICAgICAgICAgZHJhd19yZWN0KGN0eCwgUFJPQ19CT1JERVJfQ09MT1IsICh4LCB5LCB3LCBwcm9jX2gpKQorCisgICAgICAgICAgICAgICAgZHJhd19sYWJlbF9pbl9ib3goY3R4LCBQUk9DX1RFWFRfQ09MT1IsIHZhbCwgeCwgeSArIHByb2NfaCAtIDQsIHcsIHByb2NfaCkKKyAgICAgICAgICAgICAgICB5ID0geSArIHByb2NfaAorCisJcmV0dXJuIGN1cnJfeQorCisjCisjIFJlbmRlciB0aGUgY2hhcnQuCisjCitkZWYgcmVuZGVyKGN0eCwgb3B0aW9ucywgeHNjYWxlLCB0cmFjZSk6CisJKHcsIGgpID0gZXh0ZW50cyAob3B0aW9ucywgeHNjYWxlLCB0cmFjZSkKKwlnbG9iYWwgT1BUSU9OUworCU9QVElPTlMgPSBvcHRpb25zLmFwcF9vcHRpb25zCisKKwkjIHgsIHksIHcsIGgKKwljbGlwID0gY3R4LmNsaXBfZXh0ZW50cygpCisKKwlzZWNfdyA9IGludCAoeHNjYWxlICogc2VjX3dfYmFzZSkKKwljdHguc2V0X2xpbmVfd2lkdGgoMS4wKQorCWN0eC5zZWxlY3RfZm9udF9mYWNlKEZPTlRfTkFNRSkKKwlkcmF3X2ZpbGxfcmVjdChjdHgsIFdISVRFLCAoMCwgMCwgbWF4KHcsIE1JTl9JTUdfVyksIGgpKQorCXcgLT0gMipvZmZfeAorCWN1cnJfeSA9IG9mZl95OworCisJY3Vycl95ID0gcmVuZGVyX3Byb2Nlc3Nlc19jaGFydCAoY3R4LCBvcHRpb25zLCB0cmFjZSwgY3Vycl95LCB3LCBoLCBzZWNfdykKKworCXJldHVybgorCisJcHJvY190cmVlID0gb3B0aW9ucy5wcm9jX3RyZWUgKHRyYWNlKQorCisJIyBkcmF3IHRoZSB0aXRsZSBhbmQgaGVhZGVycworCWlmIHByb2NfdHJlZS5pZGxlOgorCQlkdXJhdGlvbiA9IHByb2NfdHJlZS5pZGxlCisJZWxzZToKKwkJZHVyYXRpb24gPSBwcm9jX3RyZWUuZHVyYXRpb24KKworCWlmIG5vdCBvcHRpb25zLmtlcm5lbF9vbmx5OgorCQljdXJyX3kgPSBkcmF3X2hlYWRlciAoY3R4LCB0cmFjZS5oZWFkZXJzLCBkdXJhdGlvbikKKwllbHNlOgorCQljdXJyX3kgPSBvZmZfeTsKKworCWlmIG9wdGlvbnMuY2hhcnRzOgorCQljdXJyX3kgPSByZW5kZXJfY2hhcnRzIChjdHgsIG9wdGlvbnMsIGNsaXAsIHRyYWNlLCBjdXJyX3ksIHcsIGgsIHNlY193KQorCisJIyBkcmF3IHByb2Nlc3MgYm94ZXMKKwlwcm9jX2hlaWdodCA9IGgKKwlpZiBwcm9jX3RyZWUudGFza3N0YXRzIGFuZCBvcHRpb25zLmN1bXVsYXRpdmU6CisJCXByb2NfaGVpZ2h0IC09IENVTUxfSEVJR0hUCisKKwlkcmF3X3Byb2Nlc3NfYmFyX2NoYXJ0KGN0eCwgY2xpcCwgb3B0aW9ucywgcHJvY190cmVlLCB0cmFjZS50aW1lcywKKwkJCSAgICAgICBjdXJyX3ksIHcsIHByb2NfaGVpZ2h0LCBzZWNfdykKKworCWN1cnJfeSA9IHByb2NfaGVpZ2h0CisJY3R4LnNldF9mb250X3NpemUoU0lHX0ZPTlRfU0laRSkKKwlkcmF3X3RleHQoY3R4LCBTSUdOQVRVUkUsIFNJR19DT0xPUiwgb2ZmX3ggKyA1LCBwcm9jX2hlaWdodCAtIDgpCisKKwkjIGRyYXcgYSBjdW11bGF0aXZlIENQVS10aW1lLXBlci1wcm9jZXNzIGdyYXBoCisJaWYgcHJvY190cmVlLnRhc2tzdGF0cyBhbmQgb3B0aW9ucy5jdW11bGF0aXZlOgorCQljdW1sX3JlY3QgPSAob2ZmX3gsIGN1cnJfeSArIG9mZl95LCB3LCBDVU1MX0hFSUdIVC8yIC0gb2ZmX3kgKiAyKQorCQlpZiBjbGlwX3Zpc2libGUgKGNsaXAsIGN1bWxfcmVjdCk6CisJCQlkcmF3X2N1bWxfZ3JhcGgoY3R4LCBwcm9jX3RyZWUsIGN1bWxfcmVjdCwgZHVyYXRpb24sIHNlY193LCBTVEFUX1RZUEVfQ1BVKQorCisJIyBkcmF3IGEgY3VtdWxhdGl2ZSBJL08tdGltZS1wZXItcHJvY2VzcyBncmFwaAorCWlmIHByb2NfdHJlZS50YXNrc3RhdHMgYW5kIG9wdGlvbnMuY3VtdWxhdGl2ZToKKwkJY3VtbF9yZWN0ID0gKG9mZl94LCBjdXJyX3kgKyBvZmZfeSAqIDEwMCwgdywgQ1VNTF9IRUlHSFQvMiAtIG9mZl95ICogMikKKwkJaWYgY2xpcF92aXNpYmxlIChjbGlwLCBjdW1sX3JlY3QpOgorCQkJZHJhd19jdW1sX2dyYXBoKGN0eCwgcHJvY190cmVlLCBjdW1sX3JlY3QsIGR1cmF0aW9uLCBzZWNfdywgU1RBVF9UWVBFX0lPKQorCitkZWYgZHJhd19wcm9jZXNzX2Jhcl9jaGFydChjdHgsIGNsaXAsIG9wdGlvbnMsIHByb2NfdHJlZSwgdGltZXMsIGN1cnJfeSwgdywgaCwgc2VjX3cpOgorCWhlYWRlcl9zaXplID0gMAorCWlmIG5vdCBvcHRpb25zLmtlcm5lbF9vbmx5OgorCQlkcmF3X2xlZ2VuZF9ib3ggKGN0eCwgIlJ1bm5pbmcgKCVjcHUpIiwKKwkJCQkgUFJPQ19DT0xPUl9SLCBvZmZfeCAgICAsIGN1cnJfeSArIDQ1LCBsZWdfcykKKwkJZHJhd19sZWdlbmRfYm94IChjdHgsICJVbmludC5zbGVlcCAoSS9PKSIsCisJCQkJIFBST0NfQ09MT1JfRCwgb2ZmX3grMTIwLCBjdXJyX3kgKyA0NSwgbGVnX3MpCisJCWRyYXdfbGVnZW5kX2JveCAoY3R4LCAiU2xlZXBpbmciLAorCQkJCSBQUk9DX0NPTE9SX1MsIG9mZl94KzI0MCwgY3Vycl95ICsgNDUsIGxlZ19zKQorCQlkcmF3X2xlZ2VuZF9ib3ggKGN0eCwgIlpvbWJpZSIsCisJCQkJIFBST0NfQ09MT1JfWiwgb2ZmX3grMzYwLCBjdXJyX3kgKyA0NSwgbGVnX3MpCisJCWhlYWRlcl9zaXplID0gNDUKKworCWNoYXJ0X3JlY3QgPSBbb2ZmX3gsIGN1cnJfeSArIGhlYWRlcl9zaXplICsgMTUsCisJCSAgICAgIHcsIGggLSAyICogb2ZmX3kgLSAoY3Vycl95ICsgaGVhZGVyX3NpemUgKyAxNSkgKyBwcm9jX2hdCisJY3R4LnNldF9mb250X3NpemUgKFBST0NfVEVYVF9GT05UX1NJWkUpCisKKwlkcmF3X2JveF90aWNrcyAoY3R4LCBjaGFydF9yZWN0LCBzZWNfdykKKwlpZiBzZWNfdyA+IDEwMDoKKwkJbnNlYyA9IDEKKwllbHNlOgorCQluc2VjID0gNQorCWRyYXdfc2VjX2xhYmVscyAoY3R4LCBvcHRpb25zLCBjaGFydF9yZWN0LCBzZWNfdywgbnNlYykKKwlkcmF3X2Fubm90YXRpb25zIChjdHgsIHByb2NfdHJlZSwgdGltZXMsIGNoYXJ0X3JlY3QpCisKKwl5ID0gY3Vycl95ICsgNjAKKwlmb3Igcm9vdCBpbiBwcm9jX3RyZWUucHJvY2Vzc190cmVlOgorCQlkcmF3X3Byb2Nlc3Nlc19yZWN1cnNpdmVseShjdHgsIHJvb3QsIHByb2NfdHJlZSwgeSwgcHJvY19oLCBjaGFydF9yZWN0LCBjbGlwKQorCQl5ID0geSArIHByb2NfaCAqIHByb2NfdHJlZS5udW1fbm9kZXMoW3Jvb3RdKQorCisKK2RlZiBkcmF3X2hlYWRlciAoY3R4LCBoZWFkZXJzLCBkdXJhdGlvbik6CisgICAgdG9zaG93ID0gWworICAgICAgKCdzeXN0ZW0udW5hbWUnLCAndW5hbWUnLCBsYW1iZGEgczogcyksCisgICAgICAoJ3N5c3RlbS5yZWxlYXNlJywgJ3JlbGVhc2UnLCBsYW1iZGEgczogcyksCisgICAgICAoJ3N5c3RlbS5jcHUnLCAnQ1BVJywgbGFtYmRhIHM6IHJlLnN1YignbW9kZWwgbmFtZVxzKjpccyonLCAnJywgcywgMSkpLAorICAgICAgKCdzeXN0ZW0ua2VybmVsLm9wdGlvbnMnLCAna2VybmVsIG9wdGlvbnMnLCBsYW1iZGEgczogcyksCisgICAgXQorCisgICAgaGVhZGVyX3kgPSBjdHguZm9udF9leHRlbnRzKClbMl0gKyAxMAorICAgIGN0eC5zZXRfZm9udF9zaXplKFRJVExFX0ZPTlRfU0laRSkKKyAgICBkcmF3X3RleHQoY3R4LCBoZWFkZXJzWyd0aXRsZSddLCBURVhUX0NPTE9SLCBvZmZfeCwgaGVhZGVyX3kpCisgICAgY3R4LnNldF9mb250X3NpemUoVEVYVF9GT05UX1NJWkUpCisKKyAgICBmb3IgKGhlYWRlcmtleSwgaGVhZGVydGl0bGUsIG1hbmdsZSkgaW4gdG9zaG93OgorICAgICAgICBoZWFkZXJfeSArPSBjdHguZm9udF9leHRlbnRzKClbMl0KKyAgICAgICAgaWYgaGVhZGVya2V5IGluIGhlYWRlcnM6CisgICAgICAgICAgICB2YWx1ZSA9IGhlYWRlcnMuZ2V0KGhlYWRlcmtleSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbHVlID0gIiIKKyAgICAgICAgdHh0ID0gaGVhZGVydGl0bGUgKyAnOiAnICsgbWFuZ2xlKHZhbHVlKQorICAgICAgICBkcmF3X3RleHQoY3R4LCB0eHQsIFRFWFRfQ09MT1IsIG9mZl94LCBoZWFkZXJfeSkKKworICAgIGR1ciA9IGR1cmF0aW9uIC8gMTAwLjAKKyAgICB0eHQgPSAndGltZSA6ICUwMmQ6JTA1LjJmJyAlIChtYXRoLmZsb29yKGR1ci82MCksIGR1ciAtIDYwICogbWF0aC5mbG9vcihkdXIvNjApKQorICAgIGlmIGhlYWRlcnMuZ2V0KCdzeXN0ZW0ubWF4cGlkJykgaXMgbm90IE5vbmU6CisgICAgICAgIHR4dCA9IHR4dCArICcgICAgICBtYXggcGlkOiAlcycgJSAoaGVhZGVycy5nZXQoJ3N5c3RlbS5tYXhwaWQnKSkKKworICAgIGhlYWRlcl95ICs9IGN0eC5mb250X2V4dGVudHMoKVsyXQorICAgIGRyYXdfdGV4dCAoY3R4LCB0eHQsIFRFWFRfQ09MT1IsIG9mZl94LCBoZWFkZXJfeSkKKworICAgIHJldHVybiBoZWFkZXJfeQorCitkZWYgZHJhd19wcm9jZXNzZXNfcmVjdXJzaXZlbHkoY3R4LCBwcm9jLCBwcm9jX3RyZWUsIHksIHByb2NfaCwgcmVjdCwgY2xpcCkgOgorCXggPSByZWN0WzBdICsgICgocHJvYy5zdGFydF90aW1lIC0gcHJvY190cmVlLnN0YXJ0X3RpbWUpICogcmVjdFsyXSAvIHByb2NfdHJlZS5kdXJhdGlvbikKKwl3ID0gKChwcm9jLmR1cmF0aW9uKSAqIHJlY3RbMl0gLyBwcm9jX3RyZWUuZHVyYXRpb24pCisKKwlkcmF3X3Byb2Nlc3NfYWN0aXZpdHlfY29sb3JzKGN0eCwgcHJvYywgcHJvY190cmVlLCB4LCB5LCB3LCBwcm9jX2gsIHJlY3QsIGNsaXApCisJZHJhd19yZWN0KGN0eCwgUFJPQ19CT1JERVJfQ09MT1IsICh4LCB5LCB3LCBwcm9jX2gpKQorCWlwaWQgPSBpbnQocHJvYy5waWQpCisJaWYgbm90IE9QVElPTlMuc2hvd19hbGw6CisJCWNtZFN0cmluZyA9IHByb2MuY21kCisJZWxzZToKKwkJY21kU3RyaW5nID0gJycKKwlpZiAoT1BUSU9OUy5zaG93X3BpZCBvciBPUFRJT05TLnNob3dfYWxsKSBhbmQgaXBpZCBpcyBub3QgMDoKKwkJY21kU3RyaW5nID0gY21kU3RyaW5nICsgIiBbIiArIHN0cihpcGlkIC8vIDEwMDApICsgIl0iCisJaWYgT1BUSU9OUy5zaG93X2FsbDoKKwkJaWYgcHJvYy5hcmdzOgorCQkJY21kU3RyaW5nID0gY21kU3RyaW5nICsgIiAnIiArICInICciLmpvaW4ocHJvYy5hcmdzKSArICInIgorCQllbHNlOgorCQkJY21kU3RyaW5nID0gY21kU3RyaW5nICsgIiAiICsgcHJvYy5leGUKKworCWRyYXdfbGFiZWxfaW5fYm94KGN0eCwgUFJPQ19URVhUX0NPTE9SLCBjbWRTdHJpbmcsIHgsIHkgKyBwcm9jX2ggLSA0LCB3LCByZWN0WzBdICsgcmVjdFsyXSkKKworCW5leHRfeSA9IHkgKyBwcm9jX2gKKwlmb3IgY2hpbGQgaW4gcHJvYy5jaGlsZF9saXN0OgorCQlpZiBuZXh0X3kgPiBjbGlwWzFdICsgY2xpcFszXToKKwkJCWJyZWFrCisJCWNoaWxkX3gsIGNoaWxkX3kgPSBkcmF3X3Byb2Nlc3Nlc19yZWN1cnNpdmVseShjdHgsIGNoaWxkLCBwcm9jX3RyZWUsIG5leHRfeSwgcHJvY19oLCByZWN0LCBjbGlwKQorCQlkcmF3X3Byb2Nlc3NfY29ubmVjdGluZ19saW5lcyhjdHgsIHgsIHksIGNoaWxkX3gsIGNoaWxkX3ksIHByb2NfaCkKKwkJbmV4dF95ID0gbmV4dF95ICsgcHJvY19oICogcHJvY190cmVlLm51bV9ub2RlcyhbY2hpbGRdKQorCisJcmV0dXJuIHgsIHkKKworCitkZWYgZHJhd19wcm9jZXNzX2FjdGl2aXR5X2NvbG9ycyhjdHgsIHByb2MsIHByb2NfdHJlZSwgeCwgeSwgdywgcHJvY19oLCByZWN0LCBjbGlwKToKKworCWlmIHkgPiBjbGlwWzFdICsgY2xpcFszXSBvciB5ICsgcHJvY19oICsgMiA8IGNsaXBbMV06CisJCXJldHVybgorCisJZHJhd19maWxsX3JlY3QoY3R4LCBQUk9DX0NPTE9SX1MsICh4LCB5LCB3LCBwcm9jX2gpKQorCisJbGFzdF90eCA9IC0xCisJZm9yIHNhbXBsZSBpbiBwcm9jLnNhbXBsZXMgOgorCQl0eCA9IHJlY3RbMF0gKyByb3VuZCgoKHNhbXBsZS50aW1lIC0gcHJvY190cmVlLnN0YXJ0X3RpbWUpICogcmVjdFsyXSAvIHByb2NfdHJlZS5kdXJhdGlvbikpCisKKwkJIyBzYW1wbGVzIGFyZSBzb3J0ZWQgY2hyb25vbG9naWNhbGx5CisJCWlmIHR4IDwgY2xpcFswXToKKwkJCWNvbnRpbnVlCisJCWlmIHR4ID4gY2xpcFswXSArIGNsaXBbMl06CisJCQlicmVhaworCisJCXR3ID0gcm91bmQocHJvY190cmVlLnNhbXBsZV9wZXJpb2QgKiByZWN0WzJdIC8gZmxvYXQocHJvY190cmVlLmR1cmF0aW9uKSkKKwkJaWYgbGFzdF90eCAhPSAtMSBhbmQgYWJzKGxhc3RfdHggLSB0eCkgPD0gdHc6CisJCQl0dyAtPSBsYXN0X3R4IC0gdHgKKwkJCXR4ID0gbGFzdF90eAorCQl0dyA9IG1heCAodHcsIDEpICMgbmljZSB0byBzZWUgYXQgbGVhc3Qgc29tZXRoaW5nCisKKwkJbGFzdF90eCA9IHR4ICsgdHcKKwkJc3RhdGUgPSBnZXRfcHJvY19zdGF0ZSggc2FtcGxlLnN0YXRlICkKKworCQljb2xvciA9IFNUQVRFX0NPTE9SU1tzdGF0ZV0KKwkJaWYgc3RhdGUgPT0gU1RBVEVfUlVOTklORzoKKwkJCWFscGhhID0gbWluIChzYW1wbGUuY3B1X3NhbXBsZS51c2VyICsgc2FtcGxlLmNwdV9zYW1wbGUuc3lzLCAxLjApCisJCQljb2xvciA9IHR1cGxlKGxpc3QoUFJPQ19DT0xPUl9SWzA6M10pICsgW2FscGhhXSkKKyMJCQlwcmludCAicmVuZGVyIHRpbWUgJWQgWyB0eCAlZCB0dyAlZCBdLCBzYW1wbGUgc3RhdGUgJXMgY29sb3IgJXMgYWxwaGEgJWciICUgKHNhbXBsZS50aW1lLCB0eCwgdHcsIHN0YXRlLCBjb2xvciwgYWxwaGEpCisJCWVsaWYgc3RhdGUgPT0gU1RBVEVfU0xFRVBJTkc6CisJCQljb250aW51ZQorCisJCWRyYXdfZmlsbF9yZWN0KGN0eCwgY29sb3IsICh0eCwgeSwgdHcsIHByb2NfaCkpCisKK2RlZiBkcmF3X3Byb2Nlc3NfY29ubmVjdGluZ19saW5lcyhjdHgsIHB4LCBweSwgeCwgeSwgcHJvY19oKToKKwljdHguc2V0X3NvdXJjZV9yZ2JhKCpERVBfQ09MT1IpCisJY3R4LnNldF9kYXNoKFsyLCAyXSkKKwlpZiBhYnMocHggLSB4KSA8IDM6CisJCWRlcF9vZmZfeCA9IDMKKwkJZGVwX29mZl95ID0gcHJvY19oIC8gNAorCQljdHgubW92ZV90byh4LCB5ICsgcHJvY19oIC8gMikKKwkJY3R4LmxpbmVfdG8ocHggLSBkZXBfb2ZmX3gsIHkgKyBwcm9jX2ggLyAyKQorCQljdHgubGluZV90byhweCAtIGRlcF9vZmZfeCwgcHkgLSBkZXBfb2ZmX3kpCisJCWN0eC5saW5lX3RvKHB4LCBweSAtIGRlcF9vZmZfeSkKKwllbHNlOgorCQljdHgubW92ZV90byh4LCB5ICsgcHJvY19oIC8gMikKKwkJY3R4LmxpbmVfdG8ocHgsIHkgKyBwcm9jX2ggLyAyKQorCQljdHgubGluZV90byhweCwgcHkpCisJY3R4LnN0cm9rZSgpCisJY3R4LnNldF9kYXNoKFtdKQorCisjIGVsaWRlIHRoZSBib290Y2hhcnQgY29sbGVjdG9yIC0gaXQgaXMgcXVpdGUgZGlzdG9ydGluZworZGVmIGVsaWRlX2Jvb3RjaGFydChwcm9jKToKKwlyZXR1cm4gcHJvYy5jbWQgPT0gJ2Jvb3RjaGFydGQnIG9yIHByb2MuY21kID09ICdib290Y2hhcnQtY29sbGUnCisKK2NsYXNzIEN1bWxTYW1wbGU6CisJZGVmIF9faW5pdF9fKHNlbGYsIHByb2MpOgorCQlzZWxmLmNtZCA9IHByb2MuY21kCisJCXNlbGYuc2FtcGxlcyA9IFtdCisJCXNlbGYubWVyZ2Vfc2FtcGxlcyAocHJvYykKKwkJc2VsZi5jb2xvciA9IE5vbmUKKworCWRlZiBtZXJnZV9zYW1wbGVzKHNlbGYsIHByb2MpOgorCQlzZWxmLnNhbXBsZXMuZXh0ZW5kIChwcm9jLnNhbXBsZXMpCisJCXNlbGYuc2FtcGxlcy5zb3J0IChrZXkgPSBsYW1iZGEgcDogcC50aW1lKQorCisJZGVmIG5leHQoc2VsZik6CisJCWdsb2JhbCBwYWxldHRlX2lkeAorCQlwYWxldHRlX2lkeCArPSBIU1ZfU1RFUAorCQlyZXR1cm4gcGFsZXR0ZV9pZHgKKworCWRlZiBnZXRfY29sb3Ioc2VsZik6CisJCWlmIHNlbGYuY29sb3IgaXMgTm9uZToKKwkJCWkgPSBzZWxmLm5leHQoKSAlIEhTVl9NQVhfTU9ECisJCQloID0gMC4wCisJCQlpZiBpIGlzIG5vdCAwOgorCQkJCWggPSAoMS4wICogaSkgLyBIU1ZfTUFYX01PRAorCQkJcyA9IDAuNQorCQkJdiA9IDEuMAorCQkJYyA9IGNvbG9yc3lzLmhzdl90b19yZ2IgKGgsIHMsIHYpCisJCQlzZWxmLmNvbG9yID0gKGNbMF0sIGNbMV0sIGNbMl0sIDEuMCkKKwkJcmV0dXJuIHNlbGYuY29sb3IKKworCitkZWYgZHJhd19jdW1sX2dyYXBoKGN0eCwgcHJvY190cmVlLCBjaGFydF9ib3VuZHMsIGR1cmF0aW9uLCBzZWNfdywgc3RhdF90eXBlKToKKwlnbG9iYWwgcGFsZXR0ZV9pZHgKKwlwYWxldHRlX2lkeCA9IDAKKworCXRpbWVfaGFzaCA9IHt9CisJdG90YWxfdGltZSA9IDAuMAorCW1fcHJvY19saXN0ID0ge30KKworCWlmIHN0YXRfdHlwZSBpcyBTVEFUX1RZUEVfQ1BVOgorCQlzYW1wbGVfdmFsdWUgPSAnY3B1JworCWVsc2U6CisJCXNhbXBsZV92YWx1ZSA9ICdpbycKKwlmb3IgcHJvYyBpbiBwcm9jX3RyZWUucHJvY2Vzc19saXN0OgorCQlpZiBlbGlkZV9ib290Y2hhcnQocHJvYyk6CisJCQljb250aW51ZQorCisJCWZvciBzYW1wbGUgaW4gcHJvYy5zYW1wbGVzOgorCQkJdG90YWxfdGltZSArPSBnZXRhdHRyKHNhbXBsZS5jcHVfc2FtcGxlLCBzYW1wbGVfdmFsdWUpCisJCQlpZiBub3Qgc2FtcGxlLnRpbWUgaW4gdGltZV9oYXNoOgorCQkJCXRpbWVfaGFzaFtzYW1wbGUudGltZV0gPSAxCisKKwkJIyBtZXJnZSBwaWRzIHdpdGggdGhlIHNhbWUgY21kCisJCWlmIG5vdCBwcm9jLmNtZCBpbiBtX3Byb2NfbGlzdDoKKwkJCW1fcHJvY19saXN0W3Byb2MuY21kXSA9IEN1bWxTYW1wbGUgKHByb2MpCisJCQljb250aW51ZQorCQlzID0gbV9wcm9jX2xpc3RbcHJvYy5jbWRdCisJCXMubWVyZ2Vfc2FtcGxlcyAocHJvYykKKworCSMgYWxsIHRoZSBzYW1wbGUgdGltZXMKKwl0aW1lcyA9IHNvcnRlZCh0aW1lX2hhc2gpCisJaWYgbGVuICh0aW1lcykgPCAyOgorCQlwcmludCgiZGVnZW5lcmF0ZSBib290IGNoYXJ0IikKKwkJcmV0dXJuCisKKwlwaXhfcGVyX25zID0gY2hhcnRfYm91bmRzWzNdIC8gdG90YWxfdGltZQorIwlwcmludCAidG90YWwgdGltZTogJWcgcGl4LXBlci1ucyAlZyIgJSAodG90YWxfdGltZSwgcGl4X3Blcl9ucykKKworCSMgRklYTUU6IHdlIGhhdmUgZHVwbGljYXRlcyBpbiB0aGUgcHJvY2VzcyBsaXN0IHRvbyBbIV0gLSB3aHkgIT8KKworCSMgUmVuZGVyIGJvdHRvbSB1cCwgbGVmdCB0byByaWdodAorCWJlbG93ID0ge30KKwlmb3IgdGltZSBpbiB0aW1lczoKKwkJYmVsb3dbdGltZV0gPSBjaGFydF9ib3VuZHNbMV0gKyBjaGFydF9ib3VuZHNbM10KKworCSMgc2FtZSBjb2xvcnMgZWFjaCB0aW1lIHdlIHJlbmRlcgorCXJhbmRvbS5zZWVkICgwKQorCisJY3R4LnNldF9saW5lX3dpZHRoKDEpCisKKwlsZWdlbmRzID0gW10KKwlsYWJlbHMgPSBbXQorCisJIyByZW5kZXIgZWFjaCBwaWQgaW4gb3JkZXIKKwlmb3IgY3MgaW4gbV9wcm9jX2xpc3QudmFsdWVzKCk6CisJCXJvdyA9IHt9CisJCWN1bWwgPSAwLjAKKworCQkjIHByaW50ICJwaWQgOiAlcyAtPiAlZyBzYW1wbGVzICVkIiAlIChwcm9jLmNtZCwgY3VtbCwgbGVuIChjcy5zYW1wbGVzKSkKKwkJZm9yIHNhbXBsZSBpbiBjcy5zYW1wbGVzOgorCQkJY3VtbCArPSBnZXRhdHRyKHNhbXBsZS5jcHVfc2FtcGxlLCBzYW1wbGVfdmFsdWUpCisJCQlyb3dbc2FtcGxlLnRpbWVdID0gY3VtbAorCisJCXByb2Nlc3NfdG90YWxfdGltZSA9IGN1bWwKKworCQkjIGhpZGUgcmVhbGx5IHRpbnkgcHJvY2Vzc2VzCisJCWlmIGN1bWwgKiBwaXhfcGVyX25zIDw9IDI6CisJCQljb250aW51ZQorCisJCWxhc3RfdGltZSA9IHRpbWVzWzBdCisJCXkgPSBsYXN0X2JlbG93ID0gYmVsb3dbbGFzdF90aW1lXQorCQlsYXN0X2N1bWwgPSBjdW1sID0gMC4wCisKKwkJY3R4LnNldF9zb3VyY2VfcmdiYSgqY3MuZ2V0X2NvbG9yKCkpCisJCWZvciB0aW1lIGluIHRpbWVzOgorCQkJcmVuZGVyX3NlZyA9IEZhbHNlCisKKwkJCSMgZGlkIHRoZSB1bmRlcmx5aW5nIHRyZW5kIGluY3JlYXNlID8KKwkJCWlmIGJlbG93W3RpbWVdICE9IGxhc3RfYmVsb3c6CisJCQkJbGFzdF9iZWxvdyA9IGJlbG93W2xhc3RfdGltZV0KKwkJCQlsYXN0X2N1bWwgPSBjdW1sCisJCQkJcmVuZGVyX3NlZyA9IFRydWUKKworCQkJIyBkaWQgd2UgbW92ZSB1cCBhIHBpeGVsIGluY3JlYXNlID8KKwkJCWlmIHRpbWUgaW4gcm93OgorCQkJCW5jID0gcm91bmQgKHJvd1t0aW1lXSAqIHBpeF9wZXJfbnMpCisJCQkJaWYgbmMgIT0gY3VtbDoKKwkJCQkJbGFzdF9jdW1sID0gY3VtbAorCQkJCQljdW1sID0gbmMKKwkJCQkJcmVuZGVyX3NlZyA9IFRydWUKKworIwkJCWlmIGxhc3RfY3VtbCA+IGN1bWw6CisjCQkJCWFzc2VydCBmYWlsIC4uLiAtIHVuLXNvcnRlZCBwcm9jZXNzIHNhbXBsZXMKKworCQkJIyBkcmF3IHRoZSB0cmFpbGluZyByZWN0YW5nbGUgZnJvbSB0aGUgbGFzdCB0aW1lIHRvCisJCQkjIGJlZm9yZSBub3csIGF0IHRoZSBoZWlnaHQgb2YgdGhlIGxhc3Qgc2VnbWVudC4KKwkJCWlmIHJlbmRlcl9zZWc6CisJCQkJdyA9IG1hdGguY2VpbCAoKHRpbWUgLSBsYXN0X3RpbWUpICogY2hhcnRfYm91bmRzWzJdIC8gcHJvY190cmVlLmR1cmF0aW9uKSArIDEKKwkJCQl4ID0gY2hhcnRfYm91bmRzWzBdICsgcm91bmQoKGxhc3RfdGltZSAtIHByb2NfdHJlZS5zdGFydF90aW1lKSAqIGNoYXJ0X2JvdW5kc1syXSAvIHByb2NfdHJlZS5kdXJhdGlvbikKKwkJCQljdHgucmVjdGFuZ2xlICh4LCBiZWxvd1tsYXN0X3RpbWVdIC0gbGFzdF9jdW1sLCB3LCBsYXN0X2N1bWwpCisJCQkJY3R4LmZpbGwoKQorIwkJCQljdHguc3Ryb2tlKCkKKwkJCQlsYXN0X3RpbWUgPSB0aW1lCisJCQkJeSA9IGJlbG93IFt0aW1lXSAtIGN1bWwKKworCQkJcm93W3RpbWVdID0geQorCisJCSMgcmVuZGVyIHRoZSBsYXN0IHNlZ21lbnQKKwkJeCA9IGNoYXJ0X2JvdW5kc1swXSArIHJvdW5kKChsYXN0X3RpbWUgLSBwcm9jX3RyZWUuc3RhcnRfdGltZSkgKiBjaGFydF9ib3VuZHNbMl0gLyBwcm9jX3RyZWUuZHVyYXRpb24pCisJCXkgPSBiZWxvd1tsYXN0X3RpbWVdIC0gY3VtbAorCQljdHgucmVjdGFuZ2xlICh4LCB5LCBjaGFydF9ib3VuZHNbMl0gLSB4LCBjdW1sKQorCQljdHguZmlsbCgpCisjCQljdHguc3Ryb2tlKCkKKworCQkjIHJlbmRlciBsZWdlbmQgaWYgaXQgd2lsbCBmaXQKKwkJaWYgY3VtbCA+IDg6CisJCQlsYWJlbCA9IGNzLmNtZAorCQkJZXh0bnRzID0gY3R4LnRleHRfZXh0ZW50cyhsYWJlbCkKKwkJCWxhYmVsX3cgPSBleHRudHNbMl0KKwkJCWxhYmVsX2ggPSBleHRudHNbM10KKyMJCQlwcmludCAiVGV4dCBleHRlbnRzICVnIGJ5ICVnIiAlIChsYWJlbF93LCBsYWJlbF9oKQorCQkJbGFiZWxzLmFwcGVuZCgobGFiZWwsCisJCQkJICAgICAgIGNoYXJ0X2JvdW5kc1swXSArIGNoYXJ0X2JvdW5kc1syXSAtIGxhYmVsX3cgLSBvZmZfeCAqIDIsCisJCQkJICAgICAgIHkgKyAoY3VtbCArIGxhYmVsX2gpIC8gMikpCisJCQlpZiBjcyBpbiBsZWdlbmRzOgorCQkJCXByaW50KCJBUkdIIC0gZHVwbGljYXRlIHByb2Nlc3MgaW4gbGlzdCAhIikKKworCQlsZWdlbmRzLmFwcGVuZCAoKGNzLCBwcm9jZXNzX3RvdGFsX3RpbWUpKQorCisJCWJlbG93ID0gcm93CisKKwkjIHJlbmRlciBncmlkLWxpbmVzIG92ZXIgdGhlIHRvcAorCWRyYXdfYm94X3RpY2tzKGN0eCwgY2hhcnRfYm91bmRzLCBzZWNfdykKKworCSMgcmVuZGVyIGxhYmVscworCWZvciBsIGluIGxhYmVsczoKKwkJZHJhd190ZXh0KGN0eCwgbFswXSwgVEVYVF9DT0xPUiwgbFsxXSwgbFsyXSkKKworCSMgUmVuZGVyIGxlZ2VuZHMKKwlmb250X2hlaWdodCA9IDIwCisJbGFiZWxfd2lkdGggPSAzMDAKKwlMRUdFTkRTX1BFUl9DT0wgPSAxNQorCUxFR0VORFNfVE9UQUwgPSA0NQorCWN0eC5zZXRfZm9udF9zaXplIChUSVRMRV9GT05UX1NJWkUpCisJZHVyX3NlY3MgPSBkdXJhdGlvbiAvIDEwMAorCWNwdV9zZWNzID0gdG90YWxfdGltZSAvIDEwMDAwMDAwMDAKKworCSMgbWlzbGVhZGluZyAtIHdpdGggbXVsdGlwbGUgQ1BVcyAuLi4KKyMJaWRsZSA9ICgoZHVyX3NlY3MgLSBjcHVfc2VjcykgLyBkdXJfc2VjcykgKiAxMDAuMAorCWlmIHN0YXRfdHlwZSBpcyBTVEFUX1RZUEVfQ1BVOgorCQlsYWJlbCA9ICJDdW11bGF0aXZlIENQVSB1c2FnZSwgYnkgcHJvY2VzczsgdG90YWwgQ1BVOiAiIFwKKwkJCSIgJS41ZyhzKSB0aW1lOiAlLjNnKHMpIiAlIChjcHVfc2VjcywgZHVyX3NlY3MpCisJZWxzZToKKwkJbGFiZWwgPSAiQ3VtdWxhdGl2ZSBJL08gdXNhZ2UsIGJ5IHByb2Nlc3M7IHRvdGFsIEkvTzogIiBcCisJCQkiICUuNWcocykgdGltZTogJS4zZyhzKSIgJSAoY3B1X3NlY3MsIGR1cl9zZWNzKQorCisJZHJhd190ZXh0KGN0eCwgbGFiZWwsIFRFWFRfQ09MT1IsIGNoYXJ0X2JvdW5kc1swXSArIG9mZl94LAorCQkgIGNoYXJ0X2JvdW5kc1sxXSArIGZvbnRfaGVpZ2h0KQorCisJaSA9IDAKKwlsZWdlbmRzID0gc29ydGVkKGxlZ2VuZHMsIGtleT1pdGVtZ2V0dGVyKDEpLCByZXZlcnNlPVRydWUpCisJY3R4LnNldF9mb250X3NpemUoVEVYVF9GT05UX1NJWkUpCisJZm9yIHQgaW4gbGVnZW5kczoKKwkJY3MgPSB0WzBdCisJCXRpbWUgPSB0WzFdCisJCXggPSBjaGFydF9ib3VuZHNbMF0gKyBvZmZfeCArIGludCAoaS9MRUdFTkRTX1BFUl9DT0wpICogbGFiZWxfd2lkdGgKKwkJeSA9IGNoYXJ0X2JvdW5kc1sxXSArIGZvbnRfaGVpZ2h0ICogKChpICUgTEVHRU5EU19QRVJfQ09MKSArIDIpCisJCXN0ciA9ICIlcyAtICUuMGYobXMpICglMi4yZiUlKSIgJSAoY3MuY21kLCB0aW1lLzEwMDAwMDAsICh0aW1lL3RvdGFsX3RpbWUpICogMTAwLjApCisJCWRyYXdfbGVnZW5kX2JveChjdHgsIHN0ciwgY3MuY29sb3IsIHgsIHksIGxlZ19zKQorCQlpID0gaSArIDEKKwkJaWYgaSA+PSBMRUdFTkRTX1RPVEFMOgorCQkJYnJlYWsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9ndWkucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvZ3VpLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZWRkMjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvZ3VpLnB5CkBAIC0wLDAgKzEsMzUwIEBACisjICBUaGlzIGZpbGUgaXMgcGFydCBvZiBweWJvb3RjaGFydGd1aS4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICBhbG9uZyB3aXRoIHB5Ym9vdGNoYXJ0Z3VpLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgZ3RrCitpbXBvcnQgZ3RrLmdkaworaW1wb3J0IGd0ay5rZXlzeW1zCitmcm9tIC4gaW1wb3J0IGRyYXcKK2Zyb20gLmRyYXcgaW1wb3J0IFJlbmRlck9wdGlvbnMKKworY2xhc3MgUHlCb290Y2hhcnRXaWRnZXQoZ3RrLkRyYXdpbmdBcmVhKToKKyAgICBfX2dzaWduYWxzX18gPSB7CisgICAgICAgICAgICAnZXhwb3NlLWV2ZW50JzogJ292ZXJyaWRlJywKKyAgICAgICAgICAgICdjbGlja2VkJyA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwgZ29iamVjdC5UWVBFX05PTkUsIChnb2JqZWN0LlRZUEVfU1RSSU5HLCBndGsuZ2RrLkV2ZW50KSksCisgICAgICAgICAgICAncG9zaXRpb24tY2hhbmdlZCcgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsIGdvYmplY3QuVFlQRV9OT05FLCAoZ29iamVjdC5UWVBFX0lOVCwgZ29iamVjdC5UWVBFX0lOVCkpLAorICAgICAgICAgICAgJ3NldC1zY3JvbGwtYWRqdXN0bWVudHMnIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULCBnb2JqZWN0LlRZUEVfTk9ORSwgKGd0ay5BZGp1c3RtZW50LCBndGsuQWRqdXN0bWVudCkpCisgICAgfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYWNlLCBvcHRpb25zLCB4c2NhbGUpOgorICAgICAgICBndGsuRHJhd2luZ0FyZWEuX19pbml0X18oc2VsZikKKworICAgICAgICBzZWxmLnRyYWNlID0gdHJhY2UKKyAgICAgICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucworCisgICAgICAgIHNlbGYuc2V0X2ZsYWdzKGd0ay5DQU5fRk9DVVMpCisKKyAgICAgICAgc2VsZi5hZGRfZXZlbnRzKGd0ay5nZGsuQlVUVE9OX1BSRVNTX01BU0sgfCBndGsuZ2RrLkJVVFRPTl9SRUxFQVNFX01BU0spCisgICAgICAgIHNlbGYuY29ubmVjdCgiYnV0dG9uLXByZXNzLWV2ZW50Iiwgc2VsZi5vbl9hcmVhX2J1dHRvbl9wcmVzcykKKyAgICAgICAgc2VsZi5jb25uZWN0KCJidXR0b24tcmVsZWFzZS1ldmVudCIsIHNlbGYub25fYXJlYV9idXR0b25fcmVsZWFzZSkKKyAgICAgICAgc2VsZi5hZGRfZXZlbnRzKGd0ay5nZGsuUE9JTlRFUl9NT1RJT05fTUFTSyB8IGd0ay5nZGsuUE9JTlRFUl9NT1RJT05fSElOVF9NQVNLIHwgZ3RrLmdkay5CVVRUT05fUkVMRUFTRV9NQVNLKQorICAgICAgICBzZWxmLmNvbm5lY3QoIm1vdGlvbi1ub3RpZnktZXZlbnQiLCBzZWxmLm9uX2FyZWFfbW90aW9uX25vdGlmeSkKKyAgICAgICAgc2VsZi5jb25uZWN0KCJzY3JvbGwtZXZlbnQiLCBzZWxmLm9uX2FyZWFfc2Nyb2xsX2V2ZW50KQorICAgICAgICBzZWxmLmNvbm5lY3QoJ2tleS1wcmVzcy1ldmVudCcsIHNlbGYub25fa2V5X3ByZXNzX2V2ZW50KQorCisgICAgICAgIHNlbGYuY29ubmVjdCgnc2V0LXNjcm9sbC1hZGp1c3RtZW50cycsIHNlbGYub25fc2V0X3Njcm9sbF9hZGp1c3RtZW50cykKKyAgICAgICAgc2VsZi5jb25uZWN0KCJzaXplLWFsbG9jYXRlIiwgc2VsZi5vbl9hbGxvY2F0aW9uX3NpemVfY2hhbmdlZCkKKyAgICAgICAgc2VsZi5jb25uZWN0KCJwb3NpdGlvbi1jaGFuZ2VkIiwgc2VsZi5vbl9wb3NpdGlvbl9jaGFuZ2VkKQorCisgICAgICAgIHNlbGYuem9vbV9yYXRpbyA9IDEuMAorICAgICAgICBzZWxmLnhzY2FsZSA9IHhzY2FsZQorICAgICAgICBzZWxmLngsIHNlbGYueSA9IDAuMCwgMC4wCisKKyAgICAgICAgc2VsZi5jaGFydF93aWR0aCwgc2VsZi5jaGFydF9oZWlnaHQgPSBkcmF3LmV4dGVudHMoc2VsZi5vcHRpb25zLCBzZWxmLnhzY2FsZSwgc2VsZi50cmFjZSkKKyAgICAgICAgc2VsZi5oYWRqID0gTm9uZQorICAgICAgICBzZWxmLnZhZGogPSBOb25lCisgICAgICAgIHNlbGYuaGFkal9jaGFuZ2VkX3NpZ25hbF9pZCA9IE5vbmUKKyAgICAgICAgc2VsZi52YWRqX2NoYW5nZWRfc2lnbmFsX2lkID0gTm9uZQorCisgICAgZGVmIGRvX2V4cG9zZV9ldmVudChzZWxmLCBldmVudCk6CisgICAgICAgIGNyID0gc2VsZi53aW5kb3cuY2Fpcm9fY3JlYXRlKCkKKworICAgICAgICAjIHNldCBhIGNsaXAgcmVnaW9uIGZvciB0aGUgZXhwb3NlIGV2ZW50CisgICAgICAgIGNyLnJlY3RhbmdsZSgKKyAgICAgICAgICAgICAgICBldmVudC5hcmVhLngsIGV2ZW50LmFyZWEueSwKKyAgICAgICAgICAgICAgICBldmVudC5hcmVhLndpZHRoLCBldmVudC5hcmVhLmhlaWdodAorICAgICAgICApCisgICAgICAgIGNyLmNsaXAoKQorICAgICAgICBzZWxmLmRyYXcoY3IsIHNlbGYuZ2V0X2FsbG9jYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgZHJhdyhzZWxmLCBjciwgcmVjdCk6CisgICAgICAgIGNyLnNldF9zb3VyY2VfcmdiYSgxLjAsIDEuMCwgMS4wLCAxLjApCisgICAgICAgIGNyLnBhaW50KCkKKyAgICAgICAgY3Iuc2NhbGUoc2VsZi56b29tX3JhdGlvLCBzZWxmLnpvb21fcmF0aW8pCisgICAgICAgIGNyLnRyYW5zbGF0ZSgtc2VsZi54LCAtc2VsZi55KQorICAgICAgICBkcmF3LnJlbmRlcihjciwgc2VsZi5vcHRpb25zLCBzZWxmLnhzY2FsZSwgc2VsZi50cmFjZSkKKworICAgIGRlZiBwb3NpdGlvbl9jaGFuZ2VkKHNlbGYpOgorICAgICAgICBzZWxmLmVtaXQoInBvc2l0aW9uLWNoYW5nZWQiLCBzZWxmLngsIHNlbGYueSkKKworICAgIFpPT01fSU5DUkVNRU5UID0gMS4yNQorCisgICAgZGVmIHpvb21faW1hZ2UgKHNlbGYsIHpvb21fcmF0aW8pOgorICAgICAgICBzZWxmLnpvb21fcmF0aW8gPSB6b29tX3JhdGlvCisgICAgICAgIHNlbGYuX3NldF9zY3JvbGxfYWRqdXN0bWVudHMgKHNlbGYuaGFkaiwgc2VsZi52YWRqKQorICAgICAgICBzZWxmLnF1ZXVlX2RyYXcoKQorCisgICAgZGVmIHpvb21fdG9fcmVjdCAoc2VsZiwgcmVjdCk6CisgICAgICAgIHpvb21fcmF0aW8gPSBmbG9hdChyZWN0LndpZHRoKS9mbG9hdChzZWxmLmNoYXJ0X3dpZHRoKQorICAgICAgICBzZWxmLnpvb21faW1hZ2Uoem9vbV9yYXRpbykKKyAgICAgICAgc2VsZi54ID0gMAorICAgICAgICBzZWxmLnBvc2l0aW9uX2NoYW5nZWQoKQorCisgICAgZGVmIHNldF94c2NhbGUoc2VsZiwgeHNjYWxlKToKKyAgICAgICAgb2xkX21pZF94ID0gc2VsZi54ICsgc2VsZi5oYWRqLnBhZ2Vfc2l6ZSAvIDIKKyAgICAgICAgc2VsZi54c2NhbGUgPSB4c2NhbGUKKyAgICAgICAgc2VsZi5jaGFydF93aWR0aCwgc2VsZi5jaGFydF9oZWlnaHQgPSBkcmF3LmV4dGVudHMoc2VsZi5vcHRpb25zLCBzZWxmLnhzY2FsZSwgc2VsZi50cmFjZSkKKyAgICAgICAgbmV3X3ggPSBvbGRfbWlkX3gKKyAgICAgICAgc2VsZi56b29tX2ltYWdlIChzZWxmLnpvb21fcmF0aW8pCisKKyAgICBkZWYgb25fZXhwYW5kKHNlbGYsIGFjdGlvbik6CisgICAgICAgIHNlbGYuc2V0X3hzY2FsZSAoaW50KHNlbGYueHNjYWxlICogMS41ICsgMC41KSkKKworICAgIGRlZiBvbl9jb250cmFjdChzZWxmLCBhY3Rpb24pOgorICAgICAgICBzZWxmLnNldF94c2NhbGUgKG1heChpbnQoc2VsZi54c2NhbGUgLyAxLjUpLCAxKSkKKworICAgIGRlZiBvbl96b29tX2luKHNlbGYsIGFjdGlvbik6CisgICAgICAgIHNlbGYuem9vbV9pbWFnZShzZWxmLnpvb21fcmF0aW8gKiBzZWxmLlpPT01fSU5DUkVNRU5UKQorCisgICAgZGVmIG9uX3pvb21fb3V0KHNlbGYsIGFjdGlvbik6CisgICAgICAgIHNlbGYuem9vbV9pbWFnZShzZWxmLnpvb21fcmF0aW8gLyBzZWxmLlpPT01fSU5DUkVNRU5UKQorCisgICAgZGVmIG9uX3pvb21fZml0KHNlbGYsIGFjdGlvbik6CisgICAgICAgIHNlbGYuem9vbV90b19yZWN0KHNlbGYuZ2V0X2FsbG9jYXRpb24oKSkKKworICAgIGRlZiBvbl96b29tXzEwMChzZWxmLCBhY3Rpb24pOgorICAgICAgICBzZWxmLnpvb21faW1hZ2UoMS4wKQorICAgICAgICBzZWxmLnNldF94c2NhbGUoMS4wKQorCisgICAgZGVmIHNob3dfdG9nZ2xlZChzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLm9wdGlvbnMuYXBwX29wdGlvbnMuc2hvd19hbGwgPSBidXR0b24uZ2V0X3Byb3BlcnR5ICgnYWN0aXZlJykKKyAgICAgICAgc2VsZi5jaGFydF93aWR0aCwgc2VsZi5jaGFydF9oZWlnaHQgPSBkcmF3LmV4dGVudHMoc2VsZi5vcHRpb25zLCBzZWxmLnhzY2FsZSwgc2VsZi50cmFjZSkKKyAgICAgICAgc2VsZi5fc2V0X3Njcm9sbF9hZGp1c3RtZW50cyhzZWxmLmhhZGosIHNlbGYudmFkaikKKyAgICAgICAgc2VsZi5xdWV1ZV9kcmF3KCkKKworICAgIFBPU19JTkNSRU1FTlQgPSAxMDAKKworICAgIGRlZiBvbl9rZXlfcHJlc3NfZXZlbnQoc2VsZiwgd2lkZ2V0LCBldmVudCk6CisgICAgICAgIGlmIGV2ZW50LmtleXZhbCA9PSBndGsua2V5c3ltcy5MZWZ0OgorICAgICAgICAgICAgc2VsZi54IC09IHNlbGYuUE9TX0lOQ1JFTUVOVC9zZWxmLnpvb21fcmF0aW8KKyAgICAgICAgZWxpZiBldmVudC5rZXl2YWwgPT0gZ3RrLmtleXN5bXMuUmlnaHQ6CisgICAgICAgICAgICBzZWxmLnggKz0gc2VsZi5QT1NfSU5DUkVNRU5UL3NlbGYuem9vbV9yYXRpbworICAgICAgICBlbGlmIGV2ZW50LmtleXZhbCA9PSBndGsua2V5c3ltcy5VcDoKKyAgICAgICAgICAgIHNlbGYueSAtPSBzZWxmLlBPU19JTkNSRU1FTlQvc2VsZi56b29tX3JhdGlvCisgICAgICAgIGVsaWYgZXZlbnQua2V5dmFsID09IGd0ay5rZXlzeW1zLkRvd246CisgICAgICAgICAgICBzZWxmLnkgKz0gc2VsZi5QT1NfSU5DUkVNRU5UL3NlbGYuem9vbV9yYXRpbworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHNlbGYucXVldWVfZHJhdygpCisgICAgICAgIHNlbGYucG9zaXRpb25fY2hhbmdlZCgpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgb25fYXJlYV9idXR0b25fcHJlc3Moc2VsZiwgYXJlYSwgZXZlbnQpOgorICAgICAgICBpZiBldmVudC5idXR0b24gPT0gMiBvciBldmVudC5idXR0b24gPT0gMToKKyAgICAgICAgICAgIGFyZWEud2luZG93LnNldF9jdXJzb3IoZ3RrLmdkay5DdXJzb3IoZ3RrLmdkay5GTEVVUikpCisgICAgICAgICAgICBzZWxmLnByZXZtb3VzZXggPSBldmVudC54CisgICAgICAgICAgICBzZWxmLnByZXZtb3VzZXkgPSBldmVudC55CisgICAgICAgIGlmIGV2ZW50LnR5cGUgbm90IGluIChndGsuZ2RrLkJVVFRPTl9QUkVTUywgZ3RrLmdkay5CVVRUT05fUkVMRUFTRSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgb25fYXJlYV9idXR0b25fcmVsZWFzZShzZWxmLCBhcmVhLCBldmVudCk6CisgICAgICAgIGlmIGV2ZW50LmJ1dHRvbiA9PSAyIG9yIGV2ZW50LmJ1dHRvbiA9PSAxOgorICAgICAgICAgICAgYXJlYS53aW5kb3cuc2V0X2N1cnNvcihndGsuZ2RrLkN1cnNvcihndGsuZ2RrLkFSUk9XKSkKKyAgICAgICAgICAgIHNlbGYucHJldm1vdXNleCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYucHJldm1vdXNleSA9IE5vbmUKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIG9uX2FyZWFfc2Nyb2xsX2V2ZW50KHNlbGYsIGFyZWEsIGV2ZW50KToKKyAgICAgICAgaWYgZXZlbnQuc3RhdGUgJiBndGsuZ2RrLkNPTlRST0xfTUFTSzoKKyAgICAgICAgICAgIGlmIGV2ZW50LmRpcmVjdGlvbiA9PSBndGsuZ2RrLlNDUk9MTF9VUDoKKyAgICAgICAgICAgICAgICBzZWxmLnpvb21faW1hZ2Uoc2VsZi56b29tX3JhdGlvICogc2VsZi5aT09NX0lOQ1JFTUVOVCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgaWYgZXZlbnQuZGlyZWN0aW9uID09IGd0ay5nZGsuU0NST0xMX0RPV046CisgICAgICAgICAgICAgICAgc2VsZi56b29tX2ltYWdlKHNlbGYuem9vbV9yYXRpbyAvIHNlbGYuWk9PTV9JTkNSRU1FTlQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIG9uX2FyZWFfbW90aW9uX25vdGlmeShzZWxmLCBhcmVhLCBldmVudCk6CisgICAgICAgIHN0YXRlID0gZXZlbnQuc3RhdGUKKyAgICAgICAgaWYgc3RhdGUgJiBndGsuZ2RrLkJVVFRPTjJfTUFTSyBvciBzdGF0ZSAmIGd0ay5nZGsuQlVUVE9OMV9NQVNLOgorICAgICAgICAgICAgeCwgeSA9IGludChldmVudC54KSwgaW50KGV2ZW50LnkpCisgICAgICAgICAgICAjIHBhbiB0aGUgaW1hZ2UKKyAgICAgICAgICAgIHNlbGYueCArPSAoc2VsZi5wcmV2bW91c2V4IC0geCkvc2VsZi56b29tX3JhdGlvCisgICAgICAgICAgICBzZWxmLnkgKz0gKHNlbGYucHJldm1vdXNleSAtIHkpL3NlbGYuem9vbV9yYXRpbworICAgICAgICAgICAgc2VsZi5xdWV1ZV9kcmF3KCkKKyAgICAgICAgICAgIHNlbGYucHJldm1vdXNleCA9IHgKKyAgICAgICAgICAgIHNlbGYucHJldm1vdXNleSA9IHkKKyAgICAgICAgICAgIHNlbGYucG9zaXRpb25fY2hhbmdlZCgpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgb25fc2V0X3Njcm9sbF9hZGp1c3RtZW50cyhzZWxmLCBhcmVhLCBoYWRqLCB2YWRqKToKKyAgICAgICAgc2VsZi5fc2V0X3Njcm9sbF9hZGp1c3RtZW50cyAoaGFkaiwgdmFkaikKKworICAgIGRlZiBvbl9hbGxvY2F0aW9uX3NpemVfY2hhbmdlZChzZWxmLCB3aWRnZXQsIGFsbG9jYXRpb24pOgorICAgICAgICBzZWxmLmhhZGoucGFnZV9zaXplID0gYWxsb2NhdGlvbi53aWR0aAorICAgICAgICBzZWxmLmhhZGoucGFnZV9pbmNyZW1lbnQgPSBhbGxvY2F0aW9uLndpZHRoICogMC45CisgICAgICAgIHNlbGYudmFkai5wYWdlX3NpemUgPSBhbGxvY2F0aW9uLmhlaWdodAorICAgICAgICBzZWxmLnZhZGoucGFnZV9pbmNyZW1lbnQgPSBhbGxvY2F0aW9uLmhlaWdodCAqIDAuOQorCisgICAgZGVmIF9zZXRfYWRqX3VwcGVyKHNlbGYsIGFkaiwgdXBwZXIpOgorICAgICAgICBjaGFuZ2VkID0gRmFsc2UKKyAgICAgICAgdmFsdWVfY2hhbmdlZCA9IEZhbHNlCisKKyAgICAgICAgaWYgYWRqLnVwcGVyICE9IHVwcGVyOgorICAgICAgICAgICAgYWRqLnVwcGVyID0gdXBwZXIKKyAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCisKKyAgICAgICAgbWF4X3ZhbHVlID0gbWF4KDAuMCwgdXBwZXIgLSBhZGoucGFnZV9zaXplKQorICAgICAgICBpZiBhZGoudmFsdWUgPiBtYXhfdmFsdWU6CisgICAgICAgICAgICBhZGoudmFsdWUgPSBtYXhfdmFsdWUKKyAgICAgICAgICAgIHZhbHVlX2NoYW5nZWQgPSBUcnVlCisKKyAgICAgICAgaWYgY2hhbmdlZDoKKyAgICAgICAgICAgIGFkai5jaGFuZ2VkKCkKKyAgICAgICAgaWYgdmFsdWVfY2hhbmdlZDoKKyAgICAgICAgICAgIGFkai52YWx1ZV9jaGFuZ2VkKCkKKworICAgIGRlZiBfc2V0X3Njcm9sbF9hZGp1c3RtZW50cyhzZWxmLCBoYWRqLCB2YWRqKToKKyAgICAgICAgaWYgaGFkaiA9PSBOb25lOgorICAgICAgICAgICAgaGFkaiA9IGd0ay5BZGp1c3RtZW50KDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApCisgICAgICAgIGlmIHZhZGogPT0gTm9uZToKKyAgICAgICAgICAgIHZhZGogPSBndGsuQWRqdXN0bWVudCgwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wKQorCisgICAgICAgIGlmIHNlbGYuaGFkal9jaGFuZ2VkX3NpZ25hbF9pZCAhPSBOb25lIGFuZCBcCisgICAgICAgICAgIHNlbGYuaGFkaiAhPSBOb25lIGFuZCBoYWRqICE9IHNlbGYuaGFkajoKKyAgICAgICAgICAgIHNlbGYuaGFkai5kaXNjb25uZWN0IChzZWxmLmhhZGpfY2hhbmdlZF9zaWduYWxfaWQpCisgICAgICAgIGlmIHNlbGYudmFkal9jaGFuZ2VkX3NpZ25hbF9pZCAhPSBOb25lIGFuZCBcCisgICAgICAgICAgIHNlbGYudmFkaiAhPSBOb25lIGFuZCB2YWRqICE9IHNlbGYudmFkajoKKyAgICAgICAgICAgIHNlbGYudmFkai5kaXNjb25uZWN0IChzZWxmLnZhZGpfY2hhbmdlZF9zaWduYWxfaWQpCisKKyAgICAgICAgaWYgaGFkaiAhPSBOb25lOgorICAgICAgICAgICAgc2VsZi5oYWRqID0gaGFkagorICAgICAgICAgICAgc2VsZi5fc2V0X2Fkal91cHBlciAoc2VsZi5oYWRqLCBzZWxmLnpvb21fcmF0aW8gKiBzZWxmLmNoYXJ0X3dpZHRoKQorICAgICAgICAgICAgc2VsZi5oYWRqX2NoYW5nZWRfc2lnbmFsX2lkID0gc2VsZi5oYWRqLmNvbm5lY3QoJ3ZhbHVlLWNoYW5nZWQnLCBzZWxmLm9uX2FkanVzdG1lbnRzX2NoYW5nZWQpCisKKyAgICAgICAgaWYgdmFkaiAhPSBOb25lOgorICAgICAgICAgICAgc2VsZi52YWRqID0gdmFkagorICAgICAgICAgICAgc2VsZi5fc2V0X2Fkal91cHBlciAoc2VsZi52YWRqLCBzZWxmLnpvb21fcmF0aW8gKiBzZWxmLmNoYXJ0X2hlaWdodCkKKyAgICAgICAgICAgIHNlbGYudmFkal9jaGFuZ2VkX3NpZ25hbF9pZCA9IHNlbGYudmFkai5jb25uZWN0KCd2YWx1ZS1jaGFuZ2VkJywgc2VsZi5vbl9hZGp1c3RtZW50c19jaGFuZ2VkKQorCisgICAgZGVmIG9uX2FkanVzdG1lbnRzX2NoYW5nZWQoc2VsZiwgYWRqKToKKyAgICAgICAgc2VsZi54ID0gc2VsZi5oYWRqLnZhbHVlIC8gc2VsZi56b29tX3JhdGlvCisgICAgICAgIHNlbGYueSA9IHNlbGYudmFkai52YWx1ZSAvIHNlbGYuem9vbV9yYXRpbworICAgICAgICBzZWxmLnF1ZXVlX2RyYXcoKQorCisgICAgZGVmIG9uX3Bvc2l0aW9uX2NoYW5nZWQoc2VsZiwgd2lkZ2V0LCB4LCB5KToKKyAgICAgICAgc2VsZi5oYWRqLnZhbHVlID0geCAqIHNlbGYuem9vbV9yYXRpbworICAgICAgICBzZWxmLnZhZGoudmFsdWUgPSB5ICogc2VsZi56b29tX3JhdGlvCisKK1B5Qm9vdGNoYXJ0V2lkZ2V0LnNldF9zZXRfc2Nyb2xsX2FkanVzdG1lbnRzX3NpZ25hbCgnc2V0LXNjcm9sbC1hZGp1c3RtZW50cycpCisKK2NsYXNzIFB5Qm9vdGNoYXJ0U2hlbGwoZ3RrLlZCb3gpOgorICAgIHVpID0gJycnCisgICAgPHVpPgorICAgICAgICAgICAgPHRvb2xiYXIgbmFtZT0iVG9vbEJhciI+CisgICAgICAgICAgICAgICAgICAgIDx0b29saXRlbSBhY3Rpb249IkV4cGFuZCIvPgorICAgICAgICAgICAgICAgICAgICA8dG9vbGl0ZW0gYWN0aW9uPSJDb250cmFjdCIvPgorICAgICAgICAgICAgICAgICAgICA8c2VwYXJhdG9yLz4KKyAgICAgICAgICAgICAgICAgICAgPHRvb2xpdGVtIGFjdGlvbj0iWm9vbUluIi8+CisgICAgICAgICAgICAgICAgICAgIDx0b29saXRlbSBhY3Rpb249Ilpvb21PdXQiLz4KKyAgICAgICAgICAgICAgICAgICAgPHRvb2xpdGVtIGFjdGlvbj0iWm9vbUZpdCIvPgorICAgICAgICAgICAgICAgICAgICA8dG9vbGl0ZW0gYWN0aW9uPSJab29tMTAwIi8+CisgICAgICAgICAgICA8L3Rvb2xiYXI+CisgICAgPC91aT4KKyAgICAnJycKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2luZG93LCB0cmFjZSwgb3B0aW9ucywgeHNjYWxlKToKKyAgICAgICAgZ3RrLlZCb3guX19pbml0X18oc2VsZikKKworICAgICAgICBzZWxmLndpZGdldCA9IFB5Qm9vdGNoYXJ0V2lkZ2V0KHRyYWNlLCBvcHRpb25zLCB4c2NhbGUpCisKKyAgICAgICAgIyBDcmVhdGUgYSBVSU1hbmFnZXIgaW5zdGFuY2UKKyAgICAgICAgdWltYW5hZ2VyID0gc2VsZi51aW1hbmFnZXIgPSBndGsuVUlNYW5hZ2VyKCkKKworICAgICAgICAjIEFkZCB0aGUgYWNjZWxlcmF0b3IgZ3JvdXAgdG8gdGhlIHRvcGxldmVsIHdpbmRvdworICAgICAgICBhY2NlbGdyb3VwID0gdWltYW5hZ2VyLmdldF9hY2NlbF9ncm91cCgpCisgICAgICAgIHdpbmRvdy5hZGRfYWNjZWxfZ3JvdXAoYWNjZWxncm91cCkKKworICAgICAgICAjIENyZWF0ZSBhbiBBY3Rpb25Hcm91cAorICAgICAgICBhY3Rpb25ncm91cCA9IGd0ay5BY3Rpb25Hcm91cCgnQWN0aW9ucycpCisgICAgICAgIHNlbGYuYWN0aW9uZ3JvdXAgPSBhY3Rpb25ncm91cAorCisgICAgICAgICMgQ3JlYXRlIGFjdGlvbnMKKyAgICAgICAgYWN0aW9uZ3JvdXAuYWRkX2FjdGlvbnMoKAorICAgICAgICAgICAgICAgICgnRXhwYW5kJywgZ3RrLlNUT0NLX0FERCwgTm9uZSwgTm9uZSwgTm9uZSwgc2VsZi53aWRnZXQub25fZXhwYW5kKSwKKyAgICAgICAgICAgICAgICAoJ0NvbnRyYWN0JywgZ3RrLlNUT0NLX1JFTU9WRSwgTm9uZSwgTm9uZSwgTm9uZSwgc2VsZi53aWRnZXQub25fY29udHJhY3QpLAorICAgICAgICAgICAgICAgICgnWm9vbUluJywgZ3RrLlNUT0NLX1pPT01fSU4sIE5vbmUsIE5vbmUsIE5vbmUsIHNlbGYud2lkZ2V0Lm9uX3pvb21faW4pLAorICAgICAgICAgICAgICAgICgnWm9vbU91dCcsIGd0ay5TVE9DS19aT09NX09VVCwgTm9uZSwgTm9uZSwgTm9uZSwgc2VsZi53aWRnZXQub25fem9vbV9vdXQpLAorICAgICAgICAgICAgICAgICgnWm9vbUZpdCcsIGd0ay5TVE9DS19aT09NX0ZJVCwgJ0ZpdCBXaWR0aCcsIE5vbmUsIE5vbmUsIHNlbGYud2lkZ2V0Lm9uX3pvb21fZml0KSwKKyAgICAgICAgICAgICAgICAoJ1pvb20xMDAnLCBndGsuU1RPQ0tfWk9PTV8xMDAsIE5vbmUsIE5vbmUsIE5vbmUsIHNlbGYud2lkZ2V0Lm9uX3pvb21fMTAwKSwKKyAgICAgICAgKSkKKworICAgICAgICAjIEFkZCB0aGUgYWN0aW9uZ3JvdXAgdG8gdGhlIHVpbWFuYWdlcgorICAgICAgICB1aW1hbmFnZXIuaW5zZXJ0X2FjdGlvbl9ncm91cChhY3Rpb25ncm91cCwgMCkKKworICAgICAgICAjIEFkZCBhIFVJIGRlc2NyaXB0aW9uCisgICAgICAgIHVpbWFuYWdlci5hZGRfdWlfZnJvbV9zdHJpbmcoc2VsZi51aSkKKworICAgICAgICAjIFNjcm9sbGVkIHdpbmRvdworICAgICAgICBzY3JvbGxlZCA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgIHNjcm9sbGVkLmFkZChzZWxmLndpZGdldCkKKworICAgICAgICAjIHRvb2xiYXIgLyBoLWJveAorICAgICAgICBoYm94ID0gZ3RrLkhCb3goRmFsc2UsIDgpCisKKyAgICAgICAgIyBDcmVhdGUgYSBUb29sYmFyCisgICAgICAgIHRvb2xiYXIgPSB1aW1hbmFnZXIuZ2V0X3dpZGdldCgnL1Rvb2xCYXInKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQodG9vbGJhciwgVHJ1ZSwgVHJ1ZSkKKworICAgICAgICBpZiBub3Qgb3B0aW9ucy5rZXJuZWxfb25seToKKyAgICAgICAgICAgICMgTWlzYy4gb3B0aW9ucworICAgICAgICAgICAgYnV0dG9uID0gZ3RrLkNoZWNrQnV0dG9uKCJTaG93IG1vcmUiKQorICAgICAgICAgICAgYnV0dG9uLmNvbm5lY3QgKCd0b2dnbGVkJywgc2VsZi53aWRnZXQuc2hvd190b2dnbGVkKQorICAgICAgICAgICAgYnV0dG9uLnNldF9hY3RpdmUob3B0aW9ucy5hcHBfb3B0aW9ucy5zaG93X2FsbCkKKyAgICAgICAgICAgIGhib3gucGFja19zdGFydCAoYnV0dG9uLCBGYWxzZSwgVHJ1ZSkKKworICAgICAgICBzZWxmLnBhY2tfc3RhcnQoaGJveCwgRmFsc2UpCisgICAgICAgIHNlbGYucGFja19zdGFydChzY3JvbGxlZCkKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICBkZWYgZ3JhYl9mb2N1cyhzZWxmLCB3aW5kb3cpOgorICAgICAgICB3aW5kb3cuc2V0X2ZvY3VzKHNlbGYud2lkZ2V0KQorCisKK2NsYXNzIFB5Qm9vdGNoYXJ0V2luZG93KGd0ay5XaW5kb3cpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYWNlLCBhcHBfb3B0aW9ucyk6CisgICAgICAgIGd0ay5XaW5kb3cuX19pbml0X18oc2VsZikKKworICAgICAgICB3aW5kb3cgPSBzZWxmCisgICAgICAgIHdpbmRvdy5zZXRfdGl0bGUoIkJvb3RjaGFydCAlcyIgJSB0cmFjZS5maWxlbmFtZSkKKyAgICAgICAgd2luZG93LnNldF9kZWZhdWx0X3NpemUoNzUwLCA1NTApCisKKyAgICAgICAgdGFiX3BhZ2UgPSBndGsuTm90ZWJvb2soKQorICAgICAgICB0YWJfcGFnZS5zaG93KCkKKyAgICAgICAgd2luZG93LmFkZCh0YWJfcGFnZSkKKworICAgICAgICBmdWxsX29wdHMgPSBSZW5kZXJPcHRpb25zKGFwcF9vcHRpb25zKQorICAgICAgICBmdWxsX3RyZWUgPSBQeUJvb3RjaGFydFNoZWxsKHdpbmRvdywgdHJhY2UsIGZ1bGxfb3B0cywgMS4wKQorICAgICAgICB0YWJfcGFnZS5hcHBlbmRfcGFnZSAoZnVsbF90cmVlLCBndGsuTGFiZWwoIkZ1bGwgdHJlZSIpKQorCisgICAgICAgIGlmIHRyYWNlLmtlcm5lbCBpcyBub3QgTm9uZSBhbmQgbGVuICh0cmFjZS5rZXJuZWwpID4gMjoKKyAgICAgICAgICAgIGtlcm5lbF9vcHRzID0gUmVuZGVyT3B0aW9ucyhhcHBfb3B0aW9ucykKKyAgICAgICAgICAgIGtlcm5lbF9vcHRzLmN1bXVsYXRpdmUgPSBGYWxzZQorICAgICAgICAgICAga2VybmVsX29wdHMuY2hhcnRzID0gRmFsc2UKKyAgICAgICAgICAgIGtlcm5lbF9vcHRzLmtlcm5lbF9vbmx5ID0gVHJ1ZQorICAgICAgICAgICAga2VybmVsX3RyZWUgPSBQeUJvb3RjaGFydFNoZWxsKHdpbmRvdywgdHJhY2UsIGtlcm5lbF9vcHRzLCA1LjApCisgICAgICAgICAgICB0YWJfcGFnZS5hcHBlbmRfcGFnZSAoa2VybmVsX3RyZWUsIGd0ay5MYWJlbCgiS2VybmVsIGJvb3QiKSkKKworICAgICAgICBmdWxsX3RyZWUuZ3JhYl9mb2N1cyhzZWxmKQorICAgICAgICBzZWxmLnNob3coKQorCisKK2RlZiBzaG93KHRyYWNlLCBvcHRpb25zKToKKyAgICB3aW4gPSBQeUJvb3RjaGFydFdpbmRvdyh0cmFjZSwgb3B0aW9ucykKKyAgICB3aW4uY29ubmVjdCgnZGVzdHJveScsIGd0ay5tYWluX3F1aXQpCisgICAgZ3RrLm1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL21haW4ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5iNDVhZTBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL21haW4ucHkKQEAgLTAsMCArMSBAQAorbWFpbi5weS5pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9tYWluLnB5LmluIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL21haW4ucHkuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFiYjBiZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9tYWluLnB5LmluCkBAIC0wLDAgKzEsMTg3IEBACisjCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICBXYXJuaW5nOiBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgZnJvbSBtYWluLnB5LmluIC0gZWRpdCBpdCB0aGVyZS4KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgYWxvbmcgd2l0aCBweWJvb3RjaGFydGd1aS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IG9wdHBhcnNlCisKK2Zyb20gLiBpbXBvcnQgcGFyc2luZworZnJvbSAuIGltcG9ydCBiYXRjaAorCitkZWYgX21rX29wdGlvbnNfcGFyc2VyKCk6CisJIiIiTWFrZSBhbiBvcHRpb25zIHBhcnNlci4iIiIKKwl1c2FnZSA9ICIlcHJvZyBbb3B0aW9uc10gL3BhdGgvdG8vdG1wL2J1aWxkc3RhdHMvPHJlY2lwZS1tYWNoaW5lPi88QlVJTEROQU1FPi8iCisJdmVyc2lvbiA9ICIlcHJvZyB2MS4wLjAiCisJcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlLCB2ZXJzaW9uPXZlcnNpb24pCisJcGFyc2VyLmFkZF9vcHRpb24oIi1pIiwgIi0taW50ZXJhY3RpdmUiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJpbnRlcmFjdGl2ZSIsIGRlZmF1bHQ9RmFsc2UsIAorCQkJICBoZWxwPSJzdGFydCBpbiBhY3RpdmUgbW9kZSIpCisJcGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZm9ybWF0IiwgZGVzdD0iZm9ybWF0IiwgZGVmYXVsdD0icG5nIiwgY2hvaWNlcz1bInBuZyIsICJzdmciLCAicGRmIl0sCisJCQkgIGhlbHA9ImltYWdlIGZvcm1hdCAocG5nLCBzdmcsIHBkZik7IGRlZmF1bHQgZm9ybWF0IHBuZyIpCisJcGFyc2VyLmFkZF9vcHRpb24oIi1vIiwgIi0tb3V0cHV0IiwgZGVzdD0ib3V0cHV0IiwgbWV0YXZhcj0iUEFUSCIsIGRlZmF1bHQ9Tm9uZSwKKwkJCSAgaGVscD0ib3V0cHV0IHBhdGggKGZpbGUgb3IgZGlyZWN0b3J5KSB3aGVyZSBjaGFydHMgYXJlIHN0b3JlZCIpCisJcGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgIi0tc3BsaXQiLCBkZXN0PSJudW0iLCB0eXBlPWludCwgZGVmYXVsdD0xLAorCQkJICBoZWxwPSJzcGxpdCB0aGUgb3V0cHV0IGNoYXJ0IGludG8gPE5VTT4gY2hhcnRzLCBvbmx5IHdvcmtzIHdpdGggXCItbyBQQVRIXCIiKQorCXBhcnNlci5hZGRfb3B0aW9uKCItbSIsICItLW1pbnRpbWUiLCBkZXN0PSJtaW50aW1lIiwgdHlwZT1pbnQsIGRlZmF1bHQ9OCwKKwkJCSAgaGVscD0ib25seSB0YXNrcyBsb25nZXIgdGhhbiB0aGlzIHRpbWUgd2lsbCBiZSBkaXNwbGF5ZWQiKQorCXBhcnNlci5hZGRfb3B0aW9uKCItTSIsICItLW1pbnV0ZXMiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJhc19taW51dGVzIiwgZGVmYXVsdD1GYWxzZSwKKwkJCSAgaGVscD0iZGlzcGxheSB0aW1lIGluIG1pbnV0ZXMgaW5zdGVhZCBvZiBzZWNvbmRzIikKKyMJcGFyc2VyLmFkZF9vcHRpb24oIi1uIiwgIi0tbm8tcHJ1bmUiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0icHJ1bmUiLCBkZWZhdWx0PVRydWUsCisjCQkJICBoZWxwPSJkbyBub3QgcHJ1bmUgdGhlIHByb2Nlc3MgdHJlZSIpCisJcGFyc2VyLmFkZF9vcHRpb24oIi1xIiwgIi0tcXVpZXQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJxdWlldCIsIGRlZmF1bHQ9RmFsc2UsCisJCQkgIGhlbHA9InN1cHByZXNzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMiKQorIwlwYXJzZXIuYWRkX29wdGlvbigiLXQiLCAiLS1ib290LXRpbWUiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJib290dGltZSIsIGRlZmF1bHQ9RmFsc2UsCisjCQkJICBoZWxwPSJvbmx5IGRpc3BsYXkgdGhlIGJvb3QgdGltZSBvZiB0aGUgYm9vdCBpbiB0ZXh0IGZvcm1hdCAoc3Rkb3V0KSIpCQorCXBhcnNlci5hZGRfb3B0aW9uKCItLXZlcnktcXVpZXQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJ2ZXJ5cXVpZXQiLCBkZWZhdWx0PUZhbHNlLAorCQkJICBoZWxwPSJzdXBwcmVzcyBhbGwgbWVzc2FnZXMgZXhjZXB0IGVycm9ycyIpCisJcGFyc2VyLmFkZF9vcHRpb24oIi0tdmVyYm9zZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InZlcmJvc2UiLCBkZWZhdWx0PUZhbHNlLAorCQkJICBoZWxwPSJwcmludCBhbGwgbWVzc2FnZXMiKQorIwlwYXJzZXIuYWRkX29wdGlvbigiLS1wcm9maWxlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0icHJvZmlsZSIsIGRlZmF1bHQ9RmFsc2UsCisjCQkJICBoZWxwPSJwcm9maWxlIHJlbmRlcmluZyBvZiBjaGFydCAob25seSB1c2VmdWwgd2hlbiBpbiBiYXRjaCBtb2RlIGluZGljYXRlZCBieSAtZikiKQorIwlwYXJzZXIuYWRkX29wdGlvbigiLS1zaG93LXBpZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InNob3dfcGlkIiwgZGVmYXVsdD1GYWxzZSwKKyMJCQkgIGhlbHA9InNob3cgcHJvY2VzcyBpZHMgaW4gdGhlIGJvb3RjaGFydCBhcyAncHJvY2Vzc25hbWUgW3BpZF0nIikKKwlwYXJzZXIuYWRkX29wdGlvbigiLS1zaG93LWFsbCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InNob3dfYWxsIiwgZGVmYXVsdD1GYWxzZSwKKwkJCSAgaGVscD0ic2hvdyBhbGwgcHJvY2Vzc2VzIGluIHRoZSBjaGFydCIpCisjCXBhcnNlci5hZGRfb3B0aW9uKCItLWNyb3AtYWZ0ZXIiLCBkZXN0PSJjcm9wX2FmdGVyIiwgbWV0YXZhcj0iUFJPQ0VTUyIsIGRlZmF1bHQ9Tm9uZSwKKyMJCQkgIGhlbHA9ImNyb3AgY2hhcnQgd2hlbiBpZGxlIGFmdGVyIFBST0NFU1MgaXMgc3RhcnRlZCIpCisjCXBhcnNlci5hZGRfb3B0aW9uKCItLWFubm90YXRlIiwgYWN0aW9uPSJhcHBlbmQiLCBkZXN0PSJhbm5vdGF0ZSIsIG1ldGF2YXI9IlBST0NFU1MiLCBkZWZhdWx0PU5vbmUsCisjCQkJICBoZWxwPSJhbm5vdGF0ZSBwb3NpdGlvbiB3aGVyZSBQUk9DRVNTIGlzIHN0YXJ0ZWQ7IGNhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuICIgKworIwkJCSAgICAgICAiVG8gY3JlYXRlIGEgc2luZ2xlIGFubm90YXRpb24gd2hlbiBhbnkgb25lIG9mIGEgc2V0IG9mIHByb2Nlc3NlcyBpcyBzdGFydGVkLCB1c2UgY29tbWFzIHRvIHNlcGFyYXRlIHRoZSBuYW1lcyIpCisjCXBhcnNlci5hZGRfb3B0aW9uKCItLWFubm90YXRlLWZpbGUiLCBkZXN0PSJhbm5vdGF0ZV9maWxlIiwgbWV0YXZhcj0iRklMRU5BTUUiLCBkZWZhdWx0PU5vbmUsCisjCQkJICBoZWxwPSJmaWxlbmFtZSB0byB3cml0ZSBhbm5vdGF0aW9uIHBvaW50cyB0byIpCisJcGFyc2VyLmFkZF9vcHRpb24oIi1UIiwgIi0tZnVsbC10aW1lIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iZnVsbF90aW1lIiwgZGVmYXVsdD1GYWxzZSwKKwkJCSAgaGVscD0iZGlzcGxheSB0aGUgZnVsbCB0aW1lIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggcHJvY2Vzc2VzIGFyZSBjdXJyZW50bHkgc2hvd24iKQorCXJldHVybiBwYXJzZXIKKworY2xhc3MgV3JpdGVyOgorCWRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZSwgb3B0aW9ucyk6CisJCXNlbGYud3JpdGUgPSB3cml0ZQorCQlzZWxmLm9wdGlvbnMgPSBvcHRpb25zCisJCQorCWRlZiBlcnJvcihzZWxmLCBtc2cpOgorCQlzZWxmLndyaXRlKG1zZykKKworCWRlZiB3YXJuKHNlbGYsIG1zZyk6CisJCWlmIG5vdCBzZWxmLm9wdGlvbnMucXVpZXQ6CisJCQlzZWxmLndyaXRlKG1zZykKKworCWRlZiBpbmZvKHNlbGYsIG1zZyk6CisJCWlmIHNlbGYub3B0aW9ucy52ZXJib3NlOgorCQkJc2VsZi53cml0ZShtc2cpCisKKwlkZWYgc3RhdHVzKHNlbGYsIG1zZyk6CisJCWlmIG5vdCBzZWxmLm9wdGlvbnMucXVpZXQ6CisJCQlzZWxmLndyaXRlKG1zZykKKworZGVmIF9ta193cml0ZXIob3B0aW9ucyk6CisJZGVmIHdyaXRlKHMpOgorCQlwcmludChzKQorCXJldHVybiBXcml0ZXIod3JpdGUsIG9wdGlvbnMpCisJCitkZWYgX2dldF9maWxlbmFtZShwYXRoKToKKwkiIiJDb25zdHJ1Y3QgYSB1c2FibGUgZmlsZW5hbWUgZm9yIG91dHB1dHMiIiIKKwlkbmFtZSA9ICIuIgorCWZuYW1lID0gImJvb3RjaGFydCIKKwlpZiBwYXRoICE9IE5vbmU6CisJCWlmIG9zLnBhdGguaXNkaXIocGF0aCk6CisJCQlkbmFtZSA9IHBhdGgKKwkJZWxzZToKKwkJCWZuYW1lID0gcGF0aAorCXJldHVybiBvcy5wYXRoLmpvaW4oZG5hbWUsIGZuYW1lKQorCitkZWYgbWFpbihhcmd2PU5vbmUpOgorCXRyeToKKwkJaWYgYXJndiBpcyBOb25lOgorCQkJYXJndiA9IHN5cy5hcmd2WzE6XQorCQorCQlwYXJzZXIgPSBfbWtfb3B0aW9uc19wYXJzZXIoKQorCQlvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKKworCQkjIERlZmF1bHQgdmFsdWVzIGZvciBkaXNhYmxlZCBvcHRpb25zCisJCW9wdGlvbnMucHJ1bmUgPSBUcnVlCisJCW9wdGlvbnMuYm9vdHRpbWUgPSBGYWxzZQorCQlvcHRpb25zLnByb2ZpbGUgPSBGYWxzZQorCQlvcHRpb25zLnNob3dfcGlkID0gRmFsc2UKKwkJb3B0aW9ucy5jcm9wX2FmdGVyID0gTm9uZQorCQlvcHRpb25zLmFubm90YXRlID0gTm9uZQorCQlvcHRpb25zLmFubm90YXRlX2ZpbGUgPSBOb25lCisKKwkJd3JpdGVyID0gX21rX3dyaXRlcihvcHRpb25zKQorCisJCWlmIGxlbihhcmdzKSA9PSAwOgorCQkJcHJpbnQoIk5vIHBhdGggZ2l2ZW4sIHRyeWluZyAvdmFyL2xvZy9ib290Y2hhcnQudGd6IikKKwkJCWFyZ3MgPSBbICIvdmFyL2xvZy9ib290Y2hhcnQudGd6IiBdCisKKwkJcmVzID0gcGFyc2luZy5UcmFjZSh3cml0ZXIsIGFyZ3MsIG9wdGlvbnMpCisKKwkJaWYgb3B0aW9ucy5pbnRlcmFjdGl2ZSBvciBvcHRpb25zLm91dHB1dCA9PSBOb25lOgorCQkJZnJvbSAuIGltcG9ydCBndWkKKwkJCWd1aS5zaG93KHJlcywgb3B0aW9ucykKKwkJZWxpZiBvcHRpb25zLmJvb3R0aW1lOgorCQkJaW1wb3J0IG1hdGgKKwkJCXByb2NfdHJlZSA9IHJlcy5wcm9jX3RyZWUKKwkJCWlmIHByb2NfdHJlZS5pZGxlOgorCQkJICAgIGR1cmF0aW9uID0gcHJvY190cmVlLmlkbGUKKwkJCWVsc2U6CisJCQkgICAgZHVyYXRpb24gPSBwcm9jX3RyZWUuZHVyYXRpb24KKwkJCWR1ciA9IGR1cmF0aW9uIC8gMTAwLjAKKwkJCXByaW50KCclMDJkOiUwNS4yZicgJSAobWF0aC5mbG9vcihkdXIvNjApLCBkdXIgLSA2MCAqIG1hdGguZmxvb3IoZHVyLzYwKSkpCisJCWVsc2U6CisJCQlpZiBvcHRpb25zLmFubm90YXRlX2ZpbGU6CisJCQkJZiA9IG9wZW4gKG9wdGlvbnMuYW5ub3RhdGVfZmlsZSwgInciKQorCQkJCXRyeToKKwkJCQkJZm9yIHRpbWUgaW4gcmVzWzRdOgorCQkJCQkJaWYgdGltZSBpcyBub3QgTm9uZToKKwkJCQkJCQkjIG91dHB1dCBhcyBtcworCQkJCQkJCXByaW50KHRpbWUgKiAxMCwgZmlsZT1mKQorCQkJCQkJZWxzZToKKwkJCQkJCQlwcmludChmaWxlPWYpCisJCQkJZmluYWxseToKKwkJCQkJZi5jbG9zZSgpCisJCQlmaWxlbmFtZSA9IF9nZXRfZmlsZW5hbWUob3B0aW9ucy5vdXRwdXQpCisJCQlyZXNfbGlzdCA9IHBhcnNpbmcuc3BsaXRfcmVzKHJlcywgb3B0aW9ucykKKwkJCW4gPSAxCisJCQl3aWR0aCA9IGxlbihzdHIobGVuKHJlc19saXN0KSkpCisJCQlzID0gIl8lJTAlZGQuIiAlIHdpZHRoCisJCQlmb3IgciBpbiByZXNfbGlzdDoKKwkJCQlpZiBsZW4ocmVzX2xpc3QpID09IDE6CisJCQkJCWYgPSBmaWxlbmFtZSArICIuIiArIG9wdGlvbnMuZm9ybWF0CisJCQkJZWxzZToKKwkJCQkJZiA9IGZpbGVuYW1lICsgcyAlIG4gKyBvcHRpb25zLmZvcm1hdAorCQkJCQluID0gbiArIDEKKwkJCQlkZWYgcmVuZGVyKCk6CisJCQkJCWJhdGNoLnJlbmRlcih3cml0ZXIsIHIsIG9wdGlvbnMsIGYpCisJCQkJaWYgb3B0aW9ucy5wcm9maWxlOgorCQkJCQlpbXBvcnQgY1Byb2ZpbGUKKwkJCQkJaW1wb3J0IHBzdGF0cworCQkJCQlwcm9maWxlID0gJyVzLnByb2YnICUgb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0KKwkJCQkJY1Byb2ZpbGUucnVuY3R4KCdyZW5kZXIoKScsIGdsb2JhbHMoKSwgbG9jYWxzKCksIHByb2ZpbGUpCisJCQkJCXAgPSBwc3RhdHMuU3RhdHMocHJvZmlsZSkKKwkJCQkJcC5zdHJpcF9kaXJzKCkuc29ydF9zdGF0cygndGltZScpLnByaW50X3N0YXRzKDIwKQorCQkJCWVsc2U6CisJCQkJCXJlbmRlcigpCisKKwkJcmV0dXJuIDAKKwlleGNlcHQgcGFyc2luZy5QYXJzZUVycm9yIGFzIGV4OgorCQlwcmludCgoIlBhcnNlIGVycm9yOiAlcyIgJSBleCkpCisJCXJldHVybiAyCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKwlzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvcGFyc2luZy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9wYXJzaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MjNiOWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvcGFyc2luZy5weQpAQCAtMCwwICsxLDc0MCBAQAorIyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlib290Y2hhcnRndWkuCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgYWxvbmcgd2l0aCBweWJvb3RjaGFydGd1aS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKKworaW1wb3J0IG9zCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCB0YXJmaWxlCitmcm9tIHRpbWUgaW1wb3J0IGNsb2NrCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAorZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZQorCitmcm9tIC5zYW1wbGVzIGltcG9ydCAqCitmcm9tIC5wcm9jZXNzX3RyZWUgaW1wb3J0IFByb2Nlc3NUcmVlCisKK2lmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDApOgorICAgIGxvbmcgPSBpbnQKKworIyBQYXJzaW5nIHByb2R1Y2VzIGFzIGl0cyBlbmQgcmVzdWx0IGEgJ1RyYWNlJworCitjbGFzcyBUcmFjZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVyLCBwYXRocywgb3B0aW9ucyk6CisgICAgICAgIHNlbGYucHJvY2Vzc2VzID0ge30KKyAgICAgICAgc2VsZi5zdGFydCA9IHt9CisgICAgICAgIHNlbGYuZW5kID0ge30KKyAgICAgICAgc2VsZi5taW4gPSBOb25lCisgICAgICAgIHNlbGYubWF4ID0gTm9uZQorICAgICAgICBzZWxmLmhlYWRlcnMgPSBOb25lCisgICAgICAgIHNlbGYuZGlza19zdGF0cyA9IE5vbmUKKyAgICAgICAgc2VsZi5wc19zdGF0cyA9IE5vbmUKKyAgICAgICAgc2VsZi50YXNrc3RhdHMgPSBOb25lCisgICAgICAgIHNlbGYuY3B1X3N0YXRzID0gTm9uZQorICAgICAgICBzZWxmLmNtZGxpbmUgPSBOb25lCisgICAgICAgIHNlbGYua2VybmVsID0gTm9uZQorICAgICAgICBzZWxmLmtlcm5lbF90cmVlID0gTm9uZQorICAgICAgICBzZWxmLmZpbGVuYW1lID0gTm9uZQorICAgICAgICBzZWxmLnBhcmVudF9tYXAgPSBOb25lCisgICAgICAgIHNlbGYubWVtX3N0YXRzID0gTm9uZQorCisgICAgICAgIGlmIGxlbihwYXRocyk6CisgICAgICAgICAgICBwYXJzZV9wYXRocyAod3JpdGVyLCBzZWxmLCBwYXRocykKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnZhbGlkKCk6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcigiZW1wdHkgc3RhdGU6ICclcycgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGJvb3RjaGFydCIgJSAiLCAiLmpvaW4ocGF0aHMpKQorCisgICAgICAgICAgICBpZiBvcHRpb25zLmZ1bGxfdGltZToKKyAgICAgICAgICAgICAgICBzZWxmLm1pbiA9IG1pbihzZWxmLnN0YXJ0LmtleXMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLm1heCA9IG1heChzZWxmLmVuZC5rZXlzKCkpCisKKyAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBUdXJuIHRoYXQgcGFyc2VkIGluZm9ybWF0aW9uIGludG8gc29tZXRoaW5nIG1vcmUgdXNlZnVsCisgICAgICAgICMgbGluayBwcm9jZXNzZXMgaW50byBhIHRyZWUgb2YgcG9pbnRlcnMsIGNhbGN1bGF0ZSBzdGF0aXN0aWNzCisgICAgICAgIHNlbGYuY29tcGlsZSh3cml0ZXIpCisKKyAgICAgICAgIyBDcm9wIHRoZSBjaGFydCB0byB0aGUgZW5kIG9mIHRoZSBmaXJzdCBpZGxlIHBlcmlvZCBhZnRlciB0aGUgZ2l2ZW4KKyAgICAgICAgIyBwcm9jZXNzCisgICAgICAgIGlmIG9wdGlvbnMuY3JvcF9hZnRlcjoKKyAgICAgICAgICAgIGlkbGUgPSBzZWxmLmNyb3AgKHdyaXRlciwgb3B0aW9ucy5jcm9wX2FmdGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWRsZSA9IE5vbmUKKworICAgICAgICAjIEFubm90YXRlIG90aGVyIHRpbWVzIGFzIHRoZSBmaXJzdCBzdGFydCBwb2ludCBvZiBnaXZlbiBwcm9jZXNzIGxpc3RzCisgICAgICAgIHNlbGYudGltZXMgPSBbIGlkbGUgXQorICAgICAgICBpZiBvcHRpb25zLmFubm90YXRlOgorICAgICAgICAgICAgZm9yIHByb2NuYW1lcyBpbiBvcHRpb25zLmFubm90YXRlOgorICAgICAgICAgICAgICAgIG5hbWVzID0gW3hbOjE1XSBmb3IgeCBpbiBwcm9jbmFtZXMuc3BsaXQoIiwiKV0KKyAgICAgICAgICAgICAgICBmb3IgcHJvYyBpbiBzZWxmLnBzX3N0YXRzLnByb2Nlc3NfbWFwLnZhbHVlcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBwcm9jLmNtZCBpbiBuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGltZXMuYXBwZW5kKHByb2Muc3RhcnRfdGltZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVzLmFwcGVuZChOb25lKQorCisgICAgICAgIHNlbGYucHJvY190cmVlID0gUHJvY2Vzc1RyZWUod3JpdGVyLCBzZWxmLmtlcm5lbCwgc2VsZi5wc19zdGF0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBzX3N0YXRzLnNhbXBsZV9wZXJpb2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oZWFkZXJzLmdldCgicHJvZmlsZS5wcm9jZXNzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcnVuZSwgaWRsZSwgc2VsZi50YXNrc3RhdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJlbnRfbWFwIGlzIG5vdCBOb25lKQorCisgICAgICAgIGlmIHNlbGYua2VybmVsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5rZXJuZWxfdHJlZSA9IFByb2Nlc3NUcmVlKHdyaXRlciwgc2VsZi5rZXJuZWwsIE5vbmUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oZWFkZXJzLmdldCgicHJvZmlsZS5wcm9jZXNzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UsIE5vbmUsIE5vbmUsIFRydWUpCisKKyAgICBkZWYgdmFsaWQoc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5wcm9jZXNzZXMpICE9IDAKKyAgICAgICAgcmV0dXJuIHNlbGYuaGVhZGVycyAhPSBOb25lIGFuZCBzZWxmLmRpc2tfc3RhdHMgIT0gTm9uZSBhbmQgXAorICAgICAgICAgICAgICAgc2VsZi5wc19zdGF0cyAhPSBOb25lIGFuZCBzZWxmLmNwdV9zdGF0cyAhPSBOb25lCisKKyAgICBkZWYgYWRkX3Byb2Nlc3Moc2VsZiwgcHJvY2Vzcywgc3RhcnQsIGVuZCk6CisgICAgICAgIHNlbGYucHJvY2Vzc2VzW3Byb2Nlc3NdID0gW3N0YXJ0LCBlbmRdCisgICAgICAgIGlmIHN0YXJ0IG5vdCBpbiBzZWxmLnN0YXJ0OgorICAgICAgICAgICAgc2VsZi5zdGFydFtzdGFydF0gPSBbXQorICAgICAgICBpZiBwcm9jZXNzIG5vdCBpbiBzZWxmLnN0YXJ0W3N0YXJ0XToKKyAgICAgICAgICAgIHNlbGYuc3RhcnRbc3RhcnRdLmFwcGVuZChwcm9jZXNzKQorICAgICAgICBpZiBlbmQgbm90IGluIHNlbGYuZW5kOgorICAgICAgICAgICAgc2VsZi5lbmRbZW5kXSA9IFtdCisgICAgICAgIGlmIHByb2Nlc3Mgbm90IGluIHNlbGYuZW5kW2VuZF06CisgICAgICAgICAgICBzZWxmLmVuZFtlbmRdLmFwcGVuZChwcm9jZXNzKQorCisgICAgZGVmIGNvbXBpbGUoc2VsZiwgd3JpdGVyKToKKworICAgICAgICBkZWYgZmluZF9wYXJlbnRfaWRfZm9yKHBpZCk6CisgICAgICAgICAgICBpZiBwaWQgaXMgMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgcHBpZCA9IHNlbGYucGFyZW50X21hcC5nZXQocGlkKQorICAgICAgICAgICAgaWYgcHBpZDoKKyAgICAgICAgICAgICAgICAjIG1hbnkgb2YgdGhlc2UgZG91YmxlIGZvcmtzIGFyZSBzbyBzaG9ydCBsaXZlZAorICAgICAgICAgICAgICAgICMgdGhhdCB3ZSBoYXZlIG5vIHNhbXBsZXMsIG9yIHByb2Nlc3MgaW5mbyBmb3IgdGhlbQorICAgICAgICAgICAgICAgICMgc28gY2xpbWIgdGhlIHBhcmVudCBoaWVyYXJjeSB0byBmaW5kIG9uZQorICAgICAgICAgICAgICAgIGlmIGludCAocHBpZCAqIDEwMDApIG5vdCBpbiBzZWxmLnBzX3N0YXRzLnByb2Nlc3NfbWFwOgorIyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlBpZCAnJWQnIHNob3J0IGxpdmVkIHdpdGggbm8gcHJvY2VzcyIgJSBwcGlkCisgICAgICAgICAgICAgICAgICAgIHBwaWQgPSBmaW5kX3BhcmVudF9pZF9mb3IgKHBwaWQpCisjICAgICAgICAgICAgICAgIGVsc2U6CisjICAgICAgICAgICAgICAgICAgICBwcmludCAiUGlkICclZCcgaGFzIGFuIGVudHJ5IiAlIHBwaWQKKyAgICAgICAgICAgIGVsc2U6CisjICAgICAgICAgICAgICAgIHByaW50ICJQaWQgJyVkJyBtaXNzaW5nIGZyb20gcGlkIG1hcCIgJSBwaWQKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgcmV0dXJuIHBwaWQKKworICAgICAgICAjIG1lcmdlIGluIHRoZSBjbWRsaW5lIGRhdGEKKyAgICAgICAgaWYgc2VsZi5jbWRsaW5lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIHByb2MgaW4gc2VsZi5wc19zdGF0cy5wcm9jZXNzX21hcC52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBycGlkID0gaW50IChwcm9jLnBpZCAvLyAxMDAwKQorICAgICAgICAgICAgICAgIGlmIHJwaWQgaW4gc2VsZi5jbWRsaW5lOgorICAgICAgICAgICAgICAgICAgICBjbWQgPSBzZWxmLmNtZGxpbmVbcnBpZF0KKyAgICAgICAgICAgICAgICAgICAgcHJvYy5leGUgPSBjbWRbJ2V4ZSddCisgICAgICAgICAgICAgICAgICAgIHByb2MuYXJncyA9IGNtZFsnYXJncyddCisjICAgICAgICAgICAgICAgIGVsc2U6CisjICAgICAgICAgICAgICAgICAgICBwcmludCAicHJvYyAlZCAnJXMnIG5vdCBpbiBjbWRsaW5lIiAlIChycGlkLCBwcm9jLmV4ZSkKKworICAgICAgICAjIHJlLXBhcmVudCBhbnkgc3RyYXkgb3JwaGFucyBpZiB3ZSBjYW4KKyAgICAgICAgaWYgc2VsZi5wYXJlbnRfbWFwIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIHByb2Nlc3MgaW4gc2VsZi5wc19zdGF0cy5wcm9jZXNzX21hcC52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBwcGlkID0gZmluZF9wYXJlbnRfaWRfZm9yIChpbnQocHJvY2Vzcy5waWQgLy8gMTAwMCkpCisgICAgICAgICAgICAgICAgaWYgcHBpZDoKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5wcGlkID0gcHBpZCAqIDEwMDAKKworICAgICAgICAjIHN0aXRjaCB0aGUgdHJlZSB0b2dldGhlciB3aXRoIHBvaW50ZXJzCisgICAgICAgIGZvciBwcm9jZXNzIGluIHNlbGYucHNfc3RhdHMucHJvY2Vzc19tYXAudmFsdWVzKCk6CisgICAgICAgICAgICBwcm9jZXNzLnNldF9wYXJlbnQgKHNlbGYucHNfc3RhdHMucHJvY2Vzc19tYXApCisKKyAgICAgICAgIyBjb3VudCBvbiBmaW5nZXJzIHZhcmlvdXNseQorICAgICAgICBmb3IgcHJvY2VzcyBpbiBzZWxmLnBzX3N0YXRzLnByb2Nlc3NfbWFwLnZhbHVlcygpOgorICAgICAgICAgICAgcHJvY2Vzcy5jYWxjX3N0YXRzIChzZWxmLnBzX3N0YXRzLnNhbXBsZV9wZXJpb2QpCisKKyAgICBkZWYgY3JvcChzZWxmLCB3cml0ZXIsIGNyb3BfYWZ0ZXIpOgorCisgICAgICAgIGRlZiBpc19pZGxlX2F0KHV0aWwsIHN0YXJ0LCBqKToKKyAgICAgICAgICAgIGsgPSBqICsgMQorICAgICAgICAgICAgd2hpbGUgayA8IGxlbih1dGlsKSBhbmQgdXRpbFtrXVswXSA8IHN0YXJ0ICsgMzAwOgorICAgICAgICAgICAgICAgIGsgKz0gMQorICAgICAgICAgICAgayA9IG1pbihrLCBsZW4odXRpbCktMSkKKworICAgICAgICAgICAgaWYgdXRpbFtqXVsxXSA+PSAwLjI1OgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICBhdmdsb2FkID0gc3VtKHVbMV0gZm9yIHUgaW4gdXRpbFtqOmsrMV0pIC8gKGstaisxKQorICAgICAgICAgICAgaWYgYXZnbG9hZCA8IDAuMjU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGRlZiBpc19pZGxlKHV0aWwsIHN0YXJ0KToKKyAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKDAsIGxlbih1dGlsKSk6CisgICAgICAgICAgICAgICAgaWYgdXRpbFtqXVswXSA8IHN0YXJ0OgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHJldHVybiBpc19pZGxlX2F0KHV0aWwsIHN0YXJ0LCBqKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBuYW1lcyA9IFt4WzoxNV0gZm9yIHggaW4gY3JvcF9hZnRlci5zcGxpdCgiLCIpXQorICAgICAgICBmb3IgcHJvYyBpbiBzZWxmLnBzX3N0YXRzLnByb2Nlc3NfbWFwLnZhbHVlcygpOgorICAgICAgICAgICAgaWYgcHJvYy5jbWQgaW4gbmFtZXMgb3IgcHJvYy5leGUgaW4gbmFtZXM6CisgICAgICAgICAgICAgICAgd3JpdGVyLmluZm8oInNlbGVjdGVkIHByb2MgJyVzJyBmcm9tIGxpc3QgKHN0YXJ0ICVkKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwcm9jLmNtZCwgcHJvYy5zdGFydF90aW1lKSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBwcm9jIGlzIE5vbmU6CisgICAgICAgICAgICB3cml0ZXIud2Fybigibm8gc2VsZWN0ZWQgY3JvcCBwcm9jICclcycgaW4gbGlzdCIgJSBjcm9wX2FmdGVyKQorCisKKyAgICAgICAgY3B1X3V0aWwgPSBbKHNhbXBsZS50aW1lLCBzYW1wbGUudXNlciArIHNhbXBsZS5zeXMgKyBzYW1wbGUuaW8pIGZvciBzYW1wbGUgaW4gc2VsZi5jcHVfc3RhdHNdCisgICAgICAgIGRpc2tfdXRpbCA9IFsoc2FtcGxlLnRpbWUsIHNhbXBsZS51dGlsKSBmb3Igc2FtcGxlIGluIHNlbGYuZGlza19zdGF0c10KKworICAgICAgICBpZGxlID0gTm9uZQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oY3B1X3V0aWwpKToKKyAgICAgICAgICAgIGlmIGNwdV91dGlsW2ldWzBdIDwgcHJvYy5zdGFydF90aW1lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc19pZGxlX2F0KGNwdV91dGlsLCBjcHVfdXRpbFtpXVswXSwgaSkgXAorICAgICAgICAgICAgICAgYW5kIGlzX2lkbGUoZGlza191dGlsLCBjcHVfdXRpbFtpXVswXSk6CisgICAgICAgICAgICAgICAgaWRsZSA9IGNwdV91dGlsW2ldWzBdCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBpZGxlIGlzIE5vbmU6CisgICAgICAgICAgICB3cml0ZXIud2FybiAoIm5vdCBpZGxlIGFmdGVyIHByb2MgJyVzJyIgJSBjcm9wX2FmdGVyKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBjcm9wX2F0ID0gaWRsZSArIDMwMAorICAgICAgICB3cml0ZXIuaW5mbyAoImNyb3BwaW5nIGF0IHRpbWUgJWQiICUgY3JvcF9hdCkKKyAgICAgICAgd2hpbGUgbGVuIChzZWxmLmNwdV9zdGF0cykgXAorICAgICAgICAgICAgICAgICAgICBhbmQgc2VsZi5jcHVfc3RhdHNbLTFdLnRpbWUgPiBjcm9wX2F0OgorICAgICAgICAgICAgc2VsZi5jcHVfc3RhdHMucG9wKCkKKyAgICAgICAgd2hpbGUgbGVuIChzZWxmLmRpc2tfc3RhdHMpIFwKKyAgICAgICAgICAgICAgICAgICAgYW5kIHNlbGYuZGlza19zdGF0c1stMV0udGltZSA+IGNyb3BfYXQ6CisgICAgICAgICAgICBzZWxmLmRpc2tfc3RhdHMucG9wKCkKKworICAgICAgICBzZWxmLnBzX3N0YXRzLmVuZF90aW1lID0gY3JvcF9hdAorCisgICAgICAgIGNyb3BwZWRfbWFwID0ge30KKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5wc19zdGF0cy5wcm9jZXNzX21hcC5pdGVtcygpOgorICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0X3RpbWUgPD0gY3JvcF9hdCk6CisgICAgICAgICAgICAgICAgY3JvcHBlZF9tYXBba2V5XSA9IHZhbHVlCisKKyAgICAgICAgZm9yIHByb2MgaW4gY3JvcHBlZF9tYXAudmFsdWVzKCk6CisgICAgICAgICAgICBwcm9jLmR1cmF0aW9uID0gbWluIChwcm9jLmR1cmF0aW9uLCBjcm9wX2F0IC0gcHJvYy5zdGFydF90aW1lKQorICAgICAgICAgICAgd2hpbGUgbGVuIChwcm9jLnNhbXBsZXMpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBwcm9jLnNhbXBsZXNbLTFdLnRpbWUgPiBjcm9wX2F0OgorICAgICAgICAgICAgICAgIHByb2Muc2FtcGxlcy5wb3AoKQorCisgICAgICAgIHNlbGYucHNfc3RhdHMucHJvY2Vzc19tYXAgPSBjcm9wcGVkX21hcAorCisgICAgICAgIHJldHVybiBpZGxlCisKKworCitjbGFzcyBQYXJzZUVycm9yKEV4Y2VwdGlvbik6CisgICAgIiIiUmVwcmVzZW50cyBlcnJvcnMgZHVyaW5nIHBhcnNlIG9mIHRoZSBib290Y2hhcnQuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKworZGVmIF9wYXJzZV9oZWFkZXJzKGZpbGUpOgorICAgICIiIlBhcnNlcyB0aGUgaGVhZGVycyBvZiB0aGUgYm9vdGNoYXJ0LiIiIgorICAgIGRlZiBwYXJzZShhY2MsIGxpbmUpOgorICAgICAgICAoaGVhZGVycywgbGFzdCkgPSBhY2MKKyAgICAgICAgaWYgJz0nIGluIGxpbmU6CisgICAgICAgICAgICBsYXN0LCB2YWx1ZSA9IG1hcCAobGFtYmRhIHg6IHguc3RyaXAoKSwgbGluZS5zcGxpdCgnPScsIDEpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsdWUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaGVhZGVyc1tsYXN0XSArPSB2YWx1ZQorICAgICAgICByZXR1cm4gaGVhZGVycywgbGFzdAorICAgIHJldHVybiByZWR1Y2UocGFyc2UsIGZpbGUucmVhZCgpLmRlY29kZSgndXRmLTgnKS5zcGxpdCgnXG4nKSwgKGRlZmF1bHRkaWN0KHN0ciksJycpKVswXQorCitkZWYgX3BhcnNlX3RpbWVkX2Jsb2NrcyhmaWxlKToKKyAgICAiIiJQYXJzZXMgKGllLiwgc3BsaXRzKSBhIGZpbGUgaW50byBzby1jYWxsZWQgdGltZWQtYmxvY2tzLiBBCisgICAgdGltZWQtYmxvY2sgY29uc2lzdHMgb2YgYSB0aW1lc3RhbXAgb24gYSBsaW5lIGJ5IGl0c2VsZiBmb2xsb3dlZAorICAgIGJ5IHplcm8gb3IgbW9yZSBsaW5lcyBvZiBkYXRhIGZvciB0aGF0IHBvaW50IGluIHRpbWUuIiIiCisgICAgZGVmIHBhcnNlKGJsb2NrKToKKyAgICAgICAgbGluZXMgPSBibG9jay5zcGxpdCgnXG4nKQorICAgICAgICBpZiBub3QgbGluZXM6CisgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKCdleHBlY3RlZCBhIHRpbWVkLWJsb2NrIGNvbnNpc3RpbmcgYSB0aW1lc3RhbXAgZm9sbG93ZWQgYnkgZGF0YSBsaW5lcycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiAoaW50KGxpbmVzWzBdKSwgbGluZXNbMTpdKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3IoImV4cGVjdGVkIGEgdGltZWQtYmxvY2ssIGJ1dCB0aW1lc3RhbXAgJyVzJyBpcyBub3QgYW4gaW50ZWdlciIgJSBsaW5lc1swXSkKKyAgICBibG9ja3MgPSBmaWxlLnJlYWQoKS5kZWNvZGUoJ3V0Zi04Jykuc3BsaXQoJ1xuXG4nKQorICAgIHJldHVybiBbcGFyc2UoYmxvY2spIGZvciBibG9jayBpbiBibG9ja3MgaWYgYmxvY2suc3RyaXAoKSBhbmQgbm90IGJsb2NrLmVuZHN3aXRoKCcgbm90IHJ1bm5pbmdcbicpXQorCitkZWYgX3BhcnNlX3Byb2NfcHNfbG9nKHdyaXRlciwgZmlsZSk6CisgICAgIiIiCisgICAgICogU2VlIHByb2MoNSkgZm9yIGRldGFpbHMuCisgICAgICoKKyAgICAgKiB7cGlkLCBjb21tLCBzdGF0ZSwgcHBpZCwgcGdycCwgc2Vzc2lvbiwgdHR5X25yLCB0cGdpZCwgZmxhZ3MsIG1pbmZsdCwgY21pbmZsdCwgbWFqZmx0LCBjbWFqZmx0LCB1dGltZSwgc3RpbWUsCisgICAgICogIGN1dGltZSwgY3N0aW1lLCBwcmlvcml0eSwgbmljZSwgMCwgaXRyZWFsdmFsdWUsIHN0YXJ0dGltZSwgdnNpemUsIHJzcywgcmxpbSwgc3RhcnRjb2RlLCBlbmRjb2RlLCBzdGFydHN0YWNrLAorICAgICAqICBrc3RrZXNwLCBrc3RrZWlwfQorICAgICIiIgorICAgIHByb2Nlc3NNYXAgPSB7fQorICAgIGx0aW1lID0gMAorICAgIHRpbWVkX2Jsb2NrcyA9IF9wYXJzZV90aW1lZF9ibG9ja3MoZmlsZSkKKyAgICBmb3IgdGltZSwgbGluZXMgaW4gdGltZWRfYmxvY2tzOgorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOiBjb250aW51ZQorICAgICAgICAgICAgdG9rZW5zID0gbGluZS5zcGxpdCgnICcpCisgICAgICAgICAgICBpZiBsZW4odG9rZW5zKSA8IDIxOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIG9mZnNldCA9IFtpbmRleCBmb3IgaW5kZXgsIHRva2VuIGluIGVudW1lcmF0ZSh0b2tlbnNbMTpdKSBpZiB0b2tlblstMV0gPT0gJyknXVswXQorICAgICAgICAgICAgcGlkLCBjbWQsIHN0YXRlLCBwcGlkID0gaW50KHRva2Vuc1swXSksICcgJy5qb2luKHRva2Vuc1sxOjIrb2Zmc2V0XSksIHRva2Vuc1syK29mZnNldF0sIGludCh0b2tlbnNbMytvZmZzZXRdKQorICAgICAgICAgICAgdXNlckNwdSwgc3lzQ3B1LCBzdGltZSA9IGludCh0b2tlbnNbMTMrb2Zmc2V0XSksIGludCh0b2tlbnNbMTQrb2Zmc2V0XSksIGludCh0b2tlbnNbMjErb2Zmc2V0XSkKKworICAgICAgICAgICAgIyBtYWdpYyBmaXhlZCBwb2ludC1uZXNzIC4uLgorICAgICAgICAgICAgcGlkICo9IDEwMDAKKyAgICAgICAgICAgIHBwaWQgKj0gMTAwMAorICAgICAgICAgICAgaWYgcGlkIGluIHByb2Nlc3NNYXA6CisgICAgICAgICAgICAgICAgcHJvY2VzcyA9IHByb2Nlc3NNYXBbcGlkXQorICAgICAgICAgICAgICAgIHByb2Nlc3MuY21kID0gY21kLnN0cmlwKCcoKScpICMgd2h5IHJlbmFtZSBhZnRlciBsYXRlc3QgbmFtZT8/CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByb2Nlc3MgPSBQcm9jZXNzKHdyaXRlciwgcGlkLCBjbWQuc3RyaXAoJygpJyksIHBwaWQsIG1pbih0aW1lLCBzdGltZSkpCisgICAgICAgICAgICAgICAgcHJvY2Vzc01hcFtwaWRdID0gcHJvY2VzcworCisgICAgICAgICAgICBpZiBwcm9jZXNzLmxhc3RfdXNlcl9jcHVfdGltZSBpcyBub3QgTm9uZSBhbmQgcHJvY2Vzcy5sYXN0X3N5c19jcHVfdGltZSBpcyBub3QgTm9uZSBhbmQgbHRpbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdXNlckNwdUxvYWQsIHN5c0NwdUxvYWQgPSBwcm9jZXNzLmNhbGNfbG9hZCh1c2VyQ3B1LCBzeXNDcHUsIG1heCgxLCB0aW1lIC0gbHRpbWUpKQorICAgICAgICAgICAgICAgIGNwdVNhbXBsZSA9IENQVVNhbXBsZSgnbnVsbCcsIHVzZXJDcHVMb2FkLCBzeXNDcHVMb2FkLCAwLjApCisgICAgICAgICAgICAgICAgcHJvY2Vzcy5zYW1wbGVzLmFwcGVuZChQcm9jZXNzU2FtcGxlKHRpbWUsIHN0YXRlLCBjcHVTYW1wbGUpKQorCisgICAgICAgICAgICBwcm9jZXNzLmxhc3RfdXNlcl9jcHVfdGltZSA9IHVzZXJDcHUKKyAgICAgICAgICAgIHByb2Nlc3MubGFzdF9zeXNfY3B1X3RpbWUgPSBzeXNDcHUKKyAgICAgICAgbHRpbWUgPSB0aW1lCisKKyAgICBpZiBsZW4gKHRpbWVkX2Jsb2NrcykgPCAyOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgc3RhcnRUaW1lID0gdGltZWRfYmxvY2tzWzBdWzBdCisgICAgYXZnU2FtcGxlTGVuZ3RoID0gKGx0aW1lIC0gc3RhcnRUaW1lKS8obGVuICh0aW1lZF9ibG9ja3MpIC0gMSkKKworICAgIHJldHVybiBQcm9jZXNzU3RhdHMgKHdyaXRlciwgcHJvY2Vzc01hcCwgbGVuICh0aW1lZF9ibG9ja3MpLCBhdmdTYW1wbGVMZW5ndGgsIHN0YXJ0VGltZSwgbHRpbWUpCisKK2RlZiBfcGFyc2VfdGFza3N0YXRzX2xvZyh3cml0ZXIsIGZpbGUpOgorICAgICIiIgorICAgICAqIFNlZSBib290Y2hhcnQtY29sbGVjdG9yLmMgZm9yIGRldGFpbHMuCisgICAgICoKKyAgICAgKiB7IHBpZCwgcHBpZCwgY29tbSwgY3B1X3J1bl9yZWFsX3RvdGFsLCBibGtpb19kZWxheV90b3RhbCwgc3dhcGluX2RlbGF5X3RvdGFsIH0KKyAgICAgKgorICAgICIiIgorICAgIHByb2Nlc3NNYXAgPSB7fQorICAgIHBpZFJld3JpdGVzID0ge30KKyAgICBsdGltZSA9IE5vbmUKKyAgICB0aW1lZF9ibG9ja3MgPSBfcGFyc2VfdGltZWRfYmxvY2tzKGZpbGUpCisgICAgZm9yIHRpbWUsIGxpbmVzIGluIHRpbWVkX2Jsb2NrczoKKyAgICAgICAgIyB3ZSBoYXZlIG5vICdzdGltZScgZnJvbSB0YXNrc3RhdHMsIHNvIHByZXAgJ2luaXQnCisgICAgICAgIGlmIGx0aW1lIGlzIE5vbmU6CisgICAgICAgICAgICBwcm9jZXNzID0gUHJvY2Vzcyh3cml0ZXIsIDEsICdbaW5pdF0nLCAwLCAwKQorICAgICAgICAgICAgcHJvY2Vzc01hcFsxMDAwXSA9IHByb2Nlc3MKKyAgICAgICAgICAgIGx0aW1lID0gdGltZQorIyAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICBpZiBub3QgbGluZTogY29udGludWUKKyAgICAgICAgICAgIHRva2VucyA9IGxpbmUuc3BsaXQoJyAnKQorICAgICAgICAgICAgaWYgbGVuKHRva2VucykgIT0gNjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBvcGlkLCBwcGlkLCBjbWQgPSBpbnQodG9rZW5zWzBdKSwgaW50KHRva2Vuc1sxXSksIHRva2Vuc1syXQorICAgICAgICAgICAgY3B1X25zLCBibGtpb19kZWxheV9ucywgc3dhcGluX2RlbGF5X25zID0gbG9uZyh0b2tlbnNbLTNdKSwgbG9uZyh0b2tlbnNbLTJdKSwgbG9uZyh0b2tlbnNbLTFdKSwKKworICAgICAgICAgICAgIyBtYWtlIHNwYWNlIGZvciB0cmVlcyBvZiBwaWRzCisgICAgICAgICAgICBvcGlkICo9IDEwMDAKKyAgICAgICAgICAgIHBwaWQgKj0gMTAwMAorCisgICAgICAgICAgICAjIHdoZW4gdGhlIHByb2Nlc3MgbmFtZSBjaGFuZ2VzLCB3ZSByZS13cml0ZSB0aGUgcGlkLgorICAgICAgICAgICAgaWYgb3BpZCBpbiBwaWRSZXdyaXRlczoKKyAgICAgICAgICAgICAgICBwaWQgPSBwaWRSZXdyaXRlc1tvcGlkXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwaWQgPSBvcGlkCisKKyAgICAgICAgICAgIGNtZCA9IGNtZC5zdHJpcCgnKCcpLnN0cmlwKCcpJykKKyAgICAgICAgICAgIGlmIHBpZCBpbiBwcm9jZXNzTWFwOgorICAgICAgICAgICAgICAgIHByb2Nlc3MgPSBwcm9jZXNzTWFwW3BpZF0KKyAgICAgICAgICAgICAgICBpZiBwcm9jZXNzLmNtZCAhPSBjbWQ6CisgICAgICAgICAgICAgICAgICAgIHBpZCArPSAxCisgICAgICAgICAgICAgICAgICAgIHBpZFJld3JpdGVzW29waWRdID0gcGlkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgInByb2Nlc3MgbXV0YXRpb24gISAnJXMnIHZzICclcycgcGlkICVzIC0+IHBpZCAlc1xuIiAlIChwcm9jZXNzLmNtZCwgY21kLCBvcGlkLCBwaWQpCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgPSBwcm9jZXNzLnNwbGl0ICh3cml0ZXIsIHBpZCwgY21kLCBwcGlkLCB0aW1lKQorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzTWFwW3BpZF0gPSBwcm9jZXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5jbWQgPSBjbWQ7CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByb2Nlc3MgPSBQcm9jZXNzKHdyaXRlciwgcGlkLCBjbWQsIHBwaWQsIHRpbWUpCisgICAgICAgICAgICAgICAgcHJvY2Vzc01hcFtwaWRdID0gcHJvY2VzcworCisgICAgICAgICAgICBkZWx0YV9jcHVfbnMgPSAoZmxvYXQpIChjcHVfbnMgLSBwcm9jZXNzLmxhc3RfY3B1X25zKQorICAgICAgICAgICAgZGVsdGFfYmxraW9fZGVsYXlfbnMgPSAoZmxvYXQpIChibGtpb19kZWxheV9ucyAtIHByb2Nlc3MubGFzdF9ibGtpb19kZWxheV9ucykKKyAgICAgICAgICAgIGRlbHRhX3N3YXBpbl9kZWxheV9ucyA9IChmbG9hdCkgKHN3YXBpbl9kZWxheV9ucyAtIHByb2Nlc3MubGFzdF9zd2FwaW5fZGVsYXlfbnMpCisKKyAgICAgICAgICAgICMgbWFrZSB1cCBzb21lIHN0YXRlIGRhdGEgLi4uCisgICAgICAgICAgICBpZiBkZWx0YV9jcHVfbnMgPiAwOgorICAgICAgICAgICAgICAgIHN0YXRlID0gIlIiCisgICAgICAgICAgICBlbGlmIGRlbHRhX2Jsa2lvX2RlbGF5X25zICsgZGVsdGFfc3dhcGluX2RlbGF5X25zID4gMDoKKyAgICAgICAgICAgICAgICBzdGF0ZSA9ICJEIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdGF0ZSA9ICJTIgorCisgICAgICAgICAgICAjIHJldGFpbiB0aGUgbnMgdGltaW5nIGluZm9ybWF0aW9uIGludG8gYSBDUFVTYW1wbGUgLSB0aGF0IHRyaWVzCisgICAgICAgICAgICAjIHdpdGggdGhlIG9sZC1zdHlsZSB0byBiZSBhICVhZ2Ugb2YgQ1BVIHVzZWQgaW4gdGhpcyB0aW1lLXNsaWNlLgorICAgICAgICAgICAgaWYgZGVsdGFfY3B1X25zICsgZGVsdGFfYmxraW9fZGVsYXlfbnMgKyBkZWx0YV9zd2FwaW5fZGVsYXlfbnMgPiAwOgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAicHJvYyAlcyBjcHVfbnMgJWcgZGVsdGFfY3B1ICVnIiAlIChjbWQsIGNwdV9ucywgZGVsdGFfY3B1X25zKQorICAgICAgICAgICAgICAgIGNwdVNhbXBsZSA9IENQVVNhbXBsZSgnbnVsbCcsIGRlbHRhX2NwdV9ucywgMC4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YV9ibGtpb19kZWxheV9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFfc3dhcGluX2RlbGF5X25zKQorICAgICAgICAgICAgICAgIHByb2Nlc3Muc2FtcGxlcy5hcHBlbmQoUHJvY2Vzc1NhbXBsZSh0aW1lLCBzdGF0ZSwgY3B1U2FtcGxlKSkKKworICAgICAgICAgICAgcHJvY2Vzcy5sYXN0X2NwdV9ucyA9IGNwdV9ucworICAgICAgICAgICAgcHJvY2Vzcy5sYXN0X2Jsa2lvX2RlbGF5X25zID0gYmxraW9fZGVsYXlfbnMKKyAgICAgICAgICAgIHByb2Nlc3MubGFzdF9zd2FwaW5fZGVsYXlfbnMgPSBzd2FwaW5fZGVsYXlfbnMKKyAgICAgICAgbHRpbWUgPSB0aW1lCisKKyAgICBpZiBsZW4gKHRpbWVkX2Jsb2NrcykgPCAyOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgc3RhcnRUaW1lID0gdGltZWRfYmxvY2tzWzBdWzBdCisgICAgYXZnU2FtcGxlTGVuZ3RoID0gKGx0aW1lIC0gc3RhcnRUaW1lKS8obGVuKHRpbWVkX2Jsb2NrcyktMSkKKworICAgIHJldHVybiBQcm9jZXNzU3RhdHMgKHdyaXRlciwgcHJvY2Vzc01hcCwgbGVuICh0aW1lZF9ibG9ja3MpLCBhdmdTYW1wbGVMZW5ndGgsIHN0YXJ0VGltZSwgbHRpbWUpCisKK2RlZiBfcGFyc2VfcHJvY19zdGF0X2xvZyhmaWxlKToKKyAgICBzYW1wbGVzID0gW10KKyAgICBsdGltZXMgPSBOb25lCisgICAgZm9yIHRpbWUsIGxpbmVzIGluIF9wYXJzZV90aW1lZF9ibG9ja3MoZmlsZSk6CisgICAgICAgICMgc2tpcCBlbXRweSBsaW5lcworICAgICAgICBpZiBub3QgbGluZXM6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIENQVSB0aW1lcyB7dXNlciwgbmljZSwgc3lzdGVtLCBpZGxlLCBpb193YWl0LCBpcnEsIHNvZnRpcnF9CisgICAgICAgIHRva2VucyA9IGxpbmVzWzBdLnNwbGl0KCkKKyAgICAgICAgdGltZXMgPSBbIGludCh0b2tlbikgZm9yIHRva2VuIGluIHRva2Vuc1sxOl0gXQorICAgICAgICBpZiBsdGltZXM6CisgICAgICAgICAgICB1c2VyID0gZmxvYXQoKHRpbWVzWzBdICsgdGltZXNbMV0pIC0gKGx0aW1lc1swXSArIGx0aW1lc1sxXSkpCisgICAgICAgICAgICBzeXN0ZW0gPSBmbG9hdCgodGltZXNbMl0gKyB0aW1lc1s1XSArIHRpbWVzWzZdKSAtIChsdGltZXNbMl0gKyBsdGltZXNbNV0gKyBsdGltZXNbNl0pKQorICAgICAgICAgICAgaWRsZSA9IGZsb2F0KHRpbWVzWzNdIC0gbHRpbWVzWzNdKQorICAgICAgICAgICAgaW93YWl0ID0gZmxvYXQodGltZXNbNF0gLSBsdGltZXNbNF0pCisKKyAgICAgICAgICAgIGFTdW0gPSBtYXgodXNlciArIHN5c3RlbSArIGlkbGUgKyBpb3dhaXQsIDEpCisgICAgICAgICAgICBzYW1wbGVzLmFwcGVuZCggQ1BVU2FtcGxlKHRpbWUsIHVzZXIvYVN1bSwgc3lzdGVtL2FTdW0sIGlvd2FpdC9hU3VtKSApCisKKyAgICAgICAgbHRpbWVzID0gdGltZXMKKyAgICAgICAgIyBza2lwIHRoZSByZXN0IG9mIHN0YXRpc3RpY3MgbGluZXMKKyAgICByZXR1cm4gc2FtcGxlcworCitkZWYgX3BhcnNlX3Byb2NfZGlza19zdGF0X2xvZyhmaWxlLCBudW1DcHUpOgorICAgICIiIgorICAgIFBhcnNlIGZpbGUgZm9yIGRpc2sgc3RhdHMsIGJ1dCBvbmx5IGxvb2sgYXQgdGhlIHdob2xlIGRldmljZSwgZWcuIHNkYSwKKyAgICBub3Qgc2RhMSwgc2RhMiBldGMuIFRoZSBmb3JtYXQgb2YgcmVsZXZhbnQgbGluZXMgc2hvdWxkIGJlOgorICAgIHttYWpvciBtaW5vciBuYW1lIHJpbyBybWVyZ2UgcnNlY3QgcnVzZSB3aW8gd21lcmdlIHdzZWN0IHd1c2UgcnVubmluZyB1c2UgYXZlcX0KKyAgICAiIiIKKyAgICBkaXNrX3JlZ2V4X3JlID0gcmUuY29tcGlsZSAoJ14oW2hzdl1kLnxtdGRibG9ja1xkfG1tY2Jsa1xkfGNjaXNzL2NcZCtkXGQrLiopJCcpCisKKyAgICAjIHRoaXMgZ2V0cyBjYWxsZWQgYW4gYXdmdWwgbG90LgorICAgIGRlZiBpc19yZWxldmFudF9saW5lKGxpbmV0b2tlbnMpOgorICAgICAgICBpZiBsZW4obGluZXRva2VucykgIT0gMTQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZGlzayA9IGxpbmV0b2tlbnNbMl0KKyAgICAgICAgcmV0dXJuIGRpc2tfcmVnZXhfcmUubWF0Y2goZGlzaykKKworICAgIGRpc2tfc3RhdF9zYW1wbGVzID0gW10KKworICAgIGZvciB0aW1lLCBsaW5lcyBpbiBfcGFyc2VfdGltZWRfYmxvY2tzKGZpbGUpOgorICAgICAgICBzYW1wbGUgPSBEaXNrU3RhdFNhbXBsZSh0aW1lKQorICAgICAgICByZWxldmFudF90b2tlbnMgPSBbbGluZXRva2VucyBmb3IgbGluZXRva2VucyBpbiBtYXAgKGxhbWJkYSB4OiB4LnNwbGl0KCksbGluZXMpIGlmIGlzX3JlbGV2YW50X2xpbmUobGluZXRva2VucyldCisKKyAgICAgICAgZm9yIHRva2VucyBpbiByZWxldmFudF90b2tlbnM6CisgICAgICAgICAgICBkaXNrLCByc2VjdCwgd3NlY3QsIHVzZSA9IHRva2Vuc1syXSwgaW50KHRva2Vuc1s1XSksIGludCh0b2tlbnNbOV0pLCBpbnQodG9rZW5zWzEyXSkKKyAgICAgICAgICAgIHNhbXBsZS5hZGRfZGlza2RhdGEoW3JzZWN0LCB3c2VjdCwgdXNlXSkKKworICAgICAgICBkaXNrX3N0YXRfc2FtcGxlcy5hcHBlbmQoc2FtcGxlKQorCisgICAgZGlza19zdGF0cyA9IFtdCisgICAgZm9yIHNhbXBsZTEsIHNhbXBsZTIgaW4gemlwKGRpc2tfc3RhdF9zYW1wbGVzWzotMV0sIGRpc2tfc3RhdF9zYW1wbGVzWzE6XSk6CisgICAgICAgIGludGVydmFsID0gc2FtcGxlMS50aW1lIC0gc2FtcGxlMi50aW1lCisgICAgICAgIGlmIGludGVydmFsID09IDA6CisgICAgICAgICAgICBpbnRlcnZhbCA9IDEKKyAgICAgICAgc3VtcyA9IFsgYSAtIGIgZm9yIGEsIGIgaW4gemlwKHNhbXBsZTEuZGlza2RhdGEsIHNhbXBsZTIuZGlza2RhdGEpIF0KKyAgICAgICAgcmVhZFRwdXQgPSBzdW1zWzBdIC8gMi4wICogMTAwLjAgLyBpbnRlcnZhbAorICAgICAgICB3cml0ZVRwdXQgPSBzdW1zWzFdIC8gMi4wICogMTAwLjAgLyBpbnRlcnZhbAorICAgICAgICB1dGlsID0gZmxvYXQoIHN1bXNbMl0gKSAvIDEwIC8gaW50ZXJ2YWwgLyBudW1DcHUKKyAgICAgICAgdXRpbCA9IG1heCgwLjAsIG1pbigxLjAsIHV0aWwpKQorICAgICAgICBkaXNrX3N0YXRzLmFwcGVuZChEaXNrU2FtcGxlKHNhbXBsZTIudGltZSwgcmVhZFRwdXQsIHdyaXRlVHB1dCwgdXRpbCkpCisKKyAgICByZXR1cm4gZGlza19zdGF0cworCitkZWYgX3BhcnNlX3Byb2NfbWVtaW5mb19sb2coZmlsZSk6CisgICAgIiIiCisgICAgUGFyc2UgZmlsZSBmb3IgZ2xvYmFsIG1lbW9yeSBzdGF0aXN0aWNzLgorICAgIFRoZSBmb3JtYXQgb2YgcmVsZXZhbnQgbGluZXMgc2hvdWxkIGJlOiBea2V5OiB2YWx1ZSggdW5pdCk/CisgICAgIiIiCisgICAgdXNlZF92YWx1ZXMgPSAoJ01lbVRvdGFsJywgJ01lbUZyZWUnLCAnQnVmZmVycycsICdDYWNoZWQnLCAnU3dhcFRvdGFsJywgJ1N3YXBGcmVlJywpCisKKyAgICBtZW1fc3RhdHMgPSBbXQorICAgIG1lbWluZm9fcmUgPSByZS5jb21waWxlKHInKFteIFx0Ol0rKTpccyooXGQrKS4qJykKKworICAgIGZvciB0aW1lLCBsaW5lcyBpbiBfcGFyc2VfdGltZWRfYmxvY2tzKGZpbGUpOgorICAgICAgICBzYW1wbGUgPSBNZW1TYW1wbGUodGltZSkKKworICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIG1hdGNoID0gbWVtaW5mb19yZS5tYXRjaChsaW5lKQorICAgICAgICAgICAgaWYgbm90IG1hdGNoOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3IoIkludmFsaWQgbWVtaW5mbyBsaW5lIFwiJXNcIiIgJSBtYXRjaC5ncm91cHMoMCkpCisgICAgICAgICAgICBzYW1wbGUuYWRkX3ZhbHVlKG1hdGNoLmdyb3VwKDEpLCBpbnQobWF0Y2guZ3JvdXAoMikpKQorCisgICAgICAgIGlmIHNhbXBsZS52YWxpZCgpOgorICAgICAgICAgICAgbWVtX3N0YXRzLmFwcGVuZChzYW1wbGUpCisKKyAgICByZXR1cm4gbWVtX3N0YXRzCisKKyMgaWYgd2UgYm9vdCB0aGUga2VybmVsIHdpdGg6IGluaXRjYWxsX2RlYnVnIHByaW50ay50aW1lPTEgd2UgY2FuCisjIGdldCBhbGwgbWFubmVyIG9mIGludGVyZXN0aW5nIGRhdGEgZnJvbSB0aGUgZG1lc2cgb3V0cHV0CisjIFdlIHR1cm4gdGhpcyBpbnRvIGEgcHNldWRvLXByb2Nlc3MgdHJlZTogZWFjaCBldmVudCBpcworIyBjaGFyYWN0ZXJpc2VkIGJ5IGEKKyMgd2UgZG9uJ3QgdHJ5IHRvIGRldGVjdCBhICJrZXJuZWwgZmluaXNoZWQiIHN0YXRlIC0gc2luY2UgdGhlIGtlcm5lbAorIyBjb250aW51ZXMgdG8gZG8gaW50ZXJlc3RpbmcgdGhpbmdzIGFmdGVyIGluaXQgaXMgY2FsbGVkLgorIworIyBzYW1wbGUgaW5wdXQ6CisjIFsgICAgMC4wMDAwMDBdIEFDUEk6IEZBQ1AgM2Y0ZmMwMDAgMDAwRjQgKHYwNCBJTlRFTCAgTmFwYSAgICAgMDAwMDAwMDEgTVNGVCAwMTAwMDAxMykKKyMgLi4uCisjIFsgICAgMC4wMzk5OTNdIGNhbGxpbmcgIG1pZ3JhdGlvbl9pbml0KzB4MC8weDZiIEAgMQorIyBbICAgIDAuMDM5OTkzXSBpbml0Y2FsbCBtaWdyYXRpb25faW5pdCsweDAvMHg2YiByZXR1cm5lZCAxIGFmdGVyIDAgdXNlY3MKK2RlZiBfcGFyc2VfZG1lc2cod3JpdGVyLCBmaWxlKToKKyAgICB0aW1lc3RhbXBfcmUgPSByZS5jb21waWxlICgiXlxbXHMqKFxkK1wuXGQrKVxzKl1ccysoLiopJCIpCisgICAgc3BsaXRfcmUgPSByZS5jb21waWxlICgiXihcUyspXHMrKFtcU1wrXy1dKykgKC4qKSQiKQorICAgIHByb2Nlc3NNYXAgPSB7fQorICAgIGlkeCA9IDAKKyAgICBpbmMgPSAxLjAgLyAxMDAwMDAwCisgICAga2VybmVsID0gUHJvY2Vzcyh3cml0ZXIsIGlkeCwgImstYm9vdCIsIDAsIDAuMSkKKyAgICBwcm9jZXNzTWFwWydrLWJvb3QnXSA9IGtlcm5lbAorICAgIGJhc2VfdHMgPSBGYWxzZQorICAgIG1heF90cyA9IDAKKyAgICBmb3IgbGluZSBpbiBmaWxlLnJlYWQoKS5kZWNvZGUoJ3V0Zi04Jykuc3BsaXQoJ1xuJyk6CisgICAgICAgIHQgPSB0aW1lc3RhbXBfcmUubWF0Y2ggKGxpbmUpCisgICAgICAgIGlmIHQgaXMgTm9uZToKKyMgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJkdWZmIHRpbWVzdGFtcCAiICsgbGluZQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICB0aW1lX21zID0gZmxvYXQgKHQuZ3JvdXAoMSkpICogMTAwMAorICAgICAgICAjIGxvb2tzIGxpa2Ugd2UgbWF5IGhhdmUgYSBodWdlIGRpZmYgYWZ0ZXIgdGhlIGNsb2NrCisgICAgICAgICMgaGFzIGJlZW4gc2V0IHVwLiBUaGlzIGNvdWxkIGxlYWQgdG8gaHVnZSBncmFwaDoKKyAgICAgICAgIyBzbyBodWdlIHdlIHdpbGwgYmUga2lsbGVkIGJ5IHRoZSBPT00uCisgICAgICAgICMgU28gaW5zdGVhZCBvZiB1c2luZyB0aGUgcGxhaW4gdGltZXN0YW1wIHdlIHdpbGwKKyAgICAgICAgIyB1c2UgYSBkZWx0YSB0byBmaXJzdCBvbmUgYW5kIHNraXAgdGhlIGZpcnN0IG9uZQorICAgICAgICAjIGZvciBjb252ZW5pZW5jZQorICAgICAgICBpZiBtYXhfdHMgPT0gMCBhbmQgbm90IGJhc2VfdHMgYW5kIHRpbWVfbXMgPiAxMDAwOgorICAgICAgICAgICAgYmFzZV90cyA9IHRpbWVfbXMKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIG1heF90cyA9IG1heCh0aW1lX21zLCBtYXhfdHMpCisgICAgICAgIGlmIGJhc2VfdHM6CisjICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiZnNja2VkIGNsb2NrOiB1c2VkICVmIGluc3RlYWQgb2YgJWYiICUgKHRpbWVfbXMgLSBiYXNlX3RzLCB0aW1lX21zKQorICAgICAgICAgICAgdGltZV9tcyAtPSBiYXNlX3RzCisgICAgICAgIG0gPSBzcGxpdF9yZS5tYXRjaCAodC5ncm91cCgyKSkKKworICAgICAgICBpZiBtIGlzIE5vbmU6CisgICAgICAgICAgICBjb250aW51ZQorIyAgICAgICAgICAgICAgIHByaW50ICJtYXRjaDogJyVzJyIgJSAobS5ncm91cCgxKSkKKyAgICAgICAgdHlwZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgZnVuYyA9IG0uZ3JvdXAoMikKKyAgICAgICAgcmVzdCA9IG0uZ3JvdXAoMykKKworICAgICAgICBpZiB0Lmdyb3VwKDIpLnN0YXJ0c3dpdGggKCdXcml0ZSBwcm90ZWN0aW5nIHRoZScpIG9yIFwKKyAgICAgICAgICAgdC5ncm91cCgyKS5zdGFydHN3aXRoICgnRnJlZWluZyB1bnVzZWQga2VybmVsIG1lbW9yeScpOgorICAgICAgICAgICAga2VybmVsLmR1cmF0aW9uID0gdGltZV9tcyAvIDEwCisgICAgICAgICAgICBjb250aW51ZQorCisjICAgICAgICAgICAgICAgcHJpbnQgImZvbzogJyVzJyAnJXMnICclcyciICUgKHR5cGUsIGZ1bmMsIHJlc3QpCisgICAgICAgIGlmIHR5cGUgPT0gImNhbGxpbmciOgorICAgICAgICAgICAgcHBpZCA9IGtlcm5lbC5waWQKKyAgICAgICAgICAgIHAgPSByZS5tYXRjaCAoIlxAIChcZCspIiwgcmVzdCkKKyAgICAgICAgICAgIGlmIHAgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcHBpZCA9IGZsb2F0IChwLmdyb3VwKDEpKSAvLyAxMDAwCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJtYXRjaDogJyVzJyAoJyVnJykgYXQgJyVzJyIgJSAoZnVuYywgcHBpZCwgdGltZV9tcykKKyAgICAgICAgICAgIG5hbWUgPSBmdW5jLnNwbGl0ICgnKycsIDEpIFswXQorICAgICAgICAgICAgaWR4ICs9IGluYworICAgICAgICAgICAgcHJvY2Vzc01hcFtmdW5jXSA9IFByb2Nlc3Mod3JpdGVyLCBwcGlkICsgaWR4LCBuYW1lLCBwcGlkLCB0aW1lX21zIC8gMTApCisgICAgICAgIGVsaWYgdHlwZSA9PSAiaW5pdGNhbGwiOgorIyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgImZpbmlzaGVkOiAnJXMnIGF0ICclcyciICUgKGZ1bmMsIHRpbWVfbXMpCisgICAgICAgICAgICBpZiBmdW5jIGluIHByb2Nlc3NNYXA6CisgICAgICAgICAgICAgICAgcHJvY2VzcyA9IHByb2Nlc3NNYXBbZnVuY10KKyAgICAgICAgICAgICAgICBwcm9jZXNzLmR1cmF0aW9uID0gKHRpbWVfbXMgLyAxMCkgLSBwcm9jZXNzLnN0YXJ0X3RpbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoImNvcnJ1cHRlZCBpbml0IGNhbGwgZm9yICVzIiAlIChmdW5jKSkKKworICAgICAgICBlbGlmIHR5cGUgPT0gImFzeW5jX3dhaXRpbmciIG9yIHR5cGUgPT0gImFzeW5jX2NvbnRpbnVpbmciOgorICAgICAgICAgICAgY29udGludWUgIyBpZ25vcmUKKworICAgIHJldHVybiBwcm9jZXNzTWFwLnZhbHVlcygpCisKKyMKKyMgUGFyc2UgYmluYXJ5IHBhY2N0IGFjY291bnRpbmcgZmlsZSBvdXRwdXQgaWYgd2UgaGF2ZSBvbmUKKyMgY2YuIC91c3IvaW5jbHVkZS9saW51eC9hY2N0LmgKKyMKK2RlZiBfcGFyc2VfcGFjY3Qod3JpdGVyLCBmaWxlKToKKyAgICAjIHJlYWQgTEUgaW50MzIKKyAgICBkZWYgX3JlYWRfbGVfaW50MzIoZmlsZSk6CisgICAgICAgIGJ5dHMgPSBmaWxlLnJlYWQoNCkKKyAgICAgICAgcmV0dXJuIChvcmQoYnl0c1swXSkpICAgICAgIHwgKG9yZChieXRzWzFdKSA8PCA4KSB8IFwKKyAgICAgICAgICAgICAgIChvcmQoYnl0c1syXSkgPDwgMTYpIHwgKG9yZChieXRzWzNdKSA8PCAyNCkKKworICAgIHBhcmVudF9tYXAgPSB7fQorICAgIHBhcmVudF9tYXBbMF0gPSAwCisgICAgd2hpbGUgZmlsZS5yZWFkKDEpICE9ICIiOiAjIGlnbm9yZSBmbGFncworICAgICAgICB2ZXIgPSBmaWxlLnJlYWQoMSkKKyAgICAgICAgaWYgb3JkKHZlcikgPCAzOgorICAgICAgICAgICAgcHJpbnQoIkludmFsaWQgdmVyc2lvbiAweCV4IiAlIChvcmQodmVyKSkpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGZpbGUuc2VlayAoMTQsIDEpICAgICAjIHVzZXIsIGdyb3VwIGV0Yy4KKyAgICAgICAgcGlkID0gX3JlYWRfbGVfaW50MzIgKGZpbGUpCisgICAgICAgIHBwaWQgPSBfcmVhZF9sZV9pbnQzMiAoZmlsZSkKKyMgICAgICAgICAgICAgICBwcmludCAiUGFyZW50IG9mICVkIGlzICVkIiAlIChwaWQsIHBwaWQpCisgICAgICAgIHBhcmVudF9tYXBbcGlkXSA9IHBwaWQKKyAgICAgICAgZmlsZS5zZWVrICg0ICsgNCArIDE2LCAxKSAjIHRpbWluZ3MKKyAgICAgICAgZmlsZS5zZWVrICgxNiwgMSkgICAgICAgICAjIGFjY3RfY29tbQorICAgIHJldHVybiBwYXJlbnRfbWFwCisKK2RlZiBfcGFyc2VfcGF0ZXJuaXR5X2xvZyh3cml0ZXIsIGZpbGUpOgorICAgIHBhcmVudF9tYXAgPSB7fQorICAgIHBhcmVudF9tYXBbMF0gPSAwCisgICAgZm9yIGxpbmUgaW4gZmlsZS5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpLnNwbGl0KCdcbicpOgorICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsZW1zID0gbGluZS5zcGxpdCgnICcpICMgPENoaWxkPiA8UGFyZW50PgorICAgICAgICBpZiBsZW4gKGVsZW1zKSA+PSAyOgorIyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgInBhdGVybml0eSBvZiAlZCBpcyAlZCIgJSAoaW50KGVsZW1zWzBdKSwgaW50KGVsZW1zWzFdKSkKKyAgICAgICAgICAgIHBhcmVudF9tYXBbaW50KGVsZW1zWzBdKV0gPSBpbnQoZWxlbXNbMV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiT2RkIHBhdGVybml0eSBsaW5lICclcyciICUgKGxpbmUpKQorICAgIHJldHVybiBwYXJlbnRfbWFwCisKK2RlZiBfcGFyc2VfY21kbGluZV9sb2cod3JpdGVyLCBmaWxlKToKKyAgICBjbWRMaW5lcyA9IHt9CisgICAgZm9yIGJsb2NrIGluIGZpbGUucmVhZCgpLmRlY29kZSgndXRmLTgnKS5zcGxpdCgnXG5cbicpOgorICAgICAgICBsaW5lcyA9IGJsb2NrLnNwbGl0KCdcbicpCisgICAgICAgIGlmIGxlbiAobGluZXMpID49IDM6CisjICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiTGluZXMgJyVzJyIgJSAobGluZXNbMF0pCisgICAgICAgICAgICBwaWQgPSBpbnQgKGxpbmVzWzBdKQorICAgICAgICAgICAgdmFsdWVzID0ge30KKyAgICAgICAgICAgIHZhbHVlc1snZXhlJ10gPSBsaW5lc1sxXS5sc3RyaXAoJzonKQorICAgICAgICAgICAgYXJncyA9IGxpbmVzWzJdLmxzdHJpcCgnOicpLnNwbGl0KCdcMCcpCisgICAgICAgICAgICBhcmdzLnBvcCgpCisgICAgICAgICAgICB2YWx1ZXNbJ2FyZ3MnXSA9IGFyZ3MKKyAgICAgICAgICAgIGNtZExpbmVzW3BpZF0gPSB2YWx1ZXMKKyAgICByZXR1cm4gY21kTGluZXMKKworZGVmIGdldF9udW1fY3B1cyhoZWFkZXJzKToKKyAgICAiIiJHZXQgdGhlIG51bWJlciBvZiBDUFVzIGZyb20gdGhlIHN5c3RlbS5jcHUgaGVhZGVyIHByb3BlcnR5LiBBcyB0aGUKKyAgICBDUFUgdXRpbGl6YXRpb24gZ3JhcGhzIGFyZSByZWxhdGl2ZSwgdGhlIG51bWJlciBvZiBDUFVzIGN1cnJlbnRseSBtYWtlcworICAgIG5vIGRpZmZlcmVuY2UuIiIiCisgICAgaWYgaGVhZGVycyBpcyBOb25lOgorICAgICAgICByZXR1cm4gMQorICAgIGlmIGhlYWRlcnMuZ2V0KCJzeXN0ZW0uY3B1Lm51bSIpOgorICAgICAgICByZXR1cm4gbWF4IChpbnQgKGhlYWRlcnMuZ2V0KCJzeXN0ZW0uY3B1Lm51bSIpKSwgMSkKKyAgICBjcHVfbW9kZWwgPSBoZWFkZXJzLmdldCgic3lzdGVtLmNwdSIpCisgICAgaWYgY3B1X21vZGVsIGlzIE5vbmU6CisgICAgICAgIHJldHVybiAxCisgICAgbWF0ID0gcmUubWF0Y2goIi4qXFwoKFxcZCspXFwpIiwgY3B1X21vZGVsKQorICAgIGlmIG1hdCBpcyBOb25lOgorICAgICAgICByZXR1cm4gMQorICAgIHJldHVybiBtYXggKGludChtYXQuZ3JvdXAoMSkpLCAxKQorCitkZWYgX2RvX3BhcnNlKHdyaXRlciwgc3RhdGUsIGZpbGVuYW1lLCBmaWxlKToKKyAgICB3cml0ZXIuaW5mbygicGFyc2luZyAnJXMnIiAlIGZpbGVuYW1lKQorICAgIHQxID0gY2xvY2soKQorICAgIHBhdGhzID0gZmlsZW5hbWUuc3BsaXQoIi8iKQorICAgIHRhc2sgPSBwYXRoc1stMV0KKyAgICBwbiA9IHBhdGhzWy0yXQorICAgIHN0YXJ0ID0gTm9uZQorICAgIGVuZCA9IE5vbmUKKyAgICBmb3IgbGluZSBpbiBmaWxlOgorICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlN0YXJ0ZWQ6Iik6CisgICAgICAgICAgICBzdGFydCA9IGludChmbG9hdChsaW5lLnNwbGl0KClbLTFdKSkKKyAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoIkVuZGVkOiIpOgorICAgICAgICAgICAgZW5kID0gaW50KGZsb2F0KGxpbmUuc3BsaXQoKVstMV0pKQorICAgIGlmIHN0YXJ0IGFuZCBlbmQ6CisgICAgICAgIHN0YXRlLmFkZF9wcm9jZXNzKHBuICsgIjoiICsgdGFzaywgc3RhcnQsIGVuZCkKKyAgICB0MiA9IGNsb2NrKCkKKyAgICB3cml0ZXIuaW5mbygiICAlcyBzZWNvbmRzIiAlIHN0cih0Mi10MSkpCisgICAgcmV0dXJuIHN0YXRlCisKK2RlZiBwYXJzZV9maWxlKHdyaXRlciwgc3RhdGUsIGZpbGVuYW1lKToKKyAgICBpZiBzdGF0ZS5maWxlbmFtZSBpcyBOb25lOgorICAgICAgICBzdGF0ZS5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKQorICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJiIikgYXMgZmlsZToKKyAgICAgICAgcmV0dXJuIF9kb19wYXJzZSh3cml0ZXIsIHN0YXRlLCBmaWxlbmFtZSwgZmlsZSkKKworZGVmIHBhcnNlX3BhdGhzKHdyaXRlciwgc3RhdGUsIHBhdGhzKToKKyAgICBmb3IgcGF0aCBpbiBwYXRoczoKKyAgICAgICAgaWYgc3RhdGUuZmlsZW5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHN0YXRlLmZpbGVuYW1lID0gcGF0aAorICAgICAgICByb290LCBleHRlbnNpb24gPSBvcy5wYXRoLnNwbGl0ZXh0KHBhdGgpCisgICAgICAgIGlmIG5vdChvcy5wYXRoLmV4aXN0cyhwYXRoKSk6CisgICAgICAgICAgICB3cml0ZXIud2Fybigid2FybmluZzogcGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0LCBpZ25vcmluZy4iICUgcGF0aCkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICNzdGF0ZS5maWxlbmFtZSA9IHBhdGgKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgICAgIGZpbGVzID0gc29ydGVkKFtvcy5wYXRoLmpvaW4ocGF0aCwgZikgZm9yIGYgaW4gb3MubGlzdGRpcihwYXRoKV0pCisgICAgICAgICAgICBzdGF0ZSA9IHBhcnNlX3BhdGhzKHdyaXRlciwgc3RhdGUsIGZpbGVzKQorICAgICAgICBlbGlmIGV4dGVuc2lvbiBpbiBbIi50YXIiLCAiLnRneiIsICIuZ3oiXToKKyAgICAgICAgICAgIGlmIGV4dGVuc2lvbiA9PSAiLmd6IjoKKyAgICAgICAgICAgICAgICByb290LCBleHRlbnNpb24gPSBvcy5wYXRoLnNwbGl0ZXh0KHJvb3QpCisgICAgICAgICAgICAgICAgaWYgZXh0ZW5zaW9uICE9ICIudGFyIjoKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndhcm4oIndhcm5pbmc6IGNhbiBvbmx5IGhhbmRsZSB6aXBwZWQgdGFyIGZpbGVzLCBub3QgemlwcGVkICclcyctZmlsZXM7IGlnbm9yaW5nIiAlIGV4dGVuc2lvbikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRmID0gTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdyaXRlci5zdGF0dXMoInBhcnNpbmcgJyVzJyIgJSBwYXRoKQorICAgICAgICAgICAgICAgIHRmID0gdGFyZmlsZS5vcGVuKHBhdGgsICdyOionKQorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIHRmLmdldG5hbWVzKCk6CisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gX2RvX3BhcnNlKHdyaXRlciwgc3RhdGUsIG5hbWUsIHRmLmV4dHJhY3RmaWxlKG5hbWUpKQorICAgICAgICAgICAgZXhjZXB0IHRhcmZpbGUuUmVhZEVycm9yIGFzIGVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3IoImVycm9yOiBjb3VsZCBub3QgcmVhZCB0YXJmaWxlICclcyc6ICVzLiIgJSAocGF0aCwgZXJyb3IpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBpZiB0ZiAhPSBOb25lOgorICAgICAgICAgICAgICAgICAgICB0Zi5jbG9zZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGF0ZSA9IHBhcnNlX2ZpbGUod3JpdGVyLCBzdGF0ZSwgcGF0aCkKKyAgICByZXR1cm4gc3RhdGUKKworZGVmIHNwbGl0X3JlcyhyZXMsIG9wdGlvbnMpOgorICAgICIiIiBTcGxpdCB0aGUgcmVzIGludG8gbiBwaWVjZXMgIiIiCisgICAgcmVzX2xpc3QgPSBbXQorICAgIGlmIG9wdGlvbnMubnVtID4gMToKKyAgICAgICAgc19saXN0ID0gc29ydGVkKHJlcy5zdGFydC5rZXlzKCkpCisgICAgICAgIGZyYWdfc2l6ZSA9IGxlbihzX2xpc3QpIC8gZmxvYXQob3B0aW9ucy5udW0pCisgICAgICAgICMgTmVlZCB0aGUgdG9wIHZhbHVlCisgICAgICAgIGlmIGZyYWdfc2l6ZSA+IGludChmcmFnX3NpemUpOgorICAgICAgICAgICAgZnJhZ19zaXplID0gaW50KGZyYWdfc2l6ZSArIDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmcmFnX3NpemUgPSBpbnQoZnJhZ19zaXplKQorCisgICAgICAgIHN0YXJ0ID0gMAorICAgICAgICBlbmQgPSBmcmFnX3NpemUKKyAgICAgICAgd2hpbGUgc3RhcnQgPCBlbmQ6CisgICAgICAgICAgICBzdGF0ZSA9IFRyYWNlKE5vbmUsIFtdLCBOb25lKQorICAgICAgICAgICAgaWYgb3B0aW9ucy5mdWxsX3RpbWU6CisgICAgICAgICAgICAgICAgc3RhdGUubWluID0gbWluKHJlcy5zdGFydC5rZXlzKCkpCisgICAgICAgICAgICAgICAgc3RhdGUubWF4ID0gbWF4KHJlcy5lbmQua2V5cygpKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc3RhcnQsIGVuZCk6CisgICAgICAgICAgICAgICAgIyBBZGQgdGhpcyBsaW5lIGZvciByZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAjc3RhdGUuYWRkX3Byb2Nlc3MocG4gKyAiOiIgKyB0YXNrLCBzdGFydCwgZW5kKQorICAgICAgICAgICAgICAgIGZvciBwIGluIHJlcy5zdGFydFtzX2xpc3RbaV1dOgorICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hZGRfcHJvY2VzcyhwLCBzX2xpc3RbaV0sIHJlcy5wcm9jZXNzZXNbcF1bMV0pCisgICAgICAgICAgICBzdGFydCA9IGVuZAorICAgICAgICAgICAgZW5kID0gZW5kICsgZnJhZ19zaXplCisgICAgICAgICAgICBpZiBlbmQgPiBsZW4oc19saXN0KToKKyAgICAgICAgICAgICAgICBlbmQgPSBsZW4oc19saXN0KQorICAgICAgICAgICAgcmVzX2xpc3QuYXBwZW5kKHN0YXRlKQorICAgIGVsc2U6CisgICAgICAgIHJlc19saXN0LmFwcGVuZChyZXMpCisgICAgcmV0dXJuIHJlc19saXN0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvcHJvY2Vzc190cmVlLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3Byb2Nlc3NfdHJlZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjg4MTEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3Byb2Nlc3NfdHJlZS5weQpAQCAtMCwwICsxLDI5MiBAQAorIyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlib290Y2hhcnRndWkuCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgYWxvbmcgd2l0aCBweWJvb3RjaGFydGd1aS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitjbGFzcyBQcm9jZXNzVHJlZToKKyAgICAiIiJQcm9jZXNzVHJlZSBlbmNhcHN1bGF0ZXMgYSBwcm9jZXNzIHRyZWUuICBUaGUgdHJlZSBpcyBidWlsdCBmcm9tIGxvZyBmaWxlcworICAgICAgIHJldHJpZXZlZCBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4gIFdoZW4gYnVpbGRpbmcgdGhlIHByb2Nlc3MgdHJlZSwgaXQgaXMKKyAgICAgICBwcnVuZWQgYW5kIG1lcmdlZCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHZpc3VhbGl6ZSBpdCBpbiBhIGNvbXByZWhlbnNpYmxlCisgICAgICAgbWFubmVyLgorCisgICAgICAgVGhlIGZvbGxvd2luZyBwcnVuaW5nIHRlY2huaXF1ZXMgYXJlIHVzZWQ6CisKKyAgICAgICAgKiBpZGxlIHByb2Nlc3NlcyB0aGF0IGtlZXAgcnVubmluZyBkdXJpbmcgdGhlIGxhc3QgcHJvY2VzcyBzYW1wbGUKKyAgICAgICAgICAod2hpY2ggaXMgYSBoZXVyaXN0aWMgZm9yIGEgYmFja2dyb3VuZCBwcm9jZXNzZXMpIGFyZSByZW1vdmVkLAorICAgICAgICAqIHNob3J0LWxpdmVkIHByb2Nlc3NlcyAoaS5lLiBwcm9jZXNzZXMgdGhhdCBvbmx5IGxpdmUgZm9yIHRoZQorICAgICAgICAgIGR1cmF0aW9uIG9mIHR3byBzYW1wbGVzIG9yIGxlc3MpIGFyZSByZW1vdmVkLAorICAgICAgICAqIHRoZSBwcm9jZXNzZXMgdXNlZCBieSB0aGUgYm9vdCBsb2dnZXIgYXJlIHJlbW92ZWQsCisgICAgICAgICogZXhwbG9kZXJzIChpLmUuIHByb2Nlc3NlcyB0aGF0IGFyZSBrbm93biB0byBzcGF3biBodWdlIG1lYW5pbmdsZXNzCisgICAgICAgICAgcHJvY2VzcyBzdWJ0cmVlcykgaGF2ZSB0aGVpciBzdWJ0cmVlcyBtZXJnZWQgdG9nZXRoZXIsCisgICAgICAgICogc2libGluZ3MgKGkuZS4gcHJvY2Vzc2VzIHdpdGggdGhlIHNhbWUgY29tbWFuZCBsaW5lIGxpdmluZworICAgICAgICAgIGNvbmN1cnJlbnRseSAtLSB0aHJlYWQgaGV1cmlzdGljKSBhcmUgbWVyZ2VkIHRvZ2V0aGVyLAorICAgICAgICAqIHByb2Nlc3MgcnVucyAodW5hcnkgdHJlZXMgd2l0aCBwcm9jZXNzZXMgc2hhcmluZyB0aGUgY29tbWFuZCBsaW5lKQorICAgICAgICAgIGFyZSBtZXJnZWQgdG9nZXRoZXIuCisKKyAgICAiIiIKKyAgICBMT0dHRVJfUFJPQyA9ICdib290Y2hhcnQtY29sbGUnCisgICAgRVhQTE9ERVJfUFJPQ0VTU0VTID0gc2V0KFsnaHd1cCddKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlciwga2VybmVsLCBwc3N0YXRzLCBzYW1wbGVfcGVyaW9kLAorICAgICAgICAgICAgICAgICBtb25pdG9yZWRBcHAsIHBydW5lLCBpZGxlLCB0YXNrc3RhdHMsCisgICAgICAgICAgICAgICAgIGFjY3VyYXRlX3BhcmVudGFnZSwgZm9yX3Rlc3RpbmcgPSBGYWxzZSk6CisgICAgICAgIHNlbGYud3JpdGVyID0gd3JpdGVyCisgICAgICAgIHNlbGYucHJvY2Vzc190cmVlID0gW10KKyAgICAgICAgc2VsZi50YXNrc3RhdHMgPSB0YXNrc3RhdHMKKyAgICAgICAgaWYgcHNzdGF0cyBpcyBOb25lOgorICAgICAgICAgICAgcHJvY2Vzc19saXN0ID0ga2VybmVsCisgICAgICAgIGVsaWYga2VybmVsIGlzIE5vbmU6CisgICAgICAgICAgICBwcm9jZXNzX2xpc3QgPSBwc3N0YXRzLnByb2Nlc3NfbWFwLnZhbHVlcygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcm9jZXNzX2xpc3QgPSBsaXN0KGtlcm5lbCkgKyBsaXN0KHBzc3RhdHMucHJvY2Vzc19tYXAudmFsdWVzKCkpCisgICAgICAgIHNlbGYucHJvY2Vzc19saXN0ID0gc29ydGVkKHByb2Nlc3NfbGlzdCwga2V5ID0gbGFtYmRhIHA6IHAucGlkKQorICAgICAgICBzZWxmLnNhbXBsZV9wZXJpb2QgPSBzYW1wbGVfcGVyaW9kCisKKyAgICAgICAgc2VsZi5idWlsZCgpCisgICAgICAgIGlmIG5vdCBhY2N1cmF0ZV9wYXJlbnRhZ2U6CisgICAgICAgICAgICBzZWxmLnVwZGF0ZV9wcGlkc19mb3JfZGFlbW9ucyhzZWxmLnByb2Nlc3NfbGlzdCkKKworICAgICAgICBzZWxmLnN0YXJ0X3RpbWUgPSBzZWxmLmdldF9zdGFydF90aW1lKHNlbGYucHJvY2Vzc190cmVlKQorICAgICAgICBzZWxmLmVuZF90aW1lID0gc2VsZi5nZXRfZW5kX3RpbWUoc2VsZi5wcm9jZXNzX3RyZWUpCisgICAgICAgIHNlbGYuZHVyYXRpb24gPSBzZWxmLmVuZF90aW1lIC0gc2VsZi5zdGFydF90aW1lCisgICAgICAgIHNlbGYuaWRsZSA9IGlkbGUKKworICAgICAgICBpZiBmb3JfdGVzdGluZzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHJlbW92ZWQgPSBzZWxmLm1lcmdlX2xvZ2dlcihzZWxmLnByb2Nlc3NfdHJlZSwgc2VsZi5MT0dHRVJfUFJPQywgbW9uaXRvcmVkQXBwLCBGYWxzZSkKKyAgICAgICAgd3JpdGVyLnN0YXR1cygibWVyZ2VkICVpIGxvZ2dlciBwcm9jZXNzZXMiICUgcmVtb3ZlZCkKKworICAgICAgICBpZiBwcnVuZToKKyAgICAgICAgICAgIHBfcHJvY2Vzc2VzID0gc2VsZi5wcnVuZShzZWxmLnByb2Nlc3NfdHJlZSwgTm9uZSkKKyAgICAgICAgICAgIHBfZXhwbG9kZXJzID0gc2VsZi5tZXJnZV9leHBsb2RlcnMoc2VsZi5wcm9jZXNzX3RyZWUsIHNlbGYuRVhQTE9ERVJfUFJPQ0VTU0VTKQorICAgICAgICAgICAgcF90aHJlYWRzID0gc2VsZi5tZXJnZV9zaWJsaW5ncyhzZWxmLnByb2Nlc3NfdHJlZSkKKyAgICAgICAgICAgIHBfcnVucyA9IHNlbGYubWVyZ2VfcnVucyhzZWxmLnByb2Nlc3NfdHJlZSkKKyAgICAgICAgICAgIHdyaXRlci5zdGF0dXMoInBydW5lZCAlaSBwcm9jZXNzLCAlaSBleHBsb2RlcnMsICVpIHRocmVhZHMsIGFuZCAlaSBydW5zIiAlIChwX3Byb2Nlc3NlcywgcF9leHBsb2RlcnMsIHBfdGhyZWFkcywgcF9ydW5zKSkKKworICAgICAgICBzZWxmLnNvcnQoc2VsZi5wcm9jZXNzX3RyZWUpCisKKyAgICAgICAgc2VsZi5zdGFydF90aW1lID0gc2VsZi5nZXRfc3RhcnRfdGltZShzZWxmLnByb2Nlc3NfdHJlZSkKKyAgICAgICAgc2VsZi5lbmRfdGltZSA9IHNlbGYuZ2V0X2VuZF90aW1lKHNlbGYucHJvY2Vzc190cmVlKQorICAgICAgICBzZWxmLmR1cmF0aW9uID0gc2VsZi5lbmRfdGltZSAtIHNlbGYuc3RhcnRfdGltZQorCisgICAgICAgIHNlbGYubnVtX3Byb2MgPSBzZWxmLm51bV9ub2RlcyhzZWxmLnByb2Nlc3NfdHJlZSkKKworICAgIGRlZiBidWlsZChzZWxmKToKKyAgICAgICAgIiIiQnVpbGQgdGhlIHByb2Nlc3MgdHJlZSBmcm9tIHRoZSBsaXN0IG9mIHRvcCBzYW1wbGVzLiIiIgorICAgICAgICBzZWxmLnByb2Nlc3NfdHJlZSA9IFtdCisgICAgICAgIGZvciBwcm9jIGluIHNlbGYucHJvY2Vzc19saXN0OgorICAgICAgICAgICAgaWYgbm90IHByb2MucGFyZW50OgorICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc190cmVlLmFwcGVuZChwcm9jKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcm9jLnBhcmVudC5jaGlsZF9saXN0LmFwcGVuZChwcm9jKQorCisgICAgZGVmIHNvcnQoc2VsZiwgcHJvY2Vzc19zdWJ0cmVlKToKKyAgICAgICAgIiIiU29ydCBwcm9jZXNzIHRyZWUuIiIiCisgICAgICAgIGZvciBwIGluIHByb2Nlc3Nfc3VidHJlZToKKyAgICAgICAgICAgIHAuY2hpbGRfbGlzdC5zb3J0KGtleSA9IGxhbWJkYSBwOiBwLnBpZCkKKyAgICAgICAgICAgIHNlbGYuc29ydChwLmNoaWxkX2xpc3QpCisKKyAgICBkZWYgbnVtX25vZGVzKHNlbGYsIHByb2Nlc3NfbGlzdCk6CisgICAgICAgICJDb3VudHMgdGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgc3BlY2lmaWVkIHByb2Nlc3MgdHJlZS4iIiIKKyAgICAgICAgbm9kZXMgPSAwCisgICAgICAgIGZvciBwcm9jIGluIHByb2Nlc3NfbGlzdDoKKyAgICAgICAgICAgIG5vZGVzID0gbm9kZXMgKyBzZWxmLm51bV9ub2Rlcyhwcm9jLmNoaWxkX2xpc3QpCisgICAgICAgIHJldHVybiBub2RlcyArIGxlbihwcm9jZXNzX2xpc3QpCisKKyAgICBkZWYgZ2V0X3N0YXJ0X3RpbWUoc2VsZiwgcHJvY2Vzc19zdWJ0cmVlKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgc3RhcnQgdGltZSBvZiB0aGUgcHJvY2VzcyBzdWJ0cmVlLiAgVGhpcyBpcyB0aGUgc3RhcnQKKyAgICAgICAgICAgdGltZSBvZiB0aGUgZWFybGllc3QgcHJvY2Vzcy4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHByb2Nlc3Nfc3VidHJlZToKKyAgICAgICAgICAgIHJldHVybiAxMDAwMDAwMDAKKyAgICAgICAgcmV0dXJuIG1pbiggW21pbihwcm9jLnN0YXJ0X3RpbWUsIHNlbGYuZ2V0X3N0YXJ0X3RpbWUocHJvYy5jaGlsZF9saXN0KSkgZm9yIHByb2MgaW4gcHJvY2Vzc19zdWJ0cmVlXSApCisKKyAgICBkZWYgZ2V0X2VuZF90aW1lKHNlbGYsIHByb2Nlc3Nfc3VidHJlZSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGVuZCB0aW1lIG9mIHRoZSBwcm9jZXNzIHN1YnRyZWUuICBUaGlzIGlzIHRoZSBlbmQgdGltZQorICAgICAgICAgICBvZiB0aGUgbGFzdCBjb2xsZWN0ZWQgc2FtcGxlLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgcHJvY2Vzc19zdWJ0cmVlOgorICAgICAgICAgICAgcmV0dXJuIC0xMDAwMDAwMDAKKyAgICAgICAgcmV0dXJuIG1heCggW21heChwcm9jLnN0YXJ0X3RpbWUgKyBwcm9jLmR1cmF0aW9uLCBzZWxmLmdldF9lbmRfdGltZShwcm9jLmNoaWxkX2xpc3QpKSBmb3IgcHJvYyBpbiBwcm9jZXNzX3N1YnRyZWVdICkKKworICAgIGRlZiBnZXRfbWF4X3BpZChzZWxmLCBwcm9jZXNzX3N1YnRyZWUpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBtYXggUElEIGZvdW5kIGluIHRoZSBwcm9jZXNzIHRyZWUuIiIiCisgICAgICAgIGlmIG5vdCBwcm9jZXNzX3N1YnRyZWU6CisgICAgICAgICAgICByZXR1cm4gLTEwMDAwMDAwMAorICAgICAgICByZXR1cm4gbWF4KCBbbWF4KHByb2MucGlkLCBzZWxmLmdldF9tYXhfcGlkKHByb2MuY2hpbGRfbGlzdCkpIGZvciBwcm9jIGluIHByb2Nlc3Nfc3VidHJlZV0gKQorCisgICAgZGVmIHVwZGF0ZV9wcGlkc19mb3JfZGFlbW9ucyhzZWxmLCBwcm9jZXNzX2xpc3QpOgorICAgICAgICAiIiJGZWRvcmEgaGFjazogd2hlbiBsb2FkaW5nIHRoZSBzeXN0ZW0gc2VydmljZXMgZnJvbSByYywgcnVudXNlcigxKQorICAgICAgICAgICBpcyB1c2VkLiAgVGhpcyBzZXRzIHRoZSBQUElEIG9mIGFsbCBkYWVtb25zIHRvIDEsIHNrZXdpbmcKKyAgICAgICAgICAgdGhlIHByb2Nlc3MgdHJlZS4gIFRyeSB0byBkZXRlY3QgdGhpcyBhbmQgc2V0IHRoZSBQUElEIG9mCisgICAgICAgICAgIHRoZXNlIHByb2Nlc3NlcyB0aGUgUElEIG9mIHJjLgorCisgICAgICAgICIiIgorICAgICAgICByY3N0YXJ0cGlkID0gLTEKKyAgICAgICAgcmNlbmRwaWQgPSAtMQorICAgICAgICByY3Byb2MgPSBOb25lCisgICAgICAgIGZvciBwIGluIHByb2Nlc3NfbGlzdDoKKyAgICAgICAgICAgIGlmIHAuY21kID09ICJyYyIgYW5kIHAucHBpZCAvLyAxMDAwID09IDE6CisgICAgICAgICAgICAgICAgcmNwcm9jID0gcAorICAgICAgICAgICAgICAgIHJjc3RhcnRwaWQgPSBwLnBpZAorICAgICAgICAgICAgICAgIHJjZW5kcGlkID0gc2VsZi5nZXRfbWF4X3BpZChwLmNoaWxkX2xpc3QpCisgICAgICAgIGlmIHJjc3RhcnRwaWQgIT0gLTEgYW5kIHJjZW5kcGlkICE9IC0xOgorICAgICAgICAgICAgZm9yIHAgaW4gcHJvY2Vzc19saXN0OgorICAgICAgICAgICAgICAgIGlmIHAucGlkID4gcmNzdGFydHBpZCBhbmQgcC5waWQgPCByY2VuZHBpZCBhbmQgcC5wcGlkIC8vIDEwMDAgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgcC5wcGlkID0gcmNzdGFydHBpZAorICAgICAgICAgICAgICAgICAgICBwLnBhcmVudCA9IHJjcHJvYworICAgICAgICAgICAgZm9yIHAgaW4gcHJvY2Vzc19saXN0OgorICAgICAgICAgICAgICAgIHAuY2hpbGRfbGlzdCA9IFtdCisgICAgICAgICAgICBzZWxmLmJ1aWxkKCkKKworICAgIGRlZiBwcnVuZShzZWxmLCBwcm9jZXNzX3N1YnRyZWUsIHBhcmVudCk6CisgICAgICAgICIiIlBydW5lcyB0aGUgcHJvY2VzcyB0cmVlIGJ5IHJlbW92aW5nIGlkbGUgcHJvY2Vzc2VzIGFuZCBwcm9jZXNzZXMKKyAgICAgICAgICAgdGhhdCBvbmx5IGxpdmUgZm9yIHRoZSBkdXJhdGlvbiBvZiBhIHNpbmdsZSB0b3Agc2FtcGxlLiAgU2libGluZworICAgICAgICAgICBwcm9jZXNzZXMgd2l0aCB0aGUgc2FtZSBjb21tYW5kIGxpbmUgKGkuZS4gdGhyZWFkcykgYXJlIG1lcmdlZAorICAgICAgICAgICB0b2dldGhlci4gVGhpcyBmaWx0ZXJzIG91dCBzbGVlcHkgYmFja2dyb3VuZCBwcm9jZXNzZXMsIHNob3J0LWxpdmVkCisgICAgICAgICAgIHByb2Nlc3NlcyBhbmQgYm9vdGNoYXJ0cycgYW5hbHlzaXMgdG9vbHMuCisgICAgICAgICIiIgorICAgICAgICBkZWYgaXNfaWRsZV9iYWNrZ3JvdW5kX3Byb2Nlc3Nfd2l0aG91dF9jaGlsZHJlbihwKToKKyAgICAgICAgICAgIHByb2Nlc3NfZW5kID0gcC5zdGFydF90aW1lICsgcC5kdXJhdGlvbgorICAgICAgICAgICAgcmV0dXJuIG5vdCBwLmFjdGl2ZSBhbmQgXAorICAgICAgICAgICAgICAgICAgIHByb2Nlc3NfZW5kID49IHNlbGYuc3RhcnRfdGltZSArIHNlbGYuZHVyYXRpb24gYW5kIFwKKyAgICAgICAgICAgICAgICAgICBwLnN0YXJ0X3RpbWUgPiBzZWxmLnN0YXJ0X3RpbWUgYW5kIFwKKyAgICAgICAgICAgICAgICAgICBwLmR1cmF0aW9uID4gMC45ICogc2VsZi5kdXJhdGlvbiBhbmQgXAorICAgICAgICAgICAgICAgICAgIHNlbGYubnVtX25vZGVzKHAuY2hpbGRfbGlzdCkgPT0gMAorCisgICAgICAgIG51bV9yZW1vdmVkID0gMAorICAgICAgICBpZHggPSAwCisgICAgICAgIHdoaWxlIGlkeCA8IGxlbihwcm9jZXNzX3N1YnRyZWUpOgorICAgICAgICAgICAgcCA9IHByb2Nlc3Nfc3VidHJlZVtpZHhdCisgICAgICAgICAgICBpZiBwYXJlbnQgIT0gTm9uZSBvciBsZW4ocC5jaGlsZF9saXN0KSA9PSAwOgorCisgICAgICAgICAgICAgICAgcHJ1bmUgPSBGYWxzZQorICAgICAgICAgICAgICAgIGlmIGlzX2lkbGVfYmFja2dyb3VuZF9wcm9jZXNzX3dpdGhvdXRfY2hpbGRyZW4ocCk6CisgICAgICAgICAgICAgICAgICAgIHBydW5lID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsaWYgcC5kdXJhdGlvbiA8PSAyICogc2VsZi5zYW1wbGVfcGVyaW9kOgorICAgICAgICAgICAgICAgICAgICAjIHNob3J0LWxpdmVkIHByb2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgcHJ1bmUgPSBUcnVlCisKKyAgICAgICAgICAgICAgICBpZiBwcnVuZToKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc19zdWJ0cmVlLnBvcChpZHgpCisgICAgICAgICAgICAgICAgICAgIGZvciBjIGluIHAuY2hpbGRfbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Nfc3VidHJlZS5pbnNlcnQoaWR4LCBjKQorICAgICAgICAgICAgICAgICAgICBudW1fcmVtb3ZlZCArPSAxCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbnVtX3JlbW92ZWQgKz0gc2VsZi5wcnVuZShwLmNoaWxkX2xpc3QsIHApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG51bV9yZW1vdmVkICs9IHNlbGYucHJ1bmUocC5jaGlsZF9saXN0LCBwKQorICAgICAgICAgICAgaWR4ICs9IDEKKworICAgICAgICByZXR1cm4gbnVtX3JlbW92ZWQKKworICAgIGRlZiBtZXJnZV9sb2dnZXIoc2VsZiwgcHJvY2Vzc19zdWJ0cmVlLCBsb2dnZXJfcHJvYywgbW9uaXRvcmVkX2FwcCwgYXBwX3RyZWUpOgorICAgICAgICAiIiJNZXJnZXMgdGhlIGxvZ2dlcidzIHByb2Nlc3Mgc3VidHJlZS4gIFRoZSBsb2dnZXIgd2lsbCB0eXBpY2FsbHkKKyAgICAgICAgICAgc3Bhd24gbG90cyBvZiBzbGVlcCBhbmQgY2F0IHByb2Nlc3NlcywgdGh1cyBwb2xsdXRpbmcgdGhlCisgICAgICAgICAgIHByb2Nlc3MgdHJlZS4KKworICAgICAgICAiIiIKKyAgICAgICAgbnVtX3JlbW92ZWQgPSAwCisgICAgICAgIGZvciBwIGluIHByb2Nlc3Nfc3VidHJlZToKKyAgICAgICAgICAgIGlzX2FwcF90cmVlID0gYXBwX3RyZWUKKyAgICAgICAgICAgIGlmIGxvZ2dlcl9wcm9jID09IHAuY21kIGFuZCBub3QgYXBwX3RyZWU6CisgICAgICAgICAgICAgICAgaXNfYXBwX3RyZWUgPSBUcnVlCisgICAgICAgICAgICAgICAgbnVtX3JlbW92ZWQgKz0gc2VsZi5tZXJnZV9sb2dnZXIocC5jaGlsZF9saXN0LCBsb2dnZXJfcHJvYywgbW9uaXRvcmVkX2FwcCwgaXNfYXBwX3RyZWUpCisgICAgICAgICAgICAgICAgIyBkb24ndCByZW1vdmUgdGhlIGxvZ2dlciBpdHNlbGYKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBhcHBfdHJlZSBhbmQgbW9uaXRvcmVkX2FwcCAhPSBOb25lIGFuZCBtb25pdG9yZWRfYXBwID09IHAuY21kOgorICAgICAgICAgICAgICAgIGlzX2FwcF90cmVlID0gRmFsc2UKKworICAgICAgICAgICAgaWYgaXNfYXBwX3RyZWU6CisgICAgICAgICAgICAgICAgZm9yIGNoaWxkIGluIHAuY2hpbGRfbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tZXJnZV9wcm9jZXNzZXMocCwgY2hpbGQpCisgICAgICAgICAgICAgICAgICAgIG51bV9yZW1vdmVkICs9IDEKKyAgICAgICAgICAgICAgICBwLmNoaWxkX2xpc3QgPSBbXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBudW1fcmVtb3ZlZCArPSBzZWxmLm1lcmdlX2xvZ2dlcihwLmNoaWxkX2xpc3QsIGxvZ2dlcl9wcm9jLCBtb25pdG9yZWRfYXBwLCBpc19hcHBfdHJlZSkKKyAgICAgICAgcmV0dXJuIG51bV9yZW1vdmVkCisKKyAgICBkZWYgbWVyZ2VfZXhwbG9kZXJzKHNlbGYsIHByb2Nlc3Nfc3VidHJlZSwgcHJvY2Vzc2VzKToKKyAgICAgICAgIiIiTWVyZ2VzIHNwZWNpZmljIHByb2Nlc3Mgc3VidHJlZXMgKHVzZWQgZm9yIHByb2Nlc3NlcyB3aGljaCB1c3VhbGx5CisgICAgICAgICAgIHNwYXduIGh1Z2UgbWVhbmluZ2xlc3MgcHJvY2VzcyB0cmVlcykuCisKKyAgICAgICAgIiIiCisgICAgICAgIG51bV9yZW1vdmVkID0gMAorICAgICAgICBmb3IgcCBpbiBwcm9jZXNzX3N1YnRyZWU6CisgICAgICAgICAgICBpZiBwcm9jZXNzZXMgaW4gcHJvY2Vzc2VzIGFuZCBsZW4ocC5jaGlsZF9saXN0KSA+IDA6CisgICAgICAgICAgICAgICAgc3VidHJlZW1hcCA9IHNlbGYuZ2V0UHJvY2Vzc01hcChwLmNoaWxkX2xpc3QpCisgICAgICAgICAgICAgICAgZm9yIGNoaWxkIGluIHN1YnRyZWVtYXAudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubWVyZ2VfcHJvY2Vzc2VzKHAsIGNoaWxkKQorICAgICAgICAgICAgICAgICAgICBudW1fcmVtb3ZlZCArPSBsZW4oc3VidHJlZW1hcCkKKyAgICAgICAgICAgICAgICAgICAgcC5jaGlsZF9saXN0ID0gW10KKyAgICAgICAgICAgICAgICAgICAgcC5jbWQgKz0gIiAoKykiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG51bV9yZW1vdmVkICs9IHNlbGYubWVyZ2VfZXhwbG9kZXJzKHAuY2hpbGRfbGlzdCwgcHJvY2Vzc2VzKQorICAgICAgICByZXR1cm4gbnVtX3JlbW92ZWQKKworICAgIGRlZiBtZXJnZV9zaWJsaW5ncyhzZWxmLCBwcm9jZXNzX3N1YnRyZWUpOgorICAgICAgICAiIiJNZXJnZXMgdGhyZWFkIHByb2Nlc3Nlcy4gIFNpYmxpbmcgcHJvY2Vzc2VzIHdpdGggdGhlIHNhbWUgY29tbWFuZAorICAgICAgICAgICBsaW5lIGFyZSBtZXJnZWQgdG9nZXRoZXIuCisKKyAgICAgICAgIiIiCisgICAgICAgIG51bV9yZW1vdmVkID0gMAorICAgICAgICBpZHggPSAwCisgICAgICAgIHdoaWxlIGlkeCA8IGxlbihwcm9jZXNzX3N1YnRyZWUpLTE6CisgICAgICAgICAgICBwID0gcHJvY2Vzc19zdWJ0cmVlW2lkeF0KKyAgICAgICAgICAgIG5leHRwID0gcHJvY2Vzc19zdWJ0cmVlW2lkeCsxXQorICAgICAgICAgICAgaWYgbmV4dHAuY21kID09IHAuY21kOgorICAgICAgICAgICAgICAgIHByb2Nlc3Nfc3VidHJlZS5wb3AoaWR4KzEpCisgICAgICAgICAgICAgICAgaWR4IC09IDEKKyAgICAgICAgICAgICAgICBudW1fcmVtb3ZlZCArPSAxCisgICAgICAgICAgICAgICAgcC5jaGlsZF9saXN0LmV4dGVuZChuZXh0cC5jaGlsZF9saXN0KQorICAgICAgICAgICAgICAgIHNlbGYubWVyZ2VfcHJvY2Vzc2VzKHAsIG5leHRwKQorICAgICAgICAgICAgbnVtX3JlbW92ZWQgKz0gc2VsZi5tZXJnZV9zaWJsaW5ncyhwLmNoaWxkX2xpc3QpCisgICAgICAgICAgICBpZHggKz0gMQorICAgICAgICBpZiBsZW4ocHJvY2Vzc19zdWJ0cmVlKSA+IDA6CisgICAgICAgICAgICBwID0gcHJvY2Vzc19zdWJ0cmVlWy0xXQorICAgICAgICAgICAgbnVtX3JlbW92ZWQgKz0gc2VsZi5tZXJnZV9zaWJsaW5ncyhwLmNoaWxkX2xpc3QpCisgICAgICAgIHJldHVybiBudW1fcmVtb3ZlZAorCisgICAgZGVmIG1lcmdlX3J1bnMoc2VsZiwgcHJvY2Vzc19zdWJ0cmVlKToKKyAgICAgICAgIiIiTWVyZ2VzIHByb2Nlc3MgcnVucy4gIFNpbmdsZSBjaGlsZCBwcm9jZXNzZXMgd2hpY2ggc2hhcmUgdGhlIHNhbWUKKyAgICAgICAgICAgY29tbWFuZCBsaW5lIHdpdGggdGhlIHBhcmVudCBhcmUgbWVyZ2VkLgorCisgICAgICAgICIiIgorICAgICAgICBudW1fcmVtb3ZlZCA9IDAKKyAgICAgICAgaWR4ID0gMAorICAgICAgICB3aGlsZSBpZHggPCBsZW4ocHJvY2Vzc19zdWJ0cmVlKToKKyAgICAgICAgICAgIHAgPSBwcm9jZXNzX3N1YnRyZWVbaWR4XQorICAgICAgICAgICAgaWYgbGVuKHAuY2hpbGRfbGlzdCkgPT0gMSBhbmQgcC5jaGlsZF9saXN0WzBdLmNtZCA9PSBwLmNtZDoKKyAgICAgICAgICAgICAgICBjaGlsZCA9IHAuY2hpbGRfbGlzdFswXQorICAgICAgICAgICAgICAgIHAuY2hpbGRfbGlzdCA9IGxpc3QoY2hpbGQuY2hpbGRfbGlzdCkKKyAgICAgICAgICAgICAgICBzZWxmLm1lcmdlX3Byb2Nlc3NlcyhwLCBjaGlsZCkKKyAgICAgICAgICAgICAgICBudW1fcmVtb3ZlZCArPSAxCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG51bV9yZW1vdmVkICs9IHNlbGYubWVyZ2VfcnVucyhwLmNoaWxkX2xpc3QpCisgICAgICAgICAgICBpZHggKz0gMQorICAgICAgICByZXR1cm4gbnVtX3JlbW92ZWQKKworICAgIGRlZiBtZXJnZV9wcm9jZXNzZXMoc2VsZiwgcDEsIHAyKToKKyAgICAgICAgIiIiTWVyZ2VzIHR3byBwcm9jZXNzJyBzYW1wbGVzLiIiIgorICAgICAgICBwMS5zYW1wbGVzLmV4dGVuZChwMi5zYW1wbGVzKQorICAgICAgICBwMS5zYW1wbGVzLnNvcnQoIGtleSA9IGxhbWJkYSBwOiBwLnRpbWUgKQorICAgICAgICBwMXRpbWUgPSBwMS5zdGFydF90aW1lCisgICAgICAgIHAydGltZSA9IHAyLnN0YXJ0X3RpbWUKKyAgICAgICAgcDEuc3RhcnRfdGltZSA9IG1pbihwMXRpbWUsIHAydGltZSkKKyAgICAgICAgcGVuZHRpbWUgPSBtYXgocDF0aW1lICsgcDEuZHVyYXRpb24sIHAydGltZSArIHAyLmR1cmF0aW9uKQorICAgICAgICBwMS5kdXJhdGlvbiA9IHBlbmR0aW1lIC0gcDEuc3RhcnRfdGltZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3NhbXBsZXMucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvc2FtcGxlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTVkNzQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3NhbXBsZXMucHkKQEAgLTAsMCArMSwxNTEgQEAKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5Ym9vdGNoYXJ0Z3VpLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgIGFsb25nIHdpdGggcHlib290Y2hhcnRndWkuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCitjbGFzcyBEaXNrU3RhdFNhbXBsZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGltZSk6CisgICAgICAgIHNlbGYudGltZSA9IHRpbWUKKyAgICAgICAgc2VsZi5kaXNrZGF0YSA9IFswLCAwLCAwXQorICAgIGRlZiBhZGRfZGlza2RhdGEoc2VsZiwgbmV3X2Rpc2tkYXRhKToKKyAgICAgICAgc2VsZi5kaXNrZGF0YSA9IFsgYSArIGIgZm9yIGEsIGIgaW4gemlwKHNlbGYuZGlza2RhdGEsIG5ld19kaXNrZGF0YSkgXQorCitjbGFzcyBDUFVTYW1wbGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWUsIHVzZXIsIHN5cywgaW8gPSAwLjAsIHN3YXAgPSAwLjApOgorICAgICAgICBzZWxmLnRpbWUgPSB0aW1lCisgICAgICAgIHNlbGYudXNlciA9IHVzZXIKKyAgICAgICAgc2VsZi5zeXMgPSBzeXMKKyAgICAgICAgc2VsZi5pbyA9IGlvCisgICAgICAgIHNlbGYuc3dhcCA9IHN3YXAKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjcHUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnVzZXIgKyBzZWxmLnN5cworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzdHIoc2VsZi50aW1lKSArICJcdCIgKyBzdHIoc2VsZi51c2VyKSArICJcdCIgKyBcCisgICAgICAgICAgICAgICBzdHIoc2VsZi5zeXMpICsgIlx0IiArIHN0cihzZWxmLmlvKSArICJcdCIgKyBzdHIgKHNlbGYuc3dhcCkKKworY2xhc3MgTWVtU2FtcGxlOgorICAgIHVzZWRfdmFsdWVzID0gKCdNZW1Ub3RhbCcsICdNZW1GcmVlJywgJ0J1ZmZlcnMnLCAnQ2FjaGVkJywgJ1N3YXBUb3RhbCcsICdTd2FwRnJlZScsKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWUpOgorICAgICAgICBzZWxmLnRpbWUgPSB0aW1lCisgICAgICAgIHNlbGYucmVjb3JkcyA9IHt9CisKKyAgICBkZWYgYWRkX3ZhbHVlKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgaWYgbmFtZSBpbiBNZW1TYW1wbGUudXNlZF92YWx1ZXM6CisgICAgICAgICAgICBzZWxmLnJlY29yZHNbbmFtZV0gPSB2YWx1ZQorCisgICAgZGVmIHZhbGlkKHNlbGYpOgorICAgICAgICBrZXlzID0gc2VsZi5yZWNvcmRzLmtleXMoKQorICAgICAgICAjIGRpc2NhcmQgaW5jb21wbGV0ZSBzYW1wbGVzCisgICAgICAgIHJldHVybiBbdiBmb3IgdiBpbiBNZW1TYW1wbGUudXNlZF92YWx1ZXMgaWYgdiBub3QgaW4ga2V5c10gPT0gW10KKworY2xhc3MgUHJvY2Vzc1NhbXBsZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGltZSwgc3RhdGUsIGNwdV9zYW1wbGUpOgorICAgICAgICBzZWxmLnRpbWUgPSB0aW1lCisgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZQorICAgICAgICBzZWxmLmNwdV9zYW1wbGUgPSBjcHVfc2FtcGxlCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmLnRpbWUpICsgIlx0IiArIHN0cihzZWxmLnN0YXRlKSArICJcdCIgKyBzdHIoc2VsZi5jcHVfc2FtcGxlKQorCitjbGFzcyBQcm9jZXNzU3RhdHM6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlciwgcHJvY2Vzc19tYXAsIHNhbXBsZV9jb3VudCwgc2FtcGxlX3BlcmlvZCwgc3RhcnRfdGltZSwgZW5kX3RpbWUpOgorICAgICAgICBzZWxmLnByb2Nlc3NfbWFwID0gcHJvY2Vzc19tYXAKKyAgICAgICAgc2VsZi5zYW1wbGVfY291bnQgPSBzYW1wbGVfY291bnQKKyAgICAgICAgc2VsZi5zYW1wbGVfcGVyaW9kID0gc2FtcGxlX3BlcmlvZAorICAgICAgICBzZWxmLnN0YXJ0X3RpbWUgPSBzdGFydF90aW1lCisgICAgICAgIHNlbGYuZW5kX3RpbWUgPSBlbmRfdGltZQorICAgICAgICB3cml0ZXIuaW5mbyAoIiVkIHNhbXBsZXMsIGF2Zy4gc2FtcGxlIGxlbmd0aCAlZiIgJSAoc2VsZi5zYW1wbGVfY291bnQsIHNlbGYuc2FtcGxlX3BlcmlvZCkpCisgICAgICAgIHdyaXRlci5pbmZvICgicHJvY2VzcyBsaXN0IHNpemU6ICVkIiAlIGxlbiAoc2VsZi5wcm9jZXNzX21hcC52YWx1ZXMoKSkpCisKK2NsYXNzIFByb2Nlc3M6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlciwgcGlkLCBjbWQsIHBwaWQsIHN0YXJ0X3RpbWUpOgorICAgICAgICBzZWxmLndyaXRlciA9IHdyaXRlcgorICAgICAgICBzZWxmLnBpZCA9IHBpZAorICAgICAgICBzZWxmLmNtZCA9IGNtZAorICAgICAgICBzZWxmLmV4ZSA9IGNtZAorICAgICAgICBzZWxmLmFyZ3MgPSBbXQorICAgICAgICBzZWxmLnBwaWQgPSBwcGlkCisgICAgICAgIHNlbGYuc3RhcnRfdGltZSA9IHN0YXJ0X3RpbWUKKyAgICAgICAgc2VsZi5kdXJhdGlvbiA9IDAKKyAgICAgICAgc2VsZi5zYW1wbGVzID0gW10KKyAgICAgICAgc2VsZi5wYXJlbnQgPSBOb25lCisgICAgICAgIHNlbGYuY2hpbGRfbGlzdCA9IFtdCisKKyAgICAgICAgc2VsZi5hY3RpdmUgPSBOb25lCisgICAgICAgIHNlbGYubGFzdF91c2VyX2NwdV90aW1lID0gTm9uZQorICAgICAgICBzZWxmLmxhc3Rfc3lzX2NwdV90aW1lID0gTm9uZQorCisgICAgICAgIHNlbGYubGFzdF9jcHVfbnMgPSAwCisgICAgICAgIHNlbGYubGFzdF9ibGtpb19kZWxheV9ucyA9IDAKKyAgICAgICAgc2VsZi5sYXN0X3N3YXBpbl9kZWxheV9ucyA9IDAKKworICAgICMgc3BsaXQgdGhpcyBwcm9jZXNzJyBydW4gLSB0cmlnZ2VyZWQgYnkgYSBuYW1lIGNoYW5nZQorICAgIGRlZiBzcGxpdChzZWxmLCB3cml0ZXIsIHBpZCwgY21kLCBwcGlkLCBzdGFydF90aW1lKToKKyAgICAgICAgc3BsaXQgPSBQcm9jZXNzICh3cml0ZXIsIHBpZCwgY21kLCBwcGlkLCBzdGFydF90aW1lKQorCisgICAgICAgIHNwbGl0Lmxhc3RfY3B1X25zID0gc2VsZi5sYXN0X2NwdV9ucworICAgICAgICBzcGxpdC5sYXN0X2Jsa2lvX2RlbGF5X25zID0gc2VsZi5sYXN0X2Jsa2lvX2RlbGF5X25zCisgICAgICAgIHNwbGl0Lmxhc3Rfc3dhcGluX2RlbGF5X25zID0gc2VsZi5sYXN0X3N3YXBpbl9kZWxheV9ucworCisgICAgICAgIHJldHVybiBzcGxpdAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiICIuam9pbihbc3RyKHNlbGYucGlkKSwgc2VsZi5jbWQsIHN0cihzZWxmLnBwaWQpLCAnWyAnICsgc3RyKGxlbihzZWxmLnNhbXBsZXMpKSArICcgc2FtcGxlcyBdJyBdKQorCisgICAgZGVmIGNhbGNfc3RhdHMoc2VsZiwgc2FtcGxlUGVyaW9kKToKKyAgICAgICAgaWYgc2VsZi5zYW1wbGVzOgorICAgICAgICAgICAgZmlyc3RTYW1wbGUgPSBzZWxmLnNhbXBsZXNbMF0KKyAgICAgICAgICAgIGxhc3RTYW1wbGUgPSBzZWxmLnNhbXBsZXNbLTFdCisgICAgICAgICAgICBzZWxmLnN0YXJ0X3RpbWUgPSBtaW4oZmlyc3RTYW1wbGUudGltZSwgc2VsZi5zdGFydF90aW1lKQorICAgICAgICAgICAgc2VsZi5kdXJhdGlvbiA9IGxhc3RTYW1wbGUudGltZSAtIHNlbGYuc3RhcnRfdGltZSArIHNhbXBsZVBlcmlvZAorCisgICAgICAgIGFjdGl2ZUNvdW50ID0gc3VtKCBbMSBmb3Igc2FtcGxlIGluIHNlbGYuc2FtcGxlcyBpZiBzYW1wbGUuY3B1X3NhbXBsZSBhbmQgc2FtcGxlLmNwdV9zYW1wbGUuc3lzICsgc2FtcGxlLmNwdV9zYW1wbGUudXNlciArIHNhbXBsZS5jcHVfc2FtcGxlLmlvID4gMC4wXSApCisgICAgICAgIGFjdGl2ZUNvdW50ID0gYWN0aXZlQ291bnQgKyBzdW0oIFsxIGZvciBzYW1wbGUgaW4gc2VsZi5zYW1wbGVzIGlmIHNhbXBsZS5zdGF0ZSA9PSAnRCddICkKKyAgICAgICAgc2VsZi5hY3RpdmUgPSAoYWN0aXZlQ291bnQ+MikKKworICAgIGRlZiBjYWxjX2xvYWQoc2VsZiwgdXNlckNwdSwgc3lzQ3B1LCBpbnRlcnZhbCk6CisgICAgICAgIHVzZXJDcHVMb2FkID0gZmxvYXQodXNlckNwdSAtIHNlbGYubGFzdF91c2VyX2NwdV90aW1lKSAvIGludGVydmFsCisgICAgICAgIHN5c0NwdUxvYWQgPSBmbG9hdChzeXNDcHUgLSBzZWxmLmxhc3Rfc3lzX2NwdV90aW1lKSAvIGludGVydmFsCisgICAgICAgIGNwdUxvYWQgPSB1c2VyQ3B1TG9hZCArIHN5c0NwdUxvYWQKKyAgICAgICAgIyBub3JtYWxpemUKKyAgICAgICAgaWYgY3B1TG9hZCA+IDEuMDoKKyAgICAgICAgICAgIHVzZXJDcHVMb2FkID0gdXNlckNwdUxvYWQgLyBjcHVMb2FkCisgICAgICAgICAgICBzeXNDcHVMb2FkID0gc3lzQ3B1TG9hZCAvIGNwdUxvYWQKKyAgICAgICAgcmV0dXJuICh1c2VyQ3B1TG9hZCwgc3lzQ3B1TG9hZCkKKworICAgIGRlZiBzZXRfcGFyZW50KHNlbGYsIHByb2Nlc3NNYXApOgorICAgICAgICBpZiBzZWxmLnBwaWQgIT0gTm9uZToKKyAgICAgICAgICAgIHNlbGYucGFyZW50ID0gcHJvY2Vzc01hcC5nZXQgKHNlbGYucHBpZCkKKyAgICAgICAgICAgIGlmIHNlbGYucGFyZW50ID09IE5vbmUgYW5kIHNlbGYucGlkIC8vIDEwMDAgPiAxIGFuZCBcCisgICAgICAgICAgICAgICAgbm90IChzZWxmLnBwaWQgPT0gMjAwMCBvciBzZWxmLnBpZCA9PSAyMDAwKTogIyBrZXJuZWwgdGhyZWFkczogcHBpZD0yCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZXIud2FybigiTWlzc2luZyBDT05GSUdfUFJPQ19FVkVOVFM6IG5vIHBhcmVudCBmb3IgcGlkICclaScgKCclcycpIHdpdGggcHBpZCAnJWknIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLnBpZCxzZWxmLmNtZCxzZWxmLnBwaWQpKQorCisgICAgZGVmIGdldF9lbmRfdGltZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RhcnRfdGltZSArIHNlbGYuZHVyYXRpb24KKworY2xhc3MgRGlza1NhbXBsZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGltZSwgcmVhZCwgd3JpdGUsIHV0aWwpOgorICAgICAgICBzZWxmLnRpbWUgPSB0aW1lCisgICAgICAgIHNlbGYucmVhZCA9IHJlYWQKKyAgICAgICAgc2VsZi53cml0ZSA9IHdyaXRlCisgICAgICAgIHNlbGYudXRpbCA9IHV0aWwKKyAgICAgICAgc2VsZi50cHV0ID0gcmVhZCArIHdyaXRlCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJcdCIuam9pbihbc3RyKHNlbGYudGltZSksIHN0cihzZWxmLnJlYWQpLCBzdHIoc2VsZi53cml0ZSksIHN0cihzZWxmLnV0aWwpXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS90ZXN0cy9wYXJzZXJfdGVzdC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS90ZXN0cy9wYXJzZXJfdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGZiM2JmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3Rlc3RzL3BhcnNlcl90ZXN0LnB5CkBAIC0wLDAgKzEsMTA1IEBACitpbXBvcnQgc3lzLCBvcywgcmUsIHN0cnVjdCwgb3BlcmF0b3IsIG1hdGgKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CitpbXBvcnQgdW5pdHRlc3QKKworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmdldGN3ZCgpKQorCitpbXBvcnQgcHlib290Y2hhcnRndWkucGFyc2luZyBhcyBwYXJzaW5nCitpbXBvcnQgcHlib290Y2hhcnRndWkubWFpbiBhcyBtYWluCisKK2RlYnVnID0gRmFsc2UKKworZGVmIGZsb2F0RXEoZjEsIGYyKToKKwlyZXR1cm4gbWF0aC5mYWJzKGYxLWYyKSA8IDAuMDAwMDEKKworYm9vdGNoYXJ0X2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pLCAnLi4vLi4vZXhhbXBsZXMvMS8nKQorcGFyc2VyID0gbWFpbi5fbWtfb3B0aW9uc19wYXJzZXIoKQorb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1xJywgYm9vdGNoYXJ0X2Rpcl0pCit3cml0ZXIgPSBtYWluLl9ta193cml0ZXIob3B0aW9ucykKKworY2xhc3MgVGVzdEJDUGFyc2VyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAKKwlkZWYgc2V0VXAoc2VsZik6CisJCXNlbGYubmFtZSA9ICJNeSBmaXJzdCB1bml0dGVzdCIKKwkJc2VsZi5yb290ZGlyID0gYm9vdGNoYXJ0X2RpcgorCisJZGVmIG1rX2ZuYW1lKHNlbGYsZik6CisJCXJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5yb290ZGlyLCBmKQorCisJZGVmIHRlc3RQYXJzZUhlYWRlcihzZWxmKToKKwkJdHJhY2UgPSBwYXJzaW5nLlRyYWNlKHdyaXRlciwgYXJncywgb3B0aW9ucykKKwkJc3RhdGUgPSBwYXJzaW5nLnBhcnNlX2ZpbGUod3JpdGVyLCB0cmFjZSwgc2VsZi5ta19mbmFtZSgnaGVhZGVyJykpCisJCXNlbGYuYXNzZXJ0RXF1YWwoNiwgbGVuKHN0YXRlLmhlYWRlcnMpKQorCQlzZWxmLmFzc2VydEVxdWFsKDIsIHBhcnNpbmcuZ2V0X251bV9jcHVzKHN0YXRlLmhlYWRlcnMpKQorCisJZGVmIHRlc3RfcGFyc2VUaW1lZEJsb2NrcyhzZWxmKToKKwkJdHJhY2UgPSBwYXJzaW5nLlRyYWNlKHdyaXRlciwgYXJncywgb3B0aW9ucykKKwkJc3RhdGUgPSBwYXJzaW5nLnBhcnNlX2ZpbGUod3JpdGVyLCB0cmFjZSwgc2VsZi5ta19mbmFtZSgncHJvY19kaXNrc3RhdHMubG9nJykpCisJCXNlbGYuYXNzZXJ0RXF1YWwoMTQxLCBsZW4oc3RhdGUuZGlza19zdGF0cykpCQkKKworCWRlZiB0ZXN0UGFyc2VQcm9jUHNMb2coc2VsZik6CisJCXRyYWNlID0gcGFyc2luZy5UcmFjZSh3cml0ZXIsIGFyZ3MsIG9wdGlvbnMpCisJCXN0YXRlID0gcGFyc2luZy5wYXJzZV9maWxlKHdyaXRlciwgdHJhY2UsIHNlbGYubWtfZm5hbWUoJ3Byb2NfcHMubG9nJykpCisJCXNhbXBsZXMgPSBzdGF0ZS5wc19zdGF0cworCQlwcm9jZXNzZXMgPSBzYW1wbGVzLnByb2Nlc3NfbWFwCisJCXNvcnRlZF9wcm9jZXNzZXMgPSBbcHJvY2Vzc2VzW2tdIGZvciBrIGluIHNvcnRlZChwcm9jZXNzZXMua2V5cygpKV0KKworCQlwc19kYXRhID0gb3BlbihzZWxmLm1rX2ZuYW1lKCdleHRyYWN0Mi5wcm9jX3BzLmxvZycpKQorCQlmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKHBzX2RhdGEpOgorCQkJdG9rZW5zID0gbGluZS5zcGxpdCgpOworCQkJcHJvY2VzcyA9IHNvcnRlZF9wcm9jZXNzZXNbaW5kZXhdCisJCQlpZiBkZWJ1ZzoKKwkJCQlwcmludCh0b2tlbnNbMDo0XSkKKwkJCQlwcmludChwcm9jZXNzLnBpZCAvIDEwMDAsIHByb2Nlc3MuY21kLCBwcm9jZXNzLnBwaWQsIGxlbihwcm9jZXNzLnNhbXBsZXMpKQorCQkJCXByaW50KCctLS0tLS0tLS0tLS0tLS0tLS0tJykKKworCQkJc2VsZi5hc3NlcnRFcXVhbCh0b2tlbnNbMF0sIHN0cihwcm9jZXNzLnBpZCAvLyAxMDAwKSkKKwkJCXNlbGYuYXNzZXJ0RXF1YWwodG9rZW5zWzFdLCBzdHIocHJvY2Vzcy5jbWQpKQorCQkJc2VsZi5hc3NlcnRFcXVhbCh0b2tlbnNbMl0sIHN0cihwcm9jZXNzLnBwaWQgLy8gMTAwMCkpCisJCQlzZWxmLmFzc2VydEVxdWFsKHRva2Vuc1szXSwgc3RyKGxlbihwcm9jZXNzLnNhbXBsZXMpKSkKKwkJcHNfZGF0YS5jbG9zZSgpCisKKwlkZWYgdGVzdHBhcnNlUHJvY0Rpc2tTdGF0TG9nKHNlbGYpOgorCQl0cmFjZSA9IHBhcnNpbmcuVHJhY2Uod3JpdGVyLCBhcmdzLCBvcHRpb25zKQorCQlzdGF0ZV93aXRoX2hlYWRlcnMgPSBwYXJzaW5nLnBhcnNlX2ZpbGUod3JpdGVyLCB0cmFjZSwgc2VsZi5ta19mbmFtZSgnaGVhZGVyJykpCisJCXN0YXRlX3dpdGhfaGVhZGVycy5oZWFkZXJzWydzeXN0ZW0uY3B1J10gPSAneHh4ICgyKScKKwkJc2FtcGxlcyA9IHBhcnNpbmcucGFyc2VfZmlsZSh3cml0ZXIsIHN0YXRlX3dpdGhfaGVhZGVycywgc2VsZi5ta19mbmFtZSgncHJvY19kaXNrc3RhdHMubG9nJykpLmRpc2tfc3RhdHMKKwkJc2VsZi5hc3NlcnRFcXVhbCgxNDEsIGxlbihzYW1wbGVzKSkKKworCQlkaXNrc3RhdHNfZGF0YSA9IG9wZW4oc2VsZi5ta19mbmFtZSgnZXh0cmFjdC5wcm9jX2Rpc2tzdGF0cy5sb2cnKSkKKwkJZm9yIGluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShkaXNrc3RhdHNfZGF0YSk6CisJCQl0b2tlbnMgPSBsaW5lLnNwbGl0KCdcdCcpCisJCQlzYW1wbGUgPSBzYW1wbGVzW2luZGV4XQorCQkJaWYgZGVidWc6CQkKKwkJCQlwcmludChsaW5lLnJzdHJpcCgpKQorCQkJCXByaW50KHNhbXBsZSkKKwkJCQlwcmludCgnLS0tLS0tLS0tLS0tLS0tLS0tLScpCisJCQkKKwkJCXNlbGYuYXNzZXJ0RXF1YWwodG9rZW5zWzBdLCBzdHIoc2FtcGxlLnRpbWUpKQorCQkJc2VsZi5hc3NlcnRfKGZsb2F0RXEoZmxvYXQodG9rZW5zWzFdKSwgc2FtcGxlLnJlYWQpKQorCQkJc2VsZi5hc3NlcnRfKGZsb2F0RXEoZmxvYXQodG9rZW5zWzJdKSwgc2FtcGxlLndyaXRlKSkKKwkJCXNlbGYuYXNzZXJ0XyhmbG9hdEVxKGZsb2F0KHRva2Vuc1szXSksIHNhbXBsZS51dGlsKSkKKwkJZGlza3N0YXRzX2RhdGEuY2xvc2UoKQorCQorCWRlZiB0ZXN0cGFyc2VQcm9jU3RhdExvZyhzZWxmKToKKwkJdHJhY2UgPSBwYXJzaW5nLlRyYWNlKHdyaXRlciwgYXJncywgb3B0aW9ucykKKwkJc2FtcGxlcyA9IHBhcnNpbmcucGFyc2VfZmlsZSh3cml0ZXIsIHRyYWNlLCBzZWxmLm1rX2ZuYW1lKCdwcm9jX3N0YXQubG9nJykpLmNwdV9zdGF0cworCQlzZWxmLmFzc2VydEVxdWFsKDE0MSwgbGVuKHNhbXBsZXMpKQorCisJCXN0YXRfZGF0YSA9IG9wZW4oc2VsZi5ta19mbmFtZSgnZXh0cmFjdC5wcm9jX3N0YXQubG9nJykpCisJCWZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUoc3RhdF9kYXRhKToKKwkJCXRva2VucyA9IGxpbmUuc3BsaXQoJ1x0JykKKwkJCXNhbXBsZSA9IHNhbXBsZXNbaW5kZXhdCisJCQlpZiBkZWJ1ZzoKKwkJCQlwcmludChsaW5lLnJzdHJpcCgpKQorCQkJCXByaW50KHNhbXBsZSkKKwkJCQlwcmludCgnLS0tLS0tLS0tLS0tLS0tLS0tLScpCisJCQlzZWxmLmFzc2VydF8oZmxvYXRFcShmbG9hdCh0b2tlbnNbMF0pLCBzYW1wbGUudGltZSkpCisJCQlzZWxmLmFzc2VydF8oZmxvYXRFcShmbG9hdCh0b2tlbnNbMV0pLCBzYW1wbGUudXNlcikpCisJCQlzZWxmLmFzc2VydF8oZmxvYXRFcShmbG9hdCh0b2tlbnNbMl0pLCBzYW1wbGUuc3lzKSkKKwkJCXNlbGYuYXNzZXJ0XyhmbG9hdEVxKGZsb2F0KHRva2Vuc1szXSksIHNhbXBsZS5pbykpCisJCXN0YXRfZGF0YS5jbG9zZSgpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS90ZXN0cy9wcm9jZXNzX3RyZWVfdGVzdC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS90ZXN0cy9wcm9jZXNzX3RyZWVfdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjQ2YTFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3Rlc3RzL3Byb2Nlc3NfdHJlZV90ZXN0LnB5CkBAIC0wLDAgKzEsOTIgQEAKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CisKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5nZXRjd2QoKSkKKworaW1wb3J0IHB5Ym9vdGNoYXJ0Z3VpLnBhcnNpbmcgYXMgcGFyc2luZworaW1wb3J0IHB5Ym9vdGNoYXJ0Z3VpLnByb2Nlc3NfdHJlZSBhcyBwcm9jZXNzX3RyZWUKK2ltcG9ydCBweWJvb3RjaGFydGd1aS5tYWluIGFzIG1haW4KKworaWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMywgMCk6CisgICAgbG9uZyA9IGludAorCitjbGFzcyBUZXN0UHJvY2Vzc1RyZWUodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSAiUHJvY2VzcyB0cmVlIHVuaXR0ZXN0IgorICAgICAgICBzZWxmLnJvb3RkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSwgJy4uLy4uL2V4YW1wbGVzLzEvJykKKworICAgICAgICBwYXJzZXIgPSBtYWluLl9ta19vcHRpb25zX3BhcnNlcigpCisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhbJy0tcScsIHNlbGYucm9vdGRpcl0pCisgICAgICAgIHdyaXRlciA9IG1haW4uX21rX3dyaXRlcihvcHRpb25zKQorICAgICAgICB0cmFjZSA9IHBhcnNpbmcuVHJhY2Uod3JpdGVyLCBhcmdzLCBvcHRpb25zKQorCisgICAgICAgIHBhcnNpbmcucGFyc2VfZmlsZSh3cml0ZXIsIHRyYWNlLCBzZWxmLm1rX2ZuYW1lKCdwcm9jX3BzLmxvZycpKQorICAgICAgICB0cmFjZS5jb21waWxlKHdyaXRlcikKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZSA9IHByb2Nlc3NfdHJlZS5Qcm9jZXNzVHJlZSh3cml0ZXIsIE5vbmUsIHRyYWNlLnBzX3N0YXRzLCBcCisgICAgICAgICAgICB0cmFjZS5wc19zdGF0cy5zYW1wbGVfcGVyaW9kLCBOb25lLCBvcHRpb25zLnBydW5lLCBOb25lLCBOb25lLCBGYWxzZSwgZm9yX3Rlc3RpbmcgPSBUcnVlKQorCisgICAgZGVmIG1rX2ZuYW1lKHNlbGYsZik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5yb290ZGlyLCBmKQorCisgICAgZGVmIGZsYXR0ZW4oc2VsZiwgcHJvY2Vzc190cmVlKToKKyAgICAgICAgZmxhdHRlbmVkID0gW10KKyAgICAgICAgZm9yIHAgaW4gcHJvY2Vzc190cmVlOgorICAgICAgICAgICAgZmxhdHRlbmVkLmFwcGVuZChwKQorICAgICAgICAgICAgZmxhdHRlbmVkLmV4dGVuZChzZWxmLmZsYXR0ZW4ocC5jaGlsZF9saXN0KSkKKyAgICAgICAgcmV0dXJuIGZsYXR0ZW5lZAorCisgICAgZGVmIGNoZWNrQWdhaW5zdEphdmFFeHRyYWN0KHNlbGYsIGZpbGVuYW1lLCBwcm9jZXNzX3RyZWUpOgorICAgICAgICB0ZXN0X2RhdGEgPSBvcGVuKGZpbGVuYW1lKQorICAgICAgICBmb3IgZXhwZWN0ZWQsIGFjdHVhbCBpbiB6aXAodGVzdF9kYXRhLCBzZWxmLmZsYXR0ZW4ocHJvY2Vzc190cmVlKSk6CisgICAgICAgICAgICB0b2tlbnMgPSBleHBlY3RlZC5zcGxpdCgnXHQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQodG9rZW5zWzBdKSwgYWN0dWFsLnBpZCAvLyAxMDAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0b2tlbnNbMV0sIGFjdHVhbC5jbWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcodG9rZW5zWzJdKSwgMTAgKiBhY3R1YWwuc3RhcnRfdGltZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhsb25nKHRva2Vuc1szXSkgLSAxMCAqIGFjdHVhbC5kdXJhdGlvbiA8IDUsICJkdXJhdGlvbiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCh0b2tlbnNbNF0pLCBsZW4oYWN0dWFsLmNoaWxkX2xpc3QpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQodG9rZW5zWzVdKSwgbGVuKGFjdHVhbC5zYW1wbGVzKSkKKyAgICAgICAgdGVzdF9kYXRhLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0QnVpbGQoc2VsZik6CisgICAgICAgIHByb2Nlc3NfdHJlZSA9IHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlCisgICAgICAgIHNlbGYuY2hlY2tBZ2FpbnN0SmF2YUV4dHJhY3Qoc2VsZi5ta19mbmFtZSgnZXh0cmFjdC5wcm9jZXNzdHJlZS4xLmxvZycpLCBwcm9jZXNzX3RyZWUpCisKKyAgICBkZWYgdGVzdE1lcmdlTG9nZ2VyKHNlbGYpOgorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlLm1lcmdlX2xvZ2dlcihzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZSwgJ2Jvb3RjaGFydGQnLCBOb25lLCBGYWxzZSkKKyAgICAgICAgcHJvY2Vzc190cmVlID0gc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUKKyAgICAgICAgc2VsZi5jaGVja0FnYWluc3RKYXZhRXh0cmFjdChzZWxmLm1rX2ZuYW1lKCdleHRyYWN0LnByb2Nlc3N0cmVlLjIubG9nJyksIHByb2Nlc3NfdHJlZSkKKworICAgIGRlZiB0ZXN0UHJ1bmUoc2VsZik6CisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUubWVyZ2VfbG9nZ2VyKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlLCAnYm9vdGNoYXJ0ZCcsIE5vbmUsIEZhbHNlKQorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlLnBydW5lKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlLCBOb25lKQorICAgICAgICBwcm9jZXNzX3RyZWUgPSBzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZQorICAgICAgICBzZWxmLmNoZWNrQWdhaW5zdEphdmFFeHRyYWN0KHNlbGYubWtfZm5hbWUoJ2V4dHJhY3QucHJvY2Vzc3RyZWUuM2IubG9nJyksIHByb2Nlc3NfdHJlZSkKKworICAgIGRlZiB0ZXN0TWVyZ2VFeHBsb2RlcnMoc2VsZik6CisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUubWVyZ2VfbG9nZ2VyKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlLCAnYm9vdGNoYXJ0ZCcsIE5vbmUsIEZhbHNlKQorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlLnBydW5lKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlLCBOb25lKQorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlLm1lcmdlX2V4cGxvZGVycyhzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZSwgc2V0KFsnaHd1cCddKSkKKyAgICAgICAgcHJvY2Vzc190cmVlID0gc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUKKyAgICAgICAgc2VsZi5jaGVja0FnYWluc3RKYXZhRXh0cmFjdChzZWxmLm1rX2ZuYW1lKCdleHRyYWN0LnByb2Nlc3N0cmVlLjNjLmxvZycpLCBwcm9jZXNzX3RyZWUpCisKKyAgICBkZWYgdGVzdE1lcmdlU2libGluZ3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUubWVyZ2VfbG9nZ2VyKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlLCAnYm9vdGNoYXJ0ZCcsIE5vbmUsIEZhbHNlKQorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlLnBydW5lKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlLCBOb25lKQorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlLm1lcmdlX2V4cGxvZGVycyhzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZSwgc2V0KFsnaHd1cCddKSkKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5tZXJnZV9zaWJsaW5ncyhzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZSkKKyAgICAgICAgcHJvY2Vzc190cmVlID0gc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUKKyAgICAgICAgc2VsZi5jaGVja0FnYWluc3RKYXZhRXh0cmFjdChzZWxmLm1rX2ZuYW1lKCdleHRyYWN0LnByb2Nlc3N0cmVlLjNkLmxvZycpLCBwcm9jZXNzX3RyZWUpCisKKyAgICBkZWYgdGVzdE1lcmdlUnVucyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5tZXJnZV9sb2dnZXIoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsICdib290Y2hhcnRkJywgTm9uZSwgRmFsc2UpCisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUucHJ1bmUoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsIE5vbmUpCisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUubWVyZ2VfZXhwbG9kZXJzKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlLCBzZXQoWydod3VwJ10pKQorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlLm1lcmdlX3NpYmxpbmdzKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlKQorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlLm1lcmdlX3J1bnMoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUpCisgICAgICAgIHByb2Nlc3NfdHJlZSA9IHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlCisgICAgICAgIHNlbGYuY2hlY2tBZ2FpbnN0SmF2YUV4dHJhY3Qoc2VsZi5ta19mbmFtZSgnZXh0cmFjdC5wcm9jZXNzdHJlZS4zZS5sb2cnKSwgcHJvY2Vzc190cmVlKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3B5dGhvbmRlcHMgYi95b2N0by1wb2t5L3NjcmlwdHMvcHl0aG9uZGVwcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZjkyZTc0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5dGhvbmRlcHMKQEAgLTAsMCArMSwyNTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBEZXRlcm1pbmUgZGVwZW5kZW5jaWVzIG9mIHB5dGhvbiBzY3JpcHRzIG9yIGF2YWlsYWJsZSBweXRob24gbW9kdWxlcyBpbiBhIHNlYXJjaCBwYXRoLgorIworIyBHaXZlbiB0aGUgLWQgYXJndW1lbnQgYW5kIGEgZmlsZW5hbWUvZmlsZW5hbWVzLCByZXR1cm5zIHRoZSBtb2R1bGVzIGltcG9ydGVkIGJ5IHRob3NlIGZpbGVzLgorIyBHaXZlbiB0aGUgLWQgYXJndW1lbnQgYW5kIGEgZGlyZWN0b3J5L2RpcmVjdG9yaWVzLCByZWN1cnNlcyB0byBmaW5kIGFsbAorIyBweXRob24gcGFja2FnZXMgYW5kIG1vZHVsZXMsIHJldHVybnMgdGhlIG1vZHVsZXMgaW1wb3J0ZWQgYnkgdGhlc2UuCisjIEdpdmVuIHRoZSAtcCBhcmd1bWVudCBhbmQgYSBwYXRoIG9yIHBhdGhzLCBzY2FucyB0aGF0IHBhdGggZm9yIGF2YWlsYWJsZSBweXRob24gbW9kdWxlcy9wYWNrYWdlcy4KKworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgYXN0CitpbXBvcnQgaW1wCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzeXMKKworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigncHl0aG9uZGVwcycpCisKK3N1ZmZpeGVzID0gW10KK2ZvciB0cmlwbGUgaW4gaW1wLmdldF9zdWZmaXhlcygpOgorICAgIHN1ZmZpeGVzLmFwcGVuZCh0cmlwbGVbMF0pCisKKworY2xhc3MgUHl0aG9uRGVwRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgRGVwZW5kRXJyb3IoUHl0aG9uRGVwRXJyb3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoLCBlcnJvcik6CisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5lcnJvciA9IGVycm9yCisgICAgICAgIFB5dGhvbkRlcEVycm9yLl9faW5pdF9fKHNlbGYsIGVycm9yKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiRmFpbHVyZSBkZXRlcm1pbmluZyBkZXBlbmRlbmNpZXMgb2Yge306IHt9Ii5mb3JtYXQoc2VsZi5wYXRoLCBzZWxmLmVycm9yKQorCisKK2NsYXNzIEltcG9ydFZpc2l0b3IoYXN0Lk5vZGVWaXNpdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuaW1wb3J0cyA9IHNldCgpCisgICAgICAgIHNlbGYuaW1wb3J0c2Zyb20gPSBbXQorCisgICAgZGVmIHZpc2l0X0ltcG9ydChzZWxmLCBub2RlKToKKyAgICAgICAgZm9yIGFsaWFzIGluIG5vZGUubmFtZXM6CisgICAgICAgICAgICBzZWxmLmltcG9ydHMuYWRkKGFsaWFzLm5hbWUpCisKKyAgICBkZWYgdmlzaXRfSW1wb3J0RnJvbShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5pbXBvcnRzZnJvbS5hcHBlbmQoKG5vZGUubW9kdWxlLCBbYS5uYW1lIGZvciBhIGluIG5vZGUubmFtZXNdLCBub2RlLmxldmVsKSkKKworCitkZWYgd2Fsa191cChwYXRoKToKKyAgICB3aGlsZSBwYXRoOgorICAgICAgICB5aWVsZCBwYXRoCisgICAgICAgIHBhdGgsIF8sIF8gPSBwYXRoLnJwYXJ0aXRpb24ob3Muc2VwKQorCisKK2RlZiBnZXRfcHJvdmlkZXMocGF0aCk6CisgICAgcGF0aCA9IG9zLnBhdGgucmVhbHBhdGgocGF0aCkKKworICAgIGRlZiBnZXRfZm5fbmFtZShmbik6CisgICAgICAgIGZvciBzdWZmaXggaW4gc3VmZml4ZXM6CisgICAgICAgICAgICBpZiBmbi5lbmRzd2l0aChzdWZmaXgpOgorICAgICAgICAgICAgICAgIHJldHVybiBmbls6LWxlbihzdWZmaXgpXQorCisgICAgaXNkaXIgPSBvcy5wYXRoLmlzZGlyKHBhdGgpCisgICAgaWYgaXNkaXI6CisgICAgICAgIHBrZ19wYXRoID0gcGF0aAorICAgICAgICB3YWxrX3BhdGggPSBwYXRoCisgICAgZWxzZToKKyAgICAgICAgcGtnX3BhdGggPSBnZXRfZm5fbmFtZShwYXRoKQorICAgICAgICBpZiBwa2dfcGF0aCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHdhbGtfcGF0aCA9IG9zLnBhdGguZGlybmFtZShwYXRoKQorCisgICAgZm9yIGN1cnBhdGggaW4gd2Fsa191cCh3YWxrX3BhdGgpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGN1cnBhdGgsICdfX2luaXRfXy5weScpKToKKyAgICAgICAgICAgIGxpYmRpciA9IGN1cnBhdGgKKyAgICAgICAgICAgIGJyZWFrCisgICAgZWxzZToKKyAgICAgICAgbGliZGlyID0gJycKKworICAgIHBhY2thZ2VfcmVscGF0aCA9IHBrZ19wYXRoW2xlbihsaWJkaXIpKzE6XQorICAgIHBhY2thZ2UgPSAnLicuam9pbihwYWNrYWdlX3JlbHBhdGguc3BsaXQob3Muc2VwKSkKKyAgICBpZiBub3QgaXNkaXI6CisgICAgICAgIHlpZWxkIHBhY2thZ2UsIHBhdGgKKyAgICBlbHNlOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGF0aCwgJ19faW5pdF9fLnB5JykpOgorICAgICAgICAgICAgeWllbGQgcGFja2FnZSwgcGF0aAorCisgICAgICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsocGF0aCk6CisgICAgICAgICAgICByZWxwYXRoID0gZGlycGF0aFtsZW4ocGF0aCkrMTpdCisgICAgICAgICAgICBpZiByZWxwYXRoOgorICAgICAgICAgICAgICAgIGlmICdfX2luaXRfXy5weScgbm90IGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgZGlybmFtZXNbOl0gPSBbXQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSAnLicuam9pbihyZWxwYXRoLnNwbGl0KG9zLnNlcCkpCisgICAgICAgICAgICAgICAgICAgIGlmIHBhY2thZ2U6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gcGFja2FnZSArICcuJyArIGNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgY29udGV4dCwgZGlycGF0aAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gcGFja2FnZQorCisgICAgICAgICAgICBmb3IgZm4gaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgIGFkanVzdGVkX2ZuID0gZ2V0X2ZuX25hbWUoZm4pCisgICAgICAgICAgICAgICAgaWYgbm90IGFkanVzdGVkX2ZuIG9yIGFkanVzdGVkX2ZuID09ICdfX2luaXRfXyc6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBmdWxsZm4gPSBvcy5wYXRoLmpvaW4oZGlycGF0aCwgZm4pCisgICAgICAgICAgICAgICAgaWYgY29udGV4dDoKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgY29udGV4dCArICcuJyArIGFkanVzdGVkX2ZuLCBmdWxsZm4KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBhZGp1c3RlZF9mbiwgZnVsbGZuCisKKworZGVmIGdldF9jb2RlX2RlcGVuZHMoY29kZV9zdHJpbmcsIHBhdGg9Tm9uZSwgcHJvdmlkZT1Ob25lLCBpc3BrZz1GYWxzZSk6CisgICAgdHJ5OgorICAgICAgICBjb2RlID0gYXN0LnBhcnNlKGNvZGVfc3RyaW5nLCBwYXRoKQorICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZXhjOgorICAgICAgICByYWlzZSBEZXBlbmRFcnJvcihwYXRoLCBleGMpCisgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGV4YzoKKyAgICAgICAgcmFpc2UgRGVwZW5kRXJyb3IocGF0aCwgZXhjKQorCisgICAgdmlzaXRvciA9IEltcG9ydFZpc2l0b3IoKQorICAgIHZpc2l0b3IudmlzaXQoY29kZSkKKyAgICBmb3IgYnVpbHRpbl9tb2R1bGUgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgorICAgICAgICBpZiBidWlsdGluX21vZHVsZSBpbiB2aXNpdG9yLmltcG9ydHM6CisgICAgICAgICAgICB2aXNpdG9yLmltcG9ydHMucmVtb3ZlKGJ1aWx0aW5fbW9kdWxlKQorCisgICAgaWYgcHJvdmlkZToKKyAgICAgICAgcHJvdmlkZV9lbGVtZW50cyA9IHByb3ZpZGUuc3BsaXQoJy4nKQorICAgICAgICBpZiBpc3BrZzoKKyAgICAgICAgICAgIHByb3ZpZGVfZWxlbWVudHMuYXBwZW5kKCJfX3NlbGZfXyIpCisgICAgICAgIGNvbnRleHQgPSAnLicuam9pbihwcm92aWRlX2VsZW1lbnRzWzotMV0pCisgICAgICAgIHBhY2thZ2VfcGF0aCA9IG9zLnBhdGguZGlybmFtZShwYXRoKQorICAgIGVsc2U6CisgICAgICAgIGNvbnRleHQgPSBOb25lCisgICAgICAgIHBhY2thZ2VfcGF0aCA9IE5vbmUKKworICAgIGxldmVsemVyb19pbXBvcnRzZnJvbSA9IChtb2R1bGUgZm9yIG1vZHVsZSwgbmFtZXMsIGxldmVsIGluIHZpc2l0b3IuaW1wb3J0c2Zyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGV2ZWwgPT0gMCkKKyAgICBmb3IgbW9kdWxlIGluIHZpc2l0b3IuaW1wb3J0cyB8IHNldChsZXZlbHplcm9faW1wb3J0c2Zyb20pOgorICAgICAgICBpZiBjb250ZXh0IGFuZCBwYXRoOgorICAgICAgICAgICAgbW9kdWxlX2Jhc2VwYXRoID0gb3MucGF0aC5qb2luKHBhY2thZ2VfcGF0aCwgbW9kdWxlLnJlcGxhY2UoJy4nLCAnLycpKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobW9kdWxlX2Jhc2VwYXRoKToKKyAgICAgICAgICAgICAgICAjIEltcGxpY2l0IHJlbGF0aXZlIGltcG9ydAorICAgICAgICAgICAgICAgIHlpZWxkIGNvbnRleHQgKyAnLicgKyBtb2R1bGUsIHBhdGgKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmb3Igc3VmZml4IGluIHN1ZmZpeGVzOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG1vZHVsZV9iYXNlcGF0aCArIHN1ZmZpeCk6CisgICAgICAgICAgICAgICAgICAgICMgSW1wbGljaXQgcmVsYXRpdmUgaW1wb3J0CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGNvbnRleHQgKyAnLicgKyBtb2R1bGUsIHBhdGgKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgeWllbGQgbW9kdWxlLCBwYXRoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB5aWVsZCBtb2R1bGUsIHBhdGgKKworICAgIGZvciBtb2R1bGUsIG5hbWVzLCBsZXZlbCBpbiB2aXNpdG9yLmltcG9ydHNmcm9tOgorICAgICAgICBpZiBsZXZlbCA9PSAwOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxpZiBub3QgcHJvdmlkZToKKyAgICAgICAgICAgIHJhaXNlIERlcGVuZEVycm9yKCJFcnJvcjogSW1wb3J0RnJvbSBub24temVybyBsZXZlbCBvdXRzaWRlIG9mIGEgcGFja2FnZTogezB9Ii5mb3JtYXQoKG1vZHVsZSwgbmFtZXMsIGxldmVsKSksIHBhdGgpCisgICAgICAgIGVsaWYgbGV2ZWwgPiBsZW4ocHJvdmlkZV9lbGVtZW50cyk6CisgICAgICAgICAgICByYWlzZSBEZXBlbmRFcnJvcigiRXJyb3I6IEltcG9ydEZyb20gbGV2ZWwgZXhjZWVkcyBwYWNrYWdlIGRlcHRoOiB7MH0iLmZvcm1hdCgobW9kdWxlLCBuYW1lcywgbGV2ZWwpKSwgcGF0aCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbnRleHQgPSAnLicuam9pbihwcm92aWRlX2VsZW1lbnRzWzotbGV2ZWxdKQorICAgICAgICAgICAgaWYgbW9kdWxlOgorICAgICAgICAgICAgICAgIGlmIGNvbnRleHQ6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGNvbnRleHQgKyAnLicgKyBtb2R1bGUsIHBhdGgKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBtb2R1bGUsIHBhdGgKKworCitkZWYgZ2V0X2ZpbGVfZGVwZW5kcyhwYXRoKToKKyAgICB0cnk6CisgICAgICAgIGNvZGVfc3RyaW5nID0gb3BlbihwYXRoLCAncicpLnJlYWQoKQorICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJvcikgYXMgZXhjOgorICAgICAgICByYWlzZSBEZXBlbmRFcnJvcihwYXRoLCBleGMpCisKKyAgICByZXR1cm4gZ2V0X2NvZGVfZGVwZW5kcyhjb2RlX3N0cmluZywgcGF0aCkKKworCitkZWYgZ2V0X2RlcGVuZHNfcmVjdXJzaXZlKGRpcmVjdG9yeSk6CisgICAgZGlyZWN0b3J5ID0gb3MucGF0aC5yZWFscGF0aChkaXJlY3RvcnkpCisKKyAgICBwcm92aWRlcyA9IGRpY3QoKHYsIGspIGZvciBrLCB2IGluIGdldF9wcm92aWRlcyhkaXJlY3RvcnkpKQorICAgIGZvciBmaWxlbmFtZSwgcHJvdmlkZSBpbiBwcm92aWRlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmaWxlbmFtZSk6CisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihmaWxlbmFtZSwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgICAgIGlzcGtnID0gVHJ1ZQorICAgICAgICBlbGlmIG5vdCBmaWxlbmFtZS5lbmRzd2l0aCgnLnB5Jyk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaXNwa2cgPSBGYWxzZQorCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc291cmNlID0gZi5yZWFkKCkKKworICAgICAgICBkZXBlbmRzID0gZ2V0X2NvZGVfZGVwZW5kcyhzb3VyY2UsIGZpbGVuYW1lLCBwcm92aWRlLCBpc3BrZykKKyAgICAgICAgZm9yIGRlcGVuZCwgYnkgaW4gZGVwZW5kczoKKyAgICAgICAgICAgIHlpZWxkIGRlcGVuZCwgYnkKKworCitkZWYgZ2V0X2RlcGVuZHMocGF0aCk6CisgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgcmV0dXJuIGdldF9kZXBlbmRzX3JlY3Vyc2l2ZShwYXRoKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBnZXRfZmlsZV9kZXBlbmRzKHBhdGgpCisKKworZGVmIG1haW4oKToKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKCkKKworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdEZXRlcm1pbmUgZGVwZW5kZW5jaWVzIGFuZCBwcm92aWRlZCBwYWNrYWdlcyBmb3IgcHl0aG9uIHNjcmlwdHMvbW9kdWxlcycpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncGF0aCcsIG5hcmdzPScrJywgaGVscD0nZnVsbCBwYXRoIHRvIGNvbnRlbnQgdG8gYmUgcHJvY2Vzc2VkJykKKyAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1wJywgJy0tcHJvdmlkZXMnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdnaXZlbiBhIHBhdGgsIGRpc3BsYXkgdGhlIHByb3ZpZGVkIHB5dGhvbiBtb2R1bGVzJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1kJywgJy0tZGVwZW5kcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2dpdmVuIGEgZmlsZW5hbWUsIGRpc3BsYXkgdGhlIGltcG9ydGVkIHB5dGhvbiBtb2R1bGVzJykKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgaWYgYXJncy5wcm92aWRlczoKKyAgICAgICAgbW9kdWxlcyA9IHNldCgpCisgICAgICAgIGZvciBwYXRoIGluIGFyZ3MucGF0aDoKKyAgICAgICAgICAgIGZvciBwcm92aWRlLCBmbiBpbiBnZXRfcHJvdmlkZXMocGF0aCk6CisgICAgICAgICAgICAgICAgbW9kdWxlcy5hZGQocHJvdmlkZSkKKworICAgICAgICBmb3IgbW9kdWxlIGluIHNvcnRlZChtb2R1bGVzKToKKyAgICAgICAgICAgIHByaW50KG1vZHVsZSkKKyAgICBlbGlmIGFyZ3MuZGVwZW5kczoKKyAgICAgICAgZm9yIHBhdGggaW4gYXJncy5wYXRoOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZXMgPSBnZXRfZGVwZW5kcyhwYXRoKQorICAgICAgICAgICAgZXhjZXB0IFB5dGhvbkRlcEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGV4YykpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICAgICAgZm9yIG1vZHVsZSwgaW1wX2J5IGluIG1vZHVsZXM6CisgICAgICAgICAgICAgICAgcHJpbnQoInt9XHR7fSIuZm9ybWF0KG1vZHVsZSwgaW1wX2J5KSkKKyAgICBlbHNlOgorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDIpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9yZWNpcGV0b29sIGIveW9jdG8tcG9reS9zY3JpcHRzL3JlY2lwZXRvb2wKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODdmYjM1ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9yZWNpcGV0b29sCkBAIC0wLDAgKzEsMTE0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBSZWNpcGUgY3JlYXRpb24gdG9vbAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgZ2xvYgoraW1wb3J0IGxvZ2dpbmcKKworc2NyaXB0c19wYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQorbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKK3N5cy5wYXRoID0gc3lzLnBhdGggKyBbbGliX3BhdGhdCitpbXBvcnQgc2NyaXB0dXRpbHMKK2xvZ2dlciA9IHNjcmlwdHV0aWxzLmxvZ2dlcl9jcmVhdGUoJ3JlY2lwZXRvb2wnKQorCitwbHVnaW5zID0gW10KKworZGVmIHRpbmZvaWxfaW5pdChwYXJzZXJlY2lwZXMpOgorICAgIGltcG9ydCBiYi50aW5mb2lsCisgICAgaW1wb3J0IGxvZ2dpbmcKKyAgICB0aW5mb2lsID0gYmIudGluZm9pbC5UaW5mb2lsKCkKKyAgICB0aW5mb2lsLnByZXBhcmUobm90IHBhcnNlcmVjaXBlcykKKyAgICB0aW5mb2lsLmxvZ2dlci5zZXRMZXZlbChsb2dnZXIuZ2V0RWZmZWN0aXZlTGV2ZWwoKSkKKyAgICByZXR1cm4gdGluZm9pbAorCitkZWYgbWFpbigpOgorCisgICAgaWYgbm90IG9zLmVudmlyb24uZ2V0KCdCVUlMRERJUicsICcnKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJUaGlzIHNjcmlwdCBjYW4gb25seSBiZSBydW4gYWZ0ZXIgaW5pdGlhbGlzaW5nIHRoZSBidWlsZCBlbnZpcm9ubWVudCAoZS5nLiBieSB1c2luZyBvZS1pbml0LWJ1aWxkLWVudikiKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249Ik9wZW5FbWJlZGRlZCByZWNpcGUgdG9vbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2hlbHA9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBpbG9nPSJVc2UgJShwcm9nKXMgPHN1YmNvbW1hbmQ+IC0taGVscCB0byBnZXQgaGVscCBvbiBhIHNwZWNpZmljIGNvbW1hbmQiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1kJywgJy0tZGVidWcnLCBoZWxwPSdFbmFibGUgZGVidWcgb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgaGVscD0nUHJpbnQgb25seSBlcnJvcnMnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY29sb3InLCBjaG9pY2VzPVsnYXV0bycsICdhbHdheXMnLCAnbmV2ZXInXSwgZGVmYXVsdD0nYXV0bycsIGhlbHA9J0NvbG9yaXplIG91dHB1dCAod2hlcmUgJShtZXRhdmFyKXMgaXMgJShjaG9pY2VzKXMpJywgbWV0YXZhcj0nQ09MT1InKQorCisgICAgZ2xvYmFsX2FyZ3MsIHVucGFyc2VkX2FyZ3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncygpCisKKyAgICAjIEhlbHAgaXMgYWRkZWQgaGVyZSByYXRoZXIgdGhhbiB2aWEgYWRkX2hlbHA9VHJ1ZSwgYXMgd2UgZG9uJ3Qgd2FudCBpdCB0bworICAgICMgYmUgaGFuZGxlZCBieSBwYXJzZV9rbm93bl9hcmdzKCkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctaCcsICctLWhlbHAnLCBhY3Rpb249J2hlbHAnLCBkZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdCcpCisgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2Vycyh0aXRsZT0nc3ViY29tbWFuZHMnLCBtZXRhdmFyPSc8c3ViY29tbWFuZD4nKQorCisgICAgaWYgZ2xvYmFsX2FyZ3MuZGVidWc6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorICAgIGVsaWYgZ2xvYmFsX2FyZ3MucXVpZXQ6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkVSUk9SKQorCisgICAgaW1wb3J0IHNjcmlwdHBhdGgKKyAgICBiaXRiYWtlcGF0aCA9IHNjcmlwdHBhdGguYWRkX2JpdGJha2VfbGliX3BhdGgoKQorICAgIGlmIG5vdCBiaXRiYWtlcGF0aDoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZmluZCBiaXRiYWtlIGJ5IHNlYXJjaGluZyBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoaXMgc2NyaXB0IG9yIFBBVEgiKQorICAgICAgICBzeXMuZXhpdCgxKQorICAgIGxvZ2dlci5kZWJ1ZygnRm91bmQgYml0YmFrZSBwYXRoOiAlcycgJSBiaXRiYWtlcGF0aCkKKworICAgIHNjcmlwdHV0aWxzLmxvZ2dlcl9zZXR1cF9jb2xvcihsb2dnZXIsIGdsb2JhbF9hcmdzLmNvbG9yKQorCisgICAgdGluZm9pbCA9IHRpbmZvaWxfaW5pdChGYWxzZSkKKyAgICBmb3IgcGF0aCBpbiAoW3NjcmlwdHNfcGF0aF0gKworICAgICAgICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignQkJQQVRIJywgVHJ1ZSkuc3BsaXQoJzonKSk6CisgICAgICAgIHBsdWdpbnBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aCwgJ2xpYicsICdyZWNpcGV0b29sJykKKyAgICAgICAgc2NyaXB0dXRpbHMubG9hZF9wbHVnaW5zKGxvZ2dlciwgcGx1Z2lucywgcGx1Z2lucGF0aCkKKworICAgIHJlZ2lzdGVyZWQgPSBGYWxzZQorICAgIGZvciBwbHVnaW4gaW4gcGx1Z2luczoKKyAgICAgICAgaWYgaGFzYXR0cihwbHVnaW4sICdyZWdpc3Rlcl9jb21tYW5kJyk6CisgICAgICAgICAgICByZWdpc3RlcmVkID0gVHJ1ZQorICAgICAgICAgICAgcGx1Z2luLnJlZ2lzdGVyX2NvbW1hbmQoc3VicGFyc2VycykKKyAgICAgICAgaWYgaGFzYXR0cihwbHVnaW4sICd0aW5mb2lsX2luaXQnKToKKyAgICAgICAgICAgIHBsdWdpbi50aW5mb2lsX2luaXQodGluZm9pbCkKKworICAgIGlmIG5vdCByZWdpc3RlcmVkOgorICAgICAgICBsb2dnZXIuZXJyb3IoIk5vIGNvbW1hbmRzIHJlZ2lzdGVyZWQgLSBtaXNzaW5nIHBsdWdpbnM/IikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyh1bnBhcnNlZF9hcmdzLCBuYW1lc3BhY2U9Z2xvYmFsX2FyZ3MpCisKKyAgICB0cnk6CisgICAgICAgIGlmIGdldGF0dHIoYXJncywgJ3BhcnNlcmVjaXBlcycsIEZhbHNlKToKKyAgICAgICAgICAgIHRpbmZvaWwucGFyc2VSZWNpcGVzKCkKKyAgICAgICAgcmV0ID0gYXJncy5mdW5jKGFyZ3MpCisgICAgZXhjZXB0IGJiLkJCSGFuZGxlZEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorCisgICAgcmV0dXJuIHJldAorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Yyg1KQorICAgIHN5cy5leGl0KHJldCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9yZWxvY2F0ZV9zZGsucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvcmVsb2NhdGVfc2RrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk5MmRiNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcmVsb2NhdGVfc2RrLnB5CkBAIC0wLDAgKzEsMjU0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgc2NyaXB0IGlzIGNhbGxlZCBieSB0aGUgU0RLIGluc3RhbGxlciBzY3JpcHQuIEl0IHJlcGxhY2VzIHRoZSBkeW5hbWljCisjIGxvYWRlciBwYXRoIGluIGFsbCBiaW5hcmllcyBhbmQgYWxzbyBmaXhlcyB0aGUgU1lTRElSIHBhdGhzL2xlbmd0aHMgYW5kIHRoZQorIyBsb2NhdGlvbiBvZiBsZC5zby5jYWNoZSBpbiB0aGUgZHluYW1pYyBsb2FkZXIgYmluYXJ5CisjCisjIEFVVEhPUlMKKyMgTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorIworCitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCitpbXBvcnQgc3RhdAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBlcnJubworCitpZiBzeXMudmVyc2lvbiA8ICczJzoKKyAgICBkZWYgYih4KToKKyAgICAgICAgcmV0dXJuIHgKK2Vsc2U6CisgICAgZGVmIGIoeCk6CisgICAgICAgIHJldHVybiB4LmVuY29kZShzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkpCisKK29sZF9wcmVmaXggPSByZS5jb21waWxlKGIoIiMjREVGQVVMVF9JTlNUQUxMX0RJUiMjIikpCisKK2RlZiBnZXRfYXJjaCgpOgorICAgIGYuc2VlaygwKQorICAgIGVfaWRlbnQgPWYucmVhZCgxNikKKyAgICBlaV9tYWcwLGVpX21hZzFfMyxlaV9jbGFzcyA9IHN0cnVjdC51bnBhY2soIjxCM3NCMTF4IiwgZV9pZGVudCkKKworICAgIGlmIChlaV9tYWcwICE9IDB4N2YgYW5kIGVpX21hZzFfMyAhPSAiRUxGIikgb3IgZWlfY2xhc3MgPT0gMDoKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGlmIGVpX2NsYXNzID09IDE6CisgICAgICAgIHJldHVybiAzMgorICAgIGVsaWYgZWlfY2xhc3MgPT0gMjoKKyAgICAgICAgcmV0dXJuIDY0CisKK2RlZiBwYXJzZV9lbGZfaGVhZGVyKCk6CisgICAgZ2xvYmFsIGVfdHlwZSwgZV9tYWNoaW5lLCBlX3ZlcnNpb24sIGVfZW50cnksIGVfcGhvZmYsIGVfc2hvZmYsIGVfZmxhZ3MsXAorICAgICAgICAgICBlX2Voc2l6ZSwgZV9waGVudHNpemUsIGVfcGhudW0sIGVfc2hlbnRzaXplLCBlX3NobnVtLCBlX3Noc3RybmR4CisKKyAgICBmLnNlZWsoMCkKKyAgICBlbGZfaGVhZGVyID0gZi5yZWFkKDY0KQorCisgICAgaWYgYXJjaCA9PSAzMjoKKyAgICAgICAgIyAzMmJpdAorICAgICAgICBoZHJfZm10ID0gIjxISElMTExJSEhISEhIIgorICAgICAgICBoZHJfc2l6ZSA9IDUyCisgICAgZWxzZToKKyAgICAgICAgIyA2NGJpdAorICAgICAgICBoZHJfZm10ID0gIjxISElRUVFJSEhISEhIIgorICAgICAgICBoZHJfc2l6ZSA9IDY0CisKKyAgICBlX3R5cGUsIGVfbWFjaGluZSwgZV92ZXJzaW9uLCBlX2VudHJ5LCBlX3Bob2ZmLCBlX3Nob2ZmLCBlX2ZsYWdzLFwKKyAgICBlX2Voc2l6ZSwgZV9waGVudHNpemUsIGVfcGhudW0sIGVfc2hlbnRzaXplLCBlX3NobnVtLCBlX3Noc3RybmR4ID1cCisgICAgICAgIHN0cnVjdC51bnBhY2soaGRyX2ZtdCwgZWxmX2hlYWRlclsxNjpoZHJfc2l6ZV0pCisKK2RlZiBjaGFuZ2VfaW50ZXJwcmV0ZXIoZWxmX2ZpbGVfbmFtZSk6CisgICAgaWYgYXJjaCA9PSAzMjoKKyAgICAgICAgcGhfZm10ID0gIjxJSUlJSUlJSSIKKyAgICBlbHNlOgorICAgICAgICBwaF9mbXQgPSAiPElJUVFRUVFRIgorCisgICAgIiIiIGxvb2sgZm9yIFBUX0lOVEVSUCBzZWN0aW9uICIiIgorICAgIGZvciBpIGluIHJhbmdlKDAsZV9waG51bSk6CisgICAgICAgIGYuc2VlayhlX3Bob2ZmICsgaSAqIGVfcGhlbnRzaXplKQorICAgICAgICBwaF9oZHIgPSBmLnJlYWQoZV9waGVudHNpemUpCisgICAgICAgIGlmIGFyY2ggPT0gMzI6CisgICAgICAgICAgICAjIDMyYml0CisgICAgICAgICAgICBwX3R5cGUsIHBfb2Zmc2V0LCBwX3ZhZGRyLCBwX3BhZGRyLCBwX2ZpbGVzeixcCisgICAgICAgICAgICAgICAgcF9tZW1zeiwgcF9mbGFncywgcF9hbGlnbiA9IHN0cnVjdC51bnBhY2socGhfZm10LCBwaF9oZHIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIDY0Yml0CisgICAgICAgICAgICBwX3R5cGUsIHBfZmxhZ3MsIHBfb2Zmc2V0LCBwX3ZhZGRyLCBwX3BhZGRyLCBcCisgICAgICAgICAgICBwX2ZpbGVzeiwgcF9tZW1zeiwgcF9hbGlnbiA9IHN0cnVjdC51bnBhY2socGhfZm10LCBwaF9oZHIpCisKKyAgICAgICAgIiIiIGNoYW5nZSBpbnRlcnByZXRlciAiIiIKKyAgICAgICAgaWYgcF90eXBlID09IDM6CisgICAgICAgICAgICAjIFBUX0lOVEVSUCBzZWN0aW9uCisgICAgICAgICAgICBmLnNlZWsocF9vZmZzZXQpCisgICAgICAgICAgICAjIEV4dGVybmFsIFNES3Mgd2l0aCBtaXhlZCBwcmUtY29tcGlsZWQgYmluYXJpZXMgc2hvdWxkIG5vdCBnZXQKKyAgICAgICAgICAgICMgcmVsb2NhdGVkIHNvIGxvb2sgZm9yIHNvbWUgdmFyaWFudCBvZiAvbGliCisgICAgICAgICAgICBmbmFtZSA9IGYucmVhZCgxMSkKKyAgICAgICAgICAgIGlmIGZuYW1lLnN0YXJ0c3dpdGgoYigiL2xpYi8iKSkgb3IgZm5hbWUuc3RhcnRzd2l0aChiKCIvbGliNjQvIikpIG9yIFwKKyAgICAgICAgICAgICAgIGZuYW1lLnN0YXJ0c3dpdGgoYigiL2xpYjMyLyIpKSBvciBmbmFtZS5zdGFydHN3aXRoKGIoIi91c3IvbGliMzIvIikpIG9yIFwKKyAgICAgICAgICAgICAgIGZuYW1lLnN0YXJ0c3dpdGgoYigiL3Vzci9saWIzMi8iKSkgb3IgZm5hbWUuc3RhcnRzd2l0aChiKCIvdXNyL2xpYjY0LyIpKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgKGxlbihuZXdfZGxfcGF0aCkgPj0gcF9maWxlc3opOgorICAgICAgICAgICAgICAgIHByaW50KCJFUlJPUjogY291bGQgbm90IHJlbG9jYXRlICVzLCBpbnRlcnAgc2l6ZSA9ICVpIGFuZCAlaSBpcyBuZWVkZWQuIiBcCisgICAgICAgICAgICAgICAgICAgICUgKGVsZl9maWxlX25hbWUsIHBfbWVtc3osIGxlbihuZXdfZGxfcGF0aCkgKyAxKSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZGxfcGF0aCA9IG5ld19kbF9wYXRoICsgYigiXDAiKSAqIChwX2ZpbGVzeiAtIGxlbihuZXdfZGxfcGF0aCkpCisgICAgICAgICAgICBmLnNlZWsocF9vZmZzZXQpCisgICAgICAgICAgICBmLndyaXRlKGRsX3BhdGgpCisgICAgICAgICAgICBicmVhaworCitkZWYgY2hhbmdlX2RsX3N5c2RpcnMoKToKKyAgICBpZiBhcmNoID09IDMyOgorICAgICAgICBzaF9mbXQgPSAiPElJSUlJSUlJSUkiCisgICAgZWxzZToKKyAgICAgICAgc2hfZm10ID0gIjxJSVFRUVFJSVFRIgorCisgICAgIiIiIHJlYWQgc2VjdGlvbiBzdHJpbmcgdGFibGUgIiIiCisgICAgZi5zZWVrKGVfc2hvZmYgKyBlX3Noc3RybmR4ICogZV9zaGVudHNpemUpCisgICAgc2hfaGRyID0gZi5yZWFkKGVfc2hlbnRzaXplKQorICAgIGlmIGFyY2ggPT0gMzI6CisgICAgICAgIHNoX29mZnNldCwgc2hfc2l6ZSA9IHN0cnVjdC51bnBhY2soIjwxNnhJSTE2eCIsIHNoX2hkcikKKyAgICBlbHNlOgorICAgICAgICBzaF9vZmZzZXQsIHNoX3NpemUgPSBzdHJ1Y3QudW5wYWNrKCI8MjR4UVEyNHgiLCBzaF9oZHIpCisKKyAgICBmLnNlZWsoc2hfb2Zmc2V0KQorICAgIHNoX3N0cnRhYiA9IGYucmVhZChzaF9zaXplKQorCisgICAgc3lzZGlycyA9IHN5c2RpcnNfbGVuID0gIiIKKworICAgICIiIiBjaGFuZ2UgbGQuc28uY2FjaGUgcGF0aCBhbmQgZGVmYXVsdCBsaWJzIHBhdGggZm9yIGR5bmFtaWMgbG9hZGVyICIiIgorICAgIGZvciBpIGluIHJhbmdlKDAsZV9zaG51bSk6CisgICAgICAgIGYuc2VlayhlX3Nob2ZmICsgaSAqIGVfc2hlbnRzaXplKQorICAgICAgICBzaF9oZHIgPSBmLnJlYWQoZV9zaGVudHNpemUpCisKKyAgICAgICAgc2hfbmFtZSwgc2hfdHlwZSwgc2hfZmxhZ3MsIHNoX2FkZHIsIHNoX29mZnNldCwgc2hfc2l6ZSwgc2hfbGluayxcCisgICAgICAgICAgICBzaF9pbmZvLCBzaF9hZGRyYWxpZ24sIHNoX2VudHNpemUgPSBzdHJ1Y3QudW5wYWNrKHNoX2ZtdCwgc2hfaGRyKQorCisgICAgICAgIG5hbWUgPSBzaF9zdHJ0YWJbc2hfbmFtZTpzaF9zdHJ0YWIuZmluZChiKCJcMCIpLCBzaF9uYW1lKV0KKworICAgICAgICAiIiIgbG9vayBvbmx5IGludG8gU0hUX1BST0dCSVRTIHNlY3Rpb25zICIiIgorICAgICAgICBpZiBzaF90eXBlID09IDE6CisgICAgICAgICAgICBmLnNlZWsoc2hfb2Zmc2V0KQorICAgICAgICAgICAgIiIiIGRlZmF1bHQgbGlicmFyeSBwYXRocyBjYW5ub3QgYmUgY2hhbmdlZCBvbiB0aGUgZmx5IGJlY2F1c2UgICIiIgorICAgICAgICAgICAgIiIiIHRoZSBzdHJpbmcgbGVuZ3RocyBoYXZlIHRvIGJlIGNoYW5nZWQgdG9vLiAgICAgICAgICAgICAgICAgICIiIgorICAgICAgICAgICAgaWYgbmFtZSA9PSBiKCIuc3lzZGlycyIpOgorICAgICAgICAgICAgICAgIHN5c2RpcnMgPSBmLnJlYWQoc2hfc2l6ZSkKKyAgICAgICAgICAgICAgICBzeXNkaXJzX29mZiA9IHNoX29mZnNldAorICAgICAgICAgICAgICAgIHN5c2RpcnNfc2VjdF9zaXplID0gc2hfc2l6ZQorICAgICAgICAgICAgZWxpZiBuYW1lID09IGIoIi5zeXNkaXJzbGVuIik6CisgICAgICAgICAgICAgICAgc3lzZGlyc2xlbiA9IGYucmVhZChzaF9zaXplKQorICAgICAgICAgICAgICAgIHN5c2RpcnNsZW5fb2ZmID0gc2hfb2Zmc2V0CisgICAgICAgICAgICBlbGlmIG5hbWUgPT0gYigiLmxkc29jYWNoZSIpOgorICAgICAgICAgICAgICAgIGxkc29jYWNoZV9wYXRoID0gZi5yZWFkKHNoX3NpemUpCisgICAgICAgICAgICAgICAgbmV3X2xkc29jYWNoZV9wYXRoID0gb2xkX3ByZWZpeC5zdWIobmV3X3ByZWZpeCwgbGRzb2NhY2hlX3BhdGgpCisgICAgICAgICAgICAgICAgIyBwYWQgd2l0aCB6ZXJvcworICAgICAgICAgICAgICAgIG5ld19sZHNvY2FjaGVfcGF0aCArPSBiKCJcMCIpICogKHNoX3NpemUgLSBsZW4obmV3X2xkc29jYWNoZV9wYXRoKSkKKyAgICAgICAgICAgICAgICAjIHdyaXRlIGl0IGJhY2sKKyAgICAgICAgICAgICAgICBmLnNlZWsoc2hfb2Zmc2V0KQorICAgICAgICAgICAgICAgIGYud3JpdGUobmV3X2xkc29jYWNoZV9wYXRoKQorICAgICAgICAgICAgZWxpZiBuYW1lID09IGIoIi5nY2NyZWxvY3ByZWZpeCIpOgorICAgICAgICAgICAgICAgIG9mZnNldCA9IDAKKyAgICAgICAgICAgICAgICB3aGlsZSAob2Zmc2V0ICsgNDA5NikgPD0gc2hfc2l6ZToKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IGYucmVhZCg0MDk2KQorICAgICAgICAgICAgICAgICAgICBuZXdfcGF0aCA9IG9sZF9wcmVmaXguc3ViKG5ld19wcmVmaXgsIHBhdGgpCisgICAgICAgICAgICAgICAgICAgICMgcGFkIHdpdGggemVyb3MKKyAgICAgICAgICAgICAgICAgICAgbmV3X3BhdGggKz0gYigiXDAiKSAqICg0MDk2IC0gbGVuKG5ld19wYXRoKSkKKyAgICAgICAgICAgICAgICAgICAgI3ByaW50ICJDaGFuZ2luZyAlcyB0byAlcyBhdCAlcyIgJSAoc3RyKHBhdGgpLCBzdHIobmV3X3BhdGgpLCBzdHIob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgIyB3cml0ZSBpdCBiYWNrCisgICAgICAgICAgICAgICAgICAgIGYuc2VlayhzaF9vZmZzZXQgKyBvZmZzZXQpCisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUobmV3X3BhdGgpCisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldCArIDQwOTYKKyAgICBpZiBzeXNkaXJzICE9ICIiIGFuZCBzeXNkaXJzbGVuICE9ICIiOgorICAgICAgICBwYXRocyA9IHN5c2RpcnMuc3BsaXQoYigiXDAiKSkKKyAgICAgICAgc3lzZGlycyA9IGIoIiIpCisgICAgICAgIHN5c2RpcnNsZW4gPSBiKCIiKQorICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKKyAgICAgICAgICAgICIiIiBleGl0IHRoZSBsb29wIHdoZW4gd2UgZW5jb3VudGVyIGZpcnN0IGVtcHR5IHN0cmluZyAiIiIKKyAgICAgICAgICAgIGlmIHBhdGggPT0gYigiIik6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgbmV3X3BhdGggPSBvbGRfcHJlZml4LnN1YihuZXdfcHJlZml4LCBwYXRoKQorICAgICAgICAgICAgc3lzZGlycyArPSBuZXdfcGF0aCArIGIoIlwwIikKKworICAgICAgICAgICAgaWYgYXJjaCA9PSAzMjoKKyAgICAgICAgICAgICAgICBzeXNkaXJzbGVuICs9IHN0cnVjdC5wYWNrKCI8TCIsIGxlbihuZXdfcGF0aCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN5c2RpcnNsZW4gKz0gc3RydWN0LnBhY2soIjxRIiwgbGVuKG5ld19wYXRoKSkKKworICAgICAgICAiIiIgcGFkIHdpdGggemVyb3MgIiIiCisgICAgICAgIHN5c2RpcnMgKz0gYigiXDAiKSAqIChzeXNkaXJzX3NlY3Rfc2l6ZSAtIGxlbihzeXNkaXJzKSkKKworICAgICAgICAiIiIgd3JpdGUgdGhlIHNlY3Rpb25zIGJhY2sgIiIiCisgICAgICAgIGYuc2VlayhzeXNkaXJzX29mZikKKyAgICAgICAgZi53cml0ZShzeXNkaXJzKQorICAgICAgICBmLnNlZWsoc3lzZGlyc2xlbl9vZmYpCisgICAgICAgIGYud3JpdGUoc3lzZGlyc2xlbikKKworIyBNQUlOCitpZiBsZW4oc3lzLmFyZ3YpIDwgNDoKKyAgICBzeXMuZXhpdCgtMSkKKworIyBJbiBweXRob24gPiAzLCBzdHJpbmdzIG1heSBhbHNvIGNvbnRhaW4gVW5pY29kZSBjaGFyYWN0ZXJzLiBTbywgY29udmVydAorIyB0aGVtIHRvIGJ5dGVzCitpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDMsKToKKyAgICBuZXdfcHJlZml4ID0gc3lzLmFyZ3ZbMV0KKyAgICBuZXdfZGxfcGF0aCA9IHN5cy5hcmd2WzJdCitlbHNlOgorICAgIG5ld19wcmVmaXggPSBzeXMuYXJndlsxXS5lbmNvZGUoKQorICAgIG5ld19kbF9wYXRoID0gc3lzLmFyZ3ZbMl0uZW5jb2RlKCkKKworZXhlY3V0YWJsZXNfbGlzdCA9IHN5cy5hcmd2WzM6XQorCitmb3IgZSBpbiBleGVjdXRhYmxlc19saXN0OgorICAgIHBlcm1zID0gb3Muc3RhdChlKVtzdGF0LlNUX01PREVdCisgICAgaWYgb3MuYWNjZXNzKGUsIG9zLldfT0t8b3MuUl9PSyk6CisgICAgICAgIHBlcm1zID0gTm9uZQorICAgIGVsc2U6CisgICAgICAgIG9zLmNobW9kKGUsIHBlcm1zfHN0YXQuU19JUldYVSkKKworICAgIHRyeToKKyAgICAgICAgZiA9IG9wZW4oZSwgInIrYiIpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y3R5cGUsIGlvZXggPSBzeXMuZXhjX2luZm8oKVs6Ml0KKyAgICAgICAgaWYgaW9leC5lcnJubyA9PSBlcnJuby5FVFhUQlNZOgorICAgICAgICAgICAgcHJpbnQoIkNvdWxkIG5vdCBvcGVuICVzLiBGaWxlIHVzZWQgYnkgYW5vdGhlciBwcm9jZXNzLlxuUGxlYXNlICJcCisgICAgICAgICAgICAgICAgICAibWFrZSBzdXJlIHlvdSBleGl0IGFsbCBwcm9jZXNzZXMgdGhhdCBtaWdodCB1c2UgYW55IFNESyAiXAorICAgICAgICAgICAgICAgICAgImJpbmFyaWVzLiIgJSBlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkNvdWxkIG5vdCBvcGVuICVzOiAlcyglZCkiICUgKGUsIGlvZXguc3RyZXJyb3IsIGlvZXguZXJybm8pKQorICAgICAgICBzeXMuZXhpdCgtMSkKKworICAgICMgU2F2ZSBvbGQgc2l6ZSBhbmQgZG8gYSBzaXplIGNoZWNrIGF0IHRoZSBlbmQuIEp1c3QgYSBzYWZldHkgbWVhc3VyZS4KKyAgICBvbGRfc2l6ZSA9IG9zLnBhdGguZ2V0c2l6ZShlKQorICAgIGlmIG9sZF9zaXplID49IDY0OgorICAgICAgICBhcmNoID0gZ2V0X2FyY2goKQorICAgICAgICBpZiBhcmNoOgorICAgICAgICAgICAgcGFyc2VfZWxmX2hlYWRlcigpCisgICAgICAgICAgICBjaGFuZ2VfaW50ZXJwcmV0ZXIoZSkKKyAgICAgICAgICAgIGNoYW5nZV9kbF9zeXNkaXJzKCkKKworICAgICIiIiBjaGFuZ2UgcGVybWlzc2lvbnMgYmFjayAiIiIKKyAgICBpZiBwZXJtczoKKyAgICAgICAgb3MuY2htb2QoZSwgcGVybXMpCisKKyAgICBmLmNsb3NlKCkKKworICAgIGlmIG9sZF9zaXplICE9IG9zLnBhdGguZ2V0c2l6ZShlKToKKyAgICAgICAgcHJpbnQoIk5ldyBmaWxlIHNpemUgZm9yICVzIGlzIGRpZmZlcmVudC4gTG9va3MgbGlrZSBhIHJlbG9jYXRpb24gZXJyb3IhIiwgZSkKKyAgICAgICAgc3lzLmV4aXQoLTEpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9yb290ZnNfcnBtLWV4dHJhY3QtcG9zdGluc3QuYXdrIGIveW9jdG8tcG9reS9zY3JpcHRzL3Jvb3Rmc19ycG0tZXh0cmFjdC1wb3N0aW5zdC5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYyODM2YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9yb290ZnNfcnBtLWV4dHJhY3QtcG9zdGluc3QuYXdrCkBAIC0wLDAgKzEsMTEgQEAKKy9OYW1lOi4qLyB7CisgIHBhY2thZ2UgPSBzdWJzdHIoJDAsIDcpCisgIG5leHQKK30KKy9wb3N0aW5zdGFsbC4qc2NyaXB0bGV0IC4qLyB7CisgIG5leHQKK30KK3sKKyAgcHJpbnQgJDAgPj4gRU5WSVJPTlsiRCJdICIvZXRjL3JwbS1wb3N0aW5zdHMvIiBwYWNrYWdlICIuc2giCit9CisgICAgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcnBtMmNwaW8uc2ggYi95b2N0by1wb2t5L3NjcmlwdHMvcnBtMmNwaW8uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWRmOGMwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9ycG0yY3Bpby5zaApAQCAtMCwwICsxLDUzIEBACisjIS9iaW4vc2gKKworIyBUaGlzIGNvbWVzIGZyb20gdGhlIFJQTTUgNS40LjAgZGlzdHJpYnV0aW9uLgorCitwa2c9JDEKK2lmIFsgIiRwa2ciID0gIiIgLW8gISAtZSAiJHBrZyIgXTsgdGhlbgorICAgIGVjaG8gIm5vIHBhY2thZ2Ugc3VwcGxpZWQiIDE+JjIKKyAgIGV4aXQgMQorZmkKKworbGVhZHNpemU9OTYKK289YGV4cHIgJGxlYWRzaXplICsgOGAKK3NldCBgb2QgLWogJG8gLU4gOCAtdCB1MSAkcGtnYAoraWw9YGV4cHIgMjU2IFwqIFwoIDI1NiBcKiBcKCAyNTYgXCogJDIgKyAkMyBcKSArICQ0IFwpICsgJDVgCitkbD1gZXhwciAyNTYgXCogXCggMjU2IFwqIFwoIDI1NiBcKiAkNiArICQ3IFwpICsgJDggXCkgKyAkOWAKKyMgZWNobyAic2lnIGlsOiAkaWwgZGw6ICRkbCIKKworc2lnc2l6ZT1gZXhwciA4ICsgMTYgXCogJGlsICsgJGRsYAorbz1gZXhwciAkbyArICRzaWdzaXplICsgXCggOCAtIFwoICRzaWdzaXplIFwlIDggXCkgXCkgXCUgOCArIDhgCitzZXQgYG9kIC1qICRvIC1OIDggLXQgdTEgJHBrZ2AKK2lsPWBleHByIDI1NiBcKiBcKCAyNTYgXCogXCggMjU2IFwqICQyICsgJDMgXCkgKyAkNCBcKSArICQ1YAorZGw9YGV4cHIgMjU2IFwqIFwoIDI1NiBcKiBcKCAyNTYgXCogJDYgKyAkNyBcKSArICQ4IFwpICsgJDlgCisjIGVjaG8gImhkciBpbDogJGlsIGRsOiAkZGwiCisKK2hkcnNpemU9YGV4cHIgOCArIDE2IFwqICRpbCArICRkbGAKK289YGV4cHIgJG8gKyAkaGRyc2l6ZWAKK0VYVFJBQ1RPUj0iZGQgaWY9JHBrZyBpYnM9JG8gc2tpcD0xIgorCitDT01QUkVTU0lPTj1gKCRFWFRSQUNUT1IgfGZpbGUgLSkgMj4vZGV2L251bGxgCitpZiBlY2hvICRDT01QUkVTU0lPTiB8Z3JlcCAtaXEgZ3ppcDsgdGhlbgorCURFQ09NUFJFU1NPUj1ndW56aXAKK2VsaWYgZWNobyAkQ09NUFJFU1NJT04gfGdyZXAgLWlxIGJ6aXAyOyB0aGVuCisJREVDT01QUkVTU09SPWJ1bnppcDIKK2VsaWYgZWNobyAkQ09NUFJFU1NJT04gfGdyZXAgLWlxIHh6OyB0aGVuCisJREVDT01QUkVTU09SPXVueHoKK2VsaWYgZWNobyAkQ09NUFJFU1NJT04gfGdyZXAgLWlxIGNwaW87IHRoZW4KKwlERUNPTVBSRVNTT1I9Y2F0CitlbHNlCisJIyBNb3N0IHZlcnNpb25zIG9mIGZpbGUgZG9uJ3Qgc3VwcG9ydCBMWk1BLCB0aGVyZWZvcmUgd2UgYXNzdW1lCisJIyBhbnl0aGluZyBub3QgZGV0ZWN0ZWQgaXMgTFpNQQorCURFQ09NUFJFU1NPUj1gd2hpY2ggdW5sem1hIDI+L2Rldi9udWxsYAorCWNhc2UgIiRERUNPTVBSRVNTT1IiIGluCisJICAgIC8qICkgOzsKKwkgICAgKiAgKSBERUNPTVBSRVNTT1I9YHdoaWNoIGx6bWFzaCAyPi9kZXYvbnVsbGAKKwkgICAgICAgICBjYXNlICIkREVDT01QUkVTU09SIiBpbgorCSAgICAgICAgICAgICAvKiApIERFQ09NUFJFU1NPUj0ibHptYXNoIC1kIC1jIiA7OworCSAgICAgICAgICAgICAqICApIERFQ09NUFJFU1NPUj1jYXQgOzsKKwkgICAgICAgICBlc2FjCisJICAgICAgICAgOzsKKwllc2FjCitmaQorCiskRVhUUkFDVE9SIDI+L2Rldi9udWxsIHwgJERFQ09NUFJFU1NPUgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUgYi95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yM2NmNWJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUKQEAgLTAsMCArMSw1MzIgQEAKKyMhL2Jpbi9iYXNoCisjCisjIEhhbmRsZSBydW5uaW5nIE9FIGltYWdlcyBzdGFuZGFsb25lIHdpdGggUUVNVQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMSBMaW51eCBGb3VuZGF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCit1c2FnZSgpIHsKKyAgICBNWU5BTUU9YGJhc2VuYW1lICQwYAorICAgIGVjaG8gIiIKKyAgICBlY2hvICJVc2FnZTogeW91IGNhbiBydW4gdGhpcyBzY3JpcHQgd2l0aCBhbnkgdmFsaWQgY29tYmluYXRpb24iCisgICAgZWNobyAib2YgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKGluIGFueSBvcmRlcik6IgorICAgIGVjaG8gIiAgUUVNVUFSQ0ggLSB0aGUgcWVtdSBtYWNoaW5lIGFyY2hpdGVjdHVyZSB0byB1c2UiCisgICAgZWNobyAiICBLRVJORUwgLSB0aGUga2VybmVsIGltYWdlIGZpbGUgdG8gdXNlIgorICAgIGVjaG8gIiAgUk9PVEZTIC0gdGhlIHJvb3RmcyBpbWFnZSBmaWxlIG9yIG5mc3Jvb3QgZGlyZWN0b3J5IHRvIHVzZSIKKyAgICBlY2hvICIgIE1BQ0hJTkUgLSB0aGUgbWFjaGluZSBuYW1lIChvcHRpb25hbCwgYXV0b2RldGVjdGVkIGZyb20gS0VSTkVMIGZpbGVuYW1lIGlmIHVuc3BlY2lmaWVkKSIKKyAgICBlY2hvICIgIFJBTUZTIC0gYm9vdCBhIHJhbWZzLWJhc2VkIGltYWdlIgorICAgIGVjaG8gIiAgSVNPIC0gYm9vdCBhbiBJU08gaW1hZ2UiCisgICAgZWNobyAiICBWTSAtIGJvb3QgYSB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2UgKD0gYSBmaWxlIHJlcHJlc2VudGluZyBhIGZ1bGwgZGlzayB3aXRoIGJvb3QgbG9hZGVyKSIKKyAgICBlY2hvICIgIFNpbXBsaWZpZWQgUUVNVSBjb21tYW5kLWxpbmUgb3B0aW9ucyBjYW4gYmUgcGFzc2VkIHdpdGg6IgorICAgIGVjaG8gIiAgICBub2dyYXBoaWMgLSBkaXNhYmxlcyB2aWRlbyBjb25zb2xlIgorICAgIGVjaG8gIiAgICBzZXJpYWwgLSBlbmFibGVzIGEgc2VyaWFsIGNvbnNvbGUgb24gL2Rldi90dHlTMCIKKyAgICBlY2hvICIgICAga3ZtIC0gZW5hYmxlcyBLVk0gd2hlbiBydW5uaW5nIHFlbXV4ODYvcWVtdXg4Ni02NCAoVlQtY2FwYWJsZSBDUFUgcmVxdWlyZWQpIgorICAgIGVjaG8gIiAgICBwdWJsaWN2bmMgLSBlbmFibGUgYSBWTkMgc2VydmVyIG9wZW4gdG8gYWxsIGhvc3RzIgorICAgIGVjaG8gIiAgcWVtdXBhcmFtcz1cInh5elwiIC0gc3BlY2lmeSBjdXN0b20gcGFyYW1ldGVycyB0byBRRU1VIgorICAgIGVjaG8gIiAgYm9vdHBhcmFtcz1cInh5elwiIC0gc3BlY2lmeSBjdXN0b20ga2VybmVsIHBhcmFtZXRlcnMgZHVyaW5nIGJvb3QiCisgICAgZWNobyAiIgorICAgIGVjaG8gIkV4YW1wbGVzOiIKKyAgICBlY2hvICIgICRNWU5BTUUgcWVtdWFybSIKKyAgICBlY2hvICIgICRNWU5BTUUgcWVtdXg4Ni02NCBjb3JlLWltYWdlLXNhdG8gZXh0NCIKKyAgICBlY2hvICIgICRNWU5BTUUgcGF0aC90by9iekltYWdlLXFlbXV4ODYuYmluIHBhdGgvdG8vbmZzcm9vdGRpci8gc2VyaWFsIgorICAgIGVjaG8gIiAgJE1ZTkFNRSBxZW11eDg2IHJhbWZzIgorICAgIGVjaG8gIiAgJE1ZTkFNRSBxZW11eDg2IGlzbyIKKyAgICBlY2hvICIgICRNWU5BTUUgcWVtdXg4NiBxZW11cGFyYW1zPVwiLW0gMjU2XCIiCisgICAgZWNobyAiICAkTVlOQU1FIHFlbXV4ODYgYm9vdHBhcmFtcz1cInBzcGxhc2g9ZmFsc2VcIiIKKyAgICBlY2hvICIgICRNWU5BTUUgcGF0aC90by88aW1hZ2U+LTxtYWNoaW5lPi52bWRrIgorICAgIGV4aXQgMQorfQorCitpZiBbICJ4JDEiID0gIngiIF07IHRoZW4KKyAgICB1c2FnZQorZmkKKworZXJyb3IoKSB7CisgICAgZWNobyAiRXJyb3I6ICIkKgorICAgIHVzYWdlCit9CisKK01BQ0hJTkU9JHtNQUNISU5FOj0iIn0KK0tFUk5FTD0ke0tFUk5FTDo9IiJ9CitST09URlM9JHtST09URlM6PSIifQorVk09JHtWTTo9IiJ9CitGU1RZUEU9JHtGU1RZUEU6PSIifQorTEFaWV9ST09URlM9IiIKK1NDUklQVF9RRU1VX09QVD0iIgorU0NSSVBUX1FFTVVfRVhUUkFfT1BUPSIiCitTQ1JJUFRfS0VSTkVMX09QVD0iIgorU0VSSUFMU1RESU89IiIKK1RDUFNFUklBTF9QT1JUTlVNPSIiCitLVk1fRU5BQkxFRD0ibm8iCitLVk1fQUNUSVZFPSJubyIKKworIyBEZXRlcm1pbmUgd2hldGhlciB0aGUgZmlsZSBpcyBhIGtlcm5lbCBvciBRRU1VIGltYWdlLCBhbmQgc2V0IHRoZQorIyBhcHByb3ByaWF0ZSB2YXJpYWJsZXMKK3Byb2Nlc3NfZmlsZW5hbWUoKSB7CisgICAgZmlsZW5hbWU9JDEKKworICAgICMgRXh0cmFjdCB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uCisgICAgRVhUPWBlY2hvICRmaWxlbmFtZSB8IGF3ayAtRiAuICd7IHByaW50IFwkTkYgfSdgCisgICAgY2FzZSAvJEVYVC8gaW4KKwkvYmluLykKKwkJIyBBIGZpbGUgZW5kaW5nIGluIC5iaW4gaXMgYSBrZXJuZWwKKwkJWyAteiAiJEtFUk5FTCIgXSAmJiBLRVJORUw9JGZpbGVuYW1lIHx8IFwKKwkJICAgIGVycm9yICJjb25mbGljdGluZyBLRVJORUwgYXJncyBbJEtFUk5FTF0gYW5kIFskZmlsZW5hbWVdIgorCQk7OworCS9leHRbMjM0XS98L2pmZnMyL3wvYnRyZnMvKQorCQkjIEEgZmlsZSBlbmRpbmcgaW4gYSBzdXBwb3J0dGVkIGZzIHR5cGUgaXMgYSByb290ZnMgaW1hZ2UKKwkJaWYgWyAteiAiJEZTVFlQRSIgLW8gIiRGU1RZUEUiID0gIiRFWFQiIF07IHRoZW4KKwkJICAgIEZTVFlQRT0kRVhUCisJCSAgICBST09URlM9JGZpbGVuYW1lCisJCWVsc2UKKwkJICAgIGVycm9yICJjb25mbGljdGluZyBGU1RZUEUgdHlwZXMgWyRGU1RZUEVdIGFuZCBbJEVYVF0iCisJCWZpCisJCTs7CisJL2hkZGltZy98L2hkZGRpcmVjdC98L3ZtZGsvKQorCQlGU1RZUEU9JEVYVAorCQlWTT0kZmlsZW5hbWUKKwkJOzsKKwkqKQorCQllcnJvciAidW5rbm93biBmaWxlIGFyZyBbJGZpbGVuYW1lXSIKKwkJOzsKKyAgICBlc2FjCit9CisKKyMgUGFyc2UgY29tbWFuZCBsaW5lIGFyZ3Mgd2l0aG91dCByZXF1aXJpbmcgc3BlY2lmaWMgb3JkZXJpbmcuIEl0J3MgYQorIyBiaXQgbW9yZSBjb21wbGV4LCBidXQgb2ZmZXJzIGEgZ3JlYXQgdXNlciBleHBlcmllbmNlLgord2hpbGUgdHJ1ZTsgZG8KKyAgICBhcmc9JHsxfQorICAgIGNhc2UgIiRhcmciIGluCisgICAgICAgICJxZW11eDg2IiB8ICJxZW11eDg2LTY0IiB8ICJxZW11YXJtIiB8ICJxZW11YXJtNjQiIHwgInFlbXVtaXBzIiB8ICJxZW11bWlwc2VsIiB8IFwKKyAgICAgICAgInFlbXVtaXBzNjQiIHwgInFlbXVzaDQiICB8ICJxZW11cHBjIiB8ICJxZW11bWljcm9ibGF6ZSIgfCAicWVtdXp5bnEiKQorICAgICAgICAgICAgWyAteiAiJE1BQ0hJTkUiIF0gJiYgTUFDSElORT0kYXJnIHx8IFwKKyAgICAgICAgICAgICAgICBlcnJvciAiY29uZmxpY3RpbmcgTUFDSElORSB0eXBlcyBbJE1BQ0hJTkVdIGFuZCBbJGFyZ10iCisgICAgICAgICAgICA7OworICAgICAgICAiZXh0MiIgfCAiZXh0MyIgfCAiZXh0NCIgfCAiamZmczIiIHwgIm5mcyIgfCAiYnRyZnMiIHwgImhkZGltZyIgfCAiaGRkZGlyZWN0IiApCisgICAgICAgICAgICBbIC16ICIkRlNUWVBFIiAtbyAiJEZTVFlQRSIgPSAiJGFyZyIgXSAmJiBGU1RZUEU9JGFyZyB8fCBcCisgICAgICAgICAgICAgICAgZXJyb3IgImNvbmZsaWN0aW5nIEZTVFlQRSB0eXBlcyBbJEZTVFlQRV0gYW5kIFskYXJnXSIKKyAgICAgICAgICAgIDs7CisgICAgICAgICJyYW1mcyIpCisgICAgICAgICAgICBGU1RZUEU9Y3Bpby5negorICAgICAgICAgICAgUkFNRlM9dHJ1ZQorICAgICAgICAgICAgOzsKKyAgICAgICAgImlzbyIpCisJICAgIEZTVFlQRT1pc28KKwkgICAgSVNPRlM9dHJ1ZQorCSAgICA7OworICAgICAgICAibm9ncmFwaGljIikKKyAgICAgICAgICAgIFNDUklQVF9RRU1VX09QVD0iJFNDUklQVF9RRU1VX09QVCAtbm9ncmFwaGljIgorICAgICAgICAgICAgU0NSSVBUX0tFUk5FTF9PUFQ9IiRTQ1JJUFRfS0VSTkVMX09QVCBjb25zb2xlPXR0eVMwIgorICAgICAgICAgICAgOzsKKyAgICAgICAgInNlcmlhbCIpCisgICAgICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLXNlcmlhbCBzdGRpbyIKKyAgICAgICAgICAgIFNDUklQVF9LRVJORUxfT1BUPSIkU0NSSVBUX0tFUk5FTF9PUFQgY29uc29sZT10dHlTMCIKKyAgICAgICAgICAgIFNFUklBTFNURElPPSIxIgorICAgICAgICAgICAgOzsKKyAgICAgICAgInRjcHNlcmlhbD0iKikKKyAgICAgICAgICAgIFRDUFNFUklBTF9QT1JUTlVNPSR7YXJnIyN0Y3BzZXJpYWw9fQorICAgICAgICAgICAgOzsKKwkiYmlvc2Rpcj0iKikKKyAgICAgICAgICAgIENVU1RPTUJJT1NESVI9IiR7YXJnIyNiaW9zZGlyPX0iCisJICAgIDs7CisgICAgICAgICJiaW9zZmlsZW5hbWU9IiopCisgICAgICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLWJpb3MgJHthcmcjI2Jpb3NmaWxlbmFtZT19IgorICAgICAgICAgICAgOzsKKyAgICAgICAgInFlbXVwYXJhbXM9IiopCisgICAgICAgICAgICBTQ1JJUFRfUUVNVV9FWFRSQV9PUFQ9IiR7YXJnIyNxZW11cGFyYW1zPX0iCisKKyAgICAgICAgICAgICMgV2FybiB1c2VyIGlmIHRoZXkgdHJ5IHRvIHNwZWNpZnkgc2VyaWFsIG9yIGt2bSBvcHRpb25zCisgICAgICAgICAgICAjIHRvIHVzZSBzaW1wbGlmaWVkIG9wdGlvbnMgaW5zdGVhZAorICAgICAgICAgICAgc2VyaWFsX29wdGlvbj1gZXhwciAiJFNDUklQVF9RRU1VX0VYVFJBX09QVCIgOiAnLipcKC1zZXJpYWxcKSdgCisgICAgICAgICAgICBrdm1fb3B0aW9uPWBleHByICIkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIiA6ICcuKlwoLWVuYWJsZS1rdm1cKSdgCisgICAgICAgICAgICB2Z2Ffb3B0aW9uPWBleHByICIkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIiA6ICcuKlwoLXZnYVwpJ2AKKyAgICAgICAgICAgIFsgISAteiAiJHNlcmlhbF9vcHRpb24iIC1vICEgLXogIiRrdm1fb3B0aW9uIiBdICYmIFwKKyAgICAgICAgICAgICAgICBlY2hvICJQbGVhc2UgdXNlIHNpbXBsaWZpZWQgc2VyaWFsIG9yIGt2bSBvcHRpb25zIGluc3RlYWQiCisgICAgICAgICAgICA7OworICAgICAgICAiYm9vdHBhcmFtcz0iKikKKyAgICAgICAgICAgIFNDUklQVF9LRVJORUxfT1BUPSIkU0NSSVBUX0tFUk5FTF9PUFQgJHthcmcjI2Jvb3RwYXJhbXM9fSIKKyAgICAgICAgICAgIDs7CisgICAgICAgICJhdWRpbyIpCisgICAgICAgICAgICBpZiBbICJ4JE1BQ0hJTkUiID0gInhxZW11eDg2IiAtbyAieCRNQUNISU5FIiA9ICJ4cWVtdXg4Ni02NCIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIkVuYWJsaW5nIGF1ZGlvIGluIHFlbXUuIgorICAgICAgICAgICAgICAgIGVjaG8gIlBsZWFzZSBpbnN0YWxsIHNuZF9pbnRlbDh4MCBvciBzbmRfZW5zMTM3MCBkcml2ZXIgaW4gbGludXggZ3Vlc3QuIgorICAgICAgICAgICAgICAgIFFFTVVfQVVESU9fRFJWPSJhbHNhIgorICAgICAgICAgICAgICAgIFNDUklQVF9RRU1VX09QVD0iJFNDUklQVF9RRU1VX09QVCAtc291bmRodyBhYzk3LGVzMTM3MCIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgICAgICAia3ZtIikKKyAgICAgICAgICAgIEtWTV9FTkFCTEVEPSJ5ZXMiCisgICAgICAgICAgICBLVk1fQ0FQQUJMRT1gZ3JlcCAtcSAndm14XHxzdm0nIC9wcm9jL2NwdWluZm8gJiYgZWNobyAxYAorICAgICAgICAgICAgOzsKKyAgICAgICAgInNsaXJwIikKKyAgICAgICAgICAgIFNMSVJQX0VOQUJMRUQ9InllcyIKKyAgICAgICAgICAgIDs7CisgICAgICAgICJwdWJsaWN2bmMiKQorICAgICAgICAgICAgU0NSSVBUX1FFTVVfT1BUPSIkU0NSSVBUX1FFTVVfT1BUIC12bmMgMC4wLjAuMDowIgorICAgICAgICAgICAgOzsKKyAgICAgICAgKi1pbWFnZSopCisgICAgICAgICAgICBbIC16ICIkUk9PVEZTIiBdIHx8IFwKKwkJZXJyb3IgImNvbmZsaWN0aW5nIFJPT1RGUyBhcmdzIFskUk9PVEZTXSBhbmQgWyRhcmddIgorICAgICAgICAgICAgaWYgWyAtZiAiJGFyZyIgXTsgdGhlbgorICAgICAgICAgICAgICAgIHByb2Nlc3NfZmlsZW5hbWUgJGFyZworICAgICAgICAgICAgZWxpZiBbIC1kICIkYXJnIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgIyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIG5mc3Jvb3QgZGlyIGhhcyAtaW1hZ2UtCisgICAgICAgICAgICAgICAgIyBpbiB0aGUgcGF0aG5hbWUKKyAgICAgICAgICAgICAgICBlY2hvICJBc3N1bWluZyAkYXJnIGlzIGFuIG5mcyByb290ZnMiCisgICAgICAgICAgICAgICAgRlNUWVBFPW5mcworICAgICAgICAgICAgICAgIFJPT1RGUz0kYXJnCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgUk9PVEZTPSRhcmcKKyAgICAgICAgICAgICAgICBMQVpZX1JPT1RGUz0idHJ1ZSIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgICAgICAiIikgYnJlYWsgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgICMgQSBkaXJlY3RvcnkgbmFtZSBpcyBhbiBuZnMgcm9vdGZzCisgICAgICAgICAgICBpZiBbIC1kICIkYXJnIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiQXNzdW1pbmcgJGFyZyBpcyBhbiBuZnMgcm9vdGZzIgorICAgICAgICAgICAgICAgIGlmIFsgLXogIiRGU1RZUEUiIC1vICIkRlNUWVBFIiA9ICJuZnMiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgRlNUWVBFPW5mcworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgImNvbmZsaWN0aW5nIEZTVFlQRSB0eXBlcyBbJGFyZ10gYW5kIG5mcyIKKyAgICAgICAgICAgICAgICBmaQorCisgICAgICAgICAgICAgICAgaWYgWyAteiAiJFJPT1RGUyIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBST09URlM9JGFyZworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgImNvbmZsaWN0aW5nIFJPT1RGUyBhcmdzIFskUk9PVEZTXSBhbmQgWyRhcmddIgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBlbGlmIFsgLWYgIiRhcmciIF07IHRoZW4KKyAgICAgICAgICAgICAgICBwcm9jZXNzX2ZpbGVuYW1lICRhcmcKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlcnJvciAidW5hYmxlIHRvIGNsYXNzaWZ5IGFyZyBbJGFyZ10iCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICBlc2FjCisgICAgc2hpZnQKK2RvbmUKKworaWYgWyAhIC1jIC9kZXYvbmV0L3R1biBdIDsgdGhlbgorCWVjaG8gIlRVTiBjb250cm9sIGRldmljZSAvZGV2L25ldC90dW4gaXMgdW5hdmFpbGFibGU7IHlvdSBtYXkgbmVlZCB0byBlbmFibGUgVFVOIChlLmcuIHN1ZG8gbW9kcHJvYmUgdHVuKSIKKwlleGl0IDEKK2VsaWYgWyAhIC13IC9kZXYvbmV0L3R1biBdIDsgdGhlbgorCWVjaG8gIlRVTiBjb250cm9sIGRldmljZSAvZGV2L25ldC90dW4gaXMgbm90IHdyaXRhYmxlLCBwbGVhc2UgZml4IChlLmcuIHN1ZG8gY2htb2QgNjY2IC9kZXYvbmV0L3R1bikiCisJZXhpdCAxCitmaQorCisjIFJlcG9ydCBlcnJvcnMgZm9yIG1pc3NpbmcgY29tYmluYXRpb25zIG9mIG9wdGlvbnMKK2lmIFsgLXogIiRNQUNISU5FIiAtYSAteiAiJEtFUk5FTCIgLWEgLXogIiRWTSIgXTsgdGhlbgorICAgIGVycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IGEgTUFDSElORSwgVk0sIG9yIEtFUk5FTCBhcmd1bWVudCIKK2ZpCitpZiBbICIkRlNUWVBFIiA9ICJuZnMiIC1hIC16ICIkUk9PVEZTIiBdOyB0aGVuCisgICAgZXJyb3IgIk5GUyBib290aW5nIHdpdGhvdXQgYW4gZXhwbGljaXQgUk9PVEZTIHBhdGggaXMgbm90IHlldCBzdXBwb3J0ZWQiCitmaQorCitpZiBbIC16ICIkTUFDSElORSIgXTsgdGhlbgorICAgIGlmIFsgIngkRlNUWVBFIiA9ICJ4dm1kayIgXSB8fCBbICJ4JEZTVFlQRSIgPSAieGhkZGltZyIgXSB8fCBbICJ4JEZTVFlQRSIgPSAieGhkZGRpcmVjdCIgXTsgdGhlbgorICAgICAgICBNQUNISU5FPWBiYXNlbmFtZSAkVk0gfCBzZWQgLW4gJ3MvLipcKHFlbXV4ODYtNjRcfHFlbXV4ODZcfHFlbXVhcm02NFx8cWVtdWFybVx8cWVtdW1pcHM2NFx8cWVtdW1pcHNcfHFlbXVwcGNcfHFlbXVzaDRcKS4qL1wxL3AnYAorICAgICAgICBpZiBbIC16ICIkTUFDSElORSIgXTsgdGhlbgorICAgICAgICAgICAgZXJyb3IgIlVuYWJsZSB0byBzZXQgTUFDSElORSBmcm9tIGltYWdlIGZpbGVuYW1lIFskVk1dIgorICAgICAgICBmaQorICAgICAgICBlY2hvICJTZXQgTUFDSElORSB0byBbJE1BQ0hJTkVdIGJhc2VkIG9uIGltYWdlIFskVk1dIgorICAgIGVsc2UKKyAgICAgICAgTUFDSElORT1gYmFzZW5hbWUgJEtFUk5FTCB8IHNlZCAtbiAncy8uKlwocWVtdXg4Ni02NFx8cWVtdXg4Nlx8cWVtdWFybTY0XHxxZW11YXJtXHxxZW11bWlwczY0XHxxZW11bWlwc1x8cWVtdXBwY1x8cWVtdXNoNFwpLiovXDEvcCdgCisgICAgICAgIGlmIFsgLXogIiRNQUNISU5FIiBdOyB0aGVuCisgICAgICAgICAgICBlcnJvciAiVW5hYmxlIHRvIHNldCBNQUNISU5FIGZyb20ga2VybmVsIGZpbGVuYW1lIFskS0VSTkVMXSIKKyAgICAgICAgZmkKKyAgICAgICAgZWNobyAiU2V0IE1BQ0hJTkUgdG8gWyRNQUNISU5FXSBiYXNlZCBvbiBrZXJuZWwgWyRLRVJORUxdIgorICAgIGZpCitmaQorCitZT0NUT19LVk1fV0lLST0iaHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9Ib3dfdG9fZW5hYmxlX0tWTV9mb3JfUG9reV9xZW11IgorWU9DVE9fUEFSQVZJUlRfS1ZNX1dJS0k9Imh0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvUnVubmluZ19hbl94ODZfWW9jdG9fTGludXhfaW1hZ2VfdW5kZXJfUUVNVV9LVk0iCisjIERldGVjdCBLVk0gY29uZmlndXJhdGlvbgoraWYgWyAieCRLVk1fRU5BQkxFRCIgPSAieHllcyIgXTsgdGhlbgorICAgIGlmIFsgLXogIiRLVk1fQ0FQQUJMRSIgXTsgdGhlbgorICAgICAgICBlY2hvICJZb3UgYXJlIHRyeWluZyB0byBlbmFibGUgS1ZNIG9uIGEgY3B1IHdpdGhvdXQgVlQgc3VwcG9ydC4iCisgICAgICAgIGVjaG8gIlJlbW92ZSBrdm0gZnJvbSB0aGUgY29tbWFuZC1saW5lLCBvciByZWZlciIKKyAgICAgICAgZWNobyAiJFlPQ1RPX0tWTV9XSUtJIjsKKyAgICAgICAgZXhpdCAxOworICAgIGZpCisgICAgaWYgWyAieCRNQUNISU5FIiAhPSAieHFlbXV4ODYiIC1hICJ4JE1BQ0hJTkUiICE9ICJ4cWVtdXg4Ni02NCIgXTsgdGhlbgorICAgICAgICBlY2hvICJLVk0gb25seSBzdXBwb3J0IHg4NiAmIHg4Ni02NC4gUmVtb3ZlIGt2bSBmcm9tIHRoZSBjb21tYW5kLWxpbmUiOworICAgICAgICBleGl0IDE7CisgICAgZmkKKyAgICBpZiBbICEgLWUgL2Rldi9rdm0gXTsgdGhlbgorICAgICAgICBlY2hvICJNaXNzaW5nIEtWTSBkZXZpY2UuIEhhdmUgeW91IGluc2VydGVkIGt2bSBtb2R1bGVzPyIKKyAgICAgICAgZWNobyAiRm9yIGZ1cnRoZXIgaGVscCBzZWU6IgorICAgICAgICBlY2hvICIkWU9DVE9fS1ZNX1dJS0kiOworICAgICAgICBleGl0IDE7CisgICAgZmkKKyAgICBpZiBbICEgLWUgL2Rldi92aG9zdC1uZXQgXTsgdGhlbgorICAgICAgICBlY2hvICJNaXNzaW5nIHZpcnRpbyBuZXQgZGV2aWNlLiBIYXZlIHlvdSBpbnNlcnRlZCB2aG9zdC1uZXQgbW9kdWxlPyIKKyAgICAgICAgZWNobyAiRm9yIGZ1cnRoZXIgaGVscCBzZWU6IgorICAgICAgICBlY2hvICIkWU9DVE9fUEFSQVZJUlRfS1ZNX1dJS0kiOworICAgICAgICBleGl0IDE7CisgICAgZmkKKyAgICBpZiBbIC13IC9kZXYva3ZtIC1hIC1yIC9kZXYva3ZtIF07IHRoZW4KKyAgICAgICAgU0NSSVBUX1FFTVVfT1BUPSIkU0NSSVBUX1FFTVVfT1BUIC1lbmFibGUta3ZtIgorICAgICAgICBLVk1fQUNUSVZFPSJ5ZXMiCisgICAgZWxzZQorICAgICAgICBlY2hvICJZb3UgaGF2ZSBubyByaWdodHMgb24gL2Rldi9rdm0uIgorICAgICAgICBlY2hvICJQbGVhc2UgY2hhbmdlIHRoZSBvd25lcnNoaXAgb2YgdGhpcyBmaWxlIGFzIGRlc2NyaWJlZCBhdDoiCisgICAgICAgIGVjaG8gIiRZT0NUT19LVk1fV0lLSSI7CisgICAgICAgIGV4aXQgMTsKKyAgICBmaQorICAgIGlmIFsgISAtdyAvZGV2L3Zob3N0LW5ldCAtbyAhIC1yIC9kZXYvdmhvc3QtbmV0IF07IHRoZW4KKwlpZiBbICIkU0xJUlBfRU5BQkxFRCIgIT0gInllcyIgXSA7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIllvdSBoYXZlIG5vIHJpZ2h0cyBvbiAvZGV2L3Zob3N0LW5ldC4iCisgICAgICAgICAgICBlY2hvICJQbGVhc2UgY2hhbmdlIHRoZSBvd25lcnNoaXAgb2YgdGhpcyBmaWxlIGFzIGRlc2NyaWJlZCBhdDoiCisgICAgICAgICAgICBlY2hvICIkWU9DVE9fUEFSQVZJUlRfS1ZNX1dJS0kiOworICAgICAgICAgICAgZXhpdCAxOworCWZpCisgICAgZmkKK2ZpCisKK21hY2hpbmUyPWBlY2hvICRNQUNISU5FIHwgdHIgJ2EteicgJ0EtWicgfCBzZWQgJ3MvLS9fLydgCisjIE1BQ0hJTkUgaXMgbm93IHNldCBmb3IgYWxsIGNhc2VzCisKKyMgRGVmYXVsdHMgdXNlZCB3aGVuIHRoZXNlIHZhcnMgbmVlZCB0byBiZSBpbmZlcnJlZAorUUVNVVg4Nl9ERUZBVUxUX0tFUk5FTD1iekltYWdlLXFlbXV4ODYuYmluCitRRU1VWDg2X0RFRkFVTFRfRlNUWVBFPWV4dDQKKworUUVNVVg4Nl82NF9ERUZBVUxUX0tFUk5FTD1iekltYWdlLXFlbXV4ODYtNjQuYmluCitRRU1VWDg2XzY0X0RFRkFVTFRfRlNUWVBFPWV4dDQKKworUUVNVUFSTV9ERUZBVUxUX0tFUk5FTD16SW1hZ2UtcWVtdWFybS5iaW4KK1FFTVVBUk1fREVGQVVMVF9GU1RZUEU9ZXh0NAorCitRRU1VQVJNNjRfREVGQVVMVF9LRVJORUw9SW1hZ2UtcWVtdWFybTY0LmJpbgorUUVNVUFSTTY0X0RFRkFVTFRfRlNUWVBFPWV4dDQKKworUUVNVU1JUFNfREVGQVVMVF9LRVJORUw9dm1saW51eC1xZW11bWlwcy5iaW4KK1FFTVVNSVBTX0RFRkFVTFRfRlNUWVBFPWV4dDQKKworUUVNVU1JUFNFTF9ERUZBVUxUX0tFUk5FTD12bWxpbnV4LXFlbXVtaXBzZWwuYmluCitRRU1VTUlQU0VMX0RFRkFVTFRfRlNUWVBFPWV4dDQKKworUUVNVU1JUFM2NF9ERUZBVUxUX0tFUk5FTD12bWxpbnV4LXFlbXVtaXBzNjQuYmluCitRRU1VTUlQUzY0X0RFRkFVTFRfRlNUWVBFPWV4dDQKKworUUVNVVNINF9ERUZBVUxUX0tFUk5FTD12bWxpbnV4LXFlbXVtaXBzLmJpbgorUUVNVVNINF9ERUZBVUxUX0ZTVFlQRT1leHQ0CisKK1FFTVVQUENfREVGQVVMVF9LRVJORUw9dm1saW51eC1xZW11cHBjLmJpbgorUUVNVVBQQ19ERUZBVUxUX0ZTVFlQRT1leHQ0CisKK1FFTVVNSUNST0JMQVpFX0RFRkFVTFRfS0VSTkVMPWxpbnV4LmJpbi51YgorUUVNVU1JQ1JPQkxBWkVfREVGQVVMVF9GU1RZUEU9Y3BpbworCitRRU1VWllOUV9ERUZBVUxUX0tFUk5FTD11SW1hZ2UKK1FFTVVaWU5RX0RFRkFVTFRfRlNUWVBFPWNwaW8KKworQUtJVEFfREVGQVVMVF9LRVJORUw9ekltYWdlLWFraXRhLmJpbgorQUtJVEFfREVGQVVMVF9GU1RZUEU9amZmczIKKworU1BJVFpfREVGQVVMVF9LRVJORUw9ekltYWdlLXNwaXR6LmJpbgorU1BJVFpfREVGQVVMVF9GU1RZUEU9ZXh0MworCitzZXR1cF9wYXRoX3ZhcnMoKSB7CisgICAgaWYgWyAteiAiJE9FX1RNUERJUiIgXSA7IHRoZW4KKyAgICAgICAgUEFUSFNfUkVRVUlSRUQ9dHJ1ZQorICAgIGVsaWYgWyAiJDEiID0gIjEiIC1hIC16ICIkREVQTE9ZX0RJUl9JTUFHRSIgXSA7IHRoZW4KKyAgICAgICAgUEFUSFNfUkVRVUlSRUQ9dHJ1ZQorICAgIGVsc2UKKyAgICAgICAgUEFUSFNfUkVRVUlSRUQ9ZmFsc2UKKyAgICBmaQorCisgICAgaWYgWyAiJFBBVEhTX1JFUVVJUkVEIiA9ICJ0cnVlIiBdOyB0aGVuCisgICAgICAgICMgVHJ5IHRvIGdldCB0aGUgdmFyaWFibGUgdmFsdWVzIGZyb20gYml0YmFrZQorICAgICAgICB0eXBlIC1QIGJpdGJha2UgJj4vZGV2L251bGwgfHwgeworICAgICAgICAgICAgZWNobyAiSW4gb3JkZXIgZm9yIHRoaXMgc2NyaXB0IHRvIGR5bmFtaWNhbGx5IGluZmVyIHBhdGhzIjsKKyAgICAgICAgICAgIGVjaG8gInRvIGtlcm5lbHMgb3IgZmlsZXN5c3RlbSBpbWFnZXMsIHlvdSBlaXRoZXIgbmVlZCI7CisgICAgICAgICAgICBlY2hvICJiaXRiYWtlIGluIHlvdXIgUEFUSCBvciB0byBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYiOworICAgICAgICAgICAgZWNobyAiYmVmb3JlIHJ1bm5pbmcgdGhpcyBzY3JpcHQiID4mMjsKKyAgICAgICAgICAgIGV4aXQgMTsgfQorCisgICAgICAgICMgV2UgaGF2ZSBiaXRiYWtlIGluIFBBVEgsIGdldCB0aGUgdmFyaWFibGUgdmFsdWVzIGZyb20gYml0YmFrZQorICAgICAgICBCSVRCQUtFX0VOVl9UTVBGSUxFPWBta3RlbXAgLS10bXBkaXIgcnVucWVtdS5YWFhYWFhYWFhYYAorICAgICAgICBpZiBbICIkPyIgIT0gIjAiIF0gOyB0aGVuCisgICAgICAgICAgICBlY2hvICJFcnJvcjogbWt0ZW1wIGZhaWxlZCBmb3IgYml0YmFrZSBlbnZpcm9ubWVudCBvdXRwdXQiCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKworICAgICAgICBNQUNISU5FPSRNQUNISU5FIGJpdGJha2UgLWUgPiAkQklUQkFLRV9FTlZfVE1QRklMRQorICAgICAgICBpZiBbIC16ICIkT0VfVE1QRElSIiBdIDsgdGhlbgorICAgICAgICAgICAgT0VfVE1QRElSPWBzZWQgLW4gJ3MvXlRNUERJUj1cIlwoLipcKVwiL1wxL3AnICRCSVRCQUtFX0VOVl9UTVBGSUxFYAorICAgICAgICBmaQorICAgICAgICBpZiBbIC16ICIkREVQTE9ZX0RJUl9JTUFHRSIgXSA7IHRoZW4KKyAgICAgICAgICAgIERFUExPWV9ESVJfSU1BR0U9YHNlZCAtbiAncy9eREVQTE9ZX0RJUl9JTUFHRT1cIlwoLipcKVwiL1wxL3AnICRCSVRCQUtFX0VOVl9UTVBGSUxFYAorICAgICAgICBmaQorICAgICAgICBpZiBbIC16ICIkT0VfVE1QRElSIiBdOyB0aGVuCisgICAgICAgICAgICAjIENoZWNrIGZvciBlcnJvcnMgZnJvbSBiaXRiYWtlIHRoYXQgdGhlIHVzZXIgbmVlZHMgdG8ga25vdyBhYm91dAorICAgICAgICAgICAgQklUQkFLRV9PVVRQVVQ9YGNhdCAkQklUQkFLRV9FTlZfVE1QRklMRSB8IHdjIC1sYAorICAgICAgICAgICAgaWYgWyAiJEJJVEJBS0VfT1VUUFVUIiAtZXEgIjAiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJFcnJvcjogdGhpcyBzY3JpcHQgbmVlZHMgdG8gYmUgcnVuIGZyb20geW91ciBidWlsZCBkaXJlY3RvcnksIG9yIHlvdSBuZWVkIgorICAgICAgICAgICAgICAgIGVjaG8gInRvIGV4cGxpY2l0bHkgc2V0IE9FX1RNUERJUiBhbmQgREVQTE9ZX0RJUl9JTUFHRSBpbiB5b3VyIGVudmlyb25tZW50IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVjaG8gIlRoZXJlIHdhcyBhbiBlcnJvciBydW5uaW5nIGJpdGJha2UgdG8gZGV0ZXJtaW5lIFRNUERJUiIKKyAgICAgICAgICAgICAgICBlY2hvICJIZXJlIGlzIHRoZSBvdXRwdXQgZnJvbSAnYml0YmFrZSAtZSc6IgorICAgICAgICAgICAgICAgIGNhdCAkQklUQkFLRV9FTlZfVE1QRklMRQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIHJtICRCSVRCQUtFX0VOVl9UTVBGSUxFCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKyAgICAgICAgcm0gJEJJVEJBS0VfRU5WX1RNUEZJTEUKKyAgICBmaQorfQorCitzZXR1cF9zeXNyb290KCkgeworICAgICMgVG9vbGNoYWluIGluc3RhbGxzIHNldCB1cCAkT0VDT1JFX05BVElWRV9TWVNST09UIGluIHRoZWlyCisgICAgIyBlbnZpcm9ubWVudCBzY3JpcHQuIElmIHRoYXQgdmFyaWFibGUgaXNuJ3Qgc2V0LCB3ZSdyZQorICAgICMgZWl0aGVyIGluIGFuIGluLXRyZWUgYnVpbGQgc2NlbmFyaW8gb3IgdGhlIGVudmlyb25tZW50CisgICAgIyBzY3JpcHQgd2Fzbid0IHNvdXJjZSdkLgorICAgIGlmIFsgLXogIiRPRUNPUkVfTkFUSVZFX1NZU1JPT1QiIF07IHRoZW4KKyAgICAgICAgc2V0dXBfcGF0aF92YXJzCisgICAgICAgIEJVSUxEX0FSQ0g9YHVuYW1lIC1tYAorICAgICAgICBCVUlMRF9PUz1gdW5hbWUgfCB0ciAnW0EtWl0nICdbYS16XSdgCisgICAgICAgIEJVSUxEX1NZUz0iJEJVSUxEX0FSQ0gtJEJVSUxEX09TIgorCisgICAgICAgIE9FQ09SRV9OQVRJVkVfU1lTUk9PVD0kT0VfVE1QRElSL3N5c3Jvb3RzLyRCVUlMRF9TWVMKKyAgICBmaSAKKworICAgICMgU29tZSByZWNpcGVzIHN0b3JlIHRoZSBCSU9TIHVuZGVyICRPRV9UTVBESVIvc3lzcm9vdHMvJE1BQ0hJTkUsCisgICAgIyBub3cgZGVmaW5lZCBhcyBPRUNPUkVfTUFDSElORV9TWVNST09ULiBUaGUgbGF0dGVyIGlzIHVzZWQgd2hlbiBzZWFyY2hpbmcKKyAgICAjIEJJT1MsIFZHQSBCSU9TIGFuZCBrZXltYXBzLgorICAgIGlmIFsgLXogIiRPRUNPUkVfTUFDSElORV9TWVNST09UIiBdOyB0aGVuCisgICAgICAgIE9FQ09SRV9NQUNISU5FX1NZU1JPT1Q9JE9FX1RNUERJUi9zeXNyb290cy8kTUFDSElORQorICAgIGZpCit9CisKKyMgTG9jYXRlIGEgcm9vdGZzIGltYWdlIHRvIGJvb3Qgd2hpY2ggbWF0Y2hlcyBvdXIgZXhwZWN0ZWQKKyMgbWFjaGluZSBhbmQgZnN0eXBlLiAKK2ZpbmRpbWFnZSgpIHsKKyAgICB3aGVyZT0kMQorICAgIG1hY2hpbmU9JDIKKyAgICBleHRlbnNpb249JDMKKworICAgICMgU29ydCByb290ZnMgY2FuZGlkYXRlcyBieSBtb2RpZmljYXRpb24gdGltZSAtIHRoZSBtb3N0CisgICAgIyByZWNlbnRseSBjcmVhdGVkIG9uZSBpcyB0aGUgb25lIHdlIG1vc3QgbGlrZWx5IHdhbnQgdG8gYm9vdC4KKyAgICBmaWxlbmFtZT1gbHMgLXQxICR3aGVyZS8qLWltYWdlKiRtYWNoaW5lLiRleHRlbnNpb24gMj4vZGV2L251bGwgfCBoZWFkIC1uMWAKKyAgICBpZiBbICJ4JGZpbGVuYW1lIiAhPSAieCIgXTsgdGhlbgorICAgICAgICBST09URlM9JGZpbGVuYW1lCisgICAgICAgIHJldHVybgorICAgIGZpCisKKyAgICBlY2hvICJDb3VsZG4ndCBmaW5kIGEgJG1hY2hpbmUgcm9vdGZzIGltYWdlIGluICR3aGVyZS4iCisgICAgZXhpdCAxCit9CisKK2lmIFsgLWUgIiRST09URlMiIC1hIC16ICIkRlNUWVBFIiBdOyB0aGVuCisgICAgIyBFeHRyYWN0IHRoZSBmaWxlbmFtZSBleHRlbnNpb24KKyAgICBFWFQ9YGVjaG8gJFJPT1RGUyB8IGF3ayAtRiAuICd7IHByaW50IFwkTkYgfSdgCisgICAgaWYgWyAieCRFWFQiID0gInhleHQyIiAtbyAieCRFWFQiID0gInhleHQzIiAtbyBcCisgICAgICAgICAgIngkRVhUIiA9ICJ4amZmczIiIC1vICJ4JEVYVCIgPSAieGJ0cmZzIiAtbyBcCisgICAgICAgICAgIngkRVhUIiA9ICJ4ZXh0NCIgXTsgdGhlbgorICAgICAgICBGU1RZUEU9JEVYVAorICAgIGVsc2UKKyAgICAgICAgZWNobyAiTm90ZTogVW5hYmxlIHRvIGRldGVybWluZSBmaWxlc3lzdGVtIGV4dGVuc2lvbiBmb3IgJFJPT1RGUyIKKyAgICAgICAgZWNobyAiV2Ugd2lsbCB1c2UgdGhlIGRlZmF1bHQgRlNUWVBFIGZvciAkTUFDSElORSIKKyAgICAgICAgIyAuLi53aGljaCBpcyBkb25lIGZ1cnRoZXIgYmVsb3cuLi4KKyAgICBmaQorZmkKKworaWYgWyAteiAiJEtFUk5FTCIgLWEgIngkRlNUWVBFIiAhPSAieHZtZGsiIC1hICJ4JEZTVFlQRSIgIT0gInhoZGRpbWciIC1hICJ4JEZTVFlQRSIgIT0gInhoZGRkaXJlY3QiIF07IHRoZW4KKyAgICBzZXR1cF9wYXRoX3ZhcnMgMQorICAgIGV2YWwga2VybmVsX2ZpbGU9XCQke21hY2hpbmUyfV9ERUZBVUxUX0tFUk5FTAorICAgIEtFUk5FTD0kREVQTE9ZX0RJUl9JTUFHRS8ka2VybmVsX2ZpbGUKKworICAgIGlmIFsgLXogIiRLRVJORUwiIF07IHRoZW4KKyAgICAgICAgZXJyb3IgIlVuYWJsZSB0byBkZXRlcm1pbmUgZGVmYXVsdCBrZXJuZWwgZm9yIE1BQ0hJTkUgWyRNQUNISU5FXSIKKyAgICBmaQorZmkKKyMgS0VSTkVMIGlzIG5vdyBzZXQgZm9yIGFsbCBjYXNlcworCitpZiBbIC16ICIkRlNUWVBFIiBdOyB0aGVuCisgICAgZXZhbCBGU1RZUEU9XCQke21hY2hpbmUyfV9ERUZBVUxUX0ZTVFlQRQorCisgICAgaWYgWyAteiAiJEZTVFlQRSIgXTsgdGhlbgorICAgICAgICBlcnJvciAiVW5hYmxlIHRvIGRldGVybWluZSBkZWZhdWx0IGZzdHlwZSBmb3IgTUFDSElORSBbJE1BQ0hJTkVdIgorICAgIGZpCitmaQorCisjIEZTVFlQRSBpcyBub3cgc2V0IGZvciBhbGwgY2FzZXMKKworIyBIYW5kbGUgY2FzZXMgd2hlcmUgYSBST09URlMgdHlwZSBpcyBnaXZlbiBpbnN0ZWFkIG9mIGEgZmlsZW5hbWUsIGUuZy4KKyMgY29yZS1pbWFnZS1zYXRvCitpZiBbICIkTEFaWV9ST09URlMiID0gInRydWUiIF07IHRoZW4KKyAgICBzZXR1cF9wYXRoX3ZhcnMgMQorICAgIGVjaG8gIkFzc3VtaW5nICRST09URlMgcmVhbGx5IG1lYW5zICRERVBMT1lfRElSX0lNQUdFLyRST09URlMtJE1BQ0hJTkUuJEZTVFlQRSIKKyAgICBpZiBbICIkRlNUWVBFIiA9ICJoZGRpbWciIC1vICJ4JEZTVFlQRSIgPSAieGhkZGRpcmVjdCIgXTsgdGhlbgorICAgICAgICBWTT0kREVQTE9ZX0RJUl9JTUFHRS8kUk9PVEZTLSRNQUNISU5FLiRGU1RZUEUKKyAgICBlbHNlCisgICAgICAgIFJPT1RGUz0kREVQTE9ZX0RJUl9JTUFHRS8kUk9PVEZTLSRNQUNISU5FLiRGU1RZUEUKKyAgICBmaQorZmkKKworaWYgWyAteiAiJFJPT1RGUyIgLWEgIngkRlNUWVBFIiAhPSAieHZtZGsiIC1hICJ4JEZTVFlQRSIgIT0gInhoZGRpbWciIC1hICJ4JEZTVFlQRSIgIT0gInhoZGRkaXJlY3QiIF07IHRoZW4KKyAgICBzZXR1cF9wYXRoX3ZhcnMgMQorICAgIFQ9JERFUExPWV9ESVJfSU1BR0UKKyAgICBldmFsIHJvb3Rmc19saXN0PVwkJHttYWNoaW5lMn1fREVGQVVMVF9ST09URlMKKyAgICBmaW5kaW1hZ2UgJFQgJE1BQ0hJTkUgJEZTVFlQRQorCisgICAgaWYgWyAteiAiJFJPT1RGUyIgXTsgdGhlbgorICAgICAgICBlcnJvciAiVW5hYmxlIHRvIGRldGVybWluZSBkZWZhdWx0IHJvb3RmcyBmb3IgTUFDSElORSBbJE1BQ0hJTkVdIgorICAgIGZpCitmaQorIyBST09URlMgaXMgbm93IHNldCBmb3IgYWxsIGNhc2VzLCBub3cgZXhwYW5kIGl0IHRvIGJlIGFuIGFic29sdXRlIHBhdGgsIGl0IHNob3VsZCBleGlzdCBhdCB0aGlzIHBvaW50CisKK1JPT1RGUz1gcmVhZGxpbmsgLWYgJFJPT1RGU2AKKworZWNobyAiIgorZWNobyAiQ29udGludWluZyB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoiCitpZiBbICJ4JEZTVFlQRSIgIT0gInh2bWRrIiAtYSAieCRGU1RZUEUiICE9ICJ4aGRkaW1nIiAtYSAieCRGU1RZUEUiICE9ICJ4aGRkZGlyZWN0IiBdOyB0aGVuCisgICAgZWNobyAiS0VSTkVMOiBbJEtFUk5FTF0iCisgICAgZWNobyAiUk9PVEZTOiBbJFJPT1RGU10iCitlbHNlCisgICAgZWNobyAiVk1ESzogICBbJFZNXSIKK2ZpCitlY2hvICJGU1RZUEU6IFskRlNUWVBFXSIKKworc2V0dXBfc3lzcm9vdAorIyBPRUNPUkVfTkFUSVZFX1NZU1JPT1QgYW5kIE9FQ09SRV9NQUNISU5FX1NZU1JPT1QgYXJlIG5vdyBzZXQgZm9yIGFsbCBjYXNlcworCitJTlRFUk5BTF9TQ1JJUFQ9IiQwLWludGVybmFsIgoraWYgWyAhIC1mICIkSU5URVJOQUxfU0NSSVBUIiAtbyAhIC1yICIkSU5URVJOQUxfU0NSSVBUIiBdOyB0aGVuCitJTlRFUk5BTF9TQ1JJUFQ9YHdoaWNoIHJ1bnFlbXUtaW50ZXJuYWxgCitmaQorCisjIFNwZWNpZnkgZGlyZWN0b3J5IGZvciBCSU9TLCBWR0EgQklPUyBhbmQga2V5bWFwcworaWYgWyAhIC16ICIkQ1VTVE9NQklPU0RJUiIgXTsgdGhlbgorICAgIGlmIFsgLWQgIiRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvJENVU1RPTUJJT1NESVIiIF07IHRoZW4KKyAgICAgICAgZWNobyAiQXNzdW1pbmcgYmlvc2RpciBpcyAkT0VDT1JFX05BVElWRV9TWVNST09ULyRDVVNUT01CSU9TRElSIgorICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLUwgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC8kQ1VTVE9NQklPU0RJUiIKKyAgICBlbGlmIFsgLWQgIiRPRUNPUkVfTUFDSElORV9TWVNST09ULyRDVVNUT01CSU9TRElSIiBdOyB0aGVuCisgICAgICAgIGVjaG8gIkFzc3VtaW5nIGJpb3NkaXIgaXMgJE9FQ09SRV9NQUNISU5FX1NZU1JPT1QvJENVU1RPTUJJT1NESVIiCisgICAgICAgIFNDUklQVF9RRU1VX09QVD0iJFNDUklQVF9RRU1VX09QVCAtTCAkT0VDT1JFX01BQ0hJTkVfU1lTUk9PVC8kQ1VTVE9NQklPU0RJUiIKKyAgICBlbHNlCisgICAgICAgIGlmIFsgISAtZCAiJENVU1RPTUJJT1NESVIiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkN1c3RvbSBCSU9TIGRpcmVjdG9yeSBub3QgZm91bmQuIFRyaWVkOiAkQ1VTVE9NQklPU0RJUiIKKyAgICAgICAgICAgIGVjaG8gImFuZCAkT0VDT1JFX05BVElWRV9TWVNST09ULyRDVVNUT01CSU9TRElSIgorICAgICAgICAgICAgZWNobyAiYW5kICRPRUNPUkVfTUFDSElORV9TWVNST09ULyRDVVNUT01CSU9TRElSIgorICAgICAgICAgICAgZXhpdCAxOworICAgICAgICBmaQorICAgICAgICBlY2hvICJBc3N1bWluZyBiaW9zZGlyIGlzICRDVVNUT01CSU9TRElSIgorICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLUwgJENVU1RPTUJJT1NESVIiCisgICAgZmkKK2ZpCisKKy4gJElOVEVSTkFMX1NDUklQVAorZXhpdCAkPwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtYWRkcHRhYmxlMmltYWdlIGIveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtYWRkcHRhYmxlMmltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwMTk1YWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1hZGRwdGFibGUyaW1hZ2UKQEAgLTAsMCArMSw1MSBAQAorIyEvYmluL3NoCisKKyMgQWRkIGEgcGFydGlvbiB0YWJsZSB0byBhbiBleHQyIGltYWdlIGZpbGUKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgT3BlbmVkSGFuZCBMdGQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworCitJTUFHRT0kMQorSU1BR0VPVVQ9JDIKKworZWNobyAkSU1BR0UKK2VjaG8gJElNQUdFT1VUCisKK3NpemU9YGxzIC1sICRJTUFHRSB8IGF3ayAneyBwcmludCAkNX0nYAorc2l6ZTI9YGV4cHIgJHNpemUgLyA1MTIgLyAxNiAvIDYzYAorCitlY2hvICRzaXplCitlY2hvICRzaXplMgorCisjIE1CUiBTaXplID0gNTEyICogNjMgYnl0ZXMKK2RkIGlmPS9kZXYvemVybyBvZj0kSU1BR0VPVVQgY291bnQ9NjMKKworZWNobyAieCIgPiAvdG1wL2ZkaXNrLmNtZHMKK2VjaG8gImMiID4+IC90bXAvZmRpc2suY21kcworZWNobyAiMTAyNCIgPj4gL3RtcC9mZGlzay5jbWRzCitlY2hvICJoIiA+PiAvdG1wL2ZkaXNrLmNtZHMKK2VjaG8gIjE2IiA+PiAvdG1wL2ZkaXNrLmNtZHMKK2VjaG8gInIiID4+IC90bXAvZmRpc2suY21kcworZWNobyAibiIgPj4gL3RtcC9mZGlzay5jbWRzCitlY2hvICJwIiA+PiAvdG1wL2ZkaXNrLmNtZHMKK2VjaG8gIjEiID4+IC90bXAvZmRpc2suY21kcworZWNobyAiMSIgPj4gL3RtcC9mZGlzay5jbWRzCitlY2hvICIkc2l6ZTIiID4+IC90bXAvZmRpc2suY21kcworZWNobyAidyIgPj4gL3RtcC9mZGlzay5jbWRzCisKKy9zYmluL2ZkaXNrICRJTUFHRU9VVCA8IC90bXAvZmRpc2suY21kcworY2F0ICRJTUFHRSA+PiAkSU1BR0VPVVQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWV4cG9ydC1yb290ZnMgYi95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1leHBvcnQtcm9vdGZzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwYWIyMDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1leHBvcnQtcm9vdGZzCkBAIC0wLDAgKzEsMTYzIEBACisjIS9iaW4vYmFzaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKwordXNhZ2UoKSB7CisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR9IDxuZnMtZXhwb3J0LWRpcj4iCit9CisKK2lmIFsgJCMgIT0gMiBdOyB0aGVuCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK2lmIFtbICIkMSIgIT0gInN0YXJ0IiAmJiAiJDEiICE9ICJzdG9wIiAmJiAiJDEiICE9ICJyZXN0YXJ0IiBdXTsgdGhlbgorCWVjaG8gIlVua25vd24gY29tbWFuZCAnJDEnIgorCXVzYWdlCisJZXhpdCAxCitmaQorCitpZiBbICEgLWQgIiQyIiBdOyB0aGVuCisJZWNobyAiRXJyb3I6ICckMicgZG9lcyBub3QgZXhpc3QiCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisjIEVuc3VyZSB0aGUgbmZzLWV4cG9ydC1kaXIgaXMgYW4gYWJzb2x1dGUgcGF0aAorTkZTX0VYUE9SVF9ESVI9JChjZCAiJDIiICYmIHB3ZCkKKworU1lTUk9PVF9TRVRVUF9TQ1JJUFQ9YHdoaWNoIG9lLWZpbmQtbmF0aXZlLXN5c3Jvb3QgMj4gL2Rldi9udWxsYAoraWYgWyAteiAiJFNZU1JPT1RfU0VUVVBfU0NSSVBUIiBdOyB0aGVuCisJZWNobyAiRXJyb3I6IFVuYWJsZSB0byBmaW5kIHRoZSBvZS1maW5kLW5hdGl2ZS1zeXNyb290IHNjcmlwdCIKKwllY2hvICJEaWQgeW91IGZvcmdldCB0byBzb3VyY2UgeW91ciBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQ/IgorCWV4aXQgMQorZmkKKy4gJFNZU1JPT1RfU0VUVVBfU0NSSVBUCisKK2lmIFsgISAtZSAiJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC91c3Ivc2Jpbi91bmZzZCIgXTsgdGhlbgorCWVjaG8gIkVycm9yOiBVbmFibGUgdG8gZmluZCB1bmZzZCBiaW5hcnkgaW4gJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC91c3Ivc2Jpbi8iCisKKwlpZiBbICJ4JE9FQ09SRV9ESVNUUk9fVkVSU0lPTiIgPSAieCIgXTsgdGhlbgorCQllY2hvICJIYXZlIHlvdSBydW4gJ2JpdGJha2UgbWV0YS1pZGUtc3VwcG9ydCc/IgorCWVsc2UKKwkJZWNobyAiVGhpcyBzaG91bGRuJ3QgaGFwcGVuIC0gc29tZXRoaW5nIGlzIG1pc3NpbmcgZnJvbSB5b3VyIHRvb2xjaGFpbiBpbnN0YWxsYXRpb24iCisJZmkKKwlleGl0IDEKK2ZpCisKK2lmIFsgISAtZCB+Ly5ydW5xZW11LXNkayBdOyB0aGVuCisJbWtkaXIgLXAgfi8ucnVucWVtdS1zZGsKK2ZpCisKK05GU19JTlNUQU5DRT0ke05GU19JTlNUQU5DRTo9MH0KK0VYUE9SVFM9fi8ucnVucWVtdS1zZGsvZXhwb3J0cyRORlNfSU5TVEFOQ0UKK1JNVEFCPX4vLnJ1bnFlbXUtc2RrL3JtdGFiJE5GU19JTlNUQU5DRQorTkZTUElEPX4vLnJ1bnFlbXUtc2RrL25mcyRORlNfSU5TVEFOQ0UucGlkCitNT1VOVFBJRD1+Ly5ydW5xZW11LXNkay9tb3VudCRORlNfSU5TVEFOQ0UucGlkCisKK1BTRVVET19PUFRTPSItUCAkT0VDT1JFX05BVElWRV9TWVNST09UL3VzciIKK1BTRVVET19MT0NBTFNUQVRFRElSPSIkTkZTX0VYUE9SVF9ESVIvLi4vJChiYXNlbmFtZSAkTkZTX0VYUE9SVF9ESVIpLnBzZXVkb19zdGF0ZSIKK2V4cG9ydCBQU0VVRE9fTE9DQUxTVEFURURJUgorCitpZiBbICEgLWQgIiRQU0VVRE9fTE9DQUxTVEFURURJUiIgXTsgdGhlbgorCWVjaG8gIkVycm9yOiAkUFNFVURPX0xPQ0FMU1RBVEVESVIgZG9lcyBub3QgZXhpc3QuIgorCWVjaG8gIkRpZCB5b3UgY3JlYXRlIHRoZSBleHBvcnQgZGlyZWN0b3J5IHVzaW5nIHJ1bnFlbXUtZXh0cmFjdC1zZGs/IgorCWV4aXQgMQkKK2ZpCisKKyMgcnBjLm1vdW50ZCBSUEMgcG9ydAorTkZTX01PVU5UUFJPRz0kWyAyMTExMSArICRORlNfSU5TVEFOQ0UgXQorIyBycGMubmZzZCBSUEMgcG9ydAorTkZTX05GU1BST0c9JFsgMTExMTEgKyAkTkZTX0lOU1RBTkNFIF0KKyMgTkZTIHBvcnQgbnVtYmVyCitORlNfUE9SVD0kWyAzMDQ5ICsgMiAqICRORlNfSU5TVEFOQ0UgXQorIyBtb3VudGQgcG9ydCBudW1iZXIKK01PVU5UX1BPUlQ9JFsgMzA0OCArIDIgKiAkTkZTX0lOU1RBTkNFIF0KKworIyMgRm9yIGRlYnVnZ2luZyB5b3Ugd291bGQgYWRkaXRpb25hbGx5IGFkZAorIyMgLS1kZWJ1ZyBhbGwKK1VORlNEX09QVFM9Ii1wIC1OIC1pICRORlNQSUQgLWUgJEVYUE9SVFMgLXggJE5GU19ORlNQUk9HIC1uICRORlNfUE9SVCAteSAkTkZTX01PVU5UUFJPRyAtbSAkTU9VTlRfUE9SVCIKKworIyBTZXR1cCB0aGUgZXhwb3J0cyBmaWxlCitpZiBbICIkMSIgPSAic3RhcnQiIF07IHRoZW4KKwllY2hvICJDcmVhdGluZyBleHBvcnRzIGZpbGUuLi4iCisJZWNobyAiJE5GU19FWFBPUlRfRElSIChydyxhc3luYyxub19yb290X3NxdWFzaCxub19hbGxfc3F1YXNoLGluc2VjdXJlKSIgPiAkRVhQT1JUUworZmkKKworIyBTZWUgaG93IHdlIHdlcmUgY2FsbGVkLgorY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCVBPUlRNQVBfUlVOTklORz1gcHMgLWVmIHwgZ3JlcCBwb3J0bWFwIHwgZ3JlcCAtdiBncmVwYAorCVJQQ0JJTkRfUlVOTklORz1gcHMgLWVmIHwgZ3JlcCBycGNiaW5kIHwgZ3JlcCAtdiBncmVwYAorCWlmIFtbICJ4JFBPUlRNQVBfUlVOTklORyIgPSAieCIgJiYgIngkUlBDQklORF9SVU5OSU5HIiA9ICJ4IiBdXTsgdGhlbgorCQllY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgorCQllY2hvICJFcnJvcjogbmVpdGhlciBycGNiaW5kIG5vciBwb3J0bWFwIGFwcGVhciB0byBiZSBydW5uaW5nIgorCQllY2hvICJQbGVhc2UgaW5zdGFsbCBhbmQgc3RhcnQgb25lIG9mIHRoZXNlIHNlcnZpY2VzIGZpcnN0IgorCQllY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgorCQllY2hvICJUaXA6IGZvciByZWNlbnQgVWJ1bnR1IGhvc3RzLCBydW46IgorCQllY2hvICIgIHN1ZG8gYXB0LWdldCBpbnN0YWxsIHJwY2JpbmQiCisJCWVjaG8gIlRoZW4gYWRkIE9QVElPTlM9XCItaSAtd1wiICB0byAvZXRjL2RlZmF1bHQvcnBjYmluZCBhbmQgcnVuIgorCQllY2hvICIgIHN1ZG8gc2VydmljZSBwb3J0bWFwIHJlc3RhcnQiCisKKwkJZXhpdCAxCisJZmkKKworCWVjaG8gIlN0YXJ0aW5nIFVzZXIgTW9kZSBuZnNkIgorCWVjaG8gIiAgJFBTRVVETyAkUFNFVURPX09QVFMgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC91c3Ivc2Jpbi91bmZzZCAkVU5GU0RfT1BUUyIKKwkkUFNFVURPICRQU0VVRE9fT1BUUyAkT0VDT1JFX05BVElWRV9TWVNST09UL3Vzci9zYmluL3VuZnNkICRVTkZTRF9PUFRTCisJaWYgWyAhICQ/ID0gMCBdOyB0aGVuCisJCWVjaG8gIkVycm9yIHN0YXJ0aW5nIG5mc2QiCisJCWV4aXQgMQorCWZpCisJIyBDaGVjayB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBzdGFydGVkIG9rLgorCWlmIFsgISAtZiAkTkZTUElEIF07IHRoZW4KKwkJZWNobyAicnBjLm5mc2QgZGlkIG5vdCBzdGFydCBjb3JyZWN0bHkiCisJCWV4aXQgMQorCWZpCisJcHMgLWZwIGBjYXQgJE5GU1BJRGAgPiAvZGV2L251bGwgMj4gL2Rldi9udWxsCisJaWYgWyAhICQ/ID0gMCBdOyB0aGVuCisJCWVjaG8gInJwYy5uZnNkIGRpZCBub3Qgc3RhcnQgY29ycmVjdGx5IgorCQlleGl0IDEKKwlmaQorCWVjaG8gIiAiCisJZWNobyAiT24geW91ciB0YXJnZXQgcGxlYXNlIHJlbWVtYmVyIHRvIGFkZCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZm9yIE5GUyIKKwllY2hvICJuZnNyb290PUlQX0FERFJFU1M6JE5GU19FWFBPUlRfRElSLG5mc3ZlcnM9Myxwb3J0PSRORlNEX1BPUlQsbW91bnRwcm9nPSRNT1VOVERfUlBDUE9SVCxuZnNwcm9nPSRORlNEX1JQQ1BPUlQsdWRwLG1vdW50cG9ydD0kTU9VTlREX1BPUlQiCisJOzsKKyAgc3RvcCkKKwlpZiBbIC1mICIkTkZTUElEIiBdOyB0aGVuCisJCWVjaG8gIlN0b3BwaW5nIHJwYy5uZnNkIgorCQlraWxsIGBjYXQgJE5GU1BJRGAKKwkJcm0gLWYgJE5GU1BJRAorCWVsc2UKKwkJZWNobyAiTm8gUElEIGZpbGUsIG5vdCBzdG9wcGluZyBycGMubmZzZCIKKwlmaQorCWlmIFsgLWYgIiRFWFBPUlRTIiBdOyB0aGVuCisJCWVjaG8gIlJlbW92aW5nIGV4cG9ydHMgZmlsZSIKKwkJcm0gLWYgJEVYUE9SVFMKKwlmaQorCTs7CisgIHJlc3RhcnQpCisJJDAgc3RvcCAkTkZTX0VYUE9SVF9ESVIKKwkkMCBzdGFydCAkTkZTX0VYUE9SVF9ESVIgCisJaWYgWyAhICQ/ID0gMCBdOyB0aGVuCisJCWV4aXQgMQorCWZpCisJOzsKKyAgKikKKwllY2hvICIkMCB7c3RhcnR8c3RvcHxyZXN0YXJ0fSA8bmZzLWV4cG9ydC1kaXI+IgorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtZXh0cmFjdC1zZGsgYi95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1leHRyYWN0LXNkawpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMmRkZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtZXh0cmFjdC1zZGsKQEAgLTAsMCArMSwxMDQgQEAKKyMhL2Jpbi9iYXNoCisjCisjIFRoaXMgdXRpbGl0eSBleHRyYWN0cyBhbiBTREsgaW1hZ2UgdGFyYmFsbCB1c2luZyBwc2V1ZG8sIGFuZCBzdG9yZXMKKyMgdGhlIHBzZXVkbyBkYXRhYmFzZSBpbiB2YXIvcHNldWRvIHdpdGhpbiB0aGUgcm9vdGZzLiBJZiB5b3Ugd2FudCB0bworIyBib290IFFFTVUgdXNpbmcgYW4gbmZzcm9vdCwgeW91ICptdXN0KiB1c2UgdGhpcyBzY3JpcHQgdG8gY3JlYXRlIHRoZQorIyByb290ZnMgdG8gZW5zdXJlIGl0IGlzIGRvbmUgY29ycmVjdGx5IHdpdGggcHNldWRvLgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgSW50ZWwgQ29ycC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworZnVuY3Rpb24gdXNhZ2UoKSB7CisJZWNobyAiVXNhZ2U6ICQwIDxpbWFnZS10YXJiYWxsPiA8ZXh0cmFjdC1kaXI+IgorfQorCitpZiBbICQjIC1uZSAyIF07IHRoZW4KKwl1c2FnZQorCWV4aXQgMQorZmkKKworU1lTUk9PVF9TRVRVUF9TQ1JJUFQ9YHdoaWNoIG9lLWZpbmQtbmF0aXZlLXN5c3Jvb3QgMj4gL2Rldi9udWxsYAoraWYgWyAteiAiJFNZU1JPT1RfU0VUVVBfU0NSSVBUIiBdOyB0aGVuCisgICAgZWNobyAiRXJyb3I6IFVuYWJsZSB0byBmaW5kIHRoZSBvZS1maW5kLW5hdGl2ZS1zeXNyb290IHNjcmlwdCIKKyAgICBlY2hvICJEaWQgeW91IGZvcmdldCB0byBzb3VyY2UgeW91ciBidWlsZCBzeXN0ZW0gZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0PyIKKyAgICBleGl0IDEKK2ZpCisuICRTWVNST09UX1NFVFVQX1NDUklQVAorUFNFVURPX09QVFM9Ii1QICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvdXNyIgorCitST09URlNfVEFSQkFMTD0kMQorU0RLX1JPT1RGU19ESVI9JDIKKworaWYgWyAhIC1lICIkUk9PVEZTX1RBUkJBTEwiIF07IHRoZW4KKyAgIAllY2hvICJFcnJvcjogc2RrIHRhcmJhbGwgJyRST09URlNfVEFSQkFMTCcgZG9lcyBub3QgZXhpc3QiCisgICAJdXNhZ2UKKyAgIAlleGl0IDEKK2ZpCisKKyMgQ29udmVydCBTREtfUk9PVEZTX0RJUiB0byBhIGZ1bGwgcGF0aG5hbWUKK2lmIFtbICR7U0RLX1JPT1RGU19ESVI6MDoxfSAhPSAiLyIgXV07IHRoZW4KKwlTREtfUk9PVEZTX0RJUj0kKHJlYWRsaW5rIC1mICQocHdkKS8kU0RLX1JPT1RGU19ESVIpCitmaQorCitUQVJfT1BUUz0iIgoraWYgW1sgIiRST09URlNfVEFSQkFMTCIgPX4gdGFyXC5iejIkIF1dOyB0aGVuCisJVEFSX09QVFM9Ii0tbnVtZXJpYy1vd25lciAteGpmIgorZmkKK2lmIFtbICIkUk9PVEZTX1RBUkJBTEwiID1+IHRhclwuZ3okIF1dOyB0aGVuCisJVEFSX09QVFM9Ii0tbnVtZXJpYy1vd25lciAteHpmIgorZmkKK2lmIFtbICIkUk9PVEZTX1RBUkJBTEwiID1+IFwudGFyJCBdXTsgdGhlbgorCVRBUl9PUFRTPSItLW51bWVyaWMtb3duZXIgLXhmIgorZmkKK2lmIFsgLXogIiRUQVJfT1BUUyIgXTsgdGhlbgorCWVjaG8gIkVycm9yOiBVbmFibGUgdG8gZGV0ZXJtaW5lIHNkayB0YXJiYWxsIGZvcm1hdCIKKwllY2hvICJBY2NlcHRlZCB0eXBlczogLnRhciAvIC50YXIuZ3ogLyAudGFyLmJ6MiIKKwlleGl0IDEKK2ZpCisKK2lmIFsgISAtZCAiJFNES19ST09URlNfRElSIiBdOyB0aGVuCisJZWNobyAiQ3JlYXRpbmcgZGlyZWN0b3J5ICRTREtfUk9PVEZTX0RJUiIKKwlta2RpciAtcCAiJFNES19ST09URlNfRElSIgorZmkKKworcHNldWRvX3N0YXRlX2Rpcj0iJFNES19ST09URlNfRElSLy4uLyQoYmFzZW5hbWUgIiRTREtfUk9PVEZTX0RJUiIpLnBzZXVkb19zdGF0ZSIKK3BzZXVkb19zdGF0ZV9kaXI9IiQocmVhZGxpbmsgLWYgJHBzZXVkb19zdGF0ZV9kaXIpIgorCitpZiBbIC1lICIkcHNldWRvX3N0YXRlX2RpciIgXTsgdGhlbgorCWVjaG8gIkVycm9yOiAkcHNldWRvX3N0YXRlX2RpciBhbHJlYWR5IGV4aXN0cyEiCisJZWNobyAiUGxlYXNlIGRlbGV0ZSB0aGUgcm9vdGZzIHRyZWUgYW5kIHBzZXVkbyBkaXJlY3RvcnkgbWFudWFsbHkiCisgICAgICAgIGVjaG8gImlmIHRoaXMgaXMgcmVhbGx5IHdoYXQgeW91IHdhbnQuIgorCWV4aXQgMQorZmkKKworbWtkaXIgLXAgIiRwc2V1ZG9fc3RhdGVfZGlyIgordG91Y2ggIiRwc2V1ZG9fc3RhdGVfZGlyL3BzZXVkby5waWQiCitQU0VVRE9fTE9DQUxTVEFURURJUj0iJHBzZXVkb19zdGF0ZV9kaXIiCitleHBvcnQgUFNFVURPX0xPQ0FMU1RBVEVESVIKKworZWNobyAiRXh0cmFjdGluZyByb290ZnMgdGFyYmFsbCB1c2luZyBwc2V1ZG8uLi4iCitlY2hvICIkUFNFVURPICRQU0VVRE9fT1BUUyB0YXIgLUMgXCIkU0RLX1JPT1RGU19ESVJcIiAkVEFSX09QVFMgXCIkUk9PVEZTX1RBUkJBTExcIiIKKyRQU0VVRE8gJFBTRVVET19PUFRTIHRhciAtQyAiJFNES19ST09URlNfRElSIiAkVEFSX09QVFMgIiRST09URlNfVEFSQkFMTCIKKworRElSQ0hFQ0s9YGxzIC1sICIkU0RLX1JPT1RGU19ESVIiIHwgd2MgLWxgCitpZiBbICIkRElSQ0hFQ0siIC1sdCA1IF07IHRoZW4KKwllY2hvICJXYXJuaW5nOiBJIGRvbid0IHNlZSBtYW55IGZpbGVzIGluICRTREtfUk9PVEZTX0RJUiIKKwllY2hvICJQbGVhc2UgZG91YmxlLWNoZWNrIHRoZSBleHRyYWN0aW9uIHdvcmtlZCBhcyBpbnRlbmRlZCIKKwlleGl0IDAKK2ZpCisKK2VjaG8gIlNESyBpbWFnZSBzdWNjZXNzZnVsbHkgZXh0cmFjdGVkIHRvICRTREtfUk9PVEZTX0RJUiIKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1nZW4tdGFwZGV2cyBiL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWdlbi10YXBkZXZzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQzYjI3YmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1nZW4tdGFwZGV2cwpAQCAtMCwwICsxLDkxIEBACisjIS9iaW4vYmFzaAorIworIyBDcmVhdGUgYSAiYmFuayIgb2YgdGFwIG5ldHdvcmsgZGV2aWNlcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZQorIyBydW5xZW11IHNjcmlwdC4gVGhpcyBzY3JpcHQgbmVlZHMgdG8gYmUgcnVuIGFzIHJvb3QsIGFuZCB3aWxsCisjIHVzZSB0aGUgdHVuY3RsIGJpbmFyeSBmcm9tIHRoZSBidWlsZCBzeXN0ZW0gc3lzcm9vdC4gTm90ZTogbWFueSBMaW51eCAKKyMgZGlzdHJvcyB0aGVzZSBkYXlzIHN0aWxsIHVzZSBhbiBvbGRlciB2ZXJzaW9uIG9mIHR1bmN0bCB3aGljaCBkb2VzIG5vdAorIyBzdXBwb3J0IHRoZSBncm91cCBwZXJtaXNzaW9ucyBvcHRpb24sIGhlbmNlIHRoZSBuZWVkIHRvIHVzZSB0aGUgYnVpbGQKKyMgc3lzdGVtIHByb3ZpZGVkIHZlcnNpb24uCisjCisjIENvcHlyaWdodCAoQykgMjAxMCBJbnRlbCBDb3JwLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCit1c2FnZSgpIHsKKwllY2hvICJVc2FnZTogc3VkbyAkMCA8dWlkPiA8Z2lkPiA8bnVtPiA8bmF0aXZlLXN5c3Jvb3QtYmFzZWRpcj4iCisgICAgICAgIGVjaG8gIldoZXJlIDx1aWQ+IGlzIHRoZSBudW1lcmljIHVzZXIgaWQgdGhlIHRhcCBkZXZpY2VzIHdpbGwgYmUgb3duZWQgYnkiCisJZWNobyAiV2hlcmUgPGdpZD4gaXMgdGhlIG51bWVyaWMgZ3JvdXAgaWQgdGhlIHRhcCBkZXZpY2VzIHdpbGwgYmUgb3duZWQgYnkiCisJZWNobyAiPG51bT4gaXMgdGhlIG51bWJlciBvZiB0YXAgZGV2aWNlcyB0byBjcmVhdGUgKDAgdG8gcmVtb3ZlIGFsbCkiCisJZWNobyAiPG5hdGl2ZS1zeXNyb290LWJhc2VkaXI+IGlzIHRoZSBwYXRoIHRvIHRoZSBidWlsZCBzeXN0ZW0ncyBuYXRpdmUgc3lzcm9vdCIKKwlleGl0IDEKK30KKworaWYgWyAkRVVJRCAtbmUgMCBdOyB0aGVuCisJZWNobyAiRXJyb3I6IFRoaXMgc2NyaXB0IG11c3QgYmUgcnVuIHdpdGggcm9vdCBwcml2aWxlZ2VzIgorCWV4aXQKK2ZpCisKK2lmIFsgJCMgLW5lIDQgXTsgdGhlbgorCWVjaG8gIkVycm9yOiBJbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyIKKwl1c2FnZQorZmkKKworVFVJRD0kMQorR0lEPSQyCitDT1VOVD0kMworU1lTUk9PVD0kNAorCitUVU5DVEw9JFNZU1JPT1QvdXNyL2Jpbi90dW5jdGwKK2lmIFtbICEgLXggIiRUVU5DVEwiIHx8IC1kICIkVFVOQ1RMIiBdXTsgdGhlbgorCWVjaG8gIkVycm9yOiAkVFVOQ1RMIGlzIG5vdCBhbiBleGVjdXRhYmxlIgorCXVzYWdlCitmaQorCitTQ1JJUFRfRElSPWBkaXJuYW1lICQwYAorUlVOUUVNVV9JRlVQPSIkU0NSSVBUX0RJUi9ydW5xZW11LWlmdXAiCitpZiBbICEgLXggIiRSVU5RRU1VX0lGVVAiIF07IHRoZW4KKwllY2hvICJFcnJvcjogVW5hYmxlIHRvIGZpbmQgdGhlIHJ1bnFlbXUtaWZ1cCBzY3JpcHQgaW4gJFNDUklQVF9ESVIiCisJZXhpdCAxCitmaQorCitJRkNPTkZJRz1gd2hpY2ggaXAgMj4gL2Rldi9udWxsYAoraWYgWyAteiAiJElGQ09ORklHIiBdOyB0aGVuCisJIyBJcyBpdCBldmVyIGFueXdoZXJlIGVsc2U/CisJSUZDT05GSUc9L3NiaW4vaXAKK2ZpCitpZiBbICEgLXggIiRJRkNPTkZJRyIgXTsgdGhlbgorICAgICAgIGVjaG8gIiRJRkNPTkZJRyBjYW5ub3QgYmUgZXhlY3V0ZWQiCisgICAgICAgZXhpdCAxCitmaQorCisjIEVuc3VyZSB3ZSBzdGFydCB3aXRoIGEgY2xlYW4gc2xhdGUKK2ZvciB0YXAgaW4gYCRJRkNPTkZJRyBsaW5rIHwgZ3JlcCB0YXAgfCBhd2sgJ3sgcHJpbnQgXCQyIH0nIHwgc2VkIHMvOi8vYDsgZG8KKwllY2hvICJOb3RlOiBEZXN0cm95aW5nIHByZS1leGlzdGluZyB0YXAgaW50ZXJmYWNlICR0YXAuLi4iCisJJFRVTkNUTCAtZCAkdGFwCitkb25lCisKK2VjaG8gIkNyZWF0aW5nICRDT1VOVCB0YXAgZGV2aWNlcyBmb3IgVUlEOiAkVFVJRCBHSUQ6ICRHSUQuLi4iCitmb3IgKChpbmRleD0wOyBpbmRleCA8ICRDT1VOVDsgaW5kZXgrKykpOyBkbworCWVjaG8gIkNyZWF0aW5nIHRhcCRpbmRleCIKKwlpZnVwPWAkUlVOUUVNVV9JRlVQICRUVUlEICRHSUQgJFNZU1JPT1QgMj4mMWAKKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJZWNobyAiRXJyb3IgcnVubmluZyB0dW5jdGw6ICRpZnVwIgorCQlleGl0IDEKKwlmaQorZG9uZQorCisjIFRoZSBydW5xZW11IHNjcmlwdCB3aWxsIGNoZWNrIGZvciB0aGlzIGZpbGUsIGFuZCBpZiBpdCBleGlzdHMsCisjIHdpbGwgdXNlIHRoZSBleGlzdGluZyBiYW5rIG9mIHRhcCBkZXZpY2VzIHdpdGhvdXQgY3JlYXRpbmcKKyMgYWRkaXRpb25hbCBvbmVzIHZpYSBzdWRvLgordG91Y2ggL2V0Yy9ydW5xZW11LW5vc3VkbwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtaWZkb3duIGIveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtaWZkb3duCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhmNjZjZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1pZmRvd24KQEAgLTAsMCArMSw2NiBAQAorIyEvYmluL2Jhc2gKKyMKKyMgUUVNVSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gc2NyaXB0IHRvIGJyaW5nIGRvd24gdGFwIGRldmljZXMuIFRoaXMKKyMgdXRpbGl0eSBuZWVkcyB0byBiZSBydW4gYXMgcm9vdCwgYW5kIHdpbGwgdXNlIHRoZSB0dW5jdGwgYmluYXJ5CisjIGZyb20gdGhlIG5hdGl2ZSBzeXNyb290LiAKKyMKKyMgSWYgeW91IGZpbmQgeW91cnNlbGYgY2FsbGluZyB0aGlzIHNjcmlwdCBhIGxvdCwgeW91IGNhbiBhZGQgdGhlCisjIHRoZSBmb2xsb3dpbmcgdG8geW91ciAvZXRjL3N1ZG9lcnMgZmlsZSB0byBiZSBhYmxlIHRvIHJ1biB0aGlzCisjIGNvbW1hbmQgd2l0aG91dCBlbnRlcmluZyB5b3VyIHBhc3N3b3JkIGVhY2ggdGltZToKKyMKKyMgPG15LXVzZXJuYW1lPiBBTEw9Tk9QQVNTV0Q6IC9wYXRoL3RvL3J1bnFlbXUtaWZ1cAorIyA8bXktdXNlcm5hbWU+IEFMTD1OT1BBU1NXRDogL3BhdGgvdG8vcnVucWVtdS1pZmRvd24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMTEgTGludXggRm91bmRhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCit1c2FnZSgpIHsKKwllY2hvICJzdWRvICQoYmFzZW5hbWUgJDApIDx0YXAtZGV2PiA8bmF0aXZlLXN5c3Jvb3QtYmFzZWRpcj4iCit9CisKK2lmIFsgJEVVSUQgLW5lIDAgXTsgdGhlbgorCWVjaG8gIkVycm9yOiBUaGlzIHNjcmlwdCAocnVucWVtdS1pZmRvd24pIG11c3QgYmUgcnVuIHdpdGggcm9vdCBwcml2aWxlZ2VzIgorCWV4aXQgMQorZmkKKworaWYgWyAkIyAtbmUgMiBdOyB0aGVuCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK1RBUD0kMQorTkFUSVZFX1NZU1JPT1RfRElSPSQyCisKK1RVTkNUTD0kTkFUSVZFX1NZU1JPT1RfRElSL3Vzci9iaW4vdHVuY3RsCitpZiBbICEgLWUgIiRUVU5DVEwiIF07IHRoZW4KKwllY2hvICJFcnJvcjogVW5hYmxlIHRvIGZpbmQgdHVuY3RsIGJpbmFyeSBpbiAnJE5BVElWRV9TWVNST09UX0RJUi91c3IvYmluJywgcGxlYXNlIGJpdGJha2UgcWVtdS1oZWxwZXItbmF0aXZlIgorCWV4aXQgMQorZmkKKworJFRVTkNUTCAtZCAkVEFQCisKKyMgY2xlYW51cCB0aGUgcmVtYWluaW5nIGlwdGFibGVzIHJ1bGVzCitJUFRBQkxFUz1gd2hpY2ggaXB0YWJsZXMgMj4gL2Rldi9udWxsYAoraWYgWyAieCRJUFRBQkxFUyIgPSAieCIgXTsgdGhlbgorCUlQVEFCTEVTPS9zYmluL2lwdGFibGVzCitmaQoraWYgWyAhIC14ICIkSVBUQUJMRVMiIF07IHRoZW4KKwllY2hvICIkSVBUQUJMRVMgY2Fubm90IGJlIGV4ZWN1dGVkIgorCWV4aXQgMQorZmkKK249JFsgKGBlY2hvICRUQVAgfCBzZWQgJ3MvdGFwLy8nYCAqIDIpICsgMSBdCitkZXN0PSRbIChgZWNobyAkVEFQIHwgc2VkICdzL3RhcC8vJ2AgKiAyKSArIDIgXQorJElQVEFCTEVTIC1EIFBPU1RST1VUSU5HIC10IG5hdCAtaiBNQVNRVUVSQURFIC1zIDE5Mi4xNjguNy4kbi8zMgorJElQVEFCTEVTIC1EIFBPU1RST1VUSU5HIC10IG5hdCAtaiBNQVNRVUVSQURFIC1zIDE5Mi4xNjguNy4kZGVzdC8zMgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtaWZ1cCBiL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWlmdXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjVhM2RiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWlmdXAKQEAgLTAsMCArMSwxMDYgQEAKKyMhL2Jpbi9iYXNoCisjCisjIFFFTVUgbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBzY3JpcHQuIFRoaXMgdXRpbGl0eSBuZWVkcyB0bworIyBiZSBydW4gYXMgcm9vdCwgYW5kIHdpbGwgdXNlIHRoZSB0dW5jdGwgYmluYXJ5IGZyb20gYSBuYXRpdmUgc3lzcm9vdC4KKyMgTm90ZTogbWFueSBMaW51eCBkaXN0cm9zIHRoZXNlIGRheXMgc3RpbGwgdXNlIGFuIG9sZGVyIHZlcnNpb24gb2YKKyMgdHVuY3RsIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgdGhlIGdyb3VwIHBlcm1pc3Npb25zIG9wdGlvbiwgaGVuY2UKKyMgdGhlIG5lZWQgdG8gdXNlIGJ1aWxkIHN5c3RlbSdzIHZlcnNpb24uCisjCisjIElmIHlvdSBmaW5kIHlvdXJzZWxmIGNhbGxpbmcgdGhpcyBzY3JpcHQgYSBsb3QsIHlvdSBjYW4gYWRkIHRoZQorIyB0aGUgZm9sbG93aW5nIHRvIHlvdXIgL2V0Yy9zdWRvZXJzIGZpbGUgdG8gYmUgYWJsZSB0byBydW4gdGhpcworIyBjb21tYW5kIHdpdGhvdXQgZW50ZXJpbmcgeW91ciBwYXNzd29yZCBlYWNoIHRpbWU6CisjCisjIDxteS11c2VybmFtZT4gQUxMPU5PUEFTU1dEOiAvcGF0aC90by9ydW5xZW11LWlmdXAKKyMgPG15LXVzZXJuYW1lPiBBTEw9Tk9QQVNTV0Q6IC9wYXRoL3RvL3J1bnFlbXUtaWZkb3duCisjCisjIElmIHlvdSdkIGxpa2UgdG8gY3JlYXRlIGEgYmFuayBvZiB0YXAgZGV2aWNlcyBhdCBvbmNlLCB5b3Ugc2hvdWxkIHVzZQorIyB0aGUgcnVucWVtdS1nZW4tdGFwZGV2cyBzY3JpcHQgaW5zdGVhZC4gSWYgdGFwIGRldmljZXMgYXJlIHNldCB1cCB1c2luZworIyB0aGF0IHNjcmlwdCwgdGhlIHJ1bnFlbXUgc2NyaXB0IHdpbGwgbmV2ZXIgZW5kIHVwIGNhbGxpbmcgdGhpcworIyBzY3JpcHQuCisjCisjIENvcHlyaWdodCAoYykgMjAwNi0yMDExIExpbnV4IEZvdW5kYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCVNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKwordXNhZ2UoKSB7CisJZWNobyAic3VkbyAkKGJhc2VuYW1lICQwKSA8dWlkPiA8Z2lkPiA8bmF0aXZlLXN5c3Jvb3QtYmFzZWRpcj4iCit9CisKK2lmIFsgJEVVSUQgLW5lIDAgXTsgdGhlbgorCWVjaG8gIkVycm9yOiBUaGlzIHNjcmlwdCAocnVucWVtdS1pZnVwKSBtdXN0IGJlIHJ1biB3aXRoIHJvb3QgcHJpdmlsZWdlcyIKKwlleGl0IDEKK2ZpCisKK2lmIFsgJCMgLW5lIDMgXTsgdGhlbgorCXVzYWdlCisJZXhpdCAxCitmaQorCitVU0VSSUQ9Ii11ICQxIgorR1JPVVA9Ii1nICQyIgorTkFUSVZFX1NZU1JPT1RfRElSPSQzCisKK1RVTkNUTD0kTkFUSVZFX1NZU1JPT1RfRElSL3Vzci9iaW4vdHVuY3RsCitpZiBbICEgLXggIiRUVU5DVEwiIF07IHRoZW4KKyAgICAgICBlY2hvICJFcnJvcjogVW5hYmxlIHRvIGZpbmQgdHVuY3RsIGJpbmFyeSBpbiAnJE5BVElWRV9TWVNST09UX0RJUi91c3IvYmluJywgcGxlYXNlIGJpdGJha2UgcWVtdS1oZWxwZXItbmF0aXZlIgorCWV4aXQgMQorZmkKKworVEFQPWAkVFVOQ1RMIC1iICRHUk9VUCAyPiYxYAorU1RBVFVTPSQ/CitpZiBbICRTVEFUVVMgLW5lIDAgXTsgdGhlbgorIyBJZiB0dW5jdGwgLWcgZmFpbHMsIHRyeSB1c2luZyB0dW5jdGwgLXUsIGZvciBvbGRlciBob3N0IGtlcm5lbHMgCisjIHdoaWNoIGRvIG5vdCBzdXBwb3J0IHRoZSBUVU5TRVRHUk9VUCBpb2N0bAorCVRBUD1gJFRVTkNUTCAtYiAkVVNFUklEIDI+JjFgCisJU1RBVFVTPSQ/CisJaWYgWyAkU1RBVFVTIC1uZSAwIF07IHRoZW4KKwkJZWNobyAidHVuY3RsIGZhaWxlZDoiCisJCWV4aXQgMQorCWZpCitmaQorCitJRkNPTkZJRz1gd2hpY2ggaXAgMj4gL2Rldi9udWxsYAoraWYgWyAieCRJRkNPTkZJRyIgPSAieCIgXTsgdGhlbgorCSMgYmV0dGVyIHRoYW4gbm90aGluZy4uLgorCUlGQ09ORklHPS9zYmluL2lwCitmaQoraWYgWyAhIC14ICIkSUZDT05GSUciIF07IHRoZW4KKwllY2hvICIkSUZDT05GSUcgY2Fubm90IGJlIGV4ZWN1dGVkIgorCWV4aXQgMQorZmkKKworSVBUQUJMRVM9YHdoaWNoIGlwdGFibGVzIDI+IC9kZXYvbnVsbGAKK2lmIFsgIngkSVBUQUJMRVMiID0gIngiIF07IHRoZW4KKwlJUFRBQkxFUz0vc2Jpbi9pcHRhYmxlcworZmkKK2lmIFsgISAteCAiJElQVEFCTEVTIiBdOyB0aGVuCisJZWNobyAiJElQVEFCTEVTIGNhbm5vdCBiZSBleGVjdXRlZCIKKwlleGl0IDEKK2ZpCisKK249JFsgKGBlY2hvICRUQVAgfCBzZWQgJ3MvdGFwLy8nYCAqIDIpICsgMSBdCiskSUZDT05GSUcgYWRkciBhZGQgMTkyLjE2OC43LiRuLzMyIGJyb2FkY2FzdCAxOTIuMTY4LjcuMjU1IGRldiAkVEFQCiskSUZDT05GSUcgbGluayBzZXQgZGV2ICRUQVAgdXAKKworZGVzdD0kWyAoYGVjaG8gJFRBUCB8IHNlZCAncy90YXAvLydgICogMikgKyAyIF0KKyRJRkNPTkZJRyByb3V0ZSBhZGQgdG8gMTkyLjE2OC43LiRkZXN0IGRldiAkVEFQCisKKyMgc2V0dXAgTkFUIGZvciB0YXAwIGludGVyZmFjZSB0byBoYXZlIGludGVybmV0IGFjY2VzcyBpbiBRRU1VCiskSVBUQUJMRVMgLUEgUE9TVFJPVVRJTkcgLXQgbmF0IC1qIE1BU1FVRVJBREUgLXMgMTkyLjE2OC43LiRuLzMyCiskSVBUQUJMRVMgLUEgUE9TVFJPVVRJTkcgLXQgbmF0IC1qIE1BU1FVRVJBREUgLXMgMTkyLjE2OC43LiRkZXN0LzMyCitlY2hvIDEgPiAvcHJvYy9zeXMvbmV0L2lwdjQvaXBfZm9yd2FyZAorZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvJFRBUC9wcm94eV9hcnAKKyRJUFRBQkxFUyAtUCBGT1JXQVJEIEFDQ0VQVAorCitlY2hvICRUQVAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWludGVybmFsIGIveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtaW50ZXJuYWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTUyNzI2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWludGVybmFsCkBAIC0wLDAgKzEsNzI0IEBACisjIS9iaW4vYmFzaCAteAorCisjIEhhbmRsZSBydW5uaW5nIE9FIGltYWdlcyB1bmRlciBxZW11CisjCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDExIExpbnV4IEZvdW5kYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyMgQ2FsbCBzZXR0aW5nOgorIyAgIFFFTVVfTUVNT1JZIChvcHRpb25hbCkgLSBzZXQgdGhlIGFtb3VudCBvZiBtZW1vcnkgaW4gdGhlIGVtdWFsdGVkIHN5c3RlbS4KKyMgICBTRVJJQUxfTE9HRklMRSAob3B0aW9uYWwpIC0gbG9nIHRoZSBzZXJpYWwgcG9ydCBvdXRwdXQgdG8gYSBmaWxlCisjCisjIEltYWdlIG9wdGlvbnM6CisjICAgTUFDSElORSAtIHRoZSBtYWNoaW5lIHRvIHJ1bgorIyAgIEZTVFlQRSAtIHRoZSBpbWFnZSB0eXBlIHRvIHJ1bgorIyAgIEtFUk5FTCAtIHRoZSBrZXJuZWwgaW1hZ2UgZmlsZSB0byB1c2UKKyMgICBST09URlMgLSB0aGUgZGlzayBpbWFnZSBmaWxlIHRvIHVzZQorIworCisKK21lbV9zaXplPS0xCisKKyNHZXQgcmlkIG9mIDw+IGFuZCBnZXQgdGhlIGNvbnRlbnRzIG9mIGV4dHJhIHFlbXUgcnVubmluZyBwYXJhbXMKK1NDUklQVF9RRU1VX0VYVFJBX09QVD1gZWNobyAkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIHwgc2VkIC1lICdzLzwvLycgLWUgJ3MvPi8vJ2AKKyNpZiB1c2VyIHNldCBxZW11IG1lbW9yeSwgZWc6IC1tIDI1NiBpbiBxZW11IGV4dHJhIHBhcmFtcywgd2UgbmVlZCB0byBkbyBzb21lIAorIyB2YWxpZGF0aW9uIGNoZWNrCittZW1fc2V0PWBleHByICIkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIiA6ICcuKlwoLW1bWzpzcGFjZTpdXSAqWzAtOV0qXCknYAoraWYgWyAhIC16ICIkbWVtX3NldCIgXSA7IHRoZW4KKyNHZXQgbWVtb3J5IHNldHRpbmcgc2l6ZSBmcm9tIHVzZXIgaW5wdXQKKyAgbWVtX3NpemU9YGVjaG8gJG1lbV9zZXQgfCBzZWQgJ3MvLW1bWzpzcGFjZTpdXSAqLy8nYAorZWxzZQorICAgIGNhc2UgIiRNQUNISU5FIiBpbgorICAgICAgICAicWVtdXg4NiIpCisgICAgICAgICAgICBtZW1fc2l6ZT0yNTYKKyAgICAgICAgICAgIDs7CisgICAgICAgICJxZW11eDg2LTY0IikKKyAgICAgICAgICAgIG1lbV9zaXplPTI1NgorICAgICAgICAgICAgOzsKKyAgICAgICAgInFlbXVhcm0iKQorICAgICAgICAgICAgbWVtX3NpemU9MTI4CisgICAgICAgICAgICA7OworICAgICAgICAicWVtdWFybTY0IikKKyAgICAgICAgICAgIG1lbV9zaXplPTUxMgorICAgICAgICAgICAgOzsKKyAgICAgICAgInFlbXVtaWNyb2JsYXplIikKKyAgICAgICAgICAgIG1lbV9zaXplPTY0CisgICAgICAgICAgICA7OworICAgICAgICAicWVtdW1pcHMifCJxZW11bWlwczY0IikKKyAgICAgICAgICAgIG1lbV9zaXplPTI1NgorICAgICAgICAgICAgOzsKKyAgICAgICAgInFlbXVwcGMiKQorICAgICAgICAgICAgbWVtX3NpemU9MjU2CisgICAgICAgICAgICA7OworICAgICAgICAicWVtdXNoNCIpCisgICAgICAgICAgICBtZW1fc2l6ZT0xMDI0CisgICAgICAgICAgICA7OworICAgICAgICAicWVtdXp5bnEiKQorICAgICAgICAgICAgbWVtX3NpemU9MTAyNAorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgIG1lbV9zaXplPTY0CisgICAgICAgICAgICA7OworICAgIGVzYWMKKworZmkKKworIyBRRU1VX01FTU9SWSBoYXMgJ00nIGFwcGVuZGVkIHRvIG1lbV9zaXplCitRRU1VX01FTU9SWT0iJG1lbV9zaXplIk0KKworIyBCdWcgNDMzOiBxZW11YXJtIGNhbm5vdCB1c2UgPiAyNTYgTUIgUkFNCitpZiBbICIkTUFDSElORSIgPSAicWVtdWFybSIgXTsgdGhlbgorICAgIGlmIFsgLXogIiRtZW1fc2l6ZSIgLW8gJG1lbV9zaXplIC1ndCAyNTYgXTsgdGhlbgorICAgICAgICBlY2hvICJXQVJOSU5HOiBxZW11YXJtIGRvZXMgbm90IHN1cHBvcnQgPiAyNTZNIG9mIFJBTS4iCisgICAgICAgIGVjaG8gIkNoYW5naW5nIFFFTVVfTUVNT1JZIHRvIGRlZmF1bHQgb2YgMjU2TS4iCisgICAgICAgIFFFTVVfTUVNT1JZPSIyNTZNIgorCW1lbV9zaXplPSIyNTYiCisgICAgICAgIFNDUklQVF9RRU1VX0VYVFJBX09QVD1gZWNobyAkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIHwgc2VkIC1lICJzLyRtZW1fc2V0Ly1tIDI1Ni8iIGAKKyAgICBmaQorZmkKKworIyBXZSBuZWVkIHRvIHNwZWNpZnkgLW0gPG1lbV9zaXplPiB0byBvdmVyY29tZSBhIGJ1ZyBpbiBxZW11IDAuMTQuMAorIyBodHRwczovL2J1Z3MubGF1bmNocGFkLm5ldC91YnVudHUvK3NvdXJjZS9xZW11LWt2bS8rYnVnLzU4NDQ4MAorCitpZiBbIC16ICIkbWVtX3NldCIgXSA7IHRoZW4KKyAgU0NSSVBUX1FFTVVfRVhUUkFfT1BUPSIkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIC1tICRtZW1fc2l6ZSIKK2ZpCisjIFRoaXMgZmlsZSBpcyBjcmVhdGVkIHdoZW4gcnVucWVtdS1nZW4tdGFwZGV2cyBjcmVhdGVzIGEgYmFuayBvZiB0YXAKKyMgZGV2aWNlcywgaW5kaWNhdGluZyB0aGF0IHRoZSB1c2VyIHNob3VsZCBub3QgYnJpbmcgdXAgbmV3IG9uZXMgdXNpbmcKKyMgc3Vkby4KK05PU1VET19GTEFHPSIvZXRjL3J1bnFlbXUtbm9zdWRvIgorCitRRU1VSUZVUD1gd2hpY2ggcnVucWVtdS1pZnVwIDI+IC9kZXYvbnVsbGAKK1FFTVVJRkRPV049YHdoaWNoIHJ1bnFlbXUtaWZkb3duIDI+IC9kZXYvbnVsbGAKK2lmIFsgLXogIiRRRU1VSUZVUCIgLW8gISAteCAiJFFFTVVJRlVQIiBdOyB0aGVuCisgICAgICAgZWNobyAicnVucWVtdS1pZnVwIGNhbm5vdCBiZSBmb3VuZCBvciBleGVjdXRlZCIKKyAgICAgICBleGl0IDEKK2ZpCitpZiBbIC16ICIkUUVNVUlGRE9XTiIgLW8gISAteCAiJFFFTVVJRkRPV04iIF07IHRoZW4KKyAgICAgICBlY2hvICJydW5xZW11LWlmZG93biBjYW5ub3QgYmUgZm91bmQgb3IgZXhlY3V0ZWQiCisgICAgICAgZXhpdCAxCitmaQorCitORlNSVU5OSU5HPSJmYWxzZSIKKworI2NhcHR1cmUgb3JpZ2luYWwgc3R0eSB2YWx1ZXMKK09SSUdfU1RUWT0kKHN0dHkgLWcpCisKK2lmIFsgIiRTTElSUF9FTkFCTEVEIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICBLRVJORUxfTkVUV09SS19DTUQ9ImlwPWRoY3AiCisgICAgUUVNVV9UQVBfQ01EPSIiCisgICAgUUVNVV9VSV9PUFRJT05TPSItc2hvdy1jdXJzb3IgLXVzYiAtdXNiZGV2aWNlIHdhY29tLXRhYmxldCIKKyAgICBpZiBbICIkS1ZNX0FDVElWRSIgPSAieWVzIiBdOyB0aGVuCisgICAgICAgIFFFTVVfTkVUV09SS19DTUQ9IiIKKyAgICAgICAgRFJPT1Q9Ii9kZXYvdmRhIgorICAgICAgICBST09URlNfT1BUSU9OUz0iLWRyaXZlIGZpbGU9JFJPT1RGUyxpZj12aXJ0aW8sZm9ybWF0PXJhdyIKKyAgICBlbHNlCisgICAgICAgIFFFTVVfTkVUV09SS19DTUQ9IiIKKyAgICAgICAgRFJPT1Q9Ii9kZXYvaGRhIgorICAgICAgICBST09URlNfT1BUSU9OUz0iLWRyaXZlIGZpbGU9JFJPT1RGUyxpZj1pZGUsZm9ybWF0PXJhdyIKKyAgICBmaQorCitlbHNlCisgICAgICAgIGFjcXVpcmVfbG9jaygpIHsKKyAgICAgICAgICAgIGxvY2tmaWxlPSQxCisgICAgICAgICAgICBpZiBbIC16ICIkbG9ja2ZpbGUiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJFcnJvcjogbWlzc2luZyBsb2NrZmlsZSBhcmcgcGFzc2VkIHRvIGFjcXVpcmVfbG9jaygpIgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICBmaQorCisgICAgICAgICAgICB0b3VjaCAkbG9ja2ZpbGUubG9jayAyPi9kZXYvbnVsbAorICAgICAgICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiQWNxdWlyaW5nIGxvY2tmaWxlIGZvciAkbG9ja2ZpbGUubG9jayBmYWlsZWQiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBleGVjIDg+JGxvY2tmaWxlLmxvY2sKKyAgICAgICAgICAgIGZsb2NrIC1uIC14IDgKKyAgICAgICAgICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgorICAgICAgICAgICAgICAgIGV4ZWMgOD4mLQorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICBmaQorCisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICB9CisKKyAgICAgICAgcmVsZWFzZV9sb2NrKCkgeworICAgICAgICAgICAgbG9ja2ZpbGU9JDEKKyAgICAgICAgICAgIGlmIFsgLXogIiRsb2NrZmlsZSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIkVycm9yOiBtaXNzaW5nIGxvY2tmaWxlIGFyZyBwYXNzZWQgdG8gcmVsZWFzZV9sb2NrKCkiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgIHJtIC1mICRsb2NrZmlsZS5sb2NrCisgICAgICAgICAgICBleGVjICA4PiYtCisgICAgICAgIH0KKworICAgICAgICBMT0NLRElSPSIvdG1wL3FlbXUtdGFwLWxvY2tzIgorICAgICAgICBpZiBbICEgLWQgIiRMT0NLRElSIiBdOyB0aGVuCisgICAgICAgICAgICBta2RpciAkTE9DS0RJUgorICAgICAgICAgICAgY2htb2QgNzc3ICRMT0NLRElSCisgICAgICAgIGZpCisKKyAgICAgICAgSUZDT05GSUc9YHdoaWNoIGlwIDI+IC9kZXYvbnVsbGAKKyAgICAgICAgaWYgWyAteiAiJElGQ09ORklHIiBdOyB0aGVuCisgICAgICAgICAgICBJRkNPTkZJRz0vc2Jpbi9pcAorICAgICAgICBmaQorICAgICAgICBpZiBbICEgLXggIiRJRkNPTkZJRyIgXTsgdGhlbgorICAgICAgICAgICAgICAgZWNobyAiJElGQ09ORklHIGNhbm5vdCBiZSBleGVjdXRlZCIKKyAgICAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorCisgICAgICAgIFBPU1NJQkxFPWAkSUZDT05GSUcgbGluayB8IGdyZXAgJ3RhcCcgfCBhd2sgJ3twcmludCAkMn0nIHwgc2VkIC1lICdzLzovLycgLWUgJ3MvQC4qLy8nYAorICAgICAgICBUQVA9IiIKKyAgICAgICAgTE9DS0ZJTEU9IiIKKyAgICAgICAgVVNFX1BSRUNPTkZfVEFQPSJubyIKKyAgICAgICAgZm9yIHRhcCBpbiAkUE9TU0lCTEU7IGRvCisgICAgICAgICAgICBMT0NLRklMRT0iJExPQ0tESVIvJHRhcCIKKyAgICAgICAgICAgIGlmIFsgLWUgIiRMT0NLRklMRS5za2lwIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiRm91bmQgJExPQ0tGSUxFLnNraXAsIHNraXBwaW5nICR0YXAiCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBlY2hvICJBY3F1aXJpbmcgbG9ja2ZpbGUgZm9yICR0YXAuLi4iCisgICAgICAgICAgICBhY3F1aXJlX2xvY2sgJExPQ0tGSUxFCisgICAgICAgICAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgICAgICAgICAgICAgICBUQVA9JHRhcAorICAgICAgICAgICAgICAgIFVTRV9QUkVDT05GX1RBUD0ieWVzIgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisKKyAgICAgICAgaWYgWyAiJFRBUCIgPSAiIiBdOyB0aGVuCisgICAgICAgICAgICBpZiBbIC1lICIkTk9TVURPX0ZMQUciIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJFcnJvcjogVGhlcmUgYXJlIG5vIGF2YWlsYWJsZSB0YXAgZGV2aWNlcyB0byB1c2UgZm9yIG5ldHdvcmtpbmcsIgorICAgICAgICAgICAgICAgIGVjaG8gImFuZCBJIHNlZSAkTk9TVURPX0ZMQUcgZXhpc3RzLCBzbyBJIGFtIG5vdCBnb2luZyB0byB0cnkgY3JlYXRpbmciCisgICAgICAgICAgICAgICAgZWNobyAiYSBuZXcgb25lIHdpdGggc3Vkby4iCisgICAgICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgICBmaQorCisgICAgICAgICAgICBHUk9VUElEPWBpZCAtZ2AKKyAgICAgICAgICAgIFVTRVJJRD1gaWQgLXVgCisgICAgICAgICAgICBlY2hvICJTZXR0aW5nIHVwIHRhcCBpbnRlcmZhY2UgdW5kZXIgc3VkbyIKKyAgICAgICAgICAgICMgUmVkaXJlY3Qgc3RkZXJyIHNpbmNlIHdlIGNvdWxkIHNlZSBhIExEX1BSRUxPQUQgd2FybmluZyBoZXJlIGlmIHBzZXVkbyBpcyBsb2FkZWQKKyAgICAgICAgICAgICMgYnV0IGluYWN0aXZlLiBUaGlzIGxvb2tzIHNjYXJ5IGJ1dCBpcyBoYXJtbGVzcworICAgICAgICAgICAgdGFwPWBzdWRvICRRRU1VSUZVUCAkVVNFUklEICRHUk9VUElEICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgMj4gL2Rldi9udWxsYAorICAgICAgICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisgICAgICAgICAgICAgICAgIyBSZS1ydW4gc3RhbmRhbG9uZSB0byBzZWUgdmVyYm9zZSBlcnJvcnMKKyAgICAgICAgICAgICAgICBzdWRvICRRRU1VSUZVUCAkVVNFUklEICRHUk9VUElEICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIExPQ0tGSUxFPSIkTE9DS0RJUi8kdGFwIgorICAgICAgICAgICAgZWNobyAiQWNxdWlyaW5nIGxvY2tmaWxlIGZvciAkdGFwLi4uIgorICAgICAgICAgICAgYWNxdWlyZV9sb2NrICRMT0NLRklMRQorICAgICAgICAgICAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisgICAgICAgICAgICAgICAgVEFQPSR0YXAKKyAgICAgICAgICAgIGZpIAorICAgICAgICBlbHNlCisgICAgICAgICAgICBlY2hvICJVc2luZyBwcmVjb25maWd1cmVkIHRhcCBkZXZpY2UgJyRUQVAnIgorICAgICAgICAgICAgZWNobyAiSWYgdGhpcyBpcyBub3QgaW50ZW5kZWQsIHRvdWNoICRMT0NLRklMRS5za2lwIHRvIG1ha2UgcnVucWVtdSBza2lwICRUQVAuIgorICAgICAgICBmaQorCisgICAgICAgIGNsZWFudXAoKSB7CisgICAgICAgICAgICBpZiBbICEgLWUgIiROT1NVRE9fRkxBRyIgLWEgIiRVU0VfUFJFQ09ORl9UQVAiID0gIm5vIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgIyBSZWRpcmVjdCBzdGRlcnIgc2luY2Ugd2UgY291bGQgc2VlIGEgTERfUFJFTE9BRCB3YXJuaW5nIGhlcmUgaWYgcHNldWRvIGlzIGxvYWRlZAorICAgICAgICAgICAgICAgICMgYnV0IGluYWN0aXZlLiBUaGlzIGxvb2tzIHNjYXJ5IGJ1dCBpcyBoYXJtbGVzcworICAgICAgICAgICAgICAgIHN1ZG8gJFFFTVVJRkRPV04gJFRBUCAkT0VDT1JFX05BVElWRV9TWVNST09UIDI+IC9kZXYvbnVsbAorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGVjaG8gIlJlbGVhc2luZyBsb2NrZmlsZSBvZiBwcmVjb25maWd1cmVkIHRhcCBkZXZpY2UgJyRUQVAnIgorICAgICAgICAgICAgcmVsZWFzZV9sb2NrICRMT0NLRklMRQorCisgICAgICAgICAgICBpZiBbICIkTkZTUlVOTklORyIgPSAidHJ1ZSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIlNodXR0aW5nIGRvd24gdGhlIHVzZXJzcGFjZSBORlMgc2VydmVyLi4uIgorICAgICAgICAgICAgICAgIGVjaG8gInJ1bnFlbXUtZXhwb3J0LXJvb3RmcyBzdG9wICRST09URlMiCisgICAgICAgICAgICAgICAgcnVucWVtdS1leHBvcnQtcm9vdGZzIHN0b3AgJFJPT1RGUworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICMgSWYgUUVNVSBjcmFzaGVzIG9yIHNvbWVob3cgdHR5IHByb3BlcnRpZXMgYXJlIG5vdCByZXN0b3JlZAorICAgICAgICAgICAgIyBhZnRlciBxZW11IGV4aXRzLCB3ZSBuZWVkIHRvIHJ1biBzdHR5IHNhbmUKKyAgICAgICAgICAgICNzdHR5IHNhbmUKKworICAgICAgICAgICAgI2luc3RlYWQgb2YgdXNpbmcgc3R0eSBzYW5lIHdlIHNldCB0aGUgb3JpZ2luYWwgc3R0eSB2YWx1ZXMKKyAgICAgICAgICAgIHN0dHkgJHtPUklHX1NUVFl9CisKKyAgICAgICAgfQorCisKKyAgICAgICAgbjA9JChlY2hvICRUQVAgfCBzZWQgJ3MvdGFwLy8nKQorCisgICAgICAgIGNhc2UgJG4wIGluCisgICAgICAgICAgICAnJ3wqWyEwLTldKikKKyAgICAgICAgICAgICAgICBlY2hvICJFcnJvciBDb3VsZG4ndCB0dXJuICRUQVAgaW50byBhbiBpbnRlcmZhY2UgbnVtYmVyPyIKKyAgICAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisKKyAgICAgICAgbjE9JCgoJG4wICogMiArIDEpKQorICAgICAgICBuMj0kKCgkbjEgKyAxKSkKKworICAgICAgICBLRVJORUxfTkVUV09SS19DTUQ9ImlwPTE5Mi4xNjguNy4kbjI6OjE5Mi4xNjguNy4kbjE6MjU1LjI1NS4yNTUuMCIKKyAgICAgICAgUUVNVV9UQVBfQ01EPSItbmV0IHRhcCx2bGFuPTAsaWZuYW1lPSRUQVAsc2NyaXB0PW5vLGRvd25zY3JpcHQ9bm8iCisgICAgICAgIGlmIFsgIiRLVk1fQUNUSVZFIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgICAgIFFFTVVfTkVUV09SS19DTUQ9Ii1uZXQgbmljLG1vZGVsPXZpcnRpbyAkUUVNVV9UQVBfQ01ELHZob3N0PW9uIgorICAgICAgICAgICAgRFJPT1Q9Ii9kZXYvdmRhIgorICAgICAgICAgICAgUk9PVEZTX09QVElPTlM9Ii1kcml2ZSBmaWxlPSRST09URlMsaWY9dmlydGlvLGZvcm1hdD1yYXciCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFFFTVVfTkVUV09SS19DTUQ9Ii1uZXQgbmljLHZsYW49MCAkUUVNVV9UQVBfQ01EIgorICAgICAgICAgICAgRFJPT1Q9Ii9kZXYvaGRhIgorICAgICAgICAgICAgUk9PVEZTX09QVElPTlM9Ii1kcml2ZSBmaWxlPSRST09URlMsaWY9aWRlLGZvcm1hdD1yYXciCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgIiRNQUNISU5FIiA9ICJxZW11YXJtNjQiIF07IHRoZW4KKyAgICAgICAgICAgIFFFTVVfTkVUV09SS19DTUQ9Ii1uZXRkZXYgdGFwLGlkPW5ldDAsaWZuYW1lPSRUQVAsc2NyaXB0PW5vLGRvd25zY3JpcHQ9bm8gLWRldmljZSB2aXJ0aW8tbmV0LWRldmljZSxuZXRkZXY9bmV0MCAiCisgICAgICAgICAgICBEUk9PVD0iL2Rldi92ZGEiCisgICAgICAgICAgICBST09URlNfT1BUSU9OUz0iLWRyaXZlIGlkPWRpc2swLGZpbGU9JFJPT1RGUyxpZj1ub25lLGZvcm1hdD1yYXcgLWRldmljZSB2aXJ0aW8tYmxrLWRldmljZSxkcml2ZT1kaXNrMCIKKyAgICAgICAgZmkKKworICAgICAgICBLRVJOQ01ETElORT0ibWVtPSRRRU1VX01FTU9SWSIKKyAgICAgICAgUUVNVV9VSV9PUFRJT05TPSItc2hvdy1jdXJzb3IgLXVzYiAtdXNiZGV2aWNlIHdhY29tLXRhYmxldCIKKworICAgICAgICBORlNfSU5TVEFOQ0U9YGVjaG8gJFRBUCB8IHNlZCAncy90YXAvLydgCisgICAgICAgIGV4cG9ydCBORlNfSU5TVEFOQ0UKKworICAgICAgICBTRVJJQUxPUFRTPSIiCisgICAgICAgIGlmIFsgIngkU0VSSUFMX0xPR0ZJTEUiICE9ICJ4IiBdOyB0aGVuCisgICAgICAgICAgICBTRVJJQUxPUFRTPSItc2VyaWFsIGZpbGU6JFNFUklBTF9MT0dGSUxFIgorICAgICAgICBmaQorZmkKKworY2FzZSAiJE1BQ0hJTkUiIGluCisgICAgInFlbXVhcm0iKSA7OworICAgICJxZW11YXJtNjQiKSA7OworICAgICJxZW11bWljcm9ibGF6ZSIpIDs7CisgICAgInFlbXVtaXBzIikgOzsKKyAgICAicWVtdW1pcHNlbCIpIDs7CisgICAgInFlbXVtaXBzNjQiKSA7OworICAgICJxZW11c2g0IikgOzsKKyAgICAicWVtdXBwYyIpIDs7CisgICAgInFlbXVhcm12NiIpIDs7CisgICAgInFlbXVhcm12NyIpIDs7CisgICAgInFlbXV4ODYiKSA7OworICAgICJxZW11eDg2LTY0IikgOzsKKyAgICAicWVtdXp5bnEiKSA7OworICAgICJha2l0YSIpIDs7CisgICAgInNwaXR6IikgOzsKKyAgICAqKQorICAgICAgICBlY2hvICJFcnJvcjogVW5zdXBwb3J0ZWQgbWFjaGluZSB0eXBlICRNQUNISU5FIgorICAgICAgICByZXR1cm4gMQorICAgIDs7Citlc2FjCisKK2lmIFsgISAtZiAiJEtFUk5FTCIgLWEgIngkRlNUWVBFIiAhPSAieHZtZGsiIC1hICJ4JEZTVFlQRSIgIT0gInhoZGRpbWciIC1hICJ4JEZTVFlQRSIgIT0gInhoZGRkaXJlY3QiIF07IHRoZW4KKyAgICBlY2hvICJFcnJvcjogS2VybmVsIGltYWdlIGZpbGUgJEtFUk5FTCBkb2Vzbid0IGV4aXN0IgorICAgIGNsZWFudXAKKyAgICByZXR1cm4gMQorZmkKKworaWYgWyAiJEZTVFlQRSIgIT0gIm5mcyIgLWEgIiRGU1RZUEUiICE9ICJ2bWRrIiAtYSAiJEZTVFlQRSIgIT0gImhkZGltZyIgLWEgIiRGU1RZUEUiICE9ICJoZGRkaXJlY3QiIC1hICEgLWYgIiRST09URlMiIF07IHRoZW4KKyAgICBlY2hvICJFcnJvcjogSW1hZ2UgZmlsZSAkUk9PVEZTIGRvZXNuJ3QgZXhpc3QiCisgICAgY2xlYW51cAorICAgIHJldHVybiAxCitmaQorCitpZiBbICIkTkZTX1NFUlZFUiIgPSAiIiBdOyB0aGVuCisgICAgTkZTX1NFUlZFUj0iMTkyLjE2OC43LjEiCisgICAgaWYgWyAiJFNMSVJQX0VOQUJMRUQiID0gInllcyIgXTsgdGhlbgorCU5GU19TRVJWRVI9IjEwLjAuMi4yIgorICAgIGZpCitmaQorCitpZiBbICIkRlNUWVBFIiA9ICJuZnMiIF07IHRoZW4KKyAgICBORlNfRElSPWBlY2hvICRST09URlMgfCBzZWQgJ3MvXlteOl0qOlwoLipcKS9cMS8nYAorICAgIGlmIFsgIiRORlNfSU5TVEFOQ0UiID0gIiIgXSA7IHRoZW4KKwlORlNfSU5TVEFOQ0U9MAorICAgIGZpCisgICAgTU9VTlREX1JQQ1BPUlQ9JFsgMjExMTEgKyAkTkZTX0lOU1RBTkNFIF0KKyAgICBORlNEX1JQQ1BPUlQ9JFsgMTExMTEgKyAkTkZTX0lOU1RBTkNFIF0KKyAgICBORlNEX1BPUlQ9JFsgMzA0OSArIDIgKiAkTkZTX0lOU1RBTkNFIF0KKyAgICBNT1VOVERfUE9SVD0kWyAzMDQ4ICsgMiAqICRORlNfSU5TVEFOQ0UgXQorICAgIFVORlNfT1BUUz0ibmZzdmVycz0zLHBvcnQ9JE5GU0RfUE9SVCxtb3VudHByb2c9JE1PVU5URF9SUENQT1JULG5mc3Byb2c9JE5GU0RfUlBDUE9SVCx1ZHAsbW91bnRwb3J0PSRNT1VOVERfUE9SVCIKKworICAgIFBTRVVET19MT0NBTFNUQVRFRElSPX4vLnJ1bnFlbXUtc2RrL3BzZXVkbworICAgIGV4cG9ydCBQU0VVRE9fTE9DQUxTVEFURURJUgorCisgICAgIyBTdGFydCB0aGUgdXNlcnNwYWNlIE5GUyBzZXJ2ZXIKKyAgICBlY2hvICJydW5xZW11LWV4cG9ydC1yb290ZnMgcmVzdGFydCAkUk9PVEZTIgorICAgIHJ1bnFlbXUtZXhwb3J0LXJvb3RmcyByZXN0YXJ0ICRST09URlMKKyAgICBpZiBbICQ/ICE9IDAgXTsgdGhlbgorICAgICAgICByZXR1cm4gMQorICAgIGZpCisgICAgTkZTUlVOTklORz0idHJ1ZSIKK2ZpCisKK2lmIFsgIiRNQUNISU5FIiA9ICJxZW11YXJtIiAtbyAiJE1BQ0hJTkUiID0gInFlbXVhcm12NiIgLW8gIiRNQUNISU5FIiA9ICJxZW11YXJtdjciIF07IHRoZW4KKyAgICBRRU1VPXFlbXUtc3lzdGVtLWFybQorICAgIE1BQ0hJTkVfU1VCVFlQRT12ZXJzYXRpbGVwYgorICAgIGV4cG9ydCBRRU1VX0FVRElPX0RSVj0ibm9uZSIKKyAgICBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMiCisgICAgIyBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMgLWZvcmNlLXBvaW50ZXIiCisgICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJEZTVFlQRSIgPSAiYnRyZnMiIF07IHRoZW4KKyAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9zZGEgcncgY29uc29sZT10dHlBTUEwLDExNTIwMCBjb25zb2xlPXR0eSAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkgaGlnaHJlcz1vZmYiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtTSAke01BQ0hJTkVfU1VCVFlQRX0gLWRyaXZlIGZpbGU9JFJPT1RGUyxmb3JtYXQ9cmF3IC1uby1yZWJvb3QgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorICAgIGlmIFsgIiRGU1RZUEUiID0gIm5mcyIgXTsgdGhlbgorICAgICAgICBpZiBbICIkTkZTX1NFUlZFUiIgPSAiMTkyLjE2OC43LjEiIC1hICEgLWQgIiRORlNfRElSIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICJFcnJvcjogTkZTIG1vdW50IHBvaW50ICRST09URlMgZG9lc24ndCBleGlzdCIKKyAgICAgICAgICAgIGNsZWFudXAKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGZpCisgICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvbmZzIG5mc3Jvb3Q9JE5GU19TRVJWRVI6JE5GU19ESVIsJFVORlNfT1BUUyBydyBjb25zb2xlPXR0eUFNQTAsMTE1MjAwICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1NICR7TUFDSElORV9TVUJUWVBFfSAtLW5vLXJlYm9vdCAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCisgICAgaWYgWyAiJE1BQ0hJTkUiID0gInFlbXVhcm12NiIgXTsgdGhlbgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVPUFRJT05TIC1jcHUgYXJtMTEzNiIKKyAgICBmaQorICAgIGlmIFsgIiRNQUNISU5FIiA9ICJxZW11YXJtdjciIF07IHRoZW4KKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VT1BUSU9OUyAtY3B1IGNvcnRleC1hOCIKKyAgICBmaQorZmkKKworaWYgWyAiJE1BQ0hJTkUiID0gInFlbXVhcm02NCIgXTsgdGhlbgorICAgIFFFTVU9cWVtdS1zeXN0ZW0tYWFyY2g2NAorCisgICAgZXhwb3J0IFFFTVVfQVVESU9fRFJWPSJub25lIgorICAgIGlmIFsgIngkU0VSSUFMU1RESU8iID0gIngiIF0gOyB0aGVuCisgICAgICAgIFFFTVVfVUlfT1BUSU9OUz0iLW5vZ3JhcGhpYyIKKyAgICBlbHNlCisgICAgICAgIFFFTVVfVUlfT1BUSU9OUz0iIgorICAgIGZpCisgICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJEZTVFlQRSIgPSAiYnRyZnMiIF07IHRoZW4KKyAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi92ZGEgcncgY29uc29sZT10dHlBTUEwLDM4NDAwIG1lbT0kUUVNVV9NRU1PUlkgaGlnaHJlcz1vZmYgJEtFUk5FTF9ORVRXT1JLX0NNRCIKKyAgICAgICAgIyBxZW11LXN5c3RlbS1hYXJjaDY0IG9ubHkgc3VwcG9ydCAnLW1hY2hpbmUgdmlydCAtY3B1IGNvcnRleC1hNTcnIGZvciBub3cKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1tYWNoaW5lIHZpcnQgLWNwdSBjb3J0ZXgtYTU3ICRST09URlNfT1BUSU9OUyAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCisgICAgaWYgWyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCisgICAgICAgIGlmIFsgIiRORlNfU0VSVkVSIiA9ICIxOTIuMTY4LjcuMSIgLWEgISAtZCAiJE5GU19ESVIiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkVycm9yOiBORlMgbW91bnQgcG9pbnQgJFJPT1RGUyBkb2Vzbid0IGV4aXN0IgorICAgICAgICAgICAgY2xlYW51cAorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZmkKKyAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0kTkZTX1NFUlZFUjokTkZTX0RJUiwkVU5GU19PUFRTIHJ3IGNvbnNvbGU9dHR5QU1BMCwzODQwMCBtZW09JFFFTVVfTUVNT1JZIGhpZ2hyZXM9b2ZmICRLRVJORUxfTkVUV09SS19DTUQiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtbWFjaGluZSB2aXJ0IC1jcHUgY29ydGV4LWE1NyAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCitmaQorCisKK2lmIFsgIiRNQUNISU5FIiA9ICJxZW11eDg2IiBdOyB0aGVuCisgICAgUUVNVT1xZW11LXN5c3RlbS1pMzg2CisgICAgaWYgWyAiJEtWTV9BQ1RJVkUiID0gInllcyIgXTsgdGhlbgorICAgICAgICBDUFVfU1VCVFlQRT1rdm0zMgorICAgIGVsc2UKKyAgICAgICAgQ1BVX1NVQlRZUEU9cWVtdTMyCisgICAgZmkKKyAgICBpZiBbICEgLXogIiR2Z2Ffb3B0aW9uIiBdOyB0aGVuCisgICAgICAgIFFFTVVfVUlfT1BUSU9OUz0iJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBlbHNlCisgICAgICAgIFFFTVVfVUlfT1BUSU9OUz0iJFFFTVVfVUlfT1BUSU9OUyAtdmdhIHZtd2FyZSIKKyAgICBmaQorICAgIGlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgLW8gIiRGU1RZUEUiID0gImJ0cmZzIiBdOyB0aGVuCisgICAgICAgIEtFUk5DTURMSU5FPSJ2Z2E9MCB1dmVzYWZiLm1vZGVfb3B0aW9uPTY0MHg0ODAtMzIgcm9vdD0kRFJPT1QgcncgbWVtPSRRRU1VX01FTU9SWSAkS0VSTkVMX05FVFdPUktfQ01EIgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLWNwdSAkQ1BVX1NVQlRZUEUgJFJPT1RGU19PUFRJT05TICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKKyAgICBpZiBbICIke0ZTVFlQRTowOjR9IiA9ICJjcGlvIiBdOyB0aGVuCisgICAgICAgIEtFUk5DTURMSU5FPSJ2Z2E9MCB1dmVzYWZiLm1vZGVfb3B0aW9uPTY0MHg0ODAtMzIgcm9vdD0vZGV2L3JhbTAgcncgbWVtPSRRRU1VX01FTU9SWSAkS0VSTkVMX05FVFdPUktfQ01EIgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLWNwdSAkQ1BVX1NVQlRZUEUgLWluaXRyZCAkUk9PVEZTICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKKworICAgIGlmIFsgIiRGU1RZUEUiID0gIm5mcyIgXTsgdGhlbgorICAgICAgICBpZiBbICIkTkZTX1NFUlZFUiIgPSAiMTkyLjE2OC43LjEiIC1hICEgLWQgIiRORlNfRElSIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICJFcnJvcjogTkZTIG1vdW50IHBvaW50ICRST09URlMgZG9lc24ndCBleGlzdC4iCisgICAgICAgICAgICBjbGVhbnVwCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBmaQorICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L25mcyBuZnNyb290PSRORlNfU0VSVkVSOiRORlNfRElSLCRVTkZTX09QVFMgcncgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorICAgIGlmIFsgIiRGU1RZUEUiID0gInZtZGsiIC1vICIkRlNUWVBFIiA9ICJoZGRpbWciIC1vICIkRlNUWVBFIiA9ICJoZGRkaXJlY3QiIF07IHRoZW4KKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKKyAgICAjIEN1cnJlbnRseSBvcHJvZmlsZSdzIGV2ZW50IGJhc2VkIGludGVycnVwdCBtb2RlIGRvZXNuJ3Qgd29yayhCdWcgIzgyOCkgaW4KKyAgICAjIHFlbXV4ODYgYW5kIHFlbXV4ODYtNjQuIFdlIGNhbiB1c2UgdGltZXIgaW50ZXJydXB0IG1vZGUgZm9yIG5vdy4KKyAgICBLRVJOQ01ETElORT0iJEtFUk5DTURMSU5FIG9wcm9maWxlLnRpbWVyPTEiCitmaQorCitpZiBbICIkTUFDSElORSIgPSAicWVtdXg4Ni02NCIgXTsgdGhlbgorICAgIFFFTVU9cWVtdS1zeXN0ZW0teDg2XzY0CisgICAgaWYgWyAiJEtWTV9BQ1RJVkUiID0gInllcyIgXTsgdGhlbgorICAgICAgICBDUFVfU1VCVFlQRT1rdm02NAorICAgIGVsc2UKKyAgICAgICAgQ1BVX1NVQlRZUEU9Y29yZTJkdW8KKyAgICBmaQorICAgIGlmIFsgISAteiAiJHZnYV9vcHRpb24iIF07IHRoZW4KKyAgICAgICAgUUVNVV9VSV9PUFRJT05TPSIkUUVNVV9VSV9PUFRJT05TIgorICAgIGVsc2UKKyAgICAgICAgUUVNVV9VSV9PUFRJT05TPSIkUUVNVV9VSV9PUFRJT05TIC12Z2Egdm13YXJlIgorICAgIGZpCisgICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJEZTVFlQRSIgPSAiYnRyZnMiIF07IHRoZW4KKyAgICAgICAgS0VSTkNNRExJTkU9InZnYT0wIHV2ZXNhZmIubW9kZV9vcHRpb249NjQweDQ4MC0zMiByb290PSREUk9PVCBydyBtZW09JFFFTVVfTUVNT1JZICRLRVJORUxfTkVUV09SS19DTUQiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY3B1ICRDUFVfU1VCVFlQRSAkUk9PVEZTX09QVElPTlMgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorICAgIGlmIFsgIiRGU1RZUEUiID0gIm5mcyIgXTsgdGhlbgorICAgICAgICBpZiBbICJ4JFJPT1RGUyIgPSAieCIgXTsgdGhlbgorICAgICAgICAgICAgUk9PVEZTPS9zcnYvbmZzL3FlbXV4ODYtNjQKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAhIC1kICIkUk9PVEZTIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICJFcnJvcjogTkZTIG1vdW50IHBvaW50ICRST09URlMgZG9lc24ndCBleGlzdC4iCisgICAgICAgICAgICBjbGVhbnVwCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBmaQorICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L25mcyBuZnNyb290PSRORlNfU0VSVkVSOiRORlNfRElSLCRVTkZTX09QVFMgcncgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLWNwdSAkQ1BVX1NVQlRZUEUgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorICAgIGlmIFsgIiRGU1RZUEUiID0gInZtZGsiIC1vICIkRlNUWVBFIiA9ICJoZGRpbWciIC1vICIkRlNUWVBFIiA9ICJoZGRkaXJlY3QiIF07IHRoZW4KKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1jcHUgJENQVV9TVUJUWVBFICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKKyAgICAjIEN1cnJlbnRseSBvcHJvZmlsZSdzIGV2ZW50IGJhc2VkIGludGVycnVwdCBtb2RlIGRvZXNuJ3Qgd29yayhCdWcgIzgyOCkgaW4KKyAgICAjIHFlbXV4ODYgYW5kIHFlbXV4ODYtNjQuIFdlIGNhbiB1c2UgdGltZXIgaW50ZXJydXB0IG1vZGUgZm9yIG5vdy4KKyAgICBLRVJOQ01ETElORT0iJEtFUk5DTURMSU5FIG9wcm9maWxlLnRpbWVyPTEiCitmaQorCitpZiBbICIkTUFDSElORSIgPSAic3BpdHoiIF07IHRoZW4KKyAgICBRRU1VPXFlbXUtc3lzdGVtLWFybQorICAgIGlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgLW8gIiRGU1RZUEUiID0gImJ0cmZzIiBdOyB0aGVuCisgICAgICAgIGVjaG8gJFJPT1RGUworICAgICAgICBST09URlM9YHJlYWRsaW5rIC1mICRST09URlNgCisgICAgICAgIGVjaG8gJFJPT1RGUworICAgICAgICBpZiBbICEgLWUgIiRST09URlMucWVtdWRpc2siIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkFkZGluZyBhIHBhcnRpdGlvbiB0YWJsZSB0byB0aGUgZXh0MyBpbWFnZSBmb3IgdXNlIGJ5IFFFTVUsIHBsZWFzZSB3YWl0Li4uIgorICAgICAgICAgICAgcnVucWVtdS1hZGRwdGFibGUyaW1hZ2UgJFJPT1RGUyAkUk9PVEZTLnFlbXVkaXNrCisgICAgICAgIGZpCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtTSBzcGl0eiAtaGRhICRST09URlMucWVtdWRpc2sgLXBvcnRyYWl0IgorICAgIGZpCitmaQorCitpZiBbICIkTUFDSElORSIgPSAicWVtdW1pcHMiIC1vICIkTUFDSElORSIgPSAicWVtdW1pcHNlbCIgLW8gIiRNQUNISU5FIiA9ICJxZW11bWlwczY0IiBdOyB0aGVuCisgICAgY2FzZSAiJE1BQ0hJTkUiIGluCisgICAgICAgcWVtdW1pcHMpICAgUUVNVT1xZW11LXN5c3RlbS1taXBzIDs7CisgICAgICAgcWVtdW1pcHNlbCkgUUVNVT1xZW11LXN5c3RlbS1taXBzZWwgOzsKKyAgICAgICBxZW11bWlwczY0KSBRRU1VPXFlbXUtc3lzdGVtLW1pcHM2NCA7OworICAgIGVzYWMKKyAgICBNQUNISU5FX1NVQlRZUEU9bWFsdGEKKyAgICBRRU1VX1VJX09QVElPTlM9Ii12Z2EgY2lycnVzICRRRU1VX1VJX09QVElPTlMiCisgICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJEZTVFlQRSIgPSAiYnRyZnMiIF07IHRoZW4KKyAgICAgICAgI0tFUk5DTURMSU5FPSJyb290PS9kZXYvaGRhIGNvbnNvbGU9dHR5UzAgY29uc29sZT10dHkwICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKKyAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9oZGEgcncgY29uc29sZT10dHlTMCBjb25zb2xlPXR0eSAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtTSAkTUFDSElORV9TVUJUWVBFIC1kcml2ZSBmaWxlPSRST09URlMsZm9ybWF0PXJhdyAtbm8tcmVib290ICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKKyAgICBpZiBbICIkRlNUWVBFIiA9ICJuZnMiIF07IHRoZW4KKyAgICAgICAgaWYgWyAiJE5GU19TRVJWRVIiID0gIjE5Mi4xNjguNy4xIiAtYSAhIC1kICIkTkZTX0RJUiIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiRXJyb3I6IE5GUyBtb3VudCBwb2ludCAkUk9PVEZTIGRvZXNuJ3QgZXhpc3QiCisgICAgICAgICAgICBjbGVhbnVwCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBmaQorICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L25mcyBjb25zb2xlPXR0eVMwIGNvbnNvbGU9dHR5IG5mc3Jvb3Q9JE5GU19TRVJWRVI6JE5GU19ESVIsJFVORlNfT1BUUyBydyAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtTSAkTUFDSElORV9TVUJUWVBFIC1uby1yZWJvb3QgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorZmkKKworaWYgWyAiJE1BQ0hJTkUiID0gInFlbXVwcGMiIF07IHRoZW4KKyAgICBRRU1VPXFlbXUtc3lzdGVtLXBwYworICAgIE1BQ0hJTkVfU1VCVFlQRT1tYWM5OQorICAgIENQVV9TVUJUWVBFPUc0CisgICAgUUVNVV9VSV9PUFRJT05TPSIkUUVNVV9VSV9PUFRJT05TIgorICAgIGlmIFsgIiRTTElSUF9FTkFCTEVEIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgUUVNVV9ORVRXT1JLX0NNRD0iIgorICAgIGVsc2UKKyAgICAgICAgUUVNVV9ORVRXT1JLX0NNRD0iLW5ldCBuaWMsbW9kZWw9cGNuZXQgJFFFTVVfVEFQX0NNRCIKKyAgICBmaQorICAgIGlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgLW8gIiRGU1RZUEUiID0gImJ0cmZzIiBdOyB0aGVuCisgICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvaGRhIHJ3IGNvbnNvbGU9dHR5UzAgY29uc29sZT10dHkgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLWNwdSAkQ1BVX1NVQlRZUEUgLU0gJE1BQ0hJTkVfU1VCVFlQRSAtZHJpdmUgZmlsZT0kUk9PVEZTLGZvcm1hdD1yYXcgLW5vLXJlYm9vdCAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCisgICAgaWYgWyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCisgICAgICAgIGlmIFsgIiRORlNfU0VSVkVSIiA9ICIxOTIuMTY4LjcuMSIgLWEgISAtZCAiJE5GU19ESVIiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkVycm9yOiBORlMgbW91bnQgcG9pbnQgJFJPT1RGUyBkb2Vzbid0IGV4aXN0IgorICAgICAgICAgICAgY2xlYW51cAorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZmkKKyAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9uZnMgY29uc29sZT10dHlTMCBjb25zb2xlPXR0eSBuZnNyb290PSRORlNfU0VSVkVSOiRORlNfRElSLCRVTkZTX09QVFMgcncgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLWNwdSAkQ1BVX1NVQlRZUEUgLU0gJE1BQ0hJTkVfU1VCVFlQRSAtbm8tcmVib290ICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKK2ZpCisKK2lmIFsgIiRNQUNISU5FIiA9ICJxZW11c2g0IiBdOyB0aGVuCisgICAgUUVNVT1xZW11LXN5c3RlbS1zaDQKKyAgICBNQUNISU5FX1NVQlRZUEU9cjJkCisgICAgUUVNVV9VSV9PUFRJT05TPSIkUUVNVV9VSV9PUFRJT05TIgorICAgIGlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgLW8gIiRGU1RZUEUiID0gImJ0cmZzIiBdOyB0aGVuCisgICAgICAgICNLRVJOQ01ETElORT0icm9vdD0vZGV2L2hkYSBjb25zb2xlPXR0eVMwIGNvbnNvbGU9dHR5MCAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCisgICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvaGRhIHJ3IGNvbnNvbGU9dHR5U0MxIG5vaW90cmFwIGVhcmx5cHJpbnRrPXNoLXNjaS4xIGNvbnNvbGU9dHR5ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1NICRNQUNISU5FX1NVQlRZUEUgLWhkYSAkUk9PVEZTIC1uby1yZWJvb3QgJFFFTVVfVUlfT1BUSU9OUyAtbW9uaXRvciBudWxsIC1zZXJpYWwgdmMgLXNlcmlhbCBzdGRpbyIKKyAgICAgICAgU0VSSUFMU1RESU89IjEiCisgICAgZmkKKyAgICBpZiBbICIkRlNUWVBFIiA9ICJuZnMiIF07IHRoZW4KKyAgICAgICAgaWYgWyAiJE5GU19TRVJWRVIiID0gIjE5Mi4xNjguNy4xIiAtYSAhIC1kICIkTkZTX0RJUiIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiRXJyb3I6IE5GUyBtb3VudCBwb2ludCAkUk9PVEZTIGRvZXNuJ3QgZXhpc3QiCisgICAgICAgICAgICBjbGVhbnVwCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBmaQorICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L25mcyBjb25zb2xlPXR0eVNDMSBub2lvdHJhcCBlYXJseXByaW50az1zaC1zY2kuMSBjb25zb2xlPXR0eSBuZnNyb290PSRORlNfU0VSVkVSOiRORlNfRElSLCRVTkZTX09QVFMgcncgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0gJE1BQ0hJTkVfU1VCVFlQRSAtbm8tcmVib290ICRRRU1VX1VJX09QVElPTlMgLW1vbml0b3IgbnVsbCAtc2VyaWFsIHZjIC1zZXJpYWwgc3RkaW8iCisgICAgICAgIFNFUklBTFNURElPPSIxIgorICAgIGZpCitmaQorCitpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIF07IHRoZW4KKyAgICBLRVJOQ01ETElORT0iJEtFUk5DTURMSU5FIHJvb3Rmc3R5cGU9JEZTVFlQRSIKK2ZpCisKK2lmIFsgIiRNQUNISU5FIiA9ICJha2l0YSIgXTsgdGhlbgorICAgIFFFTVU9cWVtdS1zeXN0ZW0tYXJtCisgICAgaWYgWyAiJEZTVFlQRSIgPSAiamZmczIiIF07IHRoZW4KKyAgICAgICAgUk9PVEZTPWByZWFkbGluayAtZiAkUk9PVEZTYAorICAgICAgICBpZiBbICEgLWUgIiRST09URlMucWVtdWZsYXNoIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICJDb252ZXJ0aW5nIHJhdyBpbWFnZSBpbnRvIGZsYXNoIGltYWdlIGZvcm1hdCBmb3IgdXNlIGJ5IFFFTVUsIHBsZWFzZSB3YWl0Li4uIgorICAgICAgICByYXcyZmxhc2guYWtpdGEgPCAkUk9PVEZTID4gJFJPT1RGUy5xZW11Zmxhc2gKKyAgICAgICAgZmkKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1NIGFraXRhIC1tdGRibG9jayAkUk9PVEZTLnFlbXVmbGFzaCAtcG9ydHJhaXQiCisgICAgZmkKK2ZpCisKK2lmIFsgIiRNQUNISU5FIiA9ICJxZW11bWljcm9ibGF6ZSIgXTsgdGhlbgorICAgIFFFTVU9cWVtdS1zeXN0ZW0tbWljcm9ibGF6ZWVsCisgICAgUUVNVV9TWVNURU1fT1BUSU9OUz0iLU0gcGV0YWxvZ2l4LW1sNjA1IC1zZXJpYWwgbW9uOnN0ZGlvIC1kdGIgJEtFUk5FTC0kTUFDSElORS5kdGIiCisgICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJHtGU1RZUEU6MDo0fSIgPSAiY3BpbyIgXTsgdGhlbgorICAgICAgICBLRVJOQ01ETElORT0iZWFybHlwcmludGsgcm9vdD0vZGV2L3JhbSBydyIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX1NZU1RFTV9PUFRJT05TIC1pbml0cmQgJFJPT1RGUyIKKyAgICBmaQorZmkKKworaWYgWyAiJE1BQ0hJTkUiID0gInFlbXV6eW5xIiBdOyB0aGVuCisgICAgUUVNVT1xZW11LXN5c3RlbS1hcm0KKyAgICBRRU1VX1NZU1RFTV9PUFRJT05TPSItTSB4aWxpbngtenlucS1hOSAtc2VyaWFsIG51bGwgLXNlcmlhbCBtb246c3RkaW8gLWR0YiAkS0VSTkVMLSRNQUNISU5FLmR0YiIKKyAgICAjIHp5bnEgc2VyaWFsIHBvcnRzIGFyZSBuYW1lZCAndHR5UFMwJyBhbmQgJ3R0eVBTMScsIGZpeHVwIHRoZSBkZWZhdWx0IHZhbHVlcworICAgIFNDUklQVF9LRVJORUxfT1BUPSQoZWNobyAiJFNDUklQVF9LRVJORUxfT1BUIiB8IHNlZCAncy9jb25zb2xlPXR0eVMvY29uc29sZT10dHlQUy9nJykKKyAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIke0ZTVFlQRTowOjR9IiA9ICJjcGlvIiBdOyB0aGVuCisgICAgICAgIEtFUk5DTURMSU5FPSJlYXJseXByaW50ayByb290PS9kZXYvcmFtIHJ3IgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfU1lTVEVNX09QVElPTlMgLWluaXRyZCAkUk9PVEZTIgorICAgIGZpCitmaQorCitpZiBbICJ4JFJBTUZTIiA9ICJ4dHJ1ZSIgXTsgdGhlbgorICAgIFFFTVVPUFRJT05TPSItaW5pdHJkICRST09URlMgLW5vZ3JhcGhpYyIKKyAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L3JhbTAgY29uc29sZT10dHlTMCBkZWJ1Z3NoZWxsIgorZmkKKworaWYgWyAieCRJU09GUyIgPSAieHRydWUiIF07IHRoZW4KKyAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLWNkcm9tICRST09URlMgJFFFTVVfVUlfT1BUSU9OUyIKK2ZpCisKK2lmIFsgIngkUUVNVU9QVElPTlMiID0gIngiIF07IHRoZW4KKyAgICBlY2hvICJFcnJvcjogVW5hYmxlIHRvIHN1cHBvcnQgdGhpcyBjb21iaW5hdGlvbiBvZiBvcHRpb25zIgorICAgIGNsZWFudXAKKyAgICByZXR1cm4gMQorZmkKKworaWYgWyAiJFRDUFNFUklBTF9QT1JUTlVNIiAhPSAiIiBdOyB0aGVuCisgICAgaWYgWyAiJE1BQ0hJTkUiID0gInFlbXVhcm02NCIgXTsgdGhlbgorICAgICAgICBTQ1JJUFRfUUVNVV9FWFRSQV9PUFQ9IiRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQgLWRldmljZSB2aXJ0aW8tc2VyaWFsLWRldmljZSAtY2hhcmRldiBzb2NrZXQsaWQ9dmlydGNvbixwb3J0PSRUQ1BTRVJJQUxfUE9SVE5VTSxob3N0PTEyNy4wLjAuMSAtZGV2aWNlIHZpcnRjb25zb2xlLGNoYXJkZXY9dmlydGNvbiIKKyAgICBlbHNlCisgICAgICAgIFNDUklQVF9RRU1VX0VYVFJBX09QVD0iJFNDUklQVF9RRU1VX0VYVFJBX09QVCAtc2VyaWFsIHRjcDoxMjcuMC4wLjE6JFRDUFNFUklBTF9QT1JUTlVNIgorICAgIGZpCitmaQorCitQQVRIPSRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvdXNyL2JpbjokUEFUSAorCitRRU1VQklOPWB3aGljaCAkUUVNVSAyPiAvZGV2L251bGxgCitpZiBbICEgLXggIiRRRU1VQklOIiBdOyB0aGVuCisgICAgZWNobyAiRXJyb3I6IE5vIFFFTVUgYmluYXJ5ICckUUVNVScgY291bGQgYmUgZm91bmQuIgorICAgIGNsZWFudXAKKyAgICByZXR1cm4gMQorZmkKKworTkVFRF9HTD1gbGRkICRRRU1VQklOLyRRRU1VIDI+JjEgfCBncmVwIGxpYkdMVWAKKyMgV2UgY2FuJ3QgcnVuIHdpdGhvdXQgYSBsaWJHTC5zbworaWYgWyAiJE5FRURfR0wiICE9ICIiIF07IHRoZW4KKyAgICBsaWJnbD0nbm8nCisKKyAgICBbIC1lIC91c3IvbGliL2xpYkdMLnNvIC1hIC1lIC91c3IvbGliL2xpYkdMVS5zbyBdICYmIGxpYmdsPSd5ZXMnCisgICAgWyAtZSAvdXNyL2xpYjY0L2xpYkdMLnNvIC1hIC1lIC91c3IvbGliNjQvbGliR0xVLnNvIF0gJiYgbGliZ2w9J3llcycKKyAgICBbIC1lIC91c3IvbGliLyotbGludXgtZ251L2xpYkdMLnNvIC1hIC1lIC91c3IvbGliLyotbGludXgtZ251L2xpYkdMVS5zbyBdICYmIGxpYmdsPSd5ZXMnCisKKyAgICBpZiBbICIkbGliZ2wiICE9ICd5ZXMnIF07IHRoZW4KKyAgICAgICAgZWNobyAiWW91IG5lZWQgbGliR0wuc28gYW5kIGxpYkdMVS5zbyB0byBleGlzdCBpbiB5b3VyIGxpYnJhcnkgcGF0aCB0byBydW4gdGhlIFFFTVUgZW11bGF0b3IuCisgICAgICAgIFVidW50dSBwYWNrYWdlIG5hbWVzIGFyZTogbGliZ2wxLW1lc2EtZGV2IGFuZCBsaWJnbHUxLW1lc2EtZGV2LgorICAgICAgICBGZWRvcmEgcGFja2FnZSBuYW1lcyBhcmU6IG1lc2EtbGliR0wtZGV2ZWwgbWVzYS1saWJHTFUtZGV2ZWwuIgorICAgICAgICByZXR1cm4gMTsKKyAgICBmaQorZmkKKworZG9fcXVpdCgpIHsKKyAgICBjbGVhbnVwCisgICAgcmV0dXJuIDEKK30KKwordHJhcCBkb19xdWl0IElOVCBURVJNIFFVSVQKKworIyBxZW11IGdvdCBzZWdmYXVsdCBpZiBsaW5rZWQgd2l0aCBuVmlkaWEncyBsaWJnbAorR0xfTERfUFJFTE9BRD0kTERfUFJFTE9BRAorCitpZiBsZGQgJFFFTVVCSU4gfCBncmVwIC1pIG52aWRpYSAmPiAvZGV2L251bGwKK3RoZW4KK2NhdCA8PCBFT00KK1dBUk5JTkc6IG5WaWRpYSBwcm9wcmlldGFyeSBPcGVuR0wgbGlicmFyaWVzIGRldGVjdGVkLgorblZpZGlhJ3MgT3BlbkdMIGxpYnJhcmllcyBhcmUga25vd24gdG8gaGF2ZSBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoIHFlbXUsCityZXN1bHRpbmcgaW4gYSBzZWdmYXVsdC4gUGxlYXNlIHVuaW5zdGFsbCB0aGVzZSBkcml2ZXJzIG9yIGVuc3VyZSB0aGUgbWVzYSBsaWJHTAorbGlicmFyaWVzIHByZWNlZGUgbnZpZGlhJ3MgdmlhIExEX1BSRUxPQUQoQWxyZWFkeSBkbyBpdCBvbiBVYnVudHUgMTApLgorRU9NCisKKyMgQXV0b21hdGljYWxseSB1c2UgVWJ1bnR1IHN5c3RlbSdzIG1lc2EgbGliR0wsIG90aGVyIGRpc3RybyBjYW4gYWRkIGl0cyBvd24gcGF0aAoraWYgZ3JlcCAtaSB1YnVudHUgL2V0Yy9sc2ItcmVsZWFzZSAmPiAvZGV2L251bGwKK3RoZW4KKyAgICAjIHByZWNlZGUgbnZpZGlhJ3MgZHJpdmVyIG9uIFVidW50dSAxMAorICAgIFVCVU5UVV9NQUlOX1ZFUlNJT049YGNhdCAvZXRjL2xzYi1yZWxlYXNlIHxncmVwIERJU1RSSUJfUkVMRUFTRSB8Y3V0IC1kPSAgLWYgMnwgY3V0IC1kLiAtZiAxYAorICAgIGlmIFsgIiRVQlVOVFVfTUFJTl9WRVJTSU9OIiA9ICIxMCIgXTsKKyAgICB0aGVuCisgICAgICAgIEdMX1BBVEg9IiIKKyAgICAgICAgaWYgdGVzdCAtZSAvdXNyL2xpYi9saWJHTC5zbworICAgICAgICB0aGVuIAorICAgICAgICAgICAgR0xfUEFUSD0iL3Vzci9saWIvbGliR0wuc28iCisgICAgICAgIGVsaWYgdGVzdCAtZSAvdXNyL2xpYi94ODZfNjQtbGludXgtZ251L2xpYkdMLnNvCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIEdMX1BBVEg9Ii91c3IvbGliL3g4Nl82NC1saW51eC1nbnUvbGliR0wuc28iCisgICAgICAgIGZpCisKKyAgICAgICAgZWNobyAiU2tpcCBuVmlkaWEncyBsaWJHTCBvbiBVYnVudHUgMTAhIgorICAgICAgICBHTF9MRF9QUkVMT0FEPSIkR0xfUEFUSCAkTERfUFJFTE9BRCIKKyAgICBmaQorZmkKK2ZpCisKK2lmIFsgIngkU0VSSUFMU1RESU8iID0gIngxIiBdOyB0aGVuCisgICAgICAgIGVjaG8gIkludGVycnVwdCBjaGFyYWN0ZXIgaXMgJ15dJyIKKyAgICAgICAgc3R0eSBpbnRyIF5dCitmaQorCitlY2hvICJSdW5uaW5nICRRRU1VLi4uIgorIyAtbm8tcmVib290IGlzIGEgbWFuZGF0b3J5IG9wdGlvbiAtIHNlZSBidWcgIzEwMAoraWYgWyAiJEZTVFlQRSIgPSAidm1kayIgLW8gIiRGU1RZUEUiID0gImhkZGltZyIgLW8gIiRGU1RZUEUiID0gImhkZGRpcmVjdCIgXTsgdGhlbgorICAgIGVjaG8gJFFFTVVCSU4gJFZNICRRRU1VT1BUSU9OUyAkU0VSSUFMT1BUUyAtbm8tcmVib290ICRTQ1JJUFRfUUVNVV9PUFQgJFNDUklQVF9RRU1VX0VYVFJBX09QVAorICAgIExEX1BSRUxPQUQ9IiRHTF9MRF9QUkVMT0FEIiAkUUVNVUJJTiAkVk0gJFFFTVVPUFRJT05TICRTRVJJQUxPUFRTIC1uby1yZWJvb3QgJFNDUklQVF9RRU1VX09QVCAkU0NSSVBUX1FFTVVfRVhUUkFfT1BUCitlbGlmIFsgIiRGU1RZUEUiID0gImlzbyIgXTsgdGhlbgorICAgIGVjaG8gJFFFTVVCSU4gJFFFTVVPUFRJT05TICRTRVJJQUxPUFRTIC1uby1yZWJvb3QgJFNDUklQVF9RRU1VX09QVCAkU0NSSVBUX1FFTVVfRVhUUkFfT1BUCisgICAgTERfUFJFTE9BRD0iJEdMX0xEX1BSRUxPQUQiICRRRU1VQklOICRRRU1VT1BUSU9OUyAkU0VSSUFMT1BUUyAtbm8tcmVib290ICRTQ1JJUFRfUUVNVV9PUFQgJFNDUklQVF9RRU1VX0VYVFJBX09QVAorZWxzZQorICAgIGVjaG8gJFFFTVVCSU4gLWtlcm5lbCAkS0VSTkVMICRRRU1VT1BUSU9OUyAkU0xJUlBfQ01EICRTRVJJQUxPUFRTIC1uby1yZWJvb3QgJFNDUklQVF9RRU1VX09QVCAkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIC0tYXBwZW5kICciJyRLRVJOQ01ETElORSAkU0NSSVBUX0tFUk5FTF9PUFQnIicKKyAgICBMRF9QUkVMT0FEPSIkR0xfTERfUFJFTE9BRCIgJFFFTVVCSU4gLWtlcm5lbCAkS0VSTkVMICRRRU1VT1BUSU9OUyAkU0VSSUFMT1BUUyAtbm8tcmVib290ICRTQ1JJUFRfUUVNVV9PUFQgJFNDUklQVF9RRU1VX0VYVFJBX09QVCAtLWFwcGVuZCAiJEtFUk5DTURMSU5FICRTQ1JJUFRfS0VSTkVMX09QVCIKK2ZpCityZXQ9JD8KK2lmIFsgIiRTTElSUF9FTkFCTEVEIiAhPSAieWVzIiBdOyB0aGVuCisgICAgICAgIGNsZWFudXAKK2ZpCisKKyNzZXQgdGhlIG9yaWdpbmFsIHN0dHkgdmFsdWVzIGJlZm9yZSBleGl0CitzdHR5ICR7T1JJR19TVFRZfQordHJhcCAtIElOVCBURVJNIFFVSVQKKworcmV0dXJuICRyZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LlJFQURNRSBiL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LlJFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTA4ZDgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUuUkVBRE1FCkBAIC0wLDAgKzEsNDIgQEAKK1VzaW5nIE9FIGltYWdlcyB3aXRoIFFFTVUKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworT0UtQ29yZSBjYW4gZ2VuZXJhdGUgcWVtdSBib290YWJsZSBrZXJuZWxzIGFuZCBpbWFnZXMgd2l0aCBjYW4gYmUgdXNlZCAKK29uIGEgZGVza3RvcCBzeXN0ZW0uIFRoZSBzY3JpcHRzIGN1cnJlbnRseSBzdXBwb3J0IGJvb3RpbmcgQVJNLCBNSVBTLCBQb3dlclBDCithbmQgeDg2ICgzMiBhbmQgNjQgYml0KSBpbWFnZXMuIFRoZSBzY3JpcHRzIGNhbiBiZSB1c2VkIHdpdGhpbiB0aGUgT0UgYnVpbGQgCitzeXN0ZW0gb3IgZXh0ZXJuYWx5LgorCitUaGUgcnVucWVtdSBzY3JpcHQgaXMgcnVuIGFzOiAKKworICAgcnVucWVtdSA8bWFjaGluZT4gPHppbWFnZT4gPGZpbGVzeXN0ZW0+CisKK3doZXJlOgorCisgICA8bWFjaGluZT4gaXMgdGhlIG1hY2hpbmUvYXJjaGl0ZWN0dXJlIHRvIHVzZSAocWVtdWFybS9xZW11bWlwcy9xZW11cHBjL3FlbXV4ODYvcWVtdXg4Ni02NCkKKyAgIDx6aW1hZ2U+IGlzIHRoZSBwYXRoIHRvIGEga2VybmVsIChlLmcuIHppbWFnZS1xZW11YXJtLmJpbikKKyAgIDxmaWxlc3lzdGVtPiBpcyB0aGUgcGF0aCB0byBhbiBleHQyIGltYWdlIChlLmcuIGZpbGVzeXN0ZW0tcWVtdWFybS5leHQyKSBvciBhbiBuZnMgZGlyZWN0b3J5CisgICAKK0lmIDxtYWNoaW5lPiBpc24ndCBzcGVjaWZpZWQsIHRoZSBzY3JpcHQgd2lsbCB0cnkgdG8gZGV0ZWN0IHRoZSBtYWNoaW5lIG5hbWUgCitmcm9tIHRoZSBuYW1lIG9mIHRoZSA8emltYWdlPiBmaWxlLgorCitJZiA8ZmlsZXN5c3RlbT4gaXNuJ3Qgc3BlY2lmaWVkLCBuZnMgYm9vdGluZyB3aWxsIGJlIGFzc3VtZWQuCisKK1doZW4gdXNlZCB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbSwgaXQgd2lsbCBkZWZhdWx0IHRvIHFlbXVhcm0sIGV4dDIgYW5kIHRoZSBsYXN0IGtlcm5lbCBhbmQgCitjb3JlLWltYWdlLXNhdG8tc2RrIGltYWdlIGJ1aWx0IGJ5IHRoZSBidWlsZCBzeXN0ZW0uIElmIGFuIHNkayBpbWFnZSBpc24ndCBwcmVzZW50IGl0IHdpbGwgbG9vaworZm9yIHNhdG8gYW5kIG1pbmltYWwgaW1hZ2VzLgorCitGdWxsIHVzYWdlIGluc3RydWN0aW9ucyBjYW4gYmUgc2VlbiBieSBydW5uaW5nIHRoZSBjb21tYW5kIHdpdGggbm8gb3B0aW9ucyBzcGVjaWZpZWQuCisKKworTm90ZXMKKz09PT09CisKKyAtIFRoZSBzY3JpcHRzIHJ1biBxZW11IHVzaW5nIHN1ZG8uIENoYW5nZSBwZXJtcyBvbiAvZGV2L25ldC90dW4gdG8gCisgICBydW4gYXMgbm9uIHJvb3QuIFRoZSBydW5xZW11LWdlbi10YXBkZXZzIHNjcmlwdCBjYW4gYWxzbyBiZSB1c2VkIGJ5CisgICByb290IHRvIHByZXBvcHVsYXRlIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGRldmljZXMuCisgLSBZb3UgY2FuIGFjY2VzcyB0aGUgaG9zdCBjb21wdXRlciBhdCAxOTIuMTY4LjcuMSB3aXRoaW4gdGhlIGltYWdlLgorIC0gWW91ciBxZW11IHN5c3RlbSB3aWxsIGJlIGFjY2Vzc2libGUgYXMgMTkyLjE2LjcuMi4KKyAtIFRoZSBzY3JpcHQgZXh0cmFjdHMgdGhlIHJvb3QgZmlsZXN5c3RlbSBzcGVjaWZpZWQgdW5kZXIgcHNldWRvIGFuZCBzZXRzIHVwIGEgdXNlcnNwYWNlCisgICBORlMgc2VydmVyIHRvIHNoYXJlIHRoZSBpbWFnZSBvdmVyIGJ5IGRlZmF1bHQgbWVhbmluZyB0aGUgZmlsZXN5c3RlbSBjYW4gYmUgYWNjZXNzZWQgYnkKKyAgIGJvdGggdGhlIGhvc3QgYW5kIGd1ZXN0IHN5c3RlbXMuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9zZW5kLWVycm9yLXJlcG9ydCBiL3lvY3RvLXBva3kvc2NyaXB0cy9zZW5kLWVycm9yLXJlcG9ydApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYTFiOTY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3NlbmQtZXJyb3ItcmVwb3J0CkBAIC0wLDAgKzEsMTk2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBTZW5kcyBhbiBlcnJvciByZXBvcnQgKGlmIHRoZSByZXBvcnQtZXJyb3IgY2xhc3Mgd2FzIGVuYWJsZWQpIHRvIGEKKyMgcmVtb3RlIHNlcnZlci4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjIEF1dGhvcjogQW5kcmVlYSBQcm9jYSA8YW5kcmVlYS5iLnByb2NhQGludGVsLmNvbT4KKyMgQXV0aG9yOiBNaWNoYWVsIFdvb2QgPG1pY2hhZWwuZy53b29kQGludGVsLmNvbT4KKworaW1wb3J0IHVybGxpYjIKK2ltcG9ydCBzeXMKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBsb2dnaW5nCisKK3ZlcnNpb24gPSAiMC4zIgorCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcigic2VuZC1lcnJvci1yZXBvcnQiKQorbG9nZ2luZy5iYXNpY0NvbmZpZyhmb3JtYXQ9JyUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzJykKKworZGVmIGdldFBheWxvYWRMaW1pdCh1cmwpOgorICAgIHJlcSA9IHVybGxpYjIuUmVxdWVzdCh1cmwsIE5vbmUpCisgICAgdHJ5OgorICAgICAgICByZXNwb25zZSA9IHVybGxpYjIudXJsb3BlbihyZXEpCisgICAgZXhjZXB0IHVybGxpYjIuVVJMRXJyb3IgYXMgZToKKyAgICAgICAgIyBVc2UgdGhpcyBvcHBvcnR1bml0eSB0byBiYWlsIG91dCBpZiB3ZSBjYW4ndCBldmVuIGNvbnRhY3QgdGhlIHNlcnZlcgorICAgICAgICBsb2cuZXJyb3IoIkNvdWxkIG5vdCBjb250YWN0IHNlcnZlcjogIiArIHVybCkKKyAgICAgICAgbG9nLmVycm9yKGUucmVhc29uKQorICAgICAgICBzeXMuZXhpdCgxKQorICAgIHRyeToKKyAgICAgICAgcmV0ID0ganNvbi5sb2FkcyhyZXNwb25zZS5yZWFkKCkpCisgICAgICAgIG1heF9sb2dfc2l6ZSA9IHJldC5nZXQoJ21heF9sb2dfc2l6ZScsIDApCisgICAgICAgIHJldHVybiBpbnQobWF4X2xvZ19zaXplKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworCisgICAgcmV0dXJuIDAKKworZGVmIGFza19mb3JfY29udGFjdGRldGFpbHMoKToKKyAgICBwcmludCgiUGxlYXNlIGVudGVyIHlvdXIgbmFtZSBhbmQgeW91ciBlbWFpbCAob3B0aW9uYWxseSksIHRoZXknbGwgYmUgc2F2ZWQgaW4gdGhlIGZpbGUgeW91IHNlbmQuIikKKyAgICB1c2VybmFtZSA9IHJhd19pbnB1dCgiTmFtZSAocmVxdWlyZWQpOiAiKQorICAgIGVtYWlsID0gcmF3X2lucHV0KCJFLW1haWwgKG5vdCByZXF1aXJlZCk6ICIpCisgICAgcmV0dXJuIHVzZXJuYW1lLCBlbWFpbAorCitkZWYgZWRpdF9jb250ZW50KGpzb25fZmlsZV9wYXRoKToKKyAgICBlZGl0ID0gcmF3X2lucHV0KCJSZXZpZXcgaW5mb3JtYXRpb24gYmVmb3JlIHNlbmRpbmc/ICh5L24pOiAiKQorICAgIGlmICd5JyBpbiBlZGl0IG9yICdZJyBpbiBlZGl0OgorICAgICAgICBlZGl0b3IgPSBvcy5lbnZpcm9uLmdldCgnRURJVE9SJywgTm9uZSkKKyAgICAgICAgaWYgZWRpdG9yOgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFtlZGl0b3IsIGpzb25fZmlsZV9wYXRoXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZy5lcnJvcigiUGxlYXNlIHNldCB5b3VyIEVESVRPUiB2YWx1ZSIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCitkZWYgcHJlcGFyZV9kYXRhKGFyZ3MpOgorICAgICMgYXR0ZW1wdCB0byBnZXQgdGhlIG1heF9sb2dfc2l6ZSBmcm9tIHRoZSBzZXJ2ZXIncyBzZXR0aW5ncworICAgIG1heF9sb2dfc2l6ZSA9IGdldFBheWxvYWRMaW1pdCgiaHR0cDovLyIrYXJncy5zZXJ2ZXIrIi9DbGllbnRQb3N0L0pTT04iKQorCisgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGFyZ3MuZXJyb3JfZmlsZSk6CisgICAgICAgIGxvZy5lcnJvcigiTm8gZGF0YSBmaWxlIGZvdW5kLiIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBob21lID0gb3MucGF0aC5leHBhbmR1c2VyKCJ+IikKKyAgICB1c2VyZmlsZSA9IG9zLnBhdGguam9pbihob21lLCAiLm9lLXNlbmQtZXJyb3IiKQorCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4odXNlcmZpbGUsICdyJykgYXMgdXNlcmZpbGVfZnA6CisgICAgICAgICAgICBpZiBsZW4oYXJncy5uYW1lKSA9PSAwOgorICAgICAgICAgICAgICAgIGFyZ3MubmFtZSA9IHVzZXJmaWxlX2ZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgI3VzZSBlbXB0eSByZWFkbGluZSB0byBpbmNyZW1lbnQgdGhlIGZwCisgICAgICAgICAgICAgICAgdXNlcmZpbGVfZnAucmVhZGxpbmUoKQorCisgICAgICAgICAgICBpZiBsZW4oYXJncy5lbWFpbCkgPT0gMDoKKyAgICAgICAgICAgICAgICBhcmdzLmVtYWlsID0gdXNlcmZpbGVfZnAucmVhZGxpbmUoKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworCisgICAgaWYgYXJncy5hc3N1bWVfeWVzID09IFRydWUgYW5kIGxlbihhcmdzLm5hbWUpID09IDA6CisgICAgICAgIGxvZy5lcnJvcigiTmFtZSBuZWVkcyB0byBiZSBwcm92aWRlZCBlaXRoZXIgdmlhICIrdXNlcmZpbGUrIiBvciBhcyBhbiBhcmd1bWVudCAoLW4pLiIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICB3aGlsZSBsZW4oYXJncy5uYW1lKSA8PSAwIGFuZCBsZW4oYXJncy5uYW1lKSA8IDUwOgorICAgICAgICBwcmludCgiXG5OYW1lIG5lZWRzIHRvIGJlIGdpdmVuIGFuZCBtdXN0IG5vdCBtb3JlIHRoYW4gNTAgY2hhcmFjdGVycy4iKQorICAgICAgICBhcmdzLm5hbWUsIGFyZ3MuZW1haWwgPSBhc2tfZm9yX2NvbnRhY3RkZXRhaWxzKCkKKworICAgIHdpdGggb3Blbih1c2VyZmlsZSwgJ3cnKSBhcyB1c2VyZmlsZV9mcDoKKyAgICAgICAgdXNlcmZpbGVfZnAud3JpdGUoYXJncy5uYW1lLnN0cmlwKCkgKyAiXG4iKQorICAgICAgICB1c2VyZmlsZV9mcC53cml0ZShhcmdzLmVtYWlsLnN0cmlwKCkgKyAiXG4iKQorCisgICAgd2l0aCBvcGVuKGFyZ3MuZXJyb3JfZmlsZSwgJ3InKSBhcyBqc29uX2ZwOgorICAgICAgICBkYXRhID0ganNvbl9mcC5yZWFkKCkKKworICAgICAgICBqc29uZGF0YSA9IGpzb24ubG9hZHMoZGF0YSkKKyAgICAgICAganNvbmRhdGFbJ3VzZXJuYW1lJ10gPSBhcmdzLm5hbWUuc3RyaXAoKQorICAgICAgICBqc29uZGF0YVsnZW1haWwnXSA9IGFyZ3MuZW1haWwuc3RyaXAoKQorICAgICAgICBqc29uZGF0YVsnbGlua19iYWNrJ10gPSBhcmdzLmxpbmtfYmFjay5zdHJpcCgpCisgICAgICAgICMgSWYgd2UgZ290IGEgbWF4X2xvZ19zaXplIHRoZW4gdXNlIHRoaXMgdG8gdHJ1bmNhdGUgdG8gZ2V0IHRoZSBsYXN0CisgICAgICAgICMgbWF4X2xvZ19zaXplIGJ5dGVzIGZyb20gdGhlIGVuZAorICAgICAgICBpZiBtYXhfbG9nX3NpemUgIT0gMDoKKyAgICAgICAgICAgIGZvciBmYWlsIGluIGpzb25kYXRhWydmYWlsdXJlcyddOgorICAgICAgICAgICAgICAgIGlmIGxlbihmYWlsWydsb2cnXSkgPiBtYXhfbG9nX3NpemU6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJUcnVuY2F0aW5nIGxvZyB0byBhbGxvdyBmb3IgdXBsb2FkIgorICAgICAgICAgICAgICAgICAgICBmYWlsWydsb2cnXSA9IGZhaWxbJ2xvZyddWy1tYXhfbG9nX3NpemU6XQorCisgICAgICAgIGRhdGEgPSBqc29uLmR1bXBzKGpzb25kYXRhLCBpbmRlbnQ9NCwgc29ydF9rZXlzPVRydWUpCisKKyAgICAjIFdyaXRlIGJhY2sgdGhlIHJlc3VsdCB3aGljaCB3aWxsIGNvbnRhaW4gYWxsIGZpZWxkcyBmaWxsZWQgaW4gYW5kCisgICAgIyBhbnkgcG9zdCBwcm9jZXNzaW5nIGRvbmUgb24gdGhlIGxvZyBkYXRhCisgICAgd2l0aCBvcGVuKGFyZ3MuZXJyb3JfZmlsZSwgInciKSBhcyBqc29uX2ZwOgorICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAganNvbl9mcC53cml0ZShkYXRhKQorCisKKyAgICBpZiBhcmdzLmFzc3VtZV95ZXMgPT0gRmFsc2UgYW5kIGVkaXRfY29udGVudChhcmdzLmVycm9yX2ZpbGUpOgorICAgICAgICAjV2UnbGwgbmVlZCB0byByZS1yZWFkIHRoZSBjb250ZW50IGlmIHdlIGVkaXRlZCBpdAorICAgICAgICB3aXRoIG9wZW4oYXJncy5lcnJvcl9maWxlLCAncicpIGFzIGpzb25fZnA6CisgICAgICAgICAgICBkYXRhID0ganNvbl9mcC5yZWFkKCkKKworICAgIHJldHVybiBkYXRhCisKKworZGVmIHNlbmRfZGF0YShkYXRhLCBhcmdzKToKKyAgICBoZWFkZXJzPXsnQ29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnVXNlci1BZ2VudCc6ICJzZW5kLWVycm9yLXJlcG9ydC8iK3ZlcnNpb259CisKKyAgICBpZiBhcmdzLmpzb246CisgICAgICAgIHVybCA9ICJodHRwOi8vIithcmdzLnNlcnZlcisiL0NsaWVudFBvc3QvSlNPTi8iCisgICAgZWxzZToKKyAgICAgICAgdXJsID0gImh0dHA6Ly8iK2FyZ3Muc2VydmVyKyIvQ2xpZW50UG9zdC8iCisKKyAgICByZXEgPSB1cmxsaWIyLlJlcXVlc3QodXJsLCBkYXRhPWRhdGEsIGhlYWRlcnM9aGVhZGVycykKKyAgICB0cnk6CisgICAgICAgIHJlc3BvbnNlID0gdXJsbGliMi51cmxvcGVuKHJlcSkKKyAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3IsIGU6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoZS5yZWFzb24pCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBwcmludCByZXNwb25zZS5yZWFkKCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGFyZ19wYXJzZSA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSJUaGlzIHNjcmlwdHMgd2lsbCBzZW5kIGFuIGVycm9yIHJlcG9ydCB0byB5b3VyIHNwZWNpZmllZCBlcnJvci1yZXBvcnQtd2ViIHNlcnZlci4iKQorCisgICAgYXJnX3BhcnNlLmFkZF9hcmd1bWVudCgiZXJyb3JfZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJHZW5lcmF0ZWQgZXJyb3IgcmVwb3J0IGZpbGUgbG9jYXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIpCisKKyAgICBhcmdfcGFyc2UuYWRkX2FyZ3VtZW50KCIteSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1hc3N1bWUteWVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkFzc3VtZSB5ZXMgdG8gYWxsIHF1ZXJpZXMgYW5kIGRvIG5vdCBwcm9tcHQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIikKKworICAgIGFyZ19wYXJzZS5hZGRfYXJndW1lbnQoIi1zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICItLXNlcnZlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTZXJ2ZXIgdG8gc2VuZCBlcnJvciByZXBvcnQgdG8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJlcnJvcnMueW9jdG9wcm9qZWN0Lm9yZyIpCisKKyAgICBhcmdfcGFyc2UuYWRkX2FyZ3VtZW50KCItZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1lbWFpbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJFbWFpbCBhZGRyZXNzIHRvIGJlIHVzZWQgZm9yIGNvbnRhY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSIiKQorCisgICAgYXJnX3BhcnNlLmFkZF9hcmd1bWVudCgiLW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTdWJtaXR0ZXIgbmFtZSB1c2VkIHRvIGlkZW50aWZ5IHlvdXIgZXJyb3IgcmVwb3J0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iIikKKworICAgIGFyZ19wYXJzZS5hZGRfYXJndW1lbnQoIi1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWxpbmstYmFjayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJBIHVybCB0byBsaW5rIGJhY2sgdG8gdGhpcyBidWlsZCBmcm9tIHRoZSBlcnJvciByZXBvcnQgc2VydmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iIikKKworICAgIGFyZ19wYXJzZS5hZGRfYXJndW1lbnQoIi1qIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWpzb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUmV0dXJuIHRoZSByZXN1bHQgaW4ganNvbiBmb3JtYXQsIHNpbGVuY2VzIGFsbCBvdGhlciBvdXRwdXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIikKKworCisKKyAgICBhcmdzID0gYXJnX3BhcnNlLnBhcnNlX2FyZ3MoKQorCisgICAgaWYgKGFyZ3MuanNvbiA9PSBGYWxzZSk6CisgICAgICAgIHByaW50ICJQcmVwYXJpbmcgdG8gc2VuZCBlcnJvcnMgdG86ICIrYXJncy5zZXJ2ZXIKKworICAgIGRhdGEgPSBwcmVwYXJlX2RhdGEoYXJncykKKyAgICBzZW5kX2RhdGEoZGF0YSwgYXJncykKKworICAgIHN5cy5leGl0KDApCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvc2VuZC1wdWxsLXJlcXVlc3QgYi95b2N0by1wb2t5L3NjcmlwdHMvc2VuZC1wdWxsLXJlcXVlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTc1NTQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9zZW5kLXB1bGwtcmVxdWVzdApAQCAtMCwwICsxLDE3OSBAQAorIyEvYmluL2Jhc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEsICBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyAKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7ICB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCisjIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworIworIyBUaGlzIHNjcmlwdCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHNlbmQgYSBwYXRjaCBzZXJpZXMgcHJlcGFyZWQgYnkgdGhlCisjIGNyZWF0ZS1wdWxsLXJlcXVlc3Qgc2NyaXB0IHRvIE9wZW4gRW1iZWRkZWQgYW5kIFRoZSBZb2N0byBQcm9qZWN0LCBhcyB3ZWxsCisjIGFzIHRvIHJlbGF0ZWQgcHJvamVjdHMgYW5kIGxheWVycy4KKyMKKworQVVUTz0wCitBVVRPX0NMPTAKK0dJVFNPQkNDPSItLXN1cHByZXNzLWNjPWFsbCIKKworIyBQcmV2ZW50IGVudmlyb25tZW50IGxlYWthZ2UgdG8gdGhlc2UgdmFycy4KK3Vuc2V0IFRPCit1bnNldCBDQwordW5zZXQgQVVUT19DQwordW5zZXQgRVhUUkFfQ0MKKwordXNhZ2UoKQoreworY2F0IDw8RU9NCitVc2FnZTogJChiYXNlbmFtZSAkMCkgWy1oXSBbLWFdIFstY10gW1stdCBlbWFpbF0uLi5dIC1wIHB1bGwtZGlyIAorICAtYSAgICAgICAgICAgU2VuZCB0aGUgY292ZXIgbGV0dGVyIHRvIGV2ZXJ5IHJlY2lwaWVudCBsaXN0ZWQgaW4gQ2MgYW5kCisgICAgICAgICAgICAgICBTaWduZWQtb2ZmLWJ5IGxpbmVzIGZvdW5kIGluIHRoZSBjb3ZlciBsZXR0ZXIgYW5kIHRoZSBwYXRjaGVzLgorCSAgICAgICBUaGlzIG9wdGlvbiBpbXBsaWVzIC1jLgorICAtYyAgICAgICAgICAgRXhwYW5kIHRoZSBDYyBsaXN0IGZvciB0aGUgaW5kaXZpZHVhbCBwYXRjaGVzIHVzaW5nIHRoZSBDYyBhbmQKKyAgICAgICAgICAgICAgIFNpZ25lZC1vZmYtYnkgbGluZXMgZnJvbSB0aGUgc2FtZSBwYXRjaC4KKyAgLUMgICAgICAgICAgIEFkZCBleHRyYSBDQyB0byBlYWNoIGVtYWlsIHNlbnQuCisgIC1wIHB1bGwtZGlyICBEaXJlY3RvcnkgY29udGFpbmluZyBzdW1tYXJ5IGFuZCBwYXRjaCBmaWxlcworICAtdCBlbWFpbCAgICAgRXhwbGljaXRseSBhZGQgZW1haWwgdG8gdGhlIHJlY2lwaWVudHMKK0VPTQorfQorCisjIENvbGxlY3QgYWRkcmVzc2VzIGZyb20gYSBwYXRjaCBpbnRvIEFVVE9fQ0MKKyMgJDE6IGEgcGF0Y2ggZmlsZQoraGFydmVzdF9yZWNpcGllbnRzKCkKK3sKKwlQQVRDSD0kMQorCWV4cG9ydCBJRlM9JCcsXG4nCisJZm9yIFJFR1ggaW4gIl5bQ2NdW0NjXTogKiIgIl5bU3NdaWduZWQtW09vXWZmLVtCYl15OiAqIjsgZG8KKwkJZm9yIEVNQUlMIGluICQoc2VkICcvXi0tLSQvcScgJFBBVENIIHwgZ3JlcCAtZSAiJFJFR1giIHwgc2VkICJzLyRSRUdYLy8iKTsgZG8KKwkJCWlmIFsgIiR7QVVUT19DQy8kRU1BSUwvfSIgPT0gIiRBVVRPX0NDIiBdICYmIFsgLW4gIiRFTUFJTCIgXTsgdGhlbgorCQkJCWlmIFsgLXogIiRBVVRPX0NDIiBdOyB0aGVuCisJCQkJCUFVVE9fQ0M9JEVNQUlMOworCQkJCWVsc2UKKwkJCQkJQVVUT19DQz0iJEFVVE9fQ0MsJEVNQUlMIjsKKwkJCQlmaQorCQkJZmkKKwkJZG9uZQorCWRvbmUKKwl1bnNldCBJRlMKK30KKworIyBQYXJzZSBhbmQgdmVyaWZ5IGFyZ3VtZW50cword2hpbGUgZ2V0b3B0cyAiYWNDOmhwOnQ6IiBPUFQ7IGRvCisJY2FzZSAkT1BUIGluCisJYSkKKwkJQVVUTz0xCisJCUdJVFNPQkNDPSItLXNpZ25lZC1vZmYtYnktY2MiCisJCUFVVE9fQ0w9MQorCQk7OworCWMpCisJCUFVVE89MQorCQlHSVRTT0JDQz0iLS1zaWduZWQtb2ZmLWJ5LWNjIgorCQk7OworCUMpCisJCUVYVFJBX0NDPSIkT1BUQVJHIgorCQk7OworCWgpCisJCXVzYWdlCisJCWV4aXQgMAorCQk7OworCXApCisJCVBESVI9JHtPUFRBUkclL30KKwkJaWYgWyAhIC1kICRQRElSIF07IHRoZW4KKwkJCWVjaG8gIkVSUk9SOiBwdWxsLWRpciBcIiRQRElSXCIgZG9lcyBub3QgZXhpc3QuIgorCQkJdXNhZ2UKKwkJCWV4aXQgMQorCQlmaQorCQk7OworCXQpCisJCWlmIFsgLW4gIiRUTyIgXTsgdGhlbgorCQkJVE89IiRUTywkT1BUQVJHIgorCQllbHNlCisJCQlUTz0iJE9QVEFSRyIKKwkJZmkKKwkJOzsKKwllc2FjCitkb25lCisKK2lmIFsgLXogIiRQRElSIiBdOyB0aGVuCisJZWNobyAiRVJST1I6IHlvdSBtdXN0IHNwZWNpZnkgYSBwdWxsLWRpci4iCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKKworIyBWZXJpZnkgdGhlIGNvdmVyIGxldHRlciBpcyBjb21wbGV0ZSBhbmQgZnJlZSBvZiB0b2tlbnMKK2lmIFsgLWUgJFBESVIvMDAwMC1jb3Zlci1sZXR0ZXIucGF0Y2ggXTsgdGhlbgorCUNMPSIkUERJUi8wMDAwLWNvdmVyLWxldHRlci5wYXRjaCIKKwlmb3IgVE9LRU4gaW4gU1VCSkVDVCBCTFVSQjsgZG8KKwkJZ3JlcCAtcSAiKioqICRUT0tFTiBIRVJFICoqKiIgIiRDTCIKKwkJaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisJCQllY2hvICJFUlJPUjogUGxlYXNlIGVkaXQgJENMIGFuZCB0cnkgYWdhaW4gKExvb2sgZm9yICcqKiogJFRPS0VOIEhFUkUgKioqJykuIgorCQkJZXhpdCAxCisJCWZpCisJZG9uZQorZWxzZQorCWVjaG8gIldBUk5JTkc6IE5vIGNvdmVyIGxldHRlciB3aWxsIGJlIHNlbnQuIgorZmkKKworIyBIYXJ2ZXN0IGVtYWlscyBmcm9tIHRoZSBnZW5lcmF0ZWQgcGF0Y2hlcyBhbmQgcG9wdWxhdGUgQVVUT19DQy4KK2lmIFsgJEFVVE9fQ0wgLWVxIDEgXTsgdGhlbgorCWZvciBQQVRDSCBpbiAkUERJUi8qLnBhdGNoOyBkbworCQloYXJ2ZXN0X3JlY2lwaWVudHMgJFBBVENICisJZG9uZQorZmkKKworQVVUT19UTz0iJChnaXQgY29uZmlnIHNlbmRlbWFpbC50bykiCitpZiBbIC1uICIkQVVUT19UTyIgXTsgdGhlbgorCWlmIFsgLW4gIiRUTyIgXTsgdGhlbgorCQlUTz0iJFRPLCRBVVRPX1RPIgorCWVsc2UKKwkJVE89IiRBVVRPX1RPIgorCWZpCitmaQorCitpZiBbIC16ICIkVE8iIF0gJiYgWyAteiAiJEFVVE9fQ0MiIF07IHRoZW4KKwllY2hvICJFUlJPUjogeW91IGhhdmUgbm90IHNwZWNpZmllZCBhbnkgcmVjaXBpZW50cy4iCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKKworIyBDb252ZXJ0IHRoZSBjb2xsZWN0ZWQgYWRkcmVzc2VzIGludG8gZ2l0LXNlbmQtZW1haWwgYXJndW1lbnQgc3RyaW5ncworZXhwb3J0IElGUz0kJywnCitHSVRfVE89JChmb3IgUiBpbiAkVE87IGRvIGVjaG8gLW4gIi0tdG89JyRSJyAiOyBkb25lKQorR0lUX0NDPSQoZm9yIFIgaW4gJEFVVE9fQ0M7IGRvIGVjaG8gLW4gIi0tY2M9JyRSJyAiOyBkb25lKQorR0lUX0VYVFJBX0NDPSQoZm9yIFIgaW4gJEVYVFJBX0NDOyBkbyBlY2hvIC1uICItLWNjPSckUicgIjsgZG9uZSkKK3Vuc2V0IElGUworCisjIEhhbmRvZmYgdG8gZ2l0LXNlbmQtZW1haWwuIEl0IHdpbGwgcGVyZm9ybSB0aGUgc2VuZCBjb25maXJtYXRpb24uCitQQVRDSEVTPSQoZWNobyAkUERJUi8qLnBhdGNoKQoraWYgWyAkQVVUT19DTCAtZXEgMSBdOyB0aGVuCisJIyBTZW5kIHRoZSBjb3ZlciBsZXR0ZXIgdG8gZXZlcnkgcmVjaXBpZW50LCBib3RoIHNwZWNpZmllZCBhcyB3ZWxsIGFzCisJIyBoYXJ2ZXN0ZWQuIFRoZW4gcmVtb3ZlIGl0IGZyb20gdGhlIHBhdGNoZXMgbGlzdC4KKwlldmFsICJnaXQgc2VuZC1lbWFpbCAkR0lUX1RPICRHSVRfQ0MgJEdJVF9FWFRSQV9DQyAtLWNvbmZpcm09YWx3YXlzIC0tbm8tY2hhaW4tcmVwbHktdG8gLS1zdXBwcmVzcy1jYz1hbGwgJENMIgorCWlmIFsgJD8gLWVxIDEgXTsgdGhlbgorCQllY2hvICJFUlJPUjogZmFpbGVkIHRvIHNlbmQgY292ZXItbGV0dGVyIHdpdGggYXV0b21hdGljIHJlY2lwaWVudHMuIgorCQlleGl0IDEKKwlmaQorCVBBVENIRVM9JHtQQVRDSEVTLyIkQ0wiL30KK2ZpCisKKyMgU2VuZCB0aGUgcGF0Y2ggdG8gdGhlIHNwZWNpZmllZCByZWNpcGllbnRzIGFuZCwgaWYgLWMgd2FzIHNwZWNpZmllZCwgdGhvc2UgZ2l0CisjIGZpbmRzIGluIHRoaXMgc3BlY2lmaWMgcGF0Y2guCitldmFsICJnaXQgc2VuZC1lbWFpbCAkR0lUX1RPICRHSVRfRVhUUkFfQ0MgLS1jb25maXJtPWFsd2F5cyAtLW5vLWNoYWluLXJlcGx5LXRvICRHSVRTT0JDQyAkUEFUQ0hFUyIKK2lmIFsgJD8gLWVxIDEgXTsgdGhlbgorCWVjaG8gIkVSUk9SOiBmYWlsZWQgdG8gc2VuZCBwYXRjaGVzLiIKKwlleGl0IDEKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvc3N0YXRlLWNhY2hlLW1hbmFnZW1lbnQuc2ggYi95b2N0by1wb2t5L3NjcmlwdHMvc3N0YXRlLWNhY2hlLW1hbmFnZW1lbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjI4Njc2NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9zc3RhdGUtY2FjaGUtbWFuYWdlbWVudC5zaApAQCAtMCwwICsxLDQ2OSBAQAorIyEvYmluL2Jhc2gKKworIyAgQ29weXJpZ2h0IChjKSAyMDEyIFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorIworCisjIEdsb2JhbCB2YXJzCitjYWNoZV9kaXI9Citjb25maXJtPQorZnN5bT0KK3RvdGFsX2RlbGV0ZWQ9MAordmVyYm9zZT0KK2RlYnVnPTAKKwordXNhZ2UgKCkgeworICBjYXQgPDwgRU9GCitXZWxjb21lIHRvIHNzdGF0ZSBjYWNoZSBtYW5hZ2VtZW50IHV0aWxpdGllcy4KK3NzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50LnNoIDxPUFRJT04+CisKK09wdGlvbnM6CisgIC1oLCAtLWhlbHAKKyAgICAgICAgRGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQuCisKKyAgLS1jYWNoZS1kaXI9PHNzdGF0ZSBjYWNoZSBkaXI+CisgICAgICAgIFNwZWNpZnkgc3N0YXRlIGNhY2hlIGRpcmVjdG9yeSwgd2lsbCB1c2UgdGhlIGVudmlyb25tZW50CisgICAgICAgIHZhcmlhYmxlIFNTVEFURV9DQUNIRV9ESVIgaWYgaXQgaXMgbm90IHNwZWNpZmllZC4KKworICAtLWV4dHJhLWFyY2hzPTxhcmNoMT4sPGFyY2gyPi4uLjxhcmNobj4KKyAgICAgICAgU3BlY2lmeSBsaXN0IG9mIGFyY2hpdGVjdHVyZXMgd2hpY2ggc2hvdWxkIGJlIHRlc3RlZCwgdGhpcyBsaXN0CisgICAgICAgIHdpbGwgYmUgZXh0ZW5kZWQgd2l0aCBuYXRpdmUgYXJjaCwgYWxsYXJjaCBhbmQgZW1wdHkgYXJjaC4gVGhlCisgICAgICAgIHNjcmlwdCB3b24ndCBiZSB0cnlpbmcgdG8gZ2VuZXJhdGUgbGlzdCBvZiBhdmFpbGFibGUgYXJjaHMgZnJvbQorICAgICAgICBBVkFJTFRVTkVTIGluIHR1bmUgZmlsZXMuCisKKyAgLS1leHRyYS1sYXllcj08bGF5ZXIxPiw8bGF5ZXIyPi4uLjxsYXllcm4+CisgICAgICAgIFNwZWNpZnkgdGhlIGxheWVyIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3Igc2VhcmNoaW5nIHRoZSBhcmNocywKKyAgICAgICAgaXQgd2lsbCBzZWFyY2ggdGhlIG1ldGEgYW5kIG1ldGEtKiBsYXllcnMgaW4gdGhlIHRvcCBkaXIgYnkKKyAgICAgICAgZGVmYXVsdCwgYW5kIHdpbGwgc2VhcmNoIG1ldGEsIG1ldGEtKiwgPGxheWVyMT4sIDxsYXllcjI+LAorICAgICAgICAuLi48bGF5ZXJuPiB3aGVuIHNwZWNpZmllZC4gVXNlICIsIiBhcyB0aGUgc2VwYXJhdG9yLgorCisgICAgICAgIFRoaXMgaXMgdXNlbGVzcyBmb3IgLS1zdGFtcHMtZGlyIG9yIHdoZW4gLS1leHRyYS1hcmNocyBpcyB1c2VkLgorCisgIC1kLCAtLXJlbW92ZS1kdXBsaWNhdGVkCisgICAgICAgIFJlbW92ZSB0aGUgZHVwbGljYXRlZCBzc3RhdGUgY2FjaGUgZmlsZXMgb2Ygb25lIHBhY2thZ2UsIG9ubHkKKyAgICAgICAgdGhlIG5ld2VzdCBvbmUgd2lsbCBiZSBrZXB0LiBUaGUgZHVwbGljYXRlZCBzc3RhdGUgY2FjaGUgZmlsZXMKKyAgICAgICAgb2Ygb25lIHBhY2thZ2UgbXVzdCBoYXZlIHRoZSBzYW1lIGFyY2gsIHdoaWNoIG1lYW5zIHNzdGF0ZSBjYWNoZQorICAgICAgICBmaWxlcyB3aXRoIG11bHRpcGxlIGFyY2hzIGFyZSBub3QgY29uc2lkZXJlZCBkdXBsaWNhdGUuCisKKyAgICAgICAgQ29uZmxpY3RzIHdpdGggLS1zdGFtcHMtZGlyLgorCisgIC0tc3RhbXBzLWRpcj08ZGlyMT4sPGRpcjI+Li4uPGRpcm4+CisgICAgICAgIFNwZWNpZnkgdGhlIGJ1aWxkIGRpcmVjdG9yeSdzIHN0YW1wcyBkaXJlY3RvcmllcywgdGhlIHNzdGF0ZQorICAgICAgICBjYWNoZSBmaWxlIHdoaWNoIElTIFVTRUQgYnkgdGhlc2UgYnVpbGQgZGlyZXRvcmllcyB3aWxsIGJlIEtFUFQsCisgICAgICAgIG90aGVyIHNzdGF0ZSBjYWNoZSBmaWxlcyBpbiBjYWNoZS1kaXIgd2lsbCBiZSByZW1vdmVkLiBVc2UgIiwiCisgICAgICAgIGFzIHRoZSBzZXBhcmF0b3IuIEZvciBleGFtcGxlOgorICAgICAgICAtLXN0YW1wcy1kaXI9YnVpbGQxL3RtcC9zdGFtcHMsYnVpbGQyL3RtcC9zdGFtcHMKKworICAgICAgICBDb25mbGljdHMgd2l0aCAtLXJlbW92ZS1kdXBsaWNhdGVkLgorCisgIC1MLCAtLWZvbGxvdy1zeW1saW5rCisgICAgICAgIFJlbW92ZSBib3RoIHRoZSBzeW1ib2wgbGluayBhbmQgdGhlIGRlc3RpbmF0aW9uIGZpbGUsIGRlZmF1bHQ6IG5vLgorCisgIC15LCAtLXllcworICAgICAgICBBdXRvbWF0aWMgeWVzIHRvIHByb21wdHM7IGFzc3VtZSAieWVzIiBhcyBhbnN3ZXIgdG8gYWxsIHByb21wdHMKKyAgICAgICAgYW5kIHJ1biBub24taW50ZXJhY3RpdmVseS4KKworICAtdiwgLS12ZXJib3NlCisgICAgICAgIEV4cGxhaW4gd2hhdCBpcyBiZWluZyBkb25lLgorCisgIC1ELCAtLWRlYnVnCisgICAgICAgIFNob3cgZGVidWcgaW5mbywgcmVwZWF0IGZvciBtb3JlIGRlYnVnIGluZm8uCisKK0VPRgorfQorCitpZiBbICQjIC1sdCAxIF07IHRoZW4KKyAgdXNhZ2UKKyAgZXhpdCAwCitmaQorCisjIEVjaG8gbm8gZmlsZXMgdG8gcmVtb3ZlCitub19maWxlcyAoKSB7CisgICAgZWNobyBObyBmaWxlcyB0byByZW1vdmUKK30KKworIyBFY2hvIG5vdGhpbmcgdG8gZG8KK2RvX25vdGhpbmcgKCkgeworICAgZWNobyBOb3RoaW5nIHRvIGRvCit9CisKKyMgUmVhZCB0aGUgaW5wdXQgInkiCityZWFkX2NvbmZpcm0gKCkgeworICBlY2hvICIkdG90YWxfZGVsZXRlZCBmcm9tICR0b3RhbF9maWxlcyBmaWxlcyB3aWxsIGJlIHJlbW92ZWQhICIKKyAgaWYgWyAiJGNvbmZpcm0iICE9ICJ5IiBdOyB0aGVuCisgICAgICBlY2hvICJEbyB5b3Ugd2FudCB0byBjb250aW51ZSAoeS9uKT8gIgorICAgICAgd2hpbGUgcmVhZCBjb25maXJtOyBkbworICAgICAgICAgIFsgIiRjb25maXJtIiA9ICJZIiAtbyAiJGNvbmZpcm0iID0gInkiIC1vICIkY29uZmlybSIgPSAibiIgXAorICAgICAgICAgICAgLW8gIiRjb25maXJtIiA9ICJOIiBdICYmIGJyZWFrCisgICAgICAgICAgZWNobyAiSW52YWxpZCBpbnB1dCBcIiRjb25maXJtXCIsIHBsZWFzZSBpbnB1dCAneScgb3IgJ24nOiAiCisgICAgICBkb25lCisgIGVsc2UKKyAgICAgIGVjaG8KKyAgZmkKK30KKworIyBQcmludCBlcnJvciBpbmZvcm1hdGlvbiBhbmQgZXhpdC4KK2VjaG9fZXJyb3IgKCkgeworICBlY2hvICJFUlJPUjogJDEiID4mMgorICBleGl0IDEKK30KKworIyBHZW5lcmF0ZSB0aGUgcmVtb3ZlIGxpc3Q6CisjCisjICogQWRkIC5kb25lLy5zaWdpbmZvIHRvIHRoZSByZW1vdmUgbGlzdAorIyAqIEFkZCBkZXN0aW5hdGlvbiBvZiBzeW1saW5rIHRvIHRoZSByZW1vdmUgbGlzdAorIworIyAkMTogb3V0cHV0IGZpbGUsIG90aGVyczogc3N0YXRlIGNhY2hlIGZpbGUgKC50Z3opCitnZW5fcm1saXN0ICgpeworICBsb2NhbCBybWxpc3RfZmlsZT0iJDEiCisgIHNoaWZ0CisgIGxvY2FsIGZpbGVzPSIkQCIKKyAgZm9yIGkgaW4gJGZpbGVzOyBkbworICAgICAgZWNobyAkaSA+PiAkcm1saXN0X2ZpbGUKKyAgICAgICMgQWRkIHRoZSAiLnNpZ2luZm8iCisgICAgICBpZiBbIC1lICRpLnNpZ2luZm8gXTsgdGhlbgorICAgICAgICAgIGVjaG8gJGkuc2lnaW5mbyA+PiAkcm1saXN0X2ZpbGUKKyAgICAgIGZpCisgICAgICAjIEFkZCB0aGUgZGVzdGluYXRpb24gb2Ygc3ltbGluaworICAgICAgaWYgWyAtTCAiJGkiIF07IHRoZW4KKyAgICAgICAgICBpZiBbICIkZnN5bSIgPSAieSIgXTsgdGhlbgorICAgICAgICAgICAgICBkZXN0PSJgcmVhZGxpbmsgLWUgJGlgIgorICAgICAgICAgICAgICBpZiBbIC1uICIkZGVzdCIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgZWNobyAkZGVzdCA+PiAkcm1saXN0X2ZpbGUKKyAgICAgICAgICAgICAgICAgICMgUmVtb3ZlIHRoZSAuc2lnaW5mbyB3aGVuIC50Z3ogaXMgcmVtb3ZlZAorICAgICAgICAgICAgICAgICAgaWYgWyAtZiAiJGRlc3Quc2lnaW5mbyIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJGRlc3Quc2lnaW5mbyA+PiAkcm1saXN0X2ZpbGUKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgICAjIEFkZCB0aGUgIi50Z3ouZG9uZSIgYW5kICIuc2lnaW5mby5kb25lIiAobWF5IGV4aXN0IGluIHRoZSBmdXR1cmUpCisgICAgICAgICAgYmFzZV9mbj0iJHtpIyMvKi99IgorICAgICAgICAgIHRfZm49IiRiYXNlX2ZuLmRvbmUiCisgICAgICAgICAgc19mbj0iJGJhc2VfZm4uc2lnaW5mby5kb25lIgorICAgICAgICAgIGZvciBkIGluICR0X2ZuICRzX2ZuOyBkbworICAgICAgICAgICAgICBpZiBbIC1mICRjYWNoZV9kaXIvJGQgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgZWNobyAkY2FjaGVfZGlyLyRkID4+ICRybWxpc3RfZmlsZQorICAgICAgICAgICAgICBmaQorICAgICAgICAgIGRvbmUKKyAgICAgIGZpCisgIGRvbmUKK30KKworIyBSZW1vdmUgdGhlIGR1cGxpY2F0ZWQgY2FjaGUgZmlsZXMgZm9yIHRoZSBwa2csIGtlZXAgdGhlIG5ld2VzdCBvbmUKK3JlbW92ZV9kdXBsaWNhdGVkICgpIHsKKworICBsb2NhbCB0b3BkaXIKKyAgbG9jYWwgb2VfY29yZV9kaXIKKyAgbG9jYWwgdHVuZWRpcnMKKyAgbG9jYWwgYWxsX2FyY2hzCisgIGxvY2FsIGFsbF9tYWNoaW5lcworICBsb2NhbCBhdmFfYXJjaHMKKyAgbG9jYWwgYXJjaAorICBsb2NhbCBmaWxlX25hbWVzCisgIGxvY2FsIHNzdGF0ZV9maWxlc19saXN0CisgIGxvY2FsIGZuX3RtcAorICBsb2NhbCBsaXN0X3N1ZmZpeD1gbWt0ZW1wYCB8fCBleGl0IDEKKworICBpZiBbIC16ICIkZXh0cmFfYXJjaHMiIF0gOyB0aGVuCisgICAgIyBGaW5kIG91dCB0aGUgYXJjaHMgaW4gYWxsIHRoZSBsYXllcnMKKyAgICBlY2hvICJGaWd1cmluZyBvdXQgdGhlIGFyY2hzIGluIHRoZSBsYXllcnMgLi4uICIKKyAgICBvZV9jb3JlX2Rpcj0kKGRpcm5hbWUgJChkaXJuYW1lICQocmVhZGxpbmsgLWUgJDApKSkKKyAgICB0b3BkaXI9JChkaXJuYW1lICRvZV9jb3JlX2RpcikKKyAgICB0dW5lZGlycz0iYGZpbmQgJHRvcGRpci9tZXRhKiAke29lX2NvcmVfZGlyfS9tZXRhKiAkbGF5ZXJzIC1wYXRoICcqL21ldGEqL2NvbmYvbWFjaGluZS9pbmNsdWRlJyAyPi9kZXYvbnVsbGAiCisgICAgWyAtbiAiJHR1bmVkaXJzIiBdIHx8IGVjaG9fZXJyb3IgIkNhbid0IGZpbmQgdGhlIHR1bmUgZGlyZWN0b3J5IgorICAgIGFsbF9tYWNoaW5lcz0iYGZpbmQgJHRvcGRpci9tZXRhKiAke29lX2NvcmVfZGlyfS9tZXRhKiAkbGF5ZXJzIC1wYXRoICcqL21ldGEqL2NvbmYvbWFjaGluZS8qJyAtbmFtZSAnKi5jb25mJyAyPi9kZXYvbnVsbCB8IHNlZCAtZSAncy8uKlwvLy8nIC1lICdzLy5jb25mJC8vJ2AiCisgICAgYWxsX2FyY2hzPWBncmVwIC1yIC1oICJeQVZBSUxUVU5FUyAuKj0iICR0dW5lZGlycyB8IHNlZCAtZSAncy8uKj0vLycgLWUgJ3MvXCIvL2cnYAorICBmaQorCisgICMgVXNlIHRoZSAiXyIgdG8gc3Vic3RpdHV0ZSAiLSIsIGUuZy4sIHg4Ni02NCB0byB4ODZfNjQsIGJ1dCBub3QgZm9yIGV4dHJhX2FyY2hzIHdoaWNoIGNhbiBiZSBzb21ldGhpbmcgbGlrZSBjb3J0ZXhhOXQyLXZmcC1uZW9uCisgICMgU29ydCB0byByZW1vdmUgdGhlIGR1cGxpY2F0ZWQgb25lcworICAjIEFkZCBhbGxhcmNoIGFuZCBidWlsZGVyIGFyY2ggKG5hdGl2ZSkKKyAgYnVpbGRlcl9hcmNoPSQodW5hbWUgLW0pCisgIGFsbF9hcmNocz0iJChlY2hvIGFsbGFyY2ggJGFsbF9hcmNocyAkYWxsX21hY2hpbmVzICRidWlsZGVyX2FyY2ggXAorICAgICAgICAgIHwgc2VkIC1lICdzLy0vXy9nJyAtZSAncy8gL1xuL2cnIHwgc29ydCAtdSkgJGV4dHJhX2FyY2hzIgorICBlY2hvICJEb25lIgorCisgICMgVG90YWwgbnVtYmVyIG9mIGZpbGVzIGluY2x1ZGluZyBzc3RhdGUtLCAuc2lnaW5mbyBhbmQgLmRvbmUgZmlsZXMKKyAgdG90YWxfZmlsZXM9YGZpbmQgJGNhY2hlX2RpciAtbmFtZSAnc3N0YXRlKicgfCB3YyAtbGAKKyAgIyBTYXZlIGFsbCB0aGUgc3N0YXRlIGZpbGVzIGluIGEgZmlsZQorICBzc3RhdGVfZmlsZXNfbGlzdD1gbWt0ZW1wYCB8fCBleGl0IDEKKyAgZmluZCAkY2FjaGVfZGlyIC1uYW1lICdzc3RhdGU6KjoqOio6KjoqOio6Ki50Z3oqJyA+JHNzdGF0ZV9maWxlc19saXN0CisKKyAgZWNobyAiRmlndXJpbmcgb3V0IHRoZSBzdWZmaXhlcyBpbiB0aGUgc3N0YXRlIGNhY2hlIGRpciAuLi4gIgorICBzc3RhdGVfc3VmZml4ZXM9ImBzZWQgJ3MlLiovc3N0YXRlOlteOl0qOlteOl0qOlteOl0qOlteOl0qOlteOl0qOlteOl0qOlteX10qX1woW146XSpcKVwudGd6LiolXDElZycgJHNzdGF0ZV9maWxlc19saXN0IHwgc29ydCAtdWAiCisgIGVjaG8gIkRvbmUiCisgIGVjaG8gIlRoZSBmb2xsb3dpbmcgc3VmZml4ZXMgaGF2ZSBiZWVuIGZvdW5kIGluIHRoZSBjYWNoZSBkaXI6IgorICBlY2hvICRzc3RhdGVfc3VmZml4ZXMKKworICBlY2hvICJGaWd1cmluZyBvdXQgdGhlIGFyY2hzIGluIHRoZSBzc3RhdGUgY2FjaGUgZGlyIC4uLiAiCisgICMgVXNpbmcgdGhpcyBTU1RBVEVfUEtHU1BFQyBkZWZpbml0aW9uIGl0J3MgNnRoIGNvbG9uIHNlcGFyYXRlZCBmaWVsZAorICAjIFNTVEFURV9QS0dTUEVDICAgID0gInNzdGF0ZToke1BOfToke1BBQ0tBR0VfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfToke1BWfToke1BSfToke1NTVEFURV9QS0dBUkNIfToke1NTVEFURV9WRVJTSU9OfToiCisgIGZvciBhcmNoIGluICRhbGxfYXJjaHM7IGRvCisgICAgICBncmVwIC1xICIuKi9zc3RhdGU6W146XSo6W146XSo6W146XSo6W146XSo6JGFyY2g6W146XSo6W146XSpcLnRneiQiICRzc3RhdGVfZmlsZXNfbGlzdAorICAgICAgWyAkPyAtZXEgMCBdICYmIGF2YV9hcmNocz0iJGF2YV9hcmNocyAkYXJjaCIKKyAgICAgICMgJHtidWlsZGVyX2FyY2h9XyRhcmNoIHVzZWQgYnkgdG9vbGNoYWluIHNzdGF0ZQorICAgICAgZ3JlcCAtcSAiLiovc3N0YXRlOlteOl0qOlteOl0qOlteOl0qOlteOl0qOiR7YnVpbGRlcl9hcmNofV8kYXJjaDpbXjpdKjpbXjpdKlwudGd6JCIgJHNzdGF0ZV9maWxlc19saXN0CisgICAgICBbICQ/IC1lcSAwIF0gJiYgYXZhX2FyY2hzPSIkYXZhX2FyY2hzICR7YnVpbGRlcl9hcmNofV8kYXJjaCIKKyAgZG9uZQorICBlY2hvICJEb25lIgorICBlY2hvICJUaGUgZm9sbG93aW5nIGFyY2hzIGhhdmUgYmVlbiBmb3VuZCBpbiB0aGUgY2FjaGUgZGlyOiIKKyAgZWNobyAkYXZhX2FyY2hzCisgIGVjaG8gIiIKKworICAjIFNhdmUgdGhlIGZpbGUgbGlzdCB3aGljaCBuZWVkcyB0byBiZSByZW1vdmVkCisgIGxvY2FsIHJlbW92ZV9saXN0ZGlyPWBta3RlbXAgLWRgIHx8IGV4aXQgMQorICBmb3Igc3VmZml4IGluICRzc3RhdGVfc3VmZml4ZXM7IGRvCisgICAgICBpZiBbICIkc3VmZml4IiA9ICJwb3B1bGF0ZV9saWMiIF0gOyB0aGVuCisgICAgICAgICAgZWNobyAiU2tpcHBpbmcgcG9wdWxhdGVfbGljLCBiZWNhdXNlIHJlbW92aW5nIGR1cGxpY2F0ZXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSBmb3IgdGhlbSAodXNlIC0tc3RhbXBzLWRpciBpbnN0ZWFkKSIKKyAgICAgICAgICBjb250aW51ZQorICAgICAgZmkKKyAgICAgICMgVG90YWwgbnVtYmVyIG9mIGZpbGVzIGluY2x1ZGluZyAuc2lnaW5mbyBhbmQgLmRvbmUgZmlsZXMKKyAgICAgIHRvdGFsX2ZpbGVzX3N1ZmZpeD1gZ3JlcCAiLiovc3N0YXRlOlteOl0qOlteOl0qOlteOl0qOlteOl0qOlteOl0qOlteOl0qOlteOl9dKl8kc3VmZml4XC50Z3ouKiIgJHNzdGF0ZV9maWxlc19saXN0IHwgd2MgLWwgMj4vZGV2L251bGxgCisgICAgICB0b3RhbF90Z3pfc3VmZml4PWBncmVwICIuKi9zc3RhdGU6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W146X10qXyRzdWZmaXhcLnRneiQiICRzc3RhdGVfZmlsZXNfbGlzdCB8IHdjIC1sIDI+L2Rldi9udWxsYAorICAgICAgIyBTYXZlIHRoZSBmaWxlIGxpc3QgdG8gYSBmaWxlLCBzb21lIHN1ZmZpeCdzIGZpbGUgbWF5IG5vdCBleGlzdAorICAgICAgZ3JlcCAiLiovc3N0YXRlOlteOl0qOlteOl0qOlteOl0qOlteOl0qOlteOl0qOlteOl0qOlteOl9dKl8kc3VmZml4XC50Z3ouKiIgJHNzdGF0ZV9maWxlc19saXN0ID4kbGlzdF9zdWZmaXggMj4vZGV2L251bGwKKyAgICAgIGxvY2FsIGRlbGV0ZWRfdGd6PTAKKyAgICAgIGxvY2FsIGRlbGV0ZWRfZmlsZXM9MAorICAgICAgZm9yIGV4dCBpbiB0Z3ogdGd6LnNpZ2luZm8gdGd6LmRvbmU7IGRvCisgICAgICAgICAgZWNobyAiRmlndXJpbmcgb3V0IHRoZSBzc3RhdGU6eHh4XyRzdWZmaXguJGV4dCAuLi4gIgorICAgICAgICAgICMgVW5pcSBCUE5zCisgICAgICAgICAgZmlsZV9uYW1lcz1gZm9yIGFyY2ggaW4gJGF2YV9hcmNocyAiIjsgZG8KKyAgICAgICAgICAgICAgc2VkIC1uZSAicyUuKi9zc3RhdGU6XChbXjpdKlwpOlteOl0qOlteOl0qOlteOl0qOiRhcmNoOlteOl0qOlteOl0qXC4ke2V4dH0kJVwxJXAiICRsaXN0X3N1ZmZpeAorICAgICAgICAgIGRvbmUgfCBzb3J0IC11YAorCisgICAgICAgICAgZm5fdG1wPWBta3RlbXBgIHx8IGV4aXQgMQorICAgICAgICAgIHJtX2xpc3Q9IiRyZW1vdmVfbGlzdGRpci9zc3RhdGU6eHh4XyRzdWZmaXgiCisgICAgICAgICAgZm9yIGZuIGluICRmaWxlX25hbWVzOyBkbworICAgICAgICAgICAgICBbIC16ICIkdmVyYm9zZSIgXSB8fCBlY2hvICJBbmFseXppbmcgc3N0YXRlOiRmbi14eHhfJHN1ZmZpeC4ke2V4dH0iCisgICAgICAgICAgICAgIGZvciBhcmNoIGluICRhdmFfYXJjaHMgIiI7IGRvCisgICAgICAgICAgICAgICAgICBncmVwIC1oICIuKi9zc3RhdGU6JGZuOlteOl0qOlteOl0qOlteOl0qOiRhcmNoOlteOl0qOlteOl0qXC4ke2V4dH0kIiAkbGlzdF9zdWZmaXggPiRmbl90bXAKKyAgICAgICAgICAgICAgICAgIGlmIFsgLXMgJGZuX3RtcCBdIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIFsgJGRlYnVnIC1ndCAxIF0gJiYgZWNobyAiQXZhaWxhYmxlIGZpbGVzIGZvciAkZm4tJGFyY2gtIHdpdGggc3VmZml4ICRzdWZmaXguJHtleHR9OiIgJiYgY2F0ICRmbl90bXAKKyAgICAgICAgICAgICAgICAgICAgICAjIFVzZSB0aGUgbW9kaWZpY2F0aW9uIHRpbWUKKyAgICAgICAgICAgICAgICAgICAgICB0b19kZWw9JChscyAtdCAkKGNhdCAkZm5fdG1wKSB8IHNlZCAtbiAnMSFwJykKKyAgICAgICAgICAgICAgICAgICAgICBbICRkZWJ1ZyAtZ3QgMiBdICYmIGVjaG8gIkNvbnNpZGVyaW5nIHRvIGRlbGV0ZTogJHRvX2RlbCIKKyAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBzc3RhdGUgZmlsZSB3aGljaCBpcyBkb3dubG9hZGVkIGZyb20gdGhlIFNTVEFURV9NSVJST1IgaXMKKyAgICAgICAgICAgICAgICAgICAgICAjIHB1dCBpbiBTU1RBVEVfRElSLCBhbmQgdGhlcmUgaXMgYSBzeW1saW5rIGluIFNTVEFURV9ESVIvPz8vIHRvCisgICAgICAgICAgICAgICAgICAgICAgIyBpdCwgc28gZmlsdGVyIGl0IG91dCBmcm9tIHRoZSByZW1vdmUgbGlzdCBpZiBpdCBzaG91bGQgbm90IGJlCisgICAgICAgICAgICAgICAgICAgICAgIyByZW1vdmVkLgorICAgICAgICAgICAgICAgICAgICAgIHRvX2tlZXA9JChscyAtdCAkKGNhdCAkZm5fdG1wKSB8IHNlZCAtbiAnMXAnKQorICAgICAgICAgICAgICAgICAgICAgIFsgJGRlYnVnIC1ndCAyIF0gJiYgZWNobyAiQ29uc2lkZXJpbmcgdG8ga2VlcDogJHRvX2tlZXAiCisgICAgICAgICAgICAgICAgICAgICAgZm9yIGsgaW4gJHRvX2tlZXA7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgLUwgIiRrIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBzeW1saW5rJ3MgZGVzdGluYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtfZGVzdD0iYHJlYWRsaW5rIC1lICRrYCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWF5YmUgaXQgaXMgdGhlIG9uZSBpbiBjYWNoZV9kaXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtfbWF5YmU9IiRjYWNoZV9kaXIvJHtrIyMvKi99IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSZW1vdmUgaXQgZnJvbSB0aGUgcmVtb3ZlIGxpc3QgaWYgdGhleSBhcmUgdGhlIHNhbWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbICIka19kZXN0IiA9ICIka19tYXliZSIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvX2RlbD0iYGVjaG8gJHRvX2RlbCB8IHNlZCAncyMnXCIka19tYXliZVwiJyMjZydgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgcm0gLWYgJGZuX3RtcAorICAgICAgICAgICAgICAgICAgICAgIFsgJGRlYnVnIC1ndCAyIF0gJiYgZWNobyAiRGVjaWRlZCB0byBkZWxldGU6ICR0b19kZWwiCisgICAgICAgICAgICAgICAgICAgICAgZ2VuX3JtbGlzdCAkcm1fbGlzdC4kZXh0ICIkdG9fZGVsIgorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGRvbmUKKyAgICAgIGRvbmUKKyAgICAgIGRlbGV0ZWRfdGd6PWBjYXQgJHJtX2xpc3QuKiAyPi9kZXYvbnVsbCB8IGdyZXAgIi50Z3okIiB8IHdjIC1sYAorICAgICAgZGVsZXRlZF9maWxlcz1gY2F0ICRybV9saXN0LiogMj4vZGV2L251bGwgfCB3YyAtbGAKKyAgICAgIFsgIiRkZWxldGVkX2ZpbGVzIiAtZ3QgMCAtYSAkZGVidWcgLWd0IDAgXSAmJiBjYXQgJHJtX2xpc3QuKgorICAgICAgZWNobyAiKCRkZWxldGVkX3RneiBmcm9tICR0b3RhbF90Z3pfc3VmZml4IC50Z3ogZmlsZXMgZm9yICRzdWZmaXggc3VmZml4IHdpbGwgYmUgcmVtb3ZlZCBvciAkZGVsZXRlZF9maWxlcyBmcm9tICR0b3RhbF9maWxlc19zdWZmaXggd2hlbiBjb3VudGluZyBhbHNvIC5zaWdpbmZvIGFuZCAuZG9uZSBmaWxlcykiCisgICAgICBsZXQgdG90YWxfZGVsZXRlZD0kdG90YWxfZGVsZXRlZCskZGVsZXRlZF9maWxlcworICBkb25lCisgIGRlbGV0ZWRfdGd6PTAKKyAgcm1fb2xkX2xpc3Q9JHJlbW92ZV9saXN0ZGlyL3NzdGF0ZS1vbGQtZmlsZW5hbWVzCisgIGZpbmQgJGNhY2hlX2RpciAtbmFtZSAnc3N0YXRlLSoudGd6JyA+JHJtX29sZF9saXN0CisgIFsgLXMgIiRybV9vbGRfbGlzdCIgXSAmJiBkZWxldGVkX3Rnej1gY2F0ICRybV9vbGRfbGlzdCB8IGdyZXAgIi50Z3okIiB8IHdjIC1sYAorICBbIC1zICIkcm1fb2xkX2xpc3QiIF0gJiYgZGVsZXRlZF9maWxlcz1gY2F0ICRybV9vbGRfbGlzdCB8IHdjIC1sYAorICBbIC1zICIkcm1fb2xkX2xpc3QiIC1hICRkZWJ1ZyAtZ3QgMCBdICYmIGNhdCAkcm1fb2xkX2xpc3QKKyAgZWNobyAiKCRkZWxldGVkX3RneiAudGd6IGZpbGVzIHdpdGggb2xkIHNzdGF0ZS0qIGZpbGVuYW1lcyB3aWxsIGJlIHJlbW92ZWQgb3IgJGRlbGV0ZWRfZmlsZXMgd2hlbiBjb3VudGluZyBhbHNvIC5zaWdpbmZvIGFuZCAuZG9uZSBmaWxlcykiCisgIGxldCB0b3RhbF9kZWxldGVkPSR0b3RhbF9kZWxldGVkKyRkZWxldGVkX2ZpbGVzCisKKyAgcm0gLWYgJGxpc3Rfc3VmZml4CisgIHJtIC1mICRzc3RhdGVfZmlsZXNfbGlzdAorICBpZiBbICR0b3RhbF9kZWxldGVkIC1ndCAwIF07IHRoZW4KKyAgICAgIHJlYWRfY29uZmlybQorICAgICAgaWYgWyAiJGNvbmZpcm0iID0gInkiIC1vICIkY29uZmlybSIgPSAiWSIgXTsgdGhlbgorICAgICAgICAgIGZvciBsaXN0IGluIGBscyAkcmVtb3ZlX2xpc3RkaXIvYDsgZG8KKyAgICAgICAgICAgICAgZWNobyAiUmVtb3ZpbmcgJGxpc3QudGd6IChgY2F0ICRyZW1vdmVfbGlzdGRpci8kbGlzdCB8IHdjIC13YCBmaWxlcykgLi4uICIKKyAgICAgICAgICAgICAgIyBSZW1vdmUgdGhlbSBvbmUgYnkgb25lIHRvIGF2b2lkIHRoZSBhcmd1bWVudCBsaXN0IHRvbyBsb25nIGVycm9yCisgICAgICAgICAgICAgIGZvciBpIGluIGBjYXQgJHJlbW92ZV9saXN0ZGlyLyRsaXN0YDsgZG8KKyAgICAgICAgICAgICAgICAgIHJtIC1mICR2ZXJib3NlICRpCisgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgZWNobyAiRG9uZSIKKyAgICAgICAgICBkb25lCisgICAgICAgICAgZWNobyAiJHRvdGFsX2RlbGV0ZWQgZmlsZXMgaGF2ZSBiZWVuIHJlbW92ZWQhIgorICAgICAgZWxzZQorICAgICAgICAgIGRvX25vdGhpbmcKKyAgICAgIGZpCisgIGVsc2UKKyAgICAgICBub19maWxlcworICBmaQorICBbIC1kICRyZW1vdmVfbGlzdGRpciBdICYmIHJtIC1mciAkcmVtb3ZlX2xpc3RkaXIKK30KKworIyBSZW1vdmUgdGhlIHNzdGF0ZSBmaWxlIGJ5IHN0YW1wcyBkaXIsIHRoZSBmaWxlIG5vdCB1c2VkIGJ5IHRoZSBzdGFtcHMgZGlyCisjIHdpbGwgYmUgcmVtb3ZlZC4KK3JtX2J5X3N0YW1wcyAoKXsKKworICBsb2NhbCBjYWNoZV9saXN0PWBta3RlbXBgIHx8IGV4aXQgMQorICBsb2NhbCBrZWVwX2xpc3Q9YG1rdGVtcGAgfHwgZXhpdCAxCisgIGxvY2FsIHJtX2xpc3Q9YG1rdGVtcGAgfHwgZXhpdCAxCisgIGxvY2FsIHN1bXMKKyAgbG9jYWwgYWxsX3N1bXMKKworICAjIFRvdGFsIG51bWJlciBvZiBmaWxlcyBpbmNsdWRpbmcgc3N0YXRlLSwgLnNpZ2luZm8gYW5kIC5kb25lIGZpbGVzCisgIHRvdGFsX2ZpbGVzPWBmaW5kICRjYWNoZV9kaXIgLXR5cGUgZiAtbmFtZSAnc3N0YXRlKicgfCB3YyAtbGAKKyAgIyBTYXZlIGFsbCB0aGUgc3RhdGUgZmlsZSBsaXN0IHRvIGEgZmlsZQorICBmaW5kICRjYWNoZV9kaXIgLXR5cGUgZiAtbmFtZSAnc3N0YXRlKicgfCBzb3J0IC11IC1vICRjYWNoZV9saXN0CisKKyAgZWNobyAiRmlndXJpbmcgb3V0IHRoZSBzdWZmaXhlcyBpbiB0aGUgc3N0YXRlIGNhY2hlIGRpciAuLi4gIgorICBsb2NhbCBzc3RhdGVfc3VmZml4ZXM9ImBzZWQgJ3MlLiovc3N0YXRlOlteOl0qOlteOl0qOlteOl0qOlteOl0qOlteOl0qOlteOl0qOlteX10qX1woW146XSpcKVwudGd6LiolXDElZycgJGNhY2hlX2xpc3QgfCBzb3J0IC11YCIKKyAgZWNobyAiRG9uZSIKKyAgZWNobyAiVGhlIGZvbGxvd2luZyBzdWZmaXhlcyBoYXZlIGJlZW4gZm91bmQgaW4gdGhlIGNhY2hlIGRpcjoiCisgIGVjaG8gJHNzdGF0ZV9zdWZmaXhlcworCisgICMgRmlndXJlIG91dCBhbGwgdGhlIG1kNXN1bXMgaW4gdGhlIHN0YW1wcyBkaXIuCisgIGVjaG8gIkZpZ3VyaW5nIG91dCBhbGwgdGhlIG1kNXN1bXMgaW4gc3RhbXBzIGRpciAuLi4gIgorICBmb3IgaSBpbiAkc3N0YXRlX3N1ZmZpeGVzOyBkbworICAgICAgIyBUaGVyZSBpcyBubyAiXC5zaWdkYXRhIiBidXQgIl9zZXRjZW5lIiB3aGVuIGl0IGlzIG1pcnJvcmVkCisgICAgICAjIGZyb20gdGhlIFNTVEFURV9NSVJST1JTLCB1c2UgdGhlbSB0byBmaWd1cmUgb3V0IHRoZSBzdW0uCisgICAgICBzdW1zPWBmaW5kICRzdGFtcHMgLW1heGRlcHRoIDMgLW5hbWUgIiouZG9fJGkuKiIgXAorICAgICAgICAtbyAtbmFtZSAiKi5kb18ke2l9X3NldHNjZW5lLioiIHwgXAorICAgICAgICBzZWQgLW5lICdzIy4qX3NldHNjZW5lXC4jI3AnIC1lICdzIy4qXC5zaWdkYXRhXC4jI3AnIHwgXAorICAgICAgICBzZWQgLWUgJ3MjXC4uKiMjJyB8IHNvcnQgLXVgCisgICAgICBhbGxfc3Vtcz0iJGFsbF9zdW1zICRzdW1zIgorICBkb25lCisgIGVjaG8gIkRvbmUiCisKKyAgZWNobyAiRmlndXJpbmcgb3V0IHRoZSBmaWxlcyB3aGljaCB3aWxsIGJlIHJlbW92ZWQgLi4uICIKKyAgZm9yIGkgaW4gJGFsbF9zdW1zOyBkbworICAgICAgZ3JlcCAiLiovc3N0YXRlOlteOl0qOlteOl0qOlteOl0qOlteOl0qOlteOl0qOlteOl0qOiR7aX1fLioiICRjYWNoZV9saXN0ID4+JGtlZXBfbGlzdAorICBkb25lCisgIGVjaG8gIkRvbmUiCisKKyAgaWYgWyAtcyAka2VlcF9saXN0IF07IHRoZW4KKyAgICAgIHNvcnQgLXUgJGtlZXBfbGlzdCAtbyAka2VlcF9saXN0CisgICAgICB0b19kZWw9YGNvbW0gLTEgLTMgJGtlZXBfbGlzdCAkY2FjaGVfbGlzdGAKKyAgICAgIGdlbl9ybWxpc3QgJHJtX2xpc3QgIiR0b19kZWwiCisgICAgICBsZXQgdG90YWxfZGVsZXRlZD1gY2F0ICRybV9saXN0IHwgc29ydCAtdSB8IHdjIC13YAorICAgICAgaWYgWyAkdG90YWxfZGVsZXRlZCAtZ3QgMCBdOyB0aGVuCisgICAgICAgICAgWyAkZGVidWcgLWd0IDAgXSAmJiBjYXQgJHJtX2xpc3QgfCBzb3J0IC11CisgICAgICAgICAgcmVhZF9jb25maXJtCisgICAgICAgICAgaWYgWyAiJGNvbmZpcm0iID0gInkiIC1vICIkY29uZmlybSIgPSAiWSIgXTsgdGhlbgorICAgICAgICAgICAgICBlY2hvICJSZW1vdmluZyBzc3RhdGUgY2FjaGUgZmlsZXMgLi4uICgkdG90YWxfZGVsZXRlZCBmaWxlcykiCisgICAgICAgICAgICAgICMgUmVtb3ZlIHRoZW0gb25lIGJ5IG9uZSB0byBhdm9pZCB0aGUgYXJndW1lbnQgbGlzdCB0b28gbG9uZyBlcnJvcgorICAgICAgICAgICAgICBmb3IgaSBpbiBgY2F0ICRybV9saXN0IHwgc29ydCAtdWA7IGRvCisgICAgICAgICAgICAgICAgICBybSAtZiAkdmVyYm9zZSAkaQorICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgIGVjaG8gIiR0b3RhbF9kZWxldGVkIGZpbGVzIGhhdmUgYmVlbiByZW1vdmVkIgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZG9fbm90aGluZworICAgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgICAgbm9fZmlsZXMKKyAgICAgIGZpCisgIGVsc2UKKyAgICAgIGVjaG9fZXJyb3IgIkFsbCBmaWxlcyBpbiBjYWNoZSBkaXIgd2lsbCBiZSByZW1vdmVkISBBYm9ydCEiCisgIGZpCisKKyAgcm0gLWYgJGNhY2hlX2xpc3QKKyAgcm0gLWYgJGtlZXBfbGlzdAorICBybSAtZiAkcm1fbGlzdAorfQorCisjIFBhcnNlIGFyZ3VtZW50cword2hpbGUgWyAtbiAiJDEiIF07IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLWNhY2hlLWRpcj0qKQorICAgICAgY2FjaGVfZGlyPWBlY2hvICQxIHwgc2VkIC1lICdzI14tLWNhY2hlLWRpcj0jIycgfCB4YXJncyByZWFkbGluayAtZWAKKyAgICAgIFsgLWQgIiRjYWNoZV9kaXIiIF0gfHwgZWNob19lcnJvciAiSW52YWxpZCBhcmd1bWVudCB0byAtLWNhY2hlLWRpciIKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1yZW1vdmUtZHVwbGljYXRlZHwtZCkKKyAgICAgIHJtX2R1cGxpY2F0ZWQ9InkiCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0teWVzfC15KQorICAgICAgY29uZmlybT0ieSIKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1mb2xsb3ctc3ltbGlua3wtTCkKKyAgICAgIGZzeW09InkiCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tZXh0cmEtYXJjaHM9KikKKyAgICAgIGV4dHJhX2FyY2hzPWBlY2hvICQxIHwgc2VkIC1lICdzI14tLWV4dHJhLWFyY2hzPSMjJyAtZSAncyMsIyAjZydgCisgICAgICBbIC1uICIkZXh0cmFfYXJjaHMiIF0gfHwgZWNob19lcnJvciAiSW52YWxpZCBleHRyYSBhcmNoIHBhcmFtZXRlciIKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1leHRyYS1sYXllcj0qKQorICAgICAgZXh0cmFfbGF5ZXJzPWBlY2hvICQxIHwgc2VkIC1lICdzI14tLWV4dHJhLWxheWVyPSMjJyAtZSAncyMsIyAjZydgCisgICAgICBbIC1uICIkZXh0cmFfbGF5ZXJzIiBdIHx8IGVjaG9fZXJyb3IgIkludmFsaWQgZXh0cmEgbGF5ZXIgcGFyYW1ldGVyIgorICAgICAgZm9yIGkgaW4gJGV4dHJhX2xheWVyczsgZG8KKyAgICAgICAgICBsPWByZWFkbGluayAtZSAkaWAKKyAgICAgICAgICBpZiBbIC1kICIkbCIgXTsgdGhlbgorICAgICAgICAgICAgICBsYXllcnM9IiRsYXllcnMgJGwiCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBlY2hvX2Vycm9yICJDYW4ndCBmaW5kIGxheWVyICRpIgorICAgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tc3RhbXBzLWRpcj0qKQorICAgICAgc3RhbXBzPWBlY2hvICQxIHwgc2VkIC1lICdzI14tLXN0YW1wcy1kaXI9IyMnIC1lICdzIywjICNnJ2AKKyAgICAgIFsgLW4gIiRzdGFtcHMiIF0gfHwgZWNob19lcnJvciAiSW52YWxpZCBzdGFtcHMgZGlyICRpIgorICAgICAgZm9yIGkgaW4gJHN0YW1wczsgZG8KKyAgICAgICAgICBbIC1kICIkaSIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIHN0YW1wcyBkaXIgJGkiCisgICAgICBkb25lCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tdmVyYm9zZXwtdikKKyAgICAgIHZlcmJvc2U9Ii12IgorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLWRlYnVnfC1EKQorICAgICAgZGVidWc9YGV4cHIgJGRlYnVnICsgMWAKKyAgICAgIGVjaG8gIkRlYnVnIGxldmVsICRkZWJ1ZyIKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1oZWxwfC1oKQorICAgICAgdXNhZ2UKKyAgICAgIGV4aXQgMAorICAgICAgICA7OworICAgICopCisgICAgICBlY2hvICJJbnZhbGlkIGFyZ3VtZW50cyAkKiIKKyAgICAgIGVjaG9fZXJyb3IgIlRyeSAnc3N0YXRlLWNhY2hlLW1hbmFnZW1lbnQuc2ggLWgnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICAgICAgOzsKKyAgZXNhYworZG9uZQorCisjIHNzdGF0ZSBjYWNoZSBkaXJlY3RvcnksIHVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBTU1RBVEVfQ0FDSEVfRElSCisjIGlmIGl0IHdhcyBub3Qgc3BlY2lmaWVkLCBvdGhlcndpc2UsIGVycm9yLgorWyAtbiAiJGNhY2hlX2RpciIgXSB8fCBjYWNoZV9kaXI9JFNTVEFURV9DQUNIRV9ESVIKK1sgLW4gIiRjYWNoZV9kaXIiIF0gfHwgZWNob19lcnJvciAiTm8gY2FjaGUgZGlyIGZvdW5kISIKK1sgLWQgIiRjYWNoZV9kaXIiIF0gfHwgZWNob19lcnJvciAiSW52YWxpZCBjYWNoZSBkaXJlY3RvcnkgXCIkY2FjaGVfZGlyXCIiCisKK1sgLW4gIiRybV9kdXBsaWNhdGVkIiAtYSAtbiAiJHN0YW1wcyIgXSAmJiBcCisgICAgZWNob19lcnJvciAiQ2FuIG5vdCB1c2UgYm90aCAtLXJlbW92ZS1kdXBsaWNhdGVkIGFuZCAtLXN0YW1wcy1kaXIiCisKK1sgIiRybV9kdXBsaWNhdGVkIiA9ICJ5IiBdICYmIHJlbW92ZV9kdXBsaWNhdGVkCitbIC1uICIkc3RhbXBzIiBdICYmIHJtX2J5X3N0YW1wcworWyAteiAiJHJtX2R1cGxpY2F0ZWQiIC1hIC16ICIkc3RhbXBzIiBdICYmIFwKKyAgICBlY2hvICJXaGF0IGRvIHlvdSB3YW50IHRvIGRvPyIKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3NzdGF0ZS1kaWZmLW1hY2hpbmVzLnNoIGIveW9jdG8tcG9reS9zY3JpcHRzL3NzdGF0ZS1kaWZmLW1hY2hpbmVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA1NmFhMGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvc3N0YXRlLWRpZmYtbWFjaGluZXMuc2gKQEAgLTAsMCArMSwxNzIgQEAKKyMhL2Jpbi9iYXNoCisKKyMgVXNlZCB0byBjb21wYXJlIHNzdGF0ZSBjaGVja3N1bXMgYmV0d2VlbiBNQUNISU5FUy4KKyMgRXhlY3V0ZSBzY3JpcHQgYW5kIGNvbXBhcmUgZ2VuZXJhdGVkIGxpc3QuTSBmaWxlcy4KKyMgVXNpbmcgYmFzaCB0byBoYXZlIFBJUEVTVEFUVVMgdmFyaWFibGUuCisKKyMgSXQncyBhbHNvIHVzZWZ1bGwgdG8ga2VlcCBvbGRlciBzc3RhdGUgY2hlY2tzdW1zCisjIHRvIGJlIGFibGUgdG8gZmluZCBvdXQgd2h5IHNvbWV0aGluZyBpcyByZWJ1aWxkaW5nCisjIGFmdGVyIHVwZGF0aW5nIG1ldGFkYXRhCisKKyMgJCBkaWZmIFwKKyMgICAgIHNzdGF0ZS1kaWZmLzEzNDkzNDgzOTIvZmFrZS1jb3J0ZXhhOC9saXN0Lk0gXAorIyAgICAgc3N0YXRlLWRpZmYvMTM0OTM0ODM5Mi9mYWtlLWNvcnRleGE5L2xpc3QuTSBcCisjICAgICB8IHdjIC1sCisjIDUzOAorCisjIFRoZW4gdG8gY29tcGFyZSBzaWdkYXRhIHVzZSBzb21ldGhpbmcgbGlrZToKKyMgJCBscyBzc3RhdGUtZGlmZi8xMzQ5MzQ4MzkyLyovYXJtdjdhLXZmcC1uZW9uKi9saW51eC1saWJjLWhlYWRlcnMvKmRvX2NvbmZpZ3VyZSpzaWdkYXRhKgorIyAgIHNzdGF0ZS1kaWZmLzEzNDkzNDgzOTIvZmFrZS1jb3J0ZXhhOC9hcm12N2EtdmZwLW5lb24tb2UtbGludXgtZ251ZWFiaS9saW51eC1saWJjLWhlYWRlcnMvMy40LjMtcjAuZG9fY29uZmlndXJlLnNpZ2RhdGEuY2I3M2IzNjMwYTdiODE5MWU3MmZjNDY5YzUxMzcwMjUKKyMgICBzc3RhdGUtZGlmZi8xMzQ5MzQ4MzkyL2Zha2UtY29ydGV4YTkvYXJtdjdhLXZmcC1uZW9uLW9lLWxpbnV4LWdudWVhYmkvbGludXgtbGliYy1oZWFkZXJzLzMuNC4zLXIwLmRvX2NvbmZpZ3VyZS5zaWdkYXRhLmYzN2FkYTE3N2JmOTljZThhZjg1OTE0ZGYyMmI1YTBiCisjICQgYml0YmFrZS1kaWZmc2lncyBzdGFtcHMuMTM0OTM0ODM5Mi8qL2FybXY3YS12ZnAtbmVvbiovbGludXgtbGliYy1oZWFkZXJzLypkb19jb25maWd1cmUqc2lnZGF0YSoKKyMgICBiYXNlaGFzaCBjaGFuZ2VkIGZyb20gOGQwYmQ2N2JiMWRhNmY2ODcxNzc2MGZjM2VmNDMxNzEgdG8gZTg2OWZhNjE0MjZlODhlOWMzMDcyNmJhODhhMTIxNmEKKyMgICBWYXJpYWJsZSBUVU5FX0NDQVJHUyB2YWx1ZSBjaGFuZ2VkIGZyb20gIC1tYXJjaD1hcm12Ny1hICAgICAtbXRodW1iLWludGVyd29yayAtbWZsb2F0LWFiaT1zb2Z0ZnAgLW1mcHU9bmVvbiAtbXR1bmU9Y29ydGV4LWE4IHRvICAtbWFyY2g9YXJtdjctYSAgICAgLW10aHVtYi1pbnRlcndvcmsgLW1mbG9hdC1hYmk9c29mdGZwIC1tZnB1PW5lb24gLW10dW5lPWNvcnRleC1hOQorCisjIEdsb2JhbCB2YXJzCit0bXBkaXI9CittYWNoaW5lcz0KK3RhcmdldHM9CitkZWZhdWx0X21hY2hpbmVzPSJxZW11YXJtIHFlbXV4ODYgcWVtdXg4Ni02NCIKK2RlZmF1bHRfdGFyZ2V0cz0iY29yZS1pbWFnZS1iYXNlIgorYW5hbHl6ZT0iTiIKKwordXNhZ2UgKCkgeworICBjYXQgPDwgRU9GCitXZWxjb21lIHRvIHV0aWxpdHkgdG8gY29tcGFyZSBzc3RhdGUgY2hlY2tzdW1zIGJldHdlZW4gZGlmZmVyZW50IE1BQ0hJTkVzLgorJDAgPE9QVElPTj4KKworT3B0aW9uczoKKyAgLWgsIC0taGVscAorICAgICAgICBEaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdC4KKworICAtLXRtcGRpcj08dG1wZGlyPgorICAgICAgICBTcGVjaWZ5IHRtcGRpciwgd2lsbCB1c2UgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFRNUERJUiBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkLgorICAgICAgICBTb21ldGhpbmcgbGlrZSAvT0Uvb2UtY29yZS90bXAtZWdsaWJjIChubyAvIGF0IHRoZSBlbmQpLgorCisgIC0tbWFjaGluZXM9PG1hY2hpbmVzPgorICAgICAgICBMaXN0IG9mIE1BQ0hJTkVzIHNlcGFyYXRlZCBieSBzcGFjZSwgd2lsbCB1c2UgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIE1BQ0hJTkVTIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgIERlZmF1bHQgdmFsdWUgaXMgInFlbXVhcm0gcWVtdXg4NiBxZW11eDg2LTY0Ii4KKworICAtLXRhcmdldHM9PHRhcmdldHM+CisgICAgICAgIExpc3Qgb2YgdGFyZ2V0cyBzZXBhcmF0ZWQgYnkgc3BhY2UsIHdpbGwgdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBUQVJHRVRTIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgIERlZmF1bHQgdmFsdWUgaXMgImNvcmUtaW1hZ2UtYmFzZSIuCisKKyAgLS1hbmFseXplCisgICAgICAgIFNob3cgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gTUFDSElORXMuIEl0IGFzc3VtZXM6CisgICAgICAgICogRmlyc3QgMiBNQUNISU5FcyBpbiAtLW1hY2hpbmVzIHBhcmFtZXRlciBoYXZlIHRoZSBzYW1lIFRVTkVfUEtHQVJDSAorICAgICAgICAqIFRoaXJkIG9wdGlvbmFsIE1BQ0hJTkUgaGFzIGRpZmZlcmVudCBUVU5FX1BLR0FSQ0ggLSBvbmx5IG5hdGl2ZSBhbmQgYWxsYXJjaCByZWNpcGVzIGFyZSBjb21wYXJlZCkuCisgICAgICAgICogTmV4dCBNQUNISU5FcyBhcmUgaWdub3JlZAorRU9GCit9CisKKyMgUHJpbnQgZXJyb3IgaW5mb3JtYXRpb24gYW5kIGV4aXQuCitlY2hvX2Vycm9yICgpIHsKKyAgZWNobyAiRVJST1I6ICQxIiA+JjIKKyAgZXhpdCAxCit9CisKK3doaWxlIFsgLW4gIiQxIiBdOyBkbworICBjYXNlICQxIGluCisgICAgLS10bXBkaXI9KikKKyAgICAgIHRtcGRpcj1gZWNobyAkMSB8IHNlZCAtZSAncyNeLS10bXBkaXI9IyMnIHwgeGFyZ3MgcmVhZGxpbmsgLWVgCisgICAgICBbIC1kICIkdG1wZGlyIiBdIHx8IGVjaG9fZXJyb3IgIkludmFsaWQgYXJndW1lbnQgdG8gLS10bXBkaXIiCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tbWFjaGluZXM9KikKKyAgICAgIG1hY2hpbmVzPWBlY2hvICQxIHwgc2VkIC1lICdzI14tLW1hY2hpbmVzPSIqXChbXiJdKlwpIiojXDEjJ2AKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS10YXJnZXRzPSopCisgICAgICB0YXJnZXRzPWBlY2hvICQxIHwgc2VkIC1lICdzI14tLXRhcmdldHM9IipcKFteIl0qXCkiKiNcMSMnYAorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLWFuYWx5emUpCisgICAgICBhbmFseXplPSJZIgorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLWhlbHB8LWgpCisgICAgICB1c2FnZQorICAgICAgZXhpdCAwCisgICAgICAgIDs7CisgICAgKikKKyAgICAgIGVjaG8gIkludmFsaWQgYXJndW1lbnRzICQqIgorICAgICAgZWNob19lcnJvciAiVHJ5ICckMCAtaCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgICAgICA7OworICBlc2FjCitkb25lCisKKyMgdG1wZGlyIGRpcmVjdG9yeSwgdXNlIGVudmlyb25tZW50IHZhcmlhYmxlIFRNUERJUgorIyBpZiBpdCB3YXMgbm90IHNwZWNpZmllZCwgb3RoZXJ3aXNlLCBlcnJvci4KK1sgLW4gIiR0bXBkaXIiIF0gfHwgdG1wZGlyPSRUTVBESVIKK1sgLW4gIiR0bXBkaXIiIF0gfHwgZWNob19lcnJvciAiTm8gdG1wZGlyIGZvdW5kISIKK1sgLWQgIiR0bXBkaXIiIF0gfHwgZWNob19lcnJvciAiSW52YWxpZCB0bXBkaXIgXCIkdG1wZGlyXCIiCitbIC1uICIkbWFjaGluZXMiIF0gfHwgbWFjaGluZXM9JE1BQ0hJTkVTCitbIC1uICIkbWFjaGluZXMiIF0gfHwgbWFjaGluZXM9JGRlZmF1bHRfbWFjaGluZXMKK1sgLW4gIiR0YXJnZXRzIiBdIHx8IHRhcmdldHM9JFRBUkdFVFMKK1sgLW4gIiR0YXJnZXRzIiBdIHx8IHRhcmdldHM9JGRlZmF1bHRfdGFyZ2V0cworCitPVVRQVVQ9JHt0bXBkaXJ9L3NzdGF0ZS1kaWZmL2BkYXRlICIrJXMiYAorZGVjbGFyZSAtaSBSRVNVTFQ9MAorCitmb3IgTSBpbiAke21hY2hpbmVzfTsgZG8KKyAgWyAtZCAke3RtcGRpcn0vc3RhbXBzLyBdICYmIGZpbmQgJHt0bXBkaXJ9L3N0YW1wcy8gLW5hbWUgXCpzaWdkYXRhXCogfCB4YXJncyBybSAtZgorICBta2RpciAtcCAke09VVFBVVH0vJHtNfQorICBleHBvcnQgTUFDSElORT0ke019CisgIGJpdGJha2UgLVMgbm9uZSAke3RhcmdldHN9IDI+JjEgfCB0ZWUgLWEgJHtPVVRQVVR9LyR7TX0vbG9nOworICBSRVNVTFQrPSR7UElQRVNUQVRVU1swXX0KKyAgaWYgbHMgJHt0bXBkaXJ9L3N0YW1wcy8qID4vZGV2L251bGwgMj4vZGV2L251bGwgOyB0aGVuCisgICAgY3AgLXJhICR7dG1wZGlyfS9zdGFtcHMvKiAke09VVFBVVH0vJHtNfQorICAgIGZpbmQgJHtPVVRQVVR9LyR7TX0gLW5hbWUgXCpzaWdkYXRhXCogfCBzZWQgInMjJHtPVVRQVVR9LyR7TX0vIyNnIiB8IHNvcnQgPiAke09VVFBVVH0vJHtNfS9saXN0CisgICAgTV9VTkRFUlNDT1JFPWBlY2hvICR7TX0gfCBzZWQgJ3MvLS9fL2cnYAorICAgIHNlZCAicy8ke01fVU5ERVJTQ09SRX0vTUFDSElORS9nOyBzLyR7TX0vTUFDSElORS9nIiAke09VVFBVVH0vJHtNfS9saXN0IHwgc29ydCA+ICR7T1VUUFVUfS8ke019L2xpc3QuTQorICAgIGZpbmQgJHt0bXBkaXJ9L3N0YW1wcy8gLW5hbWUgXCpzaWdkYXRhXCogfCB4YXJncyBybSAtZgorICBlbHNlCisgICAgcHJpbnRmICJFUlJPUjogbm8gc2lnZGF0YSBmaWxlcyB3ZXJlIGdlbmVyYXRlZCBmb3IgTUFDSElORSAkTSBpbiAke3RtcGRpcn0vc3RhbXBzXG4iOworICBmaQorZG9uZQorCitmdW5jdGlvbiBjb21wYXJlU2lnbmF0dXJlcygpIHsKKyAgTUFDSElORTE9JDEKKyAgTUFDSElORTI9JDIKKyAgUEFUVEVSTj0iJDMiCisgIFBSRV9QQVRURVJOPSIiCisgIFsgLW4gIiR7UEFUVEVSTn0iIF0gfHwgUFJFX1BBVFRFUk49Ii12IgorICBbIC1uICIke1BBVFRFUk59IiBdIHx8IFBBVFRFUk49Ik1BQ0hJTkUiCisgIGZvciBUQVNLIGluIGRvX2NvbmZpZ3VyZS5zaWdkYXRhIGRvX3BvcHVsYXRlX3N5c3Jvb3Quc2lnZGF0YSBkb19wYWNrYWdlX3dyaXRlX2lway5zaWdkYXRhOyBkbworICAgIHByaW50ZiAiXG5cbiA9PT0gQ29tcGFyaW5nIHNpZ25hdHVyZXMgZm9yIHRhc2sgJHtUQVNLfSBiZXR3ZWVuICR7TUFDSElORTF9IGFuZCAke01BQ0hJTkUyfSA9PT1cbiIgfCB0ZWUgLWEgJHtPVVRQVVR9L3NpZ25hdHVyZXMuJHtNQUNISU5FMn0uJHtUQVNLfS5sb2cKKyAgICBkaWZmICR7T1VUUFVUfS8ke01BQ0hJTkUxfS9saXN0Lk0gJHtPVVRQVVR9LyR7TUFDSElORTJ9L2xpc3QuTSB8IGdyZXAgJHtQUkVfUEFUVEVSTn0gIiR7UEFUVEVSTn0iIHwgZ3JlcCAke1RBU0t9ID4gJHtPVVRQVVR9L3NpZ25hdHVyZXMuJHtNQUNISU5FMn0uJHtUQVNLfQorICAgIGZvciBpIGluIGBjYXQgJHtPVVRQVVR9L3NpZ25hdHVyZXMuJHtNQUNISU5FMn0uJHtUQVNLfSB8IHNlZCAncyNbXi9dKi9cKFteL10qXCkvLiojXDEjZycgfCBzb3J0IC11IHwgeGFyZ3NgOyBkbworICAgICAgWyAtZSAke09VVFBVVH0vJHtNQUNISU5FMX0vKi8kaS8qJHtUQVNLfSogXSB8fCBlY2hvICJJTkZPOiAke2l9IHRhc2sgJHtUQVNLfSBkb2Vzbid0IGV4aXN0IGluICR7TUFDSElORTF9IiA+JjIKKyAgICAgIFsgLWUgJHtPVVRQVVR9LyR7TUFDSElORTF9LyovJGkvKiR7VEFTS30qIF0gfHwgY29udGludWUKKyAgICAgIFsgLWUgJHtPVVRQVVR9LyR7TUFDSElORTJ9LyovJGkvKiR7VEFTS30qIF0gfHwgZWNobyAiSU5GTzogJHtpfSB0YXNrICR7VEFTS30gZG9lc24ndCBleGlzdCBpbiAke01BQ0hJTkUyfSIgPiYyCisgICAgICBbIC1lICR7T1VUUFVUfS8ke01BQ0hJTkUyfS8qLyRpLyoke1RBU0t9KiBdIHx8IGNvbnRpbnVlCisgICAgICBwcmludGYgIkVSUk9SOiAkaSBkaWZmZXJlbnQgc2lnbmF0dXJlIGZvciB0YXNrICR7VEFTS30gYmV0d2VlbiAke01BQ0hJTkUxfSBhbmQgJHtNQUNISU5FMn1cbiI7CisgICAgICBiaXRiYWtlLWRpZmZzaWdzICR7T1VUUFVUfS8ke01BQ0hJTkUxfS8qLyRpLyoke1RBU0t9KiAke09VVFBVVH0vJHtNQUNISU5FMn0vKi8kaS8qJHtUQVNLfSo7CisgICAgICBlY2hvICIkaSIgPj4gJHtPVVRQVVR9L2ZhaWxlZC1yZWNpcGVzLmxvZworICAgICAgZWNobworICAgIGRvbmUgfCB0ZWUgLWEgJHtPVVRQVVR9L3NpZ25hdHVyZXMuJHtNQUNISU5FMn0uJHtUQVNLfS5sb2cKKyAgICAjIGRvbid0IGNyZWF0ZSBlbXB0eSBmaWxlcworICAgIEVSUk9SUz1gZ3JlcCAiXkVSUk9SLioiICR7T1VUUFVUfS9zaWduYXR1cmVzLiR7TUFDSElORTJ9LiR7VEFTS30ubG9nIHwgd2MgLWxgCisgICAgaWYgWyAiJHtFUlJPUlN9IiAhPSAiMCIgXSA7IHRoZW4KKyAgICAgIGVjaG8gIkVSUk9SOiAke0VSUk9SU30gZXJyb3JzIGZvdW5kIGluICR7T1VUUFVUfS9zaWduYXR1cmVzLiR7TUFDSElORTJ9LiR7VEFTS30ubG9nIgorICAgICAgUkVTVUxUKz0ke0VSUk9SU30KKyAgICBmaQorICBkb25lCit9CisKK2Z1bmN0aW9uIGNvbXBhcmVNYWNoaW5lcygpIHsKKyAgWyAiJCMiIC1nZSAyIF0gJiYgY29tcGFyZVNpZ25hdHVyZXMgJDEgJDIKKyAgWyAiJCMiIC1nZSAzIF0gJiYgY29tcGFyZVNpZ25hdHVyZXMgJDEgJDMgIlwoXjwgYWxsXClcfFwoXjwgeDg2XzY0LWxpbnV4XClcfFwoXjwgaTU4Ni1saW51eFwpIgorfQorCitpZiBbICIke2FuYWx5emV9IiA9ICJZIiBdIDsgdGhlbgorICBjb21wYXJlTWFjaGluZXMgJHttYWNoaW5lc30KK2ZpCisKK2lmIFsgIiR7UkVTVUxUfSIgIT0gIjAiIC1hIC1mICR7T1VUUFVUfS9mYWlsZWQtcmVjaXBlcy5sb2cgXSA7IHRoZW4KKyAgY2F0ICR7T1VUUFVUfS9mYWlsZWQtcmVjaXBlcy5sb2cgfCBzb3J0IC11ID4ke09VVFBVVH0vZmFpbGVkLXJlY2lwZXMubG9nLnUgJiYgbXYgJHtPVVRQVVR9L2ZhaWxlZC1yZWNpcGVzLmxvZy51ICR7T1VUUFVUfS9mYWlsZWQtcmVjaXBlcy5sb2cKKyAgZWNobyAiRVJST1I6ICR7UkVTVUxUfSBpc3N1ZXMgd2VyZSBmb3VuZCBpbiB0aGVzZSByZWNpcGVzOiBgY2F0ICR7T1VUUFVUfS9mYWlsZWQtcmVjaXBlcy5sb2cgfCB4YXJnc2AiCitmaQorCitlY2hvICJJTkZPOiBPdXRwdXQgd3JpdHRlbiBpbjogJHtPVVRQVVR9IgorZXhpdCAke1JFU1VMVH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9zc3RhdGUtc3lzcm9vdC1jcnVmdC5zaCBiL3lvY3RvLXBva3kvc2NyaXB0cy9zc3RhdGUtc3lzcm9vdC1jcnVmdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNjI0ODVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3NzdGF0ZS1zeXNyb290LWNydWZ0LnNoCkBAIC0wLDAgKzEsMTUyIEBACisjIS9iaW4vc2gKKworIyBVc2VkIHRvIGZpbmQgZmlsZXMgaW5zdGFsbGVkIGluIHN5c3Jvb3Qgd2hpY2ggYXJlIG5vdCB0cmFja2VkIGJ5IHNzdGF0ZSBtYW5pZmVzdAorCisjIEdsb2JhbCB2YXJzCit0bXBkaXI9CisKK3VzYWdlICgpIHsKKyAgY2F0IDw8IEVPRgorV2VsY29tZSB0byBzeXNyb290IGNydWZ0IGZpbmRpbmcgdXRpbGl0eS4KKyQwIDxPUFRJT04+CisKK09wdGlvbnM6CisgIC1oLCAtLWhlbHAKKyAgICAgICAgRGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQuCisKKyAgLS10bXBkaXI9PHRtcGRpcj4KKyAgICAgICAgU3BlY2lmeSB0bXBkaXIsIHdpbGwgdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBUTVBESVIgaWYgaXQgaXMgbm90IHNwZWNpZmllZC4KKwlTb21ldGhpbmcgbGlrZSAvT0Uvb2UtY29yZS90bXAtZWdsaWJjIChubyAvIGF0IHRoZSBlbmQpLgorCisgIC0td2hpdGVsaXN0PTx3aGl0ZWxpc3QtZmlsZT4KKyAgICAgICAgVGV4dCBmaWxlLCBlYWNoIGxpbmUgaXMgcmVndWxhciBleHByZXNzaW9uIGZvciBwYXRocyB3ZSB3YW50IHRvIGlnbm9yZSBpbiByZXN1bHRpbmcgZGlmZi4KKyAgICAgICAgWW91IGNhbiB1c2UgZGlmZiBmaWxlIGZyb20gdGhlIHNjcmlwdCBvdXRwdXQsIGlmIGl0IGNvbnRhaW5zIG9ubHkgZXhwZWN0ZWQgZXhjZXB0aW9ucy4KKyAgICAgICAgJyMnIGlzIHVzZWQgYXMgcmVnZXhwIGRlbGltaXRlciwgc28geW91IGRvbid0IG5lZWQgdG8gcHJlZml4IGZvcndhcmQgc2xhc2hlcyBpbiBwYXRocy4KKyAgICAgICAgXiBhbmQgJCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkLCBzbyBwcm92aWRlIG9ubHkgdGhlIG1pZGRsZSBwYXJ0LgorICAgICAgICBMaW5lcyBzdGFydGluZyB3aXRoICcjJyBhcmUgaWdub3JlZCBhcyBjb21tZW50cy4KKyAgICAgICAgQWxsIHBhdGhzIGFyZSByZWxhdGl2ZSB0byAic3lzcm9vdHMiIGRpcmVjdG9yeS4KKyAgICAgICAgRGlyZWN0b3JpZXMgZG9uJ3QgZW5kIHdpdGggZm9yd2FyZCBzbGFzaC4KK0VPRgorfQorCisjIFByaW50IGVycm9yIGluZm9ybWF0aW9uIGFuZCBleGl0LgorZWNob19lcnJvciAoKSB7CisgIGVjaG8gIkVSUk9SOiAkMSIgPiYyCisgIGV4aXQgMQorfQorCit3aGlsZSBbIC1uICIkMSIgXTsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tdG1wZGlyPSopCisgICAgICB0bXBkaXI9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tdG1wZGlyPSMjJyB8IHhhcmdzIHJlYWRsaW5rIC1lYAorICAgICAgWyAtZCAiJHRtcGRpciIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIGFyZ3VtZW50IHRvIC0tdG1wZGlyIgorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLXdoaXRlbGlzdD0qKQorICAgICAgZndoaXRlbGlzdD1gZWNobyAkMSB8IHNlZCAtZSAncyNeLS13aGl0ZWxpc3Q9IyMnIHwgeGFyZ3MgcmVhZGxpbmsgLWVgCisgICAgICBbIC1mICIkZndoaXRlbGlzdCIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIGFyZ3VtZW50IHRvIC0td2hpdGVsaXN0IgorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLWhlbHB8LWgpCisgICAgICB1c2FnZQorICAgICAgZXhpdCAwCisgICAgICAgIDs7CisgICAgKikKKyAgICAgIGVjaG8gIkludmFsaWQgYXJndW1lbnRzICQqIgorICAgICAgZWNob19lcnJvciAiVHJ5ICckMCAtaCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgICAgICA7OworICBlc2FjCitkb25lCisKKyMgc3N0YXRlIGNhY2hlIGRpcmVjdG9yeSwgdXNlIGVudmlyb25tZW50IHZhcmlhYmxlIFRNUERJUgorIyBpZiBpdCB3YXMgbm90IHNwZWNpZmllZCwgb3RoZXJ3aXNlLCBlcnJvci4KK1sgLW4gIiR0bXBkaXIiIF0gfHwgdG1wZGlyPSRUTVBESVIKK1sgLW4gIiR0bXBkaXIiIF0gfHwgZWNob19lcnJvciAiTm8gdG1wZGlyIGZvdW5kISIKK1sgLWQgIiR0bXBkaXIiIF0gfHwgZWNob19lcnJvciAiSW52YWxpZCB0bXBkaXIgXCIkdG1wZGlyXCIiCisKK09VVFBVVD0ke3RtcGRpcn0vc3lzcm9vdC5jcnVmdC5gZGF0ZSAiKyVzImAKKworIyB0b3AgbGV2ZWwgZGlyZWN0b3JpZXMKK1dISVRFTElTVD0iW14vXSoiCisKKyMgZ2VuZXJhdGVkIGJ5IGJhc2UtcGFzc3dkIHJlY2lwZQorV0hJVEVMSVNUPSIke1dISVRFTElTVH0gXAorICAuKi9ldGMvZ3JvdXAtXD8gXAorICAuKi9ldGMvcGFzc3dkLVw/IFwKKyIKKyMgZ2VuZXJhdGVkIGJ5IHBzZXVkby1uYXRpdmUKK1dISVRFTElTVD0iJHtXSElURUxJU1R9IFwKKyAgLiovdmFyL3BzZXVkbyBcCisgIC4qL3Zhci9wc2V1ZG8vW14vXSogXAorIgorCisjIGdlbmVyYXRlZCBieSBwYWNrYWdlLmJiY2xhc3M6U0hMSUJTRElSUyA9ICIke1BLR0RBVEFfRElSfS8ke01MUFJFRklYfXNobGlicyIKK1dISVRFTElTVD0iJHtXSElURUxJU1R9IFwKKyAgLiovc2hsaWJzIFwKKyAgLiovcGtnZGF0YSBcCisiCisKKyMgZ2VuZXJhdGVkIGJ5IHB5dGhvbgorV0hJVEVMSVNUPSIke1dISVRFTElTVH0gXAorICAuKlwucHljIFwKKyAgLipcLnB5byBcCisiCisKKyMgZ2VuZXJhdGVkIGJ5IHNnbWwtY29tbW9uLW5hdGl2ZQorV0hJVEVMSVNUPSIke1dISVRFTElTVH0gXAorICAuKi9ldGMvc2dtbC9zZ21sLWRvY2Jvb2suYmFrIFwKKyIKKworIyBnZW5lcmF0ZWQgYnkgdG9vbGNoYWluCitXSElURUxJU1Q9IiR7V0hJVEVMSVNUfSBcCisgIFteL10qLXRjYm9vdHN0cmFwL2xpYiBcCisiCisKKyMgZ2VuZXJhdGVkIGJ5IHVzZXJhZGQuYmJjbGFzcworV0hJVEVMSVNUPSIke1dISVRFTElTVH0gXAorICBbXi9dKi9ob21lIFwKKyAgW14vXSovaG9tZS94dXNlciBcCisiCisKK1NZU1JPT1RTPSJgcmVhZGxpbmsgLWYgJHt0bXBkaXJ9YC9zeXNyb290cy8iCisKK21rZGlyICR7T1VUUFVUfQorZmluZCAke3RtcGRpcn0vc3N0YXRlLWNvbnRyb2wgLW5hbWUgXCoucG9wdWxhdGUtc3lzcm9vdFwqIC1vIC1uYW1lIFwqLnBvcHVsYXRlX3N5c3Jvb3RcKiAtbyAtbmFtZSBcKi5wYWNrYWdlXCogfCB4YXJncyBjYXQgfCBncmVwIHN5c3Jvb3RzIHwgXAorICBzZWQgJ3MjLyQjI2c7IHMjLy8vKiMvI2cnIHwgXAorICAjIHdvcmsgYXJvdW5kIGZvciBwYXRocyBlbmRpbmcgd2l0aCAvIGZvciBkaXJlY3RvcmllcyBhbmQgbXVsdGlwbGllZCAvLyAoZS5nLiBwYXRocyB0byBuYXRpdmUgc3lzcm9vdCkKKyAgc29ydCB8IHNlZCAicyNeJHtTWVNST09UU30jI2ciID4gJHtPVVRQVVR9L21hc3Rlci5saXN0LmFsbC50eHQKK3NvcnQgLXUgJHtPVVRQVVR9L21hc3Rlci5saXN0LmFsbC50eHQgPiAke09VVFBVVH0vbWFzdGVyLmxpc3QudHh0ICMgLXUgYmVjYXVzZSBzb21lIGRpcmVjdG9yaWVzIGFyZSBsaXN0ZWQgZm9yIG1vcmUgcmVjaXBlcworZmluZCAke3RtcGRpcn0vc3lzcm9vdHMvIHwgXAorICBzb3J0IHwgc2VkICJzI14ke1NZU1JPT1RTfSMjZyIgPiAke09VVFBVVH0vc3lzcm9vdC5saXN0LnR4dAorCitkaWZmICR7T1VUUFVUfS9tYXN0ZXIubGlzdC5hbGwudHh0ICR7T1VUUFVUfS9tYXN0ZXIubGlzdC50eHQgPiAke09VVFBVVH0vZHVwbGljYXRlcy50eHQKK2RpZmYgJHtPVVRQVVR9L21hc3Rlci5saXN0LnR4dCAke09VVFBVVH0vc3lzcm9vdC5saXN0LnR4dCA+ICR7T1VUUFVUfS9kaWZmLmFsbC50eHQKKworZ3JlcCAiXj4gLiIgJHtPVVRQVVR9L2RpZmYuYWxsLnR4dCB8IHNlZCAncy9ePiAvL2cnID4gJHtPVVRQVVR9L2RpZmYudHh0Citmb3IgaXRlbSBpbiAke1dISVRFTElTVH07IGRvCisgIHNlZCAtaSAiXFwjXiR7aXRlbX1cJCNkIiAke09VVFBVVH0vZGlmZi50eHQ7CisgIGVjaG8gIiR7aXRlbX0iID4+ICR7T1VUUFVUfS91c2VkLndoaXRlbGlzdC50eHQKK2RvbmUKKworaWYgWyAtcyAiJGZ3aGl0ZWxpc3QiIF0gOyB0aGVuCisgIGNhdCAkZndoaXRlbGlzdCA+PiAke09VVFBVVH0vdXNlZC53aGl0ZWxpc3QudHh0CisgIGNhdCAkZndoaXRlbGlzdCB8IGdyZXAgLXYgJ14jJyB8IHdoaWxlIHJlYWQgaXRlbTsgZG8KKyAgICBzZWQgLWkgIlxcI14ke2l0ZW19XCQjZCIgJHtPVVRQVVR9L2RpZmYudHh0OworICBkb25lCitmaQorIyB0b28gbWFueSBmYWxzZSBwb3NpdGl2ZXMgZm9yIGRpcmVjdG9yaWVzCisjIGVjaG8gIkZvbGxvd2luZyBmaWxlcyBhcmUgaW5zdGFsbGVkIGluIHN5c3Jvb3QgYXQgbGVhc3QgdHdpY2UiCisjIGNhdCAke09VVFBVVH0vZHVwbGljYXRlcworCitSRVNVTFQ9YGNhdCAke09VVFBVVH0vZGlmZi50eHQgfCB3YyAtbGAKKworaWYgWyAiJHtSRVNVTFR9IiAhPSAiMCIgXSA7IHRoZW4KKyAgZWNobyAiRVJST1I6ICR7UkVTVUxUfSBpc3N1ZXMgd2VyZSBmb3VuZC4iCisgIGVjaG8gIkVSUk9SOiBGb2xsb3dpbmcgZmlsZXMgYXJlIGluc3RhbGxlZCBpbiBzeXNyb290LCBidXQgbm90IHRyYWNrZWQgYnkgc3N0YXRlOiIKKyAgY2F0ICR7T1VUUFVUfS9kaWZmLnR4dAorZWxzZQorICBlY2hvICJJTkZPOiBBbGwgZmlsZXMgYXJlIHRyYWNrZWQgYnkgc3N0YXRlIG9yIHdlcmUgZXhwbGljaXRseSBpZ25vcmVkIGJ5IHRoaXMgc2NyaXB0IgorZmkKKworZWNobyAiSU5GTzogT3V0cHV0IHdyaXR0ZW4gaW46ICR7T1VUUFVUfSIKK2V4aXQgJHtSRVNVTFR9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvc3dhYmJlci1zdHJhY2UtYXR0YWNoIGIveW9jdG8tcG9reS9zY3JpcHRzL3N3YWJiZXItc3RyYWNlLWF0dGFjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYjAzOTFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3N3YWJiZXItc3RyYWNlLWF0dGFjaApAQCAtMCwwICsxLDMxIEBACisjIS91c3IvYmluL2VudiBweXRob24KK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHN1YnByb2Nlc3MKKworIyBEZXRhY2ggZnJvbSB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgYW5kIHBhcmVudCBwcm9jZXNzIGJ5IGZvcmtpbmcgdHdpY2UgdG8gZGFlbW9uaXplIG91cnNlbHZlcywKKyMgdGhlbiBydW4gdGhlIGNvbW1hbmQgcGFzc2VkIGFzIGFyZ3ZbMV0uIFNlbmQgbG9nIGRhdGEgdG8gYXJndlsyXS4KKworcGlkID0gb3MuZm9yaygpCitpZiAocGlkID09IDApOgorICAgIG9zLnNldHNpZCgpCisgICAgcGlkID0gb3MuZm9yaygpCisgICAgaWYgKHBpZCAhPSAwKToKKyAgICAgICAgb3MuX2V4aXQoMCkKK2Vsc2U6CisgICAgc3lzLmV4aXQoKQorCisKK3NpID0gZmlsZShvcy5kZXZudWxsLCAncicpCitzbyA9IGZpbGUoc3lzLmFyZ3ZbMl0sICd3JykKK3NlID0gc28KKworIyBSZXBsYWNlIHRob3NlIGZkcyB3aXRoIG91ciBvd24KK29zLmR1cDIoc2kuZmlsZW5vKCksIHN5cy5zdGRpbi5maWxlbm8oKSkKK29zLmR1cDIoc28uZmlsZW5vKCksIHN5cy5zdGRvdXQuZmlsZW5vKCkpCitvcy5kdXAyKHNlLmZpbGVubygpLCBzeXMuc3RkZXJyLmZpbGVubygpKQorCityZXQgPSBzdWJwcm9jZXNzLmNhbGwoc3lzLmFyZ3ZbMV0sIHNoZWxsPVRydWUpCisKK29zLl9leGl0KHJldCkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3N5c3Jvb3QtcmVsYXRpdmVsaW5rcy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9zeXNyb290LXJlbGF0aXZlbGlua3MucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWMyNjM2NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9zeXNyb290LXJlbGF0aXZlbGlua3MucHkKQEAgLTAsMCArMSwzMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKKworIyBUYWtlIGEgc3lzcm9vdCBkaXJlY3RvcnkgYW5kIHR1cm4gYWxsIHRoZSBhYm9sdXRlIHN5bWxpbmtzIGFuZCB0dXJuIHRoZW0gaW50bworIyByZWxhdGl2ZSBvbmVzIHN1Y2ggdGhhdCB0aGUgc3lzcm9vdCBpcyB1c2FibGUgd2l0aGluIGFub3RoZXIgc3lzdGVtLgorCitpZiBsZW4oc3lzLmFyZ3YpICE9IDI6CisgICAgcHJpbnQoIlVzYWdlIGlzICIgKyBzeXMuYXJndlswXSArICI8ZGlyZWN0b3J5PiIpCisgICAgc3lzLmV4aXQoMSkKKwordG9wZGlyID0gc3lzLmFyZ3ZbMV0KK3RvcGRpciA9IG9zLnBhdGguYWJzcGF0aCh0b3BkaXIpCisKK2RlZiBoYW5kbGVsaW5rKGZpbGVwLCBzdWJkaXIpOgorICAgIGxpbmsgPSBvcy5yZWFkbGluayhmaWxlcCkKKyAgICBpZiBsaW5rWzBdICE9ICIvIjoKKyAgICAgICAgcmV0dXJuCisgICAgaWYgbGluay5zdGFydHN3aXRoKHRvcGRpcik6CisgICAgICAgIHJldHVybgorICAgICNwcmludCgiUmVwbGFjaW5nICVzIHdpdGggJXMgZm9yICVzIiAlIChsaW5rLCB0b3BkaXIrbGluaywgZmlsZXApKQorICAgIHByaW50KCJSZXBsYWNpbmcgJXMgd2l0aCAlcyBmb3IgJXMiICUgKGxpbmssIG9zLnBhdGgucmVscGF0aCh0b3BkaXIrbGluaywgc3ViZGlyKSwgZmlsZXApKQorICAgIG9zLnVubGluayhmaWxlcCkKKyAgICBvcy5zeW1saW5rKG9zLnBhdGgucmVscGF0aCh0b3BkaXIrbGluaywgc3ViZGlyKSwgZmlsZXApCisKK2ZvciBzdWJkaXIsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsodG9wZGlyKToKKyAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgZmlsZXAgPSBvcy5wYXRoLmpvaW4oc3ViZGlyLCBmKQorICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmaWxlcCk6CisgICAgICAgICAgICAjcHJpbnQoIkNvbnNpZGVyaW5nICVzIiAlIGZpbGVwKQorICAgICAgICAgICAgaGFuZGxlbGluayhmaWxlcCwgc3ViZGlyKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3Rlc3QtZGVwZW5kZW5jaWVzLnNoIGIveW9jdG8tcG9reS9zY3JpcHRzL3Rlc3QtZGVwZW5kZW5jaWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAxNzA5NDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvdGVzdC1kZXBlbmRlbmNpZXMuc2gKQEAgLTAsMCArMSwyODYgQEAKKyMhL2Jpbi9iYXNoCisKKyMgQXV0aG9yOiBNYXJ0aW4gSmFuc2EgPG1hcnRpbi5qYW5zYUBnbWFpbC5jb20+CisjCisjIENvcHlyaWdodCAoYykgMjAxMyBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKKyMgVXNlZCB0byBkZXRlY3QgbWlzc2luZyBkZXBlbmRlbmNpZXMgb3IgYXV0b21hZ2ljYWxseQorIyBlbmFibGVkIGRlcGVuZGVuY2llcyB3aGljaCBhcmVuJ3QgZXhwbGljaXRseSBlbmFibGVkCisjIG9yIGRpc2FibGVkLiBVc2luZyBiYXNoIHRvIGhhdmUgUElQRVNUQVRVUyB2YXJpYWJsZS4KKworIyBJdCBkb2VzIDMgYnVpbGRzIG9mIDx0YXJnZXQ+CisjIDFzdCB0byBwb3B1bGF0ZSBzc3RhdGUtY2FjaGUgZGlyZWN0b3J5IGFuZCBzeXNyb290CisjIDJuZCB0byByZWJ1aWxkIGVhY2ggcmVjaXBlIHdpdGggZXZlcnkgcG9zc2libGUKKyMgICAgIGRlcGVuZGVuY3kgZm91bmQgaW4gc3lzcm9vdCAod2hpY2ggc3RheXMgcG9wdWxhdGVkCisjICAgICBmcm9tIDFzdCBidWlsZAorIyAzcmQgdG8gcmVidWlsZCBlYWNoIHJlY2lwZSBvbmx5IHdpdGggZGVwZW5kZW5jaWVzIGRlZmluZWQKKyMgICAgIGluIERFUEVORFMKKyMgNHRoIChvcHRpb25hbCkgcmVwZWF0IGJ1aWxkIGxpa2UgM3JkIHRvIG1ha2Ugc3VyZSB0aGF0CisjICAgICBtaW5pbWFsIHZlcnNpb25zIG9mIGRlcGVuZGVuY2llcyBkZWZpbmVkIGluIERFUEVORFMKKyMgICAgIGlzIGFsc28gZW5vdWdoCisKKyMgR2xvYmFsIHZhcnMKK3RtcGRpcj0KK3RhcmdldHM9CityZWNpcGVzPQorYnVpbGRoaXN0b3J5PQorYnVpbGR0eXBlPQorZGVmYXVsdF90YXJnZXRzPSJ3b3JsZCIKK2RlZmF1bHRfYnVpbGRoaXN0b3J5PSJidWlsZGhpc3RvcnkiCitkZWZhdWx0X2J1aWxkdHlwZT0iMSAyIDMgYyIKKwordXNhZ2UgKCkgeworICBjYXQgPDwgRU9GCitXZWxjb21lIHRvIHV0aWxpdHkgdG8gZGV0ZWN0IG1pc3Npbmcgb3IgYXV0b2VuYWJsZWQgZGVwZW5kZW5jaWVzLgorV0FSTklORzogdGhpcyB1dGlsaXR5IHdpbGwgY29tcGxldGVseSByZW1vdmUgeW91ciB0bXBkaXIgKG1ha2Ugc3VyZQorICAgICAgICAgeW91IGRvbid0IGhhdmUgaW1wb3J0YW50IGJ1aWxkaGlzdG9yeSBvciBwZXJzaXN0ZW50IGRpciB0aGVyZSkuCiskMCA8T1BUSU9OPgorCitPcHRpb25zOgorICAtaCwgLS1oZWxwCisgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0LgorCisgIC0tdG1wZGlyPTx0bXBkaXI+CisgICAgICAgIFNwZWNpZnkgdG1wZGlyLCB3aWxsIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgVE1QRElSIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgIFNvbWV0aGluZyBsaWtlIC9PRS9vZS1jb3JlL3RtcC1lZ2xpYmMgKG5vIC8gYXQgdGhlIGVuZCkuCisKKyAgLS10YXJnZXRzPTx0YXJnZXRzPgorICAgICAgICBMaXN0IG9mIHRhcmdldHMgc2VwYXJhdGVkIGJ5IHNwYWNlLCB3aWxsIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgVEFSR0VUUyBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkLgorICAgICAgICBJdCB3aWxsIHJ1biAiYml0YmFrZSA8dGFyZ2V0cz4iIHRvIHBvcHVsYXRlIHN5c3Jvb3RzLgorICAgICAgICBEZWZhdWx0IHZhbHVlIGlzICJ3b3JsZCIuCisKKyAgLS1yZWNpcGVzPTxyZWNpcGVzPgorICAgICAgICBGaWxlIHdpdGggbGlzdCBvZiByZWNpcGVzIHdlIHdhbnQgdG8gcmVidWlsZCB3aXRoIG1pbmltYWwgYW5kIG1heGltYWwgc3lzcm9vdC4KKyAgICAgICAgV2lsbCB1c2UgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFJFQ0lQRVMgaWYgaXQgaXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgRGVmYXVsdCB2YWx1ZSB3aWxsIHVzZSBhbGwgcGFja2FnZXMgZXZlciByZWNvcmRlZCBpbiBidWlsZGhpc3RvcnkgZGlyZWN0b3J5LgorCisgIC0tYnVpbGRoaXN0b3J5PTxidWlsZGhpc3Rvcnk+CisgICAgICAgIFBhdGggdG8gYnVpbGRoaXN0b3J5IGRpcmVjdG9yeSwgaXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBpbiB5b3VyIGNvbmZpZywKKyAgICAgICAgYmVjYXVzZSBpdCdzIHVzZWQgdG8gZGV0ZWN0IGRpZmZlcmVudCBkZXBlbmRlbmNpZXMgYW5kIHRvIGNyZWF0ZSBsaXN0CisgICAgICAgIG9mIHJlY2lwZXMgdG8gcmVidWlsZCB3aGVuIGl0J3Mgbm90IHNwZWNpZmllZC4KKyAgICAgICAgV2lsbCB1c2UgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEJVSUxESElTVE9SWSBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkLgorICAgICAgICBEZWZhdWx0IHZhbHVlIGlzICJidWlsZGhpc3RvcnkiCisKKyAgLS1idWlsZHR5cGU9PGJ1aWxkdHlwZT4KKyAgICAgICAgVGhlcmUgYXJlIDQgdHlwZXMgb2YgYnVpbGQ6CisgICAgICAgICAgMTogYnVpbGQgdG8gcG9wdWxhdGUgc3N0YXRlLWNhY2hlIGRpcmVjdG9yeSBhbmQgc3lzcm9vdAorICAgICAgICAgIDI6IGJ1aWxkIHRvIHJlYnVpbGQgZWFjaCByZWNpcGUgd2l0aCBldmVyeSBwb3NzaWJsZSBkZXAKKyAgICAgICAgICAzOiBidWlsZCB0byByZWJ1aWxkIGVhY2ggcmVjaXBlIHdpdGggbWluaW1hbCBkZXBlbmRlbmNpZXMKKyAgICAgICAgICA0OiBidWlsZCB0byByZWJ1aWxkIGVhY2ggcmVjaXBlIGFnYWluIHdpdGggbWluaW1hbCBkZXBlbmRlbmNpZXMKKyAgICAgICAgICBjOiBjb21wYXJlIGJ1aWxkaGlzdG9yeSBkaXJlY3RvcmllcyBmcm9tIGJ1aWxkIDIgYW5kIDMKKyAgICAgICAgV2lsbCB1c2UgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEJVSUxEVFlQRSBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkLgorICAgICAgICBEZWZhdWx0IHZhbHVlIGlzICIxIDIgMyBjIiwgb3JkZXIgaXMgaW1wb3J0YW50LCB0eXBlIDQgaXMgb3B0aW9uYWwuCitFT0YKK30KKworIyBQcmludCBlcnJvciBpbmZvcm1hdGlvbiBhbmQgZXhpdC4KK2VjaG9fZXJyb3IgKCkgeworICBlY2hvICJFUlJPUjogJDEiID4mMgorICBleGl0IDEKK30KKword2hpbGUgWyAtbiAiJDEiIF07IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRtcGRpcj0qKQorICAgICAgdG1wZGlyPWBlY2hvICQxIHwgc2VkIC1lICdzI14tLXRtcGRpcj0jIycgfCB4YXJncyByZWFkbGluayAtZWAKKyAgICAgIFsgLWQgIiR0bXBkaXIiIF0gfHwgZWNob19lcnJvciAiSW52YWxpZCBhcmd1bWVudCB0byAtLXRtcGRpciIKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS10YXJnZXRzPSopCisgICAgICB0YXJnZXRzPWBlY2hvICQxIHwgc2VkIC1lICdzI14tLXRhcmdldHM9IipcKFteIl0qXCkiKiNcMSMnYAorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLXJlY2lwZXM9KikKKyAgICAgIHJlY2lwZXM9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tcmVjaXBlcz0iKlwoW14iXSpcKSIqI1wxIydgCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tYnVpbGRoaXN0b3J5PSopCisgICAgICBidWlsZGhpc3Rvcnk9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tYnVpbGRoaXN0b3J5PSIqXChbXiJdKlwpIiojXDEjJ2AKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1idWlsZHR5cGU9KikKKyAgICAgIGJ1aWxkdHlwZT1gZWNobyAkMSB8IHNlZCAtZSAncyNeLS1idWlsZHR5cGU9IipcKFteIl0qXCkiKiNcMSMnYAorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLWhlbHB8LWgpCisgICAgICB1c2FnZQorICAgICAgZXhpdCAwCisgICAgICAgIDs7CisgICAgKikKKyAgICAgIGVjaG8gIkludmFsaWQgYXJndW1lbnRzICQqIgorICAgICAgZWNob19lcnJvciAiVHJ5ICckMCAtaCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgICAgICA7OworICBlc2FjCitkb25lCisKKyMgdG1wZGlyIGRpcmVjdG9yeSwgdXNlIGVudmlyb25tZW50IHZhcmlhYmxlIFRNUERJUgorIyBpZiBpdCB3YXMgbm90IHNwZWNpZmllZCwgb3RoZXJ3aXNlLCBlcnJvci4KK1sgLW4gIiR0bXBkaXIiIF0gfHwgdG1wZGlyPSRUTVBESVIKK1sgLW4gIiR0bXBkaXIiIF0gfHwgZWNob19lcnJvciAiTm8gdG1wZGlyIGZvdW5kISIKK1sgLWQgIiR0bXBkaXIiIF0gfHwgZWNob19lcnJvciAiSW52YWxpZCB0bXBkaXIgXCIkdG1wZGlyXCIiCitbIC1uICIkdGFyZ2V0cyIgXSB8fCB0YXJnZXRzPSRUQVJHRVRTCitbIC1uICIkdGFyZ2V0cyIgXSB8fCB0YXJnZXRzPSRkZWZhdWx0X3RhcmdldHMKK1sgLW4gIiRyZWNpcGVzIiBdIHx8IHJlY2lwZXM9JFJFQ0lQRVMKK1sgLW4gIiRyZWNpcGVzIiAtYSAhIC1mICIkcmVjaXBlcyIgXSAmJiBlY2hvX2Vycm9yICJJbnZhbGlkIGZpbGUgd2l0aCBsaXN0IG9mIHJlY2lwZXMgdG8gcmVidWlsZCIKK1sgLW4gIiRyZWNpcGVzIiBdIHx8IGVjaG8gIkFsbCBwYWNrYWdlcyBldmVyIHJlY29yZGVkIGluIGJ1aWxkaGlzdG9yeSBkaXJlY3Rvcnkgd2lsbCBiZSByZWJ1aWx0IgorWyAtbiAiJGJ1aWxkaGlzdG9yeSIgXSB8fCBidWlsZGhpc3Rvcnk9JEJVSUxESElTVE9SWQorWyAtbiAiJGJ1aWxkaGlzdG9yeSIgXSB8fCBidWlsZGhpc3Rvcnk9JGRlZmF1bHRfYnVpbGRoaXN0b3J5CitbIC1kICIkYnVpbGRoaXN0b3J5IiBdIHx8IGVjaG9fZXJyb3IgIkludmFsaWQgYnVpbGRoaXN0b3J5IGRpcmVjdG9yeSBcIiRidWlsZGhpc3RvcnlcIiIKK1sgLW4gIiRidWlsZHR5cGUiIF0gfHwgYnVpbGR0eXBlPSRCVUlMRFRZUEUKK1sgLW4gIiRidWlsZHR5cGUiIF0gfHwgYnVpbGR0eXBlPSRkZWZhdWx0X2J1aWxkdHlwZQorZWNobyAiJGJ1aWxkdHlwZSIgfCBncmVwIC12ICdeWzEyMzRjIF0qJCcgJiYgZWNob19lcnJvciAiSW52YWxpZCBidWlsZHR5cGUgXCIkYnVpbGR0eXBlXCIsIG9ubHkgc29tZSBjb21iaW5hdGlvbiBvZiAxLCAyLCAzLCA0LCBjIHNlcGFyYXRlZCBieSBzcGFjZSBpcyBhbGxvd2VkIgorCitPVVRQVVRfQkFTRT10ZXN0LWRlcGVuZGVuY2llcy9gZGF0ZSAiKyVzImAKK2RlY2xhcmUgLWkgUkVTVUxUPTAKKworYnVpbGRfYWxsKCkgeworICBlY2hvICI9PT09PSAxc3QgYnVpbGQgdG8gcG9wdWxhdGUgc3N0YXRlLWNhY2hlIGRpcmVjdG9yeSBhbmQgc3lzcm9vdCA9PT09PSIKKyAgT1VUUFVUMT0ke09VVFBVVF9CQVNFfS8ke1RZUEV9X2FsbAorICBta2RpciAtcCAke09VVFBVVDF9CisgIGVjaG8gIkxvZ3Mgd2lsbCBiZSBzdG9yZWQgaW4gJHtPVVRQVVQxfSBkaXJlY3RvcnkiCisgIGJpdGJha2UgLWsgJHRhcmdldHMgMj4mMSB8IHRlZSAtYSAke09VVFBVVDF9L2NvbXBsZXRlLmxvZworICBSRVNVTFQrPSR7UElQRVNUQVRVU1swXX0KKyAgZ3JlcCAiRVJST1I6IFRhc2suKmZhaWxlZCIgJHtPVVRQVVQxfS9jb21wbGV0ZS5sb2cgPiAke09VVFBVVDF9L2ZhaWxlZC10YXNrcy5sb2cKKyAgY2F0ICR7T1VUUFVUMX0vZmFpbGVkLXRhc2tzLmxvZyB8IHNlZCAnc0AuKi9AQGc7IHNAXy4qQEBnOyBzQFwuYmIsIC4qQEBnJyB8IHNvcnQgLXUgPiAke09VVFBVVDF9L2ZhaWxlZC1yZWNpcGVzLmxvZworfQorCitidWlsZF9ldmVyeV9yZWNpcGUoKSB7CisgIGlmIFsgIiR7VFlQRX0iID0gIjIiIF0gOyB0aGVuCisgICAgZWNobyAiPT09PT0gMm5kIGJ1aWxkIHRvIHJlYnVpbGQgZWFjaCByZWNpcGUgd2l0aCBldmVyeSBwb3NzaWJsZSBkZXAgPT09PT0iCisgICAgT1VUUFVUX01BWD0ke09VVFBVVF9CQVNFfS8ke1RZUEV9X21heAorICAgIE9VVFBVVEI9JHtPVVRQVVRfTUFYfQorICBlbHNlCisgICAgZWNobyAiPT09PT0gM3JkIG9yIDR0aCBidWlsZCB0byByZWJ1aWxkIGVhY2ggcmVjaXBlIHdpdGggbWluaW1hbCBkZXBlbmRlbmNpZXMgPT09PT0iCisgICAgT1VUUFVUX01JTj0ke09VVFBVVF9CQVNFfS8ke1RZUEV9X21pbgorICAgIE9VVFBVVEI9JHtPVVRQVVRfTUlOfQorICBmaQorCisgIG1rZGlyIC1wICR7T1VUUFVUQn0gJHtPVVRQVVRCfS9mYWlsZWQgJHtPVVRQVVRCfS9vaworICBlY2hvICJMb2dzIHdpbGwgYmUgc3RvcmVkIGluICR7T1VUUFVUQn0gZGlyZWN0b3J5IgorICBpZiBbIC16ICIkcmVjaXBlcyIgXTsgdGhlbgorICAgIGxzIC1kICRidWlsZGhpc3RvcnkvcGFja2FnZXMvKi8qIHwgeGFyZ3MgLW4gMSBiYXNlbmFtZSB8IHNvcnQgLXUgPiAke09VVFBVVEJ9L3JlY2lwZS5saXN0CisgICAgcmVjaXBlcz0ke09VVFBVVEJ9L3JlY2lwZS5saXN0CisgIGZpCisgIGlmIFsgIiR7VFlQRX0iICE9ICIyIiBdIDsgdGhlbgorICAgIGVjaG8gIiEhIVJlbW92aW5nIHRtcGRpciBcIiR0bXBkaXJcIiEhISIKKyAgICBybSAtcmYgJHRtcGRpci9kZXBsb3kgJHRtcGRpci9wa2dkYXRhICR0bXBkaXIvc3N0YXRlLWNvbnRyb2wgJHRtcGRpci9zdGFtcHMgJHRtcGRpci9zeXNyb290cyAkdG1wZGlyL3dvcmsgJHRtcGRpci93b3JrLXNoYXJlZCAyPi9kZXYvbnVsbAorICBmaQorICBpPTEKKyAgY291bnQ9YGNhdCAkcmVjaXBlcyAke09VVFBVVDF9L2ZhaWxlZC1yZWNpcGVzLmxvZyB8IHNvcnQgLXUgfCB3YyAtbGAKKyAgZm9yIHJlY2lwZSBpbiBgY2F0ICRyZWNpcGVzICR7T1VUUFVUMX0vZmFpbGVkLXJlY2lwZXMubG9nIHwgc29ydCAtdWA7IGRvCisgICAgZWNobyAiQnVpbGRpbmcgcmVjaXBlOiAke3JlY2lwZX0gKCRpLyRjb3VudCkiCisgICAgZGVjbGFyZSAtaSBSRUNJUEVfUkVTVUxUPTAKKyAgICBiaXRiYWtlIC1jIGNsZWFuc3N0YXRlICR7cmVjaXBlfSA+ICR7T1VUUFVUQn0vJHtyZWNpcGV9LmxvZyAyPiYxOworICAgIFJFQ0lQRV9SRVNVTFQrPSQ/CisgICAgYml0YmFrZSAke3JlY2lwZX0gPj4gJHtPVVRQVVRCfS8ke3JlY2lwZX0ubG9nIDI+JjE7CisgICAgUkVDSVBFX1JFU1VMVCs9JD8KKyAgICBpZiBbICIke1JFQ0lQRV9SRVNVTFR9IiAhPSAiMCIgXSA7IHRoZW4KKyAgICAgIFJFU1VMVCs9JHtSRUNJUEVfUkVTVUxUfQorICAgICAgbXYgJHtPVVRQVVRCfS8ke3JlY2lwZX0ubG9nICR7T1VUUFVUQn0vZmFpbGVkLworICAgICAgZ3JlcCAiRVJST1I6IFRhc2suKmZhaWxlZCIgICR7T1VUUFVUQn0vZmFpbGVkLyR7cmVjaXBlfS5sb2cgfCB0ZWUgLWEgJHtPVVRQVVRCfS9mYWlsZWQtdGFza3MubG9nCisgICAgICBncmVwICJFUlJPUjogVGFzay4qZmFpbGVkIiAgJHtPVVRQVVRCfS9mYWlsZWQvJHtyZWNpcGV9LmxvZyB8IHNlZCAnc0AuKi9AQGc7IHNAXy4qQEBnOyBzQFwuYmIsIC4qQEBnJyA+PiAke09VVFBVVEJ9L2ZhaWxlZC1yZWNpcGVzLmxvZworICAgICAgIyBhbmQgYXBwZW5kIGFsc28gJHtyZWNpcGV9IGluIGNhc2UgdGhlIGZhaWxlZCB0YXNrIHdhcyBmcm9tIHNvbWUgZGVwZW5kZW5jeQorICAgICAgZWNobyAke3JlY2lwZX0gPj4gJHtPVVRQVVRCfS9mYWlsZWQtcmVjaXBlcy5sb2cKKyAgICBlbHNlCisgICAgICBtdiAke09VVFBVVEJ9LyR7cmVjaXBlfS5sb2cgJHtPVVRQVVRCfS9vay8KKyAgICBmaQorICAgIGlmIFsgIiR7VFlQRX0iICE9ICIyIiBdIDsgdGhlbgorICAgICAgcm0gLXJmICR0bXBkaXIvZGVwbG95ICR0bXBkaXIvcGtnZGF0YSAkdG1wZGlyL3NzdGF0ZS1jb250cm9sICR0bXBkaXIvc3RhbXBzICR0bXBkaXIvc3lzcm9vdHMgJHRtcGRpci93b3JrICR0bXBkaXIvd29yay1zaGFyZWQgMj4vZGV2L251bGwKKyAgICBmaQorICAgIGk9YGV4cHIgJGkgKyAxYAorICBkb25lCisgIGVjaG8gIkNvcHlpbmcgYnVpbGRoaXN0b3J5L3BhY2thZ2VzIHRvICR7T1VUUFVUQn0iCisgIGNwIC1yYSAkYnVpbGRoaXN0b3J5L3BhY2thZ2VzICR7T1VUUFVUQn0KKyAgIyBUaGlzIHdpbGwgYmUgdXNlZnVsbCB0byBzZWUgd2hpY2ggbGlicmFyeSBpcyBwdWxsaW5nIG5ldyBkZXBlbmRlbmN5CisgIGVjaG8gIkNvcHlpbmcgZG9fcGFja2FnZSBsb2dzIHRvICR7T1VUUFVUQn0vZG9fcGFja2FnZS8iCisgIG1rZGlyICR7T1VUUFVUQn0vZG9fcGFja2FnZQorICBmaW5kICR0bXBkaXIvd29yay8gLW5hbWUgbG9nLmRvX3BhY2thZ2UgMj4vZGV2L251bGx8IHdoaWxlIHJlYWQgZjsgZG8KKyAgICAjIHBuIGlzIDMgbGV2ZWxzIGJhY2ssIGJ1dCB3ZSBkb24ndCBrbm93IGlmIHRoZXJlIGlzIGp1c3Qgb25lIGxvZyBwZXIgcG4gKG9ubHkgb25lIGFyY2ggYW5kIHZlcnNpb24pCisgICAgIyBkZXN0PWBlY2hvICRmIHwgc2VkICdzI14uKi9cKFteL10qXCkvXChbXi9dKlwpL1woW14vXSpcKS9sb2cuZG9fcGFja2FnZSNcMSNnJ2AKKyAgICBkZXN0PWBlY2hvICRmIHwgc2VkICJzIyR0bXBkaXIvd29yay8jI2c7IHMjLyNfI2ciYAorICAgIGNwICRmICR7T1VUUFVUQn0vZG9fcGFja2FnZS8kZGVzdAorICBkb25lCit9CisKK2NvbXBhcmVfZGVwcygpIHsKKyAgIyB5b3UgY2FuIHJ1biBqdXN0IGNvbXBhcmUgdGFzayB3aXRoIGNvbW1hbmQgbGlrZSB0aGlzCisgICMgT1VUUFVUX0JBU0U9dGVzdC1kZXBlbmRlbmNpZXMvMTM3MzE0MDE3MiBcCisgICMgT1VUUFVUX01BWD0ke09VVFBVVF9CQVNFfS8yX21heCBcCisgICMgT1VUUFVUX01JTj0ke09VVFBVVF9CQVNFfS8zX21pbiBcCisgICMgb3BlbmVtYmVkZGVkLWNvcmUvc2NyaXB0cy90ZXN0LWRlcGVuZGVuY2llcy5zaCAtLXRtcGRpcj10bXAtZWdsaWJjIC0tdGFyZ2V0cz1nbGliLTIuMCAtLXJlY2lwZXM9cmVjaXBlX2xpc3QgLS1idWlsZHR5cGU9YworICBlY2hvICI9PT09PSBDb21wYXJlIGRlcGVuZGVuY2llcyByZWNvcmRlZCBpbiBcIiR7T1VUUFVUX01BWH1cIiBhbmQgXCIke09VVFBVVF9NSU59XCIgPT09PT0iCisgIFsgLW4gIiR7T1VUUFVUQ30iIF0gfHwgT1VUUFVUQz0ke09VVFBVVF9CQVNFfS9jb21wCisgIG1rZGlyIC1wICR7T1VUUFVUQ30KKyAgT1VUUFVUX0ZJTEU9JHtPVVRQVVRDfS9kZXBlbmRlbmN5LWNoYW5nZXMKKyAgZWNobyAiRGlmZmVyZW5jZXMgd2lsbCBiZSBzdG9yZWQgaW4gJHtPVVRQVVRfRklMRX0sIGRvdCBpcyBzaG93biBmb3IgZXZlcnkgMTAwIG9mIGNoZWNrZWQgcGFja2FnZXMiCisgIGVjaG8gPiAke09VVFBVVF9GSUxFfQorCisgIFsgLWQgJHtPVVRQVVRfTUFYfSBdIHx8IGVjaG9fZXJyb3IgIkRpcmVjdG9yeSB3aXRoIG91dHB1dCBmcm9tIGJ1aWxkIDIgXCIke09VVFBVVF9NQVh9XCIgZG9lcyBub3QgZXhpc3QiCisgIFsgLWQgJHtPVVRQVVRfTUlOfSBdIHx8IGVjaG9fZXJyb3IgIkRpcmVjdG9yeSB3aXRoIG91dHB1dCBmcm9tIGJ1aWxkIDMgXCIke09VVFBVVF9NSU59XCIgZG9lcyBub3QgZXhpc3QiCisgIFsgLWQgJHtPVVRQVVRfTUFYfS9wYWNrYWdlcy8gXSB8fCBlY2hvX2Vycm9yICJEaXJlY3Rvcnkgd2l0aCBwYWNrYWdlcyBmcm9tIGJ1aWxkIDIgXCIke09VVFBVVF9NQVh9L3BhY2thZ2VzL1wiIGRvZXMgbm90IGV4aXN0IgorICBbIC1kICR7T1VUUFVUX01JTn0vcGFja2FnZXMvIF0gfHwgZWNob19lcnJvciAiRGlyZWN0b3J5IHdpdGggcGFja2FnZXMgZnJvbSBidWlsZCAzIFwiJHtPVVRQVVRfTUlOfS9wYWNrYWdlcy9cIiBkb2VzIG5vdCBleGlzdCIKKyAgaT0wCisgIGZpbmQgJHtPVVRQVVRfTUFYfS9wYWNrYWdlcy8gLW5hbWUgbGF0ZXN0IHwgc2VkICJzIyR7T1VUUFVUX01BWH0vIyNnIiB8IHdoaWxlIHJlYWQgcGtnOyBkbworICAgIG1heF9wa2c9JHtPVVRQVVRfTUFYfS8ke3BrZ30KKyAgICBtaW5fcGtnPSR7T1VUUFVUX01JTn0vJHtwa2d9CisgICAgIyBwa2c9cGFja2FnZXMvYXJtdjV0ZS1vZS1saW51eC1nbnVlYWJpL2xpYnVuZ2lmL2xpYnVuZ2lmL2xhdGVzdAorICAgIHJlY2lwZT1gZWNobyAiJHtwa2d9IiB8IHNlZCAncyNwYWNrYWdlcy9bXi9dKi9cKFteL10qXCkvXChbXi9dKlwpL2xhdGVzdCNcMSNnJ2AKKyAgICBwYWNrYWdlPWBlY2hvICIke3BrZ30iIHwgc2VkICdzI3BhY2thZ2VzL1teL10qL1woW14vXSpcKS9cKFteL10qXCkvbGF0ZXN0I1wyI2cnYAorICAgIGlmIFsgISAtZiAiJHttaW5fcGtnfSIgXSA7IHRoZW4KKyAgICAgIGVjaG8gIkVSUk9SOiAke3JlY2lwZX06ICR7cGFja2FnZX0gcGFja2FnZSBpc24ndCBjcmVhdGVkIHdoZW4gYnVpbGRpbmcgd2l0aCBtaW5pbWFsIGRlcGVuZGVuY2llcz8iIHwgdGVlIC1hICR7T1VUUFVUX0ZJTEV9CisgICAgICBlY2hvICR7cmVjaXBlfSA+PiAke09VVFBVVEN9L2ZhaWxlZC1yZWNpcGVzLmxvZworICAgICAgY29udGludWUKKyAgICBmaQorICAgICMgc3RyaXAgdmVyc2lvbiBpbmZvcm1hdGlvbiBpbiBwYXJlbnRoZXNpcworICAgIG1heF9kZXBzPWBncmVwICJeUkRFUEVORFMgPSAiICR7bWF4X3BrZ30gfCBzZWQgJ3MvXlJERVBFTkRTID0gLyAvZzsgcy8kLyAvZzsgcy8oW14oXSopLy9nJ2AKKyAgICBtaW5fZGVwcz1gZ3JlcCAiXlJERVBFTkRTID0gIiAke21pbl9wa2d9IHwgc2VkICdzL15SREVQRU5EUyA9IC8gL2c7IHMvJC8gL2c7IHMvKFteKF0qKS8vZydgCisgICAgaWYgWyAiJGkiID0gMTAwIF0gOyB0aGVuCisgICAgICBlY2hvIC1uICIuIiAjIGNoZWFwIHByb2dyZXNzYmFyCisgICAgICBpPTAKKyAgICBmaQorICAgIGlmIFsgIiR7bWF4X2RlcHN9IiA9ICIke21pbl9kZXBzfSIgXSA7IHRoZW4KKyAgICAgICMgaXQncyBhbm5veWluZyBsb25nLCBidXQgYXQgbGVhc3QgaXQncyBzaG93aW5nIHNvbWUgcHJvZ3Jlc3MsIHdhcm5pbmdzIGFyZSBncmVwcGVkIGF0IHRoZSBlbmQKKyAgICAgIGVjaG8gIk5PVEU6ICR7cmVjaXBlfTogJHtwYWNrYWdlfSByZGVwZW5kcyB3ZXJlbid0IGNoYW5nZWQiID4+ICR7T1VUUFVUX0ZJTEV9CisgICAgZWxzZQorICAgICAgbWlzc2luZ19kZXBzPQorICAgICAgZm9yIGRlcCBpbiAke21heF9kZXBzfTsgZG8KKyAgICAgICAgaWYgISBlY2hvICIke21pbl9kZXBzfSIgfCBncmVwIC1xICIgJHtkZXB9ICIgOyB0aGVuCisgICAgICAgICAgbWlzc2luZ19kZXBzPSIke21pc3NpbmdfZGVwc30gJHtkZXB9IgorICAgICAgICAgIGVjaG8gIyB0byBnZXQgcmlkIG9mIGRvdHMgb24gbGFzdCBsaW5lCisgICAgICAgICAgZWNobyAiV0FSTjogJHtyZWNpcGV9OiAke3BhY2thZ2V9IHJkZXBlbmRzIG9uICR7ZGVwfSwgYnV0IGl0IGlzbid0IGEgYnVpbGQgZGVwZW5kZW5jeT8iIHwgdGVlIC1hICR7T1VUUFVUX0ZJTEV9CisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiBbIC1uICIke21pc3NpbmdfZGVwc30iIF0gOyB0aGVuCisgICAgICAgIGVjaG8gJHtyZWNpcGV9ID4+ICR7T1VUUFVUQ30vZmFpbGVkLXJlY2lwZXMubG9nCisgICAgICBmaQorICAgIGZpCisgICAgaT1gZXhwciAkaSArIDFgCisgIGRvbmUKKyAgZWNobyAjIHRvIGdldCByaWQgb2YgZG90cyBvbiBsYXN0IGxpbmUKKyAgZWNobyAiRm91bmQgZGlmZmVyZW5jZXM6ICIKKyAgZ3JlcCAiXldBUk46ICIgJHtPVVRQVVRfRklMRX0gfCB0ZWUgJHtPVVRQVVRfRklMRX0ud2Fybi5sb2cKKyAgZWNobyAiRm91bmQgZXJyb3JzOiAiCisgIGdyZXAgIl5FUlJPUjogIiAke09VVFBVVF9GSUxFfSB8IHRlZSAke09VVFBVVF9GSUxFfS5lcnJvci5sb2cKKyAgUkVTVUxUKz1gY2F0ICR7T1VUUFVUX0ZJTEV9Lndhcm4ubG9nIHwgd2MgLWxgCisgIFJFU1VMVCs9YGNhdCAke09VVFBVVF9GSUxFfS5lcnJvci5sb2cgfCB3YyAtbGAKK30KKworZm9yIFRZUEUgaW4gJGJ1aWxkdHlwZTsgZG8KKyAgY2FzZSAke1RZUEV9IGluCisgICAgMSkgYnVpbGRfYWxsOzsKKyAgICAyKSBidWlsZF9ldmVyeV9yZWNpcGU7OworICAgIDMpIGJ1aWxkX2V2ZXJ5X3JlY2lwZTs7CisgICAgNCkgYnVpbGRfZXZlcnlfcmVjaXBlOzsKKyAgICBjKSBjb21wYXJlX2RlcHM7OworICAgICopIGVjaG9fZXJyb3IgIkludmFsaWQgYnVpbGR0eXBlIFwiJFRZUEVcIiIKKyAgZXNhYworZG9uZQorCitjYXQgJHtPVVRQVVRfQkFTRX0vKi9mYWlsZWQtcmVjaXBlcy5sb2cgfCBzb3J0IC11ID4+ICR7T1VUUFVUX0JBU0V9L2ZhaWxlZC1yZWNpcGVzLmxvZworCitpZiBbICIke1JFU1VMVH0iICE9ICIwIiBdIDsgdGhlbgorICBlY2hvICJFUlJPUjogJHtSRVNVTFR9IGlzc3VlcyB3ZXJlIGZvdW5kIGluIHRoZXNlIHJlY2lwZXM6IGBjYXQgJHtPVVRQVVRfQkFTRX0vZmFpbGVkLXJlY2lwZXMubG9nIHwgeGFyZ3NgIgorZmkKKworZWNobyAiSU5GTzogT3V0cHV0IHdyaXR0ZW4gaW46ICR7T1VUUFVUX0JBU0V9IgorZXhpdCAke1JFU1VMVH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy90ZXN0LXJlZXhlYyBiL3lvY3RvLXBva3kvc2NyaXB0cy90ZXN0LXJlZXhlYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZWFhOTZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3Rlc3QtcmVleGVjCkBAIC0wLDAgKzEsMTIzIEBACisjIS9iaW4vYmFzaAorCisjIFRlc3QgU2NyaXB0IGZvciB0YXNrIHJlLWV4ZWN1dGlvbgorIyAKKyMgQ29weXJpZ2h0IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIworIyBERVNDUklQVElPTgorIyBUaGlzIHNjcmlwdCBpcyBpbnRlbmRlZCB0byBhZGRyZXNzIGlzc3VlcyBmb3IgcmUtZXhlY3V0aW9uIG9mIAorIyB0YXNrcy4gVGhlIHRlc3QgcmVzdWx0cyBhcmUgc2F2ZWQgaW4gLi9yZWV4ZWNsb2dzLiBGb3JjZSBidWlsZAorIyBsb2dzIGFyZSBzYXZlZCB3aXRoIHByZWZpeCAiZm9yY2UiLiBCdWlsZCBmYWlsdXJlIGxvZ3MgYXJlIHNhdmVkIHdpdGgKKyMgcHJlZml4ICJmYWlsZWQiLiBMb2cgZmlsZXMgd2l0aCBwcmVmaXggImluaXRpYWwiIGFyZSB1c2VkIHRvIHNhdmUKKyMgaW5pdGlhbCBidWlsZCBsb2dzIGZvciBlYWNoIHJlY2lwZS4gTG9nIGZpbGVzIHdpdGggcHJlZml4ICJjbGVhbiIgYXJlCisjIHVzZWQgdG8gc2F2ZSBsb2dzIG9mIGNsZWFuIHRhc2sgYWZ0ZXIgdGVzdGluZyBmb3IgYSByZWNpcGUgaXMgZmluaXNoZWQuCisjCisKK3RhcmdldHM9YGJpdGJha2UgLXMgfCBjdXQgLWQgIiAiIC1mIDFgCisKK0xPR1M9Li9yZWV4ZWNsb2dzCisKK21rZGlyIC1wICRMT0dTCisKKyMgQ2xlYXIgc3N0YXRlIGZpbGVzIGZvciBzcGVjaWZpZWQgcmVjaXBlCitmdW5jdGlvbiBjbGVhcnNzdGF0ZSB7CisJdGFyZ2V0PSQxCisKKwlzc3RhdGVfZGlyPWBiaXRiYWtlICR0YXJnZXQgLWUgfCBncmVwICJeU1NUQVRFX0RJUiIgfCBjdXQgLWQgIlwiIiAtZiAyYAorCXNzdGF0ZV9wa2dzcGVjPWBiaXRiYWtlICR0YXJnZXQgLWUgfCBncmVwICJeU1NUQVRFX1BLR1NQRUMiIHwgY3V0IC1kICJcIiIgLWYgMmAKKwlzc3Rhc2tzPWBiaXRiYWtlICR0YXJnZXQgLWUgfCBncmVwICJeU1NUQVRFVEFTS1MiIHwgY3V0IC1kICJcIiIgLWYgMmAKKworCWZvciBzc3Rhc2sgaW4gJHNzdGFza3MKKwlkbworCQlzc3Rhc2s9JHtzc3Rhc2s6M30KKwkJY2FzZSAkc3N0YXNrIGluCisJCQlwb3B1bGF0ZV9zeXNyb290KSBzc3Rhc2s9InBvcHVsYXRlLXN5c3Jvb3QiCisJCQk7OworCQkJcG9wdWxhdGVfbGljKSBzc3Rhc2s9InBvcHVsYXRlLWxpYyIKKwkJCTs7CisJCQlwYWNrYWdlX3dyaXRlX2lwaykgc3N0YXNrPSJkZXBsb3ktaXBrIgorCQkJOzsKKwkJCXBhY2thZ2Vfd3JpdGVfZGViKSBzc3Rhc2s9ImRlcGxveS1kZWIiCisJCQk7OworCQkJcGFja2FnZV93cml0ZV9ycG0pIHNzdGFzaz0iZGVwbG95LXJwbSIKKwkJCTs7CisJCQlwYWNrYWdlKSBzc3Rhc2s9InBhY2thZ2UiCisJCQk7OworCQkJZGVwbG95KSBzc3Rhc2s9ImRlcGxveSIKKwkJCTs7CisJCQkqKQorCQkJOzsKKwkJZXNhYworCisJCWVjaG8gIlJlbW92aW5nICR7c3N0YXRlX2Rpcn0vJHtzc3RhdGVfcGtnc3BlY30qXyR7c3N0YXNrfS50Z3oqIGZvciAkdGFyZ2V0IgorCQlybSAtcmYgJHtzc3RhdGVfZGlyfS8ke3NzdGF0ZV9wa2dzcGVjfSpfJHtzc3Rhc2t9LnRneioKKwlkb25lCit9CisKKyMgRnVuY3Rpb24gdG8gcmUtZXhlY3V0ZSBzcGVjaWZpZWQgdGFzayBvZiByZWNpcGUKK2Z1bmN0aW9uIHRlc3RpdCB7CisJdGFyZ2V0PSQxCisJdGFzaz0kMgorCisJdGFzaz1gZWNobyAkdGFzayB8IHNlZCAncy9fc2V0c2NlbmUvLydgCisKKwlpZiBbIC1mICRMT0dTL2ZvcmNlLiR0YXJnZXQuJHRhc2sgXTsgdGhlbgorCQlyZXR1cm4KKwlmaQorCisJY2FzZSAkdGFzayBpbgorCQljbGVhbnxidWlsZHxjbGVhbnNzdGF0ZXxjbGVhbmFsbHxwYWNrYWdlfGNsZWFuc3N0YXRlMnxwYWNrYWdlX3dyaXRlfHBhY2thZ2Vfd3JpdGVfaXBrfHBhY2thZ2Vfd3JpdGVfcnBtfHBhY2thZ2Vfd3JpdGVfZGVifGZldGNofHBvcHVsYXRlX2xpYykgcmV0dXJuOzsKKwkJZmV0Y2hhbGx8ZGV2c2hlbGx8YnVpbGRhbGx8bGlzdHRhc2tzfGNoZWNrdXJpfGNoZWNrdXJpYWxsKSByZXR1cm47OworCWVzYWMKKworCWVjaG8gIkF0dGVtcHRpbmcgdGFyZ2V0ICR0YXJnZXQsIHRhc2sgJHRhc2siCisJZWNobyAiSW5pdGlhbCBidWlsZCIKKwliaXRiYWtlICR0YXJnZXQgLWMgY2xlYW5zc3RhdGUgPiAkTE9HUy9pbml0aWFsLiR0YXJnZXQuJHRhc2sKKwliaXRiYWtlICR0YXJnZXQgPj4gJExPR1MvaW5pdGlhbC4kdGFyZ2V0LiR0YXNrCisJY2xlYXJzc3RhdGUgJHRhcmdldCA+PiAkTE9HUy9pbml0aWFsLiR0YXJnZXQuJHRhc2sKKwllY2hvICJSZS1leGVjdXRpb24gYnVpbGQiCisJYml0YmFrZSAkdGFyZ2V0IC1jICR0YXNrIC1mICA+ICRMT0dTL2ZvcmNlLiR0YXJnZXQuJHRhc2sKKwlpZiBbICIkPyIgIT0gMCBdOyB0aGVuCisJCWVjaG8gIkZBSUxVUkUgZm9yICR0YXJnZXQgJHRhc2siCisJCWNwICRMT0dTL2ZvcmNlLiR0YXJnZXQuJHRhc2sgJExPR1MvZmFpbGVkLiR0YXJnZXQuJHRhc2sKKwkJYml0YmFrZSAkdGFyZ2V0IC1jIGNsZWFuID4gJExPR1MvY2xlYW4uJHRhcmdldC4kdGFzaworCWVsc2UKKwkJYml0YmFrZSAkdGFyZ2V0ID4+ICRMT0dTL2ZvcmNlLiR0YXJnZXQuJHRhc2sKKwkJaWYgWyAiJD8iICE9IDAgXTsgdGhlbgorCQkJZWNobyAiRkFJTFVSRTIgZm9yICR0YXJnZXQgJHRhc2siCisJCQljcCAkTE9HUy9mb3JjZS4kdGFyZ2V0LiR0YXNrICRMT0dTL2ZhaWxlZC4kdGFyZ2V0LiR0YXNrCisJCQliaXRiYWtlICR0YXJnZXQgLWMgY2xlYW4gPiAkTE9HUy9jbGVhbi4kdGFyZ2V0LiR0YXNrCisJCWZpCisJZmkKKwllY2hvICJEb25lIgorfQorCisjIEdvIHRocm91Z2ggdGhlIHJlY2lwZSBsaXN0IGFuZCB0aGVzZSByZWNpcGVzJyB0YXNrIGxpc3QKKyMgVGhlbiByZS1leGVjdXRlIHRoZW0KK2ZvciB0YXJnZXQgaW4gJHRhcmdldHM7IGRvCisJIyBSZW1vdmUgbG9nIG1lc3NhZ2VzIGZyb20gYml0YmFrZSBvdXRwdXQKKwljYXNlICR0YXJnZXQgaW4KKwkJU3VtbWFyeSp8V0FSTklORyp8TG9hZGluZyp8TG9hZGVkKnxQYWNrYWdlKnw9PT09PSopIGNvbnRpbnVlOzsKKwllc2FjCisJdGFza3M9YGJpdGJha2UgJHRhcmdldCAtYyBsaXN0dGFza3MgfCBncmVwIF5kb18gfCBzZWQgcy9kb18vL2AKKwlmb3IgdGFzayBpbiAkdGFza3M7IGRvCisJCXRlc3RpdCAkdGFyZ2V0ICR0YXNrCisJZG9uZQorZG9uZQorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy90ZXN0LXJlbW90ZS1pbWFnZSBiL3lvY3RvLXBva3kvc2NyaXB0cy90ZXN0LXJlbW90ZS1pbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mM2E0NGViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3Rlc3QtcmVtb3RlLWltYWdlCkBAIC0wLDAgKzEsMzYwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBzY3JpcHQgaXMgdXNlZCB0byB0ZXN0IHB1YmxpYyBhdXRvYnVpbGRlciBpbWFnZXMgb24gcmVtb3RlIGhhcmR3YXJlLgorIyBUaGUgc2NyaXB0IGlzIGNhbGxlZCBmcm9tIGEgbWFjaGluZSB0aGF0IGlzIGFibGUgZG93bmxvYWQgdGhlIGltYWdlcyBmcm9tIHRoZSByZW1vdGUgaW1hZ2VzIHJlcG9zaXRvcnkgYW5kIHRvIGNvbm5lY3QgdG8gdGhlIHRlc3QgaGFyZHdhcmUuCisjCisjIHRlc3QtcmVtb3RlLWltYWdlIC0taW1hZ2UtdHlwZSBjb3JlLWltYWdlLXNhdG8gLS1yZXBvLWxpbmsgaHR0cDovLzE5Mi4xNjguMTAuMi9pbWFnZXMgLS1yZXF1aXJlZC1wYWNrYWdlcyBycG0gcHNwbGFzaAorIworIyBUcmFuc2xhdGlvbjogQnVpbGQgdGhlICdycG0nIGFuZCAncHNsYXNoJyBwYWNrYWdlcyBhbmQgdGVzdCBhIHJlbW90ZSBjb3JlLWltYWdlLXNhdG8gaW1hZ2UgdXNpbmcgdGhlIGh0dHA6Ly8xOTIuMTY4LjEwLjIvaW1hZ2VzIHJlcG9zaXRvcnkuCisjCisjIFlvdSBjYW4gYWxzbyB1c2UgdGhlICctaCcgb3B0aW9uIHRvIHNlZSBzb21lIGhlbHAgaW5mb3JtYXRpb24uCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHNodXRpbAorZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCisKKyMgQWRkIHBhdGggdG8gc2NyaXB0cy9saWIgaW4gc3lzLnBhdGg7CitzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpKQorbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKK3N5cy5wYXRoID0gc3lzLnBhdGggKyBbbGliX3BhdGhdCisKK2ltcG9ydCBzY3JpcHRwYXRoCisKKyMgQWRkIG1ldGEvbGliIHRvIHN5cy5wYXRoCitzY3JpcHRwYXRoLmFkZF9vZV9saWJfcGF0aCgpCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyCisKKyMgQWRkIGFsbCBsaWIgcGF0aHMgcmVsYXRpdmUgdG8gQkJQQVRIIHRvIHN5cy5wYXRoOyB0aGlzIGlzIHVzZWQgdG8gZmluZCBhbmQgaW1wb3J0IHRoZSB0YXJnZXQgY29udHJvbGxlcnMuCitmb3IgcGF0aCBpbiBnZXRfYmJfdmFyKCdCQlBBVEgnKS5zcGxpdCgiOiIpOgorICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHBhdGgsICdsaWInKSkpCisKKyMgSW4gb3JkZXIgdG8gaW1wb3J0IG1vZHVsZXMgdGhhdCBjb250YWluIHRhcmdldCBjb250cm9sbGVycywgd2UgbmVlZCB0aGUgYml0YmFrZSBsaWJyYXJpZXMgaW4gc3lzLnBhdGggLgorYml0YmFrZXBhdGggPSBzY3JpcHRwYXRoLmFkZF9iaXRiYWtlX2xpYl9wYXRoKCkKK2lmIG5vdCBiaXRiYWtlcGF0aDoKKyAgICBzeXMuc3RkZXJyLndyaXRlKCJVbmFibGUgdG8gZmluZCBiaXRiYWtlIGJ5IHNlYXJjaGluZyBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoaXMgc2NyaXB0IG9yIFBBVEhcbiIpCisgICAgc3lzLmV4aXQoMSkKKworIyBjcmVhdGUgYSBsb2dnZXIKK2RlZiBsb2dnZXJfY3JlYXRlKCk6CisgICAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2h3YXV0bycpCisgICAgbG9nLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisKKyAgICBmaCA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoZmlsZW5hbWU9J2h3YXV0by5sb2cnLCBtb2RlPSd3JykKKyAgICBmaC5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorCisgICAgY2ggPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZG91dCkKKyAgICBjaC5zZXRMZXZlbChsb2dnaW5nLklORk8pCisKKyAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcignJShhc2N0aW1lKXMgLSAlKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcycpCisgICAgZmguc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICBjaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorCisgICAgbG9nLmFkZEhhbmRsZXIoZmgpCisgICAgbG9nLmFkZEhhbmRsZXIoY2gpCisKKyAgICByZXR1cm4gbG9nCisKKyMgaW5zdGFudGlhdGUgdGhlIGxvZ2dlcgorbG9nID0gbG9nZ2VyX2NyZWF0ZSgpCisKKworIyBEZWZpbmUgYW5kIHJldHVybiB0aGUgYXJndW1lbnRzIHBhcnNlciBmb3IgdGhlIHNjcmlwdAorZGVmIGdldF9hcmdzX3BhcnNlcigpOgorICAgIGRlc2NyaXB0aW9uID0gIlRoaXMgc2NyaXB0IGlzIHVzZWQgdG8gcnVuIGF1dG9tYXRlZCBydW50aW1lIHRlc3RzIHVzaW5nIHJlbW90ZWx5IHB1Ymxpc2hlZCBpbWFnZSBmaWxlcy4gWW91IHNob3VsZCBwcmVwYXJlIHRoZSBidWlsZCBlbnZpcm9ubWVudCBqdXN0IGxpa2UgYnVpbGRpbmcgbG9jYWwgaW1hZ2VzIGFuZCBydW5uaW5nIHRoZSB0ZXN0cy4iCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249ZGVzY3JpcHRpb24pCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1pbWFnZS10eXBlcycsIHJlcXVpcmVkPVRydWUsIGFjdGlvbj0ic3RvcmUiLCBuYXJncz0nKicsIGRlc3Q9ImltYWdlX3R5cGVzIiwgZGVmYXVsdD1Ob25lLCBoZWxwPSdUaGUgaW1hZ2UgdHlwZXMgdG8gdGVzdChleDogY29yZS1pbWFnZS1taW5pbWFsKS4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcmVwby1saW5rJywgcmVxdWlyZWQ9VHJ1ZSwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9c3RyLCBkZXN0PSJyZXBvX2xpbmsiLCBkZWZhdWx0PU5vbmUsIGhlbHA9J1RoZSBsaW5rIHRvIHRoZSByZW1vdGUgaW1hZ2VzIHJlcG9zaXRvcnkuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJlcXVpcmVkLXBhY2thZ2VzJywgcmVxdWlyZWQ9RmFsc2UsIGFjdGlvbj0ic3RvcmUiLCBuYXJncz0nKicsIGRlc3Q9InJlcXVpcmVkX3BhY2thZ2VzIiwgZGVmYXVsdD1Ob25lLCBoZWxwPSdSZXF1aXJlZCBwYWNrYWdlcyBmb3IgdGhlIHRlc3RzLiBUaGV5IHdpbGwgYmUgYnVpbHQgYmVmb3JlIHRoZSB0ZXN0aW5nIGJlZ2lucy4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdGFyZ2V0cHJvZmlsZScsIHJlcXVpcmVkPUZhbHNlLCBhY3Rpb249InN0b3JlIiwgbmFyZ3M9MSwgZGVzdD0idGFyZ2V0cHJvZmlsZSIsIGRlZmF1bHQ9J0F1dG9UYXJnZXRQcm9maWxlJywgaGVscD0nVGhlIHRhcmdldCBwcm9maWxlIHRvIGJlIHVzZWQuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJlcG9wcm9maWxlJywgcmVxdWlyZWQ9RmFsc2UsIGFjdGlvbj0ic3RvcmUiLCBuYXJncz0xLCBkZXN0PSJyZXBvcHJvZmlsZSIsIGRlZmF1bHQ9J1B1YmxpY0FCJywgaGVscD0nVGhlIHJlcG8gcHJvZmlsZSB0byBiZSB1c2VkLicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1za2lwLWRvd25sb2FkJywgcmVxdWlyZWQ9RmFsc2UsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InNraXBfZG93bmxvYWQiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSdTa2lwIGRvd25sb2FkaW5nIHRoZSBpbWFnZXMgY29tcGxldGVseS4gVGhpcyBuZWVkcyB0aGUgY29ycmVjdCBmaWxlcyB0byBiZSBwcmVzZW50IGluIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGJ5IHRoZSB0YXJnZXQgcHJvZmlsZS4nKQorICAgIHJldHVybiBwYXJzZXIKKworY2xhc3MgQmFzZVRhcmdldFByb2ZpbGUob2JqZWN0KToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIGRlZmluZXMgdGhlIG1ldGEgcHJvZmlsZSBmb3IgYSBzcGVjaWZpYyB0YXJnZXQgKE1BQ0hJTkUgdHlwZSArIGltYWdlIHR5cGUpLgorICAgICIiIgorCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbWFnZV90eXBlKToKKyAgICAgICAgc2VsZi5pbWFnZV90eXBlID0gaW1hZ2VfdHlwZQorCisgICAgICAgIHNlbGYua2VybmVsX2ZpbGUgPSBOb25lCisgICAgICAgIHNlbGYucm9vdGZzX2ZpbGUgPSBOb25lCisgICAgICAgIHNlbGYubWFuaWZlc3RfZmlsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5leHRyYV9kb3dubG9hZF9maWxlcyA9IFtdICAgICAgICAgICMgRXh0cmEgZmlsZXMgKGZ1bGwgbmFtZSkgdG8gYmUgZG93bmxvYWRlZC4gVGhleSBzaG91bGQgYmUgc2l0dWF0ZWQgaW4gcmVwb19saW5rCisKKyAgICAjIFRoaXMgbWV0aG9kIGlzIHVzZWQgYXMgdGhlIHN0YW5kYXJkIGludGVyZmFjZSB3aXRoIHRoZSB0YXJnZXQgcHJvZmlsZSBjbGFzc2VzLgorICAgICMgSXQgcmV0dXJucyBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBhIGxpc3Qgb2YgZmlsZXMgYW5kIHRoZWlyIG1lYW5pbmcvZGVzY3JpcHRpb24uCisgICAgZGVmIGdldF9maWxlc19kaWN0KHNlbGYpOgorICAgICAgICBmaWxlc19kaWN0ID0ge30KKworICAgICAgICBpZiBzZWxmLmtlcm5lbF9maWxlOgorICAgICAgICAgICAgZmlsZXNfZGljdFsna2VybmVsX2ZpbGUnXSA9IHNlbGYua2VybmVsX2ZpbGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZy5lcnJvcignVGhlIHRhcmdldCBwcm9maWxlIGRpZCBub3Qgc2V0IGEga2VybmVsIGZpbGUuJykKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgaWYgc2VsZi5yb290ZnNfZmlsZToKKyAgICAgICAgICAgIGZpbGVzX2RpY3RbJ3Jvb3Rmc19maWxlJ10gPSBzZWxmLnJvb3Rmc19maWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2cuZXJyb3IoJ1RoZSB0YXJnZXQgcHJvZmlsZSBkaWQgbm90IHNldCBhIHJvb3RmcyBmaWxlLicpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIGlmIHNlbGYubWFuaWZlc3RfZmlsZToKKyAgICAgICAgICAgIGZpbGVzX2RpY3RbJ21hbmlmZXN0X2ZpbGUnXSA9IHNlbGYubWFuaWZlc3RfZmlsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nLmVycm9yKCdUaGUgdGFyZ2V0IHByb2ZpbGUgZGlkIG5vdCBzZXQgYSBtYW5pZmVzdCBmaWxlLicpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIGZvciBpZHgsIGYgaW4gZW51bWVyYXRlKHNlbGYuZXh0cmFfZG93bmxvYWRfZmlsZXMpOgorICAgICAgICAgICAgZmlsZXNfZGljdFsnZXh0cmFfZG93bmxvYWRfZmlsZScgKyBzdHIoaWR4KV0gPSBmCisKKyAgICAgICAgcmV0dXJuIGZpbGVzX2RpY3QKKworY2xhc3MgQXV0b1RhcmdldFByb2ZpbGUoQmFzZVRhcmdldFByb2ZpbGUpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGltYWdlX3R5cGUpOgorICAgICAgICBzdXBlcihBdXRvVGFyZ2V0UHJvZmlsZSwgc2VsZikuX19pbml0X18oaW1hZ2VfdHlwZSkKKyAgICAgICAgc2VsZi5pbWFnZV9uYW1lID0gZ2V0X2JiX3ZhcignSU1BR0VfTElOS19OQU1FJywgdGFyZ2V0PWltYWdlX3R5cGUpCisgICAgICAgIHNlbGYua2VybmVsX3R5cGUgPSBnZXRfYmJfdmFyKCdLRVJORUxfSU1BR0VUWVBFJywgdGFyZ2V0PWltYWdlX3R5cGUpCisgICAgICAgIHNlbGYuY29udHJvbGxlciA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIoKQorCisgICAgICAgIHNlbGYuc2V0X2tlcm5lbF9maWxlKCkKKyAgICAgICAgc2VsZi5zZXRfcm9vdGZzX2ZpbGUoKQorICAgICAgICBzZWxmLnNldF9tYW5pZmVzdF9maWxlKCkKKyAgICAgICAgc2VsZi5zZXRfZXh0cmFfZG93bmxvYWRfZmlsZXMoKQorCisgICAgIyBHZXQgdGhlIGNvbnRyb2xsZXIgb2JqZWN0IHRoYXQgd2lsbCBiZSB1c2VkIGJ5IGJpdGJha2UuCisgICAgZGVmIGdldF9jb250cm9sbGVyKHNlbGYpOgorICAgICAgICBmcm9tIG9lcWEuY29udHJvbGxlcnMudGVzdHRhcmdldGxvYWRlciBpbXBvcnQgVGVzdFRhcmdldExvYWRlcgorCisgICAgICAgIHRhcmdldF9jb250cm9sbGVyID0gZ2V0X2JiX3ZhcignVEVTVF9UQVJHRVQnKQorICAgICAgICBiYnBhdGggPSBnZXRfYmJfdmFyKCdCQlBBVEgnKS5zcGxpdCgnOicpCisKKyAgICAgICAgaWYgdGFyZ2V0X2NvbnRyb2xsZXIgPT0gInFlbXUiOgorICAgICAgICAgICAgZnJvbSBvZXFhLnRhcmdldGNvbnRyb2wgaW1wb3J0IFFlbXVUYXJnZXQKKyAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBRZW11VGFyZ2V0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0ZXN0dGFyZ2V0bG9hZGVyID0gVGVzdFRhcmdldExvYWRlcigpCisgICAgICAgICAgICBjb250cm9sbGVyID0gdGVzdHRhcmdldGxvYWRlci5nZXRfY29udHJvbGxlcl9tb2R1bGUodGFyZ2V0X2NvbnRyb2xsZXIsIGJicGF0aCkKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIKKworICAgIGRlZiBzZXRfa2VybmVsX2ZpbGUoc2VsZik6CisgICAgICAgIHBvc3Rjb25maWcgPSAiUUFfR0VUX01BQ0hJTkUgPSBcIiR7TUFDSElORX1cIiIKKyAgICAgICAgbWFjaGluZSA9IGdldF9iYl92YXIoJ1FBX0dFVF9NQUNISU5FJywgcG9zdGNvbmZpZz1wb3N0Y29uZmlnKQorICAgICAgICBzZWxmLmtlcm5lbF9maWxlID0gc2VsZi5rZXJuZWxfdHlwZSArICctJyArIG1hY2hpbmUgKyAnLmJpbicKKworICAgIGRlZiBzZXRfcm9vdGZzX2ZpbGUoc2VsZik6CisgICAgICAgIGltYWdlX2ZzdHlwZXMgPSBnZXRfYmJfdmFyKCdJTUFHRV9GU1RZUEVTJykuc3BsaXQoJyAnKQorICAgICAgICAjIEdldCBhIG1hdGNoaW5nIHZhbHVlIGJldHdlZW4gdGFyZ2V0J3MgSU1BR0VfRlNUWVBFUyBhbmQgdGhlIGltYWdlIGZzdHlwZXMgc3VwcG9lcnRlZCBieSB0aGUgdGFyZ2V0IGNvbnRyb2xsZXIuCisgICAgICAgIGZzdHlwZSA9IHNlbGYuY29udHJvbGxlci5tYXRjaF9pbWFnZV9mc3R5cGUoZD1Ob25lLCBpbWFnZV9mc3R5cGVzPWltYWdlX2ZzdHlwZXMpCisgICAgICAgIGlmIGZzdHlwZToKKyAgICAgICAgICAgIHNlbGYucm9vdGZzX2ZpbGUgPSBzZWxmLmltYWdlX25hbWUgKyAnLicgKyBmc3R5cGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZy5lcnJvcigiQ291bGQgbm90IGdldCBhIGNvbXBhdGlibGUgaW1hZ2UgZnN0eXBlLiBDaGVjayB0aGF0IElNQUdFX0ZTVFlQRVMgYW5kIHRoZSB0YXJnZXQgY29udHJvbGxlcidzIHN1cHBvcnRlZF9pbWFnZV9mc3R5cGVzIGZpbGVkcyBoYXZlIGNvbW1vbiB2YWx1ZXMuIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBkZWYgc2V0X21hbmlmZXN0X2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYubWFuaWZlc3RfZmlsZSA9IHNlbGYuaW1hZ2VfbmFtZSArICIubWFuaWZlc3QiCisKKyAgICBkZWYgc2V0X2V4dHJhX2Rvd25sb2FkX2ZpbGVzKHNlbGYpOgorICAgICAgICBzZWxmLmV4dHJhX2Rvd25sb2FkX2ZpbGVzID0gc2VsZi5nZXRfY29udHJvbGxlcl9leHRyYV9maWxlcygpCisgICAgICAgIGlmIG5vdCBzZWxmLmV4dHJhX2Rvd25sb2FkX2ZpbGVzOgorICAgICAgICAgICAgc2VsZi5leHRyYV9kb3dubG9hZF9maWxlcyA9IFtdCisKKyAgICBkZWYgZ2V0X2NvbnRyb2xsZXJfZXh0cmFfZmlsZXMoc2VsZik6CisgICAgICAgIGNvbnRyb2xsZXIgPSBzZWxmLmdldF9jb250cm9sbGVyKCkKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZ2V0X2V4dHJhX2ZpbGVzKCkKKworCitjbGFzcyBCYXNlUmVwb1Byb2ZpbGUob2JqZWN0KToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIGRlZmluZXMgdGhlIG1ldGEgcHJvZmlsZSBmb3IgYW4gaW1hZ2VzIHJlcG9zaXRvcnkuCisgICAgIiIiCisKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcG9saW5rLCBsb2NhbGRpcik6CisgICAgICAgIHNlbGYubG9jYWxkaXIgPSBsb2NhbGRpcgorICAgICAgICBzZWxmLnJlcG9saW5rID0gcmVwb2xpbmsKKworICAgICMgVGhlIGZvbGxvd2luZyBhYnN0cmFjdCBtZXRob2RzIGFyZSB0aGUgaW50ZXJmYWNlcyB0byB0aGUgcmVwb3NpdG9yeSBwcm9maWxlIGNsYXNzZXMgZGVyaXZlZCBmcm9tIHRoaXMgYWJzdHJhY3QgY2xhc3MuCisKKyAgICAjIFRoaXMgbWV0aG9kIHNob3VsZCBjaGVjayB0aGUgZmlsZSBuYW1lZCAnZmlsZV9uYW1lJyBpZiBpdCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgdXBzdHJlYW0gb25lLgorICAgICMgU2hvdWxkIHJldHVybiBGYWxzZSBpZiB0aGUgaW1hZ2UgaXMgdGhlIHNhbWUgYXMgdGhlIHVwc3RyZWFtIGFuZCBUcnVlIGlmIGl0IGRpZmZlcnMuCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGNoZWNrX29sZF9maWxlKHNlbGYsIGZpbGVfbmFtZSk6CisgICAgICAgIHBhc3MKKworICAgICMgVGhpcyBtZXRob2Qgc2hvdWxkIGZldGNoIGZpbGVfbmFtZSBhbmQgY3JlYXRlIGEgc3ltbGluayB0byBsb2NhbG5hbWUgaWYgc2V0LgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBmZXRjaChzZWxmLCBmaWxlX25hbWUsIGxvY2FsbmFtZT1Ob25lKToKKyAgICAgICAgcGFzcworCitjbGFzcyBQdWJsaWNBQihCYXNlUmVwb1Byb2ZpbGUpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcG9saW5rLCBsb2NhbGRpcj1Ob25lKToKKyAgICAgICAgc3VwZXIoUHVibGljQUIsIHNlbGYpLl9faW5pdF9fKHJlcG9saW5rLCBsb2NhbGRpcikKKyAgICAgICAgaWYgbG9jYWxkaXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYubG9jYWxkaXIgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvblsnQlVJTERESVInXSwgJ1B1YmxpY0FCTWlycm9yJykKKworICAgICMgTm90IHlldCBpbXBsZW1lbnRlZC4gQWx3YXlzIHJldHVybmluZyBUcnVlLgorICAgIGRlZiBjaGVja19vbGRfZmlsZShzZWxmLCBmaWxlX25hbWUpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGdldF9yZXBvX3BhdGgoc2VsZik6CisgICAgICAgIHBhdGggPSAnL21hY2hpbmVzLycKKworICAgICAgICBwb3N0Y29uZmlnID0gIlFBX0dFVF9NQUNISU5FID0gXCIke01BQ0hJTkV9XCIiCisgICAgICAgIG1hY2hpbmUgPSBnZXRfYmJfdmFyKCdRQV9HRVRfTUFDSElORScsIHBvc3Rjb25maWc9cG9zdGNvbmZpZykKKyAgICAgICAgaWYgJ3FlbXUnIGluIG1hY2hpbmU6CisgICAgICAgICAgICBwYXRoICs9ICdxZW11LycKKworICAgICAgICBwb3N0Y29uZmlnID0gIlFBX0dFVF9ESVNUUk8gPSBcIiR7RElTVFJPfVwiIgorICAgICAgICBkaXN0cm8gPSBnZXRfYmJfdmFyKCdRQV9HRVRfRElTVFJPJywgcG9zdGNvbmZpZz1wb3N0Y29uZmlnKQorICAgICAgICBwYXRoICs9IGRpc3Ryby5yZXBsYWNlKCdwb2t5JywgbWFjaGluZSkgKyAnLycKKyAgICAgICAgcmV0dXJuIHBhdGgKKworCisgICAgZGVmIGZldGNoKHNlbGYsIGZpbGVfbmFtZSwgbG9jYWxuYW1lPU5vbmUpOgorICAgICAgICByZXBvX3BhdGggPSBzZWxmLmdldF9yZXBvX3BhdGgoKQorICAgICAgICBsaW5rID0gc2VsZi5yZXBvbGluayArIHJlcG9fcGF0aCArIGZpbGVfbmFtZQorCisgICAgICAgIHNlbGYud2dldChsaW5rLCBzZWxmLmxvY2FsZGlyLCBsb2NhbG5hbWUpCisKKyAgICBkZWYgd2dldChzZWxmLCBsaW5rLCBsb2NhbGRpciwgbG9jYWxuYW1lPU5vbmUsIGV4dHJhYXJncz1Ob25lKToKKyAgICAgICAgd2dldF9jbWQgPSAnL3Vzci9iaW4vZW52IHdnZXQgLXQgMiAtVCAzMCAtbnYgLS1wYXNzaXZlLWZ0cCAtLW5vLWNoZWNrLWNlcnRpZmljYXRlICcKKworICAgICAgICBpZiBsb2NhbG5hbWU6CisgICAgICAgICAgICB3Z2V0X2NtZCArPSAnIC1PICcgKyBsb2NhbG5hbWUgKyAnICcKKworICAgICAgICBpZiBleHRyYWFyZ3M6CisgICAgICAgICAgICB3Z2V0X2NtZCArPSAnICcgKyBleHRyYWFyZ3MgKyAnICcKKworICAgICAgICB3Z2V0X2NtZCArPSAiIC1QICVzICclcyciICUgKGxvY2FsZGlyLCBsaW5rKQorICAgICAgICBydW5DbWQod2dldF9jbWQpCisKK2NsYXNzIEh3QXV0bygpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGltYWdlX3R5cGVzLCByZXBvbGluaywgcmVxdWlyZWRfcGFja2FnZXMsIHRhcmdldHByb2ZpbGUsIHJlcG9wcm9maWxlLCBza2lwX2Rvd25sb2FkKToKKyAgICAgICAgbG9nLmluZm8oJ0luaXRpYWxpemluZy4uJykKKyAgICAgICAgc2VsZi5pbWFnZV90eXBlcyA9IGltYWdlX3R5cGVzCisgICAgICAgIHNlbGYucmVwb2xpbmsgPSByZXBvbGluaworICAgICAgICBzZWxmLnJlcXVpcmVkX3BhY2thZ2VzID0gcmVxdWlyZWRfcGFja2FnZXMKKyAgICAgICAgc2VsZi50YXJnZXRwcm9maWxlID0gdGFyZ2V0cHJvZmlsZQorICAgICAgICBzZWxmLnJlcG9wcm9maWxlID0gcmVwb3Byb2ZpbGUKKyAgICAgICAgc2VsZi5za2lwX2Rvd25sb2FkID0gc2tpcF9kb3dubG9hZAorICAgICAgICBzZWxmLnJlcG8gPSBzZWxmLmdldF9yZXBvX3Byb2ZpbGUoc2VsZi5yZXBvbGluaykKKworICAgICMgR2V0IHRoZSByZXBvc2l0b3J5IHByb2ZpbGU7IGZvciBub3cgd2Ugb25seSBsb29rIGluc2lkZSB0aGlzIG1vZHVsZS4KKyAgICBkZWYgZ2V0X3JlcG9fcHJvZmlsZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByZXBvID0gZ2V0YXR0cihzeXMubW9kdWxlc1tfX25hbWVfX10sIHNlbGYucmVwb3Byb2ZpbGUpKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgbG9nLmluZm8oIlVzaW5nIHJlcG8gcHJvZmlsZTogJXMiICUgcmVwby5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICAgIHJldHVybiByZXBvCisKKyAgICAjIEdldCB0aGUgdGFyZ2V0IHByb2ZpbGU7IGZvciBub3cgd2Ugb25seSBsb29rIGluc2lkZSB0aGlzIG1vZHVsZS4KKyAgICBkZWYgZ2V0X3RhcmdldF9wcm9maWxlKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHRhcmdldCA9IGdldGF0dHIoc3lzLm1vZHVsZXNbX19uYW1lX19dLCBzZWxmLnRhcmdldHByb2ZpbGUpKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgbG9nLmluZm8oIlVzaW5nIHRhcmdldCBwcm9maWxlOiAlcyIgJSB0YXJnZXQuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICByZXR1cm4gdGFyZ2V0CisKKyAgICAjIFJ1biB0aGUgdGVzdGltYWdlIHRhc2sgb24gYSBidWlsZCB3aGlsZSByZWRpcmVjdGluZyBERVBMT1lfRElSX0lNQUdFIHRvIHJlcG8ubG9jYWxkaXIsIHdoZXJlIHRoZSBpbWFnZXMgYXJlIGRvd25sb2FkZWQuCisgICAgZGVmIHJ1blRlc3RpbWFnZUJ1aWxkKHNlbGYsIGltYWdlX3R5cGUpOgorICAgICAgICBsb2cuaW5mbygiUnVubmluZyB0aGUgcnVudGltZSB0ZXN0cyBmb3IgJXMuLiIgJSBpbWFnZV90eXBlKQorICAgICAgICBwb3N0Y29uZmlnID0gIkRFUExPWV9ESVJfSU1BR0UgPSBcIiVzXCIiICUgc2VsZi5yZXBvLmxvY2FsZGlyCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoIiVzIC1jIHRlc3RpbWFnZSIgJSBpbWFnZV90eXBlLCBpZ25vcmVfc3RhdHVzPVRydWUsIHBvc3Rjb25maWc9cG9zdGNvbmZpZykKKyAgICAgICAgdGVzdGltYWdlX3Jlc3VsdHMgPSBmdG9vbHMucmVhZF9maWxlKG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJUIiwgaW1hZ2VfdHlwZSksICJsb2cuZG9fdGVzdGltYWdlIikpCisgICAgICAgIGxvZy5pbmZvKCdSdW50aW1lIHRlc3RzIHJlc3VsdHMgZm9yICVzOicgJSBpbWFnZV90eXBlKQorICAgICAgICBwcmludCB0ZXN0aW1hZ2VfcmVzdWx0cworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAjIFN0YXJ0IHRoZSBwcm9jZWR1cmUhCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5yZXF1aXJlZF9wYWNrYWdlczoKKyAgICAgICAgICAgICMgQnVpbGQgdGhlIHJlcXVpcmVkIHBhY2thZ2VzIGZvciB0aGUgdGVzdHMKKyAgICAgICAgICAgIGxvZy5pbmZvKCJCdWlsZGluZyB0aGUgcmVxdWlyZWQgcGFja2FnZXM6ICVzIC4iICUgJywgJy5qb2luKG1hcChzdHIsIHNlbGYucmVxdWlyZWRfcGFja2FnZXMpKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGJpdGJha2Uoc2VsZi5yZXF1aXJlZF9wYWNrYWdlcywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICAgICAgaWYgcmVzdWx0LnN0YXR1cyAhPSAwOgorICAgICAgICAgICAgICAgIGxvZy5lcnJvcigiQ291bGQgbm90IGJ1aWxkIHJlcXVpcmVkIHBhY2thZ2VzOiAlcy4gT3V0cHV0OiAlcyIgJSAoc2VsZi5yZXF1aXJlZF9wYWNrYWdlcywgcmVzdWx0Lm91dHB1dCkpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICAgICAgIyBCdWlsZCB0aGUgcGFja2FnZSByZXBvc2l0b3J5IG1ldGEgZGF0YS4KKyAgICAgICAgICAgIGxvZy5pbmZvKCJCdWlsZGluZyB0aGUgcGFja2FnZSBpbmRleC4iKQorICAgICAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgicGFja2FnZS1pbmRleCIsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgIT0gMDoKKyAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIkNvdWxkIG5vdCBidWlsZCAncGFja2FnZS1pbmRleCcuIE91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgICMgQ3JlYXRlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciB0aGUgaW1hZ2VzIHRvIGJlIGRvd25sb2FkZWQKKyAgICAgICAgbG9nLmluZm8oIkNyZWF0aW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgJXMiICUgc2VsZi5yZXBvLmxvY2FsZGlyKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5yZXBvLmxvY2FsZGlyKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKHNlbGYucmVwby5sb2NhbGRpcikKKworICAgICAgICAjIEZvciBlYWNoIGltYWdlIHR5cGUsIGRvd25sb2FkIHRoZSBuZWVkZWQgZmlsZXMgYW5kIHJ1biB0aGUgdGVzdHMuCisgICAgICAgIG5vaXNzdWVzZm91bmQgPSBUcnVlCisgICAgICAgIGZvciBpbWFnZV90eXBlIGluIHNlbGYuaW1hZ2VfdHlwZXM6CisgICAgICAgICAgICBpZiBzZWxmLnNraXBfZG93bmxvYWQ6CisgICAgICAgICAgICAgICAgbG9nLmluZm8oIlNraXBwaW5nIGRvd25sb2FkaW5nIHRoZSBpbWFnZXMuLiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRhcmdldCA9IHNlbGYuZ2V0X3RhcmdldF9wcm9maWxlKGltYWdlX3R5cGUpCisgICAgICAgICAgICAgICAgZmlsZXNfZGljdCA9IHRhcmdldC5nZXRfZmlsZXNfZGljdCgpCisgICAgICAgICAgICAgICAgbG9nLmluZm8oIkRvd25sb2FkaW5nIGZpbGVzIGZvciAlcyIgJSBpbWFnZV90eXBlKQorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzX2RpY3Q6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYucmVwby5jaGVja19vbGRfZmlsZShmaWxlc19kaWN0W2ZdKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVwYXRoID0gb3MucGF0aC5qb2luKHNlbGYucmVwby5sb2NhbGRpciwgZmlsZXNfZGljdFtmXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGVwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZmlsZXBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcG8uZmV0Y2goZmlsZXNfZGljdFtmXSkKKworICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5UZXN0aW1hZ2VCdWlsZChpbWFnZV90eXBlKQorICAgICAgICAgICAgaWYgcmVzdWx0LnN0YXR1cyAhPSAwOgorICAgICAgICAgICAgICAgIG5vaXNzdWVzZm91bmQgPSBGYWxzZQorCisgICAgICAgIGlmIG5vaXNzdWVzZm91bmQ6CisgICAgICAgICAgICBsb2cuaW5mbygnRmluaXNoZWQuIE5vIGlzc3VlcyBmb3VuZC4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nLmVycm9yKCdGaW5pc2hlZC4gU29tZSBydW50aW1lIHRlc3RzIGhhdmUgZmFpbGVkLiBSZXR1cm5pbmcgbm9uLTAgc3RhdHVzIGNvZGUuJykKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKworCitkZWYgbWFpbigpOgorCisgICAgcGFyc2VyID0gZ2V0X2FyZ3NfcGFyc2VyKCkKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgaHdhdXRvID0gSHdBdXRvKGltYWdlX3R5cGVzPWFyZ3MuaW1hZ2VfdHlwZXMsIHJlcG9saW5rPWFyZ3MucmVwb19saW5rLCByZXF1aXJlZF9wYWNrYWdlcz1hcmdzLnJlcXVpcmVkX3BhY2thZ2VzLCB0YXJnZXRwcm9maWxlPWFyZ3MudGFyZ2V0cHJvZmlsZSwgcmVwb3Byb2ZpbGU9YXJncy5yZXBvcHJvZmlsZSwgc2tpcF9kb3dubG9hZD1hcmdzLnNraXBfZG93bmxvYWQpCisKKyAgICBod2F1dG8ucnVuKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDUpCisgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3RpbnkvZGlyc2l6ZS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy90aW55L2RpcnNpemUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDBmZjRhYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy90aW55L2RpcnNpemUucHkKQEAgLTAsMCArMSw5MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjCisjCisjIERpc3BsYXkgZGV0YWlscyBvZiB0aGUgcm9vdCBmaWxlc3lzdGVtIHNpemUsIGJyb2tlbiB1cCBieSBkaXJlY3RvcnkuCisjIEFsbG93cyBmb3IgbGltaXRpbmcgYnkgc2l6ZSB0byBmb2N1cyBvbiB0aGUgbGFyZ2VyIGZpbGVzLgorIworIyBBdXRob3I6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdGF0CisKK2NsYXNzIFJlY29yZDoKKyAgICBkZWYgY3JlYXRlKHBhdGgpOgorICAgICAgICByID0gUmVjb3JkKHBhdGgpCisKKyAgICAgICAgcyA9IG9zLmxzdGF0KHBhdGgpCisgICAgICAgIGlmIHN0YXQuU19JU0RJUihzLnN0X21vZGUpOgorICAgICAgICAgICAgZm9yIHAgaW4gb3MubGlzdGRpcihwYXRoKToKKyAgICAgICAgICAgICAgICBwYXRobmFtZSA9IHBhdGggKyAiLyIgKyBwCisgICAgICAgICAgICAgICAgc3MgPSBvcy5sc3RhdChwYXRobmFtZSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdC5TX0lTTE5LKHNzLnN0X21vZGUpOgorICAgICAgICAgICAgICAgICAgICByLnJlY29yZHMuYXBwZW5kKFJlY29yZC5jcmVhdGUocGF0aG5hbWUpKQorICAgICAgICAgICAgICAgICAgICByLnNpemUgKz0gci5yZWNvcmRzWy0xXS5zaXplCisgICAgICAgICAgICByLnJlY29yZHMuc29ydChyZXZlcnNlPVRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByLnNpemUgPSBvcy5sc3RhdChwYXRoKS5zdF9zaXplCisKKyAgICAgICAgcmV0dXJuIHIKKyAgICBjcmVhdGUgPSBzdGF0aWNtZXRob2QoY3JlYXRlKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisgICAgICAgIHNlbGYuc2l6ZSA9IDAKKyAgICAgICAgc2VsZi5yZWNvcmRzID0gW10KKworICAgIGRlZiBfX2NtcF9fKHRoaXMsIHRoYXQpOgorICAgICAgICBpZiB0aGF0IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0aGF0LCBSZWNvcmQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCisgICAgICAgIGlmIGxlbih0aGlzLnJlY29yZHMpID4gMCBhbmQgbGVuKHRoYXQucmVjb3JkcykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICBpZiBsZW4odGhpcy5yZWNvcmRzKSA9PSAwIGFuZCBsZW4odGhhdC5yZWNvcmRzKSA+IDA6CisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBpZiB0aGlzLnNpemUgPCB0aGF0LnNpemU6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgaWYgdGhpcy5zaXplID4gdGhhdC5zaXplOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBzaG93KHNlbGYsIG1pbnNpemUpOgorICAgICAgICB0b3RhbCA9IDAKKyAgICAgICAgaWYgc2VsZi5zaXplIDw9IG1pbnNpemU6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBwcmludCAiJTEwZCAlcyIgJSAoc2VsZi5zaXplLCBzZWxmLnBhdGgpCisgICAgICAgIGZvciByIGluIHNlbGYucmVjb3JkczoKKyAgICAgICAgICAgIHRvdGFsICs9IHIuc2hvdyhtaW5zaXplKQorICAgICAgICBpZiBsZW4oc2VsZi5yZWNvcmRzKSA9PSAwOgorICAgICAgICAgICAgdG90YWwgPSBzZWxmLnNpemUKKyAgICAgICAgcmV0dXJuIHRvdGFsCisKKworZGVmIG1haW4oKToKKyAgICBtaW5zaXplID0gMAorICAgIGlmIGxlbihzeXMuYXJndikgPT0gMjoKKyAgICAgICAgbWluc2l6ZSA9IGludChzeXMuYXJndlsxXSkKKyAgICByb290ZnMgPSBSZWNvcmQuY3JlYXRlKCIuIikKKyAgICB0b3RhbCA9IHJvb3Rmcy5zaG93KG1pbnNpemUpCisgICAgcHJpbnQgIkRpc3BsYXllZCAlZC8lZCBieXRlcyAoJS4yZiUlKSIgJSBcCisgICAgICAgICAgKHRvdGFsLCByb290ZnMuc2l6ZSwgMTAwICogZmxvYXQodG90YWwpIC8gcm9vdGZzLnNpemUpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy90aW55L2tzaXplLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL3Rpbnkva3NpemUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDAwNmYyZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy90aW55L2tzaXplLnB5CkBAIC0wLDAgKzEsMTY1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKyMKKyMgRGlzcGxheSBkZXRhaWxzIG9mIHRoZSBrZXJuZWwgYnVpbGQgc2l6ZSwgYnJva2VuIHVwIGJ5IGJ1aWx0LWluLm8uIFNvcnQKKyMgdGhlIG9iamVjdHMgYnkgc2l6ZS4gUnVuIGZyb20gdGhlIHRvcCBsZXZlbCBrZXJuZWwgYnVpbGQgZGlyZWN0b3J5LgorIworIyBBdXRob3I6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorIworCitpbXBvcnQgc3lzCitpbXBvcnQgZ2V0b3B0CitpbXBvcnQgb3MKK2Zyb20gc3VicHJvY2VzcyBpbXBvcnQgKgorZnJvbSBzdHJpbmcgaW1wb3J0IGpvaW4KKworCitkZWYgdXNhZ2UoKToKKyAgICBwcm9nID0gb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkKKyAgICBwcmludCAnVXNhZ2U6ICVzIFtPUFRJT05dLi4uJyAlIChwcm9nKQorICAgIHByaW50ICcgIC1kLCAgICAgICAgICAgICAgICAgZGlzcGxheSBhbiBhZGRpdGlvbmFsIGxldmVsIG9mIGRyaXZlcnMgZGV0YWlsJworICAgIHByaW50ICcgIC1oLCAtLWhlbHAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQnCisgICAgcHJpbnQgJycKKyAgICBwcmludCAnUnVuICVzIGZyb20gdGhlIHRvcC1sZXZlbCBMaW51eCBrZXJuZWwgYnVpbGQgZGlyZWN0b3J5LicgJSAocHJvZykKKworCitjbGFzcyBTaXplczoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2xvYik6CisgICAgICAgIHNlbGYudGl0bGUgPSBnbG9iCisgICAgICAgIHAgPSBQb3Blbigic2l6ZSAtdCAiICsgZ2xvYiwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PVBJUEUsIHN0ZGVycj1QSVBFKQorICAgICAgICBvdXRwdXQgPSBwLmNvbW11bmljYXRlKClbMF0uc3BsaXRsaW5lcygpCisgICAgICAgIGlmIGxlbihvdXRwdXQpID4gMjoKKyAgICAgICAgICAgIHNpemVzID0gb3V0cHV0Wy0xXS5zcGxpdCgpWzA6NF0KKyAgICAgICAgICAgIHNlbGYudGV4dCA9IGludChzaXplc1swXSkKKyAgICAgICAgICAgIHNlbGYuZGF0YSA9IGludChzaXplc1sxXSkKKyAgICAgICAgICAgIHNlbGYuYnNzID0gaW50KHNpemVzWzJdKQorICAgICAgICAgICAgc2VsZi50b3RhbCA9IGludChzaXplc1szXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYudGV4dCA9IHNlbGYuZGF0YSA9IHNlbGYuYnNzID0gc2VsZi50b3RhbCA9IDAKKworICAgIGRlZiBzaG93KHNlbGYsIGluZGVudD0iIik6CisgICAgICAgIHByaW50ICIlLTMycyAlMTBkIHwgJTEwZCAlMTBkICUxMGQiICUgXAorICAgICAgICAgICAgICAoaW5kZW50K3NlbGYudGl0bGUsIHNlbGYudG90YWwsIHNlbGYudGV4dCwgc2VsZi5kYXRhLCBzZWxmLmJzcykKKworCitjbGFzcyBSZXBvcnQ6CisgICAgZGVmIGNyZWF0ZShmaWxlbmFtZSwgdGl0bGUsIHN1Ymdsb2I9Tm9uZSk6CisgICAgICAgIHIgPSBSZXBvcnQoZmlsZW5hbWUsIHRpdGxlKQorICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKGZpbGVuYW1lKQorCisgICAgICAgIHAgPSBQb3BlbigibHMgIiArIHBhdGggKyAiLyoubyB8IGdyZXAgLXYgYnVpbHQtaW4ubyIsCisgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlLCBzdGRvdXQ9UElQRSwgc3RkZXJyPVBJUEUpCisgICAgICAgIGdsb2IgPSBqb2luKHAuY29tbXVuaWNhdGUoKVswXS5zcGxpdGxpbmVzKCkpCisgICAgICAgIG9yZXBvcnQgPSBSZXBvcnQoZ2xvYiwgcGF0aCArICIvKi5vIikKKyAgICAgICAgb3JlcG9ydC5zaXplcy50aXRsZSA9IHBhdGggKyAiLyoubyIKKyAgICAgICAgci5wYXJ0cy5hcHBlbmQob3JlcG9ydCkKKworICAgICAgICBpZiBzdWJnbG9iOgorICAgICAgICAgICAgcCA9IFBvcGVuKCJscyAiICsgc3ViZ2xvYiwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PVBJUEUsIHN0ZGVycj1QSVBFKQorICAgICAgICAgICAgZm9yIGYgaW4gcC5jb21tdW5pY2F0ZSgpWzBdLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKGYpCisgICAgICAgICAgICAgICAgci5wYXJ0cy5hcHBlbmQoUmVwb3J0LmNyZWF0ZShmLCBwYXRoLCBwYXRoICsgIi8qL2J1aWx0LWluLm8iKSkKKyAgICAgICAgICAgIHIucGFydHMuc29ydChyZXZlcnNlPVRydWUpCisKKyAgICAgICAgZm9yIGIgaW4gci5wYXJ0czoKKyAgICAgICAgICAgIHIudG90YWxzWyJ0b3RhbCJdICs9IGIuc2l6ZXMudG90YWwKKyAgICAgICAgICAgIHIudG90YWxzWyJ0ZXh0Il0gKz0gYi5zaXplcy50ZXh0CisgICAgICAgICAgICByLnRvdGFsc1siZGF0YSJdICs9IGIuc2l6ZXMuZGF0YQorICAgICAgICAgICAgci50b3RhbHNbImJzcyJdICs9IGIuc2l6ZXMuYnNzCisKKyAgICAgICAgci5kZWx0YXNbInRvdGFsIl0gPSByLnNpemVzLnRvdGFsIC0gci50b3RhbHNbInRvdGFsIl0KKyAgICAgICAgci5kZWx0YXNbInRleHQiXSA9IHIuc2l6ZXMudGV4dCAtIHIudG90YWxzWyJ0ZXh0Il0KKyAgICAgICAgci5kZWx0YXNbImRhdGEiXSA9IHIuc2l6ZXMuZGF0YSAtIHIudG90YWxzWyJkYXRhIl0KKyAgICAgICAgci5kZWx0YXNbImJzcyJdID0gci5zaXplcy5ic3MgLSByLnRvdGFsc1siYnNzIl0KKyAgICAgICAgcmV0dXJuIHIKKyAgICBjcmVhdGUgPSBzdGF0aWNtZXRob2QoY3JlYXRlKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdsb2IsIHRpdGxlKToKKyAgICAgICAgc2VsZi5nbG9iID0gZ2xvYgorICAgICAgICBzZWxmLnRpdGxlID0gdGl0bGUKKyAgICAgICAgc2VsZi5zaXplcyA9IFNpemVzKGdsb2IpCisgICAgICAgIHNlbGYucGFydHMgPSBbXQorICAgICAgICBzZWxmLnRvdGFscyA9IHsidG90YWwiOjAsICJ0ZXh0IjowLCAiZGF0YSI6MCwgImJzcyI6MH0KKyAgICAgICAgc2VsZi5kZWx0YXMgPSB7InRvdGFsIjowLCAidGV4dCI6MCwgImRhdGEiOjAsICJic3MiOjB9CisKKyAgICBkZWYgc2hvdyhzZWxmLCBpbmRlbnQ9IiIpOgorICAgICAgICBydWxlID0gc3RyLmxqdXN0KGluZGVudCwgODAsICctJykKKyAgICAgICAgcHJpbnQgIiUtMzJzICUxMHMgfCAlMTBzICUxMHMgJTEwcyIgJSBcCisgICAgICAgICAgICAgIChpbmRlbnQrc2VsZi50aXRsZSwgInRvdGFsIiwgInRleHQiLCAiZGF0YSIsICJic3MiKQorICAgICAgICBwcmludCBydWxlCisgICAgICAgIHNlbGYuc2l6ZXMuc2hvdyhpbmRlbnQpCisgICAgICAgIHByaW50IHJ1bGUKKyAgICAgICAgZm9yIHAgaW4gc2VsZi5wYXJ0czoKKyAgICAgICAgICAgIGlmIHAuc2l6ZXMudG90YWwgPiAwOgorICAgICAgICAgICAgICAgIHAuc2l6ZXMuc2hvdyhpbmRlbnQpCisgICAgICAgIHByaW50IHJ1bGUKKyAgICAgICAgcHJpbnQgIiUtMzJzICUxMGQgfCAlMTBkICUxMGQgJTEwZCIgJSBcCisgICAgICAgICAgICAgIChpbmRlbnQrInN1bSIsIHNlbGYudG90YWxzWyJ0b3RhbCJdLCBzZWxmLnRvdGFsc1sidGV4dCJdLAorICAgICAgICAgICAgICAgc2VsZi50b3RhbHNbImRhdGEiXSwgc2VsZi50b3RhbHNbImJzcyJdKQorICAgICAgICBwcmludCAiJS0zMnMgJTEwZCB8ICUxMGQgJTEwZCAlMTBkIiAlIFwKKyAgICAgICAgICAgICAgKGluZGVudCsiZGVsdGEiLCBzZWxmLmRlbHRhc1sidG90YWwiXSwgc2VsZi5kZWx0YXNbInRleHQiXSwKKyAgICAgICAgICAgICAgIHNlbGYuZGVsdGFzWyJkYXRhIl0sIHNlbGYuZGVsdGFzWyJic3MiXSkKKyAgICAgICAgcHJpbnQgIlxuIgorCisgICAgZGVmIF9fY21wX18odGhpcywgdGhhdCk6CisgICAgICAgIGlmIHRoYXQgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRoYXQsIFJlcG9ydCk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKKyAgICAgICAgaWYgdGhpcy5zaXplcy50b3RhbCA8IHRoYXQuc2l6ZXMudG90YWw6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgaWYgdGhpcy5zaXplcy50b3RhbCA+IHRoYXQuc2l6ZXMudG90YWw6CisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICByZXR1cm4gMAorCisKK2RlZiBtYWluKCk6CisgICAgdHJ5OgorICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJkaCIsIFsiaGVscCJdKQorICAgIGV4Y2VwdCBnZXRvcHQuR2V0b3B0RXJyb3IsIGVycjoKKyAgICAgICAgcHJpbnQgJyVzJyAlIHN0cihlcnIpCisgICAgICAgIHVzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoMikKKworICAgIGRyaXZlcl9kZXRhaWwgPSBGYWxzZQorICAgIGZvciBvLCBhIGluIG9wdHM6CisgICAgICAgIGlmIG8gPT0gJy1kJzoKKyAgICAgICAgICAgIGRyaXZlcl9kZXRhaWwgPSBUcnVlCisgICAgICAgIGVsaWYgbyBpbiAoJy1oJywgJy0taGVscCcpOgorICAgICAgICAgICAgdXNhZ2UoKQorICAgICAgICAgICAgc3lzLmV4aXQoMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCBGYWxzZSwgInVuaGFuZGxlZCBvcHRpb24iCisKKyAgICBnbG9iID0gImFyY2gvKi9idWlsdC1pbi5vICovYnVpbHQtaW4ubyIKKyAgICB2bWxpbnV4ID0gUmVwb3J0LmNyZWF0ZSgidm1saW51eCIsICAiTGludXggS2VybmVsIiwgZ2xvYikKKworICAgIHZtbGludXguc2hvdygpCisgICAgZm9yIGIgaW4gdm1saW51eC5wYXJ0czoKKyAgICAgICAgaWYgYi50b3RhbHNbInRvdGFsIl0gPiAwIGFuZCBsZW4oYi5wYXJ0cykgPiAxOgorICAgICAgICAgICAgYi5zaG93KCkKKyAgICAgICAgaWYgYi50aXRsZSA9PSAiZHJpdmVycyIgYW5kIGRyaXZlcl9kZXRhaWw6CisgICAgICAgICAgICBmb3IgZCBpbiBiLnBhcnRzOgorICAgICAgICAgICAgICAgIGlmIGQudG90YWxzWyJ0b3RhbCJdID4gMCBhbmQgbGVuKGQucGFydHMpID4gMToKKyAgICAgICAgICAgICAgICAgICAgZC5zaG93KCIgICAgIikKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3dpYyBiL3lvY3RvLXBva3kvc2NyaXB0cy93aWMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2FkMmIxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy93aWMKQEAgLTAsMCArMSwzMjMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OICd3aWMnIGlzIHRoZSBPcGVuRW1iZWRkZWQgSW1hZ2UgQ3JlYXRvciB0aGF0IHVzZXJzIGNhbgorIyB1c2UgdG8gZ2VuZXJhdGUgYm9vdGFibGUgaW1hZ2VzLiAgSW52b2tpbmcgaXQgd2l0aG91dCBhbnkgYXJndW1lbnRzCisjIHdpbGwgZGlzcGxheSBoZWxwIHNjcmVlbnMgZm9yIHRoZSAnd2ljJyBjb21tYW5kIGFuZCBsaXN0IHRoZQorIyBhdmFpbGFibGUgJ3dpYycgc3ViY29tbWFuZHMuICBJbnZva2luZyBhIHN1YmNvbW1hbmQgd2l0aG91dCBhbnkKKyMgYXJndW1lbnRzIHdpbGwgbGlrZXdpc2UgZGlzcGxheSBoZWxwIHNjcmVlbnMgZm9yIHRoZSBzcGVjaWZpZWQKKyMgc3ViY29tbWFuZC4gIFBsZWFzZSB1c2UgdGhhdCBpbnRlcmZhY2UgZm9yIGRldGFpbGVkIGhlbHAuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gbGludXguaW50ZWwuY29tPgorIworCitfX3ZlcnNpb25fXyA9ICIwLjIuMCIKKworIyBQeXRob24gU3RhbmRhcmQgTGlicmFyeSBtb2R1bGVzCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2Zyb20gZGlzdHV0aWxzIGltcG9ydCBzcGF3bgorCisjIEV4dGVybmFsIG1vZHVsZXMKK3NjcmlwdHNfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQorbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKK3N5cy5wYXRoLmFwcGVuZChsaWJfcGF0aCkKKworYml0YmFrZV9leGUgPSBzcGF3bi5maW5kX2V4ZWN1dGFibGUoJ2JpdGJha2UnKQoraWYgYml0YmFrZV9leGU6CisgICAgYml0YmFrZV9wYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShiaXRiYWtlX2V4ZSksICcuLi9saWInKQorICAgIHN5cy5wYXRoLmFwcGVuZChiaXRiYWtlX3BhdGgpCisgICAgZnJvbSBiYiBpbXBvcnQgY29va2VyZGF0YQorICAgIGZyb20gYmIubWFpbiBpbXBvcnQgYml0YmFrZV9tYWluLCBCaXRCYWtlQ29uZmlnUGFyYW1ldGVycworZWxzZToKKyAgICBiaXRiYWtlX21haW4gPSBOb25lCisKK2Zyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGdldF9iaXRiYWtlX3ZhciwgQkJfVkFSUworZnJvbSB3aWMudXRpbHMuZXJyb3JzIGltcG9ydCBXaWNFcnJvcgorZnJvbSB3aWMgaW1wb3J0IGVuZ2luZQorZnJvbSB3aWMgaW1wb3J0IGhlbHAgYXMgaGxwCisKK2RlZiByb290ZnNfZGlyX3RvX2FyZ3Moa3Jvb3Rmc19kaXIpOgorICAgICIiIgorICAgIEdldCBhIHJvb3Rmc19kaXIgZGljdCBhbmQgc2VyaWFsaXplIHRvIHN0cmluZworICAgICIiIgorICAgIHJvb3Rmc19kaXIgPSAnJworICAgIGZvciBrZXksIHZhbCBpbiBrcm9vdGZzX2Rpci5pdGVtcygpOgorICAgICAgICByb290ZnNfZGlyICs9ICcgJworICAgICAgICByb290ZnNfZGlyICs9ICc9Jy5qb2luKFtrZXksIHZhbF0pCisgICAgcmV0dXJuIHJvb3Rmc19kaXIuc3RyaXAoKQorCitkZWYgY2FsbGJhY2tfcm9vdGZzX2RpcihvcHRpb24sIG9wdCwgdmFsdWUsIHBhcnNlcik6CisgICAgIiIiCisgICAgQnVpbGQgYSBkaWN0IHVzaW5nIC0tcm9vdGZzX2RpciBjb25uZWN0aW9uPWRpcgorICAgICIiIgorICAgIGlmIG5vdCB0eXBlKHBhcnNlci52YWx1ZXMucm9vdGZzX2RpcikgaXMgZGljdDoKKyAgICAgICAgcGFyc2VyLnZhbHVlcy5yb290ZnNfZGlyID0gZGljdCgpCisKKyAgICBpZiAnPScgaW4gdmFsdWU6CisgICAgICAgIChrZXksIHJvb3Rmc19kaXIpID0gdmFsdWUuc3BsaXQoJz0nKQorICAgIGVsc2U6CisgICAgICAgIGtleSA9ICdST09URlNfRElSJworICAgICAgICByb290ZnNfZGlyID0gdmFsdWUKKworICAgIHBhcnNlci52YWx1ZXMucm9vdGZzX2RpcltrZXldID0gcm9vdGZzX2RpcgorCitkZWYgd2ljX2NyZWF0ZV9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBpbWFnZSBjcmVhdGlvbi4gIFRoZSByZWFsIHdvcmsgaXMgZG9uZQorICAgIGJ5IGltYWdlLmVuZ2luZS53aWNfY3JlYXRlKCkKKyAgICAiIiIKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9dXNhZ2Vfc3RyKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1vIiwgIi0tb3V0ZGlyIiwgZGVzdD0ib3V0ZGlyIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJuYW1lIG9mIGRpcmVjdG9yeSB0byBjcmVhdGUgaW1hZ2UgaW4iKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItZSIsICItLWltYWdlLW5hbWUiLCBkZXN0PSJpbWFnZV9uYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJuYW1lIG9mIHRoZSBpbWFnZSB0byB1c2UgdGhlIGFydGlmYWN0cyBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJlLmcuIGNvcmUtaW1hZ2Utc2F0byIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1yIiwgIi0tcm9vdGZzLWRpciIsIGRlc3Q9InJvb3Rmc19kaXIiLCB0eXBlPSJzdHJpbmciLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0iY2FsbGJhY2siLCBjYWxsYmFjaz1jYWxsYmFja19yb290ZnNfZGlyLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InBhdGggdG8gdGhlIC9yb290ZnMgZGlyIHRvIHVzZSBhcyB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIi53a3Mgcm9vdGZzIHNvdXJjZSIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1iIiwgIi0tYm9vdGltZy1kaXIiLCBkZXN0PSJib290aW1nX2RpciIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0icGF0aCB0byB0aGUgZGlyIGNvbnRhaW5pbmcgdGhlIGJvb3QgYXJ0aWZhY3RzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIoZS5nLiAvRUZJIG9yIC9zeXNsaW51eCBkaXJzKSB0byB1c2UgYXMgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIud2tzIGJvb3RpbWcgc291cmNlIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWsiLCAiLS1rZXJuZWwtZGlyIiwgZGVzdD0ia2VybmVsX2RpciIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0icGF0aCB0byB0aGUgZGlyIGNvbnRhaW5pbmcgdGhlIGtlcm5lbCB0byB1c2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIHRoZSAud2tzIGJvb3RpbWciKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbiIsICItLW5hdGl2ZS1zeXNyb290IiwgZGVzdD0ibmF0aXZlX3N5c3Jvb3QiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InBhdGggdG8gdGhlIG5hdGl2ZSBzeXNyb290IGNvbnRhaW5pbmcgdGhlIHRvb2xzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byB1c2UgdG8gYnVpbGQgdGhlIGltYWdlIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXAiLCAiLS1za2lwLWJ1aWxkLWNoZWNrIiwgZGVzdD0iYnVpbGRfY2hlY2siLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZWZhdWx0PVRydWUsIGhlbHA9InNraXAgdGhlIGJ1aWxkIGNoZWNrIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWYiLCAiLS1idWlsZC1yb290ZnMiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJidWlsZCByb290ZnMiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYyIsICItLWNvbXByZXNzLXdpdGgiLCBjaG9pY2VzPSgiZ3ppcCIsICJiemlwMiIsICJ4eiIpLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J2NvbXByZXNzb3InLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImNvbXByZXNzIGltYWdlIHdpdGggc3BlY2lmaWVkIGNvbXByZXNzb3IiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdiIsICItLXZhcnMiLCBkZXN0PSd2YXJzX2RpcicsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0iZGlyZWN0b3J5IHdpdGggPGltYWdlPi5lbnYgZmlsZXMgdGhhdCBzdG9yZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiYml0YmFrZSB2YXJpYWJsZXMiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItRCIsICItLWRlYnVnIiwgZGVzdD0iZGVidWciLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9Im91dHB1dCBkZWJ1ZyBpbmZvcm1hdGlvbiIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIG9wdGlvbnMuYnVpbGRfcm9vdGZzIGFuZCBub3QgYml0YmFrZV9tYWluOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJDYW4ndCBidWlsZCByb29mcyBhcyBiaXRiYWtlIGlzIG5vdCBpbiB0aGUgJFBBVEgiKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgbm90IG9wdGlvbnMuaW1hZ2VfbmFtZToKKyAgICAgICAgbWlzc2VkID0gW10KKyAgICAgICAgZm9yIHZhbCwgb3B0IGluIFsob3B0aW9ucy5yb290ZnNfZGlyLCAncm9vdGZzLWRpcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25zLmJvb3RpbWdfZGlyLCAnYm9vdGltZy1kaXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9ucy5rZXJuZWxfZGlyLCAna2VybmVsLWRpcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25zLm5hdGl2ZV9zeXNyb290LCAnbmF0aXZlLXN5c3Jvb3QnKV06CisgICAgICAgICAgICBpZiBub3QgdmFsOgorICAgICAgICAgICAgICAgIG1pc3NlZC5hcHBlbmQob3B0KQorICAgICAgICBpZiBtaXNzZWQ6CisgICAgICAgICAgICBwcmludCAiVGhlIGZvbGxvd2luZyBidWlsZCBhcnRpZmFjdHMgYXJlIG5vdCBzcGVjaWZpZWQ6IgorICAgICAgICAgICAgcHJpbnQgIiAgIiArICIsICIuam9pbihtaXNzZWQpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgb3B0aW9ucy5pbWFnZV9uYW1lOgorICAgICAgICBCQl9WQVJTLmRlZmF1bHRfaW1hZ2UgPSBvcHRpb25zLmltYWdlX25hbWUKKyAgICBlbHNlOgorICAgICAgICBvcHRpb25zLmJ1aWxkX2NoZWNrID0gRmFsc2UKKworICAgIGlmIG9wdGlvbnMudmFyc19kaXI6CisgICAgICAgIEJCX1ZBUlMudmFyc19kaXIgPSBvcHRpb25zLnZhcnNfZGlyCisKKyAgICBpZiBvcHRpb25zLmJ1aWxkX2NoZWNrOgorICAgICAgICBwcmludCAiQ2hlY2tpbmcgYmFzaWMgYnVpbGQgZW52aXJvbm1lbnQuLi4iCisgICAgICAgIGlmIG5vdCBlbmdpbmUudmVyaWZ5X2J1aWxkX2VudigpOgorICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IHZlcmlmeSBidWlsZCBlbnZpcm9ubWVudCwgZXhpdGluZ1xuIgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICJEb25lLlxuIgorCisgICAgYm9vdGltZ19kaXIgPSAiIgorCisgICAgaWYgb3B0aW9ucy5pbWFnZV9uYW1lOgorICAgICAgICBpZiBvcHRpb25zLmJ1aWxkX3Jvb3RmczoKKyAgICAgICAgICAgIGFyZ3YgPSBbImJpdGJha2UiLCBvcHRpb25zLmltYWdlX25hbWVdCisgICAgICAgICAgICBpZiBvcHRpb25zLmRlYnVnOgorICAgICAgICAgICAgICAgIGFyZ3YuYXBwZW5kKCItLWRlYnVnIikKKworICAgICAgICAgICAgcHJpbnQgIkJ1aWxkaW5nIHJvb3Rmcy4uLlxuIgorICAgICAgICAgICAgaWYgYml0YmFrZV9tYWluKEJpdEJha2VDb25maWdQYXJhbWV0ZXJzKGFyZ3YpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlcmRhdGEuQ29va2VyQ29uZmlndXJhdGlvbigpKToKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIHJvb3Rmc19kaXIgPSBnZXRfYml0YmFrZV92YXIoIklNQUdFX1JPT1RGUyIsIG9wdGlvbnMuaW1hZ2VfbmFtZSkKKyAgICAgICAga2VybmVsX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiREVQTE9ZX0RJUl9JTUFHRSIsIG9wdGlvbnMuaW1hZ2VfbmFtZSkKKyAgICAgICAgbmF0aXZlX3N5c3Jvb3QgPSBnZXRfYml0YmFrZV92YXIoIlNUQUdJTkdfRElSX05BVElWRSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaW1hZ2VfbmFtZSkKKyAgICBlbHNlOgorICAgICAgICBpZiBvcHRpb25zLmJ1aWxkX3Jvb3RmczoKKyAgICAgICAgICAgIHByaW50ICJJbWFnZSBuYW1lIGlzIG5vdCBzcGVjaWZpZWQsIGV4aXRpbmcuIChVc2UgLWUvLS1pbWFnZS1uYW1lIHRvIHNwZWNpZnkgaXQpXG4iCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgd2tzX2ZpbGUgPSBhcmdzWzBdCisKKyAgICBpZiBub3Qgd2tzX2ZpbGUuZW5kc3dpdGgoIi53a3MiKToKKyAgICAgICAgd2tzX2ZpbGUgPSBlbmdpbmUuZmluZF9jYW5uZWRfaW1hZ2Uoc2NyaXB0c19wYXRoLCB3a3NfZmlsZSkKKyAgICAgICAgaWYgbm90IHdrc19maWxlOgorICAgICAgICAgICAgcHJpbnQgIk5vIGltYWdlIG5hbWVkICVzIGZvdW5kLCBleGl0aW5nLiAgKFVzZSAnd2ljIGxpc3QgaW1hZ2VzJyAiXAorICAgICAgICAgICAgICAgICAgInRvIGxpc3QgYXZhaWxhYmxlIGltYWdlcywgb3Igc3BlY2lmeSBhIGZ1bGx5LXF1YWxpZmllZCBPRSAiXAorICAgICAgICAgICAgICAgICAgImtpY2tzdGFydCAoLndrcykgZmlsZW5hbWUpXG4iICUgYXJnc1swXQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGltYWdlX291dHB1dF9kaXIgPSAiIgorICAgIGlmIG9wdGlvbnMub3V0ZGlyOgorICAgICAgICBpbWFnZV9vdXRwdXRfZGlyID0gb3B0aW9ucy5vdXRkaXIKKworICAgIGlmIG5vdCBvcHRpb25zLmltYWdlX25hbWU6CisgICAgICAgIHJvb3Rmc19kaXIgPSAnJworICAgICAgICBpZiAnUk9PVEZTX0RJUicgaW4gb3B0aW9ucy5yb290ZnNfZGlyOgorICAgICAgICAgICAgcm9vdGZzX2RpciA9IG9wdGlvbnMucm9vdGZzX2RpclsnUk9PVEZTX0RJUiddCisgICAgICAgIGJvb3RpbWdfZGlyID0gb3B0aW9ucy5ib290aW1nX2RpcgorICAgICAgICBrZXJuZWxfZGlyID0gb3B0aW9ucy5rZXJuZWxfZGlyCisgICAgICAgIG5hdGl2ZV9zeXNyb290ID0gb3B0aW9ucy5uYXRpdmVfc3lzcm9vdAorICAgICAgICBpZiByb290ZnNfZGlyIGFuZCBub3Qgb3MucGF0aC5pc2Rpcihyb290ZnNfZGlyKToKKyAgICAgICAgICAgIHByaW50ICItLXJvb2ZzLWRpciAoLXIpIG5vdCBmb3VuZCwgZXhpdGluZ1xuIgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoYm9vdGltZ19kaXIpOgorICAgICAgICAgICAgcHJpbnQgIi0tYm9vdGltZy1kaXIgKC1iKSBub3QgZm91bmQsIGV4aXRpbmdcbiIKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGtlcm5lbF9kaXIpOgorICAgICAgICAgICAgcHJpbnQgIi0ta2VybmVsLWRpciAoLWspIG5vdCBmb3VuZCwgZXhpdGluZ1xuIgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIobmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAgICAgcHJpbnQgIi0tbmF0aXZlLXN5c3Jvb3QgKC1uKSBub3QgZm91bmQsIGV4aXRpbmdcbiIKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgZWxzZToKKyAgICAgICAgbm90X2ZvdW5kID0gbm90X2ZvdW5kX2RpciA9ICIiCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHJvb3Rmc19kaXIpOgorICAgICAgICAgICAgKG5vdF9mb3VuZCwgbm90X2ZvdW5kX2RpcikgPSAoInJvb3Rmcy1kaXIiLCByb290ZnNfZGlyKQorICAgICAgICBlbGlmIG5vdCBvcy5wYXRoLmlzZGlyKGtlcm5lbF9kaXIpOgorICAgICAgICAgICAgKG5vdF9mb3VuZCwgbm90X2ZvdW5kX2RpcikgPSAoImtlcm5lbC1kaXIiLCBrZXJuZWxfZGlyKQorICAgICAgICBlbGlmIG5vdCBvcy5wYXRoLmlzZGlyKG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgICAgIChub3RfZm91bmQsIG5vdF9mb3VuZF9kaXIpID0gKCJuYXRpdmUtc3lzcm9vdCIsIG5hdGl2ZV9zeXNyb290KQorICAgICAgICBpZiBub3RfZm91bmQ6CisgICAgICAgICAgICBpZiBub3Qgbm90X2ZvdW5kX2RpcjoKKyAgICAgICAgICAgICAgICBub3RfZm91bmRfZGlyID0gIkNvbXBsZXRlbHkgbWlzc2luZyBhcnRpZmFjdCAtIHdyb25nIGltYWdlICgud2tzKSB1c2VkPyIKKyAgICAgICAgICAgIHByaW50ICJCdWlsZCBhcnRpZmFjdHMgbm90IGZvdW5kLCBleGl0aW5nLiIKKyAgICAgICAgICAgIHByaW50ICIgIChQbGVhc2UgY2hlY2sgdGhhdCB0aGUgYnVpbGQgYXJ0aWZhY3RzIGZvciB0aGUgbWFjaGluZSIKKyAgICAgICAgICAgIHByaW50ICIgICBzZWxlY3RlZCBpbiBsb2NhbC5jb25mIGFjdHVhbGx5IGV4aXN0IGFuZCB0aGF0IHRoZXkiCisgICAgICAgICAgICBwcmludCAiICAgYXJlIHRoZSBjb3JyZWN0IGFydGlmYWN0cyBmb3IgdGhlIGltYWdlICgud2tzIGZpbGUpKS5cbiIKKyAgICAgICAgICAgIHByaW50ICJUaGUgYXJ0aWZhY3QgdGhhdCBjb3VsZG4ndCBiZSBmb3VuZCB3YXMgJXM6XG4gICVzIiAlIFwKKyAgICAgICAgICAgICAgICAobm90X2ZvdW5kLCBub3RfZm91bmRfZGlyKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGtyb290ZnNfZGlyID0gb3B0aW9ucy5yb290ZnNfZGlyCisgICAgaWYga3Jvb3Rmc19kaXIgaXMgTm9uZToKKyAgICAgICAga3Jvb3Rmc19kaXIgPSB7fQorICAgICAgICBrcm9vdGZzX2RpclsnUk9PVEZTX0RJUiddID0gcm9vdGZzX2RpcgorCisgICAgcm9vdGZzX2RpciA9IHJvb3Rmc19kaXJfdG9fYXJncyhrcm9vdGZzX2RpcikKKworICAgIHByaW50ICJDcmVhdGluZyBpbWFnZShzKS4uLlxuIgorICAgIGVuZ2luZS53aWNfY3JlYXRlKHdrc19maWxlLCByb290ZnNfZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCwgc2NyaXB0c19wYXRoLCBpbWFnZV9vdXRwdXRfZGlyLAorICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29tcHJlc3Nvciwgb3B0aW9ucy5kZWJ1ZykKKworCitkZWYgd2ljX2xpc3Rfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgbGlzdGluZyBhdmFpbGFibGUgaW1hZ2VzLgorICAgIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSBpbWFnZS5lbmdpbmUud2ljX2xpc3QoKQorICAgICIiIgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT11c2FnZV9zdHIpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpWzFdCisKKyAgICBpZiBub3QgZW5naW5lLndpY19saXN0KGFyZ3MsIHNjcmlwdHNfcGF0aCk6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIkJhZCBsaXN0IGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisKK2RlZiB3aWNfaGVscF90b3BpY19zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBoZWxwLW9ubHkgJ3N1YmNvbW1hbmRzJy4gIFRoaXMgaXMKKyAgICBlc3NlbnRpYWxseSBhIGR1bW15IGNvbW1hbmQgdGhhdCBkb2VzbiBub3RoaW5nIGJ1dCBhbGxvdyB1c2VycyB0bworICAgIHVzZSB0aGUgZXhpc3Rpbmcgc3ViY29tbWFuZCBpbmZyYXN0cnVjdHVyZSB0byBkaXNwbGF5IGhlbHAgb24gYQorICAgIHBhcnRpY3VsYXIgdG9waWMgbm90IGF0dGFjaGVkIHRvIGFueSBwYXJ0aWN1bGFyIHN1YmNvbW1hbmQuCisgICAgIiIiCisgICAgcGFzcworCisKK3dpY19oZWxwX3RvcGljX3VzYWdlID0gIiIiCisiIiIKKworc3ViY29tbWFuZHMgPSB7CisgICAgImNyZWF0ZSI6ICAgIFt3aWNfY3JlYXRlX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICBobHAud2ljX2NyZWF0ZV91c2FnZSwKKyAgICAgICAgICAgICAgICAgIGhscC53aWNfY3JlYXRlX2hlbHBdLAorICAgICJsaXN0IjogICAgICBbd2ljX2xpc3Rfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgIGhscC53aWNfbGlzdF91c2FnZSwKKyAgICAgICAgICAgICAgICAgIGhscC53aWNfbGlzdF9oZWxwXSwKKyAgICAicGx1Z2lucyI6ICAgW3dpY19oZWxwX3RvcGljX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICB3aWNfaGVscF90b3BpY191c2FnZSwKKyAgICAgICAgICAgICAgICAgIGhscC5nZXRfd2ljX3BsdWdpbnNfaGVscF0sCisgICAgIm92ZXJ2aWV3IjogIFt3aWNfaGVscF90b3BpY19zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICAgd2ljX2hlbHBfdG9waWNfdXNhZ2UsCisgICAgICAgICAgICAgICAgICBobHAud2ljX292ZXJ2aWV3X2hlbHBdLAorICAgICJraWNrc3RhcnQiOiBbd2ljX2hlbHBfdG9waWNfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgIHdpY19oZWxwX3RvcGljX3VzYWdlLAorICAgICAgICAgICAgICAgICAgaGxwLndpY19raWNrc3RhcnRfaGVscF0sCit9CisKKworZGVmIHN0YXJ0X2xvZ2dpbmcobG9nbGV2ZWwpOgorICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsbmFtZT0nd2ljLmxvZycsIGZpbGVtb2RlPSd3JywgbGV2ZWw9bG9nbGV2ZWwpCisKKworZGVmIG1haW4oYXJndik6CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHZlcnNpb249IndpYyB2ZXJzaW9uICVzIiAlIF9fdmVyc2lvbl9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZT1obHAud2ljX3VzYWdlKQorCisgICAgcGFyc2VyLmRpc2FibGVfaW50ZXJzcGVyc2VkX2FyZ3MoKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpWzFdCisKKyAgICBpZiBsZW4oYXJncyk6CisgICAgICAgIGlmIGFyZ3NbMF0gPT0gImhlbHAiOgorICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDE6CisgICAgICAgICAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICByZXR1cm4gaGxwLmludm9rZV9zdWJjb21tYW5kKGFyZ3MsIHBhcnNlciwgaGxwLndpY19oZWxwX3VzYWdlLCBzdWJjb21tYW5kcykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0pKQorICAgIGV4Y2VwdCBXaWNFcnJvciBhcyBlcnI6CisgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICJFUlJPUjoiLCBlcnIKKyAgICAgICAgc3lzLmV4aXQoMSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3dpcGUtc3lzcm9vdCBiL3lvY3RvLXBva3kvc2NyaXB0cy93aXBlLXN5c3Jvb3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzIyZDM5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy93aXBlLXN5c3Jvb3QKQEAgLTAsMCArMSw1NCBAQAorIyEgL2Jpbi9zaAorCisjIFdpcGUgb3V0IGFsbCBvZiB0aGUgc3lzcm9vdHMgYW5kIGFsbCBvZiB0aGUgc3RhbXBzIHRoYXQgcG9wdWxhdGVkIGl0LgorIyBBdXRob3I6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisjCisjIENvcHlyaWdodCAoYykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitzZXQgLWUKKworaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisgICAgZWNobyAiV2lwZSBhbGwgc3lzcm9vdHMgYW5kIHN5c3Jvb3QtcmVsYXRlZCBzdGFtcHMgZm9yIHRoZSBjdXJyZW50IGJ1aWxkIGRpcmVjdG9yeS4iID4mMgorICAgIGVjaG8gIlVzYWdlOiAkMCIgPiYyCisgICAgZXhpdCAxCitmaQorCitFTlZTPWBta3RlbXAgLS1zdWZmaXggLXdpcGUtc3lzcm9vdC1lbnZzYAorYml0YmFrZSAtcCAtZSA+ICRFTlZTCisKK2V2YWwgYGdyZXAgLUYgU1NUQVRFX01BTklGRVNUUz0gJEVOVlNgCitldmFsIGBncmVwIC1GIFNUQUdJTkdfRElSPSAkRU5WU2AKK2V2YWwgYGdyZXAgLUYgU1RBTVBTX0RJUj0gJEVOVlNgCitybSAtZiAkRU5WUworCitpZiBbIC16ICIkU1NUQVRFX01BTklGRVNUUyIgLW8gLXogIiRTVEFHSU5HX0RJUiIgLW8gLXogIiRTVEFNUFNfRElSIiBdOyB0aGVuCisgICAgZWNobyAiQ291bGQgbm90IGRldGVybWluZSBTU1RBVEVfTUFOSUZFU1RTL1NUQUdJTkdfRElSL1NUQU1QU19ESVIgZnJvbSBiaXRiYWtlLCBjaGVjayBhYm92ZSBmb3IgZXJyb3JzIgorICAgIGV4aXQgMQorZmkKKworZWNobyAiRGVsZXRpbmcgdGhlIHN5c3Jvb3RzIGluICRTVEFHSU5HX0RJUiwgYW5kIHNlbGVjdGVkIHN0YW1wcyBpbiAkU1NUQVRFX01BTklGRVNUUyBhbmQgJFNUQU1QU19ESVIuIgorCisjIFRoZSBzeXNyb290cyB0aGVtc2VsdmVzCitybSAtcmYgJFNUQUdJTkdfRElSCisKKyMgVGhlIHN0YW1wcyB0aGF0IHNhaWQgdGhlIHN5c3Jvb3Qgd2FzIHBvcHVsYXRlZAorcm0gLXJmICRTVEFNUFNfRElSLyovKi8qLmRvX3BvcHVsYXRlX3N5c3Jvb3QuKgorcm0gLXJmICRTVEFNUFNfRElSLyovKi8qLmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUuKgorcm0gLXJmICRTVEFNUFNfRElSLyovKi8qLmRvX3BhY2thZ2VkYXRhLioKK3JtIC1yZiAkU1RBTVBTX0RJUi8qLyovKi5kb19wYWNrYWdlZGF0YV9zZXRzY2VuZS4qCisKKyMgVGhlIHNzdGF0ZSBtYW5pZmVzdHMKK3JtIC1yZiAkU1NUQVRFX01BTklGRVNUUy9tYW5pZmVzdC0qLnBvcHVsYXRlLXN5c3Jvb3QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy95b2N0by1ic3AgYi95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8tYnNwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQyNjk4NjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8tYnNwCkBAIC0wLDAgKzEsMTU2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyAneW9jdG8tYnNwJyBpcyB0aGUgWW9jdG8gQlNQIFRvb2wgdGhhdCBoZWxwcyB1c2VycyBjcmVhdGUgYSBuZXcKKyMgWW9jdG8gQlNQLiAgSW52b2tpbmcgaXQgd2l0aG91dCBhbnkgYXJndW1lbnRzIHdpbGwgZGlzcGxheSBoZWxwCisjIHNjcmVlbnMgZm9yIHRoZSAneW9jdG8tYnNwJyBjb21tYW5kIGFuZCBsaXN0IHRoZSBhdmFpbGFibGUKKyMgJ3lvY3RvLWJzcCcgc3ViY29tbWFuZHMuICBJbnZva2luZyBhIHN1YmNvbW1hbmQgd2l0aG91dCBhbnkKKyMgYXJndW1lbnRzIHdpbGwgbGlrZXdpc2UgZGlzcGxheSBoZWxwIHNjcmVlbnMgZm9yIHRoZSBzcGVjaWZpZWQKKyMgc3ViY29tbWFuZC4gIFBsZWFzZSB1c2UgdGhhdCBpbnRlcmZhY2UgZm9yIGRldGFpbGVkIGhlbHAuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gaW50ZWwuY29tPgorIworCitfX3ZlcnNpb25fXyA9ICIwLjEuMCIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBsb2dnaW5nCisKK3NjcmlwdHNfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKSkpCitsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworc3lzLnBhdGggPSBzeXMucGF0aCArIFtsaWJfcGF0aF0KKworZnJvbSBic3AuaGVscCBpbXBvcnQgKgorZnJvbSBic3AuZW5naW5lIGltcG9ydCAqCisKKworZGVmIHlvY3RvX2JzcF9jcmVhdGVfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgQlNQIGNyZWF0aW9uLiAgVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5CisgICAgYnNwLmVuZ2luZS55b2N0b19ic3BfY3JlYXRlKCkKKyAgICAiIiIKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLW8iLCAiLS1vdXRkaXIiLCBkZXN0ID0gIm91dGRpciIsIGFjdGlvbiA9ICJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJuYW1lIG9mIEJTUCBkaXIgdG8gY3JlYXRlIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWkiLCAiLS1pbmZpbGUiLCBkZXN0ID0gInByb3BlcnRpZXNfZmlsZSIsIGFjdGlvbiA9ICJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJuYW1lIG9mIGZpbGUgY29udGFpbmluZyB0aGUgdmFsdWVzIGZvciBCU1AgcHJvcGVydGllcyBhcyBhIEpTT04gZmlsZSIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1jIiwgIi0tY29kZWR1bXAiLCBkZXN0ID0gImNvZGVkdW1wIiwgYWN0aW9uID0gInN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBGYWxzZSwgaGVscCA9ICJkdW1wIHRoZSBnZW5lcmF0ZWQgY29kZSB0byBic3BnZW4ub3V0IikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXMiLCAiLS1za2lwLWdpdC1jaGVjayIsIGRlc3QgPSAiZ2l0X2NoZWNrIiwgYWN0aW9uID0gInN0b3JlX2ZhbHNlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gVHJ1ZSwgaGVscCA9ICJza2lwIHRoZSBnaXQgY29ubmVjdGl2aXR5IGNoZWNrIikKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDI6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIG1hY2hpbmUgPSBhcmdzWzBdCisgICAga2FyY2ggPSBhcmdzWzFdCisKKyAgICBpZiBvcHRpb25zLm91dGRpcjoKKyAgICAgICAgYnNwX291dHB1dF9kaXIgPSBvcHRpb25zLm91dGRpcgorICAgIGVsc2U6CisgICAgICAgIGJzcF9vdXRwdXRfZGlyID0gIm1ldGEtIiArIG1hY2hpbmUKKworICAgIGlmIG9wdGlvbnMuZ2l0X2NoZWNrIGFuZCBub3Qgb3B0aW9ucy5wcm9wZXJ0aWVzX2ZpbGU6CisgICAgICAgIHByaW50ICJDaGVja2luZyBiYXNpYyBnaXQgY29ubmVjdGl2aXR5Li4uIgorICAgICAgICBpZiBub3QgdmVyaWZ5X2dpdF9yZXBvKEdJVF9DSEVDS19VUkkpOgorICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IHZlcmlmeSBnaXQgY29ubmVjdGl2aXR5LCBleGl0aW5nXG4iCisgICAgICAgICAgICBwcmludCAiRGV0YWlsczogY291bGRuJ3QgYWNjZXNzICVzIiAlIEdJVF9DSEVDS19VUkkKKyAgICAgICAgICAgIHByaW50ICIgICAgICAgICAodGhpcyBtb3N0IGxpa2VseSBpbmRpY2F0ZXMgYSBuZXR3b3JrIGNvbm5lY3Rpdml0eSBwcm9ibGVtIG9yIgorICAgICAgICAgICAgcHJpbnQgIiAgICAgICAgIGEgbWlzY29uZmlndXJlZCBnaXQgaW50YWxsYXRpb24pIgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICJEb25lLlxuIgorCisgICAgeW9jdG9fYnNwX2NyZWF0ZShtYWNoaW5lLCBrYXJjaCwgc2NyaXB0c19wYXRoLCBic3Bfb3V0cHV0X2Rpciwgb3B0aW9ucy5jb2RlZHVtcCwgb3B0aW9ucy5wcm9wZXJ0aWVzX2ZpbGUpCisKKworZGVmIHlvY3RvX2JzcF9saXN0X3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGxpc3RpbmcgYXZhaWxhYmxlIEJTUCBwcm9wZXJ0aWVzIGFuZAorICAgIHZhbHVlcy4gIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSBic3AuZW5naW5lLnlvY3RvX2JzcF9saXN0KCkKKyAgICAiIiIKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLW8iLCAiLS1vdXRmaWxlIiwgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJwcm9wZXJ0aWVzX2ZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHAgPSAiZHVtcCB0aGUgcG9zc2libGUgdmFsdWVzIGZvciBCU1AgcHJvcGVydGllcyB0byBhIEpTT04gZmlsZSIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbm90IHlvY3RvX2JzcF9saXN0KGFyZ3MsIHNjcmlwdHNfcGF0aCwgb3B0aW9ucy5wcm9wZXJ0aWVzX2ZpbGUpOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJCYWQgbGlzdCBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworCitzdWJjb21tYW5kcyA9IHsKKyAgICAiY3JlYXRlIjogW3lvY3RvX2JzcF9jcmVhdGVfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgIHlvY3RvX2JzcF9jcmVhdGVfdXNhZ2UsCisgICAgICAgICAgICAgICB5b2N0b19ic3BfY3JlYXRlX2hlbHBdLAorICAgICJsaXN0IjogICBbeW9jdG9fYnNwX2xpc3Rfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgIHlvY3RvX2JzcF9saXN0X3VzYWdlLAorICAgICAgICAgICAgICAgeW9jdG9fYnNwX2xpc3RfaGVscF0sCit9CisKKworZGVmIHN0YXJ0X2xvZ2dpbmcobG9nbGV2ZWwpOgorICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsbmFtZSA9ICd5b2N0by1ic3AubG9nJywgZmlsZW1vZGUgPSAndycsIGxldmVsPWxvZ2xldmVsKQorCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHZlcnNpb24gPSAieW9jdG8tYnNwIHZlcnNpb24gJXMiICUgX192ZXJzaW9uX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlID0geW9jdG9fYnNwX3VzYWdlKQorCisgICAgcGFyc2VyLmRpc2FibGVfaW50ZXJzcGVyc2VkX2FyZ3MoKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItRCIsICItLWRlYnVnIiwgZGVzdCA9ICJkZWJ1ZyIsIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gRmFsc2UsIGhlbHAgPSAib3V0cHV0IGRlYnVnIGluZm9ybWF0aW9uIikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGxvZ2xldmVsID0gbG9nZ2luZy5JTkZPCisgICAgaWYgb3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgbG9nbGV2ZWwgPSBsb2dnaW5nLkRFQlVHCisgICAgc3RhcnRfbG9nZ2luZyhsb2dsZXZlbCkKKworICAgIGlmIGxlbihhcmdzKToKKyAgICAgICAgaWYgYXJnc1swXSA9PSAiaGVscCI6CisgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGludm9rZV9zdWJjb21tYW5kKGFyZ3MsIHBhcnNlciwgeW9jdG9fYnNwX2hlbHBfdXNhZ2UsIHN1YmNvbW1hbmRzKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Yyg1KQorICAgIHN5cy5leGl0KHJldCkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWtlcm5lbCBiL3lvY3RvLXBva3kvc2NyaXB0cy95b2N0by1rZXJuZWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzliMjgyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy95b2N0by1rZXJuZWwKQEAgLTAsMCArMSwzOTkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjICd5b2N0by1rZXJuZWwnIGlzIHRoZSBZb2N0byBCU1AgVG9vbCB0aGF0IGhlbHBzIHVzZXJzIG1hbmFnZSBrZXJuZWwKKyMgY29uZmlnIG9wdGlvbnMgYW5kIHBhdGNoZXMgZm9yIGEgWW9jdG8gQlNQLiAgSW52b2tpbmcgaXQgd2l0aG91dCBhbnkKKyMgYXJndW1lbnRzIHdpbGwgZGlzcGxheSBoZWxwIHNjcmVlbnMgZm9yIHRoZSAneW9jdG8ta2VybmVsJyBjb21tYW5kCisjIGFuZCBsaXN0IHRoZSBhdmFpbGFibGUgJ3lvY3RvLWtlcm5lbCcgc3ViY29tbWFuZHMuICBJbnZva2luZyBhCisjIHN1YmNvbW1hbmQgd2l0aG91dCBhbnkgYXJndW1lbnRzIHdpbGwgbGlrZXdpc2UgZGlzcGxheSBoZWxwIHNjcmVlbnMKKyMgZm9yIHRoZSBzcGVjaWZpZWQgc3ViY29tbWFuZC4gIFBsZWFzZSB1c2UgdGhhdCBpbnRlcmZhY2UgZm9yCisjIGRldGFpbGVkIGhlbHAuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gaW50ZWwuY29tPgorIworCitfX3ZlcnNpb25fXyA9ICIwLjEuMCIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBsb2dnaW5nCisKK3NjcmlwdHNfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKSkpCitsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworc3lzLnBhdGggPSBzeXMucGF0aCArIFtsaWJfcGF0aF0KKworZnJvbSBic3AuaGVscCBpbXBvcnQgKgorZnJvbSBic3Aua2VybmVsIGltcG9ydCAqCisKKworZGVmIHlvY3RvX2tlcm5lbF9jb25maWdfbGlzdF9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBsaXN0aW5nIEJTUCBjb25maWcgb3B0aW9ucy4gIFRoZQorICAgIHJlYWwgd29yayBpcyBkb25lIGJ5IGJzcC5rZXJuZWwueW9jdG9fa2VybmVsX2NvbmZpZ19saXN0KCkuCisgICAgIiIiCisgICAgbG9nZ2luZy5kZWJ1ZygieW9jdG9fa2VybmVsX2NvbmZpZ19saXN0X3N1YmNvbW1hbmQiKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICB5b2N0b19rZXJuZWxfY29uZmlnX2xpc3Qoc2NyaXB0c19wYXRoLCBhcmdzWzBdKQorCisKK2RlZiB5b2N0b19rZXJuZWxfY29uZmlnX2FkZF9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBhZGRpbmcgQlNQIGNvbmZpZyBpdGVtcy4gIFRoZSByZWFsIHdvcmsKKyAgICBpcyBkb25lIGJ5IGJzcC5rZXJuZWwueW9jdG9fa2VybmVsX2NvbmZpZ19hZGQoKS4KKyAgICAiIiIKKyAgICBsb2dnaW5nLmRlYnVnKCJ5b2N0b19rZXJuZWxfY29uZmlnX2FkZF9zdWJjb21tYW5kIikKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgPCAyOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBtYWNoaW5lID0gYXJncy5wb3AoMCkKKyAgICB5b2N0b19rZXJuZWxfY29uZmlnX2FkZChzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGFyZ3MpCisKKworZGVmIHlvY3RvX2tlcm5lbF9jb25maWdfcm1fc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgcmVtb3ZpbmcgQlNQIGNvbmZpZyBpdGVtcy4gIFRoZSByZWFsCisgICAgd29yayBpcyBkb25lIGJ5IGJzcC5rZXJuZWwueW9jdG9fa2VybmVsX2NvbmZpZ19ybSgpLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoInlvY3RvX2tlcm5lbF9jb25maWdfcm1fc3ViY29tbWFuZCIpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHlvY3RvX2tlcm5lbF9jb25maWdfcm0oc2NyaXB0c19wYXRoLCBhcmdzWzBdKQorCisKK2RlZiB5b2N0b19rZXJuZWxfcGF0Y2hfbGlzdF9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBsaXN0aW5nIEJTUCAoU1JDX1VSSSBwYXRjaGVzLiAgVGhlIHJlYWwKKyAgICB3b3JrIGlzIGRvbmUgYnkgYnNwLmtlcm5lbC55b2N0b19rZXJuZWxfcGF0Y2hfbGlzdCgpLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoInlvY3RvX2tlcm5lbF9wYXRjaF9saXN0X3N1YmNvbW1hbmQiKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICB5b2N0b19rZXJuZWxfcGF0Y2hfbGlzdChzY3JpcHRzX3BhdGgsIGFyZ3NbMF0pCisKKworZGVmIHlvY3RvX2tlcm5lbF9wYXRjaF9hZGRfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgYWRkaW5nIEJTUCBwYXRjaGVzLiAgVGhlIHJlYWwgd29yayBpcworICAgIGRvbmUgYnkgYnNwLmtlcm5lbC55b2N0b19rZXJuZWxfcGF0Y2hfYWRkKCkuCisgICAgIiIiCisgICAgbG9nZ2luZy5kZWJ1ZygieW9jdG9fa2VybmVsX3BhdGNoX2FkZF9zdWJjb21tYW5kIikKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgPCAyOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBtYWNoaW5lID0gYXJncy5wb3AoMCkKKyAgICB5b2N0b19rZXJuZWxfcGF0Y2hfYWRkKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgYXJncykKKworCitkZWYgeW9jdG9fa2VybmVsX3BhdGNoX3JtX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIHJlbW92aW5nIEJTUCBwYXRjaGVzLiAgVGhlIHJlYWwgd29yayBpcworICAgIGRvbmUgYnkgYnNwLmtlcm5lbC55b2N0b19rZXJuZWxfcGF0Y2hfcm0oKS4KKyAgICAiIiIKKyAgICBsb2dnaW5nLmRlYnVnKCJ5b2N0b19rZXJuZWxfcGF0Y2hfcm1fc3ViY29tbWFuZCIpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHlvY3RvX2tlcm5lbF9wYXRjaF9ybShzY3JpcHRzX3BhdGgsIGFyZ3NbMF0pCisKKworZGVmIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2xpc3Rfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgbGlzdGluZyB0aGUgQlNQIGZlYXR1cmVzIHRoYXQgYXJlIGJlaW5nCisgICAgdXNlZCBieSB0aGUgQlNQLiAgVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5CisgICAgYnNwLmtlcm5lbC55b2N0b19rZXJuZWxfZmVhdHVyZV9saXN0KCkuCisgICAgIiIiCisgICAgbG9nZ2luZy5kZWJ1ZygieW9jdG9fa2VybmVsX2ZlYXR1cmVfbGlzdF9zdWJjb21tYW5kIikKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgIT0gMToKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfbGlzdChzY3JpcHRzX3BhdGgsIGFyZ3NbMF0pCisKKworZGVmIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2FkZF9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBhZGRpbmcgdGhlIHVzZSBvZiBrZXJuZWwgZmVhdHVyZXMgdG8gYQorICAgIEJTUC4gIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9mZWF0dXJlX2FkZCgpLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoInlvY3RvX2tlcm5lbF9mZWF0dXJlX2FkZF9zdWJjb21tYW5kIikKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgPCAyOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBtYWNoaW5lID0gYXJncy5wb3AoMCkKKyAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9hZGQoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBhcmdzKQorCisKK2RlZiB5b2N0b19rZXJuZWxfZmVhdHVyZV9ybV9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciByZW1vdmluZyB0aGUgdXNlIG9mIGtlcm5lbCBmZWF0dXJlcyBmcm9tCisgICAgYSBCU1AuICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkgYnNwLmtlcm5lbC55b2N0b19rZXJuZWxfZmVhdHVyZV9ybSgpLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoInlvY3RvX2tlcm5lbF9mZWF0dXJlX3JtX3N1YmNvbW1hbmQiKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9ybShzY3JpcHRzX3BhdGgsIGFyZ3NbMF0pCisKKworZGVmIHlvY3RvX2tlcm5lbF9hdmFpbGFibGVfZmVhdHVyZXNfbGlzdF9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBsaXN0aW5nIGFsbCB0aGUga2VybmVsIGZlYXR1cmVzCisgICAgYXZhaWxhYmxlIGZvciB1c2UgaW4gYSBCU1AuICBUaGlzIGluY2x1ZGVzIHRoZSBmZWF0dXJlcyBwcmVzZW50IGluCisgICAgdGhlIG1ldGEgYnJhbmNoKGVzKSBvZiB0aGUgcG9pbnRlZC10byByZXBvKHMpIGFzIHdlbGwgYXMgdGhlIGxvY2FsCisgICAgZmVhdHVyZXMgYWRkZWQgaW4gcmVjaXBlLXNwYWNlIHRvIHRoZSBjdXJyZW50IEJTUCBhcyB3ZWxsLiAgVGhlCisgICAgcmVhbCB3b3JrIGlzIGRvbmUgYnkgYnNwLmtlcm5lbC55b2N0b19rZXJuZWxfYXZhaWxhYmxlX2ZlYXR1cmVzX2xpc3QoKS4KKyAgICAiIiIKKyAgICBsb2dnaW5nLmRlYnVnKCJ5b2N0b19rZXJuZWxfZmVhdHVyZV9hdmFpbGFibGVfZmVhdHVyZXNfbGlzdF9zdWJjb21tYW5kIikKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgIT0gMToKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgeW9jdG9fa2VybmVsX2F2YWlsYWJsZV9mZWF0dXJlc19saXN0KHNjcmlwdHNfcGF0aCwgYXJnc1swXSkKKworCitkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzY3JpYmVfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgbGlzdGluZyB0aGUgZGVzY3JpcHRpb24gb2YgYSBzcGVjaWZpYworICAgIGtlcm5lbCBmZWF0dXJlIGF2YWlsYWJsZSBmb3IgdXNlIGluIGEgQlNQLiAgVGhpcyBpbmNsdWRlcyB0aGUKKyAgICBmZWF0dXJlcyBwcmVzZW50IGluIHRoZSBtZXRhIGJyYW5jaChlcykgb2YgdGhlIHBvaW50ZWQtdG8gcmVwbyhzKQorICAgIGFzIHdlbGwgYXMgdGhlIGxvY2FsIGZlYXR1cmVzIGFkZGVkIGluIHJlY2lwZS1zcGFjZSB0byB0aGUgY3VycmVudAorICAgIEJTUCBhcyB3ZWxsLiAgVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5CisgICAgYnNwLmtlcm5lbC55b2N0b19rZXJuZWxfZmVhdHVyZV9kZXNjcmliZSgpLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoInlvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc2NyaWJlX3N1YmNvbW1hbmQiKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSAhPSAyOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXNjcmliZShzY3JpcHRzX3BhdGgsIGFyZ3NbMF0sIGFyZ3NbMV0pCisKKworZGVmIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2NyZWF0ZV9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBjcmVhdGluZyBhIHJlY2lwZS1zcGFjZSBrZXJuZWwgZmVhdHVyZQorICAgIGluIGEgQlNQLiAgVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5CisgICAgYnNwLmtlcm5lbC55b2N0b19rZXJuZWxfZmVhdHVyZV9jcmVhdGUoKS4KKyAgICAiIiIKKyAgICBsb2dnaW5nLmRlYnVnKCJ5b2N0b19rZXJuZWxfZmVhdHVyZV9jcmVhdGVfc3ViY29tbWFuZCIpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpIDwgNDoKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgbWFjaGluZSA9IGFyZ3MucG9wKDApCisgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfY3JlYXRlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgYXJncykKKworCitkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzdHJveV9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciByZW1vdmluZyBhIHJlY2lwZS1zcGFjZSBrZXJuZWwgZmVhdHVyZQorICAgIGZyb20gYSBCU1AuICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkKKyAgICBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc3Ryb3koKS4KKyAgICAiIiIKKyAgICBsb2dnaW5nLmRlYnVnKCJ5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXN0cm95X3N1YmNvbW1hbmQiKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSAhPSAyOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXN0cm95KHNjcmlwdHNfcGF0aCwgYXJnc1swXSwgYXJnc1sxXSkKKworCitzdWJjb21tYW5kcyA9IHsKKyAgICAiY29uZmlnLWxpc3QiOiBbeW9jdG9fa2VybmVsX2NvbmZpZ19saXN0X3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9jb25maWdfbGlzdF91c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2NvbmZpZ19saXN0X2hlbHBdLAorICAgICJjb25maWctYWRkIjogW3lvY3RvX2tlcm5lbF9jb25maWdfYWRkX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2NvbmZpZ19hZGRfdXNhZ2UsCisgICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2NvbmZpZ19hZGRfaGVscF0sCisgICAgImNvbmZpZy1ybSI6IFt5b2N0b19rZXJuZWxfY29uZmlnX3JtX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfY29uZmlnX3JtX3VzYWdlLAorICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2NvbmZpZ19ybV9oZWxwXSwKKyAgICAicGF0Y2gtbGlzdCI6IFt5b2N0b19rZXJuZWxfcGF0Y2hfbGlzdF9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9wYXRjaF9saXN0X3VzYWdlLAorICAgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9wYXRjaF9saXN0X2hlbHBdLAorICAgICJwYXRjaC1hZGQiOiBbeW9jdG9fa2VybmVsX3BhdGNoX2FkZF9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX3BhdGNoX2FkZF91c2FnZSwKKyAgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9wYXRjaF9hZGRfaGVscF0sCisgICAgInBhdGNoLXJtIjogW3lvY3RvX2tlcm5lbF9wYXRjaF9ybV9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfcGF0Y2hfcm1fdXNhZ2UsCisgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9wYXRjaF9ybV9oZWxwXSwKKyAgICAiZmVhdHVyZS1saXN0IjogW3lvY3RvX2tlcm5lbF9mZWF0dXJlX2xpc3Rfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9saXN0X3VzYWdlLAorICAgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2xpc3RfaGVscF0sCisgICAgImZlYXR1cmUtYWRkIjogW3lvY3RvX2tlcm5lbF9mZWF0dXJlX2FkZF9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfYWRkX3VzYWdlLAorICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfYWRkX2hlbHBdLAorICAgICJmZWF0dXJlLXJtIjogW3lvY3RvX2tlcm5lbF9mZWF0dXJlX3JtX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX3JtX3VzYWdlLAorICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9ybV9oZWxwXSwKKyAgICAiZmVhdHVyZXMtbGlzdCI6IFt5b2N0b19rZXJuZWxfYXZhaWxhYmxlX2ZlYXR1cmVzX2xpc3Rfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2F2YWlsYWJsZV9mZWF0dXJlc19saXN0X3VzYWdlLAorICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfYXZhaWxhYmxlX2ZlYXR1cmVzX2xpc3RfaGVscF0sCisgICAgImZlYXR1cmUtZGVzY3JpYmUiOiBbeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzY3JpYmVfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzY3JpYmVfdXNhZ2UsCisgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc2NyaWJlX2hlbHBdLAorICAgICJmZWF0dXJlLWNyZWF0ZSI6IFt5b2N0b19rZXJuZWxfZmVhdHVyZV9jcmVhdGVfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfY3JlYXRlX3VzYWdlLAorICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9jcmVhdGVfaGVscF0sCisgICAgImZlYXR1cmUtZGVzdHJveSI6IFt5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXN0cm95X3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc3Ryb3lfdXNhZ2UsCisgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc3Ryb3lfaGVscF0sCit9CisKKworZGVmIHN0YXJ0X2xvZ2dpbmcobG9nbGV2ZWwpOgorICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsbmFtZSA9ICd5b2N0by1rZXJuZWwubG9nJywgZmlsZW1vZGUgPSAndycsIGxldmVsPWxvZ2xldmVsKQorCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHZlcnNpb24gPSAieW9jdG8ta2VybmVsIHZlcnNpb24gJXMiICUgX192ZXJzaW9uX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlID0geW9jdG9fa2VybmVsX3VzYWdlKQorCisgICAgcGFyc2VyLmRpc2FibGVfaW50ZXJzcGVyc2VkX2FyZ3MoKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItRCIsICItLWRlYnVnIiwgZGVzdCA9ICJkZWJ1ZyIsIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gRmFsc2UsIGhlbHAgPSAib3V0cHV0IGRlYnVnIGluZm9ybWF0aW9uIikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGxvZ2xldmVsID0gbG9nZ2luZy5JTkZPCisgICAgaWYgb3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgbG9nbGV2ZWwgPSBsb2dnaW5nLkRFQlVHCisgICAgc3RhcnRfbG9nZ2luZyhsb2dsZXZlbCkKKworICAgIGlmIGxlbihhcmdzKToKKyAgICAgICAgaWYgYXJnc1swXSA9PSAiaGVscCI6CisgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgIHNjID0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2MgPSAwCisKKyAgICAgICAgaWYgYXJnc1tzY10gPT0gImNvbmZpZyIgb3IgYXJnc1tzY10gPT0gInBhdGNoIiBvciBcCisgICAgICAgICAgICAgICAgYXJnc1tzY10gPT0gImZlYXR1cmUiIG9yIGFyZ3Nbc2NdID09ICJmZWF0dXJlcyI6CisgICAgICAgICAgICBpZiBsZW4oYXJncykgPCAyICsgc2M6CisgICAgICAgICAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICBhcmdzW3NjXSArPSAiLSIgKyBhcmdzW3NjICsgMV0KKyAgICAgICAgICAgIGFyZ3MucG9wKHNjICsgMSkKKworICAgIGludm9rZV9zdWJjb21tYW5kKGFyZ3MsIHBhcnNlciwgeW9jdG9fa2VybmVsX2hlbHBfdXNhZ2UsIHN1YmNvbW1hbmRzKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Yyg1KQorICAgIHN5cy5leGl0KHJldCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy95b2N0by1sYXllciBiL3lvY3RvLXBva3kvc2NyaXB0cy95b2N0by1sYXllcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41M2QyYWFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWxheWVyCkBAIC0wLDAgKzEsMTQ3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyAneW9jdG8tbGF5ZXInIGlzIHRoZSBZb2N0byBUb29sIHRoYXQgaGVscHMgdXNlcnMgY3JlYXRlIGEgbmV3IFlvY3RvCisjIGxheWVyLiAgSW52b2tpbmcgaXQgd2l0aG91dCBhbnkgYXJndW1lbnRzIHdpbGwgZGlzcGxheSBoZWxwIHNjcmVlbnMKKyMgZm9yIHRoZSAneW9jdG8tbGF5ZXInIGNvbW1hbmQgYW5kIGxpc3QgdGhlIGF2YWlsYWJsZSAneW9jdG8tbGF5ZXInCisjIHN1YmNvbW1hbmRzLiAgSW52b2tpbmcgYSBzdWJjb21tYW5kIHdpdGhvdXQgYW55IGFyZ3VtZW50cyB3aWxsCisjIGxpa2V3aXNlIGRpc3BsYXkgaGVscCBzY3JlZW5zIGZvciB0aGUgc3BlY2lmaWVkIHN1YmNvbW1hbmQuICBQbGVhc2UKKyMgdXNlIHRoYXQgaW50ZXJmYWNlIGZvciBkZXRhaWxlZCBoZWxwLgorIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGludGVsLmNvbT4KKyMKKworX192ZXJzaW9uX18gPSAiMC4xLjAiCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgbG9nZ2luZworCitzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpKQorbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKK3N5cy5wYXRoID0gc3lzLnBhdGggKyBbbGliX3BhdGhdCisKK2Zyb20gYnNwLmhlbHAgaW1wb3J0ICoKK2Zyb20gYnNwLmVuZ2luZSBpbXBvcnQgKgorCisKK2RlZiB5b2N0b19sYXllcl9jcmVhdGVfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgbGF5ZXIgY3JlYXRpb24uICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkKKyAgICBic3AuZW5naW5lLnlvY3RvX2xheWVyX2NyZWF0ZSgpCisgICAgIiIiCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1vIiwgIi0tb3V0ZGlyIiwgZGVzdCA9ICJvdXRkaXIiLCBhY3Rpb24gPSAic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHAgPSAibmFtZSBvZiBsYXllciBkaXIgdG8gY3JlYXRlIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWkiLCAiLS1pbmZpbGUiLCBkZXN0ID0gInByb3BlcnRpZXNfZmlsZSIsIGFjdGlvbiA9ICJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJuYW1lIG9mIGZpbGUgY29udGFpbmluZyB0aGUgdmFsdWVzIGZvciBsYXllciBpbnB1dCBwcm9wZXJ0aWVzIGFzIGEgSlNPTiBmaWxlIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWMiLCAiLS1jb2RlZHVtcCIsIGRlc3QgPSAiY29kZWR1bXAiLCBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IEZhbHNlLCBoZWxwID0gImR1bXAgdGhlIGdlbmVyYXRlZCBjb2RlIHRvIGxheWVyZ2VuLm91dCIpCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSA8IDEgb3IgbGVuKGFyZ3MpID4gMjoKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgbGF5ZXJfbmFtZSA9IGFyZ3NbMF0KKyAgICBwcm9wZXJ0aWVzID0gIiIKKworICAgIGlmIGxlbihhcmdzKSA9PSAyOgorICAgICAgICBsYXllcl9wcmlvcml0eSA9IGFyZ3NbMV0KKyAgICAgICAgcHJvcGVydGllcyA9ICd7ImxheWVyX3ByaW9yaXR5IjoiJyArIGxheWVyX3ByaW9yaXR5ICsgJyJ9JworCisgICAgaWYgb3B0aW9ucy5vdXRkaXI6CisgICAgICAgIGxheWVyX291dHB1dF9kaXIgPSBvcHRpb25zLm91dGRpcgorICAgIGVsc2U6CisgICAgICAgIGxheWVyX291dHB1dF9kaXIgPSAibWV0YS0iICsgbGF5ZXJfbmFtZQorCisgICAgeW9jdG9fbGF5ZXJfY3JlYXRlKGxheWVyX25hbWUsIHNjcmlwdHNfcGF0aCwgbGF5ZXJfb3V0cHV0X2Rpciwgb3B0aW9ucy5jb2RlZHVtcCwgb3B0aW9ucy5wcm9wZXJ0aWVzX2ZpbGUsIHByb3BlcnRpZXMpCisKKworZGVmIHlvY3RvX2xheWVyX2xpc3Rfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgbGlzdGluZyBhdmFpbGFibGUgbGF5ZXIgcHJvcGVydGllcyBhbmQKKyAgICB2YWx1ZXMuICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkgYnNwLmVuZ2luZS55b2N0b19sYXllcl9saXN0KCkKKyAgICAiIiIKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLW8iLCAiLS1vdXRmaWxlIiwgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJwcm9wZXJ0aWVzX2ZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHAgPSAiZHVtcCB0aGUgcG9zc2libGUgdmFsdWVzIGZvciBsYXllciBwcm9wZXJ0aWVzIHRvIGEgSlNPTiBmaWxlIikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBub3QgeW9jdG9fbGF5ZXJfbGlzdChhcmdzLCBzY3JpcHRzX3BhdGgsIG9wdGlvbnMucHJvcGVydGllc19maWxlKToKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiQmFkIGxpc3QgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKworc3ViY29tbWFuZHMgPSB7CisgICAgImNyZWF0ZSI6IFt5b2N0b19sYXllcl9jcmVhdGVfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgIHlvY3RvX2xheWVyX2NyZWF0ZV91c2FnZSwKKyAgICAgICAgICAgICAgIHlvY3RvX2xheWVyX2NyZWF0ZV9oZWxwXSwKKyAgICAibGlzdCI6ICAgW3lvY3RvX2xheWVyX2xpc3Rfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgIHlvY3RvX2xheWVyX2xpc3RfdXNhZ2UsCisgICAgICAgICAgICAgICB5b2N0b19sYXllcl9saXN0X2hlbHBdLAorfQorCisKK2RlZiBzdGFydF9sb2dnaW5nKGxvZ2xldmVsKToKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbG5hbWUgPSAneW9jdG8tbGF5ZXIubG9nJywgZmlsZW1vZGUgPSAndycsIGxldmVsPWxvZ2xldmVsKQorCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHZlcnNpb24gPSAieW9jdG8tbGF5ZXIgdmVyc2lvbiAlcyIgJSBfX3ZlcnNpb25fXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UgPSB5b2N0b19sYXllcl91c2FnZSkKKworICAgIHBhcnNlci5kaXNhYmxlX2ludGVyc3BlcnNlZF9hcmdzKCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLUQiLCAiLS1kZWJ1ZyIsIGRlc3QgPSAiZGVidWciLCBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IEZhbHNlLCBoZWxwID0gIm91dHB1dCBkZWJ1ZyBpbmZvcm1hdGlvbiIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBsb2dsZXZlbCA9IGxvZ2dpbmcuSU5GTworICAgIGlmIG9wdGlvbnMuZGVidWc6CisgICAgICAgIGxvZ2xldmVsID0gbG9nZ2luZy5ERUJVRworICAgIHN0YXJ0X2xvZ2dpbmcobG9nbGV2ZWwpCisKKyAgICBpZiBsZW4oYXJncyk6CisgICAgICAgIGlmIGFyZ3NbMF0gPT0gImhlbHAiOgorICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDE6CisgICAgICAgICAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpbnZva2Vfc3ViY29tbWFuZChhcmdzLCBwYXJzZXIsIHlvY3RvX2xheWVyX2hlbHBfdXNhZ2UsIHN1YmNvbW1hbmRzKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Yyg1KQorICAgIHN5cy5leGl0KHJldCkKKwo=